ZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9SRUFETUUgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTUyNjc3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi1Qb2t5Ci09PT09Ci0KLVBva3kgaXMgYW4gaW50ZWdyYXRpb24gb2YgdmFyaW91cyBjb21wb25lbnRzIHRvIGZvcm0gYSBjb21wbGV0ZSBwcmVwYWNrYWdlZAotYnVpbGQgc3lzdGVtIGFuZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4gSXQgZmVhdHVyZXMgc3VwcG9ydCBmb3IgYnVpbGRpbmcKLWN1c3RvbWlzZWQgZW1iZWRkZWQgZGV2aWNlIHN0eWxlIGltYWdlcy4gVGhlcmUgYXJlIHJlZmVyZW5jZSBkZW1vIGltYWdlcwotZmVhdHVyaW5nIGEgWDExL01hdGNoYm94L0dUSyB0aGVtZWQgVUkgY2FsbGVkIFNhdG8uIFRoZSBzeXN0ZW0gc3VwcG9ydHMKLWNyb3NzLWFyY2hpdGVjdHVyZSBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCB1c2luZyBRRU1VIGVtdWxhdGlvbiBhbmQgYQotc3RhbmRhbG9uZSB0b29sY2hhaW4gYW5kIFNESyB3aXRoIElERSBpbnRlZ3JhdGlvbi4KLQotQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB0aGUgc3BlY2lmaWNzIG9mIGhhcmR3YXJlIHRoYXQgUG9reSBzdXBwb3J0cwotaXMgYXZhaWxhYmxlIGluIFJFQURNRS5oYXJkd2FyZS4gRnVydGhlciBoYXJkd2FyZSBzdXBwb3J0IGNhbiBlYXNpbHkgYmUgYWRkZWQKLWluIHRoZSBmb3JtIG9mIGxheWVycyB3aGljaCBleHRlbmQgdGhlIHN5c3RlbXMgY2FwYWJpbGl0aWVzIGluIGEgbW9kdWxhciB3YXkuCi0KLUFzIGFuIGludGVncmF0aW9uIGxheWVyIFBva3kgY29uc2lzdHMgb2Ygc2V2ZXJhbCB1cHN0cmVhbSBwcm9qZWN0cyBzdWNoIGFzIAotQml0QmFrZSwgT3BlbkVtYmVkZGVkLUNvcmUsIFlvY3RvIGRvY3VtZW50YXRpb24gYW5kIHZhcmlvdXMgc291cmNlcyBvZiBpbmZvcm1hdGlvbiAKLWUuZy4gZm9yIHRoZSBoYXJkd2FyZSBzdXBwb3J0LiBQb2t5IGlzIGluIHR1cm4gYSBjb21wb25lbnQgb2YgdGhlIFlvY3RvIFByb2plY3QuCi0KLVRoZSBZb2N0byBQcm9qZWN0IGhhcyBleHRlbnNpdmUgZG9jdW1lbnRhdGlvbiBhYm91dCB0aGUgc3lzdGVtIGluY2x1ZGluZyBhIAotcmVmZXJlbmNlIG1hbnVhbCB3aGljaCBjYW4gYmUgZm91bmQgYXQ6Ci0gICAgaHR0cDovL3lvY3RvcHJvamVjdC5vcmcvZG9jdW1lbnRhdGlvbgotCi1PcGVuRW1iZWRkZWQtQ29yZSBpcyBhIGxheWVyIGNvbnRhaW5pbmcgdGhlIGNvcmUgbWV0YWRhdGEgZm9yIGN1cnJlbnQgdmVyc2lvbnMKLW9mIE9wZW5FbWJlZGRlZC4gSXQgaXMgZGlzdHJvLWxlc3MgKGNhbiBidWlsZCBhIGZ1bmN0aW9uYWwgaW1hZ2Ugd2l0aAotRElTVFJPID0gIm5vZGlzdHJvIikgYW5kIGNvbnRhaW5zIG9ubHkgZW11bGF0ZWQgbWFjaGluZSBzdXBwb3J0LgotCi1Gb3IgaW5mb3JtYXRpb24gYWJvdXQgT3BlbkVtYmVkZGVkLCBzZWUgdGhlIE9wZW5FbWJlZGRlZCB3ZWJzaXRlOgotICAgIGh0dHA6Ly93d3cub3BlbmVtYmVkZGVkLm9yZy8KLQotV2hlcmUgdG8gU2VuZCBQYXRjaGVzCi09PT09PT09PT09PT09PT09PT09PT0KLQotQXMgUG9reSBpcyBhbiBpbnRlZ3JhdGlvbiByZXBvc2l0b3J5IChidWlsdCB1c2luZyBhIHRvb2wgY2FsbGVkIGNvbWJvLWxheWVyKSwKLXBhdGNoZXMgYWdhaW5zdCB0aGUgdmFyaW91cyBjb21wb25lbnRzIHNob3VsZCBiZSBzZW50IHRvIHRoZWlyIHJlc3BlY3RpdmUKLXVwc3RyZWFtczoKLQotYml0YmFrZToKLSAgICBHaXQgcmVwb3NpdG9yeTogaHR0cDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UvCi0gICAgTWFpbGluZyBsaXN0OiBiaXRiYWtlLWRldmVsQGxpc3RzLm9wZW5lbWJlZGRlZC5vcmcKLQotZG9jdW1lbnRhdGlvbjoKLSAgICBHaXQgcmVwb3NpdG9yeTogaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kveW9jdG8tZG9jcy8KLSAgICBNYWlsaW5nIGxpc3Q6IHlvY3RvQHlvY3RvcHJvamVjdC5vcmcKLQotbWV0YS1wb2t5LCBtZXRhLXlvY3RvLWJzcDoKLSAgICBHaXQgcmVwb3NpdG9yeTogaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvbWV0YS15b2N0bygtYnNwKQotICAgIE1haWxpbmcgbGlzdDogcG9reUB5b2N0b3Byb2plY3Qub3JnCi0KLUV2ZXJ5dGhpbmcgZWxzZSBzaG91bGQgYmUgc2VudCB0byB0aGUgT3BlbkVtYmVkZGVkIENvcmUgbWFpbGluZyBsaXN0LiAgSWYgaW4KLWRvdWJ0LCBjaGVjayB0aGUgb2UtY29yZSBnaXQgcmVwb3NpdG9yeSBmb3IgdGhlIGNvbnRlbnQgeW91IGludGVuZCB0byBtb2RpZnkuCi1CZWZvcmUgc2VuZGluZywgYmUgc3VyZSB0aGUgcGF0Y2hlcyBhcHBseSBjbGVhbmx5IHRvIHRoZSBjdXJyZW50IG9lLWNvcmUgZ2l0Ci1yZXBvc2l0b3J5LgotCi0gICAgR2l0IHJlcG9zaXRvcnk6IGh0dHA6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZS8KLSAgICBNYWlsaW5nIGxpc3Q6IG9wZW5lbWJlZGRlZC1jb3JlQGxpc3RzLm9wZW5lbWJlZGRlZC5vcmcKLQotTm90ZTogVGhlIHNjcmlwdHMgZGlyZWN0b3J5IHNob3VsZCBiZSB0cmVhdGVkIHdpdGggZXh0cmEgY2FyZSBhcyBpdCBpcyBhIG1peCBvZgotb2UtY29yZSBhbmQgcG9reS1zcGVjaWZpYyBmaWxlcy4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9SRUFETUUuTFNCIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L1JFQURNRS5MU0IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlkY2EzZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9SRUFETUUuTFNCCkBAIC0wLDAgKzEsMjUgQEAKK09FLUNvcmUgYWltcyB0byBiZSBhYmxlIHRvIHByb3ZpZGUgYmFzaWMgTFNCIGNvbXBhdGlibGUgaW1hZ2VzLiBUaGVyZQorYXJlIHNvbWUgY2hhbGxlbmdlcyBmb3IgT0UgYXMgTFNCIGlzbid0IGFsd2F5cyAxMDAlIHJlbGV2YW50IHRvIGl0cwordGFyZ2V0IGVtYmVkZGVkIGFuZCBJb1QgYXVkaWVuY2VzLiAKKworT25lIGNoYWxsZW5nZSBpcyB0aGF0IHRoZSBMU0Igc3BlYyBpcyBubyBsb25nZXIgYmVpbmcgYWN0aXZlbHkKK2RldmVsb3BlZCBbaHR0cHM6Ly9naXRodWIuY29tL0xpbnV4U3RhbmRhcmRCYXNlL2xzYl0gYW5kIGhhcyAKK2NvbXBvbmVudHMgd2hpY2ggYXJlIGVuZCBvZiBsaWZlIG9yIHNpZ25pZmljYW50bHkgZGF0ZWQuIE9FIAordGhlcmVmb3JlIHByb3ZpZGVzIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgZm9sbG93aW5nIGNhdmVhdHM6CisKKyogUXQ0IGlzIHByb3ZpZGVkIGJ5IHRoZSBzZXBhcmF0ZSBtZXRhLXF0NCBsYXllci4gSXRzIG5vdGVkIHRoYXQgUXQ0IAorICBpcyBlbmQgb2YgbGlmZSBhbmQgdGhpcyBpc24ndCBzb21ldGhpbmcgdGhlIGNvcmUgcHJvamVjdCByZWd1bGFybHkgCisgIHRlc3RzIGFueSBsb25nZXIuIFVzZXJzIGFyZSByZWNvbW1lbmRlZCB0byBncm91cCB0b2dldGhlciB0byBzdXBwb3J0CisgIG1haW50ZW5hbmNlIG9mIHRoYXQgbGF5ZXIuIFtodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9tZXRhLXF0NC9dCisKKyogbWFpbHggaGFzIGJlZW4gZHJvcHBlZCBzaW5jZSBpdHMgbm8gbG9uZ2VyIGJlaW5nIGRldmVsb3BlZCB1cHN0cmVhbSAKKyAgYW5kIHRoZXJlIGFyZSBiZXR0ZXIsIG1vcmUgbW9kZXJuIHJlcGxhY2VtZW50cyBzdWNoIGFzIHMtbmFpbCAKKyAgKGh0dHA6Ly9zZGFvZGVuLmV1L2NvZGUuaHRtbCkgb3IgbWFpbHV0aWxzIChodHRwOi8vbWFpbHV0aWxzLm9yZy8pLgorCisqIEEgZmV3IHBlcmwgbW9kdWxlcyB0aGF0IHdlcmUgcmVxdWlyZWQgYnkgTFNCIDQueCBhcmVuJ3QgcHJvdmlkZWQ6CisgIGxpYmNsYXNzLWlzYSwgbGliZW52LCBsaWJkdW1wdmFsdWUsIGxpYmZpbGUtY2hlY2t0cmVlLAorICBsaWJpMThuLWNvbGxhdGUsIGxpYnBvZC1wbGFpbmVyLgorCisqIGxpYnBuZyAxLjIgaXNuJ3QgcHJvdmlkZWQ7IG9lLWNvcmUgaW5jbHVkZXMgdGhlIGxhdGVzdCByZWxlYXNlIG9mIGxpYnBuZworICBpbnN0ZWFkLgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvUkVBRE1FLmhhcmR3YXJlIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L1JFQURNRS5oYXJkd2FyZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZjY2Y3OC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvUkVBRE1FLmhhcmR3YXJlCisrKyAvZGV2L251bGwKQEAgLTEsNDI5ICswLDAgQEAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUG9reSBIYXJkd2FyZSBSRUFETUUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT0KLQotVGhpcyBmaWxlIGdpdmVzIGRldGFpbHMgYWJvdXQgdXNpbmcgUG9reSB3aXRoIHRoZSByZWZlcmVuY2UgbWFjaGluZXMKLXN1cHBvcnRlZCBvdXQgb2YgdGhlIGJveC4gQSBmdWxsIGxpc3Qgb2Ygc3VwcG9ydGVkIHJlZmVyZW5jZSB0YXJnZXQgbWFjaGluZXMKLWNhbiBiZSBmb3VuZCBieSBsb29raW5nIGluIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXM6Ci0KLSAgIG1ldGEvY29uZi9tYWNoaW5lLwotICAgbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lLwotCi1JZiB5b3UgYXJlIGluIGRvdWJ0IGFib3V0IHVzaW5nIFBva3kvT3BlbkVtYmVkZGVkIHdpdGggeW91ciBoYXJkd2FyZSwgY29uc3VsdAotdGhlIGRvY3VtZW50YXRpb24gZm9yIHlvdXIgYm9hcmQvZGV2aWNlLgotCi1TdXBwb3J0IGZvciBhZGRpdGlvbmFsIGRldmljZXMgaXMgbm9ybWFsbHkgYWRkZWQgYnkgY3JlYXRpbmcgQlNQIGxheWVycyAtIGZvcgotbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIHRoZSBZb2N0byBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MKLUd1aWRlIC0gZG9jdW1lbnRhdGlvbiBzb3VyY2UgaXMgaW4gZG9jdW1lbnRhdGlvbi9ic3BndWlkZSBvciBkb3dubG9hZCB0aGUgUERGCi1mcm9tOgotCi0gICBodHRwOi8veW9jdG9wcm9qZWN0Lm9yZy9kb2N1bWVudGF0aW9uCi0KLVN1cHBvcnQgZm9yIHBoeXNpY2FsIHJlZmVyZW5jZSBoYXJkd2FyZSBoYXMgbm93IGJlZW4gc3BsaXQgb3V0IGludG8gYQotbWV0YS15b2N0by1ic3AgbGF5ZXIgd2hpY2ggY2FuIGJlIHJlbW92ZWQgc2VwYXJhdGVseSBmcm9tIG90aGVyIGxheWVycyBpZiBub3QKLW5lZWRlZC4KLQotCi1RRU1VIEVtdWxhdGlvbiBUYXJnZXRzCi09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRvIHNpbXBsaWZ5IGRldmVsb3BtZW50LCB0aGUgYnVpbGQgc3lzdGVtIHN1cHBvcnRzIGJ1aWxkaW5nIGltYWdlcyB0bwotd29yayB3aXRoIHRoZSBRRU1VIGVtdWxhdG9yIGluIHN5c3RlbSBlbXVsYXRpb24gbW9kZS4gU2V2ZXJhbCBhcmNoaXRlY3R1cmVzCi1hcmUgY3VycmVudGx5IHN1cHBvcnRlZDoKLQotICAqIEFSTSAocWVtdWFybSkKLSAgKiB4ODYgKHFlbXV4ODYpCi0gICogeDg2LTY0IChxZW11eDg2LTY0KQotICAqIFBvd2VyUEMgKHFlbXVwcGMpCi0gICogTUlQUyAocWVtdW1pcHMpCi0KLVVzZSBvZiB0aGUgUUVNVSBpbWFnZXMgaXMgY292ZXJlZCBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgotVGhlIGFwcHJvcHJpYXRlIE1BQ0hJTkUgdmFyaWFibGUgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgdGFyZ2V0IGlzIGdpdmVuCi1pbiBicmFja2V0cy4KLQotCi1IYXJkd2FyZSBSZWZlcmVuY2UgQm9hcmRzCi09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRoZSBmb2xsb3dpbmcgYm9hcmRzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIG1ldGEteW9jdG8tYnNwIGxheWVyOgotCi0gICogVGV4YXMgSW5zdHJ1bWVudHMgQmVhZ2xlYm9uZSAoYmVhZ2xlYm9uZSkKLSAgKiBGcmVlc2NhbGUgTVBDODMxNUUtUkRCIChtcGM4MzE1ZS1yZGIpCi0KLUZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgYm9hcmQncyBzZWN0aW9uIGJlbG93LiBUaGUgYXBwcm9wcmlhdGUgTUFDSElORQotdmFyaWFibGUgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgYm9hcmQgaXMgZ2l2ZW4gaW4gYnJhY2tldHMuCi0KLVJlZmVyZW5jZSBCb2FyZCBNYWludGVuYW5jZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVNlbmQgcHVsbCByZXF1ZXN0cywgcGF0Y2hlcywgY29tbWVudHMgb3IgcXVlc3Rpb25zIGFib3V0IG1ldGEteW9jdG8tYnNwcyB0byBwb2t5QHlvY3RvcHJvamVjdC5vcmcKLQotTWFpbnRhaW5lcnM6IEtldmluIEhhbyA8a2V4aW4uaGFvQHdpbmRyaXZlci5jb20+Ci0gICAgICAgICAgICAgQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+Ci0KLUNvbnN1bWVyIERldmljZXMKLT09PT09PT09PT09PT09PT0KLQotVGhlIGZvbGxvd2luZyBjb25zdW1lciBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIG1ldGEteW9jdG8tYnNwIGxheWVyOgotCi0gICogSW50ZWwgeDg2IGJhc2VkIFBDcyBhbmQgZGV2aWNlcyAoZ2VuZXJpY3g4NikKLSAgKiBVYmlxdWl0aSBOZXR3b3JrcyBFZGdlUm91dGVyIExpdGUgKGVkZ2Vyb3V0ZXIpCi0KLUZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgZGV2aWNlJ3Mgc2VjdGlvbiBiZWxvdy4gVGhlIGFwcHJvcHJpYXRlIE1BQ0hJTkUKLXZhcmlhYmxlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRldmljZSBpcyBnaXZlbiBpbiBicmFja2V0cy4KLQotCi0KLSAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpYyBIYXJkd2FyZSBEb2N1bWVudGF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0KLUludGVsIHg4NiBiYXNlZCBQQ3MgYW5kIGRldmljZXMgKGdlbmVyaWN4ODYqKQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRoZSBnZW5lcmljeDg2IGFuZCBnZW5lcmljeDg2LTY0IE1BQ0hJTkUgYXJlIHRlc3RlZCBvbiB0aGUgZm9sbG93aW5nIHBsYXRmb3JtczoKLQotSW50ZWwgWGVvbi9Db3JlIGktU2VyaWVzOgotICArIEludGVsIE5VQzUgU2VyaWVzIC0gaXgtNTJ4eCBTZXJpZXMgU09DIChCcm9hZHdlbGwpCi0gICsgSW50ZWwgTlVDNiBTZXJpZXMgLSBpeC02Mnh4IFNlcmllcyBTT0MgKFNreWxha2UpCi0gICsgSW50ZWwgU2h1bXdheSBYZW9uIFNlcnZlcgotCi1JbnRlbCBBdG9tIHBsYXRmb3JtczoKLSAgKyBNaW5ub3dCb2FyZCBNQVggLSBFMzgyNSBTT0MgKEJheSBUcmFpbCkKLSAgKyBNaW5ub3dCb2FyZCBNQVggLSBUdXJib3QgKEFESSBFbmdpbmVlcmluZykgLSBFMzgyNiBTT0MgKEJheSBUcmFpbCkKLSAgICAtIFRoZXNlIGJvYXJkcyBjYW4gYmUgZWl0aGVyIDMyYm90IG9yIDY0Yml0IG1vZGVzIGRlcGVuZGluZyBvbiBmaXJtd2FyZQotICAgIC0gU2VlIG1pbm5vd2JvYXJkLm9yZyBmb3IgZGV0YWlscyAKLSAgKyBJbnRlbCBCcmFzd2VsbCBTT0MKLQotYW5kIGlzIGxpa2VseSB0byB3b3JrIG9uIG1hbnkgdW5saXN0ZWQgQXRvbS9Db3JlL1hlb24gYmFzZWQgZGV2aWNlcy4gVGhlIE1BQ0hJTkUKLXR5cGUgc3VwcG9ydHMgZXRoZXJuZXQsIHdpZmksIHNvdW5kLCBhbmQgSW50ZWwvdmVzYSBncmFwaGljcyBieSBkZWZhdWx0IGluCi1hZGRpdGlvbiB0byBjb21tb24gUEMgaW5wdXQgZGV2aWNlcywgYnVzc2VzLCBhbmQgc28gb24uCi0KLURlcGVuZGluZyBvbiB0aGUgZGV2aWNlLCBpdCBjYW4gYm9vdCBmcm9tIGEgdHJhZGl0aW9uYWwgaGFyZC1kaXNrLCBhIFVTQiBkZXZpY2UsCi1vciBvdmVyIHRoZSBuZXR3b3JrLiBXcml0aW5nIGdlbmVyYXRlZCBpbWFnZXMgdG8gcGh5c2ljYWwgbWVkaWEgaXMKLXN0cmFpZ2h0Zm9yd2FyZCB3aXRoIGEgY2F2ZWF0IGZvciBVU0IgZGV2aWNlcy4gVGhlIGZvbGxvd2luZyBleGFtcGxlcyBhc3N1bWUgdGhlCi10YXJnZXQgYm9vdCBkZXZpY2UgaXMgL2Rldi9zZGIsIGJlIHN1cmUgdG8gdmVyaWZ5IHRoaXMgYW5kIHVzZSB0aGUgY29ycmVjdAotZGV2aWNlIGFzIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgYXJlIHJ1biBhcyByb290IGFuZCBhcmUgbm90IHJldmVyc2FibGUuCi0KLVVTQiBEZXZpY2U6Ci0gIDEuIEJ1aWxkIGEgbGl2ZSBpbWFnZS4gVGhpcyBpbWFnZSB0eXBlIGNvbnNpc3RzIG9mIGEgc2ltcGxlIGZpbGVzeXN0ZW0KLSAgICAgd2l0aG91dCBhIHBhcnRpdGlvbiB0YWJsZSwgd2hpY2ggaXMgc3VpdGFibGUgZm9yIFVTQiBrZXlzLCBhbmQgd2l0aCB0aGUKLSAgICAgZGVmYXVsdCBzZXR1cCBmb3IgdGhlIGdlbmVyaWN4ODYgbWFjaGluZSwgdGhpcyBpbWFnZSB0eXBlIGlzIGJ1aWx0Ci0gICAgIGF1dG9tYXRpY2FsbHkgZm9yIGFueSBpbWFnZSB5b3UgYnVpbGQuIEZvciBleGFtcGxlOgotCi0gICAgICQgYml0YmFrZSBjb3JlLWltYWdlLW1pbmltYWwKLQotICAyLiBVc2UgdGhlICJkZCIgdXRpbGl0eSB0byB3cml0ZSB0aGUgaW1hZ2UgdG8gdGhlIHJhdyBibG9jayBkZXZpY2UuIEZvcgotICAgICBleGFtcGxlOgotCi0gICAgICMgZGQgaWY9Y29yZS1pbWFnZS1taW5pbWFsLWdlbmVyaWN4ODYuaGRkaW1nIG9mPS9kZXYvc2RiCi0KLSAgSWYgdGhlIGRldmljZSBmYWlscyB0byBib290IHdpdGggIkJvb3QgZXJyb3IiIGRpc3BsYXllZCwgb3IgYXBwYXJlbnRseQotICBzdG9wcyBqdXN0IGFmdGVyIHRoZSBTWVNMSU5VWCB2ZXJzaW9uIGJhbm5lciwgaXQgaXMgbGlrZWx5IHRoZSBCSU9TIGNhbm5vdAotICB1bmRlcnN0YW5kIHRoZSBwaHlzaWNhbCBsYXlvdXQgb2YgdGhlIGRpc2sgKG9yIHJhdGhlciBpdCBleHBlY3RzIGEKLSAgcGFydGljdWxhciBsYXlvdXQgYW5kIGNhbm5vdCBoYW5kbGUgYW55dGhpbmcgZWxzZSkuIFRoZXJlIGFyZSB0d28gcG9zc2libGUKLSAgc29sdXRpb25zIHRvIHRoaXMgcHJvYmxlbToKLQotICAxLiBDaGFuZ2UgdGhlIEJJT1MgVVNCIERldmljZSBzZXR0aW5nIHRvIEhERCBtb2RlLiBUaGUgbGFiZWwgd2lsbCB2YXJ5IGJ5Ci0gICAgIGRldmljZSwgYnV0IHRoZSBpZGVhIGlzIHRvIGZvcmNlIEJJT1MgdG8gcmVhZCB0aGUgQ3lsaW5kZXIvSGVhZC9TZWN0b3IKLSAgICAgZ2VvbWV0cnkgZnJvbSB0aGUgZGV2aWNlLgotCi0gIDIuIFVzZSBhICIud2ljIiBpbWFnZSB3aXRoIGFuIEVGSSBwYXJ0aXRpb24KLQotICAgICBhKSBXaXRoIGEgZGVmYXVsdCBncnViLWVmaSBib290bG9hZGVyOgotICAgICAjIGRkIGlmPWNvcmUtaW1hZ2UtbWluaW1hbC1nZW5lcmljeDg2LTY0LndpYyBvZj0vZGV2L3NkYgotCi0gICAgIGIpIFVzZSBzeXN0ZW1kLWJvb3QgaW5zdGVhZAotICAgICAtIEJ1aWxkIGFuIGltYWdlIHdpdGggRUZJX1BST1ZJREVSPSJzeXN0ZW1kLWJvb3QiIHRoZW4gdXNlIHRoZSBhYm92ZQotICAgICAgIGRkIGNvbW1hbmQgdG8gd3JpdGUgdGhlIGltYWdlIHRvIGEgVVNCIHN0aWNrLgotCi0KLVRleGFzIEluc3RydW1lbnRzIEJlYWdsZWJvbmUgKGJlYWdsZWJvbmUpCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGUgQmVhZ2xlYm9uZSBpcyBhbiBBUk0gQ29ydGV4LUE4IGRldmVsb3BtZW50IGJvYXJkIHdpdGggVVNCLCBFdGhlcm5ldCwgMkQvM0QKLWFjY2VsZXJhdGVkIGdyYXBoaWNzLCBhdWRpbywgc2VyaWFsLCBKVEFHLCBhbmQgU0QvTU1DLiBUaGUgQmxhY2sgYWRkcyBhIGZhc3RlcgotQ1BVLCBtb3JlIFJBTSwgZU1NQyBmbGFzaCBhbmQgYSBtaWNybyBIRE1JIHBvcnQuIFRoZSBiZWFnbGVib25lIE1BQ0hJTkUgaXMKLXRlc3RlZCBvbiB0aGUgZm9sbG93aW5nIHBsYXRmb3JtczoKLQotICBvIEJlYWdsZWJvbmUgQmxhY2sgQTYKLSAgbyBCZWFnbGVib25lIEE2ICh0aGUgb3JpZ2luYWwgIldoaXRlIiBtb2RlbCkKLQotVGhlIEJlYWdsZWJvbmUgQmxhY2sgaGFzIGVNTUMsIHdoaWxlIHRoZSBXaGl0ZSBkb2VzIG5vdC4gUHJlc3NpbmcgdGhlIFVTRVIvQk9PVAotYnV0dG9uIHdoZW4gcG93ZXJpbmcgb24gd2lsbCB0ZW1wb3JhcmlseSBjaGFuZ2UgdGhlIGJvb3Qgb3JkZXIuIEJ1dCBmb3IgdGhlIHNha2UKLW9mIHNpbXBsaWNpdHksIHRoZXNlIGluc3RydWN0aW9ucyBhc3N1bWUgeW91IGhhdmUgZXJhc2VkIHRoZSBlTU1DIG9uIHRoZSBCbGFjaywKLXNvIGl0cyBib290IGJlaGF2aW9yIG1hdGNoZXMgdGhhdCBvZiB0aGUgV2hpdGUgYW5kIGJvb3RzIG9mZiBvZiBTRCBjYXJkLiBUbyBkbwotdGhpcywgaXNzdWUgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBmcm9tIHRoZSB1LWJvb3QgcHJvbXB0OgotCi0gICAgIyBtbWMgZGV2IDEKLSAgICAjIG1tYyBlcmFzZSAwIDUxMgotCi1UbyBmdXJ0aGVyIHRhaWxvciB0aGVzZSBpbnN0cnVjdGlvbnMgZm9yIHlvdXIgYm9hcmQsIHBsZWFzZSByZWZlciB0byB0aGUKLWRvY3VtZW50YXRpb24gYXQgaHR0cDovL3d3dy5iZWFnbGVib2FyZC5vcmcvYm9uZSBhbmQgaHR0cDovL3d3dy5iZWFnbGVib2FyZC5vcmcvYmxhY2sKLQotRnJvbSBhIExpbnV4IHN5c3RlbSB3aXRoIGFjY2VzcyB0byB0aGUgaW1hZ2UgZmlsZXMgcGVyZm9ybSB0aGUgZm9sbG93aW5nIHN0ZXBzOgotCi0gIDEuIEJ1aWxkIGFuIGltYWdlLiBGb3IgZXhhbXBsZToKLQotICAgICAkIGJpdGJha2UgY29yZS1pbWFnZS1taW5pbWFsCi0KLSAgMi4gVXNlIHRoZSAiZGQiIHV0aWxpdHkgdG8gd3JpdGUgdGhlIGltYWdlIHRvIHRoZSBTRCBjYXJkLiBGb3IgZXhhbXBsZToKLQotICAgICAjIGRkIGNvcmUtaW1hZ2UtbWluaW1hbC1iZWFnbGVib25lLndpYyBvZj0vZGV2L3NkYgotCi0gIDMuIEluc2VydCB0aGUgU0QgY2FyZCBpbnRvIHRoZSBCZWFnbGVib25lIGFuZCBib290IHRoZSBib2FyZC4KLQotRnJlZXNjYWxlIE1QQzgzMTVFLVJEQiAobXBjODMxNWUtcmRiKQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGUgTVBDODMxNSBQb3dlclBDIHJlZmVyZW5jZSBwbGF0Zm9ybSAoTVBDODMxNUUtUkRCKSBpcyBhaW1lZCBhdCBoYXJkd2FyZSBhbmQKLXNvZnR3YXJlIGRldmVsb3BtZW50IG9mIG5ldHdvcmsgYXR0YWNoZWQgc3RvcmFnZSAoTkFTKSBhbmQgZGlnaXRhbCBtZWRpYSBzZXJ2ZXIKLWFwcGxpY2F0aW9ucy4gVGhlIE1QQzgzMTVFLVJEQiBmZWF0dXJlcyB0aGUgUG93ZXJRVUlDQyBJSSBQcm8gcHJvY2Vzc29yLCB3aGljaAotaW5jbHVkZXMgYSBidWlsdC1pbiBzZWN1cml0eSBhY2NlbGVyYXRvci4KLQotKE5vdGU6IHlvdSBtYXkgZmluZCBpdCBlYXNpZXIgdG8gb3JkZXIgTVBDODMxNUUtUkRCQTsgdGhpcyBhcHBlYXJzIHRvIGJlIHRoZQotc2FtZSBib2FyZCBpbiBhbiBlbmNsb3N1cmUgd2l0aCBhY2Nlc3Nvcmllcy4gSW4gYW55IGNhc2UgaXQgaXMgZnVsbHkKLWNvbXBhdGlibGUgd2l0aCB0aGUgaW5zdHJ1Y3Rpb25zIGdpdmVuIGhlcmUuKQotCi1TZXR1cCBpbnN0cnVjdGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Zb3Ugd2lsbCBuZWVkIHRoZSBmb2xsb3dpbmc6Ci0qIE5GUyByb290IHNldHVwIG9uIHlvdXIgd29ya3N0YXRpb24KLSogVEZUUCBzZXJ2ZXIgaW5zdGFsbGVkIG9uIHlvdXIgd29ya3N0YXRpb24KLSogU3RyYWlnaHQtdGhydSA5LWNvbmR1Y3RvciBzZXJpYWwgY2FibGUgKERCOSwgTS9GKSBjb25uZWN0ZWQgZnJvbSB5b3VyIAotICBQQyB0byBVQVJUMQotKiBFdGhlcm5ldCBjb25uZWN0ZWQgdG8gdGhlIGZpcnN0IGV0aGVybmV0IHBvcnQgb24gdGhlIGJvYXJkCi0KLS0tLSBQcmVwYXJhdGlvbiAtLS0KLQotTm90ZTogaWYgeW91IGhhdmUgYWx0ZXJlZCB5b3VyIGJvYXJkJ3MgZXRoZXJuZXQgTUFDIGFkZHJlc3MoZXMpIGZyb20gdGhlCi1kZWZhdWx0cywgb3IgeW91IG5lZWQgdG8gZG8gc28gYmVjYXVzZSB5b3Ugd2FudCBtdWx0aXBsZSBib2FyZHMgb24gdGhlIHNhbWUKLW5ldHdvcmssIHRoZW4geW91IHdpbGwgbmVlZCB0byBjaGFuZ2UgdGhlIHZhbHVlcyBpbiB0aGUgZHRzIGZpbGUgKHBhdGNoCi1saW51eC9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxNWVyZGIuZHRzIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSkuIElmCi15b3UgaGF2ZSBsZWZ0IHRoZW0gYXQgdGhlIGZhY3RvcnkgZGVmYXVsdCB0aGVuIHlvdSBzaG91bGRuJ3QgbmVlZCB0byBkbwotYW55dGhpbmcgaGVyZS4KLQotTm90ZTogVG8gYm9vdCBmcm9tIFVTQiBkaXNrIHlvdSBuZWVkIHUtYm9vdCB0aGF0IHN1cHBvcnRzICdleHQybG9hZCB1c2InCi1jb21tYW5kLiBZb3UgbmVlZCB0byBzZXR1cCBURlRQIHNlcnZlciwgbG9hZCB1LWJvb3QgZnJvbSB0aGVyZSBhbmQKLWZsYXNoIGl0IHRvIE5PUiBmbGFzaC4KLQotQmV3YXJlISBGbGFzaGluZyBib290bG9hZGVyIGlzIHBvdGVudGlhbGx5IGRhbmdlcm91cyBvcGVyYXRpb24gdGhhdCBjYW4KLWJyaWNrIHlvdXIgZGV2aWNlIGlmIGRvbmUgaW5jb3JyZWN0bHkuIFBsZWFzZSwgbWFrZSBzdXJlIHlvdSB1bmRlcnN0YW5kCi13aGF0IGJlbG93IGNvbW1hbmRzIG1lYW4gYmVmb3JlIGV4ZWN1dGluZyB0aGVtLgotCi1Mb2FkIHRoZSBuZXcgdS1ib290LmJpbiBmcm9tIFRGVFAgc2VydmVyIHRvIG1lbW9yeSBhZGRyZXNzIDIwMDAwMAotPT4gdGZ0cCAyMDAwMDAgdS1ib290LmJpbgotCi1EaXNhYmxlIGZsYXNoIHByb3RlY3Rpb24KLT0+IHByb3RlY3Qgb2ZmIGFsbAotCi1FcmFzZSB0aGUgb2xkIHUtYm9vdCBmcm9tIGZlMDAwMDAwIHRvIGZlMDZmZmZmIGluIE5PUiBmbGFzaC4KLVRoZSBzaXplIGlzIDB4NzAwMDAgKDQ1ODc1MiBieXRlcykKLT0+IGVyYXNlIGZlMDAwMDAwIGZlMDZmZmZmCi0KLUNvcHkgdGhlIG5ldyB1LWJvb3QgZnJvbSBhZGRyZXNzIDIwMDAwMCB0byBmZTAwMDAwMAotdGhlIHNpemUgaXMgMHg3MDAwMC4gSXQgaGFzIHRvIGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdS1ib290LmJpbiBzaXplCi09PiBjcC5iIDIwMDAwMCBmZTAwMDAwMCA3MDAwMAotCi1FbmFibGUgZmxhc2ggcHJvdGVjdGlvbiBhZ2FpbgotPT4gcHJvdGVjdCBvbiBhbGwKLQotUmVzZXQgdGhlIGJvYXJkCi09PiByZXNldAotCi0tLS0gQm9vdGluZyBmcm9tIFVTQiBkaXNrIC0tLQotCi0gMS4gRmxhc2ggcGFydGl0aW9uZWQgaW1hZ2UgdG8gdGhlIFVTQiBkaXNrCi0KLSAgICAjIGRkIGlmPWNvcmUtaW1hZ2UtbWluaW1hbC1tcGM4MzE1ZS1yZGIud2ljIG9mPS9kZXYvc2RiCi0KLSAyLiBQbHVnIFVTQiBkaXNrIGludG8gdGhlIE1QQzgzMTUgYm9hcmQKLQotIDMuIENvbm5lY3QgdGhlIGJvYXJkJ3MgZmlyc3Qgc2VyaWFsIHBvcnQgdG8geW91ciB3b3Jrc3RhdGlvbiBhbmQgdGhlbiBzdGFydCB1cAotICAgIHlvdXIgZmF2b3VyaXRlIHNlcmlhbCB0ZXJtaW5hbCBzbyB0aGF0IHlvdSB3aWxsIGJlIGFibGUgdG8gaW50ZXJhY3Qgd2l0aAotICAgIHRoZSBzZXJpYWwgY29uc29sZS4gSWYgeW91IGRvbid0IGhhdmUgYSBmYXZvdXJpdGUsIHBpY29jb20gaXMgc3VnZ2VzdGVkOgotCi0gICQgcGljb2NvbSAvZGV2L3R0eVVTQjAgLWIgMTE1MjAwCi0KLSA0LiBQb3dlciB1cCBvciByZXNldCB0aGUgYm9hcmQgYW5kIHByZXNzIGEga2V5IG9uIHRoZSB0ZXJtaW5hbCB3aGVuIHByb21wdGVkCi0gICAgdG8gZ2V0IHRvIHRoZSBVLUJvb3QgY29tbWFuZCBsaW5lCi0KLSA1LiBPcHRpb25hbC4gTG9hZCB0aGUgdS1ib290LmJpbiBmcm9tIHRoZSBVU0IgZGlzazoKLQotID0+IHVzYiBzdGFydAotID0+IGV4dDJsb2FkIHVzYiAwOjEgMjAwMDAwIHUtYm9vdC5iaW4KLQotICAgIGFuZCBmbGFzaCBpdCB0byBOT1IgZmxhc2ggYXMgZGVzY3JpYmVkIGFib3ZlLgotCi0gNi4gU2V0IGZkdGFkZHIgYW5kIGxvYWRhZGRyLiBUaGlzIGlzIG5vdCBuZWNlc3NhcnkgaWYgeW91IHNldCB0aGVtIGJlZm9yZS4KLQotID0+IHNldGVudiBmZHRhZGRyIGEwMDAwMAotID0+IHNldGVudiBsb2FkYWRkciAxMDAwMDAwCi0KLSA3LiBMb2FkIHRoZSBrZXJuZWwgYW5kIGR0YiBmcm9tIGZpcnN0IHBhcnRpdGlvbiBvZiB0aGUgVVNCIGRpc2s6Ci0KLSA9PiB1c2Igc3RhcnQKLSA9PiBleHQybG9hZCB1c2IgMDoxICRsb2FkYWRkciB1SW1hZ2UKLSA9PiBleHQybG9hZCB1c2IgMDoxICRmZHRhZGRyIGR0YgotCi0gOC4gU2V0IGJvb3RhcmdzIGFuZCBib290IHVwIHRoZSBkZXZpY2UKLQotID0+IHNldGVudiBib290YXJncyByb290PS9kZXYvc2RiMiBydyByb290d2FpdCBjb25zb2xlPXR0eVMwLDExNTIwMAotID0+IGJvb3RtICRsb2FkYWRkciAtICRmZHRhZGRyCi0KLQotLS0tIEJvb3RpbmcgZnJvbSBORlMgcm9vdCAtLS0KLQotTG9hZCB0aGUga2VybmVsIGFuZCBkdGIgKGRldmljZSB0cmVlIGJsb2IpLCBhbmQgYm9vdCB0aGUgc3lzdGVtIGFzIGZvbGxvd3M6Ci0KLSAxLiBHZXQgdGhlIGtlcm5lbCAodUltYWdlLW1wYzgzMTVlLXJkYi5iaW4pIGFuZCBkdGIgKHVJbWFnZS1tcGM4MzE1ZS1yZGIuZHRiKQotICAgIGZpbGVzIGZyb20gdGhlIHRtcC9kZXBsb3kgZGlyZWN0b3J5LCBhbmQgbWFrZSB0aGVtIGF2YWlsYWJsZSBvbiB5b3VyIFRGVFAKLSAgICBzZXJ2ZXIuCi0KLSAyLiBDb25uZWN0IHRoZSBib2FyZCdzIGZpcnN0IHNlcmlhbCBwb3J0IHRvIHlvdXIgd29ya3N0YXRpb24gYW5kIHRoZW4gc3RhcnQgdXAKLSAgICB5b3VyIGZhdm91cml0ZSBzZXJpYWwgdGVybWluYWwgc28gdGhhdCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGludGVyYWN0IHdpdGgKLSAgICB0aGUgc2VyaWFsIGNvbnNvbGUuIElmIHlvdSBkb24ndCBoYXZlIGEgZmF2b3VyaXRlLCBwaWNvY29tIGlzIHN1Z2dlc3RlZDoKLQotICAkIHBpY29jb20gL2Rldi90dHlVU0IwIC1iIDExNTIwMAotCi0gMy4gUG93ZXIgdXAgb3IgcmVzZXQgdGhlIGJvYXJkIGFuZCBwcmVzcyBhIGtleSBvbiB0aGUgdGVybWluYWwgd2hlbiBwcm9tcHRlZAotICAgIHRvIGdldCB0byB0aGUgVS1Cb290IGNvbW1hbmQgbGluZQotCi0gNC4gU2V0IHVwIHRoZSBlbnZpcm9ubWVudCBpbiBVLUJvb3Q6Ci0KLSA9PiBzZXRlbnYgaXBhZGRyIDxib2FyZCBpcD4KLSA9PiBzZXRlbnYgc2VydmVyaXAgPHRmdHAgc2VydmVyIGlwPgotID0+IHNldGVudiBib290YXJncyByb290PS9kZXYvbmZzIHJ3IG5mc3Jvb3Q9PG5mc3Jvb3QgaXA+Ojxyb290ZnMgcGF0aD4gaXA9PGJvYXJkIGlwPjo8c2VydmVyIGlwPjo8Z2F0ZXdheSBpcD46MjU1LjI1NS4yNTUuMDptcGM4MzE1ZTpldGgwOm9mZiBjb25zb2xlPXR0eVMwLDExNTIwMAotCi0gNS4gRG93bmxvYWQgdGhlIGtlcm5lbCBhbmQgZHRiLCBhbmQgYm9vdDoKLQotID0+IHRmdHAgMTAwMDAwMCB1SW1hZ2UtbXBjODMxNWUtcmRiLmJpbgotID0+IHRmdHAgMjAwMDAwMCB1SW1hZ2UtbXBjODMxNWUtcmRiLmR0YgotID0+IGJvb3RtIDEwMDAwMDAgLSAyMDAwMDAwCi0KLS0tLSBCb290aW5nIGZyb20gSkZGUzIgcm9vdCAtLS0KLQotIDEuIEZpcnN0IGJvb3QgdGhlIGJvYXJkIHdpdGggTkZTIHJvb3QuCi0KLSAyLiBFcmFzZSB0aGUgTVREIHBhcnRpdGlvbiB3aGljaCB3aWxsIGJlIHVzZWQgYXMgcm9vdDoKLQotICAgICQgZmxhc2hfZXJhc2VhbGwgIC9kZXYvbXRkMwotCi0gMy4gQ29weSB0aGUgSkZGUzIgaW1hZ2UgdG8gdGhlIE1URCBwYXJ0aXRpb246Ci0KLSAgICAkIGZsYXNoY3AgY29yZS1pbWFnZS1taW5pbWFsLW1wYzgzMTVlLXJkYi5qZmZzMiAvZGV2L210ZDMKLQotIDQuIFRoZW4gcmVib290IHRoZSBib2FyZCBhbmQgc2V0IHVwIHRoZSBlbnZpcm9ubWVudCBpbiBVLUJvb3Q6Ci0KLSAgICA9PiBzZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L210ZGJsb2NrMyByb290ZnN0eXBlPWpmZnMyIGNvbnNvbGU9dHR5UzAsMTE1MjAwCi0KLQotVWJpcXVpdGkgTmV0d29ya3MgRWRnZVJvdXRlciBMaXRlIChlZGdlcm91dGVyKQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGUgRWRnZVJvdXRlciBMaXRlIGlzIHBhcnQgb2YgdGhlIEVkZ2VNYXggc2VyaWVzLiBJdCBpcyBhIE1JUFM2NCByb3V0ZXIKLShiYXNlZCBvbiB0aGUgQ2F2aXVtIE9jdGVvbiBwcm9jZXNzb3IpIHdpdGggNTEyTUIgb2YgUkFNLCB3aGljaCB1c2VzIGFuCi1pbnRlcm5hbCBVU0IgcGVuZHJpdmUgZm9yIHN0b3JhZ2UuCi0KLVNldHVwIGluc3RydWN0aW9ucwotLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVlvdSB3aWxsIG5lZWQgdGhlIGZvbGxvd2luZzoKLSogUko0NSAtPiBzZXJpYWwgKCJyb2xsb3ZlciIpIGNhYmxlIGNvbm5lY3RlZCBmcm9tIHlvdXIgUEMgdG8gdGhlIENPTlNPTEUKLSAgcG9ydCBvbiB0aGUgZGV2aWNlCi0qIEV0aGVybmV0IGNvbm5lY3RlZCB0byB0aGUgZmlyc3QgZXRoZXJuZXQgcG9ydCBvbiB0aGUgYm9hcmQKLQotSWYgdXNpbmcgTkZTIGFzIHBhcnQgb2YgdGhlIHNldHVwIHByb2Nlc3MsIHlvdSB3aWxsIGFsc28gbmVlZDoKLSogTkZTIHJvb3Qgc2V0dXAgb24geW91ciB3b3Jrc3RhdGlvbgotKiBURlRQIHNlcnZlciBpbnN0YWxsZWQgb24geW91ciB3b3Jrc3RhdGlvbiAoaWYgZmV0Y2hpbmcgdGhlIGtlcm5lbCBmcm9tCi0gIFRGVFAsIHNlZSBiZWxvdykuCi0KLS0tLSBQcmVwYXJhdGlvbiAtLS0KLQotQnVpbGQgYW4gaW1hZ2UgKGUuZy4gY29yZS1pbWFnZS1taW5pbWFsKSB1c2luZyAiZWRnZXJvdXRlciIgYXMgdGhlIE1BQ0hJTkUuCi1JbiB0aGUgZm9sbG93aW5nIGluc3RydWN0aW9uIGl0IGlzIGJhc2VkIG9uIGNvcmUtaW1hZ2UtbWluaW1hbC4gQW5vdGhlciB0YXJnZXQKLW1heSBiZSBzaW1pbGlhciB3aXRoIGl0LgotCi0tLS0gQm9vdGluZyBmcm9tIE5GUyByb290IC8ga2VybmVsIHZpYSBURlRQIC0tLQotCi1Mb2FkIHRoZSBrZXJuZWwsIGFuZCBib290IHRoZSBzeXN0ZW0gYXMgZm9sbG93czoKLQotIDEuIEdldCB0aGUga2VybmVsICh2bWxpbnV4KSBmaWxlIGZyb20gdGhlIHRtcC9kZXBsb3kvaW1hZ2VzL2VkZ2Vyb3V0ZXIKLSAgICBkaXJlY3RvcnksIGFuZCBtYWtlIHRoZW0gYXZhaWxhYmxlIG9uIHlvdXIgVEZUUCBzZXJ2ZXIuCi0KLSAyLiBDb25uZWN0IHRoZSBib2FyZCdzIGZpcnN0IHNlcmlhbCBwb3J0IHRvIHlvdXIgd29ya3N0YXRpb24gYW5kIHRoZW4gc3RhcnQgdXAKLSAgICB5b3VyIGZhdm91cml0ZSBzZXJpYWwgdGVybWluYWwgc28gdGhhdCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGludGVyYWN0IHdpdGgKLSAgICB0aGUgc2VyaWFsIGNvbnNvbGUuIElmIHlvdSBkb24ndCBoYXZlIGEgZmF2b3VyaXRlLCBwaWNvY29tIGlzIHN1Z2dlc3RlZDoKLQotICAkIHBpY29jb20gL2Rldi90dHlTMCAtYiAxMTUyMDAKLQotIDMuIFBvd2VyIHVwIG9yIHJlc2V0IHRoZSBib2FyZCBhbmQgcHJlc3MgYSBrZXkgb24gdGhlIHRlcm1pbmFsIHdoZW4gcHJvbXB0ZWQKLSAgICB0byBnZXQgdG8gdGhlIFUtQm9vdCBjb21tYW5kIGxpbmUKLQotIDQuIFNldCB1cCB0aGUgZW52aXJvbm1lbnQgaW4gVS1Cb290OgotCi0gPT4gc2V0ZW52IGlwYWRkciA8Ym9hcmQgaXA+Ci0gPT4gc2V0ZW52IHNlcnZlcmlwIDx0ZnRwIHNlcnZlciBpcD4KLQotIDUuIERvd25sb2FkIHRoZSBrZXJuZWwgYW5kIGJvb3Q6Ci0KLSA9PiB0ZnRwIHRmdHAgJGxvYWRhZGRyIHZtbGludXgKLSA9PiBib290b2N0bGludXggJGxvYWRhZGRyIGNvcmVtYXNrPTB4MyByb290PS9kZXYvbmZzIHJ3IG5mc3Jvb3Q9PG5mc3Jvb3QgaXA+Ojxyb290ZnMgcGF0aD4gaXA9PGJvYXJkIGlwPjo8c2VydmVyIGlwPjo8Z2F0ZXdheSBpcD46PG5ldG1hc2s+OmVkZ2Vyb3V0ZXI6ZXRoMDpvZmYgbXRkcGFydHM9cGh5c19tYXBwZWRfZmxhc2g6NTEyayhib290MCksNTEyayhib290MSksNjRrQDMwNzJrKGVlcHJvbSkKLQotLS0tIEJvb3RpbmcgZnJvbSBVU0IgZGlzayAtLS0KLQotVG8gYm9vdCBmcm9tIHRoZSBVU0IgZGlzaywgeW91IGVpdGhlciBuZWVkIHRvIHJlbW92ZSBpdCBmcm9tIHRoZSBlZGdlcm91dGVyCi1ib3ggYW5kIHBvcHVsYXRlIGl0IGZyb20gYW5vdGhlciBjb21wdXRlciwgb3IgdXNlIGEgcHJldmlvdXNseSBib290ZWQgTkZTCi1pbWFnZSBhbmQgcG9wdWxhdGUgZnJvbSB0aGUgZWRnZXJvdXRlciBpdHNlbGYuCi0KLVR5cGUgMTogVXNlIHBhcnRpdGlvbmVkIGltYWdlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1TdGVwczoKLQotIDEuIFJlbW92ZSB0aGUgVVNCIGRpc2sgZnJvbSB0aGUgZWRnZXJvdXRlciBhbmQgaW5zZXJ0IGl0IGludG8gYSBjb21wdXRlcgotICAgIHRoYXQgaGFzIGFjY2VzcyB0byB5b3VyIGJ1aWxkIGFydGlmYWN0cy4KLQotIDIuIEZsYXNoIHRoZSBpbWFnZS4KLQotICAgICMgZGQgaWY9Y29yZS1pbWFnZS1taW5pbWFsLWVkZ2Vyb3V0ZXIud2ljIG9mPS9kZXYvc2RiCi0KLSAzLiBJbnNlcnQgVVNCIGRpc2sgaW50byB0aGUgZWRnZXJvdXRlciBhbmQgYm9vdCBpdC4KLQotVHlwZSAyOiBORlMKLS0tLS0tLS0tLS0tCi0KLU5vdGU6IElmIHlvdSBwbGFjZSB0aGUga2VybmVsIG9uIHRoZSBleHQzIHBhcnRpdGlvbiwgeW91IG11c3QgcmUtY3JlYXRlIHRoZQotICAgICAgZXh0MyBmaWxlc3lzdGVtLCBzaW5jZSB0aGUgZmFjdG9yeSB1LWJvb3QgY2FuIG9ubHkgaGFuZGxlIDEyOCBieXRlIGlub2RlcyBhbmQKLSAgICAgIGNhbm5vdCByZWFkIHRoZSBwYXJ0aXRpb24gb3RoZXJ3aXNlLgotCi0gICAgICBUaGVzZSBib290IGluc3RydWN0aW9ucyBhc3N1bWUgdGhhdCB5b3UgaGF2ZSByZWNyZWF0ZWQgdGhlIGV4dDMgZmlsZXN5c3RlbSB3aXRoCi0gICAgICAxMjggYnl0ZSBpbm9kZXMsIHlvdSBoYXZlIGFuIHVwZGF0ZWQgdWJvb3Qgb3IgeW91IGFyZSBydW5uaW5nIGFuZCBpbWFnZSBjYXBhYmxlCi0gICAgICBvZiBtYWtpbmcgdGhlIGZpbGVzeXN0ZW0gb24gdGhlIGJvYXJkIGl0c2VsZi4KLQotCi0gMS4gQm9vdCBmcm9tIE5GUyByb290Ci0KLSAyLiBNb3VudCB0aGUgVVNCIGRpc2sgcGFydGl0aW9uIDIgYW5kIHRoZW4gZXh0cmFjdCB0aGUgY29udGVudHMgb2YKLSAgICB0bXAvZGVwbG95L2NvcmUtaW1hZ2UtWFhYWC50YXIuYnoyIGludG8gaXQuCi0KLSAgICBCZWZvcmUgc3RhcnRpbmcsIGNvcHkgY29yZS1pbWFnZS1taW5pbWFsLXh4eC50YXIuYnoyIGFuZCB2bWxpbnV4IGludG8KLSAgICByb290ZnMgcGF0aCBvbiB5b3VyIHdvcmtzdGF0aW9uLgotCi0gICAgYW5kIHRoZW4sCi0gIAotICAgICAgIyBtb3VudCAvZGV2L3NkYTIgL21lZGlhL3NkYTIKLSAgICAgICMgdGFyIC14dmpwZiBjb3JlLWltYWdlLW1pbmltYWwtWFhYLnRhci5iejIgLUMgL21lZGlhL3NkYTIKLSAgICAgICMgY3Agdm1saW51eCAvbWVkaWEvc2RhMi9ib290L3ZtbGludXgKLSAgICAgICMgdW1vdW50IC9tZWRpYS9zZGEyCi0gICAgICAjIHJlYm9vdAotCi0gMy4gUmVib290IHRoZSBib2FyZCBhbmQgcHJlc3MgYSBrZXkgb24gdGhlIHRlcm1pbmFsIHdoZW4gcHJvbXB0ZWQgdG8gZ2V0IHRvIHRoZSBVLUJvb3QKLSAgICBjb21tYW5kIGxpbmU6Ci0KLSAgICAjIHJlYm9vdAotCi0gNC4gTG9hZCB0aGUga2VybmVsIGFuZCBib290OgotCi0gICAgICA9PiBleHQybG9hZCB1c2IgMDoyICRsb2FkYWRkciBib290L3ZtbGludXgKLSAgICAgID0+IGJvb3RvY3RsaW51eCAkbG9hZGFkZHIgY29yZW1hc2s9MHgzIHJvb3Q9L2Rldi9zZGEyIHJ3IHJvb3R3YWl0IG10ZHBhcnRzPXBoeXNfbWFwcGVkX2ZsYXNoOjUxMmsoYm9vdDApLDUxMmsoYm9vdDEpLDY0a0AzMDcyayhlZXByb20pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvUkVBRE1FLmhhcmR3YXJlIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L1JFQURNRS5oYXJkd2FyZQpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi44YjYyNThkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L1JFQURNRS5oYXJkd2FyZQpAQCAtMCwwICsxIEBACittZXRhLXlvY3RvLWJzcC9SRUFETUUuaGFyZHdhcmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvUkVBRE1FLnBva3kgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvUkVBRE1FLnBva3kKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uMTg3N2RjYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9SRUFETUUucG9reQpAQCAtMCwwICsxIEBACittZXRhLXBva3kvUkVBRE1FLnBva3kKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvUkVBRE1FLnFlbXUgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvUkVBRE1FLnFlbXUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY1NmI3ZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9SRUFETUUucWVtdQpAQCAtMCwwICsxLDE1IEBACitRRU1VIEVtdWxhdGlvbiBUYXJnZXRzCis9PT09PT09PT09PT09PT09PT09PT09CisKK1RvIHNpbXBsaWZ5IGRldmVsb3BtZW50LCB0aGUgYnVpbGQgc3lzdGVtIHN1cHBvcnRzIGJ1aWxkaW5nIGltYWdlcyB0bword29yayB3aXRoIHRoZSBRRU1VIGVtdWxhdG9yIGluIHN5c3RlbSBlbXVsYXRpb24gbW9kZS4gU2V2ZXJhbCBhcmNoaXRlY3R1cmVzCithcmUgY3VycmVudGx5IHN1cHBvcnRlZCBpbiAzMiBhbmQgNjQgYml0IHZhcmlhbnRzOgorCisgICogQVJNIChxZW11YXJtICsgcWVtdWFybTY0KQorICAqIHg4NiAocWVtdXg4NiArIHFlbXV4ODYtNjQpCisgICogUG93ZXJQQyAocWVtdXBwYyBvbmx5KQorICAqIE1JUFMgKHFlbXVtaXBzICsgcWVtdW1pcHM2NCkKKworVXNlIG9mIHRoZSBRRU1VIGltYWdlcyBpcyBjb3ZlcmVkIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCitUaGUgYXBwcm9wcmlhdGUgTUFDSElORSB2YXJpYWJsZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSB0YXJnZXQgaXMgZ2l2ZW4KK2luIGJyYWNrZXRzLgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvUkVBRE1FIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3OWMzNzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9SRUFETUUKQEAgLTAsMCArMSwzNSBAQAorQml0YmFrZQorPT09PT09PQorCitCaXRCYWtlIGlzIGEgZ2VuZXJpYyB0YXNrIGV4ZWN1dGlvbiBlbmdpbmUgdGhhdCBhbGxvd3Mgc2hlbGwgYW5kIFB5dGhvbiB0YXNrcyB0byBiZSBydW4KK2VmZmljaWVudGx5IGFuZCBpbiBwYXJhbGxlbCB3aGlsZSB3b3JraW5nIHdpdGhpbiBjb21wbGV4IGludGVyLXRhc2sgZGVwZW5kZW5jeSBjb25zdHJhaW50cy4KK09uZSBvZiBCaXRCYWtlJ3MgbWFpbiB1c2VycywgT3BlbkVtYmVkZGVkLCB0YWtlcyB0aGlzIGNvcmUgYW5kIGJ1aWxkcyBlbWJlZGRlZCBMaW51eCBzb2Z0d2FyZQorc3RhY2tzIHVzaW5nIGEgdGFzay1vcmllbnRlZCBhcHByb2FjaC4KKworRm9yIGluZm9ybWF0aW9uIGFib3V0IEJpdGJha2UsIHNlZSB0aGUgT3BlbkVtYmVkZGVkIHdlYnNpdGU6CisgICAgaHR0cDovL3d3dy5vcGVuZW1iZWRkZWQub3JnLworCitCaXRiYWtlIHBsYWluIGRvY3VtZW50YXRpb24gY2FuIGJlIGZvdW5kIHVuZGVyIHRoZSBkb2MgZGlyZWN0b3J5IG9yIGl0cyBpbnRlZ3JhdGVkCitodG1sIHZlcnNpb24gYXQgdGhlIFlvY3RvIFByb2plY3Qgd2Vic2l0ZToKKyAgICBodHRwOi8veW9jdG9wcm9qZWN0Lm9yZy9kb2N1bWVudGF0aW9uCisKK0NvbnRyaWJ1dGluZworLS0tLS0tLS0tLS0tCisKK1BsZWFzZSByZWZlciB0bworaHR0cDovL3d3dy5vcGVuZW1iZWRkZWQub3JnL3dpa2kvSG93X3RvX3N1Ym1pdF9hX3BhdGNoX3RvX09wZW5FbWJlZGRlZAorZm9yIGd1aWRlbGluZXMgb24gaG93IHRvIHN1Ym1pdCBwYXRjaGVzLCBqdXN0IG5vdGUgdGhhdCB0aGUgbGF0dGVyIGRvY3VtZW50YXRpb24gaXMgaW50ZW5kZWQKK2ZvciBPcGVuRW1iZWRkZWQgKGFuZCBpdHMgY29yZSkgbm90IGJpdGJha2UgcGF0Y2hlcyAoYml0YmFrZS1kZXZlbEBsaXN0cy5vcGVuZW1iZWRkZWQub3JnKQorYnV0IGluIGdlbmVyYWwgbWFpbiBndWlkZWxpbmVzIGFwcGx5LiBPbmNlIHRoZSBjb21taXQocykgaGF2ZSBiZWVuIGNyZWF0ZWQsIHRoZSB3YXkgdG8gc2VuZAordGhlIHBhdGNoIGlzIHRocm91Z2ggZ2l0LXNlbmQtZW1haWwuIEZvciBleGFtcGxlLCB0byBzZW5kIHRoZSBsYXN0IGNvbW1pdCAoSEVBRCkgb24gY3VycmVudAorYnJhbmNoLCB0eXBlOgorCisgICAgZ2l0IHNlbmQtZW1haWwgLU0gLTEgLS10byBiaXRiYWtlLWRldmVsQGxpc3RzLm9wZW5lbWJlZGRlZC5vcmcKKworTWFpbGluZyBsaXN0OgorCisgICAgaHR0cDovL2xpc3RzLm9wZW5lbWJlZGRlZC5vcmcvbWFpbG1hbi9saXN0aW5mby9iaXRiYWtlLWRldmVsCisKK1NvdXJjZSBjb2RlOgorCisgICAgaHR0cDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UvCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlCmluZGV4IDlmNWMyZDQuLjNhY2MyM2EgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlCkBAIC0zNiw5ICszNiw5IEBACiBmcm9tIGJiLm1haW4gaW1wb3J0IGJpdGJha2VfbWFpbiwgQml0QmFrZUNvbmZpZ1BhcmFtZXRlcnMsIEJCTWFpbkV4Y2VwdGlvbgogCiBpZiBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkgIT0gInV0Zi04IjoKLSAgICBzeXMuZXhpdCgiUGxlYXNlIHVzZSBhIGxvY2FsZSBzZXR0aW5nIHdoaWNoIHN1cHBvcnRzIHV0Zi04LlxuUHl0aG9uIGNhbid0IGNoYW5nZSB0aGUgZmlsZXN5c3RlbSBsb2NhbGUgYWZ0ZXIgbG9hZGluZyBzbyB3ZSBuZWVkIGEgdXRmLTggd2hlbiBweXRob24gc3RhcnRzIG9yIHRoaW5ncyB3b24ndCB3b3JrLiIpCisgICAgc3lzLmV4aXQoIlBsZWFzZSB1c2UgYSBsb2NhbGUgc2V0dGluZyB3aGljaCBzdXBwb3J0cyBVVEYtOCAoc3VjaCBhcyBMQU5HPWVuX1VTLlVURi04KS5cblB5dGhvbiBjYW4ndCBjaGFuZ2UgdGhlIGZpbGVzeXN0ZW0gbG9jYWxlIGFmdGVyIGxvYWRpbmcgc28gd2UgbmVlZCBhIFVURi04IHdoZW4gUHl0aG9uIHN0YXJ0cyBvciB0aGluZ3Mgd29uJ3Qgd29yay4iKQogCi1fX3ZlcnNpb25fXyA9ICIxLjM0LjAiCitfX3ZlcnNpb25fXyA9ICIxLjM2LjAiCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgaWYgX192ZXJzaW9uX18gIT0gYmIuX192ZXJzaW9uX186CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1kaWZmc2lncyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLWRpZmZzaWdzCmluZGV4IGViMmY4NTkuLjRlNmJiZGQgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLWRpZmZzaWdzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLWRpZmZzaWdzCkBAIC0zNCwxOCArMzQsMzkgQEAKIAogbG9nZ2VyID0gYmIubXNnLmxvZ2dlcl9jcmVhdGUoJ2JpdGJha2UtZGlmZnNpZ3MnKQogCitkZWYgZmluZF9zaWdpbmZvKHRpbmZvaWwsIHBuLCB0YXNrbmFtZSwgc2lncz1Ob25lKToKKyAgICByZXN1bHQgPSBOb25lCisgICAgdGluZm9pbC5zZXRfZXZlbnRfbWFzayhbJ2JiLmV2ZW50LkZpbmRTaWdJbmZvUmVzdWx0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9nZ2luZy5Mb2dSZWNvcmQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYi5jb21tYW5kLkNvbW1hbmRDb21wbGV0ZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYi5jb21tYW5kLkNvbW1hbmRGYWlsZWQnXSkKKyAgICByZXQgPSB0aW5mb2lsLnJ1bl9jb21tYW5kKCdmaW5kU2lnSW5mbycsIHBuLCB0YXNrbmFtZSwgc2lncykKKyAgICBpZiByZXQ6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBldmVudCA9IHRpbmZvaWwud2FpdF9ldmVudCgxKQorICAgICAgICAgICAgaWYgZXZlbnQ6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuY29tbWFuZC5Db21tYW5kQ29tcGxldGVkKToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZEZhaWxlZCk6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzdHIoZXZlbnQpKQorICAgICAgICAgICAgICAgICAgICBzeXMuZXhpdCgyKQorICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuRmluZFNpZ0luZm9SZXN1bHQpOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBldmVudC5yZXN1bHQKKyAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGxvZ2dpbmcuTG9nUmVjb3JkKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmhhbmRsZShldmVudCkKKyAgICBlbHNlOgorICAgICAgICBsb2dnZXIuZXJyb3IoJ05vIHJlc3VsdCByZXR1cm5lZCBmcm9tIGZpbmRTaWdJbmZvIGNvbW1hbmQnKQorICAgICAgICBzeXMuZXhpdCgyKQorICAgIHJldHVybiByZXN1bHQKKwogZGVmIGZpbmRfY29tcGFyZV90YXNrKGJiaGFuZGxlciwgcG4sIHRhc2tuYW1lLCBzaWcxPU5vbmUsIHNpZzI9Tm9uZSwgY29sb3I9RmFsc2UpOgogICAgICIiIiBGaW5kIHRoZSBtb3N0IHJlY2VudCBzaWduYXR1cmUgZmlsZXMgZm9yIHRoZSBzcGVjaWZpZWQgUE4vdGFzayBhbmQgY29tcGFyZSB0aGVtICIiIgogCi0gICAgaWYgbm90IGhhc2F0dHIoYmIuc2lnZ2VuLCAnZmluZF9zaWdpbmZvJyk6Ci0gICAgICAgIGxvZ2dlci5lcnJvcignTWV0YWRhdGEgZG9lcyBub3Qgc3VwcG9ydCBmaW5kaW5nIHNpZ25hdHVyZSBkYXRhIGZpbGVzJykKLSAgICAgICAgc3lzLmV4aXQoMSkKLQogICAgIGlmIG5vdCB0YXNrbmFtZS5zdGFydHN3aXRoKCdkb18nKToKICAgICAgICAgdGFza25hbWUgPSAnZG9fJXMnICUgdGFza25hbWUKIAogICAgIGlmIHNpZzEgYW5kIHNpZzI6Ci0gICAgICAgIHNpZ2ZpbGVzID0gYmIuc2lnZ2VuLmZpbmRfc2lnaW5mbyhwbiwgdGFza25hbWUsIFtzaWcxLCBzaWcyXSwgYmJoYW5kbGVyLmNvbmZpZ19kYXRhKQorICAgICAgICBzaWdmaWxlcyA9IGZpbmRfc2lnaW5mbyhiYmhhbmRsZXIsIHBuLCB0YXNrbmFtZSwgW3NpZzEsIHNpZzJdKQogICAgICAgICBpZiBsZW4oc2lnZmlsZXMpID09IDA6CiAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ05vIHNpZ2RhdGEgZmlsZXMgZm91bmQgbWF0Y2hpbmcgJXMgJXMgbWF0Y2hpbmcgZWl0aGVyICVzIG9yICVzJyAlIChwbiwgdGFza25hbWUsIHNpZzEsIHNpZzIpKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKQEAgLTU3LDcgKzc4LDcgQEAKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgICAgIGxhdGVzdGZpbGVzID0gW3NpZ2ZpbGVzW3NpZzFdLCBzaWdmaWxlc1tzaWcyXV0KICAgICBlbHNlOgotICAgICAgICBmaWxlZGF0ZXMgPSBiYi5zaWdnZW4uZmluZF9zaWdpbmZvKHBuLCB0YXNrbmFtZSwgTm9uZSwgYmJoYW5kbGVyLmNvbmZpZ19kYXRhKQorICAgICAgICBmaWxlZGF0ZXMgPSBmaW5kX3NpZ2luZm8oYmJoYW5kbGVyLCBwbiwgdGFza25hbWUpCiAgICAgICAgIGxhdGVzdGZpbGVzID0gc29ydGVkKGZpbGVkYXRlcy5rZXlzKCksIGtleT1sYW1iZGEgZjogZmlsZWRhdGVzW2ZdKVstMzpdCiAgICAgICAgIGlmIG5vdCBsYXRlc3RmaWxlczoKICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignTm8gc2lnZGF0YSBmaWxlcyBmb3VuZCBtYXRjaGluZyAlcyAlcycgJSAocG4sIHRhc2tuYW1lKSkKQEAgLTY5LDcgKzkwLDcgQEAKICAgICAjIERlZmluZSByZWN1cnNpb24gY2FsbGJhY2sKICAgICBkZWYgcmVjdXJzZWNiKGtleSwgaGFzaDEsIGhhc2gyKToKICAgICAgICAgaGFzaGVzID0gW2hhc2gxLCBoYXNoMl0KLSAgICAgICAgaGFzaGZpbGVzID0gYmIuc2lnZ2VuLmZpbmRfc2lnaW5mbyhrZXksIE5vbmUsIGhhc2hlcywgYmJoYW5kbGVyLmNvbmZpZ19kYXRhKQorICAgICAgICBoYXNoZmlsZXMgPSBmaW5kX3NpZ2luZm8oYmJoYW5kbGVyLCBrZXksIE5vbmUsIGhhc2hlcykKIAogICAgICAgICByZWNvdXQgPSBbXQogICAgICAgICBpZiBsZW4oaGFzaGZpbGVzKSA9PSAwOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2UtbGF5ZXJzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2UtbGF5ZXJzCmluZGV4IDJiMDVkMjguLmQxODQwMTEgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLWxheWVycworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1sYXllcnMKQEAgLTQzLDYgKzQzLDcgQEAKICAgICAgICAgYWRkX2hlbHA9RmFsc2UpCiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWQnLCAnLS1kZWJ1ZycsIGhlbHA9J0VuYWJsZSBkZWJ1ZyBvdXRwdXQnLCBhY3Rpb249J3N0b3JlX3RydWUnKQogICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1xJywgJy0tcXVpZXQnLCBoZWxwPSdQcmludCBvbmx5IGVycm9ycycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLUYnLCAnLS1mb3JjZScsIGhlbHA9J0ZvcmNlIGFkZCB3aXRob3V0IHJlY2lwZSBwYXJzZSB2ZXJpZmljYXRpb24nLCBhY3Rpb249J3N0b3JlX3RydWUnKQogICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tY29sb3InLCBjaG9pY2VzPVsnYXV0bycsICdhbHdheXMnLCAnbmV2ZXInXSwgZGVmYXVsdD0nYXV0bycsIGhlbHA9J0NvbG9yaXplIG91dHB1dCAod2hlcmUgJShtZXRhdmFyKXMgaXMgJShjaG9pY2VzKXMpJywgbWV0YXZhcj0nQ09MT1InKQogCiAgICAgZ2xvYmFsX2FyZ3MsIHVucGFyc2VkX2FyZ3MgPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncygpCkBAIC04OSw3ICs5MCw3IEBACiAKICAgICAgICAgaWYgZ2V0YXR0cihhcmdzLCAncGFyc2VyZWNpcGVzJywgRmFsc2UpOgogICAgICAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YS5kaXNhYmxlVHJhY2tpbmcoKQotICAgICAgICAgICAgdGluZm9pbC5wYXJzZVJlY2lwZXMoKQorICAgICAgICAgICAgdGluZm9pbC5wYXJzZV9yZWNpcGVzKCkKICAgICAgICAgICAgIHRpbmZvaWwuY29uZmlnX2RhdGEuZW5hYmxlVHJhY2tpbmcoKQogCiAgICAgICAgIHJldHVybiBhcmdzLmZ1bmMoYXJncykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLXNlbGZ0ZXN0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2Utc2VsZnRlc3QKaW5kZXggMzgwZTAwMy4uYWZlMTYwMyAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2Utc2VsZnRlc3QKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2Utc2VsZnRlc3QKQEAgLTI4LDYgKzI4LDcgQEAKIHRlc3RzID0gWyJiYi50ZXN0cy5jb2RlcGFyc2VyIiwKICAgICAgICAgICJiYi50ZXN0cy5jb3ciLAogICAgICAgICAgImJiLnRlc3RzLmRhdGEiLAorICAgICAgICAgImJiLnRlc3RzLmV2ZW50IiwKICAgICAgICAgICJiYi50ZXN0cy5mZXRjaCIsCiAgICAgICAgICAiYmIudGVzdHMucGFyc2UiLAogICAgICAgICAgImJiLnRlc3RzLnV0aWxzIl0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLXdvcmtlciBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLXdvcmtlcgppbmRleCBlZTJkNjIyLi5lOTI1MDU0IDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS13b3JrZXIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2Utd29ya2VyCkBAIC0xNyw3ICsxNyw3IEBACiBmcm9tIHRocmVhZGluZyBpbXBvcnQgVGhyZWFkCiAKIGlmIHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSAhPSAidXRmLTgiOgotICAgIHN5cy5leGl0KCJQbGVhc2UgdXNlIGEgbG9jYWxlIHNldHRpbmcgd2hpY2ggc3VwcG9ydHMgdXRmLTguXG5QeXRob24gY2FuJ3QgY2hhbmdlIHRoZSBmaWxlc3lzdGVtIGxvY2FsZSBhZnRlciBsb2FkaW5nIHNvIHdlIG5lZWQgYSB1dGYtOCB3aGVuIHB5dGhvbiBzdGFydHMgb3IgdGhpbmdzIHdvbid0IHdvcmsuIikKKyAgICBzeXMuZXhpdCgiUGxlYXNlIHVzZSBhIGxvY2FsZSBzZXR0aW5nIHdoaWNoIHN1cHBvcnRzIFVURi04IChzdWNoIGFzIExBTkc9ZW5fVVMuVVRGLTgpLlxuUHl0aG9uIGNhbid0IGNoYW5nZSB0aGUgZmlsZXN5c3RlbSBsb2NhbGUgYWZ0ZXIgbG9hZGluZyBzbyB3ZSBuZWVkIGEgVVRGLTggd2hlbiBQeXRob24gc3RhcnRzIG9yIHRoaW5ncyB3b24ndCB3b3JrLiIpCiAKICMgVXNlcnMgc2hvdWxkbid0IGJlIHJ1bm5pbmcgdGhpcyBjb2RlIGRpcmVjdGx5CiBpZiBsZW4oc3lzLmFyZ3YpICE9IDIgb3Igbm90IHN5cy5hcmd2WzFdLnN0YXJ0c3dpdGgoImRlY2FmYmFkIik6CkBAIC00OTksNCArNDk5LDMgQEAKIAogd29ya2VybG9nX3dyaXRlKCJleGl0dGluZyIpCiBzeXMuZXhpdCgwKQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vZ2l0LW1ha2Utc2hhbGxvdyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9naXQtbWFrZS1zaGFsbG93Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI5NmQzYTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vZ2l0LW1ha2Utc2hhbGxvdwpAQCAtMCwwICsxLDE2NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworIiIiZ2l0LW1ha2Utc2hhbGxvdzogbWFrZSB0aGUgY3VycmVudCBnaXQgcmVwb3NpdG9yeSBzaGFsbG93CisKK1JlbW92ZSB0aGUgaGlzdG9yeSBvZiB0aGUgc3BlY2lmaWVkIHJldmlzaW9ucywgdGhlbiBvcHRpb25hbGx5IGZpbHRlciB0aGUKK2F2YWlsYWJsZSByZWZzIHRvIHRob3NlIHNwZWNpZmllZC4KKyIiIgorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGVycm5vCitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCisKK3ZlcnNpb24gPSAxLjAKKworCitkZWYgbWFpbigpOgorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMywgNCwgMCk6CisgICAgICAgIHN5cy5leGl0KCdQeXRob24gMy40IG9yIGdyZWF0ZXIgaXMgcmVxdWlyZWQnKQorCisgICAgZ2l0X2RpciA9IGNoZWNrX291dHB1dChbJ2dpdCcsICdyZXYtcGFyc2UnLCAnLS1naXQtZGlyJ10pLnJzdHJpcCgpCisgICAgc2hhbGxvd19maWxlID0gb3MucGF0aC5qb2luKGdpdF9kaXIsICdzaGFsbG93JykKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhzaGFsbG93X2ZpbGUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjaGVja19vdXRwdXQoWydnaXQnLCAnZmV0Y2gnLCAnLS11bnNoYWxsb3cnXSkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnVubGluayhzaGFsbG93X2ZpbGUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgaWYgZXhjLmVycm5vICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGFyZ3MgPSBwcm9jZXNzX2FyZ3MoKQorICAgIHJldnMgPSBjaGVja19vdXRwdXQoWydnaXQnLCAncmV2LWxpc3QnXSArIGFyZ3MucmV2aXNpb25zKS5zcGxpdGxpbmVzKCkKKworICAgIG1ha2Vfc2hhbGxvdyhzaGFsbG93X2ZpbGUsIGFyZ3MucmV2aXNpb25zLCBhcmdzLnJlZnMpCisKKyAgICByZWZfcmV2cyA9IGNoZWNrX291dHB1dChbJ2dpdCcsICdyZXYtbGlzdCddICsgYXJncy5yZWZzKS5zcGxpdGxpbmVzKCkKKyAgICByZW1haW5pbmdfaGlzdG9yeSA9IHNldChyZXZzKSAmIHNldChyZWZfcmV2cykKKyAgICBmb3IgcmV2IGluIHJlbWFpbmluZ19oaXN0b3J5OgorICAgICAgICBpZiBjaGVja19vdXRwdXQoWydnaXQnLCAncmV2LXBhcnNlJywgJ3t9XkAnLmZvcm1hdChyZXYpXSk6CisgICAgICAgICAgICBzeXMuZXhpdCgnRXJyb3I6ICVzIHdhcyBub3QgbWFkZSBzaGFsbG93JyAlIHJldikKKworICAgIGZpbHRlcl9yZWZzKGFyZ3MucmVmcykKKworICAgIGlmIGFyZ3Muc2hyaW5rOgorICAgICAgICBzaHJpbmtfcmVwbyhnaXRfZGlyKQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWydnaXQnLCAnZnNjaycsICctLXVucmVhY2hhYmxlJ10pCisKKworZGVmIHByb2Nlc3NfYXJncygpOgorICAgICMgVE9ETzogYWRkIGFyZ3VtZW50IHRvIGF1dG9tYXRpY2FsbHkga2VlcCBsb2NhbC1vbmx5IHJlZnMsIHNpbmNlIHRoZXkKKyAgICAjIGNhbid0IGJlIGVhc2lseSByZXN0b3JlZCB3aXRoIGEgZ2l0IGZldGNoLgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSdSZW1vdmUgdGhlIGhpc3Rvcnkgb2YgdGhlIHNwZWNpZmllZCByZXZpc2lvbnMsIHRoZW4gb3B0aW9uYWxseSBmaWx0ZXIgdGhlIGF2YWlsYWJsZSByZWZzIHRvIHRob3NlIHNwZWNpZmllZC4nKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcmVmJywgJy1yJywgbWV0YXZhcj0nUkVGJywgYWN0aW9uPSdhcHBlbmQnLCBkZXN0PSdyZWZzJywgaGVscD0ncmVtb3ZlIGFsbCBidXQgdGhlIHNwZWNpZmllZCByZWZzIChjdW11bGF0aXZlKScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zaHJpbmsnLCAnLXMnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdzaHJpbmsgdGhlIGdpdCByZXBvc2l0b3J5IGJ5IHJlcGFja2luZyBhbmQgcHJ1bmluZycpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgncmV2aXNpb25zJywgbWV0YXZhcj0nUkVWSVNJT04nLCBuYXJncz0nKycsIGhlbHA9J2EgZ2l0IHJldmlzaW9uL2NvbW1pdCcpCisgICAgaWYgbGVuKHN5cy5hcmd2KSA8IDI6CisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMikKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBpZiBhcmdzLnJlZnM6CisgICAgICAgIGFyZ3MucmVmcyA9IGNoZWNrX291dHB1dChbJ2dpdCcsICdyZXYtcGFyc2UnLCAnLS1zeW1ib2xpYy1mdWxsLW5hbWUnXSArIGFyZ3MucmVmcykuc3BsaXRsaW5lcygpCisgICAgZWxzZToKKyAgICAgICAgYXJncy5yZWZzID0gZ2V0X2FsbF9yZWZzKGxhbWJkYSByLCB0LCB0dDogdCA9PSAnY29tbWl0JyBvciB0dCA9PSAnY29tbWl0JykKKworICAgIGFyZ3MucmVmcyA9IGxpc3QoZmlsdGVyKGxhbWJkYSByOiBub3Qgci5lbmRzd2l0aCgnL0hFQUQnKSwgYXJncy5yZWZzKSkKKyAgICBhcmdzLnJldmlzaW9ucyA9IGNoZWNrX291dHB1dChbJ2dpdCcsICdyZXYtcGFyc2UnXSArIFsnJXNee30nICUgaSBmb3IgaSBpbiBhcmdzLnJldmlzaW9uc10pLnNwbGl0bGluZXMoKQorICAgIHJldHVybiBhcmdzCisKKworZGVmIGNoZWNrX291dHB1dChjbWQsIGlucHV0PU5vbmUpOgorICAgIHJldHVybiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlLCBpbnB1dD1pbnB1dCkKKworCitkZWYgbWFrZV9zaGFsbG93KHNoYWxsb3dfZmlsZSwgcmV2aXNpb25zLCByZWZzKToKKyAgICAiIiJSZW1vdmUgdGhlIGhpc3Rvcnkgb2YgdGhlIHNwZWNpZmllZCByZXZpc2lvbnMuIiIiCisgICAgZm9yIHJldiBpbiBmb2xsb3dfaGlzdG9yeV9pbnRlcnNlY3Rpb25zKHJldmlzaW9ucywgcmVmcyk6CisgICAgICAgIHByaW50KCJQcm9jZXNzaW5nICVzIiAlIHJldikKKyAgICAgICAgd2l0aCBvcGVuKHNoYWxsb3dfZmlsZSwgJ2EnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShyZXYgKyAnXG4nKQorCisKK2RlZiBnZXRfYWxsX3JlZnMocmVmX2ZpbHRlcj1Ob25lKToKKyAgICAiIiJSZXR1cm4gYWxsIHRoZSBleGlzdGluZyByZWZzIGluIHRoaXMgcmVwb3NpdG9yeSwgb3B0aW9uYWxseSBmaWx0ZXJpbmcgdGhlIHJlZnMuIiIiCisgICAgcmVmX291dHB1dCA9IGNoZWNrX291dHB1dChbJ2dpdCcsICdmb3ItZWFjaC1yZWYnLCAnLS1mb3JtYXQ9JShyZWZuYW1lKVx0JShvYmplY3R0eXBlKVx0JSgqb2JqZWN0dHlwZSknXSkKKyAgICByZWZfc3BsaXQgPSBbdHVwbGUoaXRlcl9leHRlbmQobC5yc3BsaXQoJ1x0JyksIDMpKSBmb3IgbCBpbiByZWZfb3V0cHV0LnNwbGl0bGluZXMoKV0KKyAgICBpZiByZWZfZmlsdGVyOgorICAgICAgICByZWZfc3BsaXQgPSAoZSBmb3IgZSBpbiByZWZfc3BsaXQgaWYgcmVmX2ZpbHRlcigqZSkpCisgICAgcmVmcyA9IFtyWzBdIGZvciByIGluIHJlZl9zcGxpdF0KKyAgICByZXR1cm4gcmVmcworCisKK2RlZiBpdGVyX2V4dGVuZChpdGVyYWJsZSwgbGVuZ3RoLCBvYmo9Tm9uZSk6CisgICAgIiIiRW5zdXJlIHRoYXQgaXRlcmFibGUgaXMgdGhlIHNwZWNpZmllZCBsZW5ndGggYnkgZXh0ZW5kaW5nIHdpdGggb2JqLiIiIgorICAgIHJldHVybiBpdGVydG9vbHMuaXNsaWNlKGl0ZXJ0b29scy5jaGFpbihpdGVyYWJsZSwgaXRlcnRvb2xzLnJlcGVhdChvYmopKSwgbGVuZ3RoKQorCisKK2RlZiBmaWx0ZXJfcmVmcyhyZWZzKToKKyAgICAiIiJSZW1vdmUgYWxsIGJ1dCB0aGUgc3BlY2lmaWVkIHJlZnMgZnJvbSB0aGUgZ2l0IHJlcG9zaXRvcnkuIiIiCisgICAgYWxsX3JlZnMgPSBnZXRfYWxsX3JlZnMoKQorICAgIHRvX3JlbW92ZSA9IHNldChhbGxfcmVmcykgLSBzZXQocmVmcykKKyAgICBpZiB0b19yZW1vdmU6CisgICAgICAgIGNoZWNrX291dHB1dChbJ3hhcmdzJywgJy0wJywgJy1uJywgJzEnLCAnZ2l0JywgJ3VwZGF0ZS1yZWYnLCAnLWQnLCAnLS1uby1kZXJlZiddLAorICAgICAgICAgICAgICAgICAgICAgaW5wdXQ9Jycuam9pbihsICsgJ1wwJyBmb3IgbCBpbiB0b19yZW1vdmUpKQorCisKK2RlZiBmb2xsb3dfaGlzdG9yeV9pbnRlcnNlY3Rpb25zKHJldmlzaW9ucywgcmVmcyk6CisgICAgIiIiRGV0ZXJtaW5lIGFsbCB0aGUgcG9pbnRzIHdoZXJlIHRoZSBoaXN0b3J5IG9mIHRoZSBzcGVjaWZpZWQgcmV2aXNpb25zIGludGVyc2VjdHMgdGhlIHNwZWNpZmllZCByZWZzLiIiIgorICAgIHF1ZXVlID0gY29sbGVjdGlvbnMuZGVxdWUocmV2aXNpb25zKQorICAgIHNlZW4gPSBzZXQoKQorCisgICAgZm9yIHJldiBpbiBpdGVyX2V4Y2VwdChxdWV1ZS5wb3BsZWZ0LCBJbmRleEVycm9yKToKKyAgICAgICAgaWYgcmV2IGluIHNlZW46CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHBhcmVudHMgPSBjaGVja19vdXRwdXQoWydnaXQnLCAncmV2LXBhcnNlJywgJyVzXkAnICUgcmV2XSkuc3BsaXRsaW5lcygpCisKKyAgICAgICAgeWllbGQgcmV2CisgICAgICAgIHNlZW4uYWRkKHJldikKKworICAgICAgICBpZiBub3QgcGFyZW50czoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgY2hlY2tfcmVmcyA9IGNoZWNrX291dHB1dChbJ2dpdCcsICdtZXJnZS1iYXNlJywgJy0taW5kZXBlbmRlbnQnXSArIHNvcnRlZChyZWZzKSkuc3BsaXRsaW5lcygpCisgICAgICAgIGZvciBwYXJlbnQgaW4gcGFyZW50czoKKyAgICAgICAgICAgIGZvciByZWYgaW4gY2hlY2tfcmVmczoKKyAgICAgICAgICAgICAgICBwcmludCgiQ2hlY2tpbmcgJXMgdnMgJXMiICUgKHBhcmVudCwgcmVmKSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG1lcmdlX2Jhc2UgPSBjaGVja19vdXRwdXQoWydnaXQnLCAnbWVyZ2UtYmFzZScsIHBhcmVudCwgcmVmXSkucnN0cmlwKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcXVldWUuYXBwZW5kKG1lcmdlX2Jhc2UpCisKKworZGVmIGl0ZXJfZXhjZXB0KGZ1bmMsIGV4Y2VwdGlvbiwgc3RhcnQ9Tm9uZSk6CisgICAgIiIiWWllbGQgYSBmdW5jdGlvbiByZXBlYXRlZGx5IHVudGlsIGl0IHJhaXNlcyBhbiBleGNlcHRpb24uIiIiCisgICAgdHJ5OgorICAgICAgICBpZiBzdGFydCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHlpZWxkIHN0YXJ0KCkKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHlpZWxkIGZ1bmMoKQorICAgIGV4Y2VwdCBleGNlcHRpb246CisgICAgICAgIHBhc3MKKworCitkZWYgc2hyaW5rX3JlcG8oZ2l0X2Rpcik6CisgICAgIiIiU2hyaW5rIHRoZSBuZXdseSBzaGFsbG93IHJlcG9zaXRvcnksIHJlbW92aW5nIHRoZSB1bnJlYWNoYWJsZSBvYmplY3RzLiIiIgorICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbJ2dpdCcsICdyZWZsb2cnLCAnZXhwaXJlJywgJy0tZXhwaXJlLXVucmVhY2hhYmxlPW5vdycsICctLWFsbCddKQorICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbJ2dpdCcsICdyZXBhY2snLCAnLWFkJ10pCisgICAgdHJ5OgorICAgICAgICBvcy51bmxpbmsob3MucGF0aC5qb2luKGdpdF9kaXIsICdvYmplY3RzJywgJ2luZm8nLCAnYWx0ZXJuYXRlcycpKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgaWYgZXhjLmVycm5vICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgIHJhaXNlCisgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsnZ2l0JywgJ3BydW5lJywgJy0tZXhwaXJlJywgJ25vdyddKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vdG9hc3RlciBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi90b2FzdGVyCmluZGV4IDYxYTRhMGYuLjQwMzZmMGEgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi90b2FzdGVyCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi90b2FzdGVyCkBAIC0xOCwxMiArMTgsMjEgQEAKICMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCiAKIEhFTFA9IgotVXNhZ2U6IHNvdXJjZSB0b2FzdGVyIHN0YXJ0fHN0b3AgW3dlYnBvcnQ9PGFkZHJlc3M6cG9ydD5dIFtub3dlYl0KK1VzYWdlOiBzb3VyY2UgdG9hc3RlciBzdGFydHxzdG9wIFt3ZWJwb3J0PTxhZGRyZXNzOnBvcnQ+XSBbbm93ZWJdIFtub2J1aWxkXQogICAgIE9wdGlvbmFsIGFyZ3VtZW50czoKLSAgICAgICAgW25vd2ViXSBTZXR1cCB0aGUgZW52aXJvbm1lbnQgZm9yIGJ1aWxkaW5nIHdpdGggdG9hc3RlciBidXQgZG9uJ3Qgc3RhcnQgdGhlIGRldmVsb3BtZW50IHNlcnZlcgorICAgICAgICBbbm9idWlsZF0gU2V0dXAgdGhlIGVudmlyb25tZW50IGZvciBjYXB0dXJpbmcgYnVpbGRzIHdpdGggdG9hc3RlciBidXQgZGlzYWJsZSBtYW5hZ2VkIGJ1aWxkcworICAgICAgICBbbm93ZWJdIFNldHVwIHRoZSBlbnZpcm9ubWVudCBmb3IgY2FwdHVyaW5nIGJ1aWxkcyB3aXRoIHRvYXN0ZXIgYnV0IGRvbid0IHN0YXJ0IHRoZSB3ZWIgc2VydmVyCiAgICAgICAgIFt3ZWJwb3J0XSBTZXQgdGhlIGRldmVsb3BtZW50IHNlcnZlciAoZGVmYXVsdDogbG9jYWxob3N0OjgwMDApCiAiCiAKK2N1c3RvbV9leHRlbnRpb24oKQoreworICAgIGN1c3RvbV9leHRlbnNpb249JEJCQkFTRURJUi9saWIvdG9hc3Rlci9vcm0vZml4dHVyZXMvY3VzdG9tX3RvYXN0ZXJfYXBwZW5kLnNoCisgICAgaWYgWyAtZiAkY3VzdG9tX2V4dGVuc2lvbiBdIDsgdGhlbgorICAgICAgICAkY3VzdG9tX2V4dGVuc2lvbiAkKgorICAgIGZpCit9CisKIGRhdGFiYXNlQ2hlY2soKQogewogICAgIHJldHZhbD0wCkBAIC01MCw2ICs1OSwxMSBAQAogd2Vic2VydmVyS2lsbEFsbCgpCiB7CiAgICAgbG9jYWwgcGlkZmlsZQorICAgIGlmIFsgLWYgJHtCVUlMRERJUn0vLnRvYXN0ZXJtYWluLnBpZCBdIDsgdGhlbgorICAgICAgICBjdXN0b21fZXh0ZW50aW9uIHdlYl9zdG9wX3Bvc3RwZW5kCisgICAgZWxzZQorICAgICAgICBjdXN0b21fZXh0ZW50aW9uIG5vd2ViX3N0b3BfcG9zdHBlbmQKKyAgICBmaQogICAgIGZvciBwaWRmaWxlIGluICR7QlVJTERESVJ9Ly50b2FzdGVybWFpbi5waWQgJHtCVUlMRERJUn0vLnJ1bmJ1aWxkcy5waWQ7IGRvCiAgICAgICAgIGlmIFsgLWYgJHtwaWRmaWxlfSBdOyB0aGVuCiAgICAgICAgICAgICBwaWQ9YGNhdCAke3BpZGZpbGV9YApAQCAtODksNiArMTAzLDcgQEAKICAgICBlbHNlCiAgICAgICAgIGVjaG8gIlRvYXN0ZXIgZGV2ZWxvcG1lbnQgd2Vic2VydmVyIHN0YXJ0ZWQgYXQgaHR0cDovLyRBRERSX1BPUlQiCiAgICAgICAgIGVjaG8gLWUgIlxuWW91IGNhbiBub3cgcnVuICdiaXRiYWtlIDx0YXJnZXQ+JyBvbiB0aGUgY29tbWFuZCBsaW5lIGFuZCBtb25pdG9yIHlvdXIgYnVpbGQgaW4gVG9hc3Rlci5cbllvdSBjYW4gYWxzbyB1c2UgYSBUb2FzdGVyIHByb2plY3QgdG8gY29uZmlndXJlIGFuZCBydW4gYSBidWlsZC5cbiIKKyAgICAgICAgY3VzdG9tX2V4dGVudGlvbiB3ZWJfc3RhcnRfcG9zdHBlbmQgJEFERFJfUE9SVAogICAgIGZpCiAKICAgICByZXR1cm4gJHJldHZhbApAQCAtMTE2LDggKzEzMSwxNCBAQAogICAgICMgVmVyaWZ5IERqYW5nbyB2ZXJzaW9uCiAgICAgcmVxZmlsZT0kKHB5dGhvbjMgLWMgImltcG9ydCBvczsgcHJpbnQob3MucGF0aC5yZWFscGF0aCgnJEJCQkFTRURJUi90b2FzdGVyLXJlcXVpcmVtZW50cy50eHQnKSkiKQogICAgIGV4cD0ncy9EamFuZ29cKFs+PD1dXCtcKVwoW14sXVwrXCksXChbPjw9XVwrXClcKC5cK1wpLycKLSAgICBleHA9JGV4cCdpbXBvcnQgc3lzLGRqYW5nbzt2ZXJzaW9uPWRqYW5nby5nZXRfdmVyc2lvbigpLnNwbGl0KCIuIik7JwotICAgIGV4cD0kZXhwJ3N5cy5leGl0KG5vdCAodmVyc2lvbiBcMSAiXDIiLnNwbGl0KCIuIikgYW5kIHZlcnNpb24gXDMgIlw0Ii5zcGxpdCgiLiIpKSkvcCcKKyAgICAjIGV4cGFuZCB2ZXJzaW9uIHBhcnRzIHRvIDIgZGlnaXRzIHRvIHN1cHBvcnQgMS4xMC54ID4gMS44CisgICAgIyAobm90ZTpoZWxwZXIgZnVuY3Rpb25zIGhhcmQgdG8gaW5zZXJ0IGluLWxpbmUpCisgICAgZXhwPSRleHAnaW1wb3J0IHN5cyxkamFuZ287JworICAgIGV4cD0kZXhwJ3ZlcnNpb249WyIlMDJkIiAlIGludChuKSBmb3IgbiBpbiBkamFuZ28uZ2V0X3ZlcnNpb24oKS5zcGxpdCgiLiIpXTsnCisgICAgZXhwPSRleHAndm1pbj1bIiUwMmQiICUgaW50KG4pIGZvciBuIGluICJcMiIuc3BsaXQoIi4iKV07JworICAgIGV4cD0kZXhwJ3ZtYXg9WyIlMDJkIiAlIGludChuKSBmb3IgbiBpbiAiXDQiLnNwbGl0KCIuIildOycKKyAgICBleHA9JGV4cCdzeXMuZXhpdChub3QgKHZlcnNpb24gXDEgdm1pbiBhbmQgdmVyc2lvbiBcMyB2bWF4KSknCisgICAgZXhwPSRleHAnL3AnCiAgICAgaWYgISBzZWQgLW4gIiRleHAiICRyZXFmaWxlIHwgcHl0aG9uMyAtIDsgdGhlbgogICAgICAgICByZXE9YGdyZXAgXkRqYW5nbyAkcmVxZmlsZWAKICAgICAgICAgZWNobyAiVGhpcyBwcm9ncmFtIG5lZWRzICRyZXEiCkBAIC0xNjIsOCArMTgzLDggQEAKIHVuc2V0IE9FX1JPT1QKIAogCi0KIFdFQlNFUlZFUj0xCitleHBvcnQgVE9BU1RFUl9CVUlMRFNFUlZFUj0xCiBBRERSX1BPUlQ9ImxvY2FsaG9zdDo4MDAwIgogdW5zZXQgQ01ECiBmb3IgcGFyYW0gaW4gJCo7IGRvCkBAIC0xNzEsNiArMTkyLDkgQEAKICAgICBub3dlYiApCiAgICAgICAgICAgICBXRUJTRVJWRVI9MAogICAgIDs7CisgICAgbm9idWlsZCApCisgICAgICAgICAgICBUT0FTVEVSX0JVSUxEU0VSVkVSPTAKKyAgICA7OwogICAgIHN0YXJ0ICkKICAgICAgICAgICAgIENNRD0kcGFyYW0KICAgICA7OwpAQCAtMjM1LDYgKzI1OSw3IEBACiBlY2hvICJUaGUgc3lzdGVtIHdpbGwgJENNRC4iCiAKICMgRXhlY3V0ZSB0aGUgY29tbWFuZHMKK2N1c3RvbV9leHRlbnRpb24gdG9hc3Rlcl9wcmVwZW5kICRDTUQgJEFERFJfUE9SVAogCiBjYXNlICRDTUQgaW4KICAgICBzdGFydCApCkBAIC0yNTYsMjIgKzI4MSwyOCBAQAogICAgICAgICAgICAgaWYgWyAhIC1mICIkVE9BU1RFUl9ESVIvdG9hc3Rlci5zcWxpdGUiIF0gOyB0aGVuCiAgICAgICAgICAgICAgICAgaWYgISBkYXRhYmFzZUNoZWNrOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgIGVjaG8gIkZhaWxlZCAke0NNRH0uIgotICAgICAgICAgICAgICAgICAgcmV0dXJuIDQKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQKICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGN1c3RvbV9leHRlbnRpb24gbm93ZWJfc3RhcnRfcG9zdHBlbmQgJEFERFJfUE9SVAogICAgICAgICBmaQogICAgICAgICBpZiBbICRXRUJTRVJWRVIgLWd0IDAgXSAmJiAhIHdlYnNlcnZlclN0YXJ0QWxsOyB0aGVuCiAgICAgICAgICAgICBlY2hvICJGYWlsZWQgJHtDTUR9LiIKICAgICAgICAgICAgIHJldHVybiA0CiAgICAgICAgIGZpCiAgICAgICAgIGV4cG9ydCBCSVRCQUtFX1VJPSd0b2FzdGVydWknCi0gICAgICAgICRNQU5BR0UgcnVuYnVpbGRzIFwKLSAgICAgICAgICAgPC9kZXYvbnVsbCA+PiR7QlVJTERESVJ9L3RvYXN0ZXJfcnVuYnVpbGRzLmxvZyAyPiYxIFwKLSAgICAgICAgICAgJiBlY2hvICQhID4ke0JVSUxERElSfS8ucnVuYnVpbGRzLnBpZAorICAgICAgICBpZiBbICRUT0FTVEVSX0JVSUxEU0VSVkVSIC1lcSAxIF0gOyB0aGVuCisgICAgICAgICAgICAkTUFOQUdFIHJ1bmJ1aWxkcyBcCisgICAgICAgICAgICAgICA8L2Rldi9udWxsID4+JHtCVUlMRERJUn0vdG9hc3Rlcl9ydW5idWlsZHMubG9nIDI+JjEgXAorICAgICAgICAgICAgICAgJiBlY2hvICQhID4ke0JVSUxERElSfS8ucnVuYnVpbGRzLnBpZAorICAgICAgICBlbHNlCisgICAgICAgICAgICBlY2hvICJUb2FzdGVyIGJ1aWxkIHNlcnZlciBub3Qgc3RhcnRlZC4iCisgICAgICAgIGZpCiAKICAgICAgICAgIyBzZXQgZmFpbCBzYWZlIHN0b3Agc3lzdGVtIG9uIHRlcm1pbmFsIGV4aXQKICAgICAgICAgdHJhcCBzdG9wX3N5c3RlbSBTSUdIVVAKICAgICAgICAgZWNobyAiU3VjY2Vzc2Z1bCAke0NNRH0uIgorICAgICAgICBjdXN0b21fZXh0ZW50aW9uIHRvYXN0ZXJfcG9zdHBlbmQgJENNRCAkQUREUl9QT1JUCiAgICAgICAgIHJldHVybiAwCiAgICAgOzsKICAgICBzdG9wICkKQEAgLTI3OSwzICszMTAsNSBAQAogICAgICAgICBlY2hvICJTdWNjZXNzZnVsICR7Q01EfS4iCiAgICAgOzsKIGVzYWMKK2N1c3RvbV9leHRlbnRpb24gdG9hc3Rlcl9wb3N0cGVuZCAkQ01EICRBRERSX1BPUlQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1mZXRjaGluZy54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWZldGNoaW5nLnhtbAppbmRleCBkMWNlNDNlLi5jNzIxZTg2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWZldGNoaW5nLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWZldGNoaW5nLnhtbApAQCAtNjIwLDcgKzYyMCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgR2l0IFN1Ym1vZHVsZXMgZmV0Y2hlciBpcyBub3QgYSBjb21wbGV0ZSBmZXRjaGVyCiAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmZXRjaGVyIGhhcyBrbm93biBpc3N1ZXMgd2hlcmUgaXQgZG9lcyBub3QgdXNlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsIHNvdXJjZSBtaXJyb3JpbmcgaW5mcmFzdHJ1Y3R1cmUgcHJvcGVybHkuCisgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWwgc291cmNlIG1pcnJvcmluZyBpbmZyYXN0cnVjdHVyZSBwcm9wZXJseS4gRnVydGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzdWJtb2R1bGUgc291cmNlcyBpdCBmZXRjaGVzIGFyZSBub3QgdmlzaWJsZSB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2luZyBhbmQgc291cmNlIGFyY2hpdmluZyBpbmZyYXN0cnVjdHVyZXMuCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgICAgICA8L25vdGU+CiAgICAgICAgICAgICA8L3BhcmE+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWhlbGxvLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtaGVsbG8ueG1sCmluZGV4IDI2ODVjMGUuLjkyNTNlYWYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtaGVsbG8ueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtaGVsbG8ueG1sCkBAIC0xMjgsMTUgKzEyOCw4IEBACiAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgIFRoaXMgZXhhbXBsZSB3YXMgaW5zcGlyZWQgYnkgYW5kIGRyZXcgaGVhdmlseSBmcm9tIHRoZXNlIHNvdXJjZXM6Ci0gICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL3lvY3RvQHlvY3RvcHJvamVjdC5vcmcvbXNnMDkzNzkuaHRtbCI+TWFpbGluZyBMaXN0IHBvc3QgLSBUaGUgQml0QmFrZSBlcXVpdmFsZW50IG9mICJIZWxsbywgV29ybGQhIjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTUwMzI1MTY1OTExL2h0dHA6Ly9oYW1iZWRkZWQub3JnL2Jsb2cvMjAxMi8xMS8yNC9mcm9tLWJpdGJha2UtaGVsbG8td29ybGQtdG8tYW4taW1hZ2UvIj5IYW1iZWRkZWQgTGludXggYmxvZyBwb3N0IC0gRnJvbSBCaXRiYWtlIEhlbGxvIFdvcmxkIHRvIGFuIEltYWdlPC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIFRoaXMgZXhhbXBsZSB3YXMgaW5zcGlyZWQgYnkgYW5kIGRyZXcgaGVhdmlseSBmcm9tCisgICAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20veW9jdG9AeW9jdG9wcm9qZWN0Lm9yZy9tc2cwOTM3OS5odG1sIj5NYWlsaW5nIExpc3QgcG9zdCAtIFRoZSBCaXRCYWtlIGVxdWl2YWxlbnQgb2YgIkhlbGxvLCBXb3JsZCEiPC91bGluaz4uCiAgICAgICAgIDwvbm90ZT4KIAogICAgICAgICA8cGFyYT4KQEAgLTI2OSw3ICsyNjIsNyBAQAogICAgICAgICAgICAgICAgIGFuZCBkZWZpbmUgc29tZSBrZXkgQml0QmFrZSB2YXJpYWJsZXMuCiAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiwKICAgICAgICAgICAgICAgICBzZWUKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNTAzMjUxNjU5MTEvaHR0cDovL2hhbWJlZGRlZC5vcmcvYmxvZy8yMDEyLzExLzI0L2Zyb20tYml0YmFrZS1oZWxsby13b3JsZC10by1hbi1pbWFnZS8jYW4tb3ZlcnZpZXctb2YtYml0YmFrZWNvbmYnPjwvdWxpbms+CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UvdHJlZS9jb25mL2JpdGJha2UuY29uZic+PC91bGluaz4uCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgICAgIDxwYXJhPlVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHRvIGNyZWF0ZSB0aGUgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBpbiB0aGUgcHJvamVjdCBkaXJlY3Rvcnk6CkBAIC0zNTIsOSArMzQ1LDYgQEAKICAgICAgICAgICAgICAgICBPZiBjb3Vyc2UsIHRoZSA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4gY2FuIGhhdmUgbXVjaAogICAgICAgICAgICAgICAgIG1vcmUgZGVwZW5kaW5nIG9uIHdoaWNoIGJ1aWxkIGVudmlyb25tZW50cyBCaXRCYWtlIGlzCiAgICAgICAgICAgICAgICAgc3VwcG9ydGluZy4KLSAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgPGZpbGVuYW1lPmJhc2UuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUsCi0gICAgICAgICAgICAgICAgeW91IGNhbiBsb29rIGF0Ci0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTUwMzI1MTY1OTExL2h0dHA6Ly9oYW1iZWRkZWQub3JnL2Jsb2cvMjAxMi8xMS8yNC9mcm9tLWJpdGJha2UtaGVsbG8td29ybGQtdG8tYW4taW1hZ2UvI3Rhc2tzJz48L3VsaW5rPi4KICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UnVuIEJpdGJha2U6PC9lbXBoYXNpcz4KICAgICAgICAgICAgICAgICBBZnRlciBtYWtpbmcgc3VyZSB0aGF0IHRoZSA8ZmlsZW5hbWU+Y2xhc3Nlcy9iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPgpAQCAtMzc1LDggKzM2NSw4IEBACiAgICAgICAgICAgICAgICAgY29kZSBzZXBhcmF0ZSBmcm9tIHRoZSBnZW5lcmFsIG1ldGFkYXRhIHVzZWQgYnkgQml0QmFrZS4KICAgICAgICAgICAgICAgICBUaHVzLCB0aGlzIGV4YW1wbGUgY3JlYXRlcyBhbmQgdXNlcyBhIGxheWVyIGNhbGxlZCAibXlsYXllciIuCiAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGFkZGluZyBhIGxheWVyIGF0Ci0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE1MDMyNTE2NTkxMS9odHRwOi8vaGFtYmVkZGVkLm9yZy9ibG9nLzIwMTIvMTEvMjQvZnJvbS1iaXRiYWtlLWhlbGxvLXdvcmxkLXRvLWFuLWltYWdlLyNhZGRpbmctYW4tZXhhbXBsZS1sYXllcic+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGxheWVycyBhdAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8yLjMvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLmh0bWwjbGF5ZXJzJz48L3VsaW5rPi4KICAgICAgICAgICAgICAgICA8L25vdGU+CiAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgICAgIDxwYXJhPk1pbmltYWxseSwgeW91IG5lZWQgYSByZWNpcGUgZmlsZSBhbmQgYSBsYXllciBjb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWludHJvLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtaW50cm8ueG1sCmluZGV4IGNhN2Y3MjQuLjA4ZDlhZmQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtaW50cm8ueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtaW50cm8ueG1sCkBAIC00NDAsNyArNDQwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgQnVpbGQgQ2hlY2tvdXQ6PC9lbXBoYXNpcz4KICAgICAgICAgICAgICAgICAgICAgQSBmaW5hbCBwb3NzaWJpbGl0eSBmb3IgZ2V0dGluZyBhIGNvcHkgb2YgQml0QmFrZSBpcyB0aGF0IGl0CiAgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgY29tZXMgd2l0aCB5b3VyIGNoZWNrb3V0IG9mIGEgbGFyZ2VyIEJpdGJha2UtYmFzZWQgYnVpbGQKLSAgICAgICAgICAgICAgICAgICAgc3lzdGVtLCBzdWNoIGFzIFBva3kgb3IgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLCBzdWNoIGFzIFBva3kuCiAgICAgICAgICAgICAgICAgICAgIFJhdGhlciB0aGFuIG1hbnVhbGx5IGNoZWNraW5nIG91dCBpbmRpdmlkdWFsIGxheWVycyBhbmQKICAgICAgICAgICAgICAgICAgICAgZ2x1aW5nIHRoZW0gdG9nZXRoZXIgeW91cnNlbGYsIHlvdSBjYW4gY2hlY2sKICAgICAgICAgICAgICAgICAgICAgb3V0IGFuIGVudGlyZSBidWlsZCBzeXN0ZW0uCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLW1ldGFkYXRhLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtbWV0YWRhdGEueG1sCmluZGV4IDFkMWU1YjMuLjBjZmE1M2QgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtbWV0YWRhdGEueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtbWV0YWRhdGEueG1sCkBAIC02NjksNyArNjY5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgREVQRU5EUyA9ICJnbGliYyBuY3Vyc2VzIgogICAgICBPVkVSUklERVMgPSAibWFjaGluZTpsb2NhbCIKLSAgICAgREVQRU5EU19hcHBlbmRfbWFjaGluZSA9ICJsaWJtYWQiCisgICAgIERFUEVORFNfYXBwZW5kX21hY2hpbmUgPSAiIGxpYm1hZCIKICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPiBiZWNvbWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAiZ2xpYmMgbmN1cnNlcyBsaWJtYWQiLgpAQCAtODk5LDExICs4OTksMTIgQEAKIAogICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5pbmhlcml0PC9maWxlbmFtZT4gZGlyZWN0aXZlIGlzIGEgcnVkaW1lbnRhcnkKLSAgICAgICAgICAgICAgICBtZWFucyBvZiBzcGVjaWZ5aW5nIHdoYXQgY2xhc3NlcyBvZiBmdW5jdGlvbmFsaXR5IHlvdXIKLSAgICAgICAgICAgICAgICByZWNpcGVzIHJlcXVpcmUuCisgICAgICAgICAgICAgICAgbWVhbnMgb2Ygc3BlY2lmeWluZyBmdW5jdGlvbmFsaXR5IGNvbnRhaW5lZCBpbiBjbGFzcyBmaWxlcworICAgICAgICAgICAgICAgIHRoYXQgeW91ciByZWNpcGVzIHJlcXVpcmUuCiAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gZWFzaWx5IGFic3RyYWN0IG91dCB0aGUgdGFza3MgaW52b2x2ZWQgaW4KICAgICAgICAgICAgICAgICBidWlsZGluZyBhIHBhY2thZ2UgdGhhdCB1c2VzIEF1dG9jb25mIGFuZCBBdXRvbWFrZSBhbmQgcHV0Ci0gICAgICAgICAgICAgICAgdGhvc2UgdGFza3MgaW50byBhIGNsYXNzIGZpbGUgdGhhdCBjYW4gYmUgdXNlZCBieSB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICB0aG9zZSB0YXNrcyBpbnRvIGEgY2xhc3MgZmlsZSBhbmQgdGhlbiBoYXZlIHlvdXIgcmVjaXBlCisgICAgICAgICAgICAgICAgaW5oZXJpdCB0aGF0IGNsYXNzIGZpbGUuCiAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgIDxwYXJhPgpAQCAtOTIyLDEzICs5MjMsMjQgQEAKICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdGVkIGNsYXNzIHdpdGhpbiB5b3VyIHJlY2lwZSBieSBkb2luZyBzbwogICAgICAgICAgICAgICAgICAgICBhZnRlciB0aGUgImluaGVyaXQiIHN0YXRlbWVudC4KICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBkaXJlY3RpdmUgdG8gaW5oZXJpdAorICAgICAgICAgICAgICAgIG11bHRpcGxlIGNsYXNzZXMsIHNlcGFyYXRlIHRoZW0gd2l0aCBzcGFjZXMuCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBpbmhlcml0IGJvdGggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1aWxkaGlzdG9yeTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+cm1fd29yazwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY2xhc3NlczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGluaGVyaXQgYnVpbGRoaXN0b3J5IHJtX3dvcmsKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIElmIG5lY2Vzc2FyeSwgaXQgaXMgcG9zc2libGUgdG8gaW5oZXJpdCBhIGNsYXNzCi0gICAgICAgICAgICAgICAgY29uZGl0aW9uYWxseSBieSB1c2luZwotICAgICAgICAgICAgICAgIGEgdmFyaWFibGUgZXhwcmVzc2lvbiBhZnRlciB0aGUgPGZpbGVuYW1lPmluaGVyaXQ8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIHN0YXRlbWVudC4KKyAgICAgICAgICAgICAgICBBbiBhZHZhbnRhZ2Ugd2l0aCB0aGUgaW5oZXJpdCBkaXJlY3RpdmUgYXMgY29tcGFyZWQgdG8gYm90aAorICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2luY2x1ZGUtZGlyZWN0aXZlJz5pbmNsdWRlPC9saW5rPiBhbmQKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZXF1aXJlLWluY2x1c2lvbic+cmVxdWlyZTwvbGluaz4gZGlyZWN0aXZlcworICAgICAgICAgICAgICAgIGlzIHRoYXQgeW91IGNhbiBpbmhlcml0IGNsYXNzIGZpbGVzIGNvbmRpdGlvbmFsbHkuCisgICAgICAgICAgICAgICAgWW91IGNhbiBhY2NvbXBsaXNoIHRoaXMgYnkgdXNpbmcgYSB2YXJpYWJsZSBleHByZXNzaW9uCisgICAgICAgICAgICAgICAgYWZ0ZXIgdGhlIDxmaWxlbmFtZT5pbmhlcml0PC9maWxlbmFtZT4gc3RhdGVtZW50LgogICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgIGluaGVyaXQgJHtWQVJOQU1FfQpAQCAtOTg1LDYgKzk5NywxNyBAQAogICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgaW5jbHVkZSBkaXJlY3RpdmUgaXMgYSBtb3JlIGdlbmVyaWMgbWV0aG9kIG9mIGluY2x1ZGluZworICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgYXMgY29tcGFyZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0naW5oZXJpdC1kaXJlY3RpdmUnPmluaGVyaXQ8L2xpbms+IGRpcmVjdGl2ZSwKKyAgICAgICAgICAgICAgICB3aGljaCBpcyByZXN0cmljdGVkIHRvIGNsYXNzIChpLmUuIDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgICAgIFRoZSBpbmNsdWRlIGRpcmVjdGl2ZSBpcyBhcHBsaWNhYmxlIGZvciBhbnkgb3RoZXIga2luZCBvZgorICAgICAgICAgICAgICAgIHNoYXJlZCBvciBlbmNhcHN1bGF0ZWQgZnVuY3Rpb25hbGl0eSBvciBjb25maWd1cmF0aW9uIHRoYXQKKyAgICAgICAgICAgICAgICBkb2VzIG5vdCBzdWl0IGEgPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgc3VwcG9zZSB5b3UgbmVlZGVkIGEgcmVjaXBlIHRvIGluY2x1ZGUgc29tZQogICAgICAgICAgICAgICAgIHNlbGYtdGVzdCBkZWZpbml0aW9uczoKICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CkBAIC0xMDE4LDYgKzEwNDEsMTggQEAKICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHJlcXVpcmUgZGlyZWN0aXZlLCBsaWtlIHRoZSBpbmNsdWRlIGRpcmVjdGl2ZSBwcmV2aW91c2x5CisgICAgICAgICAgICAgICAgZGVzY3JpYmVkLCBpcyBhIG1vcmUgZ2VuZXJpYyBtZXRob2Qgb2YgaW5jbHVkaW5nCisgICAgICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSBhcyBjb21wYXJlZCB0byB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdpbmhlcml0LWRpcmVjdGl2ZSc+aW5oZXJpdDwvbGluaz4gZGlyZWN0aXZlLAorICAgICAgICAgICAgICAgIHdoaWNoIGlzIHJlc3RyaWN0ZWQgdG8gY2xhc3MgKGkuZS4gPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgZmlsZXMuCisgICAgICAgICAgICAgICAgVGhlIHJlcXVpcmUgZGlyZWN0aXZlIGlzIGFwcGxpY2FibGUgZm9yIGFueSBvdGhlciBraW5kIG9mCisgICAgICAgICAgICAgICAgc2hhcmVkIG9yIGVuY2Fwc3VsYXRlZCBmdW5jdGlvbmFsaXR5IG9yIGNvbmZpZ3VyYXRpb24gdGhhdAorICAgICAgICAgICAgICAgIGRvZXMgbm90IHN1aXQgYSA8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICBTaW1pbGFyIHRvIGhvdyBCaXRCYWtlIGhhbmRsZXMKICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdpbmNsdWRlLWRpcmVjdGl2ZSc+PGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPjwvbGluaz4sCiAgICAgICAgICAgICAgICAgaWYgdGhlIHBhdGggc3BlY2lmaWVkCkBAIC0xMDQ5LDggKzEwODQsOSBAQAogCiAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICBXaGVuIGNyZWF0aW5nIGEgY29uZmlndXJhdGlvbiBmaWxlICg8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiksCi0gICAgICAgICAgICAgICAgeW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5JTkhFUklUPC9maWxlbmFtZT4gZGlyZWN0aXZlIHRvCi0gICAgICAgICAgICAgICAgaW5oZXJpdCBhIGNsYXNzLgorICAgICAgICAgICAgICAgIHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTkhFUklUJz48ZmlsZW5hbWU+SU5IRVJJVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlIHRvIGluaGVyaXQgYSBjbGFzcy4KICAgICAgICAgICAgICAgICBCaXRCYWtlIG9ubHkgc3VwcG9ydHMgdGhpcyBkaXJlY3RpdmUgd2hlbiB1c2VkIHdpdGhpbgogICAgICAgICAgICAgICAgIGEgY29uZmlndXJhdGlvbiBmaWxlLgogICAgICAgICAgICAgPC9wYXJhPgpAQCAtMTA4Myw3ICsxMTE5LDcgQEAKICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXV0b3Rvb2xzPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5wa2djb25maWc8L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgIGNsYXNzZXM6CiAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKyAgICAgSU5IRVJJVCArPSAiYXV0b3Rvb2xzIHBrZ2NvbmZpZyIKICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvc2VjdGlvbj4KQEAgLTIwMjksNyArMjA2NSw3IEBACiAgICAgICAgICAgICBiZWZvcmUgYW55IHRhc2tzIGFyZSBleGVjdXRlZCBzbyB3b3VsZCBiZSBpbiB0aGUgZ2xvYmFsCiAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGRhdGFzdG9yZSBuYW1lc3BhY2UuCiAgICAgICAgICAgICBObyByZWNpcGUtc3BlY2lmaWMgbWV0YWRhdGEgZXhpc3RzIGluIHRoYXQgbmFtZXNwYWNlLgotICAgICAgICAgICAgVGhlICJCdWlsZFN0YXJ0ZWQiIGFuZCAiYnVpbGRDb21wbGV0ZWQiIGV2ZW50cyBhbHNvIHJ1biBpbgorICAgICAgICAgICAgVGhlICJCdWlsZFN0YXJ0ZWQiIGFuZCAiQnVpbGRDb21wbGV0ZWQiIGV2ZW50cyBhbHNvIHJ1biBpbgogICAgICAgICAgICAgdGhlIG1haW4gY29va2VyL3NlcnZlciBwcm9jZXNzIHJhdGhlciB0aGFuIGFueSB3b3JrZXIgY29udGV4dC4KICAgICAgICAgICAgIFRodXMsIGFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGRhdGFzdG9yZSB3b3VsZCBiZSBzZWVuIGJ5IG90aGVyCiAgICAgICAgICAgICBjb29rZXIvc2VydmVyIGV2ZW50cyB3aXRoaW4gdGhlIGN1cnJlbnQgYnVpbGQgYnV0IG5vdCBzZWVuCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLXJlZi12YXJpYWJsZXMueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1yZWYtdmFyaWFibGVzLnhtbAppbmRleCAwZTg5YmYyLi5kODllMTIzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLXJlZi12YXJpYWJsZXMueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtcmVmLXZhcmlhYmxlcy54bWwKQEAgLTExNDMsOCArMTE0Myw2IEBACiAgICAgICAgICAgICA8Z2xvc3NkZWY+CiAgICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIFNldHMgdGhlIGJhc2UgbG9jYXRpb24gd2hlcmUgbGF5ZXJzIGFyZSBzdG9yZWQuCi0gICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgbG9jYXRpb24gaXMgc2V0IHRvCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0NPUkVCQVNFfTwvZmlsZW5hbWU+LgogICAgICAgICAgICAgICAgICAgICBUaGlzIHNldHRpbmcgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLWxheWVycyBsYXllcmluZGV4LWZldGNoPC9maWxlbmFtZT4gYW5kCiAgICAgICAgICAgICAgICAgICAgIHRlbGxzIDxmaWxlbmFtZT5iaXRiYWtlLWxheWVyczwvZmlsZW5hbWU+IHdoZXJlIHRvIHBsYWNlCkBAIC0xNTk2LDkgKzE1OTQsMTkgQEAKICAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTkhFUklUJz48Z2xvc3N0ZXJtPklOSEVSSVQ8L2dsb3NzdGVybT4KICAgICAgICAgICAgIDxnbG9zc2RlZj4KICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRoZSBuYW1lZCBjbGFzcyB0byBiZSBpbmhlcml0ZWQgYXQKLSAgICAgICAgICAgICAgICAgICAgdGhpcyBwb2ludCBkdXJpbmcgcGFyc2luZy4KLSAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGlzIG9ubHkgdmFsaWQgaW4gY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRoZSBuYW1lZCBjbGFzcyBvciBjbGFzc2VzIHRvIGJlIGluaGVyaXRlZCBnbG9iYWxseS4KKyAgICAgICAgICAgICAgICAgICAgQW5vbnltb3VzIGZ1bmN0aW9ucyBpbiB0aGUgY2xhc3Mgb3IgY2xhc3NlcworICAgICAgICAgICAgICAgICAgICBhcmUgbm90IGV4ZWN1dGVkIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgYmFzZSBjb25maWd1cmF0aW9uIGFuZCBpbiBlYWNoIGluZGl2aWR1YWwgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpZ25vcmVzIGNoYW5nZXMgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklOSEVSSVQ8L2ZpbGVuYW1lPiBpbiBpbmRpdmlkdWFsIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIDxmaWxlbmFtZT5JTkhFUklUPC9maWxlbmFtZT4sIHNlZQorICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9ImluaGVyaXQtY29uZmlndXJhdGlvbi1kaXJlY3RpdmUiPjxmaWxlbmFtZT5JTkhFUklUPC9maWxlbmFtZT4gQ29uZmlndXJhdGlvbiBEaXJlY3RpdmU8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KQEAgLTE4OTMsNyArMTkwMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHR3byBleGFtcGxlczoKICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICBQUkVGRVJSRURfVkVSU0lPTl9weXRob24gPSAiMi43LjMiCi0gICAgIFBSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvID0gIjMuMTAlIgorICAgICBQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0byA9ICI0LjEyJSIKICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvQ09XLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL0NPVy5weQppbmRleCAzNmViYmQ5Li5iZWM2MjA4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvQ09XLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9DT1cucHkKQEAgLTMsNyArMyw3IEBACiAjCiAjIFRoaXMgaXMgYSBjb3B5IG9uIHdyaXRlIGRpY3Rpb25hcnkgYW5kIHNldCB3aGljaCBhYnVzZXMgY2xhc3NlcyB0byB0cnkgYW5kIGJlIG5pY2UgYW5kIGZhc3QuCiAjCi0jIENvcHlyaWdodCAoQykgMjAwNiBUaW0gQW1zZWxsCisjIENvcHlyaWdodCAoQykgMjAwNiBUaW0gQW5zZWxsCiAjCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvX19pbml0X18ucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvX19pbml0X18ucHkKaW5kZXggYmZlMGNhNS4uNTI2ODgzMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL19faW5pdF9fLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9fX2luaXRfXy5weQpAQCAtMjEsNyArMjEsNyBAQAogIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgogCi1fX3ZlcnNpb25fXyA9ICIxLjM0LjAiCitfX3ZlcnNpb25fXyA9ICIxLjM2LjAiCiAKIGltcG9ydCBzeXMKIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMywgNCwgMCk6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY2FjaGUucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY2FjaGUucHkKaW5kZXggZTdlZWI0Zi4uODZjZTBlNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2NhY2hlLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jYWNoZS5weQpAQCAtODYsOSArODYsOSBAQAogY2xhc3MgQ29yZVJlY2lwZUluZm8oUmVjaXBlSW5mb0NvbW1vbik6CiAgICAgX19zbG90c19fID0gKCkKIAotICAgIGNhY2hlZmlsZSA9ICJiYl9jYWNoZS5kYXQiICAgCisgICAgY2FjaGVmaWxlID0gImJiX2NhY2hlLmRhdCIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbWV0YWRhdGEpOiAgICAgIAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbWV0YWRhdGEpOgogICAgICAgICBzZWxmLmZpbGVfZGVwZW5kcyA9IG1ldGFkYXRhLmdldFZhcignX19kZXBlbmRzJywgRmFsc2UpCiAgICAgICAgIHNlbGYudGltZXN0YW1wID0gYmIucGFyc2UuY2FjaGVkX210aW1lKGZpbGVuYW1lKQogICAgICAgICBzZWxmLnZhcmlhbnRzID0gc2VsZi5saXN0dmFyKCdfX1ZBUklBTlRTJywgbWV0YWRhdGEpICsgWycnXQpAQCAtMTA3LDcgKzEwNyw3IEBACiAKICAgICAgICAgc2VsZi5wbiA9IHNlbGYuZ2V0dmFyKCdQTicsIG1ldGFkYXRhKQogICAgICAgICBzZWxmLnBhY2thZ2VzID0gc2VsZi5saXN0dmFyKCdQQUNLQUdFUycsIG1ldGFkYXRhKQotICAgICAgICBpZiBub3Qgc2VsZi5wbiBpbiBzZWxmLnBhY2thZ2VzOgorICAgICAgICBpZiBub3Qgc2VsZi5wYWNrYWdlczoKICAgICAgICAgICAgIHNlbGYucGFja2FnZXMuYXBwZW5kKHNlbGYucG4pCiAKICAgICAgICAgc2VsZi5iYXNldGFza2hhc2hlcyA9IHNlbGYudGFza3ZhcignQkJfQkFTRUhBU0gnLCBzZWxmLnRhc2tzLCBtZXRhZGF0YSkKQEAgLTEyMiw3ICsxMjIsNyBAQAogICAgICAgICBzZWxmLmRlZmF1bHRwcmVmID0gc2VsZi5pbnR2YXIoJ0RFRkFVTFRfUFJFRkVSRU5DRScsIG1ldGFkYXRhKQogICAgICAgICBzZWxmLm5vdF93b3JsZCA9IHNlbGYuZ2V0dmFyKCdFWENMVURFX0ZST01fV09STEQnLCBtZXRhZGF0YSkKICAgICAgICAgc2VsZi5zdGFtcCA9IHNlbGYuZ2V0dmFyKCdTVEFNUCcsIG1ldGFkYXRhKQotICAgICAgICBzZWxmLnN0YW1wY2xlYW4gPSBzZWxmLmdldHZhcignU1RBTVBDTEVBTicsIG1ldGFkYXRhKSAgICAgICAgCisgICAgICAgIHNlbGYuc3RhbXBjbGVhbiA9IHNlbGYuZ2V0dmFyKCdTVEFNUENMRUFOJywgbWV0YWRhdGEpCiAgICAgICAgIHNlbGYuc3RhbXBfZXh0cmFpbmZvID0gc2VsZi5mbGFnbGlzdCgnc3RhbXAtZXh0cmEtaW5mbycsIHNlbGYudGFza3MsIG1ldGFkYXRhKQogICAgICAgICBzZWxmLmZpbGVfY2hlY2tzdW1zID0gc2VsZi5mbGFnbGlzdCgnZmlsZS1jaGVja3N1bXMnLCBzZWxmLnRhc2tzLCBtZXRhZGF0YSwgVHJ1ZSkKICAgICAgICAgc2VsZi5wYWNrYWdlc19keW5hbWljID0gc2VsZi5saXN0dmFyKCdQQUNLQUdFU19EWU5BTUlDJywgbWV0YWRhdGEpCkBAIC0yMTcsNyArMjE3LDcgQEAKICAgICAgICAgICAgIGNhY2hlZGF0YS5wYWNrYWdlc19keW5hbWljW3BhY2thZ2VdLmFwcGVuZChmbikKIAogICAgICAgICAjIEJ1aWxkIGhhc2ggb2YgcnVudGltZSBkZXBlbmRzIGFuZCByZWNvbW1lbmRzCi0gICAgICAgIGZvciBwYWNrYWdlIGluIHNlbGYucGFja2FnZXMgKyBbc2VsZi5wbl06CisgICAgICAgIGZvciBwYWNrYWdlIGluIHNlbGYucGFja2FnZXM6CiAgICAgICAgICAgICBjYWNoZWRhdGEucnVuZGVwc1tmbl1bcGFja2FnZV0gPSBsaXN0KHNlbGYucmRlcGVuZHMpICsgc2VsZi5yZGVwZW5kc19wa2dbcGFja2FnZV0KICAgICAgICAgICAgIGNhY2hlZGF0YS5ydW5yZWNzW2ZuXVtwYWNrYWdlXSA9IGxpc3Qoc2VsZi5ycmVjb21tZW5kcykgKyBzZWxmLnJyZWNvbW1lbmRzX3BrZ1twYWNrYWdlXQogCkBAIC0zNzUsOCArMzc1LDggQEAKICAgICAgICAgZGF0YSA9IGRhdGFidWlsZGVyLmRhdGEKIAogICAgICAgICAjIFBhc3MgY2FjaGVzX2FycmF5IGluZm9ybWF0aW9uIGludG8gQ2FjaGUgQ29uc3RydWN0b3IKLSAgICAgICAgIyBJdCB3aWxsIGJlIHVzZWQgbGF0ZXIgZm9yIGRlY2lkaW5nIHdoZXRoZXIgd2UgCi0gICAgICAgICMgbmVlZCBleHRyYSBjYWNoZSBmaWxlIGR1bXAvbG9hZCBzdXBwb3J0IAorICAgICAgICAjIEl0IHdpbGwgYmUgdXNlZCBsYXRlciBmb3IgZGVjaWRpbmcgd2hldGhlciB3ZQorICAgICAgICAjIG5lZWQgZXh0cmEgY2FjaGUgZmlsZSBkdW1wL2xvYWQgc3VwcG9ydAogICAgICAgICBzZWxmLmNhY2hlc19hcnJheSA9IGNhY2hlc19hcnJheQogICAgICAgICBzZWxmLmNhY2hlZGlyID0gZGF0YS5nZXRWYXIoIkNBQ0hFIikKICAgICAgICAgc2VsZi5jbGVhbiA9IHNldCgpCkBAIC00MjEsNyArNDIxLDcgQEAKICAgICAgICAgICAgICAgICBjYWNoZXNpemUgKz0gb3MuZnN0YXQoY2FjaGVmaWxlLmZpbGVubygpKS5zdF9zaXplCiAKICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5DYWNoZUxvYWRTdGFydGVkKGNhY2hlc2l6ZSksIHNlbGYuZGF0YSkKLSAgICAgICAgCisKICAgICAgICAgZm9yIGNhY2hlX2NsYXNzIGluIHNlbGYuY2FjaGVzX2FycmF5OgogICAgICAgICAgICAgY2FjaGVmaWxlID0gZ2V0Q2FjaGVGaWxlKHNlbGYuY2FjaGVkaXIsIGNhY2hlX2NsYXNzLmNhY2hlZmlsZSwgc2VsZi5kYXRhX2hhc2gpCiAgICAgICAgICAgICB3aXRoIG9wZW4oY2FjaGVmaWxlLCAicmIiKSBhcyBjYWNoZWZpbGU6CkBAIC00MzgsOCArNDM4LDggQEAKICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0NhY2hlIHZlcnNpb24gbWlzbWF0Y2gsIHJlYnVpbGRpbmcuLi4nKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICBlbGlmIGJpdGJha2VfdmVyICE9IGJiLl9fdmVyc2lvbl9fOgotICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0JpdGJha2UgdmVyc2lvbiBtaXNtYXRjaCwgcmVidWlsZGluZy4uLicpCi0gICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0JpdGJha2UgdmVyc2lvbiBtaXNtYXRjaCwgcmVidWlsZGluZy4uLicpCisgICAgICAgICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgICAgICAgICAgIyBMb2FkIHRoZSByZXN0IG9mIHRoZSBjYWNoZSBmaWxlCiAgICAgICAgICAgICAgICAgY3VycmVudF9wcm9ncmVzcyA9IDAKQEAgLTYxNiwxMyArNjE2LDEzIEBACiAgICAgICAgICAgICAgICAgICAgIGEgPSBmbC5maW5kKCI6VHJ1ZSIpCiAgICAgICAgICAgICAgICAgICAgIGIgPSBmbC5maW5kKCI6RmFsc2UiKQogICAgICAgICAgICAgICAgICAgICBpZiAoKGEgPCAwKSBhbmQgYikgb3IgKChiID4gMCkgYW5kIChiIDwgYSkpOgotICAgICAgICAgICAgICAgICAgICAgICBmID0gZmxbOmIrNl0KLSAgICAgICAgICAgICAgICAgICAgICAgZmwgPSBmbFtiKzc6XQorICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGZsWzpiKzZdCisgICAgICAgICAgICAgICAgICAgICAgICBmbCA9IGZsW2IrNzpdCiAgICAgICAgICAgICAgICAgICAgIGVsaWYgKChiIDwgMCkgYW5kIGEpIG9yICgoYSA+IDApIGFuZCAoYSA8IGIpKToKLSAgICAgICAgICAgICAgICAgICAgICAgZiA9IGZsWzphKzVdCi0gICAgICAgICAgICAgICAgICAgICAgIGZsID0gZmxbYSs2Ol0KKyAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBmbFs6YSs1XQorICAgICAgICAgICAgICAgICAgICAgICAgZmwgPSBmbFthKzY6XQogICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICAgICAgZmwgPSBmbC5zdHJpcCgpCiAgICAgICAgICAgICAgICAgICAgIGlmICIqIiBpbiBmOgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKQEAgLTg4Niw0ICs4ODYsMyBAQAogICAgICAgICAgICAgcC5kdW1wKFtkYXRhLCBzZWxmLl9fY2xhc3NfXy5DQUNIRV9WRVJTSU9OXSkKIAogICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGdsZikKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2NvbW1hbmQucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29tbWFuZC5weQppbmRleCBhOTE5ZjU4Li42Yzk2NmUzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29tbWFuZC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29tbWFuZC5weQpAQCAtNTAsNiArNTAsOCBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlKToKICAgICAgICAgc2VsZi5lcnJvciA9IG1lc3NhZ2UKICAgICAgICAgQ29tbWFuZEV4aXQuX19pbml0X18oc2VsZiwgMSkKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJDb21tYW5kIGV4ZWN1dGlvbiBmYWlsZWQ6ICVzIiAlIHNlbGYuZXJyb3IKIAogY2xhc3MgQ29tbWFuZEVycm9yKEV4Y2VwdGlvbik6CiAgICAgcGFzcwpAQCAtNzYsNyArNzgsOCBAQAogICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGNvbW1hbmRfbWV0aG9kLCAncmVhZG9ubHknKSBvciBGYWxzZSA9PSBnZXRhdHRyKGNvbW1hbmRfbWV0aG9kLCAncmVhZG9ubHknKToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUsICJOb3QgYWJsZSB0byBleGVjdXRlIG5vdCByZWFkb25seSBjb21tYW5kcyBpbiByZWFkb25seSBtb2RlIgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlmIGdldGF0dHIoY29tbWFuZF9tZXRob2QsICduZWVkY29uZmlnJywgRmFsc2UpOgorICAgICAgICAgICAgICAgIHNlbGYuY29va2VyLnByb2Nlc3NfaW5vdGlmeV91cGRhdGVzKCkKKyAgICAgICAgICAgICAgICBpZiBnZXRhdHRyKGNvbW1hbmRfbWV0aG9kLCAnbmVlZGNvbmZpZycsIFRydWUpOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmNvb2tlci51cGRhdGVDYWNoZVN5bmMoKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbW1hbmRfbWV0aG9kKHNlbGYsIGNvbW1hbmRsaW5lKQogICAgICAgICAgICAgZXhjZXB0IENvbW1hbmRFcnJvciBhcyBleGM6CkBAIC05Niw2ICs5OSw3IEBACiAKICAgICBkZWYgcnVuQXN5bmNDb21tYW5kKHNlbGYpOgogICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmNvb2tlci5wcm9jZXNzX2lub3RpZnlfdXBkYXRlcygpCiAgICAgICAgICAgICBpZiBzZWxmLmNvb2tlci5zdGF0ZSBpbiAoYmIuY29va2VyLnN0YXRlLmVycm9yLCBiYi5jb29rZXIuc3RhdGUuc2h1dGRvd24sIGJiLmNvb2tlci5zdGF0ZS5mb3JjZXNodXRkb3duKToKICAgICAgICAgICAgICAgICAjIHVwZGF0ZUNhY2hlIHdpbGwgdHJpZ2dlciBhIHNodXRkb3duIG9mIHRoZSBwYXJzZXIKICAgICAgICAgICAgICAgICAjIGFuZCB0aGVuIHJhaXNlIEJCSGFuZGxlZEV4Y2VwdGlvbiB0cmlnZ2VyaW5nIGFuIGV4aXQKQEAgLTE0MSw2ICsxNDUsOSBAQAogICAgICAgICBzZWxmLmN1cnJlbnRBc3luY0NvbW1hbmQgPSBOb25lCiAgICAgICAgIHNlbGYuY29va2VyLmZpbmlzaGNvbW1hbmQoKQogCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBzZWxmLnJlbW90ZWRhdGFzdG9yZXMgPSBiYi5yZW1vdGVkYXRhLlJlbW90ZURhdGFzdG9yZXMoc2VsZi5jb29rZXIpCisKIGRlZiBzcGxpdF9tY19wbihwbik6CiAgICAgaWYgcG4uc3RhcnRzd2l0aCgibXVsdGljb25maWc6Iik6CiAgICAgICAgIF8sIG1jLCBwbiA9IHBuLnNwbGl0KCI6IiwgMikKQEAgLTIzMyw1OSArMjQwLDE1IEBACiAgICAgICAgIGNvbW1hbmQuY29va2VyLmNvbmZpZ3VyYXRpb24ucG9zdGZpbGUgPSBwb3N0ZmlsZXMKICAgICBzZXRQcmVQb3N0Q29uZkZpbGVzLm5lZWRjb25maWcgPSBGYWxzZQogCi0gICAgZGVmIGdldENwdUNvdW50KHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6Ci0gICAgICAgICIiIgotICAgICAgICBHZXQgdGhlIENQVSBjb3VudCBvbiB0aGUgYml0YmFrZSBzZXJ2ZXIKLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBiYi51dGlscy5jcHVfY291bnQoKQotICAgIGdldENwdUNvdW50LnJlYWRvbmx5ID0gVHJ1ZQotICAgIGdldENwdUNvdW50Lm5lZWRjb25maWcgPSBGYWxzZQotCiAgICAgZGVmIG1hdGNoRmlsZShzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgogICAgICAgICBmTWF0Y2ggPSBwYXJhbXNbMF0KICAgICAgICAgcmV0dXJuIGNvbW1hbmQuY29va2VyLm1hdGNoRmlsZShmTWF0Y2gpCiAgICAgbWF0Y2hGaWxlLm5lZWRjb25maWcgPSBGYWxzZQogCi0gICAgZGVmIGdlbmVyYXRlTmV3SW1hZ2Uoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKLSAgICAgICAgaW1hZ2UgPSBwYXJhbXNbMF0KLSAgICAgICAgYmFzZV9pbWFnZSA9IHBhcmFtc1sxXQotICAgICAgICBwYWNrYWdlX3F1ZXVlID0gcGFyYW1zWzJdCi0gICAgICAgIHRpbWVzdGFtcCA9IHBhcmFtc1szXQotICAgICAgICBkZXNjcmlwdGlvbiA9IHBhcmFtc1s0XQotICAgICAgICByZXR1cm4gY29tbWFuZC5jb29rZXIuZ2VuZXJhdGVOZXdJbWFnZShpbWFnZSwgYmFzZV9pbWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VfcXVldWUsIHRpbWVzdGFtcCwgZGVzY3JpcHRpb24pCi0KLSAgICBkZWYgZW5zdXJlRGlyKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6Ci0gICAgICAgIGRpcmVjdG9yeSA9IHBhcmFtc1swXQotICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZGlyZWN0b3J5KQotICAgIGVuc3VyZURpci5uZWVkY29uZmlnID0gRmFsc2UKLQotICAgIGRlZiBzZXRWYXJGaWxlKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6Ci0gICAgICAgICIiIgotICAgICAgICBTYXZlIGEgdmFyaWFibGUgaW4gYSBmaWxlOyB1c2VkIGZvciBzYXZpbmcgaW4gYSBjb25maWd1cmF0aW9uIGZpbGUKLSAgICAgICAgIiIiCi0gICAgICAgIHZhciA9IHBhcmFtc1swXQotICAgICAgICB2YWwgPSBwYXJhbXNbMV0KLSAgICAgICAgZGVmYXVsdF9maWxlID0gcGFyYW1zWzJdCi0gICAgICAgIG9wID0gcGFyYW1zWzNdCi0gICAgICAgIGNvbW1hbmQuY29va2VyLm1vZGlmeUNvbmZpZ3VyYXRpb25WYXIodmFyLCB2YWwsIGRlZmF1bHRfZmlsZSwgb3ApCi0gICAgc2V0VmFyRmlsZS5uZWVkY29uZmlnID0gRmFsc2UKLQotICAgIGRlZiByZW1vdmVWYXJGaWxlKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6Ci0gICAgICAgICIiIgotICAgICAgICBSZW1vdmUgYSB2YXJpYWJsZSBkZWNsYXJhdGlvbiBmcm9tIGEgZmlsZQotICAgICAgICAiIiIKLSAgICAgICAgdmFyID0gcGFyYW1zWzBdCi0gICAgICAgIGNvbW1hbmQuY29va2VyLnJlbW92ZUNvbmZpZ3VyYXRpb25WYXIodmFyKQotICAgIHJlbW92ZVZhckZpbGUubmVlZGNvbmZpZyA9IEZhbHNlCi0KLSAgICBkZWYgY3JlYXRlQ29uZmlnRmlsZShzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgotICAgICAgICAiIiIKLSAgICAgICAgQ3JlYXRlIGFuIGV4dHJhIGNvbmZpZ3VyYXRpb24gZmlsZQotICAgICAgICAiIiIKLSAgICAgICAgbmFtZSA9IHBhcmFtc1swXQotICAgICAgICBjb21tYW5kLmNvb2tlci5jcmVhdGVDb25maWdGaWxlKG5hbWUpCi0gICAgY3JlYXRlQ29uZmlnRmlsZS5uZWVkY29uZmlnID0gRmFsc2UKKyAgICBkZWYgZ2V0VUlIYW5kbGVyTnVtKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgIHJldHVybiBiYi5ldmVudC5nZXRfdWloYW5kbGVyKCkKKyAgICBnZXRVSUhhbmRsZXJOdW0ubmVlZGNvbmZpZyA9IEZhbHNlCisgICAgZ2V0VUlIYW5kbGVyTnVtLnJlYWRvbmx5ID0gVHJ1ZQogCiAgICAgZGVmIHNldEV2ZW50TWFzayhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgogICAgICAgICBoYW5kbGVyTnVtID0gcGFyYW1zWzBdCkBAIC0zMjMsNiArMjg2LDcgQEAKICAgICBwYXJzZUNvbmZpZ3VyYXRpb24ubmVlZGNvbmZpZyA9IEZhbHNlCiAKICAgICBkZWYgZ2V0TGF5ZXJQcmlvcml0aWVzKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgIGNvbW1hbmQuY29va2VyLnBhcnNlQ29uZmlndXJhdGlvbigpCiAgICAgICAgIHJldCA9IFtdCiAgICAgICAgICMgcmVnZXggb2JqZWN0cyBjYW5ub3QgYmUgbWFyc2hhbGxlZCBieSB4bWxycGMKICAgICAgICAgZm9yIGNvbGxlY3Rpb24sIHBhdHRlcm4sIHJlZ2V4LCBwcmkgaW4gY29tbWFuZC5jb29rZXIuYmJmaWxlX2NvbmZpZ19wcmlvcml0aWVzOgpAQCAtMzU0LDYgKzMxOCwzOCBAQAogICAgICAgICByZXR1cm4gY29tbWFuZC5jb29rZXIucmVjaXBlY2FjaGVzW21jXS5wa2dfcGVwdnByCiAgICAgZ2V0UmVjaXBlVmVyc2lvbnMucmVhZG9ubHkgPSBUcnVlCiAKKyAgICBkZWYgZ2V0UmVjaXBlUHJvdmlkZXMoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbWMgPSBwYXJhbXNbMF0KKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBtYyA9ICcnCisgICAgICAgIHJldHVybiBjb21tYW5kLmNvb2tlci5yZWNpcGVjYWNoZXNbbWNdLmZuX3Byb3ZpZGVzCisgICAgZ2V0UmVjaXBlUHJvdmlkZXMucmVhZG9ubHkgPSBUcnVlCisKKyAgICBkZWYgZ2V0UmVjaXBlUGFja2FnZXMoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbWMgPSBwYXJhbXNbMF0KKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBtYyA9ICcnCisgICAgICAgIHJldHVybiBjb21tYW5kLmNvb2tlci5yZWNpcGVjYWNoZXNbbWNdLnBhY2thZ2VzCisgICAgZ2V0UmVjaXBlUGFja2FnZXMucmVhZG9ubHkgPSBUcnVlCisKKyAgICBkZWYgZ2V0UmVjaXBlUGFja2FnZXNEeW5hbWljKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1jID0gcGFyYW1zWzBdCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgbWMgPSAnJworICAgICAgICByZXR1cm4gY29tbWFuZC5jb29rZXIucmVjaXBlY2FjaGVzW21jXS5wYWNrYWdlc19keW5hbWljCisgICAgZ2V0UmVjaXBlUGFja2FnZXNEeW5hbWljLnJlYWRvbmx5ID0gVHJ1ZQorCisgICAgZGVmIGdldFJQcm92aWRlcnMoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbWMgPSBwYXJhbXNbMF0KKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBtYyA9ICcnCisgICAgICAgIHJldHVybiBjb21tYW5kLmNvb2tlci5yZWNpcGVjYWNoZXNbbWNdLnJwcm92aWRlcnMKKyAgICBnZXRSUHJvdmlkZXJzLnJlYWRvbmx5ID0gVHJ1ZQorCiAgICAgZGVmIGdldFJ1bnRpbWVEZXBlbmRzKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CiAgICAgICAgIHJldCA9IFtdCiAgICAgICAgIHRyeToKQEAgLTU5MiwxMSArNTg4LDE0IEBACiAgICAgICAgIGJmaWxlID0gcGFyYW1zWzBdCiAgICAgICAgIHRhc2sgPSBwYXJhbXNbMV0KICAgICAgICAgaWYgbGVuKHBhcmFtcykgPiAyOgotICAgICAgICAgICAgaGlkZXdhcm5pbmcgPSBwYXJhbXNbMl0KKyAgICAgICAgICAgIGludGVybmFsID0gcGFyYW1zWzJdCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBoaWRld2FybmluZyA9IEZhbHNlCisgICAgICAgICAgICBpbnRlcm5hbCA9IEZhbHNlCiAKLSAgICAgICAgY29tbWFuZC5jb29rZXIuYnVpbGRGaWxlKGJmaWxlLCB0YXNrLCBoaWRld2FybmluZykKKyAgICAgICAgaWYgaW50ZXJuYWw6CisgICAgICAgICAgICBjb21tYW5kLmNvb2tlci5idWlsZEZpbGVJbnRlcm5hbChiZmlsZSwgdGFzaywgZmlyZWV2ZW50cz1GYWxzZSwgcXVpZXRsb2c9VHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbW1hbmQuY29va2VyLmJ1aWxkRmlsZShiZmlsZSwgdGFzaykKICAgICBidWlsZEZpbGUubmVlZGNhY2hlID0gRmFsc2UKIAogICAgIGRlZiBidWlsZFRhcmdldHMoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKQEAgLTY0NiwxNyArNjQ1LDYgQEAKICAgICAgICAgY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoKQogICAgIGdlbmVyYXRlVGFyZ2V0c1RyZWUubmVlZGNhY2hlID0gVHJ1ZQogCi0gICAgZGVmIGZpbmRDb3JlQmFzZUZpbGVzKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6Ci0gICAgICAgICIiIgotICAgICAgICBGaW5kIGNlcnRhaW4gZmlsZXMgaW4gQ09SRUJBU0UgZGlyZWN0b3J5LiBpLmUuIExheWVycwotICAgICAgICAiIiIKLSAgICAgICAgc3ViZGlyID0gcGFyYW1zWzBdCi0gICAgICAgIGZpbGVuYW1lID0gcGFyYW1zWzFdCi0KLSAgICAgICAgY29tbWFuZC5jb29rZXIuZmluZENvcmVCYXNlRmlsZXMoc3ViZGlyLCBmaWxlbmFtZSkKLSAgICAgICAgY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoKQotICAgIGZpbmRDb3JlQmFzZUZpbGVzLm5lZWRjYWNoZSA9IEZhbHNlCi0KICAgICBkZWYgZmluZENvbmZpZ0ZpbGVzKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CiAgICAgICAgICIiIgogICAgICAgICBGaW5kIGNvbmZpZyBmaWxlcyB3aGljaCBwcm92aWRlIGFwcHJvcHJpYXRlIHZhbHVlcwpAQCAtNzY0LDMgKzc1MiwxNCBAQAogICAgICAgICBjb21tYW5kLmZpbmlzaEFzeW5jQ29tbWFuZCgpCiAgICAgY2xpZW50Q29tcGxldGUubmVlZGNhY2hlID0gRmFsc2UKIAorICAgIGRlZiBmaW5kU2lnSW5mbyhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgRmluZCBzaWduYXR1cmUgaW5mbyBmaWxlcyB2aWEgdGhlIHNpZ25hdHVyZSBnZW5lcmF0b3IKKyAgICAgICAgIiIiCisgICAgICAgIHBuID0gcGFyYW1zWzBdCisgICAgICAgIHRhc2tuYW1lID0gcGFyYW1zWzFdCisgICAgICAgIHNpZ3MgPSBwYXJhbXNbMl0KKyAgICAgICAgcmVzID0gYmIuc2lnZ2VuLmZpbmRfc2lnaW5mbyhwbiwgdGFza25hbWUsIHNpZ3MsIGNvbW1hbmQuY29va2VyLmRhdGEpCisgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuRmluZFNpZ0luZm9SZXN1bHQocmVzKSwgY29tbWFuZC5jb29rZXIuZGF0YSkKKyAgICAgICAgY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoKQorICAgIGZpbmRTaWdJbmZvLm5lZWRjYWNoZSA9IEZhbHNlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29va2VyLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2Nvb2tlci5weQppbmRleCAzYzllODhjLi5jN2ZkZDcyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29va2VyLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jb29rZXIucHkKQEAgLTE4MSwxNSArMTgxLDE1IEBACiAgICAgICAgIHNlbGYuY29uZmlnbm90aWZpZXIgPSBweWlub3RpZnkuTm90aWZpZXIoc2VsZi5jb25maWd3YXRjaGVyLCBzZWxmLmNvbmZpZ19ub3RpZmljYXRpb25zKQogICAgICAgICBzZWxmLndhdGNobWFzayA9IHB5aW5vdGlmeS5JTl9DTE9TRV9XUklURSB8IHB5aW5vdGlmeS5JTl9DUkVBVEUgfCBweWlub3RpZnkuSU5fREVMRVRFIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgIHB5aW5vdGlmeS5JTl9ERUxFVEVfU0VMRiB8IHB5aW5vdGlmeS5JTl9NT0RJRlkgfCBweWlub3RpZnkuSU5fTU9WRV9TRUxGIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgIHB5aW5vdGlmeS5JTl9NT1ZFRF9GUk9NIHwgcHlpbm90aWZ5LklOX01PVkVEX1RPIAorICAgICAgICAgICAgICAgICAgICAgICAgIHB5aW5vdGlmeS5JTl9NT1ZFRF9GUk9NIHwgcHlpbm90aWZ5LklOX01PVkVEX1RPCiAgICAgICAgIHNlbGYud2F0Y2hlciA9IHB5aW5vdGlmeS5XYXRjaE1hbmFnZXIoKQogICAgICAgICBzZWxmLndhdGNoZXIuYmJzZWVuID0gW10KICAgICAgICAgc2VsZi53YXRjaGVyLmJid2F0Y2hlZGZpbGVzID0gW10KICAgICAgICAgc2VsZi5ub3RpZmllciA9IHB5aW5vdGlmeS5Ob3RpZmllcihzZWxmLndhdGNoZXIsIHNlbGYubm90aWZpY2F0aW9ucykKIAotICAgICAgICAjIElmIGJlaW5nIGNhbGxlZCBieSBzb21ldGhpbmcgbGlrZSB0aW5mb2lsLCB3ZSBuZWVkIHRvIGNsZWFuIGNhY2hlZCBkYXRhIAorICAgICAgICAjIElmIGJlaW5nIGNhbGxlZCBieSBzb21ldGhpbmcgbGlrZSB0aW5mb2lsLCB3ZSBuZWVkIHRvIGNsZWFuIGNhY2hlZCBkYXRhCiAgICAgICAgICMgd2hpY2ggbWF5IG5vdyBiZSBpbnZhbGlkCi0gICAgICAgIGJiLnBhcnNlLl9fbXRpbWVfY2FjaGUgPSB7fQorICAgICAgICBiYi5wYXJzZS5jbGVhcl9jYWNoZSgpCiAgICAgICAgIGJiLnBhcnNlLkJCSGFuZGxlci5jYWNoZWRfc3RhdGVtZW50cyA9IHt9CiAKICAgICAgICAgc2VsZi51aV9jbWRsaW5lID0gTm9uZQpAQCAtMjA1LDMxICsyMDUsMTEgQEAKIAogICAgICAgICBzZWxmLmlub3RpZnlfbW9kaWZpZWRfZmlsZXMgPSBbXQogCi0gICAgICAgIGRlZiBfcHJvY2Vzc19pbm90aWZ5X3VwZGF0ZXMoc2VydmVyLCBub3RpZmllcl9saXN0LCBhYm9ydCk6Ci0gICAgICAgICAgICBmb3IgbiBpbiBub3RpZmllcl9saXN0OgotICAgICAgICAgICAgICAgIGlmIG4uY2hlY2tfZXZlbnRzKHRpbWVvdXQ9MCk6Ci0gICAgICAgICAgICAgICAgICAgICMgcmVhZCBub3RpZmllZCBldmVudHMgYW5kIGVucWV1ZSB0aGVtCi0gICAgICAgICAgICAgICAgICAgIG4ucmVhZF9ldmVudHMoKQotICAgICAgICAgICAgICAgICAgICBuLnByb2Nlc3NfZXZlbnRzKCkKKyAgICAgICAgZGVmIF9wcm9jZXNzX2lub3RpZnlfdXBkYXRlcyhzZXJ2ZXIsIGNvb2tlciwgYWJvcnQpOgorICAgICAgICAgICAgY29va2VyLnByb2Nlc3NfaW5vdGlmeV91cGRhdGVzKCkKICAgICAgICAgICAgIHJldHVybiAxLjAKIAotICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc2VydmVyX3JlZ2lzdGVyX2lkbGVjYWxsYmFjayhfcHJvY2Vzc19pbm90aWZ5X3VwZGF0ZXMsIFtzZWxmLmNvbmZpZ25vdGlmaWVyLCBzZWxmLm5vdGlmaWVyXSkKLQotICAgICAgICBzZWxmLmJhc2Vjb25maWdfdmFsaWQgPSBUcnVlCi0gICAgICAgIHNlbGYucGFyc2VjYWNoZV92YWxpZCA9IEZhbHNlCi0KLSAgICAgICAgIyBUYWtlIGEgbG9jayBzbyBvbmx5IG9uZSBjb3B5IG9mIGJpdGJha2UgY2FuIHJ1biBhZ2FpbnN0IGEgZ2l2ZW4gYnVpbGQKLSAgICAgICAgIyBkaXJlY3RvcnkgYXQgYSB0aW1lCi0gICAgICAgIGlmIG5vdCBzZWxmLmxvY2tCaXRiYWtlKCk6Ci0gICAgICAgICAgICBiYi5mYXRhbCgiT25seSBvbmUgY29weSBvZiBiaXRiYWtlIHNob3VsZCBiZSBydW4gYWdhaW5zdCBhIGJ1aWxkIGRpcmVjdG9yeSIpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYubG9jay5zZWVrKDApCi0gICAgICAgICAgICBzZWxmLmxvY2sudHJ1bmNhdGUoKQotICAgICAgICAgICAgaWYgbGVuKGNvbmZpZ3VyYXRpb24uaW50ZXJmYWNlKSA+PSAyOgotICAgICAgICAgICAgICAgIHNlbGYubG9jay53cml0ZSgiJXM6JXNcbiIgJSAoY29uZmlndXJhdGlvbi5pbnRlcmZhY2VbMF0sIGNvbmZpZ3VyYXRpb24uaW50ZXJmYWNlWzFdKSk7Ci0gICAgICAgICAgICBzZWxmLmxvY2suZmx1c2goKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5zZXJ2ZXJfcmVnaXN0ZXJfaWRsZWNhbGxiYWNrKF9wcm9jZXNzX2lub3RpZnlfdXBkYXRlcywgc2VsZikKIAogICAgICAgICAjIFRPU1RPUCBtdXN0IG5vdCBiZSBzZXQgb3Igb3VyIGNoaWxkcmVuIHdpbGwgaGFuZyB3aGVuIHRoZXkgb3V0cHV0CiAgICAgICAgIHRyeToKQEAgLTI1MywxMCArMjMzLDE5IEBACiAgICAgICAgICMgTGV0IFNJR0hVUCBleGl0IGFzIFNJR1RFUk0KICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSFVQLCBzZWxmLnNpZ3Rlcm1fZXhjZXB0aW9uKQogCisgICAgZGVmIHByb2Nlc3NfaW5vdGlmeV91cGRhdGVzKHNlbGYpOgorICAgICAgICBmb3IgbiBpbiBbc2VsZi5jb25maWdub3RpZmllciwgc2VsZi5ub3RpZmllcl06CisgICAgICAgICAgICBpZiBuLmNoZWNrX2V2ZW50cyh0aW1lb3V0PTApOgorICAgICAgICAgICAgICAgICMgcmVhZCBub3RpZmllZCBldmVudHMgYW5kIGVucWV1ZSB0aGVtCisgICAgICAgICAgICAgICAgbi5yZWFkX2V2ZW50cygpCisgICAgICAgICAgICAgICAgbi5wcm9jZXNzX2V2ZW50cygpCisKICAgICBkZWYgY29uZmlnX25vdGlmaWNhdGlvbnMoc2VsZiwgZXZlbnQpOgogICAgICAgICBpZiBldmVudC5tYXNrbmFtZSA9PSAiSU5fUV9PVkVSRkxPVyI6CiAgICAgICAgICAgICBiYi53YXJuKCJpbm90aWZ5IGV2ZW50IHF1ZXVlIG92ZXJmbG93ZWQsIGludmFsaWRhdGluZyBjYWNoZXMuIikKKyAgICAgICAgICAgIHNlbGYucGFyc2VjYWNoZV92YWxpZCA9IEZhbHNlCiAgICAgICAgICAgICBzZWxmLmJhc2Vjb25maWdfdmFsaWQgPSBGYWxzZQorICAgICAgICAgICAgYmIucGFyc2UuY2xlYXJfY2FjaGUoKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlmIG5vdCBldmVudC5wYXRobmFtZSBpbiBzZWxmLmNvbmZpZ3dhdGNoZXIuYmJ3YXRjaGVkZmlsZXM6CiAgICAgICAgICAgICByZXR1cm4KQEAgLTI2OCw2ICsyNTcsMTAgQEAKICAgICAgICAgaWYgZXZlbnQubWFza25hbWUgPT0gIklOX1FfT1ZFUkZMT1ciOgogICAgICAgICAgICAgYmIud2FybigiaW5vdGlmeSBldmVudCBxdWV1ZSBvdmVyZmxvd2VkLCBpbnZhbGlkYXRpbmcgY2FjaGVzLiIpCiAgICAgICAgICAgICBzZWxmLnBhcnNlY2FjaGVfdmFsaWQgPSBGYWxzZQorICAgICAgICAgICAgYmIucGFyc2UuY2xlYXJfY2FjaGUoKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIGV2ZW50LnBhdGhuYW1lLmVuZHN3aXRoKCJiaXRiYWtlLWNvb2tlcmRhZW1vbi5sb2ciKSBcCisgICAgICAgICAgICAgICAgb3IgZXZlbnQucGF0aG5hbWUuZW5kc3dpdGgoImJpdGJha2UubG9jayIpOgogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlmIG5vdCBldmVudC5wYXRobmFtZSBpbiBzZWxmLmlub3RpZnlfbW9kaWZpZWRfZmlsZXM6CiAgICAgICAgICAgICBzZWxmLmlub3RpZnlfbW9kaWZpZWRfZmlsZXMuYXBwZW5kKGV2ZW50LnBhdGhuYW1lKQpAQCAtMjg4LDcgKzI4MSw3IEBACiAgICAgICAgICAgICB3YXRjaHRhcmdldCA9IE5vbmUKICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgIyBXZSB0cnkgYW5kIGFkZCB3YXRjaGVzIGZvciBmaWxlcyB0aGF0IGRvbid0IGV4aXN0IGJ1dCBpZiB0aGV5IGRpZCwgd291bGQgaW5mbHVlbmNlCi0gICAgICAgICAgICAgICAgIyB0aGUgcGFyc2VyLiBUaGUgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGVzZSBmaWxlcyBtYXkgbm90IGV4aXN0LCBpbiB3aGljaCBjYXNlIHdlIG5lZWQgCisgICAgICAgICAgICAgICAgIyB0aGUgcGFyc2VyLiBUaGUgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGVzZSBmaWxlcyBtYXkgbm90IGV4aXN0LCBpbiB3aGljaCBjYXNlIHdlIG5lZWQKICAgICAgICAgICAgICAgICAjIHRvIHdhdGNoIGFueSBwYXJlbnQgdGhhdCBkb2VzIGV4aXN0IGZvciBjaGFuZ2VzLgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgd2F0Y2hlci5hZGRfd2F0Y2goZiwgc2VsZi53YXRjaG1hc2ssIHF1aWV0PUZhbHNlKQpAQCAtMzgyLDYgKzM3NSwxNSBAQAogICAgICAgICBzZWxmLmRhdGEucmVuYW1lVmFyKCJfX2RlcGVuZHMiLCAiX19iYXNlX2RlcGVuZHMiKQogICAgICAgICBzZWxmLmFkZF9maWxld2F0Y2goc2VsZi5kYXRhLmdldFZhcigiX19iYXNlX2RlcGVuZHMiLCBGYWxzZSksIHNlbGYuY29uZmlnd2F0Y2hlcikKIAorICAgICAgICBzZWxmLmJhc2Vjb25maWdfdmFsaWQgPSBUcnVlCisgICAgICAgIHNlbGYucGFyc2VjYWNoZV92YWxpZCA9IEZhbHNlCisKKyAgICBkZWYgaGFuZGxlUFJTZXJ2KHNlbGYpOgorICAgICAgICAjIFNldHVwIGEgUFIgU2VydmVyIGJhc2VkIG9uIHRoZSBuZXcgY29uZmlndXJhdGlvbgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnByaG9zdCA9IHByc2Vydi5zZXJ2LmF1dG9fc3RhcnQoc2VsZi5kYXRhKQorICAgICAgICBleGNlcHQgcHJzZXJ2LnNlcnYuUFJTZXJ2aWNlQ29uZmlnRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJVbmFibGUgdG8gc3RhcnQgUFIgU2VydmVyLCBleGl0dGluZyIpCiAKICAgICBkZWYgZW5hYmxlRGF0YVRyYWNraW5nKHNlbGYpOgogICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24udHJhY2tpbmcgPSBUcnVlCkBAIC0zOTMsMTM4ICszOTUsNiBAQAogICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICJkYXRhIik6CiAgICAgICAgICAgICBzZWxmLmRhdGEuZGlzYWJsZVRyYWNraW5nKCkKIAotICAgIGRlZiBtb2RpZnlDb25maWd1cmF0aW9uVmFyKHNlbGYsIHZhciwgdmFsLCBkZWZhdWx0X2ZpbGUsIG9wKToKLSAgICAgICAgaWYgb3AgPT0gImFwcGVuZCI6Ci0gICAgICAgICAgICBzZWxmLmFwcGVuZENvbmZpZ3VyYXRpb25WYXIodmFyLCB2YWwsIGRlZmF1bHRfZmlsZSkKLSAgICAgICAgZWxpZiBvcCA9PSAic2V0IjoKLSAgICAgICAgICAgIHNlbGYuc2F2ZUNvbmZpZ3VyYXRpb25WYXIodmFyLCB2YWwsIGRlZmF1bHRfZmlsZSwgIj0iKQotICAgICAgICBlbGlmIG9wID09ICJlYXJseUFzc2lnbiI6Ci0gICAgICAgICAgICBzZWxmLnNhdmVDb25maWd1cmF0aW9uVmFyKHZhciwgdmFsLCBkZWZhdWx0X2ZpbGUsICI/PSIpCi0KLQotICAgIGRlZiBhcHBlbmRDb25maWd1cmF0aW9uVmFyKHNlbGYsIHZhciwgdmFsLCBkZWZhdWx0X2ZpbGUpOgotICAgICAgICAjYWRkIGFwcGVuZCB2YXIgb3BlcmF0aW9uIHRvIHRoZSBlbmQgb2YgZGVmYXVsdF9maWxlCi0gICAgICAgIGRlZmF1bHRfZmlsZSA9IGJiLmNvb2tlcmRhdGEuZmluZENvbmZpZ0ZpbGUoZGVmYXVsdF9maWxlLCBzZWxmLmRhdGEpCi0KLSAgICAgICAgdG90YWwgPSAiI2FkZGVkIGJ5IGhvYiIKLSAgICAgICAgdG90YWwgKz0gIlxuJXMgKz0gXCIlc1wiXG4iICUgKHZhciwgdmFsKQotCi0gICAgICAgIHdpdGggb3BlbihkZWZhdWx0X2ZpbGUsICdhJykgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUodG90YWwpCi0KLSAgICAgICAgI2FkZCB0byBoaXN0b3J5Ci0gICAgICAgIGxvZ2luZm8gPSB7Im9wIjoiYXBwZW5kIiwgImZpbGUiOmRlZmF1bHRfZmlsZSwgImxpbmUiOnRvdGFsLmNvdW50KCJcbiIpfQotICAgICAgICBzZWxmLmRhdGEuYXBwZW5kVmFyKHZhciwgdmFsLCAqKmxvZ2luZm8pCi0KLSAgICBkZWYgc2F2ZUNvbmZpZ3VyYXRpb25WYXIoc2VsZiwgdmFyLCB2YWwsIGRlZmF1bHRfZmlsZSwgb3ApOgotCi0gICAgICAgIHJlcGxhY2VkID0gRmFsc2UKLSAgICAgICAgI2RvIG5vdCBzYXZlIGlmIG5vdGhpbmcgY2hhbmdlZAotICAgICAgICBpZiBzdHIodmFsKSA9PSBzZWxmLmRhdGEuZ2V0VmFyKHZhciwgRmFsc2UpOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgY29uZl9maWxlcyA9IHNlbGYuZGF0YS52YXJoaXN0b3J5LmdldF92YXJpYWJsZV9maWxlcyh2YXIpCi0KLSAgICAgICAgI2Zvcm1hdCB0aGUgdmFsdWUgd2hlbiBpdCBpcyBhIGxpc3QKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWwsIGxpc3QpOgotICAgICAgICAgICAgbGlzdHZhbCA9ICIiCi0gICAgICAgICAgICBmb3IgdmFsdWUgaW4gdmFsOgotICAgICAgICAgICAgICAgIGxpc3R2YWwgKz0gIiVzICAgIiAlIHZhbHVlCi0gICAgICAgICAgICB2YWwgPSBsaXN0dmFsCi0KLSAgICAgICAgdG9wZGlyID0gc2VsZi5kYXRhLmdldFZhcigiVE9QRElSIiwgRmFsc2UpCi0KLSAgICAgICAgI2NvbW1lbnQgb3IgcmVwbGFjZSBvcGVyYXRpb25zIG1hZGUgb24gdmFyCi0gICAgICAgIGZvciBjb25mX2ZpbGUgaW4gY29uZl9maWxlczoKLSAgICAgICAgICAgIGlmIHRvcGRpciBpbiBjb25mX2ZpbGU6Ci0gICAgICAgICAgICAgICAgd2l0aCBvcGVuKGNvbmZfZmlsZSwgJ3InKSBhcyBmOgotICAgICAgICAgICAgICAgICAgICBjb250ZW50cyA9IGYucmVhZGxpbmVzKCkKLQotICAgICAgICAgICAgICAgIGxpbmVzID0gc2VsZi5kYXRhLnZhcmhpc3RvcnkuZ2V0X3ZhcmlhYmxlX2xpbmVzKHZhciwgY29uZl9maWxlKQotICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgotICAgICAgICAgICAgICAgICAgICB0b3RhbCA9ICIiCi0gICAgICAgICAgICAgICAgICAgIGkgPSAwCi0gICAgICAgICAgICAgICAgICAgIGZvciBjIGluIGNvbnRlbnRzOgotICAgICAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gYwotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyAxCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBpPT1pbnQobGluZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kX2luZGV4ID0gbGVuKHRvdGFsKQotICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHRvdGFsLnJmaW5kKHZhciwgMCwgZW5kX2luZGV4KQotCi0gICAgICAgICAgICAgICAgICAgIGJlZ2luX2xpbmUgPSB0b3RhbC5jb3VudCgiXG4iLDAsaW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIGVuZF9saW5lID0gaW50KGxpbmUpCi0KLSAgICAgICAgICAgICAgICAgICAgI2NoZWNrIGlmIHRoZSB2YXJpYWJsZSB3YXMgc2F2ZWQgYmVmb3JlIGluIHRoZSBzYW1lIHdheQotICAgICAgICAgICAgICAgICAgICAjaWYgdHJ1ZSBpdCByZXBsYWNlIHRoZSBwbGFjZSB3aGVyZSB0aGUgdmFyaWFibGUgd2FzIGRlY2xhcmVkCi0gICAgICAgICAgICAgICAgICAgICNlbHNlIGl0IGNvbW1lbnRzIGl0Ci0gICAgICAgICAgICAgICAgICAgIGlmIGNvbnRlbnRzW2JlZ2luX2xpbmUtMV09PSAiI2FkZGVkIGJ5IGhvYlxuIjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzW2JlZ2luX2xpbmVdID0gIiVzICVzIFwiJXNcIlxuIiAlICh2YXIsIG9wLCB2YWwpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlZCA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpaSBpbiByYW5nZShiZWdpbl9saW5lLCBlbmRfbGluZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHNbaWldID0gIiMiICsgY29udGVudHNbaWldCi0KLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4oY29uZl9maWxlLCAndycpIGFzIGY6Ci0gICAgICAgICAgICAgICAgICAgIGYud3JpdGVsaW5lcyhjb250ZW50cykKLQotICAgICAgICBpZiByZXBsYWNlZCA9PSBGYWxzZToKLSAgICAgICAgICAgICNyZW1vdmUgdmFyIGZyb20gaGlzdG9yeQotICAgICAgICAgICAgc2VsZi5kYXRhLnZhcmhpc3RvcnkuZGVsX3Zhcl9oaXN0b3J5KHZhcikKLQotICAgICAgICAgICAgI2FkZCB2YXIgdG8gdGhlIGVuZCBvZiBkZWZhdWx0X2ZpbGUKLSAgICAgICAgICAgIGRlZmF1bHRfZmlsZSA9IGJiLmNvb2tlcmRhdGEuZmluZENvbmZpZ0ZpbGUoZGVmYXVsdF9maWxlLCBzZWxmLmRhdGEpCi0KLSAgICAgICAgICAgICNhZGQgdGhlIHZhcmlhYmxlIG9uIGEgc2luZ2xlIGxpbmUsIHRvIGJlIGVhc3kgdG8gcmVwbGFjZSB0aGUgc2Vjb25kIHRpbWUKLSAgICAgICAgICAgIHRvdGFsID0gIlxuI2FkZGVkIGJ5IGhvYiIKLSAgICAgICAgICAgIHRvdGFsICs9ICJcbiVzICVzIFwiJXNcIlxuIiAlICh2YXIsIG9wLCB2YWwpCi0KLSAgICAgICAgICAgIHdpdGggb3BlbihkZWZhdWx0X2ZpbGUsICdhJykgYXMgZjoKLSAgICAgICAgICAgICAgICBmLndyaXRlKHRvdGFsKQotCi0gICAgICAgICAgICAjYWRkIHRvIGhpc3RvcnkKLSAgICAgICAgICAgIGxvZ2luZm8gPSB7Im9wIjoic2V0IiwgImZpbGUiOmRlZmF1bHRfZmlsZSwgImxpbmUiOnRvdGFsLmNvdW50KCJcbiIpfQotICAgICAgICAgICAgc2VsZi5kYXRhLnNldFZhcih2YXIsIHZhbCwgKipsb2dpbmZvKQotCi0gICAgZGVmIHJlbW92ZUNvbmZpZ3VyYXRpb25WYXIoc2VsZiwgdmFyKToKLSAgICAgICAgY29uZl9maWxlcyA9IHNlbGYuZGF0YS52YXJoaXN0b3J5LmdldF92YXJpYWJsZV9maWxlcyh2YXIpCi0gICAgICAgIHRvcGRpciA9IHNlbGYuZGF0YS5nZXRWYXIoIlRPUERJUiIsIEZhbHNlKQotCi0gICAgICAgIGZvciBjb25mX2ZpbGUgaW4gY29uZl9maWxlczoKLSAgICAgICAgICAgIGlmIHRvcGRpciBpbiBjb25mX2ZpbGU6Ci0gICAgICAgICAgICAgICAgd2l0aCBvcGVuKGNvbmZfZmlsZSwgJ3InKSBhcyBmOgotICAgICAgICAgICAgICAgICAgICBjb250ZW50cyA9IGYucmVhZGxpbmVzKCkKLQotICAgICAgICAgICAgICAgIGxpbmVzID0gc2VsZi5kYXRhLnZhcmhpc3RvcnkuZ2V0X3ZhcmlhYmxlX2xpbmVzKHZhciwgY29uZl9maWxlKQotICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgotICAgICAgICAgICAgICAgICAgICB0b3RhbCA9ICIiCi0gICAgICAgICAgICAgICAgICAgIGkgPSAwCi0gICAgICAgICAgICAgICAgICAgIGZvciBjIGluIGNvbnRlbnRzOgotICAgICAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gYwotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyAxCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBpPT1pbnQobGluZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kX2luZGV4ID0gbGVuKHRvdGFsKQotICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHRvdGFsLnJmaW5kKHZhciwgMCwgZW5kX2luZGV4KQotCi0gICAgICAgICAgICAgICAgICAgIGJlZ2luX2xpbmUgPSB0b3RhbC5jb3VudCgiXG4iLDAsaW5kZXgpCi0KLSAgICAgICAgICAgICAgICAgICAgI2NoZWNrIGlmIHRoZSB2YXJpYWJsZSB3YXMgc2F2ZWQgYmVmb3JlIGluIHRoZSBzYW1lIHdheQotICAgICAgICAgICAgICAgICAgICBpZiBjb250ZW50c1tiZWdpbl9saW5lLTFdPT0gIiNhZGRlZCBieSBob2JcbiI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50c1tiZWdpbl9saW5lLTFdID0gY29udGVudHNbYmVnaW5fbGluZV0gPSAiXG4iCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50c1tiZWdpbl9saW5lXSA9ICJcbiIKLSAgICAgICAgICAgICAgICAgICAgI3JlbW92ZSB2YXIgZnJvbSBoaXN0b3J5Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YS52YXJoaXN0b3J5LmRlbF92YXJfaGlzdG9yeSh2YXIsIGNvbmZfZmlsZSwgbGluZSkKLSAgICAgICAgICAgICAgICAgICAgI3JlbW92ZSB2YXJpYWJsZQotICAgICAgICAgICAgICAgICAgICBzZWxmLmRhdGEuZGVsVmFyKHZhcikKLQotICAgICAgICAgICAgICAgIHdpdGggb3Blbihjb25mX2ZpbGUsICd3JykgYXMgZjoKLSAgICAgICAgICAgICAgICAgICAgZi53cml0ZWxpbmVzKGNvbnRlbnRzKQotCi0gICAgZGVmIGNyZWF0ZUNvbmZpZ0ZpbGUoc2VsZiwgbmFtZSk6Ci0gICAgICAgIHBhdGggPSBvcy5nZXRjd2QoKQotICAgICAgICBjb25mcGF0aCA9IG9zLnBhdGguam9pbihwYXRoLCAiY29uZiIsIG5hbWUpCi0gICAgICAgIG9wZW4oY29uZnBhdGgsICd3JykuY2xvc2UoKQotCiAgICAgZGVmIHBhcnNlQ29uZmlndXJhdGlvbihzZWxmKToKICAgICAgICAgIyBTZXQgbG9nIGZpbGUgdmVyYm9zaXR5CiAgICAgICAgIHZlcmJvc2Vsb2dzID0gYmIudXRpbHMudG9fYm9vbGVhbihzZWxmLmRhdGEuZ2V0VmFyKCJCQl9WRVJCT1NFX0xPR1MiLCBGYWxzZSkpCkBAIC01NDcsMjEgKzQxNywyNyBAQAogCiAgICAgICAgIHNlbGYuaGFuZGxlQ29sbGVjdGlvbnMoc2VsZi5kYXRhLmdldFZhcigiQkJGSUxFX0NPTExFQ1RJT05TIikpCiAKKyAgICAgICAgc2VsZi5wYXJzZWNhY2hlX3ZhbGlkID0gRmFsc2UKKwogICAgIGRlZiB1cGRhdGVDb25maWdPcHRzKHNlbGYsIG9wdGlvbnMsIGVudmlyb25tZW50LCBjbWRsaW5lKToKICAgICAgICAgc2VsZi51aV9jbWRsaW5lID0gY21kbGluZQogICAgICAgICBjbGVhbiA9IFRydWUKICAgICAgICAgZm9yIG8gaW4gb3B0aW9uczoKICAgICAgICAgICAgIGlmIG8gaW4gWydwcmVmaWxlJywgJ3Bvc3RmaWxlJ106CisgICAgICAgICAgICAgICAgIyBPbmx5IHRoZXNlIG9wdGlvbnMgbWF5IHJlcXVpcmUgYSByZXBhcnNlCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpZiBnZXRhdHRyKHNlbGYuY29uZmlndXJhdGlvbiwgbykgPT0gb3B0aW9uc1tvXToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVmFsdWUgaXMgdGhlIHNhbWUsIG5vIG5lZWQgdG8gbWFyayBkaXJ0eQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIk1hcmtpbmcgYXMgZGlydHkgZHVlIHRvICclcycgb3B0aW9uIGNoYW5nZSB0byAnJXMnIiAlIChvLCBvcHRpb25zW29dKSkKKyAgICAgICAgICAgICAgICBwcmludCgiTWFya2luZyBhcyBkaXJ0eSBkdWUgdG8gJyVzJyBvcHRpb24gY2hhbmdlIHRvICclcyciICUgKG8sIG9wdGlvbnNbb10pKQogICAgICAgICAgICAgICAgIGNsZWFuID0gRmFsc2UKLSAgICAgICAgICAgICAgICBzZXJ2ZXJfdmFsID0gZ2V0YXR0cihzZWxmLmNvbmZpZ3VyYXRpb24sICIlc19zZXJ2ZXIiICUgbykKLSAgICAgICAgICAgICAgICBpZiBub3Qgb3B0aW9uc1tvXSBhbmQgc2VydmVyX3ZhbDoKLSAgICAgICAgICAgICAgICAgICAgIyByZXN0b3JlIHZhbHVlIHByb3ZpZGVkIG9uIHNlcnZlciBzdGFydAotICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYuY29uZmlndXJhdGlvbiwgbywgc2VydmVyX3ZhbCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIHNldGF0dHIoc2VsZi5jb25maWd1cmF0aW9uLCBvLCBvcHRpb25zW29dKQogICAgICAgICBmb3IgayBpbiBiYi51dGlscy5hcHByb3ZlZF92YXJpYWJsZXMoKToKICAgICAgICAgICAgIGlmIGsgaW4gZW52aXJvbm1lbnQgYW5kIGsgbm90IGluIHNlbGYuY29uZmlndXJhdGlvbi5lbnY6Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJVcGRhdGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZSAlcyB0byAlcyIgJSAoaywgZW52aXJvbm1lbnRba10pKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiVXBkYXRpbmcgbmV3IGVudmlyb25tZW50IHZhcmlhYmxlICVzIHRvICVzIiAlIChrLCBlbnZpcm9ubWVudFtrXSkpCiAgICAgICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmVudltrXSA9IGVudmlyb25tZW50W2tdCiAgICAgICAgICAgICAgICAgY2xlYW4gPSBGYWxzZQogICAgICAgICAgICAgaWYgayBpbiBzZWxmLmNvbmZpZ3VyYXRpb24uZW52IGFuZCBrIG5vdCBpbiBlbnZpcm9ubWVudDoKQEAgLTU2OSwxNCArNDQ1LDEzIEBACiAgICAgICAgICAgICAgICAgZGVsIHNlbGYuY29uZmlndXJhdGlvbi5lbnZba10KICAgICAgICAgICAgICAgICBjbGVhbiA9IEZhbHNlCiAgICAgICAgICAgICBpZiBrIG5vdCBpbiBzZWxmLmNvbmZpZ3VyYXRpb24uZW52IGFuZCBrIG5vdCBpbiBlbnZpcm9ubWVudDoKLSAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgaWYgZW52aXJvbm1lbnRba10gIT0gc2VsZi5jb25maWd1cmF0aW9uLmVudltrXToKLSAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlVwZGF0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlICVzIHRvICVzIiAlIChrLCBlbnZpcm9ubWVudFtrXSkpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJVcGRhdGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZSAlcyBmcm9tICVzIHRvICVzIiAlIChrLCBzZWxmLmNvbmZpZ3VyYXRpb24uZW52W2tdLCBlbnZpcm9ubWVudFtrXSkpCiAgICAgICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmVudltrXSA9IGVudmlyb25tZW50W2tdCiAgICAgICAgICAgICAgICAgY2xlYW4gPSBGYWxzZQogICAgICAgICBpZiBub3QgY2xlYW46CiAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIkJhc2UgZW52aXJvbm1lbnQgY2hhbmdlLCB0cmlnZ2VyaW5nIHJlcGFyc2UiKQotICAgICAgICAgICAgc2VsZi5iYXNlY29uZmlnX3ZhbGlkID0gRmFsc2UgICAgICAgIAogICAgICAgICAgICAgc2VsZi5yZXNldCgpCiAKICAgICBkZWYgcnVuQ29tbWFuZHMoc2VsZiwgc2VydmVyLCBkYXRhLCBhYm9ydCk6CkBAIC02MTYsNiArNDkxLDEyIEBACiAgICAgICAgIGlmIG5vdCBwa2dzX3RvX2J1aWxkOgogICAgICAgICAgICAgcGtnc190b19idWlsZCA9IFtdCiAKKyAgICAgICAgb3JpZ190cmFja2luZyA9IHNlbGYuY29uZmlndXJhdGlvbi50cmFja2luZworICAgICAgICBpZiBub3Qgb3JpZ190cmFja2luZzoKKyAgICAgICAgICAgIHNlbGYuZW5hYmxlRGF0YVRyYWNraW5nKCkKKyAgICAgICAgICAgIHNlbGYucmVzZXQoKQorCisKICAgICAgICAgaWYgYnVpbGRmaWxlOgogICAgICAgICAgICAgIyBQYXJzZSB0aGUgY29uZmlndXJhdGlvbiBoZXJlLiBXZSBuZWVkIHRvIGRvIGl0IGV4cGxpY2l0bHkgaGVyZSBzaW5jZQogICAgICAgICAgICAgIyB0aGlzIHNob3dFbnZpcm9ubWVudCgpIGNvZGUgcGF0aCBkb2Vzbid0IHVzZSB0aGUgY2FjaGUKQEAgLTY2MCw2ICs1NDEsOSBAQAogICAgICAgICAgICAgaWYgZW52ZGF0YS5nZXRWYXJGbGFnKGUsICdmdW5jJywgRmFsc2UpIGFuZCBlbnZkYXRhLmdldFZhckZsYWcoZSwgJ3B5dGhvbicsIEZhbHNlKToKICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIlxucHl0aG9uICVzICgpIHtcbiVzfVxuIiwgZSwgZW52ZGF0YS5nZXRWYXIoZSwgRmFsc2UpKQogCisgICAgICAgIGlmIG5vdCBvcmlnX3RyYWNraW5nOgorICAgICAgICAgICAgc2VsZi5kaXNhYmxlRGF0YVRyYWNraW5nKCkKKyAgICAgICAgICAgIHNlbGYucmVzZXQoKQogCiAgICAgZGVmIGJ1aWxkVGFza0RhdGEoc2VsZiwgcGtnc190b19idWlsZCwgdGFzaywgYWJvcnQsIGFsbG93aW5jb21wbGV0ZT1GYWxzZSk6CiAgICAgICAgICIiIgpAQCAtODE3LDEyICs3MDEsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBuIl1bcG5dW2VpXSA9IHZhcnMoc2VsZi5yZWNpcGVjYWNoZXNbbWNdKVtlaV1bdGFza2ZuXQogCiAKKyAgICAgICAgICAgIGRvdG5hbWUgPSAiJXMuJXMiICUgKHBuLCBiYi5ydW5xdWV1ZS50YXNrbmFtZV9mcm9tX3RpZCh0aWQpKQorICAgICAgICAgICAgaWYgbm90IGRvdG5hbWUgaW4gZGVwZW5kX3RyZWVbInRkZXBlbmRzIl06CisgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInRkZXBlbmRzIl1bZG90bmFtZV0gPSBbXQogICAgICAgICAgICAgZm9yIGRlcCBpbiBycS5ycWRhdGEucnVudGFza2VudHJpZXNbdGlkXS5kZXBlbmRzOgogICAgICAgICAgICAgICAgIChkZXBtYywgZGVwZm4sIGRlcHRhc2tuYW1lLCBkZXB0YXNrZm4pID0gYmIucnVucXVldWUuc3BsaXRfdGlkX21jZm4oZGVwKQogICAgICAgICAgICAgICAgIGRlcHBuID0gc2VsZi5yZWNpcGVjYWNoZXNbbWNdLnBrZ19mbltkZXB0YXNrZm5dCi0gICAgICAgICAgICAgICAgZG90bmFtZSA9ICIlcy4lcyIgJSAocG4sIGJiLnJ1bnF1ZXVlLnRhc2tuYW1lX2Zyb21fdGlkKHRpZCkpCi0gICAgICAgICAgICAgICAgaWYgbm90IGRvdG5hbWUgaW4gZGVwZW5kX3RyZWVbInRkZXBlbmRzIl06Ci0gICAgICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJ0ZGVwZW5kcyJdW2RvdG5hbWVdID0gW10KICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsidGRlcGVuZHMiXVtkb3RuYW1lXS5hcHBlbmQoIiVzLiVzIiAlIChkZXBwbiwgYmIucnVucXVldWUudGFza25hbWVfZnJvbV90aWQoZGVwKSkpCiAgICAgICAgICAgICBpZiB0YXNrZm4gbm90IGluIHNlZW5fZm5zOgogICAgICAgICAgICAgICAgIHNlZW5fZm5zLmFwcGVuZCh0YXNrZm4pCkBAIC05MTMsMTMgKzc5NywxMyBAQAogICAgICAgICAgICAgICAgIHNlZW5fZm5zLmFwcGVuZCh0YXNrZm4pCiAKICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsiZGVwZW5kcyJdW3BuXSA9IFtdCi0gICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gdGFza2RhdGFbbWNdLmRlcGlkc1t0YXNrZm5dOgorICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gdGFza2RhdGFbbWNdLmRlcGlkc1t0YXNrZm5dOgogICAgICAgICAgICAgICAgICAgICBwbl9wcm92aWRlciA9ICIiCiAgICAgICAgICAgICAgICAgICAgIGlmIGRlcCBpbiB0YXNrZGF0YVttY10uYnVpbGRfdGFyZ2V0cyBhbmQgdGFza2RhdGFbbWNdLmJ1aWxkX3RhcmdldHNbZGVwXToKICAgICAgICAgICAgICAgICAgICAgICAgIGZuX3Byb3ZpZGVyID0gdGFza2RhdGFbbWNdLmJ1aWxkX3RhcmdldHNbZGVwXVswXQogICAgICAgICAgICAgICAgICAgICAgICAgcG5fcHJvdmlkZXIgPSBzZWxmLnJlY2lwZWNhY2hlc1ttY10ucGtnX2ZuW2ZuX3Byb3ZpZGVyXQogICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgcG5fcHJvdmlkZXIgPSBpdGVtCisgICAgICAgICAgICAgICAgICAgICAgICBwbl9wcm92aWRlciA9IGRlcAogICAgICAgICAgICAgICAgICAgICBwbl9wcm92aWRlciA9IHNlbGYuYWRkX21jX3ByZWZpeChtYywgcG5fcHJvdmlkZXIpCiAgICAgICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJkZXBlbmRzIl1bcG5dLmFwcGVuZChwbl9wcm92aWRlcikKIApAQCAtMTA0NiwxOCArOTMwLDYgQEAKICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXJsb2cuZXJyb3IoImNvbmZsaWN0aW5nIHByZWZlcmVuY2VzIGZvciAlczogYm90aCAlcyBhbmQgJXMgc3BlY2lmaWVkIiwgcHJvdmlkZWUsIHByb3ZpZGVyLCBzZWxmLnJlY2lwZWNhY2hlc1ttY10ucHJlZmVycmVkW3Byb3ZpZGVlXSkKICAgICAgICAgICAgICAgICBzZWxmLnJlY2lwZWNhY2hlc1ttY10ucHJlZmVycmVkW3Byb3ZpZGVlXSA9IHByb3ZpZGVyCiAKLSAgICBkZWYgZmluZENvcmVCYXNlRmlsZXMoc2VsZiwgc3ViZGlyLCBjb25maWdmaWxlKToKLSAgICAgICAgY29yZWJhc2UgPSBzZWxmLmRhdGEuZ2V0VmFyKCdDT1JFQkFTRScpIG9yICIiCi0gICAgICAgIHBhdGhzID0gW10KLSAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoY29yZWJhc2UgKyAnLycgKyBzdWJkaXIpOgotICAgICAgICAgICAgZm9yIGQgaW4gZGlyczoKLSAgICAgICAgICAgICAgICBjb25maWdmaWxlcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBkLCBjb25maWdmaWxlKQotICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNvbmZpZ2ZpbGVwYXRoKToKLSAgICAgICAgICAgICAgICAgICAgcGF0aHMuYXBwZW5kKG9zLnBhdGguam9pbihyb290LCBkKSkKLQotICAgICAgICBpZiBwYXRoczoKLSAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQ29yZUJhc2VGaWxlc0ZvdW5kKHBhdGhzKSwgc2VsZi5kYXRhKQotCiAgICAgZGVmIGZpbmRDb25maWdGaWxlUGF0aChzZWxmLCBjb25maWdmaWxlKToKICAgICAgICAgIiIiCiAgICAgICAgIEZpbmQgdGhlIGxvY2F0aW9uIG9uIGRpc2sgb2YgY29uZmlnZmlsZSBhbmQgaWYgaXQgZXhpc3RzIGFuZCB3YXMgcGFyc2VkIGJ5IEJpdEJha2UKQEAgLTEzMTQsMTIgKzExODYsMjYgQEAKICAgICAgICAgIiIiCiAgICAgICAgIFNldHVwIGFueSB2YXJpYWJsZXMgbmVlZGVkIGJlZm9yZSBzdGFydGluZyBhIGJ1aWxkCiAgICAgICAgICIiIgotICAgICAgICB0ID0gdGltZS5nbXRpbWUoKSAKLSAgICAgICAgaWYgbm90IHNlbGYuZGF0YS5nZXRWYXIoIkJVSUxETkFNRSIsIEZhbHNlKToKLSAgICAgICAgICAgIHNlbGYuZGF0YS5zZXRWYXIoIkJVSUxETkFNRSIsICIke0RBVEV9JHtUSU1FfSIpCi0gICAgICAgIHNlbGYuZGF0YS5zZXRWYXIoIkJVSUxEU1RBUlQiLCB0aW1lLnN0cmZ0aW1lKCclbS8lZC8lWSAlSDolTTolUycsIHQpKQotICAgICAgICBzZWxmLmRhdGEuc2V0VmFyKCJEQVRFIiwgdGltZS5zdHJmdGltZSgnJVklbSVkJywgdCkpCi0gICAgICAgIHNlbGYuZGF0YS5zZXRWYXIoIlRJTUUiLCB0aW1lLnN0cmZ0aW1lKCclSCVNJVMnLCB0KSkKKyAgICAgICAgdCA9IHRpbWUuZ210aW1lKCkKKyAgICAgICAgZm9yIG1jIGluIHNlbGYuZGF0YWJ1aWxkZXIubWNkYXRhOgorICAgICAgICAgICAgZHMgPSBzZWxmLmRhdGFidWlsZGVyLm1jZGF0YVttY10KKyAgICAgICAgICAgIGlmIG5vdCBkcy5nZXRWYXIoIkJVSUxETkFNRSIsIEZhbHNlKToKKyAgICAgICAgICAgICAgICBkcy5zZXRWYXIoIkJVSUxETkFNRSIsICIke0RBVEV9JHtUSU1FfSIpCisgICAgICAgICAgICBkcy5zZXRWYXIoIkJVSUxEU1RBUlQiLCB0aW1lLnN0cmZ0aW1lKCclbS8lZC8lWSAlSDolTTolUycsIHQpKQorICAgICAgICAgICAgZHMuc2V0VmFyKCJEQVRFIiwgdGltZS5zdHJmdGltZSgnJVklbSVkJywgdCkpCisgICAgICAgICAgICBkcy5zZXRWYXIoIlRJTUUiLCB0aW1lLnN0cmZ0aW1lKCclSCVNJVMnLCB0KSkKKworICAgIGRlZiByZXNldF9tdGltZV9jYWNoZXMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXNldCBtdGltZSBjYWNoZXMgLSB0aGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgd2hlbiBtZW1vcnkgcmVzaWRlbnQgYXMgc29tZXRoaW5nCisgICAgICAgIHdoaWNoIGlzIGNhY2hlZCBpcyBub3QgdW5saWtlbHkgdG8gaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IGludm9jYXRpb24gKGUuZy4gYQorICAgICAgICBmaWxlIGFzc29jaWF0ZWQgd2l0aCBhIHJlY2lwZSBtaWdodCBoYXZlIGJlZW4gbW9kaWZpZWQgYnkgdGhlIHVzZXIpLgorICAgICAgICAiIiIKKyAgICAgICAgYnVpbGQucmVzZXRfY2FjaGUoKQorICAgICAgICBiYi5mZXRjaC5fY2hlY2tzdW1fY2FjaGUubXRpbWVfY2FjaGUuY2xlYXIoKQorICAgICAgICBzaWdnZW5fY2FjaGUgPSBnZXRhdHRyKGJiLnBhcnNlLnNpZ2dlbiwgJ2NoZWNrc3VtX2NhY2hlJywgTm9uZSkKKyAgICAgICAgaWYgc2lnZ2VuX2NhY2hlOgorICAgICAgICAgICAgYmIucGFyc2Uuc2lnZ2VuLmNoZWNrc3VtX2NhY2hlLm10aW1lX2NhY2hlLmNsZWFyKCkKIAogICAgIGRlZiBtYXRjaEZpbGVzKHNlbGYsIGJmKToKICAgICAgICAgIiIiCkBAIC0xMzYwLDE2ICsxMjQ2LDIyIEBACiAgICAgICAgICAgICByYWlzZSBOb1NwZWNpZmljTWF0Y2gKICAgICAgICAgcmV0dXJuIG1hdGNoZXNbMF0KIAotICAgIGRlZiBidWlsZEZpbGUoc2VsZiwgYnVpbGRmaWxlLCB0YXNrLCBoaWRld2FybmluZz1GYWxzZSk6CisgICAgZGVmIGJ1aWxkRmlsZShzZWxmLCBidWlsZGZpbGUsIHRhc2spOgogICAgICAgICAiIiIKICAgICAgICAgQnVpbGQgdGhlIGZpbGUgbWF0Y2hpbmcgcmVnZXhwIGJ1aWxkZmlsZQogICAgICAgICAiIiIKICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5CdWlsZEluaXQoKSwgc2VsZi5kYXRhKQogCi0gICAgICAgIGlmIG5vdCBoaWRld2FybmluZzoKLSAgICAgICAgICAgICMgVG9vIG1hbnkgcGVvcGxlIHVzZSAtYiBiZWNhdXNlIHRoZXkgdGhpbmsgaXQncyBob3cgeW91IG5vcm1hbGx5Ci0gICAgICAgICAgICAjIHNwZWNpZnkgYSB0YXJnZXQgdG8gYmUgYnVpbHQsIHNvIHNob3cgYSB3YXJuaW5nCi0gICAgICAgICAgICBiYi53YXJuKCJCdWlsZGZpbGUgc3BlY2lmaWVkLCBkZXBlbmRlbmNpZXMgd2lsbCBub3QgYmUgaGFuZGxlZC4gSWYgdGhpcyBpcyBub3Qgd2hhdCB5b3Ugd2FudCwgZG8gbm90IHVzZSAtYiAvIC0tYnVpbGRmaWxlLiIpCisgICAgICAgICMgVG9vIG1hbnkgcGVvcGxlIHVzZSAtYiBiZWNhdXNlIHRoZXkgdGhpbmsgaXQncyBob3cgeW91IG5vcm1hbGx5CisgICAgICAgICMgc3BlY2lmeSBhIHRhcmdldCB0byBiZSBidWlsdCwgc28gc2hvdyBhIHdhcm5pbmcKKyAgICAgICAgYmIud2FybigiQnVpbGRmaWxlIHNwZWNpZmllZCwgZGVwZW5kZW5jaWVzIHdpbGwgbm90IGJlIGhhbmRsZWQuIElmIHRoaXMgaXMgbm90IHdoYXQgeW91IHdhbnQsIGRvIG5vdCB1c2UgLWIgLyAtLWJ1aWxkZmlsZS4iKQorCisgICAgICAgIHNlbGYuYnVpbGRGaWxlSW50ZXJuYWwoYnVpbGRmaWxlLCB0YXNrKQorCisgICAgZGVmIGJ1aWxkRmlsZUludGVybmFsKHNlbGYsIGJ1aWxkZmlsZSwgdGFzaywgZmlyZWV2ZW50cz1UcnVlLCBxdWlldGxvZz1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBCdWlsZCB0aGUgZmlsZSBtYXRjaGluZyByZWdleHAgYnVpbGRmaWxlCisgICAgICAgICIiIgogCiAgICAgICAgICMgUGFyc2UgdGhlIGNvbmZpZ3VyYXRpb24gaGVyZS4gV2UgbmVlZCB0byBkbyBpdCBleHBsaWNpdGx5IGhlcmUgc2luY2UKICAgICAgICAgIyBidWlsZEZpbGUoKSBkb2Vzbid0IHVzZSB0aGUgY2FjaGUKQEAgLTEzODUsNiArMTI3Nyw3IEBACiAgICAgICAgIGZuID0gc2VsZi5tYXRjaEZpbGUoZm4pCiAKICAgICAgICAgc2VsZi5idWlsZFNldFZhcnMoKQorICAgICAgICBzZWxmLnJlc2V0X210aW1lX2NhY2hlcygpCiAKICAgICAgICAgYmJfY2FjaGUgPSBiYi5jYWNoZS5DYWNoZShzZWxmLmRhdGFidWlsZGVyLCBzZWxmLmRhdGFfaGFzaCwgc2VsZi5jYWNoZXNfYXJyYXkpCiAKQEAgLTE0MTEsOCArMTMwNCw4IEBACiAgICAgICAgICMgUmVtb3ZlIGV4dGVybmFsIGRlcGVuZGVuY2llcwogICAgICAgICBzZWxmLnJlY2lwZWNhY2hlc1ttY10udGFza19kZXBzW2ZuXVsnZGVwZW5kcyddID0ge30KICAgICAgICAgc2VsZi5yZWNpcGVjYWNoZXNbbWNdLmRlcHNbZm5dID0gW10KLSAgICAgICAgc2VsZi5yZWNpcGVjYWNoZXNbbWNdLnJ1bmRlcHNbZm5dID0gW10KLSAgICAgICAgc2VsZi5yZWNpcGVjYWNoZXNbbWNdLnJ1bnJlY3NbZm5dID0gW10KKyAgICAgICAgc2VsZi5yZWNpcGVjYWNoZXNbbWNdLnJ1bmRlcHNbZm5dID0gZGVmYXVsdGRpY3QobGlzdCkKKyAgICAgICAgc2VsZi5yZWNpcGVjYWNoZXNbbWNdLnJ1bnJlY3NbZm5dID0gZGVmYXVsdGRpY3QobGlzdCkKIAogICAgICAgICAjIEludmFsaWRhdGUgdGFzayBmb3IgdGFyZ2V0IGlmIGZvcmNlIG1vZGUgYWN0aXZlCiAgICAgICAgIGlmIHNlbGYuY29uZmlndXJhdGlvbi5mb3JjZToKQEAgLTE0MjIsMTAgKzEzMTUsMTUgQEAKICAgICAgICAgIyBTZXR1cCB0YXNrZGF0YSBzdHJ1Y3R1cmUKICAgICAgICAgdGFza2RhdGEgPSB7fQogICAgICAgICB0YXNrZGF0YVttY10gPSBiYi50YXNrZGF0YS5UYXNrRGF0YShzZWxmLmNvbmZpZ3VyYXRpb24uYWJvcnQpCi0gICAgICAgIHRhc2tkYXRhW21jXS5hZGRfcHJvdmlkZXIoc2VsZi5kYXRhLCBzZWxmLnJlY2lwZWNhY2hlc1ttY10sIGl0ZW0pCisgICAgICAgIHRhc2tkYXRhW21jXS5hZGRfcHJvdmlkZXIoc2VsZi5kYXRhYnVpbGRlci5tY2RhdGFbbWNdLCBzZWxmLnJlY2lwZWNhY2hlc1ttY10sIGl0ZW0pCiAKLSAgICAgICAgYnVpbGRuYW1lID0gc2VsZi5kYXRhLmdldFZhcigiQlVJTEROQU1FIikKLSAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5CdWlsZFN0YXJ0ZWQoYnVpbGRuYW1lLCBbaXRlbV0pLCBzZWxmLmRhdGEpCisgICAgICAgIGlmIHF1aWV0bG9nOgorICAgICAgICAgICAgcnFsb2dsZXZlbCA9IGJiLnJ1bnF1ZXVlLmxvZ2dlci5nZXRFZmZlY3RpdmVMZXZlbCgpCisgICAgICAgICAgICBiYi5ydW5xdWV1ZS5sb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5XQVJOSU5HKQorCisgICAgICAgIGJ1aWxkbmFtZSA9IHNlbGYuZGF0YWJ1aWxkZXIubWNkYXRhW21jXS5nZXRWYXIoIkJVSUxETkFNRSIpCisgICAgICAgIGlmIGZpcmVldmVudHM6CisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkJ1aWxkU3RhcnRlZChidWlsZG5hbWUsIFtpdGVtXSksIHNlbGYuZGF0YWJ1aWxkZXIubWNkYXRhW21jXSkKIAogICAgICAgICAjIEV4ZWN1dGUgdGhlIHJ1bnF1ZXVlCiAgICAgICAgIHJ1bmxpc3QgPSBbW21jLCBpdGVtLCB0YXNrLCBmbl1dCkBAIC0xNDUyLDExICsxMzUwLDIwIEBACiAgICAgICAgICAgICAgICAgcmV0dmFsID0gRmFsc2UKICAgICAgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0IGFzIGV4YzoKICAgICAgICAgICAgICAgICBzZWxmLmNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKHN0cihleGMpKQorICAgICAgICAgICAgICAgIGlmIHF1aWV0bG9nOgorICAgICAgICAgICAgICAgICAgICBiYi5ydW5xdWV1ZS5sb2dnZXIuc2V0TGV2ZWwocnFsb2dsZXZlbCkKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgICAgICAgICAgaWYgbm90IHJldHZhbDoKLSAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkKGxlbihycS5ycWRhdGEucnVudGFza2VudHJpZXMpLCBidWlsZG5hbWUsIGl0ZW0sIGZhaWx1cmVzLCBpbnRlcnJ1cHRlZCksIHNlbGYuZGF0YSkKKyAgICAgICAgICAgICAgICBpZiBmaXJlZXZlbnRzOgorICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkKGxlbihycS5ycWRhdGEucnVudGFza2VudHJpZXMpLCBidWlsZG5hbWUsIGl0ZW0sIGZhaWx1cmVzLCBpbnRlcnJ1cHRlZCksIHNlbGYuZGF0YWJ1aWxkZXIubWNkYXRhW21jXSkKICAgICAgICAgICAgICAgICBzZWxmLmNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKG1zZykKKyAgICAgICAgICAgICAgICAjIFdlIHRyYXNoZWQgc2VsZi5yZWNpcGVjYWNoZXMgYWJvdmUKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlY2FjaGVfdmFsaWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5saW1pdGVkX2RlcHMgPSBGYWxzZQorICAgICAgICAgICAgICAgIGJiLnBhcnNlLnNpZ2dlbi5yZXNldChzZWxmLmRhdGEpCisgICAgICAgICAgICAgICAgaWYgcXVpZXRsb2c6CisgICAgICAgICAgICAgICAgICAgIGJiLnJ1bnF1ZXVlLmxvZ2dlci5zZXRMZXZlbChycWxvZ2xldmVsKQogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgaWYgcmV0dmFsIGlzIFRydWU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKQEAgLTE0OTEsMTQgKzEzOTgsMTcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgICAgICAgICAgaWYgbm90IHJldHZhbDoKLSAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkKGxlbihycS5ycWRhdGEucnVudGFza2VudHJpZXMpLCBidWlsZG5hbWUsIHRhcmdldHMsIGZhaWx1cmVzLCBpbnRlcnJ1cHRlZCksIHNlbGYuZGF0YSkKLSAgICAgICAgICAgICAgICBzZWxmLmNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKG1zZykKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGZvciBtYyBpbiBzZWxmLm11bHRpY29uZmlnczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQobGVuKHJxLnJxZGF0YS5ydW50YXNrZW50cmllcyksIGJ1aWxkbmFtZSwgdGFyZ2V0cywgZmFpbHVyZXMsIGludGVycnVwdGVkKSwgc2VsZi5kYXRhYnVpbGRlci5tY2RhdGFbbWNdKQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQobXNnKQogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgaWYgcmV0dmFsIGlzIFRydWU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgICAgIHJldHVybiByZXR2YWwKIAotICAgICAgICBidWlsZC5yZXNldF9jYWNoZSgpCisgICAgICAgIHNlbGYucmVzZXRfbXRpbWVfY2FjaGVzKCkKICAgICAgICAgc2VsZi5idWlsZFNldFZhcnMoKQogCiAgICAgICAgICMgSWYgd2UgYXJlIHRvbGQgdG8gZG8gdGhlIE5vbmUgdGFzayB0aGVuIHF1ZXJ5IHRoZSBkZWZhdWx0IHRhc2sKQEAgLTE1MjMsNyArMTQzMyw4IEBACiAgICAgICAgICAgICAgICAgbnRhcmdldHMuYXBwZW5kKCJtdWx0aWNvbmZpZzolczolczolcyIgJSAodGFyZ2V0WzBdLCB0YXJnZXRbMV0sIHRhcmdldFsyXSkpCiAgICAgICAgICAgICBudGFyZ2V0cy5hcHBlbmQoIiVzOiVzIiAlICh0YXJnZXRbMV0sIHRhcmdldFsyXSkpCiAKLSAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5CdWlsZFN0YXJ0ZWQoYnVpbGRuYW1lLCBudGFyZ2V0cyksIHNlbGYuZGF0YSkKKyAgICAgICAgZm9yIG1jIGluIHNlbGYubXVsdGljb25maWdzOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5CdWlsZFN0YXJ0ZWQoYnVpbGRuYW1lLCBudGFyZ2V0cyksIHNlbGYuZGF0YWJ1aWxkZXIubWNkYXRhW21jXSkKIAogICAgICAgICBycSA9IGJiLnJ1bnF1ZXVlLlJ1blF1ZXVlKHNlbGYsIHNlbGYuZGF0YSwgc2VsZi5yZWNpcGVjYWNoZXMsIHRhc2tkYXRhLCBydW5saXN0KQogICAgICAgICBpZiAndW5pdmVyc2UnIGluIHRhcmdldHM6CkBAIC0xNTU2LDU1ICsxNDY3LDYgQEAKICAgICAgICAgcmV0dXJuIGR1bXAKIAogCi0gICAgZGVmIGdlbmVyYXRlTmV3SW1hZ2Uoc2VsZiwgaW1hZ2UsIGJhc2VfaW1hZ2UsIHBhY2thZ2VfcXVldWUsIHRpbWVzdGFtcCwgZGVzY3JpcHRpb24pOgotICAgICAgICAnJycKLSAgICAgICAgQ3JlYXRlIGEgbmV3IGltYWdlIHdpdGggYSAicmVxdWlyZSIvImluaGVyaXQiIGJhc2VfaW1hZ2Ugc3RhdGVtZW50Ci0gICAgICAgICcnJwotICAgICAgICBpZiB0aW1lc3RhbXA6Ci0gICAgICAgICAgICBpbWFnZV9uYW1lID0gb3MucGF0aC5zcGxpdGV4dChpbWFnZSlbMF0KLSAgICAgICAgICAgIHRpbWVzdHIgPSB0aW1lLnN0cmZ0aW1lKCItJVklbSVkLSVIJU0lUyIpCi0gICAgICAgICAgICBkZXN0ID0gaW1hZ2VfbmFtZSArIHN0cih0aW1lc3RyKSArICIuYmIiCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBub3QgaW1hZ2UuZW5kc3dpdGgoIi5iYiIpOgotICAgICAgICAgICAgICAgIGRlc3QgPSBpbWFnZSArICIuYmIiCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGRlc3QgPSBpbWFnZQotCi0gICAgICAgIGJhc2VuYW1lID0gRmFsc2UKLSAgICAgICAgaWYgYmFzZV9pbWFnZToKLSAgICAgICAgICAgIHdpdGggb3BlbihiYXNlX2ltYWdlLCAncicpIGFzIGY6Ci0gICAgICAgICAgICAgICAgcmVxdWlyZV9saW5lID0gZi5yZWFkbGluZSgpCi0gICAgICAgICAgICAgICAgcCA9IHJlLmNvbXBpbGUoIklNQUdFX0JBU0VOQU1FICo9IikKLSAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgotICAgICAgICAgICAgICAgICAgICBpZiBwLnNlYXJjaChsaW5lKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lID0gVHJ1ZQotCi0gICAgICAgIHdpdGggb3BlbihkZXN0LCAidyIpIGFzIGltYWdlZmlsZToKLSAgICAgICAgICAgIGlmIGJhc2VfaW1hZ2UgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBpbWFnZWZpbGUud3JpdGUoImluaGVyaXQgY29yZS1pbWFnZVxuIikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgdG9wZGlyID0gc2VsZi5kYXRhLmdldFZhcigiVE9QRElSIiwgRmFsc2UpCi0gICAgICAgICAgICAgICAgaWYgdG9wZGlyIGluIGJhc2VfaW1hZ2U6Ci0gICAgICAgICAgICAgICAgICAgIGJhc2VfaW1hZ2UgPSByZXF1aXJlX2xpbmUuc3BsaXQoKVsxXQotICAgICAgICAgICAgICAgIGltYWdlZmlsZS53cml0ZSgicmVxdWlyZSAiICsgYmFzZV9pbWFnZSArICJcbiIpCi0gICAgICAgICAgICBpbWFnZV9pbnN0YWxsID0gIklNQUdFX0lOU1RBTEwgPSBcIiIKLSAgICAgICAgICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VfcXVldWU6Ci0gICAgICAgICAgICAgICAgaW1hZ2VfaW5zdGFsbCArPSBzdHIocGFja2FnZSkgKyAiICIKLSAgICAgICAgICAgIGltYWdlX2luc3RhbGwgKz0gIlwiXG4iCi0gICAgICAgICAgICBpbWFnZWZpbGUud3JpdGUoaW1hZ2VfaW5zdGFsbCkKLQotICAgICAgICAgICAgZGVzY3JpcHRpb25fdmFyID0gIkRFU0NSSVBUSU9OID0gXCIiICsgZGVzY3JpcHRpb24gKyAiXCJcbiIKLSAgICAgICAgICAgIGltYWdlZmlsZS53cml0ZShkZXNjcmlwdGlvbl92YXIpCi0KLSAgICAgICAgICAgIGlmIGJhc2VuYW1lOgotICAgICAgICAgICAgICAgICMgSWYgdGhpcyBpcyBvdmVyd3JpdHRlbiBpbiBhIGluaGVyaXRlZCBpbWFnZSwgcmVzZXQgaXQgdG8gZGVmYXVsdAotICAgICAgICAgICAgICAgIGltYWdlX2Jhc2VuYW1lID0gIklNQUdFX0JBU0VOQU1FID0gXCIke1BOfVwiXG4iCi0gICAgICAgICAgICAgICAgaW1hZ2VmaWxlLndyaXRlKGltYWdlX2Jhc2VuYW1lKQotCi0gICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZS5pbml0aWFsCi0gICAgICAgIGlmIHRpbWVzdGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0aW1lc3RyCi0KICAgICBkZWYgdXBkYXRlQ2FjaGVTeW5jKHNlbGYpOgogICAgICAgICBpZiBzZWxmLnN0YXRlID09IHN0YXRlLnJ1bm5pbmc6CiAgICAgICAgICAgICByZXR1cm4KQEAgLTE2MTksOCArMTQ4MSw3IEBACiAgICAgICAgIGlmIG5vdCBzZWxmLmJhc2Vjb25maWdfdmFsaWQ6CiAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJlbG9hZGluZyBiYXNlIGNvbmZpZ3VyYXRpb24gZGF0YSIpCiAgICAgICAgICAgICBzZWxmLmluaXRDb25maWd1cmF0aW9uRGF0YSgpCi0gICAgICAgICAgICBzZWxmLmJhc2Vjb25maWdfdmFsaWQgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLnBhcnNlY2FjaGVfdmFsaWQgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5oYW5kbGVQUlNlcnYoKQogCiAgICAgIyBUaGlzIGlzIGNhbGxlZCBmb3IgYWxsIGFzeW5jIGNvbW1hbmRzIHdoZW4gc2VsZi5zdGF0ZSAhPSBydW5uaW5nCiAgICAgZGVmIHVwZGF0ZUNhY2hlKHNlbGYpOgpAQCAtMTYzNiw2ICsxNDk3LDcgQEAKICAgICAgICAgICAgIHNlbGYudXBkYXRlQ2FjaGVTeW5jKCkKIAogICAgICAgICBpZiBzZWxmLnN0YXRlICE9IHN0YXRlLnBhcnNpbmcgYW5kIG5vdCBzZWxmLnBhcnNlY2FjaGVfdmFsaWQ6CisgICAgICAgICAgICBiYi5wYXJzZS5zaWdnZW4ucmVzZXQoc2VsZi5kYXRhKQogICAgICAgICAgICAgc2VsZi5wYXJzZUNvbmZpZ3VyYXRpb24gKCkKICAgICAgICAgICAgIGlmIENvb2tlckZlYXR1cmVzLlNFTkRfU0FOSVRZRVZFTlRTIGluIHNlbGYuZmVhdHVyZXNldDoKICAgICAgICAgICAgICAgICBmb3IgbWMgaW4gc2VsZi5tdWx0aWNvbmZpZ3M6CkBAIC0xNzIzLDQ2ICsxNTg1LDE0IEBACiAgICAgICAgIHJldHVybiBwa2dzX3RvX2J1aWxkCiAKICAgICBkZWYgcHJlX3NlcnZlKHNlbGYpOgotICAgICAgICAjIEVtcHR5IHRoZSBlbnZpcm9ubWVudC4gVGhlIGVudmlyb25tZW50IHdpbGwgYmUgcG9wdWxhdGVkIGFzCi0gICAgICAgICMgbmVjZXNzYXJ5IGZyb20gdGhlIGRhdGEgc3RvcmUuCi0gICAgICAgICNiYi51dGlscy5lbXB0eV9lbnZpcm9ubWVudCgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYucHJob3N0ID0gcHJzZXJ2LnNlcnYuYXV0b19zdGFydChzZWxmLmRhdGEpCi0gICAgICAgIGV4Y2VwdCBwcnNlcnYuc2Vydi5QUlNlcnZpY2VDb25maWdFcnJvcjoKLSAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoQ29va2VyRXhpdCgpLCBzZWxmLmRhdGEpCi0gICAgICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUuZXJyb3IKKyAgICAgICAgIyBXZSBub3cgYXJlIGluIG91ciBvd24gcHJvY2VzcyBzbyB3ZSBjYW4gY2FsbCB0aGlzIGhlcmUuCisgICAgICAgICMgUFJTZXJ2IGV4aXRzIGlmIGl0cyBwYXJlbnQgcHJvY2VzcyBleGl0cworICAgICAgICBzZWxmLmhhbmRsZVBSU2VydigpCiAgICAgICAgIHJldHVybgogCiAgICAgZGVmIHBvc3Rfc2VydmUoc2VsZik6Ci0gICAgICAgIHByc2Vydi5zZXJ2LmF1dG9fc2h1dGRvd24oc2VsZi5kYXRhKQorICAgICAgICBwcnNlcnYuc2Vydi5hdXRvX3NodXRkb3duKCkKICAgICAgICAgYmIuZXZlbnQuZmlyZShDb29rZXJFeGl0KCksIHNlbGYuZGF0YSkKLSAgICAgICAgbG9ja2ZpbGUgPSBzZWxmLmxvY2submFtZQotICAgICAgICBzZWxmLmxvY2suY2xvc2UoKQotICAgICAgICBzZWxmLmxvY2sgPSBOb25lCi0KLSAgICAgICAgd2hpbGUgbm90IHNlbGYubG9jazoKLSAgICAgICAgICAgIHdpdGggYmIudXRpbHMudGltZW91dCgzKToKLSAgICAgICAgICAgICAgICBzZWxmLmxvY2sgPSBiYi51dGlscy5sb2NrZmlsZShsb2NrZmlsZSwgc2hhcmVkPUZhbHNlLCByZXRyeT1GYWxzZSwgYmxvY2s9VHJ1ZSkKLSAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5sb2NrOgotICAgICAgICAgICAgICAgICAgICAjIFNvbWUgc3lzdGVtcyBtYXkgbm90IGhhdmUgbHNvZiBhdmFpbGFibGUKLSAgICAgICAgICAgICAgICAgICAgcHJvY3MgPSBOb25lCi0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2NzID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJsc29mIiwgJy13JywgbG9ja2ZpbGVdLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgICAgICBpZiBwcm9jcyBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgIyBGYWxsIGJhY2sgdG8gZnVzZXIgaWYgbHNvZiBpcyB1bmF2YWlsYWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2NzID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJmdXNlciIsICctdicsIGxvY2tmaWxlXSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLQotICAgICAgICAgICAgICAgICAgICBtc2cgPSAiRGVsYXlpbmcgc2h1dGRvd24gZHVlIHRvIGFjdGl2ZSBwcm9jZXNzZXMgd2hpY2ggYXBwZWFyIHRvIGJlIGhvbGRpbmcgYml0YmFrZS5sb2NrIgotICAgICAgICAgICAgICAgICAgICBpZiBwcm9jczoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1zZyArPSAiOlxuJXMiICUgc3RyKHByb2NzKQotICAgICAgICAgICAgICAgICAgICBwcmludChtc2cpCiAKIAogICAgIGRlZiBzaHV0ZG93bihzZWxmLCBmb3JjZSA9IEZhbHNlKToKQEAgLTE3ODQsNDYgKzE2MTQsMTIgQEAKIAogICAgIGRlZiBjbGllbnRDb21wbGV0ZShzZWxmKToKICAgICAgICAgIiIiQ2FsbGVkIHdoZW4gdGhlIGNsaWVudCBpcyBkb25lIHVzaW5nIHRoZSBzZXJ2ZXIiIiIKLSAgICAgICAgaWYgc2VsZi5jb25maWd1cmF0aW9uLnNlcnZlcl9vbmx5OgotICAgICAgICAgICAgc2VsZi5maW5pc2hjb21tYW5kKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuc2h1dGRvd24oVHJ1ZSkKKyAgICAgICAgc2VsZi5maW5pc2hjb21tYW5kKCkKKyAgICAgICAgc2VsZi5leHRyYWNvbmZpZ2RhdGEgPSB7fQorICAgICAgICBzZWxmLmNvbW1hbmQucmVzZXQoKQorICAgICAgICBzZWxmLmRhdGFidWlsZGVyLnJlc2V0KCkKKyAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5kYXRhYnVpbGRlci5kYXRhCiAKLSAgICBkZWYgbG9ja0JpdGJha2Uoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdsb2NrJyk6Ci0gICAgICAgICAgICBzZWxmLmxvY2sgPSBOb25lCi0gICAgICAgICAgICBpZiBzZWxmLmRhdGE6Ci0gICAgICAgICAgICAgICAgbG9ja2ZpbGUgPSBzZWxmLmRhdGEuZXhwYW5kKCIke1RPUERJUn0vYml0YmFrZS5sb2NrIikKLSAgICAgICAgICAgICAgICBpZiBsb2NrZmlsZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2NrID0gYmIudXRpbHMubG9ja2ZpbGUobG9ja2ZpbGUsIEZhbHNlLCBGYWxzZSkKLSAgICAgICAgcmV0dXJuIHNlbGYubG9jawotCi0gICAgZGVmIHVubG9ja0JpdGJha2Uoc2VsZik6Ci0gICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ2xvY2snKSBhbmQgc2VsZi5sb2NrOgotICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShzZWxmLmxvY2spCi0KLWRlZiBzZXJ2ZXJfbWFpbihjb29rZXIsIGZ1bmMsICphcmdzKToKLSAgICBjb29rZXIucHJlX3NlcnZlKCkKLQotICAgIGlmIGNvb2tlci5jb25maWd1cmF0aW9uLnByb2ZpbGU6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGltcG9ydCBjUHJvZmlsZSBhcyBwcm9maWxlCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIGltcG9ydCBwcm9maWxlCi0gICAgICAgIHByb2YgPSBwcm9maWxlLlByb2ZpbGUoKQotCi0gICAgICAgIHJldCA9IHByb2ZpbGUuUHJvZmlsZS5ydW5jYWxsKHByb2YsIGZ1bmMsICphcmdzKQotCi0gICAgICAgIHByb2YuZHVtcF9zdGF0cygicHJvZmlsZS5sb2ciKQotICAgICAgICBiYi51dGlscy5wcm9jZXNzX3Byb2ZpbGVsb2coInByb2ZpbGUubG9nIikKLSAgICAgICAgcHJpbnQoIlJhdyBwcm9maWxpbmcgaW5mb3JtYXRpb24gc2F2ZWQgdG8gcHJvZmlsZS5sb2cgYW5kIHByb2Nlc3NlZCBzdGF0aXN0aWNzIHRvIHByb2ZpbGUubG9nLnByb2Nlc3NlZCIpCi0KLSAgICBlbHNlOgotICAgICAgICByZXQgPSBmdW5jKCphcmdzKQotCi0gICAgY29va2VyLnBvc3Rfc2VydmUoKQotCi0gICAgcmV0dXJuIHJldAogCiBjbGFzcyBDb29rZXJFeGl0KGJiLmV2ZW50LkV2ZW50KToKICAgICAiIiIKQEAgLTE4OTAsMTUgKzE2ODYsMjMgQEAKIAogICAgICAgICAjIFdlIG5lZWQgdG8gdHJhY2sgd2hlcmUgd2UgbG9vayBzbyB0aGF0IHdlIGNhbiBhZGQgaW5vdGlmeSB3YXRjaGVzLiBUaGVyZQogICAgICAgICAjIGlzIG5vIG5pY2Ugd2F5IHRvIGRvIHRoaXMsIHRoaXMgaXMgaG9ycmlkLiBXZSBpbnRlcmNlcHQgdGhlIG9zLmxpc3RkaXIoKQotICAgICAgICAjIGNhbGxzIHdoaWxlIHdlIHJ1biBnbG9iKCkuCisgICAgICAgICMgKG9yIG9zLnNjYW5kaXIoKSBmb3IgcHl0aG9uIDMuNispIGNhbGxzIHdoaWxlIHdlIHJ1biBnbG9iKCkuCiAgICAgICAgIG9yaWdsaXN0ZGlyID0gb3MubGlzdGRpcgorICAgICAgICBpZiBoYXNhdHRyKG9zLCAnc2NhbmRpcicpOgorICAgICAgICAgICAgb3JpZ3NjYW5kaXIgPSBvcy5zY2FuZGlyCiAgICAgICAgIHNlYXJjaGRpcnMgPSBbXQogCiAgICAgICAgIGRlZiBvdXJsaXN0ZGlyKGQpOgogICAgICAgICAgICAgc2VhcmNoZGlycy5hcHBlbmQoZCkKICAgICAgICAgICAgIHJldHVybiBvcmlnbGlzdGRpcihkKQogCisgICAgICAgIGRlZiBvdXJzY2FuZGlyKGQpOgorICAgICAgICAgICAgc2VhcmNoZGlycy5hcHBlbmQoZCkKKyAgICAgICAgICAgIHJldHVybiBvcmlnc2NhbmRpcihkKQorCiAgICAgICAgIG9zLmxpc3RkaXIgPSBvdXJsaXN0ZGlyCisgICAgICAgIGlmIGhhc2F0dHIob3MsICdzY2FuZGlyJyk6CisgICAgICAgICAgICBvcy5zY2FuZGlyID0gb3Vyc2NhbmRpcgogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIENhbid0IHVzZSBzZXQgaGVyZSBhcyBvcmRlciBpcyBpbXBvcnRhbnQKICAgICAgICAgICAgIG5ld2ZpbGVzID0gW10KQEAgLTE5MTgsNiArMTcyMiw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3ZmlsZXMuYXBwZW5kKGcpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBvcy5saXN0ZGlyID0gb3JpZ2xpc3RkaXIKKyAgICAgICAgICAgIGlmIGhhc2F0dHIob3MsICdzY2FuZGlyJyk6CisgICAgICAgICAgICAgICAgb3Muc2NhbmRpciA9IG9yaWdzY2FuZGlyCiAKICAgICAgICAgYmJtYXNrID0gY29uZmlnLmdldFZhcignQkJNQVNLJykKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2Nvb2tlcmRhdGEucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29va2VyZGF0YS5weQppbmRleCBlNDA4YTM1Li5mYWI0N2M3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29va2VyZGF0YS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29va2VyZGF0YS5weQpAQCAtNDEsMTAgKzQxLDYgQEAKIAogICAgICAgICBzZWxmLm9wdGlvbnMucGtnc190b19idWlsZCA9IHRhcmdldHMgb3IgW10KIAotICAgICAgICBzZWxmLm9wdGlvbnMudHJhY2tpbmcgPSBGYWxzZQotICAgICAgICBpZiBoYXNhdHRyKHNlbGYub3B0aW9ucywgInNob3dfZW52aXJvbm1lbnQiKSBhbmQgc2VsZi5vcHRpb25zLnNob3dfZW52aXJvbm1lbnQ6Ci0gICAgICAgICAgICBzZWxmLm9wdGlvbnMudHJhY2tpbmcgPSBUcnVlCi0KICAgICAgICAgZm9yIGtleSwgdmFsIGluIHNlbGYub3B0aW9ucy5fX2RpY3RfXy5pdGVtcygpOgogICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrZXksIHZhbCkKIApAQCAtNzMsMTUgKzY5LDE1IEBACiAKICAgICBkZWYgdXBkYXRlVG9TZXJ2ZXIoc2VsZiwgc2VydmVyLCBlbnZpcm9ubWVudCk6CiAgICAgICAgIG9wdGlvbnMgPSB7fQotICAgICAgICBmb3IgbyBpbiBbImFib3J0IiwgInRyeWFsdGNvbmZpZ3MiLCAiZm9yY2UiLCAiaW52YWxpZGF0ZV9zdGFtcCIsIAotICAgICAgICAgICAgICAgICAgInZlcmJvc2UiLCAiZGVidWciLCAiZHJ5X3J1biIsICJkdW1wX3NpZ25hdHVyZXMiLCAKKyAgICAgICAgZm9yIG8gaW4gWyJhYm9ydCIsICJmb3JjZSIsICJpbnZhbGlkYXRlX3N0YW1wIiwKKyAgICAgICAgICAgICAgICAgICJ2ZXJib3NlIiwgImRlYnVnIiwgImRyeV9ydW4iLCAiZHVtcF9zaWduYXR1cmVzIiwKICAgICAgICAgICAgICAgICAgICJkZWJ1Z19kb21haW5zIiwgImV4dHJhX2Fzc3VtZV9wcm92aWRlZCIsICJwcm9maWxlIiwKLSAgICAgICAgICAgICAgICAgICJwcmVmaWxlIiwgInBvc3RmaWxlIl06CisgICAgICAgICAgICAgICAgICAicHJlZmlsZSIsICJwb3N0ZmlsZSIsICJzZXJ2ZXJfdGltZW91dCJdOgogICAgICAgICAgICAgb3B0aW9uc1tvXSA9IGdldGF0dHIoc2VsZi5vcHRpb25zLCBvKQogCiAgICAgICAgIHJldCwgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbInVwZGF0ZUNvbmZpZyIsIG9wdGlvbnMsIGVudmlyb25tZW50LCBzeXMuYXJndl0pCiAgICAgICAgIGlmIGVycm9yOgotICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5hYmxlIHRvIHVwZGF0ZSB0aGUgc2VydmVyIGNvbmZpZ3VyYXRpb24gd2l0aCBsb2NhbCBwYXJhbWV0ZXJzOiAlcyIgJSBlcnJvcikKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5hYmxlIHRvIHVwZGF0ZSB0aGUgc2VydmVyIGNvbmZpZ3VyYXRpb24gd2l0aCBsb2NhbCBwYXJhbWV0ZXJzOiAlcyIgJSBlcnJvcikKIAogICAgIGRlZiBwYXJzZUFjdGlvbnMoc2VsZik6CiAgICAgICAgICMgUGFyc2UgYW55IGNvbW1hbmRsaW5lIGludG8gYWN0aW9ucwpAQCAtMTMxLDggKzEyNyw2IEBACiAgICAgICAgIHNlbGYuZXh0cmFfYXNzdW1lX3Byb3ZpZGVkID0gW10KICAgICAgICAgc2VsZi5wcmVmaWxlID0gW10KICAgICAgICAgc2VsZi5wb3N0ZmlsZSA9IFtdCi0gICAgICAgIHNlbGYucHJlZmlsZV9zZXJ2ZXIgPSBbXQotICAgICAgICBzZWxmLnBvc3RmaWxlX3NlcnZlciA9IFtdCiAgICAgICAgIHNlbGYuZGVidWcgPSAwCiAgICAgICAgIHNlbGYuY21kID0gTm9uZQogICAgICAgICBzZWxmLmFib3J0ID0gVHJ1ZQpAQCAtMTQ0LDcgKzEzOCw4IEBACiAgICAgICAgIHNlbGYuZHVtcF9zaWduYXR1cmVzID0gW10KICAgICAgICAgc2VsZi5kcnlfcnVuID0gRmFsc2UKICAgICAgICAgc2VsZi50cmFja2luZyA9IEZhbHNlCi0gICAgICAgIHNlbGYuaW50ZXJmYWNlID0gW10KKyAgICAgICAgc2VsZi54bWxycGNpbnRlcmZhY2UgPSBbXQorICAgICAgICBzZWxmLnNlcnZlcl90aW1lb3V0ID0gTm9uZQogICAgICAgICBzZWxmLndyaXRlZXZlbnRsb2cgPSBGYWxzZQogICAgICAgICBzZWxmLnNlcnZlcl9vbmx5ID0gRmFsc2UKICAgICAgICAgc2VsZi5saW1pdGVkX2RlcHMgPSBGYWxzZQpAQCAtMTU3LDcgKzE1Miw2IEBACiAgICAgICAgICAgICBpZiBrZXkgaW4gcGFyYW1ldGVycy5vcHRpb25zLl9fZGljdF9fOgogICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwga2V5LCBwYXJhbWV0ZXJzLm9wdGlvbnMuX19kaWN0X19ba2V5XSkKICAgICAgICAgc2VsZi5lbnYgPSBwYXJhbWV0ZXJzLmVudmlyb25tZW50LmNvcHkoKQotICAgICAgICBzZWxmLnRyYWNraW5nID0gcGFyYW1ldGVycy50cmFja2luZwogCiAgICAgZGVmIHNldFNlcnZlclJlZ0lkbGVDYWxsYmFjayhzZWxmLCBzcmNiKToKICAgICAgICAgc2VsZi5zZXJ2ZXJfcmVnaXN0ZXJfaWRsZWNhbGxiYWNrID0gc3JjYgpAQCAtMTczLDcgKzE2Nyw3IEBACiAKICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsc3RhdGUpOgogICAgICAgICBmb3IgayBpbiBzdGF0ZToKLSAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgaywgc3RhdGVba10pIAorICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrLCBzdGF0ZVtrXSkKIAogCiBkZWYgY2F0Y2hfcGFyc2VfZXJyb3IoZnVuYyk6CkBAIC0yMzAsNiArMjI0LDI3IEBACiAKICAgICByZXR1cm4gTm9uZQogCisjCisjIFdlIHNlYXJjaCBmb3IgYSBjb25mL2JibGF5ZXJzLmNvbmYgdW5kZXIgYW4gZW50cnkgaW4gQkJQQVRIIG9yIGluIGN3ZCB3b3JraW5nIAorIyB1cCB0byAvLiBJZiB0aGF0IGZhaWxzLCB3ZSBzZWFyY2ggZm9yIGEgY29uZi9iaXRiYWtlLmNvbmYgaW4gQkJQQVRILgorIworCitkZWYgZmluZFRvcGRpcigpOgorICAgIGQgPSBiYi5kYXRhLmluaXQoKQorICAgIGJicGF0aCA9IE5vbmUKKyAgICBpZiAnQkJQQVRIJyBpbiBvcy5lbnZpcm9uOgorICAgICAgICBiYnBhdGggPSBvcy5lbnZpcm9uWydCQlBBVEgnXQorICAgICAgICBkLnNldFZhcignQkJQQVRIJywgYmJwYXRoKQorCisgICAgbGF5ZXJjb25mID0gZmluZENvbmZpZ0ZpbGUoImJibGF5ZXJzLmNvbmYiLCBkKQorICAgIGlmIGxheWVyY29uZjoKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUobGF5ZXJjb25mKSkKKyAgICBpZiBiYnBhdGg6CisgICAgICAgIGJpdGJha2Vjb25mID0gYmIudXRpbHMud2hpY2goYmJwYXRoLCAiY29uZi9iaXRiYWtlLmNvbmYiKQorICAgICAgICBpZiBiaXRiYWtlY29uZjoKKyAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKGJpdGJha2Vjb25mKSkKKyAgICByZXR1cm4gTm9uZQorCiBjbGFzcyBDb29rZXJEYXRhQnVpbGRlcihvYmplY3QpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvb2tlcmNmZywgd29ya2VyID0gRmFsc2UpOgpAQCAtMjU1LDcgKzI3MCw3IEBACiAgICAgICAgIGZpbHRlcmVkX2tleXMgPSBiYi51dGlscy5hcHByb3ZlZF92YXJpYWJsZXMoKQogICAgICAgICBiYi5kYXRhLmluaGVyaXRGcm9tT1Moc2VsZi5iYXNlZGF0YSwgc2VsZi5zYXZlZGVudiwgZmlsdGVyZWRfa2V5cykKICAgICAgICAgc2VsZi5iYXNlZGF0YS5zZXRWYXIoIkJCX09SSUdFTlYiLCBzZWxmLnNhdmVkZW52KQotICAgICAgICAKKwogICAgICAgICBpZiB3b3JrZXI6CiAgICAgICAgICAgICBzZWxmLmJhc2VkYXRhLnNldFZhcigiQkJfV09SS0VSQ09OVEVYVCIsICIxIikKIApAQCAtMjk0LDYgKzMwOSw4IEBACiAgICAgICAgICAgICAgICAgbWNkYXRhID0gc2VsZi5wYXJzZUNvbmZpZ3VyYXRpb25GaWxlcyhzZWxmLnByZWZpbGVzLCBzZWxmLnBvc3RmaWxlcywgY29uZmlnKQogICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQ29uZmlnUGFyc2VkKCksIG1jZGF0YSkKICAgICAgICAgICAgICAgICBzZWxmLm1jZGF0YVtjb25maWddID0gbWNkYXRhCisgICAgICAgICAgICBpZiBtdWx0aWNvbmZpZzoKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk11bHRpQ29uZmlnUGFyc2VkKHNlbGYubWNkYXRhKSwgc2VsZi5kYXRhKQogCiAgICAgICAgIGV4Y2VwdCAoU3ludGF4RXJyb3IsIGJiLkJCSGFuZGxlZEV4Y2VwdGlvbik6CiAgICAgICAgICAgICByYWlzZSBiYi5CQkhhbmRsZWRFeGNlcHRpb24KQEAgLTMwNCw2ICszMjEsMTggQEAKICAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oIkVycm9yIHBhcnNpbmcgY29uZmlndXJhdGlvbiBmaWxlcyIpCiAgICAgICAgICAgICByYWlzZSBiYi5CQkhhbmRsZWRFeGNlcHRpb24KIAorICAgICAgICAjIENyZWF0ZSBhIGNvcHkgc28gd2UgY2FuIHJlc2V0IGF0IGEgbGF0ZXIgZGF0ZSB3aGVuIFVJcyBkaXNjb25uZWN0CisgICAgICAgIHNlbGYub3JpZ2RhdGEgPSBzZWxmLmRhdGEKKyAgICAgICAgc2VsZi5kYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KHNlbGYub3JpZ2RhdGEpCisgICAgICAgIHNlbGYubWNkYXRhWycnXSA9IHNlbGYuZGF0YQorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICAjIFdlIG1heSBub3QgaGF2ZSBydW4gcGFyc2VCYXNlQ29uZmlndXJhdGlvbigpIHlldAorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAnb3JpZ2RhdGEnKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoc2VsZi5vcmlnZGF0YSkKKyAgICAgICAgc2VsZi5tY2RhdGFbJyddID0gc2VsZi5kYXRhCisKICAgICBkZWYgX2ZpbmRMYXllckNvbmYoc2VsZiwgZGF0YSk6CiAgICAgICAgIHJldHVybiBmaW5kQ29uZmlnRmlsZSgiYmJsYXllcnMuY29uZiIsIGRhdGEpCiAKQEAgLTM0Niw2ICszNzUsMjcgQEAKICAgICAgICAgICAgIGRhdGEuZGVsVmFyKCdMQVlFUkRJUl9SRScpCiAgICAgICAgICAgICBkYXRhLmRlbFZhcignTEFZRVJESVInKQogCisgICAgICAgICAgICBiYmZpbGVzX2R5bmFtaWMgPSAoZGF0YS5nZXRWYXIoJ0JCRklMRVNfRFlOQU1JQycpIG9yICIiKS5zcGxpdCgpCisgICAgICAgICAgICBjb2xsZWN0aW9ucyA9IChkYXRhLmdldFZhcignQkJGSUxFX0NPTExFQ1RJT05TJykgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgICAgIGludmFsaWQgPSBbXQorICAgICAgICAgICAgZm9yIGVudHJ5IGluIGJiZmlsZXNfZHluYW1pYzoKKyAgICAgICAgICAgICAgICBwYXJ0cyA9IGVudHJ5LnNwbGl0KCI6IiwgMSkKKyAgICAgICAgICAgICAgICBpZiBsZW4ocGFydHMpICE9IDI6CisgICAgICAgICAgICAgICAgICAgIGludmFsaWQuYXBwZW5kKGVudHJ5KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGwsIGYgPSBwYXJ0cworICAgICAgICAgICAgICAgIGlmIGwgaW4gY29sbGVjdGlvbnM6CisgICAgICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kVmFyKCJCQkZJTEVTIiwgIiAiICsgZikKKyAgICAgICAgICAgIGlmIGludmFsaWQ6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIkJCRklMRVNfRFlOQU1JQyBlbnRyaWVzIG11c3QgYmUgb2YgdGhlIGZvcm0gPGNvbGxlY3Rpb24gbmFtZT46PGZpbGVuYW1lIHBhdHRlcm4+LCBub3Q6XG4gICAgJXMiICUgIlxuICAgICIuam9pbihpbnZhbGlkKSkKKworICAgICAgICAgICAgbGF5ZXJzZXJpZXMgPSBzZXQoKGRhdGEuZ2V0VmFyKCJMQVlFUlNFUklFU19DT1JFTkFNRVMiKSBvciAiIikuc3BsaXQoKSkKKyAgICAgICAgICAgIGZvciBjIGluIGNvbGxlY3Rpb25zOgorICAgICAgICAgICAgICAgIGNvbXBhdCA9IHNldCgoZGF0YS5nZXRWYXIoIkxBWUVSU0VSSUVTX0NPTVBBVF8lcyIgJSBjKSBvciAiIikuc3BsaXQoKSkKKyAgICAgICAgICAgICAgICBpZiBjb21wYXQgYW5kIG5vdCAoY29tcGF0ICYgbGF5ZXJzZXJpZXMpOgorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiTGF5ZXIgJXMgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgY29yZSBsYXllciB3aGljaCBvbmx5IHN1cHBvcnRzIHRoZXNlIHNlcmllczogJXMgKGxheWVyIGlzIGNvbXBhdGlibGUgd2l0aCAlcykiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChjLCAiICIuam9pbihsYXllcnNlcmllcyksICIgIi5qb2luKGNvbXBhdCkpKQorCiAgICAgICAgIGlmIG5vdCBkYXRhLmdldFZhcigiQkJQQVRIIik6CiAgICAgICAgICAgICBtc2cgPSAiVGhlIEJCUEFUSCB2YXJpYWJsZSBpcyBub3Qgc2V0IgogICAgICAgICAgICAgaWYgbm90IGxheWVyY29uZjoKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9kYWVtb25pemUucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZGFlbW9uaXplLnB5CmluZGV4IGFiNGE5NTQuLjgzMDBkMWQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9kYWVtb25pemUucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2RhZW1vbml6ZS5weQpAQCAtMSw0OCArMSwxNCBAQAogIiIiCiBQeXRob24gRGFlbW9uaXppbmcgaGVscGVyCiAKLUNvbmZpZ3VyYWJsZSBkYWVtb24gYmVoYXZpb3JzOgotCi0gICAgMS4pIFRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHNldCB0byB0aGUgIi8iIGRpcmVjdG9yeS4KLSAgICAyLikgVGhlIGN1cnJlbnQgZmlsZSBjcmVhdGlvbiBtb2RlIG1hc2sgc2V0IHRvIDAuCi0gICAgMy4pIENsb3NlIGFsbCBvcGVuIGZpbGVzICgxMDI0KS4gCi0gICAgNC4pIFJlZGlyZWN0IHN0YW5kYXJkIEkvTyBzdHJlYW1zIHRvICIvZGV2L251bGwiLgotCi1BIGZhaWxlZCBjYWxsIHRvIGZvcmsoKSBub3cgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KLQotUmVmZXJlbmNlczoKLSAgICAxKSBBZHZhbmNlZCBQcm9ncmFtbWluZyBpbiB0aGUgVW5peCBFbnZpcm9ubWVudDogVy4gUmljaGFyZCBTdGV2ZW5zCi0JaHR0cDovL3d3dy5hcHVlYm9vay5jb20vYXB1ZTNlLmh0bWwKLSAgICAyKSBUaGUgTGludXggUHJvZ3JhbW1pbmcgSW50ZXJmYWNlOiBNaWNoYWVsIEtlcnJpc2sKLQlodHRwOi8vbWFuNy5vcmcvdGxwaS9pbmRleC5odG1sCi0gICAgMykgVW5peCBQcm9ncmFtbWluZyBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9uczoKLQlodHRwOi8vd3d3LmZhcXMub3JnL2ZhcXMvdW5peC1mYXEvcHJvZ3JhbW1lci9mYXEvCi0KLU1vZGlmaWVkIHRvIGFsbG93IGEgZnVuY3Rpb24gdG8gYmUgZGFlbW9uaXplZCBhbmQgcmV0dXJuIGZvciAKLWJpdGJha2UgdXNlIGJ5IFJpY2hhcmQgUHVyZGllCitPcmlnaW5hbGx5IGJhc2VkIG9uIGNvZGUgQ29weXJpZ2h0IChDKSAyMDA1IENoYWQgSi4gU2Nocm9lZGVyIGJ1dCBub3cgaGVhdmlseSBtb2RpZmllZAordG8gYWxsb3cgYSBmdW5jdGlvbiB0byBiZSBkYWVtb25pemVkIGFuZCByZXR1cm4gZm9yIGJpdGJha2UgdXNlIGJ5IFJpY2hhcmQgUHVyZGllCiAiIiIKIAotX19hdXRob3JfXyA9ICJDaGFkIEouIFNjaHJvZWRlciIKLV9fY29weXJpZ2h0X18gPSAiQ29weXJpZ2h0IChDKSAyMDA1IENoYWQgSi4gU2Nocm9lZGVyIgotX192ZXJzaW9uX18gPSAiMC4yIgotCi0jIFN0YW5kYXJkIFB5dGhvbiBtb2R1bGVzLgotaW1wb3J0IG9zICAgICAgICAgICAgICAgICAgICAjIE1pc2NlbGxhbmVvdXMgT1MgaW50ZXJmYWNlcy4KLWltcG9ydCBzeXMgICAgICAgICAgICAgICAgICAgIyBTeXN0ZW0tc3BlY2lmaWMgcGFyYW1ldGVycyBhbmQgZnVuY3Rpb25zLgotCi0jIERlZmF1bHQgZGFlbW9uIHBhcmFtZXRlcnMuCi0jIEZpbGUgbW9kZSBjcmVhdGlvbiBtYXNrIG9mIHRoZSBkYWVtb24uCi0jIEZvciBCaXRCYWtlJ3MgY2hpbGRyZW4sIHdlIGRvIHdhbnQgdG8gaW5oZXJpdCB0aGUgcGFyZW50IHVtYXNrLgotVU1BU0sgPSBOb25lCi0KLSMgRGVmYXVsdCBtYXhpbXVtIGZvciB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBmaWxlIGRlc2NyaXB0b3JzLgotTUFYRkQgPSAxMDI0Ci0KLSMgVGhlIHN0YW5kYXJkIEkvTyBmaWxlIGRlc2NyaXB0b3JzIGFyZSByZWRpcmVjdGVkIHRvIC9kZXYvbnVsbCBieSBkZWZhdWx0LgotaWYgKGhhc2F0dHIob3MsICJkZXZudWxsIikpOgotICAgIFJFRElSRUNUX1RPID0gb3MuZGV2bnVsbAotZWxzZToKLSAgICBSRURJUkVDVF9UTyA9ICIvZGV2L251bGwiCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBpbworaW1wb3J0IHRyYWNlYmFjawogCiBkZWYgY3JlYXRlRGFlbW9uKGZ1bmN0aW9uLCBsb2dmaWxlKToKICAgICAiIiIKQEAgLTY1LDM2ICszMSw2IEBACiAgICAgICAgICMgbGVhZGVyIG9mIHRoZSBuZXcgcHJvY2VzcyBncm91cCwgd2UgY2FsbCBvcy5zZXRzaWQoKS4gIFRoZSBwcm9jZXNzIGlzCiAgICAgICAgICMgYWxzbyBndWFyYW50ZWVkIG5vdCB0byBoYXZlIGEgY29udHJvbGxpbmcgdGVybWluYWwuCiAgICAgICAgIG9zLnNldHNpZCgpCi0KLSAgICAgICAgIyBJcyBpZ25vcmluZyBTSUdIVVAgbmVjZXNzYXJ5PwotICAgICAgICAjCi0gICAgICAgICMgSXQncyBvZnRlbiBzdWdnZXN0ZWQgdGhhdCB0aGUgU0lHSFVQIHNpZ25hbCBzaG91bGQgYmUgaWdub3JlZCBiZWZvcmUKLSAgICAgICAgIyB0aGUgc2Vjb25kIGZvcmsgdG8gYXZvaWQgcHJlbWF0dXJlIHRlcm1pbmF0aW9uIG9mIHRoZSBwcm9jZXNzLiAgVGhlCi0gICAgICAgICMgcmVhc29uIGlzIHRoYXQgd2hlbiB0aGUgZmlyc3QgY2hpbGQgdGVybWluYXRlcywgYWxsIHByb2Nlc3NlcywgZS5nLgotICAgICAgICAjIHRoZSBzZWNvbmQgY2hpbGQsIGluIHRoZSBvcnBoYW5lZCBncm91cCB3aWxsIGJlIHNlbnQgYSBTSUdIVVAuCi0gICAgICAgICMKLSAgICAgICAgIyAiSG93ZXZlciwgYXMgcGFydCBvZiB0aGUgc2Vzc2lvbiBtYW5hZ2VtZW50IHN5c3RlbSwgdGhlcmUgYXJlIGV4YWN0bHkKLSAgICAgICAgIyB0d28gY2FzZXMgd2hlcmUgU0lHSFVQIGlzIHNlbnQgb24gdGhlIGRlYXRoIG9mIGEgcHJvY2VzczoKLSAgICAgICAgIwotICAgICAgICAjICAgIDEpIFdoZW4gdGhlIHByb2Nlc3MgdGhhdCBkaWVzIGlzIHRoZSBzZXNzaW9uIGxlYWRlciBvZiBhIHNlc3Npb24gdGhhdAotICAgICAgICAjICAgICAgICBpcyBhdHRhY2hlZCB0byBhIHRlcm1pbmFsIGRldmljZSwgU0lHSFVQIGlzIHNlbnQgdG8gYWxsIHByb2Nlc3NlcwotICAgICAgICAjICAgICAgICBpbiB0aGUgZm9yZWdyb3VuZCBwcm9jZXNzIGdyb3VwIG9mIHRoYXQgdGVybWluYWwgZGV2aWNlLgotICAgICAgICAjICAgIDIpIFdoZW4gdGhlIGRlYXRoIG9mIGEgcHJvY2VzcyBjYXVzZXMgYSBwcm9jZXNzIGdyb3VwIHRvIGJlY29tZQotICAgICAgICAjICAgICAgICBvcnBoYW5lZCwgYW5kIG9uZSBvciBtb3JlIHByb2Nlc3NlcyBpbiB0aGUgb3JwaGFuZWQgZ3JvdXAgYXJlCi0gICAgICAgICMgICAgICAgIHN0b3BwZWQsIHRoZW4gU0lHSFVQIGFuZCBTSUdDT05UIGFyZSBzZW50IHRvIGFsbCBtZW1iZXJzIG9mIHRoZQotICAgICAgICAjICAgICAgICBvcnBoYW5lZCBncm91cC4iIFsyXQotICAgICAgICAjCi0gICAgICAgICMgVGhlIGZpcnN0IGNhc2UgY2FuIGJlIGlnbm9yZWQgc2luY2UgdGhlIGNoaWxkIGlzIGd1YXJhbnRlZWQgbm90IHRvIGhhdmUKLSAgICAgICAgIyBhIGNvbnRyb2xsaW5nIHRlcm1pbmFsLiAgVGhlIHNlY29uZCBjYXNlIGlzbid0IHNvIGVhc3kgdG8gZGlzbWlzcy4KLSAgICAgICAgIyBUaGUgcHJvY2VzcyBncm91cCBpcyBvcnBoYW5lZCB3aGVuIHRoZSBmaXJzdCBjaGlsZCB0ZXJtaW5hdGVzIGFuZAotICAgICAgICAjIFBPU0lYLjEgcmVxdWlyZXMgdGhhdCBldmVyeSBTVE9QUEVEIHByb2Nlc3MgaW4gYW4gb3JwaGFuZWQgcHJvY2VzcwotICAgICAgICAjIGdyb3VwIGJlIHNlbnQgYSBTSUdIVVAgc2lnbmFsIGZvbGxvd2VkIGJ5IGEgU0lHQ09OVCBzaWduYWwuICBTaW5jZSB0aGUKLSAgICAgICAgIyBzZWNvbmQgY2hpbGQgaXMgbm90IFNUT1BQRUQgdGhvdWdoLCB3ZSBjYW4gc2FmZWx5IGZvcmVnbyBpZ25vcmluZyB0aGUKLSAgICAgICAgIyBTSUdIVVAgc2lnbmFsLiAgSW4gYW55IGNhc2UsIHRoZXJlIGFyZSBubyBpbGwtZWZmZWN0cyBpZiBpdCBpcyBpZ25vcmVkLgotICAgICAgICAjCi0gICAgICAgICMgaW1wb3J0IHNpZ25hbCAgICAgICAgICAgICAgIyBTZXQgaGFuZGxlcnMgZm9yIGFzeW5jaHJvbm91cyBldmVudHMuCi0gICAgICAgICMgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSFVQLCBzaWduYWwuU0lHX0lHTikKLQogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIEZvcmsgYSBzZWNvbmQgY2hpbGQgYW5kIGV4aXQgaW1tZWRpYXRlbHkgdG8gcHJldmVudCB6b21iaWVzLiAgVGhpcwogICAgICAgICAgICAgIyBjYXVzZXMgdGhlIHNlY29uZCBjaGlsZCBwcm9jZXNzIHRvIGJlIG9ycGhhbmVkLCBtYWtpbmcgdGhlIGluaXQKQEAgLTEwOCw4NiArNDQsMzkgQEAKICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiJXMgWyVkXSIgJSAoZS5zdHJlcnJvciwgZS5lcnJubykpCiAKLSAgICAgICAgaWYgKHBpZCA9PSAwKTogICMgVGhlIHNlY29uZCBjaGlsZC4KLSAgICAgICAgICAgICMgV2UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0aGUgZmlsZSBtb2RlIGNyZWF0aW9uIG1hc2sgaW5oZXJpdGVkIGZyb20KLSAgICAgICAgICAgICMgdGhlIHBhcmVudCwgc28gd2UgZ2l2ZSB0aGUgY2hpbGQgY29tcGxldGUgY29udHJvbCBvdmVyIHBlcm1pc3Npb25zLgotICAgICAgICAgICAgaWYgVU1BU0sgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgb3MudW1hc2soVU1BU0spCi0gICAgICAgIGVsc2U6CisgICAgICAgIGlmIChwaWQgIT0gMCk6CiAgICAgICAgICAgICAjIFBhcmVudCAodGhlIGZpcnN0IGNoaWxkKSBvZiB0aGUgc2Vjb25kIGNoaWxkLgorICAgICAgICAgICAgIyBleGl0KCkgb3IgX2V4aXQoKT8KKyAgICAgICAgICAgICMgX2V4aXQgaXMgbGlrZSBleGl0KCksIGJ1dCBpdCBkb2Vzbid0IGNhbGwgYW55IGZ1bmN0aW9ucyByZWdpc3RlcmVkCisgICAgICAgICAgICAjIHdpdGggYXRleGl0IChhbmQgb25fZXhpdCkgb3IgYW55IHJlZ2lzdGVyZWQgc2lnbmFsIGhhbmRsZXJzLiAgSXQgYWxzbworICAgICAgICAgICAgIyBjbG9zZXMgYW55IG9wZW4gZmlsZSBkZXNjcmlwdG9ycy4gIFVzaW5nIGV4aXQoKSBtYXkgY2F1c2UgYWxsIHN0ZGlvCisgICAgICAgICAgICAjIHN0cmVhbXMgdG8gYmUgZmx1c2hlZCB0d2ljZSBhbmQgYW55IHRlbXBvcmFyeSBmaWxlcyBtYXkgYmUgdW5leHBlY3RlZGx5CisgICAgICAgICAgICAjIHJlbW92ZWQuICBJdCdzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0aGF0IGNoaWxkIGJyYW5jaGVzIG9mIGEgZm9yaygpCisgICAgICAgICAgICAjIGFuZCB0aGUgcGFyZW50IGJyYW5jaChlcykgb2YgYSBkYWVtb24gdXNlIF9leGl0KCkuCiAgICAgICAgICAgICBvcy5fZXhpdCgwKQogICAgIGVsc2U6Ci0gICAgICAgICMgZXhpdCgpIG9yIF9leGl0KCk/Ci0gICAgICAgICMgX2V4aXQgaXMgbGlrZSBleGl0KCksIGJ1dCBpdCBkb2Vzbid0IGNhbGwgYW55IGZ1bmN0aW9ucyByZWdpc3RlcmVkCi0gICAgICAgICMgd2l0aCBhdGV4aXQgKGFuZCBvbl9leGl0KSBvciBhbnkgcmVnaXN0ZXJlZCBzaWduYWwgaGFuZGxlcnMuICBJdCBhbHNvCi0gICAgICAgICMgY2xvc2VzIGFueSBvcGVuIGZpbGUgZGVzY3JpcHRvcnMuICBVc2luZyBleGl0KCkgbWF5IGNhdXNlIGFsbCBzdGRpbwotICAgICAgICAjIHN0cmVhbXMgdG8gYmUgZmx1c2hlZCB0d2ljZSBhbmQgYW55IHRlbXBvcmFyeSBmaWxlcyBtYXkgYmUgdW5leHBlY3RlZGx5Ci0gICAgICAgICMgcmVtb3ZlZC4gIEl0J3MgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRoYXQgY2hpbGQgYnJhbmNoZXMgb2YgYSBmb3JrKCkKLSAgICAgICAgIyBhbmQgdGhlIHBhcmVudCBicmFuY2goZXMpIG9mIGEgZGFlbW9uIHVzZSBfZXhpdCgpLgorICAgICAgICBvcy53YWl0cGlkKHBpZCwgMCkKICAgICAgICAgcmV0dXJuCiAKLSAgICAjIENsb3NlIGFsbCBvcGVuIGZpbGUgZGVzY3JpcHRvcnMuICBUaGlzIHByZXZlbnRzIHRoZSBjaGlsZCBmcm9tIGtlZXBpbmcKLSAgICAjIG9wZW4gYW55IGZpbGUgZGVzY3JpcHRvcnMgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudC4gIFRoZXJlIGlzIGEgdmFyaWV0eQotICAgICMgb2YgbWV0aG9kcyB0byBhY2NvbXBsaXNoIHRoaXMgdGFzay4gIFRocmVlIGFyZSBsaXN0ZWQgYmVsb3cuCi0gICAgIwotICAgICMgVHJ5IHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgU0NfT1BFTl9NQVgsIHRvIG9idGFpbiB0aGUgbWF4aW11bQotICAgICMgbnVtYmVyIG9mIG9wZW4gZmlsZSBkZXNjcmlwdG9ycyB0byBjbG9zZS4gIElmIGl0IGRvZXNuJ3QgZXhpc3QsIHVzZQotICAgICMgdGhlIGRlZmF1bHQgdmFsdWUgKGNvbmZpZ3VyYWJsZSkuCi0gICAgIwotICAgICMgdHJ5OgotICAgICMgICAgIG1heGZkID0gb3Muc3lzY29uZigiU0NfT1BFTl9NQVgiKQotICAgICMgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgVmFsdWVFcnJvcik6Ci0gICAgIyAgICAgbWF4ZmQgPSBNQVhGRAotICAgICMKLSAgICAjIE9SCi0gICAgIwotICAgICMgaWYgKG9zLnN5c2NvbmZfbmFtZXMuaGFzX2tleSgiU0NfT1BFTl9NQVgiKSk6Ci0gICAgIyAgICAgbWF4ZmQgPSBvcy5zeXNjb25mKCJTQ19PUEVOX01BWCIpCi0gICAgIyBlbHNlOgotICAgICMgICAgIG1heGZkID0gTUFYRkQKLSAgICAjCi0gICAgIyBPUgotICAgICMKLSAgICAjIFVzZSB0aGUgZ2V0cmxpbWl0IG1ldGhvZCB0byByZXRyaWV2ZSB0aGUgbWF4aW11bSBmaWxlIGRlc2NyaXB0b3IgbnVtYmVyCi0gICAgIyB0aGF0IGNhbiBiZSBvcGVuZWQgYnkgdGhpcyBwcm9jZXNzLiAgSWYgdGhlcmUgaXMgbm8gbGltaXQgb24gdGhlCi0gICAgIyByZXNvdXJjZSwgdXNlIHRoZSBkZWZhdWx0IHZhbHVlLgotICAgICMKLSAgICBpbXBvcnQgcmVzb3VyY2UgICAgICAgICAgICAgIyBSZXNvdXJjZSB1c2FnZSBpbmZvcm1hdGlvbi4KLSAgICBtYXhmZCA9IHJlc291cmNlLmdldHJsaW1pdChyZXNvdXJjZS5STElNSVRfTk9GSUxFKVsxXQotICAgIGlmIChtYXhmZCA9PSByZXNvdXJjZS5STElNX0lORklOSVRZKToKLSAgICAgICAgbWF4ZmQgPSBNQVhGRAotICAKLSAgICAjIEl0ZXJhdGUgdGhyb3VnaCBhbmQgY2xvc2UgYWxsIGZpbGUgZGVzY3JpcHRvcnMuCi0jICAgIGZvciBmZCBpbiByYW5nZSgwLCBtYXhmZCk6Ci0jICAgICAgICB0cnk6Ci0jICAgICAgICAgICAgb3MuY2xvc2UoZmQpCi0jICAgICAgICBleGNlcHQgT1NFcnJvcjogICAgICAgICMgRVJST1IsIGZkIHdhc24ndCBvcGVuIHRvIGJlZ2luIHdpdGggKGlnbm9yZWQpCi0jICAgICAgICAgICAgcGFzcworICAgICMgVGhlIHNlY29uZCBjaGlsZC4KIAotICAgICMgUmVkaXJlY3QgdGhlIHN0YW5kYXJkIEkvTyBmaWxlIGRlc2NyaXB0b3JzIHRvIHRoZSBzcGVjaWZpZWQgZmlsZS4gIFNpbmNlCi0gICAgIyB0aGUgZGFlbW9uIGhhcyBubyBjb250cm9sbGluZyB0ZXJtaW5hbCwgbW9zdCBkYWVtb25zIHJlZGlyZWN0IHN0ZGluLAotICAgICMgc3Rkb3V0LCBhbmQgc3RkZXJyIHRvIC9kZXYvbnVsbC4gIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHNpZGUtZWZmZWN0cwotICAgICMgZnJvbSByZWFkcyBhbmQgd3JpdGVzIHRvIHRoZSBzdGFuZGFyZCBJL08gZmlsZSBkZXNjcmlwdG9ycy4KLQotICAgICMgVGhpcyBjYWxsIHRvIG9wZW4gaXMgZ3VhcmFudGVlZCB0byByZXR1cm4gdGhlIGxvd2VzdCBmaWxlIGRlc2NyaXB0b3IsCi0gICAgIyB3aGljaCB3aWxsIGJlIDAgKHN0ZGluKSwgc2luY2UgaXQgd2FzIGNsb3NlZCBhYm92ZS4KLSMgICAgb3Mub3BlbihSRURJUkVDVF9UTywgb3MuT19SRFdSKSAgICAjIHN0YW5kYXJkIGlucHV0ICgwKQotCi0gICAgIyBEdXBsaWNhdGUgc3RhbmRhcmQgaW5wdXQgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBzdGFuZGFyZCBlcnJvci4KLSMgICAgb3MuZHVwMigwLCAxKSAgICAgICAgICAgICAgICAgICAgICAjIHN0YW5kYXJkIG91dHB1dCAoMSkKLSMgICAgb3MuZHVwMigwLCAyKSAgICAgICAgICAgICAgICAgICAgICAjIHN0YW5kYXJkIGVycm9yICgyKQotCi0KKyAgICAjIFJlcGxhY2Ugc3RhbmRhcmQgZmRzIHdpdGggb3VyIG93bgogICAgIHNpID0gb3BlbignL2Rldi9udWxsJywgJ3InKQotICAgIHNvID0gb3Blbihsb2dmaWxlLCAndycpCi0gICAgc2UgPSBzbwotCi0KLSAgICAjIFJlcGxhY2UgdGhvc2UgZmRzIHdpdGggb3VyIG93bgogICAgIG9zLmR1cDIoc2kuZmlsZW5vKCksIHN5cy5zdGRpbi5maWxlbm8oKSkKLSAgICBvcy5kdXAyKHNvLmZpbGVubygpLCBzeXMuc3Rkb3V0LmZpbGVubygpKQotICAgIG9zLmR1cDIoc2UuZmlsZW5vKCksIHN5cy5zdGRlcnIuZmlsZW5vKCkpCiAKLSAgICBmdW5jdGlvbigpCisgICAgdHJ5OgorICAgICAgICBzbyA9IG9wZW4obG9nZmlsZSwgJ2ErJykKKyAgICAgICAgc2UgPSBzbworICAgICAgICBvcy5kdXAyKHNvLmZpbGVubygpLCBzeXMuc3Rkb3V0LmZpbGVubygpKQorICAgICAgICBvcy5kdXAyKHNlLmZpbGVubygpLCBzeXMuc3RkZXJyLmZpbGVubygpKQorICAgIGV4Y2VwdCBpby5VbnN1cHBvcnRlZE9wZXJhdGlvbjoKKyAgICAgICAgc3lzLnN0ZG91dCA9IG9wZW4obG9nZmlsZSwgJ2ErJykKKyAgICAgICAgc3lzLnN0ZGVyciA9IHN5cy5zdGRvdXQKIAotICAgIG9zLl9leGl0KDApCisgICAgdHJ5OgorICAgICAgICBmdW5jdGlvbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKKyAgICBmaW5hbGx5OgorICAgICAgICBiYi5ldmVudC5wcmludF91aV9xdWV1ZSgpCisgICAgICAgIG9zLl9leGl0KDApCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZGF0YS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9kYXRhLnB5CmluZGV4IDEzNGFmYWEuLjgwYTc4NzkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9kYXRhLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9kYXRhLnB5CkBAIC0yOTAsNyArMjkwLDcgQEAKICAgICAgICAgICAgIHJldHVybiBkZXBzLCB2YWx1ZQogICAgICAgICB2YXJmbGFncyA9IGQuZ2V0VmFyRmxhZ3Moa2V5LCBbInZhcmRlcHMiLCAidmFyZGVwdmFsdWUiLCAidmFyZGVwc2V4Y2x1ZGUiLCAiZXhwb3J0cyIsICJwb3N0ZnVuY3MiLCAicHJlZnVuY3MiLCAibGluZW5vIiwgImZpbGVuYW1lIl0pIG9yIHt9CiAgICAgICAgIHZhcmRlcHMgPSB2YXJmbGFncy5nZXQoInZhcmRlcHMiKQotICAgICAgICB2YWx1ZSA9IGQuZ2V0VmFyKGtleSwgRmFsc2UpCisgICAgICAgIHZhbHVlID0gZC5nZXRWYXJGbGFnKGtleSwgIl9jb250ZW50IiwgRmFsc2UpCiAKICAgICAgICAgZGVmIGhhbmRsZV9jb250YWlucyh2YWx1ZSwgY29udGFpbnMsIGQpOgogICAgICAgICAgICAgbmV3dmFsdWUgPSAiIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2RhdGFfc21hcnQucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZGF0YV9zbWFydC5weQppbmRleCA3ZGMxYzY4Li43YjA5YWY1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZGF0YV9zbWFydC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZGF0YV9zbWFydC5weQpAQCAtMzksNyArMzksNyBAQAogbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuRGF0YSIpCiAKIF9fc2V0dmFyX2tleXdvcmRfXyA9IFsiX2FwcGVuZCIsICJfcHJlcGVuZCIsICJfcmVtb3ZlIl0KLV9fc2V0dmFyX3JlZ2V4cF9fID0gcmUuY29tcGlsZSgnKD9QPGJhc2U+Lio/KSg/UDxrZXl3b3JkPl9hcHBlbmR8X3ByZXBlbmR8X3JlbW92ZSkoXyg/UDxhZGQ+LiopKT8kJykKK19fc2V0dmFyX3JlZ2V4cF9fID0gcmUuY29tcGlsZSgnKD9QPGJhc2U+Lio/KSg/UDxrZXl3b3JkPl9hcHBlbmR8X3ByZXBlbmR8X3JlbW92ZSkoXyg/UDxhZGQ+W15BLVpdKikpPyQnKQogX19leHBhbmRfdmFyX3JlZ2V4cF9fID0gcmUuY29tcGlsZShyIlwke1tee31AXG5cdCA6XSt9IikKIF9fZXhwYW5kX3B5dGhvbl9yZWdleHBfXyA9IHJlLmNvbXBpbGUociJcJHtALis/fSIpCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9ldmVudC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9ldmVudC5weQppbmRleCA2ZDg0OTNiLi41MjA3MmI1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZXZlbnQucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2V2ZW50LnB5CkBAIC0xNDksMjMgKzE0OSwzNCBAQAogCiAgICAgICAgICMgRmlyc3QgY2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYW55IHByb3BlciBtZXNzYWdlcwogICAgICAgICBtc2dwcmludCA9IEZhbHNlCisgICAgICAgIG1zZ2VycnMgPSBGYWxzZQorCisgICAgICAgICMgU2hvdWxkIHdlIHByaW50IHRvIHN0ZGVycj8KKyAgICAgICAgZm9yIGV2ZW50IGluIHVpX3F1ZXVlWzpdOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgbG9nZ2luZy5Mb2dSZWNvcmQpIGFuZCBldmVudC5sZXZlbG5vID49IGxvZ2dpbmcuV0FSTklORzoKKyAgICAgICAgICAgICAgICBtc2dlcnJzID0gVHJ1ZQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgbXNnZXJyczoKKyAgICAgICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKHN0ZGVycikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKHN0ZG91dCkKKwogICAgICAgICBmb3IgZXZlbnQgaW4gdWlfcXVldWVbOl06CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBsb2dnaW5nLkxvZ1JlY29yZCk6CiAgICAgICAgICAgICAgICAgaWYgZXZlbnQubGV2ZWxubyA+IGxvZ2dpbmcuREVCVUc6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGV2ZW50LmxldmVsbm8gPj0gbG9nZ2luZy5XQVJOSU5HOgotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoc3RkZXJyKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoc3Rkb3V0KQogICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaGFuZGxlKGV2ZW50KQogICAgICAgICAgICAgICAgICAgICBtc2dwcmludCA9IFRydWUKLSAgICAgICAgaWYgbXNncHJpbnQ6Ci0gICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAjIE5vcGUsIHNvIGp1c3QgcHJpbnQgYWxsIG9mIHRoZSBtZXNzYWdlcyB3ZSBoYXZlIChpbmNsdWRpbmcgZGVidWcgbWVzc2FnZXMpCi0gICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKHN0ZG91dCkKLSAgICAgICAgZm9yIGV2ZW50IGluIHVpX3F1ZXVlWzpdOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgbG9nZ2luZy5Mb2dSZWNvcmQpOgotICAgICAgICAgICAgICAgIGxvZ2dlci5oYW5kbGUoZXZlbnQpCisgICAgICAgIGlmIG5vdCBtc2dwcmludDoKKyAgICAgICAgICAgIGZvciBldmVudCBpbiB1aV9xdWV1ZVs6XToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBsb2dnaW5nLkxvZ1JlY29yZCk6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5oYW5kbGUoZXZlbnQpCisgICAgICAgIGlmIG1zZ2VycnM6CisgICAgICAgICAgICBsb2dnZXIucmVtb3ZlSGFuZGxlcihzdGRlcnIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIucmVtb3ZlSGFuZGxlcihzdGRvdXQpCiAKIGRlZiBmaXJlX3VpX2hhbmRsZXJzKGV2ZW50LCBkKToKICAgICBnbG9iYWwgX3RocmVhZF9sb2NrCkBAIC0yMTIsNiArMjIzLDEyIEBACiAgICAgaWYgd29ya2VyX2ZpcmU6CiAgICAgICAgIHdvcmtlcl9maXJlKGV2ZW50LCBkKQogICAgIGVsc2U6CisgICAgICAgICMgSWYgbWVzc2FnZXMgaGF2ZSBiZWVuIHF1ZXVlZCB1cCwgY2xlYXIgdGhlIHF1ZXVlCisgICAgICAgIGdsb2JhbCBfdWlyZWFkeSwgdWlfcXVldWUKKyAgICAgICAgaWYgX3VpcmVhZHkgYW5kIHVpX3F1ZXVlOgorICAgICAgICAgICAgZm9yIHF1ZXVlX2V2ZW50IGluIHVpX3F1ZXVlOgorICAgICAgICAgICAgICAgIGZpcmVfdWlfaGFuZGxlcnMocXVldWVfZXZlbnQsIGQpCisgICAgICAgICAgICB1aV9xdWV1ZSA9IFtdCiAgICAgICAgIGZpcmVfdWlfaGFuZGxlcnMoZXZlbnQsIGQpCiAKIGRlZiBmaXJlX2Zyb21fd29ya2VyKGV2ZW50LCBkKToKQEAgLTI2NCw2ICsyODEsMTEgQEAKIGRlZiByZW1vdmUobmFtZSwgaGFuZGxlcik6CiAgICAgIiIiUmVtb3ZlIGFuIEV2ZW50IGhhbmRsZXIiIiIKICAgICBfaGFuZGxlcnMucG9wKG5hbWUpCisgICAgaWYgbmFtZSBpbiBfY2F0Y2hhbGxfaGFuZGxlcnM6CisgICAgICAgIF9jYXRjaGFsbF9oYW5kbGVycy5wb3AobmFtZSkKKyAgICBmb3IgZXZlbnQgaW4gX2V2ZW50X2hhbmRsZXJfbWFwLmtleXMoKToKKyAgICAgICAgaWYgbmFtZSBpbiBfZXZlbnRfaGFuZGxlcl9tYXBbZXZlbnRdOgorICAgICAgICAgICAgX2V2ZW50X2hhbmRsZXJfbWFwW2V2ZW50XS5wb3AobmFtZSkKIAogZGVmIGdldF9oYW5kbGVycygpOgogICAgIHJldHVybiBfaGFuZGxlcnMKQEAgLTI3NywyMCArMjk5LDI4IEBACiAgICAgX2V2ZW50ZmlsdGVyID0gZnVuYwogCiBkZWYgcmVnaXN0ZXJfVUlIaGFuZGxlcihoYW5kbGVyLCBtYWludWk9RmFsc2UpOgotICAgIGlmIG1haW51aToKLSAgICAgICAgZ2xvYmFsIF91aXJlYWR5Ci0gICAgICAgIF91aXJlYWR5ID0gVHJ1ZQogICAgIGJiLmV2ZW50Ll91aV9oYW5kbGVyX3NlcSA9IGJiLmV2ZW50Ll91aV9oYW5kbGVyX3NlcSArIDEKICAgICBfdWlfaGFuZGxlcnNbX3VpX2hhbmRsZXJfc2VxXSA9IGhhbmRsZXIKICAgICBsZXZlbCwgZGVidWdfZG9tYWlucyA9IGJiLm1zZy5jb25zdHJ1Y3RMb2dPcHRpb25zKCkKICAgICBfdWlfbG9nZmlsdGVyc1tfdWlfaGFuZGxlcl9zZXFdID0gVUlFdmVudEZpbHRlcihsZXZlbCwgZGVidWdfZG9tYWlucykKKyAgICBpZiBtYWludWk6CisgICAgICAgIGdsb2JhbCBfdWlyZWFkeQorICAgICAgICBfdWlyZWFkeSA9IF91aV9oYW5kbGVyX3NlcQogICAgIHJldHVybiBfdWlfaGFuZGxlcl9zZXEKIAotZGVmIHVucmVnaXN0ZXJfVUlIaGFuZGxlcihoYW5kbGVyTnVtKToKK2RlZiB1bnJlZ2lzdGVyX1VJSGhhbmRsZXIoaGFuZGxlck51bSwgbWFpbnVpPUZhbHNlKToKKyAgICBpZiBtYWludWk6CisgICAgICAgIGdsb2JhbCBfdWlyZWFkeQorICAgICAgICBfdWlyZWFkeSA9IEZhbHNlCiAgICAgaWYgaGFuZGxlck51bSBpbiBfdWlfaGFuZGxlcnM6CiAgICAgICAgIGRlbCBfdWlfaGFuZGxlcnNbaGFuZGxlck51bV0KICAgICByZXR1cm4KIAorZGVmIGdldF91aWhhbmRsZXIoKToKKyAgICBpZiBfdWlyZWFkeSBpcyBGYWxzZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICByZXR1cm4gX3VpcmVhZHkKKwogIyBDbGFzcyB0byBhbGxvdyBmaWx0ZXJpbmcgb2YgZXZlbnRzIGFuZCBzcGVjaWZpYyBmaWx0ZXJpbmcgb2YgTG9nUmVjb3JkcyAqYmVmb3JlKiB3ZSBwdXQgdGhlbSBvdmVyIHRoZSBJUEMKIGNsYXNzIFVJRXZlbnRGaWx0ZXIob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgbGV2ZWwsIGRlYnVnX2RvbWFpbnMpOgpAQCAtMzUzLDYgKzM4MywxMiBAQAogY2xhc3MgQ29uZmlnUGFyc2VkKEV2ZW50KToKICAgICAiIiJDb25maWd1cmF0aW9uIFBhcnNpbmcgQ29tcGxldGUiIiIKIAorY2xhc3MgTXVsdGlDb25maWdQYXJzZWQoRXZlbnQpOgorICAgICIiIk11bHRpLUNvbmZpZyBQYXJzaW5nIENvbXBsZXRlIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1jZGF0YSk6CisgICAgICAgIHNlbGYubWNkYXRhID0gbWNkYXRhCisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisKIGNsYXNzIFJlY2lwZUV2ZW50KEV2ZW50KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgZm4pOgogICAgICAgICBzZWxmLmZuID0gZm4KQEAgLTQ5Niw2ICs1MzIsMjggQEAKICAgICBkZWYgaXNSdW50aW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fcnVudGltZQogCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIG1zZyA9ICcnCisgICAgICAgIGlmIHNlbGYuX3J1bnRpbWU6CisgICAgICAgICAgICByID0gIlIiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByID0gIiIKKworICAgICAgICBleHRyYSA9ICcnCisgICAgICAgIGlmIG5vdCBzZWxmLl9yZWFzb25zOgorICAgICAgICAgICAgaWYgc2VsZi5fY2xvc2VfbWF0Y2hlczoKKyAgICAgICAgICAgICAgICBleHRyYSA9ICIuIENsb3NlIG1hdGNoZXM6XG4gICVzIiAlICdcbiAgJy5qb2luKHNlbGYuX2Nsb3NlX21hdGNoZXMpCisKKyAgICAgICAgaWYgc2VsZi5fZGVwZW5kZWVzOgorICAgICAgICAgICAgbXNnID0gIk5vdGhpbmcgJXNQUk9WSURFUyAnJXMnIChidXQgJXMgJXNERVBFTkRTIG9uIG9yIG90aGVyd2lzZSByZXF1aXJlcyBpdCklcyIgJSAociwgc2VsZi5faXRlbSwgIiwgIi5qb2luKHNlbGYuX2RlcGVuZGVlcyksIHIsIGV4dHJhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnID0gIk5vdGhpbmcgJXNQUk9WSURFUyAnJXMnJXMiICUgKHIsIHNlbGYuX2l0ZW0sIGV4dHJhKQorICAgICAgICBpZiBzZWxmLl9yZWFzb25zOgorICAgICAgICAgICAgZm9yIHJlYXNvbiBpbiBzZWxmLl9yZWFzb25zOgorICAgICAgICAgICAgICAgIG1zZyArPSAnXG4nICsgcmVhc29uCisgICAgICAgIHJldHVybiBtc2cKKworCiBjbGFzcyBNdWx0aXBsZVByb3ZpZGVycyhFdmVudCk6CiAgICAgIiIiTXVsdGlwbGUgUHJvdmlkZXJzIiIiCiAKQEAgLTUyMyw2ICs1ODEsMTYgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9jYW5kaWRhdGVzCiAKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgbXNnID0gIk11bHRpcGxlIHByb3ZpZGVycyBhcmUgYXZhaWxhYmxlIGZvciAlcyVzICglcykiICUgKHNlbGYuX2lzX3J1bnRpbWUgYW5kICJydW50aW1lICIgb3IgIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCAiLmpvaW4oc2VsZi5fY2FuZGlkYXRlcykpCisgICAgICAgIHJ0aW1lID0gIiIKKyAgICAgICAgaWYgc2VsZi5faXNfcnVudGltZToKKyAgICAgICAgICAgIHJ0aW1lID0gIlIiCisgICAgICAgIG1zZyArPSAiXG5Db25zaWRlciBkZWZpbmluZyBhIFBSRUZFUlJFRF8lc1BST1ZJREVSIGVudHJ5IHRvIG1hdGNoICVzIiAlIChydGltZSwgc2VsZi5faXRlbSkKKyAgICAgICAgcmV0dXJuIG1zZworCiBjbGFzcyBQYXJzZVN0YXJ0ZWQoT3BlcmF0aW9uU3RhcnRlZCk6CiAgICAgIiIiUmVjaXBlIHBhcnNpbmcgZm9yIHRoZSBydW5xdWV1ZSBoYXMgYmVndW4iIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgdG90YWwpOgpAQCAtNjE2LDE0ICs2ODQsNiBAQAogICAgICAgICBzZWxmLl9wYXR0ZXJuID0gcGF0dGVybgogICAgICAgICBzZWxmLl9tYXRjaGVzID0gbWF0Y2hlcwogCi1jbGFzcyBDb3JlQmFzZUZpbGVzRm91bmQoRXZlbnQpOgotICAgICIiIgotICAgIEV2ZW50IHdoZW4gYSBsaXN0IG9mIGFwcHJvcHJpYXRlIGNvbmZpZyBmaWxlcyBoYXMgYmVlbiBnZW5lcmF0ZWQKLSAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aHMpOgotICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLl9wYXRocyA9IHBhdGhzCi0KIGNsYXNzIENvbmZpZ0ZpbGVzRm91bmQoRXZlbnQpOgogICAgICIiIgogICAgIEV2ZW50IHdoZW4gYSBsaXN0IG9mIGFwcHJvcHJpYXRlIGNvbmZpZyBmaWxlcyBoYXMgYmVlbiBnZW5lcmF0ZWQKQEAgLTY5NCwxOSArNzU0LDYgQEAKICAgICAgICAgcmVjb3JkLnRhc2twaWQgPSB3b3JrZXJfcGlkCiAgICAgICAgIHJldHVybiBUcnVlCiAKLWNsYXNzIFJlcXVlc3RQYWNrYWdlSW5mbyhFdmVudCk6Ci0gICAgIiIiCi0gICAgRXZlbnQgdG8gcmVxdWVzdCBwYWNrYWdlIGluZm9ybWF0aW9uCi0gICAgIiIiCi0KLWNsYXNzIFBhY2thZ2VJbmZvKEV2ZW50KToKLSAgICAiIiIKLSAgICBQYWNrYWdlIGluZm9ybWF0aW9uIGZvciBHVUkKLSAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGtnaW5mb2xpc3QpOgotICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLl9wa2dpbmZvbGlzdCA9IHBrZ2luZm9saXN0Ci0KIGNsYXNzIE1ldGFkYXRhRXZlbnQoRXZlbnQpOgogICAgICIiIgogICAgIEdlbmVyaWMgZXZlbnQgdGhhdCB0YXJnZXQgZm9yIE9FLUNvcmUgY2xhc3NlcwpAQCAtNzg0LDMgKzgzMSwxMCBAQAogICAgIEV2ZW50IHRvIGluZGljYXRlIG5ldHdvcmsgdGVzdCBoYXMgZmFpbGVkCiAgICAgIiIiCiAKK2NsYXNzIEZpbmRTaWdJbmZvUmVzdWx0KEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB0byByZXR1cm4gcmVzdWx0cyBmcm9tIGZpbmRTaWdJbmZvIGNvbW1hbmQKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVzdWx0KToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5yZXN1bHQgPSByZXN1bHQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvX19pbml0X18ucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL19faW5pdF9fLnB5CmluZGV4IGI4NTNkYTMuLmY3MGYxYjUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvX19pbml0X18ucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9fX2luaXRfXy5weQpAQCAtMzksNiArMzksNyBAQAogaW1wb3J0IGJiLnBlcnNpc3RfZGF0YSwgYmIudXRpbHMKIGltcG9ydCBiYi5jaGVja3N1bQogaW1wb3J0IGJiLnByb2Nlc3MKK2ltcG9ydCBiYi5ldmVudAogCiBfX3ZlcnNpb25fXyA9ICIyIgogX2NoZWNrc3VtX2NhY2hlID0gYmIuY2hlY2tzdW0uRmlsZUNoZWNrc3VtQ2FjaGUoKQpAQCAtNDgsMTEgKzQ5LDExIEBACiBjbGFzcyBCQkZldGNoRXhjZXB0aW9uKEV4Y2VwdGlvbik6CiAgICAgIiIiQ2xhc3MgYWxsIGZldGNoIGV4Y2VwdGlvbnMgaW5oZXJpdCBmcm9tIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2UpOgotICAgICAgICAgc2VsZi5tc2cgPSBtZXNzYWdlCi0gICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbWVzc2FnZSkKKyAgICAgICAgc2VsZi5tc2cgPSBtZXNzYWdlCisgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBtZXNzYWdlKQogCiAgICAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgICAgICByZXR1cm4gc2VsZi5tc2cKKyAgICAgICAgcmV0dXJuIHNlbGYubXNnCiAKIGNsYXNzIFVudHJ1c3RlZFVybChCQkZldGNoRXhjZXB0aW9uKToKICAgICAiIiJFeGNlcHRpb24gcmFpc2VkIHdoZW4gZW5jb3VudGVyaW5nIGEgaG9zdCBub3QgbGlzdGVkIGluIEJCX0FMTE9XRURfTkVUV09SS1MiIiIKQEAgLTY4LDI0ICs2OSwyNCBAQAogY2xhc3MgTWFsZm9ybWVkVXJsKEJCRmV0Y2hFeGNlcHRpb24pOgogICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBlbmNvdW50ZXJpbmcgYW4gaW52YWxpZCB1cmwiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsLCBtZXNzYWdlPScnKToKLSAgICAgICAgIGlmIG1lc3NhZ2U6Ci0gICAgICAgICAgICAgbXNnID0gbWVzc2FnZQotICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICBtc2cgPSAiVGhlIFVSTDogJyVzJyBpcyBpbnZhbGlkIGFuZCBjYW5ub3QgYmUgaW50ZXJwcmV0ZWQiICUgdXJsCi0gICAgICAgICBzZWxmLnVybCA9IHVybAotICAgICAgICAgQkJGZXRjaEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBtc2cpCi0gICAgICAgICBzZWxmLmFyZ3MgPSAodXJsLCkKKyAgICAgICAgaWYgbWVzc2FnZToKKyAgICAgICAgICAgIG1zZyA9IG1lc3NhZ2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZyA9ICJUaGUgVVJMOiAnJXMnIGlzIGludmFsaWQgYW5kIGNhbm5vdCBiZSBpbnRlcnByZXRlZCIgJSB1cmwKKyAgICAgICAgc2VsZi51cmwgPSB1cmwKKyAgICAgICAgQkJGZXRjaEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBtc2cpCisgICAgICAgIHNlbGYuYXJncyA9ICh1cmwsKQogCiBjbGFzcyBGZXRjaEVycm9yKEJCRmV0Y2hFeGNlcHRpb24pOgogICAgICIiIkdlbmVyYWwgZmV0Y2hlciBleGNlcHRpb24gd2hlbiBzb21ldGhpbmcgaGFwcGVucyBpbmNvcnJlY3RseSIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlLCB1cmwgPSBOb25lKToKLSAgICAgICAgIGlmIHVybDoKKyAgICAgICAgaWYgdXJsOgogICAgICAgICAgICAgbXNnID0gIkZldGNoZXIgZmFpbHVyZSBmb3IgVVJMOiAnJXMnLiAlcyIgJSAodXJsLCBtZXNzYWdlKQotICAgICAgICAgZWxzZToKKyAgICAgICAgZWxzZToKICAgICAgICAgICAgIG1zZyA9ICJGZXRjaGVyIGZhaWx1cmU6ICVzIiAlIG1lc3NhZ2UKLSAgICAgICAgIHNlbGYudXJsID0gdXJsCi0gICAgICAgICBCQkZldGNoRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIG1zZykKLSAgICAgICAgIHNlbGYuYXJncyA9IChtZXNzYWdlLCB1cmwpCisgICAgICAgIHNlbGYudXJsID0gdXJsCisgICAgICAgIEJCRmV0Y2hFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbXNnKQorICAgICAgICBzZWxmLmFyZ3MgPSAobWVzc2FnZSwgdXJsKQogCiBjbGFzcyBDaGVja3N1bUVycm9yKEZldGNoRXJyb3IpOgogICAgICIiIkV4Y2VwdGlvbiB3aGVuIG1pc21hdGNoZWQgY2hlY2tzdW0gZW5jb3VudGVyZWQiIiIKQEAgLTk5LDQ5ICsxMDAsNTYgQEAKIGNsYXNzIFVucGFja0Vycm9yKEJCRmV0Y2hFeGNlcHRpb24pOgogICAgICIiIkdlbmVyYWwgZmV0Y2hlciBleGNlcHRpb24gd2hlbiBzb21ldGhpbmcgaGFwcGVucyBpbmNvcnJlY3RseSB3aGVuIHVucGFja2luZyIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlLCB1cmwpOgotICAgICAgICAgbXNnID0gIlVucGFjayBmYWlsdXJlIGZvciBVUkw6ICclcycuICVzIiAlICh1cmwsIG1lc3NhZ2UpCi0gICAgICAgICBzZWxmLnVybCA9IHVybAotICAgICAgICAgQkJGZXRjaEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBtc2cpCi0gICAgICAgICBzZWxmLmFyZ3MgPSAobWVzc2FnZSwgdXJsKQorICAgICAgICBtc2cgPSAiVW5wYWNrIGZhaWx1cmUgZm9yIFVSTDogJyVzJy4gJXMiICUgKHVybCwgbWVzc2FnZSkKKyAgICAgICAgc2VsZi51cmwgPSB1cmwKKyAgICAgICAgQkJGZXRjaEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBtc2cpCisgICAgICAgIHNlbGYuYXJncyA9IChtZXNzYWdlLCB1cmwpCiAKIGNsYXNzIE5vTWV0aG9kRXJyb3IoQkJGZXRjaEV4Y2VwdGlvbik6CiAgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB3aGVuIHRoZXJlIGlzIG5vIG1ldGhvZCB0byBvYnRhaW4gYSBzdXBwbGllZCB1cmwgb3Igc2V0IG9mIHVybHMiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsKToKLSAgICAgICAgIG1zZyA9ICJDb3VsZCBub3QgZmluZCBhIGZldGNoZXIgd2hpY2ggc3VwcG9ydHMgdGhlIFVSTDogJyVzJyIgJSB1cmwKLSAgICAgICAgIHNlbGYudXJsID0gdXJsCi0gICAgICAgICBCQkZldGNoRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIG1zZykKLSAgICAgICAgIHNlbGYuYXJncyA9ICh1cmwsKQorICAgICAgICBtc2cgPSAiQ291bGQgbm90IGZpbmQgYSBmZXRjaGVyIHdoaWNoIHN1cHBvcnRzIHRoZSBVUkw6ICclcyciICUgdXJsCisgICAgICAgIHNlbGYudXJsID0gdXJsCisgICAgICAgIEJCRmV0Y2hFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbXNnKQorICAgICAgICBzZWxmLmFyZ3MgPSAodXJsLCkKIAogY2xhc3MgTWlzc2luZ1BhcmFtZXRlckVycm9yKEJCRmV0Y2hFeGNlcHRpb24pOgogICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBhIGZldGNoIG1ldGhvZCBpcyBtaXNzaW5nIGEgY3JpdGljYWwgcGFyYW1ldGVyIGluIHRoZSB1cmwiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWlzc2luZywgdXJsKToKLSAgICAgICAgIG1zZyA9ICJVUkw6ICclcycgaXMgbWlzc2luZyB0aGUgcmVxdWlyZWQgcGFyYW1ldGVyICclcyciICUgKHVybCwgbWlzc2luZykKLSAgICAgICAgIHNlbGYudXJsID0gdXJsCi0gICAgICAgICBzZWxmLm1pc3NpbmcgPSBtaXNzaW5nCi0gICAgICAgICBCQkZldGNoRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIG1zZykKLSAgICAgICAgIHNlbGYuYXJncyA9IChtaXNzaW5nLCB1cmwpCisgICAgICAgIG1zZyA9ICJVUkw6ICclcycgaXMgbWlzc2luZyB0aGUgcmVxdWlyZWQgcGFyYW1ldGVyICclcyciICUgKHVybCwgbWlzc2luZykKKyAgICAgICAgc2VsZi51cmwgPSB1cmwKKyAgICAgICAgc2VsZi5taXNzaW5nID0gbWlzc2luZworICAgICAgICBCQkZldGNoRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIG1zZykKKyAgICAgICAgc2VsZi5hcmdzID0gKG1pc3NpbmcsIHVybCkKIAogY2xhc3MgUGFyYW1ldGVyRXJyb3IoQkJGZXRjaEV4Y2VwdGlvbik6CiAgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgdXJsIGNhbm5vdCBiZSBwcm9jY2Vzc2VkIGR1ZSB0byBpbnZhbGlkIHBhcmFtZXRlcnMuIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2UsIHVybCk6Ci0gICAgICAgICBtc2cgPSAiVVJMOiAnJXMnIGhhcyBpbnZhbGlkIHBhcmFtZXRlcnMuICVzIiAlICh1cmwsIG1lc3NhZ2UpCi0gICAgICAgICBzZWxmLnVybCA9IHVybAotICAgICAgICAgQkJGZXRjaEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBtc2cpCi0gICAgICAgICBzZWxmLmFyZ3MgPSAobWVzc2FnZSwgdXJsKQorICAgICAgICBtc2cgPSAiVVJMOiAnJXMnIGhhcyBpbnZhbGlkIHBhcmFtZXRlcnMuICVzIiAlICh1cmwsIG1lc3NhZ2UpCisgICAgICAgIHNlbGYudXJsID0gdXJsCisgICAgICAgIEJCRmV0Y2hFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbXNnKQorICAgICAgICBzZWxmLmFyZ3MgPSAobWVzc2FnZSwgdXJsKQogCiBjbGFzcyBOZXR3b3JrQWNjZXNzKEJCRmV0Y2hFeGNlcHRpb24pOgogICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBuZXR3b3JrIGFjY2VzcyBpcyBkaXNhYmxlZCBidXQgaXQgaXMgcmVxdWlyZWQuIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybCwgY21kKToKLSAgICAgICAgIG1zZyA9ICJOZXR3b3JrIGFjY2VzcyBkaXNhYmxlZCB0aHJvdWdoIEJCX05PX05FVFdPUksgKG9yIHNldCBpbmRpcmVjdGx5IGR1ZSB0byB1c2Ugb2YgQkJfRkVUQ0hfUFJFTUlSUk9ST05MWSkgYnV0IGFjY2VzcyByZXF1ZXN0ZWQgd2l0aCBjb21tYW5kICVzIChmb3IgdXJsICVzKSIgJSAoY21kLCB1cmwpCi0gICAgICAgICBzZWxmLnVybCA9IHVybAotICAgICAgICAgc2VsZi5jbWQgPSBjbWQKLSAgICAgICAgIEJCRmV0Y2hFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbXNnKQotICAgICAgICAgc2VsZi5hcmdzID0gKHVybCwgY21kKQorICAgICAgICBtc2cgPSAiTmV0d29yayBhY2Nlc3MgZGlzYWJsZWQgdGhyb3VnaCBCQl9OT19ORVRXT1JLIChvciBzZXQgaW5kaXJlY3RseSBkdWUgdG8gdXNlIG9mIEJCX0ZFVENIX1BSRU1JUlJPUk9OTFkpIGJ1dCBhY2Nlc3MgcmVxdWVzdGVkIHdpdGggY29tbWFuZCAlcyAoZm9yIHVybCAlcykiICUgKGNtZCwgdXJsKQorICAgICAgICBzZWxmLnVybCA9IHVybAorICAgICAgICBzZWxmLmNtZCA9IGNtZAorICAgICAgICBCQkZldGNoRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIG1zZykKKyAgICAgICAgc2VsZi5hcmdzID0gKHVybCwgY21kKQogCiBjbGFzcyBOb25Mb2NhbE1ldGhvZChFeGNlcHRpb24pOgogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYpCiAKK2NsYXNzIE1pc3NpbmdDaGVja3N1bUV2ZW50KGJiLmV2ZW50LkV2ZW50KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsLCBtZDVzdW0sIHNoYTI1NnN1bSk6CisgICAgICAgIHNlbGYudXJsID0gdXJsCisgICAgICAgIHNlbGYuY2hlY2tzdW1zID0geydtZDVzdW0nOiBtZDVzdW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzaGEyNTZzdW0nOiBzaGEyNTZzdW19CisgICAgICAgIGJiLmV2ZW50LkV2ZW50Ll9faW5pdF9fKHNlbGYpCisKIAogY2xhc3MgVVJJKG9iamVjdCk6CiAgICAgIiIiCkBAIC00MDMsOCArNDExLDYgQEAKIAogICAgIHR5cGUsIGhvc3QsIHBhdGgsIHVzZXIsIHBzd2QsIHAgPSBkZWNvZGVkCiAKLSAgICBpZiBub3QgcGF0aDoKLSAgICAgICAgcmFpc2UgTWlzc2luZ1BhcmFtZXRlckVycm9yKCdwYXRoJywgImVuY29kZWQgZnJvbSB0aGUgZGF0YSAlcyIgJSBzdHIoZGVjb2RlZCkpCiAgICAgaWYgbm90IHR5cGU6CiAgICAgICAgIHJhaXNlIE1pc3NpbmdQYXJhbWV0ZXJFcnJvcigndHlwZScsICJlbmNvZGVkIGZyb20gdGhlIGRhdGEgJXMiICUgc3RyKGRlY29kZWQpKQogICAgIHVybCA9ICclczovLycgJSB0eXBlCkBAIC00MTUsMTcgKzQyMSwxOCBAQAogICAgICAgICB1cmwgKz0gIkAiCiAgICAgaWYgaG9zdCBhbmQgdHlwZSAhPSAiZmlsZSI6CiAgICAgICAgIHVybCArPSAiJXMiICUgaG9zdAotICAgICMgU3RhbmRhcmRpc2UgcGF0aCB0byBlbnN1cmUgY29tcGFyaXNvbnMgd29yawotICAgIHdoaWxlICcvLycgaW4gcGF0aDoKLSAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgiLy8iLCAiLyIpCi0gICAgdXJsICs9ICIlcyIgJSB1cmxsaWIucGFyc2UucXVvdGUocGF0aCkKKyAgICBpZiBwYXRoOgorICAgICAgICAjIFN0YW5kYXJkaXNlIHBhdGggdG8gZW5zdXJlIGNvbXBhcmlzb25zIHdvcmsKKyAgICAgICAgd2hpbGUgJy8vJyBpbiBwYXRoOgorICAgICAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgiLy8iLCAiLyIpCisgICAgICAgIHVybCArPSAiJXMiICUgdXJsbGliLnBhcnNlLnF1b3RlKHBhdGgpCiAgICAgaWYgcDoKICAgICAgICAgZm9yIHBhcm0gaW4gcDoKICAgICAgICAgICAgIHVybCArPSAiOyVzPSVzIiAlIChwYXJtLCBwW3Bhcm1dKQogCiAgICAgcmV0dXJuIHVybAogCi1kZWYgdXJpX3JlcGxhY2UodWQsIHVyaV9maW5kLCB1cmlfcmVwbGFjZSwgcmVwbGFjZW1lbnRzLCBkKToKK2RlZiB1cmlfcmVwbGFjZSh1ZCwgdXJpX2ZpbmQsIHVyaV9yZXBsYWNlLCByZXBsYWNlbWVudHMsIGQsIG1pcnJvcnRhcmJhbGw9Tm9uZSk6CiAgICAgaWYgbm90IHVkLnVybCBvciBub3QgdXJpX2ZpbmQgb3Igbm90IHVyaV9yZXBsYWNlOgogICAgICAgICBsb2dnZXIuZXJyb3IoInVyaV9yZXBsYWNlOiBwYXNzZWQgYW4gdW5kZWZpbmVkIHZhbHVlLCBub3QgcmVwbGFjaW5nIikKICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTQ1NSw3ICs0NjIsNyBAQAogICAgICAgICAgICAgICAgIHJlc3VsdF9kZWNvZGVkW2xvY11ba10gPSB1cmlfcmVwbGFjZV9kZWNvZGVkW2xvY11ba10KICAgICAgICAgZWxpZiAocmUubWF0Y2gocmVnZXhwLCB1cmlfZGVjb2RlZFtsb2NdKSk6CiAgICAgICAgICAgICBpZiBub3QgdXJpX3JlcGxhY2VfZGVjb2RlZFtsb2NdOgotICAgICAgICAgICAgICAgIHJlc3VsdF9kZWNvZGVkW2xvY10gPSAiIiAgICAKKyAgICAgICAgICAgICAgICByZXN1bHRfZGVjb2RlZFtsb2NdID0gIiIKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZm9yIGsgaW4gcmVwbGFjZW1lbnRzOgogICAgICAgICAgICAgICAgICAgICB1cmlfcmVwbGFjZV9kZWNvZGVkW2xvY10gPSB1cmlfcmVwbGFjZV9kZWNvZGVkW2xvY10ucmVwbGFjZShrLCByZXBsYWNlbWVudHNba10pCkBAIC00NjQsOSArNDcxLDkgQEAKICAgICAgICAgICAgIGlmIGxvYyA9PSAyOgogICAgICAgICAgICAgICAgICMgSGFuZGxlIHBhdGggbWFuaXB1bGF0aW9ucwogICAgICAgICAgICAgICAgIGJhc2VuYW1lID0gTm9uZQotICAgICAgICAgICAgICAgIGlmIHVyaV9kZWNvZGVkWzBdICE9IHVyaV9yZXBsYWNlX2RlY29kZWRbMF0gYW5kIHVkLm1pcnJvcnRhcmJhbGw6CisgICAgICAgICAgICAgICAgaWYgdXJpX2RlY29kZWRbMF0gIT0gdXJpX3JlcGxhY2VfZGVjb2RlZFswXSBhbmQgbWlycm9ydGFyYmFsbDoKICAgICAgICAgICAgICAgICAgICAgIyBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiB1cmwgdHlwZXMgZGlmZmVyLCBtdXN0IGJlIGEgbWlycm9ydGFyYmFsbCBtYXBwaW5nCi0gICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZSh1ZC5taXJyb3J0YXJiYWxsKQorICAgICAgICAgICAgICAgICAgICBiYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUobWlycm9ydGFyYmFsbCkKICAgICAgICAgICAgICAgICAgICAgIyBLaWxsIHBhcmFtZXRlcnMsIHRoZXkgbWFrZSBubyBzZW5zZSBmb3IgbWlycm9yIHRhcmJhbGxzCiAgICAgICAgICAgICAgICAgICAgIHVyaV9kZWNvZGVkWzVdID0ge30KICAgICAgICAgICAgICAgICBlbGlmIHVkLmxvY2FscGF0aCBhbmQgdWQubWV0aG9kLnN1cHBvcnRzX2NoZWNrc3VtKHVkKToKQEAgLTU4NCw2ICs1OTEsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkLnNoYTI1Nl9uYW1lLCBzaGEyNTZkYXRhKSkKICAgICAgICAgICAgIHJhaXNlIE5vQ2hlY2tzdW1FcnJvcignTWlzc2luZyBTUkNfVVJJIGNoZWNrc3VtJywgdWQudXJsKQogCisgICAgICAgIGJiLmV2ZW50LmZpcmUoTWlzc2luZ0NoZWNrc3VtRXZlbnQodWQudXJsLCBtZDVkYXRhLCBzaGEyNTZkYXRhKSwgZCkKKworICAgICAgICBpZiBzdHJpY3QgPT0gImlnbm9yZSI6CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIF9NRDVfS0VZOiBtZDVkYXRhLAorICAgICAgICAgICAgICAgIF9TSEEyNTZfS0VZOiBzaGEyNTZkYXRhCisgICAgICAgICAgICB9CisKICAgICAgICAgIyBMb2cgbWlzc2luZyBzdW1zIHNvIHVzZXIgY2FuIG1vcmUgZWFzaWx5IGFkZCB0aGVtCiAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdNaXNzaW5nIG1kNSBTUkNfVVJJIGNoZWNrc3VtIGZvciAlcywgY29uc2lkZXIgYWRkaW5nIHRvIHRoZSByZWNpcGU6XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJWyVzXSA9ICIlcyInLApAQCAtNzMzLDcgKzc0OCw3IEBACiAgICAgSW4gdGhlIG11bHRpIFNDTSBjYXNlLCB3ZSBidWlsZCBhIHZhbHVlIGJhc2VkIG9uIFNSQ1JFVl9GT1JNQVQgd2hpY2ggbXVzdAogICAgIGhhdmUgYmVlbiBzZXQuCiAKLSAgICBUaGUgaWRlYSBoZXJlIGlzIHRoYXQgd2UgcHV0IHRoZSBzdHJpbmcgIkFVVE9JTkMrIiBpbnRvIHJldHVybiB2YWx1ZSBpZiB0aGUgcmV2aXNpb25zIGFyZSBub3QgCisgICAgVGhlIGlkZWEgaGVyZSBpcyB0aGF0IHdlIHB1dCB0aGUgc3RyaW5nICJBVVRPSU5DKyIgaW50byByZXR1cm4gdmFsdWUgaWYgdGhlIHJldmlzaW9ucyBhcmUgbm90CiAgICAgaW5jcmVtZW50YWwsIG90aGVyIGNvZGUgaXMgdGhlbiByZXNwb25zaWJsZSBmb3IgdHVybmluZyB0aGF0IGludG8gYW4gaW5jcmVhc2luZyB2YWx1ZSAoaWYgbmVlZGVkKQogCiAgICAgQSBtZXRob2RfbmFtZSBjYW4gYmUgc3VwcGxpZWQgdG8gcmV0cmlldmUgYW4gYWx0ZXJuYXRpdmVseSBmb3JtYXR0ZWQgcmV2aXNpb24gZnJvbSBhIGZldGNoZXIsIGlmCkBAIC03ODUsNyArODAwLDcgQEAKICAgICBmb3JtYXQgPSByZS5zdWIobmFtZV90b19yZXZfcmUsIGxhbWJkYSBtYXRjaDogbmFtZV90b19yZXZbbWF0Y2guZ3JvdXAoMCldLCBmb3JtYXQpCiAKICAgICBpZiBzZWVuYXV0b2luYzoKLSAgICAgICBmb3JtYXQgPSAiQVVUT0lOQysiICsgZm9ybWF0CisgICAgICAgIGZvcm1hdCA9ICJBVVRPSU5DKyIgKyBmb3JtYXQKIAogICAgIHJldHVybiBmb3JtYXQKIApAQCAtODkyLDQ1ICs5MDcsNDcgQEAKICAgICByZXBsYWNlbWVudHNbIkJBU0VOQU1FIl0gPSBvcmlndWQucGF0aC5zcGxpdCgiLyIpWy0xXQogICAgIHJlcGxhY2VtZW50c1siTUlSUk9STkFNRSJdID0gb3JpZ3VkLmhvc3QucmVwbGFjZSgnOicsJy4nKSArIG9yaWd1ZC5wYXRoLnJlcGxhY2UoJy8nLCAnLicpLnJlcGxhY2UoJyonLCAnLicpCiAKLSAgICBkZWYgYWRkdXJpKHVkLCB1cmlzLCB1ZHMsIG1pcnJvcnMpOgorICAgIGRlZiBhZGR1cmkodWQsIHVyaXMsIHVkcywgbWlycm9ycywgdGFyYmFsbHMpOgogICAgICAgICBmb3IgbGluZSBpbiBtaXJyb3JzOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIChmaW5kLCByZXBsYWNlKSA9IGxpbmUKICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBuZXd1cmkgPSB1cmlfcmVwbGFjZSh1ZCwgZmluZCwgcmVwbGFjZSwgcmVwbGFjZW1lbnRzLCBsZCkKLSAgICAgICAgICAgIGlmIG5vdCBuZXd1cmkgb3IgbmV3dXJpIGluIHVyaXMgb3IgbmV3dXJpID09IG9yaWd1ZC51cmw6Ci0gICAgICAgICAgICAgICAgY29udGludWUKIAotICAgICAgICAgICAgaWYgbm90IHRydXN0ZWRfbmV0d29yayhsZCwgbmV3dXJpKToKLSAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIk1pcnJvciAlcyBub3QgaW4gdGhlIGxpc3Qgb2YgdHJ1c3RlZCBuZXR3b3Jrcywgc2tpcHBpbmciICUgIChuZXd1cmkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmb3IgdGFyYmFsbCBpbiB0YXJiYWxsczoKKyAgICAgICAgICAgICAgICBuZXd1cmkgPSB1cmlfcmVwbGFjZSh1ZCwgZmluZCwgcmVwbGFjZSwgcmVwbGFjZW1lbnRzLCBsZCwgdGFyYmFsbCkKKyAgICAgICAgICAgICAgICBpZiBub3QgbmV3dXJpIG9yIG5ld3VyaSBpbiB1cmlzIG9yIG5ld3VyaSA9PSBvcmlndWQudXJsOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogCi0gICAgICAgICAgICAjIENyZWF0ZSBhIGxvY2FsIGNvcHkgb2YgdGhlIG1pcnJvcnMgbWludXMgdGhlIGN1cnJlbnQgbGluZQotICAgICAgICAgICAgIyB0aGlzIHdpbGwgcHJldmVudCB1cyBmcm9tIHJlY3Vyc2l2ZWx5IHByb2Nlc3NpbmcgdGhlIHNhbWUgbGluZQotICAgICAgICAgICAgIyBhcyB3ZWxsIGFzIGluZGlyZWN0IHJlY3Vyc2lvbiBBIC0+IEIgLT4gQyAtPiBBCi0gICAgICAgICAgICBsb2NhbG1pcnJvcnMgPSBsaXN0KG1pcnJvcnMpCi0gICAgICAgICAgICBsb2NhbG1pcnJvcnMucmVtb3ZlKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbm90IHRydXN0ZWRfbmV0d29yayhsZCwgbmV3dXJpKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJNaXJyb3IgJXMgbm90IGluIHRoZSBsaXN0IG9mIHRydXN0ZWQgbmV0d29ya3MsIHNraXBwaW5nIiAlICAobmV3dXJpKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKIAotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG5ld3VkID0gRmV0Y2hEYXRhKG5ld3VyaSwgbGQpCi0gICAgICAgICAgICAgICAgbmV3dWQuc2V0dXBfbG9jYWxwYXRoKGxkKQotICAgICAgICAgICAgZXhjZXB0IGJiLmZldGNoMi5CQkZldGNoRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJNaXJyb3IgZmV0Y2ggZmFpbHVyZSBmb3IgdXJsICVzIChvcmlnaW5hbCB1cmw6ICVzKSIgJSAobmV3dXJpLCBvcmlndWQudXJsKSkKLSAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgc3RyKGUpKQorICAgICAgICAgICAgICAgICMgQ3JlYXRlIGEgbG9jYWwgY29weSBvZiB0aGUgbWlycm9ycyBtaW51cyB0aGUgY3VycmVudCBsaW5lCisgICAgICAgICAgICAgICAgIyB0aGlzIHdpbGwgcHJldmVudCB1cyBmcm9tIHJlY3Vyc2l2ZWx5IHByb2Nlc3NpbmcgdGhlIHNhbWUgbGluZQorICAgICAgICAgICAgICAgICMgYXMgd2VsbCBhcyBpbmRpcmVjdCByZWN1cnNpb24gQSAtPiBCIC0+IEMgLT4gQQorICAgICAgICAgICAgICAgIGxvY2FsbWlycm9ycyA9IGxpc3QobWlycm9ycykKKyAgICAgICAgICAgICAgICBsb2NhbG1pcnJvcnMucmVtb3ZlKGxpbmUpCisKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICMgc2V0dXBfbG9jYWxwYXRoIG9mIGZpbGU6Ly8gdXJscyBtYXkgZmFpbCwgd2Ugc2hvdWxkIHN0aWxsIHNlZSAKLSAgICAgICAgICAgICAgICAgICAgIyBpZiBtaXJyb3JzIG9mIHRoZSB1cmwgZXhpc3QKLSAgICAgICAgICAgICAgICAgICAgYWRkdXJpKG5ld3VkLCB1cmlzLCB1ZHMsIGxvY2FsbWlycm9ycykKLSAgICAgICAgICAgICAgICBleGNlcHQgVW5ib3VuZExvY2FsRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBjb250aW51ZSAgIAotICAgICAgICAgICAgdXJpcy5hcHBlbmQobmV3dXJpKQotICAgICAgICAgICAgdWRzLmFwcGVuZChuZXd1ZCkKKyAgICAgICAgICAgICAgICAgICAgbmV3dWQgPSBGZXRjaERhdGEobmV3dXJpLCBsZCkKKyAgICAgICAgICAgICAgICAgICAgbmV3dWQuc2V0dXBfbG9jYWxwYXRoKGxkKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBiYi5mZXRjaDIuQkJGZXRjaEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIk1pcnJvciBmZXRjaCBmYWlsdXJlIGZvciB1cmwgJXMgKG9yaWdpbmFsIHVybDogJXMpIiAlIChuZXd1cmksIG9yaWd1ZC51cmwpKQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgc3RyKGUpKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIHNldHVwX2xvY2FscGF0aCBvZiBmaWxlOi8vIHVybHMgbWF5IGZhaWwsIHdlIHNob3VsZCBzdGlsbCBzZWUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgbWlycm9ycyBvZiB0aGUgdXJsIGV4aXN0CisgICAgICAgICAgICAgICAgICAgICAgICBhZGR1cmkobmV3dWQsIHVyaXMsIHVkcywgbG9jYWxtaXJyb3JzLCB0YXJiYWxscykKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFVuYm91bmRMb2NhbEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHVyaXMuYXBwZW5kKG5ld3VyaSkKKyAgICAgICAgICAgICAgICB1ZHMuYXBwZW5kKG5ld3VkKQogCi0gICAgICAgICAgICBhZGR1cmkobmV3dWQsIHVyaXMsIHVkcywgbG9jYWxtaXJyb3JzKQorICAgICAgICAgICAgICAgIGFkZHVyaShuZXd1ZCwgdXJpcywgdWRzLCBsb2NhbG1pcnJvcnMsIHRhcmJhbGxzKQogCi0gICAgYWRkdXJpKG9yaWd1ZCwgdXJpcywgdWRzLCBtaXJyb3JzKQorICAgIGFkZHVyaShvcmlndWQsIHVyaXMsIHVkcywgbWlycm9ycywgb3JpZ3VkLm1pcnJvcnRhcmJhbGxzIG9yIFtOb25lXSkKIAogICAgIHJldHVybiB1cmlzLCB1ZHMKIApAQCAtOTc1LDggKzk5Miw4IEBACiAgICAgICAgICMgV2UgbWF5IGJlIG9idGFpbmluZyBhIG1pcnJvciB0YXJiYWxsIHdoaWNoIG5lZWRzIGZ1cnRoZXIgcHJvY2Vzc2luZyBieSB0aGUgcmVhbCBmZXRjaGVyCiAgICAgICAgICMgSWYgdGhhdCB0YXJiYWxsIGlzIGEgbG9jYWwgZmlsZTovLyB3ZSBuZWVkIHRvIHByb3ZpZGUgYSBzeW1saW5rIHRvIGl0CiAgICAgICAgIGRsZGlyID0gbGQuZ2V0VmFyKCJETF9ESVIiKQotICAgICAgICBpZiBvcmlndWQubWlycm9ydGFyYmFsbCBhbmQgb3MucGF0aC5iYXNlbmFtZSh1ZC5sb2NhbHBhdGgpID09IG9zLnBhdGguYmFzZW5hbWUob3JpZ3VkLm1pcnJvcnRhcmJhbGwpIFwKLSAgICAgICAgICAgICAgICBhbmQgb3MucGF0aC5iYXNlbmFtZSh1ZC5sb2NhbHBhdGgpICE9IG9zLnBhdGguYmFzZW5hbWUob3JpZ3VkLmxvY2FscGF0aCk6CisKKyAgICAgICAgaWYgb3JpZ3VkLm1pcnJvcnRhcmJhbGxzIGFuZCBvcy5wYXRoLmJhc2VuYW1lKHVkLmxvY2FscGF0aCkgaW4gb3JpZ3VkLm1pcnJvcnRhcmJhbGxzIGFuZCBvcy5wYXRoLmJhc2VuYW1lKHVkLmxvY2FscGF0aCkgIT0gb3MucGF0aC5iYXNlbmFtZShvcmlndWQubG9jYWxwYXRoKToKICAgICAgICAgICAgICMgQ3JlYXRlIGRvbmVzdGFtcCBpbiBvbGQgZm9ybWF0IHRvIGF2b2lkIHRyaWdnZXJpbmcgYSByZS1kb3dubG9hZAogICAgICAgICAgICAgaWYgdWQuZG9uZXN0YW1wOgogICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUodWQuZG9uZXN0YW1wKSkKQEAgLTk5Myw3ICsxMDEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgaWYgbm90IHZlcmlmeV9kb25lc3RhbXAob3JpZ3VkLCBsZCkgb3Igb3JpZ3VkLm1ldGhvZC5uZWVkX3VwZGF0ZShvcmlndWQsIGxkKToKICAgICAgICAgICAgICAgICBvcmlndWQubWV0aG9kLmRvd25sb2FkKG9yaWd1ZCwgbGQpCi0gICAgICAgICAgICAgICAgaWYgaGFzYXR0cihvcmlndWQubWV0aG9kLCJidWlsZF9taXJyb3JfZGF0YSIpOgorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIob3JpZ3VkLm1ldGhvZCwgImJ1aWxkX21pcnJvcl9kYXRhIik6CiAgICAgICAgICAgICAgICAgICAgIG9yaWd1ZC5tZXRob2QuYnVpbGRfbWlycm9yX2RhdGEob3JpZ3VkLCBsZCkKICAgICAgICAgICAgIHJldHVybiBvcmlndWQubG9jYWxwYXRoCiAgICAgICAgICMgT3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgYSBsb2NhbCBmaWxlOi8vIGFuZCB3ZSBzeW1saW5rIHRvIGl0CkBAIC0xMDE1LDcgKzEwMzIsNyBAQAogCiAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKICAgICAgICAgaWYgZS5lcnJubyBpbiBbb3MuZXJybm8uRVNUQUxFXToKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKCJTdGFsZSBFcnJvciBPYnNlcnZlZCAlcy4iICUgdWQudXJsKQorICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIlN0YWxlIEVycm9yIE9ic2VydmVkICVzLiIgJSB1ZC51cmwpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgcmFpc2UKIApAQCAtMTExNSw3ICsxMTMyLDcgQEAKICAgICBhdHRlbXB0cy5hcHBlbmQoIlNSQ1JFViIpCiAKICAgICBmb3IgYSBpbiBhdHRlbXB0czoKLSAgICAgICAgc3JjcmV2ID0gZC5nZXRWYXIoYSkgICAgICAgICAgICAgIAorICAgICAgICBzcmNyZXYgPSBkLmdldFZhcihhKQogICAgICAgICBpZiBzcmNyZXYgYW5kIHNyY3JldiAhPSAiSU5WQUxJRCI6CiAgICAgICAgICAgICBicmVhawogCkBAIC0xMTMwLDcgKzExNDcsNyBAQAogICAgICAgICBpZiBzcmNyZXYgPT0gIklOVkFMSUQiIG9yIG5vdCBzcmNyZXY6CiAgICAgICAgICAgICByZXR1cm4gcGFybXJldgogICAgICAgICBpZiBzcmNyZXYgIT0gcGFybXJldjoKLSAgICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIkNvbmZsaWN0aW5nIHJldmlzaW9ucyAoJXMgZnJvbSBTUkNSRVYgYW5kICVzIGZyb20gdGhlIHVybCkgZm91bmQsIHBsZWFzZSBzcGNpZnkgb25lIHZhbGlkIHZhbHVlIiAlIChzcmNyZXYsIHBhcm1yZXYpKQorICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiQ29uZmxpY3RpbmcgcmV2aXNpb25zICglcyBmcm9tIFNSQ1JFViBhbmQgJXMgZnJvbSB0aGUgdXJsKSBmb3VuZCwgcGxlYXNlIHNwZWNpZnkgb25lIHZhbGlkIHZhbHVlIiAlIChzcmNyZXYsIHBhcm1yZXYpKQogICAgICAgICByZXR1cm4gcGFybXJldgogCiAgICAgaWYgc3JjcmV2ID09ICJJTlZBTElEIiBvciBub3Qgc3JjcmV2OgpAQCAtMTE5MCw3ICsxMjA3LDcgQEAKICAgICAgICAgc2VsZi5sb2NhbGZpbGUgPSAiIgogICAgICAgICBzZWxmLmxvY2FscGF0aCA9IE5vbmUKICAgICAgICAgc2VsZi5sb2NrZmlsZSA9IE5vbmUKLSAgICAgICAgc2VsZi5taXJyb3J0YXJiYWxsID0gTm9uZQorICAgICAgICBzZWxmLm1pcnJvcnRhcmJhbGxzID0gW10KICAgICAgICAgc2VsZi5iYXNlbmFtZSA9IE5vbmUKICAgICAgICAgc2VsZi5iYXNlcGF0aCA9IE5vbmUKICAgICAgICAgKHNlbGYudHlwZSwgc2VsZi5ob3N0LCBzZWxmLnBhdGgsIHNlbGYudXNlciwgc2VsZi5wc3dkLCBzZWxmLnBhcm0pID0gZGVjb2RldXJsKGQuZXhwYW5kKHVybCkpCkBAIC0xMjI4LDcgKzEyNDUsNyBAQAogICAgICAgICBmb3IgbSBpbiBtZXRob2RzOgogICAgICAgICAgICAgaWYgbS5zdXBwb3J0cyhzZWxmLCBkKToKICAgICAgICAgICAgICAgICBzZWxmLm1ldGhvZCA9IG0KLSAgICAgICAgICAgICAgICBicmVhayAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBicmVhawogCiAgICAgICAgIGlmIG5vdCBzZWxmLm1ldGhvZDoKICAgICAgICAgICAgIHJhaXNlIE5vTWV0aG9kRXJyb3IodXJsKQpAQCAtMTI2Myw3ICsxMjgwLDcgQEAKICAgICAgICAgZWxpZiBzZWxmLmJhc2VwYXRoIG9yIHNlbGYuYmFzZW5hbWU6CiAgICAgICAgICAgICBiYXNlcGF0aCA9IGRsZGlyICsgb3Muc2VwICsgKHNlbGYuYmFzZXBhdGggb3Igc2VsZi5iYXNlbmFtZSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICBiYi5mYXRhbCgiQ2FuJ3QgZGV0ZXJtaW5lIGxvY2sgcGF0aCBmb3IgdXJsICVzIiAlIHVybCkKKyAgICAgICAgICAgIGJiLmZhdGFsKCJDYW4ndCBkZXRlcm1pbmUgbG9jayBwYXRoIGZvciB1cmwgJXMiICUgdXJsKQogCiAgICAgICAgIHNlbGYuZG9uZXN0YW1wID0gYmFzZXBhdGggKyAnLmRvbmUnCiAgICAgICAgIHNlbGYubG9ja2ZpbGUgPSBiYXNlcGF0aCArICcubG9jaycKQEAgLTEzMjYsMTMgKzEzNDMsMTMgQEAKICAgICAgICAgaWYgb3MucGF0aC5pc2Rpcih1cmxkYXRhLmxvY2FscGF0aCkgPT0gVHJ1ZToKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICBpZiB1cmxkYXRhLmxvY2FscGF0aC5maW5kKCIqIikgIT0gLTE6Ci0gICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIHJlY29tbWVuZHNfY2hlY2tzdW0oc2VsZiwgdXJsZGF0YSk6CiAgICAgICAgICIiIgotICAgICAgICBJcyB0aGUgYmFja2VuZCBvbiB3aGVyZSBjaGVja3N1bW1pbmcgaXMgcmVjb21tZW5kZWQgKHNob3VsZCB3YXJuaW5ncyAKKyAgICAgICAgSXMgdGhlIGJhY2tlbmQgb24gd2hlcmUgY2hlY2tzdW1taW5nIGlzIHJlY29tbWVuZGVkIChzaG91bGQgd2FybmluZ3MKICAgICAgICAgYmUgZGlzcGxheWVkIGlmIHRoZXJlIGlzIG5vIGNoZWNrc3VtKT8KICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBGYWxzZQpAQCAtMTU0Miw2ICsxNTU5LDE0IEBACiAgICAgICAgIGtleSA9IHNlbGYuX3JldmlzaW9uX2tleSh1ZCwgZCwgbmFtZSkKICAgICAgICAgcmV0dXJuICIlcy0lcyIgJSAoa2V5LCBkLmdldFZhcigiUE4iKSBvciAiIikKIAorICAgIGRlZiBsYXRlc3RfdmVyc2lvbnN0cmluZyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDb21wdXRlIHRoZSBsYXRlc3QgcmVsZWFzZSBuYW1lIGxpa2UgIngueS54IiBpbiAieC55LngrZ2l0SEFTSCIKKyAgICAgICAgYnkgc2VhcmNoaW5nIHRocm91Z2ggdGhlIHRhZ3Mgb3V0cHV0IG9mIGxzLXJlbW90ZSwgY29tcGFyaW5nCisgICAgICAgIHZlcnNpb25zIGFuZCByZXR1cm5pbmcgdGhlIGhpZ2hlc3QgbWF0Y2ggYXMgYSAodmVyc2lvbiwgcmV2aXNpb24pIHBhaXIuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gKCcnLCAnJykKKwogY2xhc3MgRmV0Y2gob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgdXJscywgZCwgY2FjaGUgPSBUcnVlLCBsb2NhbG9ubHkgPSBGYWxzZSwgY29ubmVjdGlvbl9jYWNoZSA9IE5vbmUpOgogICAgICAgICBpZiBsb2NhbG9ubHkgYW5kIGNhY2hlOgpAQCAtMTYxMiw3ICsxNjM3LDcgQEAKIAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJCX05PX05FVFdPUksiLCBuZXR3b3JrKQotIAorCiAgICAgICAgICAgICAgICAgaWYgdmVyaWZ5X2RvbmVzdGFtcCh1ZCwgc2VsZi5kKSBhbmQgbm90IG0ubmVlZF91cGRhdGUodWQsIHNlbGYuZCk6CiAgICAgICAgICAgICAgICAgICAgIGxvY2FscGF0aCA9IHVkLmxvY2FscGF0aAogICAgICAgICAgICAgICAgIGVsaWYgbS50cnlfcHJlbWlycm9yKHVkLCBzZWxmLmQpOgpAQCAtMTcwOCw5ICsxNzMzLDggQEAKICAgICAgICAgICAgIHJldCA9IHRyeV9taXJyb3JzKHNlbGYsIHNlbGYuZCwgdWQsIG1pcnJvcnMsIFRydWUpCiAgICAgICAgICAgICBpZiBub3QgcmV0OgogICAgICAgICAgICAgICAgICMgTmV4dCB0cnkgY2hlY2tpbmcgZnJvbSB0aGUgb3JpZ2luYWwgdXJpLCB1Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICByZXQgPSBtLmNoZWNrc3RhdHVzKHNlbGYsIHVkLCBzZWxmLmQpCi0gICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHJldCA9IG0uY2hlY2tzdGF0dXMoc2VsZiwgdWQsIHNlbGYuZCkKKyAgICAgICAgICAgICAgICBpZiBub3QgcmV0OgogICAgICAgICAgICAgICAgICAgICAjIEZpbmFsbHksIHRyeSBjaGVja2luZyB1cmksIHUsIGZyb20gTUlSUk9SUwogICAgICAgICAgICAgICAgICAgICBtaXJyb3JzID0gbWlycm9yX2Zyb21fc3RyaW5nKHNlbGYuZC5nZXRWYXIoJ01JUlJPUlMnKSkKICAgICAgICAgICAgICAgICAgICAgcmV0ID0gdHJ5X21pcnJvcnMoc2VsZiwgc2VsZi5kLCB1ZCwgbWlycm9ycywgVHJ1ZSkKQEAgLTE3MjAsNyArMTc0NCw3IEBACiAKICAgICBkZWYgdW5wYWNrKHNlbGYsIHJvb3QsIHVybHM9Tm9uZSk6CiAgICAgICAgICIiIgotICAgICAgICBDaGVjayBhbGwgdXJscyBleGlzdCB1cHN0cmVhbQorICAgICAgICBVbnBhY2sgdXJscyB0byByb290CiAgICAgICAgICIiIgogCiAgICAgICAgIGlmIG5vdCB1cmxzOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9naXQucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2dpdC5weQppbmRleCA3NDQyZjg0Li41ZWY4Y2Q2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2dpdC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2dpdC5weQpAQCAtNzAsMTEgKzcwLDE0IEBACiAjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCiAKK2ltcG9ydCBjb2xsZWN0aW9ucwogaW1wb3J0IGVycm5vCitpbXBvcnQgZm5tYXRjaAogaW1wb3J0IG9zCiBpbXBvcnQgcmUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCBiYgotaW1wb3J0IGVycm5vCiBpbXBvcnQgYmIucHJvZ3Jlc3MKIGZyb20gICBiYi5mZXRjaDIgaW1wb3J0IEZldGNoTWV0aG9kCiBmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZApAQCAtMTcyLDE4ICsxNzUsNjYgQEAKICAgICAgICAgYnJhbmNoZXMgPSB1ZC5wYXJtLmdldCgiYnJhbmNoIiwgIm1hc3RlciIpLnNwbGl0KCcsJykKICAgICAgICAgaWYgbGVuKGJyYW5jaGVzKSAhPSBsZW4odWQubmFtZXMpOgogICAgICAgICAgICAgcmFpc2UgYmIuZmV0Y2gyLlBhcmFtZXRlckVycm9yKCJUaGUgbnVtYmVyIG9mIG5hbWUgYW5kIGJyYW5jaCBwYXJhbWV0ZXJzIGlzIG5vdCBiYWxhbmNlZCIsIHVkLnVybCkKKworICAgICAgICB1ZC5jbG9uZWZsYWdzID0gIi1zIC1uIgorICAgICAgICBpZiB1ZC5iYXJlY2xvbmU6CisgICAgICAgICAgICB1ZC5jbG9uZWZsYWdzICs9ICIgLS1taXJyb3IiCisKKyAgICAgICAgdWQuc2hhbGxvdyA9IGQuZ2V0VmFyKCJCQl9HSVRfU0hBTExPVyIpID09ICIxIgorICAgICAgICB1ZC5zaGFsbG93X2V4dHJhX3JlZnMgPSAoZC5nZXRWYXIoIkJCX0dJVF9TSEFMTE9XX0VYVFJBX1JFRlMiKSBvciAiIikuc3BsaXQoKQorCisgICAgICAgIGRlcHRoX2RlZmF1bHQgPSBkLmdldFZhcigiQkJfR0lUX1NIQUxMT1dfREVQVEgiKQorICAgICAgICBpZiBkZXB0aF9kZWZhdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlcHRoX2RlZmF1bHQgPSBpbnQoZGVwdGhfZGVmYXVsdCBvciAwKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIuZmV0Y2gyLkZldGNoRXJyb3IoIkludmFsaWQgZGVwdGggZm9yIEJCX0dJVF9TSEFMTE9XX0RFUFRIOiAlcyIgJSBkZXB0aF9kZWZhdWx0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBkZXB0aF9kZWZhdWx0IDwgMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgYmIuZmV0Y2gyLkZldGNoRXJyb3IoIkludmFsaWQgZGVwdGggZm9yIEJCX0dJVF9TSEFMTE9XX0RFUFRIOiAlcyIgJSBkZXB0aF9kZWZhdWx0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVwdGhfZGVmYXVsdCA9IDEKKyAgICAgICAgdWQuc2hhbGxvd19kZXB0aHMgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChsYW1iZGE6IGRlcHRoX2RlZmF1bHQpCisKKyAgICAgICAgcmV2c19kZWZhdWx0ID0gZC5nZXRWYXIoIkJCX0dJVF9TSEFMTE9XX1JFVlMiLCBUcnVlKQorICAgICAgICB1ZC5zaGFsbG93X3JldnMgPSBbXQogICAgICAgICB1ZC5icmFuY2hlcyA9IHt9CiAgICAgICAgIGZvciBwb3MsIG5hbWUgaW4gZW51bWVyYXRlKHVkLm5hbWVzKToKICAgICAgICAgICAgIGJyYW5jaCA9IGJyYW5jaGVzW3Bvc10KICAgICAgICAgICAgIHVkLmJyYW5jaGVzW25hbWVdID0gYnJhbmNoCiAgICAgICAgICAgICB1ZC51bnJlc29sdmVkcmV2W25hbWVdID0gYnJhbmNoCiAKKyAgICAgICAgICAgIHNoYWxsb3dfZGVwdGggPSBkLmdldFZhcigiQkJfR0lUX1NIQUxMT1dfREVQVEhfJXMiICUgbmFtZSkKKyAgICAgICAgICAgIGlmIHNoYWxsb3dfZGVwdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzaGFsbG93X2RlcHRoID0gaW50KHNoYWxsb3dfZGVwdGggb3IgMCkKKyAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgYmIuZmV0Y2gyLkZldGNoRXJyb3IoIkludmFsaWQgZGVwdGggZm9yIEJCX0dJVF9TSEFMTE9XX0RFUFRIXyVzOiAlcyIgJSAobmFtZSwgc2hhbGxvd19kZXB0aCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2hhbGxvd19kZXB0aCA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBiYi5mZXRjaDIuRmV0Y2hFcnJvcigiSW52YWxpZCBkZXB0aCBmb3IgQkJfR0lUX1NIQUxMT1dfREVQVEhfJXM6ICVzIiAlIChuYW1lLCBzaGFsbG93X2RlcHRoKSkKKyAgICAgICAgICAgICAgICAgICAgdWQuc2hhbGxvd19kZXB0aHNbbmFtZV0gPSBzaGFsbG93X2RlcHRoCisKKyAgICAgICAgICAgIHJldnMgPSBkLmdldFZhcigiQkJfR0lUX1NIQUxMT1dfUkVWU18lcyIgJSBuYW1lKQorICAgICAgICAgICAgaWYgcmV2cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB1ZC5zaGFsbG93X3JldnMuZXh0ZW5kKHJldnMuc3BsaXQoKSkKKyAgICAgICAgICAgIGVsaWYgcmV2c19kZWZhdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHVkLnNoYWxsb3dfcmV2cy5leHRlbmQocmV2c19kZWZhdWx0LnNwbGl0KCkpCisKKyAgICAgICAgaWYgKHVkLnNoYWxsb3cgYW5kCisgICAgICAgICAgICAgICAgbm90IHVkLnNoYWxsb3dfcmV2cyBhbmQKKyAgICAgICAgICAgICAgICBhbGwodWQuc2hhbGxvd19kZXB0aHNbbl0gPT0gMCBmb3IgbiBpbiB1ZC5uYW1lcykpOgorICAgICAgICAgICAgIyBTaGFsbG93IGRpc2FibGVkIGZvciB0aGlzIFVSTAorICAgICAgICAgICAgdWQuc2hhbGxvdyA9IEZhbHNlCisKICAgICAgICAgaWYgdWQudXNlaGVhZDoKICAgICAgICAgICAgIHVkLnVucmVzb2x2ZWRyZXZbJ2RlZmF1bHQnXSA9ICdIRUFEJwogCiAgICAgICAgIHVkLmJhc2VjbWQgPSBkLmdldFZhcigiRkVUQ0hDTURfZ2l0Iikgb3IgImdpdCAtYyBjb3JlLmZzeW5jb2JqZWN0ZmlsZXM9MCIKIAotICAgICAgICB1ZC53cml0ZV90YXJiYWxscyA9ICgoZC5nZXRWYXIoIkJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyIpIG9yICIwIikgIT0gIjAiKSBvciB1ZC5yZWJhc2VhYmxlCisgICAgICAgIHdyaXRlX3RhcmJhbGxzID0gZC5nZXRWYXIoIkJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyIpIG9yICIwIgorICAgICAgICB1ZC53cml0ZV90YXJiYWxscyA9IHdyaXRlX3RhcmJhbGxzICE9ICIwIiBvciB1ZC5yZWJhc2VhYmxlCisgICAgICAgIHVkLndyaXRlX3NoYWxsb3dfdGFyYmFsbHMgPSAoZC5nZXRWYXIoIkJCX0dFTkVSQVRFX1NIQUxMT1dfVEFSQkFMTFMiKSBvciB3cml0ZV90YXJiYWxscykgIT0gIjAiCiAKICAgICAgICAgdWQuc2V0dXBfcmV2aXNpb25zKGQpCiAKQEAgLTIwNSwxMyArMjU2LDQyIEBACiAgICAgICAgIGlmIHVkLnJlYmFzZWFibGU6CiAgICAgICAgICAgICBmb3IgbmFtZSBpbiB1ZC5uYW1lczoKICAgICAgICAgICAgICAgICBnaXRzcmNuYW1lID0gZ2l0c3JjbmFtZSArICdfJyArIHVkLnJldmlzaW9uc1tuYW1lXQotICAgICAgICB1ZC5taXJyb3J0YXJiYWxsID0gJ2dpdDJfJXMudGFyLmd6JyAlIGdpdHNyY25hbWUKLSAgICAgICAgdWQuZnVsbG1pcnJvciA9IG9zLnBhdGguam9pbihkLmdldFZhcigiRExfRElSIiksIHVkLm1pcnJvcnRhcmJhbGwpCi0gICAgICAgIGdpdGRpciA9IGQuZ2V0VmFyKCJHSVRESVIiKSBvciAoZC5nZXRWYXIoIkRMX0RJUiIpICsgIi9naXQyLyIpCi0gICAgICAgIHVkLmNsb25lZGlyID0gb3MucGF0aC5qb2luKGdpdGRpciwgZ2l0c3JjbmFtZSkKIAorICAgICAgICBkbF9kaXIgPSBkLmdldFZhcigiRExfRElSIikKKyAgICAgICAgZ2l0ZGlyID0gZC5nZXRWYXIoIkdJVERJUiIpIG9yIChkbF9kaXIgKyAiL2dpdDIvIikKKyAgICAgICAgdWQuY2xvbmVkaXIgPSBvcy5wYXRoLmpvaW4oZ2l0ZGlyLCBnaXRzcmNuYW1lKQogICAgICAgICB1ZC5sb2NhbGZpbGUgPSB1ZC5jbG9uZWRpcgogCisgICAgICAgIG1pcnJvcnRhcmJhbGwgPSAnZ2l0Ml8lcy50YXIuZ3onICUgZ2l0c3JjbmFtZQorICAgICAgICB1ZC5mdWxsbWlycm9yID0gb3MucGF0aC5qb2luKGRsX2RpciwgbWlycm9ydGFyYmFsbCkKKyAgICAgICAgdWQubWlycm9ydGFyYmFsbHMgPSBbbWlycm9ydGFyYmFsbF0KKyAgICAgICAgaWYgdWQuc2hhbGxvdzoKKyAgICAgICAgICAgIHRhcmJhbGxuYW1lID0gZ2l0c3JjbmFtZQorICAgICAgICAgICAgaWYgdWQuYmFyZWNsb25lOgorICAgICAgICAgICAgICAgIHRhcmJhbGxuYW1lID0gIiVzX2JhcmUiICUgdGFyYmFsbG5hbWUKKworICAgICAgICAgICAgaWYgdWQuc2hhbGxvd19yZXZzOgorICAgICAgICAgICAgICAgIHRhcmJhbGxuYW1lID0gIiVzXyVzIiAlICh0YXJiYWxsbmFtZSwgIl8iLmpvaW4oc29ydGVkKHVkLnNoYWxsb3dfcmV2cykpKQorCisgICAgICAgICAgICBmb3IgbmFtZSwgcmV2aXNpb24gaW4gc29ydGVkKHVkLnJldmlzaW9ucy5pdGVtcygpKToKKyAgICAgICAgICAgICAgICB0YXJiYWxsbmFtZSA9ICIlc18lcyIgJSAodGFyYmFsbG5hbWUsIHVkLnJldmlzaW9uc1tuYW1lXVs6N10pCisgICAgICAgICAgICAgICAgZGVwdGggPSB1ZC5zaGFsbG93X2RlcHRoc1tuYW1lXQorICAgICAgICAgICAgICAgIGlmIGRlcHRoOgorICAgICAgICAgICAgICAgICAgICB0YXJiYWxsbmFtZSA9ICIlcy0lcyIgJSAodGFyYmFsbG5hbWUsIGRlcHRoKQorCisgICAgICAgICAgICBzaGFsbG93X3JlZnMgPSBbXQorICAgICAgICAgICAgaWYgbm90IHVkLm5vYnJhbmNoOgorICAgICAgICAgICAgICAgIHNoYWxsb3dfcmVmcy5leHRlbmQodWQuYnJhbmNoZXMudmFsdWVzKCkpCisgICAgICAgICAgICBpZiB1ZC5zaGFsbG93X2V4dHJhX3JlZnM6CisgICAgICAgICAgICAgICAgc2hhbGxvd19yZWZzLmV4dGVuZChyLnJlcGxhY2UoJ3JlZnMvaGVhZHMvJywgJycpLnJlcGxhY2UoJyonLCAnQUxMJykgZm9yIHIgaW4gdWQuc2hhbGxvd19leHRyYV9yZWZzKQorICAgICAgICAgICAgaWYgc2hhbGxvd19yZWZzOgorICAgICAgICAgICAgICAgIHRhcmJhbGxuYW1lID0gIiVzXyVzIiAlICh0YXJiYWxsbmFtZSwgIl8iLmpvaW4oc29ydGVkKHNoYWxsb3dfcmVmcykpLnJlcGxhY2UoJy8nLCAnLicpKQorCisgICAgICAgICAgICBmZXRjaGVyID0gc2VsZi5fX2NsYXNzX18uX19uYW1lX18ubG93ZXIoKQorICAgICAgICAgICAgdWQuc2hhbGxvd3RhcmJhbGwgPSAnJXNzaGFsbG93XyVzLnRhci5neicgJSAoZmV0Y2hlciwgdGFyYmFsbG5hbWUpCisgICAgICAgICAgICB1ZC5mdWxsc2hhbGxvdyA9IG9zLnBhdGguam9pbihkbF9kaXIsIHVkLnNoYWxsb3d0YXJiYWxsKQorICAgICAgICAgICAgdWQubWlycm9ydGFyYmFsbHMuaW5zZXJ0KDAsIHVkLnNoYWxsb3d0YXJiYWxsKQorCiAgICAgZGVmIGxvY2FscGF0aChzZWxmLCB1ZCwgZCk6CiAgICAgICAgIHJldHVybiB1ZC5jbG9uZWRpcgogCkBAIC0yMjEsNiArMzAxLDggQEAKICAgICAgICAgZm9yIG5hbWUgaW4gdWQubmFtZXM6CiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY29udGFpbnNfcmVmKHVkLCBkLCBuYW1lLCB1ZC5jbG9uZWRpcik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgdWQuc2hhbGxvdyBhbmQgdWQud3JpdGVfc2hhbGxvd190YXJiYWxscyBhbmQgbm90IG9zLnBhdGguZXhpc3RzKHVkLmZ1bGxzaGFsbG93KToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIGlmIHVkLndyaXRlX3RhcmJhbGxzIGFuZCBub3Qgb3MucGF0aC5leGlzdHModWQuZnVsbG1pcnJvcik6CiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICByZXR1cm4gRmFsc2UKQEAgLTIzNyw4ICszMTksMTYgQEAKICAgICBkZWYgZG93bmxvYWQoc2VsZiwgdWQsIGQpOgogICAgICAgICAiIiJGZXRjaCB1cmwiIiIKIAotICAgICAgICAjIElmIHRoZSBjaGVja291dCBkb2Vzbid0IGV4aXN0IGFuZCB0aGUgbWlycm9yIHRhcmJhbGwgZG9lcywgZXh0cmFjdCBpdAotICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModWQuY2xvbmVkaXIpIGFuZCBvcy5wYXRoLmV4aXN0cyh1ZC5mdWxsbWlycm9yKToKKyAgICAgICAgbm9fY2xvbmUgPSBub3Qgb3MucGF0aC5leGlzdHModWQuY2xvbmVkaXIpCisgICAgICAgIG5lZWRfdXBkYXRlID0gbm9fY2xvbmUgb3Igc2VsZi5uZWVkX3VwZGF0ZSh1ZCwgZCkKKworICAgICAgICAjIEEgY3VycmVudCBjbG9uZSBpcyBwcmVmZXJyZWQgdG8gZWl0aGVyIHRhcmJhbGwsIGEgc2hhbGxvdyB0YXJiYWxsIGlzCisgICAgICAgICMgcHJlZmVycmVkIHRvIGFuIG91dCBvZiBkYXRlIGNsb25lLCBhbmQgYSBtaXNzaW5nIGNsb25lIHdpbGwgdXNlCisgICAgICAgICMgZWl0aGVyIHRhcmJhbGwuCisgICAgICAgIGlmIHVkLnNoYWxsb3cgYW5kIG9zLnBhdGguZXhpc3RzKHVkLmZ1bGxzaGFsbG93KSBhbmQgbmVlZF91cGRhdGU6CisgICAgICAgICAgICB1ZC5sb2NhbHBhdGggPSB1ZC5mdWxsc2hhbGxvdworICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHModWQuZnVsbG1pcnJvcikgYW5kIG5vX2Nsb25lOgogICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHVkLmNsb25lZGlyKQogICAgICAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAteHpmICVzIiAlIHVkLmZ1bGxtaXJyb3IsIGQsIHdvcmtkaXI9dWQuY2xvbmVkaXIpCiAKQEAgLTI4NCw5ICszNzQsMjEgQEAKICAgICAgICAgICAgICAgICByYWlzZSBiYi5mZXRjaDIuRmV0Y2hFcnJvcigiVW5hYmxlIHRvIGZpbmQgcmV2aXNpb24gJXMgaW4gYnJhbmNoICVzIGV2ZW4gZnJvbSB1cHN0cmVhbSIgJSAodWQucmV2aXNpb25zW25hbWVdLCB1ZC5icmFuY2hlc1tuYW1lXSkpCiAKICAgICBkZWYgYnVpbGRfbWlycm9yX2RhdGEoc2VsZiwgdWQsIGQpOgotICAgICAgICAjIEdlbmVyYXRlIGEgbWlycm9yIHRhcmJhbGwgaWYgbmVlZGVkCi0gICAgICAgIGlmIHVkLndyaXRlX3RhcmJhbGxzIGFuZCBub3Qgb3MucGF0aC5leGlzdHModWQuZnVsbG1pcnJvcik6Ci0gICAgICAgICAgICAjIGl0J3MgcG9zc2libGUgdGhhdCB0aGlzIHN5bWxpbmsgcG9pbnRzIHRvIHJlYWQtb25seSBmaWxlc3lzdGVtIHdpdGggUFJFTUlSUk9SCisgICAgICAgIGlmIHVkLnNoYWxsb3cgYW5kIHVkLndyaXRlX3NoYWxsb3dfdGFyYmFsbHM6CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModWQuZnVsbHNoYWxsb3cpOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKHVkLmZ1bGxzaGFsbG93KToKKyAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKHVkLmZ1bGxzaGFsbG93KQorICAgICAgICAgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKGRpcj1kLmdldFZhcignRExfRElSJykpCisgICAgICAgICAgICAgICAgc2hhbGxvd2Nsb25lID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdnaXQnKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jbG9uZV9zaGFsbG93X2xvY2FsKHVkLCBzaGFsbG93Y2xvbmUsIGQpCisKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkNyZWF0aW5nIHRhcmJhbGwgb2YgZ2l0IHJlcG9zaXRvcnkiKQorICAgICAgICAgICAgICAgICAgICBydW5mZXRjaGNtZCgidGFyIC1jemYgJXMgLiIgJSB1ZC5mdWxsc2hhbGxvdywgZCwgd29ya2Rpcj1zaGFsbG93Y2xvbmUpCisgICAgICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCJ0b3VjaCAlcy5kb25lIiAlIHVkLmZ1bGxzaGFsbG93LCBkKQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh0ZW1wZGlyLCByZWN1cnNlPVRydWUpCisgICAgICAgIGVsaWYgdWQud3JpdGVfdGFyYmFsbHMgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyh1ZC5mdWxsbWlycm9yKToKICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKHVkLmZ1bGxtaXJyb3IpOgogICAgICAgICAgICAgICAgIG9zLnVubGluayh1ZC5mdWxsbWlycm9yKQogCkBAIC0yOTQsNiArMzk2LDYyIEBACiAgICAgICAgICAgICBydW5mZXRjaGNtZCgidGFyIC1jemYgJXMgLiIgJSB1ZC5mdWxsbWlycm9yLCBkLCB3b3JrZGlyPXVkLmNsb25lZGlyKQogICAgICAgICAgICAgcnVuZmV0Y2hjbWQoInRvdWNoICVzLmRvbmUiICUgdWQuZnVsbG1pcnJvciwgZCkKIAorICAgIGRlZiBjbG9uZV9zaGFsbG93X2xvY2FsKHNlbGYsIHVkLCBkZXN0LCBkKToKKyAgICAgICAgIiIiQ2xvbmUgdGhlIHJlcG8gYW5kIG1ha2UgaXQgc2hhbGxvdy4KKworICAgICAgICBUaGUgdXBzdHJlYW0gdXJsIG9mIHRoZSBuZXcgY2xvbmUgaXNuJ3Qgc2V0IGF0IHRoaXMgdGltZSwgYXMgaXQnbGwgYmUKKyAgICAgICAgc2V0IGNvcnJlY3RseSB3aGVuIHVucGFja2VkLiIiIgorICAgICAgICBydW5mZXRjaGNtZCgiJXMgY2xvbmUgJXMgJXMgJXMiICUgKHVkLmJhc2VjbWQsIHVkLmNsb25lZmxhZ3MsIHVkLmNsb25lZGlyLCBkZXN0KSwgZCkKKworICAgICAgICB0b19wYXJzZSwgc2hhbGxvd19icmFuY2hlcyA9IFtdLCBbXQorICAgICAgICBmb3IgbmFtZSBpbiB1ZC5uYW1lczoKKyAgICAgICAgICAgIHJldmlzaW9uID0gdWQucmV2aXNpb25zW25hbWVdCisgICAgICAgICAgICBkZXB0aCA9IHVkLnNoYWxsb3dfZGVwdGhzW25hbWVdCisgICAgICAgICAgICBpZiBkZXB0aDoKKyAgICAgICAgICAgICAgICB0b19wYXJzZS5hcHBlbmQoJyVzfiVkXnt9JyAlIChyZXZpc2lvbiwgZGVwdGggLSAxKSkKKworICAgICAgICAgICAgIyBGb3Igbm9icmFuY2gsIHdlIG5lZWQgYSByZWYsIG90aGVyd2lzZSB0aGUgY29tbWl0cyB3aWxsIGJlCisgICAgICAgICAgICAjIHJlbW92ZWQsIGFuZCBmb3Igbm9uLW5vYnJhbmNoLCB3ZSB0cnVuY2F0ZSB0aGUgYnJhbmNoIHRvIG91cgorICAgICAgICAgICAgIyBzcmNyZXYsIHRvIGF2b2lkIGtlZXBpbmcgdW5uZWNlc3NhcnkgaGlzdG9yeSBiZXlvbmQgdGhhdC4KKyAgICAgICAgICAgIGJyYW5jaCA9IHVkLmJyYW5jaGVzW25hbWVdCisgICAgICAgICAgICBpZiB1ZC5ub2JyYW5jaDoKKyAgICAgICAgICAgICAgICByZWYgPSAicmVmcy9zaGFsbG93LyVzIiAlIG5hbWUKKyAgICAgICAgICAgIGVsaWYgdWQuYmFyZWNsb25lOgorICAgICAgICAgICAgICAgIHJlZiA9ICJyZWZzL2hlYWRzLyVzIiAlIGJyYW5jaAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZWYgPSAicmVmcy9yZW1vdGVzL29yaWdpbi8lcyIgJSBicmFuY2gKKworICAgICAgICAgICAgc2hhbGxvd19icmFuY2hlcy5hcHBlbmQocmVmKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIHVwZGF0ZS1yZWYgJXMgJXMiICUgKHVkLmJhc2VjbWQsIHJlZiwgcmV2aXNpb24pLCBkLCB3b3JrZGlyPWRlc3QpCisKKyAgICAgICAgIyBNYXAgc3JjcmV2K2RlcHRocyB0byByZXZpc2lvbnMKKyAgICAgICAgcGFyc2VkX2RlcHRocyA9IHJ1bmZldGNoY21kKCIlcyByZXYtcGFyc2UgJXMiICUgKHVkLmJhc2VjbWQsICIgIi5qb2luKHRvX3BhcnNlKSksIGQsIHdvcmtkaXI9ZGVzdCkKKworICAgICAgICAjIFJlc29sdmUgc3BlY2lmaWVkIHJldmlzaW9ucworICAgICAgICBwYXJzZWRfcmV2cyA9IHJ1bmZldGNoY21kKCIlcyByZXYtcGFyc2UgJXMiICUgKHVkLmJhc2VjbWQsICIgIi5qb2luKCciJXNee30iJyAlIHIgZm9yIHIgaW4gdWQuc2hhbGxvd19yZXZzKSksIGQsIHdvcmtkaXI9ZGVzdCkKKyAgICAgICAgc2hhbGxvd19yZXZpc2lvbnMgPSBwYXJzZWRfZGVwdGhzLnNwbGl0bGluZXMoKSArIHBhcnNlZF9yZXZzLnNwbGl0bGluZXMoKQorCisgICAgICAgICMgQXBwbHkgZXh0cmEgcmVmIHdpbGRjYXJkcworICAgICAgICBhbGxfcmVmcyA9IHJ1bmZldGNoY21kKCclcyBmb3ItZWFjaC1yZWYgIi0tZm9ybWF0PSUlKHJlZm5hbWUpIicgJSB1ZC5iYXNlY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQsIHdvcmtkaXI9ZGVzdCkuc3BsaXRsaW5lcygpCisgICAgICAgIGZvciByIGluIHVkLnNoYWxsb3dfZXh0cmFfcmVmczoKKyAgICAgICAgICAgIGlmIG5vdCB1ZC5iYXJlY2xvbmU6CisgICAgICAgICAgICAgICAgciA9IHIucmVwbGFjZSgncmVmcy9oZWFkcy8nLCAncmVmcy9yZW1vdGVzL29yaWdpbi8nKQorCisgICAgICAgICAgICBpZiAnKicgaW4gcjoKKyAgICAgICAgICAgICAgICBtYXRjaGVzID0gZmlsdGVyKGxhbWJkYSBhOiBmbm1hdGNoLmZubWF0Y2hjYXNlKGEsIHIpLCBhbGxfcmVmcykKKyAgICAgICAgICAgICAgICBzaGFsbG93X2JyYW5jaGVzLmV4dGVuZChtYXRjaGVzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzaGFsbG93X2JyYW5jaGVzLmFwcGVuZChyKQorCisgICAgICAgICMgTWFrZSB0aGUgcmVwb3NpdG9yeSBzaGFsbG93CisgICAgICAgIHNoYWxsb3dfY21kID0gWydnaXQnLCAnbWFrZS1zaGFsbG93JywgJy1zJ10KKyAgICAgICAgZm9yIGIgaW4gc2hhbGxvd19icmFuY2hlczoKKyAgICAgICAgICAgIHNoYWxsb3dfY21kLmFwcGVuZCgnLXInKQorICAgICAgICAgICAgc2hhbGxvd19jbWQuYXBwZW5kKGIpCisgICAgICAgIHNoYWxsb3dfY21kLmV4dGVuZChzaGFsbG93X3JldmlzaW9ucykKKyAgICAgICAgcnVuZmV0Y2hjbWQoc3VicHJvY2Vzcy5saXN0MmNtZGxpbmUoc2hhbGxvd19jbWQpLCBkLCB3b3JrZGlyPWRlc3QpCisKICAgICBkZWYgdW5wYWNrKHNlbGYsIHVkLCBkZXN0ZGlyLCBkKToKICAgICAgICAgIiIiIHVucGFjayB0aGUgZG93bmxvYWRlZCBzcmMgdG8gZGVzdGRpciIiIgogCkBAIC0zMTAsMTEgKzQ2OCwxMiBAQAogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkZXN0ZGlyKToKICAgICAgICAgICAgIGJiLnV0aWxzLnBydW5lZGlyKGRlc3RkaXIpCiAKLSAgICAgICAgY2xvbmVmbGFncyA9ICItcyAtbiIKLSAgICAgICAgaWYgdWQuYmFyZWNsb25lOgotICAgICAgICAgICAgY2xvbmVmbGFncyArPSAiIC0tbWlycm9yIgorICAgICAgICBpZiB1ZC5zaGFsbG93IGFuZCAobm90IG9zLnBhdGguZXhpc3RzKHVkLmNsb25lZGlyKSBvciBzZWxmLm5lZWRfdXBkYXRlKHVkLCBkKSk6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZGVzdGRpcikKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCJ0YXIgLXh6ZiAlcyIgJSB1ZC5mdWxsc2hhbGxvdywgZCwgd29ya2Rpcj1kZXN0ZGlyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIGNsb25lICVzICVzLyAlcyIgJSAodWQuYmFzZWNtZCwgdWQuY2xvbmVmbGFncywgdWQuY2xvbmVkaXIsIGRlc3RkaXIpLCBkKQogCi0gICAgICAgIHJ1bmZldGNoY21kKCIlcyBjbG9uZSAlcyAlcy8gJXMiICUgKHVkLmJhc2VjbWQsIGNsb25lZmxhZ3MsIHVkLmNsb25lZGlyLCBkZXN0ZGlyKSwgZCkKICAgICAgICAgcmVwb3VybCA9IHNlbGYuX2dldF9yZXBvX3VybCh1ZCkKICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIHJlbW90ZSBzZXQtdXJsIG9yaWdpbiAlcyIgJSAodWQuYmFzZWNtZCwgcmVwb3VybCksIGQsIHdvcmtkaXI9ZGVzdGRpcikKICAgICAgICAgaWYgbm90IHVkLm5vY2hlY2tvdXQ6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2dpdGFubmV4LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9naXRhbm5leC5weQppbmRleCBjNjZjMjExLi5hOWI2OWNhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2dpdGFubmV4LnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvZ2l0YW5uZXgucHkKQEAgLTMzLDYgKzMzLDExIEBACiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gdWQudHlwZSBpbiBbJ2dpdGFubmV4J10KIAorICAgIGRlZiB1cmxkYXRhX2luaXQoc2VsZiwgdWQsIGQpOgorICAgICAgICBzdXBlcihHaXRBTk5FWCwgc2VsZikudXJsZGF0YV9pbml0KHVkLCBkKQorICAgICAgICBpZiB1ZC5zaGFsbG93OgorICAgICAgICAgICAgdWQuc2hhbGxvd19leHRyYV9yZWZzICs9IFsncmVmcy9oZWFkcy9naXQtYW5uZXgnLCAncmVmcy9oZWFkcy9zeW5jZWQvKiddCisKICAgICBkZWYgdXNlc19hbm5leChzZWxmLCB1ZCwgZCwgd2QpOgogICAgICAgICBmb3IgbmFtZSBpbiB1ZC5uYW1lczoKICAgICAgICAgICAgIHRyeToKQEAgLTU1LDkgKzYwLDIxIEBACiAgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVkLCBkKToKICAgICAgICAgR2l0LmRvd25sb2FkKHNlbGYsIHVkLCBkKQogCi0gICAgICAgIGFubmV4ID0gc2VsZi51c2VzX2FubmV4KHVkLCBkLCB1ZC5jbG9uZWRpcikKLSAgICAgICAgaWYgYW5uZXg6Ci0gICAgICAgICAgICBzZWxmLnVwZGF0ZV9hbm5leCh1ZCwgZCwgdWQuY2xvbmVkaXIpCisgICAgICAgIGlmIG5vdCB1ZC5zaGFsbG93IG9yIHVkLmxvY2FscGF0aCAhPSB1ZC5mdWxsc2hhbGxvdzoKKyAgICAgICAgICAgIGlmIHNlbGYudXNlc19hbm5leCh1ZCwgZCwgdWQuY2xvbmVkaXIpOgorICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlX2FubmV4KHVkLCBkLCB1ZC5jbG9uZWRpcikKKworICAgIGRlZiBjbG9uZV9zaGFsbG93X2xvY2FsKHNlbGYsIHVkLCBkZXN0LCBkKToKKyAgICAgICAgc3VwZXIoR2l0QU5ORVgsIHNlbGYpLmNsb25lX3NoYWxsb3dfbG9jYWwodWQsIGRlc3QsIGQpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIGFubmV4IGluaXQiICUgdWQuYmFzZWNtZCwgZCwgd29ya2Rpcj1kZXN0KQorICAgICAgICBleGNlcHQgYmIuZmV0Y2guRmV0Y2hFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBpZiBzZWxmLnVzZXNfYW5uZXgodWQsIGQsIGRlc3QpOgorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIGFubmV4IGdldCIgJSB1ZC5iYXNlY21kLCBkLCB3b3JrZGlyPWRlc3QpCisgICAgICAgICAgICBydW5mZXRjaGNtZCgiY2htb2QgdSt3IC1SICVzLy5naXQvYW5uZXgiICUgKGRlc3QpLCBkLCBxdWlldD1UcnVlLCB3b3JrZGlyPWRlc3QpCiAKICAgICBkZWYgdW5wYWNrKHNlbGYsIHVkLCBkZXN0ZGlyLCBkKToKICAgICAgICAgR2l0LnVucGFjayhzZWxmLCB1ZCwgZGVzdGRpciwgZCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvZ2l0c20ucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2dpdHNtLnB5CmluZGV4IGE5NTU4NGMuLjBhZmYxMDAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvZ2l0c20ucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9naXRzbS5weQpAQCAtMTE3LDE0ICsxMTcsMTkgQEAKICAgICBkZWYgZG93bmxvYWQoc2VsZiwgdWQsIGQpOgogICAgICAgICBHaXQuZG93bmxvYWQoc2VsZiwgdWQsIGQpCiAKLSAgICAgICAgc3VibW9kdWxlcyA9IHNlbGYudXNlc19zdWJtb2R1bGVzKHVkLCBkLCB1ZC5jbG9uZWRpcikKLSAgICAgICAgaWYgc3VibW9kdWxlczoKLSAgICAgICAgICAgIHNlbGYudXBkYXRlX3N1Ym1vZHVsZXModWQsIGQpCisgICAgICAgIGlmIG5vdCB1ZC5zaGFsbG93IG9yIHVkLmxvY2FscGF0aCAhPSB1ZC5mdWxsc2hhbGxvdzoKKyAgICAgICAgICAgIHN1Ym1vZHVsZXMgPSBzZWxmLnVzZXNfc3VibW9kdWxlcyh1ZCwgZCwgdWQuY2xvbmVkaXIpCisgICAgICAgICAgICBpZiBzdWJtb2R1bGVzOgorICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlX3N1Ym1vZHVsZXModWQsIGQpCisKKyAgICBkZWYgY2xvbmVfc2hhbGxvd19sb2NhbChzZWxmLCB1ZCwgZGVzdCwgZCk6CisgICAgICAgIHN1cGVyKEdpdFNNLCBzZWxmKS5jbG9uZV9zaGFsbG93X2xvY2FsKHVkLCBkZXN0LCBkKQorCisgICAgICAgIHJ1bmZldGNoY21kKCdjcCAtZnBQUkggIiVzL21vZHVsZXMiICIlcy8iJyAlICh1ZC5jbG9uZWRpciwgb3MucGF0aC5qb2luKGRlc3QsICcuZ2l0JykpLCBkKQogCiAgICAgZGVmIHVucGFjayhzZWxmLCB1ZCwgZGVzdGRpciwgZCk6CiAgICAgICAgIEdpdC51bnBhY2soc2VsZiwgdWQsIGRlc3RkaXIsIGQpCi0gICAgICAgIAotICAgICAgICBzdWJtb2R1bGVzID0gc2VsZi51c2VzX3N1Ym1vZHVsZXModWQsIGQsIHVkLmRlc3RkaXIpCi0gICAgICAgIGlmIHN1Ym1vZHVsZXM6CisKKyAgICAgICAgaWYgc2VsZi51c2VzX3N1Ym1vZHVsZXModWQsIGQsIHVkLmRlc3RkaXIpOgogICAgICAgICAgICAgcnVuZmV0Y2hjbWQodWQuYmFzZWNtZCArICIgY2hlY2tvdXQgIiArIHVkLnJldmlzaW9uc1t1ZC5uYW1lc1swXV0sIGQsIHdvcmtkaXI9dWQuZGVzdGRpcikKICAgICAgICAgICAgIHJ1bmZldGNoY21kKHVkLmJhc2VjbWQgKyAiIHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlIiwgZCwgd29ya2Rpcj11ZC5kZXN0ZGlyKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9oZy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvaGcucHkKaW5kZXggYjVmMjY4Ni4uZDA4NTdlNiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9oZy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2hnLnB5CkBAIC03Niw4ICs3Niw5IEBACiAgICAgICAgICMgQ3JlYXRlIHBhdGhzIHRvIG1lcmN1cmlhbCBjaGVja291dHMKICAgICAgICAgaGdzcmNuYW1lID0gJyVzXyVzXyVzJyAlICh1ZC5tb2R1bGUucmVwbGFjZSgnLycsICcuJyksIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZC5ob3N0LCB1ZC5wYXRoLnJlcGxhY2UoJy8nLCAnLicpKQotICAgICAgICB1ZC5taXJyb3J0YXJiYWxsID0gJ2hnXyVzLnRhci5neicgJSBoZ3NyY25hbWUKLSAgICAgICAgdWQuZnVsbG1pcnJvciA9IG9zLnBhdGguam9pbihkLmdldFZhcigiRExfRElSIiksIHVkLm1pcnJvcnRhcmJhbGwpCisgICAgICAgIG1pcnJvcnRhcmJhbGwgPSAnaGdfJXMudGFyLmd6JyAlIGhnc3JjbmFtZQorICAgICAgICB1ZC5mdWxsbWlycm9yID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJETF9ESVIiKSwgbWlycm9ydGFyYmFsbCkKKyAgICAgICAgdWQubWlycm9ydGFyYmFsbHMgPSBbbWlycm9ydGFyYmFsbF0KIAogICAgICAgICBoZ2RpciA9IGQuZ2V0VmFyKCJIR0RJUiIpIG9yIChkLmdldFZhcigiRExfRElSIikgKyAiL2hnLyIpCiAgICAgICAgIHVkLnBrZ2RpciA9IG9zLnBhdGguam9pbihoZ2RpciwgaGdzcmNuYW1lKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9ucG0ucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL25wbS5weQppbmRleCA3M2E3NWZlLi5iNWYxNDhjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL25wbS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL25wbS5weQpAQCAtOTEsOSArOTEsMTAgQEAKICAgICAgICAgdWQucHJlZml4ZGlyID0gcHJlZml4ZGlyCiAKICAgICAgICAgdWQud3JpdGVfdGFyYmFsbHMgPSAoKGQuZ2V0VmFyKCJCQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMiKSBvciAiMCIpICE9ICIwIikKLSAgICAgICAgdWQubWlycm9ydGFyYmFsbCA9ICducG1fJXMtJXMudGFyLnh6JyAlICh1ZC5wa2duYW1lLCB1ZC52ZXJzaW9uKQotICAgICAgICB1ZC5taXJyb3J0YXJiYWxsID0gdWQubWlycm9ydGFyYmFsbC5yZXBsYWNlKCcvJywgJy0nKQotICAgICAgICB1ZC5mdWxsbWlycm9yID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJETF9ESVIiKSwgdWQubWlycm9ydGFyYmFsbCkKKyAgICAgICAgbWlycm9ydGFyYmFsbCA9ICducG1fJXMtJXMudGFyLnh6JyAlICh1ZC5wa2duYW1lLCB1ZC52ZXJzaW9uKQorICAgICAgICBtaXJyb3J0YXJiYWxsID0gbWlycm9ydGFyYmFsbC5yZXBsYWNlKCcvJywgJy0nKQorICAgICAgICB1ZC5mdWxsbWlycm9yID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJETF9ESVIiKSwgbWlycm9ydGFyYmFsbCkKKyAgICAgICAgdWQubWlycm9ydGFyYmFsbHMgPSBbbWlycm9ydGFyYmFsbF0KIAogICAgIGRlZiBuZWVkX3VwZGF0ZShzZWxmLCB1ZCwgZCk6CiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHVkLmxvY2FscGF0aCk6CkBAIC0yNjIsMjYgKzI2MywyNyBAQAogICAgICAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAteEpmICVzIiAlICh1ZC5mdWxsbWlycm9yKSwgZCwgd29ya2Rpcj1kZXN0KQogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgc2h3cmYgPSBkLmdldFZhcignTlBNX1NIUklOS1dSQVAnKQotICAgICAgICBsb2dnZXIuZGVidWcoMiwgIk5QTSBzaHJpbmt3cmFwIGZpbGUgaXMgJXMiICUgc2h3cmYpCi0gICAgICAgIGlmIHNod3JmOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHdpdGggb3BlbihzaHdyZikgYXMgZGF0YWZpbGU6Ci0gICAgICAgICAgICAgICAgICAgIHNocmlua29iaiA9IGpzb24ubG9hZChkYXRhZmlsZSkKLSAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCdFcnJvciBsb2FkaW5nIE5QTV9TSFJJTktXUkFQIGZpbGUgIiVzIiBmb3IgJXM6ICVzJyAlIChzaHdyZiwgdWQucGtnbmFtZSwgc3RyKGUpKSkKLSAgICAgICAgZWxpZiBub3QgdWQuaWdub3JlX2NoZWNrc3VtczoKLSAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdNaXNzaW5nIHNocmlua3dyYXAgZmlsZSBpbiBOUE1fU0hSSU5LV1JBUCBmb3IgJXMsIHRoaXMgd2lsbCBsZWFkIHRvIHVucmVsaWFibGUgYnVpbGRzIScgJSB1ZC5wa2duYW1lKQotICAgICAgICBsY2tkZiA9IGQuZ2V0VmFyKCdOUE1fTE9DS0RPV04nKQotICAgICAgICBsb2dnZXIuZGVidWcoMiwgIk5QTSBsb2NrZG93biBmaWxlIGlzICVzIiAlIGxja2RmKQotICAgICAgICBpZiBsY2tkZjoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4obGNrZGYpIGFzIGRhdGFmaWxlOgotICAgICAgICAgICAgICAgICAgICBsb2NrZG93biA9IGpzb24ubG9hZChkYXRhZmlsZSkKLSAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCdFcnJvciBsb2FkaW5nIE5QTV9MT0NLRE9XTiBmaWxlICIlcyIgZm9yICVzOiAlcycgJSAobGNrZGYsIHVkLnBrZ25hbWUsIHN0cihlKSkpCi0gICAgICAgIGVsaWYgbm90IHVkLmlnbm9yZV9jaGVja3N1bXM6Ci0gICAgICAgICAgICBsb2dnZXIud2FybmluZygnTWlzc2luZyBsb2NrZG93biBmaWxlIGluIE5QTV9MT0NLRE9XTiBmb3IgJXMsIHRoaXMgd2lsbCBsZWFkIHRvIHVucmVwcm9kdWNpYmxlIGJ1aWxkcyEnICUgdWQucGtnbmFtZSkKKyAgICAgICAgaWYgdWQucGFybS5nZXQoIm5vdmVyaWZ5IiwgTm9uZSkgIT0gJzEnOgorICAgICAgICAgICAgc2h3cmYgPSBkLmdldFZhcignTlBNX1NIUklOS1dSQVAnKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJOUE0gc2hyaW5rd3JhcCBmaWxlIGlzICVzIiAlIHNod3JmKQorICAgICAgICAgICAgaWYgc2h3cmY6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc2h3cmYpIGFzIGRhdGFmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2hyaW5rb2JqID0ganNvbi5sb2FkKGRhdGFmaWxlKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcignRXJyb3IgbG9hZGluZyBOUE1fU0hSSU5LV1JBUCBmaWxlICIlcyIgZm9yICVzOiAlcycgJSAoc2h3cmYsIHVkLnBrZ25hbWUsIHN0cihlKSkpCisgICAgICAgICAgICBlbGlmIG5vdCB1ZC5pZ25vcmVfY2hlY2tzdW1zOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdNaXNzaW5nIHNocmlua3dyYXAgZmlsZSBpbiBOUE1fU0hSSU5LV1JBUCBmb3IgJXMsIHRoaXMgd2lsbCBsZWFkIHRvIHVucmVsaWFibGUgYnVpbGRzIScgJSB1ZC5wa2duYW1lKQorICAgICAgICAgICAgbGNrZGYgPSBkLmdldFZhcignTlBNX0xPQ0tET1dOJykKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiTlBNIGxvY2tkb3duIGZpbGUgaXMgJXMiICUgbGNrZGYpCisgICAgICAgICAgICBpZiBsY2tkZjoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihsY2tkZikgYXMgZGF0YWZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZG93biA9IGpzb24ubG9hZChkYXRhZmlsZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoJ0Vycm9yIGxvYWRpbmcgTlBNX0xPQ0tET1dOIGZpbGUgIiVzIiBmb3IgJXM6ICVzJyAlIChsY2tkZiwgdWQucGtnbmFtZSwgc3RyKGUpKSkKKyAgICAgICAgICAgIGVsaWYgbm90IHVkLmlnbm9yZV9jaGVja3N1bXM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ01pc3NpbmcgbG9ja2Rvd24gZmlsZSBpbiBOUE1fTE9DS0RPV04gZm9yICVzLCB0aGlzIHdpbGwgbGVhZCB0byB1bnJlcHJvZHVjaWJsZSBidWlsZHMhJyAlIHVkLnBrZ25hbWUpCiAKICAgICAgICAgaWYgKCduYW1lJyBub3QgaW4gc2hyaW5rb2JqKToKICAgICAgICAgICAgIHNlbGYuX2dldGRlcGVuZGVuY2llcyh1ZC5wa2duYW1lLCBqc29uZGVwb2JqLCB1ZC52ZXJzaW9uLCBkLCB1ZCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvcmVwby5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvcmVwby5weQppbmRleCAxYmU5MWNjLi5jMjJkOWI1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3JlcG8ucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9yZXBvLnB5CkBAIC0yNyw2ICsyNyw3IEBACiBpbXBvcnQgYmIKIGZyb20gICBiYi5mZXRjaDIgaW1wb3J0IEZldGNoTWV0aG9kCiBmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgbG9nZ2VyCiAKIGNsYXNzIFJlcG8oRmV0Y2hNZXRob2QpOgogICAgICIiIkNsYXNzIHRvIGZldGNoIGEgbW9kdWxlIG9yIG1vZHVsZXMgZnJvbSByZXBvIChnaXQpIHJlcG9zaXRvcmllcyIiIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi93Z2V0LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi93Z2V0LnB5CmluZGV4IGFlMGZmYTguLjdjNDljMmIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvd2dldC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3dnZXQucHkKQEAgLTMwLDYgKzMwLDcgQEAKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgb3MKIGltcG9ydCBsb2dnaW5nCitpbXBvcnQgZXJybm8KIGltcG9ydCBiYgogaW1wb3J0IGJiLnByb2dyZXNzCiBpbXBvcnQgdXJsbGliLnJlcXVlc3QsIHVybGxpYi5wYXJzZSwgdXJsbGliLmVycm9yCkBAIC04OSwxMyArOTAsMTMgQEAKIAogICAgICAgICBzZWxmLmJhc2VjbWQgPSBkLmdldFZhcigiRkVUQ0hDTURfd2dldCIpIG9yICIvdXNyL2Jpbi9lbnYgd2dldCAtdCAyIC1UIDMwIC0tcGFzc2l2ZS1mdHAgLS1uby1jaGVjay1jZXJ0aWZpY2F0ZSIKIAotICAgIGRlZiBfcnVud2dldChzZWxmLCB1ZCwgZCwgY29tbWFuZCwgcXVpZXQpOgorICAgIGRlZiBfcnVud2dldChzZWxmLCB1ZCwgZCwgY29tbWFuZCwgcXVpZXQsIHdvcmtkaXI9Tm9uZSk6CiAKICAgICAgICAgcHJvZ3Jlc3NoYW5kbGVyID0gV2dldFByb2dyZXNzSGFuZGxlcihkKQogCiAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiRmV0Y2hpbmcgJXMgdXNpbmcgY29tbWFuZCAnJXMnIiAlICh1ZC51cmwsIGNvbW1hbmQpKQogICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgY29tbWFuZCwgdWQudXJsKQotICAgICAgICBydW5mZXRjaGNtZChjb21tYW5kICsgJyAtLXByb2dyZXNzPWRvdCAtdicsIGQsIHF1aWV0LCBsb2c9cHJvZ3Jlc3NoYW5kbGVyKQorICAgICAgICBydW5mZXRjaGNtZChjb21tYW5kICsgJyAtLXByb2dyZXNzPWRvdCAtdicsIGQsIHF1aWV0LCBsb2c9cHJvZ3Jlc3NoYW5kbGVyLCB3b3JrZGlyPXdvcmtkaXIpCiAKICAgICBkZWYgZG93bmxvYWQoc2VsZiwgdWQsIGQpOgogICAgICAgICAiIiJGZXRjaCB1cmxzIiIiCkBAIC0yMDYsOCArMjA3LDIxIEBACiAgICAgICAgICAgICAgICAgICAgIGgucmVxdWVzdChyZXEuZ2V0X21ldGhvZCgpLCByZXEuc2VsZWN0b3IsIHJlcS5kYXRhLCBoZWFkZXJzKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOiAjIFhYWCB3aGF0IGVycm9yPwogICAgICAgICAgICAgICAgICAgICAjIERvbid0IGNsb3NlIGNvbm5lY3Rpb24gd2hlbiBjYWNoZSBpcyBlbmFibGVkLgorICAgICAgICAgICAgICAgICAgICAjIEluc3RlYWQsIHRyeSB0byBkZXRlY3QgY29ubmVjdGlvbnMgdGhhdCBhcmUgbm8gbG9uZ2VyCisgICAgICAgICAgICAgICAgICAgICMgdXNhYmxlIChmb3IgZXhhbXBsZSwgY2xvc2VkIHVuZXhwZWN0ZWRseSkgYW5kIHJlbW92ZQorICAgICAgICAgICAgICAgICAgICAjIHRoZW0gZnJvbSB0aGUgY2FjaGUuCiAgICAgICAgICAgICAgICAgICAgIGlmIGZldGNoLmNvbm5lY3Rpb25fY2FjaGUgaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICAgICAgIGguY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXJyLCBPU0Vycm9yKSBhbmQgZXJyLmVycm5vID09IGVycm5vLkVCQURGOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgc2VydmVyIGNsb3NlcyB0aGUgY29ubmVjdGlvbiBkZXNwaXRlIHRoZSBLZWVwLUFsaXZlLgorICAgICAgICAgICAgICAgICAgICAgICAgIyBBcHBhcmVudGx5IHVybGxpYiB0aGVuIHVzZXMgdGhlIGZpbGUgZGVzY3JpcHRvciwgZXhwZWN0aW5nIGl0IHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbm5lY3RlZCwgd2hlbiBpbiByZWFsaXR5IHRoZSBjb25uZWN0aW9uIGlzIGFscmVhZHkgZ29uZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgbGV0IHRoZSByZXF1ZXN0IGZhaWwgYW5kIGV4cGVjdCBpdCB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgIyB0cmllZCBvbmNlIG1vcmUgKCJ0cnlfYWdhaW4iIGluIGNoZWNrX3N0YXR1cygpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICMgd2l0aCB0aGUgZGVhZCBjb25uZWN0aW9uIHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUuCisgICAgICAgICAgICAgICAgICAgICAgICAjIElmIGl0IHN0aWxsIGZhaWxzLCB3ZSBnaXZlIHVwLCB3aGljaCBjYW4gaGFwcGVuZCBmb3IgYmFkCisgICAgICAgICAgICAgICAgICAgICAgICAjIEhUVFAgcHJveHkgc2V0dGluZ3MuCisgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaC5jb25uZWN0aW9uX2NhY2hlLnJlbW92ZV9jb25uZWN0aW9uKGguaG9zdCwgaC5wb3J0KQogICAgICAgICAgICAgICAgICAgICByYWlzZSB1cmxsaWIuZXJyb3IuVVJMRXJyb3IoZXJyKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHRyeToKQEAgLTI2OSwxMSArMjgzLDYgQEAKICAgICAgICAgICAgICIiIgogICAgICAgICAgICAgaHR0cF9lcnJvcl80MDMgPSBodHRwX2Vycm9yXzQwNQogCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgICAgIFNvbWUgc2VydmVycyAoZS5nLiBGdXNpb25Gb3JnZSkgcmV0dXJucyA0MDYgTm90IEFjY2VwdGFibGUgd2hlbiB0aGV5Ci0gICAgICAgICAgICBhY3R1YWxseSBtZWFuIDQwNSBNZXRob2QgTm90IEFsbG93ZWQuCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgICAgIGh0dHBfZXJyb3JfNDA2ID0gaHR0cF9lcnJvcl80MDUKIAogICAgICAgICBjbGFzcyBGaXhlZEhUVFBSZWRpcmVjdEhhbmRsZXIodXJsbGliLnJlcXVlc3QuSFRUUFJlZGlyZWN0SGFuZGxlcik6CiAgICAgICAgICAgICAiIiIKQEAgLTMwMiw3ICszMTEsOSBAQAogICAgICAgICAgICAgdXJpID0gdWQudXJsLnNwbGl0KCI7IilbMF0KICAgICAgICAgICAgIHIgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KHVyaSkKICAgICAgICAgICAgIHIuZ2V0X21ldGhvZCA9IGxhbWJkYTogIkhFQUQiCi0KKyAgICAgICAgICAgICMgU29tZSBzZXJ2ZXJzIChGdXNpb25Gb3JnZSwgYXMgdXNlZCBvbiBBbGlvdGgpIHJlcXVpcmUgdGhhdCB0aGUKKyAgICAgICAgICAgICMgb3B0aW9uYWwgQWNjZXB0IGhlYWRlciBpcyBzZXQuCisgICAgICAgICAgICByLmFkZF9oZWFkZXIoIkFjY2VwdCIsICIqLyoiKQogICAgICAgICAgICAgZGVmIGFkZF9iYXNpY19hdXRoKGxvZ2luX3N0ciwgcmVxdWVzdCk6CiAgICAgICAgICAgICAgICAgJycnQWRkcyBCYXNpYyBhdXRoIHRvIGh0dHAgcmVxdWVzdCwgcGFzcyBpbiBsb2dpbjpwYXNzd29yZCBhcyBzdHJpbmcnJycKICAgICAgICAgICAgICAgICBpbXBvcnQgYmFzZTY0CkBAIC00MDgsMTcgKzQxOSwxNiBAQAogICAgICAgICBSdW4gZmV0Y2ggY2hlY2tzdGF0dXMgdG8gZ2V0IGRpcmVjdG9yeSBpbmZvcm1hdGlvbgogICAgICAgICAiIiIKICAgICAgICAgZiA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgIHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KHByZWZpeD0id2dldC1pbmRleC0iKSBhcyB3b3JrZGlyLCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoZGlyPXdvcmtkaXIsIHByZWZpeD0id2dldC1saXN0aW5nLSIpIGFzIGY6CisgICAgICAgICAgICBhZ2VudCA9ICJNb3ppbGxhLzUuMCAoWDExOyBVOyBMaW51eCBpNjg2OyBlbi1VUzsgcnY6MS45LjIuMTIpIEdlY2tvLzIwMTAxMDI3IFVidW50dS85LjEwIChrYXJtaWMpIEZpcmVmb3gvMy42LjEyIgorICAgICAgICAgICAgZmV0Y2hjbWQgPSBzZWxmLmJhc2VjbWQKKyAgICAgICAgICAgIGZldGNoY21kICs9ICIgLU8gIiArIGYubmFtZSArICIgLS11c2VyLWFnZW50PSciICsgYWdlbnQgKyAiJyAnIiArIHVyaSArICInIgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX3J1bndnZXQodWQsIGQsIGZldGNoY21kLCBUcnVlLCB3b3JrZGlyPXdvcmtkaXIpCisgICAgICAgICAgICAgICAgZmV0Y2hyZXN1bHQgPSBmLnJlYWQoKQorICAgICAgICAgICAgZXhjZXB0IGJiLmZldGNoMi5CQkZldGNoRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIGZldGNocmVzdWx0ID0gIiIKIAotICAgICAgICBhZ2VudCA9ICJNb3ppbGxhLzUuMCAoWDExOyBVOyBMaW51eCBpNjg2OyBlbi1VUzsgcnY6MS45LjIuMTIpIEdlY2tvLzIwMTAxMDI3IFVidW50dS85LjEwIChrYXJtaWMpIEZpcmVmb3gvMy42LjEyIgotICAgICAgICBmZXRjaGNtZCA9IHNlbGYuYmFzZWNtZAotICAgICAgICBmZXRjaGNtZCArPSAiIC1PICIgKyBmLm5hbWUgKyAiIC0tdXNlci1hZ2VudD0nIiArIGFnZW50ICsgIicgJyIgKyB1cmkgKyAiJyIKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5fcnVud2dldCh1ZCwgZCwgZmV0Y2hjbWQsIFRydWUpCi0gICAgICAgICAgICBmZXRjaHJlc3VsdCA9IGYucmVhZCgpCi0gICAgICAgIGV4Y2VwdCBiYi5mZXRjaDIuQkJGZXRjaEV4Y2VwdGlvbjoKLSAgICAgICAgICAgIGZldGNocmVzdWx0ID0gIiIKLQotICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgcmV0dXJuIGZldGNocmVzdWx0CiAKICAgICBkZWYgX2NoZWNrX2xhdGVzdF92ZXJzaW9uKHNlbGYsIHVybCwgcGFja2FnZSwgcGFja2FnZV9yZWdleCwgY3VycmVudF92ZXJzaW9uLCB1ZCwgZCk6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvbWFpbi5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9tYWluLnB5CmluZGV4IDhjOTQ4YzIuLjc3MTFiMjkgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9tYWluLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9tYWluLnB5CkBAIC0yOCw2ICsyOCw4IEBACiBpbXBvcnQgb3B0cGFyc2UKIGltcG9ydCB3YXJuaW5ncwogaW1wb3J0IGZjbnRsCitpbXBvcnQgdGltZQoraW1wb3J0IHRyYWNlYmFjawogCiBpbXBvcnQgYmIKIGZyb20gYmIgaW1wb3J0IGV2ZW50CkBAIC0zNywxMSArMzksMTcgQEAKIGZyb20gYmIgaW1wb3J0IHNlcnZlcgogZnJvbSBiYiBpbXBvcnQgY29va2VyZGF0YQogCitpbXBvcnQgYmIuc2VydmVyLnByb2Nlc3MKK2ltcG9ydCBiYi5zZXJ2ZXIueG1scnBjY2xpZW50CisKIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlIikKIAogY2xhc3MgQkJNYWluRXhjZXB0aW9uKEV4Y2VwdGlvbik6CiAgICAgcGFzcwogCitjbGFzcyBCQk1haW5GYXRhbChiYi5CQkhhbmRsZWRFeGNlcHRpb24pOgorICAgIHBhc3MKKwogZGVmIHByZXNlbnRfb3B0aW9ucyhvcHRpb25saXN0KToKICAgICBpZiBsZW4ob3B0aW9ubGlzdCkgPiAxOgogICAgICAgICByZXR1cm4gJyBvciAnLmpvaW4oWycsICcuam9pbihvcHRpb25saXN0WzotMV0pLCBvcHRpb25saXN0Wy0xXV0pCkBAIC01OCw5ICs2Niw2IEBACiAgICAgICAgIGlmIG9wdGlvbi5kZXN0ID09ICd1aSc6CiAgICAgICAgICAgICB2YWxpZF91aXMgPSBsaXN0X2V4dGVuc2lvbl9tb2R1bGVzKGJiLnVpLCAnbWFpbicpCiAgICAgICAgICAgICBvcHRpb24uaGVscCA9IG9wdGlvbi5oZWxwLnJlcGxhY2UoJ0BDSE9JQ0VTQCcsIHByZXNlbnRfb3B0aW9ucyh2YWxpZF91aXMpKQotICAgICAgICBlbGlmIG9wdGlvbi5kZXN0ID09ICdzZXJ2ZXJ0eXBlJzoKLSAgICAgICAgICAgIHZhbGlkX3NlcnZlcl90eXBlcyA9IGxpc3RfZXh0ZW5zaW9uX21vZHVsZXMoYmIuc2VydmVyLCAnQml0QmFrZVNlcnZlcicpCi0gICAgICAgICAgICBvcHRpb24uaGVscCA9IG9wdGlvbi5oZWxwLnJlcGxhY2UoJ0BDSE9JQ0VTQCcsIHByZXNlbnRfb3B0aW9ucyh2YWxpZF9zZXJ2ZXJfdHlwZXMpKQogCiAgICAgICAgIHJldHVybiBvcHRwYXJzZS5JbmRlbnRlZEhlbHBGb3JtYXR0ZXIuZm9ybWF0X29wdGlvbihzZWxmLCBvcHRpb24pCiAKQEAgLTE0OCwxMSArMTUzLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIGFuZCBhbnl0aGluZyBkZXBlbmRpbmcgb24gaXQgY2Fubm90IGJlIGJ1aWx0LCBhcyBtdWNoIGFzICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9zc2libGUgd2lsbCBiZSBidWlsdCBiZWZvcmUgc3RvcHBpbmcuIikKIAotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLWEiLCAiLS10cnlhbHRjb25maWdzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0idHJ5YWx0Y29uZmlncyIsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkNvbnRpbnVlIHdpdGggYnVpbGRzIGJ5IHRyeWluZyB0byB1c2UgYWx0ZXJuYXRpdmUgcHJvdmlkZXJzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2hlcmUgcG9zc2libGUuIikKLQogICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLWYiLCAiLS1mb3JjZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImZvcmNlIiwgZGVmYXVsdD1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRm9yY2UgdGhlIHNwZWNpZmllZCB0YXJnZXRzL3Rhc2sgdG8gcnVuIChpbnZhbGlkYXRpbmcgYW55ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhpc3Rpbmcgc3RhbXAgZmlsZSkuIikKQEAgLTIzOCwxMSArMjM4LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1vcy5lbnZpcm9uLmdldCgnQklUQkFLRV9VSScsICdrbm90dHknKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iVGhlIHVzZXIgaW50ZXJmYWNlIHRvIHVzZSAoQENIT0lDRVNAIC0gZGVmYXVsdCAlZGVmYXVsdCkuIikKIAotICAgICAgICAjIEBDSE9JQ0VTQCBpcyBzdWJzdGl0dXRlZCBvdXQgYnkgQml0YmFrZUhlbHBGb3JtYXR0ZXIgYWJvdmUKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi10IiwgIi0tc2VydmVydHlwZSIsIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJzZXJ2ZXJ0eXBlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1bInByb2Nlc3MiLCAieG1scnBjIl1bIkJCU0VSVkVSIiBpbiBvcy5lbnZpcm9uXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iQ2hvb3NlIHdoaWNoIHNlcnZlciB0eXBlIHRvIHVzZSAoQENIT0lDRVNAIC0gZGVmYXVsdCAlZGVmYXVsdCkuIikKLQogICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tdG9rZW4iLCBhY3Rpb249InN0b3JlIiwgZGVzdD0ieG1scnBjdG9rZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PW9zLmVudmlyb24uZ2V0KCJCQlRPS0VOIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlNwZWNpZnkgdGhlIGNvbm5lY3Rpb24gdG9rZW4gdG8gYmUgdXNlZCB3aGVuIGNvbm5lY3RpbmcgIgpAQCAtMjU4LDE1ICsyNTMsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUnVuIGJpdGJha2Ugd2l0aG91dCBhIFVJLCBvbmx5IHN0YXJ0aW5nIGEgc2VydmVyICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGNvb2tlcikgcHJvY2Vzcy4iKQogCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1mb3JlZ3JvdW5kIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUnVuIGJpdGJha2Ugc2VydmVyIGluIGZvcmVncm91bmQuIikKLQogICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLUIiLCAiLS1iaW5kIiwgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9ImJpbmQiLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJUaGUgbmFtZS9hZGRyZXNzIGZvciB0aGUgYml0YmFrZSBzZXJ2ZXIgdG8gYmluZCB0by4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJUaGUgbmFtZS9hZGRyZXNzIGZvciB0aGUgYml0YmFrZSB4bWxycGMgc2VydmVyIHRvIGJpbmQgdG8uIikKIAotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLVQiLCAiLS1pZGxlLXRpbWVvdXQiLCB0eXBlPWludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1pbnQob3MuZW52aXJvbi5nZXQoIkJCVElNRU9VVCIsICIwIikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJTZXQgdGltZW91dCB0byB1bmxvYWQgYml0YmFrZSBzZXJ2ZXIgZHVlIHRvIGluYWN0aXZpdHkiKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLVQiLCAiLS1pZGxlLXRpbWVvdXQiLCB0eXBlPWZsb2F0LCBkZXN0PSJzZXJ2ZXJfdGltZW91dCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9b3MuZ2V0ZW52KCJCQl9TRVJWRVJfVElNRU9VVCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJTZXQgdGltZW91dCB0byB1bmxvYWQgYml0YmFrZSBzZXJ2ZXIgZHVlIHRvIGluYWN0aXZpdHksICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldCB0byAtMSBtZWFucyBubyB1bmxvYWQsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZmF1bHQ6IEVudmlyb25tZW50IHZhcmlhYmxlIEJCX1NFUlZFUl9USU1FT1VULiIpCiAKICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLW5vLXNldHNjZW5lIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0ibm9zZXRzY2VuZSIsIGRlZmF1bHQ9RmFsc2UsCkBAIC0yODMsNyArMjc3LDcgQEAKIAogICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLW0iLCAiLS1raWxsLXNlcnZlciIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9ImtpbGxfc2VydmVyIiwgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iVGVybWluYXRlIHRoZSByZW1vdGUgc2VydmVyLiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlRlcm1pbmF0ZSBhbnkgcnVubmluZyBiaXRiYWtlIHNlcnZlci4iKQogCiAgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1vYnNlcnZlLW9ubHkiLCBhY3Rpb249InN0b3JlX3RydWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJvYnNlcnZlX29ubHkiLCBkZWZhdWx0PUZhbHNlLApAQCAtMzIyLDcwICszMTYsMjAgQEAKICAgICAgICAgICAgIGV2ZW50bG9nID0gImJpdGJha2VfZXZlbnRsb2dfJXMuanNvbiIgJSBkYXRldGltZS5ub3coKS5zdHJmdGltZSgiJVklbSVkJUglTSVTIikKICAgICAgICAgICAgIG9wdGlvbnMud3JpdGVldmVudGxvZyA9IGV2ZW50bG9nCiAKLSAgICAgICAgIyBpZiBCQlNFUlZFUiBzYXlzIHRvIGF1dG9kZXRlY3QsIGxldCdzIGRvIHRoYXQKLSAgICAgICAgaWYgb3B0aW9ucy5yZW1vdGVfc2VydmVyOgotICAgICAgICAgICAgcG9ydCA9IC0xCi0gICAgICAgICAgICBpZiBvcHRpb25zLnJlbW90ZV9zZXJ2ZXIgIT0gJ2F1dG9zdGFydCc6Ci0gICAgICAgICAgICAgICAgaG9zdCwgcG9ydCA9IG9wdGlvbnMucmVtb3RlX3NlcnZlci5zcGxpdCgiOiIsIDIpCisgICAgICAgIGlmIG9wdGlvbnMuYmluZDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjQ2hlY2tpbmcgdGhhdCB0aGUgcG9ydCBpcyBhIG51bWJlciBhbmQgaXMgYSAnOicgZGVsaW1pdGVkIHZhbHVlCisgICAgICAgICAgICAgICAgKGhvc3QsIHBvcnQpID0gb3B0aW9ucy5iaW5kLnNwbGl0KCc6JykKICAgICAgICAgICAgICAgICBwb3J0ID0gaW50KHBvcnQpCi0gICAgICAgICAgICAjIHVzZSBhdXRvbWF0aWMgcG9ydCBpZiBwb3J0IHNldCB0byAtMSwgbWVhbnMgcmVhZCBpdCBmcm9tCi0gICAgICAgICAgICAjIHRoZSBiaXRiYWtlLmxvY2sgZmlsZTsgdGhpcyBpcyBhIGJpdCB0cmlja3ksIGJ1dCB3ZSBhbHdheXMgZXhwZWN0Ci0gICAgICAgICAgICAjIHRvIGJlIGluIHRoZSBiYXNlIG9mIHRoZSBidWlsZCBkaXJlY3RvcnkgaWYgd2UgbmVlZCB0byBoYXZlIGEKLSAgICAgICAgICAgICMgY2hhbmNlIHRvIHN0YXJ0IHRoZSBzZXJ2ZXIgbGF0ZXIsIGFueXdheQotICAgICAgICAgICAgaWYgcG9ydCA9PSAtMToKLSAgICAgICAgICAgICAgICBsb2NrX2xvY2F0aW9uID0gIi4vYml0YmFrZS5sb2NrIgotICAgICAgICAgICAgICAgICMgd2UgdHJ5IHRvIHJlYWQgdGhlIGFkZHJlc3MgYXQgYWxsIHRpbWVzOyBpZiB0aGUgc2VydmVyIGlzIG5vdCBzdGFydGVkLAotICAgICAgICAgICAgICAgICMgd2UnbGwgdHJ5IHRvIHN0YXJ0IGl0IGFmdGVyIHRoZSBmaXJzdCBjb25uZWN0IGZhaWxzLCBiZWxvdwotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgbGYgPSBvcGVuKGxvY2tfbG9jYXRpb24sICdyJykKLSAgICAgICAgICAgICAgICAgICAgcmVtb3RlZGVmID0gbGYucmVhZGxpbmUoKQotICAgICAgICAgICAgICAgICAgICBbaG9zdCwgcG9ydF0gPSByZW1vdGVkZWYuc3BsaXQoIjoiKQotICAgICAgICAgICAgICAgICAgICBwb3J0ID0gaW50KHBvcnQpCi0gICAgICAgICAgICAgICAgICAgIGxmLmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5yZW1vdGVfc2VydmVyID0gcmVtb3RlZGVmCi0gICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgotICAgICAgICAgICAgICAgICAgICBpZiBvcHRpb25zLnJlbW90ZV9zZXJ2ZXIgIT0gJ2F1dG9zdGFydCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBCQk1haW5FeGNlcHRpb24oIkZhaWxlZCB0byByZWFkIGJpdGJha2UubG9jayAoJXMpLCBpbnZhbGlkIHBvcnQiICUgc3RyKGUpKQorICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLEluZGV4RXJyb3IpOgorICAgICAgICAgICAgICAgIHJhaXNlIEJCTWFpbkV4Y2VwdGlvbigiRkFUQUw6IE1hbGZvcm1lZCBob3N0OnBvcnQgYmluZCBwYXJhbWV0ZXIiKQorICAgICAgICAgICAgb3B0aW9ucy54bWxycGNpbnRlcmZhY2UgPSAoaG9zdCwgcG9ydCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9wdGlvbnMueG1scnBjaW50ZXJmYWNlID0gKE5vbmUsIDApCiAKICAgICAgICAgcmV0dXJuIG9wdGlvbnMsIHRhcmdldHNbMTpdCiAKIAotZGVmIHN0YXJ0X3NlcnZlcihzZXJ2ZXJtb2R1bGUsIGNvbmZpZ1BhcmFtcywgY29uZmlndXJhdGlvbiwgZmVhdHVyZXMpOgotICAgIHNlcnZlciA9IHNlcnZlcm1vZHVsZS5CaXRCYWtlU2VydmVyKCkKLSAgICBzaW5nbGVfdXNlID0gbm90IGNvbmZpZ1BhcmFtcy5zZXJ2ZXJfb25seSBhbmQgb3MuZ2V0ZW52KCdCQlNFUlZFUicpICE9ICdhdXRvc3RhcnQnCi0gICAgaWYgY29uZmlnUGFyYW1zLmJpbmQ6Ci0gICAgICAgIChob3N0LCBwb3J0KSA9IGNvbmZpZ1BhcmFtcy5iaW5kLnNwbGl0KCc6JykKLSAgICAgICAgc2VydmVyLmluaXRTZXJ2ZXIoKGhvc3QsIGludChwb3J0KSksIHNpbmdsZV91c2U9c2luZ2xlX3VzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWRsZV90aW1lb3V0PWNvbmZpZ1BhcmFtcy5pZGxlX3RpbWVvdXQpCi0gICAgICAgIGNvbmZpZ3VyYXRpb24uaW50ZXJmYWNlID0gW3NlcnZlci5zZXJ2ZXJJbXBsLmhvc3QsIHNlcnZlci5zZXJ2ZXJJbXBsLnBvcnRdCi0gICAgZWxzZToKLSAgICAgICAgc2VydmVyLmluaXRTZXJ2ZXIoc2luZ2xlX3VzZT1zaW5nbGVfdXNlKQotICAgICAgICBjb25maWd1cmF0aW9uLmludGVyZmFjZSA9IFtdCi0KLSAgICB0cnk6Ci0gICAgICAgIGNvbmZpZ3VyYXRpb24uc2V0U2VydmVyUmVnSWRsZUNhbGxiYWNrKHNlcnZlci5nZXRTZXJ2ZXJJZGxlQ0IoKSkKLQotICAgICAgICBjb29rZXIgPSBiYi5jb29rZXIuQkJDb29rZXIoY29uZmlndXJhdGlvbiwgZmVhdHVyZXMpCi0KLSAgICAgICAgc2VydmVyLmFkZGNvb2tlcihjb29rZXIpCi0gICAgICAgIHNlcnZlci5zYXZlQ29ubmVjdGlvbkRldGFpbHMoKQotICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgd2hpbGUgaGFzYXR0cihzZXJ2ZXIsICJldmVudF9xdWV1ZSIpOgotICAgICAgICAgICAgaW1wb3J0IHF1ZXVlCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZXZlbnQgPSBzZXJ2ZXIuZXZlbnRfcXVldWUuZ2V0KGJsb2NrPUZhbHNlKQotICAgICAgICAgICAgZXhjZXB0IChxdWV1ZS5FbXB0eSwgSU9FcnJvcik6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGxvZ2dpbmcuTG9nUmVjb3JkKToKLSAgICAgICAgICAgICAgICBsb2dnZXIuaGFuZGxlKGV2ZW50KQotICAgICAgICByYWlzZQotICAgIGlmIG5vdCBjb25maWdQYXJhbXMuZm9yZWdyb3VuZDoKLSAgICAgICAgc2VydmVyLmRldGFjaCgpCi0gICAgICAgIGNvb2tlci5zaHV0ZG93bigpCi0gICAgY29va2VyLmxvY2suY2xvc2UoKQotICAgIHJldHVybiBzZXJ2ZXIKLQotCiBkZWYgYml0YmFrZV9tYWluKGNvbmZpZ1BhcmFtcywgY29uZmlndXJhdGlvbik6CiAKICAgICAjIFB5dGhvbiBtdWx0aXByb2Nlc3NpbmcgcmVxdWlyZXMgL2Rldi9zaG0gb24gTGludXgKQEAgLTQwNiw0NSArMzUwLDE1IEBACiAKICAgICBjb25maWd1cmF0aW9uLnNldENvbmZpZ1BhcmFtZXRlcnMoY29uZmlnUGFyYW1zKQogCi0gICAgaWYgY29uZmlnUGFyYW1zLnNlcnZlcl9vbmx5OgotICAgICAgICBpZiBjb25maWdQYXJhbXMuc2VydmVydHlwZSAhPSAieG1scnBjIjoKLSAgICAgICAgICAgIHJhaXNlIEJCTWFpbkV4Y2VwdGlvbigiRkFUQUw6IElmICctLXNlcnZlci1vbmx5JyBpcyBkZWZpbmVkLCB3ZSBtdXN0IHNldCB0aGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXJ2ZXJ0eXBlIGFzICd4bWxycGMnLlxuIikKLSAgICAgICAgaWYgbm90IGNvbmZpZ1BhcmFtcy5iaW5kOgotICAgICAgICAgICAgcmFpc2UgQkJNYWluRXhjZXB0aW9uKCJGQVRBTDogVGhlICctLXNlcnZlci1vbmx5JyBvcHRpb24gcmVxdWlyZXMgYSBuYW1lL2FkZHJlc3MgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0byBiaW5kIHRvIHdpdGggdGhlIC1CIG9wdGlvbi5cbiIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgI0NoZWNraW5nIHRoYXQgdGhlIHBvcnQgaXMgYSBudW1iZXIKLSAgICAgICAgICAgICAgICBpbnQoY29uZmlnUGFyYW1zLmJpbmQuc3BsaXQoIjoiKVsxXSkKLSAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvcixJbmRleEVycm9yKToKLSAgICAgICAgICAgICAgICByYWlzZSBCQk1haW5FeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAiRkFUQUw6IE1hbGZvcm1lZCBob3N0OnBvcnQgYmluZCBwYXJhbWV0ZXIiKQotICAgICAgICBpZiBjb25maWdQYXJhbXMucmVtb3RlX3NlcnZlcjoKKyAgICBpZiBjb25maWdQYXJhbXMuc2VydmVyX29ubHkgYW5kIGNvbmZpZ1BhcmFtcy5yZW1vdGVfc2VydmVyOgogICAgICAgICAgICAgcmFpc2UgQkJNYWluRXhjZXB0aW9uKCJGQVRBTDogVGhlICctLXNlcnZlci1vbmx5JyBvcHRpb24gY29uZmxpY3RzIHdpdGggJXMuXG4iICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInRoZSBCQlNFUlZFUiBlbnZpcm9ubWVudCB2YXJpYWJsZSIgaWYgIkJCU0VSVkVSIiBpbiBvcy5lbnZpcm9uIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAidGhlICctLXJlbW90ZS1zZXJ2ZXInIG9wdGlvbiIpKQogCi0gICAgZWxpZiBjb25maWdQYXJhbXMuZm9yZWdyb3VuZDoKLSAgICAgICAgcmFpc2UgQkJNYWluRXhjZXB0aW9uKCJGQVRBTDogVGhlICctLWZvcmVncm91bmQnIG9wdGlvbiBjYW4gb25seSBiZSB1c2VkICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoIC0tc2VydmVyLW9ubHkuXG4iKQotCi0gICAgaWYgY29uZmlnUGFyYW1zLmJpbmQgYW5kIGNvbmZpZ1BhcmFtcy5zZXJ2ZXJ0eXBlICE9ICJ4bWxycGMiOgotICAgICAgICByYWlzZSBCQk1haW5FeGNlcHRpb24oIkZBVEFMOiBJZiAnLUInIG9yICctLWJpbmQnIGlzIGRlZmluZWQsIHdlIG11c3QgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldCB0aGUgc2VydmVydHlwZSBhcyAneG1scnBjJy5cbiIpCi0KLSAgICBpZiBjb25maWdQYXJhbXMucmVtb3RlX3NlcnZlciBhbmQgY29uZmlnUGFyYW1zLnNlcnZlcnR5cGUgIT0gInhtbHJwYyI6Ci0gICAgICAgIHJhaXNlIEJCTWFpbkV4Y2VwdGlvbigiRkFUQUw6IElmICctLXJlbW90ZS1zZXJ2ZXInIGlzIGRlZmluZWQsIHdlIG11c3QgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldCB0aGUgc2VydmVydHlwZSBhcyAneG1scnBjJy5cbiIpCi0KLSAgICBpZiBjb25maWdQYXJhbXMub2JzZXJ2ZV9vbmx5IGFuZCAobm90IGNvbmZpZ1BhcmFtcy5yZW1vdGVfc2VydmVyIG9yIGNvbmZpZ1BhcmFtcy5iaW5kKToKKyAgICBpZiBjb25maWdQYXJhbXMub2JzZXJ2ZV9vbmx5IGFuZCBub3QgKGNvbmZpZ1BhcmFtcy5yZW1vdGVfc2VydmVyIG9yIGNvbmZpZ1BhcmFtcy5iaW5kKToKICAgICAgICAgcmFpc2UgQkJNYWluRXhjZXB0aW9uKCJGQVRBTDogJy0tb2JzZXJ2ZS1vbmx5JyBjYW4gb25seSBiZSB1c2VkIGJ5IFVJIGNsaWVudHMgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbm5lY3RpbmcgdG8gYSBzZXJ2ZXIuXG4iKQogCi0gICAgaWYgY29uZmlnUGFyYW1zLmtpbGxfc2VydmVyIGFuZCBub3QgY29uZmlnUGFyYW1zLnJlbW90ZV9zZXJ2ZXI6Ci0gICAgICAgIHJhaXNlIEJCTWFpbkV4Y2VwdGlvbigiRkFUQUw6ICctLWtpbGwtc2VydmVyJyBjYW4gb25seSBiZSB1c2VkIHRvICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXJtaW5hdGUgYSByZW1vdGUgc2VydmVyIikKLQogICAgIGlmICJCQkRFQlVHIiBpbiBvcy5lbnZpcm9uOgogICAgICAgICBsZXZlbCA9IGludChvcy5lbnZpcm9uWyJCQkRFQlVHIl0pCiAgICAgICAgIGlmIGxldmVsID4gY29uZmlndXJhdGlvbi5kZWJ1ZzoKQEAgLTQ1Myw5ICszNjcsMTMgQEAKICAgICBiYi5tc2cuaW5pdF9tc2djb25maWcoY29uZmlnUGFyYW1zLnZlcmJvc2UsIGNvbmZpZ3VyYXRpb24uZGVidWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uZGVidWdfZG9tYWlucykKIAotICAgIHNlcnZlciwgc2VydmVyX2Nvbm5lY3Rpb24sIHVpX21vZHVsZSA9IHNldHVwX2JpdGJha2UoY29uZmlnUGFyYW1zLCBjb25maWd1cmF0aW9uKQotICAgIGlmIHNlcnZlcl9jb25uZWN0aW9uIGlzIE5vbmUgYW5kIGNvbmZpZ1BhcmFtcy5raWxsX3NlcnZlcjoKLSAgICAgICAgcmV0dXJuIDAKKyAgICBzZXJ2ZXJfY29ubmVjdGlvbiwgdWlfbW9kdWxlID0gc2V0dXBfYml0YmFrZShjb25maWdQYXJhbXMsIGNvbmZpZ3VyYXRpb24pCisgICAgIyBObyBzZXJ2ZXIgY29ubmVjdGlvbgorICAgIGlmIHNlcnZlcl9jb25uZWN0aW9uIGlzIE5vbmU6CisgICAgICAgIGlmIGNvbmZpZ1BhcmFtcy5zdGF0dXNfb25seToKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGlmIGNvbmZpZ1BhcmFtcy5raWxsX3NlcnZlcjoKKyAgICAgICAgICAgIHJldHVybiAwCiAKICAgICBpZiBub3QgY29uZmlnUGFyYW1zLnNlcnZlcl9vbmx5OgogICAgICAgICBpZiBjb25maWdQYXJhbXMuc3RhdHVzX29ubHk6CkBAIC00NjMsMTYgKzM4MSwxNSBAQAogICAgICAgICAgICAgcmV0dXJuIDAKIAogICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgZXZlbnQgaW4gYmIuZXZlbnQudWlfcXVldWU6CisgICAgICAgICAgICAgICAgc2VydmVyX2Nvbm5lY3Rpb24uZXZlbnRzLnF1ZXVlX2V2ZW50KGV2ZW50KQorICAgICAgICAgICAgYmIuZXZlbnQudWlfcXVldWUgPSBbXQorCiAgICAgICAgICAgICByZXR1cm4gdWlfbW9kdWxlLm1haW4oc2VydmVyX2Nvbm5lY3Rpb24uY29ubmVjdGlvbiwgc2VydmVyX2Nvbm5lY3Rpb24uZXZlbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1BhcmFtcykKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGJiLmV2ZW50LnVpX3F1ZXVlID0gW10KICAgICAgICAgICAgIHNlcnZlcl9jb25uZWN0aW9uLnRlcm1pbmF0ZSgpCiAgICAgZWxzZToKLSAgICAgICAgcHJpbnQoIkJpdGJha2Ugc2VydmVyIGFkZHJlc3M6ICVzLCBzZXJ2ZXIgcG9ydDogJXMiICUgKHNlcnZlci5zZXJ2ZXJJbXBsLmhvc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuc2VydmVySW1wbC5wb3J0KSkKLSAgICAgICAgaWYgY29uZmlnUGFyYW1zLmZvcmVncm91bmQ6Ci0gICAgICAgICAgICBzZXJ2ZXIuc2VydmVySW1wbC5zZXJ2ZV9mb3JldmVyKCkKICAgICAgICAgcmV0dXJuIDAKIAogICAgIHJldHVybiAxCkBAIC00OTUsNTggKzQxMiw5MyBAQAogICAgICAgICAjIENvbGxlY3QgdGhlIGZlYXR1cmUgc2V0IGZvciB0aGUgVUkKICAgICAgICAgZmVhdHVyZXNldCA9IGdldGF0dHIodWlfbW9kdWxlLCAiZmVhdHVyZVNldCIsIFtdKQogCi0gICAgaWYgY29uZmlnUGFyYW1zLnNlcnZlcl9vbmx5OgotICAgICAgICBmb3IgcGFyYW0gaW4gKCdwcmVmaWxlJywgJ3Bvc3RmaWxlJyk6Ci0gICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIoY29uZmlnUGFyYW1zLCBwYXJhbSkKLSAgICAgICAgICAgIGlmIHZhbHVlOgotICAgICAgICAgICAgICAgIHNldGF0dHIoY29uZmlndXJhdGlvbiwgIiVzX3NlcnZlciIgJSBwYXJhbSwgdmFsdWUpCi0gICAgICAgICAgICAgICAgcGFyYW0gPSAiJXNfc2VydmVyIiAlIHBhcmFtCi0KICAgICBpZiBleHRyYWZlYXR1cmVzOgogICAgICAgICBmb3IgZmVhdHVyZSBpbiBleHRyYWZlYXR1cmVzOgogICAgICAgICAgICAgaWYgbm90IGZlYXR1cmUgaW4gZmVhdHVyZXNldDoKICAgICAgICAgICAgICAgICBmZWF0dXJlc2V0LmFwcGVuZChmZWF0dXJlKQogCi0gICAgc2VydmVybW9kdWxlID0gaW1wb3J0X2V4dGVuc2lvbl9tb2R1bGUoYmIuc2VydmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdQYXJhbXMuc2VydmVydHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpdEJha2VTZXJ2ZXInKQorICAgIHNlcnZlcl9jb25uZWN0aW9uID0gTm9uZQorCiAgICAgaWYgY29uZmlnUGFyYW1zLnJlbW90ZV9zZXJ2ZXI6Ci0gICAgICAgIGlmIG9zLmdldGVudignQkJTRVJWRVInKSA9PSAnYXV0b3N0YXJ0JzoKLSAgICAgICAgICAgIGlmIGNvbmZpZ1BhcmFtcy5yZW1vdGVfc2VydmVyID09ICdhdXRvc3RhcnQnIG9yIFwKLSAgICAgICAgICAgICAgIG5vdCBzZXJ2ZXJtb2R1bGUuY2hlY2tfY29ubmVjdGlvbihjb25maWdQYXJhbXMucmVtb3RlX3NlcnZlciwgdGltZW91dD0yKToKLSAgICAgICAgICAgICAgICBjb25maWdQYXJhbXMuYmluZCA9ICdsb2NhbGhvc3Q6MCcKLSAgICAgICAgICAgICAgICBzcnYgPSBzdGFydF9zZXJ2ZXIoc2VydmVybW9kdWxlLCBjb25maWdQYXJhbXMsIGNvbmZpZ3VyYXRpb24sIGZlYXR1cmVzZXQpCi0gICAgICAgICAgICAgICAgY29uZmlnUGFyYW1zLnJlbW90ZV9zZXJ2ZXIgPSAnJXM6JWQnICUgdHVwbGUoY29uZmlndXJhdGlvbi5pbnRlcmZhY2UpCi0gICAgICAgICAgICAgICAgYmIuZXZlbnQudWlfcXVldWUgPSBbXQotICAgICAgICAjIHdlIHN0YXJ0IGEgc3R1YiBzZXJ2ZXIgdGhhdCBpcyBhY3R1YWxseSBhIFhNTFJQQ2xpZW50IHRoYXQgY29ubmVjdHMgdG8gYSByZWFsIHNlcnZlcgotICAgICAgICBmcm9tIGJiLnNlcnZlci54bWxycGMgaW1wb3J0IEJpdEJha2VYTUxSUENDbGllbnQKLSAgICAgICAgc2VydmVyID0gc2VydmVybW9kdWxlLkJpdEJha2VYTUxSUENDbGllbnQoY29uZmlnUGFyYW1zLm9ic2VydmVfb25seSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnUGFyYW1zLnhtbHJwY3Rva2VuKQotICAgICAgICBzZXJ2ZXIuc2F2ZUNvbm5lY3Rpb25EZXRhaWxzKGNvbmZpZ1BhcmFtcy5yZW1vdGVfc2VydmVyKQorICAgICAgICAjIENvbm5lY3QgdG8gYSByZW1vdGUgWE1MUlBDIHNlcnZlcgorICAgICAgICBzZXJ2ZXJfY29ubmVjdGlvbiA9IGJiLnNlcnZlci54bWxycGNjbGllbnQuY29ubmVjdFhNTFJQQyhjb25maWdQYXJhbXMucmVtb3RlX3NlcnZlciwgZmVhdHVyZXNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnUGFyYW1zLm9ic2VydmVfb25seSwgY29uZmlnUGFyYW1zLnhtbHJwY3Rva2VuKQogICAgIGVsc2U6Ci0gICAgICAgICMgd2Ugc3RhcnQgYSBzZXJ2ZXIgd2l0aCBhIGdpdmVuIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgc2VydmVyID0gc3RhcnRfc2VydmVyKHNlcnZlcm1vZHVsZSwgY29uZmlnUGFyYW1zLCBjb25maWd1cmF0aW9uLCBmZWF0dXJlc2V0KQorICAgICAgICByZXRyaWVzID0gOAorICAgICAgICB3aGlsZSByZXRyaWVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRvcGRpciwgbG9jayA9IGxvY2tCaXRiYWtlKCkKKyAgICAgICAgICAgICAgICBzb2NrbmFtZSA9IHRvcGRpciArICIvYml0YmFrZS5zb2NrIgorICAgICAgICAgICAgICAgIGlmIGxvY2s6CisgICAgICAgICAgICAgICAgICAgIGlmIGNvbmZpZ1BhcmFtcy5zdGF0dXNfb25seSBvciBjb25maWdQYXJhbXMua2lsbF9zZXJ2ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiYml0YmFrZSBzZXJ2ZXIgaXMgbm90IHJ1bm5pbmcuIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKKyAgICAgICAgICAgICAgICAgICAgIyB3ZSBzdGFydCBhIHNlcnZlciB3aXRoIGEgZ2l2ZW4gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiU3RhcnRpbmcgYml0YmFrZSBzZXJ2ZXIuLi4iKQorICAgICAgICAgICAgICAgICAgICAjIENsZWFyIHRoZSBldmVudCBxdWV1ZSBzaW5jZSB3ZSBhbHJlYWR5IGRpc3BsYXllZCBtZXNzYWdlcworICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC51aV9xdWV1ZSA9IFtdCisgICAgICAgICAgICAgICAgICAgIHNlcnZlciA9IGJiLnNlcnZlci5wcm9jZXNzLkJpdEJha2VTZXJ2ZXIobG9jaywgc29ja25hbWUsIGNvbmZpZ3VyYXRpb24sIGZlYXR1cmVzZXQpCisKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiUmVjb25uZWN0aW5nIHRvIGJpdGJha2Ugc2VydmVyLi4uIikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNvY2tuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJQcmV2aW91cyBiaXRiYWtlIGluc3RhbmNlIHNodXR0aW5nIGRvd24/LCB3YWl0aW5nIHRvIHJldHJ5Li4uIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NrID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBXYWl0IGZvciA1cyBvciB1bnRpbCB3ZSBjYW4gZ2V0IHRoZSBsb2NrCisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBub3QgbG9jayBhbmQgaSA8IDUwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8sIGxvY2sgPSBsb2NrQml0YmFrZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsb2NrOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobG9jaykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGJiLnNlcnZlci5wcm9jZXNzLlByb2Nlc3NUaW1lb3V0KCJCaXRiYWtlIHN0aWxsIHNodXR0aW5nIGRvd24gYXMgc29ja2V0IGV4aXN0cyBidXQgbm8gbG9jaz8iKQorICAgICAgICAgICAgICAgIGlmIG5vdCBjb25maWdQYXJhbXMuc2VydmVyX29ubHk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9jb25uZWN0aW9uID0gYmIuc2VydmVyLnByb2Nlc3MuY29ubmVjdFByb2Nlc3NTZXJ2ZXIoc29ja25hbWUsIGZlYXR1cmVzZXQpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFT0ZFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIHNlcnZlciBtYXkgaGF2ZSBiZWVuIHNodXR0aW5nIGRvd24gYnV0IG5vdCBjbG9zZWQgdGhlIHNvY2tldCB5ZXQuIElmIHRoYXQgaGFwcGVuZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAjIGlnbm9yZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgICAgIGlmIHNlcnZlcl9jb25uZWN0aW9uIG9yIGNvbmZpZ1BhcmFtcy5zZXJ2ZXJfb25seToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBCQk1haW5GYXRhbDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IChFeGNlcHRpb24sIGJiLnNlcnZlci5wcm9jZXNzLlByb2Nlc3NUaW1lb3V0KSBhcyBlOgorICAgICAgICAgICAgICAgIGlmIG5vdCByZXRyaWVzOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIHJldHJpZXMgLT0gMQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZSwgKGJiLnNlcnZlci5wcm9jZXNzLlByb2Nlc3NUaW1lb3V0LCBCcm9rZW5QaXBlRXJyb3IpKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlJldHJ5aW5nIHNlcnZlciBjb25uZWN0aW9uLi4uIikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiUmV0cnlpbmcgc2VydmVyIGNvbm5lY3Rpb24uLi4gKCVzKSIgJSB0cmFjZWJhY2suZm9ybWF0X2V4YygpKQorICAgICAgICAgICAgaWYgbm90IHJldHJpZXM6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIlVuYWJsZSB0byBjb25uZWN0IHRvIGJpdGJha2Ugc2VydmVyLCBvciBzdGFydCBvbmUiKQorICAgICAgICAgICAgaWYgcmV0cmllcyA8IDU6CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCg1KQorCisgICAgaWYgY29uZmlnUGFyYW1zLmtpbGxfc2VydmVyOgorICAgICAgICBzZXJ2ZXJfY29ubmVjdGlvbi5jb25uZWN0aW9uLnRlcm1pbmF0ZVNlcnZlcigpCisgICAgICAgIHNlcnZlcl9jb25uZWN0aW9uLnRlcm1pbmF0ZSgpCiAgICAgICAgIGJiLmV2ZW50LnVpX3F1ZXVlID0gW10KKyAgICAgICAgbG9nZ2VyLmluZm8oIlRlcm1pbmF0ZWQgYml0YmFrZSBzZXJ2ZXIuIikKKyAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKIAotICAgIGlmIGNvbmZpZ1BhcmFtcy5zZXJ2ZXJfb25seToKLSAgICAgICAgc2VydmVyX2Nvbm5lY3Rpb24gPSBOb25lCi0gICAgZWxzZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VydmVyX2Nvbm5lY3Rpb24gPSBzZXJ2ZXIuZXN0YWJsaXNoQ29ubmVjdGlvbihmZWF0dXJlc2V0KQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICAgICBiYi5mYXRhbCgiQ291bGQgbm90IGNvbm5lY3QgdG8gc2VydmVyICVzOiAlcyIgJSAoY29uZmlnUGFyYW1zLnJlbW90ZV9zZXJ2ZXIsIHN0cihlKSkpCisgICAgIyBSZXN0b3JlIHRoZSBlbnZpcm9ubWVudCBpbiBjYXNlIHRoZSBVSSBuZWVkcyBpdAorICAgIGZvciBrIGluIGNsZWFuZWR2YXJzOgorICAgICAgICBvcy5lbnZpcm9uW2tdID0gY2xlYW5lZHZhcnNba10KIAotICAgICAgICBpZiBjb25maWdQYXJhbXMua2lsbF9zZXJ2ZXI6Ci0gICAgICAgICAgICBzZXJ2ZXJfY29ubmVjdGlvbi5jb25uZWN0aW9uLnRlcm1pbmF0ZVNlcnZlcigpCi0gICAgICAgICAgICBiYi5ldmVudC51aV9xdWV1ZSA9IFtdCi0gICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZSwgTm9uZQorICAgIGxvZ2dlci5yZW1vdmVIYW5kbGVyKGhhbmRsZXIpCiAKLSAgICAgICAgc2VydmVyX2Nvbm5lY3Rpb24uc2V0dXBFdmVudFF1ZXVlKCkKKyAgICByZXR1cm4gc2VydmVyX2Nvbm5lY3Rpb24sIHVpX21vZHVsZQogCi0gICAgICAgICMgUmVzdG9yZSB0aGUgZW52aXJvbm1lbnQgaW4gY2FzZSB0aGUgVUkgbmVlZHMgaXQKLSAgICAgICAgZm9yIGsgaW4gY2xlYW5lZHZhcnM6Ci0gICAgICAgICAgICBvcy5lbnZpcm9uW2tdID0gY2xlYW5lZHZhcnNba10KK2RlZiBsb2NrQml0YmFrZSgpOgorICAgIHRvcGRpciA9IGJiLmNvb2tlcmRhdGEuZmluZFRvcGRpcigpCisgICAgaWYgbm90IHRvcGRpcjoKKyAgICAgICAgYmIuZXJyb3IoIlVuYWJsZSB0byBmaW5kIGNvbmYvYmJsYXllcnMuY29uZiBvciBjb25mL2JpdGJha2UuY29uZi4gQkJBUFRIIGlzIHVuc2V0IGFuZC9vciBub3QgaW4gYSBidWlsZCBkaXJlY3Rvcnk/IikKKyAgICAgICAgcmFpc2UgQkJNYWluRmF0YWwKKyAgICBsb2NrZmlsZSA9IHRvcGRpciArICIvYml0YmFrZS5sb2NrIgorICAgIHJldHVybiB0b3BkaXIsIGJiLnV0aWxzLmxvY2tmaWxlKGxvY2tmaWxlLCBGYWxzZSwgRmFsc2UpCiAKLSAgICAgICAgbG9nZ2VyLnJlbW92ZUhhbmRsZXIoaGFuZGxlcikKLQotICAgIHJldHVybiBzZXJ2ZXIsIHNlcnZlcl9jb25uZWN0aW9uLCB1aV9tb2R1bGUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9tc2cucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvbXNnLnB5CmluZGV4IDkwYjE1ODIuLmYxNzIzYmUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9tc2cucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL21zZy5weQpAQCAtMjE2LDMgKzIxNiwxMCBAQAogICAgICAgICBsb2dnZXIuaGFuZGxlcnMgPSBbY29uc29sZV0KICAgICBsb2dnZXIuc2V0TGV2ZWwobGV2ZWwpCiAgICAgcmV0dXJuIGxvZ2dlcgorCitkZWYgaGFzX2NvbnNvbGVfaGFuZGxlcihsb2dnZXIpOgorICAgIGZvciBoYW5kbGVyIGluIGxvZ2dlci5oYW5kbGVyczoKKyAgICAgICAgaWYgaXNpbnN0YW5jZShoYW5kbGVyLCBsb2dnaW5nLlN0cmVhbUhhbmRsZXIpOgorICAgICAgICAgICAgaWYgaGFuZGxlci5zdHJlYW0gaW4gW3N5cy5zdGRlcnIsIHN5cy5zdGRvdXRdOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvX19pbml0X18ucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvX19pbml0X18ucHkKaW5kZXggYTI5NTJlYy4uMmZjNDAwMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BhcnNlL19faW5pdF9fLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wYXJzZS9fX2luaXRfXy5weQpAQCAtODQsNiArODQsMTAgQEAKICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJVcGRhdGluZyBtdGltZSBjYWNoZSBmb3IgJXMiICUgZikKICAgICAgICAgdXBkYXRlX210aW1lKGYpCiAKK2RlZiBjbGVhcl9jYWNoZSgpOgorICAgIGdsb2JhbCBfX210aW1lX2NhY2hlCisgICAgX19tdGltZV9jYWNoZSA9IHt9CisKIGRlZiBtYXJrX2RlcGVuZGVuY3koZCwgZik6CiAgICAgaWYgZi5zdGFydHN3aXRoKCcuLycpOgogICAgICAgICBmID0gIiVzLyVzIiAlIChvcy5nZXRjd2QoKSwgZlsyOl0pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvcGFyc2VfcHkvQkJIYW5kbGVyLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BhcnNlL3BhcnNlX3B5L0JCSGFuZGxlci5weQppbmRleCBmZTkxOGE0Li5mODlhZDI0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvcGFyc2VfcHkvQkJIYW5kbGVyLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9CQkhhbmRsZXIucHkKQEAgLTE0NCw3ICsxNDQsNyBAQAogICAgIHRyeToKICAgICAgICAgc3RhdGVtZW50cy5ldmFsKGQpCiAgICAgZXhjZXB0IGJiLnBhcnNlLlNraXBSZWNpcGU6Ci0gICAgICAgIGJiLmRhdGEuc2V0VmFyKCJfX1NLSVBQRUQiLCBUcnVlLCBkKQorICAgICAgICBkLnNldFZhcigiX19TS0lQUEVEIiwgVHJ1ZSkKICAgICAgICAgaWYgaW5jbHVkZSA9PSAwOgogICAgICAgICAgICAgcmV0dXJuIHsgIiIgOiBkIH0KIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BhcnNlL3BhcnNlX3B5L0NvbmZIYW5kbGVyLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BhcnNlL3BhcnNlX3B5L0NvbmZIYW5kbGVyLnB5CmluZGV4IGY3ZDBjZjcuLjk3YWExMzAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9Db25mSGFuZGxlci5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvcGFyc2VfcHkvQ29uZkhhbmRsZXIucHkKQEAgLTMyLDcgKzMyLDcgQEAKIAogX19jb25maWdfcmVnZXhwX18gID0gcmUuY29tcGlsZSggciIiIgogICAgIF4KLSAgICAoP1A8ZXhwPmV4cG9ydFxzKik/CisgICAgKD9QPGV4cD5leHBvcnRccyspPwogICAgICg/UDx2YXI+W2EtekEtWjAtOVwtXysuJHt9L35dKz8pCiAgICAgKFxbKD9QPGZsYWc+W2EtekEtWjAtOVwtXysuXSspXF0pPwogCkBAIC02OSwxOCArNjksMjYgQEAKIGRlZiBzdXBwb3J0cyhmbiwgZCk6CiAgICAgcmV0dXJuIGZuWy01Ol0gPT0gIi5jb25mIgogCi1kZWYgaW5jbHVkZShwYXJlbnRmbiwgZm4sIGxpbmVubywgZGF0YSwgZXJyb3Jfb3V0KToKK2RlZiBpbmNsdWRlKHBhcmVudGZuLCBmbnMsIGxpbmVubywgZGF0YSwgZXJyb3Jfb3V0KToKICAgICAiIiIKICAgICBlcnJvcl9vdXQ6IEEgc3RyaW5nIGluZGljYXRpbmcgdGhlIHZlcmIgKGUuZy4gImluY2x1ZGUiLCAiaW5oZXJpdCIpIHRvIGJlCiAgICAgdXNlZCBpbiBhIFBhcnNlRXJyb3IgdGhhdCB3aWxsIGJlIHJhaXNlZCBpZiB0aGUgZmlsZSB0byBiZSBpbmNsdWRlZCBjb3VsZAogICAgIG5vdCBiZSBpbmNsdWRlZC4gU3BlY2lmeSBGYWxzZSB0byBhdm9pZCByYWlzaW5nIGFuIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAiIiIKKyAgICBmbnMgPSBkYXRhLmV4cGFuZChmbnMpCisgICAgcGFyZW50Zm4gPSBkYXRhLmV4cGFuZChwYXJlbnRmbikKKworICAgICMgImluY2x1ZGUiIG9yICJyZXF1aXJlIiBhY2NlcHQgemVybyB0byBuIHNwYWNlLXNlcGFyYXRlZCBmaWxlIG5hbWVzIHRvIGluY2x1ZGUuCisgICAgZm9yIGZuIGluIGZucy5zcGxpdCgpOgorICAgICAgICBpbmNsdWRlX3NpbmdsZV9maWxlKHBhcmVudGZuLCBmbiwgbGluZW5vLCBkYXRhLCBlcnJvcl9vdXQpCisKK2RlZiBpbmNsdWRlX3NpbmdsZV9maWxlKHBhcmVudGZuLCBmbiwgbGluZW5vLCBkYXRhLCBlcnJvcl9vdXQpOgorICAgICIiIgorICAgIEhlbHBlciBmdW5jdGlvbiBmb3IgaW5jbHVkZSgpIHdoaWNoIGRvZXMgbm90IGV4cGFuZCBvciBzcGxpdCBpdHMgcGFyYW1ldGVycy4KKyAgICAiIiIKICAgICBpZiBwYXJlbnRmbiA9PSBmbjogIyBwcmV2ZW50IGluZmluaXRlIHJlY3Vyc2lvbgogICAgICAgICByZXR1cm4gTm9uZQogCi0gICAgZm4gPSBkYXRhLmV4cGFuZChmbikKLSAgICBwYXJlbnRmbiA9IGRhdGEuZXhwYW5kKHBhcmVudGZuKQotCiAgICAgaWYgbm90IG9zLnBhdGguaXNhYnMoZm4pOgogICAgICAgICBkbmFtZSA9IG9zLnBhdGguZGlybmFtZShwYXJlbnRmbikKICAgICAgICAgYmJwYXRoID0gIiVzOiVzIiAlIChkbmFtZSwgZGF0YS5nZXRWYXIoIkJCUEFUSCIpKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Byb2Nlc3MucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHJvY2Vzcy5weQppbmRleCBhNGE1NTk5Li5lNjk2OTdjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHJvY2Vzcy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHJvY2Vzcy5weQpAQCAtOTQsNDYgKzk0LDUzIEBACiAgICAgICAgICAgICAgICAgaWYgZGF0YSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgZnVuYyhkYXRhKQogCisgICAgZGVmIHJlYWRfYWxsX3BpcGVzKGxvZywgcmluLCBvdXRkYXRhLCBlcnJkYXRhKToKKyAgICAgICAgcmxpc3QgPSByaW4KKyAgICAgICAgc3Rkb3V0YnVmID0gYiIiCisgICAgICAgIHN0ZGVycmJ1ZiA9IGIiIgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHIsdyxlID0gc2VsZWN0LnNlbGVjdCAocmxpc3QsIFtdLCBbXSwgMSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUlOVFI6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICByZWFkZXh0cmFzKHIpCisKKyAgICAgICAgaWYgcGlwZS5zdGRvdXQgaW4gcjoKKyAgICAgICAgICAgIGRhdGEgPSBzdGRvdXRidWYgKyBwaXBlLnN0ZG91dC5yZWFkKCkKKyAgICAgICAgICAgIGlmIGRhdGEgaXMgbm90IE5vbmUgYW5kIGxlbihkYXRhKSA+IDA6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5kZWNvZGUoInV0Zi04IikKKyAgICAgICAgICAgICAgICAgICAgb3V0ZGF0YS5hcHBlbmQoZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgbG9nLndyaXRlKGRhdGEpCisgICAgICAgICAgICAgICAgICAgIGxvZy5mbHVzaCgpCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dGJ1ZiA9IGIiIgorICAgICAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHN0ZG91dGJ1ZiA9IGRhdGEKKworICAgICAgICBpZiBwaXBlLnN0ZGVyciBpbiByOgorICAgICAgICAgICAgZGF0YSA9IHN0ZGVycmJ1ZiArIHBpcGUuc3RkZXJyLnJlYWQoKQorICAgICAgICAgICAgaWYgZGF0YSBpcyBub3QgTm9uZSBhbmQgbGVuKGRhdGEpID4gMDoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLmRlY29kZSgidXRmLTgiKQorICAgICAgICAgICAgICAgICAgICBlcnJkYXRhLmFwcGVuZChkYXRhKQorICAgICAgICAgICAgICAgICAgICBsb2cud3JpdGUoZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgbG9nLmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgc3RkZXJyYnVmID0gYiIiCisgICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgc3RkZXJyYnVmID0gZGF0YQorCiAgICAgdHJ5OgorICAgICAgICAjIFJlYWQgYWxsIHBpcGVzIHdoaWxlIHRoZSBwcm9jZXNzIGlzIG9wZW4KICAgICAgICAgd2hpbGUgcGlwZS5wb2xsKCkgaXMgTm9uZToKLSAgICAgICAgICAgIHJsaXN0ID0gcmluCi0gICAgICAgICAgICBzdGRvdXRidWYgPSBiIiIKLSAgICAgICAgICAgIHN0ZGVycmJ1ZiA9IGIiIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHIsdyxlID0gc2VsZWN0LnNlbGVjdCAocmxpc3QsIFtdLCBbXSwgMSkKLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FSU5UUjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHJlYWRfYWxsX3BpcGVzKGxvZywgcmluLCBvdXRkYXRhLCBlcnJkYXRhKQogCi0gICAgICAgICAgICBpZiBwaXBlLnN0ZG91dCBpbiByOgotICAgICAgICAgICAgICAgIGRhdGEgPSBzdGRvdXRidWYgKyBwaXBlLnN0ZG91dC5yZWFkKCkKLSAgICAgICAgICAgICAgICBpZiBkYXRhIGlzIG5vdCBOb25lIGFuZCBsZW4oZGF0YSkgPiAwOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5kZWNvZGUoInV0Zi04IikKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dGRhdGEuYXBwZW5kKGRhdGEpCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2cud3JpdGUoZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dGJ1ZiA9IGIiIgotICAgICAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgotICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0YnVmID0gZGF0YQotCi0gICAgICAgICAgICBpZiBwaXBlLnN0ZGVyciBpbiByOgotICAgICAgICAgICAgICAgIGRhdGEgPSBzdGRlcnJidWYgKyBwaXBlLnN0ZGVyci5yZWFkKCkKLSAgICAgICAgICAgICAgICBpZiBkYXRhIGlzIG5vdCBOb25lIGFuZCBsZW4oZGF0YSkgPiAwOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5kZWNvZGUoInV0Zi04IikKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycmRhdGEuYXBwZW5kKGRhdGEpCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2cud3JpdGUoZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycmJ1ZiA9IGIiIgotICAgICAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgotICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyYnVmID0gZGF0YQotCi0gICAgICAgICAgICByZWFkZXh0cmFzKHIpCi0KLSAgICBmaW5hbGx5OiAgICAKKyAgICAgICAgIyBQb2Nlc3MgY2xvc2VkLCBkcmFpbiBhbGwgcGlwZXMuLi4KKyAgICAgICAgcmVhZF9hbGxfcGlwZXMobG9nLCByaW4sIG91dGRhdGEsIGVycmRhdGEpCisgICAgZmluYWxseToKICAgICAgICAgbG9nLmZsdXNoKCkKIAotICAgIHJlYWRleHRyYXMoW2ZvYmogZm9yIGZvYmosIF8gaW4gZXh0cmFmaWxlc10pCi0KICAgICBpZiBwaXBlLnN0ZG91dCBpcyBub3QgTm9uZToKICAgICAgICAgcGlwZS5zdGRvdXQuY2xvc2UoKQogICAgIGlmIHBpcGUuc3RkZXJyIGlzIG5vdCBOb25lOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3J1bnF1ZXVlLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3J1bnF1ZXVlLnB5CmluZGV4IDdkMmZmODEuLmFlMTJjMjUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9ydW5xdWV1ZS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcnVucXVldWUucHkKQEAgLTEzNTUsMTIgKzEzNTUsNyBAQAogICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJUYXNrcyBTdW1tYXJ5OiBBdHRlbXB0ZWQgJWQgdGFza3Mgb2Ygd2hpY2ggJWQgZGlkbid0IG5lZWQgdG8gYmUgcmVydW4gYW5kIGFsbCBzdWNjZWVkZWQuIiwgc2VsZi5ycWV4ZS5zdGF0cy5jb21wbGV0ZWQsIHNlbGYucnFleGUuc3RhdHMuc2tpcHBlZCkKIAogICAgICAgICBpZiBzZWxmLnN0YXRlIGlzIHJ1blF1ZXVlRmFpbGVkOgotICAgICAgICAgICAgaWYgbm90IHNlbGYucnFkYXRhLnRhc2tEYXRhWycnXS50cnlhbHRjb25maWdzOgotICAgICAgICAgICAgICAgIHJhaXNlIGJiLnJ1bnF1ZXVlLlRhc2tGYWlsdXJlKHNlbGYucnFleGUuZmFpbGVkX3RpZHMpCi0gICAgICAgICAgICBmb3IgdGlkIGluIHNlbGYucnFleGUuZmFpbGVkX3RpZHM6Ci0gICAgICAgICAgICAgICAgKG1jLCBmbiwgdG4sIF8pID0gc3BsaXRfdGlkX21jZm4odGlkKQotICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLnRhc2tEYXRhW21jXS5mYWlsX2ZuKGZuKQotICAgICAgICAgICAgc2VsZi5ycWRhdGEucmVzZXQoKQorICAgICAgICAgICAgcmFpc2UgYmIucnVucXVldWUuVGFza0ZhaWx1cmUoc2VsZi5ycWV4ZS5mYWlsZWRfdGlkcykKIAogICAgICAgICBpZiBzZWxmLnN0YXRlIGlzIHJ1blF1ZXVlQ29tcGxldGU6CiAgICAgICAgICAgICAjIEFsbCBkb25lCkBAIC0xODM5LDcgKzE4MzQsNyBAQAogICAgICAgICBSdW4gdGhlIHRhc2tzIGluIGEgcXVldWUgcHJlcGFyZWQgYnkgcnFkYXRhLnByZXBhcmUoKQogICAgICAgICAiIiIKIAotICAgICAgICBpZiBzZWxmLnJxZGF0YS5zZXRzY2VuZXdoaXRlbGlzdCBhbmQgbm90IHNlbGYucnFkYXRhLnNldHNjZW5ld2hpdGVsaXN0X2NoZWNrZWQ6CisgICAgICAgIGlmIHNlbGYucnFkYXRhLnNldHNjZW5ld2hpdGVsaXN0IGlzIG5vdCBOb25lIGFuZCBub3Qgc2VsZi5ycWRhdGEuc2V0c2NlbmV3aGl0ZWxpc3RfY2hlY2tlZDoKICAgICAgICAgICAgIHNlbGYucnFkYXRhLnNldHNjZW5ld2hpdGVsaXN0X2NoZWNrZWQgPSBUcnVlCiAKICAgICAgICAgICAgICMgQ2hlY2sgdGFza3MgdGhhdCBhcmUgZ29pbmcgdG8gcnVuIGFnYWluc3QgdGhlIHdoaXRlbGlzdApAQCAtMTkzMiw3ICsxOTI3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnEuc3RhdGUgPSBydW5RdWV1ZUZhaWxlZAogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0cy50YXNrRmFpbGVkKCkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgICAgICAgICAgc2VsZi5ycS5mYWtld29ya2VyW21jXS5wcm9jZXNzLnN0ZGluLndyaXRlKGIiPHJ1bnRhc2s+IiArIHBpY2tsZS5kdW1wcygodGFza2ZuLCB0YXNrLCB0YXNrbmFtZSwgRmFsc2UsIHNlbGYuY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhmbiksIHRhc2tkZXBkYXRhLCBzZWxmLnJxZGF0YS5zZXRzY2VuZV9lbmZvcmNlKSkgKyBiIjwvcnVudGFzaz4iKQorICAgICAgICAgICAgICAgIHNlbGYucnEuZmFrZXdvcmtlclttY10ucHJvY2Vzcy5zdGRpbi53cml0ZShiIjxydW50YXNrPiIgKyBwaWNrbGUuZHVtcHMoKHRhc2tmbiwgdGFzaywgdGFza25hbWUsIEZhbHNlLCBzZWxmLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHModGFza2ZuKSwgdGFza2RlcGRhdGEsIHNlbGYucnFkYXRhLnNldHNjZW5lX2VuZm9yY2UpKSArIGIiPC9ydW50YXNrPiIpCiAgICAgICAgICAgICAgICAgc2VsZi5ycS5mYWtld29ya2VyW21jXS5wcm9jZXNzLnN0ZGluLmZsdXNoKCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5ycS53b3JrZXJbbWNdLnByb2Nlc3Muc3RkaW4ud3JpdGUoYiI8cnVudGFzaz4iICsgcGlja2xlLmR1bXBzKCh0YXNrZm4sIHRhc2ssIHRhc2tuYW1lLCBGYWxzZSwgc2VsZi5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKHRhc2tmbiksIHRhc2tkZXBkYXRhLCBzZWxmLnJxZGF0YS5zZXRzY2VuZV9lbmZvcmNlKSkgKyBiIjwvcnVudGFzaz4iKQpAQCAtMjI1NCw3ICsyMjQ5LDcgQEAKICAgICAgICAgc2VsZi5zY2VuZXF1ZXVlX3VwZGF0ZWNvdW50ZXJzKHRhc2spCiAKICAgICBkZWYgY2hlY2tfdGFza2ZhaWwoc2VsZiwgdGFzayk6Ci0gICAgICAgIGlmIHNlbGYucnFkYXRhLnNldHNjZW5ld2hpdGVsaXN0OgorICAgICAgICBpZiBzZWxmLnJxZGF0YS5zZXRzY2VuZXdoaXRlbGlzdCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHJlYWx0YXNrID0gdGFzay5zcGxpdCgnX3NldHNjZW5lJylbMF0KICAgICAgICAgICAgIChtYywgZm4sIHRhc2tuYW1lLCB0YXNrZm4pID0gc3BsaXRfdGlkX21jZm4ocmVhbHRhc2spCiAgICAgICAgICAgICBwbiA9IHNlbGYucnFkYXRhLmRhdGFDYWNoZXNbbWNdLnBrZ19mblt0YXNrZm5dCkBAIC0yMzcyLDcgKzIzNjcsNyBAQAogICAgICAgICBzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZCA9IHNlbGYuc2NlbmVxdWV1ZV9jb3ZlcmVkCiAgICAgICAgIHNlbGYucnEuc2NlbmVxdWV1ZV9ub3Rjb3ZlcmVkID0gc2VsZi5zY2VuZXF1ZXVlX25vdGNvdmVyZWQKIAotICAgICAgICBsb2dnZXIuZGVidWcoMSwgJ1dlIGNhbiBza2lwIHRhc2tzICVzJywgc29ydGVkKHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkKSkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICdXZSBjYW4gc2tpcCB0YXNrcyAlcycsICJcbiIuam9pbihzb3J0ZWQoc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQpKSkKIAogICAgICAgICBzZWxmLnJxLnN0YXRlID0gcnVuUXVldWVSdW5Jbml0CiAKQEAgLTI0ODgsNiArMjQ4Myw5IEBACiAgICAgICAgIHJ1blF1ZXVlRXZlbnQuX19pbml0X18oc2VsZiwgdGFzaywgc3RhdHMsIHJxKQogICAgICAgICBzZWxmLmV4aXRjb2RlID0gZXhpdGNvZGUKIAorICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlRhc2sgKCVzKSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJyVzJyIgJSAoc2VsZi50YXNrc3RyaW5nLCBzZWxmLmV4aXRjb2RlKQorCiBjbGFzcyBzY2VuZVF1ZXVlVGFza0ZhaWxlZChzY2VuZVF1ZXVlRXZlbnQpOgogICAgICIiIgogICAgIEV2ZW50IG5vdGlmeWluZyBhIHNldHNjZW5lIHRhc2sgZmFpbGVkCkBAIC0yNDk2LDYgKzI0OTQsOSBAQAogICAgICAgICBzY2VuZVF1ZXVlRXZlbnQuX19pbml0X18oc2VsZiwgdGFzaywgc3RhdHMsIHJxKQogICAgICAgICBzZWxmLmV4aXRjb2RlID0gZXhpdGNvZGUKIAorICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlNldHNjZW5lIHRhc2sgKCVzKSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJyVzJyAtIHJlYWwgdGFzayB3aWxsIGJlIHJ1biBpbnN0ZWFkIiAlIChzZWxmLnRhc2tzdHJpbmcsIHNlbGYuZXhpdGNvZGUpCisKIGNsYXNzIHNjZW5lUXVldWVDb21wbGV0ZShzY2VuZVF1ZXVlRXZlbnQpOgogICAgICIiIgogICAgIEV2ZW50IHdoZW4gYWxsIHRoZSBzY2VuZVF1ZXVlIHRhc2tzIGFyZSBjb21wbGV0ZQpAQCAtMjYwMiw3ICsyNjAzLDcgQEAKIAogZGVmIGNoZWNrX3NldHNjZW5lX2VuZm9yY2Vfd2hpdGVsaXN0KHBuLCB0YXNrbmFtZSwgd2hpdGVsaXN0KToKICAgICBpbXBvcnQgZm5tYXRjaAotICAgIGlmIHdoaXRlbGlzdDoKKyAgICBpZiB3aGl0ZWxpc3QgaXMgbm90IE5vbmU6CiAgICAgICAgIGl0ZW0gPSAnJXM6JXMnICUgKHBuLCB0YXNrbmFtZSkKICAgICAgICAgZm9yIHdoaXRlbGlzdF9pdGVtIGluIHdoaXRlbGlzdDoKICAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaChpdGVtLCB3aGl0ZWxpc3RfaXRlbSk6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2VydmVyL19faW5pdF9fLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3NlcnZlci9fX2luaXRfXy5weQppbmRleCA1MzhhNjMzLi41YTNmYmE5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2VydmVyL19faW5pdF9fLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIvX19pbml0X18ucHkKQEAgLTE4LDgyICsxOCw0IEBACiAjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCiAKLSIiIiBCYXNlIGNvZGUgZm9yIEJpdGJha2Ugc2VydmVyIHByb2Nlc3MKIAotSGF2ZSBhIGNvbW1vbiBiYXNlIGZvciB0aGF0IGFsbCBCaXRiYWtlIHNlcnZlciBjbGFzc2VzIGVuc3VyZXMgYSBjb25zaXN0ZW50Ci1hcHByb2FjaCB0byB0aGUgaW50ZXJmYWNlLCBhbmQgbWluaW1pemUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGNvZGUgZHVwbGljYXRpb24uCi0KLSIiIgotCi0iIiIgIEJhc2VJbXBsU2VydmVyKCkgdGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBYWFNlcnZlcigpIGltcGxlbWVudGF0aW9ucy4KLQotICAgIFRoZXNlIGNsYXNzZXMgY29udGFpbiB0aGUgYWN0dWFsIGNvZGUgdGhhdCBydW5zIHRoZSBzZXJ2ZXIgc2lkZSwgaS5lLgotICAgIGxpc3RlbnMgZm9yIHRoZSBjb21tYW5kcyBhbmQgZXhlY3V0ZXMgdGhlbS4gQWx0aG91Z2ggdGhlc2UgaW1wbGVtZW50YXRpb25zCi0gICAgY29udGFpbiBhbGwgdGhlIGRhdGEgb2YgdGhlIG9yaWdpbmFsIGJpdGJha2UgY29tbWFuZCwgaS5lIHRoZSBjb29rZXIgaW5zdGFuY2UsCi0gICAgdGhleSBtYXkgd2VsbCBydW4gb24gYSBkaWZmZXJlbnQgcHJvY2VzcyBvciBldmVuIG1hY2hpbmUuCi0KLSIiIgotCi1jbGFzcyBCYXNlSW1wbFNlcnZlcigpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5faWRsZWZ1bnMgPSB7fQotCi0gICAgZGVmIGFkZGNvb2tlcihzZWxmLCBjb29rZXIpOgotICAgICAgICBzZWxmLmNvb2tlciA9IGNvb2tlcgotCi0gICAgZGVmIHJlZ2lzdGVyX2lkbGVfZnVuY3Rpb24oc2VsZiwgZnVuY3Rpb24sIGRhdGEpOgotICAgICAgICAiIiJSZWdpc3RlciBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGlsZSB0aGUgc2VydmVyIGlzIGlkbGUiIiIKLSAgICAgICAgYXNzZXJ0IGhhc2F0dHIoZnVuY3Rpb24sICdfX2NhbGxfXycpCi0gICAgICAgIHNlbGYuX2lkbGVmdW5zW2Z1bmN0aW9uXSA9IGRhdGEKLQotCi0KLSIiIiBCaXRCYWtlQmFzZVNlcnZlckNvbm5lY3Rpb24gY2xhc3MgaXMgdGhlIGNvbW1vbiBhbmNlc3RvciB0byBhbGwKLSAgICBCaXRCYWtlU2VydmVyQ29ubmVjdGlvbiBjbGFzc2VzLgotCi0gICAgVGhlc2UgY2xhc3NlcyBjb250cm9sIHRoZSByZW1vdGUgc2VydmVyLiBUaGUgb25seSBjb21tYW5kIGN1cnJlbnRseQotICAgIGltcGxlbWVudGVkIGlzIHRoZSB0ZXJtaW5hdGUoKSBjb21tYW5kLgotCi0iIiIKLQotY2xhc3MgQml0QmFrZUJhc2VTZXJ2ZXJDb25uZWN0aW9uKCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlckltcGwpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgdGVybWluYXRlKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgc2V0dXBFdmVudFF1ZXVlKHNlbGYpOgotICAgICAgICBwYXNzCi0KLQotIiIiIEJpdEJha2VCYXNlU2VydmVyIGNsYXNzIGlzIHRoZSBjb21tb24gYW5jZXN0b3IgdG8gYWxsIEJpdGJha2Ugc2VydmVycwotCi0gICAgRGVyaXZlIHRoaXMgY2xhc3MgaW4gb3JkZXIgdG8gaW1wbGVtZW50IGEgQml0QmFrZVNlcnZlciB3aGljaCBpcyB0aGUKLSAgICBjb250cm9sbGluZyBzdHViIGZvciB0aGUgYWN0dWFsIHNlcnZlciBpbXBsZW1lbnRhdGlvbgotCi0iIiIKLWNsYXNzIEJpdEJha2VCYXNlU2VydmVyKG9iamVjdCk6Ci0gICAgZGVmIGluaXRTZXJ2ZXIoc2VsZik6Ci0gICAgICAgIHNlbGYuc2VydmVySW1wbCA9IE5vbmUgICMgd2UgZW5zdXJlIGEgcnVudGltZSBjcmFzaCBpZiBub3Qgb3ZlcmxvYWRlZAotICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBOb25lCi0gICAgICAgIHJldHVybgotCi0gICAgZGVmIGFkZGNvb2tlcihzZWxmLCBjb29rZXIpOgotICAgICAgICBzZWxmLmNvb2tlciA9IGNvb2tlcgotICAgICAgICBzZWxmLnNlcnZlckltcGwuYWRkY29va2VyKGNvb2tlcikKLQotICAgIGRlZiBnZXRTZXJ2ZXJJZGxlQ0Ioc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnNlcnZlckltcGwucmVnaXN0ZXJfaWRsZV9mdW5jdGlvbgotCi0gICAgZGVmIHNhdmVDb25uZWN0aW9uRGV0YWlscyhzZWxmKToKLSAgICAgICAgcmV0dXJuCi0KLSAgICBkZWYgZGV0YWNoKHNlbGYpOgotICAgICAgICByZXR1cm4KLQotICAgIGRlZiBlc3RhYmxpc2hDb25uZWN0aW9uKHNlbGYsIGZlYXR1cmVzZXQpOgotICAgICAgICByYWlzZSAgICJNdXN0IHJlZGVmaW5lIHRoZSAlcy5lc3RhYmxpc2hDb25uZWN0aW9uKCkiICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KLQotICAgIGRlZiBlbmRTZXNzaW9uKHNlbGYpOgotICAgICAgICBzZWxmLmNvbm5lY3Rpb24udGVybWluYXRlKCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIvcHJvY2Vzcy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIvcHJvY2Vzcy5weQppbmRleCBjM2MxNDUwLi4zZDMxMzU1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2VydmVyL3Byb2Nlc3MucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3NlcnZlci9wcm9jZXNzLnB5CkBAIC0yMiwxMjUgKzIyLDI0NSBAQAogCiBpbXBvcnQgYmIKIGltcG9ydCBiYi5ldmVudAotaW1wb3J0IGl0ZXJ0b29scwogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCBhcnJheQogaW1wb3J0IG9zCi1pbXBvcnQgc2lnbmFsCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IHNlbGVjdAotZnJvbSBxdWV1ZSBpbXBvcnQgRW1wdHkKLWZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBFdmVudCwgUHJvY2VzcywgdXRpbCwgUXVldWUsIFBpcGUsIHF1ZXVlcywgTWFuYWdlcgotCi1mcm9tIC4gaW1wb3J0IEJpdEJha2VCYXNlU2VydmVyLCBCaXRCYWtlQmFzZVNlcnZlckNvbm5lY3Rpb24sIEJhc2VJbXBsU2VydmVyCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IGVycm5vCitpbXBvcnQgcmUKK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IGJiLnNlcnZlci54bWxycGNzZXJ2ZXIKK2Zyb20gYmIgaW1wb3J0IGRhZW1vbml6ZQorZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IHF1ZXVlcwogCiBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZScpCiAKLWNsYXNzIFNlcnZlckNvbW11bmljYXRvcigpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uZWN0aW9uLCBldmVudF9oYW5kbGUsIHNlcnZlcik6Ci0gICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb24KLSAgICAgICAgc2VsZi5ldmVudF9oYW5kbGUgPSBldmVudF9oYW5kbGUKLSAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIKK2NsYXNzIFByb2Nlc3NUaW1lb3V0KFN5c3RlbUV4aXQpOgorICAgIHBhc3MKIAotICAgIGRlZiBydW5Db21tYW5kKHNlbGYsIGNvbW1hbmQpOgotICAgICAgICAjIEB0b2RvIHRyeS9leGNlcHQKLSAgICAgICAgc2VsZi5jb25uZWN0aW9uLnNlbmQoY29tbWFuZCkKLQotICAgICAgICBpZiBub3Qgc2VsZi5zZXJ2ZXIuaXNfYWxpdmUoKToKLSAgICAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQKLQotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgIyBkb24ndCBsZXQgdGhlIHVzZXIgY3RybC1jIHdoaWxlIHdlJ3JlIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBmb3IgaWR4IGluIHJhbmdlKDAsNCk6ICMgMCwgMSwgMiwgMwotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbm5lY3Rpb24ucG9sbCg1KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24ucmVjdigpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJUaW1lb3V0IHdoaWxlIGF0dGVtcHRpbmcgdG8gY29tbXVuaWNhdGUgd2l0aCBiaXRiYWtlIHNlcnZlciIpCi0gICAgICAgICAgICAgICAgYmIuZmF0YWwoIkdhdmUgdXA7IFRvbyBtYW55IHRyaWVzOiB0aW1lb3V0IHdoaWxlIGF0dGVtcHRpbmcgdG8gY29tbXVuaWNhdGUgd2l0aCBiaXRiYWtlIHNlcnZlciIpCi0gICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIGdldEV2ZW50SGFuZGxlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5ldmVudF9oYW5kbGUudmFsdWUKLQotY2xhc3MgRXZlbnRBZGFwdGVyKCk6Ci0gICAgIiIiCi0gICAgQWRhcHRlciB0byB3cmFwIG91ciBldmVudCBxdWV1ZSBzaW5jZSB0aGUgY2FsbGVyIChiYi5ldmVudCkgZXhwZWN0cyB0bwotICAgIGNhbGwgYSBzZW5kKCkgbWV0aG9kLCBidXQgb3VyIGFjdHVhbCBxdWV1ZSBvbmx5IGhhcyBwdXQoKQotICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBxdWV1ZSk6Ci0gICAgICAgIHNlbGYucXVldWUgPSBxdWV1ZQotCi0gICAgZGVmIHNlbmQoc2VsZiwgZXZlbnQpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLnF1ZXVlLnB1dChldmVudCkKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnI6Ci0gICAgICAgICAgICBwcmludCgiRXZlbnRBZGFwdGVyIHB1a2VkOiAlcyIgJSBzdHIoZXJyKSkKLQotCi1jbGFzcyBQcm9jZXNzU2VydmVyKFByb2Nlc3MsIEJhc2VJbXBsU2VydmVyKToKK2NsYXNzIFByb2Nlc3NTZXJ2ZXIobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MpOgogICAgIHByb2ZpbGVfZmlsZW5hbWUgPSAicHJvZmlsZS5sb2ciCiAgICAgcHJvZmlsZV9wcm9jZXNzZWRfZmlsZW5hbWUgPSAicHJvZmlsZS5sb2cucHJvY2Vzc2VkIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmRfY2hhbm5lbCwgZXZlbnRfcXVldWUsIGZlYXR1cmVsaXN0KToKLSAgICAgICAgQmFzZUltcGxTZXJ2ZXIuX19pbml0X18oc2VsZikKLSAgICAgICAgUHJvY2Vzcy5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLmNvbW1hbmRfY2hhbm5lbCA9IGNvbW1hbmRfY2hhbm5lbAotICAgICAgICBzZWxmLmV2ZW50X3F1ZXVlID0gZXZlbnRfcXVldWUKLSAgICAgICAgc2VsZi5ldmVudCA9IEV2ZW50QWRhcHRlcihldmVudF9xdWV1ZSkKLSAgICAgICAgc2VsZi5mZWF0dXJlbGlzdCA9IGZlYXR1cmVsaXN0CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvY2ssIHNvY2ssIHNvY2tuYW1lKToKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jb21tYW5kX2NoYW5uZWwgPSBGYWxzZQorICAgICAgICBzZWxmLmNvbW1hbmRfY2hhbm5lbF9yZXBseSA9IEZhbHNlCiAgICAgICAgIHNlbGYucXVpdCA9IEZhbHNlCiAgICAgICAgIHNlbGYuaGVhcnRiZWF0X3NlY29uZHMgPSAxICMgZGVmYXVsdCwgQkJfSEVBUlRCRUFUX0VWRU5UIHdpbGwgYmUgY2hlY2tlZCBvbmNlIHdlIGhhdmUgYSBkYXRhc3RvcmUuCiAgICAgICAgIHNlbGYubmV4dF9oZWFydGJlYXQgPSB0aW1lLnRpbWUoKQogCi0gICAgICAgIHNlbGYucXVpdGluLCBzZWxmLnF1aXRvdXQgPSBQaXBlKCkKLSAgICAgICAgc2VsZi5ldmVudF9oYW5kbGUgPSBtdWx0aXByb2Nlc3NpbmcuVmFsdWUoImkiKQorICAgICAgICBzZWxmLmV2ZW50X2hhbmRsZSA9IE5vbmUKKyAgICAgICAgc2VsZi5oYXZldWkgPSBGYWxzZQorICAgICAgICBzZWxmLmxhc3R1aSA9IEZhbHNlCisgICAgICAgIHNlbGYueG1scnBjID0gRmFsc2UKKworICAgICAgICBzZWxmLl9pZGxlZnVucyA9IHt9CisKKyAgICAgICAgc2VsZi5iaXRiYWtlX2xvY2sgPSBsb2NrCisgICAgICAgIHNlbGYuc29jayA9IHNvY2sKKyAgICAgICAgc2VsZi5zb2NrbmFtZSA9IHNvY2tuYW1lCisKKyAgICBkZWYgcmVnaXN0ZXJfaWRsZV9mdW5jdGlvbihzZWxmLCBmdW5jdGlvbiwgZGF0YSk6CisgICAgICAgICIiIlJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoaWxlIHRoZSBzZXJ2ZXIgaXMgaWRsZSIiIgorICAgICAgICBhc3NlcnQgaGFzYXR0cihmdW5jdGlvbiwgJ19fY2FsbF9fJykKKyAgICAgICAgc2VsZi5faWRsZWZ1bnNbZnVuY3Rpb25dID0gZGF0YQogCiAgICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgZm9yIGV2ZW50IGluIGJiLmV2ZW50LnVpX3F1ZXVlOgotICAgICAgICAgICAgc2VsZi5ldmVudF9xdWV1ZS5wdXQoZXZlbnQpCi0gICAgICAgIHNlbGYuZXZlbnRfaGFuZGxlLnZhbHVlID0gYmIuZXZlbnQucmVnaXN0ZXJfVUlIaGFuZGxlcihzZWxmLCBUcnVlKQorCisgICAgICAgIGlmIHNlbGYueG1scnBjaW50ZXJmYWNlWzBdOgorICAgICAgICAgICAgc2VsZi54bWxycGMgPSBiYi5zZXJ2ZXIueG1scnBjc2VydmVyLkJpdEJha2VYTUxSUENTZXJ2ZXIoc2VsZi54bWxycGNpbnRlcmZhY2UsIHNlbGYuY29va2VyLCBzZWxmKQorCisgICAgICAgICAgICBwcmludCgiQml0YmFrZSBYTUxSUEMgc2VydmVyIGFkZHJlc3M6ICVzLCBzZXJ2ZXIgcG9ydDogJXMiICUgKHNlbGYueG1scnBjLmhvc3QsIHNlbGYueG1scnBjLnBvcnQpKQogCiAgICAgICAgIGhlYXJ0YmVhdF9ldmVudCA9IHNlbGYuY29va2VyLmRhdGEuZ2V0VmFyKCdCQl9IRUFSVEJFQVRfRVZFTlQnKQogICAgICAgICBpZiBoZWFydGJlYXRfZXZlbnQ6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5oZWFydGJlYXRfc2Vjb25kcyA9IGZsb2F0KGhlYXJ0YmVhdF9ldmVudCkKICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAjIFRocm93aW5nIGFuIGV4Y2VwdGlvbiBoZXJlIGNhdXNlcyBiaXRiYWtlIHRvIGhhbmcuCi0gICAgICAgICAgICAgICAgIyBKdXN0IHdhcm4gYWJvdXQgdGhlIGludmFsaWQgc2V0dGluZyBhbmQgY29udGludWUKICAgICAgICAgICAgICAgICBiYi53YXJuKCdJZ25vcmluZyBpbnZhbGlkIEJCX0hFQVJUQkVBVF9FVkVOVD0lcywgbXVzdCBiZSBhIGZsb2F0IHNwZWNpZnlpbmcgc2Vjb25kcy4nICUgaGVhcnRiZWF0X2V2ZW50KQotICAgICAgICBiYi5jb29rZXIuc2VydmVyX21haW4oc2VsZi5jb29rZXIsIHNlbGYubWFpbikKKworICAgICAgICBzZWxmLnRpbWVvdXQgPSBzZWxmLnNlcnZlcl90aW1lb3V0IG9yIHNlbGYuY29va2VyLmRhdGEuZ2V0VmFyKCdCQl9TRVJWRVJfVElNRU9VVCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYudGltZW91dDoKKyAgICAgICAgICAgICAgICBzZWxmLnRpbWVvdXQgPSBmbG9hdChzZWxmLnRpbWVvdXQpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGJiLndhcm4oJ0lnbm9yaW5nIGludmFsaWQgQkJfU0VSVkVSX1RJTUVPVVQ9JXMsIG11c3QgYmUgYSBmbG9hdCBzcGVjaWZ5aW5nIHNlY29uZHMuJyAlIHNlbGYudGltZW91dCkKKworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYml0YmFrZV9sb2NrLnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuYml0YmFrZV9sb2NrLnRydW5jYXRlKCkKKyAgICAgICAgICAgIGlmIHNlbGYueG1scnBjOgorICAgICAgICAgICAgICAgIHNlbGYuYml0YmFrZV9sb2NrLndyaXRlKCIlcyAlczolc1xuIiAlIChvcy5nZXRwaWQoKSwgc2VsZi54bWxycGMuaG9zdCwgc2VsZi54bWxycGMucG9ydCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYml0YmFrZV9sb2NrLndyaXRlKCIlc1xuIiAlIChvcy5nZXRwaWQoKSkpCisgICAgICAgICAgICBzZWxmLmJpdGJha2VfbG9jay5mbHVzaCgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHByaW50KCJFcnJvciB3cml0aW5nIHRvIGxvY2sgZmlsZTogJXMiICUgc3RyKGUpKQorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGlmIHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24ucHJvZmlsZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbXBvcnQgY1Byb2ZpbGUgYXMgcHJvZmlsZQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGltcG9ydCBwcm9maWxlCisgICAgICAgICAgICBwcm9mID0gcHJvZmlsZS5Qcm9maWxlKCkKKworICAgICAgICAgICAgcmV0ID0gcHJvZmlsZS5Qcm9maWxlLnJ1bmNhbGwocHJvZiwgc2VsZi5tYWluKQorCisgICAgICAgICAgICBwcm9mLmR1bXBfc3RhdHMoInByb2ZpbGUubG9nIikKKyAgICAgICAgICAgIGJiLnV0aWxzLnByb2Nlc3NfcHJvZmlsZWxvZygicHJvZmlsZS5sb2ciKQorICAgICAgICAgICAgcHJpbnQoIlJhdyBwcm9maWxpbmcgaW5mb3JtYXRpb24gc2F2ZWQgdG8gcHJvZmlsZS5sb2cgYW5kIHByb2Nlc3NlZCBzdGF0aXN0aWNzIHRvIHByb2ZpbGUubG9nLnByb2Nlc3NlZCIpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldCA9IHNlbGYubWFpbigpCisKKyAgICAgICAgcmV0dXJuIHJldAogCiAgICAgZGVmIG1haW4oc2VsZik6Ci0gICAgICAgICMgSWdub3JlIFNJR0lOVCB3aXRoaW4gdGhlIHNlcnZlciwgYXMgYWxsIFNJR0lOVCBoYW5kbGluZyBpcyBkb25lIGJ5Ci0gICAgICAgICMgdGhlIFVJIGFuZCBjb21tdW5pY2F0ZWQgdG8gdXMKLSAgICAgICAgc2VsZi5xdWl0aW4uY2xvc2UoKQotICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNpZ25hbC5TSUdfSUdOKQorICAgICAgICBzZWxmLmNvb2tlci5wcmVfc2VydmUoKQorCiAgICAgICAgIGJiLnV0aWxzLnNldF9wcm9jZXNzX25hbWUoIkNvb2tlciIpCisKKyAgICAgICAgcmVhZHkgPSBbXQorCisgICAgICAgIHNlbGYuY29udHJvbGxlcnNvY2sgPSBGYWxzZQorICAgICAgICBmZHMgPSBbc2VsZi5zb2NrXQorICAgICAgICBpZiBzZWxmLnhtbHJwYzoKKyAgICAgICAgICAgIGZkcy5hcHBlbmQoc2VsZi54bWxycGMpCisgICAgICAgIHByaW50KCJFbnRlcmluZyBzZXJ2ZXIgY29ubmVjdGlvbiBsb29wIikKKworICAgICAgICBkZWYgZGlzY29ubmVjdF9jbGllbnQoc2VsZiwgZmRzKToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmhhdmV1aToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHByaW50KCJEaXNjb25uZWN0aW5nIENsaWVudCIpCisgICAgICAgICAgICBmZHMucmVtb3ZlKHNlbGYuY29udHJvbGxlcnNvY2spCisgICAgICAgICAgICBmZHMucmVtb3ZlKHNlbGYuY29tbWFuZF9jaGFubmVsKQorICAgICAgICAgICAgYmIuZXZlbnQudW5yZWdpc3Rlcl9VSUhoYW5kbGVyKHNlbGYuZXZlbnRfaGFuZGxlLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5jb21tYW5kX2NoYW5uZWxfcmVwbHkud3JpdGVyLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuZXZlbnRfd3JpdGVyLndyaXRlci5jbG9zZSgpCisgICAgICAgICAgICBkZWwgc2VsZi5ldmVudF93cml0ZXIKKyAgICAgICAgICAgIHNlbGYuY29udHJvbGxlcnNvY2suY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5jb250cm9sbGVyc29jayA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLmhhdmV1aSA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLmxhc3R1aSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICBzZWxmLmNvb2tlci5jbGllbnRDb21wbGV0ZSgpCisgICAgICAgICAgICBpZiBzZWxmLnRpbWVvdXQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBwcmludCgiTm8gdGltZW91dCwgZXhpdGluZy4iKQorICAgICAgICAgICAgICAgIHNlbGYucXVpdCA9IFRydWUKKwogICAgICAgICB3aGlsZSBub3Qgc2VsZi5xdWl0OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlmIHNlbGYuY29tbWFuZF9jaGFubmVsLnBvbGwoKToKLSAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9IHNlbGYuY29tbWFuZF9jaGFubmVsLnJlY3YoKQotICAgICAgICAgICAgICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoY29tbWFuZCkKLSAgICAgICAgICAgICAgICBpZiBzZWxmLnF1aXRvdXQucG9sbCgpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnF1aXRvdXQucmVjdigpCisgICAgICAgICAgICBpZiBzZWxmLnNvY2sgaW4gcmVhZHk6CisgICAgICAgICAgICAgICAgc2VsZi5jb250cm9sbGVyc29jaywgYWRkcmVzcyA9IHNlbGYuc29jay5hY2NlcHQoKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuaGF2ZXVpOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiRHJvcHBpbmcgY29ubmVjdGlvbiBhdHRlbXB0IGFzIHdlIGhhdmUgYSBVSSAlcyIgJSAoc3RyKHJlYWR5KSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29udHJvbGxlcnNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJBY2NlcHRpbmcgJXMiICUgKHN0cihyZWFkeSkpKQorICAgICAgICAgICAgICAgICAgICBmZHMuYXBwZW5kKHNlbGYuY29udHJvbGxlcnNvY2spCisgICAgICAgICAgICBpZiBzZWxmLmNvbnRyb2xsZXJzb2NrIGluIHJlYWR5OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkNvbm5lY3RpbmcgQ2xpZW50IikKKyAgICAgICAgICAgICAgICAgICAgdWlfZmRzID0gcmVjdmZkcyhzZWxmLmNvbnRyb2xsZXJzb2NrLCAzKQorCisgICAgICAgICAgICAgICAgICAgICMgV2hlcmUgdG8gd3JpdGUgZXZlbnRzIHRvCisgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9IENvbm5lY3Rpb25Xcml0ZXIodWlfZmRzWzBdKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmV2ZW50X2hhbmRsZSA9IGJiLmV2ZW50LnJlZ2lzdGVyX1VJSGhhbmRsZXIod3JpdGVyLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmV2ZW50X3dyaXRlciA9IHdyaXRlcgorCisgICAgICAgICAgICAgICAgICAgICMgV2hlcmUgdG8gcmVhZCBjb21tYW5kcyBmcm9tCisgICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IENvbm5lY3Rpb25SZWFkZXIodWlfZmRzWzFdKQorICAgICAgICAgICAgICAgICAgICBmZHMuYXBwZW5kKHJlYWRlcikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21tYW5kX2NoYW5uZWwgPSByZWFkZXIKKworICAgICAgICAgICAgICAgICAgICAjIFdoZXJlIHRvIHNlbmQgY29tbWFuZCByZXR1cm4gdmFsdWVzIHRvCisgICAgICAgICAgICAgICAgICAgIHdyaXRlciA9IENvbm5lY3Rpb25Xcml0ZXIodWlfZmRzWzJdKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbW1hbmRfY2hhbm5lbF9yZXBseSA9IHdyaXRlcgorCisgICAgICAgICAgICAgICAgICAgIHNlbGYuaGF2ZXVpID0gVHJ1ZQorCisgICAgICAgICAgICAgICAgZXhjZXB0IChFT0ZFcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIGRpc2Nvbm5lY3RfY2xpZW50KHNlbGYsIGZkcykKKworICAgICAgICAgICAgaWYgbm90IHNlbGYudGltZW91dCA9PSAtMS4wIGFuZCBub3Qgc2VsZi5oYXZldWkgYW5kIHNlbGYubGFzdHVpIGFuZCBzZWxmLnRpbWVvdXQgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgKHNlbGYubGFzdHVpICsgc2VsZi50aW1lb3V0KSA8IHRpbWUudGltZSgpOgorICAgICAgICAgICAgICAgIHByaW50KCJTZXJ2ZXIgdGltZW91dCwgZXhpdGluZy4iKQorICAgICAgICAgICAgICAgIHNlbGYucXVpdCA9IFRydWUKKworICAgICAgICAgICAgaWYgc2VsZi5jb21tYW5kX2NoYW5uZWwgaW4gcmVhZHk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gc2VsZi5jb21tYW5kX2NoYW5uZWwuZ2V0KCkKKyAgICAgICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgQ2xpZW50IGNvbm5lY3Rpb24gc2h1dHRpbmcgZG93bgorICAgICAgICAgICAgICAgICAgICByZWFkeSA9IFtdCisgICAgICAgICAgICAgICAgICAgIGRpc2Nvbm5lY3RfY2xpZW50KHNlbGYsIGZkcykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBjb21tYW5kWzBdID09ICJ0ZXJtaW5hdGVTZXJ2ZXIiOgogICAgICAgICAgICAgICAgICAgICBzZWxmLnF1aXQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBwcmludCgiUnVubmluZyBjb21tYW5kICVzIiAlIGNvbW1hbmQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29tbWFuZF9jaGFubmVsX3JlcGx5LnNlbmQoc2VsZi5jb29rZXIuY29tbWFuZC5ydW5Db21tYW5kKGNvbW1hbmQpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdFeGNlcHRpb24gaW4gc2VydmVyIG1haW4gZXZlbnQgbG9vcCBydW5uaW5nIGNvbW1hbmQgJXMgKCVzKScgJSAoY29tbWFuZCwgc3RyKGUpKSkKKworICAgICAgICAgICAgaWYgc2VsZi54bWxycGMgaW4gcmVhZHk6CisgICAgICAgICAgICAgICAgc2VsZi54bWxycGMuaGFuZGxlX3JlcXVlc3RzKCkKKworICAgICAgICAgICAgcmVhZHkgPSBzZWxmLmlkbGVfY29tbWFuZHMoLjEsIGZkcykKKworICAgICAgICBwcmludCgiRXhpdGluZyIpCisgICAgICAgICMgUmVtb3ZlIHRoZSBzb2NrZXQgZmlsZSBzbyB3ZSBkb24ndCBnZXQgYW55IG1vcmUgY29ubmVjdGlvbnMgdG8gYXZvaWQgcmFjZXMKKyAgICAgICAgb3MudW5saW5rKHNlbGYuc29ja25hbWUpCisgICAgICAgIHNlbGYuc29jay5jbG9zZSgpCisKKyAgICAgICAgdHJ5OiAKKyAgICAgICAgICAgIHNlbGYuY29va2VyLnNodXRkb3duKFRydWUpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmNvb2tlci5wb3N0X3NlcnZlKCkKKworICAgICAgICAjIEZpbmFsbHkgcmVsZWFzZSB0aGUgbG9ja2ZpbGUgYnV0IHdhcm4gYWJvdXQgb3RoZXIgcHJvY2Vzc2VzIGhvbGRpbmcgaXQgb3BlbgorICAgICAgICBsb2NrID0gc2VsZi5iaXRiYWtlX2xvY2sKKyAgICAgICAgbG9ja2ZpbGUgPSBsb2NrLm5hbWUKKyAgICAgICAgbG9jay5jbG9zZSgpCisgICAgICAgIGxvY2sgPSBOb25lCisKKyAgICAgICAgd2hpbGUgbm90IGxvY2s6CisgICAgICAgICAgICB3aXRoIGJiLnV0aWxzLnRpbWVvdXQoMyk6CisgICAgICAgICAgICAgICAgbG9jayA9IGJiLnV0aWxzLmxvY2tmaWxlKGxvY2tmaWxlLCBzaGFyZWQ9RmFsc2UsIHJldHJ5PUZhbHNlLCBibG9jaz1UcnVlKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsb2NrOgorICAgICAgICAgICAgICAgICAgICAjIFNvbWUgc3lzdGVtcyBtYXkgbm90IGhhdmUgbHNvZiBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICAgICAgcHJvY3MgPSBOb25lCiAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnVuQ29tbWFuZChbInN0YXRlRm9yY2VTaHV0ZG93biJdKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9jcyA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsibHNvZiIsICctdycsIGxvY2tmaWxlXSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgaWYgcHJvY3MgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRmFsbCBiYWNrIHRvIGZ1c2VyIGlmIGxzb2YgaXMgdW5hdmFpbGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jcyA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiZnVzZXIiLCAnLXYnLCBsb2NrZmlsZV0sIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKLSAgICAgICAgICAgICAgICBzZWxmLmlkbGVfY29tbWFuZHMoLjEsIFtzZWxmLmNvbW1hbmRfY2hhbm5lbCwgc2VsZi5xdWl0b3V0XSkKLSAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignUnVubmluZyBjb21tYW5kICVzJywgY29tbWFuZCkKLQotICAgICAgICBzZWxmLmV2ZW50X3F1ZXVlLmNsb3NlKCkKLSAgICAgICAgYmIuZXZlbnQudW5yZWdpc3Rlcl9VSUhoYW5kbGVyKHNlbGYuZXZlbnRfaGFuZGxlLnZhbHVlKQotICAgICAgICBzZWxmLmNvbW1hbmRfY2hhbm5lbC5jbG9zZSgpCi0gICAgICAgIHNlbGYuY29va2VyLnNodXRkb3duKFRydWUpCi0gICAgICAgIHNlbGYucXVpdG91dC5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJEZWxheWluZyBzaHV0ZG93biBkdWUgdG8gYWN0aXZlIHByb2Nlc3NlcyB3aGljaCBhcHBlYXIgdG8gYmUgaG9sZGluZyBiaXRiYWtlLmxvY2siCisgICAgICAgICAgICAgICAgICAgIGlmIHByb2NzOgorICAgICAgICAgICAgICAgICAgICAgICAgbXNnICs9ICI6XG4lcyIgJSBzdHIocHJvY3MpCisgICAgICAgICAgICAgICAgICAgIHByaW50KG1zZykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICMgV2UgaG9sZCB0aGUgbG9jayBzbyB3ZSBjYW4gcmVtb3ZlIHRoZSBmaWxlIChoaWRlIHN0YWxlIHBpZCBkYXRhKQorICAgICAgICBiYi51dGlscy5yZW1vdmUobG9ja2ZpbGUpCisgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobG9jaykKIAogICAgIGRlZiBpZGxlX2NvbW1hbmRzKHNlbGYsIGRlbGF5LCBmZHM9Tm9uZSk6CiAgICAgICAgIG5leHRzbGVlcCA9IGRlbGF5CkBAIC0xODYsMTA5ICszMDYsMzE3IEBACiAgICAgICAgICAgICBuZXh0c2xlZXAgPSBzZWxmLm5leHRfaGVhcnRiZWF0IC0gbm93CiAKICAgICAgICAgaWYgbmV4dHNsZWVwIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChmZHMsW10sW10sbmV4dHNsZWVwKQorICAgICAgICAgICAgaWYgc2VsZi54bWxycGM6CisgICAgICAgICAgICAgICAgbmV4dHNsZWVwID0gc2VsZi54bWxycGMuZ2V0X3RpbWVvdXQobmV4dHNsZWVwKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3Quc2VsZWN0KGZkcyxbXSxbXSxuZXh0c2xlZXApWzBdCisgICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICAjIElnbm9yZSBFSU5UUgorICAgICAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGVjdC5zZWxlY3QoZmRzLFtdLFtdLDApWzBdCisKKworY2xhc3MgU2VydmVyQ29tbXVuaWNhdG9yKCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm5lY3Rpb24sIHJlY3YpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBjb25uZWN0aW9uCisgICAgICAgIHNlbGYucmVjdiA9IHJlY3YKIAogICAgIGRlZiBydW5Db21tYW5kKHNlbGYsIGNvbW1hbmQpOgotICAgICAgICAiIiIKLSAgICAgICAgUnVuIGEgY29va2VyIGNvbW1hbmQgb24gdGhlIHNlcnZlcgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5jb21tYW5kX2NoYW5uZWwuc2VuZChzZWxmLmNvb2tlci5jb21tYW5kLnJ1bkNvbW1hbmQoY29tbWFuZCkpCisgICAgICAgIHNlbGYuY29ubmVjdGlvbi5zZW5kKGNvbW1hbmQpCisgICAgICAgIGlmIG5vdCBzZWxmLnJlY3YucG9sbCgzMCk6CisgICAgICAgICAgICByYWlzZSBQcm9jZXNzVGltZW91dCgiVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBhIHJlcGx5IGZyb20gdGhlIGJpdGJha2Ugc2VydmVyIikKKyAgICAgICAgcmV0dXJuIHNlbGYucmVjdi5nZXQoKQogCi0gICAgZGVmIHN0b3Aoc2VsZik6Ci0gICAgICAgIHNlbGYucXVpdGluLnNlbmQoInF1aXQiKQotICAgICAgICBzZWxmLnF1aXRpbi5jbG9zZSgpCi0KLWNsYXNzIEJpdEJha2VQcm9jZXNzU2VydmVyQ29ubmVjdGlvbihCaXRCYWtlQmFzZVNlcnZlckNvbm5lY3Rpb24pOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXJJbXBsLCB1aV9jaGFubmVsLCBldmVudF9xdWV1ZSk6Ci0gICAgICAgIHNlbGYucHJvY3NlcnZlciA9IHNlcnZlckltcGwKLSAgICAgICAgc2VsZi51aV9jaGFubmVsID0gdWlfY2hhbm5lbAotICAgICAgICBzZWxmLmV2ZW50X3F1ZXVlID0gZXZlbnRfcXVldWUKLSAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gU2VydmVyQ29tbXVuaWNhdG9yKHNlbGYudWlfY2hhbm5lbCwgc2VsZi5wcm9jc2VydmVyLmV2ZW50X2hhbmRsZSwgc2VsZi5wcm9jc2VydmVyKQotICAgICAgICBzZWxmLmV2ZW50cyA9IHNlbGYuZXZlbnRfcXVldWUKLSAgICAgICAgc2VsZi50ZXJtaW5hdGVkID0gRmFsc2UKLQotICAgIGRlZiBzaWd0ZXJtX3Rlcm1pbmF0ZShzZWxmKToKLSAgICAgICAgYmIuZXJyb3IoIlVJIHJlY2VpdmVkIFNJR1RFUk0iKQotICAgICAgICBzZWxmLnRlcm1pbmF0ZSgpCi0KLSAgICBkZWYgdGVybWluYXRlKHNlbGYpOgotICAgICAgICBpZiBzZWxmLnRlcm1pbmF0ZWQ6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi50ZXJtaW5hdGVkID0gVHJ1ZQotICAgICAgICBkZWYgZmx1c2hldmVudHMoKToKLSAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBldmVudCA9IHNlbGYuZXZlbnRfcXVldWUuZ2V0KGJsb2NrPUZhbHNlKQotICAgICAgICAgICAgICAgIGV4Y2VwdCAoRW1wdHksIElPRXJyb3IpOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGxvZ2dpbmcuTG9nUmVjb3JkKToKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmhhbmRsZShldmVudCkKLQotICAgICAgICBzZWxmLnByb2NzZXJ2ZXIuc3RvcCgpCi0KLSAgICAgICAgd2hpbGUgc2VsZi5wcm9jc2VydmVyLmlzX2FsaXZlKCk6Ci0gICAgICAgICAgICBmbHVzaGV2ZW50cygpCi0gICAgICAgICAgICBzZWxmLnByb2NzZXJ2ZXIuam9pbigwLjEpCi0KLSAgICAgICAgc2VsZi51aV9jaGFubmVsLmNsb3NlKCkKLSAgICAgICAgc2VsZi5ldmVudF9xdWV1ZS5jbG9zZSgpCi0gICAgICAgIHNlbGYuZXZlbnRfcXVldWUuc2V0ZXhpdCgpCi0gICAgICAgICMgWFhYOiBDYWxsIGV4cGxpY2l0eSBjbG9zZSBpbiBfd3JpdGVyIHRvIGF2b2lkCi0gICAgICAgICMgZmQgbGVha2FnZSBiZWNhdXNlIGlzbid0IGNhbGxlZCBvbiBRdWV1ZS5jbG9zZSgpCi0gICAgICAgIHNlbGYuZXZlbnRfcXVldWUuX3dyaXRlci5jbG9zZSgpCi0KLSMgV3JhcCBRdWV1ZSB0byBwcm92aWRlIEFQSSB3aGljaCBpc24ndCBzZXJ2ZXIgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMKLWNsYXNzIFByb2Nlc3NFdmVudFF1ZXVlKG11bHRpcHJvY2Vzc2luZy5xdWV1ZXMuUXVldWUpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXhzaXplKToKLSAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnF1ZXVlcy5RdWV1ZS5fX2luaXRfXyhzZWxmLCBtYXhzaXplLCBjdHg9bXVsdGlwcm9jZXNzaW5nLmdldF9jb250ZXh0KCkpCi0gICAgICAgIHNlbGYuZXhpdCA9IEZhbHNlCi0gICAgICAgIGJiLnV0aWxzLnNldF9wcm9jZXNzX25hbWUoIlByb2Nlc3NFUXVldWUiKQotCi0gICAgZGVmIHNldGV4aXQoc2VsZik6Ci0gICAgICAgIHNlbGYuZXhpdCA9IFRydWUKLQotICAgIGRlZiB3YWl0RXZlbnQoc2VsZiwgdGltZW91dCk6Ci0gICAgICAgIGlmIHNlbGYuZXhpdDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmdldEV2ZW50KCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgbm90IHNlbGYuc2VydmVyLmlzX2FsaXZlKCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0RXZlbnQoKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0KFRydWUsIHRpbWVvdXQpCi0gICAgICAgIGV4Y2VwdCBFbXB0eToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICBkZWYgZ2V0RXZlbnQoc2VsZik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNlcnZlci5pc19hbGl2ZSgpOgotICAgICAgICAgICAgICAgIHNlbGYuc2V0ZXhpdCgpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5nZXQoRmFsc2UpCi0gICAgICAgIGV4Y2VwdCBFbXB0eToKLSAgICAgICAgICAgIGlmIHNlbGYuZXhpdDoKLSAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotY2xhc3MgQml0QmFrZVNlcnZlcihCaXRCYWtlQmFzZVNlcnZlcik6Ci0gICAgZGVmIGluaXRTZXJ2ZXIoc2VsZiwgc2luZ2xlX3VzZT1UcnVlKToKLSAgICAgICAgIyBlc3RhYmxpc2ggY29tbXVuaWNhdGlvbiBjaGFubmVscy4gIFdlIHVzZSBiaWRpcmVjdGlvbmFsIHBpcGVzIGZvcgotICAgICAgICAjIHVpIDwtLT4gc2VydmVyIGNvbW1hbmQvcmVzcG9uc2UgcGFpcnMKLSAgICAgICAgIyBhbmQgYSBxdWV1ZSBmb3Igc2VydmVyIC0+IHVpIGV2ZW50IG5vdGlmaWNhdGlvbnMKLSAgICAgICAgIwotICAgICAgICBzZWxmLnVpX2NoYW5uZWwsIHNlbGYuc2VydmVyX2NoYW5uZWwgPSBQaXBlKCkKLSAgICAgICAgc2VsZi5ldmVudF9xdWV1ZSA9IFByb2Nlc3NFdmVudFF1ZXVlKDApCi0gICAgICAgIHNlbGYuc2VydmVySW1wbCA9IFByb2Nlc3NTZXJ2ZXIoc2VsZi5zZXJ2ZXJfY2hhbm5lbCwgc2VsZi5ldmVudF9xdWV1ZSwgTm9uZSkKLSAgICAgICAgc2VsZi5ldmVudF9xdWV1ZS5zZXJ2ZXIgPSBzZWxmLnNlcnZlckltcGwKLQotICAgIGRlZiBkZXRhY2goc2VsZik6Ci0gICAgICAgIHNlbGYuc2VydmVySW1wbC5zdGFydCgpCi0gICAgICAgIHJldHVybgotCi0gICAgZGVmIGVzdGFibGlzaENvbm5lY3Rpb24oc2VsZiwgZmVhdHVyZXNldCk6Ci0KLSAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gQml0QmFrZVByb2Nlc3NTZXJ2ZXJDb25uZWN0aW9uKHNlbGYuc2VydmVySW1wbCwgc2VsZi51aV9jaGFubmVsLCBzZWxmLmV2ZW50X3F1ZXVlKQotCi0gICAgICAgIF8sIGVycm9yID0gc2VsZi5jb25uZWN0aW9uLmNvbm5lY3Rpb24ucnVuQ29tbWFuZChbInNldEZlYXR1cmVzIiwgZmVhdHVyZXNldF0pCisgICAgZGVmIHVwZGF0ZUZlYXR1cmVTZXQoc2VsZiwgZmVhdHVyZXNldCk6CisgICAgICAgIF8sIGVycm9yID0gc2VsZi5ydW5Db21tYW5kKFsic2V0RmVhdHVyZXMiLCBmZWF0dXJlc2V0XSkKICAgICAgICAgaWYgZXJyb3I6CiAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBzZXQgdGhlIGNvb2tlciB0byB0aGUgY29ycmVjdCBmZWF0dXJlc2V0OiAlcyIgJSBlcnJvcikKICAgICAgICAgICAgIHJhaXNlIEJhc2VFeGNlcHRpb24oZXJyb3IpCi0gICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIGxhbWJkYSBpLCBzOiBzZWxmLmNvbm5lY3Rpb24uc2lndGVybV90ZXJtaW5hdGUoKSkKLSAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbgorCisgICAgZGVmIGdldEV2ZW50SGFuZGxlKHNlbGYpOgorICAgICAgICBoYW5kbGUsIGVycm9yID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VUlIYW5kbGVyTnVtIl0pCisgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZ2V0IFVJIEhhbmRsZXIgTnVtYmVyOiAlcyIgJSBlcnJvcikKKyAgICAgICAgICAgIHJhaXNlIEJhc2VFeGNlcHRpb24oZXJyb3IpCisKKyAgICAgICAgcmV0dXJuIGhhbmRsZQorCisgICAgZGVmIHRlcm1pbmF0ZVNlcnZlcihzZWxmKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uLnNlbmQoWyd0ZXJtaW5hdGVTZXJ2ZXInXSkKKyAgICAgICAgcmV0dXJuCisKK2NsYXNzIEJpdEJha2VQcm9jZXNzU2VydmVyQ29ubmVjdGlvbihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1aV9jaGFubmVsLCByZWN2LCBlcSwgc29jayk6CisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IFNlcnZlckNvbW11bmljYXRvcih1aV9jaGFubmVsLCByZWN2KQorICAgICAgICBzZWxmLmV2ZW50cyA9IGVxCisgICAgICAgICMgU2F2ZSBzb2NrIHNvIGl0IGRvZXNuJ3QgZ2V0IGdjJ2QgZm9yIHRoZSBsaWZlIG9mIG91ciBjb25uZWN0aW9uCisgICAgICAgIHNlbGYuc29ja2V0X2Nvbm5lY3Rpb24gPSBzb2NrCisKKyAgICBkZWYgdGVybWluYXRlKHNlbGYpOgorICAgICAgICBzZWxmLnNvY2tldF9jb25uZWN0aW9uLmNsb3NlKCkKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uLmNvbm5lY3Rpb24uY2xvc2UoKQorICAgICAgICBzZWxmLmNvbm5lY3Rpb24ucmVjdi5jbG9zZSgpCisgICAgICAgIHJldHVybgorCitjbGFzcyBCaXRCYWtlU2VydmVyKG9iamVjdCk6CisgICAgc3RhcnRfbG9nX2Zvcm1hdCA9ICctLS0gU3RhcnRpbmcgYml0YmFrZSBzZXJ2ZXIgcGlkICVzIGF0ICVzIC0tLScKKyAgICBzdGFydF9sb2dfZGF0ZXRpbWVfZm9ybWF0ID0gJyVZLSVtLSVkICVIOiVNOiVTLiVmJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvY2ssIHNvY2tuYW1lLCBjb25maWd1cmF0aW9uLCBmZWF0dXJlc2V0KToKKworICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uCisgICAgICAgIHNlbGYuZmVhdHVyZXNldCA9IGZlYXR1cmVzZXQKKyAgICAgICAgc2VsZi5zb2NrbmFtZSA9IHNvY2tuYW1lCisgICAgICAgIHNlbGYuYml0YmFrZV9sb2NrID0gbG9jaworICAgICAgICBzZWxmLnJlYWR5cGlwZSwgc2VsZi5yZWFkeXBpcGVpbiA9IG9zLnBpcGUoKQorCisgICAgICAgICMgQ3JlYXRlIHNlcnZlciBjb250cm9sIHNvY2tldAorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzb2NrbmFtZSk6CisgICAgICAgICAgICBvcy51bmxpbmsoc29ja25hbWUpCisKKyAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAjIEFGX1VOSVggaGFzIHBhdGggbGVuZ3RoIGlzc3VlcyBzbyBjaGRpciBoZXJlIHRvIHdvcmthcm91bmQKKyAgICAgICAgY3dkID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgbG9nZmlsZSA9IG9zLnBhdGguam9pbihjd2QsICJiaXRiYWtlLWNvb2tlcmRhZW1vbi5sb2ciKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9zLnBhdGguZGlybmFtZShzb2NrbmFtZSkpCisgICAgICAgICAgICBzZWxmLnNvY2suYmluZChvcy5wYXRoLmJhc2VuYW1lKHNvY2tuYW1lKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKGN3ZCkKKyAgICAgICAgc2VsZi5zb2NrLmxpc3RlbigxKQorCisgICAgICAgIG9zLnNldF9pbmhlcml0YWJsZShzZWxmLnNvY2suZmlsZW5vKCksIFRydWUpCisgICAgICAgIHN0YXJ0ZGF0ZXRpbWUgPSBkYXRldGltZS5kYXRldGltZS5ub3coKQorICAgICAgICBiYi5kYWVtb25pemUuY3JlYXRlRGFlbW9uKHNlbGYuX3N0YXJ0U2VydmVyLCBsb2dmaWxlKQorICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQorICAgICAgICBzZWxmLmJpdGJha2VfbG9jay5jbG9zZSgpCisKKyAgICAgICAgcmVhZHkgPSBDb25uZWN0aW9uUmVhZGVyKHNlbGYucmVhZHlwaXBlKQorICAgICAgICByID0gcmVhZHkucG9sbCgzMCkKKyAgICAgICAgaWYgcjoKKyAgICAgICAgICAgIHIgPSByZWFkeS5nZXQoKQorICAgICAgICBpZiBub3QgciBvciByICE9ICJyZWFkeSI6CisgICAgICAgICAgICByZWFkeS5jbG9zZSgpCisgICAgICAgICAgICBiYi5lcnJvcigiVW5hYmxlIHRvIHN0YXJ0IGJpdGJha2Ugc2VydmVyIikKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGxvZ2ZpbGUpOgorICAgICAgICAgICAgICAgIGxvZ3N0YXJ0X3JlID0gcmUuY29tcGlsZShzZWxmLnN0YXJ0X2xvZ19mb3JtYXQgJSAoJyhbMC05XSspJywgJyhbMC05LV0rIFswLTk6Ll0rKScpKQorICAgICAgICAgICAgICAgIHN0YXJ0ZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4obG9nZmlsZSwgInIiKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3RhcnRlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gbG9nc3RhcnRfcmUubWF0Y2gobGluZS5yc3RyaXAoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxkYXRldGltZSA9IGRhdGV0aW1lLmRhdGV0aW1lLnN0cnB0aW1lKHJlcy5ncm91cCgyKSwgc2VsZi5zdGFydF9sb2dfZGF0ZXRpbWVfZm9ybWF0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZGF0ZXRpbWUgPj0gc3RhcnRkYXRldGltZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgICAgICAgICBpZiBsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmVzKSA+IDEwOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXJyb3IoIkxhc3QgMTAgbGluZXMgb2Ygc2VydmVyIGxvZyBmb3IgdGhpcyBzZXNzaW9uICglcyk6XG4lcyIgJSAobG9nZmlsZSwgIiIuam9pbihsaW5lc1stMTA6XSkpKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXJyb3IoIlNlcnZlciBsb2cgZm9yIHRoaXMgc2Vzc2lvbiAoJXMpOlxuJXMiICUgKGxvZ2ZpbGUsICIiLmpvaW4obGluZXMpKSkKKyAgICAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoMSkKKyAgICAgICAgcmVhZHkuY2xvc2UoKQorICAgICAgICBvcy5jbG9zZShzZWxmLnJlYWR5cGlwZWluKQorCisgICAgZGVmIF9zdGFydFNlcnZlcihzZWxmKToKKyAgICAgICAgcHJpbnQoc2VsZi5zdGFydF9sb2dfZm9ybWF0ICUgKG9zLmdldHBpZCgpLCBkYXRldGltZS5kYXRldGltZS5ub3coKS5zdHJmdGltZShzZWxmLnN0YXJ0X2xvZ19kYXRldGltZV9mb3JtYXQpKSkKKyAgICAgICAgc2VydmVyID0gUHJvY2Vzc1NlcnZlcihzZWxmLmJpdGJha2VfbG9jaywgc2VsZi5zb2NrLCBzZWxmLnNvY2tuYW1lKQorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc2V0U2VydmVyUmVnSWRsZUNhbGxiYWNrKHNlcnZlci5yZWdpc3Rlcl9pZGxlX2Z1bmN0aW9uKQorICAgICAgICB3cml0ZXIgPSBDb25uZWN0aW9uV3JpdGVyKHNlbGYucmVhZHlwaXBlaW4pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY29va2VyID0gYmIuY29va2VyLkJCQ29va2VyKHNlbGYuY29uZmlndXJhdGlvbiwgc2VsZi5mZWF0dXJlc2V0KQorICAgICAgICAgICAgd3JpdGVyLnNlbmQoInJlYWR5IikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgd3JpdGVyLnNlbmQoImZhaWwiKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNsb3NlKHNlbGYucmVhZHlwaXBlaW4pCisgICAgICAgIHNlcnZlci5jb29rZXIgPSBzZWxmLmNvb2tlcgorICAgICAgICBzZXJ2ZXIuc2VydmVyX3RpbWVvdXQgPSBzZWxmLmNvbmZpZ3VyYXRpb24uc2VydmVyX3RpbWVvdXQKKyAgICAgICAgc2VydmVyLnhtbHJwY2ludGVyZmFjZSA9IHNlbGYuY29uZmlndXJhdGlvbi54bWxycGNpbnRlcmZhY2UKKyAgICAgICAgcHJpbnQoIlN0YXJ0ZWQgYml0YmFrZSBzZXJ2ZXIgcGlkICVkIiAlIG9zLmdldHBpZCgpKQorICAgICAgICBzZXJ2ZXIuc3RhcnQoKQorCitkZWYgY29ubmVjdFByb2Nlc3NTZXJ2ZXIoc29ja25hbWUsIGZlYXR1cmVzZXQpOgorICAgICMgQ29ubmVjdCB0byBzb2NrZXQKKyAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICMgQUZfVU5JWCBoYXMgcGF0aCBsZW5ndGggaXNzdWVzIHNvIGNoZGlyIGhlcmUgdG8gd29ya2Fyb3VuZAorICAgIGN3ZCA9IG9zLmdldGN3ZCgpCisKKyAgICB0cnk6CisgICAgICAgIG9zLmNoZGlyKG9zLnBhdGguZGlybmFtZShzb2NrbmFtZSkpCisgICAgICAgIHNvY2suY29ubmVjdChvcy5wYXRoLmJhc2VuYW1lKHNvY2tuYW1lKSkKKyAgICBmaW5hbGx5OgorICAgICAgICBvcy5jaGRpcihjd2QpCisKKyAgICByZWFkZmQgPSB3cml0ZWZkID0gcmVhZGZkMSA9IHdyaXRlZmQxID0gcmVhZGZkMiA9IHdyaXRlZmQyID0gTm9uZQorICAgIGVxID0gY29tbWFuZF9jaGFuX3JlY3YgPSBjb21tYW5kX2NoYW4gPSBOb25lCisKKyAgICB0cnk6CisKKyAgICAgICAgIyBTZW5kIGFuIGZkIGZvciB0aGUgcmVtb3RlIHRvIHdyaXRlIGV2ZW50cyB0bworICAgICAgICByZWFkZmQsIHdyaXRlZmQgPSBvcy5waXBlKCkKKyAgICAgICAgZXEgPSBCQlVJRXZlbnRRdWV1ZShyZWFkZmQpCisgICAgICAgICMgU2VuZCBhbiBmZCBmb3IgdGhlIHJlbW90ZSB0byByZWNpZXZlIGNvbW1hbmRzIGZyb20KKyAgICAgICAgcmVhZGZkMSwgd3JpdGVmZDEgPSBvcy5waXBlKCkKKyAgICAgICAgY29tbWFuZF9jaGFuID0gQ29ubmVjdGlvbldyaXRlcih3cml0ZWZkMSkKKyAgICAgICAgIyBTZW5kIGFuIGZkIGZvciB0aGUgcmVtb3RlIHRvIHdyaXRlIGNvbW1hbmRzIHJlc3VsdHMgdG8KKyAgICAgICAgcmVhZGZkMiwgd3JpdGVmZDIgPSBvcy5waXBlKCkKKyAgICAgICAgY29tbWFuZF9jaGFuX3JlY3YgPSBDb25uZWN0aW9uUmVhZGVyKHJlYWRmZDIpCisKKyAgICAgICAgc2VuZGZkcyhzb2NrLCBbd3JpdGVmZCwgcmVhZGZkMSwgd3JpdGVmZDJdKQorCisgICAgICAgIHNlcnZlcl9jb25uZWN0aW9uID0gQml0QmFrZVByb2Nlc3NTZXJ2ZXJDb25uZWN0aW9uKGNvbW1hbmRfY2hhbiwgY29tbWFuZF9jaGFuX3JlY3YsIGVxLCBzb2NrKQorCisgICAgICAgICMgQ2xvc2UgdGhlIGVuZHMgb2YgdGhlIHBpcGVzIHdlIHdvbid0IHVzZQorICAgICAgICBmb3IgaSBpbiBbd3JpdGVmZCwgcmVhZGZkMSwgd3JpdGVmZDJdOgorICAgICAgICAgICAgb3MuY2xvc2UoaSkKKworICAgICAgICBzZXJ2ZXJfY29ubmVjdGlvbi5jb25uZWN0aW9uLnVwZGF0ZUZlYXR1cmVTZXQoZmVhdHVyZXNldCkKKworICAgIGV4Y2VwdCAoRXhjZXB0aW9uLCBTeXN0ZW1FeGl0KSBhcyBlOgorICAgICAgICBpZiBjb21tYW5kX2NoYW5fcmVjdjoKKyAgICAgICAgICAgIGNvbW1hbmRfY2hhbl9yZWN2LmNsb3NlKCkKKyAgICAgICAgaWYgY29tbWFuZF9jaGFuOgorICAgICAgICAgICAgY29tbWFuZF9jaGFuLmNsb3NlKCkKKyAgICAgICAgZm9yIGkgaW4gW3dyaXRlZmQsIHJlYWRmZDEsIHdyaXRlZmQyXToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShpKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgcmFpc2UKKworICAgIHJldHVybiBzZXJ2ZXJfY29ubmVjdGlvbgorCitkZWYgc2VuZGZkcyhzb2NrLCBmZHMpOgorICAgICAgICAnJydTZW5kIGFuIGFycmF5IG9mIGZkcyBvdmVyIGFuIEFGX1VOSVggc29ja2V0LicnJworICAgICAgICBmZHMgPSBhcnJheS5hcnJheSgnaScsIGZkcykKKyAgICAgICAgbXNnID0gYnl0ZXMoW2xlbihmZHMpICUgMjU2XSkKKyAgICAgICAgc29jay5zZW5kbXNnKFttc2ddLCBbKHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU0NNX1JJR0hUUywgZmRzKV0pCisKK2RlZiByZWN2ZmRzKHNvY2ssIHNpemUpOgorICAgICAgICAnJydSZWNlaXZlIGFuIGFycmF5IG9mIGZkcyBvdmVyIGFuIEFGX1VOSVggc29ja2V0LicnJworICAgICAgICBhID0gYXJyYXkuYXJyYXkoJ2knKQorICAgICAgICBieXRlc19zaXplID0gYS5pdGVtc2l6ZSAqIHNpemUKKyAgICAgICAgbXNnLCBhbmNkYXRhLCBmbGFncywgYWRkciA9IHNvY2sucmVjdm1zZygxLCBzb2NrZXQuQ01TR19MRU4oYnl0ZXNfc2l6ZSkpCisgICAgICAgIGlmIG5vdCBtc2cgYW5kIG5vdCBhbmNkYXRhOgorICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbGVuKGFuY2RhdGEpICE9IDE6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyZWNlaXZlZCAlZCBpdGVtcyBvZiBhbmNkYXRhJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihhbmNkYXRhKSkKKyAgICAgICAgICAgIGNtc2dfbGV2ZWwsIGNtc2dfdHlwZSwgY21zZ19kYXRhID0gYW5jZGF0YVswXQorICAgICAgICAgICAgaWYgKGNtc2dfbGV2ZWwgPT0gc29ja2V0LlNPTF9TT0NLRVQgYW5kCisgICAgICAgICAgICAgICAgY21zZ190eXBlID09IHNvY2tldC5TQ01fUklHSFRTKToKKyAgICAgICAgICAgICAgICBpZiBsZW4oY21zZ19kYXRhKSAlIGEuaXRlbXNpemUgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICAgICAgICAgIGEuZnJvbWJ5dGVzKGNtc2dfZGF0YSkKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGVuKGEpICUgMjU2ID09IG1zZ1swXQorICAgICAgICAgICAgICAgIHJldHVybiBsaXN0KGEpCisgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgSW5kZXhFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignSW52YWxpZCBkYXRhIHJlY2VpdmVkJykKKworY2xhc3MgQkJVSUV2ZW50UXVldWU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlYWRmZCk6CisKKyAgICAgICAgc2VsZi5ldmVudFF1ZXVlID0gW10KKyAgICAgICAgc2VsZi5ldmVudFF1ZXVlTG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKyAgICAgICAgc2VsZi5ldmVudFF1ZXVlTm90aWZ5ID0gdGhyZWFkaW5nLkV2ZW50KCkKKworICAgICAgICBzZWxmLnJlYWRlciA9IENvbm5lY3Rpb25SZWFkZXIocmVhZGZkKQorCisgICAgICAgIHNlbGYudCA9IHRocmVhZGluZy5UaHJlYWQoKQorICAgICAgICBzZWxmLnQuc2V0RGFlbW9uKFRydWUpCisgICAgICAgIHNlbGYudC5ydW4gPSBzZWxmLnN0YXJ0Q2FsbGJhY2tIYW5kbGVyCisgICAgICAgIHNlbGYudC5zdGFydCgpCisKKyAgICBkZWYgZ2V0RXZlbnQoc2VsZik6CisgICAgICAgIHNlbGYuZXZlbnRRdWV1ZUxvY2suYWNxdWlyZSgpCisKKyAgICAgICAgaWYgbGVuKHNlbGYuZXZlbnRRdWV1ZSkgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuZXZlbnRRdWV1ZUxvY2sucmVsZWFzZSgpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGl0ZW0gPSBzZWxmLmV2ZW50UXVldWUucG9wKDApCisKKyAgICAgICAgaWYgbGVuKHNlbGYuZXZlbnRRdWV1ZSkgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuZXZlbnRRdWV1ZU5vdGlmeS5jbGVhcigpCisKKyAgICAgICAgc2VsZi5ldmVudFF1ZXVlTG9jay5yZWxlYXNlKCkKKyAgICAgICAgcmV0dXJuIGl0ZW0KKworICAgIGRlZiB3YWl0RXZlbnQoc2VsZiwgZGVsYXkpOgorICAgICAgICBzZWxmLmV2ZW50UXVldWVOb3RpZnkud2FpdChkZWxheSkKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0RXZlbnQoKQorCisgICAgZGVmIHF1ZXVlX2V2ZW50KHNlbGYsIGV2ZW50KToKKyAgICAgICAgc2VsZi5ldmVudFF1ZXVlTG9jay5hY3F1aXJlKCkKKyAgICAgICAgc2VsZi5ldmVudFF1ZXVlLmFwcGVuZChldmVudCkKKyAgICAgICAgc2VsZi5ldmVudFF1ZXVlTm90aWZ5LnNldCgpCisgICAgICAgIHNlbGYuZXZlbnRRdWV1ZUxvY2sucmVsZWFzZSgpCisKKyAgICBkZWYgc2VuZF9ldmVudChzZWxmLCBldmVudCk6CisgICAgICAgIHNlbGYucXVldWVfZXZlbnQocGlja2xlLmxvYWRzKGV2ZW50KSkKKworICAgIGRlZiBzdGFydENhbGxiYWNrSGFuZGxlcihzZWxmKToKKyAgICAgICAgYmIudXRpbHMuc2V0X3Byb2Nlc3NfbmFtZSgiVUlFdmVudFF1ZXVlIikKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnJlYWRlci53YWl0KCkKKyAgICAgICAgICAgICAgICBldmVudCA9IHNlbGYucmVhZGVyLmdldCgpCisgICAgICAgICAgICAgICAgc2VsZi5xdWV1ZV9ldmVudChldmVudCkKKyAgICAgICAgICAgIGV4Y2VwdCBFT0ZFcnJvcjoKKyAgICAgICAgICAgICAgICAjIEVhc2llc3Qgd2F5IHRvIGV4aXQgaXMgdG8gY2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciB0byBjYXVzZSBhbiBleGl0CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgc2VsZi5yZWFkZXIuY2xvc2UoKQorCitjbGFzcyBDb25uZWN0aW9uUmVhZGVyKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmQpOgorICAgICAgICBzZWxmLnJlYWRlciA9IG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkNvbm5lY3Rpb24oZmQsIHdyaXRhYmxlPUZhbHNlKQorICAgICAgICBzZWxmLnJsb2NrID0gbXVsdGlwcm9jZXNzaW5nLkxvY2soKQorCisgICAgZGVmIHdhaXQoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgcmV0dXJuIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLndhaXQoW3NlbGYucmVhZGVyXSwgdGltZW91dCkKKworICAgIGRlZiBwb2xsKHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5wb2xsKHRpbWVvdXQpCisKKyAgICBkZWYgZ2V0KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYucmxvY2s6CisgICAgICAgICAgICByZXMgPSBzZWxmLnJlYWRlci5yZWN2X2J5dGVzKCkKKyAgICAgICAgcmV0dXJuIG11bHRpcHJvY2Vzc2luZy5yZWR1Y3Rpb24uRm9ya2luZ1BpY2tsZXIubG9hZHMocmVzKQorCisgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLmZpbGVubygpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5jbG9zZSgpCisKKworY2xhc3MgQ29ubmVjdGlvbldyaXRlcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZkKToKKyAgICAgICAgc2VsZi53cml0ZXIgPSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5Db25uZWN0aW9uKGZkLCByZWFkYWJsZT1GYWxzZSkKKyAgICAgICAgc2VsZi53bG9jayA9IG11bHRpcHJvY2Vzc2luZy5Mb2NrKCkKKyAgICAgICAgIyBXaHkgYmIuZXZlbnQgbmVlZHMgdGhpcyBJIGhhdmUgbm8gaWRlYQorICAgICAgICBzZWxmLmV2ZW50ID0gc2VsZgorCisgICAgZGVmIHNlbmQoc2VsZiwgb2JqKToKKyAgICAgICAgb2JqID0gbXVsdGlwcm9jZXNzaW5nLnJlZHVjdGlvbi5Gb3JraW5nUGlja2xlci5kdW1wcyhvYmopCisgICAgICAgIHdpdGggc2VsZi53bG9jazoKKyAgICAgICAgICAgIHNlbGYud3JpdGVyLnNlbmRfYnl0ZXMob2JqKQorCisgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYud3JpdGVyLmZpbGVubygpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLndyaXRlci5jbG9zZSgpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2VydmVyL3htbHJwYy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIveG1scnBjLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDYwMDdmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIveG1scnBjLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDIyICswLDAgQEAKLSMKLSMgQml0QmFrZSBYTUxSUEMgU2VydmVyCi0jCi0jIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDcgIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIKLSMgQ29weXJpZ2h0IChDKSAyMDA2IC0gMjAwOCAgUmljaGFyZCBQdXJkaWUKLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0jIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0jIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0KLSIiIgotICAgIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYW4geG1scnBjIHNlcnZlciBmb3IgQml0QmFrZS4KLQotICAgIFVzZSB0aGlzIGJ5IGRlcml2aW5nIGEgY2xhc3MgZnJvbSBCaXRCYWtlWE1MUlBDU2VydmVyIGFuZCB0aGVuIGFkZGluZwotICAgIG1ldGhvZHMgd2hpY2ggeW91IHdhbnQgdG8gImV4cG9ydCIgdmlhIFhNTFJQQy4gSWYgdGhlIG1ldGhvZHMgaGF2ZSB0aGUKLSAgICBwcmVmaXggeG1scnBjXywgdGhlbiByZWdpc3RlcmluZyB0aG9zZSBmdW5jdGlvbiB3aWxsIGhhcHBlbiBhdXRvbWF0aWNhbGx5LAotICAgIGlmIG5vdCwgeW91IG5lZWQgdG8gY2FsbCByZWdpc3Rlcl9mdW5jdGlvbi4KLQotICAgIFVzZSByZWdpc3Rlcl9pZGxlX2Z1bmN0aW9uKCkgdG8gYWRkIGEgZnVuY3Rpb24gd2hpY2ggdGhlIHhtbHJwYyBzZXJ2ZXIKLSAgICBjYWxscyBmcm9tIHdpdGhpbiBzZXJ2ZXJfZm9yZXZlciB3aGVuIG5vIHJlcXVlc3RzIGFyZSBwZW5kaW5nLiBNYWtlIHN1cmUKLSAgICB0aGF0IHRob3NlIGZ1bmN0aW9ucyBhcmUgbm9uLWJsb2NraW5nIG9yIGVsc2UgeW91IHdpbGwgaW50cm9kdWNlIGxhdGVuY3kKLSAgICBpbiB0aGUgc2VydmVyJ3MgbWFpbiBsb29wLgotIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotCi1pbXBvcnQgaGFzaGxpYgotaW1wb3J0IHRpbWUKLWltcG9ydCBzb2NrZXQKLWltcG9ydCBzaWduYWwKLWltcG9ydCB0aHJlYWRpbmcKLWltcG9ydCBwaWNrbGUKLWltcG9ydCBpbnNwZWN0Ci1pbXBvcnQgc2VsZWN0Ci1pbXBvcnQgaHR0cC5jbGllbnQKLWltcG9ydCB4bWxycGMuY2xpZW50Ci1mcm9tIHhtbHJwYy5zZXJ2ZXIgaW1wb3J0IFNpbXBsZVhNTFJQQ1NlcnZlciwgU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIKLQotaW1wb3J0IGJiCi1mcm9tIGJiIGltcG9ydCBkYWVtb25pemUKLWZyb20gYmIudWkgaW1wb3J0IHVpZXZlbnQKLWZyb20gLiBpbXBvcnQgQml0QmFrZUJhc2VTZXJ2ZXIsIEJpdEJha2VCYXNlU2VydmVyQ29ubmVjdGlvbiwgQmFzZUltcGxTZXJ2ZXIKLQotREVCVUcgPSBGYWxzZQotCi1jbGFzcyBCQlRyYW5zcG9ydCh4bWxycGMuY2xpZW50LlRyYW5zcG9ydCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRpbWVvdXQpOgotICAgICAgICBzZWxmLnRpbWVvdXQgPSB0aW1lb3V0Ci0gICAgICAgIHNlbGYuY29ubmVjdGlvbl90b2tlbiA9IE5vbmUKLSAgICAgICAgeG1scnBjLmNsaWVudC5UcmFuc3BvcnQuX19pbml0X18oc2VsZikKLQotICAgICMgTW9kaWZpZWQgZnJvbSBkZWZhdWx0IHRvIHBhc3MgdGltZW91dCB0byBIVFRQQ29ubmVjdGlvbgotICAgIGRlZiBtYWtlX2Nvbm5lY3Rpb24oc2VsZiwgaG9zdCk6Ci0gICAgICAgICNyZXR1cm4gYW4gZXhpc3RpbmcgY29ubmVjdGlvbiBpZiBwb3NzaWJsZS4gIFRoaXMgYWxsb3dzCi0gICAgICAgICNIVFRQLzEuMSBrZWVwLWFsaXZlLgotICAgICAgICBpZiBzZWxmLl9jb25uZWN0aW9uIGFuZCBob3N0ID09IHNlbGYuX2Nvbm5lY3Rpb25bMF06Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fY29ubmVjdGlvblsxXQotCi0gICAgICAgICMgY3JlYXRlIGEgSFRUUCBjb25uZWN0aW9uIG9iamVjdCBmcm9tIGEgaG9zdCBkZXNjcmlwdG9yCi0gICAgICAgIGNob3N0LCBzZWxmLl9leHRyYV9oZWFkZXJzLCB4NTA5ID0gc2VsZi5nZXRfaG9zdF9pbmZvKGhvc3QpCi0gICAgICAgICNzdG9yZSB0aGUgaG9zdCBhcmd1bWVudCBhbG9uZyB3aXRoIHRoZSBjb25uZWN0aW9uIG9iamVjdAotICAgICAgICBzZWxmLl9jb25uZWN0aW9uID0gaG9zdCwgaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24oY2hvc3QsIHRpbWVvdXQ9c2VsZi50aW1lb3V0KQotICAgICAgICByZXR1cm4gc2VsZi5fY29ubmVjdGlvblsxXQotCi0gICAgZGVmIHNldF9jb25uZWN0aW9uX3Rva2VuKHNlbGYsIHRva2VuKToKLSAgICAgICAgc2VsZi5jb25uZWN0aW9uX3Rva2VuID0gdG9rZW4KLQotICAgIGRlZiBzZW5kX2NvbnRlbnQoc2VsZiwgaCwgYm9keSk6Ci0gICAgICAgIGlmIHNlbGYuY29ubmVjdGlvbl90b2tlbjoKLSAgICAgICAgICAgIGgucHV0aGVhZGVyKCJCaXRiYWtlLXRva2VuIiwgc2VsZi5jb25uZWN0aW9uX3Rva2VuKQotICAgICAgICB4bWxycGMuY2xpZW50LlRyYW5zcG9ydC5zZW5kX2NvbnRlbnQoc2VsZiwgaCwgYm9keSkKLQotZGVmIF9jcmVhdGVfc2VydmVyKGhvc3QsIHBvcnQsIHRpbWVvdXQgPSA2MCk6Ci0gICAgdCA9IEJCVHJhbnNwb3J0KHRpbWVvdXQpCi0gICAgcyA9IHhtbHJwYy5jbGllbnQuU2VydmVyUHJveHkoImh0dHA6Ly8lczolZC8iICUgKGhvc3QsIHBvcnQpLCB0cmFuc3BvcnQ9dCwgYWxsb3dfbm9uZT1UcnVlLCB1c2VfYnVpbHRpbl90eXBlcz1UcnVlKQotICAgIHJldHVybiBzLCB0Ci0KLWRlZiBjaGVja19jb25uZWN0aW9uKHJlbW90ZSwgdGltZW91dCk6Ci0gICAgdHJ5OgotICAgICAgICBob3N0LCBwb3J0ID0gcmVtb3RlLnNwbGl0KCI6IikKLSAgICAgICAgcG9ydCA9IGludChwb3J0KQotICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgYmIud2FybigiRmFpbGVkIHRvIHJlYWQgcmVtb3RlIGRlZmluaXRpb24gKCVzKSIgJSBzdHIoZSkpCi0gICAgICAgIHJhaXNlIGUKLQotICAgIHNlcnZlciwgX3RyYW5zcG9ydCA9IF9jcmVhdGVfc2VydmVyKGhvc3QsIHBvcnQsIHRpbWVvdXQpCi0gICAgdHJ5OgotICAgICAgICByZXQsIGVyciA9ICBzZXJ2ZXIucnVuQ29tbWFuZChbJ2dldFZhcmlhYmxlJywgJ1RPUERJUiddKQotICAgICAgICBpZiBlcnIgb3Igbm90IHJldDoKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgIGV4Y2VwdCBDb25uZWN0aW9uRXJyb3I6Ci0gICAgICAgIHJldHVybiBGYWxzZQotICAgIHJldHVybiBUcnVlCi0KLWNsYXNzIEJpdEJha2VTZXJ2ZXJDb21tYW5kcygpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlcik6Ci0gICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyCi0gICAgICAgIHNlbGYuaGFzX2NsaWVudCA9IEZhbHNlCi0KLSAgICBkZWYgcmVnaXN0ZXJFdmVudEhhbmRsZXIoc2VsZiwgaG9zdCwgcG9ydCk6Ci0gICAgICAgICIiIgotICAgICAgICBSZWdpc3RlciBhIHJlbW90ZSBVSSBFdmVudCBIYW5kbGVyCi0gICAgICAgICIiIgotICAgICAgICBzLCB0ID0gX2NyZWF0ZV9zZXJ2ZXIoaG9zdCwgcG9ydCkKLQotICAgICAgICAjIHdlIGRvbid0IGFsbG93IGNvbm5lY3Rpb25zIGlmIHRoZSBjb29rZXIgaXMgcnVubmluZwotICAgICAgICBpZiAoc2VsZi5jb29rZXIuc3RhdGUgaW4gW2JiLmNvb2tlci5zdGF0ZS5wYXJzaW5nLCBiYi5jb29rZXIuc3RhdGUucnVubmluZ10pOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUsICJDb29rZXIgaXMgYnVzeTogJXMiICUgYmIuY29va2VyLnN0YXRlLmdldF9uYW1lKHNlbGYuY29va2VyLnN0YXRlKQotCi0gICAgICAgIHNlbGYuZXZlbnRfaGFuZGxlID0gYmIuZXZlbnQucmVnaXN0ZXJfVUlIaGFuZGxlcihzLCBUcnVlKQotICAgICAgICByZXR1cm4gc2VsZi5ldmVudF9oYW5kbGUsICdPSycKLQotICAgIGRlZiB1bnJlZ2lzdGVyRXZlbnRIYW5kbGVyKHNlbGYsIGhhbmRsZXJOdW0pOgotICAgICAgICAiIiIKLSAgICAgICAgVW5yZWdpc3RlciBhIHJlbW90ZSBVSSBFdmVudCBIYW5kbGVyCi0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gYmIuZXZlbnQudW5yZWdpc3Rlcl9VSUhoYW5kbGVyKGhhbmRsZXJOdW0pCi0KLSAgICBkZWYgcnVuQ29tbWFuZChzZWxmLCBjb21tYW5kKToKLSAgICAgICAgIiIiCi0gICAgICAgIFJ1biBhIGNvb2tlciBjb21tYW5kIG9uIHRoZSBzZXJ2ZXIKLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBzZWxmLmNvb2tlci5jb21tYW5kLnJ1bkNvbW1hbmQoY29tbWFuZCwgc2VsZi5zZXJ2ZXIucmVhZG9ubHkpCi0KLSAgICBkZWYgZ2V0RXZlbnRIYW5kbGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmV2ZW50X2hhbmRsZQotCi0gICAgZGVmIHRlcm1pbmF0ZVNlcnZlcihzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFRyaWdnZXIgdGhlIHNlcnZlciB0byBxdWl0Ci0gICAgICAgICIiIgotICAgICAgICBzZWxmLnNlcnZlci5xdWl0ID0gVHJ1ZQotICAgICAgICBwcmludCgiU2VydmVyIChjb29rZXIpIGV4aXRpbmciKQotICAgICAgICByZXR1cm4KLQotICAgIGRlZiBhZGRDbGllbnQoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuaGFzX2NsaWVudDoKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIHRva2VuID0gaGFzaGxpYi5tZDUoc3RyKHRpbWUudGltZSgpKS5lbmNvZGUoInV0Zi04IikpLmhleGRpZ2VzdCgpCi0gICAgICAgIHNlbGYuc2VydmVyLnNldF9jb25uZWN0aW9uX3Rva2VuKHRva2VuKQotICAgICAgICBzZWxmLmhhc19jbGllbnQgPSBUcnVlCi0gICAgICAgIHJldHVybiB0b2tlbgotCi0gICAgZGVmIHJlbW92ZUNsaWVudChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5oYXNfY2xpZW50OgotICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc2V0X2Nvbm5lY3Rpb25fdG9rZW4oTm9uZSkKLSAgICAgICAgICAgIHNlbGYuaGFzX2NsaWVudCA9IEZhbHNlCi0gICAgICAgICAgICBpZiBzZWxmLnNlcnZlci5zaW5nbGVfdXNlOgotICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnF1aXQgPSBUcnVlCi0KLSMgVGhpcyByZXF1ZXN0IGhhbmRsZXIgY2hlY2tzIGlmIHRoZSByZXF1ZXN0IGhhcyBhICJCaXRiYWtlLXRva2VuIiBoZWFkZXIKLSMgZmllbGQgKHRoaXMgY29tZXMgZnJvbSB0aGUgY2xpZW50IHNpZGUpIGFuZCBjb21wYXJlcyBpdCB3aXRoIGl0cyBpbnRlcm5hbAotIyAiQml0YmFrZS10b2tlbiIgZmllbGQgKHRoaXMgY29tZXMgZnJvbSB0aGUgc2VydmVyKS4gSWYgdGhlIHR3byBhcmUgbm90Ci0jIGVxdWFsLCBpdCBpcyBhc3N1bWVkIHRoYXQgYSBjbGllbnQgaXMgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gdGhlIHNlcnZlcgotIyB3aGlsZSBhbm90aGVyIGNsaWVudCBpcyBjb25uZWN0ZWQgdG8gdGhlIHNlcnZlci4gSW4gdGhpcyBjYXNlLCBhIDUwMyBlcnJvcgotIyAoInNlcnZpY2UgdW5hdmFpbGFibGUiKSBpcyByZXR1cm5lZCB0byB0aGUgY2xpZW50LgotY2xhc3MgQml0QmFrZVhNTFJQQ1JlcXVlc3RIYW5kbGVyKFNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MsIHNlcnZlcik6Ci0gICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyCi0gICAgICAgIFNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyLl9faW5pdF9fKHNlbGYsIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzLCBzZXJ2ZXIpCi0KLSAgICBkZWYgZG9fUE9TVChzZWxmKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmVtb3RlX3Rva2VuID0gc2VsZi5oZWFkZXJzWyJCaXRiYWtlLXRva2VuIl0KLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcmVtb3RlX3Rva2VuID0gTm9uZQotICAgICAgICBpZiByZW1vdGVfdG9rZW4gIT0gc2VsZi5zZXJ2ZXIuY29ubmVjdGlvbl90b2tlbiBhbmQgcmVtb3RlX3Rva2VuICE9ICJvYnNlcnZlciI6Ci0gICAgICAgICAgICBzZWxmLnJlcG9ydF81MDMoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgcmVtb3RlX3Rva2VuID09ICJvYnNlcnZlciI6Ci0gICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIucmVhZG9ubHkgPSBUcnVlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnJlYWRvbmx5ID0gRmFsc2UKLSAgICAgICAgICAgIFNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyLmRvX1BPU1Qoc2VsZikKLQotICAgIGRlZiByZXBvcnRfNTAzKHNlbGYpOgotICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoNTAzKQotICAgICAgICByZXNwb25zZSA9ICdObyBtb3JlIGNsaWVudCBhbGxvd2VkJwotICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LXR5cGUiLCAidGV4dC9wbGFpbiIpCi0gICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIiwgc3RyKGxlbihyZXNwb25zZSkpKQotICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKLSAgICAgICAgc2VsZi53ZmlsZS53cml0ZShieXRlcyhyZXNwb25zZSwgJ3V0Zi04JykpCi0KLQotY2xhc3MgWE1MUlBDUHJveHlTZXJ2ZXIoQmFzZUltcGxTZXJ2ZXIpOgotICAgICIiIiBub3QgYSByZWFsIHdvcmtpbmcgc2VydmVyLCBidXQgYSBzdHViIGZvciBhIHByb3h5IHNlcnZlciBjb25uZWN0aW9uCi0KLSAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCwgdXNlX2J1aWx0aW5fdHlwZXM9VHJ1ZSk6Ci0gICAgICAgIHNlbGYuaG9zdCA9IGhvc3QKLSAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAotCi1jbGFzcyBYTUxSUENTZXJ2ZXIoU2ltcGxlWE1MUlBDU2VydmVyLCBCYXNlSW1wbFNlcnZlcik6Ci0gICAgIyByZW1vdmUgdGhpcyB3aGVuIHlvdSdyZSBkb25lIHdpdGggZGVidWdnaW5nCi0gICAgIyBhbGxvd19yZXVzZV9hZGRyZXNzID0gVHJ1ZQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGludGVyZmFjZSwgc2luZ2xlX3VzZT1GYWxzZSwgaWRsZV90aW1lb3V0PTApOgotICAgICAgICAiIiIKLSAgICAgICAgQ29uc3RydWN0b3IKLSAgICAgICAgIiIiCi0gICAgICAgIEJhc2VJbXBsU2VydmVyLl9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYuc2luZ2xlX3VzZSA9IHNpbmdsZV91c2UKLSAgICAgICAgIyBVc2UgYXV0byBwb3J0IGNvbmZpZ3VyYXRpb24KLSAgICAgICAgaWYgKGludGVyZmFjZVsxXSA9PSAtMSk6Ci0gICAgICAgICAgICBpbnRlcmZhY2UgPSAoaW50ZXJmYWNlWzBdLCAwKQotICAgICAgICBTaW1wbGVYTUxSUENTZXJ2ZXIuX19pbml0X18oc2VsZiwgaW50ZXJmYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEhhbmRsZXI9Qml0QmFrZVhNTFJQQ1JlcXVlc3RIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nUmVxdWVzdHM9RmFsc2UsIGFsbG93X25vbmU9VHJ1ZSkKLSAgICAgICAgc2VsZi5ob3N0LCBzZWxmLnBvcnQgPSBzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpCi0gICAgICAgIHNlbGYuY29ubmVjdGlvbl90b2tlbiA9IE5vbmUKLSAgICAgICAgI3NlbGYucmVnaXN0ZXJfaW50cm9zcGVjdGlvbl9mdW5jdGlvbnMoKQotICAgICAgICBzZWxmLmNvbW1hbmRzID0gQml0QmFrZVNlcnZlckNvbW1hbmRzKHNlbGYpCi0gICAgICAgIHNlbGYuYXV0b3JlZ2lzdGVyX2FsbF9mdW5jdGlvbnMoc2VsZi5jb21tYW5kcywgIiIpCi0gICAgICAgIHNlbGYuaW50ZXJmYWNlID0gaW50ZXJmYWNlCi0gICAgICAgIHNlbGYudGltZSA9IHRpbWUudGltZSgpCi0gICAgICAgIHNlbGYuaWRsZV90aW1lb3V0ID0gaWRsZV90aW1lb3V0Ci0gICAgICAgIGlmIGlkbGVfdGltZW91dDoKLSAgICAgICAgICAgIHNlbGYucmVnaXN0ZXJfaWRsZV9mdW5jdGlvbihzZWxmLmhhbmRsZV9pZGxlX3RpbWVvdXQsIHNlbGYpCi0KLSAgICBkZWYgYWRkY29va2VyKHNlbGYsIGNvb2tlcik6Ci0gICAgICAgIEJhc2VJbXBsU2VydmVyLmFkZGNvb2tlcihzZWxmLCBjb29rZXIpCi0gICAgICAgIHNlbGYuY29tbWFuZHMuY29va2VyID0gY29va2VyCi0KLSAgICBkZWYgYXV0b3JlZ2lzdGVyX2FsbF9mdW5jdGlvbnMoc2VsZiwgY29udGV4dCwgcHJlZml4KToKLSAgICAgICAgIiIiCi0gICAgICAgIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgcmVnaXN0ZXJpbmcgYWxsIGZ1bmN0aW9ucyBpbiB0aGUgc2NvcGUKLSAgICAgICAgb2YgdGhpcyBjbGFzcyB0aGF0IHN0YXJ0IHdpdGggYSBjb21tb24gcHJlZml4Ci0gICAgICAgICIiIgotICAgICAgICBtZXRob2RsaXN0ID0gaW5zcGVjdC5nZXRtZW1iZXJzKGNvbnRleHQsIGluc3BlY3QuaXNtZXRob2QpCi0gICAgICAgIGZvciBuYW1lLCBtZXRob2QgaW4gbWV0aG9kbGlzdDoKLSAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aChwcmVmaXgpOgotICAgICAgICAgICAgICAgIHNlbGYucmVnaXN0ZXJfZnVuY3Rpb24obWV0aG9kLCBuYW1lW2xlbihwcmVmaXgpOl0pCi0KLSAgICBkZWYgaGFuZGxlX2lkbGVfdGltZW91dChzZWxmLCBzZXJ2ZXIsIGRhdGEsIGFib3J0KToKLSAgICAgICAgaWYgbm90IGFib3J0OgotICAgICAgICAgICAgaWYgdGltZS50aW1lKCkgLSBzZXJ2ZXIudGltZSA+IHNlcnZlci5pZGxlX3RpbWVvdXQ6Ci0gICAgICAgICAgICAgICAgc2VydmVyLnF1aXQgPSBUcnVlCi0gICAgICAgICAgICAgICAgcHJpbnQoIlNlcnZlciBpZGxlIHRpbWVvdXQgZXhwaXJlZCIpCi0gICAgICAgIHJldHVybiBbXQotCi0gICAgZGVmIHNlcnZlX2ZvcmV2ZXIoc2VsZik6Ci0gICAgICAgICMgU3RhcnQgdGhlIGFjdHVhbCBYTUxSUEMgc2VydmVyCi0gICAgICAgIGJiLmNvb2tlci5zZXJ2ZXJfbWFpbihzZWxmLmNvb2tlciwgc2VsZi5fc2VydmVfZm9yZXZlcikKLQotICAgIGRlZiBfc2VydmVfZm9yZXZlcihzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFNlcnZlIFJlcXVlc3RzLiBPdmVybG9hZGVkIHRvIGhvbm9yIGEgcXVpdCBjb21tYW5kCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLnF1aXQgPSBGYWxzZQotICAgICAgICB3aGlsZSBub3Qgc2VsZi5xdWl0OgotICAgICAgICAgICAgZmRzID0gW3NlbGZdCi0gICAgICAgICAgICBuZXh0c2xlZXAgPSAwLjEKLSAgICAgICAgICAgIGZvciBmdW5jdGlvbiwgZGF0YSBpbiBsaXN0KHNlbGYuX2lkbGVmdW5zLml0ZW1zKCkpOgotICAgICAgICAgICAgICAgIHJldHZhbCA9IE5vbmUKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IGZ1bmN0aW9uKHNlbGYsIGRhdGEsIEZhbHNlKQotICAgICAgICAgICAgICAgICAgICBpZiByZXR2YWwgaXMgRmFsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWwgc2VsZi5faWRsZWZ1bnNbZnVuY3Rpb25dCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgcmV0dmFsIGlzIFRydWU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXh0c2xlZXAgPSAwCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShyZXR2YWwsIGZsb2F0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPCBuZXh0c2xlZXApOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRzbGVlcCA9IHJldHZhbAotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgZmRzID0gZmRzICsgcmV0dmFsCi0gICAgICAgICAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQ6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCi0gICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQotICAgICAgICAgICAgICAgICAgICBpZiByZXR2YWwgPT0gTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIGZ1bmN0aW9uIGV4ZWN1dGUgZmFpbGVkOyBkZWxldGUgaXQKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9pZGxlZnVuc1tmdW5jdGlvbl0KLSAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICBzb2NrdGltZW91dCA9IHNlbGYuc29ja2V0LmdldHRpbWVvdXQoKSBvciBuZXh0c2xlZXAKLSAgICAgICAgICAgIHNvY2t0aW1lb3V0ID0gbWluKHNvY2t0aW1lb3V0LCBuZXh0c2xlZXApCi0gICAgICAgICAgICAjIE1pcnJvciB3aGF0IEJhc2VTZXJ2ZXIgaGFuZGxlX3JlcXVlc3Qgd291bGQgZG8KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBmZF9zZXRzID0gc2VsZWN0LnNlbGVjdChmZHMsIFtdLCBbXSwgc29ja3RpbWVvdXQpCi0gICAgICAgICAgICAgICAgaWYgZmRfc2V0c1swXSBhbmQgc2VsZiBpbiBmZF9zZXRzWzBdOgotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmlkbGVfdGltZW91dDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGltZSA9IHRpbWUudGltZSgpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9yZXF1ZXN0X25vYmxvY2soKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICAgICAgIyB3ZSBpZ25vcmUgaW50ZXJydXB0ZWQgY2FsbHMKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgIyBUZWxsIGlkbGUgZnVuY3Rpb25zIHdlJ3JlIGV4aXRpbmcKLSAgICAgICAgZm9yIGZ1bmN0aW9uLCBkYXRhIGluIGxpc3Qoc2VsZi5faWRsZWZ1bnMuaXRlbXMoKSk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gZnVuY3Rpb24oc2VsZiwgZGF0YSwgVHJ1ZSkKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuc2VydmVyX2Nsb3NlKCkKLSAgICAgICAgcmV0dXJuCi0KLSAgICBkZWYgc2V0X2Nvbm5lY3Rpb25fdG9rZW4oc2VsZiwgdG9rZW4pOgotICAgICAgICBzZWxmLmNvbm5lY3Rpb25fdG9rZW4gPSB0b2tlbgotCi1jbGFzcyBCaXRCYWtlWE1MUlBDU2VydmVyQ29ubmVjdGlvbihCaXRCYWtlQmFzZVNlcnZlckNvbm5lY3Rpb24pOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXJJbXBsLCBjbGllbnRpbmZvPSgibG9jYWxob3N0IiwgMCksIG9ic2VydmVyX29ubHkgPSBGYWxzZSwgZmVhdHVyZXNldCA9IE5vbmUpOgotICAgICAgICBzZWxmLmNvbm5lY3Rpb24sIHNlbGYudHJhbnNwb3J0ID0gX2NyZWF0ZV9zZXJ2ZXIoc2VydmVySW1wbC5ob3N0LCBzZXJ2ZXJJbXBsLnBvcnQpCi0gICAgICAgIHNlbGYuY2xpZW50aW5mbyA9IGNsaWVudGluZm8KLSAgICAgICAgc2VsZi5zZXJ2ZXJJbXBsID0gc2VydmVySW1wbAotICAgICAgICBzZWxmLm9ic2VydmVyX29ubHkgPSBvYnNlcnZlcl9vbmx5Ci0gICAgICAgIGlmIGZlYXR1cmVzZXQ6Ci0gICAgICAgICAgICBzZWxmLmZlYXR1cmVzZXQgPSBmZWF0dXJlc2V0Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZlYXR1cmVzZXQgPSBbXQotCi0gICAgZGVmIGNvbm5lY3Qoc2VsZiwgdG9rZW4gPSBOb25lKToKLSAgICAgICAgaWYgdG9rZW4gaXMgTm9uZToKLSAgICAgICAgICAgIGlmIHNlbGYub2JzZXJ2ZXJfb25seToKLSAgICAgICAgICAgICAgICB0b2tlbiA9ICJvYnNlcnZlciIKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBzZWxmLmNvbm5lY3Rpb24uYWRkQ2xpZW50KCkKLQotICAgICAgICBpZiB0b2tlbiBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICBzZWxmLnRyYW5zcG9ydC5zZXRfY29ubmVjdGlvbl90b2tlbih0b2tlbikKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBzZXR1cEV2ZW50UXVldWUoc2VsZik6Ci0gICAgICAgIHNlbGYuZXZlbnRzID0gdWlldmVudC5CQlVJRXZlbnRRdWV1ZShzZWxmLmNvbm5lY3Rpb24sIHNlbGYuY2xpZW50aW5mbykKLSAgICAgICAgZm9yIGV2ZW50IGluIGJiLmV2ZW50LnVpX3F1ZXVlOgotICAgICAgICAgICAgc2VsZi5ldmVudHMucXVldWVfZXZlbnQoZXZlbnQpCi0KLSAgICAgICAgXywgZXJyb3IgPSBzZWxmLmNvbm5lY3Rpb24ucnVuQ29tbWFuZChbInNldEZlYXR1cmVzIiwgc2VsZi5mZWF0dXJlc2V0XSkKLSAgICAgICAgaWYgZXJyb3I6Ci0gICAgICAgICAgICAjIGRpc2Nvbm5lY3QgdGhlIGNsaWVudCwgd2UgY2FuJ3QgbWFrZSB0aGUgc2V0RmVhdHVyZSB3b3JrCi0gICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24ucmVtb3ZlQ2xpZW50KCkKLSAgICAgICAgICAgICMgbm8gbmVlZCB0byBsb2cgaXQgaGVyZSwgdGhlIGVycm9yIHNoYWxsIGJlIHNlbnQgdG8gdGhlIGNsaWVudAotICAgICAgICAgICAgcmFpc2UgQmFzZUV4Y2VwdGlvbihlcnJvcikKLQotICAgIGRlZiByZW1vdmVDbGllbnQoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLm9ic2VydmVyX29ubHk6Ci0gICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24ucmVtb3ZlQ2xpZW50KCkKLQotICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6Ci0gICAgICAgICMgRG9uJ3Qgd2FpdCBmb3Igc2VydmVyIGluZGVmaW5pdGVseQotICAgICAgICBpbXBvcnQgc29ja2V0Ci0gICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCgyKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmV2ZW50cy5zeXN0ZW1fcXVpdCgpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uLnJlbW92ZUNsaWVudCgpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHBhc3MKLQotY2xhc3MgQml0QmFrZVNlcnZlcihCaXRCYWtlQmFzZVNlcnZlcik6Ci0gICAgZGVmIGluaXRTZXJ2ZXIoc2VsZiwgaW50ZXJmYWNlID0gKCJsb2NhbGhvc3QiLCAwKSwKLSAgICAgICAgICAgICAgICAgICBzaW5nbGVfdXNlID0gRmFsc2UsIGlkbGVfdGltZW91dD0wKToKLSAgICAgICAgc2VsZi5pbnRlcmZhY2UgPSBpbnRlcmZhY2UKLSAgICAgICAgc2VsZi5zZXJ2ZXJJbXBsID0gWE1MUlBDU2VydmVyKGludGVyZmFjZSwgc2luZ2xlX3VzZSwgaWRsZV90aW1lb3V0KQotCi0gICAgZGVmIGRldGFjaChzZWxmKToKLSAgICAgICAgZGFlbW9uaXplLmNyZWF0ZURhZW1vbihzZWxmLnNlcnZlckltcGwuc2VydmVfZm9yZXZlciwgImJpdGJha2UtY29va2VyZGFlbW9uLmxvZyIpCi0gICAgICAgIGRlbCBzZWxmLmNvb2tlcgotCi0gICAgZGVmIGVzdGFibGlzaENvbm5lY3Rpb24oc2VsZiwgZmVhdHVyZXNldCk6Ci0gICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IEJpdEJha2VYTUxSUENTZXJ2ZXJDb25uZWN0aW9uKHNlbGYuc2VydmVySW1wbCwgc2VsZi5pbnRlcmZhY2UsIEZhbHNlLCBmZWF0dXJlc2V0KQotICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLmNvbm5lY3QoKQotCi0gICAgZGVmIHNldF9jb25uZWN0aW9uX3Rva2VuKHNlbGYsIHRva2VuKToKLSAgICAgICAgc2VsZi5jb25uZWN0aW9uLnRyYW5zcG9ydC5zZXRfY29ubmVjdGlvbl90b2tlbih0b2tlbikKLQotY2xhc3MgQml0QmFrZVhNTFJQQ0NsaWVudChCaXRCYWtlQmFzZVNlcnZlcik6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgb2JzZXJ2ZXJfb25seSA9IEZhbHNlLCB0b2tlbiA9IE5vbmUpOgotICAgICAgICBzZWxmLnRva2VuID0gdG9rZW4KLQotICAgICAgICBzZWxmLm9ic2VydmVyX29ubHkgPSBvYnNlcnZlcl9vbmx5Ci0gICAgICAgICMgaWYgd2UgbmVlZCBleHRyYSBjYWNoZXMsIGp1c3QgdGVsbCB0aGUgc2VydmVyIHRvIGxvYWQgdGhlbSBhbGwKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHNhdmVDb25uZWN0aW9uRGV0YWlscyhzZWxmLCByZW1vdGUpOgotICAgICAgICBzZWxmLnJlbW90ZSA9IHJlbW90ZQotCi0gICAgZGVmIGVzdGFibGlzaENvbm5lY3Rpb24oc2VsZiwgZmVhdHVyZXNldCk6Ci0gICAgICAgICMgVGhlIGZvcm1hdCBvZiAicmVtb3RlIiBtdXN0IGJlICJzZXJ2ZXI6cG9ydCIKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgW2hvc3QsIHBvcnRdID0gc2VsZi5yZW1vdGUuc3BsaXQoIjoiKQotICAgICAgICAgICAgcG9ydCA9IGludChwb3J0KQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICAgICBiYi53YXJuKCJGYWlsZWQgdG8gcmVhZCByZW1vdGUgZGVmaW5pdGlvbiAoJXMpIiAlIHN0cihlKSkKLSAgICAgICAgICAgIHJhaXNlIGUKLQotICAgICAgICAjIFdlIG5lZWQgb3VyIElQIGZvciB0aGUgc2VydmVyIGNvbm5lY3Rpb24uIFdlIGdldCB0aGUgSVAKLSAgICAgICAgIyBieSB0cnlpbmcgdG8gY29ubmVjdCB3aXRoIHRoZSBzZXJ2ZXIKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKQotICAgICAgICAgICAgcy5jb25uZWN0KChob3N0LCBwb3J0KSkKLSAgICAgICAgICAgIGlwID0gcy5nZXRzb2NrbmFtZSgpWzBdCi0gICAgICAgICAgICBzLmNsb3NlKCkKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgotICAgICAgICAgICAgYmIud2FybigiQ291bGQgbm90IGNyZWF0ZSBzb2NrZXQgZm9yICVzOiVzICglcykiICUgKGhvc3QsIHBvcnQsIHN0cihlKSkpCi0gICAgICAgICAgICByYWlzZSBlCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuc2VydmVySW1wbCA9IFhNTFJQQ1Byb3h5U2VydmVyKGhvc3QsIHBvcnQsIHVzZV9idWlsdGluX3R5cGVzPVRydWUpCi0gICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBCaXRCYWtlWE1MUlBDU2VydmVyQ29ubmVjdGlvbihzZWxmLnNlcnZlckltcGwsIChpcCwgMCksIHNlbGYub2JzZXJ2ZXJfb25seSwgZmVhdHVyZXNldCkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24uY29ubmVjdChzZWxmLnRva2VuKQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICAgICBiYi53YXJuKCJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIgYXQgJXM6JXMgKCVzKSIgJSAoaG9zdCwgcG9ydCwgc3RyKGUpKSkKLSAgICAgICAgICAgIHJhaXNlIGUKLQotICAgIGRlZiBlbmRTZXNzaW9uKHNlbGYpOgotICAgICAgICBzZWxmLmNvbm5lY3Rpb24ucmVtb3ZlQ2xpZW50KCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIveG1scnBjY2xpZW50LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3NlcnZlci94bWxycGNjbGllbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY2MWE5ZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIveG1scnBjY2xpZW50LnB5CkBAIC0wLDAgKzEsMTU0IEBACisjCisjIEJpdEJha2UgWE1MUlBDIENsaWVudCBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2IC0gMjAwNyAgTWljaGFlbCAnTWlja2V5JyBMYXVlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDYgLSAyMDA4ICBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBodHRwLmNsaWVudAoraW1wb3J0IHhtbHJwYy5jbGllbnQKKworaW1wb3J0IGJiCitmcm9tIGJiLnVpIGltcG9ydCB1aWV2ZW50CisKK2NsYXNzIEJCVHJhbnNwb3J0KHhtbHJwYy5jbGllbnQuVHJhbnNwb3J0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGltZW91dCk6CisgICAgICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uX3Rva2VuID0gTm9uZQorICAgICAgICB4bWxycGMuY2xpZW50LlRyYW5zcG9ydC5fX2luaXRfXyhzZWxmKQorCisgICAgIyBNb2RpZmllZCBmcm9tIGRlZmF1bHQgdG8gcGFzcyB0aW1lb3V0IHRvIEhUVFBDb25uZWN0aW9uCisgICAgZGVmIG1ha2VfY29ubmVjdGlvbihzZWxmLCBob3N0KToKKyAgICAgICAgI3JldHVybiBhbiBleGlzdGluZyBjb25uZWN0aW9uIGlmIHBvc3NpYmxlLiAgVGhpcyBhbGxvd3MKKyAgICAgICAgI0hUVFAvMS4xIGtlZXAtYWxpdmUuCisgICAgICAgIGlmIHNlbGYuX2Nvbm5lY3Rpb24gYW5kIGhvc3QgPT0gc2VsZi5fY29ubmVjdGlvblswXToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb25uZWN0aW9uWzFdCisKKyAgICAgICAgIyBjcmVhdGUgYSBIVFRQIGNvbm5lY3Rpb24gb2JqZWN0IGZyb20gYSBob3N0IGRlc2NyaXB0b3IKKyAgICAgICAgY2hvc3QsIHNlbGYuX2V4dHJhX2hlYWRlcnMsIHg1MDkgPSBzZWxmLmdldF9ob3N0X2luZm8oaG9zdCkKKyAgICAgICAgI3N0b3JlIHRoZSBob3N0IGFyZ3VtZW50IGFsb25nIHdpdGggdGhlIGNvbm5lY3Rpb24gb2JqZWN0CisgICAgICAgIHNlbGYuX2Nvbm5lY3Rpb24gPSBob3N0LCBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbihjaG9zdCwgdGltZW91dD1zZWxmLnRpbWVvdXQpCisgICAgICAgIHJldHVybiBzZWxmLl9jb25uZWN0aW9uWzFdCisKKyAgICBkZWYgc2V0X2Nvbm5lY3Rpb25fdG9rZW4oc2VsZiwgdG9rZW4pOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb25fdG9rZW4gPSB0b2tlbgorCisgICAgZGVmIHNlbmRfY29udGVudChzZWxmLCBoLCBib2R5KToKKyAgICAgICAgaWYgc2VsZi5jb25uZWN0aW9uX3Rva2VuOgorICAgICAgICAgICAgaC5wdXRoZWFkZXIoIkJpdGJha2UtdG9rZW4iLCBzZWxmLmNvbm5lY3Rpb25fdG9rZW4pCisgICAgICAgIHhtbHJwYy5jbGllbnQuVHJhbnNwb3J0LnNlbmRfY29udGVudChzZWxmLCBoLCBib2R5KQorCitkZWYgX2NyZWF0ZV9zZXJ2ZXIoaG9zdCwgcG9ydCwgdGltZW91dCA9IDYwKToKKyAgICB0ID0gQkJUcmFuc3BvcnQodGltZW91dCkKKyAgICBzID0geG1scnBjLmNsaWVudC5TZXJ2ZXJQcm94eSgiaHR0cDovLyVzOiVkLyIgJSAoaG9zdCwgcG9ydCksIHRyYW5zcG9ydD10LCBhbGxvd19ub25lPVRydWUsIHVzZV9idWlsdGluX3R5cGVzPVRydWUpCisgICAgcmV0dXJuIHMsIHQKKworZGVmIGNoZWNrX2Nvbm5lY3Rpb24ocmVtb3RlLCB0aW1lb3V0KToKKyAgICB0cnk6CisgICAgICAgIGhvc3QsIHBvcnQgPSByZW1vdGUuc3BsaXQoIjoiKQorICAgICAgICBwb3J0ID0gaW50KHBvcnQpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBiYi53YXJuKCJGYWlsZWQgdG8gcmVhZCByZW1vdGUgZGVmaW5pdGlvbiAoJXMpIiAlIHN0cihlKSkKKyAgICAgICAgcmFpc2UgZQorCisgICAgc2VydmVyLCBfdHJhbnNwb3J0ID0gX2NyZWF0ZV9zZXJ2ZXIoaG9zdCwgcG9ydCwgdGltZW91dCkKKyAgICB0cnk6CisgICAgICAgIHJldCwgZXJyID0gIHNlcnZlci5ydW5Db21tYW5kKFsnZ2V0VmFyaWFibGUnLCAnVE9QRElSJ10pCisgICAgICAgIGlmIGVyciBvciBub3QgcmV0OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZXhjZXB0IENvbm5lY3Rpb25FcnJvcjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIFRydWUKKworY2xhc3MgQml0QmFrZVhNTFJQQ1NlcnZlckNvbm5lY3Rpb24ob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCwgY2xpZW50aW5mbz0oImxvY2FsaG9zdCIsIDApLCBvYnNlcnZlcl9vbmx5ID0gRmFsc2UsIGZlYXR1cmVzZXQgPSBOb25lKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uLCBzZWxmLnRyYW5zcG9ydCA9IF9jcmVhdGVfc2VydmVyKGhvc3QsIHBvcnQpCisgICAgICAgIHNlbGYuY2xpZW50aW5mbyA9IGNsaWVudGluZm8KKyAgICAgICAgc2VsZi5vYnNlcnZlcl9vbmx5ID0gb2JzZXJ2ZXJfb25seQorICAgICAgICBpZiBmZWF0dXJlc2V0OgorICAgICAgICAgICAgc2VsZi5mZWF0dXJlc2V0ID0gZmVhdHVyZXNldAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mZWF0dXJlc2V0ID0gW10KKworICAgICAgICBzZWxmLmV2ZW50cyA9IHVpZXZlbnQuQkJVSUV2ZW50UXVldWUoc2VsZi5jb25uZWN0aW9uLCBzZWxmLmNsaWVudGluZm8pCisKKyAgICAgICAgXywgZXJyb3IgPSBzZWxmLmNvbm5lY3Rpb24ucnVuQ29tbWFuZChbInNldEZlYXR1cmVzIiwgc2VsZi5mZWF0dXJlc2V0XSkKKyAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAjIGRpc2Nvbm5lY3QgdGhlIGNsaWVudCwgd2UgY2FuJ3QgbWFrZSB0aGUgc2V0RmVhdHVyZSB3b3JrCisgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24ucmVtb3ZlQ2xpZW50KCkKKyAgICAgICAgICAgICMgbm8gbmVlZCB0byBsb2cgaXQgaGVyZSwgdGhlIGVycm9yIHNoYWxsIGJlIHNlbnQgdG8gdGhlIGNsaWVudAorICAgICAgICAgICAgcmFpc2UgQmFzZUV4Y2VwdGlvbihlcnJvcikKKworICAgIGRlZiBjb25uZWN0KHNlbGYsIHRva2VuID0gTm9uZSk6CisgICAgICAgIGlmIHRva2VuIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLm9ic2VydmVyX29ubHk6CisgICAgICAgICAgICAgICAgdG9rZW4gPSAib2JzZXJ2ZXIiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRva2VuID0gc2VsZi5jb25uZWN0aW9uLmFkZENsaWVudCgpCisKKyAgICAgICAgaWYgdG9rZW4gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgc2VsZi50cmFuc3BvcnQuc2V0X2Nvbm5lY3Rpb25fdG9rZW4odG9rZW4pCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgcmVtb3ZlQ2xpZW50KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5vYnNlcnZlcl9vbmx5OgorICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uLnJlbW92ZUNsaWVudCgpCisKKyAgICBkZWYgdGVybWluYXRlKHNlbGYpOgorICAgICAgICAjIERvbid0IHdhaXQgZm9yIHNlcnZlciBpbmRlZmluaXRlbHkKKyAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZXZlbnRzLnN5c3RlbV9xdWl0KCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24ucmVtb3ZlQ2xpZW50KCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworCitkZWYgY29ubmVjdFhNTFJQQyhyZW1vdGUsIGZlYXR1cmVzZXQsIG9ic2VydmVyX29ubHkgPSBGYWxzZSwgdG9rZW4gPSBOb25lKToKKyAgICAjIFRoZSBmb3JtYXQgb2YgInJlbW90ZSIgbXVzdCBiZSAic2VydmVyOnBvcnQiCisgICAgdHJ5OgorICAgICAgICBbaG9zdCwgcG9ydF0gPSByZW1vdGUuc3BsaXQoIjoiKQorICAgICAgICBwb3J0ID0gaW50KHBvcnQpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBiYi53YXJuKCJGYWlsZWQgdG8gcGFyc2UgcmVtb3RlIGRlZmluaXRpb24gJXMgKCVzKSIgJSAocmVtb3RlLCBzdHIoZSkpKQorICAgICAgICByYWlzZSBlCisKKyAgICAjIFdlIG5lZWQgb3VyIElQIGZvciB0aGUgc2VydmVyIGNvbm5lY3Rpb24uIFdlIGdldCB0aGUgSVAKKyAgICAjIGJ5IHRyeWluZyB0byBjb25uZWN0IHdpdGggdGhlIHNlcnZlcgorICAgIHRyeToKKyAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKQorICAgICAgICBzLmNvbm5lY3QoKGhvc3QsIHBvcnQpKQorICAgICAgICBpcCA9IHMuZ2V0c29ja25hbWUoKVswXQorICAgICAgICBzLmNsb3NlKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIGJiLndhcm4oIkNvdWxkIG5vdCBjcmVhdGUgc29ja2V0IGZvciAlczolcyAoJXMpIiAlIChob3N0LCBwb3J0LCBzdHIoZSkpKQorICAgICAgICByYWlzZSBlCisgICAgdHJ5OgorICAgICAgICBjb25uZWN0aW9uID0gQml0QmFrZVhNTFJQQ1NlcnZlckNvbm5lY3Rpb24oaG9zdCwgcG9ydCwgKGlwLCAwKSwgb2JzZXJ2ZXJfb25seSwgZmVhdHVyZXNldCkKKyAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb24uY29ubmVjdCh0b2tlbikKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIGJiLndhcm4oIkNvdWxkIG5vdCBjb25uZWN0IHRvIHNlcnZlciBhdCAlczolcyAoJXMpIiAlIChob3N0LCBwb3J0LCBzdHIoZSkpKQorICAgICAgICByYWlzZSBlCisKKworCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2VydmVyL3htbHJwY3NlcnZlci5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIveG1scnBjc2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NWIxMjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2VydmVyL3htbHJwY3NlcnZlci5weQpAQCAtMCwwICsxLDE1OCBAQAorIworIyBCaXRCYWtlIFhNTFJQQyBTZXJ2ZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDcgIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA2IC0gMjAwOCAgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitpbXBvcnQgaGFzaGxpYgoraW1wb3J0IHRpbWUKK2ltcG9ydCBpbnNwZWN0Citmcm9tIHhtbHJwYy5zZXJ2ZXIgaW1wb3J0IFNpbXBsZVhNTFJQQ1NlcnZlciwgU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIKKworaW1wb3J0IGJiCisKKyMgVGhpcyByZXF1ZXN0IGhhbmRsZXIgY2hlY2tzIGlmIHRoZSByZXF1ZXN0IGhhcyBhICJCaXRiYWtlLXRva2VuIiBoZWFkZXIKKyMgZmllbGQgKHRoaXMgY29tZXMgZnJvbSB0aGUgY2xpZW50IHNpZGUpIGFuZCBjb21wYXJlcyBpdCB3aXRoIGl0cyBpbnRlcm5hbAorIyAiQml0YmFrZS10b2tlbiIgZmllbGQgKHRoaXMgY29tZXMgZnJvbSB0aGUgc2VydmVyKS4gSWYgdGhlIHR3byBhcmUgbm90CisjIGVxdWFsLCBpdCBpcyBhc3N1bWVkIHRoYXQgYSBjbGllbnQgaXMgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gdGhlIHNlcnZlcgorIyB3aGlsZSBhbm90aGVyIGNsaWVudCBpcyBjb25uZWN0ZWQgdG8gdGhlIHNlcnZlci4gSW4gdGhpcyBjYXNlLCBhIDUwMyBlcnJvcgorIyAoInNlcnZpY2UgdW5hdmFpbGFibGUiKSBpcyByZXR1cm5lZCB0byB0aGUgY2xpZW50LgorY2xhc3MgQml0QmFrZVhNTFJQQ1JlcXVlc3RIYW5kbGVyKFNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MsIHNlcnZlcik6CisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyCisgICAgICAgIFNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyLl9faW5pdF9fKHNlbGYsIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzLCBzZXJ2ZXIpCisKKyAgICBkZWYgZG9fUE9TVChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVtb3RlX3Rva2VuID0gc2VsZi5oZWFkZXJzWyJCaXRiYWtlLXRva2VuIl0KKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmVtb3RlX3Rva2VuID0gTm9uZQorICAgICAgICBpZiAwIGFuZCByZW1vdGVfdG9rZW4gIT0gc2VsZi5zZXJ2ZXIuY29ubmVjdGlvbl90b2tlbiBhbmQgcmVtb3RlX3Rva2VuICE9ICJvYnNlcnZlciI6CisgICAgICAgICAgICBzZWxmLnJlcG9ydF81MDMoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcmVtb3RlX3Rva2VuID09ICJvYnNlcnZlciI6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIucmVhZG9ubHkgPSBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnJlYWRvbmx5ID0gRmFsc2UKKyAgICAgICAgICAgIFNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyLmRvX1BPU1Qoc2VsZikKKworICAgIGRlZiByZXBvcnRfNTAzKHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoNTAzKQorICAgICAgICByZXNwb25zZSA9ICdObyBtb3JlIGNsaWVudCBhbGxvd2VkJworICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LXR5cGUiLCAidGV4dC9wbGFpbiIpCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIiwgc3RyKGxlbihyZXNwb25zZSkpKQorICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKyAgICAgICAgc2VsZi53ZmlsZS53cml0ZShieXRlcyhyZXNwb25zZSwgJ3V0Zi04JykpCisKK2NsYXNzIEJpdEJha2VYTUxSUENTZXJ2ZXIoU2ltcGxlWE1MUlBDU2VydmVyKToKKyAgICAjIHJlbW92ZSB0aGlzIHdoZW4geW91J3JlIGRvbmUgd2l0aCBkZWJ1Z2dpbmcKKyAgICAjIGFsbG93X3JldXNlX2FkZHJlc3MgPSBUcnVlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW50ZXJmYWNlLCBjb29rZXIsIHBhcmVudCk6CisgICAgICAgICMgVXNlIGF1dG8gcG9ydCBjb25maWd1cmF0aW9uCisgICAgICAgIGlmIChpbnRlcmZhY2VbMV0gPT0gLTEpOgorICAgICAgICAgICAgaW50ZXJmYWNlID0gKGludGVyZmFjZVswXSwgMCkKKyAgICAgICAgU2ltcGxlWE1MUlBDU2VydmVyLl9faW5pdF9fKHNlbGYsIGludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RIYW5kbGVyPUJpdEJha2VYTUxSUENSZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ1JlcXVlc3RzPUZhbHNlLCBhbGxvd19ub25lPVRydWUpCisgICAgICAgIHNlbGYuaG9zdCwgc2VsZi5wb3J0ID0gc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKQorICAgICAgICBzZWxmLmludGVyZmFjZSA9IGludGVyZmFjZQorCisgICAgICAgIHNlbGYuY29ubmVjdGlvbl90b2tlbiA9IE5vbmUKKyAgICAgICAgc2VsZi5jb21tYW5kcyA9IEJpdEJha2VYTUxSUENTZXJ2ZXJDb21tYW5kcyhzZWxmKQorICAgICAgICBzZWxmLnJlZ2lzdGVyX2Z1bmN0aW9ucyhzZWxmLmNvbW1hbmRzLCAiIikKKworICAgICAgICBzZWxmLmNvb2tlciA9IGNvb2tlcgorICAgICAgICBzZWxmLnBhcmVudCA9IHBhcmVudAorCisKKyAgICBkZWYgcmVnaXN0ZXJfZnVuY3Rpb25zKHNlbGYsIGNvbnRleHQsIHByZWZpeCk6CisgICAgICAgICIiIgorICAgICAgICBDb252ZW5pZW5jZSBtZXRob2QgZm9yIHJlZ2lzdGVyaW5nIGFsbCBmdW5jdGlvbnMgaW4gdGhlIHNjb3BlCisgICAgICAgIG9mIHRoaXMgY2xhc3MgdGhhdCBzdGFydCB3aXRoIGEgY29tbW9uIHByZWZpeAorICAgICAgICAiIiIKKyAgICAgICAgbWV0aG9kbGlzdCA9IGluc3BlY3QuZ2V0bWVtYmVycyhjb250ZXh0LCBpbnNwZWN0LmlzbWV0aG9kKQorICAgICAgICBmb3IgbmFtZSwgbWV0aG9kIGluIG1ldGhvZGxpc3Q6CisgICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgICAgICAgICBzZWxmLnJlZ2lzdGVyX2Z1bmN0aW9uKG1ldGhvZCwgbmFtZVtsZW4ocHJlZml4KTpdKQorCisgICAgZGVmIGdldF90aW1lb3V0KHNlbGYsIGRlbGF5KToKKyAgICAgICAgc29ja3RpbWVvdXQgPSBzZWxmLnNvY2tldC5nZXR0aW1lb3V0KCkgb3IgZGVsYXkKKyAgICAgICAgcmV0dXJuIG1pbihzb2NrdGltZW91dCwgZGVsYXkpCisKKyAgICBkZWYgaGFuZGxlX3JlcXVlc3RzKHNlbGYpOgorICAgICAgICBzZWxmLl9oYW5kbGVfcmVxdWVzdF9ub2Jsb2NrKCkKKworY2xhc3MgQml0QmFrZVhNTFJQQ1NlcnZlckNvbW1hbmRzKCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVyKToKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIKKyAgICAgICAgc2VsZi5oYXNfY2xpZW50ID0gRmFsc2UKKworICAgIGRlZiByZWdpc3RlckV2ZW50SGFuZGxlcihzZWxmLCBob3N0LCBwb3J0KToKKyAgICAgICAgIiIiCisgICAgICAgIFJlZ2lzdGVyIGEgcmVtb3RlIFVJIEV2ZW50IEhhbmRsZXIKKyAgICAgICAgIiIiCisgICAgICAgIHMsIHQgPSBiYi5zZXJ2ZXIueG1scnBjY2xpZW50Ll9jcmVhdGVfc2VydmVyKGhvc3QsIHBvcnQpCisKKyAgICAgICAgIyB3ZSBkb24ndCBhbGxvdyBjb25uZWN0aW9ucyBpZiB0aGUgY29va2VyIGlzIHJ1bm5pbmcKKyAgICAgICAgaWYgKHNlbGYuc2VydmVyLmNvb2tlci5zdGF0ZSBpbiBbYmIuY29va2VyLnN0YXRlLnBhcnNpbmcsIGJiLmNvb2tlci5zdGF0ZS5ydW5uaW5nXSk6CisgICAgICAgICAgICByZXR1cm4gTm9uZSwgIkNvb2tlciBpcyBidXN5OiAlcyIgJSBiYi5jb29rZXIuc3RhdGUuZ2V0X25hbWUoc2VsZi5zZXJ2ZXIuY29va2VyLnN0YXRlKQorCisgICAgICAgIHNlbGYuZXZlbnRfaGFuZGxlID0gYmIuZXZlbnQucmVnaXN0ZXJfVUlIaGFuZGxlcihzLCBUcnVlKQorICAgICAgICByZXR1cm4gc2VsZi5ldmVudF9oYW5kbGUsICdPSycKKworICAgIGRlZiB1bnJlZ2lzdGVyRXZlbnRIYW5kbGVyKHNlbGYsIGhhbmRsZXJOdW0pOgorICAgICAgICAiIiIKKyAgICAgICAgVW5yZWdpc3RlciBhIHJlbW90ZSBVSSBFdmVudCBIYW5kbGVyCisgICAgICAgICIiIgorICAgICAgICByZXQgPSBiYi5ldmVudC51bnJlZ2lzdGVyX1VJSGhhbmRsZXIoaGFuZGxlck51bSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5ldmVudF9oYW5kbGUgPSBOb25lCisgICAgICAgIHJldHVybiByZXQKKworICAgIGRlZiBydW5Db21tYW5kKHNlbGYsIGNvbW1hbmQpOgorICAgICAgICAiIiIKKyAgICAgICAgUnVuIGEgY29va2VyIGNvbW1hbmQgb24gdGhlIHNlcnZlcgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VydmVyLmNvb2tlci5jb21tYW5kLnJ1bkNvbW1hbmQoY29tbWFuZCwgc2VsZi5zZXJ2ZXIucmVhZG9ubHkpCisKKyAgICBkZWYgZ2V0RXZlbnRIYW5kbGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmV2ZW50X2hhbmRsZQorCisgICAgZGVmIHRlcm1pbmF0ZVNlcnZlcihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRyaWdnZXIgdGhlIHNlcnZlciB0byBxdWl0CisgICAgICAgICIiIgorICAgICAgICBzZWxmLnNlcnZlci5wYXJlbnQucXVpdCA9IFRydWUKKyAgICAgICAgcHJpbnQoIlhNTFJQQyBTZXJ2ZXIgdHJpZ2dlcmluZyBleGl0IikKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgYWRkQ2xpZW50KHNlbGYpOgorICAgICAgICBpZiBzZWxmLnNlcnZlci5wYXJlbnQuaGF2ZXVpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgdG9rZW4gPSBoYXNobGliLm1kNShzdHIodGltZS50aW1lKCkpLmVuY29kZSgidXRmLTgiKSkuaGV4ZGlnZXN0KCkKKyAgICAgICAgc2VsZi5zZXJ2ZXIuY29ubmVjdGlvbl90b2tlbiA9IHRva2VuCisgICAgICAgIHNlbGYuc2VydmVyLnBhcmVudC5oYXZldWkgPSBUcnVlCisgICAgICAgIHJldHVybiB0b2tlbgorCisgICAgZGVmIHJlbW92ZUNsaWVudChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zZXJ2ZXIucGFyZW50LmhhdmV1aToKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLmNvbm5lY3Rpb25fdG9rZW4gPSBOb25lCisgICAgICAgICAgICBzZWxmLnNlcnZlci5wYXJlbnQuaGF2ZXVpID0gRmFsc2UKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3NpZ2dlbi5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zaWdnZW4ucHkKaW5kZXggZjcxMTkwYS4uNWVmODJkNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3NpZ2dlbi5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2lnZ2VuLnB5CkBAIC02OSw2ICs2OSwxMCBAQAogICAgIGRlZiBzZXRfdGFza2RhdGEoc2VsZiwgZGF0YSk6CiAgICAgICAgIHNlbGYucnVudGFza2RlcHMsIHNlbGYudGFza2hhc2gsIHNlbGYuZmlsZV9jaGVja3N1bV92YWx1ZXMsIHNlbGYudGFpbnRzLCBzZWxmLmJhc2VoYXNoID0gZGF0YQogCisgICAgZGVmIHJlc2V0KHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLl9faW5pdF9fKGRhdGEpCisKKwogY2xhc3MgU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWMoU2lnbmF0dXJlR2VuZXJhdG9yKToKICAgICAiIiIKICAgICAiIiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90YXNrZGF0YS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90YXNrZGF0YS5weQppbmRleCA4Yzk2YTU2Li4wZWE2YzBiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGFza2RhdGEucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rhc2tkYXRhLnB5CkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgIiIiCiAgICAgQml0QmFrZSBUYXNrIERhdGEgaW1wbGVtZW50YXRpb24KICAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYWJvcnQgPSBUcnVlLCB0cnlhbHRjb25maWdzID0gRmFsc2UsIHNraXBsaXN0ID0gTm9uZSwgYWxsb3dpbmNvbXBsZXRlID0gRmFsc2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhYm9ydCA9IFRydWUsIHNraXBsaXN0ID0gTm9uZSwgYWxsb3dpbmNvbXBsZXRlID0gRmFsc2UpOgogICAgICAgICBzZWxmLmJ1aWxkX3RhcmdldHMgPSB7fQogICAgICAgICBzZWxmLnJ1bl90YXJnZXRzID0ge30KIApAQCAtNjYsNyArNjYsNiBAQAogICAgICAgICBzZWxmLmZhaWxlZF9mbnMgPSBbXQogCiAgICAgICAgIHNlbGYuYWJvcnQgPSBhYm9ydAotICAgICAgICBzZWxmLnRyeWFsdGNvbmZpZ3MgPSB0cnlhbHRjb25maWdzCiAgICAgICAgIHNlbGYuYWxsb3dpbmNvbXBsZXRlID0gYWxsb3dpbmNvbXBsZXRlCiAKICAgICAgICAgc2VsZi5za2lwbGlzdCA9IHNraXBsaXN0CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvZXZlbnQucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvZXZlbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdlYjFmZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9ldmVudC5weQpAQCAtMCwwICsxLDM3NyBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUZXN0cyBmb3IgdGhlIEV2ZW50IGltcGxlbWVudGF0aW9uIChldmVudC5weSkKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE3IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBiYgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBiYi5jb21wYXQKK2ltcG9ydCBiYi5ldmVudAoraW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2ltcG9ydCBwaWNrbGUKK2Zyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgTW9jaworZnJvbSB1bml0dGVzdC5tb2NrIGltcG9ydCBjYWxsCisKKworY2xhc3MgRXZlbnRRdWV1ZVN0dWIoKToKKyAgICAiIiIgQ2xhc3MgdXNlZCBhcyBzcGVjaWZpY2F0aW9uIGZvciBVSSBldmVudCBoYW5kbGVyIHF1ZXVlIHN0dWIgb2JqZWN0cyAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHJldHVybgorCisgICAgZGVmIHNlbmQoc2VsZiwgZXZlbnQpOgorICAgICAgICByZXR1cm4KKworCitjbGFzcyBQaWNrbGVFdmVudFF1ZXVlU3R1YigpOgorICAgICIiIiBDbGFzcyB1c2VkIGFzIHNwZWNpZmljYXRpb24gZm9yIFVJIGV2ZW50IGhhbmRsZXIgcXVldWUgc3R1YiBvYmplY3RzCisgICAgICAgIHdpdGggc2VuZHBpY2tsZSBtZXRob2QgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICByZXR1cm4KKworICAgIGRlZiBzZW5kcGlja2xlKHNlbGYsIHBpY2tsZWRfZXZlbnQpOgorICAgICAgICByZXR1cm4KKworCitjbGFzcyBVSUNsaWVudFN0dWIoKToKKyAgICAiIiIgQ2xhc3MgdXNlZCBhcyBzcGVjaWZpY2F0aW9uIGZvciBVSSBldmVudCBoYW5kbGVyIHN0dWIgb2JqZWN0cyAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuZXZlbnQgPSBOb25lCisKKworY2xhc3MgRXZlbnRIYW5kbGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIiBFdmVudCBoYW5kbGluZyB0ZXN0IGNsYXNzICIiIgorICAgIF90aHJlYWRsb2NrX3Rlc3RfY2FsbHMgPSBbXQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3Byb2Nlc3MgPSBNb2NrKCkKKyAgICAgICAgdWlfY2xpZW50MSA9IFVJQ2xpZW50U3R1YigpCisgICAgICAgIHVpX2NsaWVudDIgPSBVSUNsaWVudFN0dWIoKQorICAgICAgICBzZWxmLl90ZXN0X3VpMSA9IE1vY2sod3JhcHM9dWlfY2xpZW50MSkKKyAgICAgICAgc2VsZi5fdGVzdF91aTIgPSBNb2NrKHdyYXBzPXVpX2NsaWVudDIpCisgICAgICAgIGltcG9ydGxpYi5yZWxvYWQoYmIuZXZlbnQpCisKKyAgICBkZWYgX2NyZWF0ZV90ZXN0X2hhbmRsZXJzKHNlbGYpOgorICAgICAgICAiIiIgTWV0aG9kIHVzZWQgdG8gY3JlYXRlIGEgdGVzdCBoYW5kbGVyIG9yZGVyZWQgZGljdGlvbmFyeSAiIiIKKyAgICAgICAgdGVzdF9oYW5kbGVycyA9IGJiLmNvbXBhdC5PcmRlcmVkRGljdCgpCisgICAgICAgIHRlc3RfaGFuZGxlcnNbImhhbmRsZXIxIl0gPSBzZWxmLl90ZXN0X3Byb2Nlc3MuaGFuZGxlcjEKKyAgICAgICAgdGVzdF9oYW5kbGVyc1siaGFuZGxlcjIiXSA9IHNlbGYuX3Rlc3RfcHJvY2Vzcy5oYW5kbGVyMgorICAgICAgICByZXR1cm4gdGVzdF9oYW5kbGVycworCisgICAgZGVmIHRlc3RfY2xhc3NfaGFuZGxlcnMoc2VsZik6CisgICAgICAgICIiIiBUZXN0IHNldF9jbGFzc19oYW5kbGVycyBhbmQgZ2V0X2NsYXNzX2hhbmRsZXJzIG1ldGhvZHMgIiIiCisgICAgICAgIHRlc3RfaGFuZGxlcnMgPSBzZWxmLl9jcmVhdGVfdGVzdF9oYW5kbGVycygpCisgICAgICAgIGJiLmV2ZW50LnNldF9jbGFzc19oYW5kbGVycyh0ZXN0X2hhbmRsZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RfaGFuZGxlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuZ2V0X2NsYXNzX2hhbmRsZXJzKCkpCisKKyAgICBkZWYgdGVzdF9oYW5kbGVycyhzZWxmKToKKyAgICAgICAgIiIiIFRlc3Qgc2V0X2hhbmRsZXJzIGFuZCBnZXRfaGFuZGxlcnMgIiIiCisgICAgICAgIHRlc3RfaGFuZGxlcnMgPSBzZWxmLl9jcmVhdGVfdGVzdF9oYW5kbGVycygpCisgICAgICAgIGJiLmV2ZW50LnNldF9oYW5kbGVycyh0ZXN0X2hhbmRsZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RfaGFuZGxlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuZ2V0X2hhbmRsZXJzKCkpCisKKyAgICBkZWYgdGVzdF9jbGVhbl9jbGFzc19oYW5kbGVycyhzZWxmKToKKyAgICAgICAgIiIiIFRlc3QgY2xlYW5fY2xhc3NfaGFuZGxlcnMgbWV0aG9kICIiIgorICAgICAgICBjbGVhbkRpY3QgPSBiYi5jb21wYXQuT3JkZXJlZERpY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNsZWFuRGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5jbGVhbl9jbGFzc19oYW5kbGVycygpKQorCisgICAgZGVmIHRlc3RfcmVnaXN0ZXIoc2VsZik6CisgICAgICAgICIiIiBUZXN0IHJlZ2lzdGVyIG1ldGhvZCBmb3IgY2xhc3MgaGFuZGxlcnMgIiIiCisgICAgICAgIHJlc3VsdCA9IGJiLmV2ZW50LnJlZ2lzdGVyKCJoYW5kbGVyIiwgc2VsZi5fdGVzdF9wcm9jZXNzLmhhbmRsZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBiYi5ldmVudC5SZWdpc3RlcmVkKQorICAgICAgICBoYW5kbGVyc19kaWN0ID0gYmIuZXZlbnQuZ2V0X2NsYXNzX2hhbmRsZXJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiaGFuZGxlciIsIGhhbmRsZXJzX2RpY3QpCisKKyAgICBkZWYgdGVzdF9hbHJlYWR5X3JlZ2lzdGVyZWQoc2VsZik6CisgICAgICAgICIiIiBUZXN0IGRldGVjdGlvbiBvZiBhbiBhbHJlYWR5IHJlZ2lzdGVkIGNsYXNzIGhhbmRsZXIgIiIiCisgICAgICAgIGJiLmV2ZW50LnJlZ2lzdGVyKCJoYW5kbGVyIiwgc2VsZi5fdGVzdF9wcm9jZXNzLmhhbmRsZXIpCisgICAgICAgIGhhbmRsZXJzX2RpY3QgPSBiYi5ldmVudC5nZXRfY2xhc3NfaGFuZGxlcnMoKQorICAgICAgICBzZWxmLmFzc2VydEluKCJoYW5kbGVyIiwgaGFuZGxlcnNfZGljdCkKKyAgICAgICAgcmVzdWx0ID0gYmIuZXZlbnQucmVnaXN0ZXIoImhhbmRsZXIiLCBzZWxmLl90ZXN0X3Byb2Nlc3MuaGFuZGxlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGJiLmV2ZW50LkFscmVhZHlSZWdpc3RlcmVkKQorCisgICAgZGVmIHRlc3RfcmVnaXN0ZXJfZnJvbV9zdHJpbmcoc2VsZik6CisgICAgICAgICIiIiBUZXN0IHJlZ2lzdGVyIG1ldGhvZCByZWNlaXZpbmcgY29kZSBpbiBzdHJpbmcgIiIiCisgICAgICAgIHJlc3VsdCA9IGJiLmV2ZW50LnJlZ2lzdGVyKCJzdHJpbmdfaGFuZGxlciIsICIgICAgcmV0dXJuIFRydWUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgYmIuZXZlbnQuUmVnaXN0ZXJlZCkKKyAgICAgICAgaGFuZGxlcnNfZGljdCA9IGJiLmV2ZW50LmdldF9jbGFzc19oYW5kbGVycygpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0cmluZ19oYW5kbGVyIiwgaGFuZGxlcnNfZGljdCkKKworICAgIGRlZiB0ZXN0X3JlZ2lzdGVyX3dpdGhfbWFzayhzZWxmKToKKyAgICAgICAgIiIiIFRlc3QgcmVnaXN0ZXIgbWV0aG9kIHdpdGggZXZlbnQgbWFza2luZyAiIiIKKyAgICAgICAgbWFzayA9IFsiYmIuZXZlbnQuT3BlcmF0aW9uU3RhcnRlZCIsCisgICAgICAgICAgICAgICAgImJiLmV2ZW50Lk9wZXJhdGlvbkNvbXBsZXRlZCJdCisgICAgICAgIHJlc3VsdCA9IGJiLmV2ZW50LnJlZ2lzdGVyKCJldmVudF9oYW5kbGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9wcm9jZXNzLmV2ZW50X2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBiYi5ldmVudC5SZWdpc3RlcmVkKQorICAgICAgICBoYW5kbGVyc19kaWN0ID0gYmIuZXZlbnQuZ2V0X2NsYXNzX2hhbmRsZXJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiZXZlbnRfaGFuZGxlciIsIGhhbmRsZXJzX2RpY3QpCisKKyAgICBkZWYgdGVzdF9yZW1vdmUoc2VsZik6CisgICAgICAgICIiIiBUZXN0IHJlbW92ZSBtZXRob2QgZm9yIGNsYXNzIGhhbmRsZXJzICIiIgorICAgICAgICB0ZXN0X2hhbmRsZXJzID0gc2VsZi5fY3JlYXRlX3Rlc3RfaGFuZGxlcnMoKQorICAgICAgICBiYi5ldmVudC5zZXRfY2xhc3NfaGFuZGxlcnModGVzdF9oYW5kbGVycykKKyAgICAgICAgY291bnQgPSBsZW4odGVzdF9oYW5kbGVycykKKyAgICAgICAgYmIuZXZlbnQucmVtb3ZlKCJoYW5kbGVyMSIsIE5vbmUpCisgICAgICAgIHRlc3RfaGFuZGxlcnMgPSBiYi5ldmVudC5nZXRfY2xhc3NfaGFuZGxlcnMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZXN0X2hhbmRsZXJzKSwgY291bnQgLSAxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgIGJiLmV2ZW50LnJlbW92ZSgiaGFuZGxlcjEiLCBOb25lKQorCisgICAgZGVmIHRlc3RfZXhlY3V0ZV9oYW5kbGVyKHNlbGYpOgorICAgICAgICAiIiIgVGVzdCBleGVjdXRlX2hhbmRsZXIgbWV0aG9kIGZvciBjbGFzcyBoYW5kbGVycyAiIiIKKyAgICAgICAgbWFzayA9IFsiYmIuZXZlbnQuT3BlcmF0aW9uUHJvZ3Jlc3MiXQorICAgICAgICByZXN1bHQgPSBiYi5ldmVudC5yZWdpc3RlcigiZXZlbnRfaGFuZGxlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfcHJvY2Vzcy5ldmVudF9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgYmIuZXZlbnQuUmVnaXN0ZXJlZCkKKyAgICAgICAgZXZlbnQgPSBiYi5ldmVudC5PcGVyYXRpb25Qcm9ncmVzcyhjdXJyZW50PTEwLCB0b3RhbD0xMDApCisgICAgICAgIGJiLmV2ZW50LmV4ZWN1dGVfaGFuZGxlcigiZXZlbnRfaGFuZGxlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X3Byb2Nlc3MuZXZlbnRfaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSkKKyAgICAgICAgc2VsZi5fdGVzdF9wcm9jZXNzLmV2ZW50X2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoZXZlbnQpCisKKyAgICBkZWYgdGVzdF9maXJlX2NsYXNzX2hhbmRsZXJzKHNlbGYpOgorICAgICAgICAiIiIgVGVzdCBmaXJlX2NsYXNzX2hhbmRsZXJzIG1ldGhvZCAiIiIKKyAgICAgICAgbWFzayA9IFsiYmIuZXZlbnQuT3BlcmF0aW9uU3RhcnRlZCJdCisgICAgICAgIHJlc3VsdCA9IGJiLmV2ZW50LnJlZ2lzdGVyKCJldmVudF9oYW5kbGVyMSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfcHJvY2Vzcy5ldmVudF9oYW5kbGVyMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGJiLmV2ZW50LlJlZ2lzdGVyZWQpCisgICAgICAgIHJlc3VsdCA9IGJiLmV2ZW50LnJlZ2lzdGVyKCJldmVudF9oYW5kbGVyMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfcHJvY2Vzcy5ldmVudF9oYW5kbGVyMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIioiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgYmIuZXZlbnQuUmVnaXN0ZXJlZCkKKyAgICAgICAgZXZlbnQxID0gYmIuZXZlbnQuT3BlcmF0aW9uU3RhcnRlZCgpCisgICAgICAgIGV2ZW50MiA9IGJiLmV2ZW50Lk9wZXJhdGlvbkNvbXBsZXRlZCh0b3RhbD0xMjMpCisgICAgICAgIGJiLmV2ZW50LmZpcmVfY2xhc3NfaGFuZGxlcnMoZXZlbnQxLCBOb25lKQorICAgICAgICBiYi5ldmVudC5maXJlX2NsYXNzX2hhbmRsZXJzKGV2ZW50MiwgTm9uZSkKKyAgICAgICAgYmIuZXZlbnQuZmlyZV9jbGFzc19oYW5kbGVycyhldmVudDIsIE5vbmUpCisgICAgICAgIGV4cGVjdGVkX2V2ZW50X2hhbmRsZXIxID0gW2NhbGwoZXZlbnQxKV0KKyAgICAgICAgZXhwZWN0ZWRfZXZlbnRfaGFuZGxlcjIgPSBbY2FsbChldmVudDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsKGV2ZW50MiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGwoZXZlbnQyKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl90ZXN0X3Byb2Nlc3MuZXZlbnRfaGFuZGxlcjEuY2FsbF9hcmdzX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZXZlbnRfaGFuZGxlcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fdGVzdF9wcm9jZXNzLmV2ZW50X2hhbmRsZXIyLmNhbGxfYXJnc19saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2V2ZW50X2hhbmRsZXIyKQorCisgICAgZGVmIHRlc3RfY2hhbmdlX2hhbmRsZXJfZXZlbnRfbWFwcGluZyhzZWxmKToKKyAgICAgICAgIiIiIFRlc3QgY2hhbmdpbmcgdGhlIGV2ZW50IG1hcHBpbmcgZm9yIGNsYXNzIGhhbmRsZXJzICIiIgorICAgICAgICBldmVudDEgPSBiYi5ldmVudC5PcGVyYXRpb25TdGFydGVkKCkKKyAgICAgICAgZXZlbnQyID0gYmIuZXZlbnQuT3BlcmF0aW9uQ29tcGxldGVkKHRvdGFsPTEyMykKKworICAgICAgICAjIHJlZ2lzdGVyIGhhbmRsZXIgZm9yIGFsbCBldmVudHMKKyAgICAgICAgcmVzdWx0ID0gYmIuZXZlbnQucmVnaXN0ZXIoImV2ZW50X2hhbmRsZXIxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9wcm9jZXNzLmV2ZW50X2hhbmRsZXIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBiYi5ldmVudC5SZWdpc3RlcmVkKQorICAgICAgICBiYi5ldmVudC5maXJlX2NsYXNzX2hhbmRsZXJzKGV2ZW50MSwgTm9uZSkKKyAgICAgICAgYmIuZXZlbnQuZmlyZV9jbGFzc19oYW5kbGVycyhldmVudDIsIE5vbmUpCisgICAgICAgIGV4cGVjdGVkID0gW2NhbGwoZXZlbnQxKSwgY2FsbChldmVudDIpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3Rlc3RfcHJvY2Vzcy5ldmVudF9oYW5kbGVyMS5jYWxsX2FyZ3NfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCkKKworICAgICAgICAjIHVucmVnaXN0ZXIgaGFuZGxlciBhbmQgcmVnaXN0ZXIgaXQgb25seSBmb3IgT3BlcmF0aW9uU3RhcnRlZAorICAgICAgICByZXN1bHQgPSBiYi5ldmVudC5yZW1vdmUoImV2ZW50X2hhbmRsZXIxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfcHJvY2Vzcy5ldmVudF9oYW5kbGVyMSkKKyAgICAgICAgbWFzayA9IFsiYmIuZXZlbnQuT3BlcmF0aW9uU3RhcnRlZCJdCisgICAgICAgIHJlc3VsdCA9IGJiLmV2ZW50LnJlZ2lzdGVyKCJldmVudF9oYW5kbGVyMSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfcHJvY2Vzcy5ldmVudF9oYW5kbGVyMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGJiLmV2ZW50LlJlZ2lzdGVyZWQpCisgICAgICAgIGJiLmV2ZW50LmZpcmVfY2xhc3NfaGFuZGxlcnMoZXZlbnQxLCBOb25lKQorICAgICAgICBiYi5ldmVudC5maXJlX2NsYXNzX2hhbmRsZXJzKGV2ZW50MiwgTm9uZSkKKyAgICAgICAgZXhwZWN0ZWQgPSBbY2FsbChldmVudDEpLCBjYWxsKGV2ZW50MiksIGNhbGwoZXZlbnQxKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl90ZXN0X3Byb2Nlc3MuZXZlbnRfaGFuZGxlcjEuY2FsbF9hcmdzX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpCisKKyAgICAgICAgIyB1bnJlZ2lzdGVyIGhhbmRsZXIgYW5kIHJlZ2lzdGVyIGl0IG9ubHkgZm9yIE9wZXJhdGlvbkNvbXBsZXRlZAorICAgICAgICByZXN1bHQgPSBiYi5ldmVudC5yZW1vdmUoImV2ZW50X2hhbmRsZXIxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfcHJvY2Vzcy5ldmVudF9oYW5kbGVyMSkKKyAgICAgICAgbWFzayA9IFsiYmIuZXZlbnQuT3BlcmF0aW9uQ29tcGxldGVkIl0KKyAgICAgICAgcmVzdWx0ID0gYmIuZXZlbnQucmVnaXN0ZXIoImV2ZW50X2hhbmRsZXIxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9wcm9jZXNzLmV2ZW50X2hhbmRsZXIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgYmIuZXZlbnQuUmVnaXN0ZXJlZCkKKyAgICAgICAgYmIuZXZlbnQuZmlyZV9jbGFzc19oYW5kbGVycyhldmVudDEsIE5vbmUpCisgICAgICAgIGJiLmV2ZW50LmZpcmVfY2xhc3NfaGFuZGxlcnMoZXZlbnQyLCBOb25lKQorICAgICAgICBleHBlY3RlZCA9IFtjYWxsKGV2ZW50MSksIGNhbGwoZXZlbnQyKSwgY2FsbChldmVudDEpLCBjYWxsKGV2ZW50MildCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fdGVzdF9wcm9jZXNzLmV2ZW50X2hhbmRsZXIxLmNhbGxfYXJnc19saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcmVnaXN0ZXJfVUlIaGFuZGxlcihzZWxmKToKKyAgICAgICAgIiIiIFRlc3QgcmVnaXN0ZXJfVUlIaGFuZGxlciBtZXRob2QgIiIiCisgICAgICAgIHJlc3VsdCA9IGJiLmV2ZW50LnJlZ2lzdGVyX1VJSGhhbmRsZXIoc2VsZi5fdGVzdF91aTEsIG1haW51aT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMSkKKworICAgIGRlZiB0ZXN0X1VJSGhhbmRsZXJfYWxyZWFkeV9yZWdpc3RlcmVkKHNlbGYpOgorICAgICAgICAiIiIgVGVzdCByZWdpc3RlcmluZyBhbiBVSUhoYW5kbGVyIGFscmVhZHkgZXhpc3RpbmcgIiIiCisgICAgICAgIHJlc3VsdCA9IGJiLmV2ZW50LnJlZ2lzdGVyX1VJSGhhbmRsZXIoc2VsZi5fdGVzdF91aTEsIG1haW51aT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMSkKKyAgICAgICAgcmVzdWx0ID0gYmIuZXZlbnQucmVnaXN0ZXJfVUlIaGFuZGxlcihzZWxmLl90ZXN0X3VpMSwgbWFpbnVpPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAyKQorCisgICAgZGVmIHRlc3RfdW5yZWdpc3Rlcl9VSUhoYW5kbGVyKHNlbGYpOgorICAgICAgICAiIiIgVGVzdCB1bnJlZ2lzdGVyX1VJSGhhbmRsZXIgbWV0aG9kICIiIgorICAgICAgICByZXN1bHQgPSBiYi5ldmVudC5yZWdpc3Rlcl9VSUhoYW5kbGVyKHNlbGYuX3Rlc3RfdWkxLCBtYWludWk9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDEpCisgICAgICAgIHJlc3VsdCA9IGJiLmV2ZW50LnVucmVnaXN0ZXJfVUlIaGFuZGxlcigxKQorICAgICAgICBzZWxmLmFzc2VydElzKHJlc3VsdCwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2ZpcmVfdWlfaGFuZGxlcnMoc2VsZik6CisgICAgICAgICIiIiBUZXN0IGZpcmVfdWlfaGFuZGxlcnMgbWV0aG9kICIiIgorICAgICAgICBzZWxmLl90ZXN0X3VpMS5ldmVudCA9IE1vY2soc3BlY19zZXQ9RXZlbnRRdWV1ZVN0dWIpCisgICAgICAgIHJlc3VsdCA9IGJiLmV2ZW50LnJlZ2lzdGVyX1VJSGhhbmRsZXIoc2VsZi5fdGVzdF91aTEsIG1haW51aT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMSkKKyAgICAgICAgc2VsZi5fdGVzdF91aTIuZXZlbnQgPSBNb2NrKHNwZWNfc2V0PVBpY2tsZUV2ZW50UXVldWVTdHViKQorICAgICAgICByZXN1bHQgPSBiYi5ldmVudC5yZWdpc3Rlcl9VSUhoYW5kbGVyKHNlbGYuX3Rlc3RfdWkyLCBtYWludWk9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDIpCisgICAgICAgIGV2ZW50MSA9IGJiLmV2ZW50Lk9wZXJhdGlvblN0YXJ0ZWQoKQorICAgICAgICBiYi5ldmVudC5maXJlX3VpX2hhbmRsZXJzKGV2ZW50MSwgTm9uZSkKKyAgICAgICAgZXhwZWN0ZWQgPSBbY2FsbChldmVudDEpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3Rlc3RfdWkxLmV2ZW50LnNlbmQuY2FsbF9hcmdzX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpCisgICAgICAgIGV4cGVjdGVkID0gW2NhbGwocGlja2xlLmR1bXBzKGV2ZW50MSkpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3Rlc3RfdWkyLmV2ZW50LnNlbmRwaWNrbGUuY2FsbF9hcmdzX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9maXJlKHNlbGYpOgorICAgICAgICAiIiIgVGVzdCBmaXJlIG1ldGhvZCB1c2VkIHRvIHRyaWdnZXIgY2xhc3MgYW5kIHVpIGV2ZW50IGhhbmRsZXJzICIiIgorICAgICAgICBtYXNrID0gWyJiYi5ldmVudC5Db25maWdQYXJzZWQiXQorICAgICAgICByZXN1bHQgPSBiYi5ldmVudC5yZWdpc3RlcigiZXZlbnRfaGFuZGxlcjEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X3Byb2Nlc3MuZXZlbnRfaGFuZGxlcjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2spCisKKyAgICAgICAgc2VsZi5fdGVzdF91aTEuZXZlbnQgPSBNb2NrKHNwZWNfc2V0PUV2ZW50UXVldWVTdHViKQorICAgICAgICByZXN1bHQgPSBiYi5ldmVudC5yZWdpc3Rlcl9VSUhoYW5kbGVyKHNlbGYuX3Rlc3RfdWkxLCBtYWludWk9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDEpCisKKyAgICAgICAgZXZlbnQxID0gYmIuZXZlbnQuQ29uZmlnUGFyc2VkKCkKKyAgICAgICAgYmIuZXZlbnQuZmlyZShldmVudDEsIE5vbmUpCisgICAgICAgIGV4cGVjdGVkID0gW2NhbGwoZXZlbnQxKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl90ZXN0X3Byb2Nlc3MuZXZlbnRfaGFuZGxlcjEuY2FsbF9hcmdzX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fdGVzdF91aTEuZXZlbnQuc2VuZC5jYWxsX2FyZ3NfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2ZpcmVfZnJvbV93b3JrZXIoc2VsZik6CisgICAgICAgICIiIiBUZXN0IGZpcmVfZnJvbV93b3JrZXIgbWV0aG9kICIiIgorICAgICAgICBzZWxmLl90ZXN0X3VpMS5ldmVudCA9IE1vY2soc3BlY19zZXQ9RXZlbnRRdWV1ZVN0dWIpCisgICAgICAgIHJlc3VsdCA9IGJiLmV2ZW50LnJlZ2lzdGVyX1VJSGhhbmRsZXIoc2VsZi5fdGVzdF91aTEsIG1haW51aT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMSkKKyAgICAgICAgZXZlbnQxID0gYmIuZXZlbnQuQ29uZmlnUGFyc2VkKCkKKyAgICAgICAgYmIuZXZlbnQuZmlyZV9mcm9tX3dvcmtlcihldmVudDEsIE5vbmUpCisgICAgICAgIGV4cGVjdGVkID0gW2NhbGwoZXZlbnQxKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl90ZXN0X3VpMS5ldmVudC5zZW5kLmNhbGxfYXJnc19saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcHJpbnRfdWlfcXVldWUoc2VsZik6CisgICAgICAgICIiIiBUZXN0IHByaW50X3VpX3F1ZXVlIG1ldGhvZCAiIiIKKyAgICAgICAgZXZlbnQxID0gYmIuZXZlbnQuT3BlcmF0aW9uU3RhcnRlZCgpCisgICAgICAgIGV2ZW50MiA9IGJiLmV2ZW50Lk9wZXJhdGlvbkNvbXBsZXRlZCh0b3RhbD0xMjMpCisgICAgICAgIGJiLmV2ZW50LmZpcmUoZXZlbnQxLCBOb25lKQorICAgICAgICBiYi5ldmVudC5maXJlKGV2ZW50MiwgTm9uZSkKKyAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UiKQorICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihiYi5ldmVudC5Mb2dIYW5kbGVyKCkpCisgICAgICAgIGxvZ2dlci5pbmZvKCJUZXN0IGluZm8gTG9nUmVjb3JkIikKKyAgICAgICAgbG9nZ2VyLndhcm5pbmcoIlRlc3Qgd2FybmluZyBMb2dSZWNvcmQiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncygiQml0QmFrZSIsIGxldmVsPSJJTkZPIikgYXMgY206CisgICAgICAgICAgICBiYi5ldmVudC5wcmludF91aV9xdWV1ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ub3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgIFsiSU5GTzpCaXRCYWtlOlRlc3QgaW5mbyBMb2dSZWNvcmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiV0FSTklORzpCaXRCYWtlOlRlc3Qgd2FybmluZyBMb2dSZWNvcmQiXSkKKworICAgIGRlZiBfc2V0X3RocmVhZGxvY2tfdGVzdF9tb2NrdXBzKHNlbGYpOgorICAgICAgICAiIiIgQ3JlYXRlIFVJIGV2ZW50IGhhbmRsZXIgbW9ja3VwcyB1c2VkIGluIGVuYWJsZSBhbmQgZGlzYWJsZQorICAgICAgICAgICAgdGhyZWFkbG9jayB0ZXN0cyAiIiIKKyAgICAgICAgZGVmIHVpMV9ldmVudF9zZW5kKGV2ZW50KToKKyAgICAgICAgICAgIGlmIHR5cGUoZXZlbnQpIGlzIGJiLmV2ZW50LkNvbmZpZ1BhcnNlZDoKKyAgICAgICAgICAgICAgICBzZWxmLl90aHJlYWRsb2NrX3Rlc3RfY2FsbHMuYXBwZW5kKCJ3MV91aTEiKQorICAgICAgICAgICAgaWYgdHlwZShldmVudCkgaXMgYmIuZXZlbnQuT3BlcmF0aW9uU3RhcnRlZDoKKyAgICAgICAgICAgICAgICBzZWxmLl90aHJlYWRsb2NrX3Rlc3RfY2FsbHMuYXBwZW5kKCJ3Ml91aTEiKQorICAgICAgICAgICAgdGltZS5zbGVlcCgyKQorCisgICAgICAgIGRlZiB1aTJfZXZlbnRfc2VuZChldmVudCk6CisgICAgICAgICAgICBpZiB0eXBlKGV2ZW50KSBpcyBiYi5ldmVudC5Db25maWdQYXJzZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5fdGhyZWFkbG9ja190ZXN0X2NhbGxzLmFwcGVuZCgidzFfdWkyIikKKyAgICAgICAgICAgIGlmIHR5cGUoZXZlbnQpIGlzIGJiLmV2ZW50Lk9wZXJhdGlvblN0YXJ0ZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5fdGhyZWFkbG9ja190ZXN0X2NhbGxzLmFwcGVuZCgidzJfdWkyIikKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMikKKworICAgICAgICBzZWxmLl90aHJlYWRsb2NrX3Rlc3RfY2FsbHMgPSBbXQorICAgICAgICBzZWxmLl90ZXN0X3VpMS5ldmVudCA9IEV2ZW50UXVldWVTdHViKCkKKyAgICAgICAgc2VsZi5fdGVzdF91aTEuZXZlbnQuc2VuZCA9IHVpMV9ldmVudF9zZW5kCisgICAgICAgIHJlc3VsdCA9IGJiLmV2ZW50LnJlZ2lzdGVyX1VJSGhhbmRsZXIoc2VsZi5fdGVzdF91aTEsIG1haW51aT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMSkKKyAgICAgICAgc2VsZi5fdGVzdF91aTIuZXZlbnQgPSBFdmVudFF1ZXVlU3R1YigpCisgICAgICAgIHNlbGYuX3Rlc3RfdWkyLmV2ZW50LnNlbmQgPSB1aTJfZXZlbnRfc2VuZAorICAgICAgICByZXN1bHQgPSBiYi5ldmVudC5yZWdpc3Rlcl9VSUhoYW5kbGVyKHNlbGYuX3Rlc3RfdWkyLCBtYWludWk9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDIpCisKKyAgICBkZWYgX3NldF9hbmRfcnVuX3RocmVhZGxvY2tfdGVzdF93b3JrZXJzKHNlbGYpOgorICAgICAgICAiIiIgQ3JlYXRlIGFuZCBydW4gdGhlIHdvcmtlcnMgdXNlZCB0byB0cmlnZ2VyIGV2ZW50cyBpbiBlbmFibGUgYW5kCisgICAgICAgICAgICBkaXNhYmxlIHRocmVhZGxvY2sgdGVzdHMgIiIiCisgICAgICAgIHdvcmtlcjEgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLl90aHJlYWRfbG9ja190ZXN0X3dvcmtlcjEpCisgICAgICAgIHdvcmtlcjIgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLl90aHJlYWRfbG9ja190ZXN0X3dvcmtlcjIpCisgICAgICAgIHdvcmtlcjEuc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgIHdvcmtlcjIuc3RhcnQoKQorICAgICAgICB3b3JrZXIxLmpvaW4oKQorICAgICAgICB3b3JrZXIyLmpvaW4oKQorCisgICAgZGVmIF90aHJlYWRfbG9ja190ZXN0X3dvcmtlcjEoc2VsZik6CisgICAgICAgICIiIiBGaXJzdCB3b3JrZXIgdXNlZCB0byBmaXJlIHRoZSBDb25maWdQYXJzZWQgZXZlbnQgZm9yIGVuYWJsZSBhbmQKKyAgICAgICAgICAgIGRpc2FibGUgdGhyZWFkbG9ja3MgdGVzdHMgIiIiCisgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQ29uZmlnUGFyc2VkKCksIE5vbmUpCisKKyAgICBkZWYgX3RocmVhZF9sb2NrX3Rlc3Rfd29ya2VyMihzZWxmKToKKyAgICAgICAgIiIiIFNlY29uZCB3b3JrZXIgdXNlZCB0byBmaXJlIHRoZSBPcGVyYXRpb25TdGFydGVkIGV2ZW50IGZvciBlbmFibGUKKyAgICAgICAgICAgIGFuZCBkaXNhYmxlIHRocmVhZGxvY2tzIHRlc3RzICIiIgorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk9wZXJhdGlvblN0YXJ0ZWQoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2VuYWJsZV90aHJlYWRsb2NrKHNlbGYpOgorICAgICAgICAiIiIgVGVzdCBlbmFibGVfdGhyZWFkbG9jayBtZXRob2QgIiIiCisgICAgICAgIHNlbGYuX3NldF90aHJlYWRsb2NrX3Rlc3RfbW9ja3VwcygpCisgICAgICAgIGJiLmV2ZW50LmVuYWJsZV90aHJlYWRsb2NrKCkKKyAgICAgICAgc2VsZi5fc2V0X2FuZF9ydW5fdGhyZWFkbG9ja190ZXN0X3dvcmtlcnMoKQorICAgICAgICAjIENhbGxzIHRvIFVJIGhhbmRsZXJzIHNob3VsZCBiZSBpbiBvcmRlciBhcyBhbGwgdGhlIHJlZ2lzdGVyZWQKKyAgICAgICAgIyBoYW5kbGVycyBmb3IgdGhlIGV2ZW50IGNvbWluZyBmcm9tIHRoZSBmaXJzdCB3b3JrZXIgc2hvdWxkIGJlCisgICAgICAgICMgY2FsbGVkIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSBldmVudCBmcm9tIHRoZSBzZWNvbmQgd29ya2VyLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3RocmVhZGxvY2tfdGVzdF9jYWxscywKKyAgICAgICAgICAgICAgICAgICAgICAgICBbIncxX3VpMSIsICJ3MV91aTIiLCAidzJfdWkxIiwgIncyX3VpMiJdKQorCisgICAgZGVmIHRlc3RfZGlzYWJsZV90aHJlYWRsb2NrKHNlbGYpOgorICAgICAgICAiIiIgVGVzdCBkaXNhYmxlX3RocmVhZGxvY2sgbWV0aG9kICIiIgorICAgICAgICBzZWxmLl9zZXRfdGhyZWFkbG9ja190ZXN0X21vY2t1cHMoKQorICAgICAgICBiYi5ldmVudC5kaXNhYmxlX3RocmVhZGxvY2soKQorICAgICAgICBzZWxmLl9zZXRfYW5kX3J1bl90aHJlYWRsb2NrX3Rlc3Rfd29ya2VycygpCisgICAgICAgICMgQ2FsbHMgdG8gVUkgaGFuZGxlcnMgc2hvdWxkIGJlIGludGVydHdpbmVkIHRvZ2V0aGVyLiBUaGFua3MgdG8gdGhlCisgICAgICAgICMgZGVsYXkgaW4gdGhlIHJlZ2lzdGVyZWQgaGFuZGxlcnMgZm9yIHRoZSBldmVudCBjb21pbmcgZnJvbSB0aGUgZmlyc3QKKyAgICAgICAgIyB3b3JrZXIsIHRoZSBldmVudCBjb21pbmcgZnJvbSB0aGUgc2Vjb25kIHdvcmtlciBzdGFydHMgYmVpbmcKKyAgICAgICAgIyBwcm9jZXNzZWQgYmVmb3JlIGZpbmlzaGluZyBoYW5kbGluZyB0aGUgZmlyc3Qgd29ya2VyIGV2ZW50LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3RocmVhZGxvY2tfdGVzdF9jYWxscywKKyAgICAgICAgICAgICAgICAgICAgICAgICBbIncxX3VpMSIsICJ3Ml91aTEiLCAidzFfdWkyIiwgIncyX3VpMiJdKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL2ZldGNoLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL2ZldGNoLnB5CmluZGV4IDVhOGQ4OTIuLjdkN2M1ZDcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9mZXRjaC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvZmV0Y2gucHkKQEAgLTI4LDYgKzI4LDExIEBACiBmcm9tIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hNZXRob2QKIGltcG9ydCBiYgogCitkZWYgc2tpcElmTm9OZXR3b3JrKCk6CisgICAgaWYgb3MuZW52aXJvbi5nZXQoIkJCX1NLSVBfTkVUVEVTVFMiKSA9PSAieWVzIjoKKyAgICAgICAgcmV0dXJuIHVuaXR0ZXN0LnNraXAoIk5ldHdvcmsgdGVzdHMgYmVpbmcgc2tpcHBlZCIpCisgICAgcmV0dXJuIGxhbWJkYSBmOiBmCisKIGNsYXNzIFVSSVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHRlc3RfdXJpcyA9IHsKICAgICAgICAgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9pbmRleC5odG1sIiA6IHsKQEAgLTUxOCwxNDEgKzUyMywxNTMgQEAKICAgICAgICAgICAgIHNlbGYuZmV0Y2hVbnBhY2soWydmaWxlOi8vYTtzdWJkaXI9L2Jpbi9zaCddKQogCiBjbGFzcyBGZXRjaGVyTmV0d29ya1Rlc3QoRmV0Y2hlclRlc3QpOgorICAgIEBza2lwSWZOb05ldHdvcmsoKQorICAgIGRlZiB0ZXN0X2ZldGNoKHNlbGYpOgorICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2goWyJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZS9iaXRiYWtlLTEuMC50YXIuZ3oiLCAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UvYml0YmFrZS0xLjEudGFyLmd6Il0sIHNlbGYuZCkKKyAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5nZXRzaXplKHNlbGYuZGxkaXIgKyAiL2JpdGJha2UtMS4wLnRhci5neiIpLCA1Nzc0OSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmdldHNpemUoc2VsZi5kbGRpciArICIvYml0YmFrZS0xLjEudGFyLmd6IiksIDU3ODkyKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQl9OT19ORVRXT1JLIiwgIjEiKQorICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2goWyJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZS9iaXRiYWtlLTEuMC50YXIuZ3oiLCAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UvYml0YmFrZS0xLjEudGFyLmd6Il0sIHNlbGYuZCkKKyAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisgICAgICAgIGZldGNoZXIudW5wYWNrKHNlbGYudW5wYWNrZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvcy5saXN0ZGlyKHNlbGYudW5wYWNrZGlyICsgIi9iaXRiYWtlLTEuMC8iKSksIDkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9zLmxpc3RkaXIoc2VsZi51bnBhY2tkaXIgKyAiL2JpdGJha2UtMS4xLyIpKSwgOSkKIAotICAgIGlmIG9zLmVudmlyb24uZ2V0KCJCQl9TS0lQX05FVFRFU1RTIikgPT0gInllcyI6Ci0gICAgICAgIHByaW50KCJVbnNldCBCQl9TS0lQX05FVFRFU1RTIHRvIHJ1biBuZXR3b3JrIHRlc3RzIikKLSAgICBlbHNlOgotICAgICAgICBkZWYgdGVzdF9mZXRjaChzZWxmKToKLSAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaChbImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlL2JpdGJha2UtMS4wLnRhci5neiIsICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZS9iaXRiYWtlLTEuMS50YXIuZ3oiXSwgc2VsZi5kKQotICAgICAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguZ2V0c2l6ZShzZWxmLmRsZGlyICsgIi9iaXRiYWtlLTEuMC50YXIuZ3oiKSwgNTc3NDkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguZ2V0c2l6ZShzZWxmLmRsZGlyICsgIi9iaXRiYWtlLTEuMS50YXIuZ3oiKSwgNTc4OTIpCi0gICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQl9OT19ORVRXT1JLIiwgIjEiKQotICAgICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoLkZldGNoKFsiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UvYml0YmFrZS0xLjAudGFyLmd6IiwgImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlL2JpdGJha2UtMS4xLnRhci5neiJdLCBzZWxmLmQpCi0gICAgICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKKyAgICBAc2tpcElmTm9OZXR3b3JrKCkKKyAgICBkZWYgdGVzdF9mZXRjaF9taXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIk1JUlJPUlMiLCAiaHR0cDovLy4qLy4qIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlIikKKyAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoLkZldGNoKFsiaHR0cDovL2ludmFsaWQueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlL2JpdGJha2UtMS4wLnRhci5neiJdLCBzZWxmLmQpCisgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguZ2V0c2l6ZShzZWxmLmRsZGlyICsgIi9iaXRiYWtlLTEuMC50YXIuZ3oiKSwgNTc3NDkpCisKKyAgICBAc2tpcElmTm9OZXR3b3JrKCkKKyAgICBkZWYgdGVzdF9mZXRjaF9taXJyb3Jfb2ZfbWlycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJNSVJST1JTIiwgImh0dHA6Ly8uKi8uKiBodHRwOi8vaW52YWxpZDIueW9jdG9wcm9qZWN0Lm9yZy8gXG4gaHR0cDovL2ludmFsaWQyLnlvY3RvcHJvamVjdC5vcmcvLiogaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UiKQorICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2goWyJodHRwOi8vaW52YWxpZC55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UvYml0YmFrZS0xLjAudGFyLmd6Il0sIHNlbGYuZCkKKyAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5nZXRzaXplKHNlbGYuZGxkaXIgKyAiL2JpdGJha2UtMS4wLnRhci5neiIpLCA1Nzc0OSkKKworICAgIEBza2lwSWZOb05ldHdvcmsoKQorICAgIGRlZiB0ZXN0X2ZldGNoX2ZpbGVfbWlycm9yX29mX21pcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiTUlSUk9SUyIsICJodHRwOi8vLiovLiogZmlsZTovLy9zb21lMXdoZXJlLyBcbiBmaWxlOi8vL3NvbWUxd2hlcmUvLiogZmlsZTovL3NvbWUyd2hlcmUvIFxuIGZpbGU6Ly9zb21lMndoZXJlLy4qIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlIikKKyAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoLkZldGNoKFsiaHR0cDovL2ludmFsaWQueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlL2JpdGJha2UtMS4wLnRhci5neiJdLCBzZWxmLmQpCisgICAgICAgIG9zLm1rZGlyKHNlbGYuZGxkaXIgKyAiL3NvbWUyd2hlcmUiKQorICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmdldHNpemUoc2VsZi5kbGRpciArICIvYml0YmFrZS0xLjAudGFyLmd6IiksIDU3NzQ5KQorCisgICAgQHNraXBJZk5vTmV0d29yaygpCisgICAgZGVmIHRlc3RfZmV0Y2hfcHJlbWlycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJQUkVNSVJST1JTIiwgImh0dHA6Ly8uKi8uKiBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZSIpCisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaChbImh0dHA6Ly9pbnZhbGlkLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZS9iaXRiYWtlLTEuMC50YXIuZ3oiXSwgc2VsZi5kKQorICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmdldHNpemUoc2VsZi5kbGRpciArICIvYml0YmFrZS0xLjAudGFyLmd6IiksIDU3NzQ5KQorCisgICAgQHNraXBJZk5vTmV0d29yaygpCisgICAgZGVmIGdpdGZldGNoZXIoc2VsZiwgdXJsMSwgdXJsMik6CisgICAgICAgIGRlZiBjaGVja3JldmlzaW9uKHNlbGYsIGZldGNoZXIpOgogICAgICAgICAgICAgZmV0Y2hlci51bnBhY2soc2VsZi51bnBhY2tkaXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvcy5saXN0ZGlyKHNlbGYudW5wYWNrZGlyICsgIi9iaXRiYWtlLTEuMC8iKSksIDkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvcy5saXN0ZGlyKHNlbGYudW5wYWNrZGlyICsgIi9iaXRiYWtlLTEuMS8iKSksIDkpCisgICAgICAgICAgICByZXZpc2lvbiA9IGJiLnByb2Nlc3MucnVuKCJnaXQgcmV2LXBhcnNlIEhFQUQiLCBzaGVsbD1UcnVlLCBjd2Q9c2VsZi51bnBhY2tkaXIgKyAiL2dpdCIpWzBdLnN0cmlwKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV2aXNpb24sICIyNzBhMDViMGI0YmEwOTU5ZmUwNjI0ZDJhNDg4NWQ3YjcwNDI2ZGE1IikKIAotICAgICAgICBkZWYgdGVzdF9mZXRjaF9taXJyb3Ioc2VsZik6Ci0gICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJNSVJST1JTIiwgImh0dHA6Ly8uKi8uKiBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZSIpCi0gICAgICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2goWyJodHRwOi8vaW52YWxpZC55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UvYml0YmFrZS0xLjAudGFyLmd6Il0sIHNlbGYuZCkKLSAgICAgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmdldHNpemUoc2VsZi5kbGRpciArICIvYml0YmFrZS0xLjAudGFyLmd6IiksIDU3NzQ5KQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMiLCAiMSIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlNSQ1JFViIsICIyNzBhMDViMGI0YmEwOTU5ZmUwNjI0ZDJhNDg4NWQ3YjcwNDI2ZGE1IikKKyAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoLkZldGNoKFt1cmwxXSwgc2VsZi5kKQorICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKKyAgICAgICAgY2hlY2tyZXZpc2lvbihzZWxmLCBmZXRjaGVyKQorICAgICAgICAjIFdpcGUgb3V0IHRoZSBkbGRpciBjbG9uZSBhbmQgdGhlIHVucGFja2VkIHNvdXJjZSwgdHVybiBvZmYgdGhlIG5ldHdvcmsgYW5kIGNoZWNrIG1pcnJvciB0YXJiYWxsIHdvcmtzCisgICAgICAgIGJiLnV0aWxzLnBydW5lZGlyKHNlbGYuZGxkaXIgKyAiL2dpdDIvIikKKyAgICAgICAgYmIudXRpbHMucHJ1bmVkaXIoc2VsZi51bnBhY2tkaXIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJCX05PX05FVFdPUksiLCAiMSIpCisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaChbdXJsMl0sIHNlbGYuZCkKKyAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisgICAgICAgIGNoZWNrcmV2aXNpb24oc2VsZiwgZmV0Y2hlcikKIAotICAgICAgICBkZWYgdGVzdF9mZXRjaF9taXJyb3Jfb2ZfbWlycm9yKHNlbGYpOgotICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiTUlSUk9SUyIsICJodHRwOi8vLiovLiogaHR0cDovL2ludmFsaWQyLnlvY3RvcHJvamVjdC5vcmcvIFxuIGh0dHA6Ly9pbnZhbGlkMi55b2N0b3Byb2plY3Qub3JnLy4qIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlIikKLSAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaChbImh0dHA6Ly9pbnZhbGlkLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZS9iaXRiYWtlLTEuMC50YXIuZ3oiXSwgc2VsZi5kKQotICAgICAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguZ2V0c2l6ZShzZWxmLmRsZGlyICsgIi9iaXRiYWtlLTEuMC50YXIuZ3oiKSwgNTc3NDkpCisgICAgQHNraXBJZk5vTmV0d29yaygpCisgICAgZGVmIHRlc3RfZ2l0ZmV0Y2goc2VsZik6CisgICAgICAgIHVybDEgPSB1cmwyID0gImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiCisgICAgICAgIHNlbGYuZ2l0ZmV0Y2hlcih1cmwxLCB1cmwyKQogCi0gICAgICAgIGRlZiB0ZXN0X2ZldGNoX2ZpbGVfbWlycm9yX29mX21pcnJvcihzZWxmKToKLSAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIk1JUlJPUlMiLCAiaHR0cDovLy4qLy4qIGZpbGU6Ly8vc29tZTF3aGVyZS8gXG4gZmlsZTovLy9zb21lMXdoZXJlLy4qIGZpbGU6Ly9zb21lMndoZXJlLyBcbiBmaWxlOi8vc29tZTJ3aGVyZS8uKiBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZSIpCi0gICAgICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2goWyJodHRwOi8vaW52YWxpZC55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UvYml0YmFrZS0xLjAudGFyLmd6Il0sIHNlbGYuZCkKLSAgICAgICAgICAgIG9zLm1rZGlyKHNlbGYuZGxkaXIgKyAiL3NvbWUyd2hlcmUiKQotICAgICAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguZ2V0c2l6ZShzZWxmLmRsZGlyICsgIi9iaXRiYWtlLTEuMC50YXIuZ3oiKSwgNTc3NDkpCisgICAgQHNraXBJZk5vTmV0d29yaygpCisgICAgZGVmIHRlc3RfZ2l0ZmV0Y2hfZ29vZHNyY3JldihzZWxmKToKKyAgICAgICAgIyBTUkNSRVYgaXMgc2V0IGJ1dCBtYXRjaGVzIHJldj0gcGFyYW1ldGVyCisgICAgICAgIHVybDEgPSB1cmwyID0gImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2U7cmV2PTI3MGEwNWIwYjRiYTA5NTlmZTA2MjRkMmE0ODg1ZDdiNzA0MjZkYTUiCisgICAgICAgIHNlbGYuZ2l0ZmV0Y2hlcih1cmwxLCB1cmwyKQogCi0gICAgICAgIGRlZiB0ZXN0X2ZldGNoX3ByZW1pcnJvcihzZWxmKToKLSAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIlBSRU1JUlJPUlMiLCAiaHR0cDovLy4qLy4qIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlIikKLSAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaChbImh0dHA6Ly9pbnZhbGlkLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZS9iaXRiYWtlLTEuMC50YXIuZ3oiXSwgc2VsZi5kKQotICAgICAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguZ2V0c2l6ZShzZWxmLmRsZGlyICsgIi9iaXRiYWtlLTEuMC50YXIuZ3oiKSwgNTc3NDkpCisgICAgQHNraXBJZk5vTmV0d29yaygpCisgICAgZGVmIHRlc3RfZ2l0ZmV0Y2hfYmFkc3JjcmV2KHNlbGYpOgorICAgICAgICAjIFNSQ1JFViBpcyBzZXQgYnV0IGRvZXMgbm90IG1hdGNoIHJldj0gcGFyYW1ldGVyCisgICAgICAgIHVybDEgPSB1cmwyID0gImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2U7cmV2PWRlYWQwNWIwYjRiYTA5NTlmZTA2MjRkMmE0ODg1ZDdiNzA0MjZkYTUiCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGJiLmZldGNoLkZldGNoRXJyb3IsIHNlbGYuZ2l0ZmV0Y2hlciwgdXJsMSwgdXJsMikKIAotICAgICAgICBkZWYgZ2l0ZmV0Y2hlcihzZWxmLCB1cmwxLCB1cmwyKToKLSAgICAgICAgICAgIGRlZiBjaGVja3JldmlzaW9uKHNlbGYsIGZldGNoZXIpOgotICAgICAgICAgICAgICAgIGZldGNoZXIudW5wYWNrKHNlbGYudW5wYWNrZGlyKQotICAgICAgICAgICAgICAgIHJldmlzaW9uID0gYmIucHJvY2Vzcy5ydW4oImdpdCByZXYtcGFyc2UgSEVBRCIsIHNoZWxsPVRydWUsIGN3ZD1zZWxmLnVucGFja2RpciArICIvZ2l0IilbMF0uc3RyaXAoKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV2aXNpb24sICIyNzBhMDViMGI0YmEwOTU5ZmUwNjI0ZDJhNDg4NWQ3YjcwNDI2ZGE1IikKKyAgICBAc2tpcElmTm9OZXR3b3JrKCkKKyAgICBkZWYgdGVzdF9naXRmZXRjaF90YWdhbmRyZXYoc2VsZik6CisgICAgICAgICMgU1JDUkVWIGlzIHNldCBidXQgZG9lcyBub3QgbWF0Y2ggcmV2PSBwYXJhbWV0ZXIKKyAgICAgICAgdXJsMSA9IHVybDIgPSAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZTtyZXY9MjcwYTA1YjBiNGJhMDk1OWZlMDYyNGQyYTQ4ODVkN2I3MDQyNmRhNTt0YWc9MjcwYTA1YjBiNGJhMDk1OWZlMDYyNGQyYTQ4ODVkN2I3MDQyNmRhNSIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmIuZmV0Y2guRmV0Y2hFcnJvciwgc2VsZi5naXRmZXRjaGVyLCB1cmwxLCB1cmwyKQogCi0gICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMiLCAiMSIpCi0gICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJTUkNSRVYiLCAiMjcwYTA1YjBiNGJhMDk1OWZlMDYyNGQyYTQ4ODVkN2I3MDQyNmRhNSIpCi0gICAgICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2goW3VybDFdLCBzZWxmLmQpCi0gICAgICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKLSAgICAgICAgICAgIGNoZWNrcmV2aXNpb24oc2VsZiwgZmV0Y2hlcikKLSAgICAgICAgICAgICMgV2lwZSBvdXQgdGhlIGRsZGlyIGNsb25lIGFuZCB0aGUgdW5wYWNrZWQgc291cmNlLCB0dXJuIG9mZiB0aGUgbmV0d29yayBhbmQgY2hlY2sgbWlycm9yIHRhcmJhbGwgd29ya3MKLSAgICAgICAgICAgIGJiLnV0aWxzLnBydW5lZGlyKHNlbGYuZGxkaXIgKyAiL2dpdDIvIikKLSAgICAgICAgICAgIGJiLnV0aWxzLnBydW5lZGlyKHNlbGYudW5wYWNrZGlyKQotICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiQkJfTk9fTkVUV09SSyIsICIxIikKLSAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaChbdXJsMl0sIHNlbGYuZCkKLSAgICAgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQotICAgICAgICAgICAgY2hlY2tyZXZpc2lvbihzZWxmLCBmZXRjaGVyKQorICAgIEBza2lwSWZOb05ldHdvcmsoKQorICAgIGRlZiB0ZXN0X2dpdGZldGNoX2xvY2FsdXNlaGVhZChzZWxmKToKKyAgICAgICAgIyBDcmVhdGUgZHVtbXkgbG9jYWwgR2l0IHJlcG8KKyAgICAgICAgc3JjX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoZGlyPXNlbGYudGVtcGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4PSdnaXRmZXRjaF9sb2NhbHVzZWhlYWRfJykKKyAgICAgICAgc3JjX2RpciA9IG9zLnBhdGguYWJzcGF0aChzcmNfZGlyKQorICAgICAgICBiYi5wcm9jZXNzLnJ1bigiZ2l0IGluaXQiLCBjd2Q9c3JjX2RpcikKKyAgICAgICAgYmIucHJvY2Vzcy5ydW4oImdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSdEdW1teSBjb21taXQnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgY3dkPXNyY19kaXIpCisgICAgICAgICMgVXNlIG90aGVyIGJyYW5jaCB0aGFuIG1hc3RlcgorICAgICAgICBiYi5wcm9jZXNzLnJ1bigiZ2l0IGNoZWNrb3V0IC1iIG15LWRldmVsIiwgY3dkPXNyY19kaXIpCisgICAgICAgIGJiLnByb2Nlc3MucnVuKCJnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0nRHVtbXkgY29tbWl0IDInIiwKKyAgICAgICAgICAgICAgICAgICAgICAgY3dkPXNyY19kaXIpCisgICAgICAgIHN0ZG91dCA9IGJiLnByb2Nlc3MucnVuKCJnaXQgcmV2LXBhcnNlIEhFQUQiLCBjd2Q9c3JjX2RpcikKKyAgICAgICAgb3JpZ19yZXYgPSBzdGRvdXRbMF0uc3RyaXAoKQogCi0gICAgICAgIGRlZiB0ZXN0X2dpdGZldGNoKHNlbGYpOgotICAgICAgICAgICAgdXJsMSA9IHVybDIgPSAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSIKLSAgICAgICAgICAgIHNlbGYuZ2l0ZmV0Y2hlcih1cmwxLCB1cmwyKQorICAgICAgICAjIEZldGNoIGFuZCBjaGVjayByZXZpc2lvbgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJTUkNSRVYiLCAiQVVUT0lOQyIpCisgICAgICAgIHVybCA9ICJnaXQ6Ly8iICsgc3JjX2RpciArICI7cHJvdG9jb2w9ZmlsZTt1c2VoZWFkPTEiCisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaChbdXJsXSwgc2VsZi5kKQorICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKKyAgICAgICAgZmV0Y2hlci51bnBhY2soc2VsZi51bnBhY2tkaXIpCisgICAgICAgIHN0ZG91dCA9IGJiLnByb2Nlc3MucnVuKCJnaXQgcmV2LXBhcnNlIEhFQUQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9b3MucGF0aC5qb2luKHNlbGYudW5wYWNrZGlyLCAnZ2l0JykpCisgICAgICAgIHVucGFja19yZXYgPSBzdGRvdXRbMF0uc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWdfcmV2LCB1bnBhY2tfcmV2KQogCi0gICAgICAgIGRlZiB0ZXN0X2dpdGZldGNoX2dvb2RzcmNyZXYoc2VsZik6Ci0gICAgICAgICAgICAjIFNSQ1JFViBpcyBzZXQgYnV0IG1hdGNoZXMgcmV2PSBwYXJhbWV0ZXIKLSAgICAgICAgICAgIHVybDEgPSB1cmwyID0gImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2U7cmV2PTI3MGEwNWIwYjRiYTA5NTlmZTA2MjRkMmE0ODg1ZDdiNzA0MjZkYTUiCi0gICAgICAgICAgICBzZWxmLmdpdGZldGNoZXIodXJsMSwgdXJsMikKKyAgICBAc2tpcElmTm9OZXR3b3JrKCkKKyAgICBkZWYgdGVzdF9naXRmZXRjaF9yZW1vdGV1c2VoZWFkKHNlbGYpOgorICAgICAgICB1cmwgPSAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZTt1c2VoZWFkPTEiCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGJiLmZldGNoLlBhcmFtZXRlckVycm9yLCBzZWxmLmdpdGZldGNoZXIsIHVybCwgdXJsKQogCi0gICAgICAgIGRlZiB0ZXN0X2dpdGZldGNoX2JhZHNyY3JldihzZWxmKToKLSAgICAgICAgICAgICMgU1JDUkVWIGlzIHNldCBidXQgZG9lcyBub3QgbWF0Y2ggcmV2PSBwYXJhbWV0ZXIKLSAgICAgICAgICAgIHVybDEgPSB1cmwyID0gImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2U7cmV2PWRlYWQwNWIwYjRiYTA5NTlmZTA2MjRkMmE0ODg1ZDdiNzA0MjZkYTUiCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhiYi5mZXRjaC5GZXRjaEVycm9yLCBzZWxmLmdpdGZldGNoZXIsIHVybDEsIHVybDIpCisgICAgQHNraXBJZk5vTmV0d29yaygpCisgICAgZGVmIHRlc3RfZ2l0ZmV0Y2hfcHJlbWlycm9yKHNlbGYpOgorICAgICAgICB1cmwxID0gImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiCisgICAgICAgIHVybDIgPSAiZ2l0Oi8vc29tZXNlcnZlci5vcmcvYml0YmFrZSIKKyAgICAgICAgc2VsZi5kLnNldFZhcigiUFJFTUlSUk9SUyIsICJnaXQ6Ly9zb21lc2VydmVyLm9yZy9iaXRiYWtlIGdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UgXG4iKQorICAgICAgICBzZWxmLmdpdGZldGNoZXIodXJsMSwgdXJsMikKIAotICAgICAgICBkZWYgdGVzdF9naXRmZXRjaF90YWdhbmRyZXYoc2VsZik6Ci0gICAgICAgICAgICAjIFNSQ1JFViBpcyBzZXQgYnV0IGRvZXMgbm90IG1hdGNoIHJldj0gcGFyYW1ldGVyCi0gICAgICAgICAgICB1cmwxID0gdXJsMiA9ICJnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlO3Jldj0yNzBhMDViMGI0YmEwOTU5ZmUwNjI0ZDJhNDg4NWQ3YjcwNDI2ZGE1O3RhZz0yNzBhMDViMGI0YmEwOTU5ZmUwNjI0ZDJhNDg4NWQ3YjcwNDI2ZGE1IgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmIuZmV0Y2guRmV0Y2hFcnJvciwgc2VsZi5naXRmZXRjaGVyLCB1cmwxLCB1cmwyKQorICAgIEBza2lwSWZOb05ldHdvcmsoKQorICAgIGRlZiB0ZXN0X2dpdGZldGNoX3ByZW1pcnJvcjIoc2VsZik6CisgICAgICAgIHVybDEgPSB1cmwyID0gImdpdDovL3NvbWVzZXJ2ZXIub3JnL2JpdGJha2UiCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlBSRU1JUlJPUlMiLCAiZ2l0Oi8vc29tZXNlcnZlci5vcmcvYml0YmFrZSBnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlIFxuIikKKyAgICAgICAgc2VsZi5naXRmZXRjaGVyKHVybDEsIHVybDIpCiAKLSAgICAgICAgZGVmIHRlc3RfZ2l0ZmV0Y2hfbG9jYWx1c2VoZWFkKHNlbGYpOgotICAgICAgICAgICAgIyBDcmVhdGUgZHVtbXkgbG9jYWwgR2l0IHJlcG8KLSAgICAgICAgICAgIHNyY19kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKGRpcj1zZWxmLnRlbXBkaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9J2dpdGZldGNoX2xvY2FsdXNlaGVhZF8nKQotICAgICAgICAgICAgc3JjX2RpciA9IG9zLnBhdGguYWJzcGF0aChzcmNfZGlyKQotICAgICAgICAgICAgYmIucHJvY2Vzcy5ydW4oImdpdCBpbml0IiwgY3dkPXNyY19kaXIpCi0gICAgICAgICAgICBiYi5wcm9jZXNzLnJ1bigiZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tJ0R1bW15IGNvbW1pdCciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPXNyY19kaXIpCi0gICAgICAgICAgICAjIFVzZSBvdGhlciBicmFuY2ggdGhhbiBtYXN0ZXIKLSAgICAgICAgICAgIGJiLnByb2Nlc3MucnVuKCJnaXQgY2hlY2tvdXQgLWIgbXktZGV2ZWwiLCBjd2Q9c3JjX2RpcikKLSAgICAgICAgICAgIGJiLnByb2Nlc3MucnVuKCJnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0nRHVtbXkgY29tbWl0IDInIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD1zcmNfZGlyKQotICAgICAgICAgICAgc3Rkb3V0ID0gYmIucHJvY2Vzcy5ydW4oImdpdCByZXYtcGFyc2UgSEVBRCIsIGN3ZD1zcmNfZGlyKQotICAgICAgICAgICAgb3JpZ19yZXYgPSBzdGRvdXRbMF0uc3RyaXAoKQorICAgIEBza2lwSWZOb05ldHdvcmsoKQorICAgIGRlZiB0ZXN0X2dpdGZldGNoX3ByZW1pcnJvcjMoc2VsZik6CisgICAgICAgIHJlYWx1cmwgPSAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSIKKyAgICAgICAgZHVtbXl1cmwgPSAiZ2l0Oi8vc29tZXNlcnZlci5vcmcvYml0YmFrZSIKKyAgICAgICAgc2VsZi5zb3VyY2VkaXIgPSBzZWxmLnVucGFja2Rpci5yZXBsYWNlKCJ1bnBhY2tlZCIsICJzb3VyY2VtaXJyb3IuZ2l0IikKKyAgICAgICAgb3MuY2hkaXIoc2VsZi50ZW1wZGlyKQorICAgICAgICBiYi5wcm9jZXNzLnJ1bigiZ2l0IGNsb25lICVzICVzIDI+IC9kZXYvbnVsbCIgJSAocmVhbHVybCwgc2VsZi5zb3VyY2VkaXIpLCBzaGVsbD1UcnVlKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJQUkVNSVJST1JTIiwgIiVzIGdpdDovLyVzO3Byb3RvY29sPWZpbGUgXG4iICUgKGR1bW15dXJsLCBzZWxmLnNvdXJjZWRpcikpCisgICAgICAgIHNlbGYuZ2l0ZmV0Y2hlcihkdW1teXVybCwgZHVtbXl1cmwpCiAKLSAgICAgICAgICAgICMgRmV0Y2ggYW5kIGNoZWNrIHJldmlzaW9uCi0gICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJTUkNSRVYiLCAiQVVUT0lOQyIpCi0gICAgICAgICAgICB1cmwgPSAiZ2l0Oi8vIiArIHNyY19kaXIgKyAiO3Byb3RvY29sPWZpbGU7dXNlaGVhZD0xIgotICAgICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoLkZldGNoKFt1cmxdLCBzZWxmLmQpCi0gICAgICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKLSAgICAgICAgICAgIGZldGNoZXIudW5wYWNrKHNlbGYudW5wYWNrZGlyKQotICAgICAgICAgICAgc3Rkb3V0ID0gYmIucHJvY2Vzcy5ydW4oImdpdCByZXYtcGFyc2UgSEVBRCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9b3MucGF0aC5qb2luKHNlbGYudW5wYWNrZGlyLCAnZ2l0JykpCi0gICAgICAgICAgICB1bnBhY2tfcmV2ID0gc3Rkb3V0WzBdLnN0cmlwKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZ19yZXYsIHVucGFja19yZXYpCi0KLSAgICAgICAgZGVmIHRlc3RfZ2l0ZmV0Y2hfcmVtb3RldXNlaGVhZChzZWxmKToKLSAgICAgICAgICAgIHVybCA9ICJnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlO3VzZWhlYWQ9MSIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGJiLmZldGNoLlBhcmFtZXRlckVycm9yLCBzZWxmLmdpdGZldGNoZXIsIHVybCwgdXJsKQotCi0gICAgICAgIGRlZiB0ZXN0X2dpdGZldGNoX3ByZW1pcnJvcihzZWxmKToKLSAgICAgICAgICAgIHVybDEgPSAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSIKLSAgICAgICAgICAgIHVybDIgPSAiZ2l0Oi8vc29tZXNlcnZlci5vcmcvYml0YmFrZSIKLSAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIlBSRU1JUlJPUlMiLCAiZ2l0Oi8vc29tZXNlcnZlci5vcmcvYml0YmFrZSBnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlIFxuIikKLSAgICAgICAgICAgIHNlbGYuZ2l0ZmV0Y2hlcih1cmwxLCB1cmwyKQotCi0gICAgICAgIGRlZiB0ZXN0X2dpdGZldGNoX3ByZW1pcnJvcjIoc2VsZik6Ci0gICAgICAgICAgICB1cmwxID0gdXJsMiA9ICJnaXQ6Ly9zb21lc2VydmVyLm9yZy9iaXRiYWtlIgotICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiUFJFTUlSUk9SUyIsICJnaXQ6Ly9zb21lc2VydmVyLm9yZy9iaXRiYWtlIGdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UgXG4iKQotICAgICAgICAgICAgc2VsZi5naXRmZXRjaGVyKHVybDEsIHVybDIpCi0KLSAgICAgICAgZGVmIHRlc3RfZ2l0ZmV0Y2hfcHJlbWlycm9yMyhzZWxmKToKLSAgICAgICAgICAgIHJlYWx1cmwgPSAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSIKLSAgICAgICAgICAgIGR1bW15dXJsID0gImdpdDovL3NvbWVzZXJ2ZXIub3JnL2JpdGJha2UiCi0gICAgICAgICAgICBzZWxmLnNvdXJjZWRpciA9IHNlbGYudW5wYWNrZGlyLnJlcGxhY2UoInVucGFja2VkIiwgInNvdXJjZW1pcnJvci5naXQiKQotICAgICAgICAgICAgb3MuY2hkaXIoc2VsZi50ZW1wZGlyKQotICAgICAgICAgICAgYmIucHJvY2Vzcy5ydW4oImdpdCBjbG9uZSAlcyAlcyAyPiAvZGV2L251bGwiICUgKHJlYWx1cmwsIHNlbGYuc291cmNlZGlyKSwgc2hlbGw9VHJ1ZSkKLSAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIlBSRU1JUlJPUlMiLCAiJXMgZ2l0Oi8vJXM7cHJvdG9jb2w9ZmlsZSBcbiIgJSAoZHVtbXl1cmwsIHNlbGYuc291cmNlZGlyKSkKLSAgICAgICAgICAgIHNlbGYuZ2l0ZmV0Y2hlcihkdW1teXVybCwgZHVtbXl1cmwpCi0KLSAgICAgICAgZGVmIHRlc3RfZ2l0X3N1Ym1vZHVsZShzZWxmKToKLSAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaChbImdpdHNtOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvZ2l0LXN1Ym1vZHVsZS10ZXN0O3Jldj1mMTJlNTdmMmVkZjBhYTUzNGNmMTYxNmZhOTgzZDE2NWE5MmIwODQyIl0sIHNlbGYuZCkKLSAgICAgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQotICAgICAgICAgICAgIyBQcmV2aW91cyBjd2QgaGFzIGJlZW4gZGVsZXRlZAotICAgICAgICAgICAgb3MuY2hkaXIob3MucGF0aC5kaXJuYW1lKHNlbGYudW5wYWNrZGlyKSkKLSAgICAgICAgICAgIGZldGNoZXIudW5wYWNrKHNlbGYudW5wYWNrZGlyKQorICAgIEBza2lwSWZOb05ldHdvcmsoKQorICAgIGRlZiB0ZXN0X2dpdF9zdWJtb2R1bGUoc2VsZik6CisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaChbImdpdHNtOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvZ2l0LXN1Ym1vZHVsZS10ZXN0O3Jldj1mMTJlNTdmMmVkZjBhYTUzNGNmMTYxNmZhOTgzZDE2NWE5MmIwODQyIl0sIHNlbGYuZCkKKyAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisgICAgICAgICMgUHJldmlvdXMgY3dkIGhhcyBiZWVuIGRlbGV0ZWQKKyAgICAgICAgb3MuY2hkaXIob3MucGF0aC5kaXJuYW1lKHNlbGYudW5wYWNrZGlyKSkKKyAgICAgICAgZmV0Y2hlci51bnBhY2soc2VsZi51bnBhY2tkaXIpCiAKIAogY2xhc3MgVHJ1c3RlZE5ldHdvcmtzVGVzdChGZXRjaGVyVGVzdCk6CkBAIC03ODIsMzIgKzc5OSwzMiBAQAogICAgICAgICAoImRiIiwgImh0dHA6Ly9kb3dubG9hZC5vcmFjbGUuY29tL2JlcmtlbGV5LWRiL2RiLTUuMy4yMS50YXIuZ3oiLCAiaHR0cDovL3d3dy5vcmFjbGUuY29tL3RlY2huZXR3b3JrL3Byb2R1Y3RzL2JlcmtlbGV5ZGIvZG93bmxvYWRzL2luZGV4LTA4Mjk0NC5odG1sIiwgImh0dHA6Ly9kb3dubG9hZC5vcmFjbGUuY29tL290bi9iZXJrZWxleS1kYi8oP1A8bmFtZT5kYi0pKD9QPHB2ZXI+KChcZCtbXC5cLV9dKikrKSlcLnRhclwuZ3oiKQogICAgICAgICAgICAgOiAiNi4xLjE5IiwKICAgICB9Ci0gICAgaWYgb3MuZW52aXJvbi5nZXQoIkJCX1NLSVBfTkVUVEVTVFMiKSA9PSAieWVzIjoKLSAgICAgICAgcHJpbnQoIlVuc2V0IEJCX1NLSVBfTkVUVEVTVFMgdG8gcnVuIG5ldHdvcmsgdGVzdHMiKQotICAgIGVsc2U6Ci0gICAgICAgIGRlZiB0ZXN0X2dpdF9sYXRlc3RfdmVyc2lvbnN0cmluZyhzZWxmKToKLSAgICAgICAgICAgIGZvciBrLCB2IGluIHNlbGYudGVzdF9naXRfdXJpcy5pdGVtcygpOgotICAgICAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIlBOIiwga1swXSkKLSAgICAgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJTUkNSRVYiLCBrWzJdKQotICAgICAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIlVQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYIiwga1szXSkKLSAgICAgICAgICAgICAgICB1ZCA9IGJiLmZldGNoMi5GZXRjaERhdGEoa1sxXSwgc2VsZi5kKQotICAgICAgICAgICAgICAgIHB1cHZlcj0gdWQubWV0aG9kLmxhdGVzdF92ZXJzaW9uc3RyaW5nKHVkLCBzZWxmLmQpCi0gICAgICAgICAgICAgICAgdmVyc3RyaW5nID0gcHVwdmVyWzBdCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZlcnN0cmluZywgbXNnPSJDb3VsZCBub3QgZmluZCB1cHN0cmVhbSB2ZXJzaW9uIikKLSAgICAgICAgICAgICAgICByID0gYmIudXRpbHMudmVyY21wX3N0cmluZyh2LCB2ZXJzdHJpbmcpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIgPT0gLTEgb3IgciA9PSAwLCBtc2c9IlBhY2thZ2UgJXMsIHZlcnNpb246ICVzIDw9ICVzIiAlIChrWzBdLCB2LCB2ZXJzdHJpbmcpKQogCi0gICAgICAgIGRlZiB0ZXN0X3dnZXRfbGF0ZXN0X3ZlcnNpb25zdHJpbmcoc2VsZik6Ci0gICAgICAgICAgICBmb3IgaywgdiBpbiBzZWxmLnRlc3Rfd2dldF91cmlzLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiUE4iLCBrWzBdKQotICAgICAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIlVQU1RSRUFNX0NIRUNLX1VSSSIsIGtbMl0pCi0gICAgICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiVVBTVFJFQU1fQ0hFQ0tfUkVHRVgiLCBrWzNdKQotICAgICAgICAgICAgICAgIHVkID0gYmIuZmV0Y2gyLkZldGNoRGF0YShrWzFdLCBzZWxmLmQpCi0gICAgICAgICAgICAgICAgcHVwdmVyID0gdWQubWV0aG9kLmxhdGVzdF92ZXJzaW9uc3RyaW5nKHVkLCBzZWxmLmQpCi0gICAgICAgICAgICAgICAgdmVyc3RyaW5nID0gcHVwdmVyWzBdCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZlcnN0cmluZywgbXNnPSJDb3VsZCBub3QgZmluZCB1cHN0cmVhbSB2ZXJzaW9uIikKLSAgICAgICAgICAgICAgICByID0gYmIudXRpbHMudmVyY21wX3N0cmluZyh2LCB2ZXJzdHJpbmcpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIgPT0gLTEgb3IgciA9PSAwLCBtc2c9IlBhY2thZ2UgJXMsIHZlcnNpb246ICVzIDw9ICVzIiAlIChrWzBdLCB2LCB2ZXJzdHJpbmcpKQorICAgIEBza2lwSWZOb05ldHdvcmsoKQorICAgIGRlZiB0ZXN0X2dpdF9sYXRlc3RfdmVyc2lvbnN0cmluZyhzZWxmKToKKyAgICAgICAgZm9yIGssIHYgaW4gc2VsZi50ZXN0X2dpdF91cmlzLml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJQTiIsIGtbMF0pCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJTUkNSRVYiLCBrWzJdKQorICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVgiLCBrWzNdKQorICAgICAgICAgICAgdWQgPSBiYi5mZXRjaDIuRmV0Y2hEYXRhKGtbMV0sIHNlbGYuZCkKKyAgICAgICAgICAgIHB1cHZlcj0gdWQubWV0aG9kLmxhdGVzdF92ZXJzaW9uc3RyaW5nKHVkLCBzZWxmLmQpCisgICAgICAgICAgICB2ZXJzdHJpbmcgPSBwdXB2ZXJbMF0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2ZXJzdHJpbmcsIG1zZz0iQ291bGQgbm90IGZpbmQgdXBzdHJlYW0gdmVyc2lvbiIpCisgICAgICAgICAgICByID0gYmIudXRpbHMudmVyY21wX3N0cmluZyh2LCB2ZXJzdHJpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUociA9PSAtMSBvciByID09IDAsIG1zZz0iUGFja2FnZSAlcywgdmVyc2lvbjogJXMgPD0gJXMiICUgKGtbMF0sIHYsIHZlcnN0cmluZykpCisKKyAgICBAc2tpcElmTm9OZXR3b3JrKCkKKyAgICBkZWYgdGVzdF93Z2V0X2xhdGVzdF92ZXJzaW9uc3RyaW5nKHNlbGYpOgorICAgICAgICBmb3IgaywgdiBpbiBzZWxmLnRlc3Rfd2dldF91cmlzLml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJQTiIsIGtbMF0pCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJVUFNUUkVBTV9DSEVDS19VUkkiLCBrWzJdKQorICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiVVBTVFJFQU1fQ0hFQ0tfUkVHRVgiLCBrWzNdKQorICAgICAgICAgICAgdWQgPSBiYi5mZXRjaDIuRmV0Y2hEYXRhKGtbMV0sIHNlbGYuZCkKKyAgICAgICAgICAgIHB1cHZlciA9IHVkLm1ldGhvZC5sYXRlc3RfdmVyc2lvbnN0cmluZyh1ZCwgc2VsZi5kKQorICAgICAgICAgICAgdmVyc3RyaW5nID0gcHVwdmVyWzBdCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodmVyc3RyaW5nLCBtc2c9IkNvdWxkIG5vdCBmaW5kIHVwc3RyZWFtIHZlcnNpb24iKQorICAgICAgICAgICAgciA9IGJiLnV0aWxzLnZlcmNtcF9zdHJpbmcodiwgdmVyc3RyaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIgPT0gLTEgb3IgciA9PSAwLCBtc2c9IlBhY2thZ2UgJXMsIHZlcnNpb246ICVzIDw9ICVzIiAlIChrWzBdLCB2LCB2ZXJzdHJpbmcpKQogCiAKIGNsYXNzIEZldGNoQ2hlY2tTdGF0dXNUZXN0KEZldGNoZXJUZXN0KToKQEAgLTgyMCwzNyArODM3LDYzNiBAQAogICAgICAgICAgICAgICAgICAgICAgICJodHRwczovL3lvY3RvcHJvamVjdC5vcmcvZG9jdW1lbnRhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9vcGtnL29wa2ctMC4xLjcudGFyLmd6IiwKICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL29wa2cvb3BrZy0wLjMuMC50YXIuZ3oiLAotICAgICAgICAgICAgICAgICAgICAgICJmdHA6Ly9mdHAuZ251Lm9yZy9nbnUvYXV0b2NvbmYvYXV0b2NvbmYtMi42MC50YXIuZ3oiLAotICAgICAgICAgICAgICAgICAgICAgICJmdHA6Ly9mdHAuZ251Lm9yZy9nbnUvY2hlc3MvZ251Y2hlc3MtNS4wOC50YXIuZ3oiLAotICAgICAgICAgICAgICAgICAgICAgICJmdHA6Ly9mdHAuZ251Lm9yZy9nbnUvZ21wL2dtcC00LjAudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAiZnRwOi8vc291cmNld2FyZS5vcmcvcHViL2xpYmZmaS9saWJmZmktMS4yMC50YXIuZ3oiLAorICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZnRwLmdudS5vcmcvZ251L2F1dG9jb25mL2F1dG9jb25mLTIuNjAudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAiaHR0cHM6Ly9mdHAuZ251Lm9yZy9nbnUvY2hlc3MvZ251Y2hlc3MtNS4wOC50YXIuZ3oiLAorICAgICAgICAgICAgICAgICAgICAgICJodHRwczovL2Z0cC5nbnUub3JnL2dudS9nbXAvZ21wLTQuMC50YXIuZ3oiLAogICAgICAgICAgICAgICAgICAgICAgICMgR2l0SHViIHJlbGVhc2VzIGFyZSBob3N0ZWQgb24gQW1hem9uIFMzLCB3aGljaCBkb2Vzbid0IHN1cHBvcnQgSEVBRAogICAgICAgICAgICAgICAgICAgICAgICJodHRwczovL2dpdGh1Yi5jb20va2VyZ290aC90c2xpYi9yZWxlYXNlcy9kb3dubG9hZC8xLjEvdHNsaWItMS4xLnRhci54eiIKICAgICAgICAgICAgICAgICAgICAgICBdCiAKLSAgICBpZiBvcy5lbnZpcm9uLmdldCgiQkJfU0tJUF9ORVRURVNUUyIpID09ICJ5ZXMiOgotICAgICAgICBwcmludCgiVW5zZXQgQkJfU0tJUF9ORVRURVNUUyB0byBydW4gbmV0d29yayB0ZXN0cyIpCi0gICAgZWxzZToKLQotICAgICAgICBkZWYgdGVzdF93Z2V0X2NoZWNrc3RhdHVzKHNlbGYpOgotICAgICAgICAgICAgZmV0Y2ggPSBiYi5mZXRjaDIuRmV0Y2goc2VsZi50ZXN0X3dnZXRfdXJpcywgc2VsZi5kKQotICAgICAgICAgICAgZm9yIHUgaW4gc2VsZi50ZXN0X3dnZXRfdXJpczoKKyAgICBAc2tpcElmTm9OZXR3b3JrKCkKKyAgICBkZWYgdGVzdF93Z2V0X2NoZWNrc3RhdHVzKHNlbGYpOgorICAgICAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaChzZWxmLnRlc3Rfd2dldF91cmlzLCBzZWxmLmQpCisgICAgICAgIGZvciB1IGluIHNlbGYudGVzdF93Z2V0X3VyaXM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCh1cmw9dSk6CiAgICAgICAgICAgICAgICAgdWQgPSBmZXRjaC51ZFt1XQogICAgICAgICAgICAgICAgIG0gPSB1ZC5tZXRob2QKICAgICAgICAgICAgICAgICByZXQgPSBtLmNoZWNrc3RhdHVzKGZldGNoLCB1ZCwgc2VsZi5kKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXQsIG1zZz0iVVJJICVzLCBjYW4ndCBjaGVjayBzdGF0dXMiICUgKHUpKQogCisgICAgQHNraXBJZk5vTmV0d29yaygpCisgICAgZGVmIHRlc3Rfd2dldF9jaGVja3N0YXR1c19jb25uZWN0aW9uX2NhY2hlKHNlbGYpOgorICAgICAgICBmcm9tIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hDb25uZWN0aW9uQ2FjaGUKIAotICAgICAgICBkZWYgdGVzdF93Z2V0X2NoZWNrc3RhdHVzX2Nvbm5lY3Rpb25fY2FjaGUoc2VsZik6Ci0gICAgICAgICAgICBmcm9tIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hDb25uZWN0aW9uQ2FjaGUKKyAgICAgICAgY29ubmVjdGlvbl9jYWNoZSA9IEZldGNoQ29ubmVjdGlvbkNhY2hlKCkKKyAgICAgICAgZmV0Y2ggPSBiYi5mZXRjaDIuRmV0Y2goc2VsZi50ZXN0X3dnZXRfdXJpcywgc2VsZi5kLAorICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uX2NhY2hlID0gY29ubmVjdGlvbl9jYWNoZSkKIAotICAgICAgICAgICAgY29ubmVjdGlvbl9jYWNoZSA9IEZldGNoQ29ubmVjdGlvbkNhY2hlKCkKLSAgICAgICAgICAgIGZldGNoID0gYmIuZmV0Y2gyLkZldGNoKHNlbGYudGVzdF93Z2V0X3VyaXMsIHNlbGYuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25fY2FjaGUgPSBjb25uZWN0aW9uX2NhY2hlKQotCi0gICAgICAgICAgICBmb3IgdSBpbiBzZWxmLnRlc3Rfd2dldF91cmlzOgorICAgICAgICBmb3IgdSBpbiBzZWxmLnRlc3Rfd2dldF91cmlzOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QodXJsPXUpOgogICAgICAgICAgICAgICAgIHVkID0gZmV0Y2gudWRbdV0KICAgICAgICAgICAgICAgICBtID0gdWQubWV0aG9kCiAgICAgICAgICAgICAgICAgcmV0ID0gbS5jaGVja3N0YXR1cyhmZXRjaCwgdWQsIHNlbGYuZCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmV0LCBtc2c9IlVSSSAlcywgY2FuJ3QgY2hlY2sgc3RhdHVzIiAlICh1KSkKIAotICAgICAgICAgICAgY29ubmVjdGlvbl9jYWNoZS5jbG9zZV9jb25uZWN0aW9ucygpCisgICAgICAgIGNvbm5lY3Rpb25fY2FjaGUuY2xvc2VfY29ubmVjdGlvbnMoKQorCisKK2NsYXNzIEdpdE1ha2VTaGFsbG93VGVzdChGZXRjaGVyVGVzdCk6CisgICAgYml0YmFrZV9kaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguam9pbihfX2ZpbGVfXykpLCAnLi4nLCAnLi4nLCAnLi4nKQorICAgIG1ha2Vfc2hhbGxvd19wYXRoID0gb3MucGF0aC5qb2luKGJpdGJha2VfZGlyLCAnYmluJywgJ2dpdC1tYWtlLXNoYWxsb3cnKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBGZXRjaGVyVGVzdC5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLmdpdGRpciA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICdnaXRzaGFsbG93JykKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuZ2l0ZGlyKQorICAgICAgICBiYi5wcm9jZXNzLnJ1bignZ2l0IGluaXQnLCBjd2Q9c2VsZi5naXRkaXIpCisKKyAgICBkZWYgYXNzZXJ0UmVmcyhzZWxmLCBleHBlY3RlZF9yZWZzKToKKyAgICAgICAgYWN0dWFsX3JlZnMgPSBzZWxmLmdpdChbJ2Zvci1lYWNoLXJlZicsICctLWZvcm1hdD0lKHJlZm5hbWUpJ10pLnNwbGl0bGluZXMoKQorICAgICAgICBmdWxsX2V4cGVjdGVkID0gc2VsZi5naXQoWydyZXYtcGFyc2UnLCAnLS1zeW1ib2xpYy1mdWxsLW5hbWUnXSArIGV4cGVjdGVkX3JlZnMpLnNwbGl0bGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmdWxsX2V4cGVjdGVkKSwgc29ydGVkKGFjdHVhbF9yZWZzKSkKKworICAgIGRlZiBhc3NlcnRSZXZDb3VudChzZWxmLCBleHBlY3RlZF9jb3VudCwgYXJncz1Ob25lKToKKyAgICAgICAgaWYgYXJncyBpcyBOb25lOgorICAgICAgICAgICAgYXJncyA9IFsnSEVBRCddCisgICAgICAgIHJldnMgPSBzZWxmLmdpdChbJ3Jldi1saXN0J10gKyBhcmdzKQorICAgICAgICBhY3R1YWxfY291bnQgPSBsZW4ocmV2cy5zcGxpdGxpbmVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfY291bnQsIGFjdHVhbF9jb3VudCwgbXNnPSdPYmplY3QgY291bnQgYCVkYCBpcyBub3QgdGhlIGV4cGVjdGVkIGAlZGAnICUgKGFjdHVhbF9jb3VudCwgZXhwZWN0ZWRfY291bnQpKQorCisgICAgZGVmIGdpdChzZWxmLCBjbWQpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGNtZCwgc3RyKToKKyAgICAgICAgICAgIGNtZCA9ICdnaXQgJyArIGNtZAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY21kID0gWydnaXQnXSArIGNtZAorICAgICAgICByZXR1cm4gYmIucHJvY2Vzcy5ydW4oY21kLCBjd2Q9c2VsZi5naXRkaXIpWzBdCisKKyAgICBkZWYgbWFrZV9zaGFsbG93KHNlbGYsIGFyZ3M9Tm9uZSk6CisgICAgICAgIGlmIGFyZ3MgaXMgTm9uZToKKyAgICAgICAgICAgIGFyZ3MgPSBbJ0hFQUQnXQorICAgICAgICByZXR1cm4gYmIucHJvY2Vzcy5ydW4oW3NlbGYubWFrZV9zaGFsbG93X3BhdGhdICsgYXJncywgY3dkPXNlbGYuZ2l0ZGlyKQorCisgICAgZGVmIGFkZF9lbXB0eV9maWxlKHNlbGYsIHBhdGgsIG1zZz1Ob25lKToKKyAgICAgICAgaWYgbXNnIGlzIE5vbmU6CisgICAgICAgICAgICBtc2cgPSBwYXRoCisgICAgICAgIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuZ2l0ZGlyLCBwYXRoKSwgJ3cnKS5jbG9zZSgpCisgICAgICAgIHNlbGYuZ2l0KFsnYWRkJywgcGF0aF0pCisgICAgICAgIHNlbGYuZ2l0KFsnY29tbWl0JywgJy1tJywgbXNnLCBwYXRoXSkKKworICAgIGRlZiB0ZXN0X21ha2Vfc2hhbGxvd19zaW5nbGVfYnJhbmNoX25vX21lcmdlKHNlbGYpOgorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdhJykKKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmV2Q291bnQoMikKKyAgICAgICAgc2VsZi5tYWtlX3NoYWxsb3coKQorICAgICAgICBzZWxmLmFzc2VydFJldkNvdW50KDEpCisKKyAgICBkZWYgdGVzdF9tYWtlX3NoYWxsb3dfc2luZ2xlX2JyYW5jaF9vbmVfbWVyZ2Uoc2VsZik6CisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2EnKQorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdiJykKKyAgICAgICAgc2VsZi5naXQoJ2NoZWNrb3V0IC1iIGFfYnJhbmNoJykKKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnYycpCisgICAgICAgIHNlbGYuZ2l0KCdjaGVja291dCBtYXN0ZXInKQorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdkJykKKyAgICAgICAgc2VsZi5naXQoJ21lcmdlIC0tbm8tZmYgLS1uby1lZGl0IGFfYnJhbmNoJykKKyAgICAgICAgc2VsZi5naXQoJ2JyYW5jaCAtZCBhX2JyYW5jaCcpCisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2UnKQorICAgICAgICBzZWxmLmFzc2VydFJldkNvdW50KDYpCisgICAgICAgIHNlbGYubWFrZV9zaGFsbG93KFsnSEVBRH4yJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmV2Q291bnQoNSkKKworICAgIGRlZiB0ZXN0X21ha2Vfc2hhbGxvd19hdF9tZXJnZShzZWxmKToKKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnYScpCisgICAgICAgIHNlbGYuZ2l0KCdjaGVja291dCAtYiBhX2JyYW5jaCcpCisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2InKQorICAgICAgICBzZWxmLmdpdCgnY2hlY2tvdXQgbWFzdGVyJykKKyAgICAgICAgc2VsZi5naXQoJ21lcmdlIC0tbm8tZmYgLS1uby1lZGl0IGFfYnJhbmNoJykKKyAgICAgICAgc2VsZi5naXQoJ2JyYW5jaCAtZCBhX2JyYW5jaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmV2Q291bnQoMykKKyAgICAgICAgc2VsZi5tYWtlX3NoYWxsb3coKQorICAgICAgICBzZWxmLmFzc2VydFJldkNvdW50KDEpCisKKyAgICBkZWYgdGVzdF9tYWtlX3NoYWxsb3dfYW5ub3RhdGVkX3RhZyhzZWxmKToKKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnYScpCisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2InKQorICAgICAgICBzZWxmLmdpdCgndGFnIC1hIC1tIGFfdGFnIGFfdGFnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSZXZDb3VudCgyKQorICAgICAgICBzZWxmLm1ha2Vfc2hhbGxvdyhbJ2FfdGFnJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmV2Q291bnQoMSkKKworICAgIGRlZiB0ZXN0X21ha2Vfc2hhbGxvd19tdWx0aV9yZWYoc2VsZik6CisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2EnKQorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdiJykKKyAgICAgICAgc2VsZi5naXQoJ2NoZWNrb3V0IC1iIGFfYnJhbmNoJykKKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnYycpCisgICAgICAgIHNlbGYuZ2l0KCdjaGVja291dCBtYXN0ZXInKQorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdkJykKKyAgICAgICAgc2VsZi5naXQoJ2NoZWNrb3V0IC1iIGFfYnJhbmNoXzInKQorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdhX3RhZycpCisgICAgICAgIHNlbGYuZ2l0KCd0YWcgYV90YWcnKQorICAgICAgICBzZWxmLmdpdCgnY2hlY2tvdXQgbWFzdGVyJykKKyAgICAgICAgc2VsZi5naXQoJ2JyYW5jaCAtRCBhX2JyYW5jaF8yJykKKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnZScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmV2Q291bnQoNiwgWyctLWFsbCddKQorICAgICAgICBzZWxmLm1ha2Vfc2hhbGxvdygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmV2Q291bnQoNSwgWyctLWFsbCddKQorCisgICAgZGVmIHRlc3RfbWFrZV9zaGFsbG93X211bHRpX3JlZl90cmltKHNlbGYpOgorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdhJykKKyAgICAgICAgc2VsZi5naXQoJ2NoZWNrb3V0IC1iIGFfYnJhbmNoJykKKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnYycpCisgICAgICAgIHNlbGYuZ2l0KCdjaGVja291dCBtYXN0ZXInKQorICAgICAgICBzZWxmLmFzc2VydFJldkNvdW50KDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmV2Q291bnQoMiwgWyctLWFsbCddKQorICAgICAgICBzZWxmLmFzc2VydFJlZnMoWydtYXN0ZXInLCAnYV9icmFuY2gnXSkKKyAgICAgICAgc2VsZi5tYWtlX3NoYWxsb3coWyctcicsICdtYXN0ZXInLCAnSEVBRCddKQorICAgICAgICBzZWxmLmFzc2VydFJldkNvdW50KDEsIFsnLS1hbGwnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWZzKFsnbWFzdGVyJ10pCisKKyAgICBkZWYgdGVzdF9tYWtlX3NoYWxsb3dfbm9vcChzZWxmKToKKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmV2Q291bnQoMSkKKyAgICAgICAgc2VsZi5tYWtlX3NoYWxsb3coKQorICAgICAgICBzZWxmLmFzc2VydFJldkNvdW50KDEpCisKKyAgICBAc2tpcElmTm9OZXR3b3JrKCkKKyAgICBkZWYgdGVzdF9tYWtlX3NoYWxsb3dfYml0YmFrZShzZWxmKToKKyAgICAgICAgc2VsZi5naXQoJ3JlbW90ZSBhZGQgb3JpZ2luIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuZW1iZWRkZWQvYml0YmFrZScpCisgICAgICAgIHNlbGYuZ2l0KCdmZXRjaCAtLXRhZ3Mgb3JpZ2luJykKKyAgICAgICAgb3JpZ19yZXZzID0gbGVuKHNlbGYuZ2l0KCdyZXYtbGlzdCAtLWFsbCcpLnNwbGl0bGluZXMoKSkKKyAgICAgICAgc2VsZi5tYWtlX3NoYWxsb3coWydyZWZzL3RhZ3MvMS4xMC4wJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmV2Q291bnQob3JpZ19yZXZzIC0gMTc0NiwgWyctLWFsbCddKQorCitjbGFzcyBHaXRTaGFsbG93VGVzdChGZXRjaGVyVGVzdCk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBGZXRjaGVyVGVzdC5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLmdpdGRpciA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICdnaXQnKQorICAgICAgICBzZWxmLnNyY2RpciA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICdnaXRzb3VyY2UnKQorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLnNyY2RpcikKKyAgICAgICAgc2VsZi5naXQoJ2luaXQnLCBjd2Q9c2VsZi5zcmNkaXIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoJ1dPUktESVInLCBzZWxmLnRlbXBkaXIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoJ1MnLCBzZWxmLmdpdGRpcikKKyAgICAgICAgc2VsZi5kLmRlbFZhcignUFJFTUlSUk9SUycpCisgICAgICAgIHNlbGYuZC5kZWxWYXIoJ01JUlJPUlMnKQorCisgICAgICAgIHVyaSA9ICdnaXQ6Ly8lcztwcm90b2NvbD1maWxlO3N1YmRpcj0ke1N9JyAlIHNlbGYuc3JjZGlyCisgICAgICAgIHNlbGYuZC5zZXRWYXIoJ1NSQ19VUkknLCB1cmkpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoJ1NSQ1JFVicsICcke0FVVE9SRVZ9JykKKyAgICAgICAgc2VsZi5kLnNldFZhcignQVVUT1JFVicsICcke0BiYi5mZXRjaDIuZ2V0X2F1dG9yZXYoZCl9JykKKworICAgICAgICBzZWxmLmQuc2V0VmFyKCdCQl9HSVRfU0hBTExPVycsICcxJykKKyAgICAgICAgc2VsZi5kLnNldFZhcignQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTJywgJzAnKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCdCQl9HRU5FUkFURV9TSEFMTE9XX1RBUkJBTExTJywgJzEnKQorCisgICAgZGVmIGFzc2VydFJlZnMoc2VsZiwgZXhwZWN0ZWRfcmVmcywgY3dkPU5vbmUpOgorICAgICAgICBpZiBjd2QgaXMgTm9uZToKKyAgICAgICAgICAgIGN3ZCA9IHNlbGYuZ2l0ZGlyCisgICAgICAgIGFjdHVhbF9yZWZzID0gc2VsZi5naXQoWydmb3ItZWFjaC1yZWYnLCAnLS1mb3JtYXQ9JShyZWZuYW1lKSddLCBjd2Q9Y3dkKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgZnVsbF9leHBlY3RlZCA9IHNlbGYuZ2l0KFsncmV2LXBhcnNlJywgJy0tc3ltYm9saWMtZnVsbC1uYW1lJ10gKyBleHBlY3RlZF9yZWZzLCBjd2Q9Y3dkKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoc2V0KGZ1bGxfZXhwZWN0ZWQpKSwgc29ydGVkKHNldChhY3R1YWxfcmVmcykpKQorCisgICAgZGVmIGFzc2VydFJldkNvdW50KHNlbGYsIGV4cGVjdGVkX2NvdW50LCBhcmdzPU5vbmUsIGN3ZD1Ob25lKToKKyAgICAgICAgaWYgYXJncyBpcyBOb25lOgorICAgICAgICAgICAgYXJncyA9IFsnSEVBRCddCisgICAgICAgIGlmIGN3ZCBpcyBOb25lOgorICAgICAgICAgICAgY3dkID0gc2VsZi5naXRkaXIKKyAgICAgICAgcmV2cyA9IHNlbGYuZ2l0KFsncmV2LWxpc3QnXSArIGFyZ3MsIGN3ZD1jd2QpCisgICAgICAgIGFjdHVhbF9jb3VudCA9IGxlbihyZXZzLnNwbGl0bGluZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9jb3VudCwgYWN0dWFsX2NvdW50LCBtc2c9J09iamVjdCBjb3VudCBgJWRgIGlzIG5vdCB0aGUgZXhwZWN0ZWQgYCVkYCcgJSAoYWN0dWFsX2NvdW50LCBleHBlY3RlZF9jb3VudCkpCisKKyAgICBkZWYgZ2l0KHNlbGYsIGNtZCwgY3dkPU5vbmUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGNtZCwgc3RyKToKKyAgICAgICAgICAgIGNtZCA9ICdnaXQgJyArIGNtZAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY21kID0gWydnaXQnXSArIGNtZAorICAgICAgICBpZiBjd2QgaXMgTm9uZToKKyAgICAgICAgICAgIGN3ZCA9IHNlbGYuZ2l0ZGlyCisgICAgICAgIHJldHVybiBiYi5wcm9jZXNzLnJ1bihjbWQsIGN3ZD1jd2QpWzBdCisKKyAgICBkZWYgYWRkX2VtcHR5X2ZpbGUoc2VsZiwgcGF0aCwgY3dkPU5vbmUsIG1zZz1Ob25lKToKKyAgICAgICAgaWYgbXNnIGlzIE5vbmU6CisgICAgICAgICAgICBtc2cgPSBwYXRoCisgICAgICAgIGlmIGN3ZCBpcyBOb25lOgorICAgICAgICAgICAgY3dkID0gc2VsZi5zcmNkaXIKKyAgICAgICAgb3Blbihvcy5wYXRoLmpvaW4oY3dkLCBwYXRoKSwgJ3cnKS5jbG9zZSgpCisgICAgICAgIHNlbGYuZ2l0KFsnYWRkJywgcGF0aF0sIGN3ZCkKKyAgICAgICAgc2VsZi5naXQoWydjb21taXQnLCAnLW0nLCBtc2csIHBhdGhdLCBjd2QpCisKKyAgICBkZWYgZmV0Y2goc2VsZiwgdXJpPU5vbmUpOgorICAgICAgICBpZiB1cmkgaXMgTm9uZToKKyAgICAgICAgICAgIHVyaXMgPSBzZWxmLmQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkuc3BsaXQoKQorICAgICAgICAgICAgdXJpID0gdXJpc1swXQorICAgICAgICAgICAgZCA9IHNlbGYuZAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZCA9IHNlbGYuZC5jcmVhdGVDb3B5KCkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdTUkNfVVJJJywgdXJpKQorICAgICAgICAgICAgdXJpID0gZC5leHBhbmQodXJpKQorICAgICAgICAgICAgdXJpcyA9IFt1cmldCisKKyAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaCh1cmlzLCBkKQorICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKKyAgICAgICAgdWQgPSBmZXRjaGVyLnVkW3VyaV0KKyAgICAgICAgcmV0dXJuIGZldGNoZXIsIHVkCisKKyAgICBkZWYgZmV0Y2hfYW5kX3VucGFjayhzZWxmLCB1cmk9Tm9uZSk6CisgICAgICAgIGZldGNoZXIsIHVkID0gc2VsZi5mZXRjaCh1cmkpCisgICAgICAgIGZldGNoZXIudW5wYWNrKHNlbGYuZC5nZXRWYXIoJ1dPUktESVInKSkKKyAgICAgICAgYXNzZXJ0IG9zLnBhdGguZXhpc3RzKHNlbGYuZC5nZXRWYXIoJ1MnKSkKKyAgICAgICAgcmV0dXJuIGZldGNoZXIsIHVkCisKKyAgICBkZWYgZmV0Y2hfc2hhbGxvdyhzZWxmLCB1cmk9Tm9uZSwgZGlzYWJsZWQ9RmFsc2UsIGtlZXBjbG9uZT1GYWxzZSk6CisgICAgICAgICIiIkZldGNoIGEgdXJpLCBnZW5lcmF0aW5nIGEgc2hhbGxvdyB0YXJiYWxsLCB0aGVuIHVucGFjayB1c2luZyBpdCIiIgorICAgICAgICBmZXRjaGVyLCB1ZCA9IHNlbGYuZmV0Y2hfYW5kX3VucGFjayh1cmkpCisgICAgICAgIGFzc2VydCBvcy5wYXRoLmV4aXN0cyh1ZC5jbG9uZWRpciksICdHaXQgY2xvbmUgaW4gRExESVIgKCVzKSBkb2VzIG5vdCBleGlzdCBmb3IgdXJpICVzJyAlICh1ZC5jbG9uZWRpciwgdXJpKQorCisgICAgICAgICMgQ29uZmlybSB0aGF0IHRoZSB1bnBhY2tlZCByZXBvIGlzIHVuc2hhbGxvdworICAgICAgICBpZiBub3QgZGlzYWJsZWQ6CisgICAgICAgICAgICBhc3NlcnQgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYuZGxkaXIsIHVkLm1pcnJvcnRhcmJhbGxzWzBdKSkKKworICAgICAgICAjIGZldGNoIGFuZCB1bnBhY2ssIGZyb20gdGhlIHNoYWxsb3cgdGFyYmFsbAorICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5naXRkaXIsIHJlY3Vyc2U9VHJ1ZSkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHVkLmNsb25lZGlyLCByZWN1cnNlPVRydWUpCisKKyAgICAgICAgIyBjb25maXJtIHRoYXQgdGhlIHVucGFja2VkIHJlcG8gaXMgdXNlZCB3aGVuIG5vIGdpdCBjbG9uZSBvciBnaXQKKyAgICAgICAgIyBtaXJyb3IgdGFyYmFsbCBpcyBhdmFpbGFibGUKKyAgICAgICAgZmV0Y2hlciwgdWQgPSBzZWxmLmZldGNoX2FuZF91bnBhY2sodXJpKQorICAgICAgICBpZiBub3QgZGlzYWJsZWQ6CisgICAgICAgICAgICBhc3NlcnQgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYuZ2l0ZGlyLCAnLmdpdCcsICdzaGFsbG93JykpLCAnVW5wYWNrZWQgZ2l0IHJlcG9zaXRvcnkgYXQgJXMgaXMgbm90IHNoYWxsb3cnICUgc2VsZi5naXRkaXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydCBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYuZ2l0ZGlyLCAnLmdpdCcsICdzaGFsbG93JykpLCAnVW5wYWNrZWQgZ2l0IHJlcG9zaXRvcnkgYXQgJXMgaXMgc2hhbGxvdycgJSBzZWxmLmdpdGRpcgorICAgICAgICByZXR1cm4gZmV0Y2hlciwgdWQKKworICAgIGRlZiB0ZXN0X3NoYWxsb3dfZGlzYWJsZWQoc2VsZik6CisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2EnKQorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRSZXZDb3VudCgyLCBjd2Q9c2VsZi5zcmNkaXIpCisKKyAgICAgICAgc2VsZi5kLnNldFZhcignQkJfR0lUX1NIQUxMT1cnLCAnMCcpCisgICAgICAgIHNlbGYuZmV0Y2hfc2hhbGxvdyhkaXNhYmxlZD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJldkNvdW50KDIpCisKKyAgICBkZWYgdGVzdF9zaGFsbG93X25vYnJhbmNoKHNlbGYpOgorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdhJykKKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmV2Q291bnQoMiwgY3dkPXNlbGYuc3JjZGlyKQorCisgICAgICAgIHNyY3JldiA9IHNlbGYuZ2l0KCdyZXYtcGFyc2UgSEVBRCcsIGN3ZD1zZWxmLnNyY2Rpcikuc3RyaXAoKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCdTUkNSRVYnLCBzcmNyZXYpCisgICAgICAgIHVyaSA9IHNlbGYuZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKS5zcGxpdCgpWzBdCisgICAgICAgIHVyaSA9ICclcztub2JyYW5jaD0xO2JhcmU9MScgJSB1cmkKKworICAgICAgICBzZWxmLmZldGNoX3NoYWxsb3codXJpKQorICAgICAgICBzZWxmLmFzc2VydFJldkNvdW50KDEpCisKKyAgICAgICAgIyBzaGFsbG93IHJlZnMgYXJlIHVzZWQgdG8gZW5zdXJlIHRoZSBzcmNyZXYgc3RpY2tzIGFyb3VuZCB3aGVuIHdlCisgICAgICAgICMgaGF2ZSBubyBvdGhlciBicmFuY2hlcyByZWZlcmVuY2luZyBpdAorICAgICAgICBzZWxmLmFzc2VydFJlZnMoWydyZWZzL3NoYWxsb3cvZGVmYXVsdCddKQorCisgICAgZGVmIHRlc3Rfc2hhbGxvd19kZWZhdWx0X2RlcHRoXzEoc2VsZik6CisgICAgICAgICMgQ3JlYXRlIGluaXRpYWwgZ2l0IHJlcG8KKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnYScpCisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2InKQorICAgICAgICBzZWxmLmFzc2VydFJldkNvdW50KDIsIGN3ZD1zZWxmLnNyY2RpcikKKworICAgICAgICBzZWxmLmZldGNoX3NoYWxsb3coKQorICAgICAgICBzZWxmLmFzc2VydFJldkNvdW50KDEpCisKKyAgICBkZWYgdGVzdF9zaGFsbG93X2RlcHRoXzBfZGlzYWJsZXMoc2VsZik6CisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2EnKQorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRSZXZDb3VudCgyLCBjd2Q9c2VsZi5zcmNkaXIpCisKKyAgICAgICAgc2VsZi5kLnNldFZhcignQkJfR0lUX1NIQUxMT1dfREVQVEgnLCAnMCcpCisgICAgICAgIHNlbGYuZmV0Y2hfc2hhbGxvdyhkaXNhYmxlZD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJldkNvdW50KDIpCisKKyAgICBkZWYgdGVzdF9zaGFsbG93X2RlcHRoX2RlZmF1bHRfb3ZlcnJpZGUoc2VsZik6CisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2EnKQorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRSZXZDb3VudCgyLCBjd2Q9c2VsZi5zcmNkaXIpCisKKyAgICAgICAgc2VsZi5kLnNldFZhcignQkJfR0lUX1NIQUxMT1dfREVQVEgnLCAnMicpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoJ0JCX0dJVF9TSEFMTE9XX0RFUFRIX2RlZmF1bHQnLCAnMScpCisgICAgICAgIHNlbGYuZmV0Y2hfc2hhbGxvdygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmV2Q291bnQoMSkKKworICAgIGRlZiB0ZXN0X3NoYWxsb3dfZGVwdGhfZGVmYXVsdF9vdmVycmlkZV9kaXNhYmxlKHNlbGYpOgorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdhJykKKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnYicpCisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2MnKQorICAgICAgICBzZWxmLmFzc2VydFJldkNvdW50KDMsIGN3ZD1zZWxmLnNyY2RpcikKKworICAgICAgICBzZWxmLmQuc2V0VmFyKCdCQl9HSVRfU0hBTExPV19ERVBUSCcsICcwJykKKyAgICAgICAgc2VsZi5kLnNldFZhcignQkJfR0lUX1NIQUxMT1dfREVQVEhfZGVmYXVsdCcsICcyJykKKyAgICAgICAgc2VsZi5mZXRjaF9zaGFsbG93KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSZXZDb3VudCgyKQorCisgICAgZGVmIHRlc3RfY3VycmVudF9zaGFsbG93X291dF9vZl9kYXRlX2Nsb25lKHNlbGYpOgorICAgICAgICAjIENyZWF0ZSBpbml0aWFsIGdpdCByZXBvCisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2EnKQorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdiJykKKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnYycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmV2Q291bnQoMywgY3dkPXNlbGYuc3JjZGlyKQorCisgICAgICAgICMgQ2xvbmUgYW5kIGdlbmVyYXRlIG1pcnJvciB0YXJiYWxsCisgICAgICAgIGZldGNoZXIsIHVkID0gc2VsZi5mZXRjaCgpCisKKyAgICAgICAgIyBFbnN1cmUgd2UgaGF2ZSBhIGN1cnJlbnQgbWlycm9yIHRhcmJhbGwsIGJ1dCBhbiBvdXQgb2YgZGF0ZSBjbG9uZQorICAgICAgICBzZWxmLmdpdCgndXBkYXRlLXJlZiByZWZzL2hlYWRzL21hc3RlciByZWZzL2hlYWRzL21hc3Rlcn4xJywgY3dkPXVkLmNsb25lZGlyKQorICAgICAgICBzZWxmLmFzc2VydFJldkNvdW50KDIsIGN3ZD11ZC5jbG9uZWRpcikKKworICAgICAgICAjIEZldGNoIGFuZCB1bnBhY2ssIGZyb20gdGhlIGN1cnJlbnQgdGFyYmFsbCwgbm90IHRoZSBvdXQgb2YgZGF0ZSBjbG9uZQorICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5naXRkaXIsIHJlY3Vyc2U9VHJ1ZSkKKyAgICAgICAgZmV0Y2hlciwgdWQgPSBzZWxmLmZldGNoKCkKKyAgICAgICAgZmV0Y2hlci51bnBhY2soc2VsZi5kLmdldFZhcignV09SS0RJUicpKQorICAgICAgICBzZWxmLmFzc2VydFJldkNvdW50KDEpCisKKyAgICBkZWYgdGVzdF9zaGFsbG93X3NpbmdsZV9icmFuY2hfbm9fbWVyZ2Uoc2VsZik6CisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2EnKQorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRSZXZDb3VudCgyLCBjd2Q9c2VsZi5zcmNkaXIpCisKKyAgICAgICAgc2VsZi5mZXRjaF9zaGFsbG93KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSZXZDb3VudCgxKQorICAgICAgICBhc3NlcnQgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYuZ2l0ZGlyLCAnYScpKQorICAgICAgICBhc3NlcnQgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYuZ2l0ZGlyLCAnYicpKQorCisgICAgZGVmIHRlc3Rfc2hhbGxvd19ub19kYW5nbGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnYScpCisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2InKQorICAgICAgICBzZWxmLmFzc2VydFJldkNvdW50KDIsIGN3ZD1zZWxmLnNyY2RpcikKKworICAgICAgICBzZWxmLmZldGNoX3NoYWxsb3coKQorICAgICAgICBzZWxmLmFzc2VydFJldkNvdW50KDEpCisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5naXQoJ2ZzY2sgLS1kYW5nbGluZycpCisKKyAgICBkZWYgdGVzdF9zaGFsbG93X3NyY3Jldl9icmFuY2hfdHJ1bmNhdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnYScpCisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2InKQorICAgICAgICBiX2NvbW1pdCA9IHNlbGYuZ2l0KCdyZXYtcGFyc2UgSEVBRCcsIGN3ZD1zZWxmLnNyY2RpcikucnN0cmlwKCkKKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnYycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmV2Q291bnQoMywgY3dkPXNlbGYuc3JjZGlyKQorCisgICAgICAgIHNlbGYuZC5zZXRWYXIoJ1NSQ1JFVicsIGJfY29tbWl0KQorICAgICAgICBzZWxmLmZldGNoX3NoYWxsb3coKQorCisgICAgICAgICMgVGhlICdjJyBjb21taXQgd2FzIHJlbW92ZWQgZW50aXJlbHksIGFuZCAnYScgd2FzIHJlbW92ZWQgZnJvbSBoaXN0b3J5CisgICAgICAgIHNlbGYuYXNzZXJ0UmV2Q291bnQoMSwgWyctLWFsbCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2l0KCdyZXYtcGFyc2UgSEVBRCcpLnN0cmlwKCksIGJfY29tbWl0KQorICAgICAgICBhc3NlcnQgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYuZ2l0ZGlyLCAnYScpKQorICAgICAgICBhc3NlcnQgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYuZ2l0ZGlyLCAnYicpKQorICAgICAgICBhc3NlcnQgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLmdpdGRpciwgJ2MnKSkKKworICAgIGRlZiB0ZXN0X3NoYWxsb3dfcmVmX3BydW5pbmcoc2VsZik6CisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2EnKQorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdiJykKKyAgICAgICAgc2VsZi5naXQoJ2JyYW5jaCBhX2JyYW5jaCcsIGN3ZD1zZWxmLnNyY2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWZzKFsnbWFzdGVyJywgJ2FfYnJhbmNoJ10sIGN3ZD1zZWxmLnNyY2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRSZXZDb3VudCgyLCBjd2Q9c2VsZi5zcmNkaXIpCisKKyAgICAgICAgc2VsZi5mZXRjaF9zaGFsbG93KCkKKworICAgICAgICBzZWxmLmFzc2VydFJlZnMoWydtYXN0ZXInLCAnb3JpZ2luL21hc3RlciddKQorICAgICAgICBzZWxmLmFzc2VydFJldkNvdW50KDEpCisKKyAgICBkZWYgdGVzdF9zaGFsbG93X3N1Ym1vZHVsZXMoc2VsZik6CisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2EnKQorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdiJykKKworICAgICAgICBzbWRpciA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICdnaXRzdWJtb2R1bGUnKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc21kaXIpCisgICAgICAgIHNlbGYuZ2l0KCdpbml0JywgY3dkPXNtZGlyKQorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdhc3ViJywgY3dkPXNtZGlyKQorCisgICAgICAgIHNlbGYuZ2l0KCdzdWJtb2R1bGUgaW5pdCcsIGN3ZD1zZWxmLnNyY2RpcikKKyAgICAgICAgc2VsZi5naXQoJ3N1Ym1vZHVsZSBhZGQgZmlsZTovLyVzJyAlIHNtZGlyLCBjd2Q9c2VsZi5zcmNkaXIpCisgICAgICAgIHNlbGYuZ2l0KCdzdWJtb2R1bGUgdXBkYXRlJywgY3dkPXNlbGYuc3JjZGlyKQorICAgICAgICBzZWxmLmdpdCgnY29tbWl0IC1tIHN1Ym1vZHVsZSAtYScsIGN3ZD1zZWxmLnNyY2RpcikKKworICAgICAgICB1cmkgPSAnZ2l0c206Ly8lcztwcm90b2NvbD1maWxlO3N1YmRpcj0ke1N9JyAlIHNlbGYuc3JjZGlyCisgICAgICAgIGZldGNoZXIsIHVkID0gc2VsZi5mZXRjaF9zaGFsbG93KHVyaSkKKworICAgICAgICBzZWxmLmFzc2VydFJldkNvdW50KDEpCisgICAgICAgIGFzc2VydCAnLi8uZ2l0L21vZHVsZXMvJyBpbiBiYi5wcm9jZXNzLnJ1bigndGFyIC10emYgJXMnICUgb3MucGF0aC5qb2luKHNlbGYuZGxkaXIsIHVkLm1pcnJvcnRhcmJhbGxzWzBdKSlbMF0KKyAgICAgICAgYXNzZXJ0IG9zLmxpc3RkaXIob3MucGF0aC5qb2luKHNlbGYuZ2l0ZGlyLCAnZ2l0c3VibW9kdWxlJykpCisKKyAgICBpZiBhbnkob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHAsICdnaXQtYW5uZXgnKSkgZm9yIHAgaW4gb3MuZW52aXJvbi5nZXQoJ1BBVEgnKS5zcGxpdCgnOicpKToKKyAgICAgICAgZGVmIHRlc3Rfc2hhbGxvd19hbm5leChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2EnKQorICAgICAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnYicpCisgICAgICAgICAgICBzZWxmLmdpdCgnYW5uZXggaW5pdCcsIGN3ZD1zZWxmLnNyY2RpcikKKyAgICAgICAgICAgIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuc3JjZGlyLCAnYycpLCAndycpLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuZ2l0KCdhbm5leCBhZGQgYycsIGN3ZD1zZWxmLnNyY2RpcikKKyAgICAgICAgICAgIHNlbGYuZ2l0KCdjb21taXQgLW0gYW5uZXgtYyAtYScsIGN3ZD1zZWxmLnNyY2RpcikKKyAgICAgICAgICAgIGJiLnByb2Nlc3MucnVuKCdjaG1vZCB1K3cgLVIgJXMnICUgb3MucGF0aC5qb2luKHNlbGYuc3JjZGlyLCAnLmdpdCcsICdhbm5leCcpKQorCisgICAgICAgICAgICB1cmkgPSAnZ2l0YW5uZXg6Ly8lcztwcm90b2NvbD1maWxlO3N1YmRpcj0ke1N9JyAlIHNlbGYuc3JjZGlyCisgICAgICAgICAgICBmZXRjaGVyLCB1ZCA9IHNlbGYuZmV0Y2hfc2hhbGxvdyh1cmkpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmV2Q291bnQoMSkKKyAgICAgICAgICAgIGFzc2VydCAnLi8uZ2l0L2FubmV4LycgaW4gYmIucHJvY2Vzcy5ydW4oJ3RhciAtdHpmICVzJyAlIG9zLnBhdGguam9pbihzZWxmLmRsZGlyLCB1ZC5taXJyb3J0YXJiYWxsc1swXSkpWzBdCisgICAgICAgICAgICBhc3NlcnQgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYuZ2l0ZGlyLCAnYycpKQorCisgICAgZGVmIHRlc3Rfc2hhbGxvd19tdWx0aV9vbmVfdXJpKHNlbGYpOgorICAgICAgICAjIENyZWF0ZSBpbml0aWFsIGdpdCByZXBvCisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2EnKQorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdiJykKKyAgICAgICAgc2VsZi5naXQoJ2NoZWNrb3V0IC1iIGFfYnJhbmNoJywgY3dkPXNlbGYuc3JjZGlyKQorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdjJykKKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnZCcpCisgICAgICAgIHNlbGYuZ2l0KCdjaGVja291dCBtYXN0ZXInLCBjd2Q9c2VsZi5zcmNkaXIpCisgICAgICAgIHNlbGYuZ2l0KCd0YWcgdjAuMCBhX2JyYW5jaCcsIGN3ZD1zZWxmLnNyY2RpcikKKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnZScpCisgICAgICAgIHNlbGYuZ2l0KCdtZXJnZSAtLW5vLWZmIC0tbm8tZWRpdCBhX2JyYW5jaCcsIGN3ZD1zZWxmLnNyY2RpcikKKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnZicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmV2Q291bnQoNywgY3dkPXNlbGYuc3JjZGlyKQorCisgICAgICAgIHVyaSA9IHNlbGYuZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKS5zcGxpdCgpWzBdCisgICAgICAgIHVyaSA9ICclczticmFuY2g9bWFzdGVyLGFfYnJhbmNoO25hbWU9bWFzdGVyLGFfYnJhbmNoJyAlIHVyaQorCisgICAgICAgIHNlbGYuZC5zZXRWYXIoJ0JCX0dJVF9TSEFMTE9XX0RFUFRIJywgJzAnKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCdCQl9HSVRfU0hBTExPV19SRVZTJywgJ3YwLjAnKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCdTUkNSRVZfbWFzdGVyJywgJyR7QVVUT1JFVn0nKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCdTUkNSRVZfYV9icmFuY2gnLCAnJHtBVVRPUkVWfScpCisKKyAgICAgICAgc2VsZi5mZXRjaF9zaGFsbG93KHVyaSkKKworICAgICAgICBzZWxmLmFzc2VydFJldkNvdW50KDUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmcyhbJ21hc3RlcicsICdvcmlnaW4vbWFzdGVyJywgJ29yaWdpbi9hX2JyYW5jaCddKQorCisgICAgZGVmIHRlc3Rfc2hhbGxvd19tdWx0aV9vbmVfdXJpX2RlcHRocyhzZWxmKToKKyAgICAgICAgIyBDcmVhdGUgaW5pdGlhbCBnaXQgcmVwbworICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdhJykKKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnYicpCisgICAgICAgIHNlbGYuZ2l0KCdjaGVja291dCAtYiBhX2JyYW5jaCcsIGN3ZD1zZWxmLnNyY2RpcikKKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnYycpCisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2QnKQorICAgICAgICBzZWxmLmdpdCgnY2hlY2tvdXQgbWFzdGVyJywgY3dkPXNlbGYuc3JjZGlyKQorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdlJykKKyAgICAgICAgc2VsZi5naXQoJ21lcmdlIC0tbm8tZmYgLS1uby1lZGl0IGFfYnJhbmNoJywgY3dkPXNlbGYuc3JjZGlyKQorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdmJykKKyAgICAgICAgc2VsZi5hc3NlcnRSZXZDb3VudCg3LCBjd2Q9c2VsZi5zcmNkaXIpCisKKyAgICAgICAgdXJpID0gc2VsZi5kLmdldFZhcignU1JDX1VSSScsIFRydWUpLnNwbGl0KClbMF0KKyAgICAgICAgdXJpID0gJyVzO2JyYW5jaD1tYXN0ZXIsYV9icmFuY2g7bmFtZT1tYXN0ZXIsYV9icmFuY2gnICUgdXJpCisKKyAgICAgICAgc2VsZi5kLnNldFZhcignQkJfR0lUX1NIQUxMT1dfREVQVEgnLCAnMCcpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoJ0JCX0dJVF9TSEFMTE9XX0RFUFRIX21hc3RlcicsICczJykKKyAgICAgICAgc2VsZi5kLnNldFZhcignQkJfR0lUX1NIQUxMT1dfREVQVEhfYV9icmFuY2gnLCAnMScpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoJ1NSQ1JFVl9tYXN0ZXInLCAnJHtBVVRPUkVWfScpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoJ1NSQ1JFVl9hX2JyYW5jaCcsICcke0FVVE9SRVZ9JykKKworICAgICAgICBzZWxmLmZldGNoX3NoYWxsb3codXJpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmV2Q291bnQoNCwgWyctLWFsbCddKQorICAgICAgICBzZWxmLmFzc2VydFJlZnMoWydtYXN0ZXInLCAnb3JpZ2luL21hc3RlcicsICdvcmlnaW4vYV9icmFuY2gnXSkKKworICAgIGRlZiB0ZXN0X3NoYWxsb3dfY2xvbmVfcHJlZmVycmVkX292ZXJfc2hhbGxvdyhzZWxmKToKKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnYScpCisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2InKQorCisgICAgICAgICMgRmV0Y2ggb25jZSB0byBnZW5lcmF0ZSB0aGUgc2hhbGxvdyB0YXJiYWxsCisgICAgICAgIGZldGNoZXIsIHVkID0gc2VsZi5mZXRjaCgpCisgICAgICAgIGFzc2VydCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi5kbGRpciwgdWQubWlycm9ydGFyYmFsbHNbMF0pKQorCisgICAgICAgICMgRmV0Y2ggYW5kIHVucGFjayB3aXRoIGJvdGggdGhlIGNsb25lZGlyIGFuZCBzaGFsbG93IHRhcmJhbGwgYXZhaWxhYmxlCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLmdpdGRpciwgcmVjdXJzZT1UcnVlKQorICAgICAgICBmZXRjaGVyLCB1ZCA9IHNlbGYuZmV0Y2hfYW5kX3VucGFjaygpCisKKyAgICAgICAgIyBUaGUgdW5wYWNrZWQgdHJlZSBzaG91bGQgKm5vdCogYmUgc2hhbGxvdworICAgICAgICBzZWxmLmFzc2VydFJldkNvdW50KDIpCisgICAgICAgIGFzc2VydCBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYuZ2l0ZGlyLCAnLmdpdCcsICdzaGFsbG93JykpCisKKyAgICBkZWYgdGVzdF9zaGFsbG93X21pcnJvcnMoc2VsZik6CisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2EnKQorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdiJykKKworICAgICAgICAjIEZldGNoIG9uY2UgdG8gZ2VuZXJhdGUgdGhlIHNoYWxsb3cgdGFyYmFsbAorICAgICAgICBmZXRjaGVyLCB1ZCA9IHNlbGYuZmV0Y2goKQorICAgICAgICBtaXJyb3J0YXJiYWxsID0gdWQubWlycm9ydGFyYmFsbHNbMF0KKyAgICAgICAgYXNzZXJ0IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLmRsZGlyLCBtaXJyb3J0YXJiYWxsKSkKKworICAgICAgICAjIFNldCB1cCB0aGUgbWlycm9yCisgICAgICAgIG1pcnJvcmRpciA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICdtaXJyb3InKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobWlycm9yZGlyKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCdQUkVNSVJST1JTJywgJ2dpdDovLy4qLy4qIGZpbGU6Ly8lcy9cbicgJSBtaXJyb3JkaXIpCisKKyAgICAgICAgb3MucmVuYW1lKG9zLnBhdGguam9pbihzZWxmLmRsZGlyLCBtaXJyb3J0YXJiYWxsKSwKKyAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihtaXJyb3JkaXIsIG1pcnJvcnRhcmJhbGwpKQorCisgICAgICAgICMgRmV0Y2ggZnJvbSB0aGUgbWlycm9yCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLmRsZGlyLCByZWN1cnNlPVRydWUpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLmdpdGRpciwgcmVjdXJzZT1UcnVlKQorICAgICAgICBzZWxmLmZldGNoX2FuZF91bnBhY2soKQorICAgICAgICBzZWxmLmFzc2VydFJldkNvdW50KDEpCisKKyAgICBkZWYgdGVzdF9zaGFsbG93X2ludmFsaWRfZGVwdGgoc2VsZik6CisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2EnKQorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdiJykKKworICAgICAgICBzZWxmLmQuc2V0VmFyKCdCQl9HSVRfU0hBTExPV19ERVBUSCcsICctMTInKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGJiLmZldGNoMi5GZXRjaEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuZmV0Y2goKQorCisgICAgZGVmIHRlc3Rfc2hhbGxvd19pbnZhbGlkX2RlcHRoX2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2EnKQorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdiJykKKworICAgICAgICBzZWxmLmQuc2V0VmFyKCdCQl9HSVRfU0hBTExPV19ERVBUSF9kZWZhdWx0JywgJy0xMicpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoYmIuZmV0Y2gyLkZldGNoRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5mZXRjaCgpCisKKyAgICBkZWYgdGVzdF9zaGFsbG93X2V4dHJhX3JlZnMoc2VsZik6CisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2EnKQorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdiJykKKyAgICAgICAgc2VsZi5naXQoJ2JyYW5jaCBhX2JyYW5jaCcsIGN3ZD1zZWxmLnNyY2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWZzKFsnbWFzdGVyJywgJ2FfYnJhbmNoJ10sIGN3ZD1zZWxmLnNyY2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRSZXZDb3VudCgyLCBjd2Q9c2VsZi5zcmNkaXIpCisKKyAgICAgICAgc2VsZi5kLnNldFZhcignQkJfR0lUX1NIQUxMT1dfRVhUUkFfUkVGUycsICdyZWZzL2hlYWRzL2FfYnJhbmNoJykKKyAgICAgICAgc2VsZi5mZXRjaF9zaGFsbG93KCkKKworICAgICAgICBzZWxmLmFzc2VydFJlZnMoWydtYXN0ZXInLCAnb3JpZ2luL21hc3RlcicsICdvcmlnaW4vYV9icmFuY2gnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSZXZDb3VudCgxKQorCisgICAgZGVmIHRlc3Rfc2hhbGxvd19leHRyYV9yZWZzX3dpbGRjYXJkKHNlbGYpOgorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdhJykKKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnYicpCisgICAgICAgIHNlbGYuZ2l0KCdicmFuY2ggYV9icmFuY2gnLCBjd2Q9c2VsZi5zcmNkaXIpCisgICAgICAgIHNlbGYuZ2l0KCd0YWcgdjEuMCcsIGN3ZD1zZWxmLnNyY2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWZzKFsnbWFzdGVyJywgJ2FfYnJhbmNoJywgJ3YxLjAnXSwgY3dkPXNlbGYuc3JjZGlyKQorICAgICAgICBzZWxmLmFzc2VydFJldkNvdW50KDIsIGN3ZD1zZWxmLnNyY2RpcikKKworICAgICAgICBzZWxmLmQuc2V0VmFyKCdCQl9HSVRfU0hBTExPV19FWFRSQV9SRUZTJywgJ3JlZnMvdGFncy8qJykKKyAgICAgICAgc2VsZi5mZXRjaF9zaGFsbG93KCkKKworICAgICAgICBzZWxmLmFzc2VydFJlZnMoWydtYXN0ZXInLCAnb3JpZ2luL21hc3RlcicsICd2MS4wJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmV2Q291bnQoMSkKKworICAgIGRlZiB0ZXN0X3NoYWxsb3dfbWlzc2luZ19leHRyYV9yZWZzKHNlbGYpOgorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdhJykKKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnYicpCisKKyAgICAgICAgc2VsZi5kLnNldFZhcignQkJfR0lUX1NIQUxMT1dfRVhUUkFfUkVGUycsICdyZWZzL2hlYWRzL2ZvbycpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoYmIuZmV0Y2gyLkZldGNoRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5mZXRjaCgpCisKKyAgICBkZWYgdGVzdF9zaGFsbG93X21pc3NpbmdfZXh0cmFfcmVmc193aWxkY2FyZChzZWxmKToKKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnYScpCisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2InKQorCisgICAgICAgIHNlbGYuZC5zZXRWYXIoJ0JCX0dJVF9TSEFMTE9XX0VYVFJBX1JFRlMnLCAncmVmcy90YWdzLyonKQorICAgICAgICBzZWxmLmZldGNoKCkKKworICAgIGRlZiB0ZXN0X3NoYWxsb3dfcmVtb3ZlX3JldnMoc2VsZik6CisgICAgICAgICMgQ3JlYXRlIGluaXRpYWwgZ2l0IHJlcG8KKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnYScpCisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2InKQorICAgICAgICBzZWxmLmdpdCgnY2hlY2tvdXQgLWIgYV9icmFuY2gnLCBjd2Q9c2VsZi5zcmNkaXIpCisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2MnKQorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdkJykKKyAgICAgICAgc2VsZi5naXQoJ2NoZWNrb3V0IG1hc3RlcicsIGN3ZD1zZWxmLnNyY2RpcikKKyAgICAgICAgc2VsZi5naXQoJ3RhZyB2MC4wIGFfYnJhbmNoJywgY3dkPXNlbGYuc3JjZGlyKQorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdlJykKKyAgICAgICAgc2VsZi5naXQoJ21lcmdlIC0tbm8tZmYgLS1uby1lZGl0IGFfYnJhbmNoJywgY3dkPXNlbGYuc3JjZGlyKQorICAgICAgICBzZWxmLmdpdCgnYnJhbmNoIC1kIGFfYnJhbmNoJywgY3dkPXNlbGYuc3JjZGlyKQorICAgICAgICBzZWxmLmFkZF9lbXB0eV9maWxlKCdmJykKKyAgICAgICAgc2VsZi5hc3NlcnRSZXZDb3VudCg3LCBjd2Q9c2VsZi5zcmNkaXIpCisKKyAgICAgICAgc2VsZi5kLnNldFZhcignQkJfR0lUX1NIQUxMT1dfREVQVEgnLCAnMCcpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoJ0JCX0dJVF9TSEFMTE9XX1JFVlMnLCAndjAuMCcpCisKKyAgICAgICAgc2VsZi5mZXRjaF9zaGFsbG93KCkKKworICAgICAgICBzZWxmLmFzc2VydFJldkNvdW50KDUpCisKKyAgICBkZWYgdGVzdF9zaGFsbG93X2ludmFsaWRfcmV2cyhzZWxmKToKKyAgICAgICAgc2VsZi5hZGRfZW1wdHlfZmlsZSgnYScpCisgICAgICAgIHNlbGYuYWRkX2VtcHR5X2ZpbGUoJ2InKQorCisgICAgICAgIHNlbGYuZC5zZXRWYXIoJ0JCX0dJVF9TSEFMTE9XX0RFUFRIJywgJzAnKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCdCQl9HSVRfU0hBTExPV19SRVZTJywgJ3YwLjAnKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoYmIuZmV0Y2gyLkZldGNoRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5mZXRjaCgpCisKKyAgICBAc2tpcElmTm9OZXR3b3JrKCkKKyAgICBkZWYgdGVzdF9iaXRiYWtlKHNlbGYpOgorICAgICAgICBzZWxmLmdpdCgncmVtb3RlIGFkZCAtLW1pcnJvcj1mZXRjaCBvcmlnaW4gZ2l0Oi8vZ2l0aHViLmNvbS9vcGVuZW1iZWRkZWQvYml0YmFrZScsIGN3ZD1zZWxmLnNyY2RpcikKKyAgICAgICAgc2VsZi5naXQoJ2NvbmZpZyBjb3JlLmJhcmUgdHJ1ZScsIGN3ZD1zZWxmLnNyY2RpcikKKyAgICAgICAgc2VsZi5naXQoJ2ZldGNoJywgY3dkPXNlbGYuc3JjZGlyKQorCisgICAgICAgIHNlbGYuZC5zZXRWYXIoJ0JCX0dJVF9TSEFMTE9XX0RFUFRIJywgJzAnKQorICAgICAgICAjIE5vdGUgdGhhdCB0aGUgMS4xMC4wIHRhZyBpcyBhbm5vdGF0ZWQsIHNvIHRoaXMgYWxzbyB0ZXN0cworICAgICAgICAjIHJlZmVyZW5jZSBvZiBhbiBhbm5vdGF0ZWQgdnMgdW5hbm5vdGF0ZWQgdGFnCisgICAgICAgIHNlbGYuZC5zZXRWYXIoJ0JCX0dJVF9TSEFMTE9XX1JFVlMnLCAnMS4xMC4wJykKKworICAgICAgICBzZWxmLmZldGNoX3NoYWxsb3coKQorCisgICAgICAgICMgQ29uZmlybSB0aGF0IHRoZSBoaXN0b3J5IG9mIDEuMTAuMCB3YXMgcmVtb3ZlZAorICAgICAgICBvcmlnX3JldnMgPSBsZW4oc2VsZi5naXQoJ3Jldi1saXN0IG1hc3RlcicsIGN3ZD1zZWxmLnNyY2Rpcikuc3BsaXRsaW5lcygpKQorICAgICAgICByZXZzID0gbGVuKHNlbGYuZ2l0KCdyZXYtbGlzdCBtYXN0ZXInKS5zcGxpdGxpbmVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwob3JpZ19yZXZzLCByZXZzKQorICAgICAgICBzZWxmLmFzc2VydFJlZnMoWydtYXN0ZXInLCAnb3JpZ2luL21hc3RlciddKQorICAgICAgICBzZWxmLmFzc2VydFJldkNvdW50KG9yaWdfcmV2cyAtIDE3NTgpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvcGFyc2UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvcGFyc2UucHkKaW5kZXggYWI2Y2E5MC4uOGYxNmJhNCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL3BhcnNlLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9wYXJzZS5weQpAQCAtODMsNyArODMsMjggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldFZhcigiQSIpLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyRmxhZygiQSIsImZsYWciKSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldFZhcigiQiIpLCAiMiIpCi0gICAgICAgIAorCisgICAgZXhwb3J0dGVzdCA9ICIiIgorQSA9ICJhIgorZXhwb3J0IEIgPSAiYiIKK2V4cG9ydCBDCitleHBvcnREID0gImQiCisiIiIKKworICAgIGRlZiB0ZXN0X3BhcnNlX2V4cG9ydHMoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLnBhcnNlaGVscGVyKHNlbGYuZXhwb3J0dGVzdCkKKyAgICAgICAgZCA9IGJiLnBhcnNlLmhhbmRsZShmLm5hbWUsIHNlbGYuZClbJyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXRWYXIoIkEiKSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShkLmdldFZhckZsYWcoIkEiLCAiZXhwb3J0IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXRWYXIoIkIiKSwgImIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyRmxhZygiQiIsICJleHBvcnQiKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZC5nZXRWYXIoIkMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldFZhckZsYWcoIkMiLCAiZXhwb3J0IiksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGQuZ2V0VmFyKCJEIikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGQuZ2V0VmFyRmxhZygiRCIsICJleHBvcnQiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldFZhcigiZXhwb3J0RCIpLCAiZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGQuZ2V0VmFyRmxhZygiZXhwb3J0RCIsICJleHBvcnQiKSkKKwogCiAgICAgb3ZlcnJpZGV0ZXN0ID0gIiIiCiBSUkVDT01NRU5EU18ke1BOfSA9ICJhIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3RpbmZvaWwucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGluZm9pbC5weQppbmRleCA5MjgzMzNhLi5mYTk1ZjYzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGluZm9pbC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGluZm9pbC5weQpAQCAtMiw2ICsyLDcgQEAKICMKICMgQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgSW50ZWwgQ29ycG9yYXRpb24KICMgQ29weXJpZ2h0IChDKSAyMDExIE1lbnRvciBHcmFwaGljcyBDb3Jwb3JhdGlvbgorIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMiBSaWNoYXJkIFB1cmRpZQogIwogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtNTQsNiArNTUsNyBAQAogICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBydW5fY29tbWFuZCBmYWlscyIiIgogCiBjbGFzcyBUaW5mb2lsRGF0YVN0b3JlQ29ubmVjdG9yOgorICAgICIiIkNvbm5lY3RvciBvYmplY3QgdXNlZCB0byBlbmFibGUgYWNjZXNzIHRvIGRhdGFzdG9yZSBvYmplY3RzIHZpYSB0aW5mb2lsIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgdGluZm9pbCwgZHNpbmRleCk6CiAgICAgICAgIHNlbGYudGluZm9pbCA9IHRpbmZvaWwKQEAgLTE3Miw2ICsxNzQsMTQgQEAKICAgICAgICAgICAgICAgICBhdHRydmFsdWUgPSBzZWxmLnRpbmZvaWwucnVuX2NvbW1hbmQoJ2dldEJiRmlsZVByaW9yaXR5Jykgb3Ige30KICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAncGtnX2RwJzoKICAgICAgICAgICAgICAgICBhdHRydmFsdWUgPSBzZWxmLnRpbmZvaWwucnVuX2NvbW1hbmQoJ2dldERlZmF1bHRQcmVmZXJlbmNlJykgb3Ige30KKyAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAnZm5fcHJvdmlkZXMnOgorICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZSA9IHNlbGYudGluZm9pbC5ydW5fY29tbWFuZCgnZ2V0UmVjaXBlUHJvdmlkZXMnKSBvciB7fQorICAgICAgICAgICAgZWxpZiBuYW1lID09ICdwYWNrYWdlcyc6CisgICAgICAgICAgICAgICAgYXR0cnZhbHVlID0gc2VsZi50aW5mb2lsLnJ1bl9jb21tYW5kKCdnZXRSZWNpcGVQYWNrYWdlcycpIG9yIHt9CisgICAgICAgICAgICBlbGlmIG5hbWUgPT0gJ3BhY2thZ2VzX2R5bmFtaWMnOgorICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZSA9IHNlbGYudGluZm9pbC5ydW5fY29tbWFuZCgnZ2V0UmVjaXBlUGFja2FnZXNEeW5hbWljJykgb3Ige30KKyAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAncnByb3ZpZGVycyc6CisgICAgICAgICAgICAgICAgYXR0cnZhbHVlID0gc2VsZi50aW5mb2lsLnJ1bl9jb21tYW5kKCdnZXRSUHJvdmlkZXJzJykgb3Ige30KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIiVzIGluc3RhbmNlIGhhcyBubyBhdHRyaWJ1dGUgJyVzJyIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIG5hbWUpKQogCkBAIC0yMDgsMTkgKzIxOCwxMTkgQEAKICAgICAgICAgcmV0dXJuIHNlbGYudGluZm9pbC5maW5kX2Jlc3RfcHJvdmlkZXIocG4pCiAKIAorY2xhc3MgVGluZm9pbFJlY2lwZUluZm86CisgICAgIiIiCisgICAgUHJvdmlkZXMgYSBjb252ZW5pZW50IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjYWNoZWQgaW5mb3JtYXRpb24gZm9yIGEgc2luZ2xlIHJlY2lwZS4KKyAgICBTb21lIGF0dHJpYnV0ZXMgYXJlIHNldCBvbiBjb25zdHJ1Y3Rpb24sIG90aGVycyBhcmUgcmVhZCBvbi1kZW1hbmQgKHdoaWNoIGludGVybmFsbHkKKyAgICBtYXkgcmVzdWx0IGluIGEgcmVtb3RlIHByb2NlZHVyZSBjYWxsIHRvIHRoZSBiaXRiYWtlIHNlcnZlciB0aGUgZmlyc3QgdGltZSkuCisgICAgTm90ZSB0aGF0IG9ubHkgaW5mb3JtYXRpb24gd2hpY2ggaXMgY2FjaGVkIGlzIGF2YWlsYWJsZSB0aHJvdWdoIHRoaXMgb2JqZWN0IC0gaWYKKyAgICB5b3UgbmVlZCBvdGhlciB2YXJpYWJsZSB2YWx1ZXMgeW91IHdpbGwgbmVlZCB0byBwYXJzZSB0aGUgcmVjaXBlIHVzaW5nCisgICAgVGluZm9pbC5wYXJzZV9yZWNpcGUoKS4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjaXBlY2FjaGUsIGQsIHBuLCBmbiwgZm5zKToKKyAgICAgICAgc2VsZi5fcmVjaXBlY2FjaGUgPSByZWNpcGVjYWNoZQorICAgICAgICBzZWxmLl9kID0gZAorICAgICAgICBzZWxmLnBuID0gcG4KKyAgICAgICAgc2VsZi5mbiA9IGZuCisgICAgICAgIHNlbGYuZm5zID0gZm5zCisgICAgICAgIHNlbGYuaW5oZXJpdF9maWxlcyA9IHJlY2lwZWNhY2hlLmluaGVyaXRzW2ZuXQorICAgICAgICBzZWxmLmRlcGVuZHMgPSByZWNpcGVjYWNoZS5kZXBzW2ZuXQorICAgICAgICAoc2VsZi5wZSwgc2VsZi5wdiwgc2VsZi5wcikgPSByZWNpcGVjYWNoZS5wa2dfcGVwdnByW2ZuXQorICAgICAgICBzZWxmLl9jYWNoZWRfcGFja2FnZXMgPSBOb25lCisgICAgICAgIHNlbGYuX2NhY2hlZF9ycHJvdmlkZXMgPSBOb25lCisgICAgICAgIHNlbGYuX2NhY2hlZF9wYWNrYWdlc19keW5hbWljID0gTm9uZQorCisgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBuYW1lID09ICdhbHRlcm5hdGVzJzoKKyAgICAgICAgICAgIHJldHVybiBbeCBmb3IgeCBpbiBzZWxmLmZucyBpZiB4ICE9IHNlbGYuZm5dCisgICAgICAgIGVsaWYgbmFtZSA9PSAncmRlcGVuZHMnOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlY2lwZWNhY2hlLnJ1bmRlcHNbc2VsZi5mbl0KKyAgICAgICAgZWxpZiBuYW1lID09ICdycmVjb21tZW5kcyc6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVjaXBlY2FjaGUucnVucmVjc1tzZWxmLmZuXQorICAgICAgICBlbGlmIG5hbWUgPT0gJ3Byb3ZpZGVzJzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWNpcGVjYWNoZS5mbl9wcm92aWRlc1tzZWxmLmZuXQorICAgICAgICBlbGlmIG5hbWUgPT0gJ3BhY2thZ2VzJzoKKyAgICAgICAgICAgIGlmIHNlbGYuX2NhY2hlZF9wYWNrYWdlcyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlZF9wYWNrYWdlcyA9IFtdCisgICAgICAgICAgICAgICAgZm9yIHBrZywgZm5zIGluIHNlbGYuX3JlY2lwZWNhY2hlLnBhY2thZ2VzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZm4gaW4gZm5zOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FjaGVkX3BhY2thZ2VzLmFwcGVuZChwa2cpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY2FjaGVkX3BhY2thZ2VzCisgICAgICAgIGVsaWYgbmFtZSA9PSAncGFja2FnZXNfZHluYW1pYyc6CisgICAgICAgICAgICBpZiBzZWxmLl9jYWNoZWRfcGFja2FnZXNfZHluYW1pYyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlZF9wYWNrYWdlc19keW5hbWljID0gW10KKyAgICAgICAgICAgICAgICBmb3IgcGtnLCBmbnMgaW4gc2VsZi5fcmVjaXBlY2FjaGUucGFja2FnZXNfZHluYW1pYy5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmZuIGluIGZuczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlZF9wYWNrYWdlc19keW5hbWljLmFwcGVuZChwa2cpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY2FjaGVkX3BhY2thZ2VzX2R5bmFtaWMKKyAgICAgICAgZWxpZiBuYW1lID09ICdycHJvdmlkZXMnOgorICAgICAgICAgICAgaWYgc2VsZi5fY2FjaGVkX3Jwcm92aWRlcyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlZF9ycHJvdmlkZXMgPSBbXQorICAgICAgICAgICAgICAgIGZvciBwa2csIGZucyBpbiBzZWxmLl9yZWNpcGVjYWNoZS5ycHJvdmlkZXJzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZm4gaW4gZm5zOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FjaGVkX3Jwcm92aWRlcy5hcHBlbmQocGtnKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NhY2hlZF9ycHJvdmlkZXMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCIlcyBpbnN0YW5jZSBoYXMgbm8gYXR0cmlidXRlICclcyciICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBuYW1lKSkKKyAgICBkZWYgaW5oZXJpdHMoc2VsZiwgb25seV9yZWNpcGU9RmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgR2V0IHRoZSBpbmhlcml0ZWQgY2xhc3NlcyBmb3IgYSByZWNpcGUuIFJldHVybnMgdGhlIGNsYXNzIG5hbWVzIG9ubHkuCisgICAgICAgIFBhcmFtZXRlcnM6CisgICAgICAgICAgICBvbmx5X3JlY2lwZTogVHJ1ZSB0byByZXR1cm4gb25seSB0aGUgY2xhc3NlcyBpbmhlcml0ZWQgYnkgdGhlIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICAgICAgIGl0c2VsZiwgRmFsc2UgdG8gcmV0dXJuIGFsbCBjbGFzc2VzIGluaGVyaXRlZCB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29udGV4dCBmb3IgdGhlIHJlY2lwZSAod2hpY2ggaW5jbHVkZXMgZ2xvYmFsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0ZWQgY2xhc3NlcykuCisgICAgICAgICIiIgorICAgICAgICBpZiBvbmx5X3JlY2lwZToKKyAgICAgICAgICAgIGdsb2JhbF9pbmhlcml0ID0gW3ggZm9yIHggaW4gKHNlbGYuX2QuZ2V0VmFyKCdCQklOQ0xVREVEJykgb3IgJycpLnNwbGl0KCkgaWYgeC5lbmRzd2l0aCgnLmJiY2xhc3MnKV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGdsb2JhbF9pbmhlcml0ID0gW10KKyAgICAgICAgZm9yIGNsc2ZpbGUgaW4gc2VsZi5pbmhlcml0X2ZpbGVzOgorICAgICAgICAgICAgaWYgb25seV9yZWNpcGUgYW5kIGNsc2ZpbGUgaW4gZ2xvYmFsX2luaGVyaXQ6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGNsc25hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoY2xzZmlsZSkpWzBdCisgICAgICAgICAgICB5aWVsZCBjbHNuYW1lCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAnJXMnICUgc2VsZi5wbgorCisKIGNsYXNzIFRpbmZvaWw6CisgICAgIiIiCisgICAgVGluZm9pbCAtIGFuIEFQSSBmb3Igc2NyaXB0cyBhbmQgdXRpbGl0aWVzIHRvIHF1ZXJ5CisgICAgQml0QmFrZSBpbnRlcm5hbHMgYW5kIHBlcmZvcm0gYnVpbGQgb3BlcmF0aW9ucy4KKyAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRwdXQ9c3lzLnN0ZG91dCwgdHJhY2tpbmc9RmFsc2UsIHNldHVwX2xvZ2dpbmc9VHJ1ZSk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgYSBuZXcgdGluZm9pbCBvYmplY3QuCisgICAgICAgIFBhcmFtZXRlcnM6CisgICAgICAgICAgICBvdXRwdXQ6IHNwZWNpZmllcyB3aGVyZSBjb25zb2xlIG91dHB1dCBzaG91bGQgYmUgc2VudC4gRGVmYXVsdHMKKyAgICAgICAgICAgICAgICAgICAgdG8gc3lzLnN0ZG91dC4KKyAgICAgICAgICAgIHRyYWNraW5nOiBUcnVlIHRvIGVuYWJsZSB2YXJpYWJsZSBoaXN0b3J5IHRyYWNraW5nLCBGYWxzZSB0bworICAgICAgICAgICAgICAgICAgICBkaXNhYmxlIGl0IChkZWZhdWx0KS4gRW5hYmxpbmcgdGhpcyBoYXMgYSBtaW5vcgorICAgICAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZSBpbXBhY3Qgc28gdHlwaWNhbGx5IGl0IGlzbid0IGVuYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgdW5sZXNzIHlvdSBuZWVkIHRvIHF1ZXJ5IHZhcmlhYmxlIGhpc3RvcnkuCisgICAgICAgICAgICBzZXR1cF9sb2dnaW5nOiBUcnVlIHRvIHNldHVwIGEgbG9nZ2VyIHNvIHRoYXQgdGhpbmdzIGxpa2UKKyAgICAgICAgICAgICAgICAgICAgYmIud2FybigpIHdpbGwgd29yayBpbW1lZGlhdGVseSBhbmQgdGltZW91dCB3YXJuaW5ncworICAgICAgICAgICAgICAgICAgICBhcmUgdmlzaWJsZTsgRmFsc2UgdG8gbGV0IEJpdEJha2UgZG8gdGhpcyBpdHNlbGYuCisgICAgICAgICIiIgogICAgICAgICBzZWxmLmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdCaXRCYWtlJykKICAgICAgICAgc2VsZi5jb25maWdfZGF0YSA9IE5vbmUKICAgICAgICAgc2VsZi5jb29rZXIgPSBOb25lCiAgICAgICAgIHNlbGYudHJhY2tpbmcgPSB0cmFja2luZwogICAgICAgICBzZWxmLnVpX21vZHVsZSA9IE5vbmUKICAgICAgICAgc2VsZi5zZXJ2ZXJfY29ubmVjdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5yZWNpcGVzX3BhcnNlZCA9IEZhbHNlCisgICAgICAgIHNlbGYucXVpZXQgPSAwCisgICAgICAgIHNlbGYub2xkaGFuZGxlcnMgPSBzZWxmLmxvZ2dlci5oYW5kbGVyc1s6XQogICAgICAgICBpZiBzZXR1cF9sb2dnaW5nOgogICAgICAgICAgICAgIyBUaGlzIGlzIHRoZSAqY2xpZW50LXNpZGUqIGxvZ2dlciwgbm90aGluZyB0byBkbyB3aXRoCiAgICAgICAgICAgICAjIGxvZ2dpbmcgbWVzc2FnZXMgZnJvbSB0aGUgc2VydmVyCiAgICAgICAgICAgICBiYi5tc2cubG9nZ2VyX2NyZWF0ZSgnQml0QmFrZScsIG91dHB1dCkKKyAgICAgICAgICAgIHNlbGYubG9jYWxoYW5kbGVycyA9IFtdCisgICAgICAgICAgICBmb3IgaGFuZGxlciBpbiBzZWxmLmxvZ2dlci5oYW5kbGVyczoKKyAgICAgICAgICAgICAgICBpZiBoYW5kbGVyIG5vdCBpbiBzZWxmLm9sZGhhbmRsZXJzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvY2FsaGFuZGxlcnMuYXBwZW5kKGhhbmRsZXIpCiAKICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZgpAQCAtMjI4LDE5ICszMzgsNjEgQEAKICAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CiAgICAgICAgIHNlbGYuc2h1dGRvd24oKQogCi0gICAgZGVmIHByZXBhcmUoc2VsZiwgY29uZmlnX29ubHk9RmFsc2UsIGNvbmZpZ19wYXJhbXM9Tm9uZSwgcXVpZXQ9MCk6CisgICAgZGVmIHByZXBhcmUoc2VsZiwgY29uZmlnX29ubHk9RmFsc2UsIGNvbmZpZ19wYXJhbXM9Tm9uZSwgcXVpZXQ9MCwgZXh0cmFfZmVhdHVyZXM9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlcyB0aGUgdW5kZXJseWluZyBCaXRCYWtlIHN5c3RlbSB0byBiZSB1c2VkIHZpYSB0aW5mb2lsLgorICAgICAgICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHByaW9yIHRvIGNhbGxpbmcgYW55IG9mIHRoZSBvdGhlcgorICAgICAgICBmdW5jdGlvbnMgaW4gdGhlIEFQSS4KKyAgICAgICAgTk9URTogaWYgeW91IGNhbGwgcHJlcGFyZSgpIHlvdSBtdXN0IGFic29sdXRlbHkgY2FsbCBzaHV0ZG93bigpCisgICAgICAgIGJlZm9yZSB5b3VyIGNvZGUgdGVybWluYXRlcy4gWW91IGNhbiB1c2UgYSAid2l0aCIgYmxvY2sgdG8gZW5zdXJlCisgICAgICAgIHRoaXMgaGFwcGVucyBlLmcuCisKKyAgICAgICAgICAgIHdpdGggYmIudGluZm9pbC5UaW5mb2lsKCkgYXMgdGluZm9pbDoKKyAgICAgICAgICAgICAgICB0aW5mb2lsLnByZXBhcmUoKQorICAgICAgICAgICAgICAgIC4uLgorCisgICAgICAgIFBhcmFtZXRlcnM6CisgICAgICAgICAgICBjb25maWdfb25seTogVHJ1ZSB0byByZWFkIG9ubHkgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIG5vdCBsb2FkCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY2FjaGUgLyBwYXJzZSByZWNpcGVzLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UganVzdAorICAgICAgICAgICAgICAgICAgICAgICAgd2FudCB0byBxdWVyeSB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZSBhdCB0aGUgZ2xvYmFsCisgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCBvciB5b3Ugd2FudCB0byBkbyBhbnl0aGluZyBlbHNlIHRoYXQgZG9lc24ndAorICAgICAgICAgICAgICAgICAgICAgICAgaW52b2x2ZSBrbm93aW5nIGFueXRoaW5nIGFib3V0IHRoZSByZWNpcGVzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCBjb25maWd1cmF0aW9uLiBGYWxzZSBsb2FkcyB0aGUgY2FjaGUgLyBwYXJzZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMuCisgICAgICAgICAgICBjb25maWdfcGFyYW1zOiBvcHRpb25hbGx5IHNwZWNpZnkgeW91ciBvd24gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy4gSWYgbm90IHNwZWNpZmllZCBhbiBpbnN0YW5jZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgVGluZm9pbENvbmZpZ1BhcmFtZXRlcnMgd2lsbCBiZSBjcmVhdGVkIGludGVybmFsbHkuCisgICAgICAgICAgICBxdWlldDogICAgICBxdWlldCBsZXZlbCBjb250cm9sbGluZyBjb25zb2xlIG91dHB1dCAtIGVxdWl2YWxlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJpdGJha2UncyAtcS8tLXF1aWV0IG9wdGlvbi4gRGVmYXVsdCBvZiAwIGdpdmVzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2FtZSBvdXRwdXQgbGV2ZWwgYXMgbm9ybWFsIGJpdGJha2UgZXhlY3V0aW9uLgorICAgICAgICAgICAgZXh0cmFfZmVhdHVyZXM6IGV4dHJhIGZlYXR1cmVzIHRvIGJlIGFkZGVkIHRvIHRoZSBmZWF0dXJlCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQgcmVxdWVzdGVkIGZyb20gdGhlIHNlcnZlci4gU2VlCisgICAgICAgICAgICAgICAgICAgICAgICBDb29rZXJGZWF0dXJlcy5fZmVhdHVyZV9saXN0IGZvciBwb3NzaWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnF1aWV0ID0gcXVpZXQKKwogICAgICAgICBpZiBzZWxmLnRyYWNraW5nOgogICAgICAgICAgICAgZXh0cmFmZWF0dXJlcyA9IFtiYi5jb29rZXIuQ29va2VyRmVhdHVyZXMuQkFTRURBVEFTVE9SRV9UUkFDS0lOR10KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGV4dHJhZmVhdHVyZXMgPSBbXQogCisgICAgICAgIGlmIGV4dHJhX2ZlYXR1cmVzOgorICAgICAgICAgICAgZXh0cmFmZWF0dXJlcyArPSBleHRyYV9mZWF0dXJlcworCiAgICAgICAgIGlmIG5vdCBjb25maWdfcGFyYW1zOgogICAgICAgICAgICAgY29uZmlnX3BhcmFtcyA9IFRpbmZvaWxDb25maWdQYXJhbWV0ZXJzKGNvbmZpZ19vbmx5PWNvbmZpZ19vbmx5LCBxdWlldD1xdWlldCkKIAogICAgICAgICBjb29rZXJjb25maWcgPSBDb29rZXJDb25maWd1cmF0aW9uKCkKICAgICAgICAgY29va2VyY29uZmlnLnNldENvbmZpZ1BhcmFtZXRlcnMoY29uZmlnX3BhcmFtcykKIAotICAgICAgICBzZXJ2ZXIsIHNlbGYuc2VydmVyX2Nvbm5lY3Rpb24sIHVpX21vZHVsZSA9IHNldHVwX2JpdGJha2UoY29uZmlnX3BhcmFtcywKKyAgICAgICAgaWYgbm90IGNvbmZpZ19vbmx5OgorICAgICAgICAgICAgIyBEaXNhYmxlIGxvY2FsIGxvZ2dlcnMgYmVjYXVzZSB0aGUgVUkgbW9kdWxlIGlzIGdvaW5nIHRvIHNldCB1cCBpdHMgb3duCisgICAgICAgICAgICBmb3IgaGFuZGxlciBpbiBzZWxmLmxvY2FsaGFuZGxlcnM6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuaGFuZGxlcnMucmVtb3ZlKGhhbmRsZXIpCisgICAgICAgICAgICBzZWxmLmxvY2FsaGFuZGxlcnMgPSBbXQorCisgICAgICAgIHNlbGYuc2VydmVyX2Nvbm5lY3Rpb24sIHVpX21vZHVsZSA9IHNldHVwX2JpdGJha2UoY29uZmlnX3BhcmFtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZXJjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFmZWF0dXJlcykKIApAQCAtMjY2LDYgKzQxOCw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5ydW5fY29tbWFuZCgncGFyc2VDb25maWd1cmF0aW9uJykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5ydW5fYWN0aW9ucyhjb25maWdfcGFyYW1zKQorICAgICAgICAgICAgICAgIHNlbGYucmVjaXBlc19wYXJzZWQgPSBUcnVlCiAKICAgICAgICAgICAgIHNlbGYuY29uZmlnX2RhdGEgPSBiYi5kYXRhLmluaXQoKQogICAgICAgICAgICAgY29ubmVjdG9yID0gVGluZm9pbERhdGFTdG9yZUNvbm5lY3RvcihzZWxmLCBOb25lKQpAQCAtMjg1LDcgKzQzOCwxMyBAQAogCiAgICAgZGVmIHBhcnNlUmVjaXBlcyhzZWxmKToKICAgICAgICAgIiIiCi0gICAgICAgIEZvcmNlIGEgcGFyc2Ugb2YgYWxsIHJlY2lwZXMuIE5vcm1hbGx5IHlvdSBzaG91bGQgc3BlY2lmeQorICAgICAgICBMZWdhY3kgZnVuY3Rpb24gLSB1c2UgcGFyc2VfcmVjaXBlcygpIGluc3RlYWQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnBhcnNlX3JlY2lwZXMoKQorCisgICAgZGVmIHBhcnNlX3JlY2lwZXMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBMb2FkIGluZm9ybWF0aW9uIG9uIGFsbCByZWNpcGVzLiBOb3JtYWxseSB5b3Ugc2hvdWxkIHNwZWNpZnkKICAgICAgICAgY29uZmlnX29ubHk9RmFsc2Ugd2hlbiBjYWxsaW5nIHByZXBhcmUoKSBpbnN0ZWFkIG9mIHVzaW5nIHRoaXMKICAgICAgICAgZnVuY3Rpb247IHRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgZm9yIHNpdHVhdGlvbnMgd2hlcmUgeW91IG5lZWQKICAgICAgICAgdG8gaW5pdGlhbGlzZSBUaW5mb2lsIGFuZCB1c2UgaXQgd2l0aCBjb25maWdfb25seT1UcnVlIGZpcnN0IGFuZApAQCAtMjkzLDYgKzQ1Miw3IEBACiAgICAgICAgICIiIgogICAgICAgICBjb25maWdfcGFyYW1zID0gVGluZm9pbENvbmZpZ1BhcmFtZXRlcnMoY29uZmlnX29ubHk9RmFsc2UpCiAgICAgICAgIHNlbGYucnVuX2FjdGlvbnMoY29uZmlnX3BhcmFtcykKKyAgICAgICAgc2VsZi5yZWNpcGVzX3BhcnNlZCA9IFRydWUKIAogICAgIGRlZiBydW5fY29tbWFuZChzZWxmLCBjb21tYW5kLCAqcGFyYW1zKToKICAgICAgICAgIiIiCkBAIC0zMzksOSArNDk5LDE2IEBACiAgICAgICAgIHJldHVybiBzZWxmLnNlcnZlcl9jb25uZWN0aW9uLmV2ZW50cy53YWl0RXZlbnQodGltZW91dCkKIAogICAgIGRlZiBnZXRfb3ZlcmxheWVkX3JlY2lwZXMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBGaW5kIHJlY2lwZXMgd2hpY2ggYXJlIG92ZXJsYXllZCAoaS5lLiB3aGVyZSByZWNpcGVzIGV4aXN0IGluIG11bHRpcGxlIGxheWVycykKKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBkZWZhdWx0ZGljdChsaXN0LCBzZWxmLnJ1bl9jb21tYW5kKCdnZXRPdmVybGF5ZWRSZWNpcGVzJykpCiAKICAgICBkZWYgZ2V0X3NraXBwZWRfcmVjaXBlcyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgcmVjaXBlcyB3aGljaCB3ZXJlIHNraXBwZWQgKGkuZS4gU2tpcFJlY2lwZSB3YXMgcmFpc2VkCisgICAgICAgIGR1cmluZyBwYXJzaW5nKS4KKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBPcmRlcmVkRGljdChzZWxmLnJ1bl9jb21tYW5kKCdnZXRTa2lwcGVkUmVjaXBlcycpKQogCiAgICAgZGVmIGdldF9hbGxfcHJvdmlkZXJzKHNlbGYpOgpAQCAtMzc0LDggKzU0MSw3NyBAQAogICAgICAgICByZXR1cm4gYmVzdFszXQogCiAgICAgZGVmIGdldF9maWxlX2FwcGVuZHMoc2VsZiwgZm4pOgorICAgICAgICAiIiIKKyAgICAgICAgRmluZCB0aGUgYmJhcHBlbmRzIGZvciBhIHJlY2lwZSBmaWxlCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi5ydW5fY29tbWFuZCgnZ2V0RmlsZUFwcGVuZHMnLCBmbikKIAorICAgIGRlZiBhbGxfcmVjaXBlcyhzZWxmLCBtYz0nJywgc29ydD1UcnVlKToKKyAgICAgICAgIiIiCisgICAgICAgIEVuYWJsZSBpdGVyYXRpbmcgb3ZlciBhbGwgcmVjaXBlcyBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgorICAgICAgICBSZXR1cm5zIGFuIGl0ZXJhdG9yIG92ZXIgVGluZm9pbFJlY2lwZUluZm8gb2JqZWN0cyBjcmVhdGVkIG9uIGRlbWFuZC4KKyAgICAgICAgUGFyYW1ldGVyczoKKyAgICAgICAgICAgIG1jOiBUaGUgbXVsdGljb25maWcsIGRlZmF1bHQgb2YgJycgdXNlcyB0aGUgbWFpbiBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgc29ydDogVHJ1ZSB0byBzb3J0IHJlY2lwZXMgYWxwaGFiZXRpY2FsbHkgKGRlZmF1bHQpLCBGYWxzZSBvdGhlcndpc2UKKyAgICAgICAgIiIiCisgICAgICAgIHJlY2lwZWNhY2hlID0gc2VsZi5jb29rZXIucmVjaXBlY2FjaGVzW21jXQorICAgICAgICBpZiBzb3J0OgorICAgICAgICAgICAgcmVjaXBlcyA9IHNvcnRlZChyZWNpcGVjYWNoZS5wa2dfcG4uaXRlbXMoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlY2lwZXMgPSByZWNpcGVjYWNoZS5wa2dfcG4uaXRlbXMoKQorICAgICAgICBmb3IgcG4sIGZucyBpbiByZWNpcGVzOgorICAgICAgICAgICAgcHJvdiA9IHNlbGYuZmluZF9iZXN0X3Byb3ZpZGVyKHBuKQorICAgICAgICAgICAgcmVjaXBlID0gVGluZm9pbFJlY2lwZUluZm8ocmVjaXBlY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ19kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG49cG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbj1wcm92WzNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5zPWZucykKKyAgICAgICAgICAgIHlpZWxkIHJlY2lwZQorCisgICAgZGVmIGFsbF9yZWNpcGVfZmlsZXMoc2VsZiwgbWM9JycsIHZhcmlhbnRzPVRydWUsIHByZWZlcnJlZF9vbmx5PUZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIEVuYWJsZSBpdGVyYXRpbmcgb3ZlciBhbGwgcmVjaXBlIGZpbGVzIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisgICAgICAgIFJldHVybnMgYW4gaXRlcmF0b3Igb3ZlciBmaWxlIHBhdGhzLgorICAgICAgICBQYXJhbWV0ZXJzOgorICAgICAgICAgICAgbWM6IFRoZSBtdWx0aWNvbmZpZywgZGVmYXVsdCBvZiAnJyB1c2VzIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICB2YXJpYW50czogVHJ1ZSB0byBpbmNsdWRlIHZhcmlhbnRzIG9mIHJlY2lwZXMgY3JlYXRlZCB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgICAgQkJDTEFTU0VYVEVORCAoZGVmYXVsdCkgb3IgRmFsc2UgdG8gZXhjbHVkZSB0aGVtCisgICAgICAgICAgICBwcmVmZXJyZWRfb25seTogVHJ1ZSB0byBpbmNsdWRlIG9ubHkgdGhlIHByZWZlcnJlZCByZWNpcGUgd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSBleGlzdCBwcm92aWRpbmcgdGhlIHNhbWUgUE4sIEZhbHNlIHRvIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgICBhbGwgcmVjaXBlcworICAgICAgICAiIiIKKyAgICAgICAgcmVjaXBlY2FjaGUgPSBzZWxmLmNvb2tlci5yZWNpcGVjYWNoZXNbbWNdCisgICAgICAgIGlmIHByZWZlcnJlZF9vbmx5OgorICAgICAgICAgICAgZmlsZXMgPSBbXQorICAgICAgICAgICAgZm9yIHBuIGluIHJlY2lwZWNhY2hlLnBrZ19wbi5rZXlzKCk6CisgICAgICAgICAgICAgICAgcHJvdiA9IHNlbGYuZmluZF9iZXN0X3Byb3ZpZGVyKHBuKQorICAgICAgICAgICAgICAgIGZpbGVzLmFwcGVuZChwcm92WzNdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmlsZXMgPSByZWNpcGVjYWNoZS5wa2dfZm4ua2V5cygpCisgICAgICAgIGZvciBmbiBpbiBzb3J0ZWQoZmlsZXMpOgorICAgICAgICAgICAgaWYgbm90IHZhcmlhbnRzIGFuZCBmbi5zdGFydHN3aXRoKCd2aXJ0dWFsOicpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB5aWVsZCBmbgorCisKKyAgICBkZWYgZ2V0X3JlY2lwZV9pbmZvKHNlbGYsIHBuLCBtYz0nJyk6CisgICAgICAgICIiIgorICAgICAgICBHZXQgaW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyByZWNpcGUgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBieSBuYW1lIChQTikuCisgICAgICAgIFJldHVybnMgYSBUaW5mb2lsUmVjaXBlSW5mbyBvYmplY3QgY3JlYXRlZCBvbiBkZW1hbmQuCisgICAgICAgIFBhcmFtZXRlcnM6CisgICAgICAgICAgICBtYzogVGhlIG11bHRpY29uZmlnLCBkZWZhdWx0IG9mICcnIHVzZXMgdGhlIG1haW4gY29uZmlndXJhdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHJlY2lwZWNhY2hlID0gc2VsZi5jb29rZXIucmVjaXBlY2FjaGVzW21jXQorICAgICAgICBwcm92ID0gc2VsZi5maW5kX2Jlc3RfcHJvdmlkZXIocG4pCisgICAgICAgIGZuID0gcHJvdlszXQorICAgICAgICBhY3R1YWxfcG4gPSByZWNpcGVjYWNoZS5wa2dfZm5bZm5dCisgICAgICAgIHJlY2lwZSA9IFRpbmZvaWxSZWNpcGVJbmZvKHJlY2lwZWNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWdfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBuPWFjdHVhbF9wbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuPWZuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5zPXJlY2lwZWNhY2hlLnBrZ19wblthY3R1YWxfcG5dKQorICAgICAgICByZXR1cm4gcmVjaXBlCisKICAgICBkZWYgcGFyc2VfcmVjaXBlKHNlbGYsIHBuKToKICAgICAgICAgIiIiCiAgICAgICAgIFBhcnNlIHRoZSBzcGVjaWZpZWQgcmVjaXBlIGFuZCByZXR1cm4gYSBkYXRhc3RvcmUgb2JqZWN0CkBAIC0zOTksMjYgKzYzNSwxOTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IGNvbmZpZ19kYXRhIHRoZW4geW91IGNhbm5vdCB1c2UgYSB2aXJ0dWFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNhdGlvbiBmb3IgZm4uCiAgICAgICAgICIiIgotICAgICAgICBpZiBhcHBlbmRzIGFuZCBhcHBlbmRsaXN0ID09IFtdOgotICAgICAgICAgICAgYXBwZW5kcyA9IEZhbHNlCi0gICAgICAgIGlmIGNvbmZpZ19kYXRhOgotICAgICAgICAgICAgZGN0ciA9IGJiLnJlbW90ZWRhdGEuUmVtb3RlRGF0YXN0b3Jlcy50cmFuc21pdF9kYXRhc3RvcmUoY29uZmlnX2RhdGEpCi0gICAgICAgICAgICBkc2NvbiA9IHNlbGYucnVuX2NvbW1hbmQoJ3BhcnNlUmVjaXBlRmlsZScsIGZuLCBhcHBlbmRzLCBhcHBlbmRsaXN0LCBkY3RyKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZHNjb24gPSBzZWxmLnJ1bl9jb21tYW5kKCdwYXJzZVJlY2lwZUZpbGUnLCBmbiwgYXBwZW5kcywgYXBwZW5kbGlzdCkKLSAgICAgICAgaWYgZHNjb246Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVjb252ZXJ0X3R5cGUoZHNjb24sICdEYXRhU3RvcmVDb25uZWN0aW9uSGFuZGxlJykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGlmIHNlbGYudHJhY2tpbmc6CisgICAgICAgICAgICAjIEVuYWJsZSBoaXN0b3J5IHRyYWNraW5nIGp1c3QgZm9yIHRoZSBwYXJzZSBvcGVyYXRpb24KKyAgICAgICAgICAgIHNlbGYucnVuX2NvbW1hbmQoJ2VuYWJsZURhdGFUcmFja2luZycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGFwcGVuZHMgYW5kIGFwcGVuZGxpc3QgPT0gW106CisgICAgICAgICAgICAgICAgYXBwZW5kcyA9IEZhbHNlCisgICAgICAgICAgICBpZiBjb25maWdfZGF0YToKKyAgICAgICAgICAgICAgICBkY3RyID0gYmIucmVtb3RlZGF0YS5SZW1vdGVEYXRhc3RvcmVzLnRyYW5zbWl0X2RhdGFzdG9yZShjb25maWdfZGF0YSkKKyAgICAgICAgICAgICAgICBkc2NvbiA9IHNlbGYucnVuX2NvbW1hbmQoJ3BhcnNlUmVjaXBlRmlsZScsIGZuLCBhcHBlbmRzLCBhcHBlbmRsaXN0LCBkY3RyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkc2NvbiA9IHNlbGYucnVuX2NvbW1hbmQoJ3BhcnNlUmVjaXBlRmlsZScsIGZuLCBhcHBlbmRzLCBhcHBlbmRsaXN0KQorICAgICAgICAgICAgaWYgZHNjb246CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlY29udmVydF90eXBlKGRzY29uLCAnRGF0YVN0b3JlQ29ubmVjdGlvbkhhbmRsZScpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBzZWxmLnRyYWNraW5nOgorICAgICAgICAgICAgICAgIHNlbGYucnVuX2NvbW1hbmQoJ2Rpc2FibGVEYXRhVHJhY2tpbmcnKQogCi0gICAgZGVmIGJ1aWxkX2ZpbGUoc2VsZiwgYnVpbGRmaWxlLCB0YXNrKToKKyAgICBkZWYgYnVpbGRfZmlsZShzZWxmLCBidWlsZGZpbGUsIHRhc2ssIGludGVybmFsPVRydWUpOgogICAgICAgICAiIiIKICAgICAgICAgUnVucyB0aGUgc3BlY2lmaWVkIHRhc2sgZm9yIGp1c3QgYSBzaW5nbGUgcmVjaXBlIChpLmUuIG5vIGRlcGVuZGVuY2llcykuCi0gICAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBiaXRiYWtlIC1iLCBleGNlcHQgbm8gd2FybmluZyB3aWxsIGJlIHByaW50ZWQuCisgICAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBiaXRiYWtlIC1iLCBleGNlcHQgd2l0aCB0aGUgZGVmYXVsdCBpbnRlcm5hbD1UcnVlCisgICAgICAgIG5vIHdhcm5pbmcgYWJvdXQgZGVwZW5kZW5jaWVzIHdpbGwgYmUgcHJvZHVjZWQsIG5vcm1hbCBpbmZvIG1lc3NhZ2VzCisgICAgICAgIGZyb20gdGhlIHJ1bnF1ZXVlIHdpbGwgYmUgc2lsZW5jZWQgYW5kIEJ1aWxkSW5pdCwgQnVpbGRTdGFydGVkIGFuZAorICAgICAgICBCdWlsZENvbXBsZXRlZCBldmVudHMgd2lsbCBub3QgYmUgZmlyZWQuCiAgICAgICAgICIiIgotICAgICAgICByZXR1cm4gc2VsZi5ydW5fY29tbWFuZCgnYnVpbGRGaWxlJywgYnVpbGRmaWxlLCB0YXNrLCBUcnVlKQorICAgICAgICByZXR1cm4gc2VsZi5ydW5fY29tbWFuZCgnYnVpbGRGaWxlJywgYnVpbGRmaWxlLCB0YXNrLCBpbnRlcm5hbCkKKworICAgIGRlZiBidWlsZF90YXJnZXRzKHNlbGYsIHRhcmdldHMsIHRhc2s9Tm9uZSwgaGFuZGxlX2V2ZW50cz1UcnVlLCBleHRyYV9ldmVudHM9Tm9uZSwgZXZlbnRfY2FsbGJhY2s9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBCdWlsZHMgdGhlIHNwZWNpZmllZCB0YXJnZXRzLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYSBub3JtYWwgaW52b2NhdGlvbgorICAgICAgICBvZiBiaXRiYWtlLiBIYXMgYnVpbHQtaW4gZXZlbnQgaGFuZGxpbmcgd2hpY2ggaXMgZW5hYmxlZCBieSBkZWZhdWx0IGFuZAorICAgICAgICBjYW4gYmUgZXh0ZW5kZWQgaWYgbmVlZGVkLgorICAgICAgICBQYXJhbWV0ZXJzOgorICAgICAgICAgICAgdGFyZ2V0czoKKyAgICAgICAgICAgICAgICBPbmUgb3IgbW9yZSB0YXJnZXRzIHRvIGJ1aWxkLiBDYW4gYmUgYSBsaXN0IG9yIGEKKyAgICAgICAgICAgICAgICBzcGFjZS1zZXBhcmF0ZWQgc3RyaW5nLgorICAgICAgICAgICAgdGFzazoKKyAgICAgICAgICAgICAgICBUaGUgdGFzayB0byBydW47IGlmIE5vbmUgdGhlbiB0aGUgdmFsdWUgb2YgQkJfREVGQVVMVF9UQVNLCisgICAgICAgICAgICAgICAgd2lsbCBiZSB1c2VkLiBEZWZhdWx0IE5vbmUuCisgICAgICAgICAgICBoYW5kbGVfZXZlbnRzOgorICAgICAgICAgICAgICAgIFRydWUgdG8gaGFuZGxlIGV2ZW50cyBpbiBhIHNpbWlsYXIgd2F5IHRvIG5vcm1hbCBiaXRiYWtlCisgICAgICAgICAgICAgICAgaW52b2NhdGlvbiB3aXRoIGtub3R0eTsgRmFsc2UgdG8gcmV0dXJuIGltbWVkaWF0ZWx5IChvbiB0aGUKKyAgICAgICAgICAgICAgICBhc3N1bXB0aW9uIHRoYXQgdGhlIGNhbGxlciB3aWxsIGhhbmRsZSB0aGUgZXZlbnRzIGluc3RlYWQpLgorICAgICAgICAgICAgICAgIERlZmF1bHQgVHJ1ZS4KKyAgICAgICAgICAgIGV4dHJhX2V2ZW50czoKKyAgICAgICAgICAgICAgICBBbiBvcHRpb25hbCBsaXN0IG9mIGV2ZW50cyB0byBhZGQgdG8gdGhlIGV2ZW50IG1hc2sgKGlmCisgICAgICAgICAgICAgICAgaGFuZGxlX2V2ZW50cz1UcnVlKS4gSWYgeW91IGFkZCBldmVudHMgaGVyZSB5b3UgYWxzbyBuZWVkCisgICAgICAgICAgICAgICAgdG8gc3BlY2lmeSBhIGNhbGxiYWNrIGZ1bmN0aW9uIGluIGV2ZW50X2NhbGxiYWNrIHRoYXQgd2lsbAorICAgICAgICAgICAgICAgIGhhbmRsZSB0aGUgYWRkaXRpb25hbCBldmVudHMuIERlZmF1bHQgTm9uZS4KKyAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrOgorICAgICAgICAgICAgICAgIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRha2luZyBhIHNpbmdsZSBwYXJhbWV0ZXIgd2hpY2gKKyAgICAgICAgICAgICAgICB3aWxsIGJlIGNhbGxlZCBmaXJzdCB1cG9uIHJlY2VpdmluZyBhbnkgZXZlbnQgKGlmCisgICAgICAgICAgICAgICAgaGFuZGxlX2V2ZW50cz1UcnVlKSBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuIG92ZXJyaWRlIG9yCisgICAgICAgICAgICAgICAgZXh0ZW5kIHRoZSBldmVudCBoYW5kbGluZy4gRGVmYXVsdCBOb25lLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0YXJnZXRzLCBzdHIpOgorICAgICAgICAgICAgdGFyZ2V0cyA9IHRhcmdldHMuc3BsaXQoKQorICAgICAgICBpZiBub3QgdGFzazoKKyAgICAgICAgICAgIHRhc2sgPSBzZWxmLmNvbmZpZ19kYXRhLmdldFZhcignQkJfREVGQVVMVF9UQVNLJykKKworICAgICAgICBpZiBoYW5kbGVfZXZlbnRzOgorICAgICAgICAgICAgIyBBIHJlYXNvbmFibGUgc2V0IG9mIGRlZmF1bHQgZXZlbnRzIG1hdGNoaW5nIHVwIHdpdGggdGhvc2Ugd2UgaGFuZGxlIGJlbG93CisgICAgICAgICAgICBldmVudG1hc2sgPSBbCisgICAgICAgICAgICAgICAgICAgICAgICAnYmIuZXZlbnQuQnVpbGRTdGFydGVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdiYi5ldmVudC5CdWlsZENvbXBsZXRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnbG9nZ2luZy5Mb2dSZWNvcmQnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2JiLmV2ZW50Lk5vUHJvdmlkZXInLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2JiLmNvbW1hbmQuQ29tbWFuZENvbXBsZXRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnYmIuY29tbWFuZC5Db21tYW5kRmFpbGVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdiYi5idWlsZC5UYXNrU3RhcnRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnYmIuYnVpbGQuVGFza0ZhaWxlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnYmIuYnVpbGQuVGFza1N1Y2NlZWRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnYmIuYnVpbGQuVGFza0ZhaWxlZFNpbGVudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnYmIuYnVpbGQuVGFza1Byb2dyZXNzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tTdGFydGVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFza1N0YXJ0ZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2JiLmV2ZW50LlByb2Nlc3NTdGFydGVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdiYi5ldmVudC5Qcm9jZXNzUHJvZ3Jlc3MnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2JiLmV2ZW50LlByb2Nlc3NGaW5pc2hlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICBpZiBleHRyYV9ldmVudHM6CisgICAgICAgICAgICAgICAgZXZlbnRtYXNrLmV4dGVuZChleHRyYV9ldmVudHMpCisgICAgICAgICAgICByZXQgPSBzZWxmLnNldF9ldmVudF9tYXNrKGV2ZW50bWFzaykKKworICAgICAgICBpbmNsdWRlbG9ncyA9IHNlbGYuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQklOQ0xVREVMT0dTJykKKyAgICAgICAgbG9nbGluZXMgPSBzZWxmLmNvbmZpZ19kYXRhLmdldFZhcignQkJJTkNMVURFTE9HU19MSU5FUycpCisKKyAgICAgICAgcmV0ID0gc2VsZi5ydW5fY29tbWFuZCgnYnVpbGRUYXJnZXRzJywgdGFyZ2V0cywgdGFzaykKKyAgICAgICAgaWYgaGFuZGxlX2V2ZW50czoKKyAgICAgICAgICAgIHJlc3VsdCA9IEZhbHNlCisgICAgICAgICAgICAjIEJvcnJvd2VkIGZyb20ga25vdHR5LCBpbnN0ZWFkIHNvbWV3aGF0IGhhY2tpbHkgd2UgdXNlIHRoZSBoZWxwZXIKKyAgICAgICAgICAgICMgYXMgdGhlIG9iamVjdCB0byBzdG9yZSAic2h1dGRvd24iIG9uCisgICAgICAgICAgICBoZWxwZXIgPSBiYi51aS51aWhlbHBlci5CQlVJSGVscGVyKCkKKyAgICAgICAgICAgICMgV2Ugc2V0IHVwIGxvZ2dpbmcgb3B0aW9uYWxseSBpbiB0aGUgY29uc3RydWN0b3Igc28gbm93IHdlIG5lZWQgdG8KKyAgICAgICAgICAgICMgZ3JhYiB0aGUgaGFuZGxlcnMgdG8gcGFzcyB0byBUZXJtaW5hbEZpbHRlcgorICAgICAgICAgICAgY29uc29sZSA9IE5vbmUKKyAgICAgICAgICAgIGVycmNvbnNvbGUgPSBOb25lCisgICAgICAgICAgICBmb3IgaGFuZGxlciBpbiBzZWxmLmxvZ2dlci5oYW5kbGVyczoKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGhhbmRsZXIsIGxvZ2dpbmcuU3RyZWFtSGFuZGxlcik6CisgICAgICAgICAgICAgICAgICAgIGlmIGhhbmRsZXIuc3RyZWFtID09IHN5cy5zdGRvdXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlID0gaGFuZGxlcgorICAgICAgICAgICAgICAgICAgICBlbGlmIGhhbmRsZXIuc3RyZWFtID09IHN5cy5zdGRlcnI6CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJjb25zb2xlID0gaGFuZGxlcgorICAgICAgICAgICAgZm9ybWF0X3N0ciA9ICIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIKKyAgICAgICAgICAgIGZvcm1hdCA9IGJiLm1zZy5CQkxvZ0Zvcm1hdHRlcihmb3JtYXRfc3RyKQorICAgICAgICAgICAgaGVscGVyLnNodXRkb3duID0gMAorICAgICAgICAgICAgcGFyc2Vwcm9ncmVzcyA9IE5vbmUKKyAgICAgICAgICAgIHRlcm1maWx0ZXIgPSBiYi51aS5rbm90dHkuVGVybWluYWxGaWx0ZXIoaGVscGVyLCBoZWxwZXIsIGNvbnNvbGUsIGVycmNvbnNvbGUsIGZvcm1hdCwgcXVpZXQ9c2VsZi5xdWlldCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBldmVudCA9IHNlbGYud2FpdF9ldmVudCgwLjI1KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXZlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXZlbnRfY2FsbGJhY2sgYW5kIGV2ZW50X2NhbGxiYWNrKGV2ZW50KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBoZWxwZXIuZXZlbnRIYW5kbGVyKGV2ZW50KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuYnVpbGQuVGFza0ZhaWxlZFNpbGVudCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygiTG9nZmlsZSBmb3IgZmFpbGVkIHNldHNjZW5lIHRhc2sgaXMgJXMiICUgZXZlbnQubG9nZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrRmFpbGVkKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLnVpLmtub3R0eS5wcmludF9ldmVudF9sb2coZXZlbnQsIGluY2x1ZGVsb2dzLCBsb2dsaW5lcywgdGVybWZpbHRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5Qcm9jZXNzU3RhcnRlZCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYucXVpZXQgPiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2Vwcm9ncmVzcyA9IGJiLnVpLmtub3R0eS5uZXdfcHJvZ3Jlc3MoZXZlbnQucHJvY2Vzc25hbWUsIGV2ZW50LnRvdGFsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXByb2dyZXNzLnN0YXJ0KEZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlByb2Nlc3NQcm9ncmVzcyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYucXVpZXQgPiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGFyc2Vwcm9ncmVzczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcHJvZ3Jlc3MudXBkYXRlKGV2ZW50LnByb2dyZXNzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiR290IFByb2Nlc3NQcm9ncmVzcyBldmVudCBmb3Igc29tZXRpbmcgdGhhdCBuZXZlciBzdGFydGVkPyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUHJvY2Vzc0ZpbmlzaGVkKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5xdWlldCA+IDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwYXJzZXByb2dyZXNzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2Vwcm9ncmVzcy5maW5pc2goKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXByb2dyZXNzID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZENvbXBsZXRlZCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb21tYW5kLkNvbW1hbmRGYWlsZWQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcihzdHIoZXZlbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGxvZ2dpbmcuTG9nUmVjb3JkKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXZlbnQudGFza3BpZCA9PSAwIG9yIGV2ZW50LmxldmVsbm8gPiBsb2dnaW5nLklORk86CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5oYW5kbGUoZXZlbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTm9Qcm92aWRlcik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKHN0cihldmVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgaGVscGVyLnNodXRkb3duID4gMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgdGVybWZpbHRlci51cGRhdGVGb290ZXIoKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtZmlsdGVyLmNsZWFyRm9vdGVyKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhlbHBlci5zaHV0ZG93biA9PSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJcblNlY29uZCBLZXlib2FyZCBJbnRlcnJ1cHQsIHN0b3BwaW5nLi4uXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHNlbGYucnVuX2NvbW1hbmQoInN0YXRlRm9yY2VTaHV0ZG93biIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmV0IGFuZCByZXRbMl06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gY2xlYW5seSBzdG9wOiAlcyIgJSByZXRbMl0pCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGhlbHBlci5zaHV0ZG93biA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJcbktleWJvYXJkIEludGVycnVwdCwgY2xvc2luZyBkb3duLi4uXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHNlbGYucnVuX2NvbW1hbmQoInN0YXRlU2h1dGRvd24iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJldCBhbmQgcmV0WzJdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGNsZWFubHkgc2h1dGRvd246ICVzIiAlIHJldFsyXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci5zaHV0ZG93biA9IGhlbHBlci5zaHV0ZG93biArIDEKKyAgICAgICAgICAgICAgICB0ZXJtZmlsdGVyLmNsZWFyRm9vdGVyKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgdGVybWZpbHRlci5maW5pc2goKQorICAgICAgICAgICAgaWYgaGVscGVyLmZhaWxlZF90YXNrczoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBGYWxzZQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHJldAogCiAgICAgZGVmIHNodXRkb3duKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU2h1dCBkb3duIHRpbmZvaWwuIERpc2Nvbm5lY3RzIGZyb20gdGhlIHNlcnZlciBhbmQgZ3JhY2VmdWxseQorICAgICAgICByZWxlYXNlcyBhbnkgYXNzb2NpYXRlZCByZXNvdXJjZXMuIFlvdSBtdXN0IGNhbGwgdGhpcyBmdW5jdGlvbiBpZgorICAgICAgICBwcmVwYXJlKCkgaGFzIGJlZW4gY2FsbGVkLCBvciB1c2UgYSB3aXRoLi4uIGJsb2NrIHdoZW4geW91IGNyZWF0ZQorICAgICAgICB0aGUgdGluZm9pbCBvYmplY3Qgd2hpY2ggd2lsbCBlbnN1cmUgdGhhdCBpdCBnZXRzIGNhbGxlZC4KKyAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYuc2VydmVyX2Nvbm5lY3Rpb246CiAgICAgICAgICAgICBzZWxmLnJ1bl9jb21tYW5kKCdjbGllbnRDb21wbGV0ZScpCiAgICAgICAgICAgICBfc2VydmVyX2Nvbm5lY3Rpb25zLnJlbW92ZShzZWxmLnNlcnZlcl9jb25uZWN0aW9uKQpAQCAtNDI2LDYgKzgzNSwxMiBAQAogICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfY29ubmVjdGlvbi50ZXJtaW5hdGUoKQogICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfY29ubmVjdGlvbiA9IE5vbmUKIAorICAgICAgICAjIFJlc3RvcmUgbG9nZ2luZyBoYW5kbGVycyB0byBob3cgaXQgbG9va2VkIHdoZW4gd2Ugc3RhcnRlZAorICAgICAgICBpZiBzZWxmLm9sZGhhbmRsZXJzOgorICAgICAgICAgICAgZm9yIGhhbmRsZXIgaW4gc2VsZi5sb2dnZXIuaGFuZGxlcnM6CisgICAgICAgICAgICAgICAgaWYgaGFuZGxlciBub3QgaW4gc2VsZi5vbGRoYW5kbGVyczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuaGFuZGxlcnMucmVtb3ZlKGhhbmRsZXIpCisKICAgICBkZWYgX3JlY29udmVydF90eXBlKHNlbGYsIG9iaiwgb3JpZ3R5cGVuYW1lKToKICAgICAgICAgIiIiCiAgICAgICAgIENvbnZlcnQgYW4gb2JqZWN0IGJhY2sgdG8gdGhlIHJpZ2h0IHR5cGUsIGluIHRoZSBjYXNlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvYnVpbGRpbmZvaGVscGVyLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2J1aWxkaW5mb2hlbHBlci5weQppbmRleCBlNDUxYzYzLi41MjRhNWIwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvYnVpbGRpbmZvaGVscGVyLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9idWlsZGluZm9oZWxwZXIucHkKQEAgLTcxOSw3ICs3MTksMTEgQEAKIAogICAgIGRlZiBzYXZlX2J1aWxkX3BhY2thZ2VfaW5mb3JtYXRpb24oc2VsZiwgYnVpbGRfb2JqLCBwYWNrYWdlX2luZm8sIHJlY2lwZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsdF9wYWNrYWdlKToKLSAgICAgICAjIGFzc2VydCBpc2luc3RhbmNlKGJ1aWxkX29iaiwgQnVpbGQpCisgICAgICAgICMgYXNzZXJ0IGlzaW5zdGFuY2UoYnVpbGRfb2JqLCBCdWlsZCkKKworICAgICAgICBpZiBub3QgJ1BOJyBpbiBwYWNrYWdlX2luZm8ua2V5cygpOgorICAgICAgICAgICAgIyBubyBwYWNrYWdlIGRhdGEgdG8gc2F2ZSAoZS5nLiAnT1BLR04nPSJsaWI2NC0qInwibGliMzItKiIpCisgICAgICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgICAgICMgY3JlYXRlIGFuZCBzYXZlIHRoZSBvYmplY3QKICAgICAgICAgcG5hbWUgPSBwYWNrYWdlX2luZm9bJ1BLRyddCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkva25vdHR5LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2tub3R0eS5weQppbmRleCA4MmFhN2M0Li5mYTg4ZTZjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkva25vdHR5LnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9rbm90dHkucHkKQEAgLTIwNyw4ICsyMDcsMTAgQEAKICAgICAgICAgICAgIHNlbGYuaW50ZXJhY3RpdmUgPSBGYWxzZQogICAgICAgICAgICAgYmIubm90ZSgiVW5hYmxlIHRvIHVzZSBpbnRlcmFjdGl2ZSBtb2RlIGZvciB0aGlzIHRlcm1pbmFsLCB1c2luZyBmYWxsYmFjayIpCiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgY29uc29sZS5hZGRGaWx0ZXIoSW50ZXJhY3RDb25zb2xlTG9nRmlsdGVyKHNlbGYsIGZvcm1hdCkpCi0gICAgICAgIGVycmNvbnNvbGUuYWRkRmlsdGVyKEludGVyYWN0Q29uc29sZUxvZ0ZpbHRlcihzZWxmLCBmb3JtYXQpKQorICAgICAgICBpZiBjb25zb2xlOgorICAgICAgICAgICAgY29uc29sZS5hZGRGaWx0ZXIoSW50ZXJhY3RDb25zb2xlTG9nRmlsdGVyKHNlbGYsIGZvcm1hdCkpCisgICAgICAgIGlmIGVycmNvbnNvbGU6CisgICAgICAgICAgICBlcnJjb25zb2xlLmFkZEZpbHRlcihJbnRlcmFjdENvbnNvbGVMb2dGaWx0ZXIoc2VsZiwgZm9ybWF0KSkKIAogICAgICAgICBzZWxmLm1haW5fcHJvZ3Jlc3MgPSBOb25lCiAKQEAgLTMxMCw2ICszMTIsMzIgQEAKICAgICAgICAgICAgIGZkID0gc3lzLnN0ZGluLmZpbGVubygpCiAgICAgICAgICAgICBzZWxmLnRlcm1pb3MudGNzZXRhdHRyKGZkLCBzZWxmLnRlcm1pb3MuVENTQURSQUlOLCBzZWxmLnN0ZGluYmFja3VwKQogCitkZWYgcHJpbnRfZXZlbnRfbG9nKGV2ZW50LCBpbmNsdWRlbG9ncywgbG9nbGluZXMsIHRlcm1maWx0ZXIpOgorICAgICMgRklYTUUgcmVmYWN0b3IgdGhpcyBvdXQgZnVydGhlcgorICAgIGxvZ2ZpbGUgPSBldmVudC5sb2dmaWxlCisgICAgaWYgbG9nZmlsZSBhbmQgb3MucGF0aC5leGlzdHMobG9nZmlsZSk6CisgICAgICAgIHRlcm1maWx0ZXIuY2xlYXJGb290ZXIoKQorICAgICAgICBiYi5lcnJvcigiTG9nZmlsZSBvZiBmYWlsdXJlIHN0b3JlZCBpbjogJXMiICUgbG9nZmlsZSkKKyAgICAgICAgaWYgaW5jbHVkZWxvZ3MgYW5kIG5vdCBldmVudC5lcnJwcmludGVkOgorICAgICAgICAgICAgcHJpbnQoIkxvZyBkYXRhIGZvbGxvd3M6IikKKyAgICAgICAgICAgIGYgPSBvcGVuKGxvZ2ZpbGUsICJyIikKKyAgICAgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgbCA9IGYucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIGlmIGwgPT0gJyc6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgbCA9IGwucnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBsb2dsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgfCAlcycgJSBsKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4obGluZXMpID4gaW50KGxvZ2xpbmVzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLnBvcCgwKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCd8ICVzJyAlIGwpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGlmIGxpbmVzOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICBwcmludChsaW5lKQorCiBkZWYgX2xvZ19zZXR0aW5nc19mcm9tX3NlcnZlcihzZXJ2ZXIsIG9ic2VydmVfb25seSk6CiAgICAgIyBHZXQgdmFsdWVzIG9mIHZhcmlhYmxlcyB3aGljaCBjb250cm9sIG91ciBvdXRwdXQKICAgICBpbmNsdWRlbG9ncywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCSU5DTFVERUxPR1MiXSkKQEAgLTM0Miw2ICszNzAsOSBAQAogCiBkZWYgbWFpbihzZXJ2ZXIsIGV2ZW50SGFuZGxlciwgcGFyYW1zLCB0ZiA9IFRlcm1pbmFsRmlsdGVyKToKIAorICAgIGlmIG5vdCBwYXJhbXMub2JzZXJ2ZV9vbmx5OgorICAgICAgICBwYXJhbXMudXBkYXRlVG9TZXJ2ZXIoc2VydmVyLCBvcy5lbnZpcm9uLmNvcHkoKSkKKwogICAgIGluY2x1ZGVsb2dzLCBsb2dsaW5lcywgY29uc29sZWxvZ2ZpbGUgPSBfbG9nX3NldHRpbmdzX2Zyb21fc2VydmVyKHNlcnZlciwgcGFyYW1zLm9ic2VydmVfb25seSkKIAogICAgIGlmIHN5cy5zdGRpbi5pc2F0dHkoKSBhbmQgc3lzLnN0ZG91dC5pc2F0dHkoKToKQEAgLTM2NSw4ICszOTYsOSBAQAogICAgIGJiLm1zZy5hZGREZWZhdWx0bG9nRmlsdGVyKGVycmNvbnNvbGUsIGJiLm1zZy5CQkxvZ0ZpbHRlclN0ZEVycikKICAgICBjb25zb2xlLnNldEZvcm1hdHRlcihmb3JtYXQpCiAgICAgZXJyY29uc29sZS5zZXRGb3JtYXR0ZXIoZm9ybWF0KQotICAgIGxvZ2dlci5hZGRIYW5kbGVyKGNvbnNvbGUpCi0gICAgbG9nZ2VyLmFkZEhhbmRsZXIoZXJyY29uc29sZSkKKyAgICBpZiBub3QgYmIubXNnLmhhc19jb25zb2xlX2hhbmRsZXIobG9nZ2VyKToKKyAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoY29uc29sZSkKKyAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoZXJyY29uc29sZSkKIAogICAgIGJiLnV0aWxzLnNldF9wcm9jZXNzX25hbWUoIktub3R0eVVJIikKIApAQCAtMzk1LDcgKzQyNyw2IEBACiAgICAgdW5pdmVyc2UgPSBGYWxzZQogICAgIGlmIG5vdCBwYXJhbXMub2JzZXJ2ZV9vbmx5OgogICAgICAgICBwYXJhbXMudXBkYXRlRnJvbVNlcnZlcihzZXJ2ZXIpCi0gICAgICAgIHBhcmFtcy51cGRhdGVUb1NlcnZlcihzZXJ2ZXIsIG9zLmVudmlyb24uY29weSgpKQogICAgICAgICBjbWRsaW5lID0gcGFyYW1zLnBhcnNlQWN0aW9ucygpCiAgICAgICAgIGlmIG5vdCBjbWRsaW5lOgogICAgICAgICAgICAgcHJpbnQoIk5vdGhpbmcgdG8gZG8uICBVc2UgJ2JpdGJha2Ugd29ybGQnIHRvIGJ1aWxkIGV2ZXJ5dGhpbmcsIG9yIHJ1biAnYml0YmFrZSAtLWhlbHAnIGZvciB1c2FnZSBpbmZvcm1hdGlvbi4iKQpAQCAtNDcxLDExICs1MDIsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgICAgICAgICAgICAgIyBQcmVmaXggdGFzayBtZXNzYWdlcyB3aXRoIHJlY2lwZS90YXNrCi0gICAgICAgICAgICAgICAgICAgIGlmIGV2ZW50LnRhc2twaWQgaW4gaGVscGVyLnJ1bm5pbmdfdGFza3M6CisgICAgICAgICAgICAgICAgICAgIGlmIGV2ZW50LnRhc2twaWQgaW4gaGVscGVyLnJ1bm5pbmdfdGFza3MgYW5kIGV2ZW50LmxldmVsbm8gIT0gZm9ybWF0LlBMQUlOOgogICAgICAgICAgICAgICAgICAgICAgICAgdGFza2luZm8gPSBoZWxwZXIucnVubmluZ190YXNrc1tldmVudC50YXNrcGlkXQogICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQubXNnID0gdGFza2luZm9bJ3RpdGxlJ10gKyAnOiAnICsgZXZlbnQubXNnCiAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihldmVudCwgJ2ZuJyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5tc2cgPSBldmVudC5mbiArICc6ICcgKyBldmVudC5tc2cKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQubXNnID0gZXZlbnQuZm4gKyAnOiAnICsgZXZlbnQubXNnCiAgICAgICAgICAgICAgICAgbG9nZ2VyLmhhbmRsZShldmVudCkKICAgICAgICAgICAgICAgICBjb250aW51ZQogCkBAIC00ODQsMjkgKzUxNSw3IEBACiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tGYWlsZWQpOgogICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IDEKLSAgICAgICAgICAgICAgICBsb2dmaWxlID0gZXZlbnQubG9nZmlsZQotICAgICAgICAgICAgICAgIGlmIGxvZ2ZpbGUgYW5kIG9zLnBhdGguZXhpc3RzKGxvZ2ZpbGUpOgotICAgICAgICAgICAgICAgICAgICB0ZXJtZmlsdGVyLmNsZWFyRm9vdGVyKCkKLSAgICAgICAgICAgICAgICAgICAgYmIuZXJyb3IoIkxvZ2ZpbGUgb2YgZmFpbHVyZSBzdG9yZWQgaW46ICVzIiAlIGxvZ2ZpbGUpCi0gICAgICAgICAgICAgICAgICAgIGlmIGluY2x1ZGVsb2dzIGFuZCBub3QgZXZlbnQuZXJycHJpbnRlZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJMb2cgZGF0YSBmb2xsb3dzOiIpCi0gICAgICAgICAgICAgICAgICAgICAgICBmID0gb3Blbihsb2dmaWxlLCAiciIpCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBmLnJlYWRsaW5lKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsID09ICcnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBsLnJzdHJpcCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbG9nbGluZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnIHwgJXMnICUgbCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmVzKSA+IGludChsb2dsaW5lcyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5wb3AoMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnfCAlcycgJSBsKQotICAgICAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQobGluZSkKKyAgICAgICAgICAgICAgICBwcmludF9ldmVudF9sb2coZXZlbnQsIGluY2x1ZGVsb2dzLCBsb2dsaW5lcywgdGVybWZpbHRlcikKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tCYXNlKToKICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhldmVudC5fbWVzc2FnZSkKICAgICAgICAgICAgICAgICBjb250aW51ZQpAQCAtNTU5LDcgKzU2OCw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gZXZlbnQuZXhpdGNvZGUKICAgICAgICAgICAgICAgICBpZiBldmVudC5lcnJvcjoKICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICsgMQotICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNvbW1hbmQgZXhlY3V0aW9uIGZhaWxlZDogJXMiLCBldmVudC5lcnJvcikKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHN0cihldmVudCkpCiAgICAgICAgICAgICAgICAgbWFpbi5zaHV0ZG93biA9IDIKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuY29tbWFuZC5Db21tYW5kRXhpdCk6CkBAIC01NzAsMzkgKzU3OSwxNiBAQAogICAgICAgICAgICAgICAgIG1haW4uc2h1dGRvd24gPSAyCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50Lk11bHRpcGxlUHJvdmlkZXJzKToKLSAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygibXVsdGlwbGUgcHJvdmlkZXJzIGFyZSBhdmFpbGFibGUgZm9yICVzJXMgKCVzKSIsIGV2ZW50Ll9pc19ydW50aW1lIGFuZCAicnVudGltZSAiIG9yICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9pdGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsICIuam9pbihldmVudC5fY2FuZGlkYXRlcykpCi0gICAgICAgICAgICAgICAgcnRpbWUgPSAiIgotICAgICAgICAgICAgICAgIGlmIGV2ZW50Ll9pc19ydW50aW1lOgotICAgICAgICAgICAgICAgICAgICBydGltZSA9ICJSIgotICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJjb25zaWRlciBkZWZpbmluZyBhIFBSRUZFUlJFRF8lc1BST1ZJREVSIGVudHJ5IHRvIG1hdGNoICVzIiAlIChydGltZSwgZXZlbnQuX2l0ZW0pKQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKHN0cihldmVudCkpCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50Lk5vUHJvdmlkZXIpOgotICAgICAgICAgICAgICAgIGlmIGV2ZW50Ll9ydW50aW1lOgotICAgICAgICAgICAgICAgICAgICByID0gIlIiCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgciA9ICIiCi0KLSAgICAgICAgICAgICAgICBleHRyYSA9ICcnCi0gICAgICAgICAgICAgICAgaWYgbm90IGV2ZW50Ll9yZWFzb25zOgotICAgICAgICAgICAgICAgICAgICBpZiBldmVudC5fY2xvc2VfbWF0Y2hlczoKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gIi4gQ2xvc2UgbWF0Y2hlczpcbiAgJXMiICUgJ1xuICAnLmpvaW4oZXZlbnQuX2Nsb3NlX21hdGNoZXMpCi0KICAgICAgICAgICAgICAgICAjIEZvciB1bml2ZXJzZSBidWlsZHMsIG9ubHkgc2hvdyB0aGVzZSBhcyB3YXJuaW5ncywgbm90IGVycm9ycwotICAgICAgICAgICAgICAgIGggPSBsb2dnZXIud2FybmluZwogICAgICAgICAgICAgICAgIGlmIG5vdCB1bml2ZXJzZToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gMQogICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgKyAxCi0gICAgICAgICAgICAgICAgICAgIGggPSBsb2dnZXIuZXJyb3IKLQotICAgICAgICAgICAgICAgIGlmIGV2ZW50Ll9kZXBlbmRlZXM6Ci0gICAgICAgICAgICAgICAgICAgIGgoIk5vdGhpbmcgJXNQUk9WSURFUyAnJXMnIChidXQgJXMgJXNERVBFTkRTIG9uIG9yIG90aGVyd2lzZSByZXF1aXJlcyBpdCklcyIsIHIsIGV2ZW50Ll9pdGVtLCAiLCAiLmpvaW4oZXZlbnQuX2RlcGVuZGVlcyksIHIsIGV4dHJhKQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGV2ZW50KSkKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBoKCJOb3RoaW5nICVzUFJPVklERVMgJyVzJyVzIiwgciwgZXZlbnQuX2l0ZW0sIGV4dHJhKQotICAgICAgICAgICAgICAgIGlmIGV2ZW50Ll9yZWFzb25zOgotICAgICAgICAgICAgICAgICAgICBmb3IgcmVhc29uIGluIGV2ZW50Ll9yZWFzb25zOgotICAgICAgICAgICAgICAgICAgICAgICAgaCgiJXMiLCByZWFzb24pCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKHN0cihldmVudCkpCiAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tTdGFydGVkKToKQEAgLTYyNCwxMyArNjEwLDExIEBACiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tGYWlsZWQpOgogICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IDEKICAgICAgICAgICAgICAgICB0YXNrZmFpbHVyZXMuYXBwZW5kKGV2ZW50LnRhc2tzdHJpbmcpCi0gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJUYXNrICglcykgZmFpbGVkIHdpdGggZXhpdCBjb2RlICclcyciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC50YXNrc3RyaW5nLCBldmVudC5leGl0Y29kZSkKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGV2ZW50KSkKICAgICAgICAgICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFza0ZhaWxlZCk6Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIlNldHNjZW5lIHRhc2sgKCVzKSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJyVzJyAtIHJlYWwgdGFzayB3aWxsIGJlIHJ1biBpbnN0ZWFkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC50YXNrc3RyaW5nLCBldmVudC5leGl0Y29kZSkKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZyhzdHIoZXZlbnQpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkRlcFRyZWVHZW5lcmF0ZWQpOgpAQCAtNjYzLDYgKzY0Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuTWV0YWRhdGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5TdGFtcFVwZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5Db25maWdQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuTXVsdGlDb25maWdQYXJzZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuUmVjaXBlUGFyc2VkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LlJlY2lwZVByZUZpbmFsaXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlRXZlbnQsCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvbmN1cnNlcy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9uY3Vyc2VzLnB5CmluZGV4IGNhODQ1YTMuLjg2OTBjNTIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9uY3Vyc2VzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9uY3Vyc2VzLnB5CkBAIC0zMTUsNyArMzE1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIyBhbHNvIGFsbG93IHRoZW0gdG8gbm93IGV4aXQgd2l0aCBhIHNpbmdsZSBeQwogICAgICAgICAgICAgICAgICAgICBzaHV0ZG93biA9IDIKICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb21tYW5kLkNvbW1hbmRGYWlsZWQpOgotICAgICAgICAgICAgICAgICAgICBtdy5hcHBlbmRUZXh0KCJDb21tYW5kIGV4ZWN1dGlvbiBmYWlsZWQ6ICVzIiAlIGV2ZW50LmVycm9yKQorICAgICAgICAgICAgICAgICAgICBtdy5hcHBlbmRUZXh0KHN0cihldmVudCkpCiAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMikKICAgICAgICAgICAgICAgICAgICAgZXhpdGZsYWcgPSBUcnVlCiAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuY29tbWFuZC5Db21tYW5kRXhpdCk6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvdGFza2V4cC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS90YXNrZXhwLnB5CmluZGV4IDlkMTRlY2UuLjBlOGU5ZDQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS90YXNrZXhwLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS90YXNrZXhwLnB5CkBAIC02Myw3ICs2Myw5IEBACiAgICAgICAgIHNlbGYuY3VycmVudCA9IE5vbmUKICAgICAgICAgc2VsZi5maWx0ZXJfbW9kZWwgPSBtb2RlbC5maWx0ZXJfbmV3KCkKICAgICAgICAgc2VsZi5maWx0ZXJfbW9kZWwuc2V0X3Zpc2libGVfZnVuYyhzZWxmLl9maWx0ZXIpCi0gICAgICAgIHNlbGYuc2V0X21vZGVsKHNlbGYuZmlsdGVyX21vZGVsKQorICAgICAgICBzZWxmLnNvcnRfbW9kZWwgPSBzZWxmLmZpbHRlcl9tb2RlbC5zb3J0X25ld193aXRoX21vZGVsKCkKKyAgICAgICAgc2VsZi5zb3J0X21vZGVsLnNldF9zb3J0X2NvbHVtbl9pZChDT0xfREVQX1BBUkVOVCwgR3RrLlNvcnRUeXBlLkFTQ0VORElORykKKyAgICAgICAgc2VsZi5zZXRfbW9kZWwoc2VsZi5zb3J0X21vZGVsKQogICAgICAgICBzZWxmLmFwcGVuZF9jb2x1bW4oR3RrLlRyZWVWaWV3Q29sdW1uKGxhYmVsLCBHdGsuQ2VsbFJlbmRlcmVyVGV4dCgpLCB0ZXh0PUNPTF9ERVBfUEFSRU5UKSkKIAogICAgIGRlZiBfZmlsdGVyKHNlbGYsIG1vZGVsLCBpdGVyLCBkYXRhKToKQEAgLTI4NiwyMyArMjg4LDcgQEAKICAgICAgICAgICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5Ob1Byb3ZpZGVyKToKLSAgICAgICAgICAgICAgICBpZiBldmVudC5fcnVudGltZToKLSAgICAgICAgICAgICAgICAgICAgciA9ICJSIgotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAiIgotCi0gICAgICAgICAgICAgICAgZXh0cmEgPSAnJwotICAgICAgICAgICAgICAgIGlmIG5vdCBldmVudC5fcmVhc29uczoKLSAgICAgICAgICAgICAgICAgICAgaWYgZXZlbnQuX2Nsb3NlX21hdGNoZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9ICIuIENsb3NlIG1hdGNoZXM6XG4gICVzIiAlICdcbiAgJy5qb2luKGV2ZW50Ll9jbG9zZV9tYXRjaGVzKQotCi0gICAgICAgICAgICAgICAgaWYgZXZlbnQuX2RlcGVuZGVlczoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoIk5vdGhpbmcgJXNQUk9WSURFUyAnJXMnIChidXQgJXMgJXNERVBFTkRTIG9uIG9yIG90aGVyd2lzZSByZXF1aXJlcyBpdCklcyIgJSAociwgZXZlbnQuX2l0ZW0sICIsICIuam9pbihldmVudC5fZGVwZW5kZWVzKSwgciwgZXh0cmEpKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCJOb3RoaW5nICVzUFJPVklERVMgJyVzJyVzIiAlIChyLCBldmVudC5faXRlbSwgZXh0cmEpKQotICAgICAgICAgICAgICAgIGlmIGV2ZW50Ll9yZWFzb25zOgotICAgICAgICAgICAgICAgICAgICBmb3IgcmVhc29uIGluIGV2ZW50Ll9yZWFzb25zOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQocmVhc29uKQorICAgICAgICAgICAgICAgIHByaW50KHN0cihldmVudCkpCiAKICAgICAgICAgICAgICAgICBfLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsic3RhdGVTaHV0ZG93biJdKQogICAgICAgICAgICAgICAgIGlmIGVycm9yOgpAQCAtMzEwLDcgKzI5Niw3IEBACiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuY29tbWFuZC5Db21tYW5kRmFpbGVkKToKLSAgICAgICAgICAgICAgICBwcmludCgiQ29tbWFuZCBleGVjdXRpb24gZmFpbGVkOiAlcyIgJSBldmVudC5lcnJvcikKKyAgICAgICAgICAgICAgICBwcmludChzdHIoZXZlbnQpKQogICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5leGl0Y29kZQogCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb21tYW5kLkNvbW1hbmRFeGl0KToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS90b2FzdGVydWkucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvdG9hc3RlcnVpLnB5CmluZGV4IDcxZjA0ZmEuLjg4Y2VjMzcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS90b2FzdGVydWkucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL3RvYXN0ZXJ1aS5weQpAQCAtMzIwLDI5ICszMjAsMTMgQEAKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZENvbXBsZXRlZCk6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50Lk11bHRpcGxlUHJvdmlkZXJzKToKLSAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygibXVsdGlwbGUgcHJvdmlkZXJzIGFyZSBhdmFpbGFibGUgZm9yICVzJXMgKCVzKSIsIGV2ZW50Ll9pc19ydW50aW1lIGFuZCAicnVudGltZSAiIG9yICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9pdGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsICIuam9pbihldmVudC5fY2FuZGlkYXRlcykpCi0gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oImNvbnNpZGVyIGRlZmluaW5nIGEgUFJFRkVSUkVEX1BST1ZJREVSIGVudHJ5IHRvIG1hdGNoICVzIiwgZXZlbnQuX2l0ZW0pCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oc3RyKGV2ZW50KSkKICAgICAgICAgICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5Ob1Byb3ZpZGVyKToKICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgKyAxCi0gICAgICAgICAgICAgICAgaWYgZXZlbnQuX3J1bnRpbWU6Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAiUiIKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByID0gIiIKLQotICAgICAgICAgICAgICAgIGlmIGV2ZW50Ll9kZXBlbmRlZXM6Ci0gICAgICAgICAgICAgICAgICAgIHRleHQgPSAiTm90aGluZyAlc1BST1ZJREVTICclcycgKGJ1dCAlcyAlc0RFUEVORFMgb24gb3Igb3RoZXJ3aXNlIHJlcXVpcmVzIGl0KSIgJSAociwgZXZlbnQuX2l0ZW0sICIsICIuam9pbihldmVudC5fZGVwZW5kZWVzKSwgcikKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gIk5vdGhpbmcgJXNQUk9WSURFUyAnJXMnIiAlIChyLCBldmVudC5faXRlbSkKLQorICAgICAgICAgICAgICAgIHRleHQgPSBzdHIoZXZlbnQpCiAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHRleHQpCi0gICAgICAgICAgICAgICAgaWYgZXZlbnQuX3JlYXNvbnM6Ci0gICAgICAgICAgICAgICAgICAgIGZvciByZWFzb24gaW4gZXZlbnQuX3JlYXNvbnM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIiVzIiwgcmVhc29uKQotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSByZWFzb24KICAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuc3RvcmVfbG9nX2Vycm9yKHRleHQpCiAgICAgICAgICAgICAgICAgY29udGludWUKIApAQCAtMzY0LDggKzM0OCw3IEBACiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tGYWlsZWQpOgogICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci51cGRhdGVfYW5kX3N0b3JlX3Rhc2soZXZlbnQpCiAgICAgICAgICAgICAgICAgdGFza2ZhaWx1cmVzLmFwcGVuZChldmVudC50YXNrc3RyaW5nKQotICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVGFzayAoJXMpIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAnJXMnIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudGFza3N0cmluZywgZXZlbnQuZXhpdGNvZGUpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHN0cihldmVudCkpCiAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrQ29tcGxldGVkLCBiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFza0ZhaWxlZCkpOgpAQCAtMzgyLDcgKzM2NSw3IEBACiAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuY29tbWFuZC5Db21tYW5kRmFpbGVkKToKICAgICAgICAgICAgICAgICAgICAgZXJyb3JzICs9IDEKICAgICAgICAgICAgICAgICAgICAgZXJyb3Jjb2RlID0gMQotICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNvbW1hbmQgZXhlY3V0aW9uIGZhaWxlZDogJXMiLCBldmVudC5lcnJvcikKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHN0cihldmVudCkpCiAgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5CdWlsZENvbXBsZXRlZCk6CiAgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zY2FuX2ltYWdlX2FydGlmYWN0cygpCiAgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5jbG9uZV9yZXF1aXJlZF9zZGtfYXJ0aWZhY3RzKCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS91aWhlbHBlci5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS91aWhlbHBlci5weQppbmRleCAxMTNmY2VkLi45NjNjMWVhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvdWloZWxwZXIucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL3VpaGVscGVyLnB5CkBAIC02MSw2ICs2MSw5IEBACiAgICAgICAgICAgICAgICAgc2VsZi5ydW5uaW5nX3Rhc2tzW2V2ZW50LnBpZF1bJ3Byb2dyZXNzJ10gPSBldmVudC5wcm9ncmVzcwogICAgICAgICAgICAgICAgIHNlbGYucnVubmluZ190YXNrc1tldmVudC5waWRdWydyYXRlJ10gPSBldmVudC5yYXRlCiAgICAgICAgICAgICAgICAgc2VsZi5uZWVkVXBkYXRlID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCiAKICAgICBkZWYgZ2V0VGFza3Moc2VsZik6CiAgICAgICAgIHNlbGYubmVlZFVwZGF0ZSA9IEZhbHNlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdXRpbHMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdXRpbHMucHkKaW5kZXggNmE0NGRiNS4uYzU0MGI0OSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3V0aWxzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91dGlscy5weQpAQCAtNzcxLDEzICs3NzEsMTQgQEAKICAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICByZW5hbWVmYWlsZWQgPSAxCisgICAgIyBvcy5yZW5hbWUgbmVlZHMgdG8ga25vdyB0aGUgZGVzdCBwYXRoIGVuZGluZyB3aXRoIGZpbGUgbmFtZQorICAgICMgc28gYXBwZW5kIHRoZSBmaWxlIG5hbWUgdG8gYSBwYXRoIG9ubHkgaWYgaXQncyBhIGRpciBzcGVjaWZpZWQKKyAgICBzcmNmbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc3JjKQorICAgIGRlc3RwYXRoID0gb3MucGF0aC5qb2luKGRlc3QsIHNyY2ZuYW1lKSBpZiBvcy5wYXRoLmlzZGlyKGRlc3QpIFwKKyAgICAgICAgICAgICAgICBlbHNlIGRlc3QKKwogICAgIGlmIHNzdGF0W3N0YXQuU1RfREVWXSA9PSBkc3RhdFtzdGF0LlNUX0RFVl06CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgICMgb3MucmVuYW1lIG5lZWRzIHRvIGtub3cgdGhlIGRlc3QgcGF0aCBlbmRpbmcgd2l0aCBmaWxlIG5hbWUKLSAgICAgICAgICAgICMgc28gYXBwZW5kIHRoZSBmaWxlIG5hbWUgdG8gYSBwYXRoIG9ubHkgaWYgaXQncyBhIGRpciBzcGVjaWZpZWQKLSAgICAgICAgICAgIHNyY2ZuYW1lID0gb3MucGF0aC5iYXNlbmFtZShzcmMpCi0gICAgICAgICAgICBkZXN0cGF0aCA9IG9zLnBhdGguam9pbihkZXN0LCBzcmNmbmFtZSkgaWYgb3MucGF0aC5pc2RpcihkZXN0KSBcCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGRlc3QKICAgICAgICAgICAgIG9zLnJlbmFtZShzcmMsIGRlc3RwYXRoKQogICAgICAgICAgICAgcmVuYW1lZmFpbGVkID0gMAogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CkBAIC03OTEsOCArNzkyLDggQEAKICAgICAgICAgZGlkY29weSA9IDAKICAgICAgICAgaWYgc3RhdC5TX0lTUkVHKHNzdGF0W3N0YXQuU1RfTU9ERV0pOgogICAgICAgICAgICAgdHJ5OiAjIEZvciBzYWZldHkgY29weSB0aGVuIG1vdmUgaXQgb3Zlci4KLSAgICAgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUoc3JjLCBkZXN0ICsgIiNuZXciKQotICAgICAgICAgICAgICAgIG9zLnJlbmFtZShkZXN0ICsgIiNuZXciLCBkZXN0KQorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzcmMsIGRlc3RwYXRoICsgIiNuZXciKQorICAgICAgICAgICAgICAgIG9zLnJlbmFtZShkZXN0cGF0aCArICIjbmV3IiwgZGVzdHBhdGgpCiAgICAgICAgICAgICAgICAgZGlkY29weSA9IDEKICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgICAgICBwcmludCgnbW92ZWZpbGU6IGNvcHknLCBzcmMsICctPicsIGRlc3QsICdmYWlsZWQuJywgZSkKQEAgLTgxMyw5ICs4MTQsOSBAQAogICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGlmIG5ld210aW1lOgotICAgICAgICBvcy51dGltZShkZXN0LCAobmV3bXRpbWUsIG5ld210aW1lKSkKKyAgICAgICAgb3MudXRpbWUoZGVzdHBhdGgsIChuZXdtdGltZSwgbmV3bXRpbWUpKQogICAgIGVsc2U6Ci0gICAgICAgIG9zLnV0aW1lKGRlc3QsIChzc3RhdFtzdGF0LlNUX0FUSU1FXSwgc3N0YXRbc3RhdC5TVF9NVElNRV0pKQorICAgICAgICBvcy51dGltZShkZXN0cGF0aCwgKHNzdGF0W3N0YXQuU1RfQVRJTUVdLCBzc3RhdFtzdGF0LlNUX01USU1FXSkpCiAgICAgICAgIG5ld210aW1lID0gc3N0YXRbc3RhdC5TVF9NVElNRV0KICAgICByZXR1cm4gbmV3bXRpbWUKIApAQCAtMTUwMiw3ICsxNTAzLDcgQEAKIAogZGVmIGxvYWRfcGx1Z2lucyhsb2dnZXIsIHBsdWdpbnMsIHBsdWdpbnBhdGgpOgogICAgIGRlZiBsb2FkX3BsdWdpbihuYW1lKToKLSAgICAgICAgbG9nZ2VyLmRlYnVnKCdMb2FkaW5nIHBsdWdpbiAlcycgJSBuYW1lKQorICAgICAgICBsb2dnZXIuZGVidWcoMSwgJ0xvYWRpbmcgcGx1Z2luICVzJyAlIG5hbWUpCiAgICAgICAgIGZwLCBwYXRobmFtZSwgZGVzY3JpcHRpb24gPSBpbXAuZmluZF9tb2R1bGUobmFtZSwgW3BsdWdpbnBhdGhdKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXR1cm4gaW1wLmxvYWRfbW9kdWxlKG5hbWUsIGZwLCBwYXRobmFtZSwgZGVzY3JpcHRpb24pCkBAIC0xNTEwLDcgKzE1MTEsNyBAQAogICAgICAgICAgICAgaWYgZnA6CiAgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQogCi0gICAgbG9nZ2VyLmRlYnVnKCdMb2FkaW5nIHBsdWdpbnMgZnJvbSAlcy4uLicgJSBwbHVnaW5wYXRoKQorICAgIGxvZ2dlci5kZWJ1ZygxLCAnTG9hZGluZyBwbHVnaW5zIGZyb20gJXMuLi4nICUgcGx1Z2lucGF0aCkKIAogICAgIGV4cGFuZGVkID0gKGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4ocGx1Z2lucGF0aCwgJyonICsgZXh0KSkKICAgICAgICAgICAgICAgICBmb3IgZXh0IGluIHB5dGhvbl9leHRlbnNpb25zKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JibGF5ZXJzL2FjdGlvbi5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYmxheWVycy9hY3Rpb24ucHkKaW5kZXggY2Y5NDcwNC4uYjEzMjZlNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JibGF5ZXJzL2FjdGlvbi5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmJsYXllcnMvYWN0aW9uLnB5CkBAIC0xLDcgKzEsOSBAQAogaW1wb3J0IGZubWF0Y2gKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKIGltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQogCiBpbXBvcnQgYmIudXRpbHMKIApAQCAtMzIsMTAgKzM0LDI2IEBACiAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJVbmFibGUgdG8gZmluZCBiYmxheWVycy5jb25mXG4iKQogICAgICAgICAgICAgcmV0dXJuIDEKIAotICAgICAgICBub3RhZGRlZCwgXyA9IGJiLnV0aWxzLmVkaXRfYmJsYXllcnNfY29uZihiYmxheWVyc19jb25mLCBsYXllcmRpciwgTm9uZSkKLSAgICAgICAgaWYgbm90YWRkZWQ6Ci0gICAgICAgICAgICBmb3IgaXRlbSBpbiBub3RhZGRlZDoKLSAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJTcGVjaWZpZWQgbGF5ZXIgJXMgaXMgYWxyZWFkeSBpbiBCQkxBWUVSU1xuIiAlIGl0ZW0pCisgICAgICAgICMgQmFjayB1cCBiYmxheWVycy5jb25mIHRvIHRlbXBkaXIgYmVmb3JlIHdlIGFkZCBsYXllcnMKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICBiYWNrdXAgPSB0ZW1wZGlyICsgIi9iYmxheWVycy5jb25mLmJhayIKKyAgICAgICAgc2h1dGlsLmNvcHkyKGJibGF5ZXJzX2NvbmYsIGJhY2t1cCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBub3RhZGRlZCwgXyA9IGJiLnV0aWxzLmVkaXRfYmJsYXllcnNfY29uZihiYmxheWVyc19jb25mLCBsYXllcmRpciwgTm9uZSkKKyAgICAgICAgICAgIGlmIG5vdCAoYXJncy5mb3JjZSBvciBub3RhZGRlZCk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbmZvaWwucGFyc2VSZWNpcGVzKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgYmIudGluZm9pbC5UaW5mb2lsVUlFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgICMgUmVzdG9yZSB0aGUgYmFjayB1cCBjb3B5IG9mIGJibGF5ZXJzLmNvbmYKKyAgICAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkyKGJhY2t1cCwgYmJsYXllcnNfY29uZikKKyAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIlBhcnNlIGZhaWx1cmUgd2l0aCB0aGUgc3BlY2lmaWVkIGxheWVyIGFkZGVkIikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiBub3RhZGRlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlNwZWNpZmllZCBsYXllciAlcyBpcyBhbHJlYWR5IGluIEJCTEFZRVJTXG4iICUgaXRlbSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICMgUmVtb3ZlIHRoZSBiYWNrIHVwIGNvcHkgb2YgYmJsYXllcnMuY29uZgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wZGlyKQogCiAgICAgZGVmIGRvX3JlbW92ZV9sYXllcihzZWxmLCBhcmdzKToKICAgICAgICAgIiIiUmVtb3ZlIGEgbGF5ZXIgZnJvbSBiYmxheWVycy5jb25mLiIiIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL2JibGF5ZXJzL2xheWVyaW5kZXgucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmJsYXllcnMvbGF5ZXJpbmRleC5weQppbmRleCA1MDZjMTEwLi45YWYzODVkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmJsYXllcnMvbGF5ZXJpbmRleC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmJsYXllcnMvbGF5ZXJpbmRleC5weQpAQCAtMjQ3LDYgKzI0Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIkFkZGluZyBsYXllciBcIiVzXCIgdG8gY29uZi9iYmxheWVycy5jb25mIiAlIG5hbWUpCiAgICAgICAgICAgICAgICAgICAgIGxvY2FsYXJncyA9IGFyZ3BhcnNlLk5hbWVzcGFjZSgpCiAgICAgICAgICAgICAgICAgICAgIGxvY2FsYXJncy5sYXllcmRpciA9IGxheWVyZGlyCisgICAgICAgICAgICAgICAgICAgIGxvY2FsYXJncy5mb3JjZSA9IGFyZ3MuZm9yY2UKICAgICAgICAgICAgICAgICAgICAgc2VsZi5kb19hZGRfbGF5ZXIobG9jYWxhcmdzKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJzZXJ2L3NlcnYucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJzZXJ2L3NlcnYucHkKaW5kZXggYTdlZmE1OC4uNmE5OTcyOCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3Byc2Vydi9zZXJ2LnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wcnNlcnYvc2Vydi5weQpAQCAtNiwxMCArNiwxMSBAQAogaW1wb3J0IHNvY2tldAogaW1wb3J0IGlvCiBpbXBvcnQgc3FsaXRlMwotaW1wb3J0IGJiLnNlcnZlci54bWxycGMKK2ltcG9ydCBiYi5zZXJ2ZXIueG1scnBjY2xpZW50CiBpbXBvcnQgcHJzZXJ2CiBpbXBvcnQgcHJzZXJ2LmRiCiBpbXBvcnQgZXJybm8KK2ltcG9ydCBzZWxlY3QKIAogbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuUFJzZXJ2IikKIApAQCAtNTksNiArNjAsOCBAQAogICAgICAgICBzZWxmLnJlZ2lzdGVyX2Z1bmN0aW9uKHNlbGYuaW1wb3J0b25lLCAiaW1wb3J0b25lIikKICAgICAgICAgc2VsZi5yZWdpc3Rlcl9pbnRyb3NwZWN0aW9uX2Z1bmN0aW9ucygpCiAKKyAgICAgICAgc2VsZi5xdWl0cGlwZWluLCBzZWxmLnF1aXRwaXBlb3V0ID0gb3MucGlwZSgpCisKICAgICAgICAgc2VsZi5yZXF1ZXN0cXVldWUgPSBxdWV1ZS5RdWV1ZSgpCiAgICAgICAgIHNlbGYuaGFuZGxlcnRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0ID0gc2VsZi5wcm9jZXNzX3JlcXVlc3RfdGhyZWFkKQogICAgICAgICBzZWxmLmhhbmRsZXJ0aHJlYWQuZGFlbW9uID0gRmFsc2UKQEAgLTc1LDEyICs3OCwxNCBAQAogCiAgICAgICAgIGJiLnV0aWxzLnNldF9wcm9jZXNzX25hbWUoIlBSU2VydiBIYW5kbGVyIikKIAotICAgICAgICB3aGlsZSBub3Qgc2VsZi5xdWl0OgorICAgICAgICB3aGlsZSBub3Qgc2VsZi5xdWl0ZmxhZzoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpID0gc2VsZi5yZXF1ZXN0cXVldWUuZ2V0KFRydWUsIDMwKQogICAgICAgICAgICAgZXhjZXB0IHF1ZXVlLkVtcHR5OgogICAgICAgICAgICAgICAgIHNlbGYudGFibGUuc3luY19pZl9kaXJ0eSgpCiAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHJlcXVlc3QgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuZmluaXNoX3JlcXVlc3QocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCiAgICAgICAgICAgICAgICAgc2VsZi5zaHV0ZG93bl9yZXF1ZXN0KHJlcXVlc3QpCkBAIC0xMDAsNyArMTA1LDggQEAKICAgICBkZWYgc2lndGVybV9oYW5kbGVyKHNlbGYsIHNpZ251bSwgc3RhY2spOgogICAgICAgICBpZiBzZWxmLnRhYmxlOgogICAgICAgICAgICAgc2VsZi50YWJsZS5zeW5jKCkKLSAgICAgICAgc2VsZi5xdWl0PVRydWUKKyAgICAgICAgc2VsZi5xdWl0KCkKKyAgICAgICAgc2VsZi5yZXF1ZXN0cXVldWUucHV0KChOb25lLCBOb25lKSkKIAogICAgIGRlZiBwcm9jZXNzX3JlcXVlc3Qoc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpOgogICAgICAgICBzZWxmLnJlcXVlc3RxdWV1ZS5wdXQoKHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKSkKQEAgLTEzNiw3ICsxNDIsNyBAQAogICAgICAgICByZXR1cm4gc2VsZi50YWJsZS5pbXBvcnRvbmUodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0sIHZhbHVlKQogCiAgICAgZGVmIHBpbmcoc2VsZik6Ci0gICAgICAgIHJldHVybiBub3Qgc2VsZi5xdWl0CisgICAgICAgIHJldHVybiBub3Qgc2VsZi5xdWl0ZmxhZwogCiAgICAgZGVmIGdldGluZm8oc2VsZik6CiAgICAgICAgIHJldHVybiAoc2VsZi5ob3N0LCBzZWxmLnBvcnQpCkBAIC0xNTIsMTIgKzE1OCwxNyBAQAogICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBxdWl0KHNlbGYpOgotICAgICAgICBzZWxmLnF1aXQ9VHJ1ZQorICAgICAgICBzZWxmLnF1aXRmbGFnPVRydWUKKyAgICAgICAgb3Mud3JpdGUoc2VsZi5xdWl0cGlwZW91dCwgYiJxIikKKyAgICAgICAgb3MuY2xvc2Uoc2VsZi5xdWl0cGlwZW91dCkKICAgICAgICAgcmV0dXJuCiAKICAgICBkZWYgd29ya19mb3JldmVyKHNlbGYsKToKLSAgICAgICAgc2VsZi5xdWl0ID0gRmFsc2UKLSAgICAgICAgc2VsZi50aW1lb3V0ID0gMC41CisgICAgICAgIHNlbGYucXVpdGZsYWcgPSBGYWxzZQorICAgICAgICAjIFRoaXMgdGltZW91dCBhcHBsaWVzIHRvIHRoZSBwb2xsIGluIFRDUFNlcnZlciwgd2UgbmVlZCB0aGUgc2VsZWN0IAorICAgICAgICAjIGJlbG93IHRvIHdha2Ugb24gb3VyIHF1aXQgcGlwZSBjbG9zaW5nLiBXZSBvbmx5IGV2ZXIgY2FsbCBpbnRvIGhhbmRsZV9yZXF1ZXN0CisgICAgICAgICMgaWYgdGhlcmUgaXMgZGF0YSB0aGVyZS4KKyAgICAgICAgc2VsZi50aW1lb3V0ID0gMC4wMQogCiAgICAgICAgIGJiLnV0aWxzLnNldF9wcm9jZXNzX25hbWUoIlBSU2VydiIpCiAKQEAgLTE2OSwxMiArMTgwLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5kYmZpbGUsIHNlbGYuaG9zdCwgc2VsZi5wb3J0LCBzdHIob3MuZ2V0cGlkKCkpKSkKIAogICAgICAgICBzZWxmLmhhbmRsZXJ0aHJlYWQuc3RhcnQoKQotICAgICAgICB3aGlsZSBub3Qgc2VsZi5xdWl0OgotICAgICAgICAgICAgc2VsZi5oYW5kbGVfcmVxdWVzdCgpCisgICAgICAgIHdoaWxlIG5vdCBzZWxmLnF1aXRmbGFnOgorICAgICAgICAgICAgcmVhZHkgPSBzZWxlY3Quc2VsZWN0KFtzZWxmLmZpbGVubygpLCBzZWxmLnF1aXRwaXBlaW5dLCBbXSwgW10sIDMwKQorICAgICAgICAgICAgaWYgc2VsZi5xdWl0ZmxhZzoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgc2VsZi5maWxlbm8oKSBpbiByZWFkeVswXToKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9yZXF1ZXN0KCkKICAgICAgICAgc2VsZi5oYW5kbGVydGhyZWFkLmpvaW4oKQogICAgICAgICBzZWxmLmRiLmRpc2Nvbm5lY3QoKQogICAgICAgICBsb2dnZXIuaW5mbygiUFJTZXJ2ZXI6IHN0b3BwaW5nLi4uIikKICAgICAgICAgc2VsZi5zZXJ2ZXJfY2xvc2UoKQorICAgICAgICBvcy5jbG9zZShzZWxmLnF1aXRwaXBlaW4pCiAgICAgICAgIHJldHVybgogCiAgICAgZGVmIHN0YXJ0KHNlbGYpOgpAQCAtMTgyLDYgKzE5OCw3IEBACiAgICAgICAgICAgICBwaWQgPSBzZWxmLmRhZW1vbml6ZSgpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBwaWQgPSBzZWxmLmZvcmsoKQorICAgICAgICAgICAgc2VsZi5waWQgPSBwaWQKIAogICAgICAgICAjIEVuc3VyZSBib3RoIHRoZSBwYXJlbnQgc2VlcyB0aGlzIGFuZCB0aGUgY2hpbGQgZnJvbSB0aGUgd29ya19mb3JldmVyIGxvZyBlbnRyeSBhYm92ZQogICAgICAgICBsb2dnZXIuaW5mbygiU3RhcnRlZCBQUlNlcnZlciB3aXRoIERCZmlsZTogJXMsIElQOiAlcywgUE9SVDogJXMsIFBJRDogJXMiICUKQEAgLTMwMCw3ICszMTcsNyBAQAogICAgICAgICAgICAgaG9zdCwgcG9ydCA9IHNpbmdsZXRvbi5nZXRpbmZvKCkKICAgICAgICAgc2VsZi5ob3N0ID0gaG9zdAogICAgICAgICBzZWxmLnBvcnQgPSBwb3J0Ci0gICAgICAgIHNlbGYuY29ubmVjdGlvbiwgc2VsZi50cmFuc3BvcnQgPSBiYi5zZXJ2ZXIueG1scnBjLl9jcmVhdGVfc2VydmVyKHNlbGYuaG9zdCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmNvbm5lY3Rpb24sIHNlbGYudHJhbnNwb3J0ID0gYmIuc2VydmVyLnhtbHJwY2NsaWVudC5fY3JlYXRlX3NlcnZlcihzZWxmLmhvc3QsIHNlbGYucG9ydCkKIAogICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6CiAgICAgICAgIHRyeToKQEAgLTQyOCw2ICs0NDUsOSBAQAogZGVmIGF1dG9fc3RhcnQoZCk6CiAgICAgZ2xvYmFsIHNpbmdsZXRvbgogCisgICAgIyBTaHV0ZG93biBhbnkgZXhpc3RpbmcgUFIgU2VydmVyCisgICAgYXV0b19zaHV0ZG93bigpCisKICAgICBob3N0X3BhcmFtcyA9IGxpc3QoZmlsdGVyKE5vbmUsIChkLmdldFZhcignUFJTRVJWX0hPU1QnKSBvciAnJykuc3BsaXQoJzonKSkpCiAgICAgaWYgbm90IGhvc3RfcGFyYW1zOgogICAgICAgICByZXR1cm4gTm9uZQpAQCAtNDY0LDcgKzQ4NCw3IEBACiAgICAgICAgIGxvZ2dlci5jcml0aWNhbCgiUFJzZXJ2aWNlICVzOiVkIG5vdCBhdmFpbGFibGUiICUgKGhvc3QsIHBvcnQpKQogICAgICAgICByYWlzZSBQUlNlcnZpY2VDb25maWdFcnJvcgogCi1kZWYgYXV0b19zaHV0ZG93bihkPU5vbmUpOgorZGVmIGF1dG9fc2h1dGRvd24oKToKICAgICBnbG9iYWwgc2luZ2xldG9uCiAgICAgaWYgc2luZ2xldG9uOgogICAgICAgICBob3N0LCBwb3J0ID0gc2luZ2xldG9uLmdldGluZm8oKQpAQCAtNDcyLDYgKzQ5MiwxMSBAQAogICAgICAgICAgICAgUFJTZXJ2ZXJDb25uZWN0aW9uKGhvc3QsIHBvcnQpLnRlcm1pbmF0ZSgpCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIGxvZ2dlci5jcml0aWNhbCgiU3RvcCBQUlNlcnZpY2UgJXM6JWQgZmFpbGVkIiAlIChob3N0LHBvcnQpKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLndhaXRwaWQoc2luZ2xldG9uLnByc2Vydi5waWQsIDApCisgICAgICAgIGV4Y2VwdCBDaGlsZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2luZ2xldG9uID0gTm9uZQogCiBkZWYgcGluZyhob3N0LCBwb3J0KToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbGxlY3Rvci91cmxzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29sbGVjdG9yL3VybHMucHkKaW5kZXggNjQ3MjJmMi4uODg4MTc1ZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29sbGVjdG9yL3VybHMucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29sbGVjdG9yL3VybHMucHkKQEAgLTEsNyArMSw3IEBACiAjCiAjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgogIwotIyBDb3B5cmlnaHQgKEMpIDIwMTQgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAoQykgMjAxNC0yMDE3ICAgSW50ZWwgQ29ycG9yYXRpb24KICMKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTE3LDkgKzE3LDExIEBACiAjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCiAKIAotZnJvbSBkamFuZ28uY29uZi51cmxzIGltcG9ydCBwYXR0ZXJucywgaW5jbHVkZSwgdXJsCitmcm9tIGRqYW5nby5jb25mLnVybHMgaW1wb3J0IGluY2x1ZGUsIHVybAogCi11cmxwYXR0ZXJucyA9IHBhdHRlcm5zKCdibGRjb2xsZWN0b3Iudmlld3MnLAoraW1wb3J0IGJsZGNvbGxlY3Rvci52aWV3cworCit1cmxwYXR0ZXJucyA9IFsKICAgICAgICAgIyBsYW5kaW5nIHBvaW50IGZvciBwdXNoaW5nIGEgYml0YmFrZV9ldmVudGxvZy5qc29uIGZpbGUgdG8gdGhpcyB0b2FzdGVyIGluc3RhY2UKLSAgICAgICAgdXJsKHInXmV2ZW50ZmlsZSQnLCAnZXZlbnRmaWxlJywgbmFtZT0nZXZlbnRmaWxlJyksCi0gICAgICAgICkKKyAgICAgICAgdXJsKHInXmV2ZW50ZmlsZSQnLCBibGRjb2xsZWN0b3Iudmlld3MuZXZlbnRmaWxlLCBuYW1lPSdldmVudGZpbGUnKSwKK10KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvYmJjb250cm9sbGVyLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9iYmNvbnRyb2xsZXIucHkKaW5kZXggOTEyZjY3Yi4uNTE5NTYwMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9iYmNvbnRyb2xsZXIucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9iYmNvbnRyb2xsZXIucHkKQEAgLTM3LDggKzM3LDggQEAKICAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBiZSk6Ci0gICAgICAgIGltcG9ydCBiYi5zZXJ2ZXIueG1scnBjCi0gICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IGJiLnNlcnZlci54bWxycGMuX2NyZWF0ZV9zZXJ2ZXIoYmUuYmJhZGRyZXNzLAorICAgICAgICBpbXBvcnQgYmIuc2VydmVyLnhtbHJwY2NsaWVudAorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBiYi5zZXJ2ZXIueG1scnBjY2xpZW50Ll9jcmVhdGVfc2VydmVyKGJlLmJiYWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQoYmUuYmJwb3J0KSlbMF0KIAogICAgIGRlZiBfcnVuQ29tbWFuZChzZWxmLCBjb21tYW5kKToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbG9jYWxob3N0YmVjb250cm9sbGVyLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9sb2NhbGhvc3RiZWNvbnRyb2xsZXIucHkKaW5kZXggMTIwNzEwMi4uNGMxNzU2MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9sb2NhbGhvc3RiZWNvbnRyb2xsZXIucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9sb2NhbGhvc3RiZWNvbnRyb2xsZXIucHkKQEAgLTI0LDYgKzI0LDcgQEAKIGltcG9ydCBzeXMKIGltcG9ydCByZQogaW1wb3J0IHNodXRpbAoraW1wb3J0IHRpbWUKIGZyb20gZGphbmdvLmRiIGltcG9ydCB0cmFuc2FjdGlvbgogZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBRCiBmcm9tIGJsZGNvbnRyb2wubW9kZWxzIGltcG9ydCBCdWlsZEVudmlyb25tZW50LCBCUkxheWVyLCBCUlZhcmlhYmxlLCBCUlRhcmdldCwgQlJCaXRiYWtlCkBAIC01MSwxMiArNTIsMTQgQEAKICAgICAgICAgc2VsZi5wb2t5ZGlybmFtZSA9IE5vbmUKICAgICAgICAgc2VsZi5pc2xheWVyc2V0ID0gRmFsc2UKIAotICAgIGRlZiBfc2hlbGxjbWQoc2VsZiwgY29tbWFuZCwgY3dkPU5vbmUsIG5vd2FpdD1GYWxzZSk6CisgICAgZGVmIF9zaGVsbGNtZChzZWxmLCBjb21tYW5kLCBjd2Q9Tm9uZSwgbm93YWl0PUZhbHNlLGVudj1Ob25lKToKICAgICAgICAgaWYgY3dkIGlzIE5vbmU6CiAgICAgICAgICAgICBjd2QgPSBzZWxmLmJlLnNvdXJjZWRpcgorICAgICAgICBpZiBlbnYgaXMgTm9uZToKKyAgICAgICAgICAgIGVudj1vcy5lbnZpcm9uLmNvcHkoKQogCi0gICAgICAgIGxvZ2dlci5kZWJ1ZygibGJjX3NoZWxsY21tZDogKCVzKSAlcyIgJSAoY3dkLCBjb21tYW5kKSkKLSAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY29tbWFuZCwgY3dkID0gY3dkLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBsb2dnZXIuZGVidWcoImxiY19zaGVsbGNtZDogKCVzKSAlcyIgJSAoY3dkLCBjb21tYW5kKSkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY29tbWFuZCwgY3dkID0gY3dkLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLCBlbnY9ZW52KQogICAgICAgICBpZiBub3dhaXQ6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgKG91dCxlcnIpID0gcC5jb21tdW5pY2F0ZSgpCkBAIC04NSw2ICs4OCwxMSBAQAogICAgICAgICByZXR1cm4gbG9jYWxfY2hlY2tvdXRfcGF0aAogCiAKKyAgICBkZWYgc2V0Q2xvbmVTdGF0dXMoc2VsZixiaXRiYWtlLHN0YXR1cyx0b3RhbCxjdXJyZW50KToKKyAgICAgICAgYml0YmFrZS5yZXEuYnVpbGQucmVwb3NfY2xvbmVkPWN1cnJlbnQKKyAgICAgICAgYml0YmFrZS5yZXEuYnVpbGQucmVwb3NfdG9fY2xvbmU9dG90YWwKKyAgICAgICAgYml0YmFrZS5yZXEuYnVpbGQuc2F2ZSgpCisKICAgICBkZWYgc2V0TGF5ZXJzKHNlbGYsIGJpdGJha2UsIGxheWVycywgdGFyZ2V0cyk6CiAgICAgICAgICIiIiBhIHdvcmQgb2YgYXR0ZW50aW9uOiBieSBjb252ZW50aW9uLCB0aGUgZmlyc3QgbGF5ZXIgZm9yIGFueSBidWlsZCB3aWxsIGJlIHBva3khICIiIgogCkBAIC05Miw2ICsxMDAsOCBAQAogCiAgICAgICAgIGxheWVybGlzdCA9IFtdCiAgICAgICAgIG5vbmdpdGxheWVybGlzdCA9IFtdCisgICAgICAgIGdpdF9lbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICAjIChub3RlOiBhZGQgY3VzdG9tIGVudmlyb25tZW50IHNldHRpbmdzIGhlcmUpCiAKICAgICAgICAgIyBzZXQgbGF5ZXJzIGluIHRoZSBsYXllcnNvdXJjZQogCkBAIC0xMzIsNyArMTQyLDcgQEAKICAgICAgICAgY2FjaGVkX2xheWVycyA9IHt9CiAKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZm9yIHJlbW90ZXMgaW4gc2VsZi5fc2hlbGxjbWQoImdpdCByZW1vdGUgLXYiLCBzZWxmLmJlLnNvdXJjZWRpcikuc3BsaXQoIlxuIik6CisgICAgICAgICAgICBmb3IgcmVtb3RlcyBpbiBzZWxmLl9zaGVsbGNtZCgiZ2l0IHJlbW90ZSAtdiIsIHNlbGYuYmUuc291cmNlZGlyLGVudj1naXRfZW52KS5zcGxpdCgiXG4iKToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHJlbW90ZSA9IHJlbW90ZXMuc3BsaXQoIlx0IilbMV0uc3BsaXQoIiAiKVswXQogICAgICAgICAgICAgICAgICAgICBpZiByZW1vdGUgbm90IGluIGNhY2hlZF9sYXllcnM6CkBAIC0xNDcsNyArMTU3LDEzIEBACiAgICAgICAgIGxvZ2dlci5pbmZvKCJVc2luZyBwcmUtY2hlY2tlZCBvdXQgc291cmNlIGZvciBsYXllciAlcyIsIGNhY2hlZF9sYXllcnMpCiAKICAgICAgICAgIyAzLiBjaGVja291dCB0aGUgcmVwb3NpdG9yaWVzCisgICAgICAgIGNsb25lX2NvdW50PTAKKyAgICAgICAgY2xvbmVfdG90YWw9bGVuKGdpdHJlcG9zLmtleXMoKSkKKyAgICAgICAgc2VsZi5zZXRDbG9uZVN0YXR1cyhiaXRiYWtlLCdTdGFydGVkJyxjbG9uZV90b3RhbCxjbG9uZV9jb3VudCkKICAgICAgICAgZm9yIGdpdHVybCwgY29tbWl0IGluIGdpdHJlcG9zLmtleXMoKToKKyAgICAgICAgICAgIHNlbGYuc2V0Q2xvbmVTdGF0dXMoYml0YmFrZSwncHJvZ3Jlc3MnLGNsb25lX3RvdGFsLGNsb25lX2NvdW50KQorICAgICAgICAgICAgY2xvbmVfY291bnQgKz0gMQorCiAgICAgICAgICAgICBsb2NhbGRpcm5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5iZS5zb3VyY2VkaXIsIHNlbGYuZ2V0R2l0Q2xvbmVEaXJlY3RvcnkoZ2l0dXJsLCBjb21taXQpKQogICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IGdpdHVybCAlczolcyBjaGVja2luZyBvdXQgaW4gY3VycmVudCBkaXJlY3RvcnkgJXMiICUgKGdpdHVybCwgY29tbWl0LCBsb2NhbGRpcm5hbWUpKQogCkBAIC0xNTUsNyArMTcxLDcgQEAKICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGxvY2FsZGlybmFtZSk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBsb2NhbHJlbW90ZXMgPSBzZWxmLl9zaGVsbGNtZCgiZ2l0IHJlbW90ZSAtdiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZGlybmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxkaXJuYW1lLGVudj1naXRfZW52KQogICAgICAgICAgICAgICAgICAgICBpZiBub3QgZ2l0dXJsIGluIGxvY2FscmVtb3RlcyBhbmQgY29tbWl0ICE9ICdIRUFEJzoKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEJ1aWxkU2V0dXBFeGNlcHRpb24oIkV4aXN0aW5nIGdpdCByZXBvc2l0b3J5IGF0ICVzLCBidXQgd2l0aCBkaWZmZXJlbnQgcmVtb3RlcyAoJyVzJywgZXhwZWN0ZWQgJyVzJykuIFRvYXN0ZXIgd2lsbCBub3QgY29udGludWUgb3V0IG9mIGZlYXIgb2YgZGFtYWdpbmcgc29tZXRoaW5nLiIgJSAobG9jYWxkaXJuYW1lLCAiLCAiLmpvaW4obG9jYWxyZW1vdGVzLnNwbGl0KCJcbiIpKSwgZ2l0dXJsKSkKICAgICAgICAgICAgICAgICBleGNlcHQgU2hlbGxDbWRFeGNlcHRpb246CkBAIC0xNjUsMTggKzE4MSwxOCBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBpZiBnaXR1cmwgaW4gY2FjaGVkX2xheWVyczoKICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXIgZ2l0LWNvcHlpbmcgJXMgdG8gJXMiICUgKGNhY2hlZF9sYXllcnNbZ2l0dXJsXSwgbG9jYWxkaXJuYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2hlbGxjbWQoImdpdCBjbG9uZSBcIiVzXCIgXCIlc1wiIiAlIChjYWNoZWRfbGF5ZXJzW2dpdHVybF0sIGxvY2FsZGlybmFtZSkpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3NoZWxsY21kKCJnaXQgcmVtb3RlIHJlbW92ZSBvcmlnaW4iLCBsb2NhbGRpcm5hbWUpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3NoZWxsY21kKCJnaXQgcmVtb3RlIGFkZCBvcmlnaW4gXCIlc1wiIiAlIGdpdHVybCwgbG9jYWxkaXJuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zaGVsbGNtZCgiZ2l0IGNsb25lIFwiJXNcIiBcIiVzXCIiICUgKGNhY2hlZF9sYXllcnNbZ2l0dXJsXSwgbG9jYWxkaXJuYW1lKSxlbnY9Z2l0X2VudikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2hlbGxjbWQoImdpdCByZW1vdGUgcmVtb3ZlIG9yaWdpbiIsIGxvY2FsZGlybmFtZSxlbnY9Z2l0X2VudikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2hlbGxjbWQoImdpdCByZW1vdGUgYWRkIG9yaWdpbiBcIiVzXCIiICUgZ2l0dXJsLCBsb2NhbGRpcm5hbWUsZW52PWdpdF9lbnYpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IGNsb25pbmcgJXMgaW4gJXMiICUgKGdpdHVybCwgbG9jYWxkaXJuYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2hlbGxjbWQoJ2dpdCBjbG9uZSAiJXMiICIlcyInICUgKGdpdHVybCwgbG9jYWxkaXJuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2hlbGxjbWQoJ2dpdCBjbG9uZSAiJXMiICIlcyInICUgKGdpdHVybCwgbG9jYWxkaXJuYW1lKSxlbnY9Z2l0X2VudikKIAogICAgICAgICAgICAgIyBicmFuY2ggbWFnaWMgbmFtZSAiSEVBRCIgd2lsbCBpbmhpYml0IGNoZWNrb3V0CiAgICAgICAgICAgICBpZiBjb21taXQgIT0gIkhFQUQiOgogICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBjaGVja2luZyBvdXQgY29tbWl0ICVzIHRvICVzICIgJSAoY29tbWl0LCBsb2NhbGRpcm5hbWUpKQogICAgICAgICAgICAgICAgIHJlZiA9IGNvbW1pdCBpZiByZS5tYXRjaCgnXlthLWZBLUYwLTldKyQnLCBjb21taXQpIGVsc2UgJ29yaWdpbi8lcycgJSBjb21taXQKLSAgICAgICAgICAgICAgICBzZWxmLl9zaGVsbGNtZCgnZ2l0IGZldGNoIC0tYWxsICYmIGdpdCByZXNldCAtLWhhcmQgIiVzIicgJSByZWYsIGxvY2FsZGlybmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9zaGVsbGNtZCgnZ2l0IGZldGNoIC0tYWxsICYmIGdpdCByZXNldCAtLWhhcmQgIiVzIicgJSByZWYsIGxvY2FsZGlybmFtZSxlbnY9Z2l0X2VudikKIAogICAgICAgICAgICAgIyB0YWtlIHRoZSBsb2NhbGRpcm5hbWUgYXMgcG9reSBkaXIgaWYgd2UgY2FuIGZpbmQgdGhlIG9lLWluaXQtYnVpbGQtZW52CiAgICAgICAgICAgICBpZiBzZWxmLnBva3lkaXJuYW1lIGlzIE5vbmUgYW5kIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihsb2NhbGRpcm5hbWUsICJvZS1pbml0LWJ1aWxkLWVudiIpKToKQEAgLTE4Niw3ICsyMDIsNyBAQAogICAgICAgICAgICAgICAgICMgbWFrZSBzdXJlIHdlIGhhdmUgYSB3b3JraW5nIGJpdGJha2UKICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYucG9reWRpcm5hbWUsICdiaXRiYWtlJykpOgogICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogY2hlY2tpbmcgYml0YmFrZSBpbnRvIHRoZSBwb2t5IGRpcm5hbWUgJXMgIiAlIHNlbGYucG9reWRpcm5hbWUpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3NoZWxsY21kKCJnaXQgY2xvbmUgLWIgXCIlc1wiIFwiJXNcIiBcIiVzXCIgIiAlIChiaXRiYWtlLmNvbW1pdCwgYml0YmFrZS5naXR1cmwsIG9zLnBhdGguam9pbihzZWxmLnBva3lkaXJuYW1lLCAnYml0YmFrZScpKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2hlbGxjbWQoImdpdCBjbG9uZSAtYiBcIiVzXCIgXCIlc1wiIFwiJXNcIiAiICUgKGJpdGJha2UuY29tbWl0LCBiaXRiYWtlLmdpdHVybCwgb3MucGF0aC5qb2luKHNlbGYucG9reWRpcm5hbWUsICdiaXRiYWtlJykpLGVudj1naXRfZW52KQogCiAgICAgICAgICAgICAjIHZlcmlmeSBvdXIgcmVwb3NpdG9yaWVzCiAgICAgICAgICAgICBmb3IgbmFtZSwgZGlycGF0aCBpbiBnaXRyZXBvc1soZ2l0dXJsLCBjb21taXQpXToKQEAgLTE5OCw2ICsyMTQsNyBAQAogICAgICAgICAgICAgICAgIGlmIG5hbWUgIT0gImJpdGJha2UiOgogICAgICAgICAgICAgICAgICAgICBsYXllcmxpc3QuYXBwZW5kKGxvY2FsZGlycGF0aC5yc3RyaXAoIi8iKSkKIAorICAgICAgICBzZWxmLnNldENsb25lU3RhdHVzKGJpdGJha2UsJ2NvbXBsZXRlJyxjbG9uZV90b3RhbCxjbG9uZV9jb3VudCkKICAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IGN1cnJlbnQgbGF5ZXIgbGlzdCAlcyAiICUgcGZvcm1hdChsYXllcmxpc3QpKQogCiAgICAgICAgIGlmIHNlbGYucG9reWRpcm5hbWUgaXMgTm9uZSBhbmQgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYuYmUuc291cmNlZGlyLCAib2UtaW5pdC1idWlsZC1lbnYiKSk6CkBAIC0zMTksMTYgKzMzNiwzMiBAQAogICAgICAgICAgICAgICAgIGNvbmYud3JpdGUoJyVzPSIlcyJcbicgJSAodmFyLm5hbWUsIHZhci52YWx1ZSkpCiAgICAgICAgICAgICBjb25mLndyaXRlKCdJTkhFUklUKz0idG9hc3RlciBidWlsZGhpc3RvcnkiJykKIAorICAgICAgICAjIGNsZWFuIHRoZSBUb2FzdGVyIHRvIGJ1aWxkIGVudmlyb25tZW50CisgICAgICAgIGVudl9jbGVhbiA9ICd1bnNldCBCQlBBVEg7JyAjIGNsZWFuIEJCUEFUSCBmb3IgPD0gWVAtMi40LjAKKwogICAgICAgICAjIHJ1biBiaXRiYWtlIHNlcnZlciBmcm9tIHRoZSBjbG9uZQogICAgICAgICBiaXRiYWtlID0gb3MucGF0aC5qb2luKHNlbGYucG9reWRpcm5hbWUsICdiaXRiYWtlJywgJ2JpbicsICdiaXRiYWtlJykKICAgICAgICAgdG9hc3RlcmxheWVycyA9IG9zLnBhdGguam9pbihidWlsZGRpciwiY29uZi90b2FzdGVyLWJibGF5ZXJzLmNvbmYiKQotICAgICAgICBzZWxmLl9zaGVsbGNtZCgnYmFzaCAtYyBcInNvdXJjZSAlcyAlczsgQklUQkFLRV9VST0ia25vdHR5IiAlcyAtLXJlYWQgJXMgLS1yZWFkICVzICcKLSAgICAgICAgICAgICAgICAgICAgICAgJy0tc2VydmVyLW9ubHkgLXQgeG1scnBjIC1CIDAuMC4wLjA6MFwiJyAlIChvZV9pbml0LAorICAgICAgICBzZWxmLl9zaGVsbGNtZCgnJXMgYmFzaCAtYyBcInNvdXJjZSAlcyAlczsgQklUQkFLRV9VST0ia25vdHR5IiAlcyAtLXJlYWQgJXMgLS1yZWFkICVzICcKKyAgICAgICAgICAgICAgICAgICAgICAgJy0tc2VydmVyLW9ubHkgLUIgMC4wLjAuMDowXCInICUgKGVudl9jbGVhbiwgb2VfaW5pdCwKICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRkaXIsIGJpdGJha2UsIGNvbmZwYXRoLCB0b2FzdGVybGF5ZXJzKSwgc2VsZi5iZS5zb3VyY2VkaXIpCiAKICAgICAgICAgIyByZWFkIHBvcnQgbnVtYmVyIGZyb20gYml0YmFrZS5sb2NrCi0gICAgICAgIHNlbGYuYmUuYmJwb3J0ID0gIiIKKyAgICAgICAgc2VsZi5iZS5iYnBvcnQgPSAtMQogICAgICAgICBiYmxvY2sgPSBvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICdiaXRiYWtlLmxvY2snKQorICAgICAgICAjIGFsbG93IDEwIHNlY29uZHMgZm9yIGJiIGxvY2sgZmlsZSB0byBhcHBlYXIgYnV0IGFsc28gYmUgcG9wdWxhdGVkCisgICAgICAgIGZvciBsb2NrX2NoZWNrIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhiYmxvY2spOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiB3YWl0aW5nIGZvciBiYmxvY2sgZmlsZSB0byBhcHBlYXIiKQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgMTAgPCBvcy5zdGF0KGJibG9jaykuc3Rfc2l6ZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IHdhaXRpbmcgZm9yIGJibG9jayBjb250ZW50IHRvIGFwcGVhciIpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBCdWlsZFNldHVwRXhjZXB0aW9uKCJDYW5ub3QgZmluZCBiaXRiYWtlIHNlcnZlciBsb2NrIGZpbGUgJyVzJy4gQWJvcnRpbmcuIiAlIGJibG9jaykKKwogICAgICAgICB3aXRoIG9wZW4oYmJsb2NrKSBhcyBmcGxvY2s6CiAgICAgICAgICAgICBmb3IgbGluZSBpbiBmcGxvY2s6CiAgICAgICAgICAgICAgICAgaWYgIjoiIGluIGxpbmU6CkBAIC0zMzYsNyArMzY5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IGJpdGJha2UgcG9ydCAlcyIsIHNlbGYuYmUuYmJwb3J0KQogICAgICAgICAgICAgICAgICAgICBicmVhawogCi0gICAgICAgIGlmIG5vdCBzZWxmLmJlLmJicG9ydDoKKyAgICAgICAgaWYgLTEgPT0gc2VsZi5iZS5iYnBvcnQ6CiAgICAgICAgICAgICByYWlzZSBCdWlsZFNldHVwRXhjZXB0aW9uKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IGNhbid0IHJlYWQgYml0YmFrZSBwb3J0IGZyb20gJXMiICUgYmJsb2NrKQogCiAgICAgICAgIHNlbGYuYmUuYmJhZGRyZXNzID0gImxvY2FsaG9zdCIKQEAgLTM1NywxMCArMzkwLDExIEBACiAgICAgICAgIGxvZyA9IG9zLnBhdGguam9pbihidWlsZGRpciwgJ3RvYXN0ZXJfdWkubG9nJykKICAgICAgICAgbG9jYWxfYml0YmFrZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MuZ2V0ZW52KCdCQkJBU0VESVInKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JpdGJha2UnKQotICAgICAgICBzZWxmLl9zaGVsbGNtZChbJ2Jhc2ggLWMgXCIoVE9BU1RFUl9CUkJFPSIlcyIgQkJTRVJWRVI9IjAuMC4wLjA6LTEiICcKLSAgICAgICAgICAgICAgICAgICAgICAgICclcyAlcyAtdSB0b2FzdGVydWkgLS10b2tlbj0iIiA+PiVzIDI+JjE7JwotICAgICAgICAgICAgICAgICAgICAgICAgJ0JJVEJBS0VfVUk9Imtub3R0eSIgQkJTRVJWRVI9MC4wLjAuMDotMSAlcyAtbSkmXCInIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICUgKGJyYmUsIGxvY2FsX2JpdGJha2UsIGJidGFyZ2V0cywgbG9nLCBiaXRiYWtlKV0sCisgICAgICAgIHNlbGYuX3NoZWxsY21kKFsnJXMgYmFzaCAtYyBcIihUT0FTVEVSX0JSQkU9IiVzIiBCQlNFUlZFUj0iMC4wLjAuMDolcyIgJworICAgICAgICAgICAgICAgICAgICAgICAgJyVzICVzIC11IHRvYXN0ZXJ1aSAgLS1yZWFkICVzIC0tcmVhZCAlcyAtLXRva2VuPSIiID4+JXMgMj4mMTsnCisgICAgICAgICAgICAgICAgICAgICAgICAnQklUQkFLRV9VST0ia25vdHR5IiBCQlNFUlZFUj0wLjAuMC4wOiVzICVzIC1tKSZcIicgXAorICAgICAgICAgICAgICAgICAgICAgICAgJSAoZW52X2NsZWFuLCBicmJlLCBzZWxmLmJlLmJicG9ydCwgbG9jYWxfYml0YmFrZSwgYmJ0YXJnZXRzLCBjb25mcGF0aCwgdG9hc3RlcmxheWVycywgbG9nLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5iZS5iYnBvcnQsIGJpdGJha2UsKV0sCiAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGRpciwgbm93YWl0PVRydWUpCiAKICAgICAgICAgbG9nZ2VyLmRlYnVnKCdsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IEJ1aWxkIGxhdW5jaGVkLCBleGl0aW5nLiAnCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvY29tbWFuZHMvY2hlY2tzZXR0aW5ncy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9jaGVja3NldHRpbmdzLnB5CmluZGV4IDJlZDk5NGYuLjU4MjExNGEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9jaGVja3NldHRpbmdzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9jaGVja3NldHRpbmdzLnB5CkBAIC0xLDQgKzEsNCBAQAotZnJvbSBkamFuZ28uY29yZS5tYW5hZ2VtZW50LmJhc2UgaW1wb3J0IE5vQXJnc0NvbW1hbmQsIENvbW1hbmRFcnJvcgorZnJvbSBkamFuZ28uY29yZS5tYW5hZ2VtZW50LmJhc2UgaW1wb3J0IEJhc2VDb21tYW5kLCBDb21tYW5kRXJyb3IKIGZyb20gZGphbmdvLmRiIGltcG9ydCB0cmFuc2FjdGlvbgogCiBmcm9tIGRqYW5nby5jb3JlLm1hbmFnZW1lbnQgaW1wb3J0IGNhbGxfY29tbWFuZApAQCAtMTgsNyArMTgsNyBAQAogICAgICAgICByZXR1cm4gb3MucGF0aC5kaXJuYW1lKHBhdGgpCiAKIAotY2xhc3MgQ29tbWFuZChOb0FyZ3NDb21tYW5kKToKK2NsYXNzIENvbW1hbmQoQmFzZUNvbW1hbmQpOgogICAgIGFyZ3MgPSAiIgogICAgIGhlbHAgPSAiVmVyaWZpZXMgdGhhdCB0aGUgY29uZmlndXJlZCBzZXR0aW5ncyBhcmUgdmFsaWQgYW5kIHVzYWJsZSwgb3IgcHJvbXB0cyB0aGUgdXNlciB0byBmaXggdGhlIHNldHRpbmdzLiIKIApAQCAtNzUsNyArNzUsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxfY29tbWFuZCgibG9hZGRhdGEiLCAic2V0dGluZ3MiKQogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVfY29uZiA9IG9zLmVudmlyb24uZ2V0KCJURU1QTEFURUNPTkYiLCAiIikKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgInBva3kiIGluIHRlbXBsYXRlX2NvbmY6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBUb2FzdGVyU2V0dGluZy5vYmplY3RzLmZpbHRlcihuYW1lPSdDVVNUT01fWE1MX09OTFknKS5jb3VudCgpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9ubHkgdXNlIHRoZSBjdXN0b20gc2V0dGluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmICJwb2t5IiBpbiB0ZW1wbGF0ZV9jb25mOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJMb2FkaW5nIHBva3kgY29uZmlndXJhdGlvbiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbF9jb21tYW5kKCJsb2FkZGF0YSIsICJwb2t5IikKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0xNTIsNyArMTU1LDcgQEAKIAogCiAKLSAgICBkZWYgaGFuZGxlX25vYXJncyhzZWxmLCAqKm9wdGlvbnMpOgorICAgIGRlZiBoYW5kbGUoc2VsZiwgKipvcHRpb25zKToKICAgICAgICAgcmV0dmFsID0gMAogICAgICAgICByZXR2YWwgKz0gc2VsZi5fdmVyaWZ5X2J1aWxkX2Vudmlyb25tZW50KCkKICAgICAgICAgcmV0dmFsICs9IHNlbGYuX3ZlcmlmeV9kZWZhdWx0X3NldHRpbmdzKCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9ydW5idWlsZHMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvY29tbWFuZHMvcnVuYnVpbGRzLnB5CmluZGV4IGRmMTFmOWQuLjc5MWU1M2UgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9ydW5idWlsZHMucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tYW5hZ2VtZW50L2NvbW1hbmRzL3J1bmJ1aWxkcy5weQpAQCAtMSw0ICsxLDQgQEAKLWZyb20gZGphbmdvLmNvcmUubWFuYWdlbWVudC5iYXNlIGltcG9ydCBOb0FyZ3NDb21tYW5kCitmcm9tIGRqYW5nby5jb3JlLm1hbmFnZW1lbnQuYmFzZSBpbXBvcnQgQmFzZUNvbW1hbmQKIGZyb20gZGphbmdvLmRiIGltcG9ydCB0cmFuc2FjdGlvbgogZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBRCiAKQEAgLTE2LDcgKzE2LDcgQEAKIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ0b2FzdGVyIikKIAogCi1jbGFzcyBDb21tYW5kKE5vQXJnc0NvbW1hbmQpOgorY2xhc3MgQ29tbWFuZChCYXNlQ29tbWFuZCk6CiAgICAgYXJncyA9ICIiCiAgICAgaGVscCA9ICJTY2hlZHVsZXMgYW5kIGV4ZWN1dGVzIGJ1aWxkIHJlcXVlc3RzIGFzIHBvc3NpYmxlLiAiXAogICAgICAgICAgICAiRG9lcyBub3QgcmV0dXJuIChpbnRlcnJ1cHQgd2l0aCBDdHJsLUMpIgpAQCAtNzksNiArNzksMTQgQEAKICAgICAgICAgICAgIGJyLnNhdmUoKQogICAgICAgICAgICAgYmVjLmJlLmxvY2sgPSBCdWlsZEVudmlyb25tZW50LkxPQ0tfRlJFRQogICAgICAgICAgICAgYmVjLmJlLnNhdmUoKQorICAgICAgICAgICAgIyBDYW5jZWwgdGhlIHBlbmRpbmcgYnVpbGQgYW5kIHJlcG9ydCB0aGUgZXhjZXB0aW9uIHRvIHRoZSBVSQorICAgICAgICAgICAgbG9nX29iamVjdCA9IExvZ01lc3NhZ2Uub2JqZWN0cy5jcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgPSBici5idWlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IExvZ01lc3NhZ2UuRVhDRVBUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBlcnJtc2cpCisgICAgICAgICAgICBsb2dfb2JqZWN0LnNhdmUoKQorICAgICAgICAgICAgYnIuYnVpbGQub3V0Y29tZSA9IEJ1aWxkLkZBSUxFRAorICAgICAgICAgICAgYnIuYnVpbGQuc2F2ZSgpCiAKICAgICBkZWYgYXJjaGl2ZShzZWxmKToKICAgICAgICAgZm9yIGJyIGluIEJ1aWxkUmVxdWVzdC5vYmplY3RzLmZpbHRlcihzdGF0ZT1CdWlsZFJlcXVlc3QuUkVRX0FSQ0hJVkUpOgpAQCAtMTY4LDcgKzE3Niw3IEBACiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJydW5idWlsZHM6IHNjaGVkdWxlIGV4Y2VwdGlvbiAlcyIgJSBzdHIoZSkpCiAKLSAgICBkZWYgaGFuZGxlX25vYXJncyhzZWxmLCAqKm9wdGlvbnMpOgorICAgIGRlZiBoYW5kbGUoc2VsZiwgKipvcHRpb25zKToKICAgICAgICAgcGlkZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKG9zLmVudmlyb24uZ2V0KCJCVUlMRERJUiIsICIuIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLnJ1bmJ1aWxkcy5waWQiKQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vZml4dHVyZXMvY3VzdG9tX3RvYXN0ZXJfYXBwZW5kLnNoX3NhbXBsZSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9maXh0dXJlcy9jdXN0b21fdG9hc3Rlcl9hcHBlbmQuc2hfc2FtcGxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhjNGUxNjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vZml4dHVyZXMvY3VzdG9tX3RvYXN0ZXJfYXBwZW5kLnNoX3NhbXBsZQpAQCAtMCwwICsxLDQ5IEBACisjIS9iaW4vYmFzaAorCisjIENvcHlyaWdodCAoQykgMjAxNyBJbnRlbCBDb3JwLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCisjIFRoaXMgaXMgc2FtcGxlIHNvZnR3YXJlLiBSZW5hbWUgaXQgdG8gJ2N1c3RvbV90b2FzdGVyX2FwcGVuZC5zaCcgYW5kCisjIGVuYWJsZSB0aGUgcmVzcGVjdGl2ZSBjdXN0b20gc2VjdGlvbnMuCisKK3ZlcmJvc2U9MAoraWYgWyAkdmVyYm9zZSAtbmUgMCBdIDsgdGhlbgorICAgIGVjaG8gImN1c3RvbV90b2FzdGVyX2FwcGVuZC5zaDokKiIKK2ZpCisKK2lmIFsgInRvYXN0ZXJfcHJlcGVuZCIgPSAiJDEiIF0gOyB0aGVuCisgICAgZWNobyAiQWRkIGN1c3RvbSBhY3Rpb25zIGhlcmUgd2hlbiBUb2FzdGVyIHNjcmlwdCBpcyBzdGFydGVkIgorZmkKKworaWYgWyAid2ViX3N0YXJ0X3Bvc3RwZW5kIiA9ICIkMSIgXSA7IHRoZW4KKyAgICBlY2hvICJBZGQgY3VzdG9tIGFjdGlvbnMgaGVyZSBhZnRlciBUb2FzdGVyIHdlYiBzZXJ2aWNlIGlzIHN0YXJ0ZWQiCitmaQorCitpZiBbICJ3ZWJfc3RvcF9wb3N0cGVuZCIgPSAiJDEiIF0gOyB0aGVuCisgICAgZWNobyAiQWRkIGN1c3RvbSBhY3Rpb25zIGhlcmUgYWZ0ZXIgVG9hc3RlciB3ZWIgc2VydmljZSBpcyBzdG9wcGVkIgorZmkKKworaWYgWyAibm93ZWJfc3RhcnRfcG9zdHBlbmQiID0gIiQxIiBdIDsgdGhlbgorICAgIGVjaG8gIkFkZCBjdXN0b20gYWN0aW9ucyBoZXJlIGFmdGVyIFRvYXN0ZXIgKG5vIHdlYikgc2VydmljZSBpcyBzdGFydGVkIgorZmkKKworaWYgWyAibm93ZWJfc3RvcF9wb3N0cGVuZCIgPSAiJDEiIF0gOyB0aGVuCisgICAgZWNobyAiQWRkIGN1c3RvbSBhY3Rpb25zIGhlcmUgYWZ0ZXIgVG9hc3RlciAobm8gd2ViKSBzZXJ2aWNlIGlzIHN0b3BwZWQiCitmaQorCitpZiBbICJ0b2FzdGVyX3Bvc3RwZW5kIiA9ICIkMSIgXSA7IHRoZW4KKyAgICBlY2hvICJBZGQgY3VzdG9tIGFjdGlvbnMgaGVyZSBhZnRlciBUb2FzdGVyIHNjcmlwdCBpcyBkb25lIgorZmkKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL2ZpeHR1cmVzL29lLWNvcmUueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL2ZpeHR1cmVzL29lLWNvcmUueG1sCmluZGV4IDY2YzM1OTUuLjAwNzIwYzMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9maXh0dXJlcy9vZS1jb3JlLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vZml4dHVyZXMvb2UtY29yZS54bWwKQEAgLTgsOSArOCw5IEBACiAKICAgPCEtLSBCaXRiYWtlIHZlcnNpb25zIHdoaWNoIGNvcnJlc3BvbmQgdG8gdGhlIG1ldGFkYXRhIHJlbGVhc2UgLS0+CiAgIDxvYmplY3QgbW9kZWw9Im9ybS5iaXRiYWtldmVyc2lvbiIgcGs9IjEiPgotICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9Im5hbWUiPnB5cm88L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9Im5hbWUiPnJvY2tvPC9maWVsZD4KICAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJnaXR1cmwiPmdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2U8L2ZpZWxkPgotICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImJyYW5jaCI+MS4zNDwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iYnJhbmNoIj4xLjM2PC9maWVsZD4KICAgPC9vYmplY3Q+CiAgIDxvYmplY3QgbW9kZWw9Im9ybS5iaXRiYWtldmVyc2lvbiIgcGs9IjIiPgogICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9Im5hbWUiPkhFQUQ8L2ZpZWxkPgpAQCAtMjUsMTEgKzI1LDExIEBACiAKICAgPCEtLSBSZWxlYXNlcyBhdmFpbGFibGUgLS0+CiAgIDxvYmplY3QgbW9kZWw9Im9ybS5yZWxlYXNlIiBwaz0iMSI+Ci0gICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibmFtZSI+cHlybzwvZmllbGQ+Ci0gICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iZGVzY3JpcHRpb24iPk9wZW5lbWJlZGRlZCBQeXJvPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJuYW1lIj5yb2NrbzwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iZGVzY3JpcHRpb24iPk9wZW5lbWJlZGRlZCBSb2NrbzwvZmllbGQ+CiAgICAgPGZpZWxkIHJlbD0iTWFueVRvT25lUmVsIiB0bz0ib3JtLmJpdGJha2V2ZXJzaW9uIiBuYW1lPSJiaXRiYWtlX3ZlcnNpb24iPjE8L2ZpZWxkPgotICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImJyYW5jaF9uYW1lIj5weXJvPC9maWVsZD4KLSAgICA8ZmllbGQgdHlwZT0iVGV4dEZpZWxkIiBuYW1lPSJoZWxwdGV4dCI+VG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB1c2luZyB0aGUgdGlwIG9mIHRoZSAmbHQ7YSBocmVmPVwiaHR0cDovL2NnaXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZS9sb2cvP2g9cHlyb1wiJmd0O09wZW5FbWJlZGRlZCBQeXJvJmx0Oy9hJmd0OyBicmFuY2guPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJicmFuY2hfbmFtZSI+cm9ja288L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJUZXh0RmllbGQiIG5hbWU9ImhlbHB0ZXh0Ij5Ub2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHVzaW5nIHRoZSB0aXAgb2YgdGhlICZsdDthIGhyZWY9XCJodHRwOi8vY2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlL2xvZy8/aD1yb2Nrb1wiJmd0O09wZW5FbWJlZGRlZCBSb2NrbyZsdDsvYSZndDsgYnJhbmNoLjwvZmllbGQ+CiAgIDwvb2JqZWN0PgogICA8b2JqZWN0IG1vZGVsPSJvcm0ucmVsZWFzZSIgcGs9IjIiPgogICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9Im5hbWUiPmxvY2FsPC9maWVsZD4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9maXh0dXJlcy9wb2t5LnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9maXh0dXJlcy9wb2t5LnhtbAppbmRleCA3ODI3YWFjLi4yZjM5ZDc3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vZml4dHVyZXMvcG9reS54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL2ZpeHR1cmVzL3Bva3kueG1sCkBAIC04LDkgKzgsOSBAQAogCiAgIDwhLS0gQml0YmFrZSB2ZXJzaW9ucyB3aGljaCBjb3JyZXNwb25kIHRvIHRoZSBtZXRhZGF0YSByZWxlYXNlIC0tPgogICA8b2JqZWN0IG1vZGVsPSJvcm0uYml0YmFrZXZlcnNpb24iIHBrPSIxIj4KLSAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJuYW1lIj5weXJvPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJuYW1lIj5yb2NrbzwvZmllbGQ+CiAgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iZ2l0dXJsIj5naXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5PC9maWVsZD4KLSAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJicmFuY2giPnB5cm88L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImJyYW5jaCI+cm9ja288L2ZpZWxkPgogICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImRpcnBhdGgiPmJpdGJha2U8L2ZpZWxkPgogICA8L29iamVjdD4KICAgPG9iamVjdCBtb2RlbD0ib3JtLmJpdGJha2V2ZXJzaW9uIiBwaz0iMiI+CkBAIC0yOSwxMSArMjksMTEgQEAKIAogICA8IS0tIFJlbGVhc2VzIGF2YWlsYWJsZSAtLT4KICAgPG9iamVjdCBtb2RlbD0ib3JtLnJlbGVhc2UiIHBrPSIxIj4KLSAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJuYW1lIj5weXJvPC9maWVsZD4KLSAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJkZXNjcmlwdGlvbiI+WW9jdG8gUHJvamVjdCAyLjMgIlB5cm8iPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJuYW1lIj5yb2NrbzwvZmllbGQ+CisgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iZGVzY3JpcHRpb24iPllvY3RvIFByb2plY3QgMi40ICJSb2NrbyI8L2ZpZWxkPgogICAgIDxmaWVsZCByZWw9Ik1hbnlUb09uZVJlbCIgdG89Im9ybS5iaXRiYWtldmVyc2lvbiIgbmFtZT0iYml0YmFrZV92ZXJzaW9uIj4xPC9maWVsZD4KLSAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJicmFuY2hfbmFtZSI+cHlybzwvZmllbGQ+Ci0gICAgPGZpZWxkIHR5cGU9IlRleHRGaWVsZCIgbmFtZT0iaGVscHRleHQiPlRvYXN0ZXIgd2lsbCBydW4geW91ciBidWlsZHMgdXNpbmcgdGhlIHRpcCBvZiB0aGUgJmx0O2EgaHJlZj0iaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvcG9reS9sb2cvP2g9cHlybyImZ3Q7WW9jdG8gUHJvamVjdCBQeXJvIGJyYW5jaCZsdDsvYSZndDsuPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJicmFuY2hfbmFtZSI+cm9ja288L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJUZXh0RmllbGQiIG5hbWU9ImhlbHB0ZXh0Ij5Ub2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHVzaW5nIHRoZSB0aXAgb2YgdGhlICZsdDthIGhyZWY9Imh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL3Bva3kvbG9nLz9oPXJvY2tvIiZndDtZb2N0byBQcm9qZWN0IFJvY2tvIGJyYW5jaCZsdDsvYSZndDsuPC9maWVsZD4KICAgPC9vYmplY3Q+CiAgIDxvYmplY3QgbW9kZWw9Im9ybS5yZWxlYXNlIiBwaz0iMiI+CiAgICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibmFtZSI+bG9jYWw8L2ZpZWxkPgpAQCAtMTA1LDcgKzEwNSw3IEBACiAgICAgPGZpZWxkIHJlbD0iTWFueVRvT25lUmVsIiB0bz0ib3JtLmxheWVyIiBuYW1lPSJsYXllciI+MTwvZmllbGQ+CiAgICAgPGZpZWxkIHR5cGU9IkludGVnZXJGaWVsZCIgbmFtZT0ibGF5ZXJfc291cmNlIj4wPC9maWVsZD4KICAgICA8ZmllbGQgcmVsPSJNYW55VG9PbmVSZWwiIHRvPSJvcm0ucmVsZWFzZSIgbmFtZT0icmVsZWFzZSI+MTwvZmllbGQ+Ci0gICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iYnJhbmNoIj5weXJvPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJicmFuY2giPnJvY2tvPC9maWVsZD4KICAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJkaXJwYXRoIj5tZXRhPC9maWVsZD4KICAgPC9vYmplY3Q+CiAgIDxvYmplY3QgbW9kZWw9Im9ybS5sYXllcl92ZXJzaW9uIiBwaz0iMiI+CkBAIC0xMzYsNyArMTM2LDcgQEAKICAgICA8ZmllbGQgcmVsPSJNYW55VG9PbmVSZWwiIHRvPSJvcm0ubGF5ZXIiIG5hbWU9ImxheWVyIj4yPC9maWVsZD4KICAgICA8ZmllbGQgdHlwZT0iSW50ZWdlckZpZWxkIiBuYW1lPSJsYXllcl9zb3VyY2UiPjA8L2ZpZWxkPgogICAgIDxmaWVsZCByZWw9Ik1hbnlUb09uZVJlbCIgdG89Im9ybS5yZWxlYXNlIiBuYW1lPSJyZWxlYXNlIj4xPC9maWVsZD4KLSAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJicmFuY2giPnB5cm88L2ZpZWxkPgorICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImJyYW5jaCI+cm9ja288L2ZpZWxkPgogICAgIDxmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImRpcnBhdGgiPm1ldGEtcG9reTwvZmllbGQ+CiAgIDwvb2JqZWN0PgogICA8b2JqZWN0IG1vZGVsPSJvcm0ubGF5ZXJfdmVyc2lvbiIgcGs9IjUiPgpAQCAtMTY3LDcgKzE2Nyw3IEBACiAgICAgPGZpZWxkIHJlbD0iTWFueVRvT25lUmVsIiB0bz0ib3JtLmxheWVyIiBuYW1lPSJsYXllciI+MzwvZmllbGQ+CiAgICAgPGZpZWxkIHR5cGU9IkludGVnZXJGaWVsZCIgbmFtZT0ibGF5ZXJfc291cmNlIj4wPC9maWVsZD4KICAgICA8ZmllbGQgcmVsPSJNYW55VG9PbmVSZWwiIHRvPSJvcm0ucmVsZWFzZSIgbmFtZT0icmVsZWFzZSI+MTwvZmllbGQ+Ci0gICAgPGZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iYnJhbmNoIj5weXJvPC9maWVsZD4KKyAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJicmFuY2giPnJvY2tvPC9maWVsZD4KICAgICA8ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJkaXJwYXRoIj5tZXRhLXlvY3RvLWJzcDwvZmllbGQ+CiAgIDwvb2JqZWN0PgogICA8b2JqZWN0IG1vZGVsPSJvcm0ubGF5ZXJfdmVyc2lvbiIgcGs9IjgiPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21hbmFnZW1lbnQvY29tbWFuZHMvbHN1cGRhdGVzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21hbmFnZW1lbnQvY29tbWFuZHMvbHN1cGRhdGVzLnB5CmluZGV4IDQ4MjkwOGQuLmVmYzZiM2EgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9tYW5hZ2VtZW50L2NvbW1hbmRzL2xzdXBkYXRlcy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWFuYWdlbWVudC9jb21tYW5kcy9sc3VwZGF0ZXMucHkKQEAgLTQsNyArNCw3IEBACiAjCiAjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgogIwotIyBDb3B5cmlnaHQgKEMpIDIwMTYgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAoQykgMjAxNi0yMDE3ICAgSW50ZWwgQ29ycG9yYXRpb24KICMKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTE5LDEwICsxOSwxMiBAQAogIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgogCi1mcm9tIGRqYW5nby5jb3JlLm1hbmFnZW1lbnQuYmFzZSBpbXBvcnQgTm9BcmdzQ29tbWFuZAorZnJvbSBkamFuZ28uY29yZS5tYW5hZ2VtZW50LmJhc2UgaW1wb3J0IEJhc2VDb21tYW5kCiAKIGZyb20gb3JtLm1vZGVscyBpbXBvcnQgTGF5ZXJTb3VyY2UsIExheWVyLCBSZWxlYXNlLCBMYXllcl9WZXJzaW9uCiBmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IExheWVyVmVyc2lvbkRlcGVuZGVuY3ksIE1hY2hpbmUsIFJlY2lwZQorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBEaXN0cm8KK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgVG9hc3RlclNldHRpbmcKIAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCkBAIC01Niw3ICs1OCw3IEBACiAgICAgICAgIHNlbGYuc2lnbmFsID0gRmFsc2UKIAogCi1jbGFzcyBDb21tYW5kKE5vQXJnc0NvbW1hbmQpOgorY2xhc3MgQ29tbWFuZChCYXNlQ29tbWFuZCk6CiAgICAgYXJncyA9ICIiCiAgICAgaGVscCA9ICJVcGRhdGVzIGxvY2FsbHkgY2FjaGVkIGluZm9ybWF0aW9uIGZyb20gYSBsYXllcmluZGV4IHNlcnZlciIKIApAQCAtODAsNiArODIsOCBAQAogICAgICAgICBvcy5zeXN0ZW0oJ3NldHRlcm0gLWN1cnNvciBvZmYnKQogCiAgICAgICAgIHNlbGYuYXBpdXJsID0gREVGQVVMVF9MQVlFUklOREVYX1NFUlZFUgorICAgICAgICBpZiBUb2FzdGVyU2V0dGluZy5vYmplY3RzLmZpbHRlcihuYW1lPSdDVVNUT01fTEFZRVJJTkRFWF9TRVJWRVInKS5jb3VudCgpID09IDE6CisgICAgICAgICAgICBzZWxmLmFwaXVybCA9IFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuZ2V0KG5hbWUgPSAnQ1VTVE9NX0xBWUVSSU5ERVhfU0VSVkVSJykudmFsdWUKIAogICAgICAgICBhc3NlcnQgc2VsZi5hcGl1cmwgaXMgbm90IE5vbmUKICAgICAgICAgdHJ5OgpAQCAtOTEsNyArOTUsOSBAQAogCiAgICAgICAgIHByb3h5X3NldHRpbmdzID0gb3MuZW52aXJvbi5nZXQoImh0dHBfcHJveHkiLCBOb25lKQogCi0gICAgICAgIGRlZiBfZ2V0X2pzb25fcmVzcG9uc2UoYXBpdXJsPURFRkFVTFRfTEFZRVJJTkRFWF9TRVJWRVIpOgorICAgICAgICBkZWYgX2dldF9qc29uX3Jlc3BvbnNlKGFwaXVybD1Ob25lKToKKyAgICAgICAgICAgIGlmIE5vbmUgPT0gYXBpdXJsOgorICAgICAgICAgICAgICAgIGFwaXVybD1zZWxmLmFwaXVybAogICAgICAgICAgICAgaHR0cF9wcm9ncmVzcyA9IFNwaW5uZXIoKQogICAgICAgICAgICAgaHR0cF9wcm9ncmVzcy5zdGFydCgpCiAKQEAgLTI1MSw2ICsyNTcsMjQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzX29uPWx2ZCkKICAgICAgICAgICAgIHNlbGYubWluaV9wcm9ncmVzcygiTGF5ZXIgdmVyc2lvbiBkZXBlbmRlbmNpZXMiLCBpLCB0b3RhbCkKIAorICAgICAgICAjIHVwZGF0ZSBEaXN0cm9zCisgICAgICAgIGxvZ2dlci5pbmZvKCJGZXRjaGluZyBkaXN0cm8gaW5mb3JtYXRpb24iKQorICAgICAgICBkaXN0cm9zX2luZm8gPSBfZ2V0X2pzb25fcmVzcG9uc2UoCisgICAgICAgICAgICBhcGlsaW5rc1snZGlzdHJvcyddICsgIj9maWx0ZXI9bGF5ZXJicmFuY2hfX2JyYW5jaF9fbmFtZTolcyIgJQorICAgICAgICAgICAgIk9SIi5qb2luKHdoaXRlbGlzdF9icmFuY2hfbmFtZXMpKQorCisgICAgICAgIHRvdGFsID0gbGVuKGRpc3Ryb3NfaW5mbykKKyAgICAgICAgZm9yIGksIGRpIGluIGVudW1lcmF0ZShkaXN0cm9zX2luZm8pOgorICAgICAgICAgICAgZGlzdHJvLCBjcmVhdGVkID0gRGlzdHJvLm9iamVjdHMuZ2V0X29yX2NyZWF0ZSgKKyAgICAgICAgICAgICAgICBuYW1lPWRpWyduYW1lJ10sCisgICAgICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbj1MYXllcl9WZXJzaW9uLm9iamVjdHMuZ2V0KAorICAgICAgICAgICAgICAgICAgICBwaz1saV9sYXllcl9icmFuY2hfaWRfdG9fdG9hc3Rlcl9sdl9pZFtkaVsnbGF5ZXJicmFuY2gnXV0pKQorICAgICAgICAgICAgZGlzdHJvLnVwX2RhdGUgPSBkaVsndXBkYXRlZCddCisgICAgICAgICAgICBkaXN0cm8ubmFtZSA9IGRpWyduYW1lJ10KKyAgICAgICAgICAgIGRpc3Ryby5kZXNjcmlwdGlvbiA9IGRpWydkZXNjcmlwdGlvbiddCisgICAgICAgICAgICBkaXN0cm8uc2F2ZSgpCisgICAgICAgICAgICBzZWxmLm1pbmlfcHJvZ3Jlc3MoImRpc3Ryb3MiLCBpLCB0b3RhbCkKKwogICAgICAgICAjIHVwZGF0ZSBtYWNoaW5lcwogICAgICAgICBsb2dnZXIuaW5mbygiRmV0Y2hpbmcgbWFjaGluZSBpbmZvcm1hdGlvbiIpCiAgICAgICAgIG1hY2hpbmVzX2luZm8gPSBfZ2V0X2pzb25fcmVzcG9uc2UoCkBAIC0zMDksNSArMzMzLDUgQEAKIAogICAgICAgICBvcy5zeXN0ZW0oJ3NldHRlcm0gLWN1cnNvciBvbicpCiAKLSAgICBkZWYgaGFuZGxlX25vYXJncyhzZWxmLCAqKm9wdGlvbnMpOgorICAgIGRlZiBoYW5kbGUoc2VsZiwgKipvcHRpb25zKToKICAgICAgICAgc2VsZi51cGRhdGUoKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxNl9jbG9uZV9wcm9ncmVzcy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTZfY2xvbmVfcHJvZ3Jlc3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q0MDIzYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTZfY2xvbmVfcHJvZ3Jlc3MucHkKQEAgLTAsMCArMSwyNCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscworCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbWlncmF0aW9ucywgbW9kZWxzCisKK2NsYXNzIE1pZ3JhdGlvbihtaWdyYXRpb25zLk1pZ3JhdGlvbik6CisKKyAgICBkZXBlbmRlbmNpZXMgPSBbCisgICAgICAgICgnb3JtJywgJzAwMTVfbGF5ZXJfbG9jYWxfc291cmNlX2RpcicpLAorICAgIF0KKworICAgIG9wZXJhdGlvbnMgPSBbCisgICAgICAgIG1pZ3JhdGlvbnMuQWRkRmllbGQoCisgICAgICAgICAgICBtb2RlbF9uYW1lPSdidWlsZCcsCisgICAgICAgICAgICBuYW1lPSdyZXBvc19jbG9uZWQnLAorICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkludGVnZXJGaWVsZChkZWZhdWx0PTEpLAorICAgICAgICApLAorICAgICAgICBtaWdyYXRpb25zLkFkZEZpZWxkKAorICAgICAgICAgICAgbW9kZWxfbmFtZT0nYnVpbGQnLAorICAgICAgICAgICAgbmFtZT0ncmVwb3NfdG9fY2xvbmUnLAorICAgICAgICAgICAgZmllbGQ9bW9kZWxzLkludGVnZXJGaWVsZChkZWZhdWx0PTEpLCAjIChkZWZhdWx0IG9mZikKKyAgICAgICAgKSwKKyAgICBdCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTdfZGlzdHJvX2Nsb25lLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxN19kaXN0cm9fY2xvbmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNjNTkwMQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTdfZGlzdHJvX2Nsb25lLnB5CkBAIC0wLDAgKzEsMjUgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKKworZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1pZ3JhdGlvbnMsIG1vZGVscworCitjbGFzcyBNaWdyYXRpb24obWlncmF0aW9ucy5NaWdyYXRpb24pOgorCisgICAgZGVwZW5kZW5jaWVzID0gWworICAgICAgICAoJ29ybScsICcwMDE2X2Nsb25lX3Byb2dyZXNzJyksCisgICAgXQorCisgICAgb3BlcmF0aW9ucyA9IFsKKyAgICAgICAgbWlncmF0aW9ucy5DcmVhdGVNb2RlbCgKKyAgICAgICAgICAgIG5hbWU9J0Rpc3RybycsCisgICAgICAgICAgICBmaWVsZHM9WworICAgICAgICAgICAgICAgICgnaWQnLCBtb2RlbHMuQXV0b0ZpZWxkKHZlcmJvc2VfbmFtZT0nSUQnLCBzZXJpYWxpemU9RmFsc2UsIGF1dG9fY3JlYXRlZD1UcnVlLCBwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAgICAgKCd1cF9pZCcsIG1vZGVscy5JbnRlZ2VyRmllbGQoZGVmYXVsdD1Ob25lLCBudWxsPVRydWUpKSwKKyAgICAgICAgICAgICAgICAoJ3VwX2RhdGUnLCBtb2RlbHMuRGF0ZVRpbWVGaWVsZChkZWZhdWx0PU5vbmUsIG51bGw9VHJ1ZSkpLAorICAgICAgICAgICAgICAgICgnbmFtZScsIG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yNTUpKSwKKyAgICAgICAgICAgICAgICAoJ2Rlc2NyaXB0aW9uJywgbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NSkpLAorICAgICAgICAgICAgICAgICgnbGF5ZXJfdmVyc2lvbicsIG1vZGVscy5Gb3JlaWduS2V5KHRvPSdvcm0uTGF5ZXJfVmVyc2lvbicpKSwKKyAgICAgICAgICAgIF0sCisgICAgICAgICksCisgICAgXQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbW9kZWxzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21vZGVscy5weQppbmRleCBhNDlmOWE0Li4zYTdkZmY4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbW9kZWxzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9tb2RlbHMucHkKQEAgLTMyMSw2ICszMjEsMjIgQEAKIAogICAgICAgICByZXR1cm4gcXVlcnlzZXQKIAorICAgIGRlZiBnZXRfYXZhaWxhYmxlX2Rpc3Ryb3Moc2VsZik6CisgICAgICAgICIiIiBSZXR1cm5zIFF1ZXJ5U2V0IG9mIGFsbCBEaXN0cm9zIHdoaWNoIGFyZSBwcm92aWRlZCBieSB0aGUKKyAgICAgICAgTGF5ZXJzIGN1cnJlbnRseSBhZGRlZCB0byB0aGUgUHJvamVjdCAiIiIKKyAgICAgICAgcXVlcnlzZXQgPSBEaXN0cm8ub2JqZWN0cy5maWx0ZXIoCisgICAgICAgICAgICBsYXllcl92ZXJzaW9uX19pbj1zZWxmLmdldF9wcm9qZWN0X2xheWVyX3ZlcnNpb25zKCkpCisKKyAgICAgICAgcmV0dXJuIHF1ZXJ5c2V0CisKKyAgICBkZWYgZ2V0X2FsbF9jb21wYXRpYmxlX2Rpc3Ryb3Moc2VsZik6CisgICAgICAgICIiIiBSZXR1cm5zIFF1ZXJ5U2V0IG9mIGFsbCB0aGUgY29tcGF0aWJsZSBXaW5kIFJpdmVyIGRpc3Ryb3MgYXZhaWxhYmxlIHRvIHRoZQorICAgICAgICBwcm9qZWN0IGluY2x1ZGluZyBvbmVzIGZyb20gTGF5ZXJzIG5vdCBjdXJyZW50bHkgYWRkZWQgIiIiCisgICAgICAgIHF1ZXJ5c2V0ID0gRGlzdHJvLm9iamVjdHMuZmlsdGVyKAorICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbl9faW49c2VsZi5nZXRfYWxsX2NvbXBhdGlibGVfbGF5ZXJfdmVyc2lvbnMoKSkKKworICAgICAgICByZXR1cm4gcXVlcnlzZXQKKwogICAgIGRlZiBnZXRfYXZhaWxhYmxlX3JlY2lwZXMoc2VsZik6CiAgICAgICAgICIiIiBSZXR1cm5zIFF1ZXJ5U2V0IG9mIGFsbCB0aGUgcmVjaXBlcyB0aGF0IGFyZSBwcm92aWRlZCBieSBsYXllcnMKICAgICAgICAgYWRkZWQgdG8gdGhpcyBwcm9qZWN0ICIiIgpAQCAtNDM1LDcgKzQ1MSwxMyBAQAogICAgIHJlY2lwZXNfdG9fcGFyc2UgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQ9MSkKIAogICAgICMgbnVtYmVyIG9mIHJlY2lwZXMgcGFyc2VkIHNvIGZhciBmb3IgdGhpcyBidWlsZAotICAgIHJlY2lwZXNfcGFyc2VkID0gbW9kZWxzLkludGVnZXJGaWVsZChkZWZhdWx0PTApCisgICAgcmVjaXBlc19wYXJzZWQgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQ9MSkKKworICAgICMgbnVtYmVyIG9mIHJlcG9zIHRvIGNsb25lIGZvciB0aGlzIGJ1aWxkCisgICAgcmVwb3NfdG9fY2xvbmUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQ9MSkKKworICAgICMgbnVtYmVyIG9mIHJlcG9zIGNsb25lZCBzbyBmYXIgZm9yIHRoaXMgYnVpbGQgKGRlZmF1bHQgb2ZmKQorICAgIHJlcG9zX2Nsb25lZCA9IG1vZGVscy5JbnRlZ2VyRmllbGQoZGVmYXVsdD0xKQogCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBnZXRfcmVjZW50KHByb2plY3Q9Tm9uZSk6CkBAIC00ODYsNyArNTA4LDcgQEAKICAgICAgICAgdGYgPSBUYXNrLm9iamVjdHMuZmlsdGVyKGJ1aWxkID0gc2VsZikKICAgICAgICAgdGZjID0gdGYuY291bnQoKQogICAgICAgICBpZiB0ZmMgPiAwOgotICAgICAgICAgICAgY29tcGxldGVwZXIgPSB0Zi5leGNsdWRlKG9yZGVyX19pc251bGw9VHJ1ZSkuY291bnQoKSoxMDAgLy8gdGZjCisgICAgICAgICAgICBjb21wbGV0ZXBlciA9IHRmLmV4Y2x1ZGUob3V0Y29tZT1UYXNrLk9VVENPTUVfTkEpLmNvdW50KCkqMTAwIC8vIHRmYwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgY29tcGxldGVwZXIgPSAwCiAgICAgICAgIHJldHVybiBjb21wbGV0ZXBlcgpAQCAtNjY3LDYgKzY4OSwxMyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKKyAgICBkZWYgaXNfY2xvbmluZyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRydWUgaWYgdGhlIGJ1aWxkIGlzIHN0aWxsIGNsb25pbmcgcmVwb3MKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLm91dGNvbWUgPT0gQnVpbGQuSU5fUFJPR1JFU1MgYW5kIFwKKyAgICAgICAgICAgIHNlbGYucmVwb3NfY2xvbmVkIDwgc2VsZi5yZXBvc190b19jbG9uZQorCiAgICAgZGVmIGlzX3BhcnNpbmcoc2VsZik6CiAgICAgICAgICIiIgogICAgICAgICBUcnVlIGlmIHRoZSBidWlsZCBpcyBzdGlsbCBwYXJzaW5nIHJlY2lwZXMKQEAgLTY4MCwxMCArNzA5LDExIEBACiAgICAgICAgIHRhc2tzLgogCiAgICAgICAgIE5vdGUgdGhhdCB0aGUgbWVjaGFuaXNtIGZvciB0ZXN0aW5nIHdoZXRoZXIgYSBUYXNrIGlzICJkb25lIiBpcyB3aGV0aGVyCi0gICAgICAgIGl0cyBvcmRlciBmaWVsZCBpcyBzZXQsIGFzIHBlciB0aGUgY29tcGxldGVwZXIoKSBtZXRob2QuCisgICAgICAgIGl0cyBvdXRjb21lIGZpZWxkIGlzIHNldCwgYXMgcGVyIHRoZSBjb21wbGV0ZXBlcigpIG1ldGhvZC4KICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLm91dGNvbWUgPT0gQnVpbGQuSU5fUFJPR1JFU1MgYW5kIFwKLSAgICAgICAgICAgIHNlbGYudGFza19idWlsZC5maWx0ZXIob3JkZXJfX2lzbnVsbD1GYWxzZSkuY291bnQoKSA9PSAwCisgICAgICAgICAgICBzZWxmLnRhc2tfYnVpbGQuZXhjbHVkZShvdXRjb21lPVRhc2suT1VUQ09NRV9OQSkuY291bnQoKSA9PSAwCisKIAogICAgIGRlZiBnZXRfc3RhdGUoc2VsZik6CiAgICAgICAgICIiIgpAQCAtNjk4LDYgKzcyOCw4IEBACiAgICAgICAgICAgICByZXR1cm4gJ0NhbmNlbGxpbmcnOwogICAgICAgICBlbGlmIHNlbGYuaXNfcXVldWVkKCk6CiAgICAgICAgICAgICByZXR1cm4gJ1F1ZXVlZCcKKyAgICAgICAgZWxpZiBzZWxmLmlzX2Nsb25pbmcoKToKKyAgICAgICAgICAgIHJldHVybiAnQ2xvbmluZycKICAgICAgICAgZWxpZiBzZWxmLmlzX3BhcnNpbmcoKToKICAgICAgICAgICAgIHJldHVybiAnUGFyc2luZycKICAgICAgICAgZWxpZiBzZWxmLmlzX3N0YXJ0aW5nKCk6CkBAIC0xNDg1LDEyICsxNTE3LDEyIEBACiAgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGVfdXJsX3BhdGgoc2VsZi5sYXllci52Y3Nfd2ViX3RyZWVfYmFzZV91cmwsICcnKQogCiAgICAgZGVmIGdldF92Y3NfcmVmZXJlbmNlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmNvbW1pdCBpcyBub3QgTm9uZSBhbmQgbGVuKHNlbGYuY29tbWl0KSA+IDA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21taXQKICAgICAgICAgaWYgc2VsZi5icmFuY2ggaXMgbm90IE5vbmUgYW5kIGxlbihzZWxmLmJyYW5jaCkgPiAwOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnJhbmNoCiAgICAgICAgIGlmIHNlbGYucmVsZWFzZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHJldHVybiBzZWxmLnJlbGVhc2UubmFtZQotICAgICAgICBpZiBzZWxmLmNvbW1pdCBpcyBub3QgTm9uZSBhbmQgbGVuKHNlbGYuY29tbWl0KSA+IDA6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5jb21taXQKICAgICAgICAgcmV0dXJuICdOL0EnCiAKICAgICBkZWYgZ2V0X2RldGFpbHNwYWdlX3VybChzZWxmLCBwcm9qZWN0X2lkPU5vbmUpOgpAQCAtMTYyNiw3ICsxNjU4LDcgQEAKIAogICAgIGRlZiBnZXRfYmFzZV9yZWNpcGVfZmlsZShzZWxmKToKICAgICAgICAgIiIiR2V0IHRoZSBiYXNlIHJlY2lwZSBmaWxlIHBhdGggaWYgaXQgZXhpc3RzIG9uIHRoZSBmaWxlIHN5c3RlbSIiIgotICAgICAgICBwYXRoX3NjaGVtYV9vbmUgPSAiJXMvJXMiICUgKHNlbGYuYmFzZV9yZWNpcGUubGF5ZXJfdmVyc2lvbi5kaXJwYXRoLAorICAgICAgICBwYXRoX3NjaGVtYV9vbmUgPSAiJXMvJXMiICUgKHNlbGYuYmFzZV9yZWNpcGUubGF5ZXJfdmVyc2lvbi5sb2NhbF9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmFzZV9yZWNpcGUuZmlsZV9wYXRoKQogCiAgICAgICAgIHBhdGhfc2NoZW1hX3R3byA9IHNlbGYuYmFzZV9yZWNpcGUuZmlsZV9wYXRoCkBAIC0xNzgwLDYgKzE4MTIsMjEgQEAKICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CiAgICAgICAgIGxvZ2dlci5pbmZvKCJTdG9wcGluZyBleGlzdGluZyBydW5idWlsZHM6IG5vIGN1cnJlbnQgcHJvY2VzcyBmb3VuZCIpCiAKK2NsYXNzIERpc3Rybyhtb2RlbHMuTW9kZWwpOgorICAgIHNlYXJjaF9hbGxvd2VkX2ZpZWxkcyA9IFsibmFtZSIsICJkZXNjcmlwdGlvbiIsICJsYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSJdCisgICAgdXBfZGF0ZSA9IG1vZGVscy5EYXRlVGltZUZpZWxkKG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkKKworICAgIGxheWVyX3ZlcnNpb24gPSBtb2RlbHMuRm9yZWlnbktleSgnTGF5ZXJfVmVyc2lvbicpCisgICAgbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yNTUpCisgICAgZGVzY3JpcHRpb24gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjU1KQorCisgICAgZGVmIGdldF92Y3NfZGlzdHJvX2ZpbGVfbGlua191cmwoc2VsZik6CisgICAgICAgIHBhdGggPSBzZWxmLm5hbWUrJy5jb25mJworICAgICAgICByZXR1cm4gc2VsZi5sYXllcl92ZXJzaW9uLmdldF92Y3NfZmlsZV9saW5rX3VybChwYXRoKQorCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIkRpc3RybyAiICsgc2VsZi5uYW1lICsgIigiICsgc2VsZi5kZXNjcmlwdGlvbiArICIpIgorCiBkamFuZ28uZGIubW9kZWxzLnNpZ25hbHMucG9zdF9zYXZlLmNvbm5lY3QoaW52YWxpZGF0ZV9jYWNoZSkKIGRqYW5nby5kYi5tb2RlbHMuc2lnbmFscy5wb3N0X2RlbGV0ZS5jb25uZWN0KGludmFsaWRhdGVfY2FjaGUpCiBkamFuZ28uZGIubW9kZWxzLnNpZ25hbHMubTJtX2NoYW5nZWQuY29ubmVjdChpbnZhbGlkYXRlX2NhY2hlKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9hcGkucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL2FwaS5weQppbmRleCAxYTY1MDdjLi5hYjZiYTY5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL2FwaS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL2FwaS5weQpAQCAtMTgsNiArMTgsNyBAQAogCiAjIFBsZWFzZSBydW4gZmxha2U4IG9uIHRoaXMgZmlsZSBiZWZvcmUgc2VuZGluZyBwYXRjaGVzCiAKK2ltcG9ydCBvcwogaW1wb3J0IHJlCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IGpzb24KQEAgLTI4LDcgKzI5LDcgQEAKIGZyb20gb3JtLm1vZGVscyBpbXBvcnQgUmVjaXBlLCBDdXN0b21JbWFnZVJlY2lwZSwgQ3VzdG9tSW1hZ2VQYWNrYWdlCiBmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IExheWVyLCBUYXJnZXQsIFBhY2thZ2UsIFBhY2thZ2VfRGVwZW5kZW5jeQogZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBQcm9qZWN0VmFyaWFibGUKLWZyb20gYmxkY29udHJvbC5tb2RlbHMgaW1wb3J0IEJ1aWxkUmVxdWVzdAorZnJvbSBibGRjb250cm9sLm1vZGVscyBpbXBvcnQgQnVpbGRSZXF1ZXN0LCBCdWlsZEVudmlyb25tZW50CiBmcm9tIGJsZGNvbnRyb2wgaW1wb3J0IGJiY29udHJvbGxlcgogCiBmcm9tIGRqYW5nby5odHRwIGltcG9ydCBIdHRwUmVzcG9uc2UsIEpzb25SZXNwb25zZQpAQCAtNTA5LDYgKzUxMCwyNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHBhY2thZ2UucGFja2FnZS5uYW1lLCBlKSkKICAgICAgICAgICAgICAgICAgICAgcGFzcwogCisgICAgICAgICMgcHJlLWNyZWF0ZSBsYXllciBkaXJlY3Rvcnkgc3RydWN0dXJlLCBzbyB0aGF0IG90aGVyIGJ1aWxkcworICAgICAgICAjIGFyZSBub3QgYmxvY2tlZCBieSB0aGlzIG5ldyByZWNpcGUgZGVwZW5kZWN5CisgICAgICAgICMgTk9URTogdGhpcyBpcyBwYXJhbGxlbCBjb2RlIHRvICdsb2NhbGhvc3RiZWNvbnRyb2xsZXIucHknCisgICAgICAgIGJlID0gQnVpbGRFbnZpcm9ubWVudC5vYmplY3RzLmFsbCgpWzBdCisgICAgICAgIGxheWVycGF0aCA9IG9zLnBhdGguam9pbihiZS5idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUltYWdlUmVjaXBlLkxBWUVSX05BTUUpCisgICAgICAgIGZvciBuYW1lIGluICgiY29uZiIsICJyZWNpcGVzIik6CisgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGxheWVycGF0aCwgbmFtZSkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHBhdGgpOgorICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKHBhdGgpCisgICAgICAgICMgcHJlLWNyZWF0ZSBsYXllci5jb25mCisgICAgICAgIGNvbmZpZyA9IG9zLnBhdGguam9pbihsYXllcnBhdGgsICJjb25mIiwgImxheWVyLmNvbmYiKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoY29uZmlnKToKKyAgICAgICAgICAgIHdpdGggb3Blbihjb25maWcsICJ3IikgYXMgY29uZjoKKyAgICAgICAgICAgICAgICBjb25mLndyaXRlKCdCQlBBVEggLj0gIjoke0xBWUVSRElSfSJcbkJCRklMRVMgKz0gIiR7TEFZRVJESVJ9L3JlY2lwZXMvKi5iYiJcbicpCisgICAgICAgICMgcHJlLWNyZWF0ZSBuZXcgaW1hZ2UncyByZWNpcGUgZmlsZQorICAgICAgICByZWNpcGVfcGF0aCA9IG9zLnBhdGguam9pbihsYXllcnBhdGgsICJyZWNpcGVzIiwgIiVzLmJiIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZS5uYW1lKQorICAgICAgICB3aXRoIG9wZW4ocmVjaXBlX3BhdGgsICJ3IikgYXMgcmVjaXBlZjoKKyAgICAgICAgICAgIHJlY2lwZWYud3JpdGUocmVjaXBlLmdlbmVyYXRlX3JlY2lwZV9maWxlX2NvbnRlbnRzKCkpCisKICAgICAgICAgcmV0dXJuIEpzb25SZXNwb25zZSgKICAgICAgICAgICAgIHsiZXJyb3IiOiAib2siLAogICAgICAgICAgICAgICJwYWNrYWdlcyI6IHJlY2lwZS5nZXRfYWxsX3BhY2thZ2VzKCkuY291bnQoKSwKQEAgLTc1Miw3ICs3NzQsNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcl9yZXNwb25zZSgiUGFja2FnZSAlcyBub3QgZm91bmQgaW4gZXhjbHVkZXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYnV0IHdhcyBpbiBpbmNsdWRlZCBsaXN0IiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UubmFtZSkKLQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmVjaXBlLmFwcGVuZHNfc2V0LmFkZChwYWNrYWdlKQogICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBwYWNrYWdlIGlzIG5vdCBpbiB0aGUgZXhjbHVkZXMgc2V0CkBAIC03NjAsMjYgKzc4MSwyNyBAQAogICAgICAgICAgICAgICAgIHJlY2lwZS5leGNsdWRlc19zZXQucmVtb3ZlKHBhY2thZ2UpCiAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgIyBBZGQgdGhlIGRlcGVuZGVuY2llcyB3ZSB0aGluayB3aWxsIGJlIGFkZGVkIHRvIHRoZSByZWNpcGUKLSAgICAgICAgICAgICMgYXMgYSByZXN1bHQgb2YgYXBwZW5kaW5nIHRoaXMgcGFja2FnZS4KLSAgICAgICAgICAgICMgVE9ETyB0aGlzIHNob3VsZCByZWN1cnNlIGRvd24gdGhlIGVudGlyZSBkZXBzIHRyZWUKLSAgICAgICAgICAgIGZvciBkZXAgaW4gcGFja2FnZS5wYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UuYWxsX2RlcGVuZHMoKToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGN1c3RfcGFja2FnZSA9IEN1c3RvbUltYWdlUGFja2FnZS5vYmplY3RzLmdldCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZGVwLmRlcGVuZHNfb24ubmFtZSkKIAotICAgICAgICAgICAgICAgICAgICByZWNpcGUuaW5jbHVkZXNfc2V0LmFkZChjdXN0X3BhY2thZ2UpCi0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICMgV2hlbiBhZGRpbmcgdGhlIHByZS1yZXF1aXNpdGUgcGFja2FnZSwgbWFrZQotICAgICAgICAgICAgICAgICAgICAgICAgIyBzdXJlIGl0J3Mgbm90IGluIHRoZSBleGNsdWRlZCBsaXN0IGZyb20gYQotICAgICAgICAgICAgICAgICAgICAgICAgIyBwcmlvciByZW1vdmFsLgotICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlLmV4Y2x1ZGVzX3NldC5yZW1vdmUoY3VzdF9wYWNrYWdlKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgcGFja2FnZS5Eb2VzTm90RXhpc3Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIERvbid0IGNhcmUgaWYgdGhlIHBhY2thZ2UgaGFkIG5ldmVyIGJlZW4gZXhjbHVkZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJDb3VsZCBub3QgYWRkIHBhY2thZ2UncyBzdWdnZXN0ZWQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXBlbmRlbmNpZXMgdG8gdGhlIGxpc3QiKQorICAgICAgICAjIEFkZCB0aGUgZGVwZW5kZW5jaWVzIHdlIHRoaW5rIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHJlY2lwZQorICAgICAgICAjIGFzIGEgcmVzdWx0IG9mIGFwcGVuZGluZyB0aGlzIHBhY2thZ2UuCisgICAgICAgICMgVE9ETyB0aGlzIHNob3VsZCByZWN1cnNlIGRvd24gdGhlIGVudGlyZSBkZXBzIHRyZWUKKyAgICAgICAgZm9yIGRlcCBpbiBwYWNrYWdlLnBhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZS5hbGxfZGVwZW5kcygpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGN1c3RfcGFja2FnZSA9IEN1c3RvbUltYWdlUGFja2FnZS5vYmplY3RzLmdldCgKKyAgICAgICAgICAgICAgICAgICAgbmFtZT1kZXAuZGVwZW5kc19vbi5uYW1lKQorCisgICAgICAgICAgICAgICAgcmVjaXBlLmluY2x1ZGVzX3NldC5hZGQoY3VzdF9wYWNrYWdlKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgIyBXaGVuIGFkZGluZyB0aGUgcHJlLXJlcXVpc2l0ZSBwYWNrYWdlLCBtYWtlCisgICAgICAgICAgICAgICAgICAgICMgc3VyZSBpdCdzIG5vdCBpbiB0aGUgZXhjbHVkZWQgbGlzdCBmcm9tIGEKKyAgICAgICAgICAgICAgICAgICAgIyBwcmlvciByZW1vdmFsLgorICAgICAgICAgICAgICAgICAgICByZWNpcGUuZXhjbHVkZXNfc2V0LnJlbW92ZShjdXN0X3BhY2thZ2UpCisgICAgICAgICAgICAgICAgZXhjZXB0IHBhY2thZ2UuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgICAgICAgICAjIERvbid0IGNhcmUgaWYgdGhlIHBhY2thZ2UgaGFkIG5ldmVyIGJlZW4gZXhjbHVkZWQKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJDb3VsZCBub3QgYWRkIHBhY2thZ2UncyBzdWdnZXN0ZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlcGVuZGVuY2llcyB0byB0aGUgbGlzdCIpCiAgICAgICAgIHJldHVybiBKc29uUmVzcG9uc2UoeyJlcnJvciI6ICJvayJ9KQogCiAgICAgZGVmIGRlbGV0ZShzZWxmLCByZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgpAQCAtNzk3LDIyICs4MTksMjQgQEAKICAgICAgICAgICAgICAgICByZWNpcGUuZXhjbHVkZXNfc2V0LmFkZChwYWNrYWdlKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZWNpcGUuYXBwZW5kc19zZXQucmVtb3ZlKHBhY2thZ2UpCi0gICAgICAgICAgICAgICAgYWxsX2N1cnJlbnRfcGFja2FnZXMgPSByZWNpcGUuZ2V0X2FsbF9wYWNrYWdlcygpCiAKLSAgICAgICAgICAgICAgICByZXZlcnNlX2RlcHNfZGljdGxpc3QgPSBzZWxmLl9nZXRfYWxsX2RlcGVuZGVudHMoCi0gICAgICAgICAgICAgICAgICAgIHBhY2thZ2UucGssCi0gICAgICAgICAgICAgICAgICAgIGFsbF9jdXJyZW50X3BhY2thZ2VzKQorICAgICAgICAgICAgIyByZW1vdmUgZGVwZW5kZW5jaWVzIGFzIHdlbGwKKyAgICAgICAgICAgIGFsbF9jdXJyZW50X3BhY2thZ2VzID0gcmVjaXBlLmdldF9hbGxfcGFja2FnZXMoKQogCi0gICAgICAgICAgICAgICAgaWRzID0gW2VudHJ5WydwayddIGZvciBlbnRyeSBpbiByZXZlcnNlX2RlcHNfZGljdGxpc3RdCi0gICAgICAgICAgICAgICAgcmV2ZXJzZV9kZXBzID0gQ3VzdG9tSW1hZ2VQYWNrYWdlLm9iamVjdHMuZmlsdGVyKGlkX19pbj1pZHMpCi0gICAgICAgICAgICAgICAgZm9yIHIgaW4gcmV2ZXJzZV9kZXBzOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiByLmlkIGluIGluY2x1ZGVkX3BhY2thZ2VzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZS5leGNsdWRlc19zZXQuYWRkKHIpCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZS5hcHBlbmRzX3NldC5yZW1vdmUocikKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcmV2ZXJzZV9kZXBzX2RpY3RsaXN0ID0gc2VsZi5fZ2V0X2FsbF9kZXBlbmRlbnRzKAorICAgICAgICAgICAgICAgIHBhY2thZ2UucGssCisgICAgICAgICAgICAgICAgYWxsX2N1cnJlbnRfcGFja2FnZXMpCisKKyAgICAgICAgICAgIGlkcyA9IFtlbnRyeVsncGsnXSBmb3IgZW50cnkgaW4gcmV2ZXJzZV9kZXBzX2RpY3RsaXN0XQorICAgICAgICAgICAgcmV2ZXJzZV9kZXBzID0gQ3VzdG9tSW1hZ2VQYWNrYWdlLm9iamVjdHMuZmlsdGVyKGlkX19pbj1pZHMpCisgICAgICAgICAgICBmb3IgciBpbiByZXZlcnNlX2RlcHM6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpZiByLmlkIGluIGluY2x1ZGVkX3BhY2thZ2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlLmV4Y2x1ZGVzX3NldC5hZGQocikKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZS5hcHBlbmRzX3NldC5yZW1vdmUocikKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICAgICAgcmV0dXJuIEpzb25SZXNwb25zZSh7ImVycm9yIjogIm9rIn0pCiAgICAgICAgIGV4Y2VwdCBDdXN0b21JbWFnZVJlY2lwZS5Eb2VzTm90RXhpc3Q6CkBAIC04NzQsNiArODk4LDEyIEBACiAgICAgICAgICAgICBtYWNoaW5ldmFyLnZhbHVlID0gcmVxdWVzdC5QT1NUWydtYWNoaW5lTmFtZSddCiAgICAgICAgICAgICBtYWNoaW5ldmFyLnNhdmUoKQogCisgICAgICAgICMgRGlzdHJvIG5hbWUgY2hhbmdlCisgICAgICAgIGlmICdkaXN0cm9OYW1lJyBpbiByZXF1ZXN0LlBPU1Q6CisgICAgICAgICAgICBkaXN0cm92YXIgPSBwcmoucHJvamVjdHZhcmlhYmxlX3NldC5nZXQobmFtZT0iRElTVFJPIikKKyAgICAgICAgICAgIGRpc3Ryb3Zhci52YWx1ZSA9IHJlcXVlc3QuUE9TVFsnZGlzdHJvTmFtZSddCisgICAgICAgICAgICBkaXN0cm92YXIuc2F2ZSgpCisKICAgICAgICAgcmV0dXJuIEpzb25SZXNwb25zZSh7ImVycm9yIjogIm9rIn0pCiAKICAgICBkZWYgZ2V0KHNlbGYsIHJlcXVlc3QsICphcmdzLCAqKmt3YXJncyk6CkBAIC05NjAsMTAgKzk5MCwxMSBAQAogICAgICAgICBleGNlcHQgUHJvamVjdFZhcmlhYmxlLkRvZXNOb3RFeGlzdDoKICAgICAgICAgICAgIGRhdGFbIm1hY2hpbmUiXSA9IE5vbmUKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZGF0YVsiZGlzdHJvIl0gPSBwcm9qZWN0LnByb2plY3R2YXJpYWJsZV9zZXQuZ2V0KAotICAgICAgICAgICAgICAgIG5hbWU9IkRJU1RSTyIpLnZhbHVlCisgICAgICAgICAgICBkYXRhWyJkaXN0cm8iXSA9IHsibmFtZSI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC5wcm9qZWN0dmFyaWFibGVfc2V0LmdldCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iRElTVFJPIikudmFsdWV9CiAgICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0OgotICAgICAgICAgICAgZGF0YVsiZGlzdHJvIl0gPSAiLS0gbm90IHNldCB5ZXQiCisgICAgICAgICAgICBkYXRhWyJkaXN0cm8iXSA9IE5vbmUKIAogICAgICAgICBkYXRhWydlcnJvciddID0gIm9rIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9tcmJzZWN0aW9uLmpzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvbXJic2VjdGlvbi5qcwppbmRleCA3M2QwOTM1Li5jMGM1ZmE5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9tcmJzZWN0aW9uLmpzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL21yYnNlY3Rpb24uanMKQEAgLTYxLDYgKzYxLDEyIEBACiAgICAgcmV0dXJuIChjYWNoZWQucmVjaXBlc19wYXJzZWRfcGVyY2VudGFnZSAhPT0gYnVpbGQucmVjaXBlc19wYXJzZWRfcGVyY2VudGFnZSk7CiAgIH0KIAorICAvLyByZXR1cm5zIHRydWUgaWYgdGhlIG51bWJlciBvZiByZXBvcyBjbG9uZWQvdG8gY2xvbmUgY2hhbmdlZAorICBmdW5jdGlvbiBjbG9uZVByb2dyZXNzQ2hhbmdlZChidWlsZCkgeworICAgIHZhciBjYWNoZWQgPSBnZXRDYWNoZWQoYnVpbGQpOworICAgIHJldHVybiAoY2FjaGVkLnJlcG9zX2Nsb25lZF9wZXJjZW50YWdlICE9PSBidWlsZC5yZXBvc19jbG9uZWRfcGVyY2VudGFnZSk7CisgIH0KKwogICBmdW5jdGlvbiByZWZyZXNoTW9zdFJlY2VudEJ1aWxkcygpewogICAgIGxpYnRvYXN0ZXIuZ2V0TW9zdFJlY2VudEJ1aWxkcygKICAgICAgIGxpYnRvYXN0ZXIuY3R4Lm1vc3RSZWNlbnRCdWlsZHNVcmwsCkBAIC0xMDAsNiArMTA2LDE1IEBACiAKICAgICAgICAgICAgIGNvbnRhaW5lci5odG1sKGh0bWwpOwogICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChjbG9uZVByb2dyZXNzQ2hhbmdlZChidWlsZCkpIHsKKyAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgY2xvbmUgcHJvZ3Jlc3MgdGV4dAorICAgICAgICAgICAgc2VsZWN0b3IgPSAnI3JlcG9zLWNsb25lZC1wZXJjZW50YWdlLScgKyBidWlsZC5pZDsKKyAgICAgICAgICAgICQoc2VsZWN0b3IpLmh0bWwoYnVpbGQucmVwb3NfY2xvbmVkX3BlcmNlbnRhZ2UpOworCisgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIHJlY2lwZSBwcm9ncmVzcyBiYXIKKyAgICAgICAgICAgIHNlbGVjdG9yID0gJyNyZXBvcy1jbG9uZWQtcGVyY2VudGFnZS1iYXItJyArIGJ1aWxkLmlkOworICAgICAgICAgICAgJChzZWxlY3Rvcikud2lkdGgoYnVpbGQucmVwb3NfY2xvbmVkX3BlcmNlbnRhZ2UgKyAnJScpOworICAgICAgICAgIH0KICAgICAgICAgICBlbHNlIGlmICh0YXNrc1Byb2dyZXNzQ2hhbmdlZChidWlsZCkpIHsKICAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgdGFzayBwcm9ncmVzcyB0ZXh0CiAgICAgICAgICAgICBzZWxlY3RvciA9ICcjYnVpbGQtcGMtZG9uZS0nICsgYnVpbGQuaWQ7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9wcm9qZWN0cGFnZS5qcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3Byb2plY3RwYWdlLmpzCmluZGV4IDIxYWRmODEuLjUwNjQ3MWUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3Byb2plY3RwYWdlLmpzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3Byb2plY3RwYWdlLmpzCkBAIC0xNSw2ICsxNSwxMyBAQAogICB2YXIgbWFjaGluZUlucHV0Rm9ybSA9ICQoIiNtYWNoaW5lLWlucHV0LWZvcm0iKTsKICAgdmFyIGludmFsaWRNYWNoaW5lTmFtZUhlbHAgPSAkKCIjaW52YWxpZC1tYWNoaW5lLW5hbWUtaGVscCIpOwogCisgIHZhciBkaXN0cm9DaGFuZ2VJbnB1dCA9ICQoIiNkaXN0cm8tY2hhbmdlLWlucHV0Iik7CisgIHZhciBkaXN0cm9DaGFuZ2VCdG4gPSAkKCIjZGlzdHJvLWNoYW5nZS1idG4iKTsKKyAgdmFyIGRpc3Ryb0Zvcm0gPSAkKCIjc2VsZWN0LWRpc3Ryby1mb3JtIik7CisgIHZhciBkaXN0cm9DaGFuZ2VGb3JtVG9nZ2xlID0gJCgiI2NoYW5nZS1kaXN0cm8tdG9nZ2xlIik7CisgIHZhciBkaXN0cm9OYW1lVGl0bGUgPSAkKCIjcHJvamVjdC1kaXN0cm8tbmFtZSIpOworICB2YXIgZGlzdHJvQ2hhbmdlQ2FuY2VsID0gJCgiI2NhbmNlbC1kaXN0cm8tY2hhbmdlIik7CisKICAgdmFyIGZyZXFCdWlsZEJ0biA9ICAkKCIjZnJlcS1idWlsZC1idG4iKTsKICAgdmFyIGZyZXFCdWlsZExpc3QgPSAkKCIjZnJlcS1idWlsZC1saXN0Iik7CiAKQEAgLTI2LDYgKzMzLDcgQEAKIAogICB2YXIgY3VycmVudExheWVyQWRkU2VsZWN0aW9uOwogICB2YXIgY3VycmVudE1hY2hpbmVBZGRTZWxlY3Rpb24gPSAiIjsKKyAgdmFyIGN1cnJlbnREaXN0cm9BZGRTZWxlY3Rpb24gPSAiIjsKIAogICB2YXIgdXJsUGFyYW1zID0gbGlidG9hc3Rlci5wYXJzZVVybFBhcmFtcygpOwogCkBAIC00NSw2ICs1MywxNyBAQAogICAgICAgdXBkYXRlTWFjaGluZU5hbWUocHJqSW5mby5tYWNoaW5lLm5hbWUpOwogICAgIH0KIAorICAgIC8qIElmIHdlJ3JlIHJlY2VpdmluZyBhIGRpc3RybyBzZXQgZnJvbSB0aGUgdXJsIGFuZCBpdCdzIGRpZmZlcmVudCBmcm9tCisgICAgICogb3VyIGN1cnJlbnQgZGlzdHJvIHRoZW4gYWN0aXZhdGUgc2V0IG1hY2hpbmUgc2VxdWVuY2UuCisgICAgICovCisgICAgaWYgKHVybFBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgnc2V0RGlzdHJvJykgJiYKKyAgICAgICAgdXJsUGFyYW1zLnNldERpc3RybyAhPT0gcHJqSW5mby5kaXN0cm8ubmFtZSl7CisgICAgICAgIGRpc3Ryb0NoYW5nZUlucHV0LnZhbCh1cmxQYXJhbXMuc2V0RGlzdHJvKTsKKyAgICAgICAgZGlzdHJvQ2hhbmdlQnRuLmNsaWNrKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHVwZGF0ZURpc3Ryb05hbWUocHJqSW5mby5kaXN0cm8ubmFtZSk7CisgICAgfQorCiAgICAvKiBOb3cgd2UncmUgcmVhbGx5IHJlYWR5IHNob3cgdGhlIHBhZ2UgKi8KICAgICAkKCIjcHJvamVjdC1wYWdlIikuc2hvdygpOwogCkBAIC0yNzgsNiArMjk3LDYwIEBACiAgIH0pOwogCiAKKyAgLyogQ2hhbmdlIGRpc3RybyBmdW5jdGlvbmFsaXR5ICovCisKKyAgZGlzdHJvQ2hhbmdlRm9ybVRvZ2dsZS5jbGljayhmdW5jdGlvbigpeworICAgIGRpc3Ryb0Zvcm0uc2xpZGVEb3duKCk7CisgICAgZGlzdHJvTmFtZVRpdGxlLmhpZGUoKTsKKyAgICAkKHRoaXMpLmhpZGUoKTsKKyAgfSk7CisKKyAgZGlzdHJvQ2hhbmdlQ2FuY2VsLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgZGlzdHJvRm9ybS5zbGlkZVVwKGZ1bmN0aW9uKCl7CisgICAgICBkaXN0cm9OYW1lVGl0bGUuc2hvdygpOworICAgICAgZGlzdHJvQ2hhbmdlRm9ybVRvZ2dsZS5zaG93KCk7CisgICAgfSk7CisgIH0pOworCisgIGZ1bmN0aW9uIHVwZGF0ZURpc3Ryb05hbWUoZGlzdHJvTmFtZSl7CisgICAgZGlzdHJvQ2hhbmdlSW5wdXQudmFsKGRpc3Ryb05hbWUpOworICAgIGRpc3Ryb05hbWVUaXRsZS50ZXh0KGRpc3Ryb05hbWUpOworICB9CisKKyAgbGlidG9hc3Rlci5tYWtlVHlwZWFoZWFkKGRpc3Ryb0NoYW5nZUlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlidG9hc3Rlci5jdHguZGlzdHJvc1R5cGVBaGVhZFVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgfSwgZnVuY3Rpb24oaXRlbSl7CisgICAgY3VycmVudERpc3Ryb0FkZFNlbGVjdGlvbiA9IGl0ZW0ubmFtZTsKKyAgICBkaXN0cm9DaGFuZ2VCdG4ucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgfSk7CisKKyAgZGlzdHJvQ2hhbmdlQnRuLmNsaWNrKGZ1bmN0aW9uKGUpeworICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICAvKiBXZSBhY2NlcHQgYW55IHZhbHVlIHJlZ2FyZGxlc3Mgb2YgdHlwZWFoZWFkIHNlbGVjdGlvbiBvciBub3QgKi8KKyAgICBpZiAoZGlzdHJvQ2hhbmdlSW5wdXQudmFsKCkubGVuZ3RoID09PSAwKQorICAgICAgcmV0dXJuOworCisgICAgY3VycmVudERpc3Ryb0FkZFNlbGVjdGlvbiA9IGRpc3Ryb0NoYW5nZUlucHV0LnZhbCgpOworCisgICAgbGlidG9hc3Rlci5lZGl0Q3VycmVudFByb2plY3QoCisgICAgICB7IGRpc3Ryb05hbWUgOiBjdXJyZW50RGlzdHJvQWRkU2VsZWN0aW9uIH0sCisgICAgICBmdW5jdGlvbigpeworICAgICAgICAvKiBTdWNjZXNzIG1hY2hpbmUgY2hhbmdlZCAqLworICAgICAgICB1cGRhdGVEaXN0cm9OYW1lKGN1cnJlbnREaXN0cm9BZGRTZWxlY3Rpb24pOworICAgICAgICBkaXN0cm9DaGFuZ2VDYW5jZWwuY2xpY2soKTsKKworICAgICAgICAvKiBTaG93IHRoZSBhbGVydCBtZXNzYWdlICovCisgICAgICAgIHZhciBtZXNzYWdlID0gJCgnPHNwYW4+WW91IGhhdmUgY2hhbmdlZCB0aGUgZGlzdHJvIHRvOiA8c3Ryb25nPjxzcGFuIGlkPSJub3RpZnktbWFjaGluZS1uYW1lIj48L3NwYW4+PC9zdHJvbmc+PC9zcGFuPicpOworICAgICAgICBtZXNzYWdlLmZpbmQoIiNub3RpZnktbWFjaGluZS1uYW1lIikudGV4dChjdXJyZW50RGlzdHJvQWRkU2VsZWN0aW9uKTsKKyAgICAgICAgbGlidG9hc3Rlci5zaG93Q2hhbmdlTm90aWZpY2F0aW9uKG1lc3NhZ2UpOworICAgIH0sCisgICAgICBmdW5jdGlvbigpeworICAgICAgICAvKiBGYWlsZWQgbWFjaGluZSBjaGFuZ2VkICovCisgICAgICAgIGNvbnNvbGUud2FybigiRmFpbGVkIHRvIGNoYW5nZSBkaXN0cm8iKTsKKyAgICB9KTsKKyAgfSk7CisKKwogICAvKiBDaGFuZ2UgcmVsZWFzZSBmdW5jdGlvbmFsaXR5ICovCiAgIGZ1bmN0aW9uIHVwZGF0ZVByb2plY3RSZWxlYXNlKHJlbGVhc2UpewogICAgIHJlbGVhc2VUaXRsZS50ZXh0KHJlbGVhc2UuZGVzY3JpcHRpb24pOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvcHJvamVjdHRvcGJhci5qcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3Byb2plY3R0b3BiYXIuanMKaW5kZXggOTJhYjJkNi4uNjkyMjBhYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvcHJvamVjdHRvcGJhci5qcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9wcm9qZWN0dG9wYmFyLmpzCkBAIC03MywxNCArNzMsMTQgQEAKIAogICBuZXdCdWlsZFRhcmdldEJ1aWxkQnRuLmNsaWNrKGZ1bmN0aW9uIChlKSB7CiAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwotICAgIGlmICghbmV3QnVpbGRUYXJnZXRJbnB1dC52YWwoKSkgeworICAgIGlmICghbmV3QnVpbGRUYXJnZXRJbnB1dC52YWwoKS50cmltKCkpIHsKICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLyogV2UgdXNlIHRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgZmllbGQgc28gYXMgdG8gbWFpbnRhaW4gYW55IGNvbW1hbmQgYWxzbwogICAgICAqIGFkZGVkIGUuZy4gY29yZS1pbWFnZS1taW5pbWFsOmNsZWFuIGFuZCBiZWNhdXNlIHdlIGNhbiBidWlsZCB0YXJnZXRzCiAgICAgICogdGhhdCB0b2FzdGVyIGRvZXNuJ3QgeWV0IGtub3cgYWJvdXQKICAgICAgKi8KLSAgICBzZWxlY3RlZFRhcmdldCA9IHsgbmFtZTogbmV3QnVpbGRUYXJnZXRJbnB1dC52YWwoKSB9OworICAgIHNlbGVjdGVkVGFyZ2V0ID0geyBuYW1lOiBuZXdCdWlsZFRhcmdldElucHV0LnZhbCgpLnRyaW0oKSB9OwogCiAgICAgLyogRmlyZSBvZmYgdGhlIGJ1aWxkICovCiAgICAgbGlidG9hc3Rlci5zdGFydEFCdWlsZChudWxsLCBzZWxlY3RlZFRhcmdldC5uYW1lLApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90YWJsZXMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RhYmxlcy5weQppbmRleCBlMmQyM2MxLi5kY2EyZmEyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RhYmxlcy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RhYmxlcy5weQpAQCAtMjMsNiArMjMsNyBAQAogZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBSZWNpcGUsIFByb2plY3RMYXllciwgTGF5ZXJfVmVyc2lvbiwgTWFjaGluZSwgUHJvamVjdAogZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBDdXN0b21JbWFnZVJlY2lwZSwgUGFja2FnZSwgVGFyZ2V0LCBCdWlsZCwgTG9nTWVzc2FnZSwgVGFzawogZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBDdXN0b21JbWFnZVBhY2thZ2UsIFBhY2thZ2VfRGVwZW5kZW5jeU1hbmFnZXIKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgRGlzdHJvCiBmcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IFEsIE1heCwgU3VtLCBDb3VudCwgV2hlbiwgQ2FzZSwgVmFsdWUsIEludGVnZXJGaWVsZAogZnJvbSBkamFuZ28uY29uZi51cmxzIGltcG9ydCB1cmwKIGZyb20gZGphbmdvLmNvcmUudXJscmVzb2x2ZXJzIGltcG9ydCByZXZlcnNlLCByZXNvbHZlCkBAIC0xNTM2LDMgKzE1MzcsOTMgQEAKICAgICAgICAgICAgIGNvbnRleHRbJ2J1aWxkX2luX3Byb2dyZXNzX25vbmVfY29tcGxldGVkJ10gPSBGYWxzZQogCiAgICAgICAgIHJldHVybiBjb250ZXh0CisKKworY2xhc3MgRGlzdHJvc1RhYmxlKFRvYXN0ZXJUYWJsZSk6CisgICAgIiIiVGFibGUgb2YgRGlzdHJvcyBpbiBUb2FzdGVyIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoRGlzdHJvc1RhYmxlLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuZW1wdHlfc3RhdGUgPSAiVG9hc3RlciBoYXMgbm8gZGlzdHJvIGluZm9ybWF0aW9uIGZvciB0aGlzIHByb2plY3QuIFNhZGx5LCAJCQkgICBkaXN0cm8gaW5mb3JtYXRpb24gY2Fubm90IGJlIG9idGFpbmVkIGZyb20gYnVpbGRzLCBzbyB0aGlzIAkJCQkgIHBhZ2Ugd2lsbCByZW1haW4gZW1wdHkuIgorICAgICAgICBzZWxmLnRpdGxlID0gIkNvbXBhdGlibGUgRGlzdHJvcyIKKyAgICAgICAgc2VsZi5kZWZhdWx0X29yZGVyYnkgPSAibmFtZSIKKworICAgIGRlZiBnZXRfY29udGV4dF9kYXRhKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgY29udGV4dCA9IHN1cGVyKERpc3Ryb3NUYWJsZSwgc2VsZikuZ2V0X2NvbnRleHRfZGF0YSgqKmt3YXJncykKKyAgICAgICAgY29udGV4dFsncHJvamVjdCddID0gUHJvamVjdC5vYmplY3RzLmdldChwaz1rd2FyZ3NbJ3BpZCddKQorICAgICAgICByZXR1cm4gY29udGV4dAorCisgICAgZGVmIHNldHVwX2ZpbHRlcnMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5nZXQocGs9a3dhcmdzWydwaWQnXSkKKworICAgICAgICBpbl9jdXJyZW50X3Byb2plY3RfZmlsdGVyID0gVGFibGVGaWx0ZXIoCisgICAgICAgICAgICAiaW5fY3VycmVudF9wcm9qZWN0IiwKKyAgICAgICAgICAgICJGaWx0ZXIgYnkgcHJvamVjdCBEaXN0cm9zIgorICAgICAgICApCisKKyAgICAgICAgaW5fcHJvamVjdF9hY3Rpb24gPSBUYWJsZUZpbHRlckFjdGlvblRvZ2dsZSgKKyAgICAgICAgICAgICJpbl9wcm9qZWN0IiwKKyAgICAgICAgICAgICJEaXN0cm8gcHJvdmlkZWQgYnkgbGF5ZXJzIGFkZGVkIHRvIHRoaXMgcHJvamVjdCIsCisgICAgICAgICAgICBQcm9qZWN0RmlsdGVycy5pbl9wcm9qZWN0KHNlbGYucHJvamVjdF9sYXllcnMpCisgICAgICAgICkKKworICAgICAgICBub3RfaW5fcHJvamVjdF9hY3Rpb24gPSBUYWJsZUZpbHRlckFjdGlvblRvZ2dsZSgKKyAgICAgICAgICAgICJub3RfaW5fcHJvamVjdCIsCisgICAgICAgICAgICAiRGlzdHJvcyBwcm92aWRlZCBieSBsYXllcnMgbm90IGFkZGVkIHRvIHRoaXMgcHJvamVjdCIsCisgICAgICAgICAgICBQcm9qZWN0RmlsdGVycy5ub3RfaW5fcHJvamVjdChzZWxmLnByb2plY3RfbGF5ZXJzKQorICAgICAgICApCisKKyAgICAgICAgaW5fY3VycmVudF9wcm9qZWN0X2ZpbHRlci5hZGRfYWN0aW9uKGluX3Byb2plY3RfYWN0aW9uKQorICAgICAgICBpbl9jdXJyZW50X3Byb2plY3RfZmlsdGVyLmFkZF9hY3Rpb24obm90X2luX3Byb2plY3RfYWN0aW9uKQorICAgICAgICBzZWxmLmFkZF9maWx0ZXIoaW5fY3VycmVudF9wcm9qZWN0X2ZpbHRlcikKKworICAgIGRlZiBzZXR1cF9xdWVyeXNldChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBwcmogPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrID0ga3dhcmdzWydwaWQnXSkKKyAgICAgICAgc2VsZi5xdWVyeXNldCA9IHByai5nZXRfYWxsX2NvbXBhdGlibGVfZGlzdHJvcygpCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBzZWxmLnF1ZXJ5c2V0Lm9yZGVyX2J5KHNlbGYuZGVmYXVsdF9vcmRlcmJ5KQorCisgICAgICAgIHNlbGYuc3RhdGljX2NvbnRleHRfZXh0cmFbJ2N1cnJlbnRfbGF5ZXJzJ10gPSBcCisgICAgICAgICAgICAgICAgc2VsZi5wcm9qZWN0X2xheWVycyA9IFwKKyAgICAgICAgICAgICAgICBwcmouZ2V0X3Byb2plY3RfbGF5ZXJfdmVyc2lvbnMocGs9VHJ1ZSkKKworICAgIGRlZiBzZXR1cF9jb2x1bW5zKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJEaXN0cm8iLAorICAgICAgICAgICAgICAgICAgICAgICAgaGlkZWFibGU9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9Im5hbWUiKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iRGVzY3JpcHRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0iZGVzY3JpcHRpb24iKQorCisgICAgICAgIGxheWVyX2xpbmtfdGVtcGxhdGUgPSAnJycKKyAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdsYXllcmRldGFpbHMnIGV4dHJhLnBpZCBkYXRhLmxheWVyX3ZlcnNpb24uaWQgJX0iPgorICAgICAgICB7e2RhdGEubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX08L2E+CisgICAgICAgICcnJworCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iTGF5ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0ibGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9bGF5ZXJfbGlua190ZW1wbGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZT1UcnVlKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iR2l0IHJldmlzaW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0iVGhlIEdpdCBicmFuY2gsIHRhZyBvciBjb21taXQuIEZvciB0aGUgbGF5ZXJzIGZyb20gdGhlIE9wZW5FbWJlZGRlZCBsYXllciBzb3VyY2UsIHRoZSByZXZpc2lvbiBpcyBhbHdheXMgdGhlIGJyYW5jaCBjb21wYXRpYmxlIHdpdGggdGhlIFlvY3RvIFByb2plY3QgdmVyc2lvbiB5b3Ugc2VsZWN0ZWQgZm9yIHRoaXMgcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW49VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9ImxheWVyX3ZlcnNpb25fX2dldF92Y3NfcmVmZXJlbmNlIikKKworICAgICAgICB3cnRlbXBsYXRlX2ZpbGVfdGVtcGxhdGUgPSAnJyc8Y29kZT5jb25mL21hY2hpbmUve3tkYXRhLm5hbWV9fS5jb25mPC9jb2RlPgorICAgICAgICA8YSBocmVmPSJ7e2RhdGEuZ2V0X3Zjc19tYWNoaW5lX2ZpbGVfbGlua191cmx9fSIgdGFyZ2V0PSJfYmxhbmsiPjxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLW5ldy13aW5kb3ciPjwvaT48L2E+JycnCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJEaXN0cm8gZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW49VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9InRlbXBsYXRlZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT13cnRlbXBsYXRlX2ZpbGVfdGVtcGxhdGUpCisKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IlNlbGVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ9IlNldHMgdGhlIHNlbGVjdGVkIGRpc3RybyB0byB0aGUgcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRlYWJsZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9uYW1lPSJpbl9jdXJyZW50X3Byb2plY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0iYWRkLWRlbC1sYXllcnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9J3slIGluY2x1ZGUgImRpc3Ryb19idG4uaHRtbCIgJX0nKQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlLmh0bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlLmh0bWwKaW5kZXggMzJiNDk3OS4uNGY3MjA2NCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZS5odG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2UuaHRtbApAQCAtNDksNiArNDksNyBAQAogICAgICAgICByZWNpcGVzVHlwZUFoZWFkVXJsOiB7JSB1cmwgJ3hocl9yZWNpcGVzdHlwZWFoZWFkJyBwcm9qZWN0LmlkIGFzIHBhdHVybCV9e3twYXR1cmx8anNvbn19LAogICAgICAgICBsYXllcnNUeXBlQWhlYWRVcmw6IHslIHVybCAneGhyX2xheWVyc3R5cGVhaGVhZCcgcHJvamVjdC5pZCBhcyBwYXR1cmwlfXt7cGF0dXJsfGpzb259fSwKICAgICAgICAgbWFjaGluZXNUeXBlQWhlYWRVcmw6IHslIHVybCAneGhyX21hY2hpbmVzdHlwZWFoZWFkJyBwcm9qZWN0LmlkIGFzIHBhdHVybCV9e3twYXR1cmx8anNvbn19LAorICAgICAgICBkaXN0cm9zVHlwZUFoZWFkVXJsOiB7JSB1cmwgJ3hocl9kaXN0cm9zdHlwZWFoZWFkJyBwcm9qZWN0LmlkIGFzIHBhdHVybCV9e3twYXR1cmx8anNvbn19LAogICAgICAgICBwcm9qZWN0QnVpbGRzVXJsOiB7JSB1cmwgJ3Byb2plY3RidWlsZHMnIHByb2plY3QuaWQgYXMgcGJ1cmwgJX17e3BidXJsfGpzb259fSwKICAgICAgICAgeGhyQ3VzdG9tUmVjaXBlVXJsIDogInslIHVybCAneGhyX2N1c3RvbXJlY2lwZScgJX0iLAogICAgICAgICBwcm9qZWN0SWQgOiB7e3Byb2plY3QuaWR9fSwKQEAgLTEwOSw2ICsxMTAsNyBAQAogICAgICAgICAgICAgICAgIEFsbCBidWlsZHMKICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICB7JSBpZiBwcm9qZWN0X2VuYWJsZSAlfQogICAgICAgICAgICAgICA8bGkgaWQ9Im5hdmJhci1hbGwtcHJvamVjdHMiCiAgICAgICAgICAgICAgIHslIGlmIHJlcXVlc3QucmVzb2x2ZXJfbWF0Y2gudXJsX25hbWUgPT0gJ2FsbC1wcm9qZWN0cycgICV9CiAgICAgICAgICAgICAgIGNsYXNzPSJhY3RpdmUiCkBAIC0xMTgsNiArMTIwLDcgQEAKICAgICAgICAgICAgICAgICBBbGwgcHJvamVjdHMKICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICB7JSBlbmRpZiAlfQogICAgICAgICAgICAgeyUgZW5kaWYgJX0KICAgICAgICAgICAgICAgPGxpIGlkPSJuYXZiYXItZG9jcyI+CiAgICAgICAgICAgICAgIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9sYXRlc3QvdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwuaHRtbCI+CkBAIC0xMjYsNyArMTI5LDkgQEAKICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgIHslIGlmIHByb2plY3RfZW5hYmxlICV9CiAgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IG5hdmJhci1idG4gbmF2YmFyLXJpZ2h0IiBpZD0ibmV3LXByb2plY3QtYnV0dG9uIiBocmVmPSJ7JSB1cmwgJ25ld3Byb2plY3QnICV9Ij5OZXcgcHJvamVjdDwvYT4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CiAgICAgICAgICAgPC9kaXY+CiAgICAgICA8L2Rpdj4KICAgICA8L25hdj4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2Vwcm9qZWN0cGFnZS5odG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXByb2plY3RwYWdlLmh0bWwKaW5kZXggODQyN2QyNS4uZjJiYjJlYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXByb2plY3RwYWdlLmh0bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXByb2plY3RwYWdlLmh0bWwKQEAgLTMyLDYgKzMyLDcgQEAKICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3Rzb2Z0d2FyZXJlY2lwZXMnIHByb2plY3QuaWQgJX0iPlNvZnR3YXJlIHJlY2lwZXM8L2E+PC9saT4KICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RtYWNoaW5lcycgcHJvamVjdC5pZCAlfSI+TWFjaGluZXM8L2E+PC9saT4KICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RsYXllcnMnIHByb2plY3QuaWQgJX0iPkxheWVyczwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAncHJvamVjdGRpc3Ryb3MnIHByb2plY3QuaWQgJX0iPkRpc3Ryb3M8L2E+PC9saT4KICAgICAgIDxsaSBjbGFzcz0ibmF2LWhlYWRlciI+RXh0cmEgY29uZmlndXJhdGlvbjwvbGk+CiAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0Y29uZicgcHJvamVjdC5pZCAlfSI+Qml0QmFrZSB2YXJpYWJsZXM8L2E+PC9saT4KIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGlzdHJvX2J0bi5odG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGlzdHJvX2J0bi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYzc5NDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kaXN0cm9fYnRuLmh0bWwKQEAgLTAsMCArMSwyMCBAQAorPGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0JyBleHRyYS5waWQgJX0/c2V0RGlzdHJvPXt7ZGF0YS5uYW1lfX0iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLWJsb2NrIGxheWVyLWV4aXN0cy17e2RhdGEubGF5ZXJfdmVyc2lvbi5pZH19IgorICAgIHslIGlmIGRhdGEubGF5ZXJfdmVyc2lvbi5wayBub3QgaW4gZXh0cmEuY3VycmVudF9sYXllcnMgJX0KKyAgICBzdHlsZT0iZGlzcGxheTpub25lOyIKKyAgICB7JSBlbmRpZiAlfT4KKyAgU2V0IGRpc3RybzwvYT4KKzxhIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLWJsb2NrIGxheWVyYnRuIGxheWVyLWFkZC17e2RhdGEubGF5ZXJfdmVyc2lvbi5pZH19IiBkYXRhLWxheWVyPSd7CisgICAgImlkIjoge3tkYXRhLmxheWVyX3ZlcnNpb24uaWR9fSwKKyAgICAibmFtZSI6ICAie3tkYXRhLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZX19IiwKKyAgICAieGhyTGF5ZXJVcmwiOiAieyUgdXJsICJ4aHJfbGF5ZXIiIGV4dHJhLnBpZCBkYXRhLnBrICV9IiwKKyAgICAibGF5ZXJkZXRhaWx1cmwiOiAieyV1cmwgJ2xheWVyZGV0YWlscycgZXh0cmEucGlkIGRhdGEubGF5ZXJfdmVyc2lvbi5pZCAlfSIKKyAgICB9JyBkYXRhLWRpcmVjdGl2ZT0iYWRkIgorICAgIHslIGlmIGRhdGEubGF5ZXJfdmVyc2lvbi5wayBpbiBleHRyYS5jdXJyZW50X2xheWVycyAlfQorICAgIHN0eWxlPSJkaXNwbGF5Om5vbmU7IgorICAgIHslIGVuZGlmICV9Cis+CisgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXBsdXMiPjwvc3Bhbj4KKyAgQWRkIGxheWVyCisgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUbyBzZWxlY3QgdGhpcyBkaXN0cm8sIHlvdSBtdXN0IGZpcnN0IGFkZCB0aGUge3tkYXRhLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZX19IGxheWVyIHRvIHlvdXIgcHJvamVjdCI+PC9pPgorPC9hPgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9oZWFsdGguaHRtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2hlYWx0aC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxN2ZkYmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9oZWFsdGguaHRtbApAQCAtMCwwICsxLDYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWwgbGFuZz0iZW4iPgorICA8aGVhZD48dGl0bGU+VG9hc3RlciBIZWFsdGg8L3RpdGxlPjwvaGVhZD4KKyAgPGJvZHk+T2s8L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2xhbmRpbmcuaHRtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2xhbmRpbmcuaHRtbAppbmRleCA0OTg2NjMyLi43MGM3MzU5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9sYW5kaW5nLmh0bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbGFuZGluZy5odG1sCkBAIC0xNCwxMiArMTQsMjAgQEAKIAogICAgICAgICAgICAgICA8cD5BIHdlYiBpbnRlcmZhY2UgdG8gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZW1iZWRkZWQub3JnIj5PcGVuRW1iZWRkZWQ8L2E+IGFuZCA8YSBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2JpdGJha2UiPkJpdEJha2U8L2E+LCB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnIj5Zb2N0byBQcm9qZWN0PC9hPiBidWlsZCBzeXN0ZW0uPC9wPgogCisJCSAgICAgICAgICA8cCBjbGFzcz0idG9wLWFpciI+CisJCSAgICAgICAgICAgIDxhIGNsYXNzPSJidG4gYnRuLWluZm8gYnRuLWxnIiBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9sYXRlc3QvdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwuaHRtbCN0b2FzdGVyLW1hbnVhbC1zZXR1cC1hbmQtdXNlIj4KKwkJCSAgICAgICAgICAgIFRvYXN0ZXIgaXMgcmVhZHkgdG8gY2FwdHVyZSB5b3VyIGNvbW1hbmQgbGluZSBidWlsZHMKKwkJICAgICAgICAgICAgPC9hPgorCQkgICAgICAgICAgPC9wPgorCiAJCSAgICAgICAgICB7JSBpZiBsdnNfbm9zICV9CisgICAgICAgICAgICAgICAgICAgIHslIGlmIHByb2plY3RfZW5hYmxlICV9CiAJCSAgICAgICAgICAgIDxwIGNsYXNzPSJ0b3AtYWlyIj4KIAkJICAgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyIgaHJlZj0ieyUgdXJsICduZXdwcm9qZWN0JyAlfSI+Ci0JCQkgICAgICAgICAgICAgIFRvIHN0YXJ0IGJ1aWxkaW5nLCBjcmVhdGUgeW91ciBmaXJzdCBUb2FzdGVyIHByb2plY3QKKwkJCSAgICAgICAgICAgICAgQ3JlYXRlIHlvdXIgZmlyc3QgVG9hc3RlciBwcm9qZWN0IHRvIHJ1biBtYW5hZ2UgYnVpbGRzCiAJCSAgICAgICAgICAgICAgPC9hPgogCQkgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CiAJCSAgICAgICAgICB7JSBlbHNlICV9CiAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyBsZWFkIHRvcC1haXIiPgogICAgICAgICAgICAgICAgICAgVG9hc3RlciBoYXMgbm8gbGF5ZXIgaW5mb3JtYXRpb24uIFdpdGhvdXQgbGF5ZXIgaW5mb3JtYXRpb24sIHlvdSBjYW5ub3QgcnVuIGJ1aWxkcy4gVG8gZ2VuZXJhdGUgbGF5ZXIgaW5mb3JtYXRpb24geW91IGNhbjoKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL21yYl9zZWN0aW9uLmh0bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9tcmJfc2VjdGlvbi5odG1sCmluZGV4IGI3NjFmZmUuLmM1YjlmZTkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL21yYl9zZWN0aW9uLmh0bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbXJiX3NlY3Rpb24uaHRtbApAQCAtNjQsNyArNjQsOSBAQAogICA8L2Rpdj4KIAogICA8ZGl2IGRhdGEtYnVpbGQtc3RhdGU9IjwlOnN0YXRlJT4iPgotICAgIDwlaWYgc3RhdGUgPT0gJ1BhcnNpbmcnJT4KKyAgICA8JWlmIHN0YXRlID09ICdDbG9uaW5nJyU+CisgICAgICA8JWluY2x1ZGUgdG1wbD0nI2Nsb25pbmctcmVwb3MtYnVpbGQtdGVtcGxhdGUnLyU+CisgICAgPCVlbHNlIHN0YXRlID09ICdQYXJzaW5nJyU+CiAgICAgICA8JWluY2x1ZGUgdG1wbD0nI3BhcnNpbmctcmVjaXBlcy1idWlsZC10ZW1wbGF0ZScvJT4KICAgICA8JWVsc2Ugc3RhdGUgPT0gJ1F1ZXVlZCclPgogICAgICAgPCVpbmNsdWRlIHRtcGw9JyNxdWV1ZWQtYnVpbGQtdGVtcGxhdGUnLyU+CkBAIC05OCw2ICsxMDAsMzEgQEAKICAgPC9kaXY+CiA8L3NjcmlwdD4KIAorPCEtLSBjbG9uaW5nIHJlcG9zIGJ1aWxkIC0tPgorPHNjcmlwdCBpZD0iY2xvbmluZy1yZXBvcy1idWlsZC10ZW1wbGF0ZSIgdHlwZT0idGV4dC94LWpzcmVuZGVyIj4KKyAgPCEtLSBwcm9ncmVzcyBiYXIgYW5kIHBhcnNlIGNvbXBsZXRpb24gcGVyY2VudGFnZSAtLT4KKyAgPGRpdiBkYXRhLXJvbGU9ImJ1aWxkLXN0YXR1cyIgY2xhc3M9ImNvbC1tZC00IGNvbC1tZC1vZmZzZXQtMSBwcm9ncmVzcy1pbmZvIj4KKyAgICA8IS0tIHByb2dyZXNzIGJhciAtLT4KKyAgICA8ZGl2IGNsYXNzPSJwcm9ncmVzcyI+CisgICAgICA8ZGl2IGlkPSJyZXBvcy1jbG9uZWQtcGVyY2VudGFnZS1iYXItPCU6aWQlPiIKKyAgICAgICAgICAgc3R5bGU9IndpZHRoOiA8JTpyZXBvc19jbG9uZWRfcGVyY2VudGFnZSU+JTsiCisgICAgICAgICAgIGNsYXNzPSJwcm9ncmVzcy1iYXIiPgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgIDwvZGl2PgorCisgIDxkaXYgY2xhc3M9ImNvbC1tZC00IHByb2dyZXNzLWluZm8iPgorICAgIDwhLS0gcGFyc2UgY29tcGxldGlvbiBwZXJjZW50YWdlIC0tPgorICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgZ2V0LWhlbHAtYmx1ZSIKKyAgICAgICAgICB0aXRsZT0iVG9hc3RlciBpcyBjbG9uaW5nIHRoZSByZXBvcyByZXF1aXJlZCBmb3IgeW91ciBidWlsZCI+CisgICAgPC9zcGFuPgorCisgICAgQ2xvbmluZyA8c3BhbiBpZD0icmVwb3MtY2xvbmVkLXBlcmNlbnRhZ2UtPCU6aWQlPiI+PCU6cmVwb3NfY2xvbmVkX3BlcmNlbnRhZ2UlPjwvc3Bhbj4lIGNvbXBsZXRlCisKKyAgICA8JWluY2x1ZGUgdG1wbD0nI2NhbmNlbC10ZW1wbGF0ZScvJT4KKyAgPC9kaXY+Cis8L3NjcmlwdD4KKwogPCEtLSBwYXJzaW5nIHJlY2lwZXMgYnVpbGQgLS0+CiA8c2NyaXB0IGlkPSJwYXJzaW5nLXJlY2lwZXMtYnVpbGQtdGVtcGxhdGUiIHR5cGU9InRleHQveC1qc3JlbmRlciI+CiAgIDwhLS0gcHJvZ3Jlc3MgYmFyIGFuZCBwYXJzZSBjb21wbGV0aW9uIHBlcmNlbnRhZ2UgLS0+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0Lmh0bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0Lmh0bWwKaW5kZXggYWI3ZTY2NS4uMTE2MDNkMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdC5odG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3QuaHRtbApAQCAtNzcsNiArNzcsMjIgQEAKICAgICAgIDwvZm9ybT4KICAgICA8L2Rpdj4KIAorICAgIDxkaXYgY2xhc3M9IndlbGwgd2VsbC10cmFuc3BhcmVudCIgaWQ9ImRpc3Ryby1zZWN0aW9uIj4KKyAgICAgIDxoMz5EaXN0cm88L2gzPgorCisgICAgICA8cCBjbGFzcz0ibGVhZCI+PHNwYW4gaWQ9InByb2plY3QtZGlzdHJvLW5hbWUiPjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tZWRpdCIgaWQ9ImNoYW5nZS1kaXN0cm8tdG9nZ2xlIj48L3NwYW4+PC9wPgorCisgICAgICA8Zm9ybSBpZD0ic2VsZWN0LWRpc3Ryby1mb3JtIiBzdHlsZT0iZGlzcGxheTpub25lOyIgY2xhc3M9ImZvcm0taW5saW5lIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtYmxvY2siPkRpc3RybyBzdWdnZXN0aW9ucyBjb21lIGZyb20gdGhlIExheWVyIEluZGV4PC9hPjwvc3Bhbj4KKyAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CisgICAgICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJkaXN0cm8tY2hhbmdlLWlucHV0IiBhdXRvY29tcGxldGU9Im9mZiIgdmFsdWU9IiIgZGF0YS1wcm92aWRlPSJ0eXBlYWhlYWQiIGRhdGEtbWlubGVuZ3RoPSIxIiBkYXRhLWF1dG9jb21wbGV0ZT0ib2ZmIiB0eXBlPSJ0ZXh0Ij4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxidXR0b24gaWQ9ImRpc3Ryby1jaGFuZ2UtYnRuIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB0eXBlPSJidXR0b24iPlNhdmU8L2J1dHRvbj4KKyAgICAgICAgPGEgaHJlZj0iIyIgaWQ9ImNhbmNlbC1kaXN0cm8tY2hhbmdlIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj5DYW5jZWw8L2E+CisgICAgICAgIDxwIGNsYXNzPSJmb3JtLWxpbmsiPjxhIGhyZWY9InslIHVybCAncHJvamVjdGRpc3Ryb3MnIHByb2plY3QuaWQgJX0iPlZpZXcgY29tcGF0aWJsZSBkaXN0cm9zPC9hPjwvcD4KKyAgICAgIDwvZm9ybT4KKyAgICA8L2Rpdj4KKwogICAgIDxkaXYgY2xhc3M9IndlbGwgd2VsbC10cmFuc3BhcmVudCI+CiAgICAgICA8aDM+TW9zdCBidWlsdCByZWNpcGVzPC9oMz4KIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90eXBlYWhlYWRzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90eXBlYWhlYWRzLnB5CmluZGV4IDU4YzY1MGYuLjVhYTBmOGQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdHlwZWFoZWFkcy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3R5cGVhaGVhZHMucHkKQEAgLTEwMCw2ICsxMDAsMzYgQEAKICAgICAgICAgcmV0dXJuIHJlc3VsdHMKIAogCitjbGFzcyBEaXN0cm9zVHlwZUFoZWFkKFRvYXN0ZXJUeXBlQWhlYWQpOgorICAgICIiIiBUeXBlYWhlYWQgZm9yIGFsbCB0aGUgZGlzdHJvcyBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgcHJvamVjdCdzCisgICAgY29uZmlndXJhdGlvbiAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKERpc3Ryb3NUeXBlQWhlYWQsIHNlbGYpLl9faW5pdF9fKCkKKworICAgIGRlZiBhcHBseV9zZWFyY2goc2VsZiwgc2VhcmNoX3Rlcm0sIHByaiwgcmVxdWVzdCk6CisgICAgICAgIGRpc3Ryb3MgPSBwcmouZ2V0X2F2YWlsYWJsZV9kaXN0cm9zKCkKKyAgICAgICAgZGlzdHJvcyA9IGRpc3Ryb3Mub3JkZXJfYnkoIm5hbWUiKQorCisgICAgICAgIHByaW1hcnlfcmVzdWx0cyA9IGRpc3Ryb3MuZmlsdGVyKG5hbWVfX2lzdGFydHN3aXRoPXNlYXJjaF90ZXJtKQorICAgICAgICBzZWNvbmRhcnlfcmVzdWx0cyA9IGRpc3Ryb3MuZmlsdGVyKG5hbWVfX2ljb250YWlucz1zZWFyY2hfdGVybSkuZXhjbHVkZShwa19faW49cHJpbWFyeV9yZXN1bHRzKQorICAgICAgICB0ZXJ0aWFyeV9yZXN1bHRzID0gZGlzdHJvcy5maWx0ZXIobGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWVfX2ljb250YWlucz1zZWFyY2hfdGVybSkuZXhjbHVkZShwa19faW49cHJpbWFyeV9yZXN1bHRzKS5leGNsdWRlKHBrX19pbj1zZWNvbmRhcnlfcmVzdWx0cykKKworICAgICAgICByZXN1bHRzID0gW10KKworICAgICAgICBmb3IgZGlzdHJvIGluIGxpc3QocHJpbWFyeV9yZXN1bHRzKSArIGxpc3Qoc2Vjb25kYXJ5X3Jlc3VsdHMpICsgbGlzdCh0ZXJ0aWFyeV9yZXN1bHRzKToKKworICAgICAgICAgICAgZGV0YWlsID0gIlsgJXMgXSIgJSAoZGlzdHJvLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZSkKKyAgICAgICAgICAgIG5lZWRlZF9maWVsZHMgPSB7CisgICAgICAgICAgICAgICAgJ2lkJyA6IGRpc3Ryby5waywKKyAgICAgICAgICAgICAgICAnbmFtZScgOiBkaXN0cm8ubmFtZSwKKyAgICAgICAgICAgICAgICAnZGV0YWlsJyA6IGRldGFpbCwKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobmVlZGVkX2ZpZWxkcykKKworICAgICAgICByZXR1cm4gcmVzdWx0cworCisKIGNsYXNzIFJlY2lwZXNUeXBlQWhlYWQoVG9hc3RlclR5cGVBaGVhZCk6CiAgICAgIiIiIFR5cGVhaGVhZCBmb3IgYWxsIHRoZSByZWNpcGVzIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBwcm9qZWN0J3MKICAgICBjb25maWd1cmF0aW9uICIiIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS91cmxzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS91cmxzLnB5CmluZGV4IGQ5MmYxOTAuLmUwN2IwZWYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdXJscy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3VybHMucHkKQEAgLTEsNyArMSw3IEBACiAjCiAjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgogIwotIyBDb3B5cmlnaHQgKEMpIDIwMTMgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAoQykgMjAxMy0yMDE3ICAgIEludGVsIENvcnBvcmF0aW9uCiAjCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xNiw3ICsxNiw3IEBACiAjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCiAKLWZyb20gZGphbmdvLmNvbmYudXJscyBpbXBvcnQgcGF0dGVybnMsIGluY2x1ZGUsIHVybAorZnJvbSBkamFuZ28uY29uZi51cmxzIGltcG9ydCBpbmNsdWRlLCB1cmwKIGZyb20gZGphbmdvLnZpZXdzLmdlbmVyaWMgaW1wb3J0IFJlZGlyZWN0VmlldywgVGVtcGxhdGVWaWV3CiAKIGZyb20gZGphbmdvLmh0dHAgaW1wb3J0IEh0dHBSZXNwb25zZUJhZFJlcXVlc3QKQEAgLTI1LDQ5ICsyNSw1MCBAQAogZnJvbSB0b2FzdGVyZ3VpIGltcG9ydCB0eXBlYWhlYWRzCiBmcm9tIHRvYXN0ZXJndWkgaW1wb3J0IGFwaQogZnJvbSB0b2FzdGVyZ3VpIGltcG9ydCB3aWRnZXRzCitmcm9tIHRvYXN0ZXJndWkgaW1wb3J0IHZpZXdzCiAKLXVybHBhdHRlcm5zID0gcGF0dGVybnMoJ3RvYXN0ZXJndWkudmlld3MnLAordXJscGF0dGVybnMgPSBbCiAgICAgICAgICMgbGFuZGluZyBwYWdlCi0gICAgICAgIHVybChyJ15sYW5kaW5nLyQnLCAnbGFuZGluZycsIG5hbWU9J2xhbmRpbmcnKSwKKyAgICAgICAgdXJsKHInXmxhbmRpbmcvJCcsIHZpZXdzLmxhbmRpbmcsIG5hbWU9J2xhbmRpbmcnKSwKIAogICAgICAgICB1cmwocideYnVpbGRzLyQnLAogICAgICAgICAgICAgdGFibGVzLkFsbEJ1aWxkc1RhYmxlLmFzX3ZpZXcodGVtcGxhdGVfbmFtZT0iYnVpbGRzLXRvYXN0ZXJ0YWJsZS5odG1sIiksCiAgICAgICAgICAgICBuYW1lPSdhbGwtYnVpbGRzJyksCiAKICAgICAgICAgIyBidWlsZCBpbmZvIG5hdmlnYXRpb24KLSAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspJCcsICdidWlsZGRhc2hib2FyZCcsIG5hbWU9ImJ1aWxkZGFzaGJvYXJkIiksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKSQnLCB2aWV3cy5idWlsZGRhc2hib2FyZCwgbmFtZT0iYnVpbGRkYXNoYm9hcmQiKSwKICAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3Rhc2tzLyQnLAogICAgICAgICAgICAgYnVpbGR0YWJsZXMuQnVpbGRUYXNrc1RhYmxlLmFzX3ZpZXcoCiAgICAgICAgICAgICAgICAgdGVtcGxhdGVfbmFtZT0iYnVpbGRpbmZvLXRvYXN0ZXJ0YWJsZS5odG1sIiksCiAgICAgICAgICAgICBuYW1lPSd0YXNrcycpLAogCi0gICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS90YXNrLyg/UDx0YXNrX2lkPlxkKykkJywgJ3Rhc2snLCBuYW1lPSd0YXNrJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS90YXNrLyg/UDx0YXNrX2lkPlxkKykkJywgdmlld3MudGFzaywgbmFtZT0ndGFzaycpLAogCiAgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9yZWNpcGVzLyQnLAogICAgICAgICAgICAgYnVpbGR0YWJsZXMuQnVpbHRSZWNpcGVzVGFibGUuYXNfdmlldygKICAgICAgICAgICAgICAgICB0ZW1wbGF0ZV9uYW1lPSJidWlsZGluZm8tdG9hc3RlcnRhYmxlLmh0bWwiKSwKICAgICAgICAgICAgIG5hbWU9J3JlY2lwZXMnKSwKIAotICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvcmVjaXBlLyg/UDxyZWNpcGVfaWQ+XGQrKS9hY3RpdmVfdGFiLyg/UDxhY3RpdmVfdGFiPlxkezF9KSQnLCAncmVjaXBlJywgbmFtZT0ncmVjaXBlJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9yZWNpcGUvKD9QPHJlY2lwZV9pZD5cZCspL2FjdGl2ZV90YWIvKD9QPGFjdGl2ZV90YWI+XGR7MX0pJCcsIHZpZXdzLnJlY2lwZSwgbmFtZT0ncmVjaXBlJyksCiAKLSAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3JlY2lwZS8oP1A8cmVjaXBlX2lkPlxkKykkJywgJ3JlY2lwZScsIG5hbWU9J3JlY2lwZScpLAotICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvcmVjaXBlX3BhY2thZ2VzLyg/UDxyZWNpcGVfaWQ+XGQrKSQnLCAncmVjaXBlX3BhY2thZ2VzJywgbmFtZT0ncmVjaXBlX3BhY2thZ2VzJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9yZWNpcGUvKD9QPHJlY2lwZV9pZD5cZCspJCcsIHZpZXdzLnJlY2lwZSwgbmFtZT0ncmVjaXBlJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9yZWNpcGVfcGFja2FnZXMvKD9QPHJlY2lwZV9pZD5cZCspJCcsIHZpZXdzLnJlY2lwZV9wYWNrYWdlcywgbmFtZT0ncmVjaXBlX3BhY2thZ2VzJyksCiAKICAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3BhY2thZ2VzLyQnLAogICAgICAgICAgICAgYnVpbGR0YWJsZXMuQnVpbHRQYWNrYWdlc1RhYmxlLmFzX3ZpZXcoCiAgICAgICAgICAgICAgICAgdGVtcGxhdGVfbmFtZT0iYnVpbGRpbmZvLXRvYXN0ZXJ0YWJsZS5odG1sIiksCiAgICAgICAgICAgICBuYW1lPSdwYWNrYWdlcycpLAogCi0gICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9wYWNrYWdlLyg/UDxwYWNrYWdlX2lkPlxkKykkJywgJ3BhY2thZ2VfYnVpbHRfZGV0YWlsJywKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3BhY2thZ2UvKD9QPHBhY2thZ2VfaWQ+XGQrKSQnLCB2aWV3cy5wYWNrYWdlX2J1aWx0X2RldGFpbCwKICAgICAgICAgICAgICAgICBuYW1lPSdwYWNrYWdlX2J1aWx0X2RldGFpbCcpLAogICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvcGFja2FnZV9idWlsdF9kZXBlbmRlbmNpZXMvKD9QPHBhY2thZ2VfaWQ+XGQrKSQnLAotICAgICAgICAgICAgJ3BhY2thZ2VfYnVpbHRfZGVwZW5kZW5jaWVzJywgbmFtZT0ncGFja2FnZV9idWlsdF9kZXBlbmRlbmNpZXMnKSwKKyAgICAgICAgICAgIHZpZXdzLnBhY2thZ2VfYnVpbHRfZGVwZW5kZW5jaWVzLCBuYW1lPSdwYWNrYWdlX2J1aWx0X2RlcGVuZGVuY2llcycpLAogICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvcGFja2FnZV9pbmNsdWRlZF9kZXRhaWwvKD9QPHRhcmdldF9pZD5cZCspLyg/UDxwYWNrYWdlX2lkPlxkKykkJywKLSAgICAgICAgICAgICdwYWNrYWdlX2luY2x1ZGVkX2RldGFpbCcsIG5hbWU9J3BhY2thZ2VfaW5jbHVkZWRfZGV0YWlsJyksCisgICAgICAgICAgICB2aWV3cy5wYWNrYWdlX2luY2x1ZGVkX2RldGFpbCwgbmFtZT0ncGFja2FnZV9pbmNsdWRlZF9kZXRhaWwnKSwKICAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3BhY2thZ2VfaW5jbHVkZWRfZGVwZW5kZW5jaWVzLyg/UDx0YXJnZXRfaWQ+XGQrKS8oP1A8cGFja2FnZV9pZD5cZCspJCcsCi0gICAgICAgICAgICAncGFja2FnZV9pbmNsdWRlZF9kZXBlbmRlbmNpZXMnLCBuYW1lPSdwYWNrYWdlX2luY2x1ZGVkX2RlcGVuZGVuY2llcycpLAorICAgICAgICAgICAgdmlld3MucGFja2FnZV9pbmNsdWRlZF9kZXBlbmRlbmNpZXMsIG5hbWU9J3BhY2thZ2VfaW5jbHVkZWRfZGVwZW5kZW5jaWVzJyksCiAgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9wYWNrYWdlX2luY2x1ZGVkX3JldmVyc2VfZGVwZW5kZW5jaWVzLyg/UDx0YXJnZXRfaWQ+XGQrKS8oP1A8cGFja2FnZV9pZD5cZCspJCcsCi0gICAgICAgICAgICAncGFja2FnZV9pbmNsdWRlZF9yZXZlcnNlX2RlcGVuZGVuY2llcycsIG5hbWU9J3BhY2thZ2VfaW5jbHVkZWRfcmV2ZXJzZV9kZXBlbmRlbmNpZXMnKSwKKyAgICAgICAgICAgIHZpZXdzLnBhY2thZ2VfaW5jbHVkZWRfcmV2ZXJzZV9kZXBlbmRlbmNpZXMsIG5hbWU9J3BhY2thZ2VfaW5jbHVkZWRfcmV2ZXJzZV9kZXBlbmRlbmNpZXMnKSwKIAogICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvdGFyZ2V0Lyg/UDx0YXJnZXRfaWQ+XGQrKSQnLAogICAgICAgICAgICAgYnVpbGR0YWJsZXMuSW5zdGFsbGVkUGFja2FnZXNUYWJsZS5hc192aWV3KApAQCAtNzUsMTEgKzc2LDExIEBACiAgICAgICAgICAgICBuYW1lPSd0YXJnZXQnKSwKIAogCi0gICAgICAgIHVybChyJ15kZW50cmllcy9idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS90YXJnZXQvKD9QPHRhcmdldF9pZD5cZCspJCcsICd4aHJfZGlyaW5mbycsIG5hbWU9J2RpcmluZm9fYWpheCcpLAotICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvdGFyZ2V0Lyg/UDx0YXJnZXRfaWQ+XGQrKS9kaXJpbmZvJCcsICdkaXJpbmZvJywgbmFtZT0nZGlyaW5mbycpLAotICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvdGFyZ2V0Lyg/UDx0YXJnZXRfaWQ+XGQrKS9kaXJpbmZvX2ZpbGVwYXRoL18oP1A8ZmlsZV9wYXRoPig/Oi9bXi9cbl0rKSopJCcsICdkaXJpbmZvJywgbmFtZT0nZGlyaW5mb19maWxlcGF0aCcpLAotICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvY29uZmlndXJhdGlvbiQnLCAnY29uZmlndXJhdGlvbicsIG5hbWU9J2NvbmZpZ3VyYXRpb24nKSwKLSAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL2NvbmZpZ3ZhcnMkJywgJ2NvbmZpZ3ZhcnMnLCBuYW1lPSdjb25maWd2YXJzJyksCisgICAgICAgIHVybChyJ15kZW50cmllcy9idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS90YXJnZXQvKD9QPHRhcmdldF9pZD5cZCspJCcsIHZpZXdzLnhocl9kaXJpbmZvLCBuYW1lPSdkaXJpbmZvX2FqYXgnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3RhcmdldC8oP1A8dGFyZ2V0X2lkPlxkKykvZGlyaW5mbyQnLCB2aWV3cy5kaXJpbmZvLCBuYW1lPSdkaXJpbmZvJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS90YXJnZXQvKD9QPHRhcmdldF9pZD5cZCspL2RpcmluZm9fZmlsZXBhdGgvXyg/UDxmaWxlX3BhdGg+KD86L1teL1xuXSspKikkJywgdmlld3MuZGlyaW5mbywgbmFtZT0nZGlyaW5mb19maWxlcGF0aCcpLAorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvY29uZmlndXJhdGlvbiQnLCB2aWV3cy5jb25maWd1cmF0aW9uLCBuYW1lPSdjb25maWd1cmF0aW9uJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9jb25maWd2YXJzJCcsIHZpZXdzLmNvbmZpZ3ZhcnMsIG5hbWU9J2NvbmZpZ3ZhcnMnKSwKICAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL2J1aWxkdGltZSQnLAogICAgICAgICAgICAgYnVpbGR0YWJsZXMuQnVpbGRUaW1lVGFibGUuYXNfdmlldygKICAgICAgICAgICAgICAgICB0ZW1wbGF0ZV9uYW1lPSJidWlsZGluZm8tdG9hc3RlcnRhYmxlLmh0bWwiKSwKQEAgLTk3LDI2ICs5OCwyNiBAQAogCiAgICAgICAgICMgaW1hZ2UgaW5mb3JtYXRpb24gZGlyCiAgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS90YXJnZXQvKD9QPHRhcmdldF9pZD5cZCspL3BhY2thZ2VmaWxlLyg/UDxwYWNrYWdlZmlsZV9pZD5cZCspJCcsCi0gICAgICAgICAgICAgJ2ltYWdlX2luZm9ybWF0aW9uX2RpcicsIG5hbWU9J2ltYWdlX2luZm9ybWF0aW9uX2RpcicpLAorICAgICAgICAgICAgIHZpZXdzLmltYWdlX2luZm9ybWF0aW9uX2RpciwgbmFtZT0naW1hZ2VfaW5mb3JtYXRpb25fZGlyJyksCiAKICAgICAgICAgIyBidWlsZCBkb3dubG9hZCBhcnRpZmFjdAotICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvYXJ0aWZhY3QvKD9QPGFydGlmYWN0X3R5cGU+XHcrKS9pZC8oP1A8YXJ0aWZhY3RfaWQ+XHcrKScsICdidWlsZF9hcnRpZmFjdCcsIG5hbWU9ImJ1aWxkX2FydGlmYWN0IiksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9hcnRpZmFjdC8oP1A8YXJ0aWZhY3RfdHlwZT5cdyspL2lkLyg/UDxhcnRpZmFjdF9pZD5cdyspJywgdmlld3MuYnVpbGRfYXJ0aWZhY3QsIG5hbWU9ImJ1aWxkX2FydGlmYWN0IiksCiAKICAgICAgICAgIyBwcm9qZWN0IFVSTHMKLSAgICAgICAgdXJsKHInXm5ld3Byb2plY3QvJCcsICduZXdwcm9qZWN0JywgbmFtZT0nbmV3cHJvamVjdCcpLAorICAgICAgICB1cmwocidebmV3cHJvamVjdC8kJywgdmlld3MubmV3cHJvamVjdCwgbmFtZT0nbmV3cHJvamVjdCcpLAogCiAgICAgICAgIHVybChyJ15wcm9qZWN0cy8kJywKICAgICAgICAgICAgIHRhYmxlcy5Qcm9qZWN0c1RhYmxlLmFzX3ZpZXcodGVtcGxhdGVfbmFtZT0icHJvamVjdHMtdG9hc3RlcnRhYmxlLmh0bWwiKSwKICAgICAgICAgICAgIG5hbWU9J2FsbC1wcm9qZWN0cycpLAogCi0gICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS8kJywgJ3Byb2plY3QnLCBuYW1lPSdwcm9qZWN0JyksCi0gICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS9jb25maWd1cmF0aW9uJCcsICdwcm9qZWN0Y29uZicsIG5hbWU9J3Byb2plY3Rjb25mJyksCisgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS8kJywgdmlld3MucHJvamVjdCwgbmFtZT0ncHJvamVjdCcpLAorICAgICAgICB1cmwocidecHJvamVjdC8oP1A8cGlkPlxkKykvY29uZmlndXJhdGlvbiQnLCB2aWV3cy5wcm9qZWN0Y29uZiwgbmFtZT0ncHJvamVjdGNvbmYnKSwKICAgICAgICAgdXJsKHInXnByb2plY3QvKD9QPHBpZD5cZCspL2J1aWxkcy8kJywKICAgICAgICAgICAgIHRhYmxlcy5Qcm9qZWN0QnVpbGRzVGFibGUuYXNfdmlldyh0ZW1wbGF0ZV9uYW1lPSJwcm9qZWN0YnVpbGRzLXRvYXN0ZXJ0YWJsZS5odG1sIiksCiAgICAgICAgICAgICBuYW1lPSdwcm9qZWN0YnVpbGRzJyksCiAKICAgICAgICAgIyB0aGUgaW1wb3J0IGxheWVyIGlzIGEgcHJvamVjdC1zcGVjaWZpYyBmdW5jdGlvbmFsaXR5OwotICAgICAgICB1cmwocidecHJvamVjdC8oP1A8cGlkPlxkKykvaW1wb3J0bGF5ZXIkJywgJ2ltcG9ydGxheWVyJywgbmFtZT0naW1wb3J0bGF5ZXInKSwKKyAgICAgICAgdXJsKHInXnByb2plY3QvKD9QPHBpZD5cZCspL2ltcG9ydGxheWVyJCcsIHZpZXdzLmltcG9ydGxheWVyLCBuYW1lPSdpbXBvcnRsYXllcicpLAogCiAgICAgICAgICMgdGhlIHRhYmxlIHBhZ2VzIHRoYXQgaGF2ZSBiZWVuIGNvbnZlcnRlZCB0byBUb2FzdGVyVGFibGUgd2lkZ2V0CiAgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS9tYWNoaW5lcy8kJywKQEAgLTE0Miw3ICsxNDMsNyBAQAogICAgICAgICAgICAgbmFtZT0icHJvamVjdGxheWVycyIpLAogCiAgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS9sYXllci8oP1A8bGF5ZXJpZD5cZCspJCcsCi0gICAgICAgICAgICAnbGF5ZXJkZXRhaWxzJywgbmFtZT0nbGF5ZXJkZXRhaWxzJyksCisgICAgICAgICAgICB2aWV3cy5sYXllcmRldGFpbHMsIG5hbWU9J2xheWVyZGV0YWlscycpLAogCiAgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS9sYXllci8oP1A8bGF5ZXJpZD5cZCspL3JlY2lwZXMvJCcsCiAgICAgICAgICAgICB0YWJsZXMuTGF5ZXJSZWNpcGVzVGFibGUuYXNfdmlldyh0ZW1wbGF0ZV9uYW1lPSJnZW5lcmljLXRvYXN0ZXJ0YWJsZS1wYWdlLmh0bWwiKSwKQEAgLTE1Nyw2ICsxNTgsMTEgQEAKICAgICAgICAgICAgIG5hbWU9dGFibGVzLkxheWVyTWFjaGluZXNUYWJsZS5fX25hbWVfXy5sb3dlcigpKSwKIAogCisgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS9kaXN0cm9zLyQnLAorICAgICAgICAgICAgdGFibGVzLkRpc3Ryb3NUYWJsZS5hc192aWV3KHRlbXBsYXRlX25hbWU9ImdlbmVyaWMtdG9hc3RlcnRhYmxlLXBhZ2UuaHRtbCIpLAorICAgICAgICAgICAgbmFtZT0icHJvamVjdGRpc3Ryb3MiKSwKKworCiAgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS9jdXN0b21yZWNpcGUvKD9QPGN1c3RyZWNpcGVpZD5cZCspL3NlbGVjdHBhY2thZ2VzLyQnLAogICAgICAgICAgICAgdGFibGVzLlNlbGVjdFBhY2thZ2VzVGFibGUuYXNfdmlldygpLCBuYW1lPSJyZWNpcGVzZWxlY3RwYWNrYWdlcyIpLAogCkBAIC0xNjYsNyArMTcyLDcgQEAKICAgICAgICAgICAgIG5hbWU9ImN1c3RvbXJlY2lwZSIpLAogCiAgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS9jdXN0b21yZWNpcGUvKD9QPHJlY2lwZV9pZD5cZCspL2Rvd25sb2FkJCcsCi0gICAgICAgICAgICAnY3VzdG9tcmVjaXBlX2Rvd25sb2FkJywKKyAgICAgICAgICAgIHZpZXdzLmN1c3RvbXJlY2lwZV9kb3dubG9hZCwKICAgICAgICAgICAgIG5hbWU9ImN1c3RvbXJlY2lwZWRvd25sb2FkIiksCiAKICAgICAgICAgdXJsKHInXnByb2plY3QvKD9QPHBpZD5cZCspL3JlY2lwZS8oP1A8cmVjaXBlX2lkPlxkKykkJywKQEAgLTE4Niw5ICsxOTIsMTIgQEAKICAgICAgICAgICAgIHR5cGVhaGVhZHMuR2l0UmV2aXNpb25UeXBlQWhlYWQuYXNfdmlldygpLAogICAgICAgICAgICAgbmFtZT0neGhyX2dpdHJldnR5cGVhaGVhZCcpLAogCi0gICAgICAgIHVybChyJ154aHJfdGVzdHJlbGVhc2VjaGFuZ2UvKD9QPHBpZD5cZCspJCcsICd4aHJfdGVzdHJlbGVhc2VjaGFuZ2UnLAorICAgICAgICB1cmwocideeGhyX3R5cGVhaGVhZC8oP1A8cGlkPlxkKykvZGlzdHJvcyQnLAorICAgICAgICAgICAgdHlwZWFoZWFkcy5EaXN0cm9zVHlwZUFoZWFkLmFzX3ZpZXcoKSwgbmFtZT0neGhyX2Rpc3Ryb3N0eXBlYWhlYWQnKSwKKworICAgICAgICB1cmwocideeGhyX3Rlc3RyZWxlYXNlY2hhbmdlLyg/UDxwaWQ+XGQrKSQnLCB2aWV3cy54aHJfdGVzdHJlbGVhc2VjaGFuZ2UsCiAgICAgICAgICAgICBuYW1lPSd4aHJfdGVzdHJlbGVhc2VjaGFuZ2UnKSwKLSAgICAgICAgdXJsKHInXnhocl9jb25maWd2YXJlZGl0Lyg/UDxwaWQ+XGQrKSQnLCAneGhyX2NvbmZpZ3ZhcmVkaXQnLAorICAgICAgICB1cmwocideeGhyX2NvbmZpZ3ZhcmVkaXQvKD9QPHBpZD5cZCspJCcsIHZpZXdzLnhocl9jb25maWd2YXJlZGl0LAogICAgICAgICAgICAgbmFtZT0neGhyX2NvbmZpZ3ZhcmVkaXQnKSwKIAogICAgICAgICB1cmwocideeGhyX2xheWVyLyg/UDxwaWQ+XGQrKS8oP1A8bGF5ZXJ2ZXJzaW9uX2lkPlxkKykkJywKQEAgLTIwMCw3ICsyMDksNyBAQAogICAgICAgICAgICAgbmFtZT0neGhyX2xheWVyJyksCiAKICAgICAgICAgIyBKUyBVbml0IHRlc3RzCi0gICAgICAgIHVybChyJ15qcy11bml0LXRlc3RzLyQnLCAnanN1bml0dGVzdHMnLCBuYW1lPSdqcy11bml0LXRlc3RzJyksCisgICAgICAgIHVybChyJ15qcy11bml0LXRlc3RzLyQnLCB2aWV3cy5qc3VuaXR0ZXN0cywgbmFtZT0nanMtdW5pdC10ZXN0cycpLAogCiAgICAgICAgICMgaW1hZ2UgY3VzdG9taXNhdGlvbiBmdW5jdGlvbmFsaXR5CiAgICAgICAgIHVybChyJ154aHJfY3VzdG9tcmVjaXBlLyg/UDxyZWNpcGVfaWQ+XGQrKScKQEAgLTIzNSw2ICsyNDQsMTEgQEAKICAgICAgICAgdXJsKHInXm1vc3RyZWNlbnRidWlsZHMkJywgd2lkZ2V0cy5Nb3N0UmVjZW50QnVpbGRzVmlldy5hc192aWV3KCksCiAgICAgICAgICAgICBuYW1lPSdtb3N0X3JlY2VudF9idWlsZHMnKSwKIAotICAgICAgICAgICMgZGVmYXVsdCByZWRpcmVjdGlvbgorICAgICAgICAjIEpTT04gZGF0YSBmb3IgYWdncmVnYXRvcnMKKyAgICAgICAgdXJsKHInXmFwaS9idWlsZHMkJywgdmlld3MuanNvbl9idWlsZHMsIG5hbWU9J2pzb25fYnVpbGRzJyksCisgICAgICAgIHVybChyJ15hcGkvYnVpbGRpbmckJywgdmlld3MuanNvbl9idWlsZGluZywgbmFtZT0nanNvbl9idWlsZGluZycpLAorICAgICAgICB1cmwocideYXBpL2J1aWxkLyg/UDxidWlsZF9pZD5cZCspJCcsIHZpZXdzLmpzb25fYnVpbGQsIG5hbWU9J2pzb25fYnVpbGQnKSwKKworICAgICAgICAjIGRlZmF1bHQgcmVkaXJlY3Rpb24KICAgICAgICAgdXJsKHInXiQnLCBSZWRpcmVjdFZpZXcuYXNfdmlldyh1cmw9J2xhbmRpbmcnLCBwZXJtYW5lbnQ9VHJ1ZSkpLAotKQorXQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS92aWV3cy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdmlld3MucHkKaW5kZXggNzVjNTkxMS4uMzRlZDJiMiAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS92aWV3cy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3ZpZXdzLnB5CkBAIC0zNSw3ICszNSw3IEBACiBmcm9tIGRqYW5nby5jb3JlLnVybHJlc29sdmVycyBpbXBvcnQgcmV2ZXJzZSwgcmVzb2x2ZQogZnJvbSBkamFuZ28uY29yZS5leGNlcHRpb25zIGltcG9ydCBNdWx0aXBsZU9iamVjdHNSZXR1cm5lZCwgT2JqZWN0RG9lc05vdEV4aXN0CiBmcm9tIGRqYW5nby5jb3JlLnBhZ2luYXRvciBpbXBvcnQgUGFnaW5hdG9yLCBFbXB0eVBhZ2UsIFBhZ2VOb3RBbkludGVnZXIKLWZyb20gZGphbmdvLmh0dHAgaW1wb3J0IEh0dHBSZXNwb25zZU5vdEZvdW5kCitmcm9tIGRqYW5nby5odHRwIGltcG9ydCBIdHRwUmVzcG9uc2VOb3RGb3VuZCwgSnNvblJlc3BvbnNlCiBmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKIGZyb20gZGF0ZXRpbWUgaW1wb3J0IHRpbWVkZWx0YSwgZGF0ZXRpbWUKIGZyb20gdG9hc3Rlcmd1aS50ZW1wbGF0ZXRhZ3MucHJvamVjdHRhZ3MgaW1wb3J0IGpzb24gYXMganNvbmZpbHRlcgpAQCAtNDksNiArNDksOCBAQAogCiBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigidG9hc3RlciIpCiAKKyMgUHJvamVjdCBjcmVhdGlvbiBhbmQgbWFuYWdlZCBidWlsZCBlbmFibGUKK3Byb2plY3RfZW5hYmxlID0gKCcxJyA9PSBvcy5lbnZpcm9uLmdldCgnVE9BU1RFUl9CVUlMRFNFUlZFUicpKQogCiBjbGFzcyBNaW1lVHlwZUZpbmRlcihvYmplY3QpOgogICAgICMgc2V0dGluZyB0aGlzIHRvIEZhbHNlIGVuYWJsZXMgYWRkaXRpb25hbCBub24tc3RhbmRhcmQgbWltZXR5cGVzCkBAIC02NSw2ICs2NywxMiBAQAogICAgICAgICAgICAgZ3Vlc3NlZF90eXBlID0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScKICAgICAgICAgcmV0dXJuIGd1ZXNzZWRfdHlwZQogCisjIHNpbmdsZSBwb2ludCB0byBhZGQgZ2xvYmFsIHZhbHVlcyBpbnRvIHRoZSBjb250ZXh0IGJlZm9yZSByZW5kZXJpbmcKK2RlZiB0b2FzdGVyX3JlbmRlcihyZXF1ZXN0LCBwYWdlLCBjb250ZXh0KToKKyAgICBjb250ZXh0Wydwcm9qZWN0X2VuYWJsZSddID0gcHJvamVjdF9lbmFibGUKKyAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsIHBhZ2UsIGNvbnRleHQpCisKKwogIyBhbGwgbmV3IHNlc3Npb25zIHNob3VsZCBjb21lIHRocm91Z2ggdGhlIGxhbmRpbmcgcGFnZTsKICMgZGV0ZXJtaW5lIGluIHdoaWNoIG1vZGUgd2UgYXJlIHJ1bm5pbmcgaW4sIGFuZCByZWRpcmVjdCBhcHByb3ByaWF0ZWx5CiBkZWYgbGFuZGluZyhyZXF1ZXN0KToKQEAgLTg2LDcgKzk0LDcgQEAKIAogICAgIGNvbnRleHQgPSB7J2x2c19ub3MnIDogTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmFsbCgpLmNvdW50KCl9CiAKLSAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICdsYW5kaW5nLmh0bWwnLCBjb250ZXh0KQorICAgIHJldHVybiB0b2FzdGVyX3JlbmRlcihyZXF1ZXN0LCAnbGFuZGluZy5odG1sJywgY29udGV4dCkKIAogZGVmIG9ianRvanNvbihvYmopOgogICAgIGZyb20gZGphbmdvLmRiLm1vZGVscy5xdWVyeSBpbXBvcnQgUXVlcnlTZXQKQEAgLTI3Nyw3ICsyODUsNyBAQAogICAgICAgICAgICAgcmV0dXJuIE5vbmUsIGludmFsaWQgKyBzdHIoZmllbGRfaW5wdXRfbGlzdCkKIAogICAgICAgICAjIENoZWNrIHdlIGFyZSBsb29raW5nIGZvciBhIHZhbGlkIGZpZWxkCi0gICAgICAgIHZhbGlkX2ZpZWxkcyA9IG1vZGVsLl9tZXRhLmdldF9hbGxfZmllbGRfbmFtZXMoKQorICAgICAgICB2YWxpZF9maWVsZHMgPSBbZi5uYW1lIGZvciBmIGluIG1vZGVsLl9tZXRhLmdldF9maWVsZHMoKV0KICAgICAgICAgZm9yIGZpZWxkIGluIGZpZWxkX2lucHV0X2xpc3RbMF0uc3BsaXQoQU5EX1ZBTFVFX1NFUEFSQVRPUik6CiAgICAgICAgICAgICBpZiBUcnVlIGluIFtmaWVsZC5zdGFydHN3aXRoKHgpIGZvciB4IGluIHZhbGlkX2ZpZWxkc106CiAgICAgICAgICAgICAgICAgYnJlYWsKQEAgLTQ1NywxMCArNDY1LDE1IEBACiAgICAgICAgIG5wa2cgPSAwCiAgICAgICAgIHBrZ3N6ID0gMAogICAgICAgICBwYWNrYWdlID0gTm9uZQotICAgICAgICBmb3IgcGFja2FnZSBpbiBQYWNrYWdlLm9iamVjdHMuZmlsdGVyKGlkX19pbiA9IFt4LnBhY2thZ2VfaWQgZm9yIHggaW4gdC50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2Vfc2V0LmFsbCgpXSk6Ci0gICAgICAgICAgICBwa2dzeiA9IHBrZ3N6ICsgcGFja2FnZS5zaXplCi0gICAgICAgICAgICBpZiBwYWNrYWdlLmluc3RhbGxlZF9uYW1lOgotICAgICAgICAgICAgICAgIG5wa2cgPSBucGtnICsgMQorICAgICAgICAjIENodW5rIHRoZSBxdWVyeSB0byBhdm9pZCAidG9vIG1hbnkgU1FMIHZhcmlhYmxlcyIgZXJyb3IKKyAgICAgICAgcGFja2FnZV9zZXQgPSB0LnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZV9zZXQuYWxsKCkKKyAgICAgICAgcGFja2FnZV9zZXRfbGVuID0gbGVuKHBhY2thZ2Vfc2V0KQorICAgICAgICBmb3IgcHNfc3RhcnQgaW4gcmFuZ2UoMCxwYWNrYWdlX3NldF9sZW4sNTAwKToKKyAgICAgICAgICAgIHBzX3N0b3AgPSBtaW4ocHNfc3RhcnQrNTAwLHBhY2thZ2Vfc2V0X2xlbikKKyAgICAgICAgICAgIGZvciBwYWNrYWdlIGluIFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoaWRfX2luID0gW3gucGFja2FnZV9pZCBmb3IgeCBpbiBwYWNrYWdlX3NldFtwc19zdGFydDpwc19zdG9wXV0pOgorICAgICAgICAgICAgICAgIHBrZ3N6ID0gcGtnc3ogKyBwYWNrYWdlLnNpemUKKyAgICAgICAgICAgICAgICBpZiBwYWNrYWdlLmluc3RhbGxlZF9uYW1lOgorICAgICAgICAgICAgICAgICAgICBucGtnID0gbnBrZyArIDEKICAgICAgICAgZWxlbVsnbnBrZyddID0gbnBrZwogICAgICAgICBlbGVtWydwa2dzeiddID0gcGtnc3oKICAgICAgICAgdGkgPSBUYXJnZXRfSW1hZ2VfRmlsZS5vYmplY3RzLmZpbHRlcih0YXJnZXRfaWQgPSB0LmlkKQpAQCAtNTE0LDcgKzUyNyw3IEBACiAgICAgICAgICAgICAncGFja2FnZWNvdW50JyAgICA6IHBhY2thZ2VDb3VudCwKICAgICAgICAgICAgICdsb2dtZXNzYWdlcycgICAgIDogbG9nbWVzc2FnZXMsCiAgICAgfQotICAgIHJldHVybiByZW5kZXIoIHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0ICkKKyAgICByZXR1cm4gdG9hc3Rlcl9yZW5kZXIoIHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0ICkKIAogCiAKQEAgLTU4Niw3ICs1OTksNyBAQAogICAgICAgICAgICAgYnVpbGRfX2NvbXBsZXRlZF9vbl9fbHQ9dGFza19vYmplY3QuYnVpbGQuY29tcGxldGVkX29uKS5leGNsdWRlKAogICAgICAgICAgICAgb3JkZXJfX2lzbnVsbD1UcnVlKS5leGNsdWRlKG91dGNvbWU9VGFzay5PVVRDT01FX05BKS5vcmRlcl9ieSgnLWJ1aWxkX19jb21wbGV0ZWRfb24nKQogCi0gICAgcmV0dXJuIHJlbmRlciggcmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQgKQorICAgIHJldHVybiB0b2FzdGVyX3JlbmRlciggcmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQgKQogCiBkZWYgcmVjaXBlKHJlcXVlc3QsIGJ1aWxkX2lkLCByZWNpcGVfaWQsIGFjdGl2ZV90YWI9IjEiKToKICAgICB0ZW1wbGF0ZSA9ICJyZWNpcGUuaHRtbCIKQEAgLTYxMyw3ICs2MjYsNyBAQAogICAgICAgICAgICAgJ3BhY2thZ2VfY291bnQnIDogcGFja2FnZV9jb3VudCwKICAgICAgICAgICAgICd0YWJfc3RhdGVzJyA6IHRhYl9zdGF0ZXMsCiAgICAgfQotICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisgICAgcmV0dXJuIHRvYXN0ZXJfcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQogCiBkZWYgcmVjaXBlX3BhY2thZ2VzKHJlcXVlc3QsIGJ1aWxkX2lkLCByZWNpcGVfaWQpOgogICAgIHRlbXBsYXRlID0gInJlY2lwZV9wYWNrYWdlcy5odG1sIgpAQCAtNjU4LDcgKzY3MSw3IEBACiAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXQogICAgICAgIH0KLSAgICByZXNwb25zZSA9IHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKyAgICByZXNwb25zZSA9IHRvYXN0ZXJfcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQogICAgIF9zZXRfcGFyYW1ldGVyc192YWx1ZXMocGFnZXNpemUsIG9yZGVyYnksIHJlcXVlc3QpCiAgICAgcmV0dXJuIHJlc3BvbnNlCiAKQEAgLTc4MCw3ICs3OTMsNyBAQAogICAgICAgICAgICAgICAgICdkaXJfbGlzdCc6IGRpcl9saXN0LAogICAgICAgICAgICAgICAgICdmaWxlX3BhdGgnOiBmaWxlX3BhdGgsCiAgICAgICAgICAgICAgIH0KLSAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorICAgIHJldHVybiB0b2FzdGVyX3JlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKIAogZGVmIF9maW5kX3Rhc2tfZGVwKHRhc2tfb2JqZWN0KToKICAgICB0ZGVwcyA9IFRhc2tfRGVwZW5kZW5jeS5vYmplY3RzLmZpbHRlcih0YXNrPXRhc2tfb2JqZWN0KS5maWx0ZXIoZGVwZW5kc19vbl9fb3JkZXJfX2d0PTApCkBAIC04MzIsNyArODQ1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgJ2J1aWxkJzogYnVpbGQsCiAgICAgICAgICAgICAgICAgICAgICdwcm9qZWN0JzogYnVpbGQucHJvamVjdCwKICAgICAgICAgICAgICAgICAgICAgJ3RhcmdldHMnOiBUYXJnZXQub2JqZWN0cy5maWx0ZXIoYnVpbGQ9YnVpbGRfaWQpfSkKLSAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorICAgIHJldHVybiB0b2FzdGVyX3JlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKIAogCiBkZWYgY29uZmlndmFycyhyZXF1ZXN0LCBidWlsZF9pZCk6CkBAIC05MjEsNyArOTM0LDcgQEAKICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgfQogCi0gICAgcmVzcG9uc2UgPSByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisgICAgcmVzcG9uc2UgPSB0b2FzdGVyX3JlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKICAgICBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KQogICAgIHJldHVybiByZXNwb25zZQogCkBAIC05MzQsNyArOTQ3LDcgQEAKICAgICAgICAgJ3Byb2plY3QnOiBidWlsZC5wcm9qZWN0LAogICAgICAgICAnb2JqZWN0cycgOiBmaWxlcwogICAgIH0KLSAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorICAgIHJldHVybiB0b2FzdGVyX3JlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKIAogCiAjIEEgc2V0IG9mIGRlcGVuZGVuY3kgdHlwZXMgdmFsaWQgZm9yIGJvdGggaW5jbHVkZWQgYW5kIGJ1aWx0IHBhY2thZ2Ugdmlld3MKQEAgLTEwODcsNyArMTEwMCw3IEBACiAgICAgaWYgcGF0aHMuYWxsKCkuY291bnQoKSA8IDI6CiAgICAgICAgIGNvbnRleHRbJ2Rpc2FibGVfc29ydCddID0gVHJ1ZTsKIAotICAgIHJlc3BvbnNlID0gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorICAgIHJlc3BvbnNlID0gdG9hc3Rlcl9yZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCiAgICAgX3NldF9wYXJhbWV0ZXJzX3ZhbHVlcyhwYWdlc2l6ZSwgb3JkZXJieSwgcmVxdWVzdCkKICAgICByZXR1cm4gcmVzcG9uc2UKIApAQCAtMTEwNiw3ICsxMTE5LDcgQEAKICAgICAgICAgICAgICdvdGhlcl9kZXBzJyA6ICAgZGVwZW5kZW5jaWVzWydvdGhlcl9kZXBzJ10sCiAgICAgICAgICAgICAnZGVwZW5kZW5jeV9jb3VudCcgOiBfZ2V0X3BhY2thZ2VfZGVwZW5kZW5jeV9jb3VudChwYWNrYWdlLCAtMSwgIEZhbHNlKQogICAgIH0KLSAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorICAgIHJldHVybiB0b2FzdGVyX3JlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKIAogCiBkZWYgcGFja2FnZV9pbmNsdWRlZF9kZXRhaWwocmVxdWVzdCwgYnVpbGRfaWQsIHRhcmdldF9pZCwgcGFja2FnZV9pZCk6CkBAIC0xMTUyLDcgKzExNjUsNyBAQAogICAgIH0KICAgICBpZiBwYXRocy5hbGwoKS5jb3VudCgpIDwgMjoKICAgICAgICAgY29udGV4dFsnZGlzYWJsZV9zb3J0J10gPSBUcnVlCi0gICAgcmVzcG9uc2UgPSByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisgICAgcmVzcG9uc2UgPSB0b2FzdGVyX3JlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKICAgICBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KQogICAgIHJldHVybiByZXNwb25zZQogCkBAIC0xMTc2LDcgKzExODksNyBAQAogICAgICAgICAgICAgJ3JldmVyc2VfY291bnQnIDogX2dldF9wYWNrYWdlX3JldmVyc2VfZGVwX2NvdW50KHBhY2thZ2UsIHRhcmdldF9pZCksCiAgICAgICAgICAgICAnZGVwZW5kZW5jeV9jb3VudCcgOiBfZ2V0X3BhY2thZ2VfZGVwZW5kZW5jeV9jb3VudChwYWNrYWdlLCB0YXJnZXRfaWQsIFRydWUpCiAgICAgfQotICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisgICAgcmV0dXJuIHRvYXN0ZXJfcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQogCiBkZWYgcGFja2FnZV9pbmNsdWRlZF9yZXZlcnNlX2RlcGVuZGVuY2llcyhyZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkLCBwYWNrYWdlX2lkKToKICAgICB0ZW1wbGF0ZSA9ICJwYWNrYWdlX2luY2x1ZGVkX3JldmVyc2VfZGVwZW5kZW5jaWVzLmh0bWwiCkBAIC0xMjI3LDcgKzEyNDAsNyBAQAogICAgIH0KICAgICBpZiBvYmplY3RzLmFsbCgpLmNvdW50KCkgPCAyOgogICAgICAgICBjb250ZXh0WydkaXNhYmxlX3NvcnQnXSA9IFRydWUKLSAgICByZXNwb25zZSA9IHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKyAgICByZXNwb25zZSA9IHRvYXN0ZXJfcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQogICAgIF9zZXRfcGFyYW1ldGVyc192YWx1ZXMocGFnZXNpemUsIG9yZGVyYnksIHJlcXVlc3QpCiAgICAgcmV0dXJuIHJlc3BvbnNlCiAKQEAgLTEyNTEsNiArMTI2NCw4OSBAQAogICAgIH0KICAgICByZXR1cm4gcmV0CiAKKyMgUkVTVC1iYXNlZCBBUEkgY2FsbHMgdG8gcmV0dXJuIGJ1aWxkL2J1aWxkaW5nIHN0YXR1cyB0byBleHRlcm5hbCBUb2FzdGVyCisjIG1hbmFnZXJzIGFuZCBhZ2dyZWdhdG9ycyB2aWEgSlNPTgorCitkZWYgX2pzb25fYnVpbGRfc3RhdHVzKGJ1aWxkX2lkLGV4dGVuZCk6CisgICAgYnVpbGRfc3RhdCA9IE5vbmUKKyAgICB0cnk6CisgICAgICAgIGJ1aWxkID0gQnVpbGQub2JqZWN0cy5nZXQoIHBrID0gYnVpbGRfaWQgKQorICAgICAgICBidWlsZF9zdGF0ID0ge30KKyAgICAgICAgYnVpbGRfc3RhdFsnaWQnXSA9IGJ1aWxkLmlkCisgICAgICAgIGJ1aWxkX3N0YXRbJ25hbWUnXSA9IGJ1aWxkLmJ1aWxkX25hbWUKKyAgICAgICAgYnVpbGRfc3RhdFsnbWFjaGluZSddID0gYnVpbGQubWFjaGluZQorICAgICAgICBidWlsZF9zdGF0WydkaXN0cm8nXSA9IGJ1aWxkLmRpc3RybworICAgICAgICBidWlsZF9zdGF0WydzdGFydCddID0gYnVpbGQuc3RhcnRlZF9vbgorICAgICAgICAjIGxvb2sgdXAgdGFyZ2V0IG5hbWUKKyAgICAgICAgdGFyZ2V0PSBUYXJnZXQub2JqZWN0cy5nZXQoIGJ1aWxkID0gYnVpbGQgKQorICAgICAgICBpZiB0YXJnZXQ6CisgICAgICAgICAgICBpZiB0YXJnZXQudGFzazoKKyAgICAgICAgICAgICAgICBidWlsZF9zdGF0Wyd0YXJnZXQnXSA9ICclczolcycgJSAodGFyZ2V0LnRhcmdldCx0YXJnZXQudGFzaykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnVpbGRfc3RhdFsndGFyZ2V0J10gPSAnJXMnICUgKHRhcmdldC50YXJnZXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBidWlsZF9zdGF0Wyd0YXJnZXQnXSA9ICcnCisgICAgICAgICMgbG9vayB1cCBwcm9qZWN0IG5hbWUKKyAgICAgICAgcHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5nZXQoIGJ1aWxkID0gYnVpbGQgKQorICAgICAgICBpZiBwcm9qZWN0OgorICAgICAgICAgICAgYnVpbGRfc3RhdFsncHJvamVjdCddID0gcHJvamVjdC5uYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBidWlsZF9zdGF0Wydwcm9qZWN0J10gPSAnJworICAgICAgICBpZiBCdWlsZC5JTl9QUk9HUkVTUyA9PSBidWlsZC5vdXRjb21lOgorICAgICAgICAgICAgbm93ID0gdGltZXpvbmUubm93KCkKKyAgICAgICAgICAgIHRpbWVkaWZmID0gbm93IC0gYnVpbGQuc3RhcnRlZF9vbgorICAgICAgICAgICAgYnVpbGRfc3RhdFsnc2Vjb25kcyddPSclLjNmJyAlIHRpbWVkaWZmLnRvdGFsX3NlY29uZHMoKQorICAgICAgICAgICAgYnVpbGRfc3RhdFsnY2xvbmUnXT0nJWQ6JWQnICUgKGJ1aWxkLnJlcG9zX2Nsb25lZCxidWlsZC5yZXBvc190b19jbG9uZSkKKyAgICAgICAgICAgIGJ1aWxkX3N0YXRbJ3BhcnNlJ109JyVkOiVkJyAlIChidWlsZC5yZWNpcGVzX3BhcnNlZCxidWlsZC5yZWNpcGVzX3RvX3BhcnNlKQorICAgICAgICAgICAgdGYgPSBUYXNrLm9iamVjdHMuZmlsdGVyKGJ1aWxkID0gYnVpbGQpCisgICAgICAgICAgICB0ZmMgPSB0Zi5jb3VudCgpCisgICAgICAgICAgICBpZiB0ZmMgPiAwOgorICAgICAgICAgICAgICAgIHRmZCA9IHRmLmV4Y2x1ZGUob3JkZXJfX2lzbnVsbD1UcnVlKS5jb3VudCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRmZCA9IDAKKyAgICAgICAgICAgIGJ1aWxkX3N0YXRbJ3Rhc2snXT0nJWQ6JWQnICUgKHRmZCx0ZmMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBidWlsZF9zdGF0WydvdXRjb21lJ10gPSBidWlsZC5nZXRfb3V0Y29tZV90ZXh0KCkKKyAgICAgICAgICAgIHRpbWVkaWZmID0gYnVpbGQuY29tcGxldGVkX29uIC0gYnVpbGQuc3RhcnRlZF9vbgorICAgICAgICAgICAgYnVpbGRfc3RhdFsnc2Vjb25kcyddPSclLjNmJyAlIHRpbWVkaWZmLnRvdGFsX3NlY29uZHMoKQorICAgICAgICAgICAgYnVpbGRfc3RhdFsnc3RvcCddID0gYnVpbGQuY29tcGxldGVkX29uCisgICAgICAgICAgICBtZXNzYWdlcyA9IExvZ01lc3NhZ2Uub2JqZWN0cy5hbGwoKS5maWx0ZXIoYnVpbGQgPSBidWlsZCkKKyAgICAgICAgICAgIGVycm9ycyA9IGxlbihtZXNzYWdlcy5maWx0ZXIobGV2ZWw9TG9nTWVzc2FnZS5FUlJPUikgfAorICAgICAgICAgICAgICAgICBtZXNzYWdlcy5maWx0ZXIobGV2ZWw9TG9nTWVzc2FnZS5FWENFUFRJT04pIHwKKyAgICAgICAgICAgICAgICAgbWVzc2FnZXMuZmlsdGVyKGxldmVsPUxvZ01lc3NhZ2UuQ1JJVElDQUwpKQorICAgICAgICAgICAgYnVpbGRfc3RhdFsnZXJyb3JzJ10gPSBlcnJvcnMKKyAgICAgICAgICAgIHdhcm5pbmdzID0gbGVuKG1lc3NhZ2VzLmZpbHRlcihsZXZlbD1Mb2dNZXNzYWdlLldBUk5JTkcpKQorICAgICAgICAgICAgYnVpbGRfc3RhdFsnd2FybmluZ3MnXSA9IHdhcm5pbmdzCisgICAgICAgIGlmIGV4dGVuZDoKKyAgICAgICAgICAgIGJ1aWxkX3N0YXRbJ2Nvb2tlcl9sb2cnXSA9IGJ1aWxkLmNvb2tlcl9sb2dfcGF0aAorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgYnVpbGRfc3RhdGUgPSBzdHIoZSkKKyAgICByZXR1cm4gYnVpbGRfc3RhdAorCitkZWYganNvbl9idWlsZHMocmVxdWVzdCk6CisgICAgYnVpbGRfdGFibGUgPSBbXQorICAgIGJ1aWxkcyA9IFtdCisgICAgdHJ5OgorICAgICAgICBidWlsZHMgPSBCdWlsZC5vYmplY3RzLmV4Y2x1ZGUob3V0Y29tZT1CdWlsZC5JTl9QUk9HUkVTUykub3JkZXJfYnkoIi1zdGFydGVkX29uIikKKyAgICAgICAgZm9yIGJ1aWxkIGluIGJ1aWxkczoKKyAgICAgICAgICAgIGJ1aWxkX3RhYmxlLmFwcGVuZChfanNvbl9idWlsZF9zdGF0dXMoYnVpbGQuaWQsRmFsc2UpKQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgYnVpbGRfdGFibGUgPSBzdHIoZSkKKyAgICByZXR1cm4gSnNvblJlc3BvbnNlKHsnYnVpbGRzJyA6IGJ1aWxkX3RhYmxlLCAnY291bnQnIDogbGVuKGJ1aWxkcyl9KQorCitkZWYganNvbl9idWlsZGluZyhyZXF1ZXN0KToKKyAgICBidWlsZF90YWJsZSA9IFtdCisgICAgYnVpbGRzID0gW10KKyAgICB0cnk6CisgICAgICAgIGJ1aWxkcyA9IEJ1aWxkLm9iamVjdHMuZmlsdGVyKG91dGNvbWU9QnVpbGQuSU5fUFJPR1JFU1MpLm9yZGVyX2J5KCItc3RhcnRlZF9vbiIpCisgICAgICAgIGZvciBidWlsZCBpbiBidWlsZHM6CisgICAgICAgICAgICBidWlsZF90YWJsZS5hcHBlbmQoX2pzb25fYnVpbGRfc3RhdHVzKGJ1aWxkLmlkLEZhbHNlKSkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIGJ1aWxkX3RhYmxlID0gc3RyKGUpCisgICAgcmV0dXJuIEpzb25SZXNwb25zZSh7J2J1aWxkaW5nJyA6IGJ1aWxkX3RhYmxlLCAnY291bnQnIDogbGVuKGJ1aWxkcyl9KQorCitkZWYganNvbl9idWlsZChyZXF1ZXN0LGJ1aWxkX2lkKToKKyAgICByZXR1cm4gSnNvblJlc3BvbnNlKHsnYnVpbGQnIDogX2pzb25fYnVpbGRfc3RhdHVzKGJ1aWxkX2lkLFRydWUpfSkKIAogCiBpbXBvcnQgdG9hc3Rlcm1haW4uc2V0dGluZ3MKQEAgLTEyNzcsNiArMTM3Myw5IEBACiAKICAgICAjIG5ldyBwcm9qZWN0CiAgICAgZGVmIG5ld3Byb2plY3QocmVxdWVzdCk6CisgICAgICAgIGlmIG5vdCBwcm9qZWN0X2VuYWJsZToKKyAgICAgICAgICAgIHJldHVybiByZWRpcmVjdCggbGFuZGluZyApCisKICAgICAgICAgdGVtcGxhdGUgPSAibmV3cHJvamVjdC5odG1sIgogICAgICAgICBjb250ZXh0ID0gewogICAgICAgICAgICAgJ2VtYWlsJzogcmVxdWVzdC51c2VyLmVtYWlsIGlmIHJlcXVlc3QudXNlci5pc19hdXRoZW50aWNhdGVkKCkgZWxzZSAnJywKQEAgLTEyOTEsNyArMTM5MCw3IEBACiAKICAgICAgICAgaWYgcmVxdWVzdC5tZXRob2QgPT0gIkdFVCI6CiAgICAgICAgICAgICAjIHJlbmRlciBuZXcgcHJvamVjdCBwYWdlCi0gICAgICAgICAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorICAgICAgICAgICAgcmV0dXJuIHRvYXN0ZXJfcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQogICAgICAgICBlbGlmIHJlcXVlc3QubWV0aG9kID09ICJQT1NUIjoKICAgICAgICAgICAgIG1hbmRhdG9yeV9maWVsZHMgPSBbJ3Byb2plY3RuYW1lJywgJ3B0eXBlJ10KICAgICAgICAgICAgIHRyeToKQEAgLTEzMzEsNyArMTQzMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbJ2FsZXJ0J10gPSAiWW91ciBjaG9zZW4gdXNlcm5hbWUgaXMgYWxyZWFkeSB1c2VkIgogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbJ2FsZXJ0J10gPSBzdHIoZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorICAgICAgICAgICAgICAgIHJldHVybiB0b2FzdGVyX3JlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKIAogICAgICAgICByYWlzZSBFeGNlcHRpb24oIkludmFsaWQgSFRUUCBtZXRob2QgZm9yIHRoaXMgcGFnZSIpCiAKQEAgLTEzMzksNyArMTQzOCw3IEBACiAgICAgZGVmIHByb2plY3QocmVxdWVzdCwgcGlkKToKICAgICAgICAgcHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5nZXQocGs9cGlkKQogICAgICAgICBjb250ZXh0ID0geyJwcm9qZWN0IjogcHJvamVjdH0KLSAgICAgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCAicHJvamVjdC5odG1sIiwgY29udGV4dCkKKyAgICAgICAgcmV0dXJuIHRvYXN0ZXJfcmVuZGVyKHJlcXVlc3QsICJwcm9qZWN0Lmh0bWwiLCBjb250ZXh0KQogCiAgICAgZGVmIGpzdW5pdHRlc3RzKHJlcXVlc3QpOgogICAgICAgICAiIiIgUHJvdmlkZXMgYSBwYWdlIGZvciB0aGUganMgdW5pdCB0ZXN0cyAiIiIKQEAgLTEzNjUsNyArMTQ2NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iTUFDSElORSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9InFlbXV4ODYiKQogICAgICAgICBjb250ZXh0ID0geydwcm9qZWN0JzogbmV3X3Byb2plY3R9Ci0gICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgImpzLXVuaXQtdGVzdHMuaHRtbCIsIGNvbnRleHQpCisgICAgICAgIHJldHVybiB0b2FzdGVyX3JlbmRlcihyZXF1ZXN0LCAianMtdW5pdC10ZXN0cy5odG1sIiwgY29udGV4dCkKIAogICAgIGZyb20gZGphbmdvLnZpZXdzLmRlY29yYXRvcnMuY3NyZiBpbXBvcnQgY3NyZl9leGVtcHQKICAgICBAY3NyZl9leGVtcHQKQEAgLTE1MDAsNyArMTU5OSw3IEBACiAgICAgICAgIGNvbnRleHQgPSB7CiAgICAgICAgICAgICAncHJvamVjdCc6IFByb2plY3Qub2JqZWN0cy5nZXQoaWQ9cGlkKSwKICAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorICAgICAgICByZXR1cm4gdG9hc3Rlcl9yZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCiAKICAgICBkZWYgbGF5ZXJkZXRhaWxzKHJlcXVlc3QsIHBpZCwgbGF5ZXJpZCk6CiAgICAgICAgIHByb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrPXBpZCkKQEAgLTE1MjksNyArMTYyOCw3IEBACiAgICAgICAgICAgICAncHJvamVjdGxheWVycyc6IGxpc3QocHJvamVjdF9sYXllcnMpCiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICdsYXllcmRldGFpbHMuaHRtbCcsIGNvbnRleHQpCisgICAgICAgIHJldHVybiB0b2FzdGVyX3JlbmRlcihyZXF1ZXN0LCAnbGF5ZXJkZXRhaWxzLmh0bWwnLCBjb250ZXh0KQogCiAKICAgICBkZWYgZ2V0X3Byb2plY3RfY29uZmlndmFyc19jb250ZXh0KCk6CkBAIC0xNjE5LDcgKzE3MTgsNyBAQAogICAgICAgICBleGNlcHQgKFByb2plY3RWYXJpYWJsZS5Eb2VzTm90RXhpc3QsIEJ1aWxkRW52aXJvbm1lbnQuRG9lc05vdEV4aXN0KToKICAgICAgICAgICAgIHBhc3MKIAotICAgICAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICJwcm9qZWN0Y29uZi5odG1sIiwgY29udGV4dCkKKyAgICAgICAgcmV0dXJuIHRvYXN0ZXJfcmVuZGVyKHJlcXVlc3QsICJwcm9qZWN0Y29uZi5odG1sIiwgY29udGV4dCkKIAogICAgIGRlZiBfZmlsZV9uYW1lc19mb3JfYXJ0aWZhY3QoYnVpbGQsIGFydGlmYWN0X3R5cGUsIGFydGlmYWN0X2lkKToKICAgICAgICAgIiIiCkBAIC0xNjg2LDYgKzE3ODUsNyBAQAogCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgInVuYXZhaWxhYmxlX2FydGlmYWN0Lmh0bWwiKQorICAgICAgICAgICAgICAgIHJldHVybiB0b2FzdGVyX3JlbmRlcihyZXF1ZXN0LCAidW5hdmFpbGFibGVfYXJ0aWZhY3QuaHRtbCIpCiAgICAgICAgIGV4Y2VwdCAoT2JqZWN0RG9lc05vdEV4aXN0LCBJT0Vycm9yKToKLSAgICAgICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgInVuYXZhaWxhYmxlX2FydGlmYWN0Lmh0bWwiKQorICAgICAgICAgICAgcmV0dXJuIHRvYXN0ZXJfcmVuZGVyKHJlcXVlc3QsICJ1bmF2YWlsYWJsZV9hcnRpZmFjdC5odG1sIikKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS93aWRnZXRzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS93aWRnZXRzLnB5CmluZGV4IDZiN2I5ODEuLmExNzkyZDkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvd2lkZ2V0cy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3dpZGdldHMucHkKQEAgLTQxLDYgKzQxLDcgQEAKIGltcG9ydCBqc29uCiBpbXBvcnQgY29sbGVjdGlvbnMKIGltcG9ydCByZQoraW1wb3J0IG9zCiAKIGZyb20gdG9hc3Rlcmd1aS50YWJsZWZpbHRlciBpbXBvcnQgVGFibGVGaWx0ZXJNYXAKIApAQCAtODYsNiArODcsOSBAQAogICAgICAgICBjb250ZXh0Wyd0YWJsZV9uYW1lJ10gPSB0eXBlKHNlbGYpLl9fbmFtZV9fLmxvd2VyKCkKICAgICAgICAgY29udGV4dFsnZW1wdHlfc3RhdGUnXSA9IHNlbGYuZW1wdHlfc3RhdGUKIAorICAgICAgICAjIGdsb2JhbCB2YXJpYWJsZXMKKyAgICAgICAgY29udGV4dFsncHJvamVjdF9lbmFibGUnXSA9ICgnMScgPT0gb3MuZW52aXJvbi5nZXQoJ1RPQVNURVJfQlVJTERTRVJWRVInKSkKKwogICAgICAgICByZXR1cm4gY29udGV4dAogCiAgICAgZGVmIGdldChzZWxmLCByZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgpAQCAtNTExLDYgKzUxNSwxMCBAQAogICAgICAgICAgICAgICAgIGludCgoYnVpbGRfb2JqLnJlY2lwZXNfcGFyc2VkIC8KICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX29iai5yZWNpcGVzX3RvX3BhcnNlKSAqIDEwMCkKIAorICAgICAgICAgICAgYnVpbGRbJ3JlcG9zX2Nsb25lZF9wZXJjZW50YWdlJ10gPSBcCisgICAgICAgICAgICAgICAgaW50KChidWlsZF9vYmoucmVwb3NfY2xvbmVkIC8KKyAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX29iai5yZXBvc190b19jbG9uZSkgKiAxMDApCisKICAgICAgICAgICAgIHRhc2tzX2NvbXBsZXRlX3BlcmNlbnRhZ2UgPSAwCiAgICAgICAgICAgICBpZiBidWlsZF9vYmoub3V0Y29tZSBpbiAoQnVpbGQuU1VDQ0VFREVELCBCdWlsZC5GQUlMRUQpOgogICAgICAgICAgICAgICAgIHRhc2tzX2NvbXBsZXRlX3BlcmNlbnRhZ2UgPSAxMDAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL21hbmFnZW1lbnQvY29tbWFuZHMvYnVpbGRzbGlzdC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL21hbmFnZW1lbnQvY29tbWFuZHMvYnVpbGRzbGlzdC5weQppbmRleCA4ZGZlZjBhLi43MGI1ODEyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L2NvbW1hbmRzL2J1aWxkc2xpc3QucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9jb21tYW5kcy9idWlsZHNsaXN0LnB5CkBAIC0xLDEzICsxLDEzIEBACi1mcm9tIGRqYW5nby5jb3JlLm1hbmFnZW1lbnQuYmFzZSBpbXBvcnQgTm9BcmdzQ29tbWFuZCwgQ29tbWFuZEVycm9yCitmcm9tIGRqYW5nby5jb3JlLm1hbmFnZW1lbnQuYmFzZSBpbXBvcnQgQmFzZUNvbW1hbmQsIENvbW1hbmRFcnJvcgogZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBCdWlsZAogaW1wb3J0IG9zCiAKIAogCi1jbGFzcyBDb21tYW5kKE5vQXJnc0NvbW1hbmQpOgorY2xhc3MgQ29tbWFuZChCYXNlQ29tbWFuZCk6CiAgICAgYXJncyAgICA9ICIiCiAgICAgaGVscCAgICA9ICJMaXN0cyBjdXJyZW50IGJ1aWxkcyIKIAotICAgIGRlZiBoYW5kbGVfbm9hcmdzKHNlbGYsKipvcHRpb25zKToKKyAgICBkZWYgaGFuZGxlKHNlbGYsKipvcHRpb25zKToKICAgICAgICAgZm9yIGIgaW4gQnVpbGQub2JqZWN0cy5hbGwoKToKICAgICAgICAgICAgIHByaW50KCIlZDogJXMgJXMgJXMiICUgKGIucGssIGIubWFjaGluZSwgYi5kaXN0cm8sICIsIi5qb2luKFt4LnRhcmdldCBmb3IgeCBpbiBiLnRhcmdldF9zZXQuYWxsKCldKSkpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9zZXR0aW5ncy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3NldHRpbmdzLnB5CmluZGV4IDFmZDY0OWMuLjEzNTQxZDMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3NldHRpbmdzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3NldHRpbmdzLnB5CkBAIC0yNCw3ICsyNCw2IEBACiBpbXBvcnQgb3MKIAogREVCVUcgPSBUcnVlCi1URU1QTEFURV9ERUJVRyA9IERFQlVHCiAKICMgU2V0IHRvIFRydWUgdG8gc2VlIHRoZSBTUUwgcXVlcmllcyBpbiBjb25zb2xlCiBTUUxfREVCVUcgPSBGYWxzZQpAQCAtMTYxLDEyICsxNjAsNDcgQEAKICMgTWFrZSB0aGlzIHVuaXF1ZSwgYW5kIGRvbid0IHNoYXJlIGl0IHdpdGggYW55Ym9keS4KIFNFQ1JFVF9LRVkgPSAnTk9UX1NVSVRBQkxFX0ZPUl9IT1NURURfREVQTE9ZTUVOVCcKIAotIyBMaXN0IG9mIGNhbGxhYmxlcyB0aGF0IGtub3cgaG93IHRvIGltcG9ydCB0ZW1wbGF0ZXMgZnJvbSB2YXJpb3VzIHNvdXJjZXMuCi1URU1QTEFURV9MT0FERVJTID0gKAotICAgICdkamFuZ28udGVtcGxhdGUubG9hZGVycy5maWxlc3lzdGVtLkxvYWRlcicsCi0gICAgJ2RqYW5nby50ZW1wbGF0ZS5sb2FkZXJzLmFwcF9kaXJlY3Rvcmllcy5Mb2FkZXInLAotIyAgICAgJ2RqYW5nby50ZW1wbGF0ZS5sb2FkZXJzLmVnZ3MuTG9hZGVyJywKLSkKK2NsYXNzIEludmFsaWRTdHJpbmcoc3RyKToKKyAgICBkZWYgX19tb2RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGZyb20gZGphbmdvLnRlbXBsYXRlLmJhc2UgaW1wb3J0IFRlbXBsYXRlU3ludGF4RXJyb3IKKyAgICAgICAgcmFpc2UgVGVtcGxhdGVTeW50YXhFcnJvcigKKyAgICAgICAgICAgICJVbmRlZmluZWQgdmFyaWFibGUgb3IgdW5rbm93biB2YWx1ZSBmb3I6IFwiJXNcIiIgJSBvdGhlcikKKworVEVNUExBVEVTID0gWworICAgIHsKKyAgICAgICAgJ0JBQ0tFTkQnOiAnZGphbmdvLnRlbXBsYXRlLmJhY2tlbmRzLmRqYW5nby5EamFuZ29UZW1wbGF0ZXMnLAorICAgICAgICAnRElSUyc6IFsKKyAgICAgICAgICAgICMgUHV0IHN0cmluZ3MgaGVyZSwgbGlrZSAiL2hvbWUvaHRtbC9kamFuZ29fdGVtcGxhdGVzIiBvciAiQzovd3d3L2RqYW5nby90ZW1wbGF0ZXMiLgorICAgICAgICAgICAgIyBBbHdheXMgdXNlIGZvcndhcmQgc2xhc2hlcywgZXZlbiBvbiBXaW5kb3dzLgorICAgICAgICAgICAgIyBEb24ndCBmb3JnZXQgdG8gdXNlIGFic29sdXRlIHBhdGhzLCBub3QgcmVsYXRpdmUgcGF0aHMuCisgICAgICAgIF0sCisgICAgICAgICdPUFRJT05TJzogeworICAgICAgICAgICAgJ2NvbnRleHRfcHJvY2Vzc29ycyc6IFsKKyAgICAgICAgICAgICAgICAjIEluc2VydCB5b3VyIFRFTVBMQVRFX0NPTlRFWFRfUFJPQ0VTU09SUyBoZXJlIG9yIHVzZSB0aGlzCisgICAgICAgICAgICAgICAgIyBsaXN0IGlmIHlvdSBoYXZlbid0IGN1c3RvbWl6ZWQgdGhlbToKKyAgICAgICAgICAgICAgICAnZGphbmdvLmNvbnRyaWIuYXV0aC5jb250ZXh0X3Byb2Nlc3NvcnMuYXV0aCcsCisgICAgICAgICAgICAgICAgJ2RqYW5nby50ZW1wbGF0ZS5jb250ZXh0X3Byb2Nlc3NvcnMuZGVidWcnLAorICAgICAgICAgICAgICAgICdkamFuZ28udGVtcGxhdGUuY29udGV4dF9wcm9jZXNzb3JzLmkxOG4nLAorICAgICAgICAgICAgICAgICdkamFuZ28udGVtcGxhdGUuY29udGV4dF9wcm9jZXNzb3JzLm1lZGlhJywKKyAgICAgICAgICAgICAgICAnZGphbmdvLnRlbXBsYXRlLmNvbnRleHRfcHJvY2Vzc29ycy5zdGF0aWMnLAorICAgICAgICAgICAgICAgICdkamFuZ28udGVtcGxhdGUuY29udGV4dF9wcm9jZXNzb3JzLnR6JywKKyAgICAgICAgICAgICAgICAnZGphbmdvLmNvbnRyaWIubWVzc2FnZXMuY29udGV4dF9wcm9jZXNzb3JzLm1lc3NhZ2VzJywKKyAgICAgICAgICAgICAgICAjIEN1c3RvbQorICAgICAgICAgICAgICAgICdkamFuZ28udGVtcGxhdGUuY29udGV4dF9wcm9jZXNzb3JzLnJlcXVlc3QnLAorICAgICAgICAgICAgICAgICd0b2FzdGVyZ3VpLnZpZXdzLm1hbmFnZWRjb250ZXh0cHJvY2Vzc29yJywKKworICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICdsb2FkZXJzJzogWworICAgICAgICAgICAgICAgICMgTGlzdCBvZiBjYWxsYWJsZXMgdGhhdCBrbm93IGhvdyB0byBpbXBvcnQgdGVtcGxhdGVzIGZyb20gdmFyaW91cyBzb3VyY2VzLgorICAgICAgICAgICAgICAgICdkamFuZ28udGVtcGxhdGUubG9hZGVycy5maWxlc3lzdGVtLkxvYWRlcicsCisgICAgICAgICAgICAgICAgJ2RqYW5nby50ZW1wbGF0ZS5sb2FkZXJzLmFwcF9kaXJlY3Rvcmllcy5Mb2FkZXInLAorICAgICAgICAgICAgICAgICMnZGphbmdvLnRlbXBsYXRlLmxvYWRlcnMuZWdncy5Mb2FkZXInLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICdzdHJpbmdfaWZfaW52YWxpZCc6IEludmFsaWRTdHJpbmcoIiVzIiksCisgICAgICAgICAgICAnZGVidWcnOiBERUJVRywKKyAgICAgICAgfSwKKyAgICB9LAorXQogCiBNSURETEVXQVJFX0NMQVNTRVMgPSAoCiAgICAgJ2RqYW5nby5taWRkbGV3YXJlLmNvbW1vbi5Db21tb25NaWRkbGV3YXJlJywKQEAgLTIwMywyMiArMjM3LDYgQEAKICMgUHl0aG9uIGRvdHRlZCBwYXRoIHRvIHRoZSBXU0dJIGFwcGxpY2F0aW9uIHVzZWQgYnkgRGphbmdvJ3MgcnVuc2VydmVyLgogV1NHSV9BUFBMSUNBVElPTiA9ICd0b2FzdGVybWFpbi53c2dpLmFwcGxpY2F0aW9uJwogCi1URU1QTEFURV9ESVJTID0gKAotICAgICMgUHV0IHN0cmluZ3MgaGVyZSwgbGlrZSAiL2hvbWUvaHRtbC9kamFuZ29fdGVtcGxhdGVzIiBvciAiQzovd3d3L2RqYW5nby90ZW1wbGF0ZXMiLgotICAgICMgQWx3YXlzIHVzZSBmb3J3YXJkIHNsYXNoZXMsIGV2ZW4gb24gV2luZG93cy4KLSAgICAjIERvbid0IGZvcmdldCB0byB1c2UgYWJzb2x1dGUgcGF0aHMsIG5vdCByZWxhdGl2ZSBwYXRocy4KLSkKLQotVEVNUExBVEVfQ09OVEVYVF9QUk9DRVNTT1JTID0gKCdkamFuZ28uY29udHJpYi5hdXRoLmNvbnRleHRfcHJvY2Vzc29ycy5hdXRoJywKLSAnZGphbmdvLmNvcmUuY29udGV4dF9wcm9jZXNzb3JzLmRlYnVnJywKLSAnZGphbmdvLmNvcmUuY29udGV4dF9wcm9jZXNzb3JzLmkxOG4nLAotICdkamFuZ28uY29yZS5jb250ZXh0X3Byb2Nlc3NvcnMubWVkaWEnLAotICdkamFuZ28uY29yZS5jb250ZXh0X3Byb2Nlc3NvcnMuc3RhdGljJywKLSAnZGphbmdvLmNvcmUuY29udGV4dF9wcm9jZXNzb3JzLnR6JywKLSAnZGphbmdvLmNvbnRyaWIubWVzc2FnZXMuY29udGV4dF9wcm9jZXNzb3JzLm1lc3NhZ2VzJywKLSAiZGphbmdvLmNvcmUuY29udGV4dF9wcm9jZXNzb3JzLnJlcXVlc3QiLAotICd0b2FzdGVyZ3VpLnZpZXdzLm1hbmFnZWRjb250ZXh0cHJvY2Vzc29yJywKLSApCiAKIElOU1RBTExFRF9BUFBTID0gKAogICAgICdkamFuZ28uY29udHJpYi5hdXRoJywKQEAgLTM0OCwxMCArMzY2LDQgQEAKICMKIAogCi1jbGFzcyBJbnZhbGlkU3RyaW5nKHN0cik6Ci0gICAgZGVmIF9fbW9kX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBmcm9tIGRqYW5nby50ZW1wbGF0ZS5iYXNlIGltcG9ydCBUZW1wbGF0ZVN5bnRheEVycm9yCi0gICAgICAgIHJhaXNlIFRlbXBsYXRlU3ludGF4RXJyb3IoCi0gICAgICAgICAgICAiVW5kZWZpbmVkIHZhcmlhYmxlIG9yIHVua25vd24gdmFsdWUgZm9yOiBcIiVzXCIiICUgb3RoZXIpCiAKLVRFTVBMQVRFX1NUUklOR19JRl9JTlZBTElEID0gSW52YWxpZFN0cmluZygiJXMiKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vdXJscy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3VybHMucHkKaW5kZXggMWY4NTk5ZS4uZTJmYjBhZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vdXJscy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi91cmxzLnB5CkBAIC0xOSw5ICsxOSwxMCBAQAogIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgogCi1mcm9tIGRqYW5nby5jb25mLnVybHMgaW1wb3J0IHBhdHRlcm5zLCBpbmNsdWRlLCB1cmwKLWZyb20gZGphbmdvLnZpZXdzLmdlbmVyaWMgaW1wb3J0IFJlZGlyZWN0VmlldworZnJvbSBkamFuZ28uY29uZi51cmxzIGltcG9ydCBpbmNsdWRlLCB1cmwKK2Zyb20gZGphbmdvLnZpZXdzLmdlbmVyaWMgaW1wb3J0IFJlZGlyZWN0VmlldywgVGVtcGxhdGVWaWV3CiBmcm9tIGRqYW5nby52aWV3cy5kZWNvcmF0b3JzLmNhY2hlIGltcG9ydCBuZXZlcl9jYWNoZQoraW1wb3J0IGJsZGNvbGxlY3Rvci52aWV3cwogCiBpbXBvcnQgbG9nZ2luZwogCkBAIC0zMSw3ICszMiw3IEBACiBmcm9tIGRqYW5nby5jb250cmliIGltcG9ydCBhZG1pbgogYWRtaW4uYXV0b2Rpc2NvdmVyKCkKIAotdXJscGF0dGVybnMgPSBwYXR0ZXJucygnJywKK3VybHBhdHRlcm5zID0gWwogCiAgICAgIyBFeGFtcGxlczoKICAgICAjIHVybChyJ150b2FzdGVyLycsIGluY2x1ZGUoJ3RvYXN0ZXIuZm9vLnVybHMnKSksCkBAIC00MiwxMSArNDMsMTMgQEAKIAogICAgICMgVGhpcyBpcyBoZXJlIHRvIG1haW50YWluIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIHdpbGwgYmUgZGVwcmVjYXRlZAogICAgICMgaW4gdGhlIGZ1dHVyZS4KLSAgICB1cmwocideb3JtL2V2ZW50ZmlsZSQnLCAnYmxkY29sbGVjdG9yLnZpZXdzLmV2ZW50ZmlsZScpLAorICAgIHVybChyJ15vcm0vZXZlbnRmaWxlJCcsIGJsZGNvbGxlY3Rvci52aWV3cy5ldmVudGZpbGUpLAorCisgICAgdXJsKHInXmhlYWx0aCQnLCBUZW1wbGF0ZVZpZXcuYXNfdmlldyh0ZW1wbGF0ZV9uYW1lPSJoZWFsdGguaHRtbCIpLCBuYW1lPSdUb2FzdGVyIEhlYWx0aCcpLAogCiAgICAgIyBpZiBubyBhcHBsaWNhdGlvbiBpcyBzZWxlY3RlZCwgd2UgaGF2ZSB0aGUgbWFnaWMgdG9hc3Rlcmd1aSBhcHAgaGVyZQogICAgIHVybChyJ14kJywgbmV2ZXJfY2FjaGUoUmVkaXJlY3RWaWV3LmFzX3ZpZXcodXJsPScvdG9hc3Rlcmd1aS8nLCBwZXJtYW5lbnQ9VHJ1ZSkpKSwKLSkKK10KIAogaW1wb3J0IHRvYXN0ZXJtYWluLnNldHRpbmdzCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL3RvYXN0ZXItcmVxdWlyZW1lbnRzLnR4dCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9iaXRiYWtlL3RvYXN0ZXItcmVxdWlyZW1lbnRzLnR4dAppbmRleCBlNjFjOGUyLi5jMGVjMzY4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvYml0YmFrZS90b2FzdGVyLXJlcXVpcmVtZW50cy50eHQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2JpdGJha2UvdG9hc3Rlci1yZXF1aXJlbWVudHMudHh0CkBAIC0xLDMgKzEsMyBAQAotRGphbmdvPjEuOCw8MS45CitEamFuZ28+MS44LDwxLjExLjkKIGJlYXV0aWZ1bHNvdXA0Pj00LjQuMAogcHl0egpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vTWFrZWZpbGUgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9NYWtlZmlsZQppbmRleCA5MDc3YzgxLi45ODkxMDk1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9NYWtlZmlsZQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9NYWtlZmlsZQpAQCAtOCw3ICs4LDcgQEAKICMgc3lzdGVtLiAgVGhlc2UgbWFudWFscyBhbHNvIGluY2x1ZGUgYW4gImVjbGlwc2UiIHN1Yi1kaXJlY3RvcnkgYXMgcGFydCBvZgogIyB0aGUgbWFrZSBwcm9jZXNzLgogIwotIyBOb3RlIHRoYXQgdGhlIGZpZ3VyZXMgZm9yIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbAorIyBOb3RlIHRoYXQgdGhlIGZpZ3VyZXMgZm9yIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbAogIyBkaWZmZXIgZGVwZW5kaW5nIG9uIHRoZSBCUkFOQ0ggYmVpbmcgYnVpbHQuCiAjCiAjIFRoZSBNYWtlZmlsZSBoYXMgdGhlc2UgdGFyZ2V0czoKQEAgLTQyLDcgKzQyLDcgQEAKICMgVG8gYnVpbGQgYSBtYW51YWwsIHlvdSBtdXN0IGludm9rZSBNYWtlZmlsZSB3aXRoIHRoZSBET0MgYXJndW1lbnQuICBJZiB5b3UKICMgYXJlIGdvaW5nIHRvIHB1Ymxpc2ggdGhlIG1hbnVhbCwgdGhlbiB5b3UgbXVzdCBpbnZva2UgTWFrZWZpbGUgd2l0aCBib3RoIHRoZQogIyBET0MgYW5kIHRoZSBWRVIgYXJndW1lbnQuICBGdXJ0aGVybW9yZSwgaWYgeW91IGFyZSBidWlsZGluZyBvciBwdWJsaXNoaW5nCi0jIHRoZSBlZGlzb24gb3IgZGVuemlsIHZlcnNpb25zIG9mIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBvcgorIyB0aGUgZWRpc29uIG9yIGRlbnppbCB2ZXJzaW9ucyBvZiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwgb3IKICMgdGhlIG1lZ2EtbWFudWFsLCB5b3UgbXVzdCBhbHNvIHVzZSB0aGUgQlJBTkNIIGFyZ3VtZW50LgogIwogIyBFeGFtcGxlczoKQEAgLTU5LDcgKzU5LDcgQEAKICMgJ21ha2UgRE9DPXlvY3RvLXByb2plY3QtcXMnIGNvbW1hbmQgd291bGQgYmUgZXF1aXZhbGVudC4gVGhlIHRoaXJkIGV4YW1wbGUKICMgZ2VuZXJhdGVzIGp1c3QgdGhlIFBERiB2ZXJzaW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCiAjIFRoZSBmb3VydGggZXhhbXBsZSBnZW5lcmF0ZXMgdGhlIEhUTUwgJ2VkaXNvbicgdmVyc2lvbiBhbmQgKGlmIGF2YWlsYWJsZSkKLSMgdGhlIEVjbGlwc2UgaGVscCB2ZXJzaW9uIG9mIHRoZSBZUCBEZXZlbG9wbWVudCBNYW51YWwuICBUaGUgbGFzdCBleGFtcGxlCisjIHRoZSBFY2xpcHNlIGhlbHAgdmVyc2lvbiBvZiB0aGUgWVAgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLiAgVGhlIGxhc3QgZXhhbXBsZQogIyBnZW5lcmF0ZXMgdGhlIEhUTUwgdmVyc2lvbiBvZiB0aGUgbWVnYS1tYW51YWwgYW5kIHVzZXMgdGhlICdkZW56aWwnCiAjIGJyYW5jaCB3aGVuIGNob29zaW5nIGZpZ3VyZXMgZm9yIHRoZSB0YXJiYWxsIG9mIGZpZ3VyZXMuICBBbnkgZXhhbXBsZSB0aGF0IGRvZXMKICMgbm90IHVzZSB0aGUgQlJBTkNIIGFyZ3VtZW50IGJ1aWxkcyB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBtYW51YWwgc2V0LgpAQCAtNzksMTUgKzc5LDE2IEBACiAjIFRoZSBmaXJzdCBleGFtcGxlIHB1Ymxpc2hlcyB0aGUgMS43IHZlcnNpb24gb2YgYm90aCB0aGUgUERGIGFuZCBIVE1MIHZlcnNpb25zIG9mCiAjIHRoZSBCU1AgR3VpZGUuICBUaGUgc2Vjb25kIGV4YW1wbGUgcHVibGlzaGVzIHRoZSAxLjYgdmVyc2lvbiBvZiBib3RoIHRoZSBQREYgYW5kCiAjIEhUTUwgdmVyc2lvbnMgb2YgdGhlIEFEVCBNYW51YWwuIFRoZSB0aGlyZCBleGFtcGxlIHB1Ymxpc2hlcyB0aGUgMS4xLjEgdmVyc2lvbiBvZgotIyB0aGUgUERGIGFuZCBIVE1MIFlQIERldmVsb3BtZW50IE1hbnVhbCBmb3IgdGhlICdlZGlzb24nIGJyYW5jaC4gIFRoZSBmb3VydGggZXhhbXBsZQotIyBwdWJsaXNoZXMgdGhlIDEuMiB2ZXJzaW9uIG9mIHRoZSBQREYgYW5kIEhUTUwgWVAgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciB0aGUKLSMgJ2RlbnppbCcgYnJhbmNoLgorIyB0aGUgUERGIGFuZCBIVE1MIFlQIERldmVsb3BtZW50IFRhc2tzIE1hbnVhbCBmb3IgdGhlICdlZGlzb24nIGJyYW5jaC4gIFRoZSBmb3VydGgKKyMgZXhhbXBsZSBwdWJsaXNoZXMgdGhlIDEuMiB2ZXJzaW9uIG9mIHRoZSBQREYgYW5kIEhUTUwgWVAgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsCisjIGZvciB0aGUgJ2RlbnppbCcgYnJhbmNoLgogIwogCiBpZmVxICgkKERPQyksYnNwLWd1aWRlKQogWFNMVE9QVFMgPSAtLXhpbmNsdWRlCiBBTExQUkVRID0gaHRtbCBlY2xpcHNlIHRhcmJhbGwKIFRBUkZJTEVTID0gYnNwLXN0eWxlLmNzcyBic3AtZ3VpZGUuaHRtbCBmaWd1cmVzL2JzcC10aXRsZS5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2JzcC1kZXYtZmxvdy5wbmcgXAogICAgICAgICAgICBlY2xpcHNlCiBNQU5VQUxTID0gJChET0MpLyQoRE9DKS5odG1sICQoRE9DKS9lY2xpcHNlCiBGSUdVUkVTID0gZmlndXJlcwpAQCAtMTI4LDE0ICsxMjksOCBAQAogICAgICAgICAgICBmaWd1cmVzL3dpcC5wbmcKICAgICAgICAgZWxzZQogVEFSRklMRVMgPSBkZXYtc3R5bGUuY3NzIGRldi1tYW51YWwuaHRtbCBcCi0gICAgICAgICAgIGZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZyBcCi0gICAgICAgICAgIGZpZ3VyZXMvZGV2LXRpdGxlLnBuZyBmaWd1cmVzL2dpdC13b3JrZmxvdy5wbmcgXAotICAgICAgICAgICBmaWd1cmVzL2luZGV4LWRvd25sb2Fkcy5wbmcgZmlndXJlcy9rZXJuZWwtZGV2LWZsb3cucG5nIFwKLSAgICAgICAgICAgZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMS5wbmcgZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi1nZW5lcmljLnBuZyBcCi0gICAgICAgICAgIGZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZyBmaWd1cmVzL3lwLWRvd25sb2FkLnBuZyBcCi0gICAgICAgICAgIGZpZ3VyZXMvcmVjaXBlLXdvcmtmbG93LnBuZyBcCi0gICAgICAgICAgIGZpZ3VyZXMvZGV2dG9vbC1hZGQtZmxvdy5wbmcgZmlndXJlcy9kZXZ0b29sLW1vZGlmeS1mbG93LnBuZyBcCi0gICAgICAgICAgIGZpZ3VyZXMvZGV2dG9vbC11cGdyYWRlLWZsb3cucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9kZXYtdGl0bGUucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9yZWNpcGUtd29ya2Zsb3cucG5nIGZpZ3VyZXMvYml0YmFrZS1idWlsZC1mbG93LnBuZyBcCiAgICAgICAgICAgIGVjbGlwc2UKIAllbmRpZgogCkBAIC0xNDgsNyArMTQzLDcgQEAKIGlmZXEgKCQoRE9DKSx5b2N0by1wcm9qZWN0LXFzKQogWFNMVE9QVFMgPSAtLXhpbmNsdWRlCiBBTExQUkVRID0gaHRtbCBlY2xpcHNlIHRhcmJhbGwKLVRBUkZJTEVTID0geW9jdG8tcHJvamVjdC1xcy5odG1sIHFzLXN0eWxlLmNzcyBmaWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZyBcCitUQVJGSUxFUyA9IHlvY3RvLXByb2plY3QtcXMuaHRtbCBxcy1zdHlsZS5jc3MgXAogICAgICAgICAgICBmaWd1cmVzL3lvY3RvLXByb2plY3QtdHJhbnNwLnBuZyBcCiAgICAgICAgICAgIGVjbGlwc2UKIE1BTlVBTFMgPSAkKERPQykvJChET0MpLmh0bWwgJChET0MpL2VjbGlwc2UKQEAgLTE5NSw4ICsxOTAsOCBAQAogCWZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZyBmaWd1cmVzL3lwLWRvd25sb2FkLnBuZyBcCiAJZmlndXJlcy93aXAucG5nCiAgICAgICAgIGVsc2UKLVRBUkZJTEVTID0gbWVnYS1tYW51YWwuaHRtbCBtZWdhLXN0eWxlLmNzcyBmaWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZyBcCi0gICAgICAgIGZpZ3VyZXMvYnVpbGRpbmctYW4taW1hZ2UucG5nICBcCitUQVJGSUxFUyA9IG1lZ2EtbWFudWFsLmh0bWwgbWVnYS1zdHlsZS5jc3MgXAorICAgICAgICBmaWd1cmVzL2J1aWxkaW5nLWFuLWltYWdlLnBuZyBmaWd1cmVzL1lQLWZsb3ctZGlhZ3JhbS5wbmcgXAogCWZpZ3VyZXMvdXNpbmctYS1wcmUtYnVpbHQtaW1hZ2UucG5nIFwKIAlmaWd1cmVzL3Bva3ktdGl0bGUucG5nIGZpZ3VyZXMvYnVpbGRoaXN0b3J5LnBuZyBcCiAgICAgICAgIGZpZ3VyZXMvYnVpbGRoaXN0b3J5LXdlYi5wbmcgXApAQCAtMjA2LDcgKzIwMSw3IEBACiAgICAgICAgIGZpZ3VyZXMvZGV2LXRpdGxlLnBuZyBcCiAJZmlndXJlcy9naXQtd29ya2Zsb3cucG5nIGZpZ3VyZXMvaW5kZXgtZG93bmxvYWRzLnBuZyBcCiAgICAgICAgIGZpZ3VyZXMva2VybmVsLWRldi1mbG93LnBuZyBcCi0JZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMS5wbmcgZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi1nZW5lcmljLnBuZyBcCisJZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi1nZW5lcmljLnBuZyBcCiAJZmlndXJlcy9zb3VyY2UtcmVwb3MucG5nIGZpZ3VyZXMveXAtZG93bmxvYWQucG5nIFwKICAgICAgICAgZmlndXJlcy9wcm9maWxlLXRpdGxlLnBuZyBmaWd1cmVzL2tlcm5lbHNoYXJrLWFsbC5wbmcgXAogICAgICAgICBmaWd1cmVzL2tlcm5lbHNoYXJrLWNob29zZS1ldmVudHMucG5nIFwKQEAgLTI0NCwxMyArMjM5LDEyIEBACiAJZmlndXJlcy9zZGstZ2VuZXJhdGlvbi5wbmcgZmlndXJlcy9yZWNpcGUtd29ya2Zsb3cucG5nIFwKIAlmaWd1cmVzL2J1aWxkLXdvcmtzcGFjZS1kaXJlY3RvcnkucG5nIGZpZ3VyZXMvbWVnYS10aXRsZS5wbmcgXAogCWZpZ3VyZXMvdG9hc3Rlci10aXRsZS5wbmcgZmlndXJlcy9ob3N0ZWQtc2VydmljZS5wbmcgXAotCWZpZ3VyZXMvc2ltcGxlLWNvbmZpZ3VyYXRpb24ucG5nIGZpZ3VyZXMvZGV2dG9vbC1hZGQtZmxvdy5wbmcgXAotCWZpZ3VyZXMvZGV2dG9vbC1tb2RpZnktZmxvdy5wbmcgZmlndXJlcy9kZXZ0b29sLXVwZ3JhZGUtZmxvdy5wbmcgXAorCWZpZ3VyZXMvc2ltcGxlLWNvbmZpZ3VyYXRpb24ucG5nIFwKIAlmaWd1cmVzL2NvbXBhdGlibGUtbGF5ZXJzLnBuZyBmaWd1cmVzL2ltcG9ydC1sYXllci5wbmcgZmlndXJlcy9uZXctcHJvamVjdC5wbmcgXAogCWZpZ3VyZXMvc2RrLWVudmlyb25tZW50LnBuZyBmaWd1cmVzL3Nkay1pbnN0YWxsZWQtc3RhbmRhcmQtc2RrLWRpcmVjdG9yeS5wbmcgXAogCWZpZ3VyZXMvc2RrLWRldnRvb2wtYWRkLWZsb3cucG5nIGZpZ3VyZXMvc2RrLWluc3RhbGxlZC1leHRlbnNpYmxlLXNkay1kaXJlY3RvcnkucG5nIFwKIAlmaWd1cmVzL3Nkay1kZXZ0b29sLW1vZGlmeS1mbG93LnBuZyBmaWd1cmVzL3Nkay1lY2xpcHNlLWRldi1mbG93LnBuZyBcCi0JZmlndXJlcy9zZGstZGV2dG9vbC11cGdyYWRlLWZsb3cucG5nCisJZmlndXJlcy9zZGstZGV2dG9vbC11cGdyYWRlLWZsb3cucG5nIGZpZ3VyZXMvYml0YmFrZS1idWlsZC1mbG93LnBuZwogCWVuZGlmCiAKIE1BTlVBTFMgPSAkKERPQykvJChET0MpLmh0bWwKQEAgLTI2Miw3ICsyNTYsNyBAQAogaWZlcSAoJChET0MpLHJlZi1tYW51YWwpCiBYU0xUT1BUUyA9IC0teGluY2x1ZGUKIEFMTFBSRVEgPSBodG1sIGVjbGlwc2UgdGFyYmFsbAotVEFSRklMRVMgPSByZWYtbWFudWFsLmh0bWwgcmVmLXN0eWxlLmNzcyBmaWd1cmVzL3Bva3ktdGl0bGUucG5nIFwKK1RBUkZJTEVTID0gcmVmLW1hbnVhbC5odG1sIHJlZi1zdHlsZS5jc3MgZmlndXJlcy9wb2t5LXRpdGxlLnBuZyBmaWd1cmVzL1lQLWZsb3ctZGlhZ3JhbS5wbmcgXAogCWZpZ3VyZXMvYnVpbGRoaXN0b3J5LnBuZyBmaWd1cmVzL2J1aWxkaGlzdG9yeS13ZWIucG5nIGVjbGlwc2UgXAogICAgICAgICBmaWd1cmVzL2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbnMucG5nIGZpZ3VyZXMvbGF5ZXItaW5wdXQucG5nIFwKIAlmaWd1cmVzL3BhY2thZ2UtZmVlZHMucG5nIGZpZ3VyZXMvc291cmNlLWlucHV0LnBuZyBcCkBAIC0yNzEsNyArMjY1LDggQEAKIAlmaWd1cmVzL3BhdGNoaW5nLnBuZyBmaWd1cmVzL2NvbmZpZ3VyYXRpb24tY29tcGlsZS1hdXRvcmVjb25mLnBuZyBcCiAJZmlndXJlcy9hbmFseXNpcy1mb3ItcGFja2FnZS1zcGxpdHRpbmcucG5nIGZpZ3VyZXMvaW1hZ2UtZ2VuZXJhdGlvbi5wbmcgXAogCWZpZ3VyZXMvc2RrLWdlbmVyYXRpb24ucG5nIGZpZ3VyZXMvYnVpbGRpbmctYW4taW1hZ2UucG5nIFwKLQlmaWd1cmVzL2J1aWxkLXdvcmtzcGFjZS1kaXJlY3RvcnkucG5nCisJZmlndXJlcy9idWlsZC13b3Jrc3BhY2UtZGlyZWN0b3J5LnBuZyBmaWd1cmVzL3NvdXJjZS1yZXBvcy5wbmcgXAorCWZpZ3VyZXMvaW5kZXgtZG93bmxvYWRzLnBuZyBmaWd1cmVzL3lwLWRvd25sb2FkLnBuZyBmaWd1cmVzL2dpdC13b3JrZmxvdy5wbmcKIE1BTlVBTFMgPSAkKERPQykvJChET0MpLmh0bWwgJChET0MpL2VjbGlwc2UKIEZJR1VSRVMgPSBmaWd1cmVzCiBTVFlMRVNIRUVUID0gJChET0MpLyouY3NzCkBAIC0zMzAsOCArMzI1LDggQEAKIFhTTFRPUFRTID0gLS14aW5jbHVkZQogQUxMUFJFUSA9IGh0bWwgZWNsaXBzZSB0YXJiYWxsCiBUQVJGSUxFUyA9IGtlcm5lbC1kZXYuaHRtbCBrZXJuZWwtZGV2LXN0eWxlLmNzcyBcCi0gICAgICAgICAgIGZpZ3VyZXMva2VybmVsLWRldi10aXRsZS5wbmcgXAotICAgICAgICAgICBmaWd1cmVzL2tlcm5lbC1hcmNoaXRlY3R1cmUtb3ZlcnZpZXcucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9rZXJuZWwtZGV2LXRpdGxlLnBuZyBmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0yLWdlbmVyaWMucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9rZXJuZWwtYXJjaGl0ZWN0dXJlLW92ZXJ2aWV3LnBuZyBmaWd1cmVzL2tlcm5lbC1kZXYtZmxvdy5wbmcgXAogICAgICAgICAgICBlY2xpcHNlCiBNQU5VQUxTID0gJChET0MpLyQoRE9DKS5odG1sICQoRE9DKS9lY2xpcHNlCiBGSUdVUkVTID0gZmlndXJlcwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vUkVBRE1FIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vUkVBRE1FCmluZGV4IGE0ZTcwYTguLmQ2NGYyZmQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL1JFQURNRQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9SRUFETUUKQEAgLTM2LDggKzM2LDggQEAKIAogKiBzZGstbWFudWFsICAgICAgIC0gVGhlIFlvY3RvIFByb2plY3QgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspIERldmVsb3BlcidzIEd1aWRlLgogKiBic3AtZ3VpZGUgICAgICAgIC0gVGhlIFlvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIERldmVsb3BlcidzIEd1aWRlCi0qIGRldi1tYW51YWwgICAgICAgLSBUaGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwKLSoga2VybmVsLWRldiAgICAgICAtIFRoZSBZb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWwKKyogZGV2LW1hbnVhbCAgICAgICAtIFRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbAorKiBrZXJuZWwtZGV2ICAgICAgIC0gVGhlIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IFRhc2tzIE1hbnVhbAogKiByZWYtbWFudWFsICAgICAgIC0gVGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbAogKiB5b2N0by1wcm9qZWN0LXFzIC0gVGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQKICogbWVnYS1tYW51YWwgICAgICAtIFRoZSBZb2N0byBQcm9qZWN0IE1lZ2EtTWFudWFsLCB3aGljaCBpcyBhbiBhZ2dyZWdhdGVkIG1hbnVhbCBjb21wcmlzZWQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3AtZ3VpZGUueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC1ndWlkZS54bWwKaW5kZXggZjBlZTM5OS4uNTc2ZWQxOCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC1ndWlkZS54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC1ndWlkZS54bWwKQEAgLTIyLDE4ICsyMiwxMSBAQAogCiAgICAgICAgIDxhdXRob3Jncm91cD4KICAgICAgICAgICAgIDxhdXRob3I+Ci0gICAgICAgICAgICAgICAgPGZpcnN0bmFtZT5TYXVsPC9maXJzdG5hbWU+IDxzdXJuYW1lPldvbGQ8L3N1cm5hbWU+CisgICAgICAgICAgICAgICAgPGZpcnN0bmFtZT5TY290dDwvZmlyc3RuYW1lPiA8c3VybmFtZT5SaWZlbmJhcms8L3N1cm5hbWU+CiAgICAgICAgICAgICAgICAgPGFmZmlsaWF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8b3JnbmFtZT5JbnRlbCBDb3Jwb3JhdGlvbjwvb3JnbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPG9yZ25hbWU+U2NvdHR5J3MgRG9jdW1lbnRhdGlvbiBTZXJ2aWNlcywgSU5DPC9vcmduYW1lPgogICAgICAgICAgICAgICAgIDwvYWZmaWxpYXRpb24+Ci0gICAgICAgICAgICAgICAgPGVtYWlsPnNhdWwud29sZEBpbnRlbC5jb208L2VtYWlsPgotICAgICAgICAgICAgPC9hdXRob3I+Ci0gICAgICAgICAgICA8YXV0aG9yPgotICAgICAgICAgICAgICAgIDxmaXJzdG5hbWU+UmljaGFyZDwvZmlyc3RuYW1lPiA8c3VybmFtZT5QdXJkaWU8L3N1cm5hbWU+Ci0gICAgICAgICAgICAgICAgPGFmZmlsaWF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8b3JnbmFtZT5MaW51eCBGb3VuZGF0aW9uPC9vcmduYW1lPgotICAgICAgICAgICAgICAgIDwvYWZmaWxpYXRpb24+Ci0gICAgICAgICAgICAgICAgPGVtYWlsPnJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc8L2VtYWlsPgorICAgICAgICAgICAgICAgIDxlbWFpbD5zcmlmZW5iYXJrQGdtYWlsLmNvbTwvZW1haWw+CiAgICAgICAgICAgICA8L2F1dGhvcj4KICAgICAgICAgPC9hdXRob3Jncm91cD4KIApAQCAtMTE5LDI0ICsxMTIsMTkgQEAKICAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi4zIFJlbGVhc2UuPC9yZXZyZW1hcms+CiAgICAgICAgICAgICA8L3JldmlzaW9uPgogICAgICAgICAgICAgPHJldmlzaW9uPgotICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi4zLjE8L3Jldm51bWJlcj4KLSAgICAgICAgICAgICAgICA8ZGF0ZT5KdW5lIDIwMTc8L2RhdGU+Ci0gICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDIuMy4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4yLjQ8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTc8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDIuNCBSZWxlYXNlLjwvcmV2cmVtYXJrPgogICAgICAgICAgICAgPC9yZXZpc2lvbj4KICAgICAgICAgICAgIDxyZXZpc2lvbj4KLSAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjIuMy4yPC9yZXZudW1iZXI+Ci0gICAgICAgICAgICAgICAgPGRhdGU+U2VwdGVtYmVyIDIwMTc8L2RhdGU+Ci0gICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDIuMy4yIFJlbGVhc2UuPC9yZXZyZW1hcms+Ci0gICAgICAgICAgICA8L3JldmlzaW9uPgotICAgICAgICAgICAgPHJldmlzaW9uPgotICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi4zLjM8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjIuNC4xPC9yZXZudW1iZXI+CiAgICAgICAgICAgICAgICAgPGRhdGU+SmFudWFyeSAyMDE4PC9kYXRlPgotICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjMuMyBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjQuMSBSZWxlYXNlLjwvcmV2cmVtYXJrPgogICAgICAgICAgICAgPC9yZXZpc2lvbj4KICAgICAgICAgICAgIDxyZXZpc2lvbj4KLSAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjIuMy40PC9yZXZudW1iZXI+Ci0gICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxODwvZGF0ZT4KLSAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi4zLjQgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjIuNC4yPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+TWFyY2ggMjAxODwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi40LjIgUmVsZWFzZS48L3JldnJlbWFyaz4KICAgICAgICAgICAgIDwvcmV2aXNpb24+CiAgICAgICAgIDwvcmV2aGlzdG9yeT4KIApAQCAtMTUwLDM0ICsxMzgsMzQgQEAKICAgICAgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50IHVuZGVyCiAgICAgICAgIHRoZSB0ZXJtcyBvZiB0aGUgPHVsaW5rIHR5cGU9Imh0dHAiIHVybD0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktbmMtc2EvMi4wL3VrLyI+Q3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZSBBbGlrZSAyLjAgVUs6IEVuZ2xhbmQgJmFtcDsgV2FsZXM8L3VsaW5rPiBhcyBwdWJsaXNoZWQgYnkgQ3JlYXRpdmUgQ29tbW9ucy4KICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDxub3RlPjx0aXRsZT5NYW51YWwgTm90ZXM8L3RpdGxlPgotICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgQm9hcmQKLSAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZSBhc3NvY2lhdGVkIHdpdGgKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgWW9jdG8gUHJvamVjdCByZWxlYXNlICh2ZXJzaW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAmWU9DVE9fRE9DX1ZFUlNJT047KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkKLSAgICAgICAgICAgICAgICAgICAgICAgIERldmVsb3BlcidzIEd1aWRlIGZyb20gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L2RvY3VtZW50YXRpb24nPllvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbiBwYWdlPC91bGluaz4uCisgICAgICAgICAgIDxub3RlPjx0aXRsZT5NYW51YWwgTm90ZXM8L3RpdGxlPgorICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmVyc2lvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPllvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIERldmVsb3BlcidzIEd1aWRlPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgaXMgZm9yIHRoZSAmWU9DVE9fRE9DX1ZFUlNJT047IHJlbGVhc2Ugb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgIFRvIGJlIHN1cmUgeW91IGhhdmUgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBtYW51YWwKKyAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgcmVsZWFzZSwgdXNlIHRoZSBtYW51YWwgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy9kb2N1bWVudGF0aW9uJz5Zb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24gcGFnZTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgIEZvciBtYW51YWxzIGFzc29jaWF0ZWQgd2l0aCBvdGhlciByZWxlYXNlcyBvZiB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdCwgZ28gdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvZG9jdW1lbnRhdGlvbic+WW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uIHBhZ2U8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICBhbmQgdXNlIHRoZSBkcm9wLWRvd24gIkFjdGl2ZSBSZWxlYXNlcyIgYnV0dG9uCisgICAgICAgICAgICAgICAgICAgICAgIGFuZCBjaG9vc2UgdGhlIG1hbnVhbCBhc3NvY2lhdGVkIHdpdGggdGhlIGRlc2lyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gcmVwb3J0IGFueSBpbmFjY3VyYWNpZXMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICBtYW51YWwsIHNlbmQgYW4gZW1haWwgdG8gdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc2N1c3Npb24gZ3JvdXAgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0b0B5b2N0b3Byb2plY3QuY29tPC9maWxlbmFtZT4gb3IgbG9nIGludG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmcmVlbm9kZSA8ZmlsZW5hbWU+I3lvY3RvPC9maWxlbmFtZT4gY2hhbm5lbC4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZlcnNpb24gb2YgdGhlIG1hbnVhbCBpcyB2ZXJzaW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAmWU9DVE9fRE9DX1ZFUlNJT047LgotICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGxhdGVyIHJlbGVhc2VzIG9mIHRoZSBZb2N0byBQcm9qZWN0IChpZiB0aGV5IGV4aXN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvIHRvIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy9kb2N1bWVudGF0aW9uJz5Zb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24gcGFnZTwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbmQgdXNlIHRoZSBkcm9wLWRvd24gIkFjdGl2ZSBSZWxlYXNlcyIgYnV0dG9uCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmQgY2hvb3NlIHRoZSBZb2N0byBQcm9qZWN0IHZlcnNpb24gZm9yIHdoaWNoIHlvdSB3YW50Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFudWFsLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhbiBpbi1kZXZlbG9wbWVudCB2ZXJzaW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGUsIHNlZQotICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfVVJMOy9sYXRlc3QvYnNwLWd1aWRlL2JzcC1ndWlkZS5odG1sJz48L3VsaW5rPi4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgIDwvbm90ZT4KICAgICA8L2xlZ2Fsbm90aWNlPgogCiAgICAgPC9ib29raW5mbz4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3AueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC54bWwKaW5kZXggYTkyZTYxMS4uZDdiNmYxNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC54bWwKQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgICAgICAgICAgICBUbyBoZWxwIHVuZGVyc3RhbmQgdGhlIEJTUCBsYXllciBjb25jZXB0LCBjb25zaWRlciB0aGUgQlNQcyB0aGF0IHRoZQogICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3Qgc3VwcG9ydHMgYW5kIHByb3ZpZGVzIHdpdGggZWFjaCByZWxlYXNlLgogICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VlIHRoZSBsYXllcnMgaW4gdGhlCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjeW9jdG8tcHJvamVjdC1yZXBvc2l0b3JpZXMnPllvY3RvIFByb2plY3QgU291cmNlIFJlcG9zaXRvcmllczwvdWxpbms+CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjeW9jdG8tcHJvamVjdC1yZXBvc2l0b3JpZXMnPllvY3RvIFByb2plY3QgU291cmNlIFJlcG9zaXRvcmllczwvdWxpbms+CiAgICAgICAgICAgICAgICAgdGhyb3VnaCBhIHdlYiBpbnRlcmZhY2UgYXQKICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC9jZ2l0LmNnaSc+PC91bGluaz4uCiAgICAgICAgICAgICAgICAgSWYgeW91IGdvIHRvIHRoYXQgaW50ZXJmYWNlLCB5b3Ugd2lsbCBmaW5kIG5lYXIgdGhlIGJvdHRvbSBvZiB0aGUgbGlzdApAQCAtODMsMTIgKzgzLDEyIEBACiAKICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgQlNQIGRldmVsb3BtZW50IHdvcmtmbG93LCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2RldmVsb3BpbmctYS1ib2FyZC1zdXBwb3J0LXBhY2thZ2UtYnNwJz5EZXZlbG9waW5nIGEgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApPC91bGluaz4iCi0gICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2RldmVsb3BpbmctYS1ib2FyZC1zdXBwb3J0LXBhY2thZ2UtYnNwJz5EZXZlbG9waW5nIGEgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgogICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzZXQgdXAgYSBsb2NhbCBjb3B5IG9mIHNvdXJjZSBmaWxlcwogICAgICAgICAgICAgICAgIGZyb20gYSBHaXQgcmVwb3NpdG9yeSwgc2VlIHRoZQotICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNnZXR0aW5nLXNldHVwJz5HZXR0aW5nIFNldCBVcDwvdWxpbms+IgotICAgICAgICAgICAgICAgIHNlY3Rpb24gYWxzbyBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3dvcmtpbmctd2l0aC15b2N0by1wcm9qZWN0LXNvdXJjZS1maWxlcyc+V29ya2luZyBXaXRoIFlvY3RvIFByb2plY3QgU291cmNlIEZpbGVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBhbHNvIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgPHBhcmE+CkBAIC05OCwxMiArOTgsMTAgQEAKICAgICAgICAgICAgICAgICBUaGlzIHJvb3QgaXMgd2hhdCB5b3UgYWRkIHRvIHRoZQogICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQkxBWUVSUyc+PGZpbGVuYW1lPkJCTEFZRVJTPC9maWxlbmFtZT48L3VsaW5rPgogICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSBmb3VuZCBpbiB0aGUKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LAotICAgICAgICAgICAgICAgIHdoaWNoIGlzIGVzdGFibGlzaGVkIGFmdGVyIHlvdSBydW4gb25lIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgZW52aXJvbm1lbnQKLSAgICAgICAgICAgICAgICBzZXR1cCBzY3JpcHRzIChpLmUuCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgYW5kCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4pLgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgd2hpY2ggaXMgZXN0YWJsaXNoZWQgYWZ0ZXIgeW91IHJ1biB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgc2V0dXAgc2NyaXB0IChpLmUuCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+KS4KICAgICAgICAgICAgICAgICBBZGRpbmcgdGhlIHJvb3QgYWxsb3dzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHJlY29nbml6ZSB0aGUgQlNQCiAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbiBhbmQgZnJvbSBpdCBidWlsZCBhbiBpbWFnZS4KICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CkBAIC0xNDEsNyArMTM5LDE0OSBAQAogICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgRm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gbGF5ZXJzLCBzZWUgdGhlCiAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycyc+VW5kZXJzdGFuZGluZyBhbmQgQ3JlYXRpbmcgTGF5ZXJzPC91bGluaz4iCi0gICAgICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncHJlcGFyaW5nLXlvdXItYnVpbGQtaG9zdC10by13b3JrLXdpdGgtYnNwLWxheWVycyc+CisgICAgICAgICAgICA8dGl0bGU+UHJlcGFyaW5nIFlvdXIgQnVpbGQgSG9zdCB0byBXb3JrIFdpdGggQlNQIExheWVyczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHRvIGdldCB5b3VyIGJ1aWxkIGhvc3QgcmVhZHkKKyAgICAgICAgICAgICAgICB0byB3b3JrIHdpdGggQlNQIGxheWVycy4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIHRoZSBob3N0IHNldCB1cCwgeW91IGNhbiBjcmVhdGUgdGhlIGxheWVyCisgICAgICAgICAgICAgICAgYXMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjcmVhdGluZy1hLW5ldy1ic3AtbGF5ZXItdXNpbmctdGhlLXlvY3RvLWJzcC1zY3JpcHQnPkNyZWF0aW5nIGEgbmV3IEJTUCBMYXllciBVc2luZyB0aGUgeW9jdG8tYnNwIFNjcmlwdDwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHN0cnVjdHVyYWwgaW5mb3JtYXRpb24gb24gQlNQcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdic3AtZmlsZWxheW91dCc+RXhhbXBsZSBGaWxlc3lzdGVtIExheW91dDwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+U2V0IFVwIHRoZSBCdWlsZCBFbnZpcm9ubWVudDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB5b3UgYXJlIHNldCB1cCB0byB1c2UgQml0QmFrZSBpbiBhIHNoZWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NldHRpbmctdXAtdGhlLWRldmVsb3BtZW50LWhvc3QtdG8tdXNlLXRoZS15b2N0by1wcm9qZWN0Jz5TZXR0aW5nIFVwIHRoZSBEZXZlbG9wbWVudCBIb3N0IHRvIFVzZSB0aGUgWW9jdG8gUHJvamVjdDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwgZm9yIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBvbiBob3cgdG8gZ2V0IGEgYnVpbGQgaG9zdCByZWFkeSB0aGF0IGlzIGVpdGhlciBhIG5hdGl2ZQorICAgICAgICAgICAgICAgICAgICAgICAgTGludXggbWFjaGluZSBvciBhIG1hY2hpbmUgdGhhdCB1c2VzIENST1BTLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5DbG9uZSB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBSZXBvc2l0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBoYXZlIGEgbG9jYWwgY29weSBvZiB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLiBhIGxvY2FsIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gcmVwb3NpdG9yeSkuCisgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY2xvbmluZy10aGUtcG9reS1yZXBvc2l0b3J5Jz5DbG9uaW5nIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IFJlcG9zaXRvcnk8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBwb3NzaWJseSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjaGVja2luZy1vdXQtYnktYnJhbmNoLWluLXBva3knPkNoZWNraW5nIE91dCBieSBCcmFuY2ggaW4gUG9reTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY2hlY2tvdXQtb3V0LWJ5LXRhZy1pbi1wb2t5Jz5DaGVja2luZyBPdXQgYnkgVGFnIGluIFBva3k8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zIGFsbCBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY2xvbmUgdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgYW5kIGNoZWNrIG91dCB0aGUgYXBwcm9wcmlhdGUgYnJhbmNoIGZvciB5b3VyIHdvcmsuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkRldGVybWluZSB0aGUgQlNQIExheWVyIFlvdSBXYW50OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBzdXBwb3J0cyBtYW55IEJTUHMsIHdoaWNoIGFyZSBtYWludGFpbmVkIGluCisgICAgICAgICAgICAgICAgICAgICAgICB0aGVpciBvd24gbGF5ZXJzIG9yIGluIGxheWVycyBkZXNpZ25lZCB0byBjb250YWluIHNldmVyYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIEJTUHMuCisgICAgICAgICAgICAgICAgICAgICAgICBUbyBnZXQgYW4gaWRlYSBvZiBtYWNoaW5lIHN1cHBvcnQgdGhyb3VnaCBCU1AgbGF5ZXJzLCB5b3UgY2FuCisgICAgICAgICAgICAgICAgICAgICAgICBsb29rIGF0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1JFTEVBU0VfRExfVVJMOy9tYWNoaW5lcyc+aW5kZXggb2YgbWFjaGluZXM8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSByZWxlYXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5PcHRpb25hbGx5IENsb25lIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBCU1AgTGF5ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgaGFyZHdhcmUgaXMgYmFzZWQgb24gY3VycmVudCBJbnRlbCBDUFVzIGFuZCBkZXZpY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBsZXZlcmFnZSB0aGlzIEJTUCBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBkZXRhaWxzIG9uIHRoZSA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+IEJTUCBsYXllciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUgbGF5ZXIncworICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvbWV0YS1pbnRlbC90cmVlL1JFQURNRSc+PGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+TmF2aWdhdGUgdG8gWW91ciBTb3VyY2UgRGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgeW91IHNldCB1cCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNpZGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q2xvbmUgdGhlIExheWVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbWV0YS1pbnRlbC5naXQKKyAgICAgQ2xvbmluZyBpbnRvICdtZXRhLWludGVsJy4uLgorICAgICByZW1vdGU6IENvdW50aW5nIG9iamVjdHM6IDE0MjI0LCBkb25lLgorICAgICByZW1vdGU6IENvbXByZXNzaW5nIG9iamVjdHM6IDEwMCUgKDQ1OTEvNDU5MSksIGRvbmUuCisgICAgIHJlbW90ZTogVG90YWwgMTQyMjQgKGRlbHRhIDgyNDUpLCByZXVzZWQgMTM5ODUgKGRlbHRhIDgwMDYpCisgICAgIFJlY2VpdmluZyBvYmplY3RzOiAxMDAlICgxNDIyNC8xNDIyNCksIDQuMjkgTWlCIHwgMi45MCBNaUIvcywgZG9uZS4KKyAgICAgUmVzb2x2aW5nIGRlbHRhczogMTAwJSAoODI0NS84MjQ1KSwgZG9uZS4KKyAgICAgQ2hlY2tpbmcgY29ubmVjdGl2aXR5Li4uIGRvbmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q2hlY2sgT3V0IHRoZSBQcm9wZXIgQnJhbmNoOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBicmFuY2ggeW91IGNoZWNrIG91dCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBtdXN0IG1hdGNoIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaCB5b3UgYXJlIHVzaW5nIGZvciB0aGUgWW9jdG8gUHJvamVjdCByZWxlYXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuICZESVNUUk9fTkFNRV9OT19DQVA7KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjaGVja291dCA8cmVwbGFjZWFibGU+YnJhbmNoX25hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIG9uIGhvdyB0byBkaXNjb3ZlciBicmFuY2ggbmFtZXMgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrb3V0IG9uIGEgYnJhbmNoLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjaGVja2luZy1vdXQtYnktYnJhbmNoLWluLXBva3knPkNoZWNraW5nIE91dCBCeSBCcmFuY2ggaW4gUG9reTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5PcHRpb25hbGx5IFNldCBVcCBhbiBBbHRlcm5hdGl2ZSBCU1AgTGF5ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgaGFyZHdhcmUgY2FuIGJlIG1vcmUgY2xvc2VseSBsZXZlcmFnZWQgdG8gYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nIEJTUCBub3Qgd2l0aGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBCU1AgbGF5ZXIsIHlvdSBjYW4gY2xvbmUgdGhhdCBCU1AgbGF5ZXIuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgcHJvY2VzcyBpcyBpZGVudGljYWwgdG8gdGhlIHByb2Nlc3MgdXNlZCBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+IGxheWVyIGV4Y2VwdCBmb3IgdGhlIGxheWVyJ3MKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGRldGVybWluZSB0aGF0IHlvdXIgaGFyZHdhcmUgbW9zdAorICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VseSBtYXRjaGVzIHRoZSA8ZmlsZW5hbWU+bWV0YS1taW5ub3c8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lIHRoYXQgbGF5ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL21ldGEtbWlubm93CisgICAgIENsb25pbmcgaW50byAnbWV0YS1taW5ub3cnLi4uCisgICAgIHJlbW90ZTogQ291bnRpbmcgb2JqZWN0czogNDU2LCBkb25lLgorICAgICByZW1vdGU6IENvbXByZXNzaW5nIG9iamVjdHM6IDEwMCUgKDI4My8yODMpLCBkb25lLgorICAgICByZW1vdGU6IFRvdGFsIDQ1NiAoZGVsdGEgMTYzKSwgcmV1c2VkIDM4NCAoZGVsdGEgOTEpCisgICAgIFJlY2VpdmluZyBvYmplY3RzOiAxMDAlICg0NTYvNDU2KSwgOTYuNzQgS2lCIHwgMCBieXRlcy9zLCBkb25lLgorICAgICBSZXNvbHZpbmcgZGVsdGFzOiAxMDAlICgxNjMvMTYzKSwgZG9uZS4KKyAgICAgQ2hlY2tpbmcgY29ubmVjdGl2aXR5Li4uIGRvbmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkluaXRpYWxpemUgdGhlIEJ1aWxkIEVudmlyb25tZW50OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBXaGlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIFNvdXJjZSBEaXJlY3RvcnkgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4pLCBydW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCB0byBkZWZpbmUgdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgZW52aXJvbm1lbnQgb24geW91ciBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSAmT0VfSU5JVF9GSUxFOworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGUgc2NyaXB0IGNyZWF0ZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgPGZpbGVuYW1lPmJ1aWxkPC9maWxlbmFtZT4gaW4gdGhpcyBjYXNlCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgaXMgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIHRoZSBzY3JpcHQgcnVucywgeW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gdGhlIDxmaWxlbmFtZT5idWlsZDwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CiAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvc2VjdGlvbj4KIApAQCAtNDE3LDcgKzU1Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VkIHdpdGggdGhlIEJTUC4KICAgICAgICAgICAgICAgICAgICAgVGhlIGluZm9ybWF0aW9uIGluIHRoZSA8ZmlsZW5hbWU+UkVBRE1FLnNvdXJjZXM8L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgICAgICBmaWxlIGFsc28gaGVscHMgeW91IGZpbmQgdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CiAgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGltYWdlcyB0aGF0IHNoaXAgd2l0aCB0aGUgQlNQLgogICAgICAgICAgICAgICAgICAgICA8bm90ZT4KICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBCU1AncyA8ZmlsZW5hbWU+YmluYXJ5PC9maWxlbmFtZT4gZGlyZWN0b3J5IGlzCkBAIC01MjIsNyArNjYyLDcgQEAKIAogICAgICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgICAgICBUaGlzIGZpbGUgc2ltcGx5IG1ha2VzCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+CiAgICAgICAgICAgICAgICAgICAgIGF3YXJlIG9mIHRoZSByZWNpcGVzIGFuZCBjb25maWd1cmF0aW9uIGRpcmVjdG9yaWVzLgogICAgICAgICAgICAgICAgICAgICBUaGUgZmlsZSBtdXN0IGV4aXN0IHNvIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2FuIHJlY29nbml6ZSB0aGUgQlNQLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KQEAgLTU3MSw3ICs3MTEsNyBAQAogICAgICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgICAgICBUdW5pbmcgZmlsZXMgYXJlIGZvdW5kIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZTwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB3aXRoaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgogICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5pYTMyLWJhc2UuaW5jPC9maWxlbmFtZT4gZmlsZSByZXNpZGVzIGluIHRoZQogICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZTwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KICAgICAgICAgICAgICAgICA8L3BhcmE+CkBAIC02MjcsNyArNzY3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZm9ybWZhY3RvciByZWNpcGUKICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yXzAuMC5iYjwvZmlsZW5hbWU+LAogICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBmb3VuZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCiAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbm90ZT4KICAgICAgICAgICAgIDwvc2VjdGlvbj4KIApAQCAtNjY3LDcgKzgwNyw3IEBACiAgICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIEZvciB5b3VyIEJTUCwgeW91IHR5cGljYWxseSB3YW50IHRvIHVzZSBhbiBleGlzdGluZyBZb2N0bwogICAgICAgICAgICAgICAgICAgICBQcm9qZWN0IGtlcm5lbCByZWNpcGUgZm91bmQgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KICAgICAgICAgICAgICAgICAgICAgYXQgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1rZXJuZWwvbGludXg8L2ZpbGVuYW1lPi4KICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhcHBlbmQgbWFjaGluZS1zcGVjaWZpYyBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgcmVjaXBlCiAgICAgICAgICAgICAgICAgICAgIGJ5IHVzaW5nIGEgc2ltaWxhcmx5IG5hbWVkIGFwcGVuZCBmaWxlLCB3aGljaCBpcyBsb2NhdGVkIGluCkBAIC03MTAsNiArODUwLDIwNCBAQAogICAgICAgICAgICAgPC9zZWN0aW9uPgogICAgICAgICA8L3NlY3Rpb24+CiAKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RldmVsb3BpbmctYS1ib2FyZC1zdXBwb3J0LXBhY2thZ2UtYnNwJz4KKyAgICAgICAgICAgIDx0aXRsZT5EZXZlbG9waW5nIGEgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBoaWdoLWxldmVsIHByb2NlZHVyZSB5b3UgY2FuIGZvbGxvdworICAgICAgICAgICAgICAgIHRvIGNyZWF0ZSBhIEJTUCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCdzCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndXNpbmctdGhlLXlvY3RvLXByb2plY3RzLWJzcC10b29scyc+QlNQIFRvb2xzPC9saW5rPi4KKyAgICAgICAgICAgICAgICBBbHRob3VnaCBub3QgcmVxdWlyZWQgZm9yIEJTUCBjcmVhdGlvbiwgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiByZXBvc2l0b3J5LCB3aGljaCBjb250YWlucworICAgICAgICAgICAgICAgIG1hbnkgQlNQcyBzdXBwb3J0ZWQgYnkgdGhlIFlvY3RvIFByb2plY3QsIGlzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgZXhhbXBsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIGFuIGV4YW1wbGUgdGhhdCBzaG93cyBob3cgdG8gY3JlYXRlIGEgbmV3IGxheWVyIHVzaW5nCisgICAgICAgICAgICAgICAgdGhlIHRvb2xzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLWEtbmV3LWJzcC1sYXllci11c2luZy10aGUteW9jdG8tYnNwLXNjcmlwdCc+Q3JlYXRpbmcgYSBOZXcgQlNQIExheWVyIFVzaW5nIHRoZSB5b2N0by1ic3AgU2NyaXB0PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBpbGx1c3RyYXRpb24gYW5kIGxpc3Qgc3VtbWFyaXplIHRoZSBCU1AKKyAgICAgICAgICAgICAgICBjcmVhdGlvbiBnZW5lcmFsIHdvcmtmbG93LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZyIgd2lkdGg9IjdpbiIgZGVwdGg9IjVpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlNldCB1cCBZb3VyIEhvc3QgRGV2ZWxvcG1lbnQgU3lzdGVtIHRvIFN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIERldmVsb3BtZW50IFVzaW5nIHRoZSBZb2N0byBQcm9qZWN0PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyN5cC1yZXNvdXJjZXMnPlNldHRpbmcgVXAgdG8gVXNlIHRoZSBZb2N0byBQcm9qZWN0PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0IGZvciBvcHRpb25zIG9uIGhvdworICAgICAgICAgICAgICAgICAgICAgICAgdG8gZ2V0IGEgYnVpbGQgaG9zdCByZWFkeSB0byB1c2UgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkVzdGFibGlzaCB0aGUgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3NpdG9yeSBvbiBZb3VyIFN5c3RlbTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgSGF2aW5nIGxvY2FsIGNvcGllcyBvZiB0aGVzZSBzdXBwb3J0ZWQgQlNQIGxheWVycyBvbgorICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBzeXN0ZW0gZ2l2ZXMgeW91IGFjY2VzcyB0byBsYXllcnMgeW91IG1pZ2h0IGJlIGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJ1aWxkIG9uIG9yIG1vZGlmeSB0byBjcmVhdGUgeW91ciBCU1AuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGdldCB0aGVzZSBmaWxlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3ByZXBhcmluZy15b3VyLWJ1aWxkLWhvc3QtdG8td29yay13aXRoLWJzcC1sYXllcnMnPlByZXBhcmluZyBZb3VyIEJ1aWxkIEhvc3QgdG8gV29yayB3aXRoIEJTUCBMYXllcnM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q3JlYXRlIFlvdXIgT3duIEJTUCBMYXllciBVc2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLWEtbmV3LWJzcC1sYXllci11c2luZy10aGUteW9jdG8tYnNwLXNjcmlwdCc+PGZpbGVuYW1lPnlvY3RvLWJzcDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBMYXllcnMgYXJlIGlkZWFsIGZvciBpc29sYXRpbmcgYW5kIHN0b3Jpbmcgd29yayBmb3IgYQorICAgICAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gcGllY2Ugb2YgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgICAgICAgICBBIGxheWVyIGlzIHJlYWxseSBqdXN0IGEgbG9jYXRpb24gb3IgYXJlYSBpbiB3aGljaCB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlIHRoZSByZWNpcGVzIGFuZCBjb25maWd1cmF0aW9ucyBmb3IgeW91ciBCU1AuCisgICAgICAgICAgICAgICAgICAgICAgICBJbiBmYWN0LCBhIEJTUCBpcywgaW4gaXRzZWxmLCBhIHNwZWNpYWwgdHlwZSBvZiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzaW1wbGVzdCB3YXkgdG8gY3JlYXRlIGEgbmV3IEJTUCBsYXllciB0aGF0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGlhbnQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCBpcyB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG8tYnNwPC9maWxlbmFtZT4gc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoYXQgc2NyaXB0LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3JlYXRpbmctYS1uZXctYnNwLWxheWVyLXVzaW5nLXRoZS15b2N0by1ic3Atc2NyaXB0Jz5DcmVhdGluZyBhIE5ldyBCU1AgTGF5ZXIgVXNpbmcgdGhlIHlvY3RvLWJzcCBTY3JpcHQ8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi48L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkFub3RoZXIgZXhhbXBsZSB0aGF0IGlsbHVzdHJhdGVzIGEgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFuIGFwcGxpY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9zZSB5b3UgYXJlIGNyZWF0aW5nIGFuIGFwcGxpY2F0aW9uIHRoYXQgaGFzCisgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5IG9yIG90aGVyIGRlcGVuZGVuY2llcyBpbiBvcmRlciBmb3IgaXQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGUgYW5kIHJ1bi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBsYXllciwgaW4gdGhpcyBjYXNlLCB3b3VsZCBiZSB3aGVyZSBhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzIHRoYXQgZGVmaW5lIHRob3NlIGRlcGVuZGVuY2llcyBhcmUga2VwdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBrZXkgcG9pbnQgZm9yIGEgbGF5ZXIgaXMgdGhhdCBpdCBpcyBhbiBpc29sYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgYXJlYSB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgcmVsZXZhbnQgaW5mb3JtYXRpb24gZm9yCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJvamVjdCB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGtub3dzCisgICAgICAgICAgICAgICAgICAgICAgICBhYm91dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGxheWVycywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycyc+VW5kZXJzdGFuZGluZyBhbmQgQ3JlYXRpbmcgTGF5ZXJzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEJTUCBsYXllcnMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdic3AtbGF5ZXJzJz5CU1AgTGF5ZXJzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+Tm90ZXM8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkZpdmUgQlNQcyBleGlzdCB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBZb2N0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2plY3QgcmVsZWFzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmVhZ2xlYm9uZTwvZmlsZW5hbWU+IChBUk0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tcGM4MzE1ZTwvZmlsZW5hbWU+IChQb3dlclBDKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmVkZ2Vyb3V0ZXI8L2ZpbGVuYW1lPiAoTUlQUykuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZXMgYW5kIGNvbmZpZ3VyYXRpb25zIGZvciB0aGVzZSBmaXZlIEJTUHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgbG9jYXRlZCBhbmQgZGlzcGVyc2VkIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhyZWUgY29yZSBJbnRlbCBCU1BzIGV4aXN0IGFzIHBhcnQgb2YgdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdCByZWxlYXNlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gbGF5ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmludGVsLWNvcmUyLTMyPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBhIEJTUCBvcHRpbWl6ZWQgZm9yIHRoZSBDb3JlMiBmYW1pbHkgb2YgQ1BVcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgd2VsbCBhcyBhbGwgQ1BVcyBwcmlvciB0byB0aGUgU2lsdmVybW9udCBjb3JlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbnRlbC1jb3JlaTctNjQ8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIGEgQlNQIG9wdGltaXplZCBmb3IgTmVoYWxlbSBhbmQgbGF0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmUgYW5kIFhlb24gQ1BVcyBhcyB3ZWxsIGFzIFNpbHZlcm1vbnQgYW5kIGxhdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9tIENQVXMsIHN1Y2ggYXMgdGhlIEJheXRyYWlsIFNvQ3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmludGVsLXF1YXJrPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBhIEJTUCBvcHRpbWl6ZWQgZm9yIHRoZSBJbnRlbCBHYWxpbGVvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW4xICZhbXA7IGdlbjIgZGV2ZWxvcG1lbnQgYm9hcmRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+V2hlbiB5b3Ugc2V0IHVwIGEgbGF5ZXIgZm9yIGEgbmV3IEJTUCwgeW91IHNob3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93IGEgc3RhbmRhcmQgbGF5b3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBsYXlvdXQgaXMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2JzcC1maWxlbGF5b3V0Jz5FeGFtcGxlIEZpbGVzeXN0ZW0gTGF5b3V0PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGUgc3RhbmRhcmQgbGF5b3V0LCB5b3Ugd2lsbCBub3RpY2UgYSBzdWdnZXN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSBmb3IgcmVjaXBlcyBhbmQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VlIHRoZSBzdGFuZGFyZCBsYXlvdXQgZm9yIGEgQlNQIGJ5IGV4YW1pbmluZworICAgICAgICAgICAgICAgICAgICAgICAgYW55IHN1cHBvcnRlZCBCU1AgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+IGxheWVyIGluc2lkZSB0aGUgU291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPk1ha2UgQ29uZmlndXJhdGlvbiBDaGFuZ2VzIHRvIFlvdXIgTmV3IEJTUAorICAgICAgICAgICAgICAgICAgICAgICAgTGF5ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzdGFuZGFyZCBCU1AgbGF5ZXIgc3RydWN0dXJlIG9yZ2FuaXplcyB0aGUgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIGVkaXQgaW4gPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldmVyYWwgPGZpbGVuYW1lPnJlY2lwZXMtKjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyB3aXRoaW4gdGhlIEJTUCBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gY2hhbmdlcyBpZGVudGlmeSB3aGVyZSB5b3VyIG5ldyBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgaXMgb24gdGhlIGxvY2FsIHN5c3RlbSBhbmQgaWRlbnRpZnkgd2hpY2gga2VybmVsIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGdvaW5nIHRvIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHJ1biB0aGUgPGZpbGVuYW1lPnlvY3RvLWJzcDwvZmlsZW5hbWU+IHNjcmlwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBhcmUgYWJsZSB0byBpbnRlcmFjdGl2ZWx5IGNvbmZpZ3VyZSBtYW55IHRoaW5ncyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBCU1AgKGUuZy4ga2V5Ym9hcmQsIHRvdWNoc2NyZWVuLCBhbmQgc28gZm9ydGgpLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5NYWtlIFJlY2lwZSBDaGFuZ2VzIHRvIFlvdXIgTmV3IEJTUAorICAgICAgICAgICAgICAgICAgICAgICAgTGF5ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJlY2lwZSBjaGFuZ2VzIGluY2x1ZGUgYWx0ZXJpbmcgcmVjaXBlcworICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlcyksIHJlbW92aW5nIHJlY2lwZXMgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBkbyBub3QgdXNlLCBhbmQgYWRkaW5nIG5ldyByZWNpcGVzIG9yIGFwcGVuZCBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikgdGhhdCB5b3UgbmVlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCB5b3VyIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5QcmVwYXJlIGZvciB0aGUgQnVpbGQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgbWFkZSBhbGwgdGhlIGNoYW5nZXMgdG8geW91ciBCU1AgbGF5ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICB0aGVyZSByZW1haW5zIGEgZmV3IHRoaW5ncyB5b3UgbmVlZCB0byBkbyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGluIG9yZGVyIGZvciBpdCB0byBjcmVhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBnZXQgdGhlIGJ1aWxkIGVudmlyb25tZW50IHJlYWR5IGJ5CisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2luZyBhbiBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudjwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHlvdSBuZWVkIHRvIGJlIHN1cmUgdHdvIGtleSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcyBhcmUgY29uZmlndXJlZCBhcHByb3ByaWF0ZWx5OiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IG1ha2UgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXdhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mIHlvdXIgbmV3IGxheWVyLgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2VuYWJsaW5nLXlvdXItbGF5ZXInPkVuYWJsaW5nIFlvdXIgTGF5ZXI8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGxldCB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICBrbm93IGFib3V0IHlvdXIgbmV3IGxheWVyLjwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGVudGlyZSBwcm9jZXNzIGZvciBidWlsZGluZyBhbiBpbWFnZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnZpZXdlZCBpbiB0aGUgc2VjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjcXMtYnVpbGRpbmctaW1hZ2VzJz5CdWlsZGluZyBJbWFnZXM8L3VsaW5rPiIgc2VjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbWlnaHQgd2FudCB0byByZWZlcmVuY2UgdGhpcyBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+QnVpbGQgdGhlIEltYWdlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRoZSBCaXRCYWtlIHRvb2wKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJ1aWxkIGltYWdlcyBiYXNlZCBvbiB0aGUgdHlwZSBvZiBpbWFnZSB5b3Ugd2FudCB0bworICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQml0QmFrZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsnPkJpdEJha2UgVXNlciBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGJ1aWxkIHByb2Nlc3Mgc3VwcG9ydHMgc2V2ZXJhbCB0eXBlcyBvZgorICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzIHRvIHNhdGlzZnkgZGlmZmVyZW50IG5lZWRzLgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1pbWFnZXMnPkltYWdlczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgY2hhcHRlciBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gb24gc3VwcG9ydGVkIGltYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKwogICAgICAgICA8c2VjdGlvbiBpZD0ncmVxdWlyZW1lbnRzLWFuZC1yZWNvbW1lbmRhdGlvbnMtZm9yLXJlbGVhc2VkLWJzcHMnPgogICAgICAgICAgICAgPHRpdGxlPlJlcXVpcmVtZW50cyBhbmQgUmVjb21tZW5kYXRpb25zIGZvciBSZWxlYXNlZCBCU1BzPC90aXRsZT4KIApAQCAtNzMyLDI0ICsxMDcwLDI4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGd1aWRlbGluZXMgb24gY3JlYXRpbmcgYSBsYXllciB0aGF0IG1lZXRzIHRoZXNlIGJhc2UgcmVxdWlyZW1lbnRzLCBzZWUgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2JzcC1sYXllcnMnPkJTUCBMYXllcnM8L2xpbms+IiBhbmQgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycyc+VW5kZXJzdGFuZGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBDcmVhdGluZyBMYXllcnMiPC91bGluaz4gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBDcmVhdGluZyBMYXllcnMiPC91bGluaz4gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSByZXF1aXJlbWVudHMgaW4gdGhpcyBzZWN0aW9uIGFwcGx5IHJlZ2FyZGxlc3Mgb2YgaG93IHlvdQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgYSBCU1AuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBjb25zdWx0IHRoZSBwYWNrYWdpbmcgYW5kIGRpc3RyaWJ1dGlvbiBndWlkZWxpbmVzIGZvciB5b3VyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgcmVsZWFzZSBwcm9jZXNzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIG9mIHBhY2thZ2luZyBhbmQgZGlzdHJpYnV0aW9uIHJlcXVpcmVtZW50cywgc2VlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPSdodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL1RoaXJkX1BhcnR5X0JTUF9SZWxlYXNlX1Byb2Nlc3MnPlRoaXJkIFBhcnR5IEJTUCBSZWxlYXNlIFByb2Nlc3M8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWtpIHBhZ2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lraSBwYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSByZXF1aXJlbWVudHMgZm9yIHRoZSBCU1AgYXMgaXQgaXMgbWFkZSBhdmFpbGFibGUgdG8gYSBkZXZlbG9wZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgY29tcGxldGVseSBpbmRlcGVuZGVudCBvZiB0aGUgcmVsZWFzZWQgZm9ybSBvZiB0aGUgQlNQLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgQlNQIE1ldGFkYXRhIGNhbiBiZSBjb250YWluZWQgd2l0aGluIGEgR2l0IHJlcG9zaXRvcnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgY291bGQgaGF2ZSBhIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgY29tcGxldGVseSBkaWZmZXJlbnQgZnJvbSB3aGF0IGFwcGVhcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgb2ZmaWNpYWxseSByZWxlYXNlZCBCU1AgbGF5ZXIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIG9mZmljaWFsbHkgcmVsZWFzZWQgQlNQIGxheWVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkl0IGlzIG5vdCByZXF1aXJlZCB0aGF0IHNwZWNpZmljIHBhY2thZ2VzIG9yIHBhY2thZ2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmljYXRpb25zIGV4aXN0IGluIHRoZSBCU1AgbGF5ZXIsIGJleW9uZCB0aGUgcmVxdWlyZW1lbnRzIGZvciBnZW5lcmFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxpYW5jZSB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBubyByZXF1aXJlbWVudCBleGlzdHMgZGljdGF0aW5nIHRoYXQgYSBzcGVjaWZpYyBrZXJuZWwgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWwgdmVyc2lvbiBiZSB1c2VkIGluIGEgZ2l2ZW4gQlNQLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbCB2ZXJzaW9uIGJlIHVzZWQgaW4gYSBnaXZlbiBCU1AuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgICAgICAgICAgIDwvcGFyYT4KIApAQCAtNzc2LDcgKzExMTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZWNpcGVzLSo8L2ZpbGVuYW1lPiBzdWJkaXJlY3RvcnkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIDxmaWxlbmFtZT5yZWNpcGVzLnR4dDwvZmlsZW5hbWU+IGluIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gZGlyZWN0b3J5IG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgaW4gdGhlIE9wZW5FbWJlZGRlZCBDb3JlIExheWVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5vcGVuZW1iZWRkZWQtY29yZTwvZmlsZW5hbWU+KSBmb3VuZCBhdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZS90cmVlL21ldGEnPjwvdWxpbms+LgpAQCAtODMyLDggKzExNzQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgcGVyc29uIHRvIHdob20gcGF0Y2hlcyBhbmQgcXVlc3Rpb25zIHNob3VsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgc2VudC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZmluZCB0aGUgcmlnaHQgcGVyc29uLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjaG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhIENoYW5nZTwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjaG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+U3VibWl0dGluZyBhIENoYW5nZSB0byB0aGUgWW9jdG8gUHJvamVjdDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluc3RydWN0aW9ucyBvbiBob3cgdG8gYnVpbGQgdGhlIEJTUCB1c2luZyB0aGUgQlNQCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci48L3BhcmE+PC9saXN0aXRlbT4KQEAgLTkzNyw3ICsxMjc5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBmb3IgdGhlIG1vZGlmaWVkIHJlY2lwZS4KICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHVzaW5nIGFwcGVuZCBmaWxlcywgc2VlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdXNpbmctYmJhcHBlbmQtZmlsZXMnPlVzaW5nIC5iYmFwcGVuZCBGaWxlcyBpbiBZb3VyIExheWVyPC91bGluaz4iCi0gICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgogICAgICAgICAgICAgICAgICAgICAgICBFbnN1cmUgeW91ciBkaXJlY3Rvcnkgc3RydWN0dXJlIGluIHRoZSBCU1AgbGF5ZXIKQEAgLTExNDQsNyArMTQ4Niw3IEBACiAKICAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgICAgRGVzaWduZWQgdG8gaGF2ZSBhICBjb21tYW5kIGludGVyZmFjZSBzb21ld2hhdCBsaWtlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2dpdCc+R2l0PC91bGluaz4sIGVhY2gKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjZ2l0Jz5HaXQ8L3VsaW5rPiwgZWFjaAogICAgICAgICAgICAgICAgICAgICB0b29sIGlzIHN0cnVjdHVyZWQgYXMgYSBzZXQgb2Ygc3ViLWNvbW1hbmRzIHVuZGVyIGEKICAgICAgICAgICAgICAgICAgICAgdG9wLWxldmVsIGNvbW1hbmQuCiAgICAgICAgICAgICAgICAgICAgIFRoZSB0b3AtbGV2ZWwgY29tbWFuZCAoPGZpbGVuYW1lPnlvY3RvLWJzcDwvZmlsZW5hbWU+CkBAIC0xMTU1LDcgKzE0OTcsNyBAQAogCiAgICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIEJvdGggdG9vbHMgcmVzaWRlIGluIHRoZSA8ZmlsZW5hbWU+c2NyaXB0cy88L2ZpbGVuYW1lPiBzdWJkaXJlY3RvcnkKLSAgICAgICAgICAgICAgICAgICAgb2YgdGhlIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KICAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0byB1c2UgdGhlIHNjcmlwdHMsIHlvdSBtdXN0IDxmaWxlbmFtZT5zb3VyY2U8L2ZpbGVuYW1lPiB0aGUKICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQganVzdCBhcyB5b3Ugd291bGQgd2hlbiBpbnZva2luZyBhIGJ1aWxkOgogICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CkBAIC0xMjUxLDExICsxNTkzLDExIEBACiAgICAgICAgICAgICAgICAgICAgIG5lY2Vzc2FyeSB0byBjcmVhdGUgYSBCU1AgYW5kIHBlcmZvcm0gYmFzaWMga2VybmVsIG1haW50ZW5hbmNlIG9uIHRoYXQgQlNQIHVzaW5nCiAgICAgICAgICAgICAgICAgICAgIHRoZSB0b29scy4KICAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gdXNlIHRoZSA8ZmlsZW5hbWU+eW9jdG8tbGF5ZXI8L2ZpbGVuYW1lPiB0b29sIHRvIGNyZWF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHVzZSB0aGUgPGZpbGVuYW1lPmJpdGJha2UtbGF5ZXJzPC9maWxlbmFtZT4gc2NyaXB0IHRvIGNyZWF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgYSAiZ2VuZXJpYyIgbGF5ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhpcyB0b29sLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY3JlYXRpbmctYS1nZW5lcmFsLWxheWVyLXVzaW5nLXRoZS15b2N0by1sYXllci1zY3JpcHQnPkNyZWF0aW5nIGEgR2VuZXJhbCBMYXllciBVc2luZyB0aGUgeW9jdG8tbGF5ZXIgU2NyaXB0PC91bGluaz4iCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEd1aWRlLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMgc2NyaXB0IHRvIGNyZWF0ZSBhIGxheWVyLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY3JlYXRpbmctYS1nZW5lcmFsLWxheWVyLXVzaW5nLXRoZS1iaXRiYWtlLWxheWVycy1zY3JpcHQnPkNyZWF0aW5nIGEgR2VuZXJhbCBMYXllciBVc2luZyB0aGUgPGZpbGVuYW1lPmJpdGJha2UtbGF5ZXJzPC9maWxlbmFtZT4gU2NyaXB0PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICAgICAgICAgIDwvcGFyYT4KIApAQCAtMTM4NCw4ICsxNzI2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgZG8gd2FudCB0byB1c2UuPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TmV4dCwgdGhlIHNjcmlwdCBhc2tzIHdoZXRoZXIgeW91IHdvdWxkIGxpa2UgdG8gaGF2ZSBhIG5ldwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaCBjcmVhdGVkIGVzcGVjaWFsbHkgZm9yIHlvdXIgQlNQIGluIHRoZSBsb2NhbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2xvY2FsLWtlcm5lbC1maWxlcyc+TGludXggWW9jdG8gS2VybmVsPC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeSAuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGludXggWW9jdG8gS2VybmVsIEdpdCByZXBvc2l0b3J5IC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBub3QsIHRoZW4gdGhlIHNjcmlwdCByZS11c2VzIGFuIGV4aXN0aW5nIGJyYW5jaC48L3BhcmE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SW4gdGhpcyBleGFtcGxlLCB0aGUgZGVmYXVsdCAob3IgInllcyIpIGlzIGFjY2VwdGVkLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRodXMsIGEgbmV3IGJyYW5jaCBpcyBjcmVhdGVkIGZvciB0aGUgQlNQIHJhdGhlciB0aGFuIHVzaW5nIGEgY29tbW9uLCBzaGFyZWQKQEAgLTE0MDYsNyArMTc0Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgYXJlIGFjY2VwdGVkIGZvciBlYWNoLjwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJ5IGRlZmF1bHQsIHRoZSBzY3JpcHQgY3JlYXRlcyB0aGUgbmV3IEJTUCBMYXllciBpbiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPnBva3kvYnVpbGQ8L2ZpbGVuYW1lPikuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9ic3AtZ3VpZGUvZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2ZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjgyYTFmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2ZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtY29tbW9uLXRhc2tzLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1jb21tb24tdGFza3MueG1sCmluZGV4IDU5OGY4NzcuLjAwODE3MzggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1jb21tb24tdGFza3MueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1jb21tb24tdGFza3MueG1sCkBAIC0xOCw3ICsxOCw4IEBACiAKICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzdXBwb3J0cyBvcmdhbml6aW5nCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSdtZXRhZGF0YSc+TWV0YWRhdGE8L2xpbms+IGludG8gbXVsdGlwbGUgbGF5ZXJzLgorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4gaW50bworICAgICAgICAgICAgbXVsdGlwbGUgbGF5ZXJzLgogICAgICAgICAgICAgTGF5ZXJzIGFsbG93IHlvdSB0byBpc29sYXRlIGRpZmZlcmVudCB0eXBlcyBvZiBjdXN0b21pemF0aW9ucyBmcm9tCiAgICAgICAgICAgICBlYWNoIG90aGVyLgogICAgICAgICAgICAgWW91IG1pZ2h0IGZpbmQgaXQgdGVtcHRpbmcgdG8ga2VlcCBldmVyeXRoaW5nIGluIG9uZSBsYXllciB3aGVuCkBAIC01OCw3ICs1OSw3IEBACiAgICAgICAgICAgICA8dGl0bGU+TGF5ZXJzPC90aXRsZT4KIAogICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgVGhlIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgogICAgICAgICAgICAgICAgIGNvbnRhaW5zIGJvdGggZ2VuZXJhbCBsYXllcnMgYW5kIEJTUAogICAgICAgICAgICAgICAgIGxheWVycyByaWdodCBvdXQgb2YgdGhlIGJveC4KICAgICAgICAgICAgICAgICBZb3UgY2FuIGVhc2lseSBpZGVudGlmeSBsYXllcnMgdGhhdCBzaGlwIHdpdGggYQpAQCAtMTA3LDcgKzEwOCw3IEBACiAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2NyZWF0aW5nLWEtbmV3LWJzcC1sYXllci11c2luZy10aGUteW9jdG8tYnNwLXNjcmlwdCc+Q3JlYXRpbmcgYSBOZXcgQlNQIExheWVyIFVzaW5nIHRoZSB5b2N0by1ic3AgU2NyaXB0PC91bGluaz4iCiAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkKICAgICAgICAgICAgICAgICBEZXZlbG9wZXIncyBHdWlkZSBhbmQgdGhlCi0gICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLWEtZ2VuZXJhbC1sYXllci11c2luZy10aGUteW9jdG8tbGF5ZXItc2NyaXB0Jz5DcmVhdGluZyBhIEdlbmVyYWwgTGF5ZXIgVXNpbmcgdGhlIHlvY3RvLWxheWVyIFNjcmlwdDwvbGluaz4iCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLWEtZ2VuZXJhbC1sYXllci11c2luZy10aGUtYml0YmFrZS1sYXllcnMtc2NyaXB0Jz5DcmVhdGluZyBhIEdlbmVyYWwgTGF5ZXIgVXNpbmcgdGhlIDxmaWxlbmFtZT5iaXRiYWtlLWxheWVyczwvZmlsZW5hbWU+IFNjcmlwdDwvbGluaz4iCiAgICAgICAgICAgICAgICAgc2VjdGlvbiBmdXJ0aGVyIGRvd24gaW4gdGhpcyBtYW51YWwuCiAgICAgICAgICAgICA8L3BhcmE+CiAKQEAgLTI1NCwxOTcgKzI1NSwxODIgQEAKICAgICAgICAgPC9zZWN0aW9uPgogCiAgICAgICAgIDxzZWN0aW9uIGlkPSdiZXN0LXByYWN0aWNlcy10by1mb2xsb3ctd2hlbi1jcmVhdGluZy1sYXllcnMnPgotICAgICAgICAgICAgPHRpdGxlPkJlc3QgUHJhY3RpY2VzIHRvIEZvbGxvdyBXaGVuIENyZWF0aW5nIExheWVyczwvdGl0bGU+CisgICAgICAgICAgICA8dGl0bGU+Rm9sbG93aW5nIEJlc3QgUHJhY3RpY2VzIFdoZW4gQ3JlYXRpbmcgTGF5ZXJzPC90aXRsZT4KIAogICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgVG8gY3JlYXRlIGxheWVycyB0aGF0IGFyZSBlYXNpZXIgdG8gbWFpbnRhaW4gYW5kIHRoYXQgd2lsbAogICAgICAgICAgICAgICAgIG5vdCBpbXBhY3QgYnVpbGRzIGZvciBvdGhlciBtYWNoaW5lcywgeW91IHNob3VsZCBjb25zaWRlciB0aGUKLSAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8c2VjdGlvbiBpZD0nYXZvaWQtb3ZlcmxheWluZy1lbnRpcmUtcmVjaXBlcyc+Ci0gICAgICAgICAgICAgICAgPHRpdGxlPkF2b2lkICJPdmVybGF5aW5nIiBFbnRpcmUgUmVjaXBlczwvdGl0bGU+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgQXZvaWQgIm92ZXJsYXlpbmciIGVudGlyZSByZWNpcGVzIGZyb20gb3RoZXIgbGF5ZXJzIGluIHlvdXIKLSAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIGRvIG5vdCBjb3B5IGFuIGVudGlyZSByZWNpcGUgaW50byB5b3VyCi0gICAgICAgICAgICAgICAgICAgIGxheWVyIGFuZCB0aGVuIG1vZGlmeSBpdC4KLSAgICAgICAgICAgICAgICAgICAgUmF0aGVyLCB1c2UgYW4gYXBwZW5kIGZpbGUgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikKLSAgICAgICAgICAgICAgICAgICAgdG8gb3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgb25seSB0aG9zZSBwYXJ0cyBvZiB0aGUgb3JpZ2luYWwgcmVjaXBlIHlvdSBuZWVkIHRvIG1vZGlmeS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdhdm9pZC1kdXBsaWNhdGluZy1pbmNsdWRlLWZpbGVzJz4KLSAgICAgICAgICAgICAgICA8dGl0bGU+QXZvaWQgRHVwbGljYXRpbmcgSW5jbHVkZSBGaWxlczwvdGl0bGU+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgQXZvaWQgZHVwbGljYXRpbmcgaW5jbHVkZSBmaWxlcy4KLSAgICAgICAgICAgICAgICAgICAgVXNlIGFwcGVuZCBmaWxlcyAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KQotICAgICAgICAgICAgICAgICAgICBmb3IgZWFjaCByZWNpcGUKLSAgICAgICAgICAgICAgICAgICAgdGhhdCB1c2VzIGFuIGluY2x1ZGUgZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgT3IsIGlmIHlvdSBhcmUgaW50cm9kdWNpbmcgYSBuZXcgcmVjaXBlIHRoYXQgcmVxdWlyZXMKLSAgICAgICAgICAgICAgICAgICAgdGhlIGluY2x1ZGVkIGZpbGUsIHVzZSB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgb3JpZ2luYWwKLSAgICAgICAgICAgICAgICAgICAgbGF5ZXIgZGlyZWN0b3J5IHRvIHJlZmVyIHRvIHRoZSBmaWxlLgotICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdXNlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZXF1aXJlIHJlY2lwZXMtY29yZS88L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5wYWNrYWdlPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+LzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmZpbGU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiA8ZmlsZW5hbWU+cmVxdWlyZSA8L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5maWxlPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICBJZiB5b3UncmUgZmluZGluZyB5b3UgaGF2ZSB0byBvdmVybGF5IHRoZSBpbmNsdWRlIGZpbGUsCi0gICAgICAgICAgICAgICAgICAgIGl0IGNvdWxkIGluZGljYXRlIGEgZGVmaWNpZW5jeSBpbiB0aGUgaW5jbHVkZSBmaWxlIGluCi0gICAgICAgICAgICAgICAgICAgIHRoZSBsYXllciB0byB3aGljaCBpdCBvcmlnaW5hbGx5IGJlbG9uZ3MuCi0gICAgICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIHlvdSBzaG91bGQgdHJ5IHRvIGFkZHJlc3MgdGhhdAotICAgICAgICAgICAgICAgICAgICBkZWZpY2llbmN5IGluc3RlYWQgb2Ygb3ZlcmxheWluZyB0aGUgaW5jbHVkZSBmaWxlLgotICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIGFkZHJlc3MgdGhpcyBieSBnZXR0aW5nIHRoZQotICAgICAgICAgICAgICAgICAgICBtYWludGFpbmVyIG9mIHRoZSBpbmNsdWRlIGZpbGUgdG8gYWRkIGEgdmFyaWFibGUgb3IKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIHRvIG1ha2UgaXQgZWFzeSB0byBvdmVycmlkZSB0aGUgcGFydHMgbmVlZGluZwotICAgICAgICAgICAgICAgICAgICB0byBiZSBvdmVycmlkZGVuLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS15b3VyLWxheWVycyc+Ci0gICAgICAgICAgICAgICAgPHRpdGxlPlN0cnVjdHVyZSBZb3VyIExheWVyczwvdGl0bGU+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgUHJvcGVyIHVzZSBvZiBvdmVycmlkZXMgd2l0aGluIGFwcGVuZCBmaWxlcyBhbmQgcGxhY2VtZW50Ci0gICAgICAgICAgICAgICAgICAgIG9mIG1hY2hpbmUtc3BlY2lmaWMgZmlsZXMgd2l0aGluIHlvdXIgbGF5ZXIgY2FuIGVuc3VyZSB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIGEgYnVpbGQgaXMgbm90IHVzaW5nIHRoZSB3cm9uZyBNZXRhZGF0YSBhbmQgbmVnYXRpdmVseQotICAgICAgICAgICAgICAgICAgICBpbXBhY3RpbmcgYSBidWlsZCBmb3IgYSBkaWZmZXJlbnQgbWFjaGluZS4KLSAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSBzb21lIGV4YW1wbGVzOgotICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Nb2RpZnlpbmcgVmFyaWFibGVzIHRvIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIERpZmZlcmVudCBNYWNoaW5lOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9zZSB5b3UgaGF2ZSBhIGxheWVyIG5hbWVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtb25lPC9maWxlbmFtZT4gdGhhdCBhZGRzIHN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYnVpbGRpbmcgbWFjaGluZSAib25lIi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbyBkbyBzbywgeW91IHVzZSBhbiBhcHBlbmQgZmlsZSBuYW1lZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNlLWZpbGVzLmJiYXBwZW5kPC9maWxlbmFtZT4gYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlIGEgZGVwZW5kZW5jeSBvbiAiZm9vIiBieSBhbHRlcmluZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGluIHRoZSBmb2xsb3dpbmcgbGlzdDoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+QXZvaWQgIk92ZXJsYXlpbmciIEVudGlyZSBSZWNpcGVzIGZyb20gT3RoZXIgTGF5ZXJzIGluIFlvdXIgQ29uZmlndXJhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIGRvIG5vdCBjb3B5IGFuIGVudGlyZSByZWNpcGUgaW50byB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBsYXllciBhbmQgdGhlbiBtb2RpZnkgaXQuCisgICAgICAgICAgICAgICAgICAgICAgICBSYXRoZXIsIHVzZSBhbiBhcHBlbmQgZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikgdG8gb3ZlcnJpZGUgb25seSB0aG9zZQorICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMgb2YgdGhlIG9yaWdpbmFsIHJlY2lwZSB5b3UgbmVlZCB0byBtb2RpZnkuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkF2b2lkIER1cGxpY2F0aW5nIEluY2x1ZGUgRmlsZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSBhcHBlbmQgZmlsZXMgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBlYWNoIHJlY2lwZSB0aGF0IHVzZXMgYW4gaW5jbHVkZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgT3IsIGlmIHlvdSBhcmUgaW50cm9kdWNpbmcgYSBuZXcgcmVjaXBlIHRoYXQgcmVxdWlyZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbmNsdWRlZCBmaWxlLCB1c2UgdGhlIHBhdGggcmVsYXRpdmUgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbCBsYXllciBkaXJlY3RvcnkgdG8gcmVmZXIgdG8gdGhlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdXNlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVxdWlyZSByZWNpcGVzLWNvcmUvPC9maWxlbmFtZT48cmVwbGFjZWFibGU+cGFja2FnZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi88L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5maWxlPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVxdWlyZSA8L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5maWxlPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91J3JlIGZpbmRpbmcgeW91IGhhdmUgdG8gb3ZlcmxheSB0aGUgaW5jbHVkZSBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgaXQgY291bGQgaW5kaWNhdGUgYSBkZWZpY2llbmN5IGluIHRoZSBpbmNsdWRlIGZpbGUgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYXllciB0byB3aGljaCBpdCBvcmlnaW5hbGx5IGJlbG9uZ3MuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB5b3Ugc2hvdWxkIHRyeSB0byBhZGRyZXNzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmljaWVuY3kgaW5zdGVhZCBvZiBvdmVybGF5aW5nIHRoZSBpbmNsdWRlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIGFkZHJlc3MgdGhpcyBieSBnZXR0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnRhaW5lciBvZiB0aGUgaW5jbHVkZSBmaWxlIHRvIGFkZCBhIHZhcmlhYmxlIG9yCisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgdG8gbWFrZSBpdCBlYXN5IHRvIG92ZXJyaWRlIHRoZSBwYXJ0cyBuZWVkaW5nCisgICAgICAgICAgICAgICAgICAgICAgICB0byBiZSBvdmVycmlkZGVuLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5TdHJ1Y3R1cmUgWW91ciBMYXllcnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFByb3BlciB1c2Ugb2Ygb3ZlcnJpZGVzIHdpdGhpbiBhcHBlbmQgZmlsZXMgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQgb2YgbWFjaGluZS1zcGVjaWZpYyBmaWxlcyB3aXRoaW4geW91ciBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGVuc3VyZSB0aGF0IGEgYnVpbGQgaXMgbm90IHVzaW5nIHRoZSB3cm9uZyBNZXRhZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5lZ2F0aXZlbHkgaW1wYWN0aW5nIGEgYnVpbGQgZm9yIGEgZGlmZmVyZW50CisgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSBzb21lIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5Nb2RpZnkgVmFyaWFibGVzIHRvIFN1cHBvcnQgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaWZmZXJlbnQgTWFjaGluZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3NlIHlvdSBoYXZlIGEgbGF5ZXIgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtb25lPC9maWxlbmFtZT4gdGhhdCBhZGRzIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGJ1aWxkaW5nIG1hY2hpbmUgIm9uZSIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGRvIHNvLCB5b3UgdXNlIGFuIGFwcGVuZCBmaWxlIG5hbWVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNlLWZpbGVzLmJiYXBwZW5kPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZSBhIGRlcGVuZGVuY3kgb24gImZvbyIgYnkgYWx0ZXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgREVQRU5EUyA9ICJmb28iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZXBlbmRlbmN5IGlzIGNyZWF0ZWQgZHVyaW5nIGFueSBidWlsZCB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXMgdGhlIGxheWVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtb25lPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgeW91IG1pZ2h0IG5vdCB3YW50IHRoaXMgZGVwZW5kZW5jeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhbGwgbWFjaGluZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGFyZSBidWlsZGluZyBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lICJ0d28iIGJ1dCB5b3VyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGhhcyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1vbmU8L2ZpbGVuYW1lPiBsYXllciBpbmNsdWRlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEdXJpbmcgdGhlIGJ1aWxkLCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmFzZS1maWxlczwvZmlsZW5hbWU+IGZvciBtYWNoaW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInR3byIgd2lsbCBhbHNvIGhhdmUgdGhlIGRlcGVuZGVuY3kgb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Zm9vPC9maWxlbmFtZT4uPC9wYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRvIG1ha2Ugc3VyZSB5b3VyIGNoYW5nZXMgYXBwbHkgb25seSB3aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmcgbWFjaGluZSAib25lIiwgdXNlIGEgbWFjaGluZSBvdmVycmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4gc3RhdGVtZW50OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVwZW5kZW5jeSBpcyBjcmVhdGVkIGR1cmluZyBhbnkgYnVpbGQgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcyB0aGUgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtb25lPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBtaWdodCBub3Qgd2FudCB0aGlzIGRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFsbCBtYWNoaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGFyZSBidWlsZGluZyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZSAidHdvIiBidXQgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUgaGFzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1vbmU8L2ZpbGVuYW1lPiBsYXllciBpbmNsdWRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHVyaW5nIHRoZSBidWlsZCwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNlLWZpbGVzPC9maWxlbmFtZT4gZm9yIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR3byIgd2lsbCBhbHNvIGhhdmUgdGhlIGRlcGVuZGVuY3kgb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvbzwvZmlsZW5hbWU+LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VG8gbWFrZSBzdXJlIHlvdXIgY2hhbmdlcyBhcHBseSBvbmx5IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmcgbWFjaGluZSAib25lIiwgdXNlIGEgbWFjaGluZSBvdmVycmlkZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSA8ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+IHN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICBERVBFTkRTX29uZSA9ICJmb28iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgZm9sbG93IHRoZSBzYW1lIHN0cmF0ZWd5IHdoZW4gdXNpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+IGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5fcHJlcGVuZDwvZmlsZW5hbWU+IG9wZXJhdGlvbnM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgZm9sbG93IHRoZSBzYW1lIHN0cmF0ZWd5IHdoZW4gdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9hcHBlbmQ8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9wcmVwZW5kPC9maWxlbmFtZT4gb3BlcmF0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICBERVBFTkRTX2FwcGVuZF9vbmUgPSAiIGZvbyIKICAgICAgREVQRU5EU19wcmVwZW5kX29uZSA9ICJmb28gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcyBhbiBhY3R1YWwgZXhhbXBsZSwgaGVyZSdzIGEgbGluZSBmcm9tIHRoZSByZWNpcGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZ251dGxzLCB3aGljaCBhZGRzIGRlcGVuZGVuY2llcyBvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmdwLXN0YW5kYWxvbmUiIHdoZW4gYnVpbGRpbmcgd2l0aCB0aGUgbXVzbCBDCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXMgYW4gYWN0dWFsIGV4YW1wbGUsIGhlcmUncyBhIGxpbmUgZnJvbSB0aGUgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBnbnV0bHMsIHdoaWNoIGFkZHMgZGVwZW5kZW5jaWVzIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmdwLXN0YW5kYWxvbmUiIHdoZW4gYnVpbGRpbmcgd2l0aCB0aGUgbXVzbCBDCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgREVQRU5EU19hcHBlbmRfbGliYy1tdXNsID0gIiBhcmdwLXN0YW5kYWxvbmUiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdm9pZGluZyAiKz0iIGFuZCAiPSsiIGFuZCB1c2luZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLXNwZWNpZmljCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5fYXBwZW5kPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5fcHJlcGVuZDwvZmlsZW5hbWU+IG9wZXJhdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgcmVjb21tZW5kZWQgYXMgd2VsbC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBsYWNlIE1hY2hpbmUtU3BlY2lmaWMgRmlsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBNYWNoaW5lLVNwZWNpZmljIExvY2F0aW9uczo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IGhhdmUgYSBiYXNlIHJlY2lwZSwgc3VjaCBhcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNlLWZpbGVzLmJiPC9maWxlbmFtZT4sIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyBhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCB0byBhIGZpbGUsIHlvdSBjYW4gdXNlIGFuIGFwcGVuZCBmaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gY2F1c2UgdGhlIGJ1aWxkIHRvIHVzZSB5b3VyIG93biB2ZXJzaW9uIG9mCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpbGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGFuIGFwcGVuZCBmaWxlIGluIHlvdXIgbGF5ZXIgYXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1vbmUvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy5iYmFwcGVuZDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bGQgZXh0ZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFU0VYVFJBUEFUSFMnPjxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdm9pZGluZyAiKz0iIGFuZCAiPSsiIGFuZCB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZS1zcGVjaWZpYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9hcHBlbmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5fcHJlcGVuZDwvZmlsZW5hbWU+IG9wZXJhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHJlY29tbWVuZGVkIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+UGxhY2UgTWFjaGluZS1TcGVjaWZpYyBGaWxlcyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lLVNwZWNpZmljIExvY2F0aW9uczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBoYXZlIGEgYmFzZSByZWNpcGUsIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2UtZmlsZXMuYmI8L2ZpbGVuYW1lPiwgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50IHRvIGEgZmlsZSwgeW91IGNhbiB1c2UgYW4gYXBwZW5kIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gY2F1c2UgdGhlIGJ1aWxkIHRvIHVzZSB5b3VyIG93biB2ZXJzaW9uIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYW4gYXBwZW5kIGZpbGUgaW4geW91ciBsYXllciBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1vbmUvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy5iYmFwcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdWxkIGV4dGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgIEZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7QlBOfToiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBmb3IgbWFjaGluZSAib25lIiB3aWxsIHBpY2sgdXAgeW91cgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUtc3BlY2lmaWMgZmlsZSBhcyBsb25nIGFzIHlvdSBoYXZlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1vbmUvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy88L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgYXJlIGJ1aWxkaW5nIGZvciBhIGRpZmZlcmVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgYW5kIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSBpbmNsdWRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bWV0YS1vbmU8L2ZpbGVuYW1lPiBsYXllciBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbG9jYXRpb24gb2YgeW91ciBtYWNoaW5lLXNwZWNpZmljIGZpbGUgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlyc3QgbG9jYXRpb24gd2hlcmUgdGhhdCBmaWxlIGlzIGZvdW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW5nIHRvIDxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZHMgZm9yIGFsbCBtYWNoaW5lcyB3aWxsIGFsc28gdXNlIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLXNwZWNpZmljIGZpbGUuPC9wYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjYW4gbWFrZSBzdXJlIHRoYXQgYSBtYWNoaW5lLXNwZWNpZmljCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBpcyB1c2VkIGZvciBhIHBhcnRpY3VsYXIgbWFjaGluZSBieSBwdXR0aW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpbGUgaW4gYSBzdWJkaXJlY3Rvcnkgc3BlY2lmaWMgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgcmF0aGVyIHRoYW4gcGxhY2luZyB0aGUgZmlsZSBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9uZS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzLzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgc2hvd24gYWJvdmUsIHB1dCBpdCBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9uZS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL29uZS88L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3Qgb25seSBkb2VzIHRoaXMgbWFrZSBzdXJlIHRoZSBmaWxlIGlzIHVzZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5IHdoZW4gYnVpbGRpbmcgZm9yIG1hY2hpbmUgIm9uZSIsIGJ1dCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBwcm9jZXNzIGxvY2F0ZXMgdGhlIGZpbGUgbW9yZSBxdWlja2x5LjwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JbiBzdW1tYXJ5LCB5b3UgbmVlZCB0byBwbGFjZSBhbGwgZmlsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VkIGZyb20gPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgbWFjaGluZS1zcGVjaWZpYyBzdWJkaXJlY3Rvcnkgd2l0aGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyIGluIG9yZGVyIHRvIHJlc3RyaWN0IHRob3NlIGZpbGVzIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZS1zcGVjaWZpYyBidWlsZHMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J290aGVyLXJlY29tbWVuZGF0aW9ucyc+Ci0gICAgICAgICAgICAgICAgPHRpdGxlPk90aGVyIFJlY29tbWVuZGF0aW9uczwvdGl0bGU+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgV2UgYWxzbyByZWNvbW1lbmQgdGhlIGZvbGxvd2luZzoKLSAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JZiB5b3Ugd2FudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IENvbXBhdGliaWxpdHkgbG9nbyB3aXRoIHlvdXIgbGF5ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgeW91ciBsYXllciwgcGVyZm9ybSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwcyB0byBhcHBseSBmb3IgY29tcGF0aWJpbGl0eS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J21ha2luZy1zdXJlLXlvdXItbGF5ZXItaXMtY29tcGF0aWJsZS13aXRoLXlvY3RvLXByb2plY3QnPk1ha2luZyBTdXJlIFlvdXIgTGF5ZXIgaXMgQ29tcGF0aWJsZSBXaXRoIFlvY3RvIFByb2plY3Q8L2xpbms+IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U3RvcmUgY3VzdG9tIGxheWVycyBpbiBhIEdpdCByZXBvc2l0b3J5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB1c2VzIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLTxyZXBsYWNlYWJsZT5sYXllcl9uYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiBmb3JtYXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xvbmUgdGhlIHJlcG9zaXRvcnkgYWxvbmdzaWRlIG90aGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBkaXJlY3RvcmllcyBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIHRoZXNlIHJlY29tbWVuZGF0aW9ucyBrZWVwcyB5b3VyIFNvdXJjZSBEaXJlY3RvcnkgYW5kCi0gICAgICAgICAgICAgICAgICAgICBpdHMgY29uZmlndXJhdGlvbiBlbnRpcmVseSBpbnNpZGUgdGhlIFlvY3RvIFByb2plY3QncyBjb3JlCi0gICAgICAgICAgICAgICAgICAgICBiYXNlLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgZm9yIG1hY2hpbmUgIm9uZSIgd2lsbCBwaWNrIHVwIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZS1zcGVjaWZpYyBmaWxlIGFzIGxvbmcgYXMgeW91IGhhdmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtb25lL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSBhcmUgYnVpbGRpbmcgZm9yIGEgZGlmZmVyZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW5jbHVkZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5tZXRhLW9uZTwvZmlsZW5hbWU+IGxheWVyIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbG9jYXRpb24gb2YgeW91ciBtYWNoaW5lLXNwZWNpZmljIGZpbGUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpcnN0IGxvY2F0aW9uIHdoZXJlIHRoYXQgZmlsZSBpcyBmb3VuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NvcmRpbmcgdG8gPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZHMgZm9yIGFsbCBtYWNoaW5lcyB3aWxsIGFsc28gdXNlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZS1zcGVjaWZpYyBmaWxlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IGNhbiBtYWtlIHN1cmUgdGhhdCBhIG1hY2hpbmUtc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBpcyB1c2VkIGZvciBhIHBhcnRpY3VsYXIgbWFjaGluZSBieSBwdXR0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaWxlIGluIGEgc3ViZGlyZWN0b3J5IHNwZWNpZmljIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgcmF0aGVyIHRoYW4gcGxhY2luZyB0aGUgZmlsZSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1vbmUvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy88L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBzaG93biBhYm92ZSwgcHV0IGl0IGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9uZS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL29uZS88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90IG9ubHkgZG9lcyB0aGlzIG1ha2Ugc3VyZSB0aGUgZmlsZSBpcyB1c2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHkgd2hlbiBidWlsZGluZyBmb3IgbWFjaGluZSAib25lIiwgYnV0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBwcm9jZXNzIGxvY2F0ZXMgdGhlIGZpbGUgbW9yZSBxdWlja2x5LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SW4gc3VtbWFyeSwgeW91IG5lZWQgdG8gcGxhY2UgYWxsIGZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZWQgZnJvbSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgbWFjaGluZS1zcGVjaWZpYyBzdWJkaXJlY3Rvcnkgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllciBpbiBvcmRlciB0byByZXN0cmljdCB0aG9zZSBmaWxlcyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLXNwZWNpZmljIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+UGVyZm9ybSBTdGVwcyB0byBBcHBseSBmb3IgWW9jdG8gUHJvamVjdCBDb21wYXRpYmlsaXR5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgQ29tcGF0aWJpbGl0eSBsb2dvIHdpdGggeW91ciBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgb3IgYXBwbGljYXRpb24gdGhhdCB1c2VzIHlvdXIgbGF5ZXIsIHBlcmZvcm0gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBzdGVwcyB0byBhcHBseSBmb3IgY29tcGF0aWJpbGl0eS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdtYWtpbmctc3VyZS15b3VyLWxheWVyLWlzLWNvbXBhdGlibGUtd2l0aC15b2N0by1wcm9qZWN0Jz5NYWtpbmcgU3VyZSBZb3VyIExheWVyIGlzIENvbXBhdGlibGUgV2l0aCBZb2N0byBQcm9qZWN0PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkZvbGxvdyB0aGUgTGF5ZXIgTmFtaW5nIENvbnZlbnRpb246PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JlIGN1c3RvbSBsYXllcnMgaW4gYSBHaXQgcmVwb3NpdG9yeSB0aGF0IHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLTxyZXBsYWNlYWJsZT5sYXllcl9uYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5Hcm91cCBZb3VyIExheWVycyBMb2NhbGx5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBDbG9uZSB5b3VyIHJlcG9zaXRvcnkgYWxvbmdzaWRlIG90aGVyIGNsb25lZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBkaXJlY3RvcmllcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvc2VjdGlvbj4KIAogICAgICAgICA8c2VjdGlvbiBpZD0nbWFraW5nLXN1cmUteW91ci1sYXllci1pcy1jb21wYXRpYmxlLXdpdGgteW9jdG8tcHJvamVjdCc+CkBAIC00NTYsNjUgKzQ0Miw3NCBAQAogICAgICAgICAgICAgICAgIGV4aXN0aW5nIFlvY3RvIFByb2plY3QgbGF5ZXJzIChpLmUuIHRoZSBsYXllciBpcyBjb21wYXRpYmxlCiAgICAgICAgICAgICAgICAgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCkuCiAgICAgICAgICAgICAgICAgRW5zdXJpbmcgY29tcGF0aWJpbGl0eSBtYWtlcyB0aGUgbGF5ZXIgZWFzeSB0byBiZSBjb25zdW1lZAotICAgICAgICAgICAgICAgIGJ5IG90aGVycyBpbiB0aGUgWW9jdG8gUHJvamVjdCBjb21tdW5pdHkgYW5kIGFsbG93cyB5b3UKLSAgICAgICAgICAgICAgICBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgWW9jdG8gUHJvamVjdCBDb21wYXRpYmlsaXR5IGxvZ28uCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFZlcnNpb24gMS4wIG9mIHRoZSBZb2N0byBQcm9qZWN0IENvbXBhdGliaWxpdHkgUHJvZ3JhbSBoYXMKLSAgICAgICAgICAgICAgICBiZWVuIGluIGV4aXN0ZW5jZSBmb3IgYSBudW1iZXIgb2YgcmVsZWFzZXMuCi0gICAgICAgICAgICAgICAgVGhpcyB2ZXJzaW9uIG9mIHRoZSBwcm9ncmFtIGNvbnNpc3RzIG9mIHRoZSBsYXllciBhcHBsaWNhdGlvbgotICAgICAgICAgICAgICAgIHByb2Nlc3MgdGhhdCByZXF1ZXN0cyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgWW9jdG8gUHJvamVjdAotICAgICAgICAgICAgICAgIENvbXBhdGliaWxpdHkgbG9nbyBmb3IgeW91ciBsYXllciBhbmQgYXBwbGljYXRpb24uCi0gICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHZlcnNpb24gMS4wIG9mIHRoZSBmb3JtIGF0Ci0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy93ZWJmb3JtL3lvY3RvLXByb2plY3QtY29tcGF0aWJsZS1yZWdpc3RyYXRpb24nPjwvdWxpbms+LgotICAgICAgICAgICAgICAgIFRvIGJlIGdyYW50ZWQgcGVybWlzc2lvbiB0byB1c2UgdGhlIGxvZ28sIHlvdSBuZWVkIHRvIGJlIGFibGUKLSAgICAgICAgICAgICAgICB0byBhbnN3ZXIgIlllcyIgdG8gdGhlIHF1ZXN0aW9ucyBvciBoYXZlIGFuIGFjY2VwdGFibGUKLSAgICAgICAgICAgICAgICBleHBsYW5hdGlvbiBmb3IgYW55IHF1ZXN0aW9ucyBhbnN3ZXJlZCAiTm8iLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBBIHNlY29uZCB2ZXJzaW9uICgyLjApIG9mIHRoZSBZb2N0byBQcm9qZWN0IENvbXBhdGliaWxpdHkKLSAgICAgICAgICAgICAgICBQcm9ncmFtIGlzIGN1cnJlbnRseSB1bmRlciBkZXZlbG9wbWVudC4KLSAgICAgICAgICAgICAgICBJbmNsdWRlZCBhcyBwYXJ0IG9mIHZlcnNpb24gMi4wIChhbmQgY3VycmVudGx5IGF2YWlsYWJsZSkgaXMKLSAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPnlvY3RvLWNvbXBhdC1sYXllci5weTwvZmlsZW5hbWU+IHNjcmlwdC4KLSAgICAgICAgICAgICAgICBXaGVuIHJ1biBhZ2FpbnN0IGEgbGF5ZXIsIHRoaXMgc2NyaXB0IHRlc3RzIHRoZSBsYXllciBhZ2FpbnN0Ci0gICAgICAgICAgICAgICAgdGlnaHRlciBjb25zdHJhaW50cyBiYXNlZCBvbiBleHBlcmllbmNlcyBvZiBob3cgbGF5ZXJzIGhhdmUKLSAgICAgICAgICAgICAgICB3b3JrZWQgaW4gdGhlIHJlYWwgd29ybGQgYW5kIHdoZXJlIHBpdGZhbGxzIGhhdmUgYmVlbiBmb3VuZC4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgUGFydCBvZiB0aGUgMi4wIHZlcnNpb24gb2YgdGhlIHByb2dyYW0gdGhhdCBpcyBub3QgY3VycmVudGx5Ci0gICAgICAgICAgICAgICAgYXZhaWxhYmxlIGJ1dCBpcyBpbiBkZXZlbG9wbWVudCBpcyBhbiB1cGRhdGVkIGNvbXBhdGliaWxpdHkKLSAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBmb3JtLgotICAgICAgICAgICAgICAgIFRoaXMgdXBkYXRlZCBmb3JtLCBhbW9uZyBvdGhlciBxdWVzdGlvbnMsIHNwZWNpZmljYWxseQotICAgICAgICAgICAgICAgIGFza3MgaWYgeW91ciBsYXllciBoYXMgcGFzc2VkIHRoZSB0ZXN0IHVzaW5nIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0by1jb21wYXQtbGF5ZXIucHk8L2ZpbGVuYW1lPiBzY3JpcHQuCi0gICAgICAgICAgICAgICAgPG5vdGU+PHRpdGxlPlRpcDwvdGl0bGU+Ci0gICAgICAgICAgICAgICAgICAgIEV2ZW4gdGhvdWdoIHRoZSB1cGRhdGVkIGFwcGxpY2F0aW9uIGZvcm0gaXMgY3VycmVudGx5Ci0gICAgICAgICAgICAgICAgICAgIHVuYXZhaWxhYmxlIGZvciB2ZXJzaW9uIDIuMCBvZiB0aGUgWW9jdG8gUHJvamVjdAotICAgICAgICAgICAgICAgICAgICBDb21wYXRpYmlsaXR5IFByb2dyYW0sIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG8tY29tcGF0LWxheWVyLnB5PC9maWxlbmFtZT4gc2NyaXB0IGlzCi0gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBpbiBPRS1Db3JlLgotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgc2NyaXB0IHRvIGFzc2VzcyB0aGUgc3RhdHVzIG9mIHlvdXIKLSAgICAgICAgICAgICAgICAgICAgbGF5ZXJzIGluIGFkdmFuY2Ugb2YgdGhlIDIuMCByZWxlYXNlIG9mIHRoZSBwcm9ncmFtLgorICAgICAgICAgICAgICAgIGJ5IG90aGVycyBpbiB0aGUgWW9jdG8gUHJvamVjdCBjb21tdW5pdHkgYW5kIGNvdWxkIGFsbG93IHlvdQorICAgICAgICAgICAgICAgIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBZb2N0byBQcm9qZWN0IENvbXBhdGlibGUgTG9nby4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgT25seSBZb2N0byBQcm9qZWN0IG1lbWJlciBvcmdhbml6YXRpb25zIGFyZSBwZXJtaXR0ZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgdXNlIHRoZSBZb2N0byBQcm9qZWN0IENvbXBhdGlibGUgTG9nby4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvZ28gaXMgbm90IGF2YWlsYWJsZSBmb3IgZ2VuZXJhbCB1c2UuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gYmVjb21lIGEgWW9jdG8gUHJvamVjdCBtZW1iZXIKKyAgICAgICAgICAgICAgICAgICAgb3JnYW5pemF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsnPllvY3RvIFByb2plY3QgV2Vic2l0ZTwvdWxpbms+LgogICAgICAgICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIHNlY3Rpb24gcHJlc2VudHMgaW5mb3JtYXRpb24gb24gdGhlCi0gICAgICAgICAgICAgICAgdmVyc2lvbiAxLjAgcmVnaXN0cmF0aW9uIGZvcm0gYW5kIG9uIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0by1jb21wYXQtbGF5ZXIucHk8L2ZpbGVuYW1lPiBzY3JpcHQuCisgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgQ29tcGF0aWJpbGl0eSBQcm9ncmFtIGNvbnNpc3RzIG9mIGEgbGF5ZXIKKyAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBwcm9jZXNzIHRoYXQgcmVxdWVzdHMgcGVybWlzc2lvbiB0byB1c2UgdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgUHJvamVjdCBDb21wYXRpYmlsaXR5IExvZ28gZm9yIHlvdXIgbGF5ZXIgYW5kIGFwcGxpY2F0aW9uLgorICAgICAgICAgICAgICAgIFRoZSBwcm9jZXNzIGNvbnNpc3RzIG9mIHR3byBwYXJ0czoKKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBwYXNzaW5nIGEgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPnlvY3RvLWNoZWNrLWxheWVyPC9maWxlbmFtZT4pIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gcnVuIGFnYWluc3QgeW91ciBsYXllciwgdGVzdHMgaXQgYWdhaW5zdAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludHMgYmFzZWQgb24gZXhwZXJpZW5jZXMgb2YgaG93IGxheWVycyBoYXZlCisgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZWQgaW4gdGhlIHJlYWwgd29ybGQgYW5kIHdoZXJlIHBpdGZhbGxzIGhhdmUgYmVlbgorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQuCisgICAgICAgICAgICAgICAgICAgICAgICBHZXR0aW5nIGEgIlBBU1MiIHJlc3VsdCBmcm9tIHRoZSBzY3JpcHQgaXMgcmVxdWlyZWQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsIGNvbXBhdGliaWxpdHkgcmVnaXN0cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbXBsZXRpb24gb2YgYW4gYXBwbGljYXRpb24gYWNjZXB0YW5jZSBmb3JtLCB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBmaW5kIGF0CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3d3dy55b2N0b3Byb2plY3Qub3JnL3dlYmZvcm0veW9jdG8tcHJvamVjdC1jb21wYXRpYmxlLXJlZ2lzdHJhdGlvbic+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgogICAgICAgICAgICAgPC9wYXJhPgogCi0gICAgICAgICAgICA8c2VjdGlvbiBpZD0neW9jdG8tcHJvamVjdC1jb21wYXRpYmlsaXR5LXByb2dyYW0tYXBwbGljYXRpb24nPgotICAgICAgICAgICAgICAgIDx0aXRsZT5Zb2N0byBQcm9qZWN0IENvbXBhdGliaWxpdHkgUHJvZ3JhbSBBcHBsaWNhdGlvbjwvdGl0bGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBiZSBncmFudGVkIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBsb2dvLCB5b3UgbmVlZCB0byBzYXRpc2Z5CisgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBCZSBhYmxlIHRvIGNoZWNrIHRoZSBib3ggaW5kaWNhdGluZyB0aGF0IHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgZ290IGEgIlBBU1MiIHdoZW4gcnVubmluZyB0aGUgc2NyaXB0IGFnYWluc3QgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQW5zd2VyICJZZXMiIHRvIHRoZSBxdWVzdGlvbnMgb24gdGhlIGZvcm0gb3IgaGF2ZSBhbgorICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0YWJsZSBleHBsYW5hdGlvbiBmb3IgYW55IHF1ZXN0aW9ucyBhbnN3ZXJlZCAiTm8iLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGJlIGEgWW9jdG8gUHJvamVjdCBNZW1iZXIgT3JnYW5pemF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIHByZXNlbnRzIGluZm9ybWF0aW9uIG9uIHRoZQorICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbiBmb3JtIGFuZCBvbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG8tY2hlY2stbGF5ZXI8L2ZpbGVuYW1lPiBzY3JpcHQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSd5b2N0by1wcm9qZWN0LWNvbXBhdGlibGUtcHJvZ3JhbS1hcHBsaWNhdGlvbic+CisgICAgICAgICAgICAgICAgPHRpdGxlPllvY3RvIFByb2plY3QgQ29tcGF0aWJsZSBQcm9ncmFtIEFwcGxpY2F0aW9uPC90aXRsZT4KIAogICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDEuMCB2ZXJzaW9uIG9mIHRoZSBmb3JtIHRvIGFwcGx5IGZvciB5b3VyCi0gICAgICAgICAgICAgICAgICAgIGxheWVyJ3MgY29tcGF0aWJpbGl0eSBhcHByb3ZhbC4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBmb3JtIHRvIGFwcGx5IGZvciB5b3VyIGxheWVyJ3MgYXBwcm92YWwuCiAgICAgICAgICAgICAgICAgICAgIFVwb24gc3VjY2Vzc2Z1bCBhcHBsaWNhdGlvbiwgeW91IGNhbiB1c2UgdGhlIFlvY3RvCi0gICAgICAgICAgICAgICAgICAgIFByb2plY3QgQ29tcGF0aWJpbGl0eSBsb2dvIHdpdGggeW91ciBsYXllciBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIFByb2plY3QgQ29tcGF0aWJpbGl0eSBMb2dvIHdpdGggeW91ciBsYXllciBhbmQgdGhlCiAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIHRoYXQgdXNlcyB5b3VyIGxheWVyLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KIApAQCAtNTUyLDI2ICs1NDcsMTggQEAKICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L3NlY3Rpb24+CiAKLSAgICAgICAgICAgIDxzZWN0aW9uIGlkPSd5b2N0by1jb21wYXQtbGF5ZXItcHktc2NyaXB0Jz4KLSAgICAgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPnlvY3RvLWNvbXBhdC1sYXllci5weTwvZmlsZW5hbWU+IFNjcmlwdDwvdGl0bGU+CisgICAgICAgICAgICA8c2VjdGlvbiBpZD0neW9jdG8tY2hlY2stbGF5ZXItc2NyaXB0Jz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPnlvY3RvLWNoZWNrLWxheWVyPC9maWxlbmFtZT4gU2NyaXB0PC90aXRsZT4KIAogICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnlvY3RvLWNvbXBhdC1sYXllci5weTwvZmlsZW5hbWU+IHNjcmlwdCwKLSAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgY3VycmVudGx5IGF2YWlsYWJsZSwgcHJvdmlkZXMgeW91IGEgd2F5IHRvCi0gICAgICAgICAgICAgICAgICAgIGFzc2VzcyBob3cgY29tcGF0aWJsZSB5b3VyIGxheWVyIGlzIHdpdGggdGhlIFlvY3RvCi0gICAgICAgICAgICAgICAgICAgIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+eW9jdG8tY2hlY2stbGF5ZXI8L2ZpbGVuYW1lPiBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXMgeW91IGEgd2F5IHRvIGFzc2VzcyBob3cgY29tcGF0aWJsZSB5b3VyIGxheWVyIGlzCisgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIFlvY3RvIFByb2plY3QuCiAgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgcnVuIHRoaXMgc2NyaXB0IHByaW9yIHRvIHVzaW5nIHRoZSBmb3JtIHRvCiAgICAgICAgICAgICAgICAgICAgIGFwcGx5IGZvciBjb21wYXRpYmlsaXR5IGFzIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMKICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBzY3JpcHQgaXMgcGFydCBvZiB0aGUgMi4wIHJlbGVhc2Ugb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IENvbXBhdGliaWxpdHkgUHJvZ3JhbSwgeW91IGFyZSBub3QKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkIHRvIHN1Y2Nlc3NmdWxseSBydW4geW91ciBsYXllciBhZ2FpbnN0IGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbiBvcmRlciB0byBiZSBncmFudGVkIGNvbXBhdGliaWxpdHkgc3RhdHVzLgotICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaXQgaXMgYSBnb29kIGlkZWEgYXMgaXQgcHJvbW90ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIHdlbGwtYmVoYXZlZCBsYXllcnMgYW5kIGdpdmVzIHlvdSBhbiBpZGVhIG9mIHdoZXJlIHlvdXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyIHN0YW5kcyByZWdhcmRpbmcgY29tcGF0aWJpbGl0eS4KLSAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBhY2hpZXZlIGEgIlBBU1MiIHJlc3VsdCBpbiBvcmRlciB0byBoYXZlCisgICAgICAgICAgICAgICAgICAgIHlvdXIgYXBwbGljYXRpb24gZm9ybSBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgICAgIDxwYXJhPgpAQCAtNTg4LDcgKzU3NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHlvdXIgYnVpbGQgZGlyZWN0b3J5OgogICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgICQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52Ci0gICAgICQgeW9jdG8tY29tcGF0LWxheWVyLnB5IDxyZXBsYWNlYWJsZT55b3VyX2xheWVyX2RpcmVjdG9yeTwvcmVwbGFjZWFibGU+CisgICAgICQgeW9jdG8tY2hlY2stbGF5ZXIgPHJlcGxhY2VhYmxlPnlvdXJfbGF5ZXJfZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT4KICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIHByb3ZpZGUgdGhlIGFjdHVhbCBkaXJlY3RvcnkgZm9yIHlvdXIgbGF5ZXIKICAgICAgICAgICAgICAgICAgICAgYXMgcGFydCBvZiB0aGUgY29tbWFuZC4KQEAgLTY1NSw3ICs2NDIsNyBAQAogICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJMQVlFUlMnPkJCTEFZRVJTPC91bGluaz48L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHlvdXIgPGZpbGVuYW1lPmNvbmYvYmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUsCiAgICAgICAgICAgICAgICAgd2hpY2ggaXMgZm91bmQgaW4gdGhlCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCiAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBlbmFibGUgYSBsYXllciBuYW1lZAogICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW15bGF5ZXI8L2ZpbGVuYW1lPjoKICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CkBAIC03MzYsNyArNzIzLDcgQEAKICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBtYWluIGZvcm1mYWN0b3IgcmVjaXBlIGFuZCBhCiAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBmb3JtZmFjdG9yIGFwcGVuZCBmaWxlIGJvdGggZnJvbSB0aGUKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCiAgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgbWFpbiBmb3JtZmFjdG9yIHJlY2lwZSwgd2hpY2ggaXMgbmFtZWQKICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Zm9ybWZhY3Rvcl8wLjAuYmI8L2ZpbGVuYW1lPiBhbmQgbG9jYXRlZCBpbiB0aGUKICAgICAgICAgICAgICAgICAibWV0YSIgbGF5ZXIgYXQKQEAgLTk3NSwxMjggKzk2MiwxNjMgQEAKICAgICAgLi4uCiAgICAgIEVYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zb21ldGhpbmcgLS1lbmFibGUtc29tZXRoaW5nZWxzZSIKICAgICAgLi4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5sYXllcmluZGV4LWZldGNoPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZldGNoZXMgYSBsYXllciBmcm9tIGEgbGF5ZXIgaW5kZXgsIGFsb25nIHdpdGggaXRzCisgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbnQgbGF5ZXJzLCBhbmQgYWRkcyB0aGUgbGF5ZXJzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvYmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5sYXllcmluZGV4LXNob3ctZGVwZW5kczwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBGaW5kcyBsYXllciBkZXBlbmRlbmNpZXMgZnJvbSB0aGUgbGF5ZXIgaW5kZXguCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5jcmVhdGUtbGF5ZXI8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlcyBhIGJhc2ljIGxheWVyLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvc2VjdGlvbj4KIAotICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmctYS1nZW5lcmFsLWxheWVyLXVzaW5nLXRoZS15b2N0by1sYXllci1zY3JpcHQnPgotICAgICAgICAgICAgPHRpdGxlPkNyZWF0aW5nIGEgR2VuZXJhbCBMYXllciBVc2luZyB0aGUgeW9jdG8tbGF5ZXIgU2NyaXB0PC90aXRsZT4KKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLWEtZ2VuZXJhbC1sYXllci11c2luZy10aGUtYml0YmFrZS1sYXllcnMtc2NyaXB0Jz4KKyAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyBhIEdlbmVyYWwgTGF5ZXIgVXNpbmcgdGhlIDxmaWxlbmFtZT5iaXRiYWtlLWxheWVyczwvZmlsZW5hbWU+IFNjcmlwdDwvdGl0bGU+CiAKICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+eW9jdG8tbGF5ZXI8L2ZpbGVuYW1lPiBzY3JpcHQgc2ltcGxpZmllcworICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Yml0YmFrZS1sYXllcnM8L2ZpbGVuYW1lPiBzY3JpcHQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y3JlYXRlLWxheWVyPC9maWxlbmFtZT4gc3ViY29tbWFuZCBzaW1wbGlmaWVzCiAgICAgICAgICAgICAgICAgY3JlYXRpbmcgYSBuZXcgZ2VuZXJhbCBsYXllci4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIEJTUCBsYXllcnMsIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2JzcC1sYXllcnMnPkJTUCBMYXllcnM8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTcGVjaWZpYyAoQlNQKQotICAgICAgICAgICAgICAgICAgICBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+Tm90ZXM8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBCU1AgbGF5ZXJzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2JzcC1sYXllcnMnPkJTUCBMYXllcnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEJvYXJkIFNwZWNpZmljIChCU1ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iaXRiYWtlLWxheWVyczwvZmlsZW5hbWU+IHNjcmlwdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VzIHRoZSA8ZmlsZW5hbWU+eW9jdG8tbGF5ZXI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdCwgd2hpY2ggaXMgZGVwcmVjYXRlZCBpbiB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuNCByZWxlYXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+eW9jdG8tbGF5ZXI8L2ZpbGVuYW1lPiBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZXMgdG8gZnVuY3Rpb24gYXMgcGFydCBvZiB0aGUgMi40IHJlbGVhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgd2lsbCBiZSByZW1vdmVkIHBvc3QgMi40LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgbW9kZSBvZiB0aGUgc2NyaXB0J3Mgb3BlcmF0aW9uIGlzIHRvIHByb21wdCB5b3UgZm9yCi0gICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGdlbmVyYXRlIHRoZSBsYXllcjoKKyAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBtb2RlIG9mIHRoZSBzY3JpcHQncyBvcGVyYXRpb24gd2l0aCB0aGlzCisgICAgICAgICAgICAgICAgc3ViY29tbWFuZCBpcyB0byBjcmVhdGUgYSBsYXllciB3aXRoIHRoZSBmb2xsb3dpbmc6CiAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBsYXllciBwcmlvcml0eS4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgbGF5ZXIgcHJpb3JpdHkgb2YgNi4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+V2hldGhlciBvciBub3QgdG8gY3JlYXRlIGEgc2FtcGxlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgYQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgogICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGV0aGVyIG9yIG5vdCB0byBjcmVhdGUgYSBzYW1wbGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZCBmaWxlLgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBBIDxmaWxlbmFtZT5yZWNpcGVzLWV4YW1wbGU8L2ZpbGVuYW1lPiBzdWJkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY29udGFpbnMgYSBmdXJ0aGVyIHN1YmRpcmVjdG9yeSBuYW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmV4YW1wbGU8L2ZpbGVuYW1lPiwgd2hpY2ggY29udGFpbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuIDxmaWxlbmFtZT5leGFtcGxlLmJiPC9maWxlbmFtZT4gcmVjaXBlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgPGZpbGVuYW1lID5DT1BZSU5HLk1JVDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgdGhlIGxpY2Vuc2Ugc3RhdGVtZW50IGZvciB0aGUgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc2NyaXB0IGFzc3VtZXMgeW91IHdhbnQgdG8gdXNlIHRoZSBNSVQgbGljZW5zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIHR5cGljYWwgZm9yIG1vc3QgbGF5ZXJzLCBmb3IgdGhlIGNvbnRlbnRzIG9mCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGF5ZXIgaXRzZWxmLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEEgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzIGEgZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmluZyB0aGUgY29udGVudHMgb2YgeW91ciBuZXcgbGF5ZXIuCiAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+eW9jdG8tbGF5ZXIgY3JlYXRlPC9maWxlbmFtZT4gc3ViLWNvbW1hbmQKLSAgICAgICAgICAgICAgICB0byBjcmVhdGUgYSBuZXcgZ2VuZXJhbCBsYXllci4KLSAgICAgICAgICAgICAgICBJbiBpdHMgc2ltcGxlc3QgZm9ybSwgeW91IGNhbiBjcmVhdGUgYSBsYXllciBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIEluIGl0cyBzaW1wbGVzdCBmb3JtLCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgZm9ybQorICAgICAgICAgICAgICAgIHRvIGNyZWF0ZSBhIGxheWVyLgorICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kIGNyZWF0ZXMgYSBsYXllciB3aG9zZSBuYW1lIGNvcnJlc3BvbmRzIHRvCisgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPnlvdXJfbGF5ZXJfbmFtZTwvcmVwbGFjZWFibGU+IGluIHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5OgogICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCB5b2N0by1sYXllciBjcmVhdGUgbXlsYXllcgorICAgICAkIGJpdGJha2UtbGF5ZXJzIGNyZWF0ZS1sYXllciA8cmVwbGFjZWFibGU+eW91cl9sYXllcl9uYW1lPC9yZXBsYWNlYWJsZT4KICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIGV4YW1wbGUgY3JlYXRlcyBhIGxheWVyIG5hbWVkCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtbXlsYXllcjwvZmlsZW5hbWU+IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQXMgdGhlIDxmaWxlbmFtZT55b2N0by1sYXllciBjcmVhdGU8L2ZpbGVuYW1lPiBjb21tYW5kIHJ1bnMsCi0gICAgICAgICAgICAgICAgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBwcm9tcHRzIGFwcGVhciBpbiBicmFja2V0cy4KLSAgICAgICAgICAgICAgICBQcmVzc2luZyBlbnRlciB3aXRob3V0IHN1cHBseWluZyBhbnl0aGluZyBmb3IgdGhlIHByb21wdHMKLSAgICAgICAgICAgICAgICBvciBwcmVzc2luZyBlbnRlciBhbmQgcHJvdmlkaW5nIGFuIGludmFsaWQgcmVzcG9uc2UgY2F1c2VzIHRoZQotICAgICAgICAgICAgICAgIHNjcmlwdCB0byBhY2NlcHQgdGhlIGRlZmF1bHQgdmFsdWUuCi0gICAgICAgICAgICAgICAgT25jZSB0aGUgc2NyaXB0IGNvbXBsZXRlcywgdGhlIG5ldyBsYXllcgotICAgICAgICAgICAgICAgIGlzIGNyZWF0ZWQgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgVGhlIHNjcmlwdCBuYW1lcyB0aGUgbGF5ZXIgYnkgcHJlcGVuZGluZwotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLTwvZmlsZW5hbWU+IHRvIHRoZSBuYW1lIHlvdSBwcm92aWRlLgorICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHNldCB0aGUgcHJpb3JpdHkgb2YgdGhlIGxheWVyIHRvIG90aGVyIHRoYW4gdGhlCisgICAgICAgICAgICAgICAgZGVmYXVsdCB2YWx1ZSBvZiAiNiIsIHlvdSBjYW4gZWl0aGVyIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JmRhc2g7JmRhc2g7cHJpb3JpdHk8L2ZpbGVuYW1lPiBvcHRpb24gb3IgeW91IGNhbgorICAgICAgICAgICAgICAgIGVkaXQgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJCRklMRV9QUklPUklUWSc+PGZpbGVuYW1lPkJCRklMRV9QUklPUklUWTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YWx1ZSBpbiB0aGUgPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+IGFmdGVyIHRoZQorICAgICAgICAgICAgICAgIHNjcmlwdCBjcmVhdGVzIGl0LgorICAgICAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCBpZiB5b3Ugd2FudCB0byBnaXZlIHRoZSBleGFtcGxlIHJlY2lwZSBmaWxlCisgICAgICAgICAgICAgICAgc29tZSBuYW1lIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQsIHlvdSBjYW4KKyAgICAgICAgICAgICAgICB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiZkYXNoOyZkYXNoO2V4YW1wbGUtcmVjaXBlLW5hbWU8L2ZpbGVuYW1lPiBvcHRpb24uCiAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIE1pbmltYWxseSwgdGhlIHNjcmlwdCBjcmVhdGVzIHRoZSBmb2xsb3dpbmcgd2l0aGluIHRoZSBsYXllcjoKLSAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnk6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBsYXllcidzIGNvbmZpZ3VyYXRpb24gZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByb290IG5hbWUgZm9yIHRoZSBmaWxlIGlzIHRoZSBzYW1lIGFzIHRoZSByb290IG5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgcHJvdmlkZWQgZm9yIHRoZSBsYXllciAoZS5nLgotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5sYXllcjwvcmVwbGFjZWFibGU+LmNvbmY8L2ZpbGVuYW1lPikuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5UaGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DT1BZSU5HLk1JVDwvZmlsZW5hbWU+IGZpbGU6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb3B5cmlnaHQgYW5kIHVzZSBub3RpY2UgZm9yIHRoZSBzb2Z0d2FyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRoZSA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIEEgZmlsZSBkZXNjcmliaW5nIHRoZSBjb250ZW50cyBvZiB5b3VyIG5ldyBsYXllci4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBJZiB5b3UgY2hvb3NlIHRvIGdlbmVyYXRlIGEgc2FtcGxlIHJlY2lwZSBmaWxlLCB0aGUgc2NyaXB0Ci0gICAgICAgICAgICAgICAgcHJvbXB0cyB5b3UgZm9yIHRoZSBuYW1lIGZvciB0aGUgcmVjaXBlIGFuZCB0aGVuIGNyZWF0ZXMgaXQKLSAgICAgICAgICAgICAgICBpbiA8ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmxheWVyPC9yZXBsYWNlYWJsZT4vcmVjaXBlcy1leGFtcGxlL2V4YW1wbGUvPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgVGhlIHNjcmlwdCBjcmVhdGVzIGEgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGUgYW5kIGEKLSAgICAgICAgICAgICAgICBkaXJlY3RvcnksIHdoaWNoIGNvbnRhaW5zIGEgc2FtcGxlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmhlbGxvd29ybGQuYzwvZmlsZW5hbWU+IHNvdXJjZSBmaWxlLCBhbG9uZyB3aXRoCi0gICAgICAgICAgICAgICAgYSBzYW1wbGUgcGF0Y2ggZmlsZS4KLSAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHByb3ZpZGUgYSByZWNpcGUgbmFtZSwgdGhlIHNjcmlwdCB1c2VzCi0gICAgICAgICAgICAgICAgImV4YW1wbGUiLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBJZiB5b3UgY2hvb3NlIHRvIGdlbmVyYXRlIGEgc2FtcGxlIGFwcGVuZCBmaWxlLCB0aGUgc2NyaXB0Ci0gICAgICAgICAgICAgICAgcHJvbXB0cyB5b3UgZm9yIHRoZSBuYW1lIGZvciB0aGUgZmlsZSBhbmQgdGhlbiBjcmVhdGVzIGl0Ci0gICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5sYXllcjwvcmVwbGFjZWFibGU+L3JlY2lwZXMtZXhhbXBsZS1iYmFwcGVuZC9leGFtcGxlLWJiYXBwZW5kLzwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgIFRoZSBzY3JpcHQgY3JlYXRlcyBhIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGFuZCBhCi0gICAgICAgICAgICAgICAgZGlyZWN0b3J5LCB3aGljaCBjb250YWlucyBhIHNhbXBsZSBwYXRjaCBmaWxlLgotICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3QgcHJvdmlkZSBhIHJlY2lwZSBuYW1lLCB0aGUgc2NyaXB0IHVzZXMKLSAgICAgICAgICAgICAgICAiZXhhbXBsZSIuCi0gICAgICAgICAgICAgICAgVGhlIHNjcmlwdCBhbHNvIHByb21wdHMgeW91IGZvciB0aGUgdmVyc2lvbiBvZiB0aGUgYXBwZW5kIGZpbGUuCi0gICAgICAgICAgICAgICAgVGhlIHZlcnNpb24gc2hvdWxkIG1hdGNoIHRoZSByZWNpcGUgdG8gd2hpY2ggdGhlIGFwcGVuZCBmaWxlCi0gICAgICAgICAgICAgICAgaXMgYXNzb2NpYXRlZC4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIGVhc2llc3Qgd2F5IHRvIHNlZSBob3cgdGhlIDxmaWxlbmFtZT55b2N0by1sYXllcjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgc2NyaXB0IHdvcmtzIGlzIHRvIGV4cGVyaW1lbnQgd2l0aCB0aGUgc2NyaXB0LgorICAgICAgICAgICAgICAgIFRoZSBlYXNpZXN0IHdheSB0byBzZWUgaG93IHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLWxheWVycyBjcmVhdGUtbGF5ZXI8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICAgICAgd29ya3MgaXMgdG8gZXhwZXJpbWVudCB3aXRoIHRoZSBzY3JpcHQuCiAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHJlYWQgdGhlIHVzYWdlIGluZm9ybWF0aW9uIGJ5IGVudGVyaW5nIHRoZQogICAgICAgICAgICAgICAgIGZvbGxvd2luZzoKICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgeW9jdG8tbGF5ZXIgaGVscAorICAgICAkIGJpdGJha2UtbGF5ZXJzIGNyZWF0ZS1sYXllciAtLWhlbHAKKyAgICAgTk9URTogU3RhcnRpbmcgYml0YmFrZSBzZXJ2ZXIuLi4KKyAgICAgdXNhZ2U6IGJpdGJha2UtbGF5ZXJzIGNyZWF0ZS1sYXllciBbLWhdIFstLXByaW9yaXR5IFBSSU9SSVRZXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFstLWV4YW1wbGUtcmVjaXBlLW5hbWUgRVhBTVBMRVJFQ0lQRV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcmRpcgorCisgICAgIENyZWF0ZSBhIGJhc2ljIGxheWVyCisKKyAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgbGF5ZXJkaXIgICAgICAgICAgICAgIExheWVyIGRpcmVjdG9yeSB0byBjcmVhdGUKKworICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAtLXByaW9yaXR5IFBSSU9SSVRZLCAtcCBQUklPUklUWQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXllciBkaXJlY3RvcnkgdG8gY3JlYXRlCisgICAgICAgLS1leGFtcGxlLXJlY2lwZS1uYW1lIEVYQU1QTEVSRUNJUEUsIC1lIEVYQU1QTEVSRUNJUEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZW5hbWUgb2YgdGhlIGV4YW1wbGUgcmVjaXBlCiAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICBPbmNlIHlvdSBjcmVhdGUgeW91ciBnZW5lcmFsIGxheWVyLCB5b3UgbXVzdCBhZGQgaXQgdG8geW91cgogICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZS4KLSAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgd2hlcmUgYSBsYXllciBuYW1lZAotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW15bGF5ZXI8L2ZpbGVuYW1lPiBpcyBhZGRlZDoKKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFkZCB5b3VyIGxheWVyIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLWxheWVycyBhZGQtbGF5ZXI8L2ZpbGVuYW1lPiBjb21tYW5kOgogICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgQkJMQVlFUlMgPSA/IiBcCi0gICAgICAgIC91c3IvbG9jYWwvc3JjL3lvY3RvL21ldGEgXAotICAgICAgICAvdXNyL2xvY2FsL3NyYy95b2N0by9tZXRhLXBva3kgXAotICAgICAgICAvdXNyL2xvY2FsL3NyYy95b2N0by9tZXRhLXlvY3RvLWJzcCBcCi0gICAgICAgIC91c3IvbG9jYWwvc3JjL3lvY3RvL21ldGEtbXlsYXllciBcCi0gICAgICAgICIKKyAgICAgJCBiaXRiYWtlLWxheWVycyBhZGQtbGF5ZXIgPHJlcGxhY2VhYmxlPnlvdXJfbGF5ZXJfbmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB3aGVyZSBhIGxheWVyIG5hbWVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtc2NvdHRyaWY8L2ZpbGVuYW1lPiBpcyBhZGRlZCBhbmQgdGhlbiB0aGUKKyAgICAgICAgICAgICAgICBsYXllcnMgYXJlIHNob3duIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLWxheWVycyBzaG93LWxheWVyczwvZmlsZW5hbWU+IGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UtbGF5ZXJzIGFkZC1sYXllciBtZXRhLXNjb3R0cmlmCisgICAgIE5PVEU6IFN0YXJ0aW5nIGJpdGJha2Ugc2VydmVyLi4uCisgICAgIExvYWRpbmcgY2FjaGU6IDEwMCUgfCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjfCBUaW1lOiAwOjAwOjAwCisgICAgIExvYWRlZCAxMjc1IGVudHJpZXMgZnJvbSBkZXBlbmRlbmN5IGNhY2hlLgorICAgICBQYXJzaW5nIHJlY2lwZXM6IDEwMCUgfCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI3wgVGltZTogMDowMDowMAorICAgICBQYXJzaW5nIG9mIDgxOSAuYmIgZmlsZXMgY29tcGxldGUgKDgxNyBjYWNoZWQsIDIgcGFyc2VkKS4gMTI3NiB0YXJnZXRzLCA0NCBza2lwcGVkLCAwIG1hc2tlZCwgMCBlcnJvcnMuCisgICAgICQgYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMKKyAgICAgTk9URTogU3RhcnRpbmcgYml0YmFrZSBzZXJ2ZXIuLi4KKyAgICAgbGF5ZXIgICAgICAgICAgICAgICAgIHBhdGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5CisgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgIG1ldGEgICAgICAgICAgICAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEgICAgICAgICAgICAgICAgICA1CisgICAgIG1ldGEtcG9reSAgICAgICAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEtcG9reSAgICAgICAgICAgICA1CisgICAgIG1ldGEteW9jdG8tYnNwICAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEteW9jdG8tYnNwICAgICAgICA1CisgICAgIG1ldGEtbXlsYXllciAgICAgICAgICAvaG9tZS9zY290dHJpZi9tZXRhLW15bGF5ZXIgICAgICAgICAgICAgICA2CisgICAgIHdvcmtzcGFjZSAgICAgICAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L2J1aWxkL3dvcmtzcGFjZSAgICAgICA5OQorICAgICBtZXRhLXNjb3R0cmlmICAgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9idWlsZC9tZXRhLXNjb3R0cmlmICAgNgogICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICBBZGRpbmcgdGhlIGxheWVyIHRvIHRoaXMgZmlsZSBlbmFibGVzIHRoZSBidWlsZCBzeXN0ZW0gdG8KICAgICAgICAgICAgICAgICBsb2NhdGUgdGhlIGxheWVyIGR1cmluZyB0aGUgYnVpbGQuCkBAIC0xMTkzLDcgKzEyMTUsNyBAQAogICAgICAgICAgICAgICAgIGZyb20gd2l0aGluIGEgcmVjaXBlIGFuZCB1c2luZwogICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5FWFRSQV9JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+IGZyb20gd2l0aGluCiAgICAgICAgICAgICAgICAgeW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzIGZvdW5kIGluIHRoZQotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgogICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICA8cGFyYT4KQEAgLTE0OTYsNiArMTUxOCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc2ltaWxhciBpbiBmdW5jdGlvbiB0byB0aGUgcmVjaXBlIHlvdSBuZWVkLgogICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiByZWNpcGUgc3ludGF4LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWNpcGUtc3ludGF4Jz5SZWNpcGUgU3ludGF4PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CiAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLWNyZWF0aW5nLXRoZS1iYXNlLXJlY2lwZS11c2luZy1kZXZ0b29sJz4KQEAgLTE1MTYsOCArMTU0Myw5IEBACiAgICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZQogICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kIGluIHRoZQotICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNlLWRldnRvb2wtdG8taW50ZWdyYXRlLW5ldy1jb2RlJz5Vc2UgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gdG8gQWRkIGFuIEFwcGxpY2F0aW9uPC9saW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1NES19VUkw7I3Nkay1hLWNsb3Nlci1sb29rLWF0LWRldnRvb2wtYWRkJz5BIENsb3NlciBMb29rIGF0IDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gYWRkPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBFeHRlbnNpYmxlIFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoZVNESykgbWFudWFsLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvc2VjdGlvbj4KIApAQCAtMTU0MCwxMiArMTU2OCwxMCBAQAogCiAgICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIFRvIHJ1biB0aGUgdG9vbCwgeW91IGp1c3QgbmVlZCB0byBiZSBpbiB5b3VyCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CiAgICAgICAgICAgICAgICAgICAgIGFuZCBoYXZlIHNvdXJjZWQgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdAogICAgICAgICAgICAgICAgICAgICAoaS5lLgotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudjwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgb3IKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4pLgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudjwvZmlsZW5hbWU+PC91bGluaz4pLgogICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBiYXNpYyA8ZmlsZW5hbWU+cmVjaXBldG9vbDwvZmlsZW5hbWU+IHN5bnRheDoKICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICBSdW5uaW5nIDxmaWxlbmFtZT5yZWNpcGV0b29sIC1oPC9maWxlbmFtZT4gb3IKQEAgLTE3MTUsMzAzICsxNzQxLDYgQEAKICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgICA8L3NlY3Rpb24+CiAKLSAgICAgICAgPHNlY3Rpb24gaWQ9J3VuZGVyc3RhbmRpbmctcmVjaXBlLXN5bnRheCc+Ci0gICAgICAgICAgICA8dGl0bGU+VW5kZXJzdGFuZGluZyBSZWNpcGUgU3ludGF4PC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVW5kZXJzdGFuZGluZyByZWNpcGUgZmlsZSBzeW50YXggaXMgaW1wb3J0YW50IGZvcgotICAgICAgICAgICAgICAgIHdyaXRpbmcgcmVjaXBlcy4KLSAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3Qgb3ZlcnZpZXdzIHRoZSBiYXNpYyBpdGVtcyB0aGF0IG1ha2UgdXAgYQotICAgICAgICAgICAgICAgIEJpdEJha2UgcmVjaXBlIGZpbGUuCi0gICAgICAgICAgICAgICAgRm9yIG1vcmUgY29tcGxldGUgQml0QmFrZSBzeW50YXggZGVzY3JpcHRpb25zLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjYml0YmFrZS11c2VyLW1hbnVhbC1tZXRhZGF0YSc+U3ludGF4IGFuZCBPcGVyYXRvcnM8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICBjaGFwdGVyIG9mIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsLgotICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VmFyaWFibGUgQXNzaWdubWVudHMgYW5kIE1hbmlwdWxhdGlvbnM6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlIGFzc2lnbm1lbnRzIGFsbG93IGEgdmFsdWUgdG8gYmUgYXNzaWduZWQgdG8gYQotICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgYXNzaWdubWVudCBjYW4gYmUgc3RhdGljIHRleHQgb3IgbWlnaHQgaW5jbHVkZQotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbnRlbnRzIG9mIG90aGVyIHZhcmlhYmxlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIEluIGFkZGl0aW9uIHRvIHRoZSBhc3NpZ25tZW50LCBhcHBlbmRpbmcgYW5kIHByZXBlbmRpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMgYXJlIGFsc28gc3VwcG9ydGVkLjwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBzb21lIG9mIHRoZSB3YXlzCi0gICAgICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIHVzZSB2YXJpYWJsZXMgaW4gcmVjaXBlczoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgUyA9ICIke1dPUktESVJ9L3Bvc3RmaXgtJHtQVn0iCi0gICAgIENGTEFHUyArPSAiLUROT19BU00iCi0gICAgIFNSQ19VUklfYXBwZW5kID0gIiBmaWxlOi8vZml4dXAucGF0Y2giCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5GdW5jdGlvbnM6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9ucyBwcm92aWRlIGEgc2VyaWVzIG9mIGFjdGlvbnMgdG8gYmUgcGVyZm9ybWVkLgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IHVzdWFsbHkgdXNlIGZ1bmN0aW9ucyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgYSB0YXNrIGZ1bmN0aW9uIG9yIHRvIGNvbXBsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIGEgZGVmYXVsdCBmdW5jdGlvbiAoaS5lLiBhcHBlbmQgb3IgcHJlcGVuZCB0byBhbgotICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcgZnVuY3Rpb24pLgotICAgICAgICAgICAgICAgICAgICAgICAgU3RhbmRhcmQgZnVuY3Rpb25zIHVzZSA8ZmlsZW5hbWU+c2g8L2ZpbGVuYW1lPiBzaGVsbAotICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4LCBhbHRob3VnaCBhY2Nlc3MgdG8gT3BlbkVtYmVkZGVkIHZhcmlhYmxlcyBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsIG1ldGhvZHMgYXJlIGFsc28gYXZhaWxhYmxlLjwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBmdW5jdGlvbiBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNlZDwvZmlsZW5hbWU+IHJlY2lwZToKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgZG9faW5zdGFsbCAoKSB7Ci0gICAgICAgICBhdXRvdG9vbHNfZG9faW5zdGFsbAotICAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KLSAgICAgICAgIG12ICR7RH0ke2JpbmRpcn0vc2VkICR7RH0ke2Jhc2VfYmluZGlyfS9zZWQKLSAgICAgICAgIHJtZGlyICR7RH0ke2JpbmRpcn0vCi0gICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gaW1wbGVtZW50IG5ldyBmdW5jdGlvbnMgdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGNhbGxlZCBiZXR3ZWVuIGV4aXN0aW5nIHRhc2tzIGFzIGxvbmcgYXMgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZnVuY3Rpb25zIGFyZSBub3QgcmVwbGFjaW5nIG9yIGNvbXBsZW1lbnRpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IGZ1bmN0aW9ucy4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gaW1wbGVtZW50IGZ1bmN0aW9ucyBpbiBQeXRob24KLSAgICAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2Ygc2hlbGwuCi0gICAgICAgICAgICAgICAgICAgICAgICBCb3RoIG9mIHRoZXNlIG9wdGlvbnMgYXJlIG5vdCBzZWVuIGluIHRoZSBtYWpvcml0eSBvZgotICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlcy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5LZXl3b3Jkczo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgQml0QmFrZSByZWNpcGVzIHVzZSBvbmx5IGEgZmV3IGtleXdvcmRzLgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IHVzZSBrZXl3b3JkcyB0byBpbmNsdWRlIGNvbW1vbgotICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25zICg8ZmlsZW5hbWU+aW5oZXJpdDwvZmlsZW5hbWU+KSwgbG9hZCBwYXJ0cwotICAgICAgICAgICAgICAgICAgICAgICAgb2YgYSByZWNpcGUgZnJvbSBvdGhlciBmaWxlcwotICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4gYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVxdWlyZTwvZmlsZW5hbWU+KSBhbmQgZXhwb3J0IHZhcmlhYmxlcwotICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGVudmlyb25tZW50ICg8ZmlsZW5hbWU+ZXhwb3J0PC9maWxlbmFtZT4pLjwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyB0aGUgdXNlIG9mIHNvbWUgb2YKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoZXNlIGtleXdvcmRzOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBleHBvcnQgUE9TVENPTkYgPSAiJHtTVEFHSU5HX0JJTkRJUn0vcG9zdGNvbmYiCi0gICAgIGluaGVyaXQgYXV0b2NvbmYKLSAgICAgcmVxdWlyZSBvdGhlcmZpbGUuaW5jCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Db21tZW50czo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgQW55IGxpbmVzIHRoYXQgYmVnaW4gd2l0aCB0aGUgaGFzaCBjaGFyYWN0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+IzwvZmlsZW5hbWU+KSBhcmUgdHJlYXRlZCBhcyBjb21tZW50IGxpbmVzCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmQgYXJlIGlnbm9yZWQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICMgVGhpcyBpcyBhIGNvbW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGlzIG5leHQgbGlzdCBzdW1tYXJpemVzIHRoZSBtb3N0IGltcG9ydGFudCBhbmQgbW9zdCBjb21tb25seQotICAgICAgICAgICAgICAgIHVzZWQgcGFydHMgb2YgdGhlIHJlY2lwZSBzeW50YXguCi0gICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlc2UgcGFydHMgb2YgdGhlIHN5bnRheCwgeW91IGNhbgotICAgICAgICAgICAgICAgIHJlZmVyZW5jZSB0aGUKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I2JpdGJha2UtdXNlci1tYW51YWwtbWV0YWRhdGEnPlN5bnRheCBhbmQgT3BlcmF0b3JzPC91bGluaz4KLSAgICAgICAgICAgICAgICBjaGFwdGVyIGluIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsLgotICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TGluZSBDb250aW51YXRpb246IDxmaWxlbmFtZT5cPC9maWxlbmFtZT48L2VtcGhhc2lzPiAtCi0gICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIGJhY2t3YXJkIHNsYXNoICg8ZmlsZW5hbWU+XDwvZmlsZW5hbWU+KQotICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyIHRvIHNwbGl0IGEgc3RhdGVtZW50IG92ZXIgbXVsdGlwbGUgbGluZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBQbGFjZSB0aGUgc2xhc2ggY2hhcmFjdGVyIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUgdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgaXMgdG8gYmUgY29udGludWVkIG9uIHRoZSBuZXh0IGxpbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFZBUiA9ICJBIHJlYWxseSBsb25nIFwKLSAgICAgICAgICAgIGxpbmUiCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2Fubm90IGhhdmUgYW55IGNoYXJhY3RlcnMgaW5jbHVkaW5nIHNwYWNlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHRhYnMgYWZ0ZXIgdGhlIHNsYXNoIGNoYXJhY3Rlci4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+VXNpbmcgVmFyaWFibGVzOiA8ZmlsZW5hbWU+JHsuLi59PC9maWxlbmFtZT48L2VtcGhhc2lzPiAtCi0gICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT4kezxyZXBsYWNlYWJsZT5WQVJOQU1FPC9yZXBsYWNlYWJsZT59PC9maWxlbmFtZT4gc3ludGF4IHRvCi0gICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3MgdGhlIGNvbnRlbnRzIG9mIGEgdmFyaWFibGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFNSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xpYnBuZy96bGliLSR7UFZ9LnRhci5neiIKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoYXQgdGhlIHZhbHVlIG9mIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBleHByZXNzZWQgaW4gdGhpcyBmb3JtIGRvZXMgbm90IGdldAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0aXR1dGVkIGF1dG9tYXRpY2FsbHkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGV4cGFuc2lvbiBvZiB0aGVzZSBleHByZXNzaW9ucyBoYXBwZW5zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb24tZGVtYW5kIGxhdGVyIChlLmcuIHVzdWFsbHkgd2hlbiBhIGZ1bmN0aW9uIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlcyByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIGV4ZWN1dGVzKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGJlaGF2aW9yIGVuc3VyZXMgdGhhdCB0aGUgdmFsdWVzIGFyZSBtb3N0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUgZm9yIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZXkgYXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB1c2VkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uIHRoZSByYXJlIG9jY2FzaW9uIHRoYXQgeW91IGRvIG5lZWQgdGhlIHZhcmlhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiB0byBiZSBleHBhbmRlZCBpbW1lZGlhdGVseSwgeW91IGNhbiB1c2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPjo9PC9maWxlbmFtZT4gb3BlcmF0b3IgaW5zdGVhZCBvZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT49PC9maWxlbmFtZT4gd2hlbiB5b3UgbWFrZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25tZW50LCBidXQgdGhpcyBpcyBub3QgZ2VuZXJhbGx5IG5lZWRlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlF1b3RlIEFsbCBBc3NpZ25tZW50czogPGZpbGVuYW1lPiI8cmVwbGFjZWFibGU+dmFsdWU8L3JlcGxhY2VhYmxlPiI8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KLSAgICAgICAgICAgICAgICAgICAgICAgIFVzZSBkb3VibGUgcXVvdGVzIGFyb3VuZCB0aGUgdmFsdWUgaW4gYWxsIHZhcmlhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25tZW50cy4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgVkFSMSA9ICIke09USEVSVkFSfSIKLSAgICAgVkFSMiA9ICJUaGUgdmVyc2lvbiBpcyAke1BWfSIKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNvbmRpdGlvbmFsIEFzc2lnbm1lbnQ6IDxmaWxlbmFtZT4/PTwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLQotICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uYWwgYXNzaWdubWVudCBpcyB1c2VkIHRvIGFzc2lnbiBhIHZhbHVlIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICBhIHZhcmlhYmxlLCBidXQgb25seSB3aGVuIHRoZSB2YXJpYWJsZSBpcyBjdXJyZW50bHkKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2V0LgotICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBxdWVzdGlvbiBtYXJrIGZvbGxvd2VkIGJ5IHRoZSBlcXVhbCBzaWduCi0gICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPj89PC9maWxlbmFtZT4pIHRvIG1ha2UgYSAic29mdCIgYXNzaWdubWVudAotICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBmb3IgY29uZGl0aW9uYWwgYXNzaWdubWVudC4KLSAgICAgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgInNvZnQiIGFzc2lnbm1lbnRzIGFyZSB1c2VkIGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvciB2YXJpYWJsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgYXJlIGFsbG93ZWQgdG8gY29tZSB0aHJvdWdoIGZyb20gdGhlIGV4dGVybmFsCi0gICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudC4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkhlcmUgaXMgYW4gZXhhbXBsZSB3aGVyZQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlZBUjE8L2ZpbGVuYW1lPiBpcyBzZXQgdG8gIk5ldyB2YWx1ZSIgaWYKLSAgICAgICAgICAgICAgICAgICAgICAgIGl0IGlzIGN1cnJlbnRseSBlbXB0eS4KLSAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIDxmaWxlbmFtZT5WQVIxPC9maWxlbmFtZT4gaGFzIGFscmVhZHkgYmVlbgotICAgICAgICAgICAgICAgICAgICAgICAgc2V0LCBpdCByZW1haW5zIHVuY2hhbmdlZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgVkFSMSA/PSAiTmV3IHZhbHVlIgotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBuZXh0IGV4YW1wbGUsIDxmaWxlbmFtZT5WQVIxPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlzIGxlZnQgd2l0aCB0aGUgdmFsdWUgIk9yaWdpbmFsIHZhbHVlIjoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgVkFSMSA9ICJPcmlnaW5hbCB2YWx1ZSIKLSAgICAgVkFSMSA/PSAiTmV3IHZhbHVlIgotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QXBwZW5kaW5nOiA8ZmlsZW5hbWU+Kz08L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KLSAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgcGx1cyBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkgdGhlIGVxdWFscyBzaWduCi0gICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPis9PC9maWxlbmFtZT4pIHRvIGFwcGVuZCB2YWx1ZXMgdG8gZXhpc3RpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3BlcmF0b3IgYWRkcyBhIHNwYWNlIGJldHdlZW4gdGhlIGV4aXN0aW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCBvZiB0aGUgdmFyaWFibGUgYW5kIHRoZSBuZXcgY29udGVudC4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5IZXJlIGlzIGFuIGV4YW1wbGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFNSQ19VUkkgKz0gImZpbGU6Ly9maXgtbWFrZWZpbGUucGF0Y2giCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QcmVwZW5kaW5nOiA8ZmlsZW5hbWU+PSs8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KLSAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgZXF1YWxzIHNpZ24gZm9sbG93ZWQgYnkgdGhlIHBsdXMgY2hhcmFjdGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPj0rPC9maWxlbmFtZT4pIHRvIHByZXBlbmQgdmFsdWVzIHRvIGV4aXN0aW5nCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG9wZXJhdG9yIGFkZHMgYSBzcGFjZSBiZXR3ZWVuIHRoZSBuZXcgY29udGVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgZXhpc3RpbmcgY29udGVudCBvZiB0aGUgdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SGVyZSBpcyBhbiBleGFtcGxlOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBWQVIgPSsgIlN0YXJ0cyIKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFwcGVuZGluZzogPGZpbGVuYW1lPl9hcHBlbmQ8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KLSAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPl9hcHBlbmQ8L2ZpbGVuYW1lPiBvcGVyYXRvciB0bwotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kIHZhbHVlcyB0byBleGlzdGluZyB2YXJpYWJsZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG9wZXJhdG9yIGRvZXMgbm90IGFkZCBhbnkgYWRkaXRpb25hbCBzcGFjZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIEFsc28sIHRoZSBvcGVyYXRvciBpcyBhcHBsaWVkIGFmdGVyIGFsbCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4rPTwvZmlsZW5hbWU+LCBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT49KzwvZmlsZW5hbWU+IG9wZXJhdG9ycyBoYXZlIGJlZW4gYXBwbGllZCBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyIGFsbCA8ZmlsZW5hbWU+PTwvZmlsZW5hbWU+IGFzc2lnbm1lbnRzIGhhdmUKLSAgICAgICAgICAgICAgICAgICAgICAgIG9jY3VycmVkLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIHRoZSBzcGFjZSBiZWluZwotICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGljaXRseSBhZGRlZCB0byB0aGUgc3RhcnQgdG8gZW5zdXJlIHRoZSBhcHBlbmRlZAotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgaXMgbm90IG1lcmdlZCB3aXRoIHRoZSBleGlzdGluZyB2YWx1ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgU1JDX1VSSV9hcHBlbmQgPSAiIGZpbGU6Ly9maXgtbWFrZWZpbGUucGF0Y2giCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gdXNlIHRoZSA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciB3aXRoIG92ZXJyaWRlcywgd2hpY2ggcmVzdWx0cyBpbiB0aGUgYWN0aW9ucwotICAgICAgICAgICAgICAgICAgICAgICAgb25seSBiZWluZyBwZXJmb3JtZWQgZm9yIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IG9yCi0gICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBTUkNfVVJJX2FwcGVuZF9zaDQgPSAiIGZpbGU6Ly9maXgtbWFrZWZpbGUucGF0Y2giCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QcmVwZW5kaW5nOiA8ZmlsZW5hbWU+X3ByZXBlbmQ8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KLSAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPl9wcmVwZW5kPC9maWxlbmFtZT4gb3BlcmF0b3IgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQgdmFsdWVzIHRvIGV4aXN0aW5nIHZhcmlhYmxlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3BlcmF0b3IgZG9lcyBub3QgYWRkIGFueSBhZGRpdGlvbmFsIHNwYWNlLgotICAgICAgICAgICAgICAgICAgICAgICAgQWxzbywgdGhlIG9wZXJhdG9yIGlzIGFwcGxpZWQgYWZ0ZXIgYWxsIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPis9PC9maWxlbmFtZT4sIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPj0rPC9maWxlbmFtZT4gb3BlcmF0b3JzIGhhdmUgYmVlbiBhcHBsaWVkIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgYWxsIDxmaWxlbmFtZT49PC9maWxlbmFtZT4gYXNzaWdubWVudHMgaGF2ZQotICAgICAgICAgICAgICAgICAgICAgICAgb2NjdXJyZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgdGhlIHNwYWNlIGJlaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICBleHBsaWNpdGx5IGFkZGVkIHRvIHRoZSBlbmQgdG8gZW5zdXJlIHRoZSBwcmVwZW5kZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGlzIG5vdCBtZXJnZWQgd2l0aCB0aGUgZXhpc3RpbmcgdmFsdWU6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIENGTEFHU19wcmVwZW5kID0gIi1JJHtTfS9teWluY2x1ZGVzICIKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyB1c2UgdGhlIDxmaWxlbmFtZT5fcHJlcGVuZDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciB3aXRoIG92ZXJyaWRlcywgd2hpY2ggcmVzdWx0cyBpbiB0aGUgYWN0aW9ucwotICAgICAgICAgICAgICAgICAgICAgICAgb25seSBiZWluZyBwZXJmb3JtZWQgZm9yIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IG9yCi0gICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBDRkxBR1NfcHJlcGVuZF9zaDQgPSAiLUkke1N9L215aW5jbHVkZXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+T3ZlcnJpZGVzOjwvZW1waGFzaXM+IC0KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIG92ZXJyaWRlcyB0byBzZXQgYSB2YWx1ZSBjb25kaXRpb25hbGx5LAotICAgICAgICAgICAgICAgICAgICAgICAgdHlwaWNhbGx5IGJhc2VkIG9uIGhvdyB0aGUgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0LgotICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIHNldCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LQlJBTkNIJz48ZmlsZW5hbWU+S0JSQU5DSDwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlJ3MgdmFsdWUgdG8gInN0YW5kYXJkL2Jhc2UiIGZvciBhbnkgdGFyZ2V0Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+LAotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IGZvciBxZW11YXJtIHdoZXJlIGl0IHNob3VsZCBiZSBzZXQgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICJzdGFuZGFyZC9hcm0tdmVyc2F0aWxlLTkyNmVqcyIsIHlvdSB3b3VsZCBkbyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZzoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgS0JSQU5DSCA9ICJzdGFuZGFyZC9iYXNlIgotICAgICBLQlJBTkNIX3FlbXVhcm0gID0gInN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIgotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgT3ZlcnJpZGVzIGFyZSBhbHNvIHVzZWQgdG8gc2VwYXJhdGUgYWx0ZXJuYXRlIHZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgb2YgYSB2YXJpYWJsZSBpbiBvdGhlciBzaXR1YXRpb25zLgotICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHdoZW4gc2V0dGluZyB2YXJpYWJsZXMgc3VjaCBhcwotICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTJz48ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBhcmUgc3BlY2lmaWMgdG8gaW5kaXZpZHVhbCBwYWNrYWdlcyBwcm9kdWNlZCBieQotICAgICAgICAgICAgICAgICAgICAgICAgYSByZWNpcGUsIHlvdSBzaG91bGQgYWx3YXlzIHVzZSBhbiBvdmVycmlkZSB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbmRlbnRhdGlvbjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHNwYWNlcyBmb3IgaW5kZW50YXRpb24gcmF0aGVyIHRoYW4gdGhhbiB0YWJzLgotICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHNoZWxsIGZ1bmN0aW9ucywgYm90aCBjdXJyZW50bHkgd29yay4KLSAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGl0IGlzIGEgcG9saWN5IGRlY2lzaW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICB0byB1c2UgdGFicyBpbiBzaGVsbCBmdW5jdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgICAgICBSZWFsaXplIHRoYXQgc29tZSBsYXllcnMgaGF2ZSBhIHBvbGljeSB0byB1c2Ugc3BhY2VzCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgYWxsIGluZGVudGF0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNpbmcgUHl0aG9uIGZvciBDb21wbGV4IE9wZXJhdGlvbnM6IDxmaWxlbmFtZT4ke0A8cmVwbGFjZWFibGU+cHl0aG9uX2NvZGU8L3JlcGxhY2VhYmxlPn08L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGFkdmFuY2VkIHByb2Nlc3NpbmcsIGl0IGlzIHBvc3NpYmxlIHRvIHVzZQotICAgICAgICAgICAgICAgICAgICAgICAgUHl0aG9uIGNvZGUgZHVyaW5nIHZhcmlhYmxlIGFzc2lnbm1lbnRzIChlLmcuCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2ggYW5kIHJlcGxhY2VtZW50IG9uIGEgdmFyaWFibGUpLjwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBpbmRpY2F0ZSBQeXRob24gY29kZSB1c2luZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0A8cmVwbGFjZWFibGU+cHl0aG9uX2NvZGU8L3JlcGxhY2VhYmxlPn08L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4IGZvciB0aGUgdmFyaWFibGUgYXNzaWdubWVudDoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgU1JDX1VSSSA9ICJmdHA6Ly9mdHAuaW5mby16aXAub3JnL3B1Yi9pbmZvemlwL3NyYy96aXAke0BkLmdldFZhcignUFYnLDEpLnJlcGxhY2UoJy4nLCAnJyl9LnRnegotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2hlbGwgRnVuY3Rpb24gU3ludGF4OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICBXcml0ZSBzaGVsbCBmdW5jdGlvbnMgYXMgaWYgeW91IHdlcmUgd3JpdGluZyBhIHNoZWxsCi0gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQgd2hlbiB5b3UgZGVzY3JpYmUgYSBsaXN0IG9mIGFjdGlvbnMgdG8gdGFrZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgZW5zdXJlIHRoYXQgeW91ciBzY3JpcHQgd29ya3Mgd2l0aCBhIGdlbmVyaWMKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zaDwvZmlsZW5hbWU+IGFuZCB0aGF0IGl0IGRvZXMgbm90IHJlcXVpcmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGFueSA8ZmlsZW5hbWU+YmFzaDwvZmlsZW5hbWU+IG9yIG90aGVyIHNoZWxsLXNwZWNpZmljCi0gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5LgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHNhbWUgY29uc2lkZXJhdGlvbnMgYXBwbHkgdG8gdmFyaW91cyBzeXN0ZW0KLSAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxpdGllcyAoZS5nLiA8ZmlsZW5hbWU+c2VkPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z3JlcDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+YXdrPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmQgc28gZm9ydGgpIHRoYXQgeW91IG1pZ2h0IHdpc2ggdG8gdXNlLgotICAgICAgICAgICAgICAgICAgICAgICAgSWYgaW4gZG91YnQsIHlvdSBzaG91bGQgY2hlY2sgd2l0aCBtdWx0aXBsZQotICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zIC0gaW5jbHVkaW5nIHRob3NlIGZyb20gQnVzeUJveC4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KICAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtcnVubmluZy1hLWJ1aWxkLW9uLXRoZS1yZWNpcGUnPgogICAgICAgICAgICAgPHRpdGxlPlJ1bm5pbmcgYSBCdWlsZCBvbiB0aGUgUmVjaXBlPC90aXRsZT4KIApAQCAtMjAyMywxMiArMTc1MiwxMCBAQAogICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBBc3N1bWluZyB5b3UgaGF2ZSBzb3VyY2VkIGEgYnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IChpLmUuCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgb3IKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3VsaW5rPikKKyAgICAgICAgICAgICAgICBBc3N1bWluZyB5b3UgaGF2ZSBzb3VyY2VkIHRoZSBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgKGkuZS4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4pCiAgICAgICAgICAgICAgICAgYW5kIHlvdSBhcmUgaW4gdGhlCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4sCiAgICAgICAgICAgICAgICAgdXNlIEJpdEJha2UgdG8gcHJvY2VzcyB5b3VyIHJlY2lwZS4KICAgICAgICAgICAgICAgICBBbGwgeW91IG5lZWQgdG8gcHJvdmlkZSBpcyB0aGUKICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmJhc2VuYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiBvZiB0aGUgcmVjaXBlIGFzIGRlc2NyaWJlZApAQCAtMjA4Myw4ICsxODEwLDggQEAKICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJ1aWxkIHByb2Nlc3MgaW4gdGhlCi0gICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2Nsb3Nlci1sb29rJz5BIENsb3NlciBMb29rIGF0IHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50PC91bGluaz4iCisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJ1aWxkIHByb2Nlc3MgaW4KKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWRldmVsb3BtZW50LWVudmlyb25tZW50Jz5UaGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudDwvdWxpbms+IgogICAgICAgICAgICAgICAgIGNoYXB0ZXIgb2YgdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9zZWN0aW9uPgpAQCAtMzA3NCw3ICsyODAxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLgogICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSA8ZmlsZW5hbWU+c3lzdGVtZC5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZQogICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRlZCBpbiB5b3VyCi0gICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KQEAgLTM5NjcsNiArMzY5NCw0MTcgQEAKICAgICAgICAgPC9zZWN0aW9uPgogICAgIDwvc2VjdGlvbj4KIAorICAgIDxzZWN0aW9uIGlkPSdmaW5kaW5nLXRoZS10ZW1wb3Jhcnktc291cmNlLWNvZGUnPgorICAgICAgICA8dGl0bGU+RmluZGluZyBUZW1wb3JhcnkgU291cmNlIENvZGU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IG1pZ2h0IGZpbmQgaXQgaGVscGZ1bCBkdXJpbmcgZGV2ZWxvcG1lbnQgdG8gbW9kaWZ5IHRoZQorICAgICAgICAgICAgdGVtcG9yYXJ5IHNvdXJjZSBjb2RlIHVzZWQgYnkgcmVjaXBlcyB0byBidWlsZCBwYWNrYWdlcy4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBhcmUgZGV2ZWxvcGluZyBhIHBhdGNoIGFuZCB5b3UgbmVlZCB0bworICAgICAgICAgICAgZXhwZXJpbWVudCBhIGJpdCB0byBmaWd1cmUgb3V0IHlvdXIgc29sdXRpb24uCisgICAgICAgICAgICBBZnRlciB5b3UgaGF2ZSBpbml0aWFsbHkgYnVpbHQgdGhlIHBhY2thZ2UsIHlvdSBjYW4gaXRlcmF0aXZlbHkKKyAgICAgICAgICAgIHR3ZWFrIHRoZSBzb3VyY2UgY29kZSwgd2hpY2ggaXMgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICBhbmQgdGhlbiB5b3UgY2FuIGZvcmNlIGEgcmUtY29tcGlsZSBhbmQgcXVpY2tseSB0ZXN0IHlvdXIgYWx0ZXJlZAorICAgICAgICAgICAgY29kZS4KKyAgICAgICAgICAgIE9uY2UgeW91IHNldHRsZSBvbiBhIHNvbHV0aW9uLCB5b3UgY2FuIHRoZW4gcHJlc2VydmUgeW91ciBjaGFuZ2VzCisgICAgICAgICAgICBpbiB0aGUgZm9ybSBvZiBwYXRjaGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEdXJpbmcgYSBidWlsZCwgdGhlIHVucGFja2VkIHRlbXBvcmFyeSBzb3VyY2UgY29kZSB1c2VkIGJ5IHJlY2lwZXMKKyAgICAgICAgICAgIHRvIGJ1aWxkIHBhY2thZ2VzIGlzIGF2YWlsYWJsZSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5IGFzCisgICAgICAgICAgICBkZWZpbmVkIGJ5IHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICBCZWxvdyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIDxmaWxlbmFtZT5TPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgIGFzIGRlZmluZWQgaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICAgICAgICAgaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz46CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFMgPSAiJHtXT1JLRElSfS8ke0JQfSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFlvdSBzaG91bGQgYmUgYXdhcmUgdGhhdCBtYW55IHJlY2lwZXMgb3ZlcnJpZGUgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+UzwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHJlY2lwZXMgdGhhdCBmZXRjaCB0aGVpciBzb3VyY2UgZnJvbSBHaXQgdXN1YWxseSBzZXQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5TPC9maWxlbmFtZT4gdG8gPGZpbGVuYW1lPiR7V09SS0RJUn0vZ2l0PC9maWxlbmFtZT4uCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQlAnPjxmaWxlbmFtZT5CUDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICByZXByZXNlbnRzIHRoZSBiYXNlIHJlY2lwZSBuYW1lLCB3aGljaCBjb25zaXN0cyBvZiB0aGUgbmFtZQorICAgICAgICAgICAgICAgIGFuZCB2ZXJzaW9uOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQlAgPSAiJHtCUE59LSR7UFZ9IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHBhdGggdG8gdGhlIHdvcmsgZGlyZWN0b3J5IGZvciB0aGUgcmVjaXBlCisgICAgICAgICAgICAoPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L3VsaW5rPikKKyAgICAgICAgICAgIGlzIGRlZmluZWQgYXMgZm9sbG93czoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtUTVBESVJ9L3dvcmsvJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30vJHtQTn0vJHtFWFRFTkRQRX0ke1BWfS0ke1BSfQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIGFjdHVhbCBkaXJlY3RvcnkgZGVwZW5kcyBvbiBzZXZlcmFsIHRoaW5nczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIHRvcC1sZXZlbCBidWlsZCBvdXRwdXQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NVUxUSU1BQ0hfVEFSR0VUX1NZUyc+PGZpbGVuYW1lPk1VTFRJTUFDSF9UQVJHRVRfU1lTPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIHRhcmdldCBzeXN0ZW0gaWRlbnRpZmllci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRVhURU5EUEUnPjxmaWxlbmFtZT5FWFRFTkRQRTwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgIFRoZSBlcG9jaCAtIChpZgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEUnPjxmaWxlbmFtZT5QRTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgbm90IHNwZWNpZmllZCwgd2hpY2ggaXMgdXN1YWxseSB0aGUgY2FzZSBmb3IgbW9zdAorICAgICAgICAgICAgICAgICAgICByZWNpcGVzLCB0aGVuIDxmaWxlbmFtZT5FWFRFTkRQRTwvZmlsZW5hbWU+IGlzIGJsYW5rKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgdmVyc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgcmV2aXNpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGFzc3VtZSBhIFNvdXJjZSBEaXJlY3RvcnkgdG9wLWxldmVsIGZvbGRlcgorICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiwgYSBkZWZhdWx0IEJ1aWxkIERpcmVjdG9yeSBhdAorICAgICAgICAgICAgPGZpbGVuYW1lPnBva3kvYnVpbGQ8L2ZpbGVuYW1lPiwgYW5kIGEKKyAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11eDg2LXBva3ktbGludXg8L2ZpbGVuYW1lPiBtYWNoaW5lIHRhcmdldAorICAgICAgICAgICAgc3lzdGVtLgorICAgICAgICAgICAgRnVydGhlcm1vcmUsIHN1cHBvc2UgeW91ciByZWNpcGUgaXMgbmFtZWQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5mb29fMS4zLjAuYmI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIHdvcmsgZGlyZWN0b3J5IHRoZSBidWlsZCBzeXN0ZW0gdXNlcyB0bworICAgICAgICAgICAgYnVpbGQgdGhlIHBhY2thZ2Ugd291bGQgYmUgYXMgZm9sbG93czoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcG9reS9idWlsZC90bXAvd29yay9xZW11eDg2LXBva3ktbGludXgvZm9vLzEuMy4wLXIwCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0idXNpbmctYS1xdWlsdC13b3JrZmxvdyI+CisgICAgICAgIDx0aXRsZT5Vc2luZyBRdWlsdCBpbiBZb3VyIFdvcmtmbG93PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9zYXZhbm5haC5ub25nbnUub3JnL3Byb2plY3RzL3F1aWx0Jz5RdWlsdDwvdWxpbms+CisgICAgICAgICAgICBpcyBhIHBvd2VyZnVsIHRvb2wgdGhhdCBhbGxvd3MgeW91IHRvIGNhcHR1cmUgc291cmNlIGNvZGUgY2hhbmdlcworICAgICAgICAgICAgd2l0aG91dCBoYXZpbmcgYSBjbGVhbiBzb3VyY2UgdHJlZS4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBvdXRsaW5lcyB0aGUgdHlwaWNhbCB3b3JrZmxvdyB5b3UgY2FuIHVzZSB0byBtb2RpZnkKKyAgICAgICAgICAgIHNvdXJjZSBjb2RlLCB0ZXN0IGNoYW5nZXMsIGFuZCB0aGVuIHByZXNlcnZlIHRoZSBjaGFuZ2VzIGluIHRoZQorICAgICAgICAgICAgZm9ybSBvZiBhIHBhdGNoIGFsbCB1c2luZyBRdWlsdC4KKyAgICAgICAgICAgIDxub3RlPjx0aXRsZT5UaXA8L3RpdGxlPgorICAgICAgICAgICAgICAgIFdpdGggcmVnYXJkIHRvIHByZXNlcnZpbmcgY2hhbmdlcyB0byBzb3VyY2UgZmlsZXMsIGlmIHlvdQorICAgICAgICAgICAgICAgIGNsZWFuIGEgcmVjaXBlIG9yIGhhdmUgPGZpbGVuYW1lPnJtX3dvcms8L2ZpbGVuYW1lPiBlbmFibGVkLAorICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1NES19VUkw7I3VzaW5nLWRldnRvb2wtaW4teW91ci1zZGstd29ya2Zsb3cnPjxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gd29ya2Zsb3c8L3VsaW5rPgorICAgICAgICAgICAgICAgIGFzIGRlc2NyaWJlZCBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudAorICAgICAgICAgICAgICAgIGFuZCB0aGUgRXh0ZW5zaWJsZSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKGVTREspIG1hbnVhbAorICAgICAgICAgICAgICAgIGlzIGEgc2FmZXIgZGV2ZWxvcG1lbnQgZmxvdyB0aGFuIHRoZSBmbG93IHRoYXQgdXNlcyBRdWlsdC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9sbG93IHRoZXNlIGdlbmVyYWwgc3RlcHM6CisgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+RmluZCB0aGUgU291cmNlIENvZGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGVtcG9yYXJ5IHNvdXJjZSBjb2RlIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgaXMga2VwdCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZmluZGluZy10aGUtdGVtcG9yYXJ5LXNvdXJjZS1jb2RlJz5GaW5kaW5nIFRlbXBvcmFyeSBTb3VyY2UgQ29kZTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gdG8gbGVhcm4gaG93IHRvIGxvY2F0ZSB0aGUgZGlyZWN0b3J5IHRoYXQgaGFzIHRoZQorICAgICAgICAgICAgICAgICAgICB0ZW1wb3Jhcnkgc291cmNlIGNvZGUgZm9yIGEgcGFydGljdWxhciBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5DaGFuZ2UgWW91ciBXb3JraW5nIERpcmVjdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBiZSBpbiB0aGUgZGlyZWN0b3J5IHRoYXQgaGFzIHRoZSB0ZW1wb3JhcnkKKyAgICAgICAgICAgICAgICAgICAgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgICAgIFRoYXQgZGlyZWN0b3J5IGlzIGRlZmluZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q3JlYXRlIGEgTmV3IFBhdGNoOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEJlZm9yZSBtb2RpZnlpbmcgc291cmNlIGNvZGUsIHlvdSBuZWVkIHRvIGNyZWF0ZSBhIG5ldworICAgICAgICAgICAgICAgICAgICBwYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgVG8gY3JlYXRlIGEgbmV3IHBhdGNoIGZpbGUsIHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cXVpbHQgbmV3PC9maWxlbmFtZT4gYXMgYmVsb3c6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBxdWlsdCBuZXcgbXlfY2hhbmdlcy5wYXRjaAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPk5vdGlmeSBRdWlsdCBhbmQgQWRkIEZpbGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEFmdGVyIGNyZWF0aW5nIHRoZSBwYXRjaCwgeW91IG5lZWQgdG8gbm90aWZ5IFF1aWx0IGFib3V0CisgICAgICAgICAgICAgICAgICAgIHRoZSBmaWxlcyB5b3UgcGxhbiB0byBlZGl0LgorICAgICAgICAgICAgICAgICAgICBZb3Ugbm90aWZ5IFF1aWx0IGJ5IGFkZGluZyB0aGUgZmlsZXMgdG8gdGhlIHBhdGNoIHlvdQorICAgICAgICAgICAgICAgICAgICBqdXN0IGNyZWF0ZWQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBxdWlsdCBhZGQgZmlsZTEuYyBmaWxlMi5jIGZpbGUzLmMKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5FZGl0IHRoZSBGaWxlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBNYWtlIHlvdXIgY2hhbmdlcyBpbiB0aGUgc291cmNlIGNvZGUgdG8gdGhlIGZpbGVzIHlvdSBhZGRlZAorICAgICAgICAgICAgICAgICAgICB0byB0aGUgcGF0Y2guCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlRlc3QgWW91ciBDaGFuZ2VzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgbW9kaWZpZWQgdGhlIHNvdXJjZSBjb2RlLCB0aGUgZWFzaWVzdCB3YXkgdG8KKyAgICAgICAgICAgICAgICAgICAgdGVzdCB5b3VyIGNoYW5nZXMgaXMgYnkgY2FsbGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPiB0YXNrIGFzIHNob3duIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWMgY29tcGlsZSAtZiA8cmVwbGFjZWFibGU+cGFja2FnZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT4tZjwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT4tLWZvcmNlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uIGZvcmNlcyB0aGUgc3BlY2lmaWVkIHRhc2sgdG8gZXhlY3V0ZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGZpbmQgcHJvYmxlbXMgd2l0aCB5b3VyIGNvZGUsIHlvdSBjYW4ganVzdCBrZWVwCisgICAgICAgICAgICAgICAgICAgIGVkaXRpbmcgYW5kIHJlLXRlc3RpbmcgaXRlcmF0aXZlbHkgdW50aWwgdGhpbmdzIHdvcmsKKyAgICAgICAgICAgICAgICAgICAgYXMgZXhwZWN0ZWQuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgQWxsIHRoZSBtb2RpZmljYXRpb25zIHlvdSBtYWtlIHRvIHRoZSB0ZW1wb3JhcnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBjb2RlIGRpc2FwcGVhciBvbmNlIHlvdSBydW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtY2xlYW4nPjxmaWxlbmFtZT5kb19jbGVhbjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtY2xlYW5hbGwnPjxmaWxlbmFtZT5kb19jbGVhbmFsbDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tzIHVzaW5nIEJpdEJha2UgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIC1jIGNsZWFuIDxyZXBsYWNlYWJsZT5wYWNrYWdlPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSAtYyBjbGVhbmFsbCA8cmVwbGFjZWFibGU+cGFja2FnZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgTW9kaWZpY2F0aW9ucyB3aWxsIGFsc28gZGlzYXBwZWFyIGlmIHlvdSB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cm1fd29yazwvZmlsZW5hbWU+IGZlYXR1cmUgYXMgZGVzY3JpYmVkCisgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3FzLWJ1aWxkaW5nLWltYWdlcyc+QnVpbGRpbmcgSW1hZ2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkdlbmVyYXRlIHRoZSBQYXRjaDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdXIgY2hhbmdlcyB3b3JrIGFzIGV4cGVjdGVkLCB5b3UgbmVlZCB0byB1c2UgUXVpbHQKKyAgICAgICAgICAgICAgICAgICAgdG8gZ2VuZXJhdGUgdGhlIGZpbmFsIHBhdGNoIHRoYXQgY29udGFpbnMgYWxsIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgbW9kaWZpY2F0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHF1aWx0IHJlZnJlc2gKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50LCB0aGUgPGZpbGVuYW1lPm15X2NoYW5nZXMucGF0Y2g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlIGhhcyBhbGwgeW91ciBlZGl0cyBtYWRlIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZTEuYzwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZmlsZTIuYzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmZpbGUzLmM8L2ZpbGVuYW1lPiBmaWxlcy48L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IGNhbiBmaW5kIHRoZSByZXN1bHRpbmcgcGF0Y2ggZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhdGNoZXMvPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5TPC9maWxlbmFtZT4pIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q29weSB0aGUgUGF0Y2ggRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBGb3Igc2ltcGxpY2l0eSwgY29weSB0aGUgcGF0Y2ggZmlsZSBpbnRvIGEgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIG5hbWVkIDxmaWxlbmFtZT5maWxlczwvZmlsZW5hbWU+LCB3aGljaCB5b3UgY2FuIGNyZWF0ZQorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgdGhhdCBob2xkcyB0aGUgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4pIGZpbGUgb3IgdGhlIGFwcGVuZAorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBQbGFjaW5nIHRoZSBwYXRjaCBoZXJlIGd1YXJhbnRlZXMgdGhhdCB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSB3aWxsIGZpbmQgdGhlIHBhdGNoLgorICAgICAgICAgICAgICAgICAgICBOZXh0LCBhZGQgdGhlIHBhdGNoIGludG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+U1JDX1VSSTwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly9teV9jaGFuZ2VzLnBhdGNoIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LWFwcGRldi1kZXZzaGVsbCI+CisgICAgICAgIDx0aXRsZT5Vc2luZyBhIERldmVsb3BtZW50IFNoZWxsPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gZGVidWdnaW5nIGNlcnRhaW4gY29tbWFuZHMgb3IgZXZlbiB3aGVuIGp1c3QgZWRpdGluZyBwYWNrYWdlcywKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+IGNhbiBiZSBhIHVzZWZ1bCB0b29sLgorICAgICAgICAgICAgV2hlbiB5b3UgaW52b2tlIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+LCBhbGwgdGFza3MgdXAgdG8gYW5kCisgICAgICAgICAgICBpbmNsdWRpbmcKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1wYXRjaCc+PGZpbGVuYW1lPmRvX3BhdGNoPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgYXJlIHJ1biBmb3IgdGhlIHNwZWNpZmllZCB0YXJnZXQuCisgICAgICAgICAgICBUaGVuLCBhIG5ldyB0ZXJtaW5hbCBpcyBvcGVuZWQgYW5kIHlvdSBhcmUgcGxhY2VkIGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgdGhlIHNvdXJjZSBkaXJlY3RvcnkuCisgICAgICAgICAgICBJbiB0aGUgbmV3IHRlcm1pbmFsLCBhbGwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZC1yZWxhdGVkIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUKKyAgICAgICAgICAgIHN0aWxsIGRlZmluZWQgc28geW91IGNhbiB1c2UgY29tbWFuZHMgc3VjaCBhcyA8ZmlsZW5hbWU+Y29uZmlndXJlPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlIGNvbW1hbmRzIGV4ZWN1dGUganVzdCBhcyBpZiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3ZXJlIGV4ZWN1dGluZyB0aGVtLgorICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB3b3JraW5nIHRoaXMgd2F5IGNhbiBiZSBoZWxwZnVsIHdoZW4gZGVidWdnaW5nIGEgYnVpbGQgb3IgcHJlcGFyaW5nCisgICAgICAgICAgICBzb2Z0d2FyZSB0byBiZSB1c2VkIHdpdGggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHRoYXQgdXNlcyA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPiBvbiBhIHRhcmdldCBuYW1lZAorICAgICAgICAgICAgPGZpbGVuYW1lPm1hdGNoYm94LWRlc2t0b3A8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIG1hdGNoYm94LWRlc2t0b3AgLWMgZGV2c2hlbGwKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBjb21tYW5kIHNwYXducyBhIHRlcm1pbmFsIHdpdGggYSBzaGVsbCBwcm9tcHQgd2l0aGluIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBUaGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU9FX1RFUk1JTkFMJz48ZmlsZW5hbWU+T0VfVEVSTUlOQUw8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBjb250cm9scyB3aGF0IHR5cGUgb2Ygc2hlbGwgaXMgb3BlbmVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3Igc3Bhd25lZCB0ZXJtaW5hbHMsIHRoZSBmb2xsb3dpbmcgb2NjdXJzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4gdmFyaWFibGUgaW5jbHVkZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIGNyb3NzLXRvb2xjaGFpbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIDxmaWxlbmFtZT5wa2djb25maWc8L2ZpbGVuYW1lPiB2YXJpYWJsZXMgZmluZCB0aGUgY29ycmVjdAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnBjPC9maWxlbmFtZT4gZmlsZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSA8ZmlsZW5hbWU+Y29uZmlndXJlPC9maWxlbmFtZT4gY29tbWFuZCBmaW5kcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBzaXRlIGZpbGVzIGFzIHdlbGwgYXMgYW55IG90aGVyIG5lY2Vzc2FyeSBmaWxlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaXRoaW4gdGhpcyBlbnZpcm9ubWVudCwgeW91IGNhbiBydW4gY29uZmlndXJlIG9yIGNvbXBpbGUKKyAgICAgICAgICAgIGNvbW1hbmRzIGFzIGlmIHRoZXkgd2VyZSBiZWluZyBydW4gYnkKKyAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGl0c2VsZi4KKyAgICAgICAgICAgIEFzIG5vdGVkIGVhcmxpZXIsIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbHNvIGF1dG9tYXRpY2FsbHkgY2hhbmdlcyB0byB0aGUKKyAgICAgICAgICAgIFNvdXJjZSBEaXJlY3RvcnkgKDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC91bGluaz4pLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBtYW51YWxseSBydW4gYSBzcGVjaWZpYyB0YXNrIHVzaW5nIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgcnVuIHRoZSBjb3JyZXNwb25kaW5nIDxmaWxlbmFtZT5ydW4uKjwvZmlsZW5hbWU+IHNjcmlwdCBpbgorICAgICAgICAgICAgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fS90ZW1wPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGRpcmVjdG9yeSAoZS5nLiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5ydW4uZG9fY29uZmlndXJlLjwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnBpZDwvcmVwbGFjZWFibGU+KS4KKyAgICAgICAgICAgIElmIGEgdGFzaydzIHNjcmlwdCBkb2VzIG5vdCBleGlzdCwgd2hpY2ggd291bGQgYmUgdGhlIGNhc2UgaWYgdGhlIHRhc2sgd2FzCisgICAgICAgICAgICBza2lwcGVkIGJ5IHdheSBvZiB0aGUgc3N0YXRlIGNhY2hlLCB5b3UgY2FuIGNyZWF0ZSB0aGUgdGFzayBieSBmaXJzdCBydW5uaW5nCisgICAgICAgICAgICBpdCBvdXRzaWRlIG9mIHRoZSA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1jIDxyZXBsYWNlYWJsZT50YXNrPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDxub3RlPjx0aXRsZT5Ob3RlczwvdGl0bGU+CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkV4ZWN1dGlvbiBvZiBhIHRhc2sncyA8ZmlsZW5hbWU+cnVuLio8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0IGFuZCBCaXRCYWtlJ3MgZXhlY3V0aW9uIG9mIGEgdGFzayBhcmUgaWRlbnRpY2FsLgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHJ1bm5pbmcgdGhlIHNjcmlwdCByZS1ydW5zIHRoZSB0YXNrCisgICAgICAgICAgICAgICAgICAgICAgICBqdXN0IGFzIGl0IHdvdWxkIGJlIHJ1biB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIC1jPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QW55IDxmaWxlbmFtZT5ydW4uKjwvZmlsZW5hbWU+IGZpbGUgdGhhdCBkb2VzIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSBhIDxmaWxlbmFtZT4ucGlkPC9maWxlbmFtZT4gZXh0ZW5zaW9uIGlzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbGljIGxpbmsgKHN5bWxpbmspIHRvIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG9mIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUmVtZW1iZXIsIHRoYXQgdGhlIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+IGlzIGEgbWVjaGFuaXNtIHRoYXQgYWxsb3dzCisgICAgICAgICAgICB5b3UgdG8gZ2V0IGludG8gdGhlIEJpdEJha2UgdGFzayBleGVjdXRpb24gZW52aXJvbm1lbnQuCisgICAgICAgICAgICBBbmQgYXMgc3VjaCwgYWxsIGNvbW1hbmRzIG11c3QgYmUgY2FsbGVkIGp1c3QgYXMgQml0QmFrZSB3b3VsZCBjYWxsIHRoZW0uCisgICAgICAgICAgICBUaGF0IG1lYW5zIHlvdSBuZWVkIHRvIHByb3ZpZGUgdGhlIGFwcHJvcHJpYXRlIG9wdGlvbnMgZm9yCisgICAgICAgICAgICBjcm9zcy1jb21waWxhdGlvbiBhbmQgc28gZm9ydGggYXMgYXBwbGljYWJsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgYXJlIGZpbmlzaGVkIHVzaW5nIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+LCBleGl0IHRoZSBzaGVsbAorICAgICAgICAgICAgb3IgY2xvc2UgdGhlIHRlcm1pbmFsIHdpbmRvdy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxub3RlPjx0aXRsZT5Ob3RlczwvdGl0bGU+CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgd29ydGggcmVtZW1iZXJpbmcgdGhhdCB3aGVuIHVzaW5nIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIHVzZSB0aGUgZnVsbCBjb21waWxlciBuYW1lIHN1Y2ggYXMgPGZpbGVuYW1lPmFybS1wb2t5LWxpbnV4LWdudWVhYmktZ2NjPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiBqdXN0IHVzaW5nIDxmaWxlbmFtZT5nY2M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNhbWUgYXBwbGllcyB0byBvdGhlciBhcHBsaWNhdGlvbnMgc3VjaCBhcyA8ZmlsZW5hbWU+YmludXRpbHM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYnRvb2w8L2ZpbGVuYW1lPiBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2Ugc2V0cyB1cCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc3VjaCBhcyA8ZmlsZW5hbWU+Q0M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB0byBhc3Npc3QgYXBwbGljYXRpb25zLCBzdWNoIGFzIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gdG8gZmluZCB0aGUgY29ycmVjdCB0b29scy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBhbHNvIHdvcnRoIG5vdGluZyB0aGF0IDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+IHN0aWxsIHdvcmtzIG92ZXIKKyAgICAgICAgICAgICAgICAgICAgWDExIGZvcndhcmRpbmcgYW5kIHNpbWlsYXIgc2l0dWF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LWFwcGRldi1kZXZweXNoZWxsIj4KKyAgICAgICAgPHRpdGxlPlVzaW5nIGEgRGV2ZWxvcG1lbnQgUHl0aG9uIFNoZWxsPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNpbWlsYXIgdG8gd29ya2luZyB3aXRoaW4gYSBkZXZlbG9wbWVudCBzaGVsbCBhcyBkZXNjcmliZWQgaW4KKyAgICAgICAgICAgIHRoZSBwcmV2aW91cyBzZWN0aW9uLCB5b3UgY2FuIGFsc28gc3Bhd24gYW5kIHdvcmsgd2l0aGluIGFuCisgICAgICAgICAgICBpbnRlcmFjdGl2ZSBQeXRob24gZGV2ZWxvcG1lbnQgc2hlbGwuCisgICAgICAgICAgICBXaGVuIGRlYnVnZ2luZyBjZXJ0YWluIGNvbW1hbmRzIG9yIGV2ZW4gd2hlbiBqdXN0IGVkaXRpbmcgcGFja2FnZXMsCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2cHlzaGVsbDwvZmlsZW5hbWU+IGNhbiBiZSBhIHVzZWZ1bCB0b29sLgorICAgICAgICAgICAgV2hlbiB5b3UgaW52b2tlIDxmaWxlbmFtZT5kZXZweXNoZWxsPC9maWxlbmFtZT4sIGFsbCB0YXNrcyB1cCB0byBhbmQKKyAgICAgICAgICAgIGluY2x1ZGluZworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLXBhdGNoJz48ZmlsZW5hbWU+ZG9fcGF0Y2g8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICBhcmUgcnVuIGZvciB0aGUgc3BlY2lmaWVkIHRhcmdldC4KKyAgICAgICAgICAgIFRoZW4gYSBuZXcgdGVybWluYWwgaXMgb3BlbmVkLgorICAgICAgICAgICAgQWRkaXRpb25hbGx5LCBrZXkgUHl0aG9uIG9iamVjdHMgYW5kIGNvZGUgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2FtZQorICAgICAgICAgICAgd2F5IHRoZXkgYXJlIHRvIEJpdEJha2UgdGFza3MsIGluIHBhcnRpY3VsYXIsIHRoZSBkYXRhIHN0b3JlICdkJy4KKyAgICAgICAgICAgIFNvLCBjb21tYW5kcyBzdWNoIGFzIHRoZSBmb2xsb3dpbmcgYXJlIHVzZWZ1bCB3aGVuIGV4cGxvcmluZyB0aGUgZGF0YQorICAgICAgICAgICAgc3RvcmUgYW5kIHJ1bm5pbmcgZnVuY3Rpb25zOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBweWRldnNoZWxsPiBkLmdldFZhcigiU1RBR0lOR19ESVIiLCBUcnVlKQorICAgICAnL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cycKKyAgICAgcHlkZXZzaGVsbD4gZC5nZXRWYXIoIlNUQUdJTkdfRElSIiwgRmFsc2UpCisgICAgICcke1RNUERJUn0vc3lzcm9vdHMnCisgICAgIHB5ZGV2c2hlbGw+IGQuc2V0VmFyKCJGT08iLCAiYmFyIikKKyAgICAgcHlkZXZzaGVsbD4gZC5nZXRWYXIoIkZPTyIsIFRydWUpCisgICAgICdiYXInCisgICAgIHB5ZGV2c2hlbGw+IGQuZGVsVmFyKCJGT08iKQorICAgICBweWRldnNoZWxsPiBkLmdldFZhcigiRk9PIiwgVHJ1ZSkKKyAgICAgcHlkZXZzaGVsbD4gYmIuYnVpbGQuZXhlY19mdW5jKCJkb191bnBhY2siLCBkKQorICAgICBweWRldnNoZWxsPgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIGNvbW1hbmRzIGV4ZWN1dGUganVzdCBhcyBpZiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3ZXJlIGV4ZWN1dGluZyB0aGVtLgorICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB3b3JraW5nIHRoaXMgd2F5IGNhbiBiZSBoZWxwZnVsIHdoZW4gZGVidWdnaW5nIGEgYnVpbGQgb3IgcHJlcGFyaW5nCisgICAgICAgICAgICBzb2Z0d2FyZSB0byBiZSB1c2VkIHdpdGggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHRoYXQgdXNlcyA8ZmlsZW5hbWU+ZGV2cHlzaGVsbDwvZmlsZW5hbWU+IG9uIGEgdGFyZ2V0IG5hbWVkCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWF0Y2hib3gtZGVza3RvcDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbWF0Y2hib3gtZGVza3RvcCAtYyBkZXZweXNoZWxsCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgY29tbWFuZCBzcGF3bnMgYSB0ZXJtaW5hbCBhbmQgcGxhY2VzIHlvdSBpbiBhbiBpbnRlcmFjdGl2ZQorICAgICAgICAgICAgUHl0aG9uIGludGVycHJldGVyIHdpdGhpbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIGVudmlyb25tZW50LgorICAgICAgICAgICAgVGhlIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1PRV9URVJNSU5BTCc+PGZpbGVuYW1lPk9FX1RFUk1JTkFMPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgdmFyaWFibGUgY29udHJvbHMgd2hhdCB0eXBlIG9mIHNoZWxsIGlzIG9wZW5lZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgYXJlIGZpbmlzaGVkIHVzaW5nIDxmaWxlbmFtZT5kZXZweXNoZWxsPC9maWxlbmFtZT4sIHlvdQorICAgICAgICAgICAgY2FuIGV4aXQgdGhlIHNoZWxsIGVpdGhlciBieSB1c2luZyBDdHJsK2Qgb3IgY2xvc2luZyB0aGUgdGVybWluYWwKKyAgICAgICAgICAgIHdpbmRvdy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKwogICAgIDxzZWN0aW9uIGlkPSdwbGF0ZGV2LWJ1aWxkaW5nLXRhcmdldHMtd2l0aC1tdWx0aXBsZS1jb25maWd1cmF0aW9ucyc+CiAgICAgICAgIDx0aXRsZT5CdWlsZGluZyBUYXJnZXRzIHdpdGggTXVsdGlwbGUgQ29uZmlndXJhdGlvbnM8L3RpdGxlPgogCkBAIC00MTc3LDcgKzQzMTUsNyBAQAogICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgU2V2ZXJhbCBleGFtcGxlcyBleGlzdCBpbiB0aGUKICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1za2VsZXRvbjwvZmlsZW5hbWU+IGxheWVyIGZvdW5kIGluIHRoZQotICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz46CisgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz46CiAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb25mL211bHRpbGliLWV4YW1wbGUuY29uZjwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGU8L3BhcmE+PC9saXN0aXRlbT4KQEAgLTQyMDMsNyArNDM0MSw3IEBACiAgICAgICAgICAgICAgICAgICAgIE1hbnkgc3RhbmRhcmQgcmVjaXBlcyBhcmUgYWxyZWFkeSBleHRlbmRlZCBhbmQgc3VwcG9ydCBtdWx0aXBsZSBsaWJyYXJpZXMuCiAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY2hlY2sgaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvbXVsdGlsaWIuY29uZjwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4gdG8gc2VlIGhvdyB0aGlzIGlzCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPiB0byBzZWUgaG93IHRoaXMgaXMKICAgICAgICAgICAgICAgICAgICAgZG9uZSB1c2luZyB0aGUKICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJCQ0xBU1NFWFRFTkQnPjxmaWxlbmFtZT5CQkNMQVNTRVhURU5EPC9maWxlbmFtZT48L3VsaW5rPgogICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KQEAgLTQyMzksNyArNDM3Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmF0aW9uIG9mIG11bHRpcGxlIGxpYnJhcmllcyB5b3Ugd2FudCB0byBidWlsZC4KICAgICAgICAgICAgICAgICAgICAgWW91IGFjY29tcGxpc2ggdGhpcyB0aHJvdWdoIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KICAgICAgICAgICAgICAgICAgICAgQW4gZXhhbXBsZSBjb25maWd1cmF0aW9uIHdvdWxkIGJlIGFzIGZvbGxvd3M6CiAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgTUFDSElORSA9ICJxZW11eDg2LTY0IgpAQCAtNDMxNSw3ICs0NDUzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIHVuaXF1ZSBhcmNoaXRlY3R1cmUgaXMgZGVmaW5lZCBmb3IgdGhlIE11bHRpbGliIHBhY2thZ2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsb25nIHdpdGggY3JlYXRpbmcgYSB1bmlxdWUgZGVwbG95IGZvbGRlciB1bmRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50bXAvZGVwbG95L3JwbTwvZmlsZW5hbWU+IGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBjb25zaWRlciA8ZmlsZW5hbWU+bGliMzI8L2ZpbGVuYW1lPiBpbiBhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXV4ODYtNjQ8L2ZpbGVuYW1lPiBpbWFnZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcG9zc2libGUgYXJjaGl0ZWN0dXJlcyBpbiB0aGUgc3lzdGVtIGFyZSAiYWxsIiwgInFlbXV4ODZfNjQiLApAQCAtNDY3NSw4ICs0ODEzLDggQEAKICAgICAgICAgPC9wYXJhPgogICAgIDwvc2VjdGlvbj4KIAotICAgIDxzZWN0aW9uIGlkPSdjcmVhdGluZy1wYXJ0aXRpb25lZC1pbWFnZXMnPgotICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgUGFydGl0aW9uZWQgSW1hZ2VzPC90aXRsZT4KKyAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmctcGFydGl0aW9uZWQtaW1hZ2VzLXVzaW5nLXdpYyc+CisgICAgICAgIDx0aXRsZT5DcmVhdGluZyBQYXJ0aXRpb25lZCBJbWFnZXMgVXNpbmcgV2ljPC90aXRsZT4KIAogICAgICAgICA8cGFyYT4KICAgICAgICAgICAgIENyZWF0aW5nIGFuIGltYWdlIGZvciBhIHBhcnRpY3VsYXIgaGFyZHdhcmUgdGFyZ2V0IHVzaW5nIHRoZQpAQCAtNDY5MiwxMTI0ICs0ODMwLDc4MSBAQAogICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBZb3UgY2FuIGdlbmVyYXRlIHBhcnRpdGlvbmVkIGltYWdlcwotICAgICAgICAgICAgKDxyZXBsYWNlYWJsZT5pbWFnZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi53aWM8L2ZpbGVuYW1lPikKLSAgICAgICAgICAgIHR3byB3YXlzOiB1c2luZyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhbmQgYnkgcnVubmluZwotICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBJbWFnZSBDcmVhdG9yIFdpYyBkaXJlY3RseS4KLSAgICAgICAgICAgIFRoZSBmb3JtZXIgd2F5IGlzIHByZWZlcmFibGUgYXMgaXQgaXMgZWFzaWVyIHRvIHVzZSBhbmQgdW5kZXJzdGFuZC4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gY29tbWFuZCBnZW5lcmF0ZXMgcGFydGl0aW9uZWQKKyAgICAgICAgICAgIGltYWdlcyBmcm9tIGV4aXN0aW5nIE9wZW5FbWJlZGRlZCBidWlsZCBhcnRpZmFjdHMuCisgICAgICAgICAgICBJbWFnZSBnZW5lcmF0aW9uIGlzIGRyaXZlbiBieSBwYXJ0aXRpb25pbmcgY29tbWFuZHMKKyAgICAgICAgICAgIGNvbnRhaW5lZCBpbiBhbiBPcGVuZW1iZWRkZWQga2lja3N0YXJ0IGZpbGUKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+LndrczwvZmlsZW5hbWU+KSBzcGVjaWZpZWQgZWl0aGVyIGRpcmVjdGx5IG9uCisgICAgICAgICAgICB0aGUgY29tbWFuZCBsaW5lIG9yIGFzIG9uZSBvZiBhIHNlbGVjdGlvbiBvZiBjYW5uZWQKKyAgICAgICAgICAgIGtpY2tzdGFydCBmaWxlcyBhcyBzaG93biB3aXRoIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPndpYyBsaXN0IGltYWdlczwvZmlsZW5hbWU+IGNvbW1hbmQgaW4gdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctYS1wcm92aWRlZC1raWNrc3RhcnQtZmlsZSc+VXNpbmcgYW4gRXhpc3RpbmcgS2lja3N0YXJ0IEZpbGU8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIFdoZW4geW91IGFwcGx5IHRoZSBjb21tYW5kIHRvIGEgZ2l2ZW4gc2V0IG9mIGJ1aWxkCisgICAgICAgICAgICBhcnRpZmFjdHMsIHRoZSByZXN1bHQgaXMgYW4gaW1hZ2Ugb3Igc2V0IG9mIGltYWdlcyB0aGF0CisgICAgICAgICAgICBjYW4gYmUgZGlyZWN0bHkgd3JpdHRlbiBvbnRvIG1lZGlhIGFuZCB1c2VkIG9uIGEgcGFydGljdWxhcgorICAgICAgICAgICAgc3lzdGVtLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgRm9yIGEga2lja3N0YXJ0IGZpbGUgcmVmZXJlbmNlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I29wZW5lbWJlZGRlZC1raWNrc3RhcnQtd2tzLXJlZmVyZW5jZSc+T3BlbkVtYmVkZGVkIEtpY2tzdGFydCAoPGZpbGVuYW1lPi53a3M8L2ZpbGVuYW1lPikgUmVmZXJlbmNlPC91bGluaz4iCisgICAgICAgICAgICAgICAgQ2hhcHRlciBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICA8L3BhcmE+CiAKLSAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLXdpYy1pbWFnZXMtb2UnPgotICAgICAgICAgICAgPHRpdGxlPkNyZWF0aW5nIFBhcnRpdGlvbmVkIEltYWdlczwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBjb21tYW5kIGFuZCB0aGUgaW5mcmFzdHJ1Y3R1cmUKKyAgICAgICAgICAgIGl0IGlzIGJhc2VkIG9uIGlzIGJ5IGRlZmluaXRpb24gaW5jb21wbGV0ZS4KKyAgICAgICAgICAgIFRoZSBwdXJwb3NlIG9mIHRoZSBjb21tYW5kIGlzIHRvIGFsbG93IHRoZSBnZW5lcmF0aW9uIG9mCisgICAgICAgICAgICBjdXN0b21pemVkIGltYWdlcywgYW5kIGFzIHN1Y2gsIHdhcyBkZXNpZ25lZCB0byBiZQorICAgICAgICAgICAgY29tcGxldGVseSBleHRlbnNpYmxlIHRocm91Z2ggYSBwbHVnLWluIGludGVyZmFjZS4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN3aWMtcGx1Zy1pbnMtaW50ZXJmYWNlJz5XaWMgUGx1Zy1JbnMgSW50ZXJmYWNlPC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yIGluZm9ybWF0aW9uCisgICAgICAgICAgICBvbiB0aGVzZSBwbHVnLWlucy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIHNvbWUgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBvbiBXaWMsCisgICAgICAgICAgICBkZXNjcmliZXMgd2hhdCB5b3UgbmVlZCB0byBoYXZlIGluCisgICAgICAgICAgICBwbGFjZSB0byBydW4gdGhlIHRvb2wsIHByb3ZpZGVzIGluc3RydWN0aW9uIG9uIGhvdyB0byB1c2UKKyAgICAgICAgICAgIHRoZSBXaWMgdXRpbGl0eSwgYW5kIHByb3ZpZGVzIHNldmVyYWwgZXhhbXBsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nd2ljLWJhY2tncm91bmQnPgorICAgICAgICAgICAgPHRpdGxlPkJhY2tncm91bmQ8L3RpdGxlPgogCiAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjYW4gZ2VuZXJhdGUKLSAgICAgICAgICAgICAgICBwYXJ0aXRpb25lZCBpbWFnZXMgdGhlIHNhbWUgd2F5IGFzIGl0IGdlbmVyYXRlcwotICAgICAgICAgICAgICAgIGFueSBvdGhlciBpbWFnZSB0eXBlLgotICAgICAgICAgICAgICAgIFRvIGdlbmVyYXRlIGEgcGFydGl0aW9uZWQgaW1hZ2UsIHlvdSBuZWVkIHRvIG1vZGlmeQotICAgICAgICAgICAgICAgIHR3byB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIHNvbWUgYmFja2dyb3VuZCBvbiB0aGUgV2ljIHV0aWxpdHkuCisgICAgICAgICAgICAgICAgV2hpbGUgbm9uZSBvZiB0aGlzIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkIHRvIHVzZQorICAgICAgICAgICAgICAgIFdpYywgeW91IG1pZ2h0IGZpbmQgaXQgaW50ZXJlc3RpbmcuCiAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgIldpYyIgaXMgZGVyaXZlZCBmcm9tIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2UgQ3JlYXRvciAob2VpYykuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgIm9lIiBkaXBodGhvbmcgaW4gIm9laWMiIHdhcyBwcm9tb3RlZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGxldHRlciAidyIsIGJlY2F1c2UgIm9laWMiIGlzIGJvdGggZGlmZmljdWx0IHRvCisgICAgICAgICAgICAgICAgICAgICAgICByZW1lbWJlciBhbmQgdG8gcHJvbm91bmNlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdpYyBpcyBsb29zZWx5IGJhc2VkIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgTWVlZ28gSW1hZ2UgQ3JlYXRvciAoPGZpbGVuYW1lPm1pYzwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWV3b3JrLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIFdpYyBpbXBsZW1lbnRhdGlvbiBoYXMgYmVlbgorICAgICAgICAgICAgICAgICAgICAgICAgaGVhdmlseSBtb2RpZmllZCB0byBtYWtlIGRpcmVjdCB1c2Ugb2YgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBhcnRpZmFjdHMgaW5zdGVhZCBvZiBwYWNrYWdlIGluc3RhbGxhdGlvbiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGFyZSBhbHJlYWR5IGluY29ycG9yYXRlZCB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYXJ0aWZhY3RzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdpYyBpcyBhIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kYWxvbmUgdXRpbGl0eSB0aGF0IGluaXRpYWxseSBwcm92aWRlcworICAgICAgICAgICAgICAgICAgICAgICAgZWFzaWVyLXRvLXVzZSBhbmQgbW9yZSBmbGV4aWJsZSByZXBsYWNlbWVudHMgZm9yIGFuCisgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZyBmdW5jdGlvbmFsaXR5IGluIE9FIENvcmUncworICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtaW1hZ2UtbGl2ZSc+PGZpbGVuYW1lPmltYWdlLWxpdmU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBhbmQgPGZpbGVuYW1lPm1rZWZpZGlzay5zaDwvZmlsZW5hbWU+IHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdpYyBhbmQgdGhvc2UgZXhhbXBsZXMgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgd2l0aCBXaWMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIHRob3NlIHNjcmlwdHMgaXMgaW1wbGVtZW50ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGEgZ2VuZXJhbC1wdXJwb3NlIHBhcnRpdGlvbmluZyBsYW5ndWFnZSwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIFJlZGhhdCBraWNrc3RhcnQgc3ludGF4LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3dpYy1yZXF1aXJlbWVudHMnPgorICAgICAgICAgICAgPHRpdGxlPlJlcXVpcmVtZW50czwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIHVzZSB0aGUgV2ljIHV0aWxpdHkgd2l0aCB0aGUgT3BlbkVtYmVkZGVkIEJ1aWxkCisgICAgICAgICAgICAgICAgc3lzdGVtLCB5b3VyIHN5c3RlbSBuZWVkcyB0byBtZWV0IHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICByZXF1aXJlbWVudHM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIExpbnV4IGRpc3RyaWJ1dGlvbiBvbiB5b3VyIGRldmVsb3BtZW50IGhvc3QgbXVzdAorICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNkZXRhaWxlZC1zdXBwb3J0ZWQtZGlzdHJvcyc+U3VwcG9ydGVkIExpbnV4IERpc3RyaWJ1dGlvbnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIGRpc3RyaWJ1dGlvbnMgdGhhdCBzdXBwb3J0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc3RhbmRhcmQgc3lzdGVtIHV0aWxpdGllcywgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNwPC9maWxlbmFtZT4sIG11c3QgYmUgaW5zdGFsbGVkIG9uIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IGhvc3Qgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGhhdmUgc291cmNlZCB0aGUgYnVpbGQgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldHVwIHNjcmlwdCAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+KQorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGhhdmUgdGhlIGJ1aWxkIGFydGlmYWN0cyBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUsIHdoaWNoIHR5cGljYWxseSBtZWFucyB0aGF0IHlvdSBtdXN0CisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlIGFscmVhZHkgY3JlYXRlZCBhbiBpbWFnZSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5lbWJlZGRlZCBidWlsZCBzeXN0ZW0gKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICBXaGlsZSBpdCBtaWdodCBzZWVtIHJlZHVuZGFudCB0byBnZW5lcmF0ZSBhbiBpbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgaW4gb3JkZXIgdG8gY3JlYXRlIGFuIGltYWdlIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBXaWMsIHRoZSBjdXJyZW50IHZlcnNpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIFdpYyByZXF1aXJlcyB0aGUgYXJ0aWZhY3RzCisgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgZm9ybSBnZW5lcmF0ZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGJ1aWxkIHNldmVyYWwgbmF0aXZlIHRvb2xzLCB3aGljaCBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWx0IHRvIHJ1biBvbiB0aGUgYnVpbGQgc3lzdGVtOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgcGFydGVkLW5hdGl2ZSBkb3Nmc3Rvb2xzLW5hdGl2ZSBtdG9vbHMtbmF0aXZlCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgogICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZSAid2ljIiBhcyBwYXJ0IG9mIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L3VsaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCiAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgogICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZSB0aGUgbmFtZSBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J29wZW5lbWJlZGRlZC1raWNrc3RhcnQtd2tzLXJlZmVyZW5jZSc+d2ljIGtpY2tzdGFydCBmaWxlPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjb3BlbmVtYmVkZGVkLWtpY2tzdGFydC13a3MtcmVmZXJlbmNlJz53aWMga2lja3N0YXJ0IGZpbGU8L3VsaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgYXMgcGFydCBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1XS1NfRklMRSc+PGZpbGVuYW1lPldLU19GSUxFPC9maWxlbmFtZT48L3VsaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUKICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIEZ1cnRoZXIgc3RlcHMgdG8gZ2VuZXJhdGUgYSBwYXJ0aXRpb25lZCBpbWFnZQotICAgICAgICAgICAgICAgIGFyZSB0aGUgc2FtZSBhcyBmb3IgYW55IG90aGVyIGltYWdlIHR5cGUuCi0gICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGltYWdlIHR5cGVzLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2J1aWxkaW5nLWltYWdlcyc+QnVpbGRpbmcgSW1hZ2VzPC9saW5rPiIKLSAgICAgICAgICAgICAgICBzZWN0aW9uLgogICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L3NlY3Rpb24+CiAKLSAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0ZS13aWMtaW1hZ2VzLXdpYyc+Ci0gICAgICAgICAgICA8dGl0bGU+VXNpbmcgT3BlbkVtYmVkZGVkIEltYWdlIENyZWF0b3IgV2ljIHRvIEdlbmVyYXRlIFBhcnRpdGlvbmVkIEltYWdlczwvdGl0bGU+CisgICAgICAgIDxzZWN0aW9uIGlkPSd3aWMtZ2V0dGluZy1oZWxwJz4KKyAgICAgICAgICAgIDx0aXRsZT5HZXR0aW5nIEhlbHA8L3RpdGxlPgogCiAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGNvbW1hbmQgZ2VuZXJhdGVzIHBhcnRpdGlvbmVkCi0gICAgICAgICAgICAgICAgaW1hZ2VzIGZyb20gZXhpc3RpbmcgT3BlbkVtYmVkZGVkIGJ1aWxkIGFydGlmYWN0cy4KLSAgICAgICAgICAgICAgICBJbWFnZSBnZW5lcmF0aW9uIGlzIGRyaXZlbiBieSBwYXJ0aXRpb25pbmcgY29tbWFuZHMKLSAgICAgICAgICAgICAgICBjb250YWluZWQgaW4gYW4gT3BlbmVtYmVkZGVkIGtpY2tzdGFydCBmaWxlCi0gICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4ud2tzPC9maWxlbmFtZT4pIHNwZWNpZmllZCBlaXRoZXIgZGlyZWN0bHkgb24KLSAgICAgICAgICAgICAgICB0aGUgY29tbWFuZCBsaW5lIG9yIGFzIG9uZSBvZiBhIHNlbGVjdGlvbiBvZiBjYW5uZWQKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LndrczwvZmlsZW5hbWU+IGZpbGVzIGFzIHNob3duIHdpdGggdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpYyBsaXN0IGltYWdlczwvZmlsZW5hbWU+IGNvbW1hbmQgaW4gdGhlCi0gICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWEtcHJvdmlkZWQta2lja3N0YXJ0LWZpbGUnPlVzaW5nIGFuIEV4aXN0aW5nIEtpY2tzdGFydCBGaWxlPC9saW5rPiIKLSAgICAgICAgICAgICAgICBzZWN0aW9uLgotICAgICAgICAgICAgICAgIFdoZW4geW91IGFwcGx5IHRoZSBjb21tYW5kIHRvIGEgZ2l2ZW4gc2V0IG9mIGJ1aWxkCi0gICAgICAgICAgICAgICAgYXJ0aWZhY3RzLCB0aGUgcmVzdWx0IGlzIGFuIGltYWdlIG9yIHNldCBvZiBpbWFnZXMgdGhhdAotICAgICAgICAgICAgICAgIGNhbiBiZSBkaXJlY3RseSB3cml0dGVuIG9udG8gbWVkaWEgYW5kIHVzZWQgb24gYSBwYXJ0aWN1bGFyCi0gICAgICAgICAgICAgICAgc3lzdGVtLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGNvbW1hbmQgYW5kIHRoZSBpbmZyYXN0cnVjdHVyZQotICAgICAgICAgICAgICAgIGl0IGlzIGJhc2VkIG9uIGlzIGJ5IGRlZmluaXRpb24gaW5jb21wbGV0ZS4KLSAgICAgICAgICAgICAgICBUaGUgcHVycG9zZSBvZiB0aGUgY29tbWFuZCBpcyB0byBhbGxvdyB0aGUgZ2VuZXJhdGlvbiBvZgotICAgICAgICAgICAgICAgIGN1c3RvbWl6ZWQgaW1hZ2VzLCBhbmQgYXMgc3VjaCwgd2FzIGRlc2lnbmVkIHRvIGJlCi0gICAgICAgICAgICAgICAgY29tcGxldGVseSBleHRlbnNpYmxlIHRocm91Z2ggYSBwbHVnLWluIGludGVyZmFjZS4KLSAgICAgICAgICAgICAgICBTZWUgdGhlCi0gICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J29wZW5lbWJlZGRlZC1raWNrc3RhcnQtcGx1Z2lucyc+UGx1Zy1pbnM8L2xpbms+IgotICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uIG9uIHRoZXNlIHBsdWctaW5zLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgc29tZSBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIG9uIFdpYywKLSAgICAgICAgICAgICAgICBkZXNjcmliZXMgd2hhdCB5b3UgbmVlZCB0byBoYXZlIGluCi0gICAgICAgICAgICAgICAgcGxhY2UgdG8gcnVuIHRoZSB0b29sLCBwcm92aWRlcyBpbnN0cnVjdGlvbiBvbiBob3cgdG8gdXNlCi0gICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiB1dGlsaXR5LAotICAgICAgICAgICAgICAgIGFuZCBwcm92aWRlcyBzZXZlcmFsIGV4YW1wbGVzLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8c2VjdGlvbiBpZD0nd2ljLWJhY2tncm91bmQnPgotICAgICAgICAgICAgICAgIDx0aXRsZT5CYWNrZ3JvdW5kPC90aXRsZT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgc29tZSBiYWNrZ3JvdW5kIG9uIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gdXRpbGl0eS4KLSAgICAgICAgICAgICAgICAgICAgV2hpbGUgbm9uZSBvZiB0aGlzIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkIHRvIHVzZQotICAgICAgICAgICAgICAgICAgICBXaWMsIHlvdSBtaWdodCBmaW5kIGl0IGludGVyZXN0aW5nLgotICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lICJXaWMiIGlzIGRlcml2ZWQgZnJvbSBPcGVuRW1iZWRkZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZSBDcmVhdG9yIChvZWljKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgIm9lIiBkaXBodGhvbmcgaW4gIm9laWMiIHdhcyBwcm9tb3RlZCB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXR0ZXIgInciLCBiZWNhdXNlICJvZWljIiBpcyBib3RoIGRpZmZpY3VsdCB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWVtYmVyIGFuZCB0byBwcm9ub3VuY2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ljIGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVlZ28gSW1hZ2UgQ3JlYXRvciAoPGZpbGVuYW1lPm1pYzwvZmlsZW5hbWU+KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1ld29yay4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgV2ljIGltcGxlbWVudGF0aW9uIGhhcyBiZWVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhdmlseSBtb2RpZmllZCB0byBtYWtlIGRpcmVjdCB1c2Ugb2YgT3BlbkVtYmVkZGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgYXJ0aWZhY3RzIGluc3RlYWQgb2YgcGFja2FnZSBpbnN0YWxsYXRpb24gYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiwgd2hpY2ggYXJlIGFscmVhZHkgaW5jb3Jwb3JhdGVkIHdpdGhpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYXJ0aWZhY3RzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpYyBpcyBhIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFuZGFsb25lIHV0aWxpdHkgdGhhdCBpbml0aWFsbHkgcHJvdmlkZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYXNpZXItdG8tdXNlIGFuZCBtb3JlIGZsZXhpYmxlIHJlcGxhY2VtZW50cyBmb3IgYW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZyBmdW5jdGlvbmFsaXR5IGluIE9FIENvcmUncwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1jbGFzc2VzLWltYWdlLWxpdmUnPjxmaWxlbmFtZT5pbWFnZS1saXZlPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIGFuZCA8ZmlsZW5hbWU+bWtlZmlkaXNrLnNoPC9maWxlbmFtZT4gc2NyaXB0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWMgYW5kIHRob3NlIGV4YW1wbGVzIGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB3aXRoIFdpYyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIHRob3NlIHNjcmlwdHMgaXMgaW1wbGVtZW50ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSBhIGdlbmVyYWwtcHVycG9zZSBwYXJ0aXRpb25pbmcgbGFuZ3VhZ2UsIHdoaWNoIGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gUmVkaGF0IGtpY2tzdGFydCBzeW50YXguPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3dpYy1yZXF1aXJlbWVudHMnPgotICAgICAgICAgICAgICAgIDx0aXRsZT5SZXF1aXJlbWVudHM8L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIHVzZSB0aGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IHV0aWxpdHkKLSAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgT3BlbkVtYmVkZGVkIEJ1aWxkIHN5c3RlbSwgeW91ciBzeXN0ZW0gbmVlZHMKLSAgICAgICAgICAgICAgICAgICAgdG8gbWVldCB0aGUgZm9sbG93aW5nIHJlcXVpcmVtZW50czoKLSAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgTGludXggZGlzdHJpYnV0aW9uIG9uIHlvdXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBob3N0IG11c3Qgc3VwcG9ydCB0aGUgWW9jdG8gUHJvamVjdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2RldGFpbGVkLXN1cHBvcnRlZC1kaXN0cm9zJz5TdXBwb3J0ZWQgTGludXggRGlzdHJpYnV0aW9uczwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGlzdCBvZiBkaXN0cmlidXRpb25zIHRoYXQgc3VwcG9ydCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzdGFuZGFyZCBzeXN0ZW0gdXRpbGl0aWVzLCBzdWNoIGFzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNwPC9maWxlbmFtZT4sIG11c3QgYmUgaW5zdGFsbGVkIG9uIHlvdXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBob3N0IHN5c3RlbS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBoYXZlIHRoZSBidWlsZCBhcnRpZmFjdHMgYWxyZWFkeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSwgd2hpY2ggdHlwaWNhbGx5IG1lYW5zIHRoYXQgeW91IG11c3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlIGFscmVhZHkgY3JlYXRlZCBhbiBpbWFnZSB1c2luZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuZW1iZWRkZWQgYnVpbGQgc3lzdGVtIChlLmcuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+KS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGlsZSBpdCBtaWdodCBzZWVtIHJlZHVuZGFudCB0byBnZW5lcmF0ZSBhbiBpbWFnZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIG9yZGVyIHRvIGNyZWF0ZSBhbiBpbWFnZSB1c2luZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpYywgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpYyByZXF1aXJlcyB0aGUgYXJ0aWZhY3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGZvcm0gZ2VuZXJhdGVkIGJ5IHRoZSBidWlsZCBzeXN0ZW0uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgYnVpbGQgc2V2ZXJhbCBuYXRpdmUgdG9vbHMsIHdoaWNoIGFyZSB0b29scwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWx0IHRvIHJ1biBvbiB0aGUgYnVpbGQgc3lzdGVtOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBiaXRiYWtlIHBhcnRlZC1uYXRpdmUgZG9zZnN0b29scy1uYXRpdmUgbXRvb2xzLW5hdGl2ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBoYXZlIHNvdXJjZWQgb25lIG9mIHRoZSBidWlsZCBlbnZpcm9ubWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHVwIHNjcmlwdHMgKGkuZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kIGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgICAgICA8c2VjdGlvbiBpZD0nd2ljLWdldHRpbmctaGVscCc+Ci0gICAgICAgICAgICAgICAgPHRpdGxlPkdldHRpbmcgSGVscDwvdGl0bGU+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBnZXQgZ2VuZXJhbCBoZWxwIGZvciB0aGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgYnkgZW50ZXJpbmcgdGhlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBjb21tYW5kCi0gICAgICAgICAgICAgICAgICAgIGJ5IGl0c2VsZiBvciBieSBlbnRlcmluZyB0aGUgY29tbWFuZCB3aXRoIGEgaGVscCBhcmd1bWVudAotICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICAgICAgICAgICAgWW91IGNhbiBnZXQgZ2VuZXJhbCBoZWxwIGZvciB0aGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29tbWFuZCBieSBlbnRlcmluZyB0aGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICBieSBpdHNlbGYgb3IgYnkgZW50ZXJpbmcgdGhlIGNvbW1hbmQgd2l0aCBhIGhlbHAgYXJndW1lbnQKKyAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgJCB3aWMgLWgKICAgICAgJCB3aWMgLS1oZWxwCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgogCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEN1cnJlbnRseSwgV2ljIHN1cHBvcnRzIHR3byBjb21tYW5kczoKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNyZWF0ZTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+bGlzdDwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGdldCBoZWxwIGZvciB0aGVzZSBjb21tYW5kcyBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDdXJyZW50bHksIFdpYyBzdXBwb3J0cyBzZXZlbiBjb21tYW5kczoKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y3A8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmNyZWF0ZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5oZWxwPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5saXN0PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxzPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5ybTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d3JpdGU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGdldCBoZWxwIGZvciB0aGVzZSBjb21tYW5kcyBhcyBmb2xsb3dzIHdpdGgKKyAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+Y29tbWFuZDwvcmVwbGFjZWFibGU+IGJlaW5nIG9uZSBvZiB0aGUKKyAgICAgICAgICAgICAgICBzdXBwb3J0ZWQgY29tbWFuZHM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAkIHdpYyBoZWxwIDxyZXBsYWNlYWJsZT5jb21tYW5kPC9yZXBsYWNlYWJsZT4KLSAgICAgICAgICAgICAgICAgICAgd2l0aCA8cmVwbGFjZWFibGU+Y29tbWFuZDwvcmVwbGFjZWFibGU+IGJlaW5nIGVpdGhlcgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y3JlYXRlPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPmxpc3Q8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CiAKLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGdldCBkZXRhaWxlZCBoZWxwIG9uIGEgbnVtYmVyIG9mIHRvcGljcwotICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBoZWxwIHN5c3RlbS4KLSAgICAgICAgICAgICAgICAgICAgVGhlIG91dHB1dCBvZiA8ZmlsZW5hbWU+d2ljIC0taGVscDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlzIGEgbGlzdCBvZiBhdmFpbGFibGUgaGVscAotICAgICAgICAgICAgICAgICAgICB0b3BpY3MgdW5kZXIgYSAiSGVscCB0b3BpY3MiIGhlYWRpbmcuCi0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gaGF2ZSB0aGUgaGVscCBzeXN0ZW0gZGlzcGxheSB0aGUgaGVscCB0ZXh0IGZvcgotICAgICAgICAgICAgICAgICAgICBhIGdpdmVuIHRvcGljIGJ5IHByZWZhY2luZyB0aGUgdG9waWMgd2l0aAotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljIGhlbHA8L2ZpbGVuYW1lPjoKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGdldCBkZXRhaWxlZCBoZWxwIG9uIGEgbnVtYmVyIG9mIHRvcGljcworICAgICAgICAgICAgICAgIGZyb20gdGhlIGhlbHAgc3lzdGVtLgorICAgICAgICAgICAgICAgIFRoZSBvdXRwdXQgb2YgPGZpbGVuYW1lPndpYyAtLWhlbHA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpc3BsYXlzIGEgbGlzdCBvZiBhdmFpbGFibGUgaGVscAorICAgICAgICAgICAgICAgIHRvcGljcyB1bmRlciBhICJIZWxwIHRvcGljcyIgaGVhZGluZy4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGhhdmUgdGhlIGhlbHAgc3lzdGVtIGRpc3BsYXkgdGhlIGhlbHAgdGV4dCBmb3IKKyAgICAgICAgICAgICAgICBhIGdpdmVuIHRvcGljIGJ5IHByZWZhY2luZyB0aGUgdG9waWMgd2l0aAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aWMgaGVscDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgJCB3aWMgaGVscCA8cmVwbGFjZWFibGU+aGVscF90b3BpYzwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgogCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBvdXQgbW9yZSBhYm91dCB0aGUgaW1hZ2VzCi0gICAgICAgICAgICAgICAgICAgIFdpYyBjcmVhdGVzIHVzaW5nIHRoZSBleGlzdGluZwotICAgICAgICAgICAgICAgICAgICBraWNrc3RhcnQgZmlsZXMgd2l0aCB0aGUgZm9sbG93aW5nIGZvcm0gb2YgdGhlIGNvbW1hbmQ6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBvdXQgbW9yZSBhYm91dCB0aGUgaW1hZ2VzIFdpYyBjcmVhdGVzIHVzaW5nCisgICAgICAgICAgICAgICAgdGhlIGV4aXN0aW5nIGtpY2tzdGFydCBmaWxlcyB3aXRoIHRoZSBmb2xsb3dpbmcgZm9ybSBvZgorICAgICAgICAgICAgICAgIHRoZSBjb21tYW5kOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgJCB3aWMgbGlzdCA8cmVwbGFjZWFibGU+aW1hZ2U8L3JlcGxhY2VhYmxlPiBoZWxwCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgd2l0aCA8ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmltYWdlPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBiZWluZyBlaXRoZXIgPGZpbGVuYW1lPmRpcmVjdGRpc2s8L2ZpbGVuYW1lPiBvcgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWtlZmlkaXNrPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGb3IgPHJlcGxhY2VhYmxlPmltYWdlPC9yZXBsYWNlYWJsZT4sIHlvdSBjYW4gcHJvdmlkZQorICAgICAgICAgICAgICAgIGFueSBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgICBiZWFnbGVib25lCisgICAgICAgbXBjODMxNWUtcmRiCisgICAgICAgZ2VuZXJpY3g4NgorICAgICAgIGVkZ2Vyb3V0ZXIKKyAgICAgICBxZW11eDg2LWRpcmVjdGRpc2sKKyAgICAgICBkaXJlY3RkaXNrLWdwdAorICAgICAgIG1rZWZpZGlzaworICAgICAgIGRpcmVjdGRpc2sKKyAgICAgICBzeXN0ZW1kLWJvb3RkaXNrCisgICAgICAgbWtoeWJyaWRpc28KKyAgICAgICBzZGltYWdlLWJvb3RwYXJ0CisgICAgICAgZGlyZWN0ZGlzay1tdWx0aS1yb290ZnMKKyAgICAgICBkaXJlY3RkaXNrLWJvb3Rsb2FkZXItY29uZmlnCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CiAKLSAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdvcGVyYXRpb25hbC1tb2Rlcyc+Ci0gICAgICAgICAgICAgICAgPHRpdGxlPk9wZXJhdGlvbmFsIE1vZGVzPC90aXRsZT4KKyAgICAgICAgPHNlY3Rpb24gaWQ9J29wZXJhdGlvbmFsLW1vZGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5PcGVyYXRpb25hbCBNb2RlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIFdpYyBpbiB0d28gZGlmZmVyZW50CisgICAgICAgICAgICAgICAgbW9kZXMsIGRlcGVuZGluZyBvbiBob3cgbXVjaCBjb250cm9sIHlvdSBuZWVkIGZvcgorICAgICAgICAgICAgICAgIHNwZWNpZnlpbmcgdGhlIE9wZW5lbWJlZGRlZCBidWlsZCBhcnRpZmFjdHMgdGhhdCBhcmUKKyAgICAgICAgICAgICAgICB1c2VkIGZvciBjcmVhdGluZyB0aGUgaW1hZ2U6IFJhdyBhbmQgQ29va2VkOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5SYXcgTW9kZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGV4cGxpY2l0bHkgc3BlY2lmeSBidWlsZCBhcnRpZmFjdHMgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGNvbW1hbmQtbGluZSBhcmd1bWVudHMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkNvb2tlZCBNb2RlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZyBhbmQgaW1hZ2UgbmFtZSBhcmUgdXNlZCB0byBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGUgYW5kIHByb3ZpZGUgdGhlIGJ1aWxkIGFydGlmYWN0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBqdXN0IHN1cHBseSBhIGtpY2tzdGFydCBmaWxlIGFuZCB0aGUgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGltYWdlIGZyb20gd2hpY2ggdG8gdXNlIGFydGlmYWN0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBSZWdhcmRsZXNzIG9mIHRoZSBtb2RlIHlvdSB1c2UsIHlvdSBuZWVkIHRvIGhhdmUgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgYXJ0aWZhY3RzIHJlYWR5IGFuZCBhdmFpbGFibGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdyYXctbW9kZSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPlJhdyBNb2RlPC90aXRsZT4KIAogICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSBXaWMgaW4gdHdvIGRpZmZlcmVudAotICAgICAgICAgICAgICAgICAgICBtb2RlcywgZGVwZW5kaW5nIG9uIGhvdyBtdWNoIGNvbnRyb2wgeW91IG5lZWQgZm9yCi0gICAgICAgICAgICAgICAgICAgIHNwZWNpZnlpbmcgdGhlIE9wZW5lbWJlZGRlZCBidWlsZCBhcnRpZmFjdHMgdGhhdCBhcmUKLSAgICAgICAgICAgICAgICAgICAgdXNlZCBmb3IgY3JlYXRpbmcgdGhlIGltYWdlOiBSYXcgYW5kIENvb2tlZDoKLSAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+UmF3IE1vZGU6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgZXhwbGljaXRseSBzcGVjaWZ5IGJ1aWxkIGFydGlmYWN0cyB0aHJvdWdoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC1saW5lIGFyZ3VtZW50cy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q29va2VkIE1vZGU6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY3VycmVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nIGFuZCBpbWFnZSBuYW1lIGFyZSB1c2VkIHRvIGF1dG9tYXRpY2FsbHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGUgYW5kIHByb3ZpZGUgdGhlIGJ1aWxkIGFydGlmYWN0cy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIFJ1bm5pbmcgV2ljIGluIHJhdyBtb2RlIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbnMgdGhyb3VnaCB0aGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgbGluZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHByaW1hcnkgdXNlIGZvciByYXcgbW9kZSBpcyBpZiB5b3UgaGF2ZSBidWlsdAorICAgICAgICAgICAgICAgICAgICB5b3VyIGtlcm5lbCBvdXRzaWRlIG9mIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB5b3UgY2FuIHBvaW50IHRvIGFyYml0cmFyeSBrZXJuZWwsCisgICAgICAgICAgICAgICAgICAgIHJvb3QgZmlsZXN5c3RlbSBsb2NhdGlvbnMsIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJhc3QgdGhpcyBiZWhhdmlvciB3aXRoIGNvb2tlZCBtb2RlIHdoZXJlIFdpYworICAgICAgICAgICAgICAgICAgICBsb29rcyBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5IChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50bXAvZGVwbG95L2ltYWdlcy88L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT4pLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBSZWdhcmRsZXNzIG9mIHRoZSBtb2RlIHlvdSB1c2UsIHlvdSBuZWVkIHRvIGhhdmUgdGhlIGJ1aWxkCi0gICAgICAgICAgICAgICAgICAgIGFydGlmYWN0cyByZWFkeSBhbmQgYXZhaWxhYmxlLgotICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHRoZSBlbnZpcm9ubWVudCBtdXN0IGJlIHNldCB1cCB1c2luZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgIG9yCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgIHNjcmlwdCBmb3VuZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdyYXctbW9kZSc+Ci0gICAgICAgICAgICAgICAgICAgIDx0aXRsZT5SYXcgTW9kZTwvdGl0bGU+Ci0KLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2VuZXJhbCBmb3JtIG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGNvbW1hbmQgaW4gcmF3IG1vZGUgaXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgd2ljIGNyZWF0ZSA8cmVwbGFjZWFibGU+aW1hZ2VfbmFtZTwvcmVwbGFjZWFibGU+LndrcyBbPHJlcGxhY2VhYmxlPm9wdGlvbnM8L3JlcGxhY2VhYmxlPl0gWy4uLl0KKyAgICAgICAgICAgICAgICAgICAgVGhlIGdlbmVyYWwgZm9ybSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGNvbW1hbmQgaW4gcmF3IG1vZGUgaXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB3aWMgY3JlYXRlIDxyZXBsYWNlYWJsZT53a3NfZmlsZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5vcHRpb25zPC9yZXBsYWNlYWJsZT4gLi4uCiAKICAgICAgICBXaGVyZToKIAotICAgICAgICAgIDxyZXBsYWNlYWJsZT5pbWFnZV9uYW1lPC9yZXBsYWNlYWJsZT4ud2tzCisgICAgICAgICAgPHJlcGxhY2VhYmxlPndrc19maWxlPC9yZXBsYWNlYWJsZT46CiAgICAgICAgICAgICAgQW4gT3BlbkVtYmVkZGVkIGtpY2tzdGFydCBmaWxlLiAgWW91IGNhbiBwcm92aWRlCiAgICAgICAgICAgICAgeW91ciBvd24gY3VzdG9tIGZpbGUgb3IgdXNlIGEgZmlsZSBmcm9tIGEgc2V0IG9mCiAgICAgICAgICAgICAgZXhpc3RpbmcgZmlsZXMgYXMgZGVzY3JpYmVkIGJ5IGZ1cnRoZXIgb3B0aW9ucy4KIAotICAgICAgICAgIC1vIDxyZXBsYWNlYWJsZT5PVVRESVI8L3JlcGxhY2VhYmxlPiwgLS1vdXRkaXI9PHJlcGxhY2VhYmxlPk9VVERJUjwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgVGhlIG5hbWUgb2YgYSBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gY3JlYXRlIGltYWdlLgorICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgIC1oLCAtLWhlbHAgICAgICAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgICAtbyA8cmVwbGFjZWFibGU+T1VURElSPC9yZXBsYWNlYWJsZT4sIC0tb3V0ZGlyIDxyZXBsYWNlYWJsZT5PVVRESVI8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgb2YgZGlyZWN0b3J5IHRvIGNyZWF0ZSBpbWFnZSBpbgorICAgICAgICAgICAgLWUgPHJlcGxhY2VhYmxlPklNQUdFX05BTUU8L3JlcGxhY2VhYmxlPiwgLS1pbWFnZS1uYW1lIDxyZXBsYWNlYWJsZT5JTUFHRV9OQU1FPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIG9mIHRoZSBpbWFnZSB0byB1c2UgdGhlIGFydGlmYWN0cyBmcm9tIGUuZy4gY29yZS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZS1zYXRvCisgICAgICAgICAgICAtciA8cmVwbGFjZWFibGU+Uk9PVEZTX0RJUjwvcmVwbGFjZWFibGU+LCAtLXJvb3Rmcy1kaXIgPHJlcGxhY2VhYmxlPlJPT1RGU19ESVI8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggdG8gdGhlIC9yb290ZnMgZGlyIHRvIHVzZSBhcyB0aGUgLndrcyByb290ZnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UKKyAgICAgICAgICAgIC1iIDxyZXBsYWNlYWJsZT5CT09USU1HX0RJUjwvcmVwbGFjZWFibGU+LCAtLWJvb3RpbWctZGlyIDxyZXBsYWNlYWJsZT5CT09USU1HX0RJUjwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCB0byB0aGUgZGlyIGNvbnRhaW5pbmcgdGhlIGJvb3QgYXJ0aWZhY3RzIChlLmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL0VGSSBvciAvc3lzbGludXggZGlycykgdG8gdXNlIGFzIHRoZSAud2tzIGJvb3RpbWcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UKKyAgICAgICAgICAgIC1rIDxyZXBsYWNlYWJsZT5LRVJORUxfRElSPC9yZXBsYWNlYWJsZT4sIC0ta2VybmVsLWRpciA8cmVwbGFjZWFibGU+S0VSTkVMX0RJUjwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCB0byB0aGUgZGlyIGNvbnRhaW5pbmcgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndrcyBib290aW1nCisgICAgICAgICAgICAtbiA8cmVwbGFjZWFibGU+TkFUSVZFX1NZU1JPT1Q8L3JlcGxhY2VhYmxlPiwgLS1uYXRpdmUtc3lzcm9vdCA8cmVwbGFjZWFibGU+TkFUSVZFX1NZU1JPT1Q8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggdG8gdGhlIG5hdGl2ZSBzeXNyb290IGNvbnRhaW5pbmcgdGhlIHRvb2xzIHRvIHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJ1aWxkIHRoZSBpbWFnZQorICAgICAgICAgICAgLXMsIC0tc2tpcC1idWlsZC1jaGVjaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXAgdGhlIGJ1aWxkIGNoZWNrCisgICAgICAgICAgICAtZiwgLS1idWlsZC1yb290ZnMgICAgYnVpbGQgcm9vdGZzCisgICAgICAgICAgICAtYyB7Z3ppcCxiemlwMix4en0sIC0tY29tcHJlc3Mtd2l0aCB7Z3ppcCxiemlwMix4en0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzcyBpbWFnZSB3aXRoIHNwZWNpZmllZCBjb21wcmVzc29yCisgICAgICAgICAgICAtbSwgLS1ibWFwICAgICAgICAgICAgZ2VuZXJhdGUgLmJtYXAKKyAgICAgICAgICAgIC0tbm8tZnN0YWItdXBkYXRlICAgICBEbyBub3QgY2hhbmdlIGZzdGFiIGZpbGUuCisgICAgICAgICAgICAtdiA8cmVwbGFjZWFibGU+VkFSU19ESVI8L3JlcGxhY2VhYmxlPiwgLS12YXJzIDxyZXBsYWNlYWJsZT5WQVJTX0RJUjwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHdpdGggJmx0O2ltYWdlJmd0Oy5lbnYgZmlsZXMgdGhhdCBzdG9yZSBiaXRiYWtlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzCisgICAgICAgICAgICAtRCwgLS1kZWJ1ZyAgICAgICAgICAgb3V0cHV0IGRlYnVnIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgZG8gbm90IG5lZWQgcm9vdCBwcml2aWxlZ2VzIHRvIHJ1bgorICAgICAgICAgICAgICAgICAgICAgICAgV2ljLgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gZmFjdCwgeW91IHNob3VsZCBub3QgcnVuIGFzIHJvb3Qgd2hlbiB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxpdHkuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CiAKLSAgICAgICAgICAtaSA8cmVwbGFjZWFibGU+UFJPUEVSVElFU19GSUxFPC9yZXBsYWNlYWJsZT4sIC0taW5maWxlPTxyZXBsYWNlYWJsZT5QUk9QRVJUSUVTX0ZJTEU8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgIFRoZSBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIHRoZSB2YWx1ZXMgZm9yIGltYWdlCi0gICAgICAgICAgICAgcHJvcGVydGllcyBhcyBhIEpTT04gZmlsZS4KKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdjb29rZWQtbW9kZSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkNvb2tlZCBNb2RlPC90aXRsZT4KIAotICAgICAgICAgIC1lIDxyZXBsYWNlYWJsZT5JTUFHRV9OQU1FPC9yZXBsYWNlYWJsZT4sIC0taW1hZ2UtbmFtZT08cmVwbGFjZWFibGU+SU1BR0VfTkFNRTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIGltYWdlIGZyb20gd2hpY2ggdG8gdXNlIHRoZSBhcnRpZmFjdHMKLSAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBSdW5uaW5nIFdpYyBpbiBjb29rZWQgbW9kZSBsZXZlcmFnZXMgb2ZmIGFydGlmYWN0cyBpbgorICAgICAgICAgICAgICAgICAgICBCdWlsZCBEaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB5b3UgZG8gbm90IGhhdmUgdG8gc3BlY2lmeSBrZXJuZWwgb3IKKyAgICAgICAgICAgICAgICAgICAgcm9vdCBmaWxlc3lzdGVtIGxvY2F0aW9ucyBhcyBwYXJ0IG9mIHRoZSBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBBbGwgeW91IG5lZWQgdG8gcHJvdmlkZSBpcyBhIGtpY2tzdGFydCBmaWxlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgbmFtZSBvZiB0aGUgaW1hZ2UgZnJvbSB3aGljaCB0byB1c2UgYXJ0aWZhY3RzIGJ5IHVzaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSAiLWUiIG9wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgV2ljIGxvb2tzIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC9kZXBsb3kvaW1hZ2VzLzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPm1hY2hpbmU8L3JlcGxhY2VhYmxlPikKKyAgICAgICAgICAgICAgICAgICAgZm9yIGFydGlmYWN0cy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CiAKLSAgICAgICAgICAtciA8cmVwbGFjZWFibGU+Uk9PVEZTX0RJUjwvcmVwbGFjZWFibGU+LCAtLXJvb3Rmcy1kaXI9PHJlcGxhY2VhYmxlPlJPT1RGU19ESVI8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgIFRoZSBwYXRoIHRvIHRoZSA8ZmlsZW5hbWU+L3Jvb3RmczwvZmlsZW5hbWU+IGRpcmVjdG9yeSB0byB1c2UgYXMgdGhlCi0gICAgICAgICAgICAgPGZpbGVuYW1lPi53a3M8L2ZpbGVuYW1lPiByb290ZnMgc291cmNlLgotCi0gICAgICAgICAgLWIgPHJlcGxhY2VhYmxlPkJPT1RJTUdfRElSPC9yZXBsYWNlYWJsZT4sIC0tYm9vdGltZy1kaXI9PHJlcGxhY2VhYmxlPkJPT1RJTUdfRElSPC9yZXBsYWNlYWJsZT4KLSAgICAgICAgICAgICBUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGJvb3QgYXJ0aWZhY3RzCi0gICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPi9FRkk8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+L3N5c2xpbnV4PC9maWxlbmFtZT4pIHRvIHVzZSBhcyB0aGUgPGZpbGVuYW1lPi53a3M8L2ZpbGVuYW1lPiBib290aW1nCi0gICAgICAgICAgICAgc291cmNlLgotCi0gICAgICAgICAgLWsgPHJlcGxhY2VhYmxlPktFUk5FTF9ESVI8L3JlcGxhY2VhYmxlPiwgLS1rZXJuZWwtZGlyPTxyZXBsYWNlYWJsZT5LRVJORUxfRElSPC9yZXBsYWNlYWJsZT4KLSAgICAgICAgICAgICBUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGtlcm5lbCB0byB1c2UKLSAgICAgICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPi53a3M8L2ZpbGVuYW1lPiBib290IGltYWdlLgotCi0gICAgICAgICAgLW4gPHJlcGxhY2VhYmxlPk5BVElWRV9TWVNST09UPC9yZXBsYWNlYWJsZT4sIC0tbmF0aXZlLXN5c3Jvb3Q9PHJlcGxhY2VhYmxlPk5BVElWRV9TWVNST09UPC9yZXBsYWNlYWJsZT4KLSAgICAgICAgICAgICBUaGUgcGF0aCB0byB0aGUgbmF0aXZlIHN5c3Jvb3QgY29udGFpbmluZyB0aGUgdG9vbHMgdG8gdXNlCi0gICAgICAgICAgICAgdG8gYnVpbGQgdGhlIGltYWdlLgotCi0gICAgICAgICAgLXMsIC0tc2tpcC1idWlsZC1jaGVjawotICAgICAgICAgICAgICBTa2lwcyB0aGUgYnVpbGQgY2hlY2suCi0KLSAgICAgICAgICAtRCwgLS1kZWJ1ZwotICAgICAgICAgICAgICBPdXRwdXQgZGVidWcgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgZG8gbm90IG5lZWQgcm9vdCBwcml2aWxlZ2VzIHRvIHJ1bgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpYy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBmYWN0LCB5b3Ugc2hvdWxkIG5vdCBydW4gYXMgcm9vdCB3aGVuIHVzaW5nIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxpdHkuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0nY29va2VkLW1vZGUnPgotICAgICAgICAgICAgICAgICAgICA8dGl0bGU+Q29va2VkIE1vZGU8L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGdlbmVyYWwgZm9ybSBvZiB0aGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGNvbW1hbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIENvb2tlZCBNb2RlIGlzOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIHdpYyBjcmVhdGUgPHJlcGxhY2VhYmxlPmtpY2tzdGFydF9maWxlPC9yZXBsYWNlYWJsZT4gLWUgPHJlcGxhY2VhYmxlPmltYWdlX25hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZ2VuZXJhbCBmb3JtIG9mIHRoZSA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZCB1c2luZyBDb29rZWQgTW9kZSBpcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgd2ljIGNyZWF0ZSA8cmVwbGFjZWFibGU+d2tzX2ZpbGU8L3JlcGxhY2VhYmxlPiAtZSA8cmVwbGFjZWFibGU+SU1BR0VfTkFNRTwvcmVwbGFjZWFibGU+CiAKICAgICAgICBXaGVyZToKIAotICAgICAgICAgICA8cmVwbGFjZWFibGU+a2lja3N0YXJ0X2ZpbGU8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgQW4gT3BlbkVtYmVkZGVkIGtpY2tzdGFydCBmaWxlLiBZb3UgY2FuIHByb3ZpZGUgeW91ciBvd24KLSAgICAgICAgICAgICAgIGN1c3RvbSBmaWxlIG9yIGEgc3VwcGxpZWQgZmlsZS4KKyAgICAgICAgICA8cmVwbGFjZWFibGU+d2tzX2ZpbGU8L3JlcGxhY2VhYmxlPjoKKyAgICAgICAgICAgICBBbiBPcGVuRW1iZWRkZWQga2lja3N0YXJ0IGZpbGUuICBZb3UgY2FuIHByb3ZpZGUKKyAgICAgICAgICAgICB5b3VyIG93biBjdXN0b20gZmlsZSBvciB1c2UgYSBmaWxlIGZyb20gYSBzZXQgb2YKKyAgICAgICAgICAgICBleGlzdGluZyBmaWxlcyBwcm92aWRlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgcmVsZWFzZS4KIAotICAgICAgICAgICA8cmVwbGFjZWFibGU+aW1hZ2VfbmFtZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGltYWdlIGJ1aWx0IHVzaW5nIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKLSAgICAgICAgICAgICAgIHN5c3RlbS4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZm9ybSBpcyB0aGUgc2ltcGxlc3QgYW5kIG1vc3QgdXNlci1mcmllbmRseSwgYXMgaXQKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IHJlcXVpcmUgc3BlY2lmeWluZyBhbGwgaW5kaXZpZHVhbCBwYXJhbWV0ZXJzLgotICAgICAgICAgICAgICAgICAgICAgICAgQWxsIHlvdSBuZWVkIHRvIHByb3ZpZGUgaXMgeW91ciBvd24KLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ud2tzPC9maWxlbmFtZT4gZmlsZSBvciBvbmUgcHJvdmlkZWQgd2l0aCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2UuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICA8L3NlY3Rpb24+Ci0gICAgICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1hLXByb3ZpZGVkLWtpY2tzdGFydC1maWxlJz4KLSAgICAgICAgICAgICAgICA8dGl0bGU+VXNpbmcgYW4gRXhpc3RpbmcgS2lja3N0YXJ0IEZpbGU8L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgd2FudCB0byBjcmVhdGUgeW91ciBvd24KLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi53a3M8L2ZpbGVuYW1lPiBmaWxlLCB5b3UgY2FuIHVzZSBhbiBleGlzdGluZwotICAgICAgICAgICAgICAgICAgICBmaWxlIHByb3ZpZGVkIGJ5IHRoZSBXaWMgaW5zdGFsbGF0aW9uLgotICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGxpc3QgdGhlIGF2YWlsYWJsZSBmaWxlczoKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIHdpYyBsaXN0IGltYWdlcwotICAgICBkaXJlY3RkaXNrIENyZWF0ZSBhICdwY2Jpb3MnIGRpcmVjdCBkaXNrIGltYWdlCi0gICAgIG1rZWZpZGlzayBDcmVhdGUgYW4gRUZJIGRpc2sgaW1hZ2UKKyAgICAgICAgICByZXF1aXJlZCBhcmd1bWVudDoKKyAgICAgICAgICAgICAtZSA8cmVwbGFjZWFibGU+SU1BR0VfTkFNRTwvcmVwbGFjZWFibGU+LCAtLWltYWdlLW5hbWUgPHJlcGxhY2VhYmxlPklNQUdFX05BTUU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgb2YgdGhlIGltYWdlIHRvIHVzZSB0aGUgYXJ0aWZhY3RzIGZyb20gZS5nLiBjb3JlLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLXNhdG8KICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSB1c2UgYW4gZXhpc3RpbmcgZmlsZSwgeW91IGRvIG5vdCBoYXZlIHRvIHVzZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi53a3M8L2ZpbGVuYW1lPiBleHRlbnNpb24uCi0gICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBpbiBSYXcgTW9kZSB0aGF0IHVzZXMgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kaXJlY3RkaXNrPC9maWxlbmFtZT4gZmlsZToKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1hLXByb3ZpZGVkLWtpY2tzdGFydC1maWxlJz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBhbiBFeGlzdGluZyBLaWNrc3RhcnQgRmlsZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgd2FudCB0byBjcmVhdGUgeW91ciBvd24ga2lja3N0YXJ0IGZpbGUsIHlvdQorICAgICAgICAgICAgICAgIGNhbiB1c2UgYW4gZXhpc3RpbmcgZmlsZSBwcm92aWRlZCBieSB0aGUgV2ljIGluc3RhbGxhdGlvbi4KKyAgICAgICAgICAgICAgICBBcyBzaGlwcGVkLCBraWNrc3RhcnQgZmlsZXMgY2FuIGJlIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2UtcmVwb3NpdG9yaWVzJz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4KKyAgICAgICAgICAgICAgICBpbiB0aGUgZm9sbG93aW5nIHR3byBsb2NhdGlvbnM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwb2t5L21ldGEteW9jdG8tYnNwL3dpYworICAgICBwb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gbGlzdCB0aGUgYXZhaWxhYmxlIGtpY2tzdGFydAorICAgICAgICAgICAgICAgIGZpbGVzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB3aWMgbGlzdCBpbWFnZXMKKyAgICAgICBiZWFnbGVib25lICAgICAgICAgICAgICAgICAgICAJCUNyZWF0ZSBTRCBjYXJkIGltYWdlIGZvciBCZWFnbGVib25lCisgICAgICAgbXBjODMxNWUtcmRiICAgICAgICAgICAgICAgICAgCQlDcmVhdGUgU0QgY2FyZCBpbWFnZSBmb3IgTVBDODMxNUUtUkRCCisgICAgICAgZ2VuZXJpY3g4NiAgICAgICAgICAgICAgICAgICAgCQlDcmVhdGUgYW4gRUZJIGRpc2sgaW1hZ2UgZm9yIGdlbmVyaWN4ODYqCisgICAgICAgZWRnZXJvdXRlciAgICAgICAgICAgICAgICAgICAgCQlDcmVhdGUgU0QgY2FyZCBpbWFnZSBmb3IgRWRnZXJvdXRlcgorICAgICAgIHFlbXV4ODYtZGlyZWN0ZGlzayAgICAgICAgICAgIAkJQ3JlYXRlIGEgcWVtdSBtYWNoaW5lICdwY2Jpb3MnIGRpcmVjdCBkaXNrIGltYWdlCisgICAgICAgZGlyZWN0ZGlzay1ncHQgICAgICAgICAgICAgICAgCQlDcmVhdGUgYSAncGNiaW9zJyBkaXJlY3QgZGlzayBpbWFnZQorICAgICAgIG1rZWZpZGlzayAgICAgICAgICAgICAgICAgICAgIAkJQ3JlYXRlIGFuIEVGSSBkaXNrIGltYWdlCisgICAgICAgZGlyZWN0ZGlzayAgICAgICAgICAgICAgICAgICAgCQlDcmVhdGUgYSAncGNiaW9zJyBkaXJlY3QgZGlzayBpbWFnZQorICAgICAgIHN5c3RlbWQtYm9vdGRpc2sgICAgICAgICAgICAgIAkJQ3JlYXRlIGFuIEVGSSBkaXNrIGltYWdlIHdpdGggc3lzdGVtZC1ib290CisgICAgICAgbWtoeWJyaWRpc28gICAgICAgICAgICAgICAgICAgCQlDcmVhdGUgYSBoeWJyaWQgSVNPIGltYWdlCisgICAgICAgc2RpbWFnZS1ib290cGFydCAgICAgICAgICAgICAgCQlDcmVhdGUgU0QgY2FyZCBpbWFnZSB3aXRoIGEgYm9vdCBwYXJ0aXRpb24KKyAgICAgICBkaXJlY3RkaXNrLW11bHRpLXJvb3RmcyAgICAgICAJCUNyZWF0ZSBtdWx0aSByb290ZnMgaW1hZ2UgdXNpbmcgcm9vdGZzIHBsdWdpbgorICAgICAgIGRpcmVjdGRpc2stYm9vdGxvYWRlci1jb25maWcgIAkJQ3JlYXRlIGEgJ3BjYmlvcycgZGlyZWN0IGRpc2sgaW1hZ2Ugd2l0aCBjdXN0b20gYm9vdGxvYWRlciBjb25maWcKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlIGFuIGV4aXN0aW5nIGZpbGUsIHlvdSBkbyBub3QgaGF2ZSB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi53a3M8L2ZpbGVuYW1lPiBleHRlbnNpb24uCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGluIFJhdyBNb2RlIHRoYXQgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlyZWN0ZGlzazwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAkIHdpYyBjcmVhdGUgZGlyZWN0ZGlzayAtciA8cmVwbGFjZWFibGU+cm9vdGZzX2RpcjwvcmVwbGFjZWFibGU+IC1iIDxyZXBsYWNlYWJsZT5ib290aW1nX2RpcjwvcmVwbGFjZWFibGU+IFwKICAgICAgICAgICAgLWsgPHJlcGxhY2VhYmxlPmtlcm5lbF9kaXI8L3JlcGxhY2VhYmxlPiAtbiA8cmVwbGFjZWFibGU+bmF0aXZlX3N5c3Jvb3Q8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KIAotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSB0aGUgYWN0dWFsIHBhcnRpdGlvbiBsYW5ndWFnZSBjb21tYW5kcwotICAgICAgICAgICAgICAgICAgICB1c2VkIGluIHRoZSA8ZmlsZW5hbWU+bWtlZmlkaXNrLndrczwvZmlsZW5hbWU+IGZpbGUgdG8KLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGUgYW4gaW1hZ2U6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgIyBzaG9ydC1kZXNjcmlwdGlvbjogQ3JlYXRlIGFuIEVGSSBkaXNrIGltYWdlCi0gICAgICMgbG9uZy1kZXNjcmlwdGlvbjogQ3JlYXRlcyBhIHBhcnRpdGlvbmVkIEVGSSBkaXNrIGltYWdlIHRoYXQgdGhlIHVzZXIKLSAgICAgIyBjYW4gZGlyZWN0bHkgZGQgdG8gYm9vdCBtZWRpYS4KLQotICAgICBwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctZWZpIC0tb25kaXNrIHNkYSAtLWxhYmVsIG1zZG9zIC0tYWN0aXZlIC0tYWxpZ24gMTAyNAotCi0gICAgIHBhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDMgLS1sYWJlbCBwbGF0Zm9ybSAtLWFsaWduIDEwMjQKLQorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBhcmUgdGhlIGFjdHVhbCBwYXJ0aXRpb24gbGFuZ3VhZ2UgY29tbWFuZHMKKyAgICAgICAgICAgICAgICB1c2VkIGluIHRoZSA8ZmlsZW5hbWU+Z2VuZXJpY3g4Ni53a3M8L2ZpbGVuYW1lPiBmaWxlIHRvCisgICAgICAgICAgICAgICAgZ2VuZXJhdGUgYW4gaW1hZ2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIHNob3J0LWRlc2NyaXB0aW9uOiBDcmVhdGUgYW4gRUZJIGRpc2sgaW1hZ2UgZm9yIGdlbmVyaWN4ODYqCisgICAgICMgbG9uZy1kZXNjcmlwdGlvbjogQ3JlYXRlcyBhIHBhcnRpdGlvbmVkIEVGSSBkaXNrIGltYWdlIGZvciBnZW5lcmljeDg2KiBtYWNoaW5lcworICAgICBwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctZWZpIC0tc291cmNlcGFyYW1zPSJsb2FkZXI9Z3J1Yi1lZmkiIC0tb25kaXNrIHNkYSAtLWxhYmVsIG1zZG9zIC0tYWN0aXZlIC0tYWxpZ24gMTAyNAorICAgICBwYXJ0IC8gLS1zb3VyY2Ugcm9vdGZzIC0tb25kaXNrIHNkYSAtLWZzdHlwZT1leHQ0IC0tbGFiZWwgcGxhdGZvcm0gLS1hbGlnbiAxMDI0IC0tdXNlLXV1aWQKICAgICAgcGFydCBzd2FwIC0tb25kaXNrIHNkYSAtLXNpemUgNDQgLS1sYWJlbCBzd2FwMSAtLWZzdHlwZT1zd2FwCiAKLSAgICAgYm9vdGxvYWRlciAgLS10aW1lb3V0PTEwICAtLWFwcGVuZD0icm9vdHdhaXQgcm9vdGZzdHlwZT1leHQzIGNvbnNvbGU9dHR5UENIMCwxMTUyMDAgY29uc29sZT10dHkwIHZtYWxsb2M9MjU2TUIgc25kLWhkYS1pbnRlbC5lbmFibGVfbXNpPTAiCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgIGJvb3Rsb2FkZXIgLS1wdGFibGUgZ3B0IC0tdGltZW91dD01IC0tYXBwZW5kPSJyb290ZnN0eXBlPWV4dDQgY29uc29sZT10dHlTMCwxMTUyMDAgY29uc29sZT10dHkwIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgogCi0gICAgICAgICAgICA8c2VjdGlvbiBpZD0nd2ljLXVzYWdlLWV4YW1wbGVzJz4KLSAgICAgICAgICAgICAgICA8dGl0bGU+RXhhbXBsZXM8L3RpdGxlPgorICAgICAgICA8c2VjdGlvbiBpZD0nd2ljLXVzYWdlLWV4YW1wbGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5FeGFtcGxlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBzZXZlcmFsIGV4YW1wbGVzIHRoYXQgc2hvdyBob3cgdG8gdXNlCisgICAgICAgICAgICAgICAgdGhlIFdpYyB1dGlsaXR5LgorICAgICAgICAgICAgICAgIEFsbCB0aGUgZXhhbXBsZXMgYXNzdW1lIHRoZSBsaXN0IG9mIHJlcXVpcmVtZW50cyBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nd2ljLXJlcXVpcmVtZW50cyc+UmVxdWlyZW1lbnRzPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGhhdmUgYmVlbiBtZXQuCisgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGVzIGFzc3VtZSB0aGUgcHJldmlvdXNseSBnZW5lcmF0ZWQgaW1hZ2UgaXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdnZW5lcmF0ZS1hbi1pbWFnZS11c2luZy1hLXByb3ZpZGVkLWtpY2tzdGFydC1maWxlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+R2VuZXJhdGUgYW4gSW1hZ2UgdXNpbmcgYW4gRXhpc3RpbmcgS2lja3N0YXJ0IEZpbGU8L3RpdGxlPgogCiAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBzZXZlcmFsIGV4YW1wbGVzIHRoYXQgc2hvdyBob3cgdG8gdXNlCi0gICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gdXRpbGl0eS4KLSAgICAgICAgICAgICAgICAgICAgQWxsIHRoZSBleGFtcGxlcyBhc3N1bWUgdGhlIGxpc3Qgb2YgcmVxdWlyZW1lbnRzIGluIHRoZQotICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nd2ljLXJlcXVpcmVtZW50cyc+UmVxdWlyZW1lbnRzPC9saW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBoYXZlIGJlZW4gbWV0LgotICAgICAgICAgICAgICAgICAgICBUaGUgZXhhbXBsZXMgYXNzdW1lIHRoZSBwcmV2aW91c2x5IGdlbmVyYXRlZCBpbWFnZSBpcwotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2dlbmVyYXRlLWFuLWltYWdlLXVzaW5nLWEtcHJvdmlkZWQta2lja3N0YXJ0LWZpbGUnPgotICAgICAgICAgICAgICAgICAgICA8dGl0bGU+R2VuZXJhdGUgYW4gSW1hZ2UgdXNpbmcgYW4gRXhpc3RpbmcgS2lja3N0YXJ0IEZpbGU8L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIHJ1bnMgaW4gQ29va2VkIE1vZGUgYW5kIHVzZXMgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWtlZmlkaXNrPC9maWxlbmFtZT4ga2lja3N0YXJ0IGZpbGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBydW5zIGluIENvb2tlZCBNb2RlIGFuZCB1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWtlZmlkaXNrPC9maWxlbmFtZT4ga2lja3N0YXJ0IGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgJCB3aWMgY3JlYXRlIG1rZWZpZGlzayAtZSBjb3JlLWltYWdlLW1pbmltYWwKLSAgICAgQ2hlY2tpbmcgYmFzaWMgYnVpbGQgZW52aXJvbm1lbnQuLi4KLSAgICAgRG9uZS4KLQotICAgICBDcmVhdGluZyBpbWFnZShzKS4uLgotCi0gICAgIEluZm86IFRoZSBuZXcgaW1hZ2UocykgY2FuIGJlIGZvdW5kIGhlcmU6Ci0gICAgICA8cmVwbGFjZWFibGU+Y3VycmVudF9kaXJlY3Rvcnk8L3JlcGxhY2VhYmxlPi9idWlsZC9ta2VmaWRpc2stMjAxMzEwMjMwOTQ2LXNkYS5kaXJlY3QKKyAgICAgSU5GTzogQnVpbGRpbmcgd2ljLXRvb2xzLi4uCisgICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgICAuCisgICAgIElORk86IFRoZSBuZXcgaW1hZ2UocykgY2FuIGJlIGZvdW5kIGhlcmU6CisgICAgICAgLi9ta2VmaWRpc2stMjAxNzEwMDYxNDA5LXNkYS5kaXJlY3QKIAogICAgICBUaGUgZm9sbG93aW5nIGJ1aWxkIGFydGlmYWN0cyB3ZXJlIHVzZWQgdG8gY3JlYXRlIHRoZSBpbWFnZShzKToKLSAgICAgIFJPT1RGU19ESVI6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvd29yay9taW5ub3ctcG9reS1saW51eC9jb3JlLWltYWdlLW1pbmltYWwvMS4wLXIwL3Jvb3RmcwotICAgICAgQk9PVElNR19ESVI6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvd29yay9taW5ub3ctcG9reS1saW51eC9jb3JlLWltYWdlLW1pbmltYWwvMS4wLXIwL2NvcmUtaW1hZ2UtbWluaW1hbC0xLjAvaGRkaW1nCi0gICAgICBLRVJORUxfRElSOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3N5c3Jvb3RzL21pbm5vdy91c3Ivc3JjL2tlcm5lbAotICAgICAgTkFUSVZFX1NZU1JPT1Q6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4CisgICAgICAgUk9PVEZTX0RJUjogICAgICAgICAgICAgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9idWlsZC90bXAud2ljLnI0aGtkczBiL3Jvb3Rmc19jb3B5CisgICAgICAgQk9PVElNR19ESVI6ICAgICAgICAgICAgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9idWlsZC90bXAvd29yay9xZW11eDg2LXBva3ktbGludXgvY29yZS1pbWFnZS1taW5pbWFsLzEuMC1yMC9yZWNpcGUtc3lzcm9vdC91c3Ivc2hhcmUKKyAgICAgICBLRVJORUxfRElSOiAgICAgICAgICAgICAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L2J1aWxkL3RtcC9kZXBsb3kvaW1hZ2VzL3FlbXV4ODYKKyAgICAgICBOQVRJVkVfU1lTUk9PVDogICAgICAgICAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC93aWMtdG9vbHMvMS4wLXIwL3JlY2lwZS1zeXNyb290LW5hdGl2ZQogCi0gICAgIFRoZSBpbWFnZShzKSB3ZXJlIGNyZWF0ZWQgdXNpbmcgT0Uga2lja3N0YXJ0IGZpbGU6Ci0gICAgICAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2Uvc2NyaXB0cy9saWIvaW1hZ2UvY2FubmVkLXdrcy9ta2VmaWRpc2sud2tzCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgcHJldmlvdXMgZXhhbXBsZSBzaG93cyB0aGUgZWFzaWVzdCB3YXkgdG8gY3JlYXRlCi0gICAgICAgICAgICAgICAgICAgICAgICBhbiBpbWFnZSBieSBydW5uaW5nIGluIENvb2tlZCBNb2RlIGFuZCB1c2luZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZTwvZmlsZW5hbWU+IG9wdGlvbiB3aXRoIGFuIGV4aXN0aW5nCi0gICAgICAgICAgICAgICAgICAgICAgICBraWNrc3RhcnQgZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIEFsbCB0aGF0IGlzIG5lY2Vzc2FyeSBpcyB0byBzcGVjaWZ5IHRoZSBpbWFnZSB1c2VkIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZSB0aGUgYXJ0aWZhY3RzLgotICAgICAgICAgICAgICAgICAgICAgICAgWW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IG5lZWRzIHRvIGhhdmUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBzZXQgdG8gdGhlIG1hY2hpbmUgeW91IGFyZSB1c2luZywgd2hpY2ggaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICJtaW5ub3ciIGluIHRoaXMgZXhhbXBsZS4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICBJTkZPOiBUaGUgaW1hZ2Uocykgd2VyZSBjcmVhdGVkIHVzaW5nIE9FIGtpY2tzdGFydCBmaWxlOgorICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvbWtlZmlkaXNrLndrcworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBleGFtcGxlIHNob3dzIHRoZSBlYXNpZXN0IHdheSB0byBjcmVhdGUKKyAgICAgICAgICAgICAgICAgICAgYW4gaW1hZ2UgYnkgcnVubmluZyBpbiBjb29rZWQgbW9kZSBhbmQgc3VwcGx5aW5nCisgICAgICAgICAgICAgICAgICAgIGEga2lja3N0YXJ0IGZpbGUgYW5kIHRoZSAiLWUiIG9wdGlvbiB0byBwb2ludCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcgYnVpbGQgYXJ0aWZhY3RzLgorICAgICAgICAgICAgICAgICAgICBZb3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBuZWVkcyB0byBoYXZlCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHNldCB0byB0aGUgbWFjaGluZSB5b3UgYXJlIHVzaW5nLCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICAicWVtdXg4NiIgaW4gdGhpcyBleGFtcGxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KIAotICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBvdXRwdXQgc3BlY2lmaWVzIHRoZSBleGFjdCBpbWFnZSBjcmVhdGVkIGFzIHdlbGwgYXMKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIGl0IHdhcyBjcmVhdGVkLCB3aGljaCBpcyBpbiB0aGUgY3VycmVudAotICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGJ5IGRlZmF1bHQuCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgb3V0cHV0IGFsc28gbmFtZXMgdGhlIGFydGlmYWN0cyB1c2VkIGFuZCB0aGUgZXhhY3QKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ud2tzPC9maWxlbmFtZT4gc2NyaXB0IHRoYXQgd2FzIHVzZWQgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlIHRoZSBpbWFnZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgYWx3YXlzIHZlcmlmeSB0aGUgZGV0YWlscyBwcm92aWRlZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGltYWdlIHdhcyBpbmRlZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkIGV4YWN0bHkgYXMgZXhwZWN0ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgaW1hZ2UgYnVpbGRzLCB0aGUgb3V0cHV0IHByb3ZpZGVzIGltYWdlCisgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLCBhcnRpZmFjdCB1c2UsIGFuZCBraWNrc3RhcnQgZmlsZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGFsd2F5cyB2ZXJpZnkgdGhlIGRldGFpbHMgcHJvdmlkZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGltYWdlIHdhcyBpbmRlZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQgZXhhY3RseSBhcyBleHBlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KIAotICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnRpbnVpbmcgd2l0aCB0aGUgZXhhbXBsZSwgeW91IGNhbiBub3cgd3JpdGUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSB0byBhIFVTQiBzdGljaywgb3Igd2hhdGV2ZXIgbWVkaWEgZm9yIHdoaWNoIHlvdQotICAgICAgICAgICAgICAgICAgICAgICAgYnVpbHQgeW91ciBpbWFnZSwgYW5kIGJvb3QgdGhlIHJlc3VsdGluZyBtZWRpYS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gd3JpdGUgdGhlIGltYWdlIGJ5IHVzaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ym1hcHRvb2w8L2ZpbGVuYW1lPiBvcgotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRkPC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgb2UtcnVuLW5hdGl2ZSBibWFwdG9vbCBjb3B5IGJ1aWxkL21rZWZpZGlzay0yMDEzMTAyMzA5NDYtc2RhLmRpcmVjdCAvZGV2L3NkPHJlcGxhY2VhYmxlPlg8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBzdWRvIGRkIGlmPWJ1aWxkL21rZWZpZGlzay0yMDEzMTAyMzA5NDYtc2RhLmRpcmVjdCBvZj0vZGV2L3NkPHJlcGxhY2VhYmxlPlg8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ym1hcHRvb2w8L2ZpbGVuYW1lPiB0byBmbGFzaCBhIGRldmljZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYW4gaW1hZ2UsIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZmxhc2hpbmctaW1hZ2VzLXVzaW5nLWJtYXB0b29sJz5GbGFzaGluZyBJbWFnZXMgVXNpbmcgPGZpbGVuYW1lPmJtYXB0b29sPC9maWxlbmFtZT48L2xpbms+IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbnRpbnVpbmcgd2l0aCB0aGUgZXhhbXBsZSwgeW91IGNhbiBub3cgd3JpdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIGltYWdlIHRvIGEgVVNCIHN0aWNrLCBvciB3aGF0ZXZlciBtZWRpYSBmb3Igd2hpY2ggeW91CisgICAgICAgICAgICAgICAgICAgIGJ1aWx0IHlvdXIgaW1hZ2UsIGFuZCBib290IGZyb20gdGhlIG1lZGlhLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHdyaXRlIHRoZSBpbWFnZSBieSB1c2luZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ym1hcHRvb2w8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGQ8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIG9lLXJ1bi1uYXRpdmUgYm1hcHRvb2wgY29weSBidWlsZC9ta2VmaWRpc2stMjAxNzEwMDYxNDA5LXNkYS5kaXJlY3QgL2Rldi9zZDxyZXBsYWNlYWJsZT5YPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyBkZCBpZj1idWlsZC9ta2VmaWRpc2stMjAxNzEwMDYxNDA5LXNkYS5kaXJlY3Qgb2Y9L2Rldi9zZDxyZXBsYWNlYWJsZT5YPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ym1hcHRvb2w8L2ZpbGVuYW1lPiB0byBmbGFzaCBhIGRldmljZQorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhbiBpbWFnZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2ZsYXNoaW5nLWltYWdlcy11c2luZy1ibWFwdG9vbCc+Rmxhc2hpbmcgSW1hZ2VzIFVzaW5nIDxmaWxlbmFtZT5ibWFwdG9vbDwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CiAKLSAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmctYS1tb2RpZmllZC1raWNrc3RhcnQtZmlsZSc+Ci0gICAgICAgICAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBhIE1vZGlmaWVkIEtpY2tzdGFydCBGaWxlPC90aXRsZT4KKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1hLW1vZGlmaWVkLWtpY2tzdGFydC1maWxlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+VXNpbmcgYSBNb2RpZmllZCBLaWNrc3RhcnQgRmlsZTwvdGl0bGU+CiAKLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHBhcnRpdGlvbmVkIGltYWdlIGNyZWF0aW9uIGlzCi0gICAgICAgICAgICAgICAgICAgICAgICBkcml2ZW4gYnkgdGhlIGtpY2tzdGFydCBmaWxlLCBpdCBpcyBlYXN5IHRvIGFmZmVjdAotICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgY3JlYXRpb24gYnkgY2hhbmdpbmcgdGhlIHBhcmFtZXRlcnMgaW4gdGhlIGZpbGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG5leHQgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgdGhhdCB0aHJvdWdoIG1vZGlmaWNhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIDxmaWxlbmFtZT5kaXJlY3RkaXNrPC9maWxlbmFtZT4ga2lja3N0YXJ0IGZpbGUuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSBwYXJ0aXRpb25lZCBpbWFnZSBjcmVhdGlvbiBpcyBkcml2ZW4gYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIGtpY2tzdGFydCBmaWxlLCBpdCBpcyBlYXN5IHRvIGFmZmVjdCBpbWFnZSBjcmVhdGlvbiBieQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2luZyB0aGUgcGFyYW1ldGVycyBpbiB0aGUgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBuZXh0IGV4YW1wbGUgZGVtb25zdHJhdGVzIHRoYXQgdGhyb3VnaCBtb2RpZmljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIDxmaWxlbmFtZT5kaXJlY3RkaXNrLWdwdDwvZmlsZW5hbWU+IGtpY2tzdGFydAorICAgICAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KIAotICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIEFzIG1lbnRpb25lZCBlYXJsaWVyLCB5b3UgY2FuIHVzZSB0aGUgY29tbWFuZAotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpYyBsaXN0IGltYWdlczwvZmlsZW5hbWU+IHRvIHNob3cgdGhlIGxpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgIG9mIGV4aXN0aW5nIGtpY2tzdGFydCBmaWxlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlc2UgZmlsZXMgcmVzaWRlIGlzCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2NyaXB0cy9saWIvaW1hZ2UvY2FubmVkLXdrcy88L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRlZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgotICAgICAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSB0aGUgYXZhaWxhYmxlIGZpbGVzIHJlc2lkZSBpbiB0aGlzIGRpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gY3JlYXRlIGFuZCBhZGQgeW91ciBvd24gY3VzdG9tIGZpbGVzIHRvIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgotICAgICAgICAgICAgICAgICAgICAgICAgU3Vic2VxdWVudCB1c2Ugb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljIGxpc3QgaW1hZ2VzPC9maWxlbmFtZT4gY29tbWFuZCB3b3VsZCB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlIHlvdXIga2lja3N0YXJ0IGZpbGVzLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFzIG1lbnRpb25lZCBlYXJsaWVyLCB5b3UgY2FuIHVzZSB0aGUgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljIGxpc3QgaW1hZ2VzPC9maWxlbmFtZT4gdG8gc2hvdyB0aGUgbGlzdAorICAgICAgICAgICAgICAgICAgICBvZiBleGlzdGluZyBraWNrc3RhcnQgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kaXJlY3RkaXNrLWdwdC53a3M8L2ZpbGVuYW1lPiBmaWxlIHJlc2lkZXMgaXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHMvbGliL2ltYWdlL2Nhbm5lZC13a3MvPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSBhdmFpbGFibGUgZmlsZXMgcmVzaWRlIGluIHRoaXMgZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIGNyZWF0ZSBhbmQgYWRkIHlvdXIgb3duIGN1c3RvbSBmaWxlcyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBTdWJzZXF1ZW50IHVzZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpYyBsaXN0IGltYWdlczwvZmlsZW5hbWU+IGNvbW1hbmQgd291bGQgdGhlbgorICAgICAgICAgICAgICAgICAgICBpbmNsdWRlIHlvdXIga2lja3N0YXJ0IGZpbGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KIAotICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIGV4aXN0aW5nCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlyZWN0ZGlzazwvZmlsZW5hbWU+IGZpbGUgYWxyZWFkeSBkb2VzIG1vc3QKLSAgICAgICAgICAgICAgICAgICAgICAgIG9mIHdoYXQgaXMgbmVlZGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgZm9yIHRoZSBoYXJkd2FyZSBpbiB0aGlzIGV4YW1wbGUsIHRoZSBpbWFnZQotICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBuZWVkIHRvIGJvb3QgZnJvbSA8ZmlsZW5hbWU+c2RiPC9maWxlbmFtZT4gaW5zdGVhZAotICAgICAgICAgICAgICAgICAgICAgICAgb2YgPGZpbGVuYW1lPnNkYTwvZmlsZW5hbWU+LCB3aGljaCBpcyB3aGF0IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpcmVjdGRpc2s8L2ZpbGVuYW1lPiBraWNrc3RhcnQgZmlsZSB1c2VzLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kaXJlY3RkaXNrLWdwdDwvZmlsZW5hbWU+IGZpbGUgYWxyZWFkeSBkb2VzCisgICAgICAgICAgICAgICAgICAgIG1vc3Qgb2Ygd2hhdCBpcyBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGZvciB0aGUgaGFyZHdhcmUgaW4gdGhpcyBleGFtcGxlLCB0aGUgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgd2lsbCBuZWVkIHRvIGJvb3QgZnJvbSA8ZmlsZW5hbWU+c2RiPC9maWxlbmFtZT4gaW5zdGVhZAorICAgICAgICAgICAgICAgICAgICBvZiA8ZmlsZW5hbWU+c2RhPC9maWxlbmFtZT4sIHdoaWNoIGlzIHdoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kaXJlY3RkaXNrLWdwdDwvZmlsZW5hbWU+IGtpY2tzdGFydCBmaWxlCisgICAgICAgICAgICAgICAgICAgIHVzZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgogCi0gICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGUgYmVnaW5zIGJ5IG1ha2luZyBhIGNvcHkgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlyZWN0ZGlzay53a3M8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHMvbGliL2ltYWdlL2Nhbm5lZC13a3M8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGFuZCB0aGVuIGJ5IGNoYW5naW5nIHRoZSBsaW5lcyB0aGF0IHNwZWNpZnkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQgZGlzayBmcm9tIHdoaWNoIHRvIGJvb3QuCi0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgY3AgL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL3NjcmlwdHMvbGliL2ltYWdlL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay53a3MgXAotICAgICAgICAgIC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9zY3JpcHRzL2xpYi9pbWFnZS9jYW5uZWQtd2tzL2RpcmVjdGRpc2tzZGIud2tzCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICBOZXh0LCB0aGUgZXhhbXBsZSBtb2RpZmllcyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kaXJlY3RkaXNrc2RiLndrczwvZmlsZW5hbWU+IGZpbGUgYW5kIGNoYW5nZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGFsbCBpbnN0YW5jZXMgb2YgIjxmaWxlbmFtZT4tLW9uZGlzayBzZGE8L2ZpbGVuYW1lPiIKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvICI8ZmlsZW5hbWU+LS1vbmRpc2sgc2RiPC9maWxlbmFtZT4iLgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGUgY2hhbmdlcyB0aGUgZm9sbG93aW5nIHR3byBsaW5lcyBhbmQgbGVhdmVzCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVtYWluaW5nIGxpbmVzIHVudG91Y2hlZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGUgYmVnaW5zIGJ5IG1ha2luZyBhIGNvcHkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kaXJlY3RkaXNrLWdwdC53a3M8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2NyaXB0cy9saWIvaW1hZ2UvY2FubmVkLXdrczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBhbmQgdGhlbiBieSBjaGFuZ2luZyB0aGUgbGluZXMgdGhhdCBzcGVjaWZ5CisgICAgICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQgZGlzayBmcm9tIHdoaWNoIHRvIGJvb3QuCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjcCAvaG9tZS9zY290dHJpZi9wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL2RpcmVjdGRpc2stZ3B0LndrcyBcCisgICAgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrc2RiLWdwdC53a3MKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBOZXh0LCB0aGUgZXhhbXBsZSBtb2RpZmllcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpcmVjdGRpc2tzZGItZ3B0LndrczwvZmlsZW5hbWU+IGZpbGUgYW5kCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMgYWxsIGluc3RhbmNlcyBvZgorICAgICAgICAgICAgICAgICAgICAiPGZpbGVuYW1lPi0tb25kaXNrIHNkYTwvZmlsZW5hbWU+IiB0bworICAgICAgICAgICAgICAgICAgICAiPGZpbGVuYW1lPi0tb25kaXNrIHNkYjwvZmlsZW5hbWU+Ii4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGUgY2hhbmdlcyB0aGUgZm9sbG93aW5nIHR3byBsaW5lcyBhbmQgbGVhdmVzCisgICAgICAgICAgICAgICAgICAgIHRoZSByZW1haW5pbmcgbGluZXMgdW50b3VjaGVkOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgIHBhcnQgL2Jvb3QgLS1zb3VyY2UgYm9vdGltZy1wY2Jpb3MgLS1vbmRpc2sgc2RiIC0tbGFiZWwgYm9vdCAtLWFjdGl2ZSAtLWFsaWduIDEwMjQKLSAgICAgcGFydCAvIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBzZGIgLS1mc3R5cGU9ZXh0MyAtLWxhYmVsIHBsYXRmb3JtIC0tYWxpZ24gMTAyNAotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgbGluZXMgYXJlIGNoYW5nZWQsIHRoZSBleGFtcGxlIGdlbmVyYXRlcyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kaXJlY3RkaXNrc2RiPC9maWxlbmFtZT4gaW1hZ2UuCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgY29tbWFuZCBwb2ludHMgdGhlIHByb2Nlc3MgYXQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gYXJ0aWZhY3RzIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIE5leHQgVW5pdCBvZiBDb21wdXRpbmcgKG51YykKLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIHdpYyBjcmVhdGUgZGlyZWN0ZGlza3NkYiAtZSBjb3JlLWltYWdlLW1pbmltYWwKLSAgICAgQ2hlY2tpbmcgYmFzaWMgYnVpbGQgZW52aXJvbm1lbnQuLi4KLSAgICAgRG9uZS4KKyAgICAgcGFydCAvIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBzZGIgLS1mc3R5cGU9ZXh0NCAtLWxhYmVsIHBsYXRmb3JtIC0tYWxpZ24gMTAyNCAtLXVzZS11dWlkCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgbGluZXMgYXJlIGNoYW5nZWQsIHRoZSBleGFtcGxlIGdlbmVyYXRlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpcmVjdGRpc2tzZGItZ3B0PC9maWxlbmFtZT4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kIHBvaW50cyB0aGUgcHJvY2VzcyBhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+IGFydGlmYWN0cyBmb3IKKyAgICAgICAgICAgICAgICAgICAgdGhlIE5leHQgVW5pdCBvZiBDb21wdXRpbmcgKG51YykKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHdpYyBjcmVhdGUgZGlyZWN0ZGlza3NkYi1ncHQgLWUgY29yZS1pbWFnZS1taW5pbWFsCisgICAgIElORk86IEJ1aWxkaW5nIHdpYy10b29scy4uLgorICAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgICAgLgorICAgICBJbml0aWFsaXNpbmcgdGFza3M6IDEwMCUgfCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI3wgVGltZTogMDowMDowMQorICAgICBOT1RFOiBFeGVjdXRpbmcgU2V0U2NlbmUgVGFza3MKKyAgICAgTk9URTogRXhlY3V0aW5nIFJ1blF1ZXVlIFRhc2tzCisgICAgIE5PVEU6IFRhc2tzIFN1bW1hcnk6IEF0dGVtcHRlZCAxMTYxIHRhc2tzIG9mIHdoaWNoIDExNTcgZGlkbid0IG5lZWQgdG8gYmUgcmVydW4gYW5kIGFsbCBzdWNjZWVkZWQuCisgICAgIElORk86IENyZWF0aW5nIGltYWdlKHMpLi4uCiAKLSAgICAgQ3JlYXRpbmcgaW1hZ2UocykuLi4KLQotICAgICBJbmZvOiBUaGUgbmV3IGltYWdlKHMpIGNhbiBiZSBmb3VuZCBoZXJlOgotICAgICAgPHJlcGxhY2VhYmxlPmN1cnJlbnRfZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT4vYnVpbGQvZGlyZWN0ZGlza3NkYi0yMDEzMTAyMzExMzEtc2RiLmRpcmVjdAorICAgICBJTkZPOiBUaGUgbmV3IGltYWdlKHMpIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgIC4vZGlyZWN0ZGlza3NkYi1ncHQtMjAxNzEwMDkwOTM4LXNkYi5kaXJlY3QKIAogICAgICBUaGUgZm9sbG93aW5nIGJ1aWxkIGFydGlmYWN0cyB3ZXJlIHVzZWQgdG8gY3JlYXRlIHRoZSBpbWFnZShzKToKKyAgICAgICBST09URlNfRElSOiAgICAgICAgICAgICAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L2J1aWxkL3RtcC53aWMuaGszd2w2em4vcm9vdGZzX2NvcHkKKyAgICAgICBCT09USU1HX0RJUjogICAgICAgICAgICAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L2J1aWxkL3RtcC93b3JrL3FlbXV4ODYtcG9reS1saW51eC9jb3JlLWltYWdlLW1pbmltYWwvMS4wLXIwL3JlY2lwZS1zeXNyb290L3Vzci9zaGFyZQorICAgICAgIEtFUk5FTF9ESVI6ICAgICAgICAgICAgICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvYnVpbGQvdG1wL2RlcGxveS9pbWFnZXMvcWVtdXg4NgorICAgICAgIE5BVElWRV9TWVNST09UOiAgICAgICAgICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dpYy10b29scy8xLjAtcjAvcmVjaXBlLXN5c3Jvb3QtbmF0aXZlCiAKLSAgICAgIFJPT1RGU19ESVI6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvd29yay9udWMtcG9reS1saW51eC9jb3JlLWltYWdlLW1pbmltYWwvMS4wLXIwL3Jvb3RmcwotICAgICAgQk9PVElNR19ESVI6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvc3lzcm9vdHMvbnVjL3Vzci9zaGFyZQotICAgICAgS0VSTkVMX0RJUjogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC9zeXNyb290cy9udWMvdXNyL3NyYy9rZXJuZWwKLSAgICAgIE5BVElWRV9TWVNST09UOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eAotCi0gICAgIFRoZSBpbWFnZShzKSB3ZXJlIGNyZWF0ZWQgdXNpbmcgT0Uga2lja3N0YXJ0IGZpbGU6Ci0gICAgICAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2Uvc2NyaXB0cy9saWIvaW1hZ2UvY2FubmVkLXdrcy9kaXJlY3RkaXNrc2RiLndrcwotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgQ29udGludWluZyB3aXRoIHRoZSBleGFtcGxlLCB5b3UgY2FuIG5vdyBkaXJlY3RseQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRkPC9maWxlbmFtZT4gdGhlIGltYWdlIHRvIGEgVVNCIHN0aWNrLCBvcgotICAgICAgICAgICAgICAgICAgICAgICAgd2hhdGV2ZXIgbWVkaWEgZm9yIHdoaWNoIHlvdSBidWlsdCB5b3VyIGltYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGJvb3QgdGhlIHJlc3VsdGluZyBtZWRpYToKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBzdWRvIGRkIGlmPWJ1aWxkL2RpcmVjdGRpc2tzZGItMjAxMzEwMjMxMTMxLXNkYi5kaXJlY3Qgb2Y9L2Rldi9zZGIKLSAgICAgODYwMTgrMCByZWNvcmRzIGluCi0gICAgIDg2MDE4KzAgcmVjb3JkcyBvdXQKLSAgICAgNDQwNDEyMTYgYnl0ZXMgKDQ0IE1CKSBjb3BpZWQsIDEzLjA3MzQgcywgMy40IE1CL3MKLSAgICAgW3RyeiBhdCBlbXBhbmFkYSB0bXBdJCBzdWRvIGVqZWN0IC9kZXYvc2RiCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmctYW4taW1hZ2UtYmFzZWQtb24tY29yZS1pbWFnZS1taW5pbWFsLWFuZC1jcm93bmJheS1ub2VtZ2QnPgotICAgICAgICAgICAgICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgYW4gSW1hZ2UgQmFzZWQgb24gPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+Y3Jvd25iYXktbm9lbWdkPC9maWxlbmFtZT48L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIGNyZWF0ZXMgYW4gaW1hZ2UgYmFzZWQgb24KLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBhbmQgYQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNyb3duYmF5LW5vZW1nZDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHdvcmtzIHJpZ2h0IG91dCBvZiB0aGUgYm94LgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIHdpYyBjcmVhdGUgZGlyZWN0ZGlzayAtZSBjb3JlLWltYWdlLW1pbmltYWwKLQotICAgICBDaGVja2luZyBiYXNpYyBidWlsZCBlbnZpcm9ubWVudC4uLgotICAgICBEb25lLgotCi0gICAgIENyZWF0aW5nIGltYWdlKHMpLi4uCi0KLSAgICAgSW5mbzogVGhlIG5ldyBpbWFnZShzKSBjYW4gYmUgZm91bmQgaGVyZToKLSAgICAgIDxyZXBsYWNlYWJsZT5jdXJyZW50X2RpcmVjdG9yeTwvcmVwbGFjZWFibGU+L2J1aWxkL2RpcmVjdGRpc2stMjAxMzA5MjUyMzUwLXNkYS5kaXJlY3QKLQotICAgICBUaGUgZm9sbG93aW5nIGJ1aWxkIGFydGlmYWN0cyB3ZXJlIHVzZWQgdG8gY3JlYXRlIHRoZSBpbWFnZShzKToKLQotICAgICBST09URlNfRElSOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3dvcmsvY3Jvd25iYXlfbm9lbWdkLXBva3ktbGludXgvY29yZS1pbWFnZS1taW5pbWFsLzEuMC1yMC9yb290ZnMKLSAgICAgQk9PVElNR19ESVI6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvc3lzcm9vdHMvY3Jvd25iYXktbm9lbWdkL3Vzci9zaGFyZQotICAgICBLRVJORUxfRElSOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3N5c3Jvb3RzL2Nyb3duYmF5LW5vZW1nZC91c3Ivc3JjL2tlcm5lbAotICAgICBOQVRJVkVfU1lTUk9PVDogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC9zeXNyb290cy9jcm93bmJheS1ub2VtZ2QvdXNyL3NyYy9rZXJuZWwKLQotICAgICBUaGUgaW1hZ2Uocykgd2VyZSBjcmVhdGVkIHVzaW5nIE9FIGtpY2tzdGFydCBmaWxlOgotICAgICAgL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL3NjcmlwdHMvbGliL2ltYWdlL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay53a3MKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1hLW1vZGlmaWVkLWtpY2tzdGFydC1maWxlLWFuZC1ydW5uaW5nLWluLXJhdy1tb2RlJz4KLSAgICAgICAgICAgICAgICAgICAgPHRpdGxlPlVzaW5nIGEgTW9kaWZpZWQgS2lja3N0YXJ0IEZpbGUgYW5kIFJ1bm5pbmcgaW4gUmF3IE1vZGU8L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBuZXh0IGV4YW1wbGUgbWFudWFsbHkgc3BlY2lmaWVzIGVhY2ggYnVpbGQgYXJ0aWZhY3QKLSAgICAgICAgICAgICAgICAgICAgICAgIChydW5zIGluIFJhdyBNb2RlKSBhbmQgdXNlcyBhIG1vZGlmaWVkIGtpY2tzdGFydCBmaWxlLgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGUgYWxzbyB1c2VzIHRoZSA8ZmlsZW5hbWU+LW88L2ZpbGVuYW1lPiBvcHRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIHRvIGNhdXNlIFdpYyB0byBjcmVhdGUgdGhlIG91dHB1dAotICAgICAgICAgICAgICAgICAgICAgICAgc29tZXdoZXJlIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQgb3V0cHV0IGRpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIHRoZSBjdXJyZW50IGRpcmVjdG9yeToKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCB3aWMgY3JlYXRlIH4vdGVzdC53a3MgLW8gL2hvbWUvdHJ6L3Rlc3R3aWMgLS1yb290ZnMtZGlyIFwKLSAgICAgICAgICAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3dvcmsvY3Jvd25iYXlfbm9lbWdkLXBva3ktbGludXgvY29yZS1pbWFnZS1taW5pbWFsLzEuMC1yMC9yb290ZnMgXAotICAgICAgICAgIC0tYm9vdGltZy1kaXIgL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC9zeXNyb290cy9jcm93bmJheS1ub2VtZ2QvdXNyL3NoYXJlIFwKLSAgICAgICAgICAtLWtlcm5lbC1kaXIgL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC9zeXNyb290cy9jcm93bmJheS1ub2VtZ2QvdXNyL3NyYy9rZXJuZWwgXAotICAgICAgICAgIC0tbmF0aXZlLXN5c3Jvb3QgL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgKLQotICAgICBDcmVhdGluZyBpbWFnZShzKS4uLgotCi0gICAgIEluZm86IFRoZSBuZXcgaW1hZ2UocykgY2FuIGJlIGZvdW5kIGhlcmU6Ci0gICAgICAvaG9tZS90cnovdGVzdHdpYy9idWlsZC90ZXN0LTIwMTMwOTI2MDAzMi1zZGEuZGlyZWN0Ci0KLSAgICAgVGhlIGZvbGxvd2luZyBidWlsZCBhcnRpZmFjdHMgd2VyZSB1c2VkIHRvIGNyZWF0ZSB0aGUgaW1hZ2Uocyk6Ci0KLSAgICAgUk9PVEZTX0RJUjogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC93b3JrL2Nyb3duYmF5X25vZW1nZC1wb2t5LWxpbnV4L2NvcmUtaW1hZ2UtbWluaW1hbC8xLjAtcjAvcm9vdGZzCi0gICAgIEJPT1RJTUdfRElSOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3N5c3Jvb3RzL2Nyb3duYmF5LW5vZW1nZC91c3Ivc2hhcmUKLSAgICAgS0VSTkVMX0RJUjogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC9zeXNyb290cy9jcm93bmJheS1ub2VtZ2QvdXNyL3NyYy9rZXJuZWwKLSAgICAgTkFUSVZFX1NZU1JPT1Q6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvc3lzcm9vdHMvY3Jvd25iYXktbm9lbWdkL3Vzci9zcmMva2VybmVsCi0KLSAgICAgVGhlIGltYWdlKHMpIHdlcmUgY3JlYXRlZCB1c2luZyBPRSBraWNrc3RhcnQgZmlsZToKLSAgICAgIC9ob21lL3Ryei90ZXN0LndrcwotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHRoaXMgZXhhbXBsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRpZCBub3QgaGF2ZSB0byBiZSBzcGVjaWZpZWQgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgc2luY2UgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBhcnRpZmFjdCBpcyBtYW51YWxseSBzcGVjaWZpZWQuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgIElORk86IFRoZSBpbWFnZShzKSB3ZXJlIGNyZWF0ZWQgdXNpbmcgT0Uga2lja3N0YXJ0IGZpbGU6CisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrc2RiLWdwdC53a3MKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBDb250aW51aW5nIHdpdGggdGhlIGV4YW1wbGUsIHlvdSBjYW4gbm93IGRpcmVjdGx5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZDwvZmlsZW5hbWU+IHRoZSBpbWFnZSB0byBhIFVTQiBzdGljaywgb3IKKyAgICAgICAgICAgICAgICAgICAgd2hhdGV2ZXIgbWVkaWEgZm9yIHdoaWNoIHlvdSBidWlsdCB5b3VyIGltYWdlLAorICAgICAgICAgICAgICAgICAgICBhbmQgYm9vdCB0aGUgcmVzdWx0aW5nIG1lZGlhOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyBkZCBpZj1kaXJlY3RkaXNrc2RiLWdwdC0yMDE3MTAwOTA5Mzgtc2RiLmRpcmVjdCBvZj0vZGV2L3NkYgorICAgICAxNDA5NjYrMCByZWNvcmRzIGluCisgICAgIDE0MDk2NiswIHJlY29yZHMgb3V0CisgICAgIDcyMTc0NTkyIGJ5dGVzICg3MiBNQiwgNjkgTWlCKSBjb3BpZWQsIDc4LjAyODIgcywgOTI1IGtCL3MKKyAgICAgJCBzdWRvIGVqZWN0IC9kZXYvc2RiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L3NlY3Rpb24+CiAKLSAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdvcGVuZW1iZWRkZWQta2lja3N0YXJ0LXBsdWdpbnMnPgotICAgICAgICAgICAgICAgIDx0aXRsZT5QbHVnLWluczwvdGl0bGU+CisgICAgICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmctYS1tb2RpZmllZC1raWNrc3RhcnQtZmlsZS1hbmQtcnVubmluZy1pbi1yYXctbW9kZSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPlVzaW5nIGEgTW9kaWZpZWQgS2lja3N0YXJ0IEZpbGUgYW5kIFJ1bm5pbmcgaW4gUmF3IE1vZGU8L3RpdGxlPgogCiAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFBsdWctaW5zIGFsbG93IFdpYyBmdW5jdGlvbmFsaXR5IHRvCi0gICAgICAgICAgICAgICAgICAgIGJlIGV4dGVuZGVkIGFuZCBzcGVjaWFsaXplZCBieSB1c2Vycy4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRvY3VtZW50cyB0aGUgcGx1Zy1pbiBpbnRlcmZhY2UsIHdoaWNoIGlzCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRseSByZXN0cmljdGVkIHRvIHNvdXJjZSBwbHVnLWlucy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBuZXh0IGV4YW1wbGUgbWFudWFsbHkgc3BlY2lmaWVzIGVhY2ggYnVpbGQgYXJ0aWZhY3QKKyAgICAgICAgICAgICAgICAgICAgKHJ1bnMgaW4gUmF3IE1vZGUpIGFuZCB1c2VzIGEgbW9kaWZpZWQga2lja3N0YXJ0IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBleGFtcGxlIGFsc28gdXNlcyB0aGUgPGZpbGVuYW1lPi1vPC9maWxlbmFtZT4gb3B0aW9uCisgICAgICAgICAgICAgICAgICAgIHRvIGNhdXNlIFdpYyB0byBjcmVhdGUgdGhlIG91dHB1dAorICAgICAgICAgICAgICAgICAgICBzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCBvdXRwdXQgZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyB0aGUgY3VycmVudCBkaXJlY3Rvcnk6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB3aWMgY3JlYXRlIC9ob21lL3Njb3R0cmlmL215X3lvY3RvL3Rlc3Qud2tzIC1vIC9ob21lL3Njb3R0cmlmL3Rlc3R3aWMgXAorICAgICAgICAgIC0tcm9vdGZzLWRpciAvaG9tZS9zY290dHJpZi9wb2t5L2J1aWxkL3RtcC93b3JrL3FlbXV4ODYtcG9reS1saW51eC9jb3JlLWltYWdlLW1pbmltYWwvMS4wLXIwL3Jvb3RmcyBcCisgICAgICAgICAgLS1ib290aW1nLWRpciAvaG9tZS9zY290dHJpZi9wb2t5L2J1aWxkL3RtcC93b3JrL3FlbXV4ODYtcG9reS1saW51eC9jb3JlLWltYWdlLW1pbmltYWwvMS4wLXIwL3JlY2lwZS1zeXNyb290L3Vzci9zaGFyZSBcCisgICAgICAgICAgLS1rZXJuZWwtZGlyIC9ob21lL3Njb3R0cmlmL3Bva3kvYnVpbGQvdG1wL2RlcGxveS9pbWFnZXMvcWVtdXg4NiBcCisgICAgICAgICAgLS1uYXRpdmUtc3lzcm9vdCAvaG9tZS9zY290dHJpZi9wb2t5L2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC93aWMtdG9vbHMvMS4wLXIwL3JlY2lwZS1zeXNyb290LW5hdGl2ZQorCisgICAgIElORk86IENyZWF0aW5nIGltYWdlKHMpLi4uCisKKyAgICAgSU5GTzogVGhlIG5ldyBpbWFnZShzKSBjYW4gYmUgZm91bmQgaGVyZToKKyAgICAgICAvaG9tZS9zY290dHJpZi90ZXN0d2ljL3Rlc3QtMjAxNzEwMDkxNDQ1LXNkYi5kaXJlY3QKKworICAgICBUaGUgZm9sbG93aW5nIGJ1aWxkIGFydGlmYWN0cyB3ZXJlIHVzZWQgdG8gY3JlYXRlIHRoZSBpbWFnZShzKToKKyAgICAgICBST09URlNfRElSOiAgICAgICAgICAgICAgICAgICAvaG9tZS9zY290dHJpZi90ZXN0d2ljL3RtcC53aWMueDR3aXBibWIvcm9vdGZzX2NvcHkKKyAgICAgICBCT09USU1HX0RJUjogICAgICAgICAgICAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L2J1aWxkL3RtcC93b3JrL3FlbXV4ODYtcG9reS1saW51eC9jb3JlLWltYWdlLW1pbmltYWwvMS4wLXIwL3JlY2lwZS1zeXNyb290L3Vzci9zaGFyZQorICAgICAgIEtFUk5FTF9ESVI6ICAgICAgICAgICAgICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvYnVpbGQvdG1wL2RlcGxveS9pbWFnZXMvcWVtdXg4NgorICAgICAgIE5BVElWRV9TWVNST09UOiAgICAgICAgICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dpYy10b29scy8xLjAtcjAvcmVjaXBlLXN5c3Jvb3QtbmF0aXZlCisKKyAgICAgSU5GTzogVGhlIGltYWdlKHMpIHdlcmUgY3JlYXRlZCB1c2luZyBPRSBraWNrc3RhcnQgZmlsZToKKyAgICAgICAvaG9tZS9zY290dHJpZi9teV95b2N0by90ZXN0LndrcworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciB0aGlzIGV4YW1wbGUsCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgZGlkIG5vdCBoYXZlIHRvIGJlIHNwZWNpZmllZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHNpbmNlIHRoZQorICAgICAgICAgICAgICAgICAgICBhcnRpZmFjdCBpcyBtYW51YWxseSBzcGVjaWZpZWQuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmctd2ljLXRvLW1hbmlwdWxhdGUtYW4taW1hZ2UnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBXaWMgdG8gTWFuaXB1bGF0ZSBhbiBJbWFnZTwvdGl0bGU+CiAKICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgU291cmNlIHBsdWctaW5zIHByb3ZpZGUgYSBtZWNoYW5pc20gdG8gY3VzdG9taXplCi0gICAgICAgICAgICAgICAgICAgIHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgaW1hZ2UgZ2VuZXJhdGlvbiBwcm9jZXNzIGluCi0gICAgICAgICAgICAgICAgICAgIFdpYywgbWFpbmx5IHRoZSBjb250ZW50cyBvZgotICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb25zLgotICAgICAgICAgICAgICAgICAgICBUaGUgcGx1Zy1pbnMgcHJvdmlkZSBhIG1lY2hhbmlzbSBmb3IgbWFwcGluZyB2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGluIDxmaWxlbmFtZT4ud2tzPC9maWxlbmFtZT4gZmlsZXMgdXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tLXNvdXJjZTwvZmlsZW5hbWU+IGtleXdvcmQgdG8gYQotICAgICAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyIHBsdWctaW4gaW1wbGVtZW50YXRpb24gdGhhdCBwb3B1bGF0ZXMgYQotICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHBhcnRpdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgV2ljIGltYWdlIG1hbmlwdWxhdGlvbiBhbGxvd3MgeW91IHRvIHNob3J0ZW4gdHVybmFyb3VuZAorICAgICAgICAgICAgICAgICAgICB0aW1lIGR1cmluZyBpbWFnZSBkZXZlbG9wbWVudC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gdXNlIFdpYyB0byBkZWxldGUgdGhlIGtlcm5lbCBwYXJ0aXRpb24KKyAgICAgICAgICAgICAgICAgICAgb2YgYSBXaWMgaW1hZ2UgYW5kIHRoZW4gaW5zZXJ0IGEgbmV3bHkgYnVpbHQga2VybmVsLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNhdmVzIHlvdSB0aW1lIGZyb20gaGF2aW5nIHRvIHJlYnVpbGQgdGhlIGVudGlyZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICBlYWNoIHRpbWUgeW91IG1vZGlmeSB0aGUga2VybmVsLgogICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSB1c2UgcGx1Zy1pbnMgdGhhdCBoYXZlIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiBuYXRpdmUgdG9vbHMsIGJvb3Rsb2FkZXJzLCBhbmQgc28gZm9ydGgpCi0gICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGEgV2ljIGltYWdlLCB5b3UgbmVlZCB0byBzcGVjaWZ5IHRob3NlCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMgdXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItV0tTX0ZJTEVfREVQRU5EUyc+PGZpbGVuYW1lPldLU19GSUxFX0RFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIHVzZSBXaWMgdG8gbWFuaXB1bGF0ZSBhIFdpYyBpbWFnZSBhcyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBleGFtcGxlLCB5b3VyIGRldmVsb3BtZW50IG1hY2hpbmUgbXVzdCBoYXZlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm10b29sczwvZmlsZW5hbWU+IHBhY2thZ2UgaW5zdGFsbGVkLgogICAgICAgICAgICAgICAgICAgICA8L25vdGU+CiAgICAgICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEEgc291cmNlIHBsdWctaW4gaXMgY3JlYXRlZCBhcyBhIHN1YmNsYXNzIG9mCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5Tb3VyY2VQbHVnaW48L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgVGhlIHBsdWctaW4gZmlsZSBjb250YWluaW5nIGl0IGlzIGFkZGVkIHRvCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvPC9maWxlbmFtZT4gdG8KLSAgICAgICAgICAgICAgICAgICAgbWFrZSB0aGUgcGx1Zy1pbiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgIFdpYyBpbXBsZW1lbnRhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2NyaXB0cy9saWIvd2ljL3BsdWdpbmJhc2UucHk8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgU291cmNlIHBsdWctaW5zIGNhbiBhbHNvIGJlIGltcGxlbWVudGVkIGFuZCBhZGRlZCBieQotICAgICAgICAgICAgICAgICAgICBleHRlcm5hbCBsYXllcnMuCi0gICAgICAgICAgICAgICAgICAgIEFzIHN1Y2gsIGFueSBwbHVnLWlucyBmb3VuZCBpbiBhCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGluIGFuIGV4dGVybmFsIGxheWVyIGFyZSBhbHNvIG1hZGUKLSAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBXaGVuIHRoZSBXaWMgaW1wbGVtZW50YXRpb24gbmVlZHMKLSAgICAgICAgICAgICAgICAgICAgdG8gaW52b2tlIGEgcGFydGl0aW9uLXNwZWNpZmljIGltcGxlbWVudGF0aW9uLCBpdCBsb29rcwotICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHBsdWctaW4gdGhhdCBoYXMgdGhlIHNhbWUgbmFtZSBhcyB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi0tc291cmNlPC9maWxlbmFtZT4gcGFyYW1ldGVyIGdpdmVuIHRvCi0gICAgICAgICAgICAgICAgICAgIHRoYXQgcGFydGl0aW9uLgotICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIHBhcnRpdGlvbiBpcyBzZXQgdXAgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctcGNiaW9zICAgLi4uCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgVGhlIG1ldGhvZHMgZGVmaW5lZCBhcyBjbGFzcyBtZW1iZXJzIG9mIHRoZSBwbHVnLWluCi0gICAgICAgICAgICAgICAgICAgIGhhdmluZyB0aGUgbWF0Y2hpbmcgPGZpbGVuYW1lPmJvb3RpbWctcGNiaW9zLm5hbWU8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBjbGFzcyBtZW1iZXIgYXJlIHVzZWQuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRvIGJlIG1vcmUgY29uY3JldGUsIGhlcmUgaXMgdGhlIHBsdWctaW4gZGVmaW5pdGlvbiB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgYQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS1zb3VyY2UgYm9vdGltZy1wY2Jpb3M8L2ZpbGVuYW1lPiB1c2FnZSwKLSAgICAgICAgICAgICAgICAgICAgYWxvbmcgd2l0aCBhbiBleGFtcGxlCi0gICAgICAgICAgICAgICAgICAgIG1ldGhvZCBjYWxsZWQgYnkgdGhlIFdpYyBpbXBsZW1lbnRhdGlvbgotICAgICAgICAgICAgICAgICAgICB3aGVuIGl0IG5lZWRzIHRvIGludm9rZSBhbiBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYwotICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb24tcHJlcGFyYXRpb24gZnVuY3Rpb246Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICBjbGFzcyBCb290aW1nUGNiaW9zUGx1Z2luKFNvdXJjZVBsdWdpbik6Ci0gICAgICAgIG5hbWUgPSAnYm9vdGltZy1wY2Jpb3MnCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgZGVmIGRvX3ByZXBhcmVfcGFydGl0aW9uKHNlbGYsIHBhcnQsIC4uLikKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICBJZiB0aGUgc3ViY2xhc3MgaXRzZWxmIGRvZXMgbm90IGltcGxlbWVudCBhIGZ1bmN0aW9uLCBhCi0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgdmVyc2lvbiBpbiBhIHN1cGVyY2xhc3MgaXMgbG9jYXRlZCBhbmQKLSAgICAgICAgICAgICAgICAgICAgdXNlZCwgd2hpY2ggaXMgd2h5IGFsbCBwbHVnLWlucyBtdXN0IGJlIGRlcml2ZWQgZnJvbQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U291cmNlUGx1Z2luPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+U291cmNlUGx1Z2luPC9maWxlbmFtZT4gY2xhc3MgZGVmaW5lcyB0aGUKLSAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIG1ldGhvZHMsIHdoaWNoIGlzIHRoZSBjdXJyZW50IHNldCBvZiBtZXRob2RzCi0gICAgICAgICAgICAgICAgICAgIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIG9yIG92ZXJyaWRkZW4gYnkKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi0tc291cmNlPC9maWxlbmFtZT4gcGx1Zy1pbnMuCi0gICAgICAgICAgICAgICAgICAgIEFueSBtZXRob2RzIG5vdCBpbXBsZW1lbnRlZCBieSBhCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5Tb3VyY2VQbHVnaW48L2ZpbGVuYW1lPiBzdWJjbGFzcyBpbmhlcml0IHRoZQotICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMgcHJlc2VudCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNvdXJjZVBsdWdpbjwvZmlsZW5hbWU+IGNsYXNzLgotICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U291cmNlUGx1Z2luPC9maWxlbmFtZT4gc291cmNlIGZvciBkZXRhaWxzOgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgZXhhbWluZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBXaWMKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UsIGRlbGV0ZXMgdGhlIGV4aXN0aW5nIGtlcm5lbCwgYW5kIHRoZW4gaW5zZXJ0cyBhCisgICAgICAgICAgICAgICAgICAgIG5ldyBrZXJuZWw6CisgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPmRvX3ByZXBhcmVfcGFydGl0aW9uKCk8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxlZCB0byBkbyB0aGUgYWN0dWFsIGNvbnRlbnQgcG9wdWxhdGlvbiBmb3IgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5MaXN0IHRoZSBQYXJ0aXRpb25zOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+d2ljIGxzPC9maWxlbmFtZT4gY29tbWFuZCB0byBsaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsIHRoZSBwYXJ0aXRpb25zIGluIHRoZSBXaWMgaW1hZ2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHdpYyBscyB0bXAvZGVwbG95L2ltYWdlcy9xZW11eDg2L2NvcmUtaW1hZ2UtbWluaW1hbC1xZW11eDg2LndpYworICAgICBOdW0gICAgIFN0YXJ0ICAgICAgICBFbmQgICAgICAgICAgU2l6ZSAgICAgIEZzdHlwZQorICAgICAgMSAgICAgICAxMDQ4NTc2ICAgICAyNTA0MTkxOSAgICAgMjM5OTMzNDQgIGZhdDE2CisgICAgICAyICAgICAgMjUxNjU4MjQgICAgIDcyMTU3MTgzICAgICA0Njk5MTM2MCAgZXh0NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcHJldmlvdXMgb3V0cHV0IHNob3dzIHR3byBwYXJ0aXRpb25zIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWwtcWVtdXg4Ni53aWM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5FeGFtaW5lIGEgUGFydGljdWxhciBQYXJ0aXRpb246PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT53aWMgbHM8L2ZpbGVuYW1lPiBjb21tYW5kIGFnYWluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IGluIGEgZGlmZmVyZW50IGZvcm0gdG8gZXhhbWluZSBhIHBhcnRpY3VsYXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRoZSBtZXRob2QgcHJlcGFyZXMgdGhlIGZpbmFsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uIGltYWdlIHRoYXQgaXMgaW5jb3Jwb3JhdGVkIGludG8gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzayBpbWFnZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZV9wYXJ0aXRpb24oKTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbGVkIGJlZm9yZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wcmVwYXJlX3BhcnRpdGlvbigpPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRob2QgaXMgdHlwaWNhbGx5IHVzZWQgdG8gY3JlYXRlIGN1c3RvbQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIGEgcGFydGl0aW9uIChlLmcuIHN5c2xpbnV4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZ3J1YiBjb25maWd1cmF0aW9uIGZpbGVzKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPmRvX2luc3RhbGxfZGlzaygpPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsZWQgYWZ0ZXIgYWxsIHBhcnRpdGlvbnMgaGF2ZSBiZWVuIHByZXBhcmVkIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VtYmxlZCBpbnRvIGEgZGlzayBpbWFnZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBwcm92aWRlcyBhIGhvb2sgdG8gYWxsb3cgZmluYWxpemF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgYSBkaXNrIGltYWdlLCAoZS5nLiB3cml0aW5nIGFuIE1CUikuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5kb19zdGFnZV9wYXJ0aXRpb24oKTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lhbCBjb250ZW50LXN0YWdpbmcgaG9vayBjYWxsZWQgYmVmb3JlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3ByZXBhcmVfcGFydGl0aW9uKCk8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyBub3JtYWxseSBlbXB0eS48L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VHlwaWNhbGx5LCBhIHBhcnRpdGlvbiBqdXN0IHVzZXMgdGhlIHBhc3NlZC1pbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgKGUuZy4gdGhlIHVubW9kaWZpZWQgdmFsdWUgb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ym9vdGltZ19kaXI8L2ZpbGVuYW1lPikuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaW4gc29tZSBjYXNlcyB0aGluZ3MgbWlnaHQgbmVlZCB0byBiZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcmUgdGFpbG9yZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgY2VydGFpbiBmaWxlcyBtaWdodCBhZGRpdGlvbmFsbHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGJlIHRha2VuIGZyb20KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ym9vdGltZ19kaXIgKyAvYm9vdDwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaG9vayBhbGxvd3MgdGhvc2UgZmlsZXMgdG8gYmUgc3RhZ2VkIGluIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21pemVkIGZhc2hpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5nZXRfYml0YmFrZV92YXIoKTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93cyB5b3UgdG8gYWNjZXNzIG5vbi1zdGFuZGFyZCB2YXJpYWJsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB5b3UgbWlnaHQgd2FudCB0byB1c2UgZm9yIHRoaXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZ2V0IGNvbW1hbmQgdXNhZ2Ugb24gYW55IFdpYyBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSBmb2xsb3dpbmcgZm9ybToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHdpYyBoZWxwIDxyZXBsYWNlYWJsZT5jb21tYW5kPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21tYW5kIHNob3dzIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdmFyaW91cyB3YXlzIHRvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpYyBsczwvZmlsZW5hbWU+IGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB3aWMgaGVscCBscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kIHNob3dzIHdoYXQgaXMgaW4gUGFydGl0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB3aWMgbHMgdG1wL2RlcGxveS9pbWFnZXMvcWVtdXg4Ni9jb3JlLWltYWdlLW1pbmltYWwtcWVtdXg4Ni53aWM6MQorICAgICBWb2x1bWUgaW4gZHJpdmUgOiBpcyBib290CisgICAgICBWb2x1bWUgU2VyaWFsIE51bWJlciBpcyBFODk0LTE4MDkKKyAgICAgRGlyZWN0b3J5IGZvciA6Oi8KIAotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBUaGlzIHNjaGVtZSBpcyBleHRlbnNpYmxlLgotICAgICAgICAgICAgICAgICAgICBBZGRpbmcgbW9yZSBob29rcyBpcyBhIHNpbXBsZSBtYXR0ZXIgb2YgYWRkaW5nIG1vcmUKLSAgICAgICAgICAgICAgICAgICAgcGx1Zy1pbiBtZXRob2RzIHRvIDxmaWxlbmFtZT5Tb3VyY2VQbHVnaW48L2ZpbGVuYW1lPiBhbmQKLSAgICAgICAgICAgICAgICAgICAgZGVyaXZlZCBjbGFzc2VzLgotICAgICAgICAgICAgICAgICAgICBUaGUgY29kZSB0aGF0IHRoZW4gbmVlZHMgdG8gY2FsbCB0aGUgcGx1Zy1pbiBtZXRob2RzIHVzZXMKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBsdWdpbi5nZXRfc291cmNlX3BsdWdpbl9tZXRob2RzKCk8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICB0byBmaW5kIHRoZSBtZXRob2Qgb3IgbWV0aG9kcyBuZWVkZWQgYnkgdGhlIGNhbGwuCi0gICAgICAgICAgICAgICAgICAgIFJldHJpZXZhbCBvZiB0aG9zZSBtZXRob2RzIGlzIGFjY29tcGxpc2hlZAotICAgICAgICAgICAgICAgICAgICBieSBmaWxsaW5nIHVwIGEgZGljdCB3aXRoIGtleXMKLSAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZyB0aGUgbWV0aG9kIG5hbWVzIG9mIGludGVyZXN0LgotICAgICAgICAgICAgICAgICAgICBPbiBzdWNjZXNzLCB0aGVzZSB3aWxsIGJlIGZpbGxlZCBpbiB3aXRoIHRoZSBhY3R1YWwKLSAgICAgICAgICAgICAgICAgICAgbWV0aG9kcy4KLSAgICAgICAgICAgICAgICAgICAgUGxlYXNlIHNlZSB0aGUgV2ljCi0gICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIGZvciBleGFtcGxlcyBhbmQgZGV0YWlscy4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgIGxpYmNvbTMyIGMzMiAgICAxODY1MDAgMjAxNy0xMC0wOSAgMTY6MDYKKyAgICAgbGlidXRpbCAgYzMyICAgICAyNDE0OCAyMDE3LTEwLTA5ICAxNjowNgorICAgICBzeXNsaW51eCBjZmcgICAgICAgMjIwIDIwMTctMTAtMDkgIDE2OjA2CisgICAgIHZlc2FtZW51IGMzMiAgICAgMjcxMDQgMjAxNy0xMC0wOSAgMTY6MDYKKyAgICAgdm1saW51eiAgICAgICAgNjkwNDYwOCAyMDE3LTEwLTA5ICAxNjowNgorICAgICAgICAgICAgIDUgZmlsZXMgICAgICAgICAgIDcgMTQyIDU4MCBieXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYgNTgyIDY1NiBieXRlcyBmcmVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBvdXRwdXQgc2hvd3MgZml2ZSBmaWxlcywgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dm1saW51ejwvZmlsZW5hbWU+IGJlaW5nIHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBzZWUgdGhlIGZvbGxvd2luZyBlcnJvciwgeW91IG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlIG9yIGNyZWF0ZSBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5+Ly5tdG9vbHNyYzwvZmlsZW5hbWU+IGZpbGUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHN1cmUgdG8gaGF2ZSB0aGUgbGluZSDigJxtdG9vbHNfc2tpcF9jaGVjaz0x4oCcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVuLCBydW4gdGhlIFdpYyBjb21tYW5kIGFnYWluOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEVSUk9SOiBfZXhlY19jbWQ6IC91c3IvYmluL21kaXIgLWkgL3RtcC93aWMtcGFydHRmb2t1d3JhIDo6LyByZXR1cm5lZCAnMScgaW5zdGVhZCBvZiAwCisgICAgICBvdXRwdXQ6IFRvdGFsIG51bWJlciBvZiBzZWN0b3JzICg0NzgyNCkgbm90IGEgbXVsdGlwbGUgb2Ygc2VjdG9ycyBwZXIgdHJhY2sgKDMyKSEKKyAgICAgIEFkZCBtdG9vbHNfc2tpcF9jaGVjaz0xIHRvIHlvdXIgLm10b29sc3JjIGZpbGUgdG8gc2tpcCB0aGlzIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlJlbW92ZSB0aGUgT2xkIEtlcm5lbDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT53aWMgcm08L2ZpbGVuYW1lPiBjb21tYW5kIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZSB0aGUgPGZpbGVuYW1lPnZtbGludXo8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXJuZWwpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgd2ljIHJtIHRtcC9kZXBsb3kvaW1hZ2VzL3FlbXV4ODYvY29yZS1pbWFnZS1taW5pbWFsLXFlbXV4ODYud2ljOjEvdm1saW51egorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkFkZCBJbiB0aGUgTmV3IEtlcm5lbDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT53aWMgY3A8L2ZpbGVuYW1lPiBjb21tYW5kIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCB0aGUgdXBkYXRlZCBrZXJuZWwgdG8gdGhlIFdpYyBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIGhvdyB5b3UgYnVpbHQgeW91ciBrZXJuZWwsIGl0IGNvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGluIGRpZmZlcmVudCBwbGFjZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSB1c2VkIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIFNESyB0byBidWlsZCB5b3VyIGtlcm5lbCwgaXQgcmVzaWRlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC93b3JrPC9maWxlbmFtZT4gZGlyZWN0b3J5IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpYmxlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHVzZWQgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiB0byBidWlsZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsLCB0aGUga2VybmVsIHdpbGwgYmUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53b3Jrc3BhY2Uvc291cmNlczwvZmlsZW5hbWU+IGFyZWEuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KIAotICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J29wZW5lbWJlZGRlZC1raWNrc3RhcnQtd2tzLXJlZmVyZW5jZSc+Ci0gICAgICAgICAgICAgICAgPHRpdGxlPk9wZW5FbWJlZGRlZCBLaWNrc3RhcnQgKDxmaWxlbmFtZT4ud2tzPC9maWxlbmFtZT4pIFJlZmVyZW5jZTwvdGl0bGU+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGN1cnJlbnQgV2ljIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzCi0gICAgICAgICAgICAgICAgICAgIG9ubHkgdGhlIGJhc2ljIGtpY2tzdGFydCBwYXJ0aXRpb25pbmcgY29tbWFuZHM6Ci0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYXJ0aXRpb248L2ZpbGVuYW1lPiAob3IgPGZpbGVuYW1lPnBhcnQ8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBmb3Igc2hvcnQpIGFuZCA8ZmlsZW5hbWU+Ym9vdGxvYWRlcjwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZ1dHVyZSB1cGRhdGVzIHdpbGwgaW1wbGVtZW50IG1vcmUgY29tbWFuZHMgYW5kIG9wdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgdXNlIGFueXRoaW5nIHRoYXQgaXMgbm90IHNwZWNpZmljYWxseQotICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkLCByZXN1bHRzIGNhbiBiZSB1bnByZWRpY3RhYmxlLgotICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYSBsaXN0IG9mIHRoZSBjb21tYW5kcywgdGhlaXIgc3ludGF4LAotICAgICAgICAgICAgICAgICAgICBhbmQgbWVhbmluZ3MuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kcyBhcmUgYmFzZWQgb24gdGhlIEZlZG9yYQotICAgICAgICAgICAgICAgICAgICBraWNrc3RhcnQgdmVyc2lvbnMgYnV0IHdpdGggbW9kaWZpY2F0aW9ucyB0bwotICAgICAgICAgICAgICAgICAgICByZWZsZWN0IFdpYyBjYXBhYmlsaXRpZXMuCi0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VlIHRoZSBvcmlnaW5hbCBkb2N1bWVudGF0aW9uIGZvciB0aG9zZSBjb21tYW5kcwotICAgICAgICAgICAgICAgICAgICBhdCB0aGUgZm9sbG93aW5nIGxpbmtzOgotICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93aWtpL0FuYWNvbmRhL0tpY2tzdGFydCNwYXJ0X29yX3BhcnRpdGlvbic+aHR0cDovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvQW5hY29uZGEvS2lja3N0YXJ0I3BhcnRfb3JfcGFydGl0aW9uPC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9BbmFjb25kYS9LaWNrc3RhcnQjYm9vdGxvYWRlcic+aHR0cDovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvQW5hY29uZGEvS2lja3N0YXJ0I2Jvb3Rsb2FkZXI8L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0nY29tbWFuZC1wYXJ0LW9yLXBhcnRpdGlvbic+Ci0gICAgICAgICAgICAgICAgICAgIDx0aXRsZT5Db21tYW5kOiBwYXJ0IG9yIHBhcnRpdGlvbjwvdGl0bGU+Ci0KLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEVpdGhlciBvZiB0aGVzZSBjb21tYW5kcyBjcmVhdGUgYSBwYXJ0aXRpb24gb24gdGhlIHN5c3RlbQotICAgICAgICAgICAgICAgICAgICBhbmQgdXNlIHRoZSBmb2xsb3dpbmcgc3ludGF4OgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBwYXJ0IFs8cmVwbGFjZWFibGU+bW50cG9pbnQ8L3JlcGxhY2VhYmxlPl0KLSAgICAgcGFydGl0aW9uIFs8cmVwbGFjZWFibGU+bW50cG9pbnQ8L3JlcGxhY2VhYmxlPl0KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3QgcHJvdmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPm1udHBvaW50PC9yZXBsYWNlYWJsZT4sIFdpYyBjcmVhdGVzIGEKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbiBidXQgZG9lcyBub3QgbW91bnQgaXQuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5tbnRwb2ludDwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlzIHdoZXJlIHRoZSBwYXJ0aXRpb24gd2lsbCBiZSBtb3VudGVkIGFuZCBtdXN0IGJlIG9mCi0gICAgICAgICAgICAgICAgICAgICAgICBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtczoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LzxyZXBsYWNlYWJsZT5wYXRoPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsICIvIiwgIi91c3IiLCBvciAiL2hvbWUiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN3YXA8L2ZpbGVuYW1lPjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGNyZWF0ZWQgcGFydGl0aW9uIGlzIHVzZWQgYXMgc3dhcCBzcGFjZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmeWluZyBhIDxyZXBsYWNlYWJsZT5tbnRwb2ludDwvcmVwbGFjZWFibGU+IGNhdXNlcwotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBhcnRpdGlvbiB0byBhdXRvbWF0aWNhbGx5IGJlIG1vdW50ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICBXaWMgYWNoaWV2ZXMgdGhpcyBieSBhZGRpbmcgZW50cmllcyB0byB0aGUgZmlsZXN5c3RlbQotICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUgKGZzdGFiKSBkdXJpbmcgaW1hZ2UgZ2VuZXJhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIGZvciB3aWMgdG8gZ2VuZXJhdGUgYSB2YWxpZCBmc3RhYiwgeW91IG11c3QKLSAgICAgICAgICAgICAgICAgICAgICAgIGFsc28gcHJvdmlkZSBvbmUgb2YgdGhlIDxmaWxlbmFtZT4tLW9uZHJpdmU8L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tLW9uZGlzazwvZmlsZW5hbWU+LCBvcgotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi0tdXNlLXV1aWQ8L2ZpbGVuYW1lPiBwYXJ0aXRpb24gb3B0aW9ucyBhcwotICAgICAgICAgICAgICAgICAgICAgICAgcGFydCBvZiB0aGUgY29tbWFuZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB1c2luZyAiLyIgYXMgdGhlIG1vdW50cG9pbnQuCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgY29tbWFuZCB1c2VzICItLW9uZGlzayIgdG8gZm9yY2UgdGhlIHBhcnRpdGlvbiBvbnRvCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPnNkYjwvZmlsZW5hbWU+IGRpc2s6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIHBhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgc2RiIC0tZnN0eXBlPWV4dDMgLS1sYWJlbCBwbGF0Zm9ybSAtLWFsaWduIDEwMjQKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhIGxpc3QgdGhhdCBkZXNjcmliZXMgb3RoZXIgc3VwcG9ydGVkIG9wdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gdXNlIHdpdGggdGhlIDxmaWxlbmFtZT5wYXJ0PC9maWxlbmFtZT4gYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFydGl0aW9uPC9maWxlbmFtZT4gY29tbWFuZHM6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT4tLXNpemU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWluaW11bSBwYXJ0aXRpb24gc2l6ZSBpbiBNQnl0ZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZnkgYW4gaW50ZWdlciB2YWx1ZSBzdWNoIGFzIDUwMC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG8gbm90IGFwcGVuZCB0aGUgbnVtYmVyIHdpdGggIk1CIi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBuZWVkIHRoaXMgb3B0aW9uIGlmIHlvdSB1c2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi0tc291cmNlPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT4tLXNvdXJjZTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ljLXNwZWNpZmljIG9wdGlvbiB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzIHRoZSBzb3VyY2Ugb2YgdGhlIGRhdGEgdGhhdCBwb3B1bGF0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBhcnRpdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1vc3QgY29tbW9uIHZhbHVlIGZvciB0aGlzIG9wdGlvbiBpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicm9vdGZzIiwgYnV0IHlvdSBjYW4gdXNlIGFueSB2YWx1ZSB0aGF0IG1hcHMgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSB2YWxpZCBzb3VyY2UgcGx1Zy1pbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBzb3VyY2UgcGx1Zy1pbnMsIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J29wZW5lbWJlZGRlZC1raWNrc3RhcnQtcGx1Z2lucyc+UGx1Zy1pbnM8L2xpbms+IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLjwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IHVzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS1zb3VyY2Ugcm9vdGZzPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpYyBjcmVhdGVzIGEgcGFydGl0aW9uIGFzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhcmdlIGFzIG5lZWRlZCBhbmQgdG8gZmlsbCBpdCB3aXRoIHRoZSBjb250ZW50cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgcm9vdCBmaWxlc3lzdGVtIHBvaW50ZWQgdG8gYnkgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tcjwvZmlsZW5hbWU+IGNvbW1hbmQtbGluZSBvcHRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgdGhlIGVxdWl2YWxlbnQgcm9vdGZzIGRlcml2ZWQgZnJvbSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1lPC9maWxlbmFtZT4gY29tbWFuZC1saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpbGVzeXN0ZW0gdHlwZSB1c2VkIHRvIGNyZWF0ZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uIGlzIGRyaXZlbiBieSB0aGUgdmFsdWUgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tLWZzdHlwZTwvZmlsZW5hbWU+IG9wdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgZm9yIHRoZSBwYXJ0aXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgZW50cnkgb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi0tZnN0eXBlPC9maWxlbmFtZT4gdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dzIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSB1c2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi0tc291cmNlIDxyZXBsYWNlYWJsZT5wbHVnaW4tbmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpYyBjcmVhdGVzIGEgcGFydGl0aW9uIGFzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhcmdlIGFzIG5lZWRlZCBhbmQgZmlsbHMgaXQgd2l0aCB0aGUgY29udGVudHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHBhcnRpdGlvbiB0aGF0IGlzIGdlbmVyYXRlZCBieSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIHBsdWctaW4gbmFtZSB1c2luZyB0aGUgZGF0YSBwb2ludGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJ5IHRoZSA8ZmlsZW5hbWU+LXI8L2ZpbGVuYW1lPiBjb21tYW5kLWxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uIG9yIHRoZSBlcXVpdmFsZW50IHJvb3RmcyBkZXJpdmVkIGZyb20gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZTwvZmlsZW5hbWU+IGNvbW1hbmQtbGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4YWN0bHkgd2hhdCB0aG9zZSBjb250ZW50cyBhbmQgZmlsZXN5c3RlbSB0eXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCB1cCBiZWluZyBhcmUgZGVwZW5kZW50IG9uIHRoZSBnaXZlbiBwbHVnLWluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBkbyBub3QgdXNlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS1zb3VyY2U8L2ZpbGVuYW1lPiBvcHRpb24sIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gY29tbWFuZCBjcmVhdGVzIGFuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5IHBhcnRpdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgbXVzdCB1c2UgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tLXNpemU8L2ZpbGVuYW1lPiBvcHRpb24gdG8gc3BlY2lmeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2l6ZSBvZiB0aGUgZW1wdHkgcGFydGl0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+LS1vbmRpc2s8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+LS1vbmRyaXZlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yY2VzIHRoZSBwYXJ0aXRpb24gdG8gYmUgY3JlYXRlZCBvbiBhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY3VsYXIgZGlzay4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPi0tZnN0eXBlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0cyB0aGUgZmlsZSBzeXN0ZW0gdHlwZSBmb3IgdGhlIHBhcnRpdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWQgdmFsdWVzIGFyZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+ZXh0NDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+ZXh0MzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+ZXh0MjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YnRyZnM8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnNxdWFzaGZzPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5zd2FwPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPi0tZnNvcHRpb25zPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgZnJlZS1mb3JtIHN0cmluZyBvZiBvcHRpb25zIHRvIGJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgd2hlbiBtb3VudGluZyB0aGUgZmlsZXN5c3RlbS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzdHJpbmcgd2lsbCBiZSBjb3BpZWQgaW50byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvZnN0YWI8L2ZpbGVuYW1lPiBmaWxlIG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgc3lzdGVtIGFuZCBzaG91bGQgYmUgZW5jbG9zZWQgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGVzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgImRlZmF1bHRzIi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPi0tbGFiZWwgbGFiZWw8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGxhYmVsIHRvIGdpdmUgdG8gdGhlIGZpbGVzeXN0ZW0gdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgbWFkZSBvbiB0aGUgcGFydGl0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgZ2l2ZW4gbGFiZWwgaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLCBhIG5ldyBsYWJlbCBpcyBjcmVhdGVkIGZvciB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+LS1hY3RpdmU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXJrcyB0aGUgcGFydGl0aW9uIGFzIGFjdGl2ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPi0tYWxpZ24gKGluIEtCeXRlcyk8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBpcyBhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpYy1zcGVjaWZpYyBvcHRpb24gdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXlzIHRvIHN0YXJ0IGEgcGFydGl0aW9uIG9uIGFuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT54PC9yZXBsYWNlYWJsZT4gS0J5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5LjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT4tLW5vLXRhYmxlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gaXMgYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWMtc3BlY2lmaWMgb3B0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGUgb3B0aW9uIHJlc2VydmVzIHNwYWNlIGZvciB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uIGFuZCBjYXVzZXMgaXQgdG8gYmVjb21lIHBvcHVsYXRlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhlIHBhcnRpdGlvbiBpcyBub3QgYWRkZWQgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbiB0YWJsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPi0tZXh0cmEtc3BhY2U8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBpcyBhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpYy1zcGVjaWZpYyBvcHRpb24gdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRzIGV4dHJhIHNwYWNlIGFmdGVyIHRoZSBzcGFjZSBmaWxsZWQgYnkgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgb2YgdGhlIHBhcnRpdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpbmFsIHNpemUgY2FuIGdvIGJleW9uZCB0aGUgc2l6ZSBzcGVjaWZpZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgdGhlIDxmaWxlbmFtZT4tLXNpemU8L2ZpbGVuYW1lPiBvcHRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwIE1ieXRlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPi0tb3ZlcmhlYWQtZmFjdG9yPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gaXMgYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWMtc3BlY2lmaWMgb3B0aW9uIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGllcyB0aGUgc2l6ZSBvZiB0aGUgcGFydGl0aW9uIGJ5IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24ncyB2YWx1ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc3VwcGx5IGEgdmFsdWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgIjEuMyIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT4tLXBhcnQtdHlwZTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ljLXNwZWNpZmljIG9wdGlvbiB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyB0aGUgcGFydGl0aW9uIHR5cGUgZ2xvYmFsbHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlIGlkZW50aWZpZXIgKEdVSUQpIGZvciBHUFQgcGFydGl0aW9ucy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZSBsaXN0IG9mIHBhcnRpdGlvbiB0eXBlIEdVSURzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR1VJRF9QYXJ0aXRpb25fVGFibGUjUGFydGl0aW9uX3R5cGVfR1VJRHMnPjwvdWxpbms+LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+LS11c2UtdXVpZDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ljLXNwZWNpZmljIG9wdGlvbiB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdXNlcyBXaWMgdG8gZ2VuZXJhdGUgYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb20gR1VJRCBmb3IgdGhlIHBhcnRpdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGdlbmVyYXRlZCBpZGVudGlmaWVyIGlzIHVzZWQgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3Rsb2FkZXIgY29uZmlndXJhdGlvbiB0byBzcGVjaWZ5IHRoZSByb290Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPi0tdXVpZDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ljLXNwZWNpZmljCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiB0aGF0IHNwZWNpZmllcyB0aGUgcGFydGl0aW9uIFVVSUQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0nY29tbWFuZC1ib290bG9hZGVyJz4KLSAgICAgICAgICAgICAgICAgICAgPHRpdGxlPkNvbW1hbmQ6IGJvb3Rsb2FkZXI8L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIHNwZWNpZmllcyBob3cgdGhlIGJvb3Rsb2FkZXIgc2hvdWxkIGJlCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmVkIGFuZCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIG9wdGlvbnM6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb290bG9hZGVyIGZ1bmN0aW9uYWxpdHkgYW5kIGJvb3QgcGFydGl0aW9ucyBhcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZCBieSB0aGUgdmFyaW91cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tLXNvdXJjZTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Zy1pbnMgdGhhdCBpbXBsZW1lbnQgYm9vdGxvYWRlciBmdW5jdGlvbmFsaXR5LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBib290bG9hZGVyIGNvbW1hbmQgZXNzZW50aWFsbHkgcHJvdmlkZXMgYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW5zIG9mIG1vZGlmeWluZyBib290bG9hZGVyIGNvbmZpZ3VyYXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT4tLXRpbWVvdXQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdGxvYWRlciB0aW1lcyBvdXQgYW5kIGJvb3RzIHRoZSBkZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPi0tYXBwZW5kPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGtlcm5lbCBwYXJhbWV0ZXJzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVzZSBwYXJhbWV0ZXJzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHN5c2xpbnV4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BUFBFTkQ8L2ZpbGVuYW1lPiBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z3J1YjwvZmlsZW5hbWU+IGtlcm5lbCBjb21tYW5kIGxpbmUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT4tLWNvbmZpZ2ZpbGU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSB1c2VyLWRlZmluZWQgY29uZmlndXJhdGlvbiBmaWxlIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYm9vdGxvYWRlci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBwcm92aWRlIGEgZnVsbCBwYXRobmFtZSBmb3IgdGhlIGZpbGUgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBmaWxlIHRoYXQgZXhpc3RzIGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y2FubmVkLXdrczwvZmlsZW5hbWU+IGZvbGRlci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gb3ZlcnJpZGVzIGFsbCBvdGhlciBib290bG9hZGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICA8L3NlY3Rpb24+Ci0gICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBmb2xsb3dpbmcgZXhhbXBsZSBhc3N1bWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gd2FzIHVzZWQgdG8gYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGtlcm5lbDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBjcCB+L3Bva3lfc2RrL3RtcC93b3JrL3FlbXV4ODYtcG9reS1saW51eC9saW51eC15b2N0by80LjEyLjEyK2dpdDk5OS1yMC9saW51eC15b2N0by00LjEyLjEyK2dpdDk5OS9hcmNoL3g4Ni9ib290L2J6SW1hZ2UgXAorICAgICAgICB+L3Bva3kvYnVpbGQvdG1wL2RlcGxveS9pbWFnZXMvcWVtdXg4Ni9jb3JlLWltYWdlLW1pbmltYWwtcWVtdXg4Ni53aWM6MS92bWxpbnV6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgbmV3IGtlcm5lbCBpcyBhZGRlZCBiYWNrIGludG8gdGhlIGltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPmRkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdmbGFzaGluZy1pbWFnZXMtdXNpbmctYm1hcHRvb2wnPjxmaWxlbmFtZT5ibWFwdG9vbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBmbGFzaCB5b3VyIHdpYyBpbWFnZSBvbnRvIGFuIFNEIGNhcmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgVVNCIHN0aWNrIGFuZCB0ZXN0IHlvdXIgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzaW5nIDxmaWxlbmFtZT5ibWFwdG9vbDwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmFsbHkgMTAgdG8gMjAgdGltZXMgZmFzdGVyIHRoYW4gdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgIDwvc2VjdGlvbj4KICAgICAgICAgPC9zZWN0aW9uPgogICAgIDwvc2VjdGlvbj4KIApAQCAtNTgxNyw4ODcgKzU2MTIsMjMxIEBACiAgICAgICAgIDx0aXRsZT5CdWlsZGluZyBhbiBJbml0aWFsIFJBTSBGaWxlc3lzdGVtIChpbml0cmFtZnMpIEltYWdlPC90aXRsZT4KIAogICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIGluaXRyYW1mcyBpcyB0aGUgc3VjY2Vzc29yIG9mIEluaXRpYWwgUkFNIERpc2sgKGluaXRyZCkuCi0gICAgICAgICAgICBJdCBpcyBhICJjb3B5IGluIGFuZCBvdXQiIChjcGlvKSBhcmNoaXZlIG9mIHRoZSBpbml0aWFsIGZpbGUgc3lzdGVtCi0gICAgICAgICAgICB0aGF0IGdldHMgbG9hZGVkIGludG8gbWVtb3J5IGR1cmluZyB0aGUgTGludXggc3RhcnR1cCBwcm9jZXNzLgotICAgICAgICAgICAgQmVjYXVzZSBMaW51eCB1c2VzIHRoZSBjb250ZW50cyBvZiB0aGUgYXJjaGl2ZSBkdXJpbmcKLSAgICAgICAgICAgIGluaXRpYWxpemF0aW9uLCB0aGUgaW5pdHJhbWZzIG5lZWRzIHRvIGNvbnRhaW4gYWxsIG9mIHRoZSBkZXZpY2UKLSAgICAgICAgICAgIGRyaXZlcnMgYW5kIHRvb2xzIG5lZWRlZCB0byBtb3VudCB0aGUgZmluYWwgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgQW4gaW5pdGlhbCBSQU0gZmlsZXN5c3RlbSAoaW5pdHJhbWZzKSBpbWFnZSBwcm92aWRlcyBhIHRlbXBvcmFyeQorICAgICAgICAgICAgcm9vdCBmaWxlc3lzdGVtIHVzZWQgZm9yIGVhcmx5IHN5c3RlbSBpbml0aWFsaXphdGlvbiAoZS5nLgorICAgICAgICAgICAgbG9hZGluZyBvZiBtb2R1bGVzIG5lZWRlZCB0byBsb2NhdGUgYW5kIG1vdW50IHRoZSAicmVhbCIgcm9vdAorICAgICAgICAgICAgZmlsZXN5c3RlbSkuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBUaGUgaW5pdHJhbWZzIGltYWdlIGlzIHRoZSBzdWNjZXNzb3Igb2YgaW5pdGlhbCBSQU0gZGlzaworICAgICAgICAgICAgICAgIChpbml0cmQpLgorICAgICAgICAgICAgICAgIEl0IGlzIGEgImNvcHkgaW4gYW5kIG91dCIgKGNwaW8pIGFyY2hpdmUgb2YgdGhlIGluaXRpYWwKKyAgICAgICAgICAgICAgICBmaWxlc3lzdGVtIHRoYXQgZ2V0cyBsb2FkZWQgaW50byBtZW1vcnkgZHVyaW5nIHRoZSBMaW51eAorICAgICAgICAgICAgICAgIHN0YXJ0dXAgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIExpbnV4IHVzZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBhcmNoaXZlIGR1cmluZworICAgICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uLCB0aGUgaW5pdHJhbWZzIGltYWdlIG5lZWRzIHRvIGNvbnRhaW4gYWxsIG9mIHRoZQorICAgICAgICAgICAgICAgIGRldmljZSBkcml2ZXJzIGFuZCB0b29scyBuZWVkZWQgdG8gbW91bnQgdGhlIGZpbmFsIHJvb3QKKyAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLgorICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUbyBidWlsZCBhbiBpbml0cmFtZnMgaW1hZ2UgYW5kIGJ1bmRsZSBpdCBpbnRvIHRoZSBrZXJuZWwsIHNldCB0aGUKLSAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTklUUkFNRlNfSU1BR0VfQlVORExFJz48ZmlsZW5hbWU+SU5JVFJBTUZTX0lNQUdFX0JVTkRMRTwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgIHZhcmlhYmxlIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCBhbmQgc2V0IHRoZQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlOSVRSQU1GU19JTUFHRSc+PGZpbGVuYW1lPklOSVRSQU1GU19JTUFHRTwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgIHZhcmlhYmxlIGluIHlvdXIgPGZpbGVuYW1lPm1hY2hpbmUuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gY3JlYXRlIGFuIGluaXRyYW1mcyBpbWFnZToKKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5DcmVhdGUgdGhlIGluaXRyYW1mcyBJbWFnZSBSZWNpcGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiByZWZlcmVuY2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzLmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGZvdW5kIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWNvcmU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhcyBhbiBleGFtcGxlIGZyb20gd2hpY2ggdG8gd29yay4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+RGVjaWRlIGlmIFlvdSBOZWVkIHRvIEJ1bmRsZSB0aGUgaW5pdHJhbWZzIEltYWdlCisgICAgICAgICAgICAgICAgICAgIEludG8gdGhlIEtlcm5lbCBJbWFnZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0aGUgaW5pdHJhbWZzIGltYWdlIHRoYXQgaXMgYnVpbHQgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgYnVuZGxlZCBpbiB3aXRoIHRoZSBrZXJuZWwgaW1hZ2UsIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlOSVRSQU1GU19JTUFHRV9CVU5ETEUnPjxmaWxlbmFtZT5JTklUUkFNRlNfSU1BR0VfQlVORExFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byAiMSIgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBhbmQgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU5JVFJBTUZTX0lNQUdFJz48ZmlsZW5hbWU+SU5JVFJBTUZTX0lNQUdFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB0aGUgcmVjaXBlIHRoYXQgYnVpbGRzIHRoZSBrZXJuZWwgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5UaXA8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG8gYnVuZGxlIHRoZSBpbml0cmFtZnMKKyAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlIHdpdGggdGhlIGtlcm5lbCBpbWFnZSB0byBhdm9pZCBjaXJjdWxhcgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlIGtlcm5lbCByZWNpcGUgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgaW5pdHJhbWZzIHJlY2lwZSBzaG91bGQgdGhlIGluaXRyYW1mcyBpbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSBrZXJuZWwgbW9kdWxlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIHRoZSA8ZmlsZW5hbWU+SU5JVFJBTUZTX0lNQUdFX0JVTkRMRTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZsYWcgY2F1c2VzIHRoZSBpbml0cmFtZnMgaW1hZ2UgdG8gYmUgdW5wYWNrZWQKKyAgICAgICAgICAgICAgICAgICAgaW50byB0aGUgPGZpbGVuYW1lPiR7Qn0vdXNyLzwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHVucGFja2VkIGluaXRyYW1mcyBpbWFnZSBpcyB0aGVuIHBhc3NlZCB0byB0aGUga2VybmVsJ3MKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRSc+PGZpbGVuYW1lPkNPTkZJR19JTklUUkFNRlNfU09VUkNFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgYWxsb3dpbmcgdGhlIGluaXRyYW1mcyBpbWFnZSB0byBiZSBidWlsdCBpbnRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBrZXJuZWwgbm9ybWFsbHkuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGNob29zZSB0byBub3QgYnVuZGxlIHRoZSBpbml0cmFtZnMgaW1hZ2Ugd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGtlcm5lbCBpbWFnZSwgeW91IGFyZSBlc3NlbnRpYWxseSB1c2luZyBhbgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSW5pdHJkJz5Jbml0aWFsIFJBTSBEaXNrIChpbml0cmQpPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGluZyBhbiBpbml0cmQgaXMgaGFuZGxlZCBwcmltYXJpbHkgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTklUUkRfSU1BR0UnPjxmaWxlbmFtZT5JTklUUkRfSU1BR0U8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklOSVRSRF9MSVZFPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklOSVRSRF9JTUFHRV9MSVZFPC9maWxlbmFtZT4gdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0L2NnaXQuY2dpL3Bva3kvdHJlZS9tZXRhL2NsYXNzZXMvaW1hZ2UtbGl2ZS5iYmNsYXNzJz48ZmlsZW5hbWU+aW1hZ2UtbGl2ZS5iYmNsYXNzPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKzwhLS0KK1NvbWUgbm90ZXMgZnJvbSBDYWw6CisKKyAgICBBIG5vbi1idW5kbGVkIGluaXRyYW1mcyBpcyBlc3NlbnRpYWxseSBhbiBpbml0cmQsIHdoaWNoIEkgYW0gZGlzY292ZXJpbmcKKyAgICB0byBiZSByYXRoZXIgY29uZnVzaW5nbHkgc3VwcG9ydGVkIGluIE9FIGF0IHRoZSBtb21lbnQuCisKKyAgICBJdHMgcHJpbWFyaWx5IGhhbmRsZWQgdGhyb3VnaCBJTklUUkRfSU1BR0UoX0xJVkUvX1ZNKSBhbmQgSU5JVFJEKF9MSVZFL19WTSkKKyAgICB2YXJpYWJsZXMuIElOSVRSRF9JTUFHRSogaXMgdGhlIHByaW1hcnkgaW1hZ2UgdGFyZ2V0LCB3aGljaCBnZXRzIGFkZGVkIHRvCisgICAgSU5JVFJEKiwgd2hpY2ggaXMgYSBsaXN0IG9mIGNwaW8gZmlsZXN5c3RlbXMuIFlvdSBjYW4gYWRkIG1vcmUgY3BpbworICAgIGZpbGVzeXN0ZW1zIHRvIHRoZSBJTklUUkQgdmFyaWFibGUgdG8gYWRkIG1vcmUgdG8gdGhlIGluaXRyZC4gRm9yCisgICAgaW5zdGFuY2UsIG1ldGEtaW50ZWwgYWRkcyBpbnRlbC1taWNyb2NvZGUgdmlhIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgSU5JVFJEX0xJVkVfcHJlcGVuZCA9ICIke0BiYi51dGlscy5jb250YWlucygnTUFDSElORV9GRUFUVVJFUycsICdpbnRlbC11Y29kZScsICcke0RFUExPWV9ESVJfSU1BR0V9L21pY3JvY29kZS5jcGlvICcsICcnLCBkKX0iCisKKyAgICBJZiAnaW50ZWwtdWNvZGUnIGlzIGluIE1BQ0hJTkVfRkVBVFVSRVMsIHRoaXMgcmVzb2x2ZXMgdG86CisKKyAgICAgICAgSU5JVFJEX0xJVkVfcHJlcGVuZCA9ICIke0RFUExPWV9ESVJfSU1BR0V9L21pY3JvY29kZS5jcGlvICIKKworICAgIFVuZm9ydHVuYXRlbHkgeW91IG5lZWQgdGhlIGZ1bGwgcGF0aCwgYW5kIGl0cyB1cCB0byB5b3UgdG8gc29ydCBvdXQKKyAgICBkZXBlbmRlbmNpZXMgYXMgd2VsbC4gRm9yIGluc3RhbmNlLCB3ZSBoYXZlIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFNfYXBwZW5kID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdNQUNISU5FX0ZFQVRVUkVTJywgJ2ludGVsLXVjb2RlJywgJyBpbnRlbC1taWNyb2NvZGUnLCAnJywgZCl9IgorCisgICAgd2hpY2ggcmVzb2x2ZXMgdG86CisKKyAgICAgICAgTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFNfYXBwZW5kID0gImludGVsLW1pY3JvY29kZSIKKworICAgIEhvd2V2ZXIsIHRoZSBhYm92ZSBpcyBvbmx5IHRydWUgd2l0aCB0aGUgImxpdmUiIElNQUdFX0ZTVFlQRS4gV2ljIGlzCisgICAgYW5vdGhlciBiZWFzdCBlbnRpcmVseSwgd2l0aCBjdXJyZW50IHdpYyBraWNrc3RhcnQgZmlsZXMgbm90IHN1cHBvcnRpbmcKKyAgICBpbml0cmRzLCBhbmQgb25seSBwYXJ0aWFsIHN1cHBvcnQgaW4gdGhlIHNvdXJjZSBwbHVnaW5zLiBUaGF0IGJlaW5nIHNhaWQsCisgICAgSSBrbm93IHRoZSBnZW5lcmljIGJvb3RmcyB3b3JrIEVkIGlzIHdvcmtpbmcgb24gd2lsbCBoZWxwIGltbWVuc2VseSBpbiB0aGlzCisgICAgYXNwZWN0LiBIZSBvciBTYXVsIGNhbiBwcm92aWRlIG1vcmUgZGV0YWlscyBoZXJlLgorCisgICAgQW55aG93LCBpdHMgcmF0aGVyIGZyYWN0dXJlZCBhbmQgY29uZnVzaW5nIGFuZCBjb3VsZCBwcm9iYWJseSB1c2UgYQorICAgIHJld29yayBob25lc3RseS4gSSBkb24ndCBrbm93IGhvdyBmZWFzaWJsZSBpdCBpcyB0byBkb2N1bWVudCBhbGwgdGhlCisgICAgZGV0YWlscyBhbmQgY29ybmVyIGNhc2VzIG9mIHRoaXMgYXJlYS4KKy0tPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPk9wdGlvbmFsbHkgQWRkIEl0ZW1zIHRvIHRoZSBpbml0cmFtZnMgSW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgVGhyb3VnaCB0aGUgaW5pdHJhbWZzIEltYWdlIFJlY2lwZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYWRkIGl0ZW1zIHRvIHRoZSBpbml0cmFtZnMgaW1hZ2UgYnkgd2F5IG9mIGl0cworICAgICAgICAgICAgICAgICAgICByZWNpcGUsIHlvdSBzaG91bGQgdXNlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFX0lOU1RBTEwnPjxmaWxlbmFtZT5QQUNLQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9JTlNUQUxMJz48ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPiBnaXZlcyBtb3JlIGRpcmVjdAorICAgICAgICAgICAgICAgICAgICBjb250cm9sIG9mIHdoYXQgaXMgYWRkZWQgdG8gdGhlIGltYWdlIGFzIGNvbXBhcmVkIHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0cyB5b3UgbWlnaHQgbm90IG5lY2Vzc2FyaWx5IHdhbnQgdGhhdCBhcmUKKyAgICAgICAgICAgICAgICAgICAgc2V0IGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1pbWFnZSc+PGZpbGVuYW1lPmltYWdlPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1jb3JlLWltYWdlJz48ZmlsZW5hbWU+Y29yZS1pbWFnZTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+QnVpbGQgdGhlIEtlcm5lbCBJbWFnZSBhbmQgdGhlIGluaXRyYW1mcworICAgICAgICAgICAgICAgICAgICBJbWFnZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBCdWlsZCB5b3VyIGtlcm5lbCBpbWFnZSB1c2luZyBCaXRCYWtlLgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBpbml0cmFtZnMgaW1hZ2UgcmVjaXBlIGlzIGEgZGVwZW5kZW5jeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAga2VybmVsIGltYWdlLCB0aGUgaW5pdHJhbWZzIGltYWdlIGlzIGJ1aWx0IGFzIHdlbGwgYW5kCisgICAgICAgICAgICAgICAgICAgIGJ1bmRsZWQgd2l0aCB0aGUga2VybmVsIGltYWdlIGlmIHlvdSB1c2VkIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU5JVFJBTUZTX0lNQUdFX0JVTkRMRSc+PGZpbGVuYW1lPklOSVRSQU1GU19JTUFHRV9CVU5ETEU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGRlc2NyaWJlZCBlYXJsaWVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZmxhc2hpbmctaW1hZ2VzLXVzaW5nLWJtYXB0b29sJz4KKyAgICAgICAgPHRpdGxlPkZsYXNoaW5nIEltYWdlcyBVc2luZyA8ZmlsZW5hbWU+Ym1hcHRvb2w8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBbiBlYXN5IHdheSB0byBmbGFzaCBhbiBpbWFnZSB0byBhIGJvb3RhYmxlIGRldmljZSBpcyB0byB1c2UKKyAgICAgICAgICAgIDxmaWxlbmFtZT5ibWFwdG9vbDwvZmlsZW5hbWU+LCB3aGljaCBpcyBpbnRlZ3JhdGVkIGludG8gdGhlCisgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3dpbmcsIGlzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyBob3cgdG8gZmxhc2ggYSBXaWMgaW1hZ2UuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSA8ZmlsZW5hbWU+Ym1hcHRvb2w8L2ZpbGVuYW1lPiB0byBmbGFzaCBhbnkKKyAgICAgICAgICAgICAgICB0eXBlIG9mIGltYWdlLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgVXNlIHRoZXNlIHN0ZXBzIHRvIGZsYXNoIGFuIGltYWdlIHVzaW5nCisgICAgICAgICAgICA8ZmlsZW5hbWU+Ym1hcHRvb2w8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFVubGVzcyB5b3UgYXJlIGFibGUgdG8gaW5zdGFsbCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ym1hcC10b29sczwvZmlsZW5hbWU+IHBhY2thZ2UgYXMgbWVudGlvbmVkIGluIHRoZSBub3RlCisgICAgICAgICAgICAgICAgaW4gdGhlIHNlY29uZCBidWxsZXQgb2Ygc3RlcCAzIGZ1cnRoZXIgZG93biwgeW91IHdpbGwgbmVlZCB0byBidWlsZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ibWFwdG9vbDwvZmlsZW5hbWU+IGJlZm9yZSB1c2luZyBpdC4KKyAgICAgICAgICAgICAgICBCdWlsZCB0aGUgdG9vbCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgYm1hcC10b29scy1uYXRpdmUKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+VXBkYXRlIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IEZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQWRkIHRoZSBmb2xsb3dpbmcgdG8geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfRlNUWVBFUyArPSAid2ljIHdpYy5ibWFwIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkdldCBZb3VyIEltYWdlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEVpdGhlciBoYXZlIHlvdXIgaW1hZ2UgcmVhZHkgKHByZS1idWlsdCkgb3IgdGFrZSB0aGUgc3RlcAorICAgICAgICAgICAgICAgICAgICBidWlsZCB0aGUgaW1hZ2U6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIDxyZXBsYWNlYWJsZT5pbWFnZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Rmxhc2ggdGhlIERldmljZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBGbGFzaCB0aGUgZGV2aWNlIHdpdGggdGhlIGltYWdlIGJ5IHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ibWFwdG9vbDwvZmlsZW5hbWU+IGRlcGVuZGluZyBvbiB5b3VyIHBhcnRpY3VsYXIKKyAgICAgICAgICAgICAgICAgICAgc2V0dXA6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgd3JpdGUgYWNjZXNzIHRvIHRoZSBtZWRpYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2UgdGhpcyBjb21tYW5kIGZvcm06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIG9lLXJ1bi1uYXRpdmUgYm1hcC10b29scy1uYXRpdmUgYm1hcHRvb2wgY29weSAuL3RtcC9kZXBsb3kvaW1hZ2VzL3FlbXV4ODYtNjQtY29yZS1pbWFnZS1taW5pbWFsLTxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT4ud2ljIC9kZXYvc2Q8cmVwbGFjZWFibGU+WDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWVkaWEsIHVzZSB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8gY2htb2QgNjY2IC9kZXYvc2Q8cmVwbGFjZWFibGU+WDwvcmVwbGFjZWFibGU+CisgICAgICQgb2UtcnVuLW5hdGl2ZSBibWFwLXRvb2xzLW5hdGl2ZSBibWFwdG9vbCBjb3B5IC4vdG1wL2RlcGxveS9pbWFnZXMvcWVtdXg4Ni02NC1jb3JlLWltYWdlLW1pbmltYWwtPHJlcGxhY2VhYmxlPm1hY2hpbmU8L3JlcGxhY2VhYmxlPi53aWMgL2Rldi9zZDxyZXBsYWNlYWJsZT5YPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgVWJ1bnR1IG9yIERlYmlhbiBkaXN0cmlidXRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIGluc3RhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ibWFwLXRvb2xzPC9maWxlbmFtZT4gcGFja2FnZSB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nIGNvbW1hbmQgYW5kIHRoZW4gdXNlIHRoZSB0b29sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgc3BlY2lmeWluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IGV2ZW4gZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdCBhY2NvdW50OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyBhcHQtZ2V0IGluc3RhbGwgYm1hcC10b29scworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgaGVscCBvbiB0aGUgPGZpbGVuYW1lPmJtYXB0b29sPC9maWxlbmFtZT4gY29tbWFuZCwgdXNlIHRoZQorICAgICAgICAgICAgZm9sbG93aW5nIGNvbW1hbmQ6CiAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIElOSVRSQU1GU19JTUFHRV9CVU5ETEUgPSAiMSIKLSAgICAgSU5JVFJBTUZTX0lNQUdFID0gIjxyZXBsYWNlYWJsZT5pbWFnZV9yZWNpcGVfbmFtZTwvcmVwbGFjZWFibGU+IgorICAgICAkIGJtYXB0b29sIC0taGVscAogICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgU2V0dGluZyB0aGUgPGZpbGVuYW1lPklOSVRSQU1GU19JTUFHRV9CVU5ETEU8L2ZpbGVuYW1lPgotICAgICAgICAgICAgZmxhZyBjYXVzZXMgdGhlIGluaXRyYW1mcyBjcmVhdGVkIGJ5IHRoZSByZWNpcGUgYW5kIGRlZmluZWQgYnkKLSAgICAgICAgICAgIDxmaWxlbmFtZT5JTklUUkFNRlNfSU1BR0U8L2ZpbGVuYW1lPiB0byBiZSB1bnBhY2tlZCBpbnRvIHRoZQotICAgICAgICAgICAgPGZpbGVuYW1lPiR7Qn0vdXNyLzwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KLSAgICAgICAgICAgIFRoZSB1bnBhY2tlZCBpbml0cmFtZnMgaXMgdGhlbiBwYXNzZWQgdG8gdGhlIGtlcm5lbCdzCi0gICAgICAgICAgICA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPiB1c2luZyB0aGUKLSAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRSc+PGZpbGVuYW1lPkNPTkZJR19JTklUUkFNRlNfU09VUkNFPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgdmFyaWFibGUsIGFsbG93aW5nIGluaXRyYW1mcyB0byBiZSBidWlsdCBpbiB0byB0aGUga2VybmVsCi0gICAgICAgICAgICBub3JtYWxseS4KLSAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgIFRoZSBwcmVmZXJyZWQgbWV0aG9kIGlzIHRvIHVzZSB0aGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU5JVFJBTUZTX0lNQUdFPC9maWxlbmFtZT4gdmFyaWFibGUgcmF0aGVyIHRoYW4gdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPklOSVRSQU1GU19UQVNLPC9maWxlbmFtZT4gdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgU2V0dGluZyA8ZmlsZW5hbWU+SU5JVFJBTUZTX1RBU0s8L2ZpbGVuYW1lPiBpcyBzdXBwb3J0ZWQgZm9yCi0gICAgICAgICAgICAgICAgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KLSAgICAgICAgICAgICAgICBIb3dldmVyLCB1c2Ugb2YgdGhpcyB2YXJpYWJsZSBoYXMgY2lyY3VsYXIgZGVwZW5kZW5jeQotICAgICAgICAgICAgICAgIHByb2JsZW1zLgotICAgICAgICAgICAgICAgIFNlZSB0aGUKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU5JVFJBTUZTX0lNQUdFX0JVTkRMRSc+PGZpbGVuYW1lPklOSVRSQU1GU19JTUFHRV9CVU5ETEU8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gdGhlc2UgZGVwZW5kZW5jeQotICAgICAgICAgICAgICAgIHByb2JsZW1zLgotICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgcmVjaXBlIHRoYXQgPGZpbGVuYW1lPklOSVRSQU1GU19JTUFHRTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICBwb2ludHMgdG8gbXVzdCBwcm9kdWNlIGEgPGZpbGVuYW1lPi5jcGlvLmd6PC9maWxlbmFtZT4sCi0gICAgICAgICAgICA8ZmlsZW5hbWU+LmNwaW8udGFyPC9maWxlbmFtZT4sIDxmaWxlbmFtZT4uY3Bpby5sejQ8L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgIDxmaWxlbmFtZT4uY3Bpby5sem1hPC9maWxlbmFtZT4sIG9yCi0gICAgICAgICAgICA8ZmlsZW5hbWU+LmNwaW8ueHo8L2ZpbGVuYW1lPiBmaWxlLgotICAgICAgICAgICAgWW91IGNhbiBlbnN1cmUgeW91IHByb2R1Y2Ugb25lIG9mIHRoZXNlIDxmaWxlbmFtZT4uY3Bpby4qPC9maWxlbmFtZT4KLSAgICAgICAgICAgIGZpbGVzIGJ5IHNldHRpbmcgdGhlCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU5JVFJBTUZTX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTklUUkFNRlNfRlNUWVBFUzwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgIHZhcmlhYmxlIGluIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlIHRvIG9uZSBvciBtb3JlIG9mIHRoZSBhYm92ZQotICAgICAgICAgICAgZmlsZSB0eXBlcy4KLSAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgIElmIHlvdSBhZGQgaXRlbXMgdG8gdGhlIGluaXRyYW1mcyBpbWFnZSBieSB3YXkgb2YgaXRzIHJlY2lwZSwKLSAgICAgICAgICAgICAgICB5b3Ugc2hvdWxkIHVzZQotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFX0lOU1RBTEwnPjxmaWxlbmFtZT5QQUNLQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4KLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfSU5TVEFMTCc+PGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPjwvdWxpbms+LgotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPiBnaXZlcyBtb3JlIGRpcmVjdCBjb250cm9sCi0gICAgICAgICAgICAgICAgb2Ygd2hhdCBpcyBhZGRlZCB0byB0aGUgaW1hZ2UgYXMgY29tcGFyZWQgdG8gdGhlIGRlZmF1bHRzIHlvdQotICAgICAgICAgICAgICAgIG1pZ2h0IG5vdCBuZWNlc3NhcmlseSB3YW50IHRoYXQgYXJlIHNldCBieSB0aGUKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1pbWFnZSc+PGZpbGVuYW1lPmltYWdlPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgIG9yCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtY29yZS1pbWFnZSc+PGZpbGVuYW1lPmNvcmUtaW1hZ2U8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgY2xhc3Nlcy4KLSAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSdjb25maWd1cmluZy10aGUta2VybmVsJz4KLSAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIHRoZSBLZXJuZWw8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQ29uZmlndXJpbmcgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIGNvbnNpc3RzIG9mIG1ha2luZyBzdXJlIHRoZQotICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGhhcyBhbGwgdGhlIHJpZ2h0IGluZm9ybWF0aW9uCi0gICAgICAgICAgICBpbiBpdCBmb3IgdGhlIGltYWdlIHlvdSBhcmUgYnVpbGRpbmcuCi0gICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiB0b29sIGFuZAotICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgdG8gbWFrZSBzdXJlIHlvdXIKLSAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSBpcyBqdXN0IGhvdyB5b3UgbmVlZCBpdC4KLSAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBzYXZlIGtub3duIGNvbmZpZ3VyYXRpb25zIGluIGEKLSAgICAgICAgICAgIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlIHRoYXQgdGhlIGJ1aWxkIHN5c3RlbSBjYW4gdXNlCi0gICAgICAgICAgICBmb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24uCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHRvIHVzZSA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+LAotICAgICAgICAgICAgY3JlYXRlIGFuZCB1c2UgY29uZmlndXJhdGlvbiBmcmFnbWVudHMsIGFuZCBob3cgdG8gaW50ZXJhY3RpdmVseQotICAgICAgICAgICAgbW9kaWZ5IHlvdXIgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIHRvIGNyZWF0ZSB0aGUKLSAgICAgICAgICAgIGxlYW5lc3Qga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSBwb3NzaWJsZS4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24ga2VybmVsIGNvbmZpZ3VyYXRpb24sIHNlZSB0aGUKLSAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsjY2hhbmdpbmctdGhlLWNvbmZpZ3VyYXRpb24nPkNoYW5naW5nIHRoZSBDb25maWd1cmF0aW9uPC91bGluaz4iCi0gICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWwuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmctbWVudWNvbmZpZyc+Ci0gICAgICAgICAgICA8dGl0bGU+VXNpbmcmbmJzcDsmbmJzcDs8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+PC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIGVhc2llc3Qgd2F5IHRvIGRlZmluZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgaXMgdG8gc2V0IHRoZW0gdGhyb3VnaCB0aGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IHRvb2wuCi0gICAgICAgICAgICAgICAgVGhpcyB0b29sIHByb3ZpZGVzIGFuIGludGVyYWN0aXZlIG1ldGhvZCB3aXRoIHdoaWNoCi0gICAgICAgICAgICAgICAgdG8gc2V0IGtlcm5lbCBjb25maWd1cmF0aW9ucy4KLSAgICAgICAgICAgICAgICBGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBvbiA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+LCBzZWUKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01lbnVjb25maWcnPjwvdWxpbms+LgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUbyB1c2UgdGhlIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4gdG9vbCBpbiB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudAotICAgICAgICAgICAgICAgIGVudmlyb25tZW50LCB5b3UgbXVzdCBsYXVuY2ggaXQgdXNpbmcgQml0QmFrZS4KLSAgICAgICAgICAgICAgICBUaHVzLCB0aGUgZW52aXJvbm1lbnQgbXVzdCBiZSBzZXQgdXAgdXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgb3IKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgIHNjcmlwdCBmb3VuZCBpbiB0aGUKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCi0gICAgICAgICAgICAgICAgWW91IG11c3QgYWxzbyBiZSBzdXJlIG9mIHRoZSBzdGF0ZSBvZiB5b3VyIGJ1aWxkIGluIHRoZQotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgotICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZHMgcnVuIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBhc3N1bWluZyB0aGUgU291cmNlIERpcmVjdG9yeSdzIHRvcC1sZXZlbCBmb2xkZXIgaXMKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+fi9wb2t5PC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGNkIHBva3kKLSAgICAgJCBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnYKLSAgICAgJCBiaXRiYWtlIGxpbnV4LXlvY3RvIC1jIGtlcm5lbF9jb25maWdtZSAtZgotICAgICAkIGJpdGJha2UgbGludXgteW9jdG8gLWMgbWVudWNvbmZpZwotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBPbmNlIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4gY29tZXMgdXAsIGl0cyBzdGFuZGFyZAotICAgICAgICAgICAgICAgIGludGVyZmFjZSBhbGxvd3MgeW91IHRvIGludGVyYWN0aXZlbHkgZXhhbWluZSBhbmQgY29uZmlndXJlCi0gICAgICAgICAgICAgICAgYWxsIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgotICAgICAgICAgICAgICAgIEFmdGVyIG1ha2luZyB5b3VyIGNoYW5nZXMsIHNpbXBseSBleGl0IHRoZSB0b29sIGFuZCBzYXZlIHlvdXIKLSAgICAgICAgICAgICAgICBjaGFuZ2VzIHRvIGNyZWF0ZSBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIENvbnNpZGVyIGFuIGV4YW1wbGUgdGhhdCBjb25maWd1cmVzIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xNDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAga2VybmVsLgotICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHJlY29nbml6ZXMgdGhpcyBrZXJuZWwgYXMKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG88L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICBUaHVzLCB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGZyb20gdGhlIHNoZWxsIGluIHdoaWNoIHlvdSBwcmV2aW91c2x5IHNvdXJjZWQgdGhlCi0gICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgaW5pdGlhbGl6YXRpb24gc2NyaXB0IGNsZWFucyB0aGUgc2hhcmVkIHN0YXRlIGNhY2hlIGFuZCB0aGUKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgZGlyZWN0b3J5IGFuZCB0aGVuIHJ1bnMgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPjoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBtZW51Y29uZmlnCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBPbmNlIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4gbGF1bmNoZXMsIHVzZSB0aGUgaW50ZXJmYWNlCi0gICAgICAgICAgICAgICAgdG8gbmF2aWdhdGUgdGhyb3VnaCB0aGUgc2VsZWN0aW9ucyB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGluCi0gICAgICAgICAgICAgICAgd2hpY2ggeW91IGFyZSBpbnRlcmVzdGVkLgotICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgPGZpbGVuYW1lPkNPTkZJR19TTVA8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIHNldHRpbmcuCi0gICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGl0IGF0IDxmaWxlbmFtZT5Qcm9jZXNzb3IgVHlwZSBhbmQgRmVhdHVyZXM8L2ZpbGVuYW1lPiB1bmRlcgotICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIHNlbGVjdGlvbiA8ZmlsZW5hbWU+U3ltbWV0cmljIE11bHRpLXByb2Nlc3NpbmcgU3VwcG9ydDwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgIEFmdGVyIGhpZ2hsaWdodGluZyB0aGUgc2VsZWN0aW9uLCB1c2UgdGhlIGFycm93IGtleXMgdG8gc2VsZWN0IG9yIGRlc2VsZWN0Ci0gICAgICAgICAgICAgICAgdGhlIHNldHRpbmcuCi0gICAgICAgICAgICAgICAgV2hlbiB5b3UgYXJlIGZpbmlzaGVkIHdpdGggYWxsIHlvdXIgc2VsZWN0aW9ucywgZXhpdCBvdXQgYW5kIHNhdmUgdGhlbS4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgU2F2aW5nIHRoZSBzZWxlY3Rpb25zIHVwZGF0ZXMgdGhlIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlLgotICAgICAgICAgICAgICAgIFRoaXMgaXMgdGhlIGZpbGUgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRvIGNvbmZpZ3VyZSB0aGUKLSAgICAgICAgICAgICAgICBrZXJuZWwgZHVyaW5nIHRoZSBidWlsZC4KLSAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgYW5kIGV4YW1pbmUgdGhpcyBmaWxlIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkgaW4KLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL3dvcmsvPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgVGhlIGFjdHVhbCA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGlzIGxvY2F0ZWQgaW4gdGhlIGFyZWEgd2hlcmUgdGhlCi0gICAgICAgICAgICAgICAgc3BlY2lmaWMga2VybmVsIGlzIGJ1aWx0LgotICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3Ugd2VyZSBidWlsZGluZyBhIExpbnV4IFlvY3RvIGtlcm5lbCBiYXNlZCBvbiB0aGUKLSAgICAgICAgICAgICAgICBMaW51eCAzLjE0IGtlcm5lbCBhbmQgeW91IHdlcmUgYnVpbGRpbmcgYSBRRU1VIGltYWdlIHRhcmdldGVkIGZvcgotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT54ODY8L2ZpbGVuYW1lPiBhcmNoaXRlY3R1cmUsIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSB3b3VsZCBiZSBsb2NhdGVkIGhlcmU6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBwb2t5L2J1aWxkL3RtcC93b3JrL3FlbXV4ODYtcG9reS1saW51eC9saW51eC15b2N0by0zLjE0LjExK2dpdDErODRmLi4uCi0gICAgICAgIC4uLjY1NmVkMzAtcjEvbGludXgtcWVtdXg4Ni1zdGFuZGFyZC1idWlsZAotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIGV4YW1wbGUgZGlyZWN0b3J5IGlzIGFydGlmaWNpYWxseSBzcGxpdCBhbmQgbWFueSBvZiB0aGUgY2hhcmFjdGVycwotICAgICAgICAgICAgICAgICAgICBpbiB0aGUgYWN0dWFsIGZpbGVuYW1lIGFyZSBvbWl0dGVkIGluIG9yZGVyIHRvIG1ha2UgaXQgbW9yZSByZWFkYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgQWxzbywgZGVwZW5kaW5nIG9uIHRoZSBrZXJuZWwgeW91IGFyZSB1c2luZywgdGhlIGV4YWN0IHBhdGhuYW1lCi0gICAgICAgICAgICAgICAgICAgIGZvciA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xNC4uLjwvZmlsZW5hbWU+IG1pZ2h0IGRpZmZlci4KLSAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFdpdGhpbiB0aGUgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLCB5b3UgY2FuIHNlZSB0aGUga2VybmVsIHNldHRpbmdzLgotICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGVudHJ5IHNob3dzIHRoYXQgc3ltbWV0cmljIG11bHRpLXByb2Nlc3NvciBzdXBwb3J0Ci0gICAgICAgICAgICAgICAgaXMgbm90IHNldDoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBBIGdvb2QgbWV0aG9kIHRvIGlzb2xhdGUgY2hhbmdlZCBjb25maWd1cmF0aW9ucyBpcyB0byB1c2UgYSBjb21iaW5hdGlvbiBvZiB0aGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IHRvb2wgYW5kIHNpbXBsZSBzaGVsbCBjb21tYW5kcy4KLSAgICAgICAgICAgICAgICBCZWZvcmUgY2hhbmdpbmcgY29uZmlndXJhdGlvbnMgd2l0aCA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+LCBjb3B5IHRoZQotICAgICAgICAgICAgICAgIGV4aXN0aW5nIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gYW5kIHJlbmFtZSBpdCB0byBzb21ldGhpbmcgZWxzZSwKLSAgICAgICAgICAgICAgICB1c2UgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiB0byBtYWtlCi0gICAgICAgICAgICAgICAgYXMgbWFueSBjaGFuZ2VzIGFzIHlvdSB3YW50IGFuZCBzYXZlIHRoZW0sIHRoZW4gY29tcGFyZSB0aGUgcmVuYW1lZCBjb25maWd1cmF0aW9uCi0gICAgICAgICAgICAgICAgZmlsZSBhZ2FpbnN0IHRoZSBuZXdseSBjcmVhdGVkIGZpbGUuCi0gICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIHJlc3VsdGluZyBkaWZmZXJlbmNlcyBhcyB5b3VyIGJhc2UgdG8gY3JlYXRlIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzCi0gICAgICAgICAgICAgICAgdG8gcGVybWFuZW50bHkgc2F2ZSBpbiB5b3VyIGtlcm5lbCBsYXllci4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBtYWtlIGEgY29weSBvZiB0aGUgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBhbmQgZG9uJ3QganVzdAotICAgICAgICAgICAgICAgICAgICByZW5hbWUgaXQuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gbmVlZHMgYW4gZXhpc3RpbmcgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBmcm9tIHdoaWNoIHRvIHdvcmsuCi0gICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLWEtZGVmY29uZmlnLWZpbGUnPgotICAgICAgICAgICAgPHRpdGxlPkNyZWF0aW5nIGEmbmJzcDsmbmJzcDs8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gRmlsZTwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEEgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgaXMgc2ltcGx5IGEKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IHJlbmFtZWQgdG8gImRlZmNvbmZpZyIuCi0gICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgYSA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZQotICAgICAgICAgICAgICAgIHRvIHJldGFpbiBhIGtub3duIHNldCBvZiBrZXJuZWwgY29uZmlndXJhdGlvbnMgZnJvbSB3aGljaCB0aGUKLSAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNhbiBkcmF3IHRvIGNyZWF0ZSB0aGUgZmluYWwKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuCi0gICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgIE91dC1vZi10aGUtYm94LCB0aGUgWW9jdG8gUHJvamVjdCBuZXZlciBzaGlwcyBhCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBvcgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNyZWF0ZXMgdGhlIGZpbmFsCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUKLSAgICAgICAgICAgICAgICAgICAga2VybmVsLgotICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVG8gY3JlYXRlIGEgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+LCBzdGFydCB3aXRoIGEKLSAgICAgICAgICAgICAgICBjb21wbGV0ZSwgd29ya2luZyBMaW51eCBrZXJuZWwgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIGZpbGUuCi0gICAgICAgICAgICAgICAgQ29weSB0aGF0IGZpbGUgdG8gdGhlIGFwcHJvcHJpYXRlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgZGlyZWN0b3J5IGluIHlvdXIgbGF5ZXIncwotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZWNpcGVzLWtlcm5lbC9saW51eDwvZmlsZW5hbWU+IGRpcmVjdG9yeSwgYW5kIHJlbmFtZQotICAgICAgICAgICAgICAgIHRoZSBjb3BpZWQgZmlsZSB0byAiZGVmY29uZmlnIi4KLSAgICAgICAgICAgICAgICBUaGVuLCBhZGQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byB0aGUgbGludXgteW9jdG8KLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSBpbiB5b3VyIGxheWVyOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgotICAgICBTUkNfVVJJICs9ICJmaWxlOi8vZGVmY29uZmlnIgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBUaGUKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgdGVsbHMgdGhlIGJ1aWxkIHN5c3RlbSBob3cgdG8gc2VhcmNoIGZvciB0aGUgZmlsZSwgd2hpbGUgdGhlCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTRVhUUkFQQVRIUyc+PGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICBleHRlbmRzIHRoZQotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFU1BBVEgnPjxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUgKHNlYXJjaCBkaXJlY3RvcmllcykgdG8gaW5jbHVkZSB0aGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtQTn08L2ZpbGVuYW1lPiBkaXJlY3RvcnkgeW91IGNyZWF0ZWQgdG8gaG9sZCB0aGUKLSAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGNoYW5nZXMuCi0gICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gYXBwbGllcyB0aGUgY29uZmlndXJhdGlvbnMgZnJvbSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgYmVmb3JlIGFwcGx5aW5nIGFueQotICAgICAgICAgICAgICAgICAgICBzdWJzZXF1ZW50IGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzLgotICAgICAgICAgICAgICAgICAgICBUaGUgZmluYWwga2VybmVsIGNvbmZpZ3VyYXRpb24gaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMgaW4gdGhlIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBmaWxlIGFuZCBhbnkgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgeW91IHByb3ZpZGUuCi0gICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHJlYWxpemUgdGhhdCBpZiB5b3UgaGF2ZSBhbnkgY29uZmlndXJhdGlvbgotICAgICAgICAgICAgICAgICAgICBmcmFnbWVudHMsIHRoZSBidWlsZCBzeXN0ZW0gYXBwbGllcyB0aGVzZSBvbiB0b3Agb2YgYW5kCi0gICAgICAgICAgICAgICAgICAgIGFmdGVyIGFwcGx5aW5nIHRoZSBleGlzdGluZyBkZWZjb25maWcgZmlsZSBjb25maWd1cmF0aW9ucy4KLSAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGtlcm5lbCwgc2VlIHRoZQotICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsjY2hhbmdpbmctdGhlLWNvbmZpZ3VyYXRpb24nPkNoYW5naW5nIHRoZSBDb25maWd1cmF0aW9uPC91bGluaz4iCi0gICAgICAgICAgICAgICAgYW5kCi0gICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyNnZW5lcmF0aW5nLWNvbmZpZ3VyYXRpb24tZmlsZXMnPkdlbmVyYXRpbmcgQ29uZmlndXJhdGlvbiBGaWxlczwvdWxpbms+IgotICAgICAgICAgICAgICAgIHNlY3Rpb25zLCBib3RoIGluIHRoZSBZb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudAotICAgICAgICAgICAgICAgIE1hbnVhbC4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdjcmVhdGluZy1jb25maWctZnJhZ21lbnRzJz4KLSAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyBDb25maWd1cmF0aW9uIEZyYWdtZW50czwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIGFyZSBzaW1wbHkga2VybmVsIG9wdGlvbnMgdGhhdCBhcHBlYXIgaW4gYSBmaWxlCi0gICAgICAgICAgICAgICAgcGxhY2VkIHdoZXJlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNhbiBmaW5kIGFuZCBhcHBseSB0aGVtLgotICAgICAgICAgICAgICAgIFN5bnRhY3RpY2FsbHksIHRoZSBjb25maWd1cmF0aW9uIHN0YXRlbWVudCBpcyBpZGVudGljYWwgdG8gd2hhdCB3b3VsZCBhcHBlYXIKLSAgICAgICAgICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcyBpbiB0aGUKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz46Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICB0bXAvd29yay88cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+LXBva3ktbGludXgvbGludXgteW9jdG8tPHJlcGxhY2VhYmxlPnJlbGVhc2Vfc3BlY2lmaWNfc3RyaW5nPC9yZXBsYWNlYWJsZT4vbGludXgtPHJlcGxhY2VhYmxlPmFyY2g8L3JlcGxhY2VhYmxlPi08cmVwbGFjZWFibGU+YnVpbGRfdHlwZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBJdCBpcyBzaW1wbGUgdG8gY3JlYXRlIGEgY29uZmlndXJhdGlvbiBmcmFnbWVudC4KLSAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaXNzdWluZyB0aGUgZm9sbG93aW5nIGZyb20gdGhlIHNoZWxsIGNyZWF0ZXMgYSBjb25maWd1cmF0aW9uIGZyYWdtZW50Ci0gICAgICAgICAgICAgICAgZmlsZSBuYW1lZCA8ZmlsZW5hbWU+bXlfc21wLmNmZzwvZmlsZW5hbWU+IHRoYXQgZW5hYmxlcyBtdWx0aS1wcm9jZXNzb3Igc3VwcG9ydAotICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUga2VybmVsOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBlY2hvICJDT05GSUdfU01QPXkiID4+IG15X3NtcC5jZmcKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgIEFsbCBjb25maWd1cmF0aW9uIGZyYWdtZW50IGZpbGVzIG11c3QgdXNlIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNmZzwvZmlsZW5hbWU+IGV4dGVuc2lvbiBpbiBvcmRlciBmb3IgdGhlCi0gICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gcmVjb2duaXplIHRoZW0gYXMgYQotICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZyYWdtZW50LgotICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgV2hlcmUgZG8geW91IHB1dCB5b3VyIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQgZmlsZXM/Ci0gICAgICAgICAgICAgICAgWW91IGNhbiBwbGFjZSB0aGVzZSBmaWxlcyBpbiB0aGUgc2FtZSBhcmVhIHBvaW50ZWQgdG8gYnkKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+LgotICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHBpY2tzIHVwIHRoZSBjb25maWd1cmF0aW9uIGFuZAotICAgICAgICAgICAgICAgIGFkZHMgaXQgdG8gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24uCi0gICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhZCBhIHNldCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMKLSAgICAgICAgICAgICAgICBpbiBhIGZpbGUgY2FsbGVkIDxmaWxlbmFtZT5teWNvbmZpZy5jZmc8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICBJZiB5b3UgcHV0IHRoYXQgZmlsZSBpbnNpZGUgYSBkaXJlY3RvcnkgbmFtZWQKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG88L2ZpbGVuYW1lPiB0aGF0IHJlc2lkZXMgaW4gdGhlIHNhbWUKLSAgICAgICAgICAgICAgICBkaXJlY3RvcnkgYXMgdGhlIGtlcm5lbCdzIGFwcGVuZCBmaWxlIGFuZCB0aGVuIGFkZCBhCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgc3VjaCBhcyB0aGUgZm9sbG93aW5nCi0gICAgICAgICAgICAgICAgdG8gdGhlIGtlcm5lbCdzIGFwcGVuZCBmaWxlLCB0aG9zZSBjb25maWd1cmF0aW9uIG9wdGlvbnMKLSAgICAgICAgICAgICAgICB3aWxsIGJlIHBpY2tlZCB1cCBhbmQgYXBwbGllZCB3aGVuIHRoZSBrZXJuZWwgaXMgYnVpbHQuCi0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBTUkNfVVJJICs9ICJmaWxlOi8vbXljb25maWcuY2ZnIgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQXMgbWVudGlvbmVkIGVhcmxpZXIsIHlvdSBjYW4gZ3JvdXAgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBpbnRvIG11bHRpcGxlIGZpbGVzIGFuZAotICAgICAgICAgICAgICAgIG5hbWUgdGhlbSBhbGwgaW4gdGhlIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gc3RhdGVtZW50IGFzIHdlbGwuCi0gICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCBncm91cCBzZXBhcmF0ZSBjb25maWd1cmF0aW9ucyBzcGVjaWZpY2FsbHkgZm9yIEV0aGVybmV0IGFuZCBncmFwaGljcwotICAgICAgICAgICAgICAgIGludG8gdGhlaXIgb3duIGZpbGVzIGFuZCBhZGQgdGhvc2UgYnkgdXNpbmcgYSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHN0YXRlbWVudCBsaWtlIHRoZQotICAgICAgICAgICAgICAgIGZvbGxvd2luZyBpbiB5b3VyIGFwcGVuZCBmaWxlOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgU1JDX1VSSSArPSAiZmlsZTovL215Y29uZmlnLmNmZyBcCi0gICAgICAgICAgICBmaWxlOi8vZXRoLmNmZyBcCi0gICAgICAgICAgICBmaWxlOi8vZ2Z4LmNmZyIKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nZmluZS10dW5pbmctdGhlLWtlcm5lbC1jb25maWd1cmF0aW9uLWZpbGUnPgotICAgICAgICAgICAgPHRpdGxlPkZpbmUtVHVuaW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBGaWxlPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgWW91IGNhbiBtYWtlIHN1cmUgdGhlIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSBpcyBhcyBsZWFuIG9yIGVmZmljaWVudCBhcwotICAgICAgICAgICAgICAgIHBvc3NpYmxlIGJ5IHJlYWRpbmcgdGhlIG91dHB1dCBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQgYXVkaXQsCi0gICAgICAgICAgICAgICAgbm90aW5nIGFueSBpc3N1ZXMsIG1ha2luZyBjaGFuZ2VzIHRvIGNvcnJlY3QgdGhlIGlzc3VlcywgYW5kIHRoZW4gcmVwZWF0aW5nLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBBcyBwYXJ0IG9mIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2VzcywgdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2tlcm5lbF9jb25maWdjaGVjazwvZmlsZW5hbWU+IHRhc2sgcnVucy4KLSAgICAgICAgICAgICAgICBUaGlzIHRhc2sgdmFsaWRhdGVzIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBieSBjaGVja2luZyB0aGUgZmluYWwKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgYWdhaW5zdCB0aGUgaW5wdXQgZmlsZXMuCi0gICAgICAgICAgICAgICAgRHVyaW5nIHRoZSBjaGVjaywgdGhlIHRhc2sgcHJvZHVjZXMgd2FybmluZyBtZXNzYWdlcyBmb3IgdGhlIGZvbGxvd2luZwotICAgICAgICAgICAgICAgIGlzc3VlczoKLSAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UmVxdWVzdGVkIG9wdGlvbnMgdGhhdCBkaWQgbm90IG1ha2UgdGhlIGZpbmFsCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Db25maWd1cmF0aW9uIGl0ZW1zIHRoYXQgYXBwZWFyIHR3aWNlIGluIHRoZSBzYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZyYWdtZW50LjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q29uZmlndXJhdGlvbiBpdGVtcyB0YWdnZWQgYXMgInJlcXVpcmVkIiB0aGF0IHdlcmUgb3ZlcnJpZGRlbi4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSBib2FyZCBvdmVycmlkZXMgYSBub24tYm9hcmQgc3BlY2lmaWMgb3B0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TGlzdGVkIG9wdGlvbnMgbm90IHZhbGlkIGZvciB0aGUga2VybmVsIGJlaW5nIHByb2Nlc3NlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB0aGUgb3B0aW9uIGRvZXMgbm90IGFwcGVhciBhbnl3aGVyZS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19rZXJuZWxfY29uZmlnY2hlY2s8L2ZpbGVuYW1lPiB0YXNrIGNhbgotICAgICAgICAgICAgICAgICAgICBhbHNvIG9wdGlvbmFsbHkgcmVwb3J0IGlmIGFuIG9wdGlvbiBpcyBvdmVycmlkZGVuIGR1cmluZwotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nLgotICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgRm9yIGVhY2ggb3V0cHV0IHdhcm5pbmcsIGEgbWVzc2FnZSBwb2ludHMgdG8gdGhlIGZpbGUKLSAgICAgICAgICAgICAgICB0aGF0IGNvbnRhaW5zIGEgbGlzdCBvZiB0aGUgb3B0aW9ucyBhbmQgYSBwb2ludGVyIHRvIHRoZQotICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQgdGhhdCBkZWZpbmVzIHRoZW0uCi0gICAgICAgICAgICAgICAgQ29sbGVjdGl2ZWx5LCB0aGUgZmlsZXMgYXJlIHRoZSBrZXkgdG8gc3RyZWFtbGluaW5nIHRoZQotICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRvIHN0cmVhbWxpbmUgdGhlIGNvbmZpZ3VyYXRpb24sIGRvIHRoZSBmb2xsb3dpbmc6Ci0gICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U3RhcnQgd2l0aCBhIGZ1bGwgY29uZmlndXJhdGlvbiB0aGF0IHlvdQotICAgICAgICAgICAgICAgICAgICAgICAga25vdyB3b3JrcyAtIGl0IGJ1aWxkcyBhbmQgYm9vdHMgc3VjY2Vzc2Z1bGx5LgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjb25maWd1cmF0aW9uIGZpbGUgd2lsbCBiZSB5b3VyIGJhc2VsaW5lLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZXBhcmF0ZWx5IHJ1biB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19rZXJuZWxfY29uZmlnbWU8L2ZpbGVuYW1lPiBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19rZXJuZWxfY29uZmlnY2hlY2s8L2ZpbGVuYW1lPiB0YXNrcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGFrZSB0aGUgcmVzdWx0aW5nIGxpc3Qgb2YgZmlsZXMgZnJvbSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19rZXJuZWxfY29uZmlnY2hlY2s8L2ZpbGVuYW1lPiB0YXNrCi0gICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncyBhbmQgZG8gdGhlIGZvbGxvd2luZzoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcm9wIHZhbHVlcyB0aGF0IGFyZSByZWRlZmluZWQgaW4gdGhlIGZyYWdtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dCBkbyBub3QgY2hhbmdlIHRoZSBmaW5hbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5hbHl6ZSBhbmQgcG90ZW50aWFsbHkgZHJvcCB2YWx1ZXMgZnJvbSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIHRoYXQgb3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5hbHl6ZSBhbmQgcG90ZW50aWFsbHkgcmVtb3ZlIG5vbi1ib2FyZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyBvcHRpb25zLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZSByZXBlYXRlZCBhbmQgaW52YWxpZCBvcHRpb25zLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBBZnRlciB5b3UgaGF2ZSB3b3JrZWQgdGhyb3VnaCB0aGUgb3V0cHV0IG9mIHRoZSBrZXJuZWwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gYXVkaXQsIHlvdSBjYW4gcmUtcnVuIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2tlcm5lbF9jb25maWdtZTwvZmlsZW5hbWU+IGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2tlcm5lbF9jb25maWdjaGVjazwvZmlsZW5hbWU+IHRhc2tzIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlIHJlc3VsdHMgb2YgeW91ciBjaGFuZ2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgbW9yZSBpc3N1ZXMsIHlvdSBjYW4gZGVhbCB3aXRoIHRoZW0gYXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgc3RlcC4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEl0ZXJhdGl2ZWx5IHdvcmtpbmcgdGhyb3VnaCBzdGVwcyB0d28gdGhyb3VnaCBmb3VyIGV2ZW50dWFsbHkgeWllbGRzCi0gICAgICAgICAgICAgICAgYSBtaW5pbWFsLCBzdHJlYW1saW5lZCBjb25maWd1cmF0aW9uIGZpbGUuCi0gICAgICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSB0aGUgYmVzdCA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+LCB5b3UgY2FuIGJ1aWxkIHRoZSBMaW51eAotICAgICAgICAgICAgICAgIFlvY3RvIGtlcm5lbC4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdkZXRlcm1pbmluZy1oYXJkd2FyZS1hbmQtbm9uLWhhcmR3YXJlLWZlYXR1cmVzLWZvci10aGUta2VybmVsLWNvbmZpZ3VyYXRpb24tYXVkaXQtcGhhc2UnPgotICAgICAgICAgICAgPHRpdGxlPkRldGVybWluaW5nIEhhcmR3YXJlIGFuZCBOb24tSGFyZHdhcmUgRmVhdHVyZXMgZm9yIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBBdWRpdCBQaGFzZTwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgcGFydCBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gYXVkaXQKLSAgICAgICAgICAgICAgICBwaGFzZSB0aGF0IG1vc3QgZGV2ZWxvcGVycyBjYW4gaWdub3JlLgotICAgICAgICAgICAgICAgIER1cmluZyB0aGlzIHBhcnQgb2YgdGhlIGF1ZGl0IHBoYXNlLCB0aGUgY29udGVudHMgb2YgdGhlIGZpbmFsCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGFyZSBjb21wYXJlZCBhZ2FpbnN0IHRoZQotICAgICAgICAgICAgICAgIGZyYWdtZW50cyBzcGVjaWZpZWQgYnkgdGhlIHN5c3RlbS4KLSAgICAgICAgICAgICAgICBUaGVzZSBmcmFnbWVudHMgY2FuIGJlIHN5c3RlbSBmcmFnbWVudHMsIGRpc3RybyBmcmFnbWVudHMsCi0gICAgICAgICAgICAgICAgb3IgdXNlciBzcGVjaWZpZWQgY29uZmlndXJhdGlvbiBlbGVtZW50cy4KLSAgICAgICAgICAgICAgICBSZWdhcmRsZXNzIG9mIHRoZWlyIG9yaWdpbiwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KLSAgICAgICAgICAgICAgICB3YXJucyB0aGUgdXNlciBpZiBhIHNwZWNpZmljIG9wdGlvbiBpcyBub3QgaW5jbHVkZWQgaW4gdGhlCi0gICAgICAgICAgICAgICAgZmluYWwga2VybmVsIGNvbmZpZ3VyYXRpb24uCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIG5vdCBvdmVyd2hlbG0gdGhlIHVzZXIgd2l0aCBjb25maWd1cmF0aW9uIHdhcm5pbmdzLAotICAgICAgICAgICAgICAgIGJ5IGRlZmF1bHQgdGhlIHN5c3RlbSBvbmx5IHJlcG9ydHMgb24gbWlzc2luZyAiaGFyZHdhcmUiCi0gICAgICAgICAgICAgICAgb3B0aW9ucyBiZWNhdXNlIGEgbWlzc2luZyBoYXJkd2FyZSBvcHRpb24gY291bGQgbWVhbiBhIGJvb3QKLSAgICAgICAgICAgICAgICBmYWlsdXJlIG9yIHRoYXQgaW1wb3J0YW50IGhhcmR3YXJlIGlzIG5vdCBhdmFpbGFibGUuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBhIGdpdmVuIG9wdGlvbiBpcyAiaGFyZHdhcmUiIG9yCi0gICAgICAgICAgICAgICAgIm5vbi1oYXJkd2FyZSIsIHRoZSBrZXJuZWwgTWV0YWRhdGEgY29udGFpbnMgZmlsZXMgdGhhdAotICAgICAgICAgICAgICAgIGNsYXNzaWZ5IGluZGl2aWR1YWwgb3IgZ3JvdXBzIG9mIG9wdGlvbnMgYXMgZWl0aGVyIGhhcmR3YXJlCi0gICAgICAgICAgICAgICAgb3Igbm9uLWhhcmR3YXJlLgotICAgICAgICAgICAgICAgIFRvIGJldHRlciBzaG93IHRoaXMsIGNvbnNpZGVyIGEgc2l0dWF0aW9uIHdoZXJlIHRoZQotICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3Qga2VybmVsIGNhY2hlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZmlsZXM6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBrZXJuZWwtY2FjaGUvZmVhdHVyZXMvZHJtLXBzYi9oYXJkd2FyZS5jZmcKLSAgICAga2VybmVsLWNhY2hlL2ZlYXR1cmVzL2tnZGIvaGFyZHdhcmUuY2ZnCi0gICAgIGtlcm5lbC1jYWNoZS9rdHlwZXMvYmFzZS9oYXJkd2FyZS5jZmcKLSAgICAga2VybmVsLWNhY2hlL2JzcC9tdGktbWFsdGEzMi9oYXJkd2FyZS5jZmcKLSAgICAga2VybmVsLWNhY2hlL2JzcC9mc2wtbXBjODMxNWUtcmRiL2hhcmR3YXJlLmNmZwotICAgICBrZXJuZWwtY2FjaGUvYnNwL3FlbXUtcHBjMzIvaGFyZHdhcmUuY2ZnCi0gICAgIGtlcm5lbC1jYWNoZS9ic3AvcWVtdWFybWE5L2hhcmR3YXJlLmNmZwotICAgICBrZXJuZWwtY2FjaGUvYnNwL210aS1tYWx0YTY0L2hhcmR3YXJlLmNmZwotICAgICBrZXJuZWwtY2FjaGUvYnNwL2FybS12ZXJzYXRpbGUtOTI2ZWpzL2hhcmR3YXJlLmNmZwotICAgICBrZXJuZWwtY2FjaGUvYnNwL2NvbW1vbi1wYy9oYXJkd2FyZS5jZmcKLSAgICAga2VybmVsLWNhY2hlL2JzcC9jb21tb24tcGMtNjQvaGFyZHdhcmUuY2ZnCi0gICAgIGtlcm5lbC1jYWNoZS9mZWF0dXJlcy9yZmtpbGwvbm9uLWhhcmR3YXJlLmNmZwotICAgICBrZXJuZWwtY2FjaGUva3R5cGVzL2Jhc2Uvbm9uLWhhcmR3YXJlLmNmZwotICAgICBrZXJuZWwtY2FjaGUvZmVhdHVyZXMvYXVmcy9ub24taGFyZHdhcmUua2NmCi0gICAgIGtlcm5lbC1jYWNoZS9mZWF0dXJlcy9vY2Yvbm9uLWhhcmR3YXJlLmtjZgotICAgICBrZXJuZWwtY2FjaGUva3R5cGVzL2Jhc2Uvbm9uLWhhcmR3YXJlLmtjZgotICAgICBrZXJuZWwtY2FjaGUva3R5cGVzL2Jhc2UvaGFyZHdhcmUua2NmCi0gICAgIGtlcm5lbC1jYWNoZS9ic3AvcWVtdS1wcGMzMi9oYXJkd2FyZS5rY2YKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHByb3ZpZGVzIGV4cGxhbmF0aW9ucyBmb3IgdGhlIHZhcmlvdXMKLSAgICAgICAgICAgICAgICBmaWxlczoKLSAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmhhcmR3YXJlLmtjZjwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBrZXJuZWwgS2NvbmZpZyBmaWxlcyB0aGF0IGNvbnRhaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlIG9wdGlvbnMgb25seS4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPm5vbi1oYXJkd2FyZS5rY2Y8L2ZpbGVuYW1lPjoKLSAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2Yga2VybmVsIEtjb25maWcgZmlsZXMgdGhhdCBjb250YWluCi0gICAgICAgICAgICAgICAgICAgICAgICBub24taGFyZHdhcmUgb3B0aW9ucyBvbmx5LgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+aGFyZHdhcmUuY2ZnPC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGtlcm5lbAotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNPTkZJR188L2ZpbGVuYW1lPiBvcHRpb25zIHRoYXQgYXJlIGhhcmR3YXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSB3aXRoaW4gYSBLY29uZmlnCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlIHNwZWNpZmllZCBieSBhIGhhcmR3YXJlIG9yIG5vbi1oYXJkd2FyZQotICAgICAgICAgICAgICAgICAgICAgICAgS2NvbmZpZyBmaWxlIChpLmUuIDxmaWxlbmFtZT5oYXJkd2FyZS5rY2Y8L2ZpbGVuYW1lPiBvcgotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5vbi1oYXJkd2FyZS5rY2Y8L2ZpbGVuYW1lPikuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5ub24taGFyZHdhcmUuY2ZnPC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGtlcm5lbAotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNPTkZJR188L2ZpbGVuYW1lPiBvcHRpb25zIHRoYXQgYXJlCi0gICAgICAgICAgICAgICAgICAgICAgICBub3QgaGFyZHdhcmUsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QgdGhleSBhcmUKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBhIEtjb25maWcgZmlsZSBzcGVjaWZpZWQgYnkgYSBoYXJkd2FyZSBvcgotICAgICAgICAgICAgICAgICAgICAgICAgbm9uLWhhcmR3YXJlIEtjb25maWcgZmlsZSAoaS5lLgotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmhhcmR3YXJlLmtjZjwvZmlsZW5hbWU+IG9yCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bm9uLWhhcmR3YXJlLmtjZjwvZmlsZW5hbWU+KS4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIEhlcmUgaXMgYSBzcGVjaWZpYyBleGFtcGxlIHVzaW5nIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5rZXJuZWwtY2FjaGUvYnNwL210aS1tYWx0YTMyL2hhcmR3YXJlLmNmZzwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgQ09ORklHX1NFUklBTF84MjUwCi0gICAgIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFCi0gICAgIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUwotICAgICBDT05GSUdfU0VSSUFMXzgyNTBfUENJCi0gICAgIENPTkZJR19TRVJJQUxfQ09SRQotICAgICBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRQotICAgICBDT05GSUdfVkdBX0FSQgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBUaGUga2VybmVsIGNvbmZpZ3VyYXRpb24gYXVkaXQgYXV0b21hdGljYWxseSBkZXRlY3RzIHRoZXNlCi0gICAgICAgICAgICAgICAgZmlsZXMgKGhlbmNlIHRoZSBuYW1lcyBtdXN0IGJlIGV4YWN0bHkgdGhlIG9uZXMgZGlzY3Vzc2VkIGhlcmUpLAotICAgICAgICAgICAgICAgIGFuZCB1c2VzIHRoZW0gYXMgaW5wdXRzIHdoZW4gZ2VuZXJhdGluZyB3YXJuaW5ncyBhYm91dCB0aGUKLSAgICAgICAgICAgICAgICBmaW5hbCA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEEgdXNlci1zcGVjaWZpZWQga2VybmVsIE1ldGFkYXRhIHJlcG9zaXRvcnksIG9yIHJlY2lwZSBzcGFjZQotICAgICAgICAgICAgICAgIGZlYXR1cmUsIGNhbiB1c2UgdGhlc2Ugc2FtZSBmaWxlcyB0byBjbGFzc2lmeSBvcHRpb25zIHRoYXQgYXJlCi0gICAgICAgICAgICAgICAgZm91bmQgd2l0aGluIGl0cyA8ZmlsZW5hbWU+LmNmZzwvZmlsZW5hbWU+IGZpbGVzIGFzIGhhcmR3YXJlCi0gICAgICAgICAgICAgICAgb3Igbm9uLWhhcmR3YXJlLCB0byBwcmV2ZW50IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGZyb20KLSAgICAgICAgICAgICAgICBwcm9kdWNpbmcgYW4gZXJyb3Igb3Igd2FybmluZyB3aGVuIGFuIG9wdGlvbiBpcyBub3QgaW4gdGhlCi0gICAgICAgICAgICAgICAgZmluYWwgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9InBhdGNoaW5nLXRoZS1rZXJuZWwiPgotICAgICAgICA8dGl0bGU+UGF0Y2hpbmcgdGhlIEtlcm5lbDwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBQYXRjaGluZyB0aGUga2VybmVsIGludm9sdmVzIGNoYW5naW5nIG9yIGFkZGluZyBjb25maWd1cmF0aW9ucyB0byBhbiBleGlzdGluZyBrZXJuZWwsCi0gICAgICAgICAgICBjaGFuZ2luZyBvciBhZGRpbmcgcmVjaXBlcyB0byB0aGUga2VybmVsIHRoYXQgYXJlIG5lZWRlZCB0byBzdXBwb3J0IHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzLAotICAgICAgICAgICAgb3IgZXZlbiBhbHRlcmluZyB0aGUgc291cmNlIGNvZGUgaXRzZWxmLgotICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT55b2N0by1rZXJuZWw8L2ZpbGVuYW1lPiBzY3JpcHQKLSAgICAgICAgICAgICAgICBmb3VuZCBpbiB0aGUgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KLSAgICAgICAgICAgICAgICB1bmRlciA8ZmlsZW5hbWU+c2NyaXB0czwvZmlsZW5hbWU+IHRvIG1hbmFnZSBrZXJuZWwgcGF0Y2hlcyBhbmQgY29uZmlndXJhdGlvbi4KLSAgICAgICAgICAgICAgICBTZWUgdGhlICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNtYW5hZ2luZy1rZXJuZWwtcGF0Y2hlcy1hbmQtY29uZmlnLWl0ZW1zLXdpdGgteW9jdG8ta2VybmVsJz5NYW5hZ2luZyBrZXJuZWwgUGF0Y2hlcyBhbmQgQ29uZmlnIEl0ZW1zIHdpdGggeW9jdG8ta2VybmVsPC91bGluaz4iCi0gICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1ApIERldmVsb3BlcidzIEd1aWRlIGZvcgotICAgICAgICAgICAgICAgIG1vcmUgaW5mb3JtYXRpb24uPC9ub3RlPgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGlzIGV4YW1wbGUgY3JlYXRlcyBhIHNpbXBsZSBwYXRjaCBieSBhZGRpbmcgc29tZSBRRU1VIGVtdWxhdG9yIGNvbnNvbGUKLSAgICAgICAgICAgIG91dHB1dCBhdCBib290IHRpbWUgdGhyb3VnaCA8ZmlsZW5hbWU+cHJpbnRrPC9maWxlbmFtZT4gc3RhdGVtZW50cyBpbiB0aGUga2VybmVsJ3MKLSAgICAgICAgICAgIDxmaWxlbmFtZT5jYWxpYnJhdGUuYzwvZmlsZW5hbWU+IHNvdXJjZSBjb2RlIGZpbGUuCi0gICAgICAgICAgICBBcHBseWluZyB0aGUgcGF0Y2ggYW5kIGJvb3RpbmcgdGhlIG1vZGlmaWVkIGltYWdlIGNhdXNlcyB0aGUgYWRkZWQKLSAgICAgICAgICAgIG1lc3NhZ2VzIHRvIGFwcGVhciBvbiB0aGUgZW11bGF0b3IncyBjb25zb2xlLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgZXhhbXBsZSBhc3N1bWVzIGEgY2xlYW4gYnVpbGQgZXhpc3RzIGZvciB0aGUgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPgotICAgICAgICAgICAgbWFjaGluZSBpbiBhCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgotICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCB0aGUgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+IGlzCi0gICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQ8L2ZpbGVuYW1lPiBhbmQgaXMgbG9jYXRlZCBpbiA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IGFuZAotICAgICAgICAgICAgdGhlIGtlcm5lbCBpcyBiYXNlZCBvbiB0aGUgTGludXggMy40IGtlcm5lbC4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQWxzbywgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGF0Y2hpbmcgdGhlIGtlcm5lbCwgc2VlIHRoZQotICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyNhcHBseWluZy1wYXRjaGVzJz5BcHBseWluZyBQYXRjaGVzPC91bGluaz4iCi0gICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWwuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRlLWEtbGF5ZXItZm9yLXlvdXItY2hhbmdlcyc+Ci0gICAgICAgICAgICA8dGl0bGU+Q3JlYXRlIGEgTGF5ZXIgZm9yIHlvdXIgQ2hhbmdlczwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBzdGVwIGlzIHRvIGNyZWF0ZSBhIGxheWVyIHNvIHlvdSBjYW4gaXNvbGF0ZSB5b3VyCi0gICAgICAgICAgICAgICAgY2hhbmdlcy4KLSAgICAgICAgICAgICAgICBSYXRoZXIgdGhhbiB1c2UgdGhlIDxmaWxlbmFtZT55b2N0by1sYXllcjwvZmlsZW5hbWU+IHNjcmlwdAotICAgICAgICAgICAgICAgIHRvIGNyZWF0ZSB0aGUgbGF5ZXIsIHRoaXMgZXhhbXBsZSBzdGVwcyB0aHJvdWdoIHRoZSBwcm9jZXNzCi0gICAgICAgICAgICAgICAgYnkgaGFuZC4KLSAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCBpbmZvcm1hdGlvbiBvbiB0aGUgc2NyaXB0IHRoYXQgY3JlYXRlcyBhIGdlbmVyYWwKLSAgICAgICAgICAgICAgICBsYXllciwgc2VlIHRoZQotICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjcmVhdGluZy1hLWdlbmVyYWwtbGF5ZXItdXNpbmctdGhlLXlvY3RvLWxheWVyLXNjcmlwdCc+Q3JlYXRpbmcgYSBHZW5lcmFsIExheWVyIFVzaW5nIHRoZSB5b2N0by1sYXllciBTY3JpcHQ8L2xpbms+IgotICAgICAgICAgICAgICAgIHNlY3Rpb24uCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZXNlIHR3byBjb21tYW5kcyBjcmVhdGUgYSBkaXJlY3RvcnkgeW91IGNhbiB1c2UgZm9yIHlvdXIKLSAgICAgICAgICAgICAgICBsYXllcjoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgY2Qgfi9wb2t5Ci0gICAgICQgbWtkaXIgbWV0YS1teWxheWVyCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIENyZWF0aW5nIGEgZGlyZWN0b3J5IHRoYXQgZm9sbG93cyB0aGUgWW9jdG8gUHJvamVjdCBsYXllciBuYW1pbmcKLSAgICAgICAgICAgICAgICBjb252ZW50aW9ucyBzZXRzIHVwIHRoZSBsYXllciBmb3IgeW91ciBjaGFuZ2VzLgotICAgICAgICAgICAgICAgIFRoZSBsYXllciBpcyB3aGVyZSB5b3UgcGxhY2UgeW91ciBjb25maWd1cmF0aW9uIGZpbGVzLCBhcHBlbmQKLSAgICAgICAgICAgICAgICBmaWxlcywgYW5kIHBhdGNoIGZpbGVzLgotICAgICAgICAgICAgICAgIFRvIGxlYXJuIG1vcmUgYWJvdXQgY3JlYXRpbmcgYSBsYXllciBhbmQgZmlsbGluZyBpdCB3aXRoIHRoZQotICAgICAgICAgICAgICAgIGZpbGVzIHlvdSBuZWVkLCBzZWUgdGhlICI8bGluayBsaW5rZW5kPSd1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcKLSAgICAgICAgICAgICAgICBhbmQgQ3JlYXRpbmcgTGF5ZXJzPC9saW5rPiIgc2VjdGlvbi4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdmaW5kaW5nLXRoZS1rZXJuZWwtc291cmNlLWNvZGUnPgotICAgICAgICAgICAgPHRpdGxlPkZpbmRpbmcgdGhlIEtlcm5lbCBTb3VyY2UgQ29kZTwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEVhY2ggdGltZSB5b3UgYnVpbGQgYSBrZXJuZWwgaW1hZ2UsIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgaXMgZmV0Y2hlZAotICAgICAgICAgICAgICAgIGFuZCB1bnBhY2tlZCBpbnRvIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5OgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJHtTfS9saW51eAotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdmaW5kaW5nLXRoZS10ZW1wb3Jhcnktc291cmNlLWNvZGUnPkZpbmRpbmcgVGVtcG9yYXJ5IFNvdXJjZSBDb2RlPC9saW5rPiIKLSAgICAgICAgICAgICAgICBzZWN0aW9uIGFuZCB0aGUKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUyc+PGZpbGVuYW1lPlM8L2ZpbGVuYW1lPjwvdWxpbms+IHZhcmlhYmxlCi0gICAgICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgc291cmNlIGlzIGtlcHQgZHVyaW5nIGEgYnVpbGQuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEZvciB0aGlzIGV4YW1wbGUsIHdlIGFyZSBnb2luZyB0byBwYXRjaCB0aGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW5pdC9jYWxpYnJhdGUuYzwvZmlsZW5hbWU+IGZpbGUKLSAgICAgICAgICAgICAgICBieSBhZGRpbmcgc29tZSBzaW1wbGUgY29uc29sZSA8ZmlsZW5hbWU+cHJpbnRrPC9maWxlbmFtZT4gc3RhdGVtZW50cyB0aGF0IHdlIGNhbgotICAgICAgICAgICAgICAgIHNlZSB3aGVuIHdlIGJvb3QgdGhlIGltYWdlIHVzaW5nIFFFTVUuCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmctdGhlLXBhdGNoJz4KLSAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyB0aGUgUGF0Y2g8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUd28gbWV0aG9kcyBleGlzdCBieSB3aGljaCB5b3UgY2FuIGNyZWF0ZSB0aGUgcGF0Y2g6Ci0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndXNpbmctZGV2dG9vbC1pbi15b3VyLXdvcmtmbG93Jz48ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+PC9saW5rPiBhbmQKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd1c2luZy1hLXF1aWx0LXdvcmtmbG93Jz5RdWlsdDwvbGluaz4uCi0gICAgICAgICAgICAgICAgRm9yIGtlcm5lbCBwYXRjaGVzLCB0aGUgR2l0IHdvcmtmbG93IGlzIG1vcmUgYXBwcm9wcmlhdGUuCi0gICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGFzc3VtZXMgdGhlIEdpdCB3b3JrZmxvdyBhbmQgc2hvd3MgdGhlIHN0ZXBzIHNwZWNpZmljIHRvCi0gICAgICAgICAgICAgICAgdGhpcyBleGFtcGxlLgotICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DaGFuZ2UgdGhlIHdvcmtpbmcgZGlyZWN0b3J5PC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2UgdG8gd2hlcmUgdGhlIGtlcm5lbCBzb3VyY2UgY29kZSBpcyBiZWZvcmUgbWFraW5nCi0gICAgICAgICAgICAgICAgICAgICAgICB5b3VyIGVkaXRzIHRvIHRoZSA8ZmlsZW5hbWU+Y2FsaWJyYXRlLmM8L2ZpbGVuYW1lPiBmaWxlOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGNkIH4vcG9reS9idWlsZC90bXAvd29yay9xZW11eDg2LXBva3ktbGludXgvbGludXgteW9jdG8tJHtQVn0tJHtQUn0vbGludXgKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgeW91IGFyZSB3b3JraW5nIGluIGFuIGVzdGFibGlzaGVkIEdpdCByZXBvc2l0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgeW91IG11c3QgYmUgaW4gdGhpcyBkaXJlY3RvcnkgaW4gb3JkZXIgdG8gY29tbWl0IHlvdXIgY2hhbmdlcwotICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGNyZWF0ZSB0aGUgcGF0Y2ggZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPlRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz4gYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvdWxpbms+IHZhcmlhYmxlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHJlc2VudCB0aGUgdmVyc2lvbiBhbmQgcmV2aXNpb24gZm9yIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0bzwvZmlsZW5hbWU+IHJlY2lwZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4gdmFyaWFibGUgaW5jbHVkZXMgdGhlIEdpdCBtZXRhIGFuZCBtYWNoaW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaGVzLCB3aGljaCBtYWtlIHRoZSBkaXJlY3RvcnkgbmFtZSBsb25nZXIgdGhhbiB5b3UgbWlnaHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RWRpdCB0aGUgc291cmNlIGZpbGU8L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICAgICAgICAgIEVkaXQgdGhlIDxmaWxlbmFtZT5pbml0L2NhbGlicmF0ZS5jPC9maWxlbmFtZT4gZmlsZSB0byBoYXZlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIGNoYW5nZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIHZvaWQgY2FsaWJyYXRlX2RlbGF5KHZvaWQpCi0gICAgIHsKLSAgICAgICAgIHVuc2lnbmVkIGxvbmcgbHBqOwotICAgICAgICAgc3RhdGljIGJvb2wgcHJpbnRlZDsKLSAgICAgICAgIGludCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotICAgICAgICAgcHJpbnRrKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKLSAgICAgICAgIHByaW50aygiKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuIik7Ci0gICAgICAgICBwcmludGsoIiogICAgICAgIEhFTExPIFlPQ1RPIEtFUk5FTCAgICAgICAgICpcbiIpOwotICAgICAgICAgcHJpbnRrKCIqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4iKTsKLSAgICAgICAgIHByaW50aygiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7Ci0KLSAgICAgCWlmIChwZXJfY3B1KGNwdV9sb29wc19wZXJfamlmZnksIHRoaXNfY3B1KSkgewotICAgICAgICAgICAgICAgLgotICAgICAgICAgICAgICAgLgotICAgICAgICAgICAgICAgLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN0YWdlIGFuZCBjb21taXQgeW91ciBjaGFuZ2VzPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGVzZSBHaXQgY29tbWFuZHMgZGlzcGxheSB0aGUgbW9kaWZpZWQgZmlsZSwgc3RhZ2UgaXQsIGFuZCB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21taXQgdGhlIGZpbGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZ2l0IHN0YXR1cwotICAgICAkIGdpdCBhZGQgaW5pdC9jYWxpYnJhdGUuYwotICAgICAkIGdpdCBjb21taXQgLW0gImNhbGlicmF0ZTogQWRkIHByaW50ayBleGFtcGxlIgotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdlbmVyYXRlIHRoZSBwYXRjaCBmaWxlPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGlzIEdpdCBjb21tYW5kIGNyZWF0ZXMgdGhlIGEgcGF0Y2ggZmlsZSBuYW1lZAotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjAwMDEtY2FsaWJyYXRlLUFkZC1wcmludGstZXhhbXBsZS5wYXRjaDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZ2l0IGZvcm1hdC1wYXRjaCAtMQotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdzZXQtdXAteW91ci1sYXllci1mb3ItdGhlLWJ1aWxkJz4KLSAgICAgICAgICAgIDx0aXRsZT5TZXQgVXAgWW91ciBMYXllciBmb3IgdGhlIEJ1aWxkPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+VGhlc2Ugc3RlcHMgZ2V0IHlvdXIgbGF5ZXIgc2V0IHVwIGZvciB0aGUgYnVpbGQ6Ci0gICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSBhZGRpdGlvbmFsIHN0cnVjdHVyZTwvZW1waGFzaXM+OgotICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlIHRoZSBhZGRpdGlvbmFsIGxheWVyIHN0cnVjdHVyZToKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBjZCB+L3Bva3kvbWV0YS1teWxheWVyCi0gICAgICQgbWtkaXIgY29uZgotICAgICAkIG1rZGlyIHJlY2lwZXMta2VybmVsCi0gICAgICQgbWtkaXIgcmVjaXBlcy1rZXJuZWwvbGludXgKLSAgICAgJCBta2RpciByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0bwotICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaG9sZHMgeW91ciBjb25maWd1cmF0aW9uIGZpbGVzLCB3aGlsZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy1rZXJuZWw8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaG9sZHMgeW91ciBhcHBlbmQgZmlsZSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIHBhdGNoIGZpbGUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIHRoZSBsYXllciBjb25maWd1cmF0aW9uIGZpbGU8L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICAgICAgICAgIE1vdmUgdG8gdGhlIDxmaWxlbmFtZT5tZXRhLW15bGF5ZXIvY29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhbmQgY3JlYXRlCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmxheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICMgV2UgaGF2ZSBhIGNvbmYgYW5kIGNsYXNzZXMgZGlyZWN0b3J5LCBhZGQgdG8gQkJQQVRICi0gICAgIEJCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IgotCi0gICAgICMgV2UgaGF2ZSByZWNpcGVzLSogZGlyZWN0b3JpZXMsIGFkZCB0byBCQkZJTEVTCi0gICAgIEJCRklMRVMgKz0gIiR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmIgXAotICAgICAgICAgICAgICAgICAke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIgotCi0gICAgIEJCRklMRV9DT0xMRUNUSU9OUyArPSAibXlsYXllciIKLSAgICAgQkJGSUxFX1BBVFRFUk5fbXlsYXllciA9ICJeJHtMQVlFUkRJUn0vIgotICAgICBCQkZJTEVfUFJJT1JJVFlfbXlsYXllciA9ICI1IgotICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgICBOb3RpY2UgPGZpbGVuYW1lPm15bGF5ZXI8L2ZpbGVuYW1lPiBhcyBwYXJ0IG9mIHRoZSBsYXN0IHRocmVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50cy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgdGhlIGtlcm5lbCByZWNpcGUgYXBwZW5kIGZpbGU8L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICAgICAgICAgIE1vdmUgdG8gdGhlIDxmaWxlbmFtZT5tZXRhLW15bGF5ZXIvcmVjaXBlcy1rZXJuZWwvbGludXg8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYW5kIGNyZWF0ZQotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5saW51eC15b2N0b18zLjQuYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKLQotICAgICBTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1jYWxpYnJhdGUtQWRkLXByaW50ay1leGFtcGxlLnBhdGNoIgotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFU0VYVFJBUEFUSFMnPjxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbmQgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50cyBlbmFibGUgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gZmluZCB0aGUgcGF0Y2ggZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIGFwcGVuZCBmaWxlcywgc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWJiYXBwZW5kLWZpbGVzJz5Vc2luZyAuYmJhcHBlbmQgRmlsZXMgaW4gWW91ciBMYXllcjwvbGluaz4iCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UHV0IHRoZSBwYXRjaCBmaWxlIGluIHlvdXIgbGF5ZXI8L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICAgICAgICAgIE1vdmUgdGhlIDxmaWxlbmFtZT4wMDAxLWNhbGlicmF0ZS1BZGQtcHJpbnRrLWV4YW1wbGUucGF0Y2g8L2ZpbGVuYW1lPiBmaWxlIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPm1ldGEtbXlsYXllci9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0bzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdzZXQtdXAtZm9yLXRoZS1idWlsZCc+Ci0gICAgICAgICAgICA8dGl0bGU+U2V0IFVwIGZvciB0aGUgQnVpbGQ8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBEbyB0aGUgZm9sbG93aW5nIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgcGFyYW1ldGVycyBhcmUgc2V0IHVwIGZvciB0aGUgZXhhbXBsZS4KLSAgICAgICAgICAgICAgICBPbmNlIHlvdSBzZXQgdXAgdGhlc2UgYnVpbGQgcGFyYW1ldGVycywgdGhleSBkbyBub3QgaGF2ZSB0byBjaGFuZ2UgdW5sZXNzIHlvdQotICAgICAgICAgICAgICAgIGNoYW5nZSB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBvZiB0aGUgbWFjaGluZSB5b3UgYXJlIGJ1aWxkaW5nOgotICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgZm9yIHRoZSBjb3JyZWN0IHRhcmdldCBhcmNoaXRlY3R1cmU6PC9lbXBoYXNpcz4gWW91cgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbiB3aXRoaW4gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIHVzZWQgd2hlbiBidWlsZGluZyB0aGUgTGludXgga2VybmVsLgotICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPiBpcyBzZXQgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4sIHdoaWNoIHNwZWNpZmllcyBhIDMyLWJpdAotICAgICAgICAgICAgICAgICAgICAgICAgPHRyYWRlbWFyayBjbGFzcz0ncmVnaXN0ZXJlZCc+SW50ZWw8L3RyYWRlbWFyaz4gQXJjaGl0ZWN0dXJlCi0gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgbWFjaGluZSBzdWl0YWJsZSBmb3IgdGhlIFFFTVUgZW11bGF0b3IuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SWRlbnRpZnkgeW91ciA8ZmlsZW5hbWU+bWV0YS1teWxheWVyPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyOjwvZW1waGFzaXM+IFRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJCTEFZRVJTJz48ZmlsZW5hbWU+QkJMQVlFUlM8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSBmb3VuZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5L2J1aWxkL2NvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgbmVlZHMgdG8gaGF2ZSB0aGUgcGF0aCB0byB5b3VyIGxvY2FsCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1teWxheWVyPC9maWxlbmFtZT4gbGF5ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPkJCTEFZRVJTPC9maWxlbmFtZT4gdmFyaWFibGUgY29udGFpbnMgcGF0aHMgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5tZXRhLXBva3k8L2ZpbGVuYW1lPiwgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0by1ic3A8L2ZpbGVuYW1lPiBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkuCi0gICAgICAgICAgICAgICAgICAgICAgICBBZGQgdGhlIHBhdGggdG8geW91ciA8ZmlsZW5hbWU+bWV0YS1teWxheWVyPC9maWxlbmFtZT4gbG9jYXRpb246Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEJCTEFZRVJTID89ICIgXAotICAgICAgICRIT01FL3Bva3kvbWV0YSBcCi0gICAgICAgJEhPTUUvcG9reS9tZXRhLXBva3kgXAotICAgICAgICRIT01FL3Bva3kvbWV0YS15b2N0by1ic3AgXAotICAgICAgICRIT01FL3Bva3kvbWV0YS1teWxheWVyIFwKLSAgICAgICAiCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nYnVpbGQtdGhlLW1vZGlmaWVkLXFlbXUta2VybmVsLWltYWdlJz4KLSAgICAgICAgICAgIDx0aXRsZT5CdWlsZCB0aGUgTW9kaWZpZWQgUUVNVSBLZXJuZWwgSW1hZ2U8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN0ZXBzIGJ1aWxkIHlvdXIgbW9kaWZpZWQga2VybmVsIGltYWdlOgotICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CZSBzdXJlIHlvdXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgaW5pdGlhbGl6ZWQ8L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdXIgZW52aXJvbm1lbnQgc2hvdWxkIGJlIHNldCB1cCBzaW5jZSB5b3UgcHJldmlvdXNseSBzb3VyY2VkCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LgotICAgICAgICAgICAgICAgICAgICAgICAgSWYgaXQgaXMgbm90LCBzb3VyY2UgdGhlIHNjcmlwdCBhZ2FpbiBmcm9tIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgY2Qgfi9wb2t5Ci0gICAgICQgc291cmNlICZPRV9JTklUX0ZJTEU7Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DbGVhbiB1cDwvZW1waGFzaXM+OgotICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBjbGVhbiB0aGUgc2hhcmVkIHN0YXRlIG91dCBieSB1c2luZyBCaXRCYWtlCi0gICAgICAgICAgICAgICAgICAgICAgICB0byBydW4gZnJvbSB3aXRoaW4gdGhlIEJ1aWxkIERpcmVjdG9yeSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1jbGVhbnNzdGF0ZSc+PGZpbGVuYW1lPmRvX2NsZWFuc3N0YXRlPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgdGFzayBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGJpdGJha2UgLWMgY2xlYW5zc3RhdGUgbGludXgteW9jdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldmVyIHJlbW92ZSBhbnkgZmlsZXMgYnkgaGFuZCBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50bXAvZGVwbG95PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaW5zaWRlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgdXNlIHRoZSB2YXJpb3VzIEJpdEJha2UgY2xlYW4gdGFza3MgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhciBvdXQgcHJldmlvdXMgYnVpbGQgYXJ0aWZhY3RzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgY2xlYW4gdGFza3MsIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNsZWFuJz48ZmlsZW5hbWU+ZG9fY2xlYW48L2ZpbGVuYW1lPjwvdWxpbms+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNsZWFuYWxsJz48ZmlsZW5hbWU+ZG9fY2xlYW5hbGw8L2ZpbGVuYW1lPjwvdWxpbms+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNsZWFuc3N0YXRlJz48ZmlsZW5hbWU+ZG9fY2xlYW5zc3RhdGU8L2ZpbGVuYW1lPjwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zIGFsbCBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW51YWwuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCB0aGUgaW1hZ2U8L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICAgICAgICAgIE5leHQsIGJ1aWxkIHRoZSBrZXJuZWwgaW1hZ2UgdXNpbmcgdGhpcyBjb21tYW5kOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGJpdGJha2UgLWsgbGludXgteW9jdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2Jvb3QtdGhlLWltYWdlLWFuZC12ZXJpZnkteW91ci1jaGFuZ2VzJz4KLSAgICAgICAgICAgIDx0aXRsZT5Cb290IHRoZSBJbWFnZSBhbmQgVmVyaWZ5IFlvdXIgQ2hhbmdlczwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZXNlIHN0ZXBzIGJvb3QgdGhlIGltYWdlIGFuZCBhbGxvdyB5b3UgdG8gc2VlIHRoZSBjaGFuZ2VzCi0gICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJvb3QgdGhlIGltYWdlPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBCb290IHRoZSBtb2RpZmllZCBpbWFnZSBpbiB0aGUgUUVNVSBlbXVsYXRvcgotICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhpcyBjb21tYW5kOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIHJ1bnFlbXUgcWVtdXg4NgotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlZlcmlmeSB0aGUgY2hhbmdlczwvZW1waGFzaXM+OgotICAgICAgICAgICAgICAgICAgICAgICAgTG9nIGludG8gdGhlIG1hY2hpbmUgdXNpbmcgPGZpbGVuYW1lPnJvb3Q8L2ZpbGVuYW1lPiB3aXRoIG5vIHBhc3N3b3JkIGFuZCB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2UgdGhlIGZvbGxvd2luZyBzaGVsbCBjb21tYW5kIHRvIHNjcm9sbCB0aHJvdWdoIHRoZSBjb25zb2xlJ3MgYm9vdCBvdXRwdXQuCi0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICMgZG1lc2cgfCBsZXNzCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHNlZSB0aGUgcmVzdWx0cyBvZiB5b3VyIDxmaWxlbmFtZT5wcmludGs8L2ZpbGVuYW1lPiBzdGF0ZW1lbnRzCi0gICAgICAgICAgICAgICAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBvdXRwdXQuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgogICAgIDwvc2VjdGlvbj4KIAogICAgIDxzZWN0aW9uIGlkPSdtYWtpbmctaW1hZ2VzLW1vcmUtc2VjdXJlJz4KQEAgLTY4MTIsNyArNTk1MSw3IEBACiAgICAgICAgICAgICAgICAgVGhlIHNlY3VyaXR5IGZsYWdzIGFyZSBpbiB0aGUKICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3NlY3VyaXR5X2ZsYWdzLmluYzwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgICAgZmlsZSBpbiB5b3VyCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+KS4KICAgICAgICAgICAgICAgICA8bm90ZT4KICAgICAgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHRoZSByZWNpcGUsIGNlcnRhaW4gc2VjdXJpdHkgZmxhZ3MgYXJlIGVuYWJsZWQKQEAgLTY5MzIsOCArNjA3MSw4IEBACiAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgV2hlbiB5b3UgYnVpbGQgYW4gaW1hZ2UgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QgYW5kCiAgICAgICAgICAgICBkbyBub3QgYWx0ZXIgYW55IGRpc3RyaWJ1dGlvbgotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nbWV0YWRhdGEnPk1ldGFkYXRhPC9saW5rPiwgeW91IGFyZSBjcmVhdGluZyBhCi0gICAgICAgICAgICBQb2t5IGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+LAorICAgICAgICAgICAgeW91IGFyZSBjcmVhdGluZyBhIFBva3kgZGlzdHJpYnV0aW9uLgogICAgICAgICAgICAgSWYgeW91IHdpc2ggdG8gZ2FpbiBtb3JlIGNvbnRyb2wgb3ZlciBwYWNrYWdlIGFsdGVybmF0aXZlCiAgICAgICAgICAgICBzZWxlY3Rpb25zLCBjb21waWxlLXRpbWUgb3B0aW9ucywgYW5kIG90aGVyIGxvdy1sZXZlbAogICAgICAgICAgICAgY29uZmlndXJhdGlvbnMsIHlvdSBjYW4gY3JlYXRlIHlvdXIgb3duIGRpc3RyaWJ1dGlvbi4KQEAgLTY5NTYsNyArNjA5NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBtYWtlcyBpdCBlYXNpZXIgdG8gcmVwcm9kdWNlIHRoZSBzYW1lCiAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGNvbmZpZ3VyYXRpb24gd2hlbiB1c2luZyBtdWx0aXBsZSBidWlsZCBtYWNoaW5lcy4KICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQotICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3JlYXRpbmctYS1nZW5lcmFsLWxheWVyLXVzaW5nLXRoZS15b2N0by1sYXllci1zY3JpcHQnPkNyZWF0aW5nIGEgR2VuZXJhbCBMYXllciBVc2luZyB0aGUgeW9jdG8tbGF5ZXIgU2NyaXB0PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLWEtZ2VuZXJhbC1sYXllci11c2luZy10aGUtYml0YmFrZS1sYXllcnMtc2NyaXB0Jz5DcmVhdGluZyBhIEdlbmVyYWwgTGF5ZXIgVXNpbmcgdGhlIDxmaWxlbmFtZT5iaXRiYWtlLWxheWVyczwvZmlsZW5hbWU+IFNjcmlwdDwvbGluaz4iCiAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBxdWlja2x5IHNldCB1cCBhIGxheWVyLgogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZTo8L2VtcGhhc2lzPgpAQCAtNzAxOSw3ICs2MTU4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMgYnVsbGV0ZWQgaXRlbS48L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBvaW50IHRvIFlvdXIgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZTo8L2VtcGhhc2lzPgogICAgICAgICAgICAgICAgICAgICBJbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LAogICAgICAgICAgICAgICAgICAgICBzZXQgeW91cgogICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRElTVFJPJz48ZmlsZW5hbWU+RElTVFJPPC9maWxlbmFtZT48L3VsaW5rPgogICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBwb2ludCB0byB5b3VyIGRpc3RyaWJ1dGlvbidzIGNvbmZpZ3VyYXRpb24gZmlsZS4KQEAgLTcwNDQsNyArNjE4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gaG93IHRvIGFkZCByZWNpcGVzIHRvIHlvdXIgbGF5ZXIsIHNlZSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3JlYXRpbmcteW91ci1vd24tbGF5ZXInPkNyZWF0aW5nIFlvdXIgT3duIExheWVyPC9saW5rPiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYmVzdC1wcmFjdGljZXMtdG8tZm9sbG93LXdoZW4tY3JlYXRpbmctbGF5ZXJzJz5CZXN0IFByYWN0aWNlcyB0byBGb2xsb3cgV2hlbiBDcmVhdGluZyBMYXllcnM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdiZXN0LXByYWN0aWNlcy10by1mb2xsb3ctd2hlbi1jcmVhdGluZy1sYXllcnMnPkZvbGxvd2luZyBCZXN0IFByYWN0aWNlcyBXaGVuIENyZWF0aW5nIExheWVyczwvbGluaz4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMuPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkIGFueSBpbWFnZSByZWNpcGVzIHRoYXQgYXJlIHNwZWNpZmljCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8geW91ciBkaXN0cmlidXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CkBAIC03MDc5LDcgKzYyMTgsNyBAQAogICAgICAgICAgICAgPGZpbGVuYW1lPlRFTVBMQVRFQ09ORjwvZmlsZW5hbWU+IHRvIGxvY2F0ZSB0aGUgZGlyZWN0b3J5CiAgICAgICAgICAgICBmcm9tIHdoaWNoIGl0IGdhdGhlcnMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiB0aGF0IHVsdGltYXRlbHkKICAgICAgICAgICAgIGVuZHMgdXAgaW4gdGhlCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeSdzPC9saW5rPgorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgogICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCiAgICAgICAgICAgICBCeSBkZWZhdWx0LCA8ZmlsZW5hbWU+VEVNUExBVEVDT05GPC9maWxlbmFtZT4gaXMgc2V0IGFzCiAgICAgICAgICAgICBmb2xsb3dzIGluIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHJlcG9zaXRvcnk6CkBAIC03MTA2LDcgKzYyNDUsNyBAQAogICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5URU1QTEFURUNPTkY8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBzZXQgaW4gdGhlCiAgICAgICAgICAgICA8ZmlsZW5hbWU+LnRlbXBsYXRlY29uZjwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzIGluIHRoZQogICAgICAgICAgICAgdG9wLWxldmVsCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CiAgICAgICAgICAgICBmb2xkZXIgKGUuZy4gPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPikuCiAgICAgICAgICAgICBFZGl0IHRoZSA8ZmlsZW5hbWU+LnRlbXBsYXRlY29uZjwvZmlsZW5hbWU+IHNvIHRoYXQgaXQgY2FuIGxvY2F0ZQogICAgICAgICAgICAgeW91ciBkaXJlY3RvcnkuCkBAIC03MTM3LDEyICs2Mjc2LDEwIEBACiAgICAgICAgICAgICBBc2lkZSBmcm9tIHRoZSA8ZmlsZW5hbWU+Ki5zYW1wbGU8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGVzLAogICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5jb25mLW5vdGVzLnR4dDwvZmlsZW5hbWU+IGFsc28gcmVzaWRlcyBpbiB0aGUKICAgICAgICAgICAgIGRlZmF1bHQgPGZpbGVuYW1lPm1ldGEtcG9reS9jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5LgotICAgICAgICAgICAgVGhlIHNjcmlwdHMgdGhhdCBzZXQgdXAgdGhlIGJ1aWxkIGVudmlyb25tZW50CisgICAgICAgICAgICBUaGUgc2NyaXB0IHRoYXQgc2V0cyB1cCB0aGUgYnVpbGQgZW52aXJvbm1lbnQKICAgICAgICAgICAgIChpLmUuCi0gICAgICAgICAgICA8dWxpbmsgdXJsPSImWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQiPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgIGFuZAotICAgICAgICAgICAgPHVsaW5rIHVybD0iJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCI+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4pCi0gICAgICAgICAgICB1c2UgdGhpcyBmaWxlIHRvIGRpc3BsYXkgQml0QmFrZSB0YXJnZXRzIGFzIHBhcnQgb2YgdGhlIHNjcmlwdAorICAgICAgICAgICAgPHVsaW5rIHVybD0iJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Ij48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+KQorICAgICAgICAgICAgdXNlcyB0aGlzIGZpbGUgdG8gZGlzcGxheSBCaXRCYWtlIHRhcmdldHMgYXMgcGFydCBvZiB0aGUgc2NyaXB0CiAgICAgICAgICAgICBvdXRwdXQuCiAgICAgICAgICAgICBDdXN0b21pemluZyB0aGlzIDxmaWxlbmFtZT5jb25mLW5vdGVzLnR4dDwvZmlsZW5hbWU+IGZpbGUgaXMgYQogICAgICAgICAgICAgZ29vZCB3YXkgdG8gbWFrZSBzdXJlIHlvdXIgbGlzdCBvZiBjdXN0b20gdGFyZ2V0cyBhcHBlYXJzCkBAIC03Mjk2LDcgKzY0MzMsNyBAQAogICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgVG8gaGVscCB5b3Ugc2VlIHdoZXJlIHlvdSBjdXJyZW50bHkgYXJlIHdpdGgga2VybmVsIGFuZCByb290CiAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSBzaXplcywgeW91IGNhbiB1c2UgdHdvIHRvb2xzIGZvdW5kIGluIHRoZQotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+IGluCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+IGluCiAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5zY3JpcHRzL3RpbnkvPC9maWxlbmFtZT4gZGlyZWN0b3J5OgogICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CiAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+a3NpemUucHk8L2ZpbGVuYW1lPjogUmVwb3J0cwpAQCAtNzMyOCwxMCArNjQ2NSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHMva2NvbmZpZzwvZmlsZW5hbWU+IGRpcmVjdG9yeS48L3BhcmE+CiAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmF0aW9uIGZyYWdtZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsjZ2VuZXJhdGluZy1jb25maWd1cmF0aW9uLWZpbGVzJz5HZW5lcmF0aW5nIENvbmZpZ3VyYXRpb24gRmlsZXM8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICBNYW51YWwgYW5kIHRoZSAiPGxpbmsgbGlua2VuZD0nY3JlYXRpbmctY29uZmlnLWZyYWdtZW50cyc+Q3JlYXRpbmcgQ29uZmlndXJhdGlvbiBGcmFnbWVudHM8L2xpbms+IgotICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiwgd2hpY2ggaXMgaW4gdGhpcyBtYW51YWwuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I2NyZWF0aW5nLWNvbmZpZy1mcmFnbWVudHMnPkNyZWF0aW5nIENvbmZpZ3VyYXRpb24gRnJhZ21lbnRzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Yml0YmFrZSAtdSB0YXNrZXhwIC1nIDxyZXBsYWNlYWJsZT5iaXRiYWtlX3RhcmdldDwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT46CiAgICAgICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGUgQml0QmFrZSBjb21tYW5kIHdpdGggdGhlc2Ugb3B0aW9ucyBicmluZ3MgdXAKICAgICAgICAgICAgICAgICAgICAgICAgIGEgRGVwZW5kZW5jeSBFeHBsb3JlciBmcm9tIHdoaWNoIHlvdSBjYW4gdmlldyBmaWxlCkBAIC03OTU3LDcgKzcwOTQsNyBAQAogCiAgICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIEFzIG1lbnRpb25lZCwgYXR0ZW1wdGluZyB0byBtYWludGFpbiByZXZpc2lvbiBudW1iZXJzIGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPgogICAgICAgICAgICAgICAgICAgICBpcyBlcnJvciBwcm9uZSwgaW5hY2N1cmF0ZSwgYW5kIGNhdXNlcyBwcm9ibGVtcyBmb3IgcGVvcGxlCiAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdHRpbmcgcmVjaXBlcy4KICAgICAgICAgICAgICAgICAgICAgQ29udmVyc2VseSwgdGhlIFBSIFNlcnZpY2UgYXV0b21hdGljYWxseSBnZW5lcmF0ZXMKQEAgLTgwMzIsNyArNzE2OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNldHRpbmcKICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBSU0VSVl9IT1NUJz48ZmlsZW5hbWU+UFJTRVJWX0hPU1Q8L2ZpbGVuYW1lPjwvdWxpbms+CiAgICAgICAgICAgICAgICAgICAgIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+OgogICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgIFBSU0VSVl9IT1NUID0gImxvY2FsaG9zdDowIgogICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CkBAIC04MzMzLDcgKzc0NzAsNyBAQAogICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29ubm1hbi5pbmM8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQogICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuLzwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBvZiB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd5b2N0by1wcm9qZWN0LXJlcG9zaXRvcmllcyc+c291cmNlIHJlcG9zaXRvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN5b2N0by1wcm9qZWN0LXJlcG9zaXRvcmllcyc+c291cmNlIHJlcG9zaXRvcnk8L3VsaW5rPi4KICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGZpbmQgZXhhbXBsZXMgaW4KICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY2xhc3Nlcy9rZXJuZWwuYmJjbGFzczwvZmlsZW5hbWU+LgogICAgICAgICAgICAgICAgICA8L3BhcmE+CkBAIC04NTY4LDcgKzc3MDUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wZW4gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2lkZSB5b3VyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5+L3Bva3kvYnVpbGQvY29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4pLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgpAQCAtODczOCw3ICs3ODc1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgd2l0aCB0aGUgZm9sbG93aW5nIGNvbnRlbnQ6CiAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgIFtvZS1wYWNrYWdlc10KLSAgICAgYmFzZXVybD0iaHR0cDovL215LnNlcnZlci9ycG0vaTU4NiBodHRwOi8vbXkuc2VydmVyL3JwbS9xZW11eDg2IGh0dHA6Ly9teS5zZXJ2ZXIvcnBtL2FsbCIKKyAgICAgYmFzZXVybD1odHRwOi8vbXkuc2VydmVyL3JwbS9pNTg2IGh0dHA6Ly9teS5zZXJ2ZXIvcnBtL3FlbXV4ODYgaHR0cDovL215LnNlcnZlci9ycG0vYWxsCiAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgICAgICAgICBGcm9tIHRoZSB0YXJnZXQgbWFjaGluZSwgZmV0Y2ggdGhlIHJlcG9zaXRvcnk6CiAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CkBAIC04OTIwLDEzICs4MDU3LDEwIEBACiAKICAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgICAgSW4gYWRkaXRpb24gdG8gYmVpbmcgYWJsZSB0byBzaWduIFJQTSBwYWNrYWdlcywgeW91IGNhbgotICAgICAgICAgICAgICAgICAgICBhbHNvIGVuYWJsZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBiZSBhYmxlIHRvCi0gICAgICAgICAgICAgICAgICAgIGhhbmRsZSBwcmV2aW91c2x5IHNpZ25lZCBwYWNrYWdlIGZlZWRzIGZvciBJUEsKLSAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMuCi0gICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZG9lcyBub3QgY3VycmVudGx5Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IHNpZ25lZCBEUEtHIG9yIFJQTSBwYWNrYWdlIGZlZWRzLgotICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIGFsc28gZW5hYmxlIHNpZ25lZCBwYWNrYWdlIGZlZWRzIGZvciBJUEsgYW5kIFJQTSBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgICAgVGhlIHN0ZXBzIHlvdSBuZWVkIHRvIHRha2UgdG8gZW5hYmxlIHNpZ25lZCBwYWNrYWdlIGZlZWQKICAgICAgICAgICAgICAgICAgICAgdXNlIGFyZSBzaW1pbGFyIHRvIHRoZSBzdGVwcyB1c2VkIHRvIHNpZ24gUlBNIHBhY2thZ2VzLgogICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBkZWZpbmUgdGhlIGZvbGxvd2luZyBpbiB5b3VyCkBAIC05MDI2LDcgKzgxNjAsNyBAQAogICAgICAgICAgICAgICAgICAgICBhbmQgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVFJBX0lNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+CiAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB0byB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSwKICAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgZm91bmQgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPjoKICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICBESVNUUk9fRkVBVFVSRVNfYXBwZW5kID0gIiBwdGVzdCIKICAgICAgRVhUUkFfSU1BR0VfRkVBVFVSRVMgKz0gInB0ZXN0LXBrZ3MiCkBAIC05MjYyLDggKzgzOTYsOCBAQAogCiAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPiB3aGVuCi0gICAgICAgICAgICBidWlsZGluZyBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgc291cmNlIGNvZGUuCiAgICAgICAgICAgICBUaGUgYnVpbGQgcHJvY2VzcyBpbnZvbHZlcyBmZXRjaGluZyB0aGUgc291cmNlIGZpbGVzLCB1bnBhY2tpbmcKICAgICAgICAgICAgIHRoZW0sIGFuZCB0aGVuIHBhdGNoaW5nIHRoZW0gaWYgbmVjZXNzYXJ5IGJlZm9yZSB0aGUgYnVpbGQgdGFrZXMKICAgICAgICAgICAgIHBsYWNlLgpAQCAtOTYyNyw3ICs4NzYxLDcgQEAKICAgICAgICAgICAgICAgICBVc2luZyBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnRzIGluIHlvdXIKICAgICAgICAgICAgICAgICBpbWFnZSByZWNpcGUgb3IgZnJvbSB3aXRoaW4gdGhlCiAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvdW5kIGluIHRoZQotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KICAgICAgICAgICAgICAgICBjYXVzZXMgdGhlIGJ1aWxkIHN5c3RlbSB0byBjcmVhdGUgYSByZWFkLW9ubHkgcm9vdCBmaWxlc3lzdGVtOgogICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgSU1BR0VfRkVBVFVSRVMgPSAicmVhZC1vbmx5LXJvb3RmcyIKQEAgLTEwMjIxLDcgKzkzNTUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRFU1RfSU1BR0UnPjxmaWxlbmFtZT5URVNUX0lNQUdFPC9maWxlbmFtZT48L3VsaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gIjEiIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+OgogICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICBURVNUX0lNQUdFID0gIjEiCiAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CkBAIC0xMDI0OSw3ICs5MzgzLDcgQEAKICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgIEFsbCB0ZXN0IGZpbGVzIHJlc2lkZSBpbgogICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2xpYi9vZXFhL3J1bnRpbWU8L2ZpbGVuYW1lPiBpbiB0aGUKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCiAgICAgICAgICAgICAgICAgQSB0ZXN0IG5hbWUgbWFwcyBkaXJlY3RseSB0byBhIFB5dGhvbiBtb2R1bGUuCiAgICAgICAgICAgICAgICAgRWFjaCB0ZXN0IG1vZHVsZSBtYXkgY29udGFpbiBhIG51bWJlciBvZiBpbmRpdmlkdWFsIHRlc3RzLgogICAgICAgICAgICAgICAgIFRlc3RzIGFyZSB1c3VhbGx5IGdyb3VwZWQgdG9nZXRoZXIgYnkgdGhlIGFyZWEKQEAgLTEwMzUzLDcgKzk0ODcsOCBAQAogICAgICAkIGJpdGJha2UgPHJlcGxhY2VhYmxlPmltYWdlPC9yZXBsYWNlYWJsZT4gLWMgdGVzdGV4cG9ydAogICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICBFeHBvcnRpbmcgdGhlIHRlc3RzIHBsYWNlcyB0aGVtIGluIHRoZQotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPiBpbgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICBpbgogICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50bXAvdGVzdGV4cG9ydC88L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5pbWFnZTwvcmVwbGFjZWFibGU+LAogICAgICAgICAgICAgICAgIHdoaWNoIGlzIGNvbnRyb2xsZWQgYnkgdGhlCiAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRFU1RfRVhQT1JUX0RJUjwvZmlsZW5hbWU+IHZhcmlhYmxlLgpAQCAtMTA4OTMsMTgyICsxMDAyOCw2IEBACiAgICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3Rpb24+CiAKLTwhLS0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J3BsYXRkZXYtZ2RiLXJlbW90ZWRlYnVnLXNldHVwJz4KLSAgICAgICAgICAgIDx0aXRsZT5TZXQgVXAgdGhlIENyb3NzLURldmVsb3BtZW50IERlYnVnZ2luZyBFbnZpcm9ubWVudDwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEJlZm9yZSB5b3UgY2FuIGluaXRpYXRlIGEgcmVtb3RlIGRlYnVnZ2luZyBzZXNzaW9uLCB5b3UgbmVlZAotICAgICAgICAgICAgICAgIHRvIGJlIHN1cmUgeW91IGhhdmUgc2V0IHVwIHRoZSBjcm9zcy1kZXZlbG9wbWVudCBlbnZpcm9ubWVudCwKLSAgICAgICAgICAgICAgICB0b29sY2hhaW4sIGFuZCBzeXNyb290LgotICAgICAgICAgICAgICAgIFRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyNzZGstaW50cm8nPllvY3RvIFByb2plY3QgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4KLSAgICAgICAgICAgICAgICBkZXNjcmliZXMgdGhpcyBwcm9jZXNzLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9InBsYXRkZXYtZ2RiLXJlbW90ZWRlYnVnLWxhdW5jaC1nZGJzZXJ2ZXIiPgotICAgICAgICAgICAgPHRpdGxlPkxhdW5jaCBnZGJzZXJ2ZXIgb24gdGhlIFRhcmdldDwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIE1ha2Ugc3VyZSBnZGJzZXJ2ZXIgaXMgaW5zdGFsbGVkIG9uIHRoZSB0YXJnZXQuCi0gICAgICAgICAgICAgICAgSWYgaXQgaXMgbm90LCBpbnN0YWxsIHRoZSBwYWNrYWdlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdkYnNlcnZlcjwvZmlsZW5hbWU+LCB3aGljaCBuZWVkcyB0aGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlidGhyZWFkLWRiMTwvZmlsZW5hbWU+IHBhY2thZ2UuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSwgdGhhdCB3aGVuIGVudGVyZWQgZnJvbSB0aGUgaG9zdCwKLSAgICAgICAgICAgICAgICBjb25uZWN0cyB0byB0aGUgdGFyZ2V0IGFuZCBsYXVuY2hlcyBnZGJzZXJ2ZXIgaW4gb3JkZXIgdG8KLSAgICAgICAgICAgICAgICAiZGVidWciIGEgYmluYXJ5IG5hbWVkIDxmaWxlbmFtZT5oZWxsb3dvcmxkPC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGdkYnNlcnZlciBsb2NhbGhvc3Q6MjM0NSAvdXNyL2Jpbi9oZWxsb3dvcmxkCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIGdkYnNlcnZlciBzaG91bGQgbm93IGJlIGxpc3RlbmluZyBvbiBwb3J0IDIzNDUgZm9yIGRlYnVnZ2luZwotICAgICAgICAgICAgICAgIGNvbW1hbmRzIGNvbWluZyBmcm9tIGEgcmVtb3RlIEdEQiBwcm9jZXNzIHRoYXQgaXMgcnVubmluZyBvbgotICAgICAgICAgICAgICAgIHRoZSBob3N0IGNvbXB1dGVyLgotICAgICAgICAgICAgICAgIENvbW11bmljYXRpb24gYmV0d2VlbiBnZGJzZXJ2ZXIgYW5kIHRoZSBob3N0IEdEQiBhcmUgZG9uZQotICAgICAgICAgICAgICAgIHVzaW5nIFRDUC4KLSAgICAgICAgICAgICAgICBUbyB1c2Ugb3RoZXIgY29tbXVuaWNhdGlvbiBwcm90b2NvbHMsIHBsZWFzZSByZWZlciB0byB0aGUKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2RiLyc+R2Ric2VydmVyIGRvY3VtZW50YXRpb248L3VsaW5rPi4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LWdkYi1yZW1vdGVkZWJ1Zy1sYXVuY2gtZ2RiIj4KLSAgICAgICAgICAgIDx0aXRsZT5MYXVuY2ggR0RCIG9uIHRoZSBIb3N0IENvbXB1dGVyPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgUnVubmluZyBHREIgb24gdGhlIGhvc3QgY29tcHV0ZXIgdGFrZXMgYSBudW1iZXIgb2Ygc3RhZ2VzLCB3aGljaAotICAgICAgICAgICAgICAgIHRoaXMgc2VjdGlvbiBkZXNjcmliZXMuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LWdkYi1yZW1vdGVkZWJ1Zy1sYXVuY2gtZ2RiLWJ1aWxkY3Jvc3MiPgotICAgICAgICAgICAgICAgIDx0aXRsZT5CdWlsZCB0aGUgQ3Jvc3MtR0RCIFBhY2thZ2U8L3RpdGxlPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBBIHN1aXRhYmxlIEdEQiBjcm9zcy1iaW5hcnkgaXMgcmVxdWlyZWQgdGhhdCBydW5zIG9uIHlvdXIKLSAgICAgICAgICAgICAgICAgICAgaG9zdCBjb21wdXRlciBidXQgYWxzbyBrbm93cyBhYm91dCB0aGUgdGhlIEFCSSBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgcmVtb3RlIHRhcmdldC4KLSAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBnZXQgdGhpcyBiaW5hcnkgZnJvbSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluJz5Dcm9zcy1EZXZlbG9wbWVudCBUb29sY2hhaW48L2xpbms+LgotICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgd2hlcmUgdGhlIHRvb2xjaGFpbiBoYXMgYmVlbiBpbnN0YWxsZWQKLSAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGRlZmF1bHQgZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vb3B0L3Bva3kvJkRJU1RSTzs8L2ZpbGVuYW1lPjoKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAvb3B0L3Bva3kvJkRJU1RSTzsvc3lzcm9vdHMvaTY4Ni1wb2t5c2RrLWxpbnV4L3Vzci9iaW4vYXJtdjdhLXZmcC1uZW9uLXBva3ktbGludXgtZ251ZWFiaS9hcm0tcG9reS1saW51eC1nbnVlYWJpLWdkYgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIHdoZXJlIDxmaWxlbmFtZT5hcm08L2ZpbGVuYW1lPiBpcyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZQotICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmxpbnV4LWdudWVhYmk8L2ZpbGVuYW1lPiBpcyB0aGUgdGFyZ2V0IEFCSS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgQml0QmFrZSB0byBidWlsZCB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdkYi1jcm9zczwvZmlsZW5hbWU+IGJpbmFyeS4KLSAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgYml0YmFrZSBnZGItY3Jvc3MKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBiaW5hcnkgaXMgYnVpbHQsIHlvdSBjYW4gZmluZCBpdCBoZXJlOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIHRtcC9zeXNyb290cy88cmVwbGFjZWFibGU+aG9zdC1hcmNoPC9yZXBsYWNlYWJsZT4vdXNyL2Jpbi88cmVwbGFjZWFibGU+dGFyZ2V0LXBsYXRmb3JtPC9yZXBsYWNlYWJsZT4vPHJlcGxhY2VhYmxlPnRhcmdldC1hYmk8L3JlcGxhY2VhYmxlPi1nZGIKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0ZS10aGUtZ2RiLWluaXRpYWxpemF0aW9uLWZpbGUnPgotICAgICAgICAgICAgICAgIDx0aXRsZT5DcmVhdGUgdGhlIEdEQiBJbml0aWFsaXphdGlvbiBGaWxlIGFuZCBQb2ludCB0byBZb3VyIFJvb3QgRmlsZXN5c3RlbTwvdGl0bGU+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgQXNpZGUgZnJvbSB0aGUgR0RCIGNyb3NzLWJpbmFyeSwgeW91IGFsc28gbmVlZCBhIEdEQgotICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXphdGlvbiBmaWxlIGluIHRoZSBzYW1lIHRvcCBkaXJlY3RvcnkgaW4gd2hpY2gKLSAgICAgICAgICAgICAgICAgICAgeW91ciBiaW5hcnkgcmVzaWRlcy4KLSAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3Ugc3RhcnQgR0RCIG9uIHlvdXIgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0sIEdEQgotICAgICAgICAgICAgICAgICAgICBmaW5kcyB0aGlzIGluaXRpYWxpemF0aW9uIGZpbGUgYW5kIGV4ZWN1dGVzIGFsbCB0aGUKLSAgICAgICAgICAgICAgICAgICAgY29tbWFuZHMgd2l0aGluLgotICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIDxmaWxlbmFtZT4uZ2RiaW5pdDwvZmlsZW5hbWU+LCBzZWUKLSAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9J2h0dHA6Ly9zb3VyY2V3YXJlLm9yZy9nZGIvb25saW5lZG9jcy9nZGIvJz5EZWJ1Z2dpbmcgd2l0aCBHREI8L3VsaW5rPiIsCi0gICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIG1haW50YWluZWQgYnkKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5zb3VyY2V3YXJlLm9yZyc+c291cmNld2FyZS5vcmc8L3VsaW5rPi4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gYWRkIGEgc3RhdGVtZW50IGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+fi8uZ2RiaW5pdDwvZmlsZW5hbWU+IGZpbGUgdGhhdCBwb2ludHMgdG8geW91cgotICAgICAgICAgICAgICAgICAgICByb290IGZpbGVzeXN0ZW0uCi0gICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHBvaW50cyB0byB0aGUgcm9vdCBmaWxlc3lzdGVtIGZvcgotICAgICAgICAgICAgICAgICAgICBhbiBBUk0tYmFzZWQgdGFyZ2V0IGRldmljZToKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBzZXQgc3lzcm9vdCB+L3N5c3Jvb3RfYXJtCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LWdkYi1yZW1vdGVkZWJ1Zy1sYXVuY2gtZ2RiLWxhdW5jaGhvc3QiPgotICAgICAgICAgICAgICAgIDx0aXRsZT5MYXVuY2ggdGhlIEhvc3QgR0RCPC90aXRsZT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBCZWZvcmUgbGF1bmNoaW5nIHRoZSBob3N0IEdEQiwgeW91IG5lZWQgdG8gYmUgc3VyZQotICAgICAgICAgICAgICAgICAgICB5b3UgaGF2ZSBzb3VyY2VkIHRoZSBjcm9zcy1kZWJ1Z2dpbmcgZW52aXJvbm1lbnQgc2NyaXB0LAotICAgICAgICAgICAgICAgICAgICB3aGljaCBpZiB5b3UgaW5zdGFsbGVkIHRoZSByb290IGZpbGVzeXN0ZW0gaW4gdGhlIGRlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gaXMgYXQgPGZpbGVuYW1lPi9vcHQvcG9reS8mRElTVFJPOzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIGFuZCBiZWdpbnMgd2l0aCB0aGUgc3RyaW5nICJlbnZpcm9ubWVudC1zZXR1cCIuCi0gICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1NES19VUkw7I3Nkay1tYW51YWwnPllvY3RvIFByb2plY3QgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspIERldmVsb3BlcidzCi0gICAgICAgICAgICAgICAgICAgIEd1aWRlPC91bGluaz4uCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEZpbmFsbHksIHN3aXRjaCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBiaW5hcnkgcmVzaWRlcwotICAgICAgICAgICAgICAgICAgICBhbmQgcnVuIHRoZSA8ZmlsZW5hbWU+Y3Jvc3MtZ2RiPC9maWxlbmFtZT4gYmluYXJ5LgotICAgICAgICAgICAgICAgICAgICBQcm92aWRlIHRoZSBiaW5hcnkgZmlsZSB5b3UgYXJlIGdvaW5nIHRvIGRlYnVnLgotICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21tYW5kIGNvbnRpbnVlcyB3aXRoIHRoZQotICAgICAgICAgICAgICAgICAgICBleGFtcGxlIHVzZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24gYnkgbG9hZGluZwotICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmhlbGxvd29ybGQ8L2ZpbGVuYW1lPiBiaW5hcnkgYXMgd2VsbCBhcyB0aGUKLSAgICAgICAgICAgICAgICAgICAgZGVidWdnaW5nIGluZm9ybWF0aW9uOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgYXJtLXBva3ktbGludXgtZ251YWJpLWdkYiBoZWxsb3dvcmxkCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGNvbW1hbmRzIGluIHlvdXIgPGZpbGVuYW1lPi5nZGJpbml0PC9maWxlbmFtZT4gZXhlY3V0ZQotICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIEdEQiBwcm9tcHQgYXBwZWFycy4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L3NlY3Rpb24+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0ncGxhdGRldi1nZGItY29ubmVjdC10by10aGUtcmVtb3RlLWdkYi1zZXJ2ZXInPgotICAgICAgICAgICAgPHRpdGxlPkNvbm5lY3QgdG8gdGhlIFJlbW90ZSBHREIgU2VydmVyPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgRnJvbSB0aGUgdGFyZ2V0LCB5b3UgbmVlZCB0byBjb25uZWN0IHRvIHRoZSByZW1vdGUgR0RCCi0gICAgICAgICAgICAgICAgc2VydmVyIHRoYXQgaXMgcnVubmluZyBvbiB0aGUgaG9zdC4KLSAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBzcGVjaWZ5IHRoZSByZW1vdGUgaG9zdCBhbmQgcG9ydC4KLSAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBjb21tYW5kIGNvbnRpbnVpbmcgd2l0aCB0aGUgZXhhbXBsZToKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIHRhcmdldCByZW1vdGUgMTkyLjE2OC43LjI6MjM0NQotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LWdkYi1yZW1vdGVkZWJ1Zy1sYXVuY2gtZ2RiLXVzaW5nIj4KLSAgICAgICAgICAgIDx0aXRsZT5Vc2UgdGhlIERlYnVnZ2VyPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgWW91IGNhbiBub3cgcHJvY2VlZCB3aXRoIGRlYnVnZ2luZyBhcyBub3JtYWwgLSBhcyBpZiB5b3Ugd2VyZSBkZWJ1Z2dpbmcKLSAgICAgICAgICAgICAgICBvbiB0aGUgbG9jYWwgbWFjaGluZS4KLSAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdG8gaW5zdHJ1Y3QgR0RCIHRvIGJyZWFrIGluIHRoZSAibWFpbiIgZnVuY3Rpb24gYW5kIHRoZW4KLSAgICAgICAgICAgICAgICBjb250aW51ZSB3aXRoIGV4ZWN1dGlvbiBvZiB0aGUgaW5mZXJpb3IgYmluYXJ5IHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzCi0gICAgICAgICAgICAgICAgZnJvbSB3aXRoaW4gR0RCOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgKGdkYikgYnJlYWsgbWFpbgotICAgICAoZ2RiKSBjb250aW51ZQotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgR0RCLCBzZWUgdGhlIHByb2plY3QncyBvbmxpbmUgZG9jdW1lbnRhdGlvbiBhdAotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9nZGIvZG93bmxvYWQvb25saW5lZG9jcy8iLz4uCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLSAgICA8L3NlY3Rpb24+Ci0tLT4KLQogICAgIDxzZWN0aW9uIGlkPSdkZWJ1Z2dpbmctd2l0aC10aGUtZ251LXByb2plY3QtZGVidWdnZXItZ2RiLW9uLXRoZS10YXJnZXQnPgogICAgICAgICA8dGl0bGU+RGVidWdnaW5nIHdpdGggdGhlIEdOVSBQcm9qZWN0IERlYnVnZ2VyIChHREIpIG9uIHRoZSBUYXJnZXQ8L3RpdGxlPgogCkBAIC0xMTM0Nyw3ICsxMDMwNiw3IEBACiAgICAgICAgICAgICAgICAgT25jZSB0aGUgcGF0Y2ggZmlsZSBleGlzdHMsIHlvdSBuZWVkIHRvIGFkZCBpdCBiYWNrIHRvIHRoZQogICAgICAgICAgICAgICAgIG9yaWdpbmF0aW5nIHJlY2lwZSBmb2xkZXIuCiAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGFzc3VtaW5nIGEgdG9wLWxldmVsCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KICAgICAgICAgICAgICAgICBuYW1lZCA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+OgogICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgJCBjcCBwYXRjaGVzL3BhcmFsbGVsbWFrZS5wYXRjaCBwb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQKQEAgLTExNDA3LDcgKzEwMzY2LDcgQEAKICAgICAgICAgICAgICAgICBuZWVkIHRvIHN1Ym1pdCB0aGUgZml4IGZvciB0aGUgcmVjaXBlIGluIE9FLUNvcmUgYW5kIHVwc3RyZWFtCiAgICAgICAgICAgICAgICAgc28gdGhhdCB0aGUgcHJvYmxlbSBpcyB0YWtlbiBjYXJlIG9mIGF0IGl0cyBzb3VyY2UuCiAgICAgICAgICAgICAgICAgU2VlIHRoZQotICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdob3ctdG8tc3VibWl0LWEtY2hhbmdlJz5Ib3cgdG8gU3VibWl0IGEgQ2hhbmdlPC9saW5rPiIKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0naG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+U3VibWl0dGluZyBhIENoYW5nZSB0byB0aGUgWW9jdG8gUHJvamVjdDwvbGluaz4iCiAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9zZWN0aW9uPgpAQCAtMTE1MTAsNyArMTA0NjksNyBAQAogICAgICAgICAgICAgICAgIHJlbGVhc2UganVzdCB0aGUgc291cmNlIGFzIGEgdGFyYmFsbC4KICAgICAgICAgICAgICAgICBZb3UgY2FuIGRvIHRoaXMgYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcgdG8gdGhlCiAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvdW5kIGluIHRoZQotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPjoKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+OgogICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgSU5IRVJJVCArPSAiYXJjaGl2ZXIiCiAgICAgIEFSQ0hJVkVSX01PREVbc3JjXSA9ICJvcmlnaW5hbCIKQEAgLTExNjc4LDggKzEwNjM3LDggQEAKICAgICAgICAiCiAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgICAgIENyZWF0aW5nIGFuZCBwcm92aWRpbmcgYW4gYXJjaGl2ZSBvZiB0aGUKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdtZXRhZGF0YSc+TWV0YWRhdGE8L2xpbms+IGxheWVycwotICAgICAgICAgICAgICAgIChyZWNpcGVzLCBjb25maWd1cmF0aW9uIGZpbGVzLCBhbmQgc28gZm9ydGgpCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KKyAgICAgICAgICAgICAgICBsYXllcnMgKHJlY2lwZXMsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCBzbyBmb3J0aCkKICAgICAgICAgICAgICAgICBlbmFibGVzIHlvdSB0byBtZWV0IHlvdXIKICAgICAgICAgICAgICAgICByZXF1aXJlbWVudHMgdG8gaW5jbHVkZSB0aGUgc2NyaXB0cyB0byBjb250cm9sIGNvbXBpbGF0aW9uCiAgICAgICAgICAgICAgICAgYXMgd2VsbCBhcyBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGUgb3JpZ2luYWwgc291cmNlLgpAQCAtMTE2OTcsNyArMTA2NTYsNyBAQAogICAgICAgICAgICAgYnJvd3NlIGVycm9ycywgdmlldyBzdGF0aXN0aWNzLCBhbmQgcXVlcnkgZm9yIGVycm9ycy4KICAgICAgICAgICAgIFRoZSB0b29sIHdvcmtzIHVzaW5nIGEgY2xpZW50LXNlcnZlciBzeXN0ZW0gd2hlcmUgdGhlIGNsaWVudAogICAgICAgICAgICAgcG9ydGlvbiBpcyBpbnRlZ3JhdGVkIHdpdGggdGhlIGluc3RhbGxlZCBZb2N0byBQcm9qZWN0Ci0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CiAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+KS4KICAgICAgICAgICAgIFRoZSBzZXJ2ZXIgcmVjZWl2ZXMgdGhlIGluZm9ybWF0aW9uIGNvbGxlY3RlZCBhbmQgc2F2ZXMgaXQgaW4gYQogICAgICAgICAgICAgZGF0YWJhc2UuCkBAIC0xMTcyNSw3ICsxMDY4NCw3IEBACiAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtcmVwb3J0LWVycm9yJz48ZmlsZW5hbWU+cmVwb3J0LWVycm9yPC9maWxlbmFtZT48L3VsaW5rPgogICAgICAgICAgICAgICAgIGNsYXNzIGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nIHN0YXRlbWVudCB0byB0aGUgZW5kIG9mCiAgICAgICAgICAgICAgICAgeW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4geW91cgotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgogICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgSU5IRVJJVCArPSAicmVwb3J0LWVycm9yIgogICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KQEAgLTExNzg0LDcgKzEwNzQzLDcgQEAKICAgICAgICAgICAgICAgICBUbyBkaXNhYmxlIHRoZSBlcnJvciByZXBvcnRpbmcgZmVhdHVyZSwgc2ltcGx5IHJlbW92ZSBvciBjb21tZW50CiAgICAgICAgICAgICAgICAgb3V0IHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50IGZyb20gdGhlIGVuZCBvZiB5b3VyCiAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHlvdXIKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgIElOSEVSSVQgKz0gInJlcG9ydC1lcnJvciIKICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtaW50cm8ueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLWludHJvLnhtbAppbmRleCA0OTE0OGFiLi40N2M4MDA2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtaW50cm8ueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1pbnRyby54bWwKQEAgLTQsMTAyICs0LDczIEBACiAKIDxjaGFwdGVyIGlkPSdkZXYtbWFudWFsLWludHJvJz4KIAotPHRpdGxlPlRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbDwvdGl0bGU+Ci0gICAgPHNlY3Rpb24gaWQ9J2Rldi1pbnRybyc+Ci0gICAgICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorPHRpdGxlPlRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbDwvdGl0bGU+CisgICAgPHNlY3Rpb24gaWQ9J2Rldi13ZWxjb21lJz4KKyAgICAgICAgPHRpdGxlPldlbGNvbWU8L3RpdGxlPgogCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgV2VsY29tZSB0byB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwhCi0gICAgICAgICAgICBUaGlzIG1hbnVhbCBwcm92aWRlcyBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZSBZb2N0byBQcm9qZWN0IHRvCi0gICAgICAgICAgICBkZXZlbG9wIGVtYmVkZGVkIExpbnV4IGltYWdlcyBhbmQgdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMgdGhhdAotICAgICAgICAgICAgcnVuIG9uIHRhcmdldGVkIGRldmljZXMuCi0gICAgICAgICAgICBUaGUgbWFudWFsIHByb3ZpZGVzIGFuIG92ZXJ2aWV3IG9mIGltYWdlLCBrZXJuZWwsIGFuZAotICAgICAgICAgICAgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdC4KLSAgICAgICAgICAgIEJlY2F1c2UgbXVjaCBvZiB0aGUgaW5mb3JtYXRpb24gaW4gdGhpcyBtYW51YWwgaXMgZ2VuZXJhbCwgaXQKLSAgICAgICAgICAgIGNvbnRhaW5zIG1hbnkgcmVmZXJlbmNlcyB0byBvdGhlciBzb3VyY2VzIHdoZXJlIHlvdSBjYW4gZmluZCBtb3JlCi0gICAgICAgICAgICBkZXRhaWwuCi0gICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNhbiBmaW5kIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIEdpdCwgcmVwb3NpdG9yaWVzLAotICAgICAgICAgICAgYW5kIG9wZW4gc291cmNlIGluIGdlbmVyYWwgaW4gbWFueSBwbGFjZXMgb24gdGhlIEludGVybmV0LgotICAgICAgICAgICAgQW5vdGhlciBleGFtcGxlIHNwZWNpZmljIHRvIHRoZSBZb2N0byBQcm9qZWN0IGlzIGhvdyB0byBxdWlja2x5Ci0gICAgICAgICAgICBzZXQgdXAgeW91ciBob3N0IGRldmVsb3BtZW50IHN5c3RlbSBhbmQgYnVpbGQgYW4gaW1hZ2UsIHdoaWNoIHlvdQotICAgICAgICAgICAgZmluZCBpbiB0aGUKLSAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsnPllvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQ8L3VsaW5rPi4KKyAgICAgICAgICAgIFdlbGNvbWUgdG8gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsIQorICAgICAgICAgICAgVGhpcyBtYW51YWwgcHJvdmlkZXMgcmVsZXZhbnQgcHJvY2VkdXJlcyBuZWNlc3NhcnkgZm9yIGRldmVsb3BpbmcKKyAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IGVudmlyb25tZW50IChpLmUuIGRldmVsb3BpbmcgZW1iZWRkZWQgTGludXgKKyAgICAgICAgICAgIGltYWdlcyBhbmQgdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMgdGhhdCBydW4gb24gdGFyZ2V0ZWQgZGV2aWNlcykuCisgICAgICAgICAgICBUaGUgbWFudWFsIGdyb3VwcyByZWxhdGVkIHByb2NlZHVyZXMgaW50byBoaWdoZXItbGV2ZWwgc2VjdGlvbnMuCisgICAgICAgICAgICBQcm9jZWR1cmVzIGNhbiBjb25zaXN0IG9mIGhpZ2gtbGV2ZWwgc3RlcHMgb3IgbG93LWxldmVsIHN0ZXBzCisgICAgICAgICAgICBkZXBlbmRpbmcgb24gdGhlIHRvcGljLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGNvbmNlcHR1YWwgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBhIHByb2NlZHVyZSBieQorICAgICAgICAgICAgZm9sbG93aW5nIGFwcHJvcHJpYXRlIGxpbmtzIHRvIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZQorICAgICAgICAgICAgTWFudWFsLgogICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgZG9lcywgaG93ZXZlciwgcHJvdmlkZQotICAgICAgICAgICAgZ3VpZGFuY2UgYW5kIGV4YW1wbGVzIG9uIGhvdyB0byBjaGFuZ2UgdGhlIGtlcm5lbCBzb3VyY2UgY29kZSwKLSAgICAgICAgICAgIHJlY29uZmlndXJlIHRoZSBrZXJuZWwsIGFuZCBkZXZlbG9wIGFuIGFwcGxpY2F0aW9uIHVzaW5nCi0gICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+LgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICBCeSBkZWZhdWx0LCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCBjcmVhdGVzIGEgUG9reSBkaXN0cmlidXRpb24uCi0gICAgICAgICAgICBIb3dldmVyLCB5b3UgY2FuIGNyZWF0ZSB5b3VyIG93biBkaXN0cmlidXRpb24gYnkgcHJvdmlkaW5nIGtleQotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nbWV0YWRhdGEnPk1ldGFkYXRhPC9saW5rPi4KLSAgICAgICAgICAgIEEgZ29vZCBleGFtcGxlIGlzIEFuZ3N0cm9tLCB3aGljaCBoYXMgaGFkIGEgZGlzdHJpYnV0aW9uCi0gICAgICAgICAgICBiYXNlZCBvbiB0aGUgWW9jdG8gUHJvamVjdCBzaW5jZSBpdHMgaW5jZXB0aW9uLgotICAgICAgICAgICAgT3RoZXIgZXhhbXBsZXMgaW5jbHVkZSBjb21tZXJjaWFsIGRpc3RyaWJ1dGlvbnMgbGlrZQotICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9vcmdhbml6YXRpb24vd2luZC1yaXZlci1zeXN0ZW1zJz5XaW5kIFJpdmVyIExpbnV4PC91bGluaz4sCi0gICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3d3dy55b2N0b3Byb2plY3Qub3JnL29yZ2FuaXphdGlvbi9tZW50b3ItZ3JhcGhpY3MnPk1lbnRvciBFbWJlZGRlZCBMaW51eDwvdWxpbms+LAotICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9vcmdhbml6YXRpb24vZW5lYS1hYic+RU5FQSBMaW51eDwvdWxpbms+Ci0gICAgICAgICAgICBhbmQgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9lY29zeXN0ZW0vbWVtYmVyLW9yZ2FuaXphdGlvbnMnPm90aGVyczwvdWxpbms+LgotICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nY3JlYXRpbmcteW91ci1vd24tZGlzdHJpYnV0aW9uJz5DcmVhdGluZyBZb3VyIE93biBEaXN0cmlidXRpb248L2xpbms+IgotICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAgICAgICAgPC9ub3RlPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSd3aGF0LXRoaXMtbWFudWFsLXByb3ZpZGVzJz4KLSAgICAgICAgPHRpdGxlPldoYXQgVGhpcyBNYW51YWwgUHJvdmlkZXM8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgogICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IGRlc2NyaWJlcyB3aGF0IHlvdSBjYW4gZ2V0IGZyb20gdGhpcyBtYW51YWw6CiAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbmZvcm1hdGlvbiB0aGF0IGxldHMgeW91IGdldCBzZXQKLSAgICAgICAgICAgICAgICAgICAgdXAgdG8gZGV2ZWxvcCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdC48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW5mb3JtYXRpb24gdG8gaGVscCBkZXZlbG9wZXJzIHdobyBhcmUgbmV3IHRvCi0gICAgICAgICAgICAgICAgICAgIHRoZSBvcGVuIHNvdXJjZSBlbnZpcm9ubWVudCBhbmQgdG8gdGhlIGRpc3RyaWJ1dGVkIHJldmlzaW9uCi0gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wgc3lzdGVtIEdpdCwgd2hpY2ggdGhlIFlvY3RvIFByb2plY3QgdXNlcy4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5TZXR1cCBQcm9jZWR1cmVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFByb2NlZHVyZXMgdGhhdCBzaG93IHlvdSBob3cgdG8gc2V0CisgICAgICAgICAgICAgICAgICAgIHVwIGEgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBlbnZpcm9ubWVudCBhbmQgaG93CisgICAgICAgICAgICAgICAgICAgIHRvIGFjY29tcGxpc2ggdGhlIGNoYW5nZSB3b3JrZmxvdyB0aHJvdWdoIGxvZ2dpbmcKKyAgICAgICAgICAgICAgICAgICAgZGVmZWN0cyBhbmQgc3VibWl0dGluZyBjaGFuZ2VzLgogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QW4gdW5kZXJzdGFuZGluZyBvZiBjb21tb24gZW5kLXRvLWVuZAotICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBtb2RlbHMgYW5kIHRhc2tzLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbmZvcm1hdGlvbiBhYm91dCBjb21tb24gZGV2ZWxvcG1lbnQgdGFza3MKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhbGx5IHVzZWQgZHVyaW5nIGltYWdlIGRldmVsb3BtZW50IGZvcgotICAgICAgICAgICAgICAgICAgICBlbWJlZGRlZCBkZXZpY2VzLgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkVtdWxhdGlvbiBQcm9jZWR1cmVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFByb2NlZHVyZXMgdGhhdCBzaG93IHlvdSBob3cgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IGludGVncmF0ZWQgUXVpY2tFTVVsYXRvciAoUUVNVSksIHdoaWNoIGxldHMKKyAgICAgICAgICAgICAgICAgICAgeW91IHNpbXVsYXRlIHJ1bm5pbmcgb24gaGFyZHdhcmUgYW4gaW1hZ2UgeW91IGhhdmUgYnVpbHQKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUgWW9jdG8gUHJvamVjdAotICAgICAgICAgICAgICAgICAgICBpbnRlZ3JhdGlvbiBvZiB0aGUgUXVpY2tFTVVsYXRvciAoUUVNVSksIHdoaWNoIGxldHMgeW91Ci0gICAgICAgICAgICAgICAgICAgIHNpbXVsYXRlIHJ1bm5pbmcgb24gaGFyZHdhcmUgYW4gaW1hZ2UgeW91IGhhdmUgYnVpbHQgdXNpbmcKLSAgICAgICAgICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q29tbW9uIFByb2NlZHVyZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUHJvY2VkdXJlcyByZWxhdGVkIHRvICJldmVyeWRheSIgdGFza3MgeW91IHBlcmZvcm0gd2hpbGUKKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcGluZyBpbWFnZXMgYW5kIGFwcGxpY2F0aW9ucyB1c2luZyB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgUHJvamVjdC4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1hbnkgcmVmZXJlbmNlcyB0byBvdGhlciBzb3VyY2VzIG9mIHJlbGF0ZWQKLSAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KICAgICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSd3aGF0LXRoaXMtbWFudWFsLWRvZXMtbm90LXByb3ZpZGUnPgotICAgICAgICA8dGl0bGU+V2hhdCB0aGlzIE1hbnVhbCBEb2VzIE5vdCBQcm92aWRlPC90aXRsZT4KIAogICAgICAgICA8cGFyYT4KICAgICAgICAgICAgIFRoaXMgbWFudWFsIHdpbGwgbm90IGdpdmUgeW91IHRoZSBmb2xsb3dpbmc6CiAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3RlcC1ieS1zdGVwIGluc3RydWN0aW9ucyB3aGVuIHRob3NlIGluc3RydWN0aW9ucyBleGlzdCBpbiBvdGhlciBZb2N0bwotICAgICAgICAgICAgICAgICAgICBQcm9qZWN0IGRvY3VtZW50YXRpb246PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5SZWR1bmRhbnQgU3RlcC1ieS1zdGVwIEluc3RydWN0aW9uczo8L2VtcGhhc2lzPgogICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1NES19VUkw7Jz5Zb2N0byBQcm9qZWN0IFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoU0RLKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1NES19VUkw7Jz5Zb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BtZW50IGFuZCB0aGUgRXh0ZW5zaWJsZSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKGVTREspPC91bGluaz4KICAgICAgICAgICAgICAgICAgICAgbWFudWFsIGNvbnRhaW5zIGRldGFpbGVkIGluc3RydWN0aW9ucyBvbiBob3cgdG8gaW5zdGFsbCBhbgogICAgICAgICAgICAgICAgICAgICBTREssIHdoaWNoIGlzIHVzZWQgdG8gZGV2ZWxvcCBhcHBsaWNhdGlvbnMgZm9yIHRhcmdldAogICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZS4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SZWZlcmVuY2UgbWF0ZXJpYWw6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5SZWZlcmVuY2Ugb3IgQ29uY2VwdHVhbCBNYXRlcmlhbDo8L2VtcGhhc2lzPgogICAgICAgICAgICAgICAgICAgICBUaGlzIHR5cGUgb2YgbWF0ZXJpYWwgcmVzaWRlcyBpbiBhbiBhcHByb3ByaWF0ZSByZWZlcmVuY2UgbWFudWFsLgogICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3lzdGVtIHZhcmlhYmxlcyBhcmUgZG9jdW1lbnRlZCBpbiB0aGUKICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsnPllvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbDwvdWxpbms+LgogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRldGFpbGVkIHB1YmxpYyBpbmZvcm1hdGlvbiB0aGF0IGlzIG5vdCBzcGVjaWZpYyB0byB0aGUgWW9jdG8gUHJvamVjdDo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZXhoYXVzdGl2ZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIEdpdCBpcyBjb3ZlcmVkIGJldHRlciB0aHJvdWdoIHRoZQotICAgICAgICAgICAgICAgICAgICBJbnRlcm5ldCB0aGFuIGluIHRoaXMgbWFudWFsLgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkRldGFpbGVkIFB1YmxpYyBJbmZvcm1hdGlvbiBOb3QgU3BlY2lmaWMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3Q6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGV4aGF1c3RpdmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgU291cmNlIENvbnRyb2wgTWFuYWdlciBHaXQgaXMgYmV0dGVyIGNvdmVyZWQgd2l0aCBJbnRlcm5ldAorICAgICAgICAgICAgICAgICAgICBzZWFyY2hlcyBhbmQgb2ZmaWNpYWwgR2l0IERvY3VtZW50YXRpb24gdGhhbiB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24uCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICAgIDwvcGFyYT4KQEAgLTEwOSwxNDQgKzgwLDIzIEBACiAgICAgICAgIDx0aXRsZT5PdGhlciBJbmZvcm1hdGlvbjwvdGl0bGU+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBCZWNhdXNlIHRoaXMgbWFudWFsIHByZXNlbnRzIG92ZXJ2aWV3IGluZm9ybWF0aW9uIGZvciBtYW55IGRpZmZlcmVudAorICAgICAgICAgICAgQmVjYXVzZSB0aGlzIG1hbnVhbCBwcmVzZW50cyBpbmZvcm1hdGlvbiBmb3IgbWFueSBkaWZmZXJlbnQKICAgICAgICAgICAgIHRvcGljcywgc3VwcGxlbWVudGFsIGluZm9ybWF0aW9uIGlzIHJlY29tbWVuZGVkIGZvciBmdWxsCiAgICAgICAgICAgICBjb21wcmVoZW5zaW9uLgotICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHByZXNlbnRzIG90aGVyIHNvdXJjZXMgb2YgaW5mb3JtYXRpb24geW91IG1pZ2h0IGZpbmQgaGVscGZ1bDoKLSAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7Jz5Zb2N0byBQcm9qZWN0IFdlYnNpdGU8L3VsaW5rPjoKLSAgICAgICAgICAgICAgICAgICAgPC9lbXBoYXNpcz4gVGhlIGhvbWUgcGFnZSBmb3IgdGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgbG90cyBvZiBpbmZvcm1hdGlvbiBvbiB0aGUgcHJvamVjdAotICAgICAgICAgICAgICAgICAgICBhcyB3ZWxsIGFzIGxpbmtzIHRvIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7Jz5Zb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0PC91bGluaz46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBzaG9ydCBkb2N1bWVudCBsZXRzIHlvdSBnZXQgc3RhcnRlZAotICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IGFuZCBxdWlja2x5IGJlZ2luIGJ1aWxkaW5nIGFuIGltYWdlLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyc+WW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsPC91bGluaz46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBtYW51YWwgaXMgYSByZWZlcmVuY2UKLSAgICAgICAgICAgICAgICAgICAgZ3VpZGUgdG8gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0sIHdoaWNoIGlzIGJhc2VkIG9uIEJpdEJha2UuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gaXMgc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzICJQb2t5Ii4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfU0RLX1VSTDsnPllvY3RvIFByb2plY3QgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspIERldmVsb3BlcidzIEd1aWRlPC91bGluaz46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBndWlkZSBwcm92aWRlcyBpbmZvcm1hdGlvbiB0aGF0IGxldHMgeW91IGdldCBnb2luZwotICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBzdGFuZGFyZCBvciBleHRlbnNpYmxlIFNESy4KLSAgICAgICAgICAgICAgICAgICAgQW4gU0RLLCB3aXRoIGl0cyBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW5zLCBhbGxvd3MgeW91Ci0gICAgICAgICAgICAgICAgICAgIHRvIGRldmVsb3AgcHJvamVjdHMgaW5zaWRlIG9yIG91dHNpZGUgb2YgdGhlIFlvY3RvIFByb2plY3QKLSAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7Jz5Zb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIFRoaXMgZ3VpZGUgZGVmaW5lcyB0aGUgc3RydWN0dXJlIGZvciBCU1AgY29tcG9uZW50cy4KLSAgICAgICAgICAgICAgICAgICAgSGF2aW5nIGEgY29tbW9ubHkgdW5kZXJzdG9vZCBzdHJ1Y3R1cmUgZW5jb3VyYWdlcyBzdGFuZGFyZGl6YXRpb24uCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyc+WW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQgTWFudWFsPC91bGluaz46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBtYW51YWwgZGVzY3JpYmVzIGhvdyB0byB3b3JrIHdpdGggTGludXggWW9jdG8ga2VybmVscyBhcyB3ZWxsIGFzIHByb3ZpZGVzIGEgYml0Ci0gICAgICAgICAgICAgICAgICAgIG9mIGNvbmNlcHR1YWwgaW5mb3JtYXRpb24gb24gdGhlIGNvbnN0cnVjdGlvbiBvZiB0aGUgWW9jdG8gTGludXgga2VybmVsIHRyZWUuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1BST0ZfVVJMOyc+WW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsPC91bGluaz46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBtYW51YWwgcHJlc2VudHMgYSBzZXQgb2YgY29tbW9uIGFuZCBnZW5lcmFsbHkgdXNlZnVsIHRyYWNpbmcgYW5kCi0gICAgICAgICAgICAgICAgICAgIHByb2ZpbGluZyBzY2hlbWVzIGFsb25nIHdpdGggdGhlaXIgYXBwbGljYXRpb25zIChhcyBhcHByb3ByaWF0ZSkgdG8gZWFjaCB0b29sLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19UT0FTVF9VUkw7Jz5Ub2FzdGVyIFVzZXIgTWFudWFsPC91bGluaz46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBtYW51YWwgaW50cm9kdWNlcyBhbmQgZGVzY3JpYmVzIGhvdyB0byBzZXQgdXAgYW5kIHVzZQotICAgICAgICAgICAgICAgICAgICBUb2FzdGVyLCB3aGljaCBpcyBhIHdlYiBpbnRlcmZhY2UgdG8gdGhlIFlvY3RvIFByb2plY3QncwotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1zeXN0ZW0tdGVybSc+T3BlbkVtYmVkZGVkIEJ1aWxkIFN5c3RlbTwvbGluaz4uCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotPCEtLQotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj0zWmxPdS1nTHNoMCc+Ci0gICAgICAgICAgICAgICAgICAgIEVjbGlwc2UgSURFIFlvY3RvIFBsdWctaW48L3VsaW5rPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBBIHN0ZXAtYnktc3RlcCBpbnN0cnVjdGlvbmFsIHZpZGVvIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgZGVtb25zdHJhdGVzIGhvdyBhbiBhcHBsaWNhdGlvbiBkZXZlbG9wZXIgdXNlcyBZb2N0byBQbHVnLWluIGZlYXR1cmVzIHdpdGhpbgotICAgICAgICAgICAgICAgICAgICB0aGUgRWNsaXBzZSBJREUuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotLS0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfU0RLX1VSTDsjc2RrLWFwcGVuZGl4LWxhdGVzdC15cC1lY2xpcHNlLXBsdWctaW4nPkVjbGlwc2UgSURFIFlvY3RvIFBsdWctaW48L3VsaW5rPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbnMgdGhhdCBkZW1vbnN0cmF0ZSBob3cgYW4gYXBwbGljYXRpb24gZGV2ZWxvcGVyCi0gICAgICAgICAgICAgICAgICAgIHVzZXMgdGhlIEVjbGlwc2UgWW9jdG8gUHJvamVjdCBQbHVnLWluIGZlYXR1cmUgd2l0aGluCi0gICAgICAgICAgICAgICAgICAgIHRoZSBFY2xpcHNlIElERS4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1dJS0lfVVJMOy93aWtpL0ZBUSc+RkFRPC91bGluaz46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIGNvbW1vbmx5IGFza2VkIHF1ZXN0aW9ucyBhbmQgdGhlaXIgYW5zd2Vycy4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1JFTEVBU0VfTk9URVM7Jz5SZWxlYXNlIE5vdGVzPC91bGluaz46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgRmVhdHVyZXMsIHVwZGF0ZXMgYW5kIGtub3duIGlzc3VlcyBmb3IgdGhlIGN1cnJlbnQKLSAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSBvZiB0aGUgWW9jdG8gUHJvamVjdC4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy90b29scy1yZXNvdXJjZXMvcHJvamVjdHMvdG9hc3Rlcic+VG9hc3RlcjwvdWxpbms+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIEFuIEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZSAoQVBJKSBhbmQgd2ViLWJhc2VkCi0gICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSB0byB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSwgd2hpY2ggdXNlcwotICAgICAgICAgICAgICAgICAgICBCaXRCYWtlLCB0aGF0IHJlcG9ydHMgYnVpbGQgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2J1aWxkLWFwcGxpYW5jZSc+QnVpbGQgQXBwbGlhbmNlPC91bGluaz46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgQSB2aXJ0dWFsIG1hY2hpbmUgdGhhdAotICAgICAgICAgICAgICAgICAgICBlbmFibGVzIHlvdSB0byBidWlsZCBhbmQgYm9vdCBhIGN1c3RvbSBlbWJlZGRlZCBMaW51eCBpbWFnZQotICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IHVzaW5nIGEgbm9uLUxpbnV4IGRldmVsb3BtZW50IHN5c3RlbS4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0JVR1pJTExBX1VSTDsnPkJ1Z3ppbGxhPC91bGluaz46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGJ1ZyB0cmFja2luZyBhcHBsaWNhdGlvbiB0aGUgWW9jdG8gUHJvamVjdCB1c2VzLgotICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZmluZCBwcm9ibGVtcyB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LCB5b3Ugc2hvdWxkIHJlcG9ydCB0aGVtIHVzaW5nIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+WW9jdG8gUHJvamVjdCBNYWlsaW5nIExpc3RzOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIFRvIHN1YnNjcmliZSB0byB0aGUgWW9jdG8gUHJvamVjdCBtYWlsaW5nCi0gICAgICAgICAgICAgICAgICAgIGxpc3RzLCBjbGljayBvbiB0aGUgZm9sbG93aW5nIFVSTHMgYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zOgotICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19MSVNUU19VUkw7L2xpc3RpbmZvL3lvY3RvJz48L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhIFlvY3RvIFByb2plY3QgRGlzY3Vzc2lvbnMgbWFpbGluZyBsaXN0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19MSVNUU19VUkw7L2xpc3RpbmZvL3Bva3knPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGEgWW9jdG8gUHJvamVjdCBEaXNjdXNzaW9ucyBtYWlsaW5nIGxpc3QgYWJvdXQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSAoUG9reSkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0xJU1RTX1VSTDsvbGlzdGluZm8veW9jdG8tYW5ub3VuY2UnPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGEgbWFpbGluZyBsaXN0IHRvIHJlY2VpdmUgb2ZmaWNpYWwgWW9jdG8gUHJvamVjdCBhbm5vdW5jZW1lbnRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgd2VsbCBhcyBZb2N0byBQcm9qZWN0IG1pbGVzdG9uZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0xJU1RTX1VSTDsvbGlzdGluZm8nPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGEgbGlzdGluZyBvZiBhbGwgcHVibGljIG1haWxpbmcgbGlzdHMgb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlzdHMueW9jdG9wcm9qZWN0Lm9yZzwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkludGVybmV0IFJlbGF5IENoYXQgKElSQyk6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgVHdvIElSQyBjaGFubmVscyBvbiBmcmVlbm9kZSBhcmUgYXZhaWxhYmxlCi0gICAgICAgICAgICAgICAgICAgIGZvciBZb2N0byBQcm9qZWN0IGFuZCBQb2t5IGRpc2N1c3Npb25zOiA8ZmlsZW5hbWU+I3lvY3RvPC9maWxlbmFtZT4gYW5kCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4jcG9reTwvZmlsZW5hbWU+LCByZXNwZWN0aXZlbHkuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZPRV9IT01FX1VSTDsnPk9wZW5FbWJlZGRlZDwvdWxpbms+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gdXNlZCBieSB0aGUgWW9jdG8gUHJvamVjdC4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBwcm9qZWN0IGlzIHRoZSB1cHN0cmVhbSwgZ2VuZXJpYywgZW1iZWRkZWQgZGlzdHJpYnV0aW9uCi0gICAgICAgICAgICAgICAgICAgIGZyb20gd2hpY2ggdGhlIFlvY3RvIFByb2plY3QgZGVyaXZlcyBpdHMgYnVpbGQgc3lzdGVtIChQb2t5KQotICAgICAgICAgICAgICAgICAgICBhbmQgdG8gd2hpY2ggaXQgY29udHJpYnV0ZXMuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cub3BlbmVtYmVkZGVkLm9yZy93aWtpL0JpdEJha2UnPkJpdEJha2U8L3VsaW5rPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBUaGUgdG9vbCB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCi0gICAgICAgICAgICAgICAgICAgIHRvIHByb2Nlc3MgcHJvamVjdCBtZXRhZGF0YS4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyc+Qml0QmFrZSBVc2VyIE1hbnVhbDo8L3VsaW5rPjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIEEgY29tcHJlaGVuc2l2ZSBndWlkZSB0byB0aGUgQml0QmFrZSB0b29sLgotICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCBpbmZvcm1hdGlvbiBvbiBCaXRCYWtlLCBzZWUgdGhpcyBtYW51YWwuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93aWtpLnFlbXUub3JnL0luZGV4Lmh0bWwnPlF1aWNrIEVNVWxhdG9yIChRRU1VKTwvdWxpbms+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIEFuIG9wZW4tc291cmNlIG1hY2hpbmUgZW11bGF0b3IgYW5kIHZpcnR1YWxpemVyLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgRm9yIGludHJvZHVjdG9yeSBpbmZvcm1hdGlvbiBvbiB0aGUgWW9jdG8gUHJvamVjdCwgc2VlIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOyc+WW9jdG8gUHJvamVjdCBXZWJzaXRlPC91bGluaz4uCisgICAgICAgICAgICBZb3UgY2FuIGZpbmQgYW4gaW50cm9kdWN0b3J5IHRvIHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0IGJ5IHdvcmtpbmcKKyAgICAgICAgICAgIHRocm91Z2ggdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7Jz5Zb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0PC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBhIGNvbXByZWhlbnNpdmUgbGlzdCBvZiBsaW5rcyBhbmQgb3RoZXIgZG9jdW1lbnRhdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Jlc291cmNlcy1saW5rcy1hbmQtcmVsYXRlZC1kb2N1bWVudGF0aW9uJz5MaW5rcyBhbmQgUmVsYXRlZCBEb2N1bWVudGF0aW9uPC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KICAgICAgICAgPC9wYXJhPgogICAgIDwvc2VjdGlvbj4KIDwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1tb2RlbC54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtbW9kZWwueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDA4ZTExLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1tb2RlbC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjU0ICswLDAgQEAKLTwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKLSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCi1bPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+Ci0KLTxjaGFwdGVyIGlkPSdkZXYtbWFudWFsLW1vZGVsJz4KLQotPHRpdGxlPkNvbW1vbiBEZXZlbG9wbWVudCBNb2RlbHM8L3RpdGxlPgotCi08cGFyYT4KLSAgICBNYW55IGRldmVsb3BtZW50IG1vZGVscyBleGlzdCBmb3Igd2hpY2ggeW91IGNhbiB1c2UgdGhlIFlvY3RvIFByb2plY3QuCi0gICAgVGhpcyBjaGFwdGVyIG92ZXJ2aWV3cyBzaW1wbGUgbWV0aG9kcyB0aGF0IHVzZSB0b29scyBwcm92aWRlZCBieSB0aGUKLSAgICBZb2N0byBQcm9qZWN0OgotICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3lzdGVtIERldmVsb3BtZW50OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgU3lzdGVtIERldmVsb3BtZW50IGNvdmVycyBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgZGV2ZWxvcG1lbnQKLSAgICAgICAgICAgICBhbmQga2VybmVsIG1vZGlmaWNhdGlvbiBvciBjb25maWd1cmF0aW9uLgotICAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIG9uIGhvdyB0byBjcmVhdGUgYSBCU1AsIHNlZSB0aGUKLSAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjY3JlYXRpbmctYS1uZXctYnNwLWxheWVyLXVzaW5nLXRoZS15b2N0by1ic3Atc2NyaXB0Jz5DcmVhdGluZyBhIE5ldyBCU1AgTGF5ZXIgVXNpbmcgdGhlIHlvY3RvLWJzcCBTY3JpcHQ8L3VsaW5rPiIKLSAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKQotICAgICAgICAgICAgIERldmVsb3BlcidzIEd1aWRlLgotICAgICAgICAgICAgIEZvciBtb3JlIGNvbXBsZXRlIGluZm9ybWF0aW9uIG9uIGhvdyB0byB3b3JrIHdpdGggdGhlIGtlcm5lbCwKLSAgICAgICAgICAgICBzZWUgdGhlCi0gICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7Jz5Zb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWw8L3VsaW5rPi4KLSAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNlciBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudDo8L2VtcGhhc2lzPgotICAgICAgICAgICAgIFVzZXIgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgY292ZXJzIGRldmVsb3BtZW50IG9mIGFwcGxpY2F0aW9ucwotICAgICAgICAgICAgIHRoYXQgeW91IGludGVuZCB0byBydW4gb24gdGFyZ2V0IGhhcmR3YXJlLgotICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc2V0IHVwIHlvdXIgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0gZm9yCi0gICAgICAgICAgICAgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCwgc2VlIHRoZQotICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1NES19VUkw7Jz5Zb2N0byBQcm9qZWN0IFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoU0RLKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgotICAgICAgICAgICAgIEZvciBhIHNpbXBsZSBleGFtcGxlIG9mIHVzZXItc3BhY2UgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgdXNpbmcKLSAgICAgICAgICAgICB0aGUgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz4gSURFLCBzZWUgdGhlCi0gICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1NES19VUkw7I3Nkay1kZXZlbG9waW5nLWFwcGxpY2F0aW9ucy11c2luZy1lY2xpcHNlJz5EZXZlbG9waW5nIEFwcGxpY2F0aW9ucyBVc2luZyA8dHJhZGVtYXJrIGNsYXNzPSd0cmFkZSc+RWNsaXBzZTwvdHJhZGVtYXJrPjwvdWxpbms+IiBzZWN0aW9uLgotICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5UZW1wb3JhcnkgU291cmNlIENvZGUgTW9kaWZpY2F0aW9uOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgRGlyZWN0IG1vZGlmaWNhdGlvbiBvZiB0ZW1wb3Jhcnkgc291cmNlIGNvZGUgaXMgYSBjb252ZW5pZW50Ci0gICAgICAgICAgICAgZGV2ZWxvcG1lbnQgbW9kZWwgdG8gcXVpY2tseSBpdGVyYXRlIGFuZCBkZXZlbG9wIHRvd2FyZHMgYQotICAgICAgICAgICAgIHNvbHV0aW9uLgotICAgICAgICAgICAgIE9uY2UgeW91IGltcGxlbWVudCB0aGUgc29sdXRpb24sIHlvdSBzaG91bGQgb2YgY291cnNlIHRha2UKLSAgICAgICAgICAgICBzdGVwcyB0byBnZXQgdGhlIGNoYW5nZXMgdXBzdHJlYW0gYW5kIGFwcGxpZWQgaW4gdGhlIGFmZmVjdGVkCi0gICAgICAgICAgICAgcmVjaXBlcy4KLSAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW1hZ2UgRGV2ZWxvcG1lbnQgdXNpbmcgVG9hc3Rlcjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgIFlvdSBjYW4gdXNlIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvVG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL3RvYXN0ZXInPlRvYXN0ZXI8L3VsaW5rPgotICAgICAgICAgICAgIHRvIGJ1aWxkIGN1c3RvbSBvcGVyYXRpbmcgc3lzdGVtIGltYWdlcyB3aXRoaW4gdGhlIGJ1aWxkCi0gICAgICAgICAgICAgZW52aXJvbm1lbnQuCi0gICAgICAgICAgICAgVG9hc3RlciBwcm92aWRlcyBhbiBlZmZpY2llbnQgaW50ZXJmYWNlIHRvIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKLSAgICAgICAgICAgICB0aGF0IGFsbG93cyB5b3UgdG8gc3RhcnQgYnVpbGRzIGFuZCBleGFtaW5lIGJ1aWxkIHN0YXRpc3RpY3MuCi0gICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVzaW5nIGEgRGV2ZWxvcG1lbnQgU2hlbGw6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICBZb3UgY2FuIHVzZSBhCi0gICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncGxhdGRldi1hcHBkZXYtZGV2c2hlbGwnPjxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgIHRvIGVmZmljaWVudGx5IGRlYnVnCi0gICAgICAgICAgICAgY29tbWFuZHMgb3Igc2ltcGx5IGVkaXQgcGFja2FnZXMuCi0gICAgICAgICAgICAgV29ya2luZyBpbnNpZGUgYSBkZXZlbG9wbWVudCBzaGVsbCBpcyBhIHF1aWNrIHdheSB0byBzZXQgdXAgdGhlCi0gICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIGVudmlyb25tZW50IHRvIHdvcmsgb24gcGFydHMgb2YgYSBwcm9qZWN0LgotICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICA8L2l0ZW1pemVkbGlzdD4KLTwvcGFyYT4KLQotPHNlY3Rpb24gaWQ9J3N5c3RlbS1kZXZlbG9wbWVudC1tb2RlbCc+Ci0gICAgPHRpdGxlPlN5c3RlbSBEZXZlbG9wbWVudCBXb3JrZmxvdzwvdGl0bGU+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgU3lzdGVtIGRldmVsb3BtZW50IGludm9sdmVzIG1vZGlmaWNhdGlvbiBvciBjcmVhdGlvbiBvZiBhbiBpbWFnZSB0aGF0IHlvdSB3YW50IHRvIHJ1biBvbgotICAgICAgICBhIHNwZWNpZmljIGhhcmR3YXJlIHRhcmdldC4KLSAgICAgICAgVXN1YWxseSwgd2hlbiB5b3Ugd2FudCB0byBjcmVhdGUgYW4gaW1hZ2UgdGhhdCBydW5zIG9uIGVtYmVkZGVkIGhhcmR3YXJlLCB0aGUgaW1hZ2UgZG9lcwotICAgICAgICBub3QgcmVxdWlyZSB0aGUgc2FtZSBudW1iZXIgb2YgZmVhdHVyZXMgdGhhdCBhIGZ1bGwtZmxlZGdlZCBMaW51eCBkaXN0cmlidXRpb24gcHJvdmlkZXMuCi0gICAgICAgIFRodXMsIHlvdSBjYW4gY3JlYXRlIGEgbXVjaCBzbWFsbGVyIGltYWdlIHRoYXQgaXMgZGVzaWduZWQgdG8gdXNlIG9ubHkgdGhlCi0gICAgICAgIGZlYXR1cmVzIGZvciB5b3VyIHBhcnRpY3VsYXIgaGFyZHdhcmUuCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIFRvIGhlbHAgeW91IHVuZGVyc3RhbmQgaG93IHN5c3RlbSBkZXZlbG9wbWVudCB3b3JrcyBpbiB0aGUgWW9jdG8gUHJvamVjdCwgdGhpcyBzZWN0aW9uCi0gICAgICAgIGNvdmVycyB0d28gdHlwZXMgb2YgaW1hZ2UgZGV2ZWxvcG1lbnQ6ICBCU1AgY3JlYXRpb24gYW5kIGtlcm5lbCBtb2RpZmljYXRpb24gb3IKLSAgICAgICAgY29uZmlndXJhdGlvbi4KLSAgICA8L3BhcmE+Ci0KLSAgICA8c2VjdGlvbiBpZD0nZGV2ZWxvcGluZy1hLWJvYXJkLXN1cHBvcnQtcGFja2FnZS1ic3AnPgotICAgICAgICA8dGl0bGU+RGV2ZWxvcGluZyBhIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKTwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBBIEJTUCBpcyBhIGNvbGxlY3Rpb24gb2YgcmVjaXBlcyB0aGF0LCB3aGVuIGFwcGxpZWQgZHVyaW5nIGEgYnVpbGQsIHJlc3VsdHMgaW4KLSAgICAgICAgICAgIGFuIGltYWdlIHRoYXQgeW91IGNhbiBydW4gb24gYSBwYXJ0aWN1bGFyIGJvYXJkLgotICAgICAgICAgICAgVGh1cywgdGhlIHBhY2thZ2Ugd2hlbiBjb21waWxlZCBpbnRvIHRoZSBuZXcgaW1hZ2UsIHN1cHBvcnRzIHRoZSBvcGVyYXRpb24gb2YgdGhlIGJvYXJkLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICBGb3IgYSBicmllZiBsaXN0IG9mIHRlcm1zIHVzZWQgd2hlbiBkZXNjcmliaW5nIHRoZSBkZXZlbG9wbWVudCBwcm9jZXNzIGluIHRoZSBZb2N0byBQcm9qZWN0LAotICAgICAgICAgICAgc2VlIHRoZSAiPGxpbmsgbGlua2VuZD0neW9jdG8tcHJvamVjdC10ZXJtcyc+WW9jdG8gUHJvamVjdCBUZXJtczwvbGluaz4iIHNlY3Rpb24uCi0gICAgICAgIDwvbm90ZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIHByZXNlbnRzIHRoZSBiYXNpYwotICAgICAgICAgICAgc3RlcHMgdXNlZCB0byBjcmVhdGUgYSBCU1AgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QncwotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjdXNpbmctdGhlLXlvY3RvLXByb2plY3RzLWJzcC10b29scyc+QlNQIFRvb2xzPC91bGluaz4uCi0gICAgICAgICAgICBBbHRob3VnaCBub3QgcmVxdWlyZWQgZm9yIEJTUCBjcmVhdGlvbiwgdGhlCi0gICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+IHJlcG9zaXRvcnksIHdoaWNoIGNvbnRhaW5zCi0gICAgICAgICAgICBtYW55IEJTUHMgc3VwcG9ydGVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0LCBpcyBwYXJ0IG9mIHRoZSBleGFtcGxlLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSB0aGF0IHNob3dzIGhvdyB0byBjcmVhdGUgYSBuZXcgbGF5ZXIgdXNpbmcgdGhlIHRvb2xzLCBzZWUgdGhlCi0gICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjY3JlYXRpbmctYS1uZXctYnNwLWxheWVyLXVzaW5nLXRoZS15b2N0by1ic3Atc2NyaXB0Jz5DcmVhdGluZyBhIE5ldyBCU1AgTGF5ZXIgVXNpbmcgdGhlIHlvY3RvLWJzcCBTY3JpcHQ8L3VsaW5rPiIKLSAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZS4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBpbGx1c3RyYXRpb24gYW5kIGxpc3Qgc3VtbWFyaXplIHRoZSBCU1AgY3JlYXRpb24gZ2VuZXJhbCB3b3JrZmxvdy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2JzcC1kZXYtZmxvdy5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI3aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZXQgdXAgeW91ciBob3N0IGRldmVsb3BtZW50IHN5c3RlbSB0byBzdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0PC9lbXBoYXNpcz46ICBTZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3RoZS1saW51eC1kaXN0cm8nPlRoZSBMaW51eCBEaXN0cmlidXRpb248L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgYW5kIHRoZQotICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyNwYWNrYWdlcyc+VGhlIEJ1aWxkIEhvc3QgUGFja2FnZXM8L3VsaW5rPiIgc2VjdGlvbnMgYm90aAotICAgICAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydCBmb3IgcmVxdWlyZW1lbnRzLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXN0YWJsaXNoIGEgbG9jYWwgY29weSBvZiB0aGUgcHJvamVjdCBmaWxlcyBvbiB5b3VyCi0gICAgICAgICAgICAgICAgICAgIHN5c3RlbTwvZW1waGFzaXM+OiAgWW91IG5lZWQgdGhpcyA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UKLSAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5PC9saW5rPiBhdmFpbGFibGUgb24geW91ciBob3N0IHN5c3RlbS4KLSAgICAgICAgICAgICAgICAgICAgSGF2aW5nIHRoZXNlIGZpbGVzIG9uIHlvdXIgc3lzdGVtIGdpdmVzIHlvdSBhY2Nlc3MgdG8gdGhlIGJ1aWxkCi0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgYW5kIHRvIHRoZSB0b29scyB5b3UgbmVlZC4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzZXQgdXAgdGhlIFNvdXJjZSBEaXJlY3RvcnksCi0gICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2dldHRpbmctc2V0dXAnPkdldHRpbmcgU2V0IFVwPC9saW5rPiIgc2VjdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkVzdGFibGlzaCB0aGUgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5IG9uIHlvdXIgc3lzdGVtPC9lbXBoYXNpcz46ICBIYXZpbmcgbG9jYWwgY29waWVzCi0gICAgICAgICAgICAgICAgICAgIG9mIHRoZXNlIHN1cHBvcnRlZCBCU1AgbGF5ZXJzIG9uIHlvdXIgc3lzdGVtIGdpdmVzIHlvdQotICAgICAgICAgICAgICAgICAgICBhY2Nlc3MgdG8gbGF5ZXJzIHlvdSBtaWdodCBiZSBhYmxlIHRvIGJ1aWxkIG9uIG9yIG1vZGlmeQotICAgICAgICAgICAgICAgICAgICB0byBjcmVhdGUgeW91ciBCU1AuCi0gICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZ2V0IHRoZXNlIGZpbGVzLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdnZXR0aW5nLXNldHVwJz5HZXR0aW5nIFNldCBVcDwvbGluaz4iIHNlY3Rpb24uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgeW91ciBvd24gQlNQIGxheWVyIHVzaW5nIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNjcmVhdGluZy1hLW5ldy1ic3AtbGF5ZXItdXNpbmctdGhlLXlvY3RvLWJzcC1zY3JpcHQnPjxmaWxlbmFtZT55b2N0by1ic3A8L2ZpbGVuYW1lPjwvdWxpbms+IHNjcmlwdDwvZW1waGFzaXM+OgotICAgICAgICAgICAgICAgICAgICBMYXllcnMgYXJlIGlkZWFsIGZvcgotICAgICAgICAgICAgICAgICAgICBpc29sYXRpbmcgYW5kIHN0b3Jpbmcgd29yayBmb3IgYSBnaXZlbiBwaWVjZSBvZiBoYXJkd2FyZS4KLSAgICAgICAgICAgICAgICAgICAgQSBsYXllciBpcyByZWFsbHkganVzdCBhIGxvY2F0aW9uIG9yIGFyZWEgaW4gd2hpY2ggeW91IHBsYWNlCi0gICAgICAgICAgICAgICAgICAgIHRoZSByZWNpcGVzIGFuZCBjb25maWd1cmF0aW9ucyBmb3IgeW91ciBCU1AuCi0gICAgICAgICAgICAgICAgICAgIEluIGZhY3QsIGEgQlNQIGlzLCBpbiBpdHNlbGYsIGEgc3BlY2lhbCB0eXBlIG9mIGxheWVyLgotICAgICAgICAgICAgICAgICAgICBUaGUgc2ltcGxlc3Qgd2F5IHRvIGNyZWF0ZSBhIG5ldyBCU1AgbGF5ZXIgdGhhdCBpcyBjb21wbGlhbnQgd2l0aCB0aGUKLSAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBpcyB0byB1c2UgdGhlIDxmaWxlbmFtZT55b2N0by1ic3A8L2ZpbGVuYW1lPiBzY3JpcHQuCi0gICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGF0IHNjcmlwdCwgc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjY3JlYXRpbmctYS1uZXctYnNwLWxheWVyLXVzaW5nLXRoZS15b2N0by1ic3Atc2NyaXB0Jz5DcmVhdGluZyBhIE5ldyBCU1AgTGF5ZXIgVXNpbmcgdGhlIHlvY3RvLWJzcCBTY3JpcHQ8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IChCU1ApIERldmVsb3BlcidzIEd1aWRlLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBBbm90aGVyIGV4YW1wbGUgdGhhdCBpbGx1c3RyYXRlcyBhIGxheWVyCi0gICAgICAgICAgICAgICAgICAgICAgICBpcyBhbiBhcHBsaWNhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvc2UgeW91IGFyZSBjcmVhdGluZyBhbiBhcHBsaWNhdGlvbiB0aGF0IGhhcwotICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeSBvciBvdGhlciBkZXBlbmRlbmNpZXMgaW4gb3JkZXIgZm9yIGl0IHRvCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlIGFuZCBydW4uCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgbGF5ZXIsIGluIHRoaXMgY2FzZSwgd291bGQgYmUgd2hlcmUgYWxsIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlcyB0aGF0IGRlZmluZSB0aG9zZSBkZXBlbmRlbmNpZXMgYXJlIGtlcHQuCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGUga2V5IHBvaW50IGZvciBhIGxheWVyIGlzIHRoYXQgaXQgaXMgYW4gaXNvbGF0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZWEgdGhhdCBjb250YWlucyBhbGwgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHByb2plY3QgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBrbm93cwotICAgICAgICAgICAgICAgICAgICAgICAgYWJvdXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBsYXllcnMsIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcgYW5kIENyZWF0aW5nIExheWVyczwvbGluaz4iCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQlNQIGxheWVycywgc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2JzcC1sYXllcnMnPkJTUCBMYXllcnM8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApCi0gICAgICAgICAgICAgICAgICAgICAgICBEZXZlbG9wZXIncyBHdWlkZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXZlIEJTUHMgZXhpc3QgdGhhdCBhcmUgcGFydCBvZiB0aGUgWW9jdG8gUHJvamVjdCByZWxlYXNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmVhZ2xlYm9uZTwvZmlsZW5hbWU+IChBUk0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bXBjODMxNWU8L2ZpbGVuYW1lPiAoUG93ZXJQQyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+ZWRnZXJvdXRlcjwvZmlsZW5hbWU+IChNSVBTKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZXMgYW5kIGNvbmZpZ3VyYXRpb25zIGZvciB0aGVzZSBmaXZlIEJTUHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGxvY2F0ZWQgYW5kIGRpc3BlcnNlZCB3aXRoaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlZSBjb3JlIEludGVsIEJTUHMgZXhpc3QgYXMgcGFydCBvZiB0aGUgWW9jdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdCByZWxlYXNlIGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+IGxheWVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5pbnRlbC1jb3JlMi0zMjwvZmlsZW5hbWU+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIGEgQlNQIG9wdGltaXplZCBmb3IgdGhlIENvcmUyIGZhbWlseSBvZiBDUFVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgd2VsbCBhcyBhbGwgQ1BVcyBwcmlvciB0byB0aGUgU2lsdmVybW9udCBjb3JlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5pbnRlbC1jb3JlaTctNjQ8L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBhIEJTUCBvcHRpbWl6ZWQgZm9yIE5laGFsZW0gYW5kIGxhdGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yZSBhbmQgWGVvbiBDUFVzIGFzIHdlbGwgYXMgU2lsdmVybW9udCBhbmQgbGF0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9tIENQVXMsIHN1Y2ggYXMgdGhlIEJheXRyYWlsIFNvQ3MuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmludGVsLXF1YXJrPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgYSBCU1Agb3B0aW1pemVkIGZvciB0aGUgSW50ZWwgR2FsaWxlbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbjEgJmFtcDsgZ2VuMiBkZXZlbG9wbWVudCBib2FyZHMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgICAgIDxwYXJhPldoZW4geW91IHNldCB1cCBhIGxheWVyIGZvciBhIG5ldyBCU1AsIHlvdSBzaG91bGQgZm9sbG93IGEgc3RhbmRhcmQgbGF5b3V0LgotICAgICAgICAgICAgICAgICAgICBUaGlzIGxheW91dCBpcyBkZXNjcmliZWQgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNic3AtZmlsZWxheW91dCc+RXhhbXBsZSBGaWxlc3lzdGVtIExheW91dDwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcG1lbnQgR3VpZGUuCi0gICAgICAgICAgICAgICAgICAgIEluIHRoZSBzdGFuZGFyZCBsYXlvdXQsIHlvdSB3aWxsIG5vdGljZSBhIHN1Z2dlc3RlZCBzdHJ1Y3R1cmUgZm9yIHJlY2lwZXMgYW5kCi0gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VlIHRoZSBzdGFuZGFyZCBsYXlvdXQgZm9yIGEgQlNQIGJ5IGV4YW1pbmluZwotICAgICAgICAgICAgICAgICAgICBhbnkgc3VwcG9ydGVkIEJTUCBmb3VuZCBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBsYXllciBpbnNpZGUKLSAgICAgICAgICAgICAgICAgICAgdGhlIFNvdXJjZSBEaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NYWtlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB0byB5b3VyIG5ldyBCU1AKLSAgICAgICAgICAgICAgICAgICAgbGF5ZXI8L2VtcGhhc2lzPjogIFRoZSBzdGFuZGFyZCBCU1AgbGF5ZXIgc3RydWN0dXJlIG9yZ2FuaXplcyB0aGUgZmlsZXMgeW91IG5lZWQKLSAgICAgICAgICAgICAgICAgICAgdG8gZWRpdCBpbiA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGFuZCBzZXZlcmFsIDxmaWxlbmFtZT5yZWNpcGVzLSo8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyB3aXRoaW4gdGhlIEJTUCBsYXllci4KLSAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBjaGFuZ2VzIGlkZW50aWZ5IHdoZXJlIHlvdXIgbmV3IGxheWVyIGlzIG9uIHRoZSBsb2NhbCBzeXN0ZW0KLSAgICAgICAgICAgICAgICAgICAgYW5kIGlkZW50aWZ5IHdoaWNoIGtlcm5lbCB5b3UgYXJlIGdvaW5nIHRvIHVzZS4KLSAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgcnVuIHRoZSA8ZmlsZW5hbWU+eW9jdG8tYnNwPC9maWxlbmFtZT4gc2NyaXB0LCB5b3UgYXJlIGFibGUgdG8gaW50ZXJhY3RpdmVseQotICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgbWFueSB0aGluZ3MgZm9yIHRoZSBCU1AgKGUuZy4ga2V5Ym9hcmQsIHRvdWNoc2NyZWVuLCBhbmQgc28gZm9ydGgpLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1ha2UgcmVjaXBlIGNoYW5nZXMgdG8geW91ciBuZXcgQlNQIGxheWVyPC9lbXBoYXNpcz46ICBSZWNpcGUKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyBpbmNsdWRlIGFsdGVyaW5nIHJlY2lwZXMgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlcyksIHJlbW92aW5nCi0gICAgICAgICAgICAgICAgICAgIHJlY2lwZXMgeW91IGRvIG5vdCB1c2UsIGFuZCBhZGRpbmcgbmV3IHJlY2lwZXMgb3IgYXBwZW5kIGZpbGVzCi0gICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pIHRoYXQgeW91IG5lZWQgdG8gc3VwcG9ydCB5b3VyIGhhcmR3YXJlLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlByZXBhcmUgZm9yIHRoZSBidWlsZDwvZW1waGFzaXM+OiAgT25jZSB5b3UgaGF2ZSBtYWRlIGFsbCB0aGUKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyB0byB5b3VyIEJTUCBsYXllciwgdGhlcmUgcmVtYWlucyBhIGZldyB0aGluZ3MKLSAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gZG8gZm9yIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGluIG9yZGVyIGZvciBpdCB0byBjcmVhdGUgeW91ciBpbWFnZS4KLSAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gZ2V0IHRoZSBidWlsZCBlbnZpcm9ubWVudCByZWFkeSBieSBzb3VyY2luZyBhbiBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52PC9maWxlbmFtZT4gb3IKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+KQotICAgICAgICAgICAgICAgICAgICBhbmQgeW91IG5lZWQgdG8gYmUgc3VyZSB0d28ga2V5IGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIGNvbmZpZ3VyZWQgYXBwcm9wcmlhdGVseToKLSAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBhbmQgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2JibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgotICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBtYWtlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF3YXJlIG9mIHlvdXIgbmV3IGxheWVyLgotICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdlbmFibGluZy15b3VyLWxheWVyJz5FbmFibGluZyBZb3VyIExheWVyPC9saW5rPiIgc2VjdGlvbgotICAgICAgICAgICAgICAgICAgICBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGxldCB0aGUgYnVpbGQgc3lzdGVtIGtub3cgYWJvdXQgeW91ciBuZXcgbGF5ZXIuPC9wYXJhPgotICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZW50aXJlIHByb2Nlc3MgZm9yIGJ1aWxkaW5nIGFuIGltYWdlIGlzIG92ZXJ2aWV3ZWQgaW4gdGhlIHNlY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjcXMtYnVpbGRpbmctaW1hZ2VzJz5CdWlsZGluZyBJbWFnZXM8L3VsaW5rPiIgc2VjdGlvbgotICAgICAgICAgICAgICAgICAgICBvZiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydC4KLSAgICAgICAgICAgICAgICAgICAgWW91IG1pZ2h0IHdhbnQgdG8gcmVmZXJlbmNlIHRoaXMgaW5mb3JtYXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCB0aGUgaW1hZ2U8L2VtcGhhc2lzPjogIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCi0gICAgICAgICAgICAgICAgICAgIHVzZXMgdGhlIEJpdEJha2UgdG9vbCB0byBidWlsZCBpbWFnZXMgYmFzZWQgb24gdGhlIHR5cGUgb2YgaW1hZ2UgeW91IHdhbnQgdG8gY3JlYXRlLgotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBCaXRCYWtlIGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7Jz5CaXRCYWtlIFVzZXIgTWFudWFsPC91bGluaz4uCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGJ1aWxkIHByb2Nlc3Mgc3VwcG9ydHMgc2V2ZXJhbCB0eXBlcyBvZiBpbWFnZXMgdG8gc2F0aXNmeSBkaWZmZXJlbnQgbmVlZHMuCi0gICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1pbWFnZXMnPkltYWdlczwvdWxpbms+IiBjaGFwdGVyCi0gICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yIGluZm9ybWF0aW9uIG9uCi0gICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBpbWFnZXMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8L29yZGVyZWRsaXN0PgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBZb3UgY2FuIHZpZXcgYSB2aWRlbyBwcmVzZW50YXRpb24gb24gIkJ1aWxkaW5nIEN1c3RvbSBFbWJlZGRlZCBJbWFnZXMgd2l0aCBZb2N0byIKLSAgICAgICAgICAgIGF0IDx1bGluayB1cmw9J2h0dHA6Ly9mcmVlLWVsZWN0cm9ucy5jb20vYmxvZy9lbGMtMjAxMS12aWRlb3MnPkZyZWUgRWxlY3Ryb25zPC91bGluaz4uCi0gICAgICAgICAgICBBZnRlciBnb2luZyB0byB0aGUgcGFnZSwganVzdCBzZWFyY2ggZm9yICJFbWJlZGRlZCIuCi0gICAgICAgICAgICBZb3UgY2FuIGFsc28gZmluZCBzdXBwbGVtZW50YWwgaW5mb3JtYXRpb24gaW4gdGhlCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyc+Ci0gICAgICAgICAgICBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgotICAgICAgICAgICAgRmluYWxseSwgdGhlcmUgaXMgaGVscGZ1bCBtYXRlcmlhbCBhbmQgbGlua3Mgb24gdGhpcwotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1dJS0lfVVJMOy93aWtpL1RyYW5zY3JpcHQ6X2NyZWF0aW5nX29uZV9nZW5lcmljX0F0b21fQlNQX2Zyb21fYW5vdGhlcic+d2lraSBwYWdlPC91bGluaz4uCi0gICAgICAgICAgICBBbHRob3VnaCBhIGJpdCBkYXRlZCwgeW91IG1pZ2h0IGZpbmQgdGhlIGluZm9ybWF0aW9uIG9uIHRoZSB3aWtpCi0gICAgICAgICAgICBoZWxwZnVsLgotICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0nbW9kaWZ5aW5nLXRoZS1rZXJuZWwnPgotICAgICAgICA8dGl0bGU+PGFuY2hvciBpZD0na2VybmVsLXNwb3QnIC8+TW9kaWZ5aW5nIHRoZSBLZXJuZWw8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgS2VybmVsIG1vZGlmaWNhdGlvbiBpbnZvbHZlcyBjaGFuZ2luZyB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwsIHdoaWNoIGNvdWxkIGludm9sdmUgY2hhbmdpbmcKLSAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcyB3ZWxsIGFzIGFkZGluZyBuZXcga2VybmVsIHJlY2lwZXMuCi0gICAgICAgICAgICBDb25maWd1cmF0aW9uIGNoYW5nZXMgY2FuIGJlIGFkZGVkIGluIHRoZSBmb3JtIG9mIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzLCB3aGlsZSByZWNpcGUKLSAgICAgICAgICAgIG1vZGlmaWNhdGlvbiBjb21lcyB0aHJvdWdoIHRoZSBrZXJuZWwncyA8ZmlsZW5hbWU+cmVjaXBlcy1rZXJuZWw8L2ZpbGVuYW1lPiBhcmVhCi0gICAgICAgICAgICBpbiBhIGtlcm5lbCBsYXllciB5b3UgY3JlYXRlLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbiBwcmVzZW50cyBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIFlvY3RvIFByb2plY3QKLSAgICAgICAgICAgIGtlcm5lbCBhcmNoaXRlY3R1cmUgYW5kIHRoZSBzdGVwcyB0byBtb2RpZnkgdGhlIGtlcm5lbC4KLSAgICAgICAgICAgIFlvdSBjYW4gcmVmZXJlbmNlIHRoZQotICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhdGNoaW5nLXRoZS1rZXJuZWwnPlBhdGNoaW5nIHRoZSBLZXJuZWw8L2xpbms+IiBzZWN0aW9uCi0gICAgICAgICAgICBmb3IgYW4gZXhhbXBsZSB0aGF0IGNoYW5nZXMgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBrZXJuZWwuCi0gICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbmZpZ3VyZSB0aGUga2VybmVsLCBzZWUgdGhlCi0gICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY29uZmlndXJpbmctdGhlLWtlcm5lbCc+Q29uZmlndXJpbmcgdGhlIEtlcm5lbDwvbGluaz4iIHNlY3Rpb24uCi0gICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUga2VybmVsIGFuZCBvbiBtb2RpZnlpbmcgdGhlIGtlcm5lbCwgc2VlIHRoZQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7Jz5Zb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWw8L3VsaW5rPi4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdrZXJuZWwtb3ZlcnZpZXcnPgotICAgICAgICAgICAgPHRpdGxlPktlcm5lbCBPdmVydmlldzwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRyYWRpdGlvbmFsbHksIHdoZW4gb25lIHRoaW5rcyBvZiBhIHBhdGNoZWQga2VybmVsLCB0aGV5IHRoaW5rIG9mIGEgYmFzZSBrZXJuZWwKLSAgICAgICAgICAgICAgICBzb3VyY2UgdHJlZSBhbmQgYSBmaXhlZCBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyBrZXJuZWwgcGF0Y2hlcy4KLSAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCwgaG93ZXZlciwgZW1wbG95cyBtZWNoYW5pc21zIHRoYXQsIGluIGEgc2Vuc2UsIHJlc3VsdCBpbiBhIGtlcm5lbCBzb3VyY2UKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3IuCi0gICAgICAgICAgICAgICAgQnkgdGhlIGVuZCBvZiB0aGlzIHNlY3Rpb24sIHRoaXMgYW5hbG9neSB3aWxsIGJlY29tZSBjbGVhcmVyLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgYSB3ZWIgaW50ZXJmYWNlIHRvIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBzb3VyY2UgcmVwb3NpdG9yaWVzIGF0Ci0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7Jz48L3VsaW5rPi4KLSAgICAgICAgICAgICAgICBJZiB5b3UgbG9vayBhdCB0aGUgaW50ZXJmYWNlLCB5b3Ugd2lsbCBzZWUgdG8gdGhlIGxlZnQgYSBncm91cGluZyBvZgotICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3JpZXMgdGl0bGVkICJZb2N0byBMaW51eCBLZXJuZWwuIgotICAgICAgICAgICAgICAgIFdpdGhpbiB0aGlzIGdyb3VwLCB5b3Ugd2lsbCBmaW5kIHNldmVyYWwga2VybmVscyBzdXBwb3J0ZWQgYnkKLSAgICAgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdDoKLSAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTQ8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0gVGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGFibGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgdG8gdXNlIHdpdGggdGhlIFlvY3RvCi0gICAgICAgICAgICAgICAgICAgICAgICBQcm9qZWN0IFJlbGVhc2VzIDEuNiBhbmQgMS43LgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBrZXJuZWwgaXMgYmFzZWQgb24gdGhlIExpbnV4IDMuMTQgcmVsZWFzZWQga2VybmVsLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xNzwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLSBBbgotICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbCwgdW5zdXBwb3J0ZWQgWW9jdG8gUHJvamVjdCBrZXJuZWwgdXNlZCB3aXRoCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCBSZWxlYXNlIDEuNy4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMga2VybmVsIGlzIGJhc2VkIG9uIHRoZSBMaW51eCAzLjE3IHJlbGVhc2VkIGtlcm5lbC4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTk8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0gVGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGFibGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgdG8gdXNlIHdpdGggdGhlIFlvY3RvCi0gICAgICAgICAgICAgICAgICAgICAgICBQcm9qZWN0IFJlbGVhc2UgMS44LgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBrZXJuZWwgaXMgYmFzZWQgb24gdGhlIExpbnV4IDMuMTkgcmVsZWFzZWQga2VybmVsLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tNC4xPC9maWxlbmFtZT48L2VtcGhhc2lzPiAtIFRoZQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhYmxlIFlvY3RvIFByb2plY3Qga2VybmVsIHRvIHVzZSB3aXRoIHRoZSBZb2N0bwotICAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdCBSZWxlYXNlIDIuMC4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMga2VybmVsIGlzIGJhc2VkIG9uIHRoZSBMaW51eCA0LjEgcmVsZWFzZWQga2VybmVsLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tNC40PC9maWxlbmFtZT48L2VtcGhhc2lzPiAtIFRoZQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhYmxlIFlvY3RvIFByb2plY3Qga2VybmVsIHRvIHVzZSB3aXRoIHRoZSBZb2N0bwotICAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdCBSZWxlYXNlIDIuMS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMga2VybmVsIGlzIGJhc2VkIG9uIHRoZSBMaW51eCA0LjQgcmVsZWFzZWQga2VybmVsLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tZGV2PC9maWxlbmFtZT48L2VtcGhhc2lzPiAtIEEKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IGtlcm5lbCBiYXNlZCBvbiB0aGUgbGF0ZXN0IHVwc3RyZWFtIHJlbGVhc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgTG9uZyBUZXJtIFN1cHBvcnQgSW5pdGlhdGl2ZSAoTFRTSSkgZm9yIFlvY3RvIFByb2plY3Qga2VybmVscwotICAgICAgICAgICAgICAgICAgICBpcyBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciBZb2N0byBQcm9qZWN0IHJlbGVhc2VzIDEuNywgMS44LCBhbmQgMi4wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBMVFNJIGtlcm5lbCBpcyA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xNDwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciBZb2N0byBQcm9qZWN0IHJlbGVhc2UgMi4xLCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVFNJIGtlcm5lbCBpcyA8ZmlsZW5hbWU+bGludXgteW9jdG8tNC4xPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIGtlcm5lbHMgYXJlIG1haW50YWluZWQgdXNpbmcgdGhlIEdpdCByZXZpc2lvbiBjb250cm9sIHN5c3RlbQotICAgICAgICAgICAgICAgIHRoYXQgc3RydWN0dXJlcyB0aGVtIHVzaW5nIHRoZSBmYW1pbGlhciAidHJlZSIsICJicmFuY2giLCBhbmQgImxlYWYiIHNjaGVtZS4KLSAgICAgICAgICAgICAgICBCcmFuY2hlcyByZXByZXNlbnQgZGl2ZXJzaW9ucyBmcm9tIGdlbmVyYWwgY29kZSB0byBtb3JlIHNwZWNpZmljIGNvZGUsIHdoaWxlIGxlYXZlcwotICAgICAgICAgICAgICAgIHJlcHJlc2VudCB0aGUgZW5kLXBvaW50cyBmb3IgYSBjb21wbGV0ZSBhbmQgdW5pcXVlIGtlcm5lbCB3aG9zZSBzb3VyY2UgZmlsZXMsCi0gICAgICAgICAgICAgICAgd2hlbiBnYXRoZXJlZCBmcm9tIHRoZSByb290IG9mIHRoZSB0cmVlIHRvIHRoZSBsZWFmLCBhY2N1bXVsYXRlIHRvIGNyZWF0ZSB0aGUgZmlsZXMKLSAgICAgICAgICAgICAgICBuZWNlc3NhcnkgZm9yIGEgc3BlY2lmaWMgcGllY2Ugb2YgaGFyZHdhcmUgYW5kIGl0cyBmZWF0dXJlcy4KLSAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBkaXNwbGF5cyB0aGlzIGNvbmNlcHQ6Ci0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTEucG5nIgotICAgICAgICAgICAgICAgICAgICB3aWR0aD0iNmluIiBkZXB0aD0iNmluIiBhbGlnbj0iY2VudGVyIiBzY2FsZT0iMTAwIiAvPgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBXaXRoaW4gdGhlIGZpZ3VyZSwgdGhlICJLZXJuZWwub3JnIEJyYW5jaCBQb2ludCIgcmVwcmVzZW50cyB0aGUgcG9pbnQgaW4gdGhlIHRyZWUKLSAgICAgICAgICAgICAgICB3aGVyZSBhIHN1cHBvcnRlZCBiYXNlIGtlcm5lbCBpcyBtb2RpZmllZCBmcm9tIHRoZSBMaW51eCBrZXJuZWwuCi0gICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgY291bGQgYmUgdGhlIGJyYW5jaCBwb2ludCBmb3IgdGhlIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE5PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBrZXJuZWwuCi0gICAgICAgICAgICAgICAgVGh1cywgZXZlcnl0aGluZyBmdXJ0aGVyIHRvIHRoZSByaWdodCBpbiB0aGUgc3RydWN0dXJlIGlzIGJhc2VkIG9uIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE5PC9maWxlbmFtZT4ga2VybmVsLgotICAgICAgICAgICAgICAgIEJyYW5jaCBwb2ludHMgdG8gdGhlIHJpZ2h0IGluIHRoZSBmaWd1cmUgcmVwcmVzZW50IHdoZXJlIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE5PC9maWxlbmFtZT4ga2VybmVsIGlzIG1vZGlmaWVkIGZvciBzcGVjaWZpYyBoYXJkd2FyZQotICAgICAgICAgICAgICAgIG9yIHR5cGVzIG9mIGtlcm5lbHMsIHN1Y2ggYXMgcmVhbC10aW1lIGtlcm5lbHMuCi0gICAgICAgICAgICAgICAgRWFjaCBsZWFmIHRodXMgcmVwcmVzZW50cyB0aGUgZW5kLXBvaW50IGZvciBhIGtlcm5lbCBkZXNpZ25lZCB0byBydW4gb24gYSBzcGVjaWZpYwotICAgICAgICAgICAgICAgIHRhcmdldGVkIGRldmljZS4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIG92ZXJhbGwgcmVzdWx0IGlzIGEgR2l0LW1haW50YWluZWQgcmVwb3NpdG9yeSBmcm9tIHdoaWNoIGFsbCB0aGUgc3VwcG9ydGVkCi0gICAgICAgICAgICAgICAga2VybmVsIHR5cGVzIGNhbiBiZSBkZXJpdmVkIGZvciBhbGwgdGhlIHN1cHBvcnRlZCBkZXZpY2VzLgotICAgICAgICAgICAgICAgIEEgYmlnIGFkdmFudGFnZSB0byB0aGlzIHNjaGVtZSBpcyB0aGUgc2hhcmluZyBvZiBjb21tb24gZmVhdHVyZXMgYnkga2VlcGluZyB0aGVtIGluCi0gICAgICAgICAgICAgICAgImxhcmdlciIgYnJhbmNoZXMgd2l0aGluIHRoZSB0cmVlLgotICAgICAgICAgICAgICAgIFRoaXMgcHJhY3RpY2UgZWxpbWluYXRlcyByZWR1bmRhbnQgc3RvcmFnZSBvZiBzaW1pbGFyIGZlYXR1cmVzIHNoYXJlZCBhbW9uZyBrZXJuZWxzLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICBLZWVwIGluIG1pbmQgdGhlIGZpZ3VyZSBkb2VzIG5vdCB0YWtlIGludG8gYWNjb3VudCBhbGwgdGhlIHN1cHBvcnRlZCBZb2N0bwotICAgICAgICAgICAgICAgIFByb2plY3Qga2VybmVsIHR5cGVzLCBidXQgcmF0aGVyIHNob3dzIGEgc2luZ2xlIGdlbmVyaWMga2VybmVsIGp1c3QgZm9yIGNvbmNlcHR1YWwgcHVycG9zZXMuCi0gICAgICAgICAgICAgICAgQWxzbyBrZWVwIGluIG1pbmQgdGhhdCB0aGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSBZb2N0byBQcm9qZWN0IHNvdXJjZSByZXBvc2l0b3JpZXMKLSAgICAgICAgICAgICAgICB0aGF0IGFyZSBlaXRoZXIgcHVsbGVkIGZyb20gZHVyaW5nIHRoZSBidWlsZCBvciBlc3RhYmxpc2hlZCBvbiB0aGUgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0KLSAgICAgICAgICAgICAgICBwcmlvciB0byB0aGUgYnVpbGQgYnkgZWl0aGVyIGNsb25pbmcgYSBwYXJ0aWN1bGFyIGtlcm5lbCdzIEdpdCByZXBvc2l0b3J5IG9yIGJ5Ci0gICAgICAgICAgICAgICAgZG93bmxvYWRpbmcgYW5kIHVucGFja2luZyBhIHRhcmJhbGwuCi0gICAgICAgICAgICA8L25vdGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFVwc3RyZWFtIHN0b3JhZ2Ugb2YgYWxsIHRoZSBhdmFpbGFibGUga2VybmVsIHNvdXJjZSBjb2RlIGlzIG9uZSB0aGluZywgd2hpbGUKLSAgICAgICAgICAgICAgICByZXByZXNlbnRpbmcgYW5kIHVzaW5nIHRoZSBjb2RlIG9uIHlvdXIgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0gaXMgYW5vdGhlci4KLSAgICAgICAgICAgICAgICBDb25jZXB0dWFsbHksIHlvdSBjYW4gdGhpbmsgb2YgdGhlIGtlcm5lbCBzb3VyY2UgcmVwb3NpdG9yaWVzIGFzIGFsbCB0aGUKLSAgICAgICAgICAgICAgICBzb3VyY2UgZmlsZXMgbmVjZXNzYXJ5IGZvciBhbGwgdGhlIHN1cHBvcnRlZCBrZXJuZWxzLgotICAgICAgICAgICAgICAgIEFzIGEgZGV2ZWxvcGVyLCB5b3UgYXJlIGp1c3QgaW50ZXJlc3RlZCBpbiB0aGUgc291cmNlIGZpbGVzIGZvciB0aGUga2VybmVsIG9uCi0gICAgICAgICAgICAgICAgd2hpY2ggeW91IGFyZSB3b3JraW5nLgotICAgICAgICAgICAgICAgIEFuZCwgZnVydGhlcm1vcmUsIHlvdSBuZWVkIHRoZW0gYXZhaWxhYmxlIG9uIHlvdXIgaG9zdCBzeXN0ZW0uCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEtlcm5lbCBzb3VyY2UgY29kZSBpcyBhdmFpbGFibGUgb24geW91ciBob3N0IHN5c3RlbSBhIGNvdXBsZSBvZiBkaWZmZXJlbnQKLSAgICAgICAgICAgICAgICB3YXlzLgotICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgd29ya2luZyBpbiB0aGUga2VybmVsIGFsbCB0aGUgdGltZSwgeW91IHByb2JhYmx5IHdvdWxkIHdhbnQKLSAgICAgICAgICAgICAgICB0byBzZXQgdXAgeW91ciBvd24gbG9jYWwgR2l0IHJlcG9zaXRvcnkgb2YgdGhlIGtlcm5lbCB0cmVlLgotICAgICAgICAgICAgICAgIElmIHlvdSBqdXN0IG5lZWQgdG8gbWFrZSBzb21lIHBhdGNoZXMgdG8gdGhlIGtlcm5lbCwgeW91IGNhbiBhY2Nlc3MKLSAgICAgICAgICAgICAgICB0ZW1wb3Jhcnkga2VybmVsIHNvdXJjZSBmaWxlcyB0aGF0IHdlcmUgZXh0cmFjdGVkIGFuZCB1c2VkCi0gICAgICAgICAgICAgICAgZHVyaW5nIGEgYnVpbGQuCi0gICAgICAgICAgICAgICAgV2Ugd2lsbCBqdXN0IHRhbGsgYWJvdXQgd29ya2luZyB3aXRoIHRoZSB0ZW1wb3Jhcnkgc291cmNlIGNvZGUuCi0gICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGdldCBrZXJuZWwgc291cmNlIGNvZGUgb250byB5b3VyCi0gICAgICAgICAgICAgICAgaG9zdCBzeXN0ZW0sIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbG9jYWwta2VybmVsLWZpbGVzJz5Zb2N0byBQcm9qZWN0IEtlcm5lbDwvbGluaz4iCi0gICAgICAgICAgICAgICAgYnVsbGV0ZWQgaXRlbSBlYXJsaWVyIGluIHRoZSBtYW51YWwuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFdoYXQgaGFwcGVucyBkdXJpbmcgdGhlIGJ1aWxkPwotICAgICAgICAgICAgICAgIFdoZW4geW91IGJ1aWxkIHRoZSBrZXJuZWwgb24geW91ciBkZXZlbG9wbWVudCBzeXN0ZW0sIGFsbCBmaWxlcyBuZWVkZWQgZm9yIHRoZSBidWlsZAotICAgICAgICAgICAgICAgIGFyZSB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgcmVwb3NpdG9yaWVzIHBvaW50ZWQgdG8gYnkgdGhlCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPiB2YXJpYWJsZQotICAgICAgICAgICAgICAgIGFuZCBnYXRoZXJlZCBpbiBhIHRlbXBvcmFyeSB3b3JrIGFyZWEKLSAgICAgICAgICAgICAgICB3aGVyZSB0aGV5IGFyZSBzdWJzZXF1ZW50bHkgdXNlZCB0byBjcmVhdGUgdGhlIHVuaXF1ZSBrZXJuZWwuCi0gICAgICAgICAgICAgICAgVGh1cywgaW4gYSBzZW5zZSwgdGhlIHByb2Nlc3MgY29uc3RydWN0cyBhIGxvY2FsIHNvdXJjZSB0cmVlIHNwZWNpZmljIHRvIHlvdXIKLSAgICAgICAgICAgICAgICBrZXJuZWwgdG8gZ2VuZXJhdGUgdGhlIG5ldyBrZXJuZWwgaW1hZ2UgLSBhIHNvdXJjZSBnZW5lcmF0b3IgaWYgeW91IHdpbGwuCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBmaWd1cmUgc2hvd3MgdGhlIHRlbXBvcmFyeSBmaWxlIHN0cnVjdHVyZQotICAgICAgICAgICAgICAgIGNyZWF0ZWQgb24geW91ciBob3N0IHN5c3RlbSB3aGVuIHRoZSBidWlsZCBvY2N1cnMuCi0gICAgICAgICAgICAgICAgVGhpcwotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPiBjb250YWlucyBhbGwgdGhlCi0gICAgICAgICAgICAgICAgc291cmNlIGZpbGVzIHVzZWQgZHVyaW5nIHRoZSBidWlsZC4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0yLWdlbmVyaWMucG5nIgotICAgICAgICAgICAgICAgICAgICB3aWR0aD0iNmluIiBkZXB0aD0iNWluIiBhbGlnbj0iY2VudGVyIiBzY2FsZT0iMTAwIiAvPgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBBZ2FpbiwgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gdGhlIFlvY3RvIFByb2plY3Qga2VybmVsJ3MKLSAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUgYW5kIGl0cyBicmFuY2hpbmcgc3RyYXRlZ3ksIHNlZSB0aGUKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsnPllvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbDwvdWxpbms+LgotICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyByZWZlcmVuY2UgdGhlCi0gICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhdGNoaW5nLXRoZS1rZXJuZWwnPlBhdGNoaW5nIHRoZSBLZXJuZWw8L2xpbms+IgotICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGEgZGV0YWlsZWQgZXhhbXBsZSB0aGF0IG1vZGlmaWVzIHRoZSBrZXJuZWwuCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0na2VybmVsLW1vZGlmaWNhdGlvbi13b3JrZmxvdyc+Ci0gICAgICAgICAgICA8dGl0bGU+S2VybmVsIE1vZGlmaWNhdGlvbiBXb3JrZmxvdzwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoaXMgaWxsdXN0cmF0aW9uIGFuZCB0aGUgZm9sbG93aW5nIGxpc3Qgc3VtbWFyaXplcyB0aGUga2VybmVsIG1vZGlmaWNhdGlvbiBnZW5lcmFsIHdvcmtmbG93LgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMva2VybmVsLWRldi1mbG93LnBuZyIKLSAgICAgICAgICAgICAgICAgICAgd2lkdGg9IjZpbiIgZGVwdGg9IjVpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZXQgdXAgeW91ciBob3N0IGRldmVsb3BtZW50IHN5c3RlbSB0byBzdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdDwvZW1waGFzaXM+OiAgU2VlCi0gICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyN0aGUtbGludXgtZGlzdHJvJz5UaGUgTGludXggRGlzdHJpYnV0aW9uPC91bGluaz4iIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjcGFja2FnZXMnPlRoZSBCdWlsZCBIb3N0IFBhY2thZ2VzPC91bGluaz4iIHNlY3Rpb25zIGJvdGgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0IGZvciByZXF1aXJlbWVudHMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXN0YWJsaXNoIGEgbG9jYWwgY29weSBvZiBwcm9qZWN0IGZpbGVzIG9uIHlvdXIKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbTwvZW1waGFzaXM+OiAgSGF2aW5nIHRoZSA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UKLSAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeTwvbGluaz4gb24geW91ciBzeXN0ZW0gZ2l2ZXMgeW91IGFjY2VzcyB0byB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgdG9vbHMKLSAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkLgotICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBnZXQgdGhlc2UgZmlsZXMsIHNlZSB0aGUgYnVsbGV0ZWQgaXRlbQotICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2xvY2FsLXlwLXJlbGVhc2UnPllvY3RvIFByb2plY3QgUmVsZWFzZTwvbGluaz4iIGVhcmxpZXIgaW4gdGhpcyBtYW51YWwuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Fc3RhYmxpc2ggdGhlIHRlbXBvcmFyeSBrZXJuZWwgc291cmNlIGZpbGVzPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBUZW1wb3Jhcnkga2VybmVsIHNvdXJjZSBmaWxlcyBhcmUga2VwdCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZCBieSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2hlbiB5b3UgcnVuIEJpdEJha2UuCi0gICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBuZXZlciBidWlsdCB0aGUga2VybmVsIGluIHdoaWNoIHlvdSBhcmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZXN0ZWQsIHlvdSBuZWVkIHRvIHJ1biBhbiBpbml0aWFsIGJ1aWxkIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICBlc3RhYmxpc2ggbG9jYWwga2VybmVsIHNvdXJjZSBmaWxlcy48L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3UgYXJlIGJ1aWxkaW5nIGFuIGltYWdlIGZvciB0aGUgZmlyc3QgdGltZSwgeW91IG5lZWQgdG8gZ2V0IHRoZSBidWlsZAotICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgcmVhZHkgYnkgc291cmNpbmcgYW4gZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnY8L2ZpbGVuYW1lPiBvcgotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+KS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhbHNvIG5lZWQgdG8gYmUgc3VyZSB0d28ga2V5IGNvbmZpZ3VyYXRpb24gZmlsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+KQotICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGNvbmZpZ3VyZWQgYXBwcm9wcmlhdGVseS48L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZW50aXJlIHByb2Nlc3MgZm9yIGJ1aWxkaW5nIGFuIGltYWdlIGlzIG92ZXJ2aWV3ZWQgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyNxcy1idWlsZGluZy1pbWFnZXMnPkJ1aWxkaW5nIEltYWdlczwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydC4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtaWdodCB3YW50IHRvIHJlZmVyZW5jZSB0aGlzIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gQml0QmFrZSBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsnPkJpdEJha2UgVXNlciBNYW51YWw8L3VsaW5rPi4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBidWlsZCBwcm9jZXNzIHN1cHBvcnRzIHNldmVyYWwgdHlwZXMgb2YgaW1hZ2VzIHRvIHNhdGlzZnkgZGlmZmVyZW50IG5lZWRzLgotICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWltYWdlcyc+SW1hZ2VzPC91bGluaz4iIGNoYXB0ZXIgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yIGluZm9ybWF0aW9uIG9uIHN1cHBvcnRlZCBpbWFnZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NYWtlIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBzb3VyY2UgY29kZSBpZgotICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYWJsZTwvZW1waGFzaXM+OiAgTW9kaWZ5aW5nIHRoZSBrZXJuZWwgZG9lcyBub3QgYWx3YXlzIG1lYW4gZGlyZWN0bHkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5naW5nIHNvdXJjZSBmaWxlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSBoYXZlIHRvIGRvIHRoaXMsIHlvdSBtYWtlIHRoZSBjaGFuZ2VzIHRvIHRoZSBmaWxlcyBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIERpcmVjdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NYWtlIGtlcm5lbCBjb25maWd1cmF0aW9uIGNoYW5nZXMgaWYgYXBwbGljYWJsZTwvZW1waGFzaXM+OgotICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91ciBzaXR1YXRpb24gY2FsbHMgZm9yIGNoYW5naW5nIHRoZSBrZXJuZWwncwotICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiwgeW91IGNhbiB1c2UKLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyNnZW5lcmF0aW5nLWNvbmZpZ3VyYXRpb24tZmlsZXMnPjxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT48L3VsaW5rPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGFsbG93cyB5b3UgdG8gaW50ZXJhY3RpdmVseSBkZXZlbG9wIGFuZCB0ZXN0IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBjaGFuZ2VzIHlvdSBhcmUgbWFraW5nIHRvIHRoZSBrZXJuZWwuCi0gICAgICAgICAgICAgICAgICAgICAgICBTYXZpbmcgY2hhbmdlcyB5b3UgbWFrZSB3aXRoCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IHVwZGF0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBrZXJuZWwncyA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuCi0gICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+V2FybmluZzwvdGl0bGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ5IHRvIHJlc2lzdCB0aGUgdGVtcHRhdGlvbiB0byBkaXJlY3RseSBlZGl0IGFuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkgYXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL3N5c3Jvb3RzLzxyZXBsYWNlYWJsZT5tYWNoaW5lLW5hbWU8L3JlcGxhY2VhYmxlPi9rZXJuZWw8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb2luZyBzbywgY2FuIHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHRzIHdoZW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSByZWdlbmVyYXRlcyB0aGUgY29uZmlndXJhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMgbWFkZSB1c2luZyA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbmQgeW91IGhhdmUgc2F2ZWQgdGhlbSwgeW91IGNhbiBkaXJlY3RseSBjb21wYXJlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0aW5nIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSBhZ2FpbnN0IGFuCi0gICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZyBvcmlnaW5hbCBhbmQgZ2F0aGVyIHRob3NlIGNoYW5nZXMgaW50byBhCi0gICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdjcmVhdGluZy1jb25maWctZnJhZ21lbnRzJz5jb25maWd1cmF0aW9uIGZyYWdtZW50IGZpbGU8L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICB0byBiZSByZWZlcmVuY2VkIGZyb20gd2l0aGluIHRoZSBrZXJuZWwncwotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUuPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5BZGRpdGlvbmFsbHksIGlmIHlvdSBhcmUgd29ya2luZyBpbiBhIEJTUCBsYXllcgotICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5lZWQgdG8gbW9kaWZ5IHRoZSBCU1AncyBrZXJuZWwncyBjb25maWd1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNhbiB1c2UgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNtYW5hZ2luZy1rZXJuZWwtcGF0Y2hlcy1hbmQtY29uZmlnLWl0ZW1zLXdpdGgteW9jdG8ta2VybmVsJz48ZmlsZW5hbWU+eW9jdG8ta2VybmVsPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0IGFzIHdlbGwgYXMgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsPC9maWxlbmFtZT4gc2NyaXB0IGxldHMKLSAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBpbnRlcmFjdGl2ZWx5IHNldCB1cCBrZXJuZWwgY29uZmlndXJhdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SZWJ1aWxkIHRoZSBrZXJuZWwgaW1hZ2Ugd2l0aCB5b3VyIGNoYW5nZXM8L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlYnVpbGRpbmcgdGhlIGtlcm5lbCBpbWFnZSBhcHBsaWVzIHlvdXIgY2hhbmdlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLSAgICA8L3NlY3Rpb24+Ci08L3NlY3Rpb24+Ci0KLTxzZWN0aW9uIGlkPSdhcHBsaWNhdGlvbi1kZXZlbG9wbWVudC13b3JrZmxvdy11c2luZy1hbi1zZGsnPgotICAgIDx0aXRsZT5BcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBXb3JrZmxvdyBVc2luZyBhbiBTREs8L3RpdGxlPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIFN0YW5kYXJkIGFuZCBleHRlbnNpYmxlIFNvZnR3YXJlIERldmVsb3BtZW50IEtpdHMgKFNESykgbWFrZSBpdCBlYXN5Ci0gICAgICAgIHRvIGRldmVsb3AgYXBwbGljYXRpb25zIGluc2lkZSBvciBvdXRzaWRlIG9mIHRoZSBZb2N0byBQcm9qZWN0Ci0gICAgICAgIGRldmVsb3BtZW50IGVudmlyb25tZW50LgotICAgICAgICBUb29scyBleGlzdCB0byBoZWxwIHRoZSBhcHBsaWNhdGlvbiBkZXZlbG9wZXIgZHVyaW5nIGFueSBwaGFzZQotICAgICAgICBvZiBkZXZlbG9wbWVudC4KLSAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpbnN0YWxsIGFuZCB1c2UgYW4gU0RLLCBzZWUgdGhlCi0gICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1NES19VUkw7I3Nkay1pbnRybyc+WW9jdG8gUHJvamVjdCBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKFNESykgRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPi4KLSAgICA8L3BhcmE+Ci08L3NlY3Rpb24+Ci0KLTxzZWN0aW9uIGlkPSJkZXYtbW9kaWZ5aW5nLXNvdXJjZS1jb2RlIj4KLSAgICA8dGl0bGU+TW9kaWZ5aW5nIFNvdXJjZSBDb2RlPC90aXRsZT4KLQotICAgIDxwYXJhPgotICAgICAgICBBIGNvbW1vbiBkZXZlbG9wbWVudCB3b3JrZmxvdyBjb25zaXN0cyBvZiBtb2RpZnlpbmcgcHJvamVjdCBzb3VyY2UKLSAgICAgICAgZmlsZXMgdGhhdCBhcmUgZXh0ZXJuYWwgdG8gdGhlIFlvY3RvIFByb2plY3QgYW5kIHRoZW4gaW50ZWdyYXRpbmcKLSAgICAgICAgdGhhdCBwcm9qZWN0J3MgYnVpbGQgb3V0cHV0IGludG8gYW4gaW1hZ2UgYnVpbHQgdXNpbmcgdGhlCi0gICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCi0gICAgICAgIEdpdmVuIHRoaXMgc2NlbmFyaW8sIGRldmVsb3BtZW50IGVuZ2luZWVycyB0eXBpY2FsbHkgd2FudCB0byBzdGljawotICAgICAgICB0byB0aGVpciBmYW1pbGlhciBwcm9qZWN0IGRldmVsb3BtZW50IHRvb2xzIGFuZCBtZXRob2RzLCB3aGljaCBhbGxvd3MKLSAgICAgICAgdGhlbSB0byBqdXN0IGZvY3VzIG9uIHRoZSBwcm9qZWN0LgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgICBTZXZlcmFsIHdvcmtmbG93cyBleGlzdCB0aGF0IGFsbG93IHlvdSB0byBkZXZlbG9wLCBidWlsZCwgYW5kIHRlc3QKLSAgICAgICAgY29kZSB0aGF0IGlzIGdvaW5nIHRvIGJlIGludGVncmF0ZWQgaW50byBhbiBpbWFnZSBidWlsdCB1c2luZyB0aGUKLSAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KLSAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0d286Ci0gICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBBIHNldCBvZiB0b29scyB0byBhaWQgaW4gd29ya2luZyBvbiB0aGUgc291cmNlIGNvZGUgYnVpbHQgYnkKLSAgICAgICAgICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KLSAgICAgICAgICAgICAgICBTZWN0aW9uCi0gICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWRldnRvb2wtaW4teW91ci13b3JrZmxvdyc+VXNpbmcgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBpbiBZb3VyIFdvcmtmbG93PC9saW5rPiIKLSAgICAgICAgICAgICAgICBkZXNjcmliZXMgdGhpcyB3b3JrZmxvdy4KLSAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCBtb3JlIGluZm9ybWF0aW9uIHRoYXQgc2hvd2Nhc2VzIHRoZSB3b3JrZmxvdywgY2xpY2sKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL2RyaXZlLmdvb2dsZS5jb20vYS9saW5hcm8ub3JnL2ZpbGUvZC8wQjNLR3pZNWZXN2xhVERWeFVYbzNVRFJ2ZDJzL3ZpZXcnPmhlcmU8L3VsaW5rPgotICAgICAgICAgICAgICAgIGZvciBhIHByZXNlbnRhdGlvbiBieSBUcmV2b3IgV29lcm5lciB0aGF0LCB3aGlsZSBzb21ld2hhdCBkYXRlZCwKLSAgICAgICAgICAgICAgICBwcm92aWRlcyBkZXRhaWxlZCBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIGFuZCBhIGNvbXBsZXRlCi0gICAgICAgICAgICAgICAgd29ya2luZyB0dXRvcmlhbC4KLSAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PHVsaW5rIHVybD0naHR0cDovL3NhdmFubmFoLm5vbmdudS5vcmcvcHJvamVjdHMvcXVpbHQnPlF1aWx0PC91bGluaz46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBBIHBvd2VyZnVsIHRvb2wgdGhhdCBhbGxvd3MgeW91IHRvIGNhcHR1cmUgc291cmNlCi0gICAgICAgICAgICAgICAgY29kZSBjaGFuZ2VzIHdpdGhvdXQgaGF2aW5nIGEgY2xlYW4gc291cmNlIHRyZWUuCi0gICAgICAgICAgICAgICAgV2hpbGUgUXVpbHQgaXMgbm90IHRoZSBwcmVmZXJyZWQgd29ya2Zsb3cgb2YgdGhlIHR3bywgdGhpcwotICAgICAgICAgICAgICAgIHNlY3Rpb24gaW5jbHVkZXMgaXQgZm9yIHVzZXJzIHRoYXQgYXJlIGNvbW1pdHRlZCB0byB1c2luZwotICAgICAgICAgICAgICAgIHRoZSB0b29sLgotICAgICAgICAgICAgICAgIFNlZSB0aGUKLSAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctYS1xdWlsdC13b3JrZmxvdyc+VXNpbmcgUXVpbHQgaW4gWW91ciBXb3JrZmxvdzwvbGluaz4iCi0gICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPC9wYXJhPgotCi0gICAgPHNlY3Rpb24gaWQ9J3VzaW5nLWRldnRvb2wtaW4teW91ci13b3JrZmxvdyc+Ci0gICAgICAgIDx0aXRsZT5Vc2luZyA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGluIFlvdXIgV29ya2Zsb3c8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQXMgbWVudGlvbmVkIGVhcmxpZXIsIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gaGVscHMKLSAgICAgICAgICAgIHlvdSBlYXNpbHkgZGV2ZWxvcCBwcm9qZWN0cyB3aG9zZSBidWlsZCBvdXRwdXQgbXVzdCBiZSBwYXJ0IG9mCi0gICAgICAgICAgICBhbiBpbWFnZSBidWlsdCB1c2luZyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhyZWUgZW50cnkgcG9pbnRzIGV4aXN0IHRoYXQgYWxsb3cgeW91IHRvIGRldmVsb3AgdXNpbmcKLSAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT46Ci0gICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT48L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kZXZ0b29sIG1vZGlmeTwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZGV2dG9vbCB1cGdyYWRlPC9maWxlbmFtZT48L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbiBwcmVzZW50cyB0aGVzZSB3b3JrZmxvd3MuCi0gICAgICAgICAgICBTZWUgdGhlCi0gICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWRldnRvb2wtcmVmZXJlbmNlJz48ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+Jm5ic3A7UXVpY2sgUmVmZXJlbmNlPC91bGluaz4iCi0gICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsIGZvciBhCi0gICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IHF1aWNrIHJlZmVyZW5jZS4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSd1c2UtZGV2dG9vbC10by1pbnRlZ3JhdGUtbmV3LWNvZGUnPgotICAgICAgICAgICAgPHRpdGxlPlVzZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiB0byBBZGQgYW4gQXBwbGljYXRpb248L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gY29tbWFuZCBnZW5lcmF0ZXMKLSAgICAgICAgICAgICAgICBhIG5ldyByZWNpcGUgYmFzZWQgb24gZXhpc3Rpbmcgc291cmNlIGNvZGUuCi0gICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIHRha2VzIGFkdmFudGFnZSBvZiB0aGUKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNkZXZ0b29sLXRoZS13b3Jrc3BhY2UtbGF5ZXItc3RydWN0dXJlJz53b3Jrc3BhY2U8L3VsaW5rPgotICAgICAgICAgICAgICAgIGxheWVyIHRoYXQgbWFueSA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGNvbW1hbmRzCi0gICAgICAgICAgICAgICAgdXNlLgotICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kIGlzIGZsZXhpYmxlIGVub3VnaCB0byBhbGxvdyB5b3UgdG8gZXh0cmFjdCBzb3VyY2UKLSAgICAgICAgICAgICAgICBjb2RlIGludG8gYm90aCB0aGUgd29ya3NwYWNlIG9yIGEgc2VwYXJhdGUgbG9jYWwgR2l0IHJlcG9zaXRvcnkKLSAgICAgICAgICAgICAgICBhbmQgdG8gdXNlIGV4aXN0aW5nIGNvZGUgdGhhdCBkb2VzIG5vdCBuZWVkIHRvIGJlIGV4dHJhY3RlZC4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHlvdXIgcGFydGljdWxhciBzY2VuYXJpbywgdGhlIGFyZ3VtZW50cyBhbmQgb3B0aW9ucwotICAgICAgICAgICAgICAgIHlvdSB1c2Ugd2l0aCA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBmb3JtIGRpZmZlcmVudAotICAgICAgICAgICAgICAgIGNvbWJpbmF0aW9ucy4KLSAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGRpYWdyYW0gc2hvd3MgY29tbW9uIGRldmVsb3BtZW50IGZsb3dzCi0gICAgICAgICAgICAgICAgeW91IHdvdWxkIHVzZSB3aXRoIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIGNvbW1hbmQ6Ci0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZXZ0b29sLWFkZC1mbG93LnBuZyIgYWxpZ249ImNlbnRlciIgLz4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdlbmVyYXRpbmcgdGhlIE5ldyBSZWNpcGU8L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0b3AgcGFydCBvZiB0aGUgZmxvdyBzaG93cyB0aHJlZSBzY2VuYXJpb3MgYnkgd2hpY2gKLSAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBjb3VsZCB1c2UgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlIGEgcmVjaXBlIGJhc2VkIG9uIGV4aXN0aW5nIHNvdXJjZSBjb2RlLjwvcGFyYT4KLQotICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SW4gYSBzaGFyZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQsIGl0IGlzCi0gICAgICAgICAgICAgICAgICAgICAgICB0eXBpY2FsIHdoZXJlIG90aGVyIGRldmVsb3BlcnMgYXJlIHJlc3BvbnNpYmxlIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgdmFyaW91cyBhcmVhcyBvZiBzb3VyY2UgY29kZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIEFzIGEgZGV2ZWxvcGVyLCB5b3UgYXJlIHByb2JhYmx5IGludGVyZXN0ZWQgaW4gdXNpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgc291cmNlIGNvZGUgYXMgcGFydCBvZiB5b3VyIGRldmVsb3BtZW50IHVzaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdC4KLSAgICAgICAgICAgICAgICAgICAgICAgIEFsbCB5b3UgbmVlZCBpcyBhY2Nlc3MgdG8gdGhlIGNvZGUsIGEgcmVjaXBlLCBhbmQgYQotICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlZCBhcmVhIGluIHdoaWNoIHRvIGRvIHlvdXIgd29yay48L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPldpdGhpbiB0aGUgZGlhZ3JhbSwgdGhyZWUgcG9zc2libGUgc2NlbmFyaW9zCi0gICAgICAgICAgICAgICAgICAgICAgICBmZWVkIGludG8gdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IHdvcmtmbG93OgotICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxlZnQ8L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGxlZnQgc2NlbmFyaW8gcmVwcmVzZW50cyBhIGNvbW1vbiBzaXR1YXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgdGhlIHNvdXJjZSBjb2RlIGRvZXMgbm90IGV4aXN0IGxvY2FsbHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5lZWRzIHRvIGJlIGV4dHJhY3RlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBzaXR1YXRpb24sIHlvdSBqdXN0IGxldCBpdCBnZXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkIHRvIHRoZSBkZWZhdWx0IHdvcmtzcGFjZSAtIHlvdSBkbyBub3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudCBpdCBpbiBzb21lIHNwZWNpZmljIGxvY2F0aW9uIG91dHNpZGUgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzcGFjZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGh1cywgZXZlcnl0aGluZyB5b3UgbmVlZCB3aWxsIGJlIGxvY2F0ZWQgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzcGFjZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGRldnRvb2wgYWRkIDxyZXBsYWNlYWJsZT5yZWNpcGUgZmV0Y2h1cmk8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpdGggdGhpcyBjb21tYW5kLCA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZXMgYSByZWNpcGUgYW5kIGFuIGFwcGVuZCBmaWxlIGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc3BhY2UgYXMgd2VsbCBhcyBleHRyYWN0cyB0aGUgdXBzdHJlYW0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlIGZpbGVzIGludG8gYSBsb2NhbCBHaXQgcmVwb3NpdG9yeSBhbHNvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgPGZpbGVuYW1lPnNvdXJjZXM8L2ZpbGVuYW1lPiBmb2xkZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWlkZGxlPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtaWRkbGUgc2NlbmFyaW8gYWxzbyByZXByZXNlbnRzIGEgc2l0dWF0aW9uIHdoZXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzb3VyY2UgY29kZSBkb2VzIG5vdCBleGlzdCBsb2NhbGx5LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBjb2RlIGlzIGFnYWluIHVwc3RyZWFtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBuZWVkcyB0byBiZSBleHRyYWN0ZWQgdG8gc29tZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBhcmVhIC0gdGhpcyB0aW1lIG91dHNpZGUgb2YgdGhlIGRlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NwYWNlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiByZXF1aXJlZCwgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHdheXMgY3JlYXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIEdpdCByZXBvc2l0b3J5IGxvY2FsbHkgZHVyaW5nIHRoZSBleHRyYWN0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgdGhlIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPnNyY3RyZWU8L3JlcGxhY2VhYmxlPiBpbiB0aGlzIGNhc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcyB3aGVyZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gY29tbWFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGxvY2F0ZSB0aGUgZXh0cmFjdGVkIGNvZGUgb3V0c2lkZSBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NwYWNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZGV2dG9vbCBhZGQgPHJlcGxhY2VhYmxlPnJlY2lwZSBzcmN0cmVlIGZldGNodXJpPC9yZXBsYWNlYWJsZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBzdW1tYXJ5LCB0aGUgc291cmNlIGNvZGUgaXMgcHVsbGVkIGZyb20KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPmZldGNodXJpPC9yZXBsYWNlYWJsZT4gYW5kIGV4dHJhY3RlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSBsb2NhdGlvbiBkZWZpbmVkIGJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5zcmN0cmVlPC9yZXBsYWNlYWJsZT4gYXMgYSBsb2NhbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeS48L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+V2l0aGluIHdvcmtzcGFjZSwgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVzIGJvdGggdGhlIHJlY2lwZSBhbmQgYW4gYXBwZW5kIGZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSByZWNpcGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UmlnaHQ8L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJpZ2h0IHNjZW5hcmlvIHJlcHJlc2VudHMgYSBzaXR1YXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgdGhlIHNvdXJjZSB0cmVlIChzcmN0cmVlKSBoYXMgYmVlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2x5IHByZXBhcmVkIG91dHNpZGUgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gd29ya3NwYWNlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBjb21tYW5kIG5hbWVzIHRoZSByZWNpcGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGlkZW50aWZpZXMgd2hlcmUgdGhlIGV4aXN0aW5nIHNvdXJjZSB0cmVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGxvY2F0ZWQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBkZXZ0b29sIGFkZCA8cmVwbGFjZWFibGU+cmVjaXBlIHNyY3RyZWU8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kIGV4YW1pbmVzIHRoZSBzb3VyY2UgY29kZSBhbmQgY3JlYXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHJlY2lwZSBmb3IgaXQgcGxhY2luZyB0aGUgcmVjaXBlIGludG8gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzcGFjZS48L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QmVjYXVzZSB0aGUgZXh0cmFjdGVkIHNvdXJjZSBjb2RlIGFscmVhZHkgZXhpc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGRvZXMgbm90IHRyeSB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxvY2F0ZSBpdCBpbnRvIHRoZSB3b3Jrc3BhY2UgLSBqdXN0IHRoZSBuZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJlY2lwZSBpcyBwbGFjZWQgaW4gdGhlIHdvcmtzcGFjZS48L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QXNpZGUgZnJvbSBhIHJlY2lwZSBmb2xkZXIsIHRoZSBjb21tYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsc28gY3JlYXRlcyBhbiBhcHBlbmQgZm9sZGVyIGFuZCBwbGFjZXMgYW4gaW5pdGlhbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ki5iYmFwcGVuZDwvZmlsZW5hbWU+IHdpdGhpbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkVkaXQgdGhlIFJlY2lwZTwvZW1waGFzaXM+OgotICAgICAgICAgICAgICAgICAgICAgICAgQXQgdGhpcyBwb2ludCwgeW91IGNhbiB1c2UgPGZpbGVuYW1lPmRldnRvb2wgZWRpdC1yZWNpcGU8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgdG8gb3BlbiB1cCB0aGUgZWRpdG9yIGFzIGRlZmluZWQgYnkgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JEVESVRPUjwvZmlsZW5hbWU+IGVudmlyb25tZW50IHZhcmlhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmQgbW9kaWZ5IHRoZSBmaWxlOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGRldnRvb2wgZWRpdC1yZWNpcGUgPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICBGcm9tIHdpdGhpbiB0aGUgZWRpdG9yLCB5b3UgY2FuIG1ha2UgbW9kaWZpY2F0aW9ucyB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZSB0aGF0IHRha2UgYWZmZWN0IHdoZW4geW91IGJ1aWxkIGl0IGxhdGVyLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgdGhlIFJlY2lwZSBvciBSZWJ1aWxkIHRoZSBJbWFnZTwvZW1waGFzaXM+OgotICAgICAgICAgICAgICAgICAgICAgICAgQXQgdGhpcyBwb2ludCBpbiB0aGUgZmxvdywgdGhlIG5leHQgc3RlcCB5b3UKLSAgICAgICAgICAgICAgICAgICAgICAgIHRha2UgZGVwZW5kcyBvbiB3aGF0IHlvdSBhcmUgZ29pbmcgdG8gZG8gd2l0aAotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG5ldyBjb2RlLjwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBuZWVkIHRvIHRha2UgdGhlIGJ1aWxkIG91dHB1dCBhbmQgZXZlbnR1YWxseQotICAgICAgICAgICAgICAgICAgICAgICAgbW92ZSBpdCB0byB0aGUgdGFyZ2V0IGhhcmR3YXJlLCB5b3Ugd291bGQgdXNlCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZDwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGRldnRvb2wgYnVpbGQgPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+T24gdGhlIG90aGVyIGhhbmQsIGlmIHlvdSB3YW50IGFuIGltYWdlIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluIHRoZSByZWNpcGUncyBwYWNrYWdlcyBmb3IgaW1tZWRpYXRlIGRlcGxveW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIG9udG8gYSBkZXZpY2UgKGUuZy4gZm9yIHRlc3RpbmcgcHVycG9zZXMpLCB5b3UgY2FuIHVzZQotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGJ1aWxkLWltYWdlPC9maWxlbmFtZT4gY29tbWFuZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBkZXZ0b29sIGJ1aWxkLWltYWdlIDxyZXBsYWNlYWJsZT5pbWFnZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5EZXBsb3kgdGhlIEJ1aWxkIE91dHB1dDwvZW1waGFzaXM+OgotICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIHRvIGJ1aWxkIG91dCB5b3VyIHJlY2lwZSwgeW91IHByb2JhYmx5IHdhbnQgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBpZiB0aGUgcmVzdWx0aW5nIGJ1aWxkIG91dHB1dCB3b3JrcyBhcyBleHBlY3RlZCBvbiB0YXJnZXQKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlLgotICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzdGVwIGFzc3VtZXMgeW91IGhhdmUgYSBwcmV2aW91c2x5IGJ1aWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgdGhhdCBpcyBhbHJlYWR5IGVpdGhlciBydW5uaW5nIGluIFFFTVUgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIG9uIGFjdHVhbCBoYXJkd2FyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHNvLCBpdCBpcyBhc3N1bWVkIHRoYXQgZm9yIGRlcGxveW1lbnQgb2YgdGhlIGltYWdlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHRhcmdldCwgU1NIIGlzIGluc3RhbGxlZCBpbiB0aGUgaW1hZ2UgYW5kIGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGltYWdlIGlzIHJ1bm5pbmcgb24gcmVhbCBoYXJkd2FyZSB0aGF0IHlvdSBoYXZlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29yayBhY2Nlc3MgdG8gYW5kIGZyb20geW91ciBkZXZlbG9wbWVudCBtYWNoaW5lLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkZXBsb3kgeW91ciBidWlsZCBvdXRwdXQgdG8gdGhhdCB0YXJnZXQgaGFyZHdhcmUgYnkKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBkZXBsb3ktdGFyZ2V0PC9maWxlbmFtZT4gY29tbWFuZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBkZXZ0b29sIGRlcGxveS10YXJnZXQgPHJlcGxhY2VhYmxlPnJlY2lwZSB0YXJnZXQ8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiBpcyBhIGxpdmUgdGFyZ2V0IG1hY2hpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgYXMgYW4gU1NIIHNlcnZlci48L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjYW4sIG9mIGNvdXJzZSwgYWxzbyBkZXBsb3kgdGhlIGltYWdlIHlvdSBidWlsZAotICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGJ1aWxkLWltYWdlPC9maWxlbmFtZT4gY29tbWFuZAotICAgICAgICAgICAgICAgICAgICAgICAgdG8gYWN0dWFsIGhhcmR3YXJlLgotICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBkb2VzIG5vdCBwcm92aWRlIGEKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIGNvbW1hbmQgdGhhdCBhbGxvd3MgeW91IHRvIGRvIHRoaXMuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkZpbmlzaCBZb3VyIFdvcmsgV2l0aCB0aGUgUmVjaXBlPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRldnRvb2wgZmluaXNoPC9maWxlbmFtZT4gY29tbWFuZCBjcmVhdGVzCi0gICAgICAgICAgICAgICAgICAgICAgICBhbnkgcGF0Y2hlcyBjb3JyZXNwb25kaW5nIHRvIGNvbW1pdHMgaW4gdGhlIGxvY2FsCi0gICAgICAgICAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeSwgbW92ZXMgdGhlIG5ldyByZWNpcGUgdG8gYSBtb3JlIHBlcm1hbmVudAotICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIsIGFuZCB0aGVuIHJlc2V0cyB0aGUgcmVjaXBlIHNvIHRoYXQgdGhlIHJlY2lwZSBpcwotICAgICAgICAgICAgICAgICAgICAgICAgYnVpbHQgbm9ybWFsbHkgcmF0aGVyIHRoYW4gZnJvbSB0aGUgd29ya3NwYWNlLgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGRldnRvb2wgZmluaXNoIDxyZXBsYWNlYWJsZT5yZWNpcGUgbGF5ZXI8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQW55IGNoYW5nZXMgeW91IHdhbnQgdG8gdHVybiBpbnRvIHBhdGNoZXMgbXVzdCBiZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdHRlZCB0byB0aGUgR2l0IHJlcG9zaXRvcnkgaW4gdGhlIHNvdXJjZSB0cmVlLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT4KLQotICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QXMgbWVudGlvbmVkLCB0aGUgPGZpbGVuYW1lPmRldnRvb2wgZmluaXNoPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgbW92ZXMgdGhlIGZpbmFsIHJlY2lwZSB0byBpdHMgcGVybWFuZW50IGxheWVyLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5BcyBhIGZpbmFsIHByb2Nlc3Mgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCBmaW5pc2g8L2ZpbGVuYW1lPiBjb21tYW5kLCB0aGUgc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzdGFuZGFyZCBsYXllcnMgYW5kIHRoZSB1cHN0cmVhbSBzb3VyY2UgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RvcmVkIHNvIHRoYXQgeW91IGNhbiBidWlsZCB0aGUgcmVjaXBlIGZyb20gdGhvc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZWFzIHJhdGhlciB0aGFuIHRoZSB3b3Jrc3BhY2UuCi0gICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgcmVzZXQ8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgdG8gcHV0IHRoaW5ncyBiYWNrIHNob3VsZCB5b3UgZGVjaWRlIHlvdQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIG5vdCB3YW50IHRvIHByb2NlZWQgd2l0aCB5b3VyIHdvcmsuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIHVzZSB0aGlzIGNvbW1hbmQsIHJlYWxpemUgdGhhdCB0aGUgc291cmNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZSBpcyBwcmVzZXJ2ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtdXNlLWRldnRvb2wtbW9kaWZ5LXRvLWVuYWJsZS13b3JrLW9uLWNvZGUtYXNzb2NpYXRlZC13aXRoLWFuLWV4aXN0aW5nLXJlY2lwZSc+Ci0gICAgICAgICAgICA8dGl0bGU+VXNlIDxmaWxlbmFtZT5kZXZ0b29sIG1vZGlmeTwvZmlsZW5hbWU+IHRvIE1vZGlmeSB0aGUgU291cmNlIG9mIGFuIEV4aXN0aW5nIENvbXBvbmVudDwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPiBjb21tYW5kIHByZXBhcmVzIHRoZQotICAgICAgICAgICAgICAgIHdheSB0byB3b3JrIG9uIGV4aXN0aW5nIGNvZGUgdGhhdCBhbHJlYWR5IGhhcyBhIHJlY2lwZSBpbgotICAgICAgICAgICAgICAgIHBsYWNlLgotICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kIGlzIGZsZXhpYmxlIGVub3VnaCB0byBhbGxvdyB5b3UgdG8gZXh0cmFjdCBjb2RlLAotICAgICAgICAgICAgICAgIHNwZWNpZnkgdGhlIGV4aXN0aW5nIHJlY2lwZSwgYW5kIGtlZXAgdHJhY2sgb2YgYW5kIGdhdGhlciBhbnkKLSAgICAgICAgICAgICAgICBwYXRjaCBmaWxlcyBmcm9tIG90aGVyIGRldmVsb3BlcnMgdGhhdCBhcmUKLSAgICAgICAgICAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIGNvZGUuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB5b3VyIHBhcnRpY3VsYXIgc2NlbmFyaW8sIHRoZSBhcmd1bWVudHMgYW5kIG9wdGlvbnMKLSAgICAgICAgICAgICAgICB5b3UgdXNlIHdpdGggPGZpbGVuYW1lPmRldnRvb2wgbW9kaWZ5PC9maWxlbmFtZT4gZm9ybSBkaWZmZXJlbnQKLSAgICAgICAgICAgICAgICBjb21iaW5hdGlvbnMuCi0gICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBkaWFncmFtIHNob3dzIGNvbW1vbiBkZXZlbG9wbWVudCBmbG93cwotICAgICAgICAgICAgICAgIHlvdSB3b3VsZCB1c2Ugd2l0aCB0aGUgPGZpbGVuYW1lPmRldnRvb2wgbW9kaWZ5PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBjb21tYW5kOgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGV2dG9vbC1tb2RpZnktZmxvdy5wbmciIGFsaWduPSJjZW50ZXIiIC8+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QcmVwYXJpbmcgdG8gTW9kaWZ5IHRoZSBDb2RlPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgdG9wIHBhcnQgb2YgdGhlIGZsb3cgc2hvd3MgdGhyZWUgc2NlbmFyaW9zIGJ5IHdoaWNoCi0gICAgICAgICAgICAgICAgICAgICAgICB5b3UgY291bGQgdXNlIDxmaWxlbmFtZT5kZXZ0b29sIG1vZGlmeTwvZmlsZW5hbWU+IHRvCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmVwYXJlIHRvIHdvcmsgb24gc291cmNlIGZpbGVzLgotICAgICAgICAgICAgICAgICAgICAgICAgRWFjaCBzY2VuYXJpbyBhc3N1bWVzIHRoZSBmb2xsb3dpbmc6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgcmVjaXBlIGV4aXN0cyBpbiBzb21lIGxheWVyIGV4dGVybmFsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IHdvcmtzcGFjZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBzb3VyY2UgZmlsZXMgZXhpc3QgdXBzdHJlYW0gaW4gYW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW4tZXh0cmFjdGVkIHN0YXRlIG9yIGxvY2FsbHkgaW4gYSBwcmV2aW91c2x5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RlZCBzdGF0ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0eXBpY2FsIHNpdHVhdGlvbiBpcyB3aGVyZSBhbm90aGVyIGRldmVsb3BlciBoYXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQgc29tZSBsYXllciBmb3IgdXNlIHdpdGggdGhlIFlvY3RvIFByb2plY3QgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGVpciByZWNpcGUgYWxyZWFkeSByZXNpZGVzIGluIHRoYXQgbGF5ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgdGhlaXIgc291cmNlIGNvZGUgaXMgcmVhZGlseSBhdmFpbGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGVpdGhlciB1cHN0cmVhbSBvciBsb2NhbGx5LgotICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxlZnQ8L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGxlZnQgc2NlbmFyaW8gcmVwcmVzZW50cyBhIGNvbW1vbiBzaXR1YXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgdGhlIHNvdXJjZSBjb2RlIGRvZXMgbm90IGV4aXN0IGxvY2FsbHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5lZWRzIHRvIGJlIGV4dHJhY3RlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBzaXR1YXRpb24sIHRoZSBzb3VyY2UgaXMgZXh0cmFjdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIGRlZmF1bHQgd29ya3NwYWNlIGxvY2F0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVjaXBlLCBpbiB0aGlzIHNjZW5hcmlvLCBpcyBpbiBpdHMgb3duCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyIG91dHNpZGUgdGhlIHdvcmtzcGFjZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS08L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5sYXllcm5hbWU8L3JlcGxhY2VhYmxlPikuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGNvbW1hbmQgaWRlbnRpZmllcyB0aGUgcmVjaXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBieSBkZWZhdWx0IGV4dHJhY3RzIHRoZSBzb3VyY2UgZmlsZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBkZXZ0b29sIG1vZGlmeSA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT5sb2NhdGVzIHRoZSByZWNpcGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IHVzZXMgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gbG9jYXRlIHRoZSBzb3VyY2UgY29kZSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55IGxvY2FsIHBhdGNoIGZpbGVzIGZyb20gb3RoZXIgZGV2ZWxvcGVycyBhcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2Fubm90IHByb3ZpZGUgYW4gVVJMIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPnNyY3RyZWU8L3JlcGxhY2VhYmxlPiB3aGVuIHVzaW5nIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgbW9kaWZ5PC9maWxlbmFtZT4gY29tbWFuZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaXRoIHRoaXMgc2NlbmFyaW8sIGhvd2V2ZXIsIHNpbmNlIG5vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5zcmN0cmVlPC9yZXBsYWNlYWJsZT4gYXJndW1lbnQgZXhpc3RzLCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgbW9kaWZ5PC9maWxlbmFtZT4gY29tbWFuZCBieSBkZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RzIHRoZSBzb3VyY2UgZmlsZXMgdG8gYSBHaXQgc3RydWN0dXJlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgdGhlIGxvY2F0aW9uIGZvciB0aGUgZXh0cmFjdGVkIHNvdXJjZSBpcyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBhcmVhIHdpdGhpbiB0aGUgd29ya3NwYWNlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVzdWx0IGlzIHRoYXQgdGhlIGNvbW1hbmQgc2V0cyB1cCBib3RoIHRoZSBzb3VyY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSBhbmQgYW4gYXBwZW5kIGZpbGUgd2l0aGluIHRoZSB3b3Jrc3BhY2Ugd2l0aCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlIHJlbWFpbmluZyBpbiBpdHMgb3JpZ2luYWwgbG9jYXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWlkZGxlPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtaWRkbGUgc2NlbmFyaW8gcmVwcmVzZW50cyBhIHNpdHVhdGlvbiB3aGVyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc291cmNlIGNvZGUgYWxzbyBkb2VzIG5vdCBleGlzdCBsb2NhbGx5LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBjb2RlIGlzIGFnYWluIHVwc3RyZWFtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBuZWVkcyB0byBiZSBleHRyYWN0ZWQgdG8gc29tZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBhcmVhIGFzIGEgR2l0IHJlcG9zaXRvcnkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUsIGluIHRoaXMgc2NlbmFyaW8sIGlzIGFnYWluIGluIGl0cyBvd24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIgb3V0c2lkZSB0aGUgd29ya3NwYWNlLjwvcGFyYT4KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGNvbW1hbmQgdGVsbHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiB3aGF0IHJlY2lwZSB3aXRoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRvIHdvcmsgYW5kLCBpbiB0aGlzIGNhc2UsIGlkZW50aWZpZXMgYSBsb2NhbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmVhIGZvciB0aGUgZXh0cmFjdGVkIHNvdXJjZSBmaWxlcyB0aGF0IGlzIG91dHNpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGRlZmF1bHQgd29ya3NwYWNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZGV2dG9vbCBtb2RpZnkgPHJlcGxhY2VhYmxlPnJlY2lwZSBzcmN0cmVlPC9yZXBsYWNlYWJsZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcyB3aXRoIGFsbCBleHRyYWN0aW9ucywgdGhlIGNvbW1hbmQgdXNlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVjaXBlJ3MgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB0byBsb2NhdGUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBmaWxlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgZmlsZXMgYXJlIGxvY2F0ZWQsIHRoZSBjb21tYW5kIGJ5IGRlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdHMgdGhlbS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvdmlkaW5nIHRoZSA8cmVwbGFjZWFibGU+c3JjdHJlZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50IGluc3RydWN0cyA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IHdoZXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlIHRoZSBleHRyYWN0ZWQgc291cmNlLjwvcGFyYT4KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5XaXRoaW4gd29ya3NwYWNlLCA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZXMgYW4gYXBwZW5kIGZpbGUgZm9yIHRoZSByZWNpcGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgcmVtYWlucyBpbiBpdHMgb3JpZ2luYWwgbG9jYXRpb24gYnV0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzb3VyY2UgZmlsZXMgYXJlIGV4dHJhY3RlZCB0byB0aGUgbG9jYXRpb24geW91Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIHdpdGggPHJlcGxhY2VhYmxlPnNyY3RyZWU8L3JlcGxhY2VhYmxlPi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SaWdodDwvZW1waGFzaXM+OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmlnaHQgc2NlbmFyaW8gcmVwcmVzZW50cyBhIHNpdHVhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSB0aGUgc291cmNlIHRyZWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxyZXBsYWNlYWJsZT5zcmN0cmVlPC9yZXBsYWNlYWJsZT4pIGV4aXN0cyBhcyBhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzbHkgZXh0cmFjdGVkIEdpdCBzdHJ1Y3R1cmUgb3V0c2lkZSBvZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiB3b3Jrc3BhY2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIHJlY2lwZSBhbHNvIGV4aXN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNld2hlcmUgaW4gaXRzIG93biBsYXllci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBmb2xsb3dpbmcgY29tbWFuZCB0ZWxscwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IHRoZSByZWNpcGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB3aGljaCB0byB3b3JrLCB1c2VzIHRoZSAiLW4iIG9wdGlvbiB0byBpbmRpY2F0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgZG9lcyBub3QgbmVlZCB0byBiZSBleHRyYWN0ZWQsIGFuZCB1c2VzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5zcmN0cmVlPC9yZXBsYWNlYWJsZT4gdG8gcG9pbnQgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzbHkgZXh0cmFjdGVkIHNvdXJjZSBmaWxlczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGRldnRvb2wgbW9kaWZ5IC1uIDxyZXBsYWNlYWJsZT5yZWNpcGUgc3JjdHJlZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPk9uY2UgdGhlIGNvbW1hbmQgZmluaXNoZXMsIGl0IGNyZWF0ZXMgb25seQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBhcHBlbmQgZmlsZSBmb3IgdGhlIHJlY2lwZSBpbiB0aGUgd29ya3NwYWNlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVjaXBlIGFuZCB0aGUgc291cmNlIGNvZGUgcmVtYWluIGluIHRoZWlyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsIGxvY2F0aW9ucy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FZGl0IHRoZSBTb3VyY2U8L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgdXNlZCB0aGUgPGZpbGVuYW1lPmRldnRvb2wgbW9kaWZ5PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsIHlvdSBhcmUgZnJlZSB0byBtYWtlIGNoYW5nZXMgdG8gdGhlIHNvdXJjZQotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSBhbnkgZWRpdG9yIHlvdSBsaWtlIHRvIG1ha2UgYW5kIHNhdmUKLSAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgc291cmNlIGNvZGUgbW9kaWZpY2F0aW9ucy4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIHRoZSBSZWNpcGU8L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgdXBkYXRlZCB0aGUgc291cmNlIGZpbGVzLCB5b3UgY2FuIGJ1aWxkCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVjaXBlLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RGVwbG95IHRoZSBCdWlsZCBPdXRwdXQ8L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQ8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCB0byBidWlsZCBvdXQgeW91ciByZWNpcGUsIHlvdSBwcm9iYWJseSB3YW50IHRvIHNlZQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIHJlc3VsdGluZyBidWlsZCBvdXRwdXQgd29ya3MgYXMgZXhwZWN0ZWQgb24gdGFyZ2V0Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc3RlcCBhc3N1bWVzIHlvdSBoYXZlIGEgcHJldmlvdXNseSBidWlsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlIHRoYXQgaXMgYWxyZWFkeSBlaXRoZXIgcnVubmluZyBpbiBRRU1VIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyBvbiBhY3R1YWwgaGFyZHdhcmUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxzbywgaXQgaXMgYXNzdW1lZCB0aGF0IGZvciBkZXBsb3ltZW50IG9mIHRoZSBpbWFnZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSB0YXJnZXQsIFNTSCBpcyBpbnN0YWxsZWQgaW4gdGhlIGltYWdlIGFuZCBpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbWFnZSBpcyBydW5uaW5nIG9uIHJlYWwgaGFyZHdhcmUgdGhhdCB5b3UgaGF2ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmsgYWNjZXNzIHRvIGFuZCBmcm9tIHlvdXIgZGV2ZWxvcG1lbnQgbWFjaGluZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZGVwbG95IHlvdXIgYnVpbGQgb3V0cHV0IHRvIHRoYXQgdGFyZ2V0IGhhcmR3YXJlIGJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUgPGZpbGVuYW1lPmRldnRvb2wgZGVwbG95LXRhcmdldDwvZmlsZW5hbWU+IGNvbW1hbmQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZGV2dG9vbCBkZXBsb3ktdGFyZ2V0IDxyZXBsYWNlYWJsZT5yZWNpcGUgdGFyZ2V0PC9yZXBsYWNlYWJsZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gaXMgYSBsaXZlIHRhcmdldCBtYWNoaW5lCi0gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIGFzIGFuIFNTSCBzZXJ2ZXIuPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgY2FuLCBvZiBjb3Vyc2UsIGFsc28gZGVwbG95IHRoZSBpbWFnZSB5b3UgYnVpbGQKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZC1pbWFnZTwvZmlsZW5hbWU+IGNvbW1hbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFjdHVhbCBoYXJkd2FyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gZG9lcyBub3QgcHJvdmlkZSBhCi0gICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyBjb21tYW5kIHRoYXQgYWxsb3dzIHlvdSB0byBkbyB0aGlzLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5GaW5pc2ggWW91ciBXb3JrIFdpdGggdGhlIFJlY2lwZTwvZW1waGFzaXM+OgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZ0b29sIGZpbmlzaDwvZmlsZW5hbWU+IGNvbW1hbmQgY3JlYXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgYW55IHBhdGNoZXMgY29ycmVzcG9uZGluZyB0byBjb21taXRzIGluIHRoZSBsb2NhbAotICAgICAgICAgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnksIHVwZGF0ZXMgdGhlIHJlY2lwZSB0byBwb2ludCB0byB0aGVtCi0gICAgICAgICAgICAgICAgICAgICAgICAob3IgY3JlYXRlcyBhIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIHRvIGRvCi0gICAgICAgICAgICAgICAgICAgICAgICBzbywgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpZWQgZGVzdGluYXRpb24gbGF5ZXIpLCBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gcmVzZXRzIHRoZSByZWNpcGUgc28gdGhhdCB0aGUgcmVjaXBlIGlzIGJ1aWx0IG5vcm1hbGx5Ci0gICAgICAgICAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiBmcm9tIHRoZSB3b3Jrc3BhY2UuCi0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZGV2dG9vbCBmaW5pc2ggPHJlcGxhY2VhYmxlPnJlY2lwZSBsYXllcjwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbnkgY2hhbmdlcyB5b3Ugd2FudCB0byB0dXJuIGludG8gcGF0Y2hlcyBtdXN0IGJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0dGVkIHRvIHRoZSBHaXQgcmVwb3NpdG9yeSBpbiB0aGUgc291cmNlIHRyZWUuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPgotCi0gICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5CZWNhdXNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gbW92ZSB0aGUgcmVjaXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgZmluaXNoPC9maWxlbmFtZT4gZWl0aGVyIHVwZGF0ZXMgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbCByZWNpcGUgaW4gdGhlIG9yaWdpbmFsIGxheWVyIG9yIHRoZSBjb21tYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVzIGEgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGluIGEgZGlmZmVyZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICBsYXllciBhcyBwcm92aWRlZCBieSA8cmVwbGFjZWFibGU+bGF5ZXI8L3JlcGxhY2VhYmxlPi4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QXMgYSBmaW5hbCBwcm9jZXNzIG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgZmluaXNoPC9maWxlbmFtZT4gY29tbWFuZCwgdGhlIHN0YXRlCi0gICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc3RhbmRhcmQgbGF5ZXJzIGFuZCB0aGUgdXBzdHJlYW0gc291cmNlIGlzCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN0b3JlZCBzbyB0aGF0IHlvdSBjYW4gYnVpbGQgdGhlIHJlY2lwZSBmcm9tIHRob3NlCi0gICAgICAgICAgICAgICAgICAgICAgICBhcmVhcyByYXRoZXIgdGhhbiB0aGUgd29ya3NwYWNlLgotICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHJlc2V0PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIHRvIHB1dCB0aGluZ3MgYmFjayBzaG91bGQgeW91IGRlY2lkZSB5b3UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBub3Qgd2FudCB0byBwcm9jZWVkIHdpdGggeW91ciB3b3JrLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyB1c2UgdGhpcyBjb21tYW5kLCByZWFsaXplIHRoYXQgdGhlIHNvdXJjZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUgaXMgcHJlc2VydmVkLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLXVzZS1kZXZ0b29sLXVwZ3JhZGUtdG8tY3JlYXRlLWEtdmVyc2lvbi1vZi10aGUtcmVjaXBlLXRoYXQtc3VwcG9ydHMtYS1uZXdlci12ZXJzaW9uLW9mLXRoZS1zb2Z0d2FyZSc+Ci0gICAgICAgICAgICA8dGl0bGU+VXNlIDxmaWxlbmFtZT5kZXZ0b29sIHVwZ3JhZGU8L2ZpbGVuYW1lPiB0byBDcmVhdGUgYSBWZXJzaW9uIG9mIHRoZSBSZWNpcGUgdGhhdCBTdXBwb3J0cyBhIE5ld2VyIFZlcnNpb24gb2YgdGhlIFNvZnR3YXJlPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZ0b29sIHVwZ3JhZGU8L2ZpbGVuYW1lPiBjb21tYW5kIHVwZGF0ZXMKLSAgICAgICAgICAgICAgICBhbiBleGlzdGluZyByZWNpcGUgc28gdGhhdCB5b3UgY2FuIGJ1aWxkIGl0IGZvciBhbiB1cGRhdGVkCi0gICAgICAgICAgICAgICAgc2V0IG9mIHNvdXJjZSBmaWxlcy4KLSAgICAgICAgICAgICAgICBUaGUgY29tbWFuZCBpcyBmbGV4aWJsZSBlbm91Z2ggdG8gYWxsb3cgeW91IHRvIHNwZWNpZnkKLSAgICAgICAgICAgICAgICBzb3VyY2UgY29kZSByZXZpc2lvbiBhbmQgdmVyc2lvbmluZyBzY2hlbWVzLCBleHRyYWN0IGNvZGUgaW50bwotICAgICAgICAgICAgICAgIG9yIG91dCBvZiB0aGUgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiB3b3Jrc3BhY2UsIGFuZAotICAgICAgICAgICAgICAgIHdvcmsgd2l0aCBhbnkgc291cmNlIGZpbGUgZm9ybXMgdGhhdCB0aGUgZmV0Y2hlcnMgc3VwcG9ydC4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHlvdXIgcGFydGljdWxhciBzY2VuYXJpbywgdGhlIGFyZ3VtZW50cyBhbmQgb3B0aW9ucwotICAgICAgICAgICAgICAgIHlvdSB1c2Ugd2l0aCA8ZmlsZW5hbWU+ZGV2dG9vbCB1cGdyYWRlPC9maWxlbmFtZT4gZm9ybSBkaWZmZXJlbnQKLSAgICAgICAgICAgICAgICBjb21iaW5hdGlvbnMuCi0gICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBkaWFncmFtIHNob3dzIGEgY29tbW9uIGRldmVsb3BtZW50IGZsb3cKLSAgICAgICAgICAgICAgICB5b3Ugd291bGQgdXNlIHdpdGggdGhlIDxmaWxlbmFtZT5kZXZ0b29sIG1vZGlmeTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgY29tbWFuZDoKLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RldnRvb2wtdXBncmFkZS1mbG93LnBuZyIgYWxpZ249ImNlbnRlciIgLz4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluaXRpYXRlIHRoZSBVcGdyYWRlPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgdG9wIHBhcnQgb2YgdGhlIGZsb3cgc2hvd3MgYSB0eXBpY2FsIHNjZW5hcmlvIGJ5IHdoaWNoCi0gICAgICAgICAgICAgICAgICAgICAgICB5b3UgY291bGQgdXNlIDxmaWxlbmFtZT5kZXZ0b29sIHVwZ3JhZGU8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBleGlzdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSByZWNpcGUgZXhpc3RzIGluIHNvbWUgbGF5ZXIgZXh0ZXJuYWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gd29ya3NwYWNlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIHNvdXJjZSBmaWxlcyBmb3IgdGhlIG5ldyByZWxlYXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0IGFkamFjZW50IHRvIHRoZSBzYW1lIGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgcmVjaXBlIChlLmcuIGEgdGFyYmFsbCB3aXRoIHRoZSBuZXcgdmVyc2lvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgaW4gdGhlIG5hbWUsIG9yIGFzIGEgZGlmZmVyZW50IHJldmlzaW9uIGluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB1cHN0cmVhbSBHaXQgcmVwb3NpdG9yeSkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICBBIGNvbW1vbiBzaXR1YXRpb24gaXMgd2hlcmUgdGhpcmQtcGFydHkgc29mdHdhcmUgaGFzCi0gICAgICAgICAgICAgICAgICAgICAgICB1bmRlcmdvbmUgYSByZXZpc2lvbiBzbyB0aGF0IGl0IGhhcyBiZWVuIHVwZ3JhZGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSB5b3UgaGF2ZSBhY2Nlc3MgdG8gaXMgbGlrZWx5IGluIHlvdXIgb3duIGxheWVyLgotICAgICAgICAgICAgICAgICAgICAgICAgVGh1cywgeW91IG5lZWQgdG8gdXBncmFkZSB0aGUgcmVjaXBlIHRvIHVzZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld2VyIHZlcnNpb24gb2YgdGhlIHNvZnR3YXJlOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGRldnRvb2wgdXBncmFkZSAtViA8cmVwbGFjZWFibGU+dmVyc2lvbiByZWNpcGU8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHVwZ3JhZGU8L2ZpbGVuYW1lPiBjb21tYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0cyBzb3VyY2UgY29kZSBpbnRvIHRoZSA8ZmlsZW5hbWU+c291cmNlczwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaW4gdGhlIHdvcmtzcGFjZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRoZSBjb2RlIGV4dHJhY3RlZCB0byBhbnkgb3RoZXIgbG9jYXRpb24sIHlvdQotICAgICAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBwcm92aWRlIHRoZSA8cmVwbGFjZWFibGU+c3JjdHJlZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50IHdpdGggdGhlIGNvbW1hbmQgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBkZXZ0b29sIHVwZ3JhZGUgLVYgPHJlcGxhY2VhYmxlPnZlcnNpb24gcmVjaXBlIHNyY3RyZWU8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgQWxzbywgaW4gdGhpcyBleGFtcGxlLCB0aGUgIi1WIiBvcHRpb24gaXMgdXNlZCB0byBzcGVjaWZ5Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgbmV3IHZlcnNpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgc291cmNlIGZpbGVzIHBvaW50ZWQgdG8gYnkgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHN0YXRlbWVudCBpbiB0aGUgcmVjaXBlIGFyZQotICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSBHaXQgcmVwb3NpdG9yeSwgeW91IG11c3QgcHJvdmlkZSB0aGUgIi1TIiBvcHRpb24gYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IGEgcmV2aXNpb24gZm9yIHRoZSBzb2Z0d2FyZS48L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPk9uY2UgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBsb2NhdGVzIHRoZSByZWNpcGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBpdCB1c2VzIHRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvIGxvY2F0ZQotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNvdXJjZSBjb2RlIGFuZCBhbnkgbG9jYWwgcGF0Y2ggZmlsZXMgZnJvbSBvdGhlcgotICAgICAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcGVycyBhcmUgbG9jYXRlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZXN1bHQgaXMgdGhhdCB0aGUgY29tbWFuZCBzZXRzIHVwIHRoZSBzb3VyY2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUsIHRoZSBuZXcgdmVyc2lvbiBvZiB0aGUgcmVjaXBlLCBhbmQgYW4gYXBwZW5kIGZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGFsbCB3aXRoaW4gdGhlIHdvcmtzcGFjZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJlc29sdmUgYW55IENvbmZsaWN0cyBjcmVhdGVkIGJ5IHRoZSBVcGdyYWRlPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50LCB0aGVyZSBjb3VsZCBiZSBzb21lIGNvbmZsaWN0cyBkdWUgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBzb2Z0d2FyZSBiZWluZyB1cGdyYWRlZCB0byBhIG5ldyB2ZXJzaW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB3b3VsZCBvY2N1ciBpZiB5b3VyIHJlY2lwZSBzcGVjaWZpZXMgc29tZSBwYXRjaCBmaWxlcyBpbgotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB0aGF0IGNvbmZsaWN0IHdpdGggY2hhbmdlcwotICAgICAgICAgICAgICAgICAgICAgICAgbWFkZSBpbiB0aGUgbmV3IHZlcnNpb24gb2YgdGhlIHNvZnR3YXJlLgotICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgeW91IG5lZWQgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3RzCi0gICAgICAgICAgICAgICAgICAgICAgICBieSBlZGl0aW5nIHRoZSBzb3VyY2UgYW5kIGZvbGxvd2luZyB0aGUgbm9ybWFsCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IHJlYmFzZTwvZmlsZW5hbWU+IGNvbmZsaWN0IHJlc29sdXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5CZWZvcmUgbW92aW5nIG9udG8gdGhlIG5leHQgc3RlcCwgYmUgc3VyZSB0byByZXNvbHZlIGFueQotICAgICAgICAgICAgICAgICAgICAgICAgc3VjaCBjb25mbGljdHMgY3JlYXRlZCB0aHJvdWdoIHVzZSBvZiBhIG5ld2VyIG9yIGRpZmZlcmVudAotICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiBvZiB0aGUgc29mdHdhcmUuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCB0aGUgUmVjaXBlPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIHlvdXIgcmVjaXBlIGluIG9yZGVyLCB5b3UgY2FuIGJ1aWxkIGl0LgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBlaXRoZXIgdXNlIDxmaWxlbmFtZT5kZXZ0b29sIGJ1aWxkPC9maWxlbmFtZT4gb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgICAgICBFaXRoZXIgbWV0aG9kIHByb2R1Y2VzIGJ1aWxkIG91dHB1dCB0aGF0IGlzIHN0b3JlZAotICAgICAgICAgICAgICAgICAgICAgICAgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvdWxpbms+LgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RGVwbG95IHRoZSBCdWlsZCBPdXRwdXQ8L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQ8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBvciA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IHRvIGJ1aWxkIG91dCB5b3VyCi0gICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUsIHlvdSBwcm9iYWJseSB3YW50IHRvIHNlZSBpZiB0aGUgcmVzdWx0aW5nIGJ1aWxkCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgd29ya3MgYXMgZXhwZWN0ZWQgb24gdGFyZ2V0IGhhcmR3YXJlLgotICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzdGVwIGFzc3VtZXMgeW91IGhhdmUgYSBwcmV2aW91c2x5IGJ1aWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgdGhhdCBpcyBhbHJlYWR5IGVpdGhlciBydW5uaW5nIGluIFFFTVUgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIG9uIGFjdHVhbCBoYXJkd2FyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHNvLCBpdCBpcyBhc3N1bWVkIHRoYXQgZm9yIGRlcGxveW1lbnQgb2YgdGhlIGltYWdlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHRhcmdldCwgU1NIIGlzIGluc3RhbGxlZCBpbiB0aGUgaW1hZ2UgYW5kIGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGltYWdlIGlzIHJ1bm5pbmcgb24gcmVhbCBoYXJkd2FyZSB0aGF0IHlvdSBoYXZlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29yayBhY2Nlc3MgdG8gYW5kIGZyb20geW91ciBkZXZlbG9wbWVudCBtYWNoaW5lLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkZXBsb3kgeW91ciBidWlsZCBvdXRwdXQgdG8gdGhhdCB0YXJnZXQgaGFyZHdhcmUgYnkKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBkZXBsb3ktdGFyZ2V0PC9maWxlbmFtZT4gY29tbWFuZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBkZXZ0b29sIGRlcGxveS10YXJnZXQgPHJlcGxhY2VhYmxlPnJlY2lwZSB0YXJnZXQ8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiBpcyBhIGxpdmUgdGFyZ2V0IG1hY2hpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgYXMgYW4gU1NIIHNlcnZlci48L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjYW4sIG9mIGNvdXJzZSwgYWxzbyBkZXBsb3kgdGhlIGltYWdlIHlvdSBidWlsZAotICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGJ1aWxkLWltYWdlPC9maWxlbmFtZT4gY29tbWFuZAotICAgICAgICAgICAgICAgICAgICAgICAgdG8gYWN0dWFsIGhhcmR3YXJlLgotICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBkb2VzIG5vdCBwcm92aWRlIGEKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIGNvbW1hbmQgdGhhdCBhbGxvd3MgeW91IHRvIGRvIHRoaXMuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkZpbmlzaCBZb3VyIFdvcmsgV2l0aCB0aGUgUmVjaXBlPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRldnRvb2wgZmluaXNoPC9maWxlbmFtZT4gY29tbWFuZCBjcmVhdGVzCi0gICAgICAgICAgICAgICAgICAgICAgICBhbnkgcGF0Y2hlcyBjb3JyZXNwb25kaW5nIHRvIGNvbW1pdHMgaW4gdGhlIGxvY2FsCi0gICAgICAgICAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeSwgbW92ZXMgdGhlIG5ldyByZWNpcGUgdG8gYSBtb3JlIHBlcm1hbmVudAotICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIsIGFuZCB0aGVuIHJlc2V0cyB0aGUgcmVjaXBlIHNvIHRoYXQgdGhlIHJlY2lwZSBpcwotICAgICAgICAgICAgICAgICAgICAgICAgYnVpbHQgbm9ybWFsbHkgcmF0aGVyIHRoYW4gZnJvbSB0aGUgd29ya3NwYWNlLgotICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiBsYXllciB0aGF0IGlzIHRoZSBzYW1lIGFzCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgb3JpZ2luYWwgc291cmNlLCB0aGVuIHRoZSBvbGQgdmVyc2lvbiBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBhbmQgYXNzb2NpYXRlZCBmaWxlcyB3aWxsIGJlIHJlbW92ZWQgcHJpb3IgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZGluZyB0aGUgbmV3IHZlcnNpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZGV2dG9vbCBmaW5pc2ggPHJlcGxhY2VhYmxlPnJlY2lwZSBsYXllcjwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbnkgY2hhbmdlcyB5b3Ugd2FudCB0byB0dXJuIGludG8gcGF0Y2hlcyBtdXN0IGJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0dGVkIHRvIHRoZSBHaXQgcmVwb3NpdG9yeSBpbiB0aGUgc291cmNlIHRyZWUuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QXMgYSBmaW5hbCBwcm9jZXNzIG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgZmluaXNoPC9maWxlbmFtZT4gY29tbWFuZCwgdGhlIHN0YXRlCi0gICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc3RhbmRhcmQgbGF5ZXJzIGFuZCB0aGUgdXBzdHJlYW0gc291cmNlIGlzCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN0b3JlZCBzbyB0aGF0IHlvdSBjYW4gYnVpbGQgdGhlIHJlY2lwZSBmcm9tIHRob3NlCi0gICAgICAgICAgICAgICAgICAgICAgICBhcmVhcyByYXRoZXIgdGhhbiB0aGUgd29ya3NwYWNlLgotICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHJlc2V0PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIHRvIHB1dCB0aGluZ3MgYmFjayBzaG91bGQgeW91IGRlY2lkZSB5b3UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBub3Qgd2FudCB0byBwcm9jZWVkIHdpdGggeW91ciB3b3JrLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyB1c2UgdGhpcyBjb21tYW5kLCByZWFsaXplIHRoYXQgdGhlIHNvdXJjZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUgaXMgcHJlc2VydmVkLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJ1c2luZy1hLXF1aWx0LXdvcmtmbG93Ij4KLSAgICAgICAgPHRpdGxlPlVzaW5nIFF1aWx0IGluIFlvdXIgV29ya2Zsb3c8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3NhdmFubmFoLm5vbmdudS5vcmcvcHJvamVjdHMvcXVpbHQnPlF1aWx0PC91bGluaz4KLSAgICAgICAgICAgIGlzIGEgcG93ZXJmdWwgdG9vbCB0aGF0IGFsbG93cyB5b3UgdG8gY2FwdHVyZSBzb3VyY2UgY29kZSBjaGFuZ2VzCi0gICAgICAgICAgICB3aXRob3V0IGhhdmluZyBhIGNsZWFuIHNvdXJjZSB0cmVlLgotICAgICAgICAgICAgVGhpcyBzZWN0aW9uIG91dGxpbmVzIHRoZSB0eXBpY2FsIHdvcmtmbG93IHlvdSBjYW4gdXNlIHRvIG1vZGlmeQotICAgICAgICAgICAgc291cmNlIGNvZGUsIHRlc3QgY2hhbmdlcywgYW5kIHRoZW4gcHJlc2VydmUgdGhlIGNoYW5nZXMgaW4gdGhlCi0gICAgICAgICAgICBmb3JtIG9mIGEgcGF0Y2ggYWxsIHVzaW5nIFF1aWx0LgotICAgICAgICAgICAgPG5vdGU+PHRpdGxlPlRpcDwvdGl0bGU+Ci0gICAgICAgICAgICAgICAgV2l0aCByZWdhcmQgdG8gcHJlc2VydmluZyBjaGFuZ2VzIHRvIHNvdXJjZSBmaWxlcyBpZiB5b3UKLSAgICAgICAgICAgICAgICBjbGVhbiBhIHJlY2lwZSBvciBoYXZlIDxmaWxlbmFtZT5ybV93b3JrPC9maWxlbmFtZT4gZW5hYmxlZCwKLSAgICAgICAgICAgICAgICB0aGUgd29ya2Zsb3cgZGVzY3JpYmVkIGluIHRoZQotICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1kZXZ0b29sLWluLXlvdXItd29ya2Zsb3cnPlVzaW5nIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gaW4gWW91ciBXb3JrZmxvdzwvbGluaz4iCi0gICAgICAgICAgICAgICAgc2VjdGlvbiBpcyBhIHNhZmVyIGRldmVsb3BtZW50IGZsb3cgdGhhbiB0aGFuIHRoZSBmbG93IHRoYXQKLSAgICAgICAgICAgICAgICB1c2VzIFF1aWx0LgotICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBGb2xsb3cgdGhlc2UgZ2VuZXJhbCBzdGVwczoKLSAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkZpbmQgdGhlIFNvdXJjZSBDb2RlOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIFRlbXBvcmFyeSBzb3VyY2UgY29kZSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCi0gICAgICAgICAgICAgICAgICAgIGlzIGtlcHQgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KLSAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQotICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZmluZGluZy10aGUtdGVtcG9yYXJ5LXNvdXJjZS1jb2RlJz5GaW5kaW5nIFRlbXBvcmFyeSBTb3VyY2UgQ29kZTwvbGluaz4iCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gdG8gbGVhcm4gaG93IHRvIGxvY2F0ZSB0aGUgZGlyZWN0b3J5IHRoYXQgaGFzIHRoZQotICAgICAgICAgICAgICAgICAgICB0ZW1wb3Jhcnkgc291cmNlIGNvZGUgZm9yIGEgcGFydGljdWxhciBwYWNrYWdlLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNoYW5nZSBZb3VyIFdvcmtpbmcgRGlyZWN0b3J5OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGJlIGluIHRoZSBkaXJlY3RvcnkgdGhhdCBoYXMgdGhlIHRlbXBvcmFyeSBzb3VyY2UgY29kZS4KLSAgICAgICAgICAgICAgICAgICAgVGhhdCBkaXJlY3RvcnkgaXMgZGVmaW5lZCBieSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSBhIE5ldyBQYXRjaDo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBCZWZvcmUgbW9kaWZ5aW5nIHNvdXJjZSBjb2RlLCB5b3UgbmVlZCB0byBjcmVhdGUgYSBuZXcgcGF0Y2guCi0gICAgICAgICAgICAgICAgICAgIFRvIGNyZWF0ZSBhIG5ldyBwYXRjaCBmaWxlLCB1c2UgPGZpbGVuYW1lPnF1aWx0IG5ldzwvZmlsZW5hbWU+IGFzIGJlbG93OgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgcXVpbHQgbmV3IG15X2NoYW5nZXMucGF0Y2gKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Tm90aWZ5IFF1aWx0IGFuZCBBZGQgRmlsZXM6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgY3JlYXRpbmcgdGhlIHBhdGNoLCB5b3UgbmVlZCB0byBub3RpZnkgUXVpbHQgYWJvdXQgdGhlIGZpbGVzCi0gICAgICAgICAgICAgICAgICAgIHlvdSBwbGFuIHRvIGVkaXQuCi0gICAgICAgICAgICAgICAgICAgIFlvdSBub3RpZnkgUXVpbHQgYnkgYWRkaW5nIHRoZSBmaWxlcyB0byB0aGUgcGF0Y2ggeW91IGp1c3QgY3JlYXRlZDoKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIHF1aWx0IGFkZCBmaWxlMS5jIGZpbGUyLmMgZmlsZTMuYwotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RWRpdCB0aGUgRmlsZXM6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgTWFrZSB5b3VyIGNoYW5nZXMgaW4gdGhlIHNvdXJjZSBjb2RlIHRvIHRoZSBmaWxlcyB5b3UgYWRkZWQKLSAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHBhdGNoLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRlc3QgWW91ciBDaGFuZ2VzOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgbW9kaWZpZWQgdGhlIHNvdXJjZSBjb2RlLCB0aGUgZWFzaWVzdCB3YXkgdG8KLSAgICAgICAgICAgICAgICAgICAgeW91ciBjaGFuZ2VzIGlzIGJ5IGNhbGxpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT4gdGFzayBhcyBzaG93biBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIGV4YW1wbGU6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBiaXRiYWtlIC1jIGNvbXBpbGUgLWYgPHJlcGxhY2VhYmxlPnBhY2thZ2U8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+LWY8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+LS1mb3JjZTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbiBmb3JjZXMgdGhlIHNwZWNpZmllZCB0YXNrIHRvIGV4ZWN1dGUuCi0gICAgICAgICAgICAgICAgICAgIElmIHlvdSBmaW5kIHByb2JsZW1zIHdpdGggeW91ciBjb2RlLCB5b3UgY2FuIGp1c3Qga2VlcCBlZGl0aW5nIGFuZAotICAgICAgICAgICAgICAgICAgICByZS10ZXN0aW5nIGl0ZXJhdGl2ZWx5IHVudGlsIHRoaW5ncyB3b3JrIGFzIGV4cGVjdGVkLgotICAgICAgICAgICAgICAgICAgICA8bm90ZT5BbGwgdGhlIG1vZGlmaWNhdGlvbnMgeW91IG1ha2UgdG8gdGhlIHRlbXBvcmFyeSBzb3VyY2UgY29kZQotICAgICAgICAgICAgICAgICAgICBkaXNhcHBlYXIgb25jZSB5b3UgcnVuIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtY2xlYW4nPjxmaWxlbmFtZT5kb19jbGVhbjwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgb3IKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNsZWFuYWxsJz48ZmlsZW5hbWU+ZG9fY2xlYW5hbGw8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgIHRhc2tzIHVzaW5nIEJpdEJha2UgKGkuZS4KLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UgLWMgY2xlYW4gPHJlcGxhY2VhYmxlPnBhY2thZ2U8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIGFuZAotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSAtYyBjbGVhbmFsbCA8cmVwbGFjZWFibGU+cGFja2FnZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4pLgotICAgICAgICAgICAgICAgICAgICBNb2RpZmljYXRpb25zIHdpbGwgYWxzbyBkaXNhcHBlYXIgaWYgeW91IHVzZSB0aGUgPGZpbGVuYW1lPnJtX3dvcms8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBmZWF0dXJlIGFzIGRlc2NyaWJlZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjcXMtYnVpbGRpbmctaW1hZ2VzJz5CdWlsZGluZyBJbWFnZXM8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydC4KLSAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R2VuZXJhdGUgdGhlIFBhdGNoOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIE9uY2UgeW91ciBjaGFuZ2VzIHdvcmsgYXMgZXhwZWN0ZWQsIHlvdSBuZWVkIHRvIHVzZSBRdWlsdCB0byBnZW5lcmF0ZSB0aGUgZmluYWwgcGF0Y2ggdGhhdAotICAgICAgICAgICAgICAgICAgICBjb250YWlucyBhbGwgeW91ciBtb2RpZmljYXRpb25zLgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgcXVpbHQgcmVmcmVzaAotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQsIHRoZSA8ZmlsZW5hbWU+bXlfY2hhbmdlcy5wYXRjaDwvZmlsZW5hbWU+IGZpbGUgaGFzIGFsbCB5b3VyIGVkaXRzIG1hZGUKLSAgICAgICAgICAgICAgICAgICAgdG8gdGhlIDxmaWxlbmFtZT5maWxlMS5jPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5maWxlMi5jPC9maWxlbmFtZT4sIGFuZAotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZTMuYzwvZmlsZW5hbWU+IGZpbGVzLjwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IGNhbiBmaW5kIHRoZSByZXN1bHRpbmcgcGF0Y2ggZmlsZSBpbiB0aGUgPGZpbGVuYW1lPnBhdGNoZXMvPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UgKDxmaWxlbmFtZT5TPC9maWxlbmFtZT4pIGRpcmVjdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNvcHkgdGhlIFBhdGNoIEZpbGU6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgRm9yIHNpbXBsaWNpdHksIGNvcHkgdGhlIHBhdGNoIGZpbGUgaW50byBhIGRpcmVjdG9yeSBuYW1lZCA8ZmlsZW5hbWU+ZmlsZXM8L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICAgICAgd2hpY2ggeW91IGNhbiBjcmVhdGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IHRoYXQgaG9sZHMgdGhlIHJlY2lwZQotICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+KSBmaWxlIG9yIHRoZQotICAgICAgICAgICAgICAgICAgICBhcHBlbmQgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikgZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgUGxhY2luZyB0aGUgcGF0Y2ggaGVyZSBndWFyYW50ZWVzIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2lsbCBmaW5kCi0gICAgICAgICAgICAgICAgICAgIHRoZSBwYXRjaC4KLSAgICAgICAgICAgICAgICAgICAgTmV4dCwgYWRkIHRoZSBwYXRjaCBpbnRvIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPlNSQ19VUkk8L3VsaW5rPjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIG9mIHRoZSByZWNpcGUuCi0gICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBTUkNfVVJJICs9ICJmaWxlOi8vbXlfY2hhbmdlcy5wYXRjaCIKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KLSAgICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSdmaW5kaW5nLXRoZS10ZW1wb3Jhcnktc291cmNlLWNvZGUnPgotICAgICAgICA8dGl0bGU+RmluZGluZyBUZW1wb3JhcnkgU291cmNlIENvZGU8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgWW91IG1pZ2h0IGZpbmQgaXQgaGVscGZ1bCBkdXJpbmcgZGV2ZWxvcG1lbnQgdG8gbW9kaWZ5IHRoZQotICAgICAgICAgICAgdGVtcG9yYXJ5IHNvdXJjZSBjb2RlIHVzZWQgYnkgcmVjaXBlcyB0byBidWlsZCBwYWNrYWdlcy4KLSAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBhcmUgZGV2ZWxvcGluZyBhIHBhdGNoIGFuZCB5b3UgbmVlZCB0bwotICAgICAgICAgICAgZXhwZXJpbWVudCBhIGJpdCB0byBmaWd1cmUgb3V0IHlvdXIgc29sdXRpb24uCi0gICAgICAgICAgICBBZnRlciB5b3UgaGF2ZSBpbml0aWFsbHkgYnVpbHQgdGhlIHBhY2thZ2UsIHlvdSBjYW4gaXRlcmF0aXZlbHkKLSAgICAgICAgICAgIHR3ZWFrIHRoZSBzb3VyY2UgY29kZSwgd2hpY2ggaXMgbG9jYXRlZCBpbiB0aGUKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPiwgYW5kIHRoZW4KLSAgICAgICAgICAgIHlvdSBjYW4gZm9yY2UgYSByZS1jb21waWxlIGFuZCBxdWlja2x5IHRlc3QgeW91ciBhbHRlcmVkIGNvZGUuCi0gICAgICAgICAgICBPbmNlIHlvdSBzZXR0bGUgb24gYSBzb2x1dGlvbiwgeW91IGNhbiB0aGVuIHByZXNlcnZlIHlvdXIgY2hhbmdlcwotICAgICAgICAgICAgaW4gdGhlIGZvcm0gb2YgcGF0Y2hlcy4KLSAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgUXVpbHQgZm9yIGRldmVsb3BtZW50LCBzZWUgdGhlCi0gICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctYS1xdWlsdC13b3JrZmxvdyc+VXNpbmcgUXVpbHQgaW4gWW91ciBXb3JrZmxvdzwvbGluaz4iCi0gICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBEdXJpbmcgYSBidWlsZCwgdGhlIHVucGFja2VkIHRlbXBvcmFyeSBzb3VyY2UgY29kZSB1c2VkIGJ5IHJlY2lwZXMKLSAgICAgICAgICAgIHRvIGJ1aWxkIHBhY2thZ2VzIGlzIGF2YWlsYWJsZSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5IGFzCi0gICAgICAgICAgICBkZWZpbmVkIGJ5IHRoZQotICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TJz5TPC91bGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZS4KLSAgICAgICAgICAgIEJlbG93IGlzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgPGZpbGVuYW1lPlM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBhcyBkZWZpbmVkIGluIHRoZQotICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPjoKLSAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgUyA9ICIke1dPUktESVJ9LyR7QlB9IgotICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgWW91IHNob3VsZCBiZSBhd2FyZSB0aGF0IG1hbnkgcmVjaXBlcyBvdmVycmlkZSB0aGUgPGZpbGVuYW1lPlM8L2ZpbGVuYW1lPiB2YXJpYWJsZS4KLSAgICAgICAgICAgIEZvciBleGFtcGxlLCByZWNpcGVzIHRoYXQgZmV0Y2ggdGhlaXIgc291cmNlIGZyb20gR2l0IHVzdWFsbHkgc2V0Ci0gICAgICAgICAgICA8ZmlsZW5hbWU+UzwvZmlsZW5hbWU+IHRvIDxmaWxlbmFtZT4ke1dPUktESVJ9L2dpdDwvZmlsZW5hbWU+LgotICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgVGhlCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJQJz48ZmlsZW5hbWU+QlA8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgcmVwcmVzZW50cyB0aGUgYmFzZSByZWNpcGUgbmFtZSwgd2hpY2ggY29uc2lzdHMgb2YgdGhlIG5hbWUgYW5kIHZlcnNpb246Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBCUCA9ICIke0JQTn0tJHtQVn0iCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgcGF0aCB0byB0aGUgd29yayBkaXJlY3RvcnkgZm9yIHRoZSByZWNpcGUKLSAgICAgICAgICAgICg8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvdWxpbms+KQotICAgICAgICAgICAgaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAke1RNUERJUn0vd29yay8ke01VTFRJTUFDSF9UQVJHRVRfU1lTfS8ke1BOfS8ke0VYVEVORFBFfSR7UFZ9LSR7UFJ9Ci0gICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICBUaGUgYWN0dWFsIGRpcmVjdG9yeSBkZXBlbmRzIG9uIHNldmVyYWwgdGhpbmdzOgotICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC91bGluaz46Ci0gICAgICAgICAgICAgICAgICAgIFRoZSB0b3AtbGV2ZWwgYnVpbGQgb3V0cHV0IGRpcmVjdG9yeTwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NVUxUSU1BQ0hfVEFSR0VUX1NZUyc+PGZpbGVuYW1lPk1VTFRJTUFDSF9UQVJHRVRfU1lTPC9maWxlbmFtZT48L3VsaW5rPjoKLSAgICAgICAgICAgICAgICAgICAgVGhlIHRhcmdldCBzeXN0ZW0gaWRlbnRpZmllcjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L3VsaW5rPjoKLSAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSBuYW1lPC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVEVORFBFJz48ZmlsZW5hbWU+RVhURU5EUEU8L2ZpbGVuYW1lPjwvdWxpbms+OgotICAgICAgICAgICAgICAgICAgICBUaGUgZXBvY2ggLSAoaWYKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBFJz48ZmlsZW5hbWU+UEU8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgIGlzIG5vdCBzcGVjaWZpZWQsIHdoaWNoIGlzIHVzdWFsbHkgdGhlIGNhc2UgZm9yIG1vc3QKLSAgICAgICAgICAgICAgICAgICAgcmVjaXBlcywgdGhlbiA8ZmlsZW5hbWU+RVhURU5EUEU8L2ZpbGVuYW1lPiBpcyBibGFuayk8L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz46Ci0gICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgdmVyc2lvbjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L3VsaW5rPjoKLSAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSByZXZpc2lvbjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgYXNzdW1lIGEgU291cmNlIERpcmVjdG9yeSB0b3AtbGV2ZWwgZm9sZGVyCi0gICAgICAgICAgICBuYW1lZCA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+LCBhIGRlZmF1bHQgQnVpbGQgRGlyZWN0b3J5IGF0Ci0gICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS9idWlsZDwvZmlsZW5hbWU+LCBhbmQgYQotICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXV4ODYtcG9reS1saW51eDwvZmlsZW5hbWU+IG1hY2hpbmUgdGFyZ2V0Ci0gICAgICAgICAgICBzeXN0ZW0uCi0gICAgICAgICAgICBGdXJ0aGVybW9yZSwgc3VwcG9zZSB5b3VyIHJlY2lwZSBpcyBuYW1lZAotICAgICAgICAgICAgPGZpbGVuYW1lPmZvb18xLjMuMC5iYjwvZmlsZW5hbWU+LgotICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgd29yayBkaXJlY3RvcnkgdGhlIGJ1aWxkIHN5c3RlbSB1c2VzIHRvCi0gICAgICAgICAgICBidWlsZCB0aGUgcGFja2FnZSB3b3VsZCBiZSBhcyBmb2xsb3dzOgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBwb2t5L2J1aWxkL3RtcC93b3JrL3FlbXV4ODYtcG9reS1saW51eC9mb28vMS4zLjAtcjAKLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgTm93IHRoYXQgeW91IGtub3cgd2hlcmUgdG8gbG9jYXRlIHRoZSBkaXJlY3RvcnkgdGhhdCBoYXMgdGhlCi0gICAgICAgICAgICB0ZW1wb3Jhcnkgc291cmNlIGNvZGUsIHlvdSBjYW4gdXNlIGEgUXVpbHQgYXMgZGVzY3JpYmVkIGluIHNlY3Rpb24KLSAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1hLXF1aWx0LXdvcmtmbG93Jz5Vc2luZyBRdWlsdCBpbiBZb3VyIFdvcmtmbG93PC9saW5rPiIKLSAgICAgICAgICAgIHRvIG1ha2UgeW91ciBlZGl0cywgdGVzdCB0aGUgY2hhbmdlcywgYW5kIHByZXNlcnZlIHRoZSBjaGFuZ2VzIGluCi0gICAgICAgICAgICB0aGUgZm9ybSBvZiBwYXRjaGVzLgotICAgICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotPC9zZWN0aW9uPgotCi08c2VjdGlvbiBpZD0naW1hZ2UtZGV2ZWxvcG1lbnQtdXNpbmctdG9hc3Rlcic+Ci0gICAgPHRpdGxlPkltYWdlIERldmVsb3BtZW50IFVzaW5nIFRvYXN0ZXI8L3RpdGxlPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIFRvYXN0ZXIgaXMgYSB3ZWIgaW50ZXJmYWNlIHRvIHRoZSBZb2N0byBQcm9qZWN0J3MgT3BlbkVtYmVkZGVkIGJ1aWxkCi0gICAgICAgIHN5c3RlbS4KLSAgICAgICAgWW91IGNhbiBpbml0aWF0ZSBidWlsZHMgdXNpbmcgVG9hc3RlciBhcyB3ZWxsIGFzIGV4YW1pbmUgdGhlIHJlc3VsdHMKLSAgICAgICAgYW5kIHN0YXRpc3RpY3Mgb2YgYnVpbGRzLgotICAgICAgICBTZWUgdGhlCi0gICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1RPQVNUX1VSTDsjdG9hc3Rlci1tYW51YWwtaW50cm8nPlRvYXN0ZXIgVXNlciBNYW51YWw8L3VsaW5rPgotICAgICAgICBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHNldCB1cCBhbmQgdXNlIFRvYXN0ZXIgdG8gYnVpbGQgaW1hZ2VzLgotICAgIDwvcGFyYT4KLTwvc2VjdGlvbj4KLQotPHNlY3Rpb24gaWQ9InBsYXRkZXYtYXBwZGV2LWRldnNoZWxsIj4KLSAgICA8dGl0bGU+VXNpbmcgYSBEZXZlbG9wbWVudCBTaGVsbDwvdGl0bGU+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgV2hlbiBkZWJ1Z2dpbmcgY2VydGFpbiBjb21tYW5kcyBvciBldmVuIHdoZW4ganVzdCBlZGl0aW5nIHBhY2thZ2VzLAotICAgICAgICA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPiBjYW4gYmUgYSB1c2VmdWwgdG9vbC4KLSAgICAgICAgV2hlbiB5b3UgaW52b2tlIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+LCBhbGwgdGFza3MgdXAgdG8gYW5kCi0gICAgICAgIGluY2x1ZGluZwotICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtcGF0Y2gnPjxmaWxlbmFtZT5kb19wYXRjaDwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgYXJlIHJ1biBmb3IgdGhlIHNwZWNpZmllZCB0YXJnZXQuCi0gICAgICAgIFRoZW4sIGEgbmV3IHRlcm1pbmFsIGlzIG9wZW5lZCBhbmQgeW91IGFyZSBwbGFjZWQgaW4KLSAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUyc+PGZpbGVuYW1lPlM8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiwKLSAgICAgICAgdGhlIHNvdXJjZSBkaXJlY3RvcnkuCi0gICAgICAgIEluIHRoZSBuZXcgdGVybWluYWwsIGFsbCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkLXJlbGF0ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZQotICAgICAgICBzdGlsbCBkZWZpbmVkIHNvIHlvdSBjYW4gdXNlIGNvbW1hbmRzIHN1Y2ggYXMgPGZpbGVuYW1lPmNvbmZpZ3VyZTwvZmlsZW5hbWU+IGFuZAotICAgICAgICA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+LgotICAgICAgICBUaGUgY29tbWFuZHMgZXhlY3V0ZSBqdXN0IGFzIGlmIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdlcmUgZXhlY3V0aW5nIHRoZW0uCi0gICAgICAgIENvbnNlcXVlbnRseSwgd29ya2luZyB0aGlzIHdheSBjYW4gYmUgaGVscGZ1bCB3aGVuIGRlYnVnZ2luZyBhIGJ1aWxkIG9yIHByZXBhcmluZwotICAgICAgICBzb2Z0d2FyZSB0byBiZSB1c2VkIHdpdGggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHRoYXQgdXNlcyA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPiBvbiBhIHRhcmdldCBuYW1lZAotICAgICAgICA8ZmlsZW5hbWU+bWF0Y2hib3gtZGVza3RvcDwvZmlsZW5hbWU+OgotICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgYml0YmFrZSBtYXRjaGJveC1kZXNrdG9wIC1jIGRldnNoZWxsCi0gICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgVGhpcyBjb21tYW5kIHNwYXducyBhIHRlcm1pbmFsIHdpdGggYSBzaGVsbCBwcm9tcHQgd2l0aGluIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgZW52aXJvbm1lbnQuCi0gICAgICAgIFRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItT0VfVEVSTUlOQUwnPjxmaWxlbmFtZT5PRV9URVJNSU5BTDwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgdmFyaWFibGUgY29udHJvbHMgd2hhdCB0eXBlIG9mIHNoZWxsIGlzIG9wZW5lZC4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgRm9yIHNwYXduZWQgdGVybWluYWxzLCB0aGUgZm9sbG93aW5nIG9jY3VyczoKLSAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpbmNsdWRlcyB0aGUKLSAgICAgICAgICAgICAgICBjcm9zcy10b29sY2hhaW4uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIDxmaWxlbmFtZT5wa2djb25maWc8L2ZpbGVuYW1lPiB2YXJpYWJsZXMgZmluZCB0aGUgY29ycmVjdAotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ucGM8L2ZpbGVuYW1lPiBmaWxlcy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIDxmaWxlbmFtZT5jb25maWd1cmU8L2ZpbGVuYW1lPiBjb21tYW5kIGZpbmRzIHRoZQotICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3Qgc2l0ZSBmaWxlcyBhcyB3ZWxsIGFzIGFueSBvdGhlciBuZWNlc3NhcnkgZmlsZXMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgICBXaXRoaW4gdGhpcyBlbnZpcm9ubWVudCwgeW91IGNhbiBydW4gY29uZmlndXJlIG9yIGNvbXBpbGUKLSAgICAgICAgY29tbWFuZHMgYXMgaWYgdGhleSB3ZXJlIGJlaW5nIHJ1biBieQotICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpdHNlbGYuCi0gICAgICAgIEFzIG5vdGVkIGVhcmxpZXIsIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbHNvIGF1dG9tYXRpY2FsbHkgY2hhbmdlcyB0byB0aGUKLSAgICAgICAgU291cmNlIERpcmVjdG9yeSAoPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L3VsaW5rPikuCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIFRvIG1hbnVhbGx5IHJ1biBhIHNwZWNpZmljIHRhc2sgdXNpbmcgPGZpbGVuYW1lPmRldnNoZWxsPC9maWxlbmFtZT4sCi0gICAgICAgIHJ1biB0aGUgY29ycmVzcG9uZGluZyA8ZmlsZW5hbWU+cnVuLio8L2ZpbGVuYW1lPiBzY3JpcHQgaW4KLSAgICAgICAgdGhlCi0gICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59L3RlbXA8L2ZpbGVuYW1lPgotICAgICAgICBkaXJlY3RvcnkgKGUuZy4sCi0gICAgICAgIDxmaWxlbmFtZT5ydW4uZG9fY29uZmlndXJlLjwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnBpZDwvcmVwbGFjZWFibGU+KS4KLSAgICAgICAgSWYgYSB0YXNrJ3Mgc2NyaXB0IGRvZXMgbm90IGV4aXN0LCB3aGljaCB3b3VsZCBiZSB0aGUgY2FzZSBpZiB0aGUgdGFzayB3YXMKLSAgICAgICAgc2tpcHBlZCBieSB3YXkgb2YgdGhlIHNzdGF0ZSBjYWNoZSwgeW91IGNhbiBjcmVhdGUgdGhlIHRhc2sgYnkgZmlyc3QgcnVubmluZwotICAgICAgICBpdCBvdXRzaWRlIG9mIHRoZSA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPjoKLSAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGJpdGJha2UgLWMgPHJlcGxhY2VhYmxlPnRhc2s8L3JlcGxhY2VhYmxlPgotICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgIDxub3RlPjx0aXRsZT5Ob3RlczwvdGl0bGU+Ci0gICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeGVjdXRpb24gb2YgYSB0YXNrJ3MgPGZpbGVuYW1lPnJ1bi4qPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0IGFuZCBCaXRCYWtlJ3MgZXhlY3V0aW9uIG9mIGEgdGFzayBhcmUgaWRlbnRpY2FsLgotICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgcnVubmluZyB0aGUgc2NyaXB0IHJlLXJ1bnMgdGhlIHRhc2sKLSAgICAgICAgICAgICAgICAgICAganVzdCBhcyBpdCB3b3VsZCBiZSBydW4gdXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIC1jPC9maWxlbmFtZT4gY29tbWFuZC4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFueSA8ZmlsZW5hbWU+cnVuLio8L2ZpbGVuYW1lPiBmaWxlIHRoYXQgZG9lcyBub3QKLSAgICAgICAgICAgICAgICAgICAgaGF2ZSBhIDxmaWxlbmFtZT4ucGlkPC9maWxlbmFtZT4gZXh0ZW5zaW9uIGlzIGEKLSAgICAgICAgICAgICAgICAgICAgc3ltYm9saWMgbGluayAoc3ltbGluaykgdG8gdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgdGhhdAotICAgICAgICAgICAgICAgICAgICBmaWxlLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICA8L25vdGU+Ci0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIFJlbWVtYmVyLCB0aGF0IHRoZSA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPiBpcyBhIG1lY2hhbmlzbSB0aGF0IGFsbG93cwotICAgICAgICB5b3UgdG8gZ2V0IGludG8gdGhlIEJpdEJha2UgdGFzayBleGVjdXRpb24gZW52aXJvbm1lbnQuCi0gICAgICAgIEFuZCBhcyBzdWNoLCBhbGwgY29tbWFuZHMgbXVzdCBiZSBjYWxsZWQganVzdCBhcyBCaXRCYWtlIHdvdWxkIGNhbGwgdGhlbS4KLSAgICAgICAgVGhhdCBtZWFucyB5b3UgbmVlZCB0byBwcm92aWRlIHRoZSBhcHByb3ByaWF0ZSBvcHRpb25zIGZvcgotICAgICAgICBjcm9zcy1jb21waWxhdGlvbiBhbmQgc28gZm9ydGggYXMgYXBwbGljYWJsZS4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgV2hlbiB5b3UgYXJlIGZpbmlzaGVkIHVzaW5nIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+LCBleGl0IHRoZSBzaGVsbAotICAgICAgICBvciBjbG9zZSB0aGUgdGVybWluYWwgd2luZG93LgotICAgIDwvcGFyYT4KLQotICAgIDxub3RlPjx0aXRsZT5Ob3RlczwvdGl0bGU+Ci0gICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgSXQgaXMgd29ydGggcmVtZW1iZXJpbmcgdGhhdCB3aGVuIHVzaW5nIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gdXNlIHRoZSBmdWxsIGNvbXBpbGVyIG5hbWUgc3VjaCBhcyA8ZmlsZW5hbWU+YXJtLXBva3ktbGludXgtZ251ZWFiaS1nY2M8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIGluc3RlYWQgb2YganVzdCB1c2luZyA8ZmlsZW5hbWU+Z2NjPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgVGhlIHNhbWUgYXBwbGllcyB0byBvdGhlciBhcHBsaWNhdGlvbnMgc3VjaCBhcyA8ZmlsZW5hbWU+YmludXRpbHM8L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlidG9vbDwvZmlsZW5hbWU+IGFuZCBzbyBmb3J0aC4KLSAgICAgICAgICAgICAgICBCaXRCYWtlIHNldHMgdXAgZW52aXJvbm1lbnQgdmFyaWFibGVzIHN1Y2ggYXMgPGZpbGVuYW1lPkNDPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICB0byBhc3Npc3QgYXBwbGljYXRpb25zLCBzdWNoIGFzIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gdG8gZmluZCB0aGUgY29ycmVjdCB0b29scy4KLSAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICBJdCBpcyBhbHNvIHdvcnRoIG5vdGluZyB0aGF0IDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+IHN0aWxsIHdvcmtzIG92ZXIKLSAgICAgICAgICAgICAgICBYMTEgZm9yd2FyZGluZyBhbmQgc2ltaWxhciBzaXR1YXRpb25zLgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICA8L25vdGU+Ci08L3NlY3Rpb24+Ci0KLTxzZWN0aW9uIGlkPSJwbGF0ZGV2LWFwcGRldi1kZXZweXNoZWxsIj4KLSAgICA8dGl0bGU+VXNpbmcgYSBEZXZlbG9wbWVudCBQeXRob24gU2hlbGw8L3RpdGxlPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIFNpbWlsYXIgdG8gd29ya2luZyB3aXRoaW4gYSBkZXZlbG9wbWVudCBzaGVsbCBhcyBkZXNjcmliZWQgaW4KLSAgICAgICAgdGhlIHByZXZpb3VzIHNlY3Rpb24sIHlvdSBjYW4gYWxzbyBzcGF3biBhbmQgd29yayB3aXRoaW4gYW4KLSAgICAgICAgaW50ZXJhY3RpdmUgUHl0aG9uIGRldmVsb3BtZW50IHNoZWxsLgotICAgICAgICBXaGVuIGRlYnVnZ2luZyBjZXJ0YWluIGNvbW1hbmRzIG9yIGV2ZW4gd2hlbiBqdXN0IGVkaXRpbmcgcGFja2FnZXMsCi0gICAgICAgIDxmaWxlbmFtZT5kZXZweXNoZWxsPC9maWxlbmFtZT4gY2FuIGJlIGEgdXNlZnVsIHRvb2wuCi0gICAgICAgIFdoZW4geW91IGludm9rZSA8ZmlsZW5hbWU+ZGV2cHlzaGVsbDwvZmlsZW5hbWU+LCBhbGwgdGFza3MgdXAgdG8gYW5kCi0gICAgICAgIGluY2x1ZGluZwotICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtcGF0Y2gnPjxmaWxlbmFtZT5kb19wYXRjaDwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgYXJlIHJ1biBmb3IgdGhlIHNwZWNpZmllZCB0YXJnZXQuCi0gICAgICAgIFRoZW4gYSBuZXcgdGVybWluYWwgaXMgb3BlbmVkLgotICAgICAgICBBZGRpdGlvbmFsbHksIGtleSBQeXRob24gb2JqZWN0cyBhbmQgY29kZSBhcmUgYXZhaWxhYmxlIGluIHRoZSBzYW1lCi0gICAgICAgIHdheSB0aGV5IGFyZSB0byBCaXRCYWtlIHRhc2tzLCBpbiBwYXJ0aWN1bGFyLCB0aGUgZGF0YSBzdG9yZSAnZCcuCi0gICAgICAgIFNvLCBjb21tYW5kcyBzdWNoIGFzIHRoZSBmb2xsb3dpbmcgYXJlIHVzZWZ1bCB3aGVuIGV4cGxvcmluZyB0aGUgZGF0YQotICAgICAgICBzdG9yZSBhbmQgcnVubmluZyBmdW5jdGlvbnM6Ci0gICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgcHlkZXZzaGVsbD4gZC5nZXRWYXIoIlNUQUdJTkdfRElSIiwgVHJ1ZSkKLSAgICAgJy9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMnCi0gICAgIHB5ZGV2c2hlbGw+IGQuZ2V0VmFyKCJTVEFHSU5HX0RJUiIsIEZhbHNlKQotICAgICAnJHtUTVBESVJ9L3N5c3Jvb3RzJwotICAgICBweWRldnNoZWxsPiBkLnNldFZhcigiRk9PIiwgImJhciIpCi0gICAgIHB5ZGV2c2hlbGw+IGQuZ2V0VmFyKCJGT08iLCBUcnVlKQotICAgICAnYmFyJwotICAgICBweWRldnNoZWxsPiBkLmRlbFZhcigiRk9PIikKLSAgICAgcHlkZXZzaGVsbD4gZC5nZXRWYXIoIkZPTyIsIFRydWUpCi0gICAgIHB5ZGV2c2hlbGw+IGJiLmJ1aWxkLmV4ZWNfZnVuYygiZG9fdW5wYWNrIiwgZCkKLSAgICAgcHlkZXZzaGVsbD4KLSAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICBUaGUgY29tbWFuZHMgZXhlY3V0ZSBqdXN0IGFzIGlmIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdlcmUgZXhlY3V0aW5nIHRoZW0uCi0gICAgICAgIENvbnNlcXVlbnRseSwgd29ya2luZyB0aGlzIHdheSBjYW4gYmUgaGVscGZ1bCB3aGVuIGRlYnVnZ2luZyBhIGJ1aWxkIG9yIHByZXBhcmluZwotICAgICAgICBzb2Z0d2FyZSB0byBiZSB1c2VkIHdpdGggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHRoYXQgdXNlcyA8ZmlsZW5hbWU+ZGV2cHlzaGVsbDwvZmlsZW5hbWU+IG9uIGEgdGFyZ2V0IG5hbWVkCi0gICAgICAgIDxmaWxlbmFtZT5tYXRjaGJveC1kZXNrdG9wPC9maWxlbmFtZT46Ci0gICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBiaXRiYWtlIG1hdGNoYm94LWRlc2t0b3AgLWMgZGV2cHlzaGVsbAotICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIFRoaXMgY29tbWFuZCBzcGF3bnMgYSB0ZXJtaW5hbCBhbmQgcGxhY2VzIHlvdSBpbiBhbiBpbnRlcmFjdGl2ZQotICAgICAgICBQeXRob24gaW50ZXJwcmV0ZXIgd2l0aGluIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgZW52aXJvbm1lbnQuCi0gICAgICAgIFRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItT0VfVEVSTUlOQUwnPjxmaWxlbmFtZT5PRV9URVJNSU5BTDwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgdmFyaWFibGUgY29udHJvbHMgd2hhdCB0eXBlIG9mIHNoZWxsIGlzIG9wZW5lZC4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgV2hlbiB5b3UgYXJlIGZpbmlzaGVkIHVzaW5nIDxmaWxlbmFtZT5kZXZweXNoZWxsPC9maWxlbmFtZT4sIHlvdQotICAgICAgICBjYW4gZXhpdCB0aGUgc2hlbGwgZWl0aGVyIGJ5IHVzaW5nIEN0cmwrZCBvciBjbG9zaW5nIHRoZSB0ZXJtaW5hbAotICAgICAgICB3aW5kb3cuCi0gICAgPC9wYXJhPgotPC9zZWN0aW9uPgotCi08L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtbmV3YmllLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1uZXdiaWUueG1sCmluZGV4IGFkMzJhYzYuLmEwZmJiNGIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1uZXdiaWUueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1uZXdiaWUueG1sCkBAIC02LDYzICs2LDEzIEBACiAKIDx0aXRsZT5UaGUgWW9jdG8gUHJvamVjdCBPcGVuIFNvdXJjZSBEZXZlbG9wbWVudCBFbnZpcm9ubWVudDwvdGl0bGU+CiAKLTxwYXJhPgotICAgIFRoaXMgY2hhcHRlciBoZWxwcyB5b3UgdW5kZXJzdGFuZCB0aGUgWW9jdG8gUHJvamVjdCBhcyBhbiBvcGVuIHNvdXJjZSBkZXZlbG9wbWVudCBwcm9qZWN0LgotICAgIEluIGdlbmVyYWwsIHdvcmtpbmcgaW4gYW4gb3BlbiBzb3VyY2UgZW52aXJvbm1lbnQgaXMgdmVyeSBkaWZmZXJlbnQgZnJvbSB3b3JraW5nIGluIGEKLSAgICBjbG9zZWQsIHByb3ByaWV0YXJ5IGVudmlyb25tZW50LgotICAgIEFkZGl0aW9uYWxseSwgdGhlIFlvY3RvIFByb2plY3QgdXNlcyBzcGVjaWZpYyB0b29scyBhbmQgY29uc3RydWN0cyBhcyBwYXJ0IG9mIGl0cyBkZXZlbG9wbWVudAotICAgIGVudmlyb25tZW50LgotICAgIFRoaXMgY2hhcHRlciBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIG9wZW4gc291cmNlIHBoaWxvc29waHksIHVzaW5nIHRoZQotICAgIFlvY3RvIFByb2plY3QgaW4gYSB0ZWFtIGVudmlyb25tZW50LCBzb3VyY2UgcmVwb3NpdG9yaWVzLCBZb2N0byBQcm9qZWN0Ci0gICAgdGVybXMsIGxpY2Vuc2luZywgdGhlIG9wZW4gc291cmNlIGRpc3RyaWJ1dGVkIHZlcnNpb24gY29udHJvbCBzeXN0ZW0gR2l0LAotICAgIHdvcmtmbG93cywgYnVnIHRyYWNraW5nLCBhbmQgaG93IHRvIHN1Ym1pdCBjaGFuZ2VzLgotPC9wYXJhPgotCi08c2VjdGlvbiBpZD0nb3Blbi1zb3VyY2UtcGhpbG9zb3BoeSc+Ci0gICAgPHRpdGxlPk9wZW4gU291cmNlIFBoaWxvc29waHk8L3RpdGxlPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIE9wZW4gc291cmNlIHBoaWxvc29waHkgaXMgY2hhcmFjdGVyaXplZCBieSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBkaXJlY3RlZCBieSBwZWVyIHByb2R1Y3Rpb24KLSAgICAgICAgYW5kIGNvbGxhYm9yYXRpb24gdGhyb3VnaCBhbiBhY3RpdmUgY29tbXVuaXR5IG9mIGRldmVsb3BlcnMuCi0gICAgICAgIENvbnRyYXN0IHRoaXMgdG8gdGhlIG1vcmUgc3RhbmRhcmQgY2VudHJhbGl6ZWQgZGV2ZWxvcG1lbnQgbW9kZWxzIHVzZWQgYnkgY29tbWVyY2lhbCBzb2Z0d2FyZQotICAgICAgICBjb21wYW5pZXMgd2hlcmUgYSBmaW5pdGUgc2V0IG9mIGRldmVsb3BlcnMgcHJvZHVjZXMgYSBwcm9kdWN0IGZvciBzYWxlIHVzaW5nIGEgZGVmaW5lZCBzZXQKLSAgICAgICAgb2YgcHJvY2VkdXJlcyB0aGF0IHVsdGltYXRlbHkgcmVzdWx0IGluIGFuIGVuZCBwcm9kdWN0IHdob3NlIGFyY2hpdGVjdHVyZSBhbmQgc291cmNlIG1hdGVyaWFsCi0gICAgICAgIGFyZSBjbG9zZWQgdG8gdGhlIHB1YmxpYy4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgT3BlbiBzb3VyY2UgcHJvamVjdHMgY29uY2VwdHVhbGx5IGhhdmUgZGlmZmVyaW5nIGNvbmN1cnJlbnQgYWdlbmRhcywgYXBwcm9hY2hlcywgYW5kIHByb2R1Y3Rpb24uCi0gICAgICAgIFRoZXNlIGZhY2V0cyBvZiB0aGUgZGV2ZWxvcG1lbnQgcHJvY2VzcyBjYW4gY29tZSBmcm9tIGFueW9uZSBpbiB0aGUgcHVibGljIChjb21tdW5pdHkpIHRoYXQgaGFzIGEKLSAgICAgICAgc3Rha2UgaW4gdGhlIHNvZnR3YXJlIHByb2plY3QuCi0gICAgICAgIFRoZSBvcGVuIHNvdXJjZSBlbnZpcm9ubWVudCBjb250YWlucyBuZXcgY29weXJpZ2h0LCBsaWNlbnNpbmcsIGRvbWFpbiwgYW5kIGNvbnN1bWVyIGlzc3VlcwotICAgICAgICB0aGF0IGRpZmZlciBmcm9tIHRoZSBtb3JlIHRyYWRpdGlvbmFsIGRldmVsb3BtZW50IGVudmlyb25tZW50LgotICAgICAgICBJbiBhbiBvcGVuIHNvdXJjZSBlbnZpcm9ubWVudCwgdGhlIGVuZCBwcm9kdWN0LCBzb3VyY2UgbWF0ZXJpYWwsIGFuZCBkb2N1bWVudGF0aW9uIGFyZQotICAgICAgICBhbGwgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgYXQgbm8gY29zdC4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgQSBiZW5jaG1hcmsgZXhhbXBsZSBvZiBhbiBvcGVuIHNvdXJjZSBwcm9qZWN0IGlzIHRoZSBMaW51eCBrZXJuZWwsIHdoaWNoIHdhcyBpbml0aWFsbHkgY29uY2VpdmVkCi0gICAgICAgIGFuZCBjcmVhdGVkIGJ5IEZpbm5pc2ggY29tcHV0ZXIgc2NpZW5jZSBzdHVkZW50IExpbnVzIFRvcnZhbGRzIGluIDE5OTEuCi0gICAgICAgIENvbnZlcnNlbHksIGEgZ29vZCBleGFtcGxlIG9mIGEgbm9uLW9wZW4gc291cmNlIHByb2plY3QgaXMgdGhlCi0gICAgICAgIDx0cmFkZW1hcmsgY2xhc3M9J3JlZ2lzdGVyZWQnPldpbmRvd3M8L3RyYWRlbWFyaz4gZmFtaWx5IG9mIG9wZXJhdGluZwotICAgICAgICBzeXN0ZW1zIGRldmVsb3BlZCBieSA8dHJhZGVtYXJrIGNsYXNzPSdyZWdpc3RlcmVkJz5NaWNyb3NvZnQ8L3RyYWRlbWFyaz4gQ29ycG9yYXRpb24uCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIFdpa2lwZWRpYSBoYXMgYSBnb29kIGhpc3RvcmljYWwgZGVzY3JpcHRpb24gb2YgdGhlIE9wZW4gU291cmNlIFBoaWxvc29waHkKLSAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9PcGVuX3NvdXJjZSc+aGVyZTwvdWxpbms+LgotICAgICAgICBZb3UgY2FuIGFsc28gZmluZCBoZWxwZnVsIGluZm9ybWF0aW9uIG9uIGhvdyB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgTGludXggQ29tbXVuaXR5Ci0gICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9sZG4ubGludXhmb3VuZGF0aW9uLm9yZy9ib29rL2hvdy1wYXJ0aWNpcGF0ZS1saW51eC1jb21tdW5pdHknPmhlcmU8L3VsaW5rPi4KLSAgICA8L3BhcmE+Ci08L3NlY3Rpb24+Ci0KIDxzZWN0aW9uIGlkPSJ1c2luZ3Bva3ktY2hhbmdlcy1jb2xsYWJvcmF0ZSI+Ci0gICAgPHRpdGxlPlVzaW5nIHRoZSBZb2N0byBQcm9qZWN0IGluIGEgVGVhbSBFbnZpcm9ubWVudDwvdGl0bGU+CisgICAgPHRpdGxlPlNldHRpbmcgVXAgYSBUZWFtIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ8L3RpdGxlPgogCiAgICAgPHBhcmE+CiAgICAgICAgIEl0IG1pZ2h0IG5vdCBiZSBpbW1lZGlhdGVseSBjbGVhciBob3cgeW91IGNhbiB1c2UgdGhlIFlvY3RvCi0gICAgICAgIFByb2plY3QgaW4gYSB0ZWFtIGVudmlyb25tZW50LCBvciBzY2FsZSBpdCBmb3IgYSBsYXJnZSB0ZWFtIG9mCi0gICAgICAgIGRldmVsb3BlcnMuCisgICAgICAgIFByb2plY3QgaW4gYSB0ZWFtIGRldmVsb3BtZW50IGVudmlyb25tZW50LCBvciBzY2FsZSBpdCBmb3IgYSBsYXJnZQorICAgICAgICB0ZWFtIG9mIGRldmVsb3BlcnMuCiAgICAgICAgIE9uZSBvZiB0aGUgc3RyZW5ndGhzIG9mIHRoZSBZb2N0byBQcm9qZWN0IGlzIHRoYXQgaXQgaXMgZXh0cmVtZWx5CiAgICAgICAgIGZsZXhpYmxlLgogICAgICAgICBUaHVzLCB5b3UgY2FuIGFkYXB0IGl0IHRvIG1hbnkgZGlmZmVyZW50IHVzZSBjYXNlcyBhbmQgc2NlbmFyaW9zLgpAQCAtNzEsMTUwNSArMjEsNjE1IEBACiAgICAgPC9wYXJhPgogCiAgICAgPHBhcmE+Ci0gICAgICAgIFRvIGhlbHAgd2l0aCB0aGVzZSB0eXBlcyBvZiBzaXR1YXRpb25zLCB0aGlzIHNlY3Rpb24gcHJlc2VudHMKLSAgICAgICAgc29tZSBvZiB0aGUgcHJvamVjdCdzIG1vc3Qgc3VjY2Vzc2Z1bCBleHBlcmllbmNlcywKLSAgICAgICAgcHJhY3RpY2VzLCBzb2x1dGlvbnMsIGFuZCBhdmFpbGFibGUgdGVjaG5vbG9naWVzIHRoYXQgd29yayB3ZWxsLgotICAgICAgICBLZWVwIGluIG1pbmQsIHRoZSBpbmZvcm1hdGlvbiBoZXJlIGlzIGEgc3RhcnRpbmcgcG9pbnQuCisgICAgICAgIFRvIGhlbHAgeW91IHVuZGVyc3RhbmQgaG93IHRvIHNldCB1cCB0aGlzIHR5cGUgb2YgZW52aXJvbm1lbnQsCisgICAgICAgIHRoaXMgc2VjdGlvbiBwcmVzZW50cyBhIHByb2NlZHVyZSB0aGF0IGdpdmVzIHlvdSB0aGUgaW5mb3JtYXRpb24KKyAgICAgICAgdG8gbGVhcm4gaG93IHRvIGdldCB0aGUgcmVzdWx0cyB5b3Ugd2FudC4KKyAgICAgICAgVGhlIHByb2NlZHVyZSBpcyBoaWdoLWxldmVsIGFuZCBwcmVzZW50cyBzb21lIG9mIHRoZSBwcm9qZWN0J3MgbW9zdAorICAgICAgICBzdWNjZXNzZnVsIGV4cGVyaWVuY2VzLCBwcmFjdGljZXMsIHNvbHV0aW9ucywgYW5kIGF2YWlsYWJsZQorICAgICAgICB0ZWNobm9sb2dpZXMgdGhhdCB3b3JrIHdlbGwuCisgICAgICAgIEtlZXAgaW4gbWluZCwgdGhlIHByb2NlZHVyZSBoZXJlIGlzIGEgc3RhcnRpbmcgcG9pbnQuCiAgICAgICAgIFlvdSBjYW4gYnVpbGQgb2ZmIGl0IGFuZCBjdXN0b21pemUgaXQgdG8gZml0IGFueQogICAgICAgICBwYXJ0aWN1bGFyIHdvcmtpbmcgZW52aXJvbm1lbnQgYW5kIHNldCBvZiBwcmFjdGljZXMuCi0gICAgPC9wYXJhPgorICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkRldGVybWluZSBXaG8gaXMgR29pbmcgdG8gYmUgRGV2ZWxvcGluZzo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hvIGlzIGdvaW5nIHRvIGJlIGRvaW5nIGFueXRoaW5nCisgICAgICAgICAgICAgICAgcmVsYXRlZCB0byB0aGUgWW9jdG8gUHJvamVjdCBhbmQgd2hhdCB0aGVpciByb2xlcyB3b3VsZCBiZS4KKyAgICAgICAgICAgICAgICBNYWtpbmcgdGhpcyBkZXRlcm1pbmF0aW9uIGlzIGVzc2VudGlhbCB0byBjb21wbGV0aW5nIHRoZQorICAgICAgICAgICAgICAgIHN0ZXBzIHR3byBhbmQgdGhyZWUsIHdoaWNoIGFyZSB0byBnZXQgeW91ciBlcXVpcG1lbnQgdG9nZXRoZXIKKyAgICAgICAgICAgICAgICBhbmQgc2V0IHVwIHlvdXIgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQncyBoYXJkd2FyZSB0b3BvbG9neS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CiAKLSAgICA8c2VjdGlvbiBpZD0nYmVzdC1wcmFjdGljZXMtc3lzdGVtLWNvbmZpZ3VyYXRpb25zJz4KLSAgICAgICAgPHRpdGxlPlN5c3RlbSBDb25maWd1cmF0aW9uczwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBTeXN0ZW1zIGFjcm9zcyBhIGxhcmdlIHRlYW0gc2hvdWxkIG1lZXQgdGhlIG5lZWRzIG9mCi0gICAgICAgICAgICB0d28gdHlwZXMgb2YgZGV2ZWxvcGVyczogdGhvc2Ugd29ya2luZyBvbiB0aGUgY29udGVudHMgb2YgdGhlCi0gICAgICAgICAgICBvcGVyYXRpbmcgc3lzdGVtIGltYWdlIGl0c2VsZiBhbmQgdGhvc2UgZGV2ZWxvcGluZyBhcHBsaWNhdGlvbnMuCi0gICAgICAgICAgICBSZWdhcmRsZXNzIG9mIHRoZSB0eXBlIG9mIGRldmVsb3BlciwgdGhlaXIgd29ya3N0YXRpb25zIG11c3QKLSAgICAgICAgICAgIGJlIGJvdGggcmVhc29uYWJseSBwb3dlcmZ1bCBhbmQgcnVuIExpbnV4LgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2Jlc3QtcHJhY3RpY2VzLWFwcGxpY2F0aW9uLWRldmVsb3BtZW50Jz4KLSAgICAgICAgICAgIDx0aXRsZT5BcHBsaWNhdGlvbiBEZXZlbG9wbWVudDwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEZvciBkZXZlbG9wZXJzIHdobyBtYWlubHkgZG8gYXBwbGljYXRpb24gbGV2ZWwgd29yawotICAgICAgICAgICAgICAgIG9uIHRvcCBvZiBhbiBleGlzdGluZyBzb2Z0d2FyZSBzdGFjaywKLSAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nIGxpc3Qgc2hvd3MgcHJhY3RpY2VzIHRoYXQgd29yayBiZXN0LgotICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB1c2luZyBhIFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoU0RLKSwgc2VlCi0gICAgICAgICAgICAgICAgdGhlCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfU0RLX1VSTDsjc2RrLWludHJvJz5Zb2N0byBQcm9qZWN0IFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoU0RLKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+OgorICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBmb2xsb3dpbmcgcm9sZXMgZXhpc3Q6CiAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVzZSBhIHByZS1idWlsdCB0b29sY2hhaW4gdGhhdAorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+QXBwbGljYXRpb24gRGV2ZWxvcG1lbnQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZXNlIHR5cGVzIG9mIGRldmVsb3BlcnMgZG8gYXBwbGljYXRpb24gbGV2ZWwgd29yaworICAgICAgICAgICAgICAgICAgICAgICAgb24gdG9wIG9mIGFuIGV4aXN0aW5nIHNvZnR3YXJlIHN0YWNrLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5Db3JlIFN5c3RlbSBEZXZlbG9wbWVudDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlc2UgdHlwZXMgb2YgZGV2ZWxvcGVycyB3b3JrIG9uIHRoZSBjb250ZW50cyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGluZyBzeXN0ZW0gaW1hZ2UgaXRzZWxmLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5CdWlsZCBFbmdpbmVlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB0eXBlIG9mIGRldmVsb3BlciBtYW5hZ2VzIEF1dG9idWlsZGVycyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgTm90IGFsbCBlbnZpcm9ubWVudHMgbmVlZCBhIEJ1aWxkIEVuZ2luZWVyLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5UZXN0IEVuZ2luZWVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHR5cGUgb2YgZGV2ZWxvcGVyIGNyZWF0ZXMgYW5kIG1hbmFnZXMgYXV0b21hdGVkCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0cyBuZWVkZWQgdG8gZW5zdXJlIGFsbCBhcHBsaWNhdGlvbiBhbmQgY29yZQorICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtIGRldmVsb3BtZW50IG1lZXRzIGRlc2lyZWQgcXVhbGl0eSBzdGFuZGFyZHMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+R2F0aGVyIHRoZSBIYXJkd2FyZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEJhc2VkIG9uIHRoZSBzaXplIGFuZCBtYWtlLXVwIG9mIHRoZSB0ZWFtLCBnZXQgdGhlIGhhcmR3YXJlCisgICAgICAgICAgICAgICAgdG9nZXRoZXIuCisgICAgICAgICAgICAgICAgQW55IGRldmVsb3BtZW50LCBidWlsZCwgb3IgdGVzdCBlbmdpbmVlciBzaG91bGQgYmUgdXNpbmcKKyAgICAgICAgICAgICAgICBhIHN5c3RlbSB0aGF0IGlzIHJ1bm5pbmcgYSBzdXBwb3J0ZWQgTGludXggZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgICAgIFN5c3RlbXMsIGluIGdlbmVyYWwsIHNob3VsZCBiZSBoaWdoIHBlcmZvcm1hbmNlIChlLmcuIGR1YWwsCisgICAgICAgICAgICAgICAgc2l4LWNvcmUgWGVvbnMgd2l0aCAyNCBHYnl0ZXMgb2YgUkFNIGFuZCBwbGVudHkgb2YgZGlzayBzcGFjZSkuCisgICAgICAgICAgICAgICAgWW91IGNhbiBoZWxwIGVuc3VyZSBlZmZpY2llbmN5IGJ5IGhhdmluZyBhbnkgbWFjaGluZXMgdXNlZAorICAgICAgICAgICAgICAgIGZvciB0ZXN0aW5nIG9yIHRoYXQgcnVuIEF1dG9idWlsZGVycyBiZSBhcyBoaWdoIHBlcmZvcm1hbmNlCisgICAgICAgICAgICAgICAgYXMgcG9zc2libGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlVuZGVyc3RhbmQgdGhlIEhhcmR3YXJlIFRvcG9sb2d5IG9mIHRoZSBFbnZpcm9ubWVudDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIE5vdyB0aGF0IHlvdSBrbm93IGhvdyBtYW55IGRldmVsb3BlcnMgYW5kIHN1cHBvcnQgZW5naW5lZXJzCisgICAgICAgICAgICAgICAgYXJlIHJlcXVpcmVkLCB5b3UgY2FuIHVuZGVyc3RhbmQgdGhlIHRvcG9sb2d5IG9mIHRoZQorICAgICAgICAgICAgICAgIGhhcmR3YXJlIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3dzIGEgbW9kZXJhdGVseSBzaXplZCBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCisKKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJ3cml0ZXJub3RlcyI+CisgICAgICAgICAgICAgICAgTmVlZCBmaWd1cmUuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlVzZSBHaXQgYXMgWW91ciBTb3VyY2UgQ29udHJvbCBNYW5hZ2VyIChTQ00pOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgS2VlcGluZyB5b3VyCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KKyAgICAgICAgICAgICAgICBhbmQgYW55IHNvZnR3YXJlIHlvdSBhcmUgZGV2ZWxvcGluZyB1bmRlciB0aGUKKyAgICAgICAgICAgICAgICBjb250cm9sIG9mIGFuIFNDTSBzeXN0ZW0gdGhhdCBpcyBjb21wYXRpYmxlCisgICAgICAgICAgICAgICAgd2l0aCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpcyBhZHZpc2FibGUuCisgICAgICAgICAgICAgICAgT2YgdGhlIFNDTXMgQml0QmFrZSBzdXBwb3J0cywgdGhlCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCB0ZWFtIHN0cm9uZ2x5IHJlY29tbWVuZHMgdXNpbmcKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNnaXQnPkdpdDwvdWxpbms+LgorICAgICAgICAgICAgICAgIEdpdCBpcyBhIGRpc3RyaWJ1dGVkIHN5c3RlbSB0aGF0IGlzIGVhc3kgdG8gYmFja3VwLAorICAgICAgICAgICAgICAgIGFsbG93cyB5b3UgdG8gd29yayByZW1vdGVseSwgYW5kIHRoZW4gY29ubmVjdHMgYmFjayB0byB0aGUKKyAgICAgICAgICAgICAgICBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIGFib3V0IEJpdEJha2UsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyc+Qml0QmFrZSBVc2VyIE1hbnVhbDwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5JdCBpcyByZWxhdGl2ZWx5IGVhc3kgdG8gc2V0IHVwIEdpdCBzZXJ2aWNlcyBhbmQgY3JlYXRlCisgICAgICAgICAgICAgICAgaW5mcmFzdHJ1Y3R1cmUgbGlrZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOyc+aHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnPC91bGluaz4sCisgICAgICAgICAgICAgICAgd2hpY2ggaXMgYmFzZWQgb24gc2VydmVyIHNvZnR3YXJlIGNhbGxlZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naXRvbGl0ZTwvZmlsZW5hbWU+IHdpdGggPGZpbGVuYW1lPmNnaXQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGJlaW5nIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHdlYiBpbnRlcmZhY2UgdGhhdCBsZXRzIHlvdSB2aWV3IHRoZQorICAgICAgICAgICAgICAgIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmdpdG9saXRlPC9maWxlbmFtZT4gc29mdHdhcmUgaWRlbnRpZmllcyB1c2VycworICAgICAgICAgICAgICAgIHVzaW5nIFNTSCBrZXlzIGFuZCBhbGxvd3MgYnJhbmNoLWJhc2VkCisgICAgICAgICAgICAgICAgYWNjZXNzIGNvbnRyb2xzIHRvIHJlcG9zaXRvcmllcyB0aGF0IHlvdSBjYW4gY29udHJvbCBhcyBsaXR0bGUKKyAgICAgICAgICAgICAgICBvciBhcyBtdWNoIGFzIG5lY2Vzc2FyeS4KKworICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgIFRoZSBzZXR1cCBvZiB0aGVzZSBzZXJ2aWNlcyBpcyBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMKKyAgICAgICAgICAgICAgICAgICBtYW51YWwuCisgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgc2l0ZXMgc3VjaCBhcyB0aGVzZSBleGlzdCB0aGF0IGRlc2NyaWJlIGhvdyB0bworICAgICAgICAgICAgICAgICAgIHBlcmZvcm0gc2V0dXA6CisgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC1zY20uY29tL2Jvb2svY2g0LTguaHRtbCc+R2l0IGRvY3VtZW50YXRpb248L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlcyBob3cgdG8gaW5zdGFsbCA8ZmlsZW5hbWU+Z2l0b2xpdGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIHNlcnZlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vc2l0YXJhbWMuZ2l0aHViLmNvbS9naXRvbGl0ZS9tYXN0ZXItdG9jLmh0bWwnPlRoZSA8ZmlsZW5hbWU+Z2l0b2xpdGU8L2ZpbGVuYW1lPiBtYXN0ZXIgaW5kZXg8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGwgdG9waWNzIGZvciA8ZmlsZW5hbWU+Z2l0b2xpdGU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL2dpdC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0ludGVyZmFjZXMsX2Zyb250ZW5kcyxfYW5kX3Rvb2xzJz5JbnRlcmZhY2VzLCBmcm9udGVuZHMsIGFuZCB0b29sczwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvY3VtZW50YXRpb24gb24gaG93IHRvIGNyZWF0ZSBpbnRlcmZhY2VzIGFuZCBmcm9udGVuZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgR2l0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlNldCB1cCB0aGUgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgTWFjaGluZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQgZWFybGllciwgYXBwbGljYXRpb24gZGV2ZWxvcGVycyBhcmUgY3JlYXRpbmcKKyAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbnMgb24gdG9wIG9mIGV4aXN0aW5nIHNvZnR3YXJlIHN0YWNrcy4KKyAgICAgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIHNvbWUgYmVzdCBwcmFjdGljZXMgZm9yIHNldHRpbmcgdXAgbWFjaGluZXMKKyAgICAgICAgICAgICAgICB0aGF0IGRvIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50OgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSBhIHByZS1idWlsdCB0b29sY2hhaW4gdGhhdAogICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgdGhlIHNvZnR3YXJlIHN0YWNrIGl0c2VsZi4KICAgICAgICAgICAgICAgICAgICAgICAgIFRoZW4sIGRldmVsb3AgdGhlIGFwcGxpY2F0aW9uIGNvZGUgb24gdG9wIG9mIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suCiAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCB3b3JrcyB3ZWxsIGZvciBzbWFsbCBudW1iZXJzIG9mIHJlbGF0aXZlbHkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlzb2xhdGVkIGFwcGxpY2F0aW9ucy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZW4gcG9zc2libGUsIHVzZSB0aGUgWW9jdG8gUHJvamVjdAotICAgICAgICAgICAgICAgICAgICAgICAgcGx1Zy1pbiBmb3IgdGhlIDx0cmFkZW1hcmsgY2xhc3M9J3RyYWRlJz5FY2xpcHNlPC90cmFkZW1hcms+IElERQorICAgICAgICAgICAgICAgICAgICAgICAgaXNvbGF0ZWQgYXBwbGljYXRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gcG9zc2libGUsIHVzZSB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgcGx1Zy1pbiBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dHJhZGVtYXJrIGNsYXNzPSd0cmFkZSc+RWNsaXBzZTwvdHJhZGVtYXJrPiBJREUKICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBTREsgZGV2ZWxvcG1lbnQgcHJhY3RpY2VzLgogICAgICAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyc+WW9jdG8gUHJvamVjdCBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKFNESykgRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPiIuCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfU0RLX1VSTDsnPllvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgYW5kIHRoZSBFeHRlbnNpYmxlIFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoZVNESyk8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hbnVhbC4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+S2VlcCB5b3VyIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMKLSAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQuCisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEtlZXAgeW91ciBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW5zIHVwZGF0ZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGRvIHRoaXMgdGhyb3VnaCBwcm92aXNpb25pbmcgZWl0aGVyIGFzIG5ldwogICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluIGRvd25sb2FkcyBvciBhcyB1cGRhdGVzIHRocm91Z2ggYSBwYWNrYWdlCiAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUgbWVjaGFuaXNtIHVzaW5nIDxmaWxlbmFtZT5vcGtnPC9maWxlbmFtZT4KICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHByb3ZpZGUgdXBkYXRlcyB0byBhbiBleGlzdGluZyB0b29sY2hhaW4uCiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZXhhY3QgbWVjaGFuaWNzIG9mIGhvdyBhbmQgd2hlbiB0byBkbyB0aGlzIGFyZSBhCi0gICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbiBmb3IgbG9jYWwgcG9saWN5LjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VXNlIG11bHRpcGxlIHRvb2xjaGFpbnMgaW5zdGFsbGVkIGxvY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uIGZvciBsb2NhbCBwb2xpY3kuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIG11bHRpcGxlIHRvb2xjaGFpbnMgaW5zdGFsbGVkIGxvY2FsbHkKICAgICAgICAgICAgICAgICAgICAgICAgIGludG8gZGlmZmVyZW50IGxvY2F0aW9ucyB0byBhbGxvdyBkZXZlbG9wbWVudCBhY3Jvc3MKLSAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25zLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdiZXN0LXByYWN0aWNlcy1jb3JlLXN5c3RlbS1kZXZlbG9wbWVudCc+Ci0gICAgICAgICAgICA8dGl0bGU+Q29yZSBTeXN0ZW0gRGV2ZWxvcG1lbnQ8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBGb3IgY29yZSBzeXN0ZW0gZGV2ZWxvcG1lbnQsIGl0IGlzIG9mdGVuIGJlc3QgdG8gaGF2ZSB0aGUKLSAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gaXRzZWxmIGF2YWlsYWJsZSBvbiB0aGUgZGV2ZWxvcGVyIHdvcmtzdGF0aW9ucwotICAgICAgICAgICAgICAgIHNvIGRldmVsb3BlcnMgY2FuIHJ1biB0aGVpciBvd24gYnVpbGRzIGFuZCBkaXJlY3RseQotICAgICAgICAgICAgICAgIHJlYnVpbGQgdGhlIHNvZnR3YXJlIHN0YWNrLgotICAgICAgICAgICAgICAgIFlvdSBzaG91bGQga2VlcCB0aGUgY29yZSBzeXN0ZW0gdW5jaGFuZ2VkIGFzIG11Y2ggYXMKLSAgICAgICAgICAgICAgICBwb3NzaWJsZSBhbmQgZG8geW91ciB3b3JrIGluIGxheWVycyBvbiB0b3Agb2YgdGhlIGNvcmUgc3lzdGVtLgotICAgICAgICAgICAgICAgIERvaW5nIHNvIGdpdmVzIHlvdSBhIGdyZWF0ZXIgbGV2ZWwgb2YgcG9ydGFiaWxpdHkgd2hlbgotICAgICAgICAgICAgICAgIHVwZ3JhZGluZyB0byBuZXcgdmVyc2lvbnMgb2YgdGhlIGNvcmUgc3lzdGVtIG9yIEJvYXJkCi0gICAgICAgICAgICAgICAgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcykuCi0gICAgICAgICAgICAgICAgWW91IGNhbiBzaGFyZSBsYXllcnMgYW1vbmdzdCB0aGUgZGV2ZWxvcGVycyBvZiBhIHBhcnRpY3VsYXIKLSAgICAgICAgICAgICAgICBwcm9qZWN0IGFuZCBjb250YWluIHRoZSBwb2xpY3kgY29uZmlndXJhdGlvbiB0aGF0IGRlZmluZXMKLSAgICAgICAgICAgICAgICB0aGUgcHJvamVjdC4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQXNpZGUgZnJvbSB0aGUgcHJldmlvdXMgYmVzdCBwcmFjdGljZXMsIHRoZXJlIGV4aXN0cyBhIG51bWJlcgotICAgICAgICAgICAgICAgIG9mIHRpcHMgYW5kIHRyaWNrcyB0aGF0IGNhbiBoZWxwIHNwZWVkIHVwIGNvcmUgZGV2ZWxvcG1lbnQKLSAgICAgICAgICAgICAgICBwcm9qZWN0czoKKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+U2V0IHVwIHRoZSBDb3JlIERldmVsb3BtZW50IE1hY2hpbmVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQXMgbWVudGlvbmVkIGVhcmxpZXIsIHRoZXNlIHR5cGVzIG9mIGRldmVsb3BlcnMgd29yayBvbiB0aGUKKyAgICAgICAgICAgICAgICBjb250ZW50cyBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpdHNlbGYuCisgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSBzb21lIGJlc3QgcHJhY3RpY2VzIGZvciBzZXR0aW5nIHVwIG1hY2hpbmVzCisgICAgICAgICAgICAgICAgdXNlZCBmb3IgZGV2ZWxvcGluZyBpbWFnZXM6CiAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVzZSBhCi0gICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzaGFyZWQtc3RhdGUtY2FjaGUnPlNoYXJlZCBTdGF0ZSBDYWNoZTwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICAoc3N0YXRlKSBhbW9uZyBncm91cHMgb2YgZGV2ZWxvcGVycyB3aG8gYXJlIG9uIGEKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhc3QgbmV0d29yay4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBiZXN0IHdheSB0byBzaGFyZSBzc3RhdGUgaXMgdGhyb3VnaCBhCi0gICAgICAgICAgICAgICAgICAgICAgICBOZXR3b3JrIEZpbGUgU3lzdGVtIChORlMpIHNoYXJlLgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IHVzZXIgdG8gYnVpbGQgYSBnaXZlbiBjb21wb25lbnQgZm9yIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgdGltZSBjb250cmlidXRlcyB0aGF0IG9iamVjdCB0byB0aGUgc3N0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgc3Vic2VxdWVudCBidWlsZHMgZnJvbSBvdGhlciBkZXZlbG9wZXJzIHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldXNlIHRoZSBvYmplY3QgcmF0aGVyIHRoYW4gcmVidWlsZCBpdCB0aGVtc2VsdmVzLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QWx0aG91Z2ggaXQgaXMgcG9zc2libGUgdG8gdXNlIG90aGVyIHByb3RvY29scyBmb3IgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBzc3RhdGUgc3VjaCBhcyBIVFRQIGFuZCBGVFAsIHlvdSBzaG91bGQgYXZvaWQgdGhlc2UuCi0gICAgICAgICAgICAgICAgICAgICAgICBVc2luZyBIVFRQIGxpbWl0cyB0aGUgc3N0YXRlIHRvIHJlYWQtb25seSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIEZUUCBwcm92aWRlcyBwb29yIHBlcmZvcm1hbmNlLgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBIYXZlIHRoZSBZb2N0byBQcm9qZWN0IGJ1aWxkIHN5c3RlbSBpdHNlbGYgYXZhaWxhYmxlIG9uCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGV2ZWxvcGVyIHdvcmtzdGF0aW9ucyBzbyBkZXZlbG9wZXJzIGNhbiBydW4gdGhlaXIgb3duCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZHMgYW5kIGRpcmVjdGx5IHJlYnVpbGQgdGhlIHNvZnR3YXJlIHN0YWNrLgogICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5IYXZlIGF1dG9idWlsZGVycyBjb250cmlidXRlIHRvIHRoZSBzc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvb2wgc2ltaWxhcmx5IHRvIGhvdyB0aGUgZGV2ZWxvcGVyIHdvcmtzdGF0aW9ucwotICAgICAgICAgICAgICAgICAgICAgICAgY29udHJpYnV0ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiwgc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2Jlc3QtcHJhY3RpY2VzLWF1dG9idWlsZGVycyc+QXV0b2J1aWxkZXJzPC9saW5rPiIKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CdWlsZCBzdGFuZC1hbG9uZSB0YXJiYWxscyB0aGF0IGNvbnRhaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICJtaXNzaW5nIiBzeXN0ZW0gcmVxdWlyZW1lbnRzIGlmIGZvciBzb21lIHJlYXNvbgotICAgICAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcGVyIHdvcmtzdGF0aW9ucyBkbyBub3QgbWVldCBtaW5pbXVtIHN5c3RlbQotICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZW1lbnRzIHN1Y2ggYXMgbGF0ZXN0IFB5dGhvbiB2ZXJzaW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jaHJwYXRoPC9maWxlbmFtZT4sIG9yIG90aGVyIHRvb2xzLgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBpbnN0YWxsIGFuZCByZWxvY2F0ZSB0aGUgdGFyYmFsbCBleGFjdGx5IGFzIHlvdQotICAgICAgICAgICAgICAgICAgICAgICAgd291bGQgdGhlIHVzdWFsIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbiBzbyB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbGwgZGV2ZWxvcGVycyBjYW4gbWVldCBtaW5pbXVtIHZlcnNpb24gcmVxdWlyZW1lbnRzCi0gICAgICAgICAgICAgICAgICAgICAgICBvbiBtb3N0IGRpc3RyaWJ1dGlvbnMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Vc2UgYSBzbWFsbCBudW1iZXIgb2Ygc2hhcmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgaGlnaCBwZXJmb3JtYW5jZSBzeXN0ZW1zIGZvciB0ZXN0aW5nIHB1cnBvc2VzCi0gICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiBkdWFsLCBzaXgtY29yZSBYZW9ucyB3aXRoIDI0IEdieXRlcyBvZiBSQU0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBwbGVudHkgb2YgZGlzayBzcGFjZSkuCi0gICAgICAgICAgICAgICAgICAgICAgICBEZXZlbG9wZXJzIGNhbiB1c2UgdGhlc2Ugc3lzdGVtcyBmb3Igd2lkZXIsIG1vcmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2l2ZSB0ZXN0aW5nIHdoaWxlIHRoZXkgY29udGludWUgdG8gZGV2ZWxvcAotICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxseSB1c2luZyB0aGVpciBwcmltYXJ5IGRldmVsb3BtZW50IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgS2VlcCB0aGUgY29yZSBzeXN0ZW0gdW5jaGFuZ2VkIGFzIG11Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlIGFuZCBkbyB5b3VyIHdvcmsgaW4gbGF5ZXJzIG9uIHRvcCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgRG9pbmcgc28gZ2l2ZXMgeW91IGEgZ3JlYXRlciBsZXZlbCBvZiBwb3J0YWJpbGl0eSB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgICB1cGdyYWRpbmcgdG8gbmV3IHZlcnNpb25zIG9mIHRoZSBjb3JlIHN5c3RlbSBvciBCb2FyZAorICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcykuCiAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVuYWJsZSB0aGUgUFIgU2VydmljZSB3aGVuIHBhY2thZ2UgZmVlZHMKLSAgICAgICAgICAgICAgICAgICAgICAgIG5lZWQgdG8gYmUgaW5jcmVtZW50YWwgd2l0aCBjb250aW51YWxseSBpbmNyZWFzaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFInPlBSPC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgdGhpcyBzaXR1YXRpb24gb2NjdXJzIHdoZW4geW91IHVzZSBvcgotICAgICAgICAgICAgICAgICAgICAgICAgcHVibGlzaCBwYWNrYWdlIGZlZWRzIGFuZCB1c2UgYSBzaGFyZWQgc3RhdGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGVuYWJsZSB0aGUgUFIgU2VydmljZSBmb3IgYWxsIHVzZXJzIHdobwotICAgICAgICAgICAgICAgICAgICAgICAgdXNlIHRoZSBzaGFyZWQgc3RhdGUgcG9vbC4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBQUiBTZXJ2aWNlLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nd29ya2luZy13aXRoLWEtcHItc2VydmljZSc+V29ya2luZyBXaXRoIGEgUFIgU2VydmljZTwvbGluaz4iLgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBTaGFyZSBsYXllcnMgYW1vbmdzdCB0aGUgZGV2ZWxvcGVycyBvZiBhCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyIHByb2plY3QgYW5kIGNvbnRhaW4gdGhlIHBvbGljeSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGRlZmluZXMgdGhlIHByb2plY3QuCiAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSdiZXN0LXByYWN0aWNlcy1zb3VyY2UtY29udHJvbC1tYW5hZ2VtZW50Jz4KLSAgICAgICAgPHRpdGxlPlNvdXJjZSBDb250cm9sIE1hbmFnZW1lbnQgKFNDTSk8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgS2VlcGluZyB5b3VyCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPgotICAgICAgICAgICAgYW5kIGFueSBzb2Z0d2FyZSB5b3UgYXJlIGRldmVsb3BpbmcgdW5kZXIgdGhlCi0gICAgICAgICAgICBjb250cm9sIG9mIGFuIFNDTSBzeXN0ZW0gdGhhdCBpcyBjb21wYXRpYmxlCi0gICAgICAgICAgICB3aXRoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGlzIGFkdmlzYWJsZS4KLSAgICAgICAgICAgIE9mIHRoZSBTQ01zIEJpdEJha2Ugc3VwcG9ydHMsIHRoZQotICAgICAgICAgICAgWW9jdG8gUHJvamVjdCB0ZWFtIHN0cm9uZ2x5IHJlY29tbWVuZHMgdXNpbmcKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dpdCc+R2l0PC9saW5rPi4KLSAgICAgICAgICAgIEdpdCBpcyBhIGRpc3RyaWJ1dGVkIHN5c3RlbSB0aGF0IGlzIGVhc3kgdG8gYmFja3VwLAotICAgICAgICAgICAgYWxsb3dzIHlvdSB0byB3b3JrIHJlbW90ZWx5LCBhbmQgdGhlbiBjb25uZWN0cyBiYWNrIHRvIHRoZQotICAgICAgICAgICAgaW5mcmFzdHJ1Y3R1cmUuCi0gICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgQml0QmFrZSwgc2VlIHRoZQotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsnPkJpdEJha2UgVXNlciBNYW51YWw8L3VsaW5rPi4KLSAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgSXQgaXMgcmVsYXRpdmVseSBlYXN5IHRvIHNldCB1cCBHaXQgc2VydmljZXMgYW5kIGNyZWF0ZQotICAgICAgICAgICAgaW5mcmFzdHJ1Y3R1cmUgbGlrZQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7Jz5odHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmc8L3VsaW5rPiwKLSAgICAgICAgICAgIHdoaWNoIGlzIGJhc2VkIG9uIHNlcnZlciBzb2Z0d2FyZSBjYWxsZWQKLSAgICAgICAgICAgIDxmaWxlbmFtZT5naXRvbGl0ZTwvZmlsZW5hbWU+IHdpdGggPGZpbGVuYW1lPmNnaXQ8L2ZpbGVuYW1lPgotICAgICAgICAgICAgYmVpbmcgdXNlZCB0byBnZW5lcmF0ZSB0aGUgd2ViIGludGVyZmFjZSB0aGF0IGxldHMgeW91IHZpZXcgdGhlCi0gICAgICAgICAgICByZXBvc2l0b3JpZXMuCi0gICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmdpdG9saXRlPC9maWxlbmFtZT4gc29mdHdhcmUgaWRlbnRpZmllcyB1c2VycwotICAgICAgICAgICAgdXNpbmcgU1NIIGtleXMgYW5kIGFsbG93cyBicmFuY2gtYmFzZWQKLSAgICAgICAgICAgIGFjY2VzcyBjb250cm9scyB0byByZXBvc2l0b3JpZXMgdGhhdCB5b3UgY2FuIGNvbnRyb2wgYXMgbGl0dGxlCi0gICAgICAgICAgICBvciBhcyBtdWNoIGFzIG5lY2Vzc2FyeS4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxub3RlPgotICAgICAgICAgICAgVGhlIHNldHVwIG9mIHRoZXNlIHNlcnZpY2VzIGlzIGJleW9uZCB0aGUgc2NvcGUgb2YgdGhpcyBtYW51YWwuCi0gICAgICAgICAgICBIb3dldmVyLCBzaXRlcyBzdWNoIGFzIHRoZXNlIGV4aXN0IHRoYXQgZGVzY3JpYmUgaG93IHRvIHBlcmZvcm0KLSAgICAgICAgICAgIHNldHVwOgotICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0naHR0cDovL2dpdC1zY20uY29tL2Jvb2svY2g0LTguaHRtbCc+R2l0IGRvY3VtZW50YXRpb248L3VsaW5rPjoKLSAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVzIGhvdyB0byBpbnN0YWxsIDxmaWxlbmFtZT5naXRvbGl0ZTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIG9uIHRoZSBzZXJ2ZXIuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9J2h0dHA6Ly9zaXRhcmFtYy5naXRodWIuY29tL2dpdG9saXRlL21hc3Rlci10b2MuaHRtbCc+VGhlIDxmaWxlbmFtZT5naXRvbGl0ZTwvZmlsZW5hbWU+IG1hc3RlciBpbmRleDwvdWxpbms+OgotICAgICAgICAgICAgICAgICAgICBBbGwgdG9waWNzIGZvciA8ZmlsZW5hbWU+Z2l0b2xpdGU8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9J2h0dHBzOi8vZ2l0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvSW50ZXJmYWNlcyxfZnJvbnRlbmRzLF9hbmRfdG9vbHMnPkludGVyZmFjZXMsIGZyb250ZW5kcywgYW5kIHRvb2xzPC91bGluaz46Ci0gICAgICAgICAgICAgICAgICAgIERvY3VtZW50YXRpb24gb24gaG93IHRvIGNyZWF0ZSBpbnRlcmZhY2VzIGFuZCBmcm9udGVuZHMKLSAgICAgICAgICAgICAgICAgICAgZm9yIEdpdC48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICA8L25vdGU+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9J2Jlc3QtcHJhY3RpY2VzLWF1dG9idWlsZGVycyc+Ci0gICAgICAgIDx0aXRsZT5BdXRvYnVpbGRlcnM8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQXV0b2J1aWxkZXJzIGFyZSBvZnRlbiB0aGUgY29yZSBvZiBhIGRldmVsb3BtZW50IHByb2plY3QuCi0gICAgICAgICAgICBJdCBpcyBoZXJlIHRoYXQgY2hhbmdlcyBmcm9tIGluZGl2aWR1YWwgZGV2ZWxvcGVycyBhcmUgYnJvdWdodAotICAgICAgICAgICAgdG9nZXRoZXIgYW5kIGNlbnRyYWxseSB0ZXN0ZWQgYW5kIHN1YnNlcXVlbnQgZGVjaXNpb25zIGFib3V0Ci0gICAgICAgICAgICByZWxlYXNlcyBjYW4gYmUgbWFkZS4KLSAgICAgICAgICAgIEF1dG9idWlsZGVycyBhbHNvIGFsbG93IGZvciAiY29udGludW91cyBpbnRlZ3JhdGlvbiIgc3R5bGUKLSAgICAgICAgICAgIHRlc3Rpbmcgb2Ygc29mdHdhcmUgY29tcG9uZW50cyBhbmQgcmVncmVzc2lvbiBpZGVudGlmaWNhdGlvbgotICAgICAgICAgICAgYW5kIHRyYWNraW5nLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBTZWUgIjx1bGluayB1cmw9J2h0dHA6Ly9hdXRvYnVpbGRlci55b2N0b3Byb2plY3Qub3JnJz5Zb2N0byBQcm9qZWN0IEF1dG9idWlsZGVyPC91bGluaz4iCi0gICAgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgbGlua3MgdG8gYnVpbGRib3QuCi0gICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB0ZWFtIGhhcyBmb3VuZCB0aGlzIGltcGxlbWVudGF0aW9uCi0gICAgICAgICAgICB3b3JrcyB3ZWxsIGluIHRoaXMgcm9sZS4KLSAgICAgICAgICAgIEEgcHVibGljIGV4YW1wbGUgb2YgdGhpcyBpcyB0aGUgWW9jdG8gUHJvamVjdAotICAgICAgICAgICAgQXV0b2J1aWxkZXJzLCB3aGljaCB3ZSB1c2UgdG8gdGVzdCB0aGUgb3ZlcmFsbCBoZWFsdGggb2YgdGhlCi0gICAgICAgICAgICBwcm9qZWN0LgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgZmVhdHVyZXMgb2YgdGhpcyBzeXN0ZW0gYXJlOgotICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SGlnaGxpZ2h0cyB3aGVuIGNvbW1pdHMgYnJlYWsgdGhlIGJ1aWxkLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UG9wdWxhdGVzIGFuIHNzdGF0ZSBjYWNoZSBmcm9tIHdoaWNoCi0gICAgICAgICAgICAgICAgICAgIGRldmVsb3BlcnMgY2FuIHB1bGwgcmF0aGVyIHRoYW4gcmVxdWlyaW5nIGxvY2FsCi0gICAgICAgICAgICAgICAgICAgIGJ1aWxkcy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWxsb3dzIGNvbW1pdCBob29rIHRyaWdnZXJzLAotICAgICAgICAgICAgICAgICAgICB3aGljaCB0cmlnZ2VyIGJ1aWxkcyB3aGVuIGNvbW1pdHMgYXJlIG1hZGUuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BbGxvd3MgdHJpZ2dlcmluZyBvZiBhdXRvbWF0ZWQgaW1hZ2UgYm9vdGluZwotICAgICAgICAgICAgICAgICAgICBhbmQgdGVzdGluZyB1bmRlciB0aGUgUXVpY2tFTVVsYXRvciAoUUVNVSkuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TdXBwb3J0cyBpbmNyZW1lbnRhbCBidWlsZCB0ZXN0aW5nIGFuZAotICAgICAgICAgICAgICAgICAgICBmcm9tLXNjcmF0Y2ggYnVpbGRzLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TaGFyZXMgb3V0cHV0IHRoYXQgYWxsb3dzIGRldmVsb3BlcgotICAgICAgICAgICAgICAgICAgICB0ZXN0aW5nIGFuZCBoaXN0b3JpY2FsIHJlZ3Jlc3Npb24gaW52ZXN0aWdhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0ZXMgb3V0cHV0IHRoYXQgY2FuIGJlIHVzZWQgZm9yIHJlbGVhc2VzLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWxsb3dzIHNjaGVkdWxpbmcgb2YgYnVpbGRzIHNvIHRoYXQgcmVzb3VyY2VzCi0gICAgICAgICAgICAgICAgICAgIGNhbiBiZSB1c2VkIGVmZmljaWVudGx5LjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0nYmVzdC1wcmFjdGljZXMtcG9saWNpZXMtYW5kLWNoYW5nZS1mbG93Jz4KLSAgICAgICAgPHRpdGxlPlBvbGljaWVzIGFuZCBDaGFuZ2UgRmxvdzwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBpdHNlbGYgdXNlcyBhIGhpZXJhcmNoaWNhbCBzdHJ1Y3R1cmUgYW5kIGEKLSAgICAgICAgICAgIHB1bGwgbW9kZWwuCi0gICAgICAgICAgICBTY3JpcHRzIGV4aXN0IHRvIGNyZWF0ZSBhbmQgc2VuZCBwdWxsIHJlcXVlc3RzCi0gICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+Y3JlYXRlLXB1bGwtcmVxdWVzdDwvZmlsZW5hbWU+IGFuZAotICAgICAgICAgICAgPGZpbGVuYW1lPnNlbmQtcHVsbC1yZXF1ZXN0PC9maWxlbmFtZT4pLgotICAgICAgICAgICAgVGhpcyBtb2RlbCBpcyBpbiBsaW5lIHdpdGggb3RoZXIgb3BlbiBzb3VyY2UgcHJvamVjdHMgd2hlcmUKLSAgICAgICAgICAgIG1haW50YWluZXJzIGFyZSByZXNwb25zaWJsZSBmb3Igc3BlY2lmaWMgYXJlYXMgb2YgdGhlIHByb2plY3QKLSAgICAgICAgICAgIGFuZCBhIHNpbmdsZSBtYWludGFpbmVyIGhhbmRsZXMgdGhlIGZpbmFsICJ0b3Atb2YtdHJlZSIgbWVyZ2VzLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICBZb3UgY2FuIGFsc28gdXNlIGEgbW9yZSBjb2xsZWN0aXZlIHB1c2ggbW9kZWwuCi0gICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmdpdG9saXRlPC9maWxlbmFtZT4gc29mdHdhcmUgc3VwcG9ydHMgYm90aCB0aGUKLSAgICAgICAgICAgIHB1c2ggYW5kIHB1bGwgbW9kZWxzIHF1aXRlIGVhc2lseS4KLSAgICAgICAgPC9ub3RlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQXMgd2l0aCBhbnkgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQsIGl0IGlzIGltcG9ydGFudAotICAgICAgICAgICAgdG8gZG9jdW1lbnQgdGhlIHBvbGljeSB1c2VkIGFzIHdlbGwgYXMgYW55IG1haW4gcHJvamVjdAotICAgICAgICAgICAgZ3VpZGVsaW5lcyBzbyB0aGV5IGFyZSB1bmRlcnN0b29kIGJ5IGV2ZXJ5b25lLgotICAgICAgICAgICAgSXQgaXMgYWxzbyBhIGdvb2QgaWRlYSB0byBoYXZlIHdlbGwgc3RydWN0dXJlZAotICAgICAgICAgICAgY29tbWl0IG1lc3NhZ2VzLCB3aGljaCBhcmUgdXN1YWxseSBhIHBhcnQgb2YgYSBwcm9qZWN0J3MKLSAgICAgICAgICAgIGd1aWRlbGluZXMuCi0gICAgICAgICAgICBHb29kIGNvbW1pdCBtZXNzYWdlcyBhcmUgZXNzZW50aWFsIHdoZW4gbG9va2luZyBiYWNrIGluIHRpbWUgYW5kCi0gICAgICAgICAgICB0cnlpbmcgdG8gdW5kZXJzdGFuZCB3aHkgY2hhbmdlcyB3ZXJlIG1hZGUuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIElmIHlvdSBkaXNjb3ZlciB0aGF0IGNoYW5nZXMgYXJlIG5lZWRlZCB0byB0aGUgY29yZSBsYXllciBvZiB0aGUKLSAgICAgICAgICAgIHByb2plY3QsIGl0IGlzIHdvcnRoIHNoYXJpbmcgdGhvc2Ugd2l0aCB0aGUgY29tbXVuaXR5IGFzIHNvb24KLSAgICAgICAgICAgIGFzIHBvc3NpYmxlLgotICAgICAgICAgICAgQ2hhbmNlcyBhcmUgaWYgeW91IGhhdmUgZGlzY292ZXJlZCB0aGUgbmVlZCBmb3IgY2hhbmdlcywgc29tZW9uZQotICAgICAgICAgICAgZWxzZSBpbiB0aGUgY29tbXVuaXR5IG5lZWRzIHRoZW0gYWxzby4KLSAgICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSdiZXN0LXByYWN0aWNlcy1zdW1tYXJ5Jz4KLSAgICAgICAgPHRpdGxlPlN1bW1hcnk8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHN1bW1hcml6ZXMgdGhlIGtleSByZWNvbW1lbmRhdGlvbnMgZGVzY3JpYmVkIGluIHRoZQotICAgICAgICAgICAgcHJldmlvdXMgc2VjdGlvbnM6Ci0gICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Vc2UgPGxpbmsgbGlua2VuZD0nZ2l0Jz5HaXQ8L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIGFzIHRoZSBzb3VyY2UgY29udHJvbCBzeXN0ZW0uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1haW50YWluIHlvdXIgTWV0YWRhdGEgaW4gbGF5ZXJzIHRoYXQgbWFrZSBzZW5zZQotICAgICAgICAgICAgICAgICAgICBmb3IgeW91ciBzaXR1YXRpb24uCi0gICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycyc+VW5kZXJzdGFuZGluZwotICAgICAgICAgICAgICAgICAgICBhbmQgQ3JlYXRpbmcgTGF5ZXJzPC9saW5rPiIgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbgotICAgICAgICAgICAgICAgICAgICBsYXllcnMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICBTZXBhcmF0ZSB0aGUgcHJvamVjdCdzIE1ldGFkYXRhIGFuZCBjb2RlIGJ5IHVzaW5nCi0gICAgICAgICAgICAgICAgICAgIHNlcGFyYXRlIEdpdCByZXBvc2l0b3JpZXMuCi0gICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3lvY3RvLXByb2plY3QtcmVwb3NpdG9yaWVzJz5Zb2N0byBQcm9qZWN0IFNvdXJjZSBSZXBvc2l0b3JpZXM8L2xpbms+IgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbiBvbiB0aGVzZSByZXBvc2l0b3JpZXMuCi0gICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2dldHRpbmctc2V0dXAnPkdldHRpbmcgU2V0IFVwPC9saW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHNldCB1cCBsb2NhbCBHaXQKLSAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yaWVzIGZvciByZWxhdGVkIHVwc3RyZWFtIFlvY3RvIFByb2plY3QKLSAgICAgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcmllcy4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNldCB1cCB0aGUgZGlyZWN0b3J5IGZvciB0aGUgc2hhcmVkIHN0YXRlIGNhY2hlCi0gICAgICAgICAgICAgICAgICAgICg8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1NUQVRFX0RJUic+PGZpbGVuYW1lPlNTVEFURV9ESVI8L2ZpbGVuYW1lPjwvdWxpbms+KQotICAgICAgICAgICAgICAgICAgICB3aGVyZSBpdCBtYWtlcyBzZW5zZS4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHNldCB1cCB0aGUgc3N0YXRlIGNhY2hlIG9uIGEgc3lzdGVtIHVzZWQKLSAgICAgICAgICAgICAgICAgICAgYnkgZGV2ZWxvcGVycyBpbiB0aGUgc2FtZSBvcmdhbml6YXRpb24gYW5kIHNoYXJlIHRoZQotICAgICAgICAgICAgICAgICAgICBzYW1lIHNvdXJjZSBkaXJlY3RvcmllcyBvbiB0aGVpciBtYWNoaW5lcy4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNldCB1cCBhbiBBdXRvYnVpbGRlciBhbmQgaGF2ZSBpdCBwb3B1bGF0ZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgc3N0YXRlIGNhY2hlIGFuZCBzb3VyY2UgZGlyZWN0b3JpZXMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBZb2N0byBQcm9qZWN0IGNvbW11bml0eSBlbmNvdXJhZ2VzIHlvdQotICAgICAgICAgICAgICAgICAgICB0byBzZW5kIHBhdGNoZXMgdG8gdGhlIHByb2plY3QgdG8gZml4IGJ1Z3Mgb3IgYWRkIGZlYXR1cmVzLgotICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gc3VibWl0IHBhdGNoZXMsIGZvbGxvdyB0aGUgcHJvamVjdCBjb21taXQKLSAgICAgICAgICAgICAgICAgICAgZ3VpZGVsaW5lcyBmb3Igd3JpdGluZyBnb29kIGNvbW1pdCBtZXNzYWdlcy4KLSAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0naG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhIENoYW5nZTwvbGluaz4iCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlbmQgY2hhbmdlcyB0byB0aGUgY29yZSBzb29uZXIgdGhhbiBsYXRlcgotICAgICAgICAgICAgICAgICAgICBhcyBvdGhlcnMgYXJlIGxpa2VseSB0byBydW4gaW50byB0aGUgc2FtZSBpc3N1ZXMuCi0gICAgICAgICAgICAgICAgICAgIEZvciBzb21lIGd1aWRhbmNlIG9uIG1haWxpbmcgbGlzdHMgdG8gdXNlLCBzZWUgdGhlIGxpc3QgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdob3ctdG8tc3VibWl0LWEtY2hhbmdlJz5Ib3cgdG8gU3VibWl0IGEgQ2hhbmdlPC9saW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGF2YWlsYWJsZSBtYWlsaW5nIGxpc3RzLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZXNvdXJjZXMtbWFpbGluZ2xpc3QnPk1haWxpbmcgTGlzdHM8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotPC9zZWN0aW9uPgotCi08c2VjdGlvbiBpZD0neW9jdG8tcHJvamVjdC1yZXBvc2l0b3JpZXMnPgotICAgIDx0aXRsZT5Zb2N0byBQcm9qZWN0IFNvdXJjZSBSZXBvc2l0b3JpZXM8L3RpdGxlPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHRlYW0gbWFpbnRhaW5zIGNvbXBsZXRlIHNvdXJjZSByZXBvc2l0b3JpZXMgZm9yIGFsbAotICAgICAgICBZb2N0byBQcm9qZWN0IGZpbGVzIGF0Ci0gICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0L2NnaXQuY2dpJz48L3VsaW5rPi4KLSAgICAgICAgVGhpcyB3ZWItYmFzZWQgc291cmNlIGNvZGUgYnJvd3NlciBpcyBvcmdhbml6ZWQgaW50byBjYXRlZ29yaWVzIGJ5Ci0gICAgICAgIGZ1bmN0aW9uIHN1Y2ggYXMgSURFIFBsdWdpbnMsIE1hdGNoYm94LCBQb2t5LCBZb2N0byBMaW51eCBLZXJuZWwsIGFuZAotICAgICAgICBzbyBmb3J0aC4KLSAgICAgICAgRnJvbSB0aGUgaW50ZXJmYWNlLCB5b3UgY2FuIGNsaWNrIG9uIGFueSBwYXJ0aWN1bGFyIGl0ZW0gaW4gdGhlICJOYW1lIgotICAgICAgICBjb2x1bW4gYW5kIHNlZSB0aGUgVVJMIGF0IHRoZSBib3R0b20gb2YgdGhlIHBhZ2UgdGhhdCB5b3UgbmVlZCB0byBjbG9uZQotICAgICAgICBhIEdpdCByZXBvc2l0b3J5IGZvciB0aGF0IHBhcnRpY3VsYXIgaXRlbS4KLSAgICAgICAgSGF2aW5nIGEgbG9jYWwgR2l0IHJlcG9zaXRvcnkgb2YgdGhlCi0gICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LCB3aGljaCBpcwotICAgICAgICB1c3VhbGx5IG5hbWVkICJwb2t5IiwgYWxsb3dzCi0gICAgICAgIHlvdSB0byBtYWtlIGNoYW5nZXMsIGNvbnRyaWJ1dGUgdG8gdGhlIGhpc3RvcnksIGFuZCB1bHRpbWF0ZWx5IGVuaGFuY2UKLSAgICAgICAgdGhlIFlvY3RvIFByb2plY3QncyB0b29scywgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcywgYW5kIHNvIGZvcnRoLgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgICBGb3IgYW55IHN1cHBvcnRlZCByZWxlYXNlIG9mIFlvY3RvIFByb2plY3QsIHlvdSBjYW4gYWxzbyBnbyB0byB0aGUKLSAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOyc+WW9jdG8gUHJvamVjdCBXZWJzaXRlPC91bGluaz4gYW5kCi0gICAgICAgIHNlbGVjdCB0aGUgIkRvd25sb2FkcyIgdGFiIGFuZCBnZXQgYSByZWxlYXNlZCB0YXJiYWxsIG9mIHRoZQotICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkgb3IgYW55IHN1cHBvcnRlZCBCU1AgdGFyYmFsbHMuCi0gICAgICAgIFVucGFja2luZyB0aGVzZSB0YXJiYWxscyBnaXZlcyB5b3UgYSBzbmFwc2hvdCBvZiB0aGUgcmVsZWFzZWQKLSAgICAgICAgZmlsZXMuCi0gICAgICAgIDxub3RlPjx0aXRsZT5Ob3RlczwvdGl0bGU+Ci0gICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIHJlY29tbWVuZGVkIG1ldGhvZCBmb3Igc2V0dGluZyB1cCB0aGUgWW9jdG8gUHJvamVjdAotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgotICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIGZpbGVzIGZvciBzdXBwb3J0ZWQgQlNQcwotICAgICAgICAgICAgICAgICAgICAoZS5nLiwgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPikgaXMgdG8gdXNlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dpdCc+R2l0PC9saW5rPiB0byBjcmVhdGUgYSBsb2NhbCBjb3B5IG9mCi0gICAgICAgICAgICAgICAgICAgIHRoZSB1cHN0cmVhbSByZXBvc2l0b3JpZXMuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBhbHdheXMgd29yayBpbiBtYXRjaGluZyBicmFuY2hlcyBmb3IgYm90aAotICAgICAgICAgICAgICAgICAgICB0aGUgc2VsZWN0ZWQgQlNQIHJlcG9zaXRvcnkgYW5kIHRoZQotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgotICAgICAgICAgICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+KSByZXBvc2l0b3J5LgotICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgY2hlY2tlZCBvdXQgdGhlICJtYXN0ZXIiIGJyYW5jaAotICAgICAgICAgICAgICAgICAgICBvZiA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IGFuZCB5b3UgYXJlIGdvaW5nIHRvIHVzZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+LCBiZSBzdXJlIHRvIGNoZWNrb3V0IHRoZQotICAgICAgICAgICAgICAgICAgICAibWFzdGVyIiBicmFuY2ggb2YgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgPC9ub3RlPgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgICBJbiBzdW1tYXJ5LCBoZXJlIGlzIHdoZXJlIHlvdSBjYW4gZ2V0IHRoZSBwcm9qZWN0IGZpbGVzIG5lZWRlZCBmb3IgZGV2ZWxvcG1lbnQ6Ci0gICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmEgaWQ9J3NvdXJjZS1yZXBvc2l0b3JpZXMnPjxlbXBoYXNpcz48dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC9jZ2l0LmNnaSc+U291cmNlIFJlcG9zaXRvcmllczo8L3VsaW5rPjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgVGhpcyBhcmVhIGNvbnRhaW5zIElERSBQbHVnaW5zLCBNYXRjaGJveCwgUG9reSwgUG9reSBTdXBwb3J0LCBUb29scywgWW9jdG8gTGludXggS2VybmVsLCBhbmQgWW9jdG8KLSAgICAgICAgICAgICAgICBNZXRhZGF0YSBMYXllcnMuCi0gICAgICAgICAgICAgICAgWW91IGNhbiBjcmVhdGUgbG9jYWwgY29waWVzIG9mIEdpdCByZXBvc2l0b3JpZXMgZm9yIGVhY2ggb2YgdGhlc2UgYXJlYXMuPC9wYXJhPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9zb3VyY2UtcmVwb3MucG5nIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNmluIiBkZXB0aD0iNGluIiAvPgogICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxhbmNob3IgaWQ9J2luZGV4LWRvd25sb2FkcycgLz48ZW1waGFzaXM+PHVsaW5rIHVybD0nJllPQ1RPX0RMX1VSTDsvcmVsZWFzZXMvJz5JbmRleCBvZiAvcmVsZWFzZXM6PC91bGluaz48L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIFRoaXMgaXMgYW4gaW5kZXggb2YgcmVsZWFzZXMgc3VjaCBhcwotICAgICAgICAgICAgICAgIHRoZSA8dHJhZGVtYXJrIGNsYXNzPSd0cmFkZSc+RWNsaXBzZTwvdHJhZGVtYXJrPgotICAgICAgICAgICAgICAgIFlvY3RvIFBsdWctaW4sIG1pc2NlbGxhbmVvdXMgc3VwcG9ydCwgUG9reSwgUHNldWRvLCBpbnN0YWxsZXJzIGZvciBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW5zLAotICAgICAgICAgICAgICAgIGFuZCBhbGwgcmVsZWFzZWQgdmVyc2lvbnMgb2YgWW9jdG8gUHJvamVjdCBpbiB0aGUgZm9ybSBvZiBpbWFnZXMgb3IgdGFyYmFsbHMuCi0gICAgICAgICAgICAgICAgRG93bmxvYWRpbmcgYW5kIGV4dHJhY3RpbmcgdGhlc2UgZmlsZXMgZG9lcyBub3QgcHJvZHVjZSBhIGxvY2FsIGNvcHkgb2YgdGhlCi0gICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnkgYnV0IHJhdGhlciBhIHNuYXBzaG90IG9mIGEgcGFydGljdWxhciByZWxlYXNlIG9yIGltYWdlLjwvcGFyYT4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvaW5kZXgtZG93bmxvYWRzLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjZpbiIgZGVwdGg9IjMuNWluIiAvPgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iRG93bmxvYWRzIiBwYWdlIGZvciB0aGUKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7Jz5Zb2N0byBQcm9qZWN0IFdlYnNpdGU8L3VsaW5rPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIEFjY2VzcyB0aGlzIHBhZ2UgYnkgZ29pbmcgdG8gdGhlIHdlYnNpdGUgYW5kIHRoZW4gc2VsZWN0aW5nCi0gICAgICAgICAgICAgICAgdGhlICJEb3dubG9hZHMiIHRhYi4KLSAgICAgICAgICAgICAgICBUaGlzIHBhZ2UgYWxsb3dzIHlvdSB0byBkb3dubG9hZCBhbnkgWW9jdG8gUHJvamVjdAotICAgICAgICAgICAgICAgIHJlbGVhc2Ugb3IgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIGluIHRhcmJhbGwgZm9ybS4KLSAgICAgICAgICAgICAgICBUaGUgdGFyYmFsbHMgYXJlIHNpbWlsYXIgdG8gdGhvc2UgZm91bmQgaW4gdGhlCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RMX1VSTDsvcmVsZWFzZXMvJz5JbmRleCBvZiAvcmVsZWFzZXM6PC91bGluaz4gYXJlYS48L3BhcmE+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3lwLWRvd25sb2FkLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjZpbiIgZGVwdGg9IjRpbiIgLz4KLSAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICA8L3BhcmE+Ci08L3NlY3Rpb24+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlNldCB1cCBhbiBBdXRvYnVpbGRlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEF1dG9idWlsZGVycyBhcmUgb2Z0ZW4gdGhlIGNvcmUgb2YgdGhlIGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgSXQgaXMgaGVyZSB0aGF0IGNoYW5nZXMgZnJvbSBpbmRpdmlkdWFsIGRldmVsb3BlcnMgYXJlIGJyb3VnaHQKKyAgICAgICAgICAgICAgICB0b2dldGhlciBhbmQgY2VudHJhbGx5IHRlc3RlZCBhbmQgc3Vic2VxdWVudCBkZWNpc2lvbnMgYWJvdXQKKyAgICAgICAgICAgICAgICByZWxlYXNlcyBjYW4gYmUgbWFkZS4KKyAgICAgICAgICAgICAgICBBdXRvYnVpbGRlcnMgYWxzbyBhbGxvdyBmb3IgImNvbnRpbnVvdXMgaW50ZWdyYXRpb24iIHN0eWxlCisgICAgICAgICAgICAgICAgdGVzdGluZyBvZiBzb2Z0d2FyZSBjb21wb25lbnRzIGFuZCByZWdyZXNzaW9uIGlkZW50aWZpY2F0aW9uCisgICAgICAgICAgICAgICAgYW5kIHRyYWNraW5nLjwvcGFyYT4KIAotPHNlY3Rpb24gaWQ9J3lvY3RvLXByb2plY3QtdGVybXMnPgotICAgIDx0aXRsZT5Zb2N0byBQcm9qZWN0IFRlcm1zPC90aXRsZT4KKyAgICAgICAgICAgICAgICA8cGFyYT5TZWUgIjx1bGluayB1cmw9J2h0dHA6Ly9hdXRvYnVpbGRlci55b2N0b3Byb2plY3Qub3JnJz5Zb2N0byBQcm9qZWN0IEF1dG9idWlsZGVyPC91bGluaz4iCisgICAgICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGxpbmtzIHRvIGJ1aWxkYm90LgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHRlYW0gaGFzIGZvdW5kIHRoaXMgaW1wbGVtZW50YXRpb24KKyAgICAgICAgICAgICAgICB3b3JrcyB3ZWxsIGluIHRoaXMgcm9sZS4KKyAgICAgICAgICAgICAgICBBIHB1YmxpYyBleGFtcGxlIG9mIHRoaXMgaXMgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICBBdXRvYnVpbGRlcnMsIHdoaWNoIHdlIHVzZSB0byB0ZXN0IHRoZSBvdmVyYWxsIGhlYWx0aCBvZiB0aGUKKyAgICAgICAgICAgICAgICBwcm9qZWN0LjwvcGFyYT4KIAotICAgIDxwYXJhPgotICAgICAgICBGb2xsb3dpbmcgaXMgYSBsaXN0IG9mIHRlcm1zIGFuZCBkZWZpbml0aW9ucyB1c2VycyBuZXcgdG8gdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQKLSAgICAgICAgZW52aXJvbm1lbnQgbWlnaHQgZmluZCBoZWxwZnVsLgotICAgICAgICBXaGlsZSBzb21lIG9mIHRoZXNlIHRlcm1zIGFyZSB1bml2ZXJzYWwsIHRoZSBsaXN0IGluY2x1ZGVzIHRoZW0ganVzdCBpbiBjYXNlOgotICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BcHBlbmQgRmlsZXM6PC9lbXBoYXNpcz4gRmlsZXMgdGhhdCBhcHBlbmQgYnVpbGQgaW5mb3JtYXRpb24gdG8KLSAgICAgICAgICAgICAgICBhIHJlY2lwZSBmaWxlLgotICAgICAgICAgICAgICAgIEFwcGVuZCBmaWxlcyBhcmUga25vd24gYXMgQml0QmFrZSBhcHBlbmQgZmlsZXMgYW5kIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlcy4KLSAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBleHBlY3RzIGV2ZXJ5IGFwcGVuZCBmaWxlIHRvIGhhdmUgYSBjb3JyZXNwb25kaW5nCi0gICAgICAgICAgICAgICAgcmVjaXBlICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4pIGZpbGUuCi0gICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIHRoZSBhcHBlbmQgZmlsZSBhbmQgY29ycmVzcG9uZGluZyByZWNpcGUgZmlsZQotICAgICAgICAgICAgICAgIG11c3QgdXNlIHRoZSBzYW1lIHJvb3QgZmlsZW5hbWUuCi0gICAgICAgICAgICAgICAgVGhlIGZpbGVuYW1lcyBjYW4gZGlmZmVyIG9ubHkgaW4gdGhlIGZpbGUgdHlwZSBzdWZmaXggdXNlZCAoZS5nLgotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb3JtZmFjdG9yXzAuMC5iYjwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+Zm9ybWZhY3Rvcl8wLjAuYmJhcHBlbmQ8L2ZpbGVuYW1lPikuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgICAgIDxwYXJhPkluZm9ybWF0aW9uIGluIGFwcGVuZCBmaWxlcyBleHRlbmRzIG9yIG92ZXJyaWRlcyB0aGUKLSAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBpbiB0aGUgc2ltaWxhcmx5LW5hbWVkIHJlY2lwZSBmaWxlLgotICAgICAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIG9mIGFuIGFwcGVuZCBmaWxlIGluIHVzZSwgc2VlIHRoZQotICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1iYmFwcGVuZC1maWxlcyc+VXNpbmcgLmJiYXBwZW5kIEZpbGVzPC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZmVhdHVyZXMgb2YgdGhpcyBzeXN0ZW0gYXJlOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICBIaWdobGlnaHRzIHdoZW4gY29tbWl0cyBicmVhayB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBvcHVsYXRlcyBhbiBzc3RhdGUgY2FjaGUgZnJvbSB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcGVycyBjYW4gcHVsbCByYXRoZXIgdGhhbiByZXF1aXJpbmcgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd3MgY29tbWl0IGhvb2sgdHJpZ2dlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCB0cmlnZ2VyIGJ1aWxkcyB3aGVuIGNvbW1pdHMgYXJlIG1hZGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dzIHRyaWdnZXJpbmcgb2YgYXV0b21hdGVkIGltYWdlIGJvb3RpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0ZXN0aW5nIHVuZGVyIHRoZSBRdWlja0VNVWxhdG9yIChRRU1VKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0cyBpbmNyZW1lbnRhbCBidWlsZCB0ZXN0aW5nIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgZnJvbS1zY3JhdGNoIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBTaGFyZXMgb3V0cHV0IHRoYXQgYWxsb3dzIGRldmVsb3BlcgorICAgICAgICAgICAgICAgICAgICAgICAgdGVzdGluZyBhbmQgaGlzdG9yaWNhbCByZWdyZXNzaW9uIGludmVzdGlnYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlcyBvdXRwdXQgdGhhdCBjYW4gYmUgdXNlZCBmb3IgcmVsZWFzZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dzIHNjaGVkdWxpbmcgb2YgYnVpbGRzIHNvIHRoYXQgcmVzb3VyY2VzCisgICAgICAgICAgICAgICAgICAgICAgICBjYW4gYmUgdXNlZCBlZmZpY2llbnRseS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgPGVtcGhhc2lzPlNldCB1cCBUZXN0IE1hY2hpbmVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICBVc2UgYSBzbWFsbCBudW1iZXIgb2Ygc2hhcmVkLCBoaWdoIHBlcmZvcm1hbmNlIHN5c3RlbXMKKyAgICAgICAgICAgICAgIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorICAgICAgICAgICAgICAgRGV2ZWxvcGVycyBjYW4gdXNlIHRoZXNlIHN5c3RlbXMgZm9yIHdpZGVyLCBtb3JlCisgICAgICAgICAgICAgICBleHRlbnNpdmUgdGVzdGluZyB3aGlsZSB0aGV5IGNvbnRpbnVlIHRvIGRldmVsb3AKKyAgICAgICAgICAgICAgIGxvY2FsbHkgdXNpbmcgdGhlaXIgcHJpbWFyeSBkZXZlbG9wbWVudCBzeXN0ZW0uCisgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgPGVtcGhhc2lzPkRvY3VtZW50IFBvbGljaWVzIGFuZCBDaGFuZ2UgRmxvdzo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgaXRzZWxmIHVzZXMgYSBoaWVyYXJjaGljYWwgc3RydWN0dXJlIGFuZCBhCisgICAgICAgICAgICAgICAgcHVsbCBtb2RlbC4KKyAgICAgICAgICAgICAgICBTY3JpcHRzIGV4aXN0IHRvIGNyZWF0ZSBhbmQgc2VuZCBwdWxsIHJlcXVlc3RzCisgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPmNyZWF0ZS1wdWxsLXJlcXVlc3Q8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2VuZC1wdWxsLXJlcXVlc3Q8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgVGhpcyBtb2RlbCBpcyBpbiBsaW5lIHdpdGggb3RoZXIgb3BlbiBzb3VyY2UgcHJvamVjdHMgd2hlcmUKKyAgICAgICAgICAgICAgICBtYWludGFpbmVycyBhcmUgcmVzcG9uc2libGUgZm9yIHNwZWNpZmljIGFyZWFzIG9mIHRoZSBwcm9qZWN0CisgICAgICAgICAgICAgICAgYW5kIGEgc2luZ2xlIG1haW50YWluZXIgaGFuZGxlcyB0aGUgZmluYWwgInRvcC1vZi10cmVlIiBtZXJnZXMuCiAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgIEFwcGVuZCBmaWxlcyBjYW4gYWxzbyB1c2Ugd2lsZGNhcmQgcGF0dGVybnMgaW4gdGhlaXIgdmVyc2lvbiBudW1iZXJzCi0gICAgICAgICAgICAgICAgICAgIHNvIHRoZXkgY2FuIGJlIGFwcGxpZWQgdG8gbW9yZSB0aGFuIG9uZSB2ZXJzaW9uIG9mIHRoZSB1bmRlcmx5aW5nIHJlY2lwZSBmaWxlLgotICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYSBpZD0nYml0YmFrZS10ZXJtJz48ZW1waGFzaXM+Qml0QmFrZTo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIFRoZSB0YXNrIGV4ZWN1dG9yIGFuZCBzY2hlZHVsZXIgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCi0gICAgICAgICAgICAgICAgc3lzdGVtIHRvIGJ1aWxkIGltYWdlcy4KLSAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBCaXRCYWtlLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyc+Qml0QmFrZSBVc2VyIE1hbnVhbDwvdWxpbms+LgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdidWlsZC1kaXJlY3RvcnknPjxlbXBoYXNpcz5CdWlsZCBEaXJlY3Rvcnk6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBUaGlzIHRlcm0gcmVmZXJzIHRvIHRoZSBhcmVhIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAotICAgICAgICAgICAgICAgIHN5c3RlbSBmb3IgYnVpbGRzLgotICAgICAgICAgICAgICAgIFRoZSBhcmVhIGlzIGNyZWF0ZWQgd2hlbiB5b3UgPGZpbGVuYW1lPnNvdXJjZTwvZmlsZW5hbWU+IHRoZQotICAgICAgICAgICAgICAgIHNldHVwIGVudmlyb25tZW50IHNjcmlwdCB0aGF0IGlzIGZvdW5kIGluIHRoZSBTb3VyY2UgRGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgKGkuZS4gPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgb3IKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3VsaW5rPikuCi0gICAgICAgICAgICAgICAgVGhlIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1UT1BESVInPjxmaWxlbmFtZT5UT1BESVI8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSBCdWlsZCBEaXJlY3RvcnkuPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFlvdSBoYXZlIGEgbG90IG9mIGZsZXhpYmlsaXR5IHdoZW4gY3JlYXRpbmcgdGhlIEJ1aWxkCi0gICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSBzb21lIGV4YW1wbGVzIHRoYXQgc2hvdyBob3cgdG8gY3JlYXRlIHRoZQotICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBleGFtcGxlcyBhc3N1bWUgeW91cgotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPiBpcwotICAgICAgICAgICAgICAgICAgICBuYW1lZCA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q3JlYXRlIHRoZSBCdWlsZCBEaXJlY3RvcnkgaW5zaWRlIHlvdXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2UgRGlyZWN0b3J5IGFuZCBsZXQgdGhlIG5hbWUgb2YgdGhlIEJ1aWxkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5IGRlZmF1bHQgdG8gPGZpbGVuYW1lPmJ1aWxkPC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGNkICRIT01FL3Bva3kKLSAgICAgJCBzb3VyY2UgJk9FX0lOSVRfRklMRTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q3JlYXRlIHRoZSBCdWlsZCBEaXJlY3RvcnkgaW5zaWRlIHlvdXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBob21lIGRpcmVjdG9yeSBhbmQgc3BlY2lmaWNhbGx5IG5hbWUgaXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dGVzdC1idWlsZHM8L2ZpbGVuYW1lPjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgY2QgJEhPTUUKLSAgICAgJCBzb3VyY2UgcG9reS8mT0VfSU5JVF9GSUxFOyB0ZXN0LWJ1aWxkcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm92aWRlIGEgZGlyZWN0b3J5IHBhdGggYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNhbGx5IG5hbWUgdGhlIEJ1aWxkIERpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbnkgaW50ZXJtZWRpYXRlIGZvbGRlcnMgaW4gdGhlIHBhdGhuYW1lIG11c3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG5leHQgZXhhbXBsZSBjcmVhdGVzIGEgQnVpbGQgRGlyZWN0b3J5IG5hbWVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPllQLSZQT0tZVkVSU0lPTjs8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHlvdXIgaG9tZSBkaXJlY3Rvcnkgd2l0aGluIHRoZSBleGlzdGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSA8ZmlsZW5hbWU+bXlidWlsZHM8L2ZpbGVuYW1lPjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICRjZCAkSE9NRQotICAgICAkIHNvdXJjZSAkSE9NRS9wb2t5LyZPRV9JTklUX0ZJTEU7ICRIT01FL215YnVpbGRzL1lQLSZQT0tZVkVSU0lPTjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBCdWlsZCBEaXJlY3RvcnkgY29udGFpbnMKLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvdWxpbms+LAotICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRoZSBidWlsZCBzeXN0ZW0gdXNlcyBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIGl0cyB3b3JrLgotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+IGNhbm5vdCBiZSB1bmRlciBORlMuCi0gICAgICAgICAgICAgICAgICAgICAgICBUaHVzLCBieSBkZWZhdWx0LCB0aGUgQnVpbGQgRGlyZWN0b3J5IGNhbm5vdCBiZSB1bmRlciBORlMuCi0gICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgbmVlZCB0aGUgQnVpbGQgRGlyZWN0b3J5IHRvIGJlIHVuZGVyIE5GUywKLSAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gc2V0IHRoaXMgdXAgYnkgc2V0dGluZyA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICB0byB1c2UgYSBsb2NhbCBkcml2ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIERvaW5nIHNvIGVmZmVjdGl2ZWx5IHNlcGFyYXRlcyA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPGZpbGVuYW1lPlRPUERJUjwvZmlsZW5hbWU+LCB3aGljaCBpcyB0aGUgQnVpbGQKLSAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2xhc3Nlczo8L2VtcGhhc2lzPiBGaWxlcyB0aGF0IHByb3ZpZGUgZm9yIGxvZ2ljIGVuY2Fwc3VsYXRpb24KLSAgICAgICAgICAgICAgICBhbmQgaW5oZXJpdGFuY2Ugc28gdGhhdCBjb21tb25seSB1c2VkIHBhdHRlcm5zIGNhbiBiZSBkZWZpbmVkIG9uY2UgYW5kIHRoZW4gZWFzaWx5IHVzZWQKLSAgICAgICAgICAgICAgICBpbiBtdWx0aXBsZSByZWNpcGVzLgotICAgICAgICAgICAgICAgIEZvciByZWZlcmVuY2UgaW5mb3JtYXRpb24gb24gdGhlIFlvY3RvIFByb2plY3QgY2xhc3Nlcywgc2VlIHRoZQotICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcyc+Q2xhc3NlczwvdWxpbms+IiBjaGFwdGVyIG9mIHRoZQotICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KLSAgICAgICAgICAgICAgICBDbGFzcyBmaWxlcyBlbmQgd2l0aCB0aGUgPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZW5hbWUgZXh0ZW5zaW9uLgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Db25maWd1cmF0aW9uIEZpbGU6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGluIHZhcmlvdXMgPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBmaWxlcyBwcm92aWRlcyBnbG9iYWwgZGVmaW5pdGlvbnMgb2YgdmFyaWFibGVzLgotICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlIGluCi0gICAgICAgICAgICAgICAgdGhlCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+Ci0gICAgICAgICAgICAgICAgY29udGFpbnMgdXNlci1kZWZpbmVkIHZhcmlhYmxlcyB0aGF0IGFmZmVjdCBldmVyeSBidWlsZC4KLSAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1ldGEtcG9reS9jb25mL2Rpc3Ryby9wb2t5LmNvbmY8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBkZWZpbmVzIFlvY3RvICJkaXN0cm8iIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAgICAgICB2YXJpYWJsZXMgdXNlZCBvbmx5IHdoZW4gYnVpbGRpbmcgd2l0aCB0aGlzIHBvbGljeS4KLSAgICAgICAgICAgICAgICBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHdoaWNoCi0gICAgICAgICAgICAgICAgYXJlIGxvY2F0ZWQgdGhyb3VnaG91dCB0aGUKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPiwgZGVmaW5lCi0gICAgICAgICAgICAgICAgdmFyaWFibGVzIGZvciBzcGVjaWZpYyBoYXJkd2FyZSBhbmQgYXJlIG9ubHkgdXNlZCB3aGVuIGJ1aWxkaW5nCi0gICAgICAgICAgICAgICAgZm9yIHRoYXQgdGFyZ2V0IChlLmcuIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYWNoaW5lL2JlYWdsZWJvbmUuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAgICAgICBmaWxlIGRlZmluZXMgdmFyaWFibGVzIGZvciB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgQVJNIENvcnRleC1BOAotICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IGJvYXJkKS4KLSAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uIGZpbGVzIGVuZCB3aXRoIGEgPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBmaWxlbmFtZSBleHRlbnNpb24uCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmEgaWQ9J2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbic+Ci0gICAgICAgICAgICAgICAgPGVtcGhhc2lzPkNyb3NzLURldmVsb3BtZW50IFRvb2xjaGFpbjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBJbiBnZW5lcmFsLCBhIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbiBpcyBhIGNvbGxlY3Rpb24gb2YKLSAgICAgICAgICAgICAgICAgICAgc29mdHdhcmUgZGV2ZWxvcG1lbnQgdG9vbHMgYW5kIHV0aWxpdGllcyB0aGF0IHJ1biBvbiBvbmUKLSAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlIGFuZCBhbGxvdyB5b3UgdG8gZGV2ZWxvcCBzb2Z0d2FyZSBmb3IgYQotICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbnQsIG9yIHRhcmdldGVkLCBhcmNoaXRlY3R1cmUuCi0gICAgICAgICAgICAgICAgICAgIFRoZXNlIHRvb2xjaGFpbnMgY29udGFpbiBjcm9zcy1jb21waWxlcnMsIGxpbmtlcnMsIGFuZAotICAgICAgICAgICAgICAgICAgICBkZWJ1Z2dlcnMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+VGhlIFlvY3RvIFByb2plY3Qgc3VwcG9ydHMgdHdvIGRpZmZlcmVudCBjcm9zcy1kZXZlbG9wbWVudAotICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW5zOgotICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgdG9vbGNoYWluIG9ubHkgdXNlZCBieSBhbmQgd2l0aGluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0QmFrZSB3aGVuIGJ1aWxkaW5nIGFuIGltYWdlIGZvciBhIHRhcmdldAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIHJlbG9jYXRhYmxlIHRvb2xjaGFpbiB1c2VkIG91dHNpZGUgb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGJ5IGRldmVsb3BlcnMgd2hlbiBkZXZlbG9waW5nIGFwcGxpY2F0aW9ucwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgd2lsbCBydW4gb24gYSB0YXJnZXRlZCBkZXZpY2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBDcmVhdGlvbiBvZiB0aGVzZSB0b29sY2hhaW5zIGlzIHNpbXBsZSBhbmQgYXV0b21hdGVkLgotICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdG9vbGNoYWluIGNvbmNlcHRzIGFzIHRoZXkgYXBwbHkgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QsIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbi1nZW5lcmF0aW9uJz5Dcm9zcy1EZXZlbG9wbWVudCBUb29sY2hhaW4gR2VuZXJhdGlvbjwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCi0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgIHJlbG9jYXRhYmxlIHRvb2xjaGFpbiBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfU0RLX1VSTDsnPllvY3RvIFByb2plY3QgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4uCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkltYWdlOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgQW4gaW1hZ2UgaXMgYW4gYXJ0aWZhY3Qgb2YgdGhlIEJpdEJha2UgYnVpbGQgcHJvY2VzcyBnaXZlbgotICAgICAgICAgICAgICAgIGEgY29sbGVjdGlvbiBvZiByZWNpcGVzIGFuZCByZWxhdGVkIE1ldGFkYXRhLgotICAgICAgICAgICAgICAgIEltYWdlcyBhcmUgdGhlIGJpbmFyeSBvdXRwdXQgdGhhdCBydW4gb24gc3BlY2lmaWMgaGFyZHdhcmUgb3IKLSAgICAgICAgICAgICAgICBRRU1VIGFuZCBhcmUgdXNlZCBmb3Igc3BlY2lmaWMgdXNlLWNhc2VzLgotICAgICAgICAgICAgICAgIEZvciBhIGxpc3Qgb2YgdGhlIHN1cHBvcnRlZCBpbWFnZSB0eXBlcyB0aGF0IHRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1pbWFnZXMnPkltYWdlczwvdWxpbms+IgotICAgICAgICAgICAgICAgIGNoYXB0ZXIgaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYSBpZD0nbGF5ZXInPjxlbXBoYXNpcz5MYXllcjo8L2VtcGhhc2lzPiBBIGNvbGxlY3Rpb24gb2YgcmVjaXBlcyByZXByZXNlbnRpbmcgdGhlIGNvcmUsCi0gICAgICAgICAgICAgICAgYSBCU1AsIG9yIGFuIGFwcGxpY2F0aW9uIHN0YWNrLgotICAgICAgICAgICAgICAgIEZvciBhIGRpc2N1c3Npb24gc3BlY2lmaWNhbGx5IG9uIEJTUCBMYXllcnMsIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwLWxheWVycyc+QlNQIExheWVyczwvdWxpbms+IgotICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQKQotICAgICAgICAgICAgICAgIERldmVsb3BlcidzIEd1aWRlLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdtZXRhZGF0YSc+PGVtcGhhc2lzPk1ldGFkYXRhOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgVGhlIGZpbGVzIHRoYXQgQml0QmFrZSBwYXJzZXMgd2hlbiBidWlsZGluZyBhbiBpbWFnZS4KLSAgICAgICAgICAgICAgICBJbiBnZW5lcmFsLCBNZXRhZGF0YSBpbmNsdWRlcyByZWNpcGVzLCBjbGFzc2VzLCBhbmQKLSAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzLgotICAgICAgICAgICAgICAgIEluIHRoZSBjb250ZXh0IG9mIHRoZSBrZXJuZWwgKCJrZXJuZWwgTWV0YWRhdGEiKSwKLSAgICAgICAgICAgICAgICBpdCByZWZlcnMgdG8gTWV0YWRhdGEgaW4gdGhlIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBicmFuY2hlcyBvZiB0aGUga2VybmVsIHNvdXJjZSBHaXQgcmVwb3NpdG9yaWVzLgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdvZS1jb3JlJz48ZW1waGFzaXM+T0UtQ29yZTo8L2VtcGhhc2lzPiBBIGNvcmUgc2V0IG9mIE1ldGFkYXRhIG9yaWdpbmF0aW5nCi0gICAgICAgICAgICAgICAgd2l0aCBPcGVuRW1iZWRkZWQgKE9FKSB0aGF0IGlzIHNoYXJlZCBiZXR3ZWVuIE9FIGFuZCB0aGUgWW9jdG8gUHJvamVjdC4KLSAgICAgICAgICAgICAgICBUaGlzIE1ldGFkYXRhIGlzIGZvdW5kIGluIHRoZSA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvZiB0aGUKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYSBpZD0nYnVpbGQtc3lzdGVtLXRlcm0nPjxlbXBoYXNpcz5PcGVuRW1iZWRkZWQgQnVpbGQgU3lzdGVtOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBzcGVjaWZpYyB0byB0aGUgWW9jdG8gUHJvamVjdC4KLSAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpcyBiYXNlZCBvbiBhbm90aGVyIHByb2plY3Qga25vd24KLSAgICAgICAgICAgICAgICBhcyAiUG9reSIsIHdoaWNoIHVzZXMKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdiaXRiYWtlLXRlcm0nPkJpdEJha2U8L2xpbms+IGFzIHRoZSB0YXNrCi0gICAgICAgICAgICAgICAgZXhlY3V0b3IuCi0gICAgICAgICAgICAgICAgVGhyb3VnaG91dCB0aGUgWW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uIHNldCwgdGhlCi0gICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpcyBzb21ldGltZXMgcmVmZXJyZWQgdG8gc2ltcGx5Ci0gICAgICAgICAgICAgICAgYXMgInRoZSBidWlsZCBzeXN0ZW0iLgotICAgICAgICAgICAgICAgIElmIG90aGVyIGJ1aWxkIHN5c3RlbXMsIHN1Y2ggYXMgYSBob3N0IG9yIHRhcmdldCBidWlsZCBzeXN0ZW0KLSAgICAgICAgICAgICAgICBhcmUgcmVmZXJlbmNlZCwgdGhlIGRvY3VtZW50YXRpb24gY2xlYXJseSBzdGF0ZXMgdGhlCi0gICAgICAgICAgICAgICAgZGlmZmVyZW5jZS4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgRm9yIHNvbWUgaGlzdG9yaWNhbCBpbmZvcm1hdGlvbiBhYm91dCBQb2t5LCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Bva3knPlBva3k8L2xpbms+IHRlcm0uCi0gICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QYWNrYWdlOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgSW4gdGhlIGNvbnRleHQgb2YgdGhlIFlvY3RvIFByb2plY3QsIHRoaXMgdGVybSByZWZlcnMgdG8gYQotICAgICAgICAgICAgICAgIHJlY2lwZSdzIHBhY2thZ2VkIG91dHB1dCBwcm9kdWNlZCBieSBCaXRCYWtlIChpLmUuIGEKLSAgICAgICAgICAgICAgICAiYmFrZWQgcmVjaXBlIikuCi0gICAgICAgICAgICAgICAgQSBwYWNrYWdlIGlzIGdlbmVyYWxseSB0aGUgY29tcGlsZWQgYmluYXJpZXMgcHJvZHVjZWQgZnJvbSB0aGUKLSAgICAgICAgICAgICAgICByZWNpcGUncyBzb3VyY2VzLgotICAgICAgICAgICAgICAgIFlvdSAiYmFrZSIgc29tZXRoaW5nIGJ5IHJ1bm5pbmcgaXQgdGhyb3VnaCBCaXRCYWtlLjwvcGFyYT4KLSAgICAgICAgICAgICAgICA8cGFyYT5JdCBpcyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgdGVybSAicGFja2FnZSIgY2FuLCBpbiBnZW5lcmFsLCBoYXZlIHN1YnRsZQotICAgICAgICAgICAgICAgIG1lYW5pbmdzLiAgRm9yIGV4YW1wbGUsIHRoZSBwYWNrYWdlcyByZWZlcnJlZCB0byBpbiB0aGUKLSAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyNwYWNrYWdlcyc+VGhlIEJ1aWxkIEhvc3QgUGFja2FnZXM8L3VsaW5rPiIgc2VjdGlvbiBhcmUKLSAgICAgICAgICAgICAgICBjb21waWxlZCBiaW5hcmllcyB0aGF0LCB3aGVuIGluc3RhbGxlZCwgYWRkIGZ1bmN0aW9uYWxpdHkgdG8geW91ciBMaW51eAotICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbi48L3BhcmE+Ci0gICAgICAgICAgICAgICAgPHBhcmE+QW5vdGhlciBwb2ludCB3b3J0aCBub3RpbmcgaXMgdGhhdCBoaXN0b3JpY2FsbHkgd2l0aGluIHRoZSBZb2N0byBQcm9qZWN0LAotICAgICAgICAgICAgICAgIHJlY2lwZXMgd2VyZSByZWZlcnJlZCB0byBhcyBwYWNrYWdlcyAtIHRodXMsIHRoZSBleGlzdGVuY2Ugb2Ygc2V2ZXJhbCBCaXRCYWtlCi0gICAgICAgICAgICAgICAgdmFyaWFibGVzIHRoYXQgYXJlIHNlZW1pbmdseSBtaXMtbmFtZWQsCi0gICAgICAgICAgICAgICAgKGUuZy4gPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvdWxpbms+LAotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L3VsaW5rPiwgYW5kCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBFJz48ZmlsZW5hbWU+UEU8L2ZpbGVuYW1lPjwvdWxpbms+KS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UGFja2FnZSBHcm91cHM6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBBcmJpdHJhcnkgZ3JvdXBzIG9mIHNvZnR3YXJlIFJlY2lwZXMuCi0gICAgICAgICAgICAgICAgWW91IHVzZSBwYWNrYWdlIGdyb3VwcyB0byBob2xkIHJlY2lwZXMgdGhhdCwgd2hlbiBidWlsdCwKLSAgICAgICAgICAgICAgICB1c3VhbGx5IGFjY29tcGxpc2ggYSBzaW5nbGUgdGFzay4KLSAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYSBwYWNrYWdlIGdyb3VwIGNvdWxkIGNvbnRhaW4gdGhlIHJlY2lwZXMgZm9yIGEKLSAgICAgICAgICAgICAgICBjb21wYW554oCZcyBwcm9wcmlldGFyeSBvciB2YWx1ZS1hZGQgc29mdHdhcmUuCi0gICAgICAgICAgICAgICAgT3IsIHRoZSBwYWNrYWdlIGdyb3VwIGNvdWxkIGNvbnRhaW4gdGhlIHJlY2lwZXMgdGhhdCBlbmFibGUKLSAgICAgICAgICAgICAgICBncmFwaGljcy4KLSAgICAgICAgICAgICAgICBBIHBhY2thZ2UgZ3JvdXAgaXMgcmVhbGx5IGp1c3QgYW5vdGhlciByZWNpcGUuCi0gICAgICAgICAgICAgICAgQmVjYXVzZSBwYWNrYWdlIGdyb3VwIGZpbGVzIGFyZSByZWNpcGVzLCB0aGV5IGVuZCB3aXRoIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlbmFtZSBleHRlbnNpb24uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmEgaWQ9J3Bva3knPjxlbXBoYXNpcz5Qb2t5OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgVGhlIHRlcm0gInBva3kiIGNhbiBtZWFuIHNldmVyYWwgdGhpbmdzLgotICAgICAgICAgICAgICAgIEluIGl0cyBtb3N0IGdlbmVyYWwgc2Vuc2UsIGl0IGlzIGFuIG9wZW4tc291cmNlCi0gICAgICAgICAgICAgICAgcHJvamVjdCB0aGF0IHdhcyBpbml0aWFsbHkgZGV2ZWxvcGVkIGJ5IE9wZW5lZEhhbmQuCi0gICAgICAgICAgICAgICAgV2l0aCBPcGVuZWRIYW5kLCBwb2t5IHdhcyBkZXZlbG9wZWQgb2ZmIG9mIHRoZSBleGlzdGluZwotICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYmVjb21pbmcgYSBjb21tZXJjaWFsbHkKLSAgICAgICAgICAgICAgICBzdXBwb3J0YWJsZSBidWlsZCBzeXN0ZW0gZm9yIGVtYmVkZGVkIExpbnV4LgotICAgICAgICAgICAgICAgIEFmdGVyIEludGVsIENvcnBvcmF0aW9uIGFjcXVpcmVkIE9wZW5lZEhhbmQsIHRoZQotICAgICAgICAgICAgICAgIHByb2plY3QgcG9reSBiZWNhbWUgdGhlIGJhc2lzIGZvciB0aGUgWW9jdG8gUHJvamVjdCdzCi0gICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtLjwvcGFyYT4KLSAgICAgICAgICAgICAgICA8cGFyYT5XaXRoaW4gdGhlIFlvY3RvIFByb2plY3Qgc291cmNlIHJlcG9zaXRvcmllcywKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IGV4aXN0cyBhcyBhIHNlcGFyYXRlIEdpdAotICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgeW91IGNhbiBjbG9uZSB0byB5aWVsZCBhIGxvY2FsIGNvcHkgb24geW91cgotICAgICAgICAgICAgICAgIGhvc3Qgc3lzdGVtLgotICAgICAgICAgICAgICAgIFRodXMsICJwb2t5IiBjYW4gcmVmZXIgdG8gdGhlIGxvY2FsIGNvcHkgb2YgdGhlIFNvdXJjZQotICAgICAgICAgICAgICAgIERpcmVjdG9yeSB1c2VkIGZvciBkZXZlbG9wbWVudCB3aXRoaW4gdGhlIFlvY3RvCi0gICAgICAgICAgICAgICAgUHJvamVjdC48L3BhcmE+Ci0gICAgICAgICAgICAgICAgPHBhcmE+RmluYWxseSwgInBva3kiIGNhbiByZWZlciB0byB0aGUgZGVmYXVsdAotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ESVNUUk8nPjxmaWxlbmFtZT5ESVNUUk88L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgKGkuZS4gZGlzdHJpYnV0aW9uKSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgWW9jdG8KLSAgICAgICAgICAgICAgICBQcm9qZWN0IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiByZXBvc2l0b3J5IHRvIGJ1aWxkIGFuIGltYWdlLgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SZWNpcGU6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBBIHNldCBvZiBpbnN0cnVjdGlvbnMgZm9yIGJ1aWxkaW5nIHBhY2thZ2VzLgotICAgICAgICAgICAgICAgIEEgcmVjaXBlIGRlc2NyaWJlcyB3aGVyZSB5b3UgZ2V0IHNvdXJjZSBjb2RlLCB3aGljaCBwYXRjaGVzCi0gICAgICAgICAgICAgICAgdG8gYXBwbHksIGhvdyB0byBjb25maWd1cmUgdGhlIHNvdXJjZSwgaG93IHRvIGNvbXBpbGUgaXQgYW5kIHNvIG9uLgotICAgICAgICAgICAgICAgIFJlY2lwZXMgYWxzbyBkZXNjcmliZSBkZXBlbmRlbmNpZXMgZm9yIGxpYnJhcmllcyBvciBmb3Igb3RoZXIKLSAgICAgICAgICAgICAgICByZWNpcGVzLgotICAgICAgICAgICAgICAgIFJlY2lwZXMgcmVwcmVzZW50IHRoZSBsb2dpY2FsIHVuaXQgb2YgZXhlY3V0aW9uLCB0aGUgc29mdHdhcmUKLSAgICAgICAgICAgICAgICB0byBidWlsZCwgdGhlIGltYWdlcyB0byBidWlsZCwgYW5kIHVzZSB0aGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZSBleHRlbnNpb24uCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3NvdXJjZS1kaXJlY3RvcnknPjxlbXBoYXNpcz5Tb3VyY2UgRGlyZWN0b3J5OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgVGhpcyB0ZXJtIHJlZmVycyB0byB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBjcmVhdGVkIGFzIGEgcmVzdWx0Ci0gICAgICAgICAgICAgICAgb2YgY3JlYXRpbmcgYSBsb2NhbCBjb3B5IG9mIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IEdpdAotICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgPGZpbGVuYW1lPmdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3k8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIG9yIGV4cGFuZGluZyBhIHJlbGVhc2VkIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gdGFyYmFsbC4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgQ3JlYXRpbmcgYSBsb2NhbCBjb3B5IG9mIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3J5IGlzIHRoZSByZWNvbW1lbmRlZCBtZXRob2QgZm9yIHNldHRpbmcgdXAKLSAgICAgICAgICAgICAgICAgICAgeW91ciBTb3VyY2UgRGlyZWN0b3J5LgotICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICBTb21ldGltZXMgeW91IG1pZ2h0IGhlYXIgdGhlIHRlcm0gInBva3kgZGlyZWN0b3J5IiB1c2VkIHRvIHJlZmVyCi0gICAgICAgICAgICAgICAgdG8gdGhpcyBkaXJlY3Rvcnkgc3RydWN0dXJlLgotICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IGZpbGUgb3IKLSAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IG5hbWVzIHRoYXQgY29udGFpbiBzcGFjZXMuCi0gICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdGhhdCB0aGUgU291cmNlIERpcmVjdG9yeSB5b3UgdXNlIGRvZXMgbm90IGNvbnRhaW4KLSAgICAgICAgICAgICAgICAgICAgdGhlc2UgdHlwZXMgb2YgbmFtZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyB1c2UgYSBtb3JlIGNvbGxlY3RpdmUgcHVzaCBtb2RlbC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5naXRvbGl0ZTwvZmlsZW5hbWU+IHNvZnR3YXJlIHN1cHBvcnRzIGJvdGggdGhlCisgICAgICAgICAgICAgICAgICAgIHB1c2ggYW5kIHB1bGwgbW9kZWxzIHF1aXRlIGVhc2lseS4KICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPgogCi0gICAgICAgICAgICAgICAgPHBhcmE+VGhlIFNvdXJjZSBEaXJlY3RvcnkgY29udGFpbnMgQml0QmFrZSwgRG9jdW1lbnRhdGlvbiwKLSAgICAgICAgICAgICAgICBNZXRhZGF0YSBhbmQgb3RoZXIgZmlsZXMgdGhhdCBhbGwgc3VwcG9ydCB0aGUgWW9jdG8gUHJvamVjdC4KLSAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBtdXN0IGhhdmUgdGhlIFNvdXJjZSBEaXJlY3RvcnkgaW4gcGxhY2Ugb24KLSAgICAgICAgICAgICAgICB5b3VyIGRldmVsb3BtZW50IHN5c3RlbSBpbiBvcmRlciB0byBkbyBhbnkgZGV2ZWxvcG1lbnQgdXNpbmcKLSAgICAgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdC48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+QXMgd2l0aCBhbnkgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQsIGl0IGlzIGltcG9ydGFudAorICAgICAgICAgICAgICAgIHRvIGRvY3VtZW50IHRoZSBwb2xpY3kgdXNlZCBhcyB3ZWxsIGFzIGFueSBtYWluIHByb2plY3QKKyAgICAgICAgICAgICAgICBndWlkZWxpbmVzIHNvIHRoZXkgYXJlIHVuZGVyc3Rvb2QgYnkgZXZlcnlvbmUuCisgICAgICAgICAgICAgICAgSXQgaXMgYWxzbyBhIGdvb2QgaWRlYSB0byBoYXZlIHdlbGwgc3RydWN0dXJlZAorICAgICAgICAgICAgICAgIGNvbW1pdCBtZXNzYWdlcywgd2hpY2ggYXJlIHVzdWFsbHkgYSBwYXJ0IG9mIGEgcHJvamVjdCdzCisgICAgICAgICAgICAgICAgZ3VpZGVsaW5lcy4KKyAgICAgICAgICAgICAgICBHb29kIGNvbW1pdCBtZXNzYWdlcyBhcmUgZXNzZW50aWFsIHdoZW4gbG9va2luZyBiYWNrIGluIHRpbWUgYW5kCisgICAgICAgICAgICAgICAgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgd2h5IGNoYW5nZXMgd2VyZSBtYWRlLjwvcGFyYT4KIAotICAgICAgICAgICAgICAgIDxwYXJhPldoZW4geW91IGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2YgdGhlIEdpdCByZXBvc2l0b3J5LCB5b3UKLSAgICAgICAgICAgICAgICBjYW4gbmFtZSB0aGUgcmVwb3NpdG9yeSBhbnl0aGluZyB5b3UgbGlrZS4KLSAgICAgICAgICAgICAgICBUaHJvdWdob3V0IG11Y2ggb2YgdGhlIGRvY3VtZW50YXRpb24sICJwb2t5IgotICAgICAgICAgICAgICAgIGlzIHVzZWQgYXMgdGhlIG5hbWUgb2YgdGhlIHRvcC1sZXZlbCBmb2xkZXIgb2YgdGhlIGxvY2FsIGNvcHkgb2YKLSAgICAgICAgICAgICAgICB0aGUgcG9reSBHaXQgcmVwb3NpdG9yeS4KLSAgICAgICAgICAgICAgICBTbywgZm9yIGV4YW1wbGUsIGNsb25pbmcgdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gR2l0Ci0gICAgICAgICAgICAgICAgcmVwb3NpdG9yeSByZXN1bHRzIGluIGEgbG9jYWwgR2l0IHJlcG9zaXRvcnkgd2hvc2UgdG9wLWxldmVsCi0gICAgICAgICAgICAgICAgZm9sZGVyIGlzIGFsc28gbmFtZWQgInBva3kiLjwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPldoaWxlIGl0IGlzIG5vdCByZWNvbW1lbmRlZCB0aGF0IHlvdSB1c2UgdGFyYmFsbCBleHBhbnNpb24KLSAgICAgICAgICAgICAgICB0byBzZXQgdXAgdGhlIFNvdXJjZSBEaXJlY3RvcnksIGlmIHlvdSBkbywgdGhlIHRvcC1sZXZlbAotICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBuYW1lIG9mIHRoZSBTb3VyY2UgRGlyZWN0b3J5IGlzIGRlcml2ZWQgZnJvbSB0aGUKLSAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2UgdGFyYmFsbC4KLSAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZG93bmxvYWRpbmcgYW5kIHVucGFja2luZwotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4mWU9DVE9fUE9LWV9UQVJCQUxMOzwvZmlsZW5hbWU+IHJlc3VsdHMgaW4gYQotICAgICAgICAgICAgICAgIFNvdXJjZSBEaXJlY3Rvcnkgd2hvc2Ugcm9vdCBmb2xkZXIgaXMgbmFtZWQKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JllPQ1RPX1BPS1k7PC9maWxlbmFtZT4uPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+SXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlCi0gICAgICAgICAgICAgICAgU291cmNlIERpcmVjdG9yeSBjcmVhdGVkIGJ5IHVucGFja2luZyBhIHJlbGVhc2VkIHRhcmJhbGwgYXMKLSAgICAgICAgICAgICAgICBjb21wYXJlZCB0byBjbG9uaW5nCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3k8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICBXaGVuIHlvdSB1bnBhY2sgYSB0YXJiYWxsLCB5b3UgaGF2ZSBhbiBleGFjdCBjb3B5IG9mIHRoZSBmaWxlcwotICAgICAgICAgICAgICAgIGJhc2VkIG9uIHRoZSB0aW1lIG9mIHJlbGVhc2UgLSBhIGZpeGVkIHJlbGVhc2UgcG9pbnQuCi0gICAgICAgICAgICAgICAgQW55IGNoYW5nZXMgeW91IG1ha2UgdG8geW91ciBsb2NhbCBmaWxlcyBpbiB0aGUgU291cmNlIERpcmVjdG9yeQotICAgICAgICAgICAgICAgIGFyZSBvbiB0b3Agb2YgdGhlIHJlbGVhc2UgYW5kIHdpbGwgcmVtYWluIGxvY2FsIG9ubHkuCi0gICAgICAgICAgICAgICAgT24gdGhlIG90aGVyIGhhbmQsIHdoZW4geW91IGNsb25lIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnksIHlvdSBoYXZlIGFuIGFjdGl2ZSBkZXZlbG9wbWVudCByZXBvc2l0b3J5IHdpdGgKLSAgICAgICAgICAgICAgICBhY2Nlc3MgdG8gdGhlIHVwc3RyZWFtIHJlcG9zaXRvcnkncyBicmFuY2hlcyBhbmQgdGFncy4KLSAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIGFueSBsb2NhbCBjaGFuZ2VzIHlvdSBtYWtlIHRvIHRoZSBsb2NhbAotICAgICAgICAgICAgICAgIFNvdXJjZSBEaXJlY3RvcnkgY2FuIGJlIGxhdGVyIGFwcGxpZWQgdG8gYWN0aXZlIGRldmVsb3BtZW50Ci0gICAgICAgICAgICAgICAgYnJhbmNoZXMgb2YgdGhlIHVwc3RyZWFtIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gR2l0Ci0gICAgICAgICAgICAgICAgcmVwb3NpdG9yeS48L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb25jZXB0cyByZWxhdGVkIHRvIEdpdAotICAgICAgICAgICAgICAgIHJlcG9zaXRvcmllcywgYnJhbmNoZXMsIGFuZCB0YWdzLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlcG9zaXRvcmllcy10YWdzLWFuZC1icmFuY2hlcyc+UmVwb3NpdG9yaWVzLCBUYWdzLCBhbmQgQnJhbmNoZXM8L2xpbms+IgotICAgICAgICAgICAgICAgIHNlY3Rpb24uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRhc2s6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBBIHVuaXQgb2YgZXhlY3V0aW9uIGZvciBCaXRCYWtlIChlLmcuCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNvbXBpbGUnPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L3VsaW5rPiwKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtZmV0Y2gnPjxmaWxlbmFtZT5kb19mZXRjaDwvZmlsZW5hbWU+PC91bGluaz4sCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLXBhdGNoJz48ZmlsZW5hbWU+ZG9fcGF0Y2g8L2ZpbGVuYW1lPjwvdWxpbms+LAotICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IGRpc2NvdmVyIHRoYXQgY2hhbmdlcyBhcmUgbmVlZGVkIHRvIHRoZSBjb3JlCisgICAgICAgICAgICAgICAgbGF5ZXIgb2YgdGhlIHByb2plY3QsIGl0IGlzIHdvcnRoIHNoYXJpbmcgdGhvc2Ugd2l0aCB0aGUKKyAgICAgICAgICAgICAgICBjb21tdW5pdHkgYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAgICAgICAgICAgICAgICBDaGFuY2VzIGFyZSBpZiB5b3UgaGF2ZSBkaXNjb3ZlcmVkIHRoZSBuZWVkIGZvciBjaGFuZ2VzLAorICAgICAgICAgICAgICAgIHNvbWVvbmUgZWxzZSBpbiB0aGUgY29tbXVuaXR5IG5lZWRzIHRoZW0gYWxzby4KICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXBzdHJlYW06PC9lbXBoYXNpcz4gQSByZWZlcmVuY2UgdG8gc291cmNlIGNvZGUgb3IgcmVwb3NpdG9yaWVzCi0gICAgICAgICAgICAgICAgdGhhdCBhcmUgbm90IGxvY2FsIHRvIHRoZSBkZXZlbG9wbWVudCBzeXN0ZW0gYnV0IGxvY2F0ZWQgaW4gYSBtYXN0ZXIgYXJlYSB0aGF0IGlzIGNvbnRyb2xsZWQKLSAgICAgICAgICAgICAgICBieSB0aGUgbWFpbnRhaW5lciBvZiB0aGUgc291cmNlIGNvZGUuCi0gICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGluIG9yZGVyIGZvciBhIGRldmVsb3BlciB0byB3b3JrIG9uIGEgcGFydGljdWxhciBwaWVjZSBvZiBjb2RlLCB0aGV5IG5lZWQgdG8KLSAgICAgICAgICAgICAgICBmaXJzdCBnZXQgYSBjb3B5IG9mIGl0IGZyb20gYW4gInVwc3RyZWFtIiBzb3VyY2UuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgIDwvcGFyYT4KLTwvc2VjdGlvbj4KLQotPHNlY3Rpb24gaWQ9J2xpY2Vuc2luZyc+Ci0gICAgPHRpdGxlPkxpY2Vuc2luZzwvdGl0bGU+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgQmVjYXVzZSBvcGVuIHNvdXJjZSBwcm9qZWN0cyBhcmUgb3BlbiB0byB0aGUgcHVibGljLCB0aGV5IGhhdmUgZGlmZmVyZW50IGxpY2Vuc2luZyBzdHJ1Y3R1cmVzIGluIHBsYWNlLgotICAgICAgICBMaWNlbnNlIGV2b2x1dGlvbiBmb3IgYm90aCBPcGVuIFNvdXJjZSBhbmQgRnJlZSBTb2Z0d2FyZSBoYXMgYW4gaW50ZXJlc3RpbmcgaGlzdG9yeS4KLSAgICAgICAgSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIHRoaXMgaGlzdG9yeSwgeW91IGNhbiBmaW5kIGJhc2ljIGluZm9ybWF0aW9uIGhlcmU6Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9J2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvT3Blbi1zb3VyY2VfbGljZW5zZSc+T3BlbiBzb3VyY2UgbGljZW5zZSBoaXN0b3J5PC91bGluaz4KLSAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0naHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GcmVlX3NvZnR3YXJlX2xpY2Vuc2UnPkZyZWUgc29mdHdhcmUgbGljZW5zZQotICAgICAgICAgICAgaGlzdG9yeTwvdWxpbms+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIEluIGdlbmVyYWwsIHRoZSBZb2N0byBQcm9qZWN0IGlzIGJyb2FkbHkgbGljZW5zZWQgdW5kZXIgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kKLSAgICAgICAgKE1JVCkgTGljZW5zZS4KLSAgICAgICAgTUlUIGxpY2Vuc2luZyBwZXJtaXRzIHRoZSByZXVzZSBvZiBzb2Z0d2FyZSB3aXRoaW4gcHJvcHJpZXRhcnkgc29mdHdhcmUgYXMgbG9uZyBhcyB0aGUKLSAgICAgICAgbGljZW5zZSBpcyBkaXN0cmlidXRlZCB3aXRoIHRoYXQgc29mdHdhcmUuCi0gICAgICAgIE1JVCBpcyBhbHNvIGNvbXBhdGlibGUgd2l0aCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkuCi0gICAgICAgIFBhdGNoZXMgdG8gdGhlIFlvY3RvIFByb2plY3QgZm9sbG93IHRoZSB1cHN0cmVhbSBsaWNlbnNpbmcgc2NoZW1lLgotICAgICAgICBZb3UgY2FuIGZpbmQgaW5mb3JtYXRpb24gb24gdGhlIE1JVCBsaWNlbnNlCi0gICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwJz5oZXJlPC91bGluaz4uCi0gICAgICAgIFlvdSBjYW4gZmluZCBpbmZvcm1hdGlvbiBvbiB0aGUgR05VIEdQTCA8dWxpbmsgdXJsPSdodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0xHUEwtMy4wJz4KLSAgICAgICAgaGVyZTwvdWxpbms+LgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgICBXaGVuIHlvdSBidWlsZCBhbiBpbWFnZSB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCwgdGhlIGJ1aWxkIHByb2Nlc3MgdXNlcyBhCi0gICAgICAgIGtub3duIGxpc3Qgb2YgbGljZW5zZXMgdG8gZW5zdXJlIGNvbXBsaWFuY2UuCi0gICAgICAgIFlvdSBjYW4gZmluZCB0aGlzIGxpc3QgaW4gdGhlCi0gICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+IGF0Ci0gICAgICAgIDxmaWxlbmFtZT5tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlczwvZmlsZW5hbWU+LgotICAgICAgICBPbmNlIHRoZSBidWlsZCBjb21wbGV0ZXMsIHRoZSBsaXN0IG9mIGFsbCBsaWNlbnNlcyBmb3VuZCBhbmQgdXNlZCBkdXJpbmcgdGhhdCBidWlsZCBhcmUKLSAgICAgICAga2VwdCBpbiB0aGUKLSAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+IGF0Ci0gICAgICAgIDxmaWxlbmFtZT50bXAvZGVwbG95L2xpY2Vuc2VzPC9maWxlbmFtZT4uCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIElmIGEgbW9kdWxlIHJlcXVpcmVzIGEgbGljZW5zZSB0aGF0IGlzIG5vdCBpbiB0aGUgYmFzZSBsaXN0LCB0aGUgYnVpbGQgcHJvY2VzcwotICAgICAgICBnZW5lcmF0ZXMgYSB3YXJuaW5nIGR1cmluZyB0aGUgYnVpbGQuCi0gICAgICAgIFRoZXNlIHRvb2xzIG1ha2UgaXQgZWFzaWVyIGZvciBhIGRldmVsb3BlciB0byBiZSBjZXJ0YWluIG9mIHRoZSBsaWNlbnNlcyB3aXRoIHdoaWNoCi0gICAgICAgIHRoZWlyIHNoaXBwZWQgcHJvZHVjdHMgbXVzdCBjb21wbHkuCi0gICAgICAgIEhvd2V2ZXIsIGV2ZW4gd2l0aCB0aGVzZSB0b29scyBpdCBpcyBzdGlsbCB1cCB0byB0aGUgZGV2ZWxvcGVyIHRvIHJlc29sdmUgcG90ZW50aWFsIGxpY2Vuc2luZyBpc3N1ZXMuCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIFRoZSBiYXNlIGxpc3Qgb2YgbGljZW5zZXMgdXNlZCBieSB0aGUgYnVpbGQgcHJvY2VzcyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBTb2Z0d2FyZSBQYWNrYWdlCi0gICAgICAgIERhdGEgRXhjaGFuZ2UgKFNQRFgpIGxpc3QgYW5kIHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlIChPU0kpIHByb2plY3RzLgotICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vc3BkeC5vcmcnPlNQRFggR3JvdXA8L3VsaW5rPiBpcyBhIHdvcmtpbmcgZ3JvdXAgb2YgdGhlIExpbnV4IEZvdW5kYXRpb24KLSAgICAgICAgdGhhdCBtYWludGFpbnMgYSBzcGVjaWZpY2F0aW9uCi0gICAgICAgIGZvciBhIHN0YW5kYXJkIGZvcm1hdCBmb3IgY29tbXVuaWNhdGluZyB0aGUgY29tcG9uZW50cywgbGljZW5zZXMsIGFuZCBjb3B5cmlnaHRzCi0gICAgICAgIGFzc29jaWF0ZWQgd2l0aCBhIHNvZnR3YXJlIHBhY2thZ2UuCi0gICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9vcGVuc291cmNlLm9yZyc+T1NJPC91bGluaz4gaXMgYSBjb3Jwb3JhdGlvbiBkZWRpY2F0ZWQgdG8gdGhlIE9wZW4gU291cmNlCi0gICAgICAgIERlZmluaXRpb24gYW5kIHRoZSBlZmZvcnQgZm9yIHJldmlld2luZyBhbmQgYXBwcm92aW5nIGxpY2Vuc2VzIHRoYXQKLSAgICAgICAgY29uZm9ybSB0byB0aGUgT3BlbiBTb3VyY2UgRGVmaW5pdGlvbiAoT1NEKS4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgWW91IGNhbiBmaW5kIGEgbGlzdCBvZiB0aGUgY29tYmluZWQgU1BEWCBhbmQgT1NJIGxpY2Vuc2VzIHRoYXQgdGhlCi0gICAgICAgIFlvY3RvIFByb2plY3QgdXNlcyBpbiB0aGUKLSAgICAgICAgPGZpbGVuYW1lPm1ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzPC9maWxlbmFtZT4gZGlyZWN0b3J5IGluIHlvdXIKLSAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIEZvciBpbmZvcm1hdGlvbiB0aGF0IGNhbiBoZWxwIHlvdSBtYWludGFpbiBjb21wbGlhbmNlIHdpdGggdmFyaW91cwotICAgICAgICBvcGVuIHNvdXJjZSBsaWNlbnNpbmcgZHVyaW5nIHRoZSBsaWZlY3ljbGUgb2YgYSBwcm9kdWN0IGNyZWF0ZWQgdXNpbmcKLSAgICAgICAgdGhlIFlvY3RvIFByb2plY3QsIHNlZSB0aGUKLSAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J21haW50YWluaW5nLW9wZW4tc291cmNlLWxpY2Vuc2UtY29tcGxpYW5jZS1kdXJpbmcteW91ci1wcm9kdWN0cy1saWZlY3ljbGUnPk1haW50YWluaW5nIE9wZW4gU291cmNlIExpY2Vuc2UgQ29tcGxpYW5jZSBEdXJpbmcgWW91ciBQcm9kdWN0J3MgTGlmZWN5Y2xlPC9saW5rPiIKLSAgICAgICAgc2VjdGlvbi4KLSAgICA8L3BhcmE+Ci08L3NlY3Rpb24+Ci0KLTxzZWN0aW9uIGlkPSdnaXQnPgotICAgIDx0aXRsZT5HaXQ8L3RpdGxlPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IG1ha2VzIGV4dGVuc2l2ZSB1c2Ugb2YgR2l0LAotICAgICAgICB3aGljaCBpcyBhIGZyZWUsIG9wZW4gc291cmNlIGRpc3RyaWJ1dGVkIHZlcnNpb24gY29udHJvbCBzeXN0ZW0uCi0gICAgICAgIEdpdCBzdXBwb3J0cyBkaXN0cmlidXRlZCBkZXZlbG9wbWVudCwgbm9uLWxpbmVhciBkZXZlbG9wbWVudCwgYW5kIGNhbiBoYW5kbGUgbGFyZ2UgcHJvamVjdHMuCi0gICAgICAgIEl0IGlzIGJlc3QgdGhhdCB5b3UgaGF2ZSBzb21lIGZ1bmRhbWVudGFsIHVuZGVyc3RhbmRpbmcgb2YgaG93IEdpdCB0cmFja3MgcHJvamVjdHMgYW5kCi0gICAgICAgIGhvdyB0byB3b3JrIHdpdGggR2l0IGlmIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBZb2N0byBQcm9qZWN0IGZvciBkZXZlbG9wbWVudC4KLSAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGEgcXVpY2sgb3ZlcnZpZXcgb2YgaG93IEdpdCB3b3JrcyBhbmQgcHJvdmlkZXMgeW91IHdpdGggYSBzdW1tYXJ5Ci0gICAgICAgIG9mIHNvbWUgZXNzZW50aWFsIEdpdCBjb21tYW5kcy4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gR2l0LCBzZWUKLSAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC1zY20uY29tL2RvY3VtZW50YXRpb24nPjwvdWxpbms+LgotICAgICAgICBJZiB5b3UgbmVlZCB0byBkb3dubG9hZCBHaXQsIGdvIHRvIDx1bGluayB1cmw9J2h0dHA6Ly9naXQtc2NtLmNvbS9kb3dubG9hZCc+PC91bGluaz4uCi0gICAgPC9wYXJhPgotCi0gICAgPHNlY3Rpb24gaWQ9J3JlcG9zaXRvcmllcy10YWdzLWFuZC1icmFuY2hlcyc+Ci0gICAgICAgIDx0aXRsZT5SZXBvc2l0b3JpZXMsIFRhZ3MsIGFuZCBCcmFuY2hlczwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBBcyBtZW50aW9uZWQgZWFybGllciBpbiB0aGUgc2VjdGlvbgotICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3lvY3RvLXByb2plY3QtcmVwb3NpdG9yaWVzJz5Zb2N0byBQcm9qZWN0IFNvdXJjZSBSZXBvc2l0b3JpZXM8L2xpbms+IiwKLSAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IG1haW50YWlucyBzb3VyY2UgcmVwb3NpdG9yaWVzIGF0Ci0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2knPjwvdWxpbms+LgotICAgICAgICAgICAgSWYgeW91IGxvb2sgYXQgdGhpcyB3ZWItaW50ZXJmYWNlIG9mIHRoZSByZXBvc2l0b3JpZXMsIGVhY2ggaXRlbSBpcyBhIHNlcGFyYXRlCi0gICAgICAgICAgICBHaXQgcmVwb3NpdG9yeS4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgR2l0IHJlcG9zaXRvcmllcyB1c2UgYnJhbmNoaW5nIHRlY2huaXF1ZXMgdGhhdCB0cmFjayBjb250ZW50IGNoYW5nZSAobm90IGZpbGVzKQotICAgICAgICAgICAgd2l0aGluIGEgcHJvamVjdCAoZS5nLiBhIG5ldyBmZWF0dXJlIG9yIHVwZGF0ZWQgZG9jdW1lbnRhdGlvbikuCi0gICAgICAgICAgICBDcmVhdGluZyBhIHRyZWUtbGlrZSBzdHJ1Y3R1cmUgYmFzZWQgb24gcHJvamVjdCBkaXZlcmdlbmNlIGFsbG93cyBmb3IgZXhjZWxsZW50IGhpc3RvcmljYWwKLSAgICAgICAgICAgIGluZm9ybWF0aW9uIG92ZXIgdGhlIGxpZmUgb2YgYSBwcm9qZWN0LgotICAgICAgICAgICAgVGhpcyBtZXRob2RvbG9neSBhbHNvIGFsbG93cyBmb3IgYW4gZW52aXJvbm1lbnQgZnJvbSB3aGljaCB5b3UgY2FuIGRvIGxvdHMgb2YKLSAgICAgICAgICAgIGxvY2FsIGV4cGVyaW1lbnRhdGlvbiBvbiBwcm9qZWN0cyBhcyB5b3UgZGV2ZWxvcCBjaGFuZ2VzIG9yIG5ldyBmZWF0dXJlcy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQSBHaXQgcmVwb3NpdG9yeSByZXByZXNlbnRzIGFsbCBkZXZlbG9wbWVudCBlZmZvcnRzIGZvciBhIGdpdmVuIHByb2plY3QuCi0gICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIEdpdCByZXBvc2l0b3J5IDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gY29udGFpbnMgYWxsIGNoYW5nZXMKLSAgICAgICAgICAgIGFuZCBkZXZlbG9wbWVudHMgZm9yIFBva3kgb3ZlciB0aGUgY291cnNlIG9mIGl0cyBlbnRpcmUgbGlmZS4KLSAgICAgICAgICAgIFRoYXQgbWVhbnMgdGhhdCBhbGwgY2hhbmdlcyB0aGF0IG1ha2UgdXAgYWxsIHJlbGVhc2VzIGFyZSBjYXB0dXJlZC4KLSAgICAgICAgICAgIFRoZSByZXBvc2l0b3J5IG1haW50YWlucyBhIGNvbXBsZXRlIGhpc3Rvcnkgb2YgY2hhbmdlcy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgWW91IGNhbiBjcmVhdGUgYSBsb2NhbCBjb3B5IG9mIGFueSByZXBvc2l0b3J5IGJ5ICJjbG9uaW5nIiBpdCB3aXRoIHRoZSBHaXQKLSAgICAgICAgICAgIDxmaWxlbmFtZT5jbG9uZTwvZmlsZW5hbWU+IGNvbW1hbmQuCi0gICAgICAgICAgICBXaGVuIHlvdSBjbG9uZSBhIEdpdCByZXBvc2l0b3J5LCB5b3UgZW5kIHVwIHdpdGggYW4gaWRlbnRpY2FsIGNvcHkgb2YgdGhlCi0gICAgICAgICAgICByZXBvc2l0b3J5IG9uIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtLgotICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBhIGxvY2FsIGNvcHkgb2YgYSByZXBvc2l0b3J5LCB5b3UgY2FuIHRha2Ugc3RlcHMgdG8gZGV2ZWxvcCBsb2NhbGx5LgotICAgICAgICAgICAgRm9yIGV4YW1wbGVzIG9uIGhvdyB0byBjbG9uZSBHaXQgcmVwb3NpdG9yaWVzLCBzZWUgdGhlCi0gICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZ2V0dGluZy1zZXR1cCc+R2V0dGluZyBTZXQgVXA8L2xpbms+IiBzZWN0aW9uLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGF0IEdpdCB0cmFja3MgY29udGVudCBjaGFuZ2UgYW5kCi0gICAgICAgICAgICBub3QgZmlsZXMuCi0gICAgICAgICAgICBHaXQgdXNlcyAiYnJhbmNoZXMiIHRvIG9yZ2FuaXplIGRpZmZlcmVudCBkZXZlbG9wbWVudCBlZmZvcnRzLgotICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkgaGFzCi0gICAgICAgICAgICBzZXZlcmFsIGJyYW5jaGVzIHRoYXQgaW5jbHVkZSB0aGUgY3VycmVudAotICAgICAgICAgICAgPGZpbGVuYW1lPiZESVNUUk9fTkFNRV9OT19DQVA7PC9maWxlbmFtZT4gYnJhbmNoLCB0aGUKLSAgICAgICAgICAgIDxmaWxlbmFtZT5tYXN0ZXI8L2ZpbGVuYW1lPiBicmFuY2gsIGFuZCBtYW55IGJyYW5jaGVzIGZvciBwYXN0Ci0gICAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2VzLgotICAgICAgICAgICAgWW91IGNhbiBzZWUgYWxsIHRoZSBicmFuY2hlcyBieSBnb2luZyB0bwotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpL3Bva3kvJz48L3VsaW5rPiBhbmQKLSAgICAgICAgICAgIGNsaWNraW5nIG9uIHRoZQotICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaS9wb2t5L3JlZnMvaGVhZHMnPlsuLi5dPC91bGluaz48L2ZpbGVuYW1lPgotICAgICAgICAgICAgbGluayBiZW5lYXRoIHRoZSAiQnJhbmNoIiBoZWFkaW5nLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBFYWNoIG9mIHRoZXNlIGJyYW5jaGVzIHJlcHJlc2VudHMgYSBzcGVjaWZpYyBhcmVhIG9mIGRldmVsb3BtZW50LgotICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5tYXN0ZXI8L2ZpbGVuYW1lPiBicmFuY2ggcmVwcmVzZW50cyB0aGUgY3VycmVudCBvciBtb3N0IHJlY2VudAotICAgICAgICAgICAgZGV2ZWxvcG1lbnQuCi0gICAgICAgICAgICBBbGwgb3RoZXIgYnJhbmNoZXMgcmVwcmVzZW50IG9mZnNob290cyBvZiB0aGUgPGZpbGVuYW1lPm1hc3RlcjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICBicmFuY2guCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFdoZW4geW91IGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2YgYSBHaXQgcmVwb3NpdG9yeSwgdGhlIGNvcHkgaGFzIHRoZSBzYW1lIHNldAotICAgICAgICAgICAgb2YgYnJhbmNoZXMgYXMgdGhlIG9yaWdpbmFsLgotICAgICAgICAgICAgVGhpcyBtZWFucyB5b3UgY2FuIHVzZSBHaXQgdG8gY3JlYXRlIGEgbG9jYWwgd29ya2luZyBhcmVhIChhbHNvIGNhbGxlZCBhIGJyYW5jaCkKLSAgICAgICAgICAgIHRoYXQgdHJhY2tzIGEgc3BlY2lmaWMgZGV2ZWxvcG1lbnQgYnJhbmNoIGZyb20gdGhlIHNvdXJjZSBHaXQgcmVwb3NpdG9yeS4KLSAgICAgICAgICAgIGluIG90aGVyIHdvcmRzLCB5b3UgY2FuIGRlZmluZSB5b3VyIGxvY2FsIEdpdCBlbnZpcm9ubWVudCB0byB3b3JrIG9uIGFueSBkZXZlbG9wbWVudAotICAgICAgICAgICAgYnJhbmNoIGluIHRoZSByZXBvc2l0b3J5LgotICAgICAgICAgICAgVG8gaGVscCBpbGx1c3RyYXRlLCBoZXJlIGlzIGEgc2V0IG9mIGNvbW1hbmRzIHRoYXQgY3JlYXRlcyBhIGxvY2FsIGNvcHkgb2YgdGhlCi0gICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IEdpdCByZXBvc2l0b3J5IGFuZCB0aGVuIGNyZWF0ZXMgYW5kIGNoZWNrcyBvdXQgYSBsb2NhbAotICAgICAgICAgICAgR2l0IGJyYW5jaCB0aGF0IHRyYWNrcyB0aGUgWW9jdG8gUHJvamVjdCAmRElTVFJPOyBSZWxlYXNlICgmRElTVFJPX05BTUU7KSBkZXZlbG9wbWVudDoKLSAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBjZCB+Ci0gICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kKLSAgICAgJCBjZCBwb2t5Ci0gICAgICQgZ2l0IGNoZWNrb3V0IC1iICZESVNUUk9fTkFNRV9OT19DQVA7IG9yaWdpbi8mRElTVFJPX05BTUVfTk9fQ0FQOwotICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgbmFtZSBvZiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBvZiB5b3VyIGxvY2FsCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgotICAgICAgICAgICAgaXMgInBva3kiIGFuZCB0aGUgbmFtZSBvZiB0aGF0IGxvY2FsIHdvcmtpbmcgYXJlYSAobG9jYWwgYnJhbmNoKQotICAgICAgICAgICAgeW91IGp1c3QgY3JlYXRlZCBhbmQgY2hlY2tlZCBvdXQgaXMgIiZESVNUUk9fTkFNRV9OT19DQVA7Ii4KLSAgICAgICAgICAgIFRoZSBmaWxlcyBpbiB5b3VyIGxvY2FsIHJlcG9zaXRvcnkgbm93IHJlZmxlY3QgdGhlIHNhbWUgZmlsZXMgdGhhdAotICAgICAgICAgICAgYXJlIGluIHRoZSAiJkRJU1RST19OQU1FX05PX0NBUDsiIGRldmVsb3BtZW50IGJyYW5jaCBvZiB0aGUKLSAgICAgICAgICAgIFlvY3RvIFByb2plY3QncyAicG9reSIgdXBzdHJlYW0gcmVwb3NpdG9yeS4KLSAgICAgICAgICAgIEl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoYXQgd2hlbiB5b3UgY3JlYXRlIGFuZCBjaGVja291dCBhCi0gICAgICAgICAgICBsb2NhbCB3b3JraW5nIGJyYW5jaCBiYXNlZCBvbiBhIGJyYW5jaCBuYW1lLAotICAgICAgICAgICAgeW91ciBsb2NhbCBlbnZpcm9ubWVudCBtYXRjaGVzIHRoZSAidGlwIiBvZiB0aGF0IGRldmVsb3BtZW50IGJyYW5jaAotICAgICAgICAgICAgYXQgdGhlIHRpbWUgeW91IGNyZWF0ZWQgeW91ciBsb2NhbCBicmFuY2gsIHdoaWNoIGNvdWxkIGJlCi0gICAgICAgICAgICBkaWZmZXJlbnQgZnJvbSB0aGUgZmlsZXMgYXQgdGhlIHRpbWUgb2YgYSBzaW1pbGFybHkgbmFtZWQgcmVsZWFzZS4KLSAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCBjcmVhdGluZyBhbmQgY2hlY2tpbmcgb3V0IGEgbG9jYWwgYnJhbmNoIGJhc2VkIG9uCi0gICAgICAgICAgICB0aGUgIiZESVNUUk9fTkFNRV9OT19DQVA7IiBicmFuY2ggbmFtZSBpcyBub3QgdGhlIHNhbWUgYXMKLSAgICAgICAgICAgIGNsb25pbmcgYW5kIGNoZWNraW5nIG91dCB0aGUgIm1hc3RlciIgYnJhbmNoLgotICAgICAgICAgICAgS2VlcCByZWFkaW5nIHRvIHNlZSBob3cgeW91IGNyZWF0ZSBhIGxvY2FsIHNuYXBzaG90IG9mIGEgWW9jdG8KLSAgICAgICAgICAgIFByb2plY3QgUmVsZWFzZS4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgR2l0IHVzZXMgInRhZ3MiIHRvIG1hcmsgc3BlY2lmaWMgY2hhbmdlcyBpbiBhIHJlcG9zaXRvcnkuCi0gICAgICAgICAgICBUeXBpY2FsbHksIGEgdGFnIGlzIHVzZWQgdG8gbWFyayBhIHNwZWNpYWwgcG9pbnQgc3VjaCBhcyB0aGUgZmluYWwKLSAgICAgICAgICAgIGNoYW5nZSBiZWZvcmUgYSBwcm9qZWN0IGlzIHJlbGVhc2VkLgotICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlIHRhZ3MgdXNlZCB3aXRoIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IEdpdAotICAgICAgICAgICAgcmVwb3NpdG9yeSBieSBnb2luZyB0bwotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpL3Bva3kvJz48L3VsaW5rPiBhbmQKLSAgICAgICAgICAgIGNsaWNraW5nIG9uIHRoZQotICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaS9wb2t5L3JlZnMvdGFncyc+Wy4uLl08L3VsaW5rPjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICBsaW5rIGJlbmVhdGggdGhlICJUYWciIGhlYWRpbmcuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFNvbWUga2V5IHRhZ3MgYXJlCi0gICAgICAgICAgICA8ZmlsZW5hbWU+ZGl6enktMTIuMC4wPC9maWxlbmFtZT4sCi0gICAgICAgICAgICA8ZmlsZW5hbWU+Zmlkby0xMy4wLjA8L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgIDxmaWxlbmFtZT5qZXRocm8tMTQuMC4wPC9maWxlbmFtZT4sIGFuZAotICAgICAgICAgICAgPGZpbGVuYW1lPiZESVNUUk9fTkFNRV9OT19DQVA7LSZQT0tZVkVSU0lPTjs8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgIFRoZXNlIHRhZ3MgcmVwcmVzZW50IFlvY3RvIFByb2plY3QgcmVsZWFzZXMuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFdoZW4geW91IGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2YgdGhlIEdpdCByZXBvc2l0b3J5LCB5b3UgYWxzbyBoYXZlIGFjY2VzcyB0byBhbGwgdGhlCi0gICAgICAgICAgICB0YWdzLgotICAgICAgICAgICAgU2ltaWxhciB0byBicmFuY2hlcywgeW91IGNhbiBjcmVhdGUgYW5kIGNoZWNrb3V0IGEgbG9jYWwgd29ya2luZyBHaXQgYnJhbmNoIGJhc2VkCi0gICAgICAgICAgICBvbiBhIHRhZyBuYW1lLgotICAgICAgICAgICAgV2hlbiB5b3UgZG8gdGhpcywgeW91IGdldCBhIHNuYXBzaG90IG9mIHRoZSBHaXQgcmVwb3NpdG9yeSB0aGF0IHJlZmxlY3RzCi0gICAgICAgICAgICB0aGUgc3RhdGUgb2YgdGhlIGZpbGVzIHdoZW4gdGhlIGNoYW5nZSB3YXMgbWFkZSBhc3NvY2lhdGVkIHdpdGggdGhhdCB0YWcuCi0gICAgICAgICAgICBUaGUgbW9zdCBjb21tb24gdXNlIGlzIHRvIGNoZWNrb3V0IGEgd29ya2luZyBicmFuY2ggdGhhdCBtYXRjaGVzIGEgc3BlY2lmaWMKLSAgICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZS4KLSAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKLSAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBjZCB+Ci0gICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kKLSAgICAgJCBjZCBwb2t5Ci0gICAgICQgZ2l0IGNoZWNrb3V0IC1iIG15LSZESVNUUk9fTkFNRV9OT19DQVA7LSZQT0tZVkVSU0lPTjsgJkRJU1RST19OQU1FX05PX0NBUDstJlBPS1lWRVJTSU9OOwotICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgbmFtZSBvZiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBvZiB5b3VyIGxvY2FsIFlvY3RvIFByb2plY3QKLSAgICAgICAgICAgIEZpbGVzIEdpdCByZXBvc2l0b3J5IGlzIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4uCi0gICAgICAgICAgICBBbmQsIHRoZSBuYW1lIG9mIHRoZSBsb2NhbCBicmFuY2ggeW91IGhhdmUgY3JlYXRlZCBhbmQgY2hlY2tlZCBvdXQgaXMKLSAgICAgICAgICAgIDxmaWxlbmFtZT5teS0mRElTVFJPX05BTUVfTk9fQ0FQOy0mUE9LWVZFUlNJT047PC9maWxlbmFtZT4uCi0gICAgICAgICAgICBUaGUgZmlsZXMgaW4geW91ciByZXBvc2l0b3J5IG5vdyBleGFjdGx5IG1hdGNoIHRoZSBZb2N0byBQcm9qZWN0ICZESVNUUk87Ci0gICAgICAgICAgICBSZWxlYXNlIHRhZyAoPGZpbGVuYW1lPiZESVNUUk9fTkFNRV9OT19DQVA7LSZQT0tZVkVSU0lPTjs8L2ZpbGVuYW1lPikuCi0gICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGF0IHdoZW4geW91IGNyZWF0ZSBhbmQgY2hlY2tvdXQgYSBsb2NhbAotICAgICAgICAgICAgd29ya2luZyBicmFuY2ggYmFzZWQgb24gYSB0YWcsIHlvdXIgZW52aXJvbm1lbnQgbWF0Y2hlcyBhIHNwZWNpZmljIHBvaW50Ci0gICAgICAgICAgICBpbiB0aW1lIGFuZCBub3QgdGhlIGVudGlyZSBkZXZlbG9wbWVudCBicmFuY2guCi0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0nYmFzaWMtY29tbWFuZHMnPgotICAgICAgICA8dGl0bGU+QmFzaWMgQ29tbWFuZHM8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgR2l0IGhhcyBhbiBleHRlbnNpdmUgc2V0IG9mIGNvbW1hbmRzIHRoYXQgbGV0cyB5b3UgbWFuYWdlIGNoYW5nZXMgYW5kIHBlcmZvcm0KLSAgICAgICAgICAgIGNvbGxhYm9yYXRpb24gb3ZlciB0aGUgbGlmZSBvZiBhIHByb2plY3QuCi0gICAgICAgICAgICBDb252ZW5pZW50bHkgdGhvdWdoLCB5b3UgY2FuIG1hbmFnZSB3aXRoIGEgc21hbGwgc2V0IG9mIGJhc2ljIG9wZXJhdGlvbnMgYW5kIHdvcmtmbG93cwotICAgICAgICAgICAgb25jZSB5b3UgdW5kZXJzdGFuZCB0aGUgYmFzaWMgcGhpbG9zb3BoeSBiZWhpbmQgR2l0LgotICAgICAgICAgICAgWW91IGRvIG5vdCBoYXZlIHRvIGJlIGFuIGV4cGVydCBpbiBHaXQgdG8gYmUgZnVuY3Rpb25hbC4KLSAgICAgICAgICAgIEEgZ29vZCBwbGFjZSB0byBsb29rIGZvciBpbnN0cnVjdGlvbiBvbiBhIG1pbmltYWwgc2V0IG9mIEdpdCBjb21tYW5kcyBpcwotICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC1zY20uY29tL2RvY3VtZW50YXRpb24nPmhlcmU8L3VsaW5rPi4KLSAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIGRvd25sb2FkIEdpdCwgeW91IGNhbiBkbyBzbwotICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC1zY20uY29tL2Rvd25sb2FkJz5oZXJlPC91bGluaz4sIGFsdGhvdWdoCi0gICAgICAgICAgICBhbnkgcmVhc29uYWJseSBjdXJyZW50IExpbnV4IGRpc3RyaWJ1dGlvbiBzaG91bGQgYWxyZWFkeSBoYXZlIGFuCi0gICAgICAgICAgICBpbnN0YWxsYWJsZSBwYWNrYWdlIGZvciBHaXQuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIElmIHlvdSBkbyBub3Qga25vdyBtdWNoIGFib3V0IEdpdCwgeW91IHNob3VsZCBlZHVjYXRlCi0gICAgICAgICAgICB5b3Vyc2VsZiBieSB2aXNpdGluZyB0aGUgbGlua3MgcHJldmlvdXNseSBtZW50aW9uZWQuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBicmllZmx5IGRlc2NyaWJlcyBzb21lIGJhc2ljIEdpdCBvcGVyYXRpb25zIGFzIGEgd2F5IHRvIGdldCBzdGFydGVkLgotICAgICAgICAgICAgQXMgd2l0aCBhbnkgc2V0IG9mIGNvbW1hbmRzLCB0aGlzIGxpc3QgKGluIG1vc3QgY2FzZXMpIHNpbXBseSBzaG93cyB0aGUgYmFzZSBjb21tYW5kIGFuZAotICAgICAgICAgICAgb21pdHMgdGhlIG1hbnkgYXJndW1lbnRzIHRoZXkgc3VwcG9ydC4KLSAgICAgICAgICAgIFNlZSB0aGUgR2l0IGRvY3VtZW50YXRpb24gZm9yIGNvbXBsZXRlIGRlc2NyaXB0aW9ucyBhbmQgc3RyYXRlZ2llcyBvbiBob3cgdG8gdXNlIHRoZXNlIGNvbW1hbmRzOgotICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgaW5pdDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+IEluaXRpYWxpemVzIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5LgotICAgICAgICAgICAgICAgICAgICBZb3UgY2Fubm90IHVzZSBHaXQgY29tbWFuZHMgdW5sZXNzIHlvdSBoYXZlIGEgPGZpbGVuYW1lPi5naXQ8L2ZpbGVuYW1lPiByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBjbG9uZTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIENyZWF0ZXMgYSBsb2NhbCBjbG9uZSBvZiBhIEdpdCByZXBvc2l0b3J5LgotICAgICAgICAgICAgICAgICAgICBEdXJpbmcgY29sbGFib3JhdGlvbiwgdGhpcyBjb21tYW5kIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEKLSAgICAgICAgICAgICAgICAgICAgbG9jYWwgR2l0IHJlcG9zaXRvcnkgdGhhdCBpcyBvbiBlcXVhbCBmb290aW5nIHdpdGggYSBmZWxsb3cKLSAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcGVy4oCZcyBHaXQgcmVwb3NpdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IGFkZDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+IFN0YWdlcyB1cGRhdGVkIGZpbGUgY29udGVudHMKLSAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGluZGV4IHRoYXQKLSAgICAgICAgICAgICAgICAgICAgR2l0IHVzZXMgdG8gdHJhY2sgY2hhbmdlcy4KLSAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc3RhZ2UgYWxsIGZpbGVzIHRoYXQgaGF2ZSBjaGFuZ2VkIGJlZm9yZSB5b3UgY2FuIGNvbW1pdCB0aGVtLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBjb21taXQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPiBDcmVhdGVzIGEgImNvbW1pdCIgdGhhdCBkb2N1bWVudHMKLSAgICAgICAgICAgICAgICAgICAgdGhlIGNoYW5nZXMgeW91IG1hZGUuCi0gICAgICAgICAgICAgICAgICAgIENvbW1pdHMgYXJlIHVzZWQgZm9yIGhpc3RvcmljYWwgcHVycG9zZXMsIGZvciBkZXRlcm1pbmluZyBpZiBhIG1haW50YWluZXIgb2YgYSBwcm9qZWN0Ci0gICAgICAgICAgICAgICAgICAgIHdpbGwgYWxsb3cgdGhlIGNoYW5nZSwgYW5kIGZvciB1bHRpbWF0ZWx5IHB1c2hpbmcgdGhlIGNoYW5nZSBmcm9tIHlvdXIgbG9jYWwgR2l0IHJlcG9zaXRvcnkKLSAgICAgICAgICAgICAgICAgICAgaW50byB0aGUgcHJvamVjdOKAmXMgdXBzdHJlYW0gKG9yIG1hc3RlcikgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgc3RhdHVzPC9maWxlbmFtZT46PC9lbXBoYXNpcz4gUmVwb3J0cyBhbnkgbW9kaWZpZWQgZmlsZXMgdGhhdAotICAgICAgICAgICAgICAgICAgICBwb3NzaWJseSBuZWVkIHRvIGJlIHN0YWdlZCBhbmQgY29tbWl0dGVkLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBjaGVja291dDwvZmlsZW5hbWU+IDxyZXBsYWNlYWJsZT5icmFuY2gtbmFtZTwvcmVwbGFjZWFibGU+OjwvZW1waGFzaXM+IENoYW5nZXMKLSAgICAgICAgICAgICAgICAgICAgeW91ciB3b3JraW5nIGJyYW5jaC4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGlzIGFuYWxvZ291cyB0byAiY2QiLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBjaGVja291dCDigJNiPC9maWxlbmFtZT4gPHJlcGxhY2VhYmxlPndvcmtpbmctYnJhbmNoPC9yZXBsYWNlYWJsZT46PC9lbXBoYXNpcz4gQ3JlYXRlcwotICAgICAgICAgICAgICAgICAgICBhIHdvcmtpbmcgYnJhbmNoIG9uIHlvdXIgbG9jYWwgbWFjaGluZSB3aGVyZSB5b3UgY2FuIGlzb2xhdGUgd29yay4KLSAgICAgICAgICAgICAgICAgICAgSXQgaXMgYSBnb29kIGlkZWEgdG8gdXNlIGxvY2FsIGJyYW5jaGVzIHdoZW4gYWRkaW5nIHNwZWNpZmljIGZlYXR1cmVzIG9yIGNoYW5nZXMuCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgd2F5IGlmIHlvdSBkbyBub3QgbGlrZSB3aGF0IHlvdSBoYXZlIGRvbmUgeW91IGNhbiBlYXNpbHkgZ2V0IHJpZCBvZiB0aGUgd29yay48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgYnJhbmNoPC9maWxlbmFtZT46PC9lbXBoYXNpcz4gUmVwb3J0cwotICAgICAgICAgICAgICAgICAgICBleGlzdGluZyBsb2NhbCBicmFuY2hlcyBhbmQKLSAgICAgICAgICAgICAgICAgICAgdGVsbHMgeW91IHRoZSBicmFuY2ggaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgd29ya2luZy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgYnJhbmNoIC1EPC9maWxlbmFtZT4gPHJlcGxhY2VhYmxlPmJyYW5jaC1uYW1lPC9yZXBsYWNlYWJsZT46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgRGVsZXRlcyBhbiBleGlzdGluZyBsb2NhbCBicmFuY2guCi0gICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGJlIGluIGEgbG9jYWwgYnJhbmNoIG90aGVyIHRoYW4gdGhlIG9uZSB5b3UgYXJlIGRlbGV0aW5nCi0gICAgICAgICAgICAgICAgICAgIGluIG9yZGVyIHRvIGRlbGV0ZSA8cmVwbGFjZWFibGU+YnJhbmNoLW5hbWU8L3JlcGxhY2VhYmxlPi48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgcHVsbDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+IFJldHJpZXZlcyBpbmZvcm1hdGlvbgotICAgICAgICAgICAgICAgICAgICBmcm9tIGFuIHVwc3RyZWFtIEdpdAotICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5IGFuZCBwbGFjZXMgaXQgaW4geW91ciBsb2NhbCBHaXQgcmVwb3NpdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgWW91IHVzZSB0aGlzIGNvbW1hbmQgdG8gbWFrZSBzdXJlIHlvdSBhcmUgc3luY2hyb25pemVkIHdpdGggdGhlIHJlcG9zaXRvcnkKLSAgICAgICAgICAgICAgICAgICAgZnJvbSB3aGljaCB5b3UgYXJlIGJhc2luZyBjaGFuZ2VzICguZS5nLiB0aGUgbWFzdGVyIGJyYW5jaCkuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IHB1c2g8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBTZW5kcyBhbGwgeW91ciBjb21taXR0ZWQgbG9jYWwgY2hhbmdlcyB0byBhbiB1cHN0cmVhbSBHaXQKLSAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSAoZS5nLiBhIGNvbnRyaWJ1dGlvbiByZXBvc2l0b3J5KS4KLSAgICAgICAgICAgICAgICAgICAgVGhlIG1haW50YWluZXIgb2YgdGhlIHByb2plY3QgZHJhd3MgZnJvbSB0aGVzZSByZXBvc2l0b3JpZXMKLSAgICAgICAgICAgICAgICAgICAgd2hlbiBhZGRpbmcgY2hhbmdlcyB0byB0aGUgcHJvamVjdOKAmXMgbWFzdGVyIHJlcG9zaXRvcnkgb3IKLSAgICAgICAgICAgICAgICAgICAgb3RoZXIgZGV2ZWxvcG1lbnQgYnJhbmNoLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgbWVyZ2U8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPiBDb21iaW5lcyBvciBhZGRzIGNoYW5nZXMgZnJvbSBvbmUKLSAgICAgICAgICAgICAgICAgICAgbG9jYWwgYnJhbmNoIG9mIHlvdXIgcmVwb3NpdG9yeSB3aXRoIGFub3RoZXIgYnJhbmNoLgotICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBjcmVhdGUgYSBsb2NhbCBHaXQgcmVwb3NpdG9yeSwgdGhlIGRlZmF1bHQgYnJhbmNoIGlzIG5hbWVkICJtYXN0ZXIiLgotICAgICAgICAgICAgICAgICAgICBBIHR5cGljYWwgd29ya2Zsb3cgaXMgdG8gY3JlYXRlIGEgdGVtcG9yYXJ5IGJyYW5jaCBmb3IgaXNvbGF0ZWQgd29yaywgbWFrZSBhbmQgY29tbWl0IHlvdXIKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlcywgc3dpdGNoIHRvIHlvdXIgbG9jYWwgbWFzdGVyIGJyYW5jaCwgbWVyZ2UgdGhlIGNoYW5nZXMgZnJvbSB0aGUgdGVtcG9yYXJ5IGJyYW5jaCBpbnRvIHRoZQotICAgICAgICAgICAgICAgICAgICBsb2NhbCBtYXN0ZXIgYnJhbmNoLCBhbmQgdGhlbiBkZWxldGUgdGhlIHRlbXBvcmFyeSBicmFuY2guPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IGNoZXJyeS1waWNrPC9maWxlbmFtZT46PC9lbXBoYXNpcz4gQ2hvb3NlIGFuZCBhcHBseSBzcGVjaWZpYwotICAgICAgICAgICAgICAgICAgICBjb21taXRzIGZyb20gb25lIGJyYW5jaCBpbnRvIGFub3RoZXIgYnJhbmNoLgotICAgICAgICAgICAgICAgICAgICBUaGVyZSBhcmUgdGltZXMgd2hlbiB5b3UgbWlnaHQgbm90IGJlIGFibGUgdG8gbWVyZ2UgYWxsIHRoZSBjaGFuZ2VzIGluIG9uZSBicmFuY2ggd2l0aAotICAgICAgICAgICAgICAgICAgICBhbm90aGVyIGJ1dCBuZWVkIHRvIHBpY2sgb3V0IGNlcnRhaW4gb25lcy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXRrPC9maWxlbmFtZT46PC9lbXBoYXNpcz4gUHJvdmlkZXMgYSBHVUkgdmlldyBvZiB0aGUgYnJhbmNoZXMKLSAgICAgICAgICAgICAgICAgICAgYW5kIGNoYW5nZXMgaW4geW91ciBsb2NhbCBHaXQgcmVwb3NpdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGlzIGEgZ29vZCB3YXkgdG8gZ3JhcGhpY2FsbHkgc2VlIHdoZXJlIHRoaW5ncyBoYXZlIGRpdmVyZ2VkIGluIHlvdXIKLSAgICAgICAgICAgICAgICAgICAgbG9jYWwgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgbG9nPC9maWxlbmFtZT46PC9lbXBoYXNpcz4gUmVwb3J0cyBhIGhpc3Rvcnkgb2YgeW91ciBjaGFuZ2VzIHRvIHRoZQotICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBkaWZmPC9maWxlbmFtZT46PC9lbXBoYXNpcz4gRGlzcGxheXMgbGluZS1ieS1saW5lIGRpZmZlcmVuY2VzCi0gICAgICAgICAgICAgICAgICAgIGJldHdlZW4geW91ciBsb2NhbCB3b3JraW5nIGZpbGVzIGFuZCB0aGUgc2FtZSBmaWxlcyBpbiB0aGUgdXBzdHJlYW0gR2l0IHJlcG9zaXRvcnkgdGhhdCB5b3VyCi0gICAgICAgICAgICAgICAgICAgIGJyYW5jaCBjdXJyZW50bHkgdHJhY2tzLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci08L3NlY3Rpb24+Ci0KLTxzZWN0aW9uIGlkPSd3b3JrZmxvd3MnPgotICAgIDx0aXRsZT5Xb3JrZmxvd3M8L3RpdGxlPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBzb21lIG92ZXJ2aWV3IG9uIHdvcmtmbG93cyB1c2luZyBHaXQuCi0gICAgICAgIEluIHBhcnRpY3VsYXIsIHRoZSBpbmZvcm1hdGlvbiBjb3ZlcnMgYmFzaWMgcHJhY3RpY2VzIHRoYXQgZGVzY3JpYmUgcm9sZXMgYW5kIGFjdGlvbnMgaW4gYQotICAgICAgICBjb2xsYWJvcmF0aXZlIGRldmVsb3BtZW50IGVudmlyb25tZW50LgotICAgICAgICBBZ2FpbiwgaWYgeW91IGFyZSBmYW1pbGlhciB3aXRoIHRoaXMgdHlwZSBvZiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCwgeW91IG1pZ2h0IHdhbnQgdG8ganVzdAotICAgICAgICBza2lwIHRoaXMgc2VjdGlvbi4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgZmlsZXMgYXJlIG1haW50YWluZWQgdXNpbmcgR2l0IGluIGEgIm1hc3RlciIgYnJhbmNoIHdob3NlIEdpdCBoaXN0b3J5Ci0gICAgICAgIHRyYWNrcyBldmVyeSBjaGFuZ2UgYW5kIHdob3NlIHN0cnVjdHVyZSBwcm92aWRlcyBicmFuY2hlcyBmb3IgYWxsIGRpdmVyZ2luZyBmdW5jdGlvbmFsaXR5LgotICAgICAgICBBbHRob3VnaCB0aGVyZSBpcyBubyBuZWVkIHRvIHVzZSBHaXQsIG1hbnkgb3BlbiBzb3VyY2UgcHJvamVjdHMgZG8gc28uCi0gICAgICAgIEZvciB0aGUgWW9jdG8gUHJvamVjdCwgYSBrZXkgaW5kaXZpZHVhbCBjYWxsZWQgdGhlICJtYWludGFpbmVyIiBpcyByZXNwb25zaWJsZSBmb3IgdGhlICJtYXN0ZXIiCi0gICAgICAgIGJyYW5jaCBvZiBhIGdpdmVuIEdpdCByZXBvc2l0b3J5LgotICAgICAgICBUaGUgIm1hc3RlciIgYnJhbmNoIGlzIHRoZSDigJx1cHN0cmVhbeKAnSByZXBvc2l0b3J5IHdoZXJlIHRoZSBmaW5hbCBidWlsZHMgb2YgdGhlIHByb2plY3Qgb2NjdXIuCi0gICAgICAgIFRoZSBtYWludGFpbmVyIGlzIHJlc3BvbnNpYmxlIGZvciBhY2NlcHRpbmcgY2hhbmdlcyBmcm9tIG90aGVyIGRldmVsb3BlcnMgYW5kIGZvcgotICAgICAgICBvcmdhbml6aW5nIHRoZSB1bmRlcmx5aW5nIGJyYW5jaCBzdHJ1Y3R1cmUgdG8gcmVmbGVjdCByZWxlYXNlIHN0cmF0ZWdpZXMgYW5kIHNvIGZvcnRoLgotICAgICAgICA8bm90ZT5Gb3IgaW5mb3JtYXRpb24gb24gZmluZGluZyBvdXQgd2hvIGlzIHJlc3BvbnNpYmxlIGZvciAobWFpbnRhaW5zKQotICAgICAgICAgICAgYSBwYXJ0aWN1bGFyIGFyZWEgb2YgY29kZSwgc2VlIHRoZQotICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2hvdy10by1zdWJtaXQtYS1jaGFuZ2UnPkhvdyB0byBTdWJtaXQgYSBDaGFuZ2U8L2xpbms+IgotICAgICAgICAgICAgc2VjdGlvbi4KLSAgICAgICAgPC9ub3RlPgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgICBUaGUgcHJvamVjdCBhbHNvIGhhcyBhbiB1cHN0cmVhbSBjb250cmlidXRpb24gR2l0IHJlcG9zaXRvcnkgbmFtZWQKLSAgICAgICAgPGZpbGVuYW1lPnBva3ktY29udHJpYjwvZmlsZW5hbWU+LgotICAgICAgICBZb3UgY2FuIHNlZSBhbGwgdGhlIGJyYW5jaGVzIGluIHRoaXMgcmVwb3NpdG9yeSB1c2luZyB0aGUgd2ViIGludGVyZmFjZQotICAgICAgICBvZiB0aGUKLSAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7Jz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4gb3JnYW5pemVkCi0gICAgICAgIHdpdGhpbiB0aGUgIlBva3kgU3VwcG9ydCIgYXJlYS4KLSAgICAgICAgVGhlc2UgYnJhbmNoZXMgdGVtcG9yYXJpbHkgaG9sZCBjaGFuZ2VzIHRvIHRoZSBwcm9qZWN0IHRoYXQgaGF2ZSBiZWVuCi0gICAgICAgIHN1Ym1pdHRlZCBvciBjb21taXR0ZWQgYnkgdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgdGVhbSBhbmQgYnkKLSAgICAgICAgY29tbXVuaXR5IG1lbWJlcnMgd2hvIGNvbnRyaWJ1dGUgdG8gdGhlIHByb2plY3QuCi0gICAgICAgIFRoZSBtYWludGFpbmVyIGRldGVybWluZXMgaWYgdGhlIGNoYW5nZXMgYXJlIHF1YWxpZmllZCB0byBiZSBtb3ZlZAotICAgICAgICBmcm9tIHRoZSAiY29udHJpYiIgYnJhbmNoZXMgaW50byB0aGUgIm1hc3RlciIgYnJhbmNoIG9mIHRoZSBHaXQKLSAgICAgICAgcmVwb3NpdG9yeS4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgRGV2ZWxvcGVycyAoaW5jbHVkaW5nIGNvbnRyaWJ1dGluZyBjb21tdW5pdHkgbWVtYmVycykgY3JlYXRlIGFuZCBtYWludGFpbiBjbG9uZWQgcmVwb3NpdG9yaWVzCi0gICAgICAgIG9mIHRoZSB1cHN0cmVhbSAibWFzdGVyIiBicmFuY2guCi0gICAgICAgIFRoZXNlIHJlcG9zaXRvcmllcyBhcmUgbG9jYWwgdG8gdGhlaXIgZGV2ZWxvcG1lbnQgcGxhdGZvcm1zIGFuZCBhcmUgdXNlZCB0byBkZXZlbG9wIGNoYW5nZXMuCi0gICAgICAgIFdoZW4gYSBkZXZlbG9wZXIgaXMgc2F0aXNmaWVkIHdpdGggYSBwYXJ0aWN1bGFyIGZlYXR1cmUgb3IgY2hhbmdlLCB0aGV5ICJwdXNoIiB0aGUgY2hhbmdlcwotICAgICAgICB0byB0aGUgYXBwcm9wcmlhdGUgImNvbnRyaWIiIHJlcG9zaXRvcnkuCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIERldmVsb3BlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBrZWVwaW5nIHRoZWlyIGxvY2FsIHJlcG9zaXRvcnkgdXAtdG8tZGF0ZSB3aXRoICJtYXN0ZXIiLgotICAgICAgICBUaGV5IGFyZSBhbHNvIHJlc3BvbnNpYmxlIGZvciBzdHJhaWdodGVuaW5nIG91dCBhbnkgY29uZmxpY3RzIHRoYXQgbWlnaHQgYXJpc2Ugd2l0aGluIGZpbGVzCi0gICAgICAgIHRoYXQgYXJlIGJlaW5nIHdvcmtlZCBvbiBzaW11bHRhbmVvdXNseSBieSBtb3JlIHRoYW4gb25lIHBlcnNvbi4KLSAgICAgICAgQWxsIHRoaXMgd29yayBpcyBkb25lIGxvY2FsbHkgb24gdGhlIGRldmVsb3BlcuKAmXMgbWFjaGluZXMgYmVmb3JlIGFueXRoaW5nIGlzIHB1c2hlZCB0byBhCi0gICAgICAgICJjb250cmliIiBhcmVhIGFuZCBleGFtaW5lZCBhdCB0aGUgbWFpbnRhaW5lcuKAmXMgbGV2ZWwuCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIEEgc29tZXdoYXQgZm9ybWFsIG1ldGhvZCBleGlzdHMgYnkgd2hpY2ggZGV2ZWxvcGVycyBjb21taXQgY2hhbmdlcyBhbmQgcHVzaCB0aGVtIGludG8gdGhlCi0gICAgICAgICJjb250cmliIiBhcmVhIGFuZCBzdWJzZXF1ZW50bHkgcmVxdWVzdCB0aGF0IHRoZSBtYWludGFpbmVyIGluY2x1ZGUgdGhlbSBpbnRvICJtYXN0ZXIiCi0gICAgICAgIFRoaXMgcHJvY2VzcyBpcyBjYWxsZWQg4oCcc3VibWl0dGluZyBhIHBhdGNo4oCdIG9yICJzdWJtaXR0aW5nIGEgY2hhbmdlLiIKLSAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHN1Ym1pdHRpbmcgcGF0Y2hlcyBhbmQgY2hhbmdlcywgc2VlIHRoZQotICAgICAgICAiPGxpbmsgbGlua2VuZD0naG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhIENoYW5nZTwvbGluaz4iIHNlY3Rpb24uCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIFRvIHN1bW1hcml6ZSB0aGUgZW52aXJvbm1lbnQ6ICBhIHNpbmdsZSBwb2ludCBvZiBlbnRyeSBleGlzdHMgZm9yCi0gICAgICAgIGNoYW5nZXMgaW50byB0aGUgcHJvamVjdOKAmXMgIm1hc3RlciIgYnJhbmNoIG9mIHRoZSBHaXQgcmVwb3NpdG9yeSwKLSAgICAgICAgd2hpY2ggaXMgY29udHJvbGxlZCBieSB0aGUgcHJvamVjdOKAmXMgbWFpbnRhaW5lci4KLSAgICAgICAgQW5kLCBhIHNldCBvZiBkZXZlbG9wZXJzIGV4aXN0IHdobyBpbmRlcGVuZGVudGx5IGRldmVsb3AsIHRlc3QsIGFuZAotICAgICAgICBzdWJtaXQgY2hhbmdlcyB0byAiY29udHJpYiIgYXJlYXMgZm9yIHRoZSBtYWludGFpbmVyIHRvIGV4YW1pbmUuCi0gICAgICAgIFRoZSBtYWludGFpbmVyIHRoZW4gY2hvb3NlcyB3aGljaCBjaGFuZ2VzIGFyZSBnb2luZyB0byBiZWNvbWUgYQotICAgICAgICBwZXJtYW5lbnQgcGFydCBvZiB0aGUgcHJvamVjdC4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2dpdC13b3JrZmxvdy5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSIzaW4iIGFsaWduPSJsZWZ0IiBzY2FsZWZpdD0iMSIgLz4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgV2hpbGUgZWFjaCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBpcyB1bmlxdWUsIHRoZXJlIGFyZSBzb21lIGJlc3QgcHJhY3RpY2VzIG9yIG1ldGhvZHMKLSAgICAgICAgdGhhdCBoZWxwIGRldmVsb3BtZW50IHJ1biBzbW9vdGhseS4KLSAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IGRlc2NyaWJlcyBzb21lIG9mIHRoZXNlIHByYWN0aWNlcy4KLSAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgR2l0IHdvcmtmbG93cywgc2VlIHRoZSB3b3JrZmxvdyB0b3BpY3MgaW4gdGhlCi0gICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9ib29rLmdpdC1zY20uY29tJz5HaXQgQ29tbXVuaXR5IEJvb2s8L3VsaW5rPi4KLSAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFrZSBTbWFsbCBDaGFuZ2VzOjwvZW1waGFzaXM+IEl0IGlzIGJlc3QgdG8ga2VlcCB0aGUgY2hhbmdlcyB5b3UgY29tbWl0Ci0gICAgICAgICAgICAgICAgc21hbGwgYXMgY29tcGFyZWQgdG8gYnVuZGxpbmcgbWFueSBkaXNwYXJhdGUgY2hhbmdlcyBpbnRvIGEgc2luZ2xlIGNvbW1pdC4KLSAgICAgICAgICAgICAgICBUaGlzIHByYWN0aWNlIG5vdCBvbmx5IGtlZXBzIHRoaW5ncyBtYW5hZ2VhYmxlIGJ1dCBhbHNvIGFsbG93cyB0aGUgbWFpbnRhaW5lcgotICAgICAgICAgICAgICAgIHRvIG1vcmUgZWFzaWx5IGluY2x1ZGUgb3IgcmVmdXNlIGNoYW5nZXMuPC9wYXJhPgotICAgICAgICAgICAgICAgIDxwYXJhPkl0IGlzIGFsc28gZ29vZCBwcmFjdGljZSB0byBsZWF2ZSB0aGUgcmVwb3NpdG9yeSBpbiBhIHN0YXRlIHRoYXQgYWxsb3dzIHlvdSB0bwotICAgICAgICAgICAgICAgIHN0aWxsIHN1Y2Nlc3NmdWxseSBidWlsZCB5b3VyIHByb2plY3QuICBJbiBvdGhlciB3b3JkcywgZG8gbm90IGNvbW1pdCBoYWxmIG9mIGEgZmVhdHVyZSwKLSAgICAgICAgICAgICAgICB0aGVuIGFkZCB0aGUgb3RoZXIgaGFsZiBhcyBhIHNlcGFyYXRlLCBsYXRlciBjb21taXQuCi0gICAgICAgICAgICAgICAgRWFjaCBjb21taXQgc2hvdWxkIHRha2UgeW91IGZyb20gb25lIGJ1aWxkYWJsZSBwcm9qZWN0IHN0YXRlIHRvIGFub3RoZXIKLSAgICAgICAgICAgICAgICBidWlsZGFibGUgc3RhdGUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVzZSBCcmFuY2hlcyBMaWJlcmFsbHk6PC9lbXBoYXNpcz4gSXQgaXMgdmVyeSBlYXN5IHRvIGNyZWF0ZSwgdXNlLCBhbmQKLSAgICAgICAgICAgICAgICBkZWxldGUgbG9jYWwgYnJhbmNoZXMgaW4geW91ciB3b3JraW5nIEdpdCByZXBvc2l0b3J5LgotICAgICAgICAgICAgICAgIFlvdSBjYW4gbmFtZSB0aGVzZSBicmFuY2hlcyBhbnl0aGluZyB5b3UgbGlrZS4KLSAgICAgICAgICAgICAgICBJdCBpcyBoZWxwZnVsIHRvIGdpdmUgdGhlbSBuYW1lcyBhc3NvY2lhdGVkIHdpdGggdGhlIHBhcnRpY3VsYXIgZmVhdHVyZSBvciBjaGFuZ2UKLSAgICAgICAgICAgICAgICBvbiB3aGljaCB5b3UgYXJlIHdvcmtpbmcuCi0gICAgICAgICAgICAgICAgT25jZSB5b3UgYXJlIGRvbmUgd2l0aCBhIGZlYXR1cmUgb3IgY2hhbmdlIGFuZCBoYXZlIG1lcmdlZCBpdAotICAgICAgICAgICAgICAgIGludG8geW91ciBsb2NhbCBtYXN0ZXIgYnJhbmNoLCBzaW1wbHkgZGlzY2FyZCB0aGUgdGVtcG9yYXJ5Ci0gICAgICAgICAgICAgICAgYnJhbmNoLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NZXJnZSBDaGFuZ2VzOjwvZW1waGFzaXM+IFRoZSA8ZmlsZW5hbWU+Z2l0IG1lcmdlPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBjb21tYW5kIGFsbG93cyB5b3UgdG8gdGFrZSB0aGUKLSAgICAgICAgICAgICAgICBjaGFuZ2VzIGZyb20gb25lIGJyYW5jaCBhbmQgZm9sZCB0aGVtIGludG8gYW5vdGhlciBicmFuY2guCi0gICAgICAgICAgICAgICAgVGhpcyBwcm9jZXNzIGlzIGVzcGVjaWFsbHkgaGVscGZ1bCB3aGVuIG1vcmUgdGhhbiBhIHNpbmdsZSBkZXZlbG9wZXIgbWlnaHQgYmUgd29ya2luZwotICAgICAgICAgICAgICAgIG9uIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgc2FtZSBmZWF0dXJlLgotICAgICAgICAgICAgICAgIE1lcmdpbmcgY2hhbmdlcyBhbHNvIGF1dG9tYXRpY2FsbHkgaWRlbnRpZmllcyBhbnkgY29sbGlzaW9ucyBvciAiY29uZmxpY3RzIgotICAgICAgICAgICAgICAgIHRoYXQgbWlnaHQgaGFwcGVuIGFzIGEgcmVzdWx0IG9mIHRoZSBzYW1lIGxpbmVzIG9mIGNvZGUgYmVpbmcgYWx0ZXJlZCBieSB0d28gZGlmZmVyZW50Ci0gICAgICAgICAgICAgICAgZGV2ZWxvcGVycy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFuYWdlIEJyYW5jaGVzOjwvZW1waGFzaXM+IEJlY2F1c2UgYnJhbmNoZXMgYXJlIGVhc3kgdG8gdXNlLCB5b3Ugc2hvdWxkCi0gICAgICAgICAgICAgICAgdXNlIGEgc3lzdGVtIHdoZXJlIGJyYW5jaGVzIGluZGljYXRlIHZhcnlpbmcgbGV2ZWxzIG9mIGNvZGUgcmVhZGluZXNzLgotICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgY2FuIGhhdmUgYSAid29yayIgYnJhbmNoIHRvIGRldmVsb3AgaW4sIGEgInRlc3QiIGJyYW5jaCB3aGVyZSB0aGUgY29kZSBvcgotICAgICAgICAgICAgICAgIGNoYW5nZSBpcyB0ZXN0ZWQsIGEgInN0YWdlIiBicmFuY2ggd2hlcmUgY2hhbmdlcyBhcmUgcmVhZHkgdG8gYmUgY29tbWl0dGVkLCBhbmQgc28gZm9ydGguCi0gICAgICAgICAgICAgICAgQXMgeW91ciBwcm9qZWN0IGRldmVsb3BzLCB5b3UgY2FuIG1lcmdlIGNvZGUgYWNyb3NzIHRoZSBicmFuY2hlcyB0byByZWZsZWN0IGV2ZXItaW5jcmVhc2luZwotICAgICAgICAgICAgICAgIHN0YWJsZSBzdGF0ZXMgb2YgdGhlIGRldmVsb3BtZW50LjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Vc2UgUHVzaCBhbmQgUHVsbDo8L2VtcGhhc2lzPiBUaGUgcHVzaC1wdWxsIHdvcmtmbG93IGlzIGJhc2VkIG9uIHRoZQotICAgICAgICAgICAgICAgIGNvbmNlcHQgb2YgZGV2ZWxvcGVycyAicHVzaGluZyIgbG9jYWwgY29tbWl0cyB0byBhIHJlbW90ZSByZXBvc2l0b3J5LCB3aGljaCBpcwotICAgICAgICAgICAgICAgIHVzdWFsbHkgYSBjb250cmlidXRpb24gcmVwb3NpdG9yeS4KLSAgICAgICAgICAgICAgICBUaGlzIHdvcmtmbG93IGlzIGFsc28gYmFzZWQgb24gZGV2ZWxvcGVycyAicHVsbGluZyIga25vd24gc3RhdGVzIG9mIHRoZSBwcm9qZWN0IGRvd24gaW50byB0aGVpcgotICAgICAgICAgICAgICAgIGxvY2FsIGRldmVsb3BtZW50IHJlcG9zaXRvcmllcy4KLSAgICAgICAgICAgICAgICBUaGUgd29ya2Zsb3cgZWFzaWx5IGFsbG93cyB5b3UgdG8gcHVsbCBjaGFuZ2VzIHN1Ym1pdHRlZCBieSBvdGhlciBkZXZlbG9wZXJzIGZyb20gdGhlCi0gICAgICAgICAgICAgICAgdXBzdHJlYW0gcmVwb3NpdG9yeSBpbnRvIHlvdXIgd29yayBhcmVhIGVuc3VyaW5nIHRoYXQgeW91IGhhdmUgdGhlIG1vc3QgcmVjZW50IHNvZnR3YXJlCi0gICAgICAgICAgICAgICAgb24gd2hpY2ggdG8gZGV2ZWxvcC4KLSAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBoYXMgdHdvIHNjcmlwdHMgbmFtZWQgPGZpbGVuYW1lPmNyZWF0ZS1wdWxsLXJlcXVlc3Q8L2ZpbGVuYW1lPiBhbmQKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2VuZC1wdWxsLXJlcXVlc3Q8L2ZpbGVuYW1lPiB0aGF0IHNoaXAgd2l0aCB0aGUgcmVsZWFzZSB0byBmYWNpbGl0YXRlIHRoaXMKLSAgICAgICAgICAgICAgICB3b3JrZmxvdy4KLSAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlc2Ugc2NyaXB0cyBpbiB0aGUgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIGZvbGRlciBvZiB0aGUKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi4KLSAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGVzZSBzY3JpcHRzLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3B1c2hpbmctYS1jaGFuZ2UtdXBzdHJlYW0nPlVzaW5nIFNjcmlwdHMgdG8gUHVzaCBhIENoYW5nZSBVcHN0cmVhbSBhbmQgUmVxdWVzdCBhIFB1bGw8L2xpbms+IiBzZWN0aW9uLgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5EZXZlbG9wbWVudCBFbnZpcm9ubWVudCBTdW1tYXJ5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQXNpZGUgZnJvbSB0aGUgcHJldmlvdXMgc3RlcHMsIHNvbWUgYmVzdCBwcmFjdGljZXMgZXhpc3QKKyAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjZ2l0Jz5HaXQ8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgYXMgdGhlIHNvdXJjZSBjb250cm9sIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBNYWludGFpbiB5b3VyIE1ldGFkYXRhIGluIGxheWVycyB0aGF0IG1ha2Ugc2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB5b3VyIHNpdHVhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycyc+VW5kZXJzdGFuZGluZworICAgICAgICAgICAgICAgICAgICAgICAgYW5kIENyZWF0aW5nIExheWVyczwvbGluaz4iIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGxheWVycy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBTZXBhcmF0ZSB0aGUgcHJvamVjdCdzIE1ldGFkYXRhIGFuZCBjb2RlIGJ5IHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZSBHaXQgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3lvY3RvLXByb2plY3QtcmVwb3NpdG9yaWVzJz5Zb2N0byBQcm9qZWN0IFNvdXJjZSBSZXBvc2l0b3JpZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uIG9uIHRoZXNlIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd3b3JraW5nLXdpdGgteW9jdG8tcHJvamVjdC1zb3VyY2UtZmlsZXMnPldvcmtpbmcgV2l0aCBZb2N0byBQcm9qZWN0IFNvdXJjZSBGaWxlczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc2V0IHVwIGxvY2FsIEdpdAorICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yaWVzIGZvciByZWxhdGVkIHVwc3RyZWFtIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHVwIHRoZSBkaXJlY3RvcnkgZm9yIHRoZSBzaGFyZWQgc3RhdGUgY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgICAgICg8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1NUQVRFX0RJUic+PGZpbGVuYW1lPlNTVEFURV9ESVI8L2ZpbGVuYW1lPjwvdWxpbms+KQorICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgaXQgbWFrZXMgc2Vuc2UuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc2V0IHVwIHRoZSBzc3RhdGUgY2FjaGUgb24gYSBzeXN0ZW0gdXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgYnkgZGV2ZWxvcGVycyBpbiB0aGUgc2FtZSBvcmdhbml6YXRpb24gYW5kIHNoYXJlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSBzb3VyY2UgZGlyZWN0b3JpZXMgb24gdGhlaXIgbWFjaGluZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHVwIGFuIEF1dG9idWlsZGVyIGFuZCBoYXZlIGl0IHBvcHVsYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgc3N0YXRlIGNhY2hlIGFuZCBzb3VyY2UgZGlyZWN0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgY29tbXVuaXR5IGVuY291cmFnZXMgeW91CisgICAgICAgICAgICAgICAgICAgICAgICB0byBzZW5kIHBhdGNoZXMgdG8gdGhlIHByb2plY3QgdG8gZml4IGJ1Z3Mgb3IgYWRkIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIHN1Ym1pdCBwYXRjaGVzLCBmb2xsb3cgdGhlIHByb2plY3QgY29tbWl0CisgICAgICAgICAgICAgICAgICAgICAgICBndWlkZWxpbmVzIGZvciB3cml0aW5nIGdvb2QgY29tbWl0IG1lc3NhZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0naG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+U3VibWl0dGluZyBhIENoYW5nZSB0byB0aGUgWW9jdG8gUHJvamVjdDwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQgY2hhbmdlcyB0byB0aGUgY29yZSBzb29uZXIgdGhhbiBsYXRlcgorICAgICAgICAgICAgICAgICAgICAgICAgYXMgb3RoZXJzIGFyZSBsaWtlbHkgdG8gcnVuIGludG8gdGhlIHNhbWUgaXNzdWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHNvbWUgZ3VpZGFuY2Ugb24gbWFpbGluZyBsaXN0cyB0byB1c2UsIHNlZSB0aGUgbGlzdCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdob3ctdG8tc3VibWl0LWEtY2hhbmdlJz5TdWJtaXR0aW5nIGEgQ2hhbmdlIHRvIHRoZSBZb2N0byBQcm9qZWN0PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgYXZhaWxhYmxlIG1haWxpbmcgbGlzdHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZXNvdXJjZXMtbWFpbGluZ2xpc3QnPk1haWxpbmcgTGlzdHM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QYXRjaCBXb3JrZmxvdzo8L2VtcGhhc2lzPiBUaGlzIHdvcmtmbG93IGFsbG93cyB5b3UgdG8gbm90aWZ5IHRoZQotICAgICAgICAgICAgICAgIG1haW50YWluZXIgdGhyb3VnaCBhbiBlbWFpbCB0aGF0IHlvdSBoYXZlIGEgY2hhbmdlIChvciBwYXRjaCkgeW91IHdvdWxkIGxpa2UgY29uc2lkZXJlZAotICAgICAgICAgICAgICAgIGZvciB0aGUgIm1hc3RlciIgYnJhbmNoIG9mIHRoZSBHaXQgcmVwb3NpdG9yeS4KLSAgICAgICAgICAgICAgICBUbyBzZW5kIHRoaXMgdHlwZSBvZiBjaGFuZ2UsIHlvdSBmb3JtYXQgdGhlIHBhdGNoIGFuZCB0aGVuIHNlbmQgdGhlIGVtYWlsIHVzaW5nIHRoZSBHaXQgY29tbWFuZHMKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IGZvcm1hdC1wYXRjaDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+Z2l0IHNlbmQtZW1haWw8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGVzZSBzY3JpcHRzLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2hvdy10by1zdWJtaXQtYS1jaGFuZ2UnPkhvdyB0byBTdWJtaXQgYSBDaGFuZ2U8L2xpbms+IgotICAgICAgICAgICAgICAgIHNlY3Rpb24uCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgIDwvcGFyYT4KLTwvc2VjdGlvbj4KLQotPHNlY3Rpb24gaWQ9J3RyYWNraW5nLWJ1Z3MnPgotICAgIDx0aXRsZT5UcmFja2luZyBCdWdzPC90aXRsZT4KLQotICAgIDxwYXJhPgotICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB1c2VzIGl0cyBvd24gaW1wbGVtZW50YXRpb24gb2YKLSAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5idWd6aWxsYS5vcmcvYWJvdXQvJz5CdWd6aWxsYTwvdWxpbms+IHRvIHRyYWNrIGJ1Z3MuCi0gICAgICAgIEltcGxlbWVudGF0aW9ucyBvZiBCdWd6aWxsYSB3b3JrIHdlbGwgZm9yIGdyb3VwIGRldmVsb3BtZW50IGJlY2F1c2UgdGhleSB0cmFjayBidWdzIGFuZCBjb2RlCi0gICAgICAgIGNoYW5nZXMsIGNhbiBiZSB1c2VkIHRvIGNvbW11bmljYXRlIGNoYW5nZXMgYW5kIHByb2JsZW1zIHdpdGggZGV2ZWxvcGVycywgY2FuIGJlIHVzZWQgdG8KLSAgICAgICAgc3VibWl0IGFuZCByZXZpZXcgcGF0Y2hlcywgYW5kIGNhbiBiZSB1c2VkIHRvIG1hbmFnZSBxdWFsaXR5IGFzc3VyYW5jZS4KLSAgICAgICAgVGhlIGhvbWUgcGFnZSBmb3IgdGhlIFlvY3RvIFByb2plY3QgaW1wbGVtZW50YXRpb24gb2YgQnVnemlsbGEgaXMKLSAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0JVR1pJTExBX1VSTDsnPiZZT0NUT19CVUdaSUxMQV9VUkw7PC91bGluaz4uCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIFNvbWV0aW1lcyBpdCBpcyBoZWxwZnVsIHRvIHN1Ym1pdCwgaW52ZXN0aWdhdGUsIG9yIHRyYWNrIGEgYnVnIGFnYWluc3QgdGhlIFlvY3RvIFByb2plY3QgaXRzZWxmCi0gICAgICAgIHN1Y2ggYXMgd2hlbiBkaXNjb3ZlcmluZyBhbiBpc3N1ZSB3aXRoIHNvbWUgY29tcG9uZW50IG9mIHRoZSBidWlsZCBzeXN0ZW0gdGhhdCBhY3RzIGNvbnRyYXJ5Ci0gICAgICAgIHRvIHRoZSBkb2N1bWVudGF0aW9uIG9yIHlvdXIgZXhwZWN0YXRpb25zLgotICAgICAgICBGb2xsb3dpbmcgaXMgdGhlIGdlbmVyYWwgcHJvY2VkdXJlIGZvciBzdWJtaXR0aW5nIGEgbmV3IGJ1ZyB1c2luZyB0aGUgWW9jdG8gUHJvamVjdAotICAgICAgICBCdWd6aWxsYS4KLSAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gZGVmZWN0IG1hbmFnZW1lbnQsIGJ1ZyB0cmFja2luZywgYW5kIGZlYXR1cmUgcmVxdWVzdAotICAgICAgICBwcm9jZXNzZXMgYWxsIGFjY29tcGxpc2hlZCB0aHJvdWdoIHRoZSBZb2N0byBQcm9qZWN0IEJ1Z3ppbGxhIG9uIHRoZQotICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvQnVnemlsbGFfQ29uZmlndXJhdGlvbl9hbmRfQnVnX1RyYWNraW5nJz53aWtpIHBhZ2U8L3VsaW5rPi4KLSAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFsd2F5cyB1c2UgdGhlIFlvY3RvIFByb2plY3QgaW1wbGVtZW50YXRpb24gb2YgQnVnemlsbGEgdG8gc3VibWl0Ci0gICAgICAgICAgICAgICAgYSBidWcuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+V2hlbiBzdWJtaXR0aW5nIGEgbmV3IGJ1ZywgYmUgc3VyZSB0byBjaG9vc2UgdGhlIGFwcHJvcHJpYXRlCi0gICAgICAgICAgICAgICAgQ2xhc3NpZmljYXRpb24sIFByb2R1Y3QsIGFuZCBDb21wb25lbnQgZm9yIHdoaWNoIHRoZSBpc3N1ZSB3YXMgZm91bmQuCi0gICAgICAgICAgICAgICAgRGVmZWN0cyBmb3IgdGhlIFlvY3RvIFByb2plY3QgZmFsbCBpbnRvIG9uZSBvZiBzZXZlbiBjbGFzc2lmaWNhdGlvbnM6Ci0gICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBDb21wb25lbnRzLCBJbmZyYXN0cnVjdHVyZSwgQnVpbGQgU3lzdGVtICZhbXA7IE1ldGFkYXRhLAotICAgICAgICAgICAgICAgIERvY3VtZW50YXRpb24sIFFBL1Rlc3RpbmcsIFJ1bnRpbWUgYW5kIEhhcmR3YXJlLgotICAgICAgICAgICAgICAgIEVhY2ggb2YgdGhlc2UgQ2xhc3NpZmljYXRpb25zIGJyZWFrIGRvd24gaW50byBtdWx0aXBsZSBQcm9kdWN0cyBhbmQsIGluIHNvbWUKLSAgICAgICAgICAgICAgICBjYXNlcywgbXVsdGlwbGUgQ29tcG9uZW50cy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Vc2UgdGhlIGJ1ZyBmb3JtIHRvIGNob29zZSB0aGUgY29ycmVjdCBIYXJkd2FyZSBhbmQgQXJjaGl0ZWN0dXJlCi0gICAgICAgICAgICAgICAgZm9yIHdoaWNoIHRoZSBidWcgYXBwbGllcy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbmRpY2F0ZSB0aGUgWW9jdG8gUHJvamVjdCB2ZXJzaW9uIHlvdSB3ZXJlIHVzaW5nIHdoZW4gdGhlIGlzc3VlCi0gICAgICAgICAgICAgICAgb2NjdXJyZWQuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QmUgc3VyZSB0byBpbmRpY2F0ZSB0aGUgU2V2ZXJpdHkgb2YgdGhlIGJ1Zy4KLSAgICAgICAgICAgICAgICBTZXZlcml0eSBjb21tdW5pY2F0ZXMgaG93IHRoZSBidWcgaW1wYWN0ZWQgeW91ciB3b3JrLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgIkRvY3VtZW50YXRpb24gY2hhbmdlIiBpdGVtCi0gICAgICAgICAgICAgICAgZm9yIHRoZSBidWcuCi0gICAgICAgICAgICAgICAgRml4aW5nIGEgYnVnIG1heSBvciBtYXkgbm90IGFmZmVjdCB0aGUgWW9jdG8gUHJvamVjdAotICAgICAgICAgICAgICAgIGRvY3VtZW50YXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UHJvdmlkZSBhIGJyaWVmIHN1bW1hcnkgb2YgdGhlIGlzc3VlLgotICAgICAgICAgICAgICAgIFRyeSB0byBsaW1pdCB5b3VyIHN1bW1hcnkgdG8ganVzdCBhIGxpbmUgb3IgdHdvIGFuZCBiZSBzdXJlIHRvIGNhcHR1cmUgdGhlCi0gICAgICAgICAgICAgICAgZXNzZW5jZSBvZiB0aGUgaXNzdWUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UHJvdmlkZSBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBpc3N1ZS4KLSAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHByb3ZpZGUgYXMgbXVjaCBkZXRhaWwgYXMgeW91IGNhbiBhYm91dCB0aGUgY29udGV4dCwgYmVoYXZpb3IsIG91dHB1dCwKLSAgICAgICAgICAgICAgICBhbmQgc28gZm9ydGggdGhhdCBzdXJyb3VuZHMgdGhlIGlzc3VlLgotICAgICAgICAgICAgICAgIFlvdSBjYW4gZXZlbiBhdHRhY2ggc3VwcG9ydGluZyBmaWxlcyBmb3Igb3V0cHV0IGZyb20gbG9ncyBieQotICAgICAgICAgICAgICAgIHVzaW5nIHRoZSAiQWRkIGFuIGF0dGFjaG1lbnQiIGJ1dHRvbi48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CZSBzdXJlIHRvIGNvcHkgdGhlIGFwcHJvcHJpYXRlIHBlb3BsZSBpbiB0aGUKLSAgICAgICAgICAgICAgICAiQ0MgTGlzdCIgZm9yIHRoZSBidWcuCi0gICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0naG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhIENoYW5nZTwvbGluaz4iCi0gICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgZmluZGluZyBvdXQgd2hvIGlzIHJlc3BvbnNpYmxlCi0gICAgICAgICAgICAgICAgZm9yIGNvZGUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U3VibWl0IHRoZSBidWcgYnkgY2xpY2tpbmcgdGhlICJTdWJtaXQgQnVnIiBidXR0b24uPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CiAgICAgPC9wYXJhPgogPC9zZWN0aW9uPgogCis8c2VjdGlvbiBpZD0nc3VibWl0dGluZy1hLWRlZmVjdC1hZ2FpbnN0LXRoZS15b2N0by1wcm9qZWN0Jz4KKyAgICA8dGl0bGU+U3VibWl0dGluZyBhIERlZmVjdCBBZ2FpbnN0IHRoZSBZb2N0byBQcm9qZWN0PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBVc2UgdGhlIFlvY3RvIFByb2plY3QgaW1wbGVtZW50YXRpb24gb2YKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5idWd6aWxsYS5vcmcvYWJvdXQvJz5CdWd6aWxsYTwvdWxpbms+CisgICAgICAgIHRvIHN1Ym1pdCBhIGRlZmVjdCAoYnVnKSBhZ2FpbnN0IHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB0aGlzIGltcGxlbWVudGF0aW9uIG9mIEJ1Z3ppbGxhIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Jlc291cmNlcy1idWd0cmFja2VyJz5Zb2N0byBQcm9qZWN0IEJ1Z3ppbGxhPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgRm9yIG1vcmUgZGV0YWlsIG9uIGFueSBvZiB0aGUgZm9sbG93aW5nIHN0ZXBzLCBzZWUgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1dJS0lfVVJMOy93aWtpL0J1Z3ppbGxhX0NvbmZpZ3VyYXRpb25fYW5kX0J1Z19UcmFja2luZyc+QnVnemlsbGEgd2lraSBwYWdlPC91bGluaz4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFVzZSB0aGUgZm9sbG93aW5nIGdlbmVyYWwgc3RlcHMgdG8gc3VibWl0IGEgYnVnIgorCisgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBPcGVuIHRoZSBZb2N0byBQcm9qZWN0IGltcGxlbWVudGF0aW9uIG9mCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0JVR1pJTExBX1VSTDsnPkJ1Z3ppbGxhPC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgQ2xpY2sgIkZpbGUgYSBCdWciIHRvIGVudGVyIGEgbmV3IGJ1Zy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBDaG9vc2UgdGhlIGFwcHJvcHJpYXRlICJDbGFzc2lmaWNhdGlvbiIsICJQcm9kdWN0IiwgYW5kCisgICAgICAgICAgICAgICAgIkNvbXBvbmVudCIgZm9yIHdoaWNoIHRoZSBidWcgd2FzIGZvdW5kLgorICAgICAgICAgICAgICAgIEJ1Z3MgZm9yIHRoZSBZb2N0byBQcm9qZWN0IGZhbGwgaW50byBvbmUgb2Ygc2V2ZXJhbAorICAgICAgICAgICAgICAgIGNsYXNzaWZpY2F0aW9ucywgd2hpY2ggaW4gdHVybiBicmVhayBkb3duIGludG8gc2V2ZXJhbAorICAgICAgICAgICAgICAgIHByb2R1Y3RzIGFuZCBjb21wb25lbnRzLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBmb3IgYSBidWcgYWdhaW5zdCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+IGxheWVyLCB5b3Ugd291bGQgY2hvb3NlCisgICAgICAgICAgICAgICAgIkJ1aWxkIFN5c3RlbSwgTWV0YWRhdGEgJmFtcDsgUnVudGltZSIsICJCU1BzIiwgYW5kCisgICAgICAgICAgICAgICAgImJzcHMtbWV0YS1pbnRlbCIsIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBDaG9vc2UgdGhlICJWZXJzaW9uIiBvZiB0aGUgWW9jdG8gUHJvamVjdCBmb3Igd2hpY2ggeW91IGZvdW5kCisgICAgICAgICAgICAgICAgdGhlIGJ1ZyAoZS5nLiAmRElTVFJPOykuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgRGV0ZXJtaW5lIGFuZCBzZWxlY3QgdGhlICJTZXZlcml0eSIgb2YgdGhlIGJ1Zy4KKyAgICAgICAgICAgICAgICBUaGUgc2V2ZXJpdHkgaW5kaWNhdGVzIGhvdyB0aGUgYnVnIGltcGFjdGVkIHlvdXIgd29yay4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBDaG9vc2UgdGhlICJIYXJkd2FyZSIgdGhhdCB0aGUgYnVnIGltcGFjdHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgQ2hvb3NlIHRoZSAiQXJjaGl0ZWN0dXJlIiB0aGF0IHRoZSBidWcgaW1wYWN0cy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBDaG9vc2UgYSAiRG9jdW1lbnRhdGlvbiBjaGFuZ2UiIGl0ZW0gZm9yIHRoZSBidWcuCisgICAgICAgICAgICAgICAgRml4aW5nIGEgYnVnIG1pZ2h0IG9yIG1pZ2h0IG5vdCBhZmZlY3QgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uLgorICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdW5zdXJlIG9mIHRoZSBpbXBhY3QgdG8gdGhlIGRvY3VtZW50YXRpb24sIHNlbGVjdAorICAgICAgICAgICAgICAgICJEb24ndCBLbm93Ii4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBQcm92aWRlIGEgYnJpZWYgIlN1bW1hcnkiIG9mIHRoZSBidWcuCisgICAgICAgICAgICAgICAgVHJ5IHRvIGxpbWl0IHlvdXIgc3VtbWFyeSB0byBqdXN0IGEgbGluZSBvciB0d28gYW5kIGJlIHN1cmUKKyAgICAgICAgICAgICAgICB0byBjYXB0dXJlIHRoZSBlc3NlbmNlIG9mIHRoZSBidWcuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgUHJvdmlkZSBhIGRldGFpbGVkICJEZXNjcmlwdGlvbiIgb2YgdGhlIGJ1Zy4KKyAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHByb3ZpZGUgYXMgbXVjaCBkZXRhaWwgYXMgeW91IGNhbiBhYm91dCB0aGUgY29udGV4dCwKKyAgICAgICAgICAgICAgICBiZWhhdmlvciwgb3V0cHV0LCBhbmQgc28gZm9ydGggdGhhdCBzdXJyb3VuZHMgdGhlIGJ1Zy4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGV2ZW4gYXR0YWNoIHN1cHBvcnRpbmcgZmlsZXMgZm9yIG91dHB1dCBmcm9tIGxvZ3MgYnkKKyAgICAgICAgICAgICAgICB1c2luZyB0aGUgIkFkZCBhbiBhdHRhY2htZW50IiBidXR0b24uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgQ2xpY2sgdGhlICJTdWJtaXQgQnVnIiBidXR0b24gc3VibWl0IHRoZSBidWcuCisgICAgICAgICAgICAgICAgQSBuZXcgQnVnemlsbGEgbnVtYmVyIGlzIGFzc2lnbmVkIHRvIHRoZSBidWcgYW5kIHRoZSBkZWZlY3QKKyAgICAgICAgICAgICAgICBpcyBsb2dnZWQgaW4gdGhlIGJ1ZyB0cmFja2luZyBzeXN0ZW0uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIE9uY2UgeW91IGZpbGUgYSBidWcsIHRoZSBidWcgaXMgcHJvY2Vzc2VkIGJ5IHRoZSBZb2N0byBQcm9qZWN0IEJ1ZworICAgICAgICBUcmlhZ2UgVGVhbSBhbmQgZnVydGhlciBkZXRhaWxzIGNvbmNlcm5pbmcgdGhlIGJ1ZyBhcmUgYXNzaWduZWQKKyAgICAgICAgKGUuZy4gcHJpb3JpdHkgYW5kIG93bmVyKS4KKyAgICAgICAgWW91IGFyZSB0aGUgIlN1Ym1pdHRlciIgb2YgdGhlIGJ1ZyBhbmQgYW55IGZ1cnRoZXIgY2F0ZWdvcml6YXRpb24sCisgICAgICAgIHByb2dyZXNzLCBvciBjb21tZW50cyBvbiB0aGUgYnVnIHJlc3VsdCBpbiBCdWd6aWxsYSBzZW5kaW5nIHlvdSBhbgorICAgICAgICBhdXRvbWF0ZWQgZW1haWwgY29uY2VybmluZyB0aGUgcGFydGljdWxhciBjaGFuZ2Ugb3IgcHJvZ3Jlc3MgdG8gdGhlCisgICAgICAgIGJ1Zy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKIDxzZWN0aW9uIGlkPSdob3ctdG8tc3VibWl0LWEtY2hhbmdlJz4KLSAgICA8dGl0bGU+SG93IHRvIFN1Ym1pdCBhIENoYW5nZTwvdGl0bGU+CisgICAgPHRpdGxlPlN1Ym1pdHRpbmcgYSBDaGFuZ2UgdG8gdGhlIFlvY3RvIFByb2plY3Q8L3RpdGxlPgogCiAgICAgPHBhcmE+CiAgICAgICAgIENvbnRyaWJ1dGlvbnMgdG8gdGhlIFlvY3RvIFByb2plY3QgYW5kIE9wZW5FbWJlZGRlZCBhcmUgdmVyeSB3ZWxjb21lLgotICAgICAgICBCZWNhdXNlIHRoZSBzeXN0ZW0gaXMgZXh0cmVtZWx5IGNvbmZpZ3VyYWJsZSBhbmQgZmxleGlibGUsIHdlIHJlY29nbml6ZSB0aGF0IGRldmVsb3BlcnMKLSAgICAgICAgd2lsbCB3YW50IHRvIGV4dGVuZCwgY29uZmlndXJlIG9yIG9wdGltaXplIGl0IGZvciB0aGVpciBzcGVjaWZpYyB1c2VzLgotICAgICAgICBZb3Ugc2hvdWxkIHNlbmQgcGF0Y2hlcyB0byB0aGUgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0IHNvIHRoYXQgdGhleQotICAgICAgICBjYW4gYmUgcmV2aWV3ZWQgYW5kIG1lcmdlZCBieSB0aGUgYXBwcm9wcmlhdGUgbWFpbnRhaW5lci4KKyAgICAgICAgQmVjYXVzZSB0aGUgc3lzdGVtIGlzIGV4dHJlbWVseSBjb25maWd1cmFibGUgYW5kIGZsZXhpYmxlLCB3ZSByZWNvZ25pemUKKyAgICAgICAgdGhhdCBkZXZlbG9wZXJzIHdpbGwgd2FudCB0byBleHRlbmQsIGNvbmZpZ3VyZSBvciBvcHRpbWl6ZSBpdCBmb3IKKyAgICAgICAgdGhlaXIgc3BlY2lmaWMgdXNlcy4KICAgICA8L3BhcmE+CiAKLSAgICA8c2VjdGlvbiBpZD0nc3VibWl0LWNoYW5nZS1vdmVydmlldyc+Ci0gICAgICAgIDx0aXRsZT5PdmVydmlldzwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHVzZXMgYSBtYWlsaW5nIGxpc3QgYW5kIGEgcGF0Y2gtYmFzZWQgd29ya2Zsb3cKKyAgICAgICAgdGhhdCBpcyBzaW1pbGFyIHRvIHRoZSBMaW51eCBrZXJuZWwgYnV0IGNvbnRhaW5zIGltcG9ydGFudAorICAgICAgICBkaWZmZXJlbmNlcy4KKyAgICAgICAgSW4gZ2VuZXJhbCwgYSBtYWlsaW5nIGxpc3QgZXhpc3RzIHRocm91Z2ggd2hpY2ggeW91IGNhbiBzdWJtaXQKKyAgICAgICAgcGF0Y2hlcy4KKyAgICAgICAgWW91IHNob3VsZCBzZW5kIHBhdGNoZXMgdG8gdGhlIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdCBzbyB0aGF0IHRoZXkKKyAgICAgICAgY2FuIGJlIHJldmlld2VkIGFuZCBtZXJnZWQgYnkgdGhlIGFwcHJvcHJpYXRlIG1haW50YWluZXIuCisgICAgICAgIFRoZSBzcGVjaWZpYyBtYWlsaW5nIGxpc3QgeW91IG5lZWQgdG8gdXNlIGRlcGVuZHMgb24gdGhlCisgICAgICAgIGxvY2F0aW9uIG9mIHRoZSBjb2RlIHlvdSBhcmUgY2hhbmdpbmcuCisgICAgICAgIEVhY2ggY29tcG9uZW50IChlLmcuIGxheWVyKSBzaG91bGQgaGF2ZSBhCisgICAgICAgIDxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPiBmaWxlIHRoYXQgaW5kaWNhdGVzIHdoZXJlIHRvIHNlbmQKKyAgICAgICAgdGhlIGNoYW5nZXMgYW5kIHdoaWNoIHByb2Nlc3MgdG8gZm9sbG93LgorICAgIDwvcGFyYT4KIAotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHVzZXMgYSBtYWlsaW5nIGxpc3QgYW5kIHBhdGNoLWJhc2VkIHdvcmtmbG93Ci0gICAgICAgICAgICB0aGF0IGlzIHNpbWlsYXIgdG8gdGhlIExpbnV4IGtlcm5lbCBidXQgY29udGFpbnMgaW1wb3J0YW50Ci0gICAgICAgICAgICBkaWZmZXJlbmNlcy4KLSAgICAgICAgICAgIEluIGdlbmVyYWwsIGEgbWFpbGluZyBsaXN0IGV4aXN0cyB0aHJvdWdoIHdoaWNoIHlvdSBjYW4gc3VibWl0Ci0gICAgICAgICAgICBwYXRjaGVzLgotICAgICAgICAgICAgVGhlIHNwZWNpZmljIG1haWxpbmcgbGlzdCB5b3UgbmVlZCB0byB1c2UgZGVwZW5kcyBvbiB0aGUKLSAgICAgICAgICAgIGxvY2F0aW9uIG9mIHRoZSBjb2RlIHlvdSBhcmUgY2hhbmdpbmcuCi0gICAgICAgICAgICBFYWNoIGNvbXBvbmVudCAoZS5nLiBsYXllcikgc2hvdWxkIGhhdmUgYQotICAgICAgICAgICAgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+IGZpbGUgdGhhdCBpbmRpY2F0ZXMgd2hlcmUgdG8gc2VuZAotICAgICAgICAgICAgdGhlIGNoYW5nZXMgYW5kIHdoaWNoIHByb2Nlc3MgdG8gZm9sbG93LgotICAgICAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICAgIFlvdSBjYW4gc2VuZCB0aGUgcGF0Y2ggdG8gdGhlIG1haWxpbmcgbGlzdCB1c2luZyB3aGljaGV2ZXIgYXBwcm9hY2gKKyAgICAgICAgeW91IGZlZWwgY29tZm9ydGFibGUgd2l0aCB0byBnZW5lcmF0ZSB0aGUgcGF0Y2guCisgICAgICAgIE9uY2Ugc2VudCwgdGhlIHBhdGNoIGlzIHVzdWFsbHkgcmV2aWV3ZWQgYnkgdGhlIGNvbW11bml0eSBhdCBsYXJnZS4KKyAgICAgICAgSWYgc29tZWJvZHkgaGFzIGNvbmNlcm5zIHdpdGggdGhlIHBhdGNoLCB0aGV5IHdpbGwgdXN1YWxseSB2b2ljZQorICAgICAgICB0aGVpciBjb25jZXJuIG92ZXIgdGhlIG1haWxpbmcgbGlzdC4KKyAgICAgICAgSWYgYSBwYXRjaCBkb2VzIG5vdCByZWNlaXZlIGFueSBuZWdhdGl2ZSByZXZpZXdzLCB0aGUgbWFpbnRhaW5lciBvZgorICAgICAgICB0aGUgYWZmZWN0ZWQgbGF5ZXIgdHlwaWNhbGx5IHRha2VzIHRoZSBwYXRjaCwgdGVzdHMgaXQsIGFuZCB0aGVuCisgICAgICAgIGJhc2VkIG9uIHN1Y2Nlc3NmdWwgdGVzdGluZywgbWVyZ2VzIHRoZSBwYXRjaC4KKyAgICA8L3BhcmE+CiAKLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBZb3UgY2FuIHNlbmQgdGhlIHBhdGNoIHRvIHRoZSBtYWlsaW5nIGxpc3QgdXNpbmcgd2hpY2hldmVyIGFwcHJvYWNoCi0gICAgICAgICAgICB5b3UgZmVlbCBjb21mb3J0YWJsZSB3aXRoIHRvIGdlbmVyYXRlIHRoZSBwYXRjaC4KLSAgICAgICAgICAgIE9uY2Ugc2VudCwgdGhlIHBhdGNoIGlzIHVzdWFsbHkgcmV2aWV3ZWQgYnkgdGhlIGNvbW11bml0eSBhdCBsYXJnZS4KLSAgICAgICAgICAgIElmIHNvbWVib2R5IGhhcyBjb25jZXJucyB3aXRoIHRoZSBwYXRjaCwgdGhleSB3aWxsIHVzdWFsbHkgdm9pY2UKLSAgICAgICAgICAgIHRoZWlyIGNvbmNlcm4gb3ZlciB0aGUgbWFpbGluZyBsaXN0LgotICAgICAgICAgICAgSWYgYSBwYXRjaCBkb2VzIG5vdCByZWNlaXZlIGFueSBuZWdhdGl2ZSByZXZpZXdzLCB0aGUgbWFpbnRhaW5lciBvZgotICAgICAgICAgICAgdGhlIGFmZmVjdGVkIGxheWVyIHR5cGljYWxseSB0YWtlcyB0aGUgcGF0Y2gsIHRlc3RzIGl0LCBhbmQgdGhlbgotICAgICAgICAgICAgYmFzZWQgb24gc3VjY2Vzc2Z1bCB0ZXN0aW5nLCBtZXJnZXMgdGhlIHBhdGNoLgotICAgICAgICA8L3BhcmE+CisgICAgPHBhcmEgaWQ9J2ZpZ3VyaW5nLW91dC10aGUtbWFpbGluZy1saXN0LXRvLXVzZSc+CisgICAgICAgIFRoZSAicG9reSIgcmVwb3NpdG9yeSwgd2hpY2ggaXMgdGhlIFlvY3RvIFByb2plY3QncyByZWZlcmVuY2UgYnVpbGQKKyAgICAgICAgZW52aXJvbm1lbnQsIGlzIGEgaHlicmlkIHJlcG9zaXRvcnkgdGhhdCBjb250YWlucyBzZXZlcmFsCisgICAgICAgIGluZGl2aWR1YWwgcGllY2VzIChlLmcuIEJpdEJha2UsIE1ldGFkYXRhLCBkb2N1bWVudGF0aW9uLAorICAgICAgICBhbmQgc28gZm9ydGgpIGJ1aWx0IHVzaW5nIHRoZSBjb21iby1sYXllciB0b29sLgorICAgICAgICBUaGUgdXBzdHJlYW0gbG9jYXRpb24gdXNlZCBmb3Igc3VibWl0dGluZyBjaGFuZ2VzIHZhcmllcyBieQorICAgICAgICBjb21wb25lbnQ6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkNvcmUgTWV0YWRhdGE6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBTZW5kIHlvdXIgcGF0Y2ggdG8gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2xpc3RzLm9wZW5lbWJlZGRlZC5vcmcvbWFpbG1hbi9saXN0aW5mby9vcGVuZW1iZWRkZWQtY29yZSc+b3BlbmVtYmVkZGVkLWNvcmU8L3VsaW5rPgorICAgICAgICAgICAgICAgIG1haWxpbmcgbGlzdC4gIEZvciBleGFtcGxlLCBhIGNoYW5nZSB0byBhbnl0aGluZyB1bmRlcgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPiBkaXJlY3RvcmllcyBzaG91bGQgYmUgc2VudAorICAgICAgICAgICAgICAgIHRvIHRoaXMgbWFpbGluZyBsaXN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5CaXRCYWtlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgRm9yIGNoYW5nZXMgdG8gQml0QmFrZSAoaS5lLiBhbnl0aGluZyB1bmRlciB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGRpcmVjdG9yeSksIHNlbmQgeW91ciBwYXRjaAorICAgICAgICAgICAgICAgIHRvIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9saXN0cy5vcGVuZW1iZWRkZWQub3JnL21haWxtYW4vbGlzdGluZm8vYml0YmFrZS1kZXZlbCc+Yml0YmFrZS1kZXZlbDwvdWxpbms+CisgICAgICAgICAgICAgICAgbWFpbGluZyBsaXN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz4ibWV0YS0qIiB0cmVlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoZXNlIHRyZWVzIGNvbnRhaW4gTWV0YWRhdGEuCisgICAgICAgICAgICAgICAgVXNlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vbGlzdHMueW9jdG9wcm9qZWN0Lm9yZy9saXN0aW5mby9wb2t5Jz5wb2t5PC91bGluaz4KKyAgICAgICAgICAgICAgICBtYWlsaW5nIGxpc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KIAotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFNwZWNpZmljIHRvIE9wZW5FbWJlZGRlZC1Db3JlLCB0d28gY29tbW9ubHkgdXNlZCB0ZXN0aW5nIHRyZWVzCi0gICAgICAgICAgICBleGlzdDoKLSAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+InJvc3MvbXV0IiBicmFuY2g6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgVGhlICJtdXQiIChtYXN0ZXItdW5kZXItdGVzdCkgdHJlZQotICAgICAgICAgICAgICAgICAgICBleGlzdHMgaW4gdGhlIDxmaWxlbmFtZT5wb2t5LWNvbnRyaWI8L2ZpbGVuYW1lPiByZXBvc2l0b3J5Ci0gICAgICAgICAgICAgICAgICAgIGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsnPllvY3RvIFByb2plY3Qgc291cmNlIHJlcG9zaXRvcmllczwvdWxpbms+LgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz4ibWFzdGVyLW5leHQiIGJyYW5jaDo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBUaGlzIGJyYW5jaCBpcyBwYXJ0IG9mIHRoZSBtYWluCi0gICAgICAgICAgICAgICAgICAgICJwb2t5IiByZXBvc2l0b3J5IGluIHRoZSBZb2N0byBQcm9qZWN0IHNvdXJjZSByZXBvc2l0b3JpZXMuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICBNYWludGFpbmVycyB1c2UgdGhlc2UgYnJhbmNoZXMgdG8gdGVzdCBzdWJtaXNzaW9ucyBwcmlvciB0byBtZXJnaW5nCi0gICAgICAgICAgICBwYXRjaGVzLgotICAgICAgICAgICAgVGh1cywgeW91IGNhbiBnZXQgYW4gaWRlYSBvZiB0aGUgc3RhdHVzIG9mIGEgcGF0Y2ggYmFzZWQgb24KLSAgICAgICAgICAgIHdoZXRoZXIgdGhlIHBhdGNoIGhhcyBiZWVuIG1lcmdlZCBpbnRvIG9uZSBvZiB0aGVzZSBicmFuY2hlcy4KLSAgICAgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgICBGb3IgY2hhbmdlcyB0byBvdGhlciBsYXllcnMgaG9zdGVkIGluIHRoZSBZb2N0byBQcm9qZWN0IHNvdXJjZQorICAgICAgICByZXBvc2l0b3JpZXMgKGkuZS4gPGZpbGVuYW1lPnlvY3RvcHJvamVjdC5vcmc8L2ZpbGVuYW1lPiksIHRvb2xzLAorICAgICAgICBhbmQgdGhlIFlvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbiwgdXNlIHRoZQorICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL2xpc3RzLnlvY3RvcHJvamVjdC5vcmcvbGlzdGluZm8veW9jdG8nPllvY3RvIFByb2plY3Q8L3VsaW5rPgorICAgICAgICBnZW5lcmFsIG1haWxpbmcgbGlzdC4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBTb21ldGltZXMgYSBsYXllcidzIGRvY3VtZW50YXRpb24gc3BlY2lmaWVzIHRvIHVzZSBhCisgICAgICAgICAgICBwYXJ0aWN1bGFyIG1haWxpbmcgbGlzdC4KKyAgICAgICAgICAgIElmIHNvLCB1c2UgdGhhdCBsaXN0LgorICAgICAgICA8L25vdGU+CisgICAgICAgIEZvciBhZGRpdGlvbmFsIHJlY2lwZXMgdGhhdCBkbyBub3QgZml0IGludG8gdGhlIGNvcmUgTWV0YWRhdGEsIHlvdQorICAgICAgICBzaG91bGQgZGV0ZXJtaW5lIHdoaWNoIGxheWVyIHRoZSByZWNpcGUgc2hvdWxkIGdvIGludG8gYW5kIHN1Ym1pdAorICAgICAgICB0aGUgY2hhbmdlIGluIHRoZSBtYW5uZXIgcmVjb21tZW5kZWQgYnkgdGhlIGRvY3VtZW50YXRpb24gKGUuZy4KKyAgICAgICAgdGhlIDxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPiBmaWxlKSBzdXBwbGllZCB3aXRoIHRoZSBsYXllci4KKyAgICAgICAgSWYgaW4gZG91YnQsIHBsZWFzZSBhc2sgb24gdGhlIFlvY3RvIGdlbmVyYWwgbWFpbGluZyBsaXN0IG9yIG9uCisgICAgICAgIHRoZSBvcGVuZW1iZWRkZWQtZGV2ZWwgbWFpbGluZyBsaXN0LgorICAgIDwvcGFyYT4KIAotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoaXMgc3lzdGVtIGlzIGltcGVyZmVjdCBhbmQgcGF0Y2hlcyBjYW4gc29tZXRpbWVzIGdldCBsb3N0IGluIHRoZQorICAgIDxwYXJhPgorICAgICAgICBZb3UgY2FuIGFsc28gcHVzaCBhIGNoYW5nZSB1cHN0cmVhbSBhbmQgcmVxdWVzdCBhIG1haW50YWluZXIgdG8KKyAgICAgICAgcHVsbCB0aGUgY2hhbmdlIGludG8gdGhlIGNvbXBvbmVudCdzIHVwc3RyZWFtIHJlcG9zaXRvcnkuCisgICAgICAgIFlvdSBkbyB0aGlzIGJ5IHB1c2hpbmcgdG8gYSBjb250cmlidXRpb24gcmVwb3NpdG9yeSB0aGF0IGlzIHVwc3RyZWFtLgorICAgICAgICBTZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN3b3JrZmxvd3MnPldvcmtmbG93czwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yIGFkZGl0aW9uYWwKKyAgICAgICAgY29uY2VwdHMgb24gd29ya2luZyBpbiB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVHdvIGNvbW1vbmx5IHVzZWQgdGVzdGluZyByZXBvc2l0b3JpZXMgZXhpc3QgZm9yCisgICAgICAgIE9wZW5FbWJlZGRlZC1Db3JlOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz4icm9zcy9tdXQiIGJyYW5jaDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoZSAibXV0IiAobWFzdGVyLXVuZGVyLXRlc3QpIHRyZWUKKyAgICAgICAgICAgICAgICBleGlzdHMgaW4gdGhlIDxmaWxlbmFtZT5wb2t5LWNvbnRyaWI8L2ZpbGVuYW1lPiByZXBvc2l0b3J5CisgICAgICAgICAgICAgICAgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7Jz5Zb2N0byBQcm9qZWN0IHNvdXJjZSByZXBvc2l0b3JpZXM8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Im1hc3Rlci1uZXh0IiBicmFuY2g6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGlzIGJyYW5jaCBpcyBwYXJ0IG9mIHRoZSBtYWluCisgICAgICAgICAgICAgICAgInBva3kiIHJlcG9zaXRvcnkgaW4gdGhlIFlvY3RvIFByb2plY3Qgc291cmNlIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIE1haW50YWluZXJzIHVzZSB0aGVzZSBicmFuY2hlcyB0byB0ZXN0IHN1Ym1pc3Npb25zIHByaW9yIHRvIG1lcmdpbmcKKyAgICAgICAgcGF0Y2hlcy4KKyAgICAgICAgVGh1cywgeW91IGNhbiBnZXQgYW4gaWRlYSBvZiB0aGUgc3RhdHVzIG9mIGEgcGF0Y2ggYmFzZWQgb24KKyAgICAgICAgd2hldGhlciB0aGUgcGF0Y2ggaGFzIGJlZW4gbWVyZ2VkIGludG8gb25lIG9mIHRoZXNlIGJyYW5jaGVzLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFRoaXMgc3lzdGVtIGlzIGltcGVyZmVjdCBhbmQgY2hhbmdlcyBjYW4gc29tZXRpbWVzIGdldCBsb3N0IGluIHRoZQogICAgICAgICAgICAgZmxvdy4KLSAgICAgICAgICAgIEFza2luZyBhYm91dCB0aGUgc3RhdHVzIG9mIGEgcGF0Y2ggaXMgcmVhc29uYWJsZSBpZiB0aGUgcGF0Y2gKLSAgICAgICAgICAgIGhhcyBiZWVuIGlkbGUgZm9yIGEgd2hpbGUgd2l0aCBubyBmZWVkYmFjay4KKyAgICAgICAgICAgIEFza2luZyBhYm91dCB0aGUgc3RhdHVzIG9mIGEgcGF0Y2ggb3IgY2hhbmdlIGlzIHJlYXNvbmFibGUgaWYgdGhlCisgICAgICAgICAgICBjaGFuZ2UgaGFzIGJlZW4gaWRsZSBmb3IgYSB3aGlsZSB3aXRoIG5vIGZlZWRiYWNrLgogICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgZG9lcyBoYXZlIHBsYW5zIHRvIHVzZQogICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUGF0Y2h3b3JrXyhzb2Z0d2FyZSknPlBhdGNod29yazwvdWxpbms+CiAgICAgICAgICAgICB0byB0cmFjayB0aGUgc3RhdHVzIG9mIHBhdGNoZXMgYW5kIGFsc28gdG8gYXV0b21hdGljYWxseSBwcmV2aWV3CiAgICAgICAgICAgICBwYXRjaGVzLgotICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBwcm92aWRlIHByb2NlZHVyZXMgZm9yIHN1Ym1pdHRpbmcgYSBjaGFuZ2UuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3B1c2hpbmctYS1jaGFuZ2UtdXBzdHJlYW0nPgorICAgICAgICA8dGl0bGU+VXNpbmcgU2NyaXB0cyB0byBQdXNoIGEgQ2hhbmdlIFVwc3RyZWFtIGFuZCBSZXF1ZXN0IGEgUHVsbDwvdGl0bGU+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgZm9sbG93aW5nIHNlY3Rpb25zIHByb3ZpZGUgZ2VuZXJhbCBpbnN0cnVjdGlvbnMgZm9yIGJvdGgKLSAgICAgICAgICAgIHB1c2hpbmcgY2hhbmdlcyB1cHN0cmVhbSBhbmQgZm9yIHN1Ym1pdHRpbmcgY2hhbmdlcyBhcyBwYXRjaGVzLgotICAgICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9J3N1Ym1pdC1jaGFuZ2Utc3VibWlzc2lvbnMtdG8tcG9reSc+Ci0gICAgICAgIDx0aXRsZT5TdWJtaXNzaW9ucyB0byBQb2t5PC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSAicG9reSIgcmVwb3NpdG9yeSwgd2hpY2ggaXMgdGhlIFlvY3RvIFByb2plY3QncyByZWZlcmVuY2UgYnVpbGQKLSAgICAgICAgICAgIGVudmlyb25tZW50LCBpcyBhIGh5YnJpZCByZXBvc2l0b3J5IHRoYXQgY29udGFpbnMgc2V2ZXJhbAotICAgICAgICAgICAgaW5kaXZpZHVhbCBwaWVjZXMgKGUuZy4gQml0QmFrZSwgT3BlbkVtYmVkZGVkLUNvcmUsIG1ldGEteW9jdG8sCi0gICAgICAgICAgICBkb2N1bWVudGF0aW9uLCBhbmQgc28gZm9ydGgpIGJ1aWx0IHVzaW5nIHRoZSBjb21iby1sYXllciB0b29sLgotICAgICAgICAgICAgVGhlIHVwc3RyZWFtIGxvY2F0aW9uIHVzZWQgZm9yIHN1Ym1pdHRpbmcgY2hhbmdlcyB2YXJpZXMgYnkKLSAgICAgICAgICAgIGNvbXBvbmVudDoKLSAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q29yZSBNZXRhZGF0YTo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBTZW5kIHlvdXIgcGF0Y2ggdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9saXN0cy5vcGVuZW1iZWRkZWQub3JnL21haWxtYW4vbGlzdGluZm8vb3BlbmVtYmVkZGVkLWNvcmUnPm9wZW5lbWJlZGRlZC1jb3JlPC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgbWFpbGluZyBsaXN0LiAgRm9yIGV4YW1wbGUsIGEgY2hhbmdlIHRvIGFueXRoaW5nIHVuZGVyCi0gICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IG9yCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4gZGlyZWN0b3JpZXMgc2hvdWxkIGJlIHNlbnQKLSAgICAgICAgICAgICAgICAgICAgdG8gdGhpcyBtYWlsaW5nIGxpc3QuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkJpdEJha2U6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGNoYW5nZXMgdG8gQml0QmFrZSAoaS5lLiBhbnl0aGluZyB1bmRlciB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBkaXJlY3RvcnkpLCBzZW5kIHlvdXIgcGF0Y2gKLSAgICAgICAgICAgICAgICAgICAgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9saXN0cy5vcGVuZW1iZWRkZWQub3JnL21haWxtYW4vbGlzdGluZm8vYml0YmFrZS1kZXZlbCc+Yml0YmFrZS1kZXZlbDwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgIG1haWxpbmcgbGlzdC4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Im1ldGEteW9jdG8tYnNwIiBhbmQgIm1ldGEtcG9reSIgdHJlZXM6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgVGhlc2UgdHJlZXMgYXJlCi0gICAgICAgICAgICAgICAgICAgIHBhcnQgb2YgdGhlICJtZXRhLXlvY3RvIiByZXBvc2l0b3J5IGluIHRoZSBZb2N0byBQcm9qZWN0Ci0gICAgICAgICAgICAgICAgICAgIHNvdXJjZSByZXBvc2l0b3JpZXMuCi0gICAgICAgICAgICAgICAgICAgIFVzZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9saXN0cy55b2N0b3Byb2plY3Qub3JnL2xpc3RpbmZvL3Bva3knPnBva3k8L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICBtYWlsaW5nIGxpc3QuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0nc3VibWl0LWNoYW5nZS1zdWJtaXNzaW9ucy10by1vdGhlci1sYXllcnMnPgotICAgICAgICA8dGl0bGU+U3VibWlzc2lvbnMgdG8gT3RoZXIgTGF5ZXJzPC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEZvciBjaGFuZ2VzIHRvIG90aGVyIGxheWVycyBob3N0ZWQgaW4gdGhlIFlvY3RvIFByb2plY3Qgc291cmNlCi0gICAgICAgICAgICByZXBvc2l0b3JpZXMgKGkuZS4gPGZpbGVuYW1lPnlvY3RvcHJvamVjdC5vcmc8L2ZpbGVuYW1lPiksIHRvb2xzLAotICAgICAgICAgICAgYW5kIHRoZSBZb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24sIHVzZSB0aGUKLSAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vbGlzdHMueW9jdG9wcm9qZWN0Lm9yZy9saXN0aW5mby95b2N0byc+WW9jdG8gUHJvamVjdDwvdWxpbms+Ci0gICAgICAgICAgICBnZW5lcmFsIG1haWxpbmcgbGlzdC4KKyAgICAgICAgICAgIEZvbGxvdyB0aGlzIHByb2NlZHVyZSB0byBwdXNoIGEgY2hhbmdlIHRvIGFuIHVwc3RyZWFtICJjb250cmliIgorICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnk6CiAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICBTb21ldGltZXMgYSBsYXllcidzIGRvY3VtZW50YXRpb24gc3BlY2lmaWVzIHRvIHVzZSBhCi0gICAgICAgICAgICAgICAgcGFydGljdWxhciBtYWlsaW5nIGxpc3QuCi0gICAgICAgICAgICAgICAgSWYgc28sIHVzZSB0aGF0IGxpc3QuCisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGdlbmVyYWwgR2l0IGluZm9ybWF0aW9uIG9uIGhvdyB0byBwdXNoIGEgY2hhbmdlCisgICAgICAgICAgICAgICAgdXBzdHJlYW0gaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC1zY20uY29tL2Jvb2svZW4vdjIvRGlzdHJpYnV0ZWQtR2l0LURpc3RyaWJ1dGVkLVdvcmtmbG93cyc+R2l0IENvbW11bml0eSBCb29rPC91bGluaz4uCiAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICBGb3IgYWRkaXRpb25hbCByZWNpcGVzIHRoYXQgZG8gbm90IGZpdCBpbnRvIHRoZSBjb3JlIE1ldGFkYXRhLCB5b3UKLSAgICAgICAgICAgIHNob3VsZCBkZXRlcm1pbmUgd2hpY2ggbGF5ZXIgdGhlIHJlY2lwZSBzaG91bGQgZ28gaW50byBhbmQgc3VibWl0Ci0gICAgICAgICAgICB0aGUgY2hhbmdlIGluIHRoZSBtYW5uZXIgcmVjb21tZW5kZWQgYnkgdGhlIGRvY3VtZW50YXRpb24gKGUuZy4KLSAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZSkgc3VwcGxpZWQgd2l0aCB0aGUgbGF5ZXIuCi0gICAgICAgICAgICBJZiBpbiBkb3VidCwgcGxlYXNlIGFzayBvbiB0aGUgWW9jdG8gZ2VuZXJhbCBtYWlsaW5nIGxpc3Qgb3Igb24KLSAgICAgICAgICAgIHRoZSBvcGVuZW1iZWRkZWQtZGV2ZWwgbWFpbGluZyBsaXN0LgotICAgICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9J3N1Ym1pdC1jaGFuZ2UtcGF0Y2gtc3VibWlzc2lvbi1kZXRhaWxzJz4KLSAgICAgICAgPHRpdGxlPlBhdGNoIFN1Ym1pc3Npb24gRGV0YWlsczwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBXaGVuIHN1Ym1pdHRpbmcgYW55IGNoYW5nZSwgeW91IGNhbiBjaGVjayB3aG8geW91IHNob3VsZCBiZQotICAgICAgICAgICAgbm90aWZ5aW5nLgotICAgICAgICAgICAgVXNlIGVpdGhlciBvZiB0aGVzZSBtZXRob2RzIHRvIGZpbmQgb3V0OgotICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5NYWludGVuYW5jZSBGaWxlOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIEV4YW1pbmUgdGhlIDxmaWxlbmFtZT5tYWludGFpbmVycy5pbmM8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcwotICAgICAgICAgICAgICAgICAgICBsb2NhdGVkIGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgotICAgICAgICAgICAgICAgICAgICBhdCA8ZmlsZW5hbWU+bWV0YS1wb2t5L2NvbmYvZGlzdHJvL2luY2x1ZGU8L2ZpbGVuYW1lPiwgdG8KLSAgICAgICAgICAgICAgICAgICAgc2VlIHdobyBpcyByZXNwb25zaWJsZSBmb3IgY29kZS4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPk1ha2UgWW91ciBDaGFuZ2VzIExvY2FsbHk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTWFrZSB5b3VyIGNoYW5nZXMgaW4geW91ciBsb2NhbCBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBtYWtlIHNtYWxsLCBjb250cm9sbGVkLCBpc29sYXRlZCBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICBLZWVwaW5nIGNoYW5nZXMgc21hbGwgYW5kIGlzb2xhdGVkIGFpZHMgcmV2aWV3LAorICAgICAgICAgICAgICAgICAgICBtYWtlcyBtZXJnaW5nL3JlYmFzaW5nIGVhc2llciBhbmQga2VlcHMgdGhlIGNoYW5nZQorICAgICAgICAgICAgICAgICAgICBoaXN0b3J5IGNsZWFuIHNob3VsZCBhbnlvbmUgbmVlZCB0byByZWZlciB0byBpdCBpbgorICAgICAgICAgICAgICAgICAgICBmdXR1cmUuCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlNlYXJjaCBieSBGaWxlOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIFVzaW5nIDxsaW5rIGxpbmtlbmQ9J2dpdCc+R2l0PC9saW5rPiwgeW91IGNhbiBlbnRlciB0aGUKLSAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIGNvbW1hbmQgdG8gYnJpbmcgdXAgYSBzaG9ydCBsaXN0IG9mIGFsbCBjb21taXRzCi0gICAgICAgICAgICAgICAgICAgIGFnYWluc3QgYSBzcGVjaWZpYyBmaWxlOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIGdpdCBzaG9ydGxvZyAtLSA8cmVwbGFjZWFibGU+ZmlsZW5hbWU8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIEp1c3QgcHJvdmlkZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSBmb3Igd2hpY2ggeW91IGFyZSBpbnRlcmVzdGVkLgotICAgICAgICAgICAgICAgICAgICBUaGUgaW5mb3JtYXRpb24gcmV0dXJuZWQgaXMgbm90IG9yZGVyZWQgYnkgaGlzdG9yeSBidXQgZG9lcwotICAgICAgICAgICAgICAgICAgICBpbmNsdWRlIGEgbGlzdCBvZiBhbGwgY29tbWl0dGVycyBncm91cGVkIGJ5IG5hbWUuCi0gICAgICAgICAgICAgICAgICAgIEZyb20gdGhlIGxpc3QsIHlvdSBjYW4gc2VlIHdobyBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGJ1bGsgb2YKLSAgICAgICAgICAgICAgICAgICAgdGhlIGNoYW5nZXMgYWdhaW5zdCB0aGUgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlN0YWdlIFlvdXIgQ2hhbmdlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBTdGFnZSB5b3VyIGNoYW5nZXMgYnkgdXNpbmcgdGhlIDxmaWxlbmFtZT5naXQgYWRkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBvbiBlYWNoIGZpbGUgeW91IGNoYW5nZWQuCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEZvciBhIGxpc3Qgb2YgdGhlIFlvY3RvIFByb2plY3QgYW5kIHJlbGF0ZWQgbWFpbGluZyBsaXN0cywgc2VlIHRoZQotICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Jlc291cmNlcy1tYWlsaW5nbGlzdCc+TWFpbGluZyBsaXN0czwvdWxpbms+IgotICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBXaGVuIHlvdSBzZW5kIGEgcGF0Y2gsIGJlIHN1cmUgdG8gaW5jbHVkZSBhICJTaWduZWQtb2ZmLWJ5OiIKLSAgICAgICAgICAgIGxpbmUgaW4gdGhlIHNhbWUgc3R5bGUgYXMgcmVxdWlyZWQgYnkgdGhlIExpbnV4IGtlcm5lbC4KLSAgICAgICAgICAgIEFkZGluZyB0aGlzIGxpbmUgc2lnbmlmaWVzIHRoYXQgeW91LCB0aGUgc3VibWl0dGVyLCBoYXZlIGFncmVlZAotICAgICAgICAgICAgdG8gdGhlIERldmVsb3BlcidzIENlcnRpZmljYXRlIG9mIE9yaWdpbiAxLjEgYXMgZm9sbG93czoKLSAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmEgaWQ9J21ha2luZy1zdXJlLXlvdS1oYXZlLWNvcnJlY3QtY29tbWl0LWluZm9ybWF0aW9uJz4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkNvbW1pdCBZb3VyIENoYW5nZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29tbWl0IHRoZSBjaGFuZ2UgYnkgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naXQgY29tbWl0PC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgTWFrZSBzdXJlIHlvdXIgY29tbWl0IGluZm9ybWF0aW9uIGZvbGxvd3Mgc3RhbmRhcmRzIGJ5CisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyB0aGVzZSBhY2NlcHRlZCBjb252ZW50aW9uczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIGluY2x1ZGUgYSAiU2lnbmVkLW9mZi1ieToiIGxpbmUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSBzdHlsZSBhcyByZXF1aXJlZCBieSB0aGUgTGludXgga2VybmVsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZGluZyB0aGlzIGxpbmUgc2lnbmlmaWVzIHRoYXQgeW91LCB0aGUgc3VibWl0dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgYWdyZWVkIHRvIHRoZSBEZXZlbG9wZXIncyBDZXJ0aWZpY2F0ZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yaWdpbiAxLjEgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgIERldmVsb3BlcidzIENlcnRpZmljYXRlIG9mIE9yaWdpbiAxLjEKIAogICAgICBCeSBtYWtpbmcgYSBjb250cmlidXRpb24gdG8gdGhpcyBwcm9qZWN0LCBJIGNlcnRpZnkgdGhhdDoKQEAgLTE1OTUsMTIxICs2NTUsMTgzIEBACiAgICAgICAgICBwZXJzb25hbCBpbmZvcm1hdGlvbiBJIHN1Ym1pdCB3aXRoIGl0LCBpbmNsdWRpbmcgbXkgc2lnbi1vZmYpIGlzCiAgICAgICAgICBtYWludGFpbmVkIGluZGVmaW5pdGVseSBhbmQgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgY29uc2lzdGVudCB3aXRoCiAgICAgICAgICB0aGlzIHByb2plY3Qgb3IgdGhlIG9wZW4gc291cmNlIGxpY2Vuc2UocykgaW52b2x2ZWQuCi0gICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEluIGEgY29sbGFib3JhdGl2ZSBlbnZpcm9ubWVudCwgaXQgaXMgbmVjZXNzYXJ5IHRvIGhhdmUgc29tZSBzb3J0Ci0gICAgICAgICAgICBvZiBzdGFuZGFyZCBvciBtZXRob2QgdGhyb3VnaCB3aGljaCB5b3Ugc3VibWl0IGNoYW5nZXMuCi0gICAgICAgICAgICBPdGhlcndpc2UsIHRoaW5ncyBjb3VsZCBnZXQgcXVpdGUgY2hhb3RpYy4KLSAgICAgICAgICAgIE9uZSBnZW5lcmFsIHByYWN0aWNlIHRvIGZvbGxvdyBpcyB0byBtYWtlIHNtYWxsLCBjb250cm9sbGVkIGNoYW5nZXMuCi0gICAgICAgICAgICBLZWVwaW5nIGNoYW5nZXMgc21hbGwgYW5kIGlzb2xhdGVkIGFpZHMgcmV2aWV3LCBtYWtlcwotICAgICAgICAgICAgbWVyZ2luZy9yZWJhc2luZyBlYXNpZXIgYW5kIGtlZXBzIHRoZSBjaGFuZ2UgaGlzdG9yeSBjbGVhbiBzaG91bGQKLSAgICAgICAgICAgIGFueW9uZSBuZWVkIHRvIHJlZmVyIHRvIGl0IGluIGZ1dHVyZS4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgV2hlbiB5b3UgbWFrZSBhIGNvbW1pdCwgeW91IG11c3QgZm9sbG93IGNlcnRhaW4gc3RhbmRhcmRzCi0gICAgICAgICAgICBlc3RhYmxpc2hlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGFuZCBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50IHRlYW1zLgotICAgICAgICAgICAgRm9yIGVhY2ggY29tbWl0LCB5b3UgbXVzdCBwcm92aWRlIGEgc2luZ2xlLWxpbmUgc3VtbWFyeSBvZiB0aGUKLSAgICAgICAgICAgIGNoYW5nZSBhbmQgeW91IHNob3VsZCBhbG1vc3QgYWx3YXlzIHByb3ZpZGUgYSBtb3JlIGRldGFpbGVkCi0gICAgICAgICAgICBkZXNjcmlwdGlvbiBvZiB3aGF0IHlvdSBkaWQgKGkuZS4gdGhlIGJvZHkgb2YgdGhlIGNvbW1pdCBtZXNzYWdlKS4KLSAgICAgICAgICAgIFRoZSBvbmx5IGV4Y2VwdGlvbnMgZm9yIG5vdCBwcm92aWRpbmcgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiB3b3VsZAotICAgICAgICAgICAgYmUgaWYgeW91ciBjaGFuZ2UgaXMgYSBzaW1wbGUsIHNlbGYtZXhwbGFuYXRvcnkgY2hhbmdlIHRoYXQgbmVlZHMKLSAgICAgICAgICAgIG5vIGZ1cnRoZXIgZGVzY3JpcHRpb24gYmV5b25kIHRoZSBzdW1tYXJ5LgotICAgICAgICAgICAgSGVyZSBhcmUgdGhlIGd1aWRlbGluZXMgZm9yIGNvbXBvc2luZyBhIGNvbW1pdCBtZXNzYWdlOgotICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFByb3ZpZGUgYSBzaW5nbGUtbGluZSwgc2hvcnQgc3VtbWFyeSBvZiB0aGUgY2hhbmdlLgotICAgICAgICAgICAgICAgICAgICBUaGlzIHN1bW1hcnkgaXMgdHlwaWNhbGx5IHZpZXdhYmxlIGluIHRoZSAic2hvcnRsaXN0IiBvZgotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLgotICAgICAgICAgICAgICAgICAgICBUaHVzLCBwcm92aWRpbmcgc29tZXRoaW5nIHNob3J0IGFuZCBkZXNjcmlwdGl2ZSB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIGdpdmVzIHRoZSByZWFkZXIgYSBzdW1tYXJ5IG9mIHRoZSBjaGFuZ2UgaXMgdXNlZnVsIHdoZW4KLSAgICAgICAgICAgICAgICAgICAgdmlld2luZyBhIGxpc3Qgb2YgbWFueSBjb21taXRzLgotICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHByZWZpeCB0aGlzIHNob3J0IGRlc2NyaXB0aW9uIHdpdGggdGhlIHJlY2lwZQotICAgICAgICAgICAgICAgICAgICBuYW1lIChpZiBjaGFuZ2luZyBhIHJlY2lwZSksIG9yIGVsc2Ugd2l0aCB0aGUgc2hvcnQgZm9ybQotICAgICAgICAgICAgICAgICAgICBwYXRoIHRvIHRoZSBmaWxlIGJlaW5nIGNoYW5nZWQuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgRm9yIHRoZSBib2R5IG9mIHRoZSBjb21taXQgbWVzc2FnZSwgcHJvdmlkZSBkZXRhaWxlZAotICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiB0aGF0IGRlc2NyaWJlcyB3aGF0IHlvdSBjaGFuZ2VkLCB3aHkgeW91IG1hZGUKLSAgICAgICAgICAgICAgICAgICAgdGhlIGNoYW5nZSwgYW5kIHRoZSBhcHByb2FjaCB5b3UgdXNlZC4KLSAgICAgICAgICAgICAgICAgICAgSXQgbWlnaHQgYWxzbyBiZSBoZWxwZnVsIGlmIHlvdSBtZW50aW9uIGhvdyB5b3UgdGVzdGVkCi0gICAgICAgICAgICAgICAgICAgIHRoZSBjaGFuZ2UuCi0gICAgICAgICAgICAgICAgICAgIFByb3ZpZGUgYXMgbXVjaCBkZXRhaWwgYXMgeW91IGNhbiBpbiB0aGUgYm9keSBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgY29tbWl0IG1lc3NhZ2UuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGNoYW5nZSBhZGRyZXNzZXMgYSBzcGVjaWZpYyBidWcgb3IgaXNzdWUgdGhhdCBpcwotICAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGVkIHdpdGggYSBidWctdHJhY2tpbmcgSUQsIGluY2x1ZGUgYSByZWZlcmVuY2UKLSAgICAgICAgICAgICAgICAgICAgdG8gdGhhdCBJRCBpbiB5b3VyIGRldGFpbGVkIGRlc2NyaXB0aW9uLgotICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIFlvY3RvIFByb2plY3QgdXNlcyBhIHNwZWNpZmljIGNvbnZlbnRpb24KLSAgICAgICAgICAgICAgICAgICAgZm9yIGJ1ZyByZWZlcmVuY2VzIC0gYW55IGNvbW1pdCB0aGF0IGFkZHJlc3NlcyBhIHNwZWNpZmljCi0gICAgICAgICAgICAgICAgICAgIGJ1ZyBzaG91bGQgdXNlIHRoZSBmb2xsb3dpbmcgZm9ybSBmb3IgdGhlIGRldGFpbGVkCi0gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLgotICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIHVzZSB0aGUgYWN0dWFsIGJ1Zy10cmFja2luZyBJRCBmcm9tCi0gICAgICAgICAgICAgICAgICAgIEJ1Z3ppbGxhIGZvcgotICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+YnVnLWlkPC9yZXBsYWNlYWJsZT46Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvdmlkZSBhIHNpbmdsZS1saW5lIHN1bW1hcnkgb2YgdGhlIGNoYW5nZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbW9yZSBleHBsYW5hdGlvbiBpcyBuZWVkZWQsIHByb3ZpZGUgbW9yZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbCBpbiB0aGUgYm9keSBvZiB0aGUgY29tbWl0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc3VtbWFyeSBpcyB0eXBpY2FsbHkgdmlld2FibGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNob3J0bGlzdCIgb2YgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHVzLCBwcm92aWRpbmcgc29tZXRoaW5nIHNob3J0IGFuZCBkZXNjcmlwdGl2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgZ2l2ZXMgdGhlIHJlYWRlciBhIHN1bW1hcnkgb2YgdGhlIGNoYW5nZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWZ1bCB3aGVuIHZpZXdpbmcgYSBsaXN0IG9mIG1hbnkgY29tbWl0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHByZWZpeCB0aGlzIHNob3J0IGRlc2NyaXB0aW9uIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlIG5hbWUgKGlmIGNoYW5naW5nIGEgcmVjaXBlKSwgb3IgZWxzZSB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNob3J0IGZvcm0gcGF0aCB0byB0aGUgZmlsZSBiZWluZyBjaGFuZ2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciB0aGUgYm9keSBvZiB0aGUgY29tbWl0IG1lc3NhZ2UsIHByb3ZpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxlZCBpbmZvcm1hdGlvbiB0aGF0IGRlc2NyaWJlcyB3aGF0IHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQsIHdoeSB5b3UgbWFkZSB0aGUgY2hhbmdlLCBhbmQgdGhlIGFwcHJvYWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IHVzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgbWlnaHQgYWxzbyBiZSBoZWxwZnVsIGlmIHlvdSBtZW50aW9uIGhvdyB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0ZWQgdGhlIGNoYW5nZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm92aWRlIGFzIG11Y2ggZGV0YWlsIGFzIHlvdSBjYW4gaW4gdGhlIGJvZHkgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29tbWl0IG1lc3NhZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgbmVlZCB0byBwcm92aWRlIGEgbW9yZSBkZXRhaWxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBsYW5hdGlvbiBvZiBhIGNoYW5nZSBpZiB0aGUgY2hhbmdlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbm9yIHRvIHRoZSBwb2ludCBvZiB0aGUgc2luZ2xlIGxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeSBwcm92aWRpbmcgYWxsIHRoZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGNoYW5nZSBhZGRyZXNzZXMgYSBzcGVjaWZpYyBidWcgb3IgaXNzdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIGJ1Zy10cmFja2luZyBJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlIGEgcmVmZXJlbmNlIHRvIHRoYXQgSUQgaW4geW91ciBkZXRhaWxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgWW9jdG8gUHJvamVjdCB1c2VzIGEgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZW50aW9uIGZvciBidWcgcmVmZXJlbmNlcyAtIGFueSBjb21taXQgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NlcyBhIHNwZWNpZmljIGJ1ZyBzaG91bGQgdXNlIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtIGZvciB0aGUgZGV0YWlsZWQgZGVzY3JpcHRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byB1c2UgdGhlIGFjdHVhbCBidWctdHJhY2tpbmcgSUQgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1Z3ppbGxhIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5idWctaWQ8L3JlcGxhY2VhYmxlPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgIEZpeGVzIFtZT0NUTyAjPHJlcGxhY2VhYmxlPmJ1Zy1pZDwvcmVwbGFjZWFibGU+XQogCiAgICAgIDxyZXBsYWNlYWJsZT5kZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBjaGFuZ2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlB1c2ggWW91ciBDb21taXRzIHRvIGEgIkNvbnRyaWIiIFVwc3RyZWFtOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIGFycmFuZ2VkIGZvciBwZXJtaXNzaW9ucyB0byBwdXNoIHRvIGFuCisgICAgICAgICAgICAgICAgICAgIHVwc3RyZWFtIGNvbnRyaWIgcmVwb3NpdG9yeSwgcHVzaCB0aGUgY2hhbmdlIHRvIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBwdXNoIDxyZXBsYWNlYWJsZT51cHN0cmVhbV9yZW1vdGVfcmVwbzwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5sb2NhbF9icmFuY2hfbmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhdmUgcGVybWlzc2lvbnMgdG8gcHVzaCBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICB1cHN0cmVhbSA8ZmlsZW5hbWU+bWV0YS1pbnRlbC1jb250cmliPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSBhbmQgeW91IGFyZSB3b3JraW5nIGluIGEgbG9jYWwgYnJhbmNoIG5hbWVkCisgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT55b3VyX25hbWU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4vUkVBRE1FPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZCBwdXNoZXMgeW91ciBsb2NhbCBjb21taXRzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbC1jb250cmliPC9maWxlbmFtZT4gdXBzdHJlYW0KKyAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSBhbmQgcHV0cyB0aGUgY29tbWl0IGluIGEgYnJhbmNoIG5hbWVkCisgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT55b3VyX25hbWU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4vUkVBRE1FPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgcHVzaCBtZXRhLWludGVsLWNvbnRyaWIgPHJlcGxhY2VhYmxlPnlvdXJfbmFtZTwvcmVwbGFjZWFibGU+L1JFQURNRQogICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmEgaWQ9J3B1c2gtZGV0ZXJtaW5lLXdoby10by1ub3RpZnknPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+RGV0ZXJtaW5lIFdobyB0byBOb3RpZnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lIHRoZSBtYWludGFpbmVyIG9yIHRoZSBtYWlsaW5nIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgdGhhdCB5b3UgbmVlZCB0byBub3RpZnkgZm9yIHRoZSBjaGFuZ2UuPC9wYXJhPgogCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgZ3VpZGFuY2Ugb24gY3JlYXRpbmcgd2VsbC1mb3JtZWQgY29tbWl0IG1lc3NhZ2VzCi0gICAgICAgICAgICBhdCB0aGlzIE9wZW5FbWJlZGRlZCB3aWtpIHBhZ2U6Ci0gICAgICAgICAgICA8dWxpbmsgdXJsPScmT0VfSE9NRV9VUkw7L3dpa2kvQ29tbWl0X1BhdGNoX01lc3NhZ2VfR3VpZGVsaW5lcyc+PC91bGluaz4uCi0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0ncHVzaGluZy1hLWNoYW5nZS11cHN0cmVhbSc+Ci0gICAgICAgIDx0aXRsZT5Vc2luZyBTY3JpcHRzIHRvIFB1c2ggYSBDaGFuZ2UgVXBzdHJlYW0gYW5kIFJlcXVlc3QgYSBQdWxsPC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSBiYXNpYyBmbG93IGZvciBwdXNoaW5nIGEgY2hhbmdlIHRvIGFuIHVwc3RyZWFtICJjb250cmliIiBHaXQgcmVwb3NpdG9yeSBpcyBhcyBmb2xsb3dzOgotICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TWFrZSB5b3VyIGNoYW5nZXMgaW4geW91ciBsb2NhbCBHaXQgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U3RhZ2UgeW91ciBjaGFuZ2VzIGJ5IHVzaW5nIHRoZSA8ZmlsZW5hbWU+Z2l0IGFkZDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgb24gZWFjaCBmaWxlIHlvdSBjaGFuZ2VkLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgQ29tbWl0IHRoZSBjaGFuZ2UgYnkgdXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naXQgY29tbWl0PC9maWxlbmFtZT4gY29tbWFuZC4KLSAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBwcm92aWRlIGEgY29tbWl0IG1lc3NhZ2UgdGhhdCBmb2xsb3dzIHRoZQotICAgICAgICAgICAgICAgICAgICBwcm9qZWN04oCZcyBjb21taXQgbWVzc2FnZSBzdGFuZGFyZHMgYXMgZGVzY3JpYmVkIGVhcmxpZXIuCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPkJlZm9yZSBzdWJtaXR0aW5nIGFueSBjaGFuZ2UsIHlvdSBuZWVkIHRvIGJlIHN1cmUKKyAgICAgICAgICAgICAgICAgICAgd2hvIHRoZSBtYWludGFpbmVyIGlzIG9yIHdoYXQgbWFpbGluZyBsaXN0IHRoYXQgeW91IG5lZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gbm90aWZ5LgorICAgICAgICAgICAgICAgICAgICBVc2UgZWl0aGVyIHRoZXNlIG1ldGhvZHMgdG8gZmluZCBvdXQ6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPk1haW50ZW5hbmNlIEZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGFtaW5lIHRoZSA8ZmlsZW5hbWU+bWFpbnRhaW5lcnMuaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLCB3aGljaCBpcyBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9kaXN0cm8vaW5jbHVkZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHNlZSB3aG8gaXMgcmVzcG9uc2libGUgZm9yIGNvZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlNlYXJjaCBieSBGaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjZ2l0Jz5HaXQ8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIGVudGVyIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBicmluZyB1cCBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgbGlzdCBvZiBhbGwgY29tbWl0cyBhZ2FpbnN0IGEgc3BlY2lmaWMgZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGdpdCBzaG9ydGxvZyAtLSA8cmVwbGFjZWFibGU+ZmlsZW5hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKdXN0IHByb3ZpZGUgdGhlIG5hbWUgb2YgdGhlIGZpbGUgZm9yIHdoaWNoIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBpbnRlcmVzdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBpbmZvcm1hdGlvbiByZXR1cm5lZCBpcyBub3Qgb3JkZXJlZCBieSBoaXN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IGRvZXMgaW5jbHVkZSBhIGxpc3Qgb2YgZXZlcnlvbmUgd2hvIGhhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdHRlZCBncm91cGVkIGJ5IG5hbWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbSB0aGUgbGlzdCwgeW91IGNhbiBzZWUgd2hvIGlzIHJlc3BvbnNpYmxlIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBidWxrIG9mIHRoZSBjaGFuZ2VzIGFnYWluc3QgdGhlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkV4YW1pbmUgdGhlIExpc3Qgb2YgTWFpbGluZyBMaXN0czo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhIGxpc3Qgb2YgdGhlIFlvY3RvIFByb2plY3QgYW5kIHJlbGF0ZWQgbWFpbGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Jlc291cmNlcy1tYWlsaW5nbGlzdCc+TWFpbGluZyBsaXN0czwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgUHVzaCB0aGUgY2hhbmdlIHRvIHRoZSB1cHN0cmVhbSAiY29udHJpYiIgcmVwb3NpdG9yeSBieQotICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUgPGZpbGVuYW1lPmdpdCBwdXNoPC9maWxlbmFtZT4gY29tbWFuZC4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk5vdGlmeSB0aGUgbWFpbnRhaW5lciB0aGF0IHlvdSBoYXZlIHB1c2hlZCBhIGNoYW5nZSBieSBtYWtpbmcgYSBwdWxsCi0gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIHR3byBzY3JpcHRzIHRoYXQgY29udmVuaWVudGx5IGxldCB5b3UgZ2VuZXJhdGUgYW5kIHNlbmQKLSAgICAgICAgICAgICAgICAgICAgcHVsbCByZXF1ZXN0cyB0byB0aGUgWW9jdG8gUHJvamVjdC4KLSAgICAgICAgICAgICAgICAgICAgVGhlc2Ugc2NyaXB0cyBhcmUgPGZpbGVuYW1lPmNyZWF0ZS1wdWxsLXJlcXVlc3Q8L2ZpbGVuYW1lPiBhbmQKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNlbmQtcHVsbC1yZXF1ZXN0PC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGVzZSBzY3JpcHRzIGluIHRoZSA8ZmlsZW5hbWU+c2NyaXB0czwvZmlsZW5hbWU+IGRpcmVjdG9yeQotICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LjwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+VXNpbmcgdGhlc2Ugc2NyaXB0cyBjb3JyZWN0bHkgZm9ybWF0cyB0aGUgcmVxdWVzdHMgd2l0aG91dCBpbnRyb2R1Y2luZyBhbnkKLSAgICAgICAgICAgICAgICAgICAgd2hpdGVzcGFjZSBvciBIVE1MIGZvcm1hdHRpbmcuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBtYWludGFpbmVyIHRoYXQgcmVjZWl2ZXMgeW91ciBwYXRjaGVzIG5lZWRzIHRvIGJlIGFibGUgdG8gc2F2ZSBhbmQgYXBwbHkgdGhlbQotICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSBmcm9tIHlvdXIgZW1haWxzLgotICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGVzZSBzY3JpcHRzIGlzIHRoZSBwcmVmZXJyZWQgbWV0aG9kIGZvciBzZW5kaW5nIHBhdGNoZXMuPC9wYXJhPgotICAgICAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgaGVscCBvbiB1c2luZyB0aGVzZSBzY3JpcHRzLCBzaW1wbHkgcHJvdmlkZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1oPC9maWxlbmFtZT4gYXJndW1lbnQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPk1ha2UgYSBQdWxsIFJlcXVlc3Q6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTm90aWZ5IHRoZSBtYWludGFpbmVyIG9yIHRoZSBtYWlsaW5nIGxpc3QgdGhhdCB5b3UgaGF2ZQorICAgICAgICAgICAgICAgICAgICBwdXNoZWQgYSBjaGFuZ2UgYnkgbWFraW5nIGEgcHVsbCByZXF1ZXN0LjwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgWW9jdG8gUHJvamVjdCBwcm92aWRlcyB0d28gc2NyaXB0cyB0aGF0CisgICAgICAgICAgICAgICAgICAgIGNvbnZlbmllbnRseSBsZXQgeW91IGdlbmVyYXRlIGFuZCBzZW5kIHB1bGwgcmVxdWVzdHMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIHNjcmlwdHMgYXJlIDxmaWxlbmFtZT5jcmVhdGUtcHVsbC1yZXF1ZXN0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5zZW5kLXB1bGwtcmVxdWVzdDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlc2Ugc2NyaXB0cyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPn4vcG9reS9zY3JpcHRzPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VXNpbmcgdGhlc2Ugc2NyaXB0cyBjb3JyZWN0bHkgZm9ybWF0cyB0aGUgcmVxdWVzdHMKKyAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBpbnRyb2R1Y2luZyBhbnkgd2hpdGVzcGFjZSBvciBIVE1MIGZvcm1hdHRpbmcuCisgICAgICAgICAgICAgICAgICAgIFRoZSBtYWludGFpbmVyIHRoYXQgcmVjZWl2ZXMgeW91ciBwYXRjaGVzIGVpdGhlciBkaXJlY3RseQorICAgICAgICAgICAgICAgICAgICBvciB0aHJvdWdoIHRoZSBtYWlsaW5nIGxpc3QgbmVlZHMgdG8gYmUgYWJsZSB0byBzYXZlIGFuZAorICAgICAgICAgICAgICAgICAgICBhcHBseSB0aGVtIGRpcmVjdGx5IGZyb20geW91ciBlbWFpbHMuCisgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRoZXNlIHNjcmlwdHMgaXMgdGhlIHByZWZlcnJlZCBtZXRob2QgZm9yIHNlbmRpbmcKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hlcy48L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rmlyc3QsIGNyZWF0ZSB0aGUgcHVsbCByZXF1ZXN0LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21tYW5kIHJ1bnMgdGhlIHNjcmlwdCwKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIHRoZSB1cHN0cmVhbSByZXBvc2l0b3J5IGluIHRoZSBjb250cmliIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICBpbnRvIHdoaWNoIHlvdSBwdXNoZWQgdGhlIGNoYW5nZSwgYW5kIHByb3ZpZGVzIGEgc3ViamVjdAorICAgICAgICAgICAgICAgICAgICBsaW5lIGluIHRoZSBjcmVhdGVkIHBhdGNoIGZpbGVzOgogICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgfi9wb2t5L3NjcmlwdHMvY3JlYXRlLXB1bGwtcmVxdWVzdCAtdSBtZXRhLWludGVsLWNvbnRyaWIgLXMgIlVwZGF0ZWQgTWFudWFsIFNlY3Rpb24gUmVmZXJlbmNlIGluIFJFQURNRSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBSdW5uaW5nIHRoaXMgc2NyaXB0IGZvcm1zCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4qLnBhdGNoPC9maWxlbmFtZT4gZmlsZXMgaW4gYSBmb2xkZXIgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnB1bGwtPC9maWxlbmFtZT48cmVwbGFjZWFibGU+UElEPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBPbmUgb2YgdGhlIHBhdGNoIGZpbGVzIGlzIGEgY292ZXIgbGV0dGVyLjwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT5CZWZvcmUgcnVubmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNlbmQtcHVsbC1yZXF1ZXN0PC9maWxlbmFtZT4gc2NyaXB0LCB5b3UgbXVzdAorICAgICAgICAgICAgICAgICAgICBlZGl0IHRoZSBjb3ZlciBsZXR0ZXIgcGF0Y2ggdG8gaW5zZXJ0IGluZm9ybWF0aW9uIGFib3V0CisgICAgICAgICAgICAgICAgICAgIHlvdXIgY2hhbmdlLgorICAgICAgICAgICAgICAgICAgICBBZnRlciBlZGl0aW5nIHRoZSBjb3ZlciBsZXR0ZXIsIHNlbmQgdGhlIHB1bGwgcmVxdWVzdC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBydW5zIHRoZSBzY3JpcHQgYW5kCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyB0aGUgcGF0Y2ggZGlyZWN0b3J5IGFuZCBlbWFpbCBhZGRyZXNzLgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSBlbWFpbCBhZGRyZXNzIGlzIGEgbWFpbGluZyBsaXN0OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgfi9wb2t5L3NjcmlwdHMvc2VuZC1wdWxsLXJlcXVlc3QgLXAgfi9tZXRhLWludGVsL3B1bGwtMTA1NjUgLXQgbWV0YS1pbnRlbEB5b2N0b3Byb2plY3Qub3JnCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gZm9sbG93IHRoZSBwcm9tcHRzIGFzIHRoZSBzY3JpcHQgaXMKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmUuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGhlbHAgb24gdXNpbmcgdGhlc2Ugc2NyaXB0cywgc2ltcGx5IHByb3ZpZGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWg8L2ZpbGVuYW1lPiBhcmd1bWVudCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAkIHBva3kvc2NyaXB0cy9jcmVhdGUtcHVsbC1yZXF1ZXN0IC1oCiAgICAgICQgcG9reS9zY3JpcHRzL3NlbmQtcHVsbC1yZXF1ZXN0IC1oCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBZb3UgY2FuIGZpbmQgZ2VuZXJhbCBHaXQgaW5mb3JtYXRpb24gb24gaG93IHRvIHB1c2ggYSBjaGFuZ2UgdXBzdHJlYW0gaW4gdGhlCi0gICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0LXNjbS5jb20vYm9vay9lbi92Mi9EaXN0cmlidXRlZC1HaXQtRGlzdHJpYnV0ZWQtV29ya2Zsb3dzJz5HaXQgQ29tbXVuaXR5IEJvb2s8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CiAgICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3Rpb24+CiAKQEAgLTE3MTcsNDMgKzgzOSw2NyBAQAogICAgICAgICA8dGl0bGU+VXNpbmcgRW1haWwgdG8gU3VibWl0IGEgUGF0Y2g8L3RpdGxlPgogCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgWW91IGNhbiBzdWJtaXQgcGF0Y2hlcyB3aXRob3V0IHVzaW5nIHRoZSA8ZmlsZW5hbWU+Y3JlYXRlLXB1bGwtcmVxdWVzdDwvZmlsZW5hbWU+IGFuZAotICAgICAgICAgICAgPGZpbGVuYW1lPnNlbmQtcHVsbC1yZXF1ZXN0PC9maWxlbmFtZT4gc2NyaXB0cyBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24uCisgICAgICAgICAgICBZb3UgY2FuIHN1Ym1pdCBwYXRjaGVzIHdpdGhvdXQgdXNpbmcgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y3JlYXRlLXB1bGwtcmVxdWVzdDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPnNlbmQtcHVsbC1yZXF1ZXN0PC9maWxlbmFtZT4gc2NyaXB0cyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICBwcmV2aW91cyBzZWN0aW9uLgogICAgICAgICAgICAgSG93ZXZlciwga2VlcCBpbiBtaW5kLCB0aGUgcHJlZmVycmVkIG1ldGhvZCBpcyB0byB1c2UgdGhlIHNjcmlwdHMuCiAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgY29tcG9uZW50cyBjaGFuZ2VkLCB5b3UgbmVlZCB0byBzdWJtaXQgdGhlIGVtYWlsIHRvIGEgc3BlY2lmaWMKLSAgICAgICAgICAgIG1haWxpbmcgbGlzdC4KLSAgICAgICAgICAgIEZvciBzb21lIGd1aWRhbmNlIG9uIHdoaWNoIG1haWxpbmcgbGlzdCB0byB1c2UsIHNlZSB0aGUgbGlzdCBpbiB0aGUKLSAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdob3ctdG8tc3VibWl0LWEtY2hhbmdlJz5Ib3cgdG8gU3VibWl0IGEgQ2hhbmdlPC9saW5rPiIKLSAgICAgICAgICAgIHNlY3Rpb24uCi0gICAgICAgICAgICBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgYXZhaWxhYmxlIG1haWxpbmcgbGlzdHMsIHNlZSB0aGUKKyAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgY29tcG9uZW50cyBjaGFuZ2VkLCB5b3UgbmVlZCB0byBzdWJtaXQgdGhlIGVtYWlsCisgICAgICAgICAgICB0byBhIHNwZWNpZmljIG1haWxpbmcgbGlzdC4KKyAgICAgICAgICAgIEZvciBzb21lIGd1aWRhbmNlIG9uIHdoaWNoIG1haWxpbmcgbGlzdCB0byB1c2UsIHNlZSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2ZpZ3VyaW5nLW91dC10aGUtbWFpbGluZy1saXN0LXRvLXVzZSc+YmVnaW5uaW5nPC9saW5rPgorICAgICAgICAgICAgb2YgdGhpcyBzZWN0aW9uLgorICAgICAgICAgICAgRm9yIGEgZGVzY3JpcHRpb24gb2YgYWxsIHRoZSBhdmFpbGFibGUgbWFpbGluZyBsaXN0cywgc2VlIHRoZQogICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Jlc291cmNlcy1tYWlsaW5nbGlzdCc+TWFpbGluZyBMaXN0czwvdWxpbms+IgogICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgogICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBIZXJlIGlzIHRoZSBnZW5lcmFsIHByb2NlZHVyZSBvbiBob3cgdG8gc3VibWl0IGEgcGF0Y2ggdGhyb3VnaCBlbWFpbCB3aXRob3V0IHVzaW5nIHRoZQotICAgICAgICAgICAgc2NyaXB0czoKLSAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1ha2UgeW91ciBjaGFuZ2VzIGluIHlvdXIgbG9jYWwgR2l0IHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlN0YWdlIHlvdXIgY2hhbmdlcyBieSB1c2luZyB0aGUgPGZpbGVuYW1lPmdpdCBhZGQ8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBjb21tYW5kIG9uIGVhY2ggZmlsZSB5b3UgY2hhbmdlZC48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q29tbWl0IHRoZSBjaGFuZ2UgYnkgdXNpbmcgdGhlCisgICAgICAgICAgICBIZXJlIGlzIHRoZSBnZW5lcmFsIHByb2NlZHVyZSBvbiBob3cgdG8gc3VibWl0IGEgcGF0Y2ggdGhyb3VnaAorICAgICAgICAgICAgZW1haWwgd2l0aG91dCB1c2luZyB0aGUgc2NyaXB0czoKKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5NYWtlIFlvdXIgQ2hhbmdlcyBMb2NhbGx5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE1ha2UgeW91ciBjaGFuZ2VzIGluIHlvdXIgbG9jYWwgR2l0IHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgbWFrZSBzbWFsbCwgY29udHJvbGxlZCwgaXNvbGF0ZWQgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICAgICAgS2VlcGluZyBjaGFuZ2VzIHNtYWxsIGFuZCBpc29sYXRlZCBhaWRzIHJldmlldywKKyAgICAgICAgICAgICAgICAgICAgbWFrZXMgbWVyZ2luZy9yZWJhc2luZyBlYXNpZXIgYW5kIGtlZXBzIHRoZSBjaGFuZ2UKKyAgICAgICAgICAgICAgICAgICAgaGlzdG9yeSBjbGVhbiBzaG91bGQgYW55b25lIG5lZWQgdG8gcmVmZXIgdG8gaXQgaW4KKyAgICAgICAgICAgICAgICAgICAgZnV0dXJlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5TdGFnZSBZb3VyIENoYW5nZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU3RhZ2UgeW91ciBjaGFuZ2VzIGJ5IHVzaW5nIHRoZSA8ZmlsZW5hbWU+Z2l0IGFkZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgb24gZWFjaCBmaWxlIHlvdSBjaGFuZ2VkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5Db21taXQgWW91ciBDaGFuZ2VzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENvbW1pdCB0aGUgY2hhbmdlIGJ5IHVzaW5nIHRoZQogICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IGNvbW1pdCAtLXNpZ25vZmY8L2ZpbGVuYW1lPiBjb21tYW5kLgotICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGUgPGZpbGVuYW1lPi0tc2lnbm9mZjwvZmlsZW5hbWU+IG9wdGlvbiBpZGVudGlmaWVzIHlvdSBhcyB0aGUgcGVyc29uCi0gICAgICAgICAgICAgICAgICAgIG1ha2luZyB0aGUgY2hhbmdlIGFuZCBhbHNvIHNhdGlzZmllcyB0aGUgRGV2ZWxvcGVyJ3MgQ2VydGlmaWNhdGUgb2YKLSAgICAgICAgICAgICAgICAgICAgT3JpZ2luIChEQ08pIHNob3duIGVhcmxpZXIuPC9wYXJhPgotICAgICAgICAgICAgICAgICAgICA8cGFyYT5XaGVuIHlvdSBmb3JtIGEgY29tbWl0LCB5b3UgbXVzdCBmb2xsb3cgY2VydGFpbiBzdGFuZGFyZHMgZXN0YWJsaXNoZWQgYnkgdGhlCi0gICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgdGVhbS4KLSAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSBlYXJsaWVyIHNlY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2hvdy10by1zdWJtaXQtYS1jaGFuZ2UnPkhvdyB0byBTdWJtaXQgYSBDaGFuZ2U8L2xpbms+IgotICAgICAgICAgICAgICAgICAgICBmb3IgWW9jdG8gUHJvamVjdCBjb21taXQgbWVzc2FnZSBzdGFuZGFyZHMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvcm1hdCB0aGUgY29tbWl0IGludG8gYW4gZW1haWwgbWVzc2FnZS4KLSAgICAgICAgICAgICAgICAgICAgVG8gZm9ybWF0IGNvbW1pdHMsIHVzZSB0aGUgPGZpbGVuYW1lPmdpdCBmb3JtYXQtcGF0Y2g8L2ZpbGVuYW1lPiBjb21tYW5kLgotICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBwcm92aWRlIHRoZSBjb21tYW5kLCB5b3UgbXVzdCBpbmNsdWRlIGEgcmV2aXNpb24gbGlzdCBvciBhIG51bWJlciBvZiBwYXRjaGVzCi0gICAgICAgICAgICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRoZSA8ZmlsZW5hbWU+LS1zaWdub2ZmPC9maWxlbmFtZT4gb3B0aW9uIGlkZW50aWZpZXMKKyAgICAgICAgICAgICAgICAgICAgeW91IGFzIHRoZSBwZXJzb24gbWFraW5nIHRoZSBjaGFuZ2UgYW5kIGFsc28gc2F0aXNmaWVzCisgICAgICAgICAgICAgICAgICAgIHRoZSBEZXZlbG9wZXIncyBDZXJ0aWZpY2F0ZSBvZiBPcmlnaW4gKERDTykgc2hvd24gZWFybGllci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPldoZW4geW91IGZvcm0gYSBjb21taXQsIHlvdSBtdXN0IGZvbGxvdyBjZXJ0YWluCisgICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkcyBlc3RhYmxpc2hlZCBieSB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICB0ZWFtLgorICAgICAgICAgICAgICAgICAgICBTZWUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nbWFraW5nLXN1cmUteW91LWhhdmUtY29ycmVjdC1jb21taXQtaW5mb3JtYXRpb24nPlN0ZXAgMzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0bworICAgICAgICAgICAgICAgICAgICBwcm92aWRlIGNvbW1pdCBpbmZvcm1hdGlvbiB0aGF0IG1lZXRzIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0IG1lc3NhZ2Ugc3RhbmRhcmRzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5Gb3JtYXQgdGhlIENvbW1pdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBGb3JtYXQgdGhlIGNvbW1pdCBpbnRvIGFuIGVtYWlsIG1lc3NhZ2UuCisgICAgICAgICAgICAgICAgICAgIFRvIGZvcm1hdCBjb21taXRzLCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naXQgZm9ybWF0LXBhdGNoPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgcHJvdmlkZSB0aGUgY29tbWFuZCwgeW91IG11c3QgaW5jbHVkZSBhIHJldmlzaW9uCisgICAgICAgICAgICAgICAgICAgIGxpc3Qgb3IgYSBudW1iZXIgb2YgcGF0Y2hlcyBhcyBwYXJ0IG9mIHRoZSBjb21tYW5kLgogICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZWl0aGVyIG9mIHRoZXNlIHR3byBjb21tYW5kcyB0YWtlcyB5b3VyIG1vc3QKICAgICAgICAgICAgICAgICAgICAgcmVjZW50IHNpbmdsZSBjb21taXQgYW5kIGZvcm1hdHMgaXQgYXMgYW4gZW1haWwgbWVzc2FnZSBpbgogICAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCBkaXJlY3Rvcnk6CkBAIC0xNzY0LDUwICs5MTAsNzYgQEAKICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggSEVBRH4KICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+QWZ0ZXIgdGhlIGNvbW1hbmQgaXMgcnVuLCB0aGUgY3VycmVudCBkaXJlY3RvcnkgY29udGFpbnMgYQotICAgICAgICAgICAgICAgICAgICBudW1iZXJlZCA8ZmlsZW5hbWU+LnBhdGNoPC9maWxlbmFtZT4gZmlsZSBmb3IgdGhlIGNvbW1pdC48L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBwcm92aWRlIHNldmVyYWwgY29tbWl0cyBhcyBwYXJ0IG9mIHRoZSBjb21tYW5kLAotICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmdpdCBmb3JtYXQtcGF0Y2g8L2ZpbGVuYW1lPiBjb21tYW5kIHByb2R1Y2VzIGEKLSAgICAgICAgICAgICAgICAgICAgc2VyaWVzIG9mIG51bWJlcmVkIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSDigJMgb25lIGZvciBlYWNoIGNvbW1pdC4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT5BZnRlciB0aGUgY29tbWFuZCBpcyBydW4sIHRoZSBjdXJyZW50IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICBjb250YWlucyBhIG51bWJlcmVkIDxmaWxlbmFtZT4ucGF0Y2g8L2ZpbGVuYW1lPiBmaWxlIGZvcgorICAgICAgICAgICAgICAgICAgICB0aGUgY29tbWl0LjwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3UgcHJvdmlkZSBzZXZlcmFsIGNvbW1pdHMgYXMgcGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZCwgdGhlIDxmaWxlbmFtZT5naXQgZm9ybWF0LXBhdGNoPC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgICAgICBwcm9kdWNlcyBhIHNlcmllcyBvZiBudW1iZXJlZCBmaWxlcyBpbiB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkg4oCTIG9uZSBmb3IgZWFjaCBjb21taXQuCiAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgcGF0Y2gsIHlvdSBzaG91bGQgYWxzbyB1c2UgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tLWNvdmVyPC9maWxlbmFtZT4gb3B0aW9uIHdpdGggdGhlIGNvbW1hbmQsIHdoaWNoIGdlbmVyYXRlcyBhCi0gICAgICAgICAgICAgICAgICAgIGNvdmVyIGxldHRlciBhcyB0aGUgZmlyc3QgInBhdGNoIiBpbiB0aGUgc2VyaWVzLgotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHRoZW4gZWRpdCB0aGUgY292ZXIgbGV0dGVyIHRvIHByb3ZpZGUgYSBkZXNjcmlwdGlvbiBmb3IKLSAgICAgICAgICAgICAgICAgICAgdGhlIHNlcmllcyBvZiBwYXRjaGVzLgotICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIDxmaWxlbmFtZT5naXQgZm9ybWF0LXBhdGNoPC9maWxlbmFtZT4gY29tbWFuZCwKLSAgICAgICAgICAgICAgICAgICAgc2VlIDxmaWxlbmFtZT5HSVRfRk9STUFUX1BBVENIKDEpPC9maWxlbmFtZT4gZGlzcGxheWVkIHVzaW5nIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFuIGdpdC1mb3JtYXQtcGF0Y2g8L2ZpbGVuYW1lPiBjb21tYW5kLjwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPG5vdGU+SWYgeW91IGFyZSBvciB3aWxsIGJlIGEgZnJlcXVlbnQgY29udHJpYnV0b3IgdG8gdGhlIFlvY3RvIFByb2plY3QKLSAgICAgICAgICAgICAgICAgICAgb3IgdG8gT3BlbkVtYmVkZGVkLCB5b3UgbWlnaHQgY29uc2lkZXIgcmVxdWVzdGluZyBhIGNvbnRyaWIgYXJlYSBhbmQgdGhlCi0gICAgICAgICAgICAgICAgICAgIG5lY2Vzc2FyeSBhc3NvY2lhdGVkIHJpZ2h0cy48L25vdGU+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW1wb3J0IHRoZSBmaWxlcyBpbnRvIHlvdXIgbWFpbCBjbGllbnQgYnkgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tLWNvdmVyPC9maWxlbmFtZT4gb3B0aW9uIHdpdGggdGhlIGNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGdlbmVyYXRlcyBhIGNvdmVyIGxldHRlciBhcyB0aGUgZmlyc3QgInBhdGNoIiBpbgorICAgICAgICAgICAgICAgICAgICB0aGUgc2VyaWVzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHRoZW4gZWRpdCB0aGUgY292ZXIgbGV0dGVyIHRvIHByb3ZpZGUgYQorICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiBmb3IgdGhlIHNlcmllcyBvZiBwYXRjaGVzLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naXQgZm9ybWF0LXBhdGNoPC9maWxlbmFtZT4gY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICAgc2VlIDxmaWxlbmFtZT5HSVRfRk9STUFUX1BBVENIKDEpPC9maWxlbmFtZT4gZGlzcGxheWVkCisgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSA8ZmlsZW5hbWU+bWFuIGdpdC1mb3JtYXQtcGF0Y2g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgb3Igd2lsbCBiZSBhIGZyZXF1ZW50IGNvbnRyaWJ1dG9yIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBvciB0byBPcGVuRW1iZWRkZWQsIHlvdSBtaWdodCBjb25zaWRlcgorICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGluZyBhIGNvbnRyaWIgYXJlYSBhbmQgdGhlIG5lY2Vzc2FyeSBhc3NvY2lhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICByaWdodHMuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+SW1wb3J0IHRoZSBGaWxlcyBJbnRvIFlvdXIgTWFpbCBDbGllbnQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW1wb3J0IHRoZSBmaWxlcyBpbnRvIHlvdXIgbWFpbCBjbGllbnQgYnkgdXNpbmcgdGhlCiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naXQgc2VuZC1lbWFpbDwvZmlsZW5hbWU+IGNvbW1hbmQuCi0gICAgICAgICAgICAgICAgICAgIDxub3RlPkluIG9yZGVyIHRvIHVzZSA8ZmlsZW5hbWU+Z2l0IHNlbmQtZW1haWw8L2ZpbGVuYW1lPiwgeW91IG11c3QgaGF2ZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgdGhlIHByb3BlciBHaXQgcGFja2FnZXMgaW5zdGFsbGVkLgotICAgICAgICAgICAgICAgICAgICBGb3IgVWJ1bnR1LCBEZWJpYW4sIGFuZCBGZWRvcmEgdGhlIHBhY2thZ2UgaXMgPGZpbGVuYW1lPmdpdC1lbWFpbDwvZmlsZW5hbWU+Ljwvbm90ZT48L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSA8ZmlsZW5hbWU+Z2l0IHNlbmQtZW1haWw8L2ZpbGVuYW1lPiBjb21tYW5kIHNlbmRzIGVtYWlsIGJ5IHVzaW5nIGEgbG9jYWwKLSAgICAgICAgICAgICAgICAgICAgb3IgcmVtb3RlIE1haWwgVHJhbnNwb3J0IEFnZW50IChNVEEpIHN1Y2ggYXMKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1zbXRwPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5zZW5kbWFpbDwvZmlsZW5hbWU+LCBvciB0aHJvdWdoIGEgZGlyZWN0Ci0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zbXRwPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBpbiB5b3VyIEdpdCA8ZmlsZW5hbWU+Y29uZmlnPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBzdWJtaXR0aW5nIHBhdGNoZXMgdGhyb3VnaCBlbWFpbCBvbmx5LCBpdCBpcyB2ZXJ5IGltcG9ydGFudAotICAgICAgICAgICAgICAgICAgICB0aGF0IHlvdSBzdWJtaXQgdGhlbSB3aXRob3V0IGFueSB3aGl0ZXNwYWNlIG9yIEhUTUwgZm9ybWF0dGluZyB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIGVpdGhlciB5b3Ugb3IgeW91ciBtYWlsZXIgaW50cm9kdWNlcy4KLSAgICAgICAgICAgICAgICAgICAgVGhlIG1haW50YWluZXIgdGhhdCByZWNlaXZlcyB5b3VyIHBhdGNoZXMgbmVlZHMgdG8gYmUgYWJsZSB0byBzYXZlIGFuZAotICAgICAgICAgICAgICAgICAgICBhcHBseSB0aGVtIGRpcmVjdGx5IGZyb20geW91ciBlbWFpbHMuCi0gICAgICAgICAgICAgICAgICAgIEEgZ29vZCB3YXkgdG8gdmVyaWZ5IHRoYXQgd2hhdCB5b3UgYXJlIHNlbmRpbmcgd2lsbCBiZSBhcHBsaWNhYmxlIGJ5IHRoZQotICAgICAgICAgICAgICAgICAgICBtYWludGFpbmVyIGlzIHRvIGRvIGEgZHJ5IHJ1biBhbmQgc2VuZCB0aGVtIHRvIHlvdXJzZWxmIGFuZCB0aGVuCi0gICAgICAgICAgICAgICAgICAgIHNhdmUgYW5kIGFwcGx5IHRoZW0gYXMgdGhlIG1haW50YWluZXIgd291bGQuPC9wYXJhPgotICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgPGZpbGVuYW1lPmdpdCBzZW5kLWVtYWlsPC9maWxlbmFtZT4gY29tbWFuZCBpcyB0aGUgcHJlZmVycmVkIG1ldGhvZAotICAgICAgICAgICAgICAgICAgICBmb3Igc2VuZGluZyB5b3VyIHBhdGNoZXMgc2luY2UgdGhlcmUgaXMgbm8gcmlzayBvZiBjb21wcm9taXNpbmcgd2hpdGVzcGFjZQotICAgICAgICAgICAgICAgICAgICBpbiB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZSwgd2hpY2ggY2FuIG9jY3VyIHdoZW4geW91IHVzZSB5b3VyIG93biBtYWlsIGNsaWVudC4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiBvcmRlciB0byB1c2UgPGZpbGVuYW1lPmdpdCBzZW5kLWVtYWlsPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgbXVzdCBoYXZlIHRoZSBwcm9wZXIgR2l0IHBhY2thZ2VzIGluc3RhbGxlZCBvbgorICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBob3N0LgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIFVidW50dSwgRGViaWFuLCBhbmQgRmVkb3JhIHRoZSBwYWNrYWdlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0LWVtYWlsPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIDxmaWxlbmFtZT5naXQgc2VuZC1lbWFpbDwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgc2VuZHMgZW1haWwgYnkgdXNpbmcgYSBsb2NhbCBvciByZW1vdGUgTWFpbCBUcmFuc3BvcnQgQWdlbnQKKyAgICAgICAgICAgICAgICAgICAgKE1UQSkgc3VjaCBhcyA8ZmlsZW5hbWU+bXNtdHA8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNlbmRtYWlsPC9maWxlbmFtZT4sIG9yIHRocm91Z2ggYSBkaXJlY3QKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNtdHA8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGluIHlvdXIgR2l0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5+Ly5naXRjb25maWc8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHN1Ym1pdHRpbmcgcGF0Y2hlcyB0aHJvdWdoIGVtYWlsIG9ubHksIGl0IGlzCisgICAgICAgICAgICAgICAgICAgIHZlcnkgaW1wb3J0YW50IHRoYXQgeW91IHN1Ym1pdCB0aGVtIHdpdGhvdXQgYW55IHdoaXRlc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgb3IgSFRNTCBmb3JtYXR0aW5nIHRoYXQgZWl0aGVyIHlvdSBvciB5b3VyIG1haWxlcgorICAgICAgICAgICAgICAgICAgICBpbnRyb2R1Y2VzLgorICAgICAgICAgICAgICAgICAgICBUaGUgbWFpbnRhaW5lciB0aGF0IHJlY2VpdmVzIHlvdXIgcGF0Y2hlcyBuZWVkcyB0byBiZSBhYmxlCisgICAgICAgICAgICAgICAgICAgIHRvIHNhdmUgYW5kIGFwcGx5IHRoZW0gZGlyZWN0bHkgZnJvbSB5b3VyIGVtYWlscy4KKyAgICAgICAgICAgICAgICAgICAgQSBnb29kIHdheSB0byB2ZXJpZnkgdGhhdCB3aGF0IHlvdSBhcmUgc2VuZGluZyB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgIGFwcGxpY2FibGUgYnkgdGhlIG1haW50YWluZXIgaXMgdG8gZG8gYSBkcnkgcnVuIGFuZCBzZW5kCisgICAgICAgICAgICAgICAgICAgIHRoZW0gdG8geW91cnNlbGYgYW5kIHRoZW4gc2F2ZSBhbmQgYXBwbHkgdGhlbSBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgbWFpbnRhaW5lciB3b3VsZC48L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIDxmaWxlbmFtZT5naXQgc2VuZC1lbWFpbDwvZmlsZW5hbWU+IGNvbW1hbmQgaXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIHByZWZlcnJlZCBtZXRob2QgZm9yIHNlbmRpbmcgeW91ciBwYXRjaGVzIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIGVtYWlsIHNpbmNlIHRoZXJlIGlzIG5vIHJpc2sgb2YgY29tcHJvbWlzaW5nIHdoaXRlc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UsIHdoaWNoIGNhbiBvY2N1ciB3aGVuIHlvdSB1c2UKKyAgICAgICAgICAgICAgICAgICAgeW91ciBvd24gbWFpbCBjbGllbnQuCiAgICAgICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kIGFsc28gaGFzIHNldmVyYWwgb3B0aW9ucyB0aGF0IGxldCB5b3UKLSAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSByZWNpcGllbnRzIGFuZCBwZXJmb3JtIGZ1cnRoZXIgZWRpdGluZyBvZiB0aGUgZW1haWwgbWVzc2FnZS4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlIDxmaWxlbmFtZT5naXQgc2VuZC1lbWFpbDwvZmlsZW5hbWU+IGNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgcmVjaXBpZW50cyBhbmQgcGVyZm9ybSBmdXJ0aGVyIGVkaXRpbmcgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGVtYWlsIG1lc3NhZ2UuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IHNlbmQtZW1haWw8L2ZpbGVuYW1lPiBjb21tYW5kLAogICAgICAgICAgICAgICAgICAgICBzZWUgPGZpbGVuYW1lPkdJVC1TRU5ELUVNQUlMKDEpPC9maWxlbmFtZT4gZGlzcGxheWVkIHVzaW5nCiAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bWFuIGdpdC1zZW5kLWVtYWlsPC9maWxlbmFtZT4gY29tbWFuZC4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CiAgICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3Rpb24+CiA8L3NlY3Rpb24+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtcWVtdS54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtcWVtdS54bWwKaW5kZXggNDFjMTgyOS4uODVlNzMxNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLXFlbXUueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1xZW11LnhtbApAQCAtNiw0MjcgKzYsMzAzIEBACiAKIDx0aXRsZT5Vc2luZyB0aGUgUXVpY2sgRU1VbGF0b3IgKFFFTVUpPC90aXRsZT4KIAotPHBhcmE+Ci0gICAgUXVpY2sgRU1VbGF0b3IgKFFFTVUpIGlzIGFuIE9wZW4gU291cmNlIHByb2plY3QgdGhlIFlvY3RvIFByb2plY3QgdXNlcwotICAgIGFzIHBhcnQgb2YgaXRzIGRldmVsb3BtZW50ICJ0b29sIHNldCIuCi0gICAgQXMgc3VjaCwgdGhlIGluZm9ybWF0aW9uIGluIHRoaXMgY2hhcHRlciBpcyBsaW1pdGVkIHRvIHRoZQotICAgIFlvY3RvIFByb2plY3QgaW50ZWdyYXRpb24gb2YgUUVNVSBhbmQgbm90IFFFTVUgaW4gZ2VuZXJhbC4KLSAgICBGb3Igb2ZmaWNpYWwgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50YXRpb24gb24gUUVNVSwgc2VlIHRoZQotICAgIGZvbGxvd2luZyByZWZlcmVuY2VzOgotICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PHVsaW5rIHVybD0naHR0cDovL3dpa2kucWVtdS5vcmcvTWFpbl9QYWdlJz5RRU1VIFdlYnNpdGU8L3VsaW5rPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgVGhlIG9mZmljaWFsIHdlYnNpdGUgZm9yIHRoZSBRRU1VIE9wZW4gU291cmNlIHByb2plY3QuCi0gICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48dWxpbmsgdXJsPSdodHRwOi8vd2lraS5xZW11Lm9yZy9NYW51YWwnPkRvY3VtZW50YXRpb248L3VsaW5rPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgVGhlIFFFTVUgdXNlciBtYW51YWwuCi0gICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLTwvcGFyYT4KLQotPHBhcmE+Ci0gICAgVGhpcyBjaGFwdGVyIHByb3ZpZGVzIGFuIG92ZXJ2aWV3IG9mIHRoZSBZb2N0byBQcm9qZWN0J3MgaW50ZWdyYXRpb24gb2YKLSAgICBRRU1VLCBhIGRlc2NyaXB0aW9uIG9mIGhvdyB5b3UgdXNlIFFFTVUgYW5kIGl0cyB2YXJpb3VzIG9wdGlvbnMsIHJ1bm5pbmcKLSAgICB1bmRlciBhIE5ldHdvcmsgRmlsZSBTeXN0ZW0gKE5GUykgc2VydmVyLCBhbmQgYSBmZXcgdGlwcyBhbmQgdHJpY2tzIHlvdQotICAgIG1pZ2h0IGZpbmQgaGVscGZ1bCB3aGVuIHVzaW5nIFFFTVUuCi08L3BhcmE+Ci0KLTxzZWN0aW9uIGlkPSdxZW11LW92ZXJ2aWV3Jz4KLSAgICA8dGl0bGU+T3ZlcnZpZXc8L3RpdGxlPgotCiAgICAgPHBhcmE+Ci0gICAgICAgIFdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgWW9jdG8gUHJvamVjdCwgUUVNVSBpcyBhbgotICAgICAgICBlbXVsYXRvciBhbmQgdmlydHVhbGl6YXRpb24gbWFjaGluZSB0aGF0IGFsbG93cyB5b3UgdG8gcnVuIGEgY29tcGxldGUKLSAgICAgICAgaW1hZ2UgeW91IGhhdmUgYnVpbHQgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QgYXMganVzdCBhbm90aGVyIHRhc2sKLSAgICAgICAgb24geW91ciBidWlsZCBzeXN0ZW0uCi0gICAgICAgIFFFTVUgaXMgdXNlZnVsIGZvciBydW5uaW5nIGFuZCB0ZXN0aW5nIGltYWdlcyBhbmQgYXBwbGljYXRpb25zIG9uCi0gICAgICAgIHN1cHBvcnRlZCBZb2N0byBQcm9qZWN0IGFyY2hpdGVjdHVyZXMgd2l0aG91dCBoYXZpbmcgYWN0dWFsIGhhcmR3YXJlLgotICAgICAgICBBbW9uZyBvdGhlciB0aGluZ3MsIHRoZSBZb2N0byBQcm9qZWN0IHVzZXMgUUVNVSB0byBydW4gYXV0b21hdGVkCi0gICAgICAgIFF1YWxpdHkgQXNzdXJhbmNlIChRQSkgdGVzdHMgb24gZmluYWwgaW1hZ2VzIHNoaXBwZWQgd2l0aCBlYWNoCi0gICAgICAgIHJlbGVhc2UuCisgICAgICAgIFRoaXMgY2hhcHRlciBwcm92aWRlcyBwcm9jZWR1cmVzIHRoYXQgc2hvdyB5b3UgaG93IHRvIHVzZSB0aGUKKyAgICAgICAgUXVpY2sgRU1VbGF0b3IgKFFFTVUpLCB3aGljaCBpcyBhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IHRoZSBZb2N0bworICAgICAgICBQcm9qZWN0IHVzZXMgYXMgcGFydCBvZiBpdHMgZGV2ZWxvcG1lbnQgInRvb2wgc2V0Ii4KKyAgICAgICAgRm9yIHJlZmVyZW5jZSBpbmZvcm1hdGlvbiBvbiB0aGUgWW9jdG8gUHJvamVjdCBpbXBsZW1lbnRhdGlvbiBvZiBRRU1VLAorICAgICAgICBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtcXVpY2stZW11bGF0b3ItcWVtdSc+UXVpY2sgRU1VbGF0b3IgKFFFTVUpPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KICAgICA8L3BhcmE+CiAKLSAgICA8cGFyYT4KLSAgICAgICAgUUVNVSBpcyBtYWRlIGF2YWlsYWJsZSB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IGEgbnVtYmVyIG9mIHdheXMuCi0gICAgICAgIE9uZSBtZXRob2QgaXMgdG8gaW5zdGFsbCBhIFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoU0RLKS4KLSAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIG1ha2Ugc3VyZSB5b3UgaGF2ZQotICAgICAgICBRRU1VIGF2YWlsYWJsZSwgc2VlIHRoZQotICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyNzZGstaW50cm8nPllvY3RvIFByb2plY3QgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4uCi0gICAgPC9wYXJhPgotPC9zZWN0aW9uPgotCi08c2VjdGlvbiBpZD0ncWVtdS1ydW5uaW5nLXFlbXUnPgotICAgIDx0aXRsZT5SdW5uaW5nIFFFTVU8L3RpdGxlPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIFJ1bm5pbmcgUUVNVSBpbnZvbHZlcyBoYXZpbmcgeW91ciBidWlsZCBlbnZpcm9ubWVudCBzZXQgdXAsIGhhdmluZyB0aGUKLSAgICAgICAgcmlnaHQgYXJ0aWZhY3RzIGF2YWlsYWJsZSwgYW5kIHVuZGVyc3RhbmRpbmcgaG93IHRvIHVzZSB0aGUgbWFueQotICAgICAgICBvcHRpb25zIHRoYXQgYXJlIGF2YWlsYWJsZSB0byB5b3Ugd2hlbiB5b3Ugc3RhcnQgUUVNVSB1c2luZyB0aGUKLSAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBjb21tYW5kLgotICAgIDwvcGFyYT4KLQotICAgIDxzZWN0aW9uIGlkPSdxZW11LXNldHRpbmctdXAtdGhlLWVudmlyb25tZW50Jz4KLSAgICAgICAgPHRpdGxlPlNldHRpbmcgVXAgdGhlIEVudmlyb25tZW50PC90aXRsZT4KKyAgICA8c2VjdGlvbiBpZD0ncWVtdS1ydW5uaW5nLXFlbXUnPgorICAgICAgICA8dGl0bGU+UnVubmluZyBRRU1VPC90aXRsZT4KIAogICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFlvdSBydW4gUUVNVSBpbiB0aGUgc2FtZSBlbnZpcm9ubWVudCBmcm9tIHdoaWNoIHlvdSBydW4gQml0QmFrZS4KLSAgICAgICAgICAgIFRoaXMgbWVhbnMgeW91IG5lZWQgdG8gc291cmNlIGEgYnVpbGQgZW52aXJvbm1lbnQgc2NyaXB0IChpLmUuCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgIG9yCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3VsaW5rPikuCi0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+CisgICAgICAgICAgICBUbyB1c2UgUUVNVSwgeW91IG5lZWQgdG8gaGF2ZSBRRU1VIGluc3RhbGxlZCBhbmQgaW5pdGlhbGl6ZWQgYXMKKyAgICAgICAgICAgIHdlbGwgYXMgaGF2ZSB0aGUgcHJvcGVyIGFydGlmYWN0cyAoaS5lLiBpbWFnZSBmaWxlcyBhbmQgcm9vdAorICAgICAgICAgICAgZmlsZXN5c3RlbXMpIGF2YWlsYWJsZS4KKyAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBnZW5lcmFsIHN0ZXBzIHRvIHJ1biBRRU1VOgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkluc3RhbGwgUUVNVTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBTZWUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1NES19VUkw7I3RoZS1xZW11LWVtdWxhdG9yJz5UaGUgUUVNVSBFbXVsYXRvcjwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BtZW50IGFuZAorICAgICAgICAgICAgICAgICAgICB0aGUgRXh0ZW5zaWJsZSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKGVTREspIG1hbnVhbAorICAgICAgICAgICAgICAgICAgICBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGluc3RhbGwgUUVNVS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+U2V0dGluZyBVcCB0aGUgRW52aXJvbm1lbnQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSG93IHlvdSBzZXQgdXAgdGhlIFFFTVUgZW52aXJvbm1lbnQgZGVwZW5kcyBvbiBob3cgeW91CisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBRRU1VOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBjbG9uZWQgdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5IG9yIHlvdSBkb3dubG9hZGVkIGFuZCB1bnBhY2tlZCBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCByZWxlYXNlIHRhcmJhbGwsIHlvdSBjYW4gc291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNjcmlwdCAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4vcG9reQorICAgICAkIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgaW5zdGFsbGVkIGEgY3Jvc3MtdG9vbGNoYWluLCB5b3UgY2FuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuIHRoZSBzY3JpcHQgdGhhdCBpbml0aWFsaXplcyB0aGUgdG9vbGNoYWluLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHJ1biB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXphdGlvbiBzY3JpcHQgZnJvbSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5X3NkazwvZmlsZW5hbWU+IGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIC4gfi9wb2t5X3Nkay9lbnZpcm9ubWVudC1zZXR1cC1jb3JlMi02NC1wb2t5LWxpbnV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+RW5zdXJlIHRoZSBBcnRpZmFjdHMgYXJlIGluIFBsYWNlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGJlIHN1cmUgeW91IGhhdmUgYSBwcmUtYnVpbHQga2VybmVsIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgd2lsbCBib290IGluIFFFTVUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBhbHNvIG5lZWQgdGhlIHRhcmdldCByb290IGZpbGVzeXN0ZW0gZm9yIHlvdXIgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmXigJlzIGFyY2hpdGVjdHVyZToKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBwcmV2aW91c2x5IGJ1aWx0IGFuIGltYWdlIGZvciBRRU1VCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdWFybTwvZmlsZW5hbWU+LCBhbmQgc28gZm9ydGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gdGhlIGFydGlmYWN0cyBhcmUgaW4gcGxhY2UgaW4geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgbm90IGJ1aWx0IGFuIGltYWdlLCB5b3UgY2FuIGdvIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19NQUNISU5FU19ETF9VUkw7Jz5tYWNoaW5lcy9xZW11PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmVhIGFuZCBkb3dubG9hZCBhIHByZS1idWlsdCBpbWFnZSB0aGF0IG1hdGNoZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIGFyY2hpdGVjdHVyZSBhbmQgY2FuIGJlIHJ1biBvbiBRRU1VLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD48L3BhcmE+CiAKLSAgICA8c2VjdGlvbiBpZD0ncWVtdS11c2luZy10aGUtcnVucWVtdS1jb21tYW5kJz4KLSAgICAgICAgPHRpdGxlPlVzaW5nIHRoZSA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+IENvbW1hbmQ8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIGJhc2ljIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gY29tbWFuZCBzeW50YXggaXMgYXMKLSAgICAgICAgICAgIGZvbGxvd3M6Ci0gICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPlNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1NES19VUkw7I3Nkay1leHRyYWN0aW5nLXRoZS1yb290LWZpbGVzeXN0ZW0nPkV4dHJhY3RpbmcgdGhlIFJvb3QgRmlsZXN5c3RlbTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BtZW50IGFuZAorICAgICAgICAgICAgICAgICAgICB0aGUgRXh0ZW5zaWJsZSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKGVTREspIG1hbnVhbAorICAgICAgICAgICAgICAgICAgICBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGV4dHJhY3QgYSByb290IGZpbGVzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlJ1biBRRU1VOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSBiYXNpYyA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+IGNvbW1hbmQgc3ludGF4IGlzIGFzCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgJCBydW5xZW11IFs8cmVwbGFjZWFibGU+b3B0aW9uPC9yZXBsYWNlYWJsZT4gXSAgWy4uLl0KLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIEJhc2VkIG9uIHdoYXQgeW91IHByb3ZpZGUgb24gdGhlIGNvbW1hbmQgbGluZSwKLSAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gZG9lcyBhIGdvb2Qgam9iIG9mIGZpZ3VyaW5nIG91dCB3aGF0Ci0gICAgICAgICAgICB5b3UgYXJlIHRyeWluZyB0byBkby4KLSAgICAgICAgICAgIEZvciBleGFtcGxlLCBieSBkZWZhdWx0LCBRRU1VIGxvb2tzIGZvciB0aGUgbW9zdCByZWNlbnRseSBidWlsdAotICAgICAgICAgICAgaW1hZ2UgYWNjb3JkaW5nIHRvIHRoZSB0aW1lc3RhbXAgd2hlbiBpdCBuZWVkcyB0byBsb29rIGZvciBhbgotICAgICAgICAgICAgaW1hZ2UuCi0gICAgICAgICAgICBNaW5pbWFsbHksIHRocm91Z2ggdGhlIHVzZSBvZiBvcHRpb25zLCB5b3UgbXVzdCBwcm92aWRlIGVpdGhlcgotICAgICAgICAgICAgYSBtYWNoaW5lIG5hbWUsIGEgdmlydHVhbCBtYWNoaW5lIGltYWdlCi0gICAgICAgICAgICAoPGZpbGVuYW1lPioudm1kazwvZmlsZW5hbWU+KSwgb3IgYSBrZXJuZWwgaW1hZ2UKLSAgICAgICAgICAgICg8ZmlsZW5hbWU+Ki5iaW48L2ZpbGVuYW1lPikuCi0gICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBCYXNlZCBvbiB3aGF0IHlvdSBwcm92aWRlIG9uIHRoZSBjb21tYW5kIGxpbmUsCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gZG9lcyBhIGdvb2Qgam9iIG9mIGZpZ3VyaW5nCisgICAgICAgICAgICAgICAgICAgIG91dCB3aGF0IHlvdSBhcmUgdHJ5aW5nIHRvIGRvLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYnkgZGVmYXVsdCwgUUVNVSBsb29rcyBmb3IgdGhlIG1vc3QgcmVjZW50bHkKKyAgICAgICAgICAgICAgICAgICAgYnVpbHQgaW1hZ2UgYWNjb3JkaW5nIHRvIHRoZSB0aW1lc3RhbXAgd2hlbiBpdCBuZWVkcyB0bworICAgICAgICAgICAgICAgICAgICBsb29rIGZvciBhbiBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgTWluaW1hbGx5LCB0aHJvdWdoIHRoZSB1c2Ugb2Ygb3B0aW9ucywgeW91IG11c3QgcHJvdmlkZQorICAgICAgICAgICAgICAgICAgICBlaXRoZXIgYSBtYWNoaW5lIG5hbWUsIGEgdmlydHVhbCBtYWNoaW5lIGltYWdlCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+KndpYy52bWRrPC9maWxlbmFtZT4pLCBvciBhIGtlcm5lbCBpbWFnZQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPiouYmluPC9maWxlbmFtZT4pLjwvcGFyYT4KIAotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhIGRlc2NyaXB0aW9uIG9mIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4KLSAgICAgICAgICAgIG9wdGlvbnMgeW91IGNhbiBwcm92aWRlIG9uIHRoZSBjb21tYW5kIGxpbmU6Ci0gICAgICAgICAgICA8bm90ZT48dGl0bGU+VGlwPC90aXRsZT4KLSAgICAgICAgICAgICAgICBJZiB5b3UgZG8gcHJvdmlkZSBzb21lICJpbGxlZ2FsIiBvcHRpb24gY29tYmluYXRpb24gb3IgcGVyaGFwcwotICAgICAgICAgICAgICAgIHlvdSBkbyBub3QgcHJvdmlkZSBlbm91Z2ggaW4gdGhlIHdheSBvZiBvcHRpb25zLAotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gcHJvdmlkZXMgYXBwcm9wcmlhdGUgZXJyb3IKLSAgICAgICAgICAgICAgICBtZXNzYWdpbmcgdG8gaGVscCB5b3UgY29ycmVjdCB0aGUgcHJvYmxlbS4KLSAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxyZXBsYWNlYWJsZT5RRU1VQVJDSDwvcmVwbGFjZWFibGU+OgotICAgICAgICAgICAgICAgICAgICBUaGUgUUVNVSBtYWNoaW5lIGFyY2hpdGVjdHVyZSwgd2hpY2ggbXVzdCBiZSAicWVtdXg4NiIsCi0gICAgICAgICAgICAgICAgICAgICJxZW11eDg2XzY0IiwgInFlbXVhcm0iLCAicWVtdW1pcHMiLCAicWVtdW1pcHNlbCIsCi0gICAgICAgICAgICAgICAgICAgIOKAnHFlbXVtaXBzNjQiLCAicWVtdXNoNCIsICJxZW11cHBjIiwgInFlbXVtaWNyb2JsYXplIiwKLSAgICAgICAgICAgICAgICAgICAgb3IgInFlbXV6eW5xIi4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48cmVwbGFjZWFibGU+Vk08L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgICAgICBUaGUgdmlydHVhbCBtYWNoaW5lIGltYWdlLCB3aGljaCBtdXN0IGJlIGEKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi52bWRrPC9maWxlbmFtZT4gZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgb3B0aW9uIHdoZW4geW91IHdhbnQgdG8gYm9vdCBhCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4udm1kazwvZmlsZW5hbWU+IGltYWdlLgotICAgICAgICAgICAgICAgICAgICBUaGUgaW1hZ2UgZmlsZW5hbWUgeW91IHByb3ZpZGUgbXVzdCBjb250YWluIG9uZSBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIHN0cmluZ3M6ICJxZW11eDg2LTY0IiwgInFlbXV4ODYiLCAicWVtdWFybSIsCi0gICAgICAgICAgICAgICAgICAgICJxZW11bWlwczY0IiwgInFlbXVtaXBzIiwgInFlbXVwcGMiLCBvciAicWVtdXNoNCIuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48cmVwbGFjZWFibGU+Uk9PVEZTPC9yZXBsYWNlYWJsZT46Ci0gICAgICAgICAgICAgICAgICAgIEEgcm9vdCBmaWxlc3lzdGVtIHRoYXQgaGFzIG9uZSBvZiB0aGUgZm9sbG93aW5nCi0gICAgICAgICAgICAgICAgICAgIGZpbGV0eXBlIGV4dGVuc2lvbnM6ICJleHQyIiwgImV4dDMiLCAiZXh0NCIsICJqZmZzMiIsCi0gICAgICAgICAgICAgICAgICAgICJuZnMiLCBvciAiYnRyZnMiLgotICAgICAgICAgICAgICAgICAgICBJZiB0aGUgZmlsZW5hbWUgeW91IHByb3ZpZGUgZm9yIHRoaXMgb3B0aW9uIHVzZXMg4oCcbmZz4oCdLCBpdAotICAgICAgICAgICAgICAgICAgICBtdXN0IHByb3ZpZGUgYW4gZXhwbGljaXQgcm9vdCBmaWxlc3lzdGVtIHBhdGguCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48cmVwbGFjZWFibGU+S0VSTkVMPC9yZXBsYWNlYWJsZT46Ci0gICAgICAgICAgICAgICAgICAgIEEga2VybmVsIGltYWdlLCB3aGljaCBpcyBhIDxmaWxlbmFtZT4uYmluPC9maWxlbmFtZT4gZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgcHJvdmlkZSBhIDxmaWxlbmFtZT4uYmluPC9maWxlbmFtZT4gZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBkZXRlY3RzIGl0IGFuZCBhc3N1bWVzIHRoZQotICAgICAgICAgICAgICAgICAgICBmaWxlIGlzIGEga2VybmVsIGltYWdlLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHJlcGxhY2VhYmxlPk1BQ0hJTkU8L3JlcGxhY2VhYmxlPjoKLSAgICAgICAgICAgICAgICAgICAgVGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgUUVNVSBtYWNoaW5lLCB3aGljaCBtdXN0IGJlIG9uZQotICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nOiAicWVtdXg4NiIsCi0gICAgICAgICAgICAgICAgICAgICJxZW11eDg2LTY0IiwgInFlbXVhcm0iLCAicWVtdW1pcHMiLCAicWVtdW1pcHNlbCIsCi0gICAgICAgICAgICAgICAgICAgIOKAnHFlbXVtaXBzNjQiLCAicWVtdXNoNCIsICJxZW11cHBjIiwgInFlbXVtaWNyb2JsYXplIiwKLSAgICAgICAgICAgICAgICAgICAgb3IgInFlbXV6eW5xIi4KLSAgICAgICAgICAgICAgICAgICAgVGhlIDxyZXBsYWNlYWJsZT5NQUNISU5FPC9yZXBsYWNlYWJsZT4gYW5kCi0gICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5RRU1VQVJDSDwvcmVwbGFjZWFibGU+IG9wdGlvbnMgYXJlIGJhc2ljYWxseQotICAgICAgICAgICAgICAgICAgICBpZGVudGljYWwuCi0gICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3QgcHJvdmlkZSBhIDxyZXBsYWNlYWJsZT5NQUNISU5FPC9yZXBsYWNlYWJsZT4KLSAgICAgICAgICAgICAgICAgICAgb3B0aW9uLCA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+IHRyaWVzIHRvIGRldGVybWluZQotICAgICAgICAgICAgICAgICAgICBpdCBiYXNlZCBvbiBvdGhlciBvcHRpb25zLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnJhbWZzPC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgICAgIEluZGljYXRlcyB5b3UgYXJlIGJvb3RpbmcgYW4gaW5pdGlhbCBSQU0gZGlzayAoaW5pdHJhbWZzKQotICAgICAgICAgICAgICAgICAgICBpbWFnZSwgd2hpY2ggbWVhbnMgdGhlIDxmaWxlbmFtZT5GU1RZUEU8L2ZpbGVuYW1lPiBpcwotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y3Bpby5nejwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmlzbzwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgeW91IGFyZSBib290aW5nIGFuIElTTyBpbWFnZSwgd2hpY2ggbWVhbnMgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GU1RZUEU8L2ZpbGVuYW1lPiBpcwotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmlzbzwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPm5vZ3JhcGhpYzwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgICAgICBEaXNhYmxlcyB0aGUgdmlkZW8gY29uc29sZSwgd2hpY2ggc2V0cyB0aGUgY29uc29sZSB0bwotICAgICAgICAgICAgICAgICAgICAidHR5czAiLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnNlcmlhbDwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgICAgICBFbmFibGVzIGEgc2VyaWFsIGNvbnNvbGUgb24KLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9kZXYvdHR5UzA8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5iaW9zZGlyPC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgICAgIEVzdGFibGlzaGVzIGEgY3VzdG9tIGRpcmVjdG9yeSBmb3IgQklPUywgVkdBIEJJT1MgYW5kCi0gICAgICAgICAgICAgICAgICAgIGtleW1hcHMuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Ymlvc2ZpbGVuYW1lPC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgICAgIEVzdGFibGlzaGVzIGEgY3VzdG9tIEJJT1MgbmFtZS4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5xZW11cGFyYW1zPVwiPHJlcGxhY2VhYmxlPnh5ejwvcmVwbGFjZWFibGU+XCI8L2ZpbGVuYW1lPjoKLSAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGN1c3RvbSBRRU1VIHBhcmFtZXRlcnMuCi0gICAgICAgICAgICAgICAgICAgIFVzZSB0aGlzIG9wdGlvbiB0byBwYXNzIG9wdGlvbnMgb3RoZXIgdGhhbiB0aGUgc2ltcGxlCi0gICAgICAgICAgICAgICAgICAgICJrdm0iIGFuZCAic2VyaWFsIiBvcHRpb25zLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJvb3RwYXJhbXM9XCI8cmVwbGFjZWFibGU+eHl6PC9yZXBsYWNlYWJsZT5cIjwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgY3VzdG9tIGJvb3QgcGFyYW1ldGVycyBmb3IgdGhlIGtlcm5lbC4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5hdWRpbzwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgICAgICBFbmFibGVzIGF1ZGlvIGluIFFFTVUuCi0gICAgICAgICAgICAgICAgICAgIFRoZSA8cmVwbGFjZWFibGU+TUFDSElORTwvcmVwbGFjZWFibGU+IG9wdGlvbiBtdXN0IGJlCi0gICAgICAgICAgICAgICAgICAgIGVpdGhlciAicWVtdXg4NiIgb3IgInFlbXV4ODYtNjQiIGluIG9yZGVyIGZvciBhdWRpbyB0byBiZQotICAgICAgICAgICAgICAgICAgICBlbmFibGVkLgotICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHRoZSA8ZmlsZW5hbWU+c25kX2ludGVsOHgwPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgb3IgPGZpbGVuYW1lPnNuZF9lbnMxMzcwPC9maWxlbmFtZT4gZHJpdmVyIG11c3QgYmUKLSAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIGluIGxpbnV4IGd1ZXN0LgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnNsaXJwPC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgICAgIEVuYWJsZXMgInNsaXJwIiBuZXR3b3JraW5nLCB3aGljaCBpcyBhIGRpZmZlcmVudCB3YXkKLSAgICAgICAgICAgICAgICAgICAgb2YgbmV0d29ya2luZyB0aGF0IGRvZXMgbm90IG5lZWQgcm9vdCBhY2Nlc3MKLSAgICAgICAgICAgICAgICAgICAgYnV0IGFsc28gaXMgbm90IGFzIGVhc3kgdG8gdXNlIG9yIGNvbXByZWhlbnNpdmUKLSAgICAgICAgICAgICAgICAgICAgYXMgdGhlIGRlZmF1bHQuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYSBpZD0na3ZtLWNvbmQnPjxmaWxlbmFtZT5rdm08L2ZpbGVuYW1lPjoKLSAgICAgICAgICAgICAgICAgICAgRW5hYmxlcyBLVk0gd2hlbiBydW5uaW5nICJxZW11eDg2IiBvciAicWVtdXg4Ni02NCIKLSAgICAgICAgICAgICAgICAgICAgUUVNVSBhcmNoaXRlY3R1cmVzLgotICAgICAgICAgICAgICAgICAgICBGb3IgS1ZNIHRvIHdvcmssIGFsbCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgbXVzdCBiZSBtZXQ6CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPkhlcmUgYXJlIHNvbWUgYWRkaXRpb25hbCBleGFtcGxlcyB0byBoZWxwIGlsbHVzdHJhdGUKKyAgICAgICAgICAgICAgICAgICAgZnVydGhlciBRRU1VOgogICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgogICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdXIgPHJlcGxhY2VhYmxlPk1BQ0hJTkU8L3JlcGxhY2VhYmxlPiBtdXN0IGJlIGVpdGhlcgotcWVtdXg4NiIgb3IgInFlbXV4ODYtNjQiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBzdGFydHMgUUVNVSB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPk1BQ0hJTkU8L3JlcGxhY2VhYmxlPiBzZXQgdG8gInFlbXV4ODYiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc3VtaW5nIGEgc3RhbmRhcmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gYXV0b21hdGljYWxseSBmaW5kcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnpJbWFnZS1xZW11eDg2LmJpbjwvZmlsZW5hbWU+IGltYWdlIGZpbGUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbC1xZW11eDg2LTIwMTQwNzA3MDc0NjExLnJvb3Rmcy5leHQzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXNzdW1pbmcgdGhlIGN1cnJlbnQgYnVpbGQgY3JlYXRlZCBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+IGltYWdlKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIG1vcmUgdGhhbiBvbmUgaW1hZ2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGV4aXN0cywgUUVNVSBmaW5kcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB1c2VzIHRoZSBtb3N0IHJlY2VudGx5IGJ1aWx0IGltYWdlIGFjY29yZGluZyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBydW5xZW11IHFlbXV4ODYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91ciBidWlsZCBob3N0IGhhcyB0byBoYXZlIHRoZSBLVk0gbW9kdWxlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCwgd2hpY2ggYXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9kZXYva3ZtPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlICBidWlsZCBob3N0IDxmaWxlbmFtZT4vZGV2L2t2bTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGhhcyB0byBiZSBib3RoIHdyaXRhYmxlIGFuZCByZWFkYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+a3ZtLXZob3N0PC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgICAgIEVuYWJsZXMgS1ZNIHdpdGggVkhPU1Qgc3VwcG9ydCB3aGVuIHJ1bm5pbmcgInFlbXV4ODYiIG9yICJxZW11eDg2LTY0IgotICAgICAgICAgICAgICAgICAgICBRRU1VIGFyY2hpdGVjdHVyZXMuCi0gICAgICAgICAgICAgICAgICAgIEZvciBLVk0gd2l0aCBWSE9TVCB0byB3b3JrLCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgbXVzdAotICAgICAgICAgICAgICAgICAgICBiZSBtZXQ6Ci0gICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0na3ZtLWNvbmQnPmt2bTwvbGluaz4gb3B0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9ucyBtdXN0IGJlIG1ldC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3VyIGJ1aWxkIGhvc3QgaGFzIHRvIGhhdmUgdmlydGlvIG5ldCBkZXZpY2UsIHdoaWNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIDxmaWxlbmFtZT4vZGV2L3Zob3N0LW5ldDwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBob3N0IDxmaWxlbmFtZT4vZGV2L3Zob3N0LW5ldDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGhhcyB0byBiZSBlaXRoZXIgcmVhZGFibGUgb3Igd3JpdGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQg4oCcc2xpcnAtZW5hYmxlZOKAnS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+cHVibGljdm5jPC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgICAgIEVuYWJsZXMgYSBWTkMgc2VydmVyIG9wZW4gdG8gYWxsIGhvc3RzLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBGb3IgZnVydGhlciB1bmRlcnN0YW5kaW5nIHJlZ2FyZGluZyBvcHRpb24gdXNlIHdpdGgKLSAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4sIGNvbnNpZGVyIHNvbWUgZXhhbXBsZXMuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBzdGFydHMgUUVNVSB3aXRoCi0gICAgICAgICAgICA8cmVwbGFjZWFibGU+TUFDSElORTwvcmVwbGFjZWFibGU+IHNldCB0byAicWVtdXg4NiIuCi0gICAgICAgICAgICBBc3N1bWluZyBhIHN0YW5kYXJkCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4sCi0gICAgICAgICAgICA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+IGF1dG9tYXRpY2FsbHkgZmluZHMgdGhlCi0gICAgICAgICAgICA8ZmlsZW5hbWU+YnpJbWFnZS1xZW11eDg2LmJpbjwvZmlsZW5hbWU+IGltYWdlIGZpbGUgYW5kCi0gICAgICAgICAgICB0aGUKLSAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWwtcWVtdXg4Ni0yMDE0MDcwNzA3NDYxMS5yb290ZnMuZXh0MzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAoYXNzdW1pbmcgdGhlIGN1cnJlbnQgYnVpbGQgY3JlYXRlZCBhCi0gICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gaW1hZ2UpLgotICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgV2hlbiBtb3JlIHRoYW4gb25lIGltYWdlIHdpdGggdGhlIHNhbWUgbmFtZSBleGlzdHMsIFFFTVUgZmluZHMKLSAgICAgICAgICAgICAgICBhbmQgdXNlcyB0aGUgbW9zdCByZWNlbnRseSBidWlsdCBpbWFnZSBhY2NvcmRpbmcgdG8gdGhlCi0gICAgICAgICAgICAgICAgdGltZXN0YW1wLgotICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICQgcnVucWVtdSBxZW11eDg2Ci0gICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICBUaGlzIGV4YW1wbGUgcHJvZHVjZXMgdGhlIGV4YWN0IHNhbWUgcmVzdWx0cyBhcyB0aGUKLSAgICAgICAgICAgIHByZXZpb3VzIGV4YW1wbGUuCi0gICAgICAgICAgICBUaGlzIGNvbW1hbmQsIGhvd2V2ZXIsIHNwZWNpZmljYWxseSBwcm92aWRlcyB0aGUgaW1hZ2UKLSAgICAgICAgICAgIGFuZCByb290IGZpbGVzeXN0ZW0gdHlwZS4KLSAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgcHJvZHVjZXMgdGhlIGV4YWN0IHNhbWUgcmVzdWx0cyBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyBleGFtcGxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCwgaG93ZXZlciwgc3BlY2lmaWNhbGx5IHByb3ZpZGVzIHRoZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCByb290IGZpbGVzeXN0ZW0gdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgICQgcnVucWVtdSBxZW11eDg2IGNvcmUtaW1hZ2UtbWluaW1hbCBleHQzCi0gICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICBUaGlzIGV4YW1wbGUgc3BlY2lmaWVzIHRvIGJvb3QgYW4gaW5pdGlhbCBSQU0gZGlzayBpbWFnZQotICAgICAgICAgICAgYW5kIHRvIGVuYWJsZSBhdWRpbyBpbiBRRU1VLgotICAgICAgICAgICAgRm9yIHRoaXMgY2FzZSwgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBzZXQgdGhlCi0gICAgICAgICAgICBpbnRlcm5hbCB2YXJpYWJsZSA8ZmlsZW5hbWU+RlNUWVBFPC9maWxlbmFtZT4gdG8KLSAgICAgICAgICAgICJjcGlvLmd6Ii4KLSAgICAgICAgICAgIEFsc28sIGZvciBhdWRpbyB0byBiZSBlbmFibGVkLCBhbiBhcHByb3ByaWF0ZSBkcml2ZXIgbXVzdAotICAgICAgICAgICAgYmUgaW5zdGFsbGVkIChzZWUgdGhlIHByZXZpb3VzIGRlc2NyaXB0aW9uIGZvciB0aGUKLSAgICAgICAgICAgIDxmaWxlbmFtZT5hdWRpbzwvZmlsZW5hbWU+IG9wdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCi0gICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBzcGVjaWZpZXMgdG8gYm9vdCBhbiBpbml0aWFsIFJBTSBkaXNrIGltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRvIGVuYWJsZSBhdWRpbyBpbiBRRU1VLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciB0aGlzIGNhc2UsIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsIHZhcmlhYmxlIDxmaWxlbmFtZT5GU1RZUEU8L2ZpbGVuYW1lPiB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjcGlvLmd6Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHNvLCBmb3IgYXVkaW8gdG8gYmUgZW5hYmxlZCwgYW4gYXBwcm9wcmlhdGUgZHJpdmVyIG11c3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBpbnN0YWxsZWQgKHNlZSB0aGUgcHJldmlvdXMgZGVzY3JpcHRpb24gZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hdWRpbzwvZmlsZW5hbWU+IG9wdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAkIHJ1bnFlbXUgcWVtdXg4NiByYW1mcyBhdWRpbwotICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgVGhpcyBleGFtcGxlIGRvZXMgbm90IHByb3ZpZGUgZW5vdWdoIGluZm9ybWF0aW9uIGZvcgotICAgICAgICAgICAgUUVNVSB0byBsYXVuY2guCi0gICAgICAgICAgICBXaGlsZSB0aGUgY29tbWFuZCBkb2VzIHByb3ZpZGUgYSByb290IGZpbGVzeXN0ZW0gdHlwZSwgaXQKLSAgICAgICAgICAgIG11c3QgYWxzbyBtaW5pbWFsbHkgcHJvdmlkZSBhCi0gICAgICAgICAgICA8cmVwbGFjZWFibGU+TUFDSElORTwvcmVwbGFjZWFibGU+LAotICAgICAgICAgICAgPHJlcGxhY2VhYmxlPktFUk5FTDwvcmVwbGFjZWFibGU+LCBvcgotICAgICAgICAgICAgPHJlcGxhY2VhYmxlPlZNPC9yZXBsYWNlYWJsZT4gb3B0aW9uLgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgZG9lcyBub3QgcHJvdmlkZSBlbm91Z2ggaW5mb3JtYXRpb24gZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUUVNVSB0byBsYXVuY2guCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hpbGUgdGhlIGNvbW1hbmQgZG9lcyBwcm92aWRlIGEgcm9vdCBmaWxlc3lzdGVtIHR5cGUsIGl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCBhbHNvIG1pbmltYWxseSBwcm92aWRlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+TUFDSElORTwvcmVwbGFjZWFibGU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5LRVJORUw8L3JlcGxhY2VhYmxlPiwgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+Vk08L3JlcGxhY2VhYmxlPiBvcHRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAkIHJ1bnFlbXUgZXh0MwotICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgVGhpcyBleGFtcGxlIHNwZWNpZmllcyB0byBib290IGEgdmlydHVhbCBtYWNoaW5lIGltYWdlCi0gICAgICAgICAgICAoPGZpbGVuYW1lPi52bWRrPC9maWxlbmFtZT4gZmlsZSkuCi0gICAgICAgICAgICBGcm9tIHRoZSA8ZmlsZW5hbWU+LnZtZGs8L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gZGV0ZXJtaW5lcyB0aGUgUUVNVQotICAgICAgICAgICAgYXJjaGl0ZWN0dXJlICg8cmVwbGFjZWFibGU+TUFDSElORTwvcmVwbGFjZWFibGU+KSB0byBiZQotICAgICAgICAgICAgInFlbXV4ODYiIGFuZCB0aGUgcm9vdCBmaWxlc3lzdGVtIHR5cGUgdG8gYmUgInZtZGsiLgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIHJ1bnFlbXUgL2hvbWUvc2NvdHQtbGVub3ZvL3ZtL2NvcmUtaW1hZ2UtbWluaW1hbC1xZW11eDg2LnZtZGsKLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIHNwZWNpZmllcyB0byBib290IGEgdmlydHVhbCBtYWNoaW5lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgKDxmaWxlbmFtZT4ud2ljLnZtZGs8L2ZpbGVuYW1lPiBmaWxlKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcm9tIHRoZSA8ZmlsZW5hbWU+LndpYy52bWRrPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBkZXRlcm1pbmVzIHRoZSBRRU1VCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlICg8cmVwbGFjZWFibGU+TUFDSElORTwvcmVwbGFjZWFibGU+KSB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJxZW11eDg2IiBhbmQgdGhlIHJvb3QgZmlsZXN5c3RlbSB0eXBlIHRvIGJlICJ2bWRrIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcnVucWVtdSAvaG9tZS9zY290dC1sZW5vdm8vdm0vY29yZS1pbWFnZS1taW5pbWFsLXFlbXV4ODYud2ljLnZtZGsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CiAgICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3Rpb24+Ci08L3NlY3Rpb24+CiAKLTxzZWN0aW9uIGlkPSdxZW11LXJ1bm5pbmctdW5kZXItYS1uZXR3b3JrLWZpbGUtc3lzdGVtLW5mcy1zZXJ2ZXInPgotICAgIDx0aXRsZT5SdW5uaW5nIFVuZGVyIGEgTmV0d29yayBGaWxlIFN5c3RlbSAoTkZTKSBTZXJ2ZXI8L3RpdGxlPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIE9uZSBtZXRob2QgZm9yIHJ1bm5pbmcgUUVNVSBpcyB0byBydW4gaXQgb24gYW4gTkZTIHNlcnZlci4KLSAgICAgICAgVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgZmlsZSBzeXN0ZW0gZnJvbSBib3RoCi0gICAgICAgIHRoZSBidWlsZCBhbmQgdGhlIGVtdWxhdGVkIHN5c3RlbSBhdCB0aGUgc2FtZSB0aW1lLgotICAgICAgICBJdCBpcyBhbHNvIHdvcnRoIG5vdGluZyB0aGF0IHRoZSBzeXN0ZW0gZG9lcyBub3QgbmVlZCByb290IHByaXZpbGVnZXMKLSAgICAgICAgdG8gcnVuLgotICAgICAgICBJdCB1c2VzIGEgdXNlciBzcGFjZSBORlMgc2VydmVyIHRvIGF2b2lkIHRoYXQuCi0gICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHRvIHNldCB1cCBmb3IgcnVubmluZyBRRU1VIHVzaW5nIGFuIE5GUwotICAgICAgICBzZXJ2ZXIgYW5kIHRoZW4gaG93IHlvdSBjYW4gc3RhcnQgYW5kIHN0b3AgdGhlIHNlcnZlci4KLSAgICA8L3BhcmE+Ci0KLSAgICA8c2VjdGlvbiBpZD0ncWVtdS1zZXR0aW5nLXVwLXRvLXVzZS1uZnMnPgotICAgICAgICA8dGl0bGU+U2V0dGluZyBVcCB0byBVc2UgTkZTPC90aXRsZT4KKyAgICA8c2VjdGlvbiBpZD0nc3dpdGNoaW5nLWJldHdlZW4tY29uc29sZXMnPgorICAgICAgICA8dGl0bGU+U3dpdGNoaW5nIEJldHdlZW4gQ29uc29sZXM8L3RpdGxlPgogCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgT25jZSB5b3UgYXJlIGFibGUgdG8gcnVuIFFFTVUgaW4geW91ciBlbnZpcm9ubWVudCwgeW91IGNhbiB1c2UgdGhlCi0gICAgICAgICAgICA8ZmlsZW5hbWU+cnVucWVtdS1leHRyYWN0LXNkazwvZmlsZW5hbWU+IHNjcmlwdCwgd2hpY2ggaXMgbG9jYXRlZAotICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4gZGlyZWN0b3J5IGFsb25nIHdpdGgKLSAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gc2NyaXB0LgotICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5ydW5xZW11LWV4dHJhY3Qtc2RrPC9maWxlbmFtZT4gdGFrZXMgYSByb290Ci0gICAgICAgICAgICBmaWxlIHN5c3RlbSB0YXJiYWxsIGFuZCBleHRyYWN0cyBpdCBpbnRvIGEgbG9jYXRpb24gdGhhdCB5b3UKLSAgICAgICAgICAgIHNwZWNpZnkuCi0gICAgICAgICAgICBUaGVuLCB3aGVuIHlvdSBydW4gPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiwgeW91IGNhbiBzcGVjaWZ5Ci0gICAgICAgICAgICB0aGUgbG9jYXRpb24gdGhhdCBoYXMgdGhlIGZpbGUgc3lzdGVtIHRvIHBhc3MgaXQgdG8gUUVNVS4KLSAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHRha2VzIGEgZmlsZSBzeXN0ZW0gYW5kIGV4dHJhY3RzIGl0IHRvCi0gICAgICAgICAgICBhIGRpcmVjdG9yeSBuYW1lZCA8ZmlsZW5hbWU+dGVzdC1uZnM8L2ZpbGVuYW1lPjoKLSAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgICAgICAgIFdoZW4gYm9vdGluZyBvciBydW5uaW5nIFFFTVUsIHlvdSBjYW4gc3dpdGNoIGJldHdlZW4KKyAgICAgICAgICAgIHN1cHBvcnRlZCBjb25zb2xlcyBieSB1c2luZworICAgICAgICAgICAgQ3RybCtBbHQrPHJlcGxhY2VhYmxlPm51bWJlcjwvcmVwbGFjZWFibGU+LgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIEN0cmwrQWx0KzMgc3dpdGNoZXMgeW91IHRvIHRoZSBzZXJpYWwgY29uc29sZQorICAgICAgICAgICAgYXMgbG9uZyBhcyB0aGF0IGNvbnNvbGUgaXMgZW5hYmxlZC4KKyAgICAgICAgICAgIEJlaW5nIGFibGUgdG8gc3dpdGNoIGNvbnNvbGVzIGlzIGhlbHBmdWwsIGZvciBleGFtcGxlLCBpZgorICAgICAgICAgICAgdGhlIG1haW4gUUVNVSBjb25zb2xlIGJyZWFrcyBmb3Igc29tZSByZWFzb24uCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBVc3VhbGx5LCAiMiIgZ2V0cyB5b3UgdG8gdGhlIG1haW4gY29uc29sZSBhbmQgIjMiCisgICAgICAgICAgICAgICAgZ2V0cyB5b3UgdG8gdGhlIHNlcmlhbCBjb25zb2xlLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlbW92aW5nLXRoZS1zcGxhc2gtc2NyZWVuJz4KKyAgICAgICAgPHRpdGxlPlJlbW92aW5nIHRoZSBTcGxhc2ggU2NyZWVuPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gcmVtb3ZlIHRoZSBzcGxhc2ggc2NyZWVuIHdoZW4gUUVNVSBpcyBib290aW5nIGJ5CisgICAgICAgICAgICB1c2luZyBBbHQrbGVmdC4KKyAgICAgICAgICAgIFJlbW92aW5nIHRoZSBzcGxhc2ggc2NyZWVuIGFsbG93cyB5b3UgdG8gc2VlIHdoYXQgaXMKKyAgICAgICAgICAgIGhhcHBlbmluZyBpbiB0aGUgYmFja2dyb3VuZC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdkaXNhYmxpbmctdGhlLWN1cnNvci1ncmFiJz4KKyAgICAgICAgPHRpdGxlPkRpc2FibGluZyB0aGUgQ3Vyc29yIEdyYWI8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGRlZmF1bHQgUUVNVSBpbnRlZ3JhdGlvbiBjYXB0dXJlcyB0aGUgY3Vyc29yIHdpdGhpbiB0aGUKKyAgICAgICAgICAgIG1haW4gd2luZG93LgorICAgICAgICAgICAgSXQgZG9lcyB0aGlzIHNpbmNlIHN0YW5kYXJkIG1vdXNlIGRldmljZXMgb25seSBwcm92aWRlCisgICAgICAgICAgICByZWxhdGl2ZSBpbnB1dCBhbmQgbm90IGFic29sdXRlIGNvb3JkaW5hdGVzLgorICAgICAgICAgICAgWW91IHRoZW4gaGF2ZSB0byBicmVhayBvdXQgb2YgdGhlIGdyYWIgdXNpbmcgdGhlICJDdHJsK0FsdCIKKyAgICAgICAgICAgIGtleSBjb21iaW5hdGlvbi4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBZb2N0byBQcm9qZWN0J3MgaW50ZWdyYXRpb24gb2YgUUVNVSBlbmFibGVzCisgICAgICAgICAgICB0aGUgd2Fjb20gVVNCIHRvdWNoIHBhZCBkcml2ZXIgYnkgZGVmYXVsdCB0byBhbGxvdyBpbnB1dAorICAgICAgICAgICAgb2YgYWJzb2x1dGUgY29vcmRpbmF0ZXMuCisgICAgICAgICAgICBUaGlzIGRlZmF1bHQgbWVhbnMgdGhhdCB0aGUgbW91c2UgY2FuIGVudGVyIGFuZCBsZWF2ZSB0aGUKKyAgICAgICAgICAgIG1haW4gd2luZG93IHdpdGhvdXQgdGhlIGdyYWIgdGFraW5nIGVmZmVjdCBsZWFkaW5nIHRvIGEKKyAgICAgICAgICAgIGJldHRlciB1c2VyIGV4cGVyaWVuY2UuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncWVtdS1ydW5uaW5nLXVuZGVyLWEtbmV0d29yay1maWxlLXN5c3RlbS1uZnMtc2VydmVyJz4KKyAgICAgICAgPHRpdGxlPlJ1bm5pbmcgVW5kZXIgYSBOZXR3b3JrIEZpbGUgU3lzdGVtIChORlMpIFNlcnZlcjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmUgbWV0aG9kIGZvciBydW5uaW5nIFFFTVUgaXMgdG8gcnVuIGl0IG9uIGFuIE5GUyBzZXJ2ZXIuCisgICAgICAgICAgICBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSBmaWxlIHN5c3RlbQorICAgICAgICAgICAgZnJvbSBib3RoIHRoZSBidWlsZCBhbmQgdGhlIGVtdWxhdGVkIHN5c3RlbSBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAgSXQgaXMgYWxzbyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgc3lzdGVtIGRvZXMgbm90IG5lZWQgcm9vdAorICAgICAgICAgICAgcHJpdmlsZWdlcyB0byBydW4uCisgICAgICAgICAgICBJdCB1c2VzIGEgdXNlciBzcGFjZSBORlMgc2VydmVyIHRvIGF2b2lkIHRoYXQuCisgICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gc2V0IHVwIGZvciBydW5uaW5nIFFFTVUgdXNpbmcgYW4gTkZTCisgICAgICAgICAgICBzZXJ2ZXIuCisgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+RXh0cmFjdCBhIFJvb3QgRmlsZXN5c3RlbTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBhcmUgYWJsZSB0byBydW4gUUVNVSBpbiB5b3VyIGVudmlyb25tZW50LCB5b3UgY2FuCisgICAgICAgICAgICAgICAgICAgIHVzZSB0aGUgPGZpbGVuYW1lPnJ1bnFlbXUtZXh0cmFjdC1zZGs8L2ZpbGVuYW1lPiBzY3JpcHQsCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIGxvY2F0ZWQgaW4gdGhlIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGFsb25nIHdpdGggdGhlIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc2NyaXB0LjwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgPGZpbGVuYW1lPnJ1bnFlbXUtZXh0cmFjdC1zZGs8L2ZpbGVuYW1lPiB0YWtlcyBhCisgICAgICAgICAgICAgICAgICAgIHJvb3QgZmlsZXN5c3RlbSB0YXJiYWxsIGFuZCBleHRyYWN0cyBpdCBpbnRvIGEgbG9jYXRpb24KKyAgICAgICAgICAgICAgICAgICAgdGhhdCB5b3Ugc3BlY2lmeS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgdGFrZXMgYSBmaWxlIHN5c3RlbSBhbmQKKyAgICAgICAgICAgICAgICAgICAgZXh0cmFjdHMgaXQgdG8gYSBkaXJlY3RvcnkgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRlc3QtbmZzPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgcnVucWVtdS1leHRyYWN0LXNkayAuL3RtcC9kZXBsb3kvaW1hZ2VzL3FlbXV4ODYvY29yZS1pbWFnZS1zYXRvLXFlbXV4ODYudGFyLmJ6MiB0ZXN0LW5mcwotICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBleHRyYWN0ZWQgdGhlIGZpbGUgc3lzdGVtLCB5b3UgY2FuIHJ1bgotICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBub3JtYWxseSB3aXRoIHRoZSBhZGRpdGlvbmFsCi0gICAgICAgICAgICBsb2NhdGlvbiBvZiB0aGUgZmlsZSBzeXN0ZW0uCi0gICAgICAgICAgICBZb3UgY2FuIHRoZW4gYWxzbyBtYWtlIGNoYW5nZXMgdG8gdGhlIGZpbGVzIHdpdGhpbgotICAgICAgICAgICAgPGZpbGVuYW1lPi4vdGVzdC1uZnM8L2ZpbGVuYW1lPiBhbmQgc2VlIHRob3NlIGNoYW5nZXMgYXBwZWFyIGluIHRoZQotICAgICAgICAgICAgaW1hZ2UgaW4gcmVhbCB0aW1lLgotICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHVzaW5nIHRoZSA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+IGltYWdlOgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlN0YXJ0IFFFTVU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBleHRyYWN0ZWQgdGhlIGZpbGUgc3lzdGVtLCB5b3UgY2FuIHJ1bgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+IG5vcm1hbGx5IHdpdGggdGhlIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gb2YgdGhlIGZpbGUgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHRoZW4gYWxzbyBtYWtlIGNoYW5nZXMgdG8gdGhlIGZpbGVzIHdpdGhpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Li90ZXN0LW5mczwvZmlsZW5hbWU+IGFuZCBzZWUgdGhvc2UgY2hhbmdlcworICAgICAgICAgICAgICAgICAgICBhcHBlYXIgaW4gdGhlIGltYWdlIGluIHJlYWwgdGltZS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHVzaW5nIHRoZSA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGltYWdlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgIHJ1bnFlbXUgcWVtdXg4NiAuL3Rlc3QtbmZzCi0gICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0ncWVtdS1zdGFydGluZy1hbmQtc3RvcHBpbmctbmZzJz4KLSAgICAgICAgPHRpdGxlPlN0YXJ0aW5nIGFuZCBTdG9wcGluZyBORlM8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgWW91IGNhbiBtYW51YWxseSBzdGFydCBhbmQgc3RvcCB0aGUgTkZTIHNoYXJlIHVzaW5nIHRoZXNlCi0gICAgICAgICAgICBjb21tYW5kczoKLSAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c3RhcnQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBTdGFydHMgdGhlIE5GUyBzaGFyZToKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTaG91bGQgeW91IG5lZWQgdG8gc3RhcnQsIHN0b3AsIG9yIHJlc3RhcnQgdGhlIE5GUyBzaGFyZSwKKyAgICAgICAgICAgICAgICAgICAgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgc3RhcnRzIHRoZSBORlMgc2hhcmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICBydW5xZW11LWV4cG9ydC1yb290ZnMgc3RhcnQgPHJlcGxhY2VhYmxlPmZpbGUtc3lzdGVtLWxvY2F0aW9uPC9yZXBsYWNlYWJsZT4KLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5zdG9wPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgU3RvcHMgdGhlIE5GUyBzaGFyZToKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBydW5xZW11LWV4cG9ydC1yb290ZnMgc3RvcCA8cmVwbGFjZWFibGU+ZmlsZS1zeXN0ZW0tbG9jYXRpb248L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnJlc3RhcnQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBSZXN0YXJ0cyB0aGUgTkZTIHNoYXJlOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZCBzdG9wcyB0aGUgTkZTIHNoYXJlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgICAgIHJ1bnFlbXUtZXhwb3J0LXJvb3RmcyBzdG9wIDxyZXBsYWNlYWJsZT5maWxlLXN5c3RlbS1sb2NhdGlvbjwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZCByZXN0YXJ0cyB0aGUgTkZTIHNoYXJlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgcnVucWVtdS1leHBvcnQtcm9vdGZzIHJlc3RhcnQgPHJlcGxhY2VhYmxlPmZpbGUtc3lzdGVtLWxvY2F0aW9uPC9yZXBsYWNlYWJsZT4KLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICA8L3BhcmE+CiAgICAgPC9zZWN0aW9uPgotPC9zZWN0aW9uPgotCi08c2VjdGlvbiBpZD0ncWVtdS10aXBzLWFuZC10cmlja3MnPgotICAgIDx0aXRsZT5UaXBzIGFuZCBUcmlja3M8L3RpdGxlPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBkZXNjcmliZXMgdGhpbmdzIHlvdSBjYW4gZG8gdG8gbWFrZSBydW5uaW5nIFFFTVUKLSAgICAgICAgaW4gdGhlIGNvbnRleHQgb2YgdGhlIFlvY3RvIFByb2plY3QgYSBiZXR0ZXIgZXhwZXJpZW5jZToKLSAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3dpdGNoaW5nIEJldHdlZW4gQ29uc29sZXM6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBXaGVuIGJvb3Rpbmcgb3IgcnVubmluZyBRRU1VLCB5b3UgY2FuIHN3aXRjaCBiZXR3ZWVuCi0gICAgICAgICAgICAgICAgc3VwcG9ydGVkIGNvbnNvbGVzIGJ5IHVzaW5nCi0gICAgICAgICAgICAgICAgQ3RybCtBbHQrPHJlcGxhY2VhYmxlPm51bWJlcjwvcmVwbGFjZWFibGU+LgotICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBDdHJsK0FsdCszIHN3aXRjaGVzIHlvdSB0byB0aGUgc2VyaWFsIGNvbnNvbGUgYXMKLSAgICAgICAgICAgICAgICBsb25nIGFzIHRoYXQgY29uc29sZSBpcyBlbmFibGVkLgotICAgICAgICAgICAgICAgIEJlaW5nIGFibGUgdG8gc3dpdGNoIGNvbnNvbGVzIGlzIGhlbHBmdWwsIGZvciBleGFtcGxlLCBpZiB0aGUKLSAgICAgICAgICAgICAgICBtYWluIFFFTVUgY29uc29sZSBicmVha3MgZm9yIHNvbWUgcmVhc29uLgotICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICBVc3VhbGx5LCAiMiIgZ2V0cyB5b3UgdG8gdGhlIG1haW4gY29uc29sZSBhbmQgIjMiIGdldHMgeW91Ci0gICAgICAgICAgICAgICAgICAgIHRvIHRoZSBzZXJpYWwgY29uc29sZS4KLSAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJlbW92aW5nIHRoZSBTcGxhc2ggU2NyZWVuOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgWW91IGNhbiByZW1vdmUgdGhlIHNwbGFzaCBzY3JlZW4gd2hlbiBRRU1VIGlzIGJvb3RpbmcgYnkKLSAgICAgICAgICAgICAgICB1c2luZyBBbHQrbGVmdC4KLSAgICAgICAgICAgICAgICBSZW1vdmluZyB0aGUgc3BsYXNoIHNjcmVlbiBhbGxvd3MgeW91IHRvIHNlZSB3aGF0IGlzIGhhcHBlbmluZwotICAgICAgICAgICAgICAgIGluIHRoZSBiYWNrZ3JvdW5kLgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5EaXNhYmxpbmcgdGhlIEN1cnNvciBHcmFiOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgUUVNVSBpbnRlZ3JhdGlvbiBjYXB0dXJlcyB0aGUgY3Vyc29yIHdpdGhpbiB0aGUKLSAgICAgICAgICAgICAgICBtYWluIHdpbmRvdy4KLSAgICAgICAgICAgICAgICBJdCBkb2VzIHRoaXMgc2luY2Ugc3RhbmRhcmQgbW91c2UgZGV2aWNlcyBvbmx5IHByb3ZpZGUgcmVsYXRpdmUKLSAgICAgICAgICAgICAgICBpbnB1dCBhbmQgbm90IGFic29sdXRlIGNvb3JkaW5hdGVzLgotICAgICAgICAgICAgICAgIFlvdSB0aGVuIGhhdmUgdG8gYnJlYWsgb3V0IG9mIHRoZSBncmFiIHVzaW5nIHRoZSAiQ3RybCtBbHQiIGtleQotICAgICAgICAgICAgICAgIGNvbWJpbmF0aW9uLgotICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBZb2N0byBQcm9qZWN0J3MgaW50ZWdyYXRpb24gb2YgUUVNVSBlbmFibGVzIHRoZQotICAgICAgICAgICAgICAgIHdhY29tIFVTQiB0b3VjaCBwYWQgZHJpdmVyIGJ5IGRlZmF1bHQgdG8gYWxsb3cgaW5wdXQgb2YgYWJzb2x1dGUKLSAgICAgICAgICAgICAgICBjb29yZGluYXRlcy4KLSAgICAgICAgICAgICAgICBUaGlzIGRlZmF1bHQgbWVhbnMgdGhhdCB0aGUgbW91c2UgY2FuIGVudGVyIGFuZCBsZWF2ZSB0aGUKLSAgICAgICAgICAgICAgICBtYWluIHdpbmRvdyB3aXRob3V0IHRoZSBncmFiIHRha2luZyBlZmZlY3QgbGVhZGluZyB0byBhIGJldHRlcgotICAgICAgICAgICAgICAgIHVzZXIgZXhwZXJpZW5jZS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPC9wYXJhPgotPC9zZWN0aW9uPgotCiA8L2NoYXB0ZXI+CiA8IS0tCiB2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtc3RhcnQueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLXN0YXJ0LnhtbAppbmRleCBiODUyN2Y2Li4xOTViMjJkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtc3RhcnQueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1zdGFydC54bWwKQEAgLTcsNTIzICs3LDc0NCBAQAogPHRpdGxlPkdldHRpbmcgU3RhcnRlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0PC90aXRsZT4KIAogPHBhcmE+Ci0gICAgVGhpcyBjaGFwdGVyIGludHJvZHVjZXMgdGhlIFlvY3RvIFByb2plY3QgYW5kIGdpdmVzIHlvdSBhbiBpZGVhIG9mIHdoYXQgeW91IG5lZWQgdG8gZ2V0IHN0YXJ0ZWQuCi0gICAgWW91IGNhbiBmaW5kIGVub3VnaCBpbmZvcm1hdGlvbiB0byBzZXQgdXAgeW91ciBkZXZlbG9wbWVudCBob3N0IGFuZCBidWlsZCBvciB1c2UgaW1hZ2VzIGZvcgotICAgIGhhcmR3YXJlIHN1cHBvcnRlZCBieSB0aGUgWW9jdG8gUHJvamVjdCBieSByZWFkaW5nIHRoZQorICAgIFRoaXMgY2hhcHRlciBwcm92aWRlcyBwcm9jZWR1cmVzIHJlbGF0ZWQgdG8gZ2V0dGluZyBzZXQgdXAgdG8gdXNlIHRoZQorICAgIFlvY3RvIFByb2plY3QuCisgICAgRm9yIGEgbW9yZSBmcm9udC10by1lbmQgcHJvY2VzcyB0aGF0IHRha2VzIHlvdSBmcm9tIG1pbmltYWxseSBwcmVwYXJpbmcKKyAgICBhIGJ1aWxkIGhvc3QgdGhyb3VnaCBidWlsZGluZyBhbiBpbWFnZSwgc2VlIHRoZQogICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsnPllvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQ8L3VsaW5rPi4KIDwvcGFyYT4KIAotPHBhcmE+Ci0gICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIGNoYXB0ZXIgc3VtbWFyaXplcyB3aGF0IGlzIGluIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0IGFuZCBwcm92aWRlcwotICAgIHNvbWUgaGlnaGVyLWxldmVsIGNvbmNlcHRzIHlvdSBtaWdodCB3YW50IHRvIGNvbnNpZGVyLgotPC9wYXJhPgotCi08c2VjdGlvbiBpZD0naW50cm9kdWNpbmctdGhlLXlvY3RvLXByb2plY3QnPgotICAgIDx0aXRsZT5JbnRyb2R1Y2luZyB0aGUgWW9jdG8gUHJvamVjdDwvdGl0bGU+Cis8c2VjdGlvbiBpZD0nc2V0dGluZy11cC10aGUtZGV2ZWxvcG1lbnQtaG9zdC10by11c2UtdGhlLXlvY3RvLXByb2plY3QnPgorICAgIDx0aXRsZT5TZXR0aW5nIFVwIHRoZSBEZXZlbG9wbWVudCBIb3N0IHRvIFVzZSB0aGUgWW9jdG8gUHJvamVjdDwvdGl0bGU+CiAKICAgICA8cGFyYT4KLSAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgaXMgYW4gb3Blbi1zb3VyY2UgY29sbGFib3JhdGlvbiBwcm9qZWN0IGZvY3VzZWQgb24gZW1iZWRkZWQgTGludXggZGV2ZWxvcG1lbnQuCi0gICAgICAgIFRoZSBwcm9qZWN0IGN1cnJlbnRseSBwcm92aWRlcyBhIGJ1aWxkIHN5c3RlbSB0aGF0IGlzCi0gICAgICAgIHJlZmVycmVkIHRvIGFzIHRoZQotICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1zeXN0ZW0tdGVybSc+T3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbTwvbGluaz4KLSAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbi4KLSAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgdmFyaW91cyBhbmNpbGxhcnkgdG9vbHMgZm9yIHRoZSBlbWJlZGRlZCBkZXZlbG9wZXIKLSAgICAgICAgYW5kIGFsc28gZmVhdHVyZXMgdGhlIFNhdG8gcmVmZXJlbmNlIFVzZXIgSW50ZXJmYWNlLCB3aGljaCBpcyBvcHRpbWl6ZWQgZm9yCi0gICAgICAgIHN0eWx1cy1kcml2ZW4sIGxvdy1yZXNvbHV0aW9uIHNjcmVlbnMuCisgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBwcm9jZWR1cmVzIHRvIHNldCB1cCB5b3VyIGRldmVsb3BtZW50IGhvc3QgdG8KKyAgICAgICAgdXNlIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICBZb3UgY2FuIHVzZSB0aGUgWW9jdG8gUHJvamVjdCBvbiBhIG5hdGl2ZSBMaW51eCBkZXZlbG9wbWVudCBob3N0IG9yCisgICAgICAgIHlvdSBjYW4gdXNlCisgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9jcm9wcy9hYm91dC8nPkNST1BTPC91bGluaz4sCisgICAgICAgIHdoaWNoIGxldmVyYWdlcworICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3d3dy5kb2NrZXIuY29tLyc+RG9ja2VyIENvbnRhaW5lcnM8L3VsaW5rPiwKKyAgICAgICAgdG8gcHJlcGFyZSBhbnkgTGludXgsIE1hYywgb3IgV2luZG93cyBkZXZlbG9wbWVudCBob3N0LgogICAgIDwvcGFyYT4KIAogICAgIDxwYXJhPgotICAgICAgICBZb3UgY2FuIHVzZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSwgd2hpY2ggdXNlcwotICAgICAgICA8bGluayBsaW5rZW5kPSdiaXRiYWtlLXRlcm0nPkJpdEJha2U8L2xpbms+LCB0byBkZXZlbG9wIGNvbXBsZXRlIExpbnV4Ci0gICAgICAgIGltYWdlcyBhbmQgYXNzb2NpYXRlZCB1c2VyLXNwYWNlIGFwcGxpY2F0aW9ucyBmb3IgYXJjaGl0ZWN0dXJlcyBiYXNlZAotICAgICAgICBvbiBBUk0sIE1JUFMsIFBvd2VyUEMsIHg4NiBhbmQgeDg2LTY0LgotICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0IGNyZWF0ZXMgYSBQb2t5IGRpc3RyaWJ1dGlvbi4KLSAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBjYW4gY3JlYXRlIHlvdXIgb3duIGRpc3RyaWJ1dGlvbiBieSBwcm92aWRpbmcga2V5Ci0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSdtZXRhZGF0YSc+TWV0YWRhdGE8L2xpbms+LgotICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nY3JlYXRpbmcteW91ci1vd24tZGlzdHJpYnV0aW9uJz5DcmVhdGluZyBZb3VyIE93biBEaXN0cmlidXRpb248L2xpbms+IgotICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAgICAgICAgPC9ub3RlPgotICAgICAgICBXaGlsZSB0aGUgWW9jdG8gUHJvamVjdCBkb2VzIG5vdCBwcm92aWRlIGEgc3RyaWN0IHRlc3RpbmcgZnJhbWV3b3JrLAotICAgICAgICBpdCBkb2VzIHByb3ZpZGUgb3IgZ2VuZXJhdGUgZm9yIHlvdSBhcnRpZmFjdHMgdGhhdCBsZXQgeW91IHBlcmZvcm0gdGFyZ2V0LWxldmVsIGFuZAotICAgICAgICBlbXVsYXRlZCB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcuCi0gICAgICAgIEFkZGl0aW9uYWxseSwgaWYgeW91IGFyZSBhbiA8dHJhZGVtYXJrIGNsYXNzPSd0cmFkZSc+RWNsaXBzZTwvdHJhZGVtYXJrPgotICAgICAgICBJREUgdXNlciwgeW91IGNhbiBpbnN0YWxsIGFuIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbiB0byBhbGxvdyB5b3UgdG8KLSAgICAgICAgZGV2ZWxvcCB3aXRoaW4gdGhhdCBmYW1pbGlhciBlbnZpcm9ubWVudC4KLSAgICA8L3BhcmE+Ci08L3NlY3Rpb24+Ci0KLTxzZWN0aW9uIGlkPSdnZXR0aW5nLXNldHVwJz4KLSAgICA8dGl0bGU+R2V0dGluZyBTZXQgVXA8L3RpdGxlPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIEhlcmUgaXMgd2hhdCB5b3UgbmVlZCB0byB1c2UgdGhlIFlvY3RvIFByb2plY3Q6CisgICAgICAgIE9uY2UgeW91ciBkZXZlbG9wbWVudCBob3N0IGlzIHNldCB1cCB0byB1c2UgdGhlIFlvY3RvIFByb2plY3QsCisgICAgICAgIGZ1cnRoZXIgc3RlcHMgYXJlIG5lY2Vzc2FyeSBkZXBlbmRpbmcgb24gd2hhdCB5b3Ugd2FudCB0bworICAgICAgICBhY2NvbXBsaXNoLgorICAgICAgICBTZWUgdGhlIGZvbGxvd2luZyByZWZlcmVuY2VzIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gcHJlcGFyZSBmb3IKKyAgICAgICAgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIGRldmVsb3BtZW50LCBrZXJuZWwgZGV2ZWxvcG1lbnQsIGFuZAorICAgICAgICBkZXZlbG9wbWVudCB1c2luZyB0aGUgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz4gSURFOgogICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Ib3N0IFN5c3RlbTo8L2VtcGhhc2lzPiAgWW91IHNob3VsZCBoYXZlIGEgcmVhc29uYWJseSBjdXJyZW50Ci0gICAgICAgICAgICAgICAgTGludXgtYmFzZWQgaG9zdCBzeXN0ZW0uCi0gICAgICAgICAgICAgICAgWW91IHdpbGwgaGF2ZSB0aGUgYmVzdCByZXN1bHRzIHdpdGggYSByZWNlbnQgcmVsZWFzZSBvZiBGZWRvcmEsCi0gICAgICAgICAgICAgICAgb3BlblNVU0UsIERlYmlhbiwgVWJ1bnR1LCBvciBDZW50T1MgYXMgdGhlc2UgcmVsZWFzZXMgYXJlIGZyZXF1ZW50bHkgdGVzdGVkIGFnYWluc3QgdGhlIFlvY3RvIFByb2plY3QKLSAgICAgICAgICAgICAgICBhbmQgb2ZmaWNpYWxseSBzdXBwb3J0ZWQuCi0gICAgICAgICAgICAgICAgRm9yIGEgbGlzdCBvZiB0aGUgZGlzdHJpYnV0aW9ucyB1bmRlciB2YWxpZGF0aW9uIGFuZCB0aGVpciBzdGF0dXMsIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjZGV0YWlsZWQtc3VwcG9ydGVkLWRpc3Ryb3MnPlN1cHBvcnRlZCBMaW51eCBEaXN0cmlidXRpb25zPC91bGluaz4iIHNlY3Rpb24KLSAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsIGFuZCB0aGUgd2lraSBwYWdlIGF0Ci0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1dJS0lfVVJMOy93aWtpL0Rpc3RyaWJ1dGlvbl9TdXBwb3J0Jz5EaXN0cmlidXRpb24gU3VwcG9ydDwvdWxpbms+LjwvcGFyYT4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGFsc28gaGF2ZSBhYm91dCA1MCBHYnl0ZXMgb2YgZnJlZSBkaXNrIHNwYWNlIGZvciBidWlsZGluZyBpbWFnZXMuCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBhY2thZ2VzOjwvZW1waGFzaXM+ICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQotICAgICAgICAgICAgICAgIHJlcXVpcmVzIHRoYXQgY2VydGFpbiBwYWNrYWdlcyBleGlzdCBvbiB5b3VyIGRldmVsb3BtZW50IHN5c3RlbSAoZS5nLiBQeXRob24gMi43KS4KLSAgICAgICAgICAgICAgICBTZWUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjcGFja2FnZXMnPlRoZSBCdWlsZCBIb3N0IFBhY2thZ2VzPC91bGluaz4iCi0gICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydCBhbmQgdGhlCi0gICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlcXVpcmVkLXBhY2thZ2VzLWZvci10aGUtaG9zdC1kZXZlbG9wbWVudC1zeXN0ZW0nPlJlcXVpcmVkIFBhY2thZ2VzIGZvciB0aGUgSG9zdCBEZXZlbG9wbWVudCBTeXN0ZW08L3VsaW5rPiIKLSAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yIHRoZSBleGFjdAotICAgICAgICAgICAgICAgIHBhY2thZ2UgcmVxdWlyZW1lbnRzIGFuZCB0aGUgaW5zdGFsbGF0aW9uIGNvbW1hbmRzIHRvIGluc3RhbGwKLSAgICAgICAgICAgICAgICB0aGVtIGZvciB0aGUgc3VwcG9ydGVkIGRpc3RyaWJ1dGlvbnMuCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0gaWQ9J2xvY2FsLXlwLXJlbGVhc2UnPjxwYXJhPjxlbXBoYXNpcz5Zb2N0byBQcm9qZWN0IFJlbGVhc2U6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBZb3UgbmVlZCBhIHJlbGVhc2Ugb2YgdGhlIFlvY3RvIFByb2plY3QgbG9jYWxseSBpbnN0YWxsZWQgb24KLSAgICAgICAgICAgICAgICB5b3VyIGRldmVsb3BtZW50IHN5c3RlbS4KLSAgICAgICAgICAgICAgICBUaGUgZG9jdW1lbnRhdGlvbiByZWZlcnMgdG8gdGhpcyBzZXQgb2YgbG9jYWxseSBpbnN0YWxsZWQgZmlsZXMKLSAgICAgICAgICAgICAgICBhcyB0aGUgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCi0gICAgICAgICAgICAgICAgWW91IGNyZWF0ZSB5b3VyIFNvdXJjZSBEaXJlY3RvcnkgYnkgdXNpbmcKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdnaXQnPkdpdDwvbGluaz4gdG8gY2xvbmUgYSBsb2NhbCBjb3B5Ci0gICAgICAgICAgICAgICAgb2YgdGhlIHVwc3RyZWFtIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gcmVwb3NpdG9yeSwKLSAgICAgICAgICAgICAgICBvciBieSBkb3dubG9hZGluZyBhbmQgdW5wYWNraW5nIGEgdGFyYmFsbCBvZiBhbiBvZmZpY2lhbAotICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZS4KLSAgICAgICAgICAgICAgICBUaGUgcHJlZmVycmVkIG1ldGhvZCBpcyB0byBjcmVhdGUgYSBjbG9uZSBvZiB0aGUgcmVwb3NpdG9yeS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICAgICAgPHBhcmE+V29ya2luZyBmcm9tIGEgY29weSBvZiB0aGUgdXBzdHJlYW0gcmVwb3NpdG9yeSBhbGxvd3MgeW91Ci0gICAgICAgICAgICAgICAgdG8gY29udHJpYnV0ZSBiYWNrIGludG8gdGhlIFlvY3RvIFByb2plY3Qgb3Igc2ltcGx5IHdvcmsgd2l0aAotICAgICAgICAgICAgICAgIHRoZSBsYXRlc3Qgc29mdHdhcmUgb24gYSBkZXZlbG9wbWVudCBicmFuY2guCi0gICAgICAgICAgICAgICAgQmVjYXVzZSBHaXQgbWFpbnRhaW5zIGFuZCBjcmVhdGVzIGFuIHVwc3RyZWFtIHJlcG9zaXRvcnkgd2l0aAotICAgICAgICAgICAgICAgIGEgY29tcGxldGUgaGlzdG9yeSBvZiBjaGFuZ2VzIGFuZCB5b3UgYXJlIHdvcmtpbmcgd2l0aCBhIGxvY2FsCi0gICAgICAgICAgICAgICAgY2xvbmUgb2YgdGhhdCByZXBvc2l0b3J5LCB5b3UgaGF2ZSBhY2Nlc3MgdG8gYWxsIHRoZSBZb2N0bwotICAgICAgICAgICAgICAgIFByb2plY3QgZGV2ZWxvcG1lbnQgYnJhbmNoZXMgYW5kIHRhZyBuYW1lcyB1c2VkIGluIHRoZSB1cHN0cmVhbQotICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkuPC9wYXJhPgotICAgICAgICAgICAgICAgIDxub3RlPllvdSBjYW4gdmlldyB0aGUgWW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzIGF0Ci0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+PC91bGluaz4KLSAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgPHBhcmE+VGhlIGZvbGxvd2luZyB0cmFuc2NyaXB0IHNob3dzIGhvdyB0byBjbG9uZSB0aGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IEdpdCByZXBvc2l0b3J5IGludG8gdGhlIGN1cnJlbnQKLSAgICAgICAgICAgICAgICB3b3JraW5nIGRpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICBUaGUgY29tbWFuZCBjcmVhdGVzIHRoZSBsb2NhbCByZXBvc2l0b3J5IGluIGEgZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gR2l0IHVzZWQgd2l0aGluIHRoZSBZb2N0byBQcm9qZWN0LCBzZWUKLSAgICAgICAgICAgICAgICB0aGUgIjxsaW5rIGxpbmtlbmQ9J2dpdCc+R2l0PC9saW5rPiIgc2VjdGlvbi4KLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kKLSAgICAgQ2xvbmluZyBpbnRvICdwb2t5Jy4uLgotICAgICByZW1vdGU6IENvdW50aW5nIG9iamVjdHM6IDIyNjc5MCwgZG9uZS4KLSAgICAgcmVtb3RlOiBDb21wcmVzc2luZyBvYmplY3RzOiAxMDAlICg1NzQ2NS81NzQ2NSksIGRvbmUuCi0gICAgIHJlbW90ZTogVG90YWwgMjI2NzkwIChkZWx0YSAxNjUyMTIpLCByZXVzZWQgMjI1ODg3IChkZWx0YSAxNjQzMjcpCi0gICAgIFJlY2VpdmluZyBvYmplY3RzOiAxMDAlICgyMjY3OTAvMjI2NzkwKSwgMTAwLjk4IE1pQiB8IDI2MyBLaUIvcywgZG9uZS4KLSAgICAgUmVzb2x2aW5nIGRlbHRhczogMTAwJSAoMTY1MjEyLzE2NTIxMiksIGRvbmUuCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT4KLSAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgYW5vdGhlciBleGFtcGxlIG9mIGhvdyB0byBzZXQgdXAgeW91ciBvd24gbG9jYWwgR2l0Ci0gICAgICAgICAgICAgICAgcmVwb3NpdG9yaWVzLCBzZWUgdGhpcwotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9UcmFuc2NyaXB0Ol9mcm9tX2dpdF9jaGVja291dF90b19tZXRhLWludGVsX0JTUCc+Ci0gICAgICAgICAgICAgICAgd2lraSBwYWdlPC91bGluaz4sIHdoaWNoIGRlc2NyaWJlcyBob3cgdG8gY3JlYXRlIGxvY2FsCi0gICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcmllcyBmb3IgYm90aAotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBnZXQgdGhlIFlvY3RvIFByb2plY3QgRmlsZXMgYnkgZG93bmxvYWRpbmcKLSAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2VzIGZyb20gdGhlCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iJllPQ1RPX0hPTUVfVVJMOyI+WW9jdG8gUHJvamVjdCB3ZWJzaXRlPC91bGluaz4uCi0gICAgICAgICAgICAgICAgRnJvbSB0aGUgd2Vic2l0ZSwgeW91IGp1c3QgY2xpY2sgIkRvd25sb2FkcyIgaW4gdGhlIG5hdmlnYXRpb24KLSAgICAgICAgICAgICAgICBwYW5lIHRvIHRoZSBsZWZ0IHRvIGRpc3BsYXkgYWxsIFlvY3RvIFByb2plY3QgZG93bmxvYWRzLgotICAgICAgICAgICAgICAgIEN1cnJlbnQgYW5kIGFyY2hpdmVkIHJlbGVhc2VzIGFyZSBhdmFpbGFibGUgZm9yIGRvd25sb2FkLgotICAgICAgICAgICAgICAgIE5pZ2h0bHkgYW5kIGRldmVsb3BtZW50YWwgYnVpbGRzIGFyZSBhbHNvIG1haW50YWluZWQgYXQKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSImWU9DVE9fQUJfTklHSFRMWV9VUkw7Ij48L3VsaW5rPi4KLSAgICAgICAgICAgICAgICBPbmUgZmluYWwgc2l0ZSB5b3UgY2FuIHZpc2l0IGZvciBpbmZvcm1hdGlvbiBvbiBZb2N0byBQcm9qZWN0Ci0gICAgICAgICAgICAgICAgcmVsZWFzZXMgaXMgdGhlCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1dJS0lfVVJMOy93aWtpL1JlbGVhc2VzJz5SZWxlYXNlczwvdWxpbms+Ci0gICAgICAgICAgICAgICAgd2lraS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbSBpZD0nbG9jYWwta2VybmVsLWZpbGVzJz48cGFyYT48ZW1waGFzaXM+WW9jdG8gUHJvamVjdCBLZXJuZWw6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGdvaW5nIHRvIGJlIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGEgc3VwcG9ydGVkIFlvY3RvIFByb2plY3Qga2VybmVsLCB5b3UKLSAgICAgICAgICAgICAgICBuZWVkIHRvIGVzdGFibGlzaCBsb2NhbCBjb3BpZXMgb2YgdGhlIHNvdXJjZS4KLSAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgR2l0IHJlcG9zaXRvcmllcyBvZiBzdXBwb3J0ZWQgWW9jdG8gUHJvamVjdCBrZXJuZWxzIG9yZ2FuaXplZCB1bmRlcgotICAgICAgICAgICAgICAgICJZb2N0byBMaW51eCBLZXJuZWwiIGluIHRoZSBZb2N0byBQcm9qZWN0IFNvdXJjZSBSZXBvc2l0b3JpZXMgYXQKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2knPjwvdWxpbms+LjwvcGFyYT4KLSAgICAgICAgICAgICAgICA8cGFyYT5UaGlzIHNldHVwIGNhbiBpbnZvbHZlIGNyZWF0aW5nIGEgYmFyZSBjbG9uZSBvZiB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgYW5kIHRoZW4KLSAgICAgICAgICAgICAgICBjb3B5aW5nIHRoYXQgY2xvbmVkIHJlcG9zaXRvcnkuCi0gICAgICAgICAgICAgICAgWW91IGNhbiBjcmVhdGUgdGhlIGJhcmUgY2xvbmUgYW5kIHRoZSBjb3B5IG9mIHRoZSBiYXJlIGNsb25lIGFueXdoZXJlIHlvdSBsaWtlLgotICAgICAgICAgICAgICAgIEZvciBzaW1wbGljaXR5LCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBjcmVhdGUgdGhlc2Ugc3RydWN0dXJlcyBvdXRzaWRlIG9mIHRoZQotICAgICAgICAgICAgICAgIFNvdXJjZSBEaXJlY3RvcnksIHdoaWNoIGlzIHVzdWFsbHkgbmFtZWQgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPi48L3BhcmE+Ci0gICAgICAgICAgICAgICAgPHBhcmE+QXMgYW4gZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB0cmFuc2NyaXB0IHNob3dzIGhvdyB0byBjcmVhdGUgdGhlIGJhcmUgY2xvbmUKLSAgICAgICAgICAgICAgICBvZiB0aGUgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTk8L2ZpbGVuYW1lPiBrZXJuZWwgYW5kIHRoZW4gY3JlYXRlIGEgY29weSBvZgotICAgICAgICAgICAgICAgIHRoYXQgY2xvbmUuCi0gICAgICAgICAgICAgICAgPG5vdGU+V2hlbiB5b3UgaGF2ZSBhIGxvY2FsIFlvY3RvIFByb2plY3Qga2VybmVsIEdpdCByZXBvc2l0b3J5LCB5b3UgY2FuCi0gICAgICAgICAgICAgICAgcmVmZXJlbmNlIHRoYXQgcmVwb3NpdG9yeSByYXRoZXIgdGhhbiB0aGUgdXBzdHJlYW0gR2l0IHJlcG9zaXRvcnkgYXMKLSAgICAgICAgICAgICAgICBwYXJ0IG9mIHRoZSA8ZmlsZW5hbWU+Y2xvbmU8L2ZpbGVuYW1lPiBjb21tYW5kLgotICAgICAgICAgICAgICAgIERvaW5nIHNvIGNhbiBzcGVlZCB1cCB0aGUgcHJvY2Vzcy48L25vdGU+PC9wYXJhPgotICAgICAgICAgICAgICAgIDxwYXJhPkluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgdGhlIGJhcmUgY2xvbmUgaXMgbmFtZWQKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOS5naXQ8L2ZpbGVuYW1lPiwgd2hpbGUgdGhlCi0gICAgICAgICAgICAgICAgY29weSBpcyBuYW1lZCA8ZmlsZW5hbWU+bXktbGludXgteW9jdG8tMy4xOS13b3JrPC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGdpdCBjbG9uZSAtLWJhcmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy4xOSBsaW51eC15b2N0by0zLjE5LmdpdAotICAgICBDbG9uaW5nIGludG8gYmFyZSByZXBvc2l0b3J5ICdsaW51eC15b2N0by0zLjE5LmdpdCcuLi4KLSAgICAgcmVtb3RlOiBDb3VudGluZyBvYmplY3RzOiAzOTgzMjU2LCBkb25lLgotICAgICByZW1vdGU6IENvbXByZXNzaW5nIG9iamVjdHM6IDEwMCUgKDYwNTAwNi82MDUwMDYpLCBkb25lLgotICAgICByZW1vdGU6IFRvdGFsIDM5ODMyNTYgKGRlbHRhIDMzNTI4MzIpLCByZXVzZWQgMzk3NDUwMyAoZGVsdGEgMzM0NDA3OSkKLSAgICAgUmVjZWl2aW5nIG9iamVjdHM6IDEwMCUgKDM5ODMyNTYvMzk4MzI1NiksIDg0My42NiBNaUIgfCAxLjA3IE1pQi9zLCBkb25lLgotICAgICBSZXNvbHZpbmcgZGVsdGFzOiAxMDAlICgzMzUyODMyLzMzNTI4MzIpLCBkb25lLgotICAgICBDaGVja2luZyBjb25uZWN0aXZpdHkuLi4gZG9uZS4KLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPgotICAgICAgICAgICAgICAgIDxwYXJhPk5vdyBjcmVhdGUgYSBjbG9uZSBvZiB0aGUgYmFyZSBjbG9uZSBqdXN0IGNyZWF0ZWQ6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGdpdCBjbG9uZSBsaW51eC15b2N0by0zLjE5LmdpdCBteS1saW51eC15b2N0by0zLjE5LXdvcmsKLSAgICAgQ2xvbmluZyBpbnRvICdteS1saW51eC15b2N0by0zLjE5LXdvcmsnLi4uCi0gICAgIGRvbmUuCi0gICAgIENoZWNraW5nIG91dCBmaWxlczogMTAwJSAoNDg0NDAvNDg0NDApLCBkb25lLgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbSBpZD0nbWV0YS15b2N0by1rZXJuZWwtZXh0cmFzLXJlcG8nPjxwYXJhPjxlbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1ldGEteW9jdG8ta2VybmVsLWV4dHJhczwvZmlsZW5hbWU+IEdpdCBSZXBvc2l0b3J5PC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5tZXRhLXlvY3RvLWtlcm5lbC1leHRyYXM8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSBjb250YWlucyBNZXRhZGF0YSBuZWVkZWQKLSAgICAgICAgICAgICAgICBvbmx5IGlmIHlvdSBhcmUgbW9kaWZ5aW5nIGFuZCBidWlsZGluZyB0aGUga2VybmVsIGltYWdlLgotICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIGl0IGNvbnRhaW5zIHRoZSBrZXJuZWwgQml0QmFrZSBhcHBlbmQgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikKLSAgICAgICAgICAgICAgICBmaWxlcyB0aGF0IHlvdQotICAgICAgICAgICAgICAgIGVkaXQgdG8gcG9pbnQgdG8geW91ciBsb2NhbGx5IG1vZGlmaWVkIGtlcm5lbCBzb3VyY2UgZmlsZXMgYW5kIHRvIGJ1aWxkIHRoZSBrZXJuZWwKLSAgICAgICAgICAgICAgICBpbWFnZS4KLSAgICAgICAgICAgICAgICBQb2ludGluZyB0byB0aGVzZSBsb2NhbCBmaWxlcyBpcyBtdWNoIG1vcmUgZWZmaWNpZW50IHRoYW4gcmVxdWlyaW5nIGEgZG93bmxvYWQgb2YgdGhlCi0gICAgICAgICAgICAgICAga2VybmVsJ3Mgc291cmNlIGZpbGVzIGZyb20gdXBzdHJlYW0gZWFjaCB0aW1lIHlvdSBtYWtlIGNoYW5nZXMgdG8gdGhlIGtlcm5lbC48L3BhcmE+Ci0gICAgICAgICAgICAgICAgPHBhcmE+WW91IGNhbiBmaW5kIHRoZSA8ZmlsZW5hbWU+bWV0YS15b2N0by1rZXJuZWwtZXh0cmFzPC9maWxlbmFtZT4gR2l0IFJlcG9zaXRvcnkgaW4gdGhlCi0gICAgICAgICAgICAgICAgIllvY3RvIE1ldGFkYXRhIExheWVycyIgYXJlYSBvZiB0aGUgWW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzIGF0Ci0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpJz48L3VsaW5rPi4KLSAgICAgICAgICAgICAgICBJdCBpcyBnb29kIHByYWN0aWNlIHRvIGNyZWF0ZSB0aGlzIEdpdCByZXBvc2l0b3J5IGluc2lkZSB0aGUgU291cmNlIERpcmVjdG9yeS48L3BhcmE+Ci0gICAgICAgICAgICAgICAgPHBhcmE+Rm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgdGhhdCBjcmVhdGVzIHRoZSA8ZmlsZW5hbWU+bWV0YS15b2N0by1rZXJuZWwtZXh0cmFzPC9maWxlbmFtZT4gR2l0Ci0gICAgICAgICAgICAgICAgcmVwb3NpdG9yeSBpbnNpZGUgdGhlIFNvdXJjZSBEaXJlY3RvcnksIHdoaWNoIGlzIG5hbWVkIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBpbiB0aGlzIGNhc2U6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGNkIH4vcG9reQotICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9tZXRhLXlvY3RvLWtlcm5lbC1leHRyYXMgbWV0YS15b2N0by1rZXJuZWwtZXh0cmFzCi0gICAgIENsb25pbmcgaW50byAnbWV0YS15b2N0by1rZXJuZWwtZXh0cmFzJy4uLgotICAgICByZW1vdGU6IENvdW50aW5nIG9iamVjdHM6IDcyNywgZG9uZS4KLSAgICAgcmVtb3RlOiBDb21wcmVzc2luZyBvYmplY3RzOiAxMDAlICg0NTIvNDUyKSwgZG9uZS4KLSAgICAgcmVtb3RlOiBUb3RhbCA3MjcgKGRlbHRhIDI2MCksIHJldXNlZCA3MTkgKGRlbHRhIDI1MikKLSAgICAgUmVjZWl2aW5nIG9iamVjdHM6IDEwMCUgKDcyNy83MjcpLCA1MzYuMzYgS2lCIHwgMjQwIEtpQi9zLCBkb25lLgotICAgICBSZXNvbHZpbmcgZGVsdGFzOiAxMDAlICgyNjAvMjYwKSwgZG9uZS4KLSAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdzdXBwb3J0ZWQtYm9hcmQtc3VwcG9ydC1wYWNrYWdlcy0oYnNwcyknPjxlbXBoYXNpcz5TdXBwb3J0ZWQgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcyk6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBzdXBwb3J0cyBtYW55IEJTUHMsIHdoaWNoIGFyZSBtYWludGFpbmVkIGluCi0gICAgICAgICAgICAgICAgdGhlaXIgb3duIGxheWVycyBvciBpbiBsYXllcnMgZGVzaWduZWQgdG8gY29udGFpbiBzZXZlcmFsCi0gICAgICAgICAgICAgICAgQlNQcy4KLSAgICAgICAgICAgICAgICBUbyBnZXQgYW4gaWRlYSBvZiBtYWNoaW5lIHN1cHBvcnQgdGhyb3VnaCBCU1AgbGF5ZXJzLCB5b3UgY2FuCi0gICAgICAgICAgICAgICAgbG9vayBhdCB0aGUKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fUkVMRUFTRV9ETF9VUkw7L21hY2hpbmVzJz5pbmRleCBvZiBtYWNoaW5lczwvdWxpbms+Ci0gICAgICAgICAgICAgICAgZm9yIHRoZSByZWxlYXNlLjwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBZb2N0byBQcm9qZWN0IHVzZXMgdGhlIGZvbGxvd2luZyBCU1AgbGF5ZXIgbmFtaW5nCi0gICAgICAgICAgICAgICAgc2NoZW1lOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICB3aGVyZSA8cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPiBpcyB0aGUgcmVjb2duaXplZAotICAgICAgICAgICAgICAgIEJTUCBuYW1lLgotICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIG1ldGEtcmFzcGJlcnJ5cGkKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkJTUCBEZXZlbG9wbWVudDo8L2VtcGhhc2lzPgogICAgICAgICAgICAgICAgIFNlZSB0aGUKLSAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwLWxheWVycyc+QlNQIExheWVyczwvdWxpbms+IgorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNwcmVwYXJpbmcteW91ci1idWlsZC1ob3N0LXRvLXdvcmstd2l0aC1ic3AtbGF5ZXJzJz5QcmVwYXJpbmcgWW91ciBCdWlsZCBIb3N0IHRvIFdvcmsgV2l0aCBCU1AgTGF5ZXJzPC91bGluaz4iCiAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkKLSAgICAgICAgICAgICAgICBEZXZlbG9wZXIncyBHdWlkZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBCU1AgTGF5ZXJzLjwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPkEgdXNlZnVsIEdpdCByZXBvc2l0b3J5IHJlbGVhc2VkIHdpdGggdGhlIFlvY3RvCi0gICAgICAgICAgICAgICAgUHJvamVjdCBpcyA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+LCB3aGljaCBpcyBhCi0gICAgICAgICAgICAgICAgcGFyZW50IGxheWVyIHRoYXQgY29udGFpbnMgbWFueSBzdXBwb3J0ZWQKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNic3AtbGF5ZXJzJz5CU1AgTGF5ZXJzPC91bGluaz4uCi0gICAgICAgICAgICAgICAgWW91IGNhbiBsb2NhdGUgdGhlIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gR2l0Ci0gICAgICAgICAgICAgICAgcmVwb3NpdG9yeSBpbiB0aGUgIllvY3RvIE1ldGFkYXRhIExheWVycyIgYXJlYSBvZiB0aGUgWW9jdG8KLSAgICAgICAgICAgICAgICBQcm9qZWN0IFNvdXJjZSBSZXBvc2l0b3JpZXMgYXQKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2knPjwvdWxpbms+LjwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPlVzaW5nCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZ2l0Jz5HaXQ8L2xpbms+IHRvIGNyZWF0ZSBhIGxvY2FsIGNsb25lIG9mIHRoZQotICAgICAgICAgICAgICAgIHVwc3RyZWFtIHJlcG9zaXRvcnkgY2FuIGJlIGhlbHBmdWwgaWYgeW91IGFyZSB3b3JraW5nIHdpdGgKLSAgICAgICAgICAgICAgICBCU1BzLgotICAgICAgICAgICAgICAgIFR5cGljYWxseSwgeW91IHNldCB1cCB0aGUgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3J5IGluc2lkZSB0aGUgU291cmNlIERpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB0cmFuc2NyaXB0IHNob3dzIHRoZSBzdGVwcyB0byBjbG9uZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gd29yayBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBicmFuY2ggdGhhdCBtYXRjaGVzIHlvdXIKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPikgYnJhbmNoLgotICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgY2hlY2tlZCBvdXQgdGhlICJtYXN0ZXIiIGJyYW5jaAotICAgICAgICAgICAgICAgICAgICBvZiA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IGFuZCB5b3UgYXJlIGdvaW5nIHRvIHVzZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+LCBiZSBzdXJlIHRvIGNoZWNrb3V0IHRoZQotICAgICAgICAgICAgICAgICAgICAibWFzdGVyIiBicmFuY2ggb2YgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGNkIH4vcG9reQotICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9tZXRhLWludGVsLmdpdAotICAgICBDbG9uaW5nIGludG8gJ21ldGEtaW50ZWwnLi4uCi0gICAgIHJlbW90ZTogQ291bnRpbmcgb2JqZWN0czogMTE5MTcsIGRvbmUuCi0gICAgIHJlbW90ZTogQ29tcHJlc3Npbmcgb2JqZWN0czogMTAwJSAoMzg0Mi8zODQyKSwgZG9uZS4KLSAgICAgcmVtb3RlOiBUb3RhbCAxMTkxNyAoZGVsdGEgNjg0MCksIHJldXNlZCAxMTY5OSAoZGVsdGEgNjYyMikKLSAgICAgUmVjZWl2aW5nIG9iamVjdHM6IDEwMCUgKDExOTE3LzExOTE3KSwgMi45MiBNaUIgfCAyLjg4IE1pQi9zLCBkb25lLgotICAgICBSZXNvbHZpbmcgZGVsdGFzOiAxMDAlICg2ODQwLzY4NDApLCBkb25lLgotICAgICBDaGVja2luZyBjb25uZWN0aXZpdHkuLi4gZG9uZS4KLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+VGhlIHNhbWUKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvVHJhbnNjcmlwdDpfZnJvbV9naXRfY2hlY2tvdXRfdG9fbWV0YS1pbnRlbF9CU1AnPndpa2kgcGFnZTwvdWxpbms+Ci0gICAgICAgICAgICAgICAgcmVmZXJlbmNlZCBlYXJsaWVyIGNvdmVycyBob3cgdG8gc2V0IHVwIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgRGV2ZWxvcGVyJ3MgR3VpZGUuCiAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkVjbGlwc2UgWW9jdG8gUGx1Zy1pbjo8L2VtcGhhc2lzPiAgSWYgeW91IGFyZSBkZXZlbG9waW5nCi0gICAgICAgICAgICAgICAgYXBwbGljYXRpb25zIHVzaW5nIHRoZSBFY2xpcHNlIEludGVncmF0ZWQgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgKElERSksCi0gICAgICAgICAgICAgICAgeW91IHdpbGwgbmVlZCB0aGlzIHBsdWctaW4uCisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPktlcm5lbCBEZXZlbG9wbWVudDo8L2VtcGhhc2lzPgogICAgICAgICAgICAgICAgIFNlZSB0aGUKLSAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfU0RLX1VSTDsjc2RrLWFwcGVuZGl4LWxhdGVzdC15cC1lY2xpcHNlLXBsdWctaW4nPlVzaW5nIEVjbGlwc2U8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoU0RLKQotICAgICAgICAgICAgICAgIERldmVsb3BlcidzIEd1aWRlIGZvciBtb3JlIGluZm9ybWF0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsjcHJlcGFyaW5nLXRoZS1idWlsZC1ob3N0LXRvLXdvcmstb24tdGhlLWtlcm5lbCc+UHJlcGFyaW5nIHRoZSBCdWlsZCBIb3N0IHRvIFdvcmsgb24gdGhlIEtlcm5lbDwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+RWNsaXBzZSBEZXZlbG9wbWVudDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfU0RLX1VSTDsjc2RrLWVjbGlwc2UtcHJvamVjdCc+RGV2ZWxvcGluZyBBcHBsaWNhdGlvbnMgVXNpbmcgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz48L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBDaGFwdGVyIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BtZW50IGFuZCB0aGUKKyAgICAgICAgICAgICAgICBFeHRlbnNpYmxlIFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoZVNESykgbWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICA8L2l0ZW1pemVkbGlzdD4KICAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nc2V0dGluZy11cC1hLW5hdGl2ZS1saW51eC1ob3N0Jz4KKyAgICAgICAgPHRpdGxlPlNldHRpbmcgVXAgYSBOYXRpdmUgTGludXggSG9zdDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gcHJlcGFyZSBhIG5hdGl2ZSBMaW51eCBtYWNoaW5lIGFzIHlvdXIKKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgaG9zdDoKKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5Vc2UgYSBTdXBwb3J0ZWQgTGludXggRGlzdHJpYnV0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgaGF2ZSBhIHJlYXNvbmFibHkgY3VycmVudCBMaW51eC1iYXNlZCBob3N0CisgICAgICAgICAgICAgICAgICAgIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHdpbGwgaGF2ZSB0aGUgYmVzdCByZXN1bHRzIHdpdGggYSByZWNlbnQgcmVsZWFzZSBvZgorICAgICAgICAgICAgICAgICAgICBGZWRvcmEsIG9wZW5TVVNFLCBEZWJpYW4sIFVidW50dSwgb3IgQ2VudE9TIGFzIHRoZXNlCisgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VzIGFyZSBmcmVxdWVudGx5IHRlc3RlZCBhZ2FpbnN0IHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIGFuZCBvZmZpY2lhbGx5IHN1cHBvcnRlZC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGEgbGlzdCBvZiB0aGUgZGlzdHJpYnV0aW9ucyB1bmRlciB2YWxpZGF0aW9uIGFuZCB0aGVpcgorICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2RldGFpbGVkLXN1cHBvcnRlZC1kaXN0cm9zJz5TdXBwb3J0ZWQgTGludXggRGlzdHJpYnV0aW9uczwvdWxpbms+IiBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgYW5kIHRoZSB3aWtpIHBhZ2UgYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1dJS0lfVVJMOy93aWtpL0Rpc3RyaWJ1dGlvbl9TdXBwb3J0Jz5EaXN0cmlidXRpb24gU3VwcG9ydDwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5IYXZlIEVub3VnaCBGcmVlIE1lbW9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGhhdmUgYXQgbGVhc3QgNTAgR2J5dGVzIG9mIGZyZWUgZGlzayBzcGFjZQorICAgICAgICAgICAgICAgICAgICBmb3IgYnVpbGRpbmcgaW1hZ2VzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5NZWV0IE1pbmltYWwgVmVyc2lvbiBSZXF1aXJlbWVudHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc2hvdWxkIGJlIGFibGUgdG8gcnVuIG9uIGFueQorICAgICAgICAgICAgICAgICAgICBtb2Rlcm4gZGlzdHJpYnV0aW9uIHRoYXQgaGFzIHRoZSBmb2xsb3dpbmcgdmVyc2lvbnMgZm9yCisgICAgICAgICAgICAgICAgICAgIEdpdCwgdGFyLCBhbmQgUHl0aG9uLgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdpdCAxLjguMy4xIG9yIGdyZWF0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXIgMS4yNyBvciBncmVhdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHl0aG9uIDMuNC4wIG9yIGdyZWF0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICBJZiB5b3VyIGJ1aWxkIGhvc3QgZG9lcyBub3QgbWVldCBhbnkgb2YgdGhlc2UgdGhyZWUgbGlzdGVkCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gcmVxdWlyZW1lbnRzLCB5b3UgY2FuIHRha2Ugc3RlcHMgdG8gcHJlcGFyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIHNvIHRoYXQgeW91IGNhbiBzdGlsbCB1c2UgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlcXVpcmVkLWdpdC10YXItYW5kLXB5dGhvbi12ZXJzaW9ucyc+UmVxdWlyZWQgR2l0LCB0YXIsIGFuZCBQeXRob24gVmVyc2lvbnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsIGZvcgorICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+SW5zdGFsbCBEZXZlbG9wbWVudCBIb3N0IFBhY2thZ2VzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFJlcXVpcmVkIGRldmVsb3BtZW50IGhvc3QgcGFja2FnZXMgdmFyeSBkZXBlbmRpbmcgb24geW91cgorICAgICAgICAgICAgICAgICAgICBidWlsZCBtYWNoaW5lIGFuZCB3aGF0IHlvdSB3YW50IHRvIGRvIHdpdGggdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgICAgIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIENvbGxlY3RpdmVseSwgdGhlIG51bWJlciBvZiByZXF1aXJlZCBwYWNrYWdlcyBpcyBsYXJnZQorICAgICAgICAgICAgICAgICAgICBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGNvdmVyIGFsbCBjYXNlcy48L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIGxpc3RzIG9mIHJlcXVpcmVkIHBhY2thZ2VzIGZvciBhbGwgc2NlbmFyaW9zLAorICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZXF1aXJlZC1wYWNrYWdlcy1mb3ItdGhlLWhvc3QtZGV2ZWxvcG1lbnQtc3lzdGVtJz5SZXF1aXJlZCBQYWNrYWdlcyBmb3IgdGhlIEhvc3QgRGV2ZWxvcG1lbnQgU3lzdGVtPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBjb21wbGV0ZWQgdGhlIHByZXZpb3VzIHN0ZXBzLCB5b3UgYXJlIHJlYWR5IHRvCisgICAgICAgICAgICBjb250aW51ZSB1c2luZyBhIGdpdmVuIGRldmVsb3BtZW50IHBhdGggb24geW91ciBuYXRpdmUgTGludXgKKyAgICAgICAgICAgIG1hY2hpbmUuCisgICAgICAgICAgICBJZiB5b3UgYXJlIGdvaW5nIHRvIHVzZSBCaXRCYWtlLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY2xvbmluZy10aGUtcG9reS1yZXBvc2l0b3J5Jz5DbG9uaW5nIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IFJlcG9zaXRvcnk8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIElmIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBFeHRlbnNpYmxlIFNESywgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1NES19VUkw7I3Nkay1leHRlbnNpYmxlJz5Vc2luZyB0aGUgRXh0ZW5zaWJsZSBTREs8L3VsaW5rPiIKKyAgICAgICAgICAgIENoYXB0ZXIgaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgYW5kIHRoZQorICAgICAgICAgICAgRXh0ZW5zaWJsZSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKGVTREspIG1hbnVhbC4KKyAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHdvcmsgb24gdGhlIGtlcm5lbCwgc2VlIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7Jz5Zb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgICAgIElmIHlvdSBhcmUgZ29pbmcgdG8gdXNlIFRvYXN0ZXIsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19UT0FTVF9VUkw7I3RvYXN0ZXItbWFudWFsLXNldHVwLWFuZC11c2UnPlNldHRpbmcgVXAgYW5kIFVzaW5nIFRvYXN0ZXI8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFRvYXN0ZXIgVXNlciBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc2V0dGluZy11cC10by11c2UtY3JvcHMnPgorICAgICAgICA8dGl0bGU+U2V0dGluZyBVcCB0byBVc2UgQ1JPc3MgUGxhdGZvcm1TIChDUk9QUyk8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2l0aAorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL2Nyb3BzL2Fib3V0Lyc+Q1JPUFM8L3VsaW5rPiwKKyAgICAgICAgICAgIHdoaWNoIGxldmVyYWdlcworICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cuZG9ja2VyLmNvbS8nPkRvY2tlciBDb250YWluZXJzPC91bGluaz4sCisgICAgICAgICAgICB5b3UgY2FuIGNyZWF0ZSBhIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgdGhhdAorICAgICAgICAgICAgaXMgb3BlcmF0aW5nIHN5c3RlbSBhZ25vc3RpYy4KKyAgICAgICAgICAgIFlvdSBjYW4gc2V0IHVwIGEgY29udGFpbmVyIGluIHdoaWNoIHlvdSBjYW4gZGV2ZWxvcCB1c2luZyB0aGUKKyAgICAgICAgICAgIFlvY3RvIFByb2plY3Qgb24gYSBXaW5kb3dzLCBNYWMsIG9yIExpbnV4ICBtYWNoaW5lLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3cgdGhlc2UgZ2VuZXJhbCBzdGVwcyB0byBwcmVwYXJlIGEgV2luZG93cywgTWFjLCBvciBMaW51eAorICAgICAgICAgICAgbWFjaGluZSBhcyB5b3VyIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgaG9zdDoKKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5HbyB0byB0aGUgRG9ja2VyIEluc3RhbGxhdGlvbiBTaXRlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LmRvY2tlci5jb20vd2hhdC1kb2NrZXInPkRvY2tlcjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIGEgc29mdHdhcmUgY29udGFpbmVyIHBsYXRmb3JtIHRoYXQgeW91IG5lZWQgdG8gaW5zdGFsbAorICAgICAgICAgICAgICAgICAgICBvbiB0aGUgaG9zdCBkZXZlbG9wbWVudCBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICBUbyBzdGFydCB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL2luc3RhbGxhdGlvbi8nPkRvY2tlciBJbnN0YWxsYXRpb248L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBzaXRlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5DaG9vc2UgWW91ciBEb2NrZXIgRWRpdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBEb2NrZXIgY29tZXMgaW4gc2V2ZXJhbCBlZGl0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRoZSBZb2N0byBQcm9qZWN0LCB0aGUgc3RhYmxlIGNvbW11bml0eSBlZGl0aW9uCisgICAgICAgICAgICAgICAgICAgIChpLmUuICJEb2NrZXIgQ0UgU3RhYmxlIikgaXMgYWRlcXVhdGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCB0aGUgRG9ja2VyIGVkaXRpb25zIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIHNpdGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkdvIHRoZSBJbnN0YWxsIFNpdGUgZm9yIFlvdXIgUGxhdGZvcm06PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ2xpY2sgdGhlIGxpbmsgZm9yIHRoZSBEb2NrZXIgZWRpdGlvbiBhc3NvY2lhdGVkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgeW91ciBkZXZlbG9wbWVudCBob3N0IG1hY2hpbmUncyBuYXRpdmUgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3VyIG1hY2hpbmUgaXMgcnVubmluZyBNaWNyb3NvZnQKKyAgICAgICAgICAgICAgICAgICAgV2luZG93cyBWZXJzaW9uIDEwIGFuZCB5b3Ugd2FudCB0aGUgRG9ja2VyIENFIFN0YWJsZQorICAgICAgICAgICAgICAgICAgICBlZGl0aW9uLCBjbGljayB0aGF0IGxpbmsgdW5kZXIgIlN1cHBvcnRlZCBQbGF0Zm9ybXMiLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5VbmRlcnN0YW5kIFdoYXQgWW91IE5lZWQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGluc3RhbGwgcGFnZSBoYXMgcHJlLXJlcXVpc2l0ZXMgeW91ciBtYWNoaW5lIG11c3QKKyAgICAgICAgICAgICAgICAgICAgbWVldC4KKyAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB5b3UgcmVhZCB0aHJvdWdoIHRoaXMgcGFnZSBhbmQgbWFrZSBzdXJlIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZSBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzIHRvIHJ1biBEb2NrZXIuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgbWFjaGluZSBkb2VzIG5vdCBtZWV0IHRoZSByZXF1aXJlbWVudHMsIHRoZSBwYWdlCisgICAgICAgICAgICAgICAgICAgIGhhcyBpbnN0cnVjdGlvbnMgdG8gaGFuZGxlIGV4Y2VwdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0byBydW4gRG9ja2VyIG9uIFdpbmRvd3MgMTAsIHlvdSBtdXN0IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgdGhlIHBybyB2ZXJzaW9uIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSB0aGUgaG9tZSB2ZXJzaW9uLCB5b3UgbmVlZCB0byBpbnN0YWxsIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL2RvY3MuZG9ja2VyLmNvbS90b29sYm94L292ZXJ2aWV3LyNyZWFkeS10by1nZXQtc3RhcnRlZCc+RG9ja2VyIFRvb2xib3g8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPkFub3RoZXIgZXhhbXBsZSBpcyB0aGF0IGEgV2luZG93cyBtYWNoaW5lIG5lZWRzIHRvCisgICAgICAgICAgICAgICAgICAgIGhhdmUgTWljcm9zb2Z0IEh5cGVyLVYuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIGEgbGVnYWN5IHZlcnNpb24gb2YgdGhlIHRoZSBNaWNyb3NvZnQKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW5nIHN5c3RlbSBvciBmb3IgYW55IG90aGVyIHJlYXNvbiB5b3UgZG8gbm90IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgTWljcm9zb2Z0IEh5cGVyLVYsIHlvdSB3b3VsZCBoYXZlIHRvIGVudGVyIHRoZSBCSU9TIGFuZAorICAgICAgICAgICAgICAgICAgICBlbmFibGUgdmlydHVhbGl6YXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkluc3RhbGwgdGhlIFNvZnR3YXJlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgdW5kZXJzdG9vZCBhbGwgdGhlIHByZS1yZXF1aXNpdGVzLCB5b3UgY2FuCisgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkIGFuZCBpbnN0YWxsIHRoZSBhcHByb3ByaWF0ZSBzb2Z0d2FyZS4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgZm9yIHlvdXIgc3BlY2lmaWMgbWFjaGluZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgdGhlIHR5cGUgb2YgdGhlIHNvZnR3YXJlIHlvdSBuZWVkIHRvIGluc3RhbGwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPk9wdGlvbmFsbHkgT3JpZW50IFlvdXJzZWxmIFdpdGggRG9ja2Vyczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHVuZmFtaWxpYXIgd2l0aCBEb2NrZXJzIGFuZCB0aGUgY29udGFpbmVyCisgICAgICAgICAgICAgICAgICAgIGNvbmNlcHQsIHlvdSBjYW4gbGVhcm4gbW9yZSBoZXJlIC0KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZ2V0LXN0YXJ0ZWQvJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBiZSBhYmxlIHRvIGxhdW5jaCBEb2NrZXIgb3IgdGhlIERvY2tlciBUb29sYm94CisgICAgICAgICAgICAgICAgICAgIGFuZCBoYXZlIGEgdGVybWluYWwgc2hlbGwgb24geW91ciBkZXZlbG9wbWVudCBob3N0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5TZXQgVXAgdGhlIENvbnRhaW5lcnMgdG8gVXNlIHRoZSBZb2N0byBQcm9qZWN0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEdvIHRvCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vZ2l0aHViLmNvbS9jcm9wcy9kb2NrZXItd2luLW1hYy1kb2NzL3dpa2knPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCBmb2xsb3cgdGhlIGRpcmVjdGlvbnMgZm9yIHlvdXIgcGFydGljdWxhcgorICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBob3N0IChpLmUuIExpbnV4LCBNYWMsIG9yIFdpbmRvd3MpLjwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT5PbmNlIHlvdSBjb21wbGV0ZSB0aGUgc2V0dXAgaW5zdHJ1Y3Rpb25zIGZvciB5b3VyCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUsIHlvdSBoYXZlIHRoZSBQb2t5LCBFeHRlbnNpYmxlIFNESywgYW5kIFRvYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbmVycyBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY2xpY2sgdGhvc2UgbGlua3MgZnJvbSB0aGUgcGFnZSBhbmQgbGVhcm4gbW9yZQorICAgICAgICAgICAgICAgICAgICBhYm91dCB1c2luZyBlYWNoIG9mIHRob3NlIGNvbnRhaW5lcnMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgYSBjb250YWluZXIgc2V0IHVwLCBldmVyeXRoaW5nIGlzIGluIHBsYWNlIHRvCisgICAgICAgICAgICBkZXZlbG9wIGp1c3QgYXMgaWYgeW91IHdlcmUgcnVubmluZyBvbiBhIG5hdGl2ZSBMaW51eCBtYWNoaW5lLgorICAgICAgICAgICAgSWYgeW91IGFyZSBnb2luZyB0byB1c2UgdGhlIFBva3kgY29udGFpbmVyLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY2xvbmluZy10aGUtcG9reS1yZXBvc2l0b3J5Jz5DbG9uaW5nIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IFJlcG9zaXRvcnk8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIElmIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBFeHRlbnNpYmxlIFNESyBjb250YWluZXIsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyNzZGstZXh0ZW5zaWJsZSc+VXNpbmcgdGhlIEV4dGVuc2libGUgU0RLPC91bGluaz4iCisgICAgICAgICAgICBDaGFwdGVyIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BtZW50IGFuZCB0aGUKKyAgICAgICAgICAgIEV4dGVuc2libGUgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChlU0RLKSBtYW51YWwuCisgICAgICAgICAgICBJZiB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgVG9hc3RlciBjb250YWluZXIsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19UT0FTVF9VUkw7I3RvYXN0ZXItbWFudWFsLXNldHVwLWFuZC11c2UnPlNldHRpbmcgVXAgYW5kIFVzaW5nIFRvYXN0ZXI8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFRvYXN0ZXIgVXNlciBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CiA8L3NlY3Rpb24+CiAKLTxzZWN0aW9uIGlkPSdidWlsZGluZy1pbWFnZXMnPgotICAgIDx0aXRsZT5CdWlsZGluZyBJbWFnZXM8L3RpdGxlPgorPHNlY3Rpb24gaWQ9J3dvcmtpbmctd2l0aC15b2N0by1wcm9qZWN0LXNvdXJjZS1maWxlcyc+CisgICAgPHRpdGxlPldvcmtpbmcgV2l0aCBZb2N0byBQcm9qZWN0IFNvdXJjZSBGaWxlczwvdGl0bGU+CiAKICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGJ1aWxkIHByb2Nlc3MgY3JlYXRlcyBhbiBlbnRpcmUgTGludXggZGlzdHJpYnV0aW9uLCBpbmNsdWRpbmcgdGhlIHRvb2xjaGFpbiwgZnJvbSBzb3VyY2UuCi0gICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgdG9waWMsIHNlZSB0aGUKKyAgICAgICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHByb2NlZHVyZXMgcmVsYXRlZCB0byBsb2NhdGluZyBhbmQgc2VjdXJpbmcKKyAgICAgICAgWW9jdG8gUHJvamVjdCBmaWxlcy4KKyAgICAgICAgWW91IGVzdGFibGlzaCBhbmQgdXNlIHRoZXNlIGxvY2FsIGZpbGVzIHRvIHdvcmsgb24gcHJvamVjdHMuCisgICAgICAgIDxub3RlPjx0aXRsZT5Ob3RlczwvdGl0bGU+CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGNvbmNlcHRzIGFuZCBpbnRyb2R1Y3RvcnkgaW5mb3JtYXRpb24gYWJvdXQgR2l0IGFzIGl0CisgICAgICAgICAgICAgICAgICAgIGlzIHVzZWQgaW4gdGhlIFlvY3RvIFByb2plY3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2dpdCc+R2l0PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgY29uY2VwdHMgb24gWW9jdG8gUHJvamVjdCBzb3VyY2UgcmVwb3NpdG9yaWVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN5b2N0by1wcm9qZWN0LXJlcG9zaXRvcmllcyc+WW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4iCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nYWNjZXNzaW5nLXNvdXJjZS1yZXBvc2l0b3JpZXMnPgorICAgICAgICA8dGl0bGU+QWNjZXNzaW5nIFNvdXJjZSBSZXBvc2l0b3JpZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBtYWludGFpbnMgdXBzdHJlYW0gR2l0CisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2UtcmVwb3NpdG9yaWVzJz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4KKyAgICAgICAgICAgIHRoYXQgeW91IGNhbiBleGFtaW5lIGFuZCBhY2Nlc3MgdXNpbmcgYSBicm93c2VyLWJhc2VkIFVJOgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkFjY2VzcyBSZXBvc2l0b3JpZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgT3BlbiBhIGJyb3dzZXIgYW5kIGdvIHRvCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOyc+PC91bGluaz4gdG8gYWNjZXNzIHRoZQorICAgICAgICAgICAgICAgICAgICBHVUktYmFzZWQgaW50ZXJmYWNlIGludG8gdGhlIFlvY3RvIFByb2plY3Qgc291cmNlCisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+U2VsZWN0IGEgUmVwb3NpdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDbGljayBvbiBhbnkgcmVwb3NpdG9yeSBpbiB3aGljaCB5b3UgYXJlIGludGVyZXN0ZWQgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkZpbmQgdGhlIFVSTCBVc2VkIHRvIENsb25lIHRoZSBSZXBvc2l0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEF0IHRoZSBib3R0b20gb2YgdGhlIHBhZ2UsIG5vdGUgdGhlIFVSTCB1c2VkIHRvCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2dpdC1jb21tYW5kcy1jbG9uZSc+Y2xvbmU8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB0aGF0IHJlcG9zaXRvcnkgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiZZT0NUT19HSVRfVVJMOy9wb2t5PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5FeGFtaW5lIENoYW5nZSBIaXN0b3J5IG9mIHRoZSBSZXBvc2l0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEF0IHRoZSB0b3Agb2YgdGhlIHBhZ2UsIGNsaWNrIG9uIGFueSBicmFuY2ggaW4gd2hpY2ggeW91CisgICAgICAgICAgICAgICAgICAgIG1pZ2h0IGJlIGludGVyZXN0ZWQgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiZESVNUUk9fTkFNRV9OT19DQVA7PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHRoZW4gdmlldyB0aGUgY29tbWl0IGxvZyBvciB0cmVlIHZpZXcgZm9yIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYWNjZXNzaW5nLWluZGV4LW9mLXJlbGVhc2VzJz4KKyAgICAgICAgPHRpdGxlPkFjY2Vzc2luZyBJbmRleCBvZiBSZWxlYXNlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IG1haW50YWlucyBhbiBJbmRleCBvZiBSZWxlYXNlcyBhcmVhIHRoYXQgY29udGFpbnMKKyAgICAgICAgICAgIHJlbGF0ZWQgZmlsZXMgdGhhdCBjb250cmlidXRlIHRvIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgUmF0aGVyIHRoYW4gR2l0IHJlcG9zaXRvcmllcywgdGhlc2UgZmlsZXMgcmVwcmVzZW50IHNuYXBzaG90CisgICAgICAgICAgICB0YXJiYWxscy4KKyAgICAgICAgICAgIDxub3RlPjx0aXRsZT5UaXA8L3RpdGxlPgorICAgICAgICAgICAgICAgIFRoZSByZWNvbW1lbmRlZCBtZXRob2QgZm9yIGFjY2Vzc2luZyBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgY29tcG9uZW50cyBpcyB0byB1c2UgR2l0IHRvIGNsb25lIGEgcmVwb3NpdG9yeSBhbmQgd29yayBmcm9tCisgICAgICAgICAgICAgICAgd2l0aGluIHRoYXQgbG9jYWwgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICBUaGUgcHJvY2VkdXJlIGluIHRoaXMgc2VjdGlvbiBleGlzdHMgc2hvdWxkIHlvdSBkZXNpcmUgYQorICAgICAgICAgICAgICAgIHRhcmJhbGwgc25hcHNob3Qgb2YgYW55IGdpdmVuIGNvbXBvbmVudC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5BY2Nlc3MgdGhlIEluZGV4IG9mIFJlbGVhc2VzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE9wZW4gYSBicm93c2VyIGFuZCBnbyB0bworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRExfVVJMOy9yZWxlYXNlcyc+PC91bGluaz4gdG8gYWNjZXNzIHRoZQorICAgICAgICAgICAgICAgICAgICBJbmRleCBvZiBSZWxlYXNlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxpc3QgcmVwcmVzZW50cyByZWxlYXNlZCBjb21wb25lbnRzIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5lY2xpcHNlLXBsdWdpbjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2F0bzwvZmlsZW5hbWU+LCBhbmQgc28gb24pLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+eW9jdG88L2ZpbGVuYW1lPiBkaXJlY3RvcnkgY29udGFpbnMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBmdWxsIGFycmF5IG9mIHJlbGVhc2VkIFBva3kgdGFyYmFsbHMuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCBvZiBSZWxlYXNlcyB3YXMgaGlzdG9yaWNhbGx5IHVzZWQgZm9yIHZlcnkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVhcmx5IHJlbGVhc2VzIGFuZCBleGlzdHMgZm9yIHJldHJvYWN0aXZlCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZW5lc3Mgb25seS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5TZWxlY3QgYSBDb21wb25lbnQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ2xpY2sgb24gYW55IHJlbGVhc2VkIGNvbXBvbmVudCBpbiB3aGljaCB5b3UgYXJlIGludGVyZXN0ZWQKKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPnlvY3RvPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5GaW5kIHRoZSBUYXJiYWxsOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIERyaWxsIGRvd24gdG8gZmluZCB0aGUgYXNzb2NpYXRlZCB0YXJiYWxsLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgY2xpY2sgb24gPGZpbGVuYW1lPnlvY3RvLSZESVNUUk87PC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICAgICAgdmlldyBmaWxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgJkRJU1RSTzsKKyAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSAoZS5nLiA8ZmlsZW5hbWU+cG9reS0mRElTVFJPX05BTUVfTk9fQ0FQOy0mUE9LWVZFUlNJT047LnRhci5iejI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgdGhlIHJlbGVhc2VkIFBva3kgdGFyYmFsbCkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkRvd25sb2FkIHRoZSBUYXJiYWxsOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENsaWNrIGEgdGFyYmFsbCB0byBkb3dubG9hZCBhbmQgc2F2ZSBhIHNuYXBzaG90IG9mIGEKKyAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gY29tcG9uZW50LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmctdGhlLWRvd25sb2Fkcy1wYWdlJz4KKyAgICAgICAgPHRpdGxlPlVzaW5nIHRoZSBEb3dubG9hZHMgUGFnZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsnPllvY3RvIFByb2plY3QgV2Vic2l0ZTwvdWxpbms+CisgICAgICAgICAgICB1c2VzIGEgIkRvd25sb2FkcyIgYXJlYSBmcm9tIHdoaWNoIHlvdSBjYW4gbG9jYXRlIGFuZCBkb3dubG9hZAorICAgICAgICAgICAgdGFyYmFsbHMgb2YgYW55IFlvY3RvIFByb2plY3QgcmVsZWFzZS4KKyAgICAgICAgICAgIFJhdGhlciB0aGFuIEdpdCByZXBvc2l0b3JpZXMsIHRoZXNlIGZpbGVzIHJlcHJlc2VudCBzbmFwc2hvdAorICAgICAgICAgICAgdGFyYmFsbHMuCisgICAgICAgICAgICA8bm90ZT48dGl0bGU+VGlwPC90aXRsZT4KKyAgICAgICAgICAgICAgICBUaGUgcmVjb21tZW5kZWQgbWV0aG9kIGZvciBhY2Nlc3NpbmcgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIGNvbXBvbmVudHMgaXMgdG8gdXNlIEdpdCB0byBjbG9uZSBhIHJlcG9zaXRvcnkgYW5kIHdvcmsgZnJvbQorICAgICAgICAgICAgICAgIHdpdGhpbiB0aGF0IGxvY2FsIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgVGhlIHByb2NlZHVyZSBpbiB0aGlzIHNlY3Rpb24gZXhpc3RzIHNob3VsZCB5b3UgZGVzaXJlIGEKKyAgICAgICAgICAgICAgICB0YXJiYWxsIHNuYXBzaG90IG9mIGFueSBnaXZlbiBjb21wb25lbnQuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+R28gdG8gdGhlIFlvY3RvIFByb2plY3QgV2Vic2l0ZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBPcGVuIFRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7Jz5Zb2N0byBQcm9qZWN0IFdlYnNpdGU8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBpbiB5b3VyIGJyb3dzZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkdldCB0byB0aGUgRG93bmxvYWRzIEFyZWE6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ2xpY2sgdGhlICJEb3dubG9hZHMiIHRhYi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+U2VsZWN0IHRoZSBUeXBlIG9mIEZpbGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENsaWNrIHRoZSB0eXBlIG9mIGZpbGVzIHlvdSB3YW50IChpLmUgIkJ1aWxkIFN5c3RlbSIsCisgICAgICAgICAgICAgICAgICAgICJUb29scyIsIG9yICJCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1BzKSIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkxvY2F0ZSBhbmQgRG93bmxvYWQgdGhlIFRhcmJhbGw6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRnJvbSB0aGUgbGlzdCBvZiByZWxlYXNlcywgbG9jYXRlIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAgICAgICAgICAgICBkb3dubG9hZCBsaW5rIGFuZCBkb3dubG9hZCB0aGUgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdjbG9uaW5nLXRoZS1wb2t5LXJlcG9zaXRvcnknPgorICAgICAgICA8dGl0bGU+Q2xvbmluZyB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBSZXBvc2l0b3J5PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIHVzZSB0aGUgWW9jdG8gUHJvamVjdCwgeW91IG5lZWQgYSByZWxlYXNlIG9mIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICBsb2NhbGx5IGluc3RhbGxlZCBvbiB5b3VyIGRldmVsb3BtZW50IHN5c3RlbS4KKyAgICAgICAgICAgIFRoZSBsb2NhbGx5IGluc3RhbGxlZCBzZXQgb2YgZmlsZXMgaXMgcmVmZXJyZWQgdG8gYXMgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjcmVhdGUgeW91ciBTb3VyY2UgRGlyZWN0b3J5IGJ5IHVzaW5nCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNnaXQnPkdpdDwvdWxpbms+IHRvIGNsb25lIGEgbG9jYWwKKyAgICAgICAgICAgIGNvcHkgb2YgdGhlIHVwc3RyZWFtIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIDxub3RlPjx0aXRsZT5UaXA8L3RpdGxlPgorICAgICAgICAgICAgICAgIFRoZSBwcmVmZXJyZWQgbWV0aG9kIG9mIGdldHRpbmcgdGhlIFlvY3RvIFByb2plY3QgU291cmNlCisgICAgICAgICAgICAgICAgRGlyZWN0b3J5IHNldCB1cCBpcyB0byBjbG9uZSB0aGUgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIFdvcmtpbmcgZnJvbSBhIGNvcHkgb2YgdGhlIHVwc3RyZWFtIHJlcG9zaXRvcnkgYWxsb3dzIHlvdQorICAgICAgICAgICAgdG8gY29udHJpYnV0ZSBiYWNrIGludG8gdGhlIFlvY3RvIFByb2plY3Qgb3Igc2ltcGx5IHdvcmsgd2l0aAorICAgICAgICAgICAgdGhlIGxhdGVzdCBzb2Z0d2FyZSBvbiBhIGRldmVsb3BtZW50IGJyYW5jaC4KKyAgICAgICAgICAgIEJlY2F1c2UgR2l0IG1haW50YWlucyBhbmQgY3JlYXRlcyBhbiB1cHN0cmVhbSByZXBvc2l0b3J5IHdpdGgKKyAgICAgICAgICAgIGEgY29tcGxldGUgaGlzdG9yeSBvZiBjaGFuZ2VzIGFuZCB5b3UgYXJlIHdvcmtpbmcgd2l0aCBhIGxvY2FsCisgICAgICAgICAgICBjbG9uZSBvZiB0aGF0IHJlcG9zaXRvcnksIHlvdSBoYXZlIGFjY2VzcyB0byBhbGwgdGhlIFlvY3RvCisgICAgICAgICAgICBQcm9qZWN0IGRldmVsb3BtZW50IGJyYW5jaGVzIGFuZCB0YWcgbmFtZXMgdXNlZCBpbiB0aGUgdXBzdHJlYW0KKyAgICAgICAgICAgIHJlcG9zaXRvcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBzdGVwcyB0byBjcmVhdGUgYSBsb2NhbCB2ZXJzaW9uIG9mIHRoZQorICAgICAgICAgICAgdXBzdHJlYW0KKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Bva3knPjxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnkuCisgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+U2V0IFlvdXIgRGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEJlIGluIHRoZSBkaXJlY3Rvcnkgd2hlcmUgeW91IHdhbnQgdG8gY3JlYXRlIHlvdXIgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgY29weSBvZiBwb2t5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5DbG9uZSB0aGUgUmVwb3NpdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgY2xvbmVzIHRoZSByZXBvc2l0b3J5IGFuZCB1c2VzCisgICAgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IG5hbWUgInBva3kiIGZvciB5b3VyIGxvY2FsIHJlcG9zaXRvcnk6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reQorICAgICBDbG9uaW5nIGludG8gJ3Bva3knLi4uCisgICAgIHJlbW90ZTogQ291bnRpbmcgb2JqZWN0czogMzY3MTc4LCBkb25lLgorICAgICByZW1vdGU6IENvbXByZXNzaW5nIG9iamVjdHM6IDEwMCUgKDg4MTYxLzg4MTYxKSwgZG9uZS4KKyAgICAgcmVtb3RlOiBUb3RhbCAzNjcxNzggKGRlbHRhIDI3Mjc2MSksIHJldXNlZCAzNjY5NDIgKGRlbHRhIDI3MjUyNSkKKyAgICAgUmVjZWl2aW5nIG9iamVjdHM6IDEwMCUgKDM2NzE3OC8zNjcxNzgpLCAxMzMuMjYgTWlCIHwgNi40MCBNaUIvcywgZG9uZS4KKyAgICAgUmVzb2x2aW5nIGRlbHRhczogMTAwJSAoMjcyNzYxLzI3Mjc2MSksIGRvbmUuCisgICAgIENoZWNraW5nIGNvbm5lY3Rpdml0eS4uLiBkb25lLgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFVubGVzcyB5b3Ugc3BlY2lmeSBhIHNwZWNpZmljIGRldmVsb3BtZW50IGJyYW5jaCBvcgorICAgICAgICAgICAgICAgICAgICB0YWcgbmFtZSwgR2l0IGNsb25lcyB0aGUgIm1hc3RlciIgYnJhbmNoLCB3aGljaCByZXN1bHRzCisgICAgICAgICAgICAgICAgICAgIGluIGEgc25hcHNob3Qgb2YgdGhlIGxhdGVzdCBkZXZlbG9wbWVudCBjaGFuZ2VzIGZvcgorICAgICAgICAgICAgICAgICAgICAibWFzdGVyIi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjaGVjayBvdXQgYSBzcGVjaWZpYworICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBicmFuY2ggb3Igb24gaG93IHRvIGNoZWNrIG91dCBhIGxvY2FsCisgICAgICAgICAgICAgICAgICAgIGJyYW5jaCBiYXNlZCBvbiBhIHRhZyBuYW1lLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjaGVja2luZy1vdXQtYnktYnJhbmNoLWluLXBva3knPkNoZWNraW5nIE91dCBCeSBCcmFuY2ggaW4gUG9reTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdjaGVja291dC1vdXQtYnktdGFnLWluLXBva3knPkNoZWNraW5nIE91dCBCeSBUYWcgaW4gUG9reTwvbGluaz4iLAorICAgICAgICAgICAgICAgICAgICByZXNwZWN0aXZlbHkuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPk9uY2UgdGhlIHJlcG9zaXRvcnkgaXMgY3JlYXRlZCwgeW91IGNhbiBjaGFuZ2UgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhhdCBkaXJlY3RvcnkgYW5kIGNoZWNrIGl0cyBzdGF0dXMuCisgICAgICAgICAgICAgICAgICAgIEhlcmUsIHRoZSBzaW5nbGUgIm1hc3RlciIgYnJhbmNoIGV4aXN0cyBvbiB5b3VyIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICBhbmQgYnkgZGVmYXVsdCwgaXQgaXMgY2hlY2tlZCBvdXQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L3Bva3kKKyAgICAgJCBnaXQgc3RhdHVzCisgICAgIE9uIGJyYW5jaCBtYXN0ZXIKKyAgICAgWW91ciBicmFuY2ggaXMgdXAtdG8tZGF0ZSB3aXRoICdvcmlnaW4vbWFzdGVyJy4KKyAgICAgbm90aGluZyB0byBjb21taXQsIHdvcmtpbmcgZGlyZWN0b3J5IGNsZWFuCisgICAgICQgZ2l0IGJyYW5jaAorICAgICAqIG1hc3RlcgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFlvdXIgbG9jYWwgcmVwb3NpdG9yeSBvZiBwb2t5IGlzIGlkZW50aWNhbCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgdXBzdHJlYW0gcG9reSByZXBvc2l0b3J5IGF0IHRoZSB0aW1lIGZyb20gd2hpY2ggaXQgd2FzCisgICAgICAgICAgICAgICAgICAgIGNsb25lZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2NoZWNraW5nLW91dC1ieS1icmFuY2gtaW4tcG9reSc+CisgICAgICAgIDx0aXRsZT5DaGVja2luZyBPdXQgYnkgQnJhbmNoIGluIFBva3k8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgY2xvbmUgdGhlIHVwc3RyZWFtIHBva3kgcmVwb3NpdG9yeSwgeW91IGhhdmUgYWNjZXNzIHRvCisgICAgICAgICAgICBhbGwgaXRzIGRldmVsb3BtZW50IGJyYW5jaGVzLgorICAgICAgICAgICAgRWFjaCBkZXZlbG9wbWVudCBicmFuY2ggaW4gYSByZXBvc2l0b3J5IGlzIHVuaXF1ZSBhcyBpdCBmb3JrcworICAgICAgICAgICAgb2ZmIHRoZSAibWFzdGVyIiBicmFuY2guCisgICAgICAgICAgICBUbyBzZWUgYW5kIHVzZSB0aGUgZmlsZXMgb2YgYSBwYXJ0aWN1bGFyIGRldmVsb3BtZW50IGJyYW5jaAorICAgICAgICAgICAgbG9jYWxseSwgeW91IG5lZWQgdG8ga25vdyB0aGUgYnJhbmNoIG5hbWUgYW5kIHRoZW4gc3BlY2lmaWNhbGx5CisgICAgICAgICAgICBjaGVjayBvdXQgdGhhdCBkZXZlbG9wbWVudCBicmFuY2guCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBDaGVja2luZyBvdXQgYW4gYWN0aXZlIGRldmVsb3BtZW50IGJyYW5jaCBieSBicmFuY2ggbmFtZQorICAgICAgICAgICAgICAgIGdpdmVzIHlvdSBhIHNuYXBzaG90IG9mIHRoYXQgcGFydGljdWxhciBicmFuY2ggYXQgdGhlIHRpbWUKKyAgICAgICAgICAgICAgICB5b3UgY2hlY2sgaXQgb3V0LgorICAgICAgICAgICAgICAgIEZ1cnRoZXIgZGV2ZWxvcG1lbnQgb24gdG9wIG9mIHRoZSBicmFuY2ggdGhhdCBvY2N1cnMgYWZ0ZXIKKyAgICAgICAgICAgICAgICBjaGVjayBpdCBvdXQgY2FuIG9jY3VyLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlN3aXRjaCB0byB0aGUgUG9reSBEaXJlY3Rvcnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgYSBsb2NhbCBwb2t5IEdpdCByZXBvc2l0b3J5LCBzd2l0Y2ggdG8gdGhhdAorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3QgaGF2ZSB0aGUgbG9jYWwgY29weSBvZiBwb2t5LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjbG9uaW5nLXRoZS1wb2t5LXJlcG9zaXRvcnknPkNsb25pbmcgdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gUmVwb3NpdG9yeTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkRldGVybWluZSBFeGlzdGluZyBCcmFuY2ggTmFtZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBicmFuY2ggLWEKKyAgICAgKiBtYXN0ZXIKKyAgICAgICByZW1vdGVzL29yaWdpbi8xLjFfTTEKKyAgICAgICByZW1vdGVzL29yaWdpbi8xLjFfTTIKKyAgICAgICByZW1vdGVzL29yaWdpbi8xLjFfTTMKKyAgICAgICByZW1vdGVzL29yaWdpbi8xLjFfTTQKKyAgICAgICByZW1vdGVzL29yaWdpbi8xLjJfTTEKKyAgICAgICByZW1vdGVzL29yaWdpbi8xLjJfTTIKKyAgICAgICByZW1vdGVzL29yaWdpbi8xLjJfTTMKKyAgICAgICAgICAgLgorICAgICAgICAgICAuCisgICAgICAgICAgIC4KKyAgICAgICByZW1vdGVzL29yaWdpbi9tYXN0ZXItbmV4dAorICAgICAgIHJlbW90ZXMvb3JpZ2luL21hc3Rlci1uZXh0MgorICAgICAgIHJlbW90ZXMvb3JpZ2luL21vcnR5CisgICAgICAgcmVtb3Rlcy9vcmlnaW4vcGlua3kKKyAgICAgICByZW1vdGVzL29yaWdpbi9wdXJwbGUKKyAgICAgICByZW1vdGVzL29yaWdpbi9weXJvCisgICAgICAgcmVtb3Rlcy9vcmlnaW4vcm9ja28KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5DaGVja291dCB0aGUgQnJhbmNoOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENoZWNrb3V0IHRoZSBkZXZlbG9wbWVudCBicmFuY2ggaW4gd2hpY2ggeW91IHdhbnQgdG8gd29yay4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIGFjY2VzcyB0aGUgZmlsZXMgZm9yIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgICZESVNUUk87IFJlbGVhc2UgKCZESVNUUk9fTkFNRTspLCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGNoZWNrb3V0IC1iICZESVNUUk9fTkFNRV9OT19DQVA7IG9yaWdpbi8mRElTVFJPX05BTUVfTk9fQ0FQOworICAgICBCcmFuY2ggJkRJU1RST19OQU1FX05PX0NBUDsgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJkRJU1RST19OQU1FX05PX0NBUDsgZnJvbSBvcmlnaW4uCisgICAgIFN3aXRjaGVkIHRvIGEgbmV3IGJyYW5jaCAnJkRJU1RST19OQU1FX05PX0NBUDsnCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIGNvbW1hbmQgY2hlY2tzIG91dCB0aGUgIiZESVNUUk9fTkFNRV9OT19DQVA7IgorICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBicmFuY2ggYW5kIHJlcG9ydHMgdGhhdCB0aGUgYnJhbmNoIGlzIHRyYWNraW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSB1cHN0cmVhbSAib3JpZ2luLyZESVNUUk9fTkFNRV9OT19DQVA7IiBicmFuY2guPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBmb2xsb3dpbmcgY29tbWFuZCBkaXNwbGF5cyB0aGUgYnJhbmNoZXMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBhcmUgbm93IHBhcnQgb2YgeW91ciBsb2NhbCBwb2t5IHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgICAgIFRoZSBhc3RlcmlzayBjaGFyYWN0ZXIgaW5kaWNhdGVzIHRoZSBicmFuY2ggdGhhdCBpcworICAgICAgICAgICAgICAgICAgICBjdXJyZW50bHkgY2hlY2tlZCBvdXQgZm9yIHdvcms6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgYnJhbmNoCisgICAgICAgbWFzdGVyCisgICAgICogJkRJU1RST19OQU1FX05PX0NBUDsKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nY2hlY2tvdXQtb3V0LWJ5LXRhZy1pbi1wb2t5Jz4KKyAgICAgICAgPHRpdGxlPkNoZWNraW5nIE91dCBieSBUYWcgaW4gUG9reTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTaW1pbGFyIHRvIGJyYW5jaGVzLCB0aGUgdXBzdHJlYW0gcmVwb3NpdG9yeSB1c2VzIHRhZ3MKKyAgICAgICAgICAgIHRvIG1hcmsgc3BlY2lmaWMgY29tbWl0cyBhc3NvY2lhdGVkIHdpdGggc2lnbmlmaWNhbnQgcG9pbnRzIGluCisgICAgICAgICAgICBhIGRldmVsb3BtZW50IGJyYW5jaCAoaS5lLiBhIHJlbGVhc2UgcG9pbnQgb3Igc3RhZ2Ugb2YgYQorICAgICAgICAgICAgcmVsZWFzZSkuCisgICAgICAgICAgICBZb3UgbWlnaHQgd2FudCB0byBzZXQgdXAgYSBsb2NhbCBicmFuY2ggYmFzZWQgb24gb25lIG9mIHRob3NlCisgICAgICAgICAgICBwb2ludHMgaW4gdGhlIHJlcG9zaXRvcnkuCisgICAgICAgICAgICBUaGUgcHJvY2VzcyBpcyBzaW1pbGFyIHRvIGNoZWNraW5nIG91dCBieSBicmFuY2ggbmFtZSBleGNlcHQgeW91CisgICAgICAgICAgICB1c2UgdGFnIG5hbWVzLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgQ2hlY2tpbmcgb3V0IGEgYnJhbmNoIGJhc2VkIG9uIGEgdGFnIGdpdmVzIHlvdSBhCisgICAgICAgICAgICAgICAgc3RhYmxlIHNldCBvZiBmaWxlcyBub3QgYWZmZWN0ZWQgYnkgZGV2ZWxvcG1lbnQgb24gdGhlCisgICAgICAgICAgICAgICAgYnJhbmNoIGFib3ZlIHRoZSB0YWcuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+U3dpdGNoIHRvIHRoZSBQb2t5IERpcmVjdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBhIGxvY2FsIHBva3kgR2l0IHJlcG9zaXRvcnksIHN3aXRjaCB0byB0aGF0CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBoYXZlIHRoZSBsb2NhbCBjb3B5IG9mIHBva3ksIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2Nsb25pbmctdGhlLXBva3ktcmVwb3NpdG9yeSc+Q2xvbmluZyB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBSZXBvc2l0b3J5PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+RmV0Y2ggdGhlIFRhZyBOYW1lczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUbyBjaGVja291dCB0aGUgYnJhbmNoIGJhc2VkIG9uIGEgdGFnIG5hbWUsIHlvdSBuZWVkIHRvCisgICAgICAgICAgICAgICAgICAgIGZldGNoIHRoZSB1cHN0cmVhbSB0YWdzIGludG8geW91ciBsb2NhbCByZXBvc2l0b3J5OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGZldGNoIC0tdGFncworICAgICAkCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+TGlzdCB0aGUgVGFnIE5hbWVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gbGlzdCB0aGUgdGFnIG5hbWVzIG5vdzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCB0YWcKKyAgICAgMS4xX00xLmZpbmFsCisgICAgIDEuMV9NMS5yYzEKKyAgICAgMS4xX00xLnJjMgorICAgICAxLjFfTTIuZmluYWwKKyAgICAgMS4xX00yLnJjMQorICAgICAgICAuCisgICAgICAgIC4KKyAgICAgICAgLgorICAgICB5b2N0by0yLjIKKyAgICAgeW9jdG8tMi4yLjEKKyAgICAgeW9jdG8tMi4zCisgICAgIHlvY3RvLTIuMy4xCisgICAgIHlvY3RvLTIuNAorICAgICB5b2N0b18xLjVfTTUucmM4CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q2hlY2tvdXQgdGhlIEJyYW5jaDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGNoZWNrb3V0IHRhZ3MvJkRJU1RSTzsgLWIgbXlfeW9jdG9fJkRJU1RSTzsKKyAgICAgU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICdteV95b2N0b18mRElTVFJPOycKKyAgICAgJCBnaXQgYnJhbmNoCisgICAgICAgbWFzdGVyCisgICAgICogbXlfeW9jdG9fJkRJU1RSTzsKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgcHJldmlvdXMgY29tbWFuZCBjcmVhdGVzIGFuZCBjaGVja3Mgb3V0IGEgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoIG5hbWVkICJteV95b2N0b18mRElTVFJPOyIsIHdoaWNoIGlzIGJhc2VkIG9uCisgICAgICAgICAgICAgICAgICAgIHRoZSBjb21taXQgaW4gdGhlIHVwc3RyZWFtIHBva3kgcmVwb3NpdG9yeSB0aGF0IGhhcworICAgICAgICAgICAgICAgICAgICB0aGUgc2FtZSB0YWcuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIGZpbGVzIHlvdSBoYXZlIGF2YWlsYWJsZSBsb2NhbGx5CisgICAgICAgICAgICAgICAgICAgIGFzIGEgcmVzdWx0IG9mIHRoZSA8ZmlsZW5hbWU+Y2hlY2tvdXQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kIGFyZSBhIHNuYXBzaG90IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAiJkRJU1RST19OQU1FX05PX0NBUDsiIGRldmVsb3BtZW50IGJyYW5jaCBhdCB0aGUgcG9pbnQKKyAgICAgICAgICAgICAgICAgICAgd2hlcmUgWW9jdG8gUHJvamVjdCAmRElTVFJPOyB3YXMgcmVsZWFzZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3BlcmZvcm1pbmctYS1zaW1wbGUtYnVpbGQnPgorICAgIDx0aXRsZT5QZXJmb3JtaW5nIGEgU2ltcGxlIEJ1aWxkPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBTZXZlcmFsIG1ldGhvZHMgZXhpc3QgdGhhdCBhbGxvdyB5b3UgdG8gYnVpbGQgYW4gaW1hZ2Ugd2l0aGluIHRoZQorICAgICAgICBZb2N0byBQcm9qZWN0LgorICAgICAgICBUaGlzIHByb2NlZHVyZSBzaG93cyBob3cgdG8gYnVpbGQgYW4gaW1hZ2UgdXNpbmcgQml0QmFrZSBmcm9tIGEKKyAgICAgICAgTGludXggaG9zdC4KKyAgICAgICAgPG5vdGU+PHRpdGxlPk5vdGVzPC90aXRsZT4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGJ1aWxkIGFuIGltYWdlIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3RvYXN0ZXItdGVybSc+VG9hc3RlcjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1RPQVNUX1VSTDsnPllvY3RvIFByb2plY3QgVG9hc3RlciBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IHRvIGJ1aWxkIGltYWdlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfU0RLX1VSTDsjdXNpbmctZGV2dG9vbC1pbi15b3VyLXNkay13b3JrZmxvdyc+VXNpbmcgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBpbiBZb3VyIFNESyBXb3JrZmxvdzwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BtZW50IGFuZAorICAgICAgICAgICAgICAgICAgICB0aGUgRXh0ZW5zaWJsZSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKGVTREspIG1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgYnVpbGQgcHJvY2VzcyBjcmVhdGVzIGFuIGVudGlyZSBMaW51eCBkaXN0cmlidXRpb24gZnJvbSBzb3VyY2UKKyAgICAgICAgYW5kIHBsYWNlcyBpdCBpbiB5b3VyCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgdW5kZXIgPGZpbGVuYW1lPnRtcC9kZXBsb3kvaW1hZ2VzPC9maWxlbmFtZT4uCisgICAgICAgIEZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgYnVpbGQgcHJvY2VzcyB1c2luZyBCaXRCYWtlLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNpbWFnZXMtZGV2LWVudmlyb25tZW50Jz5JbWFnZXM8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICBZb3UgY2FuIGFsc28gcmVmZXJlbmNlIHRoZQogICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyNxcy1idWlsZGluZy1pbWFnZXMnPkJ1aWxkaW5nIEltYWdlczwvdWxpbms+IgogICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0LgogICAgIDwvcGFyYT4KIAogICAgIDxwYXJhPgotICAgICAgICBUaGUgYnVpbGQgcHJvY2VzcyBpcyBhcyBmb2xsb3dzOgorICAgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBhbmQgbGlzdCBvdmVydmlld3MgdGhlIGJ1aWxkIHByb2Nlc3M6CisgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9iaXRiYWtlLWJ1aWxkLWZsb3cucG5nIiB3aWR0aD0iN2luIiBkZXB0aD0iNGluIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KICAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1ha2Ugc3VyZSB5b3UgaGF2ZSBzZXQgdXAgdGhlIFNvdXJjZSBEaXJlY3RvcnkgZGVzY3JpYmVkIGluIHRoZQotICAgICAgICAgICAgICAgIHByZXZpb3VzIHNlY3Rpb24uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW5pdGlhbGl6ZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgYnkgc291cmNpbmcgYSBidWlsZAotICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHNjcmlwdCAoaS5lLgotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgIG9yCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4pLgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5TZXQgdXAgWW91ciBIb3N0IERldmVsb3BtZW50IFN5c3RlbSB0byBTdXBwb3J0CisgICAgICAgICAgICAgICAgRGV2ZWxvcG1lbnQgVXNpbmcgdGhlIFlvY3RvIFByb2plY3Q8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjeXAtcmVzb3VyY2VzJz5TZXR0aW5nIFVwIHRvIFVzZSB0aGUgWW9jdG8gUHJvamVjdDwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQgZm9yIG9wdGlvbnMgb24gaG93CisgICAgICAgICAgICAgICAgdG8gZ2V0IGEgYnVpbGQgaG9zdCByZWFkeSB0byB1c2UgdGhlIFlvY3RvIFByb2plY3QuCiAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+T3B0aW9uYWxseSBlbnN1cmUgdGhlIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUsCi0gICAgICAgICAgICAgICAgd2hpY2ggaXMgZm91bmQgaW4gdGhlCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LAorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5Jbml0aWFsaXplIHRoZSBCdWlsZCBFbnZpcm9ubWVudDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEluaXRpYWxpemUgdGhlIGJ1aWxkIGVudmlyb25tZW50IGJ5IHNvdXJjaW5nIHRoZSBidWlsZAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHNjcmlwdCAoaS5lLgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPk1ha2UgU3VyZSBZb3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBGaWxlIGlzIENvcnJlY3Q6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBFbnN1cmUgdGhlIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgZmlsZSwgd2hpY2ggaXMgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKICAgICAgICAgICAgICAgICBpcyBzZXQgdXAgaG93IHlvdSB3YW50IGl0LgotICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIG1hbnkgYXNwZWN0cyBvZiB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaW5jbHVkaW5nCi0gICAgICAgICAgICAgICAgdGhlIHRhcmdldCBtYWNoaW5lIGFyY2hpdGVjdHVyZSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIG1hbnkgYXNwZWN0cyBvZiB0aGUgYnVpbGQgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICBpbmNsdWRpbmcgdGhlIHRhcmdldCBtYWNoaW5lIGFyY2hpdGVjdHVyZSB0aHJvdWdoIHRoZQogICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+TUFDSElORTwvdWxpbms+PC9maWxlbmFtZT4gdmFyaWFibGUsCiAgICAgICAgICAgICAgICAgdGhlIHBhY2thZ2luZyBmb3JtYXQgdXNlZCBkdXJpbmcgdGhlIGJ1aWxkCiAgICAgICAgICAgICAgICAgKDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvdWxpbms+KSwKICAgICAgICAgICAgICAgICBhbmQgYSBjZW50cmFsaXplZCB0YXJiYWxsIGRvd25sb2FkIGRpcmVjdG9yeSB0aHJvdWdoIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRExfRElSJz5ETF9ESVI8L3VsaW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRExfRElSJz5ETF9ESVI8L3VsaW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5CdWlsZCB0aGUgSW1hZ2U6PC9lbXBoYXNpcz4KICAgICAgICAgICAgICAgICBCdWlsZCB0aGUgaW1hZ2UgdXNpbmcgdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZC4KLSAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCBpbmZvcm1hdGlvbiBvbiBCaXRCYWtlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBidWlsZHMgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+IGltYWdlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gQml0QmFrZSwgc2VlIHRoZQogICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsnPkJpdEJha2UgVXNlciBNYW51YWw8L3VsaW5rPi4KICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SdW4gdGhlIGltYWdlIGVpdGhlciBvbiB0aGUgYWN0dWFsIGhhcmR3YXJlIG9yIHVzaW5nIHRoZSBRRU1VCi0gICAgICAgICAgICAgICAgZW11bGF0b3IuPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CiAgICAgPC9wYXJhPgogPC9zZWN0aW9uPgogCi08c2VjdGlvbiBpZD0nZmxhc2hpbmctaW1hZ2VzLXVzaW5nLWJtYXB0b29sJz4KLSAgICA8dGl0bGU+Rmxhc2hpbmcgSW1hZ2VzIFVzaW5nIDxmaWxlbmFtZT5ibWFwdG9vbDwvZmlsZW5hbWU+PC90aXRsZT4KLQotICAgIDxwYXJhPgotICAgICAgICBBbiBlYXN5IHdheSB0byBmbGFzaCBhbiBpbWFnZSB0byBhIGJvb3RhYmxlIGRldmljZSBpcyB0byB1c2UKLSAgICAgICAgPGZpbGVuYW1lPmJtYXB0b29sPC9maWxlbmFtZT4sIHdoaWNoIGlzIGludGVncmF0ZWQgaW50byB0aGUKLSAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgRm9sbG93aW5nLCBpcyBhbiBleGFtcGxlIHRoYXQgc2hvd3MgaG93IHRvIGZsYXNoIGEgV2ljIGltYWdlLgotICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgIFlvdSBjYW4gdXNlIDxmaWxlbmFtZT5ibWFwdG9vbDwvZmlsZW5hbWU+IHRvIGZsYXNoIGFueQotICAgICAgICAgICAgdHlwZSBvZiBpbWFnZS4KLSAgICAgICAgPC9ub3RlPgotICAgICAgICBVc2UgdGhlc2Ugc3RlcHMgdG8gZmxhc2ggYW4gaW1hZ2UgdXNpbmcKLSAgICAgICAgPGZpbGVuYW1lPmJtYXB0b29sPC9maWxlbmFtZT46Ci0gICAgICAgIDxub3RlPgotICAgICAgICAgICAgVW5sZXNzIHlvdSBhcmUgYWJsZSB0byBpbnN0YWxsIHRoZQotICAgICAgICAgICAgPGZpbGVuYW1lPmJtYXAtdG9vbHM8L2ZpbGVuYW1lPiBwYWNrYWdlIGFzIG1lbnRpb25lZCBpbiB0aGUgbm90ZQotICAgICAgICAgICAgaW4gdGhlIHNlY29uZCBidWxsZXQgb2Ygc3RlcCAzIGZ1cnRoZXIgZG93biwgeW91IHdpbGwgbmVlZCB0byBidWlsZAotICAgICAgICAgICAgPGZpbGVuYW1lPmJtYXB0b29sPC9maWxlbmFtZT4gYmVmb3JlIHVzaW5nIGl0LgotICAgICAgICAgICAgQnVpbGQgdGhlIHRvb2wgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGJpdGJha2UgYm1hcC10b29scy1uYXRpdmUKLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgPC9ub3RlPgotICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgQWRkIHRoZSBmb2xsb3dpbmcgdG8geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgZmlsZToKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIElNQUdFX0ZTVFlQRVMgKz0gIndpYyB3aWMuYm1hcCIKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgRWl0aGVyIGhhdmUgeW91ciBpbWFnZSByZWFkeSAocHJlLWJ1aWx0KSBvciB0YWtlIHRoZSBzdGVwCi0gICAgICAgICAgICAgICAgYnVpbGQgdGhlIGltYWdlOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBiaXRiYWtlIDxyZXBsYWNlYWJsZT5pbWFnZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgIEZsYXNoIHRoZSBpbWFnZSB0byB0aGUgbWVkaWEgYnkgdXNpbmcKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ym1hcHRvb2w8L2ZpbGVuYW1lPiBkZXBlbmRpbmcgb24geW91ciBwYXJ0aWN1bGFyCi0gICAgICAgICAgICAgICAgc2V0dXA6Ci0gICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgd3JpdGUgYWNjZXNzIHRvIHRoZSBtZWRpYSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZSB0aGlzIGNvbW1hbmQgZm9ybToKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBvZS1ydW4tbmF0aXZlIGJtYXB0b29sIGNvcHkgLi90bXAvZGVwbG95L2ltYWdlcy9xZW11eDg2LTY0L2NvcmUtaW1hZ2UtbWluaW1hbC08cmVwbGFjZWFibGU+bWFjaGluZTwvcmVwbGFjZWFibGU+LndpYyAvZGV2L3NkPHJlcGxhY2VhYmxlPlg8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtZWRpYSwgdXNlIHRoZSBmb2xsb3dpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIHN1ZG8gYmFzaAotICAgICAkIFBBVEg9dG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvYmluLyBibWFwdG9vbCBjb3B5IC4vdG1wL2RlcGxveS9pbWFnZXMvcWVtdXg4Ni02NC9jb3JlLWltYWdlLW1pbmltYWwtPHJlcGxhY2VhYmxlPm1hY2hpbmU8L3JlcGxhY2VhYmxlPi53aWMgL2Rldi9zZDxyZXBsYWNlYWJsZT5YPC9yZXBsYWNlYWJsZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgVWJ1bnR1IG9yIERlYmlhbiBkaXN0cmlidXRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gaW5zdGFsbCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ym1hcC10b29sczwvZmlsZW5hbWU+IHBhY2thZ2UgdXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIGNvbW1hbmQgYW5kIHRoZW4gdXNlIHRoZSB0b29sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBzcGVjaWZ5aW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPiBldmVuIGZyb20gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdCBhY2NvdW50OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBzdWRvIGFwdC1nZXQgaW5zdGFsbCBibWFwLXRvb2xzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIEZvciBoZWxwIG9uIHRoZSA8ZmlsZW5hbWU+Ym1hcHRvb2w8L2ZpbGVuYW1lPiBjb21tYW5kLCB1c2UgZWl0aGVyIG9mCi0gICAgICAgIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6Ci0gICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBibWFwdG9vbCAtLWhlbHAKLSAgICAgJCBvZS1ydW4tbmF0aXZlIGJtYXB0b29sIC0taGVscAotICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgPC9wYXJhPgotPC9zZWN0aW9uPgotCi08c2VjdGlvbiBpZD0ndXNpbmctcHJlLWJ1aWx0LWJpbmFyaWVzLWFuZC1xZW11Jz4KLSAgICA8dGl0bGU+VXNpbmcgUHJlLUJ1aWx0IEJpbmFyaWVzIGFuZCBRRU1VPC90aXRsZT4KLQotICAgIDxwYXJhPgotICAgICAgICBBbm90aGVyIG9wdGlvbiB5b3UgaGF2ZSB0byBnZXQgc3RhcnRlZCBpcyB0byB1c2UgcHJlLWJ1aWx0IGJpbmFyaWVzLgotICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBwcm92aWRlcyBtYW55IHR5cGVzIG9mIGJpbmFyaWVzIHdpdGggZWFjaCByZWxlYXNlLgotICAgICAgICBTZWUgdGhlICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtaW1hZ2VzJz5JbWFnZXM8L3VsaW5rPiIKLSAgICAgICAgY2hhcHRlciBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsCi0gICAgICAgIGZvciBkZXNjcmlwdGlvbnMgb2YgdGhlIHR5cGVzIG9mIGJpbmFyaWVzIHRoYXQgc2hpcCB3aXRoIGEgWW9jdG8gUHJvamVjdAotICAgICAgICByZWxlYXNlLgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgICBVc2luZyBhIHByZS1idWlsdCBiaW5hcnkgaXMgaWRlYWwgZm9yIGRldmVsb3Bpbmcgc29mdHdhcmUKLSAgICAgICAgYXBwbGljYXRpb25zIHRvIHJ1biBvbiB5b3VyIHRhcmdldCBoYXJkd2FyZS4KLSAgICAgICAgVG8gZG8gdGhpcywgeW91IG5lZWQgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIGFwcHJvcHJpYXRlCi0gICAgICAgIGNyb3NzLXRvb2xjaGFpbiB0YXJiYWxsIGZvciB0aGUgYXJjaGl0ZWN0dXJlIG9uIHdoaWNoIHlvdSBhcmUKLSAgICAgICAgZGV2ZWxvcGluZy4KLSAgICAgICAgSWYgeW91IGFyZSB1c2luZyBhbiBTREsgdHlwZSBpbWFnZSwgdGhlIGltYWdlIHNoaXBzIHdpdGggdGhlIGNvbXBsZXRlCi0gICAgICAgIHRvb2xjaGFpbiBuYXRpdmUgdG8gdGhlIGFyY2hpdGVjdHVyZSAoaS5lLiBhIHRvb2xjaGFpbiBkZXNpZ25lZCB0bwotICAgICAgICBydW4gb24gdGhlCi0gICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TREtNQUNISU5FJz48ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4pLgotICAgICAgICBJZiB5b3UgYXJlIG5vdCB1c2luZyBhbiBTREsgdHlwZSBpbWFnZSwgeW91IG5lZWQgdG8gc2VwYXJhdGVseSBkb3dubG9hZAotICAgICAgICBhbmQgaW5zdGFsbCB0aGUgc3RhbmQtYWxvbmUgWW9jdG8gUHJvamVjdCBjcm9zcy10b29sY2hhaW4gdGFyYmFsbC4KLSAgICAgICAgU2VlIHRoZQotICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfU0RLX1VSTDsjc2RrLWFwcGVuZGl4LW9idGFpbic+T2J0YWluaW5nIHRoZSBTREs8L3VsaW5rPiIKLSAgICAgICAgYXBwZW5kaXggaW4gdGhlIFlvY3RvIFByb2plY3QgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspCi0gICAgICAgIERldmVsb3BlcidzIEd1aWRlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGxvY2F0aW5nIGFuZCBpbnN0YWxsaW5nCi0gICAgICAgIGNyb3NzLXRvb2xjaGFpbnMuCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICAgIFJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGUgb2YgaW1hZ2UgeW91IGFyZSB1c2luZywgeW91IG5lZWQgdG8gZG93bmxvYWQgdGhlIHByZS1idWlsdCBrZXJuZWwKLSAgICAgICAgdGhhdCB5b3Ugd2lsbCBib290IGluIHRoZSBRRU1VIGVtdWxhdG9yIGFuZCB0aGVuIGRvd25sb2FkIGFuZCBleHRyYWN0IHRoZSB0YXJnZXQgcm9vdAotICAgICAgICBmaWxlc3lzdGVtIGZvciB5b3VyIHRhcmdldCBtYWNoaW5l4oCZcyBhcmNoaXRlY3R1cmUuCi0gICAgICAgIFlvdSBjYW4gZ2V0IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBiaW5hcmllcyBhbmQgZmlsZSBzeXN0ZW1zIGZyb20KLSAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX01BQ0hJTkVTX0RMX1VSTDsnPm1hY2hpbmVzPC91bGluaz4uCi0gICAgICAgIFlvdSBjYW4gZ2V0IGluc3RhbGxhdGlvbiBzY3JpcHRzIGZvciBzdGFuZC1hbG9uZSB0b29sY2hhaW5zIGZyb20KLSAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1RPT0xDSEFJTl9ETF9VUkw7Jz50b29sY2hhaW5zPC91bGluaz4uCi0gICAgICAgIE9uY2UgeW91IGhhdmUgYWxsIHlvdXIgZmlsZXMsIHlvdSBzZXQgdXAgdGhlIGVudmlyb25tZW50IHRvIGVtdWxhdGUgdGhlIGhhcmR3YXJlCi0gICAgICAgIGJ5IHNvdXJjaW5nIGFuIGVudmlyb25tZW50IHNldHVwIHNjcmlwdC4KLSAgICAgICAgRmluYWxseSwgeW91IHN0YXJ0IHRoZSBRRU1VIGVtdWxhdG9yLgotICAgICAgICBZb3UgY2FuIGZpbmQgZGV0YWlscyBvbiBhbGwgdGhlc2Ugc3RlcHMgaW4gdGhlCi0gICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1NES19VUkw7I3Nkay1tYW51YWwnPllvY3RvIFByb2plY3QgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4uCi0gICAgICAgIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCB1c2luZyBRRU1VIHdpdGggdGhlIFlvY3RvIFByb2plY3QgaW4gdGhlCi0gICAgICAgICI8bGluayBsaW5rZW5kPSdkZXYtbWFudWFsLXFlbXUnPlVzaW5nIHRoZSBRdWljayBFTVVsYXRvciAoUUVNVSk8L2xpbms+IgotICAgICAgICBzZWN0aW9uLgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgICBVc2luZyBRRU1VIHRvIGVtdWxhdGUgeW91ciBoYXJkd2FyZSBjYW4gcmVzdWx0IGluIHNwZWVkIGlzc3VlcwotICAgICAgICBkZXBlbmRpbmcgb24gdGhlIHRhcmdldCBhbmQgaG9zdCBhcmNoaXRlY3R1cmUgbWl4LgotICAgICAgICBGb3IgZXhhbXBsZSwgdXNpbmcgdGhlIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4gaW1hZ2UgaW4gdGhlIGVtdWxhdG9yCi0gICAgICAgIG9uIGFuIEludGVsLWJhc2VkIDMyLWJpdCAoeDg2KSBob3N0IG1hY2hpbmUgaXMgZmFzdCBiZWNhdXNlIHRoZSB0YXJnZXQgYW5kCi0gICAgICAgIGhvc3QgYXJjaGl0ZWN0dXJlcyBtYXRjaC4KLSAgICAgICAgT24gdGhlIG90aGVyIGhhbmQsIHVzaW5nIHRoZSA8ZmlsZW5hbWU+cWVtdWFybTwvZmlsZW5hbWU+IGltYWdlIG9uIHRoZSBzYW1lIEludGVsLWJhc2VkCi0gICAgICAgIGhvc3QgY2FuIGJlIHNsb3dlci4KLSAgICAgICAgQnV0LCB5b3Ugc3RpbGwgYWNoaWV2ZSBmYWl0aGZ1bCBlbXVsYXRpb24gb2YgQVJNLXNwZWNpZmljIGlzc3Vlcy4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgVG8gc3BlZWQgdGhpbmdzIHVwLCB0aGUgUUVNVSBpbWFnZXMgc3VwcG9ydCB1c2luZyA8ZmlsZW5hbWU+ZGlzdGNjPC9maWxlbmFtZT4KLSAgICAgICAgdG8gY2FsbCBhIGNyb3NzLWNvbXBpbGVyIG91dHNpZGUgdGhlIGVtdWxhdGVkIHN5c3RlbS4KLSAgICAgICAgSWYgeW91IHVzZWQgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiB0byBzdGFydCBRRU1VLCBhbmQgdGhlCi0gICAgICAgIDxmaWxlbmFtZT5kaXN0Y2NkPC9maWxlbmFtZT4gYXBwbGljYXRpb24gaXMgcHJlc2VudCBvbiB0aGUgaG9zdCBzeXN0ZW0sIGFueQotICAgICAgICBCaXRCYWtlIGNyb3NzLWNvbXBpbGluZyB0b29sY2hhaW4gYXZhaWxhYmxlIGZyb20gdGhlIGJ1aWxkIHN5c3RlbSBpcyBhdXRvbWF0aWNhbGx5Ci0gICAgICAgIHVzZWQgZnJvbSB3aXRoaW4gUUVNVSBzaW1wbHkgYnkgY2FsbGluZyA8ZmlsZW5hbWU+ZGlzdGNjPC9maWxlbmFtZT4uCi0gICAgICAgIFlvdSBjYW4gYWNjb21wbGlzaCB0aGlzIGJ5IGRlZmluaW5nIHRoZSBjcm9zcy1jb21waWxlciB2YXJpYWJsZQotICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+ZXhwb3J0IENDPSJkaXN0Y2MiPC9maWxlbmFtZT4pLgotICAgICAgICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgYXJlIHVzaW5nIGEgc3VpdGFibGUgU0RLIGltYWdlIG9yIHRoZSBhcHByb3ByaWF0ZQotICAgICAgICBzdGFuZC1hbG9uZSB0b29sY2hhaW4gaXMgcHJlc2VudCwKLSAgICAgICAgdGhlIHRvb2xjaGFpbiBpcyBhbHNvIGF1dG9tYXRpY2FsbHkgdXNlZC4KLSAgICA8L3BhcmE+Ci0KLSAgICA8bm90ZT4KLSAgICAgICAgU2V2ZXJhbCBtZWNoYW5pc21zIGV4aXN0IHRoYXQgbGV0IHlvdSBjb25uZWN0IHRvIHRoZSBzeXN0ZW0gcnVubmluZyBvbiB0aGUKLSAgICAgICAgUUVNVSBlbXVsYXRvcjoKLSAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5RRU1VIHByb3ZpZGVzIGEgZnJhbWVidWZmZXIgaW50ZXJmYWNlIHRoYXQgbWFrZXMgc3RhbmRhcmQKLSAgICAgICAgICAgICAgICBjb25zb2xlcyBhdmFpbGFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R2VuZXJhbGx5LCBoZWFkbGVzcyBlbWJlZGRlZCBkZXZpY2VzIGhhdmUgYSBzZXJpYWwgcG9ydC4KLSAgICAgICAgICAgICAgICBJZiBzbywgeW91IGNhbiBjb25maWd1cmUgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb2YgdGhlIHJ1bm5pbmcgaW1hZ2UKLSAgICAgICAgICAgICAgICB0byB1c2UgdGhhdCBwb3J0IHRvIHJ1biBhIGNvbnNvbGUuCi0gICAgICAgICAgICAgICAgVGhlIGNvbm5lY3Rpb24gdXNlcyBzdGFuZGFyZCBJUCBuZXR3b3JraW5nLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgIFNTSCBzZXJ2ZXJzIGV4aXN0IGluIHNvbWUgUUVNVSBpbWFnZXMuCi0gICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPiBRRU1VIGltYWdlIGhhcyBhCi0gICAgICAgICAgICAgICAgRHJvcGJlYXIgc2VjdXJlIHNoZWxsIChTU0gpIHNlcnZlciB0aGF0IHJ1bnMgd2l0aCB0aGUgcm9vdAotICAgICAgICAgICAgICAgIHBhc3N3b3JkIGRpc2FibGVkLgotICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1mdWxsLWNtZGxpbmU8L2ZpbGVuYW1lPiBhbmQKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1sc2I8L2ZpbGVuYW1lPiBRRU1VIGltYWdlcwotICAgICAgICAgICAgICAgIGhhdmUgT3BlblNTSCBpbnN0ZWFkIG9mIERyb3BiZWFyLgotICAgICAgICAgICAgICAgIEluY2x1ZGluZyB0aGVzZSBTU0ggc2VydmVycyBhbGxvdyB5b3UgdG8gdXNlIHN0YW5kYXJkCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNzaDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+c2NwPC9maWxlbmFtZT4gY29tbWFuZHMuCi0gICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBRRU1VIGltYWdlLAotICAgICAgICAgICAgICAgIGhvd2V2ZXIsIGNvbnRhaW5zIG5vIFNTSCBzZXJ2ZXIuCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+WW91IGNhbiB1c2UgYSBwcm92aWRlZCwgdXNlci1zcGFjZSBORlMgc2VydmVyIHRvIGJvb3QgdGhlIFFFTVUgc2Vzc2lvbgotICAgICAgICAgICAgICAgIHVzaW5nIGEgbG9jYWwgY29weSBvZiB0aGUgcm9vdCBmaWxlc3lzdGVtIG9uIHRoZSBob3N0LgotICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIG1ha2UgdGhpcyBjb25uZWN0aW9uLCB5b3UgbXVzdCBleHRyYWN0IGEgcm9vdCBmaWxlc3lzdGVtIHRhcmJhbGwgYnkgdXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXUtZXh0cmFjdC1zZGs8L2ZpbGVuYW1lPiBjb21tYW5kLgotICAgICAgICAgICAgICAgIEFmdGVyIHJ1bm5pbmcgdGhlIGNvbW1hbmQsIHlvdSBtdXN0IHRoZW4gcG9pbnQgdGhlIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBzY3JpcHQgdG8gdGhlIGV4dHJhY3RlZCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBhIHJvb3QgZmlsZXN5c3RlbSBpbWFnZSBmaWxlLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICA8L25vdGU+Ci08L3NlY3Rpb24+CistLT4KIDwvY2hhcHRlcj4KIDwhLS0KIHZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwueG1sCmluZGV4IDI2ZWU5NzQuLmVkODAxMWQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLnhtbApAQCAtMTcsMTQgKzE3LDE0IEBACiAgICAgICAgIDwvbWVkaWFvYmplY3Q+CiAKICAgICAgICAgPHRpdGxlPgotICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwKKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsCiAgICAgICAgIDwvdGl0bGU+CiAKICAgICAgICAgPGF1dGhvcmdyb3VwPgogICAgICAgICAgICAgPGF1dGhvcj4KICAgICAgICAgICAgICAgICA8Zmlyc3RuYW1lPlNjb3R0PC9maXJzdG5hbWU+IDxzdXJuYW1lPlJpZmVuYmFyazwvc3VybmFtZT4KICAgICAgICAgICAgICAgICA8YWZmaWxpYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPkludGVsIENvcnBvcmF0aW9uPC9vcmduYW1lPgorICAgICAgICAgICAgICAgICAgICA8b3JnbmFtZT5TY290dHkncyBEb2N1bWVudGF0aW9uIFNlcnZpY2VzLCBJTkM8L29yZ25hbWU+CiAgICAgICAgICAgICAgICAgPC9hZmZpbGlhdGlvbj4KICAgICAgICAgICAgICAgICA8ZW1haWw+c3JpZmVuYmFya0BnbWFpbC5jb208L2VtYWlsPgogICAgICAgICAgICAgPC9hdXRob3I+CkBAIC05NywyNCArOTcsMTkgQEAKICAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi4zIFJlbGVhc2UuPC9yZXZyZW1hcms+CiAgICAgICAgICAgICA8L3JldmlzaW9uPgogICAgICAgICAgICAgPHJldmlzaW9uPgotICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi4zLjE8L3Jldm51bWJlcj4KLSAgICAgICAgICAgICAgICA8ZGF0ZT5KdW5lIDIwMTc8L2RhdGU+Ci0gICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDIuMy4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4yLjQ8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTc8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDIuNCBSZWxlYXNlLjwvcmV2cmVtYXJrPgogICAgICAgICAgICAgPC9yZXZpc2lvbj4KICAgICAgICAgICAgIDxyZXZpc2lvbj4KLSAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjIuMy4yPC9yZXZudW1iZXI+Ci0gICAgICAgICAgICAgICAgPGRhdGU+U2VwdGVtYmVyIDIwMTc8L2RhdGU+Ci0gICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDIuMy4yIFJlbGVhc2UuPC9yZXZyZW1hcms+Ci0gICAgICAgICAgICA8L3JldmlzaW9uPgotICAgICAgICAgICAgPHJldmlzaW9uPgotICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi4zLjM8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjIuNC4xPC9yZXZudW1iZXI+CiAgICAgICAgICAgICAgICAgPGRhdGU+SmFudWFyeSAyMDE4PC9kYXRlPgotICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjMuMyBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjQuMSBSZWxlYXNlLjwvcmV2cmVtYXJrPgogICAgICAgICAgICAgPC9yZXZpc2lvbj4KICAgICAgICAgICAgIDxyZXZpc2lvbj4KLSAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjIuMy40PC9yZXZudW1iZXI+Ci0gICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxODwvZGF0ZT4KLSAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi4zLjQgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjIuNC4yPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+TWFyY2ggMjAxODwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi40LjIgUmVsZWFzZS48L3JldnJlbWFyaz4KICAgICAgICAgICAgIDwvcmV2aXNpb24+CiAgICAgICAgIDwvcmV2aGlzdG9yeT4KIApAQCAtMTMwLDMzICsxMjUsMzQgQEAKICAgICAgICAgICBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlIEFsaWtlIDIuMCBVSzogRW5nbGFuZCAmYW1wOyBXYWxlczwvdWxpbms+IGFzIHB1Ymxpc2hlZCBieQogICAgICAgICAgIENyZWF0aXZlIENvbW1vbnMuCiAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxub3RlPjx0aXRsZT5NYW51YWwgTm90ZXM8L3RpdGxlPgotICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hbnVhbCBhc3NvY2lhdGVkIHdpdGggdGhpcyBZb2N0byBQcm9qZWN0IHJlbGVhc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICh2ZXJzaW9uICZZT0NUT19ET0NfVkVSU0lPTjspLAotICAgICAgICAgICAgICAgICAgICAgICAgc2VlIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy9kb2N1bWVudGF0aW9uJz5Zb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24gcGFnZTwvdWxpbms+LgorICAgICAgICAgICA8bm90ZT48dGl0bGU+TWFudWFsIE5vdGVzPC90aXRsZT4KKyAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZlcnNpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5Zb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbDwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgIGlzIGZvciB0aGUgJllPQ1RPX0RPQ19WRVJTSU9OOyByZWxlYXNlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICBUbyBiZSBzdXJlIHlvdSBoYXZlIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgbWFudWFsCisgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGlzIHJlbGVhc2UsIHVzZSB0aGUgbWFudWFsIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvZG9jdW1lbnRhdGlvbic+WW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uIHBhZ2U8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICBGb3IgbWFudWFscyBhc3NvY2lhdGVkIHdpdGggb3RoZXIgcmVsZWFzZXMgb2YgdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgICAgICAgIFByb2plY3QsIGdvIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L2RvY3VtZW50YXRpb24nPllvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbiBwYWdlPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgYW5kIHVzZSB0aGUgZHJvcC1kb3duICJBY3RpdmUgUmVsZWFzZXMiIGJ1dHRvbgorICAgICAgICAgICAgICAgICAgICAgICBhbmQgY2hvb3NlIHRoZSBtYW51YWwgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXNpcmVkCisgICAgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIHJlcG9ydCBhbnkgaW5hY2N1cmFjaWVzIG9yIHByb2JsZW1zIHdpdGggdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgbWFudWFsLCBzZW5kIGFuIGVtYWlsIHRvIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgICAgICBkaXNjdXNzaW9uIGdyb3VwIGF0CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG9AeW9jdG9wcm9qZWN0LmNvbTwvZmlsZW5hbWU+IG9yIGxvZyBpbnRvCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZnJlZW5vZGUgPGZpbGVuYW1lPiN5b2N0bzwvZmlsZW5hbWU+IGNoYW5uZWwuCiAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2ZXJzaW9uIG9mIHRoZSBtYW51YWwgaXMgdmVyc2lvbgotICAgICAgICAgICAgICAgICAgICAgICAgJllPQ1RPX0RPQ19WRVJTSU9OOy4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZvciBsYXRlciByZWxlYXNlcyBvZiB0aGUgWW9jdG8gUHJvamVjdCAoaWYgdGhleSBleGlzdCksCi0gICAgICAgICAgICAgICAgICAgICAgICBnbyB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvZG9jdW1lbnRhdGlvbic+WW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uIHBhZ2U8L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHVzZSB0aGUgZHJvcC1kb3duICJBY3RpdmUgUmVsZWFzZXMiIGJ1dHRvbgotICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGNob29zZSB0aGUgWW9jdG8gUHJvamVjdCB2ZXJzaW9uIGZvciB3aGljaCB5b3Ugd2FudAotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hbnVhbC4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBGb3IgYW4gaW4tZGV2ZWxvcG1lbnQgdmVyc2lvbiBvZiB0aGUgWW9jdG8gUHJvamVjdAotICAgICAgICAgICAgICAgICAgICAgICAgRGV2ZWxvcG1lbnQgTWFudWFsLCBzZWUKLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1VSTDsvbGF0ZXN0L2Rldi1tYW51YWwvZGV2LW1hbnVhbC5odG1sJz48L3VsaW5rPi4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgIDwvbm90ZT4KICAgICA8L2xlZ2Fsbm90aWNlPgogCiAgICAgPC9ib29raW5mbz4KQEAgLTE2Nyw4ICsxNjMsNiBAQAogCiAgICAgPHhpOmluY2x1ZGUgaHJlZj0iZGV2LW1hbnVhbC1uZXdiaWUueG1sIi8+CiAKLSAgICA8eGk6aW5jbHVkZSBocmVmPSJkZXYtbWFudWFsLW1vZGVsLnhtbCIvPgotCiAgICAgPHhpOmluY2x1ZGUgaHJlZj0iZGV2LW1hbnVhbC1jb21tb24tdGFza3MueG1sIi8+CiAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJkZXYtbWFudWFsLXFlbXUueG1sIi8+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvYml0YmFrZS1idWlsZC1mbG93LnBuZyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9iaXRiYWtlLWJ1aWxkLWZsb3cucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwODI2NWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvYml0YmFrZS1idWlsZC1mbG93LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDBiMGFiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2Rldi10aXRsZS5wbmcgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvZGV2LXRpdGxlLnBuZwppbmRleCBkM2NhYzRhLi4xNWU2N2QwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvZGV2LXRpdGxlLnBuZworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvZGV2LXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvZGV2dG9vbC1hZGQtZmxvdy5wbmcgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvZGV2dG9vbC1hZGQtZmxvdy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4NWFjMzMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2RldnRvb2wtYWRkLWZsb3cucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2RldnRvb2wtbW9kaWZ5LWZsb3cucG5nIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2RldnRvb2wtbW9kaWZ5LWZsb3cucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDY4NGZmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9kZXZ0b29sLW1vZGlmeS1mbG93LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9kZXZ0b29sLXVwZ3JhZGUtZmxvdy5wbmcgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvZGV2dG9vbC11cGdyYWRlLWZsb3cucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTQ3NGRhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9kZXZ0b29sLXVwZ3JhZGUtZmxvdy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvaW5kZXgtZG93bmxvYWRzLnBuZyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9pbmRleC1kb3dubG9hZHMucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTI1MWQ1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9pbmRleC1kb3dubG9hZHMucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2tlcm5lbC1kZXYtZmxvdy5wbmcgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWRldi1mbG93LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA5MTA1ZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWRldi1mbG93LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMS5wbmcgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTZjMGI5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTItZ2VuZXJpYy5wbmcgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTItZ2VuZXJpYy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiOTcwZWEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2tlcm5lbC1vdmVydmlldy0yLWdlbmVyaWMucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL3NvdXJjZS1yZXBvcy5wbmcgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVjNWYyOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYvZmlndXJlcy9rZXJuZWwtZGV2LWZsb3cucG5nIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9maWd1cmVzL2tlcm5lbC1kZXYtZmxvdy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkzYTM5NQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYvZmlndXJlcy9rZXJuZWwtZGV2LWZsb3cucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYvZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi1nZW5lcmljLnBuZyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYvZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi1nZW5lcmljLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTJjZGIyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9maWd1cmVzL2tlcm5lbC1vdmVydmlldy0yLWdlbmVyaWMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1hZHZhbmNlZC54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtYWR2YW5jZWQueG1sCmluZGV4IGE1Y2NmZGMuLmMzMDEzYjggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1hZHZhbmNlZC54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWFkdmFuY2VkLnhtbApAQCAtMyw3ICszLDcgQEAKIFs8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KIAogPGNoYXB0ZXIgaWQ9J2tlcm5lbC1kZXYtYWR2YW5jZWQnPgotPHRpdGxlPldvcmtpbmcgd2l0aCBBZHZhbmNlZCBNZXRhZGF0YTwvdGl0bGU+Cis8dGl0bGU+V29ya2luZyB3aXRoIEFkdmFuY2VkIE1ldGFkYXRhICg8ZmlsZW5hbWU+eW9jdG8ta2VybmVsLWNhY2hlPC9maWxlbmFtZT4pPC90aXRsZT4KIAogPHNlY3Rpb24gaWQ9J2tlcm5lbC1kZXYtYWR2YW5jZWQtb3ZlcnZpZXcnPgogICAgIDx0aXRsZT5PdmVydmlldzwvdGl0bGU+CkBAIC0xMSwzMyArMTEsNTEgQEAKICAgICA8cGFyYT4KICAgICAgICAgSW4gYWRkaXRpb24gdG8gc3VwcG9ydGluZyBjb25maWd1cmF0aW9uIGZyYWdtZW50cyBhbmQgcGF0Y2hlcywgdGhlCiAgICAgICAgIFlvY3RvIFByb2plY3Qga2VybmVsIHRvb2xzIGFsc28gc3VwcG9ydCByaWNoCi0gICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+IHRoYXQgeW91IGNhbgorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPiB0aGF0IHlvdSBjYW4KICAgICAgICAgdXNlIHRvIGRlZmluZSBjb21wbGV4IHBvbGljaWVzIGFuZCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgc3VwcG9ydC4KLSAgICAgICAgVGhlIHB1cnBvc2Ugb2YgdGhlIE1ldGFkYXRhIGFuZCB0aGUgdG9vbHMgdGhhdCBtYW5hZ2UgaXQsIGtub3duIGFzCi0gICAgICAgIHRoZSBrZXJuLXRvb2xzICg8ZmlsZW5hbWU+a2Vybi10b29scy1uYXRpdmVfZ2l0LmJiPC9maWxlbmFtZT4pLCBpcworICAgICAgICBUaGUgcHVycG9zZSBvZiB0aGUgTWV0YWRhdGEgYW5kIHRoZSB0b29scyB0aGF0IG1hbmFnZSBpdCBpcwogICAgICAgICB0byBoZWxwIHlvdSBtYW5hZ2UgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIHNvdXJjZXMKICAgICAgICAgdXNlZCB0byBzdXBwb3J0IG11bHRpcGxlIEJTUHMgYW5kIExpbnV4IGtlcm5lbCB0eXBlcy4KICAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgS2VybmVsIE1ldGFkYXRhIGV4aXN0cyBpbiBtYW55IHBsYWNlcy4KKyAgICAgICAgT25lIGFyZWEgaW4gdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc291cmNlLXJlcG9zaXRvcmllcyc+U291cmNlIFJlcG9zaXRvcmllczwvdWxpbms+CisgICAgICAgIGlzIHRoZSA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsLWNhY2hlPC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkuCisgICAgICAgIFlvdSBjYW4gZmluZCB0aGlzIHJlcG9zaXRvcnkgZ3JvdXBlZCB1bmRlciB0aGUgIllvY3RvIExpbnV4IEtlcm5lbCIKKyAgICAgICAgaGVhZGluZyBpbiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7Jz5Zb2N0byBQcm9qZWN0IFNvdXJjZSBSZXBvc2l0b3JpZXM8L3VsaW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgS2VybmVsIGRldmVsb3BtZW50IHRvb2xzICgia2Vybi10b29scyIpIGV4aXN0IGFsc28gaW4gdGhlIFlvY3RvCisgICAgICAgIFByb2plY3QgU291cmNlIFJlcG9zaXRvcmllcyB1bmRlciB0aGUgIllvY3RvIExpbnV4IEtlcm5lbCIgaGVhZGluZworICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPnlvY3RvLWtlcm5lbC10b29sczwvZmlsZW5hbWU+IEdpdCByZXBvc2l0b3J5LgorICAgICAgICBUaGUgcmVjaXBlIHRoYXQgYnVpbGRzIHRoZXNlIHRvb2xzIGlzCisgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMta2VybmVsL2tlcm4tdG9vbHMva2Vybi10b29scy1uYXRpdmVfZ2l0LmJiPC9maWxlbmFtZT4KKyAgICAgICAgaW4gdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+KS4KKyAgICA8L3BhcmE+CiA8L3NlY3Rpb24+CiAKIDxzZWN0aW9uIGlkPSd1c2luZy1rZXJuZWwtbWV0YWRhdGEtaW4tYS1yZWNpcGUnPgogICAgIDx0aXRsZT5Vc2luZyBLZXJuZWwgTWV0YWRhdGEgaW4gYSBSZWNpcGU8L3RpdGxlPgogCiAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBrZXJuZWwgc291cmNlcyBpbiB0aGUgWW9jdG8gUHJvamVjdCBjb250YWluIGtlcm5lbCBNZXRhZGF0YSwgd2hpY2gKLSAgICAgICAgaXMgbG9jYXRlZCBpbiB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2hlcyBvZiB0aGUga2VybmVsCi0gICAgICAgIHNvdXJjZSBHaXQgcmVwb3NpdG9yaWVzLgorICAgICAgICBBcyBtZW50aW9uZWQgaW4gdGhlIGludHJvZHVjdGlvbiwgdGhlIFlvY3RvIFByb2plY3QgY29udGFpbnMga2VybmVsCisgICAgICAgIE1ldGFkYXRhLCB3aGljaCBpcyBsb2NhdGVkIGluIHRoZQorICAgICAgICA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsLWNhY2hlPC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkuCiAgICAgICAgIFRoaXMgTWV0YWRhdGEgZGVmaW5lcyBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1BzKSB0aGF0Ci0gICAgICAgIGNvcnJlc3BvbmQgdG8gZGVmaW5pdGlvbnMgaW4gbGludXgteW9jdG8gcmVjaXBlcyBmb3IgdGhlIHNhbWUgQlNQcy4KKyAgICAgICAgY29ycmVzcG9uZCB0byBkZWZpbml0aW9ucyBpbiBsaW51eC15b2N0byByZWNpcGVzIGZvciBjb3JyZXNwb25kaW5nIEJTUHMuCiAgICAgICAgIEEgQlNQIGNvbnNpc3RzIG9mIGFuIGFnZ3JlZ2F0aW9uIG9mIGtlcm5lbCBwb2xpY3kgYW5kIGVuYWJsZWQKICAgICAgICAgaGFyZHdhcmUtc3BlY2lmaWMgZmVhdHVyZXMuCiAgICAgICAgIFRoZSBCU1AgY2FuIGJlIGluZmx1ZW5jZWQgZnJvbSB3aXRoaW4gdGhlIGxpbnV4LXlvY3RvIHJlY2lwZS4KICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICBMaW51eCBrZXJuZWwgc291cmNlIHRoYXQgY29udGFpbnMga2VybmVsIE1ldGFkYXRhIGlzIHNhaWQgdG8gYmUKLSAgICAgICAgICAgICJsaW51eC15b2N0byBzdHlsZSIga2VybmVsIHNvdXJjZS4KLSAgICAgICAgICAgIEEgTGludXgga2VybmVsIHJlY2lwZSB0aGF0IGluaGVyaXRzIGZyb20gdGhlCi0gICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8uaW5jPC9maWxlbmFtZT4gaW5jbHVkZSBmaWxlIGlzIHNhaWQgdG8gYmUgYQotICAgICAgICAgICAgImxpbnV4LXlvY3RvIHN0eWxlIiByZWNpcGUuCisgICAgICAgICAgICBBIExpbnV4IGtlcm5lbCByZWNpcGUgdGhhdCBjb250YWlucyBrZXJuZWwgTWV0YWRhdGEgKGUuZy4KKyAgICAgICAgICAgIGluaGVyaXRzIGZyb20gdGhlIDxmaWxlbmFtZT5saW51eC15b2N0by5pbmM8L2ZpbGVuYW1lPiBmaWxlKQorICAgICAgICAgICAgaXMgc2FpZCB0byBiZSBhICJsaW51eC15b2N0byBzdHlsZSIgcmVjaXBlLgogICAgICAgICA8L25vdGU+CiAgICAgPC9wYXJhPgogCkBAIC00OCw3ICs2Niw3IEBACiAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdHlwaWNhbGx5IHNldCB0byB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUKICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgogICAgICAgICB2YXJpYWJsZSwgd2hpY2ggaXMgdXNlZCBieQotICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNiaXRiYWtlLXRlcm0nPkJpdEJha2U8L3VsaW5rPi4KKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjYml0YmFrZS10ZXJtJz5CaXRCYWtlPC91bGluaz4uCiAgICAgICAgIEhvd2V2ZXIsIGluIHNvbWUgY2FzZXMsIHRoZSB2YXJpYWJsZSBtaWdodCBpbnN0ZWFkIHJlZmVyIHRvIHRoZQogICAgICAgICB1bmRlcmx5aW5nIHBsYXRmb3JtIG9mIHRoZSA8ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+LgogICAgIDwvcGFyYT4KQEAgLTU2LDEyICs3NCwxNiBAQAogICAgIDxwYXJhPgogICAgICAgICBNdWx0aXBsZSBCU1BzIGNhbiByZXVzZSB0aGUgc2FtZSA8ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPgogICAgICAgICBuYW1lIGlmIHRoZXkgYXJlIGJ1aWx0IHVzaW5nIHRoZSBzYW1lIEJTUCBkZXNjcmlwdGlvbi4KLSAgICAgICAgVGhlICJlcDEwOC16eW5xbXAiIGFuZCAicWVtdXp5bnFtcCIgQlNQIGNvbWJpbmF0aW9uCi0gICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS14aWxpbng8L2ZpbGVuYW1lPgotICAgICAgICBsYXllciBpcyBhIGdvb2QgZXhhbXBsZSBvZiB0d28gQlNQcyB1c2luZyB0aGUgc2FtZQotICAgICAgICA8ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPiB2YWx1ZSAoaS5lLiAienlucW1wIikuCi0gICAgICAgIFNlZSB0aGUgPGxpbmsgbGlua2VuZD0nYnNwLWRlc2NyaXB0aW9ucyc+QlNQIERlc2NyaXB0aW9uczwvbGluaz4gc2VjdGlvbgotICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgTXVsdGlwbGUgQ29yZWk3LWJhc2VkIEJTUHMgY291bGQgc2hhcmUgdGhlIHNhbWUgImludGVsLWNvcmVpNy02NCIKKyAgICAgICAgdmFsdWUgZm9yIDxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+LgorICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gcmVhbGl6ZSB0aGF0IDxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+IGlzCisgICAgICAgIGp1c3QgZm9yIGtlcm5lbCBtYXBwaW5nLCB3aGlsZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgIGlzIHRoZSBtYWNoaW5lIHR5cGUgd2l0aGluIGEgQlNQIExheWVyLgorICAgICAgICBFdmVuIHdpdGggdGhpcyBkaXN0aW5jdGlvbiwgaG93ZXZlciwgdGhlc2UgdHdvIHZhcmlhYmxlcyBjYW4gaG9sZAorICAgICAgICB0aGUgc2FtZSB2YWx1ZS4KKyAgICAgICAgU2VlIHRoZSA8bGluayBsaW5rZW5kPSdic3AtZGVzY3JpcHRpb25zJz5CU1AgRGVzY3JpcHRpb25zPC9saW5rPgorICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgIDwvcGFyYT4KIAogICAgIDxwYXJhPgpAQCAtNzIsOSArOTQsOSBAQAogICAgICAgICA8bm90ZT4KICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+S0JSQU5DSDwvZmlsZW5hbWU+IHZhbHVlIHRvIGRlZmluZSBhbgogICAgICAgICAgICAgYWx0ZXJuYXRlIGJyYW5jaCB0eXBpY2FsbHkgd2l0aCBhIG1hY2hpbmUgb3ZlcnJpZGUgYXMgc2hvd24gaGVyZQotICAgICAgICAgICAgZnJvbSB0aGUgPGZpbGVuYW1lPm1ldGEtZW1lbmxvdzwvZmlsZW5hbWU+IGxheWVyOgorICAgICAgICAgICAgZnJvbSB0aGUgPGZpbGVuYW1lPm1ldGEteW9jdG8tYnNwPC9maWxlbmFtZT4gbGF5ZXI6CiAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEtCUkFOQ0hfZW1lbmxvdy1ub2VtZ2QgPSAic3RhbmRhcmQvYmFzZSIKKyAgICAgS0JSQU5DSF9lZGdlcm91dGVyID0gInN0YW5kYXJkL2VkZ2Vyb3V0ZXIiCiAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgIDwvbm90ZT4KICAgICA8L3BhcmE+CkBAIC0xMTMsMTYgKzEzNSw3IEBACiAgICAgICAgIHJlY2lwZS4KICAgICAgICAgVGhlIHRvb2xzIHVzZSB0aGUgZmlyc3QgQlNQIGRlc2NyaXB0aW9uIGl0IGZpbmRzIHRoYXQgbWF0Y2gKICAgICAgICAgYm90aCB2YXJpYWJsZXMuCi0gICAgICAgIElmIHRoZSB0b29scyBjYW5ub3QgZmluZCBhIG1hdGNoLCB0aGV5IGlzc3VlIGEgd2FybmluZyBzdWNoIGFzCi0gICAgICAgIHRoZSBmb2xsb3dpbmc6Ci0gICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgV0FSTklORzogQ2FuJ3QgZmluZCBhbnkgQlNQIGhhcmR3YXJlIG9yIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzLgotICAgICBXQVJOSU5HOiBMb29rZWQgYXQgbWV0YS9jZmcvYnJva2VuL2VtZW5sb3ctYnJva2VuL2hkd19mcmFncy50eHQgYW5kCi0gICAgICAgICAgICAgIG1ldGEvY2ZnL2Jyb2tlbi9lbWVubG93LWJyb2tlbi9yZXF1aXJlZF9mcmFncy50eHQgaW4gZGlyZWN0b3J5OgotICAgICAgICAgICAgICBtZXRhL2NmZy9icm9rZW4vZW1lbmxvdy1icm9rZW4KLSAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIDxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+IHdhcyBzZXQgdG8gImVtZW5sb3ctYnJva2VuIgotICAgICAgICBhbmQgPGZpbGVuYW1lPkxJTlVYX0tFUk5FTF9UWVBFPC9maWxlbmFtZT4gd2FzIHNldCB0byAiYnJva2VuIi4KKyAgICAgICAgSWYgdGhlIHRvb2xzIGNhbm5vdCBmaW5kIGEgbWF0Y2gsIHRoZXkgaXNzdWUgYSB3YXJuaW5nLgogICAgIDwvcGFyYT4KIAogICAgIDxwYXJhPgpAQCAtMTU0LDE5ICsxNjcsMTMgQEAKICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICBUaGUgdmFsdWUgb2YgdGhlIGVudHJpZXMgaW4gPGZpbGVuYW1lPktFUk5FTF9GRUFUVVJFUzwvZmlsZW5hbWU+CiAgICAgICAgIGFyZSBkZXBlbmRlbnQgb24gdGhlaXIgbG9jYXRpb24gd2l0aGluIHRoZSBrZXJuZWwgTWV0YWRhdGEgaXRzZWxmLgotICAgICAgICBUaGUgZXhhbXBsZXMgaGVyZSBhcmUgdGFrZW4gZnJvbSB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPgotICAgICAgICBicmFuY2ggb2YgdGhlIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE5PC9maWxlbmFtZT4gcmVwb3NpdG9yeS4KLSAgICAgICAgV2l0aGluIHRoYXQgYnJhbmNoLCAiZmVhdHVyZXMiIGFuZCAiY2ZnIiBhcmUgc3ViZGlyZWN0b3JpZXMgb2YgdGhlCi0gICAgICAgIDxmaWxlbmFtZT5tZXRhL2NmZy9rZXJuZWwtY2FjaGU8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgIFRoZSBleGFtcGxlcyBoZXJlIGFyZSB0YWtlbiBmcm9tIHRoZQorICAgICAgICA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsLWNhY2hlPC9maWxlbmFtZT4gcmVwb3NpdG9yeS4KKyAgICAgICAgRWFjaCBicmFuY2ggb2YgdGhpcyByZXBvc2l0b3J5IGNvbnRhaW5zICJmZWF0dXJlcyIgYW5kICJjZmciCisgICAgICAgIHN1YmRpcmVjdG9yaWVzIGF0IHRoZSB0b3AtbGV2ZWwuCiAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCi0gICAgICAgICI8bGluayBsaW5rZW5kPSdrZXJuZWwtbWV0YWRhdGEtc3ludGF4Jz5LZXJuZWwgTWV0YWRhdGEgU3ludGF4PC9saW5rPiIgc2VjdGlvbi4KLSAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICBUaGUgcHJvY2Vzc2luZyBvZiB0aGUgdGhlc2UgdmFyaWFibGVzIGhhcyBldm9sdmVkIHNvbWUgYmV0d2VlbiB0aGUKLQkgICAgICAgIDAuOSBhbmQgMS4zIHJlbGVhc2VzIG9mIHRoZSBZb2N0byBQcm9qZWN0IGFuZCBhc3NvY2lhdGVkCi0JICAgICAgICBrZXJuLXRvb2xzIHNvdXJjZXMuCi0gICAgICAgICAgICBUaGUgZGVzY3JpcHRpb25zIGluIHRoaXMgc2VjdGlvbiBhcmUgYWNjdXJhdGUgZm9yIDEuMyBhbmQgbGF0ZXIKLQkgICAgICAgIHJlbGVhc2VzIG9mIHRoZSBZb2N0byBQcm9qZWN0LgotICAgICAgICA8L25vdGU+CisgICAgICAgICI8bGluayBsaW5rZW5kPSdrZXJuZWwtbWV0YWRhdGEtc3ludGF4Jz5LZXJuZWwgTWV0YWRhdGEgU3ludGF4PC9saW5rPiIKKyAgICAgICAgc2VjdGlvbi4KICAgICA8L3BhcmE+CiA8L3NlY3Rpb24+CiAKQEAgLTI3OSwxMSArMjg2LDEzIEBACiAKICAgICA8cGFyYT4KICAgICAgICAgUGF0aHMgdXNlZCBpbiBrZXJuZWwgTWV0YWRhdGEgZmlsZXMgYXJlIHJlbGF0aXZlIHRvCi0gICAgICAgIDxmaWxlbmFtZT4mbHQ7YmFzZSZndDs8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgZWl0aGVyCisgICAgICAgIDxyZXBsYWNlYWJsZT5iYXNlPC9yZXBsYWNlYWJsZT4sIHdoaWNoIGlzIGVpdGhlcgogICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L3VsaW5rPgogICAgICAgICBpZiB5b3UgYXJlIGNyZWF0aW5nIE1ldGFkYXRhIGluCiAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlY2lwZS1zcGFjZS1tZXRhZGF0YSc+cmVjaXBlLXNwYWNlPC9saW5rPiwKLSAgICAgICAgb3IgPGZpbGVuYW1lPm1ldGEvY2ZnL2tlcm5lbC1jYWNoZS88L2ZpbGVuYW1lPiBpZiB5b3UgYXJlIGNyZWF0aW5nCisgICAgICAgIG9yIHRoZSB0b3AgbGV2ZWwgb2YKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2kveW9jdG8ta2VybmVsLWNhY2hlL3RyZWUvJz48ZmlsZW5hbWU+eW9jdG8ta2VybmVsLWNhY2hlPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICBpZiB5b3UgYXJlIGNyZWF0aW5nCiAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J21ldGFkYXRhLW91dHNpZGUtdGhlLXJlY2lwZS1zcGFjZSc+TWV0YWRhdGEgb3V0c2lkZSBvZiB0aGUgcmVjaXBlLXNwYWNlPC9saW5rPi4KICAgICA8L3BhcmE+CiAKQEAgLTMwMCwxMiArMzA5LDE4IEBACiAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSBTeW1tZXRyaWMgTXVsdGktUHJvY2Vzc2luZyAoU01QKSBmcmFnbWVudCBpbmNsdWRlZCBpbiB0aGUKLSAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE5PC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkKLSAgICAgICAgICAgIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgdHdvIGZpbGVzOgorICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgY29uc2lkZXIgdGhlIFN5bW1ldHJpYyBNdWx0aS1Qcm9jZXNzaW5nIChTTVApCisgICAgICAgICAgICBmcmFnbWVudCB1c2VkIHdpdGggdGhlIDxmaWxlbmFtZT5saW51eC15b2N0by00LjEyPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGtlcm5lbCBhcyBkZWZpbmVkIG91dHNpZGUgb2YgdGhlIHJlY2lwZSBzcGFjZSAoaS5lLgorICAgICAgICAgICAgPGZpbGVuYW1lPnlvY3RvLWtlcm5lbC1jYWNoZTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIFRoaXMgTWV0YWRhdGEgY29uc2lzdHMgb2YgdHdvIGZpbGVzOiA8ZmlsZW5hbWU+c21wLnNjYzwvZmlsZW5hbWU+CisgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPnNtcC5jZmc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGVzZSBmaWxlcyBpbiB0aGUgPGZpbGVuYW1lPmNmZzwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICAgICAgb2YgdGhlIDxmaWxlbmFtZT55b2N0by00LjEyPC9maWxlbmFtZT4gYnJhbmNoIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPnlvY3RvLWtlcm5lbC1jYWNoZTwvZmlsZW5hbWU+IEdpdCByZXBvc2l0b3J5OgogICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICBjZmcvc21wLnNjYzoKLSAgICAgICAgZGVmaW5lIEtGRUFUVVJFX0RFU0NSSVBUSU9OICJFbmFibGUgU01QIgorICAgICAgICBkZWZpbmUgS0ZFQVRVUkVfREVTQ1JJUFRJT04gIkVuYWJsZSBTTVAgZm9yIDMyIGJpdCBidWlsZHMiCiAgICAgICAgIGRlZmluZSBLRkVBVFVSRV9DT01QQVRJQklMSVRZIGFsbAogCiAgICAgICAgIGtjb25mIGhhcmR3YXJlIHNtcC5jZmcKQEAgLTMxNiwyMiArMzMxLDI3IEBACiAgICAgICAgICMgSW5jcmVhc2UgZGVmYXVsdCBOUl9DUFVTIGZyb20gOCB0byA2NCBzbyB0aGF0IHBsYXRmb3JtIHdpdGgKICAgICAgICAgIyBtb3JlIHRoYW4gOCBwcm9jZXNzb3JzIGNhbiBiZSBhbGwgYWN0aXZhdGVkIGF0IGJvb3QgdGltZQogICAgICAgICBDT05GSUdfTlJfQ1BVUz02NAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgaXMgbmVlZGVkIHdoZW4gc2V0dGluZyBOUl9DUFVTIHRvIHNvbWV0aGluZworICAgICAgICAjIGdyZWF0ZXIgdGhhbiA4IG9uIHg4NiBhcmNoaXRlY3R1cmVzLCBpdCBzaG91bGQgYmUgYXV0b21hdGljYWxseQorICAgICAgICAjIGRpc3JlZ2FyZGVkIGJ5IEtjb25maWcgd2hlbiB1c2luZyBhIGRpZmZlcmVudCBhcmNoCisgICAgICAgIENPTkZJR19YODZfQklHU01QPXkKICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIFlvdSBjYW4gZmluZCBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmF0aW9uIGZyYWdtZW50IGZpbGVzIGluIHRoZQotICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NyZWF0aW5nLWNvbmZpZy1mcmFnbWVudHMnPkNyZWF0aW5nIENvbmZpZ3VyYXRpb24gRnJhZ21lbnRzPC91bGluaz4iCi0gICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBhbmQgaW4KLSAgICAgICAgICAgIHRoZSAiPGxpbmsgbGlua2VuZD0nZ2VuZXJhdGluZy1jb25maWd1cmF0aW9uLWZpbGVzJz5HZW5lcmF0aW5nIENvbmZpZ3VyYXRpb24gRmlsZXM8L2xpbms+IgotICAgICAgICAgICAgc2VjdGlvbiBlYXJsaWVyIGluIHRoaXMgbWFudWFsLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGdlbmVyYWwgaW5mb3JtYXRpb24gb24gY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlcyBpbgorICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3JlYXRpbmctY29uZmlnLWZyYWdtZW50cyc+Q3JlYXRpbmcgQ29uZmlndXJhdGlvbiBGcmFnbWVudHM8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2l0aGluIHRoZSA8ZmlsZW5hbWU+c21wLnNjYzwvZmlsZW5hbWU+IGZpbGUsIHRoZQogICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtGRUFUVVJFX0RFU0NSSVBUSU9OJz48ZmlsZW5hbWU+S0ZFQVRVUkVfREVTQ1JJUFRJT048L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICBwcm92aWRlcyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBmcmFnbWVudC4KKyAgICAgICAgICAgIHN0YXRlbWVudCBwcm92aWRlcyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBmcmFnbWVudC4KICAgICAgICAgICAgIEhpZ2hlciBsZXZlbCBrZXJuZWwgdG9vbHMgdXNlIHRoaXMgZGVzY3JpcHRpb24uCiAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+a2NvbmY8L2ZpbGVuYW1lPiBjb21tYW5kIGlzIHVzZWQgdG8gaW5jbHVkZSB0aGUKKyAgICAgICAgICAgIEFsc28gd2l0aGluIHRoZSA8ZmlsZW5hbWU+c21wLnNjYzwvZmlsZW5hbWU+IGZpbGUsIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmtjb25mPC9maWxlbmFtZT4gY29tbWFuZCBpbmNsdWRlcyB0aGUKICAgICAgICAgICAgIGFjdHVhbCBjb25maWd1cmF0aW9uIGZyYWdtZW50IGluIGFuIDxmaWxlbmFtZT4uc2NjPC9maWxlbmFtZT4KICAgICAgICAgICAgIGZpbGUsIGFuZCB0aGUgImhhcmR3YXJlIiBrZXl3b3JkIGlkZW50aWZpZXMgdGhlIGZyYWdtZW50IGFzCiAgICAgICAgICAgICBiZWluZyBoYXJkd2FyZSBlbmFibGluZywgYXMgb3Bwb3NlZCB0byBnZW5lcmFsIHBvbGljeSwKQEAgLTM0Nyw3ICszNjcsNyBAQAogCiAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgQXMgZGVzY3JpYmVkIGluIHRoZQotICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2dlbmVyYXRpbmctY29uZmlndXJhdGlvbi1maWxlcyc+R2VuZXJhdGluZyBDb25maWd1cmF0aW9uIEZpbGVzPC9saW5rPiIKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd2YWxpZGF0aW5nLWNvbmZpZ3VyYXRpb24nPlZhbGlkYXRpbmcgQ29uZmlndXJhdGlvbjwvbGluaz4iCiAgICAgICAgICAgICBzZWN0aW9uLCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIEJpdEJha2UgY29tbWFuZCB0byBhdWRpdCB5b3VyCiAgICAgICAgICAgICBjb25maWd1cmF0aW9uOgogICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgpAQCAtMzYzLDI2ICszODMsNzEgQEAKICAgICAgICAgICAgIFBhdGNoIGRlc2NyaXB0aW9ucyBhcmUgdmVyeSBzaW1pbGFyIHRvIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQKICAgICAgICAgICAgIGRlc2NyaXB0aW9ucywgd2hpY2ggYXJlIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbi4KICAgICAgICAgICAgIEhvd2V2ZXIsIGluc3RlYWQgb2YgYSA8ZmlsZW5hbWU+LmNmZzwvZmlsZW5hbWU+IGZpbGUsIHRoZXNlCi0gICAgICAgICAgICBkZXNjcmlwdGlvbnMgd29yayB3aXRoIHNvdXJjZSBwYXRjaGVzLgorICAgICAgICAgICAgZGVzY3JpcHRpb25zIHdvcmsgd2l0aCBzb3VyY2UgcGF0Y2hlcyAoaS5lLgorICAgICAgICAgICAgPGZpbGVuYW1lPi5wYXRjaDwvZmlsZW5hbWU+IGZpbGVzKS4KICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQSB0eXBpY2FsIHBhdGNoIGluY2x1ZGVzIGEgZGVzY3JpcHRpb24gZmlsZSBhbmQgdGhlIHBhdGNoIGl0c2VsZjoKKyAgICAgICAgICAgIEEgdHlwaWNhbCBwYXRjaCBpbmNsdWRlcyBhIGRlc2NyaXB0aW9uIGZpbGUgYW5kIHRoZSBwYXRjaCBpdHNlbGYuCisgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBjb25zaWRlciB0aGUgYnVpbGQgcGF0Y2hlcyB1c2VkIHdpdGggdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tNC4xMjwvZmlsZW5hbWU+IGtlcm5lbCBhcyBkZWZpbmVkIG91dHNpZGUgb2YKKyAgICAgICAgICAgIHRoZSByZWNpcGUgc3BhY2UgKGkuZS4gPGZpbGVuYW1lPnlvY3RvLWtlcm5lbC1jYWNoZTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIFRoaXMgTWV0YWRhdGEgY29uc2lzdHMgb2Ygc2V2ZXJhbCBmaWxlczoKKyAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZC5zY2M8L2ZpbGVuYW1lPiBhbmQgYSBzZXQgb2YKKyAgICAgICAgICAgIDxmaWxlbmFtZT4qLnBhdGNoPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlc2UgZmlsZXMgaW4gdGhlIDxmaWxlbmFtZT5wYXRjaGVzL2J1aWxkPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGRpcmVjdG9yeSBvZiB0aGUgPGZpbGVuYW1lPnlvY3RvLTQuMTI8L2ZpbGVuYW1lPiBicmFuY2ggaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsLWNhY2hlPC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdGluZ3Mgc2hvdyB0aGUgPGZpbGVuYW1lPmJ1aWxkLnNjYzwvZmlsZW5hbWU+CisgICAgICAgICAgICBmaWxlIGFuZCBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPm1vZHBvc3QtbWFzay10cml2aWFsLXdhcm5pbmdzLnBhdGNoPC9maWxlbmFtZT4gZmlsZToKICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgcGF0Y2hlcy9teXBhdGNoLnNjYzoKLSAgICAgICAgcGF0Y2ggbXlwYXRjaC5wYXRjaAorICAgICBwYXRjaGVzL2J1aWxkL2J1aWxkLnNjYzoKKyAgICAgICAgcGF0Y2ggYXJtLXNlcmlhbGl6ZS1idWlsZC10YXJnZXRzLnBhdGNoCisgICAgICAgIHBhdGNoIHBvd2VycGMtc2VyaWFsaXplLWltYWdlLXRhcmdldHMucGF0Y2gKKyAgICAgICAgcGF0Y2gga2J1aWxkLWV4Y2x1ZGUtbWV0YS1kaXJlY3RvcnktZnJvbS1kaXN0Y2xlYW4tcHJvY2Vzc2kucGF0Y2gKIAotICAgICBwYXRjaGVzL215cGF0Y2gucGF0Y2g6Ci0gICAgICAgIDxyZXBsYWNlYWJsZT50eXBpY2FsLXBhdGNoPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgIyBhcHBsaWVkIGJ5IGtnaXQKKyAgICAgICAgIyBwYXRjaCBrYnVpbGQtYWRkLW1ldGEtZmlsZXMtdG8tdGhlLWlnbm9yZS1saS5wYXRjaAorCisgICAgICAgIHBhdGNoIG1vZHBvc3QtbWFzay10cml2aWFsLXdhcm5pbmdzLnBhdGNoCisgICAgICAgIHBhdGNoIG1lbnVjb25maWctY2hlY2stbHhkaWFnbG9nLnNoLUFsbG93LXNwZWNpZmljYXRpb24tb2YucGF0Y2gKKworICAgICBwYXRjaGVzL2J1aWxkL21vZHBvc3QtbWFzay10cml2aWFsLXdhcm5pbmdzLnBhdGNoOgorICAgICAgICBGcm9tIGJkNDg5MzFiYzE0MmJkZDEwNDY2OGYzYTA2MmExZjIyNjAwYWFlNjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCisgICAgICAgIEZyb206IFBhdWwgR29ydG1ha2VyICZsdDtwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tJmd0OworICAgICAgICBEYXRlOiBTdW4sIDI1IEphbiAyMDA5IDE3OjU4OjA5IC0wNTAwCisgICAgICAgIFN1YmplY3Q6IFtQQVRDSF0gbW9kcG9zdDogbWFzayB0cml2aWFsIHdhcm5pbmdzCisKKyAgICAgICAgTmV3ZXIgSE9TVENDIHdpbGwgY29tcGxhaW4gYWJvdXQgdmFyaW91cyBzdGRpbyBmY25zIGJlY2F1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgICAgICAgICAgICAgIC4KKyAJICAgICAgICBjaGFyICpkdW1wX3dyaXRlID0gTlVMTCwgKmZpbGVzX3NvdXJjZSA9IE5VTEw7CisgCSAgICAgICAgaW50IG9wdDsKKyAgICAgICAgLS0KKyAgICAgICAgMi4xMC4xCisKKyAgICAgICAgZ2VuZXJhdGVkIGJ5IGNnaXQgdjAuMTAuMiBhdCAyMDE3LTA5LTI4IDE1OjIzOjIzIChHTVQpCiAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICBZb3UgY2FuIGNyZWF0ZSB0aGUgdHlwaWNhbCA8ZmlsZW5hbWU+LnBhdGNoPC9maWxlbmFtZT4KLSAgICAgICAgICAgIGZpbGUgdXNpbmcgPGZpbGVuYW1lPmRpZmYgLU51cnA8L2ZpbGVuYW1lPiBvcgotICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBmb3JtYXQtcGF0Y2g8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFRoZSBkZXNjcmlwdGlvbiBmaWxlIGNhbiBpbmNsdWRlIG11bHRpcGxlIHBhdGNoIHN0YXRlbWVudHMgd2hlcmUKKyAgICAgICAgICAgIGVhY2ggc3RhdGVtZW50IGhhbmRsZXMgYSBzaW5nbGUgcGF0Y2guCisgICAgICAgICAgICBJbiB0aGUgZXhhbXBsZSA8ZmlsZW5hbWU+YnVpbGQuc2NjPC9maWxlbmFtZT4gZmlsZSwgZml2ZSBwYXRjaAorICAgICAgICAgICAgc3RhdGVtZW50cyBleGlzdCBmb3IgdGhlIGZpdmUgcGF0Y2hlcyBpbiB0aGUgZGlyZWN0b3J5LgogICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgZGVzY3JpcHRpb24gZmlsZSBjYW4gaW5jbHVkZSBtdWx0aXBsZSBwYXRjaCBzdGF0ZW1lbnRzLAotICAgICAgICAgICAgb25lIHBlciBwYXRjaC4KKyAgICAgICAgICAgIFlvdSBjYW4gY3JlYXRlIGEgdHlwaWNhbCA8ZmlsZW5hbWU+LnBhdGNoPC9maWxlbmFtZT4gZmlsZSB1c2luZworICAgICAgICAgICAgPGZpbGVuYW1lPmRpZmYgLU51cnA8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBmb3JtYXQtcGF0Y2g8L2ZpbGVuYW1lPiBjb21tYW5kcy4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY3JlYXRlIHBhdGNoZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1kZXZ0b29sLXRvLXBhdGNoLXRoZS1rZXJuZWwnPlVzaW5nIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gdG8gUGF0Y2ggdGhlIEtlcm5lbDwvbGluaz4iCisgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy10cmFkaXRpb25hbC1rZXJuZWwtZGV2ZWxvcG1lbnQtdG8tcGF0Y2gtdGhlLWtlcm5lbCc+VXNpbmcgVHJhZGl0aW9uYWwgS2VybmVsIERldmVsb3BtZW50IHRvIFBhdGNoIHRoZSBLZXJuZWw8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbnMuCiAgICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3Rpb24+CiAKQEAgLTM5MSwyNiArNDU2LDIzIEBACiAKICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICBGZWF0dXJlcyBhcmUgY29tcGxleCBrZXJuZWwgTWV0YWRhdGEgdHlwZXMgdGhhdCBjb25zaXN0Ci0gICAgICAgICAgICBvZiBjb25maWd1cmF0aW9uIGZyYWdtZW50cyAoPGZpbGVuYW1lPmtjb25mPC9maWxlbmFtZT4pLCBwYXRjaGVzCi0gICAgICAgICAgICAoPGZpbGVuYW1lPnBhdGNoPC9maWxlbmFtZT4pLCBhbmQgcG9zc2libHkgb3RoZXIgZmVhdHVyZQotICAgICAgICAgICAgZGVzY3JpcHRpb24gZmlsZXMgKDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4pLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyBhIGZlYXR1cmUgZGVzY3JpcHRpb24gZmlsZToKKyAgICAgICAgICAgIG9mIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzLCBwYXRjaGVzLCBhbmQgcG9zc2libHkgb3RoZXIgZmVhdHVyZQorICAgICAgICAgICAgZGVzY3JpcHRpb24gZmlsZXMuCisgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGdlbmVyaWMgbGlzdGluZzoKICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgZmVhdHVyZXMvbXlmZWF0dXJlLnNjYwotICAgICAgICBkZWZpbmUgS0ZFQVRVUkVfREVTQ1JJUFRJT04gIkVuYWJsZSBteWZlYXR1cmUiCisgICAgIGZlYXR1cmVzLzxyZXBsYWNlYWJsZT5teWZlYXR1cmU8L3JlcGxhY2VhYmxlPi5zY2MKKyAgICAgICAgZGVmaW5lIEtGRUFUVVJFX0RFU0NSSVBUSU9OICJFbmFibGUgPHJlcGxhY2VhYmxlPm15ZmVhdHVyZTwvcmVwbGFjZWFibGU+IgogCi0gICAgICAgIHBhdGNoIDAwMDEtbXlmZWF0dXJlLWNvcmUucGF0Y2gKLSAgICAgICAgcGF0Y2ggMDAwMi1teWZlYXR1cmUtaW50ZXJmYWNlLnBhdGNoCisgICAgICAgIHBhdGNoIDAwMDEtPHJlcGxhY2VhYmxlPm15ZmVhdHVyZTwvcmVwbGFjZWFibGU+LWNvcmUucGF0Y2gKKyAgICAgICAgcGF0Y2ggMDAwMi08cmVwbGFjZWFibGU+bXlmZWF0dXJlPC9yZXBsYWNlYWJsZT4taW50ZXJmYWNlLnBhdGNoCiAKLSAgICAgICAgaW5jbHVkZSBjZmcvbXlmZWF0dXJlX2RlcGVuZGVuY3kuc2NjCi0gICAgICAgIGtjb25mIG5vbi1oYXJkd2FyZSBteWZlYXR1cmUuY2ZnCisgICAgICAgIGluY2x1ZGUgY2ZnLzxyZXBsYWNlYWJsZT5teWZlYXR1cmU8L3JlcGxhY2VhYmxlPl9kZXBlbmRlbmN5LnNjYworICAgICAgICBrY29uZiBub24taGFyZHdhcmUgPHJlcGxhY2VhYmxlPm15ZmVhdHVyZTwvcmVwbGFjZWFibGU+LmNmZwogICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgVGhpcyBleGFtcGxlIHNob3dzIGhvdyB0aGUgPGZpbGVuYW1lPnBhdGNoPC9maWxlbmFtZT4gYW5kCiAgICAgICAgICAgICA8ZmlsZW5hbWU+a2NvbmY8L2ZpbGVuYW1lPiBjb21tYW5kcyBhcmUgdXNlZCBhcyB3ZWxsIGFzCi0gICAgICAgICAgICBob3cgYW4gYWRkaXRpb25hbCBmZWF0dXJlIGRlc2NyaXB0aW9uIGZpbGUgaXMgaW5jbHVkZWQuCisgICAgICAgICAgICBob3cgYW4gYWRkaXRpb25hbCBmZWF0dXJlIGRlc2NyaXB0aW9uIGZpbGUgaXMgaW5jbHVkZWQgd2l0aAorICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4gY29tbWFuZC4KICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgIDxwYXJhPgpAQCAtNDMwLDIxICs0OTIsNDcgQEAKICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICBBIGtlcm5lbCB0eXBlIGRlZmluZXMgYSBoaWdoLWxldmVsIGtlcm5lbCBwb2xpY3kgYnkKICAgICAgICAgICAgIGFnZ3JlZ2F0aW5nIG5vbi1oYXJkd2FyZSBjb25maWd1cmF0aW9uIGZyYWdtZW50cyB3aXRoCi0gICAgICAgICAgICBwYXRjaGVzIHlvdSB3YW50IHRvIHVzZSB3aGVuIGJ1aWxkaW5nIGEgTGludXgga2VybmVscyBvZiBhCi0gICAgICAgICAgICBzcGVjaWZpYyB0eXBlLgorICAgICAgICAgICAgcGF0Y2hlcyB5b3Ugd2FudCB0byB1c2Ugd2hlbiBidWlsZGluZyBhIExpbnV4IGtlcm5lbCBvZiBhCisgICAgICAgICAgICBzcGVjaWZpYyB0eXBlIChlLmcuIGEgcmVhbC10aW1lIGtlcm5lbCkuCiAgICAgICAgICAgICBTeW50YWN0aWNhbGx5LCBrZXJuZWwgdHlwZXMgYXJlIG5vIGRpZmZlcmVudCB0aGFuIGZlYXR1cmVzCiAgICAgICAgICAgICBhcyBkZXNjcmliZWQgaW4gdGhlICI8bGluayBsaW5rZW5kPSdmZWF0dXJlcyc+RmVhdHVyZXM8L2xpbms+IgogICAgICAgICAgICAgc2VjdGlvbi4KLSAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+TElOVVhfS0VSTkVMX1RZUEU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpbiB0aGUga2VybmVsCi0gICAgICAgICAgICByZWNpcGUgc2VsZWN0cyB0aGUga2VybmVsIHR5cGUuCi0gICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSd1c2luZy1rZXJuZWwtbWV0YWRhdGEtaW4tYS1yZWNpcGUnPlVzaW5nIEtlcm5lbCBNZXRhZGF0YSBpbiBhIFJlY2lwZTwvbGluaz4iCi0gICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgVGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTElOVVhfS0VSTkVMX1RZUEUnPjxmaWxlbmFtZT5MSU5VWF9LRVJORUxfVFlQRTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIGluIHRoZSBrZXJuZWwgcmVjaXBlIHNlbGVjdHMgdGhlIGtlcm5lbCB0eXBlLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGluIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG9fNC4xMi5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICBrZXJuZWwgcmVjaXBlIGZvdW5kIGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4PC9maWxlbmFtZT4sIGEKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjcmVxdWlyZS1pbmNsdXNpb24nPjxmaWxlbmFtZT5yZXF1aXJlPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgZGlyZWN0aXZlIGluY2x1ZGVzIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPnBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZmlsZSwgd2hpY2ggaGFzIHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50IHRoYXQgZGVmaW5lcyB0aGUgZGVmYXVsdAorICAgICAgICAgICAga2VybmVsIHR5cGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJTlVYX0tFUk5FTF9UWVBFID8/PSAic3RhbmRhcmQiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICB0cmVlIGRlZmluZXMgdGhyZWUga2VybmVsIHR5cGVzOiAic3RhbmRhcmQiLAotICAgICAgICAgICAgInRpbnkiLCBhbmQgInByZWVtcHQtcnQiOgorICAgICAgICAgICAgQW5vdGhlciBleGFtcGxlIHdvdWxkIGJlIHRoZSByZWFsLXRpbWUga2VybmVsIChpLmUuCisgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tcnRfNC4xMi5iYjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIFRoaXMga2VybmVsIHJlY2lwZSBkaXJlY3RseSBzZXRzIHRoZSBrZXJuZWwgdHlwZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSU5VWF9LRVJORUxfVFlQRSA9ICJwcmVlbXB0LXJ0IgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGtlcm5lbCByZWNpcGVzIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4PC9maWxlbmFtZT4gZGlyZWN0b3J5IG9mIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xMi5iYjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSd1c2luZy1rZXJuZWwtbWV0YWRhdGEtaW4tYS1yZWNpcGUnPlVzaW5nIEtlcm5lbCBNZXRhZGF0YSBpbiBhIFJlY2lwZTwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhyZWUga2VybmVsIHR5cGVzICgic3RhbmRhcmQiLCAidGlueSIsIGFuZCAicHJlZW1wdC1ydCIpIGFyZQorICAgICAgICAgICAgc3VwcG9ydGVkIGZvciBMaW51eCBZb2N0byBrZXJuZWxzOgogICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+InN0YW5kYXJkIjoKICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZXMgdGhlIGdlbmVyaWMgTGludXgga2VybmVsIHBvbGljeSBvZiB0aGUgWW9jdG8KQEAgLTQ3MSwyOSArNTU5LDQwIEBACiAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSAic3RhbmRhcmQiIGtlcm5lbCB0eXBlIGlzIGRlZmluZWQgYnkKLSAgICAgICAgICAgIDxmaWxlbmFtZT5zdGFuZGFyZC5zY2M8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgIEZvciBhbnkgZ2l2ZW4ga2VybmVsIHR5cGUsIHRoZSBNZXRhZGF0YSBpcyBkZWZpbmVkIGJ5IHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiAoZS5nLiA8ZmlsZW5hbWU+c3RhbmRhcmQuc2NjPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgSGVyZSBpcyBhIHBhcnRpYWwgbGlzdGluZyBmb3IgdGhlIDxmaWxlbmFtZT5zdGFuZGFyZC5zY2M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZmlsZSwgd2hpY2ggaXMgZm91bmQgaW4gdGhlIDxmaWxlbmFtZT5rdHlwZXMvc3RhbmRhcmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZGlyZWN0b3J5IG9mIHRoZSA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsLWNhY2hlPC9maWxlbmFtZT4gR2l0CisgICAgICAgICAgICByZXBvc2l0b3J5OgogICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAjIEluY2x1ZGUgdGhpcyBrZXJuZWwgdHlwZSBmcmFnbWVudCB0byBnZXQgdGhlIHN0YW5kYXJkIGZlYXR1cmVzIGFuZAogICAgICAjIGNvbmZpZ3VyYXRpb24gdmFsdWVzLgogCi0gICAgICMgSW5jbHVkZSBhbGwgc3RhbmRhcmQgZmVhdHVyZXMKLSAgICAgaW5jbHVkZSBzdGFuZGFyZC1ub2NmZy5zY2MKKyAgICAgIyBOb3RlOiBpZiBvbmx5IHRoZSBmZWF0dXJlcyBhcmUgZGVzaXJlZCwgYnV0IG5vdCB0aGUgY29uZmlndXJhdGlvbgorICAgICAjICAgICAgIHRoZW4gdGhpcyBzaG91bGQgYmUgaW5jbHVkZWQgYXM6CisgICAgICMgICAgICAgICAgICAgaW5jbHVkZSBrdHlwZXMvc3RhbmRhcmQvc3RhbmRhcmQuc2NjIG5vY2ZnCisgICAgICMgICAgICAgaWYgbm8gY2hhaW5lZCBjb25maWd1cmF0aW9uIGlzIGRlc2lyZWQsIGluY2x1ZGUgaXQgYXM6CisgICAgICMgICAgICAgICAgICAgaW5jbHVkZSBrdHlwZXMvc3RhbmRhcmQvc3RhbmRhcmQuc2NjIG5vY2ZnIGluaGVyaXQKKworCisKKyAgICAgaW5jbHVkZSBrdHlwZXMvYmFzZS9iYXNlLnNjYworICAgICBicmFuY2ggc3RhbmRhcmQKIAogICAgICBrY29uZiBub24taGFyZHdhcmUgc3RhbmRhcmQuY2ZnCiAKLSAgICAgIyBpbmRpdmlkdWFsIGNmZyBibG9jayBzZWN0aW9uCi0gICAgIGluY2x1ZGUgY2ZnL2ZzL2RldnRtcGZzLnNjYwotICAgICBpbmNsdWRlIGNmZy9mcy9kZWJ1Z2ZzLnNjYwotICAgICBpbmNsdWRlIGNmZy9mcy9idHJmcy5zY2MKLSAgICAgaW5jbHVkZSBjZmcvZnMvZXh0Mi5zY2MKLSAgICAgaW5jbHVkZSBjZmcvZnMvZXh0My5zY2MKLSAgICAgaW5jbHVkZSBjZmcvZnMvZXh0NC5zY2MKKyAgICAgaW5jbHVkZSBmZWF0dXJlcy9rZ2RiL2tnZGIuc2NjCisgICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgICAgICAuCiAKLSAgICAgaW5jbHVkZSBjZmcvbmV0L2lwdjYuc2NjCi0gICAgIGluY2x1ZGUgY2ZnL25ldC9pcF9uZi5zY2MKICAgICAgaW5jbHVkZSBjZmcvbmV0L2lwNl9uZi5zY2MKICAgICAgaW5jbHVkZSBjZmcvbmV0L2JyaWRnZS5zY2MKKworICAgICBpbmNsdWRlIGNmZy9zeXN0ZW1kLnNjYworCisgICAgIGluY2x1ZGUgZmVhdHVyZXMvcmZraWxsL3Jma2lsbC5zY2MKICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgPC9wYXJhPgogCkBAIC01MzksOSArNjM4LDkgQEAKICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGEgQlNQIGRlc2NyaXB0aW9uIHN0cnVjdHVyYWwgb3ZlcnZpZXcgYWxvbmcKLSAgICAgICAgICAgIHdpdGggYWdncmVnYXRpb24gY29uY2VwdHMgYXMgd2VsbCBhcyBhIGRldGFpbGVkIGV4YW1wbGUgdXNpbmcKLSAgICAgICAgICAgIGEgQlNQIHN1cHBvcnRlZCBieSB0aGUgWW9jdG8gUHJvamVjdCAoaS5lLiBNaW5ub3cgQm9hcmQpLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIG92ZXJ2aWV3cyB0aGUgQlNQIGRlc2NyaXB0aW9uIHN0cnVjdHVyZSwgdGhlCisgICAgICAgICAgICBhZ2dyZWdhdGlvbiBjb25jZXB0cywgYW5kIHByZXNlbnRzIGEgZGV0YWlsZWQgZXhhbXBsZSB1c2luZworICAgICAgICAgICAgYSBCU1Agc3VwcG9ydGVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0IChpLmUuIEJlYWdsZUJvbmUgQm9hcmQpLgogICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPHNlY3Rpb24gaWQ9J2JzcC1kZXNjcmlwdGlvbi1maWxlLW92ZXJ2aWV3Jz4KQEAgLTU0OSw3ICs2NDgsNyBAQAogCiAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICBGb3Igc2ltcGxpY2l0eSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyB0b3AtbGV2ZWwgQlNQCi0gICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiBmaWxlcyBmb3IgdGhlIEJlYWdsZUJvbmUgYm9hcmQuCiAgICAgICAgICAgICAgICAgVG9wLWxldmVsIEJTUCBkZXNjcmlwdGlvbnMgZmlsZXMgZW1wbG95IGJvdGggYSBzdHJ1Y3R1cmUKICAgICAgICAgICAgICAgICBhbmQgbmFtaW5nIGNvbnZlbnRpb24gZm9yIGNvbnNpc3RlbmN5LgogICAgICAgICAgICAgICAgIFRoZSBuYW1pbmcgY29udmVudGlvbiBmb3IgdGhlIGZpbGUgaXMgYXMgZm9sbG93czoKQEAgLTU1NywzMSArNjU2LDMwIEBACiAgICAgIDxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+LTxyZXBsYWNlYWJsZT5rZXJuZWxfdHlwZTwvcmVwbGFjZWFibGU+LnNjYwogICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGV4YW1wbGUgdG9wLWxldmVsIEJTUCBmaWxlbmFtZXMgZm9yIHRoZQotICAgICAgICAgICAgICAgIE1pbm5vdyBCb2FyZCBCU1AsIHdoaWNoIGlzIHN1cHBvcnRlZCBieSB0aGUgWW9jdG8gUHJvamVjdDoKKyAgICAgICAgICAgICAgICBCZWFnbGVCb25lIEJvYXJkIEJTUCwgd2hpY2ggaXMgc3VwcG9ydGVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0OgogICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgbWlubm93LXN0YW5kYXJkLnNjYwotICAgICBtaW5ub3ctcHJlZW1wdC1ydC5zY2MKLSAgICAgbWlubm93LXRpbnkuc2NjCisgICAgIGJlYWdsZWJvbmUtc3RhbmRhcmQuc2NjCisgICAgIGJlYWdsZWJvbmUtcHJlZW1wdC1ydC5zY2MKICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgRWFjaCBmaWxlIHVzZXMgdGhlIEJTUCBuYW1lIGZvbGxvd2VkIGJ5IHRoZSBrZXJuZWwgdHlwZS4KICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgaXMgc2ltcGxlIEJTUCBkZXNjcmlwdGlvbiBmaWxlIHdob3NlIG5hbWUgaGFzIHRoZQotICAgICAgICAgICAgICAgIGZvcm0KLSAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4tc3RhbmRhcmQ8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIGFuZCBzdXBwb3J0cyB0aGUgPHJlcGxhY2VhYmxlPm15YnNwPC9yZXBsYWNlYWJsZT4gbWFjaGluZSB1c2luZwotICAgICAgICAgICAgICAgIGEgc3RhbmRhcmQga2VybmVsOgorICAgICAgICAgICAgICAgIEV4YW1pbmUgdGhlIDxmaWxlbmFtZT5iZWFnbGVib25lLXN0YW5kYXJkLnNjYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZToKICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIGRlZmluZSBLTUFDSElORSA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPgorICAgICBkZWZpbmUgS01BQ0hJTkUgYmVhZ2xlYm9uZQogICAgICBkZWZpbmUgS1RZUEUgc3RhbmRhcmQKLSAgICAgZGVmaW5lIEtBUkNIIGkzODYKKyAgICAgZGVmaW5lIEtBUkNIIGFybQogCi0gICAgIGluY2x1ZGUga3R5cGVzL3N0YW5kYXJkCisgICAgIGluY2x1ZGUga3R5cGVzL3N0YW5kYXJkL3N0YW5kYXJkLnNjYworICAgICBicmFuY2ggYmVhZ2xlYm9uZQogCi0gICAgIGluY2x1ZGUgPHJlcGxhY2VhYmxlPm15YnNwPC9yZXBsYWNlYWJsZT4uc2NjCisgICAgIGluY2x1ZGUgYmVhZ2xlYm9uZS5zY2MKIAotICAgICBrY29uZiBoYXJkd2FyZSA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPi08cmVwbGFjZWFibGU+ZXh0cmE8L3JlcGxhY2VhYmxlPi5jZmcKKyAgICAgIyBkZWZhdWx0IHBvbGljeSBmb3Igc3RhbmRhcmQga2VybmVscworICAgICBpbmNsdWRlIGZlYXR1cmVzL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC5zY2MKKyAgICAgaW5jbHVkZSBmZWF0dXJlcy9wcm9maWxpbmcvcHJvZmlsaW5nLnNjYwogICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICBFdmVyeSB0b3AtbGV2ZWwgQlNQIGRlc2NyaXB0aW9uIGZpbGUgc2hvdWxkIGRlZmluZSB0aGUKICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS01BQ0hJTkUnPjxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4sCkBAIC01OTEsMjMgKzY4OSwyMCBAQAogICAgICAgICAgICAgICAgIFRoZXNlIHZhcmlhYmxlcyBhbGxvdyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBpZGVudGlmeQogICAgICAgICAgICAgICAgIHRoZSBkZXNjcmlwdGlvbiBhcyBtZWV0aW5nIHRoZSBjcml0ZXJpYSBzZXQgYnkgdGhlIHJlY2lwZSBiZWluZwogICAgICAgICAgICAgICAgIGJ1aWx0LgotICAgICAgICAgICAgICAgIFRoaXMgc2ltcGxlIGV4YW1wbGUgc3VwcG9ydHMgdGhlICJteWJzcCIgbWFjaGluZSBmb3IgdGhlICJzdGFuZGFyZCIKLSAgICAgICAgICAgICAgICBrZXJuZWwgYW5kIHRoZSAiaTM4NiIgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBzdXBwb3J0cyB0aGUgImJlYWdsZWJvbmUiIG1hY2hpbmUgZm9yIHRoZQorICAgICAgICAgICAgICAgICJzdGFuZGFyZCIga2VybmVsIGFuZCB0aGUgImFybSIgYXJjaGl0ZWN0dXJlLgogICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICBCZSBhd2FyZSB0aGF0IGEgaGFyZCBsaW5rIGJldHdlZW4gdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPktUWVBFPC9maWxlbmFtZT4gdmFyaWFibGUgYW5kIGEga2VybmVsIHR5cGUgZGVzY3JpcHRpb24KLSAgICAgICAgICAgICAgICBmaWxlIGRvZXMgbm90IGV4aXN0LgotICAgICAgICAgICAgICAgIFRodXMsIGlmIHlvdSBkbyBub3QgaGF2ZSBrZXJuZWwgdHlwZXMgZGVmaW5lZCBpbiB5b3VyIGtlcm5lbAotICAgICAgICAgICAgICAgIE1ldGFkYXRhLCB5b3Ugb25seSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBrZXJuZWwgcmVjaXBlJ3MKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S1RZUEU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBhbmQgYSBrZXJuZWwgdHlwZQorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIGZpbGUgZG9lcyBub3QgZXhpc3QuCisgICAgICAgICAgICAgICAgVGh1cywgaWYgeW91IGRvIG5vdCBoYXZlIHRoZSBrZXJuZWwgdHlwZSBkZWZpbmVkIGluIHlvdXIga2VybmVsCisgICAgICAgICAgICAgICAgTWV0YWRhdGEgYXMgaXQgaXMgaGVyZSwgeW91IG9ubHkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUKICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTElOVVhfS0VSTkVMX1RZUEUnPjxmaWxlbmFtZT5MSU5VWF9LRVJORUxfVFlQRTwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgdGhlIDxmaWxlbmFtZT5LVFlQRTwvZmlsZW5hbWU+IHZhcmlhYmxlIGluIHRoZQotICAgICAgICAgICAgICAgIEJTUCBkZXNjcmlwdGlvbiBmaWxlIG1hdGNoLgotICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICBGdXR1cmUgdmVyc2lvbnMgb2YgdGhlIHRvb2xpbmcgbWFrZSB0aGUgc3BlY2lmaWNhdGlvbiBvZgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S1RZUEU8L2ZpbGVuYW1lPiBpbiB0aGUgQlNQIG9wdGlvbmFsLgotICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB0aGUga2VybmVsIHJlY2lwZSBhbmQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPktUWVBFPC9maWxlbmFtZT4gdmFyaWFibGUgaW4gdGhlIEJTUCBkZXNjcmlwdGlvbgorICAgICAgICAgICAgICAgIGZpbGUgbWF0Y2guCiAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgIDxwYXJhPgpAQCAtNjE2LDEzICs3MTEsMTIgQEAKICAgICAgICAgICAgICAgICAic3RhbmRhcmQiLgogICAgICAgICAgICAgICAgIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCB0aGlzIGlzIGRvbmUgdXNpbmcgdGhlIGZvbGxvd2luZzoKICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIGluY2x1ZGUga3R5cGVzL3N0YW5kYXJkCisgICAgIGluY2x1ZGUga3R5cGVzL3N0YW5kYXJkL3N0YW5kYXJkLnNjYwogICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgPGZpbGVuYW1lPmt0eXBlcy9zdGFuZGFyZC5zY2M8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZXMgYWxsIHRoZSBjb25maWd1cmF0aW9uIGZyYWdtZW50cywgcGF0Y2hlcywgYW5kCi0gICAgICAgICAgICAgICAgZmVhdHVyZXMgdGhhdCBtYWtlIHVwIHlvdXIgc3RhbmRhcmQga2VybmVsIHBvbGljeS4KLSAgICAgICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdrZXJuZWwtdHlwZXMnPktlcm5lbCBUeXBlczwvbGluaz4iIHNlY3Rpb24KLSAgICAgICAgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICBUaGlzIGZpbGUgYWdncmVnYXRlcyBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzLCBwYXRjaGVzLAorICAgICAgICAgICAgICAgIGFuZCBmZWF0dXJlcyB0aGF0IG1ha2UgdXAgeW91ciBzdGFuZGFyZCBrZXJuZWwgcG9saWN5LgorICAgICAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J2tlcm5lbC10eXBlcyc+S2VybmVsIFR5cGVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICA8cGFyYT4KQEAgLTYzMSwxMCArNzI1LDE0IEBACiAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICBpbmNsdWRlIDxyZXBsYWNlYWJsZT5teWJzcDwvcmVwbGFjZWFibGU+LnNjYwogICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHNlZSB0aGF0IGluIHRoZSBCZWFnbGVCb25lIGV4YW1wbGUgd2l0aCB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgaW5jbHVkZSBiZWFnbGVib25lLnNjYworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGJyZWFrIGEgY29tcGxldGUKICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgaW50byB0aGUgdmFyaW91cwogICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2dlbmVyYXRpbmctY29uZmlndXJhdGlvbi1maWxlcyc+R2VuZXJhdGluZyBDb25maWd1cmF0aW9uIEZpbGVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3JlYXRpbmctY29uZmlnLWZyYWdtZW50cyc+Q3JlYXRpbmcgQ29uZmlndXJhdGlvbiBGcmFnbWVudHM8L2xpbms+IgogICAgICAgICAgICAgICAgIHNlY3Rpb24uCiAgICAgICAgICAgICA8L3BhcmE+CiAKQEAgLTY0NSw2ICs3NDMsMjMgQEAKICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgIGtjb25mIGhhcmR3YXJlIDxyZXBsYWNlYWJsZT5teWJzcDwvcmVwbGFjZWFibGU+LTxyZXBsYWNlYWJsZT5leHRyYTwvcmVwbGFjZWFibGU+LmNmZwogICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgQmVhZ2xlQm9uZSBleGFtcGxlIGRvZXMgbm90IGluY2x1ZGUgdGhlc2UgdHlwZXMgb2YKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgTWFsdGEgMzItYml0IGJvYXJkIGRvZXMgKCJtdGktbWFsdGEzMiIpLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIDxmaWxlbmFtZT5tdGktbWFsdGEzMi1sZS1zdGFuZGFyZC5zY2M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkZWZpbmUgS01BQ0hJTkUgbXRpLW1hbHRhMzItbGUKKyAgICAgZGVmaW5lIEtNQUNISU5FIHFlbXVtaXBzZWwKKyAgICAgZGVmaW5lIEtUWVBFIHN0YW5kYXJkCisgICAgIGRlZmluZSBLQVJDSCBtaXBzCisKKyAgICAgaW5jbHVkZSBrdHlwZXMvc3RhbmRhcmQvc3RhbmRhcmQuc2NjCisgICAgIGJyYW5jaCBtdGktbWFsdGEzMgorCisgICAgIGluY2x1ZGUgbXRpLW1hbHRhMzIuc2NjCisgICAgIGtjb25mIGhhcmR3YXJlIG10aS1tYWx0YTMyLWxlLmNmZworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9zZWN0aW9uPgogCkBAIC02NTUsMTQgKzc3MCwxNSBAQAogICAgICAgICAgICAgICAgIE1hbnkgcmVhbC13b3JsZCBleGFtcGxlcyBhcmUgbW9yZSBjb21wbGV4LgogICAgICAgICAgICAgICAgIExpa2UgYW55IG90aGVyIDxmaWxlbmFtZT4uc2NjPC9maWxlbmFtZT4gZmlsZSwgQlNQCiAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb25zIGNhbiBhZ2dyZWdhdGUgZmVhdHVyZXMuCi0gICAgICAgICAgICAgICAgQ29uc2lkZXIgdGhlIE1pbm5vdyBCU1AgZGVmaW5pdGlvbiBmcm9tIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by00LjQ8L2ZpbGVuYW1lPiBpbiB0aGUKLSAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0Ci0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLXJlcG9zaXRvcmllcyc+U291cmNlIFJlcG9zaXRvcmllczwvdWxpbms+Ci0gICAgICAgICAgICAgICAgKGkuZS4KLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsLWNhY2hlL2JzcC9taW5ub3c8L2ZpbGVuYW1lPik6CisgICAgICAgICAgICAgICAgQ29uc2lkZXIgdGhlIE1pbm5vdyBCU1AgZGVmaW5pdGlvbiBnaXZlbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tNC40PC9maWxlbmFtZT4gYnJhbmNoIG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0by1rZXJuZWwtY2FjaGU8L2ZpbGVuYW1lPiAoaS5lLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0by1rZXJuZWwtY2FjaGUvYnNwL21pbm5vdy9taW5ub3cuc2NjPC9maWxlbmFtZT4pOgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBBbHRob3VnaCB0aGUgTWlubm93IEJvYXJkIEJTUCBpcyB1bnVzZWQsIHRoZSBNZXRhZGF0YQorICAgICAgICAgICAgICAgICAgICByZW1haW5zIGFuZCBpcyBiZWluZyB1c2VkIGhlcmUganVzdCBhcyBhbiBleGFtcGxlLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIG1pbm5vdy5zY2M6CiAgICAgICAgICBpbmNsdWRlIGNmZy94ODYuc2NjCiAgICAgICAgICBpbmNsdWRlIGZlYXR1cmVzL2VnMjB0L2VnMjB0LnNjYwogICAgICAgICAgaW5jbHVkZSBjZmcvZG1hZW5naW5lLnNjYwpAQCAtNjk4LDkgKzgxNCw4IEBACiAgICAgICAgICAgICAgICAgIm1pbm5vdyIgZGVzY3JpcHRpb24gZmlsZXMgZm9yIHRoZSBzdXBwb3J0ZWQga2VybmVsIHR5cGVzCiAgICAgICAgICAgICAgICAgKGkuZS4gInN0YW5kYXJkIiwgInByZWVtcHQtcnQiLCBhbmQgInRpbnkiKS4KICAgICAgICAgICAgICAgICBDb25zaWRlciB0aGUgIm1pbm5vdyIgZGVzY3JpcHRpb24gZm9yIHRoZSAic3RhbmRhcmQiIGtlcm5lbAotICAgICAgICAgICAgICAgIHR5cGU6CisgICAgICAgICAgICAgICAgdHlwZSAoaS5lLiA8ZmlsZW5hbWU+bWlubm93LXN0YW5kYXJkLnNjYzwvZmlsZW5hbWU+OgogICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgbWlubm93LXN0YW5kYXJkLnNjYzoKICAgICAgICAgIGRlZmluZSBLTUFDSElORSBtaW5ub3cKICAgICAgICAgIGRlZmluZSBLVFlQRSBzdGFuZGFyZAogICAgICAgICAgZGVmaW5lIEtBUkNIIGkzODYKQEAgLTczNSw5ICs4NTAsOCBAQAogCiAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICBOb3cgY29uc2lkZXIgdGhlICJtaW5ub3ciIGRlc2NyaXB0aW9uIGZvciB0aGUgInRpbnkiIGtlcm5lbAotICAgICAgICAgICAgICAgIHR5cGU6CisgICAgICAgICAgICAgICAgdHlwZSAoaS5lLiA8ZmlsZW5hbWU+bWlubm93LXRpbnkuc2NjPC9maWxlbmFtZT46CiAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBtaW5ub3ctdGlueS5zY2M6CiAgICAgICAgIGRlZmluZSBLTUFDSElORSBtaW5ub3cKICAgICAgICAgZGVmaW5lIEtUWVBFIHRpbnkKICAgICAgICAgZGVmaW5lIEtBUkNIIGkzODYKQEAgLTc1NywxMCArODcxLDEyIEBACiAKICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgIE5vdGljZSBhZ2FpbiB0aGUgdGhyZWUgY3JpdGljYWwgdmFyaWFibGVzOgotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+S1RZUEU8L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPktBUkNIPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgT2YgdGhlc2UgdmFyaWFibGVzLCBvbmx5IHRoZSA8ZmlsZW5hbWU+S1RZUEU8L2ZpbGVuYW1lPiBoYXMgY2hhbmdlZC4KLSAgICAgICAgICAgICAgICBJdCBpcyBub3cgc2V0IHRvICJ0aW55Ii4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS01BQ0hJTkUnPjxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtUWVBFJz48ZmlsZW5hbWU+S1RZUEU8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LQVJDSCc+PGZpbGVuYW1lPktBUkNIPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBPZiB0aGVzZSB2YXJpYWJsZXMsIG9ubHkgPGZpbGVuYW1lPktUWVBFPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBoYXMgY2hhbmdlZCB0byBzcGVjaWZ5IHRoZSAidGlueSIga2VybmVsIHR5cGUuCiAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvc2VjdGlvbj4KICAgICA8L3NlY3Rpb24+CkBAIC04NjcsMTUgKzk4MywxNSBAQAogICAgICAgICAgICAgV2hlbiBzdG9yZWQgb3V0c2lkZSBvZiB0aGUgcmVjaXBlLXNwYWNlLCB0aGUga2VybmVsIE1ldGFkYXRhCiAgICAgICAgICAgICBmaWxlcyByZXNpZGUgaW4gYSBzZXBhcmF0ZSByZXBvc2l0b3J5LgogICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYWRkcyB0aGUgTWV0YWRhdGEgdG8gdGhlIGJ1aWxkIGFzCi0gICAgICAgICAgICBhICJrdHlwZT1tZXRhIiByZXBvc2l0b3J5IHRocm91Z2ggdGhlCisgICAgICAgICAgICBhICJ0eXBlPWttZXRhIiByZXBvc2l0b3J5IHRocm91Z2ggdGhlCiAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CiAgICAgICAgICAgICB2YXJpYWJsZS4KICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPgotICAgICAgICAgICAgc3RhdGVtZW50IGZyb20gdGhlIDxmaWxlbmFtZT5saW51eC15b2N0b180LjQuYmI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgc3RhdGVtZW50IGZyb20gdGhlIDxmaWxlbmFtZT5saW51eC15b2N0b180LjEyLmJiPC9maWxlbmFtZT4KICAgICAgICAgICAgIGtlcm5lbCByZWNpcGU6CiAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tNC40LmdpdDtuYW1lPW1hY2hpbmU7YnJhbmNoPSR7S0JSQU5DSH07IFwKLSAgICAgICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTQuNDtkZXN0c3VmZml4PSR7S01FVEF9IgorICAgICBTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTQuMTIuZ2l0O25hbWU9bWFjaGluZTticmFuY2g9JHtLQlJBTkNIfTsgXAorICAgICAgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tNC4xMjtkZXN0c3VmZml4PSR7S01FVEF9IgogICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgPGZpbGVuYW1lPiR7S01FVEF9PC9maWxlbmFtZT4sIGluIHRoaXMgY29udGV4dCwgaXMgc2ltcGx5IHVzZWQgdG8KICAgICAgICAgICAgIG5hbWUgdGhlIGRpcmVjdG9yeSBpbnRvIHdoaWNoIHRoZSBHaXQgZmV0Y2hlciBwbGFjZXMgdGhlIE1ldGFkYXRhLgpAQCAtODk0LDQ2ICsxMDEwLDYgQEAKICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGhhc2UuCiAgICAgICAgIDwvcGFyYT4KIAotPCEtLQotCi0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSB0aGF0IHNob3dzIGhvdyBhIHRyaXZpYWwgdHJlZSBvZiBNZXRhZGF0YQotICAgICAgICAgICAgaXMgc3RvcmVkIGluIGEgY3VzdG9tIExpbnV4IGtlcm5lbCBHaXQgcmVwb3NpdG9yeToKLSAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgbWV0YS8KLSAgICAgYCZkYXNoOyZkYXNoOyBjZmcKLSAgICAgICAgIGAmZGFzaDsmZGFzaDsga2VybmVsLWNhY2hlCi0gICAgICAgICAgICAgfCZkYXNoOyZkYXNoOyBic3Atc3RhbmRhcmQuc2NjCi0gICAgICAgICAgICAgfCZkYXNoOyZkYXNoOyBic3AuY2ZnCi0gICAgICAgICAgICAgYCZkYXNoOyZkYXNoOyBzdGFuZGFyZC5jZmcKLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVG8gdXNlIGEgYnJhbmNoIGRpZmZlcmVudCBmcm9tIHdoZXJlIHRoZSBzb3VyY2VzIHJlc2lkZSwKLSAgICAgICAgICAgIHNwZWNpZnkgdGhlIGJyYW5jaCBpbiB0aGUgPGZpbGVuYW1lPktNRVRBPC9maWxlbmFtZT4gdmFyaWFibGUKLSAgICAgICAgICAgIGluIHlvdXIgTGludXgga2VybmVsIHJlY2lwZS4KLSAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKLSAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgS01FVEEgPSAibWV0YSIKLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIFRvIHVzZSB0aGUgc2FtZSBicmFuY2ggYXMgdGhlIHNvdXJjZXMsIHNldAotICAgICAgICAgICAgPGZpbGVuYW1lPktNRVRBPC9maWxlbmFtZT4gdG8gYW4gZW1wdHkgc3RyaW5nOgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBLTUVUQSA9ICIiCi0gICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCB5b3VyIG93biBzb3VyY2VzIGFuZCB3YW50IHRvIGNyZWF0ZSBhbgotICAgICAgICAgICAgb3JwaGFuIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYnJhbmNoLCB1c2UgdGhlc2UgY29tbWFuZHMKLSAgICAgICAgICAgIGZyb20gd2l0aGluIHlvdXIgTGludXgga2VybmVsIEdpdCByZXBvc2l0b3J5OgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGdpdCBjaGVja291dCAmZGFzaDsmZGFzaDtvcnBoYW4gbWV0YQotICAgICAkIGdpdCBybSAtcmYgLgotICAgICAkIGdpdCBjb21taXQgJmRhc2g7JmRhc2g7YWxsb3ctZW1wdHkgLW0gIkNyZWF0ZSBvcnBoYW4gbWV0YSBicmFuY2giCi0gICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgIDwvcGFyYT4KLS0tPgotCiAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgSWYgeW91IG1vZGlmeSB0aGUgTWV0YWRhdGEsIHlvdSBtdXN0IG5vdCBmb3JnZXQgdG8gdXBkYXRlIHRoZQogICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ1JFVic+PGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+PC91bGluaz4KQEAgLTEwNTcsMTAgKzExMzMsOSBAQAogICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBJZiB5b3UgZmluZAotICAgICAgICAgICAgeW91cnNlbGYgd2l0aCBudW1lcm91cyBicmFuY2hlcywgeW91IG1pZ2h0IGNvbnNpZGVyIHVzaW5nIGEKLSAgICAgICAgICAgIGhpZXJhcmNoaWNhbCBicmFuY2hpbmcgc3lzdGVtIHNpbWlsYXIgdG8gd2hhdCB0aGUgbGludXgteW9jdG8gTGludXgKLSAgICAgICAgICAgIGtlcm5lbCByZXBvc2l0b3JpZXMgdXNlOgorICAgICAgICAgICAgSWYgeW91IGZpbmQgeW91cnNlbGYgd2l0aCBudW1lcm91cyBicmFuY2hlcywgeW91IG1pZ2h0IGNvbnNpZGVyCisgICAgICAgICAgICB1c2luZyBhIGhpZXJhcmNoaWNhbCBicmFuY2hpbmcgc3lzdGVtIHNpbWlsYXIgdG8gd2hhdCB0aGUKKyAgICAgICAgICAgIFlvY3RvIExpbnV4IEtlcm5lbCBHaXQgcmVwb3NpdG9yaWVzIHVzZToKICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgPHJlcGxhY2VhYmxlPmNvbW1vbjwvcmVwbGFjZWFibGU+LzxyZXBsYWNlYWJsZT5rZXJuZWxfdHlwZTwvcmVwbGFjZWFibGU+LzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT4KICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KQEAgLTEwOTAsNyArMTE2NSw4IEBACiAgICAgICAgICAgICBUaGUgInN0YW5kYXJkIiBhbmQgInNtYWxsIiBicmFuY2hlcyBhZGQgc291cmNlcyBzcGVjaWZpYyB0byB0aG9zZQogICAgICAgICAgICAga2VybmVsIHR5cGVzIHRoYXQgZm9yIHdoYXRldmVyIHJlYXNvbiBhcmUgbm90IGFwcHJvcHJpYXRlIGZvciB0aGUKICAgICAgICAgICAgIG90aGVyIGJyYW5jaGVzLgotICAgICAgICAgICAgPG5vdGU+VGhlICJiYXNlIiBicmFuY2hlcyBhcmUgYW4gYXJ0aWZhY3Qgb2YgdGhlIHdheSBHaXQgbWFuYWdlcworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlICJiYXNlIiBicmFuY2hlcyBhcmUgYW4gYXJ0aWZhY3Qgb2YgdGhlIHdheSBHaXQgbWFuYWdlcwogICAgICAgICAgICAgICAgIGl0cyBkYXRhIGludGVybmFsbHkgb24gdGhlIGZpbGVzeXN0ZW06IEdpdCB3aWxsIG5vdCBhbGxvdyB5b3UKICAgICAgICAgICAgICAgICB0byB1c2UgPGZpbGVuYW1lPm15ZGlyL3N0YW5kYXJkPC9maWxlbmFtZT4gYW5kCiAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm15ZGlyL3N0YW5kYXJkL21hY2hpbmVfYTwvZmlsZW5hbWU+IGJlY2F1c2UgaXQKQEAgLTExMzcsMjcgKzEyMTMsMzQgQEAKICAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGEgYnJpZWYgcmVmZXJlbmNlIGZvciB0aGUgY29tbWFuZHMgeW91IGNhbiB1c2UKICAgICAgICAgd2l0aGluIGFuIFNDQyBkZXNjcmlwdGlvbiBmaWxlICg8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+KToKICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YnJhbmNoIFtyZWZdPC9maWxlbmFtZT46CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJyYW5jaCBbcmVmXTwvZmlsZW5hbWU+OgogICAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgYnJhbmNoIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGJyYW5jaAogICAgICAgICAgICAgICAgICh0eXBpY2FsbHkgPGZpbGVuYW1lPiR7S1RZUEV9PC9maWxlbmFtZT4pIHVzaW5nCiAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2gsIG9yICJyZWYiIGlmIHNwZWNpZmllZC4KICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+ZGVmaW5lPC9maWxlbmFtZT46CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmluZTwvZmlsZW5hbWU+OgogICAgICAgICAgICAgICAgIERlZmluZXMgdmFyaWFibGVzLCBzdWNoIGFzIDxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+LAogICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5LVFlQRTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+S0FSQ0g8L2ZpbGVuYW1lPiwKICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPktGRUFUVVJFX0RFU0NSSVBUSU9OPC9maWxlbmFtZT4uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmluY2x1ZGUgU0NDX0ZJTEU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW5jbHVkZSBTQ0NfRklMRTwvZmlsZW5hbWU+OgogICAgICAgICAgICAgICAgIEluY2x1ZGVzIGFuIFNDQyBmaWxlIGluIHRoZSBjdXJyZW50IGZpbGUuCiAgICAgICAgICAgICAgICAgVGhlIGZpbGUgaXMgcGFyc2VkIGFzIGlmIHlvdSBoYWQgaW5zZXJ0ZWQgaXQgaW5saW5lLgogICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5rY29uZiBbaGFyZHdhcmV8bm9uLWhhcmR3YXJlXSBDRkdfRklMRTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5rY29uZiBbaGFyZHdhcmV8bm9uLWhhcmR3YXJlXSBDRkdfRklMRTwvZmlsZW5hbWU+OgogICAgICAgICAgICAgICAgIFF1ZXVlcyBhIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQgZm9yIG1lcmdpbmcgaW50byB0aGUgZmluYWwKICAgICAgICAgICAgICAgICBMaW51eCA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdpdCBtZXJnZSBHSVRfQlJBTkNIPC9maWxlbmFtZT46CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBtZXJnZSBHSVRfQlJBTkNIPC9maWxlbmFtZT46CiAgICAgICAgICAgICAgICAgTWVyZ2VzIHRoZSBmZWF0dXJlIGJyYW5jaCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaC4KICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+cGF0Y2ggUEFUQ0hfRklMRTwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgIEFwcGxpZXMgdGhlIHBhdGNoIHRvIHRoZSBjdXJyZW50IEdpdCBicmFuY2guPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhdGNoIFBBVENIX0ZJTEU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBcHBsaWVzIHRoZSBwYXRjaCB0byB0aGUgY3VycmVudCBHaXQgYnJhbmNoLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICA8L2l0ZW1pemVkbGlzdD4KICAgICA8L3BhcmE+CiA8L3NlY3Rpb24+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtY29tbW9uLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1jb21tb24ueG1sCmluZGV4IGFhNDBmYzguLmI4ZmQ4NzAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1jb21tb24ueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1jb21tb24ueG1sCkBAIC0zLDIwICszLDQ2NiBAQAogWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgogCiA8Y2hhcHRlciBpZD0na2VybmVsLWRldi1jb21tb24nPgotCiA8dGl0bGU+Q29tbW9uIFRhc2tzPC90aXRsZT4KIAotPHBhcmE+Ci0gICAgVGhpcyBjaGFwdGVyIHByZXNlbnRzIHNldmVyYWwgY29tbW9uIHRhc2tzIHlvdSBwZXJmb3JtIHdoZW4geW91Ci0gICAgd29yayB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IExpbnV4IGtlcm5lbC4KLSAgICBUaGVzZSB0YXNrcyBpbmNsdWRlIHByZXBhcmluZyBhIGxheWVyLCBtb2RpZnlpbmcgYW4gZXhpc3RpbmcgcmVjaXBlLAotICAgIGl0ZXJhdGl2ZSBkZXZlbG9wbWVudCwgd29ya2luZyB3aXRoIHlvdXIgb3duIHNvdXJjZXMsIGFuZCBpbmNvcnBvcmF0aW5nCi0gICAgb3V0LW9mLXRyZWUgbW9kdWxlcy4KLSAgICA8bm90ZT4KLSAgICAgICAgVGhlIGV4YW1wbGVzIHByZXNlbnRlZCBpbiB0aGlzIGNoYXB0ZXIgd29yayB3aXRoIHRoZSBZb2N0byBQcm9qZWN0Ci0gICAgICAgIDEuMi4yIFJlbGVhc2UgYW5kIGZvcndhcmQuCi0gICAgPC9ub3RlPgotPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNoYXB0ZXIgcHJlc2VudHMgc2V2ZXJhbCBjb21tb24gdGFza3MgeW91IHBlcmZvcm0gd2hlbiB5b3UKKyAgICAgICAgd29yayB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IExpbnV4IGtlcm5lbC4KKyAgICAgICAgVGhlc2UgdGFza3MgaW5jbHVkZSBwcmVwYXJpbmcgeW91ciBob3N0IGRldmVsb3BtZW50IHN5c3RlbSBmb3IKKyAgICAgICAga2VybmVsIGRldmVsb3BtZW50LCBwcmVwYXJpbmcgYSBsYXllciwgbW9kaWZ5aW5nIGFuIGV4aXN0aW5nIHJlY2lwZSwKKyAgICAgICAgcGF0Y2hpbmcgdGhlIGtlcm5lbCwgY29uZmlndXJpbmcgdGhlIGtlcm5lbCwgaXRlcmF0aXZlIGRldmVsb3BtZW50LAorICAgICAgICB3b3JraW5nIHdpdGggeW91ciBvd24gc291cmNlcywgYW5kIGluY29ycG9yYXRpbmcgb3V0LW9mLXRyZWUgbW9kdWxlcy4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBUaGUgZXhhbXBsZXMgcHJlc2VudGVkIGluIHRoaXMgY2hhcHRlciB3b3JrIHdpdGggdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgIDIuNCBSZWxlYXNlIGFuZCBmb3J3YXJkLgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3ByZXBhcmluZy10aGUtYnVpbGQtaG9zdC10by13b3JrLW9uLXRoZS1rZXJuZWwnPgorICAgICAgICA8dGl0bGU+UHJlcGFyaW5nIHRoZSBCdWlsZCBIb3N0IHRvIFdvcmsgb24gdGhlIEtlcm5lbDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCZWZvcmUgeW91IGNhbiBkbyBhbnkga2VybmVsIGRldmVsb3BtZW50LCB5b3UgbmVlZCB0byBiZQorICAgICAgICAgICAgc3VyZSB5b3VyIGJ1aWxkIGhvc3QgaXMgc2V0IHVwIHRvIHVzZSB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZ2V0IHNldCB1cCwgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NldHRpbmctdXAtdGhlLWRldmVsb3BtZW50LWhvc3QtdG8tdXNlLXRoZS15b2N0by1wcm9qZWN0Jz5TZXR0aW5nIFVwIHRvIFVzZSB0aGUgWW9jdG8gUHJvamVjdDwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwuCisgICAgICAgICAgICBQYXJ0IG9mIHByZXBhcmluZyB0aGUgc3lzdGVtIGlzIGNyZWF0aW5nIGEgbG9jYWwgR2l0CisgICAgICAgICAgICByZXBvc2l0b3J5IG9mIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAoPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPikgb24geW91ciBzeXN0ZW0uCisgICAgICAgICAgICBGb2xsb3cgdGhlIHN0ZXBzIGluIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2Nsb25pbmctdGhlLXBva3ktcmVwb3NpdG9yeSc+Q2xvbmluZyB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBSZXBvc2l0b3J5PC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbCB0byBzZXQgdXAgeW91cgorICAgICAgICAgICAgU291cmNlIERpcmVjdG9yeS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEJlIHN1cmUgeW91IGNoZWNrIG91dCB0aGUgYXBwcm9wcmlhdGUgZGV2ZWxvcG1lbnQgYnJhbmNoIG9yCisgICAgICAgICAgICAgICAgeW91IGNyZWF0ZSB5b3VyIGxvY2FsIGJyYW5jaCBieSBjaGVja2luZyBvdXQgYSBzcGVjaWZpYyB0YWcKKyAgICAgICAgICAgICAgICB0byBnZXQgdGhlIGRlc2lyZWQgdmVyc2lvbiBvZiBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY2hlY2tpbmctb3V0LWJ5LWJyYW5jaC1pbi1wb2t5Jz5DaGVja2luZyBPdXQgYnkgQnJhbmNoIGluIFBva3k8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY2hlY2tvdXQtb3V0LWJ5LXRhZy1pbi1wb2t5Jz5DaGVja2luZyBPdXQgYnkgVGFnIGluIFBva3k8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9ucyBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwgZm9yIG1vcmUKKyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgS2VybmVsIGRldmVsb3BtZW50IGlzIGJlc3QgYWNjb21wbGlzaGVkIHVzaW5nCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyN1c2luZy1kZXZ0b29sLWluLXlvdXItc2RrLXdvcmtmbG93Jz48ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgIGFuZCBub3QgdGhyb3VnaCB0cmFkaXRpb25hbCBrZXJuZWwgd29ya2Zsb3cgbWV0aG9kcy4KKyAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIHByb3ZpZGVzIGluZm9ybWF0aW9uIGZvciBib3RoCisgICAgICAgICAgICBzY2VuYXJpb3MuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZ2V0dGluZy1yZWFkeS10by1kZXZlbG9wLXVzaW5nLWRldnRvb2wnPgorICAgICAgICAgICAgPHRpdGxlPkdldHRpbmcgUmVhZHkgdG8gRGV2ZWxvcCBVc2luZyA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9sbG93IHRoZXNlIHN0ZXBzIHRvIHByZXBhcmUgdG8gdXBkYXRlIHRoZSBrZXJuZWwgaW1hZ2UgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIENvbXBsZXRpbmcgdGhpcyBwcm9jZWR1cmUgbGVhdmVzIHlvdSB3aXRoIGEgY2xlYW4ga2VybmVsIGltYWdlCisgICAgICAgICAgICAgICAgYW5kIHJlYWR5IHRvIG1ha2UgbW9kaWZpY2F0aW9ucyBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWRldnRvb2wtdG8tcGF0Y2gtdGhlLWtlcm5lbCc+VXNpbmcgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiB0byBQYXRjaCB0aGUgS2VybmVsPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uOgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkluaXRpYWxpemUgdGhlIEJpdEJha2UgRW52aXJvbm1lbnQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJlZm9yZSBidWlsZGluZyBhbiBleHRlbnNpYmxlIFNESywgeW91IG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemUgdGhlIEJpdEJha2UgYnVpbGQgZW52aXJvbm1lbnQgYnkgc291cmNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBlbnZpcm9ubWVudCBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgICAgIChpLmUuIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52PC9maWxlbmFtZT48L3VsaW5rPik6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2Qgfi9wb2t5CisgICAgICQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcHJldmlvdXMgY29tbWFuZHMgYXNzdW1lIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3NvdXJjZS1yZXBvc2l0b3JpZXMnPlNvdXJjZSBSZXBvc2l0b3JpZXM8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4pIGhhdmUgYmVlbiBjbG9uZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyBHaXQgYW5kIHRoZSBsb2NhbCByZXBvc2l0b3J5IGlzIG5hbWVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBva3kiLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5QcmVwYXJlIFlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBGaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIHNldCB0byAicWVtdXg4NiIsIHdoaWNoIGlzIGZpbmUgaWYgeW91IGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmcgZm9yIHRoZSBRRU1VIGVtdWxhdG9yIGluIDMyLWJpdCBtb2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IGFyZSBub3QsIHlvdSBuZWVkIHRvIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4gdmFyaWFibGUgYXBwcm9wcmlhdGVseSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgeW91ciA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBmb3VuZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+fi9wb2t5L2J1aWxkPC9maWxlbmFtZT4gaW4gdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgZXhhbXBsZSkuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5BbHNvLCBzaW5jZSB5b3UgYXJlIHByZXBhcmluZyB0byB3b3JrIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsIGltYWdlLCB5b3UgbmVlZCB0byBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGluY2x1ZGUga2VybmVsIG1vZHVsZXMuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGlzIGV4YW1wbGUgdXNlcyB0aGUgZGVmYXVsdCAicWVtdXg4NiIgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBidXQgbmVlZHMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZCB0aGUgImtlcm5lbC1tb2R1bGVzIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFMgKz0gImtlcm5lbC1tb2R1bGVzIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5DcmVhdGUgYSBMYXllciBmb3IgUGF0Y2hlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gY3JlYXRlIGEgbGF5ZXIgdG8gaG9sZCBwYXRjaGVzIGNyZWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUga2VybmVsIGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS1sYXllcnMgY3JlYXRlLWxheWVyPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L3Bva3kvYnVpbGQKKyAgICAgJCBiaXRiYWtlLWxheWVycyBjcmVhdGUtbGF5ZXIgLi4vLi4vbWV0YS1teWxheWVyCisgICAgIE5PVEU6IFN0YXJ0aW5nIGJpdGJha2Ugc2VydmVyLi4uCisgICAgIEFkZCB5b3VyIG5ldyBsYXllciB3aXRoICdiaXRiYWtlLWxheWVycyBhZGQtbGF5ZXIgLi4vLi4vbWV0YS1teWxheWVyJworICAgICAkCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBvbiB3b3JraW5nIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb24gYW5kIEJTUCBsYXllcnMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5VbmRlcnN0YW5kaW5nIGFuZCBDcmVhdGluZyBMYXllcnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFudWFsIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwLWxheWVycyc+QlNQIExheWVyczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCAoQlNQKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldmVsb3BlcidzIEd1aWRlLCByZXNwZWN0aXZlbHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UtbGF5ZXJzIGNyZWF0ZS1sYXllcjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1hLWdlbmVyYWwtbGF5ZXItdXNpbmctdGhlLWJpdGJha2UtbGF5ZXJzLXNjcmlwdCc+Q3JlYXRpbmcgYSBHZW5lcmFsIExheWVyIFVzaW5nIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZS1sYXllcnM8L2ZpbGVuYW1lPiBTY3JpcHQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5JbmZvcm0gdGhlIEJpdEJha2UgQnVpbGQgRW52aXJvbm1lbnQgQWJvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdXIgTGF5ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFzIGRpcmVjdGVkIHdoZW4geW91IGNyZWF0ZWQgeW91ciBsYXllciwgeW91IG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZCB0aGUgbGF5ZXIgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJMQVlFUlMnPjxmaWxlbmFtZT5CQkxBWUVSUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHRoZSA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2Qgfi9wb2t5L2J1aWxkCisgICAgICQgYml0YmFrZS1sYXllcnMgYWRkLWxheWVyIC4uLy4uL21ldGEtbXlsYXllcgorICAgICBOT1RFOiBTdGFydGluZyBiaXRiYWtlIHNlcnZlci4uLgorICAgICAkCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkJ1aWxkIHRoZSBFeHRlbnNpYmxlIFNESzo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIEJpdEJha2UgdG8gYnVpbGQgdGhlIGV4dGVuc2libGUgU0RLIHNwZWNpZmljYWxseQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHVzZSB3aXRoIGltYWdlcyB0byBiZSBydW4gdXNpbmcgUUVNVToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L3Bva3kvYnVpbGQKKyAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2UtbWluaW1hbCAtYyBwb3B1bGF0ZV9zZGtfZXh0CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBidWlsZCBmaW5pc2hlcywgeW91IGNhbiBmaW5kIHRoZSBTREsgaW5zdGFsbGVyCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIChpLmUuIDxmaWxlbmFtZT4qLnNoPC9maWxlbmFtZT4gZmlsZSkgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICB+L3Bva3kvYnVpbGQvdG1wL2RlcGxveS9zZGsKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciB0aGlzIGV4YW1wbGUsIHRoZSBpbnN0YWxsZXIgZmlsZSBpcyBuYW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3ktZ2xpYmMteDg2XzY0LWNvcmUtaW1hZ2UtbWluaW1hbC1pNTg2LXRvb2xjaGFpbi1leHQtJkRJU1RSTzsuc2g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5JbnN0YWxsIHRoZSBFeHRlbnNpYmxlIFNESzo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBpbnN0YWxsIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgdGhpcyBleGFtcGxlLCBpbnN0YWxsIHRoZSBTREsgaW4gdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5+L3Bva3lfc2RrPC9maWxlbmFtZT4gZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4vcG9reS9idWlsZC90bXAvZGVwbG95L3NkaworICAgICAkIC4vcG9reS1nbGliYy14ODZfNjQtY29yZS1pbWFnZS1taW5pbWFsLWk1ODYtdG9vbGNoYWluLWV4dC0mRElTVFJPOy5zaAorICAgICBQb2t5IChZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBEaXN0cm8pIEV4dGVuc2libGUgU0RLIGluc3RhbGxlciB2ZXJzaW9uICZESVNUUk87CisgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgRW50ZXIgdGFyZ2V0IGRpcmVjdG9yeSBmb3IgU0RLIChkZWZhdWx0OiB+L3Bva3lfc2RrKToKKyAgICAgWW91IGFyZSBhYm91dCB0byBpbnN0YWxsIHRoZSBTREsgdG8gIi9ob21lL3Njb3R0cmlmL3Bva3lfc2RrIi4gUHJvY2VlZFtZL25dPyBZCisgICAgIEV4dHJhY3RpbmcgU0RLLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5kb25lCisgICAgIFNldHRpbmcgaXQgdXAuLi4KKyAgICAgRXh0cmFjdGluZyBidWlsZHRvb2xzLi4uCisgICAgIFByZXBhcmluZyBidWlsZCBzeXN0ZW0uLi4KKyAgICAgUGFyc2luZyByZWNpcGVzOiAxMDAlIHwjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI3wgVGltZTogMDowMDo1MgorICAgICBJbml0aWFsaXppbmcgdGFza3M6IDEwMCUgfCMjIyMjIyMjIyMjIyMjICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjfCBUaW1lOiAwOjAwOjA0CisgICAgIENoZWNraW5nIHNzdGF0ZSBtaXJyb3Igb2JqZWN0IGF2YWlsYWJpbGl0eTogMTAwJSB8IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyN8IFRpbWU6IDA6MDA6MDAKKyAgICAgUGFyc2luZyByZWNpcGVzOiAxMDAlIHwjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI3wgVGltZTogMDowMDozMworICAgICBJbml0aWFsaXppbmcgdGFza3M6IDEwMCUgfCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjfCBUaW1lOiAwOjAwOjAwCisgICAgIGRvbmUKKyAgICAgU0RLIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzZXQgdXAgYW5kIGlzIHJlYWR5IHRvIGJlIHVzZWQuCisgICAgIEVhY2ggdGltZSB5b3Ugd2lzaCB0byB1c2UgdGhlIFNESyBpbiBhIG5ldyBzaGVsbCBzZXNzaW9uLCB5b3UgbmVlZCB0byBzb3VyY2UgdGhlIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBlLmcuCisgICAgICAkIC4gL2hvbWUvc2NvdHRyaWYvcG9reV9zZGsvZW52aXJvbm1lbnQtc2V0dXAtaTU4Ni1wb2t5LWxpbnV4CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdzZXR0aW5nLXVwLXRoZS1lc2RrLXRlcm1pbmFsJz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5TZXQgVXAgYSBOZXcgVGVybWluYWwgdG8gV29yayBXaXRoIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgRXh0ZW5zaWJsZSBTREs6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB1cCBhIG5ldyB0ZXJtaW5hbCB0byB3b3JrIHdpdGggdGhlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW5ub3QgdXNlIHRoZSBzYW1lIEJpdEJha2Ugc2hlbGwgdXNlZCB0byBidWlsZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlci48L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkFmdGVyIG9wZW5pbmcgYSBuZXcgc2hlbGwsIHJ1biB0aGUgU0RLIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgICAgICBzZXR1cCBzY3JpcHQgYXMgZGlyZWN0ZWQgYnkgdGhlIG91dHB1dCBmcm9tIGluc3RhbGxpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBTREs6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc291cmNlIH4vcG9reV9zZGsvZW52aXJvbm1lbnQtc2V0dXAtaTU4Ni1wb2t5LWxpbnV4CisgICAgICJTREsgZW52aXJvbm1lbnQgbm93IHNldCB1cDsgYWRkaXRpb25hbGx5IHlvdSBtYXkgbm93IHJ1biBkZXZ0b29sIHRvIHBlcmZvcm0gZGV2ZWxvcG1lbnQgdGFza3MuCisgICAgIFJ1biBkZXZ0b29sIC0taGVscCBmb3IgZnVydGhlciBkZXRhaWxzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGdldCBhIHdhcm5pbmcgYWJvdXQgYXR0ZW1wdGluZyB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaWJsZSBTREsgaW4gYW4gZW52aXJvbm1lbnQgc2V0IHVwIHRvIHJ1bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdEJha2UsIHlvdSBkaWQgbm90IHVzZSBhIG5ldyBzaGVsbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+QnVpbGQgdGhlIENsZWFuIEltYWdlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmluYWwgc3RlcCBpbiBwcmVwYXJpbmcgdG8gd29yayBvbiB0aGUga2VybmVsIGlzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBhbiBpbml0aWFsIGltYWdlIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGluIHRoZSBuZXcgdGVybWluYWwgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBqdXN0IHNldCB1cCBhbmQgaW5pdGlhbGl6ZWQgZm9yIFNESyB3b3JrOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgYnVpbGQtaW1hZ2UKKyAgICAgUGFyc2luZyByZWNpcGVzOiAxMDAlIHwjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyN8IFRpbWU6IDA6MDA6MDUKKyAgICAgUGFyc2luZyBvZiA4MzAgLmJiIGZpbGVzIGNvbXBsZXRlICgwIGNhY2hlZCwgODMwIHBhcnNlZCkuIDEyOTkgdGFyZ2V0cywgNDcgc2tpcHBlZCwgMCBtYXNrZWQsIDAgZXJyb3JzLgorICAgICBXQVJOSU5HOiBObyBwYWNrYWdlcyB0byBhZGQsIGJ1aWxkaW5nIGltYWdlIGNvcmUtaW1hZ2UtbWluaW1hbCB1bm1vZGlmaWVkCisgICAgIExvYWRpbmcgY2FjaGU6IDEwMCUgfCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjfCBUaW1lOiAwOjAwOjAwCisgICAgIExvYWRlZCAxMjk5IGVudHJpZXMgZnJvbSBkZXBlbmRlbmN5IGNhY2hlLgorICAgICBOT1RFOiBSZXNvbHZpbmcgYW55IG1pc3NpbmcgdGFzayBxdWV1ZSBkZXBlbmRlbmNpZXMKKyAgICAgSW5pdGlhbGl6aW5nIHRhc2tzOiAxMDAlIHwjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyN8IFRpbWU6IDA6MDA6MDcKKyAgICAgQ2hlY2tpbmcgc3N0YXRlIG1pcnJvciBvYmplY3QgYXZhaWxhYmlsaXR5OiAxMDAlIHwjIyMjIyMjIyMjIyMjIyN8IFRpbWU6IDA6MDA6MDAKKyAgICAgTk9URTogRXhlY3V0aW5nIFNldFNjZW5lIFRhc2tzCisgICAgIE5PVEU6IEV4ZWN1dGluZyBSdW5RdWV1ZSBUYXNrcworICAgICBOT1RFOiBUYXNrcyBTdW1tYXJ5OiBBdHRlbXB0ZWQgMjg2NiB0YXNrcyBvZiB3aGljaCAyNjA0IGRpZG4ndCBuZWVkIHRvIGJlIHJlcnVuIGFuZCBhbGwgc3VjY2VlZGVkLgorICAgICBOT1RFOiBTdWNjZXNzZnVsbHkgYnVpbHQgY29yZS1pbWFnZS1taW5pbWFsLiBZb3UgY2FuIGZpbmQgb3V0cHV0IGZpbGVzIGluIC9ob21lL3Njb3R0cmlmL3Bva3lfc2RrL3RtcC9kZXBsb3kvaW1hZ2VzL3FlbXV4ODYKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3ZXJlIGJ1aWxkaW5nIGZvciBhY3R1YWwgaGFyZHdhcmUgYW5kIG5vdCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIGVtdWxhdGlvbiwgeW91IGNvdWxkIGZsYXNoIHRoZSBpbWFnZSB0byBhIFVTQiBzdGljaworICAgICAgICAgICAgICAgICAgICAgICAgb24gPGZpbGVuYW1lPi9kZXYvc2RkPC9maWxlbmFtZT4gYW5kIGJvb3QgeW91ciBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSB0aGF0IHVzZXMgYSBNaW5ub3dib2FyZCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9UaXBzQW5kVHJpY2tzL0tlcm5lbERldmVsb3BtZW50V2l0aEVzZGsnPlRpcHNBbmRUcmlja3MvS2VybmVsRGV2ZWxvcG1lbnRXaXRoRXNkazwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBXaWtpIHBhZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50IHlvdSBoYXZlIHNldCB1cCB0byBzdGFydCBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0bworICAgICAgICAgICAgICAgIHRoZSBrZXJuZWwgYnkgdXNpbmcgdGhlIGV4dGVuc2libGUgU0RLLgorICAgICAgICAgICAgICAgIEZvciBhIGNvbnRpbnVlZCBleGFtcGxlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWRldnRvb2wtdG8tcGF0Y2gtdGhlLWtlcm5lbCc+VXNpbmcgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiB0byBQYXRjaCB0aGUgS2VybmVsPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2dldHRpbmctcmVhZHktZm9yLXRyYWRpdGlvbmFsLWtlcm5lbC1kZXZlbG9wbWVudCc+CisgICAgICAgICAgICA8dGl0bGU+R2V0dGluZyBSZWFkeSBmb3IgVHJhZGl0aW9uYWwgS2VybmVsIERldmVsb3BtZW50PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgR2V0dGluZyByZWFkeSBmb3IgdHJhZGl0aW9uYWwga2VybmVsIGRldmVsb3BtZW50IHVzaW5nIHRoZSBZb2N0bworICAgICAgICAgICAgICAgIFByb2plY3QgaW52b2x2ZXMgbWFueSBvZiB0aGUgc2FtZSBzdGVwcyBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgcHJldmlvdXMgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgbmVlZCB0byBlc3RhYmxpc2ggYSBsb2NhbCBjb3B5IG9mIHRoZSBrZXJuZWwgc291cmNlCisgICAgICAgICAgICAgICAgc2luY2UgeW91IHdpbGwgYmUgZWRpdGluZyB0aGVzZSBmaWxlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9sbG93IHRoZXNlIHN0ZXBzIHRvIHByZXBhcmUgdG8gdXBkYXRlIHRoZSBrZXJuZWwgaW1hZ2UgdXNpbmcKKyAgICAgICAgICAgICAgICB0cmFkaXRpb25hbCBrZXJuZWwgZGV2ZWxvcG1lbnQgZmxvdyB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIENvbXBsZXRpbmcgdGhpcyBwcm9jZWR1cmUgbGVhdmVzIHlvdSByZWFkeSB0byBtYWtlIG1vZGlmaWNhdGlvbnMKKyAgICAgICAgICAgICAgICB0byB0aGUga2VybmVsIHNvdXJjZSBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLXRyYWRpdGlvbmFsLWtlcm5lbC1kZXZlbG9wbWVudC10by1wYXRjaC10aGUta2VybmVsJz5Vc2luZyBUcmFkaXRpb25hbCBLZXJuZWwgRGV2ZWxvcG1lbnQgdG8gUGF0Y2ggdGhlIEtlcm5lbDwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbjoKKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5Jbml0aWFsaXplIHRoZSBCaXRCYWtlIEVudmlyb25tZW50OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBCZWZvcmUgeW91IGNhbiBkbyBhbnl0aGluZyB1c2luZyBCaXRCYWtlLCB5b3UgbmVlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZSB0aGUgQml0QmFrZSBidWlsZCBlbnZpcm9ubWVudCBieSBzb3VyY2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGVudmlyb25tZW50IHNjcmlwdAorICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4gPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnY8L2ZpbGVuYW1lPjwvdWxpbms+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFsc28sIGZvciB0aGlzIGV4YW1wbGUsIGJlIHN1cmUgdGhhdCB0aGUgbG9jYWwgYnJhbmNoCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgaGF2ZSBjaGVja2VkIG91dCBmb3IgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBpcworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgJkRJU1RST19OQU1FOyBicmFuY2guCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBjaGVja291dCBvdXQgdGhlICZESVNUUk9fTkFNRTsgYnJhbmNoLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NoZWNraW5nLW91dC1ieS1icmFuY2gtaW4tcG9reSc+Q2hlY2tpbmcgb3V0IGJ5IEJyYW5jaCBpbiBQb2t5PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L3Bva3kKKyAgICAgJCBnaXQgYnJhbmNoCisgICAgIG1hc3RlcgorICAgICAqICZESVNUUk9fTkFNRTsKKyAgICAgJCBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnYKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBjb21tYW5kcyBhc3N1bWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc291cmNlLXJlcG9zaXRvcmllcyc+U291cmNlIFJlcG9zaXRvcmllczwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPikgaGF2ZSBiZWVuIGNsb25lZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIEdpdCBhbmQgdGhlIGxvY2FsIHJlcG9zaXRvcnkgaXMgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9reSIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlByZXBhcmUgWW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBGaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIHNldCB0byAicWVtdXg4NiIsIHdoaWNoIGlzIGZpbmUgaWYgeW91IGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmcgZm9yIHRoZSBRRU1VIGVtdWxhdG9yIGluIDMyLWJpdCBtb2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IGFyZSBub3QsIHlvdSBuZWVkIHRvIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4gdmFyaWFibGUgYXBwcm9wcmlhdGVseSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgeW91ciA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBmb3VuZAorICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+fi9wb2t5L2J1aWxkPC9maWxlbmFtZT4gaW4gdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgZXhhbXBsZSkuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5BbHNvLCBzaW5jZSB5b3UgYXJlIHByZXBhcmluZyB0byB3b3JrIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsIGltYWdlLCB5b3UgbmVlZCB0byBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGluY2x1ZGUga2VybmVsIG1vZHVsZXMuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGlzIGV4YW1wbGUgdXNlcyB0aGUgZGVmYXVsdCAicWVtdXg4NiIgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBidXQgbmVlZHMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZCB0aGUgImtlcm5lbC1tb2R1bGVzIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFMgKz0gImtlcm5lbC1tb2R1bGVzIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5DcmVhdGUgYSBMYXllciBmb3IgUGF0Y2hlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gY3JlYXRlIGEgbGF5ZXIgdG8gaG9sZCBwYXRjaGVzIGNyZWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUga2VybmVsIGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS1sYXllcnMgY3JlYXRlLWxheWVyPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L3Bva3kvYnVpbGQKKyAgICAgJCBiaXRiYWtlLWxheWVycyBjcmVhdGUtbGF5ZXIgLi4vLi4vbWV0YS1teWxheWVyCisgICAgIE5PVEU6IFN0YXJ0aW5nIGJpdGJha2Ugc2VydmVyLi4uCisgICAgIEFkZCB5b3VyIG5ldyBsYXllciB3aXRoICdiaXRiYWtlLWxheWVycyBhZGQtbGF5ZXIgLi4vLi4vbWV0YS1teWxheWVyJworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGJhY2tncm91bmQgaW5mb3JtYXRpb24gb24gd29ya2luZyB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uIGFuZCBCU1AgbGF5ZXJzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycyc+VW5kZXJzdGFuZGluZyBhbmQgQ3JlYXRpbmcgTGF5ZXJzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hbnVhbCBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2JzcC1sYXllcnMnPkJTUCBMYXllcnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgKEJTUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZlbG9wZXIncyBHdWlkZSwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLWxheWVycyBjcmVhdGUtbGF5ZXI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY3JlYXRpbmctYS1nZW5lcmFsLWxheWVyLXVzaW5nLXRoZS1iaXRiYWtlLWxheWVycy1zY3JpcHQnPkNyZWF0aW5nIGEgR2VuZXJhbCBMYXllciBVc2luZyB0aGUgPGZpbGVuYW1lPmJpdGJha2UtbGF5ZXJzPC9maWxlbmFtZT4gU2NyaXB0PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+SW5mb3JtIHRoZSBCaXRCYWtlIEJ1aWxkIEVudmlyb25tZW50IEFib3V0CisgICAgICAgICAgICAgICAgICAgICAgICBZb3VyIExheWVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBBcyBkaXJlY3RlZCB3aGVuIHlvdSBjcmVhdGVkIHlvdXIgbGF5ZXIsIHlvdSBuZWVkIHRvIGFkZAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxheWVyIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJCTEFZRVJTJz48ZmlsZW5hbWU+QkJMQVlFUlM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB0aGUgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4vcG9reS9idWlsZAorICAgICAkIGJpdGJha2UtbGF5ZXJzIGFkZC1sYXllciAuLi8uLi9tZXRhLW15bGF5ZXIKKyAgICAgTk9URTogU3RhcnRpbmcgYml0YmFrZSBzZXJ2ZXIgLi4uCisgICAgICQKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q3JlYXRlIGEgTG9jYWwgQ29weSBvZiB0aGUgS2VybmVsIEdpdAorICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3NpdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIEdpdCByZXBvc2l0b3JpZXMgb2Ygc3VwcG9ydGVkIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbHMgb3JnYW5pemVkIHVuZGVyICJZb2N0byBMaW51eCBLZXJuZWwiIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzIGF0CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2knPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBzaW1wbGljaXR5LCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBjcmVhdGUgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgY29weSBvZiB0aGUga2VybmVsIEdpdCByZXBvc2l0b3J5IG91dHNpZGUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyB1c3VhbGx5IG5hbWVkIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBBbHNvLCBiZSBzdXJlIHlvdSBhcmUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3RhbmRhcmQvYmFzZTwvZmlsZW5hbWU+IGJyYW5jaC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIHNob3cgaG93IHRvIGNyZWF0ZSBhIGxvY2FsIGNvcHkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tNC4xMjwvZmlsZW5hbWU+IGtlcm5lbCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlIGluIHRoZSA8ZmlsZW5hbWU+c3RhbmRhcmQvYmFzZTwvZmlsZW5hbWU+IGJyYW5jaC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tNC4xMjwvZmlsZW5hbWU+IGtlcm5lbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBiZSB1c2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi40IHJlbGVhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZm9yd2FyZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2Fubm90IHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tNC4xMjwvZmlsZW5hbWU+IGtlcm5lbCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZXMgcHJpb3IgdG8gWW9jdG8gUHJvamVjdCAyLjQ6CisgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgfgorICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by00LjEyIC0tYnJhbmNoIHN0YW5kYXJkL2Jhc2UKKyAgICAgQ2xvbmluZyBpbnRvICdsaW51eC15b2N0by00LjEyJy4uLgorICAgICByZW1vdGU6IENvdW50aW5nIG9iamVjdHM6IDYwOTcxOTUsIGRvbmUuCisgICAgIHJlbW90ZTogQ29tcHJlc3Npbmcgb2JqZWN0czogMTAwJSAoOTAxMDI2LzkwMTAyNiksIGRvbmUuCisgICAgIHJlbW90ZTogVG90YWwgNjA5NzE5NSAoZGVsdGEgNTE1MjYwNCksIHJldXNlZCA2MDk2ODQ3IChkZWx0YSA1MTUyMjU2KQorICAgICBSZWNlaXZpbmcgb2JqZWN0czogMTAwJSAoNjA5NzE5NS82MDk3MTk1KSwgMS4yNCBHaUIgfCA3LjgxIE1pQi9zLCBkb25lLgorICAgICBSZXNvbHZpbmcgZGVsdGFzOiAxMDAlICg1MTUyNjA0LzUxNTI2MDQpLCBkb25lLgorICAgICBDaGVja2luZyBjb25uZWN0aXZpdHkuLi4gZG9uZS4KKyAgICAgQ2hlY2tpbmcgb3V0IGZpbGVzOiAxMDAlICg1OTg0Ni81OTg0NiksIGRvbmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkNyZWF0ZSBhIExvY2FsIENvcHkgb2YgdGhlIEtlcm5lbCBDYWNoZSBHaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlcG9zaXRvcnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBzaW1wbGljaXR5LCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBjcmVhdGUgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgY29weSBvZiB0aGUga2VybmVsIGNhY2hlIEdpdCByZXBvc2l0b3J5IG91dHNpZGUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyB1c3VhbGx5IG5hbWVkIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBBbHNvLCBmb3IgdGhpcyBleGFtcGxlLCBiZSBzdXJlIHlvdSBhcmUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG8tNC4xMjwvZmlsZW5hbWU+IGJyYW5jaC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIHNob3cgaG93IHRvIGNyZWF0ZSBhIGxvY2FsIGNvcHkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsLWNhY2hlPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBiZSBpbiB0aGUgPGZpbGVuYW1lPnlvY3RvLTQuMTI8L2ZpbGVuYW1lPiBicmFuY2g6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgfgorICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGUgLS1icmFuY2ggeW9jdG8tNC4xMgorICAgICBDbG9uaW5nIGludG8gJ3lvY3RvLWtlcm5lbC1jYWNoZScuLi4KKyAgICAgcmVtb3RlOiBDb3VudGluZyBvYmplY3RzOiAyMjYzOSwgZG9uZS4KKyAgICAgcmVtb3RlOiBDb21wcmVzc2luZyBvYmplY3RzOiAxMDAlICg5NzYxLzk3NjEpLCBkb25lLgorICAgICByZW1vdGU6IFRvdGFsIDIyNjM5IChkZWx0YSAxMjQwMCksIHJldXNlZCAyMjU4NiAoZGVsdGEgMTIzNDcpCisgICAgIFJlY2VpdmluZyBvYmplY3RzOiAxMDAlICgyMjYzOS8yMjYzOSksIDIyLjM0IE1pQiB8IDYuMjcgTWlCL3MsIGRvbmUuCisgICAgIFJlc29sdmluZyBkZWx0YXM6IDEwMCUgKDEyNDAwLzEyNDAwKSwgZG9uZS4KKyAgICAgQ2hlY2tpbmcgY29ubmVjdGl2aXR5Li4uIGRvbmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50LCB5b3UgYXJlIHJlYWR5IHRvIHN0YXJ0IG1ha2luZyBtb2RpZmljYXRpb25zIHRvCisgICAgICAgICAgICAgICAgdGhlIGtlcm5lbCB1c2luZyB0cmFkaXRpb25hbCBrZXJuZWwgZGV2ZWxvcG1lbnQgc3RlcHMuCisgICAgICAgICAgICAgICAgRm9yIGEgY29udGludWVkIGV4YW1wbGUsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctdHJhZGl0aW9uYWwta2VybmVsLWRldmVsb3BtZW50LXRvLXBhdGNoLXRoZS1rZXJuZWwnPlVzaW5nIFRyYWRpdGlvbmFsIEtlcm5lbCBEZXZlbG9wbWVudCB0byBQYXRjaCB0aGUgS2VybmVsPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgogCiAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLWFuZC1wcmVwYXJpbmctYS1sYXllcic+CiAgICAgICAgIDx0aXRsZT5DcmVhdGluZyBhbmQgUHJlcGFyaW5nIGEgTGF5ZXI8L3RpdGxlPgpAQCAtMjYsMjUgKzQ3Miw5OCBAQAogICAgICAgICAgICAgdGhhdCB5b3UgY3JlYXRlIGFuZCBwcmVwYXJlIHlvdXIgb3duIGxheWVyIGluIHdoaWNoIHRvIGRvIHlvdXIKICAgICAgICAgICAgIHdvcmsuCiAgICAgICAgICAgICBZb3VyIGxheWVyIGNvbnRhaW5zIGl0cyBvd24KLSAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+Ci0gICAgICAgICAgICBhcHBlbmQgZmlsZXMKLSAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pIGFuZCBwcm92aWRlcyBhIGNvbnZlbmllbnQKLSAgICAgICAgICAgIG1lY2hhbmlzbSB0byBjcmVhdGUgeW91ciBvd24gcmVjaXBlIGZpbGVzCi0gICAgICAgICAgICAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+KS4KLSAgICAgICAgICAgIEZvciBkZXRhaWxzIG9uIGhvdyB0byBjcmVhdGUgYW5kIHdvcmsgd2l0aCBsYXllcnMsIHNlZSB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+CisgICAgICAgICAgICBhcHBlbmQgZmlsZXMgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikgYW5kIHByb3ZpZGVzIGEKKyAgICAgICAgICAgIGNvbnZlbmllbnQgbWVjaGFuaXNtIHRvIGNyZWF0ZSB5b3VyIG93biByZWNpcGUgZmlsZXMKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4pIGFzIHdlbGwgYXMgc3RvcmUgYW5kIHVzZSBrZXJuZWwKKyAgICAgICAgICAgIHBhdGNoIGZpbGVzLgorICAgICAgICAgICAgRm9yIGJhY2tncm91bmQgaW5mb3JtYXRpb24gb24gd29ya2luZyB3aXRoIGxheWVycywgc2VlIHRoZQogICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycyc+VW5kZXJzdGFuZGluZyBhbmQgQ3JlYXRpbmcgTGF5ZXJzPC91bGluaz4iCi0gICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgICAgICAgICAgPG5vdGU+PHRpdGxlPlRpcDwvdGl0bGU+CiAgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgY29tZXMgd2l0aCBtYW55IHRvb2xzIHRoYXQgc2ltcGxpZnkKICAgICAgICAgICAgICAgICB0YXNrcyB5b3UgbmVlZCB0byBwZXJmb3JtLgotICAgICAgICAgICAgICAgIE9uZSBzdWNoIHRvb2wgaXMgdGhlIDxmaWxlbmFtZT55b2N0by1sYXllciBjcmVhdGU8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIHNjcmlwdCwgd2hpY2ggc2ltcGxpZmllcyBjcmVhdGluZyBhIG5ldyBsYXllci4KKyAgICAgICAgICAgICAgICBPbmUgc3VjaCB0b29sIGlzIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLWxheWVycyBjcmVhdGUtbGF5ZXI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbW1hbmQsIHdoaWNoIHNpbXBsaWZpZXMgY3JlYXRpbmcgYSBuZXcgbGF5ZXIuCiAgICAgICAgICAgICAgICAgU2VlIHRoZQotICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1hLWdlbmVyYWwtbGF5ZXItdXNpbmctdGhlLXlvY3RvLWxheWVyLXNjcmlwdCc+Q3JlYXRpbmcgYSBHZW5lcmFsIExheWVyIFVzaW5nIHRoZSB5b2N0by1sYXllciBTY3JpcHQ8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IgbW9yZQotICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1hLWdlbmVyYWwtbGF5ZXItdXNpbmctdGhlLWJpdGJha2UtbGF5ZXJzLXNjcmlwdCc+Q3JlYXRpbmcgYSBHZW5lcmFsIExheWVyIFVzaW5nIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZS1sYXllcnM8L2ZpbGVuYW1lPiBTY3JpcHQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbCBmb3IKKyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoaXMgc2NyaXB0LgogICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgbGF5ZXIgeW91IGNyZWF0ZSBmb3Iga2VybmVsIGRldmVsb3BtZW50LAorICAgICAgICAgICAgdGhlIGZvbGxvd2luZyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgdG8gY3JlYXRlIGEgbGF5ZXIKKyAgICAgICAgICAgIHdpdGhvdXQgdGhlIGFpZCBvZiB0b29scy4KKyAgICAgICAgICAgIFRoZXNlIHN0ZXBzIGFzc3VtZSBjcmVhdGlvbiBvZiBhIGxheWVyIG5hbWVkCisgICAgICAgICAgICA8ZmlsZW5hbWU+bXlsYXllcjwvZmlsZW5hbWU+IGluIHlvdXIgaG9tZSBkaXJlY3Rvcnk6CisgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q3JlYXRlIFN0cnVjdHVyZTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBDcmVhdGUgdGhlIGxheWVyJ3Mgc3RydWN0dXJlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgJEhPTUUKKyAgICAgJCBta2RpciBtZXRhLW15bGF5ZXIKKyAgICAgJCBta2RpciBtZXRhLW15bGF5ZXIvY29uZgorICAgICAkIG1rZGlyIG1ldGEtbXlsYXllci9yZWNpcGVzLWtlcm5lbAorICAgICAkIG1rZGlyIG1ldGEtbXlsYXllci9yZWNpcGVzLWtlcm5lbC9saW51eAorICAgICAkIG1rZGlyIG1ldGEtbXlsYXllci9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0bworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBob2xkcyB5b3VyCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHdoaWxlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy1rZXJuZWw8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaG9sZHMgeW91cgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQgZmlsZSBhbmQgZXZlbnR1YWwgcGF0Y2ggZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkNyZWF0ZSB0aGUgTGF5ZXIgQ29uZmlndXJhdGlvbiBGaWxlPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgIE1vdmUgdG8gdGhlIDxmaWxlbmFtZT5tZXRhLW15bGF5ZXIvY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBhbmQgY3JlYXRlIHRoZSA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIFdlIGhhdmUgYSBjb25mIGFuZCBjbGFzc2VzIGRpcmVjdG9yeSwgYWRkIHRvIEJCUEFUSAorICAgICBCQlBBVEggLj0gIjoke0xBWUVSRElSfSIKKworICAgICAjIFdlIGhhdmUgcmVjaXBlcy0qIGRpcmVjdG9yaWVzLCBhZGQgdG8gQkJGSUxFUworICAgICBCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiIFwKKyAgICAgICAgICAgICAgICAgJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYmFwcGVuZCIKKworICAgICBCQkZJTEVfQ09MTEVDVElPTlMgKz0gIm15bGF5ZXIiCisgICAgIEJCRklMRV9QQVRURVJOX215bGF5ZXIgPSAiXiR7TEFZRVJESVJ9LyIKKyAgICAgQkJGSUxFX1BSSU9SSVRZX215bGF5ZXIgPSAiNSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBOb3RpY2UgPGZpbGVuYW1lPm15bGF5ZXI8L2ZpbGVuYW1lPiBhcyBwYXJ0IG9mIHRoZSBsYXN0CisgICAgICAgICAgICAgICAgICAgIHRocmVlIHN0YXRlbWVudHMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkNyZWF0ZSB0aGUgS2VybmVsIFJlY2lwZSBBcHBlbmQgRmlsZTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBNb3ZlIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1teWxheWVyL3JlY2lwZXMta2VybmVsL2xpbnV4PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGFuZCBjcmVhdGUgdGhlIGtlcm5lbCdzIGFwcGVuZCBmaWxlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTQuMTI8L2ZpbGVuYW1lPiBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgIFRodXMsIHRoZSBuYW1lIG9mIHRoZSBhcHBlbmQgZmlsZSBpcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG9fNC4xMi5iYmFwcGVuZDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKKworICAgICBTUkNfVVJJX2FwcGVuZCArPSAiZmlsZTovLzxyZXBsYWNlYWJsZT5wYXRjaC1maWxlLW9uZTwvcmVwbGFjZWFibGU+IgorICAgICBTUkNfVVJJX2FwcGVuZCArPSAiZmlsZTovLzxyZXBsYWNlYWJsZT5wYXRjaC1maWxlLXR3bzwvcmVwbGFjZWFibGU+IgorICAgICBTUkNfVVJJX2FwcGVuZCArPSAiZmlsZTovLzxyZXBsYWNlYWJsZT5wYXRjaC1maWxlLXRocmVlPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFU0VYVFJBUEFUSFMnPjxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudHMgZW5hYmxlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGZpbmQKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2ggZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIGFwcGVuZCBmaWxlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdXNpbmctYmJhcHBlbmQtZmlsZXMnPlVzaW5nIC5iYmFwcGVuZCBGaWxlcyBpbiBZb3VyIExheWVyPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3Rpb24+CiAKICAgICA8c2VjdGlvbiBpZD0nbW9kaWZ5aW5nLWFuLWV4aXN0aW5nLXJlY2lwZSc+CkBAIC01Niw3ICs1NzUsNyBAQAogICAgICAgICAgICAgRWFjaCByZWxlYXNlIG9mIHRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIGEgZmV3IExpbnV4CiAgICAgICAgICAgICBrZXJuZWwgcmVjaXBlcyBmcm9tIHdoaWNoIHlvdSBjYW4gY2hvb3NlLgogICAgICAgICAgICAgVGhlc2UgYXJlIGxvY2F0ZWQgaW4gdGhlCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgogICAgICAgICAgICAgaW4gPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1rZXJuZWwvbGludXg8L2ZpbGVuYW1lPi4KICAgICAgICAgPC9wYXJhPgogCkBAIC03MiwxMiArNTkxLDkgQEAKICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICBCZWZvcmUgbW9kaWZ5aW5nIGFuIGV4aXN0aW5nIHJlY2lwZSwgYmUgc3VyZSB0aGF0IHlvdSBoYXZlIGNyZWF0ZWQKICAgICAgICAgICAgIGEgbWluaW1hbCwgY3VzdG9tIGxheWVyIGZyb20gd2hpY2ggeW91IGNhbiB3b3JrLgotICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nY3JlYXRpbmctYW5kLXByZXBhcmluZy1hLWxheWVyJz5DcmVhdGluZyBhbmQgUHJlcGFyaW5nIGEgTGF5ZXI8L2xpbms+IgotICAgICAgICAgICAgc2VjdGlvbiBmb3Igc29tZSBnZW5lcmFsIHJlc291cmNlcy4KLSAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBzZWUgdGhlCi0gICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc2V0LXVwLXlvdXItbGF5ZXItZm9yLXRoZS1idWlsZCc+U2V0IFVwIFlvdXIgTGF5ZXIgZm9yIHRoZSBCdWlsZDwvdWxpbms+IiBzZWN0aW9uCi0gICAgICAgICAgICBvZiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgZm9yIGEgZGV0YWlsZWQKLSAgICAgICAgICAgIGV4YW1wbGUuCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3JlYXRpbmctYW5kLXByZXBhcmluZy1hLWxheWVyJz5DcmVhdGluZyBhbmQgUHJlcGFyaW5nIGEgTGF5ZXI8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24uCiAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmctdGhlLWFwcGVuZC1maWxlJz4KQEAgLTg4LDExICs2MDQsMTEgQEAKICAgICAgICAgICAgICAgICBZb3UgYWxzbyBuYW1lIGl0IGFjY29yZGluZ2x5IGJhc2VkIG9uIHRoZSBsaW51eC15b2N0byByZWNpcGUKICAgICAgICAgICAgICAgICB5b3UgYXJlIHVzaW5nLgogICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgYXJlIG1vZGlmeWluZyB0aGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjQuYmI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMTIuYmI8L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgIHJlY2lwZSwgdGhlIGFwcGVuZCBmaWxlIHdpbGwgdHlwaWNhbGx5IGJlIGxvY2F0ZWQgYXMgZm9sbG93cwogICAgICAgICAgICAgICAgIHdpdGhpbiB5b3VyIGN1c3RvbSBsYXllcjoKICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIDxyZXBsYWNlYWJsZT55b3VyLWxheWVyPC9yZXBsYWNlYWJsZT4vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC40LmJiYXBwZW5kCisgICAgIDxyZXBsYWNlYWJsZT55b3VyLWxheWVyPC9yZXBsYWNlYWJsZT4vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xMi5iYmFwcGVuZAogICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICBUaGUgYXBwZW5kIGZpbGUgc2hvdWxkIGluaXRpYWxseSBleHRlbmQgdGhlCiAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC91bGluaz4KQEAgLTEyMyw3ICs2MzksNyBAQAogICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgYXBwZW5kIGZpbGUKICAgICAgICAgICAgICAgICB1c2VkIGJ5IHRoZSBCU1BzIGluIDxmaWxlbmFtZT5tZXRhLXlvY3RvLWJzcDwvZmlsZW5hbWU+OgogICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgbWV0YS15b2N0by1ic3AvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC40LmJiYXBwZW5kCisgICAgIG1ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMTIuYmJhcHBlbmQKICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0aW5nIHNob3dzIHRoZSBmaWxlLgogICAgICAgICAgICAgICAgIEJlIGF3YXJlIHRoYXQgdGhlIGFjdHVhbCBjb21taXQgSUQgc3RyaW5ncyBpbiB0aGlzCkBAIC0xNDAsMTEgKzY1NiwxMiBAQAogICAgICBLQlJBTkNIX2JlYWdsZWJvbmUgPSAic3RhbmRhcmQvYmVhZ2xlYm9uZSIKICAgICAgS0JSQU5DSF9tcGM4MzE1ZS1yZGIgPSAic3RhbmRhcmQvZnNsLW1wYzgzMTVlLXJkYiIKIAotICAgICBTUkNSRVZfbWFjaGluZV9nZW5lcmljeDg2ICAgID89ICJhZDhiMWQ2NTlkZGQyNjk5ZWJmN2Q1MGVmOWRlODk0MGIxNTdiZmMyIgotICAgICBTUkNSRVZfbWFjaGluZV9nZW5lcmljeDg2LTY0ID89ICJhZDhiMWQ2NTlkZGQyNjk5ZWJmN2Q1MGVmOWRlODk0MGIxNTdiZmMyIgotICAgICBTUkNSRVZfbWFjaGluZV9lZGdlcm91dGVyID89ICJjZWJlMWFkNTZhZWJkODllMGRlMjk0MTJlMTk0MzNmYjQ0MWJmMTNjIgotICAgICBTUkNSRVZfbWFjaGluZV9iZWFnbGVib25lID89ICJjZWJlMWFkNTZhZWJkODllMGRlMjk0MTJlMTk0MzNmYjQ0MWJmMTNjIgotICAgICBTUkNSRVZfbWFjaGluZV9tcGM4MzE1ZS1yZGIgPz0gIjA2YzBkYmRjYmEzNzRjYTdmOTJhNTNkNjkyOTJkNmJiN2JjOWIwZjMiCisgICAgIFNSQ1JFVl9tYWNoaW5lX2dlbmVyaWN4ODYgICAgPz0gImQwOWYyY2U1ODRkNjBlY2I3ODkwNTUwYzIyYTgwYzQ4YjgzYzJlMTkiCisgICAgIFNSQ1JFVl9tYWNoaW5lX2dlbmVyaWN4ODYtNjQgPz0gImQwOWYyY2U1ODRkNjBlY2I3ODkwNTUwYzIyYTgwYzQ4YjgzYzJlMTkiCisgICAgIFNSQ1JFVl9tYWNoaW5lX2VkZ2Vyb3V0ZXIgPz0gImI1YzhjZmRhMmRmZTI5NjQxMGQ1MWUxMzEyODlmYjA5YzY5ZTFlN2QiCisgICAgIFNSQ1JFVl9tYWNoaW5lX2JlYWdsZWJvbmUgPz0gImI1YzhjZmRhMmRmZTI5NjQxMGQ1MWUxMzEyODlmYjA5YzY5ZTFlN2QiCisgICAgIFNSQ1JFVl9tYWNoaW5lX21wYzgzMTVlLXJkYiA/PSAiMmQxZDAxMDI0MDg0NmQ3YmZmMTVkMWZjYzBjYjZlYjhhMjJmYzc4YSIKKwogCiAgICAgIENPTVBBVElCTEVfTUFDSElORV9nZW5lcmljeDg2ID0gImdlbmVyaWN4ODYiCiAgICAgIENPTVBBVElCTEVfTUFDSElORV9nZW5lcmljeDg2LTY0ID0gImdlbmVyaWN4ODYtNjQiCkBAIC0xNTIsMTEgKzY2OSwxMSBAQAogICAgICBDT01QQVRJQkxFX01BQ0hJTkVfYmVhZ2xlYm9uZSA9ICJiZWFnbGVib25lIgogICAgICBDT01QQVRJQkxFX01BQ0hJTkVfbXBjODMxNWUtcmRiID0gIm1wYzgzMTVlLXJkYiIKIAotICAgICBMSU5VWF9WRVJTSU9OX2dlbmVyaWN4ODYgPSAiNC40LjQxIgotICAgICBMSU5VWF9WRVJTSU9OX2dlbmVyaWN4ODYtNjQgPSAiNC40LjQxIgotICAgICBMSU5VWF9WRVJTSU9OX2VkZ2Vyb3V0ZXIgPSAiNC40LjUzIgotICAgICBMSU5VWF9WRVJTSU9OX2JlYWdsZWJvbmUgPSAiNC40LjUzIgotICAgICBMSU5VWF9WRVJTSU9OX21wYzgzMTVlLXJkYiA9ICI0LjQuNTMiCisgICAgIExJTlVYX1ZFUlNJT05fZ2VuZXJpY3g4NiA9ICI0LjEyLjciCisgICAgIExJTlVYX1ZFUlNJT05fZ2VuZXJpY3g4Ni02NCA9ICI0LjEyLjciCisgICAgIExJTlVYX1ZFUlNJT05fZWRnZXJvdXRlciA9ICI0LjEyLjEwIgorICAgICBMSU5VWF9WRVJTSU9OX2JlYWdsZWJvbmUgPSAiNC4xMi4xMCIKKyAgICAgTElOVVhfVkVSU0lPTl9tcGM4MzE1ZS1yZGIgPSAiNC4xMi4xMCIKICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgVGhpcyBhcHBlbmQgZmlsZSBjb250YWlucyBzdGF0ZW1lbnRzIHVzZWQgdG8gc3VwcG9ydAogICAgICAgICAgICAgICAgIHNldmVyYWwgQlNQcyB0aGF0IHNoaXAgd2l0aCB0aGUgWW9jdG8gUHJvamVjdC4KQEAgLTE3OSw3ICs2OTYsNyBAQAogICAgICAgICAgICAgICAgIHZhcmlhYmxlIGNvdWxkIGJlIHVzZWQgdG8gZW5hYmxlIGZlYXR1cmVzIHNwZWNpZmljIHRvCiAgICAgICAgICAgICAgICAgdGhlIGtlcm5lbC4KICAgICAgICAgICAgICAgICBUaGUgYXBwZW5kIGZpbGUgcG9pbnRzIHRvIHNwZWNpZmljIGNvbW1pdHMgaW4gdGhlCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CiAgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnkgYW5kIHRoZSA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IEdpdCByZXBvc2l0b3J5CiAgICAgICAgICAgICAgICAgYnJhbmNoZXMgdG8gaWRlbnRpZnkgdGhlIGV4YWN0IGtlcm5lbCBuZWVkZWQgdG8gYnVpbGQgdGhlCiAgICAgICAgICAgICAgICAgQlNQLgpAQCAtMTg3LDggKzcwNCw4IEBACiAKICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgIE9uZSB0aGluZyBtaXNzaW5nIGluIHRoaXMgcGFydGljdWxhciBCU1AsIHdoaWNoIHlvdSB3aWxsCi0gICAgICAgICAgICAgICAgdHlwaWNhbGx5IG5lZWQgd2hlbiBkZXZlbG9waW5nIGEgQlNQLCBpcyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAgICAgICBmaWxlICg8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+KSBmb3IgeW91ciBCU1AuCisgICAgICAgICAgICAgICAgdHlwaWNhbGx5IG5lZWQgd2hlbiBkZXZlbG9waW5nIGEgQlNQLCBpcyB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlICg8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+KSBmb3IgeW91ciBCU1AuCiAgICAgICAgICAgICAgICAgV2hlbiBkZXZlbG9waW5nIGEgQlNQLCB5b3UgcHJvYmFibHkgaGF2ZSBhIGtlcm5lbCBjb25maWd1cmF0aW9uCiAgICAgICAgICAgICAgICAgZmlsZSBvciBhIHNldCBvZiBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcyB0aGF0LCB3aGVuIHRha2VuCiAgICAgICAgICAgICAgICAgdG9nZXRoZXIsIGRlZmluZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIHlvdXIgQlNQLgpAQCAtMTk2LDcgKzcxMyw4IEBACiAgICAgICAgICAgICAgICAgaW4gYSBmaWxlIG9yIGEgc2V0IG9mIGZpbGVzIGluc2lkZSBhIGRpcmVjdG9yeSBsb2NhdGVkIGF0IHRoZQogICAgICAgICAgICAgICAgIHNhbWUgbGV2ZWwgYXMgeW91ciBrZXJuZWwncyBhcHBlbmQgZmlsZSBhbmQgaGF2aW5nIHRoZSBzYW1lCiAgICAgICAgICAgICAgICAgbmFtZSBhcyB0aGUga2VybmVsJ3MgbWFpbiByZWNpcGUgZmlsZS4KLSAgICAgICAgICAgICAgICBXaXRoIGFsbCB0aGVzZSBjb25kaXRpb25zIG1ldCwgc2ltcGx5IHJlZmVyZW5jZSB0aG9zZSBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICBXaXRoIGFsbCB0aGVzZSBjb25kaXRpb25zIG1ldCwgc2ltcGx5IHJlZmVyZW5jZSB0aG9zZSBmaWxlcyBpbgorICAgICAgICAgICAgICAgIHRoZQogICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgaW4gdGhlIGFwcGVuZCBmaWxlLgogICAgICAgICAgICAgPC9wYXJhPgpAQCAtMjQyLDI1ICs3NjAsMzEgQEAKIAogICAgICAgICAgICAgPG5vdGU+CiAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIE90aGVyIG1ldGhvZHMgZXhpc3QgdG8gYWNjb21wbGlzaCBncm91cGluZyBhbmQgZGVmaW5pbmcgY29uZmlndXJhdGlvbiBvcHRpb25zLgotICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSB3b3JraW5nIHdpdGggYSBsb2NhbCBjbG9uZSBvZiB0aGUga2VybmVsIHJlcG9zaXRvcnksCi0gICAgICAgICAgICAgICAgICAgIHlvdSBjb3VsZCBjaGVja291dCB0aGUga2VybmVsJ3MgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2gsIG1ha2UgeW91ciBjaGFuZ2VzLAotICAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBwdXNoIHRoZSBjaGFuZ2VzIHRvIHRoZSBsb2NhbCBiYXJlIGNsb25lIG9mIHRoZSBrZXJuZWwuCi0gICAgICAgICAgICAgICAgICAgIFRoZSByZXN1bHQgaXMgdGhhdCB5b3UgZGlyZWN0bHkgYWRkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2ggZm9yIHlvdXIgQlNQLgotICAgICAgICAgICAgICAgICAgICBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgbGlrZWx5IGVuZCB1cCBpbiB0aGF0IGxvY2F0aW9uIGFueXdheSBpZiB0aGUgQlNQIGdldHMKLSAgICAgICAgICAgICAgICAgICAgYWRkZWQgdG8gdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIE90aGVyIG1ldGhvZHMgZXhpc3QgdG8gYWNjb21wbGlzaCBncm91cGluZyBhbmQgZGVmaW5pbmcKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBvcHRpb25zLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSB3b3JraW5nIHdpdGggYSBsb2NhbCBjbG9uZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAga2VybmVsIHJlcG9zaXRvcnksIHlvdSBjb3VsZCBjaGVja291dCB0aGUga2VybmVsJ3MKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2gsIG1ha2UgeW91ciBjaGFuZ2VzLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgdGhlbiBwdXNoIHRoZSBjaGFuZ2VzIHRvIHRoZSBsb2NhbCBiYXJlIGNsb25lIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgIFRoZSByZXN1bHQgaXMgdGhhdCB5b3UgZGlyZWN0bHkgYWRkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworICAgICAgICAgICAgICAgICAgICB0byB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2ggZm9yIHlvdXIgQlNQLgorICAgICAgICAgICAgICAgICAgICBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgbGlrZWx5IGVuZCB1cCBpbiB0aGF0CisgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uIGFueXdheSBpZiB0aGUgQlNQIGdldHMgYWRkZWQgdG8gdGhlIFlvY3RvIFByb2plY3QuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEluIGdlbmVyYWwsIGhvd2V2ZXIsIHRoZSBZb2N0byBQcm9qZWN0IG1haW50YWluZXJzIHRha2UgY2FyZSBvZiBtb3ZpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4tc3BlY2lmaWVkCi0gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB0aGUga2VybmVsJ3MgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2guCi0gICAgICAgICAgICAgICAgICAgIE5vdCBvbmx5IGlzIGl0IGVhc2llciBmb3IgQlNQIGRldmVsb3BlcnMgdG8gbm90IGhhdmUgdG8gd29ycnkgYWJvdXQgcHV0dGluZyB0aG9zZQotICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucyBpbiB0aGUgYnJhbmNoLCBidXQgaGF2aW5nIHRoZSBtYWludGFpbmVycyBkbyBpdCBhbGxvd3MgdGhlbSB0byBhcHBseQotICAgICAgICAgICAgICAgICAgICAnZ2xvYmFsJyBrbm93bGVkZ2UgYWJvdXQgdGhlIGtpbmRzIG9mIGNvbW1vbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgbXVsdGlwbGUgQlNQcyBpbgotICAgICAgICAgICAgICAgICAgICB0aGUgdHJlZSBhcmUgdHlwaWNhbGx5IHVzaW5nLgotICAgICAgICAgICAgICAgICAgICBUaGlzIGFsbG93cyBmb3IgcHJvbW90aW9uIG9mIGNvbW1vbiBjb25maWd1cmF0aW9ucyBpbnRvIGNvbW1vbiBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgSW4gZ2VuZXJhbCwgaG93ZXZlciwgdGhlIFlvY3RvIFByb2plY3QgbWFpbnRhaW5lcnMgdGFrZQorICAgICAgICAgICAgICAgICAgICBjYXJlIG9mIG1vdmluZyB0aGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPi1zcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHRoZSBrZXJuZWwncworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IGJyYW5jaC4KKyAgICAgICAgICAgICAgICAgICAgTm90IG9ubHkgaXMgaXQgZWFzaWVyIGZvciBCU1AgZGV2ZWxvcGVycyB0byBub3QgaGF2ZSB0bworICAgICAgICAgICAgICAgICAgICB3b3JyeSBhYm91dCBwdXR0aW5nIHRob3NlIGNvbmZpZ3VyYXRpb25zIGluIHRoZSBicmFuY2gsCisgICAgICAgICAgICAgICAgICAgIGJ1dCBoYXZpbmcgdGhlIG1haW50YWluZXJzIGRvIGl0IGFsbG93cyB0aGVtIHRvIGFwcGx5CisgICAgICAgICAgICAgICAgICAgICdnbG9iYWwnIGtub3dsZWRnZSBhYm91dCB0aGUga2luZHMgb2YgY29tbW9uIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyBtdWx0aXBsZSBCU1BzIGluIHRoZSB0cmVlIGFyZSB0eXBpY2FsbHkgdXNpbmcuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgYWxsb3dzIGZvciBwcm9tb3Rpb24gb2YgY29tbW9uIGNvbmZpZ3VyYXRpb25zIGludG8KKyAgICAgICAgICAgICAgICAgICAgY29tbW9uIGZlYXR1cmVzLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgPC9zZWN0aW9uPgpAQCAtMjk1LDkgKzgxOSwxMiBAQAogICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBGb3IgYSBkZXRhaWxlZCBleGFtcGxlIHNob3dpbmcgaG93IHRvIHBhdGNoIHRoZSBrZXJuZWwsIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGF0Y2hpbmctdGhlLWtlcm5lbCc+UGF0Y2hpbmcgdGhlIEtlcm5lbDwvdWxpbms+IgotICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgIEZvciBhIGRldGFpbGVkIGV4YW1wbGUgc2hvd2luZyBob3cgdG8gcGF0Y2ggdGhlIGtlcm5lbCB1c2luZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctZGV2dG9vbC10by1wYXRjaC10aGUta2VybmVsJz5Vc2luZyA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IHRvIFBhdGNoIHRoZSBLZXJuZWw8L2xpbms+IgorICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy10cmFkaXRpb25hbC1rZXJuZWwtZGV2ZWxvcG1lbnQtdG8tcGF0Y2gtdGhlLWtlcm5lbCc+VXNpbmcgVHJhZGl0aW9uYWwgS2VybmVsIERldmVsb3BtZW50IHRvIFBhdGNoIHRoZSBLZXJuZWw8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb25zLgogICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L3NlY3Rpb24+CiAKQEAgLTM4Myw4ICs5MTAsOCBAQAogICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgRm9yIGEgZGV0YWlsZWQgZXhhbXBsZSBzaG93aW5nIGhvdyB0byBjb25maWd1cmUgdGhlIGtlcm5lbCwKICAgICAgICAgICAgICAgICBzZWUgdGhlCi0gICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NvbmZpZ3VyaW5nLXRoZS1rZXJuZWwnPkNvbmZpZ3VyaW5nIHRoZSBLZXJuZWw8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY29uZmlndXJpbmctdGhlLWtlcm5lbCc+Q29uZmlndXJpbmcgdGhlIEtlcm5lbDwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9zZWN0aW9uPgogCkBAIC00MTYsMTUgKzk0MywxNyBAQAogCiAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICBUbyBzcGVjaWZ5IGFuICJpbi10cmVlIiA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSwKLSAgICAgICAgICAgICAgICBlZGl0IHRoZSByZWNpcGUgdGhhdCBidWlsZHMgeW91ciBrZXJuZWwgc28gdGhhdCBpdCBoYXMgdGhlCi0gICAgICAgICAgICAgICAgZm9sbG93aW5nIGNvbW1hbmQgZm9ybToKKyAgICAgICAgICAgICAgICB1c2UgdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQgZm9ybToKICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEtCVUlMRF9ERUZDT05GSUdfS01BQ0hJTkUgPz0gPHJlcGxhY2VhYmxlPmRlZmNvbmZpZ19maWxlPC9yZXBsYWNlYWJsZT4KKyAgICAgS0JVSUxEX0RFRkNPTkZJR188cmVwbGFjZWFibGU+S01BQ0hJTkU8L3JlcGxhY2VhYmxlPiA/PSA8cmVwbGFjZWFibGU+ZGVmY29uZmlnX2ZpbGU8L3JlcGxhY2VhYmxlPgogICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBhcHBlbmQgdGhlIHZhcmlhYmxlIHdpdGgKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS01BQ0hJTkUnPjxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICBhbmQgdGhlbiBzdXBwbHkgdGhlIHBhdGggdG8geW91ciAiaW4tdHJlZSIKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBhcHBlbmRzIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5LQlVJTERfREVGQ09ORklHPC9maWxlbmFtZT4gdmFyaWFibGUgd2l0aAorICAgICAgICAgICAgICAgICJjb21tb24tcGMiIGFuZCBwcm92aWRlcyB0aGUgcGF0aCB0byB0aGUgImluLXRyZWUiCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBLQlVJTERfREVGQ09ORklHX2NvbW1vbi1wYyA/PSAiL2hvbWUvc2NvdHRyaWYvY29uZmlnZmlsZXMvbXlfZGVmY29uZmlnX2ZpbGUiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICA8cGFyYT4KQEAgLTQzMiw3ICs5NjEsOCBAQAogICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlLCB5b3UgbmVlZCB0byBiZSBzdXJlIG5vCiAgICAgICAgICAgICAgICAgZmlsZXMgb3Igc3RhdGVtZW50cyBzZXQgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB0byB1c2UgYQogICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBvdGhlciB0aGFuIHlvdXIgImluLXRyZWUiCi0gICAgICAgICAgICAgICAgZmlsZSAoZS5nLiBhIGtlcm5lbCdzIDxmaWxlbmFtZT5saW51eC08L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSAoZS5nLiBhIGtlcm5lbCdzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LTwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPm1hY2hpbmU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4KICAgICAgICAgICAgICAgICBmaWxlKS4KICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIGJ1aWxkIHN5c3RlbSBkZXRlY3RzIGEgc3RhdGVtZW50CiAgICAgICAgICAgICAgICAgdGhhdCBpZGVudGlmaWVzIGFuICJvdXQtb2YtdHJlZSIKQEAgLTQ0OSwxMTUgKzk3OSw3NTAgQEAKICAgICAgICAgPC9zZWN0aW9uPgogICAgIDwvc2VjdGlvbj4KIAotICAgIDxzZWN0aW9uIGlkPSd1c2luZy1hbi1pdGVyYXRpdmUtZGV2ZWxvcG1lbnQtcHJvY2Vzcyc+Ci0gICAgICAgIDx0aXRsZT5Vc2luZyBhbiBJdGVyYXRpdmUgRGV2ZWxvcG1lbnQgUHJvY2VzczwvdGl0bGU+CisgICAgPHNlY3Rpb24gaWQ9InVzaW5nLWRldnRvb2wtdG8tcGF0Y2gtdGhlLWtlcm5lbCI+CisgICAgICAgIDx0aXRsZT5Vc2luZyA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IHRvIFBhdGNoIHRoZSBLZXJuZWw8L3RpdGxlPgogCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBoYXZlIGV4aXN0aW5nIHBhdGNoZXMgb3IgY29uZmlndXJhdGlvbiBmaWxlcywKLSAgICAgICAgICAgIHlvdSBjYW4gaXRlcmF0aXZlbHkgZ2VuZXJhdGUgdGhlbSBmcm9tIHdpdGhpbiB0aGUgQml0QmFrZSBidWlsZAotICAgICAgICAgICAgZW52aXJvbm1lbnQgYXMgZGVzY3JpYmVkIHdpdGhpbiB0aGlzIHNlY3Rpb24uCi0gICAgICAgICAgICBEdXJpbmcgYW4gaXRlcmF0aXZlIHdvcmtmbG93LCBydW5uaW5nIGEgcHJldmlvdXNseSBjb21wbGV0ZWQgQml0QmFrZQotICAgICAgICAgICAgdGFzayBjYXVzZXMgQml0QmFrZSB0byBpbnZhbGlkYXRlIHRoZSB0YXNrcyB0aGF0IGZvbGxvdyB0aGUKLSAgICAgICAgICAgIGNvbXBsZXRlZCB0YXNrIGluIHRoZSBidWlsZCBzZXF1ZW5jZS4KLSAgICAgICAgICAgIEludmFsaWRhdGVkIHRhc2tzIHJlYnVpbGQgdGhlIG5leHQgdGltZSB5b3UgcnVuIHRoZSBidWlsZCB1c2luZwotICAgICAgICAgICAgQml0QmFrZS4KKyAgICAgICAgICAgIFRoZSBzdGVwcyBpbiB0aGlzIHByb2NlZHVyZSBzaG93IHlvdSBob3cgeW91IGNhbiBwYXRjaCB0aGUKKyAgICAgICAgICAgIGtlcm5lbCB1c2luZyB0aGUgZXh0ZW5zaWJsZSBTREsgYW5kIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBCZWZvcmUgYXR0ZW1wdGluZyB0aGlzIHByb2NlZHVyZSwgYmUgc3VyZSB5b3UgaGF2ZSBwZXJmb3JtZWQKKyAgICAgICAgICAgICAgICB0aGUgc3RlcHMgdG8gZ2V0IHJlYWR5IGZvciB1cGRhdGluZyB0aGUga2VybmVsIGFzIGRlc2NyaWJlZAorICAgICAgICAgICAgICAgIGluIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdnZXR0aW5nLXJlYWR5LXRvLWRldmVsb3AtdXNpbmctZGV2dG9vbCc+R2V0dGluZyBSZWFkeSB0byBEZXZlbG9wIFVzaW5nIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8L25vdGU+CiAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEFzIHlvdSByZWFkIHRoaXMgc2VjdGlvbiwgYmUgc3VyZSB0byBzdWJzdGl0dXRlIHRoZSBuYW1lCi0gICAgICAgICAgICBvZiB5b3VyIExpbnV4IGtlcm5lbCByZWNpcGUgZm9yIHRoZSB0ZXJtCi0gICAgICAgICAgICAibGludXgteW9jdG8iLgorICAgICAgICAgICAgUGF0Y2hpbmcgdGhlIGtlcm5lbCBpbnZvbHZlcyBjaGFuZ2luZyBvciBhZGRpbmcgY29uZmlndXJhdGlvbnMKKyAgICAgICAgICAgIHRvIGFuIGV4aXN0aW5nIGtlcm5lbCwgY2hhbmdpbmcgb3IgYWRkaW5nIHJlY2lwZXMgdG8gdGhlIGtlcm5lbAorICAgICAgICAgICAgdGhhdCBhcmUgbmVlZGVkIHRvIHN1cHBvcnQgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMsIG9yIGV2ZW4KKyAgICAgICAgICAgIGFsdGVyaW5nIHRoZSBzb3VyY2UgY29kZSBpdHNlbGYuCiAgICAgICAgIDwvcGFyYT4KIAotICAgICAgICA8c2VjdGlvbiBpZD0ndGlwLWRpcnR5LXN0cmluZyc+Ci0gICAgICAgICAgICA8dGl0bGU+Ii1kaXJ0eSIgU3RyaW5nPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGV4YW1wbGUgY3JlYXRlcyBhIHNpbXBsZSBwYXRjaCBieSBhZGRpbmcgc29tZSBRRU1VIGVtdWxhdG9yCisgICAgICAgICAgICBjb25zb2xlIG91dHB1dCBhdCBib290IHRpbWUgdGhyb3VnaCA8ZmlsZW5hbWU+cHJpbnRrPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHN0YXRlbWVudHMgaW4gdGhlIGtlcm5lbCdzIDxmaWxlbmFtZT5jYWxpYnJhdGUuYzwvZmlsZW5hbWU+IHNvdXJjZQorICAgICAgICAgICAgY29kZSBmaWxlLgorICAgICAgICAgICAgQXBwbHlpbmcgdGhlIHBhdGNoIGFuZCBib290aW5nIHRoZSBtb2RpZmllZCBpbWFnZSBjYXVzZXMgdGhlIGFkZGVkCisgICAgICAgICAgICBtZXNzYWdlcyB0byBhcHBlYXIgb24gdGhlIGVtdWxhdG9yJ3MgY29uc29sZS4KKyAgICAgICAgICAgIFRoZSBleGFtcGxlIGlzIGEgY29udGludWF0aW9uIG9mIHRoZSBzZXR1cCBwcm9jZWR1cmUgZm91bmQgaW4KKyAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2dldHRpbmctcmVhZHktdG8tZGV2ZWxvcC11c2luZy1kZXZ0b29sJz5HZXR0aW5nIFJlYWR5IHRvIERldmVsb3AgVXNpbmcgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICBTZWN0aW9uLgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkNoZWNrIE91dCB0aGUgS2VybmVsIFNvdXJjZSBGaWxlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBGaXJzdCB5b3UgbXVzdCB1c2UgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiB0byBjaGVja291dAorICAgICAgICAgICAgICAgICAgICB0aGUga2VybmVsIHNvdXJjZSBjb2RlIGluIGl0cyB3b3Jrc3BhY2UuCisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgeW91IGFyZSBpbiB0aGUgdGVybWluYWwgc2V0IHVwIHRvIGRvIHdvcmsKKyAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgZXh0ZW5zaWJsZSBTREsuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NldHRpbmctdXAtdGhlLWVzZGstdGVybWluYWwnPnN0ZXA8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdnZXR0aW5nLXJlYWR5LXRvLWRldmVsb3AtdXNpbmctZGV2dG9vbCc+R2V0dGluZyBSZWFkeSB0byBEZXZlbG9wIFVzaW5nIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgdG8gY2hlY2sgb3V0IHRoZSBjb2RlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZGV2dG9vbCBtb2RpZnkgbGludXgteW9jdG8KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIER1cmluZyB0aGUgY2hlY2tvdXQgb3BlcmF0aW9uLCBhIGJ1ZyBleGlzdHMgdGhhdCBjb3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgY2F1c2UgZXJyb3JzIHN1Y2ggYXMgdGhlIGZvbGxvd2luZyB0byBhcHBlYXI6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEVSUk9SOiBUYXNraGFzaCBtaXNtYXRjaCAyYzc5MzQzOGMyZDlmOGMzNjgxZmQ1ZjdiYzgxOWVmYSB2ZXJzdXMKKyAgICAgICAgICAgIGJlM2E4OWNlN2M0NzE3ODg4MGJhN2JmNjI5M2Q3NDA0IGZvcgorICAgICAgICAgICAgL3BhdGgvdG8vZXNkay9sYXllcnMvcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMTAuYmIuZG9fdW5wYWNrCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNhZmVseSBpZ25vcmUgdGhlc2UgbWVzc2FnZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc291cmNlIGNvZGUgaXMgY29ycmVjdGx5IGNoZWNrZWQgb3V0LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkVkaXQgdGhlIFNvdXJjZSBGaWxlczwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBzdGVwcyB0byBtYWtlIHNvbWUgc2ltcGxlIGNoYW5nZXMgdG8gdGhlIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5DaGFuZ2UgdGhlIHdvcmtpbmcgZGlyZWN0b3J5PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhlIHByZXZpb3VzIHN0ZXAsIHRoZSBvdXRwdXQgbm90ZWQgd2hlcmUgeW91IGNhbiBmaW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNvdXJjZSBmaWxlcyAoZS5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5+L3Bva3lfc2RrL3dvcmtzcGFjZS9zb3VyY2VzL2xpbnV4LXlvY3RvPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZSB0byB3aGVyZSB0aGUga2VybmVsIHNvdXJjZSBjb2RlIGlzIGJlZm9yZSBtYWtpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIGVkaXRzIHRvIHRoZSA8ZmlsZW5hbWU+Y2FsaWJyYXRlLmM8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L3Bva3lfc2RrL3dvcmtzcGFjZS9zb3VyY2VzL2xpbnV4LXlvY3RvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5FZGl0IHRoZSBzb3VyY2UgZmlsZTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXQgdGhlIDxmaWxlbmFtZT5pbml0L2NhbGlicmF0ZS5jPC9maWxlbmFtZT4gZmlsZSB0byBoYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyBjaGFuZ2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgdm9pZCBjYWxpYnJhdGVfZGVsYXkodm9pZCkKKyAgICAgeworICAgICAgICAgdW5zaWduZWQgbG9uZyBscGo7CisgICAgICAgICBzdGF0aWMgYm9vbCBwcmludGVkOworICAgICAgICAgaW50IHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCi08IS0tCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICA8ZW1waGFzaXM+QVIgLSBEYXJyZW4gSGFydDo8L2VtcGhhc2lzPiAgVGhpcyBzZWN0aW9uCi0gICAgICAgICAgICAgICAgb3JpZ2luYXRlZCBmcm9tIHRoZSBvbGQgWW9jdG8gUHJvamVjdCBLZXJuZWwgQXJjaGl0ZWN0dXJlCi0gICAgICAgICAgICAgICAgYW5kIFVzZSBNYW51YWwuCi0gICAgICAgICAgICAgICAgSXQgd2FzIGRlY2lkZWQgd2UgbmVlZCB0byBwdXQgaXQgaW4gdGhpcyBzZWN0aW9uIGhlcmUuCi0gICAgICAgICAgICAgICAgRGFycmVuIG5lZWRzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgd2Ugd2FudCBpdCBhbmQgd2hhdCBwYXJ0Ci0gICAgICAgICAgICAgICAgb2YgaXQgd2Ugd2FudCAoYWxsLCByZXZpc2lvbj8/PykKLSAgICAgICAgICAgIDwvcGFyYT4KLS0tPgorICAgICAgICAgcHJpbnRrKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKKyAgICAgICAgIHByaW50aygiKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuIik7CisgICAgICAgICBwcmludGsoIiogICAgICAgIEhFTExPIFlPQ1RPIEtFUk5FTCAgICAgICAgICpcbiIpOworICAgICAgICAgcHJpbnRrKCIqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4iKTsKKyAgICAgICAgIHByaW50aygiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CiAKLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIElmIGtlcm5lbCBpbWFnZXMgYXJlIGJlaW5nIGJ1aWx0IHdpdGggIi1kaXJ0eSIgb24gdGhlCi0gICAgICAgICAgICAgICAgZW5kIG9mIHRoZSB2ZXJzaW9uIHN0cmluZywgdGhpcyBzaW1wbHkgbWVhbnMgdGhhdAotICAgICAgICAgICAgICAgIG1vZGlmaWNhdGlvbnMgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkgaGF2ZSBub3QgYmVlbiBjb21taXR0ZWQuCi0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAJaWYgKHBlcl9jcHUoY3B1X2xvb3BzX3Blcl9qaWZmeSwgdGhpc19jcHUpKSB7CisgICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5CdWlsZCB0aGUgVXBkYXRlZCBLZXJuZWwgU291cmNlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRvIGJ1aWxkIHRoZSB1cGRhdGVkIGtlcm5lbCBzb3VyY2UsIHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZGV2dG9vbCBidWlsZCBsaW51eC15b2N0bworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkNyZWF0ZSB0aGUgSW1hZ2UgV2l0aCB0aGUgTmV3IEtlcm5lbDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGJ1aWxkLWltYWdlPC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgICAgICB0byBjcmVhdGUgYSBuZXcgaW1hZ2UgdGhhdCBoYXMgdGhlIG5ldyBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGltYWdlIHlvdSBvcmlnaW5hbGx5IGNyZWF0ZWQgcmVzdWx0ZWQgaW4gYSBXaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUsIHlvdSBjYW4gdXNlIGFuIGFsdGVybmF0ZSBtZXRob2QgdG8gY3JlYXRlIHRoZSBuZXcKKyAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlIHdpdGggdGhlIHVwZGF0ZWQga2VybmVsLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGFuIGV4YW1wbGUsIHNlZSB0aGUgc3RlcHMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL1RpcHNBbmRUcmlja3MvS2VybmVsRGV2ZWxvcG1lbnRXaXRoRXNkayc+VGlwc0FuZFRyaWNrcy9LZXJuZWxEZXZlbG9wbWVudFdpdGhFc2RrPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdpa2kgUGFnZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgfgorICAgICAkIGRldnRvb2wgYnVpbGQtaW1hZ2UgY29yZS1pbWFnZS1taW5pbWFsCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+VGVzdCB0aGUgTmV3IEltYWdlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEZvciB0aGlzIGV4YW1wbGUsIHlvdSBjYW4gcnVuIHRoZSBuZXcgaW1hZ2UgdXNpbmcgUUVNVQorICAgICAgICAgICAgICAgICAgICB0byB2ZXJpZnkgeW91ciBjaGFuZ2VzOgorICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkJvb3QgdGhlIGltYWdlPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQm9vdCB0aGUgbW9kaWZpZWQgaW1hZ2UgaW4gdGhlIFFFTVUgZW11bGF0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGlzIGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHJ1bnFlbXUgcWVtdXg4NgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+VmVyaWZ5IHRoZSBjaGFuZ2VzPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nIGludG8gdGhlIG1hY2hpbmUgdXNpbmcgPGZpbGVuYW1lPnJvb3Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggbm8gcGFzc3dvcmQgYW5kIHRoZW4gdXNlIHRoZSBmb2xsb3dpbmcgc2hlbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIHRvIHNjcm9sbCB0aHJvdWdoIHRoZSBjb25zb2xlJ3MgYm9vdCBvdXRwdXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIGRtZXNnIHwgbGVzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHNlZSB0aGUgcmVzdWx0cyBvZiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnByaW50azwvZmlsZW5hbWU+IHN0YXRlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBvdXRwdXQgd2hlbiB5b3Ugc2Nyb2xsIGRvd24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZSB3aW5kb3cuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlN0YWdlIGFuZCBjb21taXQgeW91ciBjaGFuZ2VzPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgIFdpdGhpbiB5b3VyIGVTREsgdGVybWluYWwsIGNoYW5nZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IHRvCisgICAgICAgICAgICAgICAgICAgIHdoZXJlIHlvdSBtb2RpZmllZCB0aGUgPGZpbGVuYW1lPmNhbGlicmF0ZS5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZSBhbmQgdXNlIHRoZXNlIEdpdCBjb21tYW5kcyB0byBzdGFnZSBhbmQgY29tbWl0IHlvdXIKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4vcG9reV9zZGsvd29ya3NwYWNlL3NvdXJjZXMvbGludXgteW9jdG8KICAgICAgJCBnaXQgc3RhdHVzCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAkIGdpdCBhZGQgaW5pdC9jYWxpYnJhdGUuYworICAgICAkIGdpdCBjb21taXQgLW0gImNhbGlicmF0ZTogQWRkIHByaW50ayBleGFtcGxlIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkV4cG9ydCB0aGUgUGF0Y2hlcyBhbmQgQ3JlYXRlIGFuIEFwcGVuZCBGaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRvIGV4cG9ydCB5b3VyIGNvbW1pdHMgYXMgcGF0Y2hlcyBhbmQgY3JlYXRlIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUsIHVzZSB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgaW4gdGhlIHRlcm1pbmFsIHVzZWQgdG8gd29yayB3aXRoIHRoZSBleHRlbnNpYmxlCisgICAgICAgICAgICAgICAgICAgIFNESy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIHVzZXMgdGhlIHByZXZpb3VzbHkgZXN0YWJsaXNoZWQgbGF5ZXIgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtbXlsYXllcjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBTdGVwIDMgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZ2V0dGluZy1yZWFkeS10by1kZXZlbG9wLXVzaW5nLWRldnRvb2wnPkdldHRpbmcgUmVhZHkgdG8gRGV2ZWxvcCBVc2luZyBkZXZ0b29sPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uIG9uIHNldHRpbmcgdXAgdGhpcyBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZGV2dG9vbCBmaW5pc2ggbGludXgteW9jdG8gfi9tZXRhLW15bGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBjb21tYW5kIGZpbmlzaGVzLCB0aGUgcGF0Y2hlcyBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGFyZSBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+fi9tZXRhLW15bGF5ZXIvcmVjaXBlcy1rZXJuZWwvbGludXg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkJ1aWxkIHRoZSBJbWFnZSBXaXRoIFlvdXIgTW9kaWZpZWQgS2VybmVsOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gbm93IGJ1aWxkIGFuIGltYWdlIHRoYXQgaW5jbHVkZXMgeW91ciBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hlcy4KKyAgICAgICAgICAgICAgICAgICAgRXhlY3V0ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgZnJvbSB5b3VyCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHRlcm1pbmFsIHNldCB1cCB0byBydW4gQml0QmFrZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4vcG9reS9idWlsZAorICAgICAkIGJpdGJha2UgY29yZS1pbWFnZS1taW5pbWFsCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InVzaW5nLXRyYWRpdGlvbmFsLWtlcm5lbC1kZXZlbG9wbWVudC10by1wYXRjaC10aGUta2VybmVsIj4KKyAgICAgICAgPHRpdGxlPlVzaW5nIFRyYWRpdGlvbmFsIEtlcm5lbCBEZXZlbG9wbWVudCB0byBQYXRjaCB0aGUgS2VybmVsPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBzdGVwcyBpbiB0aGlzIHByb2NlZHVyZSBzaG93IHlvdSBob3cgeW91IGNhbiBwYXRjaCB0aGUKKyAgICAgICAgICAgIGtlcm5lbCB1c2luZyB0cmFkaXRpb25hbCBrZXJuZWwgZGV2ZWxvcG1lbnQgKGkuZS4gbm90IHVzaW5nCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGFuZCB0aGUgZXh0ZW5zaWJsZSBTREsgYXMKKyAgICAgICAgICAgIGRlc2NyaWJlZCBpbiB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1kZXZ0b29sLXRvLXBhdGNoLXRoZS1rZXJuZWwnPlVzaW5nIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gdG8gUGF0Y2ggdGhlIEtlcm5lbDwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uKS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEJlZm9yZSBhdHRlbXB0aW5nIHRoaXMgcHJvY2VkdXJlLCBiZSBzdXJlIHlvdSBoYXZlIHBlcmZvcm1lZAorICAgICAgICAgICAgICAgIHRoZSBzdGVwcyB0byBnZXQgcmVhZHkgZm9yIHVwZGF0aW5nIHRoZSBrZXJuZWwgYXMgZGVzY3JpYmVkCisgICAgICAgICAgICAgICAgaW4gdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2dldHRpbmctcmVhZHktZm9yLXRyYWRpdGlvbmFsLWtlcm5lbC1kZXZlbG9wbWVudCc+R2V0dGluZyBSZWFkeSBmb3IgVHJhZGl0aW9uYWwgS2VybmVsIERldmVsb3BtZW50PC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBQYXRjaGluZyB0aGUga2VybmVsIGludm9sdmVzIGNoYW5naW5nIG9yIGFkZGluZyBjb25maWd1cmF0aW9ucworICAgICAgICAgICAgdG8gYW4gZXhpc3Rpbmcga2VybmVsLCBjaGFuZ2luZyBvciBhZGRpbmcgcmVjaXBlcyB0byB0aGUga2VybmVsCisgICAgICAgICAgICB0aGF0IGFyZSBuZWVkZWQgdG8gc3VwcG9ydCBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcywgb3IgZXZlbgorICAgICAgICAgICAgYWx0ZXJpbmcgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGV4YW1wbGUgaW4gdGhpcyBzZWN0aW9uIGNyZWF0ZXMgYSBzaW1wbGUgcGF0Y2ggYnkgYWRkaW5nIHNvbWUKKyAgICAgICAgICAgIFFFTVUgZW11bGF0b3IgY29uc29sZSBvdXRwdXQgYXQgYm9vdCB0aW1lIHRocm91Z2gKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wcmludGs8L2ZpbGVuYW1lPiBzdGF0ZW1lbnRzIGluIHRoZSBrZXJuZWwncworICAgICAgICAgICAgPGZpbGVuYW1lPmNhbGlicmF0ZS5jPC9maWxlbmFtZT4gc291cmNlIGNvZGUgZmlsZS4KKyAgICAgICAgICAgIEFwcGx5aW5nIHRoZSBwYXRjaCBhbmQgYm9vdGluZyB0aGUgbW9kaWZpZWQgaW1hZ2UgY2F1c2VzIHRoZSBhZGRlZAorICAgICAgICAgICAgbWVzc2FnZXMgdG8gYXBwZWFyIG9uIHRoZSBlbXVsYXRvcidzIGNvbnNvbGUuCisgICAgICAgICAgICBUaGUgZXhhbXBsZSBpcyBhIGNvbnRpbnVhdGlvbiBvZiB0aGUgc2V0dXAgcHJvY2VkdXJlIGZvdW5kIGluCisgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdnZXR0aW5nLXJlYWR5LWZvci10cmFkaXRpb25hbC1rZXJuZWwtZGV2ZWxvcG1lbnQnPkdldHRpbmcgUmVhZHkgZm9yIFRyYWRpdGlvbmFsIEtlcm5lbCBEZXZlbG9wbWVudDwvbGluaz4iCisgICAgICAgICAgICBTZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBbHRob3VnaCB0aGlzIGV4YW1wbGUgdXNlcyBHaXQgYW5kIHNoZWxsIGNvbW1hbmRzIHRvIGdlbmVyYXRlIHRoZQorICAgICAgICAgICAgcGF0Y2gsIHlvdSBjb3VsZCB1c2UgdGhlIDxmaWxlbmFtZT55b2N0by1rZXJuZWw8L2ZpbGVuYW1lPiBzY3JpcHQKKyAgICAgICAgICAgIGZvdW5kIGluIHRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIHVuZGVyIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4gdG8gYWRkIGFuZCBtYW5hZ2Uga2VybmVsCisgICAgICAgICAgICBwYXRjaGVzIGFuZCBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgU2VlIHRoZSAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjbWFuYWdpbmcta2VybmVsLXBhdGNoZXMtYW5kLWNvbmZpZy1pdGVtcy13aXRoLXlvY3RvLWtlcm5lbCc+TWFuYWdpbmcga2VybmVsIFBhdGNoZXMgYW5kIENvbmZpZyBJdGVtcyB3aXRoIHlvY3RvLWtlcm5lbDwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1ApCisgICAgICAgICAgICBEZXZlbG9wZXIncyBHdWlkZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0by1rZXJuZWw8L2ZpbGVuYW1lPiBzY3JpcHQuCisgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+RWRpdCB0aGUgU291cmNlIEZpbGVzPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUHJpb3IgdG8gdGhpcyBzdGVwLCB5b3Ugc2hvdWxkIGhhdmUgdXNlZCBHaXQgdG8gY3JlYXRlIGEKKyAgICAgICAgICAgICAgICAgICAgbG9jYWwgY29weSBvZiB0aGUgcmVwb3NpdG9yeSBmb3IgeW91ciBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgIEFzc3VtaW5nIHlvdSBjcmVhdGVkIHRoZSByZXBvc2l0b3J5IGFzIGRpcmVjdGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZ2V0dGluZy1yZWFkeS1mb3ItdHJhZGl0aW9uYWwta2VybmVsLWRldmVsb3BtZW50Jz5HZXR0aW5nIFJlYWR5IGZvciBUcmFkaXRpb25hbCBLZXJuZWwgRGV2ZWxvcG1lbnQ8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kcyB0byBlZGl0IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y2FsaWJyYXRlLmM8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkNoYW5nZSB0aGUgd29ya2luZyBkaXJlY3Rvcnk8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBsb2NhdGUgdGhlIHNvdXJjZSBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBjb3B5IG9mIHRoZSBrZXJuZWwgR2l0IHJlcG9zaXRvcnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlIHRvIHdoZXJlIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgaXMgYmVmb3JlIG1ha2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgZWRpdHMgdG8gdGhlIDxmaWxlbmFtZT5jYWxpYnJhdGUuYzwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4vbGludXgteW9jdG8tNC4xMi9pbml0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5FZGl0IHRoZSBzb3VyY2UgZmlsZTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXQgdGhlIDxmaWxlbmFtZT5jYWxpYnJhdGUuYzwvZmlsZW5hbWU+IGZpbGUgdG8gaGF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmcgY2hhbmdlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHZvaWQgY2FsaWJyYXRlX2RlbGF5KHZvaWQpCisgICAgIHsKKyAgICAgICAgIHVuc2lnbmVkIGxvbmcgbHBqOworICAgICAgICAgc3RhdGljIGJvb2wgcHJpbnRlZDsKKyAgICAgICAgIGludCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworICAgICAgICAgcHJpbnRrKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKKyAgICAgICAgIHByaW50aygiKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuIik7CisgICAgICAgICBwcmludGsoIiogICAgICAgIEhFTExPIFlPQ1RPIEtFUk5FTCAgICAgICAgICpcbiIpOworICAgICAgICAgcHJpbnRrKCIqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4iKTsKKyAgICAgICAgIHByaW50aygiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CisKKyAgICAgCWlmIChwZXJfY3B1KGNwdV9sb29wc19wZXJfamlmZnksIHRoaXNfY3B1KSkgeworICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+U3RhZ2UgYW5kIENvbW1pdCBZb3VyIENoYW5nZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHN0YW5kYXJkIEdpdCBjb21tYW5kcyB0byBzdGFnZSBhbmQgY29tbWl0IHRoZSBjaGFuZ2VzCisgICAgICAgICAgICAgICAgICAgIHlvdSBqdXN0IG1hZGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgYWRkIGNhbGlicmF0ZS5jCisgICAgICQgZ2l0IGNvbW1pdCAtbSAiY2FsaWJyYXRlLmMgLSBBZGRlZCBzb21lIHByaW50ayBzdGF0ZW1lbnRzIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgc3RhZ2UgYW5kIGNvbW1pdCB5b3VyIGNoYW5nZXMsIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgQnVpbGQgU3lzdGVtIHdpbGwgbm90IHBpY2sgdXAgdGhlIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlVwZGF0ZSBZb3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gRmlsZQorICAgICAgICAgICAgICAgICAgICB0byBQb2ludCB0byBZb3VyIFNvdXJjZSBGaWxlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbiBhZGRpdGlvbiB0byB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5aW5nIHRvIHVzZSAia2VybmVsLW1vZHVsZXMiIGFuZCB0aGUgInFlbXV4ODYiCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUsIGl0IG11c3QgYWxzbyBwb2ludCB0byB0aGUgdXBkYXRlZCBrZXJuZWwgc291cmNlCisgICAgICAgICAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBBZGQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ1JFVic+PGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50cyBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmcgdG8geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2Qgfi9wb2t5L2J1aWxkL2NvbmYKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBBZGQgdGhlIGZvbGxvd2luZyB0byB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJX3BuLWxpbnV4LXlvY3RvID0gImdpdDovLy88cmVwbGFjZWFibGU+cGF0aC10bzwvcmVwbGFjZWFibGU+L2xpbnV4LXlvY3RvLTQuMTI7cHJvdG9jb2w9ZmlsZTtuYW1lPW1hY2hpbmU7YnJhbmNoPXN0YW5kYXJkL2Jhc2U7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaXQ6Ly8vPHJlcGxhY2VhYmxlPnBhdGgtdG88L3JlcGxhY2VhYmxlPi95b2N0by1rZXJuZWwtY2FjaGU7cHJvdG9jb2w9ZmlsZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tNC4xMjtkZXN0c3VmZml4PSR7S01FVEF9IgorICAgICBTUkNSRVZfbWV0YV9xZW11eDg2ID0gIiR7QVVUT1JFVn0iCisgICAgIFNSQ1JFVl9tYWNoaW5lX3FlbXV4ODYgPSAiJHtBVVRPUkVWfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gcmVwbGFjZQorICAgICAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPnBhdGgtdG88L3JlcGxhY2VhYmxlPiB3aXRoIHRoZSBwYXRobmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgdG8geW91ciBsb2NhbCBHaXQgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgQWxzbywgeW91IG11c3QgYmUgc3VyZSB0byBzcGVjaWZ5IHRoZSBjb3JyZWN0IGJyYW5jaAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG1hY2hpbmUgdHlwZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgdGhpcyBleGFtcGxlLCB0aGUgYnJhbmNoIGlzCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3RhbmRhcmQvYmFzZTwvZmlsZW5hbWU+IGFuZCB0aGUgbWFjaGluZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgInFlbXV4ODYiLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkJ1aWxkIHRoZSBJbWFnZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBXaXRoIHRoZSBzb3VyY2UgbW9kaWZpZWQsIHlvdXIgY2hhbmdlcyBzdGFnZWQgYW5kCisgICAgICAgICAgICAgICAgICAgIGNvbW1pdHRlZCwgYW5kIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgcG9pbnRpbmcgdG8gdGhlIGtlcm5lbCBmaWxlcywgeW91IGNhbiBub3cgdXNlIEJpdEJha2UgdG8KKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgdGhlIGltYWdlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2Qgfi9wb2t5L2J1aWxkCisgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLW1pbmltYWwKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5Cb290IHRoZSBpbWFnZTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBCb290IHRoZSBtb2RpZmllZCBpbWFnZSBpbiB0aGUgUUVNVSBlbXVsYXRvcgorICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGlzIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gcHJvbXB0ZWQgdG8gbG9naW4gdG8gdGhlIFFFTVUgY29uc29sZSwgdXNlICJyb290IgorICAgICAgICAgICAgICAgICAgICB3aXRoIG5vIHBhc3N3b3JkOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2Qgfi9wb2t5L2J1aWxkCisgICAgICQgcnVucWVtdSBxZW11eDg2CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+TG9vayBmb3IgWW91ciBDaGFuZ2VzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEFzIFFFTVUgYm9vdGVkLCB5b3UgbWlnaHQgaGF2ZSBzZWVuIHlvdXIgY2hhbmdlcyByYXBpZGx5CisgICAgICAgICAgICAgICAgICAgIHNjcm9sbCBieS4KKyAgICAgICAgICAgICAgICAgICAgSWYgbm90LCB1c2UgdGhlc2UgY29tbWFuZHMgdG8gc2VlIHlvdXIgY2hhbmdlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIGRtZXNnIHwgbGVzcworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgc2VlIHRoZSByZXN1bHRzIG9mIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnByaW50azwvZmlsZW5hbWU+IHN0YXRlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgYXMgcGFydCBvZiB0aGUgb3V0cHV0IHdoZW4geW91IHNjcm9sbCBkb3duIHRoZQorICAgICAgICAgICAgICAgICAgICBjb25zb2xlIHdpbmRvdy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+R2VuZXJhdGUgdGhlIFBhdGNoIEZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB5b3UgYXJlIHN1cmUgdGhhdCB5b3VyIHBhdGNoIHdvcmtzIGNvcnJlY3RseSwgeW91CisgICAgICAgICAgICAgICAgICAgIGNhbiBnZW5lcmF0ZSBhIDxmaWxlbmFtZT4qLnBhdGNoPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAga2VybmVsIHNvdXJjZSByZXBvc2l0b3J5OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2Qgfi9saW51eC15b2N0by00LjEyL2luaXQKKyAgICAgJCBnaXQgZm9ybWF0LXBhdGNoIC0xCisgICAgIDAwMDEtY2FsaWJyYXRlLmMtQWRkZWQtc29tZS1wcmludGstc3RhdGVtZW50cy5wYXRjaAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPk1vdmUgdGhlIFBhdGNoIEZpbGUgdG8gWW91ciBMYXllcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbiBvcmRlciBmb3Igc3Vic2VxdWVudCBidWlsZHMgdG8gcGljayB1cCBwYXRjaGVzLCB5b3UKKyAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBtb3ZlIHRoZSBwYXRjaCBmaWxlIHlvdSBjcmVhdGVkIGluIHRoZSBwcmV2aW91cworICAgICAgICAgICAgICAgICAgICBzdGVwIHRvIHlvdXIgbGF5ZXIgPGZpbGVuYW1lPm1ldGEtbXlsYXllcjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBGb3IgdGhpcyBleGFtcGxlLCB0aGUgbGF5ZXIgY3JlYXRlZCBlYXJsaWVyIGlzIGxvY2F0ZWQKKyAgICAgICAgICAgICAgICAgICAgaW4geW91ciBob21lIGRpcmVjdG9yeSBhcyA8ZmlsZW5hbWU+bWV0YS1teWxheWVyPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlIGxheWVyIHdhcyBjcmVhdGVkIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG8tY3JlYXRlPC9maWxlbmFtZT4gc2NyaXB0LCBubyBhZGRpdGlvbmFsCisgICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoeSB3YXMgY3JlYXRlZCB0byBzdXBwb3J0IHBhdGNoZXMuCisgICAgICAgICAgICAgICAgICAgIEJlZm9yZSBtb3ZpbmcgdGhlIHBhdGNoIGZpbGUsIHlvdSBuZWVkIHRvIGFkZCBhZGRpdGlvbmFsCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSB0byB5b3VyIGxheWVyIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L21ldGEtbXlsYXllcgorICAgICAkIG1rZGlyIHJlY2lwZXMta2VybmVsCisgICAgICQgbWtkaXIgcmVjaXBlcy1rZXJuZWwvbGludXgKKyAgICAgJCBta2RpciByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0bworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgY3JlYXRlZCB0aGlzIGhpZXJhcmNoeSBpbiB5b3VyIGxheWVyLCB5b3UgY2FuCisgICAgICAgICAgICAgICAgICAgIG1vdmUgdGhlIHBhdGNoIGZpbGUgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgbXYgfi9saW51eC15b2N0by00LjEyL2luaXQvMDAwMS1jYWxpYnJhdGUuYy1BZGRlZC1zb21lLXByaW50ay1zdGF0ZW1lbnRzLnBhdGNoIH4vbWV0YS1teWxheWVyL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q3JlYXRlIHRoZSBBcHBlbmQgRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBGaW5hbGx5LCB5b3UgbmVlZCB0byBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0b180LjEyLmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0IHN0YXRlbWVudHMgdGhhdCBhbGxvdyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSB0byBmaW5kIHRoZSBwYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGFwcGVuZCBmaWxlIG5lZWRzIHRvIGJlIGluIHlvdXIgbGF5ZXIncworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy1rZXJuZWwvbGludXg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgYW5kIGl0IG11c3QgYmUgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvXzQuMTIuYmJhcHBlbmQ8L2ZpbGVuYW1lPiBhbmQgaGF2ZQorICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nIGNvbnRlbnRzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKKworICAgICBTUkNfVVJJX2FwcGVuZCA9ICIgZmlsZTovLzAwMDEtY2FsaWJyYXRlLmMtQWRkZWQtc29tZS1wcmludGstc3RhdGVtZW50cy5wYXRjaCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDt2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDt2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudHMgZW5hYmxlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGZpbmQKKyAgICAgICAgICAgICAgICAgICAgdGhlIHBhdGNoIGZpbGUuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGFwcGVuZCBmaWxlcyBhbmQgcGF0Y2hlcywKKyAgICAgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3JlYXRpbmctdGhlLWFwcGVuZC1maWxlJz5DcmVhdGluZyB0aGUgQXBwZW5kIEZpbGU8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2FwcGx5aW5nLXBhdGNoZXMnPkFwcGx5aW5nIFBhdGNoZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5nLWJiYXBwZW5kLWZpbGVzJz5Vc2luZyAuYmJhcHBlbmQgRmlsZXMgaW4gWW91ciBMYXllciI8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gYnVpbGQgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBhZ2FpbiBhbmQgc2VlIHRoZSBlZmZlY3RzIG9mIHlvdXIgcGF0Y2gsIHlvdSBjYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVzc2VudGlhbGx5IGVsaW1pbmF0ZSB0aGUgdGVtcG9yYXJ5IHNvdXJjZSBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWQgaW4gPGZpbGVuYW1lPnBva3kvYnVpbGQvdG1wL3dvcmsvLi4uPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCByZXNpZHVhbCBlZmZlY3RzIG9mIHRoZSBidWlsZCBieSBlbnRlcmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBzZXF1ZW5jZSBvZiBjb21tYW5kczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L3Bva3kvYnVpbGQKKyAgICAgJCBiaXRiYWtlIC1jIGNsZWFuYWxsIHlvY3RvLWxpbnV4CisgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLW1pbmltYWwgLWMgY2xlYW5hbGwKKyAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAkIHJ1bnFlbXUgcWVtdXg4NgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdjb25maWd1cmluZy10aGUta2VybmVsJz4KKyAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIHRoZSBLZXJuZWw8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ29uZmlndXJpbmcgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIGNvbnNpc3RzIG9mIG1ha2luZyBzdXJlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGhhcyBhbGwgdGhlIHJpZ2h0IGluZm9ybWF0aW9uCisgICAgICAgICAgICBpbiBpdCBmb3IgdGhlIGltYWdlIHlvdSBhcmUgYnVpbGRpbmcuCisgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiB0b29sIGFuZAorICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgdG8gbWFrZSBzdXJlIHlvdXIKKyAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSBpcyBqdXN0IGhvdyB5b3UgbmVlZCBpdC4KKyAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBzYXZlIGtub3duIGNvbmZpZ3VyYXRpb25zIGluIGEKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlIHRoYXQgdGhlIGJ1aWxkIHN5c3RlbSBjYW4gdXNlCisgICAgICAgICAgICBmb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHRvIHVzZSA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgY3JlYXRlIGFuZCB1c2UgY29uZmlndXJhdGlvbiBmcmFnbWVudHMsIGFuZCBob3cgdG8gaW50ZXJhY3RpdmVseQorICAgICAgICAgICAgbW9kaWZ5IHlvdXIgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIHRvIGNyZWF0ZSB0aGUKKyAgICAgICAgICAgIGxlYW5lc3Qga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSBwb3NzaWJsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24ga2VybmVsIGNvbmZpZ3VyYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjaGFuZ2luZy10aGUtY29uZmlndXJhdGlvbic+Q2hhbmdpbmcgdGhlIENvbmZpZ3VyYXRpb248L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1tZW51Y29uZmlnJz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyZuYnNwOyZuYnNwOzxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZWFzaWVzdCB3YXkgdG8gZGVmaW5lIGtlcm5lbCBjb25maWd1cmF0aW9ucyBpcyB0byBzZXQKKyAgICAgICAgICAgICAgICB0aGVtIHRocm91Z2ggdGhlIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4gdG9vbC4KKyAgICAgICAgICAgICAgICBUaGlzIHRvb2wgcHJvdmlkZXMgYW4gaW50ZXJhY3RpdmUgbWV0aG9kIHdpdGggd2hpY2gKKyAgICAgICAgICAgICAgICB0byBzZXQga2VybmVsIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgICAgICAgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4sIHNlZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWVudWNvbmZpZyc+PC91bGluaz4uCiAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBhYm92ZSBHaXQgY29tbWFuZCB0byByZXBvcnQgbW9kaWZpZWQsCi0gICAgICAgICAgICAgICAgcmVtb3ZlZCwgb3IgYWRkZWQgZmlsZXMuCi0gICAgICAgICAgICAgICAgWW91IHNob3VsZCBjb21taXQgdGhvc2UgY2hhbmdlcyB0byB0aGUgdHJlZSByZWdhcmRsZXNzIG9mCi0gICAgICAgICAgICAgICAgd2hldGhlciB0aGV5IHdpbGwgYmUgc2F2ZWQsIGV4cG9ydGVkLCBvciB1c2VkLgotICAgICAgICAgICAgICAgIE9uY2UgeW91IGNvbW1pdCB0aGUgY2hhbmdlcywgeW91IG5lZWQgdG8gcmVidWlsZCB0aGUga2VybmVsLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUbyBmb3JjZSBhIHBpY2t1cCBhbmQgY29tbWl0IG9mIGFsbCBzdWNoIHBlbmRpbmcgY2hhbmdlcywKLSAgICAgICAgICAgICAgICBlbnRlciB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIFRvIHVzZSB0aGUgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiB0b29sIGluIHRoZSBZb2N0bworICAgICAgICAgICAgICAgIFByb2plY3QgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQsIHlvdSBtdXN0IGxhdW5jaCBpdCB1c2luZworICAgICAgICAgICAgICAgIEJpdEJha2UuCisgICAgICAgICAgICAgICAgVGh1cywgdGhlIGVudmlyb25tZW50IG11c3QgYmUgc2V0IHVwIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHNjcmlwdCBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIFlvdSBtdXN0IGFsc28gYmUgc3VyZSBvZiB0aGUgc3RhdGUgb2YgeW91ciBidWlsZCdzCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBpbiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kcyBpbml0aWFsaXplIHRoZSBCaXRCYWtlIGVudmlyb25tZW50LAorICAgICAgICAgICAgICAgIHJ1biB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3Mta2VybmVsX2NvbmZpZ21lJz48ZmlsZW5hbWU+ZG9fa2VybmVsX2NvbmZpZ21lPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHRhc2ssIGFuZCBsYXVuY2ggPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGVzZSBjb21tYW5kcyBhc3N1bWUgdGhlIFNvdXJjZSBEaXJlY3RvcnkncyB0b3AtbGV2ZWwgZm9sZGVyCisgICAgICAgICAgICAgICAgaXMgPGZpbGVuYW1lPn4vcG9reTwvZmlsZW5hbWU+OgogICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBnaXQgYWRkIC4KLSAgICAgJCBnaXQgY29tbWl0IC1zIC1hIC1tICJnZXR0aW5nIHJpZCBvZiAtZGlydHkiCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBOZXh0LCByZWJ1aWxkIHRoZSBrZXJuZWwuCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nZ2VuZXJhdGluZy1jb25maWd1cmF0aW9uLWZpbGVzJz4KLSAgICAgICAgICAgIDx0aXRsZT5HZW5lcmF0aW5nIENvbmZpZ3VyYXRpb24gRmlsZXM8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBZb3UgY2FuIG1hbmlwdWxhdGUgdGhlIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZQotICAgICAgICAgICAgICAgIHVzZWQgdG8gYnVpbGQgYSBsaW51eC15b2N0byByZWNpcGUgd2l0aCB0aGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IGNvbW1hbmQgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgcG9reQorICAgICAkIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudgorICAgICAkIGJpdGJha2UgbGludXgteW9jdG8gLWMga2VybmVsX2NvbmZpZ21lIC1mCiAgICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBtZW51Y29uZmlnCiAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBzdGFydHMgdGhlIExpbnV4IGtlcm5lbCBjb25maWd1cmF0aW9uIHRvb2wsCi0gICAgICAgICAgICAgICAgd2hpY2ggYWxsb3dzIHlvdSB0byBwcmVwYXJlIGEgbmV3Ci0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGZvciB0aGUgYnVpbGQuCi0gICAgICAgICAgICAgICAgV2hlbiB5b3UgZXhpdCB0aGUgdG9vbCwgYmUgc3VyZSB0byBzYXZlIHlvdXIgY2hhbmdlcwotICAgICAgICAgICAgICAgIGF0IHRoZSBwcm9tcHQuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSByZXN1bHRpbmcgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGlzCi0gICAgICAgICAgICAgICAgbG9jYXRlZCBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5LAotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUInPjxmaWxlbmFtZT5CPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgd2hpY2ggZXhwYW5kcyB0bwotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT48ZmlsZW5hbWU+L2xpbnV4LTwvZmlsZW5hbWU+PGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9BUkNIJz48ZmlsZW5hbWU+UEFDS0FHRV9BUkNIPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59LSR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTElOVVhfS0VSTkVMX1RZUEUnPjxmaWxlbmFtZT5MSU5VWF9LRVJORUxfVFlQRTwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fS1idWlsZDwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBlbnRpcmUgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGFzIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlIGFzIGRlc2NyaWJlZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY2hhbmdpbmctdGhlLWNvbmZpZ3VyYXRpb24nPkNoYW5naW5nIHRoZSBDb25maWd1cmF0aW9uPC9saW5rPiIgc2VjdGlvbi4KLSAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLAotICAgICAgICAgICAgICAgIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdXNpbmctbWVudWNvbmZpZyc+VXNpbmcgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPjwvdWxpbms+IgotICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgIE9uY2UgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiBjb21lcyB1cCwgaXRzIHN0YW5kYXJkCisgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGFsbG93cyB5b3UgdG8gaW50ZXJhY3RpdmVseSBleGFtaW5lIGFuZCBjb25maWd1cmUKKyAgICAgICAgICAgICAgICBhbGwgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCisgICAgICAgICAgICAgICAgQWZ0ZXIgbWFraW5nIHlvdXIgY2hhbmdlcywgc2ltcGx5IGV4aXQgdGhlIHRvb2wgYW5kIHNhdmUgeW91cgorICAgICAgICAgICAgICAgIGNoYW5nZXMgdG8gY3JlYXRlIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZS4KICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkZXRlcm1pbmUgd2hhdCBhIHZhcmlhYmxlIGV4cGFuZHMgdG8gYnkgbG9va2luZwotICAgICAgICAgICAgICAgICAgICBhdCB0aGUgb3V0cHV0IG9mIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZSAtZTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBiaXRiYWtlIC1lIHZpcnR1YWwva2VybmVsCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgU2VhcmNoIHRoZSBvdXRwdXQgZm9yIHRoZSB2YXJpYWJsZSBpbiB3aGljaCB5b3UgYXJlCi0gICAgICAgICAgICAgICAgICAgIGludGVyZXN0ZWQgdG8gc2VlIGV4YWN0bHkgaG93IGl0IGlzIGV4cGFuZGVkIGFuZCB1c2VkLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgZW50aXJlIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICBhcyB0aGUgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZXMsCisgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NoYW5naW5nLXRoZS1jb25maWd1cmF0aW9uJz5DaGFuZ2luZyB0aGUgQ29uZmlndXJhdGlvbjwvbGluaz4iLAorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctYW4taW4tdHJlZS1kZWZjb25maWctZmlsZSc+VXNpbmcgYW4gSW4tVHJlZSA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gRmlsZTwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3JlYXRpbmctYS1kZWZjb25maWctZmlsZSc+Q3JlYXRpbmcgYSA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gRmlsZTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zLgogICAgICAgICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQSBiZXR0ZXIgbWV0aG9kIGlzIHRvIGNyZWF0ZSBhIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgQ29uc2lkZXIgYW4gZXhhbXBsZSB0aGF0IGNvbmZpZ3VyZXMgdGhlICJDT05GSUdfU01QIiBzZXR0aW5nCisgICAgICAgICAgICAgICAgZm9yIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tNC4xMjwvZmlsZW5hbWU+IGtlcm5lbC4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcmVjb2duaXplcyB0aGlzIGtlcm5lbCBhcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG88L2ZpbGVuYW1lPiB0aHJvdWdoIE1ldGFkYXRhIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QUkVGRVJSRURfVkVSU0lPTic+PGZpbGVuYW1lPlBSRUZFUlJFRF9WRVJTSU9OPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT5fbGludXgteW9jdG8gPz0gIjEyLjQlIjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgT25jZSA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IGxhdW5jaGVzLCB1c2UgdGhlCisgICAgICAgICAgICAgICAgaW50ZXJmYWNlIHRvIG5hdmlnYXRlIHRocm91Z2ggdGhlIHNlbGVjdGlvbnMgdG8gZmluZCB0aGUKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHNldHRpbmdzIGluIHdoaWNoIHlvdSBhcmUgaW50ZXJlc3RlZC4KKyAgICAgICAgICAgICAgICBGb3IgdGhpcyBleGFtcGxlLCB5b3UgZGVzZWxlY3QgIkNPTkZJR19TTVAiIGJ5IGNsZWFyaW5nIHRoZQorICAgICAgICAgICAgICAgICJTeW1tZXRyaWMgTXVsdGktUHJvY2Vzc2luZyBTdXBwb3J0IiBvcHRpb24uCisgICAgICAgICAgICAgICAgVXNpbmcgdGhlIGludGVyZmFjZSwgeW91IGNhbiBmaW5kIHRoZSBvcHRpb24gdW5kZXIKKyAgICAgICAgICAgICAgICAiUHJvY2Vzc29yIFR5cGUgYW5kIEZlYXR1cmVzIi4KKyAgICAgICAgICAgICAgICBUbyBkZXNlbGVjdCAiQ09ORklHX1NNUCIsIHVzZSB0aGUgYXJyb3cga2V5cyB0bworICAgICAgICAgICAgICAgIGhpZ2hsaWdodCAiU3ltbWV0cmljIE11bHRpLVByb2Nlc3NpbmcgU3VwcG9ydCIgYW5kIGVudGVyICJOIgorICAgICAgICAgICAgICAgIHRvIGNsZWFyIHRoZSBhc3Rlcmlzay4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSBhcmUgZmluaXNoZWQsIGV4aXQgb3V0IGFuZCBzYXZlIHRoZSBjaGFuZ2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNhdmluZyB0aGUgc2VsZWN0aW9ucyB1cGRhdGVzIHRoZSA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIFRoaXMgaXMgdGhlIGZpbGUgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRvCisgICAgICAgICAgICAgICAgY29uZmlndXJlIHRoZSBrZXJuZWwgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgYW5kIGV4YW1pbmUgdGhpcyBmaWxlIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL3dvcmsvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhlIGFjdHVhbCA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGlzIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgYXJlYSB3aGVyZSB0aGUgc3BlY2lmaWMga2VybmVsIGlzIGJ1aWx0LgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3Ugd2VyZSBidWlsZGluZyBhIExpbnV4IFlvY3RvIGtlcm5lbCBiYXNlZAorICAgICAgICAgICAgICAgIG9uIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tNC4xMjwvZmlsZW5hbWU+IGtlcm5lbCBhbmQgeW91CisgICAgICAgICAgICAgICAgd2VyZSBidWlsZGluZyBhIFFFTVUgaW1hZ2UgdGFyZ2V0ZWQgZm9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPng4NjwvZmlsZW5hbWU+IGFyY2hpdGVjdHVyZSwgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIHdvdWxkIGJlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcG9reS9idWlsZC90bXAvd29yay9xZW11eDg2LXBva3ktbGludXgvbGludXgteW9jdG8vNC4xMi4xMitnaXRBVVRPSU5DK2VkYTRkMTguLi4KKyAgICAgLi4uOTY3LXIwL2xpbnV4LXFlbXV4ODYtc3RhbmRhcmQtYnVpbGQvLmNvbmZpZworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIGV4YW1wbGUgZGlyZWN0b3J5IGlzIGFydGlmaWNpYWxseSBzcGxpdCBhbmQKKyAgICAgICAgICAgICAgICAgICAgbWFueSBvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGUgYWN0dWFsIGZpbGVuYW1lIGFyZSBvbWl0dGVkCisgICAgICAgICAgICAgICAgICAgIGluIG9yZGVyIHRvIG1ha2UgaXQgbW9yZSByZWFkYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgQWxzbywgZGVwZW5kaW5nIG9uIHRoZSBrZXJuZWwgeW91IGFyZSB1c2luZywgdGhlIGV4YWN0CisgICAgICAgICAgICAgICAgICAgIHBhdGhuYW1lIG1pZ2h0IGRpZmZlci4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdpdGhpbiB0aGUgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLCB5b3UgY2FuIHNlZSB0aGUKKyAgICAgICAgICAgICAgICBrZXJuZWwgc2V0dGluZ3MuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgZW50cnkgc2hvd3MgdGhhdCBzeW1tZXRyaWMKKyAgICAgICAgICAgICAgICBtdWx0aS1wcm9jZXNzb3Igc3VwcG9ydCBpcyBub3Qgc2V0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgZ29vZCBtZXRob2QgdG8gaXNvbGF0ZSBjaGFuZ2VkIGNvbmZpZ3VyYXRpb25zIGlzIHRvIHVzZSBhCisgICAgICAgICAgICAgICAgY29tYmluYXRpb24gb2YgdGhlIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4gdG9vbCBhbmQKKyAgICAgICAgICAgICAgICBzaW1wbGUgc2hlbGwgY29tbWFuZHMuCisgICAgICAgICAgICAgICAgQmVmb3JlIGNoYW5naW5nIGNvbmZpZ3VyYXRpb25zIHdpdGgKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+LCBjb3B5IHRoZSBleGlzdGluZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gYW5kIHJlbmFtZSBpdCB0byBzb21ldGhpbmcgZWxzZSwKKyAgICAgICAgICAgICAgICB1c2UgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiB0byBtYWtlIGFzIG1hbnkgY2hhbmdlcyBhcworICAgICAgICAgICAgICAgIHlvdSB3YW50IGFuZCBzYXZlIHRoZW0sIHRoZW4gY29tcGFyZSB0aGUgcmVuYW1lZCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgZmlsZSBhZ2FpbnN0IHRoZSBuZXdseSBjcmVhdGVkIGZpbGUuCisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIHJlc3VsdGluZyBkaWZmZXJlbmNlcyBhcyB5b3VyIGJhc2UgdG8gY3JlYXRlCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgdG8gcGVybWFuZW50bHkgc2F2ZSBpbiB5b3VyIGtlcm5lbAorICAgICAgICAgICAgICAgIGxheWVyLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIG1ha2UgYSBjb3B5IG9mIHRoZSA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGUgYW5kIGRvIG5vdCBqdXN0IHJlbmFtZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBuZWVkcyBhbiBleGlzdGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgZnJvbSB3aGljaCB0byB3b3JrLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjcmVhdGluZy1hLWRlZmNvbmZpZy1maWxlJz4KKyAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyBhJm5ic3A7Jm5ic3A7PGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IEZpbGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlIGlzIHNpbXBseSBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiByZW5hbWVkIHRvICJkZWZjb25maWciLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIGEgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICB0byByZXRhaW4gYSBrbm93biBzZXQgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb25zIGZyb20gd2hpY2ggdGhlCisgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjYW4gZHJhdyB0byBjcmVhdGUgdGhlIGZpbmFsCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBPdXQtb2YtdGhlLWJveCwgdGhlIFlvY3RvIFByb2plY3QgbmV2ZXIgc2hpcHMgYQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjcmVhdGVzIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgdXNlZCB0byBjb25maWd1cmUgdGhlCisgICAgICAgICAgICAgICAgICAgIGtlcm5lbC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGNyZWF0ZSBhIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiwgc3RhcnQgd2l0aCBhCisgICAgICAgICAgICAgICAgY29tcGxldGUsIHdvcmtpbmcgTGludXgga2VybmVsIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgIENvcHkgdGhhdCBmaWxlIHRvIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBpbiB5b3VyIGxheWVyJ3MKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy1rZXJuZWwvbGludXg8L2ZpbGVuYW1lPiBkaXJlY3RvcnksIGFuZCByZW5hbWUKKyAgICAgICAgICAgICAgICB0aGUgY29waWVkIGZpbGUgdG8gImRlZmNvbmZpZyIgKGUuZy4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+fi9tZXRhLW15bGF5ZXIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8vZGVmY29uZmlnPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIFRoZW4sIGFkZCB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIHRoZSBsaW51eC15b2N0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGluIHlvdXIgbGF5ZXI6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly9kZWZjb25maWciCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB0ZWxscyB0aGUgYnVpbGQgc3lzdGVtIGhvdyB0byBzZWFyY2ggZm9yIHRoZSBmaWxlLCB3aGlsZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGV4dGVuZHMgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSAoc2VhcmNoIGRpcmVjdG9yaWVzKSB0byBpbmNsdWRlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1BOfTwvZmlsZW5hbWU+IGRpcmVjdG9yeSB5b3UgY3JlYXRlZCB0byBob2xkIHRoZQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBhcHBsaWVzIHRoZSBjb25maWd1cmF0aW9ucyBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSBiZWZvcmUgYXBwbHlpbmcgYW55CisgICAgICAgICAgICAgICAgICAgIHN1YnNlcXVlbnQgY29uZmlndXJhdGlvbiBmcmFnbWVudHMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmaW5hbCBrZXJuZWwgY29uZmlndXJhdGlvbiBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucyBpbiB0aGUgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGUgYW5kIGFueSBjb25maWd1cmF0aW9uIGZyYWdtZW50cyB5b3UgcHJvdmlkZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gcmVhbGl6ZSB0aGF0IGlmIHlvdSBoYXZlIGFueSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50cywgdGhlIGJ1aWxkIHN5c3RlbSBhcHBsaWVzIHRoZXNlIG9uIHRvcCBvZiBhbmQKKyAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgYXBwbHlpbmcgdGhlIGV4aXN0aW5nIGRlZmNvbmZpZyBmaWxlIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUga2VybmVsLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbms9J2NoYW5naW5nLXRoZS1jb25maWd1cmF0aW9uJz5DaGFuZ2luZyB0aGUgQ29uZmlndXJhdGlvbjwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjcmVhdGluZy1jb25maWctZnJhZ21lbnRzJz4KKyAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyBDb25maWd1cmF0aW9uIEZyYWdtZW50czwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIGFyZSBzaW1wbHkga2VybmVsIG9wdGlvbnMgdGhhdAorICAgICAgICAgICAgICAgIGFwcGVhciBpbiBhIGZpbGUgcGxhY2VkIHdoZXJlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgY2FuIGZpbmQgYW5kIGFwcGx5IHRoZW0uCisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBhcHBsaWVzIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIGFmdGVyCisgICAgICAgICAgICAgICAgYXBwbHlpbmcgY29uZmlndXJhdGlvbnMgZnJvbSBhIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgVGh1cywgdGhlIGZpbmFsIGtlcm5lbCBjb25maWd1cmF0aW9uIGlzIGEgY29tYmluYXRpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMgaW4gdGhlIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUgYW5kIHRoZW4gYW55IGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIHlvdSBwcm92aWRlLgorICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gYXBwbGllcyBmcmFnbWVudHMgb24gdG9wIG9mIGFuZAorICAgICAgICAgICAgICAgIGFmdGVyIGFwcGx5aW5nIHRoZSBleGlzdGluZyBkZWZjb25maWcgZmlsZSBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU3ludGFjdGljYWxseSwgdGhlIGNvbmZpZ3VyYXRpb24gc3RhdGVtZW50IGlzIGlkZW50aWNhbCB0bworICAgICAgICAgICAgICAgIHdoYXQgd291bGQgYXBwZWFyIGluIHRoZSA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgICAgICAgICAgd2hpY2ggaXMgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSBpcyBsb2NhdGVkLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIGV4YW1wbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1tZW51Y29uZmlnJz5Vc2luZyA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEl0IGlzIHNpbXBsZSB0byBjcmVhdGUgYSBjb25maWd1cmF0aW9uIGZyYWdtZW50LgorICAgICAgICAgICAgICAgIE9uZSBtZXRob2QgaXMgdG8gdXNlIHNoZWxsIGNvbW1hbmRzLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpc3N1aW5nIHRoZSBmb2xsb3dpbmcgZnJvbSB0aGUgc2hlbGwgY3JlYXRlcyBhCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlIG5hbWVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm15X3NtcC5jZmc8L2ZpbGVuYW1lPiB0aGF0IGVuYWJsZXMgbXVsdGktcHJvY2Vzc29yCisgICAgICAgICAgICAgICAgc3VwcG9ydCB3aXRoaW4gdGhlIGtlcm5lbDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZWNobyAiQ09ORklHX1NNUD15IiA+PiBteV9zbXAuY2ZnCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBBbGwgY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlcyBtdXN0IHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jZmc8L2ZpbGVuYW1lPiBleHRlbnNpb24gaW4gb3JkZXIgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHJlY29nbml6ZSB0aGVtIGFzIGEKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmcmFnbWVudC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFub3RoZXIgbWV0aG9kIGlzIHRvIGNyZWF0ZSBhIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQgdXNpbmcgdGhlCiAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZXMgYmV0d2VlbiB0d28gY29uZmlndXJhdGlvbiBmaWxlczogb25lIHByZXZpb3VzbHkKICAgICAgICAgICAgICAgICBjcmVhdGVkIGFuZCBzYXZlZCwgYW5kIG9uZSBmcmVzaGx5IGNyZWF0ZWQgdXNpbmcgdGhlCiAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiB0b29sLgpAQCAtNTY3LDQwICsxNzMyLDQ3IEBACiAgICAgICAgICAgICAgICAgVG8gY3JlYXRlIGEgY29uZmlndXJhdGlvbiBmcmFnbWVudCB1c2luZyB0aGlzIG1ldGhvZCwgZm9sbG93CiAgICAgICAgICAgICAgICAgdGhlc2Ugc3RlcHM6CiAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q29tcGxldGUgYSBidWlsZCBhdCBsZWFzdCB0aHJvdWdoIHRoZSBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkNvbXBsZXRlIGEgQnVpbGQgVGhyb3VnaCBLZXJuZWwgQ29uZmlndXJhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGxldGUgYSBidWlsZCBhdCBsZWFzdCB0aHJvdWdoIHRoZSBrZXJuZWwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gdGFzayBhcyBmb2xsb3dzOgogICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAkIGJpdGJha2UgbGludXgteW9jdG8gLWMga2VybmVsX2NvbmZpZ21lIC1mCiAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHN0ZXAgZW5zdXJlcyB0aGF0IHlvdSB3aWxsIGJlIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc3RlcCBlbnN1cmVzIHRoYXQgeW91IGNyZWF0ZSBhCiAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgZnJvbSBhIGtub3duIHN0YXRlLgogICAgICAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSBzaXR1YXRpb25zIGV4aXN0IHdoZXJlIHlvdXIgYnVpbGQgc3RhdGUgbWlnaHQKLSAgICAgICAgICAgICAgICAgICAgICAgIGJlY29tZSB1bmtub3duLCBpdCBpcyBiZXN0IHRvIHJ1biB0aGUgcHJldmlvdXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgcHJpb3IgdG8gc3RhcnRpbmcgdXAKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBiZWNvbWUgdW5rbm93biwgaXQgaXMgYmVzdCB0byBydW4gdGhpcyB0YXNrIHByaW9yCisgICAgICAgICAgICAgICAgICAgICAgICB0byBzdGFydGluZyA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+LgogICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SdW4gdGhlIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5MYXVuY2ggPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgUnVuIHRoZSA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IGNvbW1hbmQ6CiAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBtZW51Y29uZmlnCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SdW4gdGhlIDxmaWxlbmFtZT5kaWZmY29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q3JlYXRlIHRoZSBDb25maWd1cmF0aW9uIEZyYWdtZW50OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBSdW4gdGhlIDxmaWxlbmFtZT5kaWZmY29uZmlnPC9maWxlbmFtZT4KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgdG8gcHJlcGFyZSBhIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQuCiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVzdWx0aW5nIGZpbGUgPGZpbGVuYW1lPmZyYWdtZW50LmNmZzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHBsYWNlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIHBsYWNlZCBpbiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4gZGlyZWN0b3J5OgogICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAkIGJpdGJha2UgbGludXgteW9jdG8gLWMgZGlmZmNvbmZpZwotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kaWZmY29uZmlnPC9maWxlbmFtZT4gY29tbWFuZCBjcmVhdGVzIGEgZmlsZSB0aGF0IGlzIGEKLSAgICAgICAgICAgICAgICBsaXN0IG9mIExpbnV4IGtlcm5lbCA8ZmlsZW5hbWU+Q09ORklHXzwvZmlsZW5hbWU+IGFzc2lnbm1lbnRzLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGlmZmNvbmZpZzwvZmlsZW5hbWU+IGNvbW1hbmQgY3JlYXRlcyBhIGZpbGUKKyAgICAgICAgICAgICAgICB0aGF0IGlzIGEgbGlzdCBvZiBMaW51eCBrZXJuZWwgPGZpbGVuYW1lPkNPTkZJR188L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGFzc2lnbm1lbnRzLgogICAgICAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J2NoYW5naW5nLXRoZS1jb25maWd1cmF0aW9uJz5DaGFuZ2luZyB0aGUgQ29uZmlndXJhdGlvbjwvbGluaz4iCi0gICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGUgb3V0cHV0IGFzIGEKLSAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZyYWdtZW50LgorICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGUgb3V0cHV0CisgICAgICAgICAgICAgICAgYXMgYSBjb25maWd1cmF0aW9uIGZyYWdtZW50LgogICAgICAgICAgICAgICAgIDxub3RlPgogICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gdXNlIHRoaXMgbWV0aG9kIHRvIGNyZWF0ZSBjb25maWd1cmF0aW9uCiAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50cyBmb3IgYSBCU1AuCkBAIC02MTAsMzQgKzE3ODIsMTI2IEBACiAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSBrZXJuZWwgdG9vbHMgYWxzbyBwcm92aWRlIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbi4KLSAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGVzZSB0b29scyB0byBwcm9kdWNlIHdhcm5pbmdzIGZvciB3aGVuIGEKKyAgICAgICAgICAgICAgICBXaGVyZSBkbyB5b3UgcHV0IHlvdXIgY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlcz8KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHBsYWNlIHRoZXNlIGZpbGVzIGluIGFuIGFyZWEgcG9pbnRlZCB0byBieQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBhcyBkaXJlY3RlZCBieSB5b3VyIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSwKKyAgICAgICAgICAgICAgICB3aGljaCBpcyBsb2NhdGVkIGluIHlvdXIgbGF5ZXIuCisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcGlja3MgdXAgdGhlIGNvbmZpZ3VyYXRpb24gYW5kCisgICAgICAgICAgICAgICAgYWRkcyBpdCB0byB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGFkIGEgc2V0IG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworICAgICAgICAgICAgICAgIGluIGEgZmlsZSBjYWxsZWQgPGZpbGVuYW1lPm15Y29uZmlnLmNmZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIElmIHlvdSBwdXQgdGhhdCBmaWxlIGluc2lkZSBhIGRpcmVjdG9yeSBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0bzwvZmlsZW5hbWU+IHRoYXQgcmVzaWRlcyBpbiB0aGUgc2FtZQorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBhcyB0aGUga2VybmVsJ3MgYXBwZW5kIGZpbGUgd2l0aGluIHlvdXIgbGF5ZXIKKyAgICAgICAgICAgICAgICBhbmQgdGhlbiBhZGQgdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnRzIHRvIHRoZSBrZXJuZWwncyBhcHBlbmQKKyAgICAgICAgICAgICAgICBmaWxlLCB0aG9zZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBiZSBwaWNrZWQgdXAgYW5kIGFwcGxpZWQKKyAgICAgICAgICAgICAgICB3aGVuIHRoZSBrZXJuZWwgaXMgYnVpbHQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly9teWNvbmZpZy5jZmciCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQgZWFybGllciwgeW91IGNhbiBncm91cCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zCisgICAgICAgICAgICAgICAgaW50byBtdWx0aXBsZSBmaWxlcyBhbmQgbmFtZSB0aGVtIGFsbCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHN0YXRlbWVudCBhcyB3ZWxsLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgY291bGQgZ3JvdXAgc2VwYXJhdGUgY29uZmlndXJhdGlvbnMKKyAgICAgICAgICAgICAgICBzcGVjaWZpY2FsbHkgZm9yIEV0aGVybmV0IGFuZCBncmFwaGljcyBpbnRvIHRoZWlyIG93biBmaWxlcworICAgICAgICAgICAgICAgIGFuZCBhZGQgdGhvc2UgYnkgdXNpbmcgYSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHN0YXRlbWVudAorICAgICAgICAgICAgICAgIGxpa2UgdGhlIGZvbGxvd2luZyBpbiB5b3VyIGFwcGVuZCBmaWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSArPSAiZmlsZTovL215Y29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8vZXRoLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8vZ2Z4LmNmZyIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndmFsaWRhdGluZy1jb25maWd1cmF0aW9uJz4KKyAgICAgICAgICAgIDx0aXRsZT5WYWxpZGF0aW5nIENvbmZpZ3VyYXRpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3Mta2VybmVsX2NvbmZpZ2NoZWNrJz48ZmlsZW5hbWU+ZG9fa2VybmVsX2NvbmZpZ2NoZWNrPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHRhc2sgdG8gcHJvdmlkZSBjb25maWd1cmF0aW9uIHZhbGlkYXRpb246CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbGludXgteW9jdG8gLWMga2VybmVsX2NvbmZpZ2NoZWNrIC1mCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFJ1bm5pbmcgdGhpcyB0YXNrIHByb2R1Y2VzIHdhcm5pbmdzIGZvciB3aGVuIGEKICAgICAgICAgICAgICAgICByZXF1ZXN0ZWQgY29uZmlndXJhdGlvbiBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIGZpbmFsCiAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIG9yIHdoZW4geW91IG92ZXJyaWRlIGEKICAgICAgICAgICAgICAgICBwb2xpY3kgY29uZmlndXJhdGlvbiBpbiBhIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQuCi0gICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHdpdGggc29tZSBzYW1wbGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kCi0gICAgICAgICAgICAgICAgdGhhdCBydW5zIHRoZXNlIHRvb2xzOgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiBvcmRlciB0byBydW4gdGhpcyB0YXNrLCB5b3UgbXVzdCBoYXZlIGFuIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctbWVudWNvbmZpZyc+VXNpbmcgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGNyZWF0ZSBhIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIHNhbXBsZSBvdXRwdXQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fa2VybmVsX2NvbmZpZ2NoZWNrPC9maWxlbmFtZT4gdGFzazoKICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBrZXJuZWxfY29uZmlnY2hlY2sgLWYKKyAgICAgTG9hZGluZyBjYWNoZTogMTAwJSB8IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyN8IFRpbWU6IDA6MDA6MDAKKyAgICAgTG9hZGVkIDEyNzUgZW50cmllcyBmcm9tIGRlcGVuZGVuY3kgY2FjaGUuCisgICAgIE5PVEU6IFJlc29sdmluZyBhbnkgbWlzc2luZyB0YXNrIHF1ZXVlIGRlcGVuZGVuY2llcwogCi0gICAgIC4uLgorICAgICBCdWlsZCBDb25maWd1cmF0aW9uOgorICAgICAgICAgLgorICAgICAgICAgLgorICAgICAgICAgLgogCi0gICAgIE5PVEU6IHZhbGlkYXRpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24KLSAgICAgVGhpcyBCU1Agc2V0cyAzIGludmFsaWQvb2Jzb2xldGUga2VybmVsIG9wdGlvbnMuCi0gICAgIFRoZXNlIGNvbmZpZyBvcHRpb25zIGFyZSBub3Qgb2ZmZXJlZCBhbnl3aGVyZSB3aXRoaW4gdGhpcyBrZXJuZWwuCi0gICAgIFRoZSBmdWxsIGxpc3QgY2FuIGJlIGZvdW5kIGluIHlvdXIga2VybmVsIHNyYyBkaXIgYXQ6Ci0gICAgIG1ldGEvY2ZnL3N0YW5kYXJkL215YnNwL2ludmFsaWQuY2ZnCisgICAgIE5PVEU6IEV4ZWN1dGluZyBTZXRTY2VuZSBUYXNrcworICAgICBOT1RFOiBFeGVjdXRpbmcgUnVuUXVldWUgVGFza3MKKyAgICAgV0FSTklORzogbGludXgteW9jdG8tNC4xMi4xMitnaXRBVVRPSU5DK2VkYTRkMThjZTRfMTZkZTAxNDk2Ny1yMCBkb19rZXJuZWxfY29uZmlnY2hlY2s6CisgICAgICAgICBba2VybmVsIGNvbmZpZ106IHNwZWNpZmllZCB2YWx1ZXMgZGlkIG5vdCBtYWtlIGl0IGludG8gdGhlIGtlcm5lbCdzIGZpbmFsIGNvbmZpZ3VyYXRpb246CiAKLSAgICAgVGhpcyBCU1Agc2V0cyAyMSBrZXJuZWwgb3B0aW9ucyB0aGF0IGFyZSBwb3NzaWJseSBub24taGFyZHdhcmUgcmVsYXRlZC4KLSAgICAgVGhlIGZ1bGwgbGlzdCBjYW4gYmUgZm91bmQgaW4geW91ciBrZXJuZWwgc3JjIGRpciBhdDoKLSAgICAgbWV0YS9jZmcvc3RhbmRhcmQvbXlic3Avc3BlY2lmaWVkX25vbl9oZHcuY2ZnCisgICAgIC0tLS0tLS0tLS0gQ09ORklHX1g4Nl9UU0MgLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgQ29uZmlnOiBDT05GSUdfWDg2X1RTQworICAgICBGcm9tOiAvaG9tZS9zY290dHJpZi9wb2t5L2J1aWxkL3RtcC93b3JrLXNoYXJlZC9xZW11eDg2L2tlcm5lbC1zb3VyY2UvLmtlcm5lbC1tZXRhL2NvbmZpZ3Mvc3RhbmRhcmQvYnNwL2NvbW1vbi1wYy9jb21tb24tcGMtY3B1LmNmZworICAgICBSZXF1ZXN0ZWQgdmFsdWU6ICBDT05GSUdfWDg2X1RTQz15CisgICAgIEFjdHVhbCB2YWx1ZToKIAotICAgICBXQVJOSU5HOiBUaGVyZSB3ZXJlIDIgaGFyZHdhcmUgb3B0aW9ucyByZXF1ZXN0ZWQgdGhhdCBkbyBub3QKLSAgICAgICAgICAgICAgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgdmFsdWUgcHJlc2VudCBpbiB0aGUgZmluYWwgIi5jb25maWciIGZpbGUuCi0gICAgICAgICAgICAgIFRoaXMgcHJvYmFibHkgbWVhbnMgeW91IGFyZSBub3QgZ2V0dGluZyB0aGUgY29uZmlnIHlvdSB3YW50ZWQuCi0gICAgICAgICAgICAgIFRoZSBmdWxsIGxpc3QgY2FuIGJlIGZvdW5kIGluIHlvdXIga2VybmVsIHNyYyBkaXIgYXQ6Ci0gICAgICAgICAgICAgIG1ldGEvY2ZnL3N0YW5kYXJkL215YnNwL21pc21hdGNoLmNmZworCisgICAgIC0tLS0tLS0tLS0gQ09ORklHX1g4Nl9CSUdTTVAgLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgQ29uZmlnOiBDT05GSUdfWDg2X0JJR1NNUAorICAgICBGcm9tOiAvaG9tZS9zY290dHJpZi9wb2t5L2J1aWxkL3RtcC93b3JrLXNoYXJlZC9xZW11eDg2L2tlcm5lbC1zb3VyY2UvLmtlcm5lbC1tZXRhL2NvbmZpZ3Mvc3RhbmRhcmQvY2ZnL3NtcC5jZmcKKyAgICAgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9idWlsZC90bXAvd29yay1zaGFyZWQvcWVtdXg4Ni9rZXJuZWwtc291cmNlLy5rZXJuZWwtbWV0YS9jb25maWdzL3N0YW5kYXJkL2RlZmNvbmZpZworICAgICBSZXF1ZXN0ZWQgdmFsdWU6ICAjIENPTkZJR19YODZfQklHU01QIGlzIG5vdCBzZXQKKyAgICAgQWN0dWFsIHZhbHVlOgorCisKKyAgICAgLS0tLS0tLS0tLSBDT05GSUdfTlJfQ1BVUyAtLS0tLS0tLS0tLS0tLS0tLQorICAgICBDb25maWc6IENPTkZJR19OUl9DUFVTCisgICAgIEZyb206IC9ob21lL3Njb3R0cmlmL3Bva3kvYnVpbGQvdG1wL3dvcmstc2hhcmVkL3FlbXV4ODYva2VybmVsLXNvdXJjZS8ua2VybmVsLW1ldGEvY29uZmlncy9zdGFuZGFyZC9jZmcvc21wLmNmZworICAgICAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L2J1aWxkL3RtcC93b3JrLXNoYXJlZC9xZW11eDg2L2tlcm5lbC1zb3VyY2UvLmtlcm5lbC1tZXRhL2NvbmZpZ3Mvc3RhbmRhcmQvYnNwL2NvbW1vbi1wYy9jb21tb24tcGMuY2ZnCisgICAgICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvYnVpbGQvdG1wL3dvcmstc2hhcmVkL3FlbXV4ODYva2VybmVsLXNvdXJjZS8ua2VybmVsLW1ldGEvY29uZmlncy9zdGFuZGFyZC9kZWZjb25maWcKKyAgICAgUmVxdWVzdGVkIHZhbHVlOiAgQ09ORklHX05SX0NQVVM9OAorICAgICBBY3R1YWwgdmFsdWU6ICAgICBDT05GSUdfTlJfQ1BVUz0xCisKKworICAgICAtLS0tLS0tLS0tIENPTkZJR19TQ0hFRF9TTVQgLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgQ29uZmlnOiBDT05GSUdfU0NIRURfU01UCisgICAgIEZyb206IC9ob21lL3Njb3R0cmlmL3Bva3kvYnVpbGQvdG1wL3dvcmstc2hhcmVkL3FlbXV4ODYva2VybmVsLXNvdXJjZS8ua2VybmVsLW1ldGEvY29uZmlncy9zdGFuZGFyZC9jZmcvc21wLmNmZworICAgICAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L2J1aWxkL3RtcC93b3JrLXNoYXJlZC9xZW11eDg2L2tlcm5lbC1zb3VyY2UvLmtlcm5lbC1tZXRhL2NvbmZpZ3Mvc3RhbmRhcmQvZGVmY29uZmlnCisgICAgIFJlcXVlc3RlZCB2YWx1ZTogIENPTkZJR19TQ0hFRF9TTVQ9eQorICAgICBBY3R1YWwgdmFsdWU6CisKKworCisgICAgIE5PVEU6IFRhc2tzIFN1bW1hcnk6IEF0dGVtcHRlZCAyODggdGFza3Mgb2Ygd2hpY2ggMjg1IGRpZG4ndCBuZWVkIHRvIGJlIHJlcnVuIGFuZCBhbGwgc3VjY2VlZGVkLgorCisgICAgIFN1bW1hcnk6IFRoZXJlIHdlcmUgMyBXQVJOSU5HIG1lc3NhZ2VzIHNob3duLgogICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIG91dHB1dCBleGFtcGxlIGhhcyBhcnRpZmljaWFsIGxpbmUgYnJlYWtzCisgICAgICAgICAgICAgICAgICAgIHRvIG1ha2UgaXQgbW9yZSByZWFkYWJsZS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CiAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgIDxwYXJhPgpAQCAtNjQ2LDExMSArMTkxMCwyMDggQEAKICAgICAgICAgICAgICAgICBpdGVtcy4KICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIGxvZ3MgdG8gYWRqdXN0IHlvdXIKICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCB0aGVuIHJlcGVhdCB0aGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsX2NvbmZpZ21lPC9maWxlbmFtZT4gYW5kCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmtlcm5lbF9jb25maWdjaGVjazwvZmlsZW5hbWU+IGNvbW1hbmRzIHVudGlsCi0gICAgICAgICAgICAgICAgdGhleSBwcm9kdWNlIG5vIHdhcm5pbmdzLgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1rZXJuZWxfY29uZmlnbWUnPjxmaWxlbmFtZT5kb19rZXJuZWxfY29uZmlnbWU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWtlcm5lbF9jb25maWdjaGVjayc+PGZpbGVuYW1lPmRvX2tlcm5lbF9jb25maWdjaGVjazwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB0YXNrcyB1bnRpbCB0aGV5IHByb2R1Y2Ugbm8gd2FybmluZ3MuCiAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlCiAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiB0b29sLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5nLW1lbnVjb25maWcnPlVzaW5nIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT48L3VsaW5rPiIKLSAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdtb2RpZnlpbmctc291cmNlLWNvZGUnPgotICAgICAgICAgICAgPHRpdGxlPk1vZGlmeWluZyBTb3VyY2UgQ29kZTwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFlvdSBjYW4gZXhwZXJpbWVudCB3aXRoIHNvdXJjZSBjb2RlIGNoYW5nZXMgYW5kIGNyZWF0ZSBhCi0gICAgICAgICAgICAgICAgc2ltcGxlIHBhdGNoIHdpdGhvdXQgbGVhdmluZyB0aGUgQml0QmFrZSBlbnZpcm9ubWVudC4KLSAgICAgICAgICAgICAgICBUbyBnZXQgc3RhcnRlZCwgYmUgc3VyZSB0byBjb21wbGV0ZSBhIGJ1aWxkIGF0Ci0gICAgICAgICAgICAgICAgbGVhc3QgdGhyb3VnaCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdGFzazoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBrZXJuZWxfY29uZmlnbWUgLWYKLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgVGFraW5nIHRoaXMgc3RlcCBlbnN1cmVzIHlvdSBoYXZlIHRoZSBzb3VyY2VzIHByZXBhcmVkCi0gICAgICAgICAgICAgICAgYW5kIHRoZSBjb25maWd1cmF0aW9uIGNvbXBsZXRlZC4KLSAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlIHNvdXJjZXMgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeSB3aXRoaW4gdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNvdXJjZS88L2ZpbGVuYW1lPiBkaXJlY3RvcnksIHdoaWNoIGlzIGEgc3ltbGluawotICAgICAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUInPjxmaWxlbmFtZT5CPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59L3NvdXJjZTwvZmlsZW5hbWU+KS4KLSAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnNvdXJjZS88L2ZpbGVuYW1lPiBkaXJlY3RvcnkgZXhwYW5kcyB0bwotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT48ZmlsZW5hbWU+L2xpbnV4LTwvZmlsZW5hbWU+PGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9BUkNIJz48ZmlsZW5hbWU+UEFDS0FHRV9BUkNIPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59LSR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTElOVVhfS0VSTkVMX1RZUEUnPjxmaWxlbmFtZT5MSU5VWF9LRVJORUxfVFlQRTwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fS1idWlsZC9zb3VyY2U8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IHBvaW50ZWQgdG8gYnkgdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNvdXJjZS88L2ZpbGVuYW1lPiBzeW1saW5rIGlzIGFsc28ga25vd24gYXMKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TVEFHSU5HX0tFUk5FTF9ESVInPjxmaWxlbmFtZT5TVEFHSU5HX0tFUk5FTF9ESVI8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgWW91IGNhbiBlZGl0IHRoZSBzb3VyY2VzIGFzIHlvdSB3b3VsZCBhbnkgb3RoZXIgTGludXggc291cmNlCi0gICAgICAgICAgICAgICAgdHJlZS4KLSAgICAgICAgICAgICAgICBIb3dldmVyLCBrZWVwIGluIG1pbmQgdGhhdCB5b3Ugd2lsbCBsb3NlIGNoYW5nZXMgaWYgeW91Ci0gICAgICAgICAgICAgICAgdHJpZ2dlciB0aGUKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtZmV0Y2gnPjxmaWxlbmFtZT5kb19mZXRjaDwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICB0YXNrIGZvciB0aGUgcmVjaXBlLgotICAgICAgICAgICAgICAgIFlvdSBjYW4gYXZvaWQgdHJpZ2dlcmluZyB0aGlzIHRhc2sgYnkgbm90IHVzaW5nIEJpdEJha2UgdG8KLSAgICAgICAgICAgICAgICBydW4gdGhlCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNsZWFuYWxsJz48ZmlsZW5hbWU+Y2xlYW5hbGw8L2ZpbGVuYW1lPjwvdWxpbms+LAotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1jbGVhbnNzdGF0ZSc+PGZpbGVuYW1lPmNsZWFuc3N0YXRlPC9maWxlbmFtZT48L3VsaW5rPiwKLSAgICAgICAgICAgICAgICBvciBmb3JjZWQKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtZmV0Y2gnPjxmaWxlbmFtZT5mZXRjaDwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICBjb21tYW5kcy4KLSAgICAgICAgICAgICAgICBBbHNvLCBkbyBub3QgbW9kaWZ5IHRoZSByZWNpcGUgaXRzZWxmIHdoaWxlIHdvcmtpbmcKLSAgICAgICAgICAgICAgICB3aXRoIHRlbXBvcmFyeSBjaGFuZ2VzIG9yIEJpdEJha2UgbWlnaHQgcnVuIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mZXRjaDwvZmlsZW5hbWU+IGNvbW1hbmQgZGVwZW5kaW5nIG9uIHRoZQotICAgICAgICAgICAgICAgIGNoYW5nZXMgdG8gdGhlIHJlY2lwZS4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVG8gdGVzdCB5b3VyIHRlbXBvcmFyeSBjaGFuZ2VzLCBpbnN0cnVjdCBCaXRCYWtlIHRvIHJ1biB0aGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29tcGlsZTwvZmlsZW5hbWU+IGFnYWluLgotICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+LWY8L2ZpbGVuYW1lPiBvcHRpb24gZm9yY2VzIHRoZSBjb21tYW5kIHRvIHJ1bgotICAgICAgICAgICAgICAgIGV2ZW4gdGhvdWdoIEJpdEJha2UgbWlnaHQgdGhpbmsgaXQgaGFzIGFscmVhZHkgZG9uZSBzbzoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBjb21waWxlIC1mCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIElmIHRoZSBjb21waWxlIGZhaWxzLCB5b3UgY2FuIHVwZGF0ZSB0aGUgc291cmNlcyBhbmQgcmVwZWF0Ci0gICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5jb21waWxlPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgT25jZSBjb21waWxhdGlvbiBpcyBzdWNjZXNzZnVsLCB5b3UgY2FuIGluc3BlY3QgYW5kIHRlc3QKLSAgICAgICAgICAgICAgICB0aGUgcmVzdWx0aW5nIGJ1aWxkIChpLmUuIGtlcm5lbCwgbW9kdWxlcywgYW5kIHNvIGZvcnRoKSBmcm9tCi0gICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyBidWlsZCBkaXJlY3Rvcnk6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAke1dPUktESVJ9L2xpbnV4LSR7UEFDS0FHRV9BUkNIfS0ke0xJTlVYX0tFUk5FTF9UWVBFfS1idWlsZAotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHJ1biB0aGUgPGZpbGVuYW1lPmRlcGxveTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgY29tbWFuZCB0byBwbGFjZSB0aGUga2VybmVsIGltYWdlIGluIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50bXAvZGVwbG95L2ltYWdlczwvZmlsZW5hbWU+IGRpcmVjdG9yeToKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0JJCBiaXRiYWtlIGxpbnV4LXlvY3RvIC1jIGRlcGxveQotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICBBbmQsIG9mIGNvdXJzZSwgeW91IGNhbiBwZXJmb3JtIHRoZSByZW1haW5pbmcgaW5zdGFsbGF0aW9uIGFuZAotICAgICAgICAgICAgICAgIHBhY2thZ2luZyBzdGVwcyBieSBpc3N1aW5nOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLQkkIGJpdGJha2UgbGludXgteW9jdG8KLSAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEZvciByYXBpZCBpdGVyYXRpdmUgZGV2ZWxvcG1lbnQsIHRoZSBlZGl0LWNvbXBpbGUtcmVwZWF0IGxvb3AKLSAgICAgICAgICAgICAgICBkZXNjcmliZWQgaW4gdGhpcyBzZWN0aW9uIGlzIHByZWZlcmFibGUgdG8gcmVidWlsZGluZyB0aGUKLSAgICAgICAgICAgICAgICBlbnRpcmUgcmVjaXBlIGJlY2F1c2UgdGhlIGluc3RhbGxhdGlvbiBhbmQgcGFja2FnaW5nIHRhc2tzCi0gICAgICAgICAgICAgICAgYXJlIHZlcnkgdGltZSBjb25zdW1pbmcuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIE9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIHNvdXJjZSBjb2RlIG1vZGlmaWNhdGlvbnMsCi0gICAgICAgICAgICAgICAgeW91IGNhbiBtYWtlIHRoZW0gcGVybWFuZW50IGJ5IGdlbmVyYXRpbmcgcGF0Y2hlcyBhbmQKLSAgICAgICAgICAgICAgICBhcHBseWluZyB0aGVtIHRvIHRoZQotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgYXMgZGVzY3JpYmVkIGluIHRoZQotICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdhcHBseWluZy1wYXRjaGVzJz5BcHBseWluZyBQYXRjaGVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctbWVudWNvbmZpZyc+VXNpbmcgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPjwvbGluaz4iCiAgICAgICAgICAgICAgICAgc2VjdGlvbi4KLSAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIG5vdCBmYW1pbGlhciB3aXRoIGdlbmVyYXRpbmcgcGF0Y2hlcywgcmVmZXIgdG8gdGhlCi0gICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NyZWF0aW5nLXRoZS1wYXRjaCc+Q3JlYXRpbmcgdGhlIFBhdGNoPC91bGluaz4iCi0gICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCiAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZmluZS10dW5pbmctdGhlLWtlcm5lbC1jb25maWd1cmF0aW9uLWZpbGUnPgorICAgICAgICAgICAgPHRpdGxlPkZpbmUtVHVuaW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBGaWxlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBtYWtlIHN1cmUgdGhlIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSBpcyBhcworICAgICAgICAgICAgICAgIGxlYW4gb3IgZWZmaWNpZW50IGFzIHBvc3NpYmxlIGJ5IHJlYWRpbmcgdGhlIG91dHB1dCBvZiB0aGUKKyAgICAgICAgICAgICAgICBrZXJuZWwgY29uZmlndXJhdGlvbiBmcmFnbWVudCBhdWRpdCwgbm90aW5nIGFueSBpc3N1ZXMsIG1ha2luZworICAgICAgICAgICAgICAgIGNoYW5nZXMgdG8gY29ycmVjdCB0aGUgaXNzdWVzLCBhbmQgdGhlbiByZXBlYXRpbmcuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIHBhcnQgb2YgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fa2VybmVsX2NvbmZpZ2NoZWNrPC9maWxlbmFtZT4gdGFzayBydW5zLgorICAgICAgICAgICAgICAgIFRoaXMgdGFzayB2YWxpZGF0ZXMgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGJ5IGNoZWNraW5nIHRoZQorICAgICAgICAgICAgICAgIGZpbmFsIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSBhZ2FpbnN0IHRoZSBpbnB1dAorICAgICAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgICAgIER1cmluZyB0aGUgY2hlY2ssIHRoZSB0YXNrIHByb2R1Y2VzIHdhcm5pbmcgbWVzc2FnZXMgZm9yIHRoZQorICAgICAgICAgICAgICAgIGZvbGxvd2luZyBpc3N1ZXM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIG9wdGlvbnMgdGhhdCBkaWQgbm90IG1ha2UgdGhlIGZpbmFsCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBpdGVtcyB0aGF0IGFwcGVhciB0d2ljZSBpbiB0aGUgc2FtZQorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmcmFnbWVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uIGl0ZW1zIHRhZ2dlZCBhcyAicmVxdWlyZWQiIHRoYXQgd2VyZQorICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGRlbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBBIGJvYXJkIG92ZXJyaWRlcyBhIG5vbi1ib2FyZCBzcGVjaWZpYyBvcHRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgTGlzdGVkIG9wdGlvbnMgbm90IHZhbGlkIGZvciB0aGUga2VybmVsIGJlaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgdGhlIG9wdGlvbiBkb2VzIG5vdCBhcHBlYXIgYW55d2hlcmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19rZXJuZWxfY29uZmlnY2hlY2s8L2ZpbGVuYW1lPiB0YXNrIGNhbgorICAgICAgICAgICAgICAgICAgICBhbHNvIG9wdGlvbmFsbHkgcmVwb3J0IGlmIGFuIG9wdGlvbiBpcyBvdmVycmlkZGVuIGR1cmluZworICAgICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIGVhY2ggb3V0cHV0IHdhcm5pbmcsIGEgbWVzc2FnZSBwb2ludHMgdG8gdGhlIGZpbGUKKyAgICAgICAgICAgICAgICB0aGF0IGNvbnRhaW5zIGEgbGlzdCBvZiB0aGUgb3B0aW9ucyBhbmQgYSBwb2ludGVyIHRvIHRoZQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQgdGhhdCBkZWZpbmVzIHRoZW0uCisgICAgICAgICAgICAgICAgQ29sbGVjdGl2ZWx5LCB0aGUgZmlsZXMgYXJlIHRoZSBrZXkgdG8gc3RyZWFtbGluaW5nIHRoZQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHN0cmVhbWxpbmUgdGhlIGNvbmZpZ3VyYXRpb24sIGRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+VXNlIGEgV29ya2luZyBDb25maWd1cmF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBTdGFydCB3aXRoIGEgZnVsbCBjb25maWd1cmF0aW9uIHRoYXQgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBrbm93IHdvcmtzLgorICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0aGUgY29uZmlndXJhdGlvbiBidWlsZHMgYW5kIGJvb3RzCisgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkuCisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhpcyBjb25maWd1cmF0aW9uIGZpbGUgYXMgeW91ciBiYXNlbGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+UnVuIENvbmZpZ3VyZSBhbmQgQ2hlY2sgVGFza3M6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlcGFyYXRlbHkgcnVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2tlcm5lbF9jb25maWdtZTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2tlcm5lbF9jb25maWdjaGVjazwvZmlsZW5hbWU+IHRhc2tzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbGludXgteW9jdG8gLWMga2VybmVsX2NvbmZpZ21lIC1mCisgICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBrZXJuZWxfY29uZmlnY2hlY2sgLWYKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+UHJvY2VzcyB0aGUgUmVzdWx0czo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSB0aGUgcmVzdWx0aW5nIGxpc3Qgb2YgZmlsZXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19rZXJuZWxfY29uZmlnY2hlY2s8L2ZpbGVuYW1lPiB0YXNrCisgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncyBhbmQgZG8gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcm9wIHZhbHVlcyB0aGF0IGFyZSByZWRlZmluZWQgaW4gdGhlIGZyYWdtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dCBkbyBub3QgY2hhbmdlIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5hbHl6ZSBhbmQgcG90ZW50aWFsbHkgZHJvcCB2YWx1ZXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIHRoYXQgb3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5hbHl6ZSBhbmQgcG90ZW50aWFsbHkgcmVtb3ZlIG5vbi1ib2FyZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyBvcHRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZSByZXBlYXRlZCBhbmQgaW52YWxpZCBvcHRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5SZS1SdW4gQ29uZmlndXJlIGFuZCBDaGVjayBUYXNrczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgeW91IGhhdmUgd29ya2VkIHRocm91Z2ggdGhlIG91dHB1dCBvZiB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGF1ZGl0LCB5b3UgY2FuIHJlLXJ1biB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19rZXJuZWxfY29uZmlnbWU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19rZXJuZWxfY29uZmlnY2hlY2s8L2ZpbGVuYW1lPiB0YXNrcyB0bworICAgICAgICAgICAgICAgICAgICAgICAgc2VlIHRoZSByZXN1bHRzIG9mIHlvdXIgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIG1vcmUgaXNzdWVzLCB5b3UgY2FuIGRlYWwgd2l0aCB0aGVtIGFzCisgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIHN0ZXAuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJdGVyYXRpdmVseSB3b3JraW5nIHRocm91Z2ggc3RlcHMgdHdvIHRocm91Z2ggZm91ciBldmVudHVhbGx5CisgICAgICAgICAgICAgICAgeWllbGRzIGEgbWluaW1hbCwgc3RyZWFtbGluZWQgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgdGhlIGJlc3QgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiwgeW91IGNhbgorICAgICAgICAgICAgICAgIGJ1aWxkIHRoZSBMaW51eCBZb2N0byBrZXJuZWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZXhwYW5kaW5nLXZhcmlhYmxlcyc+CisgICAgICAgIDx0aXRsZT5FeHBhbmRpbmcgVmFyaWFibGVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNvbWV0aW1lcyBpdCBpcyBoZWxwZnVsIHRvIGRldGVybWluZSB3aGF0IGEgdmFyaWFibGUgZXhwYW5kcworICAgICAgICAgICAgdG8gZHVyaW5nIGEgYnVpbGQuCisgICAgICAgICAgICBZb3UgY2FuIGRvIGV4YW1pbmUgdGhlIHZhbHVlcyBvZiB2YXJpYWJsZXMgYnkgZXhhbWluaW5nIHRoZQorICAgICAgICAgICAgb3V0cHV0IG9mIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZSAtZTwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICBUaGUgb3V0cHV0IGlzIGxvbmcgYW5kIGlzIG1vcmUgZWFzaWx5IG1hbmFnZWQgaW4gYSB0ZXh0IGZpbGUsCisgICAgICAgICAgICB3aGljaCBhbGxvd3MgZm9yIGVhc3kgc2VhcmNoZXM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtZSB2aXJ0dWFsL2tlcm5lbCA+IDxyZXBsYWNlYWJsZT5zb21lX3RleHRfZmlsZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBXaXRoaW4gdGhlIHRleHQgZmlsZSwgeW91IGNhbiBzZWUgZXhhY3RseSBob3cgZWFjaCB2YXJpYWJsZSBpcworICAgICAgICAgICAgZXhwYW5kZWQgYW5kIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nd29ya2luZy13aXRoLWEtZGlydHkta2VybmVsLXZlcnNpb24tc3RyaW5nJz4KKyAgICAgICAgPHRpdGxlPldvcmtpbmcgd2l0aCBhICJEaXJ0eSIgS2VybmVsIFZlcnNpb24gU3RyaW5nPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBidWlsZCBhIGtlcm5lbCBpbWFnZSBhbmQgdGhlIHZlcnNpb24gc3RyaW5nIGhhcyBhCisgICAgICAgICAgICAiKyIgb3IgYSAiLWRpcnR5IiBhdCB0aGUgZW5kLCB1bmNvbW1pdHRlZCBtb2RpZmljYXRpb25zIGV4aXN0CisgICAgICAgICAgICBpbiB0aGUga2VybmVsJ3Mgc291cmNlIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBzdGVwcyB0byBjbGVhbiB1cCB0aGUgdmVyc2lvbiBzdHJpbmc6CisgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+RGlzY292ZXIgdGhlIFVuY29tbWl0dGVkIENoYW5nZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgR28gdG8gdGhlIGtlcm5lbCdzIGxvY2FsbHkgY2xvbmVkIEdpdCByZXBvc2l0b3J5CisgICAgICAgICAgICAgICAgICAgIChzb3VyY2UgZGlyZWN0b3J5KSBhbmQgdXNlIHRoZSBmb2xsb3dpbmcgR2l0IGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgdG8gbGlzdCB0aGUgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCwgYWRkZWQsIG9yCisgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgc3RhdHVzCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q29tbWl0IHRoZSBDaGFuZ2VzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgY29tbWl0IHRob3NlIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgdHJlZSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IHlvdSB3aWxsIHNhdmUsCisgICAgICAgICAgICAgICAgICAgIGV4cG9ydCwgb3IgdXNlIHRoZSBjaGFuZ2VzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGFkZAorICAgICAkIGdpdCBjb21taXQgLXMgLWEgLW0gImdldHRpbmcgcmlkIG9mIC1kaXJ0eSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5SZWJ1aWxkIHRoZSBLZXJuZWwgSW1hZ2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB5b3UgY29tbWl0IHRoZSBjaGFuZ2VzLCByZWJ1aWxkIHRoZSBrZXJuZWwuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPkRlcGVuZGluZyBvbiB5b3VyIHBhcnRpY3VsYXIga2VybmVsIGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgIHdvcmtmbG93LCB0aGUgY29tbWFuZHMgeW91IHVzZSB0byByZWJ1aWxkIHRoZQorICAgICAgICAgICAgICAgICAgICBrZXJuZWwgbWlnaHQgZGlmZmVyLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gYnVpbGRpbmcgdGhlIGtlcm5lbCBpbWFnZSB3aGVuCisgICAgICAgICAgICAgICAgICAgIHVzaW5nIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWRldnRvb2wtdG8tcGF0Y2gtdGhlLWtlcm5lbCc+VXNpbmcgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiB0byBQYXRjaCB0aGUgS2VybmVsPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGJ1aWxkaW5nIHRoZSBrZXJuZWwgaW1hZ2Ugd2hlbgorICAgICAgICAgICAgICAgICAgICB1c2luZyBCaXRiYWtlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy10cmFkaXRpb25hbC1rZXJuZWwtZGV2ZWxvcG1lbnQtdG8tcGF0Y2gtdGhlLWtlcm5lbCc+VXNpbmcgVHJhZGl0aW9uYWwgS2VybmVsIERldmVsb3BtZW50IHRvIFBhdGNoIHRoZSBLZXJuZWw8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3Rpb24+CiAKICAgICA8c2VjdGlvbiBpZD0nd29ya2luZy13aXRoLXlvdXItb3duLXNvdXJjZXMnPgpAQCAtNzYzLDcgKzIxMjQsNyBAQAogICAgICAgICAgICAgd29ya2luZyB3aXRoIHlvdXIgb3duIHNvdXJjZXMuCiAgICAgICAgICAgICBXaGVuIHlvdSB1c2UgeW91ciBvd24gc291cmNlcywgeW91IHdpbGwgbm90IGJlIGFibGUgdG8KICAgICAgICAgICAgIGxldmVyYWdlIHRoZSBleGlzdGluZyBrZXJuZWwKLSAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+IGFuZAorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4gYW5kCiAgICAgICAgICAgICBzdGFiaWxpemF0aW9uIHdvcmsgb2YgdGhlIGxpbnV4LXlvY3RvIHNvdXJjZXMuCiAgICAgICAgICAgICBIb3dldmVyLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIG1hbmFnZSB5b3VyIG93biBNZXRhZGF0YSBpbiB0aGUgc2FtZQogICAgICAgICAgICAgZm9ybWF0IGFzIHRoZSBsaW51eC15b2N0byBzb3VyY2VzLgpAQCAtNzg4LDIzICsyMTQ5LDI5IEBACiAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgYmFzaWMgc3RlcHMgeW91IGNhbiB1c2UgdG8gd29yayB3aXRoIHlvdXIgb3duIHNvdXJjZXM6CisgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGJhc2ljIHN0ZXBzIHlvdSBjYW4gdXNlIHRvIHdvcmsgd2l0aCB5b3VyIG93bgorICAgICAgICAgICAgc291cmNlczoKICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q29weSB0aGUgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLWN1c3RvbS5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q3JlYXRlIGEgQ29weSBvZiB0aGUgS2VybmVsIFJlY2lwZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDb3B5IHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tY3VzdG9tLmJiPC9maWxlbmFtZT4KICAgICAgICAgICAgICAgICAgICAgcmVjaXBlIHRvIHlvdXIgbGF5ZXIgYW5kIGdpdmUgaXQgYSBtZWFuaW5nZnVsIG5hbWUuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIHNob3VsZCBpbmNsdWRlIHRoZSB2ZXJzaW9uIG9mIHRoZSBMaW51eCBrZXJuZWwgeW91Ci0gICAgICAgICAgICAgICAgICAgIGFyZSB1c2luZyAoZS5nLgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tbXlwcm9qZWN0XzMuMTkuYmI8L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICAgICAgd2hlcmUgIjMuMTkiIGlzIHRoZSBiYXNlIHZlcnNpb24gb2YgdGhlIExpbnV4IGtlcm5lbAotICAgICAgICAgICAgICAgICAgICB3aXRoIHdoaWNoIHlvdSB3b3VsZCBiZSB3b3JraW5nKS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW4gdGhlIHNhbWUgZGlyZWN0b3J5IGluc2lkZSB5b3VyIGxheWVyLAotICAgICAgICAgICAgICAgICAgICBjcmVhdGUgYSBtYXRjaGluZyBkaXJlY3RvcnkKLSAgICAgICAgICAgICAgICAgICAgdG8gc3RvcmUgeW91ciBwYXRjaGVzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzIChlLmcuCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by1teXByb2plY3Q8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIHNob3VsZCBpbmNsdWRlIHRoZSB2ZXJzaW9uIG9mIHRoZSBZb2N0byBMaW51eAorICAgICAgICAgICAgICAgICAgICBrZXJuZWwgeW91IGFyZSB1c2luZyAoZS5nLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tbXlwcm9qZWN0XzQuMTIuYmI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgd2hlcmUgIjQuMTIiIGlzIHRoZSBiYXNlIHZlcnNpb24gb2YgdGhlIExpbnV4IGtlcm5lbAorICAgICAgICAgICAgICAgICAgICB3aXRoIHdoaWNoIHlvdSB3b3VsZCBiZSB3b3JraW5nKS4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1ha2Ugc3VyZSB5b3UgaGF2ZSBlaXRoZXIgYQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSBvciBjb25maWd1cmF0aW9uCi0gICAgICAgICAgICAgICAgICAgIGZyYWdtZW50IGZpbGVzLgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkNyZWF0ZSBhIERpcmVjdG9yeSBmb3IgWW91ciBQYXRjaGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBzYW1lIGRpcmVjdG9yeSBpbnNpZGUgeW91ciBsYXllciwgY3JlYXRlIGEgbWF0Y2hpbmcKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHRvIHN0b3JlIHlvdXIgcGF0Y2hlcyBhbmQgY29uZmlndXJhdGlvbiBmaWxlcworICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+bGludXgteW9jdG8tbXlwcm9qZWN0PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5FbnN1cmUgWW91IEhhdmUgQ29uZmlndXJhdGlvbnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTWFrZSBzdXJlIHlvdSBoYXZlIGVpdGhlciBhIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlIG9yIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQgZmlsZXMgaW4geW91ciBsYXllci4KICAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tY3VzdG9tLmJiPC9maWxlbmFtZT4KICAgICAgICAgICAgICAgICAgICAgcmVjaXBlLCB5b3UgbXVzdCBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbi4KICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBoYXZlIGEgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUsCkBAIC04MTMsMjcgKzIxODAsMzIgQEAKICAgICAgJCBtYWtlIGRlZmNvbmZpZwogICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgICAgIEFmdGVyIHJ1bm5pbmcgdGhlIGNvbW1hbmQsIGNvcHkgdGhlIHJlc3VsdGluZwotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IHRvIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZXM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYXMgImRlZmNvbmZpZyIgYW5kCi0gICAgICAgICAgICAgICAgICAgIHRoZW4gYWRkIGl0IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5maWxlczwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpbiB5b3VyIGxheWVyCisgICAgICAgICAgICAgICAgICAgIGFzICJkZWZjb25maWciIGFuZCB0aGVuIGFkZCBpdCB0byB0aGUKICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgogICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB0aGUgcmVjaXBlLjwvcGFyYT4KKwogICAgICAgICAgICAgICAgICAgICA8cGFyYT5SdW5uaW5nIHRoZSA8ZmlsZW5hbWU+bWFrZSBkZWZjb25maWc8L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgICAgICBjb21tYW5kIHJlc3VsdHMgaW4gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgeW91cgogICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUgYXMgZGVmaW5lZCBieSB5b3VyIGtlcm5lbC4KICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgbm8gZ3VhcmFudGVlIGV4aXN0cyB0aGF0IHRoaXMgY29uZmlndXJhdGlvbiBpcwogICAgICAgICAgICAgICAgICAgICB2YWxpZCBmb3IgeW91ciB1c2UgY2FzZSwgb3IgdGhhdCB5b3VyIGJvYXJkIHdpbGwgZXZlbiBib290LgotICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHBhcnRpY3VsYXJseSB0cnVlIGZvciBub24teDg2IGFyY2hpdGVjdHVyZXMuCi0gICAgICAgICAgICAgICAgICAgIFRvIHVzZSBub24teDg2IDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlcywgeW91Ci0gICAgICAgICAgICAgICAgICAgIG5lZWQgdG8gYmUgbW9yZSBzcGVjaWZpYyBhbmQgZmluZCBvbmUgdGhhdCBtYXRjaGVzIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgdHJ1ZSBmb3Igbm9uLXg4NiBhcmNoaXRlY3R1cmVzLjwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT5UbyB1c2Ugbm9uLXg4NiA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZXMsCisgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIGJlIG1vcmUgc3BlY2lmaWMgYW5kIGZpbmQgb25lIHRoYXQgbWF0Y2hlcyB5b3VyCiAgICAgICAgICAgICAgICAgICAgIGJvYXJkIChpLmUuIGZvciBhcm0sIHlvdSBsb29rIGluCiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hcmNoL2FybS9jb25maWdzPC9maWxlbmFtZT4gYW5kIHVzZSB0aGUgb25lIHRoYXQKICAgICAgICAgICAgICAgICAgICAgaXMgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQgZm9yIHlvdXIgYm9hcmQpLgogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RWRpdCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBpbiB5b3VyIHJlY2lwZQotICAgICAgICAgICAgICAgICAgICBhcyBhcHByb3ByaWF0ZSBmb3IgeW91ciBwcm9qZWN0OgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkVkaXQgdGhlIFJlY2lwZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBFZGl0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGluIHlvdXIgcmVjaXBlIGFzIGFwcHJvcHJpYXRlCisgICAgICAgICAgICAgICAgICAgIGZvciB5b3VyIHByb2plY3Q6CiAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHNob3VsZCBzcGVjaWZ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBHaXQgcmVwb3NpdG9yeSB0aGF0IHVzZXMgb25lIG9mIHRoZSBzdXBwb3J0ZWQgR2l0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hlciBwcm90b2NvbHMgKGkuZS4gPGZpbGVuYW1lPmZpbGU8L2ZpbGVuYW1lPiwKQEAgLTg0NSwyNCArMjIxNywzMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBza2VsZXRvbiByZWNpcGUgcHJvdmlkZXMgYW4gZXhhbXBsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gYXMgYSBzeW50YXggcmVmZXJlbmNlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MSU5VWF9WRVJTSU9OJz48ZmlsZW5hbWU+TElOVVhfVkVSU0lPTjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJTlVYX1ZFUlNJT04nPjxmaWxlbmFtZT5MSU5VWF9WRVJTSU9OPC9maWxlbmFtZT48L3VsaW5rPjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgTGludXgga2VybmVsIHZlcnNpb24geW91IGFyZSB1c2luZyAoZS5nLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzLjE5IikuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJTlVYX1ZFUlNJT05fRVhURU5TSU9OJz48ZmlsZW5hbWU+TElOVVhfVkVSU0lPTl9FWFRFTlNJT048L2ZpbGVuYW1lPjwvdWxpbms+OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBMaW51eCBrZXJuZWwgPGZpbGVuYW1lPkNPTkZJR19MT0NBTFZFUlNJT048L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgaXMgY29tcGlsZWQgaW50byB0aGUgcmVzdWx0aW5nIGtlcm5lbCBhbmQgdmlzaWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0LjEyIikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJTlVYX1ZFUlNJT05fRVhURU5TSU9OJz48ZmlsZW5hbWU+TElOVVhfVkVSU0lPTl9FWFRFTlNJT048L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBMaW51eCBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q09ORklHX0xPQ0FMVkVSU0lPTjwvZmlsZW5hbWU+IHRoYXQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlZCBpbnRvIHRoZSByZXN1bHRpbmcga2VybmVsIGFuZCB2aXNpYmxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgPGZpbGVuYW1lPnVuYW1lPC9maWxlbmFtZT4gY29tbWFuZC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDUkVWJz48ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDUkVWJz48ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT48L3VsaW5rPjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY29tbWl0IElEIGZyb20gd2hpY2ggeW91IHdhbnQgdG8gYnVpbGQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvdWxpbms+OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyZWF0IHRoaXMgdmFyaWFibGUgdGhlIHNhbWUgYXMgeW91IHdvdWxkIGluIGFueSBvdGhlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNyZW1lbnQgdGhlIHZhcmlhYmxlIHRvIGluZGljYXRlIHRvIHRoZSBPcGVuRW1iZWRkZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gdGhhdCB0aGUgcmVjaXBlIGhhcyBjaGFuZ2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmVhdCB0aGlzIHZhcmlhYmxlIHRoZSBzYW1lIGFzIHlvdSB3b3VsZCBpbiBhbnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlciByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jcmVtZW50IHRoZSB2YXJpYWJsZSB0byBpbmRpY2F0ZSB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRoYXQgdGhlIHJlY2lwZSBoYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz46CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4gYXNzaWdubWVudCBpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGljYWxseSBhZGVxdWF0ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBjb21iaW5lcyB0aGUgPGZpbGVuYW1lPkxJTlVYX1ZFUlNJT048L2ZpbGVuYW1lPgpAQCAtODcwLDE2ICsyMjUwLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgZGVyaXZlZCBmcm9tIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNQVic+PGZpbGVuYW1lPlNSQ1BWPC9maWxlbmFtZT48L3VsaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb21iaW5lZCByZXN1bHRzIGFyZSBhIHN0cmluZyB3aXRoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyBmb3JtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb21iaW5lZCByZXN1bHRzIGFyZSBhIHN0cmluZyB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBmb3JtOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgMy4xOS4xMStnaXQxKzY4YTYzNWJmOGRmYjY0YjAyMjYzYzFhYzgwYzk0ODY0N2NjNzZkNWZfMSsyMThiZDhkMjAyMmI5ODUyYzYwZDMyZjBkNzcwOTMxZTNjZjM0M2UyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoaWxlIGxlbmd0aHksIHRoZSBleHRyYSB2ZXJib3NpdHkgaW4gPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwcyBlbnN1cmUgeW91IGFyZSB1c2luZyB0aGUgZXhhY3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzIGZyb20gd2hpY2ggeW91IGludGVuZCB0byBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGlsZSBsZW5ndGh5LCB0aGUgZXh0cmEgdmVyYm9zaXR5IGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4gaGVscHMgZW5zdXJlIHlvdSBhcmUgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZXhhY3Qgc291cmNlcyBmcm9tIHdoaWNoIHlvdSBpbnRlbmQgdG8gYnVpbGQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNPTVBBVElCTEVfTUFDSElORSc+PGZpbGVuYW1lPkNPTVBBVElCTEVfTUFDSElORTwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNPTVBBVElCTEVfTUFDSElORSc+PGZpbGVuYW1lPkNPTVBBVElCTEVfTUFDSElORTwvZmlsZW5hbWU+PC91bGluaz46CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIHRoZSBtYWNoaW5lcyBzdXBwb3J0ZWQgYnkgeW91ciBuZXcgcmVjaXBlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaW4gdGhlIGV4YW1wbGUgcmVjaXBlIGlzIHNldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGRlZmF1bHQgdG8gYSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBtYXRjaGVzCkBAIC04ODgsMTggKzIyNjksMjQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGNoYW5nZSBpdCB0byBtYXRjaCBhIGxpc3Qgb2YgdGhlIG1hY2hpbmVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB5b3VyIG5ldyByZWNpcGUgc3VwcG9ydHMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIHN1cHBvcnQgdGhlIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPnFlbXV4ODYtNjQ8L2ZpbGVuYW1lPiBtYWNoaW5lcywgdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIHN1cHBvcnQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdXg4Ni02NDwvZmlsZW5hbWU+IG1hY2hpbmVzLCB1c2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nIGZvcm06CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICBDT01QQVRJQkxFX01BQ0hJTkUgPSAicWVtdXg4NnxxZW11eDg2LTY0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlByb3ZpZGUgZnVydGhlciBjdXN0b21pemF0aW9ucyB0byB5b3VyIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkN1c3RvbWl6ZSBZb3VyIFJlY2lwZSBhcyBOZWVkZWQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZSBmdXJ0aGVyIGN1c3RvbWl6YXRpb25zIHRvIHlvdXIgcmVjaXBlCiAgICAgICAgICAgICAgICAgICAgIGFzIG5lZWRlZCBqdXN0IGFzIHlvdSB3b3VsZCBjdXN0b21pemUgYW4gZXhpc3RpbmcKICAgICAgICAgICAgICAgICAgICAgbGludXgteW9jdG8gcmVjaXBlLgotICAgICAgICAgICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdtb2RpZnlpbmctYW4tZXhpc3RpbmctcmVjaXBlJz5Nb2RpZnlpbmcKLSAgICAgICAgICAgICAgICAgICAgYW4gRXhpc3RpbmcgUmVjaXBlPC9saW5rPiIgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J21vZGlmeWluZy1hbi1leGlzdGluZy1yZWNpcGUnPk1vZGlmeWluZyBhbiBFeGlzdGluZyBSZWNpcGU8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgogICAgICAgICA8L3BhcmE+CkBAIC0xMjMwLDcgKzI2MTcsOCBAQAogICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc2VhcmNoZXMgYWxsIGZvcm1zIG9mIGtlcm5lbAogICAgICAgICAgICAgTWV0YWRhdGEgb24gdGhlIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gc3RhdGVtZW50IHJlZ2FyZGxlc3MKICAgICAgICAgICAgIG9mIHdoZXRoZXIgdGhlIE1ldGFkYXRhIGlzIGluIHRoZSAia2VybmVsLWNhY2hlIiwgc3lzdGVtIGtlcm5lbAotICAgICAgICAgICAgTWV0YWRhdGEsIG9yIGEgcmVjaXBlLXNwYWNlIE1ldGFkYXRhLgorICAgICAgICAgICAgTWV0YWRhdGEsIG9yIGEgcmVjaXBlLXNwYWNlIE1ldGFkYXRhIChpLmUuIHBhcnQgb2YgdGhlIGtlcm5lbAorICAgICAgICAgICAgcmVjaXBlKS4KICAgICAgICAgICAgIFNlZSB0aGUKICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdrZXJuZWwtbWV0YWRhdGEtbG9jYXRpb24nPktlcm5lbCBNZXRhZGF0YSBMb2NhdGlvbjwvbGluaz4iCiAgICAgICAgICAgICBzZWN0aW9uIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgpAQCAtMTI1Myw2ICsyNjQxLDcgQEAKICAgICAgICAgICAgIHRvIHRoZSBidWlsZC4KICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5DcmVhdGUgdGhlIEZlYXR1cmUgRmlsZTo8L2VtcGhhc2lzPgogICAgICAgICAgICAgICAgICAgICBDcmVhdGUgYSA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+IGZpbGUgYW5kIGxvY2F0ZSBpdAogICAgICAgICAgICAgICAgICAgICBqdXN0IGFzIHlvdSB3b3VsZCBhbnkgb3RoZXIgcGF0Y2ggZmlsZSwKICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jZmc8L2ZpbGVuYW1lPiBmaWxlLCBvciBmZXRjaGVyIGl0ZW0KQEAgLTEyOTUsNiArMjY4NCw3IEBACiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50ZXN0LmNmZzwvZmlsZW5hbWU+LgogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5BZGQgdGhlIEZlYXR1cmUgRmlsZSB0byA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CiAgICAgICAgICAgICAgICAgICAgIEFkZCB0aGUgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiBmaWxlIHRvIHRoZQogICAgICAgICAgICAgICAgICAgICByZWNpcGUncyA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHN0YXRlbWVudDoKICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgpAQCAtMTMwNCw3ICsyNjk0LDkgQEAKICAgICAgICAgICAgICAgICAgICAgcGF0aCBpcyBhcHBlbmRlZCB0byB0aGUgZXhpc3RpbmcgcGF0aC4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICBTcGVjaWZ5IHRoZSBmZWF0dXJlIGFzIGEga2VybmVsIGZlYXR1cmU6CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5TcGVjaWZ5IHRoZSBGZWF0dXJlIGFzIGEgS2VybmVsIEZlYXR1cmU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+S0VSTkVMX0ZFQVRVUkVTPC9maWxlbmFtZT4gc3RhdGVtZW50CisgICAgICAgICAgICAgICAgICAgIHRvIHNwZWNpZnkgdGhlIGZlYXR1cmUgYXMgYSBrZXJuZWwgZmVhdHVyZToKICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICBLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiB0ZXN0LnNjYyIKICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWNvbmNlcHRzLWFwcHgueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWNvbmNlcHRzLWFwcHgueG1sCmluZGV4IGFjOTE3NDkuLmZiZWNjMTMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1jb25jZXB0cy1hcHB4LnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtY29uY2VwdHMtYXBweC54bWwKQEAgLTcsMjQ1ICs3LDYxMyBAQAogCiAgICAgPHNlY3Rpb24gaWQ9J2tlcm5lbC1iaWctcGljdHVyZSc+CiAgICAgICAgIDx0aXRsZT5Zb2N0byBQcm9qZWN0IEtlcm5lbCBEZXZlbG9wbWVudCBhbmQgTWFpbnRlbmFuY2U8L3RpdGxlPgorCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgS2VybmVscyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgWW9jdG8gUHJvamVjdCwgbGlrZSBvdGhlciBrZXJuZWxzLCBhcmUgYmFzZWQgb2ZmIHRoZSBMaW51eAotICAgICAgICAgICAga2VybmVsIHJlbGVhc2VzIGZyb20gPHVsaW5rIHVybD0naHR0cDovL3d3dy5rZXJuZWwub3JnJz48L3VsaW5rPi4KLSAgICAgICAgICAgIEF0IHRoZSBiZWdpbm5pbmcgb2YgYSBtYWpvciBkZXZlbG9wbWVudCBjeWNsZSwgdGhlIFlvY3RvIFByb2plY3QgdGVhbQotICAgICAgICAgICAgY2hvb3NlcyBpdHMga2VybmVsIGJhc2VkIG9uIGZhY3RvcnMgc3VjaCBhcyByZWxlYXNlIHRpbWluZywgdGhlIGFudGljaXBhdGVkIHJlbGVhc2UKLSAgICAgICAgICAgIHRpbWluZyBvZiBmaW5hbCB1cHN0cmVhbSA8ZmlsZW5hbWU+a2VybmVsLm9yZzwvZmlsZW5hbWU+IHZlcnNpb25zLCBhbmQgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgS2VybmVscyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgWW9jdG8gUHJvamVjdCAoWW9jdG8gTGludXgga2VybmVscyksCisgICAgICAgICAgICBsaWtlIG90aGVyIGtlcm5lbHMsIGFyZSBiYXNlZCBvZmYgdGhlIExpbnV4IGtlcm5lbCByZWxlYXNlcyBmcm9tCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3Lmtlcm5lbC5vcmcnPjwvdWxpbms+LgorICAgICAgICAgICAgQXQgdGhlIGJlZ2lubmluZyBvZiBhIG1ham9yIExpbnV4IGtlcm5lbCBkZXZlbG9wbWVudCBjeWNsZSwgdGhlCisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHRlYW0gY2hvb3NlcyBhIExpbnV4IGtlcm5lbCBiYXNlZCBvbiBmYWN0b3JzIHN1Y2ggYXMKKyAgICAgICAgICAgIHJlbGVhc2UgdGltaW5nLCB0aGUgYW50aWNpcGF0ZWQgcmVsZWFzZSB0aW1pbmcgb2YgZmluYWwgdXBzdHJlYW0KKyAgICAgICAgICAgIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gdmVyc2lvbnMsIGFuZCBZb2N0byBQcm9qZWN0CiAgICAgICAgICAgICBmZWF0dXJlIHJlcXVpcmVtZW50cy4KLSAgICAgICAgICAgIFR5cGljYWxseSwgdGhlIGtlcm5lbCBjaG9zZW4gaXMgaW4gdGhlCi0gICAgICAgICAgICBmaW5hbCBzdGFnZXMgb2YgZGV2ZWxvcG1lbnQgYnkgdGhlIGNvbW11bml0eS4KLSAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB0aGUga2VybmVsIGlzIGluIHRoZSByZWxlYXNlCi0gICAgICAgICAgICBjYW5kaWRhdGUgb3IgInJjIiBwaGFzZSBhbmQgbm90IHlldCBhIGZpbmFsIHJlbGVhc2UuCi0gICAgICAgICAgICBCdXQsIGJ5IGJlaW5nIGluIHRoZSBmaW5hbCBzdGFnZXMgb2YgZXh0ZXJuYWwgZGV2ZWxvcG1lbnQsIHRoZSB0ZWFtIGtub3dzIHRoYXQgdGhlCi0gICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsLm9yZzwvZmlsZW5hbWU+IGZpbmFsIHJlbGVhc2Ugd2lsbCBjbGVhcmx5IGJlIHdpdGhpbiB0aGUgZWFybHkgc3RhZ2VzIG9mCi0gICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCB3aW5kb3cuCisgICAgICAgICAgICBUeXBpY2FsbHksIHRoZSBMaW51eCBrZXJuZWwgY2hvc2VuIGlzIGluIHRoZSBmaW5hbCBzdGFnZXMgb2YKKyAgICAgICAgICAgIGRldmVsb3BtZW50IGJ5IHRoZSBMaW51eCBjb21tdW5pdHkuCisgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgdGhlIExpbnV4IGtlcm5lbCBpcyBpbiB0aGUgcmVsZWFzZSBjYW5kaWRhdGUKKyAgICAgICAgICAgIG9yICJyYyIgcGhhc2UgYW5kIGhhcyB5ZXQgdG8gcmVhY2ggZmluYWwgcmVsZWFzZS4KKyAgICAgICAgICAgIEJ1dCwgYnkgYmVpbmcgaW4gdGhlIGZpbmFsIHN0YWdlcyBvZiBleHRlcm5hbCBkZXZlbG9wbWVudCwgdGhlCisgICAgICAgICAgICB0ZWFtIGtub3dzIHRoYXQgdGhlIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gZmluYWwgcmVsZWFzZQorICAgICAgICAgICAgd2lsbCBjbGVhcmx5IGJlIHdpdGhpbiB0aGUgZWFybHkgc3RhZ2VzIG9mIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICBkZXZlbG9wbWVudCB3aW5kb3cuCiAgICAgICAgIDwvcGFyYT4KKwogICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoaXMgYmFsYW5jZSBhbGxvd3MgdGhlIHRlYW0gdG8gZGVsaXZlciB0aGUgbW9zdCB1cC10by1kYXRlIGtlcm5lbAotICAgICAgICAgICAgcG9zc2libGUsIHdoaWxlIHN0aWxsIGVuc3VyaW5nIHRoYXQgdGhlIHRlYW0gaGFzIGEgc3RhYmxlIG9mZmljaWFsIHJlbGVhc2UgZm9yCi0gICAgICAgICAgICB0aGUgYmFzZWxpbmUgTGludXgga2VybmVsIHZlcnNpb24uCisgICAgICAgICAgICBUaGlzIGJhbGFuY2UgYWxsb3dzIHRoZSBZb2N0byBQcm9qZWN0IHRlYW0gdG8gZGVsaXZlciB0aGUgbW9zdAorICAgICAgICAgICAgdXAtdG8tZGF0ZSBZb2N0byBMaW51eCBrZXJuZWwgcG9zc2libGUsIHdoaWxlIHN0aWxsIGVuc3VyaW5nIHRoYXQKKyAgICAgICAgICAgIHRoZSB0ZWFtIGhhcyBhIHN0YWJsZSBvZmZpY2lhbCByZWxlYXNlIGZvciB0aGUgYmFzZWxpbmUgTGludXgKKyAgICAgICAgICAgIGtlcm5lbCB2ZXJzaW9uLgogICAgICAgICA8L3BhcmE+CisKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgdWx0aW1hdGUgc291cmNlIGZvciBrZXJuZWxzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBZb2N0byBQcm9qZWN0IGFyZSByZWxlYXNlZCBrZXJuZWxzCi0gICAgICAgICAgICBmcm9tIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4uCi0gICAgICAgICAgICBJbiBhZGRpdGlvbiB0byBhIGZvdW5kYXRpb25hbCBrZXJuZWwgZnJvbSA8ZmlsZW5hbWU+a2VybmVsLm9yZzwvZmlsZW5hbWU+LCB0aGUKLSAgICAgICAgICAgIGtlcm5lbHMgYXZhaWxhYmxlIGNvbnRhaW4gYSBtaXggb2YgaW1wb3J0YW50IG5ldyBtYWlubGluZQotICAgICAgICAgICAgZGV2ZWxvcG1lbnRzLCBub24tbWFpbmxpbmUgZGV2ZWxvcG1lbnRzICh3aGVuIHRoZXJlIGlzIG5vIGFsdGVybmF0aXZlKSwKLSAgICAgICAgICAgIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBkZXZlbG9wbWVudHMsCi0gICAgICAgICAgICBhbmQgY3VzdG9tIGZlYXR1cmVzLgotICAgICAgICAgICAgVGhlc2UgYWRkaXRpb25zIHJlc3VsdCBpbiBhIGNvbW1lcmNpYWxseSByZWxlYXNlZCBZb2N0byBQcm9qZWN0IExpbnV4IGtlcm5lbCB0aGF0IGNhdGVycwotICAgICAgICAgICAgdG8gc3BlY2lmaWMgZW1iZWRkZWQgZGVzaWduZXIgbmVlZHMgZm9yIHRhcmdldGVkIGhhcmR3YXJlLgorICAgICAgICAgICAgQXMgaW1wbGllZCBlYXJsaWVyLCB0aGUgdWx0aW1hdGUgc291cmNlIGZvciBZb2N0byBMaW51eCBrZXJuZWxzCisgICAgICAgICAgICBhcmUgcmVsZWFzZWQga2VybmVscyBmcm9tIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4uCisgICAgICAgICAgICBJbiBhZGRpdGlvbiB0byBhIGZvdW5kYXRpb25hbCBrZXJuZWwgZnJvbQorICAgICAgICAgICAgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiwgdGhlIGF2YWlsYWJsZSBZb2N0byBMaW51eCBrZXJuZWxzCisgICAgICAgICAgICBjb250YWluIGEgbWl4IG9mIGltcG9ydGFudCBuZXcgbWFpbmxpbmUgZGV2ZWxvcG1lbnRzLCBub24tbWFpbmxpbmUKKyAgICAgICAgICAgIGRldmVsb3BtZW50cyAod2hlbiBubyBhbHRlcm5hdGl2ZSBleGlzdHMpLCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UKKyAgICAgICAgICAgIChCU1ApIGRldmVsb3BtZW50cywgYW5kIGN1c3RvbSBmZWF0dXJlcy4KKyAgICAgICAgICAgIFRoZXNlIGFkZGl0aW9ucyByZXN1bHQgaW4gYSBjb21tZXJjaWFsbHkgcmVsZWFzZWQgWW9jdG8KKyAgICAgICAgICAgIFByb2plY3QgTGludXgga2VybmVsIHRoYXQgY2F0ZXJzIHRvIHNwZWNpZmljIGVtYmVkZGVkIGRlc2lnbmVyCisgICAgICAgICAgICBuZWVkcyBmb3IgdGFyZ2V0ZWQgaGFyZHdhcmUuCiAgICAgICAgIDwvcGFyYT4KKwogICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIE9uY2UgYSBrZXJuZWwgaXMgb2ZmaWNpYWxseSByZWxlYXNlZCwgdGhlIFlvY3RvIFByb2plY3QgdGVhbSBnb2VzIGludG8KLSAgICAgICAgICAgIHRoZWlyIG5leHQgZGV2ZWxvcG1lbnQgY3ljbGUsIG9yIHVwd2FyZCByZXZpc2lvbiAodXByZXYpIGN5Y2xlLCB3aGlsZSBzdGlsbAotICAgICAgICAgICAgY29udGludWluZyBtYWludGVuYW5jZSBvbiB0aGUgcmVsZWFzZWQga2VybmVsLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGEgd2ViIGludGVyZmFjZSB0byB0aGUgWW9jdG8gTGludXgga2VybmVscyBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3NvdXJjZS1yZXBvc2l0b3JpZXMnPlNvdXJjZSBSZXBvc2l0b3JpZXM8L3VsaW5rPgorICAgICAgICAgICAgYXQKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOyc+PC91bGluaz4uCisgICAgICAgICAgICBJZiB5b3UgbG9vayBhdCB0aGUgaW50ZXJmYWNlLCB5b3Ugd2lsbCBzZWUgdG8gdGhlIGxlZnQgYQorICAgICAgICAgICAgZ3JvdXBpbmcgb2YgR2l0IHJlcG9zaXRvcmllcyB0aXRsZWQgIllvY3RvIExpbnV4IEtlcm5lbCIuCisgICAgICAgICAgICBXaXRoaW4gdGhpcyBncm91cCwgeW91IHdpbGwgZmluZCBzZXZlcmFsIExpbnV4IFlvY3RvIGtlcm5lbHMKKyAgICAgICAgICAgIGRldmVsb3BlZCBhbmQgaW5jbHVkZWQgd2l0aCBZb2N0byBQcm9qZWN0IHJlbGVhc2VzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+bGludXgteW9jdG8tNC4xPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHN0YWJsZSBZb2N0byBQcm9qZWN0IGtlcm5lbCB0byB1c2Ugd2l0aCB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgUHJvamVjdCBSZWxlYXNlIDIuMC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBrZXJuZWwgaXMgYmFzZWQgb24gdGhlIExpbnV4IDQuMSByZWxlYXNlZCBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5saW51eC15b2N0by00LjQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3RhYmxlIFlvY3RvIFByb2plY3Qga2VybmVsIHRvIHVzZSB3aXRoIHRoZSBZb2N0bworICAgICAgICAgICAgICAgICAgICBQcm9qZWN0IFJlbGVhc2UgMi4xLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGtlcm5lbCBpcyBiYXNlZCBvbiB0aGUgTGludXggNC40IHJlbGVhc2VkIGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPmxpbnV4LXlvY3RvLTQuNjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEEgdGVtcG9yYXJ5IGtlcm5lbCB0aGF0IGlzIG5vdCB0aWVkIHRvIGFueSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIHJlbGVhc2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5saW51eC15b2N0by00Ljg8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3RhYmxlIHlvY3RvIFByb2plY3Qga2VybmVsIHRvIHVzZSB3aXRoIHRoZSBZb2N0bworICAgICAgICAgICAgICAgICAgICBQcm9qZWN0IFJlbGVhc2UgMi4yLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+bGludXgteW9jdG8tNC45PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHN0YWJsZSBZb2N0byBQcm9qZWN0IGtlcm5lbCB0byB1c2Ugd2l0aCB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgUHJvamVjdCBSZWxlYXNlIDIuMy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBrZXJuZWwgaXMgYmFzZWQgb24gdGhlIExpbnV4IDQuOSByZWxlYXNlZCBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5saW51eC15b2N0by00LjEwPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgc3RhYmxlIFlvY3RvIFByb2plY3Qga2VybmVsIHRvIHVzZSB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IFJlbGVhc2UgMi4zLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGtlcm5lbCBpcyBiYXNlZCBvbiB0aGUgTGludXggNC4xMCByZWxlYXNlZCBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5saW51eC15b2N0by00LjEyPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgc3RhYmxlIFlvY3RvIFByb2plY3Qga2VybmVsIHRvIHVzZSB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IFJlbGVhc2UgMi40LgorICAgICAgICAgICAgICAgICAgICBUaGlzIGtlcm5lbCBpcyBiYXNlZCBvbiB0aGUgTGludXggNC4xMiByZWxlYXNlZCBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT55b2N0by1rZXJuZWwtY2FjaGU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLWNhY2hlPC9maWxlbmFtZT4gY29udGFpbnMKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hlcyBhbmQgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBsaW51eC15b2N0byBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgdHJlZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyByZXBvc2l0b3J5IGlzIHVzZWZ1bCB3aGVuIHdvcmtpbmcgb24gdGhlIGxpbnV4LXlvY3RvCisgICAgICAgICAgICAgICAgICAgIGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyAiQWR2YW5jZWQgS2VybmVsIE1ldGFkYXRhIiwKKyAgICAgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0na2VybmVsLWRldi1hZHZhbmNlZCc+V29ya2luZyBXaXRoIEFkdmFuY2VkIE1ldGFkYXRhICg8ZmlsZW5hbWU+eW9jdG8ta2VybmVsLWNhY2hlPC9maWxlbmFtZT4pPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgQ2hhcHRlci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPmxpbnV4LXlvY3RvLWRldjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEEgZGV2ZWxvcG1lbnQga2VybmVsIGJhc2VkIG9uIHRoZSBsYXRlc3QgdXBzdHJlYW0gcmVsZWFzZQorICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPG5vdGU+PHRpdGxlPk5vdGVzPC90aXRsZT4KKyAgICAgICAgICAgICAgICBMb25nIFRlcm0gU3VwcG9ydCBJbml0aWF0aXZlIChMVFNJKSBmb3IgWW9jdG8gTGludXgKKyAgICAgICAgICAgICAgICBrZXJuZWxzIGlzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIFlvY3RvIFByb2plY3QgcmVsZWFzZXMgMS43LCAxLjgsIGFuZCAyLjAsCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgTFRTSSBrZXJuZWwgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIFlvY3RvIFByb2plY3QgcmVsZWFzZXMgMi4xLCAyLjIsIGFuZCAyLjMsCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgTFRTSSBrZXJuZWwgaXMgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTQuMTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBZb2N0byBQcm9qZWN0IHJlbGVhc2UgMi40LCB0aGUgTFRTSSBrZXJuZWwgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by00Ljk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by00LjQ8L2ZpbGVuYW1lPiBpcyBhbiBMVFMKKyAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIGEgWW9jdG8gTGludXgga2VybmVsIGlzIG9mZmljaWFsbHkgcmVsZWFzZWQsIHRoZSBZb2N0bworICAgICAgICAgICAgUHJvamVjdCB0ZWFtIGdvZXMgaW50byB0aGVpciBuZXh0IGRldmVsb3BtZW50IGN5Y2xlLCBvciB1cHdhcmQKKyAgICAgICAgICAgIHJldmlzaW9uICh1cHJldikgY3ljbGUsIHdoaWxlIHN0aWxsIGNvbnRpbnVpbmcgbWFpbnRlbmFuY2Ugb24gdGhlCisgICAgICAgICAgICByZWxlYXNlZCBrZXJuZWwuCiAgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZSBtb3N0IHN1c3RhaW5hYmxlIGFuZCBzdGFibGUgd2F5Ci0gICAgICAgICAgICB0byBpbmNsdWRlIGZlYXR1cmUgZGV2ZWxvcG1lbnQgdXBzdHJlYW0gaXMgdGhyb3VnaCBhIGtlcm5lbCB1cHJldiBwcm9jZXNzLgotICAgICAgICAgICAgQmFjay1wb3J0aW5nIGh1bmRyZWRzIG9mIGluZGl2aWR1YWwgZml4ZXMgYW5kIG1pbm9yIGZlYXR1cmVzIGZyb20gdmFyaW91cwotICAgICAgICAgICAga2VybmVsIHZlcnNpb25zIGlzIG5vdCBzdXN0YWluYWJsZSBhbmQgY2FuIGVhc2lseSBjb21wcm9taXNlIHF1YWxpdHkuCisgICAgICAgICAgICB0byBpbmNsdWRlIGZlYXR1cmUgZGV2ZWxvcG1lbnQgdXBzdHJlYW0gaXMgdGhyb3VnaCBhIGtlcm5lbCB1cHJldgorICAgICAgICAgICAgcHJvY2Vzcy4KKyAgICAgICAgICAgIEJhY2stcG9ydGluZyBodW5kcmVkcyBvZiBpbmRpdmlkdWFsIGZpeGVzIGFuZCBtaW5vciBmZWF0dXJlcyBmcm9tCisgICAgICAgICAgICB2YXJpb3VzIGtlcm5lbCB2ZXJzaW9ucyBpcyBub3Qgc3VzdGFpbmFibGUgYW5kIGNhbiBlYXNpbHkKKyAgICAgICAgICAgIGNvbXByb21pc2UgcXVhbGl0eS4KICAgICAgICAgPC9wYXJhPgorCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgRHVyaW5nIHRoZSB1cHJldiBjeWNsZSwgdGhlIFlvY3RvIFByb2plY3QgdGVhbSB1c2VzIGFuIG9uZ29pbmcgYW5hbHlzaXMgb2YKLSAgICAgICAgICAgIGtlcm5lbCBkZXZlbG9wbWVudCwgQlNQIHN1cHBvcnQsIGFuZCByZWxlYXNlIHRpbWluZyB0byBzZWxlY3QgdGhlIGJlc3QKLSAgICAgICAgICAgIHBvc3NpYmxlIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gdmVyc2lvbi4KLSAgICAgICAgICAgIFRoZSB0ZWFtIGNvbnRpbnVhbGx5IG1vbml0b3JzIGNvbW11bml0eSBrZXJuZWwKLSAgICAgICAgICAgIGRldmVsb3BtZW50IHRvIGxvb2sgZm9yIHNpZ25pZmljYW50IGZlYXR1cmVzIG9mIGludGVyZXN0LgotICAgICAgICAgICAgVGhlIHRlYW0gZG9lcyBjb25zaWRlciBiYWNrLXBvcnRpbmcgbGFyZ2UgZmVhdHVyZXMgaWYgdGhleSBoYXZlIGEgc2lnbmlmaWNhbnQgYWR2YW50YWdlLgotICAgICAgICAgICAgVXNlciBvciBjb21tdW5pdHkgZGVtYW5kIGNhbiBhbHNvIHRyaWdnZXIgYSBiYWNrLXBvcnQgb3IgY3JlYXRpb24gb2YgbmV3Ci0gICAgICAgICAgICBmdW5jdGlvbmFsaXR5IGluIHRoZSBZb2N0byBQcm9qZWN0IGJhc2VsaW5lIGtlcm5lbCBkdXJpbmcgdGhlIHVwcmV2IGN5Y2xlLgorICAgICAgICAgICAgRHVyaW5nIHRoZSB1cHJldiBjeWNsZSwgdGhlIFlvY3RvIFByb2plY3QgdGVhbSB1c2VzIGFuIG9uZ29pbmcKKyAgICAgICAgICAgIGFuYWx5c2lzIG9mIExpbnV4IGtlcm5lbCBkZXZlbG9wbWVudCwgQlNQIHN1cHBvcnQsIGFuZCByZWxlYXNlCisgICAgICAgICAgICB0aW1pbmcgdG8gc2VsZWN0IHRoZSBiZXN0IHBvc3NpYmxlIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4KKyAgICAgICAgICAgIExpbnV4IGtlcm5lbCB2ZXJzaW9uIG9uIHdoaWNoIHRvIGJhc2Ugc3Vic2VxdWVudCBZb2N0byBMaW51eAorICAgICAgICAgICAga2VybmVsIGRldmVsb3BtZW50LgorICAgICAgICAgICAgVGhlIHRlYW0gY29udGludWFsbHkgbW9uaXRvcnMgTGludXggY29tbXVuaXR5IGtlcm5lbCBkZXZlbG9wbWVudAorICAgICAgICAgICAgdG8gbG9vayBmb3Igc2lnbmlmaWNhbnQgZmVhdHVyZXMgb2YgaW50ZXJlc3QuCisgICAgICAgICAgICBUaGUgdGVhbSBkb2VzIGNvbnNpZGVyIGJhY2stcG9ydGluZyBsYXJnZSBmZWF0dXJlcyBpZiB0aGV5IGhhdmUgYQorICAgICAgICAgICAgc2lnbmlmaWNhbnQgYWR2YW50YWdlLgorICAgICAgICAgICAgVXNlciBvciBjb21tdW5pdHkgZGVtYW5kIGNhbiBhbHNvIHRyaWdnZXIgYSBiYWNrLXBvcnQgb3IgY3JlYXRpb24KKyAgICAgICAgICAgIG9mIG5ldyBmdW5jdGlvbmFsaXR5IGluIHRoZSBZb2N0byBQcm9qZWN0IGJhc2VsaW5lIGtlcm5lbCBkdXJpbmcKKyAgICAgICAgICAgIHRoZSB1cHJldiBjeWNsZS4KICAgICAgICAgPC9wYXJhPgorCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgR2VuZXJhbGx5IHNwZWFraW5nLCBldmVyeSBuZXcga2VybmVsIGJvdGggYWRkcyBmZWF0dXJlcyBhbmQgaW50cm9kdWNlcyBuZXcgYnVncy4KLSAgICAgICAgICAgIFRoZXNlIGNvbnNlcXVlbmNlcyBhcmUgdGhlIGJhc2ljIHByb3BlcnRpZXMgb2YgdXBzdHJlYW0ga2VybmVsIGRldmVsb3BtZW50IGFuZCBhcmUKLSAgICAgICAgICAgIG1hbmFnZWQgYnkgdGhlIFlvY3RvIFByb2plY3QgdGVhbSdzIGtlcm5lbCBzdHJhdGVneS4KLSAgICAgICAgICAgIEl0IGlzIHRoZSBZb2N0byBQcm9qZWN0IHRlYW0ncyBwb2xpY3kgdG8gbm90IGJhY2stcG9ydCBtaW5vciBmZWF0dXJlcyB0byB0aGUgcmVsZWFzZWQga2VybmVsLgotICAgICAgICAgICAgVGhleSBvbmx5IGNvbnNpZGVyIGJhY2stcG9ydGluZyBzaWduaWZpY2FudCB0ZWNobm9sb2dpY2FsIGp1bXBzIC0gYW5kLCB0aGF0IGlzIGRvbmUKLSAgICAgICAgICAgIGFmdGVyIGEgY29tcGxldGUgZ2FwIGFuYWx5c2lzLgotICAgICAgICAgICAgVGhlIHJlYXNvbiBmb3IgdGhpcyBwb2xpY3kgaXMgdGhhdCBiYWNrLXBvcnRpbmcgYW55IHNtYWxsIHRvIG1lZGl1bSBzaXplZCBjaGFuZ2UKLSAgICAgICAgICAgIGZyb20gYW4gZXZvbHZpbmcga2VybmVsIGNhbiBlYXNpbHkgY3JlYXRlIG1pc21hdGNoZXMsIGluY29tcGF0aWJpbGl0aWVzIGFuZCB2ZXJ5Ci0gICAgICAgICAgICBzdWJ0bGUgZXJyb3JzLgorICAgICAgICAgICAgR2VuZXJhbGx5IHNwZWFraW5nLCBldmVyeSBuZXcgTGludXgga2VybmVsIGJvdGggYWRkcyBmZWF0dXJlcyBhbmQKKyAgICAgICAgICAgIGludHJvZHVjZXMgbmV3IGJ1Z3MuCisgICAgICAgICAgICBUaGVzZSBjb25zZXF1ZW5jZXMgYXJlIHRoZSBiYXNpYyBwcm9wZXJ0aWVzIG9mIHVwc3RyZWFtCisgICAgICAgICAgICBMaW51eCBrZXJuZWwgZGV2ZWxvcG1lbnQgYW5kIGFyZSBtYW5hZ2VkIGJ5IHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICB0ZWFtJ3MgWW9jdG8gTGludXgga2VybmVsIGRldmVsb3BtZW50IHN0cmF0ZWd5LgorICAgICAgICAgICAgSXQgaXMgdGhlIFlvY3RvIFByb2plY3QgdGVhbSdzIHBvbGljeSB0byBub3QgYmFjay1wb3J0IG1pbm9yCisgICAgICAgICAgICBmZWF0dXJlcyB0byB0aGUgcmVsZWFzZWQgWW9jdG8gTGludXgga2VybmVsLgorICAgICAgICAgICAgVGhleSBvbmx5IGNvbnNpZGVyIGJhY2stcG9ydGluZyBzaWduaWZpY2FudCB0ZWNobm9sb2dpY2FsCisgICAgICAgICAgICBqdW1wcyAmZGFzaDsgYW5kLCB0aGF0IGlzIGRvbmUgYWZ0ZXIgYSBjb21wbGV0ZSBnYXAgYW5hbHlzaXMuCisgICAgICAgICAgICBUaGUgcmVhc29uIGZvciB0aGlzIHBvbGljeSBpcyB0aGF0IGJhY2stcG9ydGluZyBhbnkgc21hbGwgdG8KKyAgICAgICAgICAgIG1lZGl1bSBzaXplZCBjaGFuZ2UgZnJvbSBhbiBldm9sdmluZyBMaW51eCBrZXJuZWwgY2FuIGVhc2lseQorICAgICAgICAgICAgY3JlYXRlIG1pc21hdGNoZXMsIGluY29tcGF0aWJpbGl0aWVzIGFuZCB2ZXJ5IHN1YnRsZSBlcnJvcnMuCiAgICAgICAgIDwvcGFyYT4KKwogICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZXNlIHBvbGljaWVzIHJlc3VsdCBpbiBib3RoIGEgc3RhYmxlIGFuZCBhIGN1dHRpbmcKLSAgICAgICAgICAgIGVkZ2Uga2VybmVsIHRoYXQgbWl4ZXMgZm9yd2FyZCBwb3J0cyBvZiBleGlzdGluZyBmZWF0dXJlcyBhbmQgc2lnbmlmaWNhbnQgYW5kIGNyaXRpY2FsCi0gICAgICAgICAgICBuZXcgZnVuY3Rpb25hbGl0eS4KLSAgICAgICAgICAgIEZvcndhcmQgcG9ydGluZyBmdW5jdGlvbmFsaXR5IGluIHRoZSBrZXJuZWxzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbAotICAgICAgICAgICAgY2FuIGJlIHRob3VnaHQgb2YgYXMgYSAibWljcm8gdXByZXYuIgotICAgICAgICAgICAgVGhlIG1hbnkg4oCcbWljcm8gdXByZXZz4oCdIHByb2R1Y2UgYSBrZXJuZWwgdmVyc2lvbiB3aXRoIGEgbWl4IG9mCi0gICAgICAgICAgICBpbXBvcnRhbnQgbmV3IG1haW5saW5lLCBub24tbWFpbmxpbmUsIEJTUCBkZXZlbG9wbWVudHMgYW5kIGZlYXR1cmUgaW50ZWdyYXRpb25zLgotICAgICAgICAgICAgVGhpcyBrZXJuZWwgZ2l2ZXMgaW5zaWdodCBpbnRvIG5ldyBmZWF0dXJlcyBhbmQgYWxsb3dzIGZvY3VzZWQKLSAgICAgICAgICAgIGFtb3VudHMgb2YgdGVzdGluZyB0byBiZSBkb25lIG9uIHRoZSBrZXJuZWwsIHdoaWNoIHByZXZlbnRzCi0gICAgICAgICAgICBzdXJwcmlzZXMgd2hlbiBzZWxlY3RpbmcgdGhlIG5leHQgbWFqb3IgdXByZXYuCi0gICAgICAgICAgICBUaGUgcXVhbGl0eSBvZiB0aGVzZSBjdXR0aW5nIGVkZ2Uga2VybmVscyBpcyBldm9sdmluZyBhbmQgdGhlIGtlcm5lbHMgYXJlIHVzZWQgaW4gbGVhZGluZyBlZGdlCi0gICAgICAgICAgICBmZWF0dXJlIGFuZCBCU1AgZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICBUaGUgcG9saWNpZXMgZGVzY3JpYmVkIGluIHRoaXMgc2VjdGlvbiByZXN1bHQgaW4gYm90aCBhIHN0YWJsZQorICAgICAgICAgICAgYW5kIGEgY3V0dGluZyBlZGdlIFlvY3RvIExpbnV4IGtlcm5lbCB0aGF0IG1peGVzIGZvcndhcmQgcG9ydHMgb2YKKyAgICAgICAgICAgIGV4aXN0aW5nIExpbnV4IGtlcm5lbCBmZWF0dXJlcyBhbmQgc2lnbmlmaWNhbnQgYW5kIGNyaXRpY2FsIG5ldworICAgICAgICAgICAgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgICAgIEZvcndhcmQgcG9ydGluZyBMaW51eCBrZXJuZWwgZnVuY3Rpb25hbGl0eSBpbnRvIHRoZSBZb2N0byBMaW51eAorICAgICAgICAgICAga2VybmVscyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgWW9jdG8gUHJvamVjdCBjYW4gYmUgdGhvdWdodCBvZiBhcworICAgICAgICAgICAgYSAibWljcm8gdXByZXYuIgorICAgICAgICAgICAgVGhlIG1hbnkg4oCcbWljcm8gdXByZXZz4oCdIHByb2R1Y2UgYSBZb2N0byBMaW51eCBrZXJuZWwgdmVyc2lvbiB3aXRoCisgICAgICAgICAgICBhIG1peCBvZiBpbXBvcnRhbnQgbmV3IG1haW5saW5lLCBub24tbWFpbmxpbmUsIEJTUCBkZXZlbG9wbWVudHMKKyAgICAgICAgICAgIGFuZCBmZWF0dXJlIGludGVncmF0aW9ucy4KKyAgICAgICAgICAgIFRoaXMgWW9jdG8gTGludXgga2VybmVsIGdpdmVzIGluc2lnaHQgaW50byBuZXcgZmVhdHVyZXMgYW5kCisgICAgICAgICAgICBhbGxvd3MgZm9jdXNlZCBhbW91bnRzIG9mIHRlc3RpbmcgdG8gYmUgZG9uZSBvbiB0aGUga2VybmVsLAorICAgICAgICAgICAgd2hpY2ggcHJldmVudHMgc3VycHJpc2VzIHdoZW4gc2VsZWN0aW5nIHRoZSBuZXh0IG1ham9yIHVwcmV2LgorICAgICAgICAgICAgVGhlIHF1YWxpdHkgb2YgdGhlc2UgY3V0dGluZyBlZGdlIFlvY3RvIExpbnV4IGtlcm5lbHMgaXMgZXZvbHZpbmcKKyAgICAgICAgICAgIGFuZCB0aGUga2VybmVscyBhcmUgdXNlZCBpbiBsZWFkaW5nIGVkZ2UgZmVhdHVyZSBhbmQgQlNQCisgICAgICAgICAgICBkZXZlbG9wbWVudC4KICAgICAgICAgPC9wYXJhPgogICAgIDwvc2VjdGlvbj4KIAotICAgIDxzZWN0aW9uIGlkPSdrZXJuZWwtYXJjaGl0ZWN0dXJlJz4KLSAgICAgICAgPHRpdGxlPktlcm5lbCBBcmNoaXRlY3R1cmU8L3RpdGxlPgorICAgIDxzZWN0aW9uIGlkPSd5b2N0by1saW51eC1rZXJuZWwtYXJjaGl0ZWN0dXJlLWFuZC1icmFuY2hpbmctc3RyYXRlZ2llcyc+CisgICAgICAgIDx0aXRsZT5Zb2N0byBMaW51eCBLZXJuZWwgQXJjaGl0ZWN0dXJlIGFuZCBCcmFuY2hpbmcgU3RyYXRlZ2llczwvdGl0bGU+CisKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGtlcm5lbHMgYXZhaWxhYmxlIHRocm91Z2ggdGhlCi0gICAgICAgICAgICBZb2N0byBQcm9qZWN0IGFuZCBwcm92aWRlcyBpbmZvcm1hdGlvbgotICAgICAgICAgICAgb24gdGhlIG1lY2hhbmlzbXMgdXNlZCB0byBhY2hpZXZlIHRoYXQgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgQXMgbWVudGlvbmVkIGVhcmxpZXIsIGEga2V5IGdvYWwgb2YgdGhlIFlvY3RvIFByb2plY3QgaXMKKyAgICAgICAgICAgIHRvIHByZXNlbnQgdGhlIGRldmVsb3BlciB3aXRoIGEga2VybmVsIHRoYXQgaGFzIGEgY2xlYXIgYW5kCisgICAgICAgICAgICBjb250aW51b3VzIGhpc3RvcnkgdGhhdCBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLgorICAgICAgICAgICAgVGhlIGFyY2hpdGVjdHVyZSBhbmQgbWVjaGFuaXNtcywgaW4gcGFydGljdWxhciB0aGUgYnJhbmNoaW5nCisgICAgICAgICAgICBzdHJhdGVnaWVzLCB1c2VkIGFjaGlldmUgdGhhdCBnb2FsIGluIGEgbWFubmVyIHNpbWlsYXIgdG8KKyAgICAgICAgICAgIHVwc3RyZWFtIExpbnV4IGtlcm5lbCBkZXZlbG9wbWVudCBpbgorICAgICAgICAgICAgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPi4KICAgICAgICAgPC9wYXJhPgogCi0gICAgICAgIDxzZWN0aW9uIGlkPSdhcmNoaXRlY3R1cmUtb3ZlcnZpZXcnPgotICAgICAgICAgICAgPHRpdGxlPk92ZXJ2aWV3PC90aXRsZT4KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEFzIG1lbnRpb25lZCBlYXJsaWVyLCBhIGtleSBnb2FsIG9mIHRoZSBZb2N0byBQcm9qZWN0IGlzIHRvIHByZXNlbnQgdGhlCi0gICAgICAgICAgICAgICAgZGV2ZWxvcGVyIHdpdGgKLSAgICAgICAgICAgICAgICBhIGtlcm5lbCB0aGF0IGhhcyBhIGNsZWFyIGFuZCBjb250aW51b3VzIGhpc3RvcnkgdGhhdCBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLgotICAgICAgICAgICAgICAgIFRoZSBhcmNoaXRlY3R1cmUgYW5kIG1lY2hhbmlzbXMgdXNlZCBhY2hpZXZlIHRoYXQgZ29hbCBpbiBhIG1hbm5lciBzaW1pbGFyIHRvIHRoZQotICAgICAgICAgICAgICAgIHVwc3RyZWFtIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4uCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBZb3UgY2FuIHRoaW5rIG9mIGEgWW9jdG8gUHJvamVjdCBrZXJuZWwgYXMgY29uc2lzdGluZyBvZiBhIGJhc2VsaW5lIExpbnV4IGtlcm5lbCB3aXRoCi0gICAgICAgICAgICAgICAgYWRkZWQgZmVhdHVyZXMgbG9naWNhbGx5IHN0cnVjdHVyZWQgb24gdG9wIG9mIHRoZSBiYXNlbGluZS4KLSAgICAgICAgICAgICAgICBUaGUgZmVhdHVyZXMgYXJlIHRhZ2dlZCBhbmQgb3JnYW5pemVkIGJ5IHdheSBvZiBhIGJyYW5jaGluZyBzdHJhdGVneSBpbXBsZW1lbnRlZCBieSB0aGUKLSAgICAgICAgICAgICAgICBzb3VyY2UgY29kZSBtYW5hZ2VyIChTQ00pIEdpdC4KLSAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gR2l0IGFzIGFwcGxpZWQgdG8gdGhlIFlvY3RvIFByb2plY3QsIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZ2l0Jz5HaXQ8L3VsaW5rPiIgc2VjdGlvbiBpbiB0aGUKLSAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSByZXN1bHQgaXMgdGhhdCB0aGUgdXNlciBoYXMgdGhlIGFiaWxpdHkgdG8gc2VlIHRoZSBhZGRlZCBmZWF0dXJlcyBhbmQKLSAgICAgICAgICAgICAgICB0aGUgY29tbWl0cyB0aGF0IG1ha2UgdXAgdGhvc2UgZmVhdHVyZXMuCi0gICAgICAgICAgICAgICAgSW4gYWRkaXRpb24gdG8gYmVpbmcgYWJsZSB0byBzZWUgYWRkZWQgZmVhdHVyZXMsIHRoZSB1c2VyIGNhbiBhbHNvIHZpZXcgdGhlIGhpc3Rvcnkgb2Ygd2hhdAotICAgICAgICAgICAgICAgIG1hZGUgdXAgdGhlIGJhc2VsaW5lIGtlcm5lbC4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgaWxsdXN0cmF0aW9uIHNob3dzIHRoZSBjb25jZXB0dWFsIFlvY3RvIFByb2plY3Qga2VybmVsLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2tlcm5lbC1hcmNoaXRlY3R1cmUtb3ZlcnZpZXcucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZT0iMTAwIiAvPgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgSW4gdGhlIGlsbHVzdHJhdGlvbiwgdGhlICJLZXJuZWwub3JnIEJyYW5jaCBQb2ludCIKLSAgICAgICAgICAgICAgICBtYXJrcyB0aGUgc3BlY2lmaWMgc3BvdCAob3IgcmVsZWFzZSkgZnJvbQotICAgICAgICAgICAgICAgIHdoaWNoIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBpcyBjcmVhdGVkLgotICAgICAgICAgICAgICAgIEZyb20gdGhpcyBwb2ludCAidXAiIGluIHRoZSB0cmVlLCBmZWF0dXJlcyBhbmQgZGlmZmVyZW5jZXMgYXJlIG9yZ2FuaXplZCBhbmQgdGFnZ2VkLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlICJZb2N0byBQcm9qZWN0IEJhc2VsaW5lIEtlcm5lbCIgY29udGFpbnMgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIGNvbW1vbiB0byBldmVyeSBrZXJuZWwKLSAgICAgICAgICAgICAgICB0eXBlIGFuZCBCU1AgdGhhdCBpcyBvcmdhbml6ZWQgZnVydGhlciB1cCB0aGUgdHJlZS4KLSAgICAgICAgICAgICAgICBQbGFjaW5nIHRoZXNlIGNvbW1vbiBmZWF0dXJlcyBpbiB0aGUKLSAgICAgICAgICAgICAgICB0cmVlIHRoaXMgd2F5IG1lYW5zIGZlYXR1cmVzIGRvIG5vdCBoYXZlIHRvIGJlIGR1cGxpY2F0ZWQgYWxvbmcgaW5kaXZpZHVhbCBicmFuY2hlcyBvZiB0aGUKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUuCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBGcm9tIHRoZSBZb2N0byBQcm9qZWN0IEJhc2VsaW5lIEtlcm5lbCwgYnJhbmNoIHBvaW50cyByZXByZXNlbnQgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eQotICAgICAgICAgICAgICAgIGZvciBpbmRpdmlkdWFsIEJTUHMgYXMgd2VsbCBhcyByZWFsLXRpbWUga2VybmVscy4KLSAgICAgICAgICAgICAgICBUaGUgaWxsdXN0cmF0aW9uIHJlcHJlc2VudHMgdGhpcyB0aHJvdWdoIHRocmVlIEJTUC1zcGVjaWZpYyBicmFuY2hlcyBhbmQgYSByZWFsLXRpbWUKLSAgICAgICAgICAgICAgICBrZXJuZWwgYnJhbmNoLgotICAgICAgICAgICAgICAgIEVhY2ggYnJhbmNoIHJlcHJlc2VudHMgc29tZSB1bmlxdWUgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIEJTUCBvciBhIHJlYWwtdGltZSBrZXJuZWwuCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUgc3RydWN0dXJlLCB0aGUgcmVhbC10aW1lIGtlcm5lbCBicmFuY2ggaGFzIGNvbW1vbiBmZWF0dXJlcyBmb3IgYWxsCi0gICAgICAgICAgICAgICAgcmVhbC10aW1lIGtlcm5lbHMgYW5kIGNvbnRhaW5zCi0gICAgICAgICAgICAgICAgbW9yZSBicmFuY2hlcyBmb3IgaW5kaXZpZHVhbCBCU1Atc3BlY2lmaWMgcmVhbC10aW1lIGtlcm5lbHMuCi0gICAgICAgICAgICAgICAgVGhlIGlsbHVzdHJhdGlvbiBzaG93cyB0aHJlZSBicmFuY2hlcyBhcyBhbiBleGFtcGxlLgotICAgICAgICAgICAgICAgIEVhY2ggYnJhbmNoIHBvaW50cyB0aGUgd2F5IHRvIHNwZWNpZmljLCB1bmlxdWUgZmVhdHVyZXMgZm9yIGEgcmVzcGVjdGl2ZSByZWFsLXRpbWUKLSAgICAgICAgICAgICAgICBrZXJuZWwgYXMgdGhleSBhcHBseSB0byBhIGdpdmVuIEJTUC4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSByZXN1bHRpbmcgdHJlZSBzdHJ1Y3R1cmUgcHJlc2VudHMgYSBjbGVhciBwYXRoIG9mIG1hcmtlcnMgKG9yIGJyYW5jaGVzKSB0byB0aGUKLSAgICAgICAgICAgICAgICBkZXZlbG9wZXIgdGhhdCwgZm9yIGFsbCBwcmFjdGljYWwgcHVycG9zZXMsIGlzIHRoZSBrZXJuZWwgbmVlZGVkIGZvciBhbnkgZ2l2ZW4gc2V0Ci0gICAgICAgICAgICAgICAgb2YgcmVxdWlyZW1lbnRzLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiB0aGluayBvZiBhIFlvY3RvIExpbnV4IGtlcm5lbCBhcyBjb25zaXN0aW5nIG9mIGEKKyAgICAgICAgICAgIGJhc2VsaW5lIExpbnV4IGtlcm5lbCB3aXRoIGFkZGVkIGZlYXR1cmVzIGxvZ2ljYWxseSBzdHJ1Y3R1cmVkCisgICAgICAgICAgICBvbiB0b3Agb2YgdGhlIGJhc2VsaW5lLgorICAgICAgICAgICAgVGhlIGZlYXR1cmVzIGFyZSB0YWdnZWQgYW5kIG9yZ2FuaXplZCBieSB3YXkgb2YgYSBicmFuY2hpbmcKKyAgICAgICAgICAgIHN0cmF0ZWd5IGltcGxlbWVudGVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0IHRlYW0gdXNpbmcgdGhlCisgICAgICAgICAgICBTb3VyY2UgQ29kZSBNYW5hZ2VyIChTQ00pIEdpdC4KKyAgICAgICAgICAgIDxub3RlPjx0aXRsZT5Ob3RlczwvdGl0bGU+CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgR2l0IGlzIHRoZSBvYnZpb3VzIFNDTSBmb3IgbWVldGluZyB0aGUgWW9jdG8gTGludXgKKyAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbCBvcmdhbml6YXRpb25hbCBhbmQgc3RydWN0dXJhbCBnb2FscyBkZXNjcmliZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoaXMgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIE5vdCBvbmx5IGlzIEdpdCB0aGUgU0NNIGZvciBMaW51eCBrZXJuZWwgZGV2ZWxvcG1lbnQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gYnV0LCBHaXQgY29udGludWVzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdyBpbiBwb3B1bGFyaXR5IGFuZCBzdXBwb3J0cyBtYW55IGRpZmZlcmVudCB3b3JrCisgICAgICAgICAgICAgICAgICAgICAgICAgZmxvd3MsIGZyb250LWVuZHMgYW5kIG1hbmFnZW1lbnQgdGVjaG5pcXVlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgZG9jdW1lbnRhdGlvbiBvbiBHaXQgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQtc2NtLmNvbS9kb2N1bWVudGF0aW9uJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBnZXQgYW4gaW50cm9kdWN0aW9uIHRvIEdpdCBhcyBpdAorICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGllcyB0byB0aGUgWW9jdG8gUHJvamVjdCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNnaXQnPkdpdDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGxhdHRlciByZWZlcmVuY2UgcHJvdmlkZXMgYW4gb3ZlcnZpZXcgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIEdpdCBhbmQgcHJlc2VudHMgYSBtaW5pbWFsIHNldCBvZiBHaXQgY29tbWFuZHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgYWxsb3dzIHlvdSB0byBiZSBmdW5jdGlvbmFsIHVzaW5nIEdpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIGFzIG11Y2gsIG9yIGFzIGxpdHRsZSwgb2Ygd2hhdCBHaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhcyB0byBvZmZlciB0byBhY2NvbXBsaXNoIHdoYXQgeW91IG5lZWQgZm9yIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgZG8gbm90IGhhdmUgdG8gYmUgYSAiR2l0IEV4cGVydCIgaW4gb3JkZXIgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZSBpdCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KIAotICAgICAgICA8c2VjdGlvbiBpZD0nYnJhbmNoaW5nLWFuZC13b3JrZmxvdyc+Ci0gICAgICAgICAgICA8dGl0bGU+QnJhbmNoaW5nIFN0cmF0ZWd5IGFuZCBXb3JrZmxvdzwvdGl0bGU+Ci0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB0ZWFtIGNyZWF0ZXMga2VybmVsIGJyYW5jaGVzIGF0IHBvaW50cyB3aGVyZSBmdW5jdGlvbmFsaXR5IGlzCi0gICAgICAgICAgICAgICAgbm8gbG9uZ2VyIHNoYXJlZCBhbmQgdGh1cywgbmVlZHMgdG8gYmUgaXNvbGF0ZWQuCi0gICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGJvYXJkLXNwZWNpZmljIGluY29tcGF0aWJpbGl0aWVzIHdvdWxkIHJlcXVpcmUgZGlmZmVyZW50IGZ1bmN0aW9uYWxpdHkKLSAgICAgICAgICAgICAgICBhbmQgd291bGQgcmVxdWlyZSBhIGJyYW5jaCB0byBzZXBhcmF0ZSB0aGUgZmVhdHVyZXMuCi0gICAgICAgICAgICAgICAgTGlrZXdpc2UsIGZvciBzcGVjaWZpYyBrZXJuZWwgZmVhdHVyZXMsIHRoZSBzYW1lIGJyYW5jaGluZyBzdHJhdGVneSBpcyB1c2VkLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhpcyBicmFuY2hpbmcgc3RyYXRlZ3kgcmVzdWx0cyBpbiBhIHRyZWUgdGhhdCBoYXMgZmVhdHVyZXMgb3JnYW5pemVkIHRvIGJlIHNwZWNpZmljCi0gICAgICAgICAgICAgICAgZm9yIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSwgc2luZ2xlIGtlcm5lbCB0eXBlcywgb3IgYSBzdWJzZXQgb2Yga2VybmVsIHR5cGVzLgotICAgICAgICAgICAgICAgIFRoaXMgc3RyYXRlZ3kgYWxzbyByZXN1bHRzIGluIG5vdCBoYXZpbmcgdG8gc3RvcmUgdGhlIHNhbWUgZmVhdHVyZSB0d2ljZQotICAgICAgICAgICAgICAgIGludGVybmFsbHkgaW4gdGhlIHRyZWUuCi0gICAgICAgICAgICAgICAgUmF0aGVyLCB0aGUga2VybmVsIHRlYW0gc3RvcmVzIHRoZSB1bmlxdWUgZGlmZmVyZW5jZXMgcmVxdWlyZWQgdG8gYXBwbHkgdGhlCi0gICAgICAgICAgICAgICAgZmVhdHVyZSBvbnRvIHRoZSBrZXJuZWwgdHlwZSBpbiBxdWVzdGlvbi4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgdGVhbSBzdHJpdmVzIHRvIHBsYWNlIGZlYXR1cmVzIGluIHRoZSB0cmVlIHN1Y2ggdGhhdCB0aGV5IGNhbiBiZQotICAgICAgICAgICAgICAgICAgICBzaGFyZWQgYnkgYWxsIGJvYXJkcyBhbmQga2VybmVsIHR5cGVzIHdoZXJlIHBvc3NpYmxlLgotICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBkdXJpbmcgZGV2ZWxvcG1lbnQgY3ljbGVzIG9yIHdoZW4gbGFyZ2UgZmVhdHVyZXMgYXJlIG1lcmdlZCwKLSAgICAgICAgICAgICAgICAgICAgdGhlIHRlYW0gY2Fubm90IGFsd2F5cyBmb2xsb3cgdGhpcyBwcmFjdGljZS4KLSAgICAgICAgICAgICAgICAgICAgSW4gdGhvc2UgY2FzZXMsIHRoZSB0ZWFtIHVzZXMgaXNvbGF0ZWQgYnJhbmNoZXMgdG8gbWVyZ2UgZmVhdHVyZXMuCi0gICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQlNQLXNwZWNpZmljIGNvZGUgYWRkaXRpb25zIGFyZSBoYW5kbGVkIGluIGEgc2ltaWxhciBtYW5uZXIgdG8ga2VybmVsLXNwZWNpZmljIGFkZGl0aW9ucy4KLSAgICAgICAgICAgICAgICBTb21lIEJTUHMgb25seSBtYWtlIHNlbnNlIGdpdmVuIGNlcnRhaW4ga2VybmVsIHR5cGVzLgotICAgICAgICAgICAgICAgIFNvLCBmb3IgdGhlc2UgdHlwZXMsIHRoZSB0ZWFtIGNyZWF0ZXMgYnJhbmNoZXMgb2ZmIHRoZSBlbmQgb2YgdGhhdCBrZXJuZWwgdHlwZSBmb3IgYWxsCi0gICAgICAgICAgICAgICAgb2YgdGhlIEJTUHMgdGhhdCBhcmUgc3VwcG9ydGVkIG9uIHRoYXQga2VybmVsIHR5cGUuCi0gICAgICAgICAgICAgICAgRnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgdGhlIHRvb2xzIHRoYXQgY3JlYXRlIHRoZSBCU1AgYnJhbmNoLCB0aGUgQlNQIGlzIHJlYWxseSBubwotICAgICAgICAgICAgICAgIGRpZmZlcmVudCB0aGFuIGEgZmVhdHVyZS4KLSAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHRoZSBzYW1lIGJyYW5jaGluZyBzdHJhdGVneSBhcHBsaWVzIHRvIEJTUHMgYXMgaXQgZG9lcyB0byBmZWF0dXJlcy4KLSAgICAgICAgICAgICAgICBTbyBhZ2FpbiwgcmF0aGVyIHRoYW4gc3RvcmUgdGhlIEJTUCB0d2ljZSwgdGhlIHRlYW0gb25seSBzdG9yZXMgdGhlIHVuaXF1ZQotICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VzIGZvciB0aGUgQlNQIGFjcm9zcyB0aGUgc3VwcG9ydGVkIG11bHRpcGxlIGtlcm5lbHMuCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBXaGlsZSB0aGlzIHN0cmF0ZWd5IGNhbiByZXN1bHQgaW4gYSB0cmVlIHdpdGggYSBzaWduaWZpY2FudCBudW1iZXIgb2YgYnJhbmNoZXMsIGl0IGlzCi0gICAgICAgICAgICAgICAgaW1wb3J0YW50IHRvIHJlYWxpemUgdGhhdCBmcm9tIHRoZSBkZXZlbG9wZXIncyBwb2ludCBvZiB2aWV3LCB0aGVyZSBpcyBhIGxpbmVhcgotICAgICAgICAgICAgICAgIHBhdGggdGhhdCB0cmF2ZWxzIGZyb20gdGhlIGJhc2VsaW5lIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4sIHRocm91Z2ggYSBzZWxlY3QKLSAgICAgICAgICAgICAgICBncm91cCBvZiBmZWF0dXJlcyBhbmQgZW5kcyB3aXRoIHRoZWlyIEJTUC1zcGVjaWZpYyBjb21taXRzLgotICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB0aGUgZGl2aXNpb25zIG9mIHRoZSBrZXJuZWwgYXJlIHRyYW5zcGFyZW50IGFuZCBhcmUgbm90IHJlbGV2YW50Ci0gICAgICAgICAgICAgICAgdG8gdGhlIGRldmVsb3BlciBvbiBhIGRheS10by1kYXkgYmFzaXMuCi0gICAgICAgICAgICAgICAgRnJvbSB0aGUgZGV2ZWxvcGVyJ3MgcGVyc3BlY3RpdmUsIHRoaXMgcGF0aCBpcyB0aGUgIm1hc3RlciIgYnJhbmNoLgotICAgICAgICAgICAgICAgIFRoZSBkZXZlbG9wZXIgZG9lcyBub3QgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGUgZXhpc3RlbmNlIG9mIGFueSBvdGhlciBicmFuY2hlcyBhdCBhbGwuCi0gICAgICAgICAgICAgICAgT2YgY291cnNlLCB0aGVyZSBpcyB2YWx1ZSBpbiB0aGUgZXhpc3RlbmNlIG9mIHRoZXNlIGJyYW5jaGVzCi0gICAgICAgICAgICAgICAgaW4gdGhlIHRyZWUsIHNob3VsZCBhIHBlcnNvbiBkZWNpZGUgdG8gZXhwbG9yZSB0aGVtLgotICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBhIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gQlNQcyBhdCBlaXRoZXIgdGhlIGNvbW1pdCBsZXZlbCBvciBhdCB0aGUgbGluZS1ieS1saW5lCi0gICAgICAgICAgICAgICAgY29kZSA8ZmlsZW5hbWU+ZGlmZjwvZmlsZW5hbWU+IGxldmVsIGlzIG5vdyBhIHRyaXZpYWwgb3BlcmF0aW9uLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgV29ya2luZyB3aXRoIHRoZSBrZXJuZWwgYXMgYSBzdHJ1Y3R1cmVkIHRyZWUgZm9sbG93cyByZWNvZ25pemVkIGNvbW11bml0eSBiZXN0IHByYWN0aWNlcy4KLSAgICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB0aGUga2VybmVsIGFzIHNoaXBwZWQgd2l0aCB0aGUgcHJvZHVjdCwgc2hvdWxkIGJlCi0gICAgICAgICAgICAgICAgY29uc2lkZXJlZCBhbiAidXBzdHJlYW0gc291cmNlIiBhbmQgdmlld2VkIGFzIGEgc2VyaWVzIG9mCi0gICAgICAgICAgICAgICAgaGlzdG9yaWNhbCBhbmQgZG9jdW1lbnRlZCBtb2RpZmljYXRpb25zIChjb21taXRzKS4KLSAgICAgICAgICAgICAgICBUaGVzZSBtb2RpZmljYXRpb25zIHJlcHJlc2VudCB0aGUgZGV2ZWxvcG1lbnQgYW5kIHN0YWJpbGl6YXRpb24gZG9uZQotICAgICAgICAgICAgICAgIGJ5IHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBkZXZlbG9wbWVudCB0ZWFtLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQmVjYXVzZSBjb21taXRzIG9ubHkgY2hhbmdlIGF0IHNpZ25pZmljYW50IHJlbGVhc2UgcG9pbnRzIGluIHRoZSBwcm9kdWN0IGxpZmUgY3ljbGUsCi0gICAgICAgICAgICAgICAgZGV2ZWxvcGVycyBjYW4gd29yayBvbiBhIGJyYW5jaCBjcmVhdGVkCi0gICAgICAgICAgICAgICAgZnJvbSB0aGUgbGFzdCByZWxldmFudCBjb21taXQgaW4gdGhlIHNoaXBwZWQgWW9jdG8gUHJvamVjdCBrZXJuZWwuCi0gICAgICAgICAgICAgICAgQXMgbWVudGlvbmVkIHByZXZpb3VzbHksIHRoZSBzdHJ1Y3R1cmUgaXMgdHJhbnNwYXJlbnQgdG8gdGhlIGRldmVsb3BlcgotICAgICAgICAgICAgICAgIGJlY2F1c2UgdGhlIGtlcm5lbCB0cmVlIGlzIGxlZnQgaW4gdGhpcyBzdGF0ZSBhZnRlciBjbG9uaW5nIGFuZCBidWlsZGluZyB0aGUga2VybmVsLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVXNpbmcgR2l0J3MgdGFnZ2luZyBhbmQgYnJhbmNoaW5nIGZlYXR1cmVzLCB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgdGVhbSBjcmVhdGVzIGtlcm5lbCBicmFuY2hlcyBhdCBwb2ludHMgd2hlcmUgZnVuY3Rpb25hbGl0eSBpcworICAgICAgICAgICAgbm8gbG9uZ2VyIHNoYXJlZCBhbmQgdGh1cywgbmVlZHMgdG8gYmUgaXNvbGF0ZWQuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYm9hcmQtc3BlY2lmaWMgaW5jb21wYXRpYmlsaXRpZXMgd291bGQgcmVxdWlyZQorICAgICAgICAgICAgZGlmZmVyZW50IGZ1bmN0aW9uYWxpdHkgYW5kIHdvdWxkIHJlcXVpcmUgYSBicmFuY2ggdG8KKyAgICAgICAgICAgIHNlcGFyYXRlIHRoZSBmZWF0dXJlcy4KKyAgICAgICAgICAgIExpa2V3aXNlLCBmb3Igc3BlY2lmaWMga2VybmVsIGZlYXR1cmVzLCB0aGUgc2FtZSBicmFuY2hpbmcKKyAgICAgICAgICAgIHN0cmF0ZWd5IGlzIHVzZWQuCisgICAgICAgIDwvcGFyYT4KIAotICAgICAgICA8c2VjdGlvbiBpZD0nc291cmNlLWNvZGUtbWFuYWdlci1naXQnPgotICAgICAgICAgICAgPHRpdGxlPlNvdXJjZSBDb2RlIE1hbmFnZXIgLSBHaXQ8L3RpdGxlPgotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIFNvdXJjZSBDb2RlIE1hbmFnZXIgKFNDTSkgaXMgR2l0LgotICAgICAgICAgICAgICAgIFRoaXMgU0NNIGlzIHRoZSBvYnZpb3VzIG1lY2hhbmlzbSBmb3IgbWVldGluZyB0aGUgcHJldmlvdXNseSBtZW50aW9uZWQgZ29hbHMuCi0gICAgICAgICAgICAgICAgTm90IG9ubHkgaXMgaXQgdGhlIFNDTSBmb3IgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiBidXQsCi0gICAgICAgICAgICAgICAgR2l0IGNvbnRpbnVlcyB0byBncm93IGluIHBvcHVsYXJpdHkgYW5kIHN1cHBvcnRzIG1hbnkgZGlmZmVyZW50IHdvcmsgZmxvd3MsCi0gICAgICAgICAgICAgICAgZnJvbnQtZW5kcyBhbmQgbWFuYWdlbWVudCB0ZWNobmlxdWVzLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGRvY3VtZW50YXRpb24gb24gR2l0IGF0IDx1bGluayB1cmw9J2h0dHA6Ly9naXQtc2NtLmNvbS9kb2N1bWVudGF0aW9uJz48L3VsaW5rPi4KLSAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gZ2V0IGFuIGludHJvZHVjdGlvbiB0byBHaXQgYXMgaXQgYXBwbGllcyB0byB0aGUgWW9jdG8gUHJvamVjdCBpbiB0aGUKLSAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZ2l0Jz5HaXQ8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KLSAgICAgICAgICAgICAgICBUaGVzZSByZWZlcmVuY2VkIHNlY3Rpb25zIG92ZXJ2aWV3IEdpdCBhbmQgZGVzY3JpYmUgYSBtaW5pbWFsIHNldCBvZgotICAgICAgICAgICAgICAgIGNvbW1hbmRzIHRoYXQgYWxsb3dzIHlvdSB0byBiZSBmdW5jdGlvbmFsIHVzaW5nIEdpdC4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgYXMgbXVjaCwgb3IgYXMgbGl0dGxlLCBvZiB3aGF0IEdpdCBoYXMgdG8gb2ZmZXIgdG8gYWNjb21wbGlzaCB3aGF0Ci0gICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIGZvciB5b3VyIHByb2plY3QuCi0gICAgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgaGF2ZSB0byBiZSBhICJHaXQgTWFzdGVyIiBpbiBvcmRlciB0byB1c2UgaXQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdC4KLSAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzICJ0cmVlLWxpa2UiIGFyY2hpdGVjdHVyZSByZXN1bHRzIGluIGEgc3RydWN0dXJlIHRoYXQgaGFzCisgICAgICAgICAgICBmZWF0dXJlcyBvcmdhbml6ZWQgdG8gYmUgc3BlY2lmaWMgZm9yIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSwKKyAgICAgICAgICAgIHNpbmdsZSBrZXJuZWwgdHlwZXMsIG9yIGEgc3Vic2V0IG9mIGtlcm5lbCB0eXBlcy4KKyAgICAgICAgICAgIFRodXMsIHRoZSB1c2VyIGhhcyB0aGUgYWJpbGl0eSB0byBzZWUgdGhlIGFkZGVkIGZlYXR1cmVzIGFuZCB0aGUKKyAgICAgICAgICAgIGNvbW1pdHMgdGhhdCBtYWtlIHVwIHRob3NlIGZlYXR1cmVzLgorICAgICAgICAgICAgSW4gYWRkaXRpb24gdG8gYmVpbmcgYWJsZSB0byBzZWUgYWRkZWQgZmVhdHVyZXMsIHRoZSB1c2VyCisgICAgICAgICAgICBjYW4gYWxzbyB2aWV3IHRoZSBoaXN0b3J5IG9mIHdoYXQgbWFkZSB1cCB0aGUgYmFzZWxpbmUKKyAgICAgICAgICAgIExpbnV4IGtlcm5lbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQW5vdGhlciBjb25zZXF1ZW5jZSBvZiB0aGlzIHN0cmF0ZWd5IHJlc3VsdHMgaW4gbm90IGhhdmluZyB0bworICAgICAgICAgICAgc3RvcmUgdGhlIHNhbWUgZmVhdHVyZSB0d2ljZSBpbnRlcm5hbGx5IGluIHRoZSB0cmVlLgorICAgICAgICAgICAgUmF0aGVyLCB0aGUga2VybmVsIHRlYW0gc3RvcmVzIHRoZSB1bmlxdWUgZGlmZmVyZW5jZXMgcmVxdWlyZWQKKyAgICAgICAgICAgIHRvIGFwcGx5IHRoZSBmZWF0dXJlIG9udG8gdGhlIGtlcm5lbCB0eXBlIGluIHF1ZXN0aW9uLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgdGVhbSBzdHJpdmVzIHRvIHBsYWNlIGZlYXR1cmVzIGluIHRoZSB0cmVlCisgICAgICAgICAgICAgICAgc3VjaCB0aGF0IGZlYXR1cmVzIGNhbiBiZSBzaGFyZWQgYnkgYWxsIGJvYXJkcyBhbmQga2VybmVsCisgICAgICAgICAgICAgICAgdHlwZXMgd2hlcmUgcG9zc2libGUuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgZHVyaW5nIGRldmVsb3BtZW50IGN5Y2xlcyBvciB3aGVuIGxhcmdlIGZlYXR1cmVzCisgICAgICAgICAgICAgICAgYXJlIG1lcmdlZCwgdGhlIHRlYW0gY2Fubm90IGFsd2F5cyBmb2xsb3cgdGhpcyBwcmFjdGljZS4KKyAgICAgICAgICAgICAgICBJbiB0aG9zZSBjYXNlcywgdGhlIHRlYW0gdXNlcyBpc29sYXRlZCBicmFuY2hlcyB0byBtZXJnZQorICAgICAgICAgICAgICAgIGZlYXR1cmVzLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCU1Atc3BlY2lmaWMgY29kZSBhZGRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gYSBzaW1pbGFyIG1hbm5lciB0bworICAgICAgICAgICAga2VybmVsLXNwZWNpZmljIGFkZGl0aW9ucy4KKyAgICAgICAgICAgIFNvbWUgQlNQcyBvbmx5IG1ha2Ugc2Vuc2UgZ2l2ZW4gY2VydGFpbiBrZXJuZWwgdHlwZXMuCisgICAgICAgICAgICBTbywgZm9yIHRoZXNlIHR5cGVzLCB0aGUgdGVhbSBjcmVhdGVzIGJyYW5jaGVzIG9mZiB0aGUgZW5kCisgICAgICAgICAgICBvZiB0aGF0IGtlcm5lbCB0eXBlIGZvciBhbGwgb2YgdGhlIEJTUHMgdGhhdCBhcmUgc3VwcG9ydGVkIG9uCisgICAgICAgICAgICB0aGF0IGtlcm5lbCB0eXBlLgorICAgICAgICAgICAgRnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgdGhlIHRvb2xzIHRoYXQgY3JlYXRlIHRoZSBCU1AgYnJhbmNoLAorICAgICAgICAgICAgdGhlIEJTUCBpcyByZWFsbHkgbm8gZGlmZmVyZW50IHRoYW4gYSBmZWF0dXJlLgorICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0aGUgc2FtZSBicmFuY2hpbmcgc3RyYXRlZ3kgYXBwbGllcyB0byBCU1BzIGFzCisgICAgICAgICAgICBpdCBkb2VzIHRvIGtlcm5lbCBmZWF0dXJlcy4KKyAgICAgICAgICAgIFNvIGFnYWluLCByYXRoZXIgdGhhbiBzdG9yZSB0aGUgQlNQIHR3aWNlLCB0aGUgdGVhbSBvbmx5CisgICAgICAgICAgICBzdG9yZXMgdGhlIHVuaXF1ZSBkaWZmZXJlbmNlcyBmb3IgdGhlIEJTUCBhY3Jvc3MgdGhlIHN1cHBvcnRlZAorICAgICAgICAgICAgbXVsdGlwbGUga2VybmVscy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hpbGUgdGhpcyBzdHJhdGVneSBjYW4gcmVzdWx0IGluIGEgdHJlZSB3aXRoIGEgc2lnbmlmaWNhbnQgbnVtYmVyCisgICAgICAgICAgICBvZiBicmFuY2hlcywgaXQgaXMgaW1wb3J0YW50IHRvIHJlYWxpemUgdGhhdCBmcm9tIHRoZSBkZXZlbG9wZXIncworICAgICAgICAgICAgcG9pbnQgb2YgdmlldywgdGhlcmUgaXMgYSBsaW5lYXIgcGF0aCB0aGF0IHRyYXZlbHMgZnJvbSB0aGUKKyAgICAgICAgICAgIGJhc2VsaW5lIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4sIHRocm91Z2ggYSBzZWxlY3QKKyAgICAgICAgICAgIGdyb3VwIG9mIGZlYXR1cmVzIGFuZCBlbmRzIHdpdGggdGhlaXIgQlNQLXNwZWNpZmljIGNvbW1pdHMuCisgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgdGhlIGRpdmlzaW9ucyBvZiB0aGUga2VybmVsIGFyZSB0cmFuc3BhcmVudCBhbmQKKyAgICAgICAgICAgIGFyZSBub3QgcmVsZXZhbnQgdG8gdGhlIGRldmVsb3BlciBvbiBhIGRheS10by1kYXkgYmFzaXMuCisgICAgICAgICAgICBGcm9tIHRoZSBkZXZlbG9wZXIncyBwZXJzcGVjdGl2ZSwgdGhpcyBwYXRoIGlzIHRoZSAibWFzdGVyIiBicmFuY2gKKyAgICAgICAgICAgIGluIEdpdCB0ZXJtcy4KKyAgICAgICAgICAgIFRoZSBkZXZlbG9wZXIgZG9lcyBub3QgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGUgZXhpc3RlbmNlIG9mIGFueQorICAgICAgICAgICAgb3RoZXIgYnJhbmNoZXMgYXQgYWxsLgorICAgICAgICAgICAgT2YgY291cnNlLCB2YWx1ZSBleGlzdHMgaW4gdGhlIGhhdmluZyB0aGVzZSBicmFuY2hlcyBpbiB0aGUgdHJlZSwKKyAgICAgICAgICAgIHNob3VsZCBhIHBlcnNvbiBkZWNpZGUgdG8gZXhwbG9yZSB0aGVtLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byBCU1BzIGF0IGVpdGhlciB0aGUgY29tbWl0CisgICAgICAgICAgICBsZXZlbCBvciBhdCB0aGUgbGluZS1ieS1saW5lIGNvZGUgPGZpbGVuYW1lPmRpZmY8L2ZpbGVuYW1lPiBsZXZlbAorICAgICAgICAgICAgaXMgbm93IGEgdHJpdmlhbCBvcGVyYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgaWxsdXN0cmF0aW9uIHNob3dzIHRoZSBjb25jZXB0dWFsIFlvY3RvCisgICAgICAgICAgICBMaW51eCBrZXJuZWwuCisgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMva2VybmVsLWFyY2hpdGVjdHVyZS1vdmVydmlldy5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI3aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlPSIxMDAiIC8+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIHRoZSBpbGx1c3RyYXRpb24sIHRoZSAiS2VybmVsLm9yZyBCcmFuY2ggUG9pbnQiIG1hcmtzIHRoZQorICAgICAgICAgICAgc3BlY2lmaWMgc3BvdCAob3IgTGludXgga2VybmVsIHJlbGVhc2UpIGZyb20gd2hpY2ggdGhlCisgICAgICAgICAgICBZb2N0byBMaW51eCBrZXJuZWwgaXMgY3JlYXRlZC4KKyAgICAgICAgICAgIEZyb20gdGhpcyBwb2ludCBmb3J3YXJkIGluIHRoZSB0cmVlLCBmZWF0dXJlcyBhbmQgZGlmZmVyZW5jZXMKKyAgICAgICAgICAgIGFyZSBvcmdhbml6ZWQgYW5kIHRhZ2dlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlICJZb2N0byBQcm9qZWN0IEJhc2VsaW5lIEtlcm5lbCIgY29udGFpbnMgZnVuY3Rpb25hbGl0eSB0aGF0CisgICAgICAgICAgICBpcyBjb21tb24gdG8gZXZlcnkga2VybmVsIHR5cGUgYW5kIEJTUCB0aGF0IGlzIG9yZ2FuaXplZAorICAgICAgICAgICAgZnVydGhlciBhbG9uZyBpbiB0aGUgdHJlZS4KKyAgICAgICAgICAgIFBsYWNpbmcgdGhlc2UgY29tbW9uIGZlYXR1cmVzIGluIHRoZSB0cmVlIHRoaXMgd2F5IG1lYW5zCisgICAgICAgICAgICBmZWF0dXJlcyBkbyBub3QgaGF2ZSB0byBiZSBkdXBsaWNhdGVkIGFsb25nIGluZGl2aWR1YWwKKyAgICAgICAgICAgIGJyYW5jaGVzIG9mIHRoZSB0cmVlIHN0cnVjdHVyZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRnJvbSB0aGUgIllvY3RvIFByb2plY3QgQmFzZWxpbmUgS2VybmVsIiwgYnJhbmNoIHBvaW50cyByZXByZXNlbnQKKyAgICAgICAgICAgIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgZm9yIGluZGl2aWR1YWwgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcworICAgICAgICAgICAgKEJTUHMpIGFzIHdlbGwgYXMgcmVhbC10aW1lIGtlcm5lbHMuCisgICAgICAgICAgICBUaGUgaWxsdXN0cmF0aW9uIHJlcHJlc2VudHMgdGhpcyB0aHJvdWdoIHRocmVlIEJTUC1zcGVjaWZpYworICAgICAgICAgICAgYnJhbmNoZXMgYW5kIGEgcmVhbC10aW1lIGtlcm5lbCBicmFuY2guCisgICAgICAgICAgICBFYWNoIGJyYW5jaCByZXByZXNlbnRzIHNvbWUgdW5pcXVlIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBCU1AKKyAgICAgICAgICAgIG9yIGZvciBhIHJlYWwtdGltZSBZb2N0byBMaW51eCBrZXJuZWwuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSBzdHJ1Y3R1cmUsIHRoZSAiUmVhbC10aW1lIChydCkgS2VybmVsIiBicmFuY2ggaGFzCisgICAgICAgICAgICBjb21tb24gZmVhdHVyZXMgZm9yIGFsbCByZWFsLXRpbWUgWW9jdG8gTGludXgga2VybmVscyBhbmQKKyAgICAgICAgICAgIGNvbnRhaW5zIG1vcmUgYnJhbmNoZXMgZm9yIGluZGl2aWR1YWwgQlNQLXNwZWNpZmljIHJlYWwtdGltZQorICAgICAgICAgICAga2VybmVscy4KKyAgICAgICAgICAgIFRoZSBpbGx1c3RyYXRpb24gc2hvd3MgdGhyZWUgYnJhbmNoZXMgYXMgYW4gZXhhbXBsZS4KKyAgICAgICAgICAgIEVhY2ggYnJhbmNoIHBvaW50cyB0aGUgd2F5IHRvIHNwZWNpZmljLCB1bmlxdWUgZmVhdHVyZXMgZm9yIGEKKyAgICAgICAgICAgIHJlc3BlY3RpdmUgcmVhbC10aW1lIGtlcm5lbCBhcyB0aGV5IGFwcGx5IHRvIGEgZ2l2ZW4gQlNQLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgcmVzdWx0aW5nIHRyZWUgc3RydWN0dXJlIHByZXNlbnRzIGEgY2xlYXIgcGF0aCBvZiBtYXJrZXJzCisgICAgICAgICAgICAob3IgYnJhbmNoZXMpIHRvIHRoZSBkZXZlbG9wZXIgdGhhdCwgZm9yIGFsbCBwcmFjdGljYWwKKyAgICAgICAgICAgIHB1cnBvc2VzLCBpcyB0aGUgWW9jdG8gTGludXgga2VybmVsIG5lZWRlZCBmb3IgYW55IGdpdmVuIHNldCBvZgorICAgICAgICAgICAgcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgS2VlcCBpbiBtaW5kIHRoZSBmaWd1cmUgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgYWxsIHRoZQorICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBZb2N0byBMaW51eCBrZXJuZWxzLCBidXQgcmF0aGVyIHNob3dzIGEgc2luZ2xlCisgICAgICAgICAgICAgICAgZ2VuZXJpYyBrZXJuZWwganVzdCBmb3IgY29uY2VwdHVhbCBwdXJwb3Nlcy4KKyAgICAgICAgICAgICAgICBBbHNvIGtlZXAgaW4gbWluZCB0aGF0IHRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgUHJvamVjdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3NvdXJjZS1yZXBvc2l0b3JpZXMnPlNvdXJjZSBSZXBvc2l0b3JpZXM8L3VsaW5rPgorICAgICAgICAgICAgICAgIHRoYXQgYXJlIGVpdGhlciBwdWxsZWQgZnJvbSBkdXJpbmcgdGhlIGJ1aWxkIG9yIGVzdGFibGlzaGVkCisgICAgICAgICAgICAgICAgb24gdGhlIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtIHByaW9yIHRvIHRoZSBidWlsZCBieSBlaXRoZXIKKyAgICAgICAgICAgICAgICBjbG9uaW5nIGEgcGFydGljdWxhciBrZXJuZWwncyBHaXQgcmVwb3NpdG9yeSBvciBieQorICAgICAgICAgICAgICAgIGRvd25sb2FkaW5nIGFuZCB1bnBhY2tpbmcgYSB0YXJiYWxsLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXb3JraW5nIHdpdGggdGhlIGtlcm5lbCBhcyBhIHN0cnVjdHVyZWQgdHJlZSBmb2xsb3dzIHJlY29nbml6ZWQKKyAgICAgICAgICAgIGNvbW11bml0eSBiZXN0IHByYWN0aWNlcy4KKyAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIHRoZSBrZXJuZWwgYXMgc2hpcHBlZCB3aXRoIHRoZSBwcm9kdWN0LCBzaG91bGQgYmUKKyAgICAgICAgICAgIGNvbnNpZGVyZWQgYW4gInVwc3RyZWFtIHNvdXJjZSIgYW5kIHZpZXdlZCBhcyBhIHNlcmllcyBvZgorICAgICAgICAgICAgaGlzdG9yaWNhbCBhbmQgZG9jdW1lbnRlZCBtb2RpZmljYXRpb25zIChjb21taXRzKS4KKyAgICAgICAgICAgIFRoZXNlIG1vZGlmaWNhdGlvbnMgcmVwcmVzZW50IHRoZSBkZXZlbG9wbWVudCBhbmQgc3RhYmlsaXphdGlvbgorICAgICAgICAgICAgZG9uZSBieSB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgZGV2ZWxvcG1lbnQgdGVhbS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmVjYXVzZSBjb21taXRzIG9ubHkgY2hhbmdlIGF0IHNpZ25pZmljYW50IHJlbGVhc2UgcG9pbnRzIGluIHRoZQorICAgICAgICAgICAgcHJvZHVjdCBsaWZlIGN5Y2xlLCBkZXZlbG9wZXJzIGNhbiB3b3JrIG9uIGEgYnJhbmNoIGNyZWF0ZWQKKyAgICAgICAgICAgIGZyb20gdGhlIGxhc3QgcmVsZXZhbnQgY29tbWl0IGluIHRoZSBzaGlwcGVkIFlvY3RvIFByb2plY3QgTGludXgKKyAgICAgICAgICAgIGtlcm5lbC4KKyAgICAgICAgICAgIEFzIG1lbnRpb25lZCBwcmV2aW91c2x5LCB0aGUgc3RydWN0dXJlIGlzIHRyYW5zcGFyZW50IHRvIHRoZQorICAgICAgICAgICAgZGV2ZWxvcGVyIGJlY2F1c2UgdGhlIGtlcm5lbCB0cmVlIGlzIGxlZnQgaW4gdGhpcyBzdGF0ZSBhZnRlcgorICAgICAgICAgICAgY2xvbmluZyBhbmQgYnVpbGRpbmcgdGhlIGtlcm5lbC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdrZXJuZWwtYnVpbGQtZmlsZS1oaWVyYXJjaHknPgorICAgICAgICA8dGl0bGU+S2VybmVsIEJ1aWxkIEZpbGUgSGllcmFyY2h5PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFVwc3RyZWFtIHN0b3JhZ2Ugb2YgYWxsIHRoZSBhdmFpbGFibGUga2VybmVsIHNvdXJjZSBjb2RlIGlzCisgICAgICAgICAgICBvbmUgdGhpbmcsIHdoaWxlIHJlcHJlc2VudGluZyBhbmQgdXNpbmcgdGhlIGNvZGUgb24geW91ciBob3N0CisgICAgICAgICAgICBkZXZlbG9wbWVudCBzeXN0ZW0gaXMgYW5vdGhlci4KKyAgICAgICAgICAgIENvbmNlcHR1YWxseSwgeW91IGNhbiB0aGluayBvZiB0aGUga2VybmVsIHNvdXJjZSByZXBvc2l0b3JpZXMKKyAgICAgICAgICAgIGFzIGFsbCB0aGUgc291cmNlIGZpbGVzIG5lY2Vzc2FyeSBmb3IgYWxsIHRoZSBzdXBwb3J0ZWQKKyAgICAgICAgICAgIFlvY3RvIExpbnV4IGtlcm5lbHMuCisgICAgICAgICAgICBBcyBhIGRldmVsb3BlciwgeW91IGFyZSBqdXN0IGludGVyZXN0ZWQgaW4gdGhlIHNvdXJjZSBmaWxlcworICAgICAgICAgICAgZm9yIHRoZSBrZXJuZWwgb24gd2hpY2ggeW91IGFyZSB3b3JraW5nLgorICAgICAgICAgICAgQW5kLCBmdXJ0aGVybW9yZSwgeW91IG5lZWQgdGhlbSBhdmFpbGFibGUgb24geW91ciBob3N0IHN5c3RlbS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgS2VybmVsIHNvdXJjZSBjb2RlIGlzIGF2YWlsYWJsZSBvbiB5b3VyIGhvc3Qgc3lzdGVtIHNldmVyYWwKKyAgICAgICAgICAgIGRpZmZlcmVudCB3YXlzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5GaWxlcyBBY2Nlc3NlZCBXaGlsZSB1c2luZyA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4sIHdoaWNoIGlzIGF2YWlsYWJsZSB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0LCBpcyB0aGUgcHJlZmVycmVkIG1ldGhvZCBieSB3aGljaCB0bworICAgICAgICAgICAgICAgICAgICBtb2RpZnkgdGhlIGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0na2VybmVsLW1vZGlmaWNhdGlvbi13b3JrZmxvdyc+S2VybmVsIE1vZGlmaWNhdGlvbiBXb3JrZmxvdzwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkNsb25lZCBSZXBvc2l0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgd29ya2luZyBpbiB0aGUga2VybmVsIGFsbCB0aGUgdGltZSwgeW91IHByb2JhYmx5CisgICAgICAgICAgICAgICAgICAgIHdvdWxkIHdhbnQgdG8gc2V0IHVwIHlvdXIgb3duIGxvY2FsIEdpdCByZXBvc2l0b3J5IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBZb2N0byBMaW51eCBrZXJuZWwgdHJlZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjbG9uZSBhIFlvY3RvIExpbnV4IGtlcm5lbAorICAgICAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncHJlcGFyaW5nLXRoZS1idWlsZC1ob3N0LXRvLXdvcmstb24tdGhlLWtlcm5lbCc+UHJlcGFyaW5nIHRoZSBCdWlsZCBIb3N0IHRvIFdvcmsgb24gdGhlIEtlcm5lbDwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlRlbXBvcmFyeSBTb3VyY2UgRmlsZXMgZnJvbSBhIEJ1aWxkOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBqdXN0IG5lZWQgdG8gbWFrZSBzb21lIHBhdGNoZXMgdG8gdGhlIGtlcm5lbCB1c2luZworICAgICAgICAgICAgICAgICAgICBhIHRyYWRpdGlvbmFsIEJpdEJha2Ugd29ya2Zsb3cgKGkuZS4gbm90IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+KSwgeW91IGNhbiBhY2Nlc3MgdGVtcG9yYXJ5CisgICAgICAgICAgICAgICAgICAgIGtlcm5lbCBzb3VyY2UgZmlsZXMgdGhhdCB3ZXJlIGV4dHJhY3RlZCBhbmQgdXNlZCBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAgYSBrZXJuZWwgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSB0ZW1wb3Jhcnkga2VybmVsIHNvdXJjZSBmaWxlcyByZXN1bHRpbmcgZnJvbSBhIGJ1aWxkIHVzaW5nCisgICAgICAgICAgICBCaXRCYWtlIGhhdmUgYSBwYXJ0aWN1bGFyIGhpZXJhcmNoeS4KKyAgICAgICAgICAgIFdoZW4geW91IGJ1aWxkIHRoZSBrZXJuZWwgb24geW91ciBkZXZlbG9wbWVudCBzeXN0ZW0sIGFsbCBmaWxlcworICAgICAgICAgICAgbmVlZGVkIGZvciB0aGUgYnVpbGQgYXJlIHRha2VuIGZyb20gdGhlIHNvdXJjZSByZXBvc2l0b3JpZXMKKyAgICAgICAgICAgIHBvaW50ZWQgdG8gYnkgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBhbmQgZ2F0aGVyZWQgaW4gYSB0ZW1wb3Jhcnkgd29yayBhcmVhIHdoZXJlIHRoZXkgYXJlCisgICAgICAgICAgICBzdWJzZXF1ZW50bHkgdXNlZCB0byBjcmVhdGUgdGhlIHVuaXF1ZSBrZXJuZWwuCisgICAgICAgICAgICBUaHVzLCBpbiBhIHNlbnNlLCB0aGUgcHJvY2VzcyBjb25zdHJ1Y3RzIGEgbG9jYWwgc291cmNlIHRyZWUKKyAgICAgICAgICAgIHNwZWNpZmljIHRvIHlvdXIga2VybmVsIGZyb20gd2hpY2ggdG8gZ2VuZXJhdGUgdGhlIG5ldyBrZXJuZWwKKyAgICAgICAgICAgIGltYWdlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBzaG93cyB0aGUgdGVtcG9yYXJ5IGZpbGUgc3RydWN0dXJlCisgICAgICAgICAgICBjcmVhdGVkIG9uIHlvdXIgaG9zdCBzeXN0ZW0gd2hlbiB5b3UgYnVpbGQgdGhlIGtlcm5lbCB1c2luZworICAgICAgICAgICAgQml0YmFrZS4KKyAgICAgICAgICAgIFRoaXMKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGNvbnRhaW5zIGFsbCB0aGUgc291cmNlIGZpbGVzIHVzZWQgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi1nZW5lcmljLnBuZyIKKyAgICAgICAgICAgICAgICB3aWR0aD0iNmluIiBkZXB0aD0iNWluIiBhbGlnbj0iY2VudGVyIiBzY2FsZT0iMTAwIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBZ2FpbiwgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gdGhlIFlvY3RvIFByb2plY3Qga2VybmVsJ3MKKyAgICAgICAgICAgIGFyY2hpdGVjdHVyZSBhbmQgaXRzIGJyYW5jaGluZyBzdHJhdGVneSwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3lvY3RvLWxpbnV4LWtlcm5lbC1hcmNoaXRlY3R1cmUtYW5kLWJyYW5jaGluZy1zdHJhdGVnaWVzJz5Zb2N0byBMaW51eCBLZXJuZWwgQXJjaGl0ZWN0dXJlIGFuZCBCcmFuY2hpbmcgU3RyYXRlZ2llczwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgWW91IGNhbiBhbHNvIHJlZmVyZW5jZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1kZXZ0b29sLXRvLXBhdGNoLXRoZS1rZXJuZWwnPlVzaW5nIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gdG8gUGF0Y2ggdGhlIEtlcm5lbDwvbGluaz4iCisgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy10cmFkaXRpb25hbC1rZXJuZWwtZGV2ZWxvcG1lbnQtdG8tcGF0Y2gtdGhlLWtlcm5lbCc+VXNpbmcgVHJhZGl0aW9uYWwgS2VybmVsIERldmVsb3BtZW50IHRvIFBhdGNoIHRoZSBLZXJuZWw8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbnMgZm9yIGRldGFpbGVkIGV4YW1wbGUgdGhhdCBtb2RpZmllcyB0aGUga2VybmVsLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2RldGVybWluaW5nLWhhcmR3YXJlLWFuZC1ub24taGFyZHdhcmUtZmVhdHVyZXMtZm9yLXRoZS1rZXJuZWwtY29uZmlndXJhdGlvbi1hdWRpdC1waGFzZSc+CisgICAgICAgIDx0aXRsZT5EZXRlcm1pbmluZyBIYXJkd2FyZSBhbmQgTm9uLUhhcmR3YXJlIEZlYXR1cmVzIGZvciB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gQXVkaXQgUGhhc2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBwYXJ0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBhdWRpdAorICAgICAgICAgICAgcGhhc2UgdGhhdCBtb3N0IGRldmVsb3BlcnMgY2FuIGlnbm9yZS4KKyAgICAgICAgICAgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uIGluY2x1ZGluZworICAgICAgICAgICAgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICBmaWxlcywgYW5kIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY29uZmlndXJpbmctdGhlLWtlcm5lbCc+Q29uZmlndXJpbmcgdGhlIEtlcm5lbDwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEdXJpbmcgdGhpcyBwYXJ0IG9mIHRoZSBhdWRpdCBwaGFzZSwgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaW5hbAorICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGFyZSBjb21wYXJlZCBhZ2FpbnN0IHRoZQorICAgICAgICAgICAgZnJhZ21lbnRzIHNwZWNpZmllZCBieSB0aGUgc3lzdGVtLgorICAgICAgICAgICAgVGhlc2UgZnJhZ21lbnRzIGNhbiBiZSBzeXN0ZW0gZnJhZ21lbnRzLCBkaXN0cm8gZnJhZ21lbnRzLAorICAgICAgICAgICAgb3IgdXNlci1zcGVjaWZpZWQgY29uZmlndXJhdGlvbiBlbGVtZW50cy4KKyAgICAgICAgICAgIFJlZ2FyZGxlc3Mgb2YgdGhlaXIgb3JpZ2luLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgd2FybnMgdGhlIHVzZXIgaWYgYSBzcGVjaWZpYyBvcHRpb24gaXMgbm90IGluY2x1ZGVkIGluIHRoZQorICAgICAgICAgICAgZmluYWwga2VybmVsIGNvbmZpZ3VyYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIGluIG9yZGVyIHRvIG5vdCBvdmVyd2hlbG0gdGhlIHVzZXIgd2l0aAorICAgICAgICAgICAgY29uZmlndXJhdGlvbiB3YXJuaW5ncywgdGhlIHN5c3RlbSBvbmx5IHJlcG9ydHMgbWlzc2luZworICAgICAgICAgICAgImhhcmR3YXJlIiBvcHRpb25zIGFzIHRoZXkgY291bGQgcmVzdWx0IGluIGEgYm9vdAorICAgICAgICAgICAgZmFpbHVyZSBvciBpbmRpY2F0ZSB0aGF0IGltcG9ydGFudCBoYXJkd2FyZSBpcyBub3QgYXZhaWxhYmxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgYSBnaXZlbiBvcHRpb24gaXMgImhhcmR3YXJlIiBvcgorICAgICAgICAgICAgIm5vbi1oYXJkd2FyZSIsIHRoZSBrZXJuZWwgTWV0YWRhdGEgaW4KKyAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0by1rZXJuZWwtY2FjaGU8L2ZpbGVuYW1lPiBjb250YWlucyBmaWxlcyB0aGF0CisgICAgICAgICAgICBjbGFzc2lmeSBpbmRpdmlkdWFsIG9yIGdyb3VwcyBvZiBvcHRpb25zIGFzIGVpdGhlciBoYXJkd2FyZQorICAgICAgICAgICAgb3Igbm9uLWhhcmR3YXJlLgorICAgICAgICAgICAgVG8gYmV0dGVyIHNob3cgdGhpcywgY29uc2lkZXIgYSBzaXR1YXRpb24gd2hlcmUgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsLWNhY2hlPC9maWxlbmFtZT4gY29udGFpbnMgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgZmlsZXM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHlvY3RvLWtlcm5lbC1jYWNoZS9mZWF0dXJlcy9kcm0tcHNiL2hhcmR3YXJlLmNmZworICAgICB5b2N0by1rZXJuZWwtY2FjaGUvZmVhdHVyZXMva2dkYi9oYXJkd2FyZS5jZmcKKyAgICAgeW9jdG8ta2VybmVsLWNhY2hlL2t0eXBlcy9iYXNlL2hhcmR3YXJlLmNmZworICAgICB5b2N0by1rZXJuZWwtY2FjaGUvYnNwL210aS1tYWx0YTMyL2hhcmR3YXJlLmNmZworICAgICB5b2N0by1rZXJuZWwtY2FjaGUvYnNwL2ZzbC1tcGM4MzE1ZS1yZGIvaGFyZHdhcmUuY2ZnCisgICAgIHlvY3RvLWtlcm5lbC1jYWNoZS9ic3AvcWVtdS1wcGMzMi9oYXJkd2FyZS5jZmcKKyAgICAgeW9jdG8ta2VybmVsLWNhY2hlL2JzcC9xZW11YXJtYTkvaGFyZHdhcmUuY2ZnCisgICAgIHlvY3RvLWtlcm5lbC1jYWNoZS9ic3AvbXRpLW1hbHRhNjQvaGFyZHdhcmUuY2ZnCisgICAgIHlvY3RvLWtlcm5lbC1jYWNoZS9ic3AvYXJtLXZlcnNhdGlsZS05MjZlanMvaGFyZHdhcmUuY2ZnCisgICAgIHlvY3RvLWtlcm5lbC1jYWNoZS9ic3AvY29tbW9uLXBjL2hhcmR3YXJlLmNmZworICAgICB5b2N0by1rZXJuZWwtY2FjaGUvYnNwL2NvbW1vbi1wYy02NC9oYXJkd2FyZS5jZmcKKyAgICAgeW9jdG8ta2VybmVsLWNhY2hlL2ZlYXR1cmVzL3Jma2lsbC9ub24taGFyZHdhcmUuY2ZnCisgICAgIHlvY3RvLWtlcm5lbC1jYWNoZS9rdHlwZXMvYmFzZS9ub24taGFyZHdhcmUuY2ZnCisgICAgIHlvY3RvLWtlcm5lbC1jYWNoZS9mZWF0dXJlcy9hdWZzL25vbi1oYXJkd2FyZS5rY2YKKyAgICAgeW9jdG8ta2VybmVsLWNhY2hlL2ZlYXR1cmVzL29jZi9ub24taGFyZHdhcmUua2NmCisgICAgIHlvY3RvLWtlcm5lbC1jYWNoZS9rdHlwZXMvYmFzZS9ub24taGFyZHdhcmUua2NmCisgICAgIHlvY3RvLWtlcm5lbC1jYWNoZS9rdHlwZXMvYmFzZS9oYXJkd2FyZS5rY2YKKyAgICAgeW9jdG8ta2VybmVsLWNhY2hlL2JzcC9xZW11LXBwYzMyL2hhcmR3YXJlLmtjZgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHByb3ZpZGVzIGV4cGxhbmF0aW9ucyBmb3IgdGhlIHZhcmlvdXMKKyAgICAgICAgICAgIGZpbGVzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5oYXJkd2FyZS5rY2Y8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBrZXJuZWwgS2NvbmZpZyBmaWxlcyB0aGF0IGNvbnRhaW4KKyAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUgb3B0aW9ucyBvbmx5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ub24taGFyZHdhcmUua2NmPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2Yga2VybmVsIEtjb25maWcgZmlsZXMgdGhhdCBjb250YWluCisgICAgICAgICAgICAgICAgICAgIG5vbi1oYXJkd2FyZSBvcHRpb25zIG9ubHkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmhhcmR3YXJlLmNmZzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGtlcm5lbCA8ZmlsZW5hbWU+Q09ORklHXzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgdGhhdCBhcmUgaGFyZHdhcmUsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QKKyAgICAgICAgICAgICAgICAgICAgdGhleSBhcmUgd2l0aGluIGEgS2NvbmZpZyBmaWxlIHNwZWNpZmllZCBieSBhIGhhcmR3YXJlCisgICAgICAgICAgICAgICAgICAgIG9yIG5vbi1oYXJkd2FyZSBLY29uZmlnIGZpbGUgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmhhcmR3YXJlLmtjZjwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ub24taGFyZHdhcmUua2NmPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ub24taGFyZHdhcmUuY2ZnPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2Yga2VybmVsIDxmaWxlbmFtZT5DT05GSUdfPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyB0aGF0IGFyZSBub3QgaGFyZHdhcmUsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvcgorICAgICAgICAgICAgICAgICAgICBub3QgdGhleSBhcmUgd2l0aGluIGEgS2NvbmZpZyBmaWxlIHNwZWNpZmllZCBieSBhCisgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlIG9yIG5vbi1oYXJkd2FyZSBLY29uZmlnIGZpbGUgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmhhcmR3YXJlLmtjZjwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ub24taGFyZHdhcmUua2NmPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgSGVyZSBpcyBhIHNwZWNpZmljIGV4YW1wbGUgdXNpbmcgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsLWNhY2hlL2JzcC9tdGktbWFsdGEzMi9oYXJkd2FyZS5jZmc8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQ09ORklHX1NFUklBTF84MjUwCisgICAgIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFCisgICAgIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUworICAgICBDT05GSUdfU0VSSUFMXzgyNTBfUENJCisgICAgIENPTkZJR19TRVJJQUxfQ09SRQorICAgICBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRQorICAgICBDT05GSUdfVkdBX0FSQgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGF1ZGl0IGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyB0aGVzZQorICAgICAgICAgICAgZmlsZXMgKGhlbmNlIHRoZSBuYW1lcyBtdXN0IGJlIGV4YWN0bHkgdGhlIG9uZXMgZGlzY3Vzc2VkIGhlcmUpLAorICAgICAgICAgICAgYW5kIHVzZXMgdGhlbSBhcyBpbnB1dHMgd2hlbiBnZW5lcmF0aW5nIHdhcm5pbmdzIGFib3V0IHRoZQorICAgICAgICAgICAgZmluYWwgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIHVzZXItc3BlY2lmaWVkIGtlcm5lbCBNZXRhZGF0YSByZXBvc2l0b3J5LCBvciByZWNpcGUgc3BhY2UKKyAgICAgICAgICAgIGZlYXR1cmUsIGNhbiB1c2UgdGhlc2Ugc2FtZSBmaWxlcyB0byBjbGFzc2lmeSBvcHRpb25zIHRoYXQgYXJlCisgICAgICAgICAgICBmb3VuZCB3aXRoaW4gaXRzIDxmaWxlbmFtZT4uY2ZnPC9maWxlbmFtZT4gZmlsZXMgYXMgaGFyZHdhcmUKKyAgICAgICAgICAgIG9yIG5vbi1oYXJkd2FyZSwgdG8gcHJldmVudCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBmcm9tCisgICAgICAgICAgICBwcm9kdWNpbmcgYW4gZXJyb3Igb3Igd2FybmluZyB3aGVuIGFuIG9wdGlvbiBpcyBub3QgaW4gdGhlCisgICAgICAgICAgICBmaW5hbCA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3Rpb24+CiA8L2FwcGVuZGl4PgogPCEtLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWV4YW1wbGVzLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1leGFtcGxlcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkOWFlZjYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWV4YW1wbGVzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkxOCArMCwwIEBACi08IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCi0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgotWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgotCi08Y2hhcHRlciBpZD0na2VybmVsLWhvdy10byc+Ci0KLTx0aXRsZT5Xb3JraW5nIHdpdGggdGhlIFlvY3RvIFByb2plY3QgS2VybmVsPC90aXRsZT4KLQotCi08c2VjdGlvbiBpZD0nYWN0aW9ucy1vcmcnPgotICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgICBUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIGhvdyB0byBhY2NvbXBsaXNoIHRhc2tzIGludm9sdmluZyBhIGtlcm5lbCdzIHRyZWUgc3RydWN0dXJlLgotICAgICAgICBUaGUgaW5mb3JtYXRpb24gaXMgZGVzaWduZWQgdG8gaGVscCB0aGUgZGV2ZWxvcGVyIHRoYXQgd2FudHMgdG8gbW9kaWZ5IHRoZSBZb2N0bwotICAgICAgICBQcm9qZWN0IGtlcm5lbCBhbmQgY29udHJpYnV0ZSBjaGFuZ2VzIHVwc3RyZWFtIHRvIHRoZSBZb2N0byBQcm9qZWN0LgotICAgICAgICBUaGUgaW5mb3JtYXRpb24gY292ZXJzIHRoZSBmb2xsb3dpbmc6Ci0gICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VHJlZSBjb25zdHJ1Y3Rpb248L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CdWlsZCBzdHJhdGVnaWVzPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+V29ya2Zsb3cgZXhhbXBsZXM8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPC9wYXJhPgotPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9J3RyZWUtY29uc3RydWN0aW9uJz4KLSAgICAgICAgPHRpdGxlPlRyZWUgQ29uc3RydWN0aW9uPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGNvbnN0cnVjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgc291cmNlIHJlcG9zaXRvcmllcwotICAgICAgICAgICAgYXMgYWNjb21wbGlzaGVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0IHRlYW0gdG8gY3JlYXRlIGtlcm5lbCByZXBvc2l0b3JpZXMuCi0gICAgICAgICAgICBUaGVzZSBrZXJuZWwgcmVwb3NpdG9yaWVzIGFyZSBmb3VuZCB1bmRlciB0aGUgaGVhZGluZyAiWW9jdG8gTGludXggS2VybmVsIiBhdAotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpJz4mWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2k8L3VsaW5rPgotICAgICAgICAgICAgYW5kIGNhbiBiZSBzaGlwcGVkIGFzIHBhcnQgb2YgYSBZb2N0byBQcm9qZWN0IHJlbGVhc2UuCi0gICAgICAgICAgICBUaGUgdGVhbSBjcmVhdGVzIHRoZXNlIHJlcG9zaXRvcmllcyBieQotICAgICAgICAgICAgY29tcGlsaW5nIGFuZCBleGVjdXRpbmcgdGhlIHNldCBvZiBmZWF0dXJlIGRlc2NyaXB0aW9ucyBmb3IgZXZlcnkgQlNQL2ZlYXR1cmUKLSAgICAgICAgICAgIGluIHRoZSBwcm9kdWN0LgotICAgICAgICAgICAgVGhvc2UgZmVhdHVyZSBkZXNjcmlwdGlvbnMgbGlzdCBhbGwgbmVjZXNzYXJ5IHBhdGNoZXMsCi0gICAgICAgICAgICBjb25maWd1cmF0aW9uLCBicmFuY2hpbmcsIHRhZ2dpbmcgYW5kIGZlYXR1cmUgZGl2aXNpb25zIGZvdW5kIGluIGEga2VybmVsLgotICAgICAgICAgICAgVGh1cywgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHJlcG9zaXRvcnkgKG9yIHRyZWUpIGlzIGJ1aWx0LgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIGV4aXN0ZW5jZSBvZiB0aGlzIHRyZWUgYWxsb3dzIHlvdSB0byBhY2Nlc3MgYW5kIGNsb25lIGEgcGFydGljdWxhcgotICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBrZXJuZWwgcmVwb3NpdG9yeSBhbmQgdXNlIGl0IHRvIGJ1aWxkIGltYWdlcyBiYXNlZCBvbiB0aGVpciBjb25maWd1cmF0aW9ucwotICAgICAgICAgICAgYW5kIGZlYXR1cmVzLgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZSBmaWxlcyB1c2VkIHRvIGRlc2NyaWJlIGFsbCB0aGUgdmFsaWQgZmVhdHVyZXMgYW5kIEJTUHMKLSAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBpbiBhbnkgY2xvbmUgb2YgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHNvdXJjZSByZXBvc2l0b3J5Ci0gICAgICAgICAgICBHaXQgdHJlZS4KLSAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgY2xvbmVzIHRoZSBZb2N0byBQcm9qZWN0IGJhc2VsaW5lIGtlcm5lbCB0aGF0Ci0gICAgICAgICAgICBicmFuY2hlZCBvZmYgb2YgPGZpbGVuYW1lPmxpbnV4Lm9yZzwvZmlsZW5hbWU+IHZlcnNpb24gMy40OgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by0zLjQKLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIEZvciBhbm90aGVyIGV4YW1wbGUgb2YgaG93IHRvIHNldCB1cCBhIGxvY2FsIEdpdCByZXBvc2l0b3J5IG9mIHRoZSBZb2N0byBQcm9qZWN0Ci0gICAgICAgICAgICBrZXJuZWwgZmlsZXMsIHNlZSB0aGUKLSAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNsb2NhbC1rZXJuZWwtZmlsZXMnPllvY3RvIFByb2plY3QgS2VybmVsPC91bGluaz4iIGJ1bGxldGVkCi0gICAgICAgICAgICBpdGVtIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgY2xvbmVkIHRoZSBrZXJuZWwgR2l0IHJlcG9zaXRvcnkgb24geW91ciBsb2NhbCBtYWNoaW5lLCB5b3UgY2FuCi0gICAgICAgICAgICBzd2l0Y2ggdG8gdGhlIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYnJhbmNoIHdpdGhpbiB0aGUgcmVwb3NpdG9yeS4KLSAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGFzc3VtZXMgdGhlIGxvY2FsIEdpdCByZXBvc2l0b3J5IGZvciB0aGUga2VybmVsIGlzIGluCi0gICAgICAgICAgICBhIHRvcC1sZXZlbCBkaXJlY3RvcnkgbmFtZWQgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuNDwvZmlsZW5hbWU+OgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGNkIH4vbGludXgteW9jdG8tMy40Ci0gICAgICQgZ2l0IGNoZWNrb3V0IC1iIG1ldGEgb3JpZ2luL21ldGEKLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgY2hlY2tlZCBvdXQgYW5kIHN3aXRjaGVkIHRvIHRoZSA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IGJyYW5jaCwKLSAgICAgICAgICAgIHlvdSBjYW4gc2VlIGEgc25hcHNob3Qgb2YgYWxsIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBhbmQgZmVhdHVyZSBkZXNjcmlwdGlvbnMgdGhhdCBhcmUKLSAgICAgICAgICAgIHVzZWQgdG8gYnVpbGQgdGhhdCBwYXJ0aWN1bGFyIGtlcm5lbCByZXBvc2l0b3J5LgotICAgICAgICAgICAgVGhlc2UgZGVzY3JpcHRpb25zIGFyZSBpbiB0aGUgZm9ybSBvZiA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+IGZpbGVzLgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgWW91IHNob3VsZCByZWFsaXplLCBob3dldmVyLCB0aGF0IGJyb3dzaW5nIHlvdXIgbG9jYWwga2VybmVsIHJlcG9zaXRvcnkKLSAgICAgICAgICAgIGZvciBmZWF0dXJlIGRlc2NyaXB0aW9ucyBhbmQgcGF0Y2hlcyBpcyBub3QgYW4gZWZmZWN0aXZlIHdheSB0byBkZXRlcm1pbmUgd2hhdCBpcyBpbiBhCi0gICAgICAgICAgICBwYXJ0aWN1bGFyIGtlcm5lbCBicmFuY2guCi0gICAgICAgICAgICBJbnN0ZWFkLCB5b3Ugc2hvdWxkIHVzZSBHaXQgZGlyZWN0bHkgdG8gZGlzY292ZXIgdGhlIGNoYW5nZXMgaW4gYSBicmFuY2guCi0gICAgICAgICAgICBVc2luZyBHaXQgaXMgYW4gZWZmaWNpZW50IGFuZCBmbGV4aWJsZSB3YXkgdG8gaW5zcGVjdCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwuCi0gICAgICAgICAgICBGb3IgZXhhbXBsZXMgc2hvd2luZyBob3cgdG8gdXNlIEdpdCB0byBpbnNwZWN0IGtlcm5lbCBjb21taXRzLCBzZWUgdGhlIGZvbGxvd2luZyBzZWN0aW9ucwotICAgICAgICAgICAgaW4gdGhpcyBjaGFwdGVyLgotICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgR3JvdW5kIHVwIHJlY29uc3RydWN0aW9uIG9mIHRoZSBjb21wbGV0ZSBrZXJuZWwgdHJlZSBpcyBhbiBhY3Rpb24gb25seSB0YWtlbiBieSB0aGUKLSAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHRlYW0gZHVyaW5nIGFuIGFjdGl2ZSBkZXZlbG9wbWVudCBjeWNsZS4KLSAgICAgICAgICAgICAgICBXaGVuIHlvdSBjcmVhdGUgYSBjbG9uZSBvZiB0aGUga2VybmVsIEdpdCByZXBvc2l0b3J5LCB5b3UgYXJlIHNpbXBseSBtYWtpbmcgaXQKLSAgICAgICAgICAgICAgICBlZmZpY2llbnRseSBhdmFpbGFibGUgZm9yIGJ1aWxkaW5nIGFuZCBkZXZlbG9wbWVudC4KLSAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgc3RlcHMgZGVzY3JpYmUgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIFlvY3RvIFByb2plY3QgVGVhbSBjb25zdHJ1Y3RzCi0gICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgc291cmNlIEdpdCByZXBvc2l0b3J5IChvciB0cmVlKSBmb3VuZCBhdAotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpJz48L3VsaW5rPiBnaXZlbiB0aGUKLSAgICAgICAgICAgIGludHJvZHVjdGlvbiBvZiBhIG5ldyB0b3AtbGV2ZWwga2VybmVsIGZlYXR1cmUgb3IgQlNQLgotICAgICAgICAgICAgVGhlc2UgYXJlIHRoZSBhY3Rpb25zIHRoYXQgZWZmZWN0aXZlbHkgY3JlYXRlIHRoZSB0cmVlCi0gICAgICAgICAgICB0aGF0IGluY2x1ZGVzIHRoZSBuZXcgZmVhdHVyZSwgcGF0Y2ggb3IgQlNQOgotICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIHRvcC1sZXZlbCBrZXJuZWwgZmVhdHVyZSBpcyBwYXNzZWQgdG8gdGhlIGtlcm5lbCBidWlsZCBzdWJzeXN0ZW0uCi0gICAgICAgICAgICAgICAgICAgIE5vcm1hbGx5LCB0aGlzIGZlYXR1cmUgaXMgYSBCU1AgZm9yIGEgcGFydGljdWxhciBrZXJuZWwgdHlwZS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGZpbGUgdGhhdCBkZXNjcmliZXMgdGhlIHRvcC1sZXZlbCBmZWF0dXJlIGlzIGxvY2F0ZWQgYnkgc2VhcmNoaW5nCi0gICAgICAgICAgICAgICAgICAgIHRoZXNlIHN5c3RlbSBkaXJlY3RvcmllczoKLSAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgaW4tdHJlZSBrZXJuZWwtY2FjaGUgZGlyZWN0b3JpZXMsIHdoaWNoIGFyZSBsb2NhdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPm1ldGEvY2ZnL2tlcm5lbC1jYWNoZTwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QXJlYXMgcG9pbnRlZCB0byBieSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHN0YXRlbWVudHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCBpbiByZWNpcGVzPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICBGb3IgYSB0eXBpY2FsIGJ1aWxkLCB0aGUgdGFyZ2V0IG9mIHRoZSBzZWFyY2ggaXMgYQotICAgICAgICAgICAgICAgICAgICBmZWF0dXJlIGRlc2NyaXB0aW9uIGluIGFuIDxmaWxlbmFtZT4uc2NjPC9maWxlbmFtZT4gZmlsZQotICAgICAgICAgICAgICAgICAgICB3aG9zZSBuYW1lIGZvbGxvd3MgdGhpcyBmb3JtYXQ6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJmx0O2JzcF9uYW1lJmd0Oy0mbHQ7a2VybmVsX3R5cGUmZ3Q7LnNjYwotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk9uY2UgbG9jYXRlZCwgdGhlIGZlYXR1cmUgZGVzY3JpcHRpb24gaXMgZWl0aGVyIGNvbXBpbGVkIGludG8gYSBzaW1wbGUgc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIG9mIGFjdGlvbnMsIG9yIGludG8gYW4gZXhpc3RpbmcgZXF1aXZhbGVudCBzY3JpcHQgdGhhdCBpcyBhbHJlYWR5IHBhcnQgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgIHNoaXBwZWQga2VybmVsLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHRyYSBmZWF0dXJlcyBhcmUgYXBwZW5kZWQgdG8gdGhlIHRvcC1sZXZlbCBmZWF0dXJlIGRlc2NyaXB0aW9uLgotICAgICAgICAgICAgICAgICAgICBUaGVzZSBmZWF0dXJlcyBjYW4gY29tZSBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS0VSTkVMX0ZFQVRVUkVTJz48ZmlsZW5hbWU+S0VSTkVMX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiByZWNpcGVzLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FYWNoIGV4dHJhIGZlYXR1cmUgaXMgbG9jYXRlZCwgY29tcGlsZWQgYW5kIGFwcGVuZGVkIHRvIHRoZSBzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgYXMgZGVzY3JpYmVkIGluIHN0ZXAgdGhyZWUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBzY3JpcHQgaXMgZXhlY3V0ZWQgdG8gcHJvZHVjZSBhIHNlcmllcyBvZiA8ZmlsZW5hbWU+bWV0YS0qPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMuCi0gICAgICAgICAgICAgICAgICAgIFRoZXNlIGRpcmVjdG9yaWVzIGFyZSBkZXNjcmlwdGlvbnMgb2YgYWxsIHRoZSBicmFuY2hlcywgdGFncywgcGF0Y2hlcyBhbmQgY29uZmlndXJhdGlvbnMgdGhhdAotICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGJhc2UgR2l0IHJlcG9zaXRvcnkgdG8gY29tcGxldGVseSBjcmVhdGUgdGhlCi0gICAgICAgICAgICAgICAgICAgIHNvdXJjZSAoYnVpbGQpIGJyYW5jaCBmb3IgdGhlIG5ldyBCU1Agb3IgZmVhdHVyZS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGJhc2UgcmVwb3NpdG9yeSBpcyBjbG9uZWQsIGFuZCB0aGUgYWN0aW9ucwotICAgICAgICAgICAgICAgICAgICBsaXN0ZWQgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLSo8L2ZpbGVuYW1lPiBkaXJlY3RvcmllcyBhcmUgYXBwbGllZCB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgdHJlZS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIEdpdCByZXBvc2l0b3J5IGlzIGxlZnQgd2l0aCB0aGUgZGVzaXJlZCBicmFuY2ggY2hlY2tlZCBvdXQgYW5kIGFueQotICAgICAgICAgICAgICAgICAgICByZXF1aXJlZCBicmFuY2hpbmcsIHBhdGNoaW5nIGFuZCB0YWdnaW5nIGhhcyBiZWVuIHBlcmZvcm1lZC48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUga2VybmVsIHRyZWUgaXMgbm93IHJlYWR5IGZvciBkZXZlbG9wZXIgY29uc3VtcHRpb24gdG8gYmUgbG9jYWxseSBjbG9uZWQsCi0gICAgICAgICAgICBjb25maWd1cmVkLCBhbmQgYnVpbHQgaW50byBhIFlvY3RvIFByb2plY3Qga2VybmVsIHNwZWNpZmljIHRvIHNvbWUgdGFyZ2V0IGhhcmR3YXJlLgotICAgICAgICAgICAgPG5vdGU+PHBhcmE+VGhlIGdlbmVyYXRlZCA8ZmlsZW5hbWU+bWV0YS0qPC9maWxlbmFtZT4gZGlyZWN0b3JpZXMgYWRkIHRvIHRoZSBrZXJuZWwKLSAgICAgICAgICAgICAgICBhcyBzaGlwcGVkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgcmVsZWFzZS4KLSAgICAgICAgICAgICAgICBBbnkgYWRkLW9ucyBhbmQgY29uZmlndXJhdGlvbiBkYXRhIGFyZSBhcHBsaWVkIHRvIHRoZSBlbmQgb2YgYW4gZXhpc3RpbmcgYnJhbmNoLgotICAgICAgICAgICAgICAgIFRoZSBmdWxsIHJlcG9zaXRvcnkgZ2VuZXJhdGlvbiB0aGF0IGlzIGZvdW5kIGluIHRoZQotICAgICAgICAgICAgICAgIG9mZmljaWFsIFlvY3RvIFByb2plY3Qga2VybmVsIHJlcG9zaXRvcmllcyBhdAotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+aHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQuY2dpPC91bGluaz4KLSAgICAgICAgICAgICAgICBpcyB0aGUgY29tYmluYXRpb24gb2YgYWxsIHN1cHBvcnRlZCBib2FyZHMgYW5kIGNvbmZpZ3VyYXRpb25zLjwvcGFyYT4KLSAgICAgICAgICAgICAgICA8cGFyYT5UaGUgdGVjaG5pcXVlIHRoZSBZb2N0byBQcm9qZWN0IHRlYW0gdXNlcyBpcyBmbGV4aWJsZSBhbmQgYWxsb3dzIGZvciBzZWFtbGVzcwotICAgICAgICAgICAgICAgIGJsZW5kaW5nIG9mIGFuIGltbXV0YWJsZSBoaXN0b3J5IHdpdGggYWRkaXRpb25hbCBwYXRjaGVzIHNwZWNpZmljIHRvIGEKLSAgICAgICAgICAgICAgICBkZXBsb3ltZW50LgotICAgICAgICAgICAgICAgIEFueSBhZGRpdGlvbnMgdG8gdGhlIGtlcm5lbCBiZWNvbWUgYW4gaW50ZWdyYXRlZCBwYXJ0IG9mIHRoZSBicmFuY2hlcy48L3BhcmE+Ci0gICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0nYnVpbGQtc3RyYXRlZ3knPgotICAgICAgICA8dGl0bGU+QnVpbGQgU3RyYXRlZ3k8L3RpdGxlPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIE9uY2UgYSBsb2NhbCBHaXQgcmVwb3NpdG9yeSBvZiB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgZXhpc3RzIG9uIGEgZGV2ZWxvcG1lbnQgc3lzdGVtLAotICAgICAgICAgICAgeW91IGNhbiBjb25zaWRlciB0aGUgY29tcGlsYXRpb24gcGhhc2Ugb2Yga2VybmVsIGRldmVsb3BtZW50IC0gYnVpbGRpbmcgYSBrZXJuZWwgaW1hZ2UuCi0gICAgICAgICAgICBTb21lIHByZXJlcXVpc2l0ZXMgZXhpc3QgdGhhdCBhcmUgdmFsaWRhdGVkIGJ5IHRoZSBidWlsZCBwcm9jZXNzIGJlZm9yZSBjb21waWxhdGlvbgotICAgICAgICAgICAgc3RhcnRzOgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+IHBvaW50cwotICAgICAgICAgICAgICAgIHRvIHRoZSBrZXJuZWwgR2l0IHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSBCU1AgYnVpbGQgYnJhbmNoIGV4aXN0cy4KLSAgICAgICAgICAgICAgICBUaGlzIGJyYW5jaCBoYXMgdGhlIGZvbGxvd2luZyBmb3JtOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJmx0O2tlcm5lbF90eXBlJmd0Oy8mbHQ7YnNwX25hbWUmZ3Q7Ci0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIG1ha2VzIHN1cmUgdGhlc2UgY29uZGl0aW9ucyBleGlzdCBiZWZvcmUgYXR0ZW1wdGluZyBjb21waWxhdGlvbi4KLSAgICAgICAgICAgIE90aGVyIG1lYW5zLCBob3dldmVyLCBkbyBleGlzdCwgc3VjaCBhcyBhcyBib290c3RyYXBwaW5nIGEgQlNQLCBzZWUKLSAgICAgICAgICAgIHRoZSAiPGxpbmsgbGlua2VuZD0nd29ya2Zsb3ctZXhhbXBsZXMnPldvcmtmbG93IEV4YW1wbGVzPC9saW5rPiIuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEJlZm9yZSBidWlsZGluZyBhIGtlcm5lbCwgdGhlIGJ1aWxkIHByb2Nlc3MgdmVyaWZpZXMgdGhlIHRyZWUKLSAgICAgICAgICAgIGFuZCBjb25maWd1cmVzIHRoZSBrZXJuZWwgYnkgcHJvY2Vzc2luZyBhbGwgb2YgdGhlCi0gICAgICAgICAgICBjb25maWd1cmF0aW9uICJmcmFnbWVudHMiIHNwZWNpZmllZCBieSBmZWF0dXJlIGRlc2NyaXB0aW9ucyBpbiB0aGUgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPgotICAgICAgICAgICAgZmlsZXMuCi0gICAgICAgICAgICBBcyB0aGUgZmVhdHVyZXMgYXJlIGNvbXBpbGVkLCBhc3NvY2lhdGVkIGtlcm5lbCBjb25maWd1cmF0aW9uIGZyYWdtZW50cyBhcmUgbm90ZWQKLSAgICAgICAgICAgIGFuZCByZWNvcmRlZCBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtKjwvZmlsZW5hbWU+IHNlcmllcyBvZiBkaXJlY3RvcmllcyBpbiB0aGVpciBjb21waWxhdGlvbiBvcmRlci4KLSAgICAgICAgICAgIFRoZSBmcmFnbWVudHMgYXJlIG1pZ3JhdGVkLCBwcmUtcHJvY2Vzc2VkIGFuZCBwYXNzZWQgdG8gdGhlIExpbnV4IEtlcm5lbAotICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBzdWJzeXN0ZW0gKDxmaWxlbmFtZT5sa2M8L2ZpbGVuYW1lPikgYXMgcmF3IGlucHV0IGluIHRoZSBmb3JtCi0gICAgICAgICAgICBvZiBhIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZS4KLSAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bGtjPC9maWxlbmFtZT4gdXNlcyBpdHMgb3duIGludGVybmFsIGRlcGVuZGVuY3kgY29uc3RyYWludHMgdG8gZG8gdGhlIGZpbmFsCi0gICAgICAgICAgICBwcm9jZXNzaW5nIG9mIHRoYXQgaW5mb3JtYXRpb24gYW5kIGdlbmVyYXRlcyB0aGUgZmluYWwgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlCi0gICAgICAgICAgICB0aGF0IGlzIHVzZWQgZHVyaW5nIGNvbXBpbGF0aW9uLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBVc2luZyB0aGUgYm9hcmQncyBhcmNoaXRlY3R1cmUgYW5kIG90aGVyIHJlbGV2YW50IHZhbHVlcyBmcm9tIHRoZSBib2FyZCdzIHRlbXBsYXRlLAotICAgICAgICAgICAga2VybmVsIGNvbXBpbGF0aW9uIGlzIHN0YXJ0ZWQgYW5kIGEga2VybmVsIGltYWdlIGlzIHByb2R1Y2VkLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgb3RoZXIgdGhpbmcgdGhhdCB5b3Ugbm90aWNlIG9uY2UgeW91IGNvbmZpZ3VyZSBhIGtlcm5lbCBpcyB0aGF0Ci0gICAgICAgICAgICB0aGUgYnVpbGQgcHJvY2VzcyBnZW5lcmF0ZXMgYSBidWlsZCB0cmVlIHRoYXQgaXMgc2VwYXJhdGUgZnJvbSB5b3VyIGtlcm5lbCdzIGxvY2FsIEdpdAotICAgICAgICAgICAgc291cmNlIHJlcG9zaXRvcnkgdHJlZS4KLSAgICAgICAgICAgIFRoaXMgYnVpbGQgdHJlZSBoYXMgYSBuYW1lIHRoYXQgdXNlcyB0aGUgZm9sbG93aW5nIGZvcm0sIHdoZXJlCi0gICAgICAgICAgICA8ZmlsZW5hbWU+JHtNQUNISU5FfTwvZmlsZW5hbWU+IGlzIHRoZSBtZXRhZGF0YSBuYW1lIG9mIHRoZSBtYWNoaW5lIChCU1ApIGFuZCAia2VybmVsX3R5cGUiIGlzIG9uZQotICAgICAgICAgICAgb2YgdGhlIFlvY3RvIFByb2plY3Qgc3VwcG9ydGVkIGtlcm5lbCB0eXBlcyAoZS5nLiAic3RhbmRhcmQiKToKLSAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBsaW51eC0ke01BQ0hJTkV9LSZsdDtrZXJuZWxfdHlwZSZndDstYnVpbGQKLSAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgZXhpc3Rpbmcgc3VwcG9ydCBpbiB0aGUgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiB0cmVlIGFjaGlldmVzIHRoaXMKLSAgICAgICAgICAgIGRlZmF1bHQgZnVuY3Rpb25hbGl0eS4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhpcyBiZWhhdmlvciBtZWFucyB0aGF0IGFsbCB0aGUgZ2VuZXJhdGVkIGZpbGVzIGZvciBhIHBhcnRpY3VsYXIgbWFjaGluZSBvciBCU1AgYXJlIG5vdyBpbgotICAgICAgICAgICAgdGhlIGJ1aWxkIHRyZWUgZGlyZWN0b3J5LgotICAgICAgICAgICAgVGhlIGZpbGVzIGluY2x1ZGUgdGhlIGZpbmFsIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSwgYWxsIHRoZSA8ZmlsZW5hbWU+Lm88L2ZpbGVuYW1lPgotICAgICAgICAgICAgZmlsZXMsIHRoZSA8ZmlsZW5hbWU+LmE8L2ZpbGVuYW1lPiBmaWxlcywgYW5kIHNvIGZvcnRoLgotICAgICAgICAgICAgU2luY2UgZWFjaCBtYWNoaW5lIG9yIEJTUCBoYXMgaXRzIG93biBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnkgaW4gaXRzIG93biBzZXBhcmF0ZSBicmFuY2gKLSAgICAgICAgICAgIG9mIHRoZSBHaXQgcmVwb3NpdG9yeSwgeW91IGNhbiBlYXNpbHkgc3dpdGNoIGJldHdlZW4gZGlmZmVyZW50IGJ1aWxkcy4KLSAgICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSd3b3JrZmxvdy1leGFtcGxlcyc+Ci0gICAgICAgIDx0aXRsZT5Xb3JrZmxvdyBFeGFtcGxlczwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBBcyBwcmV2aW91c2x5IG5vdGVkLCB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgaGFzIGJ1aWx0LWluIEdpdCBpbnRlZ3JhdGlvbi4KLSAgICAgICAgICAgIEhvd2V2ZXIsIHRoZXNlIHV0aWxpdGllcyBhcmUgbm90IHRoZSBvbmx5IHdheSB0byB3b3JrIHdpdGggdGhlIGtlcm5lbCByZXBvc2l0b3J5LgotICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgaGFzIG5vdCBtYWRlIGNoYW5nZXMgdG8gR2l0IG9yIHRvIG90aGVyIHRvb2xzIHRoYXQKLSAgICAgICAgICAgIHdvdWxkIGludmFsaWRhdGUgYWx0ZXJuYXRlIHdvcmtmbG93cy4KLSAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIHdheSB0aGUga2VybmVsIHJlcG9zaXRvcnkgaXMgY29uc3RydWN0ZWQgcmVzdWx0cyBpbiB1c2luZwotICAgICAgICAgICAgb25seSBjb3JlIEdpdCBmdW5jdGlvbmFsaXR5LCB0aHVzIGFsbG93aW5nIGFueSBudW1iZXIgb2YgdG9vbHMgb3IgZnJvbnQgZW5kcyB0byB1c2UgdGhlCi0gICAgICAgICAgICByZXN1bHRpbmcgdHJlZS4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHNldmVyYWwgd29ya2Zsb3cgZXhhbXBsZXMuCi0gICAgICAgICAgICBNYW55IG9mIHRoZSBleGFtcGxlcyB1c2UgR2l0IGNvbW1hbmRzLgotICAgICAgICAgICAgWW91IGNhbiBmaW5kIEdpdCBkb2N1bWVudGF0aW9uIGF0Ci0gICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0LXNjbS5jb20vZG9jdW1lbnRhdGlvbic+PC91bGluaz4uCi0gICAgICAgICAgICBZb3UgY2FuIGZpbmQgYSBzaW1wbGUgb3ZlcnZpZXcgb2YgdXNpbmcgR2l0IHdpdGggdGhlIFlvY3RvIFByb2plY3QgaW4gdGhlCi0gICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZ2l0Jz5HaXQ8L3VsaW5rPiIKLSAgICAgICAgICAgIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2NoYW5nZS1pbnNwZWN0aW9uLWtlcm5lbC1jaGFuZ2VzLWNvbW1pdHMnPgotICAgICAgICAgICAgPHRpdGxlPkNoYW5nZSBJbnNwZWN0aW9uOiBDaGFuZ2VzL0NvbW1pdHM8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBBIGNvbW1vbiBxdWVzdGlvbiB3aGVuIHdvcmtpbmcgd2l0aCBhIGtlcm5lbCBpczoKLSAgICAgICAgICAgICAgICAiV2hhdCBjaGFuZ2VzIGhhdmUgYmVlbiBhcHBsaWVkIHRvIHRoaXMgdHJlZT8iCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEluIHByb2plY3RzIHRoYXQgaGF2ZSBhIGNvbGxlY3Rpb24gb2YgZGlyZWN0b3JpZXMgdGhhdAotICAgICAgICAgICAgICAgIGNvbnRhaW4gcGF0Y2hlcyB0byB0aGUga2VybmVsLCBpdCBpcyBwb3NzaWJsZSB0byBpbnNwZWN0IG9yICJncmVwIiB0aGUgY29udGVudHMKLSAgICAgICAgICAgICAgICBvZiB0aGUgZGlyZWN0b3JpZXMgdG8gZ2V0IGEgZ2VuZXJhbCBmZWVsIGZvciB0aGUgY2hhbmdlcy4KLSAgICAgICAgICAgICAgICBUaGlzIHNvcnQgb2YgcGF0Y2ggaW5zcGVjdGlvbiBpcyBub3QgYW4gZWZmaWNpZW50IHdheSB0byBkZXRlcm1pbmUgd2hhdCBoYXMgYmVlbgotICAgICAgICAgICAgICAgIGRvbmUgdG8gdGhlIGtlcm5lbC4KLSAgICAgICAgICAgICAgICBUaGUgcmVhc29uIGl0IGlzIGluZWZmaWNpZW50IGlzIGJlY2F1c2UgdGhlcmUgYXJlIG1hbnkgb3B0aW9uYWwgcGF0Y2hlcyB0aGF0IGFyZQotICAgICAgICAgICAgICAgIHNlbGVjdGVkIGJhc2VkIG9uIHRoZSBrZXJuZWwgdHlwZSBhbmQgdGhlIGZlYXR1cmUgZGVzY3JpcHRpb24uCi0gICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCBwYXRjaGVzIGNvdWxkIGV4aXN0IGluIGRpcmVjdG9yaWVzIHRoYXQgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgc2VhcmNoLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBBIG1vcmUgZWZmaWNpZW50IHdheSB0byBkZXRlcm1pbmUgd2hhdCBoYXMgY2hhbmdlZCBpbiB0aGUgYnJhbmNoIGlzIHRvIHVzZQotICAgICAgICAgICAgICAgIEdpdCBhbmQgaW5zcGVjdCBvciBzZWFyY2ggdGhlIGtlcm5lbCB0cmVlLgotICAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGdpdmVzIHlvdSBhIGZ1bGwgdmlldyBvZiBub3Qgb25seSB0aGUgc291cmNlIGNvZGUgbW9kaWZpY2F0aW9ucywKLSAgICAgICAgICAgICAgICBidXQgYWxzbyBwcm92aWRlcyB0aGUgcmVhc29ucyBmb3IgdGhlIGNoYW5nZXMuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxzZWN0aW9uIGlkPSd3aGF0LWNoYW5nZWQtaW4tYS1rZXJuZWwnPgotICAgICAgICAgICAgICAgIDx0aXRsZT5XaGF0IENoYW5nZWQgaW4gYSBLZXJuZWw/PC90aXRsZT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIGEgZmV3IGV4YW1wbGVzIHRoYXQgc2hvdyBob3cgdG8gdXNlIEdpdCBjb21tYW5kcyB0byBleGFtaW5lIGNoYW5nZXMuCi0gICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgR2l0IHJlcG9zaXRvcmllcyBpbiB0aGUgWW9jdG8gUHJvamVjdCBkbyBub3QgYnJlYWsgZXhpc3RpbmcgR2l0Ci0gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHksIGFuZCBiZWNhdXNlIHRoZXJlIGV4aXN0cyBtYW55IHBlcm11dGF0aW9ucyBvZiB0aGVzZSB0eXBlcyBvZgotICAgICAgICAgICAgICAgICAgICBHaXQgY29tbWFuZHMsIG1hbnkgbWV0aG9kcyBleGlzdCBieSB3aGljaCB5b3UgY2FuIGRpc2NvdmVyIGNoYW5nZXMuCi0gICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlcywgdW5sZXNzIHlvdSBwcm92aWRlIGEgY29tbWl0IHJhbmdlLAotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiBoaXN0b3J5IGlzIGJsZW5kZWQgd2l0aCBZb2N0byBQcm9qZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWwgY2hhbmdlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZm9ybSByYW5nZXMgYnkgdXNpbmcgYnJhbmNoIG5hbWVzIGZyb20gdGhlIGtlcm5lbCB0cmVlIGFzIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXIgYW5kIGxvd2VyIGNvbW1pdCBtYXJrZXJzIHdpdGggdGhlIEdpdCBjb21tYW5kcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VlIHRoZSBicmFuY2ggbmFtZXMgdGhyb3VnaCB0aGUgd2ViIGludGVyZmFjZSB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3Qgc291cmNlIHJlcG9zaXRvcmllcyBhdAotICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQuY2dpJz48L3VsaW5rPi4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgYnJhbmNoIG5hbWVzIGZvciB0aGUgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuNDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWwgcmVwb3NpdG9yeSBjYW4gYmUgc2VlbiBhdAotICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQuY2dpL2xpbnV4LXlvY3RvLTMuNC9yZWZzL2hlYWRzJz48L3VsaW5rPi4KLSAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgICAgICBUbyBzZWUgYSBmdWxsIHJhbmdlIG9mIHRoZSBjaGFuZ2VzLCB1c2UgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naXQgd2hhdGNoYW5nZWQ8L2ZpbGVuYW1lPiBjb21tYW5kIGFuZCBzcGVjaWZ5IGEgY29tbWl0IHJhbmdlCi0gICAgICAgICAgICAgICAgICAgIGZvciB0aGUgYnJhbmNoICg8ZmlsZW5hbWU+Jmx0O2NvbW1pdCZndDsuLiZsdDtjb21taXQmZ3Q7PC9maWxlbmFtZT4pLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBsb29rcyBhdCB3aGF0IGhhcyBjaGFuZ2VkIGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZW1lbmxvdzwvZmlsZW5hbWU+IGJyYW5jaCBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuNDwvZmlsZW5hbWU+IGtlcm5lbC4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGxvd2VyIGNvbW1pdCByYW5nZSBpcyB0aGUgY29tbWl0IGFzc29jaWF0ZWQgd2l0aCB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN0YW5kYXJkL2Jhc2U8L2ZpbGVuYW1lPiBicmFuY2gsIHdoaWxlCi0gICAgICAgICAgICAgICAgICAgIHRoZSB1cHBlciBjb21taXQgcmFuZ2UgaXMgdGhlIGNvbW1pdCBhc3NvY2lhdGVkIHdpdGggdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zdGFuZGFyZC9lbWVubG93PC9maWxlbmFtZT4gYnJhbmNoLgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZ2l0IHdoYXRjaGFuZ2VkIG9yaWdpbi9zdGFuZGFyZC9iYXNlLi5vcmlnaW4vc3RhbmRhcmQvZW1lbmxvdwotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRvIHNlZSBhIHN1bW1hcnkgb2YgY2hhbmdlcyB1c2UgdGhlIDxmaWxlbmFtZT5naXQgbG9nPC9maWxlbmFtZT4gY29tbWFuZC4KLSAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHVzaW5nIHRoZSBzYW1lIGJyYW5jaGVzOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZ2l0IGxvZyAtLW9uZWxpbmUgb3JpZ2luL3N0YW5kYXJkL2Jhc2UuLm9yaWdpbi9zdGFuZGFyZC9lbWVubG93Ci0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5naXQgbG9nPC9maWxlbmFtZT4gb3V0cHV0IG1pZ2h0IGJlIG1vcmUgdXNlZnVsIHRoYW4KLSAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5naXQgd2hhdGNoYW5nZWQ8L2ZpbGVuYW1lPiBhcyB5b3UgZ2V0Ci0gICAgICAgICAgICAgICAgICAgIGEgc2hvcnQsIG9uZS1saW5lIHN1bW1hcnkgb2YgZWFjaCBjaGFuZ2UgYW5kIG5vdCB0aGUgZW50aXJlIGNvbW1pdC4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gc2VlIGNvZGUgZGlmZmVyZW5jZXMgYXNzb2NpYXRlZCB3aXRoIGFsbCB0aGUgY2hhbmdlcywgdXNlCi0gICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Z2l0IGRpZmY8L2ZpbGVuYW1lPiBjb21tYW5kLgotICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBnaXQgZGlmZiBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNlZSB0aGUgY29tbWl0IGxvZyBtZXNzYWdlcyBhbmQgdGhlIHRleHQgZGlmZmVyZW5jZXMgdXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naXQgc2hvdzwvZmlsZW5hbWU+IGNvbW1hbmQ6Ci0gICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGdpdCBzaG93IG9yaWdpbi9zdGFuZGFyZC9iYXNlLi5vcmlnaW4vc3RhbmRhcmQvZW1lbmxvdwotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY3JlYXRlIGluZGl2aWR1YWwgcGF0Y2hlcyBmb3IgZWFjaCBjaGFuZ2UgYnkgdXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naXQgZm9ybWF0LXBhdGNoPC9maWxlbmFtZT4gY29tbWFuZC4KLSAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgdGhhdCBjcmVhdGVzIHBhdGNoIGZpbGVzIGZvciBlYWNoIGNvbW1pdCBhbmQKLSAgICAgICAgICAgICAgICAgICAgcGxhY2VzIHRoZW0gaW4geW91ciA8ZmlsZW5hbWU+RG9jdW1lbnRzPC9maWxlbmFtZT4gZGlyZWN0b3J5OgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZ2l0IGZvcm1hdC1wYXRjaCAtbyAkSE9NRS9Eb2N1bWVudHMgb3JpZ2luL3N0YW5kYXJkL2Jhc2UuLm9yaWdpbi9zdGFuZGFyZC9lbWVubG93Ci0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdzaG93LWEtcGFydGljdWxhci1mZWF0dXJlLW9yLWJyYW5jaC1jaGFuZ2UnPgotICAgICAgICAgICAgICAgIDx0aXRsZT5TaG93IGEgUGFydGljdWxhciBGZWF0dXJlIG9yIEJyYW5jaCBDaGFuZ2U8L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIERldmVsb3BlcnMgdXNlIHRhZ3MgaW4gdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHRyZWUgdG8gZGl2aWRlIGNoYW5nZXMgZm9yIHNpZ25pZmljYW50Ci0gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIG9yIGJyYW5jaGVzLgotICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBrbm93IGEgcGFydGljdWxhciB0YWcsIHlvdSBjYW4gdXNlIEdpdCBjb21tYW5kcwotICAgICAgICAgICAgICAgICAgICB0byBzaG93IGNoYW5nZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWcgYW5kIGZpbmQgdGhlIGJyYW5jaGVzIHRoYXQgY29udGFpbgotICAgICAgICAgICAgICAgICAgICB0aGUgZmVhdHVyZS4KLSAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIEJTUCBicmFuY2gsIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4sIGFuZCBmZWF0dXJlIHRhZ3MgYXJlIGFsbAotICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudCwgdGhlcmUgY291bGQgYmUgbWFueSB0YWdzLgotICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z2l0IHNob3cgJmx0O3RhZyZndDs8L2ZpbGVuYW1lPiBjb21tYW5kIHNob3dzIGNoYW5nZXMgdGhhdCBhcmUgdGFnZ2VkIGJ5Ci0gICAgICAgICAgICAgICAgICAgIGEgZmVhdHVyZS4KLSAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgc2hvd3MgY2hhbmdlcyB0YWdnZWQgYnkgdGhlIDxmaWxlbmFtZT5zeXN0ZW10YXA8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBmZWF0dXJlOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZ2l0IHNob3cgc3lzdGVtdGFwCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5naXQgYnJhbmNoIC0tY29udGFpbnMgJmx0O3RhZyZndDs8L2ZpbGVuYW1lPiBjb21tYW5kCi0gICAgICAgICAgICAgICAgICAgIHRvIHNob3cgdGhlIGJyYW5jaGVzIHRoYXQgY29udGFpbiBhIHBhcnRpY3VsYXIgZmVhdHVyZS4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIHNob3dzIHRoZSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlIDxmaWxlbmFtZT5zeXN0ZW10YXA8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBmZWF0dXJlOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZ2l0IGJyYW5jaCAtLWNvbnRhaW5zIHN5c3RlbXRhcAotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIG1hbnkgb3RoZXIgY29tcGFyaXNvbnMgdG8gaXNvbGF0ZSBCU1AgYW5kIGtlcm5lbCBjaGFuZ2VzLgotICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNhbiBjb21wYXJlIGFnYWluc3QgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiB0YWdzCi0gICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgdGhlIDxmaWxlbmFtZT52My40PC9maWxlbmFtZT4gdGFnLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvc2VjdGlvbj4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdkZXZlbG9wbWVudC1zYXZpbmcta2VybmVsLW1vZGlmaWNhdGlvbnMnPgotICAgICAgICAgICAgPHRpdGxlPkRldmVsb3BtZW50OiBTYXZpbmcgS2VybmVsIE1vZGlmaWNhdGlvbnM8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBBbm90aGVyIGNvbW1vbiBvcGVyYXRpb24gaXMgdG8gYnVpbGQgYSBCU1Agc3VwcGxpZWQgYnkgdGhlIFlvY3RvIFByb2plY3QsIG1ha2Ugc29tZQotICAgICAgICAgICAgICAgIGNoYW5nZXMsIHJlYnVpbGQsIGFuZCB0aGVuIHRlc3QuCi0gICAgICAgICAgICAgICAgVGhvc2UgbG9jYWwgY2hhbmdlcyBvZnRlbiBuZWVkIHRvIGJlIGV4cG9ydGVkLCBzaGFyZWQgb3Igb3RoZXJ3aXNlIG1haW50YWluZWQuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFNpbmNlIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBzb3VyY2UgdHJlZSBpcyBiYWNrZWQgYnkgR2l0LCB0aGlzIGFjdGl2aXR5IGlzCi0gICAgICAgICAgICAgICAgbXVjaCBlYXNpZXIgYXMgY29tcGFyZWQgdG8gd2l0aCBwcmV2aW91cyByZWxlYXNlcy4KLSAgICAgICAgICAgICAgICBCZWNhdXNlIEdpdCB0cmFja3MgZmlsZSBtb2RpZmljYXRpb25zLCBhZGRpdGlvbnMgYW5kIGRlbGV0aW9ucywgaXQgaXMgZWFzeQotICAgICAgICAgICAgICAgIHRvIG1vZGlmeSB0aGUgY29kZSBhbmQgbGF0ZXIgcmVhbGl6ZSB0aGF0IHlvdSBuZWVkIHRvIHNhdmUgdGhlIGNoYW5nZXMuCi0gICAgICAgICAgICAgICAgSXQgaXMgYWxzbyBlYXN5IHRvIGRldGVybWluZSB3aGF0IGhhcyBjaGFuZ2VkLgotICAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGFsc28gcHJvdmlkZXMgbWFueSB0b29scyB0byBjb21taXQsIHVuZG8gYW5kIGV4cG9ydCB0aG9zZSBtb2RpZmljYXRpb25zLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gYW5kIGl0cyBzdWItc2VjdGlvbnMsIGRlc2NyaWJlIGdlbmVyYWwgYXBwbGljYXRpb24gb2YgR2l0J3MKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cHVzaDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+cHVsbDwvZmlsZW5hbWU+IGNvbW1hbmRzLCB3aGljaCBhcmUgdXNlZCB0bwotICAgICAgICAgICAgICAgIGdldCB5b3VyIGNoYW5nZXMgdXBzdHJlYW0gb3Igc291cmNlIHlvdXIgY29kZSBmcm9tIGFuIHVwc3RyZWFtIHJlcG9zaXRvcnkuCi0gICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgc2NyaXB0cyB0aGF0IGhlbHAgeW91IHdvcmsgaW4gYSBjb2xsYWJvcmF0aXZlIGRldmVsb3BtZW50Ci0gICAgICAgICAgICAgICAgZW52aXJvbm1lbnQuCi0gICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZXNlIHNjcmlwdHMsIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcHVzaGluZy1hLWNoYW5nZS11cHN0cmVhbSc+VXNpbmcgU2NyaXB0cyB0byBQdXNoIGEgQ2hhbmdlCi0gICAgICAgICAgICAgICAgVXBzdHJlYW0gYW5kIFJlcXVlc3QgYSBQdWxsPC91bGluaz4iIGFuZAotICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzdWJtaXR0aW5nLWEtcGF0Y2gnPlVzaW5nIEVtYWlsIHRvIFN1Ym1pdCBhIFBhdGNoPC91bGluaz4iCi0gICAgICAgICAgICAgICAgc2VjdGlvbnMgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGVyZSBhcmUgbWFueSB3YXlzIHRvIHNhdmUga2VybmVsIG1vZGlmaWNhdGlvbnMuCi0gICAgICAgICAgICAgICAgVGhlIHRlY2huaXF1ZSBlbXBsb3llZAotICAgICAgICAgICAgICAgIGRlcGVuZHMgb24gdGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgcGF0Y2hlczoKLQotICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CdWxrIHN0b3JhZ2U8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkludGVybmFsIHNoYXJpbmcgZWl0aGVyIHRocm91Z2ggcGF0Y2hlcyBvciBieSB1c2luZyBHaXQ8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkV4dGVybmFsIHN1Ym1pc3Npb25zPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHBvcnRpbmcgZm9yIGludGVncmF0aW9uIGludG8gYW5vdGhlciBTb3VyY2UgQ29kZQotICAgICAgICAgICAgICAgICAgICAgICAgTWFuYWdlciAoU0NNKTwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBCZWNhdXNlIG9mIHRoZSBmb2xsb3dpbmcgbGlzdCBvZiBpc3N1ZXMsIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgcGF0Y2hlcyBhbHNvIGluZmx1ZW5jZXMKLSAgICAgICAgICAgICAgICB0aGUgbWV0aG9kIGZvciBnYXRoZXJpbmcgdGhlbToKLQotICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CaXNlY3RhYmlsaXR5PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Db21taXQgaGVhZGVyczwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RGl2aXNpb24gb2Ygc3Vic3lzdGVtcyBmb3Igc2VwYXJhdGUgc3VibWlzc2lvbiBvciByZXZpZXc8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2J1bGstZXhwb3J0Jz4KLSAgICAgICAgICAgICAgICA8dGl0bGU+QnVsayBFeHBvcnQ8L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHlvdSBjYW4gImJ1bGsiIGV4cG9ydCBjaGFuZ2VzIHRoYXQgaGF2ZSBub3QKLSAgICAgICAgICAgICAgICAgICAgYmVlbiBzZXBhcmF0ZWQgb3IgZGl2aWRlZC4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBzaXR1YXRpb24gd29ya3Mgd2VsbCB3aGVuIHlvdSBhcmUgc2ltcGx5IHN0b3JpbmcgcGF0Y2hlcyBvdXRzaWRlIG9mIHRoZSBrZXJuZWwKLSAgICAgICAgICAgICAgICAgICAgc291cmNlIHJlcG9zaXRvcnksIGVpdGhlciBwZXJtYW5lbnRseSBvciB0ZW1wb3JhcmlseSwgYW5kIHlvdSBhcmUgbm90IGNvbW1pdHRpbmcKLSAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50YWwgY2hhbmdlcyBkdXJpbmcgZGV2ZWxvcG1lbnQuCi0gICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB0ZWNobmlxdWUgaXMgbm90IGFwcHJvcHJpYXRlIGZvciBmdWxsIGludGVncmF0aW9uIG9mIHVwc3RyZWFtIHN1Ym1pc3Npb24KLSAgICAgICAgICAgICAgICAgICAgICAgIGJlY2F1c2UgY2hhbmdlcyBhcmUgbm90IHByb3Blcmx5IGRpdmlkZWQgYW5kIGRvIG5vdCBwcm92aWRlIGFuIGF2ZW51ZSBmb3IgcGVyLWNoYW5nZQotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0IG1lc3NhZ2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlcmVmb3JlLCB0aGlzIGV4YW1wbGUgYXNzdW1lcyB0aGF0IGNoYW5nZXMgaGF2ZSBub3QgYmVlbiBjb21taXR0ZWQgaW5jcmVtZW50YWxseQotICAgICAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGRldmVsb3BtZW50IGFuZCB0aGF0IHlvdSBzaW1wbHkgbXVzdCBnYXRoZXIgYW5kIGV4cG9ydCB0aGVtLgotICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgIyBidWxrIGV4cG9ydCBvZiBBTEwgbW9kaWZpY2F0aW9ucyB3aXRob3V0IHNlcGFyYXRpb24gb3IgZGl2aXNpb24KLSAgICAgIyBvZiB0aGUgY2hhbmdlcwotCi0gICAgICQgZ2l0IGFkZCAuCi0gICAgICQgZ2l0IGNvbW1pdCAtcyAtYSAtbSAmbHQ7bXNnJmd0OwotICAgICAgICBvcgotICAgICAkIGdpdCBjb21taXQgLXMgLWEgIyBhbmQgaW50ZXJhY3Qgd2l0aCAkRURJVE9SCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIG9wZXJhdGlvbnMgY2FwdHVyZSBhbGwgdGhlIGxvY2FsIGNoYW5nZXMgaW4gdGhlIHByb2plY3Qgc291cmNlCi0gICAgICAgICAgICAgICAgICAgIHRyZWUgaW4gYSBzaW5nbGUgR2l0IGNvbW1pdC4KLSAgICAgICAgICAgICAgICAgICAgQW5kLCB0aGF0IGNvbW1pdCBpcyBhbHNvIHN0b3JlZCBpbiB0aGUgcHJvamVjdCdzIHNvdXJjZSB0cmVlLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBjaGFuZ2VzIGFyZSBleHBvcnRlZCwgeW91IGNhbiByZXN0b3JlIHRoZW0gbWFudWFsbHkgdXNpbmcgYSB0ZW1wbGF0ZQotICAgICAgICAgICAgICAgICAgICBvciB0aHJvdWdoIGludGVncmF0aW9uIHdpdGggdGhlIDxmaWxlbmFtZT5kZWZhdWx0X2tlcm5lbDwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgICAgICA8c2VjdGlvbiBpZD0naW5jcmVtZW50YWwtcGxhbm5lZC1zaGFyaW5nJz4KLSAgICAgICAgICAgICAgICA8dGl0bGU+SW5jcmVtZW50YWwvUGxhbm5lZCBTaGFyaW5nPC90aXRsZT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB0byBzYXZlIG1vZGlmaWNhdGlvbnMgd2hlbiB5b3UgYXJlIG1ha2luZyBpbmNyZW1lbnRhbAotICAgICAgICAgICAgICAgICAgICBjb21taXRzIG9yIHByYWN0aWNpbmcgcGxhbm5lZCBzaGFyaW5nLgotICAgICAgICAgICAgICAgICAgICBUaGUgZXhhbXBsZXMgaW4gdGhpcyBzZWN0aW9uIGFzc3VtZSB0aGF0IHlvdSBoYXZlIGluY3JlbWVudGFsbHkgY29tbWl0dGVkCi0gICAgICAgICAgICAgICAgICAgIGNoYW5nZXMgdG8gdGhlIHRyZWUgZHVyaW5nIGRldmVsb3BtZW50IGFuZCBub3cgbmVlZCB0byBleHBvcnQgdGhlbS4KLSAgICAgICAgICAgICAgICAgICAgVGhlIHNlY3Rpb25zIHRoYXQgZm9sbG93Ci0gICAgICAgICAgICAgICAgICAgIGRlc2NyaWJlIGhvdyB5b3UgY2FuIGV4cG9ydCB5b3VyIGNoYW5nZXMgaW50ZXJuYWxseSB0aHJvdWdoIGVpdGhlciBwYXRjaGVzIG9yIGJ5Ci0gICAgICAgICAgICAgICAgICAgIHVzaW5nIEdpdCBjb21tYW5kcy4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgRHVyaW5nIGRldmVsb3BtZW50LCB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGFyZSBvZiBpbnRlcmVzdC4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGZ1bGwgR2l0IGRvY3VtZW50YXRpb24sIHJlZmVyIHRvIHRoZSBHaXQgZG9jdW1lbnRhdGlvbiBhdAotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0aHViLmNvbSc+PC91bGluaz4uCi0KLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAjIGVkaXQgYSBmaWxlCi0gICAgICQgdmkgJmx0O3BhdGgmZ3Q7L2ZpbGUKLSAgICAgIyBzdGFnZSB0aGUgY2hhbmdlCi0gICAgICQgZ2l0IGFkZCAmbHQ7cGF0aCZndDsvZmlsZQotICAgICAjIGNvbW1pdCB0aGUgY2hhbmdlCi0gICAgICQgZ2l0IGNvbW1pdCAtcwotICAgICAjIHJlbW92ZSBhIGZpbGUKLSAgICAgJCBnaXQgcm0gJmx0O3BhdGgmZ3Q7L2ZpbGUKLSAgICAgIyBjb21taXQgdGhlIGNoYW5nZQotICAgICAkIGdpdCBjb21taXQgLXMKLQotICAgICAuLi4gZXRjLgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIERpc3RyaWJ1dGVkIGRldmVsb3BtZW50IHdpdGggR2l0IGlzIHBvc3NpYmxlIHdoZW4geW91IHVzZSBhIHVuaXZlcnNhbGx5Ci0gICAgICAgICAgICAgICAgICAgIGFncmVlZC11cG9uIHVuaXF1ZSBjb21taXQgaWRlbnRpZmllciAoc2V0IGJ5IHRoZSBjcmVhdG9yIG9mIHRoZSBjb21taXQpIHRoYXQgbWFwcyB0byBhCi0gICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIGNoYW5nZSBzZXQgd2l0aCBhIHNwZWNpZmljIHBhcmVudC4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBpZGVudGlmaWVyIGlzIGNyZWF0ZWQgZm9yIHlvdSB3aGVuCi0gICAgICAgICAgICAgICAgICAgIHlvdSBjcmVhdGUgYSBjb21taXQsIGFuZCBpcyByZS1jcmVhdGVkIHdoZW4geW91IGFtZW5kLCBhbHRlciBvciByZS1hcHBseQotICAgICAgICAgICAgICAgICAgICBhIGNvbW1pdC4KLSAgICAgICAgICAgICAgICAgICAgQXMgYW4gaW5kaXZpZHVhbCBpbiBpc29sYXRpb24sIHRoaXMgaXMgb2Ygbm8gaW50ZXJlc3QuCi0gICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdQotICAgICAgICAgICAgICAgICAgICBpbnRlbmQgdG8gc2hhcmUgeW91ciB0cmVlIHdpdGggbm9ybWFsIEdpdCA8ZmlsZW5hbWU+cHVzaDwvZmlsZW5hbWU+IGFuZAotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cHVsbDwvZmlsZW5hbWU+IG9wZXJhdGlvbnMgZm9yCi0gICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGVkIGRldmVsb3BtZW50LCB5b3Ugc2hvdWxkIGNvbnNpZGVyIHRoZSByYW1pZmljYXRpb25zIG9mIGNoYW5naW5nIGEKLSAgICAgICAgICAgICAgICAgICAgY29tbWl0IHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzaGFyZWQgd2l0aCBvdGhlcnMuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEFzc3VtaW5nIHRoYXQgdGhlIGNoYW5nZXMgaGF2ZSBub3QgYmVlbiBwdXNoZWQgdXBzdHJlYW0sIG9yIHB1bGxlZCBpbnRvCi0gICAgICAgICAgICAgICAgICAgIGFub3RoZXIgcmVwb3NpdG9yeSwgeW91IGNhbiB1cGRhdGUgYm90aCB0aGUgY29tbWl0IGNvbnRlbnQgYW5kIGNvbW1pdCBtZXNzYWdlcwotICAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGVkIHdpdGggZGV2ZWxvcG1lbnQgYnkgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKLQotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgR2l0IGFkZCAmbHQ7cGF0aCZndDsvZmlsZQotICAgICAkIEdpdCBjb21taXQgLS1hbWVuZAotICAgICAkIEdpdCByZWJhc2Ugb3IgR2l0IHJlYmFzZSAtaQotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEFnYWluLCBhc3N1bWluZyB0aGF0IHRoZSBjaGFuZ2VzIGhhdmUgbm90IGJlZW4gcHVzaGVkIHVwc3RyZWFtLCBhbmQgdGhhdAotICAgICAgICAgICAgICAgICAgICBubyBwZW5kaW5nIHdvcmtzLWluLXByb2dyZXNzIGV4aXN0ICh1c2UgPGZpbGVuYW1lPmdpdCBzdGF0dXM8L2ZpbGVuYW1lPiB0byBjaGVjayksIHRoZW4KLSAgICAgICAgICAgICAgICAgICAgeW91IGNhbiByZXZlcnQgKHVuZG8pIGNvbW1pdHMgYnkgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKLQotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICMgcmVtb3ZlIHRoZSBjb21taXQsIHVwZGF0ZSB3b3JraW5nIHRyZWUgYW5kIHJlbW92ZSBhbGwKLSAgICAgIyB0cmFjZXMgb2YgdGhlIGNoYW5nZQotICAgICAkIGdpdCByZXNldCAtLWhhcmQgSEVBRF4KLSAgICAgIyByZW1vdmUgdGhlIGNvbW1pdCwgYnV0IGxlYXZlIHRoZSBmaWxlcyBjaGFuZ2VkIGFuZCBzdGFnZWQgZm9yIHJlLWNvbW1pdAotICAgICAkIGdpdCByZXNldCAtLXNvZnQgSEVBRF4KLSAgICAgIyByZW1vdmUgdGhlIGNvbW1pdCwgbGVhdmUgZmlsZSBjaGFuZ2UsIGJ1dCBub3Qgc3RhZ2VkIGZvciBjb21taXQKLSAgICAgJCBnaXQgcmVzZXQgLS1taXhlZCBIRUFEXgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY3JlYXRlIGJyYW5jaGVzLCAiY2hlcnJ5LXBpY2siIGNoYW5nZXMsIG9yIHBlcmZvcm0gYW55IG51bWJlciBvZiBHaXQKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucyB1bnRpbCB0aGUgY29tbWl0cyBhcmUgaW4gZ29vZCBvcmRlciBmb3IgcHVzaGluZyB1cHN0cmVhbQotICAgICAgICAgICAgICAgICAgICBvciBmb3IgcHVsbCByZXF1ZXN0cy4KLSAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgYSA8ZmlsZW5hbWU+cHVzaDwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT5wdWxsPC9maWxlbmFtZT4gY29tbWFuZCwKLSAgICAgICAgICAgICAgICAgICAgY29tbWl0cyBhcmUgbm9ybWFsbHkgY29uc2lkZXJlZAotICAgICAgICAgICAgICAgICAgICAicGVybWFuZW50IiBhbmQgeW91IHNob3VsZCBub3QgbW9kaWZ5IHRoZW0uCi0gICAgICAgICAgICAgICAgICAgIElmIHRoZSBjb21taXRzIG5lZWQgdG8gYmUgY2hhbmdlZCwgeW91IGNhbiBpbmNyZW1lbnRhbGx5IGRvIHNvIHdpdGggbmV3IGNvbW1pdHMuCi0gICAgICAgICAgICAgICAgICAgIFRoZXNlIHByYWN0aWNlcyBmb2xsb3cgc3RhbmRhcmQgR2l0IHdvcmtmbG93IGFuZCB0aGUgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiBiZXN0Ci0gICAgICAgICAgICAgICAgICAgIHByYWN0aWNlcywgd2hpY2ggaXMgcmVjb21tZW5kZWQuCi0gICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdG8gdGFnIG9yIGJyYW5jaCBiZWZvcmUgYWRkaW5nIGNoYW5nZXMgdG8gYSBZb2N0byBQcm9qZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICBCU1Agb3IgYmVmb3JlIGNyZWF0aW5nIGEgbmV3IG9uZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZWFzb24gZm9yIHRoaXMgcmVjb21tZW5kYXRpb24gaXMgYmVjYXVzZSB0aGUgYnJhbmNoIG9yIHRhZyBwcm92aWRlcyBhCi0gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2UgcG9pbnQgdG8gZmFjaWxpdGF0ZSBsb2NhdGluZyBhbmQgZXhwb3J0aW5nIGxvY2FsIGNoYW5nZXMuCi0gICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0nZXhwb3J0LWludGVybmFsbHktdmlhLXBhdGNoZXMnPgotICAgICAgICAgICAgICAgICAgICA8dGl0bGU+RXhwb3J0aW5nIENoYW5nZXMgSW50ZXJuYWxseSBieSBVc2luZyBQYXRjaGVzPC90aXRsZT4KLQotICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHlvdSBjYW4gZXh0cmFjdCBjb21taXR0ZWQgY2hhbmdlcyBmcm9tIGEgd29ya2luZyBkaXJlY3RvcnkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGV4cG9ydGluZyB0aGVtIGFzIHBhdGNoZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBjaGFuZ2VzIGhhdmUgYmVlbiBleHRyYWN0ZWQsIHlvdSBjYW4gdXNlIHRoZSBwYXRjaGVzIGZvciB1cHN0cmVhbSBzdWJtaXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2UgdGhlbSBpbiBhIFlvY3RvIFByb2plY3QgdGVtcGxhdGUgZm9yIGF1dG9tYXRpYyBrZXJuZWwgcGF0Y2hpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBvciBhcHBseSB0aGVtIGluIG1hbnkgb3RoZXIgY29tbW9uIHVzZXMuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBzaG93cyBob3cgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHdpdGggc2VxdWVudGlhbGx5IG51bWJlcmVkIHBhdGNoZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBkaXJlY3RvcnkgaXMgY3JlYXRlZCwgeW91IGNhbiBhcHBseSBpdCB0byBhIHJlcG9zaXRvcnkgdXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IGFtPC9maWxlbmFtZT4gY29tbWFuZCB0byByZXByb2R1Y2UgdGhlIG9yaWdpbmFsIGNvbW1pdCBhbmQgYWxsCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVsYXRlZCBpbmZvcm1hdGlvbiBzdWNoIGFzIGF1dGhvciwgZGF0ZSwgY29tbWl0IGxvZywgYW5kIHNvIGZvcnRoLgotICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG5ldyBjb21taXQgaWRlbnRpZmllcnMgKElEKSB3aWxsIGJlIGdlbmVyYXRlZCB1cG9uIHJlLWFwcGxpY2F0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgYWN0aW9uIHJlZmxlY3RzIHRoYXQgdGhlIGNvbW1pdCBpcyBub3cgYXBwbGllZCB0byBhbiB1bmRlcmx5aW5nIGNvbW1pdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYSBkaWZmZXJlbnQgSUQuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICMgJmx0O2ZpcnN0LWNvbW1pdCZndDsgY2FuIGJlIGEgdGFnIGlmIG9uZSB3YXMgY3JlYXRlZCBiZWZvcmUgZGV2ZWxvcG1lbnQKLSAgICAgIyBiZWdhbi4gSXQgY2FuIGFsc28gYmUgdGhlIHBhcmVudCBicmFuY2ggaWYgYSBicmFuY2ggd2FzIGNyZWF0ZWQKLSAgICAgIyBiZWZvcmUgZGV2ZWxvcG1lbnQgYmVnYW4uCi0KLSAgICAgJCBnaXQgZm9ybWF0LXBhdGNoIC1vICZsdDtkaXImZ3Q7ICZsdDtmaXJzdCBjb21taXQmZ3Q7Li4mbHQ7bGFzdCBjb21taXQmZ3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAjIElkZW50aWZ5IGNvbW1pdHMgb2YgaW50ZXJlc3QuCi0KLSAgICAgIyBJZiB0aGUgdHJlZSB3YXMgdGFnZ2VkIGJlZm9yZSBkZXZlbG9wbWVudAotICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggLW8gJmx0O3NhdmUgZGlyJmd0OyAmbHQ7dGFnJmd0OwotCi0gICAgICMgSWYgbm8gdGFncyBhcmUgYXZhaWxhYmxlCi0gICAgICQgZ2l0IGZvcm1hdC1wYXRjaCAtbyAmbHQ7c2F2ZSBkaXImZ3Q7IEhFQUReICAjIGxhc3QgY29tbWl0Ci0gICAgICQgZ2l0IGZvcm1hdC1wYXRjaCAtbyAmbHQ7c2F2ZSBkaXImZ3Q7IEhFQUReXiAjIGxhc3QgMiBjb21taXRzCi0gICAgICQgZ2l0IHdoYXRjaGFuZ2VkICMgaWRlbnRpZnkgbGFzdCBjb21taXQKLSAgICAgJCBnaXQgZm9ybWF0LXBhdGNoIC1vICZsdDtzYXZlIGRpciZndDsgJmx0O2NvbW1pdCBpZCZndDsKLSAgICAgJCBnaXQgZm9ybWF0LXBhdGNoIC1vICZsdDtzYXZlIGRpciZndDsgJmx0O3Jldi1saXN0Jmd0OwotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2V4cG9ydC1pbnRlcm5hbGx5LXZpYS1naXQnPgotICAgICAgICAgICAgICAgICAgICA8dGl0bGU+RXhwb3J0aW5nIENoYW5nZXMgSW50ZXJuYWxseSBieSBVc2luZyBHaXQ8L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgeW91IGNhbiBleHBvcnQgY2hhbmdlcyBmcm9tIGEgd29ya2luZyBkaXJlY3RvcnkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHB1c2hpbmcgdGhlIGNoYW5nZXMgaW50byBhIG1hc3RlciByZXBvc2l0b3J5IG9yIGJ5IG1ha2luZyBhIHB1bGwgcmVxdWVzdC4KLSAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgcHVzaGVkIHRoZSBjaGFuZ2VzIHRvIHRoZSBtYXN0ZXIgcmVwb3NpdG9yeSwgeW91IGNhbiB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICBwdWxsIHRob3NlIHNhbWUgY2hhbmdlcyBpbnRvIGEgbmV3IGtlcm5lbCBidWlsZCBhdCBhIGxhdGVyIHRpbWUuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGlzIGNvbW1hbmQgZm9ybSB0byBwdXNoIHRoZSBjaGFuZ2VzOgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGdpdCBwdXNoIHNzaDovLyZsdDttYXN0ZXJfc2VydmVyJmd0Oy8mbHQ7cGF0aF90b19yZXBvJmd0OwotICAgICAgICAmbHQ7bG9jYWxfYnJhbmNoJmd0OzombHQ7cmVtb3RlX2JyYW5jaCZndDsKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBwdXNoZXMgdGhlIGNoYW5nZXMgZnJvbSB5b3VyIGxvY2FsIGJyYW5jaAotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnlvY3RvL3N0YW5kYXJkL2NvbW1vbi1wYy9iYXNlPC9maWxlbmFtZT4gdG8gdGhlIHJlbW90ZSBicmFuY2ggd2l0aCB0aGUgc2FtZSBuYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgbWFzdGVyIHJlcG9zaXRvcnkgPGZpbGVuYW1lPi8vZ2l0Lm15Y29tcGFueS5jb20vcHViL2dpdC9rZXJuZWwtMy40PC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZ2l0IHB1c2ggc3NoOi8vZ2l0Lm15Y29tcGFueS5jb20vcHViL2dpdC9rZXJuZWwtMy40IFwKLSAgICAgICAgeW9jdG8vc3RhbmRhcmQvY29tbW9uLXBjL2Jhc2U6eW9jdG8vc3RhbmRhcmQvY29tbW9uLXBjL2Jhc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgQSBwdWxsIHJlcXVlc3QgZW50YWlscyB1c2luZyB0aGUgPGZpbGVuYW1lPmdpdCByZXF1ZXN0LXB1bGw8L2ZpbGVuYW1lPiBjb21tYW5kIHRvIGNvbXBvc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuIGVtYWlsIHRvIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnRhaW5lciByZXF1ZXN0aW5nIHRoYXQgYSBicmFuY2ggYmUgcHVsbGVkIGludG8gdGhlIG1hc3RlciByZXBvc2l0b3J5LCBzZWUKLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXRodWIuY29tL2d1aWRlcy9wdWxsLXJlcXVlc3RzJz48L3VsaW5rPiBmb3IgYW4gZXhhbXBsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE90aGVyIGNvbW1hbmRzIHN1Y2ggYXMgPGZpbGVuYW1lPmdpdCBzdGFzaDwvZmlsZW5hbWU+IG9yIGJyYW5jaGluZyBjYW4gYWxzbyBiZSB1c2VkIHRvIHNhdmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLCBidXQgYXJlIG5vdCBjb3ZlcmVkIGluIHRoaXMgZG9jdW1lbnQuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICA8L3NlY3Rpb24+Ci0gICAgICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdleHBvcnQtZm9yLWV4dGVybmFsLXVwc3RyZWFtLXN1Ym1pc3Npb24nPgotICAgICAgICAgICAgICAgIDx0aXRsZT5FeHBvcnRpbmcgQ2hhbmdlcyBmb3IgRXh0ZXJuYWwgKFVwc3RyZWFtKSBTdWJtaXNzaW9uPC90aXRsZT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB0byBleHBvcnQgY2hhbmdlcyBmb3IgZXh0ZXJuYWwgdXBzdHJlYW0gc3VibWlzc2lvbi4KLSAgICAgICAgICAgICAgICAgICAgSWYgdGhlIHBhdGNoIHNlcmllcyBpcyBsYXJnZSBvciB0aGUgbWFpbnRhaW5lciBwcmVmZXJzIHRvIHB1bGwKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlcywgeW91IGNhbiBzdWJtaXQgdGhlc2UgY2hhbmdlcyBieSB1c2luZyBhIHB1bGwgcmVxdWVzdC4KLSAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaXQgaXMgY29tbW9uIHRvIHNlbmQgcGF0Y2hlcyBhcyBhbiBlbWFpbCBzZXJpZXMuCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGFsbG93cyBlYXN5IHJldmlldyBhbmQgaW50ZWdyYXRpb24gb2YgdGhlIGNoYW5nZXMuCi0gICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgQmVmb3JlIHNlbmRpbmcgcGF0Y2hlcyBmb3IgcmV2aWV3IGJlIHN1cmUgeW91IHVuZGVyc3RhbmQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21tdW5pdHkgc3RhbmRhcmRzIGZvciBzdWJtaXR0aW5nIGFuZCBkb2N1bWVudGluZyBjaGFuZ2VzIGFuZCBmb2xsb3cgdGhlaXIgYmVzdCBwcmFjdGljZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwga2VybmVsIHBhdGNoZXMgc2hvdWxkIGZvbGxvdyBzdGFuZGFyZHMgc3VjaCBhczoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vbGludXgueXl6LnVzL3BhdGNoLWZvcm1hdC5odG1sJz48L3VsaW5rPjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzIChpbiBhbnkgbGludXgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsIHNvdXJjZSB0cmVlKTwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIG1lc3NhZ2VzIHVzZWQgdG8gY29tbWl0IGNoYW5nZXMgYXJlIGEgbGFyZ2UgcGFydCBvZiB0aGVzZSBzdGFuZGFyZHMuCi0gICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgYmUgc3VyZSB0aGF0IHRoZSBoZWFkZXJzIGZvciBlYWNoIGNvbW1pdCBoYXZlIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBmb2xsb3cgdGhlIFlvY3RvIFByb2plY3QgY29tbWl0IG1lc3NhZ2Ugc3RhbmRhcmRzLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNob3ctdG8tc3VibWl0LWEtY2hhbmdlJz5Ib3cgdG8gU3VibWl0IGEKLSAgICAgICAgICAgICAgICAgICAgQ2hhbmdlPC91bGluaz4iIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBJZiB0aGUgaW5pdGlhbCBjb21taXRzIHdlcmUgbm90IHByb3Blcmx5IGRvY3VtZW50ZWQgb3IgZG8gbm90IG1lZXQgdGhvc2Ugc3RhbmRhcmRzLAotICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIHJlLWJhc2UgYnkgdXNpbmcgdGhlIDxmaWxlbmFtZT5naXQgcmViYXNlIC1pPC9maWxlbmFtZT4gY29tbWFuZCB0bwotICAgICAgICAgICAgICAgICAgICBtYW5pcHVsYXRlIHRoZSBjb21taXRzIGFuZAotICAgICAgICAgICAgICAgICAgICBnZXQgdGhlbSBpbnRvIHRoZSByZXF1aXJlZCBmb3JtYXQuCi0gICAgICAgICAgICAgICAgICAgIE90aGVyIHRlY2huaXF1ZXMgc3VjaCBhcyBicmFuY2hpbmcgYW5kIGNoZXJyeS1waWNraW5nIGNvbW1pdHMgYXJlIGFsc28gdmlhYmxlIG9wdGlvbnMuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGNvbXBsZXRlIHRoZSBjb21taXRzLCB5b3UgY2FuIGdlbmVyYXRlIHRoZSBlbWFpbCB0aGF0IHNlbmRzIHRoZSBwYXRjaGVzCi0gICAgICAgICAgICAgICAgICAgIHRvIHRoZSBtYWludGFpbmVyKHMpIG9yIGxpc3RzIHRoYXQgcmV2aWV3IGFuZCBpbnRlZ3JhdGUgY2hhbmdlcy4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGNvbW1hbmQgPGZpbGVuYW1lPmdpdCBzZW5kLWVtYWlsPC9maWxlbmFtZT4gaXMgY29tbW9ubHkgdXNlZCB0byBlbnN1cmUKLSAgICAgICAgICAgICAgICAgICAgdGhhdCBwYXRjaGVzIGFyZSBwcm9wZXJseQotICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWQgZm9yIGVhc3kgYXBwbGljYXRpb24gYW5kIGF2b2lkIG1haWxlci1pbmR1Y2VkIHBhdGNoIGRhbWFnZS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGR1bXBpbmcgcGF0Y2hlcyBmb3IgZXh0ZXJuYWwgc3VibWlzc2lvbjoKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAjIGR1bXAgdGhlIGxhc3QgNCBjb21taXRzCi0gICAgICQgZ2l0IGZvcm1hdC1wYXRjaCAtLXRocmVhZCAtbiAtbyB+L3JyLyBIRUFEXl5eXgotICAgICAkIGdpdCBzZW5kLWVtYWlsIC0tY29tcG9zZSAtLXN1YmplY3QgJ1tSRkMgMC9OXSAmbHQ7cGF0Y2ggc2VyaWVzIHN1bW1hcnkmZ3Q7JyBcCi0gICAgICAtLXRvIGZvb0B5b2N0b3Byb2plY3Qub3JnIC0tdG8gYmFyQHlvY3RvcHJvamVjdC5vcmcgXAotICAgICAgLS1jYyBsaXN0QHlvY3RvcHJvamVjdC5vcmcgIH4vcnIKLSAgICAgIyB0aGUgZWRpdG9yIGlzIGludm9rZWQgZm9yIHRoZSAwL04gcGF0Y2gsIGFuZCB3aGVuIGNvbXBsZXRlIHRoZSBlbnRpcmUKLSAgICAgIyBzZXJpZXMgaXMgc2VudCB2aWEgZW1haWwgZm9yIHJldmlldwotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgICAgICA8c2VjdGlvbiBpZD0nZXhwb3J0LWZvci1pbXBvcnQtaW50by1vdGhlci1zY20nPgotICAgICAgICAgICAgICAgIDx0aXRsZT5FeHBvcnRpbmcgQ2hhbmdlcyBmb3IgSW1wb3J0IGludG8gQW5vdGhlciBTQ008L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHdhbnQgdG8gZXhwb3J0IGNoYW5nZXMgZm9yIGltcG9ydCBpbnRvIGFub3RoZXIKLSAgICAgICAgICAgICAgICAgICAgU291cmNlIENvZGUgTWFuYWdlciAoU0NNKSwgeW91IGNhbiB1c2UgYW55IG9mIHRoZSBwcmV2aW91c2x5IGRpc2N1c3NlZAotICAgICAgICAgICAgICAgICAgICB0ZWNobmlxdWVzLgotICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB0aGUgcGF0Y2hlcyBhcmUgbWFudWFsbHkgYXBwbGllZCB0byBhIHNlY29uZGFyeSB0cmVlIGFuZCB0aGVuCi0gICAgICAgICAgICAgICAgICAgIHRoYXQgdHJlZSBpcyBjaGVja2VkIGludG8gdGhlIFNDTSwgeW91IGNhbiBsb3NlIGNoYW5nZSBpbmZvcm1hdGlvbiBzdWNoIGFzCi0gICAgICAgICAgICAgICAgICAgIGNvbW1pdCBsb2dzLgotICAgICAgICAgICAgICAgICAgICBUaGlzIHByb2Nlc3MgaXMgbm90IHJlY29tbWVuZGVkLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBNYW55IFNDTXMgY2FuIGRpcmVjdGx5IGltcG9ydCBHaXQgY29tbWl0cywgb3IgY2FuIHRyYW5zbGF0ZSBHaXQgcGF0Y2hlcyBzbyB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGlzIG5vdCBsb3N0LgotICAgICAgICAgICAgICAgICAgICBUaG9zZSBmYWNpbGl0aWVzIGFyZSBTQ00tZGVwZW5kZW50IGFuZCB5b3Ugc2hvdWxkIHVzZSB0aGVtIHdoZW5ldmVyIHBvc3NpYmxlLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvc2VjdGlvbj4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdzY20td29ya2luZy13aXRoLXRoZS15b2N0by1wcm9qZWN0LWtlcm5lbC1pbi1hbm90aGVyLXNjbSc+Ci0gICAgICAgICAgICA8dGl0bGU+V29ya2luZyB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IEtlcm5lbCBpbiBBbm90aGVyIFNDTTwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMga2VybmVsIGRldmVsb3BtZW50IGluIGFuIFNDTSBvdGhlciB0aGFuIEdpdCwKLSAgICAgICAgICAgICAgICB3aGljaCBpcyBub3QgdGhlIHNhbWUgYXMgZXhwb3J0aW5nIGNoYW5nZXMgdG8gYW5vdGhlciBTQ00gZGVzY3JpYmVkIGVhcmxpZXIuCi0gICAgICAgICAgICAgICAgRm9yIHRoaXMgc2NlbmFyaW8sIHlvdSB1c2UgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8KLSAgICAgICAgICAgICAgICBkZXZlbG9wIHRoZSBrZXJuZWwgaW4gYSBkaWZmZXJlbnQgU0NNLgotICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbXVzdCBiZSB0cnVlIGZvciB5b3UgdG8gYWNjb21wbGlzaCB0aGlzOgotICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgZGVsaXZlcmVkIFlvY3RvIFByb2plY3Qga2VybmVsIG11c3QgYmUgZXhwb3J0ZWQgaW50byB0aGUgc2Vjb25kCi0gICAgICAgICAgICAgICAgICAgICAgICBTQ00uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EZXZlbG9wbWVudCBtdXN0IGJlIGV4cG9ydGVkIGZyb20gdGhhdCBzZWNvbmRhcnkgU0NNIGludG8gYQotICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0IHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdleHBvcnRpbmctZGVsaXZlcmVkLWtlcm5lbC10by1zY20nPgotICAgICAgICAgICAgICAgIDx0aXRsZT5FeHBvcnRpbmcgdGhlIERlbGl2ZXJlZCBLZXJuZWwgdG8gdGhlIFNDTTwvdGl0bGU+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHRoZSBTQ00sIGl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIGV4cG9ydCB0aGUgZW50aXJlIFlvY3RvIFByb2plY3QKLSAgICAgICAgICAgICAgICAgICAga2VybmVsIEdpdCByZXBvc2l0b3J5LCBicmFuY2hlcyBhbmQgYWxsLCBpbnRvIGEgbmV3IGVudmlyb25tZW50LgotICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyBwcmVmZXJyZWQgYmVjYXVzZSBpdCBoYXMgdGhlIG1vc3QgZmxleGliaWxpdHkgYW5kIHBvdGVudGlhbCB0byBtYWludGFpbgotICAgICAgICAgICAgICAgICAgICB0aGUgbWV0YSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGNvbW1pdC4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgV2hlbiBhIGRpcmVjdCBpbXBvcnQgbWVjaGFuaXNtIGlzIG5vdCBhdmFpbGFibGUsIGl0IGlzIHN0aWxsIHBvc3NpYmxlIHRvCi0gICAgICAgICAgICAgICAgICAgIGV4cG9ydCBhIGJyYW5jaCAob3Igc2VyaWVzIG9mIGJyYW5jaGVzKSBhbmQgY2hlY2sgdGhlbSBpbnRvIGEgbmV3IHJlcG9zaXRvcnkuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZHMgaWxsdXN0cmF0ZSBzb21lIG9mIHRoZSBzdGVwcyB5b3UgY291bGQgdXNlIHRvCi0gICAgICAgICAgICAgICAgICAgIGltcG9ydCB0aGUgPGZpbGVuYW1lPnlvY3RvL3N0YW5kYXJkL2NvbW1vbi1wYy9iYXNlPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAga2VybmVsIGludG8gYSBzZWNvbmRhcnkgU0NNOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZ2l0IGNoZWNrb3V0IHlvY3RvL3N0YW5kYXJkL2NvbW1vbi1wYy9iYXNlCi0gICAgICQgY2QgLi4gOyBlY2hvIGxpbnV4Ly5naXQgJmd0OyAuY3ZzaWdub3JlCi0gICAgICQgY3ZzIGltcG9ydCAtbSAiaW5pdGlhbCBpbXBvcnQiIGxpbnV4IE1ZX0NPTVBBTlkgc3RhcnQKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBZb3UgY291bGQgbm93IHJlbG9jYXRlIHRoZSBDVlMgcmVwb3NpdG9yeSBhbmQgdXNlIGl0IGluIGEgY2VudHJhbGl6ZWQgbWFubmVyLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGlsbHVzdHJhdGUgaG93IHlvdSBjYW4gY29uZGVuc2UgYW5kIG1lcmdlIHR3byBCU1BzIGludG8gYQotICAgICAgICAgICAgICAgICAgICBzZWNvbmQgU0NNOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZ2l0IGNoZWNrb3V0IHlvY3RvL3N0YW5kYXJkL2NvbW1vbi1wYy9iYXNlCi0gICAgICQgZ2l0IG1lcmdlIHlvY3RvL3N0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlCi0gICAgICMgcmVzb2x2ZSBhbnkgY29uZmxpY3RzIGFuZCBjb21taXQgdGhlbQotICAgICAkIGNkIC4uIDsgZWNobyBsaW51eC8uZ2l0ICZndDsgLmN2c2lnbm9yZQotICAgICAkIGN2cyBpbXBvcnQgLW0gImluaXRpYWwgaW1wb3J0IiBsaW51eCBNWV9DT01QQU5ZIHN0YXJ0Ci0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdpbXBvcnRpbmctY2hhbmdlcy1mb3ItYnVpbGQnPgotICAgICAgICAgICAgICAgIDx0aXRsZT5JbXBvcnRpbmcgQ2hhbmdlcyBmb3IgdGhlIEJ1aWxkPC90aXRsZT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBPbmNlIGRldmVsb3BtZW50IGhhcyByZWFjaGVkIGEgc3VpdGFibGUgcG9pbnQgaW4gdGhlIHNlY29uZCBkZXZlbG9wbWVudAotICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCwgeW91IG5lZWQgdG8gZXhwb3J0IHRoZSBjaGFuZ2VzIGFzIHBhdGNoZXMuCi0gICAgICAgICAgICAgICAgICAgIFRvIGV4cG9ydCB0aGVtLCBwbGFjZSB0aGUgY2hhbmdlcyBpbiBhIHJlY2lwZSBhbmQKLSAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBhcHBseSB0aGVtIHRvIHRoZSBrZXJuZWwgZHVyaW5nIHBhdGNoaW5nLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvc2VjdGlvbj4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdic3AtY3JlYXRpbmcnPgotICAgICAgICAgICAgPHRpdGxlPkNyZWF0aW5nIGEgQlNQIEJhc2VkIG9uIGFuIEV4aXN0aW5nIFNpbWlsYXIgQlNQPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIG92ZXJ2aWV3cyB0aGUgcHJvY2VzcyBvZiBjcmVhdGluZyBhIEJTUCBiYXNlZCBvbiBhbgotICAgICAgICAgICAgICAgIGV4aXN0aW5nIHNpbWlsYXIgQlNQLgotICAgICAgICAgICAgICAgIFRoZSBpbmZvcm1hdGlvbiBpcyBpbnRyb2R1Y3RvcnkgaW4gbmF0dXJlIGFuZCBkb2VzIG5vdCBwcm92aWRlIHN0ZXAtYnktc3RlcCBleGFtcGxlcy4KLSAgICAgICAgICAgICAgICBGb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNyZWF0ZSBhIG5ldyBCU1AsIHNlZQotICAgICAgICAgICAgICAgIHRoZSAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjY3JlYXRpbmctYS1uZXctYnNwLWxheWVyLXVzaW5nLXRoZS15b2N0by1ic3Atc2NyaXB0Jz5DcmVhdGluZyBhIE5ldyBCU1AgTGF5ZXIgVXNpbmcgdGhlIHlvY3RvLWJzcCBTY3JpcHQ8L3VsaW5rPiIgc2VjdGlvbiBpbiB0aGUKLSAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZSwgb3Igc2VlIHRoZQotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9UcmFuc2NyaXB0Ol9jcmVhdGluZ19vbmVfZ2VuZXJpY19BdG9tX0JTUF9mcm9tX2Fub3RoZXInPlRyYW5zY3JpcHQ6X2NyZWF0aW5nX29uZV9nZW5lcmljX0F0b21fQlNQX2Zyb21fYW5vdGhlcjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgd2lraSBwYWdlLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGUgYmFzaWMgc3RlcHMgeW91IG5lZWQgdG8gZm9sbG93IGFyZToKLSAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFrZSBzdXJlIHlvdSBoYXZlIHNldCB1cCBhIGxvY2FsIFNvdXJjZSBEaXJlY3Rvcnk6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGNyZWF0ZSBhIGxvY2FsCi0gICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGVpdGhlciBjcmVhdGluZyBhIEdpdCByZXBvc2l0b3J5IChyZWNvbW1lbmRlZCkgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RpbmcgYSBZb2N0byBQcm9qZWN0IHJlbGVhc2UgdGFyYmFsbC48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DaG9vc2UgYW4gZXhpc3RpbmcgQlNQIGF2YWlsYWJsZSB3aXRoIHRoZSBZb2N0byBQcm9qZWN0OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUcnkgdG8gbWFwIHlvdXIgYm9hcmQgZmVhdHVyZXMgYXMgY2xvc2VseSB0byB0aGUgZmVhdHVyZXMgb2YgYSBCU1AgdGhhdCBpcwotICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBzdXBwb3J0ZWQgYW5kIGV4aXN0cyBpbiB0aGUgWW9jdG8gUHJvamVjdC4KLSAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0aW5nIHdpdGggc29tZXRoaW5nIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHlvdXIgYm9hcmQgbWFrZXMgZGV2ZWxvcGluZwotICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBCU1AgZWFzaWVyLgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGFsbCB0aGUgQlNQcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYW5kIHNoaXAgd2l0aCB0aGUgWW9jdG8gUHJvamVjdAotICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIFlvY3RvIFByb2plY3QncyBEb3dubG9hZCBwYWdlIGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L2Rvd25sb2FkJz48L3VsaW5rPi48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CZSBzdXJlIHlvdSBoYXZlIHRoZSBCYXNlIEJTUDo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gZWl0aGVyIGhhdmUgYSBsb2NhbCBHaXQgcmVwb3NpdG9yeSBvZiB0aGUgYmFzZSBCU1Agc2V0IHVwIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICBoYXZlIGRvd25sb2FkZWQgYW5kIGV4dHJhY3RlZCB0aGUgZmlsZXMgZnJvbSBhIHJlbGVhc2UgQlNQIHRhcmJhbGwuCi0gICAgICAgICAgICAgICAgICAgICAgICBFaXRoZXIgbWV0aG9kIGdpdmVzIHlvdSBhY2Nlc3MgdG8gdGhlIEJTUCBzb3VyY2UgZmlsZXMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFrZSBhIGNvcHkgb2YgdGhlIGV4aXN0aW5nIEJTUCwgdGh1cyBpc29sYXRpbmcgeW91ciBuZXcKLSAgICAgICAgICAgICAgICAgICAgICAgIEJTUCB3b3JrOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICBDb3B5aW5nIHRoZSBleGlzdGluZyBCU1AgZmlsZSBzdHJ1Y3R1cmUgZ2l2ZXMgeW91IGEgbmV3IGFyZWEgaW4gd2hpY2ggdG8gd29yay48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NYWtlIGNvbmZpZ3VyYXRpb24gYW5kIHJlY2lwZSBjaGFuZ2VzIHRvIHlvdXIgbmV3IEJTUDo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBjaGFuZ2VzIGludm9sdmUgdGhlIGZpbGVzIGluIHRoZSBCU1AncyA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VzIGluY2x1ZGUgY3JlYXRpbmcgYSBtYWNoaW5lLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZSBhbmQgZWRpdGluZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgaWRlbnRpZnkgdGhlIGtlcm5lbCB5b3Ugd2lsbCBiZSB1c2luZy4KLSAgICAgICAgICAgICAgICAgICAgICAgIFJlY2lwZSBjaGFuZ2VzIGluY2x1ZGUgcmVtb3ZpbmcsIG1vZGlmeWluZywgb3IgYWRkaW5nIG5ldyByZWNpcGUgZmlsZXMgdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3QgdGhlIGJ1aWxkIHByb2Nlc3Mgb24gd2hhdCBmZWF0dXJlcyB0byBpbmNsdWRlIGluIHRoZSBpbWFnZS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QcmVwYXJlIGZvciB0aGUgYnVpbGQ6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIEJlZm9yZSB5b3UgYWN0dWFsbHkgaW5pdGlhdGUgdGhlIGJ1aWxkLCB5b3UgbmVlZCB0byBzZXQgdXAgdGhlIGJ1aWxkIGVudmlyb25tZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICBieSBzb3VyY2luZyB0aGUgZW52aXJvbm1lbnQgaW5pdGlhbGl6YXRpb24gc2NyaXB0LgotICAgICAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgc2V0dGluZyB1cCB0aGUgZW52aXJvbm1lbnQsIHlvdSBuZWVkIHRvIG1ha2Ugc29tZSBidWlsZCBjb25maWd1cmF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzIHRvIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlcy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCB0aGUgaW1hZ2U6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgQml0QmFrZSB0byBjcmVhdGUgdGhlIGltYWdlLgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gZGVjaWRlIG9uIHRoZSB0eXBlIG9mIGltYWdlIHlvdSBhcmUgZ29pbmcgdG8gYnVpbGQgKGUuZy4gbWluaW1hbCwgYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUsIHNhdG8sIGFuZCBzbyBmb3J0aCkgYW5kIHRoZW4gc3RhcnQgdGhlIGJ1aWxkIHVzaW5nIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0ndGlwLWRpcnR5LXN0cmluZyc+Ci0gICAgICAgICAgICA8dGl0bGU+Ii1kaXJ0eSIgU3RyaW5nPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgSWYga2VybmVsIGltYWdlcyBhcmUgYmVpbmcgYnVpbHQgd2l0aCAiLWRpcnR5IiBvbiB0aGUgZW5kIG9mIHRoZSB2ZXJzaW9uCi0gICAgICAgICAgICAgICAgc3RyaW5nLCB0aGlzIHNpbXBseSBtZWFucyB0aGF0IG1vZGlmaWNhdGlvbnMgaW4gdGhlIHNvdXJjZQotICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBoYXZlIG5vdCBiZWVuIGNvbW1pdHRlZC4KLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZ2l0IHN0YXR1cwotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIGFib3ZlIEdpdCBjb21tYW5kIHRvIHJlcG9ydCBtb2RpZmllZCwgcmVtb3ZlZCwgb3IgYWRkZWQgZmlsZXMuCi0gICAgICAgICAgICAgICAgWW91IHNob3VsZCBjb21taXQgdGhvc2UgY2hhbmdlcyB0byB0aGUgdHJlZSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleSB3aWxsIGJlIHNhdmVkLAotICAgICAgICAgICAgICAgIGV4cG9ydGVkLCBvciB1c2VkLgotICAgICAgICAgICAgICAgIE9uY2UgeW91IGNvbW1pdCB0aGUgY2hhbmdlcyB5b3UgbmVlZCB0byByZWJ1aWxkIHRoZSBrZXJuZWwuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRvIGJydXRlIGZvcmNlIHBpY2t1cCBhbmQgY29tbWl0IGFsbCBzdWNoIHBlbmRpbmcgY2hhbmdlcywgZW50ZXIgdGhlIGZvbGxvd2luZzoKLSAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZ2l0IGFkZCAuCi0gICAgICQgZ2l0IGNvbW1pdCAtcyAtYSAtbSAiZ2V0dGluZyByaWQgb2YgLWRpcnR5IgotICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgTmV4dCwgcmVidWlsZCB0aGUga2VybmVsLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0gICAgPC9zZWN0aW9uPgotPC9jaGFwdGVyPgotPCEtLQotdmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAotLS0+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtZmFxLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1mYXEueG1sCmluZGV4IDllMDUxN2QuLmMzYTIwNDYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1mYXEueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1mYXEueG1sCkBAIC0zNiw3ICszNiw4IEBACiAgICAgICAgICAgICAgICAgPC9xdWVzdGlvbj4KICAgICAgICAgICAgICAgICA8YW5zd2VyPgogICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFJlZmVyIHRvIHRoZSAiPGxpbmsgbGlua2VuZD0nZ2VuZXJhdGluZy1jb25maWd1cmF0aW9uLWZpbGVzJz5HZW5lcmF0aW5nIENvbmZpZ3VyYXRpb24gRmlsZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXIgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3JlYXRpbmctY29uZmlnLWZyYWdtZW50cyc+Q3JlYXRpbmcgQ29uZmlndXJhdGlvbiBGcmFnbWVudHM8L2xpbms+IgogICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgICAgICA8L2Fuc3dlcj4KQEAgLTczLDggKzc0LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgImtlcm5lbC1pbWFnZSIuPC9wYXJhPgogICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+U2VlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5nLWJiYXBwZW5kLWZpbGVzJz5Vc2luZyAuYmJhcHBlbmQgRmlsZXMgaW4gWW91ciBMYXllcjwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgZm9yIGluZm9ybWF0aW9uIG9uCi0gICAgICAgICAgICAgICAgICAgICAgICBob3cgdG8gdXNlIGFuIGFwcGVuZCBmaWxlIHRvIG92ZXJyaWRlIG1ldGFkYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIGFuIGFwcGVuZCBmaWxlIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZSBtZXRhZGF0YS4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgICAgIDwvYW5zd2VyPgogICAgICAgICAgICAgPC9xYW5kYWVudHJ5PgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWludHJvLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1pbnRyby54bWwKaW5kZXggMjYzZTUwMC4uZGJhNDU0OSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWludHJvLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtaW50cm8ueG1sCkBAIC01LDE0NCArNSwyNjMgQEAKIDxjaGFwdGVyIGlkPSdrZXJuZWwtZGV2LWludHJvJz4KIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgogCi08IS0tCi08cGFyYT4KLSAgICA8ZW1waGFzaXM+QVIgLSBEYXJyZW4gSGFydDo8L2VtcGhhc2lzPiAgU2VlIGlmIHRoZSBjb25jZXB0cyBpbiB0aGVzZQotICAgIHRocmVlIGJ1bGxldHMgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBpbiBzb21ld2hlcmUgaW4gdGhpcyBtYW51YWw6Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvIHdlIGNvbnZleSB0aGF0IG91ciBrZXJuZWwgR2l0IHJlcG9zaXRvcmllcwotICAgICAgICAgICAgaGF2ZSBhIGNsZWFyIGFuZCBjb250aW51b3VzIGhpc3RvcnksIHNpbWlsYXIgdG8gdGhlIHdheSB0aGUKLSAgICAgICAgICAgIGtlcm5lbCBHaXQgcmVwb3NpdG9yaWVzIGZvciA8ZmlsZW5hbWU+a2VybmVsLm9yZzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICBkby4KLSAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RG9lcyB0aGUgbWFudWFsIG5vdGUgdGhhdCBZb2N0byBQcm9qZWN0IGRlbGl2ZXJzCi0gICAgICAgICAgICBhIGtleSBzZXQgb2Ygc3VwcG9ydGVkIGtlcm5lbCB0eXBlcywgd2hlcmUKLSAgICAgICAgICAgIGVhY2ggdHlwZSBpcyB0YWlsb3JlZCB0byBtZWV0IGEgc3BlY2lmaWMgdXNlIChlLmcuIG5ldHdvcmtpbmcsCi0gICAgICAgICAgICBjb25zdW1lciwgZGV2aWNlcywgYW5kIHNvIGZvcnRoKS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvIHdlIGNvbnZleSB0aGF0IHRoZSBZb2N0byBQcm9qZWN0IHVzZXMgYQotICAgICAgICAgICAgR2l0IGJyYW5jaGluZyBzdHJhdGVneSB0aGF0LCBmcm9tIGEKLSAgICAgICAgICAgIGRldmVsb3BlcidzIHBvaW50IG9mIHZpZXcsIHJlc3VsdHMgaW4gYSBsaW5lYXIgcGF0aCBmcm9tIHRoZQotICAgICAgICAgICAgYmFzZWxpbmUga2VybmVsLm9yZywgdGhyb3VnaCBhIHNlbGVjdCBncm91cCBvZiBmZWF0dXJlcyBhbmQKLSAgICAgICAgICAgIGVuZHMgd2l0aCB0aGVpciBCU1Atc3BlY2lmaWMgY29tbWl0cy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLTwvcGFyYT4KLS0tPgorPHNlY3Rpb24gaWQ9J2tlcm5lbC1kZXYtb3ZlcnZpZXcnPgorICAgIDx0aXRsZT5PdmVydmlldzwvdGl0bGU+CiAKLSAgICA8c2VjdGlvbiBpZD0na2VybmVsLWRldi1vdmVydmlldyc+Ci0gICAgICAgIDx0aXRsZT5PdmVydmlldzwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICAgIFJlZ2FyZGxlc3Mgb2YgaG93IHlvdSBpbnRlbmQgdG8gbWFrZSB1c2Ugb2YgdGhlIFlvY3RvIFByb2plY3QsCisgICAgICAgIGNoYW5jZXMgYXJlIHlvdSB3aWxsIHdvcmsgd2l0aCB0aGUgTGludXgga2VybmVsLgorICAgICAgICBUaGlzIG1hbnVhbCBkZXNjcmliZXMgaG93IHRvIHNldCB1cCB5b3VyIGJ1aWxkIGhvc3QgdG8gc3VwcG9ydAorICAgICAgICBrZXJuZWwgZGV2ZWxvcG1lbnQsIGludHJvZHVjZXMgdGhlIGtlcm5lbCBkZXZlbG9wbWVudCBwcm9jZXNzLAorICAgICAgICBwcm92aWRlcyBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIG9uIHRoZSBZb2N0byBMaW51eCBrZXJuZWwKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4sCisgICAgICAgIGRlc2NyaWJlcyBjb21tb24gdGFza3MgeW91IGNhbiBwZXJmb3JtIHVzaW5nIHRoZSBrZXJuZWwgdG9vbHMsCisgICAgICAgIHNob3dzIHlvdSBob3cgdG8gdXNlIHRoZSBrZXJuZWwgTWV0YWRhdGEgbmVlZGVkIHRvIHdvcmsgd2l0aAorICAgICAgICB0aGUga2VybmVsIGluc2lkZSB0aGUgWW9jdG8gUHJvamVjdCwgYW5kIHByb3ZpZGVzIGluc2lnaHQgaW50byBob3cKKyAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgdGVhbSBkZXZlbG9wcyBhbmQgbWFpbnRhaW5zIFlvY3RvIExpbnV4IGtlcm5lbAorICAgICAgICBHaXQgcmVwb3NpdG9yaWVzIGFuZCBNZXRhZGF0YS4KKyAgIDwvcGFyYT4KIAotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFJlZ2FyZGxlc3Mgb2YgaG93IHlvdSBpbnRlbmQgdG8gbWFrZSB1c2Ugb2YgdGhlIFlvY3RvIFByb2plY3QsCi0gICAgICAgICAgICBjaGFuY2VzIGFyZSB5b3Ugd2lsbCB3b3JrIHdpdGggdGhlIExpbnV4IGtlcm5lbC4KLSAgICAgICAgICAgIFRoaXMgbWFudWFsIHByb3ZpZGVzIGJhY2tncm91bmQgaW5mb3JtYXRpb24gb24gdGhlIFlvY3RvIExpbnV4IGtlcm5lbAotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4sCi0gICAgICAgICAgICBkZXNjcmliZXMgY29tbW9uIHRhc2tzIHlvdSBjYW4gcGVyZm9ybSB1c2luZyB0aGUga2VybmVsIHRvb2xzLAotICAgICAgICAgICAgYW5kIHNob3dzIHlvdSBob3cgdG8gdXNlIHRoZSBrZXJuZWwgTWV0YWRhdGEgbmVlZGVkIHRvIHdvcmsgd2l0aAotICAgICAgICAgICAgdGhlIGtlcm5lbCBpbnNpZGUgdGhlIFlvY3RvIFByb2plY3QuCi0gICAgICAgPC9wYXJhPgorICAgPHBhcmE+CisgICAgICAgIEVhY2ggWW9jdG8gUHJvamVjdCByZWxlYXNlIGhhcyBhIHNldCBvZiBZb2N0byBMaW51eCBrZXJuZWwgcmVjaXBlcywKKyAgICAgICAgd2hvc2UgR2l0IHJlcG9zaXRvcmllcyB5b3UgY2FuIHZpZXcgaW4gdGhlIFlvY3RvCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOyc+U291cmNlIFJlcG9zaXRvcmllczwvdWxpbms+IHVuZGVyCisgICAgICAgIHRoZSAiWW9jdG8gTGludXggS2VybmVsIiBoZWFkaW5nLgorICAgICAgICBOZXcgcmVjaXBlcyBmb3IgdGhlIHJlbGVhc2UgdHJhY2sgdGhlIGxhdGVzdCBMaW51eCBrZXJuZWwKKyAgICAgICAgdXBzdHJlYW0gZGV2ZWxvcG1lbnRzIGZyb20KKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5rZXJuZWwub3JnJz48L3VsaW5rPiBhbmQgaW50cm9kdWNlCisgICAgICAgIG5ld2x5LXN1cHBvcnRlZCBwbGF0Zm9ybXMuCisgICAgICAgIFByZXZpb3VzIHJlY2lwZXMgaW4gdGhlIHJlbGVhc2UgYXJlIHJlZnJlc2hlZCBhbmQgc3VwcG9ydGVkIGZvciBhdAorICAgICAgICBsZWFzdCBvbmUgYWRkaXRpb25hbCBZb2N0byBQcm9qZWN0IHJlbGVhc2UuCisgICAgICAgIEFzIHRoZXkgYWxpZ24sIHRoZXNlIHByZXZpb3VzIHJlbGVhc2VzIGFyZSB1cGRhdGVkIHRvIGluY2x1ZGUgdGhlCisgICAgICAgIGxhdGVzdCBmcm9tIHRoZSBMb25nIFRlcm0gU3VwcG9ydCBJbml0aWF0aXZlIChMVFNJKSBwcm9qZWN0LgorICAgICAgICBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgWW9jdG8gTGludXgga2VybmVscyBhbmQgTFRTSSBpbiB0aGUKKyAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2tlcm5lbC1iaWctcGljdHVyZSc+WW9jdG8gUHJvamVjdCBLZXJuZWwgRGV2ZWxvcG1lbnQgYW5kIE1haW50ZW5hbmNlPC9saW5rPiIKKyAgICAgICAgc2VjdGlvbi4KKyAgICA8L3BhcmE+CiAKLSAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEVhY2ggWW9jdG8gUHJvamVjdCByZWxlYXNlIGhhcyBhIHNldCBvZiBsaW51eC15b2N0byByZWNpcGVzLCB3aG9zZQotICAgICAgICAgICAgR2l0IHJlcG9zaXRvcmllcyB5b3UgY2FuIHZpZXcgaW4gdGhlIFlvY3RvCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsnPlNvdXJjZSBSZXBvc2l0b3JpZXM8L3VsaW5rPiB1bmRlcgotICAgICAgICAgICAgdGhlICJZb2N0byBMaW51eCBLZXJuZWwiIGhlYWRpbmcuCi0gICAgICAgICAgICBOZXcgcmVjaXBlcyBmb3IgdGhlIHJlbGVhc2UgdHJhY2sgdGhlIGxhdGVzdCB1cHN0cmVhbSBkZXZlbG9wbWVudHMKLSAgICAgICAgICAgIGFuZCBpbnRyb2R1Y2UgbmV3bHktc3VwcG9ydGVkIHBsYXRmb3Jtcy4KLSAgICAgICAgICAgIFByZXZpb3VzIHJlY2lwZXMgaW4gdGhlIHJlbGVhc2UgYXJlIHJlZnJlc2hlZCBhbmQgc3VwcG9ydGVkIGZvciBhdAotICAgICAgICAgICAgbGVhc3Qgb25lIGFkZGl0aW9uYWwgcmVsZWFzZS4KLSAgICAgICAgICAgIEFzIHRoZXkgYWxpZ24sIHRoZXNlIHByZXZpb3VzIHJlbGVhc2VzIGFyZSB1cGRhdGVkIHRvIGluY2x1ZGUgdGhlCi0gICAgICAgICAgICBsYXRlc3QgZnJvbSB0aGUKLSAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvb3JnYW5pemF0aW9uL2xvbmctdGVybS1zdXBwb3J0LWluaXRpYXRpdmUtbHRzaSc+TG9uZyBUZXJtIFN1cHBvcnQgSW5pdGlhdGl2ZTwvdWxpbms+Ci0gICAgICAgICAgICAoTFRTSSkgcHJvamVjdC4KLSAgICAgICAgICAgIEFsc28gaW5jbHVkZWQgaXMgYSBsaW51eC15b2N0byBkZXZlbG9wbWVudCByZWNpcGUKLSAgICAgICAgICAgICg8ZmlsZW5hbWU+bGludXgteW9jdG8tZGV2LmJiPC9maWxlbmFtZT4pIHNob3VsZCB5b3Ugd2FudCB0byB3b3JrCi0gICAgICAgICAgICB3aXRoIHRoZSB2ZXJ5IGxhdGVzdCBpbiB1cHN0cmVhbSBMaW51eCBrZXJuZWwgZGV2ZWxvcG1lbnQgYW5kCi0gICAgICAgICAgICBrZXJuZWwgTWV0YWRhdGEgZGV2ZWxvcG1lbnQuCi0gICAgICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgICAgQWxzbyBpbmNsdWRlZCBpcyBhIFlvY3RvIExpbnV4IGtlcm5lbCBkZXZlbG9wbWVudCByZWNpcGUKKyAgICAgICAgKDxmaWxlbmFtZT5saW51eC15b2N0by1kZXYuYmI8L2ZpbGVuYW1lPikgc2hvdWxkIHlvdSB3YW50IHRvIHdvcmsKKyAgICAgICAgd2l0aCB0aGUgdmVyeSBsYXRlc3QgaW4gdXBzdHJlYW0gWW9jdG8gTGludXgga2VybmVsIGRldmVsb3BtZW50IGFuZAorICAgICAgICBrZXJuZWwgTWV0YWRhdGEgZGV2ZWxvcG1lbnQuCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgRm9yIG1vcmUgb24gWW9jdG8gTGludXgga2VybmVscywgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2tlcm5lbC1iaWctcGljdHVyZSc+WW9jdG8gUHJvamVjdCBLZXJuZWwgRGV2ZWxvcG1lbnQgYW5kIE1haW50ZW5hbmNlPC9saW5rPgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KIAotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGFsc28gcHJvdmlkZXMgYSBwb3dlcmZ1bCBzZXQgb2Yga2VybmVsCi0gICAgICAgICAgICB0b29scyBmb3IgbWFuYWdpbmcgTGludXgga2VybmVsIHNvdXJjZXMgYW5kIGNvbmZpZ3VyYXRpb24gZGF0YS4KLSAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZXNlIHRvb2xzIHRvIG1ha2UgYSBzaW5nbGUgY29uZmlndXJhdGlvbiBjaGFuZ2UsCi0gICAgICAgICAgICBhcHBseSBtdWx0aXBsZSBwYXRjaGVzLCBvciB3b3JrIHdpdGggeW91ciBvd24ga2VybmVsIHNvdXJjZXMuCi0gICAgICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgYWxzbyBwcm92aWRlcyBhIHBvd2VyZnVsIHNldCBvZiBrZXJuZWwKKyAgICAgICAgdG9vbHMgZm9yIG1hbmFnaW5nIFlvY3RvIExpbnV4IGtlcm5lbCBzb3VyY2VzIGFuZCBjb25maWd1cmF0aW9uIGRhdGEuCisgICAgICAgIFlvdSBjYW4gdXNlIHRoZXNlIHRvb2xzIHRvIG1ha2UgYSBzaW5nbGUgY29uZmlndXJhdGlvbiBjaGFuZ2UsCisgICAgICAgIGFwcGx5IG11bHRpcGxlIHBhdGNoZXMsIG9yIHdvcmsgd2l0aCB5b3VyIG93biBrZXJuZWwgc291cmNlcy4KKyAgICA8L3BhcmE+CiAKLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB0aGUga2VybmVsIHRvb2xzIGFsbG93IHlvdSB0byBnZW5lcmF0ZSBjb25maWd1cmF0aW9uCi0gICAgICAgICAgICBmcmFnbWVudHMgdGhhdCBzcGVjaWZ5IG9ubHkgd2hhdCB5b3UgbXVzdCwgYW5kIG5vdGhpbmcgbW9yZS4KLSAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIG9ubHkgbmVlZCB0byBjb250YWluIHRoZSBoaWdoZXN0IGxldmVsCi0gICAgICAgICAgICB2aXNpYmxlIDxmaWxlbmFtZT5DT05GSUc8L2ZpbGVuYW1lPiBvcHRpb25zIGFzIHByZXNlbnRlZCBieSB0aGUgTGludXgKLSAgICAgICAgICAgIGtlcm5lbCA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IHN5c3RlbS4KLSAgICAgICAgICAgIENvbnRyYXN0IHRoaXMgYWdhaW5zdCBhIGNvbXBsZXRlIExpbnV4IGtlcm5lbAotICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiwgd2hpY2ggaW5jbHVkZXMgYWxsIHRoZSBhdXRvbWF0aWNhbGx5Ci0gICAgICAgICAgICBzZWxlY3RlZCA8ZmlsZW5hbWU+Q09ORklHPC9maWxlbmFtZT4gb3B0aW9ucy4KLSAgICAgICAgICAgIFRoaXMgZWZmaWNpZW5jeSByZWR1Y2VzIHlvdXIgbWFpbnRlbmFuY2UgZWZmb3J0IGFuZCBhbGxvd3MgeW91Ci0gICAgICAgICAgICB0byBmdXJ0aGVyIHNlcGFyYXRlIHlvdXIgY29uZmlndXJhdGlvbiBpbiB3YXlzIHRoYXQgbWFrZSBzZW5zZSBmb3IKLSAgICAgICAgICAgIHlvdXIgcHJvamVjdC4KLSAgICAgICAgICAgIEEgY29tbW9uIHNwbGl0IHNlcGFyYXRlcyBwb2xpY3kgYW5kIGhhcmR3YXJlLgotICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGFsbCB5b3VyIGtlcm5lbHMgbWlnaHQgc3VwcG9ydAotICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5wcm9jPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5zeXM8L2ZpbGVuYW1lPiBmaWxlc3lzdGVtcywKLSAgICAgICAgICAgIGJ1dCBvbmx5IHNwZWNpZmljIGJvYXJkcyByZXF1aXJlIHNvdW5kLCBVU0IsIG9yIHNwZWNpZmljIGRyaXZlcnMuCi0gICAgICAgICAgICBTcGVjaWZ5aW5nIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGluZGl2aWR1YWxseSBhbGxvd3MgeW91IHRvIGFnZ3JlZ2F0ZQotICAgICAgICAgICAgdGhlbSB0b2dldGhlciBhcyBuZWVkZWQsIGJ1dCBtYWludGFpbnMgdGhlbSBpbiBvbmx5IG9uZSBwbGFjZS4KLSAgICAgICAgICAgIFNpbWlsYXIgbG9naWMgYXBwbGllcyB0byBzZXBhcmF0aW5nIHNvdXJjZSBjaGFuZ2VzLgotICAgICAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICAgIEluIHBhcnRpY3VsYXIsIHRoZSBrZXJuZWwgdG9vbHMgYWxsb3cgeW91IHRvIGdlbmVyYXRlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgZnJhZ21lbnRzIHRoYXQgc3BlY2lmeSBvbmx5IHdoYXQgeW91IG11c3QsIGFuZCBub3RoaW5nIG1vcmUuCisgICAgICAgIENvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIG9ubHkgbmVlZCB0byBjb250YWluIHRoZSBoaWdoZXN0IGxldmVsCisgICAgICAgIHZpc2libGUgPGZpbGVuYW1lPkNPTkZJRzwvZmlsZW5hbWU+IG9wdGlvbnMgYXMgcHJlc2VudGVkIGJ5IHRoZQorICAgICAgICBZb2N0byBMaW51eCBrZXJuZWwgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiBzeXN0ZW0uCisgICAgICAgIENvbnRyYXN0IHRoaXMgYWdhaW5zdCBhIGNvbXBsZXRlIFlvY3RvIExpbnV4IGtlcm5lbAorICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGluY2x1ZGVzIGFsbCB0aGUgYXV0b21hdGljYWxseQorICAgICAgICBzZWxlY3RlZCA8ZmlsZW5hbWU+Q09ORklHPC9maWxlbmFtZT4gb3B0aW9ucy4KKyAgICAgICAgVGhpcyBlZmZpY2llbmN5IHJlZHVjZXMgeW91ciBtYWludGVuYW5jZSBlZmZvcnQgYW5kIGFsbG93cyB5b3UKKyAgICAgICAgdG8gZnVydGhlciBzZXBhcmF0ZSB5b3VyIGNvbmZpZ3VyYXRpb24gaW4gd2F5cyB0aGF0IG1ha2Ugc2Vuc2UgZm9yCisgICAgICAgIHlvdXIgcHJvamVjdC4KKyAgICAgICAgQSBjb21tb24gc3BsaXQgc2VwYXJhdGVzIHBvbGljeSBhbmQgaGFyZHdhcmUuCisgICAgICAgIEZvciBleGFtcGxlLCBhbGwgeW91ciBrZXJuZWxzIG1pZ2h0IHN1cHBvcnQgdGhlCisgICAgICAgIDxmaWxlbmFtZT5wcm9jPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5zeXM8L2ZpbGVuYW1lPiBmaWxlc3lzdGVtcywKKyAgICAgICAgYnV0IG9ubHkgc3BlY2lmaWMgYm9hcmRzIHJlcXVpcmUgc291bmQsIFVTQiwgb3Igc3BlY2lmaWMgZHJpdmVycy4KKyAgICAgICAgU3BlY2lmeWluZyB0aGVzZSBjb25maWd1cmF0aW9ucyBpbmRpdmlkdWFsbHkgYWxsb3dzIHlvdSB0byBhZ2dyZWdhdGUKKyAgICAgICAgdGhlbSB0b2dldGhlciBhcyBuZWVkZWQsIGJ1dCBtYWludGFpbnMgdGhlbSBpbiBvbmx5IG9uZSBwbGFjZS4KKyAgICAgICAgU2ltaWxhciBsb2dpYyBhcHBsaWVzIHRvIHNlcGFyYXRpbmcgc291cmNlIGNoYW5nZXMuCisgICAgPC9wYXJhPgogCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBtYWludGFpbiB5b3VyIG93biBrZXJuZWwgc291cmNlcyBhbmQgbmVlZCB0byBtYWtlCi0gICAgICAgICAgICBvbmx5IG1pbmltYWwgY2hhbmdlcyB0byB0aGUgc291cmNlcywgdGhlIHJlbGVhc2VkIHJlY2lwZXMgcHJvdmlkZSBhCi0gICAgICAgICAgICB2ZXR0ZWQgYmFzZSB1cG9uIHdoaWNoIHRvIGxheWVyIHlvdXIgY2hhbmdlcy4KLSAgICAgICAgICAgIERvaW5nIHNvIGFsbG93cyB5b3UgdG8gYmVuZWZpdCBmcm9tIHRoZSBjb250aW51YWwga2VybmVsCi0gICAgICAgICAgICBpbnRlZ3JhdGlvbiBhbmQgdGVzdGluZyBwZXJmb3JtZWQgZHVyaW5nIGRldmVsb3BtZW50IG9mIHRoZQotICAgICAgICAgICAgWW9jdG8gUHJvamVjdC4KLSAgICAgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgICBJZiB5b3UgZG8gbm90IG1haW50YWluIHlvdXIgb3duIGtlcm5lbCBzb3VyY2VzIGFuZCBuZWVkIHRvIG1ha2UKKyAgICAgICAgb25seSBtaW5pbWFsIGNoYW5nZXMgdG8gdGhlIHNvdXJjZXMsIHRoZSByZWxlYXNlZCByZWNpcGVzIHByb3ZpZGUgYQorICAgICAgICB2ZXR0ZWQgYmFzZSB1cG9uIHdoaWNoIHRvIGxheWVyIHlvdXIgY2hhbmdlcy4KKyAgICAgICAgRG9pbmcgc28gYWxsb3dzIHlvdSB0byBiZW5lZml0IGZyb20gdGhlIGNvbnRpbnVhbCBrZXJuZWwKKyAgICAgICAgaW50ZWdyYXRpb24gYW5kIHRlc3RpbmcgcGVyZm9ybWVkIGR1cmluZyBkZXZlbG9wbWVudCBvZiB0aGUKKyAgICAgICAgWW9jdG8gUHJvamVjdC4KKyAgICA8L3BhcmE+CiAKLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBJZiwgaW5zdGVhZCwgeW91IGhhdmUgYSB2ZXJ5IHNwZWNpZmljIExpbnV4IGtlcm5lbCBzb3VyY2UgdHJlZQotICAgICAgICAgICAgYW5kIGFyZSB1bmFibGUgdG8gYWxpZ24gd2l0aCBvbmUgb2YgdGhlIG9mZmljaWFsIGxpbnV4LXlvY3RvCi0gICAgICAgICAgICByZWNpcGVzLCBhbiBhbHRlcm5hdGl2ZSBleGlzdHMgYnkgd2hpY2ggeW91IGNhbiB1c2UgdGhlIFlvY3RvCi0gICAgICAgICAgICBQcm9qZWN0IExpbnV4IGtlcm5lbCB0b29scyB3aXRoIHlvdXIgb3duIGtlcm5lbCBzb3VyY2VzLgotICAgICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgorICAgIDxwYXJhPgorICAgICAgICBJZiwgaW5zdGVhZCwgeW91IGhhdmUgYSB2ZXJ5IHNwZWNpZmljIExpbnV4IGtlcm5lbCBzb3VyY2UgdHJlZQorICAgICAgICBhbmQgYXJlIHVuYWJsZSB0byBhbGlnbiB3aXRoIG9uZSBvZiB0aGUgb2ZmaWNpYWwgWW9jdG8gTGludXgga2VybmVsCisgICAgICAgIHJlY2lwZXMsIGFuIGFsdGVybmF0aXZlIGV4aXN0cyBieSB3aGljaCB5b3UgY2FuIHVzZSB0aGUgWW9jdG8KKyAgICAgICAgUHJvamVjdCBMaW51eCBrZXJuZWwgdG9vbHMgd2l0aCB5b3VyIG93biBrZXJuZWwgc291cmNlcy4KKyAgICA8L3BhcmE+CiAKLSAgICA8c2VjdGlvbiBpZD0na2VybmVsLWRldi1vdGhlci1yZXNvdXJjZXMnPgotICAgICAgICA8dGl0bGU+T3RoZXIgUmVzb3VyY2VzPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIG1hbnVhbCBwcm92aWRlcyBpbnN0cnVjdGlvbnMgZm9yIGNvbXBsZXRpbmcKKyAgICAgICAgc3BlY2lmaWMgTGludXgga2VybmVsIGRldmVsb3BtZW50IHRhc2tzLgorICAgICAgICBUaGVzZSBpbnN0cnVjdGlvbnMgYXNzdW1lIHlvdSBhcmUgY29tZm9ydGFibGUgd29ya2luZyB3aXRoCisgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9vcGVuZW1iZWRkZWQub3JnL3dpa2kvQml0YmFrZSc+Qml0QmFrZTwvdWxpbms+CisgICAgICAgIHJlY2lwZXMgYW5kIGJhc2ljIG9wZW4tc291cmNlIGRldmVsb3BtZW50IHRvb2xzLgorICAgICAgICBVbmRlcnN0YW5kaW5nIHRoZXNlIGNvbmNlcHRzIHdpbGwgZmFjaWxpdGF0ZSB0aGUgcHJvY2VzcyBvZiB3b3JraW5nCisgICAgICAgIHdpdGggdGhlIGtlcm5lbCByZWNpcGVzLgorICAgICAgICBJZiB5b3UgZmluZCB5b3UgbmVlZCBzb21lIGFkZGl0aW9uYWwgYmFja2dyb3VuZCwgcGxlYXNlIGJlIHN1cmUgdG8KKyAgICAgICAgcmV2aWV3IGFuZCB1bmRlcnN0YW5kIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbjoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7Jz5Zb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0PC91bGluaz4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyN1c2luZy1kZXZ0b29sLWluLXlvdXItc2RrLXdvcmtmbG93Jz48ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IHdvcmtmbG93PC91bGluaz4KKyAgICAgICAgICAgICAgICBhcyBkZXNjcmliZWQgaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgYW5kCisgICAgICAgICAgICAgICAgdGhlIEV4dGVuc2libGUgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChlU0RLKSBtYW51YWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycyc+VW5kZXJzdGFuZGluZyBhbmQgQ3JlYXRpbmcgTGF5ZXJzPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2tlcm5lbC1tb2RpZmljYXRpb24td29ya2Zsb3cnPktlcm5lbCBNb2RpZmljYXRpb24gV29ya2Zsb3c8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KIAotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSBzZWN0aW9ucyB0aGF0IGZvbGxvdyBwcm92aWRlIGluc3RydWN0aW9ucyBmb3IgY29tcGxldGluZwotICAgICAgICAgICAgc3BlY2lmaWMgTGludXgga2VybmVsIGRldmVsb3BtZW50IHRhc2tzLgotICAgICAgICAgICAgVGhlc2UgaW5zdHJ1Y3Rpb25zIGFzc3VtZSB5b3UgYXJlIGNvbWZvcnRhYmxlIHdvcmtpbmcgd2l0aAotICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL29wZW5lbWJlZGRlZC5vcmcvd2lraS9CaXRiYWtlJz5CaXRCYWtlPC91bGluaz4KLSAgICAgICAgICAgIHJlY2lwZXMgYW5kIGJhc2ljIG9wZW4tc291cmNlIGRldmVsb3BtZW50IHRvb2xzLgotICAgICAgICAgICAgVW5kZXJzdGFuZGluZyB0aGVzZSBjb25jZXB0cyB3aWxsIGZhY2lsaXRhdGUgdGhlIHByb2Nlc3Mgb2Ygd29ya2luZwotICAgICAgICAgICAgd2l0aCB0aGUga2VybmVsIHJlY2lwZXMuCi0gICAgICAgICAgICBJZiB5b3UgZmluZCB5b3UgbmVlZCBzb21lIGFkZGl0aW9uYWwgYmFja2dyb3VuZCwgcGxlYXNlIGJlIHN1cmUgdG8KLSAgICAgICAgICAgIHJldmlldyBhbmQgdW5kZXJzdGFuZCB0aGUgZm9sbG93aW5nIGRvY3VtZW50YXRpb246Ci0gICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7Jz5Zb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZGV2LW1vZGlmeWluZy1zb3VyY2UtY29kZSc+TW9kaWZ5aW5nIFNvdXJjZSBDb2RlPC91bGluaz4iCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycyc+VW5kZXJzdGFuZGluZyBhbmQgQ3JlYXRpbmcgTGF5ZXJzPC91bGluaz4iIHNlY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbW9kaWZ5aW5nLXRoZS1rZXJuZWwnPk1vZGlmeWluZyB0aGUgS2VybmVsPC91bGluaz4iIHNlY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgICAgRmluYWxseSwgd2hpbGUgdGhpcyBkb2N1bWVudCBmb2N1c2VzIG9uIHRoZSBtYW51YWwgY3JlYXRpb24gb2YKKyAgICAgICAgcmVjaXBlcywgcGF0Y2hlcywgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSB0b29scyBhcmUgYXZhaWxhYmxlIHRvIGF1dG9tYXRlCisgICAgICAgIHRoaXMgcHJvY2VzcyB3aXRoIGV4aXN0aW5nIGNvbnRlbnQgYW5kIHdvcmsgd2VsbCB0byBjcmVhdGUgdGhlCisgICAgICAgIGluaXRpYWwgZnJhbWV3b3JrIGFuZCBib2lsZXJwbGF0ZSBjb2RlLgorICAgICAgICBGb3IgZGV0YWlscyBvbiB0aGVzZSB0b29scywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjdXNpbmctdGhlLXlvY3RvLXByb2plY3RzLWJzcC10b29scyc+VXNpbmcgdGhlIFlvY3RvIFByb2plY3QncyBCU1AgVG9vbHM8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MKKyAgICAgICAgR3VpZGUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgogCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgRmluYWxseSwgd2hpbGUgdGhpcyBkb2N1bWVudCBmb2N1c2VzIG9uIHRoZSBtYW51YWwgY3JlYXRpb24gb2YKLSAgICAgICAgICAgIHJlY2lwZXMsIHBhdGNoZXMsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLCB0aGUgWW9jdG8gUHJvamVjdAotICAgICAgICAgICAgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIHRvb2xzIGFyZSBhdmFpbGFibGUgdG8gYXV0b21hdGUKLSAgICAgICAgICAgIHRoaXMgcHJvY2VzcyB3aXRoIGV4aXN0aW5nIGNvbnRlbnQgYW5kIHdvcmsgd2VsbCB0byBjcmVhdGUgdGhlCi0gICAgICAgICAgICBpbml0aWFsIGZyYW1ld29yayBhbmQgYm9pbGVycGxhdGUgY29kZS4KLSAgICAgICAgICAgIEZvciBkZXRhaWxzIG9uIHRoZXNlIHRvb2xzLCBzZWUgdGhlCi0gICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjdXNpbmctdGhlLXlvY3RvLXByb2plY3RzLWJzcC10b29scyc+VXNpbmcgdGhlIFlvY3RvIFByb2plY3QncyBCU1AgVG9vbHM8L3VsaW5rPiIKLSAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIERldmVsb3BlcidzCi0gICAgICAgICAgICBHdWlkZS4KLSAgICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSdrZXJuZWwtbW9kaWZpY2F0aW9uLXdvcmtmbG93Jz4KKyAgICA8dGl0bGU+S2VybmVsIE1vZGlmaWNhdGlvbiBXb3JrZmxvdzwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgS2VybmVsIG1vZGlmaWNhdGlvbiBpbnZvbHZlcyBjaGFuZ2luZyB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwsCisgICAgICAgIHdoaWNoIGNvdWxkIGludm9sdmUgY2hhbmdpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzIHdlbGwgYXMgYWRkaW5nCisgICAgICAgIG5ldyBrZXJuZWwgcmVjaXBlcy4KKyAgICAgICAgQ29uZmlndXJhdGlvbiBjaGFuZ2VzIGNhbiBiZSBhZGRlZCBpbiB0aGUgZm9ybSBvZiBjb25maWd1cmF0aW9uCisgICAgICAgIGZyYWdtZW50cywgd2hpbGUgcmVjaXBlIG1vZGlmaWNhdGlvbiBjb21lcyB0aHJvdWdoIHRoZSBrZXJuZWwncworICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy1rZXJuZWw8L2ZpbGVuYW1lPiBhcmVhIGluIGEga2VybmVsIGxheWVyIHlvdSBjcmVhdGUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgc2VjdGlvbiBwcmVzZW50cyBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAga2VybmVsIG1vZGlmaWNhdGlvbiB3b3JrZmxvdy4KKyAgICAgICAgVGhlIGlsbHVzdHJhdGlvbiBhbmQgYWNjb21wYW55aW5nIGxpc3QgcHJvdmlkZSBnZW5lcmFsIGluZm9ybWF0aW9uCisgICAgICAgIGFuZCByZWZlcmVuY2VzIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgorICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMva2VybmVsLWRldi1mbG93LnBuZyIKKyAgICAgICAgICAgIHdpZHRoPSI5aW4iIGRlcHRoPSI1aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlNldCBVcCBZb3VyIEhvc3QgRGV2ZWxvcG1lbnQgU3lzdGVtIHRvIFN1cHBvcnQKKyAgICAgICAgICAgICAgICBEZXZlbG9wbWVudCBVc2luZyB0aGUgWW9jdG8gUHJvamVjdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyN5cC1yZXNvdXJjZXMnPlNldHRpbmcgVXAgdG8gVXNlIHRoZSBZb2N0byBQcm9qZWN0PC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydCBmb3Igb3B0aW9ucyBvbiBob3cKKyAgICAgICAgICAgICAgICB0byBnZXQgYSBidWlsZCBob3N0IHJlYWR5IHRvIHVzZSB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+U2V0IFVwIFlvdXIgSG9zdCBEZXZlbG9wbWVudCBTeXN0ZW0gZm9yIEtlcm5lbCBEZXZlbG9wbWVudDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgYW5kIGFuIGV4dGVuc2libGUgU0RLIGZvciBrZXJuZWwgZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgdHJhZGl0aW9uYWwga2VybmVsIGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgbWV0aG9kcyB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIEVpdGhlciB3YXksIHRoZXJlIGFyZSBzdGVwcyB5b3UgbmVlZCB0byB0YWtlIHRvIGdldCB0aGUKKyAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCByZWFkeS48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5Vc2luZyA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGFuZCB0aGUgZVNESyByZXF1aXJlcworICAgICAgICAgICAgICAgIHRoYXQgeW91IGhhdmUgYSBjbGVhbiBidWlsZCBvZiB0aGUgaW1hZ2UgYW5kIHRoYXQgeW91IGFyZQorICAgICAgICAgICAgICAgIHNldCB1cCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBlU0RLLgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2dldHRpbmctcmVhZHktdG8tZGV2ZWxvcC11c2luZy1kZXZ0b29sJz5HZXR0aW5nIFJlYWR5IHRvIERldmVsb3AgVXNpbmcgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5Vc2luZyB0cmFkaXRpb25hbCBrZXJuZWwgZGV2ZWxvcG1lbnQgcmVxdWlyZXMgdGhhdCB5b3UKKyAgICAgICAgICAgICAgICBoYXZlIHRoZSBrZXJuZWwgc291cmNlIGF2YWlsYWJsZSBpbiBhbiBpc29sYXRlZCBsb2NhbCBHaXQKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2dldHRpbmctcmVhZHktZm9yLXRyYWRpdGlvbmFsLWtlcm5lbC1kZXZlbG9wbWVudCc+R2V0dGluZyBSZWFkeSBmb3IgVHJhZGl0aW9uYWwgS2VybmVsIERldmVsb3BtZW50PC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5NYWtlIENoYW5nZXMgdG8gdGhlIEtlcm5lbCBTb3VyY2UgQ29kZSBpZgorICAgICAgICAgICAgICAgIGFwcGxpY2FibGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBNb2RpZnlpbmcgdGhlIGtlcm5lbCBkb2VzIG5vdCBhbHdheXMgbWVhbiBkaXJlY3RseQorICAgICAgICAgICAgICAgIGNoYW5naW5nIHNvdXJjZSBmaWxlcy4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgaGF2ZSB0byBkbyB0aGlzLCB5b3UgbWFrZSB0aGUgY2hhbmdlcyB0byB0aGUKKyAgICAgICAgICAgICAgICBmaWxlcyBpbiB0aGUgZVNESydzIEJ1aWxkIERpcmVjdG9yeSBpZiB5b3UgYXJlIHVzaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1kZXZ0b29sLXRvLXBhdGNoLXRoZS1rZXJuZWwnPlVzaW5nIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gdG8gUGF0Y2ggdGhlIEtlcm5lbDwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3UgYXJlIHVzaW5nIHRyYWRpdGlvbmFsIGtlcm5lbCBkZXZlbG9wbWVudCwgeW91CisgICAgICAgICAgICAgICAgZWRpdCB0aGUgc291cmNlIGZpbGVzIGluIHRoZSBrZXJuZWwncyBsb2NhbCBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy10cmFkaXRpb25hbC1rZXJuZWwtZGV2ZWxvcG1lbnQtdG8tcGF0Y2gtdGhlLWtlcm5lbCc+VXNpbmcgVHJhZGl0aW9uYWwgS2VybmVsIERldmVsb3BtZW50IHRvIFBhdGNoIHRoZSBLZXJuZWw8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPk1ha2UgS2VybmVsIENvbmZpZ3VyYXRpb24gQ2hhbmdlcyBpZgorICAgICAgICAgICAgICAgIEFwcGxpY2FibGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBJZiB5b3VyIHNpdHVhdGlvbiBjYWxscyBmb3IgY2hhbmdpbmcgdGhlIGtlcm5lbCdzCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiwgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd1c2luZy1tZW51Y29uZmlnJz48ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICB3aGljaCBhbGxvd3MgeW91IHRvIGludGVyYWN0aXZlbHkgZGV2ZWxvcCBhbmQgdGVzdCB0aGUKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGNoYW5nZXMgeW91IGFyZSBtYWtpbmcgdG8gdGhlIGtlcm5lbC4KKyAgICAgICAgICAgICAgICBTYXZpbmcgY2hhbmdlcyB5b3UgbWFrZSB3aXRoIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB1cGRhdGVzIHRoZSBrZXJuZWwncyA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgPG5vdGU+PHRpdGxlPldhcm5pbmc8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICBUcnkgdG8gcmVzaXN0IHRoZSB0ZW1wdGF0aW9uIHRvIGRpcmVjdGx5IGVkaXQgYW4KKyAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICBmb3VuZCBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5IGFtb25nIHRoZSBzb3VyY2UgY29kZQorICAgICAgICAgICAgICAgICAgICB1c2VkIGZvciB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIERvaW5nIHNvLCBjYW4gcHJvZHVjZSB1bmV4cGVjdGVkIHJlc3VsdHMgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSByZWdlbmVyYXRlcyB0aGUgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICBjaGFuZ2VzIG1hZGUgdXNpbmcgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGFuZCB5b3UgaGF2ZSBzYXZlZCB0aGVtLCB5b3UgY2FuIGRpcmVjdGx5IGNvbXBhcmUgdGhlCisgICAgICAgICAgICAgICAgcmVzdWx0aW5nIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSBhZ2FpbnN0IGFuCisgICAgICAgICAgICAgICAgZXhpc3Rpbmcgb3JpZ2luYWwgYW5kIGdhdGhlciB0aG9zZSBjaGFuZ2VzIGludG8gYQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLWNvbmZpZy1mcmFnbWVudHMnPmNvbmZpZ3VyYXRpb24gZnJhZ21lbnQgZmlsZTwvbGluaz4KKyAgICAgICAgICAgICAgICB0byBiZSByZWZlcmVuY2VkIGZyb20gd2l0aGluIHRoZSBrZXJuZWwncworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlLjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPkFkZGl0aW9uYWxseSwgaWYgeW91IGFyZSB3b3JraW5nIGluIGEgQlNQIGxheWVyCisgICAgICAgICAgICAgICAgYW5kIG5lZWQgdG8gbW9kaWZ5IHRoZSBCU1AncyBrZXJuZWwncyBjb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgIHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I21hbmFnaW5nLWtlcm5lbC1wYXRjaGVzLWFuZC1jb25maWctaXRlbXMtd2l0aC15b2N0by1rZXJuZWwnPjxmaWxlbmFtZT55b2N0by1rZXJuZWw8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgc2NyaXB0IGFzIHdlbGwgYXMgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnlvY3RvLWtlcm5lbDwvZmlsZW5hbWU+IHNjcmlwdCBsZXRzCisgICAgICAgICAgICAgICAgeW91IGludGVyYWN0aXZlbHkgc2V0IHVwIGtlcm5lbCBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+UmVidWlsZCB0aGUgS2VybmVsIEltYWdlIFdpdGggWW91ciBDaGFuZ2VzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgUmVidWlsZGluZyB0aGUga2VybmVsIGltYWdlIGFwcGxpZXMgeW91ciBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB5b3VyIHRhcmdldCBoYXJkd2FyZSwgeW91IGNhbiB2ZXJpZnkgeW91ciBjaGFuZ2VzCisgICAgICAgICAgICAgICAgb24gYWN0dWFsIGhhcmR3YXJlIG9yIHBlcmhhcHMgUUVNVS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIGRldmVsb3BlcidzIGd1aWRlIGNvdmVycyBjb21tb24gdGFza3MgdHlwaWNhbGx5CisgICAgICAgIHVzZWQgZHVyaW5nIGtlcm5lbCBkZXZlbG9wbWVudCwgYWR2YW5jZWQgTWV0YWRhdGEgdXNhZ2UsIGFuZCBZb2N0byBMaW51eAorICAgICAgICBrZXJuZWwgbWFpbnRlbmFuY2UgY29uY2VwdHMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCiA8L2NoYXB0ZXI+CiA8IS0tCiB2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtbWFpbnQtYXBweC54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtbWFpbnQtYXBweC54bWwKaW5kZXggNmJiMGNmNi4uZjVmZDE4MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LW1haW50LWFwcHgueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1tYWludC1hcHB4LnhtbApAQCAtNyw4MiArNywxNDQgQEAKIAogICAgIDxzZWN0aW9uIGlkPSd0cmVlLWNvbnN0cnVjdGlvbic+CiAgICAgICAgIDx0aXRsZT5UcmVlIENvbnN0cnVjdGlvbjwvdGl0bGU+CisKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGNvbnN0cnVjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgc291cmNlIHJlcG9zaXRvcmllcwotICAgICAgICAgICAgYXMgYWNjb21wbGlzaGVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0IHRlYW0gdG8gY3JlYXRlIGtlcm5lbCByZXBvc2l0b3JpZXMuCi0gICAgICAgICAgICBUaGVzZSBrZXJuZWwgcmVwb3NpdG9yaWVzIGFyZSBmb3VuZCB1bmRlciB0aGUgaGVhZGluZyAiWW9jdG8gTGludXggS2VybmVsIiBhdAorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBjb25zdHJ1Y3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsCisgICAgICAgICAgICBzb3VyY2UgcmVwb3NpdG9yaWVzIGFzIGFjY29tcGxpc2hlZCBieSB0aGUgWW9jdG8gUHJvamVjdCB0ZWFtIHRvCisgICAgICAgICAgICBjcmVhdGUgWW9jdG8gTGludXgga2VybmVsIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgIFRoZXNlIGtlcm5lbCByZXBvc2l0b3JpZXMgYXJlIGZvdW5kIHVuZGVyIHRoZSBoZWFkaW5nICJZb2N0byBMaW51eAorICAgICAgICAgICAgS2VybmVsIiBhdAogICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpJz4mWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2k8L3VsaW5rPgotICAgICAgICAgICAgYW5kIGNhbiBiZSBzaGlwcGVkIGFzIHBhcnQgb2YgYSBZb2N0byBQcm9qZWN0IHJlbGVhc2UuCi0gICAgICAgICAgICBUaGUgdGVhbSBjcmVhdGVzIHRoZXNlIHJlcG9zaXRvcmllcyBieQotICAgICAgICAgICAgY29tcGlsaW5nIGFuZCBleGVjdXRpbmcgdGhlIHNldCBvZiBmZWF0dXJlIGRlc2NyaXB0aW9ucyBmb3IgZXZlcnkgQlNQCi0gICAgICAgICAgICBhbmQgZmVhdHVyZSBpbiB0aGUgcHJvZHVjdC4KKyAgICAgICAgICAgIGFuZCBhcmUgc2hpcHBlZCBhcyBwYXJ0IG9mIGEgWW9jdG8gUHJvamVjdCByZWxlYXNlLgorICAgICAgICAgICAgVGhlIHRlYW0gY3JlYXRlcyB0aGVzZSByZXBvc2l0b3JpZXMgYnkgY29tcGlsaW5nIGFuZCBleGVjdXRpbmcgdGhlCisgICAgICAgICAgICBzZXQgb2YgZmVhdHVyZSBkZXNjcmlwdGlvbnMgZm9yIGV2ZXJ5IEJTUCBhbmQgZmVhdHVyZSBpbiB0aGUKKyAgICAgICAgICAgIHByb2R1Y3QuCiAgICAgICAgICAgICBUaG9zZSBmZWF0dXJlIGRlc2NyaXB0aW9ucyBsaXN0IGFsbCBuZWNlc3NhcnkgcGF0Y2hlcywKLSAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24sIGJyYW5jaGluZywgdGFnZ2luZyBhbmQgZmVhdHVyZSBkaXZpc2lvbnMgZm91bmQgaW4gYSBrZXJuZWwuCi0gICAgICAgICAgICBUaHVzLCB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgcmVwb3NpdG9yeSAob3IgdHJlZSkgaXMgYnVpbHQuCisgICAgICAgICAgICBjb25maWd1cmF0aW9ucywgYnJhbmNoZXMsIHRhZ3MsIGFuZCBmZWF0dXJlIGRpdmlzaW9ucyBmb3VuZCBpbiBhCisgICAgICAgICAgICBZb2N0byBMaW51eCBrZXJuZWwuCisgICAgICAgICAgICBUaHVzLCB0aGUgWW9jdG8gUHJvamVjdCBMaW51eCBrZXJuZWwgcmVwb3NpdG9yeSAob3IgdHJlZSkgYW5kCisgICAgICAgICAgICBhY2NvbXBhbnlpbmcgTWV0YWRhdGEgaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsLWNhY2hlPC9maWxlbmFtZT4gYXJlIGJ1aWx0LgogICAgICAgICA8L3BhcmE+CisKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgZXhpc3RlbmNlIG9mIHRoaXMgdHJlZSBhbGxvd3MgeW91IHRvIGFjY2VzcyBhbmQgY2xvbmUgYSBwYXJ0aWN1bGFyCi0gICAgICAgICAgICBZb2N0byBQcm9qZWN0IGtlcm5lbCByZXBvc2l0b3J5IGFuZCB1c2UgaXQgdG8gYnVpbGQgaW1hZ2VzIGJhc2VkIG9uIHRoZWlyIGNvbmZpZ3VyYXRpb25zCi0gICAgICAgICAgICBhbmQgZmVhdHVyZXMuCisgICAgICAgICAgICBUaGUgZXhpc3RlbmNlIG9mIHRoZXNlIHJlcG9zaXRvcmllcyBhbGxvdyB5b3UgdG8gYWNjZXNzIGFuZCBjbG9uZSBhCisgICAgICAgICAgICBwYXJ0aWN1bGFyIFlvY3RvIFByb2plY3QgTGludXgga2VybmVsIHJlcG9zaXRvcnkgYW5kIHVzZSBpdCB0bworICAgICAgICAgICAgYnVpbGQgaW1hZ2VzIGJhc2VkIG9uIHRoZWlyIGNvbmZpZ3VyYXRpb25zIGFuZCBmZWF0dXJlcy4KICAgICAgICAgPC9wYXJhPgorCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZSBmaWxlcyB1c2VkIHRvIGRlc2NyaWJlIGFsbCB0aGUgdmFsaWQgZmVhdHVyZXMgYW5kIEJTUHMKLSAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBpbiBhbnkgY2xvbmUgb2YgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHNvdXJjZSByZXBvc2l0b3J5Ci0gICAgICAgICAgICBHaXQgdHJlZS4KLSAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgY2xvbmVzIHRoZSBZb2N0byBQcm9qZWN0IGJhc2VsaW5lIGtlcm5lbCB0aGF0Ci0gICAgICAgICAgICBicmFuY2hlZCBvZmYgb2YgPGZpbGVuYW1lPmxpbnV4Lm9yZzwvZmlsZW5hbWU+IHZlcnNpb24gMy4xOToKKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGUgZmlsZXMgdXNlZCB0byBkZXNjcmliZSBhbGwgdGhlIHZhbGlkIGZlYXR1cmVzIGFuZAorICAgICAgICAgICAgQlNQcyBpbiB0aGUgWW9jdG8gUHJvamVjdCBMaW51eCBrZXJuZWwgaW4gYW55IGNsb25lIG9mIHRoZSBZb2N0bworICAgICAgICAgICAgUHJvamVjdCBMaW51eCBrZXJuZWwgc291cmNlIHJlcG9zaXRvcnkgYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsLWNhY2hlPC9maWxlbmFtZT4gR2l0IHRyZWVzLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgY2xvbmUgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgIGJhc2VsaW5lIExpbnV4IGtlcm5lbCB0aGF0IGJyYW5jaGVzIG9mZgorICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4Lm9yZzwvZmlsZW5hbWU+IHZlcnNpb24gNC4xMiBhbmQgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsLWNhY2hlPC9maWxlbmFtZT4sIHdoaWNoIGNvbnRhaW5zIHN0b3JlcyBvZgorICAgICAgICAgICAga2VybmVsIE1ldGFkYXRhOgogICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by0zLjE5CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTQuMTIKKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgta2VybmVsLWNhY2hlCiAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICBGb3IgYW5vdGhlciBleGFtcGxlIG9mIGhvdyB0byBzZXQgdXAgYSBsb2NhbCBHaXQgcmVwb3NpdG9yeSBvZiB0aGUgWW9jdG8gUHJvamVjdAotICAgICAgICAgICAga2VybmVsIGZpbGVzLCBzZWUgdGhlCi0gICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbG9jYWwta2VybmVsLWZpbGVzJz5Zb2N0byBQcm9qZWN0IEtlcm5lbDwvdWxpbms+IiBidWxsZXRlZAotICAgICAgICAgICAgaXRlbSBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc2V0IHVwIGEgbG9jYWwgR2l0IHJlcG9zaXRvcnkgb2YKKyAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IExpbnV4IGtlcm5lbCBmaWxlcywgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3ByZXBhcmluZy10aGUtYnVpbGQtaG9zdC10by13b3JrLW9uLXRoZS1rZXJuZWwnPlByZXBhcmluZyB0aGUgQnVpbGQgSG9zdCB0byBXb3JrIG9uIHRoZSBLZXJuZWw8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KICAgICAgICAgPC9wYXJhPgorCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBjbG9uZWQgdGhlIGtlcm5lbCBHaXQgcmVwb3NpdG9yeSBvbiB5b3VyIGxvY2FsIG1hY2hpbmUsIHlvdSBjYW4KLSAgICAgICAgICAgIHN3aXRjaCB0byB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2ggd2l0aGluIHRoZSByZXBvc2l0b3J5LgotICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgYXNzdW1lcyB0aGUgbG9jYWwgR2l0IHJlcG9zaXRvcnkgZm9yIHRoZSBrZXJuZWwgaXMgaW4KLSAgICAgICAgICAgIGEgdG9wLWxldmVsIGRpcmVjdG9yeSBuYW1lZCA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBjbG9uZWQgdGhlIGtlcm5lbCBHaXQgcmVwb3NpdG9yeSBhbmQgdGhlCisgICAgICAgICAgICBjYWNoZSBvZiBNZXRhZGF0YSBvbiB5b3VyIGxvY2FsIG1hY2hpbmUsIHlvdSBjYW4gZGlzY292ZXIgdGhlCisgICAgICAgICAgICBicmFuY2hlcyB0aGF0IGFyZSBhdmFpbGFibGUgaW4gdGhlIHJlcG9zaXRvcnkgdXNpbmcgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgR2l0IGNvbW1hbmQ6CiAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgY2QgbGludXgteW9jdG8tMy4xOQotICAgICAkIGdpdCBjaGVja291dCAtYiBtZXRhIG9yaWdpbi9tZXRhCisgICAgICQgZ2l0IGJyYW5jaCAtYQogICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBjaGVja2VkIG91dCBhbmQgc3dpdGNoZWQgdG8gdGhlIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYnJhbmNoLAotICAgICAgICAgICAgeW91IGNhbiBzZWUgYSBzbmFwc2hvdCBvZiBhbGwgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGFuZCBmZWF0dXJlIGRlc2NyaXB0aW9ucyB0aGF0IGFyZQotICAgICAgICAgICAgdXNlZCB0byBidWlsZCB0aGF0IHBhcnRpY3VsYXIga2VybmVsIHJlcG9zaXRvcnkuCi0gICAgICAgICAgICBUaGVzZSBkZXNjcmlwdGlvbnMgYXJlIGluIHRoZSBmb3JtIG9mIDxmaWxlbmFtZT4uc2NjPC9maWxlbmFtZT4gZmlsZXMuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBZb3Ugc2hvdWxkIHJlYWxpemUsIGhvd2V2ZXIsIHRoYXQgYnJvd3NpbmcgeW91ciBsb2NhbCBrZXJuZWwgcmVwb3NpdG9yeQotICAgICAgICAgICAgZm9yIGZlYXR1cmUgZGVzY3JpcHRpb25zIGFuZCBwYXRjaGVzIGlzIG5vdCBhbiBlZmZlY3RpdmUgd2F5IHRvIGRldGVybWluZSB3aGF0IGlzIGluIGEKLSAgICAgICAgICAgIHBhcnRpY3VsYXIga2VybmVsIGJyYW5jaC4KLSAgICAgICAgICAgIEluc3RlYWQsIHlvdSBzaG91bGQgdXNlIEdpdCBkaXJlY3RseSB0byBkaXNjb3ZlciB0aGUgY2hhbmdlcyBpbiBhIGJyYW5jaC4KLSAgICAgICAgICAgIFVzaW5nIEdpdCBpcyBhbiBlZmZpY2llbnQgYW5kIGZsZXhpYmxlIHdheSB0byBpbnNwZWN0IGNoYW5nZXMgdG8gdGhlIGtlcm5lbC4KKyAgICAgICAgICAgIENoZWNraW5nIG91dCBhIGJyYW5jaCBhbGxvd3MgeW91IHRvIHdvcmsgd2l0aCBhIHBhcnRpY3VsYXIKKyAgICAgICAgICAgIFlvY3RvIExpbnV4IGtlcm5lbC4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGNoZWNrIG91dCB0aGUKKyAgICAgICAgICAgICJzdGFuZGFyZC9iZWFnbGVib2FyZCIgYnJhbmNoIG9mIHRoZSBZb2N0byBMaW51eCBrZXJuZWwgcmVwb3NpdG9yeQorICAgICAgICAgICAgYW5kIHRoZSAieW9jdG8tNC4xMiIgYnJhbmNoIG9mIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPnlvY3RvLWtlcm5lbC1jYWNoZTwvZmlsZW5hbWU+IHJlcG9zaXRvcnk6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2Qgfi9saW51eC15b2N0by00LjEyCisgICAgICQgZ2l0IGNoZWNrb3V0IC1iIG15LWtlcm5lbC00LjEyIHJlbW90ZXMvb3JpZ2luL3N0YW5kYXJkL2JlYWdsZWJvYXJkCisgICAgICQgY2Qgfi9saW51eC1rZXJuZWwtY2FjaGUKKyAgICAgJCBnaXQgY2hlY2tvdXQgLWIgbXktNC4xMi1tZXRhZGF0YSByZW1vdGVzL29yaWdpbi95b2N0by00LjEyCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICBHcm91bmQgdXAgcmVjb25zdHJ1Y3Rpb24gb2YgdGhlIGNvbXBsZXRlIGtlcm5lbCB0cmVlIGlzIGFuIGFjdGlvbiBvbmx5IHRha2VuIGJ5IHRoZQotICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgdGVhbSBkdXJpbmcgYW4gYWN0aXZlIGRldmVsb3BtZW50IGN5Y2xlLgotICAgICAgICAgICAgICAgIFdoZW4geW91IGNyZWF0ZSBhIGNsb25lIG9mIHRoZSBrZXJuZWwgR2l0IHJlcG9zaXRvcnksIHlvdSBhcmUgc2ltcGx5IG1ha2luZyBpdAotICAgICAgICAgICAgICAgIGVmZmljaWVudGx5IGF2YWlsYWJsZSBmb3IgYnVpbGRpbmcgYW5kIGRldmVsb3BtZW50LgorICAgICAgICAgICAgICAgIEJyYW5jaGVzIGluIHRoZSA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsLWNhY2hlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5IGNvcnJlc3BvbmQgdG8gWW9jdG8gTGludXgga2VybmVsIHZlcnNpb25zCisgICAgICAgICAgICAgICAgKGUuZy4gInlvY3RvLTQuMTIiLCAieW9jdG8tNC4xMCIsICJ5b2N0by00LjkiLCBhbmQgc28gZm9ydGgpLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBjaGVja2VkIG91dCBhbmQgc3dpdGNoZWQgdG8gYXBwcm9wcmlhdGUgYnJhbmNoZXMsCisgICAgICAgICAgICB5b3UgY2FuIHNlZSBhIHNuYXBzaG90IG9mIGFsbCB0aGUga2VybmVsIHNvdXJjZSBmaWxlcyB1c2VkIHRvCisgICAgICAgICAgICB1c2VkIHRvIGJ1aWxkIHRoYXQgcGFydGljdWxhciBZb2N0byBMaW51eCBrZXJuZWwgZm9yIGEKKyAgICAgICAgICAgIHBhcnRpY3VsYXIgYm9hcmQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIHNlZSB0aGUgZmVhdHVyZXMgYW5kIGNvbmZpZ3VyYXRpb25zIGZvciBhIHBhcnRpY3VsYXIgWW9jdG8KKyAgICAgICAgICAgIExpbnV4IGtlcm5lbCwgeW91IG5lZWQgdG8gZXhhbWluZSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0by1rZXJuZWwtY2FjaGU8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIEFzIG1lbnRpb25lZCwgYnJhbmNoZXMgaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsLWNhY2hlPC9maWxlbmFtZT4gcmVwb3NpdG9yeSBjb3JyZXNwb25kIHRvCisgICAgICAgICAgICBZb2N0byBMaW51eCBrZXJuZWwgdmVyc2lvbnMgKGUuZy4gPGZpbGVuYW1lPnlvY3RvLTQuMTI8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICBCcmFuY2hlcyBjb250YWluIGRlc2NyaXB0aW9ucyBpbiB0aGUgZm9ybSBvZgorICAgICAgICAgICAgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPi5jZmc8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IHNob3VsZCByZWFsaXplLCBob3dldmVyLCB0aGF0IGJyb3dzaW5nIHlvdXIgbG9jYWwKKyAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0by1rZXJuZWwtY2FjaGU8L2ZpbGVuYW1lPiByZXBvc2l0b3J5IGZvciBmZWF0dXJlCisgICAgICAgICAgICBkZXNjcmlwdGlvbnMgYW5kIHBhdGNoZXMgaXMgbm90IGFuIGVmZmVjdGl2ZSB3YXkgdG8gZGV0ZXJtaW5lIHdoYXQKKyAgICAgICAgICAgIGlzIGluIGEgcGFydGljdWxhciBrZXJuZWwgYnJhbmNoLgorICAgICAgICAgICAgSW5zdGVhZCwgeW91IHNob3VsZCB1c2UgR2l0IGRpcmVjdGx5IHRvIGRpc2NvdmVyIHRoZSBjaGFuZ2VzIGluCisgICAgICAgICAgICBhIGJyYW5jaC4KKyAgICAgICAgICAgIFVzaW5nIEdpdCBpcyBhbiBlZmZpY2llbnQgYW5kIGZsZXhpYmxlIHdheSB0byBpbnNwZWN0IGNoYW5nZXMgdG8KKyAgICAgICAgICAgIHRoZSBrZXJuZWwuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBHcm91bmQgdXAgcmVjb25zdHJ1Y3Rpb24gb2YgdGhlIGNvbXBsZXRlIGtlcm5lbCB0cmVlIGlzIGFuCisgICAgICAgICAgICAgICAgYWN0aW9uIG9ubHkgdGFrZW4gYnkgdGhlIFlvY3RvIFByb2plY3QgdGVhbSBkdXJpbmcgYW4gYWN0aXZlCisgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgY3ljbGUuCisgICAgICAgICAgICAgICAgV2hlbiB5b3UgY3JlYXRlIGEgY2xvbmUgb2YgdGhlIGtlcm5lbCBHaXQgcmVwb3NpdG9yeSwgeW91IGFyZQorICAgICAgICAgICAgICAgIHNpbXBseSBtYWtpbmcgaXQgZWZmaWNpZW50bHkgYXZhaWxhYmxlIGZvciBidWlsZGluZyBhbmQKKyAgICAgICAgICAgICAgICBkZXZlbG9wbWVudC4KICAgICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgPC9wYXJhPgorCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzdGVwcyBkZXNjcmliZSB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgWW9jdG8gUHJvamVjdCBUZWFtIGNvbnN0cnVjdHMKLSAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBzb3VyY2UgR2l0IHJlcG9zaXRvcnkgKG9yIHRyZWUpIGZvdW5kIGF0CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN0ZXBzIGRlc2NyaWJlIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICBUZWFtIGNvbnN0cnVjdHMgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHNvdXJjZSBHaXQgcmVwb3NpdG9yeQorICAgICAgICAgICAgKG9yIHRyZWUpIGZvdW5kIGF0CiAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2knPjwvdWxpbms+IGdpdmVuIHRoZQogICAgICAgICAgICAgaW50cm9kdWN0aW9uIG9mIGEgbmV3IHRvcC1sZXZlbCBrZXJuZWwgZmVhdHVyZSBvciBCU1AuCi0gICAgICAgICAgICBUaGVzZSBhcmUgdGhlIGFjdGlvbnMgdGhhdCBlZmZlY3RpdmVseSBjcmVhdGUgdGhlIHRyZWUKLSAgICAgICAgICAgIHRoYXQgaW5jbHVkZXMgdGhlIG5ldyBmZWF0dXJlLCBwYXRjaCBvciBCU1A6CisgICAgICAgICAgICBUaGVzZSBhcmUgdGhlIGFjdGlvbnMgdGhhdCBlZmZlY3RpdmVseSBwcm92aWRlIHRoZSBNZXRhZGF0YQorICAgICAgICAgICAgYW5kIGNyZWF0ZSB0aGUgdHJlZSB0aGF0IGluY2x1ZGVzIHRoZSBuZXcgZmVhdHVyZSwgcGF0Y2ggb3IgQlNQOgogICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIHRvcC1sZXZlbCBrZXJuZWwgZmVhdHVyZSBpcyBwYXNzZWQgdG8gdGhlIGtlcm5lbCBidWlsZCBzdWJzeXN0ZW0uCi0gICAgICAgICAgICAgICAgICAgIE5vcm1hbGx5LCB0aGlzIGZlYXR1cmUgaXMgYSBCU1AgZm9yIGEgcGFydGljdWxhciBrZXJuZWwgdHlwZS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGZpbGUgdGhhdCBkZXNjcmliZXMgdGhlIHRvcC1sZXZlbCBmZWF0dXJlIGlzIGxvY2F0ZWQgYnkgc2VhcmNoaW5nCi0gICAgICAgICAgICAgICAgICAgIHRoZXNlIHN5c3RlbSBkaXJlY3RvcmllczoKKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5QYXNzIEZlYXR1cmUgdG8gQnVpbGQgU3Vic3lzdGVtOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEEgdG9wLWxldmVsIGtlcm5lbCBmZWF0dXJlIGlzIHBhc3NlZCB0byB0aGUga2VybmVsIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN1YnN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgTm9ybWFsbHksIHRoaXMgZmVhdHVyZSBpcyBhIEJTUCBmb3IgYSBwYXJ0aWN1bGFyIGtlcm5lbAorICAgICAgICAgICAgICAgICAgICB0eXBlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5Mb2NhdGUgRmVhdHVyZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlsZSB0aGF0IGRlc2NyaWJlcyB0aGUgdG9wLWxldmVsIGZlYXR1cmUgaXMgbG9jYXRlZAorICAgICAgICAgICAgICAgICAgICBieSBzZWFyY2hpbmcgdGhlc2Ugc3lzdGVtIGRpcmVjdG9yaWVzOgogICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBpbi10cmVlIGtlcm5lbC1jYWNoZSBkaXJlY3Rvcmllcywgd2hpY2ggYXJlIGxvY2F0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiA8ZmlsZW5hbWU+bWV0YS9jZmcva2VybmVsLWNhY2hlPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BcmVhcyBwb2ludGVkIHRvIGJ5IDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gc3RhdGVtZW50cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kIGluIHJlY2lwZXM8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgaW4tdHJlZSBrZXJuZWwtY2FjaGUgZGlyZWN0b3JpZXMsIHdoaWNoIGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnlvY3RvLWtlcm5lbC1jYWNoZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZWFzIHBvaW50ZWQgdG8gYnkgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudHMgZm91bmQgaW4ga2VybmVsIHJlY2lwZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICAgICAgICAgICAgICAgIEZvciBhIHR5cGljYWwgYnVpbGQsIHRoZSB0YXJnZXQgb2YgdGhlIHNlYXJjaCBpcyBhCiAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmUgZGVzY3JpcHRpb24gaW4gYW4gPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiBmaWxlCkBAIC05MSw0MSArMTUzLDk2IEBACiAgICAgIDxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+LTxyZXBsYWNlYWJsZT5rZXJuZWxfdHlwZTwvcmVwbGFjZWFibGU+LnNjYwogICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk9uY2UgbG9jYXRlZCwgdGhlIGZlYXR1cmUgZGVzY3JpcHRpb24gaXMgZWl0aGVyIGNvbXBpbGVkIGludG8gYSBzaW1wbGUgc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIG9mIGFjdGlvbnMsIG9yIGludG8gYW4gZXhpc3RpbmcgZXF1aXZhbGVudCBzY3JpcHQgdGhhdCBpcyBhbHJlYWR5IHBhcnQgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgIHNoaXBwZWQga2VybmVsLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHRyYSBmZWF0dXJlcyBhcmUgYXBwZW5kZWQgdG8gdGhlIHRvcC1sZXZlbCBmZWF0dXJlIGRlc2NyaXB0aW9uLgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkV4cGFuZCBGZWF0dXJlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE9uY2UgbG9jYXRlZCwgdGhlIGZlYXR1cmUgZGVzY3JpcHRpb24gaXMgZWl0aGVyIGV4cGFuZGVkCisgICAgICAgICAgICAgICAgICAgIGludG8gYSBzaW1wbGUgc2NyaXB0IG9mIGFjdGlvbnMsIG9yIGludG8gYW4gZXhpc3RpbmcKKyAgICAgICAgICAgICAgICAgICAgZXF1aXZhbGVudCBzY3JpcHQgdGhhdCBpcyBhbHJlYWR5IHBhcnQgb2YgdGhlIHNoaXBwZWQKKyAgICAgICAgICAgICAgICAgICAga2VybmVsLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5BcHBlbmQgRXh0cmEgRmVhdHVyZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRXh0cmEgZmVhdHVyZXMgYXJlIGFwcGVuZGVkIHRvIHRoZSB0b3AtbGV2ZWwgZmVhdHVyZQorICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbi4KICAgICAgICAgICAgICAgICAgICAgVGhlc2UgZmVhdHVyZXMgY2FuIGNvbWUgZnJvbSB0aGUKICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtFUk5FTF9GRUFUVVJFUyc+PGZpbGVuYW1lPktFUk5FTF9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gcmVjaXBlcy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RWFjaCBleHRyYSBmZWF0dXJlIGlzIGxvY2F0ZWQsIGNvbXBpbGVkIGFuZCBhcHBlbmRlZCB0byB0aGUgc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIGFzIGRlc2NyaWJlZCBpbiBzdGVwIHRocmVlLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgc2NyaXB0IGlzIGV4ZWN1dGVkIHRvIHByb2R1Y2UgYSBzZXJpZXMgb2YgPGZpbGVuYW1lPm1ldGEtKjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzLgotICAgICAgICAgICAgICAgICAgICBUaGVzZSBkaXJlY3RvcmllcyBhcmUgZGVzY3JpcHRpb25zIG9mIGFsbCB0aGUgYnJhbmNoZXMsIHRhZ3MsIHBhdGNoZXMgYW5kIGNvbmZpZ3VyYXRpb25zIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBiZSBhcHBsaWVkIHRvIHRoZSBiYXNlIEdpdCByZXBvc2l0b3J5IHRvIGNvbXBsZXRlbHkgY3JlYXRlIHRoZQotICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKGJ1aWxkKSBicmFuY2ggZm9yIHRoZSBuZXcgQlNQIG9yIGZlYXR1cmUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBiYXNlIHJlcG9zaXRvcnkgaXMgY2xvbmVkLCBhbmQgdGhlIGFjdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgbGlzdGVkIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS0qPC9maWxlbmFtZT4gZGlyZWN0b3JpZXMgYXJlIGFwcGxpZWQgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgIHRyZWUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBHaXQgcmVwb3NpdG9yeSBpcyBsZWZ0IHdpdGggdGhlIGRlc2lyZWQgYnJhbmNoIGNoZWNrZWQgb3V0IGFuZCBhbnkKLSAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQgYnJhbmNoaW5nLCBwYXRjaGluZyBhbmQgdGFnZ2luZyBoYXMgYmVlbiBwZXJmb3JtZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkxvY2F0ZSwgRXhwYW5kLCBhbmQgQXBwZW5kIEVhY2ggRmVhdHVyZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBFYWNoIGV4dHJhIGZlYXR1cmUgaXMgbG9jYXRlZCwgZXhwYW5kZWQgYW5kIGFwcGVuZGVkIHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBzY3JpcHQgYXMgZGVzY3JpYmVkIGluIHN0ZXAgdGhyZWUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkV4ZWN1dGUgdGhlIFNjcmlwdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgc2NyaXB0IGlzIGV4ZWN1dGVkIHRvIHByb2R1Y2UgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPi5jZmc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlcyBpbiBhcHByb3ByaWF0ZSBkaXJlY3RvcmllcyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnlvY3RvLWtlcm5lbC1jYWNoZTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGZpbGVzIGFyZSBkZXNjcmlwdGlvbnMgb2YgYWxsIHRoZSBicmFuY2hlcywgdGFncywKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hlcyBhbmQgY29uZmlndXJhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGFwcGxpZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIGJhc2UgR2l0IHJlcG9zaXRvcnkgdG8gY29tcGxldGVseSBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSAoYnVpbGQpIGJyYW5jaCBmb3IgdGhlIG5ldyBCU1Agb3IgZmVhdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q2xvbmUgQmFzZSBSZXBvc2l0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSBiYXNlIHJlcG9zaXRvcnkgaXMgY2xvbmVkLCBhbmQgdGhlIGFjdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgbGlzdGVkIGluIHRoZSA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsLWNhY2hlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgYXJlIGFwcGxpZWQgdG8gdGhlIHRyZWUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlBlcmZvcm0gQ2xlYW51cDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgR2l0IHJlcG9zaXRvcmllcyBhcmUgbGVmdCB3aXRoIHRoZSBkZXNpcmVkIGJyYW5jaGVzCisgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQgb3V0IGFuZCBhbnkgcmVxdWlyZWQgYnJhbmNoaW5nLCBwYXRjaGluZyBhbmQKKyAgICAgICAgICAgICAgICAgICAgdGFnZ2luZyBoYXMgYmVlbiBwZXJmb3JtZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KICAgICAgICAgPC9wYXJhPgorCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIGtlcm5lbCB0cmVlIGlzIG5vdyByZWFkeSBmb3IgZGV2ZWxvcGVyIGNvbnN1bXB0aW9uIHRvIGJlIGxvY2FsbHkgY2xvbmVkLAotICAgICAgICAgICAgY29uZmlndXJlZCwgYW5kIGJ1aWx0IGludG8gYSBZb2N0byBQcm9qZWN0IGtlcm5lbCBzcGVjaWZpYyB0byBzb21lIHRhcmdldCBoYXJkd2FyZS4KLSAgICAgICAgICAgIDxub3RlPjxwYXJhPlRoZSBnZW5lcmF0ZWQgPGZpbGVuYW1lPm1ldGEtKjwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzIGFkZCB0byB0aGUga2VybmVsCi0gICAgICAgICAgICAgICAgYXMgc2hpcHBlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IHJlbGVhc2UuCi0gICAgICAgICAgICAgICAgQW55IGFkZC1vbnMgYW5kIGNvbmZpZ3VyYXRpb24gZGF0YSBhcmUgYXBwbGllZCB0byB0aGUgZW5kIG9mIGFuIGV4aXN0aW5nIGJyYW5jaC4KLSAgICAgICAgICAgICAgICBUaGUgZnVsbCByZXBvc2l0b3J5IGdlbmVyYXRpb24gdGhhdCBpcyBmb3VuZCBpbiB0aGUKLSAgICAgICAgICAgICAgICBvZmZpY2lhbCBZb2N0byBQcm9qZWN0IGtlcm5lbCByZXBvc2l0b3JpZXMgYXQKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2knPmh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0LmNnaTwvdWxpbms+Ci0gICAgICAgICAgICAgICAgaXMgdGhlIGNvbWJpbmF0aW9uIG9mIGFsbCBzdXBwb3J0ZWQgYm9hcmRzIGFuZCBjb25maWd1cmF0aW9ucy48L3BhcmE+Ci0gICAgICAgICAgICAgICAgPHBhcmE+VGhlIHRlY2huaXF1ZSB0aGUgWW9jdG8gUHJvamVjdCB0ZWFtIHVzZXMgaXMgZmxleGlibGUgYW5kIGFsbG93cyBmb3Igc2VhbWxlc3MKLSAgICAgICAgICAgICAgICBibGVuZGluZyBvZiBhbiBpbW11dGFibGUgaGlzdG9yeSB3aXRoIGFkZGl0aW9uYWwgcGF0Y2hlcyBzcGVjaWZpYyB0byBhCi0gICAgICAgICAgICAgICAgZGVwbG95bWVudC4KLSAgICAgICAgICAgICAgICBBbnkgYWRkaXRpb25zIHRvIHRoZSBrZXJuZWwgYmVjb21lIGFuIGludGVncmF0ZWQgcGFydCBvZiB0aGUgYnJhbmNoZXMuPC9wYXJhPgorICAgICAgICAgICAgVGhlIGtlcm5lbCB0cmVlIGFuZCBjYWNoZSBhcmUgcmVhZHkgZm9yIGRldmVsb3BlciBjb25zdW1wdGlvbiB0bworICAgICAgICAgICAgYmUgbG9jYWxseSBjbG9uZWQsIGNvbmZpZ3VyZWQsIGFuZCBidWlsdCBpbnRvIGEgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAga2VybmVsIHNwZWNpZmljIHRvIHNvbWUgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgPG5vdGU+PHRpdGxlPk5vdGVzPC90aXRsZT4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZ2VuZXJhdGVkIDxmaWxlbmFtZT55b2N0by1rZXJuZWwtY2FjaGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSBhZGRzIHRvIHRoZSBrZXJuZWwgYXMgc2hpcHBlZCB3aXRoIHRoZSBZb2N0bworICAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdCByZWxlYXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgQW55IGFkZC1vbnMgYW5kIGNvbmZpZ3VyYXRpb24gZGF0YSBhcmUgYXBwbGllZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBvZiBhbiBleGlzdGluZyBicmFuY2guCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZnVsbCByZXBvc2l0b3J5IGdlbmVyYXRpb24gdGhhdCBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZmljaWFsIFlvY3RvIFByb2plY3Qga2VybmVsIHJlcG9zaXRvcmllcyBhdAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpJz5odHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC5jZ2k8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgaXMgdGhlIGNvbWJpbmF0aW9uIG9mIGFsbCBzdXBwb3J0ZWQgYm9hcmRzIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRlY2huaXF1ZSB0aGUgWW9jdG8gUHJvamVjdCB0ZWFtIHVzZXMgaXMgZmxleGlibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhbGxvd3MgZm9yIHNlYW1sZXNzIGJsZW5kaW5nIG9mIGFuIGltbXV0YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgaGlzdG9yeSB3aXRoIGFkZGl0aW9uYWwgcGF0Y2hlcyBzcGVjaWZpYyB0byBhCisgICAgICAgICAgICAgICAgICAgICAgICBkZXBsb3ltZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgQW55IGFkZGl0aW9ucyB0byB0aGUga2VybmVsIGJlY29tZSBhbiBpbnRlZ3JhdGVkIHBhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBicmFuY2hlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZnVsbCBrZXJuZWwgdHJlZSB0aGF0IHlvdSBzZWUgb24KKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+PC91bGluaz4gaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZCB0aHJvdWdoIHJlcGVhdGluZyB0aGUgYWJvdmUgc3RlcHMgZm9yIGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQgQlNQcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBlbmQgcmVzdWx0IGlzIGEgYnJhbmNoZWQsIGNsZWFuIGhpc3RvcnkgdHJlZSB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICBtYWtlcyB1cCB0aGUga2VybmVsIGZvciBhIGdpdmVuIHJlbGVhc2UuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNlZSB0aGUgc2NyaXB0ICg8ZmlsZW5hbWU+a2dpdC1zY2M8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmxlIGZvciB0aGlzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpL3lvY3RvLWtlcm5lbC10b29scy90cmVlL3Rvb2xzJz48ZmlsZW5hbWU+eW9jdG8ta2VybmVsLXRvb2xzPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc3RlcHMgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIGZ1bGwga2VybmVsIHRyZWUgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2FtZSBzdGVwcyB0aGF0IEJpdEJha2UgdXNlcyB3aGVuIGl0IGJ1aWxkcyBhCisgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWwgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KICAgICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgPC9wYXJhPgogICAgIDwvc2VjdGlvbj4KQEAgLTEzMyw4NSArMjUwLDEwMCBAQAogICAgIDxzZWN0aW9uIGlkPSdidWlsZC1zdHJhdGVneSc+CiAgICAgICAgIDx0aXRsZT5CdWlsZCBTdHJhdGVneTwvdGl0bGU+CiAKLTwhLS0KICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICA8ZW1waGFzaXM+QVIgLSBEYXJyZW4gSGFydDo8L2VtcGhhc2lzPiAgU29tZSBwYXJ0cyBvZiB0aGlzIHNlY3Rpb24KLSAgICAgICAgICAgIG5lZWQgdG8gYmUgaW4gdGhlCi0gICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctYW4taXRlcmF0aXZlLWRldmVsb3BtZW50LXByb2Nlc3MnPlVzaW5nIGFuIEl0ZXJhdGl2ZSBEZXZlbG9wbWVudCBQcm9jZXNzPC9saW5rPiIKLSAgICAgICAgICAgIHNlY3Rpb24uCi0gICAgICAgICAgICBEYXJyZW4gbmVlZHMgdG8gZmlndXJlIG91dCB3aGljaCBwYXJ0cyBhbmQgaWRlbnRpZnkgdGhlbS4KLSAgICAgICAgPC9wYXJhPgotLS0+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBPbmNlIGEgbG9jYWwgR2l0IHJlcG9zaXRvcnkgb2YgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIGV4aXN0cyBvbiBhIGRldmVsb3BtZW50IHN5c3RlbSwKLSAgICAgICAgICAgIHlvdSBjYW4gY29uc2lkZXIgdGhlIGNvbXBpbGF0aW9uIHBoYXNlIG9mIGtlcm5lbCBkZXZlbG9wbWVudCAtIGJ1aWxkaW5nIGEga2VybmVsIGltYWdlLgotICAgICAgICAgICAgU29tZSBwcmVyZXF1aXNpdGVzIGV4aXN0IHRoYXQgYXJlIHZhbGlkYXRlZCBieSB0aGUgYnVpbGQgcHJvY2VzcyBiZWZvcmUgY29tcGlsYXRpb24KLSAgICAgICAgICAgIHN0YXJ0czoKKyAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgY2xvbmVkIGEgWW9jdG8gTGludXgga2VybmVsIHJlcG9zaXRvcnkgYW5kIHRoZQorICAgICAgICAgICAgY2FjaGUgcmVwb3NpdG9yeSAoPGZpbGVuYW1lPnlvY3RvLWtlcm5lbC1jYWNoZTwvZmlsZW5hbWU+KSBvbnRvCisgICAgICAgICAgICB5b3VyIGRldmVsb3BtZW50IHN5c3RlbSwgeW91IGNhbiBjb25zaWRlciB0aGUgY29tcGlsYXRpb24gcGhhc2UKKyAgICAgICAgICAgIG9mIGtlcm5lbCBkZXZlbG9wbWVudCwgd2hpY2ggaXMgYnVpbGRpbmcgYSBrZXJuZWwgaW1hZ2UuCisgICAgICAgICAgICBTb21lIHByZXJlcXVpc2l0ZXMgZXhpc3QgdGhhdCBhcmUgdmFsaWRhdGVkIGJ5IHRoZSBidWlsZCBwcm9jZXNzCisgICAgICAgICAgICBiZWZvcmUgY29tcGlsYXRpb24gc3RhcnRzOgogICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+IHBvaW50cwotICAgICAgICAgICAgICAgIHRvIHRoZSBrZXJuZWwgR2l0IHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSBCU1AgYnVpbGQgYnJhbmNoIGV4aXN0cy4KLSAgICAgICAgICAgICAgICBUaGlzIGJyYW5jaCBoYXMgdGhlIGZvbGxvd2luZyBmb3JtOgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBwb2ludHMgdG8gdGhlIGtlcm5lbCBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBBIEJTUCBidWlsZCBicmFuY2ggd2l0aCBNZXRhZGF0YSBleGlzdHMgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnlvY3RvLWtlcm5lbC1jYWNoZTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgVGhlIGJyYW5jaCBpcyBiYXNlZCBvbiB0aGUgWW9jdG8gTGludXgga2VybmVsIHZlcnNpb24gYW5kCisgICAgICAgICAgICAgICAgaGFzIGNvbmZpZ3VyYXRpb25zIGFuZCBmZWF0dXJlcyBncm91cGVkIHVuZGVyIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0by1rZXJuZWwtY2FjaGUvYnNwPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBmZWF0dXJlcyBhbmQgY29uZmlndXJhdGlvbnMgZm9yIHRoZQorICAgICAgICAgICAgICAgIEJlYWdsZUJvbmUgQm9hcmQgYXNzdW1pbmcgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0b180LjEyPC9maWxlbmFtZT4ga2VybmVsIHJlc2lkZSBpbiB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmcgYXJlYSBvZiB0aGUgPGZpbGVuYW1lPnlvY3RvLWtlcm5lbC1jYWNoZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeToKICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIDxyZXBsYWNlYWJsZT5rZXJuZWxfdHlwZTwvcmVwbGFjZWFibGU+LzxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICB5b2N0by1rZXJuZWwtY2FjaGUvYnNwL2JlYWdsZWJvbmUKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCB0aGUgInlvY3RvLTQuMTIiIGJyYW5jaCBpcworICAgICAgICAgICAgICAgICAgICBjaGVja2VkIG91dCBpbiB0aGUgPGZpbGVuYW1lPnlvY3RvLWtlcm5lbC1jYWNoZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICA8L2l0ZW1pemVkbGlzdD4KIAogICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIG1ha2VzIHN1cmUgdGhlc2UgY29uZGl0aW9ucyBleGlzdCBiZWZvcmUgYXR0ZW1wdGluZyBjb21waWxhdGlvbi4KKyAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIG1ha2VzIHN1cmUgdGhlc2UgY29uZGl0aW9ucyBleGlzdAorICAgICAgICAgICAgYmVmb3JlIGF0dGVtcHRpbmcgY29tcGlsYXRpb24uCiAgICAgICAgICAgICBPdGhlciBtZWFucywgaG93ZXZlciwgZG8gZXhpc3QsIHN1Y2ggYXMgYXMgYm9vdHN0cmFwcGluZyBhIEJTUC4KICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgQmVmb3JlIGJ1aWxkaW5nIGEga2VybmVsLCB0aGUgYnVpbGQgcHJvY2VzcyB2ZXJpZmllcyB0aGUgdHJlZQogICAgICAgICAgICAgYW5kIGNvbmZpZ3VyZXMgdGhlIGtlcm5lbCBieSBwcm9jZXNzaW5nIGFsbCBvZiB0aGUKLSAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gImZyYWdtZW50cyIgc3BlY2lmaWVkIGJ5IGZlYXR1cmUgZGVzY3JpcHRpb25zIGluIHRoZSA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICBmaWxlcy4KLSAgICAgICAgICAgIEFzIHRoZSBmZWF0dXJlcyBhcmUgY29tcGlsZWQsIGFzc29jaWF0ZWQga2VybmVsIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIGFyZSBub3RlZAotICAgICAgICAgICAgYW5kIHJlY29yZGVkIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS0qPC9maWxlbmFtZT4gc2VyaWVzIG9mIGRpcmVjdG9yaWVzIGluIHRoZWlyIGNvbXBpbGF0aW9uIG9yZGVyLgotICAgICAgICAgICAgVGhlIGZyYWdtZW50cyBhcmUgbWlncmF0ZWQsIHByZS1wcm9jZXNzZWQgYW5kIHBhc3NlZCB0byB0aGUgTGludXggS2VybmVsCi0gICAgICAgICAgICBDb25maWd1cmF0aW9uIHN1YnN5c3RlbSAoPGZpbGVuYW1lPmxrYzwvZmlsZW5hbWU+KSBhcyByYXcgaW5wdXQgaW4gdGhlIGZvcm0KLSAgICAgICAgICAgIG9mIGEgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLgotICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5sa2M8L2ZpbGVuYW1lPiB1c2VzIGl0cyBvd24gaW50ZXJuYWwgZGVwZW5kZW5jeSBjb25zdHJhaW50cyB0byBkbyB0aGUgZmluYWwKLSAgICAgICAgICAgIHByb2Nlc3Npbmcgb2YgdGhhdCBpbmZvcm1hdGlvbiBhbmQgZ2VuZXJhdGVzIHRoZSBmaW5hbCA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUKLSAgICAgICAgICAgIHRoYXQgaXMgdXNlZCBkdXJpbmcgY29tcGlsYXRpb24uCisgICAgICAgICAgICBjb25maWd1cmF0aW9uICJmcmFnbWVudHMiIHNwZWNpZmllZCBieSBmZWF0dXJlIGRlc2NyaXB0aW9ucworICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT4uc2NjPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICBBcyB0aGUgZmVhdHVyZXMgYXJlIGNvbXBpbGVkLCBhc3NvY2lhdGVkIGtlcm5lbCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBmcmFnbWVudHMgYXJlIG5vdGVkIGFuZCByZWNvcmRlZCBpbiB0aGUgc2VyaWVzIG9mIGRpcmVjdG9yaWVzCisgICAgICAgICAgICBpbiB0aGVpciBjb21waWxhdGlvbiBvcmRlci4KKyAgICAgICAgICAgIFRoZSBmcmFnbWVudHMgYXJlIG1pZ3JhdGVkLCBwcmUtcHJvY2Vzc2VkIGFuZCBwYXNzZWQgdG8gdGhlCisgICAgICAgICAgICBMaW51eCBLZXJuZWwgQ29uZmlndXJhdGlvbiBzdWJzeXN0ZW0gKDxmaWxlbmFtZT5sa2M8L2ZpbGVuYW1lPikgYXMKKyAgICAgICAgICAgIHJhdyBpbnB1dCBpbiB0aGUgZm9ybSBvZiBhIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bGtjPC9maWxlbmFtZT4gdXNlcyBpdHMgb3duIGludGVybmFsIGRlcGVuZGVuY3kKKyAgICAgICAgICAgIGNvbnN0cmFpbnRzIHRvIGRvIHRoZSBmaW5hbCBwcm9jZXNzaW5nIG9mIHRoYXQgaW5mb3JtYXRpb24gYW5kCisgICAgICAgICAgICBnZW5lcmF0ZXMgdGhlIGZpbmFsIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSB0aGF0IGlzIHVzZWQKKyAgICAgICAgICAgIGR1cmluZyBjb21waWxhdGlvbi4KICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVXNpbmcgdGhlIGJvYXJkJ3MgYXJjaGl0ZWN0dXJlIGFuZCBvdGhlciByZWxldmFudCB2YWx1ZXMgZnJvbSB0aGUgYm9hcmQncyB0ZW1wbGF0ZSwKLSAgICAgICAgICAgIGtlcm5lbCBjb21waWxhdGlvbiBpcyBzdGFydGVkIGFuZCBhIGtlcm5lbCBpbWFnZSBpcyBwcm9kdWNlZC4KKyAgICAgICAgICAgIFVzaW5nIHRoZSBib2FyZCdzIGFyY2hpdGVjdHVyZSBhbmQgb3RoZXIgcmVsZXZhbnQgdmFsdWVzIGZyb20KKyAgICAgICAgICAgIHRoZSBib2FyZCdzIHRlbXBsYXRlLCBrZXJuZWwgY29tcGlsYXRpb24gaXMgc3RhcnRlZCBhbmQgYSBrZXJuZWwKKyAgICAgICAgICAgIGltYWdlIGlzIHByb2R1Y2VkLgogICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICBUaGUgb3RoZXIgdGhpbmcgdGhhdCB5b3Ugbm90aWNlIG9uY2UgeW91IGNvbmZpZ3VyZSBhIGtlcm5lbCBpcyB0aGF0Ci0gICAgICAgICAgICB0aGUgYnVpbGQgcHJvY2VzcyBnZW5lcmF0ZXMgYSBidWlsZCB0cmVlIHRoYXQgaXMgc2VwYXJhdGUgZnJvbSB5b3VyIGtlcm5lbCdzIGxvY2FsIEdpdAotICAgICAgICAgICAgc291cmNlIHJlcG9zaXRvcnkgdHJlZS4KKyAgICAgICAgICAgIHRoZSBidWlsZCBwcm9jZXNzIGdlbmVyYXRlcyBhIGJ1aWxkIHRyZWUgdGhhdCBpcyBzZXBhcmF0ZSBmcm9tCisgICAgICAgICAgICB5b3VyIGtlcm5lbCdzIGxvY2FsIEdpdCBzb3VyY2UgcmVwb3NpdG9yeSB0cmVlLgogICAgICAgICAgICAgVGhpcyBidWlsZCB0cmVlIGhhcyBhIG5hbWUgdGhhdCB1c2VzIHRoZSBmb2xsb3dpbmcgZm9ybSwgd2hlcmUKLSAgICAgICAgICAgIDxmaWxlbmFtZT4ke01BQ0hJTkV9PC9maWxlbmFtZT4gaXMgdGhlIG1ldGFkYXRhIG5hbWUgb2YgdGhlIG1hY2hpbmUgKEJTUCkgYW5kICJrZXJuZWxfdHlwZSIgaXMgb25lCi0gICAgICAgICAgICBvZiB0aGUgWW9jdG8gUHJvamVjdCBzdXBwb3J0ZWQga2VybmVsIHR5cGVzIChlLmcuICJzdGFuZGFyZCIpOgorICAgICAgICAgICAgPGZpbGVuYW1lPiR7TUFDSElORX08L2ZpbGVuYW1lPiBpcyB0aGUgbWV0YWRhdGEgbmFtZSBvZiB0aGUKKyAgICAgICAgICAgIG1hY2hpbmUgKEJTUCkgYW5kICJrZXJuZWxfdHlwZSIgaXMgb25lIG9mIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICBzdXBwb3J0ZWQga2VybmVsIHR5cGVzIChlLmcuICJzdGFuZGFyZCIpOgogICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgIGxpbnV4LSR7TUFDSElORX0tPHJlcGxhY2VhYmxlPmtlcm5lbF90eXBlPC9yZXBsYWNlYWJsZT4tYnVpbGQKICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgZXhpc3Rpbmcgc3VwcG9ydCBpbiB0aGUgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiB0cmVlIGFjaGlldmVzIHRoaXMKLSAgICAgICAgICAgIGRlZmF1bHQgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgICAgIFRoZSBleGlzdGluZyBzdXBwb3J0IGluIHRoZSA8ZmlsZW5hbWU+a2VybmVsLm9yZzwvZmlsZW5hbWU+IHRyZWUKKyAgICAgICAgICAgIGFjaGlldmVzIHRoaXMgZGVmYXVsdCBmdW5jdGlvbmFsaXR5LgogICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGlzIGJlaGF2aW9yIG1lYW5zIHRoYXQgYWxsIHRoZSBnZW5lcmF0ZWQgZmlsZXMgZm9yIGEgcGFydGljdWxhciBtYWNoaW5lIG9yIEJTUCBhcmUgbm93IGluCi0gICAgICAgICAgICB0aGUgYnVpbGQgdHJlZSBkaXJlY3RvcnkuCi0gICAgICAgICAgICBUaGUgZmlsZXMgaW5jbHVkZSB0aGUgZmluYWwgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLCBhbGwgdGhlIDxmaWxlbmFtZT4ubzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICBmaWxlcywgdGhlIDxmaWxlbmFtZT4uYTwvZmlsZW5hbWU+IGZpbGVzLCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICBUaGlzIGJlaGF2aW9yIG1lYW5zIHRoYXQgYWxsIHRoZSBnZW5lcmF0ZWQgZmlsZXMgZm9yIGEgcGFydGljdWxhcgorICAgICAgICAgICAgbWFjaGluZSBvciBCU1AgYXJlIG5vdyBpbiB0aGUgYnVpbGQgdHJlZSBkaXJlY3RvcnkuCisgICAgICAgICAgICBUaGUgZmlsZXMgaW5jbHVkZSB0aGUgZmluYWwgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLAorICAgICAgICAgICAgYWxsIHRoZSA8ZmlsZW5hbWU+Lm88L2ZpbGVuYW1lPiBmaWxlcywgdGhlIDxmaWxlbmFtZT4uYTwvZmlsZW5hbWU+CisgICAgICAgICAgICBmaWxlcywgYW5kIHNvIGZvcnRoLgogICAgICAgICAgICAgU2luY2UgZWFjaCBtYWNoaW5lIG9yIEJTUCBoYXMgaXRzIG93biBzZXBhcmF0ZQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgotICAgICAgICAgICAgaW4gaXRzIG93biBzZXBhcmF0ZSBicmFuY2gKLSAgICAgICAgICAgIG9mIHRoZSBHaXQgcmVwb3NpdG9yeSwgeW91IGNhbiBlYXNpbHkgc3dpdGNoIGJldHdlZW4gZGlmZmVyZW50IGJ1aWxkcy4KKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGluIGl0cyBvd24gc2VwYXJhdGUgYnJhbmNoIG9mIHRoZSBHaXQgcmVwb3NpdG9yeSwgeW91IGNhbiBlYXNpbHkKKyAgICAgICAgICAgIHN3aXRjaCBiZXR3ZWVuIGRpZmZlcmVudCBidWlsZHMuCiAgICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3Rpb24+CiA8L2FwcGVuZGl4PgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LXN0eWxlLmNzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1zdHlsZS5jc3MKaW5kZXggNmUwYzFjNy4uOWMwMWFhNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LXN0eWxlLmNzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtc3R5bGUuY3NzCkBAIC03MzAsNiArNzMwLDEwIEBACiAgIGJvcmRlci1jb2xvcjogYmxhY2s7CiB9CiAKKy53cml0ZXJub3RlcyB7CisgIGNvbG9yOiByZWQ7Cit9CisKIAogICAvKioqKioqKioqKiogLwogIC8gIGdyYXBoaWNzICAvCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LnhtbAppbmRleCAyOGEzMzY0Li5lYzM2ZDI0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi54bWwKQEAgLTIyLDExICsyMiwxMSBAQAogCiAgICAgICAgIDxhdXRob3Jncm91cD4KICAgICAgICAgICAgIDxhdXRob3I+Ci0gICAgICAgICAgICAgICAgPGZpcnN0bmFtZT5EYXJyZW48L2ZpcnN0bmFtZT4gPHN1cm5hbWU+SGFydDwvc3VybmFtZT4KKyAgICAgICAgICAgICAgICA8Zmlyc3RuYW1lPlNjb3R0PC9maXJzdG5hbWU+IDxzdXJuYW1lPlJpZmVuYmFyazwvc3VybmFtZT4KICAgICAgICAgICAgICAgICA8YWZmaWxpYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPkludGVsIENvcnBvcmF0aW9uPC9vcmduYW1lPgorICAgICAgICAgICAgICAgICAgICA8b3JnbmFtZT5TY290dHkncyBEb2N1bWVudGF0aW9uIFNlcnZpY2VzLCBJTkM8L29yZ25hbWU+CiAgICAgICAgICAgICAgICAgPC9hZmZpbGlhdGlvbj4KLSAgICAgICAgICAgICAgICA8ZW1haWw+ZGFycmVuLmhhcnRAaW50ZWwuY29tPC9lbWFpbD4KKyAgICAgICAgICAgICAgICA8ZW1haWw+c3JpZmVuYmFya0BnbWFpbC5jb208L2VtYWlsPgogICAgICAgICAgICAgPC9hdXRob3I+CiAgICAgICAgIDwvYXV0aG9yZ3JvdXA+CiAKQEAgLTgyLDI0ICs4MiwxOSBAQAogICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjMgUmVsZWFzZS48L3JldnJlbWFyaz4KICAgICAgICAgICAgIDwvcmV2aXNpb24+CiAgICAgICAgICAgICA8cmV2aXNpb24+Ci0gICAgICAgICAgICAgICAgPHJldm51bWJlcj4yLjMuMTwvcmV2bnVtYmVyPgotICAgICAgICAgICAgICAgIDxkYXRlPkp1bmUgMjAxNzwvZGF0ZT4KLSAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi4zLjEgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjIuNDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxNzwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi40IFJlbGVhc2UuPC9yZXZyZW1hcms+CiAgICAgICAgICAgICA8L3JldmlzaW9uPgogICAgICAgICAgICAgPHJldmlzaW9uPgotICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi4zLjI8L3Jldm51bWJlcj4KLSAgICAgICAgICAgICAgICA8ZGF0ZT5TZXB0ZW1iZXIgMjAxNzwvZGF0ZT4KLSAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi4zLjIgUmVsZWFzZS48L3JldnJlbWFyaz4KLSAgICAgICAgICAgIDwvcmV2aXNpb24+Ci0gICAgICAgICAgICA8cmV2aXNpb24+Ci0gICAgICAgICAgICAgICAgPHJldm51bWJlcj4yLjMuMzwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi40LjE8L3Jldm51bWJlcj4KICAgICAgICAgICAgICAgICA8ZGF0ZT5KYW51YXJ5IDIwMTg8L2RhdGU+Ci0gICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDIuMy4zIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDIuNC4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CiAgICAgICAgICAgICA8L3JldmlzaW9uPgogICAgICAgICAgICAgPHJldmlzaW9uPgotICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi4zLjQ8L3Jldm51bWJlcj4KLSAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE4PC9kYXRlPgotICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjMuNCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi40LjI8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5NYXJjaCAyMDE4PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjQuMiBSZWxlYXNlLjwvcmV2cmVtYXJrPgogICAgICAgICAgICAgPC9yZXZpc2lvbj4KICAgICAgICAgPC9yZXZoaXN0b3J5PgogCkBAIC0xMTYsMzAgKzExMSwzMSBAQAogICAgICAgICAgICA8bm90ZT48dGl0bGU+TWFudWFsIE5vdGVzPC90aXRsZT4KICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CiAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICBGb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IExpbnV4Ci0gICAgICAgICAgICAgICAgICAgICAgIEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWwgYXNzb2NpYXRlZCB3aXRoIHRoaXMgWW9jdG8KLSAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdCByZWxlYXNlICh2ZXJzaW9uICZZT0NUT19ET0NfVkVSU0lPTjspLAotICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgIE1hbnVhbCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZlcnNpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5Zb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWw8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICBpcyBmb3IgdGhlICZZT0NUT19ET0NfVkVSU0lPTjsgcmVsZWFzZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgVG8gYmUgc3VyZSB5b3UgaGF2ZSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIG1hbnVhbAorICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhpcyByZWxlYXNlLCB1c2UgdGhlIG1hbnVhbCBmcm9tIHRoZQogICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L2RvY3VtZW50YXRpb24nPllvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbiBwYWdlPC91bGluaz4uCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2ZXJzaW9uIG9mIHRoZSBtYW51YWwgaXMgdmVyc2lvbgotICAgICAgICAgICAgICAgICAgICAgICAmWU9DVE9fRE9DX1ZFUlNJT047LgotICAgICAgICAgICAgICAgICAgICAgICBGb3IgbGF0ZXIgcmVsZWFzZXMgb2YgdGhlIFlvY3RvIFByb2plY3QgKGlmIHRoZXkgZXhpc3QpLAotICAgICAgICAgICAgICAgICAgICAgICBnbyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgRm9yIG1hbnVhbHMgYXNzb2NpYXRlZCB3aXRoIG90aGVyIHJlbGVhc2VzIG9mIHRoZSBZb2N0bworICAgICAgICAgICAgICAgICAgICAgICBQcm9qZWN0LCBnbyB0byB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy9kb2N1bWVudGF0aW9uJz5Zb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24gcGFnZTwvdWxpbms+CiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB1c2UgdGhlIGRyb3AtZG93biAiQWN0aXZlIFJlbGVhc2VzIiBidXR0b24KLSAgICAgICAgICAgICAgICAgICAgICAgYW5kIGNob29zZSB0aGUgWW9jdG8gUHJvamVjdCB2ZXJzaW9uIGZvciB3aGljaCB5b3Ugd2FudAotICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFudWFsLgorICAgICAgICAgICAgICAgICAgICAgICBhbmQgY2hvb3NlIHRoZSBtYW51YWwgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXNpcmVkCisgICAgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QuCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhbiBpbi1kZXZlbG9wbWVudCB2ZXJzaW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQgTWFudWFsLCBzZWUKLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1VSTDsvbGF0ZXN0L2tlcm5lbC1kZXYva2VybmVsLWRldi5odG1sJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIHJlcG9ydCBhbnkgaW5hY2N1cmFjaWVzIG9yIHByb2JsZW1zIHdpdGggdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgbWFudWFsLCBzZW5kIGFuIGVtYWlsIHRvIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgICAgICBkaXNjdXNzaW9uIGdyb3VwIGF0CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG9AeW9jdG9wcm9qZWN0LmNvbTwvZmlsZW5hbWU+IG9yIGxvZyBpbnRvCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZnJlZW5vZGUgPGZpbGVuYW1lPiN5b2N0bzwvZmlsZW5hbWU+IGNoYW5uZWwuCiAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICA8L25vdGU+CiAgICAgPC9sZWdhbG5vdGljZT4KIAogICAgIDwvYm9va2luZm8+CkBAIC0xNTQsMTAgKzE1MCw2IEBACiAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJrZXJuZWwtZGV2LW1haW50LWFwcHgueG1sIi8+CiAKLTwhLS0KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJrZXJuZWwtZGV2LWV4YW1wbGVzLnhtbCIvPgotLS0+Ci0KICAgICA8eGk6aW5jbHVkZSBocmVmPSJrZXJuZWwtZGV2LWZhcS54bWwiLz4KIAogPCEtLSAgICA8aW5kZXggaWQ9J2luZGV4Jz4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMveW9jdG8tZW52aXJvbm1lbnQucG5nIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9ZUC1mbG93LWRpYWdyYW0ucG5nCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZwpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9ZUC1mbG93LWRpYWdyYW0ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYml0YmFrZS1idWlsZC1mbG93LnBuZyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYml0YmFrZS1idWlsZC1mbG93LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjk1ZWIzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9iaXRiYWtlLWJ1aWxkLWZsb3cucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZwppbmRleCA1NDBiMGFiLi4wZjgyYTFmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2JzcC1kZXYtZmxvdy5wbmcKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvZGV2LXRpdGxlLnBuZyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvZGV2LXRpdGxlLnBuZwppbmRleCBkM2NhYzRhLi4xNWU2N2QwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2Rldi10aXRsZS5wbmcKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9kZXYtdGl0bGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvZGV2dG9vbC1hZGQtZmxvdy5wbmcgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2RldnRvb2wtYWRkLWZsb3cucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDllNjBlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvZGV2dG9vbC1hZGQtZmxvdy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2RldnRvb2wtbW9kaWZ5LWZsb3cucG5nIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9kZXZ0b29sLW1vZGlmeS1mbG93LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q3ZjRkMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2RldnRvb2wtbW9kaWZ5LWZsb3cucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9kZXZ0b29sLXVwZ3JhZGUtZmxvdy5wbmcgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2RldnRvb2wtdXBncmFkZS1mbG93LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI1MTY4Yy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2RldnRvb2wtdXBncmFkZS1mbG93LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaW5kZXgtZG93bmxvYWRzLnBuZyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaW5kZXgtZG93bmxvYWRzLnBuZwppbmRleCBjOTA3OTk3Li45NjMwM2I4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2luZGV4LWRvd25sb2Fkcy5wbmcKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9pbmRleC1kb3dubG9hZHMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWRldi1mbG93LnBuZyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWRldi1mbG93LnBuZwppbmRleCAwMDkxMDVkLi43OTNhMzk1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbC1kZXYtZmxvdy5wbmcKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtZGV2LWZsb3cucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTItZ2VuZXJpYy5wbmcgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbC1vdmVydmlldy0yLWdlbmVyaWMucG5nCmluZGV4IGNiOTcwZWEuLmVlMmNkYjIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTItZ2VuZXJpYy5wbmcKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi1nZW5lcmljLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3Nkay10aXRsZS5wbmcgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3Nkay10aXRsZS5wbmcKaW5kZXggZTlkNWIzNC4uZTY5ZTAzOSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zZGstdGl0bGUucG5nCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc2RrLXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3NvdXJjZS1yZXBvcy5wbmcgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3NvdXJjZS1yZXBvcy5wbmcKaW5kZXggNjVjNWYyOS4uZTljZmYxNiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zb3VyY2UtcmVwb3MucG5nCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9tZWdhLW1hbnVhbC54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9tZWdhLW1hbnVhbC54bWwKaW5kZXggZDA2Zjg1MS4uYTk0MWQ3OSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvbWVnYS1tYW51YWwueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL21lZ2EtbWFudWFsLnhtbApAQCAtMzMsNyArMzMsNyBAQAogICAgICAgICAgICAgPGF1dGhvcj4KICAgICAgICAgICAgICAgICA8Zmlyc3RuYW1lPlNjb3R0PC9maXJzdG5hbWU+IDxzdXJuYW1lPlJpZmVuYmFyazwvc3VybmFtZT4KICAgICAgICAgICAgICAgICA8YWZmaWxpYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPkludGVsIENvcnBvcmF0aW9uPC9vcmduYW1lPgorICAgICAgICAgICAgICAgICAgICA8b3JnbmFtZT5TY290dHkncyBEb2N1bWVudGF0aW9uIFNlcnZpY2VzLCBJTkM8L29yZ25hbWU+CiAgICAgICAgICAgICAgICAgPC9hZmZpbGlhdGlvbj4KICAgICAgICAgICAgICAgICA8ZW1haWw+c3JpZmVuYmFya0BnbWFpbC5jb208L2VtYWlsPgogICAgICAgICAgICAgPC9hdXRob3I+CkBAIC02NiwyNCArNjYsMTkgQEAKICAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi4zIFJlbGVhc2UuPC9yZXZyZW1hcms+CiAgICAgICAgICAgICA8L3JldmlzaW9uPgogICAgICAgICAgICAgPHJldmlzaW9uPgotICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi4zLjE8L3Jldm51bWJlcj4KLSAgICAgICAgICAgICAgICA8ZGF0ZT5KdW5lIDIwMTc8L2RhdGU+Ci0gICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDIuMy4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4yLjQ8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTc8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDIuNCBSZWxlYXNlLjwvcmV2cmVtYXJrPgogICAgICAgICAgICAgPC9yZXZpc2lvbj4KICAgICAgICAgICAgIDxyZXZpc2lvbj4KLSAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjIuMy4yPC9yZXZudW1iZXI+Ci0gICAgICAgICAgICAgICAgPGRhdGU+U2VwdGVtYmVyIDIwMTc8L2RhdGU+Ci0gICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDIuMy4yIFJlbGVhc2UuPC9yZXZyZW1hcms+Ci0gICAgICAgICAgICA8L3JldmlzaW9uPgotICAgICAgICAgICAgPHJldmlzaW9uPgotICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi4zLjM8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjIuNC4xPC9yZXZudW1iZXI+CiAgICAgICAgICAgICAgICAgPGRhdGU+SmFudWFyeSAyMDE4PC9kYXRlPgotICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjMuMyBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjQuMSBSZWxlYXNlLjwvcmV2cmVtYXJrPgogICAgICAgICAgICAgPC9yZXZpc2lvbj4KICAgICAgICAgICAgIDxyZXZpc2lvbj4KLSAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjIuMy40PC9yZXZudW1iZXI+Ci0gICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxODwvZGF0ZT4KLSAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi4zLjQgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjIuNC4yPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+TWFyY2ggMjAxODwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi40LjIgUmVsZWFzZS48L3JldnJlbWFyaz4KICAgICAgICAgICAgIDwvcmV2aXNpb24+CiAgICAgICAgPC9yZXZoaXN0b3J5PgogCkBAIC0xMDAsMjcgKzk1LDI5IEBACiAgICAgICAgICAgIDxub3RlPjx0aXRsZT5NYW51YWwgTm90ZXM8L3RpdGxlPgogICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgIEZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIFlvY3RvIFByb2plY3QKLSAgICAgICAgICAgICAgICAgICAgICAgTWVnYS1NYW51YWwgYXNzb2NpYXRlZCB3aXRoIHRoaXMgWW9jdG8gUHJvamVjdCByZWxlYXNlCi0gICAgICAgICAgICAgICAgICAgICAgICh2ZXJzaW9uICZZT0NUT19ET0NfVkVSU0lPTjspLAotICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlIFlvY3RvIFByb2plY3QgTWVnYS1NYW51YWwgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2ZXJzaW9uIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+WW9jdG8gUHJvamVjdCBNZWdhLU1hbnVhbDwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgIGlzIGZvciB0aGUgJllPQ1RPX0RPQ19WRVJTSU9OOyByZWxlYXNlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICBUbyBiZSBzdXJlIHlvdSBoYXZlIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgbWFudWFsCisgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGlzIHJlbGVhc2UsIHVzZSB0aGUgbWFudWFsIGZyb20gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvZG9jdW1lbnRhdGlvbic+WW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uIHBhZ2U8L3VsaW5rPi4KICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZlcnNpb24gb2YgdGhlIG1hbnVhbCBpcyB2ZXJzaW9uCi0gICAgICAgICAgICAgICAgICAgICAgICZZT0NUT19ET0NfVkVSU0lPTjsuCi0gICAgICAgICAgICAgICAgICAgICAgIEZvciBsYXRlciByZWxlYXNlcyBvZiB0aGUgWW9jdG8gUHJvamVjdCAoaWYgdGhleSBleGlzdCksCi0gICAgICAgICAgICAgICAgICAgICAgIGdvIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICBGb3IgbWFudWFscyBhc3NvY2lhdGVkIHdpdGggb3RoZXIgcmVsZWFzZXMgb2YgdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgICAgICAgIFByb2plY3QsIGdvIHRvIHRoZQogICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L2RvY3VtZW50YXRpb24nPllvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbiBwYWdlPC91bGluaz4KICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHVzZSB0aGUgZHJvcC1kb3duICJBY3RpdmUgUmVsZWFzZXMiIGJ1dHRvbgotICAgICAgICAgICAgICAgICAgICAgICBhbmQgY2hvb3NlIHRoZSBZb2N0byBQcm9qZWN0IHZlcnNpb24gZm9yIHdoaWNoIHlvdSB3YW50Ci0gICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYW51YWwuCisgICAgICAgICAgICAgICAgICAgICAgIGFuZCBjaG9vc2UgdGhlIG1hbnVhbCBhc3NvY2lhdGVkIHdpdGggdGhlIGRlc2lyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdC4KICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICBGb3IgYW4gaW4tZGV2ZWxvcG1lbnQgdmVyc2lvbiBvZiB0aGUgWW9jdG8gUHJvamVjdAotICAgICAgICAgICAgICAgICAgICAgICBNZWdhLU1hbnVhbCwgc2VlCi0gICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1VSTDsvbGF0ZXN0L21lZ2EtbWFudWFsL21lZ2EtbWFudWFsLmh0bWwnPjwvdWxpbms+LgotICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIHJlcG9ydCBhbnkgaW5hY2N1cmFjaWVzIG9yIHByb2JsZW1zIHdpdGggdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgbWFudWFsLCBzZW5kIGFuIGVtYWlsIHRvIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgICAgICBkaXNjdXNzaW9uIGdyb3VwIGF0CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG9AeW9jdG9wcm9qZWN0LmNvbTwvZmlsZW5hbWU+IG9yIGxvZyBpbnRvCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZnJlZW5vZGUgPGZpbGVuYW1lPiN5b2N0bzwvZmlsZW5hbWU+IGNoYW5uZWwuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgICAgICA8L25vdGU+CiAKQEAgLTE0Niw4ICsxNDMsNiBAQAogICAgIDx4aTppbmNsdWRlCiAgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9kZXYtbWFudWFsL2Rldi1tYW51YWwtbmV3YmllLnhtbCIvPgogICAgIDx4aTppbmNsdWRlCi0gICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9kZXYtbWFudWFsL2Rldi1tYW51YWwtbW9kZWwueG1sIi8+Ci0gICAgPHhpOmluY2x1ZGUKICAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1jb21tb24tdGFza3MueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUKICAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1xZW11LnhtbCIvPgpAQCAtMTY3LDYgKzE2Miw4IEBACiAgICAgPHhpOmluY2x1ZGUKICAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3Nkay1tYW51YWwvc2RrLXdvcmtpbmctcHJvamVjdHMueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3Nkay1tYW51YWwvc2RrLWVjbGlwc2UtcHJvamVjdC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQogICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vc2RrLW1hbnVhbC9zZGstYXBwZW5kaXgtb2J0YWluLnhtbCIvPgogICAgIDx4aTppbmNsdWRlCiAgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9zZGstbWFudWFsL3Nkay1hcHBlbmRpeC1jdXN0b21pemluZy54bWwiLz4KQEAgLTIyOSw3ICsyMjYsNyBAQAogICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vcmVmLW1hbnVhbC91c2luZ3Bva3kueG1sIi8+CiAKICAgICA8eGk6aW5jbHVkZQotICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vcmVmLW1hbnVhbC9jbG9zZXItbG9vay54bWwiLz4KKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvcmVmLWRldmVsb3BtZW50LWVudmlyb25tZW50LnhtbCIvPgogCiAgICAgPHhpOmluY2x1ZGUKICAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvdGVjaG5pY2FsLWRldGFpbHMueG1sIi8+CkBAIC0yNTMsNiArMjUwLDkgQEAKICAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvcmVmLWRldnRvb2wtcmVmZXJlbmNlLnhtbCIvPgogCiAgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvcmVmLWtpY2tzdGFydC54bWwiLz4KKworICAgIDx4aTppbmNsdWRlCiAgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9yZWYtbWFudWFsL3JlZi1xYS1jaGVja3MueG1sIi8+CiAKICAgICA8eGk6aW5jbHVkZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvbWVnYS1zdHlsZS5jc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9tZWdhLXN0eWxlLmNzcwppbmRleCBkZjcxYTIwLi5jZDcxZWI2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9tZWdhLXN0eWxlLmNzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9tZWdhLXN0eWxlLmNzcwpAQCAtNzMxLDYgKzczMSwxMSBAQAogfQogCiAKKy53cml0ZXJub3RlcyB7CisgIGNvbG9yOiByZWQ7Cit9CisKKwogICAvKioqKioqKioqKiogLwogIC8gIGdyYXBoaWNzICAvCiAvICoqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcG9reS5lbnQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wb2t5LmVudAppbmRleCAxNGQ2N2U1Li5kYjNlZWYwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wb2t5LmVudAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wb2t5LmVudApAQCAtMSwxMCArMSwxMyBAQAotPCFFTlRJVFkgRElTVFJPICIyLjMuNCI+Ci08IUVOVElUWSBESVNUUk9fQ09NUFJFU1NFRCAiMjM0Ij4KLTwhRU5USVRZIERJU1RST19OQU1FX05PX0NBUCAicHlybyI+Ci08IUVOVElUWSBESVNUUk9fTkFNRSAiUHlybyI+Ci08IUVOVElUWSBZT0NUT19ET0NfVkVSU0lPTiAiMi4zLjQiPgotPCFFTlRJVFkgUE9LWVZFUlNJT04gIjE4LjAuNCI+Ci08IUVOVElUWSBQT0tZVkVSU0lPTl9DT01QUkVTU0VEICIxODA0Ij4KKzwhRU5USVRZIERJU1RSTyAiMi40LjIiPgorPCFFTlRJVFkgRElTVFJPX0NPTVBSRVNTRUQgIjI0MiI+Cis8IUVOVElUWSBESVNUUk9fTkFNRV9OT19DQVAgInJvY2tvIj4KKzwhRU5USVRZIERJU1RST19OQU1FICJSb2NrbyI+Cis8IUVOVElUWSBZT0NUT19ET0NfVkVSU0lPTiAiMi40LjIiPgorPCFFTlRJVFkgRElTVFJPX1JFTF9UQUcgInlvY3RvLTIuNC4yIj4KKzwhRU5USVRZIE1FVEFJTlRFTFZFUlNJT04gIjguMCI+Cis8IUVOVElUWSBNRVRBX0lOVEVMX1JFTF9UQUcgIiZNRVRBSU5URUxWRVJTSU9OOy0mRElTVFJPX05BTUVfTk9fQ0FQOy0mWU9DVE9fRE9DX1ZFUlNJT047Ij4KKzwhRU5USVRZIFBPS1lWRVJTSU9OICIxOS4wLjIiPgorPCFFTlRJVFkgUE9LWVZFUlNJT05fQ09NUFJFU1NFRCAiMTkwMiI+CiA8IUVOVElUWSBZT0NUT19QT0tZICJwb2t5LSZESVNUUk9fTkFNRV9OT19DQVA7LSZQT0tZVkVSU0lPTjsiPgogPCFFTlRJVFkgQ09QWVJJR0hUX1lFQVIgIjIwMTAtMjAxOCI+CiA8IUVOVElUWSBZT0NUT19ETF9VUkwgImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZyI+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC54bWwKaW5kZXggYjY2OGZkNC4uZjc0MmU4OCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLnhtbApAQCAtMjIsMTEgKzIyLDExIEBACiAKICAgICAgICAgPGF1dGhvcmdyb3VwPgogICAgICAgICAgICAgPGF1dGhvcj4KLSAgICAgICAgICAgICAgICA8Zmlyc3RuYW1lPlRvbTwvZmlyc3RuYW1lPiA8c3VybmFtZT5aYW51c3NpPC9zdXJuYW1lPgorICAgICAgICAgICAgICAgIDxmaXJzdG5hbWU+U2NvdHQ8L2ZpcnN0bmFtZT4gPHN1cm5hbWU+UmlmZW5iYXJrPC9zdXJuYW1lPgogICAgICAgICAgICAgICAgIDxhZmZpbGlhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPG9yZ25hbWU+SW50ZWwgQ29ycG9yYXRpb248L29yZ25hbWU+CisgICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPlNjb3R0eSdzIERvY3VtZW50YXRpb24gU2VydmljZXMsIElOQzwvb3JnbmFtZT4KICAgICAgICAgICAgICAgICA8L2FmZmlsaWF0aW9uPgotICAgICAgICAgICAgICAgIDxlbWFpbD50b20uemFudXNzaUBpbnRlbC5jb208L2VtYWlsPgorICAgICAgICAgICAgICAgIDxlbWFpbD5zcmlmZW5iYXJrQGdtYWlsLmNvbTwvZW1haWw+CiAgICAgICAgICAgICA8L2F1dGhvcj4KICAgICAgICAgPC9hdXRob3Jncm91cD4KIApAQCAtODIsMjQgKzgyLDE5IEBACiAgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDIuMyBSZWxlYXNlLjwvcmV2cmVtYXJrPgogICAgICAgICAgICAgPC9yZXZpc2lvbj4KICAgICAgICAgICAgIDxyZXZpc2lvbj4KLSAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjIuMy4xPC9yZXZudW1iZXI+Ci0gICAgICAgICAgICAgICAgPGRhdGU+SnVuZSAyMDE3PC9kYXRlPgotICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjMuMSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi40PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDE3PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjQgUmVsZWFzZS48L3JldnJlbWFyaz4KICAgICAgICAgICAgIDwvcmV2aXNpb24+CiAgICAgICAgICAgICA8cmV2aXNpb24+Ci0gICAgICAgICAgICAgICAgPHJldm51bWJlcj4yLjMuMjwvcmV2bnVtYmVyPgotICAgICAgICAgICAgICAgIDxkYXRlPlNlcHRlbWJlciAyMDE3PC9kYXRlPgotICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjMuMiBSZWxlYXNlLjwvcmV2cmVtYXJrPgotICAgICAgICAgICAgPC9yZXZpc2lvbj4KLSAgICAgICAgICAgIDxyZXZpc2lvbj4KLSAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjIuMy4zPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4yLjQuMTwvcmV2bnVtYmVyPgogICAgICAgICAgICAgICAgIDxkYXRlPkphbnVhcnkgMjAxODwvZGF0ZT4KLSAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi4zLjMgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi40LjEgUmVsZWFzZS48L3JldnJlbWFyaz4KICAgICAgICAgICAgIDwvcmV2aXNpb24+CiAgICAgICAgICAgICA8cmV2aXNpb24+Ci0gICAgICAgICAgICAgICAgPHJldm51bWJlcj4yLjMuNDwvcmV2bnVtYmVyPgotICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTg8L2RhdGU+Ci0gICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDIuMy40IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4yLjQuMjwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk1hcmNoIDIwMTg8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDIuNC4yIFJlbGVhc2UuPC9yZXZyZW1hcms+CiAgICAgICAgICAgICA8L3JldmlzaW9uPgogICAgICAgICA8L3Jldmhpc3Rvcnk+CiAKQEAgLTExNSwzNCArMTEwLDM0IEBACiAgICAgICAgICAgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZSBBbGlrZSAyLjAgVUs6IEVuZ2xhbmQgJmFtcDsgV2FsZXM8L3VsaW5rPiBhcyBwdWJsaXNoZWQgYnkKICAgICAgICAgICBDcmVhdGl2ZSBDb21tb25zLgogICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8bm90ZT48dGl0bGU+TWFudWFsIE5vdGVzPC90aXRsZT4KLSAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBGb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IFByb2ZpbGluZwotICAgICAgICAgICAgICAgICAgICAgICAgYW5kIFRyYWNpbmcgTWFudWFsIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFlvY3RvIFByb2plY3QKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2UgKHZlcnNpb24gJllPQ1RPX0RPQ19WRVJTSU9OOyksCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlIFlvY3RvIFByb2plY3QgUHJvZmlsaW5nIGFuZCBUcmFjaW5nIE1hbnVhbAotICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvZG9jdW1lbnRhdGlvbic+WW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uIHBhZ2U8L3VsaW5rPi4KKyAgICAgICAgICAgPG5vdGU+PHRpdGxlPk1hbnVhbCBOb3RlczwvdGl0bGU+CisgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2ZXJzaW9uIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+WW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgaXMgZm9yIHRoZSAmWU9DVE9fRE9DX1ZFUlNJT047IHJlbGVhc2Ugb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgIFRvIGJlIHN1cmUgeW91IGhhdmUgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBtYW51YWwKKyAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgcmVsZWFzZSwgdXNlIHRoZSBtYW51YWwgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy9kb2N1bWVudGF0aW9uJz5Zb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24gcGFnZTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgIEZvciBtYW51YWxzIGFzc29jaWF0ZWQgd2l0aCBvdGhlciByZWxlYXNlcyBvZiB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdCwgZ28gdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvZG9jdW1lbnRhdGlvbic+WW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uIHBhZ2U8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICBhbmQgdXNlIHRoZSBkcm9wLWRvd24gIkFjdGl2ZSBSZWxlYXNlcyIgYnV0dG9uCisgICAgICAgICAgICAgICAgICAgICAgIGFuZCBjaG9vc2UgdGhlIG1hbnVhbCBhc3NvY2lhdGVkIHdpdGggdGhlIGRlc2lyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gcmVwb3J0IGFueSBpbmFjY3VyYWNpZXMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICBtYW51YWwsIHNlbmQgYW4gZW1haWwgdG8gdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc2N1c3Npb24gZ3JvdXAgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0b0B5b2N0b3Byb2plY3QuY29tPC9maWxlbmFtZT4gb3IgbG9nIGludG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmcmVlbm9kZSA8ZmlsZW5hbWU+I3lvY3RvPC9maWxlbmFtZT4gY2hhbm5lbC4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZlcnNpb24gb2YgdGhlIG1hbnVhbCBpcyB2ZXJzaW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAmWU9DVE9fRE9DX1ZFUlNJT047LgotICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGxhdGVyIHJlbGVhc2VzIG9mIHRoZSBZb2N0byBQcm9qZWN0IChpZiB0aGV5IGV4aXN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvIHRvIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy9kb2N1bWVudGF0aW9uJz5Zb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24gcGFnZTwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbmQgdXNlIHRoZSBkcm9wLWRvd24gIkFjdGl2ZSBSZWxlYXNlcyIgYnV0dG9uCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmQgY2hvb3NlIHRoZSBZb2N0byBQcm9qZWN0IHZlcnNpb24gZm9yIHdoaWNoIHlvdSB3YW50Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFudWFsLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhbiBpbi1kZXZlbG9wbWVudCB2ZXJzaW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsLCBzZWUKLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1VSTDsvbGF0ZXN0L3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLmh0bWwnPjwvdWxpbms+LgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgPC9ub3RlPgogICAgIDwvbGVnYWxub3RpY2U+CiAKICAgICA8L2Jvb2tpbmZvPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9jbG9zZXItbG9vay54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2Nsb3Nlci1sb29rLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIzZWQyMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2Nsb3Nlci1sb29rLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2MzAgKzAsMCBAQAotPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgotImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKLVs8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KLQotPGNoYXB0ZXIgaWQ9J2Nsb3Nlci1sb29rJz4KLTx0aXRsZT5BIENsb3NlciBMb29rIGF0IHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50PC90aXRsZT4KLQotICAgIDxwYXJhPgotICAgICAgICBUaGlzIGNoYXB0ZXIgdGFrZXMgYSBtb3JlIGRldGFpbGVkIGxvb2sgYXQgdGhlIFlvY3RvIFByb2plY3QKLSAgICAgICAgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCi0gICAgICAgIFRoZSBmb2xsb3dpbmcgZGlhZ3JhbSByZXByZXNlbnRzIHRoZSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBhdCBhCi0gICAgICAgIGhpZ2ggbGV2ZWwuCi0gICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBjaGFwdGVyIGV4cGFuZHMgb24gdGhlIGZ1bmRhbWVudGFsIGlucHV0LCBvdXRwdXQsCi0gICAgICAgIHByb2Nlc3MsIGFuZAotICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPikgYmxvY2tzCi0gICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50IGVudmlyb25tZW50LgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhIGlkPSdnZW5lcmFsLXlvY3RvLWVudmlyb25tZW50LWZpZ3VyZSc+Ci0gICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC1yZWYucG5nIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iOGluIiBkZXB0aD0iNC4yNWluIiAvPgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgICBUaGUgZ2VuZXJhbGl6ZWQgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCBjb25zaXN0cyBvZgotICAgICAgICBzZXZlcmFsIGZ1bmN0aW9uYWwgYXJlYXM6Ci0gICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVzZXIgQ29uZmlndXJhdGlvbjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIE1ldGFkYXRhIHlvdSBjYW4gdXNlIHRvIGNvbnRyb2wgdGhlIGJ1aWxkIHByb2Nlc3MuCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1ldGFkYXRhIExheWVyczo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIFZhcmlvdXMgbGF5ZXJzIHRoYXQgcHJvdmlkZSBzb2Z0d2FyZSwgbWFjaGluZSwgYW5kCi0gICAgICAgICAgICAgICAgZGlzdHJvIE1ldGFkYXRhLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Tb3VyY2UgRmlsZXM6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBVcHN0cmVhbSByZWxlYXNlcywgbG9jYWwgcHJvamVjdHMsIGFuZCBTQ01zLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCBTeXN0ZW06PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBQcm9jZXNzZXMgdW5kZXIgdGhlIGNvbnRyb2wgb2YKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNiaXRiYWtlLXRlcm0nPkJpdEJha2U8L3VsaW5rPi4KLSAgICAgICAgICAgICAgICBUaGlzIGJsb2NrIGV4cGFuZHMgb24gaG93IEJpdEJha2UgZmV0Y2hlcyBzb3VyY2UsIGFwcGxpZXMKLSAgICAgICAgICAgICAgICBwYXRjaGVzLCBjb21wbGV0ZXMgY29tcGlsYXRpb24sIGFuYWx5emVzIG91dHB1dCBmb3IgcGFja2FnZQotICAgICAgICAgICAgICAgIGdlbmVyYXRpb24sIGNyZWF0ZXMgYW5kIHRlc3RzIHBhY2thZ2VzLCBnZW5lcmF0ZXMgaW1hZ2VzLCBhbmQKLSAgICAgICAgICAgICAgICBnZW5lcmF0ZXMgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbHMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBhY2thZ2UgRmVlZHM6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBEaXJlY3RvcmllcyBjb250YWluaW5nIG91dHB1dCBwYWNrYWdlcyAoUlBNLCBERUIgb3IgSVBLKSwKLSAgICAgICAgICAgICAgICB3aGljaCBhcmUgc3Vic2VxdWVudGx5IHVzZWQgaW4gdGhlIGNvbnN0cnVjdGlvbiBvZiBhbiBpbWFnZSBvcgotICAgICAgICAgICAgICAgIFNESywgcHJvZHVjZWQgYnkgdGhlIGJ1aWxkIHN5c3RlbS4KLSAgICAgICAgICAgICAgICBUaGVzZSBmZWVkcyBjYW4gYWxzbyBiZSBjb3BpZWQgYW5kIHNoYXJlZCB1c2luZyBhIHdlYiBzZXJ2ZXIgb3IKLSAgICAgICAgICAgICAgICBvdGhlciBtZWFucyB0byBmYWNpbGl0YXRlIGV4dGVuZGluZyBvciB1cGRhdGluZyBleGlzdGluZwotICAgICAgICAgICAgICAgIGltYWdlcyBvbiBkZXZpY2VzIGF0IHJ1bnRpbWUgaWYgcnVudGltZSBwYWNrYWdlIG1hbmFnZW1lbnQgaXMKLSAgICAgICAgICAgICAgICBlbmFibGVkLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbWFnZXM6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBJbWFnZXMgcHJvZHVjZWQgYnkgdGhlIGRldmVsb3BtZW50IHByb2Nlc3MuCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFwcGxpY2F0aW9uIERldmVsb3BtZW50IFNESzo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIENyb3NzLWRldmVsb3BtZW50IHRvb2xzIHRoYXQgYXJlIHByb2R1Y2VkIGFsb25nIHdpdGggYW4gaW1hZ2UKLSAgICAgICAgICAgICAgICBvciBzZXBhcmF0ZWx5IHdpdGggQml0QmFrZS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPC9wYXJhPgotCi0gICAgPHNlY3Rpb24gaWQ9InVzZXItY29uZmlndXJhdGlvbiI+Ci0gICAgICAgIDx0aXRsZT5Vc2VyIENvbmZpZ3VyYXRpb248L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVXNlciBjb25maWd1cmF0aW9uIGhlbHBzIGRlZmluZSB0aGUgYnVpbGQuCi0gICAgICAgICAgICBUaHJvdWdoIHVzZXIgY29uZmlndXJhdGlvbiwgeW91IGNhbiB0ZWxsIEJpdEJha2UgdGhlCi0gICAgICAgICAgICB0YXJnZXQgYXJjaGl0ZWN0dXJlIGZvciB3aGljaCB5b3UgYXJlIGJ1aWxkaW5nIHRoZSBpbWFnZSwKLSAgICAgICAgICAgIHdoZXJlIHRvIHN0b3JlIGRvd25sb2FkZWQgc291cmNlLCBhbmQgb3RoZXIgYnVpbGQgcHJvcGVydGllcy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBmaWd1cmUgc2hvd3MgYW4gZXhwYW5kZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlCi0gICAgICAgICAgICAiVXNlciBDb25maWd1cmF0aW9uIiBib3ggb2YgdGhlCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSdnZW5lcmFsLXlvY3RvLWVudmlyb25tZW50LWZpZ3VyZSc+Z2VuZXJhbCBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50IGZpZ3VyZTwvbGluaz46Ci0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy91c2VyLWNvbmZpZ3VyYXRpb24ucG5nIiBhbGlnbj0iY2VudGVyIiAvPgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBCaXRCYWtlIG5lZWRzIHNvbWUgYmFzaWMgY29uZmlndXJhdGlvbiBmaWxlcyBpbiBvcmRlciB0byBjb21wbGV0ZQotICAgICAgICAgICAgYSBidWlsZC4KLSAgICAgICAgICAgIFRoZXNlIGZpbGVzIGFyZSA8ZmlsZW5hbWU+Ki5jb25mPC9maWxlbmFtZT4gZmlsZXMuCi0gICAgICAgICAgICBUaGUgbWluaW1hbGx5IG5lY2Vzc2FyeSBvbmVzIHJlc2lkZSBhcyBleGFtcGxlIGZpbGVzIGluIHRoZQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgotICAgICAgICAgICAgRm9yIHNpbXBsaWNpdHksIHRoaXMgc2VjdGlvbiByZWZlcnMgdG8gdGhlIFNvdXJjZSBEaXJlY3RvcnkgYXMKLSAgICAgICAgICAgIHRoZSAiUG9reSBEaXJlY3RvcnkuIgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBXaGVuIHlvdSBjbG9uZSB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSBvciB5b3UKLSAgICAgICAgICAgIGRvd25sb2FkIGFuZCB1bnBhY2sgYSBZb2N0byBQcm9qZWN0IHJlbGVhc2UsIHlvdSBjYW4gc2V0IHVwIHRoZQotICAgICAgICAgICAgU291cmNlIERpcmVjdG9yeSB0byBiZSBuYW1lZCBhbnl0aGluZyB5b3Ugd2FudC4KLSAgICAgICAgICAgIEZvciB0aGlzIGRpc2N1c3Npb24sIHRoZSBjbG9uZWQgcmVwb3NpdG9yeSB1c2VzIHRoZSBkZWZhdWx0Ci0gICAgICAgICAgICBuYW1lIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4uCi0gICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICBUaGUgUG9reSByZXBvc2l0b3J5IGlzIHByaW1hcmlseSBhbiBhZ2dyZWdhdGlvbiBvZiBleGlzdGluZwotICAgICAgICAgICAgICAgIHJlcG9zaXRvcmllcy4KLSAgICAgICAgICAgICAgICBJdCBpcyBub3QgYSBjYW5vbmljYWwgdXBzdHJlYW0gc291cmNlLgotICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1ldGEtcG9reTwvZmlsZW5hbWU+IGxheWVyIGluc2lkZSBQb2t5IGNvbnRhaW5zCi0gICAgICAgICAgICBhIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5IHRoYXQgaGFzIGV4YW1wbGUKLSAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMuCi0gICAgICAgICAgICBUaGVzZSBleGFtcGxlIGZpbGVzIGFyZSB1c2VkIGFzIGEgYmFzaXMgZm9yIGNyZWF0aW5nIGFjdHVhbAotICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcyB3aGVuIHlvdSBzb3VyY2UgdGhlIGJ1aWxkIGVudmlyb25tZW50Ci0gICAgICAgICAgICBzY3JpcHQKLSAgICAgICAgICAgIChpLmUuCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgb3IKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4pLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBTb3VyY2luZyB0aGUgYnVpbGQgZW52aXJvbm1lbnQgc2NyaXB0IGNyZWF0ZXMgYQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgotICAgICAgICAgICAgaWYgb25lIGRvZXMgbm90IGFscmVhZHkgZXhpc3QuCi0gICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlIEJ1aWxkIERpcmVjdG9yeSBmb3IgYWxsIGl0cyB3b3JrIGR1cmluZyBidWlsZHMuCi0gICAgICAgICAgICBUaGUgQnVpbGQgRGlyZWN0b3J5IGhhcyBhIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5IHRoYXQKLSAgICAgICAgICAgIGNvbnRhaW5zIGRlZmF1bHQgdmVyc2lvbnMgb2YgeW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGVzLgotICAgICAgICAgICAgVGhlc2UgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSBjcmVhdGVkIG9ubHkgaWYgdmVyc2lvbnMKLSAgICAgICAgICAgIGRvIG5vdCBhbHJlYWR5IGV4aXN0IGluIHRoZSBCdWlsZCBEaXJlY3RvcnkgYXQgdGhlIHRpbWUgeW91Ci0gICAgICAgICAgICBzb3VyY2UgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdC4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQmVjYXVzZSB0aGUgUG9reSByZXBvc2l0b3J5IGlzIGZ1bmRhbWVudGFsbHkgYW4gYWdncmVnYXRpb24gb2YKLSAgICAgICAgICAgIGV4aXN0aW5nIHJlcG9zaXRvcmllcywgc29tZSB1c2VycyBtaWdodCBiZSBmYW1pbGlhciB3aXRoIHJ1bm5pbmcKLSAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPiBvcgotICAgICAgICAgICAgPGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+IHNjcmlwdCBpbiB0aGUgY29udGV4dAotICAgICAgICAgICAgb2Ygc2VwYXJhdGUgT3BlbkVtYmVkZGVkLUNvcmUgYW5kIEJpdEJha2UgcmVwb3NpdG9yaWVzIHJhdGhlciB0aGFuIGEKLSAgICAgICAgICAgIHNpbmdsZSBQb2t5IHJlcG9zaXRvcnkuCi0gICAgICAgICAgICBUaGlzIGRpc2N1c3Npb24gYXNzdW1lcyB0aGUgc2NyaXB0IGlzIGV4ZWN1dGVkIGZyb20gd2l0aGluIGEgY2xvbmVkCi0gICAgICAgICAgICBvciB1bnBhY2tlZCB2ZXJzaW9uIG9mIFBva3kuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIERlcGVuZGluZyBvbiB3aGVyZSB0aGUgc2NyaXB0IGlzIHNvdXJjZWQsIGRpZmZlcmVudCBzdWItc2NyaXB0cwotICAgICAgICAgICAgYXJlIGNhbGxlZCB0byBzZXQgdXAgdGhlIEJ1aWxkIERpcmVjdG9yeSAoWW9jdG8gb3IgT3BlbkVtYmVkZGVkKS4KLSAgICAgICAgICAgIFNwZWNpZmljYWxseSwgdGhlIHNjcmlwdAotICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHMvb2Utc2V0dXAtYnVpbGRkaXI8L2ZpbGVuYW1lPiBpbnNpZGUgdGhlCi0gICAgICAgICAgICBwb2t5IGRpcmVjdG9yeSBzZXRzIHVwIHRoZSBCdWlsZCBEaXJlY3RvcnkgYW5kIHNlZWRzIHRoZSBkaXJlY3RvcnkKLSAgICAgICAgICAgIChpZiBuZWNlc3NhcnkpIHdpdGggY29uZmlndXJhdGlvbiBmaWxlcyBhcHByb3ByaWF0ZSBmb3IgdGhlCi0gICAgICAgICAgICBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50IGVudmlyb25tZW50LgotICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5zY3JpcHRzL29lLXNldHVwLWJ1aWxkZGlyPC9maWxlbmFtZT4gc2NyaXB0Ci0gICAgICAgICAgICAgICAgdXNlcyB0aGUgPGZpbGVuYW1lPiRURU1QTEFURUNPTkY8L2ZpbGVuYW1lPiB2YXJpYWJsZSB0bwotICAgICAgICAgICAgICAgIGRldGVybWluZSB3aGljaCBzYW1wbGUgY29uZmlndXJhdGlvbiBmaWxlcyB0byBsb2NhdGUuCi0gICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgcHJvdmlkZXMgbWFueQotICAgICAgICAgICAgYmFzaWMgdmFyaWFibGVzIHRoYXQgZGVmaW5lIGEgYnVpbGQgZW52aXJvbm1lbnQuCi0gICAgICAgICAgICBIZXJlIGlzIGEgbGlzdCBvZiBhIGZldy4KLSAgICAgICAgICAgIFRvIHNlZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9ucyBpbiBhIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KLSAgICAgICAgICAgIGZpbGUgY3JlYXRlZCBieSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgc2NyaXB0LCBzZWUgdGhlCi0gICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiBpbiB0aGUKLSAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXBva3k8L2ZpbGVuYW1lPiBsYXllcjoKLSAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QYXJhbGxlbGlzbSBPcHRpb25zOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZWQgYnkgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9OVU1CRVJfVEhSRUFEUyc+PGZpbGVuYW1lPkJCX05VTUJFUl9USFJFQURTPC9maWxlbmFtZT48L2xpbms+LAotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFSQUxMRUxfTUFLRSc+PGZpbGVuYW1lPlBBUkFMTEVMX01BS0U8L2ZpbGVuYW1lPjwvbGluaz4sCi0gICAgICAgICAgICAgICAgICAgIGFuZAotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I3Zhci1CQl9OVU1CRVJfUEFSU0VfVEhSRUFEUyc+PGZpbGVuYW1lPkJCX05VTUJFUl9QQVJTRV9USFJFQURTPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5UYXJnZXQgTWFjaGluZSBTZWxlY3Rpb246PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlZCBieSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RG93bmxvYWQgRGlyZWN0b3J5OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZWQgYnkgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ETF9ESVInPjxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TaGFyZWQgU3RhdGUgRGlyZWN0b3J5OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZWQgYnkgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TU1RBVEVfRElSJz48ZmlsZW5hbWU+U1NUQVRFX0RJUjwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIE91dHB1dDo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVkIGJ5IHRoZQotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9ucyBzZXQgaW4gdGhlIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgIGZpbGUgY2FuIGFsc28gYmUgc2V0IGluIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL3NpdGUuY29uZjwvZmlsZW5hbWU+IGFuZAotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2F1dG8uY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZXMuCi0gICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUgdGVsbHMgQml0QmFrZSB3aGF0Ci0gICAgICAgICAgICBsYXllcnMgeW91IHdhbnQgY29uc2lkZXJlZCBkdXJpbmcgdGhlIGJ1aWxkLgotICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIGxheWVycyBsaXN0ZWQgaW4gdGhpcyBmaWxlIGluY2x1ZGUgbGF5ZXJzCi0gICAgICAgICAgICBtaW5pbWFsbHkgbmVlZGVkIGJ5IHRoZSBidWlsZCBzeXN0ZW0uCi0gICAgICAgICAgICBIb3dldmVyLCB5b3UgbXVzdCBtYW51YWxseSBhZGQgYW55IGN1c3RvbSBsYXllcnMgeW91IGhhdmUgY3JlYXRlZC4KLSAgICAgICAgICAgIFlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIHdvcmtpbmcgd2l0aCB0aGUKLSAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUKLSAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNlbmFibGluZy15b3VyLWxheWVyJz5FbmFibGluZyBZb3VyIExheWVyPC91bGluaz4iCi0gICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIGZpbGVzIDxmaWxlbmFtZT5zaXRlLmNvbmY8L2ZpbGVuYW1lPiBhbmQKLSAgICAgICAgICAgIDxmaWxlbmFtZT5hdXRvLmNvbmY8L2ZpbGVuYW1lPiBhcmUgbm90IGNyZWF0ZWQgYnkgdGhlIGVudmlyb25tZW50Ci0gICAgICAgICAgICBpbml0aWFsaXphdGlvbiBzY3JpcHQuCi0gICAgICAgICAgICBJZiB5b3Ugd2FudCB0aGUgPGZpbGVuYW1lPnNpdGUuY29uZjwvZmlsZW5hbWU+IGZpbGUsIHlvdSBuZWVkIHRvCi0gICAgICAgICAgICBjcmVhdGUgdGhhdCB5b3Vyc2VsZi4KLSAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YXV0by5jb25mPC9maWxlbmFtZT4gZmlsZSBpcyB0eXBpY2FsbHkgY3JlYXRlZCBieQotICAgICAgICAgICAgYW4gYXV0b2J1aWxkZXI6Ci0gICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnNpdGUuY29uZjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+Y29uZi9zaXRlLmNvbmY8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgdG8gY29uZmlndXJlIG11bHRpcGxlIGJ1aWxkIGRpcmVjdG9yaWVzLgotICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGFkIHNldmVyYWwgYnVpbGQgZW52aXJvbm1lbnRzIGFuZAotICAgICAgICAgICAgICAgICAgICB0aGV5IHNoYXJlZCBzb21lIGNvbW1vbiBmZWF0dXJlcy4KLSAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgdGhlc2UgZGVmYXVsdCBidWlsZCBwcm9wZXJ0aWVzIGhlcmUuCi0gICAgICAgICAgICAgICAgICAgIEEgZ29vZCBleGFtcGxlIGlzIHBlcmhhcHMgdGhlIHBhY2thZ2luZyBmb3JtYXQgdG8gdXNlCi0gICAgICAgICAgICAgICAgICAgIHRocm91Z2ggdGhlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPgotICAgICAgICAgICAgICAgICAgICA8cGFyYT5PbmUgdXNlZnVsIHNjZW5hcmlvIGZvciB1c2luZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvc2l0ZS5jb25mPC9maWxlbmFtZT4gZmlsZSBpcyB0byBleHRlbmQgeW91cgotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGluY2x1ZGUgdGhlIHBhdGggdG8gYQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9zaXRlLmNvbmY8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgVGhlbiwgd2hlbiBCaXRCYWtlIGxvb2tzIGZvciBNZXRhZGF0YSB1c2luZwotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4sIGl0IGZpbmRzIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9zaXRlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGFuZCBhcHBsaWVzIHlvdXIKLSAgICAgICAgICAgICAgICAgICAgY29tbW9uIGNvbmZpZ3VyYXRpb25zIGZvdW5kIGluIHRoZSBmaWxlLgotICAgICAgICAgICAgICAgICAgICBUbyBvdmVycmlkZSBjb25maWd1cmF0aW9ucyBpbiBhIHBhcnRpY3VsYXIgYnVpbGQgZGlyZWN0b3J5LAotICAgICAgICAgICAgICAgICAgICBhbHRlciB0aGUgc2ltaWxhciBjb25maWd1cmF0aW9ucyB3aXRoaW4gdGhhdCBidWlsZAotICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkncyA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+YXV0by5jb25mPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGZpbGUgaXMgdXN1YWxseSBjcmVhdGVkIGFuZCB3cml0dGVuIHRvIGJ5Ci0gICAgICAgICAgICAgICAgICAgIGFuIGF1dG9idWlsZGVyLgotICAgICAgICAgICAgICAgICAgICBUaGUgc2V0dGluZ3MgcHV0IGludG8gdGhlIGZpbGUgYXJlIHR5cGljYWxseSB0aGUgc2FtZSBhcwotICAgICAgICAgICAgICAgICAgICB5b3Ugd291bGQgZmluZCBpbiB0aGUgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIG9yIHRoZSA8ZmlsZW5hbWU+Y29uZi9zaXRlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlcy4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgWW91IGNhbiBlZGl0IGFsbCBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGZ1cnRoZXIgZGVmaW5lCi0gICAgICAgICAgICBhbnkgcGFydGljdWxhciBidWlsZCBlbnZpcm9ubWVudC4KLSAgICAgICAgICAgIFRoaXMgcHJvY2VzcyBpcyByZXByZXNlbnRlZCBieSB0aGUgIlVzZXIgQ29uZmlndXJhdGlvbiBFZGl0cyIKLSAgICAgICAgICAgIGJveCBpbiB0aGUgZmlndXJlLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBXaGVuIHlvdSBsYXVuY2ggeW91ciBidWlsZCB3aXRoIHRoZQotICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UgPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4KLSAgICAgICAgICAgIGNvbW1hbmQsIEJpdEJha2Ugc29ydHMgb3V0IHRoZSBjb25maWd1cmF0aW9ucyB0byB1bHRpbWF0ZWx5Ci0gICAgICAgICAgICBkZWZpbmUgeW91ciBidWlsZCBlbnZpcm9ubWVudC4KLSAgICAgICAgICAgIEl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KLSAgICAgICAgICAgIHJlYWRzIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGluIGEgc3BlY2lmaWMgb3JkZXI6Ci0gICAgICAgICAgICA8ZmlsZW5hbWU+c2l0ZS5jb25mPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5hdXRvLmNvbmY8L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+LgotICAgICAgICAgICAgQW5kLCB0aGUgYnVpbGQgc3lzdGVtIGFwcGxpZXMgdGhlIG5vcm1hbCBhc3NpZ25tZW50IHN0YXRlbWVudAotICAgICAgICAgICAgcnVsZXMuCi0gICAgICAgICAgICBCZWNhdXNlIHRoZSBmaWxlcyBhcmUgcGFyc2VkIGluIGEgc3BlY2lmaWMgb3JkZXIsIHZhcmlhYmxlCi0gICAgICAgICAgICBhc3NpZ25tZW50cyBmb3IgdGhlIHNhbWUgdmFyaWFibGUgY291bGQgYmUgYWZmZWN0ZWQuCi0gICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIDxmaWxlbmFtZT5hdXRvLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGFuZAotICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gc2V0Ci0gICAgICAgICAgICA8cmVwbGFjZWFibGU+dmFyaWFibGUxPC9yZXBsYWNlYWJsZT4gdG8gZGlmZmVyZW50IHZhbHVlcywgYmVjYXVzZQotICAgICAgICAgICAgdGhlIGJ1aWxkIHN5c3RlbSBwYXJzZXMgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBhZnRlcgotICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG8uY29uZjwvZmlsZW5hbWU+LAotICAgICAgICAgICAgPHJlcGxhY2VhYmxlPnZhcmlhYmxlMTwvcmVwbGFjZWFibGU+IGlzIGFzc2lnbmVkIHRoZSB2YWx1ZSBmcm9tCi0gICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgotICAgICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9Im1ldGFkYXRhLW1hY2hpbmUtY29uZmlndXJhdGlvbi1hbmQtcG9saWN5LWNvbmZpZ3VyYXRpb24iPgotICAgICAgICA8dGl0bGU+TWV0YWRhdGEsIE1hY2hpbmUgQ29uZmlndXJhdGlvbiwgYW5kIFBvbGljeSBDb25maWd1cmF0aW9uPC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSBwcmV2aW91cyBzZWN0aW9uIGRlc2NyaWJlZCB0aGUgdXNlciBjb25maWd1cmF0aW9ucyB0aGF0Ci0gICAgICAgICAgICBkZWZpbmUgQml0QmFrZSdzIGdsb2JhbCBiZWhhdmlvci4KLSAgICAgICAgICAgIFRoaXMgc2VjdGlvbiB0YWtlcyBhIGNsb3NlciBsb29rIGF0IHRoZSBsYXllcnMgdGhlIGJ1aWxkIHN5c3RlbQotICAgICAgICAgICAgdXNlcyB0byBmdXJ0aGVyIGNvbnRyb2wgdGhlIGJ1aWxkLgotICAgICAgICAgICAgVGhlc2UgbGF5ZXJzIHByb3ZpZGUgTWV0YWRhdGEgZm9yIHRoZSBzb2Z0d2FyZSwgbWFjaGluZSwgYW5kCi0gICAgICAgICAgICBwb2xpY3kuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEluIGdlbmVyYWwsIHRocmVlIHR5cGVzIG9mIGxheWVyIGlucHV0IGV4aXN0OgotICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBvbGljeSBDb25maWd1cmF0aW9uOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIERpc3RyaWJ1dGlvbiBMYXllcnMgcHJvdmlkZSB0b3AtbGV2ZWwgb3IgZ2VuZXJhbAotICAgICAgICAgICAgICAgICAgICBwb2xpY2llcyBmb3IgdGhlIGltYWdlIG9yIFNESyBiZWluZyBidWlsdC4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgbGF5ZXIgd291bGQgZGljdGF0ZSB3aGV0aGVyIEJpdEJha2UKLSAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXMgUlBNIG9yIElQSyBwYWNrYWdlcy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1hY2hpbmUgQ29uZmlndXJhdGlvbjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgbGF5ZXJzIHByb3ZpZGUgbWFjaGluZQotICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucy4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyB0eXBlIG9mIGluZm9ybWF0aW9uIGlzIHNwZWNpZmljIHRvIGEgcGFydGljdWxhcgotICAgICAgICAgICAgICAgICAgICB0YXJnZXQgYXJjaGl0ZWN0dXJlLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWV0YWRhdGE6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgbGF5ZXJzIGNvbnRhaW4gdXNlci1zdXBwbGllZCByZWNpcGUgZmlsZXMsCi0gICAgICAgICAgICAgICAgICAgIHBhdGNoZXMsIGFuZCBhcHBlbmQgZmlsZXMuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3dzIGFuIGV4cGFuZGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZQotICAgICAgICAgICAgTWV0YWRhdGEsIE1hY2hpbmUgQ29uZmlndXJhdGlvbiwgYW5kIFBvbGljeSBDb25maWd1cmF0aW9uIGlucHV0Ci0gICAgICAgICAgICAobGF5ZXJzKSBib3hlcyBvZiB0aGUKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz5nZW5lcmFsIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZmlndXJlPC9saW5rPjoKLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2xheWVyLWlucHV0LnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjhpbiIgZGVwdGg9IjcuNWluIiAvPgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBJbiBnZW5lcmFsLCBhbGwgbGF5ZXJzIGhhdmUgYSBzaW1pbGFyIHN0cnVjdHVyZS4KLSAgICAgICAgICAgIFRoZXkgYWxsIGNvbnRhaW4gYSBsaWNlbnNpbmcgZmlsZQotICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPkNPUFlJTkc8L2ZpbGVuYW1lPikgaWYgdGhlIGxheWVyIGlzIHRvIGJlCi0gICAgICAgICAgICBkaXN0cmlidXRlZCwgYSA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZSBhcyBnb29kIHByYWN0aWNlCi0gICAgICAgICAgICBhbmQgZXNwZWNpYWxseSBpZiB0aGUgbGF5ZXIgaXMgdG8gYmUgZGlzdHJpYnV0ZWQsIGEKLSAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5LCBhbmQgcmVjaXBlIGRpcmVjdG9yaWVzLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBoYXMgbWFueSBsYXllcnMgdGhhdCBjYW4gYmUgdXNlZC4KLSAgICAgICAgICAgIFlvdSBjYW4gc2VlIGEgd2ViLWludGVyZmFjZSBsaXN0aW5nIG9mIHRoZW0gb24gdGhlCi0gICAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvIj5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4KLSAgICAgICAgICAgIHBhZ2UuCi0gICAgICAgICAgICBUaGUgbGF5ZXJzIGFyZSBzaG93biBhdCB0aGUgYm90dG9tIGNhdGVnb3JpemVkIHVuZGVyCi0gICAgICAgICAgICAiWW9jdG8gTWV0YWRhdGEgTGF5ZXJzLiIKLSAgICAgICAgICAgIFRoZXNlIGxheWVycyBhcmUgZnVuZGFtZW50YWxseSBhIHN1YnNldCBvZiB0aGUKLSAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy9sYXllcmluZGV4L2xheWVycy8iPk9wZW5FbWJlZGRlZCBNZXRhZGF0YSBJbmRleDwvdWxpbms+LAotICAgICAgICAgICAgd2hpY2ggbGlzdHMgYWxsIGxheWVycyBwcm92aWRlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGNvbW11bml0eS4KLSAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgIExheWVycyBleGlzdCBpbiB0aGUgWW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzIHRoYXQKLSAgICAgICAgICAgICAgICBjYW5ub3QgYmUgZm91bmQgaW4gdGhlIE9wZW5FbWJlZGRlZCBNZXRhZGF0YSBJbmRleC4KLSAgICAgICAgICAgICAgICBUaGVzZSBsYXllcnMgYXJlIGVpdGhlciBkZXByZWNhdGVkIG9yIGV4cGVyaW1lbnRhbCBpbiBuYXR1cmUuCi0gICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUgPGZpbGVuYW1lPmNvbmYvYmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUsCi0gICAgICAgICAgICB3aGljaCBpcyBwYXJ0IG9mIHRoZSB1c2VyIGNvbmZpZ3VyYXRpb24sIHRvIGZpbmQgd2hhdCBsYXllcnMgaXQKLSAgICAgICAgICAgIHNob3VsZCBiZSB1c2luZyBhcyBwYXJ0IG9mIHRoZSBidWlsZC4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gbGF5ZXJzLCBzZWUgdGhlCi0gICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5VbmRlcnN0YW5kaW5nIGFuZCBDcmVhdGluZyBMYXllcnM8L3VsaW5rPiIKLSAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9ImRpc3Ryby1sYXllciI+Ci0gICAgICAgICAgICA8dGl0bGU+RGlzdHJvIExheWVyPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIGRpc3RyaWJ1dGlvbiBsYXllciBwcm92aWRlcyBwb2xpY3kgY29uZmlndXJhdGlvbnMgZm9yIHlvdXIKLSAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24uCi0gICAgICAgICAgICAgICAgQmVzdCBwcmFjdGljZXMgZGljdGF0ZSB0aGF0IHlvdSBpc29sYXRlIHRoZXNlIHR5cGVzIG9mCi0gICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMgaW50byB0aGVpciBvd24gbGF5ZXIuCi0gICAgICAgICAgICAgICAgU2V0dGluZ3MgeW91IHByb3ZpZGUgaW4KLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9kaXN0cm8vPHJlcGxhY2VhYmxlPmRpc3RybzwvcmVwbGFjZWFibGU+LmNvbmY8L2ZpbGVuYW1lPiBvdmVycmlkZQotICAgICAgICAgICAgICAgIHNpbWlsYXIKLSAgICAgICAgICAgICAgICBzZXR0aW5ncyB0aGF0IEJpdEJha2UgZmluZHMgaW4geW91cgotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZSBCdWlsZAotICAgICAgICAgICAgICAgIERpcmVjdG9yeS4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHByb3ZpZGVzIHNvbWUgZXhwbGFuYXRpb24gYW5kIHJlZmVyZW5jZXMKLSAgICAgICAgICAgICAgICBmb3Igd2hhdCB5b3UgdHlwaWNhbGx5IGZpbmQgaW4gdGhlIGRpc3RyaWJ1dGlvbiBsYXllcjoKLSAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmNsYXNzZXM6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzIGZpbGVzICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikgaG9sZAotICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uIGZ1bmN0aW9uYWxpdHkgdGhhdCBjYW4gYmUgc2hhcmVkIGFtb25nCi0gICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzIGluIHRoZSBkaXN0cmlidXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdXIgcmVjaXBlcyBpbmhlcml0IGEgY2xhc3MsIHRoZXkgdGFrZSBvbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzIGFuZCBmdW5jdGlvbnMgZm9yIHRoYXQgY2xhc3MuCi0gICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHJlYWQgbW9yZSBhYm91dCBjbGFzcyBmaWxlcyBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcyc+Q2xhc3NlczwvbGluaz4iIHNlY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5jb25mOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFyZWEgaG9sZHMgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBsYXllciAoPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkaXN0cmlidXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Y29uZi9kaXN0cm8vPHJlcGxhY2VhYmxlPmRpc3RybzwvcmVwbGFjZWFibGU+LmNvbmY8L2ZpbGVuYW1lPiksCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmQgYW55IGRpc3RyaWJ1dGlvbi13aWRlIGluY2x1ZGUgZmlsZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5yZWNpcGVzLSo6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFJlY2lwZXMgYW5kIGFwcGVuZCBmaWxlcyB0aGF0IGFmZmVjdCBjb21tb24KLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgYWNyb3NzIHRoZSBkaXN0cmlidXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFyZWEgY291bGQgaW5jbHVkZSByZWNpcGVzIGFuZCBhcHBlbmQgZmlsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFkZCBkaXN0cmlidXRpb24tc3BlY2lmaWMgY29uZmlndXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uIHNjcmlwdHMsIGN1c3RvbSBpbWFnZSByZWNpcGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNvIGZvcnRoLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9ImJzcC1sYXllciI+Ci0gICAgICAgICAgICA8dGl0bGU+QlNQIExheWVyPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIEJTUCBMYXllciBwcm92aWRlcyBtYWNoaW5lIGNvbmZpZ3VyYXRpb25zLgotICAgICAgICAgICAgICAgIEV2ZXJ5dGhpbmcgaW4gdGhpcyBsYXllciBpcyBzcGVjaWZpYyB0byB0aGUgbWFjaGluZSBmb3Igd2hpY2gKLSAgICAgICAgICAgICAgICB5b3UgYXJlIGJ1aWxkaW5nIHRoZSBpbWFnZSBvciB0aGUgU0RLLgotICAgICAgICAgICAgICAgIEEgY29tbW9uIHN0cnVjdHVyZSBvciBmb3JtIGlzIGRlZmluZWQgZm9yIEJTUCBsYXllcnMuCi0gICAgICAgICAgICAgICAgWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IHRoaXMgc3RydWN0dXJlIGluIHRoZQotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7Jz5Zb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgotICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICBJbiBvcmRlciBmb3IgYSBCU1AgbGF5ZXIgdG8gYmUgY29uc2lkZXJlZCBjb21wbGlhbnQgd2l0aCB0aGUKLSAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCwgaXQgbXVzdCBtZWV0IHNvbWUgc3RydWN0dXJhbCByZXF1aXJlbWVudHMuCi0gICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGUgQlNQIExheWVyJ3MgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkgY29udGFpbnMKLSAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIGZvciB0aGUgbWFjaGluZQotICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Y29uZi9tYWNoaW5lLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT4uY29uZjwvZmlsZW5hbWU+KSBhbmQsCi0gICAgICAgICAgICAgICAgb2YgY291cnNlLCB0aGUgbGF5ZXIgKDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPikuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhlIGxheWVyIGlzIGRlZGljYXRlZCB0byBzcGVjaWZpYyByZWNpcGVzCi0gICAgICAgICAgICAgICAgYnkgZnVuY3Rpb246IDxmaWxlbmFtZT5yZWNpcGVzLWJzcDwvZmlsZW5hbWU+LAotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZWNpcGVzLWNvcmU8L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy1ncmFwaGljczwvZmlsZW5hbWU+LCBhbmQKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy1rZXJuZWw8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICBNZXRhZGF0YSBjYW4gZXhpc3QgZm9yIG11bHRpcGxlIGZvcm1mYWN0b3JzLCBncmFwaGljcwotICAgICAgICAgICAgICAgIHN1cHBvcnQgc3lzdGVtcywgYW5kIHNvIGZvcnRoLgotICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICBXaGlsZSB0aGUgZmlndXJlIHNob3dzIHNldmVyYWwgPGZpbGVuYW1lPnJlY2lwZXMtKjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzLCBub3QgYWxsIHRoZXNlIGRpcmVjdG9yaWVzIGFwcGVhciBpbiBhbGwKLSAgICAgICAgICAgICAgICAgICAgQlNQIGxheWVycy4KLSAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0ic29mdHdhcmUtbGF5ZXIiPgotICAgICAgICAgICAgPHRpdGxlPlNvZnR3YXJlIExheWVyPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIHNvZnR3YXJlIGxheWVyIHByb3ZpZGVzIHRoZSBNZXRhZGF0YSBmb3IgYWRkaXRpb25hbAotICAgICAgICAgICAgICAgIHNvZnR3YXJlIHBhY2thZ2VzIHVzZWQgZHVyaW5nIHRoZSBidWlsZC4KLSAgICAgICAgICAgICAgICBUaGlzIGxheWVyIGRvZXMgbm90IGluY2x1ZGUgTWV0YWRhdGEgdGhhdCBpcyBzcGVjaWZpYyB0byB0aGUKLSAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24gb3IgdGhlIG1hY2hpbmUsIHdoaWNoIGFyZSBmb3VuZCBpbiB0aGVpcgotICAgICAgICAgICAgICAgIHJlc3BlY3RpdmUgbGF5ZXJzLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGlzIGxheWVyIGNvbnRhaW5zIGFueSBuZXcgcmVjaXBlcyB0aGF0IHlvdXIgcHJvamVjdCBuZWVkcwotICAgICAgICAgICAgICAgIGluIHRoZSBmb3JtIG9mIHJlY2lwZSBmaWxlcy4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJzb3VyY2VzLWRldi1lbnZpcm9ubWVudCI+Ci0gICAgICAgIDx0aXRsZT5Tb3VyY2VzPC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEluIG9yZGVyIGZvciB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBjcmVhdGUgYW4gaW1hZ2Ugb3IKLSAgICAgICAgICAgIGFueSB0YXJnZXQsIGl0IG11c3QgYmUgYWJsZSB0byBhY2Nlc3Mgc291cmNlIGZpbGVzLgotICAgICAgICAgICAgVGhlCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSdnZW5lcmFsLXlvY3RvLWVudmlyb25tZW50LWZpZ3VyZSc+Z2VuZXJhbCBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50IGZpZ3VyZTwvbGluaz4KLSAgICAgICAgICAgIHJlcHJlc2VudHMgc291cmNlIGZpbGVzIHVzaW5nIHRoZSAiVXBzdHJlYW0gUHJvamVjdCBSZWxlYXNlcyIsCi0gICAgICAgICAgICAiTG9jYWwgUHJvamVjdHMiLCBhbmQgIlNDTXMgKG9wdGlvbmFsKSIgYm94ZXMuCi0gICAgICAgICAgICBUaGUgZmlndXJlIHJlcHJlc2VudHMgbWlycm9ycywgd2hpY2ggYWxzbyBwbGF5IGEgcm9sZSBpbiBsb2NhdGluZwotICAgICAgICAgICAgc291cmNlIGZpbGVzLCB3aXRoIHRoZSAiU291cmNlIE1pcnJvcihzKSIgYm94LgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgbWV0aG9kIGJ5IHdoaWNoIHNvdXJjZSBmaWxlcyBhcmUgdWx0aW1hdGVseSBvcmdhbml6ZWQgaXMKLSAgICAgICAgICAgIGEgZnVuY3Rpb24gb2YgdGhlIHByb2plY3QuCi0gICAgICAgICAgICBGb3IgZXhhbXBsZSwgZm9yIHJlbGVhc2VkIHNvZnR3YXJlLCBwcm9qZWN0cyB0ZW5kIHRvIHVzZSB0YXJiYWxscwotICAgICAgICAgICAgb3Igb3RoZXIgYXJjaGl2ZWQgZmlsZXMgdGhhdCBjYW4gY2FwdHVyZSB0aGUgc3RhdGUgb2YgYSByZWxlYXNlCi0gICAgICAgICAgICBndWFyYW50ZWVpbmcgdGhhdCBpdCBpcyBzdGF0aWNhbGx5IHJlcHJlc2VudGVkLgotICAgICAgICAgICAgT24gdGhlIG90aGVyIGhhbmQsIGZvciBhIHByb2plY3QgdGhhdCBpcyBtb3JlIGR5bmFtaWMgb3IKLSAgICAgICAgICAgIGV4cGVyaW1lbnRhbCBpbiBuYXR1cmUsIGEgcHJvamVjdCBtaWdodCBrZWVwIHNvdXJjZSBmaWxlcyBpbiBhCi0gICAgICAgICAgICByZXBvc2l0b3J5IGNvbnRyb2xsZWQgYnkgYSBTb3VyY2UgQ29udHJvbCBNYW5hZ2VyIChTQ00pIHN1Y2ggYXMKLSAgICAgICAgICAgIEdpdC4KLSAgICAgICAgICAgIFB1bGxpbmcgc291cmNlIGZyb20gYSByZXBvc2l0b3J5IGFsbG93cyB5b3UgdG8gY29udHJvbAotICAgICAgICAgICAgdGhlIHBvaW50IGluIHRoZSByZXBvc2l0b3J5ICh0aGUgcmV2aXNpb24pIGZyb20gd2hpY2ggeW91IHdhbnQgdG8KLSAgICAgICAgICAgIGJ1aWxkIHNvZnR3YXJlLgotICAgICAgICAgICAgRmluYWxseSwgYSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvIG1pZ2h0IGV4aXN0LCB3aGljaCB3b3VsZCBnaXZlIHRoZQotICAgICAgICAgICAgY29uc3VtZXIgYSBjaG9pY2Ugd2hlbiBkZWNpZGluZyB3aGVyZSB0byBnZXQgc291cmNlIGZpbGVzLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgIHZhcmlhYmxlIHRvIHBvaW50IHRvIHNvdXJjZSBmaWxlcyByZWdhcmRsZXNzIG9mIHRoZWlyIGxvY2F0aW9uLgotICAgICAgICAgICAgRWFjaCByZWNpcGUgbXVzdCBoYXZlIGEgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB2YXJpYWJsZQotICAgICAgICAgICAgdGhhdCBwb2ludHMgdG8gdGhlIHNvdXJjZS4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQW5vdGhlciBhcmVhIHRoYXQgcGxheXMgYSBzaWduaWZpY2FudCByb2xlIGluIHdoZXJlIHNvdXJjZSBmaWxlcwotICAgICAgICAgICAgY29tZSBmcm9tIGlzIHBvaW50ZWQgdG8gYnkgdGhlCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICB2YXJpYWJsZS4KLSAgICAgICAgICAgIFRoaXMgYXJlYSBpcyBhIGNhY2hlIHRoYXQgY2FuIGhvbGQgcHJldmlvdXNseSBkb3dubG9hZGVkIHNvdXJjZS4KLSAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBpbnN0cnVjdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBjcmVhdGUKLSAgICAgICAgICAgIHRhcmJhbGxzIGZyb20gR2l0IHJlcG9zaXRvcmllcywgd2hpY2ggaXMgbm90IHRoZSBkZWZhdWx0IGJlaGF2aW9yLAotICAgICAgICAgICAgYW5kIHN0b3JlIHRoZW0gaW4gdGhlIDxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPiBieSB1c2luZyB0aGUKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMnPjxmaWxlbmFtZT5CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFM8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgIHZhcmlhYmxlLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBKdWRpY2lvdXMgdXNlIG9mIGEgPGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBjYW4KLSAgICAgICAgICAgIHNhdmUgdGhlIGJ1aWxkIHN5c3RlbSBhIHRyaXAgYWNyb3NzIHRoZSBJbnRlcm5ldCB3aGVuIGxvb2tpbmcKLSAgICAgICAgICAgIGZvciBmaWxlcy4KLSAgICAgICAgICAgIEEgZ29vZCBtZXRob2QgZm9yIHVzaW5nIGEgZG93bmxvYWQgZGlyZWN0b3J5IGlzIHRvIGhhdmUKLSAgICAgICAgICAgIDxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPiBwb2ludCB0byBhbiBhcmVhIG91dHNpZGUgb2YgeW91cgotICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3J5LgotICAgICAgICAgICAgRG9pbmcgc28gYWxsb3dzIHlvdSB0byBzYWZlbHkgZGVsZXRlIHRoZSBCdWlsZCBEaXJlY3RvcnkKLSAgICAgICAgICAgIGlmIG5lZWRlZCB3aXRob3V0IGZlYXIgb2YgcmVtb3ZpbmcgYW55IGRvd25sb2FkZWQgc291cmNlIGZpbGUuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIHByb3ZpZGVzIGEgZGVlcGVyIGxvb2sgaW50byB0aGUKLSAgICAgICAgICAgIHNvdXJjZSBmaWxlcyBhbmQgdGhlIG1pcnJvcnMuCi0gICAgICAgICAgICBIZXJlIGlzIGEgbW9yZSBkZXRhaWxlZCBsb29rIGF0IHRoZSBzb3VyY2UgZmlsZSBhcmVhIG9mIHRoZQotICAgICAgICAgICAgYmFzZSBmaWd1cmU6Ci0gICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvc291cmNlLWlucHV0LnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjdpbiIgZGVwdGg9IjcuNWluIiAvPgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J3Vwc3RyZWFtLXByb2plY3QtcmVsZWFzZXMnPgotICAgICAgICAgICAgPHRpdGxlPlVwc3RyZWFtIFByb2plY3QgUmVsZWFzZXM8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBVcHN0cmVhbSBwcm9qZWN0IHJlbGVhc2VzIGV4aXN0IGFueXdoZXJlIGluIHRoZSBmb3JtIG9mIGFuCi0gICAgICAgICAgICAgICAgYXJjaGl2ZWQgZmlsZSAoZS5nLiB0YXJiYWxsIG9yIHppcCBmaWxlKS4KLSAgICAgICAgICAgICAgICBUaGVzZSBmaWxlcyBjb3JyZXNwb25kIHRvIGluZGl2aWR1YWwgcmVjaXBlcy4KLSAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZpZ3VyZSB1c2VzIHNwZWNpZmljIHJlbGVhc2VzIGVhY2ggZm9yCi0gICAgICAgICAgICAgICAgQnVzeUJveCwgUXQsIGFuZCBEYnVzLgotICAgICAgICAgICAgICAgIEFuIGFyY2hpdmUgZmlsZSBjYW4gYmUgZm9yIGFueSByZWxlYXNlZCBwcm9kdWN0IHRoYXQgY2FuIGJlCi0gICAgICAgICAgICAgICAgYnVpbHQgdXNpbmcgYSByZWNpcGUuCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nbG9jYWwtcHJvamVjdHMnPgotICAgICAgICAgICAgPHRpdGxlPkxvY2FsIFByb2plY3RzPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgTG9jYWwgcHJvamVjdHMgYXJlIGN1c3RvbSBiaXRzIG9mIHNvZnR3YXJlIHRoZSB1c2VyIHByb3ZpZGVzLgotICAgICAgICAgICAgICAgIFRoZXNlIGJpdHMgcmVzaWRlIHNvbWV3aGVyZSBsb2NhbCB0byBhIHByb2plY3QgLSBwZXJoYXBzCi0gICAgICAgICAgICAgICAgYSBkaXJlY3RvcnkgaW50byB3aGljaCB0aGUgdXNlciBjaGVja3MgaW4gaXRlbXMgKGUuZy4KLSAgICAgICAgICAgICAgICBhIGxvY2FsIGRpcmVjdG9yeSBjb250YWluaW5nIGEgZGV2ZWxvcG1lbnQgc291cmNlIHRyZWUKLSAgICAgICAgICAgICAgICB1c2VkIGJ5IHRoZSBncm91cCkuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSBjYW5vbmljYWwgbWV0aG9kIHRocm91Z2ggd2hpY2ggdG8gaW5jbHVkZSBhIGxvY2FsIHByb2plY3QKLSAgICAgICAgICAgICAgICBpcyB0byB1c2UgdGhlCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZXh0ZXJuYWxzcmMnPjxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgIGNsYXNzIHRvIGluY2x1ZGUgdGhhdCBsb2NhbCBwcm9qZWN0LgotICAgICAgICAgICAgICAgIFlvdSB1c2UgZWl0aGVyIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IG9yIGEKLSAgICAgICAgICAgICAgICByZWNpcGUncyBhcHBlbmQgZmlsZSB0byBvdmVycmlkZSBvciBzZXQgdGhlCi0gICAgICAgICAgICAgICAgcmVjaXBlIHRvIHBvaW50IHRvIHRoZSBsb2NhbCBkaXJlY3Rvcnkgb24geW91ciBkaXNrIHRvIHB1bGwKLSAgICAgICAgICAgICAgICBpbiB0aGUgd2hvbGUgc291cmNlIHRyZWUuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+IGNsYXNzLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWV4dGVybmFsc3JjJz48ZmlsZW5hbWU+ZXh0ZXJuYWxzcmMuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKLSAgICAgICAgICAgICAgICBzZWN0aW9uLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J3NjbXMnPgotICAgICAgICAgICAgPHRpdGxlPlNvdXJjZSBDb250cm9sIE1hbmFnZXJzIChPcHRpb25hbCk8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBBbm90aGVyIHBsYWNlIHRoZSBidWlsZCBzeXN0ZW0gY2FuIGdldCBzb3VyY2UgZmlsZXMgZnJvbSBpcwotICAgICAgICAgICAgICAgIHRocm91Z2ggYW4gU0NNIHN1Y2ggYXMgR2l0IG9yIFN1YnZlcnNpb24uCi0gICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCBhIHJlcG9zaXRvcnkgaXMgY2xvbmVkIG9yIGNoZWNrZWQgb3V0LgotICAgICAgICAgICAgICAgIFRoZQotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1mZXRjaCc+PGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgdGFzayBpbnNpZGUgQml0QmFrZSB1c2VzCi0gICAgICAgICAgICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCB0aGUgYXJndW1lbnQncyBwcmVmaXggdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0Ci0gICAgICAgICAgICAgICAgZmV0Y2hlciBtb2R1bGUuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaGF2ZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQotICAgICAgICAgICAgICAgIGdlbmVyYXRlIHRhcmJhbGxzIGZvciBHaXQgcmVwb3NpdG9yaWVzIGFuZCBwbGFjZSB0aGVtIGluIHRoZQotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ETF9ESVInPjxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICBkaXJlY3RvcnksIHNlZSB0aGUKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTJz48ZmlsZW5hbWU+QkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUuCi0gICAgICAgICAgICA8L25vdGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFdoZW4gZmV0Y2hpbmcgYSByZXBvc2l0b3J5LCBCaXRCYWtlIHVzZXMgdGhlCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ1JFVic+PGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGRldGVybWluZSB0aGUgc3BlY2lmaWMgcmV2aXNpb24gZnJvbSB3aGljaCB0bwotICAgICAgICAgICAgICAgIGJ1aWxkLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J3NvdXJjZS1taXJyb3JzJz4KLSAgICAgICAgICAgIDx0aXRsZT5Tb3VyY2UgTWlycm9yKHMpPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVHdvIGtpbmRzIG9mIG1pcnJvcnMgZXhpc3Q6IHByZS1taXJyb3JzIGFuZCByZWd1bGFyIG1pcnJvcnMuCi0gICAgICAgICAgICAgICAgVGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgIGFuZAotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NSVJST1JTJz48ZmlsZW5hbWU+TUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBwb2ludCB0byB0aGVzZSwgcmVzcGVjdGl2ZWx5LgotICAgICAgICAgICAgICAgIEJpdEJha2UgY2hlY2tzIHByZS1taXJyb3JzIGJlZm9yZSBsb29raW5nIHVwc3RyZWFtIGZvciBhbnkKLSAgICAgICAgICAgICAgICBzb3VyY2UgZmlsZXMuCi0gICAgICAgICAgICAgICAgUHJlLW1pcnJvcnMgYXJlIGFwcHJvcHJpYXRlIHdoZW4geW91IGhhdmUgYSBzaGFyZWQgZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgdGhhdCBpcyBub3QgYSBkaXJlY3RvcnkgZGVmaW5lZCBieSB0aGUKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgQSBQcmUtbWlycm9yIHR5cGljYWxseSBwb2ludHMgdG8gYSBzaGFyZWQgZGlyZWN0b3J5IHRoYXQgaXMKLSAgICAgICAgICAgICAgICBsb2NhbCB0byB5b3VyIG9yZ2FuaXphdGlvbi4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgUmVndWxhciBtaXJyb3JzIGNhbiBiZSBhbnkgc2l0ZSBhY3Jvc3MgdGhlIEludGVybmV0IHRoYXQgaXMKLSAgICAgICAgICAgICAgICB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIGxvY2F0aW9uIGZvciBzb3VyY2UgY29kZSBzaG91bGQgdGhlCi0gICAgICAgICAgICAgICAgcHJpbWFyeSBzaXRlIG5vdCBiZSBmdW5jdGlvbmluZyBmb3Igc29tZSByZWFzb24gb3IgYW5vdGhlci4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJwYWNrYWdlLWZlZWRzLWRldi1lbnZpcm9ubWVudCI+Ci0gICAgICAgIDx0aXRsZT5QYWNrYWdlIEZlZWRzPC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFdoZW4gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZ2VuZXJhdGVzIGFuIGltYWdlIG9yIGFuIFNESywKLSAgICAgICAgICAgIGl0IGdldHMgdGhlIHBhY2thZ2VzIGZyb20gYSBwYWNrYWdlIGZlZWQgYXJlYSBsb2NhdGVkIGluIHRoZQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KLSAgICAgICAgICAgIFRoZQotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZ2VuZXJhbC15b2N0by1lbnZpcm9ubWVudC1maWd1cmUnPmdlbmVyYWwgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCBmaWd1cmU8L2xpbms+Ci0gICAgICAgICAgICBzaG93cyB0aGlzIHBhY2thZ2UgZmVlZHMgYXJlYSBpbiB0aGUgdXBwZXItcmlnaHQgY29ybmVyLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGlzIHNlY3Rpb24gbG9va3MgYSBsaXR0bGUgY2xvc2VyIGludG8gdGhlIHBhY2thZ2UgZmVlZHMgYXJlYSB1c2VkCi0gICAgICAgICAgICBieSB0aGUgYnVpbGQgc3lzdGVtLgotICAgICAgICAgICAgSGVyZSBpcyBhIG1vcmUgZGV0YWlsZWQgbG9vayBhdCB0aGUgYXJlYToKLSAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wYWNrYWdlLWZlZWRzLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjdpbiIgZGVwdGg9IjZpbiIgLz4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgUGFja2FnZSBmZWVkcyBhcmUgYW4gaW50ZXJtZWRpYXJ5IHN0ZXAgaW4gdGhlIGJ1aWxkIHByb2Nlc3MuCi0gICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwcm92aWRlcyBjbGFzc2VzIHRvIGdlbmVyYXRlCi0gICAgICAgICAgICBkaWZmZXJlbnQgcGFja2FnZSB0eXBlcywgYW5kIHlvdSBzcGVjaWZ5IHdoaWNoIGNsYXNzZXMgdG8gZW5hYmxlCi0gICAgICAgICAgICB0aHJvdWdoIHRoZQotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgdmFyaWFibGUuCi0gICAgICAgICAgICBCZWZvcmUgcGxhY2luZyB0aGUgcGFja2FnZXMgaW50byBwYWNrYWdlIGZlZWRzLAotICAgICAgICAgICAgdGhlIGJ1aWxkIHByb2Nlc3MgdmFsaWRhdGVzIHRoZW0gd2l0aCBnZW5lcmF0ZWQgb3V0cHV0IHF1YWxpdHkKLSAgICAgICAgICAgIGFzc3VyYW5jZSBjaGVja3MgdGhyb3VnaCB0aGUKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWluc2FuZSc+PGZpbGVuYW1lPmluc2FuZTwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgY2xhc3MuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSBwYWNrYWdlIGZlZWQgYXJlYSByZXNpZGVzIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuCi0gICAgICAgICAgICBUaGUgZGlyZWN0b3J5IHRoZSBidWlsZCBzeXN0ZW0gdXNlcyB0byB0ZW1wb3JhcmlseSBzdG9yZSBwYWNrYWdlcwotICAgICAgICAgICAgaXMgZGV0ZXJtaW5lZCBieSBhIGNvbWJpbmF0aW9uIG9mIHZhcmlhYmxlcyBhbmQgdGhlIHBhcnRpY3VsYXIKLSAgICAgICAgICAgIHBhY2thZ2UgbWFuYWdlciBpbiB1c2UuCi0gICAgICAgICAgICBTZWUgdGhlICJQYWNrYWdlIEZlZWRzIiBib3ggaW4gdGhlIGlsbHVzdHJhdGlvbiBhbmQgbm90ZSB0aGUKLSAgICAgICAgICAgIGluZm9ybWF0aW9uIHRvIHRoZSByaWdodCBvZiB0aGF0IGFyZWEuCi0gICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB0aGUgZm9sbG93aW5nIGRlZmluZXMgd2hlcmUgcGFja2FnZSBmaWxlcyBhcmUKLSAgICAgICAgICAgIGtlcHQ6Ci0gICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUic+PGZpbGVuYW1lPkRFUExPWV9ESVI8L2ZpbGVuYW1lPjwvbGluaz46Ci0gICAgICAgICAgICAgICAgICAgIERlZmluZWQgYXMgPGZpbGVuYW1lPnRtcC9kZXBsb3k8L2ZpbGVuYW1lPiBpbiB0aGUgQnVpbGQKLSAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5LgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkRFUExPWV9ESVJfKjwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIHBhY2thZ2UgbWFuYWdlciB1c2VkLCB0aGUgcGFja2FnZSB0eXBlCi0gICAgICAgICAgICAgICAgICAgIHN1Yi1mb2xkZXIuCi0gICAgICAgICAgICAgICAgICAgIEdpdmVuIFJQTSwgSVBLLCBvciBERUIgcGFja2FnaW5nIGFuZCB0YXJiYWxsIGNyZWF0aW9uLCB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfUlBNJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9SUE08L2ZpbGVuYW1lPjwvbGluaz4sCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX0lQSyc+PGZpbGVuYW1lPkRFUExPWV9ESVJfSVBLPC9maWxlbmFtZT48L2xpbms+LAotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9ERUInPjxmaWxlbmFtZT5ERVBMT1lfRElSX0RFQjwvZmlsZW5hbWU+PC9saW5rPiwKLSAgICAgICAgICAgICAgICAgICAgb3IKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfVEFSJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9UQVI8L2ZpbGVuYW1lPjwvbGluaz4sCi0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBhcmUgdXNlZCwgcmVzcGVjdGl2ZWx5LgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQVJDSCc+PGZpbGVuYW1lPlBBQ0tBR0VfQVJDSDwvZmlsZW5hbWU+PC9saW5rPjoKLSAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3ViLWZvbGRlcnMuCi0gICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBwYWNrYWdlcyBjb3VsZCBleGlzdCBmb3IgdGhlIGk1ODYgb3IgcWVtdXg4NgotICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmVzLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlIDxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlXyo8L2ZpbGVuYW1lPiB0YXNrcyB0bwotICAgICAgICAgICAgZ2VuZXJhdGUgcGFja2FnZXMgYW5kIHBsYWNlIHRoZW0gaW50byB0aGUgcGFja2FnZSBob2xkaW5nIGFyZWEgKGUuZy4KLSAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlX2lwazwvZmlsZW5hbWU+IGZvciBJUEsgcGFja2FnZXMpLgotICAgICAgICAgICAgU2VlIHRoZQotICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlX3dyaXRlX2RlYic+PGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfZGViPC9maWxlbmFtZT48L2xpbms+IiwKLSAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZV93cml0ZV9pcGsnPjxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlX2lwazwvZmlsZW5hbWU+PC9saW5rPiIsCi0gICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfcnBtJz48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV9ycG08L2ZpbGVuYW1lPjwvbGluaz4iLAotICAgICAgICAgICAgYW5kCi0gICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfdGFyJz48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV90YXI8L2ZpbGVuYW1lPjwvbGluaz4iCi0gICAgICAgICAgICBzZWN0aW9ucyBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KLSAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVyIGEgc2NlbmFyaW8gd2hlcmUgYW4gSVBLIHBhY2thZ2luZyBtYW5hZ2VyCi0gICAgICAgICAgICBpcyBiZWluZyB1c2VkIGFuZCBwYWNrYWdlIGFyY2hpdGVjdHVyZSBzdXBwb3J0IGZvciBib3RoIGk1ODYKLSAgICAgICAgICAgIGFuZCBxZW11eDg2IGV4aXN0LgotICAgICAgICAgICAgUGFja2FnZXMgZm9yIHRoZSBpNTg2IGFyY2hpdGVjdHVyZSBhcmUgcGxhY2VkIGluCi0gICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQvdG1wL2RlcGxveS9pcGsvaTU4NjwvZmlsZW5hbWU+LCB3aGlsZSBwYWNrYWdlcyBmb3IKLSAgICAgICAgICAgIHRoZSBxZW11eDg2IGFyY2hpdGVjdHVyZSBhcmUgcGxhY2VkIGluCi0gICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQvdG1wL2RlcGxveS9pcGsvcWVtdXg4NjwvZmlsZW5hbWU+LgotICAgICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9J2JpdGJha2UtZGV2LWVudmlyb25tZW50Jz4KLSAgICAgICAgPHRpdGxlPkJpdEJha2U8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcwotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYml0YmFrZS10ZXJtJz5CaXRCYWtlPC91bGluaz4KLSAgICAgICAgICAgIHRvIHByb2R1Y2UgaW1hZ2VzLgotICAgICAgICAgICAgWW91IGNhbiBzZWUgZnJvbSB0aGUKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz5nZW5lcmFsIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZmlndXJlPC9saW5rPiwKLSAgICAgICAgICAgIHRoZSBCaXRCYWtlIGFyZWEgY29uc2lzdHMgb2Ygc2V2ZXJhbCBmdW5jdGlvbmFsIGFyZWFzLgotICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHRha2VzIGEgY2xvc2VyIGxvb2sgYXQgZWFjaCBvZiB0aG9zZSBhcmVhcy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgU2VwYXJhdGUgZG9jdW1lbnRhdGlvbiBleGlzdHMgZm9yIHRoZSBCaXRCYWtlIHRvb2wuCi0gICAgICAgICAgICBTZWUgdGhlCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I2JpdGJha2UtdXNlci1tYW51YWwnPkJpdEJha2UgVXNlciBNYW51YWw8L3VsaW5rPgotICAgICAgICAgICAgZm9yIHJlZmVyZW5jZSBtYXRlcmlhbCBvbiBCaXRCYWtlLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J3NvdXJjZS1mZXRjaGluZy1kZXYtZW52aXJvbm1lbnQnPgotICAgICAgICAgICAgPHRpdGxlPlNvdXJjZSBGZXRjaGluZzwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBzdGFnZXMgb2YgYnVpbGRpbmcgYSByZWNpcGUgYXJlIHRvIGZldGNoIGFuZCB1bnBhY2sKLSAgICAgICAgICAgICAgICB0aGUgc291cmNlIGNvZGU6Ci0gICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3NvdXJjZS1mZXRjaGluZy5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2LjVpbiIgZGVwdGg9IjVpbiIgLz4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWZldGNoJz48ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICBhbmQKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtdW5wYWNrJz48ZmlsZW5hbWU+ZG9fdW5wYWNrPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgdGFza3MgZmV0Y2ggdGhlIHNvdXJjZSBmaWxlcyBhbmQgdW5wYWNrIHRoZW0gaW50byB0aGUgd29yawotICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGV2ZXJ5IGxvY2FsIGZpbGUgKGUuZy4gPGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPikKLSAgICAgICAgICAgICAgICAgICAgdGhhdCBpcyBwYXJ0IG9mIGEgcmVjaXBlJ3MKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdGFrZXMgYSBjaGVja3N1bQotICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZmlsZSBmb3IgdGhlIHJlY2lwZSBhbmQgaW5zZXJ0cyB0aGUgY2hlY2tzdW0gaW50bwotICAgICAgICAgICAgICAgICAgICB0aGUgc2lnbmF0dXJlIGZvciB0aGUgPGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgIElmIGFueSBsb2NhbCBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkLCB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT4gdGFzayBhbmQgYWxsIHRhc2tzIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgZGVwZW5kIG9uIGl0IGFyZSByZS1leGVjdXRlZC4KLSAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgZXZlcnl0aGluZyBpcyBhY2NvbXBsaXNoZWQgaW4gdGhlCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKLSAgICAgICAgICAgICAgICB3aGljaCBoYXMgYSBkZWZpbmVkIHN0cnVjdHVyZS4KLSAgICAgICAgICAgICAgICBGb3IgYWRkaXRpb25hbCBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIHRoZSBCdWlsZCBEaXJlY3RvcnksCi0gICAgICAgICAgICAgICAgc2VlIHRoZQotICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1idWlsZCc+PGZpbGVuYW1lPmJ1aWxkLzwvZmlsZW5hbWU+PC9saW5rPiIKLSAgICAgICAgICAgICAgICBzZWN0aW9uLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBVbnBhY2tlZCBzb3VyY2UgZmlsZXMgYXJlIHBvaW50ZWQgdG8gYnkgdGhlCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlLgotICAgICAgICAgICAgICAgIEVhY2ggcmVjaXBlIGhhcyBhbiBhcmVhIGluIHRoZSBCdWlsZCBEaXJlY3Rvcnkgd2hlcmUgdGhlCi0gICAgICAgICAgICAgICAgdW5wYWNrZWQgc291cmNlIGNvZGUgcmVzaWRlcy4KLSAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGF0IGRpcmVjdG9yeSBmb3IgYW55IGdpdmVuIHJlY2lwZSBpcyBkZWZpbmVkIGZyb20KLSAgICAgICAgICAgICAgICBzZXZlcmFsIGRpZmZlcmVudCB2YXJpYWJsZXMuCi0gICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlIHZhcmlhYmxlcyB0aGF0IGRlZmluZSB0aGVzZSBkaXJlY3RvcmllcwotICAgICAgICAgICAgICAgIGJ5IGxvb2tpbmcgYXQgdGhlIGZpZ3VyZToKLSAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPiAtCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgYmFzZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1zIGFsbCBpdHMgd29yayBkdXJpbmcgdGhlIGJ1aWxkLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9BUkNIJz48ZmlsZW5hbWU+UEFDS0FHRV9BUkNIPC9maWxlbmFtZT48L2xpbms+IC0KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGJ1aWx0IHBhY2thZ2Ugb3IgcGFja2FnZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfT1MnPjxmaWxlbmFtZT5UQVJHRVRfT1M8L2ZpbGVuYW1lPjwvbGluaz4gLQotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG9wZXJhdGluZyBzeXN0ZW0gb2YgdGhlIHRhcmdldCBkZXZpY2UuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+IC0KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBidWlsdCBwYWNrYWdlLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPiAtCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmVyc2lvbiBvZiB0aGUgcmVjaXBlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+IC0KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZXZpc2lvbiBvZiB0aGUgcmVjaXBlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPiAtCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gd2l0aGluIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiB3aGVyZQotICAgICAgICAgICAgICAgICAgICAgICAgYSBzcGVjaWZpYyBwYWNrYWdlIGlzIGJ1aWx0LgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUyc+PGZpbGVuYW1lPlM8L2ZpbGVuYW1lPjwvbGluaz4gLQotICAgICAgICAgICAgICAgICAgICAgICAgQ29udGFpbnMgdGhlIHVucGFja2VkIHNvdXJjZSBmaWxlcyBmb3IgYSBnaXZlbiByZWNpcGUuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdwYXRjaGluZy1kZXYtZW52aXJvbm1lbnQnPgotICAgICAgICAgICAgPHRpdGxlPlBhdGNoaW5nPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgT25jZSBzb3VyY2UgY29kZSBpcyBmZXRjaGVkIGFuZCB1bnBhY2tlZCwgQml0QmFrZSBsb2NhdGVzCi0gICAgICAgICAgICAgICAgcGF0Y2ggZmlsZXMgYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgc291cmNlIGZpbGVzOgotICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wYXRjaGluZy5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2aW4iIGRlcHRoPSI1aW4iIC8+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZQotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYXRjaCc+PGZpbGVuYW1lPmRvX3BhdGNoPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgdGFzayBwcm9jZXNzZXMgcmVjaXBlcyBieQotICAgICAgICAgICAgICAgIHVzaW5nIHRoZQotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGxvY2F0ZSBhcHBsaWNhYmxlIHBhdGNoIGZpbGVzLCB3aGljaCBieSBkZWZhdWx0Ci0gICAgICAgICAgICAgICAgYXJlIDxmaWxlbmFtZT4qLnBhdGNoPC9maWxlbmFtZT4gb3IKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ki5kaWZmPC9maWxlbmFtZT4gZmlsZXMsIG9yIGFueSBmaWxlIGlmCi0gICAgICAgICAgICAgICAgImFwcGx5PXllcyIgaXMgc3BlY2lmaWVkIGZvciB0aGUgZmlsZSBpbgotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4uCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEJpdEJha2UgZmluZHMgYW5kIGFwcGxpZXMgbXVsdGlwbGUgcGF0Y2hlcyBmb3IgYSBzaW5nbGUgcmVjaXBlCi0gICAgICAgICAgICAgICAgaW4gdGhlIG9yZGVyIGluIHdoaWNoIGl0IGZpbmRzIHRoZSBwYXRjaGVzLgotICAgICAgICAgICAgICAgIFBhdGNoZXMgYXJlIGFwcGxpZWQgdG8gdGhlIHJlY2lwZSdzIHNvdXJjZSBmaWxlcyBsb2NhdGVkIGluIHRoZQotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPiBkaXJlY3RvcnkuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGUgc291cmNlIGRpcmVjdG9yaWVzIGFyZQotICAgICAgICAgICAgICAgIGNyZWF0ZWQsIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc291cmNlLWZldGNoaW5nLWRldi1lbnZpcm9ubWVudCc+U291cmNlIEZldGNoaW5nPC9saW5rPiIKLSAgICAgICAgICAgICAgICBzZWN0aW9uLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyYXRpb24tYW5kLWNvbXBpbGF0aW9uLWRldi1lbnZpcm9ubWVudCc+Ci0gICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJhdGlvbiBhbmQgQ29tcGlsYXRpb248L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBBZnRlciBzb3VyY2UgY29kZSBpcyBwYXRjaGVkLCBCaXRCYWtlIGV4ZWN1dGVzIHRhc2tzIHRoYXQKLSAgICAgICAgICAgICAgICBjb25maWd1cmUgYW5kIGNvbXBpbGUgdGhlIHNvdXJjZSBjb2RlOgotICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9jb25maWd1cmF0aW9uLWNvbXBpbGUtYXV0b3JlY29uZi5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI3aW4iIGRlcHRoPSI1aW4iIC8+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoaXMgc3RlcCBpbiB0aGUgYnVpbGQgcHJvY2VzcyBjb25zaXN0cyBvZiB0aHJlZSB0YXNrczoKLSAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXByZXBhcmVfcmVjaXBlX3N5c3Jvb3QnPjxmaWxlbmFtZT5kb19wcmVwYXJlX3JlY2lwZV9zeXNyb290PC9maWxlbmFtZT48L2xpbms+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHRhc2sgc2V0cyB1cCB0aGUgdHdvIHN5c3Jvb3RzIGluCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT5yZWNpcGUtc3lzcm9vdDwvZmlsZW5hbWU+IGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZS1zeXNyb290LW5hdGl2ZTwvZmlsZW5hbWU+KSBzbyB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3lzcm9vdHMgY29udGFpbiB0aGUgY29udGVudHMgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcG9wdWxhdGVfc3lzcm9vdCc+PGZpbGVuYW1lPmRvX3BvcHVsYXRlX3N5c3Jvb3Q8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tzIG9mIHRoZSByZWNpcGVzIG9uIHdoaWNoIHRoZSByZWNpcGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmcgdGhlIHRhc2tzIGRlcGVuZHMuCi0gICAgICAgICAgICAgICAgICAgICAgICBBIHN5c3Jvb3QgZXhpc3RzIGZvciBib3RoIHRoZSB0YXJnZXQgYW5kIGZvciB0aGUgbmF0aXZlCi0gICAgICAgICAgICAgICAgICAgICAgICBiaW5hcmllcywgd2hpY2ggcnVuIG9uIHRoZSBob3N0IHN5c3RlbS4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB0YXNrIGNvbmZpZ3VyZXMgdGhlIHNvdXJjZSBieSBlbmFibGluZyBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGluZyBhbnkgYnVpbGQtdGltZSBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0LgotICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbnMgY2FuIGNvbWUgZnJvbSB0aGUgcmVjaXBlIGl0c2VsZiBhcyB3ZWxsCi0gICAgICAgICAgICAgICAgICAgICAgICBhcyBmcm9tIGFuIGluaGVyaXRlZCBjbGFzcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIHNvZnR3YXJlIGl0c2VsZiBtaWdodCBjb25maWd1cmUgaXRzZWxmCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRpbmcgb24gdGhlIHRhcmdldCBmb3Igd2hpY2ggaXQgaXMgYmVpbmcgYnVpbHQuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBjb25maWd1cmF0aW9ucyBoYW5kbGVkIGJ5IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgdGFzayBhcmUgc3BlY2lmaWMKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvIHNvdXJjZSBjb2RlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzb3VyY2UgY29kZQotICAgICAgICAgICAgICAgICAgICAgICAgYmVpbmcgYnVpbHQgYnkgdGhlIHJlY2lwZS48L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBhcmUgdXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMnPjxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBhZGQgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYnkgdXNpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8bGluayBsaW5rZW5kPSd2YXItRVhUUkFfT0VDT05GJz48ZmlsZW5hbWU+RVhUUkFfT0VDT05GPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VDT05GSUdfQ09ORkFSR1MnPjxmaWxlbmFtZT5QQUNLQUdFQ09ORklHX0NPTkZBUkdTPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRoaXMgdmFyaWFibGUgd29ya3Mgd2l0aGluCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGNsYXNzLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2F1dG90b29scy5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgYSBjb25maWd1cmF0aW9uIHRhc2sgaGFzIGJlZW4gc2F0aXNmaWVkLCBCaXRCYWtlCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlcyB0aGUgc291cmNlIHVzaW5nIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbXBpbGUnPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICB0YXNrLgotICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGlsYXRpb24gb2NjdXJzIGluIHRoZSBkaXJlY3RvcnkgcG9pbnRlZCB0byBieSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CJz48ZmlsZW5hbWU+QjwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBSZWFsaXplIHRoYXQgdGhlIDxmaWxlbmFtZT5CPC9maWxlbmFtZT4gZGlyZWN0b3J5IGlzLCBieQotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCwgdGhlIHNhbWUgYXMgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUyc+PGZpbGVuYW1lPlM8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICBPbmNlIGNvbXBpbGF0aW9uIGlzIGRvbmUsIEJpdEJha2UgZXhlY3V0ZXMgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHRhc2sgY29waWVzIGZpbGVzIGZyb20gdGhlIDxmaWxlbmFtZT5CPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBhbmQgcGxhY2VzIHRoZW0gaW4gYSBob2xkaW5nIGFyZWEgcG9pbnRlZCB0bwotICAgICAgICAgICAgICAgICAgICAgICAgYnkgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRCc+PGZpbGVuYW1lPkQ8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J3BhY2thZ2Utc3BsaXR0aW5nLWRldi1lbnZpcm9ubWVudCc+Ci0gICAgICAgICAgICA8dGl0bGU+UGFja2FnZSBTcGxpdHRpbmc8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBBZnRlciBzb3VyY2UgY29kZSBpcyBjb25maWd1cmVkIGFuZCBjb21waWxlZCwgdGhlCi0gICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhbmFseXplcwotICAgICAgICAgICAgICAgIHRoZSByZXN1bHRzIGFuZCBzcGxpdHMgdGhlIG91dHB1dCBpbnRvIHBhY2thZ2VzOgotICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9hbmFseXNpcy1mb3ItcGFja2FnZS1zcGxpdHRpbmcucG5nIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iN2luIiBkZXB0aD0iN2luIiAvPgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGUKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZSc+PGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICBhbmQKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZWRhdGEnPjxmaWxlbmFtZT5kb19wYWNrYWdlZGF0YTwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgIHRhc2tzIGNvbWJpbmUgdG8gYW5hbHl6ZQotICAgICAgICAgICAgICAgIHRoZSBmaWxlcyBmb3VuZCBpbiB0aGUKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRCc+PGZpbGVuYW1lPkQ8L2ZpbGVuYW1lPjwvbGluaz4gZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgYW5kIHNwbGl0IHRoZW0gaW50byBzdWJzZXRzIGJhc2VkIG9uIGF2YWlsYWJsZSBwYWNrYWdlcyBhbmQKLSAgICAgICAgICAgICAgICBmaWxlcy4KLSAgICAgICAgICAgICAgICBUaGUgYW5hbHl6aW5nIHByb2Nlc3MgaW52b2x2ZXMgdGhlIGZvbGxvd2luZyBhcyB3ZWxsIGFzIG90aGVyCi0gICAgICAgICAgICAgICAgaXRlbXM6IHNwbGl0dGluZyBvdXQgZGVidWdnaW5nIHN5bWJvbHMsCi0gICAgICAgICAgICAgICAgbG9va2luZyBhdCBzaGFyZWQgbGlicmFyeSBkZXBlbmRlbmNpZXMgYmV0d2VlbiBwYWNrYWdlcywKLSAgICAgICAgICAgICAgICBhbmQgbG9va2luZyBhdCBwYWNrYWdlIHJlbGF0aW9uc2hpcHMuCi0gICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19wYWNrYWdlZGF0YTwvZmlsZW5hbWU+IHRhc2sgY3JlYXRlcyBwYWNrYWdlCi0gICAgICAgICAgICAgICAgbWV0YWRhdGEgYmFzZWQgb24gdGhlIGFuYWx5c2lzIHN1Y2ggdGhhdCB0aGUKLSAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNhbiBnZW5lcmF0ZSB0aGUgZmluYWwgcGFja2FnZXMuCi0gICAgICAgICAgICAgICAgV29ya2luZywgc3RhZ2VkLCBhbmQgaW50ZXJtZWRpYXRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzCi0gICAgICAgICAgICAgICAgYW5kIHBhY2thZ2Ugc3BsaXR0aW5nIHByb2Nlc3MgdXNlIHRoZXNlIGFyZWFzOgotICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUEtHRCc+PGZpbGVuYW1lPlBLR0Q8L2ZpbGVuYW1lPjwvbGluaz4gLQotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBmb3IgcGFja2FnZXMgYmVmb3JlIHRoZXkgYXJlCi0gICAgICAgICAgICAgICAgICAgICAgICBzcGxpdC4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVBLR0RBVEFfRElSJz48ZmlsZW5hbWU+UEtHREFUQV9ESVI8L2ZpbGVuYW1lPjwvbGluaz4gLQotICAgICAgICAgICAgICAgICAgICAgICAgQSBzaGFyZWQsIGdsb2JhbC1zdGF0ZSBkaXJlY3RvcnkgdGhhdCBob2xkcyBkYXRhCi0gICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBwYWNrYWdpbmcgcHJvY2Vzcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVBLR0RFU1RXT1JLJz48ZmlsZW5hbWU+UEtHREVTVFdPUks8L2ZpbGVuYW1lPjwvbGluaz4gLQotICAgICAgICAgICAgICAgICAgICAgICAgQSB0ZW1wb3Jhcnkgd29yayBhcmVhIHVzZWQgYnkgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+IHRhc2suCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dERVNUJz48ZmlsZW5hbWU+UEtHREVTVDwvZmlsZW5hbWU+PC9saW5rPiAtCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgcGFyZW50IGRpcmVjdG9yeSBmb3IgcGFja2FnZXMgYWZ0ZXIgdGhleSBoYXZlCi0gICAgICAgICAgICAgICAgICAgICAgICBiZWVuIHNwbGl0LgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgVGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUgZGVmaW5lcyB0aGUgZmlsZXMgdGhhdCBnbyBpbnRvIGVhY2ggcGFja2FnZSBpbgotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFUyc+PGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+LgotICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IGRldGFpbHMgb24gaG93IHRoaXMgaXMgYWNjb21wbGlzaGVkLCB5b3UgY2FuCi0gICAgICAgICAgICAgICAgbG9vayBhdCB0aGUKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlJz48ZmlsZW5hbWU+cGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgIGNsYXNzLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgcGFja2FnZXMgYmVpbmcgY3JlYXRlZCAoUlBNLCBERUIsIG9yCi0gICAgICAgICAgICAgICAgSVBLKSwgdGhlIDxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlXyo8L2ZpbGVuYW1lPiB0YXNrCi0gICAgICAgICAgICAgICAgY3JlYXRlcyB0aGUgYWN0dWFsIHBhY2thZ2VzIGFuZCBwbGFjZXMgdGhlbSBpbiB0aGUKLSAgICAgICAgICAgICAgICBQYWNrYWdlIEZlZWQgYXJlYSwgd2hpY2ggaXMKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtUTVBESVJ9L2RlcGxveTwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VlIHRoZQotICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwYWNrYWdlLWZlZWRzLWRldi1lbnZpcm9ubWVudCc+UGFja2FnZSBGZWVkczwvbGluaz4iCi0gICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBkZXRhaWwgb24gdGhhdCBwYXJ0IG9mIHRoZSBidWlsZCBwcm9jZXNzLgotICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IGZvciBjcmVhdGluZyBmZWVkcyBkaXJlY3RseSBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVwbG95Lyo8L2ZpbGVuYW1lPiBkaXJlY3RvcmllcyBkb2VzIG5vdCBleGlzdC4KLSAgICAgICAgICAgICAgICAgICAgQ3JlYXRpbmcgc3VjaCBmZWVkcyB1c3VhbGx5IHJlcXVpcmVzIHNvbWUga2luZCBvZiBmZWVkCi0gICAgICAgICAgICAgICAgICAgIG1haW50ZW5hbmNlIG1lY2hhbmlzbSB0aGF0IHdvdWxkIHVwbG9hZCB0aGUgbmV3IHBhY2thZ2VzCi0gICAgICAgICAgICAgICAgICAgIGludG8gYW4gb2ZmaWNpYWwgcGFja2FnZSBmZWVkIChlLmcuIHRoZQotICAgICAgICAgICAgICAgICAgICDDhW5nc3Ryw7ZtIGRpc3RyaWJ1dGlvbikuCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBoaWdobHkgZGlzdHJpYnV0aW9uLXNwZWNpZmljCi0gICAgICAgICAgICAgICAgICAgIGFuZCB0aHVzIGlzIG5vdCBwcm92aWRlZCBvdXQgb2YgdGhlIGJveC4KLSAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0naW1hZ2UtZ2VuZXJhdGlvbi1kZXYtZW52aXJvbm1lbnQnPgotICAgICAgICAgICAgPHRpdGxlPkltYWdlIEdlbmVyYXRpb248L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBPbmNlIHBhY2thZ2VzIGFyZSBzcGxpdCBhbmQgc3RvcmVkIGluIHRoZSBQYWNrYWdlIEZlZWRzIGFyZWEsCi0gICAgICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyBCaXRCYWtlIHRvIGdlbmVyYXRlIHRoZQotICAgICAgICAgICAgICAgIHJvb3QgZmlsZXN5c3RlbSBpbWFnZToKLSAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvaW1hZ2UtZ2VuZXJhdGlvbi5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2aW4iIGRlcHRoPSI3aW4iIC8+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSBpbWFnZSBnZW5lcmF0aW9uIHByb2Nlc3MgY29uc2lzdHMgb2Ygc2V2ZXJhbCBzdGFnZXMgYW5kCi0gICAgICAgICAgICAgICAgZGVwZW5kcyBvbiBzZXZlcmFsIHRhc2tzIGFuZCB2YXJpYWJsZXMuCi0gICAgICAgICAgICAgICAgVGhlCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXJvb3Rmcyc+PGZpbGVuYW1lPmRvX3Jvb3RmczwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgIHRhc2sgY3JlYXRlcyB0aGUgcm9vdCBmaWxlc3lzdGVtIChmaWxlIGFuZCBkaXJlY3Rvcnkgc3RydWN0dXJlKQotICAgICAgICAgICAgICAgIGZvciBhbiBpbWFnZS4KLSAgICAgICAgICAgICAgICBUaGlzIHRhc2sgdXNlcyBzZXZlcmFsIGtleSB2YXJpYWJsZXMgdG8gaGVscCBjcmVhdGUgdGhlIGxpc3QKLSAgICAgICAgICAgICAgICBvZiBwYWNrYWdlcyB0byBhY3R1YWxseSBpbnN0YWxsOgotICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItSU1BR0VfSU5TVEFMTCc+PGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPjwvbGluaz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvdXQgdGhlIGJhc2Ugc2V0IG9mIHBhY2thZ2VzIHRvIGluc3RhbGwgZnJvbQotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFBhY2thZ2UgRmVlZHMgYXJlYS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0VYQ0xVREUnPjxmaWxlbmFtZT5QQUNLQUdFX0VYQ0xVREU8L2ZpbGVuYW1lPjwvbGluaz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgcGFja2FnZXMgdGhhdCBzaG91bGQgbm90IGJlIGluc3RhbGxlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgZmVhdHVyZXMgdG8gaW5jbHVkZSBpbiB0aGUgaW1hZ2UuCi0gICAgICAgICAgICAgICAgICAgICAgICBNb3N0IG9mIHRoZXNlIGZlYXR1cmVzIG1hcCB0byBhZGRpdGlvbmFsIHBhY2thZ2VzIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPjoKLSAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGFja2FnZSBiYWNrZW5kIHRvIHVzZSBhbmQgY29uc2VxdWVudGx5Ci0gICAgICAgICAgICAgICAgICAgICAgICBoZWxwcyBkZXRlcm1pbmUgd2hlcmUgdG8gbG9jYXRlIHBhY2thZ2VzIHdpdGhpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2UgRmVlZHMgYXJlYS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9MSU5HVUFTJz48ZmlsZW5hbWU+SU1BR0VfTElOR1VBUzwvZmlsZW5hbWU+PC9saW5rPjoKLSAgICAgICAgICAgICAgICAgICAgICAgIERldGVybWluZXMgdGhlIGxhbmd1YWdlKHMpIGZvciB3aGljaCBhZGRpdGlvbmFsCi0gICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSBzdXBwb3J0IHBhY2thZ2VzIGFyZSBpbnN0YWxsZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0lOU1RBTEwnPjxmaWxlbmFtZT5QQUNLQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPjwvbGluaz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmluYWwgbGlzdCBvZiBwYWNrYWdlcyBwYXNzZWQgdG8gdGhlIHBhY2thZ2UgbWFuYWdlcgotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGluc3RhbGxhdGlvbiBpbnRvIHRoZSBpbWFnZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBXaXRoCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1JPT1RGUyc+PGZpbGVuYW1lPklNQUdFX1JPT1RGUzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgIHBvaW50aW5nIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZXN5c3RlbSB1bmRlciBjb25zdHJ1Y3Rpb24gYW5kCi0gICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5QQUNLQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPiB2YXJpYWJsZSBwcm92aWRpbmcgdGhlCi0gICAgICAgICAgICAgICAgZmluYWwgbGlzdCBvZiBwYWNrYWdlcyB0byBpbnN0YWxsLCB0aGUgcm9vdCBmaWxlIHN5c3RlbSBpcwotICAgICAgICAgICAgICAgIGNyZWF0ZWQuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFBhY2thZ2UgaW5zdGFsbGF0aW9uIGlzIHVuZGVyIGNvbnRyb2wgb2YgdGhlIHBhY2thZ2UgbWFuYWdlcgotICAgICAgICAgICAgICAgIChlLmcuIGRuZi9ycG0sIG9wa2csIG9yIGFwdC9kcGtnKSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3IKLSAgICAgICAgICAgICAgICBub3QgcGFja2FnZSBtYW5hZ2VtZW50IGlzIGVuYWJsZWQgZm9yIHRoZSB0YXJnZXQuCi0gICAgICAgICAgICAgICAgQXQgdGhlIGVuZCBvZiB0aGUgcHJvY2VzcywgaWYgcGFja2FnZSBtYW5hZ2VtZW50IGlzIG5vdAotICAgICAgICAgICAgICAgIGVuYWJsZWQgZm9yIHRoZSB0YXJnZXQsIHRoZSBwYWNrYWdlIG1hbmFnZXIncyBkYXRhIGZpbGVzCi0gICAgICAgICAgICAgICAgYXJlIGRlbGV0ZWQgZnJvbSB0aGUgcm9vdCBmaWxlc3lzdGVtLgotICAgICAgICAgICAgICAgIEFzIHBhcnQgb2YgdGhlIGZpbmFsIHN0YWdlIG9mIHBhY2thZ2UgaW5zdGFsbGF0aW9uLCBwb3N0aW5zdGFsbAotICAgICAgICAgICAgICAgIHNjcmlwdHMgdGhhdCBhcmUgcGFydCBvZiB0aGUgcGFja2FnZXMgYXJlIHJ1bi4KLSAgICAgICAgICAgICAgICBBbnkgc2NyaXB0cyB0aGF0IGZhaWwgdG8gcnVuCi0gICAgICAgICAgICAgICAgb24gdGhlIGJ1aWxkIGhvc3QgYXJlIHJ1biBvbiB0aGUgdGFyZ2V0IHdoZW4gdGhlIHRhcmdldCBzeXN0ZW0KLSAgICAgICAgICAgICAgICBpcyBmaXJzdCBib290ZWQuCi0gICAgICAgICAgICAgICAgSWYgeW91IGFyZSB1c2luZyBhCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY3JlYXRpbmctYS1yZWFkLW9ubHktcm9vdC1maWxlc3lzdGVtJz5yZWFkLW9ubHkgcm9vdCBmaWxlc3lzdGVtPC91bGluaz4sCi0gICAgICAgICAgICAgICAgYWxsIHRoZSBwb3N0IGluc3RhbGxhdGlvbiBzY3JpcHRzIG11c3Qgc3VjY2VlZCBkdXJpbmcgdGhlCi0gICAgICAgICAgICAgICAgcGFja2FnZSBpbnN0YWxsYXRpb24gcGhhc2Ugc2luY2UgdGhlIHJvb3QgZmlsZXN5c3RlbSBpcwotICAgICAgICAgICAgICAgIHJlYWQtb25seS4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIGZpbmFsIHN0YWdlcyBvZiB0aGUgPGZpbGVuYW1lPmRvX3Jvb3RmczwvZmlsZW5hbWU+IHRhc2sKLSAgICAgICAgICAgICAgICBoYW5kbGUgcG9zdCBwcm9jZXNzaW5nLgotICAgICAgICAgICAgICAgIFBvc3QgcHJvY2Vzc2luZyBpbmNsdWRlcyBjcmVhdGlvbiBvZiBhIG1hbmlmZXN0IGZpbGUgYW5kCi0gICAgICAgICAgICAgICAgb3B0aW1pemF0aW9ucy4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIG1hbmlmZXN0IGZpbGUgKDxmaWxlbmFtZT4ubWFuaWZlc3Q8L2ZpbGVuYW1lPikgcmVzaWRlcwotICAgICAgICAgICAgICAgIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgcm9vdCBmaWxlc3lzdGVtIGltYWdlLgotICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBsaXN0cyBvdXQsIGxpbmUtYnktbGluZSwgdGhlIGluc3RhbGxlZCBwYWNrYWdlcy4KLSAgICAgICAgICAgICAgICBUaGUgbWFuaWZlc3QgZmlsZSBpcyB1c2VmdWwgZm9yIHRoZQotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXRlc3RpbWFnZSonPjxmaWxlbmFtZT50ZXN0aW1hZ2U8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICBjbGFzcywgZm9yIGV4YW1wbGUsIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0byBydW4KLSAgICAgICAgICAgICAgICBzcGVjaWZpYyB0ZXN0cy4KLSAgICAgICAgICAgICAgICBTZWUgdGhlCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX01BTklGRVNUJz48ZmlsZW5hbWU+SU1BR0VfTUFOSUZFU1Q8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICB2YXJpYWJsZSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgT3B0aW1pemluZyBwcm9jZXNzZXMgcnVuIGFjcm9zcyB0aGUgaW1hZ2UgaW5jbHVkZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ta2xpYnM8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPnByZWxpbms8L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICBhbmQgYW55IG90aGVyIHBvc3QtcHJvY2Vzc2luZyBjb21tYW5kcyBhcyBkZWZpbmVkIGJ5IHRoZQotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCc+PGZpbGVuYW1lPlJPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5ta2xpYnM8L2ZpbGVuYW1lPiBwcm9jZXNzIG9wdGltaXplcyB0aGUgc2l6ZQotICAgICAgICAgICAgICAgIG9mIHRoZSBsaWJyYXJpZXMsIHdoaWxlIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wcmVsaW5rPC9maWxlbmFtZT4gcHJvY2VzcyBvcHRpbWl6ZXMgdGhlIGR5bmFtaWMKLSAgICAgICAgICAgICAgICBsaW5raW5nIG9mIHNoYXJlZCBsaWJyYXJpZXMgdG8gcmVkdWNlIHN0YXJ0IHVwIHRpbWUgb2YKLSAgICAgICAgICAgICAgICBleGVjdXRhYmxlcy4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQWZ0ZXIgdGhlIHJvb3QgZmlsZXN5c3RlbSBpcyBidWlsdCwgcHJvY2Vzc2luZyBiZWdpbnMgb24KLSAgICAgICAgICAgICAgICB0aGUgaW1hZ2UgdGhyb3VnaCB0aGUgPGZpbGVuYW1lPmRvX2ltYWdlPC9maWxlbmFtZT4gdGFzay4KLSAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIHJ1bnMgYW55IHByZS1wcm9jZXNzaW5nIGNvbW1hbmRzIGFzIGRlZmluZWQKLSAgICAgICAgICAgICAgICBieSB0aGUKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUFJFUFJPQ0VTU19DT01NQU5EJz48ZmlsZW5hbWU+SU1BR0VfUFJFUFJPQ0VTU19DT01NQU5EPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIGJlZm9yZQotICAgICAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNyZWF0ZXMgdGhlIGZpbmFsIGltYWdlIG91dHB1dAotICAgICAgICAgICAgICAgIGZpbGVzLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRvX2ltYWdlPC9maWxlbmFtZT4gdGFzayBkeW5hbWljYWxseSBjcmVhdGVzCi0gICAgICAgICAgICAgICAgb3RoZXIgPGZpbGVuYW1lPmRvX2ltYWdlXyo8L2ZpbGVuYW1lPiB0YXNrcyBhcyBuZWVkZWQsIHdoaWNoCi0gICAgICAgICAgICAgICAgaW5jbHVkZSBjb21wcmVzc2luZyB0aGUgcm9vdCBmaWxlc3lzdGVtIGltYWdlIHRvIHJlZHVjZSB0aGUKLSAgICAgICAgICAgICAgICBvdmVyYWxsIHNpemUgb2YgdGhlIGltYWdlLgotICAgICAgICAgICAgICAgIFRoZSBwcm9jZXNzIHR1cm5zIGV2ZXJ5dGhpbmcgaW50byBhbiBpbWFnZSBmaWxlIG9yIGEgc2V0IG9mCi0gICAgICAgICAgICAgICAgaW1hZ2UgZmlsZXMuCi0gICAgICAgICAgICAgICAgVGhlIGZvcm1hdHMgdXNlZCBmb3IgdGhlIHJvb3QgZmlsZXN5c3RlbSBkZXBlbmQgb24gdGhlCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSBmaW5hbCB0YXNrIGludm9sdmVkIGluIGltYWdlIGNyZWF0aW9uIGlzIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbWFnZV9jb21wbGV0ZTwvZmlsZW5hbWU+IHRhc2suCi0gICAgICAgICAgICAgICAgVGhpcyB0YXNrIGNvbXBsZXRlcyB0aGUgaW1hZ2UgYnkgYXBwbHlpbmcgYW55IGltYWdlCi0gICAgICAgICAgICAgICAgcG9zdCBwcm9jZXNzaW5nIGFzIGRlZmluZWQgdGhyb3VnaCB0aGUKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUE9TVFBST0NFU1NfQ09NTUFORCc+PGZpbGVuYW1lPklNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQ8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICB2YXJpYWJsZS4KLSAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgc3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBvbmNlIHRoZQotICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGNyZWF0ZWQgdGhlIGZpbmFsIGltYWdlIG91dHB1dAotICAgICAgICAgICAgICAgIGZpbGVzLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICBUaGUgZW50aXJlIGltYWdlIGdlbmVyYXRpb24gcHJvY2VzcyBpcyBydW4gdW5kZXIgUHNldWRvLgotICAgICAgICAgICAgICAgIFJ1bm5pbmcgdW5kZXIgUHNldWRvIGVuc3VyZXMgdGhhdCB0aGUgZmlsZXMgaW4gdGhlIHJvb3QKLSAgICAgICAgICAgICAgICBmaWxlc3lzdGVtIGhhdmUgY29ycmVjdCBvd25lcnNoaXAuCi0gICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nc2RrLWdlbmVyYXRpb24tZGV2LWVudmlyb25tZW50Jz4KLSAgICAgICAgICAgIDx0aXRsZT5TREsgR2VuZXJhdGlvbjwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgQml0QmFrZSB0byBnZW5lcmF0ZSB0aGUKLSAgICAgICAgICAgICAgICBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKFNESykgaW5zdGFsbGVyIHNjcmlwdCBmb3IgYm90aCB0aGUKLSAgICAgICAgICAgICAgICBzdGFuZGFyZCBhbmQgZXh0ZW5zaWJsZSBTREtzOgotICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9zZGstZ2VuZXJhdGlvbi5wbmciIGFsaWduPSJjZW50ZXIiIC8+Ci0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4KLSAgICAgICAgICAgICAgICBnZW5lcmF0aW9uLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbi1nZW5lcmF0aW9uJz5Dcm9zcy1EZXZlbG9wbWVudCBUb29sY2hhaW4gR2VuZXJhdGlvbjwvbGluaz4iCi0gICAgICAgICAgICAgICAgc2VjdGlvbi4KLSAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gYWR2YW50YWdlcyBnYWluZWQgd2hlbiBidWlsZGluZyBhCi0gICAgICAgICAgICAgICAgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluIHVzaW5nIHRoZQotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wb3B1bGF0ZV9zZGsnPjxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zZGs8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICB0YXNrLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1NES19VUkw7I3Nkay1idWlsZGluZy1hbi1zZGstaW5zdGFsbGVyJz5CdWlsZGluZyBhbiBTREsgSW5zdGFsbGVyPC91bGluaz4iCi0gICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKFNESykKLSAgICAgICAgICAgICAgICBEZXZlbG9wZXIncyBHdWlkZS4KLSAgICAgICAgICAgIDwvbm90ZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgTGlrZSBpbWFnZSBnZW5lcmF0aW9uLCB0aGUgU0RLIHNjcmlwdCBwcm9jZXNzIGNvbnNpc3RzIG9mCi0gICAgICAgICAgICAgICAgc2V2ZXJhbCBzdGFnZXMgYW5kIGRlcGVuZHMgb24gbWFueSB2YXJpYWJsZXMuCi0gICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zZGs8L2ZpbGVuYW1lPiBhbmQKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc2RrX2V4dDwvZmlsZW5hbWU+IHRhc2tzIHVzZSB0aGVzZQotICAgICAgICAgICAgICAgIGtleSB2YXJpYWJsZXMgdG8gaGVscCBjcmVhdGUgdGhlIGxpc3Qgb2YgcGFja2FnZXMgdG8gYWN0dWFsbHkKLSAgICAgICAgICAgICAgICBpbnN0YWxsLgotICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgdmFyaWFibGVzIGxpc3RlZCBpbiB0aGUgZmlndXJlLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1kZXYtZW52aXJvbm1lbnQnPkFwcGxpY2F0aW9uIERldmVsb3BtZW50IFNESzwvbGluaz4iCi0gICAgICAgICAgICAgICAgc2VjdGlvbi4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zZGs8L2ZpbGVuYW1lPiB0YXNrIGhlbHBzIGNyZWF0ZQotICAgICAgICAgICAgICAgIHRoZSBzdGFuZGFyZCBTREsgYW5kIGhhbmRsZXMgdHdvIHBhcnRzOiBhIHRhcmdldCBwYXJ0IGFuZCBhCi0gICAgICAgICAgICAgICAgaG9zdCBwYXJ0LgotICAgICAgICAgICAgICAgIFRoZSB0YXJnZXQgcGFydCBpcyB0aGUgcGFydCBidWlsdCBmb3IgdGhlIHRhcmdldCBoYXJkd2FyZSBhbmQKLSAgICAgICAgICAgICAgICBpbmNsdWRlcyBsaWJyYXJpZXMgYW5kIGhlYWRlcnMuCi0gICAgICAgICAgICAgICAgVGhlIGhvc3QgcGFydCBpcyB0aGUgcGFydCBvZiB0aGUgU0RLIHRoYXQgcnVucyBvbiB0aGUKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLTUFDSElORSc+PGZpbGVuYW1lPlNES01BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4uCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc2RrX2V4dDwvZmlsZW5hbWU+IHRhc2sgaGVscHMgY3JlYXRlCi0gICAgICAgICAgICAgICAgdGhlIGV4dGVuc2libGUgU0RLIGFuZCBoYW5kbGVzIGhvc3QgYW5kIHRhcmdldCBwYXJ0cwotICAgICAgICAgICAgICAgIGRpZmZlcmVudGx5IHRoYW4gaXRzIGNvdW50ZXIgcGFydCBkb2VzIGZvciB0aGUgc3RhbmRhcmQgU0RLLgotICAgICAgICAgICAgICAgIEZvciB0aGUgZXh0ZW5zaWJsZSBTREssIHRoZSB0YXNrIGVuY2Fwc3VsYXRlcyB0aGUgYnVpbGQgc3lzdGVtLAotICAgICAgICAgICAgICAgIHdoaWNoIGluY2x1ZGVzIGV2ZXJ5dGhpbmcgbmVlZGVkIChob3N0IGFuZCB0YXJnZXQpIGZvciB0aGUgU0RLLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBSZWdhcmRsZXNzIG9mIHRoZSB0eXBlIG9mIFNESyBiZWluZyBjb25zdHJ1Y3RlZCwgdGhlCi0gICAgICAgICAgICAgICAgdGFza3MgcGVyZm9ybSBzb21lIGNsZWFudXAgYWZ0ZXIgd2hpY2ggYSBjcm9zcy1kZXZlbG9wbWVudAotICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBhbmQgYW55IG5lZWRlZCBjb25maWd1cmF0aW9uIGZpbGVzCi0gICAgICAgICAgICAgICAgYXJlIGNyZWF0ZWQuCi0gICAgICAgICAgICAgICAgVGhlIGZpbmFsIG91dHB1dCBpcyB0aGUgQ3Jvc3MtZGV2ZWxvcG1lbnQKLSAgICAgICAgICAgICAgICB0b29sY2hhaW4gaW5zdGFsbGF0aW9uIHNjcmlwdCAoPGZpbGVuYW1lPi5zaDwvZmlsZW5hbWU+IGZpbGUpLAotICAgICAgICAgICAgICAgIHdoaWNoIGluY2x1ZGVzIHRoZSBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQuCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nc3RhbXAtZmlsZXMtYW5kLXRoZS1yZXJ1bm5pbmctb2YtdGFza3MnPgotICAgICAgICAgICAgPHRpdGxlPlN0YW1wIEZpbGVzIGFuZCB0aGUgUmVydW5uaW5nIG9mIFRhc2tzPC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgRm9yIGVhY2ggdGFzayB0aGF0IGNvbXBsZXRlcyBzdWNjZXNzZnVsbHksIEJpdEJha2Ugd3JpdGVzIGEKLSAgICAgICAgICAgICAgICBzdGFtcCBmaWxlIGludG8gdGhlCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNUQU1QU19ESVInPjxmaWxlbmFtZT5TVEFNUFNfRElSPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgZGlyZWN0b3J5LgotICAgICAgICAgICAgICAgIFRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0YW1wIGZpbGUncyBmaWxlbmFtZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZQotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFNUCc+PGZpbGVuYW1lPlNUQU1QPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUsIGFuZCB0aGUgZW5kIG9mIHRoZSBuYW1lIGNvbnNpc3RzIG9mIHRoZSB0YXNrJ3MgbmFtZQotICAgICAgICAgICAgICAgIGFuZCBjdXJyZW50Ci0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyNjaGVja3N1bXMnPmlucHV0IGNoZWNrc3VtPC91bGluaz4uCi0gICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgIFRoaXMgbmFtaW5nIHNjaGVtZSBhc3N1bWVzIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyN2YXItQkJfU0lHTkFUVVJFX0hBTkRMRVInPjxmaWxlbmFtZT5CQl9TSUdOQVRVUkVfSEFORExFUjwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgaXMgIk9FQmFzaWNIYXNoIiwgd2hpY2ggaXMgYWxtb3N0IGFsd2F5cyB0aGUgY2FzZSBpbgotICAgICAgICAgICAgICAgICAgICBjdXJyZW50IE9wZW5FbWJlZGRlZC4KLSAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgVG8gZGV0ZXJtaW5lIGlmIGEgdGFzayBuZWVkcyB0byBiZSByZXJ1biwgQml0QmFrZSBjaGVja3MgaWYgYQotICAgICAgICAgICAgICAgIHN0YW1wIGZpbGUgd2l0aCBhIG1hdGNoaW5nIGlucHV0IGNoZWNrc3VtIGV4aXN0cyBmb3IgdGhlIHRhc2suCi0gICAgICAgICAgICAgICAgSWYgc3VjaCBhIHN0YW1wIGZpbGUgZXhpc3RzLCB0aGUgdGFzaydzIG91dHB1dCBpcyBhc3N1bWVkIHRvCi0gICAgICAgICAgICAgICAgZXhpc3QgYW5kIHN0aWxsIGJlIHZhbGlkLgotICAgICAgICAgICAgICAgIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCB0aGUgdGFzayBpcyByZXJ1bi4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIHN0YW1wIG1lY2hhbmlzbSBpcyBtb3JlIGdlbmVyYWwgdGhhbiB0aGUgc2hhcmVkCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlIChzc3RhdGUpIGNhY2hlIG1lY2hhbmlzbSBkZXNjcmliZWQgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZXRzY2VuZS10YXNrcy1hbmQtc2hhcmVkLXN0YXRlJz5TZXRzY2VuZSBUYXNrcyBhbmQgU2hhcmVkIFN0YXRlPC9saW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBhdm9pZHMgcmVydW5uaW5nIGFueSB0YXNrIHRoYXQgaGFzIGEgdmFsaWQKLSAgICAgICAgICAgICAgICAgICAgc3RhbXAgZmlsZSwgbm90IGp1c3QgdGFza3MgdGhhdCBjYW4gYmUgYWNjZWxlcmF0ZWQgdGhyb3VnaAotICAgICAgICAgICAgICAgICAgICB0aGUgc3N0YXRlIGNhY2hlLjwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+SG93ZXZlciwgeW91IHNob3VsZCByZWFsaXplIHRoYXQgc3RhbXAgZmlsZXMgb25seQotICAgICAgICAgICAgICAgICAgICBzZXJ2ZSBhcyBhIG1hcmtlciB0aGF0IHNvbWUgd29yayBoYXMgYmVlbiBkb25lIGFuZCB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIHRoZXNlIGZpbGVzIGRvIG5vdCByZWNvcmQgdGFzayBvdXRwdXQuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBhY3R1YWwgdGFzayBvdXRwdXQgd291bGQgdXN1YWxseSBiZSBzb21ld2hlcmUgaW4KLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICAoZS5nLiBpbiBzb21lIHJlY2lwZSdzCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPi4pCi0gICAgICAgICAgICAgICAgICAgIFdoYXQgdGhlIHNzdGF0ZSBjYWNoZSBtZWNoYW5pc20gYWRkcyBpcyBhIHdheSB0byBjYWNoZSB0YXNrCi0gICAgICAgICAgICAgICAgICAgIG91dHB1dCB0aGF0IGNhbiB0aGVuIGJlIHNoYXJlZCBiZXR3ZWVuIGJ1aWxkIG1hY2hpbmVzLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgIFNpbmNlIDxmaWxlbmFtZT5TVEFNUFNfRElSPC9maWxlbmFtZT4gaXMgdXN1YWxseSBhIHN1YmRpcmVjdG9yeQotICAgICAgICAgICAgICAgIG9mIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiwgcmVtb3ZpbmcKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4gd2lsbCBhbHNvIHJlbW92ZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TVEFNUFNfRElSPC9maWxlbmFtZT4sIHdoaWNoIG1lYW5zIHRhc2tzIHdpbGwKLSAgICAgICAgICAgICAgICBwcm9wZXJseSBiZSByZXJ1biB0byByZXBvcHVsYXRlIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgc29tZSB0YXNrIHRvIGFsd2F5cyBiZSBjb25zaWRlcmVkICJvdXQgb2YgZGF0ZSIsCi0gICAgICAgICAgICAgICAgeW91IGNhbiBtYXJrIGl0IHdpdGggdGhlCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyN2YXJpYWJsZS1mbGFncyc+PGZpbGVuYW1lPm5vc3RhbXA8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgICAgICAgICAgdmFyZmxhZy4KLSAgICAgICAgICAgICAgICBJZiBzb21lIG90aGVyIHRhc2sgZGVwZW5kcyBvbiBzdWNoIGEgdGFzaywgdGhlbiB0aGF0IHRhc2sgd2lsbAotICAgICAgICAgICAgICAgIGFsc28gYWx3YXlzIGJlIGNvbnNpZGVyZWQgb3V0IG9mIGRhdGUsIHdoaWNoIG1pZ2h0IG5vdCBiZSB3aGF0Ci0gICAgICAgICAgICAgICAgeW91IHdhbnQuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEZvciBkZXRhaWxzIG9uIGhvdyB0byB2aWV3IGluZm9ybWF0aW9uIGFib3V0IGEgdGFzaydzCi0gICAgICAgICAgICAgICAgc2lnbmF0dXJlLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5ncG9reS12aWV3aW5nLXRhc2stdmFyaWFibGUtZGVwZW5kZW5jaWVzJz5WaWV3aW5nIFRhc2sgVmFyaWFibGUgRGVwZW5kZW5jaWVzPC9saW5rPiIKLSAgICAgICAgICAgICAgICBzZWN0aW9uLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J3NldHNjZW5lLXRhc2tzLWFuZC1zaGFyZWQtc3RhdGUnPgotICAgICAgICAgICAgPHRpdGxlPlNldHNjZW5lIFRhc2tzIGFuZCBTaGFyZWQgU3RhdGU8L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGUgZGVzY3JpcHRpb24gb2YgdGFza3Mgc28gZmFyIGFzc3VtZXMgdGhhdCBCaXRCYWtlIG5lZWRzIHRvCi0gICAgICAgICAgICAgICAgYnVpbGQgZXZlcnl0aGluZyBhbmQgdGhlcmUgYXJlIG5vIHByZWJ1aWx0IG9iamVjdHMgYXZhaWxhYmxlLgotICAgICAgICAgICAgICAgIEJpdEJha2UgZG9lcyBzdXBwb3J0IHNraXBwaW5nIHRhc2tzIGlmIHByZWJ1aWx0IG9iamVjdHMgYXJlCi0gICAgICAgICAgICAgICAgYXZhaWxhYmxlLgotICAgICAgICAgICAgICAgIFRoZXNlIG9iamVjdHMgYXJlIHVzdWFsbHkgbWFkZSBhdmFpbGFibGUgaW4gdGhlIGZvcm0gb2YgYQotICAgICAgICAgICAgICAgIHNoYXJlZCBzdGF0ZSAoc3N0YXRlKSBjYWNoZS4KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHZhcmlhYmxlcyBhZmZlY3Rpbmcgc3N0YXRlLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TU1RBVEVfRElSJz48ZmlsZW5hbWU+U1NUQVRFX0RJUjwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICBhbmQKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNTVEFURV9NSVJST1JTJz48ZmlsZW5hbWU+U1NUQVRFX01JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgotICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIGlkZWEgb2YgYSBzZXRzY2VuZSB0YXNrIChpLmUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fPC9maWxlbmFtZT48cmVwbGFjZWFibGU+dGFza25hbWU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT5fc2V0c2NlbmU8L2ZpbGVuYW1lPikKLSAgICAgICAgICAgICAgICBpcyBhIHZlcnNpb24gb2YgdGhlIHRhc2sgd2hlcmUKLSAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIGJ1aWxkaW5nIHNvbWV0aGluZywgQml0QmFrZSBjYW4gc2tpcCB0byB0aGUgZW5kCi0gICAgICAgICAgICAgICAgcmVzdWx0IGFuZCBzaW1wbHkgcGxhY2UgYSBzZXQgb2YgZmlsZXMgaW50byBzcGVjaWZpYyBsb2NhdGlvbnMKLSAgICAgICAgICAgICAgICBhcyBuZWVkZWQuCi0gICAgICAgICAgICAgICAgSW4gc29tZSBjYXNlcywgaXQgbWFrZXMgc2Vuc2UgdG8gaGF2ZSBhIHNldHNjZW5lIHRhc2sgdmFyaWFudAotICAgICAgICAgICAgICAgIChlLmcuIGdlbmVyYXRpbmcgcGFja2FnZSBmaWxlcyBpbiB0aGUKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV8qPC9maWxlbmFtZT4gdGFzaykuCi0gICAgICAgICAgICAgICAgSW4gb3RoZXIgY2FzZXMsIGl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UsIChlLmcuIGEKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGF0Y2gnPjxmaWxlbmFtZT5kb19wYXRjaDwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgIHRhc2sgb3IKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtdW5wYWNrJz48ZmlsZW5hbWU+ZG9fdW5wYWNrPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgdGFzaykgc2luY2UgdGhlIHdvcmsgaW52b2x2ZWQgd291bGQgYmUgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuCi0gICAgICAgICAgICAgICAgdGhlIHVuZGVybHlpbmcgdGFzay4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgSW4gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0sIHRoZSBjb21tb24gdGFza3MgdGhhdCBoYXZlCi0gICAgICAgICAgICAgICAgc2V0c2NlbmUgdmFyaWFudHMgYXJlIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlJz48ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPiwKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV8qPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWRlcGxveSc+PGZpbGVuYW1lPmRvX2RlcGxveTwvZmlsZW5hbWU+PC9saW5rPiwKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZWRhdGEnPjxmaWxlbmFtZT5kb19wYWNrYWdlZGF0YTwvZmlsZW5hbWU+PC9saW5rPiwKLSAgICAgICAgICAgICAgICBhbmQKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcG9wdWxhdGVfc3lzcm9vdCc+PGZpbGVuYW1lPmRvX3BvcHVsYXRlX3N5c3Jvb3Q8L2ZpbGVuYW1lPjwvbGluaz4uCi0gICAgICAgICAgICAgICAgTm90aWNlIHRoYXQgdGhlc2UgYXJlIG1vc3Qgb2YgdGhlIHRhc2tzIHdob3NlIG91dHB1dCBpcyBhbgotICAgICAgICAgICAgICAgIGVuZCByZXN1bHQuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBrbm93bGVkZ2Ugb2YgdGhlIHJlbGF0aW9uc2hpcAotICAgICAgICAgICAgICAgIGJldHdlZW4gdGhlc2UgdGFza3MgYW5kIG90aGVyIHRhc2tzIHRoYXQgcHJlY2VkZSB0aGVtLgotICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiBCaXRCYWtlIHJ1bnMKLSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZTwvZmlsZW5hbWU+IGZvcgotICAgICAgICAgICAgICAgIHNvbWV0aGluZywgdGhlcmUgaXMgbGl0dGxlIHBvaW50IGluIHJ1bm5pbmcgYW55IG9mIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19mZXRjaDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZG9fdW5wYWNrPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3BhdGNoPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+LAotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT4sIGFuZAotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4gdGFza3MuCi0gICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgPGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPiBuZWVkcyB0byBiZSBydW4sCi0gICAgICAgICAgICAgICAgQml0QmFrZSB3b3VsZCBuZWVkIHRvIHJ1biB0aG9zZSBvdGhlciB0YXNrcy4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgSXQgYmVjb21lcyBtb3JlIGNvbXBsaWNhdGVkIGlmIGV2ZXJ5dGhpbmcgY2FuIGNvbWUgZnJvbSBhbgotICAgICAgICAgICAgICAgIHNzdGF0ZSBjYWNoZSBiZWNhdXNlIHNvbWUgb2JqZWN0cyBhcmUgc2ltcGx5IG5vdCByZXF1aXJlZCBhdAotICAgICAgICAgICAgICAgIGFsbC4KLSAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGRvIG5vdCBuZWVkIGEgY29tcGlsZXIgb3IgbmF0aXZlIHRvb2xzLCBzdWNoCi0gICAgICAgICAgICAgICAgYXMgcXVpbHQsIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gY29tcGlsZSBvciBwYXRjaC4KLSAgICAgICAgICAgICAgICBJZiB0aGUgPGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfKjwvZmlsZW5hbWU+IHBhY2thZ2VzIGFyZQotICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBmcm9tIHNzdGF0ZSwgQml0QmFrZSBkb2VzIG5vdCBuZWVkIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT4gdGFzayBkYXRhLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUbyBoYW5kbGUgYWxsIHRoZXNlIGNvbXBsZXhpdGllcywgQml0QmFrZSBydW5zIGluIHR3byBwaGFzZXMuCi0gICAgICAgICAgICAgICAgVGhlIGZpcnN0IGlzIHRoZSAic2V0c2NlbmUiIHN0YWdlLgotICAgICAgICAgICAgICAgIER1cmluZyB0aGlzIHN0YWdlLCBCaXRCYWtlIGZpcnN0IGNoZWNrcyB0aGUgc3N0YXRlIGNhY2hlIGZvcgotICAgICAgICAgICAgICAgIGFueSB0YXJnZXRzIGl0IGlzIHBsYW5uaW5nIHRvIGJ1aWxkLgotICAgICAgICAgICAgICAgIEJpdEJha2UgZG9lcyBhIGZhc3QgY2hlY2sgdG8gc2VlIGlmIHRoZSBvYmplY3QgZXhpc3RzIHJhdGhlcgotICAgICAgICAgICAgICAgIHRoYW4gYSBjb21wbGV0ZSBkb3dubG9hZC4KLSAgICAgICAgICAgICAgICBJZiBub3RoaW5nIGV4aXN0cywgdGhlIHNlY29uZCBwaGFzZSwgd2hpY2ggaXMgdGhlIHNldHNjZW5lCi0gICAgICAgICAgICAgICAgc3RhZ2UsIGNvbXBsZXRlcyBhbmQgdGhlIG1haW4gYnVpbGQgcHJvY2VlZHMuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIElmIG9iamVjdHMgYXJlIGZvdW5kIGluIHRoZSBzc3RhdGUgY2FjaGUsIHRoZSBPcGVuRW1iZWRkZWQKLSAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gd29ya3MgYmFja3dhcmRzIGZyb20gdGhlIGVuZCB0YXJnZXRzIHNwZWNpZmllZAotICAgICAgICAgICAgICAgIGJ5IHRoZSB1c2VyLgotICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiBhbiBpbWFnZSBpcyBiZWluZyBidWlsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAotICAgICAgICAgICAgICAgIHN5c3RlbSBmaXJzdCBsb29rcyBmb3IgdGhlIHBhY2thZ2VzIG5lZWRlZCBmb3IgdGhhdCBpbWFnZSBhbmQKLSAgICAgICAgICAgICAgICB0aGUgdG9vbHMgbmVlZGVkIHRvIGNvbnN0cnVjdCBhbiBpbWFnZS4KLSAgICAgICAgICAgICAgICBJZiB0aG9zZSBhcmUgYXZhaWxhYmxlLCB0aGUgY29tcGlsZXIgaXMgbm90IG5lZWRlZC4KLSAgICAgICAgICAgICAgICBUaHVzLCB0aGUgY29tcGlsZXIgaXMgbm90IGV2ZW4gZG93bmxvYWRlZC4KLSAgICAgICAgICAgICAgICBJZiBzb21ldGhpbmcgd2FzIGZvdW5kIHRvIGJlIHVuYXZhaWxhYmxlLCBvciB0aGUgZG93bmxvYWQgb3IKLSAgICAgICAgICAgICAgICBzZXRzY2VuZSB0YXNrIGZhaWxzLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0aGVuIHRyaWVzCi0gICAgICAgICAgICAgICAgdG8gaW5zdGFsbCBkZXBlbmRlbmNpZXMsIHN1Y2ggYXMgdGhlIGNvbXBpbGVyLCBmcm9tIHRoZSBjYWNoZS4KLSAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIGF2YWlsYWJpbGl0eSBvZiBvYmplY3RzIGluIHRoZSBzc3RhdGUgY2FjaGUgaXMgaGFuZGxlZCBieQotICAgICAgICAgICAgICAgIHRoZSBmdW5jdGlvbiBzcGVjaWZpZWQgYnkgdGhlCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyN2YXItQkJfSEFTSENIRUNLX0ZVTkNUSU9OJz48ZmlsZW5hbWU+QkJfSEFTSENIRUNLX0ZVTkNUSU9OPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCByZXR1cm5zIGEgbGlzdCBvZiB0aGUgb2JqZWN0cyB0aGF0IGFyZSBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBieSB0aGUKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I3Zhci1CQl9TRVRTQ0VORV9ERVBWQUxJRCc+PGZpbGVuYW1lPkJCX1NFVFNDRU5FX0RFUFZBTElEPC9maWxlbmFtZT48L3VsaW5rPgotICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciBhIGdpdmVuCi0gICAgICAgICAgICAgICAgZGVwZW5kZW5jeSBuZWVkcyB0byBiZSBmb2xsb3dlZCwgYW5kIHdoZXRoZXIgZm9yIGFueSBnaXZlbgotICAgICAgICAgICAgICAgIHJlbGF0aW9uc2hpcCB0aGUgZnVuY3Rpb24gbmVlZHMgdG8gYmUgcGFzc2VkLgotICAgICAgICAgICAgICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgVHJ1ZSBvciBGYWxzZSB2YWx1ZS4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSdpbWFnZXMtZGV2LWVudmlyb25tZW50Jz4KLSAgICAgICAgPHRpdGxlPkltYWdlczwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgaW1hZ2VzIHByb2R1Y2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCi0gICAgICAgICAgICBhcmUgY29tcHJlc3NlZCBmb3JtcyBvZiB0aGUKLSAgICAgICAgICAgIHJvb3QgZmlsZXN5c3RlbSB0aGF0IGFyZSByZWFkeSB0byBib290IG9uIGEgdGFyZ2V0IGRldmljZS4KLSAgICAgICAgICAgIFlvdSBjYW4gc2VlIGZyb20gdGhlCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSdnZW5lcmFsLXlvY3RvLWVudmlyb25tZW50LWZpZ3VyZSc+Z2VuZXJhbCBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50IGZpZ3VyZTwvbGluaz4KLSAgICAgICAgICAgIHRoYXQgQml0QmFrZSBvdXRwdXQsIGluIHBhcnQsIGNvbnNpc3RzIG9mIGltYWdlcy4KLSAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBpcyBnb2luZyB0byBsb29rIG1vcmUgY2xvc2VseSBhdCB0aGlzIG91dHB1dDoKLSAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9pbWFnZXMucG5nIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNS41aW4iIGRlcHRoPSI1LjVpbiIgLz4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgRm9yIGEgbGlzdCBvZiBleGFtcGxlIGltYWdlcyB0aGF0IHRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzLAotICAgICAgICAgICAgc2VlIHRoZQotICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1pbWFnZXMnPkltYWdlczwvbGluaz4iIGNoYXB0ZXIuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEltYWdlcyBhcmUgd3JpdHRlbiBvdXQgdG8gdGhlCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+Ci0gICAgICAgICAgICBpbnNpZGUgdGhlIDxmaWxlbmFtZT50bXAvZGVwbG95L2ltYWdlcy88cmVwbGFjZWFibGU+bWFjaGluZTwvcmVwbGFjZWFibGU+LzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICBmb2xkZXIgYXMgc2hvd24gaW4gdGhlIGZpZ3VyZS4KLSAgICAgICAgICAgIFRoaXMgZm9sZGVyIGNvbnRhaW5zIGFueSBmaWxlcyBleHBlY3RlZCB0byBiZSBsb2FkZWQgb24gdGhlCi0gICAgICAgICAgICB0YXJnZXQgZGV2aWNlLgotICAgICAgICAgICAgVGhlCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUic+PGZpbGVuYW1lPkRFUExPWV9ESVI8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgIHZhcmlhYmxlIHBvaW50cyB0byB0aGUgPGZpbGVuYW1lPmRlcGxveTwvZmlsZW5hbWU+IGRpcmVjdG9yeSwKLSAgICAgICAgICAgIHdoaWxlIHRoZQotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfSU1BR0UnPjxmaWxlbmFtZT5ERVBMT1lfRElSX0lNQUdFPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICB2YXJpYWJsZSBwb2ludHMgdG8gdGhlIGFwcHJvcHJpYXRlIGRpcmVjdG9yeSBjb250YWluaW5nIGltYWdlcyBmb3IKLSAgICAgICAgICAgIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCi0gICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmtlcm5lbC1pbWFnZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgICAgIEEga2VybmVsIGJpbmFyeSBmaWxlLgotICAgICAgICAgICAgICAgICAgICBUaGUgPGxpbmsgbGlua2VuZD0ndmFyLUtFUk5FTF9JTUFHRVRZUEUnPjxmaWxlbmFtZT5LRVJORUxfSU1BR0VUWVBFPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHNldHRpbmcgZGV0ZXJtaW5lcyB0aGUgbmFtaW5nIHNjaGVtZSBmb3IgdGhlCi0gICAgICAgICAgICAgICAgICAgIGtlcm5lbCBpbWFnZSBmaWxlLgotICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhhdCB2YXJpYWJsZSwgdGhlIGZpbGUgY291bGQgYmVnaW4gd2l0aAotICAgICAgICAgICAgICAgICAgICBhIHZhcmlldHkgb2YgbmFtaW5nIHN0cmluZ3MuCi0gICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGVwbG95L2ltYWdlcy88cmVwbGFjZWFibGU+bWFjaGluZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGNhbiBjb250YWluIG11bHRpcGxlIGltYWdlIGZpbGVzIGZvciB0aGUKLSAgICAgICAgICAgICAgICAgICAgbWFjaGluZS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5yb290LWZpbGVzeXN0ZW0taW1hZ2U8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgICAgICBSb290IGZpbGVzeXN0ZW1zIGZvciB0aGUgdGFyZ2V0IGRldmljZSAoZS5nLgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ki5leHQzPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPiouYnoyPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgZmlsZXMpLgotICAgICAgICAgICAgICAgICAgICBUaGUgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHNldHRpbmcgZGV0ZXJtaW5lcyB0aGUgcm9vdCBmaWxlc3lzdGVtIGltYWdlCi0gICAgICAgICAgICAgICAgICAgIHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGVwbG95L2ltYWdlcy88cmVwbGFjZWFibGU+bWFjaGluZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGNhbiBjb250YWluIG11bHRpcGxlIHJvb3QgZmlsZXN5c3RlbXMgZm9yIHRoZQotICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmtlcm5lbC1tb2R1bGVzPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPjoKLSAgICAgICAgICAgICAgICAgICAgVGFyYmFsbHMgdGhhdCBjb250YWluIGFsbCB0aGUgbW9kdWxlcyBidWlsdCBmb3IgdGhlIGtlcm5lbC4KLSAgICAgICAgICAgICAgICAgICAgS2VybmVsIG1vZHVsZSB0YXJiYWxscyBleGlzdCBmb3IgbGVnYWN5IHB1cnBvc2VzIGFuZAotICAgICAgICAgICAgICAgICAgICBjYW4gYmUgc3VwcHJlc3NlZCBieSBzZXR0aW5nIHRoZQotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTU9EVUxFX1RBUkJBTExfREVQTE9ZJz48ZmlsZW5hbWU+TU9EVUxFX1RBUkJBTExfREVQTE9ZPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvICIwIi4KLSAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgY2FuIGNvbnRhaW4gbXVsdGlwbGUga2VybmVsIG1vZHVsZSB0YXJiYWxscwotICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIG1hY2hpbmUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48cmVwbGFjZWFibGU+Ym9vdGxvYWRlcnM8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+OgotICAgICAgICAgICAgICAgICAgICBCb290bG9hZGVycyBzdXBwb3J0aW5nIHRoZSBpbWFnZSwgaWYgYXBwbGljYWJsZSB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IG1hY2hpbmUuCi0gICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGVwbG95L2ltYWdlcy88cmVwbGFjZWFibGU+bWFjaGluZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGNhbiBjb250YWluIG11bHRpcGxlIGJvb3Rsb2FkZXJzIGZvciB0aGUKLSAgICAgICAgICAgICAgICAgICAgbWFjaGluZS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5zeW1saW5rczwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGVwbG95L2ltYWdlcy88cmVwbGFjZWFibGU+bWFjaGluZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgZm9sZGVyIGNvbnRhaW5zCi0gICAgICAgICAgICAgICAgICAgIGEgc3ltYm9saWMgbGluayB0aGF0IHBvaW50cyB0byB0aGUgbW9zdCByZWNlbnRseSBidWlsdCBmaWxlCi0gICAgICAgICAgICAgICAgICAgIGZvciBlYWNoIG1hY2hpbmUuCi0gICAgICAgICAgICAgICAgICAgIFRoZXNlIGxpbmtzIG1pZ2h0IGJlIHVzZWZ1bCBmb3IgZXh0ZXJuYWwgc2NyaXB0cyB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIG5lZWQgdG8gb2J0YWluIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBlYWNoIGZpbGUuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0nc2RrLWRldi1lbnZpcm9ubWVudCc+Ci0gICAgICAgIDx0aXRsZT5BcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBTREs8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgSW4gdGhlCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSdnZW5lcmFsLXlvY3RvLWVudmlyb25tZW50LWZpZ3VyZSc+Z2VuZXJhbCBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50IGZpZ3VyZTwvbGluaz4sCi0gICAgICAgICAgICB0aGUgb3V0cHV0IGxhYmVsZWQgIkFwcGxpY2F0aW9uIERldmVsb3BtZW50IFNESyIgcmVwcmVzZW50cyBhbgotICAgICAgICAgICAgU0RLLgotICAgICAgICAgICAgVGhlIFNESyBnZW5lcmF0aW9uIHByb2Nlc3MgZGlmZmVycyBkZXBlbmRpbmcgb24gd2hldGhlciB5b3UgYnVpbGQKLSAgICAgICAgICAgIGEgc3RhbmRhcmQgU0RLCi0gICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+Yml0YmFrZSAtYyBwb3B1bGF0ZV9zZGs8L2ZpbGVuYW1lPiA8cmVwbGFjZWFibGU+aW1hZ2VuYW1lPC9yZXBsYWNlYWJsZT4pCi0gICAgICAgICAgICBvciBhbiBleHRlbnNpYmxlIFNESwotICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPmJpdGJha2UgLWMgcG9wdWxhdGVfc2RrX2V4dDwvZmlsZW5hbWU+IDxyZXBsYWNlYWJsZT5pbWFnZW5hbWU8L3JlcGxhY2VhYmxlPikuCi0gICAgICAgICAgICBUaGlzIHNlY3Rpb24gaXMgZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoaXMgb3V0cHV0OgotICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3Nkay5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI5aW4iIGRlcHRoPSI3LjI1aW4iIC8+Ci0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSBzcGVjaWZpYyBmb3JtIG9mIHRoaXMgb3V0cHV0IGlzIGEgc2VsZi1leHRyYWN0aW5nCi0gICAgICAgICAgICBTREsgaW5zdGFsbGVyICg8ZmlsZW5hbWU+Ki5zaDwvZmlsZW5hbWU+KSB0aGF0LCB3aGVuIHJ1biwKLSAgICAgICAgICAgIGluc3RhbGxzIHRoZSBTREssIHdoaWNoIGNvbnNpc3RzIG9mIGEgY3Jvc3MtZGV2ZWxvcG1lbnQKLSAgICAgICAgICAgIHRvb2xjaGFpbiwgYSBzZXQgb2YgbGlicmFyaWVzIGFuZCBoZWFkZXJzLCBhbmQgYW4gU0RLCi0gICAgICAgICAgICBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQuCi0gICAgICAgICAgICBSdW5uaW5nIHRoaXMgaW5zdGFsbGVyIGVzc2VudGlhbGx5IHNldHMgdXAgeW91cgotICAgICAgICAgICAgY3Jvc3MtZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCi0gICAgICAgICAgICBZb3UgY2FuIHRoaW5rIG9mIHRoZSBjcm9zcy10b29sY2hhaW4gYXMgdGhlICJob3N0IgotICAgICAgICAgICAgcGFydCBiZWNhdXNlIGl0IHJ1bnMgb24gdGhlIFNESyBtYWNoaW5lLgotICAgICAgICAgICAgWW91IGNhbiB0aGluayBvZiB0aGUgbGlicmFyaWVzIGFuZCBoZWFkZXJzIGFzIHRoZSAidGFyZ2V0IgotICAgICAgICAgICAgcGFydCBiZWNhdXNlIHRoZXkgYXJlIGJ1aWx0IGZvciB0aGUgdGFyZ2V0IGhhcmR3YXJlLgotICAgICAgICAgICAgVGhlIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBpcyBhZGRlZCBzbyB0aGF0IHlvdSBjYW4gaW5pdGlhbGl6ZQotICAgICAgICAgICAgdGhlIGVudmlyb25tZW50IGJlZm9yZSB1c2luZyB0aGUgdG9vbHMuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8bm90ZT48dGl0bGU+Tm90ZXM8L3RpdGxlPgotICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHN1cHBvcnRzIHNldmVyYWwgbWV0aG9kcyBieSB3aGljaCB5b3UgY2FuCi0gICAgICAgICAgICAgICAgICAgIHNldCB1cCB0aGlzIGNyb3NzLWRldmVsb3BtZW50IGVudmlyb25tZW50LgotICAgICAgICAgICAgICAgICAgICBUaGVzZSBtZXRob2RzIGluY2x1ZGUgZG93bmxvYWRpbmcgcHJlLWJ1aWx0IFNESyBpbnN0YWxsZXJzCi0gICAgICAgICAgICAgICAgICAgIG9yIGJ1aWxkaW5nIGFuZCBpbnN0YWxsaW5nIHlvdXIgb3duIFNESyBpbnN0YWxsZXIuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGJhY2tncm91bmQgaW5mb3JtYXRpb24gb24gY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWlucwotICAgICAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCwgc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluLWdlbmVyYXRpb24nPkNyb3NzLURldmVsb3BtZW50IFRvb2xjaGFpbiBHZW5lcmF0aW9uPC9saW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gc2V0dGluZyB1cCBhIGNyb3NzLWRldmVsb3BtZW50Ci0gICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50LCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1NES19VUkw7Jz5Zb2N0byBQcm9qZWN0IFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoU0RLKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICA8L25vdGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBPbmNlIGJ1aWx0LCB0aGUgU0RLIGluc3RhbGxlcnMgYXJlIHdyaXR0ZW4gb3V0IHRvIHRoZQotICAgICAgICAgICAgPGZpbGVuYW1lPmRlcGxveS9zZGs8L2ZpbGVuYW1lPiBmb2xkZXIgaW5zaWRlIHRoZQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgotICAgICAgICAgICAgYXMgc2hvd24gaW4gdGhlIGZpZ3VyZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgc2VjdGlvbi4KLSAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBTREssIHNldmVyYWwgdmFyaWFibGVzIGV4aXN0IHRoYXQgaGVscAotICAgICAgICAgICAgY29uZmlndXJlIHRoZXNlIGZpbGVzLgotICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHNob3dzIHRoZSB2YXJpYWJsZXMgYXNzb2NpYXRlZCB3aXRoIGEgc3RhbmRhcmQKLSAgICAgICAgICAgIFNESzoKLSAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSJz48ZmlsZW5hbWU+REVQTE9ZX0RJUjwvZmlsZW5hbWU+PC9saW5rPjoKLSAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSA8ZmlsZW5hbWU+ZGVwbG95PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItU0RLTUFDSElORSc+PGZpbGVuYW1lPlNES01BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz46Ci0gICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBtYWNoaW5lCi0gICAgICAgICAgICAgICAgICAgIG9uIHdoaWNoIHRoZSBjcm9zcy1kZXZlbG9wbWVudCB0b29scyBhcmUgcnVuIHRvCi0gICAgICAgICAgICAgICAgICAgIGNyZWF0ZSBwYWNrYWdlcyBmb3IgdGhlIHRhcmdldCBoYXJkd2FyZS4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1TREtJTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPlNES0lNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+OgotICAgICAgICAgICAgICAgICAgICBMaXN0cyB0aGUgZmVhdHVyZXMgdG8gaW5jbHVkZSBpbiB0aGUgInRhcmdldCIgcGFydAotICAgICAgICAgICAgICAgICAgICBvZiB0aGUgU0RLLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVRPT0xDSEFJTl9IT1NUX1RBU0snPjxmaWxlbmFtZT5UT09MQ0hBSU5fSE9TVF9UQVNLPC9maWxlbmFtZT48L2xpbms+OgotICAgICAgICAgICAgICAgICAgICBMaXN0cyBwYWNrYWdlcyB0aGF0IG1ha2UgdXAgdGhlIGhvc3QKLSAgICAgICAgICAgICAgICAgICAgcGFydCBvZiB0aGUgU0RLIChpLmUuIHRoZSBwYXJ0IHRoYXQgcnVucyBvbgotICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlNES01BQ0hJTkU8L2ZpbGVuYW1lPikuCi0gICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHVzZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSAtYyBwb3B1bGF0ZV9zZGsgPHJlcGxhY2VhYmxlPmltYWdlbmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgdG8gY3JlYXRlIHRoZSBTREssIGEgc2V0IG9mIGRlZmF1bHQgcGFja2FnZXMKLSAgICAgICAgICAgICAgICAgICAgYXBwbHkuCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYWxsb3dzIHlvdSB0byBhZGQgbW9yZSBwYWNrYWdlcy4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1UT09MQ0hBSU5fVEFSR0VUX1RBU0snPjxmaWxlbmFtZT5UT09MQ0hBSU5fVEFSR0VUX1RBU0s8L2ZpbGVuYW1lPjwvbGluaz46Ci0gICAgICAgICAgICAgICAgICAgIExpc3RzIHBhY2thZ2VzIHRoYXQgbWFrZSB1cCB0aGUgdGFyZ2V0IHBhcnQKLSAgICAgICAgICAgICAgICAgICAgb2YgdGhlIFNESyAoaS5lLiB0aGUgcGFydCBidWlsdCBmb3IgdGhlCi0gICAgICAgICAgICAgICAgICAgIHRhcmdldCBoYXJkd2FyZSkuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItU0RLUEFUSCc+PGZpbGVuYW1lPlNES1BBVEg8L2ZpbGVuYW1lPjwvbGluaz46Ci0gICAgICAgICAgICAgICAgICAgIERlZmluZXMgdGhlIGRlZmF1bHQgU0RLIGluc3RhbGxhdGlvbiBwYXRoIG9mZmVyZWQgYnkgdGhlCi0gICAgICAgICAgICAgICAgICAgIGluc3RhbGxhdGlvbiBzY3JpcHQuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICBUaGlzIG5leHQgbGlzdCwgc2hvd3MgdGhlIHZhcmlhYmxlcyBhc3NvY2lhdGVkIHdpdGggYW4gZXh0ZW5zaWJsZQotICAgICAgICAgICAgU0RLOgotICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVInPjxmaWxlbmFtZT5ERVBMT1lfRElSPC9maWxlbmFtZT48L2xpbms+OgotICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIDxmaWxlbmFtZT5kZXBsb3k8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItU0RLX0VYVF9UWVBFJz48ZmlsZW5hbWU+U0RLX0VYVF9UWVBFPC9maWxlbmFtZT48L2xpbms+OgotICAgICAgICAgICAgICAgICAgICBDb250cm9scyB3aGV0aGVyIG9yIG5vdCBzaGFyZWQgc3RhdGUgYXJ0aWZhY3RzIGFyZSBjb3BpZWQKLSAgICAgICAgICAgICAgICAgICAgaW50byB0aGUgZXh0ZW5zaWJsZSBTREsuCi0gICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIGFsbCByZXF1aXJlZCBzaGFyZWQgc3RhdGUgYXJ0aWZhY3RzIGFyZSBjb3BpZWQKLSAgICAgICAgICAgICAgICAgICAgaW50byB0aGUgU0RLLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVNES19JTkNMVURFX1BLR0RBVEEnPjxmaWxlbmFtZT5TREtfSU5DTFVERV9QS0dEQVRBPC9maWxlbmFtZT48L2xpbms+OgotICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgd2hldGhlciBvciBub3QgcGFja2FnZWRhdGEgd2lsbCBiZSBpbmNsdWRlZCBpbgotICAgICAgICAgICAgICAgICAgICB0aGUgZXh0ZW5zaWJsZSBTREsgZm9yIGFsbCByZWNpcGVzIGluIHRoZSAid29ybGQiIHRhcmdldC4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfSU5DTFVERV9UT09MQ0hBSU4nPjxmaWxlbmFtZT5TREtfSU5DTFVERV9UT09MQ0hBSU48L2ZpbGVuYW1lPjwvbGluaz46Ci0gICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0aGUgdG9vbGNoYWluIHdpbGwgYmUgaW5jbHVkZWQKLSAgICAgICAgICAgICAgICAgICAgd2hlbiBidWlsZGluZyB0aGUgZXh0ZW5zaWJsZSBTREsuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItU0RLX0xPQ0FMX0NPTkZfV0hJVEVMSVNUJz48ZmlsZW5hbWU+U0RLX0xPQ0FMX0NPTkZfV0hJVEVMSVNUPC9maWxlbmFtZT48L2xpbms+OgotICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgdmFyaWFibGVzIGFsbG93ZWQgdGhyb3VnaCBmcm9tIHRoZSBidWlsZCBzeXN0ZW0KLSAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBpbnRvIHRoZSBleHRlbnNpYmxlIFNESyBjb25maWd1cmF0aW9uLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVNES19MT0NBTF9DT05GX0JMQUNLTElTVCc+PGZpbGVuYW1lPlNES19MT0NBTF9DT05GX0JMQUNLTElTVDwvZmlsZW5hbWU+PC9saW5rPjoKLSAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIHZhcmlhYmxlcyBub3QgYWxsb3dlZCB0aHJvdWdoIGZyb20gdGhlIGJ1aWxkCi0gICAgICAgICAgICAgICAgICAgIHN5c3RlbSBjb25maWd1cmF0aW9uIGludG8gdGhlIGV4dGVuc2libGUgU0RLIGNvbmZpZ3VyYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItU0RLX0lOSEVSSVRfQkxBQ0tMSVNUJz48ZmlsZW5hbWU+U0RLX0lOSEVSSVRfQkxBQ0tMSVNUPC9maWxlbmFtZT48L2xpbms+OgotICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgY2xhc3NlcyB0byByZW1vdmUgZnJvbSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlOSEVSSVQnPjxmaWxlbmFtZT5JTkhFUklUPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlIGdsb2JhbGx5IHdpdGhpbiB0aGUgZXh0ZW5zaWJsZSBTREsgY29uZmlndXJhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotPC9jaGFwdGVyPgotPCEtLQotdmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAotLS0+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZhcS54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZhcS54bWwKaW5kZXggNWYzZjE3My4uMTFkZmM1YiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9mYXEueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmFxLnhtbApAQCAtMTMsMTEgKzEzLDExIEBACiAgICAgICAgIDwvcXVlc3Rpb24+CiAgICAgICAgIDxhbnN3ZXI+CiAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGUgdGVybSAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcG9reSc+UG9reTwvdWxpbms+IgorICAgICAgICAgICAgICAgIFRoZSB0ZXJtICI8bGluayBsaW5rPSdwb2t5Jz5Qb2t5PC9saW5rPiIKICAgICAgICAgICAgICAgICByZWZlcnMgdG8gdGhlIHNwZWNpZmljIHJlZmVyZW5jZSBidWlsZCBzeXN0ZW0gdGhhdAogICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzLgotICAgICAgICAgICAgICAgIFBva3kgaXMgYmFzZWQgb24gPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjb2UtY29yZSc+T0UtQ29yZTwvdWxpbms+Ci0gICAgICAgICAgICAgICAgYW5kIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIFBva3kgaXMgYmFzZWQgb24gPGxpbmsgbGlua2VuZD0nb2UtY29yZSc+T0UtQ29yZTwvbGluaz4KKyAgICAgICAgICAgICAgICBhbmQgPGxpbmsgbGlua2VuZD0nYml0YmFrZS10ZXJtJz5CaXRCYWtlPC9saW5rPi4KICAgICAgICAgICAgICAgICBUaHVzLCB0aGUgZ2VuZXJpYyB0ZXJtIHVzZWQgaGVyZSBmb3IgdGhlIGJ1aWxkIHN5c3RlbSBpcwogICAgICAgICAgICAgICAgIHRoZSAiT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCiAgICAgICAgICAgICAgICAgRGV2ZWxvcG1lbnQgaW4gdGhlIFlvY3RvIFByb2plY3QgdXNpbmcgUG9reSBpcyBjbG9zZWx5IHRpZWQgdG8gT3BlbkVtYmVkZGVkLCB3aXRoCkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgICAgICAgICAgVGhlcmUgYXJlIHRocmVlIGFyZWFzIHRoYXQgaGVscCB3aXRoIHN0YWJpbGl0eTsKICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgogICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIFlvY3RvIFByb2plY3QgdGVhbSBrZWVwcwotICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjb2UtY29yZSc+T0UtQ29yZTwvdWxpbms+IHNtYWxsCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdvZS1jb3JlJz5PRS1Db3JlPC9saW5rPiBzbWFsbAogICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGZvY3VzZWQsIGNvbnRhaW5pbmcgYXJvdW5kIDgzMCByZWNpcGVzIGFzIG9wcG9zZWQgdG8gdGhlIHRob3VzYW5kcwogICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIGluIG90aGVyIE9wZW5FbWJlZGRlZCBjb21tdW5pdHkgbGF5ZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgS2VlcGluZyBpdCBzbWFsbCBtYWtlcyBpdCBlYXN5IHRvIHRlc3QgYW5kIG1haW50YWluLjwvcGFyYT48L2xpc3RpdGVtPgpAQCAtODYsNyArODYsNyBAQAogICAgICAgICAgICAgICAgIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBsYXllciBmb3IgaXQuCiAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGNyZWF0ZSBhIEJTUCBsYXllciwgc2VlIHRoZQogICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcgYW5kIENyZWF0aW5nIExheWVyczwvdWxpbms+IgotICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGFuZCB0aGUKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbCBhbmQgdGhlCiAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsnPllvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4uCiAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8cGFyYT4KQEAgLTE0Myw3ICsxNDMsNyBAQAogICAgICAgICAgICAgICAgIFRvIGFkZCBhIHBhY2thZ2UsIHlvdSBuZWVkIHRvIGNyZWF0ZSBhIEJpdEJha2UgcmVjaXBlLgogICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY3JlYXRlIGEgQml0QmFrZSByZWNpcGUsIHNlZSB0aGUKICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbmV3LXJlY2lwZS13cml0aW5nLWEtbmV3LXJlY2lwZSc+V3JpdGluZyBhIE5ldyBSZWNpcGU8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L2Fuc3dlcj4KICAgICA8L3FhbmRhZW50cnk+CkBAIC0yMzUsOCArMjM1LDkgQEAKICAgICA8cWFuZGFlbnRyeT4KICAgICAgICAgPHF1ZXN0aW9uPgogICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgSSBzZWUgbG90cyBvZiA0MDQgcmVzcG9uc2VzIGZvciBmaWxlcyBvbgotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4mWU9DVE9fSE9NRV9VUkw7L3NvdXJjZXMvKjwvZmlsZW5hbWU+LiBJcyBzb21ldGhpbmcgd3Jvbmc/CisgICAgICAgICAgICAgICAgSSBzZWUgbG90cyBvZiA0MDQgcmVzcG9uc2VzIGZvciBmaWxlcyB3aGVuIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gaXMgdHJ5aW5nIHRvIGRvd25sb2FkIHNvdXJjZXMuCisgICAgICAgICAgICAgICAgSXMgc29tZXRoaW5nIHdyb25nPwogICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L3F1ZXN0aW9uPgogICAgICAgICA8YW5zd2VyPgpAQCAtNDE2LDkgKzQxNyw5IEBACiAKICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIGxpY2Vuc2luZyBpbiB0aGUKLSAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbGljZW5zaW5nJz5MaWNlbnNpbmc8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICBhbmQgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21haW50YWluaW5nLW9wZW4tc291cmNlLWxpY2Vuc2UtY29tcGxpYW5jZS1kdXJpbmcteW91ci1wcm9kdWN0cy1saWZlY3ljbGUnPk1haW50YWluaW5nIE9wZW4gU291cmNlIExpY2Vuc2UgQ29tcGxpYW5jZSBEdXJpbmcgWW91ciBQcm9kdWN0J3MgTGlmZWN5Y2xlPC91bGluaz4iCi0gICAgICAgICAgICAgICAgc2VjdGlvbnMsIGJvdGggb2Ygd2hpY2ggYXJlIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50CisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2xpY2Vuc2luZyc+TGljZW5zaW5nPC9saW5rPiIgc2VjdGlvbiBhbmQgaW4gdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21haW50YWluaW5nLW9wZW4tc291cmNlLWxpY2Vuc2UtY29tcGxpYW5jZS1kdXJpbmcteW91ci1wcm9kdWN0cy1saWZlY3ljbGUnPk1haW50YWluaW5nIE9wZW4gU291cmNlIExpY2Vuc2UgQ29tcGxpYW5jZSBEdXJpbmcgWW91ciBQcm9kdWN0J3MgTGlmZWN5Y2xlPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiwgd2hpY2ggaXMgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MKICAgICAgICAgICAgICAgICBNYW51YWwuCiAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvYW5zd2VyPgpAQCAtNTQ3LDcgKzU0OCw3IEBACiAgICAgICAgICAgICAgICAgZmlsZSB0byBpbmNsdWRlIGZyb20gdGhlCiAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9kaXN0cm8vaW5jbHVkZTwvZmlsZW5hbWU+IGRpcmVjdG9yeSB3aXRoaW4KICAgICAgICAgICAgICAgICB0aGUKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCiAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgIDxwYXJhPgpAQCAtNjk5LDEwICs3MDAsOSBAQAogICAgICAgICAgICAgICAgIFdoZW4geW91IHVzZSBCaXRCYWtlIHRvIGJ1aWxkIGFuIGltYWdlLCBhbGwgdGhlIGJ1aWxkIG91dHB1dAogICAgICAgICAgICAgICAgIGdvZXMgaW50byB0aGUgZGlyZWN0b3J5IGNyZWF0ZWQgd2hlbiB5b3UgcnVuIHRoZQogICAgICAgICAgICAgICAgIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCAoaS5lLgotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgb3IKLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+KS4KLSAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcworICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPgogICAgICAgICAgICAgICAgIGlzIG5hbWVkIDxmaWxlbmFtZT5idWlsZDwvZmlsZW5hbWU+IGJ1dCBjYW4gYmUgbmFtZWQKICAgICAgICAgICAgICAgICBhbnl0aGluZyB5b3Ugd2FudC4KICAgICAgICAgICAgIDwvcGFyYT4KQEAgLTc2NSw3ICs3NjUsNyBAQAogCiAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICBNZWFud2hpbGUsIDxmaWxlbmFtZT5ERVNURElSPC9maWxlbmFtZT4gaXMgYSBwYXRoIHdpdGhpbiB0aGUKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KICAgICAgICAgICAgICAgICBIb3dldmVyLCB3aGVuIHRoZSByZWNpcGUgYnVpbGRzIGEgbmF0aXZlIHByb2dyYW0gKGkuZS4gb25lCiAgICAgICAgICAgICAgICAgdGhhdCBpcyBpbnRlbmRlZCB0byBydW4gb24gdGhlIGJ1aWxkIG1hY2hpbmUpLCB0aGF0IHByb2dyYW0KICAgICAgICAgICAgICAgICBpcyBuZXZlciBpbnN0YWxsZWQgZGlyZWN0bHkgdG8gdGhlIGJ1aWxkIG1hY2hpbmUncyByb290CkBAIC04MTAsNyArODEwLDcgQEAKICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgIFRoaXMgc2l0dWF0aW9uIHJlc3VsdHMgd2hlbiBhIGJ1aWxkIHN5c3RlbSBkb2VzCiAgICAgICAgICAgICAgICAgbm90IHJlY29nbml6ZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHN1cHBsaWVkIHRvIGl0IGJ5Ci0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYml0YmFrZS10ZXJtJz5CaXRCYWtlPC91bGluaz4uCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYml0YmFrZS10ZXJtJz5CaXRCYWtlPC9saW5rPi4KICAgICAgICAgICAgICAgICBUaGUgaW5jaWRlbnQgdGhhdCBwcm9tcHRlZCB0aGlzIEZBUSBlbnRyeSBpbnZvbHZlZCBhIE1ha2VmaWxlCiAgICAgICAgICAgICAgICAgdGhhdCB1c2VkIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVkCiAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJJTkRJUjwvZmlsZW5hbWU+IGluc3RlYWQgb2YgdGhlIG1vcmUgc3RhbmRhcmQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9ZUC1mbG93LWRpYWdyYW0ucG5nIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL1lQLWZsb3ctZGlhZ3JhbS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI2NDQxMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9ZUC1mbG93LWRpYWdyYW0ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9naXQtd29ya2Zsb3cucG5nIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2dpdC13b3JrZmxvdy5wbmcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9naXQtd29ya2Zsb3cucG5nCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvZ2l0LXdvcmtmbG93LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvaW5kZXgtZG93bmxvYWRzLnBuZyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9pbmRleC1kb3dubG9hZHMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MzAzYjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvaW5kZXgtZG93bmxvYWRzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9zb3VyY2UtcmVwb3MucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5Y2ZmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMveXAtZG93bmxvYWQucG5nIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3lwLWRvd25sb2FkLnBuZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL3lwLWRvd25sb2FkLnBuZwpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3lwLWRvd25sb2FkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ludHJvZHVjdGlvbi54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ludHJvZHVjdGlvbi54bWwKaW5kZXggZWVjNmNiMy4uMjllZjJkNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9pbnRyb2R1Y3Rpb24ueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvaW50cm9kdWN0aW9uLnhtbApAQCAtNSwxMTkgKzUsMTYwIEBACiA8Y2hhcHRlciBpZD0ncmVmLW1hbnVhbC1pbnRybyc+CiA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KIAotPHNlY3Rpb24gaWQ9J2ludHJvLXdlbGNvbWUnPgotICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorPHNlY3Rpb24gaWQ9J3JlZi13ZWxjb21lJz4KKyAgICA8dGl0bGU+V2VsY29tZTwvdGl0bGU+CiAKICAgICA8cGFyYT4KKyAgICAgICAgV2VsY29tZSB0byB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgogICAgICAgICBUaGlzIG1hbnVhbCBwcm92aWRlcyByZWZlcmVuY2UgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IHJlbGVhc2UKICAgICAgICAgb2YgdGhlIFlvY3RvIFByb2plY3QuCi0gICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGlzIGFuIG9wZW4tc291cmNlIGNvbGxhYm9yYXRpb24gcHJvamVjdCBmb2N1c2VkCi0gICAgICAgIG9uIGVtYmVkZGVkIExpbnV4IGRldmVsb3BlcnMuCi0gICAgICAgIEFtb25nc3Qgb3RoZXIgdGhpbmdzLCB0aGUgWW9jdG8gUHJvamVjdCB1c2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKLSAgICAgICAgc3lzdGVtLCB3aGljaCBpcyBiYXNlZCBvbiB0aGUgUG9reSBwcm9qZWN0LCB0byBjb25zdHJ1Y3QgY29tcGxldGUKLSAgICAgICAgTGludXggaW1hZ2VzLgotICAgICAgICBZb3UgY2FuIGZpbmQgY29tcGxldGUgaW50cm9kdWN0b3J5IGFuZCBnZXR0aW5nIHN0YXJ0ZWQgaW5mb3JtYXRpb24KLSAgICAgICAgb24gdGhlIFlvY3RvIFByb2plY3QgYnkgcmVhZGluZyB0aGUKKyAgICAgICAgVGhpcyBtYW51YWwgaXMgYmVzdCB1c2VkIGFmdGVyIHlvdSBoYXZlIGFuIHVuZGVyc3RhbmRpbmcKKyAgICAgICAgb2YgdGhlIGJhc2ljcyBvZiB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgVGhlIG1hbnVhbCBpcyBuZWl0aGVyIG1lYW50IHRvIGJlIHJlYWQgYXMgYSBzdGFydGluZyBwb2ludCB0byB0aGUKKyAgICAgICAgWW9jdG8gUHJvamVjdCBub3IgcmVhZCBmcm9tIHN0YXJ0IHRvIGZpbmlzaC4KKyAgICAgICAgVXNlIHRoaXMgbWFudWFsIHRvIGZpbmQgY29uY2VwdHMsIHZhcmlhYmxlIGRlZmluaXRpb25zLCBjbGFzcworICAgICAgICBkZXNjcmlwdGlvbnMsIGFuZCBzbyBmb3J0aCBhcyBuZWVkZWQgZHVyaW5nIHRoZSBjb3Vyc2Ugb2YgdXNpbmcKKyAgICAgICAgdGhlIFlvY3RvIFByb2plY3QuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBpbnRyb2R1Y3RvcnkgaW5mb3JtYXRpb24gb24gdGhlIFlvY3RvIFByb2plY3QsIHNlZSB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOyc+WW9jdG8gUHJvamVjdCBXZWJzaXRlPC91bGluaz4gYW5kIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0neXAtaW50cm8nPkludHJvZHVjaW5nIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50PC9saW5rPiIKKyAgICAgICAgc2VjdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBZb2N0byBQcm9qZWN0IHRvIHRlc3QgcnVuIGJ1aWxkaW5nIGFuIGltYWdlCisgICAgICAgIHdpdGhvdXQgaGF2aW5nIHRvIHVuZGVyc3RhbmQgY29uY2VwdHMsIHdvcmsgdGhyb3VnaCB0aGUKICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyc+WW9jdG8gUHJvamVjdCBRdWljayBTdGFydDwvdWxpbms+LgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgICBGb3IgdGFzay1iYXNlZCBpbmZvcm1hdGlvbiB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCwgc2VlIHRoZQotICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyc+WW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWw8L3VsaW5rPgotICAgICAgICBhbmQgdGhlIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyc+WW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQgTWFudWFsPC91bGluaz4uCi0gICAgICAgIEZvciBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgc3RydWN0dXJlIGluZm9ybWF0aW9uLCBzZWUgdGhlCi0gICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7Jz5Zb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgotICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSBhIFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCwgKFNESyksIHNlZSB0aGUKLSAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfU0RLX1VSTDsnPllvY3RvIFByb2plY3QgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4uCi0gICAgICAgIFlvdSBjYW4gZmluZCBpbmZvcm1hdGlvbiBvbiB0cmFjaW5nIGFuZCBwcm9maWxpbmcgaW4gdGhlCi0gICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1BST0ZfVVJMOyc+WW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsPC91bGluaz4uCi0gICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBCaXRCYWtlLCB3aGljaCBpcyB0aGUgdGFzayBleGVjdXRpb24gdG9vbCB0aGUKLSAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpcyBiYXNlZCBvbiwgc2VlIHRoZQotICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I2JpdGJha2UtdXNlci1tYW51YWwnPkJpdEJha2UgVXNlciBNYW51YWw8L3VsaW5rPi4KLSAgICAgICAgRmluYWxseSwgeW91IGNhbiBhbHNvIGZpbmQgbG90cyBvZiBZb2N0byBQcm9qZWN0IGluZm9ybWF0aW9uIG9uIHRoZQotICAgICAgICA8dWxpbmsgdXJsPSImWU9DVE9fSE9NRV9VUkw7Ij5Zb2N0byBQcm9qZWN0IHdlYnNpdGU8L3VsaW5rPi4KKyAgICAgICAgWW91IGNhbiBmaW5kICJob3ctdG8iIGluZm9ybWF0aW9uIGluIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyc+WW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgPG5vdGU+PHRpdGxlPlRpcDwvdGl0bGU+CisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgWW9jdG8gUHJvamVjdCBEb2N1bWVudGF0aW9uIHNldCwKKyAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZXNvdXJjZXMtbGlua3MtYW5kLXJlbGF0ZWQtZG9jdW1lbnRhdGlvbic+TGlua3MgYW5kIFJlbGF0ZWQgRG9jdW1lbnRhdGlvbjwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L25vdGU+CiAgICAgPC9wYXJhPgogPC9zZWN0aW9uPgogCi08c2VjdGlvbiBpZD0naW50cm8tbWFudWFsb3ZlcnZpZXcnPgotICAgIDx0aXRsZT5Eb2N1bWVudGF0aW9uIE92ZXJ2aWV3PC90aXRsZT4KKzxzZWN0aW9uIGlkPSd5cC1pbnRybyc+CisgICAgPHRpdGxlPkludHJvZHVjaW5nIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50PC90aXRsZT4KKwogICAgIDxwYXJhPgotICAgICAgICBUaGlzIHJlZmVyZW5jZSBtYW51YWwgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZzoKLSAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndXNpbmdwb2t5Jz5Vc2luZyB0aGUgWW9jdG8gUHJvamVjdDwvbGluaz46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBQcm92aWRlcyBhbiBvdmVydmlldyBvZiB0aGUgY29tcG9uZW50cyB0aGF0IG1ha2UgdXAgdGhlIFlvY3RvIFByb2plY3QKLSAgICAgICAgICAgICAgICBmb2xsb3dlZCBieSBpbmZvcm1hdGlvbiBhYm91dCBkZWJ1Z2dpbmcgaW1hZ2VzIGNyZWF0ZWQgaW4gdGhlIFlvY3RvIFByb2plY3QuCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2Nsb3Nlci1sb29rJz5BIENsb3NlciBMb29rIGF0IHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50PC9saW5rPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIFByb3ZpZGVzIGEgbW9yZSBkZXRhaWxlZCBsb29rIGF0IHRoZSBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50Ci0gICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGRldmVsb3BtZW50LgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd0ZWNobmljYWwtZGV0YWlscyc+VGVjaG5pY2FsIERldGFpbHM8L2xpbms+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgRGVzY3JpYmVzIGZ1bmRhbWVudGFsIFlvY3RvIFByb2plY3QgY29tcG9uZW50cyBhcyB3ZWxsIGFzIGFuIGV4cGxhbmF0aW9uCi0gICAgICAgICAgICAgICAgYmVoaW5kIGhvdyB0aGUgWW9jdG8gUHJvamVjdCB1c2VzIHNoYXJlZCBzdGF0ZSAoc3N0YXRlKSBjYWNoZSB0byBzcGVlZCBidWlsZCB0aW1lLgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdtaWdyYXRpb24nPk1pZ3JhdGluZyB0byBhIE5ld2VyIFlvY3RvIFByb2plY3QgUmVsZWFzZTwvbGluaz46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBEZXNjcmliZXMgcmVsZWFzZS1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0aGF0IGhlbHBzIHlvdSBtb3ZlIGZyb20KLSAgICAgICAgICAgICAgICBvbmUgWW9jdG8gUHJvamVjdCBSZWxlYXNlIHRvIGFub3RoZXIuCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1zdHJ1Y3R1cmUnPkRpcmVjdG9yeSBTdHJ1Y3R1cmU8L2xpbms+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgRGVzY3JpYmVzIHRoZQotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPiBjcmVhdGVkCi0gICAgICAgICAgICAgICAgZWl0aGVyIGJ5IHVucGFja2luZyBhIHJlbGVhc2VkIFlvY3RvIFByb2plY3QgdGFyYmFsbCBvbiB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtLAotICAgICAgICAgICAgICAgIG9yIGJ5IGNsb25pbmcgdGhlIHVwc3RyZWFtCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcG9reSc+UG9reTwvdWxpbms+IEdpdCByZXBvc2l0b3J5LgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcyc+Q2xhc3NlczwvbGluaz46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBEZXNjcmliZXMgdGhlIGNsYXNzZXMgdXNlZCBpbiB0aGUgWW9jdG8gUHJvamVjdC48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzJz5UYXNrczwvbGluaz46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBEZXNjcmliZXMgdGhlIHRhc2tzIGRlZmluZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1kZXZ0b29sLXJlZmVyZW5jZSc+PGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBRdWljayBSZWZlcmVuY2U8L2xpbms+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgUHJvdmlkZXMgYSBxdWljayByZWZlcmVuY2UgZm9yIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgY29tbWFuZC4KLSAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXFhLWNoZWNrcyc+UUEgRXJyb3IgYW5kIFdhcm5pbmcgTWVzc2FnZXM8L2xpbms+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgTGlzdHMgYW5kIGRlc2NyaWJlcyBRQSB3YXJuaW5nIGFuZCBlcnJvciBtZXNzYWdlcy4KLSAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWltYWdlcyc+SW1hZ2VzPC9saW5rPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIERlc2NyaWJlcyB0aGUgc3RhbmRhcmQgaW1hZ2VzIHRoYXQgdGhlIFlvY3RvIFByb2plY3Qgc3VwcG9ydHMuCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1mZWF0dXJlcyc+RmVhdHVyZXM8L2xpbms+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgRGVzY3JpYmVzIG1lY2hhbmlzbXMgZm9yIGNyZWF0aW5nIGRpc3RyaWJ1dGlvbiwgbWFjaGluZSwgYW5kIGltYWdlCi0gICAgICAgICAgICAgICAgZmVhdHVyZXMgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzIHVzaW5nIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdmFyaWFibGVzLWdsb3MnPlZhcmlhYmxlcyBHbG9zc2FyeTwvbGluaz46PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBQcmVzZW50cyBtb3N0IHZhcmlhYmxlcyB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLCB3aGljaAotICAgICAgICAgICAgICAgIHVzZXMgQml0QmFrZS4KLSAgICAgICAgICAgICAgICBFbnRyaWVzIGRlc2NyaWJlIHRoZSBmdW5jdGlvbiBvZiB0aGUgdmFyaWFibGUgYW5kIGhvdyB0byBhcHBseSB0aGVtLgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KLSAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdmFybG9jYWxpdHknPlZhcmlhYmxlIENvbnRleHQ8L2xpbms+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgUHJvdmlkZXMgdmFyaWFibGUgbG9jYWxpdHkgb3IgY29udGV4dC48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZmFxJz5GQVE8L2xpbms+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgUHJvdmlkZXMgYW5zd2VycyBmb3IgY29tbW9ubHkgYXNrZWQgcXVlc3Rpb25zIGluIHRoZSBZb2N0byBQcm9qZWN0Ci0gICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgotICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Jlc291cmNlcyc+Q29udHJpYnV0aW5nIHRvIHRoZSBZb2N0byBQcm9qZWN0PC9saW5rPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIFByb3ZpZGVzIGd1aWRhbmNlIG9uIGhvdyB5b3UgY2FuIGNvbnRyaWJ1dGUgYmFjayB0byB0aGUgWW9jdG8KLSAgICAgICAgICAgICAgICBQcm9qZWN0LjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgaXMgYW4gb3Blbi1zb3VyY2UgY29sbGFib3JhdGlvbiBwcm9qZWN0IHdob3NlCisgICAgICAgIGZvY3VzIGlzIGZvciBkZXZlbG9wZXJzIG9mIGVtYmVkZGVkIExpbnV4IHN5c3RlbXMuCisgICAgICAgIEFtb25nIG90aGVyIHRoaW5ncywgdGhlIFlvY3RvIFByb2plY3QgdXNlcyBhbgorICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1zeXN0ZW0tdGVybSc+T3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbTwvbGluaz4uCisgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0sIHdoaWNoIGlzIGJhc2VkIG9uIHRoZSBPcGVuRW1iZWRkZWQgKE9FKSBwcm9qZWN0IGFuZAorICAgICAgICB1c2VzIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdiaXRiYWtlLXRlcm0nPkJpdEJha2U8L2xpbms+IHRvb2wsIGNvbnN0cnVjdHMgY29tcGxldGUKKyAgICAgICAgTGludXggaW1hZ2VzIGZvciBhcmNoaXRlY3R1cmVzIGJhc2VkIG9uIEFSTSwgTUlQUywgUG93ZXJQQywgeDg2IGFuZAorICAgICAgICB4ODYtNjQuCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgSGlzdG9yaWNhbGx5LCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSwgd2hpY2ggaXMgdGhlCisgICAgICAgICAgICBjb21iaW5hdGlvbiBvZiBCaXRCYWtlIGFuZCBPRSBjb21wb25lbnRzLCBmb3JtZWQgYSByZWZlcmVuY2UKKyAgICAgICAgICAgIGJ1aWxkIGhvc3QgdGhhdCB3YXMga25vd24gYXMKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwb2t5Jz5Qb2t5PC9saW5rPiIgKDxlbXBoYXNpcz5QYWg8L2VtcGhhc2lzPi1rZWUpLgorICAgICAgICAgICAgVGhlIHRlcm0gIlBva3kiLCBhcyB1c2VkIHRocm91Z2hvdXQgdGhlIFlvY3RvIFByb2plY3QgRG9jdW1lbnRhdGlvbgorICAgICAgICAgICAgc2V0LCBjYW4gaGF2ZSBkaWZmZXJlbnQgbWVhbmluZ3MuCisgICAgICAgIDwvbm90ZT4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgdmFyaW91cyBhbmNpbGxhcnkgdG9vbHMgZm9yIHRoZSBlbWJlZGRlZAorICAgICAgICBkZXZlbG9wZXIgYW5kIGFsc28gZmVhdHVyZXMgdGhlIFNhdG8gcmVmZXJlbmNlIFVzZXIgSW50ZXJmYWNlLCB3aGljaAorICAgICAgICBpcyBvcHRpbWl6ZWQgZm9yIHN0eWx1cy1kcml2ZW4sIGxvdy1yZXNvbHV0aW9uIHNjcmVlbnMuCisgICAgPC9wYXJhPgorCisgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICA8aW1hZ2VvYmplY3Q+CisgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvWVAtZmxvdy1kaWFncmFtLnBuZyIKKyAgICAgICAgICAgICAgICBmb3JtYXQ9IlBORyIgYWxpZ249J2NlbnRlcicgd2lkdGg9IjhpbiIvPgorICAgICAgICA8L2ltYWdlb2JqZWN0PgorICAgIDwvbWVkaWFvYmplY3Q+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSGVyZSBhcmUgc29tZSBoaWdobGlnaHRzIGZvciB0aGUgWW9jdG8gUHJvamVjdDoKKyAgICA8L3BhcmE+CisKKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICBQcm92aWRlcyBhIHJlY2VudCBMaW51eCBrZXJuZWwgYWxvbmcgd2l0aCBhIHNldCBvZiBzeXN0ZW0KKyAgICAgICAgICAgIGNvbW1hbmRzIGFuZCBsaWJyYXJpZXMgc3VpdGFibGUgZm9yIHRoZSBlbWJlZGRlZAorICAgICAgICAgICAgZW52aXJvbm1lbnQuCisgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgTWFrZXMgYXZhaWxhYmxlIHN5c3RlbSBjb21wb25lbnRzIHN1Y2ggYXMgWDExLCBHVEsrLCBRdCwKKyAgICAgICAgICAgIENsdXR0ZXIsIGFuZCBTREwgKGFtb25nIG90aGVycykgc28geW91IGNhbiBjcmVhdGUgYSByaWNoIHVzZXIKKyAgICAgICAgICAgIGV4cGVyaWVuY2Ugb24gZGV2aWNlcyB0aGF0IGhhdmUgZGlzcGxheSBoYXJkd2FyZS4KKyAgICAgICAgICAgIEZvciBkZXZpY2VzIHRoYXQgZG8gbm90IGhhdmUgYSBkaXNwbGF5IG9yIHdoZXJlIHlvdSB3aXNoIHRvCisgICAgICAgICAgICB1c2UgYWx0ZXJuYXRpdmUgVUkgZnJhbWV3b3JrcywgdGhlc2UgY29tcG9uZW50cyBuZWVkIG5vdCBiZQorICAgICAgICAgICAgaW5zdGFsbGVkLgorICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgIENyZWF0ZXMgYSBmb2N1c2VkIGFuZCBzdGFibGUgY29yZSBjb21wYXRpYmxlIHdpdGggdGhlCisgICAgICAgICAgICBPcGVuRW1iZWRkZWQgcHJvamVjdCB3aXRoIHdoaWNoIHlvdSBjYW4gZWFzaWx5IGFuZCByZWxpYWJseQorICAgICAgICAgICAgYnVpbGQgYW5kIGRldmVsb3AuCisgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgRnVsbHkgc3VwcG9ydHMgYSB3aWRlIHJhbmdlIG9mIGhhcmR3YXJlIGFuZCBkZXZpY2UgZW11bGF0aW9uCisgICAgICAgICAgICB0aHJvdWdoIHRoZSBRdWljayBFTVVsYXRvciAoUUVNVSkuCisgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgUHJvdmlkZXMgYSBsYXllciBtZWNoYW5pc20gdGhhdCBhbGxvd3MgeW91IHRvIGVhc2lseSBleHRlbmQKKyAgICAgICAgICAgIHRoZSBzeXN0ZW0sIG1ha2UgY3VzdG9taXphdGlvbnMsIGFuZCBrZWVwIHRoZW0gb3JnYW5pemVkLgorICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiB1c2UgdGhlIFlvY3RvIFByb2plY3QgdG8gZ2VuZXJhdGUgaW1hZ2VzIGZvciBtYW55IGtpbmRzCisgICAgICAgIG9mIGRldmljZXMuCisgICAgICAgIEFzIG1lbnRpb25lZCBlYXJsaWVyLCB0aGUgWW9jdG8gUHJvamVjdCBzdXBwb3J0cyBjcmVhdGlvbiBvZgorICAgICAgICByZWZlcmVuY2UgaW1hZ2VzIHRoYXQgeW91IGNhbiBib290IHdpdGhpbiBhbmQgZW11bGF0ZSB1c2luZyBRRU1VLgorICAgICAgICBUaGUgc3RhbmRhcmQgZXhhbXBsZSBtYWNoaW5lcyB0YXJnZXQgUUVNVSBmdWxsLXN5c3RlbQorICAgICAgICBlbXVsYXRpb24gZm9yIDMyLWJpdCBhbmQgNjQtYml0IHZhcmlhbnRzIG9mIHg4NiwgQVJNLCBNSVBTLCBhbmQKKyAgICAgICAgUG93ZXJQQyBhcmNoaXRlY3R1cmVzLgorICAgICAgICBCZXlvbmQgZW11bGF0aW9uLCB5b3UgY2FuIHVzZSB0aGUgbGF5ZXIgbWVjaGFuaXNtIHRvIGV4dGVuZAorICAgICAgICBzdXBwb3J0IHRvIGp1c3QgYWJvdXQgYW55IHBsYXRmb3JtIHRoYXQgTGludXggY2FuIHJ1biBvbiBhbmQgdGhhdAorICAgICAgICBhIHRvb2xjaGFpbiBjYW4gdGFyZ2V0LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBBbm90aGVyIFlvY3RvIFByb2plY3QgZmVhdHVyZSBpcyB0aGUgU2F0byByZWZlcmVuY2UgVXNlcgorICAgICAgICBJbnRlcmZhY2UuCisgICAgICAgIFRoaXMgb3B0aW9uYWwgVUkgdGhhdCBpcyBiYXNlZCBvbiBHVEsrIGlzIGludGVuZGVkIGZvciBkZXZpY2VzIHdpdGgKKyAgICAgICAgcmVzdHJpY3RlZCBzY3JlZW4gc2l6ZXMgYW5kIGlzIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlCisgICAgICAgIE9wZW5FbWJlZGRlZCBDb3JlIGxheWVyIHNvIHRoYXQgZGV2ZWxvcGVycyBjYW4gdGVzdCBwYXJ0cyBvZiB0aGUKKyAgICAgICAgc29mdHdhcmUgc3RhY2suCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFdoaWxlIHRoZSBZb2N0byBQcm9qZWN0IGRvZXMgbm90IHByb3ZpZGUgYSBzdHJpY3QgdGVzdGluZyBmcmFtZXdvcmssCisgICAgICAgIGl0IGRvZXMgcHJvdmlkZSBvciBnZW5lcmF0ZSBmb3IgeW91IGFydGlmYWN0cyB0aGF0IGxldCB5b3UgcGVyZm9ybQorICAgICAgICB0YXJnZXQtbGV2ZWwgYW5kIGVtdWxhdGVkIHRlc3RpbmcgYW5kIGRlYnVnZ2luZy4KKyAgICAgICAgQWRkaXRpb25hbGx5LCBpZiB5b3UgYXJlIGFuCisgICAgICAgIDx0cmFkZW1hcmsgY2xhc3M9J3RyYWRlJz5FY2xpcHNlPC90cmFkZW1hcms+IElERSB1c2VyLCB5b3UgY2FuCisgICAgICAgIGluc3RhbGwgYW4gRWNsaXBzZSBZb2N0byBQbHVnLWluIHRvIGFsbG93IHlvdSB0byBkZXZlbG9wIHdpdGhpbiB0aGF0CisgICAgICAgIGZhbWlsaWFyIGVudmlyb25tZW50LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBCeSBkZWZhdWx0LCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCB0byBidWlsZCBhbiBpbWFnZSBjcmVhdGVzIGEgUG9reQorICAgICAgICBkaXN0cmlidXRpb24uCisgICAgICAgIEhvd2V2ZXIsIHlvdSBjYW4gY3JlYXRlIHlvdXIgb3duIGRpc3RyaWJ1dGlvbiBieSBwcm92aWRpbmcga2V5CisgICAgICAgIDxsaW5rIGxpbms9J21ldGFkYXRhJz5NZXRhZGF0YTwvbGluaz4uCisgICAgICAgIEEgZ29vZCBleGFtcGxlIGlzIEFuZ3N0cm9tLCB3aGljaCBoYXMgaGFkIGEgZGlzdHJpYnV0aW9uCisgICAgICAgIGJhc2VkIG9uIHRoZSBZb2N0byBQcm9qZWN0IHNpbmNlIGl0cyBpbmNlcHRpb24uCisgICAgICAgIE90aGVyIGV4YW1wbGVzIGluY2x1ZGUgY29tbWVyY2lhbCBkaXN0cmlidXRpb25zIGxpa2UKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9vcmdhbml6YXRpb24vd2luZC1yaXZlci1zeXN0ZW1zJz5XaW5kIFJpdmVyIExpbnV4PC91bGluaz4sCisgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvb3JnYW5pemF0aW9uL21lbnRvci1ncmFwaGljcyc+TWVudG9yIEVtYmVkZGVkIExpbnV4PC91bGluaz4sCisgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvb3JnYW5pemF0aW9uL2VuZWEtYWInPkVORUEgTGludXg8L3VsaW5rPgorICAgICAgICBhbmQgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9lY29zeXN0ZW0vbWVtYmVyLW9yZ2FuaXphdGlvbnMnPm90aGVyczwvdWxpbms+LgorICAgICAgICBTZWUgdGhlICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy15b3VyLW93bi1kaXN0cmlidXRpb24nPkNyZWF0aW5nIFlvdXIgT3duIERpc3RyaWJ1dGlvbjwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbCBmb3IgbW9yZQorICAgICAgICBpbmZvcm1hdGlvbi4KICAgICA8L3BhcmE+CiA8L3NlY3Rpb24+CiAKLQogPHNlY3Rpb24gaWQ9J2ludHJvLXJlcXVpcmVtZW50cyc+CiA8dGl0bGU+U3lzdGVtIFJlcXVpcmVtZW50czwvdGl0bGU+CiAgICAgPHBhcmE+CkBAIC0xNjMsMTIgKzIwNCwxMiBAQAogICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5VYnVudHUgMTAuMDQ8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VWJ1bnR1IDExLjEwPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVidW50dSAxMi4wNCAoTFRTKTwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5VYnVudHUgMTMuMTA8L3BhcmE+PC9saXN0aXRlbT4gLS0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVidW50dSAxNC4wNCAoTFRTKTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5VYnVudHUgMTMuMTA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VWJ1bnR1IDE0LjA0IChMVFMpPC9wYXJhPjwvbGlzdGl0ZW0+IC0tPgogICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5VYnVudHUgMTQuMTA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VWJ1bnR1IDE1LjA0PC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVidW50dSAxNS4xMDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5VYnVudHUgMTYuMDQ8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VWJ1bnR1IDE2LjA0IChMVFMpPC9wYXJhPjwvbGlzdGl0ZW0+CiA8IS0tICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5GZWRvcmEgMTYgKFZlcm5lKTwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5GZWRvcmEgMTcgKFNwaGVyaWNhbCk8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RmVkb3JhIHJlbGVhc2UgMTkgKFNjaHLDtmRpbmdlcidzIENhdCk8L3BhcmE+PC9saXN0aXRlbT4KQEAgLTE4NSw2ICsyMjYsNyBAQAogPCEtLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RGViaWFuIEdOVS9MaW51eCA2LjAgKFNxdWVlemUpPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRlYmlhbiBHTlUvTGludXggNy54IChXaGVlenkpPC9wYXJhPjwvbGlzdGl0ZW0+IC0tPgogICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EZWJpYW4gR05VL0xpbnV4IDgueCAoSmVzc2llKTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EZWJpYW4gR05VL0xpbnV4IDkueCAoU3RyZXRjaCk8L3BhcmE+PC9saXN0aXRlbT4KIDwhLS0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRlYmlhbiBHTlUvTGludXggNy4xIChXaGVlenkpPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRlYmlhbiBHTlUvTGludXggNy4yIChXaGVlenkpPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRlYmlhbiBHTlUvTGludXggNy4zIChXaGVlenkpPC9wYXJhPjwvbGlzdGl0ZW0+CkBAIC00MTMsNyArNDU1LDcgQEAKICAgICAgICAgICAgIFB5dGhvbjoKICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CiAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkdpdCAxLjguMy4xIG9yIGdyZWF0ZXI8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+dGFyIDEuMjQgb3IgZ3JlYXRlcjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT50YXIgMS4yNyBvciBncmVhdGVyPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlB5dGhvbiAzLjQuMCBvciBncmVhdGVyPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KICAgICAgICAgPC9wYXJhPgpAQCAtNDkyLDkgKzUzNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBPbiB0aGUgbWFjaGluZSB0aGF0IGlzIGFibGUgdG8gcnVuIEJpdEJha2UsCiAgICAgICAgICAgICAgICAgICAgICAgICBiZSBzdXJlIHlvdSBoYXZlIHNldCB1cCB5b3VyIGJ1aWxkIGVudmlyb25tZW50IHdpdGgKICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzZXR1cCBzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L2xpbms+KS4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CiAgICAgICAgICAgICAgICAgICAgICAgICBSdW4gdGhlIEJpdEJha2UgY29tbWFuZCB0byBidWlsZCB0aGUgdGFyYmFsbDoKQEAgLTUxMiw3ICs1NTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnNoPC9maWxlbmFtZT4gZmlsZSB0aGF0IGluc3RhbGxzCiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0b29scyBpbiB0aGUgPGZpbGVuYW1lPnRtcC9kZXBsb3kvc2RrPC9maWxlbmFtZT4KICAgICAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCiAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBpbnN0YWxsZXIgZmlsZSBoYXMgdGhlIHN0cmluZyAiYnVpbGR0b29scyIKICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIG5hbWUuCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgpAQCAtNjAwLDEyICs2NDAsNDQxIEBACiAgICAgPHRpdGxlPkRldmVsb3BtZW50IENoZWNrb3V0czwvdGl0bGU+CiAgICAgPHBhcmE+CiAgICAgICAgIERldmVsb3BtZW50IHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0IHJlcXVpcmVzIGEgbG9jYWwKLSAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi4KICAgICAgICAgWW91IGNhbiBzZXQgdXAgdGhlIFNvdXJjZSBEaXJlY3RvcnkgYnkgY2xvbmluZyBhIGNvcHkgb2YgdGhlIHVwc3RyZWFtCi0gICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3Bva3knPnBva3k8L3VsaW5rPiBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncG9reSc+cG9reTwvbGluaz4gR2l0IHJlcG9zaXRvcnkuCiAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZG8gdGhpcywgc2VlIHRoZQotICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZ2V0dGluZy1zZXR1cCc+R2V0dGluZyBTZXQgVXA8L3VsaW5rPiIKLSAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN3b3JraW5nLXdpdGgteW9jdG8tcHJvamVjdC1zb3VyY2UtZmlsZXMnPldvcmtpbmcgV2l0aCBZb2N0byBQcm9qZWN0IFNvdXJjZSBGaWxlczwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSd5b2N0by1wcm9qZWN0LXRlcm1zJz4KKyAgICA8dGl0bGU+WW9jdG8gUHJvamVjdCBUZXJtczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9sbG93aW5nIGlzIGEgbGlzdCBvZiB0ZXJtcyBhbmQgZGVmaW5pdGlvbnMgdXNlcnMgbmV3IHRvIHRoZSBZb2N0bworICAgICAgICBQcm9qZWN0IGRldmVsb3BtZW50IGVudmlyb25tZW50IG1pZ2h0IGZpbmQgaGVscGZ1bC4KKyAgICAgICAgV2hpbGUgc29tZSBvZiB0aGVzZSB0ZXJtcyBhcmUgdW5pdmVyc2FsLCB0aGUgbGlzdCBpbmNsdWRlcyB0aGVtCisgICAgICAgIGp1c3QgaW4gY2FzZToKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+QXBwZW5kIEZpbGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgRmlsZXMgdGhhdCBhcHBlbmQgYnVpbGQgaW5mb3JtYXRpb24gdG8gYSByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICBBcHBlbmQgZmlsZXMgYXJlIGtub3duIGFzIEJpdEJha2UgYXBwZW5kIGZpbGVzIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBleHBlY3RzIGV2ZXJ5IGFwcGVuZCBmaWxlIHRvIGhhdmUKKyAgICAgICAgICAgICAgICBhIGNvcnJlc3BvbmRpbmcgcmVjaXBlICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4pIGZpbGUuCisgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIHRoZSBhcHBlbmQgZmlsZSBhbmQgY29ycmVzcG9uZGluZyByZWNpcGUgZmlsZQorICAgICAgICAgICAgICAgIG11c3QgdXNlIHRoZSBzYW1lIHJvb3QgZmlsZW5hbWUuCisgICAgICAgICAgICAgICAgVGhlIGZpbGVuYW1lcyBjYW4gZGlmZmVyIG9ubHkgaW4gdGhlIGZpbGUgdHlwZSBzdWZmaXggdXNlZAorICAgICAgICAgICAgICAgIChlLmcuCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvcm1mYWN0b3JfMC4wLmJiPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvcm1mYWN0b3JfMC4wLmJiYXBwZW5kPC9maWxlbmFtZT4pLjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPkluZm9ybWF0aW9uIGluIGFwcGVuZCBmaWxlcyBleHRlbmRzIG9yIG92ZXJyaWRlcyB0aGUKKyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBpbiB0aGUgc2ltaWxhcmx5LW5hbWVkIHJlY2lwZSBmaWxlLgorICAgICAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIG9mIGFuIGFwcGVuZCBmaWxlIGluIHVzZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1c2luZy1iYmFwcGVuZC1maWxlcyc+VXNpbmcgLmJiYXBwZW5kIEZpbGVzIGluIFlvdXIgTGF5ZXI8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgQXBwZW5kIGZpbGVzIGNhbiBhbHNvIHVzZSB3aWxkY2FyZCBwYXR0ZXJucyBpbiB0aGVpcgorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uIG51bWJlcnMgc28gdGhleSBjYW4gYmUgYXBwbGllZCB0byBtb3JlIHRoYW4gb25lCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gb2YgdGhlIHVuZGVybHlpbmcgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdiaXRiYWtlLXRlcm0nPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5CaXRCYWtlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhlIHRhc2sgZXhlY3V0b3IgYW5kIHNjaGVkdWxlciB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICBzeXN0ZW0gdG8gYnVpbGQgaW1hZ2VzLgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEJpdEJha2UsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7Jz5CaXRCYWtlIFVzZXIgTWFudWFsPC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmEgaWQ9J2JvYXJkLXN1cHBvcnQtcGFja2FnZS1ic3AtdGVybSc+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEEgZ3JvdXAgb2YgZHJpdmVycywgZGVmaW5pdGlvbnMsIGFuZCBvdGhlciBjb21wb25lbnRzIHRoYXQKKyAgICAgICAgICAgICAgICBwcm92aWRlIHN1cHBvcnQgZm9yIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBCU1BzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsnPllvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J2J1aWxkLWRpcmVjdG9yeSc+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkJ1aWxkIERpcmVjdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoaXMgdGVybSByZWZlcnMgdG8gdGhlIGFyZWEgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgc3lzdGVtIGZvciBidWlsZHMuCisgICAgICAgICAgICAgICAgVGhlIGFyZWEgaXMgY3JlYXRlZCB3aGVuIHlvdSA8ZmlsZW5hbWU+c291cmNlPC9maWxlbmFtZT4gdGhlCisgICAgICAgICAgICAgICAgc2V0dXAgZW52aXJvbm1lbnQgc2NyaXB0IHRoYXQgaXMgZm91bmQgaW4gdGhlIFNvdXJjZSBEaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAoaS5lLiA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRPUERJUic+PGZpbGVuYW1lPlRPUERJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHBvaW50cyB0byB0aGUgQnVpbGQgRGlyZWN0b3J5LjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPllvdSBoYXZlIGEgbG90IG9mIGZsZXhpYmlsaXR5IHdoZW4gY3JlYXRpbmcgdGhlIEJ1aWxkCisgICAgICAgICAgICAgICAgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgc29tZSBleGFtcGxlcyB0aGF0IHNob3cgaG93IHRvIGNyZWF0ZSB0aGUKKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGVzIGFzc3VtZSB5b3VyCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4gaXMKKyAgICAgICAgICAgICAgICBuYW1lZCA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DcmVhdGUgdGhlIEJ1aWxkIERpcmVjdG9yeSBpbnNpZGUgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlIERpcmVjdG9yeSBhbmQgbGV0IHRoZSBuYW1lIG9mIHRoZSBCdWlsZAorICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5IGRlZmF1bHQgdG8gPGZpbGVuYW1lPmJ1aWxkPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgJEhPTUUvcG9reQorICAgICAkIHNvdXJjZSAmT0VfSU5JVF9GSUxFOworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DcmVhdGUgdGhlIEJ1aWxkIERpcmVjdG9yeSBpbnNpZGUgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgaG9tZSBkaXJlY3RvcnkgYW5kIHNwZWNpZmljYWxseSBuYW1lIGl0CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dGVzdC1idWlsZHM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCAkSE9NRQorICAgICAkIHNvdXJjZSBwb2t5LyZPRV9JTklUX0ZJTEU7IHRlc3QtYnVpbGRzCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgUHJvdmlkZSBhIGRpcmVjdG9yeSBwYXRoIGFuZCBzcGVjaWZpY2FsbHkgbmFtZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIERpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFueSBpbnRlcm1lZGlhdGUgZm9sZGVycyBpbiB0aGUgcGF0aG5hbWUgbXVzdCBleGlzdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbmV4dCBleGFtcGxlIGNyZWF0ZXMgYSBCdWlsZCBEaXJlY3RvcnkgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ZUC0mUE9LWVZFUlNJT047PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGluIHlvdXIgaG9tZSBkaXJlY3Rvcnkgd2l0aGluIHRoZSBleGlzdGluZworICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IDxmaWxlbmFtZT5teWJ1aWxkczwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkY2QgJEhPTUUKKyAgICAgJCBzb3VyY2UgJEhPTUUvcG9reS8mT0VfSU5JVF9GSUxFOyAkSE9NRS9teWJ1aWxkcy9ZUC0mUE9LWVZFUlNJT047CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIEJ1aWxkIERpcmVjdG9yeSBjb250YWlucworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhlIGJ1aWxkIHN5c3RlbSB1c2VzIGZvcgorICAgICAgICAgICAgICAgICAgICBpdHMgd29yay4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+IGNhbm5vdCBiZSB1bmRlciBORlMuCisgICAgICAgICAgICAgICAgICAgIFRodXMsIGJ5IGRlZmF1bHQsIHRoZSBCdWlsZCBEaXJlY3RvcnkgY2Fubm90IGJlIHVuZGVyIE5GUy4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IG5lZWQgdGhlIEJ1aWxkIERpcmVjdG9yeSB0byBiZSB1bmRlciBORlMsCisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gc2V0IHRoaXMgdXAgYnkgc2V0dGluZyA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgdG8gdXNlIGEgbG9jYWwgZHJpdmUuCisgICAgICAgICAgICAgICAgICAgIERvaW5nIHNvIGVmZmVjdGl2ZWx5IHNlcGFyYXRlcyA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZnJvbSA8ZmlsZW5hbWU+VE9QRElSPC9maWxlbmFtZT4sIHdoaWNoIGlzIHRoZSBCdWlsZAorICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdoYXJkd2FyZS1idWlsZC1zeXN0ZW0tdGVybSc+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkJ1aWxkIFN5c3RlbTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoZSBzeXN0ZW0gdXNlZCB0byBidWlsZCBpbWFnZXMgaW4gYSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgRGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBpcyBzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgdGhlCisgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgaG9zdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q2xhc3Nlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEZpbGVzIHRoYXQgcHJvdmlkZSBmb3IgbG9naWMgZW5jYXBzdWxhdGlvbiBhbmQgaW5oZXJpdGFuY2Ugc28KKyAgICAgICAgICAgICAgICB0aGF0IGNvbW1vbmx5IHVzZWQgcGF0dGVybnMgY2FuIGJlIGRlZmluZWQgb25jZSBhbmQgdGhlbgorICAgICAgICAgICAgICAgIGVhc2lseSB1c2VkIGluIG11bHRpcGxlIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgRm9yIHJlZmVyZW5jZSBpbmZvcm1hdGlvbiBvbiB0aGUgWW9jdG8gUHJvamVjdCBjbGFzc2VzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzJz5DbGFzc2VzPC9saW5rPiIgY2hhcHRlci4KKyAgICAgICAgICAgICAgICBDbGFzcyBmaWxlcyBlbmQgd2l0aCB0aGUgPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlbmFtZSBleHRlbnNpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkNvbmZpZ3VyYXRpb24gRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaW4gdmFyaW91cyA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGVzIHByb3ZpZGVzIGdsb2JhbCBkZWZpbml0aW9ucyBvZiB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUgaW4KKyAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICBjb250YWlucyB1c2VyLWRlZmluZWQgdmFyaWFibGVzIHRoYXQgYWZmZWN0IGV2ZXJ5IGJ1aWxkLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bWV0YS1wb2t5L2NvbmYvZGlzdHJvL3Bva3kuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIGRlZmluZXMgWW9jdG8gImRpc3RybyIgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB1c2VkIG9ubHkgd2hlbiBidWlsZGluZyB3aXRoIHRoaXMgcG9saWN5LgorICAgICAgICAgICAgICAgIE1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlcywgd2hpY2gKKyAgICAgICAgICAgICAgICBhcmUgbG9jYXRlZCB0aHJvdWdob3V0IHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LCBkZWZpbmUKKyAgICAgICAgICAgICAgICB2YXJpYWJsZXMgZm9yIHNwZWNpZmljIGhhcmR3YXJlIGFuZCBhcmUgb25seSB1c2VkIHdoZW4gYnVpbGRpbmcKKyAgICAgICAgICAgICAgICBmb3IgdGhhdCB0YXJnZXQgKGUuZy4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1hY2hpbmUvYmVhZ2xlYm9uZS5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZpbGUgZGVmaW5lcyB2YXJpYWJsZXMgZm9yIHRoZSBUZXhhcyBJbnN0cnVtZW50cyBBUk0gQ29ydGV4LUE4CisgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgYm9hcmQpLgorICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gZmlsZXMgZW5kIHdpdGggYSA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGVuYW1lIGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYSBpZD0nY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluJz4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgSW4gZ2VuZXJhbCwgYSBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4gaXMgYSBjb2xsZWN0aW9uIG9mCisgICAgICAgICAgICAgICAgc29mdHdhcmUgZGV2ZWxvcG1lbnQgdG9vbHMgYW5kIHV0aWxpdGllcyB0aGF0IHJ1biBvbiBvbmUKKyAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUgYW5kIGFsbG93IHlvdSB0byBkZXZlbG9wIHNvZnR3YXJlIGZvciBhCisgICAgICAgICAgICAgICAgZGlmZmVyZW50LCBvciB0YXJnZXRlZCwgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgIFRoZXNlIHRvb2xjaGFpbnMgY29udGFpbiBjcm9zcy1jb21waWxlcnMsIGxpbmtlcnMsIGFuZAorICAgICAgICAgICAgICAgIGRlYnVnZ2VycyB0aGF0IGFyZSBzcGVjaWZpYyB0byB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgWW9jdG8gUHJvamVjdCBzdXBwb3J0cyB0d28gZGlmZmVyZW50IGNyb3NzLWRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgdG9vbGNoYWluczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBBIHRvb2xjaGFpbiBvbmx5IHVzZWQgYnkgYW5kIHdpdGhpbgorICAgICAgICAgICAgICAgICAgICAgICAgQml0QmFrZSB3aGVuIGJ1aWxkaW5nIGFuIGltYWdlIGZvciBhIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIHJlbG9jYXRhYmxlIHRvb2xjaGFpbiB1c2VkIG91dHNpZGUgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgYnkgZGV2ZWxvcGVycyB3aGVuIGRldmVsb3BpbmcgYXBwbGljYXRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHdpbGwgcnVuIG9uIGEgdGFyZ2V0ZWQgZGV2aWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+Q3JlYXRpb24gb2YgdGhlc2UgdG9vbGNoYWlucyBpcyBzaW1wbGUgYW5kIGF1dG9tYXRlZC4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdG9vbGNoYWluIGNvbmNlcHRzIGFzIHRoZXkgYXBwbHkgdG8gdGhlCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4tZ2VuZXJhdGlvbic+Q3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluIEdlbmVyYXRpb248L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICByZWxvY2F0YWJsZSB0b29sY2hhaW4gaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfU0RLX1VSTDsnPllvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgYW5kIHRoZSBFeHRlbnNpYmxlIFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoZVNESyk8L3VsaW5rPgorICAgICAgICAgICAgICAgIG1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+SW1hZ2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBBbiBpbWFnZSBpcyBhbiBhcnRpZmFjdCBvZiB0aGUgQml0QmFrZSBidWlsZCBwcm9jZXNzIGdpdmVuCisgICAgICAgICAgICAgICAgYSBjb2xsZWN0aW9uIG9mIHJlY2lwZXMgYW5kIHJlbGF0ZWQgTWV0YWRhdGEuCisgICAgICAgICAgICAgICAgSW1hZ2VzIGFyZSB0aGUgYmluYXJ5IG91dHB1dCB0aGF0IHJ1biBvbiBzcGVjaWZpYyBoYXJkd2FyZSBvcgorICAgICAgICAgICAgICAgIFFFTVUgYW5kIGFyZSB1c2VkIGZvciBzcGVjaWZpYyB1c2UtY2FzZXMuCisgICAgICAgICAgICAgICAgRm9yIGEgbGlzdCBvZiB0aGUgc3VwcG9ydGVkIGltYWdlIHR5cGVzIHRoYXQgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICBwcm92aWRlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtaW1hZ2VzJz5JbWFnZXM8L2xpbms+IgorICAgICAgICAgICAgICAgIGNoYXB0ZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkxheWVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQSBjb2xsZWN0aW9uIG9mIHJlY2lwZXMgcmVwcmVzZW50aW5nIHRoZSBjb3JlLAorICAgICAgICAgICAgICAgIGEgQlNQLCBvciBhbiBhcHBsaWNhdGlvbiBzdGFjay4KKyAgICAgICAgICAgICAgICBGb3IgYSBkaXNjdXNzaW9uIHNwZWNpZmljYWxseSBvbiBCU1AgTGF5ZXJzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2JzcC1sYXllcnMnPkJTUCBMYXllcnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUCkKKyAgICAgICAgICAgICAgICBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYSBpZD0nbWV0YWRhdGEnPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5NZXRhZGF0YTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoZSBmaWxlcyB0aGF0IEJpdEJha2UgcGFyc2VzIHdoZW4gYnVpbGRpbmcgYW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgSW4gZ2VuZXJhbCwgTWV0YWRhdGEgaW5jbHVkZXMgcmVjaXBlcywgY2xhc3NlcywgYW5kCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgICAgICBJbiB0aGUgY29udGV4dCBvZiB0aGUga2VybmVsICgia2VybmVsIE1ldGFkYXRhIiksIHRoZQorICAgICAgICAgICAgICAgIHRlcm0gcmVmZXJzIHRvIHRoZSBrZXJuZWwgY29uZmlnIGZyYWdtZW50cyBhbmQgZmVhdHVyZXMKKyAgICAgICAgICAgICAgICBjb250YWluZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2kveW9jdG8ta2VybmVsLWNhY2hlJz48ZmlsZW5hbWU+eW9jdG8ta2VybmVsLWNhY2hlPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdvZS1jb3JlJz4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+T0UtQ29yZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEEgY29yZSBzZXQgb2YgTWV0YWRhdGEgb3JpZ2luYXRpbmcgd2l0aCBPcGVuRW1iZWRkZWQgKE9FKQorICAgICAgICAgICAgICAgIHRoYXQgaXMgc2hhcmVkIGJldHdlZW4gT0UgYW5kIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIFRoaXMgTWV0YWRhdGEgaXMgZm91bmQgaW4gdGhlIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmEgaWQ9J2J1aWxkLXN5c3RlbS10ZXJtJz4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+T3BlbkVtYmVkZGVkIEJ1aWxkIFN5c3RlbTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gc3BlY2lmaWMgdG8gdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXMgYmFzZWQgb24gYW5vdGhlciBwcm9qZWN0IGtub3duCisgICAgICAgICAgICAgICAgYXMgIlBva3kiLCB3aGljaCB1c2VzCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYml0YmFrZS10ZXJtJz5CaXRCYWtlPC9saW5rPiBhcyB0aGUgdGFzaworICAgICAgICAgICAgICAgIGV4ZWN1dG9yLgorICAgICAgICAgICAgICAgIFRocm91Z2hvdXQgdGhlIFlvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbiBzZXQsIHRoZQorICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXMgc29tZXRpbWVzIHJlZmVycmVkIHRvIHNpbXBseQorICAgICAgICAgICAgICAgIGFzICJ0aGUgYnVpbGQgc3lzdGVtIi4KKyAgICAgICAgICAgICAgICBJZiBvdGhlciBidWlsZCBzeXN0ZW1zLCBzdWNoIGFzIGEgaG9zdCBvciB0YXJnZXQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgYXJlIHJlZmVyZW5jZWQsIHRoZSBkb2N1bWVudGF0aW9uIGNsZWFybHkgc3RhdGVzIHRoZQorICAgICAgICAgICAgICAgIGRpZmZlcmVuY2UuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEZvciBzb21lIGhpc3RvcmljYWwgaW5mb3JtYXRpb24gYWJvdXQgUG9reSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdwb2t5Jz5Qb2t5PC9saW5rPiB0ZXJtLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+UGFja2FnZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEluIHRoZSBjb250ZXh0IG9mIHRoZSBZb2N0byBQcm9qZWN0LCB0aGlzIHRlcm0gcmVmZXJzIHRvIGEKKyAgICAgICAgICAgICAgICByZWNpcGUncyBwYWNrYWdlZCBvdXRwdXQgcHJvZHVjZWQgYnkgQml0QmFrZSAoaS5lLiBhCisgICAgICAgICAgICAgICAgImJha2VkIHJlY2lwZSIpLgorICAgICAgICAgICAgICAgIEEgcGFja2FnZSBpcyBnZW5lcmFsbHkgdGhlIGNvbXBpbGVkIGJpbmFyaWVzIHByb2R1Y2VkIGZyb20gdGhlCisgICAgICAgICAgICAgICAgcmVjaXBlJ3Mgc291cmNlcy4KKyAgICAgICAgICAgICAgICBZb3UgImJha2UiIHNvbWV0aGluZyBieSBydW5uaW5nIGl0IHRocm91Z2ggQml0QmFrZS48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5JdCBpcyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgdGVybSAicGFja2FnZSIgY2FuLAorICAgICAgICAgICAgICAgIGluIGdlbmVyYWwsIGhhdmUgc3VidGxlIG1lYW5pbmdzLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgcGFja2FnZXMgcmVmZXJyZWQgdG8gaW4gdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjcGFja2FnZXMnPlRoZSBCdWlsZCBIb3N0IFBhY2thZ2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydCBhcmUgY29tcGlsZWQgYmluYXJpZXMKKyAgICAgICAgICAgICAgICB0aGF0LCB3aGVuIGluc3RhbGxlZCwgYWRkIGZ1bmN0aW9uYWxpdHkgdG8geW91ciBMaW51eAorICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbi48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5Bbm90aGVyIHBvaW50IHdvcnRoIG5vdGluZyBpcyB0aGF0IGhpc3RvcmljYWxseSB3aXRoaW4KKyAgICAgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCwgcmVjaXBlcyB3ZXJlIHJlZmVycmVkIHRvIGFzIHBhY2thZ2VzIC0gdGh1cywKKyAgICAgICAgICAgICAgICB0aGUgZXhpc3RlbmNlIG9mIHNldmVyYWwgQml0QmFrZSB2YXJpYWJsZXMgdGhhdCBhcmUgc2VlbWluZ2x5CisgICAgICAgICAgICAgICAgbWlzLW5hbWVkLAorICAgICAgICAgICAgICAgIChlLmcuIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+LCBhbmQKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEUnPjxmaWxlbmFtZT5QRTwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlBhY2thZ2UgR3JvdXBzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQXJiaXRyYXJ5IGdyb3VwcyBvZiBzb2Z0d2FyZSBSZWNpcGVzLgorICAgICAgICAgICAgICAgIFlvdSB1c2UgcGFja2FnZSBncm91cHMgdG8gaG9sZCByZWNpcGVzIHRoYXQsIHdoZW4gYnVpbHQsCisgICAgICAgICAgICAgICAgdXN1YWxseSBhY2NvbXBsaXNoIGEgc2luZ2xlIHRhc2suCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgcGFja2FnZSBncm91cCBjb3VsZCBjb250YWluIHRoZSByZWNpcGVzIGZvciBhCisgICAgICAgICAgICAgICAgY29tcGFueeKAmXMgcHJvcHJpZXRhcnkgb3IgdmFsdWUtYWRkIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgIE9yLCB0aGUgcGFja2FnZSBncm91cCBjb3VsZCBjb250YWluIHRoZSByZWNpcGVzIHRoYXQgZW5hYmxlCisgICAgICAgICAgICAgICAgZ3JhcGhpY3MuCisgICAgICAgICAgICAgICAgQSBwYWNrYWdlIGdyb3VwIGlzIHJlYWxseSBqdXN0IGFub3RoZXIgcmVjaXBlLgorICAgICAgICAgICAgICAgIEJlY2F1c2UgcGFja2FnZSBncm91cCBmaWxlcyBhcmUgcmVjaXBlcywgdGhleSBlbmQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZW5hbWUgZXh0ZW5zaW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdwb2t5Jz4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+UG9reTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoZSB0ZXJtICJwb2t5Iiwgd2hpY2ggaXMgcHJvbm91bmNlZAorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5QYWg8L2VtcGhhc2lzPi1rZWUsIGNhbiBtZWFuIHNldmVyYWwgdGhpbmdzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIGl0cyBtb3N0IGdlbmVyYWwgc2Vuc2UsIHBva3kgaXMgYW4gb3Blbi1zb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3QgdGhhdCB3YXMgaW5pdGlhbGx5IGRldmVsb3BlZCBieSBPcGVuZWRIYW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgT3BlbmVkSGFuZCBkZXZlbG9wZWQgcG9reSBvZmYgb2YgdGhlIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGNyZWF0ZSBhIGNvbW1lcmNpYWxseQorICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGFibGUgYnVpbGQgc3lzdGVtIGZvciBlbWJlZGRlZCBMaW51eC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIEludGVsIENvcnBvcmF0aW9uIGFjcXVpcmVkIE9wZW5lZEhhbmQsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcG9reSBwcm9qZWN0IGJlY2FtZSB0aGUgYmFzaXMgZm9yIHRoZSBZb2N0byBQcm9qZWN0J3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBXaXRoaW4gdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOyc+U291cmNlIFJlcG9zaXRvcmllczwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgInBva3kiIGV4aXN0cyBhcyBhIHNlcGFyYXRlIEdpdAorICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSBmcm9tIHdoaWNoIHlvdSBjYW4gY2xvbmUgdG8geWllbGQgYSBsb2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnkgdGhhdCBpcyBhIGNvcHkgb24geW91ciBob3N0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRodXMsICJwb2t5IiBjYW4gcmVmZXIgdG8gdGhlIHVwc3RyZWFtIG9yCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBjb3B5IG9mIHRoZSBmaWxlcyB1c2VkIGZvciBkZXZlbG9wbWVudCB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZpbmFsbHksICJwb2t5IiBjYW4gcmVmZXIgdG8gdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk8nPjxmaWxlbmFtZT5ESVNUUk88L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIChpLmUuIGRpc3RyaWJ1dGlvbikgY3JlYXRlZCB3aGVuIHlvdSB1c2UgdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgICAgICAgICBQcm9qZWN0IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkgdG8gYnVpbGQgYW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+UmVjaXBlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQSBzZXQgb2YgaW5zdHJ1Y3Rpb25zIGZvciBidWlsZGluZyBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICBBIHJlY2lwZSBkZXNjcmliZXMgd2hlcmUgeW91IGdldCBzb3VyY2UgY29kZSwgd2hpY2ggcGF0Y2hlcworICAgICAgICAgICAgICAgIHRvIGFwcGx5LCBob3cgdG8gY29uZmlndXJlIHRoZSBzb3VyY2UsIGhvdyB0byBjb21waWxlIGl0IGFuZCBzbyBvbi4KKyAgICAgICAgICAgICAgICBSZWNpcGVzIGFsc28gZGVzY3JpYmUgZGVwZW5kZW5jaWVzIGZvciBsaWJyYXJpZXMgb3IgZm9yIG90aGVyCisgICAgICAgICAgICAgICAgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICBSZWNpcGVzIHJlcHJlc2VudCB0aGUgbG9naWNhbCB1bml0IG9mIGV4ZWN1dGlvbiwgdGhlIHNvZnR3YXJlCisgICAgICAgICAgICAgICAgdG8gYnVpbGQsIHRoZSBpbWFnZXMgdG8gYnVpbGQsIGFuZCB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGUgZXh0ZW5zaW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdyZWZlcmVuY2Uta2l0LXRlcm0nPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5SZWZlcmVuY2UgS2l0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQSB3b3JraW5nIGV4YW1wbGUgb2YgYSBzeXN0ZW0sIHdoaWNoIGluY2x1ZGVzIGEKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdib2FyZC1zdXBwb3J0LXBhY2thZ2UtYnNwLXRlcm0nPkJTUDwvbGluaz4KKyAgICAgICAgICAgICAgICBhcyB3ZWxsIGFzIGEKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdoYXJkd2FyZS1idWlsZC1zeXN0ZW0tdGVybSc+YnVpbGQgc3lzdGVtPC9saW5rPgorICAgICAgICAgICAgICAgIGFuZCBvdGhlciBjb21wb25lbnRzLCB0aGF0IGNhbiB3b3JrIG9uIHNwZWNpZmljIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdzb3VyY2UtZGlyZWN0b3J5Jz4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+U291cmNlIERpcmVjdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoaXMgdGVybSByZWZlcnMgdG8gdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgY3JlYXRlZCBhcyBhIHJlc3VsdAorICAgICAgICAgICAgICAgIG9mIGNyZWF0aW5nIGEgbG9jYWwgY29weSBvZiB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5IDxmaWxlbmFtZT5naXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBvciBleHBhbmRpbmcgYSByZWxlYXNlZCA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHRhcmJhbGwuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIENyZWF0aW5nIGEgbG9jYWwgY29weSBvZiB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeSBpcyB0aGUgcmVjb21tZW5kZWQgbWV0aG9kIGZvciBzZXR0aW5nIHVwCisgICAgICAgICAgICAgICAgICAgIHlvdXIgU291cmNlIERpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgU29tZXRpbWVzIHlvdSBtaWdodCBoZWFyIHRoZSB0ZXJtICJwb2t5IGRpcmVjdG9yeSIgdXNlZCB0byByZWZlcgorICAgICAgICAgICAgICAgIHRvIHRoaXMgZGlyZWN0b3J5IHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBmaWxlIG9yCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBuYW1lcyB0aGF0IGNvbnRhaW4gc3BhY2VzLgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRoYXQgdGhlIFNvdXJjZSBEaXJlY3RvcnkgeW91IHVzZSBkb2VzIG5vdCBjb250YWluCisgICAgICAgICAgICAgICAgICAgIHRoZXNlIHR5cGVzIG9mIG5hbWVzLgorICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgU291cmNlIERpcmVjdG9yeSBjb250YWlucyBCaXRCYWtlLCBEb2N1bWVudGF0aW9uLAorICAgICAgICAgICAgICAgIE1ldGFkYXRhIGFuZCBvdGhlciBmaWxlcyB0aGF0IGFsbCBzdXBwb3J0IHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IG11c3QgaGF2ZSB0aGUgU291cmNlIERpcmVjdG9yeSBpbiBwbGFjZSBvbgorICAgICAgICAgICAgICAgIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtIGluIG9yZGVyIHRvIGRvIGFueSBkZXZlbG9wbWVudCB1c2luZworICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0LjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPldoZW4geW91IGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2YgdGhlIEdpdCByZXBvc2l0b3J5LCB5b3UKKyAgICAgICAgICAgICAgICBjYW4gbmFtZSB0aGUgcmVwb3NpdG9yeSBhbnl0aGluZyB5b3UgbGlrZS4KKyAgICAgICAgICAgICAgICBUaHJvdWdob3V0IG11Y2ggb2YgdGhlIGRvY3VtZW50YXRpb24sICJwb2t5IgorICAgICAgICAgICAgICAgIGlzIHVzZWQgYXMgdGhlIG5hbWUgb2YgdGhlIHRvcC1sZXZlbCBmb2xkZXIgb2YgdGhlIGxvY2FsIGNvcHkgb2YKKyAgICAgICAgICAgICAgICB0aGUgcG9reSBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICBTbywgZm9yIGV4YW1wbGUsIGNsb25pbmcgdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gR2l0CisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSByZXN1bHRzIGluIGEgbG9jYWwgR2l0IHJlcG9zaXRvcnkgd2hvc2UgdG9wLWxldmVsCisgICAgICAgICAgICAgICAgZm9sZGVyIGlzIGFsc28gbmFtZWQgInBva3kiLjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPldoaWxlIGl0IGlzIG5vdCByZWNvbW1lbmRlZCB0aGF0IHlvdSB1c2UgdGFyYmFsbCBleHBhbnNpb24KKyAgICAgICAgICAgICAgICB0byBzZXQgdXAgdGhlIFNvdXJjZSBEaXJlY3RvcnksIGlmIHlvdSBkbywgdGhlIHRvcC1sZXZlbAorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBuYW1lIG9mIHRoZSBTb3VyY2UgRGlyZWN0b3J5IGlzIGRlcml2ZWQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2UgdGFyYmFsbC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZG93bmxvYWRpbmcgYW5kIHVucGFja2luZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4mWU9DVE9fUE9LWV9UQVJCQUxMOzwvZmlsZW5hbWU+IHJlc3VsdHMgaW4gYQorICAgICAgICAgICAgICAgIFNvdXJjZSBEaXJlY3Rvcnkgd2hvc2Ugcm9vdCBmb2xkZXIgaXMgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JllPQ1RPX1BPS1k7PC9maWxlbmFtZT4uPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+SXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlCisgICAgICAgICAgICAgICAgU291cmNlIERpcmVjdG9yeSBjcmVhdGVkIGJ5IHVucGFja2luZyBhIHJlbGVhc2VkIHRhcmJhbGwgYXMKKyAgICAgICAgICAgICAgICBjb21wYXJlZCB0byBjbG9uaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3k8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSB1bnBhY2sgYSB0YXJiYWxsLCB5b3UgaGF2ZSBhbiBleGFjdCBjb3B5IG9mIHRoZSBmaWxlcworICAgICAgICAgICAgICAgIGJhc2VkIG9uIHRoZSB0aW1lIG9mIHJlbGVhc2UgLSBhIGZpeGVkIHJlbGVhc2UgcG9pbnQuCisgICAgICAgICAgICAgICAgQW55IGNoYW5nZXMgeW91IG1ha2UgdG8geW91ciBsb2NhbCBmaWxlcyBpbiB0aGUgU291cmNlIERpcmVjdG9yeQorICAgICAgICAgICAgICAgIGFyZSBvbiB0b3Agb2YgdGhlIHJlbGVhc2UgYW5kIHdpbGwgcmVtYWluIGxvY2FsIG9ubHkuCisgICAgICAgICAgICAgICAgT24gdGhlIG90aGVyIGhhbmQsIHdoZW4geW91IGNsb25lIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnksIHlvdSBoYXZlIGFuIGFjdGl2ZSBkZXZlbG9wbWVudCByZXBvc2l0b3J5IHdpdGgKKyAgICAgICAgICAgICAgICBhY2Nlc3MgdG8gdGhlIHVwc3RyZWFtIHJlcG9zaXRvcnkncyBicmFuY2hlcyBhbmQgdGFncy4KKyAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIGFueSBsb2NhbCBjaGFuZ2VzIHlvdSBtYWtlIHRvIHRoZSBsb2NhbAorICAgICAgICAgICAgICAgIFNvdXJjZSBEaXJlY3RvcnkgY2FuIGJlIGxhdGVyIGFwcGxpZWQgdG8gYWN0aXZlIGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgYnJhbmNoZXMgb2YgdGhlIHVwc3RyZWFtIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gR2l0CisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeS48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb25jZXB0cyByZWxhdGVkIHRvIEdpdAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcmllcywgYnJhbmNoZXMsIGFuZCB0YWdzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlcG9zaXRvcmllcy10YWdzLWFuZC1icmFuY2hlcyc+UmVwb3NpdG9yaWVzLCBUYWdzLCBhbmQgQnJhbmNoZXM8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRhc2s6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBBIHVuaXQgb2YgZXhlY3V0aW9uIGZvciBCaXRCYWtlIChlLmcuCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbXBpbGUnPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1mZXRjaCc+PGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYXRjaCc+PGZpbGVuYW1lPmRvX3BhdGNoPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmEgaWQ9J3RvYXN0ZXItdGVybSc+PGVtcGhhc2lzPlRvYXN0ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBBIHdlYiBpbnRlcmZhY2UgdG8gdGhlIFlvY3RvIFByb2plY3QncworICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLXN5c3RlbS10ZXJtJz5PcGVuRW1iZWRkZWQgQnVpbGQgU3lzdGVtPC9saW5rPi4KKyAgICAgICAgICAgICAgICBUaGUgaW50ZXJmYWNlIGVuYWJsZXMgeW91IHRvIGNvbmZpZ3VyZSBhbmQgcnVuIHlvdXIgYnVpbGRzLgorICAgICAgICAgICAgICAgIEluZm9ybWF0aW9uIGFib3V0IGJ1aWxkcyBpcyBjb2xsZWN0ZWQgYW5kIHN0b3JlZCBpbiBhIGRhdGFiYXNlLgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBUb2FzdGVyLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfVE9BU1RfVVJMOyc+WW9jdG8gUHJvamVjdCBUb2FzdGVyIE1hbnVhbDwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5VcHN0cmVhbTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEEgcmVmZXJlbmNlIHRvIHNvdXJjZSBjb2RlIG9yIHJlcG9zaXRvcmllcworICAgICAgICAgICAgICAgIHRoYXQgYXJlIG5vdCBsb2NhbCB0byB0aGUgZGV2ZWxvcG1lbnQgc3lzdGVtIGJ1dCBsb2NhdGVkIGluIGEKKyAgICAgICAgICAgICAgICBtYXN0ZXIgYXJlYSB0aGF0IGlzIGNvbnRyb2xsZWQgYnkgdGhlIG1haW50YWluZXIgb2YgdGhlIHNvdXJjZQorICAgICAgICAgICAgICAgIGNvZGUuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGluIG9yZGVyIGZvciBhIGRldmVsb3BlciB0byB3b3JrIG9uIGEgcGFydGljdWxhcgorICAgICAgICAgICAgICAgIHBpZWNlIG9mIGNvZGUsIHRoZXkgbmVlZCB0byBmaXJzdCBnZXQgYSBjb3B5IG9mIGl0IGZyb20gYW4KKyAgICAgICAgICAgICAgICAidXBzdHJlYW0iIHNvdXJjZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgPC9wYXJhPgogPC9zZWN0aW9uPgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL21pZ3JhdGlvbi54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL21pZ3JhdGlvbi54bWwKaW5kZXggN2NhOTI5Yy4uODExNTc3YiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9taWdyYXRpb24ueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvbWlncmF0aW9uLnhtbApAQCAtMjUxLDcgKzI1MSw3IEBACiAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyByZWNpcGVzIGhhdmUgYmVlbiByZW1vdmVkLgogICAgICAgICAgICAgICAgIEZvciBtb3N0IG9mIHRoZW0sIGl0IGlzIHVubGlrZWx5IHRoYXQgeW91IHdvdWxkIGhhdmUgYW55CiAgICAgICAgICAgICAgICAgcmVmZXJlbmNlcyB0byB0aGVtIGluIHlvdXIgb3duCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4uCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nbWV0YWRhdGEnPk1ldGFkYXRhPC9saW5rPi4KICAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3Ugc2hvdWxkIGNoZWNrIHlvdXIgbWV0YWRhdGEgYWdhaW5zdCB0aGlzIGxpc3QgdG8gYmUgc3VyZToKICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgogICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5saWJ4MTEtdHJpbTwvZmlsZW5hbWU+PC9lbXBoYXNpcz46CkBAIC0yOTMsNyArMjkzLDcgQEAKICAgICAgICAgICAgICAgICBGb3IgdGhlIHJlbWFpbmRlciwgeW91IGNhbiBub3cgZmluZCB0aGVtIGluIHRoZQogICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWV4dHJhczwvZmlsZW5hbWU+IHJlcG9zaXRvcnksIHdoaWNoIGlzIGluIHRoZQogICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QKLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtcmVwb3NpdG9yaWVzJz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4uCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLXJlcG9zaXRvcmllcyc+U291cmNlIFJlcG9zaXRvcmllczwvbGluaz4uCiAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvc2VjdGlvbj4KICAgICA8L3NlY3Rpb24+CkBAIC00MzgsMTEgKzQzOCwxMSBAQAogICAgICAgICAgICAgeW91IG5vdyBuZWVkIHRvIGNyZWF0ZSBhbiBhcHBlbmQgZmlsZSBmb3IgdGhlCiAgICAgICAgICAgICA8ZmlsZW5hbWU+aW5pdC1pZnVwZG93bjwvZmlsZW5hbWU+IHJlY2lwZSBpbnN0ZWFkLCB3aGljaCB5b3UgY2FuCiAgICAgICAgICAgICBmaW5kIGluIHRoZQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgogICAgICAgICAgICAgYXQgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd248L2ZpbGVuYW1lPi4KICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIGFwcGVuZCBmaWxlcywgc2VlIHRoZQogICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5nLWJiYXBwZW5kLWZpbGVzJz5Vc2luZyAuYmJhcHBlbmQgRmlsZXM8L3VsaW5rPiIKLSAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KICAgICAgICAgPC9wYXJhPgogICAgIDwvc2VjdGlvbj4KIApAQCAtODIxLDcgKzgyMSw3IEBACiAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgogICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaGlzdG9yeSBpcyBlbmFibGVkLCBpdHMgb3V0cHV0IGlzIG5vdyB3cml0dGVuCiAgICAgICAgICAgICAgICAgICAgIHVuZGVyIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPgogICAgICAgICAgICAgICAgICAgICByYXRoZXIgdGhhbgogICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+LgogICAgICAgICAgICAgICAgICAgICBEb2luZyBzbyBtYWtlcyBpdCBlYXNpZXIgdG8gZGVsZXRlCkBAIC05OTIsNyArOTkyLDcgQEAKICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgcGVyZm9ybWluZyBhdXRvbWF0ZWQgaW1hZ2UgdGVzdHMgaW4gdGhlCiAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGVyZm9ybWluZy1hdXRvbWF0ZWQtcnVudGltZS10ZXN0aW5nJz5QZXJmb3JtaW5nIEF1dG9tYXRlZCBSdW50aW1lIFRlc3Rpbmc8L3VsaW5rPiIKLSAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KICAgICAgICAgPC9wYXJhPgogICAgIDwvc2VjdGlvbj4KIApAQCAtMTE3Myw3ICsxMTczLDcgQEAKICAgICAgICAgICAgIGNsYXNzIGhhcyBiZWVuIHJld3JpdHRlbiBhbmQgaXRzIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gc2ltcGxpZmllZC4KICAgICAgICAgICAgIEZvciBtb3JlIGRldGFpbHMgb24gdGhlIHNvdXJjZSBhcmNoaXZlciwgc2VlIHRoZQogICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21haW50YWluaW5nLW9wZW4tc291cmNlLWxpY2Vuc2UtY29tcGxpYW5jZS1kdXJpbmcteW91ci1wcm9kdWN0cy1saWZlY3ljbGUnPk1haW50YWluaW5nIE9wZW4gU291cmNlIExpY2Vuc2UgQ29tcGxpYW5jZSBEdXJpbmcgWW91ciBQcm9kdWN0J3MgTGlmZWN5Y2xlPC91bGluaz4iCi0gICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgICAgICA8L3BhcmE+CiAgICAgPC9zZWN0aW9uPgogCkBAIC0xMjE4LDcgKzEyMTgsNyBAQAogCiAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNiaXRiYWtlLXRlcm0nPkJpdEJha2U8L3VsaW5rPi4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2JpdGJha2UtdGVybSc+Qml0QmFrZTwvbGluaz4uCiAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi1tYXRjaGluZy1icmFuY2gtcmVxdWlyZW1lbnQtZm9yLWdpdC1mZXRjaGluZyc+CkBAIC0xMzYyLDcgKzEzNjIsNyBAQAogICAgICAgICAgICAgICAgIGluY3JlbWVudHMgb24gY2hhbmdlcywgdXNlIHRoZSBQUiBzZXJ2aWNlIGluc3RlYWQuCiAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG91dCBtb3JlIGFib3V0IHRoaXMgc2VydmljZSBpbiB0aGUKICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjd29ya2luZy13aXRoLWEtcHItc2VydmljZSc+V29ya2luZyBXaXRoIGEgUFIgU2VydmljZTwvdWxpbms+IgotICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L3NlY3Rpb24+CiAKQEAgLTE0NTMsNyArMTQ1Myw3IEBACiAgICAgICAgICAgICBQYWNrYWdlIFRlc3RzIChwdGVzdCkgYXJlIGJ1aWx0IGJ1dCBub3QgaW5zdGFsbGVkIGJ5IGRlZmF1bHQuCiAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdXNpbmcgUGFja2FnZSBUZXN0cywgc2VlIHRoZQogICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3Rlc3RpbmctcGFja2FnZXMtd2l0aC1wdGVzdCc+U2V0dGluZyB1cCBhbmQgcnVubmluZyBwYWNrYWdlIHRlc3QgKHB0ZXN0KTwvdWxpbms+IgotICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgPGZpbGVuYW1lPnB0ZXN0PC9maWxlbmFtZT4gY2xhc3MsIHNlZSB0aGUKICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wdGVzdCc+PGZpbGVuYW1lPnB0ZXN0LmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCiAgICAgICAgICAgICBzZWN0aW9uLgpAQCAtMTUyNSw3ICsxNTI1LDcgQEAKICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICBUaGUgdG9wLWxldmVsIDxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT4gZmlsZSBoYXMgYmVlbiBjaGFuZ2VkCiAgICAgICAgICAgICB0byBiZXR0ZXIgZGVzY3JpYmUgdGhlIGxpY2Vuc2Ugb2YgdGhlIHZhcmlvdXMgY29tcG9uZW50cyBvZgotICAgICAgICAgICAgT0UtQ29yZS4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J29lLWNvcmUnPk9FLUNvcmU8L2xpbms+LgogICAgICAgICAgICAgSG93ZXZlciwgdGhlIGxpY2Vuc2luZyBpdHNlbGYgcmVtYWlucyB1bmNoYW5nZWQuCiAgICAgICAgIDwvcGFyYT4KIApAQCAtMTc0OCw3ICsxNzQ4LDcgQEAKIAogICAgICAgICA8cGFyYT4KICAgICAgICAgICAgIFRoZSBtaW5pbXVtCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNnaXQnPkdpdDwvdWxpbms+IHZlcnNpb24gcmVxdWlyZWQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dpdCc+R2l0PC9saW5rPiB2ZXJzaW9uIHJlcXVpcmVkCiAgICAgICAgICAgICBvbiB0aGUgYnVpbGQgaG9zdCBpcyBub3cgMS43LjggYmVjYXVzZSB0aGUKICAgICAgICAgICAgIDxmaWxlbmFtZT4tLWxpc3Q8L2ZpbGVuYW1lPiBvcHRpb24gaXMgbm93IHJlcXVpcmVkIGJ5CiAgICAgICAgICAgICBCaXRCYWtlJ3MgR2l0IGZldGNoZXIuCkBAIC0yNTcyLDcgKzI1NzIsOCBAQAogCiAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgTWFpbnRlbmFuY2UgdHJhY2tpbmcgZGF0YSBmb3IgcmVjaXBlcyB0aGF0IHdhcyBwcmV2aW91c2x5IHBhcnQKLSAgICAgICAgICAgIG9mIDxmaWxlbmFtZT5tZXRhLXlvY3RvPC9maWxlbmFtZT4gaGFzIGJlZW4gbW92ZWQgdG8gT0UtQ29yZS4KKyAgICAgICAgICAgIG9mIDxmaWxlbmFtZT5tZXRhLXlvY3RvPC9maWxlbmFtZT4gaGFzIGJlZW4gbW92ZWQgdG8KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J29lLWNvcmUnPk9FLUNvcmU8L2xpbms+LgogICAgICAgICAgICAgVGhlIGNoYW5nZSBpbmNsdWRlcyA8ZmlsZW5hbWU+cGFja2FnZV9yZWdleC5pbmM8L2ZpbGVuYW1lPiBhbmQKICAgICAgICAgICAgIDxmaWxlbmFtZT5kaXN0cm9fYWxpYXMuaW5jPC9maWxlbmFtZT4sIHdoaWNoIGFyZSB0eXBpY2FsbHkgZW5hYmxlZAogICAgICAgICAgICAgd2hlbiB1c2luZyB0aGUKQEAgLTMwMDAsOCArMzAwMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGZyb20gPGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+IGluc3RlYWQuCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Ym9vdC1kaXJlY3RkaXNrPC9maWxlbmFtZT46Ci0gICAgICAgICAgICAgICAgICAgIE1lcmdlZCBpbnRvIHRoZQotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pbWFnZS12bSc+PGZpbGVuYW1lPmltYWdlLXZtPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIE1lcmdlZCBpbnRvIHRoZSA8ZmlsZW5hbWU+aW1hZ2Utdm08L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgICAgICBjbGFzcy4KICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5ib290LWRpcmVjdGRpc2s8L2ZpbGVuYW1lPiBjbGFzcyB3YXMgcmFyZWx5CiAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IHVzZWQuCkBAIC0zMjEwLDcgKzMyMTAsOCBAQAogICAgICAgICAgICAgWW91IGNhbiBlbmFibGUsIGRpc2FibGUsIGFuZCB0ZXN0IHRoZSBnZW5lcmF0aW9uIG9mIHRoaXMgZGF0YS4KICAgICAgICAgICAgIFNlZSB0aGUKICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNlbmFibGluZy1nb2JqZWN0LWludHJvc3BlY3Rpb24tc3VwcG9ydCc+RW5hYmxpbmcgR09iamVjdCBJbnRyb3NwZWN0aW9uIFN1cHBvcnQ8L3VsaW5rPiIKLSAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbAorICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3Rpb24+CiAKQEAgLTM0MTksNyArMzQyMCw4IEBACiAgICAgICAgICAgICAgICAgRm9yIGhlbHAgcHJlcGFyaW5nIG1ldGFkYXRhLCBzZWUgYW55IG9mIHRoZSBtYW55IFB5dGhvbiAzIHBvcnRpbmcKICAgICAgICAgICAgICAgICBndWlkZXMgYXZhaWxhYmxlLgogICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gcmVmZXJlbmNlIHRoZSBjb252ZXJzaW9uIGNvbW1pdHMgZm9yIEJpdGJha2UKLSAgICAgICAgICAgICAgICBhbmQgeW91IGNhbiB1c2UgT0UtQ29yZSBhcyBhIGd1aWRlIGZvciBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIGFuZCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J29lLWNvcmUnPk9FLUNvcmU8L2xpbms+IGFzIGEgZ3VpZGUgZm9yIGNoYW5nZXMuCiAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSBwYXJ0aWN1bGFyIGFyZWFzIG9mIGludGVyZXN0OgogICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgKiBzdWJwcm9jZXNzIGNvbW1hbmQtbGluZSBwaXBlcyBuZWVkaW5nIGxvY2FsZSBkZWNvZGluZwpAQCAtMzUwOCw3ICszNTEwLDggQEAKICAgICAgICAgICAgIGhhcmQtY29kaW5nIGFueSBrbm93bGVkZ2UgYWJvdXQgZGlmZmVyZW50IG1hY2hpbmVzLgogICAgICAgICAgICAgVXNpbmcgYSBjb25maWd1cmF0aW9uIGZpbGUgaXMgcGFydGljdWxhcmx5IGNvbnZlbmllbnQgd2hlbiB0cnlpbmcKICAgICAgICAgICAgIHRvIHVzZSBRRU1VIHdpdGggbWFjaGluZXMgb3RoZXIgdGhhbiB0aGUKLSAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11KjwvZmlsZW5hbWU+IG1hY2hpbmVzIGluIE9FLUNvcmUuCisgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdSo8L2ZpbGVuYW1lPiBtYWNoaW5lcyBpbgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nb2UtY29yZSc+T0UtQ29yZTwvbGluaz4uCiAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnFlbXVib290LmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGlzIGdlbmVyYXRlZCBieSB0aGUKICAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11Ym9vdDwvZmlsZW5hbWU+CiAgICAgICAgICAgICBjbGFzcyB3aGVuIHRoZSByb290IGZpbGVzeXN0ZW0gaXMgYmVpbmcgYnVpbGQgKGkuZS4KQEAgLTQwMzUsNyArNDAzOCw3IEBACiAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkZvciBhbiBleGFtcGxlLCBzZWUgdGhlCiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5waXhidWZjYWNoZTwvZmlsZW5hbWU+IGNsYXNzIGluCiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvPC9maWxlbmFtZT4gaW4gdGhlIFlvY3RvIFByb2plY3QKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLXJlcG9zaXRvcmllcyc+U291cmNlIFJlcG9zaXRvcmllczwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtcmVwb3NpdG9yaWVzJz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC9saW5rPi4KICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlNTVEFURVBPU1RJTlNURlVOQ1M8L2ZpbGVuYW1lPiB2YXJpYWJsZQogICAgICAgICAgICAgICAgICAgICAgICAgaXRzZWxmIGlzIG5vdyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHRoZQpAQCAtNDQ3OCw3ICs0NDgxLDggQEAKICAgICAgICAgICAgICAgICAgICAgbmVlZGVkIGJ5IGN1cnJlbnQgaGFyZHdhcmUuCiAgICAgICAgICAgICAgICAgICAgIFRodXMsIEdTdHJlYW1lcidzIGl2b3JiaXMgcGx1Z2luIGhhcyBiZWVuIGRpc2FibGVkCiAgICAgICAgICAgICAgICAgICAgIGJ5IGRlZmF1bHQgZWxpbWluYXRpbmcgdGhlIG5lZWQgZm9yIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dHJlbW9yPC9maWxlbmFtZT4gcmVjaXBlIGluIE9FLUNvcmUuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50cmVtb3I8L2ZpbGVuYW1lPiByZWNpcGUgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nb2UtY29yZSc+T0UtQ29yZTwvbGluaz4uCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+Z3VtbWlib290OjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KQEAgLTQ0OTUsOCArNDQ5OSw4IEBACiAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gV2ljOgogICAgICAgICAgICAgPG5vdGU+CiAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gV2ljLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NyZWF0aW5nLXBhcnRpdGlvbmVkLWltYWdlcyc+Q3JlYXRpbmcgUGFydGl0aW9uZWQgSW1hZ2VzPC91bGluaz4iCi0gICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NyZWF0aW5nLXBhcnRpdGlvbmVkLWltYWdlcy11c2luZy13aWMnPkNyZWF0aW5nIFBhcnRpdGlvbmVkIEltYWdlcyBVc2luZyBXaWM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KICAgICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CiAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgpAQCAtNDcxNyw2ICs0NzIxLDUyMyBAQAogICAgICAgICA8L3BhcmE+CiAgICAgPC9zZWN0aW9uPgogPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nbW92aW5nLXRvLXRoZS15b2N0by1wcm9qZWN0LTIuNC1yZWxlYXNlJz4KKyAgICA8dGl0bGU+TW92aW5nIHRvIHRoZSBZb2N0byBQcm9qZWN0IDIuNCBSZWxlYXNlPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgbWlncmF0aW9uIGluZm9ybWF0aW9uIGZvciBtb3ZpbmcgdG8gdGhlCisgICAgICAgIFlvY3RvIFByb2plY3QgMi40IFJlbGVhc2UgZnJvbSB0aGUgcHJpb3IgcmVsZWFzZS4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTIuNC1tZW1vcnktcmVzaWRlbnQtbW9kZSc+CisgICAgICAgIDx0aXRsZT5NZW1vcnkgUmVzaWRlbnQgTW9kZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIHBlcnNpc3RlbnQgbW9kZSBpcyBub3cgYXZhaWxhYmxlIGluIEJpdEJha2UncyBkZWZhdWx0IG9wZXJhdGlvbiwKKyAgICAgICAgICAgIHJlcGxhY2luZyBpdHMgcHJldmlvdXMgIm1lbW9yeSByZXNpZGVudCBtb2RlIiAoaS5lLgorICAgICAgICAgICAgPGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIE5vdyB5b3Ugb25seSBuZWVkIHRvIHNldAorICAgICAgICAgICAgPGZpbGVuYW1lPkJCX1NFUlZFUl9USU1FT1VUPC9maWxlbmFtZT4gdG8gYSB0aW1lb3V0CisgICAgICAgICAgICAoaW4gc2Vjb25kcykgYW5kIEJpdEJha2UncyBzZXJ2ZXIgc3RheXMgcmVzaWRlbnQgZm9yIHRoYXQKKyAgICAgICAgICAgIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gaW52b2NhdGlvbnMuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+IHNjcmlwdCBoYXMgYmVlbgorICAgICAgICAgICAgcmVtb3ZlZCBzaW5jZSBhIHNlcGFyYXRlIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBpcyBubyBsb25nZXIKKyAgICAgICAgICAgIG5lZWRlZC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMi40LXBhY2thZ2luZy1jaGFuZ2VzJz4KKyAgICAgICAgPHRpdGxlPlBhY2thZ2luZyBDaGFuZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdpbmcgY2hhbmdlcyB0aGF0IGhhdmUKKyAgICAgICAgICAgIG9jdXJyZWQ6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5weXRob24zPC9maWxlbmFtZT4gQ2hhbmdlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYWluICJweXRob24zIiBwYWNrYWdlIG5vdyBicmluZ3MgaW4gYWxsIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkIFB5dGhvbiAzIGRpc3RyaWJ1dGlvbiByYXRoZXIgdGhhbiBhIHN1YnNldC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGJlaGF2aW9yIG1hdGNoZXMgd2hhdCBpcyBleHBlY3RlZCBiYXNlZCBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWRpdGlvbmFsIExpbnV4IGRpc3RyaWJ1dGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdpc2ggdG8gaW5zdGFsbCBhIHN1YnNldCBvZiBQeXRob24gMywgc3BlY2lmeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5weXRob24tY29yZTwvZmlsZW5hbWU+IHBsdXMgb25lIG9yIG1vcmUgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5kaXZpZHVhbCBwYWNrYWdlcyB0aGF0IGFyZSBzdGlsbCBwcm9kdWNlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPnB5dGhvbjM8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YnoyLnB5PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmx6bWEucHk8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9jb21wcmVzc2lvbi5weTwvZmlsZW5hbWU+IHNjcmlwdHMgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZW4gbW92ZWQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cHl0aG9uMy1taXNjPC9maWxlbmFtZT4gcGFja2FnZSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+cHl0aG9uMy1jb21wcmVzc2lvbjwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+YmludXRpbHM8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmxpYmJmZDwvZmlsZW5hbWU+IGxpYnJhcnkgaXMgbm93IHBhY2thZ2VkIGluCisgICAgICAgICAgICAgICAgICAgIGEgc2VwYXJhdGUgImxpYmJmZCIgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBwYWNrYWdpbmcgc2F2ZXMgc3BhY2Ugd2hlbiBjZXJ0YWluIHRvb2xzCisgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5wZXJmPC9maWxlbmFtZT4pIGFyZSBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgIEluIHN1Y2ggY2FzZXMsIHRoZSB0b29scyBvbmx5IG5lZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYmJmZDwvZmlsZW5hbWU+IHJhdGhlciB0aGFuIGFsbCB0aGUgcGFja2FnZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpbnV0aWxzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT51dGlsLWxpbnV4PC9maWxlbmFtZT4gQ2hhbmdlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+c3U8L2ZpbGVuYW1lPiBwcm9ncmFtIGlzIG5vdyBwYWNrYWdlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgc2VwYXJhdGUgInV0aWwtbGludXgtc3UiIHBhY2thZ2UsIHdoaWNoIGlzIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsdCB3aGVuICJwYW0iIGlzIGxpc3RlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnV0aWwtbGludXg8L2ZpbGVuYW1lPiBzaG91bGQgbm90IGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIHVubGVzcyBpdCBpcyBuZWVkZWQgYmVjYXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zdTwvZmlsZW5hbWU+IGlzIG5vcm1hbGx5IHByb3ZpZGVkIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2hhZG93IGZpbGUgZm9ybWF0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYWluIDxmaWxlbmFtZT51dGlsLWxpbnV4PC9maWxlbmFtZT4gcGFja2FnZSBoYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lIGRlcGVuZGVuY2llcyAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSA8ZmlsZW5hbWU+dXRpbC1saW51eC1zdTwvZmlsZW5hbWU+IHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuICJwYW0iIGlzIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnN3aXRjaF9yb290PC9maWxlbmFtZT4gcHJvZ3JhbSBpcyBub3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZCBpbiBhIHNlcGFyYXRlICJ1dGlsLWxpbnV4LXN3aXRjaC1yb290IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgZm9yIHNtYWxsIGluaXRyYW1mcyBpbWFnZXMgdGhhdCBkbyBub3QgbmVlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB3aG9sZSA8ZmlsZW5hbWU+dXRpbC1saW51eDwvZmlsZW5hbWU+IHBhY2thZ2Ugb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVzeWJveCBiaW5hcnksIHdoaWNoIGFyZSBib3RoIG11Y2ggbGFyZ2VyIHRoYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3dpdGNoX3Jvb3Q8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWFpbiA8ZmlsZW5hbWU+dXRpbC1saW51eDwvZmlsZW5hbWU+IHBhY2thZ2UgaGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSByZWNvbW1lbmRlZCBydW50aW1lIGRlcGVuZGVuY3kgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC9saW5rPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgPGZpbGVuYW1lPnV0aWwtbGludXgtc3dpdGNoLXJvb3Q8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+aW9uaWNlPC9maWxlbmFtZT4gcHJvZ3JhbSBpcyBub3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZCBpbiBhIHNlcGFyYXRlICJ1dGlsLWxpbnV4LWlvbmljZSIgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWFpbiA8ZmlsZW5hbWU+dXRpbC1saW51eDwvZmlsZW5hbWU+IHBhY2thZ2UgaGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSByZWNvbW1lbmRlZCBydW50aW1lIGRlcGVuZGVuY3kgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC9saW5rPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgPGZpbGVuYW1lPnV0aWwtbGludXgtaW9uaWNlPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5pbml0c2NyaXB0czwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+c3VzaGVsbDwvZmlsZW5hbWU+IHByb2dyYW0gaXMgbm93IHBhY2thZ2VkIGluCisgICAgICAgICAgICAgICAgICAgIGEgc2VwYXJhdGUgImluaXRzY3JpcHRzLXN1c2hlbGwiIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFja2FnaW5nIGNoYW5nZSBhbGxvd3Mgc3lzdGVtcyB0byBwdWxsCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zdXNoZWxsPC9maWxlbmFtZT4gaW4gd2hlbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2VsaW51eDwvZmlsZW5hbWU+IGlzIGVuYWJsZWQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBjaGFuZ2UgYWxzbyBlbGltaW5hdGVzIG5lZWRpbmcgdG8gcHVsbCBpbiB0aGUgZW50aXJlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbml0c2NyaXB0czwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoZSBtYWluIDxmaWxlbmFtZT5pbml0c2NyaXB0czwvZmlsZW5hbWU+IHBhY2thZ2UgaGFzIGEKKyAgICAgICAgICAgICAgICAgICAgcnVudGltZSBkZXBlbmRlbmN5IChpLmUuCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgICAgICAgICBvbiB0aGUgPGZpbGVuYW1lPnN1c2hlbGw8L2ZpbGVuYW1lPiBwYWNrYWdlIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgInNlbGludXgiIGlzIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVMnPjxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5nbGliLTIuMDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z2xpYi0yLjA8L2ZpbGVuYW1lPiBwYWNrYWdlIG5vdyBoYXMgYQorICAgICAgICAgICAgICAgICAgICByZWNvbW1lbmRlZCBydW50aW1lIGRlcGVuZGVuY3kgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICAgICAgICAgIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2hhcmVkLW1pbWUtaW5mbzwvZmlsZW5hbWU+IHBhY2thZ2UsIHNpbmNlIGxhcmdlCisgICAgICAgICAgICAgICAgICAgIHBvcnRpb25zIG9mIEdJTyBhcmUgbm90IHVzZWZ1bCB3aXRob3V0IHRoZSBNSU1FIGRhdGFiYXNlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHJlbW92ZSB0aGUgZGVwZW5kZW5jeSBieSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJBRF9SRUNPTU1FTkRBVElPTlMnPjxmaWxlbmFtZT5CQURfUkVDT01NRU5EQVRJT05TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlmIDxmaWxlbmFtZT5zaGFyZWQtbWltZS1pbmZvPC9maWxlbmFtZT4gaXMgdG9vCisgICAgICAgICAgICAgICAgICAgIGxhcmdlIGFuZCBpcyBub3QgcmVxdWlyZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkdvIFN0YW5kYXJkIFJ1bnRpbWU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIEdvIHN0YW5kYXJkIHJ1bnRpbWUgaGFzIGJlZW4gc3BsaXQgb3V0IGZyb20gdGhlIG1haW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdvPC9maWxlbmFtZT4gcmVjaXBlIGludG8gYSBzZXBhcmF0ZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z28tcnVudGltZTwvZmlsZW5hbWU+IHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMi40LXJlbW92ZWQtcmVjaXBlcyc+CisgICAgICAgIDx0aXRsZT5SZW1vdmVkIFJlY2lwZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyByZWNpcGVzIGhhdmUgYmVlbiByZW1vdmVkOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+YWNwaXRlc3RzPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyByZWNpcGUgaXMgbm90IG1haW50YWluZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5hdXRvZ2VuLW5hdGl2ZTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE5vIGxvbmdlciByZXF1aXJlZCBieSBHcnViLCBvZS1jb3JlLCBvciBtZXRhLW9lLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+YmR3Z2M8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBOb3RoaW5nIGluIE9wZW5FbWJlZGRlZC1Db3JlIHJlcXVpcmVzIHRoaXMgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBJdCBoYXMgbW92ZWQgdG8gbWV0YS1vZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPmJ5YWNjPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyByZWNpcGUgd2FzIG9ubHkgbmVlZGVkIGJ5IHJwbSA1LnggYW5kIGhhcyBtb3ZlZCB0bworICAgICAgICAgICAgICAgICAgICBtZXRhLW9lLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+Z2NjICg1LjQpPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDUuNCBzZXJpZXMgZHJvcHBlZCB0aGUgcmVjaXBlIGluIGZhdm9yIG9mIDYuMyAvIDcuMi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPmdub21lLWNvbW1vbjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0ZWQgdXBzdHJlYW0gYW5kIG5vIGxvbmdlciBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5nby1ib290c3RyYXAtbmF0aXZlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgR28gMS45IGRvZXMgaXRzIG93biBib290c3RyYXBwaW5nIHNvIHRoaXMgcmVjaXBlIGhhcyBiZWVuCisgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5ndWlsZTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVjaXBlIHdhcyBvbmx5IG5lZWRlZCBieQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXV0b2dlbi1uYXRpdmU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlbWFrZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVjaXBlIGlzIG5vIGxvbmdlciBuZWVkZWQgYnkgZWl0aGVyIG9mIHRoZXNlIHByb2dyYW1zLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+bGliY2xhc3MtaXNhLXBlcmw8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSB3YXMgcHJldmlvdXNseSBuZWVkZWQgZm9yIExTQiA0LCBubyBsb25nZXIKKyAgICAgICAgICAgICAgICAgICAgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+bGliZHVtcHZhbHVlLXBlcmw8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSB3YXMgcHJldmlvdXNseSBuZWVkZWQgZm9yIExTQiA0LCBubyBsb25nZXIKKyAgICAgICAgICAgICAgICAgICAgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+bGliZW52LXBlcmw8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSB3YXMgcHJldmlvdXNseSBuZWVkZWQgZm9yIExTQiA0LCBubyBsb25nZXIKKyAgICAgICAgICAgICAgICAgICAgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+bGliZmlsZS1jaGVja3RyZWUtcGVybDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVjaXBlIHdhcyBwcmV2aW91c2x5IG5lZWRlZCBmb3IgTFNCIDQsIG5vIGxvbmdlcgorICAgICAgICAgICAgICAgICAgICBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5saWJpMThuLWNvbGxhdGUtcGVybDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVjaXBlIHdhcyBwcmV2aW91c2x5IG5lZWRlZCBmb3IgTFNCIDQsIG5vIGxvbmdlcgorICAgICAgICAgICAgICAgICAgICBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5saWJpY29udjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVjaXBlIHdhcyBvbmx5IG5lZWRlZCBmb3IgPGZpbGVuYW1lPnVjbGliYzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICB3aGljaCB3YXMgcmVtb3ZlZCBpbiB0aGUgcHJldmlvdXMgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5tdXNsPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaGF2ZSB0aGVpciBvd24gaW1wbGVtZW50YXRpb25zLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1taW5ndzwvZmlsZW5hbWU+IHN0aWxsIG5lZWRzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJpY29udjwvZmlsZW5hbWU+LCBzbyBpdCBoYXMKKyAgICAgICAgICAgICAgICAgICAgYmVlbiBtb3ZlZCB0byA8ZmlsZW5hbWU+bWV0YS1taW5ndzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+bGlicG5nMTI8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSB3YXMgcHJldmlvdXNseSBuZWVkZWQgZm9yIExTQi4gVGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYnBuZzwvZmlsZW5hbWU+IGlzIDEuNi54LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+bGlicG9kLXBsYWluZXItcGVybDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVjaXBlIHdhcyBwcmV2aW91c2x5IG5lZWRlZCBmb3IgTFNCIDQsIG5vIGxvbmdlcgorICAgICAgICAgICAgICAgICAgICBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5saW51eC15b2N0byAoNC4xKTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVjaXBlIHdhcyByZW1vdmVkIGluIGZhdm9yIG9mIDQuNCwgNC45LCA0LjEwIGFuZCA0LjEyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+bWFpbHg8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSB3YXMgcHJldmlvdXNseSBvbmx5IG5lZWRlZCBmb3IgTFNCCisgICAgICAgICAgICAgICAgICAgIGNvbXBhdGliaWxpdHksIGFuZCB1cHN0cmVhbSBpcyBkZWZ1bmN0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+bWVzYSAoZ2l0IHZlcnNpb24gb25seSk8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgZ2l0IHZlcnNpb24gcmVjaXBlIHdhcyBzdGFsZSB3aXRoIHJlc3BlY3QgdG8gdGhlIHJlbGVhc2UKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPm9mb25vIChnaXQgdmVyc2lvbiBvbmx5KTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSBnaXQgdmVyc2lvbiByZWNpcGUgd2FzIHN0YWxlIHdpdGggcmVzcGVjdCB0byB0aGUgcmVsZWFzZQorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+cG9ydG1hcDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVjaXBlIGlzIG9ic29sZXRlIGFuZCBpcyBzdXBlcnNlZGVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ycGNiaW5kPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5weXRob24zLXB5Z3BnbWU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSBpcyBvbGQgYW5kIHVubWFpbnRhaW5lZC4gSXQgd2FzIHByZXZpb3VzbHkKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQgYnkgPGZpbGVuYW1lPmRuZjwvZmlsZW5hbWU+LCB3aGljaCBoYXMgc3dpdGNoZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gb2ZmaWNpYWwgPGZpbGVuYW1lPmdwZ21lPC9maWxlbmFtZT4gUHl0aG9uIGJpbmRpbmdzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+cHl0aG9uLWFzeW5jPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyByZWNpcGUgaGFzIGJlZW4gcmVtb3ZlZCBpbiBmYXZvciBvZiB0aGUgUHl0aG9uIDMKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPnB5dGhvbi1naXRkYjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVjaXBlIGhhcyBiZWVuIHJlbW92ZWQgaW4gZmF2b3Igb2YgdGhlIFB5dGhvbiAzCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5weXRob24tZ2l0PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyByZWNpcGUgd2FzIHJlbW92ZWQgaW4gZmF2b3Igb2YgdGhlIFB5dGhvbiAzCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5weXRob24tbWFrbzwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVjaXBlIHdhcyByZW1vdmVkIGluIGZhdm9yIG9mIHRoZSBQeXRob24gMworICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+cHl0aG9uLXBleHBlY3Q8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSB3YXMgcmVtb3ZlZCBpbiBmYXZvciBvZiB0aGUgUHl0aG9uIDMgdmVyc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPnB5dGhvbi1wdHlwcm9jZXNzPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyByZWNpcGUgd2FzIHJlbW92ZWQgaW4gZmF2b3Igb2YgUHl0aG9uIHRoZSAzIHZlcnNpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5weXRob24tcHljdXJsPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTm90aGluZyBpcyB1c2luZyB0aGlzIHJlY2lwZSBpbiBPcGVuRW1iZWRkZWQtQ29yZQorICAgICAgICAgICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+bWV0YS1vZTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPnB5dGhvbi1zaXg8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSB3YXMgcmVtb3ZlZCBpbiBmYXZvciBvZiB0aGUgUHl0aG9uIDMgdmVyc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPnB5dGhvbi1zbW1hcDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVjaXBlIHdhcyByZW1vdmVkIGluIGZhdm9yIG9mIHRoZSBQeXRob24gMyB2ZXJzaW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+cmVtYWtlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgPGZpbGVuYW1lPnJlbWFrZTwvZmlsZW5hbWU+IGFzIHRoZSBwcm92aWRlciBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dmlydHVhbC9tYWtlPC9maWxlbmFtZT4gaXMgYnJva2VuLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHRoaXMgcmVjaXBlIGlzIG5vdCBuZWVkZWQgaW4gT3BlbkVtYmVkZGVkLUNvcmUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTIuNC1rZXJuZWwtZGV2aWNlLXRyZWUtbW92ZSc+CisgICAgICAgIDx0aXRsZT5LZXJuZWwgRGV2aWNlIFRyZWUgTW92ZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBLZXJuZWwgRGV2aWNlIFRyZWUgc3VwcG9ydCBpcyBub3cgZWFzaWVyIHRvIGVuYWJsZSBpbiBhIGtlcm5lbAorICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgVGhlIERldmljZSBUcmVlIGNvZGUgaGFzIG1vdmVkIHRvIGEKKyAgICAgICAgICAgIDxmaWxlbmFtZT5rZXJuZWwtZGV2aWNldHJlZTwvZmlsZW5hbWU+IGNsYXNzLgorICAgICAgICAgICAgRnVuY3Rpb25hbGl0eSBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgZm9yIGFueSByZWNpcGUgdGhhdCBpbmhlcml0cworICAgICAgICAgICAgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1rZXJuZWwnPjxmaWxlbmFtZT5rZXJuZWw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGNsYXNzIGFuZCBzZXRzIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtFUk5FTF9ERVZJQ0VUUkVFJz48ZmlsZW5hbWU+S0VSTkVMX0RFVklDRVRSRUU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgVGhlIHByZXZpb3VzIG1lY2hhbmlzbSBmb3IgZG9pbmcgdGhpcywKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR0Yi5pbmM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIGlzIHN0aWxsIGF2YWlsYWJsZSB0byBhdm9pZCBicmVha2FnZSwgYnV0IHRyaWdnZXJzIGEKKyAgICAgICAgICAgIGRlcHJlY2F0aW9uIHdhcm5pbmcuCisgICAgICAgICAgICBGdXR1cmUgcmVsZWFzZXMgb2YgdGhlIFlvY3RvIFByb2plY3Qgd2lsbCByZW1vdmUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR0Yi5pbmM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEl0IGlzIGFkdmlzYWJsZSB0byByZW1vdmUgYW55IDxmaWxlbmFtZT5yZXF1aXJlPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHN0YXRlbWVudHMgdGhhdCByZXF1ZXN0CisgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdGIuaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZyb20gYW55IGN1c3RvbSBrZXJuZWwgcmVjaXBlcyB5b3UgbWlnaHQgaGF2ZS4KKyAgICAgICAgICAgIFRoaXMgd2lsbCBhdm9pZCBicmVha2FnZSBpbiBwb3N0IDIuNCByZWxlYXNlcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMi40LXBhY2thZ2UtcWEtY2hhbmdlcyc+CisgICAgICAgIDx0aXRsZT5QYWNrYWdlIFFBIENoYW5nZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBwYWNrYWdlIFFBIGNoYW5nZXMgdG9vayBwbGFjZToKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgInVuc2FmZS1yZWZlcmVuY2VzLWluLXNjcmlwdHMiIFFBIGNoZWNrIGhhcyBiZWVuCisgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHJlZmVyIHRvIDxmaWxlbmFtZT4ke0NPUkVCQVNFfS9MSUNFTlNFPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgd2l0aGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MSUNfRklMRVNfQ0hLU1VNJz48ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB5b3UgcmVjZWl2ZSBhIHdhcm5pbmcgYmVjYXVzZSB0aGlzIGZpbGUgaXMgYSBkZXNjcmlwdGlvbiBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgbGljZW5zZSBmb3IgT0UtQ29yZS4KKyAgICAgICAgICAgICAgICAgICAgVXNlIDxmaWxlbmFtZT4ke0NPTU1PTl9MSUNFTlNFX0RJUn0vTUlUPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaWYgeW91ciByZWNpcGUgaXMgTUlULWxpY2Vuc2VkIGFuZCB5b3UgY2Fubm90IHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkIG1ldGhvZCBvZiByZWZlcnJpbmcgdG8gYSBmaWxlIHdpdGhpbiB0aGUgc291cmNlCisgICAgICAgICAgICAgICAgICAgIHRyZWUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTIuNC1yZWFkbWUtY2hhbmdlcyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gRmlsZSBDaGFuZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgYXJlIGNoYW5nZXMgdG8gPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+IGZpbGVzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtYWluIFBva3kgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+IGZpbGUgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICAgICAgbW92ZWQgdG8gdGhlIDxmaWxlbmFtZT5tZXRhLXBva3k8L2ZpbGVuYW1lPiBsYXllciBhbmQKKyAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gcmVuYW1lZCA8ZmlsZW5hbWU+UkVBRE1FLnBva3k8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgQSBzeW1saW5rIGhhcyBiZWVuIGNyZWF0ZWQgc28gdGhhdCByZWZlcmVuY2VzIHRvIHRoZSBvbGQKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gd29yay4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlJFQURNRS5oYXJkd2FyZTwvZmlsZW5hbWU+IGZpbGUgaGFzIGJlZW4gbW92ZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gPGZpbGVuYW1lPm1ldGEteW9jdG8tYnNwPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEEgc3ltbGluayBoYXMgYmVlbiBjcmVhdGVkIHNvIHRoYXQgcmVmZXJlbmNlcyB0byB0aGUgb2xkCisgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uIHdvcmsuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQSA8ZmlsZW5hbWU+UkVBRE1FLnFlbXU8L2ZpbGVuYW1lPiBmaWxlIGhhcyBiZWVuIGNyZWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBjb3ZlcmFnZSBvZiB0aGUgPGZpbGVuYW1lPnFlbXUqPC9maWxlbmFtZT4gbWFjaGluZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTIuNC1taXNjZWxsYW5lb3VzLWNoYW5nZXMnPgorICAgICAgICA8dGl0bGU+TWlzY2VsbGFuZW91cyBDaGFuZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgYXJlIGFkZGl0aW9uYWwgY2hhbmdlczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlJPT1RGU19QS0dNQU5BR0VfQk9PVFNUUkFQPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYW5kIGFueSByZWZlcmVuY2VzIHRvIGl0IGhhdmUgYmVlbiByZW1vdmVkLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHJlbW92ZSB0aGlzIHZhcmlhYmxlIGZyb20gYW55IGN1c3RvbSByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBoYXMgYmVlbgorICAgICAgICAgICAgICAgICAgICByZW1vdmVkLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoZSBZb2N0byBQcm9qZWN0IDIuMSByZWxlYXNlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+IHdhcyByZW5hbWVkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1wb2t5PC9maWxlbmFtZT4gYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG88L2ZpbGVuYW1lPiBzdWJkaXJlY3RvcnkgcmVtYWluZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGF2b2lkIGJyZWFraW5nIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5tYWludGFpbmVycy5pbmM8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCB0cmFja3MKKyAgICAgICAgICAgICAgICAgICAgbWFpbnRhaW5lcnMgYnkgbGlzdGluZyBhIHByaW1hcnkgcGVyc29uIHJlc3BvbnNpYmxlIGZvciBlYWNoCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBpbiBPRS1Db3JlLCBoYXMgYmVlbiBtb3ZlZCBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXBva3k8L2ZpbGVuYW1lPiB0byBPRS1Db3JlIChpLmUuIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtcG9reS9jb25mL2Rpc3Ryby9pbmNsdWRlPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9kaXN0cm8vaW5jbHVkZTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYnVpbGRoaXN0b3J5Jz48ZmlsZW5hbWU+YnVpbGRoaXN0b3J5PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIG5vdyBtYWtlcyBhIHNpbmdsZSBjb21taXQgcGVyIGJ1aWxkIHJhdGhlciB0aGFuIG9uZQorICAgICAgICAgICAgICAgICAgICBjb21taXQgcGVyIHN1YmRpcmVjdG9yeSBpbiB0aGUgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBiZWhhdmlvciBhc3N1bWVzIHRoZSBjb21taXRzIGFyZSBlbmFibGVkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxESElTVE9SWV9DT01NSVQnPjxmaWxlbmFtZT5CVUlMREhJU1RPUllfQ09NTUlUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgID0gIjEiLCB3aGljaCBpcyB0eXBpY2FsLgorICAgICAgICAgICAgICAgICAgICBQcmV2aW91c2x5LCB0aGUgPGZpbGVuYW1lPmJ1aWxkaGlzdG9yeTwvZmlsZW5hbWU+IGNsYXNzIG1hZGUKKyAgICAgICAgICAgICAgICAgICAgb25lIGNvbW1pdCBwZXIgc3ViZGlyZWN0b3J5IGluIHRoZSByZXBvc2l0b3J5IGluIG9yZGVyIHRvCisgICAgICAgICAgICAgICAgICAgIG1ha2UgaXQgZWFzaWVyIHRvIHNlZSB0aGUgY2hhbmdlcyBmb3IgYSBwYXJ0aWN1bGFyCisgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgVG8gdmlldyBhIHBhcnRpY3VsYXIgY2hhbmdlLCBzcGVjaWZ5IHRoYXQgc3ViZGlyZWN0b3J5IGFzCisgICAgICAgICAgICAgICAgICAgIHRoZSBsYXN0IHBhcmFtZXRlciBvbiB0aGUgPGZpbGVuYW1lPmdpdCBzaG93PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb3IgPGZpbGVuYW1lPmdpdCBkaWZmPC9maWxlbmFtZT4gY29tbWFuZHMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT54ODYtYmFzZS5pbmM8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICBpbmNsdWRlZCBieSBhbGwgeDg2LWJhc2VkIG1hY2hpbmUgY29uZmlndXJhdGlvbnMsIG5vdyBzZXRzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GU1RZUEVTJz48ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB1c2luZyA8ZmlsZW5hbWU+Pz08L2ZpbGVuYW1lPiB0byAibGl2ZSIgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kaW5nIHdpdGggPGZpbGVuYW1lPis9PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY2hhbmdlIG1ha2VzIHRoZSBkZWZhdWx0IGVhc2llciB0byBvdmVycmlkZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGZpcmVzIG11bHRpcGxlICJCdWlsZFN0YXJ0ZWQiIGV2ZW50cyB3aGVuCisgICAgICAgICAgICAgICAgICAgIG11bHRpY29uZmlnIGlzIGVuYWJsZWQgKG9uZSBwZXIgY29uZmlndXJhdGlvbikuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I2V2ZW50cyc+RXZlbnRzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+c2VjdXJpdHlfZmxhZ3MuaW5jPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICBzZXRzIGEgPGZpbGVuYW1lPkdDQ1BJRTwvZmlsZW5hbWU+IHZhcmlhYmxlIHdpdGggYW4gb3B0aW9uCisgICAgICAgICAgICAgICAgICAgIHRvIGVuYWJsZSBQb3NpdGlvbiBJbmRlcGVuZGVudCBFeGVjdXRhYmxlcyAoUElFKSB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdjYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBFbmFibGluZyBQSUUgaW4gdGhlIEdOVSBDIENvbXBpbGVyIChHQ0MpLCBtYWtlcyBSZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgT3JpZW50ZWQgUHJvZ3JhbW1pbmcgKFJPUCkgYXR0YWNrcyBtdWNoIG1vcmUgZGlmZmljdWx0IHRvCisgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgT0UtQ29yZSBub3cgcHJvdmlkZXMgYQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS1sYXllcnM8L2ZpbGVuYW1lPiBwbHVnaW4gdGhhdCBpbXBsZW1lbnRzCisgICAgICAgICAgICAgICAgICAgIGEgImNyZWF0ZS1sYXllciIgc3ViY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgc3ViY29tbWFuZCBoYXMgcmVzdWx0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0by1sYXllcjwvZmlsZW5hbWU+IHNjcmlwdCBiZWluZyBkZXByZWNhdGVkIGFuZAorICAgICAgICAgICAgICAgICAgICB3aWxsIGxpa2VseSBiZSByZW1vdmVkIGluIHRoZSBuZXh0IFlvY3RvIFByb2plY3QgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+dm1kazwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+dmRpPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5xY293MjwvZmlsZW5hbWU+IGltYWdlIGZpbGUgdHlwZXMgYXJlIG5vdworICAgICAgICAgICAgICAgICAgICAgIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgIndpYyIgaW1hZ2UgdHlwZSB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNPTlZFUlNJT05fQ01EPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0aGUgZXF1aXZhbGVudCBpbWFnZSB0eXBlcyBhcmUgbm93CisgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpYy52bWRrPC9maWxlbmFtZT4sIDxmaWxlbmFtZT53aWMudmRpPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT53aWMucWNvdzI8L2ZpbGVuYW1lPiwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbWFnZV8mbHQ7dHlwZSZndDtbZGVwZW5kc108L2ZpbGVuYW1lPiBoYXMKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZWQgPGZpbGVuYW1lPklNQUdFX0RFUEVORFNfJmx0O3R5cGUmZ3Q7PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIHlvdXIgb3duIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgY3VzdG9tIGltYWdlCisgICAgICAgICAgICAgICAgICAgIHR5cGVzLCB0aGVuIHlvdSBuZWVkIHRvIHVwZGF0ZSB0aGVtLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIE9wZW5TU0wgMS4xIGhhcyBiZWVuIGludHJvZHVjZWQuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBkZWZhdWx0IGlzIHN0aWxsIDEuMC54IHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVGRVJSRURfVkVSU0lPTic+PGZpbGVuYW1lPlBSRUZFUlJFRF9WRVJTSU9OPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHByZWZlcmVuY2UgaXMgc2V0IGlzIGR1ZSB0byB0aGUgcmVtYWluaW5nIGNvbXBhdGliaWxpdHkKKyAgICAgICAgICAgICAgICAgICAgaXNzdWVzIHdpdGggb3RoZXIgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFJPVklERVMnPjxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSAgaW4gdGhlIG9wZW5zc2wgMS4wIHJlY2lwZSBub3cgaW5jbHVkZXMgIm9wZW5zc2wxMCIKKyAgICAgICAgICAgICAgICAgICAgYXMgYSBtYXJrZXIgdGhhdCBjYW4gYmUgdXNlZCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIHJlY2lwZXMgdGhhdCBidWlsZCBzb2Z0d2FyZSB0aGF0IHN0aWxsIGRlcGVuZCBvbgorICAgICAgICAgICAgICAgICAgICBPcGVuU1NMIDEuMC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBlbnN1cmUgY29uc2lzdGVudCBiZWhhdmlvciwgQml0QmFrZSdzICItciIgYW5kICItUiIKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyAoaS5lLiBwcmVmaWxlIGFuZCBwb3N0ZmlsZSksIHdoaWNoIGFyZSB1c2VkIHRvCisgICAgICAgICAgICAgICAgICAgIHJlYWQgb3IgcG9zdC1yZWFkIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBmaWxlcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICBjb21tYW5kIGxpbmUsIG5vdyBvbmx5IGFmZmVjdCB0aGUgY3VycmVudCBCaXRCYWtlIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIEJlZm9yZSB0aGVzZSBCaXRCYWtlIGNoYW5nZXMsIHRoZXNlIG9wdGlvbnMgd291bGQgInN0aWNrIgorICAgICAgICAgICAgICAgICAgICBmb3IgZnV0dXJlIGV4ZWN1dGlvbnMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CiA8L2NoYXB0ZXI+CiA8IS0tCiB2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1iaXRiYWtlLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWJpdGJha2UueG1sCmluZGV4IDJmMzZlMTYuLjE3ZjRjNTQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWJpdGJha2UueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWJpdGJha2UueG1sCkBAIC04LDcgKzgsNyBAQAogCiAgICAgPHBhcmE+CiAgICAgICAgIEJpdEJha2UgaXMgYSBwcm9ncmFtIHdyaXR0ZW4gaW4gUHl0aG9uIHRoYXQgaW50ZXJwcmV0cyB0aGUKLSAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4gdXNlZCBieQorICAgICAgICA8bGluayBsaW5rZW5kPSdtZXRhZGF0YSc+TWV0YWRhdGE8L2xpbms+IHVzZWQgYnkKICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCiAgICAgICAgIEF0IHNvbWUgcG9pbnQsIGRldmVsb3BlcnMgd29uZGVyIHdoYXQgYWN0dWFsbHkgaGFwcGVucyB3aGVuIHlvdSBlbnRlcjoKICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgpAQCAtMjQsNyArMjQsNyBAQAogICAgICAgICBCaXRCYWtlIHN0cml2ZXMgdG8gYmUgYSBnZW5lcmljICJ0YXNrIiBleGVjdXRvciB0aGF0IGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgY29tcGxleCBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcHMuCiAgICAgICAgIEFzIHN1Y2gsIGl0IGhhcyBubyByZWFsIGtub3dsZWRnZSBvZiB3aGF0IHRoZSB0YXNrcyBiZWluZyBleGVjdXRlZCBhY3R1YWxseSBkby4KICAgICAgICAgQml0QmFrZSBqdXN0IGNvbnNpZGVycyBhIGxpc3Qgb2YgdGFza3Mgd2l0aCBkZXBlbmRlbmNpZXMgYW5kIGhhbmRsZXMKLSAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0nbWV0YWRhdGEnPk1ldGFkYXRhPC9saW5rPgogICAgICAgICBjb25zaXN0aW5nIG9mIHZhcmlhYmxlcyBpbiBhIGNlcnRhaW4gZm9ybWF0IHRoYXQgZ2V0IHBhc3NlZCB0byB0aGUgdGFza3MuCiAgICAgPC9ub3RlPgogCkBAIC0zNiw5ICszNiwxMCBAQAogICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgZmlyc3QgdGhpbmcgQml0QmFrZSBkb2VzIGlzIGxvb2sgZm9yIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgIFRoZSBmaXJzdCB0aGluZyBCaXRCYWtlIGRvZXMgaXMgbG9vayBmb3IgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZS4KICAgICAgICAgICAgIFRoaXMgZmlsZSByZXNpZGVzIGluIHRoZQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgogICAgICAgICAgICAgd2l0aGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9jb25mLzwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KICAgICAgICAgICAgIEJpdEJha2UgZmluZHMgaXQgYnkgZXhhbWluaW5nIGl0cwogICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPiBlbnZpcm9ubWVudApAQCAtOTIsOCArOTMsOCBAQAogICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy0qLzwvZmlsZW5hbWU+IGRpcmVjdG9yeSB3aXRoaW4gUG9reS4KICAgICAgICAgICAgIEFkZGluZyBleHRyYSBjb250ZW50IHRvIDxmaWxlbmFtZT5CQkZJTEVTPC9maWxlbmFtZT4gaXMgYmVzdCBhY2hpZXZlZCB0aHJvdWdoIHRoZSB1c2Ugb2YKICAgICAgICAgICAgIEJpdEJha2UgbGF5ZXJzIGFzIGRlc2NyaWJlZCBpbiB0aGUKLSAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcgYW5kCi0gICAgICAgICAgICBDcmVhdGluZyBMYXllcnM8L3VsaW5rPiIgc2VjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5VbmRlcnN0YW5kaW5nIGFuZCBDcmVhdGluZyBMYXllcnM8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPHBhcmE+CkBAIC0yMjcsMTMgKzIyOCwxNCBAQAogCiAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgRGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkIHRocm91Z2ggc2V2ZXJhbCB2YXJpYWJsZXMuCi0gICAgICAgICAgICBZb3UgY2FuIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQgdmFyaWFibGVzIEJpdEJha2UgdXNlcyBpbiB0aGUgQml0QmFrZSBkb2N1bWVudGF0aW9uLAotICAgICAgICAgICAgd2hpY2ggaXMgZm91bmQgaW4gdGhlIDxmaWxlbmFtZT5iaXRiYWtlL2RvYy9tYW51YWw8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgd2l0aGluIHRoZQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIGFib3V0IHZhcmlhYmxlcyBCaXRCYWtlIHVzZXMgaW4gdGhlCisgICAgICAgICAgICBCaXRCYWtlIGRvY3VtZW50YXRpb24sIHdoaWNoIGlzIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UvZG9jL21hbnVhbDwvZmlsZW5hbWU+IGRpcmVjdG9yeSB3aXRoaW4gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi4KICAgICAgICAgICAgIEF0IGEgYmFzaWMgbGV2ZWwsIGl0IGlzIHN1ZmZpY2llbnQgdG8ga25vdyB0aGF0IEJpdEJha2UgdXNlcyB0aGUKICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+REVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPiBhbmQKLSAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPlJERVBFTkRTPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlcyB3aGVuCi0gICAgICAgICAgICBjYWxjdWxhdGluZyBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz5SREVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgdmFyaWFibGVzIHdoZW4gY2FsY3VsYXRpbmcgZGVwZW5kZW5jaWVzLgogICAgICAgICA8L3BhcmE+CiAgICAgPC9zZWN0aW9uPgogCkBAIC00NDgsMjAgKzQ1MCwyMyBAQAogICAgICAgICAgICAgWW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcHRpb25zIGFuZCBmb3JtYXRzIG9mIGVudHJpZXMgZm9yIHNwZWNpZmljCiAgICAgICAgICAgICBmZXRjaGVycyBpbiB0aGUgQml0QmFrZSBtYW51YWwgbG9jYXRlZCBpbiB0aGUKICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlL2RvYy9tYW51YWw8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb2YgdGhlCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi4KICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgT25lIHVzZWZ1bCBmZWF0dXJlIGZvciBjZXJ0YWluIFNvdXJjZSBDb2RlIE1hbmFnZXIgKFNDTSkgZmV0Y2hlcnMgaXMgdGhlIGFiaWxpdHkgdG8KLSAgICAgICAgICAgICJhdXRvLXVwZGF0ZSIgd2hlbiB0aGUgdXBzdHJlYW0gU0NNIGNoYW5nZXMgdmVyc2lvbi4KLSAgICAgICAgICAgIFNpbmNlIHRoaXMgYWJpbGl0eSByZXF1aXJlcyBjZXJ0YWluIGZ1bmN0aW9uYWxpdHkgZnJvbSB0aGUgU0NNLCBub3QgYWxsCi0gICAgICAgICAgICBzeXN0ZW1zIHN1cHBvcnQgaXQuCi0gICAgICAgICAgICBDdXJyZW50bHkgU3VidmVyc2lvbiwgQmF6YWFyIGFuZCB0byBhIGxpbWl0ZWQgZXh0ZW50LCBHaXQgc3VwcG9ydCB0aGUgYWJpbGl0eSB0byAiYXV0by11cGRhdGUiLgorICAgICAgICAgICAgT25lIHVzZWZ1bCBmZWF0dXJlIGZvciBjZXJ0YWluIFNvdXJjZSBDb2RlIE1hbmFnZXIgKFNDTSkgZmV0Y2hlcnMKKyAgICAgICAgICAgIGlzIHRoZSBhYmlsaXR5IHRvICJhdXRvLXVwZGF0ZSIgd2hlbiB0aGUgdXBzdHJlYW0gU0NNIGNoYW5nZXMKKyAgICAgICAgICAgIHZlcnNpb24uCisgICAgICAgICAgICBTaW5jZSB0aGlzIGFiaWxpdHkgcmVxdWlyZXMgY2VydGFpbiBmdW5jdGlvbmFsaXR5IGZyb20gdGhlIFNDTSwKKyAgICAgICAgICAgIG5vdCBhbGwgc3lzdGVtcyBzdXBwb3J0IGl0LgorICAgICAgICAgICAgQ3VycmVudGx5IFN1YnZlcnNpb24sIEJhemFhciBhbmQgdG8gYSBsaW1pdGVkIGV4dGVudCwgR2l0IHN1cHBvcnQKKyAgICAgICAgICAgIHRoZSBhYmlsaXR5IHRvICJhdXRvLXVwZGF0ZSIuCiAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgd29ya3MgdXNpbmcgdGhlIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU1JDUkVWJz5TUkNSRVY8L2xpbms+PC9maWxlbmFtZT4KICAgICAgICAgICAgIHZhcmlhYmxlLgogICAgICAgICAgICAgU2VlIHRoZQotICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BsYXRkZXYtYXBwZGV2LXNyY3Jldic+VXNpbmcgYW4gRXh0ZXJuYWwgU0NNPC91bGluaz4iIHNlY3Rpb24KLSAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwbGF0ZGV2LWFwcGRldi1zcmNyZXYnPlVzaW5nIGFuIEV4dGVybmFsIFNDTTwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwgZm9yIG1vcmUKKyAgICAgICAgICAgIGluZm9ybWF0aW9uLgogICAgICAgICA8L3BhcmE+CiAKICAgICA8L3NlY3Rpb24+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1jbGFzc2VzLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWNsYXNzZXMueG1sCmluZGV4IGM4ODE2MmIuLjU5NjFkM2UgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWNsYXNzZXMueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWNsYXNzZXMueG1sCkBAIC0xNiwxMiArMTYsMTIgQEAKIDwvcGFyYT4KIAogPHBhcmE+Ci0gICAgQW55IDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+IHVzdWFsbHkKKyAgICBBbnkgPGxpbmsgbGlua2VuZD0nbWV0YWRhdGEnPk1ldGFkYXRhPC9saW5rPiB1c3VhbGx5CiAgICAgZm91bmQgaW4gYSByZWNpcGUgY2FuIGFsc28gYmUgcGxhY2VkIGluIGEgY2xhc3MgZmlsZS4KICAgICBDbGFzcyBmaWxlcyBhcmUgaWRlbnRpZmllZCBieSB0aGUgZXh0ZW5zaW9uIDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+CiAgICAgYW5kIGFyZSB1c3VhbGx5IHBsYWNlZCBpbiBhIDxmaWxlbmFtZT5jbGFzc2VzLzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBiZW5lYXRoCiAgICAgdGhlIDxmaWxlbmFtZT5tZXRhKi88L2ZpbGVuYW1lPiBkaXJlY3RvcnkgZm91bmQgaW4gdGhlCi0gICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgogICAgIENsYXNzIGZpbGVzIGNhbiBhbHNvIGJlIHBvaW50ZWQgdG8gYnkKICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERESVInPjxmaWxlbmFtZT5CVUlMRERJUjwvZmlsZW5hbWU+PC9saW5rPgogICAgIChlLmcuIDxmaWxlbmFtZT5idWlsZC88L2ZpbGVuYW1lPikgaW4gdGhlIHNhbWUgd2F5IGFzCkBAIC0zNiw3ICszNiw3IEBACiAgICAgVGhpcyBjaGFwdGVyIGRpc2N1c3NlcyBvbmx5IHRoZSBtb3N0IHVzZWZ1bCBhbmQgaW1wb3J0YW50IGNsYXNzZXMuCiAgICAgT3RoZXIgY2xhc3NlcyBkbyBleGlzdCB3aXRoaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXM8L2ZpbGVuYW1lPgogICAgIGRpcmVjdG9yeSBpbiB0aGUKLSAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCiAgICAgWW91IGNhbiByZWZlcmVuY2UgdGhlIDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+IGZpbGVzIGRpcmVjdGx5CiAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiA8L3BhcmE+CkBAIC05NCw3ICs5NCw3IEBACiAgICAgPHBhcmE+CiAgICAgICAgIEZvciBtb3JlIGRldGFpbHMgb24gdGhlIHNvdXJjZSBhcmNoaXZlciwgc2VlIHRoZQogICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWFpbnRhaW5pbmctb3Blbi1zb3VyY2UtbGljZW5zZS1jb21wbGlhbmNlLWR1cmluZy15b3VyLXByb2R1Y3RzLWxpZmVjeWNsZSc+TWFpbnRhaW5pbmcgT3BlbiBTb3VyY2UgTGljZW5zZSBDb21wbGlhbmNlIER1cmluZyBZb3VyIFByb2R1Y3QncyBMaWZlY3ljbGU8L3VsaW5rPiIKLSAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgICAgICBZb3UgY2FuIGFsc28gc2VlIHRoZQogICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQVJDSElWRVJfTU9ERSc+PGZpbGVuYW1lPkFSQ0hJVkVSX01PREU8L2ZpbGVuYW1lPjwvbGluaz4KICAgICAgICAgdmFyaWFibGUgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSB2YXJpYWJsZSBmbGFncyAodmFyZmxhZ3MpCkBAIC0xMjIsNyArMTIyLDcgQEAKICAgICAgICAgVGhlc2UgY2xhc3NlcyBjYW4gYWxzbyB3b3JrIHdpdGggc29mdHdhcmUgdGhhdCBlbXVsYXRlcyBBdXRvdG9vbHMuCiAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCiAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNuZXctcmVjaXBlLWF1dG90b29sZWQtcGFja2FnZSc+QXV0b3Rvb2xlZCBQYWNrYWdlPC91bGluaz4iCi0gICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KICAgICA8L3BhcmE+CiAKICAgICA8cGFyYT4KQEAgLTMzMyw3ICszMzMsNyBAQAogICAgICAgICBGb3IgZGV0YWlscyBvbiBob3cgdGhlIGNsYXNzIHdvcmtzLCBzZWUgdGhlCiAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvYmx1ZXRvb3RoLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZSBZb2N0bwogICAgICAgICBQcm9qZWN0Ci0gICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCiAgICAgPC9wYXJhPgogPC9zZWN0aW9uPgogCkBAIC02NDEsNyArNjQxLDcgQEAKICAgICAgICAgRGlzdHJpYnV0aW9uIHBvbGljeSBkaWN0YXRlcyB3aGV0aGVyIHRvIGluY2x1ZGUgdGhpcyBjbGFzcy4KICAgICAgICAgU2VlIHRoZQogICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGxhdGRldi1hcHBkZXYtZGV2c2hlbGwnPlVzaW5nIGEgRGV2ZWxvcG1lbnQgU2hlbGw8L3VsaW5rPiIgc2VjdGlvbgotICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQKKyAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0CiAgICAgICAgIHVzaW5nIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+LgogICAgIDwvcGFyYT4KIDwvc2VjdGlvbj4KQEAgLTgxNiwxMSArODE2LDExIEBACiAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZQogICAgICAgICA8ZmlsZW5hbWU+ZXh0ZXJuYWxzcmM8L2ZpbGVuYW1lPiBjbGFzcywgc2VlIHRoZSBjb21tZW50cyBpbgogICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2V4dGVybmFsc3JjLmJiY2xhc3M8L2ZpbGVuYW1lPiBpbiB0aGUKLSAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi4KICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlIDxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+CiAgICAgICAgIGNsYXNzLCBzZWUgdGhlCiAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZGluZy1zb2Z0d2FyZS1mcm9tLWFuLWV4dGVybmFsLXNvdXJjZSc+QnVpbGRpbmcgU29mdHdhcmUgZnJvbSBhbiBFeHRlcm5hbCBTb3VyY2U8L3VsaW5rPiIKLSAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgIDwvcGFyYT4KIDwvc2VjdGlvbj4KIApAQCAtMTI0Nyw3ICsxMjQ3LDcgQEAKICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBjdXN0b21pemluZyBpbWFnZXMsIHNlZSB0aGUKICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5ncG9reS1leHRlbmQtY3VzdG9taW1hZ2UnPkN1c3RvbWl6aW5nIEltYWdlczwvdWxpbms+IgotICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwuCiAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgaW1hZ2VzIGFyZSBjcmVhdGVkLCBzZWUgdGhlCiAgICAgICAgICI8bGluayBsaW5rZW5kPSdpbWFnZXMtZGV2LWVudmlyb25tZW50Jz5JbWFnZXM8L2xpbms+IiBzZWN0aW9uIGVsc2V3aGVyZQogICAgICAgICBpbiB0aGlzIG1hbnVhbC4KQEAgLTEyODYsMTQgKzEyODYsMTUgQEAKICAgICAgICAgPGZpbGVuYW1lPmltYWdlX3R5cGVzPC9maWxlbmFtZT4gbXVzdCBhbHNvIGFwcGVhciBpbgogICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfQ0xBU1NFUzwvZmlsZW5hbWU+LgogICAgIDwvcGFyYT4KLTwvc2VjdGlvbj4KLQotPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWltYWdlX3R5cGVzX3Vib290Jz4KLSAgICA8dGl0bGU+PGZpbGVuYW1lPmltYWdlX3R5cGVzX3Vib290LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CiAKICAgICA8cGFyYT4KLSAgICAgICAgVGhlIDxmaWxlbmFtZT5pbWFnZV90eXBlc191Ym9vdDwvZmlsZW5hbWU+IGNsYXNzCi0gICAgICAgIGRlZmluZXMgYWRkaXRpb25hbCBpbWFnZSB0eXBlcyBzcGVjaWZpY2FsbHkgZm9yIHRoZSBVLUJvb3QgYm9vdGxvYWRlci4KKyAgICAgICAgVGhpcyBjbGFzcyBhbHNvIGhhbmRsZXMgY29udmVyc2lvbiBhbmQgY29tcHJlc3Npb24gb2YgaW1hZ2VzLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFRvIGJ1aWxkIGEgVk13YXJlIFZNREsgaW1hZ2UsIHlvdSBuZWVkIHRvIGFkZCAid2ljLnZtZGsiIHRvCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+PGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICBUaGlzIHdvdWxkIGFsc28gYmUgc2ltaWxhciBmb3IgVmlydHVhbCBCb3ggVmlydHVhbCBEaXNrIEltYWdlCisgICAgICAgICAgICAoInZkaSIpIGFuZCBRRU1VIENvcHkgT24gV3JpdGUgVmVyc2lvbiAyICgicWNvdzIiKSBpbWFnZXMuCisgICAgICAgIDwvbm90ZT4KICAgICA8L3BhcmE+CiA8L3NlY3Rpb24+CiAKQEAgLTEzNzAsMjcgKzEzNzEsNiBAQAogICAgIDwvcGFyYT4KIDwvc2VjdGlvbj4KIAotPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWltYWdlLXZtJz4KLSAgICA8dGl0bGU+PGZpbGVuYW1lPmltYWdlLXZtLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+Ci0KLSAgICA8cGFyYT4KLSAgICAgICAgVGhlIDxmaWxlbmFtZT5pbWFnZS12bTwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIGJ1aWxkaW5nIFZNCi0gICAgICAgIGltYWdlcy4KLSAgICA8L3BhcmE+Ci08L3NlY3Rpb24+Ci0KLTxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1pbWFnZS12bWRrJz4KLSAgICA8dGl0bGU+PGZpbGVuYW1lPmltYWdlLXZtZGsuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KLQotICAgIDxwYXJhPgotICAgICAgICBUaGUgPGZpbGVuYW1lPmltYWdlLXZtZGs8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyBidWlsZGluZyBWTXdhcmUKLSAgICAgICAgVk1ESyBpbWFnZXMuCi0gICAgICAgIE5vcm1hbGx5LCB5b3UgZG8gbm90IHVzZSB0aGlzIGNsYXNzIGRpcmVjdGx5LgotICAgICAgICBJbnN0ZWFkLCB5b3UgYWRkICJ2bWRrIiB0bwotICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+PGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4uCi0gICAgPC9wYXJhPgotPC9zZWN0aW9uPgotCiA8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtaW5zYW5lJz4KICAgICA8dGl0bGU+PGZpbGVuYW1lPmluc2FuZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgogCkBAIC0xNzg4LDI3ICsxNzY4LDYgQEAKICAgICAgICAgICAgICAgICA8L25vdGU+CiAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAtLT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnVuc2FmZS1yZWZlcmVuY2VzLWluLXNjcmlwdHM6PC9maWxlbmFtZT48L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIFJlcG9ydHMgd2hlbiBhIHNjcmlwdCBmaWxlIGluc3RhbGxlZCBpbgotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2Jhc2VfbGliZGlyfTwvZmlsZW5hbWU+LAotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2Jhc2VfYmluZGlyfTwvZmlsZW5hbWU+LCBvcgotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2Jhc2Vfc2JpbmRpcn08L2ZpbGVuYW1lPiwgZGVwZW5kcyBvbiBmaWxlcwotICAgICAgICAgICAgICAgIGluc3RhbGxlZCB1bmRlciA8ZmlsZW5hbWU+JHtleGVjX3ByZWZpeH08L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICBUaGlzIGRlcGVuZGVuY3kgaXMgYSBjb25jZXJuIGlmIHlvdSB3YW50IHRoZSBzeXN0ZW0gdG8gcmVtYWluCi0gICAgICAgICAgICAgICAgYmFzaWNhbGx5IG9wZXJhYmxlIGlmIDxmaWxlbmFtZT4vdXNyPC9maWxlbmFtZT4gaXMgbW91bnRlZAotICAgICAgICAgICAgICAgIHNlcGFyYXRlbHkgYW5kIGlzIG5vdCBtb3VudGVkLgotICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyBmb3IgYmluYXJpZXMgaW5zdGFsbGVkIGluCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2Jhc2VfbGliZGlyfTwvZmlsZW5hbWU+LAotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX2JpbmRpcn08L2ZpbGVuYW1lPiwgYW5kCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2Jhc2Vfc2JpbmRpcn08L2ZpbGVuYW1lPiBhcmUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9saWI8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPi9iaW48L2ZpbGVuYW1lPiwgYW5kCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vc2JpbjwvZmlsZW5hbWU+LCByZXNwZWN0aXZlbHkuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGZvciBhIGJpbmFyeSBpbnN0YWxsZWQKLSAgICAgICAgICAgICAgICAgICAgdW5kZXIgPGZpbGVuYW1lPiR7ZXhlY19wcmVmaXh9PC9maWxlbmFtZT4gaXMKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3I8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT51c2VsZXNzLXJwYXRoczo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CiAgICAgICAgICAgICAgICAgQ2hlY2tzIGZvciBkeW5hbWljIGxpYnJhcnkgbG9hZCBwYXRocyAocnBhdGhzKSBpbiB0aGUgYmluYXJpZXMgdGhhdAogICAgICAgICAgICAgICAgIGJ5IGRlZmF1bHQgb24gYSBzdGFuZGFyZCBzeXN0ZW0gYXJlIHNlYXJjaGVkIGJ5IHRoZSBsaW5rZXIgKGUuZy4KQEAgLTE5MDAsNyArMTg1OSw3IEBACiAgICAgICAgIHlvdSBidWlsZCB0aGUga2VybmVsIGltYWdlLgogICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGJ1aWxkIGFuIGluaXRyYW1mcywgc2VlIHRoZQogICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGRpbmctYW4taW5pdHJhbWZzLWltYWdlJz5CdWlsZGluZyBhbiBJbml0aWFsIFJBTSBGaWxlc3lzdGVtIChpbml0cmFtZnMpIEltYWdlPC91bGluaz4iCi0gICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KICAgICA8L3BhcmE+CiAKICAgICA8cGFyYT4KQEAgLTIxOTQsNyArMjE1Myw3IEBACiAgICAgPHBhcmE+CiAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSBNdWx0aWxpYiBmZWF0dXJlLCBzZWUgdGhlCiAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjb21iaW5pbmctbXVsdGlwbGUtdmVyc2lvbnMtbGlicmFyeS1maWxlcy1pbnRvLW9uZS1pbWFnZSc+Q29tYmluaW5nIE11bHRpcGxlIFZlcnNpb25zIG9mIExpYnJhcnkgRmlsZXMgaW50byBPbmUgSW1hZ2U8L3VsaW5rPiIKLSAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgIDwvcGFyYT4KIDwvc2VjdGlvbj4KIApAQCAtMjMyOCw3ICsyMjg3LDcgQEAKICAgICAgICAgVGhlIDxmaWxlbmFtZT5vZWxpbnQ8L2ZpbGVuYW1lPiBjbGFzcyBpcyBhbgogICAgICAgICBvYnNvbGV0ZSBsaW50IGNoZWNraW5nIHRvb2wgdGhhdCBleGlzdHMgaW4KICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY2xhc3NlczwvZmlsZW5hbWU+IGluIHRoZQotICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgogICAgIDwvcGFyYT4KIAogICAgIDxwYXJhPgpAQCAtMjM5Myw3ICsyMzUyLDcgQEAKICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPlBBQ0tBR0VfQ0xBU1NFUzwvbGluaz48L2ZpbGVuYW1lPgogICAgICAgICB2YXJpYWJsZSBkZWZpbmVkIGluIHlvdXIgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+CiAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSwgd2hpY2ggaXMgbG9jYXRlZCBpbiB0aGUKLSAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LgogICAgICAgICBXaGVuIGRlZmluaW5nIHRoZSB2YXJpYWJsZSwgeW91IGNhbiBzcGVjaWZ5IG9uZSBvciBtb3JlIHBhY2thZ2UgdHlwZXMuCiAgICAgICAgIFNpbmNlIGltYWdlcyBhcmUgZ2VuZXJhdGVkIGZyb20gcGFja2FnZXMsIGEgcGFja2FnaW5nIGNsYXNzIGlzCiAgICAgICAgIG5lZWRlZCB0byBlbmFibGUgaW1hZ2UgZ2VuZXJhdGlvbi4KQEAgLTI0MDcsNyArMjM2Niw3IEBACiAgICAgICAgIG9uIHRoZSB0YXJnZXQgKGkuZS4gcnVudGltZSBpbnN0YWxsYXRpb24gb2YgcGFja2FnZXMpLgogICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQogICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdXNpbmctcnVudGltZS1wYWNrYWdlLW1hbmFnZW1lbnQnPlVzaW5nIFJ1bnRpbWUgUGFja2FnZSBNYW5hZ2VtZW50PC91bGluaz4iCi0gICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgIDwvcGFyYT4KIAogICAgIDxwYXJhPgpAQCAtMjQxOSw3ICsyMzc4LDcgQEAKICAgICAgICAgYWxsIGRlcGVuZGVuY2llcyBwcmV2aW91c2x5IGJ1aWx0LgogICAgICAgICBUaGUgcmVhc29uIGZvciB0aGlzIGRpc2NyZXBhbmN5IGlzIGJlY2F1c2UgdGhlIFJQTSBwYWNrYWdlIG1hbmFnZXIKICAgICAgICAgY3JlYXRlcyBhbmQgcHJvY2Vzc2VzIG1vcmUKLSAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4gdGhhbiB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0nbWV0YWRhdGEnPk1ldGFkYXRhPC9saW5rPiB0aGFuIHRoZQogICAgICAgICBJUEsgcGFja2FnZSBtYW5hZ2VyLgogICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBtaWdodCBjb25zaWRlciBzZXR0aW5nCiAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPiB0byAicGFja2FnZV9pcGsiIGlmIHlvdSBhcmUKQEAgLTI1ODcsNyArMjU0Niw3IEBACiAgICAgPHBhcmE+CiAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoaXMgY2xhc3MsIHNlZSB0aGUKICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5ncG9reS1leHRlbmQtY3VzdG9taW1hZ2UtY3VzdG9tdGFza3MnPkN1c3RvbWl6aW5nIEltYWdlcyBVc2luZyBDdXN0b20gUGFja2FnZSBHcm91cHM8L3VsaW5rPiIKLSAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgIDwvcGFyYT4KIAogICAgIDxwYXJhPgpAQCAtMjY3Niw3ICsyNjM1LDggQEAKICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBvcHVsYXRlX3Nkayc+PGZpbGVuYW1lPmRvX3BvcHVsYXRlX3NkazwvZmlsZW5hbWU+PC9saW5rPgogICAgICAgICB0YXNrLCBzZWUgdGhlCiAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyNzZGstYnVpbGRpbmctYW4tc2RrLWluc3RhbGxlcic+QnVpbGRpbmcgYW4gU0RLIEluc3RhbGxlcjwvdWxpbms+IgotICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoU0RLKSBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBhbmQgdGhlCisgICAgICAgIEV4dGVuc2libGUgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChlU0RLKSBtYW51YWwuCiAgICAgPC9wYXJhPgogPC9zZWN0aW9uPgogCkBAIC0yNzU2LDggKzI3MTYsOCBAQAogICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcG9wdWxhdGVfc2RrJz48ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc2RrPC9maWxlbmFtZT48L2xpbms+CiAgICAgICAgIHRhc2ssIHNlZSB0aGUKICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1NES19VUkw7I3Nkay1idWlsZGluZy1hbi1zZGstaW5zdGFsbGVyJz5CdWlsZGluZyBhbiBTREsgSW5zdGFsbGVyPC91bGluaz4iCi0gICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspIERldmVsb3BlcidzCi0gICAgICAgIEd1aWRlLgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BtZW50IGFuZCB0aGUKKyAgICAgICAgRXh0ZW5zaWJsZSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKGVTREspIG1hbnVhbC4KICAgICA8L3BhcmE+CiA8L3NlY3Rpb24+CiAKQEAgLTI4MzAsOCArMjc5MCw4IEBACiAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVMnPjxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4uCiAgICAgICAgIFNlZSB0aGUKICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3Rlc3RpbmctcGFja2FnZXMtd2l0aC1wdGVzdCc+VGVzdGluZyBQYWNrYWdlcyBXaXRoIHB0ZXN0PC91bGluaz4iCi0gICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uCi0gICAgICAgIG9uIHB0ZXN0LgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbCBmb3IgbW9yZQorICAgICAgICBpbmZvcm1hdGlvbiBvbiBwdGVzdC4KICAgICA8L3BhcmE+CiA8L3NlY3Rpb24+CiAKQEAgLTI4NDcsNyArMjgwNyw3IEBACiAgICAgPHBhcmE+CiAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBzZXR0aW5nIHVwIGFuZCBydW5uaW5nIHB0ZXN0cywgc2VlIHRoZQogICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdGVzdGluZy1wYWNrYWdlcy13aXRoLXB0ZXN0Jz5UZXN0aW5nIFBhY2thZ2VzIFdpdGggcHRlc3Q8L3VsaW5rPiIKLSAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgIDwvcGFyYT4KIDwvc2VjdGlvbj4KIApAQCAtMjk4OCw3ICsyOTQ4LDcgQEAKICAgICAgICAgYXMgdGhlIGJ1aWxkIHByb2dyZXNzZXMsIHlvdSBjYW4gZW5hYmxlIDxmaWxlbmFtZT5ybV93b3JrPC9maWxlbmFtZT4KICAgICAgICAgYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcgdG8geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUsCiAgICAgICAgIHdoaWNoIGlzIGZvdW5kIGluIHRoZQotICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCiAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICBJTkhFUklUICs9ICJybV93b3JrIgogICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CkBAIC0zNDU1LDcgKzM0MTUsNyBAQAogICAgIDxwYXJhPgogICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiA8ZmlsZW5hbWU+c3lzdGVtZDwvZmlsZW5hbWU+LCBzZWUgdGhlCiAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzZWxlY3RpbmctYW4taW5pdGlhbGl6YXRpb24tbWFuYWdlcic+U2VsZWN0aW5nIGFuIEluaXRpYWxpemF0aW9uIE1hbmFnZXI8L3VsaW5rPiIKLSAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgIDwvcGFyYT4KIDwvc2VjdGlvbj4KIApAQCAtMzU1NSw3ICszNTE1LDcgQEAKICAgICA8cGFyYT4KICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBlbmFibGUsIHJ1biwgYW5kIGNyZWF0ZSBuZXcgdGVzdHMsIHNlZSB0aGUKICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BlcmZvcm1pbmctYXV0b21hdGVkLXJ1bnRpbWUtdGVzdGluZyc+UGVyZm9ybWluZyBBdXRvbWF0ZWQgUnVudGltZSBUZXN0aW5nPC91bGluaz4iCi0gICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KICAgICA8L3BhcmE+CiA8L3NlY3Rpb24+CiAKQEAgLTM3MzcsNyArMzY5Nyw4IEBACiAgICAgICAgIHByb3ZpZGUgcGF0aG5hbWVzIGZvciBsaW5rcywgZGVmYXVsdCBsaW5rcyBmb3IgdGFyZ2V0cywgYW5kCiAgICAgICAgIHNvIGZvcnRoLgogICAgICAgICBGb3IgZGV0YWlscyBvbiBob3cgdG8gdXNlIHRoaXMgY2xhc3MsIHNlZSB0aGUgY29tbWVudHMgaW4gdGhlCi0gICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0L2NnaXQuY2dpL3Bva3kvdHJlZS9tZXRhL2NsYXNzZXMvdXBkYXRlLWFsdGVybmF0aXZlcy5iYmNsYXNzJz48ZmlsZW5hbWU+dXBkYXRlLWFsdGVybmF0aXZlcy5iYmNsYXNzPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2kvcG9reS90cmVlL21ldGEvY2xhc3Nlcy91cGRhdGUtYWx0ZXJuYXRpdmVzLmJiY2xhc3MnPjxmaWxlbmFtZT51cGRhdGUtYWx0ZXJuYXRpdmVzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgIGZpbGUuCiAgICAgPC9wYXJhPgogCiAgICAgPG5vdGU+CkBAIC0zNzc3LDggKzM3MzgsOSBAQAogICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgcGFja2FnZXMgdGhhdCBjb250YWluIHN5c3RlbSBzZXJ2aWNlcyB0aGF0CiAgICAgICAgIHNob3VsZCBiZSBydW4gdW5kZXIgdGhlaXIgb3duIHVzZXIgb3IgZ3JvdXAsIHlvdSBjYW4gdXNlIHRoZXNlIGNsYXNzZXMKICAgICAgICAgdG8gZW5hYmxlIGNyZWF0aW9uIG9mIHRoZSB1c2VyIG9yIGdyb3VwLgotICAgICAgICBUaGUgPGZpbGVuYW1lPm1ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi91c2VyYWRkL3VzZXJhZGQtZXhhbXBsZS5iYjwvZmlsZW5hbWU+Ci0gICAgICAgIHJlY2lwZSBpbiB0aGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgIFRoZQorICAgICAgICA8ZmlsZW5hbWU+bWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3VzZXJhZGQvdXNlcmFkZC1leGFtcGxlLmJiPC9maWxlbmFtZT4KKyAgICAgICAgcmVjaXBlIGluIHRoZSA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgogICAgICAgICBwcm92aWRlcyBhIHNpbXBsZSBleGFtcGxlIHRoYXQgc2hvd3MgaG93IHRvIGFkZCB0aHJlZQogICAgICAgICB1c2VycyBhbmQgZ3JvdXBzIHRvIHR3byBwYWNrYWdlcy4KICAgICAgICAgU2VlIHRoZSA8ZmlsZW5hbWU+dXNlcmFkZC1leGFtcGxlLmJiPC9maWxlbmFtZT4gcmVjaXBlIGZvciBtb3JlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1kZXZlbG9wbWVudC1lbnZpcm9ubWVudC54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1kZXZlbG9wbWVudC1lbnZpcm9ubWVudC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIxOTdkMQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWRldmVsb3BtZW50LWVudmlyb25tZW50LnhtbApAQCAtMCwwICsxLDI3NjEgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdyZWYtZGV2ZWxvcG1lbnQtZW52aXJvbm1lbnQnPgorPHRpdGxlPlRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50PC90aXRsZT4KKworPHBhcmE+CisgICAgVGhpcyBjaGFwdGVyIHRha2VzIGEgbG9vayBhdCB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudAorICAgIGVudmlyb25tZW50IGFuZCBhbHNvIHByb3ZpZGVzIGEgZGV0YWlsZWQgbG9vayBhdCB3aGF0IGdvZXMgb24gZHVyaW5nCisgICAgZGV2ZWxvcG1lbnQgaW4gdGhhdCBlbnZpcm9ubWVudC4KKyAgICBUaGUgY2hhcHRlciBwcm92aWRlcyBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IGVudmlyb25tZW50IGNvbmNlcHRzIHRoYXQKKyAgICBoZWxwIHlvdSB1bmRlcnN0YW5kIGhvdyB3b3JrIGlzIGFjY29tcGxpc2hlZCBpbiBhbiBvcGVuIHNvdXJjZSBlbnZpcm9ubWVudCwKKyAgICB3aGljaCBpcyB2ZXJ5IGRpZmZlcmVudCBhcyBjb21wYXJlZCB0byB3b3JrIGFjY29tcGxpc2hlZCBpbiBhIGNsb3NlZCwKKyAgICBwcm9wcmlldGFyeSBlbnZpcm9ubWVudC4KKzwvcGFyYT4KKworPHBhcmE+CisgICAgU3BlY2lmaWNhbGx5LCB0aGlzIGNoYXB0ZXIgYWRkcmVzc2VzIG9wZW4gc291cmNlIHBoaWxvc29waHksIHdvcmtmbG93cywKKyAgICBHaXQsIHNvdXJjZSByZXBvc2l0b3JpZXMsIGxpY2Vuc2luZywgcmVjaXBlIHN5bnRheCwgYW5kIGRldmVsb3BtZW50CisgICAgc3ludGF4LgorPC9wYXJhPgorCis8c2VjdGlvbiBpZD0nb3Blbi1zb3VyY2UtcGhpbG9zb3BoeSc+CisgICAgPHRpdGxlPk9wZW4gU291cmNlIFBoaWxvc29waHk8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIE9wZW4gc291cmNlIHBoaWxvc29waHkgaXMgY2hhcmFjdGVyaXplZCBieSBzb2Z0d2FyZSBkZXZlbG9wbWVudAorICAgICAgICBkaXJlY3RlZCBieSBwZWVyIHByb2R1Y3Rpb24gYW5kIGNvbGxhYm9yYXRpb24gdGhyb3VnaCBhbiBhY3RpdmUKKyAgICAgICAgY29tbXVuaXR5IG9mIGRldmVsb3BlcnMuCisgICAgICAgIENvbnRyYXN0IHRoaXMgdG8gdGhlIG1vcmUgc3RhbmRhcmQgY2VudHJhbGl6ZWQgZGV2ZWxvcG1lbnQgbW9kZWxzCisgICAgICAgIHVzZWQgYnkgY29tbWVyY2lhbCBzb2Z0d2FyZSBjb21wYW5pZXMgd2hlcmUgYSBmaW5pdGUgc2V0IG9mIGRldmVsb3BlcnMKKyAgICAgICAgcHJvZHVjZXMgYSBwcm9kdWN0IGZvciBzYWxlIHVzaW5nIGEgZGVmaW5lZCBzZXQgb2YgcHJvY2VkdXJlcyB0aGF0CisgICAgICAgIHVsdGltYXRlbHkgcmVzdWx0IGluIGFuIGVuZCBwcm9kdWN0IHdob3NlIGFyY2hpdGVjdHVyZSBhbmQgc291cmNlCisgICAgICAgIG1hdGVyaWFsIGFyZSBjbG9zZWQgdG8gdGhlIHB1YmxpYy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgT3BlbiBzb3VyY2UgcHJvamVjdHMgY29uY2VwdHVhbGx5IGhhdmUgZGlmZmVyaW5nIGNvbmN1cnJlbnQgYWdlbmRhcywKKyAgICAgICAgYXBwcm9hY2hlcywgYW5kIHByb2R1Y3Rpb24uCisgICAgICAgIFRoZXNlIGZhY2V0cyBvZiB0aGUgZGV2ZWxvcG1lbnQgcHJvY2VzcyBjYW4gY29tZSBmcm9tIGFueW9uZSBpbiB0aGUKKyAgICAgICAgcHVibGljIChjb21tdW5pdHkpIHRoYXQgaGFzIGEgc3Rha2UgaW4gdGhlIHNvZnR3YXJlIHByb2plY3QuCisgICAgICAgIFRoZSBvcGVuIHNvdXJjZSBlbnZpcm9ubWVudCBjb250YWlucyBuZXcgY29weXJpZ2h0LCBsaWNlbnNpbmcsIGRvbWFpbiwKKyAgICAgICAgYW5kIGNvbnN1bWVyIGlzc3VlcyB0aGF0IGRpZmZlciBmcm9tIHRoZSBtb3JlIHRyYWRpdGlvbmFsIGRldmVsb3BtZW50CisgICAgICAgIGVudmlyb25tZW50LgorICAgICAgICBJbiBhbiBvcGVuIHNvdXJjZSBlbnZpcm9ubWVudCwgdGhlIGVuZCBwcm9kdWN0LCBzb3VyY2UgbWF0ZXJpYWwsCisgICAgICAgIGFuZCBkb2N1bWVudGF0aW9uIGFyZSBhbGwgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgYXQgbm8gY29zdC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQSBiZW5jaG1hcmsgZXhhbXBsZSBvZiBhbiBvcGVuIHNvdXJjZSBwcm9qZWN0IGlzIHRoZSBMaW51eCBrZXJuZWwsCisgICAgICAgIHdoaWNoIHdhcyBpbml0aWFsbHkgY29uY2VpdmVkIGFuZCBjcmVhdGVkIGJ5IEZpbm5pc2ggY29tcHV0ZXIgc2NpZW5jZQorICAgICAgICBzdHVkZW50IExpbnVzIFRvcnZhbGRzIGluIDE5OTEuCisgICAgICAgIENvbnZlcnNlbHksIGEgZ29vZCBleGFtcGxlIG9mIGEgbm9uLW9wZW4gc291cmNlIHByb2plY3QgaXMgdGhlCisgICAgICAgIDx0cmFkZW1hcmsgY2xhc3M9J3JlZ2lzdGVyZWQnPldpbmRvd3M8L3RyYWRlbWFyaz4gZmFtaWx5IG9mIG9wZXJhdGluZworICAgICAgICBzeXN0ZW1zIGRldmVsb3BlZCBieQorICAgICAgICA8dHJhZGVtYXJrIGNsYXNzPSdyZWdpc3RlcmVkJz5NaWNyb3NvZnQ8L3RyYWRlbWFyaz4gQ29ycG9yYXRpb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFdpa2lwZWRpYSBoYXMgYSBnb29kIGhpc3RvcmljYWwgZGVzY3JpcHRpb24gb2YgdGhlIE9wZW4gU291cmNlCisgICAgICAgIFBoaWxvc29waHkKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9PcGVuX3NvdXJjZSc+aGVyZTwvdWxpbms+LgorICAgICAgICBZb3UgY2FuIGFsc28gZmluZCBoZWxwZnVsIGluZm9ybWF0aW9uIG9uIGhvdyB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUKKyAgICAgICAgTGludXggQ29tbXVuaXR5CisgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9sZG4ubGludXhmb3VuZGF0aW9uLm9yZy9ib29rL2hvdy1wYXJ0aWNpcGF0ZS1saW51eC1jb21tdW5pdHknPmhlcmU8L3VsaW5rPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSd3b3JrZmxvd3MnPgorICAgIDx0aXRsZT5Xb3JrZmxvd3M8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyB3b3JrZmxvdyBjb25jZXB0cyB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCBhbmQKKyAgICAgICAgR2l0LgorICAgICAgICBJbiBwYXJ0aWN1bGFyLCB0aGUgaW5mb3JtYXRpb24gY292ZXJzIGJhc2ljIHByYWN0aWNlcyB0aGF0IGRlc2NyaWJlCisgICAgICAgIHJvbGVzIGFuZCBhY3Rpb25zIGluIGEgY29sbGFib3JhdGl2ZSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBJZiB5b3UgYXJlIGZhbWlsaWFyIHdpdGggdGhpcyB0eXBlIG9mIGRldmVsb3BtZW50IGVudmlyb25tZW50LCB5b3UKKyAgICAgICAgICAgIG1pZ2h0IG5vdCB3YW50IHRvIHJlYWQgdGhpcyBzZWN0aW9uLgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGZpbGVzIGFyZSBtYWludGFpbmVkIHVzaW5nIEdpdCBpbiAibWFzdGVyIgorICAgICAgICBicmFuY2hlcyB3aG9zZSBHaXQgaGlzdG9yaWVzIHRyYWNrIGV2ZXJ5IGNoYW5nZSBhbmQgd2hvc2Ugc3RydWN0dXJlcworICAgICAgICBwcm92aWRlcyBicmFuY2hlcyBmb3IgYWxsIGRpdmVyZ2luZyBmdW5jdGlvbmFsaXR5LgorICAgICAgICBBbHRob3VnaCB0aGVyZSBpcyBubyBuZWVkIHRvIHVzZSBHaXQsIG1hbnkgb3BlbiBzb3VyY2UgcHJvamVjdHMgZG8gc28uCisgICAgPHBhcmE+CisKKyAgICA8L3BhcmE+CisgICAgICAgIEZvciB0aGUgWW9jdG8gUHJvamVjdCwgYSBrZXkgaW5kaXZpZHVhbCBjYWxsZWQgdGhlICJtYWludGFpbmVyIiBpcworICAgICAgICByZXNwb25zaWJsZSBmb3IgdGhlICJtYXN0ZXIiIGJyYW5jaCBvZiBhIGdpdmVuIEdpdCByZXBvc2l0b3J5LgorICAgICAgICBUaGUgIm1hc3RlciIgYnJhbmNoIGlzIHRoZSDigJx1cHN0cmVhbeKAnSByZXBvc2l0b3J5IGZyb20gd2hpY2ggZmluYWwgb3IKKyAgICAgICAgbW9zdCByZWNlbnQgYnVpbGRzIG9mIHRoZSBwcm9qZWN0IG9jY3VyLgorICAgICAgICBUaGUgbWFpbnRhaW5lciBpcyByZXNwb25zaWJsZSBmb3IgYWNjZXB0aW5nIGNoYW5nZXMgZnJvbSBvdGhlcgorICAgICAgICBkZXZlbG9wZXJzIGFuZCBmb3Igb3JnYW5pemluZyB0aGUgdW5kZXJseWluZyBicmFuY2ggc3RydWN0dXJlIHRvCisgICAgICAgIHJlZmxlY3QgcmVsZWFzZSBzdHJhdGVnaWVzIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgPG5vdGU+Rm9yIGluZm9ybWF0aW9uIG9uIGZpbmRpbmcgb3V0IHdobyBpcyByZXNwb25zaWJsZSBmb3IgKG1haW50YWlucykKKyAgICAgICAgICAgIGEgcGFydGljdWxhciBhcmVhIG9mIGNvZGUsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNob3ctdG8tc3VibWl0LWEtY2hhbmdlJz5TdWJtaXR0aW5nIGEgQ2hhbmdlIHRvIHRoZSBZb2N0byBQcm9qZWN0PC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IEdpdCByZXBvc2l0b3J5IGFsc28gaGFzIGFuCisgICAgICAgIHVwc3RyZWFtIGNvbnRyaWJ1dGlvbiBHaXQgcmVwb3NpdG9yeSBuYW1lZAorICAgICAgICA8ZmlsZW5hbWU+cG9reS1jb250cmliPC9maWxlbmFtZT4uCisgICAgICAgIFlvdSBjYW4gc2VlIGFsbCB0aGUgYnJhbmNoZXMgaW4gdGhpcyByZXBvc2l0b3J5IHVzaW5nIHRoZSB3ZWIgaW50ZXJmYWNlCisgICAgICAgIG9mIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsnPlNvdXJjZSBSZXBvc2l0b3JpZXM8L3VsaW5rPiBvcmdhbml6ZWQKKyAgICAgICAgd2l0aGluIHRoZSAiUG9reSBTdXBwb3J0IiBhcmVhLgorICAgICAgICBUaGVzZSBicmFuY2hlcyB0ZW1wb3JhcmlseSBob2xkIGNoYW5nZXMgdG8gdGhlIHByb2plY3QgdGhhdCBoYXZlIGJlZW4KKyAgICAgICAgc3VibWl0dGVkIG9yIGNvbW1pdHRlZCBieSB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCB0ZWFtIGFuZCBieQorICAgICAgICBjb21tdW5pdHkgbWVtYmVycyB3aG8gY29udHJpYnV0ZSB0byB0aGUgcHJvamVjdC4KKyAgICAgICAgVGhlIG1haW50YWluZXIgZGV0ZXJtaW5lcyBpZiB0aGUgY2hhbmdlcyBhcmUgcXVhbGlmaWVkIHRvIGJlIG1vdmVkCisgICAgICAgIGZyb20gdGhlICJjb250cmliIiBicmFuY2hlcyBpbnRvIHRoZSAibWFzdGVyIiBicmFuY2ggb2YgdGhlIEdpdAorICAgICAgICByZXBvc2l0b3J5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBEZXZlbG9wZXJzIChpbmNsdWRpbmcgY29udHJpYnV0aW5nIGNvbW11bml0eSBtZW1iZXJzKSBjcmVhdGUgYW5kCisgICAgICAgIG1haW50YWluIGNsb25lZCByZXBvc2l0b3JpZXMgb2YgdGhlIHVwc3RyZWFtICJtYXN0ZXIiIGJyYW5jaC4KKyAgICAgICAgVGhlIGNsb25lZCByZXBvc2l0b3JpZXMgYXJlIGxvY2FsIHRvIHRoZWlyIGRldmVsb3BtZW50IHBsYXRmb3JtcyBhbmQKKyAgICAgICAgYXJlIHVzZWQgdG8gZGV2ZWxvcCBjaGFuZ2VzLgorICAgICAgICBXaGVuIGEgZGV2ZWxvcGVyIGlzIHNhdGlzZmllZCB3aXRoIGEgcGFydGljdWxhciBmZWF0dXJlIG9yIGNoYW5nZSwKKyAgICAgICAgdGhleSAicHVzaCIgdGhlIGNoYW5nZXMgdG8gdGhlIGFwcHJvcHJpYXRlICJjb250cmliIiByZXBvc2l0b3J5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBEZXZlbG9wZXJzIGFyZSByZXNwb25zaWJsZSBmb3Iga2VlcGluZyB0aGVpciBsb2NhbCByZXBvc2l0b3J5CisgICAgICAgIHVwLXRvLWRhdGUgd2l0aCAibWFzdGVyIi4KKyAgICAgICAgVGhleSBhcmUgYWxzbyByZXNwb25zaWJsZSBmb3Igc3RyYWlnaHRlbmluZyBvdXQgYW55IGNvbmZsaWN0cyB0aGF0CisgICAgICAgIG1pZ2h0IGFyaXNlIHdpdGhpbiBmaWxlcyB0aGF0IGFyZSBiZWluZyB3b3JrZWQgb24gc2ltdWx0YW5lb3VzbHkgYnkKKyAgICAgICAgbW9yZSB0aGFuIG9uZSBwZXJzb24uCisgICAgICAgIEFsbCB0aGlzIHdvcmsgaXMgZG9uZSBsb2NhbGx5IG9uIHRoZSBkZXZlbG9wZXLigJlzIG1hY2hpbmUgYmVmb3JlCisgICAgICAgIGFueXRoaW5nIGlzIHB1c2hlZCB0byBhICJjb250cmliIiBhcmVhIGFuZCBleGFtaW5lZCBhdCB0aGUgbWFpbnRhaW5lcuKAmXMKKyAgICAgICAgbGV2ZWwuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEEgc29tZXdoYXQgZm9ybWFsIG1ldGhvZCBleGlzdHMgYnkgd2hpY2ggZGV2ZWxvcGVycyBjb21taXQgY2hhbmdlcworICAgICAgICBhbmQgcHVzaCB0aGVtIGludG8gdGhlICJjb250cmliIiBhcmVhIGFuZCBzdWJzZXF1ZW50bHkgcmVxdWVzdCB0aGF0CisgICAgICAgIHRoZSBtYWludGFpbmVyIGluY2x1ZGUgdGhlbSBpbnRvICJtYXN0ZXIiLgorICAgICAgICBUaGlzIHByb2Nlc3MgaXMgY2FsbGVkIOKAnHN1Ym1pdHRpbmcgYSBwYXRjaOKAnSBvciAic3VibWl0dGluZyBhIGNoYW5nZS4iCisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBzdWJtaXR0aW5nIHBhdGNoZXMgYW5kIGNoYW5nZXMsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2hvdy10by1zdWJtaXQtYS1jaGFuZ2UnPlN1Ym1pdHRpbmcgYSBDaGFuZ2UgdG8gdGhlIFlvY3RvIFByb2plY3Q8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRvIHN1bW1hcml6ZSB0aGUgZGV2ZWxvcG1lbnQgd29ya2Zsb3c6ICBhIHNpbmdsZSBwb2ludCBvZiBlbnRyeQorICAgICAgICBleGlzdHMgZm9yIGNoYW5nZXMgaW50byB0aGUgcHJvamVjdOKAmXMgIm1hc3RlciIgYnJhbmNoIG9mIHRoZQorICAgICAgICBHaXQgcmVwb3NpdG9yeSwgd2hpY2ggaXMgY29udHJvbGxlZCBieSB0aGUgcHJvamVjdOKAmXMgbWFpbnRhaW5lci4KKyAgICAgICAgQW5kLCBhIHNldCBvZiBkZXZlbG9wZXJzIGV4aXN0IHdobyBpbmRlcGVuZGVudGx5IGRldmVsb3AsIHRlc3QsIGFuZAorICAgICAgICBzdWJtaXQgY2hhbmdlcyB0byAiY29udHJpYiIgYXJlYXMgZm9yIHRoZSBtYWludGFpbmVyIHRvIGV4YW1pbmUuCisgICAgICAgIFRoZSBtYWludGFpbmVyIHRoZW4gY2hvb3NlcyB3aGljaCBjaGFuZ2VzIGFyZSBnb2luZyB0byBiZWNvbWUgYQorICAgICAgICBwZXJtYW5lbnQgcGFydCBvZiB0aGUgcHJvamVjdC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2dpdC13b3JrZmxvdy5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSIzaW4iIGFsaWduPSJsZWZ0IiBzY2FsZWZpdD0iMSIgLz4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hpbGUgZWFjaCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBpcyB1bmlxdWUsIHRoZXJlIGFyZSBzb21lIGJlc3QKKyAgICAgICAgcHJhY3RpY2VzIG9yIG1ldGhvZHMgdGhhdCBoZWxwIGRldmVsb3BtZW50IHJ1biBzbW9vdGhseS4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IGRlc2NyaWJlcyBzb21lIG9mIHRoZXNlIHByYWN0aWNlcy4KKyAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgR2l0IHdvcmtmbG93cywgc2VlIHRoZSB3b3JrZmxvdyB0b3BpY3MgaW4KKyAgICAgICAgdGhlCisgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9ib29rLmdpdC1zY20uY29tJz5HaXQgQ29tbXVuaXR5IEJvb2s8L3VsaW5rPi4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+TWFrZSBTbWFsbCBDaGFuZ2VzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgSXQgaXMgYmVzdCB0byBrZWVwIHRoZSBjaGFuZ2VzIHlvdSBjb21taXQgc21hbGwgYXMgY29tcGFyZWQgdG8KKyAgICAgICAgICAgICAgICBidW5kbGluZyBtYW55IGRpc3BhcmF0ZSBjaGFuZ2VzIGludG8gYSBzaW5nbGUgY29tbWl0LgorICAgICAgICAgICAgICAgIFRoaXMgcHJhY3RpY2Ugbm90IG9ubHkga2VlcHMgdGhpbmdzIG1hbmFnZWFibGUgYnV0IGFsc28gYWxsb3dzCisgICAgICAgICAgICAgICAgdGhlIG1haW50YWluZXIgdG8gbW9yZSBlYXNpbHkgaW5jbHVkZSBvciByZWZ1c2UgY2hhbmdlcy48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5JdCBpcyBhbHNvIGdvb2QgcHJhY3RpY2UgdG8gbGVhdmUgdGhlIHJlcG9zaXRvcnkgaW4gYQorICAgICAgICAgICAgICAgIHN0YXRlIHRoYXQgYWxsb3dzIHlvdSB0byBzdGlsbCBzdWNjZXNzZnVsbHkgYnVpbGQgeW91ciBwcm9qZWN0LgorICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCBkbyBub3QgY29tbWl0IGhhbGYgb2YgYSBmZWF0dXJlLAorICAgICAgICAgICAgICAgIHRoZW4gYWRkIHRoZSBvdGhlciBoYWxmIGFzIGEgc2VwYXJhdGUsIGxhdGVyIGNvbW1pdC4KKyAgICAgICAgICAgICAgICBFYWNoIGNvbW1pdCBzaG91bGQgdGFrZSB5b3UgZnJvbSBvbmUgYnVpbGRhYmxlIHByb2plY3Qgc3RhdGUKKyAgICAgICAgICAgICAgICB0byBhbm90aGVyIGJ1aWxkYWJsZSBzdGF0ZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+VXNlIEJyYW5jaGVzIExpYmVyYWxseTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEl0IGlzIHZlcnkgZWFzeSB0byBjcmVhdGUsIHVzZSwgYW5kIGRlbGV0ZSBsb2NhbCBicmFuY2hlcyBpbgorICAgICAgICAgICAgICAgIHlvdXIgd29ya2luZyBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIG5hbWUgdGhlc2UgYnJhbmNoZXMgYW55dGhpbmcgeW91IGxpa2UuCisgICAgICAgICAgICAgICAgSXQgaXMgaGVscGZ1bCB0byBnaXZlIHRoZW0gbmFtZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBwYXJ0aWN1bGFyCisgICAgICAgICAgICAgICAgZmVhdHVyZSBvciBjaGFuZ2Ugb24gd2hpY2ggeW91IGFyZSB3b3JraW5nLgorICAgICAgICAgICAgICAgIE9uY2UgeW91IGFyZSBkb25lIHdpdGggYSBmZWF0dXJlIG9yIGNoYW5nZSBhbmQgaGF2ZSBtZXJnZWQgaXQKKyAgICAgICAgICAgICAgICBpbnRvIHlvdXIgbG9jYWwgbWFzdGVyIGJyYW5jaCwgc2ltcGx5IGRpc2NhcmQgdGhlIHRlbXBvcmFyeQorICAgICAgICAgICAgICAgIGJyYW5jaC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+TWVyZ2UgQ2hhbmdlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z2l0IG1lcmdlPC9maWxlbmFtZT4gY29tbWFuZCBhbGxvd3MgeW91IHRvIHRha2UKKyAgICAgICAgICAgICAgICB0aGUgY2hhbmdlcyBmcm9tIG9uZSBicmFuY2ggYW5kIGZvbGQgdGhlbSBpbnRvIGFub3RoZXIgYnJhbmNoLgorICAgICAgICAgICAgICAgIFRoaXMgcHJvY2VzcyBpcyBlc3BlY2lhbGx5IGhlbHBmdWwgd2hlbiBtb3JlIHRoYW4gYSBzaW5nbGUKKyAgICAgICAgICAgICAgICBkZXZlbG9wZXIgbWlnaHQgYmUgd29ya2luZyBvbiBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICBmZWF0dXJlLgorICAgICAgICAgICAgICAgIE1lcmdpbmcgY2hhbmdlcyBhbHNvIGF1dG9tYXRpY2FsbHkgaWRlbnRpZmllcyBhbnkgY29sbGlzaW9ucworICAgICAgICAgICAgICAgIG9yICJjb25mbGljdHMiIHRoYXQgbWlnaHQgaGFwcGVuIGFzIGEgcmVzdWx0IG9mIHRoZSBzYW1lIGxpbmVzCisgICAgICAgICAgICAgICAgb2YgY29kZSBiZWluZyBhbHRlcmVkIGJ5IHR3byBkaWZmZXJlbnQgZGV2ZWxvcGVycy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+TWFuYWdlIEJyYW5jaGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQmVjYXVzZSBicmFuY2hlcyBhcmUgZWFzeSB0byB1c2UsIHlvdSBzaG91bGQgdXNlIGEgc3lzdGVtCisgICAgICAgICAgICAgICAgd2hlcmUgYnJhbmNoZXMgaW5kaWNhdGUgdmFyeWluZyBsZXZlbHMgb2YgY29kZSByZWFkaW5lc3MuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gaGF2ZSBhICJ3b3JrIiBicmFuY2ggdG8gZGV2ZWxvcCBpbiwgYQorICAgICAgICAgICAgICAgICJ0ZXN0IiBicmFuY2ggd2hlcmUgdGhlIGNvZGUgb3IgY2hhbmdlIGlzIHRlc3RlZCwgYSAic3RhZ2UiCisgICAgICAgICAgICAgICAgYnJhbmNoIHdoZXJlIGNoYW5nZXMgYXJlIHJlYWR5IHRvIGJlIGNvbW1pdHRlZCwgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgICAgIEFzIHlvdXIgcHJvamVjdCBkZXZlbG9wcywgeW91IGNhbiBtZXJnZSBjb2RlIGFjcm9zcyB0aGUKKyAgICAgICAgICAgICAgICBicmFuY2hlcyB0byByZWZsZWN0IGV2ZXItaW5jcmVhc2luZyBzdGFibGUgc3RhdGVzIG9mIHRoZQorICAgICAgICAgICAgICAgIGRldmVsb3BtZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5Vc2UgUHVzaCBhbmQgUHVsbDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoZSBwdXNoLXB1bGwgd29ya2Zsb3cgaXMgYmFzZWQgb24gdGhlIGNvbmNlcHQgb2YgZGV2ZWxvcGVycworICAgICAgICAgICAgICAgICJwdXNoaW5nIiBsb2NhbCBjb21taXRzIHRvIGEgcmVtb3RlIHJlcG9zaXRvcnksIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgdXN1YWxseSBhIGNvbnRyaWJ1dGlvbiByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIFRoaXMgd29ya2Zsb3cgaXMgYWxzbyBiYXNlZCBvbiBkZXZlbG9wZXJzICJwdWxsaW5nIiBrbm93bgorICAgICAgICAgICAgICAgIHN0YXRlcyBvZiB0aGUgcHJvamVjdCBkb3duIGludG8gdGhlaXIgbG9jYWwgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICByZXBvc2l0b3JpZXMuCisgICAgICAgICAgICAgICAgVGhlIHdvcmtmbG93IGVhc2lseSBhbGxvd3MgeW91IHRvIHB1bGwgY2hhbmdlcyBzdWJtaXR0ZWQgYnkKKyAgICAgICAgICAgICAgICBvdGhlciBkZXZlbG9wZXJzIGZyb20gdGhlIHVwc3RyZWFtIHJlcG9zaXRvcnkgaW50byB5b3VyCisgICAgICAgICAgICAgICAgd29yayBhcmVhIGVuc3VyaW5nIHRoYXQgeW91IGhhdmUgdGhlIG1vc3QgcmVjZW50IHNvZnR3YXJlCisgICAgICAgICAgICAgICAgb24gd2hpY2ggdG8gZGV2ZWxvcC4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBoYXMgdHdvIHNjcmlwdHMgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y3JlYXRlLXB1bGwtcmVxdWVzdDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zZW5kLXB1bGwtcmVxdWVzdDwvZmlsZW5hbWU+IHRoYXQgc2hpcCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIHJlbGVhc2UgdG8gZmFjaWxpdGF0ZSB0aGlzIHdvcmtmbG93LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGVzZSBzY3JpcHRzIGluIHRoZSA8ZmlsZW5hbWU+c2NyaXB0czwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZm9sZGVyIG9mIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZXNlIHNjcmlwdHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcHVzaGluZy1hLWNoYW5nZS11cHN0cmVhbSc+VXNpbmcgU2NyaXB0cyB0byBQdXNoIGEgQ2hhbmdlIFVwc3RyZWFtIGFuZCBSZXF1ZXN0IGEgUHVsbDwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5QYXRjaCBXb3JrZmxvdzo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoaXMgd29ya2Zsb3cgYWxsb3dzIHlvdSB0byBub3RpZnkgdGhlIG1haW50YWluZXIgdGhyb3VnaCBhbgorICAgICAgICAgICAgICAgIGVtYWlsIHRoYXQgeW91IGhhdmUgYSBjaGFuZ2UgKG9yIHBhdGNoKSB5b3Ugd291bGQgbGlrZQorICAgICAgICAgICAgICAgIGNvbnNpZGVyZWQgZm9yIHRoZSAibWFzdGVyIiBicmFuY2ggb2YgdGhlIEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIFRvIHNlbmQgdGhpcyB0eXBlIG9mIGNoYW5nZSwgeW91IGZvcm1hdCB0aGUgcGF0Y2ggYW5kIHRoZW4KKyAgICAgICAgICAgICAgICBzZW5kIHRoZSBlbWFpbCB1c2luZyB0aGUgR2l0IGNvbW1hbmRzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBmb3JtYXQtcGF0Y2g8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IHNlbmQtZW1haWw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGVzZSBzY3JpcHRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2hvdy10by1zdWJtaXQtYS1jaGFuZ2UnPlN1Ym1pdHRpbmcgYSBDaGFuZ2UgdG8gdGhlIFlvY3RvIFByb2plY3Q8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nZ2l0Jz4KKyAgICA8dGl0bGU+R2l0PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBtYWtlcyBleHRlbnNpdmUgdXNlIG9mIEdpdCwgd2hpY2ggaXMgYQorICAgICAgICBmcmVlLCBvcGVuIHNvdXJjZSBkaXN0cmlidXRlZCB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtLgorICAgICAgICBHaXQgc3VwcG9ydHMgZGlzdHJpYnV0ZWQgZGV2ZWxvcG1lbnQsIG5vbi1saW5lYXIgZGV2ZWxvcG1lbnQsCisgICAgICAgIGFuZCBjYW4gaGFuZGxlIGxhcmdlIHByb2plY3RzLgorICAgICAgICBJdCBpcyBiZXN0IHRoYXQgeW91IGhhdmUgc29tZSBmdW5kYW1lbnRhbCB1bmRlcnN0YW5kaW5nCisgICAgICAgIG9mIGhvdyBHaXQgdHJhY2tzIHByb2plY3RzIGFuZCBob3cgdG8gd29yayB3aXRoIEdpdCBpZgorICAgICAgICB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgWW9jdG8gUHJvamVjdCBmb3IgZGV2ZWxvcG1lbnQuCisgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBhIHF1aWNrIG92ZXJ2aWV3IG9mIGhvdyBHaXQgd29ya3MgYW5kCisgICAgICAgIHByb3ZpZGVzIHlvdSB3aXRoIGEgc3VtbWFyeSBvZiBzb21lIGVzc2VudGlhbCBHaXQgY29tbWFuZHMuCisgICAgICAgIDxub3RlPjx0aXRsZT5Ob3RlczwvdGl0bGU+CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gR2l0LCBzZWUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC1zY20uY29tL2RvY3VtZW50YXRpb24nPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIGRvd25sb2FkIEdpdCwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWRkCisgICAgICAgICAgICAgICAgICAgIEdpdCB0byB5b3VyIHN5c3RlbSB0aHJvdWdoIHlvdXIgZGlzdHJpYnV0aW9uJ3MgInNvZnR3YXJlCisgICAgICAgICAgICAgICAgICAgIHN0b3JlIiAoZS5nLiBmb3IgVWJ1bnR1LCB1c2UgdGhlIFVidW50dSBTb2Z0d2FyZSBmZWF0dXJlKS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRoZSBHaXQgZG93bmxvYWQgcGFnZSwgc2VlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQtc2NtLmNvbS9kb3dubG9hZCc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGVzIGJleW9uZCB0aGUgbGltaXRlZCBmZXcgaW4gdGhpcyBzZWN0aW9uIG9uIGhvdworICAgICAgICAgICAgICAgICAgICB0byB1c2UgR2l0IHdpdGggdGhlIFlvY3RvIFByb2plY3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3dvcmtpbmctd2l0aC15b2N0by1wcm9qZWN0LXNvdXJjZS1maWxlcyc+V29ya2luZyBXaXRoIFlvY3RvIFByb2plY3QgU291cmNlIEZpbGVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlcG9zaXRvcmllcy10YWdzLWFuZC1icmFuY2hlcyc+CisgICAgICAgIDx0aXRsZT5SZXBvc2l0b3JpZXMsIFRhZ3MsIGFuZCBCcmFuY2hlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyBtZW50aW9uZWQgYnJpZWZseSBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiBhbmQgYWxzbyBpbiB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd3b3JrZmxvd3MnPldvcmtmbG93czwvbGluaz4iIHNlY3Rpb24sCisgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCBtYWludGFpbnMgc291cmNlIHJlcG9zaXRvcmllcyBhdAorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpJz48L3VsaW5rPi4KKyAgICAgICAgICAgIElmIHlvdSBsb29rIGF0IHRoaXMgd2ViLWludGVyZmFjZSBvZiB0aGUgcmVwb3NpdG9yaWVzLCBlYWNoIGl0ZW0KKyAgICAgICAgICAgIGlzIGEgc2VwYXJhdGUgR2l0IHJlcG9zaXRvcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEdpdCByZXBvc2l0b3JpZXMgdXNlIGJyYW5jaGluZyB0ZWNobmlxdWVzIHRoYXQgdHJhY2sgY29udGVudAorICAgICAgICAgICAgY2hhbmdlIChub3QgZmlsZXMpIHdpdGhpbiBhIHByb2plY3QgKGUuZy4gYSBuZXcgZmVhdHVyZSBvciB1cGRhdGVkCisgICAgICAgICAgICBkb2N1bWVudGF0aW9uKS4KKyAgICAgICAgICAgIENyZWF0aW5nIGEgdHJlZS1saWtlIHN0cnVjdHVyZSBiYXNlZCBvbiBwcm9qZWN0IGRpdmVyZ2VuY2UgYWxsb3dzCisgICAgICAgICAgICBmb3IgZXhjZWxsZW50IGhpc3RvcmljYWwgaW5mb3JtYXRpb24gb3ZlciB0aGUgbGlmZSBvZiBhIHByb2plY3QuCisgICAgICAgICAgICBUaGlzIG1ldGhvZG9sb2d5IGFsc28gYWxsb3dzIGZvciBhbiBlbnZpcm9ubWVudCBmcm9tIHdoaWNoIHlvdSBjYW4KKyAgICAgICAgICAgIGRvIGxvdHMgb2YgbG9jYWwgZXhwZXJpbWVudGF0aW9uIG9uIHByb2plY3RzIGFzIHlvdSBkZXZlbG9wCisgICAgICAgICAgICBjaGFuZ2VzIG9yIG5ldyBmZWF0dXJlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBHaXQgcmVwb3NpdG9yeSByZXByZXNlbnRzIGFsbCBkZXZlbG9wbWVudCBlZmZvcnRzIGZvciBhIGdpdmVuCisgICAgICAgICAgICBwcm9qZWN0LgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBHaXQgcmVwb3NpdG9yeSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IGNvbnRhaW5zCisgICAgICAgICAgICBhbGwgY2hhbmdlcyBhbmQgZGV2ZWxvcG1lbnRzIGZvciBQb2t5IG92ZXIgdGhlIGNvdXJzZSBvZiBpdHMKKyAgICAgICAgICAgIGVudGlyZSBsaWZlLgorICAgICAgICAgICAgVGhhdCBtZWFucyB0aGF0IGFsbCBjaGFuZ2VzIHRoYXQgbWFrZSB1cCBhbGwgcmVsZWFzZXMgYXJlIGNhcHR1cmVkLgorICAgICAgICAgICAgVGhlIHJlcG9zaXRvcnkgbWFpbnRhaW5zIGEgY29tcGxldGUgaGlzdG9yeSBvZiBjaGFuZ2VzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2YgYW55IHJlcG9zaXRvcnkgYnkgImNsb25pbmciIGl0CisgICAgICAgICAgICB3aXRoIHRoZSA8ZmlsZW5hbWU+Z2l0IGNsb25lPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgIFdoZW4geW91IGNsb25lIGEgR2l0IHJlcG9zaXRvcnksIHlvdSBlbmQgdXAgd2l0aCBhbiBpZGVudGljYWwKKyAgICAgICAgICAgIGNvcHkgb2YgdGhlIHJlcG9zaXRvcnkgb24geW91ciBkZXZlbG9wbWVudCBzeXN0ZW0uCisgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIGEgbG9jYWwgY29weSBvZiBhIHJlcG9zaXRvcnksIHlvdSBjYW4gdGFrZSBzdGVwcyB0bworICAgICAgICAgICAgZGV2ZWxvcCBsb2NhbGx5LgorICAgICAgICAgICAgRm9yIGV4YW1wbGVzIG9uIGhvdyB0byBjbG9uZSBHaXQgcmVwb3NpdG9yaWVzLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjd29ya2luZy13aXRoLXlvY3RvLXByb2plY3Qtc291cmNlLWZpbGVzJz5Xb3JraW5nIFdpdGggWW9jdG8gUHJvamVjdCBTb3VyY2UgRmlsZXM8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGF0IEdpdCB0cmFja3MgY29udGVudCBjaGFuZ2UgYW5kCisgICAgICAgICAgICBub3QgZmlsZXMuCisgICAgICAgICAgICBHaXQgdXNlcyAiYnJhbmNoZXMiIHRvIG9yZ2FuaXplIGRpZmZlcmVudCBkZXZlbG9wbWVudCBlZmZvcnRzLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkgaGFzCisgICAgICAgICAgICBzZXZlcmFsIGJyYW5jaGVzIHRoYXQgaW5jbHVkZSB0aGUgY3VycmVudCAiJkRJU1RST19OQU1FX05PX0NBUDsiCisgICAgICAgICAgICBicmFuY2gsIHRoZSAibWFzdGVyIiBicmFuY2gsIGFuZCBtYW55IGJyYW5jaGVzIGZvciBwYXN0CisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2VzLgorICAgICAgICAgICAgWW91IGNhbiBzZWUgYWxsIHRoZSBicmFuY2hlcyBieSBnb2luZyB0bworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpL3Bva3kvJz48L3VsaW5rPiBhbmQKKyAgICAgICAgICAgIGNsaWNraW5nIG9uIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaS9wb2t5L3JlZnMvaGVhZHMnPlsuLi5dPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgbGluayBiZW5lYXRoIHRoZSAiQnJhbmNoIiBoZWFkaW5nLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBFYWNoIG9mIHRoZXNlIGJyYW5jaGVzIHJlcHJlc2VudHMgYSBzcGVjaWZpYyBhcmVhIG9mIGRldmVsb3BtZW50LgorICAgICAgICAgICAgVGhlICJtYXN0ZXIiIGJyYW5jaCByZXByZXNlbnRzIHRoZSBjdXJyZW50IG9yIG1vc3QgcmVjZW50CisgICAgICAgICAgICBkZXZlbG9wbWVudC4KKyAgICAgICAgICAgIEFsbCBvdGhlciBicmFuY2hlcyByZXByZXNlbnQgb2Zmc2hvb3RzIG9mIHRoZSAibWFzdGVyIiBicmFuY2guCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4geW91IGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2YgYSBHaXQgcmVwb3NpdG9yeSwgdGhlIGNvcHkgaGFzCisgICAgICAgICAgICB0aGUgc2FtZSBzZXQgb2YgYnJhbmNoZXMgYXMgdGhlIG9yaWdpbmFsLgorICAgICAgICAgICAgVGhpcyBtZWFucyB5b3UgY2FuIHVzZSBHaXQgdG8gY3JlYXRlIGEgbG9jYWwgd29ya2luZyBhcmVhCisgICAgICAgICAgICAoYWxzbyBjYWxsZWQgYSBicmFuY2gpIHRoYXQgdHJhY2tzIGEgc3BlY2lmaWMgZGV2ZWxvcG1lbnQgYnJhbmNoCisgICAgICAgICAgICBmcm9tIHRoZSB1cHN0cmVhbSBzb3VyY2UgR2l0IHJlcG9zaXRvcnkuCisgICAgICAgICAgICBpbiBvdGhlciB3b3JkcywgeW91IGNhbiBkZWZpbmUgeW91ciBsb2NhbCBHaXQgZW52aXJvbm1lbnQgdG8KKyAgICAgICAgICAgIHdvcmsgb24gYW55IGRldmVsb3BtZW50IGJyYW5jaCBpbiB0aGUgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIFRvIGhlbHAgaWxsdXN0cmF0ZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlIEdpdCBjb21tYW5kczoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kKKyAgICAgJCBjZCBwb2t5CisgICAgICQgZ2l0IGNoZWNrb3V0IC1iICZESVNUUk9fTkFNRV9OT19DQVA7IG9yaWdpbi8mRElTVFJPX05BTUVfTk9fQ0FQOworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSW4gdGhlIHByZXZpb3VzIGV4YW1wbGUgYWZ0ZXIgbW92aW5nIHRvIHRoZSBob21lIGRpcmVjdG9yeSwgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IGNsb25lPC9maWxlbmFtZT4gY29tbWFuZCBjcmVhdGVzIGEKKyAgICAgICAgICAgIGxvY2FsIGNvcHkgb2YgdGhlIHVwc3RyZWFtIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkuCisgICAgICAgICAgICBCeSBkZWZhdWx0LCBHaXQgY2hlY2tzIG91dCB0aGUgIm1hc3RlciIgYnJhbmNoIGZvciB5b3VyIHdvcmsuCisgICAgICAgICAgICBBZnRlciBjaGFuZ2luZyB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIG5ldyBsb2NhbCByZXBvc2l0b3J5CisgICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+KSwgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IGNoZWNrb3V0PC9maWxlbmFtZT4gY29tbWFuZCBjcmVhdGVzCisgICAgICAgICAgICBhbmQgY2hlY2tzIG91dCBhIGxvY2FsIGJyYW5jaCBuYW1lZCAiJkRJU1RST19OQU1FX05PX0NBUDsiLCB3aGljaAorICAgICAgICAgICAgdHJhY2tzIHRoZSB1cHN0cmVhbSAib3JpZ2luLyZESVNUUk9fTkFNRV9OT19DQVA7IiBicmFuY2guCisgICAgICAgICAgICBDaGFuZ2VzIHlvdSBtYWtlIHdoaWxlIGluIHRoaXMgYnJhbmNoIHdvdWxkIHVsdGltYXRlbHkgYWZmZWN0CisgICAgICAgICAgICB0aGUgdXBzdHJlYW0gIiZESVNUUk9fTkFNRV9OT19DQVA7IiBicmFuY2ggb2YgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoYXQgd2hlbiB5b3UgY3JlYXRlIGFuZCBjaGVja291dCBhCisgICAgICAgICAgICBsb2NhbCB3b3JraW5nIGJyYW5jaCBiYXNlZCBvbiBhIGJyYW5jaCBuYW1lLAorICAgICAgICAgICAgeW91ciBsb2NhbCBlbnZpcm9ubWVudCBtYXRjaGVzIHRoZSAidGlwIiBvZiB0aGF0IHBhcnRpY3VsYXIKKyAgICAgICAgICAgIGRldmVsb3BtZW50IGJyYW5jaCBhdCB0aGUgdGltZSB5b3UgY3JlYXRlZCB5b3VyIGxvY2FsIGJyYW5jaCwKKyAgICAgICAgICAgIHdoaWNoIGNvdWxkIGJlIGRpZmZlcmVudCBmcm9tIHRoZSBmaWxlcyBpbiB0aGUgIm1hc3RlciIgYnJhbmNoCisgICAgICAgICAgICBvZiB0aGUgdXBzdHJlYW0gcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCBjcmVhdGluZyBhbmQgY2hlY2tpbmcgb3V0IGEgbG9jYWwgYnJhbmNoIGJhc2VkIG9uCisgICAgICAgICAgICB0aGUgIiZESVNUUk9fTkFNRV9OT19DQVA7IiBicmFuY2ggbmFtZSBpcyBub3QgdGhlIHNhbWUgYXMKKyAgICAgICAgICAgIGNsb25pbmcgYW5kIGNoZWNraW5nIG91dCB0aGUgIm1hc3RlciIgYnJhbmNoIGlmIHRoZSByZXBvc2l0b3J5LgorICAgICAgICAgICAgS2VlcCByZWFkaW5nIHRvIHNlZSBob3cgeW91IGNyZWF0ZSBhIGxvY2FsIHNuYXBzaG90IG9mIGEgWW9jdG8KKyAgICAgICAgICAgIFByb2plY3QgUmVsZWFzZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgR2l0IHVzZXMgInRhZ3MiIHRvIG1hcmsgc3BlY2lmaWMgY2hhbmdlcyBpbiBhIHJlcG9zaXRvcnkuCisgICAgICAgICAgICBUeXBpY2FsbHksIGEgdGFnIGlzIHVzZWQgdG8gbWFyayBhIHNwZWNpYWwgcG9pbnQgc3VjaCBhcyB0aGUgZmluYWwKKyAgICAgICAgICAgIGNoYW5nZSBiZWZvcmUgYSBwcm9qZWN0IGlzIHJlbGVhc2VkLgorICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlIHRhZ3MgdXNlZCB3aXRoIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IEdpdAorICAgICAgICAgICAgcmVwb3NpdG9yeSBieSBnb2luZyB0bworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpL3Bva3kvJz48L3VsaW5rPiBhbmQKKyAgICAgICAgICAgIGNsaWNraW5nIG9uIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaS9wb2t5L3JlZnMvdGFncyc+Wy4uLl08L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICBsaW5rIGJlbmVhdGggdGhlICJUYWciIGhlYWRpbmcuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNvbWUga2V5IHRhZ3MgZm9yIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IGFyZQorICAgICAgICAgICAgPGZpbGVuYW1lPmpldGhyby0xNC4wLjM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tb3J0eS0xNi4wLjE8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5weXJvLTE3LjAuMDwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT4mRElTVFJPX05BTUVfTk9fQ0FQOy0mUE9LWVZFUlNJT047PC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGVzZSB0YWdzIHJlcHJlc2VudCBZb2N0byBQcm9qZWN0IHJlbGVhc2VzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSBjcmVhdGUgYSBsb2NhbCBjb3B5IG9mIHRoZSBHaXQgcmVwb3NpdG9yeSwgeW91IGFsc28KKyAgICAgICAgICAgIGhhdmUgYWNjZXNzIHRvIGFsbCB0aGUgdGFncyBpbiB0aGUgdXBzdHJlYW0gcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIFNpbWlsYXIgdG8gYnJhbmNoZXMsIHlvdSBjYW4gY3JlYXRlIGFuZCBjaGVja291dCBhIGxvY2FsIHdvcmtpbmcKKyAgICAgICAgICAgIEdpdCBicmFuY2ggYmFzZWQgb24gYSB0YWcgbmFtZS4KKyAgICAgICAgICAgIFdoZW4geW91IGRvIHRoaXMsIHlvdSBnZXQgYSBzbmFwc2hvdCBvZiB0aGUgR2l0IHJlcG9zaXRvcnkgdGhhdAorICAgICAgICAgICAgcmVmbGVjdHMgdGhlIHN0YXRlIG9mIHRoZSBmaWxlcyB3aGVuIHRoZSBjaGFuZ2Ugd2FzIG1hZGUgYXNzb2NpYXRlZAorICAgICAgICAgICAgd2l0aCB0aGF0IHRhZy4KKyAgICAgICAgICAgIFRoZSBtb3N0IGNvbW1vbiB1c2UgaXMgdG8gY2hlY2tvdXQgYSB3b3JraW5nIGJyYW5jaCB0aGF0IG1hdGNoZXMKKyAgICAgICAgICAgIGEgc3BlY2lmaWMgWW9jdG8gUHJvamVjdCByZWxlYXNlLgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reQorICAgICAkIGNkIHBva3kKKyAgICAgJCBnaXQgZmV0Y2ggLS1hbGwgLS10YWdzIC0tcHJ1bmUKKyAgICAgJCBnaXQgY2hlY2tvdXQgdGFncy9weXJvLTE3LjAuMCAtYiBteS1weXJvLTE3LjAuMAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgbmFtZSBvZiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBvZiB5b3VyCisgICAgICAgICAgICBsb2NhbCBZb2N0byBQcm9qZWN0IHJlcG9zaXRvcnkgaXMgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEFmdGVyIG1vdmluZyB0byB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBkaXJlY3RvcnksIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBmZXRjaDwvZmlsZW5hbWU+IGNvbW1hbmQgbWFrZXMgYWxsIHRoZSB1cHN0cmVhbQorICAgICAgICAgICAgdGFncyBhdmFpbGFibGUgbG9jYWxseSBpbiB5b3VyIHJlcG9zaXRvcnkuCisgICAgICAgICAgICBGaW5hbGx5LCB0aGUgPGZpbGVuYW1lPmdpdCBjaGVja291dDwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgIGNyZWF0ZXMgYW5kIGNoZWNrcyBvdXQgYSBicmFuY2ggbmFtZWQgIm15LXB5cm8tMTcuMC4wIiB0aGF0IGlzCisgICAgICAgICAgICBiYXNlZCBvbiB0aGUgc3BlY2lmaWMgY2hhbmdlIHVwc3RyZWFtIGluIHRoZSByZXBvc2l0b3J5CisgICAgICAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhlICJweXJvLTE3LjAuMCIgdGFnLgorICAgICAgICAgICAgVGhlIGZpbGVzIGluIHlvdXIgcmVwb3NpdG9yeSBub3cgZXhhY3RseSBtYXRjaCB0aGF0IHBhcnRpY3VsYXIKKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSBhcyBpdCBpcyB0YWdnZWQgaW4gdGhlIHVwc3RyZWFtIEdpdAorICAgICAgICAgICAgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIEl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoYXQgd2hlbiB5b3UgY3JlYXRlIGFuZAorICAgICAgICAgICAgY2hlY2tvdXQgYSBsb2NhbCB3b3JraW5nIGJyYW5jaCBiYXNlZCBvbiBhIHRhZywgeW91ciBlbnZpcm9ubWVudAorICAgICAgICAgICAgbWF0Y2hlcyBhIHNwZWNpZmljIHBvaW50IGluIHRpbWUgYW5kIG5vdCB0aGUgZW50aXJlIGRldmVsb3BtZW50CisgICAgICAgICAgICBicmFuY2ggKGkuZS4gdGhlICJ0aXAiIG9mIHRoZSBicmFuY2gpLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2Jhc2ljLWNvbW1hbmRzJz4KKyAgICAgICAgPHRpdGxlPkJhc2ljIENvbW1hbmRzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEdpdCBoYXMgYW4gZXh0ZW5zaXZlIHNldCBvZiBjb21tYW5kcyB0aGF0IGxldHMgeW91IG1hbmFnZSBjaGFuZ2VzCisgICAgICAgICAgICBhbmQgcGVyZm9ybSBjb2xsYWJvcmF0aW9uIG92ZXIgdGhlIGxpZmUgb2YgYSBwcm9qZWN0LgorICAgICAgICAgICAgQ29udmVuaWVudGx5IHRob3VnaCwgeW91IGNhbiBtYW5hZ2Ugd2l0aCBhIHNtYWxsIHNldCBvZiBiYXNpYworICAgICAgICAgICAgb3BlcmF0aW9ucyBhbmQgd29ya2Zsb3dzIG9uY2UgeW91IHVuZGVyc3RhbmQgdGhlIGJhc2ljCisgICAgICAgICAgICBwaGlsb3NvcGh5IGJlaGluZCBHaXQuCisgICAgICAgICAgICBZb3UgZG8gbm90IGhhdmUgdG8gYmUgYW4gZXhwZXJ0IGluIEdpdCB0byBiZSBmdW5jdGlvbmFsLgorICAgICAgICAgICAgQSBnb29kIHBsYWNlIHRvIGxvb2sgZm9yIGluc3RydWN0aW9uIG9uIGEgbWluaW1hbCBzZXQgb2YgR2l0CisgICAgICAgICAgICBjb21tYW5kcyBpcworICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC1zY20uY29tL2RvY3VtZW50YXRpb24nPmhlcmU8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBrbm93IG11Y2ggYWJvdXQgR2l0LCB5b3Ugc2hvdWxkIGVkdWNhdGUKKyAgICAgICAgICAgIHlvdXJzZWxmIGJ5IHZpc2l0aW5nIHRoZSBsaW5rcyBwcmV2aW91c2x5IG1lbnRpb25lZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IG9mIEdpdCBjb21tYW5kcyBicmllZmx5IGRlc2NyaWJlcyBzb21lIGJhc2ljCisgICAgICAgICAgICBHaXQgb3BlcmF0aW9ucyBhcyBhIHdheSB0byBnZXQgc3RhcnRlZC4KKyAgICAgICAgICAgIEFzIHdpdGggYW55IHNldCBvZiBjb21tYW5kcywgdGhpcyBsaXN0IChpbiBtb3N0IGNhc2VzKSBzaW1wbHkgc2hvd3MKKyAgICAgICAgICAgIHRoZSBiYXNlIGNvbW1hbmQgYW5kIG9taXRzIHRoZSBtYW55IGFyZ3VtZW50cyB0aGV5IHN1cHBvcnQuCisgICAgICAgICAgICBTZWUgdGhlIEdpdCBkb2N1bWVudGF0aW9uIGZvciBjb21wbGV0ZSBkZXNjcmlwdGlvbnMgYW5kIHN0cmF0ZWdpZXMKKyAgICAgICAgICAgIG9uIGhvdyB0byB1c2UgdGhlc2UgY29tbWFuZHM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgaW5pdDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluaXRpYWxpemVzIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2Fubm90IHVzZSBHaXQgY29tbWFuZHMgdW5sZXNzIHlvdSBoYXZlIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5naXQ8L2ZpbGVuYW1lPiByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmEgaWQ9J2dpdC1jb21tYW5kcy1jbG9uZSc+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IGNsb25lPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlcyBhIGxvY2FsIGNsb25lIG9mIGEgR2l0IHJlcG9zaXRvcnkgdGhhdCBpcyBvbgorICAgICAgICAgICAgICAgICAgICBlcXVhbCBmb290aW5nIHdpdGggYSBmZWxsb3cgZGV2ZWxvcGVy4oCZcyBHaXQgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgICAgICBvciBhbiB1cHN0cmVhbSByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IGFkZDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIExvY2FsbHkgc3RhZ2VzIHVwZGF0ZWQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXggdGhhdAorICAgICAgICAgICAgICAgICAgICBHaXQgdXNlcyB0byB0cmFjayBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBzdGFnZSBhbGwgZmlsZXMgdGhhdCBoYXZlIGNoYW5nZWQgYmVmb3JlIHlvdQorICAgICAgICAgICAgICAgICAgICBjYW4gY29tbWl0IHRoZW0uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgY29tbWl0PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlcyBhIGxvY2FsICJjb21taXQiIHRoYXQgZG9jdW1lbnRzIHRoZSBjaGFuZ2VzIHlvdQorICAgICAgICAgICAgICAgICAgICBtYWRlLgorICAgICAgICAgICAgICAgICAgICBPbmx5IGNoYW5nZXMgdGhhdCBoYXZlIGJlZW4gc3RhZ2VkIGNhbiBiZSBjb21taXR0ZWQuCisgICAgICAgICAgICAgICAgICAgIENvbW1pdHMgYXJlIHVzZWQgZm9yIGhpc3RvcmljYWwgcHVycG9zZXMsIGZvciBkZXRlcm1pbmluZworICAgICAgICAgICAgICAgICAgICBpZiBhIG1haW50YWluZXIgb2YgYSBwcm9qZWN0IHdpbGwgYWxsb3cgdGhlIGNoYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgYW5kIGZvciB1bHRpbWF0ZWx5IHB1c2hpbmcgdGhlIGNoYW5nZSBmcm9tIHlvdXIgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnkgaW50byB0aGUgcHJvamVjdOKAmXMgdXBzdHJlYW0gcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBzdGF0dXM8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZXBvcnRzIGFueSBtb2RpZmllZCBmaWxlcyB0aGF0IHBvc3NpYmx5IG5lZWQgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgc3RhZ2VkIGFuZCBnaXZlcyB5b3UgYSBzdGF0dXMgb2Ygd2hlcmUgeW91IHN0YW5kIHJlZ2FyZGluZworICAgICAgICAgICAgICAgICAgICBsb2NhbCBjb21taXRzIGFzIGNvbXBhcmVkIHRvIHRoZSB1cHN0cmVhbSByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IGNoZWNrb3V0PC9maWxlbmFtZT4gPHJlcGxhY2VhYmxlPmJyYW5jaC1uYW1lPC9yZXBsYWNlYWJsZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ2hhbmdlcyB5b3VyIHdvcmtpbmcgYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgaXMgYW5hbG9nb3VzIHRvICJjZCIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBjaGVja291dCDigJNiPC9maWxlbmFtZT4gPHJlcGxhY2VhYmxlPndvcmtpbmctYnJhbmNoPC9yZXBsYWNlYWJsZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlcyBhbmQgY2hlY2tzIG91dCBhIHdvcmtpbmcgYnJhbmNoIG9uIHlvdXIgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZSB0aGF0IHlvdSBjYW4gdXNlIHRvIGlzb2xhdGUgeW91ciB3b3JrLgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBhIGdvb2QgaWRlYSB0byB1c2UgbG9jYWwgYnJhbmNoZXMgd2hlbiBhZGRpbmcKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgZmVhdHVyZXMgb3IgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgaXNvbGF0ZWQgYnJhbmNoZXMgZmFjaWxpdGF0ZXMgZWFzeSByZW1vdmFsIG9mCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMgaWYgdGhleSBkbyBub3Qgd29yayBvdXQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBicmFuY2g8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBEaXNwbGF5cyB0aGUgZXhpc3RpbmcgbG9jYWwgYnJhbmNoZXMgYXNzb2NpYXRlZCB3aXRoIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgbG9jYWwgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJyYW5jaCB0aGF0IHlvdSBoYXZlIGN1cnJlbnRseSBjaGVja2VkIG91dCBpcyBub3RlZAorICAgICAgICAgICAgICAgICAgICB3aXRoIGFuIGFzdGVyaXNrIGNoYXJhY3Rlci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBicmFuY2ggLUQ8L2ZpbGVuYW1lPiA8cmVwbGFjZWFibGU+YnJhbmNoLW5hbWU8L3JlcGxhY2VhYmxlPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBEZWxldGVzIGFuIGV4aXN0aW5nIGxvY2FsIGJyYW5jaC4KKyAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gYmUgaW4gYSBsb2NhbCBicmFuY2ggb3RoZXIgdGhhbiB0aGUgb25lIHlvdQorICAgICAgICAgICAgICAgICAgICBhcmUgZGVsZXRpbmcgaW4gb3JkZXIgdG8gZGVsZXRlCisgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5icmFuY2gtbmFtZTwvcmVwbGFjZWFibGU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IHB1bGw8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZXRyaWV2ZXMgaW5mb3JtYXRpb24gZnJvbSBhbiB1cHN0cmVhbSBHaXQgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgICAgICBhbmQgcGxhY2VzIGl0IGluIHlvdXIgbG9jYWwgR2l0IHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgICAgIFlvdSB1c2UgdGhpcyBjb21tYW5kIHRvIG1ha2Ugc3VyZSB5b3UgYXJlIHN5bmNocm9uaXplZCB3aXRoCisgICAgICAgICAgICAgICAgICAgIHRoZSByZXBvc2l0b3J5IGZyb20gd2hpY2ggeW91IGFyZSBiYXNpbmcgY2hhbmdlcworICAgICAgICAgICAgICAgICAgICAoLmUuZy4gdGhlICJtYXN0ZXIiIGJyYW5jaCkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgcHVzaDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFNlbmRzIGFsbCB5b3VyIGNvbW1pdHRlZCBsb2NhbCBjaGFuZ2VzIHRvIHRoZSB1cHN0cmVhbSBHaXQKKyAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSB0aGF0IHlvdXIgbG9jYWwgcmVwb3NpdG9yeSBpcyB0cmFja2luZworICAgICAgICAgICAgICAgICAgICAoZS5nLiBhIGNvbnRyaWJ1dGlvbiByZXBvc2l0b3J5KS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1haW50YWluZXIgb2YgdGhlIHByb2plY3QgZHJhd3MgZnJvbSB0aGVzZSByZXBvc2l0b3JpZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gbWVyZ2UgY2hhbmdlcyAoY29tbWl0cykgaW50byB0aGUgYXBwcm9wcmlhdGUgYnJhbmNoCisgICAgICAgICAgICAgICAgICAgIG9mIHByb2plY3QncyB1cHN0cmVhbSByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IG1lcmdlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29tYmluZXMgb3IgYWRkcyBjaGFuZ2VzIGZyb20gb25lCisgICAgICAgICAgICAgICAgICAgIGxvY2FsIGJyYW5jaCBvZiB5b3VyIHJlcG9zaXRvcnkgd2l0aCBhbm90aGVyIGJyYW5jaC4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgY3JlYXRlIGEgbG9jYWwgR2l0IHJlcG9zaXRvcnksIHRoZSBkZWZhdWx0IGJyYW5jaAorICAgICAgICAgICAgICAgICAgICBpcyBuYW1lZCAibWFzdGVyIi4KKyAgICAgICAgICAgICAgICAgICAgQSB0eXBpY2FsIHdvcmtmbG93IGlzIHRvIGNyZWF0ZSBhIHRlbXBvcmFyeSBicmFuY2ggdGhhdCBpcworICAgICAgICAgICAgICAgICAgICBiYXNlZCBvZmYgIm1hc3RlciIgdGhhdCB5b3Ugd291bGQgdXNlIGZvciBpc29sYXRlZCB3b3JrLgorICAgICAgICAgICAgICAgICAgICBZb3Ugd291bGQgbWFrZSB5b3VyIGNoYW5nZXMgaW4gdGhhdCBpc29sYXRlZCBicmFuY2gsCisgICAgICAgICAgICAgICAgICAgIHN0YWdlIGFuZCBjb21taXQgdGhlbSBsb2NhbGx5LCBzd2l0Y2ggdG8gdGhlICJtYXN0ZXIiCisgICAgICAgICAgICAgICAgICAgIGJyYW5jaCwgYW5kIHRoZW4gdXNlIHRoZSA8ZmlsZW5hbWU+Z2l0IG1lcmdlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZCB0byBhcHBseSB0aGUgY2hhbmdlcyBmcm9tIHlvdXIgaXNvbGF0ZWQgYnJhbmNoCisgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIGN1cnJlbnRseSBjaGVja2VkIG91dCBicmFuY2ggKGUuZy4gIm1hc3RlciIpLgorICAgICAgICAgICAgICAgICAgICBBZnRlciB0aGUgbWVyZ2UgaXMgY29tcGxldGUgYW5kIGlmIHlvdSBhcmUgZG9uZSB3aXRoCisgICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgaW4gdGhhdCBpc29sYXRlZCBicmFuY2gsIHlvdSBjYW4gc2FmZWx5IGRlbGV0ZQorICAgICAgICAgICAgICAgICAgICB0aGUgaXNvbGF0ZWQgYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IGNoZXJyeS1waWNrPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ2hvb3NlIGFuZCBhcHBseSBzcGVjaWZpYyBjb21taXRzIGZyb20gb25lIGJyYW5jaAorICAgICAgICAgICAgICAgICAgICBpbnRvIGFub3RoZXIgYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICBUaGVyZSBhcmUgdGltZXMgd2hlbiB5b3UgbWlnaHQgbm90IGJlIGFibGUgdG8gbWVyZ2UKKyAgICAgICAgICAgICAgICAgICAgYWxsIHRoZSBjaGFuZ2VzIGluIG9uZSBicmFuY2ggd2l0aAorICAgICAgICAgICAgICAgICAgICBhbm90aGVyIGJ1dCBuZWVkIHRvIHBpY2sgb3V0IGNlcnRhaW4gb25lcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPmdpdGs8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBQcm92aWRlcyBhIEdVSSB2aWV3IG9mIHRoZSBicmFuY2hlcyBhbmQgY2hhbmdlcyBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIGxvY2FsIEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgaXMgYSBnb29kIHdheSB0byBncmFwaGljYWxseSBzZWUgd2hlcmUgdGhpbmdzCisgICAgICAgICAgICAgICAgICAgIGhhdmUgZGl2ZXJnZWQgaW4geW91ciBsb2NhbCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGluc3RhbGwgdGhlIDxmaWxlbmFtZT5naXRrPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2Ugb24geW91ciBkZXZlbG9wbWVudCBzeXN0ZW0gdG8gdXNlIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBsb2c8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZXBvcnRzIGEgaGlzdG9yeSBvZiB5b3VyIGNvbW1pdHMgdG8gdGhlIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVwb3J0IGxpc3RzIGFsbCBjb21taXRzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB5b3UKKyAgICAgICAgICAgICAgICAgICAgaGF2ZSBwdXNoZWQgdGhlbSB1cHN0cmVhbSBvciBub3QuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgZGlmZjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIERpc3BsYXlzIGxpbmUtYnktbGluZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGEgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgd29ya2luZyBmaWxlIGFuZCB0aGUgc2FtZSBmaWxlIGFzIHVuZGVyc3Rvb2QgYnkgR2l0LgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgaXMgdXNlZnVsIHRvIHNlZSB3aGF0IHlvdSBoYXZlIGNoYW5nZWQKKyAgICAgICAgICAgICAgICAgICAgaW4gYW55IGdpdmVuIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSd5b2N0by1wcm9qZWN0LXJlcG9zaXRvcmllcyc+CisgICAgPHRpdGxlPllvY3RvIFByb2plY3QgU291cmNlIFJlcG9zaXRvcmllczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgdGVhbSBtYWludGFpbnMgY29tcGxldGUgc291cmNlIHJlcG9zaXRvcmllcyBmb3IgYWxsCisgICAgICAgIFlvY3RvIFByb2plY3QgZmlsZXMgYXQKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2knPjwvdWxpbms+LgorICAgICAgICBUaGlzIHdlYi1iYXNlZCBzb3VyY2UgY29kZSBicm93c2VyIGlzIG9yZ2FuaXplZCBpbnRvIGNhdGVnb3JpZXMgYnkKKyAgICAgICAgZnVuY3Rpb24gc3VjaCBhcyBJREUgUGx1Z2lucywgTWF0Y2hib3gsIFBva3ksIFlvY3RvIExpbnV4IEtlcm5lbCwgYW5kCisgICAgICAgIHNvIGZvcnRoLgorICAgICAgICBGcm9tIHRoZSBpbnRlcmZhY2UsIHlvdSBjYW4gY2xpY2sgb24gYW55IHBhcnRpY3VsYXIgaXRlbSBpbiB0aGUgIk5hbWUiCisgICAgICAgIGNvbHVtbiBhbmQgc2VlIHRoZSBVUkwgYXQgdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSB0aGF0IHlvdSBuZWVkIHRvIGNsb25lCisgICAgICAgIGEgR2l0IHJlcG9zaXRvcnkgZm9yIHRoYXQgcGFydGljdWxhciBpdGVtLgorICAgICAgICBIYXZpbmcgYSBsb2NhbCBHaXQgcmVwb3NpdG9yeSBvZiB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4sIHdoaWNoIGlzCisgICAgICAgIHVzdWFsbHkgbmFtZWQgInBva3kiLCBhbGxvd3MKKyAgICAgICAgeW91IHRvIG1ha2UgY2hhbmdlcywgY29udHJpYnV0ZSB0byB0aGUgaGlzdG9yeSwgYW5kIHVsdGltYXRlbHkgZW5oYW5jZQorICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCdzIHRvb2xzLCBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzLCBhbmQgc28gZm9ydGguCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBhbnkgc3VwcG9ydGVkIHJlbGVhc2Ugb2YgWW9jdG8gUHJvamVjdCwgeW91IGNhbiBhbHNvIGdvIHRvIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7Jz5Zb2N0byBQcm9qZWN0IFdlYnNpdGU8L3VsaW5rPiBhbmQKKyAgICAgICAgc2VsZWN0IHRoZSAiRG93bmxvYWRzIiB0YWIgYW5kIGdldCBhIHJlbGVhc2VkIHRhcmJhbGwgb2YgdGhlCisgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gcmVwb3NpdG9yeSBvciBhbnkgc3VwcG9ydGVkIEJTUCB0YXJiYWxscy4KKyAgICAgICAgVW5wYWNraW5nIHRoZXNlIHRhcmJhbGxzIGdpdmVzIHlvdSBhIHNuYXBzaG90IG9mIHRoZSByZWxlYXNlZAorICAgICAgICBmaWxlcy4KKyAgICAgICAgPG5vdGU+PHRpdGxlPk5vdGVzPC90aXRsZT4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVjb21tZW5kZWQgbWV0aG9kIGZvciBzZXR0aW5nIHVwIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgZmlsZXMgZm9yIHN1cHBvcnRlZCBCU1BzCisgICAgICAgICAgICAgICAgICAgIChlLmcuLCA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+KSBpcyB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZ2l0Jz5HaXQ8L2xpbms+IHRvIGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIHVwc3RyZWFtIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIGFsd2F5cyB3b3JrIGluIG1hdGNoaW5nIGJyYW5jaGVzIGZvciBib3RoCisgICAgICAgICAgICAgICAgICAgIHRoZSBzZWxlY3RlZCBCU1AgcmVwb3NpdG9yeSBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4pIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBjaGVja2VkIG91dCB0aGUgIm1hc3RlciIgYnJhbmNoCisgICAgICAgICAgICAgICAgICAgIG9mIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gYW5kIHlvdSBhcmUgZ29pbmcgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4sIGJlIHN1cmUgdG8gY2hlY2tvdXQgdGhlCisgICAgICAgICAgICAgICAgICAgICJtYXN0ZXIiIGJyYW5jaCBvZiA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEluIHN1bW1hcnksIGhlcmUgaXMgd2hlcmUgeW91IGNhbiBnZXQgdGhlIHByb2plY3QgZmlsZXMgbmVlZGVkIGZvcgorICAgICAgICBkZXZlbG9wbWVudDoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYSBpZD0nc291cmNlLXJlcG9zaXRvcmllcyc+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0L2NnaXQuY2dpJz5Tb3VyY2UgUmVwb3NpdG9yaWVzOjwvdWxpbms+CisgICAgICAgICAgICAgICAgPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGlzIGFyZWEgY29udGFpbnMgSURFIFBsdWdpbnMsIE1hdGNoYm94LCBQb2t5LCBQb2t5IFN1cHBvcnQsCisgICAgICAgICAgICAgICAgVG9vbHMsIFlvY3RvIExpbnV4IEtlcm5lbCwgYW5kIFlvY3RvIE1ldGFkYXRhIExheWVycy4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGNyZWF0ZSBsb2NhbCBjb3BpZXMgb2YgR2l0IHJlcG9zaXRvcmllcyBmb3IgZWFjaCBvZgorICAgICAgICAgICAgICAgIHRoZXNlIGFyZWFzLjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9zb3VyY2UtcmVwb3MucG5nIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNmluIiBkZXB0aD0iNGluIiAvPgorICAgICAgICAgICAgICAgIEZvciBzdGVwcyBvbiBob3cgdG8gdmlldyBhbmQgYWNjZXNzIHRoZXNlIHVwc3RyZWFtIEdpdAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcmllcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNhY2Nlc3Npbmctc291cmNlLXJlcG9zaXRvcmllcyc+QWNjZXNzaW5nIFNvdXJjZSBSZXBvc2l0b3JpZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBTZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48YW5jaG9yIGlkPSdpbmRleC1kb3dubG9hZHMnIC8+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ETF9VUkw7L3JlbGVhc2VzLyc+SW5kZXggb2YgL3JlbGVhc2VzOjwvdWxpbms+CisgICAgICAgICAgICAgICAgPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGlzIGlzIGFuIGluZGV4IG9mIHJlbGVhc2VzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICB0aGUgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz4KKyAgICAgICAgICAgICAgICBZb2N0byBQbHVnLWluLCBtaXNjZWxsYW5lb3VzIHN1cHBvcnQsIFBva3ksIFBzZXVkbywgaW5zdGFsbGVycworICAgICAgICAgICAgICAgIGZvciBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW5zLCBhbmQgYWxsIHJlbGVhc2VkIHZlcnNpb25zIG9mCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBpbiB0aGUgZm9ybSBvZiBpbWFnZXMgb3IgdGFyYmFsbHMuCisgICAgICAgICAgICAgICAgRG93bmxvYWRpbmcgYW5kIGV4dHJhY3RpbmcgdGhlc2UgZmlsZXMgZG9lcyBub3QgcHJvZHVjZSBhIGxvY2FsCisgICAgICAgICAgICAgICAgY29weSBvZiB0aGUgR2l0IHJlcG9zaXRvcnkgYnV0IHJhdGhlciBhIHNuYXBzaG90IG9mIGEKKyAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyIHJlbGVhc2Ugb3IgaW1hZ2UuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2luZGV4LWRvd25sb2Fkcy5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2aW4iIGRlcHRoPSIzLjVpbiIgLz4KKyAgICAgICAgICAgICAgICBGb3Igc3RlcHMgb24gaG93IHRvIHZpZXcgYW5kIGFjY2VzcyB0aGVzZSBmaWxlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNhY2Nlc3NpbmctaW5kZXgtb2YtcmVsZWFzZXMnPkFjY2Vzc2luZyBJbmRleCBvZiBSZWxlYXNlczwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdkb3dubG9hZHMtcGFnZSc+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPiJEb3dubG9hZHMiIHBhZ2UgZm9yIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsnPllvY3RvIFByb2plY3QgV2Vic2l0ZTwvdWxpbms+OgorICAgICAgICAgICAgICAgIDwvZW1waGFzaXM+PC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0id3JpdGVybm90ZXMiPlRoaXMgc2VjdGlvbiB3aWxsIGNoYW5nZSBkdWUgdG8KKyAgICAgICAgICAgICAgICByZXdvcmtpbmcgb2YgdGhlIFlQIFdlYnNpdGUuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIFlvY3RvIFByb2plY3Qgd2Vic2l0ZSBpbmNsdWRlcyBhICJEb3dubG9hZHMiIHRhYgorICAgICAgICAgICAgICAgIHRoYXQgYWxsb3dzIHlvdSB0byBkb3dubG9hZCBhbnkgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIHJlbGVhc2UgYW5kIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBpbiB0YXJiYWxsIGZvcm0uCisgICAgICAgICAgICAgICAgVGhlIHRhcmJhbGxzIGFyZSBzaW1pbGFyIHRvIHRob3NlIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ETF9VUkw7L3JlbGVhc2VzLyc+SW5kZXggb2YgL3JlbGVhc2VzOjwvdWxpbms+IGFyZWEuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3lwLWRvd25sb2FkLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjZpbiIgZGVwdGg9IjRpbiIgLz4KKyAgICAgICAgICAgICAgICBGb3Igc3RlcHMgb24gaG93IHRvIHVzZSB0aGUgIkRvd25sb2FkcyIgcGFnZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1c2luZy10aGUtZG93bmxvYWRzLXBhZ2UnPlVzaW5nIHRoZSBEb3dubG9hZHMgUGFnZTwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdsaWNlbnNpbmcnPgorICAgIDx0aXRsZT5MaWNlbnNpbmc8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEJlY2F1c2Ugb3BlbiBzb3VyY2UgcHJvamVjdHMgYXJlIG9wZW4gdG8gdGhlIHB1YmxpYywgdGhleSBoYXZlCisgICAgICAgIGRpZmZlcmVudCBsaWNlbnNpbmcgc3RydWN0dXJlcyBpbiBwbGFjZS4KKyAgICAgICAgTGljZW5zZSBldm9sdXRpb24gZm9yIGJvdGggT3BlbiBTb3VyY2UgYW5kIEZyZWUgU29mdHdhcmUgaGFzIGFuCisgICAgICAgIGludGVyZXN0aW5nIGhpc3RvcnkuCisgICAgICAgIElmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiB0aGlzIGhpc3RvcnksIHlvdSBjYW4gZmluZCBiYXNpYyBpbmZvcm1hdGlvbgorICAgICAgICBoZXJlOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvT3Blbi1zb3VyY2VfbGljZW5zZSc+T3BlbiBzb3VyY2UgbGljZW5zZSBoaXN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ZyZWVfc29mdHdhcmVfbGljZW5zZSc+RnJlZSBzb2Z0d2FyZSBsaWNlbnNlIGhpc3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSW4gZ2VuZXJhbCwgdGhlIFlvY3RvIFByb2plY3QgaXMgYnJvYWRseSBsaWNlbnNlZCB1bmRlciB0aGUKKyAgICAgICAgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSAoTUlUKSBMaWNlbnNlLgorICAgICAgICBNSVQgbGljZW5zaW5nIHBlcm1pdHMgdGhlIHJldXNlIG9mIHNvZnR3YXJlIHdpdGhpbiBwcm9wcmlldGFyeQorICAgICAgICBzb2Z0d2FyZSBhcyBsb25nIGFzIHRoZSBsaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIHdpdGggdGhhdCBzb2Z0d2FyZS4KKyAgICAgICAgTUlUIGlzIGFsc28gY29tcGF0aWJsZSB3aXRoIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKS4KKyAgICAgICAgUGF0Y2hlcyB0byB0aGUgWW9jdG8gUHJvamVjdCBmb2xsb3cgdGhlIHVwc3RyZWFtIGxpY2Vuc2luZyBzY2hlbWUuCisgICAgICAgIFlvdSBjYW4gZmluZCBpbmZvcm1hdGlvbiBvbiB0aGUgTUlUIGxpY2Vuc2UKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHAnPmhlcmU8L3VsaW5rPi4KKyAgICAgICAgWW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIG9uIHRoZSBHTlUgR1BMCisgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTEdQTC0zLjAnPmhlcmU8L3VsaW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hlbiB5b3UgYnVpbGQgYW4gaW1hZ2UgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QsIHRoZSBidWlsZCBwcm9jZXNzCisgICAgICAgIHVzZXMgYSBrbm93biBsaXN0IG9mIGxpY2Vuc2VzIHRvIGVuc3VyZSBjb21wbGlhbmNlLgorICAgICAgICBZb3UgY2FuIGZpbmQgdGhpcyBsaXN0IGluIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPiBhdAorICAgICAgICA8ZmlsZW5hbWU+bWV0YS9maWxlcy9jb21tb24tbGljZW5zZXM8L2ZpbGVuYW1lPi4KKyAgICAgICAgT25jZSB0aGUgYnVpbGQgY29tcGxldGVzLCB0aGUgbGlzdCBvZiBhbGwgbGljZW5zZXMgZm91bmQgYW5kIHVzZWQKKyAgICAgICAgZHVyaW5nIHRoYXQgYnVpbGQgYXJlIGtlcHQgaW4gdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICBhdCA8ZmlsZW5hbWU+dG1wL2RlcGxveS9saWNlbnNlczwvZmlsZW5hbWU+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBJZiBhIG1vZHVsZSByZXF1aXJlcyBhIGxpY2Vuc2UgdGhhdCBpcyBub3QgaW4gdGhlIGJhc2UgbGlzdCwgdGhlCisgICAgICAgIGJ1aWxkIHByb2Nlc3MgZ2VuZXJhdGVzIGEgd2FybmluZyBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICBUaGVzZSB0b29scyBtYWtlIGl0IGVhc2llciBmb3IgYSBkZXZlbG9wZXIgdG8gYmUgY2VydGFpbiBvZiB0aGUKKyAgICAgICAgbGljZW5zZXMgd2l0aCB3aGljaCB0aGVpciBzaGlwcGVkIHByb2R1Y3RzIG11c3QgY29tcGx5LgorICAgICAgICBIb3dldmVyLCBldmVuIHdpdGggdGhlc2UgdG9vbHMgaXQgaXMgc3RpbGwgdXAgdG8gdGhlIGRldmVsb3BlciB0bworICAgICAgICByZXNvbHZlIHBvdGVudGlhbCBsaWNlbnNpbmcgaXNzdWVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgYmFzZSBsaXN0IG9mIGxpY2Vuc2VzIHVzZWQgYnkgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgYSBjb21iaW5hdGlvbgorICAgICAgICBvZiB0aGUgU29mdHdhcmUgUGFja2FnZSBEYXRhIEV4Y2hhbmdlIChTUERYKSBsaXN0IGFuZCB0aGUgT3BlbgorICAgICAgICBTb3VyY2UgSW5pdGlhdGl2ZSAoT1NJKSBwcm9qZWN0cy4KKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3NwZHgub3JnJz5TUERYIEdyb3VwPC91bGluaz4gaXMgYSB3b3JraW5nIGdyb3VwIG9mCisgICAgICAgIHRoZSBMaW51eCBGb3VuZGF0aW9uIHRoYXQgbWFpbnRhaW5zIGEgc3BlY2lmaWNhdGlvbiBmb3IgYSBzdGFuZGFyZAorICAgICAgICBmb3JtYXQgZm9yIGNvbW11bmljYXRpbmcgdGhlIGNvbXBvbmVudHMsIGxpY2Vuc2VzLCBhbmQgY29weXJpZ2h0cworICAgICAgICBhc3NvY2lhdGVkIHdpdGggYSBzb2Z0d2FyZSBwYWNrYWdlLgorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vb3BlbnNvdXJjZS5vcmcnPk9TSTwvdWxpbms+IGlzIGEgY29ycG9yYXRpb24KKyAgICAgICAgZGVkaWNhdGVkIHRvIHRoZSBPcGVuIFNvdXJjZSBEZWZpbml0aW9uIGFuZCB0aGUgZWZmb3J0IGZvciByZXZpZXdpbmcKKyAgICAgICAgYW5kIGFwcHJvdmluZyBsaWNlbnNlcyB0aGF0IGNvbmZvcm0gdG8gdGhlIE9wZW4gU291cmNlIERlZmluaXRpb24KKyAgICAgICAgKE9TRCkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFlvdSBjYW4gZmluZCBhIGxpc3Qgb2YgdGhlIGNvbWJpbmVkIFNQRFggYW5kIE9TSSBsaWNlbnNlcyB0aGF0IHRoZQorICAgICAgICBZb2N0byBQcm9qZWN0IHVzZXMgaW4gdGhlCisgICAgICAgIDxmaWxlbmFtZT5tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlczwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpbiB5b3VyCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gdGhhdCBjYW4gaGVscCB5b3UgbWFpbnRhaW4gY29tcGxpYW5jZSB3aXRoIHZhcmlvdXMKKyAgICAgICAgb3BlbiBzb3VyY2UgbGljZW5zaW5nIGR1cmluZyB0aGUgbGlmZWN5Y2xlIG9mIGEgcHJvZHVjdCBjcmVhdGVkIHVzaW5nCisgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0LCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtYWludGFpbmluZy1vcGVuLXNvdXJjZS1saWNlbnNlLWNvbXBsaWFuY2UtZHVyaW5nLXlvdXItcHJvZHVjdHMtbGlmZWN5Y2xlJz5NYWludGFpbmluZyBPcGVuIFNvdXJjZSBMaWNlbnNlIENvbXBsaWFuY2UgRHVyaW5nIFlvdXIgUHJvZHVjdCdzIExpZmVjeWNsZTwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWNpcGUtc3ludGF4Jz4KKyAgICA8dGl0bGU+UmVjaXBlIFN5bnRheDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVW5kZXJzdGFuZGluZyByZWNpcGUgZmlsZSBzeW50YXggaXMgaW1wb3J0YW50IGZvcgorICAgICAgICB3cml0aW5nIHJlY2lwZXMuCisgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBvdmVydmlld3MgdGhlIGJhc2ljIGl0ZW1zIHRoYXQgbWFrZSB1cCBhCisgICAgICAgIEJpdEJha2UgcmVjaXBlIGZpbGUuCisgICAgICAgIEZvciBtb3JlIGNvbXBsZXRlIEJpdEJha2Ugc3ludGF4IGRlc2NyaXB0aW9ucywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyNiaXRiYWtlLXVzZXItbWFudWFsLW1ldGFkYXRhJz5TeW50YXggYW5kIE9wZXJhdG9yczwvdWxpbms+IgorICAgICAgICBjaGFwdGVyIG9mIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsLgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5WYXJpYWJsZSBBc3NpZ25tZW50cyBhbmQgTWFuaXB1bGF0aW9uczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFZhcmlhYmxlIGFzc2lnbm1lbnRzIGFsbG93IGEgdmFsdWUgdG8gYmUgYXNzaWduZWQgdG8gYQorICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIFRoZSBhc3NpZ25tZW50IGNhbiBiZSBzdGF0aWMgdGV4dCBvciBtaWdodCBpbmNsdWRlCisgICAgICAgICAgICAgICAgdGhlIGNvbnRlbnRzIG9mIG90aGVyIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICBJbiBhZGRpdGlvbiB0byB0aGUgYXNzaWdubWVudCwgYXBwZW5kaW5nIGFuZCBwcmVwZW5kaW5nCisgICAgICAgICAgICAgICAgb3BlcmF0aW9ucyBhcmUgYWxzbyBzdXBwb3J0ZWQuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBzb21lIG9mIHRoZSB3YXlzCisgICAgICAgICAgICAgICAgeW91IGNhbiB1c2UgdmFyaWFibGVzIGluIHJlY2lwZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTID0gIiR7V09SS0RJUn0vcG9zdGZpeC0ke1BWfSIKKyAgICAgQ0ZMQUdTICs9ICItRE5PX0FTTSIKKyAgICAgU1JDX1VSSV9hcHBlbmQgPSAiIGZpbGU6Ly9maXh1cC5wYXRjaCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkZ1bmN0aW9uczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEZ1bmN0aW9ucyBwcm92aWRlIGEgc2VyaWVzIG9mIGFjdGlvbnMgdG8gYmUgcGVyZm9ybWVkLgorICAgICAgICAgICAgICAgIFlvdSB1c3VhbGx5IHVzZSBmdW5jdGlvbnMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBvZiBhIHRhc2sgZnVuY3Rpb24gb3IgdG8gY29tcGxlbWVudAorICAgICAgICAgICAgICAgIGEgZGVmYXVsdCBmdW5jdGlvbiAoaS5lLiBhcHBlbmQgb3IgcHJlcGVuZCB0byBhbgorICAgICAgICAgICAgICAgIGV4aXN0aW5nIGZ1bmN0aW9uKS4KKyAgICAgICAgICAgICAgICBTdGFuZGFyZCBmdW5jdGlvbnMgdXNlIDxmaWxlbmFtZT5zaDwvZmlsZW5hbWU+IHNoZWxsCisgICAgICAgICAgICAgICAgc3ludGF4LCBhbHRob3VnaCBhY2Nlc3MgdG8gT3BlbkVtYmVkZGVkIHZhcmlhYmxlcyBhbmQKKyAgICAgICAgICAgICAgICBpbnRlcm5hbCBtZXRob2RzIGFyZSBhbHNvIGF2YWlsYWJsZS48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIGZ1bmN0aW9uIGZyb20gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNlZDwvZmlsZW5hbWU+IHJlY2lwZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX2luc3RhbGwgKCkgeworICAgICAgICAgYXV0b3Rvb2xzX2RvX2luc3RhbGwKKyAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisgICAgICAgICBtdiAke0R9JHtiaW5kaXJ9L3NlZCAke0R9JHtiYXNlX2JpbmRpcn0vc2VkCisgICAgICAgICBybWRpciAke0R9JHtiaW5kaXJ9LworICAgICB9CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gaW1wbGVtZW50IG5ldyBmdW5jdGlvbnMgdGhhdAorICAgICAgICAgICAgICAgIGFyZSBjYWxsZWQgYmV0d2VlbiBleGlzdGluZyB0YXNrcyBhcyBsb25nIGFzIHRoZQorICAgICAgICAgICAgICAgIG5ldyBmdW5jdGlvbnMgYXJlIG5vdCByZXBsYWNpbmcgb3IgY29tcGxlbWVudGluZyB0aGUKKyAgICAgICAgICAgICAgICBkZWZhdWx0IGZ1bmN0aW9ucy4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGltcGxlbWVudCBmdW5jdGlvbnMgaW4gUHl0aG9uCisgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiBzaGVsbC4KKyAgICAgICAgICAgICAgICBCb3RoIG9mIHRoZXNlIG9wdGlvbnMgYXJlIG5vdCBzZWVuIGluIHRoZSBtYWpvcml0eSBvZgorICAgICAgICAgICAgICAgIHJlY2lwZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPktleXdvcmRzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQml0QmFrZSByZWNpcGVzIHVzZSBvbmx5IGEgZmV3IGtleXdvcmRzLgorICAgICAgICAgICAgICAgIFlvdSB1c2Uga2V5d29yZHMgdG8gaW5jbHVkZSBjb21tb24KKyAgICAgICAgICAgICAgICBmdW5jdGlvbnMgKDxmaWxlbmFtZT5pbmhlcml0PC9maWxlbmFtZT4pLCBsb2FkIHBhcnRzCisgICAgICAgICAgICAgICAgb2YgYSByZWNpcGUgZnJvbSBvdGhlciBmaWxlcworICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZXF1aXJlPC9maWxlbmFtZT4pIGFuZCBleHBvcnQgdmFyaWFibGVzCisgICAgICAgICAgICAgICAgdG8gdGhlIGVudmlyb25tZW50ICg8ZmlsZW5hbWU+ZXhwb3J0PC9maWxlbmFtZT4pLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgdGhlIHVzZSBvZiBzb21lIG9mCisgICAgICAgICAgICAgICAgdGhlc2Uga2V5d29yZHM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBleHBvcnQgUE9TVENPTkYgPSAiJHtTVEFHSU5HX0JJTkRJUn0vcG9zdGNvbmYiCisgICAgIGluaGVyaXQgYXV0b2NvbmYKKyAgICAgcmVxdWlyZSBvdGhlcmZpbGUuaW5jCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Db21tZW50czo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEFueSBsaW5lcyB0aGF0IGJlZ2luIHdpdGggdGhlIGhhc2ggY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4jPC9maWxlbmFtZT4pIGFyZSB0cmVhdGVkIGFzIGNvbW1lbnQgbGluZXMKKyAgICAgICAgICAgICAgICBhbmQgYXJlIGlnbm9yZWQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIFRoaXMgaXMgYSBjb21tZW50CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBuZXh0IGxpc3Qgc3VtbWFyaXplcyB0aGUgbW9zdCBpbXBvcnRhbnQgYW5kIG1vc3QgY29tbW9ubHkKKyAgICAgICAgdXNlZCBwYXJ0cyBvZiB0aGUgcmVjaXBlIHN5bnRheC4KKyAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlc2UgcGFydHMgb2YgdGhlIHN5bnRheCwgeW91IGNhbgorICAgICAgICByZWZlcmVuY2UgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjYml0YmFrZS11c2VyLW1hbnVhbC1tZXRhZGF0YSc+U3ludGF4IGFuZCBPcGVyYXRvcnM8L3VsaW5rPgorICAgICAgICBjaGFwdGVyIGluIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsLgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5MaW5lIENvbnRpbnVhdGlvbjogPGZpbGVuYW1lPlw8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICBVc2UgdGhlIGJhY2t3YXJkIHNsYXNoICg8ZmlsZW5hbWU+XDwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgIGNoYXJhY3RlciB0byBzcGxpdCBhIHN0YXRlbWVudCBvdmVyIG11bHRpcGxlIGxpbmVzLgorICAgICAgICAgICAgICAgIFBsYWNlIHRoZSBzbGFzaCBjaGFyYWN0ZXIgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSB0aGF0CisgICAgICAgICAgICAgICAgaXMgdG8gYmUgY29udGludWVkIG9uIHRoZSBuZXh0IGxpbmU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBWQVIgPSAiQSByZWFsbHkgbG9uZyBcCisgICAgICAgICAgICBsaW5lIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbm5vdCBoYXZlIGFueSBjaGFyYWN0ZXJzIGluY2x1ZGluZyBzcGFjZXMKKyAgICAgICAgICAgICAgICAgICAgb3IgdGFicyBhZnRlciB0aGUgc2xhc2ggY2hhcmFjdGVyLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+VXNpbmcgVmFyaWFibGVzOiA8ZmlsZW5hbWU+JHsuLi59PC9maWxlbmFtZT48L2VtcGhhc2lzPiAtCisgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+JHs8cmVwbGFjZWFibGU+VkFSTkFNRTwvcmVwbGFjZWFibGU+fTwvZmlsZW5hbWU+IHN5bnRheCB0bworICAgICAgICAgICAgICAgIGFjY2VzcyB0aGUgY29udGVudHMgb2YgYSB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xpYnBuZy96bGliLSR7UFZ9LnRhci5neiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoYXQgdGhlIHZhbHVlIG9mIGEKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZXhwcmVzc2VkIGluIHRoaXMgZm9ybSBkb2VzIG5vdCBnZXQKKyAgICAgICAgICAgICAgICAgICAgc3Vic3RpdHV0ZWQgYXV0b21hdGljYWxseS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGV4cGFuc2lvbiBvZiB0aGVzZSBleHByZXNzaW9ucyBoYXBwZW5zCisgICAgICAgICAgICAgICAgICAgIG9uLWRlbWFuZCBsYXRlciAoZS5nLiB1c3VhbGx5IHdoZW4gYSBmdW5jdGlvbiB0aGF0CisgICAgICAgICAgICAgICAgICAgIG1ha2VzIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgZXhlY3V0ZXMpLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGJlaGF2aW9yIGVuc3VyZXMgdGhhdCB0aGUgdmFsdWVzIGFyZSBtb3N0CisgICAgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlIGZvciB0aGUgY29udGV4dCBpbiB3aGljaCB0aGV5IGFyZQorICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHVzZWQuCisgICAgICAgICAgICAgICAgICAgIE9uIHRoZSByYXJlIG9jY2FzaW9uIHRoYXQgeW91IGRvIG5lZWQgdGhlIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gdG8gYmUgZXhwYW5kZWQgaW1tZWRpYXRlbHksIHlvdSBjYW4gdXNlCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Oj08L2ZpbGVuYW1lPiBvcGVyYXRvciBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT49PC9maWxlbmFtZT4gd2hlbiB5b3UgbWFrZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudCwgYnV0IHRoaXMgaXMgbm90IGdlbmVyYWxseSBuZWVkZWQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5RdW90ZSBBbGwgQXNzaWdubWVudHM6IDxmaWxlbmFtZT4iPHJlcGxhY2VhYmxlPnZhbHVlPC9yZXBsYWNlYWJsZT4iPC9maWxlbmFtZT48L2VtcGhhc2lzPiAtCisgICAgICAgICAgICAgICAgVXNlIGRvdWJsZSBxdW90ZXMgYXJvdW5kIHRoZSB2YWx1ZSBpbiBhbGwgdmFyaWFibGUKKyAgICAgICAgICAgICAgICBhc3NpZ25tZW50cy4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFZBUjEgPSAiJHtPVEhFUlZBUn0iCisgICAgIFZBUjIgPSAiVGhlIHZlcnNpb24gaXMgJHtQVn0iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Db25kaXRpb25hbCBBc3NpZ25tZW50OiA8ZmlsZW5hbWU+Pz08L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICBDb25kaXRpb25hbCBhc3NpZ25tZW50IGlzIHVzZWQgdG8gYXNzaWduIGEgdmFsdWUgdG8KKyAgICAgICAgICAgICAgICBhIHZhcmlhYmxlLCBidXQgb25seSB3aGVuIHRoZSB2YXJpYWJsZSBpcyBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICB1bnNldC4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIHF1ZXN0aW9uIG1hcmsgZm9sbG93ZWQgYnkgdGhlIGVxdWFsIHNpZ24KKyAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPj89PC9maWxlbmFtZT4pIHRvIG1ha2UgYSAic29mdCIgYXNzaWdubWVudAorICAgICAgICAgICAgICAgIHVzZWQgZm9yIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQuCisgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCAic29mdCIgYXNzaWdubWVudHMgYXJlIHVzZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvciB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICB0aGF0IGFyZSBhbGxvd2VkIHRvIGNvbWUgdGhyb3VnaCBmcm9tIHRoZSBleHRlcm5hbAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5IZXJlIGlzIGFuIGV4YW1wbGUgd2hlcmUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VkFSMTwvZmlsZW5hbWU+IGlzIHNldCB0byAiTmV3IHZhbHVlIiBpZgorICAgICAgICAgICAgICAgIGl0IGlzIGN1cnJlbnRseSBlbXB0eS4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiA8ZmlsZW5hbWU+VkFSMTwvZmlsZW5hbWU+IGhhcyBhbHJlYWR5IGJlZW4KKyAgICAgICAgICAgICAgICBzZXQsIGl0IHJlbWFpbnMgdW5jaGFuZ2VkOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVkFSMSA/PSAiTmV3IHZhbHVlIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbiB0aGlzIG5leHQgZXhhbXBsZSwgPGZpbGVuYW1lPlZBUjE8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGlzIGxlZnQgd2l0aCB0aGUgdmFsdWUgIk9yaWdpbmFsIHZhbHVlIjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFZBUjEgPSAiT3JpZ2luYWwgdmFsdWUiCisgICAgIFZBUjEgPz0gIk5ldyB2YWx1ZSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFwcGVuZGluZzogPGZpbGVuYW1lPis9PC9maWxlbmFtZT48L2VtcGhhc2lzPiAtCisgICAgICAgICAgICAgICAgVXNlIHRoZSBwbHVzIGNoYXJhY3RlciBmb2xsb3dlZCBieSB0aGUgZXF1YWxzIHNpZ24KKyAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPis9PC9maWxlbmFtZT4pIHRvIGFwcGVuZCB2YWx1ZXMgdG8gZXhpc3RpbmcKKyAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgb3BlcmF0b3IgYWRkcyBhIHNwYWNlIGJldHdlZW4gdGhlIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgb2YgdGhlIHZhcmlhYmxlIGFuZCB0aGUgbmV3IGNvbnRlbnQuCisgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5IZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJICs9ICJmaWxlOi8vZml4LW1ha2VmaWxlLnBhdGNoIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UHJlcGVuZGluZzogPGZpbGVuYW1lPj0rPC9maWxlbmFtZT48L2VtcGhhc2lzPiAtCisgICAgICAgICAgICAgICAgVXNlIHRoZSBlcXVhbHMgc2lnbiBmb2xsb3dlZCBieSB0aGUgcGx1cyBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPj0rPC9maWxlbmFtZT4pIHRvIHByZXBlbmQgdmFsdWVzIHRvIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGlzIG9wZXJhdG9yIGFkZHMgYSBzcGFjZSBiZXR3ZWVuIHRoZSBuZXcgY29udGVudAorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIGV4aXN0aW5nIGNvbnRlbnQgb2YgdGhlIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+SGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVkFSID0rICJTdGFydHMiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BcHBlbmRpbmc6IDxmaWxlbmFtZT5fYXBwZW5kPC9maWxlbmFtZT48L2VtcGhhc2lzPiAtCisgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+IG9wZXJhdG9yIHRvCisgICAgICAgICAgICAgICAgYXBwZW5kIHZhbHVlcyB0byBleGlzdGluZyB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgVGhpcyBvcGVyYXRvciBkb2VzIG5vdCBhZGQgYW55IGFkZGl0aW9uYWwgc3BhY2UuCisgICAgICAgICAgICAgICAgQWxzbywgdGhlIG9wZXJhdG9yIGlzIGFwcGxpZWQgYWZ0ZXIgYWxsIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4rPTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PSs8L2ZpbGVuYW1lPiBvcGVyYXRvcnMgaGF2ZSBiZWVuIGFwcGxpZWQgYW5kCisgICAgICAgICAgICAgICAgYWZ0ZXIgYWxsIDxmaWxlbmFtZT49PC9maWxlbmFtZT4gYXNzaWdubWVudHMgaGF2ZQorICAgICAgICAgICAgICAgIG9jY3VycmVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgdGhlIHNwYWNlIGJlaW5nCisgICAgICAgICAgICAgICAgZXhwbGljaXRseSBhZGRlZCB0byB0aGUgc3RhcnQgdG8gZW5zdXJlIHRoZSBhcHBlbmRlZAorICAgICAgICAgICAgICAgIHZhbHVlIGlzIG5vdCBtZXJnZWQgd2l0aCB0aGUgZXhpc3RpbmcgdmFsdWU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJX2FwcGVuZCA9ICIgZmlsZTovL2ZpeC1tYWtlZmlsZS5wYXRjaCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHVzZSB0aGUgPGZpbGVuYW1lPl9hcHBlbmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIG9wZXJhdG9yIHdpdGggb3ZlcnJpZGVzLCB3aGljaCByZXN1bHRzIGluIHRoZSBhY3Rpb25zCisgICAgICAgICAgICAgICAgb25seSBiZWluZyBwZXJmb3JtZWQgZm9yIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IG9yCisgICAgICAgICAgICAgICAgbWFjaGluZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUklfYXBwZW5kX3NoNCA9ICIgZmlsZTovL2ZpeC1tYWtlZmlsZS5wYXRjaCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlByZXBlbmRpbmc6IDxmaWxlbmFtZT5fcHJlcGVuZDwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPl9wcmVwZW5kPC9maWxlbmFtZT4gb3BlcmF0b3IgdG8KKyAgICAgICAgICAgICAgICBwcmVwZW5kIHZhbHVlcyB0byBleGlzdGluZyB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgVGhpcyBvcGVyYXRvciBkb2VzIG5vdCBhZGQgYW55IGFkZGl0aW9uYWwgc3BhY2UuCisgICAgICAgICAgICAgICAgQWxzbywgdGhlIG9wZXJhdG9yIGlzIGFwcGxpZWQgYWZ0ZXIgYWxsIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4rPTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PSs8L2ZpbGVuYW1lPiBvcGVyYXRvcnMgaGF2ZSBiZWVuIGFwcGxpZWQgYW5kCisgICAgICAgICAgICAgICAgYWZ0ZXIgYWxsIDxmaWxlbmFtZT49PC9maWxlbmFtZT4gYXNzaWdubWVudHMgaGF2ZQorICAgICAgICAgICAgICAgIG9jY3VycmVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgdGhlIHNwYWNlIGJlaW5nCisgICAgICAgICAgICAgICAgZXhwbGljaXRseSBhZGRlZCB0byB0aGUgZW5kIHRvIGVuc3VyZSB0aGUgcHJlcGVuZGVkCisgICAgICAgICAgICAgICAgdmFsdWUgaXMgbm90IG1lcmdlZCB3aXRoIHRoZSBleGlzdGluZyB2YWx1ZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENGTEFHU19wcmVwZW5kID0gIi1JJHtTfS9teWluY2x1ZGVzICIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHVzZSB0aGUgPGZpbGVuYW1lPl9wcmVwZW5kPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBvcGVyYXRvciB3aXRoIG92ZXJyaWRlcywgd2hpY2ggcmVzdWx0cyBpbiB0aGUgYWN0aW9ucworICAgICAgICAgICAgICAgIG9ubHkgYmVpbmcgcGVyZm9ybWVkIGZvciB0aGUgc3BlY2lmaWVkIHRhcmdldCBvcgorICAgICAgICAgICAgICAgIG1hY2hpbmU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDRkxBR1NfcHJlcGVuZF9zaDQgPSAiLUkke1N9L215aW5jbHVkZXMgIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+T3ZlcnJpZGVzOjwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSBvdmVycmlkZXMgdG8gc2V0IGEgdmFsdWUgY29uZGl0aW9uYWxseSwKKyAgICAgICAgICAgICAgICB0eXBpY2FsbHkgYmFzZWQgb24gaG93IHRoZSByZWNpcGUgaXMgYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIHNldCB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItS0JSQU5DSCc+PGZpbGVuYW1lPktCUkFOQ0g8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSdzIHZhbHVlIHRvICJzdGFuZGFyZC9iYXNlIiBmb3IgYW55IHRhcmdldAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICBleGNlcHQgZm9yIHFlbXVhcm0gd2hlcmUgaXQgc2hvdWxkIGJlIHNldCB0bworICAgICAgICAgICAgICAgICJzdGFuZGFyZC9hcm0tdmVyc2F0aWxlLTkyNmVqcyIsIHlvdSB3b3VsZCBkbyB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBLQlJBTkNIID0gInN0YW5kYXJkL2Jhc2UiCisgICAgIEtCUkFOQ0hfcWVtdWFybSAgPSAic3RhbmRhcmQvYXJtLXZlcnNhdGlsZS05MjZlanMiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE92ZXJyaWRlcyBhcmUgYWxzbyB1c2VkIHRvIHNlcGFyYXRlIGFsdGVybmF0ZSB2YWx1ZXMKKyAgICAgICAgICAgICAgICBvZiBhIHZhcmlhYmxlIGluIG90aGVyIHNpdHVhdGlvbnMuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHdoZW4gc2V0dGluZyB2YXJpYWJsZXMgc3VjaCBhcworICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB0aGF0IGFyZSBzcGVjaWZpYyB0byBpbmRpdmlkdWFsIHBhY2thZ2VzIHByb2R1Y2VkIGJ5CisgICAgICAgICAgICAgICAgYSByZWNpcGUsIHlvdSBzaG91bGQgYWx3YXlzIHVzZSBhbiBvdmVycmlkZSB0aGF0CisgICAgICAgICAgICAgICAgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbmRlbnRhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFVzZSBzcGFjZXMgZm9yIGluZGVudGF0aW9uIHJhdGhlciB0aGFuIHRoYW4gdGFicy4KKyAgICAgICAgICAgICAgICBGb3Igc2hlbGwgZnVuY3Rpb25zLCBib3RoIGN1cnJlbnRseSB3b3JrLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGl0IGlzIGEgcG9saWN5IGRlY2lzaW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgdG8gdXNlIHRhYnMgaW4gc2hlbGwgZnVuY3Rpb25zLgorICAgICAgICAgICAgICAgIFJlYWxpemUgdGhhdCBzb21lIGxheWVycyBoYXZlIGEgcG9saWN5IHRvIHVzZSBzcGFjZXMKKyAgICAgICAgICAgICAgICBmb3IgYWxsIGluZGVudGF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Vc2luZyBQeXRob24gZm9yIENvbXBsZXggT3BlcmF0aW9uczogPGZpbGVuYW1lPiR7QDxyZXBsYWNlYWJsZT5weXRob25fY29kZTwvcmVwbGFjZWFibGU+fTwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgIEZvciBtb3JlIGFkdmFuY2VkIHByb2Nlc3NpbmcsIGl0IGlzIHBvc3NpYmxlIHRvIHVzZQorICAgICAgICAgICAgICAgIFB5dGhvbiBjb2RlIGR1cmluZyB2YXJpYWJsZSBhc3NpZ25tZW50cyAoZS5nLgorICAgICAgICAgICAgICAgIHNlYXJjaCBhbmQgcmVwbGFjZW1lbnQgb24gYSB2YXJpYWJsZSkuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPllvdSBpbmRpY2F0ZSBQeXRob24gY29kZSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtAPHJlcGxhY2VhYmxlPnB5dGhvbl9jb2RlPC9yZXBsYWNlYWJsZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBzeW50YXggZm9yIHRoZSB2YXJpYWJsZSBhc3NpZ25tZW50OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJmdHA6Ly9mdHAuaW5mby16aXAub3JnL3B1Yi9pbmZvemlwL3NyYy96aXAke0BkLmdldFZhcignUFYnLDEpLnJlcGxhY2UoJy4nLCAnJyl9LnRnegorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2hlbGwgRnVuY3Rpb24gU3ludGF4OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgV3JpdGUgc2hlbGwgZnVuY3Rpb25zIGFzIGlmIHlvdSB3ZXJlIHdyaXRpbmcgYSBzaGVsbAorICAgICAgICAgICAgICAgIHNjcmlwdCB3aGVuIHlvdSBkZXNjcmliZSBhIGxpc3Qgb2YgYWN0aW9ucyB0byB0YWtlLgorICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgZW5zdXJlIHRoYXQgeW91ciBzY3JpcHQgd29ya3Mgd2l0aCBhIGdlbmVyaWMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2g8L2ZpbGVuYW1lPiBhbmQgdGhhdCBpdCBkb2VzIG5vdCByZXF1aXJlCisgICAgICAgICAgICAgICAgYW55IDxmaWxlbmFtZT5iYXNoPC9maWxlbmFtZT4gb3Igb3RoZXIgc2hlbGwtc3BlY2lmaWMKKyAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5LgorICAgICAgICAgICAgICAgIFRoZSBzYW1lIGNvbnNpZGVyYXRpb25zIGFwcGx5IHRvIHZhcmlvdXMgc3lzdGVtCisgICAgICAgICAgICAgICAgdXRpbGl0aWVzIChlLmcuIDxmaWxlbmFtZT5zZWQ8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z3JlcDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+YXdrPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgYW5kIHNvIGZvcnRoKSB0aGF0IHlvdSBtaWdodCB3aXNoIHRvIHVzZS4KKyAgICAgICAgICAgICAgICBJZiBpbiBkb3VidCwgeW91IHNob3VsZCBjaGVjayB3aXRoIG11bHRpcGxlCisgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zIC0gaW5jbHVkaW5nIHRob3NlIGZyb20gQnVzeUJveC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZGV2ZWxvcG1lbnQtY29uY2VwdHMiPgorICAgIDx0aXRsZT5EZXZlbG9wbWVudCBDb25jZXB0czwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBzZWN0aW9uIHRha2VzIGEgbW9yZSBkZXRhaWxlZCBsb29rIGluc2lkZSB0aGUgZGV2ZWxvcG1lbnQKKyAgICAgICAgcHJvY2Vzcy4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBkaWFncmFtIHJlcHJlc2VudHMgZGV2ZWxvcG1lbnQgYXQgYSBoaWdoIGxldmVsLgorICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgY2hhcHRlciBleHBhbmRzIG9uIHRoZSBmdW5kYW1lbnRhbCBpbnB1dCwgb3V0cHV0LAorICAgICAgICBwcm9jZXNzLCBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0nbWV0YWRhdGEnPk1ldGFkYXRhPC9saW5rPikgYmxvY2tzCisgICAgICAgIHRoYXQgbWFrZSB1cCBkZXZlbG9wbWVudCBpbiB0aGUgWW9jdG8gUHJvamVjdCBlbnZpcm9ubWVudC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYSBpZD0nZ2VuZXJhbC15b2N0by1lbnZpcm9ubWVudC1maWd1cmUnPgorICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMveW9jdG8tZW52aXJvbm1lbnQtcmVmLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjhpbiIgZGVwdGg9IjQuMjVpbiIgLz4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSW4gZ2VuZXJhbCwgZGV2ZWxvcG1lbnQgY29uc2lzdHMgb2Ygc2V2ZXJhbCBmdW5jdGlvbmFsIGFyZWFzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Vc2VyIENvbmZpZ3VyYXRpb246PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBNZXRhZGF0YSB5b3UgY2FuIHVzZSB0byBjb250cm9sIHRoZSBidWlsZCBwcm9jZXNzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NZXRhZGF0YSBMYXllcnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBWYXJpb3VzIGxheWVycyB0aGF0IHByb3ZpZGUgc29mdHdhcmUsIG1hY2hpbmUsIGFuZAorICAgICAgICAgICAgICAgIGRpc3RybyBNZXRhZGF0YS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U291cmNlIEZpbGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVXBzdHJlYW0gcmVsZWFzZXMsIGxvY2FsIHByb2plY3RzLCBhbmQgU0NNcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgU3lzdGVtOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgUHJvY2Vzc2VzIHVuZGVyIHRoZSBjb250cm9sIG9mCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYml0YmFrZS10ZXJtJz5CaXRCYWtlPC9saW5rPi4KKyAgICAgICAgICAgICAgICBUaGlzIGJsb2NrIGV4cGFuZHMgb24gaG93IEJpdEJha2UgZmV0Y2hlcyBzb3VyY2UsIGFwcGxpZXMKKyAgICAgICAgICAgICAgICBwYXRjaGVzLCBjb21wbGV0ZXMgY29tcGlsYXRpb24sIGFuYWx5emVzIG91dHB1dCBmb3IgcGFja2FnZQorICAgICAgICAgICAgICAgIGdlbmVyYXRpb24sIGNyZWF0ZXMgYW5kIHRlc3RzIHBhY2thZ2VzLCBnZW5lcmF0ZXMgaW1hZ2VzLCBhbmQKKyAgICAgICAgICAgICAgICBnZW5lcmF0ZXMgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBhY2thZ2UgRmVlZHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBEaXJlY3RvcmllcyBjb250YWluaW5nIG91dHB1dCBwYWNrYWdlcyAoUlBNLCBERUIgb3IgSVBLKSwKKyAgICAgICAgICAgICAgICB3aGljaCBhcmUgc3Vic2VxdWVudGx5IHVzZWQgaW4gdGhlIGNvbnN0cnVjdGlvbiBvZiBhbiBpbWFnZSBvcgorICAgICAgICAgICAgICAgIFNESywgcHJvZHVjZWQgYnkgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICBUaGVzZSBmZWVkcyBjYW4gYWxzbyBiZSBjb3BpZWQgYW5kIHNoYXJlZCB1c2luZyBhIHdlYiBzZXJ2ZXIgb3IKKyAgICAgICAgICAgICAgICBvdGhlciBtZWFucyB0byBmYWNpbGl0YXRlIGV4dGVuZGluZyBvciB1cGRhdGluZyBleGlzdGluZworICAgICAgICAgICAgICAgIGltYWdlcyBvbiBkZXZpY2VzIGF0IHJ1bnRpbWUgaWYgcnVudGltZSBwYWNrYWdlIG1hbmFnZW1lbnQgaXMKKyAgICAgICAgICAgICAgICBlbmFibGVkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbWFnZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBJbWFnZXMgcHJvZHVjZWQgYnkgdGhlIGRldmVsb3BtZW50IHByb2Nlc3MuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFwcGxpY2F0aW9uIERldmVsb3BtZW50IFNESzo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENyb3NzLWRldmVsb3BtZW50IHRvb2xzIHRoYXQgYXJlIHByb2R1Y2VkIGFsb25nIHdpdGggYW4gaW1hZ2UKKyAgICAgICAgICAgICAgICBvciBzZXBhcmF0ZWx5IHdpdGggQml0QmFrZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9InVzZXItY29uZmlndXJhdGlvbiI+CisgICAgICAgIDx0aXRsZT5Vc2VyIENvbmZpZ3VyYXRpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVXNlciBjb25maWd1cmF0aW9uIGhlbHBzIGRlZmluZSB0aGUgYnVpbGQuCisgICAgICAgICAgICBUaHJvdWdoIHVzZXIgY29uZmlndXJhdGlvbiwgeW91IGNhbiB0ZWxsIEJpdEJha2UgdGhlCisgICAgICAgICAgICB0YXJnZXQgYXJjaGl0ZWN0dXJlIGZvciB3aGljaCB5b3UgYXJlIGJ1aWxkaW5nIHRoZSBpbWFnZSwKKyAgICAgICAgICAgIHdoZXJlIHRvIHN0b3JlIGRvd25sb2FkZWQgc291cmNlLCBhbmQgb3RoZXIgYnVpbGQgcHJvcGVydGllcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBmaWd1cmUgc2hvd3MgYW4gZXhwYW5kZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlCisgICAgICAgICAgICAiVXNlciBDb25maWd1cmF0aW9uIiBib3ggb2YgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdnZW5lcmFsLXlvY3RvLWVudmlyb25tZW50LWZpZ3VyZSc+Z2VuZXJhbCBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50IGZpZ3VyZTwvbGluaz46CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy91c2VyLWNvbmZpZ3VyYXRpb24ucG5nIiBhbGlnbj0iY2VudGVyIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIG5lZWRzIHNvbWUgYmFzaWMgY29uZmlndXJhdGlvbiBmaWxlcyBpbiBvcmRlciB0byBjb21wbGV0ZQorICAgICAgICAgICAgYSBidWlsZC4KKyAgICAgICAgICAgIFRoZXNlIGZpbGVzIGFyZSA8ZmlsZW5hbWU+Ki5jb25mPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICBUaGUgbWluaW1hbGx5IG5lY2Vzc2FyeSBvbmVzIHJlc2lkZSBhcyBleGFtcGxlIGZpbGVzIGluIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICBGb3Igc2ltcGxpY2l0eSwgdGhpcyBzZWN0aW9uIHJlZmVycyB0byB0aGUgU291cmNlIERpcmVjdG9yeSBhcworICAgICAgICAgICAgdGhlICJQb2t5IERpcmVjdG9yeS4iCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4geW91IGNsb25lIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IEdpdCByZXBvc2l0b3J5IG9yIHlvdQorICAgICAgICAgICAgZG93bmxvYWQgYW5kIHVucGFjayBhIFlvY3RvIFByb2plY3QgcmVsZWFzZSwgeW91IGNhbiBzZXQgdXAgdGhlCisgICAgICAgICAgICBTb3VyY2UgRGlyZWN0b3J5IHRvIGJlIG5hbWVkIGFueXRoaW5nIHlvdSB3YW50LgorICAgICAgICAgICAgRm9yIHRoaXMgZGlzY3Vzc2lvbiwgdGhlIGNsb25lZCByZXBvc2l0b3J5IHVzZXMgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgIG5hbWUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBQb2t5IHJlcG9zaXRvcnkgaXMgcHJpbWFyaWx5IGFuIGFnZ3JlZ2F0aW9uIG9mIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgICAgIEl0IGlzIG5vdCBhIGNhbm9uaWNhbCB1cHN0cmVhbSBzb3VyY2UuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bWV0YS1wb2t5PC9maWxlbmFtZT4gbGF5ZXIgaW5zaWRlIFBva3kgY29udGFpbnMKKyAgICAgICAgICAgIGEgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgdGhhdCBoYXMgZXhhbXBsZQorICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgIFRoZXNlIGV4YW1wbGUgZmlsZXMgYXJlIHVzZWQgYXMgYSBiYXNpcyBmb3IgY3JlYXRpbmcgYWN0dWFsCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIHdoZW4geW91IHNvdXJjZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQKKyAgICAgICAgICAgIHNjcmlwdAorICAgICAgICAgICAgKGkuZS4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU291cmNpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNjcmlwdCBjcmVhdGVzIGEKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgaWYgb25lIGRvZXMgbm90IGFscmVhZHkgZXhpc3QuCisgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlIEJ1aWxkIERpcmVjdG9yeSBmb3IgYWxsIGl0cyB3b3JrIGR1cmluZyBidWlsZHMuCisgICAgICAgICAgICBUaGUgQnVpbGQgRGlyZWN0b3J5IGhhcyBhIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5IHRoYXQKKyAgICAgICAgICAgIGNvbnRhaW5zIGRlZmF1bHQgdmVyc2lvbnMgb2YgeW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICAgICAgVGhlc2UgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSBjcmVhdGVkIG9ubHkgaWYgdmVyc2lvbnMKKyAgICAgICAgICAgIGRvIG5vdCBhbHJlYWR5IGV4aXN0IGluIHRoZSBCdWlsZCBEaXJlY3RvcnkgYXQgdGhlIHRpbWUgeW91CisgICAgICAgICAgICBzb3VyY2UgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmVjYXVzZSB0aGUgUG9reSByZXBvc2l0b3J5IGlzIGZ1bmRhbWVudGFsbHkgYW4gYWdncmVnYXRpb24gb2YKKyAgICAgICAgICAgIGV4aXN0aW5nIHJlcG9zaXRvcmllcywgc29tZSB1c2VycyBtaWdodCBiZSBmYW1pbGlhciB3aXRoIHJ1bm5pbmcKKyAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPiBzY3JpcHQgaW4gdGhlIGNvbnRleHQKKyAgICAgICAgICAgIG9mIHNlcGFyYXRlIE9wZW5FbWJlZGRlZC1Db3JlIGFuZCBCaXRCYWtlIHJlcG9zaXRvcmllcyByYXRoZXIgdGhhbiBhCisgICAgICAgICAgICBzaW5nbGUgUG9reSByZXBvc2l0b3J5LgorICAgICAgICAgICAgVGhpcyBkaXNjdXNzaW9uIGFzc3VtZXMgdGhlIHNjcmlwdCBpcyBleGVjdXRlZCBmcm9tIHdpdGhpbiBhIGNsb25lZAorICAgICAgICAgICAgb3IgdW5wYWNrZWQgdmVyc2lvbiBvZiBQb2t5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEZXBlbmRpbmcgb24gd2hlcmUgdGhlIHNjcmlwdCBpcyBzb3VyY2VkLCBkaWZmZXJlbnQgc3ViLXNjcmlwdHMKKyAgICAgICAgICAgIGFyZSBjYWxsZWQgdG8gc2V0IHVwIHRoZSBCdWlsZCBEaXJlY3RvcnkgKFlvY3RvIG9yIE9wZW5FbWJlZGRlZCkuCisgICAgICAgICAgICBTcGVjaWZpY2FsbHksIHRoZSBzY3JpcHQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzL29lLXNldHVwLWJ1aWxkZGlyPC9maWxlbmFtZT4gaW5zaWRlIHRoZQorICAgICAgICAgICAgcG9reSBkaXJlY3Rvcnkgc2V0cyB1cCB0aGUgQnVpbGQgRGlyZWN0b3J5IGFuZCBzZWVkcyB0aGUgZGlyZWN0b3J5CisgICAgICAgICAgICAoaWYgbmVjZXNzYXJ5KSB3aXRoIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXBwcm9wcmlhdGUgZm9yIHRoZQorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+c2NyaXB0cy9vZS1zZXR1cC1idWlsZGRpcjwvZmlsZW5hbWU+IHNjcmlwdAorICAgICAgICAgICAgICAgIHVzZXMgdGhlIDxmaWxlbmFtZT4kVEVNUExBVEVDT05GPC9maWxlbmFtZT4gdmFyaWFibGUgdG8KKyAgICAgICAgICAgICAgICBkZXRlcm1pbmUgd2hpY2ggc2FtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gbG9jYXRlLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHByb3ZpZGVzIG1hbnkKKyAgICAgICAgICAgIGJhc2ljIHZhcmlhYmxlcyB0aGF0IGRlZmluZSBhIGJ1aWxkIGVudmlyb25tZW50LgorICAgICAgICAgICAgSGVyZSBpcyBhIGxpc3Qgb2YgYSBmZXcuCisgICAgICAgICAgICBUbyBzZWUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbnMgaW4gYSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICBmaWxlIGNyZWF0ZWQgYnkgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNjcmlwdCwgc2VlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmYuc2FtcGxlPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1wb2t5PC9maWxlbmFtZT4gbGF5ZXI6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UGFyYWxsZWxpc20gT3B0aW9uczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfTlVNQkVSX1RIUkVBRFMnPjxmaWxlbmFtZT5CQl9OVU1CRVJfVEhSRUFEUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBUkFMTEVMX01BS0UnPjxmaWxlbmFtZT5QQVJBTExFTF9NQUtFPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyN2YXItQkJfTlVNQkVSX1BBUlNFX1RIUkVBRFMnPjxmaWxlbmFtZT5CQl9OVU1CRVJfUEFSU0VfVEhSRUFEUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VGFyZ2V0IE1hY2hpbmUgU2VsZWN0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRvd25sb2FkIERpcmVjdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2hhcmVkIFN0YXRlIERpcmVjdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1NUQVRFX0RJUic+PGZpbGVuYW1lPlNTVEFURV9ESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCBPdXRwdXQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbnMgc2V0IGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlIGNhbiBhbHNvIGJlIHNldCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9zaXRlLmNvbmY8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9hdXRvLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHRlbGxzIEJpdEJha2Ugd2hhdAorICAgICAgICAgICAgbGF5ZXJzIHlvdSB3YW50IGNvbnNpZGVyZWQgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBsYXllcnMgbGlzdGVkIGluIHRoaXMgZmlsZSBpbmNsdWRlIGxheWVycworICAgICAgICAgICAgbWluaW1hbGx5IG5lZWRlZCBieSB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgSG93ZXZlciwgeW91IG11c3QgbWFudWFsbHkgYWRkIGFueSBjdXN0b20gbGF5ZXJzIHlvdSBoYXZlIGNyZWF0ZWQuCisgICAgICAgICAgICBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiB3b3JraW5nIHdpdGggdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZW5hYmxpbmcteW91ci1sYXllcic+RW5hYmxpbmcgWW91ciBMYXllcjwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmaWxlcyA8ZmlsZW5hbWU+c2l0ZS5jb25mPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+YXV0by5jb25mPC9maWxlbmFtZT4gYXJlIG5vdCBjcmVhdGVkIGJ5IHRoZSBlbnZpcm9ubWVudAorICAgICAgICAgICAgaW5pdGlhbGl6YXRpb24gc2NyaXB0LgorICAgICAgICAgICAgSWYgeW91IHdhbnQgdGhlIDxmaWxlbmFtZT5zaXRlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB5b3UgbmVlZCB0bworICAgICAgICAgICAgY3JlYXRlIHRoYXQgeW91cnNlbGYuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmF1dG8uY29uZjwvZmlsZW5hbWU+IGZpbGUgaXMgdHlwaWNhbGx5IGNyZWF0ZWQgYnkKKyAgICAgICAgICAgIGFuIGF1dG9idWlsZGVyOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5zaXRlLmNvbmY8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPmNvbmYvc2l0ZS5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIHRvIGNvbmZpZ3VyZSBtdWx0aXBsZSBidWlsZCBkaXJlY3Rvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhZCBzZXZlcmFsIGJ1aWxkIGVudmlyb25tZW50cyBhbmQKKyAgICAgICAgICAgICAgICAgICAgdGhleSBzaGFyZWQgc29tZSBjb21tb24gZmVhdHVyZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IHRoZXNlIGRlZmF1bHQgYnVpbGQgcHJvcGVydGllcyBoZXJlLgorICAgICAgICAgICAgICAgICAgICBBIGdvb2QgZXhhbXBsZSBpcyBwZXJoYXBzIHRoZSBwYWNrYWdpbmcgZm9ybWF0IHRvIHVzZQorICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9DTEFTU0VTJz48ZmlsZW5hbWU+UEFDS0FHRV9DTEFTU0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+T25lIHVzZWZ1bCBzY2VuYXJpbyBmb3IgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL3NpdGUuY29uZjwvZmlsZW5hbWU+IGZpbGUgaXMgdG8gZXh0ZW5kIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBpbmNsdWRlIHRoZSBwYXRoIHRvIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvc2l0ZS5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoZW4sIHdoZW4gQml0QmFrZSBsb29rcyBmb3IgTWV0YWRhdGEgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+LCBpdCBmaW5kcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvc2l0ZS5jb25mPC9maWxlbmFtZT4gZmlsZSBhbmQgYXBwbGllcyB5b3VyCisgICAgICAgICAgICAgICAgICAgIGNvbW1vbiBjb25maWd1cmF0aW9ucyBmb3VuZCBpbiB0aGUgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgVG8gb3ZlcnJpZGUgY29uZmlndXJhdGlvbnMgaW4gYSBwYXJ0aWN1bGFyIGJ1aWxkIGRpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgYWx0ZXIgdGhlIHNpbWlsYXIgY29uZmlndXJhdGlvbnMgd2l0aGluIHRoYXQgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5J3MgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmF1dG8uY29uZjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmaWxlIGlzIHVzdWFsbHkgY3JlYXRlZCBhbmQgd3JpdHRlbiB0byBieQorICAgICAgICAgICAgICAgICAgICBhbiBhdXRvYnVpbGRlci4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNldHRpbmdzIHB1dCBpbnRvIHRoZSBmaWxlIGFyZSB0eXBpY2FsbHkgdGhlIHNhbWUgYXMKKyAgICAgICAgICAgICAgICAgICAgeW91IHdvdWxkIGZpbmQgaW4gdGhlIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBvciB0aGUgPGZpbGVuYW1lPmNvbmYvc2l0ZS5jb25mPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gZWRpdCBhbGwgY29uZmlndXJhdGlvbiBmaWxlcyB0byBmdXJ0aGVyIGRlZmluZQorICAgICAgICAgICAgYW55IHBhcnRpY3VsYXIgYnVpbGQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBUaGlzIHByb2Nlc3MgaXMgcmVwcmVzZW50ZWQgYnkgdGhlICJVc2VyIENvbmZpZ3VyYXRpb24gRWRpdHMiCisgICAgICAgICAgICBib3ggaW4gdGhlIGZpZ3VyZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgbGF1bmNoIHlvdXIgYnVpbGQgd2l0aCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CisgICAgICAgICAgICBjb21tYW5kLCBCaXRCYWtlIHNvcnRzIG91dCB0aGUgY29uZmlndXJhdGlvbnMgdG8gdWx0aW1hdGVseQorICAgICAgICAgICAgZGVmaW5lIHlvdXIgYnVpbGQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICByZWFkcyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBpbiBhIHNwZWNpZmljIG9yZGVyOgorICAgICAgICAgICAgPGZpbGVuYW1lPnNpdGUuY29uZjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+YXV0by5jb25mPC9maWxlbmFtZT4sCisgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEFuZCwgdGhlIGJ1aWxkIHN5c3RlbSBhcHBsaWVzIHRoZSBub3JtYWwgYXNzaWdubWVudCBzdGF0ZW1lbnQKKyAgICAgICAgICAgIHJ1bGVzLgorICAgICAgICAgICAgQmVjYXVzZSB0aGUgZmlsZXMgYXJlIHBhcnNlZCBpbiBhIHNwZWNpZmljIG9yZGVyLCB2YXJpYWJsZQorICAgICAgICAgICAgYXNzaWdubWVudHMgZm9yIHRoZSBzYW1lIHZhcmlhYmxlIGNvdWxkIGJlIGFmZmVjdGVkLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSA8ZmlsZW5hbWU+YXV0by5jb25mPC9maWxlbmFtZT4gZmlsZSBhbmQKKyAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IHNldAorICAgICAgICAgICAgPHJlcGxhY2VhYmxlPnZhcmlhYmxlMTwvcmVwbGFjZWFibGU+IHRvIGRpZmZlcmVudCB2YWx1ZXMsIGJlY2F1c2UKKyAgICAgICAgICAgIHRoZSBidWlsZCBzeXN0ZW0gcGFyc2VzIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gYWZ0ZXIKKyAgICAgICAgICAgIDxmaWxlbmFtZT5hdXRvLmNvbmY8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxyZXBsYWNlYWJsZT52YXJpYWJsZTE8L3JlcGxhY2VhYmxlPiBpcyBhc3NpZ25lZCB0aGUgdmFsdWUgZnJvbQorICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJtZXRhZGF0YS1tYWNoaW5lLWNvbmZpZ3VyYXRpb24tYW5kLXBvbGljeS1jb25maWd1cmF0aW9uIj4KKyAgICAgICAgPHRpdGxlPk1ldGFkYXRhLCBNYWNoaW5lIENvbmZpZ3VyYXRpb24sIGFuZCBQb2xpY3kgQ29uZmlndXJhdGlvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgcHJldmlvdXMgc2VjdGlvbiBkZXNjcmliZWQgdGhlIHVzZXIgY29uZmlndXJhdGlvbnMgdGhhdAorICAgICAgICAgICAgZGVmaW5lIEJpdEJha2UncyBnbG9iYWwgYmVoYXZpb3IuCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gdGFrZXMgYSBjbG9zZXIgbG9vayBhdCB0aGUgbGF5ZXJzIHRoZSBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgIHVzZXMgdG8gZnVydGhlciBjb250cm9sIHRoZSBidWlsZC4KKyAgICAgICAgICAgIFRoZXNlIGxheWVycyBwcm92aWRlIE1ldGFkYXRhIGZvciB0aGUgc29mdHdhcmUsIG1hY2hpbmUsIGFuZAorICAgICAgICAgICAgcG9saWN5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiBnZW5lcmFsLCB0aHJlZSB0eXBlcyBvZiBsYXllciBpbnB1dCBleGlzdDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Qb2xpY3kgQ29uZmlndXJhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBEaXN0cmlidXRpb24gTGF5ZXJzIHByb3ZpZGUgdG9wLWxldmVsIG9yIGdlbmVyYWwKKyAgICAgICAgICAgICAgICAgICAgcG9saWNpZXMgZm9yIHRoZSBpbWFnZSBvciBTREsgYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGlzIGxheWVyIHdvdWxkIGRpY3RhdGUgd2hldGhlciBCaXRCYWtlCisgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VzIFJQTSBvciBJUEsgcGFja2FnZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NYWNoaW5lIENvbmZpZ3VyYXRpb246PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIGxheWVycyBwcm92aWRlIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdHlwZSBvZiBpbmZvcm1hdGlvbiBpcyBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGFyY2hpdGVjdHVyZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1ldGFkYXRhOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIGxheWVycyBjb250YWluIHVzZXItc3VwcGxpZWQgcmVjaXBlIGZpbGVzLAorICAgICAgICAgICAgICAgICAgICBwYXRjaGVzLCBhbmQgYXBwZW5kIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBzaG93cyBhbiBleHBhbmRlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUKKyAgICAgICAgICAgIE1ldGFkYXRhLCBNYWNoaW5lIENvbmZpZ3VyYXRpb24sIGFuZCBQb2xpY3kgQ29uZmlndXJhdGlvbiBpbnB1dAorICAgICAgICAgICAgKGxheWVycykgYm94ZXMgb2YgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdnZW5lcmFsLXlvY3RvLWVudmlyb25tZW50LWZpZ3VyZSc+Z2VuZXJhbCBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50IGZpZ3VyZTwvbGluaz46CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9sYXllci1pbnB1dC5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI4aW4iIGRlcHRoPSI3LjVpbiIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW4gZ2VuZXJhbCwgYWxsIGxheWVycyBoYXZlIGEgc2ltaWxhciBzdHJ1Y3R1cmUuCisgICAgICAgICAgICBUaGV5IGFsbCBjb250YWluIGEgbGljZW5zaW5nIGZpbGUKKyAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5DT1BZSU5HPC9maWxlbmFtZT4pIGlmIHRoZSBsYXllciBpcyB0byBiZQorICAgICAgICAgICAgZGlzdHJpYnV0ZWQsIGEgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+IGZpbGUgYXMgZ29vZCBwcmFjdGljZQorICAgICAgICAgICAgYW5kIGVzcGVjaWFsbHkgaWYgdGhlIGxheWVyIGlzIHRvIGJlIGRpc3RyaWJ1dGVkLCBhCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGRpcmVjdG9yeSwgYW5kIHJlY2lwZSBkaXJlY3Rvcmllcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgaGFzIG1hbnkgbGF5ZXJzIHRoYXQgY2FuIGJlIHVzZWQuCisgICAgICAgICAgICBZb3UgY2FuIHNlZSBhIHdlYi1pbnRlcmZhY2UgbGlzdGluZyBvZiB0aGVtIG9uIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyI+U291cmNlIFJlcG9zaXRvcmllczwvdWxpbms+CisgICAgICAgICAgICBwYWdlLgorICAgICAgICAgICAgVGhlIGxheWVycyBhcmUgc2hvd24gYXQgdGhlIGJvdHRvbSBjYXRlZ29yaXplZCB1bmRlcgorICAgICAgICAgICAgIllvY3RvIE1ldGFkYXRhIExheWVycy4iCisgICAgICAgICAgICBUaGVzZSBsYXllcnMgYXJlIGZ1bmRhbWVudGFsbHkgYSBzdWJzZXQgb2YgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcvbGF5ZXJpbmRleC9sYXllcnMvIj5PcGVuRW1iZWRkZWQgTWV0YWRhdGEgSW5kZXg8L3VsaW5rPiwKKyAgICAgICAgICAgIHdoaWNoIGxpc3RzIGFsbCBsYXllcnMgcHJvdmlkZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBjb21tdW5pdHkuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBMYXllcnMgZXhpc3QgaW4gdGhlIFlvY3RvIFByb2plY3QgU291cmNlIFJlcG9zaXRvcmllcyB0aGF0CisgICAgICAgICAgICAgICAgY2Fubm90IGJlIGZvdW5kIGluIHRoZSBPcGVuRW1iZWRkZWQgTWV0YWRhdGEgSW5kZXguCisgICAgICAgICAgICAgICAgVGhlc2UgbGF5ZXJzIGFyZSBlaXRoZXIgZGVwcmVjYXRlZCBvciBleHBlcmltZW50YWwgaW4gbmF0dXJlLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlIDxmaWxlbmFtZT5jb25mL2JibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLAorICAgICAgICAgICAgd2hpY2ggaXMgcGFydCBvZiB0aGUgdXNlciBjb25maWd1cmF0aW9uLCB0byBmaW5kIHdoYXQgbGF5ZXJzIGl0CisgICAgICAgICAgICBzaG91bGQgYmUgdXNpbmcgYXMgcGFydCBvZiB0aGUgYnVpbGQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGxheWVycywgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycyc+VW5kZXJzdGFuZGluZyBhbmQgQ3JlYXRpbmcgTGF5ZXJzPC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJkaXN0cm8tbGF5ZXIiPgorICAgICAgICAgICAgPHRpdGxlPkRpc3RybyBMYXllcjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBkaXN0cmlidXRpb24gbGF5ZXIgcHJvdmlkZXMgcG9saWN5IGNvbmZpZ3VyYXRpb25zIGZvciB5b3VyCisgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgICAgIEJlc3QgcHJhY3RpY2VzIGRpY3RhdGUgdGhhdCB5b3UgaXNvbGF0ZSB0aGVzZSB0eXBlcyBvZgorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zIGludG8gdGhlaXIgb3duIGxheWVyLgorICAgICAgICAgICAgICAgIFNldHRpbmdzIHlvdSBwcm92aWRlIGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvZGlzdHJvLzxyZXBsYWNlYWJsZT5kaXN0cm88L3JlcGxhY2VhYmxlPi5jb25mPC9maWxlbmFtZT4gb3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBzaW1pbGFyCisgICAgICAgICAgICAgICAgc2V0dGluZ3MgdGhhdCBCaXRCYWtlIGZpbmRzIGluIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUgQnVpbGQKKyAgICAgICAgICAgICAgICBEaXJlY3RvcnkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBwcm92aWRlcyBzb21lIGV4cGxhbmF0aW9uIGFuZCByZWZlcmVuY2VzCisgICAgICAgICAgICAgICAgZm9yIHdoYXQgeW91IHR5cGljYWxseSBmaW5kIGluIHRoZSBkaXN0cmlidXRpb24gbGF5ZXI6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5jbGFzc2VzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBDbGFzcyBmaWxlcyAoPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4pIGhvbGQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vbiBmdW5jdGlvbmFsaXR5IHRoYXQgY2FuIGJlIHNoYXJlZCBhbW9uZworICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlcyBpbiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3VyIHJlY2lwZXMgaW5oZXJpdCBhIGNsYXNzLCB0aGV5IHRha2Ugb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncyBhbmQgZnVuY3Rpb25zIGZvciB0aGF0IGNsYXNzLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgY2xhc3MgZmlsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMnPkNsYXNzZXM8L2xpbms+IiBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Y29uZjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBhcmVhIGhvbGRzIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIgKDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPiksCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmNvbmYvZGlzdHJvLzxyZXBsYWNlYWJsZT5kaXN0cm88L3JlcGxhY2VhYmxlPi5jb25mPC9maWxlbmFtZT4pLAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGFueSBkaXN0cmlidXRpb24td2lkZSBpbmNsdWRlIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cmVjaXBlcy0qOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBSZWNpcGVzIGFuZCBhcHBlbmQgZmlsZXMgdGhhdCBhZmZlY3QgY29tbW9uCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IGFjcm9zcyB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBhcmVhIGNvdWxkIGluY2x1ZGUgcmVjaXBlcyBhbmQgYXBwZW5kIGZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgICB0byBhZGQgZGlzdHJpYnV0aW9uLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXphdGlvbiBzY3JpcHRzLCBjdXN0b20gaW1hZ2UgcmVjaXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJic3AtbGF5ZXIiPgorICAgICAgICAgICAgPHRpdGxlPkJTUCBMYXllcjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBCU1AgTGF5ZXIgcHJvdmlkZXMgbWFjaGluZSBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgICAgICBFdmVyeXRoaW5nIGluIHRoaXMgbGF5ZXIgaXMgc3BlY2lmaWMgdG8gdGhlIG1hY2hpbmUgZm9yIHdoaWNoCisgICAgICAgICAgICAgICAgeW91IGFyZSBidWlsZGluZyB0aGUgaW1hZ2Ugb3IgdGhlIFNESy4KKyAgICAgICAgICAgICAgICBBIGNvbW1vbiBzdHJ1Y3R1cmUgb3IgZm9ybSBpcyBkZWZpbmVkIGZvciBCU1AgbGF5ZXJzLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCB0aGlzIHN0cnVjdHVyZSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyc+WW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgZm9yIGEgQlNQIGxheWVyIHRvIGJlIGNvbnNpZGVyZWQgY29tcGxpYW50IHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QsIGl0IG11c3QgbWVldCBzb21lIHN0cnVjdHVyYWwgcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIEJTUCBMYXllcidzIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5IGNvbnRhaW5zCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgdGhlIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmNvbmYvbWFjaGluZS88cmVwbGFjZWFibGU+bWFjaGluZTwvcmVwbGFjZWFibGU+LmNvbmY8L2ZpbGVuYW1lPikgYW5kLAorICAgICAgICAgICAgICAgIG9mIGNvdXJzZSwgdGhlIGxheWVyICg8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoZSBsYXllciBpcyBkZWRpY2F0ZWQgdG8gc3BlY2lmaWMgcmVjaXBlcworICAgICAgICAgICAgICAgIGJ5IGZ1bmN0aW9uOiA8ZmlsZW5hbWU+cmVjaXBlcy1ic3A8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy1jb3JlPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXMtZ3JhcGhpY3M8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXMta2VybmVsPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgTWV0YWRhdGEgY2FuIGV4aXN0IGZvciBtdWx0aXBsZSBmb3JtZmFjdG9ycywgZ3JhcGhpY3MKKyAgICAgICAgICAgICAgICBzdXBwb3J0IHN5c3RlbXMsIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgV2hpbGUgdGhlIGZpZ3VyZSBzaG93cyBzZXZlcmFsIDxmaWxlbmFtZT5yZWNpcGVzLSo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcmllcywgbm90IGFsbCB0aGVzZSBkaXJlY3RvcmllcyBhcHBlYXIgaW4gYWxsCisgICAgICAgICAgICAgICAgICAgIEJTUCBsYXllcnMuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9InNvZnR3YXJlLWxheWVyIj4KKyAgICAgICAgICAgIDx0aXRsZT5Tb2Z0d2FyZSBMYXllcjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBzb2Z0d2FyZSBsYXllciBwcm92aWRlcyB0aGUgTWV0YWRhdGEgZm9yIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICBzb2Z0d2FyZSBwYWNrYWdlcyB1c2VkIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgVGhpcyBsYXllciBkb2VzIG5vdCBpbmNsdWRlIE1ldGFkYXRhIHRoYXQgaXMgc3BlY2lmaWMgdG8gdGhlCisgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uIG9yIHRoZSBtYWNoaW5lLCB3aGljaCBhcmUgZm91bmQgaW4gdGhlaXIKKyAgICAgICAgICAgICAgICByZXNwZWN0aXZlIGxheWVycy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBsYXllciBjb250YWlucyBhbnkgbmV3IHJlY2lwZXMgdGhhdCB5b3VyIHByb2plY3QgbmVlZHMKKyAgICAgICAgICAgICAgICBpbiB0aGUgZm9ybSBvZiByZWNpcGUgZmlsZXMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ic291cmNlcy1kZXYtZW52aXJvbm1lbnQiPgorICAgICAgICA8dGl0bGU+U291cmNlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiBvcmRlciBmb3IgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gY3JlYXRlIGFuIGltYWdlIG9yCisgICAgICAgICAgICBhbnkgdGFyZ2V0LCBpdCBtdXN0IGJlIGFibGUgdG8gYWNjZXNzIHNvdXJjZSBmaWxlcy4KKyAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZ2VuZXJhbC15b2N0by1lbnZpcm9ubWVudC1maWd1cmUnPmdlbmVyYWwgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCBmaWd1cmU8L2xpbms+CisgICAgICAgICAgICByZXByZXNlbnRzIHNvdXJjZSBmaWxlcyB1c2luZyB0aGUgIlVwc3RyZWFtIFByb2plY3QgUmVsZWFzZXMiLAorICAgICAgICAgICAgIkxvY2FsIFByb2plY3RzIiwgYW5kICJTQ01zIChvcHRpb25hbCkiIGJveGVzLgorICAgICAgICAgICAgVGhlIGZpZ3VyZSByZXByZXNlbnRzIG1pcnJvcnMsIHdoaWNoIGFsc28gcGxheSBhIHJvbGUgaW4gbG9jYXRpbmcKKyAgICAgICAgICAgIHNvdXJjZSBmaWxlcywgd2l0aCB0aGUgIlNvdXJjZSBNaXJyb3IocykiIGJveC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIG1ldGhvZCBieSB3aGljaCBzb3VyY2UgZmlsZXMgYXJlIHVsdGltYXRlbHkgb3JnYW5pemVkIGlzCisgICAgICAgICAgICBhIGZ1bmN0aW9uIG9mIHRoZSBwcm9qZWN0LgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGZvciByZWxlYXNlZCBzb2Z0d2FyZSwgcHJvamVjdHMgdGVuZCB0byB1c2UgdGFyYmFsbHMKKyAgICAgICAgICAgIG9yIG90aGVyIGFyY2hpdmVkIGZpbGVzIHRoYXQgY2FuIGNhcHR1cmUgdGhlIHN0YXRlIG9mIGEgcmVsZWFzZQorICAgICAgICAgICAgZ3VhcmFudGVlaW5nIHRoYXQgaXQgaXMgc3RhdGljYWxseSByZXByZXNlbnRlZC4KKyAgICAgICAgICAgIE9uIHRoZSBvdGhlciBoYW5kLCBmb3IgYSBwcm9qZWN0IHRoYXQgaXMgbW9yZSBkeW5hbWljIG9yCisgICAgICAgICAgICBleHBlcmltZW50YWwgaW4gbmF0dXJlLCBhIHByb2plY3QgbWlnaHQga2VlcCBzb3VyY2UgZmlsZXMgaW4gYQorICAgICAgICAgICAgcmVwb3NpdG9yeSBjb250cm9sbGVkIGJ5IGEgU291cmNlIENvbnRyb2wgTWFuYWdlciAoU0NNKSBzdWNoIGFzCisgICAgICAgICAgICBHaXQuCisgICAgICAgICAgICBQdWxsaW5nIHNvdXJjZSBmcm9tIGEgcmVwb3NpdG9yeSBhbGxvd3MgeW91IHRvIGNvbnRyb2wKKyAgICAgICAgICAgIHRoZSBwb2ludCBpbiB0aGUgcmVwb3NpdG9yeSAodGhlIHJldmlzaW9uKSBmcm9tIHdoaWNoIHlvdSB3YW50IHRvCisgICAgICAgICAgICBidWlsZCBzb2Z0d2FyZS4KKyAgICAgICAgICAgIEZpbmFsbHksIGEgY29tYmluYXRpb24gb2YgdGhlIHR3byBtaWdodCBleGlzdCwgd2hpY2ggd291bGQgZ2l2ZSB0aGUKKyAgICAgICAgICAgIGNvbnN1bWVyIGEgY2hvaWNlIHdoZW4gZGVjaWRpbmcgd2hlcmUgdG8gZ2V0IHNvdXJjZSBmaWxlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSB1c2VzIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSB0byBwb2ludCB0byBzb3VyY2UgZmlsZXMgcmVnYXJkbGVzcyBvZiB0aGVpciBsb2NhdGlvbi4KKyAgICAgICAgICAgIEVhY2ggcmVjaXBlIG11c3QgaGF2ZSBhIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgIHRoYXQgcG9pbnRzIHRvIHRoZSBzb3VyY2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFub3RoZXIgYXJlYSB0aGF0IHBsYXlzIGEgc2lnbmlmaWNhbnQgcm9sZSBpbiB3aGVyZSBzb3VyY2UgZmlsZXMKKyAgICAgICAgICAgIGNvbWUgZnJvbSBpcyBwb2ludGVkIHRvIGJ5IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURMX0RJUic+PGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICBUaGlzIGFyZWEgaXMgYSBjYWNoZSB0aGF0IGNhbiBob2xkIHByZXZpb3VzbHkgZG93bmxvYWRlZCBzb3VyY2UuCisgICAgICAgICAgICBZb3UgY2FuIGFsc28gaW5zdHJ1Y3QgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gY3JlYXRlCisgICAgICAgICAgICB0YXJiYWxscyBmcm9tIEdpdCByZXBvc2l0b3JpZXMsIHdoaWNoIGlzIG5vdCB0aGUgZGVmYXVsdCBiZWhhdmlvciwKKyAgICAgICAgICAgIGFuZCBzdG9yZSB0aGVtIGluIHRoZSA8ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT4gYnkgdXNpbmcgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTJz48ZmlsZW5hbWU+QkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSnVkaWNpb3VzIHVzZSBvZiBhIDxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgY2FuCisgICAgICAgICAgICBzYXZlIHRoZSBidWlsZCBzeXN0ZW0gYSB0cmlwIGFjcm9zcyB0aGUgSW50ZXJuZXQgd2hlbiBsb29raW5nCisgICAgICAgICAgICBmb3IgZmlsZXMuCisgICAgICAgICAgICBBIGdvb2QgbWV0aG9kIGZvciB1c2luZyBhIGRvd25sb2FkIGRpcmVjdG9yeSBpcyB0byBoYXZlCisgICAgICAgICAgICA8ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT4gcG9pbnQgdG8gYW4gYXJlYSBvdXRzaWRlIG9mIHlvdXIKKyAgICAgICAgICAgIEJ1aWxkIERpcmVjdG9yeS4KKyAgICAgICAgICAgIERvaW5nIHNvIGFsbG93cyB5b3UgdG8gc2FmZWx5IGRlbGV0ZSB0aGUgQnVpbGQgRGlyZWN0b3J5CisgICAgICAgICAgICBpZiBuZWVkZWQgd2l0aG91dCBmZWFyIG9mIHJlbW92aW5nIGFueSBkb3dubG9hZGVkIHNvdXJjZSBmaWxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbiBwcm92aWRlcyBhIGRlZXBlciBsb29rIGludG8gdGhlCisgICAgICAgICAgICBzb3VyY2UgZmlsZXMgYW5kIHRoZSBtaXJyb3JzLgorICAgICAgICAgICAgSGVyZSBpcyBhIG1vcmUgZGV0YWlsZWQgbG9vayBhdCB0aGUgc291cmNlIGZpbGUgYXJlYSBvZiB0aGUKKyAgICAgICAgICAgIGJhc2UgZmlndXJlOgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3NvdXJjZS1pbnB1dC5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI3aW4iIGRlcHRoPSI3LjVpbiIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1cHN0cmVhbS1wcm9qZWN0LXJlbGVhc2VzJz4KKyAgICAgICAgICAgIDx0aXRsZT5VcHN0cmVhbSBQcm9qZWN0IFJlbGVhc2VzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXBzdHJlYW0gcHJvamVjdCByZWxlYXNlcyBleGlzdCBhbnl3aGVyZSBpbiB0aGUgZm9ybSBvZiBhbgorICAgICAgICAgICAgICAgIGFyY2hpdmVkIGZpbGUgKGUuZy4gdGFyYmFsbCBvciB6aXAgZmlsZSkuCisgICAgICAgICAgICAgICAgVGhlc2UgZmlsZXMgY29ycmVzcG9uZCB0byBpbmRpdmlkdWFsIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmaWd1cmUgdXNlcyBzcGVjaWZpYyByZWxlYXNlcyBlYWNoIGZvcgorICAgICAgICAgICAgICAgIEJ1c3lCb3gsIFF0LCBhbmQgRGJ1cy4KKyAgICAgICAgICAgICAgICBBbiBhcmNoaXZlIGZpbGUgY2FuIGJlIGZvciBhbnkgcmVsZWFzZWQgcHJvZHVjdCB0aGF0IGNhbiBiZQorICAgICAgICAgICAgICAgIGJ1aWx0IHVzaW5nIGEgcmVjaXBlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2xvY2FsLXByb2plY3RzJz4KKyAgICAgICAgICAgIDx0aXRsZT5Mb2NhbCBQcm9qZWN0czwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIExvY2FsIHByb2plY3RzIGFyZSBjdXN0b20gYml0cyBvZiBzb2Z0d2FyZSB0aGUgdXNlciBwcm92aWRlcy4KKyAgICAgICAgICAgICAgICBUaGVzZSBiaXRzIHJlc2lkZSBzb21ld2hlcmUgbG9jYWwgdG8gYSBwcm9qZWN0IC0gcGVyaGFwcworICAgICAgICAgICAgICAgIGEgZGlyZWN0b3J5IGludG8gd2hpY2ggdGhlIHVzZXIgY2hlY2tzIGluIGl0ZW1zIChlLmcuCisgICAgICAgICAgICAgICAgYSBsb2NhbCBkaXJlY3RvcnkgY29udGFpbmluZyBhIGRldmVsb3BtZW50IHNvdXJjZSB0cmVlCisgICAgICAgICAgICAgICAgdXNlZCBieSB0aGUgZ3JvdXApLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgY2Fub25pY2FsIG1ldGhvZCB0aHJvdWdoIHdoaWNoIHRvIGluY2x1ZGUgYSBsb2NhbCBwcm9qZWN0CisgICAgICAgICAgICAgICAgaXMgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWV4dGVybmFsc3JjJz48ZmlsZW5hbWU+ZXh0ZXJuYWxzcmM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBjbGFzcyB0byBpbmNsdWRlIHRoYXQgbG9jYWwgcHJvamVjdC4KKyAgICAgICAgICAgICAgICBZb3UgdXNlIGVpdGhlciB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBvciBhCisgICAgICAgICAgICAgICAgcmVjaXBlJ3MgYXBwZW5kIGZpbGUgdG8gb3ZlcnJpZGUgb3Igc2V0IHRoZQorICAgICAgICAgICAgICAgIHJlY2lwZSB0byBwb2ludCB0byB0aGUgbG9jYWwgZGlyZWN0b3J5IG9uIHlvdXIgZGlzayB0byBwdWxsCisgICAgICAgICAgICAgICAgaW4gdGhlIHdob2xlIHNvdXJjZSB0cmVlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZXh0ZXJuYWxzcmM8L2ZpbGVuYW1lPiBjbGFzcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1leHRlcm5hbHNyYyc+PGZpbGVuYW1lPmV4dGVybmFsc3JjLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzY21zJz4KKyAgICAgICAgICAgIDx0aXRsZT5Tb3VyY2UgQ29udHJvbCBNYW5hZ2VycyAoT3B0aW9uYWwpPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW5vdGhlciBwbGFjZSB0aGUgYnVpbGQgc3lzdGVtIGNhbiBnZXQgc291cmNlIGZpbGVzIGZyb20gaXMKKyAgICAgICAgICAgICAgICB0aHJvdWdoIGFuIFNDTSBzdWNoIGFzIEdpdCBvciBTdWJ2ZXJzaW9uLgorICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgYSByZXBvc2l0b3J5IGlzIGNsb25lZCBvciBjaGVja2VkIG91dC4KKyAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtZmV0Y2gnPjxmaWxlbmFtZT5kb19mZXRjaDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHRhc2sgaW5zaWRlIEJpdEJha2UgdXNlcworICAgICAgICAgICAgICAgIHRoZSA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgdGhlIGFyZ3VtZW50J3MgcHJlZml4IHRvIGRldGVybWluZSB0aGUgY29ycmVjdAorICAgICAgICAgICAgICAgIGZldGNoZXIgbW9kdWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGhhdmUgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICBnZW5lcmF0ZSB0YXJiYWxscyBmb3IgR2l0IHJlcG9zaXRvcmllcyBhbmQgcGxhY2UgdGhlbSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyc+PGZpbGVuYW1lPkJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgPC9ub3RlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIGZldGNoaW5nIGEgcmVwb3NpdG9yeSwgQml0QmFrZSB1c2VzIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNSRVYnPjxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBkZXRlcm1pbmUgdGhlIHNwZWNpZmljIHJldmlzaW9uIGZyb20gd2hpY2ggdG8KKyAgICAgICAgICAgICAgICBidWlsZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzb3VyY2UtbWlycm9ycyc+CisgICAgICAgICAgICA8dGl0bGU+U291cmNlIE1pcnJvcihzKTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFR3byBraW5kcyBvZiBtaXJyb3JzIGV4aXN0OiBwcmUtbWlycm9ycyBhbmQgcmVndWxhciBtaXJyb3JzLgorICAgICAgICAgICAgICAgIFRoZSA8bGluayBsaW5rZW5kPSd2YXItUFJFTUlSUk9SUyc+PGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUlSUk9SUyc+PGZpbGVuYW1lPk1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZXMgcG9pbnQgdG8gdGhlc2UsIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIGNoZWNrcyBwcmUtbWlycm9ycyBiZWZvcmUgbG9va2luZyB1cHN0cmVhbSBmb3IgYW55CisgICAgICAgICAgICAgICAgc291cmNlIGZpbGVzLgorICAgICAgICAgICAgICAgIFByZS1taXJyb3JzIGFyZSBhcHByb3ByaWF0ZSB3aGVuIHlvdSBoYXZlIGEgc2hhcmVkIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIHRoYXQgaXMgbm90IGEgZGlyZWN0b3J5IGRlZmluZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURMX0RJUic+PGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIEEgUHJlLW1pcnJvciB0eXBpY2FsbHkgcG9pbnRzIHRvIGEgc2hhcmVkIGRpcmVjdG9yeSB0aGF0IGlzCisgICAgICAgICAgICAgICAgbG9jYWwgdG8geW91ciBvcmdhbml6YXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFJlZ3VsYXIgbWlycm9ycyBjYW4gYmUgYW55IHNpdGUgYWNyb3NzIHRoZSBJbnRlcm5ldCB0aGF0IGlzCisgICAgICAgICAgICAgICAgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSBsb2NhdGlvbiBmb3Igc291cmNlIGNvZGUgc2hvdWxkIHRoZQorICAgICAgICAgICAgICAgIHByaW1hcnkgc2l0ZSBub3QgYmUgZnVuY3Rpb25pbmcgZm9yIHNvbWUgcmVhc29uIG9yIGFub3RoZXIuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGFja2FnZS1mZWVkcy1kZXYtZW52aXJvbm1lbnQiPgorICAgICAgICA8dGl0bGU+UGFja2FnZSBGZWVkczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGdlbmVyYXRlcyBhbiBpbWFnZSBvciBhbiBTREssCisgICAgICAgICAgICBpdCBnZXRzIHRoZSBwYWNrYWdlcyBmcm9tIGEgcGFja2FnZSBmZWVkIGFyZWEgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZ2VuZXJhbC15b2N0by1lbnZpcm9ubWVudC1maWd1cmUnPmdlbmVyYWwgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCBmaWd1cmU8L2xpbms+CisgICAgICAgICAgICBzaG93cyB0aGlzIHBhY2thZ2UgZmVlZHMgYXJlYSBpbiB0aGUgdXBwZXItcmlnaHQgY29ybmVyLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gbG9va3MgYSBsaXR0bGUgY2xvc2VyIGludG8gdGhlIHBhY2thZ2UgZmVlZHMgYXJlYSB1c2VkCisgICAgICAgICAgICBieSB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgSGVyZSBpcyBhIG1vcmUgZGV0YWlsZWQgbG9vayBhdCB0aGUgYXJlYToKKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wYWNrYWdlLWZlZWRzLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjdpbiIgZGVwdGg9IjZpbiIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUGFja2FnZSBmZWVkcyBhcmUgYW4gaW50ZXJtZWRpYXJ5IHN0ZXAgaW4gdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwcm92aWRlcyBjbGFzc2VzIHRvIGdlbmVyYXRlCisgICAgICAgICAgICBkaWZmZXJlbnQgcGFja2FnZSB0eXBlcywgYW5kIHlvdSBzcGVjaWZ5IHdoaWNoIGNsYXNzZXMgdG8gZW5hYmxlCisgICAgICAgICAgICB0aHJvdWdoIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICBCZWZvcmUgcGxhY2luZyB0aGUgcGFja2FnZXMgaW50byBwYWNrYWdlIGZlZWRzLAorICAgICAgICAgICAgdGhlIGJ1aWxkIHByb2Nlc3MgdmFsaWRhdGVzIHRoZW0gd2l0aCBnZW5lcmF0ZWQgb3V0cHV0IHF1YWxpdHkKKyAgICAgICAgICAgIGFzc3VyYW5jZSBjaGVja3MgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWluc2FuZSc+PGZpbGVuYW1lPmluc2FuZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3MuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBwYWNrYWdlIGZlZWQgYXJlYSByZXNpZGVzIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuCisgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IHRoZSBidWlsZCBzeXN0ZW0gdXNlcyB0byB0ZW1wb3JhcmlseSBzdG9yZSBwYWNrYWdlcworICAgICAgICAgICAgaXMgZGV0ZXJtaW5lZCBieSBhIGNvbWJpbmF0aW9uIG9mIHZhcmlhYmxlcyBhbmQgdGhlIHBhcnRpY3VsYXIKKyAgICAgICAgICAgIHBhY2thZ2UgbWFuYWdlciBpbiB1c2UuCisgICAgICAgICAgICBTZWUgdGhlICJQYWNrYWdlIEZlZWRzIiBib3ggaW4gdGhlIGlsbHVzdHJhdGlvbiBhbmQgbm90ZSB0aGUKKyAgICAgICAgICAgIGluZm9ybWF0aW9uIHRvIHRoZSByaWdodCBvZiB0aGF0IGFyZWEuCisgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB0aGUgZm9sbG93aW5nIGRlZmluZXMgd2hlcmUgcGFja2FnZSBmaWxlcyBhcmUKKyAgICAgICAgICAgIGtlcHQ6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUic+PGZpbGVuYW1lPkRFUExPWV9ESVI8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgIERlZmluZWQgYXMgPGZpbGVuYW1lPnRtcC9kZXBsb3k8L2ZpbGVuYW1lPiBpbiB0aGUgQnVpbGQKKyAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkRFUExPWV9ESVJfKjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIHBhY2thZ2UgbWFuYWdlciB1c2VkLCB0aGUgcGFja2FnZSB0eXBlCisgICAgICAgICAgICAgICAgICAgIHN1Yi1mb2xkZXIuCisgICAgICAgICAgICAgICAgICAgIEdpdmVuIFJQTSwgSVBLLCBvciBERUIgcGFja2FnaW5nIGFuZCB0YXJiYWxsIGNyZWF0aW9uLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfUlBNJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9SUE08L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX0lQSyc+PGZpbGVuYW1lPkRFUExPWV9ESVJfSVBLPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9ERUInPjxmaWxlbmFtZT5ERVBMT1lfRElSX0RFQjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfVEFSJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9UQVI8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBhcmUgdXNlZCwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQVJDSCc+PGZpbGVuYW1lPlBBQ0tBR0VfQVJDSDwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3ViLWZvbGRlcnMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBwYWNrYWdlcyBjb3VsZCBleGlzdCBmb3IgdGhlIGk1ODYgb3IgcWVtdXg4NgorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlIDxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlXyo8L2ZpbGVuYW1lPiB0YXNrcyB0bworICAgICAgICAgICAgZ2VuZXJhdGUgcGFja2FnZXMgYW5kIHBsYWNlIHRoZW0gaW50byB0aGUgcGFja2FnZSBob2xkaW5nIGFyZWEgKGUuZy4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlX2lwazwvZmlsZW5hbWU+IGZvciBJUEsgcGFja2FnZXMpLgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlX3dyaXRlX2RlYic+PGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfZGViPC9maWxlbmFtZT48L2xpbms+IiwKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZV93cml0ZV9pcGsnPjxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlX2lwazwvZmlsZW5hbWU+PC9saW5rPiIsCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfcnBtJz48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV9ycG08L2ZpbGVuYW1lPjwvbGluaz4iLAorICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfdGFyJz48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV90YXI8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9ucyBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVyIGEgc2NlbmFyaW8gd2hlcmUgYW4gSVBLIHBhY2thZ2luZyBtYW5hZ2VyCisgICAgICAgICAgICBpcyBiZWluZyB1c2VkIGFuZCBwYWNrYWdlIGFyY2hpdGVjdHVyZSBzdXBwb3J0IGZvciBib3RoIGk1ODYKKyAgICAgICAgICAgIGFuZCBxZW11eDg2IGV4aXN0LgorICAgICAgICAgICAgUGFja2FnZXMgZm9yIHRoZSBpNTg2IGFyY2hpdGVjdHVyZSBhcmUgcGxhY2VkIGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQvdG1wL2RlcGxveS9pcGsvaTU4NjwvZmlsZW5hbWU+LCB3aGlsZSBwYWNrYWdlcyBmb3IKKyAgICAgICAgICAgIHRoZSBxZW11eDg2IGFyY2hpdGVjdHVyZSBhcmUgcGxhY2VkIGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQvdG1wL2RlcGxveS9pcGsvcWVtdXg4NjwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2JpdGJha2UtZGV2LWVudmlyb25tZW50Jz4KKyAgICAgICAgPHRpdGxlPkJpdEJha2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYml0YmFrZS10ZXJtJz5CaXRCYWtlPC9saW5rPgorICAgICAgICAgICAgdG8gcHJvZHVjZSBpbWFnZXMuCisgICAgICAgICAgICBZb3UgY2FuIHNlZSBmcm9tIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZ2VuZXJhbC15b2N0by1lbnZpcm9ubWVudC1maWd1cmUnPmdlbmVyYWwgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCBmaWd1cmU8L2xpbms+LAorICAgICAgICAgICAgdGhlIEJpdEJha2UgYXJlYSBjb25zaXN0cyBvZiBzZXZlcmFsIGZ1bmN0aW9uYWwgYXJlYXMuCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gdGFrZXMgYSBjbG9zZXIgbG9vayBhdCBlYWNoIG9mIHRob3NlIGFyZWFzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTZXBhcmF0ZSBkb2N1bWVudGF0aW9uIGV4aXN0cyBmb3IgdGhlIEJpdEJha2UgdG9vbC4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjYml0YmFrZS11c2VyLW1hbnVhbCc+Qml0QmFrZSBVc2VyIE1hbnVhbDwvdWxpbms+CisgICAgICAgICAgICBmb3IgcmVmZXJlbmNlIG1hdGVyaWFsIG9uIEJpdEJha2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc291cmNlLWZldGNoaW5nLWRldi1lbnZpcm9ubWVudCc+CisgICAgICAgICAgICA8dGl0bGU+U291cmNlIEZldGNoaW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZpcnN0IHN0YWdlcyBvZiBidWlsZGluZyBhIHJlY2lwZSBhcmUgdG8gZmV0Y2ggYW5kIHVucGFjaworICAgICAgICAgICAgICAgIHRoZSBzb3VyY2UgY29kZToKKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvc291cmNlLWZldGNoaW5nLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjYuNWluIiBkZXB0aD0iNWluIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtZmV0Y2gnPjxmaWxlbmFtZT5kb19mZXRjaDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy11bnBhY2snPjxmaWxlbmFtZT5kb191bnBhY2s8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB0YXNrcyBmZXRjaCB0aGUgc291cmNlIGZpbGVzIGFuZCB1bnBhY2sgdGhlbSBpbnRvIHRoZSB3b3JrCisgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBGb3IgZXZlcnkgbG9jYWwgZmlsZSAoZS5nLiA8ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICB0aGF0IGlzIHBhcnQgb2YgYSByZWNpcGUncworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0YWtlcyBhIGNoZWNrc3VtCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBmaWxlIGZvciB0aGUgcmVjaXBlIGFuZCBpbnNlcnRzIHRoZSBjaGVja3N1bSBpbnRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBzaWduYXR1cmUgZm9yIHRoZSA8ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgSWYgYW55IGxvY2FsIGZpbGUgaGFzIGJlZW4gbW9kaWZpZWQsIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPiB0YXNrIGFuZCBhbGwgdGFza3MgdGhhdAorICAgICAgICAgICAgICAgICAgICBkZXBlbmQgb24gaXQgYXJlIHJlLWV4ZWN1dGVkLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCBldmVyeXRoaW5nIGlzIGFjY29tcGxpc2hlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4sCisgICAgICAgICAgICAgICAgd2hpY2ggaGFzIGEgZGVmaW5lZCBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgRm9yIGFkZGl0aW9uYWwgZ2VuZXJhbCBpbmZvcm1hdGlvbiBvbiB0aGUgQnVpbGQgRGlyZWN0b3J5LAorICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtYnVpbGQnPjxmaWxlbmFtZT5idWlsZC88L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVW5wYWNrZWQgc291cmNlIGZpbGVzIGFyZSBwb2ludGVkIHRvIGJ5IHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBFYWNoIHJlY2lwZSBoYXMgYW4gYXJlYSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5IHdoZXJlIHRoZQorICAgICAgICAgICAgICAgIHVucGFja2VkIHNvdXJjZSBjb2RlIHJlc2lkZXMuCisgICAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhhdCBkaXJlY3RvcnkgZm9yIGFueSBnaXZlbiByZWNpcGUgaXMgZGVmaW5lZCBmcm9tCisgICAgICAgICAgICAgICAgc2V2ZXJhbCBkaWZmZXJlbnQgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VlIHRoZSB2YXJpYWJsZXMgdGhhdCBkZWZpbmUgdGhlc2UgZGlyZWN0b3JpZXMKKyAgICAgICAgICAgICAgICBieSBsb29raW5nIGF0IHRoZSBmaWd1cmU6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJhc2UgZGlyZWN0b3J5IHdoZXJlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtcyBhbGwgaXRzIHdvcmsgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQVJDSCc+PGZpbGVuYW1lPlBBQ0tBR0VfQVJDSDwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBidWlsdCBwYWNrYWdlIG9yIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX09TJz48ZmlsZW5hbWU+VEFSR0VUX09TPC9maWxlbmFtZT48L2xpbms+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBvcGVyYXRpbmcgc3lzdGVtIG9mIHRoZSB0YXJnZXQgZGV2aWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgYnVpbHQgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHZlcnNpb24gb2YgdGhlIHJlY2lwZSB1c2VkIHRvIGJ1aWxkIHRoZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmV2aXNpb24gb2YgdGhlIHJlY2lwZSB1c2VkIHRvIGJ1aWxkIHRoZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvbGluaz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGxvY2F0aW9uIHdpdGhpbiA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4gd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgc3BlY2lmaWMgcGFja2FnZSBpcyBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbnRhaW5zIHRoZSB1bnBhY2tlZCBzb3VyY2UgZmlsZXMgZm9yIGEgZ2l2ZW4gcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncGF0Y2hpbmctZGV2LWVudmlyb25tZW50Jz4KKyAgICAgICAgICAgIDx0aXRsZT5QYXRjaGluZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uY2Ugc291cmNlIGNvZGUgaXMgZmV0Y2hlZCBhbmQgdW5wYWNrZWQsIEJpdEJha2UgbG9jYXRlcworICAgICAgICAgICAgICAgIHBhdGNoIGZpbGVzIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlIHNvdXJjZSBmaWxlczoKKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvcGF0Y2hpbmcucG5nIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNmluIiBkZXB0aD0iNWluIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGF0Y2gnPjxmaWxlbmFtZT5kb19wYXRjaDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHRhc2sgcHJvY2Vzc2VzIHJlY2lwZXMgYnkKKyAgICAgICAgICAgICAgICB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBsb2NhdGUgYXBwbGljYWJsZSBwYXRjaCBmaWxlcywgd2hpY2ggYnkgZGVmYXVsdAorICAgICAgICAgICAgICAgIGFyZSA8ZmlsZW5hbWU+Ki5wYXRjaDwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiouZGlmZjwvZmlsZW5hbWU+IGZpbGVzLCBvciBhbnkgZmlsZSBpZgorICAgICAgICAgICAgICAgICJhcHBseT15ZXMiIGlzIHNwZWNpZmllZCBmb3IgdGhlIGZpbGUgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIGZpbmRzIGFuZCBhcHBsaWVzIG11bHRpcGxlIHBhdGNoZXMgZm9yIGEgc2luZ2xlIHJlY2lwZQorICAgICAgICAgICAgICAgIGluIHRoZSBvcmRlciBpbiB3aGljaCBpdCBmaW5kcyB0aGUgcGF0Y2hlcy4KKyAgICAgICAgICAgICAgICBQYXRjaGVzIGFyZSBhcHBsaWVkIHRvIHRoZSByZWNpcGUncyBzb3VyY2UgZmlsZXMgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUyc+PGZpbGVuYW1lPlM8L2ZpbGVuYW1lPjwvbGluaz4gZGlyZWN0b3J5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdGhlIHNvdXJjZSBkaXJlY3RvcmllcyBhcmUKKyAgICAgICAgICAgICAgICBjcmVhdGVkLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1mZXRjaGluZy1kZXYtZW52aXJvbm1lbnQnPlNvdXJjZSBGZXRjaGluZzwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjb25maWd1cmF0aW9uLWFuZC1jb21waWxhdGlvbi1kZXYtZW52aXJvbm1lbnQnPgorICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyYXRpb24gYW5kIENvbXBpbGF0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQWZ0ZXIgc291cmNlIGNvZGUgaXMgcGF0Y2hlZCwgQml0QmFrZSBleGVjdXRlcyB0YXNrcyB0aGF0CisgICAgICAgICAgICAgICAgY29uZmlndXJlIGFuZCBjb21waWxlIHRoZSBzb3VyY2UgY29kZToKKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvY29uZmlndXJhdGlvbi1jb21waWxlLWF1dG9yZWNvbmYucG5nIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iN2luIiBkZXB0aD0iNWluIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHN0ZXAgaW4gdGhlIGJ1aWxkIHByb2Nlc3MgY29uc2lzdHMgb2YgdGhyZWUgdGFza3M6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wcmVwYXJlX3JlY2lwZV9zeXNyb290Jz48ZmlsZW5hbWU+ZG9fcHJlcGFyZV9yZWNpcGVfc3lzcm9vdDwvZmlsZW5hbWU+PC9saW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB0YXNrIHNldHMgdXAgdGhlIHR3byBzeXNyb290cyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+cmVjaXBlLXN5c3Jvb3Q8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZWNpcGUtc3lzcm9vdC1uYXRpdmU8L2ZpbGVuYW1lPikgc28gdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHN5c3Jvb3RzIGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBvcHVsYXRlX3N5c3Jvb3QnPjxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB0YXNrcyBvZiB0aGUgcmVjaXBlcyBvbiB3aGljaCB0aGUgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nIHRoZSB0YXNrcyBkZXBlbmRzLgorICAgICAgICAgICAgICAgICAgICAgICAgQSBzeXNyb290IGV4aXN0cyBmb3IgYm90aCB0aGUgdGFyZ2V0IGFuZCBmb3IgdGhlIG5hdGl2ZQorICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJpZXMsIHdoaWNoIHJ1biBvbiB0aGUgaG9zdCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdGFzayBjb25maWd1cmVzIHRoZSBzb3VyY2UgYnkgZW5hYmxpbmcgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxpbmcgYW55IGJ1aWxkLXRpbWUgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb25zIGNhbiBjb21lIGZyb20gdGhlIHJlY2lwZSBpdHNlbGYgYXMgd2VsbAorICAgICAgICAgICAgICAgICAgICAgICAgYXMgZnJvbSBhbiBpbmhlcml0ZWQgY2xhc3MuCisgICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHRoZSBzb2Z0d2FyZSBpdHNlbGYgbWlnaHQgY29uZmlndXJlIGl0c2VsZgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgZm9yIHdoaWNoIGl0IGlzIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgY29uZmlndXJhdGlvbnMgaGFuZGxlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sgYXJlIHNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICB0byBzb3VyY2UgY29kZSBjb25maWd1cmF0aW9uIGZvciB0aGUgc291cmNlIGNvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlaW5nIGJ1aWx0IGJ5IHRoZSByZWNpcGUuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3UgYXJlIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYXV0b3Rvb2xzJz48ZmlsZW5hbWU+YXV0b3Rvb2xzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gYWRkIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGJ5IHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FQ09ORic+PGZpbGVuYW1lPkVYVFJBX09FQ09ORjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFQ09ORklHX0NPTkZBUkdTJz48ZmlsZW5hbWU+UEFDS0FHRUNPTkZJR19DT05GQVJHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0aGlzIHZhcmlhYmxlIHdvcmtzIHdpdGhpbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBjbGFzcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY2xhc3Nlcy9hdXRvdG9vbHMuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIGEgY29uZmlndXJhdGlvbiB0YXNrIGhhcyBiZWVuIHNhdGlzZmllZCwgQml0QmFrZQorICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXMgdGhlIHNvdXJjZSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb21waWxlJz48ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbXBpbGF0aW9uIG9jY3VycyBpbiB0aGUgZGlyZWN0b3J5IHBvaW50ZWQgdG8gYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQic+PGZpbGVuYW1lPkI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgUmVhbGl6ZSB0aGF0IHRoZSA8ZmlsZW5hbWU+QjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpcywgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQsIHRoZSBzYW1lIGFzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgT25jZSBjb21waWxhdGlvbiBpcyBkb25lLCBCaXRCYWtlIGV4ZWN1dGVzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB0YXNrIGNvcGllcyBmaWxlcyBmcm9tIHRoZSA8ZmlsZW5hbWU+QjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgYW5kIHBsYWNlcyB0aGVtIGluIGEgaG9sZGluZyBhcmVhIHBvaW50ZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUQnPjxmaWxlbmFtZT5EPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwYWNrYWdlLXNwbGl0dGluZy1kZXYtZW52aXJvbm1lbnQnPgorICAgICAgICAgICAgPHRpdGxlPlBhY2thZ2UgU3BsaXR0aW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQWZ0ZXIgc291cmNlIGNvZGUgaXMgY29uZmlndXJlZCBhbmQgY29tcGlsZWQsIHRoZQorICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYW5hbHl6ZXMKKyAgICAgICAgICAgICAgICB0aGUgcmVzdWx0cyBhbmQgc3BsaXRzIHRoZSBvdXRwdXQgaW50byBwYWNrYWdlczoKKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvYW5hbHlzaXMtZm9yLXBhY2thZ2Utc3BsaXR0aW5nLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjdpbiIgZGVwdGg9IjdpbiIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2UnPjxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2VkYXRhJz48ZmlsZW5hbWU+ZG9fcGFja2FnZWRhdGE8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB0YXNrcyBjb21iaW5lIHRvIGFuYWx5emUKKyAgICAgICAgICAgICAgICB0aGUgZmlsZXMgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUQnPjxmaWxlbmFtZT5EPC9maWxlbmFtZT48L2xpbms+IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIGFuZCBzcGxpdCB0aGVtIGludG8gc3Vic2V0cyBiYXNlZCBvbiBhdmFpbGFibGUgcGFja2FnZXMgYW5kCisgICAgICAgICAgICAgICAgZmlsZXMuCisgICAgICAgICAgICAgICAgVGhlIGFuYWx5emluZyBwcm9jZXNzIGludm9sdmVzIHRoZSBmb2xsb3dpbmcgYXMgd2VsbCBhcyBvdGhlcgorICAgICAgICAgICAgICAgIGl0ZW1zOiBzcGxpdHRpbmcgb3V0IGRlYnVnZ2luZyBzeW1ib2xzLAorICAgICAgICAgICAgICAgIGxvb2tpbmcgYXQgc2hhcmVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGJldHdlZW4gcGFja2FnZXMsCisgICAgICAgICAgICAgICAgYW5kIGxvb2tpbmcgYXQgcGFja2FnZSByZWxhdGlvbnNoaXBzLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fcGFja2FnZWRhdGE8L2ZpbGVuYW1lPiB0YXNrIGNyZWF0ZXMgcGFja2FnZQorICAgICAgICAgICAgICAgIG1ldGFkYXRhIGJhc2VkIG9uIHRoZSBhbmFseXNpcyBzdWNoIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjYW4gZ2VuZXJhdGUgdGhlIGZpbmFsIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIFdvcmtpbmcsIHN0YWdlZCwgYW5kIGludGVybWVkaWF0ZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcworICAgICAgICAgICAgICAgIGFuZCBwYWNrYWdlIHNwbGl0dGluZyBwcm9jZXNzIHVzZSB0aGVzZSBhcmVhczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVBLR0QnPjxmaWxlbmFtZT5QS0dEPC9maWxlbmFtZT48L2xpbms+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZm9yIHBhY2thZ2VzIGJlZm9yZSB0aGV5IGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dEQVRBX0RJUic+PGZpbGVuYW1lPlBLR0RBVEFfRElSPC9maWxlbmFtZT48L2xpbms+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIEEgc2hhcmVkLCBnbG9iYWwtc3RhdGUgZGlyZWN0b3J5IHRoYXQgaG9sZHMgZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkIGR1cmluZyB0aGUgcGFja2FnaW5nIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dERVNUV09SSyc+PGZpbGVuYW1lPlBLR0RFU1RXT1JLPC9maWxlbmFtZT48L2xpbms+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIEEgdGVtcG9yYXJ5IHdvcmsgYXJlYSB1c2VkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPiB0YXNrLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUEtHREVTVCc+PGZpbGVuYW1lPlBLR0RFU1Q8L2ZpbGVuYW1lPjwvbGluaz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHBhcmVudCBkaXJlY3RvcnkgZm9yIHBhY2thZ2VzIGFmdGVyIHRoZXkgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVlbiBzcGxpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIFRoZSA8bGluayBsaW5rZW5kPSd2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGRlZmluZXMgdGhlIGZpbGVzIHRoYXQgZ28gaW50byBlYWNoIHBhY2thZ2UgaW4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVMnPjxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCBkZXRhaWxzIG9uIGhvdyB0aGlzIGlzIGFjY29tcGxpc2hlZCwgeW91IGNhbgorICAgICAgICAgICAgICAgIGxvb2sgYXQgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcGFja2FnZSc+PGZpbGVuYW1lPnBhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIHBhY2thZ2VzIGJlaW5nIGNyZWF0ZWQgKFJQTSwgREVCLCBvcgorICAgICAgICAgICAgICAgIElQSyksIHRoZSA8ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV8qPC9maWxlbmFtZT4gdGFzaworICAgICAgICAgICAgICAgIGNyZWF0ZXMgdGhlIGFjdHVhbCBwYWNrYWdlcyBhbmQgcGxhY2VzIHRoZW0gaW4gdGhlCisgICAgICAgICAgICAgICAgUGFja2FnZSBGZWVkIGFyZWEsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7VE1QRElSfS9kZXBsb3k8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncGFja2FnZS1mZWVkcy1kZXYtZW52aXJvbm1lbnQnPlBhY2thZ2UgRmVlZHM8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgZGV0YWlsIG9uIHRoYXQgcGFydCBvZiB0aGUgYnVpbGQgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgY3JlYXRpbmcgZmVlZHMgZGlyZWN0bHkgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlcGxveS8qPC9maWxlbmFtZT4gZGlyZWN0b3JpZXMgZG9lcyBub3QgZXhpc3QuCisgICAgICAgICAgICAgICAgICAgIENyZWF0aW5nIHN1Y2ggZmVlZHMgdXN1YWxseSByZXF1aXJlcyBzb21lIGtpbmQgb2YgZmVlZAorICAgICAgICAgICAgICAgICAgICBtYWludGVuYW5jZSBtZWNoYW5pc20gdGhhdCB3b3VsZCB1cGxvYWQgdGhlIG5ldyBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICBpbnRvIGFuIG9mZmljaWFsIHBhY2thZ2UgZmVlZCAoZS5nLiB0aGUKKyAgICAgICAgICAgICAgICAgICAgw4VuZ3N0csO2bSBkaXN0cmlidXRpb24pLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgaGlnaGx5IGRpc3RyaWJ1dGlvbi1zcGVjaWZpYworICAgICAgICAgICAgICAgICAgICBhbmQgdGh1cyBpcyBub3QgcHJvdmlkZWQgb3V0IG9mIHRoZSBib3guCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2ltYWdlLWdlbmVyYXRpb24tZGV2LWVudmlyb25tZW50Jz4KKyAgICAgICAgICAgIDx0aXRsZT5JbWFnZSBHZW5lcmF0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSBwYWNrYWdlcyBhcmUgc3BsaXQgYW5kIHN0b3JlZCBpbiB0aGUgUGFja2FnZSBGZWVkcyBhcmVhLAorICAgICAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgQml0QmFrZSB0byBnZW5lcmF0ZSB0aGUKKyAgICAgICAgICAgICAgICByb290IGZpbGVzeXN0ZW0gaW1hZ2U6CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2ltYWdlLWdlbmVyYXRpb24ucG5nIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgaW1hZ2UgZ2VuZXJhdGlvbiBwcm9jZXNzIGNvbnNpc3RzIG9mIHNldmVyYWwgc3RhZ2VzIGFuZAorICAgICAgICAgICAgICAgIGRlcGVuZHMgb24gc2V2ZXJhbCB0YXNrcyBhbmQgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1yb290ZnMnPjxmaWxlbmFtZT5kb19yb290ZnM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB0YXNrIGNyZWF0ZXMgdGhlIHJvb3QgZmlsZXN5c3RlbSAoZmlsZSBhbmQgZGlyZWN0b3J5IHN0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICBmb3IgYW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgVGhpcyB0YXNrIHVzZXMgc2V2ZXJhbCBrZXkgdmFyaWFibGVzIHRvIGhlbHAgY3JlYXRlIHRoZSBsaXN0CisgICAgICAgICAgICAgICAgb2YgcGFja2FnZXMgdG8gYWN0dWFsbHkgaW5zdGFsbDoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0lOU1RBTEwnPjxmaWxlbmFtZT5JTUFHRV9JTlNUQUxMPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3V0IHRoZSBiYXNlIHNldCBvZiBwYWNrYWdlcyB0byBpbnN0YWxsIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBQYWNrYWdlIEZlZWRzIGFyZWEuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9FWENMVURFJz48ZmlsZW5hbWU+UEFDS0FHRV9FWENMVURFPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHBhY2thZ2VzIHRoYXQgc2hvdWxkIG5vdCBiZSBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGZlYXR1cmVzIHRvIGluY2x1ZGUgaW4gdGhlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgTW9zdCBvZiB0aGVzZSBmZWF0dXJlcyBtYXAgdG8gYWRkaXRpb25hbCBwYWNrYWdlcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxhdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhY2thZ2UgYmFja2VuZCB0byB1c2UgYW5kIGNvbnNlcXVlbnRseQorICAgICAgICAgICAgICAgICAgICAgICAgaGVscHMgZGV0ZXJtaW5lIHdoZXJlIHRvIGxvY2F0ZSBwYWNrYWdlcyB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlIEZlZWRzIGFyZWEuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItSU1BR0VfTElOR1VBUyc+PGZpbGVuYW1lPklNQUdFX0xJTkdVQVM8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIHRoZSBsYW5ndWFnZShzKSBmb3Igd2hpY2ggYWRkaXRpb25hbAorICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2Ugc3VwcG9ydCBwYWNrYWdlcyBhcmUgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9JTlNUQUxMJz48ZmlsZW5hbWU+UEFDS0FHRV9JTlNUQUxMPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpbmFsIGxpc3Qgb2YgcGFja2FnZXMgcGFzc2VkIHRvIHRoZSBwYWNrYWdlIG1hbmFnZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpbnN0YWxsYXRpb24gaW50byB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2l0aAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9ST09URlMnPjxmaWxlbmFtZT5JTUFHRV9ST09URlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBwb2ludGluZyB0byB0aGUgbG9jYXRpb24gb2YgdGhlIGZpbGVzeXN0ZW0gdW5kZXIgY29uc3RydWN0aW9uIGFuZAorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+UEFDS0FHRV9JTlNUQUxMPC9maWxlbmFtZT4gdmFyaWFibGUgcHJvdmlkaW5nIHRoZQorICAgICAgICAgICAgICAgIGZpbmFsIGxpc3Qgb2YgcGFja2FnZXMgdG8gaW5zdGFsbCwgdGhlIHJvb3QgZmlsZSBzeXN0ZW0gaXMKKyAgICAgICAgICAgICAgICBjcmVhdGVkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBQYWNrYWdlIGluc3RhbGxhdGlvbiBpcyB1bmRlciBjb250cm9sIG9mIHRoZSBwYWNrYWdlIG1hbmFnZXIKKyAgICAgICAgICAgICAgICAoZS5nLiBkbmYvcnBtLCBvcGtnLCBvciBhcHQvZHBrZykgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yCisgICAgICAgICAgICAgICAgbm90IHBhY2thZ2UgbWFuYWdlbWVudCBpcyBlbmFibGVkIGZvciB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgIEF0IHRoZSBlbmQgb2YgdGhlIHByb2Nlc3MsIGlmIHBhY2thZ2UgbWFuYWdlbWVudCBpcyBub3QKKyAgICAgICAgICAgICAgICBlbmFibGVkIGZvciB0aGUgdGFyZ2V0LCB0aGUgcGFja2FnZSBtYW5hZ2VyJ3MgZGF0YSBmaWxlcworICAgICAgICAgICAgICAgIGFyZSBkZWxldGVkIGZyb20gdGhlIHJvb3QgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICBBcyBwYXJ0IG9mIHRoZSBmaW5hbCBzdGFnZSBvZiBwYWNrYWdlIGluc3RhbGxhdGlvbiwgcG9zdGluc3RhbGwKKyAgICAgICAgICAgICAgICBzY3JpcHRzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIHBhY2thZ2VzIGFyZSBydW4uCisgICAgICAgICAgICAgICAgQW55IHNjcmlwdHMgdGhhdCBmYWlsIHRvIHJ1bgorICAgICAgICAgICAgICAgIG9uIHRoZSBidWlsZCBob3N0IGFyZSBydW4gb24gdGhlIHRhcmdldCB3aGVuIHRoZSB0YXJnZXQgc3lzdGVtCisgICAgICAgICAgICAgICAgaXMgZmlyc3QgYm9vdGVkLgorICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgYQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NyZWF0aW5nLWEtcmVhZC1vbmx5LXJvb3QtZmlsZXN5c3RlbSc+cmVhZC1vbmx5IHJvb3QgZmlsZXN5c3RlbTwvdWxpbms+LAorICAgICAgICAgICAgICAgIGFsbCB0aGUgcG9zdCBpbnN0YWxsYXRpb24gc2NyaXB0cyBtdXN0IHN1Y2NlZWQgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgIHBhY2thZ2UgaW5zdGFsbGF0aW9uIHBoYXNlIHNpbmNlIHRoZSByb290IGZpbGVzeXN0ZW0gaXMKKyAgICAgICAgICAgICAgICByZWFkLW9ubHkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmaW5hbCBzdGFnZXMgb2YgdGhlIDxmaWxlbmFtZT5kb19yb290ZnM8L2ZpbGVuYW1lPiB0YXNrCisgICAgICAgICAgICAgICAgaGFuZGxlIHBvc3QgcHJvY2Vzc2luZy4KKyAgICAgICAgICAgICAgICBQb3N0IHByb2Nlc3NpbmcgaW5jbHVkZXMgY3JlYXRpb24gb2YgYSBtYW5pZmVzdCBmaWxlIGFuZAorICAgICAgICAgICAgICAgIG9wdGltaXphdGlvbnMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBtYW5pZmVzdCBmaWxlICg8ZmlsZW5hbWU+Lm1hbmlmZXN0PC9maWxlbmFtZT4pIHJlc2lkZXMKKyAgICAgICAgICAgICAgICBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbWFnZS4KKyAgICAgICAgICAgICAgICBUaGlzIGZpbGUgbGlzdHMgb3V0LCBsaW5lLWJ5LWxpbmUsIHRoZSBpbnN0YWxsZWQgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgVGhlIG1hbmlmZXN0IGZpbGUgaXMgdXNlZnVsIGZvciB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy10ZXN0aW1hZ2UqJz48ZmlsZW5hbWU+dGVzdGltYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgY2xhc3MsIGZvciBleGFtcGxlLCB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdG8gcnVuCisgICAgICAgICAgICAgICAgc3BlY2lmaWMgdGVzdHMuCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9NQU5JRkVTVCc+PGZpbGVuYW1lPklNQUdFX01BTklGRVNUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9wdGltaXppbmcgcHJvY2Vzc2VzIHJ1biBhY3Jvc3MgdGhlIGltYWdlIGluY2x1ZGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWtsaWJzPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5wcmVsaW5rPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgYW5kIGFueSBvdGhlciBwb3N0LXByb2Nlc3NpbmcgY29tbWFuZHMgYXMgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQnPjxmaWxlbmFtZT5ST09URlNfUE9TVFBST0NFU1NfQ09NTUFORDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bWtsaWJzPC9maWxlbmFtZT4gcHJvY2VzcyBvcHRpbWl6ZXMgdGhlIHNpemUKKyAgICAgICAgICAgICAgICBvZiB0aGUgbGlicmFyaWVzLCB3aGlsZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cHJlbGluazwvZmlsZW5hbWU+IHByb2Nlc3Mgb3B0aW1pemVzIHRoZSBkeW5hbWljCisgICAgICAgICAgICAgICAgbGlua2luZyBvZiBzaGFyZWQgbGlicmFyaWVzIHRvIHJlZHVjZSBzdGFydCB1cCB0aW1lIG9mCisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFmdGVyIHRoZSByb290IGZpbGVzeXN0ZW0gaXMgYnVpbHQsIHByb2Nlc3NpbmcgYmVnaW5zIG9uCisgICAgICAgICAgICAgICAgdGhlIGltYWdlIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWltYWdlJz48ZmlsZW5hbWU+ZG9faW1hZ2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB0YXNrLgorICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gcnVucyBhbnkgcHJlLXByb2Nlc3NpbmcgY29tbWFuZHMgYXMgZGVmaW5lZAorICAgICAgICAgICAgICAgIGJ5IHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQnPjxmaWxlbmFtZT5JTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgYmVmb3JlCisgICAgICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY3JlYXRlcyB0aGUgZmluYWwgaW1hZ2Ugb3V0cHV0CisgICAgICAgICAgICAgICAgZmlsZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGR5bmFtaWNhbGx5IGNyZWF0ZXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9faW1hZ2VfKjwvZmlsZW5hbWU+IHRhc2tzIGFzIG5lZWRlZCwgYmFzZWQKKyAgICAgICAgICAgICAgICBvbiB0aGUgaW1hZ2UgdHlwZXMgc3BlY2lmaWVkIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GU1RZUEVTJz48ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIFRoZSBwcm9jZXNzIHR1cm5zIGV2ZXJ5dGhpbmcgaW50byBhbiBpbWFnZSBmaWxlIG9yIGEgc2V0IG9mCisgICAgICAgICAgICAgICAgaW1hZ2UgZmlsZXMgYW5kIGNvbXByZXNzZXMgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbWFnZSB0byByZWR1Y2UKKyAgICAgICAgICAgICAgICB0aGUgb3ZlcmFsbCBzaXplIG9mIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICBUaGUgZm9ybWF0cyB1c2VkIGZvciB0aGUgcm9vdCBmaWxlc3lzdGVtIGRlcGVuZCBvbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBhIGR5bmFtaWNhbGx5IGNyZWF0ZWQgdGFzayB3aGVuIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyIGltYWdlIDxyZXBsYWNlYWJsZT50eXBlPC9yZXBsYWNlYWJsZT4gd291bGQgdGFrZSB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmcgZm9ybToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX2ltYWdlXzxyZXBsYWNlYWJsZT50eXBlPC9yZXBsYWNlYWJsZT5bZGVwZW5kc10KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgU28sIGlmIHRoZSA8cmVwbGFjZWFibGU+dHlwZTwvcmVwbGFjZWFibGU+IGFzIHNwZWNpZmllZCBieSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+IHdlcmUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZXh0NDwvZmlsZW5hbWU+LCB0aGUgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIHRhc2sKKyAgICAgICAgICAgICAgICB3b3VsZCBiZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZG9faW1hZ2VfZXh0NFtkZXBlbmRzXQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZpbmFsIHRhc2sgaW52b2x2ZWQgaW4gaW1hZ2UgY3JlYXRpb24gaXMgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWltYWdlLWNvbXBsZXRlJz48ZmlsZW5hbWU+ZG9faW1hZ2VfY29tcGxldGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB0YXNrLgorICAgICAgICAgICAgICAgIFRoaXMgdGFzayBjb21wbGV0ZXMgdGhlIGltYWdlIGJ5IGFwcGx5aW5nIGFueSBpbWFnZQorICAgICAgICAgICAgICAgIHBvc3QgcHJvY2Vzc2luZyBhcyBkZWZpbmVkIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQnPjxmaWxlbmFtZT5JTUFHRV9QT1NUUFJPQ0VTU19DT01NQU5EPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIHNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgb25jZSB0aGUKKyAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBjcmVhdGVkIHRoZSBmaW5hbCBpbWFnZSBvdXRwdXQKKyAgICAgICAgICAgICAgICBmaWxlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlIGVudGlyZSBpbWFnZSBnZW5lcmF0aW9uIHByb2Nlc3MgaXMgcnVuIHVuZGVyIFBzZXVkby4KKyAgICAgICAgICAgICAgICBSdW5uaW5nIHVuZGVyIFBzZXVkbyBlbnN1cmVzIHRoYXQgdGhlIGZpbGVzIGluIHRoZSByb290CisgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSBoYXZlIGNvcnJlY3Qgb3duZXJzaGlwLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Nkay1nZW5lcmF0aW9uLWRldi1lbnZpcm9ubWVudCc+CisgICAgICAgICAgICA8dGl0bGU+U0RLIEdlbmVyYXRpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIEJpdEJha2UgdG8gZ2VuZXJhdGUgdGhlCisgICAgICAgICAgICAgICAgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspIGluc3RhbGxlciBzY3JpcHQgZm9yIGJvdGggdGhlCisgICAgICAgICAgICAgICAgc3RhbmRhcmQgYW5kIGV4dGVuc2libGUgU0RLczoKKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvc2RrLWdlbmVyYXRpb24ucG5nIiBhbGlnbj0iY2VudGVyIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluCisgICAgICAgICAgICAgICAgZ2VuZXJhdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4tZ2VuZXJhdGlvbic+Q3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluIEdlbmVyYXRpb248L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGFkdmFudGFnZXMgZ2FpbmVkIHdoZW4gYnVpbGRpbmcgYQorICAgICAgICAgICAgICAgIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbiB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcG9wdWxhdGVfc2RrJz48ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc2RrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFzaywgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyNzZGstYnVpbGRpbmctYW4tc2RrLWluc3RhbGxlcic+QnVpbGRpbmcgYW4gU0RLIEluc3RhbGxlcjwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgYW5kIHRoZQorICAgICAgICAgICAgICAgIEV4dGVuc2libGUgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspIG1hbnVhbC4KKyAgICAgICAgICAgIDwvbm90ZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTGlrZSBpbWFnZSBnZW5lcmF0aW9uLCB0aGUgU0RLIHNjcmlwdCBwcm9jZXNzIGNvbnNpc3RzIG9mCisgICAgICAgICAgICAgICAgc2V2ZXJhbCBzdGFnZXMgYW5kIGRlcGVuZHMgb24gbWFueSB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zZGs8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc2RrX2V4dDwvZmlsZW5hbWU+IHRhc2tzIHVzZSB0aGVzZQorICAgICAgICAgICAgICAgIGtleSB2YXJpYWJsZXMgdG8gaGVscCBjcmVhdGUgdGhlIGxpc3Qgb2YgcGFja2FnZXMgdG8gYWN0dWFsbHkKKyAgICAgICAgICAgICAgICBpbnN0YWxsLgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgdmFyaWFibGVzIGxpc3RlZCBpbiB0aGUgZmlndXJlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1kZXYtZW52aXJvbm1lbnQnPkFwcGxpY2F0aW9uIERldmVsb3BtZW50IFNESzwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zZGs8L2ZpbGVuYW1lPiB0YXNrIGhlbHBzIGNyZWF0ZQorICAgICAgICAgICAgICAgIHRoZSBzdGFuZGFyZCBTREsgYW5kIGhhbmRsZXMgdHdvIHBhcnRzOiBhIHRhcmdldCBwYXJ0IGFuZCBhCisgICAgICAgICAgICAgICAgaG9zdCBwYXJ0LgorICAgICAgICAgICAgICAgIFRoZSB0YXJnZXQgcGFydCBpcyB0aGUgcGFydCBidWlsdCBmb3IgdGhlIHRhcmdldCBoYXJkd2FyZSBhbmQKKyAgICAgICAgICAgICAgICBpbmNsdWRlcyBsaWJyYXJpZXMgYW5kIGhlYWRlcnMuCisgICAgICAgICAgICAgICAgVGhlIGhvc3QgcGFydCBpcyB0aGUgcGFydCBvZiB0aGUgU0RLIHRoYXQgcnVucyBvbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLTUFDSElORSc+PGZpbGVuYW1lPlNES01BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc2RrX2V4dDwvZmlsZW5hbWU+IHRhc2sgaGVscHMgY3JlYXRlCisgICAgICAgICAgICAgICAgdGhlIGV4dGVuc2libGUgU0RLIGFuZCBoYW5kbGVzIGhvc3QgYW5kIHRhcmdldCBwYXJ0cworICAgICAgICAgICAgICAgIGRpZmZlcmVudGx5IHRoYW4gaXRzIGNvdW50ZXIgcGFydCBkb2VzIGZvciB0aGUgc3RhbmRhcmQgU0RLLgorICAgICAgICAgICAgICAgIEZvciB0aGUgZXh0ZW5zaWJsZSBTREssIHRoZSB0YXNrIGVuY2Fwc3VsYXRlcyB0aGUgYnVpbGQgc3lzdGVtLAorICAgICAgICAgICAgICAgIHdoaWNoIGluY2x1ZGVzIGV2ZXJ5dGhpbmcgbmVlZGVkIChob3N0IGFuZCB0YXJnZXQpIGZvciB0aGUgU0RLLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBSZWdhcmRsZXNzIG9mIHRoZSB0eXBlIG9mIFNESyBiZWluZyBjb25zdHJ1Y3RlZCwgdGhlCisgICAgICAgICAgICAgICAgdGFza3MgcGVyZm9ybSBzb21lIGNsZWFudXAgYWZ0ZXIgd2hpY2ggYSBjcm9zcy1kZXZlbG9wbWVudAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBhbmQgYW55IG5lZWRlZCBjb25maWd1cmF0aW9uIGZpbGVzCisgICAgICAgICAgICAgICAgYXJlIGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgVGhlIGZpbmFsIG91dHB1dCBpcyB0aGUgQ3Jvc3MtZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICB0b29sY2hhaW4gaW5zdGFsbGF0aW9uIHNjcmlwdCAoPGZpbGVuYW1lPi5zaDwvZmlsZW5hbWU+IGZpbGUpLAorICAgICAgICAgICAgICAgIHdoaWNoIGluY2x1ZGVzIHRoZSBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc3RhbXAtZmlsZXMtYW5kLXRoZS1yZXJ1bm5pbmctb2YtdGFza3MnPgorICAgICAgICAgICAgPHRpdGxlPlN0YW1wIEZpbGVzIGFuZCB0aGUgUmVydW5uaW5nIG9mIFRhc2tzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIGVhY2ggdGFzayB0aGF0IGNvbXBsZXRlcyBzdWNjZXNzZnVsbHksIEJpdEJha2Ugd3JpdGVzIGEKKyAgICAgICAgICAgICAgICBzdGFtcCBmaWxlIGludG8gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNUQU1QU19ESVInPjxmaWxlbmFtZT5TVEFNUFNfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIFRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0YW1wIGZpbGUncyBmaWxlbmFtZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFNUCc+PGZpbGVuYW1lPlNUQU1QPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUsIGFuZCB0aGUgZW5kIG9mIHRoZSBuYW1lIGNvbnNpc3RzIG9mIHRoZSB0YXNrJ3MgbmFtZQorICAgICAgICAgICAgICAgIGFuZCBjdXJyZW50CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyNjaGVja3N1bXMnPmlucHV0IGNoZWNrc3VtPC91bGluaz4uCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgbmFtaW5nIHNjaGVtZSBhc3N1bWVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyN2YXItQkJfU0lHTkFUVVJFX0hBTkRMRVInPjxmaWxlbmFtZT5CQl9TSUdOQVRVUkVfSEFORExFUjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgIk9FQmFzaWNIYXNoIiwgd2hpY2ggaXMgYWxtb3N0IGFsd2F5cyB0aGUgY2FzZSBpbgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50IE9wZW5FbWJlZGRlZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgVG8gZGV0ZXJtaW5lIGlmIGEgdGFzayBuZWVkcyB0byBiZSByZXJ1biwgQml0QmFrZSBjaGVja3MgaWYgYQorICAgICAgICAgICAgICAgIHN0YW1wIGZpbGUgd2l0aCBhIG1hdGNoaW5nIGlucHV0IGNoZWNrc3VtIGV4aXN0cyBmb3IgdGhlIHRhc2suCisgICAgICAgICAgICAgICAgSWYgc3VjaCBhIHN0YW1wIGZpbGUgZXhpc3RzLCB0aGUgdGFzaydzIG91dHB1dCBpcyBhc3N1bWVkIHRvCisgICAgICAgICAgICAgICAgZXhpc3QgYW5kIHN0aWxsIGJlIHZhbGlkLgorICAgICAgICAgICAgICAgIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCB0aGUgdGFzayBpcyByZXJ1bi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIHN0YW1wIG1lY2hhbmlzbSBpcyBtb3JlIGdlbmVyYWwgdGhhbiB0aGUgc2hhcmVkCisgICAgICAgICAgICAgICAgICAgIHN0YXRlIChzc3RhdGUpIGNhY2hlIG1lY2hhbmlzbSBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZXRzY2VuZS10YXNrcy1hbmQtc2hhcmVkLXN0YXRlJz5TZXRzY2VuZSBUYXNrcyBhbmQgU2hhcmVkIFN0YXRlPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBhdm9pZHMgcmVydW5uaW5nIGFueSB0YXNrIHRoYXQgaGFzIGEgdmFsaWQKKyAgICAgICAgICAgICAgICAgICAgc3RhbXAgZmlsZSwgbm90IGp1c3QgdGFza3MgdGhhdCBjYW4gYmUgYWNjZWxlcmF0ZWQgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICB0aGUgc3N0YXRlIGNhY2hlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+SG93ZXZlciwgeW91IHNob3VsZCByZWFsaXplIHRoYXQgc3RhbXAgZmlsZXMgb25seQorICAgICAgICAgICAgICAgICAgICBzZXJ2ZSBhcyBhIG1hcmtlciB0aGF0IHNvbWUgd29yayBoYXMgYmVlbiBkb25lIGFuZCB0aGF0CisgICAgICAgICAgICAgICAgICAgIHRoZXNlIGZpbGVzIGRvIG5vdCByZWNvcmQgdGFzayBvdXRwdXQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBhY3R1YWwgdGFzayBvdXRwdXQgd291bGQgdXN1YWxseSBiZSBzb21ld2hlcmUgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAoZS5nLiBpbiBzb21lIHJlY2lwZSdzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPi4pCisgICAgICAgICAgICAgICAgICAgIFdoYXQgdGhlIHNzdGF0ZSBjYWNoZSBtZWNoYW5pc20gYWRkcyBpcyBhIHdheSB0byBjYWNoZSB0YXNrCisgICAgICAgICAgICAgICAgICAgIG91dHB1dCB0aGF0IGNhbiB0aGVuIGJlIHNoYXJlZCBiZXR3ZWVuIGJ1aWxkIG1hY2hpbmVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIFNpbmNlIDxmaWxlbmFtZT5TVEFNUFNfRElSPC9maWxlbmFtZT4gaXMgdXN1YWxseSBhIHN1YmRpcmVjdG9yeQorICAgICAgICAgICAgICAgIG9mIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiwgcmVtb3ZpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4gd2lsbCBhbHNvIHJlbW92ZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TVEFNUFNfRElSPC9maWxlbmFtZT4sIHdoaWNoIG1lYW5zIHRhc2tzIHdpbGwKKyAgICAgICAgICAgICAgICBwcm9wZXJseSBiZSByZXJ1biB0byByZXBvcHVsYXRlIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgc29tZSB0YXNrIHRvIGFsd2F5cyBiZSBjb25zaWRlcmVkICJvdXQgb2YgZGF0ZSIsCisgICAgICAgICAgICAgICAgeW91IGNhbiBtYXJrIGl0IHdpdGggdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyN2YXJpYWJsZS1mbGFncyc+PGZpbGVuYW1lPm5vc3RhbXA8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyZmxhZy4KKyAgICAgICAgICAgICAgICBJZiBzb21lIG90aGVyIHRhc2sgZGVwZW5kcyBvbiBzdWNoIGEgdGFzaywgdGhlbiB0aGF0IHRhc2sgd2lsbAorICAgICAgICAgICAgICAgIGFsc28gYWx3YXlzIGJlIGNvbnNpZGVyZWQgb3V0IG9mIGRhdGUsIHdoaWNoIG1pZ2h0IG5vdCBiZSB3aGF0CisgICAgICAgICAgICAgICAgeW91IHdhbnQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBkZXRhaWxzIG9uIGhvdyB0byB2aWV3IGluZm9ybWF0aW9uIGFib3V0IGEgdGFzaydzCisgICAgICAgICAgICAgICAgc2lnbmF0dXJlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5ncG9reS12aWV3aW5nLXRhc2stdmFyaWFibGUtZGVwZW5kZW5jaWVzJz5WaWV3aW5nIFRhc2sgVmFyaWFibGUgRGVwZW5kZW5jaWVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NldHNjZW5lLXRhc2tzLWFuZC1zaGFyZWQtc3RhdGUnPgorICAgICAgICAgICAgPHRpdGxlPlNldHNjZW5lIFRhc2tzIGFuZCBTaGFyZWQgU3RhdGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZGVzY3JpcHRpb24gb2YgdGFza3Mgc28gZmFyIGFzc3VtZXMgdGhhdCBCaXRCYWtlIG5lZWRzIHRvCisgICAgICAgICAgICAgICAgYnVpbGQgZXZlcnl0aGluZyBhbmQgdGhlcmUgYXJlIG5vIHByZWJ1aWx0IG9iamVjdHMgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgIEJpdEJha2UgZG9lcyBzdXBwb3J0IHNraXBwaW5nIHRhc2tzIGlmIHByZWJ1aWx0IG9iamVjdHMgYXJlCisgICAgICAgICAgICAgICAgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgIFRoZXNlIG9iamVjdHMgYXJlIHVzdWFsbHkgbWFkZSBhdmFpbGFibGUgaW4gdGhlIGZvcm0gb2YgYQorICAgICAgICAgICAgICAgIHNoYXJlZCBzdGF0ZSAoc3N0YXRlKSBjYWNoZS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHZhcmlhYmxlcyBhZmZlY3Rpbmcgc3N0YXRlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TU1RBVEVfRElSJz48ZmlsZW5hbWU+U1NUQVRFX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNTVEFURV9NSVJST1JTJz48ZmlsZW5hbWU+U1NUQVRFX01JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGlkZWEgb2YgYSBzZXRzY2VuZSB0YXNrIChpLmUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fPC9maWxlbmFtZT48cmVwbGFjZWFibGU+dGFza25hbWU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT5fc2V0c2NlbmU8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICBpcyBhIHZlcnNpb24gb2YgdGhlIHRhc2sgd2hlcmUKKyAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIGJ1aWxkaW5nIHNvbWV0aGluZywgQml0QmFrZSBjYW4gc2tpcCB0byB0aGUgZW5kCisgICAgICAgICAgICAgICAgcmVzdWx0IGFuZCBzaW1wbHkgcGxhY2UgYSBzZXQgb2YgZmlsZXMgaW50byBzcGVjaWZpYyBsb2NhdGlvbnMKKyAgICAgICAgICAgICAgICBhcyBuZWVkZWQuCisgICAgICAgICAgICAgICAgSW4gc29tZSBjYXNlcywgaXQgbWFrZXMgc2Vuc2UgdG8gaGF2ZSBhIHNldHNjZW5lIHRhc2sgdmFyaWFudAorICAgICAgICAgICAgICAgIChlLmcuIGdlbmVyYXRpbmcgcGFja2FnZSBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV8qPC9maWxlbmFtZT4gdGFzaykuCisgICAgICAgICAgICAgICAgSW4gb3RoZXIgY2FzZXMsIGl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UsIChlLmcuIGEKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGF0Y2gnPjxmaWxlbmFtZT5kb19wYXRjaDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHRhc2sgb3IKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtdW5wYWNrJz48ZmlsZW5hbWU+ZG9fdW5wYWNrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFzaykgc2luY2UgdGhlIHdvcmsgaW52b2x2ZWQgd291bGQgYmUgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuCisgICAgICAgICAgICAgICAgdGhlIHVuZGVybHlpbmcgdGFzay4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0sIHRoZSBjb21tb24gdGFza3MgdGhhdCBoYXZlCisgICAgICAgICAgICAgICAgc2V0c2NlbmUgdmFyaWFudHMgYXJlIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlJz48ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV8qPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWRlcGxveSc+PGZpbGVuYW1lPmRvX2RlcGxveTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZWRhdGEnPjxmaWxlbmFtZT5kb19wYWNrYWdlZGF0YTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcG9wdWxhdGVfc3lzcm9vdCc+PGZpbGVuYW1lPmRvX3BvcHVsYXRlX3N5c3Jvb3Q8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgTm90aWNlIHRoYXQgdGhlc2UgYXJlIG1vc3Qgb2YgdGhlIHRhc2tzIHdob3NlIG91dHB1dCBpcyBhbgorICAgICAgICAgICAgICAgIGVuZCByZXN1bHQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBrbm93bGVkZ2Ugb2YgdGhlIHJlbGF0aW9uc2hpcAorICAgICAgICAgICAgICAgIGJldHdlZW4gdGhlc2UgdGFza3MgYW5kIG90aGVyIHRhc2tzIHRoYXQgcHJlY2VkZSB0aGVtLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiBCaXRCYWtlIHJ1bnMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZTwvZmlsZW5hbWU+IGZvcgorICAgICAgICAgICAgICAgIHNvbWV0aGluZywgdGhlcmUgaXMgbGl0dGxlIHBvaW50IGluIHJ1bm5pbmcgYW55IG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19mZXRjaDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZG9fdW5wYWNrPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3BhdGNoPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4gdGFza3MuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgPGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPiBuZWVkcyB0byBiZSBydW4sCisgICAgICAgICAgICAgICAgQml0QmFrZSB3b3VsZCBuZWVkIHRvIHJ1biB0aG9zZSBvdGhlciB0YXNrcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXQgYmVjb21lcyBtb3JlIGNvbXBsaWNhdGVkIGlmIGV2ZXJ5dGhpbmcgY2FuIGNvbWUgZnJvbSBhbgorICAgICAgICAgICAgICAgIHNzdGF0ZSBjYWNoZSBiZWNhdXNlIHNvbWUgb2JqZWN0cyBhcmUgc2ltcGx5IG5vdCByZXF1aXJlZCBhdAorICAgICAgICAgICAgICAgIGFsbC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGRvIG5vdCBuZWVkIGEgY29tcGlsZXIgb3IgbmF0aXZlIHRvb2xzLCBzdWNoCisgICAgICAgICAgICAgICAgYXMgcXVpbHQsIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gY29tcGlsZSBvciBwYXRjaC4KKyAgICAgICAgICAgICAgICBJZiB0aGUgPGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfKjwvZmlsZW5hbWU+IHBhY2thZ2VzIGFyZQorICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBmcm9tIHNzdGF0ZSwgQml0QmFrZSBkb2VzIG5vdCBuZWVkIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT4gdGFzayBkYXRhLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBoYW5kbGUgYWxsIHRoZXNlIGNvbXBsZXhpdGllcywgQml0QmFrZSBydW5zIGluIHR3byBwaGFzZXMuCisgICAgICAgICAgICAgICAgVGhlIGZpcnN0IGlzIHRoZSAic2V0c2NlbmUiIHN0YWdlLgorICAgICAgICAgICAgICAgIER1cmluZyB0aGlzIHN0YWdlLCBCaXRCYWtlIGZpcnN0IGNoZWNrcyB0aGUgc3N0YXRlIGNhY2hlIGZvcgorICAgICAgICAgICAgICAgIGFueSB0YXJnZXRzIGl0IGlzIHBsYW5uaW5nIHRvIGJ1aWxkLgorICAgICAgICAgICAgICAgIEJpdEJha2UgZG9lcyBhIGZhc3QgY2hlY2sgdG8gc2VlIGlmIHRoZSBvYmplY3QgZXhpc3RzIHJhdGhlcgorICAgICAgICAgICAgICAgIHRoYW4gYSBjb21wbGV0ZSBkb3dubG9hZC4KKyAgICAgICAgICAgICAgICBJZiBub3RoaW5nIGV4aXN0cywgdGhlIHNlY29uZCBwaGFzZSwgd2hpY2ggaXMgdGhlIHNldHNjZW5lCisgICAgICAgICAgICAgICAgc3RhZ2UsIGNvbXBsZXRlcyBhbmQgdGhlIG1haW4gYnVpbGQgcHJvY2VlZHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIG9iamVjdHMgYXJlIGZvdW5kIGluIHRoZSBzc3RhdGUgY2FjaGUsIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gd29ya3MgYmFja3dhcmRzIGZyb20gdGhlIGVuZCB0YXJnZXRzIHNwZWNpZmllZAorICAgICAgICAgICAgICAgIGJ5IHRoZSB1c2VyLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiBhbiBpbWFnZSBpcyBiZWluZyBidWlsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgIHN5c3RlbSBmaXJzdCBsb29rcyBmb3IgdGhlIHBhY2thZ2VzIG5lZWRlZCBmb3IgdGhhdCBpbWFnZSBhbmQKKyAgICAgICAgICAgICAgICB0aGUgdG9vbHMgbmVlZGVkIHRvIGNvbnN0cnVjdCBhbiBpbWFnZS4KKyAgICAgICAgICAgICAgICBJZiB0aG9zZSBhcmUgYXZhaWxhYmxlLCB0aGUgY29tcGlsZXIgaXMgbm90IG5lZWRlZC4KKyAgICAgICAgICAgICAgICBUaHVzLCB0aGUgY29tcGlsZXIgaXMgbm90IGV2ZW4gZG93bmxvYWRlZC4KKyAgICAgICAgICAgICAgICBJZiBzb21ldGhpbmcgd2FzIGZvdW5kIHRvIGJlIHVuYXZhaWxhYmxlLCBvciB0aGUgZG93bmxvYWQgb3IKKyAgICAgICAgICAgICAgICBzZXRzY2VuZSB0YXNrIGZhaWxzLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0aGVuIHRyaWVzCisgICAgICAgICAgICAgICAgdG8gaW5zdGFsbCBkZXBlbmRlbmNpZXMsIHN1Y2ggYXMgdGhlIGNvbXBpbGVyLCBmcm9tIHRoZSBjYWNoZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGF2YWlsYWJpbGl0eSBvZiBvYmplY3RzIGluIHRoZSBzc3RhdGUgY2FjaGUgaXMgaGFuZGxlZCBieQorICAgICAgICAgICAgICAgIHRoZSBmdW5jdGlvbiBzcGVjaWZpZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyN2YXItQkJfSEFTSENIRUNLX0ZVTkNUSU9OJz48ZmlsZW5hbWU+QkJfSEFTSENIRUNLX0ZVTkNUSU9OPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCByZXR1cm5zIGEgbGlzdCBvZiB0aGUgb2JqZWN0cyB0aGF0IGFyZSBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBieSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I3Zhci1CQl9TRVRTQ0VORV9ERVBWQUxJRCc+PGZpbGVuYW1lPkJCX1NFVFNDRU5FX0RFUFZBTElEPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciBhIGdpdmVuCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSBuZWVkcyB0byBiZSBmb2xsb3dlZCwgYW5kIHdoZXRoZXIgZm9yIGFueSBnaXZlbgorICAgICAgICAgICAgICAgIHJlbGF0aW9uc2hpcCB0aGUgZnVuY3Rpb24gbmVlZHMgdG8gYmUgcGFzc2VkLgorICAgICAgICAgICAgICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgVHJ1ZSBvciBGYWxzZSB2YWx1ZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdpbWFnZXMtZGV2LWVudmlyb25tZW50Jz4KKyAgICAgICAgPHRpdGxlPkltYWdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgaW1hZ2VzIHByb2R1Y2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICBhcmUgY29tcHJlc3NlZCBmb3JtcyBvZiB0aGUKKyAgICAgICAgICAgIHJvb3QgZmlsZXN5c3RlbSB0aGF0IGFyZSByZWFkeSB0byBib290IG9uIGEgdGFyZ2V0IGRldmljZS4KKyAgICAgICAgICAgIFlvdSBjYW4gc2VlIGZyb20gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdnZW5lcmFsLXlvY3RvLWVudmlyb25tZW50LWZpZ3VyZSc+Z2VuZXJhbCBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50IGZpZ3VyZTwvbGluaz4KKyAgICAgICAgICAgIHRoYXQgQml0QmFrZSBvdXRwdXQsIGluIHBhcnQsIGNvbnNpc3RzIG9mIGltYWdlcy4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBpcyBnb2luZyB0byBsb29rIG1vcmUgY2xvc2VseSBhdCB0aGlzIG91dHB1dDoKKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9pbWFnZXMucG5nIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNS41aW4iIGRlcHRoPSI1LjVpbiIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIGEgbGlzdCBvZiBleGFtcGxlIGltYWdlcyB0aGF0IHRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzLAorICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1pbWFnZXMnPkltYWdlczwvbGluaz4iIGNoYXB0ZXIuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEltYWdlcyBhcmUgd3JpdHRlbiBvdXQgdG8gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgIGluc2lkZSB0aGUgPGZpbGVuYW1lPnRtcC9kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT4vPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZvbGRlciBhcyBzaG93biBpbiB0aGUgZmlndXJlLgorICAgICAgICAgICAgVGhpcyBmb2xkZXIgY29udGFpbnMgYW55IGZpbGVzIGV4cGVjdGVkIHRvIGJlIGxvYWRlZCBvbiB0aGUKKyAgICAgICAgICAgIHRhcmdldCBkZXZpY2UuCisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSJz48ZmlsZW5hbWU+REVQTE9ZX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSA8ZmlsZW5hbWU+ZGVwbG95PC9maWxlbmFtZT4gZGlyZWN0b3J5LAorICAgICAgICAgICAgd2hpbGUgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9JTUFHRSc+PGZpbGVuYW1lPkRFUExPWV9ESVJfSU1BR0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIHBvaW50cyB0byB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgaW1hZ2VzIGZvcgorICAgICAgICAgICAgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48cmVwbGFjZWFibGU+a2VybmVsLWltYWdlPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgQSBrZXJuZWwgYmluYXJ5IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8bGluayBsaW5rZW5kPSd2YXItS0VSTkVMX0lNQUdFVFlQRSc+PGZpbGVuYW1lPktFUk5FTF9JTUFHRVRZUEU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgc2V0dGluZyBkZXRlcm1pbmVzIHRoZSBuYW1pbmcgc2NoZW1lIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAga2VybmVsIGltYWdlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGF0IHZhcmlhYmxlLCB0aGUgZmlsZSBjb3VsZCBiZWdpbiB3aXRoCisgICAgICAgICAgICAgICAgICAgIGEgdmFyaWV0eSBvZiBuYW1pbmcgc3RyaW5ncy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgY2FuIGNvbnRhaW4gbXVsdGlwbGUgaW1hZ2UgZmlsZXMgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnJvb3QtZmlsZXN5c3RlbS1pbWFnZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFJvb3QgZmlsZXN5c3RlbXMgZm9yIHRoZSB0YXJnZXQgZGV2aWNlIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4qLmV4dDM8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+Ki5iejI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlcykuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+PGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgc2V0dGluZyBkZXRlcm1pbmVzIHRoZSByb290IGZpbGVzeXN0ZW0gaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgY2FuIGNvbnRhaW4gbXVsdGlwbGUgcm9vdCBmaWxlc3lzdGVtcyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48cmVwbGFjZWFibGU+a2VybmVsLW1vZHVsZXM8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBUYXJiYWxscyB0aGF0IGNvbnRhaW4gYWxsIHRoZSBtb2R1bGVzIGJ1aWx0IGZvciB0aGUga2VybmVsLgorICAgICAgICAgICAgICAgICAgICBLZXJuZWwgbW9kdWxlIHRhcmJhbGxzIGV4aXN0IGZvciBsZWdhY3kgcHVycG9zZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIGNhbiBiZSBzdXBwcmVzc2VkIGJ5IHNldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NT0RVTEVfVEFSQkFMTF9ERVBMT1knPjxmaWxlbmFtZT5NT0RVTEVfVEFSQkFMTF9ERVBMT1k8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gIjAiLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRlcGxveS9pbWFnZXMvPHJlcGxhY2VhYmxlPm1hY2hpbmU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBjYW4gY29udGFpbiBtdWx0aXBsZSBrZXJuZWwgbW9kdWxlIHRhcmJhbGxzCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgbWFjaGluZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5ib290bG9hZGVyczwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIEJvb3Rsb2FkZXJzIHN1cHBvcnRpbmcgdGhlIGltYWdlLCBpZiBhcHBsaWNhYmxlIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgY2FuIGNvbnRhaW4gbXVsdGlwbGUgYm9vdGxvYWRlcnMgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnN5bWxpbmtzPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmb2xkZXIgY29udGFpbnMKKyAgICAgICAgICAgICAgICAgICAgYSBzeW1ib2xpYyBsaW5rIHRoYXQgcG9pbnRzIHRvIHRoZSBtb3N0IHJlY2VudGx5IGJ1aWx0IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgZm9yIGVhY2ggbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgbGlua3MgbWlnaHQgYmUgdXNlZnVsIGZvciBleHRlcm5hbCBzY3JpcHRzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBvYnRhaW4gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGVhY2ggZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzZGstZGV2LWVudmlyb25tZW50Jz4KKyAgICAgICAgPHRpdGxlPkFwcGxpY2F0aW9uIERldmVsb3BtZW50IFNESzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz5nZW5lcmFsIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZmlndXJlPC9saW5rPiwKKyAgICAgICAgICAgIHRoZSBvdXRwdXQgbGFiZWxlZCAiQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgU0RLIiByZXByZXNlbnRzIGFuCisgICAgICAgICAgICBTREsuCisgICAgICAgICAgICBUaGUgU0RLIGdlbmVyYXRpb24gcHJvY2VzcyBkaWZmZXJzIGRlcGVuZGluZyBvbiB3aGV0aGVyIHlvdSBidWlsZAorICAgICAgICAgICAgYSBzdGFuZGFyZCBTREsKKyAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5iaXRiYWtlIC1jIHBvcHVsYXRlX3NkazwvZmlsZW5hbWU+IDxyZXBsYWNlYWJsZT5pbWFnZW5hbWU8L3JlcGxhY2VhYmxlPikKKyAgICAgICAgICAgIG9yIGFuIGV4dGVuc2libGUgU0RLCisgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+Yml0YmFrZSAtYyBwb3B1bGF0ZV9zZGtfZXh0PC9maWxlbmFtZT4gPHJlcGxhY2VhYmxlPmltYWdlbmFtZTwvcmVwbGFjZWFibGU+KS4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBpcyBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBvdXRwdXQ6CisgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvc2RrLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjlpbiIgZGVwdGg9IjcuMjVpbiIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHNwZWNpZmljIGZvcm0gb2YgdGhpcyBvdXRwdXQgaXMgYSBzZWxmLWV4dHJhY3RpbmcKKyAgICAgICAgICAgIFNESyBpbnN0YWxsZXIgKDxmaWxlbmFtZT4qLnNoPC9maWxlbmFtZT4pIHRoYXQsIHdoZW4gcnVuLAorICAgICAgICAgICAgaW5zdGFsbHMgdGhlIFNESywgd2hpY2ggY29uc2lzdHMgb2YgYSBjcm9zcy1kZXZlbG9wbWVudAorICAgICAgICAgICAgdG9vbGNoYWluLCBhIHNldCBvZiBsaWJyYXJpZXMgYW5kIGhlYWRlcnMsIGFuZCBhbiBTREsKKyAgICAgICAgICAgIGVudmlyb25tZW50IHNldHVwIHNjcmlwdC4KKyAgICAgICAgICAgIFJ1bm5pbmcgdGhpcyBpbnN0YWxsZXIgZXNzZW50aWFsbHkgc2V0cyB1cCB5b3VyCisgICAgICAgICAgICBjcm9zcy1kZXZlbG9wbWVudCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgIFlvdSBjYW4gdGhpbmsgb2YgdGhlIGNyb3NzLXRvb2xjaGFpbiBhcyB0aGUgImhvc3QiCisgICAgICAgICAgICBwYXJ0IGJlY2F1c2UgaXQgcnVucyBvbiB0aGUgU0RLIG1hY2hpbmUuCisgICAgICAgICAgICBZb3UgY2FuIHRoaW5rIG9mIHRoZSBsaWJyYXJpZXMgYW5kIGhlYWRlcnMgYXMgdGhlICJ0YXJnZXQiCisgICAgICAgICAgICBwYXJ0IGJlY2F1c2UgdGhleSBhcmUgYnVpbHQgZm9yIHRoZSB0YXJnZXQgaGFyZHdhcmUuCisgICAgICAgICAgICBUaGUgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IGlzIGFkZGVkIHNvIHRoYXQgeW91IGNhbiBpbml0aWFsaXplCisgICAgICAgICAgICB0aGUgZW52aXJvbm1lbnQgYmVmb3JlIHVzaW5nIHRoZSB0b29scy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxub3RlPjx0aXRsZT5Ob3RlczwvdGl0bGU+CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3Qgc3VwcG9ydHMgc2V2ZXJhbCBtZXRob2RzIGJ5IHdoaWNoIHlvdSBjYW4KKyAgICAgICAgICAgICAgICAgICAgc2V0IHVwIHRoaXMgY3Jvc3MtZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIG1ldGhvZHMgaW5jbHVkZSBkb3dubG9hZGluZyBwcmUtYnVpbHQgU0RLIGluc3RhbGxlcnMKKyAgICAgICAgICAgICAgICAgICAgb3IgYnVpbGRpbmcgYW5kIGluc3RhbGxpbmcgeW91ciBvd24gU0RLIGluc3RhbGxlci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBvbiBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW5zCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50IGVudmlyb25tZW50LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4tZ2VuZXJhdGlvbic+Q3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluIEdlbmVyYXRpb248L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBzZXR0aW5nIHVwIGEgY3Jvc3MtZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfU0RLX1VSTDsnPllvY3RvIFByb2plY3QgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIGJ1aWx0LCB0aGUgU0RLIGluc3RhbGxlcnMgYXJlIHdyaXR0ZW4gb3V0IHRvIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmRlcGxveS9zZGs8L2ZpbGVuYW1lPiBmb2xkZXIgaW5zaWRlIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICBhcyBzaG93biBpbiB0aGUgZmlndXJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBzZWN0aW9uLgorICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIFNESywgc2V2ZXJhbCB2YXJpYWJsZXMgZXhpc3QgdGhhdCBoZWxwCisgICAgICAgICAgICBjb25maWd1cmUgdGhlc2UgZmlsZXMuCisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3Qgc2hvd3MgdGhlIHZhcmlhYmxlcyBhc3NvY2lhdGVkIHdpdGggYSBzdGFuZGFyZAorICAgICAgICAgICAgU0RLOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVInPjxmaWxlbmFtZT5ERVBMT1lfRElSPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIDxmaWxlbmFtZT5kZXBsb3k8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1TREtNQUNISU5FJz48ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgb24gd2hpY2ggdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xzIGFyZSBydW4gdG8KKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlIHBhY2thZ2VzIGZvciB0aGUgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVNES0lNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+U0RLSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHRoZSBmZWF0dXJlcyB0byBpbmNsdWRlIGluIHRoZSAidGFyZ2V0IiBwYXJ0CisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItVE9PTENIQUlOX0hPU1RfVEFTSyc+PGZpbGVuYW1lPlRPT0xDSEFJTl9IT1NUX1RBU0s8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHBhY2thZ2VzIHRoYXQgbWFrZSB1cCB0aGUgaG9zdAorICAgICAgICAgICAgICAgICAgICBwYXJ0IG9mIHRoZSBTREsgKGkuZS4gdGhlIHBhcnQgdGhhdCBydW5zIG9uCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIC1jIHBvcHVsYXRlX3NkayA8cmVwbGFjZWFibGU+aW1hZ2VuYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB0byBjcmVhdGUgdGhlIFNESywgYSBzZXQgb2YgZGVmYXVsdCBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICBhcHBseS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBhbGxvd3MgeW91IHRvIGFkZCBtb3JlIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVRPT0xDSEFJTl9UQVJHRVRfVEFTSyc+PGZpbGVuYW1lPlRPT0xDSEFJTl9UQVJHRVRfVEFTSzwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgcGFja2FnZXMgdGhhdCBtYWtlIHVwIHRoZSB0YXJnZXQgcGFydAorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgU0RLIChpLmUuIHRoZSBwYXJ0IGJ1aWx0IGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGhhcmR3YXJlKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1TREtQQVRIJz48ZmlsZW5hbWU+U0RLUEFUSDwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgZGVmYXVsdCBTREsgaW5zdGFsbGF0aW9uIHBhdGggb2ZmZXJlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIFRoaXMgbmV4dCBsaXN0LCBzaG93cyB0aGUgdmFyaWFibGVzIGFzc29jaWF0ZWQgd2l0aCBhbiBleHRlbnNpYmxlCisgICAgICAgICAgICBTREs6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUic+PGZpbGVuYW1lPkRFUExPWV9ESVI8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgPGZpbGVuYW1lPmRlcGxveTwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfRVhUX1RZUEUnPjxmaWxlbmFtZT5TREtfRVhUX1RZUEU8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzIHdoZXRoZXIgb3Igbm90IHNoYXJlZCBzdGF0ZSBhcnRpZmFjdHMgYXJlIGNvcGllZAorICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSBleHRlbnNpYmxlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgYWxsIHJlcXVpcmVkIHNoYXJlZCBzdGF0ZSBhcnRpZmFjdHMgYXJlIGNvcGllZAorICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItU0RLX0lOQ0xVREVfUEtHREFUQSc+PGZpbGVuYW1lPlNES19JTkNMVURFX1BLR0RBVEE8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCBwYWNrYWdlZGF0YSB3aWxsIGJlIGluY2x1ZGVkIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSBleHRlbnNpYmxlIFNESyBmb3IgYWxsIHJlY2lwZXMgaW4gdGhlICJ3b3JsZCIgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVNES19JTkNMVURFX1RPT0xDSEFJTic+PGZpbGVuYW1lPlNES19JTkNMVURFX1RPT0xDSEFJTjwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSB0b29sY2hhaW4gd2lsbCBiZSBpbmNsdWRlZAorICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIHRoZSBleHRlbnNpYmxlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfTE9DQUxfQ09ORl9XSElURUxJU1QnPjxmaWxlbmFtZT5TREtfTE9DQUxfQ09ORl9XSElURUxJU1Q8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiB2YXJpYWJsZXMgYWxsb3dlZCB0aHJvdWdoIGZyb20gdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGludG8gdGhlIGV4dGVuc2libGUgU0RLIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItU0RLX0xPQ0FMX0NPTkZfQkxBQ0tMSVNUJz48ZmlsZW5hbWU+U0RLX0xPQ0FMX0NPTkZfQkxBQ0tMSVNUPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgdmFyaWFibGVzIG5vdCBhbGxvd2VkIHRocm91Z2ggZnJvbSB0aGUgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIGNvbmZpZ3VyYXRpb24gaW50byB0aGUgZXh0ZW5zaWJsZSBTREsgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfSU5IRVJJVF9CTEFDS0xJU1QnPjxmaWxlbmFtZT5TREtfSU5IRVJJVF9CTEFDS0xJU1Q8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBjbGFzc2VzIHRvIHJlbW92ZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU5IRVJJVCc+PGZpbGVuYW1lPklOSEVSSVQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgZ2xvYmFsbHkgd2l0aGluIHRoZSBleHRlbnNpYmxlIFNESyBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWRldnRvb2wtcmVmZXJlbmNlLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWRldnRvb2wtcmVmZXJlbmNlLnhtbAppbmRleCA5OWQ1YTUyLi5lMjliZjg5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1kZXZ0b29sLXJlZmVyZW5jZS54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtZGV2dG9vbC1yZWZlcmVuY2UueG1sCkBAIC0yMCw4ICsyMCw4IEBACiAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBhcHBseSB0aGUgY29tbWFuZCB3aGVuIHVzaW5nIHRoZQogICAgICAgICBleHRlbnNpYmxlIFNESywgc2VlIHRoZQogICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfU0RLX1VSTDsjc2RrLWV4dGVuc2libGUnPlVzaW5nIHRoZSBFeHRlbnNpYmxlIFNESzwvdWxpbms+IgotICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoU0RLKSBEZXZlbG9wZXIncwotICAgICAgICBHdWlkZS4KKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBhbmQgdGhlCisgICAgICAgIEV4dGVuc2libGUgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChlU0RLKSBtYW51YWwuCiAgICAgPC9wYXJhPgogCiAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtZ2V0dGluZy1oZWxwJz4KQEAgLTM1LDQ1ICszNSw1OSBAQAogICAgICAgICAgICAgdGhlIGNvbW1hbmRzOgogICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAkIGRldnRvb2wgLS1oZWxwCi0gICAgIHVzYWdlOiBkZXZ0b29sIFstLWJhc2VwYXRoIEJBU0VQQVRIXSBbLS1iYnBhdGggQkJQQVRIXSBbLWRdIFstcV0KLSAgICAgICAgICAgICAgICAgICAgWy0tY29sb3IgQ09MT1JdIFstaF0KLSAgICAgICAgICAgICAgICAgICAgJmx0O3N1YmNvbW1hbmQmZ3Q7IC4uLgorICAgICB1c2FnZTogZGV2dG9vbCBhZGQgWy1oXSBbLS1zYW1lLWRpciB8IC0tbm8tc2FtZS1kaXJdIFstLWZldGNoIFVSSV0KKyAgICAgICAgICAgICAgICAgICAgICAgIFstLWZldGNoLWRldl0gWy0tdmVyc2lvbiBWRVJTSU9OXSBbLS1uby1naXRdCisgICAgICAgICAgICAgICAgICAgICAgICBbLS1zcmNyZXYgU1JDUkVWIHwgLS1hdXRvcmV2XSBbLS1zcmNicmFuY2ggU1JDQlJBTkNIXQorICAgICAgICAgICAgICAgICAgICAgICAgWy0tYmluYXJ5XSBbLS1hbHNvLW5hdGl2ZV0gWy0tc3JjLXN1YmRpciBTVUJESVJdCisgICAgICAgICAgICAgICAgICAgICAgICBbLS1taXJyb3JzXSBbLS1wcm92aWRlcyBQUk9WSURFU10KKyAgICAgICAgICAgICAgICAgICAgICAgIFtyZWNpcGVuYW1lXSBbc3JjdHJlZV0gW2ZldGNodXJpXQogCi0gICAgIE9wZW5FbWJlZGRlZCBkZXZlbG9wbWVudCB0b29sCisgICAgIEFkZHMgYSBuZXcgcmVjaXBlIHRvIHRoZSB3b3Jrc3BhY2UgdG8gYnVpbGQgYSBzcGVjaWZpZWQgc291cmNlIHRyZWUuIENhbgorICAgICBvcHRpb25hbGx5IGZldGNoIGEgcmVtb3RlIFVSSSBhbmQgdW5wYWNrIGl0IHRvIGNyZWF0ZSB0aGUgc291cmNlIHRyZWUuCisKKyAgICAgYXJndW1lbnRzOgorICAgICAgIHJlY2lwZW5hbWUgICAgICAgICAgICBOYW1lIGZvciBuZXcgcmVjaXBlIHRvIGFkZCAoanVzdCBuYW1lIC0gbm8gdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCBvciBleHRlbnNpb24pLiBJZiBub3Qgc3BlY2lmaWVkLCB3aWxsIGF0dGVtcHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYXV0by1kZXRlY3QgaXQuCisgICAgICAgc3JjdHJlZSAgICAgICAgICAgICAgIFBhdGggdG8gZXh0ZXJuYWwgc291cmNlIHRyZWUuIElmIG5vdCBzcGVjaWZpZWQsIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9ob21lLzxyZXBsYWNlYWJsZT51c2VyPC9yZXBsYWNlYWJsZT4vcG9reS9idWlsZC93b3Jrc3BhY2Uvc291cmNlcyB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQuCisgICAgICAgZmV0Y2h1cmkgICAgICAgICAgICAgIEZldGNoIHRoZSBzcGVjaWZpZWQgVVJJIGFuZCBleHRyYWN0IGl0IHRvIGNyZWF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc291cmNlIHRyZWUKIAogICAgICBvcHRpb25zOgotICAgICAgIC0tYmFzZXBhdGggQkFTRVBBVEggIEJhc2UgZGlyZWN0b3J5IG9mIFNESyAvIGJ1aWxkIGRpcmVjdG9yeQotICAgICAgIC0tYmJwYXRoIEJCUEFUSCAgICAgIEV4cGxpY2l0bHkgc3BlY2lmeSB0aGUgQkJQQVRILCByYXRoZXIgdGhhbiBnZXR0aW5nIGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgbWV0YWRhdGEKLSAgICAgICAtZCwgLS1kZWJ1ZyAgICAgICAgICBFbmFibGUgZGVidWcgb3V0cHV0Ci0gICAgICAgLXEsIC0tcXVpZXQgICAgICAgICAgUHJpbnQgb25seSBlcnJvcnMKLSAgICAgICAtLWNvbG9yIENPTE9SICAgICAgICBDb2xvcml6ZSBvdXRwdXQgKHdoZXJlIENPTE9SIGlzIGF1dG8sIGFsd2F5cywgbmV2ZXIpCi0gICAgICAgLWgsIC0taGVscCAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAotCi0gICAgIHN1YmNvbW1hbmRzOgotICAgICAgIEJlZ2lubmluZyB3b3JrIG9uIGEgcmVjaXBlOgotICAgICAgICAgYWRkICAgICAgICAgICAgICAgICAgQWRkIGEgbmV3IHJlY2lwZQotICAgICAgICAgbW9kaWZ5ICAgICAgICAgICAgICAgTW9kaWZ5IHRoZSBzb3VyY2UgZm9yIGFuIGV4aXN0aW5nIHJlY2lwZQotICAgICAgICAgdXBncmFkZSAgICAgICAgICAgICAgVXBncmFkZSBhbiBleGlzdGluZyByZWNpcGUKLSAgICAgICBHZXR0aW5nIGluZm9ybWF0aW9uOgotICAgICAgICAgc3RhdHVzICAgICAgICAgICAgICAgU2hvdyB3b3Jrc3BhY2Ugc3RhdHVzCi0gICAgICAgICBzZWFyY2ggICAgICAgICAgICAgICBTZWFyY2ggYXZhaWxhYmxlIHJlY2lwZXMKLSAgICAgICBXb3JraW5nIG9uIGEgcmVjaXBlIGluIHRoZSB3b3Jrc3BhY2U6Ci0gICAgICAgICBlZGl0LXJlY2lwZSAgICAgICAgICBFZGl0IGEgcmVjaXBlIGZpbGUgaW4geW91ciB3b3Jrc3BhY2UKLSAgICAgICAgIGNvbmZpZ3VyZS1oZWxwICAgICAgIEdldCBoZWxwIG9uIGNvbmZpZ3VyZSBzY3JpcHQgb3B0aW9ucwotICAgICAgICAgYnVpbGQgICAgICAgICAgICAgICAgQnVpbGQgYSByZWNpcGUKLSAgICAgICAgIHVwZGF0ZS1yZWNpcGUgICAgICAgIEFwcGx5IGNoYW5nZXMgZnJvbSBleHRlcm5hbCBzb3VyY2UgdHJlZSB0byByZWNpcGUKLSAgICAgICAgIHJlc2V0ICAgICAgICAgICAgICAgIFJlbW92ZSBhIHJlY2lwZSBmcm9tIHlvdXIgd29ya3NwYWNlCi0gICAgICAgICBmaW5pc2ggICAgICAgICAgICAgICBGaW5pc2ggd29ya2luZyBvbiBhIHJlY2lwZSBpbiB5b3VyIHdvcmtzcGFjZQotICAgICAgIFRlc3RpbmcgY2hhbmdlcyBvbiB0YXJnZXQ6Ci0gICAgICAgICBkZXBsb3ktdGFyZ2V0ICAgICAgICBEZXBsb3kgcmVjaXBlIG91dHB1dCBmaWxlcyB0byBsaXZlIHRhcmdldCBtYWNoaW5lCi0gICAgICAgICB1bmRlcGxveS10YXJnZXQgICAgICBVbmRlcGxveSByZWNpcGUgb3V0cHV0IGZpbGVzIGluIGxpdmUgdGFyZ2V0IG1hY2hpbmUKLSAgICAgICAgIGJ1aWxkLWltYWdlICAgICAgICAgIEJ1aWxkIGltYWdlIGluY2x1ZGluZyB3b3Jrc3BhY2UgcmVjaXBlIHBhY2thZ2VzCi0gICAgICAgQWR2YW5jZWQ6Ci0gICAgICAgICBjcmVhdGUtd29ya3NwYWNlICAgICBTZXQgdXAgd29ya3NwYWNlIGluIGFuIGFsdGVybmF0aXZlIGxvY2F0aW9uCi0gICAgICAgICBleHRyYWN0ICAgICAgICAgICAgICBFeHRyYWN0IHRoZSBzb3VyY2UgZm9yIGFuIGV4aXN0aW5nIHJlY2lwZQotICAgICAgICAgc3luYyAgICAgICAgICAgICAgICAgU3luY2hyb25pemUgdGhlIHNvdXJjZSB0cmVlIGZvciBhbiBleGlzdGluZyByZWNpcGUKLSAgICAgVXNlIGRldnRvb2wgJmx0O3N1YmNvbW1hbmQmZ3Q7IC0taGVscCB0byBnZXQgaGVscCBvbiBhIHNwZWNpZmljIGNvbW1hbmQKKyAgICAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgIC0tc2FtZS1kaXIsIC1zICAgICAgICBCdWlsZCBpbiBzYW1lIGRpcmVjdG9yeSBhcyBzb3VyY2UKKyAgICAgICAtLW5vLXNhbWUtZGlyICAgICAgICAgRm9yY2UgYnVpbGQgaW4gYSBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnkKKyAgICAgICAtLWZldGNoIFVSSSwgLWYgVVJJICAgRmV0Y2ggdGhlIHNwZWNpZmllZCBVUkkgYW5kIGV4dHJhY3QgaXQgdG8gY3JlYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzb3VyY2UgdHJlZSAoZGVwcmVjYXRlZCAtIHBhc3MgYXMgcG9zaXRpb25hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCBpbnN0ZWFkKQorICAgICAgIC0tZmV0Y2gtZGV2ICAgICAgICAgICBGb3IgbnBtLCBhbHNvIGZldGNoIGRldkRlcGVuZGVuY2llcworICAgICAgIC0tdmVyc2lvbiBWRVJTSU9OLCAtViBWRVJTSU9OCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gdG8gdXNlIHdpdGhpbiByZWNpcGUgKFBWKQorICAgICAgIC0tbm8tZ2l0LCAtZyAgICAgICAgICBJZiBmZXRjaGluZyBzb3VyY2UsIGRvIG5vdCBzZXQgdXAgc291cmNlIHRyZWUgYXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaXQgcmVwb3NpdG9yeQorICAgICAgIC0tc3JjcmV2IFNSQ1JFViwgLVMgU1JDUkVWCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZSByZXZpc2lvbiB0byBmZXRjaCBpZiBmZXRjaGluZyBmcm9tIGFuIFNDTQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNoIGFzIGdpdCAoZGVmYXVsdCBsYXRlc3QpCisgICAgICAgLS1hdXRvcmV2LCAtYSAgICAgICAgIFdoZW4gZmV0Y2hpbmcgZnJvbSBhIGdpdCByZXBvc2l0b3J5LCBzZXQgU1JDUkVWIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZWNpcGUgdG8gYSBmbG9hdGluZyByZXZpc2lvbiBpbnN0ZWFkIG9mIGZpeGVkCisgICAgICAgLS1zcmNicmFuY2ggU1JDQlJBTkNILCAtQiBTUkNCUkFOQ0gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJhbmNoIGluIHNvdXJjZSByZXBvc2l0b3J5IGlmIGZldGNoaW5nIGZyb20gYW4gU0NNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgZ2l0IChkZWZhdWx0IG1hc3RlcikKKyAgICAgICAtLWJpbmFyeSwgLWIgICAgICAgICAgVHJlYXQgdGhlIHNvdXJjZSB0cmVlIGFzIHNvbWV0aGluZyB0aGF0IHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgdmVyYmF0aW0gKG5vIGNvbXBpbGF0aW9uLCBzYW1lIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUpLiBVc2VmdWwgd2l0aCBiaW5hcnkgcGFja2FnZXMgZS5nLiBSUE1zLgorICAgICAgIC0tYWxzby1uYXRpdmUgICAgICAgICBBbHNvIGFkZCBuYXRpdmUgdmFyaWFudCAoaS5lLiBzdXBwb3J0IGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBmb3IgdGhlIGJ1aWxkIGhvc3QgYXMgd2VsbCBhcyB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUpCisgICAgICAgLS1zcmMtc3ViZGlyIFNVQkRJUiAgIFNwZWNpZnkgc3ViZGlyZWN0b3J5IHdpdGhpbiBzb3VyY2UgdHJlZSB0byB1c2UKKyAgICAgICAtLW1pcnJvcnMgICAgICAgICAgICAgRW5hYmxlIFBSRU1JUlJPUlMgYW5kIE1JUlJPUlMgZm9yIHNvdXJjZSB0cmVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoaW5nIChkaXNhYmxlIGJ5IGRlZmF1bHQpLgorICAgICAgIC0tcHJvdmlkZXMgUFJPVklERVMsIC1wIFBST1ZJREVTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZnkgYW4gYWxpYXMgZm9yIHRoZSBpdGVtIHByb3ZpZGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUuIEUuZy4gdmlydHVhbC9saWJnbAogICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICA8L3BhcmE+CiAKQEAgLTE5NCw5ICsyMDgsOSBAQAogICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIGNyZWF0ZXMgYW5kIGFkZHMgYSBuZXcgcmVjaXBlIG5hbWVkCiAgICAgICAgICAgICA8ZmlsZW5hbWU+amFja3NvbjwvZmlsZW5hbWU+IHRvIGEgd29ya3NwYWNlIGxheWVyIHRoZSB0b29sIGNyZWF0ZXMuCiAgICAgICAgICAgICBUaGUgc291cmNlIGNvZGUgYnVpbHQgYnkgdGhlIHJlY2lwZXMgcmVzaWRlcyBpbgotICAgICAgICAgICAgPGZpbGVuYW1lPi9ob21lL3Njb3R0cmlmL3NvdXJjZXMvamFja3NvbjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgPGZpbGVuYW1lPi9ob21lLzxyZXBsYWNlYWJsZT51c2VyPC9yZXBsYWNlYWJsZT4vc291cmNlcy9qYWNrc29uPC9maWxlbmFtZT46CiAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgZGV2dG9vbCBhZGQgamFja3NvbiAvaG9tZS9zY290dHJpZi9zb3VyY2VzL2phY2tzb24KKyAgICAgJCBkZXZ0b29sIGFkZCBqYWNrc29uIC9ob21lLzxyZXBsYWNlYWJsZT51c2VyPC9yZXBsYWNlYWJsZT4vc291cmNlcy9qYWNrc29uCiAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgIDwvcGFyYT4KIApAQCAtMjE0LDE4ICsyMjgsNTIgQEAKICAgICAgICAgICAgIGFwcGVuZCBmaWxlcywgYW5kIHNvdXJjZSBmaWxlcyBpbnRvIHRoZSBleGlzdGluZyB3b3Jrc3BhY2UgbGF5ZXIuCiAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgaXMgY3JlYXRlZCB0byBwb2ludAogICAgICAgICAgICAgdG8gdGhlIGV4dGVybmFsIHNvdXJjZSB0cmVlLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgSWYgeW91ciByZWNpcGUgaGFzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIGRlZmluZWQsIHlvdSBtdXN0IGJlIHN1cmUKKyAgICAgICAgICAgICAgICB0aGF0IHRoZXNlIHBhY2thZ2VzIGV4aXN0IG9uIHRoZSB0YXJnZXQgaGFyZHdhcmUgYmVmb3JlIGF0dGVtcHRpbmcKKyAgICAgICAgICAgICAgICB0byBydW4geW91ciBhcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgICBJZiBkZXBlbmRlbnQgcGFja2FnZXMgKGUuZy4gbGlicmFyaWVzKSBkbyBub3QgZXhpc3Qgb24gdGhlIHRhcmdldCwKKyAgICAgICAgICAgICAgICB5b3VyIGFwcGxpY2F0aW9uLCB3aGVuIHJ1biwgd2lsbCBmYWlsIHRvIGZpbmQgdGhvc2UgZnVuY3Rpb25zLgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2RldnRvb2wtZGVwbG95aW5nLXlvdXItc29mdHdhcmUtb24tdGhlLXRhcmdldC1tYWNoaW5lJz5EZXBsb3lpbmcgWW91ciBTb2Z0d2FyZSBvbiB0aGUgVGFyZ2V0IE1hY2hpbmU8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8L25vdGU+CiAgICAgICAgIDwvcGFyYT4KIAotICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgIElmIHlvdXIgcmVjaXBlIGhhcyBydW50aW1lIGRlcGVuZGVuY2llcyBkZWZpbmVkLCB5b3UgbXVzdCBiZSBzdXJlCi0gICAgICAgICAgICB0aGF0IHRoZXNlIHBhY2thZ2VzIGV4aXN0IG9uIHRoZSB0YXJnZXQgaGFyZHdhcmUgYmVmb3JlIGF0dGVtcHRpbmcKLSAgICAgICAgICAgIHRvIHJ1biB5b3VyIGFwcGxpY2F0aW9uLgotICAgICAgICAgICAgSWYgZGVwZW5kZW50IHBhY2thZ2VzIChlLmcuIGxpYnJhcmllcykgZG8gbm90IGV4aXN0IG9uIHRoZSB0YXJnZXQsCi0gICAgICAgICAgICB5b3VyIGFwcGxpY2F0aW9uLCB3aGVuIHJ1biwgd2lsbCBmYWlsIHRvIGZpbmQgdGhvc2UgZnVuY3Rpb25zLgotICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKLSAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdkZXZ0b29sLWRlcGxveWluZy15b3VyLXNvZnR3YXJlLW9uLXRoZS10YXJnZXQtbWFjaGluZSc+RGVwbG95aW5nIFlvdXIgU29mdHdhcmUgb24gdGhlIFRhcmdldCBNYWNoaW5lPC9saW5rPiIKLSAgICAgICAgICAgIHNlY3Rpb24uCi0gICAgICAgIDwvbm90ZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCeSBkZWZhdWx0LCA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiB1c2VzIHRoZSBsYXRlc3QKKyAgICAgICAgICAgIHJldmlzaW9uIChpLmUuIG1hc3Rlcikgd2hlbiB1bnBhY2tpbmcgZmlsZXMgZnJvbSBhIHJlbW90ZSBVUkkuCisgICAgICAgICAgICBJbiBzb21lIGNhc2VzLCB5b3UgbWlnaHQgd2FudCB0byBzcGVjaWZ5IGEgc291cmNlIHJldmlzaW9uIGJ5CisgICAgICAgICAgICBicmFuY2gsIHRhZywgb3IgY29tbWl0IGhhc2guIFlvdSBjYW4gc3BlY2lmeSB0aGVzZSBvcHRpb25zIHdoZW4KKyAgICAgICAgICAgIHVzaW5nIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHNwZWNpZnkgYSBzb3VyY2UgYnJhbmNoLCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tLXNyY2JyYW5jaDwvZmlsZW5hbWU+IG9wdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgYWRkIC0tc3JjYnJhbmNoICZESVNUUk9fTkFNRV9OT19DQVA7IGphY2tzb24gL2hvbWUvPHJlcGxhY2VhYmxlPnVzZXI8L3JlcGxhY2VhYmxlPi9zb3VyY2VzL2phY2tzb24KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgeW91IGFyZSBjaGVja2luZyBvdXQgdGhlCisgICAgICAgICAgICAgICAgICAgICZESVNUUk9fTkFNRV9OT19DQVA7IGJyYW5jaC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBzcGVjaWZ5IGEgc3BlY2lmaWMgdGFnIG9yIGNvbW1pdCBoYXNoLCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tLXNyY3JldjwvZmlsZW5hbWU+IG9wdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgYWRkIC0tc3JjcmV2ICZESVNUUk9fUkVMX1RBRzsgamFja3NvbiAvaG9tZS88cmVwbGFjZWFibGU+dXNlcjwvcmVwbGFjZWFibGU+L3NvdXJjZXMvamFja3NvbgorICAgICAkIGRldnRvb2wgYWRkIC0tc3JjcmV2IDxyZXBsYWNlYWJsZT5zb21lX2NvbW1pdF9oYXNoPC9yZXBsYWNlYWJsZT4gL2hvbWUvPHJlcGxhY2VhYmxlPnVzZXI8L3JlcGxhY2VhYmxlPi9zb3VyY2VzL2phY2tzb24KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgcHJldmlvdXMgZXhhbXBsZXMgY2hlY2sgb3V0IHRoZSAmRElTVFJPX1JFTF9UQUc7IHRhZworICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIGNvbW1pdCBhc3NvY2lhdGVkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5zb21lX2NvbW1pdF9oYXNoPC9yZXBsYWNlYWJsZT4gaGFzaC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIElmIHlvdSBwcmVmZXIgdG8gdXNlIHRoZSBsYXRlc3QgcmV2aXNpb24gZXZlcnkgdGltZSB0aGUgcmVjaXBlIGlzCisgICAgICAgICAgICAgICAgYnVpbHQsIHVzZSB0aGUgb3B0aW9ucyA8ZmlsZW5hbWU+LS1hdXRvcmV2PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBvciA8ZmlsZW5hbWU+LWE8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgogICAgIDwvc2VjdGlvbj4KIAogICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLWV4dHJhY3RpbmctdGhlLXNvdXJjZS1mb3ItYW4tZXhpc3RpbmctcmVjaXBlJz4KQEAgLTI3Niw3ICszMjQsNyBAQAogICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPiBjb21tYW5kIHRvIGJlZ2luCiAgICAgICAgICAgICBtb2RpZnlpbmcgdGhlIHNvdXJjZSBvZiBhbiBleGlzdGluZyByZWNpcGUuCiAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgaXMgdmVyeSBzaW1pbGFyIHRvIHRoZQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZGV2dG9vbC1hZGRpbmctYS1uZXctcmVjaXBlLXRvLXRoZS13b3Jrc3BhY2UnPjxmaWxlbmFtZT5hZGQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdkZXZ0b29sLWFkZGluZy1hLW5ldy1yZWNpcGUtdG8tdGhlLXdvcmtzcGFjZSc+PGZpbGVuYW1lPmFkZDwvZmlsZW5hbWU+PC9saW5rPgogICAgICAgICAgICAgY29tbWFuZCBleGNlcHQgdGhhdCBpdCBkb2VzIG5vdCBwaHlzaWNhbGx5IGNyZWF0ZSB0aGUKICAgICAgICAgICAgIHJlY2lwZSBpbiB0aGUgd29ya3NwYWNlIGxheWVyIGJlY2F1c2UgdGhlIHJlY2lwZSBhbHJlYWR5CiAgICAgICAgICAgICBleGlzdHMgaW4gYW4gYW5vdGhlciBsYXllci4KQEAgLTMzNCw3ICszODIsNyBAQAogICAgICAgICAgICAgdG8gdGhlIHNvdXJjZSBmaWxlcy4KICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3Uga25vdyB5b3UgYXJlIGdvaW5nIHRvIHdvcmsgb24gc29tZQogICAgICAgICAgICAgY29kZSwgeW91IGNvdWxkIGZpcnN0IHVzZSB0aGUKLSAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2RldnRvb2wtbW9kaWZ5aW5nLWEtcmVjaXBlJz48ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdkZXZ0b29sLW1vZGlmeWluZy1hLXJlY2lwZSc+PGZpbGVuYW1lPmRldnRvb2wgbW9kaWZ5PC9maWxlbmFtZT48L2xpbms+CiAgICAgICAgICAgICBjb21tYW5kIHRvIGV4dHJhY3QgdGhlIGNvZGUgYW5kIHNldCB1cCB0aGUgd29ya3NwYWNlLgogICAgICAgICAgICAgQWZ0ZXIgd2hpY2gsIHlvdSBjb3VsZCBtb2RpZnksIGNvbXBpbGUsIGFuZCB0ZXN0IHRoZSBjb2RlLgogICAgICAgICA8L3BhcmE+CkBAIC01NTYsNyArNjA0LDcgQEAKICAgICAgICAgICAgIHJlbW92ZSBkZXBsb3llZCBidWlsZCBvdXRwdXQgZnJvbSB0aGUgdGFyZ2V0IG1hY2hpbmUuCiAgICAgICAgICAgICBGb3IgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHVuZGVwbG95LXRhcmdldDwvZmlsZW5hbWU+IGNvbW1hbmQgdG8KICAgICAgICAgICAgIHdvcmssIHlvdSBtdXN0IGhhdmUgcHJldmlvdXNseSB1c2VkIHRoZQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZGV2dG9vbC1kZXBsb3lpbmcteW91ci1zb2Z0d2FyZS1vbi10aGUtdGFyZ2V0LW1hY2hpbmUnPjxmaWxlbmFtZT5kZXZ0b29sIGRlcGxveS10YXJnZXQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdkZXZ0b29sLWRlcGxveWluZy15b3VyLXNvZnR3YXJlLW9uLXRoZS10YXJnZXQtbWFjaGluZSc+PGZpbGVuYW1lPmRldnRvb2wgZGVwbG95LXRhcmdldDwvZmlsZW5hbWU+PC9saW5rPgogICAgICAgICAgICAgY29tbWFuZC4KICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgJCBkZXZ0b29sIHVuZGVwbG95LXRhcmdldCA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4mbmJzcDs8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4KQEAgLTU3Myw3ICs2MjEsNyBAQAogICAgICAgICA8cGFyYT4KICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgY3JlYXRlLXdvcmtzcGFjZTwvZmlsZW5hbWU+IGNvbW1hbmQgdG8KICAgICAgICAgICAgIGNyZWF0ZSBhIG5ldyB3b3Jrc3BhY2UgbGF5ZXIgaW4geW91cgotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KICAgICAgICAgICAgIFdoZW4geW91IGNyZWF0ZSBhIG5ldyB3b3Jrc3BhY2UgbGF5ZXIsIGl0IGlzIHBvcHVsYXRlZCB3aXRoIHRoZQogICAgICAgICAgICAgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+IGZpbGUgYW5kIHRoZQogICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb25seS4KQEAgLTYxNiw3ICs2NjQsNyBAQAogICAgICAkIGRldnRvb2wgc3RhdHVzCiAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgc2FtcGxlIG91dHB1dCBhZnRlciB1c2luZwotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZGV2dG9vbC1hZGRpbmctYS1uZXctcmVjaXBlLXRvLXRoZS13b3Jrc3BhY2UnPjxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2RldnRvb2wtYWRkaW5nLWEtbmV3LXJlY2lwZS10by10aGUtd29ya3NwYWNlJz48ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPjwvbGluaz4KICAgICAgICAgICAgIHRvIGNyZWF0ZSBhbmQgYWRkIHRoZSA8ZmlsZW5hbWU+bXRyXzAuODYuYmI8L2ZpbGVuYW1lPiByZWNpcGUKICAgICAgICAgICAgIHRvIHRoZSA8ZmlsZW5hbWU+d29ya3NwYWNlPC9maWxlbmFtZT4gZGlyZWN0b3J5OgogICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtZmVhdHVyZXMueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtZmVhdHVyZXMueG1sCmluZGV4IDdlMWM1ZWYuLjAyODU3ZGMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWZlYXR1cmVzLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1mZWF0dXJlcy54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8cGFyYT4KICAgICAgICAgT25lIG1ldGhvZCB5b3UgY2FuIHVzZSB0byBkZXRlcm1pbmUgd2hpY2ggcmVjaXBlcyBhcmUgY2hlY2tpbmcgdG8gc2VlIGlmIGEKICAgICAgICAgcGFydGljdWxhciBmZWF0dXJlIGlzIGNvbnRhaW5lZCBvciBub3QgaXMgdG8gPGZpbGVuYW1lPmdyZXA8L2ZpbGVuYW1lPiB0aHJvdWdoCi0gICAgICAgIHRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPgorICAgICAgICB0aGUgPGxpbmsgbGlua2VuZD0nbWV0YWRhdGEnPk1ldGFkYXRhPC9saW5rPgogICAgICAgICBmb3IgdGhlIGZlYXR1cmUuCiAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGRpc2NvdmVycyB0aGUgcmVjaXBlcyB3aG9zZSBidWlsZCBpcyBwb3RlbnRpYWxseQogICAgICAgICBjaGFuZ2VkIGJhc2VkIG9uIGEgZ2l2ZW4gZmVhdHVyZToKQEAgLTEzMiw3ICsxMzIsNyBAQAogICAgICAgICAgICAgVGhlc2Ugc2VsZWN0IGZlYXR1cmVzIG1ha2Ugc2Vuc2UgdG8gYmUgY29udHJvbGxlZCBib3RoIGF0CiAgICAgICAgICAgICB0aGUgbWFjaGluZSBhbmQgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gbGV2ZWwuCiAgICAgICAgICAgICBTZWUgdGhlCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ09NQklORURfRkVBVFVSRVMnPjxmaWxlbmFtZT5DT01CSU5FRF9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DT01CSU5FRF9GRUFUVVJFUyc+PGZpbGVuYW1lPkNPTUJJTkVEX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CiAgICAgICAgICAgICB2YXJpYWJsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgPC9wYXJhPgogCkBAIC0xNTEsOCArMTUxLDggQEAKICAgICAgICAgICAgICAgICAgICAgaXMgdXNlZC4KICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQogICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfU0RLX1VSTDsjYWRkaW5nLWFwaS1kb2N1bWVudGF0aW9uLXRvLXRoZS1zdGFuZGFyZC1zZGsnPkFkZGluZyBBUEkgRG9jdW1lbnRhdGlvbiB0byB0aGUgU3RhbmRhcmQgU0RLPC91bGluaz4iCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspCi0gICAgICAgICAgICAgICAgICAgIERldmVsb3BlcidzIEd1aWRlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BtZW50IGFuZAorICAgICAgICAgICAgICAgICAgICB0aGUgRXh0ZW5zaWJsZSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKGVTREspIG1hbnVhbC4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5ibHVldG9vdGg6PC9lbXBoYXNpcz4gSW5jbHVkZQogICAgICAgICAgICAgICAgICAgICBibHVldG9vdGggc3VwcG9ydCAoaW50ZWdyYXRlZCBCVCBvbmx5KS48L3BhcmE+PC9saXN0aXRlbT4KQEAgLTIxNyw3ICsyMTcsNyBAQAogICAgICAgICAgICAgICAgICAgICB0aGUgcGFja2FnZSB0ZXN0cyB3aGVyZSBzdXBwb3J0ZWQgYnkgaW5kaXZpZHVhbCByZWNpcGVzLgogICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYWNrYWdlIHRlc3RzLCBzZWUgdGhlCiAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN0ZXN0aW5nLXBhY2thZ2VzLXdpdGgtcHRlc3QnPlRlc3RpbmcgUGFja2FnZXMgV2l0aCBwdGVzdDwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwuCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+c21iZnM6PC9lbXBoYXNpcz4gSW5jbHVkZSBTTUIgbmV0d29ya3MKICAgICAgICAgICAgICAgICAgICAgY2xpZW50IHN1cHBvcnQgKGZvciBtb3VudGluZyBTYW1iYS9NaWNyb3NvZnQgV2luZG93cyBzaGFyZXMKQEAgLTMwNCw3ICszMDQsNyBAQAogICAgICAgICAgICAgICAgICAgICA8bm90ZT4KICAgICAgICAgICAgICAgICAgICAgICAgIFRvIG1ha2UgdGhlIDxmaWxlbmFtZT4vdmFyL2xvZzwvZmlsZW5hbWU+IGRpcmVjdG9yeQogICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIHRhcmdldCBwZXJzaXN0ZW50LCB1c2UgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVk9MQVRJTEVfTE9HX0RJUic+PGZpbGVuYW1lPlZPTEFUSUxFX0xPR19ESVI8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVk9MQVRJTEVfTE9HX0RJUic+PGZpbGVuYW1lPlZPTEFUSUxFX0xPR19ESVI8L2ZpbGVuYW1lPjwvbGluaz4KICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGJ5IHNldHRpbmcgaXQgdG8gIm5vIi4KICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KQEAgLTMxNSw4ICszMTUsOCBAQAogICAgICAgICAgICAgICAgICAgICBDcmVhdGVzIGFuIGltYWdlIHdob3NlIHJvb3QgZmlsZXN5c3RlbSBpcyByZWFkLW9ubHkuCiAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NyZWF0aW5nLWEtcmVhZC1vbmx5LXJvb3QtZmlsZXN5c3RlbSc+Q3JlYXRpbmcgYSBSZWFkLU9ubHkgUm9vdCBGaWxlc3lzdGVtPC91bGluaz4iCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBtb3JlCi0gICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbCBmb3IKKyAgICAgICAgICAgICAgICAgICAgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5zcGxhc2g6PC9lbXBoYXNpcz4KICAgICAgICAgICAgICAgICAgICAgRW5hYmxlcyBzaG93aW5nIGEgc3BsYXNoIHNjcmVlbiBkdXJpbmcgYm9vdC4KQEAgLTM1Niw3ICszNTYsOCBAQAogICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGVyZjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+c3lzdGVtdGFwPC9maWxlbmFtZT4sCiAgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+TFRUbmc8L2ZpbGVuYW1lPi4KICAgICAgICAgICAgICAgICAgICAgRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gb24gdXNlci1zcGFjZSB0b29scywgc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyNzZGstbWFudWFsJz5Zb2N0byBQcm9qZWN0IFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoU0RLKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyc+WW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBhbmQgdGhlIEV4dGVuc2libGUgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChlU0RLKTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIG1hbnVhbC4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5zc2gtc2VydmVyLWRyb3BiZWFyOjwvZW1waGFzaXM+CiAgICAgICAgICAgICAgICAgICAgIEluc3RhbGxzIHRoZSBEcm9wYmVhciBtaW5pbWFsIFNTSCBzZXJ2ZXIuCkBAIC0zNzQsNyArMzc1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN0cmFjZTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+Z2RiPC9maWxlbmFtZT4uCiAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBHREIsIHNlZSB0aGUKICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BsYXRkZXYtZ2RiLXJlbW90ZWRlYnVnJz5EZWJ1Z2dpbmcgV2l0aCB0aGUgR05VIFByb2plY3QgRGVidWdnZXIgKEdEQikgUmVtb3RlbHk8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdHJhY2luZyBhbmQgcHJvZmlsaW5nLCBzZWUgdGhlCiAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1BST0ZfVVJMOyc+WW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsPC91bGluaz4uCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtaW1hZ2VzLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWltYWdlcy54bWwKaW5kZXggZjIyMDk2OC4uYzc1MmY5NCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtaW1hZ2VzLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1pbWFnZXMueG1sCkBAIC0zMCw4ICszMCw4IEBACiAgICAgPHBhcmE+CiAgICAgICAgIEZyb20gd2l0aGluIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IEdpdCByZXBvc2l0b3J5LCB5b3UgY2FuIHVzZQogICAgICAgICB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gZGlzcGxheSB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB3aXRoaW4gdGhlCi0gICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgotICAgICAgICB0aGF0IGNvbnRhaW5lIGltYWdlIHJlY2lwZSBmaWxlczoKKyAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgdGhhdCBjb250YWluIGltYWdlIHJlY2lwZSBmaWxlczoKICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAkIGxzIG1ldGEqL3JlY2lwZXMqL2ltYWdlcy8qLmJiCiAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KQEAgLTE0MCw3ICsxNDAsNyBAQAogICAgICAgICAgICAgICAgIHNlY29uZCBpbWFnZSB0byBiZSB0ZXN0ZWQuCiAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcnVudGltZSB0ZXN0aW5nIGluIHRoZQogICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwZXJmb3JtaW5nLWF1dG9tYXRlZC1ydW50aW1lLXRlc3RpbmcnPlBlcmZvcm1pbmcgQXV0b21hdGVkIFJ1bnRpbWUgVGVzdGluZzwvdWxpbms+IgotICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLXRlc3RtYXN0ZXItaW5pdHJhbWZzPC9maWxlbmFtZT46CiAgICAgICAgICAgICAgICAgQSBSQU0tYmFzZWQgSW5pdGlhbCBSb290IEZpbGVzeXN0ZW0gKGluaXRyYW1mcykgaW1hZ2UgdGFpbG9yZWQgZm9yCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1raWNrc3RhcnQueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYta2lja3N0YXJ0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGQzNmIyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYta2lja3N0YXJ0LnhtbApAQCAtMCwwICsxLDI4NCBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J3JlZi1raWNrc3RhcnQnPgorPHRpdGxlPk9wZW5FbWJlZGRlZCBLaWNrc3RhcnQgKDxmaWxlbmFtZT4ud2tzPC9maWxlbmFtZT4pIFJlZmVyZW5jZTwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0nb3BlbmVtYmVkZGVkLWtpY2tzdGFydC13a3MtcmVmZXJlbmNlJz4KKyAgICAgICAgPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgY3VycmVudCBXaWMgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgb25seSB0aGUgYmFzaWMga2lja3N0YXJ0CisgICAgICAgICAgICBwYXJ0aXRpb25pbmcgY29tbWFuZHM6CisgICAgICAgICAgICA8ZmlsZW5hbWU+cGFydGl0aW9uPC9maWxlbmFtZT4gKG9yIDxmaWxlbmFtZT5wYXJ0PC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZvciBzaG9ydCkgYW5kIDxmaWxlbmFtZT5ib290bG9hZGVyPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBGdXR1cmUgdXBkYXRlcyB3aWxsIGltcGxlbWVudCBtb3JlIGNvbW1hbmRzIGFuZCBvcHRpb25zLgorICAgICAgICAgICAgICAgIElmIHlvdSB1c2UgYW55dGhpbmcgdGhhdCBpcyBub3Qgc3BlY2lmaWNhbGx5IHN1cHBvcnRlZCwgcmVzdWx0cworICAgICAgICAgICAgICAgIGNhbiBiZSB1bnByZWRpY3RhYmxlLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGNoYXB0ZXIgcHJvdmlkZXMgYSByZWZlcmVuY2Ugb24gdGhlIGF2YWlsYWJsZSBraWNrc3RhcnQKKyAgICAgICAgICAgIGNvbW1hbmRzLgorICAgICAgICAgICAgVGhlIGluZm9ybWF0aW9uIGxpc3RzIHRoZSBjb21tYW5kcywgdGhlaXIgc3ludGF4LCBhbmQgbWVhbmluZ3MuCisgICAgICAgICAgICBLaWNrc3RhcnQgY29tbWFuZHMgYXJlIGJhc2VkIG9uIHRoZSBGZWRvcmEga2lja3N0YXJ0IHZlcnNpb25zIGJ1dAorICAgICAgICAgICAgd2l0aCBtb2RpZmljYXRpb25zIHRvIHJlZmxlY3QgV2ljIGNhcGFiaWxpdGllcy4KKyAgICAgICAgICAgIFlvdSBjYW4gc2VlIHRoZSBvcmlnaW5hbCBkb2N1bWVudGF0aW9uIGZvciB0aG9zZSBjb21tYW5kcyBhdCB0aGUKKyAgICAgICAgICAgIGZvbGxvd2luZyBsaW5rczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9BbmFjb25kYS9LaWNrc3RhcnQjcGFydF9vcl9wYXJ0aXRpb24nPmh0dHA6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93aWtpL0FuYWNvbmRhL0tpY2tzdGFydCNwYXJ0X29yX3BhcnRpdGlvbjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvQW5hY29uZGEvS2lja3N0YXJ0I2Jvb3Rsb2FkZXInPmh0dHA6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93aWtpL0FuYWNvbmRhL0tpY2tzdGFydCNib290bG9hZGVyPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdjb21tYW5kLXBhcnQtb3ItcGFydGl0aW9uJz4KKyAgICAgICAgPHRpdGxlPkNvbW1hbmQ6IHBhcnQgb3IgcGFydGl0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEVpdGhlciBvZiB0aGVzZSBjb21tYW5kcyBjcmVhdGUgYSBwYXJ0aXRpb24gb24gdGhlIHN5c3RlbSBhbmQgdXNlCisgICAgICAgICAgICB0aGUgZm9sbG93aW5nIHN5bnRheDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcGFydCBbPHJlcGxhY2VhYmxlPm1udHBvaW50PC9yZXBsYWNlYWJsZT5dCisgICAgIHBhcnRpdGlvbiBbPHJlcGxhY2VhYmxlPm1udHBvaW50PC9yZXBsYWNlYWJsZT5dCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHByb3ZpZGUgPHJlcGxhY2VhYmxlPm1udHBvaW50PC9yZXBsYWNlYWJsZT4sIFdpYworICAgICAgICAgICAgY3JlYXRlcyBhIHBhcnRpdGlvbiBidXQgZG9lcyBub3QgbW91bnQgaXQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPm1udHBvaW50PC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiBpcworICAgICAgICAgICAgd2hlcmUgdGhlIHBhcnRpdGlvbiB3aWxsIGJlIG1vdW50ZWQgYW5kIG11c3QgYmUgb2Ygb25lIG9mIHRoZQorICAgICAgICAgICAgZm9sbG93aW5nIGZvcm1zOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vPHJlcGxhY2VhYmxlPnBhdGg8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgIi8iLCAiL3VzciIsIG9yICIvaG9tZSIKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3dhcDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBUaGUgY3JlYXRlZCBwYXJ0aXRpb24gaXMgdXNlZCBhcyBzd2FwIHNwYWNlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTcGVjaWZ5aW5nIGEgPHJlcGxhY2VhYmxlPm1udHBvaW50PC9yZXBsYWNlYWJsZT4gY2F1c2VzIHRoZQorICAgICAgICAgICAgcGFydGl0aW9uIHRvIGF1dG9tYXRpY2FsbHkgYmUgbW91bnRlZC4KKyAgICAgICAgICAgIFdpYyBhY2hpZXZlcyB0aGlzIGJ5IGFkZGluZyBlbnRyaWVzIHRvIHRoZSBmaWxlc3lzdGVtIHRhYmxlIChmc3RhYikKKyAgICAgICAgICAgIGR1cmluZyBpbWFnZSBnZW5lcmF0aW9uLgorICAgICAgICAgICAgSW4gb3JkZXIgZm9yIHdpYyB0byBnZW5lcmF0ZSBhIHZhbGlkIGZzdGFiLCB5b3UgbXVzdCBhbHNvIHByb3ZpZGUKKyAgICAgICAgICAgIG9uZSBvZiB0aGUgPGZpbGVuYW1lPi0tb25kcml2ZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPi0tb25kaXNrPC9maWxlbmFtZT4sIG9yCisgICAgICAgICAgICA8ZmlsZW5hbWU+LS11c2UtdXVpZDwvZmlsZW5hbWU+IHBhcnRpdGlvbiBvcHRpb25zIGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICBjb21tYW5kLgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHVzaW5nICIvIiBhcyB0aGUgbW91bnRwb2ludC4KKyAgICAgICAgICAgIFRoZSBjb21tYW5kIHVzZXMgIi0tb25kaXNrIiB0byBmb3JjZSB0aGUgcGFydGl0aW9uIG9udG8gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+c2RiPC9maWxlbmFtZT4gZGlzazoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcGFydCAvIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBzZGIgLS1mc3R5cGU9ZXh0MyAtLWxhYmVsIHBsYXRmb3JtIC0tYWxpZ24gMTAyNAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlIGlzIGEgbGlzdCB0aGF0IGRlc2NyaWJlcyBvdGhlciBzdXBwb3J0ZWQgb3B0aW9ucyB5b3UgY2FuIHVzZQorICAgICAgICAgICAgd2l0aCB0aGUgPGZpbGVuYW1lPnBhcnQ8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYXJ0aXRpb248L2ZpbGVuYW1lPiBjb21tYW5kczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPi0tc2l6ZTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtaW5pbXVtIHBhcnRpdGlvbiBzaXplIGluIE1CeXRlcy4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmeSBhbiBpbnRlZ2VyIHZhbHVlIHN1Y2ggYXMgNTAwLgorICAgICAgICAgICAgICAgICAgICBEbyBub3QgYXBwZW5kIHRoZSBudW1iZXIgd2l0aCAiTUIiLgorICAgICAgICAgICAgICAgICAgICBZb3UgZG8gbm90IG5lZWQgdGhpcyBvcHRpb24gaWYgeW91IHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS1zb3VyY2U8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPi0tc291cmNlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gaXMgYSBXaWMtc3BlY2lmaWMgb3B0aW9uIHRoYXQgbmFtZXMgdGhlIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZGF0YSB0aGF0IHBvcHVsYXRlcyB0aGUgcGFydGl0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgbW9zdCBjb21tb24gdmFsdWUgZm9yIHRoaXMgb3B0aW9uIGlzICJyb290ZnMiLCBidXQgeW91CisgICAgICAgICAgICAgICAgICAgIGNhbiB1c2UgYW55IHZhbHVlIHRoYXQgbWFwcyB0byBhIHZhbGlkIHNvdXJjZSBwbHVnLWluLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIHNvdXJjZSBwbHVnLWlucywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nd2ljLXBsdWctaW5zLWludGVyZmFjZSc+V2ljIFBsdWctSW5zIEludGVyZmFjZTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSB1c2UgPGZpbGVuYW1lPi0tc291cmNlIHJvb3RmczwvZmlsZW5hbWU+LCBXaWMKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlcyBhIHBhcnRpdGlvbiBhcyBsYXJnZSBhcyBuZWVkZWQgYW5kIHRvIGZpbGwgaXQgd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgY29udGVudHMgb2YgdGhlIHJvb3QgZmlsZXN5c3RlbSBwb2ludGVkIHRvIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LXI8L2ZpbGVuYW1lPiBjb21tYW5kLWxpbmUgb3B0aW9uIG9yIHRoZQorICAgICAgICAgICAgICAgICAgICBlcXVpdmFsZW50IHJvb3RmcyBkZXJpdmVkIGZyb20gdGhlIDxmaWxlbmFtZT4tZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtbGluZSBvcHRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoZSBmaWxlc3lzdGVtIHR5cGUgdXNlZCB0byBjcmVhdGUgdGhlIHBhcnRpdGlvbiBpcyBkcml2ZW4KKyAgICAgICAgICAgICAgICAgICAgYnkgdGhlIHZhbHVlIG9mIHRoZSA8ZmlsZW5hbWU+LS1mc3R5cGU8L2ZpbGVuYW1lPiBvcHRpb24KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGZvciB0aGUgcGFydGl0aW9uLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIGVudHJ5IG9uIDxmaWxlbmFtZT4tLWZzdHlwZTwvZmlsZW5hbWU+IHRoYXQgZm9sbG93cworICAgICAgICAgICAgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi48L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS1zb3VyY2UgPHJlcGxhY2VhYmxlPnBsdWdpbi1uYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgV2ljIGNyZWF0ZXMgYSBwYXJ0aXRpb24gYXMgbGFyZ2UgYXMgbmVlZGVkIGFuZCBmaWxscyBpdAorICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUgcGFydGl0aW9uIHRoYXQgaXMgZ2VuZXJhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgcGx1Zy1pbiBuYW1lIHVzaW5nIHRoZSBkYXRhIHBvaW50ZWQgdG8gYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tcjwvZmlsZW5hbWU+IGNvbW1hbmQtbGluZSBvcHRpb24gb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIGVxdWl2YWxlbnQgcm9vdGZzIGRlcml2ZWQgZnJvbSB0aGUgPGZpbGVuYW1lPi1lPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZC1saW5lIG9wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgRXhhY3RseSB3aGF0IHRob3NlIGNvbnRlbnRzIGFuZCBmaWxlc3lzdGVtIHR5cGUgZW5kIHVwCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIGFyZSBkZXBlbmRlbnQgb24gdGhlIGdpdmVuIHBsdWctaW4gaW1wbGVtZW50YXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3UgZG8gbm90IHVzZSB0aGUgPGZpbGVuYW1lPi0tc291cmNlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uLCB0aGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGNvbW1hbmQgY3JlYXRlcyBhbgorICAgICAgICAgICAgICAgICAgICBlbXB0eSBwYXJ0aXRpb24uCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IG11c3QgdXNlIHRoZSA8ZmlsZW5hbWU+LS1zaXplPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uIHRvIHNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIGVtcHR5IHBhcnRpdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPi0tb25kaXNrPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPi0tb25kcml2ZTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEZvcmNlcyB0aGUgcGFydGl0aW9uIHRvIGJlIGNyZWF0ZWQgb24gYSBwYXJ0aWN1bGFyIGRpc2suCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT4tLWZzdHlwZTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFNldHMgdGhlIGZpbGUgc3lzdGVtIHR5cGUgZm9yIHRoZSBwYXJ0aXRpb24uCisgICAgICAgICAgICAgICAgICAgIFZhbGlkIHZhbHVlcyBhcmU6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmV4dDQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5leHQzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZXh0MjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ0cmZzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3F1YXNoZnM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zd2FwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT4tLWZzb3B0aW9uczwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGZyZWUtZm9ybSBzdHJpbmcgb2Ygb3B0aW9ucyB0byBiZSB1c2VkIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgbW91bnRpbmcgdGhlIGZpbGVzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc3RyaW5nIHdpbGwgYmUgY29waWVkIGludG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL2ZzdGFiPC9maWxlbmFtZT4gZmlsZSBvZiB0aGUgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBhbmQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHF1b3Rlcy4KKyAgICAgICAgICAgICAgICAgICAgSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgc3RyaW5nIGlzICJkZWZhdWx0cyIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT4tLWxhYmVsIGxhYmVsPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBsYWJlbCB0byBnaXZlIHRvIHRoZSBmaWxlc3lzdGVtIHRvIGJlIG1hZGUgb24KKyAgICAgICAgICAgICAgICAgICAgdGhlIHBhcnRpdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGdpdmVuIGxhYmVsIGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgZmlsZXN5c3RlbSwKKyAgICAgICAgICAgICAgICAgICAgYSBuZXcgbGFiZWwgaXMgY3JlYXRlZCBmb3IgdGhlIHBhcnRpdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPi0tYWN0aXZlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTWFya3MgdGhlIHBhcnRpdGlvbiBhcyBhY3RpdmUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT4tLWFsaWduIChpbiBLQnl0ZXMpPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gaXMgYSBXaWMtc3BlY2lmaWMgb3B0aW9uIHRoYXQgc2F5cyB0byBzdGFydCBhCisgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbiBvbiBhbiA8cmVwbGFjZWFibGU+eDwvcmVwbGFjZWFibGU+IEtCeXRlcworICAgICAgICAgICAgICAgICAgICBib3VuZGFyeS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPi0tbm8tdGFibGU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBpcyBhIFdpYy1zcGVjaWZpYyBvcHRpb24uCisgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRoZSBvcHRpb24gcmVzZXJ2ZXMgc3BhY2UgZm9yIHRoZSBwYXJ0aXRpb24gYW5kCisgICAgICAgICAgICAgICAgICAgIGNhdXNlcyBpdCB0byBiZWNvbWUgcG9wdWxhdGVkLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgcGFydGl0aW9uIGlzIG5vdCBhZGRlZCB0byB0aGUgcGFydGl0aW9uIHRhYmxlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+LS1leHRyYS1zcGFjZTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIGEgV2ljLXNwZWNpZmljIG9wdGlvbiB0aGF0IGFkZHMgZXh0cmEgc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGhlIHNwYWNlIGZpbGxlZCBieSB0aGUgY29udGVudCBvZiB0aGUgcGFydGl0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgZmluYWwgc2l6ZSBjYW4gZ28gYmV5b25kIHRoZSBzaXplIHNwZWNpZmllZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi0tc2l6ZTwvZmlsZW5hbWU+IG9wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAgTWJ5dGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+LS1vdmVyaGVhZC1mYWN0b3I8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBpcyBhIFdpYy1zcGVjaWZpYyBvcHRpb24gdGhhdCBtdWx0aXBsaWVzIHRoZQorICAgICAgICAgICAgICAgICAgICBzaXplIG9mIHRoZSBwYXJ0aXRpb24gYnkgdGhlIG9wdGlvbidzIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBzdXBwbHkgYSB2YWx1ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gIjEiLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAiMS4zIi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPi0tcGFydC10eXBlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gaXMgYSBXaWMtc3BlY2lmaWMgb3B0aW9uIHRoYXQgc3BlY2lmaWVzIHRoZQorICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb24gdHlwZSBnbG9iYWxseSB1bmlxdWUgaWRlbnRpZmllciAoR1VJRCkgZm9yIEdQVAorICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb25zLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlIGxpc3Qgb2YgcGFydGl0aW9uIHR5cGUgR1VJRHMgYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HVUlEX1BhcnRpdGlvbl9UYWJsZSNQYXJ0aXRpb25fdHlwZV9HVUlEcyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT4tLXVzZS11dWlkPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gaXMgYSBXaWMtc3BlY2lmaWMgb3B0aW9uIHRoYXQgY2F1c2VzIFdpYyB0bworICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZSBhIHJhbmRvbSBHVUlEIGZvciB0aGUgcGFydGl0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgZ2VuZXJhdGVkIGlkZW50aWZpZXIgaXMgdXNlZCBpbiB0aGUgYm9vdGxvYWRlcgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHRvIHNwZWNpZnkgdGhlIHJvb3QgcGFydGl0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+LS11dWlkPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gaXMgYSBXaWMtc3BlY2lmaWMgb3B0aW9uIHRoYXQgc3BlY2lmaWVzIHRoZQorICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb24gVVVJRC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdjb21tYW5kLWJvb3Rsb2FkZXInPgorICAgIDx0aXRsZT5Db21tYW5kOiBib290bG9hZGVyPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgY29tbWFuZCBzcGVjaWZpZXMgaG93IHRoZSBib290bG9hZGVyIHNob3VsZCBiZSBjb25maWd1cmVkIGFuZAorICAgICAgICAgICAgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBvcHRpb25zOgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgQm9vdGxvYWRlciBmdW5jdGlvbmFsaXR5IGFuZCBib290IHBhcnRpdGlvbnMgYXJlIGltcGxlbWVudGVkIGJ5CisgICAgICAgICAgICAgICAgdGhlIHZhcmlvdXMgPGZpbGVuYW1lPi0tc291cmNlPC9maWxlbmFtZT4gcGx1Zy1pbnMgdGhhdAorICAgICAgICAgICAgICAgIGltcGxlbWVudCBib290bG9hZGVyIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgICAgICAgICAgVGhlIGJvb3Rsb2FkZXIgY29tbWFuZCBlc3NlbnRpYWxseSBwcm92aWRlcyBhIG1lYW5zIG9mCisgICAgICAgICAgICAgICAgbW9kaWZ5aW5nIGJvb3Rsb2FkZXIgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPi0tdGltZW91dDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIHRoZSBib290bG9hZGVyIHRpbWVzCisgICAgICAgICAgICAgICAgICAgIG91dCBhbmQgYm9vdHMgdGhlIGRlZmF1bHQgb3B0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48ZmlsZW5hbWU+LS1hcHBlbmQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMga2VybmVsIHBhcmFtZXRlcnMuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIHBhcmFtZXRlcnMgd2lsbCBiZSBhZGRlZCB0byB0aGUgc3lzbGludXgKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkFQUEVORDwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT5ncnViPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAga2VybmVsIGNvbW1hbmQgbGluZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPi0tY29uZmlnZmlsZTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIHVzZXItZGVmaW5lZCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBib290bG9hZGVyLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHByb3ZpZGUgYSBmdWxsIHBhdGhuYW1lIGZvciB0aGUgZmlsZSBvciBhIGZpbGUgdGhhdAorICAgICAgICAgICAgICAgICAgICBleGlzdHMgaW4gdGhlIDxmaWxlbmFtZT5jYW5uZWQtd2tzPC9maWxlbmFtZT4gZm9sZGVyLgorICAgICAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBvdmVycmlkZXMgYWxsIG90aGVyIGJvb3Rsb2FkZXIgb3B0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtbWFudWFsLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLW1hbnVhbC54bWwKaW5kZXggNzUyYjIxMC4uZDRiN2JlZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtbWFudWFsLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1tYW51YWwueG1sCkBAIC0yMiwxMSArMjIsMTEgQEAKIAogICAgICAgICA8YXV0aG9yZ3JvdXA+CiAgICAgICAgICAgICA8YXV0aG9yPgotICAgICAgICAgICAgICAgIDxmaXJzdG5hbWU+UmljaGFyZDwvZmlyc3RuYW1lPiA8c3VybmFtZT5QdXJkaWU8L3N1cm5hbWU+CisgICAgICAgICAgICAgICAgPGZpcnN0bmFtZT5TY290dDwvZmlyc3RuYW1lPiA8c3VybmFtZT5SaWZlbmJhcms8L3N1cm5hbWU+CiAgICAgICAgICAgICAgICAgPGFmZmlsaWF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8b3JnbmFtZT5MaW51eCBGb3VuZGF0aW9uPC9vcmduYW1lPgorICAgICAgICAgICAgICAgICAgICA8b3JnbmFtZT5TY290dHkncyBEb2N1bWVudGF0aW9uIFNlcnZpY2VzLCBJTkM8L29yZ25hbWU+CiAgICAgICAgICAgICAgICAgPC9hZmZpbGlhdGlvbj4KLSAgICAgICAgICAgICAgICA8ZW1haWw+cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZzwvZW1haWw+CisgICAgICAgICAgICAgICAgPGVtYWlsPnNyaWZlbmJhcmtAZ21haWwuY29tPC9lbWFpbD4KICAgICAgICAgICAgIDwvYXV0aG9yPgogCiAgICAgICAgIDwvYXV0aG9yZ3JvdXA+CkBAIC0xMTMsMjQgKzExMywxOSBAQAogICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjMgUmVsZWFzZS48L3JldnJlbWFyaz4KICAgICAgICAgICAgIDwvcmV2aXNpb24+CiAgICAgICAgICAgICA8cmV2aXNpb24+Ci0gICAgICAgICAgICAgICAgPHJldm51bWJlcj4yLjMuMTwvcmV2bnVtYmVyPgotICAgICAgICAgICAgICAgIDxkYXRlPkp1bmUgMjAxNzwvZGF0ZT4KLSAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi4zLjEgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjIuNDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxNzwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi40IFJlbGVhc2UuPC9yZXZyZW1hcms+CiAgICAgICAgICAgICA8L3JldmlzaW9uPgogICAgICAgICAgICAgPHJldmlzaW9uPgotICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi4zLjI8L3Jldm51bWJlcj4KLSAgICAgICAgICAgICAgICA8ZGF0ZT5TZXB0ZW1iZXIgMjAxNzwvZGF0ZT4KLSAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi4zLjIgUmVsZWFzZS48L3JldnJlbWFyaz4KLSAgICAgICAgICAgIDwvcmV2aXNpb24+Ci0gICAgICAgICAgICA8cmV2aXNpb24+Ci0gICAgICAgICAgICAgICAgPHJldm51bWJlcj4yLjMuMzwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi40LjE8L3Jldm51bWJlcj4KICAgICAgICAgICAgICAgICA8ZGF0ZT5KYW51YXJ5IDIwMTg8L2RhdGU+Ci0gICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDIuMy4zIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDIuNC4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CiAgICAgICAgICAgICA8L3JldmlzaW9uPgogICAgICAgICAgICAgPHJldmlzaW9uPgotICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi4zLjQ8L3Jldm51bWJlcj4KLSAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE4PC9kYXRlPgotICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjMuNCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi40LjI8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5NYXJjaCAyMDE4PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjQuMiBSZWxlYXNlLjwvcmV2cmVtYXJrPgogICAgICAgICAgICAgPC9yZXZpc2lvbj4KICAgICAgICAgPC9yZXZoaXN0b3J5PgogCkBAIC0xNDcsMjkgKzE0MiwzMSBAQAogICAgICAgICAgICA8bm90ZT48dGl0bGU+TWFudWFsIE5vdGVzPC90aXRsZT4KICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CiAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICBGb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZQotICAgICAgICAgICAgICAgICAgICAgICBNYW51YWwgYXNzb2NpYXRlZCB3aXRoIHRoaXMgWW9jdG8gUHJvamVjdCByZWxlYXNlCi0gICAgICAgICAgICAgICAgICAgICAgICh2ZXJzaW9uICZZT0NUT19ET0NfVkVSU0lPTjspLAotICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZlcnNpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5Zb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWw8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICBpcyBmb3IgdGhlICZZT0NUT19ET0NfVkVSU0lPTjsgcmVsZWFzZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgVG8gYmUgc3VyZSB5b3UgaGF2ZSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIG1hbnVhbAorICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhpcyByZWxlYXNlLCB1c2UgdGhlIG1hbnVhbCBmcm9tIHRoZQogICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L2RvY3VtZW50YXRpb24nPllvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbiBwYWdlPC91bGluaz4uCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2ZXJzaW9uIG9mIHRoZSBtYW51YWwgaXMgdmVyc2lvbgotICAgICAgICAgICAgICAgICAgICAgICAmWU9DVE9fRE9DX1ZFUlNJT047LgotICAgICAgICAgICAgICAgICAgICAgICBGb3IgbGF0ZXIgcmVsZWFzZXMgb2YgdGhlIFlvY3RvIFByb2plY3QgKGlmIHRoZXkgZXhpc3QpLAotICAgICAgICAgICAgICAgICAgICAgICBnbyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgRm9yIG1hbnVhbHMgYXNzb2NpYXRlZCB3aXRoIG90aGVyIHJlbGVhc2VzIG9mIHRoZSBZb2N0bworICAgICAgICAgICAgICAgICAgICAgICBQcm9qZWN0LCBnbyB0byB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy9kb2N1bWVudGF0aW9uJz5Zb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24gcGFnZTwvdWxpbms+CiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB1c2UgdGhlIGRyb3AtZG93biAiQWN0aXZlIFJlbGVhc2VzIiBidXR0b24KLSAgICAgICAgICAgICAgICAgICAgICAgYW5kIGNob29zZSB0aGUgWW9jdG8gUHJvamVjdCB2ZXJzaW9uIGZvciB3aGljaCB5b3Ugd2FudAotICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFudWFsLgorICAgICAgICAgICAgICAgICAgICAgICBhbmQgY2hvb3NlIHRoZSBtYW51YWwgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXNpcmVkCisgICAgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QuCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgRm9yIGFuIGluLWRldmVsb3BtZW50IHZlcnNpb24gb2YgdGhlIFlvY3RvIFByb2plY3QKLSAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlIE1hbnVhbCwgc2VlCi0gICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19VUkw7L2xhdGVzdC9yZWYtbWFudWFsL3JlZi1tYW51YWwuaHRtbCc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBUbyByZXBvcnQgYW55IGluYWNjdXJhY2llcyBvciBwcm9ibGVtcyB3aXRoIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hbnVhbCwgc2VuZCBhbiBlbWFpbCB0byB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgZGlzY3Vzc2lvbiBncm91cCBhdAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnlvY3RvQHlvY3RvcHJvamVjdC5jb208L2ZpbGVuYW1lPiBvciBsb2cgaW50bworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZyZWVub2RlIDxmaWxlbmFtZT4jeW9jdG88L2ZpbGVuYW1lPiBjaGFubmVsLgogICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgPC9ub3RlPgogICAgIDwvbGVnYWxub3RpY2U+CiAKICAgICA8L2Jvb2tpbmZvPgpAQCAtMTc4LDcgKzE3NSw3IEBACiAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJ1c2luZ3Bva3kueG1sIi8+CiAKLSAgICA8eGk6aW5jbHVkZSBocmVmPSJjbG9zZXItbG9vay54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJyZWYtZGV2ZWxvcG1lbnQtZW52aXJvbm1lbnQueG1sIi8+CiAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJ0ZWNobmljYWwtZGV0YWlscy54bWwiLz4KIApAQCAtMTk0LDYgKzE5MSw4IEBACiAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJyZWYtZGV2dG9vbC1yZWZlcmVuY2UueG1sIi8+CiAKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJyZWYta2lja3N0YXJ0LnhtbCIvPgorCiAgICAgPHhpOmluY2x1ZGUgaHJlZj0icmVmLXFhLWNoZWNrcy54bWwiLz4KIAogICAgIDx4aTppbmNsdWRlIGhyZWY9InJlZi1pbWFnZXMueG1sIi8+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1yZWxlYXNlLXByb2Nlc3MueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtcmVsZWFzZS1wcm9jZXNzLnhtbAppbmRleCBmZTNiYTA5Li5lMjkwMmViIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1yZWxlYXNlLXByb2Nlc3MueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXJlbGVhc2UtcHJvY2Vzcy54bWwKQEAgLTYxLDkgKzYxLDkgQEAKICAgICA8cGFyYT4KICAgICAgICAgRWFjaCBtYWpvciByZWxlYXNlIHJlY2VpdmVzIGEgY29kZW5hbWUgdGhhdCBpZGVudGlmaWVzIHRoZSByZWxlYXNlIGluCiAgICAgICAgIHRoZQotICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN5b2N0by1wcm9qZWN0LXJlcG9zaXRvcmllcyc+WW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4uCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3lvY3RvLXByb2plY3QtcmVwb3NpdG9yaWVzJz5Zb2N0byBQcm9qZWN0IFNvdXJjZSBSZXBvc2l0b3JpZXM8L2xpbms+LgogICAgICAgICBUaGUgY29uY2VwdCBpcyB0aGF0IGJyYW5jaGVzIG9mCi0gICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J21ldGFkYXRhJz5NZXRhZGF0YTwvbGluaz4KICAgICAgICAgd2l0aCB0aGUgc2FtZSBjb2RlbmFtZSBhcmUgbGlrZWx5IHRvIGJlIGNvbXBhdGlibGUgYW5kIHRodXMKICAgICAgICAgd29yayB0b2dldGhlci4KICAgICAgICAgPG5vdGU+CkBAIC0xMzEsNyArMTMxLDcgQEAKICAgICAgICAgWW9jdG8gUHJvamVjdC4KICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBydW4gYXZhaWxhYmxlIHRlc3RzIG9uIHlvdXIgcHJvamVjdHMsIHNlZSB0aGUKICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BlcmZvcm1pbmctYXV0b21hdGVkLXJ1bnRpbWUtdGVzdGluZyc+UGVyZm9ybWluZyBBdXRvbWF0ZWQgUnVudGltZSBUZXN0aW5nPC91bGluaz4iCi0gICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KICAgICA8L3BhcmE+CiAKICAgICA8cGFyYT4KQEAgLTIwNiw3ICsyMDYsOCBAQAogICAgIDxwYXJhPgogICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCdzIG1haW4gQXV0b2J1aWxkZXIKICAgICAgICAgKDxmaWxlbmFtZT5hdXRvYnVpbGRlci55b2N0b3Byb2plY3Qub3JnPC9maWxlbmFtZT4pIHB1YmxpY2x5IHRlc3RzCi0gICAgICAgIGVhY2ggWW9jdG8gUHJvamVjdCByZWxlYXNlJ3MgY29kZSBpbiB0aGUgT0UtQ29yZSwgUG9reSwgYW5kIEJpdEJha2UKKyAgICAgICAgZWFjaCBZb2N0byBQcm9qZWN0IHJlbGVhc2UncyBjb2RlIGluIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdvZS1jb3JlJz5PRS1Db3JlPC9saW5rPiwgUG9reSwgYW5kIEJpdEJha2UKICAgICAgICAgcmVwb3NpdG9yaWVzLgogICAgICAgICBUaGUgdGVzdGluZyBvY2N1cnMgZm9yIGJvdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlCiAgICAgICAgICJtYXN0ZXIiIGJyYW5jaCBhbmQgYWxzbyBmb3Igc3VibWl0dGVkIHBhdGNoZXMuCkBAIC0yMTYsNyArMjE3LDcgQEAKICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gcmVwb3NpdG9yeS4KICAgICAgICAgPG5vdGU+CiAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgYWxsIHRoZXNlIGJyYW5jaGVzIGluIHRoZSBZb2N0byBQcm9qZWN0Ci0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtcmVwb3NpdG9yaWVzJz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4uCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtcmVwb3NpdG9yaWVzJz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC9saW5rPi4KICAgICAgICAgPC9ub3RlPgogICAgICAgICBUZXN0aW5nIHdpdGhpbiB0aGVzZSBwdWJsaWMgYnJhbmNoZXMgZW5zdXJlcyBpbiBhIHB1YmxpY2x5IHZpc2libGUgd2F5CiAgICAgICAgIHRoYXQgYWxsIG9mIHRoZSBtYWluIHN1cHBvc2VkIGFyY2hpdGVjdHVyZXMgYW5kIHJlY2lwZXMgaW4gT0UtQ29yZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtc3RydWN0dXJlLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXN0cnVjdHVyZS54bWwKaW5kZXggOWIyNzAxYy4uNGJkZGM1OSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtc3RydWN0dXJlLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1zdHJ1Y3R1cmUueG1sCkBAIC03LDE2ICs3LDE5IEBACiA8dGl0bGU+U291cmNlIERpcmVjdG9yeSBTdHJ1Y3R1cmU8L3RpdGxlPgogCiA8cGFyYT4KLSAgICBUaGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+IGNvbnNpc3RzIG9mIHNldmVyYWwgY29tcG9uZW50cy4KLSAgICBVbmRlcnN0YW5kaW5nIHRoZW0gYW5kIGtub3dpbmcgd2hlcmUgdGhleSBhcmUgbG9jYXRlZCBpcyBrZXkgdG8gdXNpbmcgdGhlIFlvY3RvIFByb2plY3Qgd2VsbC4KLSAgICBUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIHRoZSBTb3VyY2UgRGlyZWN0b3J5IGFuZCBnaXZlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdmFyaW91cwotICAgIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KKyAgICBUaGUgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KKyAgICBjb25zaXN0cyBvZiBzZXZlcmFsIGNvbXBvbmVudHMuCisgICAgVW5kZXJzdGFuZGluZyB0aGVtIGFuZCBrbm93aW5nIHdoZXJlIHRoZXkgYXJlIGxvY2F0ZWQgaXMga2V5IHRvIHVzaW5nIHRoZQorICAgIFlvY3RvIFByb2plY3Qgd2VsbC4KKyAgICBUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIHRoZSBTb3VyY2UgRGlyZWN0b3J5IGFuZCBnaXZlcyBpbmZvcm1hdGlvbiBhYm91dAorICAgIHRoZSB2YXJpb3VzIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KIDwvcGFyYT4KIAogPHBhcmE+Ci0gICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBlc3RhYmxpc2ggYSBsb2NhbCBTb3VyY2UgRGlyZWN0b3J5IG9uIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtLCBzZWUgdGhlCi0gICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2dldHRpbmctc2V0dXAnPkdldHRpbmcgU2V0IFVwPC91bGluaz4iCi0gICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBlc3RhYmxpc2ggYSBsb2NhbCBTb3VyY2UgRGlyZWN0b3J5IG9uIHlvdXIKKyAgICBkZXZlbG9wbWVudCBzeXN0ZW0sIHNlZSB0aGUKKyAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjd29ya2luZy13aXRoLXlvY3RvLXByb2plY3Qtc291cmNlLWZpbGVzJz5Xb3JraW5nIFdpdGggWW9jdG8gUHJvamVjdCBTb3VyY2UgRmlsZXM8L3VsaW5rPiIKKyAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KIDwvcGFyYT4KIAogPG5vdGU+CkBAIC0zMSw3ICszNCw3IEBACiAKICAgICA8cGFyYT4KICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgdG9wLWxldmVsIGNvbXBvbmVudHMgb2YgdGhlCi0gICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCiAgICAgPC9wYXJhPgogCiAgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1jb3JlLWJpdGJha2UnPgpAQCAtNDIsNyArNDUsNyBAQAogICAgICAgICAgICAgVGhlIGNvcHkgdXN1YWxseSBtYXRjaGVzIHRoZSBjdXJyZW50IHN0YWJsZSBCaXRCYWtlIHJlbGVhc2UgZnJvbQogICAgICAgICAgICAgdGhlIEJpdEJha2UgcHJvamVjdC4KICAgICAgICAgICAgIEJpdEJha2UsIGEKLSAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdtZXRhZGF0YSc+TWV0YWRhdGE8L2xpbms+CiAgICAgICAgICAgICBpbnRlcnByZXRlciwgcmVhZHMgdGhlIFlvY3RvIFByb2plY3QgTWV0YWRhdGEgYW5kIHJ1bnMgdGhlIHRhc2tzCiAgICAgICAgICAgICBkZWZpbmVkIGJ5IHRoYXQgZGF0YS4KICAgICAgICAgICAgIEZhaWx1cmVzIGFyZSB1c3VhbGx5IGZyb20gdGhlIE1ldGFkYXRhIGFuZCBub3QgZnJvbSBCaXRCYWtlIGl0c2VsZi4KQEAgLTUzLDEwICs1Niw4IEBACiAgICAgICAgICAgICBXaGVuIHlvdSBydW4gdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCwgdGhlCiAgICAgICAgICAgICBtYWluIEJpdEJha2UgZXhlY3V0YWJsZSwgd2hpY2ggcmVzaWRlcyBpbiB0aGUKICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlL2Jpbi88L2ZpbGVuYW1lPiBkaXJlY3RvcnksIHN0YXJ0cy4KLSAgICAgICAgICAgIFNvdXJjaW5nIGFuIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCAoZS5nLgotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ic3RydWN0dXJlLWNvcmUtc2NyaXB0Ij48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgIG9yCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSJzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Ij48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgU291cmNpbmcgdGhlIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCAoaS5lLgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ic3RydWN0dXJlLWNvcmUtc2NyaXB0Ij48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4pCiAgICAgICAgICAgICBwbGFjZXMgdGhlIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4gYW5kCiAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS9iaW48L2ZpbGVuYW1lPiBkaXJlY3RvcmllcyAoaW4gdGhhdCBvcmRlcikgaW50bwogICAgICAgICAgICAgdGhlIHNoZWxsJ3MgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KQEAgLTc1LDI3ICs3NiwyNCBAQAogICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdXNlciBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCB0aGUgb3V0cHV0CiAgICAgICAgICAgICBnZW5lcmF0ZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaW4gaXRzIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gd2hlcmUKICAgICAgICAgICAgIHRoZSBzb3VyY2UgdHJlZSBpcyBjb21iaW5lZCB3aXRoIHRoZSBvdXRwdXQuCi0gICAgICAgICAgICBUaGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgVGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4KICAgICAgICAgICAgIGlzIGNyZWF0ZWQgaW5pdGlhbGx5IHdoZW4geW91IDxmaWxlbmFtZT5zb3VyY2U8L2ZpbGVuYW1lPgogICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQKICAgICAgICAgICAgIChpLmUuCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgb3IKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4pLgogICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHBsYWNlIG91dHB1dCBhbmQgY29uZmlndXJhdGlvbgogICAgICAgICAgICAgZmlsZXMgaW4gYSBkaXJlY3Rvcnkgc2VwYXJhdGUgZnJvbSB0aGUKLSAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KICAgICAgICAgICAgIGJ5IHByb3ZpZGluZyBhIGRpcmVjdG9yeSBuYW1lIHdoZW4geW91IDxmaWxlbmFtZT5zb3VyY2U8L2ZpbGVuYW1lPgogICAgICAgICAgICAgdGhlIHNldHVwIHNjcmlwdC4KICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBzZXBhcmF0aW5nIG91dHB1dCBmcm9tIHlvdXIgbG9jYWwKICAgICAgICAgICAgIFNvdXJjZSBEaXJlY3RvcnkgZmlsZXMsIHNlZSB0aGUKLSAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgYW5kCi0gICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPiIKLSAgICAgICAgICAgIHNlY3Rpb25zLgorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KICAgICAgICAgPC9wYXJhPgogICAgIDwvc2VjdGlvbj4KIApAQCAtMTc1LDkgKzE3Myw3IEBACiAgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB2YXJpb3VzIGludGVncmF0aW9uIHNjcmlwdHMgdGhhdCBpbXBsZW1lbnQKICAgICAgICAgICAgIGV4dHJhIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIFlvY3RvIFByb2plY3QgZW52aXJvbm1lbnQgKGUuZy4gUUVNVSBzY3JpcHRzKS4KICAgICAgICAgICAgIFRoZSA8bGluayBsaW5rZW5kPSJzdHJ1Y3R1cmUtY29yZS1zY3JpcHQiPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgYW5kCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICBzY3JpcHRzIGFwcGVuZCB0aGlzIGRpcmVjdG9yeSB0byB0aGUgc2hlbGwncworICAgICAgICAgICAgc2NyaXB0IGFwcGVuZHMgdGhpcyBkaXJlY3RvcnkgdG8gdGhlIHNoZWxsJ3MKICAgICAgICAgICAgIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4gZW52aXJvbm1lbnQgdmFyaWFibGUuCiAgICAgICAgIDwvcGFyYT4KIApAQCAtMTkyLDE0ICsxODgsNyBAQAogICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3RpdGxlPgogCiAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhpcyBzY3JpcHQgaXMgb25lIG9mIHR3byBzY3JpcHRzIHRoYXQgc2V0IHVwIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKLSAgICAgICAgICAgIGVudmlyb25tZW50LgotICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBvdGhlciBzY3JpcHQsIHNlZSB0aGUKLSAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+IgotICAgICAgICAgICAgc2VjdGlvbi4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzY3JpcHQgc2V0cyB1cCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIGVudmlyb25tZW50LgogICAgICAgICAgICAgUnVubmluZyB0aGlzIHNjcmlwdCB3aXRoIHRoZSA8ZmlsZW5hbWU+c291cmNlPC9maWxlbmFtZT4gY29tbWFuZCBpbgogICAgICAgICAgICAgYSBzaGVsbCBtYWtlcyBjaGFuZ2VzIHRvIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4gYW5kIHNldHMgb3RoZXIKICAgICAgICAgICAgIGNvcmUgQml0QmFrZSB2YXJpYWJsZXMgYmFzZWQgb24gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCkBAIC0yMTIsNyArMjAxLDcgQEAKICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICBXaGVuIHlvdSBydW4gdGhpcyBzY3JpcHQsIHlvdXIgWW9jdG8gUHJvamVjdCBlbnZpcm9ubWVudCBpcyBzZXQKICAgICAgICAgICAgIHVwLCBhCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4KICAgICAgICAgICAgIGlzIGNyZWF0ZWQsIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgYmVjb21lcyB0aGUgQnVpbGQgRGlyZWN0b3J5LAogICAgICAgICAgICAgYW5kIHlvdSBhcmUgcHJlc2VudGVkIHdpdGggYSBsaXN0IG9mIGNvbW1vbiBCaXRCYWtlIHRhcmdldHMuCiAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CkBAIC0yMzQsMTkgKzIyMywxOSBAQAogICAgICAgICAgICAgVGhlIHNjcmlwdCBnZXRzIGl0cyBkZWZhdWx0IGxpc3Qgb2YgY29tbW9uIHRhcmdldHMgZnJvbSB0aGUKICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mLW5vdGVzLnR4dDwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzIGZvdW5kIGluIHRoZQogICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtcG9reTwvZmlsZW5hbWU+IGRpcmVjdG9yeSB3aXRoaW4gdGhlCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi4KICAgICAgICAgICAgIFNob3VsZCB5b3UgaGF2ZSBjdXN0b20gZGlzdHJpYnV0aW9ucywgaXQgaXMgdmVyeSBlYXN5IHRvIG1vZGlmeQogICAgICAgICAgICAgdGhpcyBjb25maWd1cmF0aW9uIGZpbGUgdG8gaW5jbHVkZSB5b3VyIHRhcmdldHMgZm9yIHlvdXIKICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbi4KICAgICAgICAgICAgIFNlZSB0aGUKICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1hLWN1c3RvbS10ZW1wbGF0ZS1jb25maWd1cmF0aW9uLWRpcmVjdG9yeSc+Q3JlYXRpbmcgYSBDdXN0b20gVGVtcGxhdGUgQ29uZmlndXJhdGlvbiBEaXJlY3Rvcnk8L3VsaW5rPiIKLSAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBtb3JlCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbCBmb3IgbW9yZQogICAgICAgICAgICAgaW5mb3JtYXRpb24uCiAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICA8cGFyYT4KICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHJ1bm5pbmcgdGhpcyBzY3JpcHQgd2l0aG91dCBhCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4KICAgICAgICAgICAgIGFyZ3VtZW50IGNyZWF0ZXMgdGhlIDxmaWxlbmFtZT5idWlsZDwvZmlsZW5hbWU+IGRpcmVjdG9yeQogICAgICAgICAgICAgaW4geW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogICAgICAgICAgICAgSWYgeW91IHByb3ZpZGUgYSBCdWlsZCBEaXJlY3RvcnkgYXJndW1lbnQgd2hlbiB5b3UKQEAgLTI1NCwxNyArMjQzLDE3IEBACiAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gdG8gY3JlYXRlIGEgQnVpbGQgRGlyZWN0b3J5IG9mIHlvdXIgY2hvaWNlLgogICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBjcmVhdGVzIGEgQnVpbGQgRGlyZWN0b3J5IG5hbWVkCiAgICAgICAgICAgICA8ZmlsZW5hbWU+bXlidWlsZHM8L2ZpbGVuYW1lPiB0aGF0IGlzIG91dHNpZGUgb2YgdGhlCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz46CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPjoKICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgJCBzb3VyY2UgJk9FX0lOSVRfRklMRTsgfi9teWJ1aWxkcwogICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUgdGVtcGxhdGUgY29uZmlndXJhdGlvbgogICAgICAgICAgICAgZmlsZXMsIHdoaWNoIGFyZSBmb3VuZCBieSBkZWZhdWx0IGluIHRoZQogICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtcG9reS9jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5IGluIHRoZQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgU291cmNlIERpcmVjdG9yeS4KICAgICAgICAgICAgIFNlZSB0aGUKICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1hLWN1c3RvbS10ZW1wbGF0ZS1jb25maWd1cmF0aW9uLWRpcmVjdG9yeSc+Q3JlYXRpbmcgYSBDdXN0b20gVGVtcGxhdGUgQ29uZmlndXJhdGlvbiBEaXJlY3Rvcnk8L3VsaW5rPiIKLSAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBtb3JlCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbCBmb3IgbW9yZQogICAgICAgICAgICAgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICA8bm90ZT4KICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IGZpbGUgb3IgZGlyZWN0b3J5IG5hbWVzIHRoYXQKQEAgLTI3OCwxNTcgKzI2Nyw2IEBACiAgICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3Rpb24+CiAKLSAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+Ci0gICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhpcyBzY3JpcHQgaXMgb25lIG9mIHR3byBzY3JpcHRzIHRoYXQgc2V0IHVwIHRoZSBPcGVuRW1iZWRkZWQKLSAgICAgICAgICAgIGJ1aWxkIGVudmlyb25tZW50LgotICAgICAgICAgICAgQXNpZGUgZnJvbSBzZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudCwgdGhpcyBzY3JpcHQgc3RhcnRzIGEKLSAgICAgICAgICAgIG1lbW9yeS1yZXNpZGVudCBCaXRCYWtlIHNlcnZlci4KLSAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgb3RoZXIgc2V0dXAgc2NyaXB0LCBzZWUgdGhlCi0gICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4iCi0gICAgICAgICAgICBzZWN0aW9uLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBNZW1vcnktcmVzaWRlbnQgQml0QmFrZSByZXNpZGVzIGluIG1lbW9yeSB1bnRpbCB5b3Ugc3BlY2lmaWNhbGx5Ci0gICAgICAgICAgICByZW1vdmUgaXQgdXNpbmcgdGhlIGZvbGxvd2luZyBCaXRCYWtlIGNvbW1hbmQ6Ci0gICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgYml0YmFrZSAtbQotICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBSdW5uaW5nIHRoaXMgc2NyaXB0IHdpdGggdGhlIDxmaWxlbmFtZT5zb3VyY2U8L2ZpbGVuYW1lPiBjb21tYW5kIGluCi0gICAgICAgICAgICBhIHNoZWxsIG1ha2VzIGNoYW5nZXMgdG8gPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPiBhbmQgc2V0cyBvdGhlcgotICAgICAgICAgICAgY29yZSBCaXRCYWtlIHZhcmlhYmxlcyBiYXNlZCBvbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KLSAgICAgICAgICAgIE9uZSBvZiB0aGVzZSB2YXJpYWJsZXMgaXMgdGhlCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJTRVJWRVInPjxmaWxlbmFtZT5CQlNFUlZFUjwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgdmFyaWFibGUsIHdoaWNoIGFsbG93cyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBsb2NhdGUKLSAgICAgICAgICAgIHRoZSBzZXJ2ZXIgdGhhdCBpcyBydW5uaW5nIEJpdEJha2UuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFlvdSBuZWVkIHRvIHJ1biBhbiBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgYmVmb3JlIHVzaW5nIEJpdEJha2UKLSAgICAgICAgICAgIGNvbW1hbmRzLgotICAgICAgICAgICAgRm9sbG93aW5nIGlzIHRoZSBzY3JpcHQgc3ludGF4OgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudi1tZW1yZXMgPHJlcGxhY2VhYmxlPnBvcnRfbnVtYmVyPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPmJ1aWxkX2RpcjwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICBGb2xsb3dpbmcgYXJlIHNvbWUgY29uc2lkZXJhdGlvbnMgd2hlbiBzb3VyY2luZyB0aGlzIHNjcmlwdDoKLSAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICBUaGUgc2NyaXB0IHVzZXMgb3RoZXIgc2NyaXB0cyB3aXRoaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4gZGlyZWN0b3J5IHRvIGRvIHRoZSBidWxrIG9mCi0gICAgICAgICAgICAgICAgICAgIHRoZSB3b3JrLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3QgcHJvdmlkZSBhIHBvcnQgbnVtYmVyIHdpdGggdGhlIHNjcmlwdCwgdGhlCi0gICAgICAgICAgICAgICAgICAgIEJpdEJha2Ugc2VydmVyIHN0YXJ0cyBhdCBhIHJhbmRvbWx5IHNlbGVjdGVkIHBvcnQuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIHNjcmlwdCdzIHBhcmFtZXRlcnMgYXJlIHBvc2l0aW9uYWxseSBkZXBlbmRlbnQuCi0gICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IGNhbm5vdCBydW4gdGhlIHNjcmlwdCBhbmQgcHJvdmlkZSBhCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgbmFtZSB3aXRob3V0IGFsc28gcHJvdmlkaW5nIGEgcG9ydCBudW1iZXIuCi0gICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB0aGUgZm9sbG93aW5nIHN5bnRheCBpcyBpbGxlZ2FsOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgc291cmNlIG9lLWluaXRidWlsZC1lbnYtbWVtcmVzIDxyZXBsYWNlYWJsZT5idWlsZF9kaXI8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIHJlc3RyaWN0aW9uIG1pZ2h0IGJlIHJlc29sdmVkIGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgZnV0dXJlLgotICAgICAgICAgICAgICAgICAgICAgICAgU2VlCi0gICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTUnPkJ1ZyA3NTU1PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFdoZW4geW91IHJ1biB0aGlzIHNjcmlwdCwgeW91ciBZb2N0byBQcm9qZWN0IGVudmlyb25tZW50IGlzIHNldAotICAgICAgICAgICAgdXAsIGEgQnVpbGQgRGlyZWN0b3J5IGlzIGNyZWF0ZWQsIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgYmVjb21lcwotICAgICAgICAgICAgdGhlIEJ1aWxkIERpcmVjdG9yeSwgYW5kIHlvdSBhcmUgcHJlc2VudGVkIHdpdGggYSBsaXN0IG9mIGNvbW1vbgotICAgICAgICAgICAgQml0QmFrZSB0YXJnZXRzLgotICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgotICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudi1tZW1yZXMKLSAgICAgTm8gcG9ydCBzcGVjaWZpZWQsIHVzaW5nIGR5bmFtaWNhbGx5IHNlbGVjdGVkIHBvcnQKLQotICAgICAjIyMgU2hlbGwgZW52aXJvbm1lbnQgc2V0IHVwIGZvciBidWlsZHMuICMjIwotCi0gICAgIFlvdSBjYW4gbm93IHJ1biAnYml0YmFrZSAmbHQ7dGFyZ2V0Jmd0OycKLQotICAgICBDb21tb24gdGFyZ2V0cyBhcmU6Ci0gICAgICAgICBjb3JlLWltYWdlLW1pbmltYWwKLSAgICAgICAgIGNvcmUtaW1hZ2Utc2F0bwotICAgICAgICAgbWV0YS10b29sY2hhaW4KLSAgICAgICAgIG1ldGEtaWRlLXN1cHBvcnQKLQotICAgICBZb3UgY2FuIGFsc28gcnVuIGdlbmVyYXRlZCBxZW11IGltYWdlcyB3aXRoIGEgY29tbWFuZCBsaWtlICdydW5xZW11IHFlbXV4ODYnCi0gICAgIEJpdGJha2Ugc2VydmVyIGFkZHJlc3M6IDEyNy4wLjAuMSwgc2VydmVyIHBvcnQ6IDUzOTk1Ci0gICAgIEJpdGJha2Ugc2VydmVyIHN0YXJ0ZWQgb24gZGVtYW5kIGFzIG5lZWRlZCwgdXNlIGJpdGJha2UgLW0gdG8gc2h1dCBpdCBkb3duCi0gICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICBUaGUgc2NyaXB0IGdldHMgaXRzIGRlZmF1bHQgbGlzdCBvZiBjb21tb24gdGFyZ2V0cyBmcm9tIHRoZQotICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYtbm90ZXMudHh0PC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMgZm91bmQgaW4gdGhlCi0gICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1wb2t5PC9maWxlbmFtZT4gZGlyZWN0b3J5IHdpdGhpbiB0aGUKLSAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KLSAgICAgICAgICAgIFNob3VsZCB5b3UgaGF2ZSBjdXN0b20gZGlzdHJpYnV0aW9ucywgaXQgaXMgdmVyeSBlYXN5IHRvIG1vZGlmeQotICAgICAgICAgICAgdGhpcyBjb25maWd1cmF0aW9uIGZpbGUgdG8gaW5jbHVkZSB5b3VyIHRhcmdldHMgZm9yIHlvdXIKLSAgICAgICAgICAgIGRpc3RyaWJ1dGlvbi4KLSAgICAgICAgICAgIFNlZSB0aGUKLSAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1hLWN1c3RvbS10ZW1wbGF0ZS1jb25maWd1cmF0aW9uLWRpcmVjdG9yeSc+Q3JlYXRpbmcgYSBDdXN0b20gVGVtcGxhdGUgQ29uZmlndXJhdGlvbiBEaXJlY3Rvcnk8L3VsaW5rPiIKLSAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBtb3JlCi0gICAgICAgICAgICBpbmZvcm1hdGlvbi4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQnkgZGVmYXVsdCwgcnVubmluZyB0aGlzIHNjcmlwdCB3aXRob3V0IGEKLSAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KLSAgICAgICAgICAgIGFyZ3VtZW50IGNyZWF0ZXMgYSBidWlsZCBkaXJlY3RvcnkgbmFtZWQKLSAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZDwvZmlsZW5hbWU+LgotICAgICAgICAgICAgSWYgeW91IHByb3ZpZGUgYSBCdWlsZCBEaXJlY3RvcnkgYXJndW1lbnQgYW5kIHBvcnQgbnVtYmVyIHdoZW4geW91Ci0gICAgICAgICAgICA8ZmlsZW5hbWU+c291cmNlPC9maWxlbmFtZT4gdGhlIHNjcmlwdCwgdGhlIEJ1aWxkIERpcmVjdG9yeSBpcwotICAgICAgICAgICAgY3JlYXRlZCB1c2luZyB0aGF0IG5hbWUuCi0gICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21tYW5kIHN0YXJ0cyB0aGUgQml0QmFrZSBzZXJ2ZXIgdXNpbmcKLSAgICAgICAgICAgIHBvcnQgNTM5OTUgYW5kIGNyZWF0ZXMgYSBCdWlsZCBEaXJlY3RvcnkgbmFtZWQKLSAgICAgICAgICAgIDxmaWxlbmFtZT5teWJ1aWxkczwvZmlsZW5hbWU+IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUKLSAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPjoKLSAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzIDUzOTk1IH4vbXlidWlsZHMKLSAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT4gc2NyaXB0IHN0YXJ0cyBhCi0gICAgICAgICAgICBtZW1vcnkgcmVzaWRlbnQgQml0QmFrZSBzZXJ2ZXIuCi0gICAgICAgICAgICBUaGlzIEJpdEJha2UgaW5zdGFuY2UgdXNlcyB0aGUKLSAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLWNvb2tlcmRhZW1vbi5sb2c8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcwotICAgICAgICAgICAgbG9jYXRlZCBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRoZSB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uCi0gICAgICAgICAgICBmaWxlcywgd2hpY2ggYXJlIGZvdW5kIGJ5IGRlZmF1bHQgaW4gdGhlCi0gICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1wb2t5L2NvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaW4gdGhlCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCi0gICAgICAgICAgICBTZWUgdGhlCi0gICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY3JlYXRpbmctYS1jdXN0b20tdGVtcGxhdGUtY29uZmlndXJhdGlvbi1kaXJlY3RvcnknPkNyZWF0aW5nIGEgQ3VzdG9tIFRlbXBsYXRlIENvbmZpZ3VyYXRpb24gRGlyZWN0b3J5PC91bGluaz4iCi0gICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IgbW9yZQotICAgICAgICAgICAgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IGZpbGUgb3IKLSAgICAgICAgICAgICAgICBkaXJlY3RvcnkgbmFtZXMgdGhhdCBjb250YWluIHNwYWNlcy4KLSAgICAgICAgICAgICAgICBJZiB5b3UgYXR0ZW1wdCB0byBydW4gdGhlCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+IHNjcmlwdAotICAgICAgICAgICAgICAgIGZyb20gYSBTb3VyY2UgRGlyZWN0b3J5IHRoYXQgY29udGFpbnMgc3BhY2VzIGluIGVpdGhlciB0aGUKLSAgICAgICAgICAgICAgICBmaWxlbmFtZXMgb3IgZGlyZWN0b3J5IG5hbWVzLCB0aGUgc2NyaXB0IHJldHVybnMgYW4gZXJyb3IKLSAgICAgICAgICAgICAgICBpbmRpY2F0aW5nIG5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgQmUgc3VyZSB0byB1c2UgYSBTb3VyY2UgRGlyZWN0b3J5IGZyZWUgb2YgbmFtZXMgY29udGFpbmluZwotICAgICAgICAgICAgICAgIHNwYWNlcy4KLSAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQogICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYmFzaWMtdG9wLWxldmVsJz4KICAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5MSUNFTlNFLCBSRUFETUUsIGFuZCBSRUFETUUuaGFyZHdhcmU8L2ZpbGVuYW1lPjwvdGl0bGU+CiAKQEAgLTQ0MywxMSArMjgxLDkgQEAKIAogICAgIDxwYXJhPgogICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjcmVhdGVzIHRoZQotICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+Ci0gICAgICAgIHdoZW4geW91IHJ1biBvbmUgb2YgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdHMgKGkuZS4KLSAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgb3IKLSAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICB3aGVuIHlvdSBydW4gdGhlIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdHMgKGkuZS4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4pLgogICAgIDwvcGFyYT4KIAogICAgIDxwYXJhPgpAQCAtNTA1LDkgKzM0MSw3IEBACiAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiB3aGVuCiAgICAgICAgICAgICB5b3UgPGZpbGVuYW1lPnNvdXJjZTwvZmlsZW5hbWU+IHRoZSB0b3AtbGV2ZWwgYnVpbGQgZW52aXJvbm1lbnQKICAgICAgICAgICAgIHNldHVwIHNjcmlwdCAoaS5lLgotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgIG9yCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L2xpbms+KS4KICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgIDxwYXJhPgpAQCAtNTMzLDcgKzM2Nyw3IEBACiAgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgaG93IHRoZSA8ZmlsZW5hbWU+VEVNUExBVEVDT05GPC9maWxlbmFtZT4gdmFyaWFibGUKICAgICAgICAgICAgICAgICBpcyB1c2VkIGJ5IGxvb2tpbmcgYXQgdGhlCiAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHMvb2Utc2V0dXAtYnVpbGRkaXI8L2ZpbGVuYW1lPiBzY3JpcHQgaW4gdGhlCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgogICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGUgWW9jdG8gUHJvamVjdCB2ZXJzaW9uIG9mIHRoZQogICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mLnNhbXBsZTwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCiAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtcG9reS9jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5LgpAQCAtNTU5LDkgKzM5Myw3IEBACiAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiB3aGVuCiAgICAgICAgICAgICB5b3UgPGZpbGVuYW1lPnNvdXJjZTwvZmlsZW5hbWU+IHRoZSB0b3AtbGV2ZWwgYnVpbGQgZW52aXJvbm1lbnQKICAgICAgICAgICAgIHNldHVwIHNjcmlwdCAoaS5lLgotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgIG9yCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L2xpbms+KS4KICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgIDxwYXJhPgpAQCAtNTg1LDcgKzQxNyw3IEBACiAgICAgICAgICAgICA8bm90ZT4KICAgICAgICAgICAgICAgICBZb3UgY2FuIHNlZSBob3cgdGhlIDxmaWxlbmFtZT5URU1QTEFURUNPTkY8L2ZpbGVuYW1lPiB2YXJpYWJsZQogICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzL29lLXNldHVwLWJ1aWxkZGlyPC9maWxlbmFtZT4gc2NyaXB0IGluIHRoZQotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi4KICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlIFlvY3RvIFByb2plY3QgdmVyc2lvbiBvZiB0aGUKICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQogICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXBva3kvY29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KQEAgLTczMyw3ICs1NjUsNyBAQAogICAgICAgICAgICAgY29udGFpbiBhcHByb3ByaWF0ZSA8ZmlsZW5hbWU+Q09QWUlORzwvZmlsZW5hbWU+IGxpY2Vuc2UgZmlsZXMgd2l0aCBvdGhlciBsaWNlbnNpbmcgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gbGljZW5zaW5nLCBzZWUgdGhlCiAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWFpbnRhaW5pbmctb3Blbi1zb3VyY2UtbGljZW5zZS1jb21wbGlhbmNlLWR1cmluZy15b3VyLXByb2R1Y3RzLWxpZmVjeWNsZSc+TWFpbnRhaW5pbmcgT3BlbiBTb3VyY2UgTGljZW5zZSBDb21wbGlhbmNlIER1cmluZyBZb3VyIFByb2R1Y3QncyBMaWZlY3ljbGU8L3VsaW5rPiIKLSAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KICAgICAgICAgPC9wYXJhPgogICAgIDwvc2VjdGlvbj4KIApAQCAtNzc3LDcgKzYwOSw4IEBACiAgICAgICAgICAgICBzeXNyb290IHRoYXQgbWF0Y2hlcyB5b3VyIHRhcmdldCBoYXJkd2FyZS4KICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBvdXQgbW9yZSBhYm91dCB0aGVzZSBpbnN0YWxsZXJzIGluIHRoZQogICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1NES19VUkw7I3Nkay1idWlsZGluZy1hbi1zZGstaW5zdGFsbGVyJz5CdWlsZGluZyBhbiBTREsgSW5zdGFsbGVyPC91bGluaz4iCi0gICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoU0RLKSBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgYW5kIHRoZQorICAgICAgICAgICAgRXh0ZW5zaWJsZSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKGVTREspIG1hbnVhbC4KICAgICAgICAgPC9wYXJhPgogICAgIDwvc2VjdGlvbj4KIApAQCAtODA4LDcgKzY0MSw4IEBACiAgICAgICAgICAgICByZWNpcGUgbGlzdGVkIGluCiAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4uCiAgICAgICAgICAgICBQb3B1bGF0aW9uIG9mIHRoaXMgZGlyZWN0b3J5IGlzIGhhbmRsZWQgdGhyb3VnaCBzaGFyZWQgc3RhdGUsIHdoaWxlCi0gICAgICAgICAgICB0aGUgcGF0aCBpcyBzcGVjaWZpZWQgYnkgdGhlIDxmaWxlbmFtZT5DT01QT05FTlRTX0RJUjwvZmlsZW5hbWU+CisgICAgICAgICAgICB0aGUgcGF0aCBpcyBzcGVjaWZpZWQgYnkgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ09NUE9ORU5UU19ESVInPjxmaWxlbmFtZT5DT01QT05FTlRTX0RJUjwvZmlsZW5hbWU+PC9saW5rPgogICAgICAgICAgICAgdmFyaWFibGUuIEFwYXJ0IGZyb20gYSBmZXcgdW51c3VhbCBjaXJjdW1zdGFuY2VzLCBoYW5kbGluZyBvZiB0aGUKICAgICAgICAgICAgIDxmaWxlbmFtZT5zeXNyb290cy1jb21wb25lbnRzPC9maWxlbmFtZT4gZGlyZWN0b3J5IHNob3VsZCBiZQogICAgICAgICAgICAgYXV0b21hdGljLCBhbmQgcmVjaXBlcyBzaG91bGQgbm90IGRpcmVjdGx5IHJlZmVyZW5jZQpAQCAtOTA3LDcgKzc0MSw4IEBACiAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgtcWVtdXg4Ni1zdGFuZGFyZC1idWlsZDwvZmlsZW5hbWU+IGFuZCB0aGVuIHBhdGNoZWQgYnkgUXVpbHQuCiAgICAgICAgICAgICAoU2VlIHRoZQogICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5nLWEtcXVpbHQtd29ya2Zsb3cnPlVzaW5nIFF1aWx0IGluIFlvdXIgV29ya2Zsb3c8L3VsaW5rPiIKLSAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uLikKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsIGZvciBtb3JlCisgICAgICAgICAgICBpbmZvcm1hdGlvbi4pCiAgICAgICAgICAgICBXaXRoaW4gdGhlIDxmaWxlbmFtZT5saW51eC1xZW11eDg2LXN0YW5kYXJkLWJ1aWxkPC9maWxlbmFtZT4gZGlyZWN0b3J5LAogICAgICAgICAgICAgc3RhbmRhcmQgUXVpbHQgZGlyZWN0b3JpZXMgPGZpbGVuYW1lPmxpbnV4LTMuMC9wYXRjaGVzPC9maWxlbmFtZT4KICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+bGludXgtMy4wLy5wYzwvZmlsZW5hbWU+IGFyZSBjcmVhdGVkLApAQCAtMTA0MSw3ICs4NzYsNyBAQAogCiAgICAgPHBhcmE+CiAgICAgICAgIEFzIG1lbnRpb25lZCBwcmV2aW91c2x5LAotICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPiBpcyB0aGUgY29yZQorICAgICAgICA8bGluayBsaW5rZW5kPSdtZXRhZGF0YSc+TWV0YWRhdGE8L2xpbms+IGlzIHRoZSBjb3JlCiAgICAgICAgIG9mIHRoZSBZb2N0byBQcm9qZWN0LgogICAgICAgICBNZXRhZGF0YSBoYXMgc2V2ZXJhbCBpbXBvcnRhbnQgc3ViZGl2aXNpb25zOgogICAgIDwvcGFyYT4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXN0eWxlLmNzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXN0eWxlLmNzcwppbmRleCA4ZWE4ZGFjLi43MDc3ZTRiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1zdHlsZS5jc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtc3R5bGUuY3NzCkBAIC03NzMsNiArNzczLDEwIEBACiAgIGJvcmRlci1jb2xvcjogYmxhY2s7CiB9CiAKKy53cml0ZXJub3RlcyB7CisgIGNvbG9yOiByZWQ7Cit9CisKIAogICAvKioqKioqKioqKiogLwogIC8gIGdyYXBoaWNzICAvCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi10YXNrcy54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi10YXNrcy54bWwKaW5kZXggODdkZGI5OC4uYzcyNmNiOSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtdGFza3MueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXRhc2tzLnhtbApAQCAtMzAyLDcgKzMwMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSA8ZmlsZW5hbWU+YmluX3BhY2thZ2UuYmJjbGFzczwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBpbiB0aGUgPGZpbGVuYW1lPm1ldGEvY2xhc3NlczwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFuIGV4YW1wbGUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgpAQCAtNDk1LDEwICs0OTUsMTEgQEAKIAogICAgICAgICA8cGFyYT4KICAgICAgICAgICAgIEluc3RhbGxzIHRoZSBmaWxlcyBpbnRvIHRoZSBpbmRpdmlkdWFsIHJlY2lwZSBzcGVjaWZpYyBzeXNyb290cwotICAgICAgICAgICAgKGkuZS4KKyAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT5yZWNpcGUtc3lzcm9vdDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZS1zeXNyb290LW5hdGl2ZTwvZmlsZW5hbWU+IHVuZGVyCiAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KICAgICAgICAgICAgIGJhc2VkIHVwb24gdGhlIGRlcGVuZGVuY2llcyBzcGVjaWZpZWQgYnkKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPikuCiAgICAgICAgICAgICBTZWUgdGhlCiAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc3RhZ2luZyc+PGZpbGVuYW1lPnN0YWdpbmc8L2ZpbGVuYW1lPjwvbGluaz4iCiAgICAgICAgICAgICBjbGFzcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KQEAgLTcxNyw3ICs3MTgsNyBAQAogICAgICAgICAgICAgdGhlIEJpdEJha2UgZW52aXJvbm1lbnQuCiAgICAgICAgICAgICBTZWUgdGhlCiAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGxhdGRldi1hcHBkZXYtZGV2cHlzaGVsbCc+VXNpbmcgYSBEZXZlbG9wbWVudCBQeXRob24gU2hlbGw8L3VsaW5rPiIKLSAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBtb3JlCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbCBmb3IgbW9yZQogICAgICAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgPGZpbGVuYW1lPmRldnB5c2hlbGw8L2ZpbGVuYW1lPi4KICAgICAgICAgPC9wYXJhPgogICAgIDwvc2VjdGlvbj4KQEAgLTczMCw3ICs3MzEsNyBAQAogICAgICAgICAgICAgZGV2ZWxvcG1lbnQsIGRlYnVnZ2luZywgb3IgYm90aC4KICAgICAgICAgICAgIFNlZSB0aGUKICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwbGF0ZGV2LWFwcGRldi1kZXZzaGVsbCc+VXNpbmcgYSBEZXZlbG9wbWVudCBTaGVsbDwvdWxpbms+IgotICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgZm9yIG1vcmUKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsIGZvciBtb3JlCiAgICAgICAgICAgICBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPi4KICAgICAgICAgPC9wYXJhPgogICAgIDwvc2VjdGlvbj4KQEAgLTgyMCw3ICs4MjEsNyBAQAogICAgICAgICAgICAgQm9vdHMgYW4gaW1hZ2UgYW5kIHBlcmZvcm1zIHJ1bnRpbWUgdGVzdHMgd2l0aGluIHRoZSBpbWFnZS4KICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBhdXRvbWF0aWNhbGx5IHRlc3RpbmcgaW1hZ2VzLCBzZWUgdGhlCiAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGVyZm9ybWluZy1hdXRvbWF0ZWQtcnVudGltZS10ZXN0aW5nJz5QZXJmb3JtaW5nIEF1dG9tYXRlZCBSdW50aW1lIFRlc3Rpbmc8L3VsaW5rPiIKLSAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwuCiAgICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3Rpb24+CiAKQEAgLTgzOCwxNyArODM5LDcgQEAKICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gYXV0b21hdGljYWxseSB0ZXN0aW5nIGltYWdlcywgc2VlIHRoZQogICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BlcmZvcm1pbmctYXV0b21hdGVkLXJ1bnRpbWUtdGVzdGluZyc+UGVyZm9ybWluZyBBdXRvbWF0ZWQgUnVudGltZSBUZXN0aW5nPC91bGluaz4iCi0gICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KLSAgICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3Mtdm1ka2ltZyc+Ci0gICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fdm1ka2ltZzwvZmlsZW5hbWU+PC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIENyZWF0ZXMgYSA8ZmlsZW5hbWU+LnZtZGs8L2ZpbGVuYW1lPiBpbWFnZSBmb3IgdXNlIHdpdGgKLSAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cudm13YXJlLmNvbS8nPlZNd2FyZTwvdWxpbms+Ci0gICAgICAgICAgICBhbmQgY29tcGF0aWJsZSB2aXJ0dWFsIG1hY2hpbmUgaG9zdHMuCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KICAgICAgICAgPC9wYXJhPgogICAgIDwvc2VjdGlvbj4KIDwvc2VjdGlvbj4KQEAgLTg5Miw3ICs4ODMsNyBAQAogICAgICAkIGJpdGJha2UgbGludXgteW9jdG8gLWMgZGlmZmNvbmZpZwogICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKLSAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsjZ2VuZXJhdGluZy1jb25maWd1cmF0aW9uLWZpbGVzJz5HZW5lcmF0aW5nIENvbmZpZ3VyYXRpb24gRmlsZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsjY3JlYXRpbmctY29uZmlnLWZyYWdtZW50cyc+Q3JlYXRpbmcgQ29uZmlndXJhdGlvbiBGcmFnbWVudHM8L3VsaW5rPiIKICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbC4KICAgICAgICAgPC9wYXJhPgogICAgIDwvc2VjdGlvbj4KQEAgLTkyNyw3ICs5MTgsNyBAQAogICAgICAkIGJpdGJha2UgbGludXgteW9jdG8gLWMga2VybmVsX2NvbmZpZ2NoZWNrIC1mCiAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQotICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyNnZW5lcmF0aW5nLWNvbmZpZ3VyYXRpb24tZmlsZXMnPkdlbmVyYXRpbmcgQ29uZmlndXJhdGlvbiBGaWxlczwvdWxpbms+IgorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyN2YWxpZGF0aW5nLWNvbmZpZ3VyYXRpb24nPlZhbGlkYXRpbmcgQ29uZmlndXJhdGlvbjwvdWxpbms+IgogICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQgTWFudWFsLgogICAgICAgICA8L3BhcmE+CiAgICAgPC9zZWN0aW9uPgpAQCAtOTY1LDEyICs5NTYsOSBAQAogICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgICAgIFNlZSB0aGUKLSAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsjZ2VuZXJhdGluZy1jb25maWd1cmF0aW9uLWZpbGVzJz5HZW5lcmF0aW5nIENvbmZpZ3VyYXRpb24gRmlsZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsjdXNpbmctbWVudWNvbmZpZyc+VXNpbmcgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPjwvdWxpbms+IgogICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQgTWFudWFsCiAgICAgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGNvbmZpZ3VyYXRpb24gdG9vbC4KLSAgICAgICAgICAgIFlvdSBjYW4gYWxzbyByZWZlcmVuY2UgdGhlCi0gICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdXNpbmctbWVudWNvbmZpZyc+VXNpbmcgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPjwvdWxpbms+IgotICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCiAgICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3Rpb24+CiAKQEAgLTk5Nyw4ICs5ODUsOCBAQAogICAgICAgICA8cGFyYT4KICAgICAgICAgICAgIFJ1bnMgPGZpbGVuYW1lPm1ha2UgbWVudWNvbmZpZzwvZmlsZW5hbWU+IGZvciB0aGUga2VybmVsLgogICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4sIHNlZSB0aGUKLSAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1c2luZy1tZW51Y29uZmlnJz5Vc2luZyZuYnNwOyZuYnNwOzxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT48L3VsaW5rPiIKLSAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyN1c2luZy1tZW51Y29uZmlnJz5Vc2luZyZuYnNwOyZuYnNwOzxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT48L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbC4KICAgICAgICAgPC9wYXJhPgogICAgIDwvc2VjdGlvbj4KIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtdmFyaWFibGVzLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXZhcmlhYmxlcy54bWwKaW5kZXggYWQxMDEzOS4uMmIwMTcyMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtdmFyaWFibGVzLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi12YXJpYWJsZXMueG1sCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtBUkNIJz5LPC9saW5rPgogICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MQUJFTFMnPkw8L2xpbms+CiAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkUnPk08L2xpbms+Ci08IS0tICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWdsb3NzYXJ5LW4nPk48L2xpbms+IC0tPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1OQVRJVkVMU0JTVFJJTkcnPk48L2xpbms+CiAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU9CSkNPUFknPk88L2xpbms+CiAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVAnPlA8L2xpbms+CiA8IS0tICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWdsb3NzYXJ5LXEnPlE8L2xpbms+IC0tPgpAQCAtMzIxLDcgKzMyMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdGhlIHZhcmlhYmxlIHdvcmtzLCBzZWUgdGhlCiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvYXJjaGl2ZXIuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUKICAgICAgICAgICAgICAgICAgICAgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9nbG9zc2RlZj4KICAgICAgICAgPC9nbG9zc2VudHJ5PgpAQCAtNDg4LDcgKzQ4OCw3IEBACiAgICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUKICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2F1dG9tYXRpY2FsbHktaW5jcmVtZW50aW5nLWEtYmluYXJ5LXBhY2thZ2UtcmV2aXNpb24tbnVtYmVyJz5BdXRvbWF0aWNhbGx5IEluY3JlbWVudGluZyBhIEJpbmFyeSBQYWNrYWdlIFJldmlzaW9uIE51bWJlcjwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwuCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KQEAgLTUzNiw3ICs1MzYsNyBAQAogICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgogPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KICAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSB3aXRoaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+CiAgICAgICAgICAgICAgICAgICAgIGluIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHBsYWNlcyBnZW5lcmF0ZWQKICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cyBkdXJpbmcgYSByZWNpcGUncyBidWlsZCBwcm9jZXNzLgogICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIGRpcmVjdG9yeSBpcyB0aGUgc2FtZSBhcyB0aGUgPGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+CkBAIC02MjYsMTQgKzYyNiwxNCBAQAogICAgICAgICAgICAgICAgICAgICBNdWx0aWxpYiBjb250ZXh0LgogICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCiAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjb21iaW5pbmctbXVsdGlwbGUtdmVyc2lvbnMtbGlicmFyeS1maWxlcy1pbnRvLW9uZS1pbWFnZSc+Q29tYmluaW5nIE11bHRpcGxlIFZlcnNpb25zIG9mIExpYnJhcnkgRmlsZXMgaW50byBPbmUgSW1hZ2U8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgZm9yCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsIGZvcgogICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBvbiBNdWx0aWxpYi4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5CQVNFX0xJQjwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIGRlZmluZWQgaW4KICAgICAgICAgICAgICAgICAgICAgdGhlIG1hY2hpbmUgaW5jbHVkZSBmaWxlcyBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi4KICAgICAgICAgICAgICAgICAgICAgSWYgTXVsdGlsaWIgaXMgbm90IGJlaW5nIHVzZWQsIHRoZSB2YWx1ZSBkZWZhdWx0cyB0byAibGliIi4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgpAQCAtNzM0LDcgKzczNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvICIxIiwgInllcyIsIG9yICJ0cnVlIgogICAgICAgICAgICAgICAgICAgICBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMKICAgICAgICAgICAgICAgICAgICAgbG9jYXRlZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+OgogICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CiAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgQkJfREFOR0xJTkdBUFBFTkRTX1dBUk5PTkxZID0gIjEiCkBAIC03NTksNyArNzU5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgRGlzayBzcGFjZSBtb25pdG9yaW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCiAgICAgICAgICAgICAgICAgICAgIFRvIGVuYWJsZSBtb25pdG9yaW5nLCBhZGQgdGhlIDxmaWxlbmFtZT5CQl9ESVNLTU9OX0RJUlM8L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byB5b3VyIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvdW5kIGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCiAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgZm9sbG93aW5nIGZvcm06CiAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgQkJfRElTS01PTl9ESVJTID0gIjxyZXBsYWNlYWJsZT5hY3Rpb248L3JlcGxhY2VhYmxlPiw8cmVwbGFjZWFibGU+ZGlyPC9yZXBsYWNlYWJsZT4sPHJlcGxhY2VhYmxlPnRocmVzaG9sZDwvcmVwbGFjZWFibGU+IFsuLi5dIgpAQCAtODUyLDcgKzg1Miw3IEBACiAgICAgICAgICAgICAgICAgICAgIERlZmluZXMgdGhlIGRpc2sgc3BhY2UgYW5kIGZyZWUgaW5vZGUgd2FybmluZyBpbnRlcnZhbHMuCiAgICAgICAgICAgICAgICAgICAgIFRvIHNldCB0aGVzZSBpbnRlcnZhbHMsIGRlZmluZSB0aGUgdmFyaWFibGUgaW4geW91cgogICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LgogICAgICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgICAgIDxwYXJhPgpAQCAtOTM2LDcgKzkzNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICAgICAgU2V0IHRoaXMgdmFyaWFibGUgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIGZpbGUgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CkBAIC0xMTU0LDcgKzExNTQsOCBAQAogPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KICAgICAgICAgICAgICAgICAgICAgTGlzdHMgdGhlIGxheWVycyB0byBlbmFibGUgZHVyaW5nIHRoZSBidWlsZC4KICAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBkZWZpbmVkIGluIHRoZSA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAgICAgICAgICAgZmlsZSBpbiB0aGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LgogICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CiAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgQkJMQVlFUlMgPSAiIFwKQEAgLTEyNTAsNyArMTI1MSw3IEBACiAgICAgIEJCTVVMVElGT05GSUcgPSAiY29uZmlnQSBjb25maWdCIGNvbmZpZ0MiCiAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICAgICAgRWFjaCBjb25maWd1cmF0aW9uIGZpbGUgeW91IHVzZSBtdXN0IHJlc2lkZSBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3RvcnknczwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPgogICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9tdWx0aWNvbmZpZzwvZmlsZW5hbWU+IGRpcmVjdG9yeQogICAgICAgICAgICAgICAgICAgICAoZS5nLgogICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+YnVpbGRfZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+L2NvbmYvbXVsdGljb25maWcvY29uZmlnQS5jb25mPC9maWxlbmFtZT4pLgpAQCAtMTI2Miw3ICsxMjYzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydHMgYnVpbGRpbmcgdGFyZ2V0cyB3aXRoIG11bHRpcGxlIGNvbmZpZ3VyYXRpb25zLAogICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCiAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwbGF0ZGV2LWJ1aWxkaW5nLXRhcmdldHMtd2l0aC1tdWx0aXBsZS1jb25maWd1cmF0aW9ucyc+QnVpbGRpbmcgVGFyZ2V0cyB3aXRoIE11bHRpcGxlIENvbmZpZ3VyYXRpb25zPC91bGluaz4iCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CkBAIC0xMjgwLDcgKzEyODEsNyBAQAogICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlLgogICAgICAgICAgICAgICAgICAgICA8bm90ZT4KICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBydW4gQml0QmFrZSBmcm9tIGEgZGlyZWN0b3J5IG91dHNpZGUgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMO2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4sCiAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgbXVzdCBiZSBzdXJlIHRvIHNldAogICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+IHRvIHBvaW50IHRvIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3J5LgpAQCAtMTI5OCwyOSArMTI5OSwyOSBAQAogCiAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJTRVJWRVInPjxnbG9zc3Rlcm0+QkJTRVJWRVI8L2dsb3NzdGVybT4KICAgICAgICAgICAgIDxpbmZvPgotICAgICAgICAgICAgICAgIEJCU0VSVkVSW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBzZXJ2ZXIgdGhhdCBydW5zIG1lbW9yeS1yZXNpZGVudCBCaXRCYWtlLiIKKyAgICAgICAgICAgICAgICBCQlNFUlZFUltkb2NdID0gIlBvaW50cyB0byB0aGUgQml0QmFrZSByZW1vdGUgc2VydmVyLiIKICAgICAgICAgICAgIDwvaW5mbz4KICAgICAgICAgICAgIDxnbG9zc2RlZj4KICAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KIDwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+Ci0gICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgc2VydmVyIHRoYXQgcnVucyBtZW1vcnktcmVzaWRlbnQgQml0QmFrZS4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBzZXQgYnkgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgc2V0dXAgc2NyaXB0IGFuZCBzaG91bGQgbm90IGJlIGhhbmQtZWRpdGVkLgotICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgaXMgb25seSB1c2VkIHdoZW4geW91IGVtcGxveSBtZW1vcnktcmVzaWRlbnQKLSAgICAgICAgICAgICAgICAgICAgQml0QmFrZS4KLSAgICAgICAgICAgICAgICAgICAgVGhlIHNldHVwIHNjcmlwdCBleHBvcnRzIHRoZSB2YWx1ZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICBJZiBkZWZpbmVkIGluIHRoZSBCaXRCYWtlIGVudmlyb25tZW50LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJTRVJWRVI8L2ZpbGVuYW1lPiBwb2ludHMgdG8gdGhlIEJpdEJha2UKKyAgICAgICAgICAgICAgICAgICAgcmVtb3RlIHNlcnZlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgZm9ybWF0IHRvIGV4cG9ydCB0aGUgdmFyaWFibGUgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgZW52aXJvbm1lbnQ6CiAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgZXhwb3J0IEJCU0VSVkVSPWxvY2FsaG9zdDokcG9ydAorICAgICBleHBvcnQgQkJTRVJWRVI9bG9jYWxob3N0OiRwb3J0IgogICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCU0VSVkVSPC9maWxlbmFtZT4gaXMgdXNlZCwgc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT4gc2NyaXB0LCB3aGljaAotICAgICAgICAgICAgICAgICAgICBpcyBsb2NhdGVkIGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIDxmaWxlbmFtZT5CQlNFUlZFUjwvZmlsZW5hbWU+IGFsc28gYXBwZWFycyBpbgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I3Zhci1CQl9IQVNIQkFTRV9XSElURUxJU1QnPjxmaWxlbmFtZT5CQl9IQVNIQkFTRV9XSElURUxJU1Q8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIDxmaWxlbmFtZT5CQlNFUlZFUjwvZmlsZW5hbWU+IGlzIGV4Y2x1ZGVkCisgICAgICAgICAgICAgICAgICAgIGZyb20gY2hlY2tzdW0gYW5kIGRlcGVuZGVuY3kgZGF0YS4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CkBAIC0xMzczLDcgKzEzNzQsNyBAQAogICAgICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdGhpcyB2YXJpYWJsZSB3b3Jrcywgc2VlCiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvYmluY29uZmlnLmJiY2xhc3M8L2ZpbGVuYW1lPiBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi4KICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGZpbmQgZ2VuZXJhbCBpbmZvcm1hdGlvbiBvbiB0aGUgY2xhc3MgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iaW5jb25maWcnPjxmaWxlbmFtZT5iaW5jb25maWcuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KQEAgLTE0NTYsNiArMTQ1Nyw1MSBAQAogICAgICAgICAgICAgPC9nbG9zc2RlZj4KICAgICAgICAgPC9nbG9zc2VudHJ5PgogCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERfQVNfQVJDSCc+PGdsb3NzdGVybT5CVUlMRF9BU19BUkNIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMRF9BU19BUkNIW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYXNzZW1ibGVyIGZsYWdzIGZvciB0aGUgYnVpbGQgaG9zdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBhc3NlbWJsZXIgZmxhZ3MgZm9yCisgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZCBob3N0LiBCeSBkZWZhdWx0LCB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJVSUxEX0FTX0FSQ0g8L2ZpbGVuYW1lPiBpcyBlbXB0eS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMRF9DQ19BUkNIJz48Z2xvc3N0ZXJtPkJVSUxEX0NDX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEX0NDX0FSQ0hbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBDIGNvbXBpbGVyIGZsYWdzIGZvciB0aGUgYnVpbGQgaG9zdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBDIGNvbXBpbGVyIGZsYWdzIGZvcgorICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgaG9zdC4gQnkgZGVmYXVsdCwgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CVUlMRF9DQ19BUkNIPC9maWxlbmFtZT4gaXMgZW1wdHkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERfQ0NMRCc+PGdsb3NzdGVybT5CVUlMRF9DQ0xEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMRF9DQ0xEW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBsaW5rZXIgY29tbWFuZCB0byBiZSB1c2VkIGZvciB0aGUgYnVpbGQgaG9zdCB3aGVuIHRoZSBDIGNvbXBpbGVyIGlzIGJlaW5nIHVzZWQgYXMgdGhlIGxpbmtlci4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGxpbmtlciBjb21tYW5kIHRvIGJlIHVzZWQgZm9yIHRoZSBidWlsZCBob3N0CisgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIEMgY29tcGlsZXIgaXMgYmVpbmcgdXNlZCBhcyB0aGUgbGlua2VyLiBCeSBkZWZhdWx0LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QlVJTERfQ0NMRDwvZmlsZW5hbWU+IHBvaW50cyB0byBHQ0MgYW5kIHBhc3NlcyBhcworICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMRF9DQ19BUkNIJz48ZmlsZW5hbWU+QlVJTERfQ0NfQVJDSDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYXNzdW1pbmcgPGZpbGVuYW1lPkJVSUxEX0NDX0FSQ0g8L2ZpbGVuYW1lPiBpcyBzZXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCiAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERfQ0ZMQUdTJz48Z2xvc3N0ZXJtPkJVSUxEX0NGTEFHUzwvZ2xvc3N0ZXJtPgogICAgICAgICAgICAgPGluZm8+CiAgICAgICAgICAgICAgICAgQlVJTERfQ0ZMQUdTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDIGNvbXBpbGVyIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0LiIKQEAgLTE1MDUsNiArMTU1MSw1MiBAQAogICAgICAgICAgICAgPC9nbG9zc2RlZj4KICAgICAgICAgPC9nbG9zc2VudHJ5PgogCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERfRkMnPjxnbG9zc3Rlcm0+QlVJTERfRkM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEX0ZDW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBGb3J0cmFuIGNvbXBpbGVyIGNvbW1hbmQgZm9yIHRoZSBidWlsZCBob3N0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgRm9ydHJhbiBjb21waWxlciBjb21tYW5kIGZvciB0aGUgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgPGZpbGVuYW1lPkJVSUxEX0ZDPC9maWxlbmFtZT4gcG9pbnRzIHRvCisgICAgICAgICAgICAgICAgICAgIEdmb3J0cmFuIGFuZCBwYXNzZXMgYXMgYXJndW1lbnRzIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERfQ0NfQVJDSCc+PGZpbGVuYW1lPkJVSUxEX0NDX0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFzc3VtaW5nIDxmaWxlbmFtZT5CVUlMRF9DQ19BUkNIPC9maWxlbmFtZT4gaXMgc2V0LgorICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERfTEQnPjxnbG9zc3Rlcm0+QlVJTERfTEQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEX0xEW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBsaW5rZXIgY29tbWFuZCBmb3IgdGhlIGJ1aWxkIGhvc3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBsaW5rZXIgY29tbWFuZCBmb3IgdGhlIGJ1aWxkIGhvc3QuIEJ5IGRlZmF1bHQsCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CVUlMRF9MRDwvZmlsZW5hbWU+IHBvaW50cyB0byB0aGUgR05VIGxpbmtlciAobGQpCisgICAgICAgICAgICAgICAgICAgIGFuZCBwYXNzZXMgYXMgYXJndW1lbnRzIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERfTERfQVJDSCc+PGZpbGVuYW1lPkJVSUxEX0xEX0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFzc3VtaW5nIDxmaWxlbmFtZT5CVUlMRF9MRF9BUkNIPC9maWxlbmFtZT4gaXMgc2V0LgorICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERfTERfQVJDSCc+PGdsb3NzdGVybT5CVUlMRF9MRF9BUkNIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMRF9MRF9BUkNIW2RvY10gPSAiU3BlY2lmaWVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBsaW5rZXIgZmxhZ3MgZm9yIHRoZSBidWlsZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGxpbmtlciBmbGFncyBmb3IgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGhvc3QuIEJ5IGRlZmF1bHQsIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QlVJTERfTERfQVJDSDwvZmlsZW5hbWU+IGlzIGVtcHR5LgorICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCiAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERfTERGTEFHUyc+PGdsb3NzdGVybT5CVUlMRF9MREZMQUdTPC9nbG9zc3Rlcm0+CiAgICAgICAgICAgICA8aW5mbz4KICAgICAgICAgICAgICAgICBCVUlMRF9MREZMQUdTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBsaW5rZXIgd2hlbiBidWlsZGluZyBmb3IgdGhlIGJ1aWxkIGhvc3QuIgpAQCAtMTU3OCw2ICsxNjcwLDIxIEBACiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CiAKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMRF9TVFJJUCc+PGdsb3NzdGVybT5CVUlMRF9TVFJJUDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERfU1RSSVBbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGNvbW1hbmQgdG8gYmUgdXNlZCB0byBzdHJpcCBkZWJ1Z2dpbmcgc3ltYm9scyBmcm9tIGJpbmFyaWVzIHByb2R1Y2VkIGZvciB0aGUgYnVpbGQgaG9zdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGNvbW1hbmQgdG8gYmUgdXNlZCB0byBzdHJpcCBkZWJ1Z2dpbmcgc3ltYm9scworICAgICAgICAgICAgICAgICAgICBmcm9tIGJpbmFyaWVzIHByb2R1Y2VkIGZvciB0aGUgYnVpbGQgaG9zdC4gQnkgZGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJVSUxEX1NUUklQPC9maWxlbmFtZT4gcG9pbnRzIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUJVSUxEX1BSRUZJWCc+PGZpbGVuYW1lPkJVSUxEX1BSRUZJWDwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59c3RyaXA8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKICAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMRF9TWVMnPjxnbG9zc3Rlcm0+QlVJTERfU1lTPC9nbG9zc3Rlcm0+CiAgICAgICAgICAgICA8aW5mbz4KICAgICAgICAgICAgICAgICBCVUlMRF9TWVNbZG9jXSA9ICJUaGUgdG9vbGNoYWluIGJpbmFyeSBwcmVmaXggdXNlZCBmb3IgbmF0aXZlIHJlY2lwZXMuIgpAQCAtMTYyNiwxNCArMTczMywxMiBAQAogICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgogPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KICAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LgogICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGRlZmluZSB0aGlzIGRpcmVjdG9yeSBpbmRpcmVjdGx5IHRocm91Z2ggdGhlCiAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIGFuZAotICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIHNjcmlwdHMgYnkgcGFzc2luZyBpbiBhIEJ1aWxkIERpcmVjdG9yeSBwYXRoIHdoZW4geW91IHJ1bgotICAgICAgICAgICAgICAgICAgICB0aGUgc2NyaXB0cy4KLSAgICAgICAgICAgICAgICAgICAgSWYgeW91IHJ1biB0aGUgc2NyaXB0cyBhbmQgZG8gbm90IHByb3ZpZGUgYSBCdWlsZCBEaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgc2NyaXB0IGJ5IHBhc3NpbmcgaW4gYSBCdWlsZCBEaXJlY3RvcnkgcGF0aCB3aGVuIHlvdSBydW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHJ1biB0aGUgc2NyaXB0IGFuZCBkbyBub3QgcHJvdmlkZSBhIEJ1aWxkIERpcmVjdG9yeQogICAgICAgICAgICAgICAgICAgICBwYXRoLCB0aGUgPGZpbGVuYW1lPkJVSUxERElSPC9maWxlbmFtZT4gZGVmYXVsdHMgdG8KICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1aWxkPC9maWxlbmFtZT4gaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgogICAgICAgICAgICAgICAgIDwvcGFyYT4KQEAgLTE5NjgsNyArMjA3Myw3IEBACiA8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgogICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSBCaXRCYWtlIHVzZXMgdG8gc3RvcmUgYSBjYWNoZQogICAgICAgICAgICAgICAgICAgICBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nbWV0YWRhdGEnPk1ldGFkYXRhPC9saW5rPgogICAgICAgICAgICAgICAgICAgICBzbyBpdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHBhcnNlZCBldmVyeSB0aW1lIEJpdEJha2UgaXMKICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZC4KICAgICAgICAgICAgICAgICA8L3BhcmE+CkBAIC0yMTI2LDcgKzIyMzEsNyBAQAogPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KICAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIDxmaWxlbmFtZT5tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlczwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LAogICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyB3aGVyZSBnZW5lcmljIGxpY2Vuc2UgZmlsZXMgcmVzaWRlLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CkBAIC0yMjA3LDYgKzIzMTIsMjcgQEAKICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KIAorICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNPTVBPTkVOVFNfRElSJz48Z2xvc3N0ZXJtPkNPTVBPTkVOVFNfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDT01QT05FTlRTX0RJUltkb2NdID0gIlN0b3JlcyBzeXNyb290IGNvbXBvbmVudHMgZm9yIGVhY2ggcmVjaXBlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFN0b3JlcyBzeXNyb290IGNvbXBvbmVudHMgZm9yIGVhY2ggcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DT01QT05FTlRTX0RJUjwvZmlsZW5hbWU+IHdoZW4gY29uc3RydWN0aW5nCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZS1zcGVjaWZpYyBzeXNyb290cyBmb3Igb3RoZXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMKKyAgICAgICAgICAgICAgICAgICAgIjxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVNUQUdJTkdfRElSJz48ZmlsZW5hbWU+U1RBR0lOR19ESVI8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fS1jb21wb25lbnRzPC9maWxlbmFtZT4uIgorICAgICAgICAgICAgICAgICAgICAoaS5lLiAiPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn0vc3lzcm9vdHMtY29tcG9uZW50czwvZmlsZW5hbWU+IikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCiAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ09ORl9WRVJTSU9OJz48Z2xvc3N0ZXJtPkNPTkZfVkVSU0lPTjwvZ2xvc3N0ZXJtPgogICAgICAgICAgICAgPGluZm8+CiAgICAgICAgICAgICAgICAgQ09ORl9WRVJTSU9OW2RvY10gPSAiVHJhY2tzIHRoZSB2ZXJzaW9uIG9mIGxvY2FsLmNvbmYuICBJbmNyZWFzZWQgZWFjaCB0aW1lIGJ1aWxkL2NvbmYvIGNoYW5nZXMgaW5jb21wYXRpYmx5LiIKQEAgLTIyNzIsNyArMjM5OCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHRoYW4gPGZpbGVuYW1lPi91c3IvYmluPC9maWxlbmFtZT4uCiAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBhIGxpc3Qgb2YgdGhlc2UgdmFyaWFibGVzIGF0IHRoZSB0b3Agb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi4KICAgICAgICAgICAgICAgICA8L25vdGU+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CkBAIC0yMzE1LDcgKzI0NDEsNyBAQAogICAgICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gY3JlYXRpbmcgYW4gaW5pdHJhbWZzLCBzZWUgdGhlCiAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZGluZy1hbi1pbml0cmFtZnMtaW1hZ2UnPkJ1aWxkaW5nIGFuIEluaXRpYWwgUkFNIEZpbGVzeXN0ZW0gKGluaXRyYW1mcykgSW1hZ2U8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KQEAgLTI1NDksOCArMjY3NSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyByZWZlcmVuY2UgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcHJvdmlkaW5nLWxpY2Vuc2UtdGV4dCc+UHJvdmlkaW5nIExpY2Vuc2UgVGV4dDwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBvbiBwcm92aWRpbmcgbGljZW5zZSB0ZXh0LgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpbmZvcm1hdGlvbiBvbiBwcm92aWRpbmcgbGljZW5zZSB0ZXh0LgogICAgICAgICAgICAgICAgICAgICA8L25vdGU+CiAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9nbG9zc2RlZj4KQEAgLTI1NzcsOCArMjcwMyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyByZWZlcmVuY2UgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcHJvdmlkaW5nLWxpY2Vuc2UtdGV4dCc+UHJvdmlkaW5nIExpY2Vuc2UgVGV4dDwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBvbiBwcm92aWRpbmcgbGljZW5zZSB0ZXh0LgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpbmZvcm1hdGlvbiBvbiBwcm92aWRpbmcgbGljZW5zZSB0ZXh0LgogICAgICAgICAgICAgICAgICAgICA8L25vdGU+CiAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9nbG9zc2RlZj4KQEAgLTI1OTUsNyArMjcyMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgb25seSBzZXQgdGhpcyB2YXJpYWJsZSBpbiB0aGUKICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUgZm91bmQKICAgICAgICAgICAgICAgICAgICAgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgICAgICA8cGFyYT4KQEAgLTI4MDUsNyArMjkzMSw4IEBACiAgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+CiA8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgogICAgICAgICAgICAgICAgICAgICBUaGUgZGVzdGluYXRpb24gZGlyZWN0b3J5LgotICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gaW4gdGhlIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvY2F0aW9uIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4KICAgICAgICAgICAgICAgICAgICAgd2hlcmUgY29tcG9uZW50cyBhcmUgaW5zdGFsbGVkIGJ5IHRoZQogICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KICAgICAgICAgICAgICAgICAgICAgdGFzay4KQEAgLTMxMTYsNyArMzI0Myw3IEBACiAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSB1c2VzIHRvIHBsYWNlIGltYWdlcywgcGFja2FnZXMsIFNES3MgYW5kIG90aGVyIG91dHB1dAogICAgICAgICAgICAgICAgICAgICBmaWxlcyB0aGF0IGFyZSByZWFkeSB0byBiZSB1c2VkIG91dHNpZGUgb2YgdGhlIGJ1aWxkIHN5c3RlbS4KICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyBkaXJlY3RvcnkgcmVzaWRlcyB3aXRoaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+CiAgICAgICAgICAgICAgICAgICAgIGFzIDxmaWxlbmFtZT4ke1RNUERJUn0vZGVwbG95PC9maWxlbmFtZT4uCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogCkBAIC0zMTg5LDcgKzMzMTYsNyBAQAogICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGlzIG1hY2hpbmUtc3BlY2lmaWMgYXMgaXQgY29udGFpbnMgdGhlCiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke01BQ0hJTkV9PC9maWxlbmFtZT4gbmFtZS4KICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyBkaXJlY3RvcnkgcmVzaWRlcyB3aXRoaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+CiAgICAgICAgICAgICAgICAgICAgIGFzIDxmaWxlbmFtZT4ke0RFUExPWV9ESVJ9L2ltYWdlcy8ke01BQ0hJTkV9LzwvZmlsZW5hbWU+LgogICAgICAgICAgICAgICAgIDwvcGFyYT4KIApAQCAtMzQzOSw3ICszNTY2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgYW5kIHJlc2lkZXMgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXBva3kvY29uZi9kaXN0cm88L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb2YKICAgICAgICAgICAgICAgICAgICAgdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICAgICAgPHBhcmE+CkBAIC0zNDUzLDcgKzM1ODAsNyBAQAogICAgICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgICAgICBEaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgbG9jYXRlZCBpbiBhCiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2Rpc3RybzwvZmlsZW5hbWU+IGRpcmVjdG9yeSB3aXRoaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J21ldGFkYXRhJz5NZXRhZGF0YTwvbGluaz4KICAgICAgICAgICAgICAgICAgICAgdGhhdCBjb250YWlucyB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24uCiAgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBmb3IgPGZpbGVuYW1lPkRJU1RSTzwvZmlsZW5hbWU+IG11c3Qgbm90IGNvbnRhaW4KICAgICAgICAgICAgICAgICAgICAgc3BhY2VzLCBhbmQgaXMgdHlwaWNhbGx5IGFsbCBsb3dlci1jYXNlLgpAQCAtMzc5NCw3ICszOTIxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgdG8gdG91Y2ggaXQuCiAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBkaXJlY3RvcnkgaXMgPGZpbGVuYW1lPmRvd25sb2FkczwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCiAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgI0RMX0RJUiA/PSAiJHtUT1BESVJ9L2Rvd25sb2FkcyIKICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgpAQCAtMzg2MiwxNCArMzk4OSwxNCBAQAogCiAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRUZJX1BST1ZJREVSJz48Z2xvc3N0ZXJtPkVGSV9QUk9WSURFUjwvZ2xvc3N0ZXJtPgogICAgICAgICAgICAgPGluZm8+Ci0gICAgICAgICAgICAgICAgRUZJX1BST1ZJREVSW2RvY10gPSAiV2hlbiBidWlsZGluZyBib290YWJsZSBpbWFnZXMgKGkuZS4gd2hlcmUgaGRkaW1nIG9yIHZtZGsgaXMgaW4gSU1BR0VfRlNUWVBFUyksIHRoZSBFRklfUFJPVklERVIgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBFRkkgYm9vdGxvYWRlciB0byB1c2UuIgorICAgICAgICAgICAgICAgIEVGSV9QUk9WSURFUltkb2NdID0gIldoZW4gYnVpbGRpbmcgYm9vdGFibGUgaW1hZ2VzIChpLmUuIHdoZXJlIGhkZGltZywgaXNvLCBvciB3aWMudm1kayBpcyBpbiBJTUFHRV9GU1RZUEVTKSwgdGhlIEVGSV9QUk9WSURFUiB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIEVGSSBib290bG9hZGVyIHRvIHVzZS4iCiAgICAgICAgICAgICA8L2luZm8+CiAgICAgICAgICAgICA8Z2xvc3NkZWY+CiAgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+CiA8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgogICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGJvb3RhYmxlIGltYWdlcyAoaS5lLiB3aGVyZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aGRkaW1nPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPnZtZGs8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBpcyBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aGRkaW1nPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5pc288L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgb3IgPGZpbGVuYW1lPndpYy52bWRrPC9maWxlbmFtZT4gaXMgaW4KICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+KSwKICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5FRklfUFJPVklERVI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBzcGVjaWZpZXMKICAgICAgICAgICAgICAgICAgICAgdGhlIEVGSSBib290bG9hZGVyIHRvIHVzZS4KQEAgLTQxMTcsNyArNDI0NCw3IEBACiAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBmaW5kIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhpcyB2YXJpYWJsZQogICAgICAgICAgICAgICAgICAgICBpbiB0aGUKICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkaW5nLXNvZnR3YXJlLWZyb20tYW4tZXh0ZXJuYWwtc291cmNlJz5CdWlsZGluZyBTb2Z0d2FyZSBmcm9tIGFuIEV4dGVybmFsIFNvdXJjZTwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9nbG9zc2RlZj4KICAgICAgICAgPC9nbG9zc2VudHJ5PgpAQCAtNDE0OCw3ICs0Mjc1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGZpbmQgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGlzIHZhcmlhYmxlCiAgICAgICAgICAgICAgICAgICAgIGluIHRoZQogICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGRpbmctc29mdHdhcmUtZnJvbS1hbi1leHRlcm5hbC1zb3VyY2UnPkJ1aWxkaW5nIFNvZnR3YXJlIGZyb20gYW4gRXh0ZXJuYWwgU291cmNlPC91bGluaz4iCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CkBAIC00MTkxLDcgKzQzMTgsNyBAQAogICAgICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHlvdSBjb25maWd1cmUgdGhpcyB2YXJpYWJsZSBpbiB5b3VyCiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMgZm91bmQgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KICAgICAgICAgICAgICAgICAgICAgQWx0aG91Z2ggeW91IGNhbiB1c2UgdGhpcyB2YXJpYWJsZSBmcm9tIHdpdGhpbiBhIHJlY2lwZSwKICAgICAgICAgICAgICAgICAgICAgYmVzdCBwcmFjdGljZXMgZGljdGF0ZSB0aGF0IHlvdSBkbyBub3QuCiAgICAgICAgICAgICAgICAgICAgIDxub3RlPgpAQCAtNDIyNSw4ICs0MzUyLDggQEAKICAgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0gaXMgcmVhZC1vbmx5LiBTZWUgdGhlCiAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY3JlYXRpbmctYS1yZWFkLW9ubHktcm9vdC1maWxlc3lzdGVtJz5DcmVhdGluZyBhIFJlYWQtT25seSBSb290IEZpbGVzeXN0ZW08L3VsaW5rPiIKICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QKLSAgICAgICAgICAgICAgICAgICAgIERldmVsb3BtZW50IE1hbnVhbCBmb3IgbW9yZQotICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgIERldmVsb3BtZW50IFRhc2tzIE1hbnVhbCBmb3IKKyAgICAgICAgICAgICAgICAgICAgIG1vcmUgaW5mb3JtYXRpb24KIAogInRvb2xzLWRlYnVnIiAtIEFkZHMgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMgZ2RiIGFuZAogICAgICAgICAgICAgICAgIHN0cmFjZS4KQEAgLTQyNTIsNyArNDM3OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIHRoYXQgc2hvd3MgaG93IHRvIGN1c3RvbWl6ZSB5b3VyIGltYWdlIGJ5CiAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoaXMgdmFyaWFibGUsIHNlZSB0aGUKICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5ncG9reS1leHRlbmQtY3VzdG9taW1hZ2UtaW1hZ2VmZWF0dXJlcyc+Q3VzdG9taXppbmcgSW1hZ2VzIFVzaW5nIEN1c3RvbSA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPkVYVFJBX0lNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KQEAgLTQ1NDEsNyArNDY2OCw3IEBACiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2JpbjwvZmlsZW5hbWU+LgogICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgYSBsaXN0IG9mIHRoZXNlIHZhcmlhYmxlcyBhdCB0aGUgdG9wIG9mIHRoZQogICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCiAgICAgICAgICAgICAgICAgICAgIFlvdSB3aWxsIGFsc28gZmluZCB0aGUgZGVmYXVsdCB2YWx1ZXMgb2YgdGhlIHZhcmlvdXMKICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTXyo8L2ZpbGVuYW1lPiB2YXJpYWJsZXMgaW4gdGhpcyBmaWxlLgogICAgICAgICAgICAgICAgIDwvbm90ZT4KQEAgLTQ2MTUsNyArNDc0Miw4IEBACiAgICAgICAgICAgICAgICAgICAgIGluIGEgZGlyZWN0b3J5IHRoYXQgaGFzIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcKICAgICAgICAgICAgICAgICAgICAgYXBwZW5kIGZpbGUuCiAgICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+V2hlbiBleHRlbmRpbmcgPGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+V2hlbiBleHRlbmRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPiwKICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHN1cmUgdG8gdXNlIHRoZSBpbW1lZGlhdGUgZXhwYW5zaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPjo9PC9maWxlbmFtZT4pIG9wZXJhdG9yLgogICAgICAgICAgICAgICAgICAgICAgICAgSW1tZWRpYXRlIGV4cGFuc2lvbiBtYWtlcyBzdXJlIHRoYXQgQml0QmFrZSBldmFsdWF0ZXMKQEAgLTQ2MjQsNiArNDc1Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzb21lIGxhdGVyIHRpbWUgd2hlbiBleHBhbnNpb24gbWlnaHQgcmVzdWx0IGluIGEKICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gdGhlIGZpbGVzIHlvdSBuZWVkLgogICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCiAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5BbHNvLCBpbmNsdWRlIHRoZSB0cmFpbGluZyBzZXBhcmF0aW5nIGNvbG9uCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgaWYgeW91IGFyZSBwcmVwZW5kaW5nLgogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRyYWlsaW5nIGNvbG9uIGNoYXJhY3RlciBpcyBuZWNlc3NhcnkgYmVjYXVzZSB5b3UKQEAgLTQ2NDEsMTMgKzQ3NzAsMzcgQEAKICAgICAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhIGZpbmFsIGV4YW1wbGUgdGhhdCBzcGVjaWZpY2FsbHkgYWRkcyB0aHJlZSBwYXRoczoKKyAgICAgICAgICAgICAgICAgICAgVGhpcyBuZXh0IGV4YW1wbGUgc3BlY2lmaWNhbGx5IGFkZHMgdGhyZWUgcGF0aHM6CiAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gInBhdGhfMTpwYXRoXzI6cGF0aF8zOiIKICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIGZpbmFsIGV4YW1wbGUgc2hvd3MgaG93IHlvdSBjYW4gZXh0ZW5kIHRoZSBzZWFyY2ggcGF0aAorICAgICAgICAgICAgICAgICAgICBhbmQgaW5jbHVkZSBhCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC9saW5rPi1zcGVjaWZpYworICAgICAgICAgICAgICAgICAgICBvdmVycmlkZSwgd2hpY2ggaXMgdXNlZnVsIGluIGEgQlNQIGxheWVyOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTRVhUUkFQQVRIU19wcmVwZW5kX2ludGVsLXg4Ni1jb21tb24gOj0gIiR7VEhJU0RJUn0vJHtQTn06IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBzdGF0ZW1lbnQgYXBwZWFycyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLWRldi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIGlzIGZvdW5kIGluIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1yZXBvc2l0b3JpZXMnPlNvdXJjZSBSZXBvc2l0b3JpZXM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBIZXJlLCB0aGUgbWFjaGluZSBvdmVycmlkZSBpcyBhIHNwZWNpYWwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQVJDSCc+PGZpbGVuYW1lPlBBQ0tBR0VfQVJDSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uIGZvciBtdWx0aXBsZSA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhIGxheWVyIHRoYXQgc3VwcG9ydHMgYSBzaW5nbGUgQlNQLCB0aGUgb3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvdWxkIGp1c3QgYmUgdGhlIHZhbHVlIG9mIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgICAgQnkgcHJlcGVuZGluZyBwYXRocyBpbiA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4KICAgICAgICAgICAgICAgICAgICAgZmlsZXMsIHlvdSBhbGxvdyBtdWx0aXBsZSBhcHBlbmQgZmlsZXMgdGhhdCByZXNpZGUgaW4KICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW50IGxheWVycyBidXQgYXJlIHVzZWQgZm9yIHRoZSBzYW1lIHJlY2lwZSB0bwpAQCAtNDcwNyw3ICs0ODYwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSA8ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT4KICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaXMgZGVmaW5lZCBpbiB0aGUgPGZpbGVuYW1lPmJhc2UuYmJjbGFzczwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIGNsYXNzIGZvdW5kIGluIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXM8L2ZpbGVuYW1lPiBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPjoKICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICBGSUxFU1BBVEggPSAiJHtAYmFzZV9zZXRfZmlsZXNwYXRoKFsiJHtGSUxFX0RJUk5BTUV9LyR7QlB9IiwgXAogICAgICAgICAiJHtGSUxFX0RJUk5BTUV9LyR7QlBOfSIsICIke0ZJTEVfRElSTkFNRX0vZmlsZXMiXSwgZCl9IgpAQCAtNDc1Myw3ICs0OTA2LDcgQEAKICAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUgPGZpbGVuYW1lPmZzLXBlcm1zLnR4dDwvZmlsZW5hbWU+LCB3aGljaAogICAgICAgICAgICAgICAgICAgICBpcyBsb2NhdGVkIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9maWxlczwvZmlsZW5hbWU+IGZvbGRlciBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi4KICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGNyZWF0ZSB5b3VyIG93biBmaWxlIHBlcm1pc3Npb25zIHNldHRpbmcgdGFibGUsIHlvdSBzaG91bGQgcGxhY2UgaXQgaW4geW91cgogICAgICAgICAgICAgICAgICAgICBsYXllciBvciB0aGUgZGlzdHJvJ3MgbGF5ZXIuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgpAQCAtNDc2MSw3ICs0OTE0LDcgQEAKICAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgICAgWW91IGRlZmluZSB0aGUgPGZpbGVuYW1lPkZJTEVTWVNURU1fUEVSTVNfVEFCTEVTPC9maWxlbmFtZT4gdmFyaWFibGUgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcyBmb3VuZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LCB0bwogICAgICAgICAgICAgICAgICAgICBwb2ludCB0byB5b3VyIGN1c3RvbSA8ZmlsZW5hbWU+ZnMtcGVybXMudHh0PC9maWxlbmFtZT4uCiAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBtb3JlIHRoYW4gYSBzaW5nbGUgZmlsZSBwZXJtaXNzaW9ucyBzZXR0aW5nIHRhYmxlLgogICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aHMgeW91IHNwZWNpZnkgdG8gdGhlc2UgZmlsZXMgbXVzdCBiZSBkZWZpbmVkIHdpdGhpbiB0aGUKQEAgLTU1MzksNyArNTY5Miw3IEBACiAgICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUKICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY2xhc3Nlcy9pbWFnZV90eXBlcy5iYmNsYXNzPC9maWxlbmFtZT4gaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9nbG9zc2RlZj4KICAgICAgICAgPC9nbG9zc2VudHJ5PgpAQCAtNTYxMyw3ICs1NzY2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCB5b3UgY29uZmlndXJlIHRoaXMgdmFyaWFibGUgaW4gYW4gaW1hZ2UgcmVjaXBlLgogICAgICAgICAgICAgICAgICAgICBBbHRob3VnaCB5b3UgY2FuIHVzZSB0aGlzIHZhcmlhYmxlIGZyb20geW91cgogICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzIGZvdW5kIGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4sCiAgICAgICAgICAgICAgICAgICAgIGJlc3QgcHJhY3RpY2VzIGRpY3RhdGUgdGhhdCB5b3UgZG8gbm90LgogICAgICAgICAgICAgICAgICAgICA8bm90ZT4KICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGVuYWJsZSBleHRyYSBmZWF0dXJlcyBmcm9tIG91dHNpZGUgdGhlIGltYWdlIHJlY2lwZSwKQEAgLTU2MzMsNyArNTc4Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIHRoYXQgc2hvd3MgaG93IHRvIGN1c3RvbWl6ZSB5b3VyIGltYWdlIGJ5CiAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoaXMgdmFyaWFibGUsIHNlZSB0aGUKICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5ncG9reS1leHRlbmQtY3VzdG9taW1hZ2UtaW1hZ2VmZWF0dXJlcyc+Q3VzdG9taXppbmcgSW1hZ2VzIFVzaW5nIEN1c3RvbSA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPkVYVFJBX0lNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KQEAgLTU2NjIsMjAgKzU4MTUsMjUgQEAKICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1RZUEVTJz48ZmlsZW5hbWU+SU1BR0VfVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4uCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogCi0gICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgIElmIHlvdSBhZGQgImxpdmUiIHRvIDxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgaW5zaWRlIGFuIGltYWdlIHJlY2lwZSwgYmUgc3VyZSB0aGF0IHlvdSBkbyBzbyBwcmlvciB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgImluaGVyaXQgaW1hZ2UiIGxpbmUgb2YgdGhlIHJlY2lwZSBvciB0aGUgbGl2ZSBpbWFnZSB3aWxsCi0gICAgICAgICAgICAgICAgICAgIG5vdCBidWlsZC4KLSAgICAgICAgICAgICAgICA8L25vdGU+Ci0KLSAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgRHVlIHRvIHRoZSB3YXkgdGhpcyB2YXJpYWJsZSBpcyBwcm9jZXNzZWQsIGl0IGlzIG5vdAotICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZSB0byB1cGRhdGUgaXRzIGNvbnRlbnRzIHVzaW5nCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5fYXBwZW5kPC9maWxlbmFtZT4gb3IKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9wcmVwZW5kPC9maWxlbmFtZT4uIFRvIGFkZCBvbmUgb3IgbW9yZQotICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gdGhpcyB2YXJpYWJsZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPis9PC9maWxlbmFtZT4gb3BlcmF0b3IgbXVzdCBiZSB1c2VkLgorICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5Ob3RlczwvdGl0bGU+CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFkZCAibGl2ZSIgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+IGluc2lkZSBhbiBpbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZSwgYmUgc3VyZSB0aGF0IHlvdSBkbyBzbyBwcmlvciB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5oZXJpdCBpbWFnZSIgbGluZSBvZiB0aGUgcmVjaXBlIG9yIHRoZSBsaXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2Ugd2lsbCBub3QgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHVlIHRvIHRoZSB3YXkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZXMgdGhpcyB2YXJpYWJsZSwgeW91IGNhbm5vdCB1cGRhdGUgaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHMgYnkgdXNpbmcgPGZpbGVuYW1lPl9hcHBlbmQ8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5fcHJlcGVuZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHVzZSB0aGUgPGZpbGVuYW1lPis9PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciB0byBhZGQgb25lIG9yIG1vcmUgb3B0aW9ucyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KICAgICAgICAgICAgICAgICA8L25vdGU+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CkBAIC01NzAzLDcgKzU4NjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbm90IGJlIGFmZmVjdGVkIGJ5IDxmaWxlbmFtZT5JTUFHRV9JTlNUQUxMPC9maWxlbmFtZT4uCiAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gY3JlYXRpbmcgYW4gaW5pdHJhbWZzLCBzZWUgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGRpbmctYW4taW5pdHJhbWZzLWltYWdlJz5CdWlsZGluZyBhbiBJbml0aWFsIFJBTSBGaWxlc3lzdGVtIChpbml0cmFtZnMpIEltYWdlPC91bGluaz4iCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgICAgICAgICAgICAgICAgICA8L25vdGU+CiAgICAgICAgICAgICAgICAgPC9wYXJhPgogCkBAIC02MTg4LDcgKzYzNDYsNiBAQAogICAgICBqZmZzMgogICAgICBqZmZzMi5zdW0KICAgICAgbXVsdGl1YmkKLSAgICAgcWNvdzIKICAgICAgc3F1YXNoZnMKICAgICAgc3F1YXNoZnMtbHpvCiAgICAgIHNxdWFzaGZzLXh6CkBAIC02MTk5LDggKzYzNTYsNiBAQAogICAgICB0YXIueHoKICAgICAgdWJpCiAgICAgIHViaWZzCi0gICAgIHZkaQotICAgICB2bWRrCiAgICAgIHdpYwogICAgICB3aWMuYnoyCiAgICAgIHdpYy5negpAQCAtNjIxMiw3ICs2MzY3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgdHlwZXMgb2YgaW1hZ2VzLCBzZWUKICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY2xhc3Nlcy9pbWFnZV90eXBlcyouYmJjbGFzczwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KQEAgLTY0NTUsNyArNjYxMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgdmFyaWFibGUsIHdoaWNoIGlzIHNldCBpbiB0aGUKICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uCiAgICAgICAgICAgICAgICAgICAgIGZpbGUgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4sCiAgICAgICAgICAgICAgICAgICAgIGlzICJjcGlvLmd6Ii4KICAgICAgICAgICAgICAgICAgICAgVGhlIExpbnV4IGtlcm5lbCdzIGluaXRyYW1mcyBtZWNoYW5pc20sIGFzIG9wcG9zZWQgdG8gdGhlCiAgICAgICAgICAgICAgICAgICAgIGluaXRpYWwgUkFNIGZpbGVzeXN0ZW0KQEAgLTY0NzcsMzIgKzY2MzIsMzggQEAKICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBST1ZJREVTJz48ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPjwvbGluaz4KICAgICAgICAgICAgICAgICAgICAgbmFtZSBvZiBhbiBpbWFnZSByZWNpcGUgdGhhdCBpcyB1c2VkIHRvIGJ1aWxkIGFuIGluaXRpYWwKICAgICAgICAgICAgICAgICAgICAgUkFNIGZpbGVzeXN0ZW0gKGluaXRyYW1mcykgaW1hZ2UuCi0gICAgICAgICAgICAgICAgICAgIEFuIGluaXRyYW1mcyBwcm92aWRlcyBhIHRlbXBvcmFyeSByb290IGZpbGVzeXN0ZW0gdXNlZCBmb3IKLSAgICAgICAgICAgICAgICAgICAgZWFybHkgc3lzdGVtIGluaXRpYWxpemF0aW9uIChlLmcuIGxvYWRpbmcgb2YgbW9kdWxlcwotICAgICAgICAgICAgICAgICAgICBuZWVkZWQgdG8gbG9jYXRlIGFuZCBtb3VudCB0aGUgInJlYWwiIHJvb3QgZmlsZXN5c3RlbSkuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgcmVjaXBlIGlzIGFkZGVkIGFzIGEgZGVwZW5kZW5jeSBvZiB0aGUgcm9vdAotICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtIHJlY2lwZSAoZS5nLgotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4pLgotICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcy5iYjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIHJlY2lwZSBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgIGZvciBhbiBleGFtcGxlIGluaXRyYW1mcyByZWNpcGUuCi0gICAgICAgICAgICAgICAgICAgIFRvIHNlbGVjdCB0aGlzIHJlY2lwZSB0byBwcm92aWRlIHRoZSBpbml0cmFtZnMsCi0gICAgICAgICAgICAgICAgICAgIHNldCA8ZmlsZW5hbWU+SU5JVFJBTUZTX0lNQUdFPC9maWxlbmFtZT4gdG8KLSAgICAgICAgICAgICAgICAgICAgImNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMiLgorICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgdGhlIDxmaWxlbmFtZT5JTklUUkFNRlNfSU1BR0U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBjYXVzZXMgYW4gYWRkaXRpb25hbCByZWNpcGUgdG8gYmUgYnVpbHQgYXMKKyAgICAgICAgICAgICAgICAgICAgYSBkZXBlbmRlbmN5IHRvIHdoYXRldmVyIHJvb3QgZmlsZXN5c3RlbSByZWNpcGUgeW91CisgICAgICAgICAgICAgICAgICAgIG1pZ2h0IGJlIHVzaW5nIChlLmcuIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIFRoZSBpbml0cmFtZnMgaW1hZ2UgcmVjaXBlIHlvdSBwcm92aWRlIHNob3VsZCBzZXQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTklUUkFNRlNfRlNUWVBFUyc+PGZpbGVuYW1lPklOSVRSQU1GU19GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBbiBpbml0cmFtZnMgaW1hZ2UgcHJvdmlkZXMgYSB0ZW1wb3Jhcnkgcm9vdCBmaWxlc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHVzZWQgZm9yIGVhcmx5IHN5c3RlbSBpbml0aWFsaXphdGlvbiAoZS5nLiBsb2FkaW5nIG9mCisgICAgICAgICAgICAgICAgICAgIG1vZHVsZXMgbmVlZGVkIHRvIGxvY2F0ZSBhbmQgbW91bnQgdGhlICJyZWFsIiByb290CisgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0pLgogICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBpbml0cmFtZnMgaW1hZ2UgcmVjaXBlIHNob3VsZCBzZXQKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GU1RZUEVTJz48ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTklUUkFNRlNfRlNUWVBFUyc+PGZpbGVuYW1lPklOSVRSQU1GU19GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMuYmI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhbiBleGFtcGxlIGluaXRyYW1mcyByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUbyBzZWxlY3QgdGhpcyBzYW1wbGUgcmVjaXBlIGFzIHRoZSBvbmUgYnVpbHQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHByb3ZpZGUgdGhlIGluaXRyYW1mcyBpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldCA8ZmlsZW5hbWU+SU5JVFJBTUZTX0lNQUdFPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICJjb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzIi4KICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gZmluZCBtb3JlIGluZm9ybWF0aW9uIGJ5IHJlZmVyZW5jaW5nIHRoZQotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9wb2t5L2NvbmYvbG9jYWwuY29uZi5zYW1wbGUuZXh0ZW5kZWQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1wb2t5L2NvbmYvbG9jYWwuY29uZi5zYW1wbGUuZXh0ZW5kZWQ8L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4sCiAgICAgICAgICAgICAgICAgICAgIHRoZQogICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pbWFnZSc+PGZpbGVuYW1lPmltYWdlPC9maWxlbmFtZT48L2xpbms+CiAgICAgICAgICAgICAgICAgICAgIGNsYXNzLCBhbmQgdGhlCkBAIC02NTEzLDcgKzY2NzQsNyBAQAogCiAgICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5JTklUUkFNRlNfSU1BR0U8L2ZpbGVuYW1lPiBpcyBlbXB0eSwgd2hpY2ggaXMKLSAgICAgICAgICAgICAgICAgICAgdGhlIGRlZmF1bHQsIHRoZW4gbm8gaW5pdHJhbWZzIGlzIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCwgdGhlbiBubyBpbml0cmFtZnMgaW1hZ2UgaXMgYnVpbHQuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICAgICAgPHBhcmE+CkBAIC02NTIxLDEwICs2NjgyLDEwIEBACiAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTklUUkFNRlNfSU1BR0VfQlVORExFJz48ZmlsZW5hbWU+SU5JVFJBTUZTX0lNQUdFX0JVTkRMRTwvZmlsZW5hbWU+PC9saW5rPgogICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgd2hpY2ggYWxsb3dzIHRoZSBnZW5lcmF0ZWQgaW1hZ2UgdG8gYmUgYnVuZGxlZAogICAgICAgICAgICAgICAgICAgICBpbnNpZGUgdGhlIGtlcm5lbCBpbWFnZS4KLSAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCBmb3IgaW5mb3JtYXRpb24gb24gY3JlYXRpbmcgYW4gaW5pdHJhbWZzLCBzZWUKLSAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgZm9yIGluZm9ybWF0aW9uIG9uIGNyZWF0aW5nIGFuIGluaXRyYW1mcworICAgICAgICAgICAgICAgICAgICBpbWFnZSwgc2VlIHRoZQogICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGRpbmctYW4taW5pdHJhbWZzLWltYWdlJz5CdWlsZGluZyBhbiBJbml0aWFsIFJBTSBGaWxlc3lzdGVtIChpbml0cmFtZnMpIEltYWdlPC91bGluaz4iCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CkBAIC02NTYyLDcgKzY3MjMsNyBAQAogICAgICAgICAgICAgICAgICAgICBUaGUgY29tYmluZWQgYmluYXJ5IGlzIGRlcG9zaXRlZCBpbnRvIHRoZQogICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL2RlcGxveTwvZmlsZW5hbWU+IGRpcmVjdG9yeSwgd2hpY2ggaXMgcGFydAogICAgICAgICAgICAgICAgICAgICBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LgogICAgICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgICAgIDxwYXJhPgpAQCAtNjU5MSw3ICs2NzUyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZmlsZSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAgQWxzbywgZm9yIGluZm9ybWF0aW9uIG9uIGNyZWF0aW5nIGFuIGluaXRyYW1mcywgc2VlIHRoZQogICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGRpbmctYW4taW5pdHJhbWZzLWltYWdlJz5CdWlsZGluZyBhbiBJbml0aWFsIFJBTSBGaWxlc3lzdGVtIChpbml0cmFtZnMpIEltYWdlPC91bGluaz4iCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CkBAIC02ODYyLDEyICs3MDIzLDEzIEBACiAgICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIFZhbHVlcyBmb3IgdGhpcyB2YXJpYWJsZSBhcmUgc2V0IGluIHRoZSBrZXJuZWwncyByZWNpcGUKICAgICAgICAgICAgICAgICAgICAgZmlsZSBhbmQgdGhlIGtlcm5lbCdzIGFwcGVuZCBmaWxlLgotICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgdGhhdAotICAgICAgICAgICAgICAgICAgICBpcyBiYXNlZCBvbiB0aGUgTGludXggMy4xNCBrZXJuZWwsIHRoZSBrZXJuZWwgcmVjaXBlIGZpbGUKLSAgICAgICAgICAgICAgICAgICAgaXMgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvXzQuMTI8L2ZpbGVuYW1lPiBrZXJuZWwsIHRoZSBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGZpbGUgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMTIuYmI8L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgICAgICBmaWxlLgotICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBmb3IgYSBrZXJuZWwgcmVjaXBlIGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5LQlJBTkNIPC9maWxlbmFtZT4gaXMgc2V0IGFzIGZvbGxvd3MgaW4gdGhhdAorICAgICAgICAgICAgICAgICAgICBrZXJuZWwgcmVjaXBlIGZpbGU6CiAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgS0JSQU5DSCA/PSAic3RhbmRhcmQvYmFzZSIKICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgpAQCAtNjg3NywyMSArNzAzOSwyNSBAQAogICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIGFsc28gdXNlZCBmcm9tIHRoZSBrZXJuZWwncyBhcHBlbmQgZmlsZQogICAgICAgICAgICAgICAgICAgICB0byBpZGVudGlmeSB0aGUga2VybmVsIGJyYW5jaCBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIKICAgICAgICAgICAgICAgICAgICAgbWFjaGluZSBvciB0YXJnZXQgaGFyZHdhcmUuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBrZXJuZWwncyBhcHBlbmQgZmlsZSBpcyBsb2NhdGVkIGluIHRoZSBCU1AgbGF5ZXIgZm9yCi0gICAgICAgICAgICAgICAgICAgIGEgZ2l2ZW4gbWFjaGluZS4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBrZXJuZWwgYXBwZW5kIGZpbGUgZm9yIHRoZSBFbWVubG93IEJTUCBpcyBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSBhbmQgaXMgbmFtZWQKLSAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtZW1lbmxvdy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHRoZSByZWxhdGVkIHN0YXRlbWVudHMgZnJvbSB0aGUgYXBwZW5kIGZpbGU6CisgICAgICAgICAgICAgICAgICAgIENvbnRpbnVpbmcgd2l0aCB0aGUgcHJldmlvdXMga2VybmVsIGV4YW1wbGUsIHRoZSBrZXJuZWwncworICAgICAgICAgICAgICAgICAgICBhcHBlbmQgZmlsZSAoaS5lLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG9fNC4xMi5iYmFwcGVuZDwvZmlsZW5hbWU+KSBpcyBsb2NhdGVkCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBCU1AgbGF5ZXIgZm9yIGEgZ2l2ZW4gbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBhcHBlbmQgZmlsZSBmb3IgdGhlIEJlYWdsZWJvbmUsCisgICAgICAgICAgICAgICAgICAgIEVkZ2VSb3V0ZXIsIGFuZCBnZW5lcmljIHZlcnNpb25zIG9mIGJvdGggMzIgYW5kIDY0LWJpdCBJQQorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcyAoPGZpbGVuYW1lPm1ldGEteW9jdG8tYnNwPC9maWxlbmFtZT4pIGlzIG5hbWVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEyLmJiYXBwZW5kPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHRoZSByZWxhdGVkIHN0YXRlbWVudHMgZnJvbSB0aGF0IGFwcGVuZCBmaWxlOgogICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIENPTVBBVElCTEVfTUFDSElORV9lbWVubG93LW5vZW1nZCA9ICJlbWVubG93LW5vZW1nZCIKLSAgICAgS01BQ0hJTkVfZW1lbmxvdy1ub2VtZ2QgPSAiZW1lbmxvdyIKLSAgICAgS0JSQU5DSF9lbWVubG93LW5vZW1nZCA9ICJzdGFuZGFyZC9iYXNlIgotICAgICBLRVJORUxfRkVBVFVSRVNfYXBwZW5kX2VtZW5sb3ctbm9lbWdkID0gIiBmZWF0dXJlcy9kcm0tZ21hNTAwL2RybS1nbWE1MDAuc2NjIgorICAgICBLQlJBTkNIX2dlbmVyaWN4ODYgID0gInN0YW5kYXJkL2Jhc2UiCisgICAgIEtCUkFOQ0hfZ2VuZXJpY3g4Ni02NCAgPSAic3RhbmRhcmQvYmFzZSIKKyAgICAgS0JSQU5DSF9lZGdlcm91dGVyID0gInN0YW5kYXJkL2VkZ2Vyb3V0ZXIiCisgICAgIEtCUkFOQ0hfYmVhZ2xlYm9uZSA9ICJzdGFuZGFyZC9iZWFnbGVib25lIgorICAgICBLQlJBTkNIX21wYzgzMTVlLXJkYiA9ICJzdGFuZGFyZC9mc2wtbXBjODMxNWUtcmRiIgogICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPktCUkFOQ0g8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgaWRlbnRpZmllcwotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGtlcm5lbCBicmFuY2ggdG8gdXNlIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBFbWVubG93Ci0gICAgICAgICAgICAgICAgICAgICAgICBCU1AuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPktCUkFOQ0g8L2ZpbGVuYW1lPiBzdGF0ZW1lbnRzIGlkZW50aWZ5CisgICAgICAgICAgICAgICAgICAgICAgICB0aGUga2VybmVsIGJyYW5jaCB0byB1c2Ugd2hlbiBidWlsZGluZyBmb3IgZWFjaAorICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkIEJTUC4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CkBAIC02OTEzLDIwICs3MDc5LDIzIEBACiAgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgd2hlbiB1c2luZyBhIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiB0bwogICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgYSBrZXJuZWwgZHVyaW5nIGEgYnVpbGQsIHlvdSBwbGFjZSB0aGUKICAgICAgICAgICAgICAgICAgICAgZmlsZSBpbiB5b3VyIGxheWVyIGluIHRoZSBzYW1lIG1hbm5lciBhcyB5b3Ugd291bGQKLSAgICAgICAgICAgICAgICAgICAgcGF0Y2ggZmlsZXMgYW5kIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQgZmlsZXMgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgcGxhY2UgcGF0Y2ggZmlsZXMgYW5kIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQgZmlsZXMgKGkuZS4KICAgICAgICAgICAgICAgICAgICAgIm91dC1vZi10cmVlIikuCiAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSB3YW50IHRvIHVzZSBhIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgICAgICBmaWxlIHRoYXQgaXMgcGFydCBvZiB0aGUga2VybmVsIHRyZWUgKGkuZS4gImluLXRyZWUiKSwKICAgICAgICAgICAgICAgICAgICAgeW91IGNhbiB1c2UgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5LQlVJTERfREVGQ09ORklHPC9maWxlbmFtZT4gdmFyaWFibGUgdG8gcG9pbnQKLSAgICAgICAgICAgICAgICAgICAgdG8gdGhlIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0JVSUxEX0RFRkNPTkZJRzwvZmlsZW5hbWU+IHZhcmlhYmxlIGFuZCBhcHBlbmQKKyAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1LTUFDSElORSc+PGZpbGVuYW1lPktNQUNISU5FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIHBvaW50IHRvIHRoZSA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZS4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgICAgVG8gdXNlIHRoZSB2YXJpYWJsZSwgc2V0IGl0IGluIHRoZSBhcHBlbmQgZmlsZSBmb3IgeW91cgogICAgICAgICAgICAgICAgICAgICBrZXJuZWwgcmVjaXBlIHVzaW5nIHRoZSBmb2xsb3dpbmcgZm9ybToKICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBLQlVJTERfREVGQ09ORklHXzxsaW5rIGxpbmtlbmQ9J3Zhci1LTUFDSElORSc+S01BQ0hJTkU8L2xpbms+ID89IDxyZXBsYWNlYWJsZT5kZWZjb25maWdfZmlsZTwvcmVwbGFjZWFibGU+CisgICAgIEtCVUlMRF9ERUZDT05GSUdfPHJlcGxhY2VhYmxlPktNQUNISU5FPC9yZXBsYWNlYWJsZT4gPz0gPHJlcGxhY2VhYmxlPmRlZmNvbmZpZ19maWxlPC9yZXBsYWNlYWJsZT4KICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgZnJvbSBhICJyYXNwYmVycnlwaTIiCiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+IGJ1aWxkIHRoYXQgdXNlcyBhCkBAIC03MDI4LDQxICs3MTk3LDUwIEBACiAKICAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LRVJORUxfRkVBVFVSRVMnPjxnbG9zc3Rlcm0+S0VSTkVMX0ZFQVRVUkVTPC9nbG9zc3Rlcm0+CiAgICAgICAgICAgICA8aW5mbz4KLSAgICAgICAgICAgICAgICBLRVJORUxfRkVBVFVSRVNbZG9jXSA9ICJJbmNsdWRlcyBhZGRpdGlvbmFsIG1ldGFkYXRhIGZyb20gdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIEdpdCByZXBvc2l0b3J5LiBUaGUgbWV0YWRhdGEgeW91IGFkZCB0aHJvdWdoIHRoaXMgdmFyaWFibGUgaW5jbHVkZXMgY29uZmlnIGZyYWdtZW50cyBhbmQgZmVhdHVyZXMgZGVzY3JpcHRpb25zLiIKKyAgICAgICAgICAgICAgICBLRVJORUxfRkVBVFVSRVNbZG9jXSA9ICJJbmNsdWRlcyBhZGRpdGlvbmFsIGtlcm5lbCBtZXRhZGF0YS4gVGhlIG1ldGFkYXRhIHlvdSBhZGQgdGhyb3VnaCB0aGlzIHZhcmlhYmxlIGluY2x1ZGVzIGNvbmZpZyBmcmFnbWVudHMgYW5kIGZlYXR1cmVzIGRlc2NyaXB0aW9ucy4iCiAgICAgICAgICAgICA8L2luZm8+CiAgICAgICAgICAgICA8Z2xvc3NkZWY+CiAgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+CiA8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgotICAgICAgICAgICAgICAgICAgICBJbmNsdWRlcyBhZGRpdGlvbmFsIG1ldGFkYXRhIGZyb20gdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIEdpdCByZXBvc2l0b3J5LgotICAgICAgICAgICAgICAgICAgICBJbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSwgdGhlIGRlZmF1bHQgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcykKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgSW5jbHVkZXMgYWRkaXRpb25hbCBrZXJuZWwgbWV0YWRhdGEuCisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLCB0aGUgZGVmYXVsdCBCb2FyZCBTdXBwb3J0CisgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VzIChCU1BzKQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdtZXRhZGF0YSc+TWV0YWRhdGE8L2xpbms+CiAgICAgICAgICAgICAgICAgICAgIGlzIHByb3ZpZGVkIHRocm91Z2gKICAgICAgICAgICAgICAgICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1LTUFDSElORSc+PGZpbGVuYW1lPktNQUNISU5FPC9maWxlbmFtZT48L2xpbms+Ci0gICAgICAgICAgICAgICAgICAgIGFuZCA8bGluayBsaW5rZW5kPSd2YXItS0JSQU5DSCc+PGZpbGVuYW1lPktCUkFOQ0g8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGVzLgotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPktFUk5FTF9GRUFUVVJFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvIGZ1cnRoZXIKLSAgICAgICAgICAgICAgICAgICAgYWRkIG1ldGFkYXRhIGZvciBhbGwgQlNQcy4KKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1LQlJBTkNIJz48ZmlsZW5hbWU+S0JSQU5DSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+S0VSTkVMX0ZFQVRVUkVTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZnJvbSB3aXRoaW4gdGhlIGtlcm5lbCByZWNpcGUgb3Iga2VybmVsIGFwcGVuZAorICAgICAgICAgICAgICAgICAgICBmaWxlIHRvIGZ1cnRoZXIgYWRkIG1ldGFkYXRhIGZvciBhbGwgQlNQcyBvciBzcGVjaWZpYworICAgICAgICAgICAgICAgICAgICBCU1BzLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBUaGUgbWV0YWRhdGEgeW91IGFkZCB0aHJvdWdoIHRoaXMgdmFyaWFibGUgaW5jbHVkZXMgY29uZmlnIGZyYWdtZW50cyBhbmQKLSAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgZGVzY3JpcHRpb25zLAorICAgICAgICAgICAgICAgICAgICBUaGUgbWV0YWRhdGEgeW91IGFkZCB0aHJvdWdoIHRoaXMgdmFyaWFibGUgaW5jbHVkZXMgY29uZmlnCisgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50cyBhbmQgZmVhdHVyZXMgZGVzY3JpcHRpb25zLAogICAgICAgICAgICAgICAgICAgICB3aGljaCB1c3VhbGx5IGluY2x1ZGVzIHBhdGNoZXMgYXMgd2VsbCBhcyBjb25maWcgZnJhZ21lbnRzLgotICAgICAgICAgICAgICAgICAgICBZb3UgdHlwaWNhbGx5IG92ZXJyaWRlIHRoZSA8ZmlsZW5hbWU+S0VSTkVMX0ZFQVRVUkVTPC9maWxlbmFtZT4gdmFyaWFibGUKLSAgICAgICAgICAgICAgICAgICAgZm9yIGEgc3BlY2lmaWMgbWFjaGluZS4KLSAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyB3YXksIHlvdSBjYW4gcHJvdmlkZSB2YWxpZGF0ZWQsIGJ1dCBvcHRpb25hbCwgc2V0cyBvZiBrZXJuZWwKLSAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMgYW5kIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgICAgICBZb3UgdHlwaWNhbGx5IG92ZXJyaWRlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0VSTkVMX0ZFQVRVUkVTPC9maWxlbmFtZT4gdmFyaWFibGUgZm9yIGEKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyB3YXksIHlvdSBjYW4gcHJvdmlkZSB2YWxpZGF0ZWQsIGJ1dCBvcHRpb25hbCwKKyAgICAgICAgICAgICAgICAgICAgc2V0cyBvZiBrZXJuZWwgY29uZmlndXJhdGlvbnMgYW5kIGZlYXR1cmVzLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBhZGRzIDxmaWxlbmFtZT5uZXRmaWx0ZXI8L2ZpbGVuYW1lPiB0byBhbGwKLSAgICAgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3Qga2VybmVscyBhbmQgYWRkcyBzb3VuZCBzdXBwb3J0IHRvIHRoZSA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgIG1hY2hpbmU6CisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGV4YW1wbGUgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLXJ0XzQuMTI8L2ZpbGVuYW1lPiBrZXJuZWwgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIGFkZHMgIm5ldGZpbHRlciIgYW5kICJ0YXNrc3RhdHMiIGZlYXR1cmVzIHRvIGFsbCBCU1BzCisgICAgICAgICAgICAgICAgICAgIGFzIHdlbGwgYXMgInZpcnRpbyIgY29uZmlndXJhdGlvbnMgdG8gYWxsIFFFTVUgbWFjaGluZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBsYXN0IHR3byBzdGF0ZW1lbnRzIGFkZCBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0bworICAgICAgICAgICAgICAgICAgICB0YXJnZXRlZCBtYWNoaW5lIHR5cGVzOgogICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICMgQWRkIG5ldGZpbHRlciB0byBhbGwgbGludXgteW9jdG8ga2VybmVscwotICAgICBLRVJORUxfRkVBVFVSRVM9ImZlYXR1cmVzL25ldGZpbHRlci9uZXRmaWx0ZXIuc2NjIgotCi0gICAgICMgQWRkIHNvdW5kIHN1cHBvcnQgdG8gdGhlIHFlbXV4ODYgbWFjaGluZQotICAgICBLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODY9IiBjZmcvc291bmQuc2NjIgorICAgICBLRVJORUxfRVhUUkFfRkVBVFVSRVMgPz0gImZlYXR1cmVzL25ldGZpbHRlci9uZXRmaWx0ZXIuc2NjIGZlYXR1cmVzL3Rhc2tzdGF0cy90YXNrc3RhdHMuc2NjIgorICAgICBLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0tFUk5FTF9FWFRSQV9GRUFUVVJFU30iCisgICAgIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdWFsbD0iIGNmZy92aXJ0aW8uc2NjIgorICAgICBLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODY9IiBjZmcvc291bmQuc2NjIGNmZy9wYXJhdmlydF9rdm0uc2NjIgorICAgICBLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODYtNjQ9IiBjZmcvc291bmQuc2NjIgogICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPgogICAgICAgICAgICAgPC9nbG9zc2RlZj4KICAgICAgICAgPC9nbG9zc2VudHJ5PgpAQCAtNzczOSw3ICs3OTE3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNPUFlfTElDX01BTklGRVNUJz48ZmlsZW5hbWU+Q09QWV9MSUNfTUFOSUZFU1Q8L2ZpbGVuYW1lPjwvbGluaz4KICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIGFuZCB0aGUKICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3Byb3ZpZGluZy1saWNlbnNlLXRleHQnPlByb3ZpZGluZyBMaWNlbnNlIFRleHQ8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KQEAgLTc4MzgsNyArODAxNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMgdGhlIHNlYXJjaAogICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMgdXNlZCBieSB0aGUga2VybmVsIHRvb2xzIHRvIGZpbmQgdGhlIGFwcHJvcHJpYXRlCiAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIHdpdGhpbiB0aGUga2VybmVsCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J21ldGFkYXRhJz5NZXRhZGF0YTwvbGluaz4KICAgICAgICAgICAgICAgICAgICAgd2l0aCB3aGljaCB0byBidWlsZCBvdXQgdGhlIHNvdXJjZXMgYW5kIGNvbmZpZ3VyYXRpb24uCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CkBAIC03OTQyLDcgKzgxMjAsNyBAQAogICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHRhcmdldCBkZXZpY2UgZm9yIHdoaWNoIHRoZSBpbWFnZSBpcyBidWlsdC4KICAgICAgICAgICAgICAgICAgICAgWW91IGRlZmluZSA8ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+IGluIHRoZQogICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgZm91bmQgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPiBpcyBzZXQgdG8KICAgICAgICAgICAgICAgICAgICAgInFlbXV4ODYiLCB3aGljaCBpcyBhbiB4ODYtYmFzZWQgYXJjaGl0ZWN0dXJlIG1hY2hpbmUgdG8KICAgICAgICAgICAgICAgICAgICAgYmUgZW11bGF0ZWQgdXNpbmcgUUVNVToKQEAgLTc5NTcsNyArODEzNSw3IEBACiAgICAgICAgICAgICAgICAgICAgIFRodXMsIHdoZW4gPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPiBpcyBzZXQgdG8gInFlbXV4ODYiIHRoZXJlCiAgICAgICAgICAgICAgICAgICAgIGV4aXN0cyB0aGUgY29ycmVzcG9uZGluZyA8ZmlsZW5hbWU+cWVtdXg4Ni5jb25mPC9maWxlbmFtZT4gbWFjaGluZQogICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUsIHdoaWNoIGNhbiBiZSBmb3VuZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CiAgICAgICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZTwvZmlsZW5hbWU+LgogICAgICAgICAgICAgICAgIDwvcGFyYT4KIApAQCAtODcwOCw2ICs4ODg2LDI5IEBACiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CiAKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1OT0FVVE9QQUNLQUdFREVCVUcnPjxnbG9zc3Rlcm0+Tk9BVVRPUEFDS0FHRURFQlVHPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBOT0FVVE9QQUNLQUdFREVCVUdbZG9jXSA9ICJEaXNhYmxlcyBhdXRvIHBhY2thZ2UgZnJvbSBzcGxpdHRpbmcgLmRlYnVnIGZpbGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERpc2FibGVzIGF1dG8gcGFja2FnZSBmcm9tIHNwbGl0dGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmRlYnVnPC9maWxlbmFtZT4gZmlsZXMuIElmIGEgcmVjaXBlIHJlcXVpcmVzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU18ke1BOfS1kYmc8L2ZpbGVuYW1lPiB0byBiZSBzZXQgbWFudWFsbHksCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Tk9BVVRPUEFDS0FHRURFQlVHPC9maWxlbmFtZT4gY2FuIGJlIGRlZmluZWQKKyAgICAgICAgICAgICAgICAgICAgYWxsb3dpbmcgeW91IHRvIGRlZmluZSB0aGUgY29udGVudCBvZiB0aGUgZGVidWcgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTk9BVVRPUEFDS0FHRURFQlVHID0gIjEiCisgICAgIEZJTEVTXyR7UE59LWRldiA9ICIke2luY2x1ZGVkaXJ9LyR7UVRfRElSX05BTUV9L1F0LyoiCisgICAgIEZJTEVTXyR7UE59LWRiZyA9ICIvdXNyL3NyYy9kZWJ1Zy8iCisgICAgIEZJTEVTXyR7UVRfQkFTRV9OQU1FfS1kZW1vcy1kb2MgPSAiJHtkb2NkaXJ9LyR7UVRfRElSX05BTUV9L3FjaC9xdC5xY2giCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKICAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1OT0hERCc+PGdsb3NzdGVybT5OT0hERDwvZ2xvc3N0ZXJtPgogICAgICAgICAgICAgPGluZm8+CiAgICAgICAgICAgICAgICAgTk9IRERbZG9jXSA9ICJDYXVzZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gc2tpcCBidWlsZGluZyB0aGUgLmhkZGltZyBpbWFnZS4iCkBAIC04Nzk4LDcgKzg5OTksNyBAQAogICAgICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvYmluY29uZmlnLmJiY2xhc3M8L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgICAgICBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CiAgICAgICAgICAgICAgICAgICAgIGZvciBkZXRhaWxzIG9uIGhvdyB0aGlzIGNsYXNzIGFwcGxpZXMgdGhlc2UgYWRkaXRpb25hbAogICAgICAgICAgICAgICAgICAgICBzZWQgY29tbWFuZCBhcmd1bWVudHMuCiAgICAgICAgICAgICAgICAgICAgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIHRoZQpAQCAtODg2Myw3ICs5MDY0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1jIGRldnNoZWxsPC9maWxlbmFtZT4gY29tbWFuZC1saW5lIG9wdGlvbikuCiAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCiAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwbGF0ZGV2LWFwcGRldi1kZXZzaGVsbCc+VXNpbmcgYSBEZXZlbG9wbWVudCBTaGVsbDwvdWxpbms+IiBzZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgICAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgICAgICAgPHBhcmE+CkBAIC04ODkxLDE5ICs5MDkyLDE3IEBACiA8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgogICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGZyb20gd2hpY2ggdGhlIHRvcC1sZXZlbCBidWlsZCBlbnZpcm9ubWVudAogICAgICAgICAgICAgICAgICAgICBzZXR1cCBzY3JpcHQgaXMgc291cmNlZC4KLSAgICAgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgbWFrZXMgdHdvIHRvcC1sZXZlbCBidWlsZCBlbnZpcm9ubWVudAotICAgICAgICAgICAgICAgICAgICBzZXR1cCBzY3JpcHRzIGF2YWlsYWJsZToKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgYW5kCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4uCi0gICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHJ1biBvbmUgb2YgdGhlc2Ugc2NyaXB0cywgdGhlCisgICAgICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIGEgdG9wLWxldmVsIGJ1aWxkIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgIHNldHVwIHNjcmlwdDoKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHJ1biB0aGlzIHNjcmlwdCwgdGhlCiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5PRVJPT1Q8L2ZpbGVuYW1lPiB2YXJpYWJsZSByZXNvbHZlcyB0byB0aGUKICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIHNjcmlwdC4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZCwKLSAgICAgICAgICAgICAgICAgICAgc2VlIHRoZSBpbml0aWFsaXphdGlvbiBzY3JpcHRzLgorICAgICAgICAgICAgICAgICAgICBzZWUgdGhlIGluaXRpYWxpemF0aW9uIHNjcmlwdC4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CkBAIC05MDg2LDcgKzkyODUsNyBAQAogICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlLCB3aGljaCBpcyBzZXQgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlIGZvdW5kIGluCiAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGZvbGRlciBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LAogICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgdGhlIHBhY2thZ2UgbWFuYWdlciB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQogICAgICAgICAgICAgICAgICAgICB1c2VzIHdoZW4gcGFja2FnaW5nIGRhdGEuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgpAQCAtOTE3OSw3ICs5Mzc4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG91dCBtb3JlIGFib3V0IGRlYnVnZ2luZyB1c2luZyBHREIgYnkgcmVhZGluZwogICAgICAgICAgICAgICAgICAgICB0aGUKICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BsYXRkZXYtZ2RiLXJlbW90ZWRlYnVnJz5EZWJ1Z2dpbmcgV2l0aCB0aGUgR05VIFByb2plY3QgRGVidWdnZXIgKEdEQikgUmVtb3RlbHk8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KQEAgLTk0NjYsNyArOTY2NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgogICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gY3JlYXRpbmcgYW4gaW5pdHJhbWZzLCBzZWUgdGhlCiAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZGluZy1hbi1pbml0cmFtZnMtaW1hZ2UnPkJ1aWxkaW5nIGFuIEluaXRpYWwgUkFNIEZpbGVzeXN0ZW0gKGluaXRyYW1mcykgSW1hZ2U8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KQEAgLTk1MjIsNyArOTcyMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBydW5uaW5nIHBvc3QtaW5zdGFsbGF0aW9uIHNjcmlwdHMsIHNlZQogICAgICAgICAgICAgICAgICAgICB0aGUKICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I25ldy1yZWNpcGUtcG9zdC1pbnN0YWxsYXRpb24tc2NyaXB0cyc+UG9zdC1JbnN0YWxsYXRpb24gU2NyaXB0czwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9nbG9zc2RlZj4KICAgICAgICAgPC9nbG9zc2VudHJ5PgpAQCAtOTY1NCw3ICs5ODUzLDcgQEAKIAogICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VDT05GSUdfQ09ORkFSR1MnPjxnbG9zc3Rlcm0+UEFDS0FHRUNPTkZJR19DT05GQVJHUzwvZ2xvc3N0ZXJtPgogICAgICAgICAgICAgPGluZm8+Ci0gICAgICAgICAgICAgICAgUEFDS0FHRUNPTkZJR19DT05GQVJHU1tkb2NdID0gIkEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zIGdlbmVyYXRlZCBmcm9tIFBBQ0tBR0VDT05GSUcuIgorICAgICAgICAgICAgICAgIFBBQ0tBR0VDT05GSUdfQ09ORkFSR1NbZG9jXSA9ICJBIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBnZW5lcmF0ZWQgZnJvbSB0aGUgUEFDS0FHRUNPTkZJRyBzZXR0aW5nLiIKICAgICAgICAgICAgIDwvaW5mbz4KICAgICAgICAgICAgIDxnbG9zc2RlZj4KICAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KQEAgLTk3ODksNyArOTk4OCw3IEBACiAgICAgICAgICAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIG9mIGhvdyB0byB1c2UgdGhlIDxmaWxlbmFtZT5QQUNLQUdFU19EWU5BTUlDPC9maWxlbmFtZT4KICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgd2hlbiB5b3UgYXJlIHNwbGl0dGluZyBwYWNrYWdlcywgc2VlIHRoZQogICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjaGFuZGxpbmctb3B0aW9uYWwtbW9kdWxlLXBhY2thZ2luZyc+SGFuZGxpbmcgT3B0aW9uYWwgTW9kdWxlIFBhY2thZ2luZzwvdWxpbms+IiBzZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KQEAgLTk4NTQsNyArMTAwNTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJlY2lwZSBhcyBhIHdvcmthcm91bmQuCiAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gYWRkcmVzc2luZyByYWNlIGNvbmRpdGlvbnMsIHNlZSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNkZWJ1Z2dpbmctcGFyYWxsZWwtbWFrZS1yYWNlcyc+RGVidWdnaW5nIFBhcmFsbGVsIE1ha2UgUmFjZXM8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwuCiAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgICAgICAgICAgICAgRm9yIHNpbmdsZSBzb2NrZXQgc3lzdGVtcyAoaS5lLiBvbmUgQ1BVKSwgeW91IHNob3VsZCBub3QKICAgICAgICAgICAgICAgICAgICAgaGF2ZSB0byBvdmVycmlkZSB0aGlzIHZhcmlhYmxlIHRvIGdhaW4gb3B0aW1hbCBwYXJhbGxlbGlzbQpAQCAtOTkwMyw3ICsxMDEwMiw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVjaXBlIGFzIGEgd29ya2Fyb3VuZC4KICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBhZGRyZXNzaW5nIHJhY2UgY29uZGl0aW9ucywgc2VlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2RlYnVnZ2luZy1wYXJhbGxlbC1tYWtlLXJhY2VzJz5EZWJ1Z2dpbmcgUGFyYWxsZWwgTWFrZSBSYWNlczwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgpAQCAtMTAzODUsNyArMTA1ODUsOCBAQAogICAgICAgICAgICAgICAgICAgICBjdW1iZXJzb21lIGFuZCBlcnJvci1wcm9uZSwgYW4gYXV0b21hdGVkIHNvbHV0aW9uIGV4aXN0cy4KICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQogICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjd29ya2luZy13aXRoLWEtcHItc2VydmljZSc+V29ya2luZyBXaXRoIGEgUFIgU2VydmljZTwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbAorICAgICAgICAgICAgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CkBAIC0xMDQwOSw2ICsxMDYxMCw4IEBACiAgICAgIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIgPSAieHNlcnZlci14Zjg2IgogICAgICBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbCA/PSAibWVzYSIKICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J21ldGFkYXRhLXZpcnR1YWwtcHJvdmlkZXJzJz5NZXRhZGF0YSAoVmlydHVhbCBQcm92aWRlcnMpPC9saW5rPgogICAgICAgICAgICAgICAgICAgICA8bm90ZT4KICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBzZXQgPGZpbGVuYW1lPlBSRUZFUlJFRF9QUk9WSURFUjwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYSA8ZmlsZW5hbWU+dmlydHVhbC8qPC9maWxlbmFtZT4gaXRlbSwgdGhlbiBhbnkKQEAgLTEwNDQ1LDcgKzEwNjQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgdHdvIGV4YW1wbGVzOgogICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgIFBSRUZFUlJFRF9WRVJTSU9OX3B5dGhvbiA9ICIzLjQuMCIKLSAgICAgUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8gPSAiMy4xOSUiCisgICAgIFBSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvID0gIjQuMTIlIgogICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgICAgIDxub3RlPgogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHNwZWNpZmllZCB2ZXJzaW9uIGlzIG1hdGNoZWQgYWdhaW5zdApAQCAtMTA0ODAsMTQgKzEwNjgzLDE0IEBACiAgICAgICAgICAgICAgICAgICAgIHRvIHNldCBhIG1hY2hpbmUtc3BlY2lmaWMgb3ZlcnJpZGUuCiAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0b19xZW11eDg2ID0gIjMuNCUiCisgICAgIFBSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvX3FlbXV4ODYgPSAiNC4xMiUiCiAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICAgICAgQWx0aG91Z2ggbm90IHJlY29tbWVuZGVkLCB3b3JzdCBjYXNlLCB5b3UgY2FuIGFsc28gdXNlIHRoZQogICAgICAgICAgICAgICAgICAgICAiZm9yY2V2YXJpYWJsZSIgb3ZlcnJpZGUsIHdoaWNoIGlzIHRoZSBzdHJvbmdlc3Qgb3ZlcnJpZGUKICAgICAgICAgICAgICAgICAgICAgcG9zc2libGUuCiAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0b19mb3JjZXZhcmlhYmxlID0gIjMuNCUiCisgICAgIFBSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvX2ZvcmNldmFyaWFibGUgPSAiNC4xMiUiCiAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPl9mb3JjZXZhcmlhYmxlPC9maWxlbmFtZT4gb3ZlcnJpZGUgaXMKQEAgLTEwNTMyLDcgKzEwNzM1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIHRvIGF0dGVtcHQgYmVmb3JlIGFueSBvdGhlcnMgYnkgYWRkaW5nCiAgICAgICAgICAgICAgICAgICAgIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgdG8gdGhlCiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz46CiAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgUFJFTUlSUk9SU19wcmVwZW5kID0gIlwKICAgICAgZ2l0Oi8vLiovLiogaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3NvdXJjZXMvIFxuIFwKQEAgLTEwNzEwLDcgKzEwOTEzLDcgQEAKICAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmYuc2FtcGxlLmV4dGVuZGVkPC9maWxlbmFtZT4KICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KICAgICAgICAgICAgICAgICAgICAgc2hvd3MgaG93IHRoZSA8ZmlsZW5hbWU+UFJTRVJWX0hPU1Q8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcwogICAgICAgICAgICAgICAgICAgICBzZXQ6CiAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KQEAgLTExNDk0LDcgKzExNjk3LDcgQEAKICAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KIDwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CiAgICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhdGlvbiBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4KICAgICAgICAgICAgICAgICAgICAgd2hlcmUgdW5wYWNrZWQgcmVjaXBlIHNvdXJjZSBjb2RlIHJlc2lkZXMuCiAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgZGlyZWN0b3J5IGlzCiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn0vJHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1CUE4nPjxmaWxlbmFtZT5CUE48L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fS0kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LApAQCAtMTE1MDIsNyArMTE3MDUsNyBAQAogICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPiR7UFZ9PC9maWxlbmFtZT4gaXMgdGhlIHJlY2lwZSB2ZXJzaW9uLgogICAgICAgICAgICAgICAgICAgICBJZiB0aGUgc291cmNlIHRhcmJhbGwgZXh0cmFjdHMgdGhlIGNvZGUgdG8gYSBkaXJlY3RvcnkKICAgICAgICAgICAgICAgICAgICAgbmFtZWQgYW55dGhpbmcgb3RoZXIgdGhhbiA8ZmlsZW5hbWU+JHtCUE59LSR7UFZ9PC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgICAgIG9yIGlmIHRoZSBzb3VyY2UgY29kZSBpZiBmZXRjaGVkIGZyb20gYW4gU0NNIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgb3IgaWYgdGhlIHNvdXJjZSBjb2RlIGlzIGZldGNoZWQgZnJvbSBhbiBTQ00gc3VjaCBhcwogICAgICAgICAgICAgICAgICAgICBHaXQgb3IgU3VidmVyc2lvbiwgdGhlbiB5b3UgbXVzdCBzZXQgPGZpbGVuYW1lPlM8L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgICAgICBpbiB0aGUgcmVjaXBlIHNvIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KICAgICAgICAgICAgICAgICAgICAga25vd3Mgd2hlcmUgdG8gZmluZCB0aGUgdW5wYWNrZWQgc291cmNlLgpAQCAtMTE1MTAsNyArMTE3MTMsNyBAQAogCiAgICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGFzc3VtZSBhCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgogICAgICAgICAgICAgICAgICAgICB0b3AtbGV2ZWwgZm9sZGVyIG5hbWVkIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gYW5kIGEKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBCdWlsZCBEaXJlY3RvcnkgYXQgPGZpbGVuYW1lPnBva3kvYnVpbGQ8L2ZpbGVuYW1lPi4KICAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgd29yayBkaXJlY3RvcnkgdGhlIGJ1aWxkIHN5c3RlbSB1c2VzCkBAIC0xMjQxMiw3ICsxMjYxNSw3IEBACiAgICAgICAgICAgICAgICAgICAgIFRvIGVuYWJsZSBmaWxlIHJlbW92YWwsIHNldCB0aGUgdmFyaWFibGUgdG8gIjEiIGluIHlvdXIKICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZQogICAgICAgICAgICAgICAgICAgICBpbiB5b3VyOgotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCiAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgU0tJUF9GSUxFREVQUyA9ICIxIgogICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CkBAIC0xMjYxOSw3ICsxMjgyMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5maWxlOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmV0Y2hlcyBmaWxlcywgd2hpY2ggYXJlIHVzdWFsbHkgZmlsZXMgc2hpcHBlZCB3aXRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nbWV0YWRhdGEnPk1ldGFkYXRhPC9saW5rPiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBsb2NhbCBtYWNoaW5lLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwYXRoIGlzIHJlbGF0aXZlIHRvIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFU1BBVEgnPjxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPjwvbGluaz4KQEAgLTEyODE5LDcgKzEzMDIyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5TUkNQVjwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIGRlZmluZWQgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbgogICAgICAgICAgICAgICAgICAgICBmaWxlIGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KICAgICAgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICBTUkNQViA9ICIke0BiYi5mZXRjaDIuZ2V0X3NyY3JldihkKX0iCkBAIC0xMjg2Myw3ICsxMzA2Niw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQVVUT1JFVic+PGZpbGVuYW1lPkFVVE9SRVY8L2ZpbGVuYW1lPjwvbGluaz4KICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGRlc2NyaXB0aW9uIGFuZCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNhdXRvbWF0aWNhbGx5LWluY3JlbWVudGluZy1hLWJpbmFyeS1wYWNrYWdlLXJldmlzaW9uLW51bWJlcic+QXV0b21hdGljYWxseSBJbmNyZW1lbnRpbmcgYSBCaW5hcnkgUGFja2FnZSBSZXZpc2lvbiBOdW1iZXI8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24sIHdoaWNoIGlzIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24sIHdoaWNoIGlzIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgICAgICBUYXNrcyBNYW51YWwuCiAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAKQEAgLTEzMTE2LDcgKzEzMzIwLDggQEAKICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNZU1JPT1RfRElSUyc+PGZpbGVuYW1lPlNZU1JPT1RfRElSUzwvZmlsZW5hbWU+PC9saW5rPgogICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgdGhlCiAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNuZXctc2hhcmluZy1maWxlcy1iZXR3ZWVuLXJlY2lwZXMnPlNoYXJpbmcgRmlsZXMgQmV0d2VlbiBSZWNpcGVzPC91bGluaz4iCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsCisgICAgICAgICAgICAgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgICAgICA8bm90ZT4KICAgICAgICAgICAgICAgICAgICAgICAgIFJlY2lwZXMgc2hvdWxkIG5ldmVyIHdyaXRlIGZpbGVzIGRpcmVjdGx5IHVuZGVyCiAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlNUQUdJTkdfRElSPC9maWxlbmFtZT4gZGlyZWN0b3J5IGJlY2F1c2UKQEAgLTEzNTgzLDE1ICsxMzc4OCwxMiBAQAogPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KICAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHVuZGVyIHRoZSB3b3JrIGRpcmVjdG9yeQogICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59L3N5c3Jvb3QtZGVzdGlkaXI8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgIjxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn0vc3lzcm9vdC1kZXN0ZGlyPC9maWxlbmFtZT4iKQogICAgICAgICAgICAgICAgICAgICB3aGVyZSB0aGUgZmlsZXMKICAgICAgICAgICAgICAgICAgICAgdGhhdCB3aWxsIGJlIHBvcHVsYXRlZCBpbnRvIHRoZSBzeXNyb290IGFyZSBhc3NlbWJsZWQKICAgICAgICAgICAgICAgICAgICAgZHVyaW5nIHRoZQogICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcG9wdWxhdGVfc3lzcm9vdCc+PGZpbGVuYW1lPmRvX3BvcHVsYXRlX3N5c3Jvb3Q8L2ZpbGVuYW1lPjwvbGluaz4KICAgICAgICAgICAgICAgICAgICAgdGFzay4KLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBTWVNST09UX0RFU1RESVIgPz0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIgotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9nbG9zc2RlZj4KICAgICAgICAgPC9nbG9zc2VudHJ5PgpAQCAtMTQwMjYsNyArMTQyMjgsNyBAQAogICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS10aHVtYi5pbmM8L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgICAgICBmaWxlIGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KICAgICAgICAgICAgICAgICAgICAgZm9yIGFuIGV4YW1wbGUuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9nbG9zc2RlZj4KQEAgLTE0MjkyLDcgKzE0NDk0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgVGhlIHN1ZmZpeCBpZGVudGlmaWVzIHRoZSA8ZmlsZW5hbWU+bGliYzwvZmlsZW5hbWU+IHZhcmlhbnQKICAgICAgICAgICAgICAgICAgICAgZm9yIGJ1aWxkaW5nLgogICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBhcmUgYnVpbGRpbmcgZm9yIG11bHRpcGxlIHZhcmlhbnRzIHdpdGggdGhlIHNhbWUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LAogICAgICAgICAgICAgICAgICAgICB0aGlzIG1lY2hhbmlzbSBlbnN1cmVzIHRoYXQgb3V0cHV0IGZvciBkaWZmZXJlbnQKICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYmM8L2ZpbGVuYW1lPiB2YXJpYW50cyBpcyBrZXB0IHNlcGFyYXRlIHRvCiAgICAgICAgICAgICAgICAgICAgIGF2b2lkIHBvdGVudGlhbCBjb25mbGljdHMuCkBAIC0xNDQ1MCw3ICsxNDY1Miw3IEBACiAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zc2g8L2ZpbGVuYW1lPi4KICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgdGhpcyB2YXJpYWJsZSB0byAiMSIgaW4geW91cgogICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+CiAgICAgICAgICAgICAgICAgICAgIHRvIGhhdmUgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBydW4KICAgICAgICAgICAgICAgICAgICAgdGhlc2UgdGVzdHMgYWZ0ZXIgYW4gaW1hZ2Ugc3VjY2Vzc2Z1bGx5IGJ1aWxkczoKICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgpAQCAtMTQ0NTksNyArMTQ2NjEsOCBAQAogICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBlbmFibGluZywgcnVubmluZywgYW5kIHdyaXRpbmcKICAgICAgICAgICAgICAgICAgICAgdGhlc2UgdGVzdHMsIHNlZSB0aGUKICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BlcmZvcm1pbmctYXV0b21hdGVkLXJ1bnRpbWUtdGVzdGluZyc+UGVyZm9ybWluZyBBdXRvbWF0ZWQgUnVudGltZSBUZXN0aW5nPC91bGluaz4iCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwgYW5kCisgICAgICAgICAgICAgICAgICAgIHRoZQogICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdGVzdGltYWdlKic+PGZpbGVuYW1lPnRlc3RpbWFnZSouYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KICAgICAgICAgICAgICAgICA8L3BhcmE+CkBAIC0xNDU0Myw3ICsxNDc0Niw3IEBACiAgICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRlc3RpbmcgaW1hZ2VzLCBzZWUgdGhlCiAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwZXJmb3JtaW5nLWF1dG9tYXRlZC1ydW50aW1lLXRlc3RpbmcnPlBlcmZvcm1pbmcgQXV0b21hdGVkIFJ1bnRpbWUgVGVzdGluZzwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9nbG9zc2RlZj4KICAgICAgICAgPC9nbG9zc2VudHJ5PgpAQCAtMTQ2NTAsOCArMTQ4NTMsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvb3RzIGEgUUVNVSBpbWFnZSBhbmQgcnVucyB0aGUgdGVzdHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNxZW11LWltYWdlLWVuYWJsaW5nLXRlc3RzJz5FbmFibGluZyBSdW50aW1lIFRlc3RzIG9uIFFFTVU8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW51YWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJzaW1wbGVyZW1vdGUiIGFuZCAiU2ltcGxlUmVtb3RlVGFyZ2V0Ijo8L2VtcGhhc2lzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnMgdGhlIHRlc3RzIG9uIHRhcmdldCBoYXJkd2FyZSB0aGF0IGlzIGFscmVhZHkKQEAgLTE0NjgzLDcgKzE0ODg2LDcgQEAKICAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHJ1bm5pbmcgdGVzdHMgb24gaGFyZHdhcmUsIHNlZSB0aGUKICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2hhcmR3YXJlLWltYWdlLWVuYWJsaW5nLXRlc3RzJz5FbmFibGluZyBSdW50aW1lIFRlc3RzIG9uIEhhcmR3YXJlPC91bGluaz4iCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CkBAIC0xNDc3Miw3ICsxNDk3NSw3IEBACiAgICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRlc3RpbmcgaW1hZ2VzLCBzZWUgdGhlCiAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwZXJmb3JtaW5nLWF1dG9tYXRlZC1ydW50aW1lLXRlc3RpbmcnPlBlcmZvcm1pbmcgQXV0b21hdGVkIFJ1bnRpbWUgVGVzdGluZzwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9nbG9zc2RlZj4KICAgICAgICAgPC9nbG9zc2VudHJ5PgpAQCAtMTQ4MTgsNyArMTUwMjEsNyBAQAogICAgICAgICAgICAgICAgICAgICBmaWxlcyAob3RoZXIgdGhhbiB0aGUgc2hhcmVkIHN0YXRlIGNhY2hlKS4KICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBwb2ludHMKICAgICAgICAgICAgICAgICAgICAgdG8gPGZpbGVuYW1lPnRtcDwvZmlsZW5hbWU+IHdpdGhpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LgogICAgICAgICAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICAgICAgICAgIDxwYXJhPgpAQCAtMTQ4MjYsNyArMTUwMjksNyBAQAogICAgICAgICAgICAgICAgICAgICB0aGFuIHRoZSBkZWZhdWx0LCB5b3UgY2FuIHVuY29tbWVudCBhbmQgZWRpdCB0aGUgZm9sbG93aW5nCiAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCBpbiB0aGUKICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz46CiAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgI1RNUERJUiA9ICIke1RPUERJUn0vdG1wIgogICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CkBAIC0xNDg3Miw4ICsxNTA3NSw5IEBACiAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCBidXQgeW91IGNhbiBhZGQgYWRkaXRpb25hbCBwYWNrYWdlcyB0byB0aGUgbGlzdC4KICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQogICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfU0RLX1VSTDsjc2RrLWFkZGluZy1pbmRpdmlkdWFsLXBhY2thZ2VzJz5BZGRpbmcgSW5kaXZpZHVhbCBQYWNrYWdlcyB0byB0aGUgU3RhbmRhcmQgU0RLPC91bGluaz4iCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspCi0gICAgICAgICAgICAgICAgICAgIERldmVsb3BlcidzIEd1aWRlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BtZW50IGFuZAorICAgICAgICAgICAgICAgICAgICB0aGUgRXh0ZW5zaWJsZSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKGVTREspIG1hbnVhbAorICAgICAgICAgICAgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgICAgICA8cGFyYT4KQEAgLTE0ODgzLDcgKzE1MDg3LDggQEAKICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHNldHRpbmcgdXAgYSBjcm9zcy1kZXZlbG9wbWVudAogICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCwgc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyNzZGstbWFudWFsJz5Zb2N0byBQcm9qZWN0IFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoU0RLKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyc+WW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBhbmQgdGhlIEV4dGVuc2libGUgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChlU0RLKTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIG1hbnVhbC4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CkBAIC0xNDkyOSw4ICsxNTEzNCw5IEBACiAgICAgICAgICAgICAgICAgICAgIHBhcnQgb2YgdGhlIFNESyB0aGF0IHJ1bnMgb24gdGhlIHRhcmdldC4KICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQogICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfU0RLX1VSTDsjc2RrLWFkZGluZy1pbmRpdmlkdWFsLXBhY2thZ2VzJz5BZGRpbmcgSW5kaXZpZHVhbCBQYWNrYWdlcyB0byB0aGUgU3RhbmRhcmQgU0RLPC91bGluaz4iCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspCi0gICAgICAgICAgICAgICAgICAgIERldmVsb3BlcidzIEd1aWRlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BtZW50IGFuZAorICAgICAgICAgICAgICAgICAgICB0aGUgRXh0ZW5zaWJsZSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKGVTREspIG1hbnVhbCBmb3IKKyAgICAgICAgICAgICAgICAgICAgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgICAgICA8cGFyYT4KQEAgLTE0OTQwLDcgKzE1MTQ2LDggQEAKICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHNldHRpbmcgdXAgYSBjcm9zcy1kZXZlbG9wbWVudAogICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCwgc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyNzZGstbWFudWFsJz5Zb2N0byBQcm9qZWN0IFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoU0RLKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyc+WW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBhbmQgdGhlIEV4dGVuc2libGUgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChlU0RLKTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIG1hbnVhbC4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CkBAIC0xNDk1MywxMiArMTUxNjAsMTAgQEAKICAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KIDwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CiAgICAgICAgICAgICAgICAgICAgIFRoZSB0b3AtbGV2ZWwKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LgogICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGF1dG9tYXRpY2FsbHkgc2V0cyB0aGlzIHZhcmlhYmxlIHdoZW4geW91Ci0gICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemUgeW91ciBidWlsZCBlbnZpcm9ubWVudCB1c2luZyBlaXRoZXIKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgb3IKLSAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZSB5b3VyIGJ1aWxkIGVudmlyb25tZW50IHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L2xpbms+LgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KQEAgLTE1MDEwLDcgKzE1MjE1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZQogICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9taXBzL1JFQURNRTwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIGZpbGUgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgogICAgICAgICAgICAgICAgICAgICBwcm92aWRlcyBpbmZvcm1hdGlvbiBmb3IgPGZpbGVuYW1lPlRVTkVfQVJDSDwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIHRvIHRoZSA8ZmlsZW5hbWU+bWlwczwvZmlsZW5hbWU+IGFyY2hpdGVjdHVyZS4KICAgICAgICAgICAgICAgICA8L3BhcmE+CkBAIC0xNTI5Myw3ICsxNTQ5OCw3IEBACiAgICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIEtub3duIHR1bmluZyBjb25mbGljdHMgYXJlIHNwZWNpZmllZCBpbiB0aGUgbWFjaGluZSBpbmNsdWRlCiAgICAgICAgICAgICAgICAgICAgIGZpbGVzIGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgogICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGUKICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy9hcmNoLW1pcHMuaW5jPC9maWxlbmFtZT4KICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSBmaWxlIHRoYXQgbGlzdHMgdGhlICJvMzIiIGFuZCAibjY0IiBmZWF0dXJlcyBhcwpAQCAtMTUzMjUsNyArMTU1MzAsNyBAQAogCiAgICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgbWFjaGluZSBpbmNsdWRlIGZpbGVzIGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZXNlIGZlYXR1cmVzLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CkBAIC0xNTY2Miw3ICsxNTg2Nyw3IEBACiAgICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NlbGVjdGluZy1kZXYtbWFuYWdlcic+U2VsZWN0aW5nIGEgRGV2aWNlIE1hbmFnZXI8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgZm9yCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsIGZvcgogICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoaXMgdmFyaWFibGUuCiAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgPC9nbG9zc2RlZj4KQEAgLTE1NzE3LDcgKzE1OTIyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZQogICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1wb2t5L2NvbmYvbG9jYWwuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiBpbgogICAgICAgICAgICAgICAgICAgICB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi4KICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICA8L2dsb3NzZGVmPgogICAgICAgICA8L2dsb3NzZW50cnk+CkBAIC0xNjA1NiwxMiArMTYyNjEsMTMgQEAKICAgICAgICAgICAgICAgICAgICAga2lja3N0YXJ0IGZpbGUgdGhhdCBpcyB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKICAgICAgICAgICAgICAgICAgICAgc3lzdGVtIHRvIGNyZWF0ZSBhIHBhcnRpdGlvbmVkIGltYWdlCiAgICAgICAgICAgICAgICAgICAgICg8cmVwbGFjZWFibGU+aW1hZ2U8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4ud2ljPC9maWxlbmFtZT4pLgotICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGNyZWF0ZSBhCi0gICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbmVkIGltYWdlLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy13aWMtaW1hZ2VzLW9lJz5DcmVhdGluZyBQYXJ0aXRpb25lZCBJbWFnZXM8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjcmVhdGUgYSBwYXJ0aXRpb25lZCBpbWFnZSwgc2VlCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY3JlYXRpbmctcGFydGl0aW9uZWQtaW1hZ2VzLXVzaW5nLXdpYyc+Q3JlYXRpbmcgUGFydGl0aW9uZWQgSW1hZ2VzIFVzaW5nIFdpYzwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KICAgICAgICAgICAgICAgICAgICAgRm9yIGRldGFpbHMgb24gdGhlIGtpY2tzdGFydCBmaWxlIGZvcm1hdCwgc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjb3BlbmVtYmVkZGVkLWtpY2tzdGFydC13a3MtcmVmZXJlbmNlJz5PcGVuRW1iZWRkZWQgS2lja3N0YXJ0ICg8ZmlsZW5hbWU+LndrczwvZmlsZW5hbWU+KSBSZWZlcmVuY2U8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J29wZW5lbWJlZGRlZC1raWNrc3RhcnQtd2tzLXJlZmVyZW5jZSc+T3BlbkVtYmVkZGVkIEtpY2tzdGFydCAoPGZpbGVuYW1lPi53a3M8L2ZpbGVuYW1lPikgUmVmZXJlbmNlPC9saW5rPgorICAgICAgICAgICAgICAgICAgICBDaGFwdGVyLgogICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CiAgICAgICAgIDwvZ2xvc3NlbnRyeT4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVzb3VyY2VzLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVzb3VyY2VzLnhtbAppbmRleCA4Mjk5ZjlmLi5kNTliZWEyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3Jlc291cmNlcy54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZXNvdXJjZXMueG1sCkBAIC0zLDI1ICszLDcxIEBACiBbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CiAKIDxjaGFwdGVyIGlkPSdyZXNvdXJjZXMnPgotPHRpdGxlPkNvbnRyaWJ1dGluZyB0byB0aGUgWW9jdG8gUHJvamVjdDwvdGl0bGU+Cis8dGl0bGU+Q29udHJpYnV0aW9ucyBhbmQgQWRkaXRpb25hbCBJbmZvcm1hdGlvbjwvdGl0bGU+CiAKIDxzZWN0aW9uIGlkPSdyZXNvdXJjZXMtaW50cm8nPgogICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgogICAgIDxwYXJhPgotICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB0ZWFtIGlzIGhhcHB5IGZvciBwZW9wbGUgdG8gZXhwZXJpbWVudCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LgotICAgICAgICBBIG51bWJlciBvZiBwbGFjZXMgZXhpc3QgdG8gZmluZCBoZWxwIGlmIHlvdSBydW4gaW50byBkaWZmaWN1bHRpZXMgb3IgZmluZCBidWdzLgotICAgICAgICBUbyBmaW5kIG91dCBob3cgdG8gZG93bmxvYWQgc291cmNlIGNvZGUsCi0gICAgICAgIHNlZSB0aGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2xvY2FsLXlwLXJlbGVhc2UnPllvY3RvIFByb2plY3QgUmVsZWFzZTwvdWxpbms+IgotICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgdGVhbSBpcyBoYXBweSBmb3IgcGVvcGxlIHRvIGV4cGVyaW1lbnQgd2l0aCB0aGUKKyAgICAgICAgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgQSBudW1iZXIgb2YgcGxhY2VzIGV4aXN0IHRvIGZpbmQgaGVscCBpZiB5b3UgcnVuIGludG8gZGlmZmljdWx0aWVzCisgICAgICAgIG9yIGZpbmQgYnVncy4KKyAgICAgICAgVGhpcyBwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCBjb250cmlidXRpbmcgYW5kIHBhcnRpY2lwYXRpbmcgaW4KKyAgICAgICAgdGhlIFlvY3RvIFByb2plY3QuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVzb3VyY2VzLWNvbnRyaWJ1dGlvbnMnPgorICAgIDx0aXRsZT5Db250cmlidXRpb25zPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBnbGFkbHkgYWNjZXB0cyBjb250cmlidXRpb25zLgorICAgICAgICBZb3UgY2FuIHN1Ym1pdCBjaGFuZ2VzIHRvIHRoZSBwcm9qZWN0IGVpdGhlciBieSBjcmVhdGluZyBhbmQgc2VuZGluZworICAgICAgICBwdWxsIHJlcXVlc3RzLAorICAgICAgICBvciBieSBzdWJtaXR0aW5nIHBhdGNoZXMgdGhyb3VnaCBlbWFpbC4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBkbyBib3RoIGFzIHdlbGwgYXMgaW5mb3JtYXRpb24gb24gaG93CisgICAgICAgIHRvIGlkZW50aWZ5IHRoZSBtYWludGFpbmVyIGZvciBlYWNoIGFyZWEgb2YgY29kZSwgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjaG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+U3VibWl0dGluZyBhIENoYW5nZSB0byB0aGUgWW9jdG8gUHJvamVjdDwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KICAgICA8L3BhcmE+CiA8L3NlY3Rpb24+CiAKIDxzZWN0aW9uIGlkPSdyZXNvdXJjZXMtYnVndHJhY2tlcic+Ci0gICAgPHRpdGxlPlRyYWNraW5nIEJ1Z3M8L3RpdGxlPgorICAgIDx0aXRsZT5Zb2N0byBQcm9qZWN0IEJ1Z3ppbGxhPC90aXRsZT4KIAogICAgIDxwYXJhPgotICAgICAgICBJZiB5b3UgZmluZCBwcm9ibGVtcyB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LCB5b3Ugc2hvdWxkIHJlcG9ydCB0aGVtIHVzaW5nIHRoZQotICAgICAgICBCdWd6aWxsYSBhcHBsaWNhdGlvbiBhdCA8dWxpbmsgdXJsPScmWU9DVE9fQlVHWklMTEFfVVJMOyc+PC91bGluaz4uCisgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHVzZXMgaXRzIG93biBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LmJ1Z3ppbGxhLm9yZy9hYm91dC8nPkJ1Z3ppbGxhPC91bGluaz4gdG8gdHJhY2sKKyAgICAgICAgZGVmZWN0cyAoYnVncykuCisgICAgICAgIEltcGxlbWVudGF0aW9ucyBvZiBCdWd6aWxsYSB3b3JrIHdlbGwgZm9yIGdyb3VwIGRldmVsb3BtZW50IGJlY2F1c2UKKyAgICAgICAgdGhleSB0cmFjayBidWdzIGFuZCBjb2RlIGNoYW5nZXMsIGNhbiBiZSB1c2VkIHRvIGNvbW11bmljYXRlIGNoYW5nZXMKKyAgICAgICAgYW5kIHByb2JsZW1zIHdpdGggZGV2ZWxvcGVycywgY2FuIGJlIHVzZWQgdG8gc3VibWl0IGFuZCByZXZpZXcgcGF0Y2hlcywKKyAgICAgICAgYW5kIGNhbiBiZSB1c2VkIHRvIG1hbmFnZSBxdWFsaXR5IGFzc3VyYW5jZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgU29tZXRpbWVzIGl0IGlzIGhlbHBmdWwgdG8gc3VibWl0LCBpbnZlc3RpZ2F0ZSwgb3IgdHJhY2sgYSBidWcgYWdhaW5zdAorICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCBpdHNlbGYgKGUuZy4gd2hlbiBkaXNjb3ZlcmluZyBhbiBpc3N1ZSB3aXRoIHNvbWUKKyAgICAgICAgY29tcG9uZW50IG9mIHRoZSBidWlsZCBzeXN0ZW0gdGhhdCBhY3RzIGNvbnRyYXJ5IHRvIHRoZSBkb2N1bWVudGF0aW9uCisgICAgICAgIG9yIHlvdXIgZXhwZWN0YXRpb25zKS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQSBnZW5lcmFsIHByb2NlZHVyZSBhbmQgZ3VpZGVsaW5lcyBleGlzdCBmb3Igd2hlbiB5b3UgdXNlIEJ1Z3ppbGxhIHRvCisgICAgICAgIHN1Ym1pdCBhIGJ1Zy4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgQnVnemlsbGEgdG8gc3VibWl0IGEgYnVnIGFnYWluc3QgdGhlCisgICAgICAgIFlvY3RvIFByb2plY3QsIHNlZSB0aGUgZm9sbG93aW5nOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzdWJtaXR0aW5nLWEtZGVmZWN0LWFnYWluc3QtdGhlLXlvY3RvLXByb2plY3QnPlN1Ym1pdHRpbmcgYSBEZWZlY3QgQWdhaW5zdCB0aGUgWW9jdG8gUHJvamVjdDwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1dJS0lfVVJMOy93aWtpL0J1Z3ppbGxhX0NvbmZpZ3VyYXRpb25fYW5kX0J1Z19UcmFja2luZyc+QnVnemlsbGEgd2lraSBwYWdlPC91bGluaz4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgPC9wYXJhPgogPC9zZWN0aW9uPgogCkBAIC00MywxOSArODksMTkgQEAKICAgICAgICAgICAgICAgICBEaXNjdXNzaW9uIG1haWxpbmcgbGlzdCBhYm91dCBPcGVuRW1iZWRkZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJk9FX0xJU1RTX1VSTDsvbGlzdGluZm8vYml0YmFrZS1kZXZlbCc+PC91bGluaz4gLQogICAgICAgICAgICAgICAgIERpc2N1c3Npb24gbWFpbGluZyBsaXN0IGFib3V0IHRoZQotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYml0YmFrZS10ZXJtJz5CaXRCYWtlPC9saW5rPgogICAgICAgICAgICAgICAgIGJ1aWxkIHRvb2wuPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0xJU1RTX1VSTDsvbGlzdGluZm8vcG9reSc+PC91bGluaz4gLQogICAgICAgICAgICAgICAgIERpc2N1c3Npb24gbWFpbGluZyBsaXN0IGFib3V0Ci0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcG9reSc+UG9reTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Bva3knPlBva3k8L2xpbms+LgogICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19MSVNUU19VUkw7L2xpc3RpbmZvL3lvY3RvLWFubm91bmNlJz48L3VsaW5rPiAtCiAgICAgICAgICAgICAgICAgTWFpbGluZyBsaXN0IHRvIHJlY2VpdmUgb2ZmaWNpYWwgWW9jdG8gUHJvamVjdCByZWxlYXNlIGFuZCBtaWxlc3RvbmUKICAgICAgICAgICAgICAgICBhbm5vdW5jZW1lbnRzLjwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICA8L2l0ZW1pemVkbGlzdD4KICAgICA8L3BhcmE+Ci0gICAgRm9yIG1vcmUgWW9jdG8gUHJvamVjdC1yZWxhdGVkIG1haWxpbmcgbGlzdHMsIHNlZSB0aGUgWW9jdG8gUHJvamVjdCBjb21tdW5pdHkgbWFpbGluZyBsaXN0cyBwYWdlCi0gICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy90b29scy1yZXNvdXJjZXMvY29tbXVuaXR5L21haWxpbmctbGlzdHMnPmhlcmU8L3VsaW5rPi4KKyAgICBGb3IgbW9yZSBZb2N0byBQcm9qZWN0LXJlbGF0ZWQgbWFpbGluZyBsaXN0cywgc2VlIHRoZQorICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsnPllvY3RvIFByb2plY3QgV2Vic2l0ZTwvdWxpbms+LgogPC9zZWN0aW9uPgogCiA8c2VjdGlvbiBpZD0ncmVzb3VyY2VzLWlyYyc+CkBAIC03MCw1MyArMTE2LDE2MCBAQAogICAgIDwvcGFyYT4KIDwvc2VjdGlvbj4KIAotPHNlY3Rpb24gaWQ9J3Jlc291cmNlcy1saW5rcyc+Ci0gICAgPHRpdGxlPkxpbmtzPC90aXRsZT4KKzxzZWN0aW9uIGlkPSdyZXNvdXJjZXMtbGlua3MtYW5kLXJlbGF0ZWQtZG9jdW1lbnRhdGlvbic+CisgICAgPHRpdGxlPkxpbmtzIGFuZCBSZWxhdGVkIERvY3VtZW50YXRpb248L3RpdGxlPgogCiAgICAgPHBhcmE+Ci0gICAgICAgIEhlcmUgaXMgYSBsaXN0IG9mIHJlc291cmNlcyB5b3Ugd2lsbCBmaW5kIGhlbHBmdWw6CisgICAgICAgIEhlcmUgaXMgYSBsaXN0IG9mIHJlc291cmNlcyB5b3UgbWlnaHQgZmluZCBoZWxwZnVsOgogICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+CiAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOyc+VGhlIFlvY3RvIFByb2plY3Qgd2Vic2l0ZTwvdWxpbms+OgotICAgICAgICAgICAgICAgIDwvZW1waGFzaXM+IFRoZSBob21lIHNpdGUgZm9yIHRoZSBZb2N0bwotICAgICAgICAgICAgICAgIFByb2plY3QuPC9wYXJhPjwvbGlzdGl0ZW0+Ci08IS0tCi0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cuaW50ZWwuY29tLyc+SW50ZWwgQ29ycG9yYXRpb248L3VsaW5rPjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIFRoZSBjb21wYW55IHRoYXQgYWNxdWlyZWQgT3BlbmVkSGFuZCBpbiAyMDA4IGFuZCBiZWdhbgotICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IG9uIHRoZSBZb2N0byBQcm9qZWN0LjwvcGFyYT48L2xpc3RpdGVtPgotLS0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZPRV9IT01FX1VSTDsnPk9wZW5FbWJlZGRlZDwvdWxpbms+OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgVGhlIHVwc3RyZWFtLCBnZW5lcmljLCBlbWJlZGRlZCBkaXN0cmlidXRpb24gdXNlZCBhcyB0aGUgYmFzaXMKLSAgICAgICAgICAgICAgICBmb3IgdGhlIGJ1aWxkIHN5c3RlbSBpbiB0aGUgWW9jdG8gUHJvamVjdC4KLSAgICAgICAgICAgICAgICBQb2t5IGRlcml2ZXMgZnJvbSBhbmQgY29udHJpYnV0ZXMgYmFjayB0byB0aGUgT3BlbkVtYmVkZGVkCi0gICAgICAgICAgICAgICAgcHJvamVjdC48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPC9lbXBoYXNpcz4gVGhlIGhvbWUgc2l0ZSBmb3IgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9NYWluX1BhZ2UnPlRoZSBZb2N0byBQcm9qZWN0IE1haW4gV2lraSBQYWdlPC91bGluaz46CisgICAgICAgICAgICAgICAgPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGUgbWFpbiB3aWtpIHBhZ2UgZm9yIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIFRoaXMgcGFnZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBwcm9qZWN0IHBsYW5uaW5nLAorICAgICAgICAgICAgICAgIHJlbGVhc2UgZW5naW5lZXJpbmcsIFFBICZhbXA7IGF1dG9tYXRpb24sIGEgcmVmZXJlbmNlCisgICAgICAgICAgICAgICAgc2l0ZSBtYXAsIGFuZCBvdGhlciByZXNvdXJjZXMgcmVsYXRlZCB0byB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJk9FX0hPTUVfVVJMOyc+T3BlbkVtYmVkZGVkPC91bGluaz46CisgICAgICAgICAgICAgICAgPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIHVzZWQgYnkgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgVGhpcyBwcm9qZWN0IGlzIHRoZSB1cHN0cmVhbSwgZ2VuZXJpYywgZW1iZWRkZWQgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgZnJvbSB3aGljaCB0aGUgWW9jdG8gUHJvamVjdCBkZXJpdmVzIGl0cyBidWlsZCBzeXN0ZW0gKFBva3kpCisgICAgICAgICAgICAgICAgYW5kIHRvIHdoaWNoIGl0IGNvbnRyaWJ1dGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz4KICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3Lm9wZW5lbWJlZGRlZC5vcmcvd2lraS9CaXRCYWtlJz4KLSAgICAgICAgICAgICAgICBCaXRCYWtlPC91bGluaz46PC9lbXBoYXNpcz4gVGhlIHRvb2wgdXNlZCB0byBwcm9jZXNzIG1ldGFkYXRhLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIEJpdEJha2U8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICA8L2VtcGhhc2lzPiBUaGUgdG9vbCB1c2VkIHRvIHByb2Nlc3MgbWV0YWRhdGEuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsnPkJpdEJha2UgVXNlciBNYW51YWw6PC91bGluaz4KKyAgICAgICAgICAgICAgICA8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEEgY29tcHJlaGVuc2l2ZSBndWlkZSB0byB0aGUgQml0QmFrZSB0b29sLgorICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IGluZm9ybWF0aW9uIG9uIEJpdEJha2UsIHNlZSB0aGlzIG1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyc+WW9jdG8gUHJvamVjdCBRdWljayBTdGFydDwvdWxpbms+OgorICAgICAgICAgICAgICAgIDwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhpcyBzaG9ydCBkb2N1bWVudCBsZXRzIHlvdSBnZXQgc3RhcnRlZAorICAgICAgICAgICAgICAgIHdpdGggdGhlIFlvY3RvIFByb2plY3QgYW5kIHF1aWNrbHkgYmVnaW4gYnVpbGRpbmcgYW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7Jz5Zb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbDwvdWxpbms+OgorICAgICAgICAgICAgICAgIDwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhpcyBtYW51YWwgaXMgYSAiaG93LXRvIiBndWlkZSB0aGF0IHByZXNlbnRzIHByb2NlZHVyZXMKKyAgICAgICAgICAgICAgICB1c2VmdWwgdG8gYm90aCBhcHBsaWNhdGlvbiBhbmQgc3lzdGVtIGRldmVsb3BlcnMgd2hvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyc+WW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBhbmQgdGhlIEV4dGVuc2libGUgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChlU0RLKTwvdWxpbms+CisgICAgICAgICAgICAgICAgbWFudWFsOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhpcyBndWlkZSBwcm92aWRlcyBpbmZvcm1hdGlvbiB0aGF0IGxldHMgeW91IGdldCBnb2luZworICAgICAgICAgICAgICAgIHdpdGggdGhlIHN0YW5kYXJkIG9yIGV4dGVuc2libGUgU0RLLgorICAgICAgICAgICAgICAgIEFuIFNESywgd2l0aCBpdHMgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWlucywgYWxsb3dzIHlvdQorICAgICAgICAgICAgICAgIHRvIGRldmVsb3AgcHJvamVjdHMgaW5zaWRlIG9yIG91dHNpZGUgb2YgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsnPllvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIERldmVsb3BlcidzIEd1aWRlPC91bGluaz46CisgICAgICAgICAgICAgICAgPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGlzIGd1aWRlIGRlZmluZXMgdGhlIHN0cnVjdHVyZSBmb3IgQlNQIGNvbXBvbmVudHMuCisgICAgICAgICAgICAgICAgSGF2aW5nIGEgY29tbW9ubHkgdW5kZXJzdG9vZCBzdHJ1Y3R1cmUgZW5jb3VyYWdlcworICAgICAgICAgICAgICAgIHN0YW5kYXJkaXphdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7Jz5Zb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWw8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICA8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoaXMgbWFudWFsIGRlc2NyaWJlcyBob3cgdG8gd29yayB3aXRoIExpbnV4IFlvY3RvIGtlcm5lbHMgYXMKKyAgICAgICAgICAgICAgICB3ZWxsIGFzIHByb3ZpZGVzIGEgYml0IG9mIGNvbmNlcHR1YWwgaW5mb3JtYXRpb24gb24gdGhlCisgICAgICAgICAgICAgICAgY29uc3RydWN0aW9uIG9mIHRoZSBZb2N0byBMaW51eCBrZXJuZWwgdHJlZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUFJPRl9VUkw7Jz5Zb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZyBNYW51YWw8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICA8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoaXMgbWFudWFsIHByZXNlbnRzIGEgc2V0IG9mIGNvbW1vbiBhbmQgZ2VuZXJhbGx5IHVzZWZ1bAorICAgICAgICAgICAgICAgIHRyYWNpbmcgYW5kIHByb2ZpbGluZyBzY2hlbWVzIGFsb25nIHdpdGggdGhlaXIgYXBwbGljYXRpb25zCisgICAgICAgICAgICAgICAgKGFzIGFwcHJvcHJpYXRlKSB0byBlYWNoIHRvb2wuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1NES19VUkw7I3Nkay1hcHBlbmRpeC1sYXRlc3QteXAtZWNsaXBzZS1wbHVnLWluJz5FY2xpcHNlIElERSBZb2N0byBQbHVnLWluPC91bGluaz46CisgICAgICAgICAgICAgICAgPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbnMgdGhhdCBkZW1vbnN0cmF0ZSBob3cgYW4gYXBwbGljYXRpb24gZGV2ZWxvcGVyCisgICAgICAgICAgICAgICAgdXNlcyB0aGUgRWNsaXBzZSBZb2N0byBQcm9qZWN0IFBsdWctaW4gZmVhdHVyZSB3aXRoaW4KKyAgICAgICAgICAgICAgICB0aGUgRWNsaXBzZSBJREUuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9GQVEnPkZBUTwvdWxpbms+OgorICAgICAgICAgICAgICAgIDwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQSBsaXN0IG9mIGNvbW1vbmx5IGFza2VkIHF1ZXN0aW9ucyBhbmQgdGhlaXIgYW5zd2Vycy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1JFTEVBU0VfTk9URVM7Jz5SZWxlYXNlIE5vdGVzPC91bGluaz46CisgICAgICAgICAgICAgICAgPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBGZWF0dXJlcywgdXBkYXRlcyBhbmQga25vd24gaXNzdWVzIGZvciB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgIHJlbGVhc2Ugb2YgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1RPQVNUX1VSTDsnPlRvYXN0ZXIgVXNlciBNYW51YWw8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICA8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoaXMgbWFudWFsIGludHJvZHVjZXMgYW5kIGRlc2NyaWJlcyBob3cgdG8gc2V0IHVwIGFuZCB1c2UKKyAgICAgICAgICAgICAgICBUb2FzdGVyLgorICAgICAgICAgICAgICAgIFRvYXN0ZXIgaXMgYW4gQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlIChBUEkpIGFuZAorICAgICAgICAgICAgICAgIHdlYi1iYXNlZCBpbnRlcmZhY2UgdG8gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtc3lzdGVtLXRlcm0nPk9wZW5FbWJlZGRlZCBCdWlsZCBTeXN0ZW08L2xpbms+LAorICAgICAgICAgICAgICAgIHdoaWNoIHVzZXMgQml0QmFrZSwgdGhhdCByZXBvcnRzIGJ1aWxkIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fQlVHWklMTEFfVVJMOyc+QnVnemlsbGE8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICA8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoZSBidWcgdHJhY2tpbmcgYXBwbGljYXRpb24gdGhlIFlvY3RvIFByb2plY3QgdXNlcy4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZmluZCBwcm9ibGVtcyB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LCB5b3Ugc2hvdWxkIHJlcG9ydAorICAgICAgICAgICAgICAgIHRoZW0gdXNpbmcgdGhpcyBhcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1dJS0lfVVJMOy93aWtpL0J1Z3ppbGxhX0NvbmZpZ3VyYXRpb25fYW5kX0J1Z19UcmFja2luZyc+QnVnemlsbGEgQ29uZmlndXJhdGlvbiBhbmQgQnVnIFRyYWNraW5nIFdpa2kgUGFnZTwvdWxpbms+OgorICAgICAgICAgICAgICAgIDwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgSW5mb3JtYXRpb24gb24gaG93IHRvIGdldCBzZXQgdXAgYW5kIHVzZSB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIG9mIEJ1Z3ppbGxhIGZvciBsb2dnaW5nIGFuZCB0cmFja2luZyBZb2N0bworICAgICAgICAgICAgICAgIFByb2plY3QgZGVmZWN0cy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+SW50ZXJuZXQgUmVsYXkgQ2hhdCAoSVJDKTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFR3byBJUkMgY2hhbm5lbHMgb24gZnJlZW5vZGUgYXJlIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgIGZvciBZb2N0byBQcm9qZWN0IGFuZCBQb2t5IGRpc2N1c3Npb25zOiA8ZmlsZW5hbWU+I3lvY3RvPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiNwb2t5PC9maWxlbmFtZT4sIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3dpa2kucWVtdS5vcmcvSW5kZXguaHRtbCc+UXVpY2sgRU1VbGF0b3IgKFFFTVUpPC91bGluaz46CisgICAgICAgICAgICAgICAgPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBBbiBvcGVuLXNvdXJjZSBtYWNoaW5lIGVtdWxhdG9yIGFuZCB2aXJ0dWFsaXplci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgIEZvciBtb3JlIGxpbmtzLCBzZWUgdGhlCi0gICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNvdGhlci1pbmZvcm1hdGlvbic+T3RoZXIgSW5mb3JtYXRpb248L3VsaW5rPiIKLSAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCiAgICAgPC9wYXJhPgogPC9zZWN0aW9uPgotCi08c2VjdGlvbiBpZD0ncmVzb3VyY2VzLWNvbnRyaWJ1dGlvbnMnPgotICAgIDx0aXRsZT5Db250cmlidXRpb25zPC90aXRsZT4KLQotICAgIDxwYXJhPgotICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBnbGFkbHkgYWNjZXB0cyBjb250cmlidXRpb25zLgotICAgICAgICBZb3UgY2FuIHN1Ym1pdCBjaGFuZ2VzIHRvIHRoZSBwcm9qZWN0IGVpdGhlciBieSBjcmVhdGluZyBhbmQgc2VuZGluZwotICAgICAgICBwdWxsIHJlcXVlc3RzLAotICAgICAgICBvciBieSBzdWJtaXR0aW5nIHBhdGNoZXMgdGhyb3VnaCBlbWFpbC4KLSAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBkbyBib3RoIGFzIHdlbGwgYXMgaW5mb3JtYXRpb24gb24gaG93Ci0gICAgICAgIHRvIGlkZW50aWZ5IHRoZSBtYWludGFpbmVyIGZvciBlYWNoIGFyZWEgb2YgY29kZSwgc2VlIHRoZQotICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjaG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhIENoYW5nZTwvdWxpbms+IgotICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KLSAgICA8L3BhcmE+Ci08L3NlY3Rpb24+Ci0KIDwvY2hhcHRlcj4KIDwhLS0KIHZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvdGVjaG5pY2FsLWRldGFpbHMueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC90ZWNobmljYWwtZGV0YWlscy54bWwKaW5kZXggMTk2NGE5YS4uZTllNzZlNCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC90ZWNobmljYWwtZGV0YWlscy54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC90ZWNobmljYWwtZGV0YWlscy54bWwKQEAgLTE4LDcgKzE4LDcgQEAKIAogICAgIDxwYXJhPgogICAgICAgICBUaGUKLSAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYml0YmFrZS10ZXJtJz5CaXRCYWtlPC91bGluaz4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0nYml0YmFrZS10ZXJtJz5CaXRCYWtlPC9saW5rPgogICAgICAgICB0YXNrIGV4ZWN1dG9yIHRvZ2V0aGVyIHdpdGggdmFyaW91cyB0eXBlcyBvZiBjb25maWd1cmF0aW9uIGZpbGVzIGZvcm0KICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBDb3JlLgogICAgICAgICBUaGlzIHNlY3Rpb24gb3ZlcnZpZXdzIHRoZXNlIGNvbXBvbmVudHMgYnkgZGVzY3JpYmluZyB0aGVpciB1c2UgYW5kCkBAIC00OCwxNSArNDgsMTYgQEAKICAgICAgICAgdG8gZWFjaCBkYXRhIHNvdXJjZSBhcyBhIGxheWVyLgogICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gbGF5ZXJzLCBzZWUgdGhlCiAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcgYW5kCi0gICAgICAgIENyZWF0aW5nIExheWVyczwvdWxpbms+IiBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgQ3JlYXRpbmcgTGF5ZXJzPC91bGluaz4iIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQKKyAgICAgICAgVGFza3MgTWFudWFsLgogICAgIDwvcGFyYT4KIAogICAgIDxwYXJhPgogICAgICAgICBGb2xsb3dpbmcgYXJlIHNvbWUgYnJpZWYgZGV0YWlscyBvbiB0aGVzZSBjb3JlIGNvbXBvbmVudHMuCiAgICAgICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGhvdyB0aGVzZSBjb21wb25lbnRzIGludGVyYWN0IGR1cmluZwogICAgICAgICBhIGJ1aWxkLCBzZWUgdGhlCi0gICAgICAgICI8bGluayBsaW5rZW5kPSdjbG9zZXItbG9vayc+QSBDbG9zZXIgTG9vayBhdCB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudDwvbGluaz4iCi0gICAgICAgIENoYXB0ZXIuCisgICAgICAgICI8bGluayBsaW5rZW5kPSdkZXZlbG9wbWVudC1jb25jZXB0cyc+RGV2ZWxvcG1lbnQgQ29uY2VwdHM8L2xpbms+IgorICAgICAgICBzZWN0aW9uLgogICAgIDwvcGFyYT4KIAogICAgIDxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktY29tcG9uZW50cy1iaXRiYWtlJz4KQEAgLTY1LDcgKzY2LDcgQEAKICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICBCaXRCYWtlIGlzIHRoZSB0b29sIGF0IHRoZSBoZWFydCBvZiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQogICAgICAgICAgICAgYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBwYXJzaW5nIHRoZQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4sCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdtZXRhZGF0YSc+TWV0YWRhdGE8L2xpbms+LAogICAgICAgICAgICAgZ2VuZXJhdGluZyBhIGxpc3Qgb2YgdGFza3MgZnJvbSBpdCwgYW5kIHRoZW4gZXhlY3V0aW5nIHRob3NlIHRhc2tzLgogICAgICAgICA8L3BhcmE+CiAKQEAgLTE0NiwxMyArMTQ3LDcwIEBACiAgICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3Rpb24+CiAKKyAgICA8c2VjdGlvbiBpZD0nbWV0YWRhdGEtdmlydHVhbC1wcm92aWRlcnMnPgorICAgICAgICA8dGl0bGU+TWV0YWRhdGEgKFZpcnR1YWwgUHJvdmlkZXJzKTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBQcmlvciB0byB0aGUgYnVpbGQsIGlmIHlvdSBrbm93IHRoYXQgc2V2ZXJhbCBkaWZmZXJlbnQgcmVjaXBlcworICAgICAgICAgICAgcHJvdmlkZSB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5LCB5b3UgY2FuIHVzZSBhIHZpcnR1YWwgcHJvdmlkZXIKKyAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT52aXJ0dWFsLyo8L2ZpbGVuYW1lPikgYXMgYSBwbGFjZWhvbGRlciBmb3IgdGhlCisgICAgICAgICAgICBhY3R1YWwgcHJvdmlkZXIuCisgICAgICAgICAgICBUaGUgYWN0dWFsIHByb3ZpZGVyIHdvdWxkIGJlIGRldGVybWluZWQgYXQgYnVpbGQKKyAgICAgICAgICAgIHRpbWUuCisgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHlvdSBzaG91bGQgYWRkIDxmaWxlbmFtZT52aXJ0dWFsLyo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgdG8gPGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgcmF0aGVyIHRoYW4gbGlzdGluZyB0aGUgc3BlY2lmaWVkIHByb3ZpZGVyLgorICAgICAgICAgICAgWW91IHdvdWxkIHNlbGVjdCB0aGUgYWN0dWFsIHByb3ZpZGVyIGJ5IHNldHRpbmcgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFJFRkVSUkVEX1BST1ZJREVSJz48ZmlsZW5hbWU+UFJFRkVSUkVEX1BST1ZJREVSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSAoaS5lLiA8ZmlsZW5hbWU+UFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvKjwvZmlsZW5hbWU+KQorICAgICAgICAgICAgaW4gdGhlIGJ1aWxkJ3MgY29uZmlndXJhdGlvbiBmaWxlIChlLmcuCisgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS9idWlsZC9jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBBbnkgcmVjaXBlIHRoYXQgUFJPVklERVMgYSA8ZmlsZW5hbWU+dmlydHVhbC8qPC9maWxlbmFtZT4gaXRlbQorICAgICAgICAgICAgICAgIHRoYXQgaXMgdWx0aW1hdGVseSBub3Qgc2VsZWN0ZWQgdGhyb3VnaAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUkVGRVJSRURfUFJPVklERVI8L2ZpbGVuYW1lPiBkb2VzIG5vdCBnZXQgYnVpbHQuCisgICAgICAgICAgICAgICAgUHJldmVudGluZyB0aGVzZSByZWNpcGVzIGZyb20gYnVpbGRpbmcgaXMgdXN1YWxseSB0aGUgZGVzaXJlZAorICAgICAgICAgICAgICAgIGJlaGF2aW9yIHNpbmNlIHRoaXMgbWVjaGFuaXNtJ3MgcHVycG9zZSBpcyB0byBzZWxlY3QgYmV0d2VlbgorICAgICAgICAgICAgICAgIG11dHVhbGx5IGV4Y2x1c2l2ZSBhbHRlcm5hdGl2ZSBwcm92aWRlcnMuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdHMgc3BlY2lmaWMgZXhhbXBsZXMgb2YgdmlydHVhbCBwcm92aWRlcnM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnZpcnR1YWwvbWVzYTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBQcm92aWRlcyA8ZmlsZW5hbWU+Z2JtLnBjPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnZpcnR1YWwvZWdsPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVzIDxmaWxlbmFtZT5lZ2wucGM8L2ZpbGVuYW1lPiBhbmQgcG9zc2libHkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndheWxhbmQtZWdsLnBjPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnZpcnR1YWwvbGliZ2w8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXMgPGZpbGVuYW1lPmdsLnBjPC9maWxlbmFtZT4gKGkuZS4gbGliR0wpLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT52aXJ0dWFsL2xpYmdsZXMxPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVzIDxmaWxlbmFtZT5nbGVzdjFfY20ucGM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAoaS5lLiBsaWJHTEVTdjFfQ00pLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT52aXJ0dWFsL2xpYmdsZXMyPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVzIDxmaWxlbmFtZT5nbGVzdjIucGM8L2ZpbGVuYW1lPiAoaS5lLiBsaWJHTEVTdjIpLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCiAgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1jb21wb25lbnRzLWNsYXNzZXMnPgogICAgICAgICA8dGl0bGU+Q2xhc3NlczwvdGl0bGU+CiAKICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICBDbGFzcyBmaWxlcyAoPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4pIGNvbnRhaW4gaW5mb3JtYXRpb24gdGhhdAogICAgICAgICAgICAgaXMgdXNlZnVsIHRvIHNoYXJlIGJldHdlZW4KLSAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+IGZpbGVzLgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nbWV0YWRhdGEnPk1ldGFkYXRhPC9saW5rPiBmaWxlcy4KICAgICAgICAgICAgIEFuIGV4YW1wbGUgaXMgdGhlCiAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMnPjxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPjwvbGluaz4KICAgICAgICAgICAgIGNsYXNzLCB3aGljaCBjb250YWlucyBjb21tb24gc2V0dGluZ3MgZm9yIGFueSBhcHBsaWNhdGlvbiB0aGF0CkBAIC0xNzIsNyArMjMwLDcgQEAKICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGNvbXBpbGVyIHR1bmluZyBvcHRpb25zLCBnZW5lcmFsIGNvbW1vbiBjb25maWd1cmF0aW9uCiAgICAgICAgICAgICBvcHRpb25zLCBhbmQgdXNlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgZm91bmQKICAgICAgICAgICAgIGluIHRoZQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KICAgICAgICAgPC9wYXJhPgogICAgIDwvc2VjdGlvbj4KIDwvc2VjdGlvbj4KQEAgLTE4MywxMSArMjQxLDEyIEBACiAgICAgPHBhcmE+CiAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGRvZXMgbW9zdCBvZiB0aGUgd29yayBmb3IgeW91IHdoZW4gaXQgY29tZXMgdG8KICAgICAgICAgY3JlYXRpbmcKLSAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluJz5jcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW5zPC91bGluaz4uCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbic+Y3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluczwvbGluaz4uCiAgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBzb21lIHRlY2huaWNhbCBiYWNrZ3JvdW5kIG9uIGhvdwogICAgICAgICBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW5zIGFyZSBjcmVhdGVkIGFuZCB1c2VkLgogICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0b29sY2hhaW5zLCB5b3UgY2FuIGFsc28gc2VlIHRoZQotICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyc+WW9jdG8gUHJvamVjdCBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKFNESykgRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPi4KKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfU0RLX1VSTDsnPllvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgYW5kIHRoZSBFeHRlbnNpYmxlIFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoZVNESyk8L3VsaW5rPgorICAgICAgICBtYW51YWwuCiAgICAgPC9wYXJhPgogCiAgICAgPHBhcmE+CkBAIC0zNzIsOCArNDMxLDggQEAKICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGFkdmFudGFnZXMgZ2FpbmVkIHdoZW4gYnVpbGRpbmcgYQogICAgICAgICBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4gaW5zdGFsbGVyLCBzZWUgdGhlCiAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyNzZGstYnVpbGRpbmctYW4tc2RrLWluc3RhbGxlcic+QnVpbGRpbmcgYW4gU0RLIEluc3RhbGxlcjwvdWxpbms+IgotICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoU0RLKSBEZXZlbG9wZXIncwotICAgICAgICBHdWlkZS4KKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBhbmQgdGhlCisgICAgICAgIEV4dGVuc2libGUgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChlU0RLKSBtYW51YWwuCiAgICAgPC9ub3RlPgogPC9zZWN0aW9uPgogCkBAIC00MzMsNyArNDkyLDcgQEAKICAgICAgICAgd29ya3Mgd2l0aCBwYWNrYWdlcyBhbmQgY2FuCiAgICAgICAgIHRyYWNrIGluY3JlbWVudGluZyA8ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPiBpbmZvcm1hdGlvbiwgc2VlIHRoZQogICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYXV0b21hdGljYWxseS1pbmNyZW1lbnRpbmctYS1iaW5hcnktcGFja2FnZS1yZXZpc2lvbi1udW1iZXInPkF1dG9tYXRpY2FsbHkgSW5jcmVtZW50aW5nIGEgQmluYXJ5IFBhY2thZ2UgUmV2aXNpb24gTnVtYmVyPC91bGluaz4iCi0gICAgICAgIHNlY3Rpb24uCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgIDwvbm90ZT4KIAogICAgIDxwYXJhPgpAQCAtNTYyLDcgKzYyMSw3IEBACiAgICAgICAgICAgICBjb2RlLgogICAgICAgICAgICAgSG93ZXZlciwgdGhlcmUgaXMgc3RpbGwgdGhlIHF1ZXN0aW9uIG9mIGEgdGFzaydzIGluZGlyZWN0IGlucHV0cyAtIHRoZQogICAgICAgICAgICAgdGhpbmdzIHRoYXQgd2VyZSBhbHJlYWR5IGJ1aWx0IGFuZCBwcmVzZW50IGluIHRoZQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KICAgICAgICAgICAgIFRoZSBjaGVja3N1bSAob3Igc2lnbmF0dXJlKSBmb3IgYSBwYXJ0aWN1bGFyIHRhc2sgbmVlZHMgdG8gYWRkIHRoZSBoYXNoZXMKICAgICAgICAgICAgIG9mIGFsbCB0aGUgdGFza3Mgb24gd2hpY2ggdGhlIHBhcnRpY3VsYXIgdGFzayBkZXBlbmRzLgogICAgICAgICAgICAgQ2hvb3Npbmcgd2hpY2ggZGVwZW5kZW5jaWVzIHRvIGFkZCBpcyBhIHBvbGljeSBkZWNpc2lvbi4KQEAgLTU5OCwxMSArNjU3LDEyIEBACiAgICAgICAgICAgICBUaGUgY29kZSBpbiA8ZmlsZW5hbWU+bWV0YS9saWIvb2Uvc3N0YXRlc2lnLnB5PC9maWxlbmFtZT4gc2hvd3MgdHdvIGV4YW1wbGVzCiAgICAgICAgICAgICBvZiB0aGlzIGFuZCBhbHNvIGlsbHVzdHJhdGVzIGhvdyB5b3UgY2FuIGluc2VydCB5b3VyIG93biBwb2xpY3kgaW50byB0aGUgc3lzdGVtCiAgICAgICAgICAgICBpZiBzbyBkZXNpcmVkLgotICAgICAgICAgICAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHR3byBiYXNpYyBzaWduYXR1cmUgZ2VuZXJhdG9ycyA8ZmlsZW5hbWU+T0UtQ29yZTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICB1c2VzOiAgIk9FQmFzaWMiIGFuZCAiT0VCYXNpY0hhc2giLgorICAgICAgICAgICAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHR3byBiYXNpYyBzaWduYXR1cmUgZ2VuZXJhdG9ycworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nb2UtY29yZSc+T0UtQ29yZTwvbGluaz4gdXNlczogICJPRUJhc2ljIiBhbmQKKyAgICAgICAgICAgICJPRUJhc2ljSGFzaCIuCiAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGVyZSBpcyBhIGR1bW15ICJub29wIiBzaWduYXR1cmUgaGFuZGxlciBlbmFibGVkIGluIEJpdEJha2UuCiAgICAgICAgICAgICBUaGlzIG1lYW5zIHRoYXQgYmVoYXZpb3IgaXMgdW5jaGFuZ2VkIGZyb20gcHJldmlvdXMgdmVyc2lvbnMuCi0gICAgICAgICAgICA8ZmlsZW5hbWU+T0UtQ29yZTwvZmlsZW5hbWU+IHVzZXMgdGhlICJPRUJhc2ljSGFzaCIgc2lnbmF0dXJlIGhhbmRsZXIgYnkgZGVmYXVsdAorICAgICAgICAgICAgT0UtQ29yZSB1c2VzIHRoZSAiT0VCYXNpY0hhc2giIHNpZ25hdHVyZSBoYW5kbGVyIGJ5IGRlZmF1bHQKICAgICAgICAgICAgIHRocm91Z2ggdGhpcyBzZXR0aW5nIGluIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZToKICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgQkJfU0lHTkFUVVJFX0hBTkRMRVIgPz0gIk9FQmFzaWNIYXNoIgpAQCAtNjEwLDcgKzY3MCw3IEBACiAgICAgICAgICAgICBUaGUgIk9FQmFzaWNIYXNoIiA8ZmlsZW5hbWU+QkJfU0lHTkFUVVJFX0hBTkRMRVI8L2ZpbGVuYW1lPiBpcyB0aGUgc2FtZSBhcyB0aGUKICAgICAgICAgICAgICJPRUJhc2ljIiB2ZXJzaW9uIGJ1dCBhZGRzIHRoZSB0YXNrIGhhc2ggdG8gdGhlIHN0YW1wIGZpbGVzLgogICAgICAgICAgICAgVGhpcyByZXN1bHRzIGluIGFueQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J21ldGFkYXRhJz5NZXRhZGF0YTwvbGluaz4KICAgICAgICAgICAgIGNoYW5nZSB0aGF0IGNoYW5nZXMgdGhlIHRhc2sgaGFzaCwgYXV0b21hdGljYWxseQogICAgICAgICAgICAgY2F1c2luZyB0aGUgdGFzayB0byBiZSBydW4gYWdhaW4uCiAgICAgICAgICAgICBUaGlzIHJlbW92ZXMgdGhlIG5lZWQgdG8gYnVtcCA8bGluayBsaW5rZW5kPSd2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC9saW5rPgpAQCAtMTE5NSw2ICsxMjU1LDIxMyBAQAogICAgIDwvcGFyYT4KIDwvc2VjdGlvbj4KIAorPHNlY3Rpb24gaWQ9J3dpYy1wbHVnLWlucy1pbnRlcmZhY2UnPgorICAgIDx0aXRsZT5XaWMgUGx1Zy1JbnMgSW50ZXJmYWNlPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBZb3UgY2FuIGV4dGVuZCBhbmQgc3BlY2lhbGl6ZSBXaWMgZnVuY3Rpb25hbGl0eSBieSB1c2luZworICAgICAgICBXaWMgcGx1Zy1pbnMuCisgICAgICAgIFRoaXMgc2VjdGlvbiBleHBsYWlucyB0aGUgV2ljIHBsdWctaW4gaW50ZXJmYWNlLgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdXNpbmcgV2ljIGluIGdlbmVyYWwsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NyZWF0aW5nLXBhcnRpdGlvbmVkLWltYWdlcy11c2luZy13aWMnPkNyZWF0aW5nIFBhcnRpdGlvbmVkIEltYWdlcyBVc2luZyBXaWM8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwuCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgV2ljIHBsdWctaW5zIGNvbnNpc3Qgb2YgInNvdXJjZSIgYW5kICJpbWFnZXIiIHBsdWctaW5zLgorICAgICAgICAgICAgSW1hZ2VyIHBsdWctaW5zIGFyZSBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMgc2VjdGlvbi4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBTb3VyY2UgcGx1Zy1pbnMgcHJvdmlkZSBhIG1lY2hhbmlzbSB0byBjdXN0b21pemUgcGFydGl0aW9uCisgICAgICAgIGNvbnRlbnQgZHVyaW5nIHRoZSBXaWMgaW1hZ2UgZ2VuZXJhdGlvbiBwcm9jZXNzLgorICAgICAgICBZb3UgY2FuIHVzZSBzb3VyY2UgcGx1Zy1pbnMgdG8gbWFwIHZhbHVlcyB0aGF0IHlvdSBzcGVjaWZ5CisgICAgICAgIHVzaW5nIDxmaWxlbmFtZT4tLXNvdXJjZTwvZmlsZW5hbWU+IGNvbW1hbmRzIGluIGtpY2tzdGFydAorICAgICAgICBmaWxlcyAoaS5lLiA8ZmlsZW5hbWU+Ki53a3M8L2ZpbGVuYW1lPikgdG8gYSBwbHVnLWluCisgICAgICAgIGltcGxlbWVudGF0aW9uIHVzZWQgdG8gcG9wdWxhdGUgYSBnaXZlbiBwYXJ0aXRpb24uCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgSWYgeW91IHVzZSBwbHVnLWlucyB0aGF0IGhhdmUgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgIChlLmcuIG5hdGl2ZSB0b29scywgYm9vdGxvYWRlcnMsIGFuZCBzbyBmb3J0aCkKKyAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgYSBXaWMgaW1hZ2UsIHlvdSBuZWVkIHRvIHNwZWNpZnkgdGhvc2UKKyAgICAgICAgICAgIGRlcGVuZGVuY2llcyB1c2luZyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1XS1NfRklMRV9ERVBFTkRTJz48ZmlsZW5hbWU+V0tTX0ZJTEVfREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgU291cmNlIHBsdWctaW5zIGFyZSBzdWJjbGFzc2VzIGRlZmluZWQgaW4gcGx1Zy1pbiBmaWxlcy4KKyAgICAgICAgQXMgc2hpcHBlZCwgdGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgc2V2ZXJhbCBwbHVnLWluCisgICAgICAgIGZpbGVzLgorICAgICAgICBZb3UgY2FuIHNlZSB0aGUgc291cmNlIHBsdWctaW4gZmlsZXMgdGhhdCBzaGlwIHdpdGggdGhlCisgICAgICAgIFlvY3RvIFByb2plY3QKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2kvcG9reS90cmVlL3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZSc+aGVyZTwvdWxpbms+LgorICAgICAgICBFYWNoIG9mIHRoZXNlIHBsdWctaW4gZmlsZXMgY29udGFpbiBzb3VyY2UgcGx1Zy1pbnMgdGhhdAorICAgICAgICBhcmUgZGVzaWduZWQgdG8gcG9wdWxhdGUgYSBzcGVjaWZpYyBXaWMgaW1hZ2UgcGFydGl0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBTb3VyY2UgcGx1Zy1pbnMgYXJlIHN1YmNsYXNzZXMgb2YgdGhlCisgICAgICAgIDxmaWxlbmFtZT5Tb3VyY2VQbHVnaW48L2ZpbGVuYW1lPiBjbGFzcywgd2hpY2ggaXMKKyAgICAgICAgZGVmaW5lZCBpbiB0aGUKKyAgICAgICAgPGZpbGVuYW1lPnBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbmJhc2UucHk8L2ZpbGVuYW1lPgorICAgICAgICBmaWxlLgorICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5Cb290aW1nRUZJUGx1Z2luPC9maWxlbmFtZT4KKyAgICAgICAgc291cmNlIHBsdWctaW4gZm91bmQgaW4gdGhlCisgICAgICAgIDxmaWxlbmFtZT5ib290aW1nLWVmaS5weTwvZmlsZW5hbWU+IGZpbGUgaXMgYSBzdWJjbGFzcyBvZgorICAgICAgICB0aGUgPGZpbGVuYW1lPlNvdXJjZVBsdWdpbjwvZmlsZW5hbWU+IGNsYXNzLCB3aGljaCBpcyBmb3VuZAorICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPnBsdWdpbmJhc2UucHk8L2ZpbGVuYW1lPiBmaWxlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBZb3UgY2FuIGFsc28gaW1wbGVtZW50IHNvdXJjZSBwbHVnLWlucyBpbiBhIGxheWVyIG91dHNpZGUKKyAgICAgICAgb2YgdGhlIFNvdXJjZSBSZXBvc2l0b3JpZXMgKGV4dGVybmFsIGxheWVyKS4KKyAgICAgICAgVG8gZG8gc28sIGJlIHN1cmUgdGhhdCB5b3VyIHBsdWctaW4gZmlsZXMgYXJlIGxvY2F0ZWQgaW4KKyAgICAgICAgYSBkaXJlY3Rvcnkgd2hvc2UgcGF0aCBpcworICAgICAgICA8ZmlsZW5hbWU+c2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlLzwvZmlsZW5hbWU+CisgICAgICAgIHdpdGhpbiB5b3VyIGV4dGVybmFsIGxheWVyLgorICAgICAgICBXaGVuIHRoZSBwbHVnLWluIGZpbGVzIGFyZSBsb2NhdGVkIHRoZXJlLCB0aGUgc291cmNlCisgICAgICAgIHBsdWctaW5zIHRoZXkgY29udGFpbiBhcmUgbWFkZSBhdmFpbGFibGUgdG8gV2ljLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGVuIHRoZSBXaWMgaW1wbGVtZW50YXRpb24gbmVlZHMgdG8gaW52b2tlIGEKKyAgICAgICAgcGFydGl0aW9uLXNwZWNpZmljIGltcGxlbWVudGF0aW9uLCBpdCBsb29rcyBmb3IgdGhlIHBsdWctaW4KKyAgICAgICAgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSA8ZmlsZW5hbWU+LS1zb3VyY2U8L2ZpbGVuYW1lPgorICAgICAgICBwYXJhbWV0ZXIgdXNlZCBpbiB0aGUga2lja3N0YXJ0IGZpbGUgZ2l2ZW4gdG8gdGhhdAorICAgICAgICBwYXJ0aXRpb24uCisgICAgICAgIEZvciBleGFtcGxlLCBpZiB0aGUgcGFydGl0aW9uIGlzIHNldCB1cCB1c2luZyB0aGUgZm9sbG93aW5nCisgICAgICAgIGNvbW1hbmQgaW4gYSBraWNrc3RhcnQgZmlsZToKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctcGNiaW9zIC0tb25kaXNrIHNkYSAtLWxhYmVsIGJvb3QgLS1hY3RpdmUgLS1hbGlnbiAxMDI0CisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgVGhlIG1ldGhvZHMgZGVmaW5lZCBhcyBjbGFzcyBtZW1iZXJzIG9mIHRoZSBtYXRjaGluZworICAgICAgICBzb3VyY2UgcGx1Zy1pbiAoaS5lLiA8ZmlsZW5hbWU+Ym9vdGltZy1wY2Jpb3M8L2ZpbGVuYW1lPikKKyAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5ib290aW1nLXBjYmlvcy5weTwvZmlsZW5hbWU+IHBsdWctaW4gZmlsZQorICAgICAgICBhcmUgdXNlZC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVG8gYmUgbW9yZSBjb25jcmV0ZSwgaGVyZSBpcyB0aGUgY29ycmVzcG9uZGluZyBwbHVnLWluCisgICAgICAgIGRlZmluaXRpb24gZnJvbSB0aGUgPGZpbGVuYW1lPmJvb3RpbWctcGNiaW9zLnB5PC9maWxlbmFtZT4KKyAgICAgICAgZmlsZSBmb3IgdGhlIHByZXZpb3VzIGNvbW1hbmQgYWxvbmcgd2l0aCBhbiBleGFtcGxlCisgICAgICAgIG1ldGhvZCBjYWxsZWQgYnkgdGhlIFdpYyBpbXBsZW1lbnRhdGlvbiB3aGVuIGl0IG5lZWRzIHRvCisgICAgICAgIHByZXBhcmUgYSBwYXJ0aXRpb24gdXNpbmcgYW4gaW1wbGVtZW50YXRpb24tc3BlY2lmaWMKKyAgICAgICAgZnVuY3Rpb246CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgYm9vdGltZy1wY2Jpb3MucHkKKyAgICAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgICAgICAgIC4KKyAgICAgICAgY2xhc3MgQm9vdGltZ1BjYmlvc1BsdWdpbihTb3VyY2VQbHVnaW4pOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIE1CUiBib290IHBhcnRpdGlvbiBhbmQgaW5zdGFsbCBzeXNsaW51eCBvbiBpdC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgbmFtZSA9ICdib290aW1nLXBjYmlvcycKKyAgICAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgICAgICAgIC4KKyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRlZiBkb19wcmVwYXJlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyZWF0b3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290ZnNfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIENhbGxlZCB0byBkbyB0aGUgYWN0dWFsIGNvbnRlbnQgcG9wdWxhdGlvbiBmb3IgYSBwYXJ0aXRpb24gaS5lLiBpdAorICAgICAgICAgICAgJ3ByZXBhcmVzJyB0aGUgcGFydGl0aW9uIHRvIGJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBpbWFnZS4KKyAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgcHJlcGFyZSBjb250ZW50IGZvciBsZWdhY3kgYmlvcyBib290IHBhcnRpdGlvbi4KKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAgICAgLgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIElmIGEgc3ViY2xhc3MgKHBsdWctaW4pIGl0c2VsZiBkb2VzIG5vdCBpbXBsZW1lbnQgYQorICAgICAgICBwYXJ0aWN1bGFyIGZ1bmN0aW9uLCBXaWMgbG9jYXRlcyBhbmQgdXNlcyB0aGUgZGVmYXVsdAorICAgICAgICB2ZXJzaW9uIGluIHRoZSBzdXBlcmNsYXNzLgorICAgICAgICBJdCBpcyBmb3IgdGhpcyByZWFzb24gdGhhdCBhbGwgc291cmNlIHBsdWctaW5zIGFyZSBkZXJpdmVkCisgICAgICAgIGZyb20gdGhlIDxmaWxlbmFtZT5Tb3VyY2VQbHVnaW48L2ZpbGVuYW1lPiBjbGFzcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5Tb3VyY2VQbHVnaW48L2ZpbGVuYW1lPiBjbGFzcyBkZWZpbmVkIGluCisgICAgICAgIHRoZSA8ZmlsZW5hbWU+cGx1Z2luYmFzZS5weTwvZmlsZW5hbWU+IGZpbGUgZGVmaW5lcworICAgICAgICBhIHNldCBvZiBtZXRob2RzIHRoYXQgc291cmNlIHBsdWctaW5zIGNhbiBpbXBsZW1lbnQgb3IKKyAgICAgICAgb3ZlcnJpZGUuCisgICAgICAgIEFueSBwbHVnLWlucyAoc3ViY2xhc3Mgb2YKKyAgICAgICAgPGZpbGVuYW1lPlNvdXJjZVBsdWdpbjwvZmlsZW5hbWU+KSB0aGF0IGRvIG5vdCBpbXBsZW1lbnQKKyAgICAgICAgYSBwYXJ0aWN1bGFyIG1ldGhvZCBpbmhlcml0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKKyAgICAgICAgbWV0aG9kIGZyb20gdGhlIDxmaWxlbmFtZT5Tb3VyY2VQbHVnaW48L2ZpbGVuYW1lPiBjbGFzcy4KKyAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgPGZpbGVuYW1lPlNvdXJjZVBsdWdpbjwvZmlsZW5hbWU+IGNsYXNzIGluIHRoZQorICAgICAgICA8ZmlsZW5hbWU+cGx1Z2luYmFzZS5weTwvZmlsZW5hbWU+IGZpbGUgZm9yIGRldGFpbHM6CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBkZXNjcmliZXMgdGhlIG1ldGhvZHMgaW1wbGVtZW50ZWQgaW4gdGhlCisgICAgICAgIDxmaWxlbmFtZT5Tb3VyY2VQbHVnaW48L2ZpbGVuYW1lPiBjbGFzczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+PGZpbGVuYW1lPmRvX3ByZXBhcmVfcGFydGl0aW9uKCk8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENhbGxlZCB0byBwb3B1bGF0ZSBhIHBhcnRpdGlvbiB3aXRoIGFjdHVhbCBjb250ZW50LgorICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB0aGUgbWV0aG9kIHByZXBhcmVzIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgIHBhcnRpdGlvbiBpbWFnZSB0aGF0IGlzIGluY29ycG9yYXRlZCBpbnRvIHRoZQorICAgICAgICAgICAgICAgIGRpc2sgaW1hZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5kb19jb25maWd1cmVfcGFydGl0aW9uKCk8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENhbGxlZCBiZWZvcmUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcHJlcGFyZV9wYXJ0aXRpb24oKTwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgY3JlYXRlIGN1c3RvbSBjb25maWd1cmF0aW9uIGZpbGVzIGZvciBhIHBhcnRpdGlvbgorICAgICAgICAgICAgICAgIChlLmcuIHN5c2xpbnV4IG9yIGdydWIgY29uZmlndXJhdGlvbiBmaWxlcykuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5kb19pbnN0YWxsX2Rpc2soKTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2FsbGVkIGFmdGVyIGFsbCBwYXJ0aXRpb25zIGhhdmUgYmVlbiBwcmVwYXJlZCBhbmQKKyAgICAgICAgICAgICAgICBhc3NlbWJsZWQgaW50byBhIGRpc2sgaW1hZ2UuCisgICAgICAgICAgICAgICAgVGhpcyBtZXRob2QgcHJvdmlkZXMgYSBob29rIHRvIGFsbG93IGZpbmFsaXphdGlvbgorICAgICAgICAgICAgICAgIG9mIGEgZGlzayBpbWFnZSAoZS5nLiB3cml0aW5nIGFuIE1CUikuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjxmaWxlbmFtZT5kb19zdGFnZV9wYXJ0aXRpb24oKTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgU3BlY2lhbCBjb250ZW50LXN0YWdpbmcgaG9vayBjYWxsZWQgYmVmb3JlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3ByZXBhcmVfcGFydGl0aW9uKCk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyBub3JtYWxseSBlbXB0eS48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5UeXBpY2FsbHksIGEgcGFydGl0aW9uIGp1c3QgdXNlcyB0aGUgcGFzc2VkLWluCisgICAgICAgICAgICAgICAgcGFyYW1ldGVycyAoZS5nLiB0aGUgdW5tb2RpZmllZCB2YWx1ZSBvZgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ib290aW1nX2RpcjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCBpbiBzb21lIGNhc2VzLCB0aGluZ3MgbWlnaHQgbmVlZCB0byBiZQorICAgICAgICAgICAgICAgIG1vcmUgdGFpbG9yZWQuCisgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgY2VydGFpbiBmaWxlcyBtaWdodCBhZGRpdGlvbmFsbHkKKyAgICAgICAgICAgICAgICBuZWVkIHRvIGJlIHRha2VuIGZyb20KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ym9vdGltZ19kaXIgKyAvYm9vdDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoaXMgaG9vayBhbGxvd3MgdGhvc2UgZmlsZXMgdG8gYmUgc3RhZ2VkIGluIGEKKyAgICAgICAgICAgICAgICBjdXN0b21pemVkIGZhc2hpb24uCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5nZXRfYml0YmFrZV92YXIoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFsbG93cyB5b3UgdG8gYWNjZXNzIG5vbi1zdGFuZGFyZCB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCB5b3UgbWlnaHQgd2FudCB0byB1c2UgZm9yIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3IuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiBleHRlbmQgdGhlIHNvdXJjZSBwbHVnLWluIG1lY2hhbmlzbS4KKyAgICAgICAgVG8gYWRkIG1vcmUgaG9va3MsIGNyZWF0ZSBtb3JlIHNvdXJjZSBwbHVnLWluIG1ldGhvZHMKKyAgICAgICAgd2l0aGluIDxmaWxlbmFtZT5Tb3VyY2VQbHVnaW48L2ZpbGVuYW1lPiBhbmQgdGhlCisgICAgICAgIGNvcnJlc3BvbmRpbmcgZGVyaXZlZCBzdWJjbGFzc2VzLgorICAgICAgICBUaGUgY29kZSB0aGF0IGNhbGxzIHRoZSBwbHVnLWluIG1ldGhvZHMgdXNlcyB0aGUKKyAgICAgICAgPGZpbGVuYW1lPnBsdWdpbi5nZXRfc291cmNlX3BsdWdpbl9tZXRob2RzKCk8L2ZpbGVuYW1lPgorICAgICAgICBmdW5jdGlvbiB0byBmaW5kIHRoZSBtZXRob2Qgb3IgbWV0aG9kcyBuZWVkZWQgYnkgdGhlIGNhbGwuCisgICAgICAgIFJldHJpZXZhbCBvZiB0aG9zZSBtZXRob2RzIGlzIGFjY29tcGxpc2hlZCBieSBmaWxsaW5nIHVwCisgICAgICAgIGEgZGljdCB3aXRoIGtleXMgdGhhdCBjb250YWluIHRoZSBtZXRob2QgbmFtZXMgb2YgaW50ZXJlc3QuCisgICAgICAgIE9uIHN1Y2Nlc3MsIHRoZXNlIHdpbGwgYmUgZmlsbGVkIGluIHdpdGggdGhlIGFjdHVhbAorICAgICAgICBtZXRob2RzLgorICAgICAgICBTZWUgdGhlIFdpYyBpbXBsZW1lbnRhdGlvbiBmb3IgZXhhbXBsZXMgYW5kIGRldGFpbHMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCiA8c2VjdGlvbiBpZD0neDMyJz4KICAgICA8dGl0bGU+eDMyPC90aXRsZT4KIApAQCAtMTMxMCw3ICsxNTc3LDcgQEAKICAgICAgICAgICAgIFRoZSBXYXlsYW5kIHByb3RvY29sIGxpYnJhcmllcyBhbmQgdGhlIHJlZmVyZW5jZSBXZXN0b24gY29tcG9zaXRvcgogICAgICAgICAgICAgc2hpcCBhcyBpbnRlZ3JhdGVkIHBhY2thZ2VzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IGxheWVyCiAgICAgICAgICAgICBvZiB0aGUKLSAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgogICAgICAgICAgICAgU3BlY2lmaWNhbGx5LCB5b3UgY2FuIGZpbmQgdGhlIHJlY2lwZXMgdGhhdCBidWlsZCBib3RoIFdheWxhbmQKICAgICAgICAgICAgIGFuZCBXZXN0b24gYXQgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kPC9maWxlbmFtZT4uCiAgICAgICAgIDwvcGFyYT4KQEAgLTE0MjUsOCArMTY5Miw4IEBACiAgICAgPHBhcmE+CiAgICAgICAgIEZvciBpbmZvcm1hdGlvbiB0aGF0IGNhbiBoZWxwIHlvdSBtYWludGFpbiBjb21wbGlhbmNlIHdpdGggdmFyaW91cyBvcGVuCiAgICAgICAgIHNvdXJjZSBsaWNlbnNpbmcgZHVyaW5nIHRoZSBsaWZlY3ljbGUgb2YgdGhlIHByb2R1Y3QsIHNlZSB0aGUKLSAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21haW50YWluaW5nLW9wZW4tc291cmNlLWxpY2Vuc2UtY29tcGxpYW5jZS1kdXJpbmcteW91ci1wcm9kdWN0cy1saWZlY3ljbGUnPk1haW50YWluaW5nIE9wZW4gU291cmNlIExpY2Vuc2UgQ29tcGxpYW5jZSBEdXJpbmcgWW91ciBQcm9qZWN0J3MgTGlmZWN5Y2xlPC91bGluaz4iIHNlY3Rpb24KLSAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWFpbnRhaW5pbmctb3Blbi1zb3VyY2UtbGljZW5zZS1jb21wbGlhbmNlLWR1cmluZy15b3VyLXByb2R1Y3RzLWxpZmVjeWNsZSc+TWFpbnRhaW5pbmcgT3BlbiBTb3VyY2UgTGljZW5zZSBDb21wbGlhbmNlIER1cmluZyBZb3VyIFByb2plY3QncyBMaWZlY3ljbGU8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwuCiAgICAgPC9wYXJhPgogCiAgICAgPHNlY3Rpb24gaWQ9InVzaW5ncG9reS1jb25maWd1cmluZy1MSUNfRklMRVNfQ0hLU1VNIj4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvdXNpbmdwb2t5LnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvdXNpbmdwb2t5LnhtbAppbmRleCBkMDgwMzE2Li4xM2Q5YWQ2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3VzaW5ncG9reS54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC91c2luZ3Bva3kueG1sCkBAIC00MiwxMSArNDIsOSBAQAogCiAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgVGhlIGZpcnN0IHRoaW5nIHlvdSBuZWVkIHRvIGRvIGlzIHNldCB1cCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCi0gICAgICAgICAgICBlbnZpcm9ubWVudCBieSBzb3VyY2luZyBhbiBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQKKyAgICAgICAgICAgIGVudmlyb25tZW50IGJ5IHNvdXJjaW5nIHRoZSBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQKICAgICAgICAgICAgIChpLmUuCi0gICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgotICAgICAgICAgICAgb3IKLSAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4pLgogICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgogICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAkIHNvdXJjZSAmT0VfSU5JVF9GSUxFOyBbPHJlcGxhY2VhYmxlPmJ1aWxkX2RpcjwvcmVwbGFjZWFibGU+XQpAQCAtNTYsNyArNTQsOCBAQAogICAgICAgICA8cGFyYT4KICAgICAgICAgICAgIFRoZSA8cmVwbGFjZWFibGU+YnVpbGRfZGlyPC9yZXBsYWNlYWJsZT4gYXJndW1lbnQgaXMgb3B0aW9uYWwgYW5kIHNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IHRoZQogICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIGZvciB0aGUgYnVpbGQgLQotICAgICAgICAgICAgdGhlIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIEJ1aWxkIERpcmVjdG9yeSwgaXQgZGVmYXVsdHMgdG8gYSBkaXJlY3RvcnkKICAgICAgICAgICAgIG5hbWVkIDxmaWxlbmFtZT5idWlsZDwvZmlsZW5hbWU+IGluIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KICAgICAgICAgICAgIEEgY29tbW9uIHByYWN0aWNlIGlzIHRvIHVzZSBhIGRpZmZlcmVudCBCdWlsZCBEaXJlY3RvcnkgZm9yIGRpZmZlcmVudCB0YXJnZXRzLgpAQCAtMTA4LDcgKzEwNyw3IEBACiAgICAgICAgICAgICBUaGUgPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IGlzIHRoZSBuYW1lIG9mIHRoZSByZWNpcGUgeW91IHdhbnQgdG8gYnVpbGQuCiAgICAgICAgICAgICBDb21tb24gdGFyZ2V0cyBhcmUgdGhlIGltYWdlcyBpbiA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzPC9maWxlbmFtZT4sCiAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzPC9maWxlbmFtZT4sIGV0Yy4gYWxsIGZvdW5kIGluIHRoZQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCiAgICAgICAgICAgICBPciwgdGhlIHRhcmdldCBjYW4gYmUgdGhlIG5hbWUgb2YgYSByZWNpcGUgZm9yIGEgc3BlY2lmaWMgcGllY2Ugb2Ygc29mdHdhcmUgc3VjaCBhcwogICAgICAgICAgICAgQnVzeUJveC4KICAgICAgICAgICAgIEZvciBtb3JlIGRldGFpbHMgYWJvdXQgdGhlIGltYWdlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzdXBwb3J0cywgc2VlIHRoZQpAQCAtMTQyLDExICsxNDEsMTIgQEAKICAgICA8cGFyYT4KICAgICAgICAgT25jZSBhbiBpbWFnZSBoYXMgYmVlbiBidWlsdCwgaXQgb2Z0ZW4gbmVlZHMgdG8gYmUgaW5zdGFsbGVkLgogICAgICAgICBUaGUgaW1hZ2VzIGFuZCBrZXJuZWxzIGJ1aWx0IGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGFyZSBwbGFjZWQgaW4gdGhlCi0gICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4gaW4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+IGluCiAgICAgICAgIDxmaWxlbmFtZSBjbGFzcz0iZGlyZWN0b3J5Ij50bXAvZGVwbG95L2ltYWdlczwvZmlsZW5hbWU+LgogICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHJ1biBwcmUtYnVpbHQgaW1hZ2VzIHN1Y2ggYXMgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPgogICAgICAgICBhbmQgPGZpbGVuYW1lPnFlbXVhcm08L2ZpbGVuYW1lPiwgc2VlIHRoZQotICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyNzZGstbWFudWFsJz5Zb2N0byBQcm9qZWN0IFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoU0RLKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyc+WW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBhbmQgdGhlIEV4dGVuc2libGUgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChlU0RLKTwvdWxpbms+CisgICAgICAgIG1hbnVhbC4KICAgICAgICAgRm9yIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byBpbnN0YWxsIHRoZXNlIGltYWdlcywgc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB5b3VyCiAgICAgICAgIHBhcnRpY3VsYXIgYm9hcmQgb3IgbWFjaGluZS4KICAgICA8L3BhcmE+CkBAIC0xNzcsMTYgKzE3NywxNyBAQAogICAgICAgICBnb2luZyB3cm9uZy4KICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBlbmFibGUgYW5kIHVzZSB0aGlzIGZlYXR1cmUsIHNlZSB0aGUKICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5nLXRoZS1lcnJvci1yZXBvcnRpbmctdG9vbCc+VXNpbmcgdGhlIEVycm9yIFJlcG9ydGluZyBUb29sPC91bGluaz4iCi0gICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbC4KICAgICA8L3BhcmE+CiAKICAgICA8cGFyYT4KICAgICAgICAgRm9yIGRpc2N1c3Npb25zIG9uIGRlYnVnZ2luZywgc2VlIHRoZQogICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGxhdGRldi1nZGItcmVtb3RlZGVidWcnPkRlYnVnZ2luZyBXaXRoIHRoZSBHTlUgUHJvamVjdCBEZWJ1Z2dlciAoR0RCKSBSZW1vdGVseTwvdWxpbms+IiBzZWN0aW9uCi0gICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BlcidzIE1hbnVhbAorICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwKICAgICAgICAgYW5kIHRoZQogICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfU0RLX1VSTDsjYWR0LWVjbGlwc2UnPldvcmtpbmcgd2l0aGluIEVjbGlwc2U8L3VsaW5rPiIKLSAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKFNESykgRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgYW5kIHRoZQorICAgICAgICBFeHRlbnNpYmxlIFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoZVNESykgbWFudWFsLgogICAgIDwvcGFyYT4KIAogICAgIDxub3RlPgpAQCAtMjA4LDcgKzIwOSw3IEBACiAgICAgICAgICAgICAoPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPikgbWlnaHQgYmUgaW4KICAgICAgICAgICAgIDxmaWxlbmFtZT50bXAvd29yay9xZW11eDg2LXBva3ktbGludXgvY29yZS1pbWFnZS1taW5pbWFsLzEuMC1yMC90ZW1wL2xvZy5kb19jb21waWxlPC9maWxlbmFtZT4uCiAgICAgICAgICAgICBUbyBzZWUgdGhlIGNvbW1hbmRzCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNiaXRiYWtlLXRlcm0nPkJpdEJha2U8L3VsaW5rPiByYW4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2JpdGJha2UtdGVybSc+Qml0QmFrZTwvbGluaz4gcmFuCiAgICAgICAgICAgICB0byBnZW5lcmF0ZSBhIGxvZywgbG9vayBhdCB0aGUgY29ycmVzcG9uZGluZwogICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bi5kb188L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+CiAgICAgICAgICAgICBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KQEAgLTg3NCw3ICs4NzUsNyBAQAogICAgICAgICAgICAgY2xhc3MgaW1wbGVtZW50cyB0aGVzZSBmdW5jdGlvbnMuCiAgICAgICAgICAgICBTZWUgdGhhdCBjbGFzcyBpbiB0aGUKICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXM8L2ZpbGVuYW1lPiBmb2xkZXIgb2YgdGhlCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CiAgICAgICAgICAgICBmb3IgaW5mb3JtYXRpb24uCiAgICAgICAgIDwvcGFyYT4KIApAQCAtOTc4LDcgKzk3OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIFJlbW92aW5nCiAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4KICAgICAgICAgICAgICAgICAgICAgKHVzdWFsbHkgPGZpbGVuYW1lPnRtcC88L2ZpbGVuYW1lPiwgd2l0aGluIHRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+KQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4pCiAgICAgICAgICAgICAgICAgICAgIGNhbiBvZnRlbiBmaXggdGVtcG9yYXJ5IGJ1aWxkIGlzc3Vlcy4KICAgICAgICAgICAgICAgICAgICAgUmVtb3ZpbmcgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+IGlzIHVzdWFsbHkgYQogICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZWx5IGNoZWFwIG9wZXJhdGlvbiwgYmVjYXVzZSB0YXNrIG91dHB1dCB3aWxsIGJlCkBAIC0xMDMxLDkgKzEwMzIsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgaW1wbGVtZW50YXRpb24gb2YKICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyc+QnVnemlsbGE8L3VsaW5rPi4KICAgICAgICAgICAgICAgICAgICAgRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gb24gaG93IHRvIHN1Ym1pdCBhIGJ1ZyBhZ2FpbnN0Ci0gICAgICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0LCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN0cmFja2luZy1idWdzJz5UcmFja2luZyBCdWdzPC91bGluaz4iCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCwgc2VlIHRoZSBZb2N0byBQcm9qZWN0IEJ1Z3ppbGxhCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9CdWd6aWxsYV9Db25maWd1cmF0aW9uX2FuZF9CdWdfVHJhY2tpbmcnPndpa2kgcGFnZTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc3VibWl0dGluZy1hLWRlZmVjdC1hZ2FpbnN0LXRoZS15b2N0by1wcm9qZWN0Jz5TdWJtaXR0aW5nIGEgRGVmZWN0IEFnYWluc3QgdGhlIFlvY3RvIFByb2plY3Q8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiwgd2hpY2ggaXMgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MKKyAgICAgICAgICAgICAgICAgICAgTWFudWFsLgogICAgICAgICAgICAgICAgICAgICA8bm90ZT4KICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYW51YWxzIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQgcGxhY2UgdG8gZG9jdW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB0aGF0IGFyZSBwdXJlbHkgaW50ZXJuYWwgYW5kIGhhdmUgYSBsaW1pdGVkCkBAIC0xMDQ2LDYgKzEwNTAsMzc2IEBACiAgICAgPC9zZWN0aW9uPgogPC9zZWN0aW9uPgogCis8c2VjdGlvbiBpZD0ncmVmLXF1aWNrLWVtdWxhdG9yLXFlbXUnPgorICAgIDx0aXRsZT5RdWljayBFTVVsYXRvciAoUUVNVSk8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHVzZXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFF1aWNrIEVNVWxhdG9yIChRRU1VKQorICAgICAgICBPcGVuIFNvdXJjZSBwcm9qZWN0IGFzIHBhcnQgb2YgdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgInRvb2wKKyAgICAgICAgc2V0Ii4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBZb2N0byBQcm9qZWN0LCBRRU1VIGlzIGFuCisgICAgICAgIGVtdWxhdG9yIGFuZCB2aXJ0dWFsaXphdGlvbiBtYWNoaW5lIHRoYXQgYWxsb3dzIHlvdSB0byBydW4gYSBjb21wbGV0ZQorICAgICAgICBpbWFnZSB5b3UgaGF2ZSBidWlsdCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCBhcyBqdXN0IGFub3RoZXIgdGFzaworICAgICAgICBvbiB5b3VyIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgUUVNVSBpcyB1c2VmdWwgZm9yIHJ1bm5pbmcgYW5kIHRlc3RpbmcgaW1hZ2VzIGFuZCBhcHBsaWNhdGlvbnMgb24KKyAgICAgICAgc3VwcG9ydGVkIFlvY3RvIFByb2plY3QgYXJjaGl0ZWN0dXJlcyB3aXRob3V0IGhhdmluZyBhY3R1YWwgaGFyZHdhcmUuCisgICAgICAgIEFtb25nIG90aGVyIHRoaW5ncywgdGhlIFlvY3RvIFByb2plY3QgdXNlcyBRRU1VIHRvIHJ1biBhdXRvbWF0ZWQKKyAgICAgICAgUXVhbGl0eSBBc3N1cmFuY2UgKFFBKSB0ZXN0cyBvbiBmaW5hbCBpbWFnZXMgc2hpcHBlZCB3aXRoIGVhY2gKKyAgICAgICAgcmVsZWFzZS4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBUaGlzIGltcGxlbWVudGF0aW9uIGlzIG5vdCB0aGUgc2FtZSBhcyBRRU1VIGluIGdlbmVyYWwuCisgICAgICAgIDwvbm90ZT4KKyAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGEgYnJpZWYgcmVmZXJlbmNlIGZvciB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICBpbXBsZW1lbnRhdGlvbiBvZiBRRU1VLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3Igb2ZmaWNpYWwgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50YXRpb24gb24gUUVNVSBpbiBnZW5lcmFsLCBzZWUgdGhlCisgICAgICAgIGZvbGxvd2luZyByZWZlcmVuY2VzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz48dWxpbmsgdXJsPSdodHRwOi8vd2lraS5xZW11Lm9yZy9NYWluX1BhZ2UnPlFFTVUgV2Vic2l0ZTwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhlIG9mZmljaWFsIHdlYnNpdGUgZm9yIHRoZSBRRU1VIE9wZW4gU291cmNlIHByb2plY3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPjx1bGluayB1cmw9J2h0dHA6Ly93aWtpLnFlbXUub3JnL01hbnVhbCc+RG9jdW1lbnRhdGlvbjwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhlIFFFTVUgdXNlciBtYW51YWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGUgWW9jdG8gUHJvamVjdCBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAgICBRRU1VLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNkZXYtbWFudWFsLXFlbXUnPlVzaW5nIHRoZSBRdWljayBFTVVsYXRvciAoUUVNVSk8L3VsaW5rPiIKKyAgICAgICAgY2hhcHRlciBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3FlbXUtYXZhaWxhYmlsaXR5Jz4KKyAgICAgICAgPHRpdGxlPlFFTVUgQXZhaWxhYmlsaXR5PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFFFTVUgaXMgbWFkZSBhdmFpbGFibGUgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCBhIG51bWJlciBvZiB3YXlzLgorICAgICAgICAgICAgT25lIG1ldGhvZCBpcyB0byBpbnN0YWxsIGEgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspLgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIG1ha2Ugc3VyZSB5b3UgaGF2ZQorICAgICAgICAgICAgUUVNVSBhdmFpbGFibGUsIHNlZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1NES19VUkw7I3RoZS1xZW11LWVtdWxhdG9yJz5UaGUgUUVNVSBFbXVsYXRvcjwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBhbmQgdGhlCisgICAgICAgICAgICBFeHRlbnNpYmxlIFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoZVNESykgbWFudWFsLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3FlbXUtcGVyZm9ybWFuY2UnPgorICAgICAgICA8dGl0bGU+UUVNVSBQZXJmb3JtYW5jZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBVc2luZyBRRU1VIHRvIGVtdWxhdGUgeW91ciBoYXJkd2FyZSBjYW4gcmVzdWx0IGluIHNwZWVkIGlzc3VlcworICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgYW5kIGhvc3QgYXJjaGl0ZWN0dXJlIG1peC4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB1c2luZyB0aGUgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPiBpbWFnZSBpbiB0aGUKKyAgICAgICAgICAgIGVtdWxhdG9yIG9uIGFuIEludGVsLWJhc2VkIDMyLWJpdCAoeDg2KSBob3N0IG1hY2hpbmUgaXMgZmFzdAorICAgICAgICAgICAgYmVjYXVzZSB0aGUgdGFyZ2V0IGFuZCBob3N0IGFyY2hpdGVjdHVyZXMgbWF0Y2guCisgICAgICAgICAgICBPbiB0aGUgb3RoZXIgaGFuZCwgdXNpbmcgdGhlIDxmaWxlbmFtZT5xZW11YXJtPC9maWxlbmFtZT4gaW1hZ2UKKyAgICAgICAgICAgIG9uIHRoZSBzYW1lIEludGVsLWJhc2VkIGhvc3QgY2FuIGJlIHNsb3dlci4KKyAgICAgICAgICAgIEJ1dCwgeW91IHN0aWxsIGFjaGlldmUgZmFpdGhmdWwgZW11bGF0aW9uIG9mIEFSTS1zcGVjaWZpYyBpc3N1ZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIHNwZWVkIHRoaW5ncyB1cCwgdGhlIFFFTVUgaW1hZ2VzIHN1cHBvcnQgdXNpbmcKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kaXN0Y2M8L2ZpbGVuYW1lPiB0byBjYWxsIGEgY3Jvc3MtY29tcGlsZXIgb3V0c2lkZSB0aGUKKyAgICAgICAgICAgIGVtdWxhdGVkIHN5c3RlbS4KKyAgICAgICAgICAgIElmIHlvdSB1c2VkIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gdG8gc3RhcnQgUUVNVSwgYW5kIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmRpc3RjY2Q8L2ZpbGVuYW1lPiBhcHBsaWNhdGlvbiBpcyBwcmVzZW50IG9uIHRoZSBob3N0CisgICAgICAgICAgICBzeXN0ZW0sIGFueSBCaXRCYWtlIGNyb3NzLWNvbXBpbGluZyB0b29sY2hhaW4gYXZhaWxhYmxlIGZyb20gdGhlCisgICAgICAgICAgICBidWlsZCBzeXN0ZW0gaXMgYXV0b21hdGljYWxseSB1c2VkIGZyb20gd2l0aGluIFFFTVUgc2ltcGx5IGJ5CisgICAgICAgICAgICBjYWxsaW5nIDxmaWxlbmFtZT5kaXN0Y2M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFlvdSBjYW4gYWNjb21wbGlzaCB0aGlzIGJ5IGRlZmluaW5nIHRoZSBjcm9zcy1jb21waWxlciB2YXJpYWJsZQorICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPmV4cG9ydCBDQz0iZGlzdGNjIjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIGlmIHlvdSBhcmUgdXNpbmcgYSBzdWl0YWJsZSBTREsgaW1hZ2Ugb3IgdGhlCisgICAgICAgICAgICBhcHByb3ByaWF0ZSBzdGFuZC1hbG9uZSB0b29sY2hhaW4gaXMgcHJlc2VudCwgdGhlIHRvb2xjaGFpbiBpcworICAgICAgICAgICAgYWxzbyBhdXRvbWF0aWNhbGx5IHVzZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFNldmVyYWwgbWVjaGFuaXNtcyBleGlzdCB0aGF0IGxldCB5b3UgY29ubmVjdCB0byB0aGUgc3lzdGVtCisgICAgICAgICAgICBydW5uaW5nIG9uIHRoZSBRRU1VIGVtdWxhdG9yOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFFFTVUgcHJvdmlkZXMgYSBmcmFtZWJ1ZmZlciBpbnRlcmZhY2UgdGhhdCBtYWtlcyBzdGFuZGFyZAorICAgICAgICAgICAgICAgICAgICBjb25zb2xlcyBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgR2VuZXJhbGx5LCBoZWFkbGVzcyBlbWJlZGRlZCBkZXZpY2VzIGhhdmUgYSBzZXJpYWwgcG9ydC4KKyAgICAgICAgICAgICAgICAgICAgSWYgc28sIHlvdSBjYW4gY29uZmlndXJlIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBydW5uaW5nIGltYWdlIHRvIHVzZSB0aGF0IHBvcnQgdG8gcnVuIGEgY29uc29sZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNvbm5lY3Rpb24gdXNlcyBzdGFuZGFyZCBJUCBuZXR3b3JraW5nLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNTSCBzZXJ2ZXJzIGV4aXN0IGluIHNvbWUgUUVNVSBpbWFnZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4gUUVNVSBpbWFnZSBoYXMgYQorICAgICAgICAgICAgICAgICAgICBEcm9wYmVhciBzZWN1cmUgc2hlbGwgKFNTSCkgc2VydmVyIHRoYXQgcnVucyB3aXRoIHRoZSByb290CisgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkIGRpc2FibGVkLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLWxzYjwvZmlsZW5hbWU+IFFFTVUgaW1hZ2VzCisgICAgICAgICAgICAgICAgICAgIGhhdmUgT3BlblNTSCBpbnN0ZWFkIG9mIERyb3BiZWFyLgorICAgICAgICAgICAgICAgICAgICBJbmNsdWRpbmcgdGhlc2UgU1NIIHNlcnZlcnMgYWxsb3cgeW91IHRvIHVzZSBzdGFuZGFyZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3NoPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5zY3A8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBRRU1VIGltYWdlLAorICAgICAgICAgICAgICAgICAgICBob3dldmVyLCBjb250YWlucyBubyBTU0ggc2VydmVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIGEgcHJvdmlkZWQsIHVzZXItc3BhY2UgTkZTIHNlcnZlciB0byBib290CisgICAgICAgICAgICAgICAgICAgIHRoZSBRRU1VIHNlc3Npb24gdXNpbmcgYSBsb2NhbCBjb3B5IG9mIHRoZSByb290CisgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0gb24gdGhlIGhvc3QuCisgICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIG1ha2UgdGhpcyBjb25uZWN0aW9uLCB5b3UgbXVzdCBleHRyYWN0IGEKKyAgICAgICAgICAgICAgICAgICAgcm9vdCBmaWxlc3lzdGVtIHRhcmJhbGwgYnkgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11LWV4dHJhY3Qtc2RrPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgcnVubmluZyB0aGUgY29tbWFuZCwgeW91IG11c3QgdGhlbiBwb2ludCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzY3JpcHQgdG8gdGhlIGV4dHJhY3RlZCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBhIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSBpbWFnZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNxZW11LXJ1bm5pbmctdW5kZXItYS1uZXR3b3JrLWZpbGUtc3lzdGVtLW5mcy1zZXJ2ZXInPlJ1bm5pbmcgVW5kZXIgYSBOZXR3b3JrIEZpbGUgU3lzdGVtIChORlMpIFNlcnZlcjwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbCBmb3IKKyAgICAgICAgICAgICAgICAgICAgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdxZW11LWNvbW1hbmQtbGluZS1zeW50YXgnPgorICAgICAgICA8dGl0bGU+UUVNVSBDb21tYW5kLUxpbmUgU3ludGF4PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBiYXNpYyA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+IGNvbW1hbmQgc3ludGF4IGlzIGFzCisgICAgICAgICAgICBmb2xsb3dzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHJ1bnFlbXUgWzxyZXBsYWNlYWJsZT5vcHRpb248L3JlcGxhY2VhYmxlPiBdICBbLi4uXQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgQmFzZWQgb24gd2hhdCB5b3UgcHJvdmlkZSBvbiB0aGUgY29tbWFuZCBsaW5lLAorICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBkb2VzIGEgZ29vZCBqb2Igb2YgZmlndXJpbmcgb3V0IHdoYXQKKyAgICAgICAgICAgIHlvdSBhcmUgdHJ5aW5nIHRvIGRvLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGJ5IGRlZmF1bHQsIFFFTVUgbG9va3MgZm9yIHRoZSBtb3N0IHJlY2VudGx5IGJ1aWx0CisgICAgICAgICAgICBpbWFnZSBhY2NvcmRpbmcgdG8gdGhlIHRpbWVzdGFtcCB3aGVuIGl0IG5lZWRzIHRvIGxvb2sgZm9yIGFuCisgICAgICAgICAgICBpbWFnZS4KKyAgICAgICAgICAgIE1pbmltYWxseSwgdGhyb3VnaCB0aGUgdXNlIG9mIG9wdGlvbnMsIHlvdSBtdXN0IHByb3ZpZGUgZWl0aGVyCisgICAgICAgICAgICBhIG1hY2hpbmUgbmFtZSwgYSB2aXJ0dWFsIG1hY2hpbmUgaW1hZ2UKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+KndpYy52bWRrPC9maWxlbmFtZT4pLCBvciBhIGtlcm5lbCBpbWFnZQorICAgICAgICAgICAgKDxmaWxlbmFtZT4qLmJpbjwvZmlsZW5hbWU+KS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9sbG93aW5nIGlzIHRoZSBjb21tYW5kLWxpbmUgaGVscCBvdXRwdXQgZm9yIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBjb21tYW5kOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHJ1bnFlbXUgLS1oZWxwCisKKyAgICAgVXNhZ2U6IHlvdSBjYW4gcnVuIHRoaXMgc2NyaXB0IHdpdGggYW55IHZhbGlkIGNvbWJpbmF0aW9uCisgICAgIG9mIHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIChpbiBhbnkgb3JkZXIpOgorICAgICAgIEtFUk5FTCAtIHRoZSBrZXJuZWwgaW1hZ2UgZmlsZSB0byB1c2UKKyAgICAgICBST09URlMgLSB0aGUgcm9vdGZzIGltYWdlIGZpbGUgb3IgbmZzcm9vdCBkaXJlY3RvcnkgdG8gdXNlCisgICAgICAgTUFDSElORSAtIHRoZSBtYWNoaW5lIG5hbWUgKG9wdGlvbmFsLCBhdXRvZGV0ZWN0ZWQgZnJvbSBLRVJORUwgZmlsZW5hbWUgaWYgdW5zcGVjaWZpZWQpCisgICAgICAgU2ltcGxpZmllZCBRRU1VIGNvbW1hbmQtbGluZSBvcHRpb25zIGNhbiBiZSBwYXNzZWQgd2l0aDoKKyAgICAgICAgIG5vZ3JhcGhpYyAtIGRpc2FibGUgdmlkZW8gY29uc29sZQorICAgICAgICAgc2VyaWFsIC0gZW5hYmxlIGEgc2VyaWFsIGNvbnNvbGUgb24gL2Rldi90dHlTMAorICAgICAgICAgc2xpcnAgLSBlbmFibGUgdXNlciBuZXR3b3JraW5nLCBubyByb290IHByaXZpbGVnZXMgaXMgcmVxdWlyZWQKKyAgICAgICAgIGt2bSAtIGVuYWJsZSBLVk0gd2hlbiBydW5uaW5nIHg4Ni94ODZfNjQgKFZULWNhcGFibGUgQ1BVIHJlcXVpcmVkKQorICAgICAgICAga3ZtLXZob3N0IC0gZW5hYmxlIEtWTSB3aXRoIHZob3N0IHdoZW4gcnVubmluZyB4ODYveDg2XzY0IChWVC1jYXBhYmxlIENQVSByZXF1aXJlZCkKKyAgICAgICAgIHB1YmxpY3ZuYyAtIGVuYWJsZSBhIFZOQyBzZXJ2ZXIgb3BlbiB0byBhbGwgaG9zdHMKKyAgICAgICAgIGF1ZGlvIC0gZW5hYmxlIGF1ZGlvCisgICAgICAgICBbKi9db3ZtZiogLSBPVk1GIGZpcm13YXJlIGZpbGUgb3IgYmFzZSBuYW1lIGZvciBib290aW5nIHdpdGggVUVGSQorICAgICAgIHRjcHNlcmlhbD0mbHQ7cG9ydCZndDsgLSBzcGVjaWZ5IHRjcCBzZXJpYWwgcG9ydCBudW1iZXIKKyAgICAgICBiaW9zZGlyPSZsdDtkaXImZ3Q7IC0gc3BlY2lmeSBjdXN0b20gYmlvcyBkaXIKKyAgICAgICBiaW9zZmlsZW5hbWU9Jmx0O2ZpbGVuYW1lJmd0OyAtIHNwZWNpZnkgYmlvcyBmaWxlbmFtZQorICAgICAgIHFlbXVwYXJhbXM9Jmx0O3h5eiZndDsgLSBzcGVjaWZ5IGN1c3RvbSBwYXJhbWV0ZXJzIHRvIFFFTVUKKyAgICAgICBib290cGFyYW1zPSZsdDt4eXomZ3Q7IC0gc3BlY2lmeSBjdXN0b20ga2VybmVsIHBhcmFtZXRlcnMgZHVyaW5nIGJvb3QKKyAgICAgICBoZWxwLCAtaCwgLS1oZWxwOiBwcmludCB0aGlzIHRleHQKKworICAgICBFeGFtcGxlczoKKyAgICAgICBydW5xZW11CisgICAgICAgcnVucWVtdSBxZW11YXJtCisgICAgICAgcnVucWVtdSB0bXAvZGVwbG95L2ltYWdlcy9xZW11YXJtCisgICAgICAgcnVucWVtdSB0bXAvZGVwbG95L2ltYWdlcy9xZW11eDg2LyZsdDtxZW11Ym9vdC5jb25mJmd0OworICAgICAgIHJ1bnFlbXUgcWVtdXg4Ni02NCBjb3JlLWltYWdlLXNhdG8gZXh0NAorICAgICAgIHJ1bnFlbXUgcWVtdXg4Ni02NCB3aWMtaW1hZ2UtbWluaW1hbCB3aWMKKyAgICAgICBydW5xZW11IHBhdGgvdG8vYnpJbWFnZS1xZW11eDg2LmJpbiBwYXRoL3RvL25mc3Jvb3RkaXIvIHNlcmlhbAorICAgICAgIHJ1bnFlbXUgcWVtdXg4NiBpc28vaGRkaW1nL3dpYy52bWRrL3dpYy5xY293Mi93aWMudmRpL3JhbWZzL2NwaW8uZ3ouLi4KKyAgICAgICBydW5xZW11IHFlbXV4ODYgcWVtdXBhcmFtcz0iLW0gMjU2IgorICAgICAgIHJ1bnFlbXUgcWVtdXg4NiBib290cGFyYW1zPSJwc3BsYXNoPWZhbHNlIgorICAgICAgIHJ1bnFlbXUgcGF0aC90by8mbHQ7aW1hZ2UmZ3Q7LSZsdDttYWNoaW5lJmd0Oy53aWMKKyAgICAgICBydW5xZW11IHBhdGgvdG8vJmx0O2ltYWdlJmd0Oy0mbHQ7bWFjaGluZSZndDsud2ljLnZtZGsKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdydW5xZW11LWNvbW1hbmQtbGluZS1vcHRpb25zJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gQ29tbWFuZC1MaW5lIE9wdGlvbnM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9sbG93aW5nIGlzIGEgZGVzY3JpcHRpb24gb2YgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgb3B0aW9ucyB5b3UgY2FuIHByb3ZpZGUgb24gdGhlIGNvbW1hbmQgbGluZToKKyAgICAgICAgICAgIDxub3RlPjx0aXRsZT5UaXA8L3RpdGxlPgorICAgICAgICAgICAgICAgIElmIHlvdSBkbyBwcm92aWRlIHNvbWUgImlsbGVnYWwiIG9wdGlvbiBjb21iaW5hdGlvbiBvciBwZXJoYXBzCisgICAgICAgICAgICAgICAgeW91IGRvIG5vdCBwcm92aWRlIGVub3VnaCBpbiB0aGUgd2F5IG9mIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBwcm92aWRlcyBhcHByb3ByaWF0ZSBlcnJvcgorICAgICAgICAgICAgICAgIG1lc3NhZ2luZyB0byBoZWxwIHlvdSBjb3JyZWN0IHRoZSBwcm9ibGVtLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5RRU1VQVJDSDwvcmVwbGFjZWFibGU+OgorICAgICAgICAgICAgICAgICAgICBUaGUgUUVNVSBtYWNoaW5lIGFyY2hpdGVjdHVyZSwgd2hpY2ggbXVzdCBiZSAicWVtdWFybSIsCisgICAgICAgICAgICAgICAgICAgICJxZW11YXJtNjQiLCAicWVtdW1pcHMiLCAicWVtdW1pcHM2NCIsICJxZW11cHBjIiwKKyAgICAgICAgICAgICAgICAgICAgInFlbXV4ODYiLCBvciAicWVtdXg4Ni02NCIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5WTTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSB2aXJ0dWFsIG1hY2hpbmUgaW1hZ2UsIHdoaWNoIG11c3QgYmUgYQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LndpYy52bWRrPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgb3B0aW9uIHdoZW4geW91IHdhbnQgdG8gYm9vdCBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ud2ljLnZtZGs8L2ZpbGVuYW1lPiBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGltYWdlIGZpbGVuYW1lIHlvdSBwcm92aWRlIG11c3QgY29udGFpbiBvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBzdHJpbmdzOiAicWVtdXg4Ni02NCIsICJxZW11eDg2IiwgInFlbXVhcm0iLAorICAgICAgICAgICAgICAgICAgICAicWVtdW1pcHM2NCIsICJxZW11bWlwcyIsICJxZW11cHBjIiwgb3IgInFlbXVzaDQiLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5ST09URlM8L3JlcGxhY2VhYmxlPjoKKyAgICAgICAgICAgICAgICAgICAgQSByb290IGZpbGVzeXN0ZW0gdGhhdCBoYXMgb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgZmlsZXR5cGUgZXh0ZW5zaW9uczogImV4dDIiLCAiZXh0MyIsICJleHQ0IiwgImpmZnMyIiwKKyAgICAgICAgICAgICAgICAgICAgIm5mcyIsIG9yICJidHJmcyIuCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBmaWxlbmFtZSB5b3UgcHJvdmlkZSBmb3IgdGhpcyBvcHRpb24gdXNlcyDigJxuZnPigJ0sIGl0CisgICAgICAgICAgICAgICAgICAgIG11c3QgcHJvdmlkZSBhbiBleHBsaWNpdCByb290IGZpbGVzeXN0ZW0gcGF0aC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+S0VSTkVMPC9yZXBsYWNlYWJsZT46CisgICAgICAgICAgICAgICAgICAgIEEga2VybmVsIGltYWdlLCB3aGljaCBpcyBhIDxmaWxlbmFtZT4uYmluPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgcHJvdmlkZSBhIDxmaWxlbmFtZT4uYmluPC9maWxlbmFtZT4gZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBkZXRlY3RzIGl0IGFuZCBhc3N1bWVzIHRoZQorICAgICAgICAgICAgICAgICAgICBmaWxlIGlzIGEga2VybmVsIGltYWdlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5NQUNISU5FPC9yZXBsYWNlYWJsZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIFFFTVUgbWFjaGluZSwgd2hpY2ggbXVzdCBiZSBvbmUKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGZvbGxvd2luZzogInFlbXV4ODYiLCAicWVtdXg4Ni02NCIsICJxZW11YXJtIiwKKyAgICAgICAgICAgICAgICAgICAgInFlbXVhcm02NCIsICJxZW11bWlwcyIsIOKAnHFlbXVtaXBzNjQiLCBvciAicWVtdXBwYyIuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8cmVwbGFjZWFibGU+TUFDSElORTwvcmVwbGFjZWFibGU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+UUVNVUFSQ0g8L3JlcGxhY2VhYmxlPiBvcHRpb25zIGFyZSBiYXNpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgaWRlbnRpY2FsLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHByb3ZpZGUgYSA8cmVwbGFjZWFibGU+TUFDSElORTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbiwgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiB0cmllcyB0byBkZXRlcm1pbmUKKyAgICAgICAgICAgICAgICAgICAgaXQgYmFzZWQgb24gb3RoZXIgb3B0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmFtZnM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgSW5kaWNhdGVzIHlvdSBhcmUgYm9vdGluZyBhbiBpbml0aWFsIFJBTSBkaXNrIChpbml0cmFtZnMpCisgICAgICAgICAgICAgICAgICAgIGltYWdlLCB3aGljaCBtZWFucyB0aGUgPGZpbGVuYW1lPkZTVFlQRTwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jcGlvLmd6PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmlzbzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgeW91IGFyZSBib290aW5nIGFuIElTTyBpbWFnZSwgd2hpY2ggbWVhbnMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GU1RZUEU8L2ZpbGVuYW1lPiBpcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmlzbzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ub2dyYXBoaWM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgRGlzYWJsZXMgdGhlIHZpZGVvIGNvbnNvbGUsIHdoaWNoIHNldHMgdGhlIGNvbnNvbGUgdG8KKyAgICAgICAgICAgICAgICAgICAgInR0eXMwIi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2VyaWFsPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIEVuYWJsZXMgYSBzZXJpYWwgY29uc29sZSBvbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2Rldi90dHlTMDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaW9zZGlyPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIEVzdGFibGlzaGVzIGEgY3VzdG9tIGRpcmVjdG9yeSBmb3IgQklPUywgVkdBIEJJT1MgYW5kCisgICAgICAgICAgICAgICAgICAgIGtleW1hcHMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpb3NmaWxlbmFtZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBFc3RhYmxpc2hlcyBhIGN1c3RvbSBCSU9TIG5hbWUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXVwYXJhbXM9XCI8cmVwbGFjZWFibGU+eHl6PC9yZXBsYWNlYWJsZT5cIjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgY3VzdG9tIFFFTVUgcGFyYW1ldGVycy4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgb3B0aW9uIHRvIHBhc3Mgb3B0aW9ucyBvdGhlciB0aGFuIHRoZSBzaW1wbGUKKyAgICAgICAgICAgICAgICAgICAgImt2bSIgYW5kICJzZXJpYWwiIG9wdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Ym9vdHBhcmFtcz1cIjxyZXBsYWNlYWJsZT54eXo8L3JlcGxhY2VhYmxlPlwiPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBjdXN0b20gYm9vdCBwYXJhbWV0ZXJzIGZvciB0aGUga2VybmVsLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hdWRpbzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBFbmFibGVzIGF1ZGlvIGluIFFFTVUuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8cmVwbGFjZWFibGU+TUFDSElORTwvcmVwbGFjZWFibGU+IG9wdGlvbiBtdXN0IGJlCisgICAgICAgICAgICAgICAgICAgIGVpdGhlciAicWVtdXg4NiIgb3IgInFlbXV4ODYtNjQiIGluIG9yZGVyIGZvciBhdWRpbyB0byBiZQorICAgICAgICAgICAgICAgICAgICBlbmFibGVkLgorICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHRoZSA8ZmlsZW5hbWU+c25kX2ludGVsOHgwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb3IgPGZpbGVuYW1lPnNuZF9lbnMxMzcwPC9maWxlbmFtZT4gZHJpdmVyIG11c3QgYmUKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIGluIGxpbnV4IGd1ZXN0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zbGlycDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBFbmFibGVzICJzbGlycCIgbmV0d29ya2luZywgd2hpY2ggaXMgYSBkaWZmZXJlbnQgd2F5CisgICAgICAgICAgICAgICAgICAgIG9mIG5ldHdvcmtpbmcgdGhhdCBkb2VzIG5vdCBuZWVkIHJvb3QgYWNjZXNzCisgICAgICAgICAgICAgICAgICAgIGJ1dCBhbHNvIGlzIG5vdCBhcyBlYXN5IHRvIHVzZSBvciBjb21wcmVoZW5zaXZlCisgICAgICAgICAgICAgICAgICAgIGFzIHRoZSBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmEgaWQ9J2t2bS1jb25kJz4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmt2bTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBFbmFibGVzIEtWTSB3aGVuIHJ1bm5pbmcgInFlbXV4ODYiIG9yICJxZW11eDg2LTY0IgorICAgICAgICAgICAgICAgICAgICBRRU1VIGFyY2hpdGVjdHVyZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBLVk0gdG8gd29yaywgYWxsIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBtdXN0IGJlIG1ldDoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3VyIDxyZXBsYWNlYWJsZT5NQUNISU5FPC9yZXBsYWNlYWJsZT4gbXVzdCBiZSBlaXRoZXIKK3FlbXV4ODYiIG9yICJxZW11eDg2LTY0Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3VyIGJ1aWxkIGhvc3QgaGFzIHRvIGhhdmUgdGhlIEtWTSBtb2R1bGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLCB3aGljaCBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2Rldi9rdm08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgIGJ1aWxkIGhvc3QgPGZpbGVuYW1lPi9kZXYva3ZtPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaGFzIHRvIGJlIGJvdGggd3JpdGFibGUgYW5kIHJlYWRhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a3ZtLXZob3N0PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIEVuYWJsZXMgS1ZNIHdpdGggVkhPU1Qgc3VwcG9ydCB3aGVuIHJ1bm5pbmcgInFlbXV4ODYiCisgICAgICAgICAgICAgICAgICAgIG9yICJxZW11eDg2LTY0IiBRRU1VIGFyY2hpdGVjdHVyZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBLVk0gd2l0aCBWSE9TVCB0byB3b3JrLCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgbXVzdAorICAgICAgICAgICAgICAgICAgICBiZSBtZXQ6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0na3ZtLWNvbmQnPmt2bTwvbGluaz4gb3B0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9ucyBtdXN0IGJlIG1ldC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3VyIGJ1aWxkIGhvc3QgaGFzIHRvIGhhdmUgdmlydGlvIG5ldCBkZXZpY2UsIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIDxmaWxlbmFtZT4vZGV2L3Zob3N0LW5ldDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBob3N0IDxmaWxlbmFtZT4vZGV2L3Zob3N0LW5ldDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGhhcyB0byBiZSBlaXRoZXIgcmVhZGFibGUgb3Igd3JpdGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQg4oCcc2xpcnAtZW5hYmxlZOKAnS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnB1YmxpY3ZuYzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBFbmFibGVzIGEgVk5DIHNlcnZlciBvcGVuIHRvIGFsbCBob3N0cy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKwogPHNlY3Rpb24gaWQ9J21haW50YWluaW5nLWJ1aWxkLW91dHB1dC1xdWFsaXR5Jz4KICAgICA8dGl0bGU+TWFpbnRhaW5pbmcgQnVpbGQgT3V0cHV0IFF1YWxpdHk8L3RpdGxlPgogCkBAIC0xMDk5LDE1ICsxNDczLDE1IEBACiAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERISVNUT1JZX0NPTU1JVCc+PGZpbGVuYW1lPkJVSUxESElTVE9SWV9DT01NSVQ8L2ZpbGVuYW1lPjwvbGluaz4KICAgICAgICAgICAgIHZhcmlhYmxlIHRvICIxIiBhdCB0aGUgZW5kIG9mIHlvdXIKICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvdW5kIGluIHRoZQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPjoKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPjoKICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgSU5IRVJJVCArPSAiYnVpbGRoaXN0b3J5IgogICAgICBCVUlMREhJU1RPUllfQ09NTUlUID0gIjEiCiAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICBFbmFibGluZyBidWlsZCBoaXN0b3J5IGFzIHByZXZpb3VzbHkgZGVzY3JpYmVkCi0gICAgICAgICAgICBjYXVzZXMgdGhlIGJ1aWxkIHByb2Nlc3MgdG8gY29sbGVjdCBidWlsZAotICAgICAgICAgICAgb3V0cHV0IGluZm9ybWF0aW9uIGFuZCBjb21taXQgaXQgdG8gYSBsb2NhbAotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZ2l0Jz5HaXQ8L3VsaW5rPiByZXBvc2l0b3J5LgorICAgICAgICAgICAgRW5hYmxpbmcgYnVpbGQgaGlzdG9yeSBhcyBwcmV2aW91c2x5IGRlc2NyaWJlZCBjYXVzZXMgdGhlCisgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGNvbGxlY3QgYnVpbGQgb3V0cHV0IGluZm9ybWF0aW9uIGFuZAorICAgICAgICAgICAgY29tbWl0IGl0IGFzIGEgc2luZ2xlIGNvbW1pdCB0byBhIGxvY2FsCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdnaXQnPkdpdDwvbGluaz4gcmVwb3NpdG9yeS4KICAgICAgICAgICAgIDxub3RlPgogICAgICAgICAgICAgICAgIEVuYWJsaW5nIGJ1aWxkIGhpc3RvcnkgaW5jcmVhc2VzIHlvdXIgYnVpbGQgdGltZXMgc2xpZ2h0bHksCiAgICAgICAgICAgICAgICAgcGFydGljdWxhcmx5IGZvciBpbWFnZXMsIGFuZCBpbmNyZWFzZXMgdGhlIGFtb3VudCBvZiBkaXNrCkBAIC0xMzU3LDcgKzE3MzEsNyBAQAogICAgICAgICAgICAgICAgIHlvdSBjYW4gZW5hYmxlIHdyaXRpbmcgb25seSBpbWFnZSBpbmZvcm1hdGlvbiB3aXRob3V0CiAgICAgICAgICAgICAgICAgYW55IGhpc3RvcnkgYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcgdG8geW91cgogICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvdW5kIGluIHRoZQotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz46CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+OgogICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgSU5IRVJJVCArPSAiYnVpbGRoaXN0b3J5IgogICAgICBCVUlMREhJU1RPUllfQ09NTUlUID0gIjAiCkBAIC0xNjQzLDcgKzIwMTcsNyBAQAogICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zeW5jKCk8L2ZpbGVuYW1lPiBjYWxscyBpbnRvIHRoZQogICAgICAgICAgICAgICAgIGZpbGUgc3lzdGVtIG9uIHRoZSBwcmluY2lwbGUgdGhhdCBpZiB0aGVyZSB3YXMgYSBzaWduaWZpY2FudAogICAgICAgICAgICAgICAgIGZhaWx1cmUsIHRoZQotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4KICAgICAgICAgICAgICAgICBjb250ZW50cyBjb3VsZCBlYXNpbHkgYmUgcmVidWlsdC4KICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Nkay1tYW51YWwvZmlndXJlcy9zZGstdGl0bGUucG5nIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9maWd1cmVzL3Nkay10aXRsZS5wbmcKaW5kZXggZTlkNWIzNC4uZTY5ZTAzOSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9maWd1cmVzL3Nkay10aXRsZS5wbmcKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9maWd1cmVzL3Nkay10aXRsZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstYXBwZW5kaXgtY3VzdG9taXppbmcueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstYXBwZW5kaXgtY3VzdG9taXppbmcueG1sCmluZGV4IDk2NWNjY2MuLjU4NzUyNmYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Nkay1tYW51YWwvc2RrLWFwcGVuZGl4LWN1c3RvbWl6aW5nLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL3Nkay1hcHBlbmRpeC1jdXN0b21pemluZy54bWwKQEAgLTE0OCw5ICsxNDgsNyBAQAogICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgogICAgICAgICAgICAgICAgIElmIHlvdXIgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzZXR1cCB1c2VzIGEgZGlmZmVyZW50CiAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IG90aGVyIHRoYW4KLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICBvcgotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPiwKICAgICAgICAgICAgICAgICB0aGVuIHlvdSBtdXN0IHNldAogICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1PRV9JTklUX0VOVl9TQ1JJUFQnPjxmaWxlbmFtZT5PRV9JTklUX0VOVl9TQ1JJUFQ8L2ZpbGVuYW1lPjwvdWxpbms+CiAgICAgICAgICAgICAgICAgdG8gcG9pbnQgdG8gdGhlIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCB5b3UgdXNlLgpAQCAtMjg5LDcgKzI4Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIFNESyBhbG9uZSwgY3JlYXRlIGEKICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL3Nkay1leHRyYS5jb25mPC9maWxlbmFtZT4gZWl0aGVyIGluCiAgICAgICAgICAgICAgICAgICAgICAgICB5b3VyCi0gICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CiAgICAgICAgICAgICAgICAgICAgICAgICBvciB3aXRoaW4gYW55IGxheWVyIGFuZCBwdXQgeW91cgogICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNTVEFURV9NSVJST1JTPC9maWxlbmFtZT4gc2V0dGluZyB3aXRoaW4KICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgZmlsZS4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Nkay1tYW51YWwvc2RrLWFwcGVuZGl4LW1hcnMueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstYXBwZW5kaXgtbWFycy54bWwKaW5kZXggOTk1NzA1Ny4uMmQ4MGY2NCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstYXBwZW5kaXgtbWFycy54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstYXBwZW5kaXgtbWFycy54bWwKQEAgLTE0LDggKzE0LDggQEAKICAgICAgICAgZnJvbSBzdGFydCB0byBmaW5pc2guCiAgICAgICAgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSBFY2xpcHNlIElERSBhbmQgdGhlIFlvY3RvCiAgICAgICAgIFByb2plY3QgRWNsaXBzZSBQbHVnLUluLCBzZWUgdGhlCi0gICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstZGV2ZWxvcGluZy1hcHBsaWNhdGlvbnMtdXNpbmctZWNsaXBzZSc+RGV2ZWxvcGluZyBBcHBsaWNhdGlvbnMgVXNpbmcgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz48L2xpbms+IgotICAgICAgICBzZWN0aW9uLgorICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLWVjbGlwc2UtcHJvamVjdCc+RGV2ZWxvcGluZyBBcHBsaWNhdGlvbnMgVXNpbmcgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz48L2xpbms+IgorICAgICAgICBDaGFwdGVyLgogICAgIDwvcGFyYT4KIAogICAgIDxzZWN0aW9uIGlkPSdtYXJzLXNldHRpbmctdXAtdGhlLWVjbGlwc2UtaWRlJz4KQEAgLTM5Miw3ICszOTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CdWlsZCBTeXN0ZW0gRGVyaXZlZCBUb29sY2hhaW46PC9maWxlbmFtZT48L2VtcGhhc2lzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCB0aGlzIHR5cGUgaWYgeW91IGJ1aWx0IHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xjaGFpbiBhcyBwYXJ0IG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBzZWxlY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QnVpbGQgc3lzdGVtIGRlcml2ZWQgdG9vbGNoYWluPC9maWxlbmFtZT4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IGFyZSB1c2luZyB0aGUgdG9vbGNoYWluIGJ1aWx0IGFuZApAQCAtNDE4LDcgKzQxOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluLCB0aGUgcGF0aCB5b3UgcHJvdmlkZSBmb3IgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRvb2xjaGFpbiBSb290IExvY2F0aW9uPC9maWxlbmFtZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCBpcyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gd2hpY2ggeW91IHJ1biB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgKGUuZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vaG9tZS9zY290dHJpZi9wb2t5L2J1aWxkPC9maWxlbmFtZT4pLjwvcGFyYT4KQEAgLTQzMSwxNCArNDMxLDIyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRhcmdldCBoYXJkd2FyZSByZXNpZGVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGlzIGxvY2F0aW9uIGRlcGVuZHMgb24gd2hlcmUgeW91Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGVseSBleHRyYWN0ZWQgYW5kIGluc3RhbGxlZCB0aGUgdGFyZ2V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZWx5IGV4dHJhY3RlZCBhbmQgaW5zdGFsbGVkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCBmaWxlc3lzdGVtIHdoZW4geW91IGVpdGhlciBidWlsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IG9yIGRvd25sb2FkZWQgaXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkb3dubG9hZGVkIHRoZSByb290IGZpbGVzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSB0YXJnZXQgaGFyZHdhcmUgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbHQgaXQsIHlvdSBtdXN0IGRvd25sb2FkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2F0by1zZGs8L2ZpbGVuYW1lPiBpbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBvcmRlciB0byBidWlsZCBhbnkgYy9jKysgcHJvamVjdHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHN1cHBvc2UgeW91IHByZXBhcmVkIGFuIGltYWdlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIHN0ZXBzIGluIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvVGlwc0FuZFRyaWNrcy9SdW5uaW5nRWNsaXBzZUFnYWluc3RCdWlsdEltYWdlJz53aWtpPC91bGluaz4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgc28sIHRoZSA8ZmlsZW5hbWU+TVlfUUVNVV9ST09URlM8L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBpcyBmb3VuZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB5b3Ugd291bGQgYnJvd3NlIHRvIGFuZCBzZWxlY3QgdGhhdCBkaXJlY3RvcnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+L2hvbWUvc2NvdHRyaWYvYnVpbGQvTVlfUUVNVV9ST09URlM8L2ZpbGVuYW1lPikuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgpAQCAtNDg3LDcgKzQ5NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJ1aWxkIHN5c3RlbSBkZXJpdmVkIHRvb2xjaGFpbjwvZmlsZW5hbWU+LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQga2VybmVsIHlvdSBidWlsdCB3aWxsIGJlIGxvY2F0ZWQgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC9kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KQEAgLTY5Miw3ICs3MDAsNyBAQAogICAgICAgICAgICAgPG5vdGU+CiAgICAgICAgICAgICAgICAgU2VlIHRoZQogICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNkZXYtbWFudWFsLXFlbXUnPlVzaW5nIHRoZSBRdWljayBFTVVsYXRvciAoUUVNVSk8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICBjaGFwdGVyIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbAorICAgICAgICAgICAgICAgIGNoYXB0ZXIgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsCiAgICAgICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgUUVNVS4KICAgICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KQEAgLTgwNCw3ICs4MTIsNyBAQAogICAgICAgICAgICAgICAgICAgICBieSBjbGlja2luZyBvbiAibmV3Ii48L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0IDxmaWxlbmFtZT5TU0g8L2ZpbGVuYW1lPiwgd2hpY2ggbWVhbnMKICAgICAgICAgICAgICAgICAgICAgU2VjdXJlIFNvY2tldCBTaGVsbC4KLSAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWxseSwgeW91IGNhbiBzZWxlY3QgYW4gVENGIGNvbm5lY3Rpb24gaW5zdGVhZC4KKyAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWxseSwgeW91IGNhbiBzZWxlY3QgYSBUQ0YgY29ubmVjdGlvbiBpbnN0ZWFkLgogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgIk5leHQiLgogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KQEAgLTg0OCwxMSArODU2LDMwIEBACiAgICAgICAgICAgICAgICAgICAgIGxhdW5jaC4KICAgICAgICAgICAgICAgICAgICAgRWNsaXBzZSBpcyBoZWxwZnVsIGluIHRoYXQgaXQgYXV0byBmaWxscyB5b3VyIGFwcGxpY2F0aW9uCiAgICAgICAgICAgICAgICAgICAgIG5hbWUgZm9yIHlvdSBhc3N1bWluZyB5b3UgYnJvd3NlZCB0byBhIGRpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHByb21wdGVkIHRvIHByb3ZpZGUgYSB1c2VybmFtZSBhbmQgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsbHkgc2V0IGEgcGFzc3dvcmQsIGJlIHN1cmUgeW91IHByb3ZpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICJyb290IiBhcyB0aGUgdXNlcm5hbWUgYW5kIHlvdSBsZWF2ZSB0aGUgcGFzc3dvcmQKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkIGJsYW5rLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+VGlwczwvdGl0bGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBwcm9tcHRlZCB0byBwcm92aWRlIGEgdXNlcm5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRvIG9wdGlvbmFsbHkgc2V0IGEgcGFzc3dvcmQsIGJlIHN1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IHByb3ZpZGUgInJvb3QiIGFzIHRoZSB1c2VybmFtZSBhbmQgeW91CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYXZlIHRoZSBwYXNzd29yZCBmaWVsZCBibGFuay4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBicm93c2luZyB0byBhIGRpcmVjdG9yeSBmYWlscyBvciB0aW1lcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQsIGJ1dCB5b3UgY2FuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zc2g8L2ZpbGVuYW1lPiBpbnRvIHlvdXIgUUVNVQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciB0YXJnZXQgZnJvbSB0aGUgY29tbWFuZCBsaW5lIGFuZCB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSBwcm94aWVzIHNldCB1cCwgaXQgaXMgbGlrZWx5IHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWNsaXBzZSBpcyBzZW5kaW5nIHRoZSBTU0ggdHJhZmZpYyB0byBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIGVpdGhlciB1c2UgVENGICwgb3IgY2xpY2sgb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbmZpZ3VyZSBwcm94eSBzZXR0aW5ncyIgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gZGlhbG9nIGFuZCBhZGQgdGhlIHRhcmdldCBJUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzIHRvIHRoZSAiYnlwYXNzIHByb3h5IiBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbWlnaHQgYWxzbyBuZWVkIHRvIGNoYW5nZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWN0aXZlIFByb3ZpZGVyIiBmcm9tIE5hdGl2ZSB0byBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstYXBwZW5kaXgtb2J0YWluLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Nkay1tYW51YWwvc2RrLWFwcGVuZGl4LW9idGFpbi54bWwKaW5kZXggZDBjYmY5Yy4uYWI5MDU1ZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstYXBwZW5kaXgtb2J0YWluLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL3Nkay1hcHBlbmRpeC1vYnRhaW4ueG1sCkBAIC0xOCwzNyArMTgsNzggQEAKICAgICA8L3BhcmE+CiAKICAgICA8cGFyYT4KLSAgICAgICAgWW91IGNhbiBmaW5kIFNESyBpbnN0YWxsZXJzIGhlcmU6Ci0gICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN0YW5kYXJkIFNESyBJbnN0YWxsZXJzOjwvZW1waGFzaXM+CisgICAgICAgIEZvbGxvdyB0aGVzZSBzdGVwcyB0byBsb2NhdGUgYW5kIGhhbmQtaW5zdGFsbCB0aGUgdG9vbGNoYWluOgorICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkdvIHRvIHRoZSBJbnN0YWxsZXJzIERpcmVjdG9yeTo8L2VtcGhhc2lzPgogICAgICAgICAgICAgICAgIEdvIHRvIDx1bGluayB1cmw9JyZZT0NUT19UT09MQ0hBSU5fRExfVVJMOyc+PC91bGluaz4KLSAgICAgICAgICAgICAgICBhbmQgZmluZCB0aGUgZm9sZGVyIHRoYXQgbWF0Y2hlcyB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtCi0gICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPmk2ODY8L2ZpbGVuYW1lPiBmb3IgMzItYml0IG1hY2hpbmVzIG9yCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPng4Nl82NDwvZmlsZW5hbWU+IGZvciA2NC1iaXQgbWFjaGluZXMpLjwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPkdvIGludG8gdGhhdCBmb2xkZXIgYW5kIGRvd25sb2FkIHRoZSBTREsgaW5zdGFsbGVyCi0gICAgICAgICAgICAgICAgd2hvc2UgbmFtZSBpbmNsdWRlcyB0aGUgYXBwcm9wcmlhdGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KLSAgICAgICAgICAgICAgICBUaGUgdG9vbGNoYWlucyBwcm92aWRlZCBieSB0aGUgWW9jdG8gUHJvamVjdCBhcmUgYmFzZWQgb2ZmIG9mCi0gICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPiBpbWFnZSBhbmQgY29udGFpbgotICAgICAgICAgICAgICAgIGxpYnJhcmllcyBhcHByb3ByaWF0ZSBmb3IgZGV2ZWxvcGluZyBhZ2FpbnN0IHRoYXQgaW1hZ2UuCi0gICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0gaXMgYSA2NC1iaXQgeDg2Ci0gICAgICAgICAgICAgICAgc3lzdGVtIGFuZCB5b3UgYXJlIGdvaW5nIHRvIHVzZSB5b3VyIGNyb3NzLXRvb2xjaGFpbiBmb3IgYQotICAgICAgICAgICAgICAgIDMyLWJpdCB4ODYgdGFyZ2V0LCBnbyBpbnRvIHRoZSA8ZmlsZW5hbWU+eDg2XzY0PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICBmb2xkZXIgYW5kIGRvd25sb2FkIHRoZSBmb2xsb3dpbmcgaW5zdGFsbGVyOgotICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgcG9reS1nbGliYy14ODZfNjQtY29yZS1pbWFnZS1zYXRvLWk1ODYtdG9vbGNoYWluLSZESVNUUk87LnNoCi0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FeHRlbnNpYmxlIFNESyBJbnN0YWxsZXJzOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgSW5zdGFsbGVycyBmb3IgdGhlIGV4dGVuc2libGUgU0RLIGFyZSBhbHNvIGxvY2F0ZWQgaW4KLSAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fVE9PTENIQUlOX0RMX1VSTDsnPjwvdWxpbms+LgotICAgICAgICAgICAgICAgIFRoZXNlIGluc3RhbGxlcnMgaGF2ZSB0aGUgc3RyaW5nCi0gICAgICAgICAgICAgICAgPGZpbGVuYW1lPmV4dDwvZmlsZW5hbWU+IGFzIHBhcnQgb2YgdGhlaXIgbmFtZXM6CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPk9wZW4gdGhlIEZvbGRlciBmb3IgWW91ciBEZXZlbG9wbWVudCBTeXN0ZW06PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBPcGVuIHRoZSBmb2xkZXIgdGhhdCBtYXRjaGVzIHlvdXIgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+aTY4NjwvZmlsZW5hbWU+IGZvciAzMi1iaXQgbWFjaGluZXMgb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eDg2XzY0PC9maWxlbmFtZT4gZm9yIDY0LWJpdCBtYWNoaW5lcykuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkxvY2F0ZSBhbmQgRG93bmxvYWQgdGhlIFNESyBJbnN0YWxsZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBmaW5kIGFuZCBkb3dubG9hZCB0aGUgaW5zdGFsbGVyIGFwcHJvcHJpYXRlIGZvcgorICAgICAgICAgICAgICAgIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtLCB0YXJnZXQgaGFyZHdhcmUsIGFuZCBpbWFnZSB0eXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBpbnN0YWxsZXIgZmlsZXMgKDxmaWxlbmFtZT4qLnNoPC9maWxlbmFtZT4pIGZvbGxvdworICAgICAgICAgICAgICAgIHRoaXMgbmFtaW5nIGNvbnZlbnRpb246CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwb2t5LWVnbGliYy08cmVwbGFjZWFibGU+aG9zdF9zeXN0ZW08L3JlcGxhY2VhYmxlPi1jb3JlLWltYWdlLTxyZXBsYWNlYWJsZT50eXBlPC9yZXBsYWNlYWJsZT4tPHJlcGxhY2VhYmxlPmFyY2g8L3JlcGxhY2VhYmxlPi10b29sY2hhaW4tZXh0LTxyZXBsYWNlYWJsZT5yZWxlYXNlPC9yZXBsYWNlYWJsZT4uc2gKKworICAgICBXaGVyZToKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5ob3N0X3N5c3RlbTwvcmVwbGFjZWFibGU+IGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB5b3VyIGRldmVsb3BtZW50IHN5c3RlbToKKyAgICAgICAgICAgICAgICBpNjg2IG9yIHg4Nl82NC4KKworICAgICAgICAgPHJlcGxhY2VhYmxlPnR5cGU8L3JlcGxhY2VhYmxlPiBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcgZWl0aGVyIGEgInNhdG8iIG9yICJtaW5pbWFsIgorICAgICAgICAgICAgICAgIGltYWdlLgorCisgICAgICAgICA8cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+IGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZToKKyAgICAgICAgICAgICAgICBhYXJjaDY0LCBhcm12NWUsIGNvcmUyLTY0LCBjb3JldGV4YThoZi1uZW9uLCBpNTg2LCBtaXBzMzI0MiwKKyAgICAgICAgICAgICAgICBtaXBzNjQsIG9yIHBwYzc0MDAuCisKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5yZWxlYXNlPC9yZXBsYWNlYWJsZT4gaXMgdGhlIHZlcnNpb24gb2YgWW9jdG8gUHJvamVjdC4KKworICAgICAgICAgTk9URToKKyAgICAgICAgICAgIFRoZSBzdGFuZGFyZCBTREsgaW5zdGFsbGVyIGRvZXMgbm90IGhhdmUgdGhlICItZXh0IiBzdHJpbmcgYXMKKyAgICAgICAgICAgIHBhcnQgb2YgdGhlIGZpbGVuYW1lLgorCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSB0b29sY2hhaW5zIHByb3ZpZGVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0IGFyZSBiYXNlZCBvZmYgb2YKKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2F0bzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBpbWFnZXMgYW5kIGNvbnRhaW4KKyAgICAgICAgICAgICAgICBsaWJyYXJpZXMgYXBwcm9wcmlhdGUgZm9yIGRldmVsb3BpbmcgYWdhaW5zdCB0aG9zZSBpbWFnZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIGV4YW1wbGUsIGlmIHlvdXIgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0gaXMgYQorICAgICAgICAgICAgICAgIDY0LWJpdCB4ODYgc3lzdGVtIGFuZCB5b3UgYXJlIG5lZWQgYW4gZXh0ZW5kZWQgU0RLIGZvciBhCisgICAgICAgICAgICAgICAgNjQtYml0IGNvcmUyIHRhcmdldCwgZ28gaW50byB0aGUgPGZpbGVuYW1lPng4Nl82NDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZm9sZGVyIGFuZCBkb3dubG9hZCB0aGUgZm9sbG93aW5nIGluc3RhbGxlcjoKICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgIHBva3ktZ2xpYmMteDg2XzY0LWNvcmUtaW1hZ2Utc2F0by1jb3JlMi02NC10b29sY2hhaW4tZXh0LSZESVNUUk87LnNoCiAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+UnVuIHRoZSBJbnN0YWxsZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBCZSBzdXJlIHlvdSBoYXZlIGV4ZWN1dGlvbiBwcml2aWxlZ2VzIGFuZCBydW4gdGhlIGluc3RhbGxlci4KKyAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBmcm9tIHRoZSA8ZmlsZW5hbWU+RG93bmxvYWRzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3Rvcnk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIH4vRG93bmxvYWRzL3Bva3ktZ2xpYmMteDg2XzY0LWNvcmUtaW1hZ2Utc2F0by1jb3JlMi02NC10b29sY2hhaW4tZXh0LSZESVNUUk87LnNoCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIER1cmluZyBleGVjdXRpb24gb2YgdGhlIHNjcmlwdCwgeW91IGNob29zZSB0aGUgcm9vdCBsb2NhdGlvbgorICAgICAgICAgICAgICAgIGZvciB0aGUgdG9vbGNoYWluLgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLWluc3RhbGxlZC1zdGFuZGFyZC1zZGstZGlyZWN0b3J5LXN0cnVjdHVyZSc+SW5zdGFsbGVkIFN0YW5kYXJkIFNESyBEaXJlY3RvcnkgU3RydWN0dXJlPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLWluc3RhbGxlZC1leHRlbnNpYmxlLXNkay1kaXJlY3Rvcnktc3RydWN0dXJlJz5JbnN0YWxsZWQgRXh0ZW5zaWJsZSBTREsgRGlyZWN0b3J5IFN0cnVjdHVyZTwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9vcmRlcmVkbGlzdD4KICAgICA8L3BhcmE+CiA8L3NlY3Rpb24+CiAKQEAgLTU3LDY1ICs5OCwxMzUgQEAKIAogICAgIDxwYXJhPgogICAgICAgICBBcyBhbiBhbHRlcm5hdGl2ZSB0byBsb2NhdGluZyBhbmQgZG93bmxvYWRpbmcgYSBTREsgaW5zdGFsbGVyLAotICAgICAgICB5b3UgY2FuIGJ1aWxkIHRoZSBTREsgaW5zdGFsbGVyIGFzc3VtaW5nIHlvdSBoYXZlIGZpcnN0IHNvdXJjZWQKLSAgICAgICAgdGhlIGVudmlyb25tZW50IHNldHVwIHNjcmlwdC4KLSAgICAgICAgU2VlIHRoZQotICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyNxcy1idWlsZGluZy1pbWFnZXMnPkJ1aWxkaW5nIEltYWdlczwvdWxpbms+IgotICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0IGZvciBzdGVwcyB0aGF0IHNob3cgeW91Ci0gICAgICAgIGhvdyB0byBzZXQgdXAgdGhlIFlvY3RvIFByb2plY3QgZW52aXJvbm1lbnQuCi0gICAgICAgIEluIHBhcnRpY3VsYXIsIHlvdSBuZWVkIHRvIGJlIHN1cmUgdGhlCi0gICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgdmFyaWFibGUgbWF0Y2hlcyB0aGUgYXJjaGl0ZWN0dXJlIGZvciB3aGljaCB5b3UgYXJlIGJ1aWxkaW5nIGFuZCB0aGF0Ci0gICAgICAgIHRoZQotICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU0RLTUFDSElORSc+PGZpbGVuYW1lPlNES01BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+Ci0gICAgICAgIHZhcmlhYmxlIGlzIGNvcnJlY3RseSBzZXQgaWYgeW91IGFyZSBidWlsZGluZyBhIHRvb2xjaGFpbiBkZXNpZ25lZCB0bwotICAgICAgICBydW4gb24gYW4gYXJjaGl0ZWN0dXJlIHRoYXQgZGlmZmVycyBmcm9tIHlvdXIgY3VycmVudCBkZXZlbG9wbWVudCBob3N0Ci0gICAgICAgIG1hY2hpbmUgKGkuZS4gdGhlIGJ1aWxkIG1hY2hpbmUpLgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgICBUbyBidWlsZCB0aGUgU0RLIGluc3RhbGxlciBmb3IgYSBzdGFuZGFyZCBTREsgYW5kIHBvcHVsYXRlCi0gICAgICAgIHRoZSBTREsgaW1hZ2UsIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6Ci0gICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgICAgeW91IGNhbiBidWlsZCB0aGUgU0RLIGluc3RhbGxlci4KKyAgICAgICAgRm9sbG93IHRoZXNlIHN0ZXBzOgorICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlNldCBVcCB0aGUgQnVpbGQgRW52aXJvbm1lbnQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBCZSBzdXJlIHlvdSBhcmUgc2V0IHVwIHRvIHVzZSBCaXRCYWtlIGluIGEgc2hlbGwuCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzZXR0aW5nLXVwLXRoZS1kZXZlbG9wbWVudC1ob3N0LXRvLXVzZS10aGUteW9jdG8tcHJvamVjdCc+U2V0dGluZyBVcCB0aGUgRGV2ZWxvcG1lbnQgSG9zdCB0byBVc2UgdGhlIFlvY3RvIFByb2plY3Q8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbCBmb3IKKyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZ2V0IGEgYnVpbGQgaG9zdCByZWFkeSB0aGF0IGlzIGVpdGhlciBhCisgICAgICAgICAgICAgICAgbmF0aXZlIExpbnV4IG1hY2hpbmUgb3IgYSBtYWNoaW5lIHRoYXQgdXNlcyBDUk9QUy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q2xvbmUgdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gUmVwb3NpdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGhhdmUgYSBsb2NhbCBjb3B5IG9mIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgKGkuZS4gYSBsb2NhbCA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkpLgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY2xvbmluZy10aGUtcG9reS1yZXBvc2l0b3J5Jz5DbG9uaW5nIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IFJlcG9zaXRvcnk8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBhbmQgcG9zc2libHkgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NoZWNraW5nLW91dC1ieS1icmFuY2gtaW4tcG9reSc+Q2hlY2tpbmcgT3V0IGJ5IEJyYW5jaCBpbiBQb2t5PC91bGluaz4iCisgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NoZWNrb3V0LW91dC1ieS10YWctaW4tcG9reSc+Q2hlY2tpbmcgT3V0IGJ5IFRhZyBpbiBQb2t5PC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbnMgYWxsIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbCBmb3IKKyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY2xvbmUgdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5IGFuZCBjaGVjayBvdXQgdGhlIGFwcHJvcHJpYXRlIGJyYW5jaCBmb3IgeW91ciB3b3JrLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5Jbml0aWFsaXplIHRoZSBCdWlsZCBFbnZpcm9ubWVudDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFdoaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgU291cmNlIERpcmVjdG9yeSAoaS5lLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4pLCBydW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IHRvIGRlZmluZSB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgYnVpbGQgZW52aXJvbm1lbnQgb24geW91ciBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzb3VyY2UgJk9FX0lOSVRfRklMRTsKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGUgc2NyaXB0IGNyZWF0ZXMgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICB3aGljaCBpcyA8ZmlsZW5hbWU+YnVpbGQ8L2ZpbGVuYW1lPiBpbiB0aGlzIGNhc2UKKyAgICAgICAgICAgICAgICBhbmQgaXMgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgQWZ0ZXIgdGhlIHNjcmlwdCBydW5zLCB5b3VyIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBpcyBzZXQgdG8gdGhlIDxmaWxlbmFtZT5idWlsZDwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+TWFrZSBTdXJlIFlvdSBBcmUgQnVpbGRpbmcgYW4gSW5zdGFsbGVyIGZvciB0aGUgQ29ycmVjdCBNYWNoaW5lOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2sgdG8gYmUgc3VyZSB0aGF0IHlvdXIKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgIG1hdGNoZXMgdGhlIGFyY2hpdGVjdHVyZSBmb3Igd2hpY2ggeW91IGFyZSBidWlsZGluZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+TWFrZSBTdXJlIFlvdXIgU0RLIE1hY2hpbmUgaXMgQ29ycmVjdGx5IFNldDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgYnVpbGRpbmcgYSB0b29sY2hhaW4gZGVzaWduZWQgdG8gcnVuIG9uIGFuCisgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlIHRoYXQgZGlmZmVycyBmcm9tIHlvdXIgY3VycmVudCBkZXZlbG9wbWVudCBob3N0CisgICAgICAgICAgICAgICAgbWFjaGluZSAoaS5lLiB0aGUgYnVpbGQgbWFjaGluZSksIGJlIHN1cmUgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU0RLTUFDSElORSc+PGZpbGVuYW1lPlNES01BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3J5IGlzIGNvcnJlY3RseSBzZXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkJ1aWxkIHRoZSBTREsgSW5zdGFsbGVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVG8gYnVpbGQgdGhlIFNESyBpbnN0YWxsZXIgZm9yIGEgc3RhbmRhcmQgU0RLIGFuZCBwb3B1bGF0ZQorICAgICAgICAgICAgICAgIHRoZSBTREsgaW1hZ2UsIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgZm9ybS4KKyAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIHJlcGxhY2UgPHJlcGxhY2VhYmxlPmltYWdlPC9yZXBsYWNlYWJsZT4gd2l0aAorICAgICAgICAgICAgICAgIGFuIGltYWdlIChlLmcuICJjb3JlLWltYWdlLXNhdG8iKToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgICQgYml0YmFrZSA8cmVwbGFjZWFibGU+aW1hZ2U8L3JlcGxhY2VhYmxlPiAtYyBwb3B1bGF0ZV9zZGsKLSAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICBZb3UgY2FuIGRvIHRoZSBzYW1lIGZvciB0aGUgZXh0ZW5zaWJsZSBTREsgdXNpbmcgdGhpcyBjb21tYW5kOgotICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZG8gdGhlIHNhbWUgZm9yIHRoZSBleHRlbnNpYmxlIFNESyB1c2luZyB0aGlzIGNvbW1hbmQKKyAgICAgICAgICAgICAgICBmb3JtOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgJCBiaXRiYWtlIDxyZXBsYWNlYWJsZT5pbWFnZTwvcmVwbGFjZWFibGU+IC1jIHBvcHVsYXRlX3Nka19leHQKLSAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICBUaGVzZSBjb21tYW5kcyByZXN1bHQgaW4gYSBTREsgaW5zdGFsbGVyIHRoYXQgY29udGFpbnMgdGhlIHN5c3Jvb3QKLSAgICAgICAgdGhhdCBtYXRjaGVzIHlvdXIgdGFyZ2V0IHJvb3QgZmlsZXN5c3RlbS4KLSAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZXNlIGNvbW1hbmRzIHJlc3VsdCBpbiBhIFNESyBpbnN0YWxsZXIgdGhhdCBjb250YWlucyB0aGUKKyAgICAgICAgICAgICAgICBzeXNyb290IHRoYXQgbWF0Y2hlcyB5b3VyIHRhcmdldCByb290IGZpbGVzeXN0ZW0uPC9wYXJhPgogCi0gICAgPHBhcmE+Ci0gICAgICAgIFdoZW4gdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCBjb21wbGV0ZXMsIHRoZSBTREsKLSAgICAgICAgaW5zdGFsbGVyIHdpbGwgYmUgaW4KLSAgICAgICAgPGZpbGVuYW1lPnRtcC9kZXBsb3kvc2RrPC9maWxlbmFtZT4gaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4KLSAgICAgICAgPG5vdGU+PHRpdGxlPk5vdGVzPC90aXRsZT4KLSAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIHRvb2xjaGFpbiBkb2VzIG5vdCBidWlsZCBzdGF0aWMgYmluYXJpZXMuCi0gICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgdG9vbGNoYWluIHRvIGJ1aWxkIHRoZXNlIHR5cGVzIG9mCi0gICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcywgeW91IG5lZWQgdG8gYmUgc3VyZSB5b3VyIFNESyBoYXMgdGhlCi0gICAgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlIHN0YXRpYyBkZXZlbG9wbWVudCBsaWJyYXJpZXMuCi0gICAgICAgICAgICAgICAgICAgIFVzZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRPT0xDSEFJTl9UQVJHRVRfVEFTSyc+PGZpbGVuYW1lPlRPT0xDSEFJTl9UQVJHRVRfVEFTSzwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW5zaWRlIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCi0gICAgICAgICAgICAgICAgICAgIHRvIGluc3RhbGwgdGhlIGFwcHJvcHJpYXRlIGxpYnJhcnkgcGFja2FnZXMgaW4gdGhlIFNESy4KLSAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgdXNpbmcgPGZpbGVuYW1lPmxpYmM8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZGV2ZWxvcG1lbnQgbGlicmFyaWVzOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICAgICAgICAgICAgPHBhcmE+V2hlbiB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kIGNvbXBsZXRlcywKKyAgICAgICAgICAgICAgICB0aGUgU0RLIGluc3RhbGxlciB3aWxsIGJlIGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC9kZXBsb3kvc2RrPC9maWxlbmFtZT4gaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+Tm90ZXM8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgdG9vbGNoYWluIGRvZXMgbm90IGJ1aWxkIHN0YXRpYworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmFyaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgdG9vbGNoYWluIHRvIGJ1aWxkIHRoZXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMgb2YgbGlicmFyaWVzLCB5b3UgbmVlZCB0byBiZSBzdXJlIHlvdXIgU0RLCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzIHRoZSBhcHByb3ByaWF0ZSBzdGF0aWMgZGV2ZWxvcG1lbnQgbGlicmFyaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVE9PTENIQUlOX1RBUkdFVF9UQVNLJz48ZmlsZW5hbWU+VE9PTENIQUlOX1RBUkdFVF9UQVNLPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluc2lkZSB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIHRvIGluc3RhbGwgdGhlIGFwcHJvcHJpYXRlIGxpYnJhcnkgcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgU0RLLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYmM8L2ZpbGVuYW1lPiBzdGF0aWMgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICBUT09MQ0hBSU5fVEFSR0VUX1RBU0tfYXBwZW5kID0gIiBsaWJjLXN0YXRpY2RldiIKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGJ1aWxkaW5nIHRoZSBpbnN0YWxsZXIsCi0gICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9UaXBzQW5kVHJpY2tzL1J1bm5pbmdFY2xpcHNlQWdhaW5zdEJ1aWx0SW1hZ2UnPkNvb2tib29rIGd1aWRlIHRvIE1ha2luZyBhbiBFY2xpcHNlIERlYnVnIENhcGFibGUgSW1hZ2U8L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICB3aWtpIHBhZ2UuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gYnVpbGRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVyLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9UaXBzQW5kVHJpY2tzL1J1bm5pbmdFY2xpcHNlQWdhaW5zdEJ1aWx0SW1hZ2UnPkNvb2tib29rIGd1aWRlIHRvIE1ha2luZyBhbiBFY2xpcHNlIERlYnVnIENhcGFibGUgSW1hZ2U8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpa2kgcGFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlJ1biB0aGUgSW5zdGFsbGVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgWW91IGNhbiBub3cgcnVuIHRoZSBTREsgaW5zdGFsbGVyIGZyb20KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL2RlcGxveS9zZGs8L2ZpbGVuYW1lPiBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L3Bva3kvYnVpbGQvdG1wL2RlcGxveS9zZGsKKyAgICAgJCAuL3Bva3ktZ2xpYmMteDg2XzY0LWNvcmUtaW1hZ2Utc2F0by1jb3JlMi02NC10b29sY2hhaW4tZXh0LSZESVNUUk87LnNoCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIER1cmluZyBleGVjdXRpb24gb2YgdGhlIHNjcmlwdCwgeW91IGNob29zZSB0aGUgcm9vdCBsb2NhdGlvbgorICAgICAgICAgICAgICAgIGZvciB0aGUgdG9vbGNoYWluLgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLWluc3RhbGxlZC1zdGFuZGFyZC1zZGstZGlyZWN0b3J5LXN0cnVjdHVyZSc+SW5zdGFsbGVkIFN0YW5kYXJkIFNESyBEaXJlY3RvcnkgU3RydWN0dXJlPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLWluc3RhbGxlZC1leHRlbnNpYmxlLXNkay1kaXJlY3Rvcnktc3RydWN0dXJlJz5JbnN0YWxsZWQgRXh0ZW5zaWJsZSBTREsgRGlyZWN0b3J5IFN0cnVjdHVyZTwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9vcmRlcmVkbGlzdD4KICAgICA8L3BhcmE+CiA8L3NlY3Rpb24+CiAKQEAgLTEyNiw1NSArMjM3LDEwNiBAQAogICAgICAgICBBZnRlciBpbnN0YWxsaW5nIHRoZSB0b29sY2hhaW4sIGZvciBzb21lIHVzZSBjYXNlcyB5b3UKICAgICAgICAgbWlnaHQgbmVlZCB0byBzZXBhcmF0ZWx5IGV4dHJhY3QgYSByb290IGZpbGVzeXN0ZW06CiAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+WW91IHdhbnQgdG8gYm9vdCB0aGUgaW1hZ2UgdXNpbmcgTkZTLgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSB3YW50IHRvIGJvb3QgdGhlIGltYWdlIHVzaW5nIE5GUy4KICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Zb3Ugd2FudCB0byB1c2UgdGhlIHJvb3QgZmlsZXN5c3RlbSBhcyB0aGUKKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBZb3Ugd2FudCB0byB1c2UgdGhlIHJvb3QgZmlsZXN5c3RlbSBhcyB0aGUKICAgICAgICAgICAgICAgICB0YXJnZXQgc3lzcm9vdC4KICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIEVjbGlwc2UgSURFIGVudmlyb25tZW50IHdpdGggdGhlIEVjbGlwc2UKICAgICAgICAgICAgICAgICBZb2N0byBQbHVnLWluIGluc3RhbGxlZCBhbGxvd3MgeW91IHRvIHVzZSBRRU1VIHRvIGJvb3QKLSAgICAgICAgICAgICAgICB1bmRlciBORlMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+WW91IHdhbnQgdG8gZGV2ZWxvcCB5b3VyIHRhcmdldCBhcHBsaWNhdGlvbgorICAgICAgICAgICAgICAgIHVuZGVyIE5GUy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBZb3Ugd2FudCB0byBkZXZlbG9wIHlvdXIgdGFyZ2V0IGFwcGxpY2F0aW9uCiAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIHJvb3QgZmlsZXN5c3RlbSBhcyB0aGUgdGFyZ2V0IHN5c3Jvb3QuCiAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgIDwvcGFyYT4KIAogICAgIDxwYXJhPgotICAgICAgICBUbyBleHRyYWN0IHRoZSByb290IGZpbGVzeXN0ZW0sIGZpcnN0IDxmaWxlbmFtZT5zb3VyY2U8L2ZpbGVuYW1lPgotICAgICAgICB0aGUgY3Jvc3MtZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IHRvIGVzdGFibGlzaAotICAgICAgICBuZWNlc3NhcnkgZW52aXJvbm1lbnQgdmFyaWFibGVzLgotICAgICAgICBJZiB5b3UgYnVpbHQgdGhlIHRvb2xjaGFpbiBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LCB5b3Ugd2lsbCBmaW5kCi0gICAgICAgIHRoZSB0b29sY2hhaW4gZW52aXJvbm1lbnQgc2NyaXB0IGluIHRoZQotICAgICAgICA8ZmlsZW5hbWU+dG1wPC9maWxlbmFtZT4gZGlyZWN0b3J5LgotICAgICAgICBJZiB5b3UgaW5zdGFsbGVkIHRoZSB0b29sY2hhaW4gYnkgaGFuZCwgdGhlIGVudmlyb25tZW50IHNldHVwCi0gICAgICAgIHNjcmlwdCBpcyBsb2NhdGVkIGluIDxmaWxlbmFtZT4vb3B0L3Bva3kvJkRJU1RSTzs8L2ZpbGVuYW1lPi4KLSAgICA8L3BhcmE+CisgICAgICAgIEZvbGxvdyB0aGVzZSBzdGVwcyB0byBleHRyYWN0IHRoZSByb290IGZpbGVzeXN0ZW06CisgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+TG9jYXRlIGFuZCBEb3dubG9hZCB0aGUgVGFyYmFsbCBmb3IgdGhlIFByZS1CdWlsdAorICAgICAgICAgICAgICAgIFJvb3QgRmlsZXN5c3RlbSBJbWFnZSBGaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gZmluZCBhbmQgZG93bmxvYWQgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbWFnZQorICAgICAgICAgICAgICAgIGZpbGUgdGhhdCBpcyBhcHByb3ByaWF0ZSBmb3IgeW91ciB0YXJnZXQgc3lzdGVtLgorICAgICAgICAgICAgICAgIFRoZXNlIGZpbGVzIGFyZSBrZXB0IGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ETF9VUkw7L3JlbGVhc2VzL3lvY3RvL3lvY3RvLSZESVNUUk87L21hY2hpbmVzLyc+SW5kZXggb2YgUmVsZWFzZXM8L3VsaW5rPgorICAgICAgICAgICAgICAgIGluIHRoZSAibWFjaGluZXMiIGRpcmVjdG9yeS48L3BhcmE+CiAKLSAgICA8cGFyYT4KLSAgICAgICAgQWZ0ZXIgc291cmNpbmcgdGhlIGVudmlyb25tZW50IHNjcmlwdCwgdXNlIHRoZQotICAgICAgICA8ZmlsZW5hbWU+cnVucWVtdS1leHRyYWN0LXNkazwvZmlsZW5hbWU+IGNvbW1hbmQgYW5kIHByb3ZpZGUgdGhlCi0gICAgICAgIGZpbGVzeXN0ZW0gaW1hZ2UuCi0gICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPlRoZSAibWFjaGluZXMiIGRpcmVjdG9yeSBjb250YWlucyB0YXJiYWxscworICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Ki50YXIuYnoyPC9maWxlbmFtZT4pIGZvciBzdXBwb3J0ZWQgbWFjaGluZXMuCisgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBhbHNvIGNvbnRhaW5zIGZsYXR0ZW5lZCByb290IGZpbGVzeXN0ZW0KKyAgICAgICAgICAgICAgICBpbWFnZSBmaWxlcyAoPGZpbGVuYW1lPiouZXh0NDwvZmlsZW5hbWU+KSwgd2hpY2ggeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICB3aXRoIFFFTVUgZGlyZWN0bHkuPC9wYXJhPgogCi0gICAgPHBhcmE+Ci0gICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgotICAgICAgICBUaGUgc2Vjb25kIGNvbW1hbmQgc2V0cyB1cCB0aGUgZW52aXJvbm1lbnQuCi0gICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIHNldHVwIHNjcmlwdCBpcyBsb2NhdGVkIGluIHRoZQotICAgICAgICA8ZmlsZW5hbWU+L29wdC9wb2t5LyZESVNUUk87PC9maWxlbmFtZT4gZGlyZWN0b3J5LgotICAgICAgICBUaGUgdGhpcmQgY29tbWFuZCBleHRyYWN0cyB0aGUgcm9vdCBmaWxlc3lzdGVtIGZyb20gYSBwcmV2aW91c2x5Ci0gICAgICAgIGJ1aWx0IGZpbGVzeXN0ZW0gdGhhdCBpcyBsb2NhdGVkIGluIHRoZQotICAgICAgICA8ZmlsZW5hbWU+fi9Eb3dubG9hZHM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCi0gICAgICAgIEZ1cnRoZXJtb3JlLCB0aGlzIGNvbW1hbmQgZXh0cmFjdHMgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbnRvIHRoZQotICAgICAgICA8ZmlsZW5hbWU+cWVtdXg4Ni1zYXRvPC9maWxlbmFtZT4gZGlyZWN0b3J5OgotICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgY2QgfgotICAgICAkIHNvdXJjZSAvb3B0L3Bva3kvJkRJU1RSTzsvZW52aXJvbm1lbnQtc2V0dXAtaTU4Ni1wb2t5LWxpbnV4Ci0gICAgICQgcnVucWVtdS1leHRyYWN0LXNkayBcCi0gICAgICAgIH4vRG93bmxvYWRzL2NvcmUtaW1hZ2Utc2F0by1zZGstcWVtdXg4Ni0yMDExMDkxNDExODMxLnJvb3Rmcy50YXIuYnoyIFwKLSAgICAgICAgJEhPTUUvcWVtdXg4Ni1zYXRvCi0gICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgWW91IGNvdWxkIG5vdyBwb2ludCB0byB0aGUgdGFyZ2V0IHN5c3Jvb3QgYXQKLSAgICAgICAgPGZpbGVuYW1lPnFlbXV4ODYtc2F0bzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBwcmUtYnVpbHQgcm9vdCBmaWxlc3lzdGVtIGltYWdlIGZpbGVzCisgICAgICAgICAgICAgICAgZm9sbG93IHRoZXNlIG5hbWluZyBjb252ZW50aW9uczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGNvcmUtaW1hZ2UtPHJlcGxhY2VhYmxlPnByb2ZpbGU8L3JlcGxhY2VhYmxlPi08cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+LnRhci5iejIKKworICAgICBXaGVyZToKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5wcm9maWxlPC9yZXBsYWNlYWJsZT4gaXMgdGhlIGZpbGVzeXN0ZW0gaW1hZ2UncyBwcm9maWxlOgorICAgICAgICAgICAgICAgICAgIGxzYiwgbHNiLWRldiwgbHNiLXNkaywgbHNiLXF0MywgbWluaW1hbCwgbWluaW1hbC1kZXYsIHNhdG8sCisgICAgICAgICAgICAgICAgICAgc2F0by1kZXYsIHNhdG8tc2RrLCBtaW5pbWFsLWluaXRyYW1mcywgb3Igc2RrLXB0ZXN0LiBGb3IKKyAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBvbiB0aGVzZSB0eXBlcyBvZiBpbWFnZSBwcm9maWxlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICJJbWFnZXMiIGNoYXB0ZXIgaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKworICAgICAgICAgPHJlcGxhY2VhYmxlPmFyY2g8L3JlcGxhY2VhYmxlPiBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmU6CisgICAgICAgICAgICAgICAgYmVhZ2xlYm9uZSwgZWRnZXJvdXRlciwgZ2VuZXJpY3g4NiwgZ2VuZXJpY3g4Ni02NCwgbXBjODMxNWUtcmRiLAorICAgICAgICAgICAgICAgIHFlbXVhcm0sIHFlbXVhcm02NCwgcWVtdW1pcHMsIHFlbXVtaXBzNjQsIHFlbXVwcGMsIHFlbXV4ODYsIG9yCisgICAgICAgICAgICAgICAgcWVtdXg4Ni02NC4KKworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgcm9vdCBmaWxlc3lzdGVtcyBwcm92aWRlZCBieSB0aGUgWW9jdG8gUHJvamVjdCBhcmUgYmFzZWQKKyAgICAgICAgICAgICAgICBvZmYgb2YgdGhlIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gaW1hZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPkZvciBleGFtcGxlLCBpZiB5b3VyIHRhcmdldCBoYXJkd2FyZSBzeXN0ZW0gaXMgYQorICAgICAgICAgICAgICAgIEJlYWdsZUJvbmUgYm9hcmQgYW5kIHlvdXIgaW1hZ2UgaXMgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBpbWFnZSwgeW91IG5lZWQKKyAgICAgICAgICAgICAgICB0byBkb3dubG9hZCB0aGUgZm9sbG93aW5nIHJvb3QgZmlsZXN5c3RlbSBpbWFnZSBmaWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgY29yZS1pbWFnZS1taW5pbWFsLWJlYWdsZWJvbmUudGFyLmJ6MgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+SW5pdGlhbGl6ZSB0aGUgQ3Jvc3MtRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBZb3UgbXVzdCA8ZmlsZW5hbWU+c291cmNlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB0aGUgY3Jvc3MtZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IHRvIGVzdGFibGlzaAorICAgICAgICAgICAgICAgIG5lY2Vzc2FyeSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+VGhpcyBzY3JpcHQgaXMgbG9jYXRlZCBpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBpbgorICAgICAgICAgICAgICAgIHdoaWNoIHlvdSBpbnN0YWxsZWQgdGhlIHRvb2xjaGFpbiAoZS5nLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5X3NkazwvZmlsZW5hbWU+KS48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5Gb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBmb3IgdGhlIENvcmUyIDY0LWJpdAorICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc291cmNlIH4vcG9reV9zZGsvZW52aXJvbm1lbnQtc2V0dXAtY29yZTItNjQtcG9reS1saW51eAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+RXh0cmFjdCB0aGUgUm9vdCBGaWxlc3lzdGVtOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+cnVucWVtdS1leHRyYWN0LXNkazwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICBhbmQgcHJvdmlkZSB0aGUgcm9vdCBmaWxlc3lzdGVtIGltYWdlLjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPkZvbGxvd2luZyBpcyBhbiBleGFtcGxlIGNvbW1hbmQgdGhhdCBleHRyYWN0cyB0aGUgcm9vdAorICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0gZnJvbSBhIHByZXZpb3VzbHkgYnVpbHQgcm9vdCBmaWxlc3lzdGVtIGltYWdlIHRoYXQKKyAgICAgICAgICAgICAgICB3YXMgZG93bmxvYWRlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2luZGV4LWRvd25sb2Fkcyc+SW5kZXggb2YgUmVsZWFzZXM8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgZXh0cmFjdHMgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbnRvIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlMi02NC1zYXRvPC9maWxlbmFtZT4gZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBydW5xZW11LWV4dHJhY3Qtc2RrIH4vRG93bmxvYWRzL2NvcmUtaW1hZ2Utc2F0by1jb3JlMi02NC50YXIuYnoyIH4vY29yZTItNjQtc2F0bworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBZb3UgY291bGQgbm93IHBvaW50IHRvIHRoZSB0YXJnZXQgc3lzcm9vdCBhdAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlMi02NC1zYXRvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvb3JkZXJlZGxpc3Q+CiAgICAgPC9wYXJhPgogPC9zZWN0aW9uPgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL3Nkay1lY2xpcHNlLXByb2plY3QueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstZWNsaXBzZS1wcm9qZWN0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGI4MzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstZWNsaXBzZS1wcm9qZWN0LnhtbApAQCAtMCwwICsxLDEyMTEgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdzZGstZWNsaXBzZS1wcm9qZWN0Jz4KKworICAgIDx0aXRsZT5EZXZlbG9waW5nIEFwcGxpY2F0aW9ucyBVc2luZyA8dHJhZGVtYXJrIGNsYXNzPSd0cmFkZSc+RWNsaXBzZTwvdHJhZGVtYXJrPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSWYgeW91IGFyZSBmYW1pbGlhciB3aXRoIHRoZSBwb3B1bGFyIEVjbGlwc2UgSURFLCB5b3UgY2FuIHVzZSBhbgorICAgICAgICBFY2xpcHNlIFlvY3RvIFBsdWctaW4gdG8gYWxsb3cgeW91IHRvIGRldmVsb3AsIGRlcGxveSwgYW5kIHRlc3QgeW91cgorICAgICAgICBhcHBsaWNhdGlvbiBhbGwgZnJvbSB3aXRoaW4gRWNsaXBzZS4KKyAgICAgICAgVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyBnZW5lcmFsIHdvcmtmbG93IHVzaW5nIHRoZSBTREsgYW5kIEVjbGlwc2UKKyAgICAgICAgYW5kIGhvdyB0byBjb25maWd1cmUgYW5kIHNldCB1cCBFY2xpcHNlLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSd3b3JrZmxvdy11c2luZy1lY2xpcHNlJz4KKyAgICAgICAgPHRpdGxlPldvcmtmbG93IFVzaW5nIDx0cmFkZW1hcmsgY2xhc3M9J3RyYWRlJz5FY2xpcHNlPC90cmFkZW1hcms+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIGFuZCBzdXBwb3J0aW5nIGxpc3Qgc3VtbWFyaXplIHRoZQorICAgICAgICAgICAgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgZ2VuZXJhbCB3b3JrZmxvdyB0aGF0IGVtcGxveXMgYm90aCB0aGUKKyAgICAgICAgICAgIFNESyBFY2xpcHNlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvc2RrLWVjbGlwc2UtZGV2LWZsb3cucG5nIgorICAgICAgICAgICAgICAgIHdpZHRoPSI3aW4iIGRlcHRoPSI3aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlPSIxMDAiIC8+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5QcmVwYXJlIHRoZSBob3N0IHN5c3RlbSBmb3IgdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgICAgIFByb2plY3Q8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgU2VlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNkZXRhaWxlZC1zdXBwb3J0ZWQtZGlzdHJvcyc+U3VwcG9ydGVkIExpbnV4IERpc3RyaWJ1dGlvbnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZXF1aXJlZC1wYWNrYWdlcy1mb3ItdGhlLWhvc3QtZGV2ZWxvcG1lbnQtc3lzdGVtJz5SZXF1aXJlZCBQYWNrYWdlcyBmb3IgdGhlIEhvc3QgRGV2ZWxvcG1lbnQgU3lzdGVtPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zIGJvdGggaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBmb3IKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCBiZSBzdXJlIHlvdXIgaG9zdCBzeXN0ZW0gaGFzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eHRlcm08L2ZpbGVuYW1lPiBwYWNrYWdlIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+U2VjdXJlIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2U8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgaGF2ZSBhIHRhcmdldCBrZXJuZWwgaW1hZ2UgdGhhdCBoYXMgYmVlbiBidWlsdAorICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPkRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBZb2N0byBQcm9qZWN0IGhhcyBhCisgICAgICAgICAgICAgICAgICAgIHByZS1idWlsdCBpbWFnZSB0aGF0IG1hdGNoZXMgeW91ciB0YXJnZXQgYXJjaGl0ZWN0dXJlCisgICAgICAgICAgICAgICAgICAgIGFuZCB3aGVyZSB5b3UgYXJlIGdvaW5nIHRvIHJ1biB0aGUgaW1hZ2Ugd2hpbGUgeW91CisgICAgICAgICAgICAgICAgICAgIGRldmVsb3AgeW91ciBhcHBsaWNhdGlvbiAoUUVNVSBvciByZWFsIGhhcmR3YXJlKSwgdGhlCisgICAgICAgICAgICAgICAgICAgIGFyZWEgZnJvbSB3aGljaCB5b3UgZ2V0IHRoZSBpbWFnZSBkaWZmZXJzLgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvd25sb2FkIHRoZSBpbWFnZSBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX01BQ0hJTkVTX0RMX1VSTDsnPjxmaWxlbmFtZT5tYWNoaW5lczwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB5b3VyIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgc3VwcG9ydGVkIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBhcmUgZ29pbmcgdG8gZGV2ZWxvcCBhbmQgdGVzdCB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24gb24gYWN0dWFsIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvd25sb2FkIHRoZSBpbWFnZSBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1FFTVVfRExfVVJMOyc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1hY2hpbmVzL3FlbXU8L2ZpbGVuYW1lPjwvdWxpbms+IGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91ciB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIHN1cHBvcnRlZCBhbmQgeW91CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGdvaW5nIHRvIGRldmVsb3AgYW5kIHRlc3QgeW91ciBhcHBsaWNhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSBRRU1VIGVtdWxhdG9yLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIHlvdXIgaW1hZ2UgaWYgeW91IGNhbm5vdCBmaW5kIGEgcHJlLWJ1aWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgdGhhdCBtYXRjaGVzIHlvdXIgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3VyIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgc2ltaWxhciB0byBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkIGFyY2hpdGVjdHVyZSwgeW91IGNhbiBtb2RpZnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsIGltYWdlIGJlZm9yZSB5b3UgYnVpbGQgaXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsjdXNpbmctZGV2dG9vbC10by1wYXRjaC10aGUta2VybmVsJz5Vc2luZyA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IHRvIFBhdGNoIHRoZSBLZXJuZWw8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldmVsb3BtZW50IE1hbnVhbCBmb3IgYW4gZXhhbXBsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+PGVtcGhhc2lzPkluc3RhbGwgdGhlIFNESzwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBUaGUgU0RLIHByb3ZpZGVzIGEgdGFyZ2V0LXNwZWNpZmljIGNyb3NzLWRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgIHRvb2xjaGFpbiwgdGhlIHJvb3QgZmlsZXN5c3RlbSwgdGhlIFFFTVUgZW11bGF0b3IsIGFuZAorICAgICAgICAgICAgICAgICAgICBvdGhlciB0b29scyB0aGF0IGNhbiBoZWxwIHlvdSBkZXZlbG9wIHlvdXIgYXBwbGljYXRpb24uCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaW5zdGFsbCB0aGUgU0RLLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstaW5zdGFsbGluZy10aGUtc2RrJz5JbnN0YWxsaW5nIHRoZSBTREs8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5TZWN1cmUgdGhlIHRhcmdldCByb290IGZpbGVzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBDcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW48L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gZmluZCBhbmQgZG93bmxvYWQgdGhlIGFwcHJvcHJpYXRlIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSBhbmQgdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbi48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjYW4gZmluZCB0aGUgdGFyYmFsbHMgZm9yIHRoZSByb290IGZpbGVzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHNhbWUgYXJlYSB1c2VkIGZvciB0aGUga2VybmVsIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgaW1hZ2UgeW91IGFyZSBydW5uaW5nLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgcm9vdCBmaWxlc3lzdGVtIHlvdSBuZWVkIGRpZmZlcnMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgYXJlIGRldmVsb3BpbmcgYW4gYXBwbGljYXRpb24gdGhhdAorICAgICAgICAgICAgICAgICAgICBydW5zIG9uIGFuIGltYWdlIHRoYXQgc3VwcG9ydHMgU2F0bywgeW91IG5lZWQgdG8gZ2V0IGEKKyAgICAgICAgICAgICAgICAgICAgcm9vdCBmaWxlc3lzdGVtIHRoYXQgc3VwcG9ydHMgU2F0by48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjYW4gZmluZCB0aGUgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWlucyBhdAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fVE9PTENIQUlOX0RMX1VSTDsnPjxmaWxlbmFtZT50b29sY2hhaW5zPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBnZXQgdGhlIGNvcnJlY3QgdG9vbGNoYWluIGZvciB5b3VyCisgICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IGhvc3QgYW5kIHlvdXIgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nc2RrLWxvY2F0aW5nLXByZS1idWlsdC1zZGstaW5zdGFsbGVycyc+TG9jYXRpbmcgUHJlLUJ1aWx0IFNESyBJbnN0YWxsZXJzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24gYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLWluc3RhbGxpbmctdGhlLXNkayc+SW5zdGFsbGluZyB0aGUgU0RLPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5zdGFsbGF0aW9uIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFzIGFuIGFsdGVybmF0aXZlIHRvIGRvd25sb2FkaW5nIGFuIFNESywgeW91IGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgdGhlIFNESyBpbnN0YWxsZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gYnVpbGRpbmcgdGhlIGluc3RhbGxlciwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1idWlsZGluZy1hbi1zZGstaW5zdGFsbGVyJz5CdWlsZGluZyBhbiBTREsgSW5zdGFsbGVyPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBBbm90aGVyIGhlbHBmdWwgcmVzb3VyY2UgZm9yIGJ1aWxkaW5nIGFuIGluc3RhbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL1RpcHNBbmRUcmlja3MvUnVubmluZ0VjbGlwc2VBZ2FpbnN0QnVpbHRJbWFnZSc+Q29va2Jvb2sgZ3VpZGUgdG8gTWFraW5nIGFuIEVjbGlwc2UgRGVidWcgQ2FwYWJsZSBJbWFnZTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB3aWtpIHBhZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q3JlYXRlIGFuZCBidWlsZCB5b3VyIGFwcGxpY2F0aW9uPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQsIHlvdSBuZWVkIHRvIGhhdmUgc291cmNlIGZpbGVzIGZvciB5b3VyCisgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIHRoZSBmaWxlcywgeW91IGNhbiB1c2UgdGhlIEVjbGlwc2UgSURFCisgICAgICAgICAgICAgICAgICAgIHRvIGltcG9ydCB0aGVtIGFuZCBidWlsZCB0aGUgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBub3QgdXNpbmcgRWNsaXBzZSwgeW91IG5lZWQgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICBjcm9zcy1kZXZlbG9wbWVudCB0b29scyB5b3UgaGF2ZSBpbnN0YWxsZWQgdG8gY3JlYXRlCisgICAgICAgICAgICAgICAgICAgIHRoZSBpbWFnZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5EZXBsb3kgdGhlIGltYWdlIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRoZSBFY2xpcHNlIElERSwgeW91IGNhbiBkZXBsb3kgeW91ciBpbWFnZSB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUgb3IgdG8gUUVNVSB0aHJvdWdoIHRoZSBwcm9qZWN0J3MgcHJlZmVyZW5jZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyB1c2UgRWNsaXBzZSB0byBsb2FkIGFuZCB0ZXN0IHlvdXIgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgdW5kZXIgUUVNVS4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZGV2LW1hbnVhbC1xZW11Jz5Vc2luZyB0aGUgUXVpY2sgRU1VbGF0b3IgKFFFTVUpPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIGNoYXB0ZXIgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsCisgICAgICAgICAgICAgICAgICAgIGZvciBpbmZvcm1hdGlvbiBvbiB1c2luZyBRRU1VLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5UZXN0IGFuZCBkZWJ1ZyB0aGUgYXBwbGljYXRpb248L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgT25jZSB5b3VyIGFwcGxpY2F0aW9uIGlzIGRlcGxveWVkLCB5b3UgbmVlZCB0byB0ZXN0IGl0LgorICAgICAgICAgICAgICAgICAgICBXaXRoaW4gdGhlIEVjbGlwc2UgSURFLCB5b3UgY2FuIHVzZSB0aGUgZGVidWdnaW5nCisgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IGFsb25nIHdpdGggc3VwcG9ydGVkIHBlcmZvcm1hbmNlIGVuaGFuY2luZworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xpbnV4dG9vbHMvJz5MaW51eCBUb29sczwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYWR0LWVjbGlwc2UnPgorICAgICAgICA8dGl0bGU+V29ya2luZyBXaXRoaW4gRWNsaXBzZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgRWNsaXBzZSBJREUgaXMgYSBwb3B1bGFyIGRldmVsb3BtZW50IGVudmlyb25tZW50IGFuZCBpdAorICAgICAgICAgICAgZnVsbHkgc3VwcG9ydHMgZGV2ZWxvcG1lbnQgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4geW91IGluc3RhbGwgYW5kIGNvbmZpZ3VyZSB0aGUgRWNsaXBzZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICBQbHVnLWluIGludG8gdGhlIEVjbGlwc2UgSURFLCB5b3UgbWF4aW1pemUgeW91ciBZb2N0bworICAgICAgICAgICAgUHJvamVjdCBleHBlcmllbmNlLgorICAgICAgICAgICAgSW5zdGFsbGluZyBhbmQgY29uZmlndXJpbmcgdGhlIFBsdWctaW4gcmVzdWx0cyBpbiBhbgorICAgICAgICAgICAgZW52aXJvbm1lbnQgdGhhdCBoYXMgZXh0ZW5zaW9ucyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gbGV0CisgICAgICAgICAgICB5b3UgbW9yZSBlYXNpbHkgZGV2ZWxvcCBzb2Z0d2FyZS4KKyAgICAgICAgICAgIFRoZXNlIGV4dGVuc2lvbnMgYWxsb3cgZm9yIGNyb3NzLWNvbXBpbGF0aW9uLCBkZXBsb3ltZW50LCBhbmQKKyAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiB5b3VyIG91dHB1dCBpbnRvIGEgUUVNVSBlbXVsYXRpb24gc2Vzc2lvbiBhcyB3ZWxsCisgICAgICAgICAgICBhcyBhY3R1YWwgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgWW91IGNhbiBhbHNvIHBlcmZvcm0gY3Jvc3MtZGVidWdnaW5nIGFuZCBwcm9maWxpbmcuCisgICAgICAgICAgICBUaGUgZW52aXJvbm1lbnQgYWxzbyBzdXBwb3J0cyBwZXJmb3JtYW5jZSBlbmhhbmNpbmcKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGludXh0b29scy8nPnRvb2xzPC91bGluaz4KKyAgICAgICAgICAgIHRoYXQgYWxsb3cgeW91IHRvIHBlcmZvcm0gcmVtb3RlIHByb2ZpbGluZywgdHJhY2luZywKKyAgICAgICAgICAgIGNvbGxlY3Rpb24gb2YgcG93ZXIgZGF0YSwgY29sbGVjdGlvbiBvZiBsYXRlbmN5IGRhdGEsIGFuZAorICAgICAgICAgICAgY29sbGVjdGlvbiBvZiBwZXJmb3JtYW5jZSBkYXRhLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhpcyByZWxlYXNlIG9mIHRoZSBZb2N0byBQcm9qZWN0IHN1cHBvcnRzIGJvdGggdGhlIE5lb24KKyAgICAgICAgICAgICAgICBhbmQgTWFycyB2ZXJzaW9ucyBvZiB0aGUgRWNsaXBzZSBJREUuCisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlIE5lb24KKyAgICAgICAgICAgICAgICByZWxlYXNlIHdpdGggdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlIE1hcnMgdmVyc2lvbiBvZiBFY2xpcHNlCisgICAgICAgICAgICAgICAgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCwgc2VlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1hcHBlbmRpeC1sYXRlc3QteXAtZWNsaXBzZS1wbHVnLWluJz5BcHBlbmRpeCBDPC9saW5rPi4KKyAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmVvbi1zZXR0aW5nLXVwLXRoZS1lY2xpcHNlLWlkZSc+CisgICAgICAgICAgICA8dGl0bGU+U2V0dGluZyBVcCB0aGUgTmVvbiBWZXJzaW9uIG9mIHRoZSBFY2xpcHNlIElERTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGRldmVsb3Agd2l0aGluIHRoZSBFY2xpcHNlIElERSwgeW91IG5lZWQgdG8gZG8gdGhlCisgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbCB0aGUgTmVvbiB2ZXJzaW9uIG9mIHRoZSBFY2xpcHNlIElERS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmUgdGhlIEVjbGlwc2UgSURFLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGwgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmUgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIERvIG5vdCBpbnN0YWxsIEVjbGlwc2UgZnJvbSB5b3VyIGRpc3RyaWJ1dGlvbidzIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBpbnN0YWxsIEVjbGlwc2UgZnJvbSB0aGUgb2ZmaWNpYWwgRWNsaXBzZQorICAgICAgICAgICAgICAgICAgICBkb3dubG9hZCBzaXRlIGFzIGRpcmVjdGVkIGluIHRoZSBuZXh0IHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbmVvbi1pbnN0YWxsaW5nLWVjbGlwc2UtaWRlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+SW5zdGFsbGluZyB0aGUgTmVvbiBFY2xpcHNlIElERTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93IHRoZXNlIHN0ZXBzIHRvIGxvY2F0ZSwgaW5zdGFsbCwgYW5kIGNvbmZpZ3VyZQorICAgICAgICAgICAgICAgICAgICBOZW9uIEVjbGlwc2U6CisgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+TG9jYXRlIHRoZSBOZW9uIERvd25sb2FkOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlbiBhIGJyb3dzZXIgYW5kIGdvIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5lY2xpcHNlLm9yZy9uZW9uLyc+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9uZW9uLzwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5Eb3dubG9hZCB0aGUgVGFyYmFsbDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrIHRocm91Z2ggdGhlICJEb3dubG9hZCIgYnV0dG9ucyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkIHRoZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5VbnBhY2sgdGhlIFRhcmJhbGw6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlIHRvIGEgY2xlYW4gZGlyZWN0b3J5IGFuZCB1bnBhY2sgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyYmFsbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4KKyAgICAgJCB0YXIgLXh6dmYgfi9Eb3dubG9hZHMvZWNsaXBzZS1pbnN0LWxpbnV4NjQudGFyLmd6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV2ZXJ5dGhpbmcgdW5wYWNrcyBpbnRvIGEgZm9sZGVyIG5hbWVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVjbGlwc2UtaW5zdGFsbGVyIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+TGF1bmNoIHRoZSBJbnN0YWxsZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBjb21tYW5kcyB0byBsYXVuY2ggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L2VjbGlwc2UtaW5zdGFsbGVyCisgICAgICQgLi9lY2xpcHNlLWluc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlNlbGVjdCBZb3VyIElERTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyb20gdGhlIGxpc3QsIHNlbGVjdCB0aGUgIkVjbGlwc2UgSURFIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMvQysrIERldmVsb3BlcnMiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5JbnN0YWxsIHRoZSBTb2Z0d2FyZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjY2VwdCB0aGUgZGVmYXVsdCAiY3BwLW5lb24iIGRpcmVjdG9yeSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljayAiSW5zdGFsbCIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXB0IGFueSBsaWNlbnNlIGFncmVlbWVudHMgYW5kIGFwcHJvdmUgYW55CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGlmaWNhdGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5MYXVuY2ggTmVvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrIHRoZSAiTGF1bmNoIiBidXR0b24gYW5kIGFjY2VwdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ICJ3b3Jrc3BhY2UiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J25lb24tY29uZmlndXJpbmctdGhlLW1hcnMtZWNsaXBzZS1pZGUnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmluZyB0aGUgTmVvbiBFY2xpcHNlIElERTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93IHRoZXNlIHN0ZXBzIHRvIGNvbmZpZ3VyZSB0aGUgTmVvbiBFY2xpcHNlIElERS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gaG93IHlvdSBpbnN0YWxsZWQgRWNsaXBzZSBhbmQgd2hhdAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IGhhdmUgYWxyZWFkeSBkb25lLCBzb21lIG9mIHRoZSBvcHRpb25zIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBhcHBlYXIuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgY2Fubm90IGZpbmQgYW4gb3B0aW9uIGFzIGRpcmVjdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbWFudWFsLCBpdCBoYXMgYWxyZWFkeSBiZWVuIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSBFY2xpcHNlIGlzIHJ1bm5pbmcgYW5kIHlvdSBhcmUgaW4geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtiZW5jaC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgIkluc3RhbGwgTmV3IFNvZnR3YXJlIiBmcm9tIHRoZSAiSGVscCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWxsLWRvd24gbWVudS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmVvbiAtIGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy9uZW9uIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlICJXb3JrIHdpdGg6IiBwdWxsLWRvd24gbWVudS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHBhbmQgdGhlIGJveCBuZXh0IHRvICJMaW51eCBUb29scyIgYW5kIHNlbGVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDL0MrKyBSZW1vdGUgKE92ZXIgVENGL1RFKSBSdW4vRGVidWcgTGF1bmNoZXIKKyAgICAgVE0gVGVybWluYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5kIHRoZSBib3ggbmV4dCB0byAiTW9iaWxlIGFuZCBEZXZpY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZlbG9wbWVudCIgYW5kIHNlbGVjdCB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94ZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDL0MrKyBSZW1vdGUgKE92ZXIgVENGL1RFKSBSdW4vRGVidWcgTGF1bmNoZXIKKyAgICAgUmVtb3RlIFN5c3RlbSBFeHBsb3JlciBVc2VyIEFjdGlvbnMKKyAgICAgVE0gVGVybWluYWwKKyAgICAgVENGIFJlbW90ZSBTeXN0ZW0gRXhwbG9yZXIgYWRkLWluCisgICAgIFRDRiBUYXJnZXQgRXhwbG9yZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5kIHRoZSBib3ggbmV4dCB0byAiUHJvZ3JhbW1pbmcgTGFuZ3VhZ2VzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzZWxlY3QgdGhlIGZvbGxvd2luZyBib3g6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDL0MrKyBEZXZlbG9wbWVudCBUb29scyBTREsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGxldGUgdGhlIGluc3RhbGxhdGlvbiBieSBjbGlja2luZyB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUgIk5leHQiIGFuZCAiRmluaXNoIiBidXR0b25zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J25lb24taW5zdGFsbGluZy10aGUtZWNsaXBzZS15b2N0by1wbHVnLWluJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+SW5zdGFsbGluZyBvciBBY2Nlc3NpbmcgdGhlIE5lb24gRWNsaXBzZSBZb2N0byBQbHVnLWluPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGluc3RhbGwgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbiBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICBFY2xpcHNlIElERSBvbmUgb2YgdHdvIHdheXM6ICB1c2UgdGhlIFlvY3RvIFByb2plY3QncworICAgICAgICAgICAgICAgICAgICBFY2xpcHNlIFVwZGF0ZSBzaXRlIHRvIGluc3RhbGwgdGhlIHByZS1idWlsdCBwbHVnLWluCisgICAgICAgICAgICAgICAgICAgIG9yIGJ1aWxkIGFuZCBpbnN0YWxsIHRoZSBwbHVnLWluIGZyb20gdGhlIGxhdGVzdAorICAgICAgICAgICAgICAgICAgICBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbmVvbi1uZXctc29mdHdhcmUnPgorICAgICAgICAgICAgICAgICAgICA8dGl0bGU+SW5zdGFsbGluZyB0aGUgUHJlLWJ1aWx0IFBsdWctaW4gZnJvbSB0aGUgWW9jdG8gUHJvamVjdCBFY2xpcHNlIFVwZGF0ZSBTaXRlPC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIGluc3RhbGwgdGhlIE5lb24gRWNsaXBzZSBZb2N0byBQbHVnLWluIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUgc2l0ZSwgZm9sbG93IHRoZXNlIHN0ZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnQgdXAgdGhlIEVjbGlwc2UgSURFLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIEVjbGlwc2UsIHNlbGVjdCAiSW5zdGFsbCBOZXcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUiIGZyb20gdGhlICJIZWxwIiBtZW51LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrICJBZGQuLi4iIGluIHRoZSAiV29yayB3aXRoOiIgYXJlYS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JkVDTElQU0VfRExfUExVR0lOX1VSTDsvbmVvbjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBVUkwgZmllbGQgYW5kIHByb3ZpZGUgYSBtZWFuaW5nZnVsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgaW4gdGhlICJOYW1lIiBmaWVsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGljayAiT0siIHRvIGhhdmUgdGhlIGVudHJ5IGFkZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSAiV29yayB3aXRoOiIgZHJvcC1kb3duIGxpc3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IHRoZSBlbnRyeSBmb3IgdGhlIHBsdWctaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgIldvcmsgd2l0aDoiIGRyb3AtZG93biBsaXN0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrIHRoZSBib3hlcyBuZXh0IHRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgWW9jdG8gUHJvamVjdCBTREsgUGx1Zy1pbgorICAgICBZb2N0byBQcm9qZWN0IERvY3VtZW50YXRpb24gcGx1Zy1pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGxldGUgdGhlIHJlbWFpbmluZyBzb2Z0d2FyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb24gc3RlcHMgYW5kIHRoZW4gcmVzdGFydCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWNsaXBzZSBJREUgdG8gZmluaXNoIHRoZSBpbnN0YWxsYXRpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBsdWctaW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBjbGljayAiT0siIHdoZW4gcHJvbXB0ZWQgYWJvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxpbmcgc29mdHdhcmUgdGhhdCBjb250YWlucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29udGVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbmVvbi16aXAtZmlsZS1tZXRob2QnPgorICAgICAgICAgICAgICAgICAgICA8dGl0bGU+SW5zdGFsbGluZyB0aGUgUGx1Zy1pbiBVc2luZyB0aGUgTGF0ZXN0IFNvdXJjZSBDb2RlPC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIGluc3RhbGwgdGhlIE5lb24gRWNsaXBzZSBZb2N0byBQbHVnLWluIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBsYXRlc3Qgc291cmNlIGNvZGUsIGZvbGxvdyB0aGVzZSBzdGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgeW91ciBkZXZlbG9wbWVudCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzIEpESyAxLjgrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbCBYMTEtcmVsYXRlZCBwYWNrYWdlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8gYXB0LWdldCBpbnN0YWxsIHhhdXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBhIG5ldyB0ZXJtaW5hbCBzaGVsbCwgY3JlYXRlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnkgd2l0aDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvZWNsaXBzZS1wb2t5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgR2l0IHRvIGNyZWF0ZSB0aGUgY29ycmVjdCB0YWc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L2VjbGlwc2UtcG9reQorICAgICAkIGdpdCBjaGVja291dCBuZW9uL3lvY3RvLSZESVNUUk87CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjcmVhdGVzIGEgbG9jYWwgdGFnIG5hbWVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5uZW9uL3lvY3RvLSZESVNUUk87PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gdGhlIGJyYW5jaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b3JpZ2luL25lb24tbWFzdGVyPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhcmUgcHV0IGludG8gYSBkZXRhY2hlZCBIRUFEIHN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBmaW5lIHNpbmNlIHlvdSBhcmUgb25seSBnb2luZyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBidWlsZGluZyBhbmQgbm90IGRldmVsb3BpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlIHRvIHRoZSA8ZmlsZW5hbWU+c2NyaXB0czwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB3aXRoaW4gdGhlIEdpdCByZXBvc2l0b3J5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2Qgc2NyaXB0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHVwIHRoZSBsb2NhbCBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSBydW5uaW5nIHRoZSBzZXR1cCBzY3JpcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCAuL3NldHVwLnNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiB0aGUgc2NyaXB0IGZpbmlzaGVzIGV4ZWN1dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgcHJvbXB0cyB5b3Ugd2l0aCBpbnN0cnVjdGlvbnMgb24gaG93IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1biB0aGUgPGZpbGVuYW1lPmJ1aWxkLnNoPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LCB3aGljaCBpcyBhbHNvIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2NyaXB0czwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgR2l0IHJlcG9zaXRvcnkgY3JlYXRlZCBlYXJsaWVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1biB0aGUgPGZpbGVuYW1lPmJ1aWxkLnNoPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0IGFzIGRpcmVjdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIHByb3ZpZGUgdGhlIHRhZyBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uIGJyYW5jaCwgYW5kIGEgcmVsZWFzZSBuYW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIEVDTElQU0VfSE9NRT0vaG9tZS9zY290dHJpZi9lY2xpcHNlLXBva3kvc2NyaXB0cy9lY2xpcHNlIC4vYnVpbGQuc2ggLWwgbmVvbi95b2N0by0mRElTVFJPOyBtYXN0ZXIgeW9jdG8tJkRJU1RSTzsgMj4mYW1wOzEgfCB0ZWUgYnVpbGQubG9nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIGV4YW1wbGUgY29tbWFuZCBhZGRzIHRoZSB0YWcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYXJzL3lvY3RvLSZESVNUUk87PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gPGZpbGVuYW1lPkhFQUQ8L2ZpbGVuYW1lPiwgdGhlbiB0ZWxscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgc2NyaXB0IHRvIHVzZSB0aGUgbG9jYWwgKC1sKSBHaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tvdXQgZm9yIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgcnVubmluZyB0aGUgc2NyaXB0LCB0aGUgZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b3JnLnlvY3RvLnNkay08L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5yZWxlYXNlPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+LTwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmRhdGU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4tYXJjaGl2ZS56aXA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbmVjZXNzYXJ5LCBzdGFydCB0aGUgRWNsaXBzZSBJREUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGJlIHN1cmUgeW91IGFyZSBpbiB0aGUgV29ya2JlbmNoLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCAiSW5zdGFsbCBOZXcgU29mdHdhcmUiIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlICJIZWxwIiBwdWxsLWRvd24gbWVudS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGljayAiQWRkIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm92aWRlIGFueXRoaW5nIHlvdSB3YW50IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmFtZSIgZmllbGQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgIkFyY2hpdmUiIGFuZCBicm93c2UgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpJUCBmaWxlIHlvdSBidWlsdCBlYXJsaWVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIFpJUCBmaWxlIHNob3VsZCBub3QgYmUgInVuemlwcGVkIiwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgYmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4qYXJjaGl2ZS56aXA8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQgYnkgcnVubmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1aWxkLnNoPC9maWxlbmFtZT4gc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrIHRoZSAiT0siIGJ1dHRvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGVjayB0aGUgYm94ZXMgdGhhdCBhcHBlYXIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGluc3RhbGxhdGlvbiB3aW5kb3cgdG8gaW5zdGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFlvY3RvIFByb2plY3QgU0RLIFBsdWctaW4KKyAgICAgWW9jdG8gUHJvamVjdCBEb2N1bWVudGF0aW9uIHBsdWctaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbmlzaCB0aGUgaW5zdGFsbGF0aW9uIGJ5IGNsaWNraW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggdGhlIGFwcHJvcHJpYXRlIGJ1dHRvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY2xpY2sgIk9LIiB3aGVuIHByb21wdGVkIGFib3V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxpbmcgc29mdHdhcmUgdGhhdCBjb250YWlucyB1bnNpZ25lZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3RhcnQgdGhlIEVjbGlwc2UgSURFIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50IHlvdSBzaG91bGQgYmUgYWJsZSB0byBjb25maWd1cmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBFY2xpcHNlIFlvY3RvIFBsdWctaW4gYXMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J21hcnMtY29uZmlndXJpbmctdGhlLWVjbGlwc2UteW9jdG8tcGx1Zy1pbic+Q29uZmlndXJpbmcgdGhlIE5lb24gRWNsaXBzZSBZb2N0byBQbHVnLWluPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZW9uLWNvbmZpZ3VyaW5nLXRoZS1lY2xpcHNlLXlvY3RvLXBsdWctaW4nPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmluZyB0aGUgTmVvbiBFY2xpcHNlIFlvY3RvIFBsdWctaW48L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyaW5nIHRoZSBOZW9uIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbiBpbnZvbHZlcworICAgICAgICAgICAgICAgICAgICBzZXR0aW5nIHRoZSBDcm9zcyBDb21waWxlciBvcHRpb25zIGFuZCB0aGUgVGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBjb25maWd1cmF0aW9ucyB5b3UgY2hvb3NlIGJlY29tZSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncyBmb3IgYWxsIHByb2plY3RzLgorICAgICAgICAgICAgICAgICAgICBZb3UgZG8gaGF2ZSBvcHBvcnR1bml0aWVzIHRvIGNoYW5nZSB0aGVtIGxhdGVyIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgeW91IGNvbmZpZ3VyZSB0aGUgcHJvamVjdCAoc2VlIHRoZSBmb2xsb3dpbmcgc2VjdGlvbikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHN0YXJ0LCB5b3UgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nIGZyb20gd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICBFY2xpcHNlIElERToKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2UgIlByZWZlcmVuY2VzIiBmcm9tIHRoZSAiV2luZG93IiBtZW51IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGUgUHJlZmVyZW5jZXMgRGlhbG9nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrICJZb2N0byBQcm9qZWN0IFNESyIgdG8gZGlzcGxheQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIHNjcmVlbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgc3ViLXNlY3Rpb25zIGRlc2NyaWJlIGhvdyB0byBjb25maWd1cmUKKyAgICAgICAgICAgICAgICAgICAgdGhlIHBsdWctaW4uCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhyb3VnaG91dCB0aGUgZGVzY3JpcHRpb25zLCBhIHN0YXJ0LXRvLWZpbmlzaAorICAgICAgICAgICAgICAgICAgICAgICAgZXhhbXBsZSBmb3IgcHJlcGFyaW5nIGEgUUVNVSBpbWFnZSBmb3IgdXNlIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIEVjbGlwc2UgaXMgcmVmZXJlbmNlZCBhcyB0aGUgIndpa2kiIGFuZCBpcyBsaW5rZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBleGFtcGxlIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9UaXBzQW5kVHJpY2tzL1J1bm5pbmdFY2xpcHNlQWdhaW5zdEJ1aWx0SW1hZ2UnPiBDb29rYm9vayBndWlkZSB0byBNYWtpbmcgYW4gRWNsaXBzZSBEZWJ1ZyBDYXBhYmxlIEltYWdlPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHdpa2kgcGFnZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZW9uLWNvbmZpZ3VyaW5nLXRoZS1jcm9zcy1jb21waWxlci1vcHRpb25zJz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIHRoZSBDcm9zcy1Db21waWxlciBPcHRpb25zPC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIENyb3NzIENvbXBpbGVyIG9wdGlvbnMgZW5hYmxlIEVjbGlwc2UgdG8gdXNlIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIGNyb3NzIGNvbXBpbGVyIHRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIGNvbmZpZ3VyZSB0aGVzZSBvcHRpb25zLCB5b3UgbXVzdCBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0eXBlIG9mIHRvb2xjaGFpbiwgcG9pbnQgdG8gdGhlIHRvb2xjaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgdGhlIHN5c3Jvb3QgbG9jYXRpb24sIGFuZCBzZWxlY3QgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5TZWxlY3RpbmcgdGhlIFRvb2xjaGFpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSBiZXR3ZWVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TdGFuZGFsb25lIHByZS1idWlsdCB0b29sY2hhaW48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJ1aWxkIHN5c3RlbSBkZXJpdmVkIHRvb2xjaGFpbjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBDcm9zcyBDb21waWxlciBPcHRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U3RhbmRhbG9uZSBQcmUtYnVpbHQgVG9vbGNoYWluOjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgdGhpcyB0eXBlIHdoZW4geW91IGFyZSB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgc3RhbmQtYWxvbmUgY3Jvc3MtdG9vbGNoYWluLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBhcmUgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBkZXZlbG9wZXIgYW5kIGRvIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWQgdG8gYnVpbGQgYSB0YXJnZXQgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGVhZCwgeW91IGp1c3Qgd2FudCB0byB1c2UgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdG9vbGNoYWluIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gZXhpc3Rpbmcga2VybmVsIGFuZCB0YXJnZXQgcm9vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHlvdSBoYXZlIGRvd25sb2FkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgaW5zdGFsbGVkIGEgcHJlLWJ1aWx0IHRvb2xjaGFpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhbiBleGlzdGluZyBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJ1aWxkIFN5c3RlbSBEZXJpdmVkIFRvb2xjaGFpbjo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IHRoaXMgdHlwZSBpZiB5b3UgYnVpbHQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluIGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QnVpbGQgc3lzdGVtIGRlcml2ZWQgdG9vbGNoYWluPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IGFyZSB1c2luZyB0aGUgdG9vbGNoYWluIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGJ1bmRsZWQgaW5zaWRlIHRoZSBCdWlsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgY3JlYXRlZCBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGFibGUgaW1hZ2UgdXNpbmcgdGhlIHN0ZXBzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvVGlwc0FuZFRyaWNrcy9SdW5uaW5nRWNsaXBzZUFnYWluc3RCdWlsdEltYWdlJz53aWtpPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBzaXR1YXRpb24sIHlvdSB3b3VsZCBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QnVpbGQgc3lzdGVtIGRlcml2ZWQgdG9vbGNoYWluPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5TcGVjaWZ5IHRoZSBUb29sY2hhaW4gUm9vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIGEgc3RhbmQtYWxvbmUgcHJlLWJ1aWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xjaGFpbiwgeW91IHNob3VsZCBiZSBwb2ludGluZyB0byB3aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBpcyBpbnN0YWxsZWQgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9vcHQvcG9reS8mRElTVFJPOzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLWluc3RhbGxpbmctdGhlLXNkayc+SW5zdGFsbGluZyB0aGUgU0RLPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBTREsgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IGFyZSB1c2luZyBhIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXJpdmVkIHRvb2xjaGFpbiwgdGhlIHBhdGggeW91IHByb3ZpZGUgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VG9vbGNoYWluIFJvb3QgTG9jYXRpb248L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCBpcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHdoaWNoIHlvdSBydW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCAoZS5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vaG9tZS9zY290dHJpZi9wb2t5L2J1aWxkPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstYnVpbGRpbmctYW4tc2RrLWluc3RhbGxlcic+QnVpbGRpbmcgYW4gU0RLIEluc3RhbGxlcjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlNwZWNpZnkgU3lzcm9vdCBMb2NhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBsb2NhdGlvbiBpcyB3aGVyZSB0aGUgcm9vdCBmaWxlc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgdGFyZ2V0IGhhcmR3YXJlIHJlc2lkZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhpcyBsb2NhdGlvbiBkZXBlbmRzIG9uIHdoZXJlIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZWx5IGV4dHJhY3RlZCBhbmQgaW5zdGFsbGVkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgZmlsZXN5c3RlbSB3aGVuIHlvdSBlaXRoZXIgYnVpbHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgb3IgZG93bmxvYWRlZCBpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG93bmxvYWRlZCB0aGUgcm9vdCBmaWxlc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHRhcmdldCBoYXJkd2FyZSByYXRoZXIgdGhhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbHQgaXQsIHlvdSBtdXN0IGRvd25sb2FkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNhdG8tc2RrPC9maWxlbmFtZT4gaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIG9yZGVyIHRvIGJ1aWxkIGFueSBjL2MrKyBwcm9qZWN0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBzdXBwb3NlIHlvdSBwcmVwYXJlZCBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSB1c2luZyB0aGUgc3RlcHMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvVGlwc0FuZFRyaWNrcy9SdW5uaW5nRWNsaXBzZUFnYWluc3RCdWlsdEltYWdlJz53aWtpPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHNvLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ZX1FFTVVfUk9PVEZTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGlzIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB5b3Ugd291bGQgYnJvd3NlIHRvIGFuZCBzZWxlY3QgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ob21lL3Njb3R0cmlmL3Bva3kvYnVpbGQvTVlfUUVNVV9ST09URlM8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgdGhlIHRvb2xjaGFpbiBhbmQgb24gaG93IHRvIGV4dHJhY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGluc3RhbGwgdGhlIHN5c3Jvb3QgZmlsZXN5c3RlbSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLWJ1aWxkaW5nLWFuLXNkay1pbnN0YWxsZXInPkJ1aWxkaW5nIGFuIFNESyBJbnN0YWxsZXI8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5TZWxlY3QgdGhlIFRhcmdldCBBcmNoaXRlY3R1cmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIHRoZSB0eXBlIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlIHlvdSBhcmUgZ29pbmcgdG8gdXNlIG9yIGVtdWxhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgcHVsbC1kb3duCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UYXJnZXQgQXJjaGl0ZWN0dXJlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudSB0byBtYWtlIHlvdXIgc2VsZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcHVsbC1kb3duIG1lbnUgc2hvdWxkIGhhdmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgYXJjaGl0ZWN0dXJlIHlvdSBuZWVkIGlzIG5vdCBsaXN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIG1lbnUsIHlvdSB3aWxsIG5lZWQgdG8gYnVpbGQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3FzLWJ1aWxkaW5nLWltYWdlcyc+QnVpbGRpbmcgSW1hZ2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvVGlwc0FuZFRyaWNrcy9SdW5uaW5nRWNsaXBzZUFnYWluc3RCdWlsdEltYWdlJz53aWtpPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbmVvbi1jb25maWd1cmluZy10aGUtdGFyZ2V0LW9wdGlvbnMnPgorICAgICAgICAgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJpbmcgdGhlIFRhcmdldCBPcHRpb25zPC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY2hvb3NlIHRvIGVtdWxhdGUgaGFyZHdhcmUgdXNpbmcgdGhlIFFFTVUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVtdWxhdG9yLCBvciB5b3UgY2FuIGNob29zZSB0byBydW4geW91ciBpbWFnZSBvbgorICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5RRU1VOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2lsbCBiZSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUUVNVSBlbXVsYXRvci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB1c2luZyB0aGUgZW11bGF0b3IsIHlvdSBhbHNvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWQgdG8gbG9jYXRlIHRoZSBrZXJuZWwgYW5kIHNwZWNpZnkgYW55CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbSBvcHRpb25zLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IHNlbGVjdGVkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QnVpbGQgc3lzdGVtIGRlcml2ZWQgdG9vbGNoYWluPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQga2VybmVsIHlvdSBidWlsdCB3aWxsIGJlIGxvY2F0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC9kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHN1cHBvc2UgeW91IHBlcmZvcm1lZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcHMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvVGlwc0FuZFRyaWNrcy9SdW5uaW5nRWNsaXBzZUFnYWluc3RCdWlsdEltYWdlJz53aWtpPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IHNwZWNpZnkgeW91ciBCdWlsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcnkgcGF0aCBmb2xsb3dlZCBieSB0aGUgaW1hZ2UgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ob21lL3Njb3R0cmlmL3Bva3kvYnVpbGQvdG1wL2RlcGxveS9pbWFnZXMvcWVtdXg4Ni9iekltYWdlLXFlbXV4ODYuYmluPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBzZWxlY3RlZCB0aGUgc3RhbmRhbG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmUtYnVpbHQgdG9vbGNoYWluLCB0aGUgcHJlLWJ1aWx0IGltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBkb3dubG9hZGVkIGlzIGxvY2F0ZWQgaW4gdGhlIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3Ugc3BlY2lmaWVkIHdoZW4geW91IGRvd25sb2FkZWQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+TW9zdCBjdXN0b20gb3B0aW9ucyBhcmUgZm9yIGFkdmFuY2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFFTVUgdXNlcnMgdG8gZnVydGhlciBjdXN0b21pemUgdGhlaXIgUUVNVQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlc2Ugb3B0aW9ucyBhcmUgc3BlY2lmaWVkIGJldHdlZW4gcGFpcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlZCBicmFja2V0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29tZSBvcHRpb25zIG11c3QgYmUgc3BlY2lmaWVkIG91dHNpZGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYWNrZXRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB0aGUgb3B0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2VyaWFsPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ub2dyYXBoaWM8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5rdm08L2ZpbGVuYW1lPiBtdXN0IGFsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRzaWRlIHRoZSBicmFja2V0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+bWFuIHFlbXU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIHRvIGdldCBoZWxwIG9uIGFsbCB0aGUgb3B0aW9ucyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlaXIgdXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgIHNlcmlhbCDigJgmbHQ7LW0gMjU2IC1mdWxsLXNjcmVlbiZndDvigJkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2FyZGxlc3Mgb2YgdGhlIG1vZGUsIFN5c3Jvb3QgaXMgYWxyZWFkeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGFzIHBhcnQgb2YgdGhlIENyb3NzLUNvbXBpbGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgY29uZmlndXJhdGlvbiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlN5c3Jvb3QgTG9jYXRpb246PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkV4dGVybmFsIEhXOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2lsbCBiZSB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWwgaGFyZHdhcmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgdGhlICJBcHBseSIgYW5kICJPSyIgdG8gc2F2ZSB5b3VyIHBsdWctaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J25lb24tY3JlYXRpbmctdGhlLXByb2plY3QnPgorICAgICAgICAgICAgPHRpdGxlPkNyZWF0aW5nIHRoZSBQcm9qZWN0PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBjcmVhdGUgdHdvIHR5cGVzIG9mIHByb2plY3RzOiAgQXV0b3Rvb2xzLWJhc2VkLCBvcgorICAgICAgICAgICAgICAgIE1ha2VmaWxlLWJhc2VkLgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHRvIGNyZWF0ZSBBdXRvdG9vbHMtYmFzZWQKKyAgICAgICAgICAgICAgICBwcm9qZWN0cyBmcm9tIHdpdGhpbiB0aGUgRWNsaXBzZSBJREUuCisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGNyZWF0aW5nIE1ha2VmaWxlLWJhc2VkIHByb2plY3RzIGluIGEKKyAgICAgICAgICAgICAgICB0ZXJtaW5hbCB3aW5kb3csIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbWFrZWZpbGUtYmFzZWQtcHJvamVjdHMnPk1ha2VmaWxlLUJhc2VkIFByb2plY3RzPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBEbyBub3QgdXNlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBwcm9qZWN0IG5hbWVzCisgICAgICAgICAgICAgICAgICAgIChlLmcuIHNwYWNlcywgdW5kZXJzY29yZXMsIGV0Yy4pLiAgRG9pbmcgc28gY2FuCisgICAgICAgICAgICAgICAgICAgIGNhdXNlIGNvbmZpZ3VyYXRpb24gdG8gZmFpbC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGNyZWF0ZSBhIHByb2plY3QgYmFzZWQgb24gYSBZb2N0byB0ZW1wbGF0ZSBhbmQgdGhlbgorICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhlIHNvdXJjZSBjb2RlLCBmb2xsb3cgdGhlc2Ugc3RlcHM6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgIkMgUHJvamVjdCIgZnJvbSB0aGUgIkZpbGUgLT4gTmV3IiBtZW51LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEV4cGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPllvY3RvIFByb2plY3QgU0RLIEF1dG90b29scyBQcm9qZWN0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IDxmaWxlbmFtZT5IZWxsbyBXb3JsZCBBTlNJIEMgQXV0b3Rvb2xzIFByb2plY3RzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGFuIEF1dG90b29scy1iYXNlZCBwcm9qZWN0IGJhc2VkIG9uIGEgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFB1dCBhIG5hbWUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UHJvamVjdCBuYW1lOjwvZmlsZW5hbWU+IGZpZWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgRG8gbm90IHVzZSBoeXBoZW5zIGFzIHBhcnQgb2YgdGhlIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5oZWxsbzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBDbGljayAiTmV4dCIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQWRkIGFwcHJvcHJpYXRlIGluZm9ybWF0aW9uIGluIHRoZSB2YXJpb3VzIGZpZWxkcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBDbGljayAiRmluaXNoIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgIm9wZW4gcGVyc3BlY3RpdmUiIHByb21wdCBhcHBlYXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2sgIlllcyIgc28gdGhhdCB5b3UgaW4gdGhlIEMvQysrIHBlcnNwZWN0aXZlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgbGVmdC1oYW5kIG5hdmlnYXRpb24gcGFuZSBzaG93cworICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkaXNwbGF5IHlvdXIgc291cmNlIGJ5IGRvdWJsZSBjbGlja2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3QncyBzb3VyY2UgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmVvbi1jb25maWd1cmluZy10aGUtY3Jvc3MtdG9vbGNoYWlucyc+CisgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJpbmcgdGhlIENyb3NzLVRvb2xjaGFpbnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZWFybGllciBzZWN0aW9uLAorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSduZW9uLWNvbmZpZ3VyaW5nLXRoZS1lY2xpcHNlLXlvY3RvLXBsdWctaW4nPkNvbmZpZ3VyaW5nIHRoZSBOZW9uIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbjwvbGluaz4iLAorICAgICAgICAgICAgICAgIHNldHMgdXAgdGhlIGRlZmF1bHQgcHJvamVjdCBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIHRoZXNlIHNldHRpbmdzIGZvciBhIGdpdmVuIHByb2plY3QgYnkKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmcgdGhlc2Ugc3RlcHM6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgIllvY3RvIFByb2plY3QgU2V0dGluZ3MiIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSAiUHJvamVjdCAtPiBQcm9wZXJ0aWVzIiBtZW51LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWxlY3Rpb24gYnJpbmdzIHVwIHRoZSBZb2N0byBQcm9qZWN0IFNldHRpbmdzCisgICAgICAgICAgICAgICAgICAgICAgICBEaWFsb2cgYW5kIGFsbG93cyB5b3UgdG8gbWFrZSBjaGFuZ2VzIHNwZWNpZmljIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBhbiBpbmRpdmlkdWFsIHByb2plY3QuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QnkgZGVmYXVsdCwgdGhlIENyb3NzIENvbXBpbGVyIE9wdGlvbnMgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBUYXJnZXQgT3B0aW9ucyBmb3IgYSBwcm9qZWN0IGFyZSBpbmhlcml0ZWQgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MgeW91IHByb3ZpZGVkIHVzaW5nIHRoZSBQcmVmZXJlbmNlcyBEaWFsb2cKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzIGRlc2NyaWJlZCBlYXJsaWVyIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J25lb24tY29uZmlndXJpbmctdGhlLWVjbGlwc2UteW9jdG8tcGx1Zy1pbic+Q29uZmlndXJpbmcgdGhlIE5lb24gRWNsaXBzZSBZb2N0byBQbHVnLWluPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBTZXR0aW5ncyBEaWFsb2cgYWxsb3dzIHlvdSB0bworICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGUgdGhvc2UgZGVmYXVsdCBzZXR0aW5ncyBmb3IgYSBnaXZlbgorICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBNYWtlIG9yIHZlcmlmeSB5b3VyIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3QgYW5kIGNsaWNrICJPSyIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgUmlnaHQtY2xpY2sgaW4gdGhlIG5hdmlnYXRpb24gcGFuZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCAiUmVjb25maWd1cmUgUHJvamVjdCIgZnJvbSB0aGUgcG9wLXVwIG1lbnUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHNlbGVjdGlvbiByZWNvbmZpZ3VyZXMgdGhlIHByb2plY3QgYnkgcnVubmluZworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG9nZW4uc2g8L2ZpbGVuYW1lPiBpbiB0aGUgd29ya3NwYWNlCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeW91ciBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHNjcmlwdCBhbHNvIHJ1bnMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJ0b29saXplPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YWNsb2NhbDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG9jb25mPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXV0b2hlYWRlcjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG9tYWtlIC0tYTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uL2NvbmZpZ3VyZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgb24gdGhlICJDb25zb2xlIiB0YWIgYmVuZWF0aCB5b3VyIHNvdXJjZSBjb2RlCisgICAgICAgICAgICAgICAgICAgICAgICB0byBzZWUgdGhlIHJlc3VsdHMgb2YgcmVjb25maWd1cmluZyB5b3VyIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICA8c2VjdGlvbiBpZD0nbmVvbi1idWlsZGluZy10aGUtcHJvamVjdCc+CisgICAgICAgICAgICA8dGl0bGU+QnVpbGRpbmcgdGhlIFByb2plY3Q8L3RpdGxlPgorICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGJ1aWxkIHRoZSBwcm9qZWN0IHNlbGVjdCAiQnVpbGQgQWxsIiBmcm9tIHRoZQorICAgICAgICAgICAgICAgICJQcm9qZWN0IiBtZW51LgorICAgICAgICAgICAgICAgIFRoZSBjb25zb2xlIHNob3VsZCB1cGRhdGUgYW5kIHlvdSBjYW4gbm90ZSB0aGUKKyAgICAgICAgICAgICAgICBjcm9zcy1jb21waWxlciB5b3UgYXJlIHVzaW5nLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nICJZb2N0byBQcm9qZWN0IFNESyBBdXRvdG9vbHMiIHByb2plY3RzLAorICAgICAgICAgICAgICAgICAgICB0aGUgRWNsaXBzZSBJREUgbWlnaHQgZGlzcGxheSBlcnJvciBtZXNzYWdlcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25zL1N5bWJvbHMvVHlwZXMgdGhhdCBjYW5ub3QgYmUgInJlc29sdmVkIiwKKyAgICAgICAgICAgICAgICAgICAgZXZlbiB3aGVuIHRoZSByZWxhdGVkIGluY2x1ZGUgZmlsZSBpcyBsaXN0ZWQgYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIHByb2plY3QgbmF2aWdhdG9yIGFuZCB3aGVuIHRoZSBwcm9qZWN0IGlzIGFibGUgdG8KKyAgICAgICAgICAgICAgICAgICAgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIEZvciB0aGVzZSBjYXNlcyBvbmx5LCBpdCBpcyByZWNvbW1lbmRlZCB0byBhZGQgYSBuZXcKKyAgICAgICAgICAgICAgICAgICAgbGlua2VkIGZvbGRlciB0byB0aGUgYXBwcm9wcmlhdGUgc3lzcm9vdC4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoZXNlIHN0ZXBzIHRvIGFkZCB0aGUgbGlua2VkIGZvbGRlcjoKKyAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCB0aGUgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgIkZvbGRlciIgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RmlsZSA+IE5ldzwvZmlsZW5hbWU+IG1lbnUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhlICJOZXcgRm9sZGVyIiBEaWFsb2csIHNlbGVjdCAiTGluayB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVybmF0ZSBsb2NhdGlvbiAobGlua2VkIGZvbGRlcikiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrICJCcm93c2UiIHRvIG5hdmlnYXRlIHRvIHRoZSBpbmNsdWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sZGVyIGluc2lkZSB0aGUgc2FtZSBzeXNyb290IGxvY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgaW4gdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHByZWZlcmVuY2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrICJPSyIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgIkZpbmlzaCIgdG8gc2F2ZSB0aGUgbGlua2VkIGZvbGRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmVvbi1zdGFydGluZy1xZW11LWluLXVzZXItc3BhY2UtbmZzLW1vZGUnPgorICAgICAgICAgICAgPHRpdGxlPlN0YXJ0aW5nIFFFTVUgaW4gVXNlci1TcGFjZSBORlMgTW9kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHN0YXJ0IHRoZSBRRU1VIGVtdWxhdG9yIGZyb20gd2l0aGluIEVjbGlwc2UsIGZvbGxvdworICAgICAgICAgICAgICAgIHRoZXNlIHN0ZXBzOgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNkZXYtbWFudWFsLXFlbXUnPlVzaW5nIHRoZSBRdWljayBFTVVsYXRvciAoUUVNVSk8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgY2hhcHRlciBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwKKyAgICAgICAgICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgUUVNVS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXhwb3NlIGFuZCBzZWxlY3QgIkV4dGVybmFsIFRvb2xzCisgICAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9ucyAuLi4iIGZyb20gdGhlICJSdW4gLT4gRXh0ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRvb2xzIiBtZW51LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIExvY2F0ZSBhbmQgc2VsZWN0IHlvdXIgaW1hZ2UgaW4gdGhlIG5hdmlnYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsIHRvIHRoZSBsZWZ0CisgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+cWVtdV9pNTg2LXBva3ktbGludXg8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgIlJ1biIgdG8gbGF1bmNoIFFFTVUuCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgaG9zdCBvbiB3aGljaCB5b3UgYXJlIHJ1bm5pbmcgUUVNVSBtdXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSB0aGUgPGZpbGVuYW1lPnJwY2JpbmQ8L2ZpbGVuYW1lPiB1dGlsaXR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyB0byBiZSBhYmxlIHRvIG1ha2UgUlBDIGNhbGxzIG9uIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIgb24gdGhhdCBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIFFFTVUgZG9lcyBub3QgaW52b2tlIGFuZCB5b3UgcmVjZWl2ZSBlcnJvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzIGludm9sdmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ycGNiaW5kPC9maWxlbmFtZT4sIGZvbGxvdyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9ucyB0byBnZXQgdGhlIHNlcnZpY2UgcnVubmluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBvbiBhIG5ldyBVYnVudHUgMTYuMDQgTFRTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uLCB5b3UgbXVzdCBkbyB0aGUgZm9sbG93aW5nIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXIgdG8gZ2V0IFFFTVUgdG8gbGF1bmNoOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIGFwdC1nZXQgaW5zdGFsbCBycGNiaW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIGluc3RhbGxpbmcgPGZpbGVuYW1lPnJwY2JpbmQ8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgbmVlZCB0byBlZGl0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL2luaXQuZC9ycGNiaW5kPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgT1BUSU9OUz0iLWkgLXciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIG1vZGlmeWluZyB0aGUgZmlsZSwgeW91IG5lZWQgdG8gc3RhcnQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyBzZXJ2aWNlIHBvcnRtYXAgcmVzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiBuZWVkZWQsIGVudGVyIHlvdXIgaG9zdCByb290IHBhc3N3b3JkIGluCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2hlbGwgd2luZG93IGF0IHRoZSBwcm9tcHQuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHNldHMgdXAgYSA8ZmlsZW5hbWU+VGFwIDA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBuZWVkZWQgZm9yIHJ1bm5pbmcgaW4gdXNlci1zcGFjZSBORlMKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgV2FpdCBmb3IgUUVNVSB0byBsYXVuY2guCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgT25jZSBRRU1VIGxhdW5jaGVzLCB5b3UgY2FuIGJlZ2luIG9wZXJhdGluZworICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoYXQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBPbmUgdXNlZnVsIHRhc2sgYXQgdGhpcyBwb2ludCB3b3VsZCBiZSB0byBkZXRlcm1pbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBJUCBBZGRyZXNzIGZvciB0aGUgdXNlci1zcGFjZSBORlMgYnkgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aWZjb25maWc8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIElQIGFkZHJlc3Mgb2YgdGhlIFFFTVUgbWFjaGluZSBhcHBlYXJzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgeHRlcm0gd2luZG93LgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhpcyBhZGRyZXNzIHRvIGhlbHAgeW91IHNlZSB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICAgcGFydGljdWxhcgorICAgICAgICAgICAgICAgICAgICAgICAgSVAgYWRkcmVzcyB0aGUgaW5zdGFuY2Ugb2YgUUVNVSBpcyB1c2luZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmVvbi1kZXBsb3lpbmctYW5kLWRlYnVnZ2luZy10aGUtYXBwbGljYXRpb24nPgorICAgICAgICAgICAgPHRpdGxlPkRlcGxveWluZyBhbmQgRGVidWdnaW5nIHRoZSBBcHBsaWNhdGlvbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uY2UgdGhlIFFFTVUgZW11bGF0b3IgaXMgcnVubmluZyB0aGUgaW1hZ2UsIHlvdSBjYW4gZGVwbG95CisgICAgICAgICAgICAgICAgeW91ciBhcHBsaWNhdGlvbiB1c2luZyB0aGUgRWNsaXBzZSBJREUgYW5kIHRoZW4gdXNlCisgICAgICAgICAgICAgICAgdGhlIGVtdWxhdG9yIHRvIHBlcmZvcm0gZGVidWdnaW5nLgorICAgICAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBzdGVwcyB0byBkZXBsb3kgdGhlIGFwcGxpY2F0aW9uLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBDdXJyZW50bHksIEVjbGlwc2UgZG9lcyBub3Qgc3VwcG9ydCBTU0ggcG9ydAorICAgICAgICAgICAgICAgICAgICBmb3J3YXJkaW5nLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIGlmIHlvdSBuZWVkIHRvIHJ1biBvciBkZWJ1ZyBhIHJlbW90ZQorICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiB1c2luZyB0aGUgaG9zdCBkaXNwbGF5LCB5b3UgbXVzdCBjcmVhdGUgYQorICAgICAgICAgICAgICAgICAgICB0dW5uZWxpbmcgY29ubmVjdGlvbiBmcm9tIG91dHNpZGUgRWNsaXBzZSBhbmQga2VlcAorICAgICAgICAgICAgICAgICAgICB0aGF0IGNvbm5lY3Rpb24gYWxpdmUgZHVyaW5nIHlvdXIgd29yay4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGluIGEgbmV3IHRlcm1pbmFsLCBydW4gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNzaCAtWFkgPHJlcGxhY2VhYmxlPnVzZXJfbmFtZTwvcmVwbGFjZWFibGU+QDxyZXBsYWNlYWJsZT5yZW1vdGVfaG9zdF9pcDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgdGhlIGFib3ZlIGZvcm0sIGhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNzaCAtWFkgcm9vdEAxOTIuMTY4LjcuMgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEFmdGVyIHJ1bm5pbmcgdGhlIGNvbW1hbmQsIGFkZCB0aGUgY29tbWFuZCB0byBiZQorICAgICAgICAgICAgICAgICAgICBleGVjdXRlZCBpbiBFY2xpcHNlJ3MgcnVuIGNvbmZpZ3VyYXRpb24gYmVmb3JlIHRoZQorICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGV4cG9ydCBESVNQTEFZPToxMC4wCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBub3QgZGVzdHJveSB0aGUgY29ubmVjdGlvbiBkdXJpbmcgeW91ciBRRU1VCisgICAgICAgICAgICAgICAgICAgIHNlc3Npb24gKGkuZS4gZG8gbm90CisgICAgICAgICAgICAgICAgICAgIGV4aXQgb3V0IG9mIG9yIGNsb3NlIHRoYXQgc2hlbGwpLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCAiRGVidWcgQ29uZmlndXJhdGlvbnMuLi4iIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiUnVuIiBtZW51LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoZSBsZWZ0IGFyZWEsIGV4cGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkMvQysrUmVtb3RlIEFwcGxpY2F0aW9uPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgTG9jYXRlIHlvdXIgcHJvamVjdCBhbmQgc2VsZWN0IGl0IHRvIGJyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICB1cCBhIG5ldyB0YWJiZWQgdmlldyBpbiB0aGUgRGVidWcgQ29uZmlndXJhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIERpYWxvZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBDbGljayBvbiB0aGUgIkRlYnVnZ2VyIiB0YWIgdG8gc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgY3Jvc3MtdG9vbCBkZWJ1Z2dlciB5b3UgYXJlIHVzaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBjaGFuZ2UgdG8gdGhlIGRlYnVnZ2VyIHBlcnNwZWN0aXZlIGluCisgICAgICAgICAgICAgICAgICAgICAgICBFY2xpcHNlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrIG9uIHRoZSAiTWFpbiIgdGFiLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZSBhIG5ldyBjb25uZWN0aW9uIHRvIHRoZSBRRU1VIGluc3RhbmNlCisgICAgICAgICAgICAgICAgICAgICAgICBieSBjbGlja2luZyBvbiAibmV3Ii48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlbGVjdCA8ZmlsZW5hbWU+U1NIPC9maWxlbmFtZT4sIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICBtZWFucyBTZWN1cmUgU29ja2V0IFNoZWxsIGFuZCB0aGVuIGNsaWNrICJPSyIuCisgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25hbGx5LCB5b3UgY2FuIHNlbGVjdCBhIFRDRiBjb25uZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIENsZWFyIG91dCB0aGUgIkNvbm5lY3Rpb24gbmFtZSIgZmllbGQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbnRlciBhbnkgbmFtZSB5b3Ugd2FudCBmb3IgdGhlIGNvbm5lY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgUHV0IHRoZSBJUCBhZGRyZXNzIGZvciB0aGUgY29ubmVjdGlvbiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlICJIb3N0IiBmaWVsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBRRU1VLCB0aGUgZGVmYXVsdCBpcworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjE5Mi4xNjguNy4yPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiBhIHByZXZpb3VzIFFFTVUgc2Vzc2lvbiBkaWQgbm90IGV4aXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFubHksIHRoZSBJUCBhZGRyZXNzIGluY3JlbWVudHMgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4xOTIuMTY4LjcuMzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGUgSVAgYWRkcmVzcyBmb3IgdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBRRU1VIHNlc3Npb24gYnkgbG9va2luZyBpbiB0aGUgeHRlcm0gdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zIHdoZW4geW91IGxhdW5jaCBRRU1VLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEVudGVyIDxmaWxlbmFtZT5yb290PC9maWxlbmFtZT4sIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICBpcyB0aGUgZGVmYXVsdCBmb3IgUUVNVSwgZm9yIHRoZSAiVXNlciIgZmllbGQuCisgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIGxlYXZlIHRoZSBwYXNzd29yZCBmaWVsZCBlbXB0eS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBDbGljayAiRmluaXNoIiB0byBjbG9zZSB0aGUgTmV3IENvbm5lY3Rpb25zIERpYWxvZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiBuZWNlc3NhcnksIHVzZSB0aGUgZHJvcC1kb3duIG1lbnUgbm93IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIkNvbm5lY3Rpb24iIGZpZWxkIGFuZCBwaWNrIHRoZSBJUCBBZGRyZXNzIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgZW50ZXJlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBBc3N1bWluZyB5b3UgYXJlIGNvbm5lY3RpbmcgYXMgdGhlIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIsIHdoaWNoIGlzIHRoZSBkZWZhdWx0IGZvciBRRU1VIHg4Ni02NCBTREsKKyAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcyBwcm92aWRlZCBieSB0aGUgWW9jdG8gUHJvamVjdCwgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiUmVtb3RlIEFic29sdXRlIEZpbGUgUGF0aCBmb3IgQy9DKysgQXBwbGljYXRpb24iCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCwgYnJvd3NlIHRvCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2hvbWUvcm9vdC88L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5Qcm9qZWN0TmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+L2hvbWUvcm9vdC9oZWxsbzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjb3VsZCBhbHNvIGJyb3dzZSB0byBhbnkgb3RoZXIgcGF0aCB5b3UgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgYWNjZXNzIHRvIG9uIHRoZSB0YXJnZXQgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvYmluPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGxvY2F0aW9uIGlzIHdoZXJlIHlvdXIgYXBwbGljYXRpb24gd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRlZCBvbiB0aGUgUUVNVSBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZmFpbCB0byBicm93c2UgdG8gYW5kIHNwZWNpZnkgYW4gYXBwcm9wcmlhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLCBRRU1VIHdpbGwgbm90IHVuZGVyc3RhbmQgd2hhdCB0byByZW1vdGVseQorICAgICAgICAgICAgICAgICAgICAgICAgbGF1bmNoLgorICAgICAgICAgICAgICAgICAgICAgICAgRWNsaXBzZSBpcyBoZWxwZnVsIGluIHRoYXQgaXQgYXV0byBmaWxscyB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBuYW1lIGZvciB5b3UgYXNzdW1pbmcgeW91IGJyb3dzZWQgdG8gYQorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+PHRpdGxlPlRpcHM8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgcHJvbXB0ZWQgdG8gcHJvdmlkZSBhIHVzZXJuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdG8gb3B0aW9uYWxseSBzZXQgYSBwYXNzd29yZCwgYmUgc3VyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IHByb3ZpZGUgInJvb3QiIGFzIHRoZSB1c2VybmFtZSBhbmQgeW91CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWF2ZSB0aGUgcGFzc3dvcmQgZmllbGQgYmxhbmsuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgYnJvd3NpbmcgdG8gYSBkaXJlY3RvcnkgZmFpbHMgb3IgdGltZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCwgYnV0IHlvdSBjYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zc2g8L2ZpbGVuYW1lPiBpbnRvIHlvdXIgUUVNVQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgdGFyZ2V0IGZyb20gdGhlIGNvbW1hbmQgbGluZSBhbmQgeW91CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlIHByb3hpZXMgc2V0IHVwLCBpdCBpcyBsaWtlbHkgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWNsaXBzZSBpcyBzZW5kaW5nIHRoZSBTU0ggdHJhZmZpYyB0byBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm94eS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgZWl0aGVyIHVzZSBUQ0YgLCBvciBjbGljayBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbmZpZ3VyZSBwcm94eSBzZXR0aW5ncyIgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIGRpYWxvZyBhbmQgYWRkIHRoZSB0YXJnZXQgSVAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgdG8gdGhlICJieXBhc3MgcHJveHkiIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbWlnaHQgYWxzbyBuZWVkIHRvIGNoYW5nZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFjdGl2ZSBQcm92aWRlciIgZnJvbSBOYXRpdmUgdG8gTWFudWFsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB5b3UgY2hhbmdlIHRvIHRoZSAiRGVidWciIHBlcnNwZWN0aXZlIGluCisgICAgICAgICAgICAgICAgICAgICAgICBFY2xpcHNlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrICJEZWJ1ZyIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHQgdGhlIGRlYnVnIHBlcnNwZWN0aXZlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSduZW9uLXVzaW5nLUxpbnV4dG9vbHMnPgorICAgICAgICAgICAgPHRpdGxlPlVzaW5nIExpbnV4dG9vbHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQgZWFybGllciBpbiB0aGUgbWFudWFsLCBwZXJmb3JtYW5jZSB0b29scyBleGlzdAorICAgICAgICAgICAgICAgIChMaW51eHRvb2xzKSB0aGF0IGVuaGFuY2UgeW91ciBkZXZlbG9wbWVudCBleHBlcmllbmNlLgorICAgICAgICAgICAgICAgIFRoZXNlIHRvb2xzIGFyZSBhaWRzIGluIGRldmVsb3BpbmcgYW5kIGRlYnVnZ2luZworICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9ucyBhbmQgaW1hZ2VzLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gcnVuIHRoZXNlIHRvb2xzIGZyb20gd2l0aGluIHRoZSBFY2xpcHNlIElERSB0aHJvdWdoCisgICAgICAgICAgICAgICAgdGhlICJMaW51eHRvb2xzIiBtZW51LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbmZpZ3VyZSBhbmQgdXNlIHRoZXNlIHRvb2xzLAorICAgICAgICAgICAgICAgIHNlZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGludXh0b29scy8nPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGludXh0b29scy88L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstZXh0ZW5zaWJsZS54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL3Nkay1leHRlbnNpYmxlLnhtbAppbmRleCAxNDk2NDc2Li40NDRkODE2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL3Nkay1leHRlbnNpYmxlLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL3Nkay1leHRlbnNpYmxlLnhtbApAQCAtMTUsNyArMTUsNyBAQAogICAgICAgICB0byBhbiBpbWFnZSwgbW9kaWZ5IHRoZSBzb3VyY2UgZm9yIGFuIGV4aXN0aW5nIGNvbXBvbmVudCwgdGVzdAogICAgICAgICBjaGFuZ2VzIG9uIHRoZSB0YXJnZXQgaGFyZHdhcmUsIGFuZCBlYXNlIGludGVncmF0aW9uIGludG8gdGhlIHJlc3Qgb2YKICAgICAgICAgdGhlCi0gICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLXN5c3RlbS10ZXJtJz5PcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtPC91bGluaz4uCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2J1aWxkLXN5c3RlbS10ZXJtJz5PcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtPC91bGluaz4uCiAgICAgICAgIDxub3RlPgogICAgICAgICAgICAgRm9yIGEgc2lkZS1ieS1zaWRlIGNvbXBhcmlzb24gb2YgbWFpbiBmZWF0dXJlcyBzdXBwb3J0ZWQgZm9yIGFuCiAgICAgICAgICAgICBleHRlbnNpYmxlIFNESyBhcyBjb21wYXJlZCB0byBhIHN0YW5kYXJkIFNESywgc2VlIHRoZQpAQCAtMjM1LDE1ICsyMzUsMjggQEAKICAgICAgICAgICAgIHlvdSBidWlsZCwgdGVzdCBhbmQgcGFja2FnZSBzb2Z0d2FyZSB3aXRoaW4gdGhlIGV4dGVuc2libGUgU0RLLCBhbmQKICAgICAgICAgICAgIG9wdGlvbmFsbHkgaW50ZWdyYXRlIGl0IGludG8gYW4gaW1hZ2UgYnVpbHQgYnkgdGhlIE9wZW5FbWJlZGRlZAogICAgICAgICAgICAgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgPG5vdGU+PHRpdGxlPlRpcDwvdGl0bGU+CisgICAgICAgICAgICAgICAgVGhlIHVzZSBvZiA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGlzIG5vdCBsaW1pdGVkIHRvCisgICAgICAgICAgICAgICAgdGhlIGV4dGVuc2libGUgU0RLLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gdG8gaGVscCB5b3UgZWFzaWx5CisgICAgICAgICAgICAgICAgZGV2ZWxvcCBhbnkgcHJvamVjdCB3aG9zZSBidWlsZCBvdXRwdXQgbXVzdCBiZSBwYXJ0IG9mIGFuCisgICAgICAgICAgICAgICAgaW1hZ2UgYnVpbHQgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICA8L25vdGU+CiAgICAgICAgIDwvcGFyYT4KIAogICAgICAgICA8cGFyYT4KICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGNvbW1hbmQgbGluZSBpcyBvcmdhbml6ZWQKICAgICAgICAgICAgIHNpbWlsYXJseSB0bwotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZ2l0Jz5HaXQ8L3VsaW5rPiBpbiB0aGF0IGl0IGhhcyBhCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNnaXQnPkdpdDwvdWxpbms+IGluIHRoYXQgaXQgaGFzIGEKICAgICAgICAgICAgIG51bWJlciBvZiBzdWItY29tbWFuZHMgZm9yIGVhY2ggZnVuY3Rpb24uCiAgICAgICAgICAgICBZb3UgY2FuIHJ1biA8ZmlsZW5hbWU+ZGV2dG9vbCAtLWhlbHA8L2ZpbGVuYW1lPiB0byBzZWUgYWxsIHRoZQogICAgICAgICAgICAgY29tbWFuZHMuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1kZXZ0b29sLXJlZmVyZW5jZSc+PGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiZuYnNwO1F1aWNrIFJlZmVyZW5jZTwvdWxpbms+IgorICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yIGEKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IHF1aWNrIHJlZmVyZW5jZS4KKyAgICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgIDxwYXJhPgpAQCAtMjkzLDcgKzMwNiw3IEBACiAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IGNvbW1hbmQgZ2VuZXJhdGVzCiAgICAgICAgICAgICAgICAgYSBuZXcgcmVjaXBlIGJhc2VkIG9uIGV4aXN0aW5nIHNvdXJjZSBjb2RlLgogICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZGV2dG9vbC10aGUtd29ya3NwYWNlLWxheWVyLXN0cnVjdHVyZSc+d29ya3NwYWNlPC91bGluaz4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNkZXZ0b29sLXRoZS13b3Jrc3BhY2UtbGF5ZXItc3RydWN0dXJlJz53b3Jrc3BhY2U8L3VsaW5rPgogICAgICAgICAgICAgICAgIGxheWVyIHRoYXQgbWFueSA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGNvbW1hbmRzCiAgICAgICAgICAgICAgICAgdXNlLgogICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kIGlzIGZsZXhpYmxlIGVub3VnaCB0byBhbGxvdyB5b3UgdG8gZXh0cmFjdCBzb3VyY2UKQEAgLTYxMiw3ICs2MjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0cyB0aGVtLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm92aWRpbmcgdGhlIDxyZXBsYWNlYWJsZT5zcmN0cmVlPC9yZXBsYWNlYWJsZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQgaW5zdHJ1Y3RzIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gd2hlcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2UgdGhlIGV4dHJhY3RlZCBzb3VyY2UuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBwbGFjZSB0aGUgZXh0cmFjdGVkIHNvdXJjZS48L3BhcmE+CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+V2l0aGluIHdvcmtzcGFjZSwgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVzIGFuIGFwcGVuZCBmaWxlIGZvciB0aGUgcmVjaXBlLgpAQCAtMTI2Miw3ICsxMjc1LDcgQEAKICAgICAgICAgPHRpdGxlPldvcmtpbmcgV2l0aCBSZWNpcGVzPC90aXRsZT4KIAogICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFdoZW4gYnVpbGRpbmcgYSByZWNpcGUgd2l0aCA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZDwvZmlsZW5hbWU+IHRoZQorICAgICAgICAgICAgV2hlbiBidWlsZGluZyBhIHJlY2lwZSB3aXRoIDxmaWxlbmFtZT5kZXZ0b29sIGJ1aWxkPC9maWxlbmFtZT4sIHRoZQogICAgICAgICAgICAgdHlwaWNhbCBidWlsZCBwcm9ncmVzc2lvbiBpcyBhcyBmb2xsb3dzOgogICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgogICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Nkay1tYW51YWwvc2RrLWludHJvLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Nkay1tYW51YWwvc2RrLWludHJvLnhtbAppbmRleCA2ODQwMTY5Li5iNjkyNWZhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL3Nkay1pbnRyby54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstaW50cm8ueG1sCkBAIC05LDggKzksOCBAQAogICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgogCiAgICAgPHBhcmE+Ci0gICAgICAgIFdlbGNvbWUgdG8gdGhlIFlvY3RvIFByb2plY3QgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspCi0gICAgICAgIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICBXZWxjb21lIHRvIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BtZW50IGFuZCB0aGUKKyAgICAgICAgRXh0ZW5zaWJsZSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKGVTREspIG1hbnVhbC4KICAgICAgICAgVGhpcyBtYW51YWwgcHJvdmlkZXMgaW5mb3JtYXRpb24gdGhhdCBleHBsYWlucyBob3cgdG8gdXNlIGJvdGggdGhlCiAgICAgICAgIFlvY3RvIFByb2plY3QgZXh0ZW5zaWJsZSBhbmQgc3RhbmRhcmQgU0RLcyB0byBkZXZlbG9wCiAgICAgICAgIGFwcGxpY2F0aW9ucyBhbmQgaW1hZ2VzLgpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICBuZXcgYXBwbGljYXRpb25zIGFuZCBsaWJyYXJpZXMgdG8gYW4gaW1hZ2UsIG1vZGlmeSB0aGUgc291cmNlIG9mIGFuCiAgICAgICAgIGV4aXN0aW5nIGNvbXBvbmVudCwgdGVzdCBjaGFuZ2VzIG9uIHRoZSB0YXJnZXQgaGFyZHdhcmUsIGFuZCBlYXNpbHkKICAgICAgICAgaW50ZWdyYXRlIGFuIGFwcGxpY2F0aW9uIGludG8gdGhlCi0gICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLXN5c3RlbS10ZXJtJz5PcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtPC91bGluaz4uCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2J1aWxkLXN5c3RlbS10ZXJtJz5PcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtPC91bGluaz4uCiAgICAgPC9wYXJhPgogCiAgICAgPHBhcmE+CkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAgICAgICAgICAgbWF0Y2hpbmcgc3lzcm9vdHMgKHRhcmdldCBhbmQgbmF0aXZlKSBhbGwgYnVpbHQgYnkgdGhlCiAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSAoZS5nLiB0aGUgU0RLKS4KICAgICAgICAgICAgICAgICBUaGUgdG9vbGNoYWluIGFuZCBzeXNyb290cyBhcmUgYmFzZWQgb24gYQotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGFuZCBleHRlbnNpb25zLAogICAgICAgICAgICAgICAgIHdoaWNoIGFsbG93cyB5b3UgdG8gY3Jvc3MtZGV2ZWxvcCBvbiB0aGUgaG9zdCBtYWNoaW5lIGZvciB0aGUKICAgICAgICAgICAgICAgICB0YXJnZXQgaGFyZHdhcmUuCkBAIC0yMDcsNyArMjA3LDcgQEAKIAogICAgICAgICA8cGFyYT4KICAgICAgICAgICAgIFRoZQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluJz5Dcm9zcy1EZXZlbG9wbWVudCBUb29sY2hhaW48L3VsaW5rPgorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluJz5Dcm9zcy1EZXZlbG9wbWVudCBUb29sY2hhaW48L3VsaW5rPgogICAgICAgICAgICAgY29uc2lzdHMgb2YgYSBjcm9zcy1jb21waWxlciwgY3Jvc3MtbGlua2VyLCBhbmQgY3Jvc3MtZGVidWdnZXIKICAgICAgICAgICAgIHRoYXQgYXJlIHVzZWQgdG8gZGV2ZWxvcCB1c2VyLXNwYWNlIGFwcGxpY2F0aW9ucyBmb3IgdGFyZ2V0ZWQKICAgICAgICAgICAgIGhhcmR3YXJlLgpAQCAtMjE1LDcgKzIxNSw3IEBACiAgICAgICAgICAgICBidWlsdC1pbiA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGZ1bmN0aW9uYWxpdHkuCiAgICAgICAgICAgICBUaGlzIHRvb2xjaGFpbiBpcyBjcmVhdGVkIGJ5IHJ1bm5pbmcgYSBTREsgaW5zdGFsbGVyIHNjcmlwdAogICAgICAgICAgICAgb3IgdGhyb3VnaCBhCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CiAgICAgICAgICAgICB0aGF0IGlzIGJhc2VkIG9uIHlvdXIgTWV0YWRhdGEgY29uZmlndXJhdGlvbiBvciBleHRlbnNpb24gZm9yCiAgICAgICAgICAgICB5b3VyIHRhcmdldGVkIGRldmljZS4KICAgICAgICAgICAgIFRoZSBjcm9zcy10b29sY2hhaW4gd29ya3Mgd2l0aCBhIG1hdGNoaW5nIHRhcmdldCBzeXNyb290LgpAQCAtMjQ1LDE2ICsyNDUsMTUgQEAKICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CiAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIGNsb25lZCB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQKICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSB0byBjcmVhdGUgYQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CiAgICAgICAgICAgICAgICAgICAgIGFuZCB5b3UgaGF2ZSBzb3VyY2VkIHRoZSBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQsIFFFTVUgaXMKICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIGFuZCBhdXRvbWF0aWNhbGx5IGF2YWlsYWJsZS4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgogICAgICAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBkb3dubG9hZGVkIGEgWW9jdG8gUHJvamVjdCByZWxlYXNlIGFuZCB1bnBhY2tlZAotICAgICAgICAgICAgICAgICAgICBpdCB0byBjcmVhdGUgYQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgYW5kIHlvdSBoYXZlIHNvdXJjZWQgdGhlIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCwgUUVNVSBpcwotICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgYW5kIGF1dG9tYXRpY2FsbHkgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgICAgICBpdCB0byBjcmVhdGUgYSBTb3VyY2UgRGlyZWN0b3J5IGFuZCB5b3UgaGF2ZSBzb3VyY2VkIHRoZQorICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQsIFFFTVUgaXMgaW5zdGFsbGVkIGFuZAorICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGF2YWlsYWJsZS4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgogICAgICAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBpbnN0YWxsZWQgdGhlIGNyb3NzLXRvb2xjaGFpbiB0YXJiYWxsIGFuZCB5b3UKQEAgLTI5NSw4ICsyOTQsOCBAQAogICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCB3b3JrZmxvdyB0aGF0CiAgICAgICAgICAgICB1c2VzIHRoZSBFY2xpcHNlIElERSBhbmQgZm9yIGEgZGV0YWlsZWQgZXhhbXBsZSBvZiBob3cgdG8gaW5zdGFsbAogICAgICAgICAgICAgYW5kIGNvbmZpZ3VyZSB0aGUgRWNsaXBzZSBZb2N0byBQcm9qZWN0IFBsdWctaW4sIHNlZSB0aGUKLSAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstZGV2ZWxvcGluZy1hcHBsaWNhdGlvbnMtdXNpbmctZWNsaXBzZSc+RGV2ZWxvcGluZyBBcHBsaWNhdGlvbnMgVXNpbmcgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz48L2xpbms+IgotICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstZWNsaXBzZS1wcm9qZWN0Jz5EZXZlbG9waW5nIEFwcGxpY2F0aW9ucyBVc2luZyA8dHJhZGVtYXJrIGNsYXNzPSd0cmFkZSc+RWNsaXBzZTwvdHJhZGVtYXJrPjwvbGluaz4iCisgICAgICAgICAgICBDaGFwdGVyLgogICAgICAgICA8L3BhcmE+CiAgICAgPC9zZWN0aW9uPgogCkBAIC0zODUsNyArMzg0LDcgQEAKICAgICAgICAgICAgICAgICB0byBkb3dubG9hZCBhbmQgbGVhcm4gYWJvdXQgdGhlIGVtdWxhdG9yLgogICAgICAgICAgICAgICAgIFNlZSB0aGUKICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZGV2LW1hbnVhbC1xZW11Jz5Vc2luZyB0aGUgUXVpY2sgRU1VbGF0b3IgKFFFTVUpPC91bGluaz4iCi0gICAgICAgICAgICAgICAgY2hhcHRlciBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwKKyAgICAgICAgICAgICAgICBjaGFwdGVyIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbAogICAgICAgICAgICAgICAgIGZvciBpbmZvcm1hdGlvbiBvbiB1c2luZyBRRU1VIHdpdGhpbiB0aGUgWW9jdG8KICAgICAgICAgICAgICAgICBQcm9qZWN0LjwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICA8L29yZGVyZWRsaXN0PgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstbWFudWFsLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Nkay1tYW51YWwvc2RrLW1hbnVhbC54bWwKaW5kZXggNWMyOGUzNC4uN2ZjMDQ3MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstbWFudWFsLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9zZGstbWFudWFsL3Nkay1tYW51YWwueG1sCkBAIC0xNywxNCArMTcsMTQgQEAKICAgICAgICAgPC9tZWRpYW9iamVjdD4KIAogICAgICAgICA8dGl0bGU+Ci0gICAgICAgICAgICBZb2N0byBQcm9qZWN0IFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoU0RLKSBEZXZlbG9wZXIncyBHdWlkZQorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBhbmQgdGhlIEV4dGVuc2libGUgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChlU0RLKQogICAgICAgICA8L3RpdGxlPgogCiAgICAgICAgIDxhdXRob3Jncm91cD4KICAgICAgICAgICAgIDxhdXRob3I+CiAgICAgICAgICAgICAgICAgPGZpcnN0bmFtZT5TY290dDwvZmlyc3RuYW1lPiA8c3VybmFtZT5SaWZlbmJhcms8L3N1cm5hbWU+CiAgICAgICAgICAgICAgICAgPGFmZmlsaWF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8b3JnbmFtZT5TY290dHkncyBEb2N1bWVudGF0aW9uIFNlcnZpY2VzLCBMTEM8L29yZ25hbWU+CisgICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPlNjb3R0eSdzIERvY3VtZW50YXRpb24gU2VydmljZXMsIElOQzwvb3JnbmFtZT4KICAgICAgICAgICAgICAgICA8L2FmZmlsaWF0aW9uPgogICAgICAgICAgICAgICAgIDxlbWFpbD5zcmlmZW5iYXJrQGdtYWlsLmNvbTwvZW1haWw+CiAgICAgICAgICAgICA8L2F1dGhvcj4KQEAgLTQ3LDI0ICs0NywxOSBAQAogICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjMgUmVsZWFzZS48L3JldnJlbWFyaz4KICAgICAgICAgICAgIDwvcmV2aXNpb24+CiAgICAgICAgICAgICA8cmV2aXNpb24+Ci0gICAgICAgICAgICAgICAgPHJldm51bWJlcj4yLjMuMTwvcmV2bnVtYmVyPgotICAgICAgICAgICAgICAgIDxkYXRlPkp1bmUgMjAxNzwvZGF0ZT4KLSAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi4zLjEgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjIuNDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxNzwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi40IFJlbGVhc2UuPC9yZXZyZW1hcms+CiAgICAgICAgICAgICA8L3JldmlzaW9uPgogICAgICAgICAgICAgPHJldmlzaW9uPgotICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi4zLjI8L3Jldm51bWJlcj4KLSAgICAgICAgICAgICAgICA8ZGF0ZT5TZXB0ZW1iZXIgMjAxNzwvZGF0ZT4KLSAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi4zLjIgUmVsZWFzZS48L3JldnJlbWFyaz4KLSAgICAgICAgICAgIDwvcmV2aXNpb24+Ci0gICAgICAgICAgICA8cmV2aXNpb24+Ci0gICAgICAgICAgICAgICAgPHJldm51bWJlcj4yLjMuMzwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi40LjE8L3Jldm51bWJlcj4KICAgICAgICAgICAgICAgICA8ZGF0ZT5KYW51YXJ5IDIwMTg8L2RhdGU+Ci0gICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDIuMy4zIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDIuNC4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CiAgICAgICAgICAgICA8L3JldmlzaW9uPgogICAgICAgICAgICAgPHJldmlzaW9uPgotICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi4zLjQ8L3Jldm51bWJlcj4KLSAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE4PC9kYXRlPgotICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjMuNCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi40LjI8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5NYXJjaCAyMDE4PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjQuMiBSZWxlYXNlLjwvcmV2cmVtYXJrPgogICAgICAgICAgICAgPC9yZXZpc2lvbj4KICAgICAgICA8L3Jldmhpc3Rvcnk+CiAKQEAgLTgxLDI4ICs3NiwyOSBAQAogICAgICAgICAgICA8bm90ZT48dGl0bGU+TWFudWFsIE5vdGVzPC90aXRsZT4KICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CiAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICBGb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IFNvZnR3YXJlCi0gICAgICAgICAgICAgICAgICAgICAgIERldmVsb3BtZW50IEtpdCAoU0RLKSBEZXZlbG9wZXIncyBHdWlkZSBhc3NvY2lhdGVkIHdpdGgKLSAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBZb2N0byBQcm9qZWN0IHJlbGVhc2UgKHZlcnNpb24gJllPQ1RPX0RPQ19WRVJTSU9OOyksCi0gICAgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUgWW9jdG8gUHJvamVjdCBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKFNESykKLSAgICAgICAgICAgICAgICAgICAgICAgRGV2ZWxvcGVyJ3MgR3VpZGUgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2ZXJzaW9uIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+WW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBhbmQgdGhlIEV4dGVuc2libGUgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChlU0RLKTwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgIG1hbnVhbCBpcyBmb3IgdGhlICZZT0NUT19ET0NfVkVSU0lPTjsgcmVsZWFzZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgVG8gYmUgc3VyZSB5b3UgaGF2ZSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIG1hbnVhbAorICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhpcyByZWxlYXNlLCB1c2UgdGhlIG1hbnVhbCBmcm9tIHRoZQogICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L2RvY3VtZW50YXRpb24nPllvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbiBwYWdlPC91bGluaz4uCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2ZXJzaW9uIG9mIHRoZSBtYW51YWwgaXMgdmVyc2lvbgotICAgICAgICAgICAgICAgICAgICAgICAmWU9DVE9fRE9DX1ZFUlNJT047LgotICAgICAgICAgICAgICAgICAgICAgICBGb3IgbGF0ZXIgcmVsZWFzZXMgb2YgdGhlIFlvY3RvIFByb2plY3QgKGlmIHRoZXkgZXhpc3QpLAotICAgICAgICAgICAgICAgICAgICAgICBnbyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgRm9yIG1hbnVhbHMgYXNzb2NpYXRlZCB3aXRoIG90aGVyIHJlbGVhc2VzIG9mIHRoZSBZb2N0bworICAgICAgICAgICAgICAgICAgICAgICBQcm9qZWN0LCBnbyB0byB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy9kb2N1bWVudGF0aW9uJz5Zb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24gcGFnZTwvdWxpbms+CiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB1c2UgdGhlIGRyb3AtZG93biAiQWN0aXZlIFJlbGVhc2VzIiBidXR0b24KLSAgICAgICAgICAgICAgICAgICAgICAgYW5kIGNob29zZSB0aGUgWW9jdG8gUHJvamVjdCB2ZXJzaW9uIGZvciB3aGljaCB5b3Ugd2FudAotICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFudWFsLgorICAgICAgICAgICAgICAgICAgICAgICBhbmQgY2hvb3NlIHRoZSBtYW51YWwgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXNpcmVkCisgICAgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QuCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgRm9yIGFuIGluLWRldmVsb3BtZW50IHZlcnNpb24gb2YgdGhlIFlvY3RvIFByb2plY3QKLSAgICAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspIERldmVsb3BlcidzIEd1aWRlLCBzZWUKLSAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfVVJMOy9sYXRlc3Qvc2RrLW1hbnVhbC9zZGstbWFudWFsLmh0bWwnPjwvdWxpbms+LgotICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIHJlcG9ydCBhbnkgaW5hY2N1cmFjaWVzIG9yIHByb2JsZW1zIHdpdGggdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgbWFudWFsLCBzZW5kIGFuIGVtYWlsIHRvIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgICAgICBkaXNjdXNzaW9uIGdyb3VwIGF0CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG9AeW9jdG9wcm9qZWN0LmNvbTwvZmlsZW5hbWU+IG9yIGxvZyBpbnRvCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZnJlZW5vZGUgPGZpbGVuYW1lPiN5b2N0bzwvZmlsZW5hbWU+IGNoYW5uZWwuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgICAgICA8L25vdGU+CiAKQEAgLTExOCw2ICsxMTQsOCBAQAogCiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ic2RrLXdvcmtpbmctcHJvamVjdHMueG1sIi8+CiAKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJzZGstZWNsaXBzZS1wcm9qZWN0LnhtbCIvPgorCiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ic2RrLWFwcGVuZGl4LW9idGFpbi54bWwiLz4KIAogICAgIDx4aTppbmNsdWRlIGhyZWY9InNkay1hcHBlbmRpeC1jdXN0b21pemluZy54bWwiLz4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Nkay1tYW51YWwvc2RrLXdvcmtpbmctcHJvamVjdHMueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstd29ya2luZy1wcm9qZWN0cy54bWwKaW5kZXggNTRiYzRkNy4uNjk2NWUzZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstd29ya2luZy1wcm9qZWN0cy54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vc2RrLW1hbnVhbC9zZGstd29ya2luZy1wcm9qZWN0cy54bWwKQEAgLTEwLDggKzEwLDkgQEAKICAgICAgICAgWW91IGNhbiB1c2UgdGhlIFNESyB0b29sY2hhaW4gZGlyZWN0bHkgd2l0aCBNYWtlZmlsZSwKICAgICAgICAgQXV0b3Rvb2xzLCBhbmQgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz4gYmFzZWQKICAgICAgICAgcHJvamVjdHMuCi0gICAgICAgIFRoaXMgY2hhcHRlciBjb3ZlcnMgaW5mb3JtYXRpb24gc3BlY2lmaWMgdG8gZWFjaCBvZiB0aGVzZSB0eXBlcyBvZgotICAgICAgICBwcm9qZWN0cy4KKyAgICAgICAgVGhpcyBjaGFwdGVyIGNvdmVycyB0aGUgZmlyc3QgdHdvLCB3aGlsZSB0aGUKKyAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1lY2xpcHNlLXByb2plY3QnPkRldmVsb3BpbmcgQXBwbGljYXRpb25zIFVzaW5nIDx0cmFkZW1hcmsgY2xhc3M9J3RyYWRlJz5FY2xpcHNlPC90cmFkZW1hcms+PC9saW5rPiIKKyAgICAgICAgQ2hhcHRlciBjb3ZlcnMgdGhlIGxhdHRlci4KICAgICA8L3BhcmE+CiAKICAgICA8c2VjdGlvbiBpZD0nYXV0b3Rvb2xzLWJhc2VkLXByb2plY3RzJz4KQEAgLTI3NiwxMTg0ICsyNzcsNiBAQAogICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICA8L3BhcmE+CiAgICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9J3Nkay1kZXZlbG9waW5nLWFwcGxpY2F0aW9ucy11c2luZy1lY2xpcHNlJz4KLSAgICAgICAgPHRpdGxlPkRldmVsb3BpbmcgQXBwbGljYXRpb25zIFVzaW5nIDx0cmFkZW1hcmsgY2xhc3M9J3RyYWRlJz5FY2xpcHNlPC90cmFkZW1hcms+PC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIElmIHlvdSBhcmUgZmFtaWxpYXIgd2l0aCB0aGUgcG9wdWxhciBFY2xpcHNlIElERSwgeW91IGNhbiB1c2UgYW4KLSAgICAgICAgICAgIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbiB0byBhbGxvdyB5b3UgdG8gZGV2ZWxvcCwgZGVwbG95LCBhbmQgdGVzdCB5b3VyCi0gICAgICAgICAgICBhcHBsaWNhdGlvbiBhbGwgZnJvbSB3aXRoaW4gRWNsaXBzZS4KLSAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgZ2VuZXJhbCB3b3JrZmxvdyB1c2luZyB0aGUgU0RLIGFuZCBFY2xpcHNlCi0gICAgICAgICAgICBhbmQgaG93IHRvIGNvbmZpZ3VyZSBhbmQgc2V0IHVwIEVjbGlwc2UuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8c2VjdGlvbiBpZD0nd29ya2Zsb3ctdXNpbmctZWNsaXBzZSc+Ci0gICAgICAgICAgICA8dGl0bGU+V29ya2Zsb3cgVXNpbmcgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz48L3RpdGxlPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBhbmQgc3VwcG9ydGluZyBsaXN0IHN1bW1hcml6ZSB0aGUKLSAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCBnZW5lcmFsIHdvcmtmbG93IHRoYXQgZW1wbG95cyBib3RoIHRoZQotICAgICAgICAgICAgICAgIFNESyBFY2xpcHNlLgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvc2RrLWVjbGlwc2UtZGV2LWZsb3cucG5nIgotICAgICAgICAgICAgICAgICAgICB3aWR0aD0iN2luIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZT0iMTAwIiAvPgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5QcmVwYXJlIHRoZSBob3N0IHN5c3RlbSBmb3IgdGhlIFlvY3RvCi0gICAgICAgICAgICAgICAgICAgICAgICBQcm9qZWN0PC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBTZWUKLSAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNkZXRhaWxlZC1zdXBwb3J0ZWQtZGlzdHJvcyc+U3VwcG9ydGVkIExpbnV4IERpc3RyaWJ1dGlvbnM8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlcXVpcmVkLXBhY2thZ2VzLWZvci10aGUtaG9zdC1kZXZlbG9wbWVudC1zeXN0ZW0nPlJlcXVpcmVkIFBhY2thZ2VzIGZvciB0aGUgSG9zdCBEZXZlbG9wbWVudCBTeXN0ZW08L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zIGJvdGggaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVtZW50cy4KLSAgICAgICAgICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIGJlIHN1cmUgeW91ciBob3N0IHN5c3RlbSBoYXMgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eHRlcm08L2ZpbGVuYW1lPiBwYWNrYWdlIGluc3RhbGxlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+U2VjdXJlIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCB0YXJnZXQKLSAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBoYXZlIGEgdGFyZ2V0IGtlcm5lbCBpbWFnZSB0aGF0IGhhcyBiZWVuIGJ1aWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS48L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5EZXBlbmRpbmcgb24gd2hldGhlciB0aGUgWW9jdG8gUHJvamVjdCBoYXMgYQotICAgICAgICAgICAgICAgICAgICAgICAgcHJlLWJ1aWx0IGltYWdlIHRoYXQgbWF0Y2hlcyB5b3VyIHRhcmdldCBhcmNoaXRlY3R1cmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB3aGVyZSB5b3UgYXJlIGdvaW5nIHRvIHJ1biB0aGUgaW1hZ2Ugd2hpbGUgeW91Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wIHlvdXIgYXBwbGljYXRpb24gKFFFTVUgb3IgcmVhbCBoYXJkd2FyZSksIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgYXJlYSBmcm9tIHdoaWNoIHlvdSBnZXQgdGhlIGltYWdlIGRpZmZlcnMuCi0gICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG93bmxvYWQgdGhlIGltYWdlIGZyb20KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX01BQ0hJTkVTX0RMX1VSTDsnPjxmaWxlbmFtZT5tYWNoaW5lczwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgeW91ciB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIHN1cHBvcnRlZCBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IGFyZSBnb2luZyB0byBkZXZlbG9wIGFuZCB0ZXN0IHlvdXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24gb24gYWN0dWFsIGhhcmR3YXJlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvd25sb2FkIHRoZSBpbWFnZSBmcm9tCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19RRU1VX0RMX1VSTDsnPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFjaGluZXMvcWVtdTwvZmlsZW5hbWU+PC91bGluaz4gaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91ciB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIHN1cHBvcnRlZCBhbmQgeW91Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBnb2luZyB0byBkZXZlbG9wIGFuZCB0ZXN0IHlvdXIgYXBwbGljYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIFFFTVUgZW11bGF0b3IuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgeW91ciBpbWFnZSBpZiB5b3UgY2Fubm90IGZpbmQgYSBwcmUtYnVpbHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgdGhhdCBtYXRjaGVzIHlvdXIgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91ciB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIHNpbWlsYXIgdG8gYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlLCB5b3UgY2FuIG1vZGlmeSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsIGltYWdlIGJlZm9yZSB5b3UgYnVpbGQgaXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BhdGNoaW5nLXRoZS1rZXJuZWwnPlBhdGNoaW5nIHRoZSBLZXJuZWw8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW51YWwgZm9yIGFuIGV4YW1wbGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+PGVtcGhhc2lzPkluc3RhbGwgdGhlIFNESzwvZW1waGFzaXM+OgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIFNESyBwcm92aWRlcyBhIHRhcmdldC1zcGVjaWZpYyBjcm9zcy1kZXZlbG9wbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluLCB0aGUgcm9vdCBmaWxlc3lzdGVtLCB0aGUgUUVNVSBlbXVsYXRvciwgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICBvdGhlciB0b29scyB0aGF0IGNhbiBoZWxwIHlvdSBkZXZlbG9wIHlvdXIgYXBwbGljYXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGluc3RhbGwgdGhlIFNESywgc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1pbnN0YWxsaW5nLXRoZS1zZGsnPkluc3RhbGxpbmcgdGhlIFNESzwvbGluaz4iCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5TZWN1cmUgdGhlIHRhcmdldCByb290IGZpbGVzeXN0ZW0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgQ3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBmaW5kIGFuZCBkb3dubG9hZCB0aGUgYXBwcm9wcmlhdGUgcm9vdAotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSBhbmQgdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbi48L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgY2FuIGZpbmQgdGhlIHRhcmJhbGxzIGZvciB0aGUgcm9vdCBmaWxlc3lzdGVtCi0gICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgc2FtZSBhcmVhIHVzZWQgZm9yIHRoZSBrZXJuZWwgaW1hZ2UuCi0gICAgICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgaW1hZ2UgeW91IGFyZSBydW5uaW5nLCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QgZmlsZXN5c3RlbSB5b3UgbmVlZCBkaWZmZXJzLgotICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgZGV2ZWxvcGluZyBhbiBhcHBsaWNhdGlvbiB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICBydW5zIG9uIGFuIGltYWdlIHRoYXQgc3VwcG9ydHMgU2F0bywgeW91IG5lZWQgdG8gZ2V0IGEKLSAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QgZmlsZXN5c3RlbSB0aGF0IHN1cHBvcnRzIFNhdG8uPC9wYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IGNhbiBmaW5kIHRoZSBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW5zIGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fVE9PTENIQUlOX0RMX1VSTDsnPjxmaWxlbmFtZT50b29sY2hhaW5zPC9maWxlbmFtZT48L3VsaW5rPi4KLSAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gZ2V0IHRoZSBjb3JyZWN0IHRvb2xjaGFpbiBmb3IgeW91cgotICAgICAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgaG9zdCBhbmQgeW91ciB0YXJnZXQgYXJjaGl0ZWN0dXJlLgotICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nc2RrLWxvY2F0aW5nLXByZS1idWlsdC1zZGstaW5zdGFsbGVycyc+TG9jYXRpbmcgUHJlLUJ1aWx0IFNESyBJbnN0YWxsZXJzPC9saW5rPiIKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uIGFuZCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstaW5zdGFsbGluZy10aGUtc2RrJz5JbnN0YWxsaW5nIHRoZSBTREs8L2xpbms+IgotICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5zdGFsbGF0aW9uIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXMgYW4gYWx0ZXJuYXRpdmUgdG8gZG93bmxvYWRpbmcgYW4gU0RLLCB5b3UgY2FuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgdGhlIFNESyBpbnN0YWxsZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGJ1aWxkaW5nIHRoZSBpbnN0YWxsZXIsIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLWJ1aWxkaW5nLWFuLXNkay1pbnN0YWxsZXInPkJ1aWxkaW5nIGFuIFNESyBJbnN0YWxsZXI8L2xpbms+IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5vdGhlciBoZWxwZnVsIHJlc291cmNlIGZvciBidWlsZGluZyBhbiBpbnN0YWxsZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL1RpcHNBbmRUcmlja3MvUnVubmluZ0VjbGlwc2VBZ2FpbnN0QnVpbHRJbWFnZSc+Q29va2Jvb2sgZ3VpZGUgdG8gTWFraW5nIGFuIEVjbGlwc2UgRGVidWcgQ2FwYWJsZSBJbWFnZTwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lraSBwYWdlLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5DcmVhdGUgYW5kIGJ1aWxkIHlvdXIgYXBwbGljYXRpb248L2VtcGhhc2lzPjoKLSAgICAgICAgICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQsIHlvdSBuZWVkIHRvIGhhdmUgc291cmNlIGZpbGVzIGZvciB5b3VyCi0gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgdGhlIGZpbGVzLCB5b3UgY2FuIHVzZSB0aGUgRWNsaXBzZSBJREUKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvIGltcG9ydCB0aGVtIGFuZCBidWlsZCB0aGUgcHJvamVjdC4KLSAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgbm90IHVzaW5nIEVjbGlwc2UsIHlvdSBuZWVkIHRvIHVzZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGNyb3NzLWRldmVsb3BtZW50IHRvb2xzIHlvdSBoYXZlIGluc3RhbGxlZCB0byBjcmVhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbWFnZS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkRlcGxveSB0aGUgaW1hZ2Ugd2l0aCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uPC9lbXBoYXNpcz46Ci0gICAgICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGUgRWNsaXBzZSBJREUsIHlvdSBjYW4gZGVwbG95IHlvdXIgaW1hZ2UgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZSBvciB0byBRRU1VIHRocm91Z2ggdGhlIHByb2plY3QncyBwcmVmZXJlbmNlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyB1c2UgRWNsaXBzZSB0byBsb2FkIGFuZCB0ZXN0IHlvdXIgaW1hZ2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIFFFTVUuCi0gICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZGV2LW1hbnVhbC1xZW11Jz5Vc2luZyB0aGUgUXVpY2sgRU1VbGF0b3IgKFFFTVUpPC91bGluaz4iCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGFwdGVyIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbAotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGluZm9ybWF0aW9uIG9uIHVzaW5nIFFFTVUuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlRlc3QgYW5kIGRlYnVnIHRoZSBhcHBsaWNhdGlvbjwvZW1waGFzaXM+OgotICAgICAgICAgICAgICAgICAgICAgICAgT25jZSB5b3VyIGFwcGxpY2F0aW9uIGlzIGRlcGxveWVkLCB5b3UgbmVlZCB0byB0ZXN0IGl0LgotICAgICAgICAgICAgICAgICAgICAgICAgV2l0aGluIHRoZSBFY2xpcHNlIElERSwgeW91IGNhbiB1c2UgdGhlIGRlYnVnZ2luZwotICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgYWxvbmcgd2l0aCBzdXBwb3J0ZWQgcGVyZm9ybWFuY2UgZW5oYW5jaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xpbnV4dG9vbHMvJz5MaW51eCBUb29sczwvdWxpbms+LgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgIDxzZWN0aW9uIGlkPSdhZHQtZWNsaXBzZSc+Ci0gICAgICAgICAgICA8dGl0bGU+V29ya2luZyBXaXRoaW4gRWNsaXBzZTwvdGl0bGU+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSBFY2xpcHNlIElERSBpcyBhIHBvcHVsYXIgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgYW5kIGl0Ci0gICAgICAgICAgICAgICAgZnVsbHkgc3VwcG9ydHMgZGV2ZWxvcG1lbnQgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QuCi0gICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFdoZW4geW91IGluc3RhbGwgYW5kIGNvbmZpZ3VyZSB0aGUgRWNsaXBzZSBZb2N0byBQcm9qZWN0Ci0gICAgICAgICAgICAgICAgUGx1Zy1pbiBpbnRvIHRoZSBFY2xpcHNlIElERSwgeW91IG1heGltaXplIHlvdXIgWW9jdG8KLSAgICAgICAgICAgICAgICBQcm9qZWN0IGV4cGVyaWVuY2UuCi0gICAgICAgICAgICAgICAgSW5zdGFsbGluZyBhbmQgY29uZmlndXJpbmcgdGhlIFBsdWctaW4gcmVzdWx0cyBpbiBhbgotICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHRoYXQgaGFzIGV4dGVuc2lvbnMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGxldAotICAgICAgICAgICAgICAgIHlvdSBtb3JlIGVhc2lseSBkZXZlbG9wIHNvZnR3YXJlLgotICAgICAgICAgICAgICAgIFRoZXNlIGV4dGVuc2lvbnMgYWxsb3cgZm9yIGNyb3NzLWNvbXBpbGF0aW9uLCBkZXBsb3ltZW50LCBhbmQKLSAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgeW91ciBvdXRwdXQgaW50byBhIFFFTVUgZW11bGF0aW9uIHNlc3Npb24gYXMgd2VsbAotICAgICAgICAgICAgICAgIGFzIGFjdHVhbCB0YXJnZXQgaGFyZHdhcmUuCi0gICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHBlcmZvcm0gY3Jvc3MtZGVidWdnaW5nIGFuZCBwcm9maWxpbmcuCi0gICAgICAgICAgICAgICAgVGhlIGVudmlyb25tZW50IGFsc28gc3VwcG9ydHMgcGVyZm9ybWFuY2UgZW5oYW5jaW5nCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5lY2xpcHNlLm9yZy9saW51eHRvb2xzLyc+dG9vbHM8L3VsaW5rPgotICAgICAgICAgICAgICAgIHRoYXQgYWxsb3cgeW91IHRvIHBlcmZvcm0gcmVtb3RlIHByb2ZpbGluZywgdHJhY2luZywKLSAgICAgICAgICAgICAgICBjb2xsZWN0aW9uIG9mIHBvd2VyIGRhdGEsIGNvbGxlY3Rpb24gb2YgbGF0ZW5jeSBkYXRhLCBhbmQKLSAgICAgICAgICAgICAgICBjb2xsZWN0aW9uIG9mIHBlcmZvcm1hbmNlIGRhdGEuCi0gICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgIFRoaXMgcmVsZWFzZSBvZiB0aGUgWW9jdG8gUHJvamVjdCBzdXBwb3J0cyBib3RoIHRoZSBOZW9uCi0gICAgICAgICAgICAgICAgICAgIGFuZCBNYXJzIHZlcnNpb25zIG9mIHRoZSBFY2xpcHNlIElERS4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlIE5lb24KLSAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LgotICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGUgTWFycyB2ZXJzaW9uIG9mIEVjbGlwc2UKLSAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCwgc2VlCi0gICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstYXBwZW5kaXgtbGF0ZXN0LXlwLWVjbGlwc2UtcGx1Zy1pbic+QXBwZW5kaXggQzwvbGluaz4uCi0gICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICA8c2VjdGlvbiBpZD0nbmVvbi1zZXR0aW5nLXVwLXRoZS1lY2xpcHNlLWlkZSc+Ci0gICAgICAgICAgICAgICAgPHRpdGxlPlNldHRpbmcgVXAgdGhlIE5lb24gVmVyc2lvbiBvZiB0aGUgRWNsaXBzZSBJREU8L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRvIGRldmVsb3Agd2l0aGluIHRoZSBFY2xpcHNlIElERSwgeW91IG5lZWQgdG8gZG8gdGhlCi0gICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZzoKLSAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGwgdGhlIE5lb24gdmVyc2lvbiBvZiB0aGUgRWNsaXBzZSBJREUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJlIHRoZSBFY2xpcHNlIElERS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsIHRoZSBFY2xpcHNlIFlvY3RvIFBsdWctaW4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJlIHRoZSBFY2xpcHNlIFlvY3RvIFBsdWctaW4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgRG8gbm90IGluc3RhbGwgRWNsaXBzZSBmcm9tIHlvdXIgZGlzdHJpYnV0aW9uJ3MgcGFja2FnZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gaW5zdGFsbCBFY2xpcHNlIGZyb20gdGhlIG9mZmljaWFsIEVjbGlwc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkIHNpdGUgYXMgZGlyZWN0ZWQgaW4gdGhlIG5leHQgc2VjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZW9uLWluc3RhbGxpbmctZWNsaXBzZS1pZGUnPgotICAgICAgICAgICAgICAgICAgICA8dGl0bGU+SW5zdGFsbGluZyB0aGUgTmVvbiBFY2xpcHNlIElERTwvdGl0bGU+Ci0KLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gbG9jYXRlLCBpbnN0YWxsLCBhbmQgY29uZmlndXJlCi0gICAgICAgICAgICAgICAgICAgICAgICBOZW9uIEVjbGlwc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+TG9jYXRlIHRoZSBOZW9uIERvd25sb2FkOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wZW4gYSBicm93c2VyIGFuZCBnbyB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LmVjbGlwc2Uub3JnL25lb24vJz5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL25lb24vPC91bGluaz4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkRvd25sb2FkIHRoZSBUYXJiYWxsOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrIHRocm91Z2ggdGhlICJEb3dubG9hZCIgYnV0dG9ucyB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZCB0aGUgZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+VW5wYWNrIHRoZSBUYXJiYWxsOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vdmUgdG8gYSBjbGVhbiBkaXJlY3RvcnkgYW5kIHVucGFjayB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyYmFsbC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgY2QgfgotICAgICAkIHRhciAteHp2ZiB+L0Rvd25sb2Fkcy9lY2xpcHNlLWluc3QtbGludXg2NC50YXIuZ3oKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmVyeXRoaW5nIHVucGFja3MgaW50byBhIGZvbGRlciBuYW1lZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWNsaXBzZS1pbnN0YWxsZXIiLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5MYXVuY2ggdGhlIEluc3RhbGxlcjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBjb21tYW5kcyB0byBsYXVuY2ggdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGNkIH4vZWNsaXBzZS1pbnN0YWxsZXIKLSAgICAgJCAuL2VjbGlwc2UtaW5zdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlNlbGVjdCBZb3VyIElERTo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcm9tIHRoZSBsaXN0LCBzZWxlY3QgdGhlICJFY2xpcHNlIElERSBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQy9DKysgRGV2ZWxvcGVycyIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkluc3RhbGwgdGhlIFNvZnR3YXJlOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjY2VwdCB0aGUgZGVmYXVsdCAiY3BwLW5lb24iIGRpcmVjdG9yeSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2sgIkluc3RhbGwiLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHQgYW55IGxpY2Vuc2UgYWdyZWVtZW50cyBhbmQgYXBwcm92ZSBhbnkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGlmaWNhdGVzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5MYXVuY2ggTmVvbjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGljayB0aGUgIkxhdW5jaCIgYnV0dG9uIGFuZCBhY2NlcHQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgIndvcmtzcGFjZSIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZW9uLWNvbmZpZ3VyaW5nLXRoZS1tYXJzLWVjbGlwc2UtaWRlJz4KLSAgICAgICAgICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIHRoZSBOZW9uIEVjbGlwc2UgSURFPC90aXRsZT4KLQotICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBzdGVwcyB0byBjb25maWd1cmUgdGhlIE5lb24gRWNsaXBzZSBJREUuCi0gICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gaG93IHlvdSBpbnN0YWxsZWQgRWNsaXBzZSBhbmQgd2hhdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBoYXZlIGFscmVhZHkgZG9uZSwgc29tZSBvZiB0aGUgb3B0aW9ucyB3aWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGFwcGVhci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgY2Fubm90IGZpbmQgYW4gb3B0aW9uIGFzIGRpcmVjdGVkIGJ5IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbnVhbCwgaXQgaGFzIGFscmVhZHkgYmVlbiBpbnN0YWxsZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIEVjbGlwc2UgaXMgcnVubmluZyBhbmQgeW91IGFyZSBpbiB5b3VyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtiZW5jaC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgIkluc3RhbGwgTmV3IFNvZnR3YXJlIiBmcm9tIHRoZSAiSGVscCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVsbC1kb3duIG1lbnUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOZW9uIC0gaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzL25lb24iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlICJXb3JrIHdpdGg6IiBwdWxsLWRvd24gbWVudS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHBhbmQgdGhlIGJveCBuZXh0IHRvICJMaW51eCBUb29scyIgYW5kIHNlbGVjdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIEMvQysrIFJlbW90ZSAoT3ZlciBUQ0YvVEUpIFJ1bi9EZWJ1ZyBMYXVuY2hlcgotICAgICBUTSBUZXJtaW5hbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5kIHRoZSBib3ggbmV4dCB0byAiTW9iaWxlIGFuZCBEZXZpY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2ZWxvcG1lbnQiIGFuZCBzZWxlY3QgdGhlIGZvbGxvd2luZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3hlczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBDL0MrKyBSZW1vdGUgKE92ZXIgVENGL1RFKSBSdW4vRGVidWcgTGF1bmNoZXIKLSAgICAgUmVtb3RlIFN5c3RlbSBFeHBsb3JlciBVc2VyIEFjdGlvbnMKLSAgICAgVE0gVGVybWluYWwKLSAgICAgVENGIFJlbW90ZSBTeXN0ZW0gRXhwbG9yZXIgYWRkLWluCi0gICAgIFRDRiBUYXJnZXQgRXhwbG9yZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cGFuZCB0aGUgYm94IG5leHQgdG8gIlByb2dyYW1taW5nIExhbmd1YWdlcyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNlbGVjdCB0aGUgZm9sbG93aW5nIGJveDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICBDL0MrKyBEZXZlbG9wbWVudCBUb29scyBTREsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gYnkgY2xpY2tpbmcgdGhyb3VnaAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZSAiTmV4dCIgYW5kICJGaW5pc2giIGJ1dHRvbnMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZW9uLWluc3RhbGxpbmctdGhlLWVjbGlwc2UteW9jdG8tcGx1Zy1pbic+Ci0gICAgICAgICAgICAgICAgICAgIDx0aXRsZT5JbnN0YWxsaW5nIG9yIEFjY2Vzc2luZyB0aGUgTmVvbiBFY2xpcHNlIFlvY3RvIFBsdWctaW48L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBpbnN0YWxsIHRoZSBFY2xpcHNlIFlvY3RvIFBsdWctaW4gaW50byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIEVjbGlwc2UgSURFIG9uZSBvZiB0d28gd2F5czogIHVzZSB0aGUgWW9jdG8gUHJvamVjdCdzCi0gICAgICAgICAgICAgICAgICAgICAgICBFY2xpcHNlIFVwZGF0ZSBzaXRlIHRvIGluc3RhbGwgdGhlIHByZS1idWlsdCBwbHVnLWluCi0gICAgICAgICAgICAgICAgICAgICAgICBvciBidWlsZCBhbmQgaW5zdGFsbCB0aGUgcGx1Zy1pbiBmcm9tIHRoZSBsYXRlc3QKLSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBjb2RlLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J25lb24tbmV3LXNvZnR3YXJlJz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0aXRsZT5JbnN0YWxsaW5nIHRoZSBQcmUtYnVpbHQgUGx1Zy1pbiBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IEVjbGlwc2UgVXBkYXRlIFNpdGU8L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbyBpbnN0YWxsIHRoZSBOZW9uIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbiBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZSBzaXRlLCBmb2xsb3cgdGhlc2Ugc3RlcHM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydCB1cCB0aGUgRWNsaXBzZSBJREUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gRWNsaXBzZSwgc2VsZWN0ICJJbnN0YWxsIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUiIGZyb20gdGhlICJIZWxwIiBtZW51LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrICJBZGQuLi4iIGluIHRoZSAiV29yayB3aXRoOiIgYXJlYS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiZFQ0xJUFNFX0RMX1BMVUdJTl9VUkw7L25lb248L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIFVSTCBmaWVsZCBhbmQgcHJvdmlkZSBhIG1lYW5pbmdmdWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgaW4gdGhlICJOYW1lIiBmaWVsZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGljayAiT0siIHRvIGhhdmUgdGhlIGVudHJ5IGFkZGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgIldvcmsgd2l0aDoiIGRyb3AtZG93biBsaXN0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCB0aGUgZW50cnkgZm9yIHRoZSBwbHVnLWluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSAiV29yayB3aXRoOiIgZHJvcC1kb3duIGxpc3QuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2sgdGhlIGJveGVzIG5leHQgdG8gdGhlIGZvbGxvd2luZzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgWW9jdG8gUHJvamVjdCBTREsgUGx1Zy1pbgotICAgICBZb2N0byBQcm9qZWN0IERvY3VtZW50YXRpb24gcGx1Zy1pbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBsZXRlIHRoZSByZW1haW5pbmcgc29mdHdhcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxhdGlvbiBzdGVwcyBhbmQgdGhlbiByZXN0YXJ0IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWNsaXBzZSBJREUgdG8gZmluaXNoIHRoZSBpbnN0YWxsYXRpb24gb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwbHVnLWluLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBjbGljayAiT0siIHdoZW4gcHJvbXB0ZWQgYWJvdXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsaW5nIHNvZnR3YXJlIHRoYXQgY29udGFpbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb250ZW50LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZW9uLXppcC1maWxlLW1ldGhvZCc+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGl0bGU+SW5zdGFsbGluZyB0aGUgUGx1Zy1pbiBVc2luZyB0aGUgTGF0ZXN0IFNvdXJjZSBDb2RlPC90aXRsZT4KLQotICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gaW5zdGFsbCB0aGUgTmVvbiBFY2xpcHNlIFlvY3RvIFBsdWctaW4gZnJvbSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXRlc3Qgc291cmNlIGNvZGUsIGZvbGxvdyB0aGVzZSBzdGVwczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgeW91ciBkZXZlbG9wbWVudCBzeXN0ZW0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcyBKREsgMS44KwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGwgWDExLXJlbGF0ZWQgcGFja2FnZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgc3VkbyBhcHQtZ2V0IGluc3RhbGwgeGF1dGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBhIG5ldyB0ZXJtaW5hbCBzaGVsbCwgY3JlYXRlIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3J5IHdpdGg6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgY2QgfgotICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9lY2xpcHNlLXBva3kKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgR2l0IHRvIGNyZWF0ZSB0aGUgY29ycmVjdCB0YWc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgY2Qgfi9lY2xpcHNlLXBva3kKLSAgICAgJCBnaXQgY2hlY2tvdXQgbmVvbi95b2N0by0mRElTVFJPOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjcmVhdGVzIGEgbG9jYWwgdGFnIG5hbWVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmVvbi95b2N0by0mRElTVFJPOzwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiB0aGUgYnJhbmNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b3JpZ2luL25lb24tbWFzdGVyPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgYXJlIHB1dCBpbnRvIGEgZGV0YWNoZWQgSEVBRCBzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIGZpbmUgc2luY2UgeW91IGFyZSBvbmx5IGdvaW5nIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBidWlsZGluZyBhbmQgbm90IGRldmVsb3BpbmcuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlIHRvIHRoZSA8ZmlsZW5hbWU+c2NyaXB0czwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgd2l0aGluIHRoZSBHaXQgcmVwb3NpdG9yeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBjZCBzY3JpcHRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHVwIHRoZSBsb2NhbCBidWlsZCBlbnZpcm9ubWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgcnVubmluZyB0aGUgc2V0dXAgc2NyaXB0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIC4vc2V0dXAuc2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlIHNjcmlwdCBmaW5pc2hlcyBleGVjdXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBwcm9tcHRzIHlvdSB3aXRoIGluc3RydWN0aW9ucyBvbiBob3cgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1biB0aGUgPGZpbGVuYW1lPmJ1aWxkLnNoPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdCwgd2hpY2ggaXMgYWxzbyBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4gZGlyZWN0b3J5IG9mCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgR2l0IHJlcG9zaXRvcnkgY3JlYXRlZCBlYXJsaWVyLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1biB0aGUgPGZpbGVuYW1lPmJ1aWxkLnNoPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdCBhcyBkaXJlY3RlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gcHJvdmlkZSB0aGUgdGFnIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uIGJyYW5jaCwgYW5kIGEgcmVsZWFzZSBuYW1lLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBFQ0xJUFNFX0hPTUU9L2hvbWUvc2NvdHRyaWYvZWNsaXBzZS1wb2t5L3NjcmlwdHMvZWNsaXBzZSAuL2J1aWxkLnNoIC1sIG5lb24veW9jdG8tJkRJU1RSTzsgbWFzdGVyIHlvY3RvLSZESVNUUk87IDI+JmFtcDsxIHwgdGVlIGJ1aWxkLmxvZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIGV4YW1wbGUgY29tbWFuZCBhZGRzIHRoZSB0YWcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1hcnMveW9jdG8tJkRJU1RSTzs8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gPGZpbGVuYW1lPkhFQUQ8L2ZpbGVuYW1lPiwgdGhlbiB0ZWxscwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIHNjcmlwdCB0byB1c2UgdGhlIGxvY2FsICgtbCkgR2l0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja291dCBmb3IgdGhlIGJ1aWxkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgcnVubmluZyB0aGUgc2NyaXB0LCB0aGUgZmlsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9yZy55b2N0by5zZGstPC9maWxlbmFtZT48cmVwbGFjZWFibGU+cmVsZWFzZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi08L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5kYXRlPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+LWFyY2hpdmUuemlwPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBuZWNlc3NhcnksIHN0YXJ0IHRoZSBFY2xpcHNlIElERQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGJlIHN1cmUgeW91IGFyZSBpbiB0aGUgV29ya2JlbmNoLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCAiSW5zdGFsbCBOZXcgU29mdHdhcmUiIGZyb20KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSAiSGVscCIgcHVsbC1kb3duIG1lbnUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgIkFkZCIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvdmlkZSBhbnl0aGluZyB5b3Ugd2FudCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYW1lIiBmaWVsZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGljayAiQXJjaGl2ZSIgYW5kIGJyb3dzZSB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpJUCBmaWxlIHlvdSBidWlsdCBlYXJsaWVyLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBaSVAgZmlsZSBzaG91bGQgbm90IGJlICJ1bnppcHBlZCIsIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCBiZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4qYXJjaGl2ZS56aXA8L2ZpbGVuYW1lPiBmaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkIGJ5IHJ1bm5pbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQuc2g8L2ZpbGVuYW1lPiBzY3JpcHQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgdGhlICJPSyIgYnV0dG9uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrIHRoZSBib3hlcyB0aGF0IGFwcGVhciBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGluc3RhbGxhdGlvbiB3aW5kb3cgdG8gaW5zdGFsbCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgWW9jdG8gUHJvamVjdCBTREsgUGx1Zy1pbgotICAgICBZb2N0byBQcm9qZWN0IERvY3VtZW50YXRpb24gcGx1Zy1pbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbmlzaCB0aGUgaW5zdGFsbGF0aW9uIGJ5IGNsaWNraW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZSBhcHByb3ByaWF0ZSBidXR0b25zLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBjbGljayAiT0siIHdoZW4gcHJvbXB0ZWQgYWJvdXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxpbmcgc29mdHdhcmUgdGhhdCBjb250YWlucyB1bnNpZ25lZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN0YXJ0IHRoZSBFY2xpcHNlIElERSBpZiBuZWNlc3NhcnkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50IHlvdSBzaG91bGQgYmUgYWJsZSB0byBjb25maWd1cmUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWNsaXBzZSBZb2N0byBQbHVnLWluIGFzIGRlc2NyaWJlZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbWFycy1jb25maWd1cmluZy10aGUtZWNsaXBzZS15b2N0by1wbHVnLWluJz5Db25maWd1cmluZyB0aGUgTmVvbiBFY2xpcHNlIFlvY3RvIFBsdWctaW48L2xpbms+IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KLSAgICAgICAgICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbmVvbi1jb25maWd1cmluZy10aGUtZWNsaXBzZS15b2N0by1wbHVnLWluJz4KLSAgICAgICAgICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIHRoZSBOZW9uIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbjwvdGl0bGU+Ci0KLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmluZyB0aGUgTmVvbiBFY2xpcHNlIFlvY3RvIFBsdWctaW4gaW52b2x2ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmcgdGhlIENyb3NzIENvbXBpbGVyIG9wdGlvbnMgYW5kIHRoZSBUYXJnZXQKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgY29uZmlndXJhdGlvbnMgeW91IGNob29zZSBiZWNvbWUgdGhlIGRlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzIGZvciBhbGwgcHJvamVjdHMuCi0gICAgICAgICAgICAgICAgICAgICAgICBZb3UgZG8gaGF2ZSBvcHBvcnR1bml0aWVzIHRvIGNoYW5nZSB0aGVtIGxhdGVyIHdoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBjb25maWd1cmUgdGhlIHByb2plY3QgKHNlZSB0aGUgZm9sbG93aW5nIHNlY3Rpb24pLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUbyBzdGFydCwgeW91IG5lZWQgdG8gZG8gdGhlIGZvbGxvd2luZyBmcm9tIHdpdGhpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIEVjbGlwc2UgSURFOgotICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSAiUHJlZmVyZW5jZXMiIGZyb20gdGhlICJXaW5kb3ciIG1lbnUgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGUgUHJlZmVyZW5jZXMgRGlhbG9nLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrICJZb2N0byBQcm9qZWN0IFNESyIgdG8gZGlzcGxheQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBzY3JlZW4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN1Yi1zZWN0aW9ucyBkZXNjcmliZSBob3cgdG8gY29uZmlndXJlCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgcGx1Zy1pbi4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocm91Z2hvdXQgdGhlIGRlc2NyaXB0aW9ucywgYSBzdGFydC10by1maW5pc2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFtcGxlIGZvciBwcmVwYXJpbmcgYSBRRU1VIGltYWdlIGZvciB1c2Ugd2l0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVjbGlwc2UgaXMgcmVmZXJlbmNlZCBhcyB0aGUgIndpa2kiIGFuZCBpcyBsaW5rZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgZXhhbXBsZSBvbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL1RpcHNBbmRUcmlja3MvUnVubmluZ0VjbGlwc2VBZ2FpbnN0QnVpbHRJbWFnZSc+IENvb2tib29rIGd1aWRlIHRvIE1ha2luZyBhbiBFY2xpcHNlIERlYnVnIENhcGFibGUgSW1hZ2U8L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpa2kgcGFnZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZW9uLWNvbmZpZ3VyaW5nLXRoZS1jcm9zcy1jb21waWxlci1vcHRpb25zJz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmluZyB0aGUgQ3Jvc3MtQ29tcGlsZXIgT3B0aW9uczwvdGl0bGU+Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyb3NzIENvbXBpbGVyIG9wdGlvbnMgZW5hYmxlIEVjbGlwc2UgdG8gdXNlIHlvdXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyBjcm9zcyBjb21waWxlciB0b29sY2hhaW4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gY29uZmlndXJlIHRoZXNlIG9wdGlvbnMsIHlvdSBtdXN0IHNlbGVjdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0eXBlIG9mIHRvb2xjaGFpbiwgcG9pbnQgdG8gdGhlIHRvb2xjaGFpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IHRoZSBzeXNyb290IGxvY2F0aW9uLCBhbmQgc2VsZWN0IHRoZSB0YXJnZXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlNlbGVjdGluZyB0aGUgVG9vbGNoYWluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2UgYmV0d2VlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlN0YW5kYWxvbmUgcHJlLWJ1aWx0IHRvb2xjaGFpbjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CdWlsZCBzeXN0ZW0gZGVyaXZlZCB0b29sY2hhaW48L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIENyb3NzIENvbXBpbGVyIE9wdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U3RhbmRhbG9uZSBQcmUtYnVpbHQgVG9vbGNoYWluOjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCB0aGlzIHR5cGUgd2hlbiB5b3UgYXJlIHVzaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgc3RhbmQtYWxvbmUgY3Jvc3MtdG9vbGNoYWluLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgYXJlIGFuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIGRldmVsb3BlciBhbmQgZG8gbm90Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWQgdG8gYnVpbGQgYSB0YXJnZXQgaW1hZ2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RlYWQsIHlvdSBqdXN0IHdhbnQgdG8gdXNlIGFuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB0b29sY2hhaW4gb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gZXhpc3Rpbmcga2VybmVsIGFuZCB0YXJnZXQgcm9vdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgeW91IGhhdmUgZG93bmxvYWRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgaW5zdGFsbGVkIGEgcHJlLWJ1aWx0IHRvb2xjaGFpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYW4gZXhpc3RpbmcgaW1hZ2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QnVpbGQgU3lzdGVtIERlcml2ZWQgVG9vbGNoYWluOjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCB0aGlzIHR5cGUgaWYgeW91IGJ1aWx0IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW4gYXMgcGFydCBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3Ugc2VsZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CdWlsZCBzeXN0ZW0gZGVyaXZlZCB0b29sY2hhaW48L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IGFyZSB1c2luZyB0aGUgdG9vbGNoYWluIGJ1aWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBidW5kbGVkIGluc2lkZSB0aGUgQnVpbGQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgY3JlYXRlZCBhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRhYmxlIGltYWdlIHVzaW5nIHRoZSBzdGVwcyBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9UaXBzQW5kVHJpY2tzL1J1bm5pbmdFY2xpcHNlQWdhaW5zdEJ1aWx0SW1hZ2UnPndpa2k8L3VsaW5rPi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBzaXR1YXRpb24sIHlvdSB3b3VsZCBzZWxlY3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CdWlsZCBzeXN0ZW0gZGVyaXZlZCB0b29sY2hhaW48L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+U3BlY2lmeSB0aGUgVG9vbGNoYWluIFJvb3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvY2F0aW9uOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIGEgc3RhbmQtYWxvbmUgcHJlLWJ1aWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW4sIHlvdSBzaG91bGQgYmUgcG9pbnRpbmcgdG8gd2hlcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IGlzIGluc3RhbGxlZCAoZS5nLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9vcHQvcG9reS8mRElTVFJPOzwvZmlsZW5hbWU+KS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstaW5zdGFsbGluZy10aGUtc2RrJz5JbnN0YWxsaW5nIHRoZSBTREs8L2xpbms+IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBTREsgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZC48L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3UgYXJlIHVzaW5nIGEgYnVpbGQgc3lzdGVtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXJpdmVkIHRvb2xjaGFpbiwgdGhlIHBhdGggeW91IHByb3ZpZGUgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5Ub29sY2hhaW4gUm9vdCBMb2NhdGlvbjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCBpcyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gd2hpY2ggeW91IHJ1biB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCAoZS5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2hvbWUvc2NvdHRyaWYvcG9reS9idWlsZDwvZmlsZW5hbWU+KS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLWJ1aWxkaW5nLWFuLXNkay1pbnN0YWxsZXInPkJ1aWxkaW5nIGFuIFNESyBJbnN0YWxsZXI8L2xpbms+IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+U3BlY2lmeSBTeXNyb290IExvY2F0aW9uOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbG9jYXRpb24gaXMgd2hlcmUgdGhlIHJvb3QgZmlsZXN5c3RlbQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSB0YXJnZXQgaGFyZHdhcmUgcmVzaWRlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoaXMgbG9jYXRpb24gZGVwZW5kcyBvbiB3aGVyZSB5b3UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRlbHkgZXh0cmFjdGVkIGFuZCBpbnN0YWxsZWQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgZmlsZXN5c3RlbS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHN1cHBvc2UgeW91IHByZXBhcmVkIGFuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSB1c2luZyB0aGUgc3RlcHMgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL1RpcHNBbmRUcmlja3MvUnVubmluZ0VjbGlwc2VBZ2FpbnN0QnVpbHRJbWFnZSc+d2lraTwvdWxpbms+LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgc28sIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ZX1FFTVVfUk9PVEZTPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBpcyBmb3VuZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB5b3Ugd291bGQgYnJvd3NlIHRvIGFuZCBzZWxlY3QgdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IChlLmcuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2hvbWUvc2NvdHRyaWYvcG9reS9idWlsZC9NWV9RRU1VX1JPT1RGUzwvZmlsZW5hbWU+KS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCB0aGUgdG9vbGNoYWluIGFuZCBvbiBob3cgdG8gZXh0cmFjdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGluc3RhbGwgdGhlIHN5c3Jvb3QgZmlsZXN5c3RlbSwgc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1idWlsZGluZy1hbi1zZGstaW5zdGFsbGVyJz5CdWlsZGluZyBhbiBTREsgSW5zdGFsbGVyPC9saW5rPiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlNlbGVjdCB0aGUgVGFyZ2V0IEFyY2hpdGVjdHVyZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyB0aGUgdHlwZSBvZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUgeW91IGFyZSBnb2luZyB0byB1c2Ugb3IgZW11bGF0ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgcHVsbC1kb3duCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VGFyZ2V0IEFyY2hpdGVjdHVyZTwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW51IHRvIG1ha2UgeW91ciBzZWxlY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcHVsbC1kb3duIG1lbnUgc2hvdWxkIGhhdmUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBhcmNoaXRlY3R1cmUgeW91IG5lZWQgaXMgbm90IGxpc3RlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIG1lbnUsIHlvdSB3aWxsIG5lZWQgdG8gYnVpbGQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3FzLWJ1aWxkaW5nLWltYWdlcyc+QnVpbGRpbmcgSW1hZ2VzPC91bGluaz4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL1RpcHNBbmRUcmlja3MvUnVubmluZ0VjbGlwc2VBZ2FpbnN0QnVpbHRJbWFnZSc+d2lraTwvdWxpbms+LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbmVvbi1jb25maWd1cmluZy10aGUtdGFyZ2V0LW9wdGlvbnMnPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIHRoZSBUYXJnZXQgT3B0aW9uczwvdGl0bGU+Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY2hvb3NlIHRvIGVtdWxhdGUgaGFyZHdhcmUgdXNpbmcgdGhlIFFFTVUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXVsYXRvciwgb3IgeW91IGNhbiBjaG9vc2UgdG8gcnVuIHlvdXIgaW1hZ2Ugb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWwgaGFyZHdhcmUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlFFTVU6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2lsbCBiZSB1c2luZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFFTVUgZW11bGF0b3IuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIHRoZSBlbXVsYXRvciwgeW91IGFsc28KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWQgdG8gbG9jYXRlIHRoZSBrZXJuZWwgYW5kIHNwZWNpZnkgYW55Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b20gb3B0aW9ucy48L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3Ugc2VsZWN0ZWQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QnVpbGQgc3lzdGVtIGRlcml2ZWQgdG9vbGNoYWluPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0IGtlcm5lbCB5b3UgYnVpbHQgd2lsbCBiZSBsb2NhdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL2RlcGxveS9pbWFnZXMvPHJlcGxhY2VhYmxlPm1hY2hpbmU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBzdXBwb3NlIHlvdSBwZXJmb3JtZWQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwcyBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvVGlwc0FuZFRyaWNrcy9SdW5uaW5nRWNsaXBzZUFnYWluc3RCdWlsdEltYWdlJz53aWtpPC91bGluaz4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHlvdSBzcGVjaWZ5IHlvdXIgQnVpbGQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeSBwYXRoIGZvbGxvd2VkIGJ5IHRoZSBpbWFnZSAoZS5nLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ob21lL3Njb3R0cmlmL3Bva3kvYnVpbGQvdG1wL2RlcGxveS9pbWFnZXMvcWVtdXg4Ni9iekltYWdlLXFlbXV4ODYuYmluPC9maWxlbmFtZT4pLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IHNlbGVjdGVkIHRoZSBzdGFuZGFsb25lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmUtYnVpbHQgdG9vbGNoYWluLCB0aGUgcHJlLWJ1aWx0IGltYWdlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgZG93bmxvYWRlZCBpcyBsb2NhdGVkIGluIHRoZSBkaXJlY3RvcnkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBzcGVjaWZpZWQgd2hlbiB5b3UgZG93bmxvYWRlZCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLjwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPk1vc3QgY3VzdG9tIG9wdGlvbnMgYXJlIGZvciBhZHZhbmNlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUUVNVSB1c2VycyB0byBmdXJ0aGVyIGN1c3RvbWl6ZSB0aGVpciBRRU1VCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZXNlIG9wdGlvbnMgYXJlIHNwZWNpZmllZCBiZXR3ZWVuIHBhaXJlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVkIGJyYWNrZXRzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29tZSBvcHRpb25zIG11c3QgYmUgc3BlY2lmaWVkIG91dHNpZGUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFja2V0cy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIHRoZSBvcHRpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2VyaWFsPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bm9ncmFwaGljPC9maWxlbmFtZT4sIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmt2bTwvZmlsZW5hbWU+IG11c3QgYWxsIGJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRzaWRlIHRoZSBicmFja2V0cy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPm1hbiBxZW11PC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgdG8gZ2V0IGhlbHAgb24gYWxsIHRoZSBvcHRpb25zIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlaXIgdXNlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgc2VyaWFsIOKAmCZsdDstbSAyNTYgLWZ1bGwtc2NyZWVuJmd0O+KAmQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnYXJkbGVzcyBvZiB0aGUgbW9kZSwgU3lzcm9vdCBpcyBhbHJlYWR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGFzIHBhcnQgb2YgdGhlIENyb3NzLUNvbXBpbGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIGNvbmZpZ3VyYXRpb24gaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U3lzcm9vdCBMb2NhdGlvbjo8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkV4dGVybmFsIEhXOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdpbGwgYmUgdXNpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbCBoYXJkd2FyZS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgdGhlICJBcHBseSIgYW5kICJPSyIgdG8gc2F2ZSB5b3VyIHBsdWctaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucy4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgotICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KLSAgICAgICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J25lb24tY3JlYXRpbmctdGhlLXByb2plY3QnPgotICAgICAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyB0aGUgUHJvamVjdDwvdGl0bGU+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBjcmVhdGUgdHdvIHR5cGVzIG9mIHByb2plY3RzOiAgQXV0b3Rvb2xzLWJhc2VkLCBvcgotICAgICAgICAgICAgICAgICAgICBNYWtlZmlsZS1iYXNlZC4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgdG8gY3JlYXRlIEF1dG90b29scy1iYXNlZAotICAgICAgICAgICAgICAgICAgICBwcm9qZWN0cyBmcm9tIHdpdGhpbiB0aGUgRWNsaXBzZSBJREUuCi0gICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBjcmVhdGluZyBNYWtlZmlsZS1iYXNlZCBwcm9qZWN0cyBpbiBhCi0gICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsIHdpbmRvdywgc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbWFrZWZpbGUtYmFzZWQtcHJvamVjdHMnPk1ha2VmaWxlLUJhc2VkIFByb2plY3RzPC9saW5rPiIKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBEbyBub3QgdXNlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBwcm9qZWN0IG5hbWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiBzcGFjZXMsIHVuZGVyc2NvcmVzLCBldGMuKS4gIERvaW5nIHNvIGNhbgotICAgICAgICAgICAgICAgICAgICAgICAgY2F1c2UgY29uZmlndXJhdGlvbiB0byBmYWlsLgotICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRvIGNyZWF0ZSBhIHByb2plY3QgYmFzZWQgb24gYSBZb2N0byB0ZW1wbGF0ZSBhbmQgdGhlbgotICAgICAgICAgICAgICAgICAgICBkaXNwbGF5IHRoZSBzb3VyY2UgY29kZSwgZm9sbG93IHRoZXNlIHN0ZXBzOgotICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0ICJDIFByb2plY3QiIGZyb20gdGhlICJGaWxlIC0+IE5ldyIgbWVudS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+WW9jdG8gUHJvamVjdCBTREsgQXV0b3Rvb2xzIFByb2plY3Q8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgPGZpbGVuYW1lPkhlbGxvIFdvcmxkIEFOU0kgQyBBdXRvdG9vbHMgUHJvamVjdHM8L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGFuIEF1dG90b29scy1iYXNlZCBwcm9qZWN0IGJhc2VkIG9uIGEgWW9jdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdXQgYSBuYW1lIGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5Qcm9qZWN0IG5hbWU6PC9maWxlbmFtZT4gZmllbGQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRG8gbm90IHVzZSBoeXBoZW5zIGFzIHBhcnQgb2YgdGhlIG5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+aGVsbG88L2ZpbGVuYW1lPikuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgIk5leHQiLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBhcHByb3ByaWF0ZSBpbmZvcm1hdGlvbiBpbiB0aGUgdmFyaW91cyBmaWVsZHMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgIkZpbmlzaCIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlICJvcGVuIHBlcnNwZWN0aXZlIiBwcm9tcHQgYXBwZWFycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljayAiWWVzIiBzbyB0aGF0IHlvdSBpbiB0aGUgQy9DKysgcGVyc3BlY3RpdmUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGxlZnQtaGFuZCBuYXZpZ2F0aW9uIHBhbmUgc2hvd3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIHByb2plY3QuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkaXNwbGF5IHlvdXIgc291cmNlIGJ5IGRvdWJsZSBjbGlja2luZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0J3Mgc291cmNlIGZpbGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgICAgICA8c2VjdGlvbiBpZD0nbmVvbi1jb25maWd1cmluZy10aGUtY3Jvc3MtdG9vbGNoYWlucyc+Ci0gICAgICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIHRoZSBDcm9zcy1Ub29sY2hhaW5zPC90aXRsZT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBUaGUgZWFybGllciBzZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbmVvbi1jb25maWd1cmluZy10aGUtZWNsaXBzZS15b2N0by1wbHVnLWluJz5Db25maWd1cmluZyB0aGUgTmVvbiBFY2xpcHNlIFlvY3RvIFBsdWctaW48L2xpbms+IiwKLSAgICAgICAgICAgICAgICAgICAgc2V0cyB1cCB0aGUgZGVmYXVsdCBwcm9qZWN0IGNvbmZpZ3VyYXRpb25zLgotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIHRoZXNlIHNldHRpbmdzIGZvciBhIGdpdmVuIHByb2plY3QgYnkKLSAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIHRoZXNlIHN0ZXBzOgotICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0ICJZb2N0byBQcm9qZWN0IFNldHRpbmdzIiBmcm9tCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlICJQcm9qZWN0IC0+IFByb3BlcnRpZXMiIG1lbnUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWxlY3Rpb24gYnJpbmdzIHVwIHRoZSBZb2N0byBQcm9qZWN0IFNldHRpbmdzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlhbG9nIGFuZCBhbGxvd3MgeW91IHRvIG1ha2UgY2hhbmdlcyBzcGVjaWZpYyB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGluZGl2aWR1YWwgcHJvamVjdC48L3BhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QnkgZGVmYXVsdCwgdGhlIENyb3NzIENvbXBpbGVyIE9wdGlvbnMgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0IE9wdGlvbnMgZm9yIGEgcHJvamVjdCBhcmUgaW5oZXJpdGVkIGZyb20KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncyB5b3UgcHJvdmlkZWQgdXNpbmcgdGhlIFByZWZlcmVuY2VzIERpYWxvZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGRlc2NyaWJlZCBlYXJsaWVyIGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSduZW9uLWNvbmZpZ3VyaW5nLXRoZS1lY2xpcHNlLXlvY3RvLXBsdWctaW4nPkNvbmZpZ3VyaW5nIHRoZSBOZW9uIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbjwvbGluaz4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBTZXR0aW5ncyBEaWFsb2cgYWxsb3dzIHlvdSB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlIHRob3NlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIGEgZ2l2ZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2Ugb3IgdmVyaWZ5IHlvdXIgY29uZmlndXJhdGlvbnMgZm9yIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3QgYW5kIGNsaWNrICJPSyIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmlnaHQtY2xpY2sgaW4gdGhlIG5hdmlnYXRpb24gcGFuZSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QgIlJlY29uZmlndXJlIFByb2plY3QiIGZyb20gdGhlIHBvcC11cCBtZW51LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc2VsZWN0aW9uIHJlY29uZmlndXJlcyB0aGUgcHJvamVjdCBieSBydW5uaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG9nZW4uc2g8L2ZpbGVuYW1lPiBpbiB0aGUgd29ya3NwYWNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHlvdXIgcHJvamVjdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc2NyaXB0IGFsc28gcnVucwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJ0b29saXplPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFjbG9jYWw8L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXV0b2NvbmY8L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXV0b2hlYWRlcjwvZmlsZW5hbWU+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hdXRvbWFrZSAtLWE8L2ZpbGVuYW1lPiwgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi4vY29uZmlndXJlPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgb24gdGhlICJDb25zb2xlIiB0YWIgYmVuZWF0aCB5b3VyIHNvdXJjZSBjb2RlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gc2VlIHRoZSByZXN1bHRzIG9mIHJlY29uZmlndXJpbmcgeW91ciBwcm9qZWN0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J25lb24tYnVpbGRpbmctdGhlLXByb2plY3QnPgotICAgICAgICAgICAgICAgIDx0aXRsZT5CdWlsZGluZyB0aGUgUHJvamVjdDwvdGl0bGU+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVG8gYnVpbGQgdGhlIHByb2plY3Qgc2VsZWN0ICJCdWlsZCBBbGwiIGZyb20gdGhlCi0gICAgICAgICAgICAgICAgICAgICJQcm9qZWN0IiBtZW51LgotICAgICAgICAgICAgICAgICAgICBUaGUgY29uc29sZSBzaG91bGQgdXBkYXRlIGFuZCB5b3UgY2FuIG5vdGUgdGhlCi0gICAgICAgICAgICAgICAgICAgIGNyb3NzLWNvbXBpbGVyIHlvdSBhcmUgdXNpbmcuCi0gICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyAiWW9jdG8gUHJvamVjdCBTREsgQXV0b3Rvb2xzIiBwcm9qZWN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBFY2xpcHNlIElERSBtaWdodCBkaXNwbGF5IGVycm9yIG1lc3NhZ2VzIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25zL1N5bWJvbHMvVHlwZXMgdGhhdCBjYW5ub3QgYmUgInJlc29sdmVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW4gd2hlbiB0aGUgcmVsYXRlZCBpbmNsdWRlIGZpbGUgaXMgbGlzdGVkIGF0IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdCBuYXZpZ2F0b3IgYW5kIHdoZW4gdGhlIHByb2plY3QgaXMgYWJsZSB0bwotICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQuCi0gICAgICAgICAgICAgICAgICAgICAgICBGb3IgdGhlc2UgY2FzZXMgb25seSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gYWRkIGEgbmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rZWQgZm9sZGVyIHRvIHRoZSBhcHByb3ByaWF0ZSBzeXNyb290LgotICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZXNlIHN0ZXBzIHRvIGFkZCB0aGUgbGlua2VkIGZvbGRlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCB0aGUgcHJvamVjdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgIkZvbGRlciIgZnJvbSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZpbGUgPiBOZXc8L2ZpbGVuYW1lPiBtZW51LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoZSAiTmV3IEZvbGRlciIgRGlhbG9nLCBzZWxlY3QgIkxpbmsgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRlIGxvY2F0aW9uIChsaW5rZWQgZm9sZGVyKSIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgIkJyb3dzZSIgdG8gbmF2aWdhdGUgdG8gdGhlIGluY2x1ZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sZGVyIGluc2lkZSB0aGUgc2FtZSBzeXNyb290IGxvY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkIGluIHRoZSBZb2N0byBQcm9qZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgIk9LIi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGljayAiRmluaXNoIiB0byBzYXZlIHRoZSBsaW5rZWQgZm9sZGVyLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZW9uLXN0YXJ0aW5nLXFlbXUtaW4tdXNlci1zcGFjZS1uZnMtbW9kZSc+Ci0gICAgICAgICAgICAgICAgPHRpdGxlPlN0YXJ0aW5nIFFFTVUgaW4gVXNlci1TcGFjZSBORlMgTW9kZTwvdGl0bGU+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVG8gc3RhcnQgdGhlIFFFTVUgZW11bGF0b3IgZnJvbSB3aXRoaW4gRWNsaXBzZSwgZm9sbG93Ci0gICAgICAgICAgICAgICAgICAgIHRoZXNlIHN0ZXBzOgotICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNkZXYtbWFudWFsLXFlbXUnPlVzaW5nIHRoZSBRdWljayBFTVVsYXRvciAoUUVNVSk8L3VsaW5rPiIKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXB0ZXIgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyBRRU1VLgotICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHBvc2UgYW5kIHNlbGVjdCAiRXh0ZXJuYWwgVG9vbHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9ucyAuLi4iIGZyb20gdGhlICJSdW4gLT4gRXh0ZXJuYWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb29scyIgbWVudS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhdGUgYW5kIHNlbGVjdCB5b3VyIGltYWdlIGluIHRoZSBuYXZpZ2F0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWwgdG8gdGhlIGxlZnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+cWVtdV9pNTg2LXBva3ktbGludXg8L2ZpbGVuYW1lPikuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgIlJ1biIgdG8gbGF1bmNoIFFFTVUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBob3N0IG9uIHdoaWNoIHlvdSBhcmUgcnVubmluZyBRRU1VIG11c3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSB0aGUgPGZpbGVuYW1lPnJwY2JpbmQ8L2ZpbGVuYW1lPiB1dGlsaXR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgdG8gYmUgYWJsZSB0byBtYWtlIFJQQyBjYWxscyBvbiBhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlciBvbiB0aGF0IG1hY2hpbmUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIFFFTVUgZG9lcyBub3QgaW52b2tlIGFuZCB5b3UgcmVjZWl2ZSBlcnJvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlcyBpbnZvbHZpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJwY2JpbmQ8L2ZpbGVuYW1lPiwgZm9sbG93IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9ucyB0byBnZXQgdGhlIHNlcnZpY2UgcnVubmluZy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgb24gYSBuZXcgVWJ1bnR1IDE2LjA0IExUUwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb24sIHlvdSBtdXN0IGRvIHRoZSBmb2xsb3dpbmcgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXIgdG8gZ2V0IFFFTVUgdG8gbGF1bmNoOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICQgc3VkbyBhcHQtZ2V0IGluc3RhbGwgcnBjYmluZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIGluc3RhbGxpbmcgPGZpbGVuYW1lPnJwY2JpbmQ8L2ZpbGVuYW1lPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gZWRpdCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvaW5pdC5kL3JwY2JpbmQ8L2ZpbGVuYW1lPiBmaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBsaW5lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIE9QVElPTlM9Ii1pIC13IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIG1vZGlmeWluZyB0aGUgZmlsZSwgeW91IG5lZWQgdG8gc3RhcnQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBzdWRvIHNlcnZpY2UgcG9ydG1hcCByZXN0YXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbmVlZGVkLCBlbnRlciB5b3VyIGhvc3Qgcm9vdCBwYXNzd29yZCBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzaGVsbCB3aW5kb3cgYXQgdGhlIHByb21wdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHNldHMgdXAgYSA8ZmlsZW5hbWU+VGFwIDA8L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gbmVlZGVkIGZvciBydW5uaW5nIGluIHVzZXItc3BhY2UgTkZTCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXYWl0IGZvciBRRU1VIHRvIGxhdW5jaC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIFFFTVUgbGF1bmNoZXMsIHlvdSBjYW4gYmVnaW4gb3BlcmF0aW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoYXQgZW52aXJvbm1lbnQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT25lIHVzZWZ1bCB0YXNrIGF0IHRoaXMgcG9pbnQgd291bGQgYmUgdG8gZGV0ZXJtaW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIElQIEFkZHJlc3MgZm9yIHRoZSB1c2VyLXNwYWNlIE5GUyBieSB1c2luZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aWZjb25maWc8L2ZpbGVuYW1lPiBjb21tYW5kLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBJUCBhZGRyZXNzIG9mIHRoZSBRRU1VIG1hY2hpbmUgYXBwZWFycyBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB4dGVybSB3aW5kb3cuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhpcyBhZGRyZXNzIHRvIGhlbHAgeW91IHNlZSB3aGljaAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY3VsYXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUCBhZGRyZXNzIHRoZSBpbnN0YW5jZSBvZiBRRU1VIGlzIHVzaW5nLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J25lb24tZGVwbG95aW5nLWFuZC1kZWJ1Z2dpbmctdGhlLWFwcGxpY2F0aW9uJz4KLSAgICAgICAgICAgICAgICA8dGl0bGU+RGVwbG95aW5nIGFuZCBEZWJ1Z2dpbmcgdGhlIEFwcGxpY2F0aW9uPC90aXRsZT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBRRU1VIGVtdWxhdG9yIGlzIHJ1bm5pbmcgdGhlIGltYWdlLCB5b3UgY2FuIGRlcGxveQotICAgICAgICAgICAgICAgICAgICB5b3VyIGFwcGxpY2F0aW9uIHVzaW5nIHRoZSBFY2xpcHNlIElERSBhbmQgdGhlbiB1c2UKLSAgICAgICAgICAgICAgICAgICAgdGhlIGVtdWxhdG9yIHRvIHBlcmZvcm0gZGVidWdnaW5nLgotICAgICAgICAgICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gZGVwbG95IHRoZSBhcHBsaWNhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50bHksIEVjbGlwc2UgZG9lcyBub3Qgc3VwcG9ydCBTU0ggcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZGluZy4KLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgaWYgeW91IG5lZWQgdG8gcnVuIG9yIGRlYnVnIGEgcmVtb3RlCi0gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiB1c2luZyB0aGUgaG9zdCBkaXNwbGF5LCB5b3UgbXVzdCBjcmVhdGUgYQotICAgICAgICAgICAgICAgICAgICAgICAgdHVubmVsaW5nIGNvbm5lY3Rpb24gZnJvbSBvdXRzaWRlIEVjbGlwc2UgYW5kIGtlZXAKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY29ubmVjdGlvbiBhbGl2ZSBkdXJpbmcgeW91ciB3b3JrLgotICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGluIGEgbmV3IHRlcm1pbmFsLCBydW4gdGhlIGZvbGxvd2luZzoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBzc2ggLVhZIDxyZXBsYWNlYWJsZT51c2VyX25hbWU8L3JlcGxhY2VhYmxlPkA8cmVwbGFjZWFibGU+cmVtb3RlX2hvc3RfaXA8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgdGhlIGFib3ZlIGZvcm0sIGhlcmUgaXMgYW4gZXhhbXBsZToKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBzc2ggLVhZIHJvb3RAMTkyLjE2OC43LjIKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIHJ1bm5pbmcgdGhlIGNvbW1hbmQsIGFkZCB0aGUgY29tbWFuZCB0byBiZQotICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZWQgaW4gRWNsaXBzZSdzIHJ1biBjb25maWd1cmF0aW9uIGJlZm9yZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgIGV4cG9ydCBESVNQTEFZPToxMC4wCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIG5vdCBkZXN0cm95IHRoZSBjb25uZWN0aW9uIGR1cmluZyB5b3VyIFFFTVUKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24gKGkuZS4gZG8gbm90Ci0gICAgICAgICAgICAgICAgICAgICAgICBleGl0IG91dCBvZiBvciBjbG9zZSB0aGF0IHNoZWxsKS4KLSAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0ICJEZWJ1ZyBDb25maWd1cmF0aW9ucy4uLiIgZnJvbSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUnVuIiBtZW51LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoZSBsZWZ0IGFyZWEsIGV4cGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DL0MrK1JlbW90ZSBBcHBsaWNhdGlvbjwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvY2F0ZSB5b3VyIHByb2plY3QgYW5kIHNlbGVjdCBpdCB0byBicmluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwIGEgbmV3IHRhYmJlZCB2aWV3IGluIHRoZSBEZWJ1ZyBDb25maWd1cmF0aW9ucwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpYWxvZy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGljayBvbiB0aGUgIkRlYnVnZ2VyIiB0YWIgdG8gc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyb3NzLXRvb2wgZGVidWdnZXIgeW91IGFyZSB1c2luZy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIGNoYW5nZSB0byB0aGUgZGVidWdnZXIgcGVyc3BlY3RpdmUgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFY2xpcHNlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrIG9uIHRoZSAiTWFpbiIgdGFiLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZSBhIG5ldyBjb25uZWN0aW9uIHRvIHRoZSBRRU1VIGluc3RhbmNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgY2xpY2tpbmcgb24gIm5ldyIuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0IDxmaWxlbmFtZT5TU0g8L2ZpbGVuYW1lPiwgd2hpY2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFucyBTZWN1cmUgU29ja2V0IFNoZWxsIGFuZCB0aGVuIGNsaWNrICJPSyIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWxseSwgeW91IGNhbiBzZWxlY3QgYW4gVENGIGNvbm5lY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsZWFyIG91dCB0aGUgIkNvbm5lY3Rpb24gbmFtZSIgZmllbGQgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50ZXIgYW55IG5hbWUgeW91IHdhbnQgZm9yIHRoZSBjb25uZWN0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1dCB0aGUgSVAgYWRkcmVzcyBmb3IgdGhlIGNvbm5lY3Rpb24gaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgIkhvc3QiIGZpZWxkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBRRU1VLCB0aGUgZGVmYXVsdCBpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4xOTIuMTY4LjcuMjwvZmlsZW5hbWU+LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIGEgcHJldmlvdXMgUUVNVSBzZXNzaW9uIGRpZCBub3QgZXhpdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFubHksIHRoZSBJUCBhZGRyZXNzIGluY3JlbWVudHMgKGUuZy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+MTkyLjE2OC43LjM8L2ZpbGVuYW1lPikuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGUgSVAgYWRkcmVzcyBmb3IgdGhlIGN1cnJlbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUUVNVSBzZXNzaW9uIGJ5IGxvb2tpbmcgaW4gdGhlIHh0ZXJtIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnMgd2hlbiB5b3UgbGF1bmNoIFFFTVUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudGVyIDxmaWxlbmFtZT5yb290PC9maWxlbmFtZT4sIHdoaWNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdGhlIGRlZmF1bHQgZm9yIFFFTVUsIGZvciB0aGUgIlVzZXIiIGZpZWxkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gbGVhdmUgdGhlIHBhc3N3b3JkIGZpZWxkIGVtcHR5LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrICJGaW5pc2giIHRvIGNsb3NlIHRoZSBOZXcgQ29ubmVjdGlvbnMgRGlhbG9nLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5lY2Vzc2FyeSwgdXNlIHRoZSBkcm9wLWRvd24gbWVudSBub3cgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbm5lY3Rpb24iIGZpZWxkIGFuZCBwaWNrIHRoZSBJUCBBZGRyZXNzIHlvdQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGVyZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc3VtaW5nIHlvdSBhcmUgY29ubmVjdGluZyBhcyB0aGUgcm9vdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIsIHdoaWNoIGlzIHRoZSBkZWZhdWx0IGZvciBRRU1VIHg4Ni02NCBTREsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMgcHJvdmlkZWQgYnkgdGhlIFlvY3RvIFByb2plY3QsIGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZW1vdGUgQWJzb2x1dGUgRmlsZSBQYXRoIGZvciBDL0MrKyBBcHBsaWNhdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCwgYnJvd3NlIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ob21lL3Jvb3QvPC9maWxlbmFtZT48cmVwbGFjZWFibGU+UHJvamVjdE5hbWU8L3JlcGxhY2VhYmxlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT4vaG9tZS9yb290L2hlbGxvPC9maWxlbmFtZT4pLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjb3VsZCBhbHNvIGJyb3dzZSB0byBhbnkgb3RoZXIgcGF0aCB5b3UgaGF2ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlIGFjY2VzcyB0byBvbiB0aGUgdGFyZ2V0IHN1Y2ggYXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9iaW48L2ZpbGVuYW1lPi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGxvY2F0aW9uIGlzIHdoZXJlIHlvdXIgYXBwbGljYXRpb24gd2lsbCBiZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0ZWQgb24gdGhlIFFFTVUgc3lzdGVtLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBmYWlsIHRvIGJyb3dzZSB0byBhbmQgc3BlY2lmeSBhbiBhcHByb3ByaWF0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLCBRRU1VIHdpbGwgbm90IHVuZGVyc3RhbmQgd2hhdCB0byByZW1vdGVseQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhdW5jaC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFY2xpcHNlIGlzIGhlbHBmdWwgaW4gdGhhdCBpdCBhdXRvIGZpbGxzIHlvdXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBuYW1lIGZvciB5b3UgYXNzdW1pbmcgeW91IGJyb3dzZWQgdG8gYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBwcm9tcHRlZCB0byBwcm92aWRlIGEgdXNlcm5hbWUgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIG9wdGlvbmFsbHkgc2V0IGEgcGFzc3dvcmQsIGJlIHN1cmUgeW91Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGUgInJvb3QiIGFzIHRoZSB1c2VybmFtZSBhbmQgeW91IGxlYXZlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwYXNzd29yZCBmaWVsZCBibGFuay4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB5b3UgY2hhbmdlIHRvIHRoZSAiRGVidWciIHBlcnNwZWN0aXZlIGluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWNsaXBzZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGljayAiRGVidWciCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXB0IHRoZSBkZWJ1ZyBwZXJzcGVjdGl2ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZW9uLXVzaW5nLUxpbnV4dG9vbHMnPgotICAgICAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBMaW51eHRvb2xzPC90aXRsZT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQgZWFybGllciBpbiB0aGUgbWFudWFsLCBwZXJmb3JtYW5jZSB0b29scyBleGlzdAotICAgICAgICAgICAgICAgICAgICAoTGludXh0b29scykgdGhhdCBlbmhhbmNlIHlvdXIgZGV2ZWxvcG1lbnQgZXhwZXJpZW5jZS4KLSAgICAgICAgICAgICAgICAgICAgVGhlc2UgdG9vbHMgYXJlIGFpZHMgaW4gZGV2ZWxvcGluZyBhbmQgZGVidWdnaW5nCi0gICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9ucyBhbmQgaW1hZ2VzLgotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHJ1biB0aGVzZSB0b29scyBmcm9tIHdpdGhpbiB0aGUgRWNsaXBzZSBJREUgdGhyb3VnaAotICAgICAgICAgICAgICAgICAgICB0aGUgIkxpbnV4dG9vbHMiIG1lbnUuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29uZmlndXJlIGFuZCB1c2UgdGhlc2UgdG9vbHMsCi0gICAgICAgICAgICAgICAgICAgIHNlZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xpbnV4dG9vbHMvJz5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xpbnV4dG9vbHMvPC91bGluaz4uCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9zZWN0aW9uPgotICAgICAgICA8L3NlY3Rpb24+Ci0gICAgPC9zZWN0aW9uPgogPC9jaGFwdGVyPgogPCEtLQogdmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtaW50cm8ueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtaW50cm8ueG1sCmluZGV4IGE0MDgwMjQuLjRlNTllMDAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLWludHJvLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1pbnRyby54bWwKQEAgLTcsNyArNyw3IEBACiAKICAgICA8cGFyYT4KICAgICAgICAgVG9hc3RlciBpcyBhIHdlYiBpbnRlcmZhY2UgdG8gdGhlIFlvY3RvIFByb2plY3QncwotICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1zeXN0ZW0tdGVybSc+T3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbTwvdWxpbms+LgorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNidWlsZC1zeXN0ZW0tdGVybSc+T3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbTwvdWxpbms+LgogICAgICAgICBUaGUgaW50ZXJmYWNlIGVuYWJsZXMgeW91IHRvIGNvbmZpZ3VyZSBhbmQgcnVuIHlvdXIgYnVpbGRzLgogICAgICAgICBJbmZvcm1hdGlvbiBhYm91dCBidWlsZHMgaXMgY29sbGVjdGVkIGFuZCBzdG9yZWQgaW4gYSBkYXRhYmFzZS4KICAgICAgICAgWW91IGNhbiB1c2UgVG9hc3RlciB0byBjb25maWd1cmUgYW5kIHN0YXJ0IGJ1aWxkcyBvbiBtdWx0aXBsZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtcmVmZXJlbmNlLnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLXJlZmVyZW5jZS54bWwKaW5kZXggM2E0NmI2MS4uZTk4NDM5MSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtcmVmZXJlbmNlLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1yZWZlcmVuY2UueG1sCkBAIC0xNDgsMTc3ICsxNDgsNDYgQEAKICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KIAotICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdzZWxlY3QtdGhlLXRvYXN0ZXJjb25mLWpzb24tZmlsZSc+Ci0gICAgICAgICAgICAgICAgICAgIDx0aXRsZT5Vc2UgdGhlIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4gRmlsZTwvdGl0bGU+CisgICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3VzZS10aGUtZml4dHVyZS1mZWF0dXJlJz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPlVzZSB0aGUgRml4dHVyZSBGZWF0dXJlPC90aXRsZT4KIAogICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgd2FudCB0byB1c2UgdGhlIEFkbWluaXN0cmF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2UsIHlvdSBjYW4gZWRpdCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3RvYXN0ZXItanNvbi1maWxlcyc+PGZpbGVuYW1lPnRvYXN0ZXJjb25mLmpzb248L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgYW5kIHJlbG9hZCBpdCB0byBUb2FzdGVyLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgVG9hc3RlciBzdGFydHVwIHNjcmlwdCBpbgotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9iaXRiYWtlL2Jpbi90b2FzdGVyPC9maWxlbmFtZT4gc3BlY2lmaWVzCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGUgbG9jYXRpb24gb2YgYSBUb2FzdGVyIGNvbmZpZ3VyYXRpb24gZmlsZQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRvYXN0ZXJjb25mLmpzb248L2ZpbGVuYW1lPiBhcyB0aGUgdmFsdWUgb2YKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+VE9BU1RFUl9DT05GPC9maWxlbmFtZT4gdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyB1c2VkIHRvIHNldCB1cCB0aGUgaW5pdGlhbAotICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiB2YWx1ZXMgd2l0aGluIHRoZSBUb2FzdGVyIGRhdGFiYXNlCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgdGhlIGxheWVyIHNvdXJjZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBUd28gdmVyc2lvbnMgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBleGlzdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgdmVyc2lvbiBvZiB0aGUgZmlsZSBpcyBmb3VuZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXBva3k8L2ZpbGVuYW1lPiBsYXllcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1wb2t5L2NvbmYvdG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+KS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2ZXJzaW9uIGNvbnRhaW5zIHRoZSBkZWZhdWx0IFlvY3RvIFByb2plY3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmb3IgVG9hc3Rlci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc2Vjb25kIHZlcnNpb24gb2YgdGhlIGZpbGUgaXMgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5IG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b3BlbmVtYmVkZGVkLWNvcmU8L2ZpbGVuYW1lPiBsYXllcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+bWV0YS9jb25mL3RvYXN0ZXJjb25mLmpzb248L2ZpbGVuYW1lPikuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmVyc2lvbiBjb250YWlucyB0aGUgZGVmYXVsdCBPcGVuRW1iZWRkZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmb3IgVG9hc3Rlci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdlZGl0LXRoZS1jb25maWd1cmF0aW9uLWZpbGUnPgotICAgICAgICAgICAgICAgICAgICA8dGl0bGU+RWRpdCB0aGUgQ29uZmlndXJhdGlvbiBGaWxlPC90aXRsZT4KLQotICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIEVkaXQgdGhlIHZlcnNpb24gb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+IGZpbGUgeW91Ci0gICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIHNldCB1cCB5b3VyIFRvYXN0ZXIgaW5zdGFuY2UuCi0gICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGUgZmlsZSwgeW91IHdpbGwgZmluZCBhIHNlY3Rpb24gZm9yIGxheWVyIHNvdXJjZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBEamFuZ28gZml4dHVyZSBmZWF0dXJlIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyIHdoZW4geW91IHVzZSBpdCB0byBzcGVjaWZ5IGEgY3VzdG9tIFVSTC4gVG8gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZml4dHVyZSBmZWF0dXJlLCBjcmVhdGUgKG9yIGVkaXQpIHRoZSBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS9saWIvdG9hc3Rlci5vcm0vZml4dHVyZXMvY3VzdG9tLnhtbDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZW4gc2V0IHRoZSBmb2xsb3dpbmcgVG9hc3RlciBzZXR0aW5nIHRvIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbSBVUkw6CiAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgImxheWVyc291cmNlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiTG9jYWwgWW9jdG8gUHJvamVjdCIsCi0gICAgICAgICAgICAic291cmNldHlwZSI6ICJsb2NhbCIsCi0gICAgICAgICAgICAiYXBpdXJsIjogIi4uLy4uLyIsCi0gICAgICAgICAgICAiYnJhbmNoZXMiOiBbIkhFQUQiIF0sCi0gICAgICAgICAgICAibGF5ZXJzIjogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAib3BlbmVtYmVkZGVkLWNvcmUiLAotICAgICAgICAgICAgICAgICAgICAibG9jYWxfcGF0aCI6ICJtZXRhIiwKLSAgICAgICAgICAgICAgICAgICAgInZjc191cmwiOiAicmVtb3RlOm9yaWdpbiIsCi0gICAgICAgICAgICAgICAgICAgICJkaXJwYXRoIjogIm1ldGEiCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIm1ldGEtcG9reSIsCi0gICAgICAgICAgICAgICAgICAgICJsb2NhbF9wYXRoIjogIm1ldGEtcG9reSIsCi0gICAgICAgICAgICAgICAgICAgICJ2Y3NfdXJsIjogInJlbW90ZTpvcmlnaW4iLAotICAgICAgICAgICAgICAgICAgICAiZGlycGF0aCI6ICJtZXRhLXBva3kiCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogIm1ldGEteW9jdG8tYnNwIiwKLSAgICAgICAgICAgICAgICAgICAgImxvY2FsX3BhdGgiOiAibWV0YS15b2N0by1ic3AiLAotICAgICAgICAgICAgICAgICAgICAidmNzX3VybCI6ICJyZW1vdGU6b3JpZ2luIiwKLSAgICAgICAgICAgICAgICAgICAgImRpcnBhdGgiOiAibWV0YS15b2N0by1ic3AiCi0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIk9wZW5FbWJlZGRlZCIsCi0gICAgICAgICAgICAic291cmNldHlwZSI6ICJsYXllcmluZGV4IiwKLSAgICAgICAgICAgICJhcGl1cmwiOiAiaHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnL2xheWVyaW5kZXgvYXBpLyIsCi0gICAgICAgICAgICAiYnJhbmNoZXMiOiBbIm1hc3RlciIsICJqZXRocm8iICwiZmlkbyJdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIkltcG9ydGVkIGxheWVycyIsCi0gICAgICAgICAgICAic291cmNldHlwZSI6ICJpbXBvcnRlZCIsCi0gICAgICAgICAgICAiYXBpdXJsIjogIiIsCi0gICAgICAgICAgICAiYnJhbmNoZXMiOiBbIm1hc3RlciIsICJqZXRocm8iLCJmaWRvIiwgIkhFQUQiXQotCi0gICAgICAgIH0KLSAgICBdLAorICAgICAmbHQ7P3htbCB2ZXJzaW9uPSIxLjAiID8mZ3Q7CisgICAgICZsdDtkamFuZ28tb2JqZWN0cyB2ZXJzaW9uPSIxLjAiJmd0OworICAgICAgICZsdDtvYmplY3QgbW9kZWw9Im9ybS50b2FzdGVyc2V0dGluZyIgcGs9IjEwMCImZ3Q7CisgICAgICAgICAgICAgICAgICAgICAmbHQ7ZmllbGQgbmFtZT0ibmFtZSIgdHlwZT0iQ2hhckZpZWxkIiZndDtDVVNUT01fTEFZRVJJTkRFWF9TRVJWRVImbHQ7L2ZpZWxkJmd0OworICAgICAgICAgICAgICAgICAgICAgJmx0O2ZpZWxkIG5hbWU9InZhbHVlIiB0eXBlPSJDaGFyRmllbGQiJmd0O2h0dHBzOi8vbGF5ZXJzLm15X29yZ2FuaXphdGlvbi5vcmcvbGF5ZXJpbmRleC9icmFuY2gvbWFzdGVyL2xheWVycy8mbHQ7L2ZpZWxkJmd0OworICAgICAgICZsdDsvb2JqZWN0Jmd0OworICAgICAmbHQ7ZGphbmdvLW9iamVjdHMmZ3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGFkZCB5b3VyIG93biBsYXllciBzb3VyY2UgdG8gdGhpcyBzZWN0aW9uIGJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgdGhlIHNhbWUgZm9ybWF0IHVzZWQgZm9yIHRoZSAiT3BlbkVtYmVkZGVkIgotICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIgc291cmNlIHNob3duIGFib3ZlLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBHaXZlIHlvdXIgbGF5ZXIgc291cmNlIGEgbmFtZSwgcHJvdmlkZSB0aGUgVVJMIG9mIHlvdXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyIHNvdXJjZSBBUEksIHVzZSB0aGUgc291cmNlIHR5cGUgImxheWVyaW5kZXgiLCBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGljYXRlIHdoaWNoIGJyYW5jaGVzIGZyb20geW91ciBsYXllciBzb3VyY2UgeW91IHdhbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvIG1ha2UgYXZhaWxhYmxlIHRocm91Z2ggVG9hc3Rlci4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgT3BlbkVtYmVkZGVkIGxheWVyIHNvdXJjZSBtYWtlcwotICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIG9ubHkgaXRzICJtYXN0ZXIiLCAiZmlkbyIsIGFuZCAiamV0aHJvIgotICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoZXMuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBicmFuY2hlcyBtdXN0IG1hdGNoIHRoZSBicmFuY2ggeW91Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXQgd2hlbiBjb25maWd1cmluZyB5b3VyIHJlbGVhc2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBjb25maWd1cmUgb25lIHJlbGVhc2UgaW4gVG9hc3RlcgotICAgICAgICAgICAgICAgICAgICAgICAgYnkgc2V0dGluZyBpdHMgYnJhbmNoIHRvICJicmFuY2gtb25lIiBhbmQgeW91IGNvbmZpZ3VyZQotICAgICAgICAgICAgICAgICAgICAgICAgYW5vdGhlciByZWxlYXNlIGluIFRvYXN0ZXIgYnkgc2V0dGluZyBpdHMgYnJhbmNoIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAiYnJhbmNoLXR3byIsIHRoZSBicmFuY2hlcyBpbiB5b3VyIGxheWVyIHNvdXJjZSBzaG91bGQKLSAgICAgICAgICAgICAgICAgICAgICAgIGJlICJicmFuY2gtb25lIiBhbmQgImJyYW5jaC10d28iIGFzIHdlbGwuCi0gICAgICAgICAgICAgICAgICAgICAgICBEb2luZyBzbyBjcmVhdGVzIGEgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSByZWxlYXNlcwotICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBsYXllciBpbmZvcm1hdGlvbiBmcm9tIHlvdXIgbGF5ZXIgc291cmNlLgotICAgICAgICAgICAgICAgICAgICAgICAgVGh1cywgd2hlbiB1c2VycyBjcmVhdGUgYSBwcm9qZWN0IHdpdGggYSBnaXZlbgotICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSwgdGhleSB3aWxsIHNlZSB0aGUgYXBwcm9wcmlhdGUgbGF5ZXJzIGZyb20KLSAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgbGF5ZXIgc291cmNlLgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjb25uZWN0aW9uIGVuc3VyZXMgdGhhdCBvbmx5IGxheWVycyB0aGF0IGFyZQotICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSB3aXRoIHRoZSBzZWxlY3RlZCBwcm9qZWN0IHJlbGVhc2UgY2FuIGJlCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBmb3IgYnVpbGRpbmcuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgYWRkZWQgdGhpcyBpbmZvcm1hdGlvbiB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4gZmlsZSwgc2F2ZSB5b3VyCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBJbiBhIHRlcm1pbmFsIHdpbmRvdywgbmF2aWdhdGUgdG8gdGhlIGRpcmVjdG9yeSB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyB0aGUgVG9hc3RlciBkYXRhYmFzZSwgd2hpY2ggYnkgZGVmYXVsdCBpcyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Qgb2YgdGhlIFlvY3RvIFByb2plY3QKLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KLSAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGFyZSBsb2NhdGVkIGluIHRoYXQgZGlyZWN0b3J5LCBydW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAiPGZpbGVuYW1lPmxvYWRjb25mPC9maWxlbmFtZT4iIGNvbW1hbmQsIHdoaWNoIHRha2VzIGFzCi0gICAgICAgICAgICAgICAgICAgICAgICBhbiBhcmd1bWVudCB0aGUgZnVsbCBwYXRoIHRvIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRvYXN0ZXJjb25mLmpzb248L2ZpbGVuYW1lPiBmaWxlIHlvdSBqdXN0IGVkaXRlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgY2xvbmVkIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiByZXBvc2l0b3J5IGFuZCB5b3UgZWRpdGVkIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtcG9reS9jb25mL3RvYXN0ZXJjb25mLmpzb248L2ZpbGVuYW1lPiBmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgeW91IHdvdWxkIHR5cGUgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzoKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBsb2FkY29uZiAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEtcG9reS9jb25mL3RvYXN0ZXJjb25mLmpzb24KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIGVudGVyaW5nIHRoaXMgY29tbWFuZCwgeW91IG5lZWQgdG8gdXBkYXRlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBkYXRhYmFzZSB3aXRoIHRoZSBpbmZvcm1hdGlvbiBjb21pbmcgZnJvbSB5b3VyCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgbGF5ZXIgc291cmNlLgotICAgICAgICAgICAgICAgICAgICAgICAgVG8gZG8gdGhhdCwgeW91IHNob3VsZCBydW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAiPGZpbGVuYW1lPmxzdXBkYXRlczwvZmlsZW5hbWU+IiBjb21tYW5kIGZyb20gdGhlIGRpcmVjdG9yeQotICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBjb250YWlucyB0aGUgVG9hc3RlciBkYXRhYmFzZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgJCBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBsc3VwZGF0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgIElmIFRvYXN0ZXIgY2FuIHJlYWNoIHRoZSBBUEkgVVJMLCB5b3Ugc2hvdWxkIHNlZSBhIG1lc3NhZ2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbGxpbmcgeW91IHRoYXQgVG9hc3RlciBpcyB1cGRhdGluZyB0aGUgbGF5ZXIgc291cmNlCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHN0YXJ0IFRvYXN0ZXIgZm9yIHRoZSBmaXJzdCB0aW1lLCBvciBpZiB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGUgZmlsZSA8ZmlsZW5hbWU+dG9hc3Rlci5zcWxpdGU8L2ZpbGVuYW1lPiBhbmQgcmVzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkYXRhYmFzZSB3aWxsIHBvcHVsYXRlIGNsZWFubHkgZnJvbSB0aGlzIGxheWVyIGluZGV4IHNlcnZlci4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgaW5mb3JtYXRpb24gaGFzIGJlZW4gdXBkYXRlZCwgdmVyaWZ5IHRoZSBuZXcgbGF5ZXIKICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBieSB1c2luZyB0aGUgVG9hc3RlciB3ZWIgaW50ZXJmYWNlLgogICAgICAgICAgICAgICAgICAgICAgICAgVG8gZG8gdGhhdCwgdmlzaXQgdGhlICJBbGwgY29tcGF0aWJsZSBsYXllcnMiIHBhZ2UgaW5zaWRlIGEKLSAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgcHJvamVjdC4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBsYXllcnMgZnJvbSB5b3VyIGxheWVyIHNvdXJjZSBzaG91bGQgYmUgbGlzdGVkIHRoZXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBwcm9qZWN0LiBUaGUgbGF5ZXJzIGZyb20geW91ciBsYXllciBzb3VyY2Ugc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZWQgdGhlcmUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBjaGFuZ2UgdGhlIGluZm9ybWF0aW9uIGluIHlvdXIgbGF5ZXIgaW5kZXggc2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaCB0aGUgVG9hc3RlciBkYXRhYmFzZSBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBsc3VwZGF0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIFRvYXN0ZXIgY2FuIHJlYWNoIHRoZSBBUEkgVVJMLCB5b3Ugc2hvdWxkIHNlZSBhIG1lc3NhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbGxpbmcgeW91IHRoYXQgVG9hc3RlciBpcyB1cGRhdGluZyB0aGUgbGF5ZXIgc291cmNlIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgogICAgICAgICAgICAgPC9zZWN0aW9uPgpAQCAtMzU5LDE5ICsyMjgsMTIgQEAKICAgICAgICAgICAgICAgICBBcyBzaGlwcGVkLCBUb2FzdGVyIGlzIGNvbmZpZ3VyZWQgdG8gd29yayB3aXRoIHRoZSBmb2xsb3dpbmcKICAgICAgICAgICAgICAgICByZWxlYXNlczoKICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPllvY3RvIFByb2plY3QgMi4wICJKZXRocm8iIG9yIE9wZW5FbWJlZGRlZCAiSmV0aHJvIjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyByZWxlYXNlIGNhdXNlcyB5b3VyIFRvYXN0ZXIgcHJvamVjdHMgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGFnYWluc3QgdGhlIGhlYWQgb2YgdGhlIGpldGhybyBicmFuY2ggYXQKLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0L2NnaXQuY2dpL3Bva3kvbG9nLz9oPWpldGhybyc+PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmUvY29tbWl0Lz9oPWpldGhybyc+PC91bGluaz4uCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Zb2N0byBQcm9qZWN0IDEuOCAiRmlkbyIgb3IgT3BlbkVtYmVkZGVkICJGaWRvIjo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyByZWxlYXNlIGNhdXNlcyB5b3VyIFRvYXN0ZXIgcHJvamVjdHMgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGFnYWluc3QgdGhlIGhlYWQgb2YgdGhlIGZpZG8gYnJhbmNoIGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC9jZ2l0LmNnaS9wb2t5L2xvZy8/aD1maWRvJz48L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZS9jb21taXQvP2g9Zmlkbyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0ICZESVNUUk87ICImRElTVFJPX05BTUU7IiBvciBPcGVuRW1iZWRkZWQgIiZESVNUUk9fTkFNRTsiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHJlbGVhc2UgY2F1c2VzIHlvdXIgVG9hc3RlciBwcm9qZWN0cyB0byBidWlsZAorICAgICAgICAgICAgICAgICAgICAgICAgYWdhaW5zdCB0aGUgaGVhZCBvZiB0aGUgJkRJU1RST19OQU1FX05PX0NBUDsgYnJhbmNoIGF0CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC9jZ2l0LmNnaS9wb2t5L2xvZy8/aD1yb2Nrbyc+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIDx1bGluayB1cmw9J2h0dHA6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZS9jb21taXQvP2g9cm9ja28nPjwvdWxpbms+LgogICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+WW9jdG8gUHJvamVjdCAiTWFzdGVyIiBvciBPcGVuRW1iZWRkZWQgIk1hc3RlciI6PC9lbXBoYXNpcz4KICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVsZWFzZSBjYXVzZXMgeW91ciBUb2FzdGVyIFByb2plY3RzIHRvCkBAIC0zOTAsNDY4ICsyNTIsNDEzIEBACiAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CiAKLSAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItcmVsZWFzZXMtY29tcHJpc2VkLW9mJz4KLSAgICAgICAgICAgIDx0aXRsZT5XaGF0IE1ha2VzIFVwIGEgUmVsZWFzZT88L3RpdGxlPgorICAgIDxzZWN0aW9uIGlkPSdjb25maWd1cmluZy10b2FzdGVyJz4KKyAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIFRvYXN0ZXI8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIFRvYXN0ZXIsIHlvdSBtdXN0IGNvbmZpZ3VyZSB0aGUgZGF0YWJhc2Ugd2l0aCB0aGUKKyAgICAgICAgICAgIGRlZmF1bHQgY29udGVudC4gVGhlIGZvbGxvd2luZyBzdWJzZWN0aW9ucyBkZXNjcmliZSB2YXJpb3VzIGFzcGVjdHMKKyAgICAgICAgICAgIG9mIFRvYXN0ZXIgY29uZmlndXJhdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjb25maWd1cmluZy10aGUtd29ya2Zsb3cnPgorICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIHRoZSBXb3JrZmxvdzwvdGl0bGU+CiAKICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEEgcmVsZWFzZSBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nOgotICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TmFtZTo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHJlbGVhc2UgKDxmaWxlbmFtZT5uYW1lPC9maWxlbmFtZT4pLgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyByZWxlYXNlIG5hbWUgbmV2ZXIgYXBwZWFycyBpbiB0aGUgdGhlIFRvYXN0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIHdlYiBpbnRlcmZhY2UuCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIGEgdXNlciBuZXZlciBzZWVzIHRoZSByZWxlYXNlIG5hbWUuCisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9jaGVja3NldHRpbmdzLnB5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlIGNvbnRyb2xzIHdvcmtmbG93IGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzdGVwcyBvdXRsaW5lIHRoZSBwcm9jZXNzIHRvIGluaXRpYWxseSBwb3B1bGF0ZQorICAgICAgICAgICAgICAgIHRoaXMgZGF0YWJhc2UuCisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBwcm9qZWN0IHNldHRpbmdzIGFyZSBzZXQgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9ybS9maXh0dXJlcy9zZXR0aW5ncy54bWw8L2ZpbGVuYW1lPi4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRlc2NyaXB0aW9uOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgdGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgcmVsZWFzZQotICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5kZXNjcmlwdGlvbjwvZmlsZW5hbWU+KS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZGVzY3JpcHRpb24gaXMgd2hhdCB1c2VycyBlbmNvdW50ZXIgd2hlbiBjcmVhdGluZwotICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdHMgd2l0aCB0aGUgVG9hc3RlciB3ZWIgaW50ZXJmYWNlLgotICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgY29uZmlndXJlIHlvdXIgcmVsZWFzZSwgYmUgc3VyZSB0byB1c2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGEgZGVzY3JpcHRpb24gdGhhdCBzdWZmaWNpZW50bHkgZGVzY3JpYmVzIGFuZCBpcwotICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXJzdGFuZGFibGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBJZiBUb2FzdGVyIGhhcyBtb3JlIHRoYW4gb25lIHJlbGVhc2UgY29uZmlndXJlZCwgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlIGRlc2NyaXB0aW9ucyBhcHBlYXIgbGlzdGVkIGluIGEgZHJvcCBkb3duIG1lbnUKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYSB1c2VyIGNyZWF0ZXMgYSBuZXcgcHJvamVjdC4KLSAgICAgICAgICAgICAgICAgICAgICAgIElmIFRvYXN0ZXIgaGFzIG9ubHkgb25lIHJlbGVhc2UgY29uZmlndXJlZCwgYWxsCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0cyBjcmVhdGVkIHVzaW5nIHRoZSB3ZWIgaW50ZXJmYWNlIHRha2UgdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSBhbmQgdGhlIGRyb3AgZG93biBtZW51IGRvZXMgbm90IGRpc3BsYXkgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBUb2FzdGVyIHdlYiBpbnRlcmZhY2UuCisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHByb2plY3QgZGlzdHJvIGFuZCBsYXllcnMgYXJlIGFkZGVkCisgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIDxmaWxlbmFtZT5vcm0vZml4dHVyZXMvcG9reS54bWw8L2ZpbGVuYW1lPiBpZiBwb2t5CisgICAgICAgICAgICAgICAgICAgICAgICBpcyBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiBwb2t5IGlzIG5vdCBpbnN0YWxsZWQsIHRoZXkgYXJlIGFkZGVkCisgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIDxmaWxlbmFtZT5vcm0vZml4dHVyZXMvb2UtY29yZS54bWw8L2ZpbGVuYW1lPi4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJpdEJha2U6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBCaXRiYWtlIHZlcnNpb24gKDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4pCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIGJ1aWxkIGxheWVycyBzZXQgaW4gdGhlIGN1cnJlbnQgcmVsZWFzZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmVyc2lvbiBpcyBkZXNjcmliZWQgYnkgYSBuYW1lLCBhIEdpdCBVUkwsIGEKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaCBpbiB0aGUgR2l0IFVSTCwgYW5kIGEgZGlyZWN0b3J5IHBhdGggaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgc25pcHBldCBmcm9tCi0gICAgICAgICAgICAgICAgICAgICAgICBhIFRvYXN0ZXIgSlNPTiBjb25maWd1cmF0aW9uIGZpbGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGlzIEJpdEJha2UgdmVyc2lvbiB1c2VzIHRoZSBtYXN0ZXIgYnJhbmNoIGZyb20gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgcmVwb3NpdG9yeToKLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgImJpdGJha2UiIDogWwotICAgICAgICAgewotICAgICAgICAgICAgICJuYW1lIjogIm1hc3RlciIsCi0gICAgICAgICAgICAgImdpdHVybCI6ICJnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlIiwKLSAgICAgICAgICAgICAiYnJhbmNoIjogIm1hc3RlciIsCi0gICAgICAgICAgICAgImRpcnBhdGgiOiAiIgotICAgICAgICAgfQotICAgICBdCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIG1vcmUgZGV0YWlsIG9uIGVhY2ggb2YgdGhlIGl0ZW1zIHRoYXQgY29tcHJpc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBCaXRCYWtlIHZlcnNpb246Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TmFtZTo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHN0cmluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPm5hbWU8L2ZpbGVuYW1lPikgdXNlZCB0byByZWZlciB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdmVyc2lvbiBvZiBCaXRCYWtlIHlvdSBhcmUgdXNpbmcgd2l0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdGVyLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG5hbWUgaXMgbmV2ZXIgZXhwb3NlZCB0aHJvdWdoIFRvYXN0ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R2l0IFVSTDo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgVVJMICg8ZmlsZW5hbWU+Z2l0dXJsPC9maWxlbmFtZT4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgQml0QmFrZSBHaXQgcmVwb3NpdG9yeSBjbG9uZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIFRvYXN0ZXIgcHJvamVjdHMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnJhbmNoOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBHaXQgYnJhbmNoLCBvciByZXZpc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5icmFuY2g8L2ZpbGVuYW1lPikgb2YgdGhlIEJpdEJha2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSB1c2VkIHdpdGggVG9hc3Rlci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5EaXJlY3RvcnkgUGF0aDo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc3ViLWRpcmVjdG9yeSBvZiB0aGUgQml0QmFrZSByZXBvc2l0b3J5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+ZGlycGF0aDwvZmlsZW5hbWU+KS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIEdpdCBVUkwgaW5jbHVkZXMgbW9yZSB0aGFuIG9uZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5LCB5b3UgbmVlZCB0byBzZXQgdGhpcyBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBVUkwgZG9lcyBub3QgaW5jbHVkZSBtb3JlIHRoYW4gYSBzaW5nbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSwgeW91IGNhbiBzZXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpcnBhdGg8L2ZpbGVuYW1lPiB0byBhIG51bGwgc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpLmUuICIiKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIDxmaWxlbmFtZT5vcm0vZml4dHVyZXMvY3VzdG9tLnhtbDwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0cywgdGhlbiBpdHMgdmFsdWVzIGFyZSBhZGRlZC4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJyYW5jaDo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJyYW5jaCBmb3IgdGhlIGxheWVyIHNvdXJjZQotICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5icmFuY2g8L2ZpbGVuYW1lPikgdXNlZCB3aXRoIHRoZSByZWxlYXNlLgotICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGZvciB0aGUgT3BlbkVtYmVkZGVkIGxheWVyIHNvdXJjZSwgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAibWFzdGVyIiwgImZpZG8iLCBhbmQgImpldGhybyIgYnJhbmNoZXMgYXJlIGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGxheWVyIGluZGV4IGlzIHRoZW4gc2Nhbm5lZCBhbmQgYWRkZWQgdG8gdGhlIGRhdGFiYXNlLgogICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RGVmYXVsdCBMYXllcnM6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzZXQgb2YgZGVmYXVsdCBsYXllcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+ZGVmYXVsdGxheWVyczwvZmlsZW5hbWU+KSBhdXRvbWF0aWNhbGx5Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRlZCB0byB0aGUgcHJvamVjdCBjb25maWd1cmF0aW9uIHdoZW4gYSBwcm9qZWN0IGlzCi0gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TGF5ZXIgU291cmNlIFByaW9yaXRpZXM8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgQSBzcGVjaWZpY2F0aW9uIG9mCi0gICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdsYXllci1zb3VyY2UnPmxheWVyIHNvdXJjZTwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXRpZXMgKDxmaWxlbmFtZT5sYXllcnNvdXJjZXByaW9yaXR5PC9maWxlbmFtZT4pLgotICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgZm9yIFRvYXN0ZXIgdG8gd29yayBhcyBpbnRlbmRlZCwgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAiSW1wb3J0ZWQgbGF5ZXJzIiBsYXllciBzb3VyY2Ugc2hvdWxkIGhhdmUgdGhlIGhpZ2hlc3QKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5LCB3aGljaCBtZWFucyB0aGF0IGxheWVycyBtYW51YWxseSBpbXBvcnRlZCBieQotICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnMgd2l0aCB0aGUgIkltcG9ydCBsYXllciIgZnVuY3Rpb25hbGl0eSB3aWxsCi0gICAgICAgICAgICAgICAgICAgICAgICBhbHdheXMgYmUgdmlzaWJsZSBhbmQgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5IZWxwIFRleHQ6PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIEhlbHAgdGV4dCAoPGZpbGVuYW1lPmhlbHB0ZXh0PC9maWxlbmFtZT4pIHRoYXQgZXhwbGFpbnMKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoYXQgdGhlIHJlbGVhc2UgZG9lcyB3aGVuIHNlbGVjdGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBoZWxwIHRleHQgYXBwZWFycyBiZWxvdyB0aGUgcmVsZWFzZSBkcm9wLWRvd24KLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbnUgd2hlbiB5b3UgY3JlYXRlIGEgVG9hc3RlciBwcm9qZWN0LgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGhlbHAgdGV4dCBzaG91bGQgYXNzaXN0IHVzZXJzIGluIG1ha2luZyB0aGUgY29ycmVjdAotICAgICAgICAgICAgICAgICAgICAgICAgZGVjaXNpb24gcmVnYXJkaW5nIHRoZSByZWxlYXNlIHRvIHVzZSBmb3IgYSBnaXZlbgotICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgT25jZSB0aGVzZSBzdGVwcyBjb21wbGV0ZSwgVG9hc3RlciBpcyBzZXQgdXAgYW5kIHJlYWR5IHRvIHVzZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjdXN0b21pemluZy1wcmUtc2V0LWRhdGEnPgorICAgICAgICAgICAgPHRpdGxlPkN1c3RvbWl6aW5nIFByZS1TZXQgRGF0YTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBwcmUtc2V0IGRhdGEgZm9yIFRvYXN0ZXIgaXMgZWFzaWx5IGN1c3RvbWl6YWJsZS4gWW91IGNhbgorICAgICAgICAgICAgICAgIGNyZWF0ZSB0aGUgPGZpbGVuYW1lPm9ybS9maXh0dXJlcy9jdXN0b20ueG1sPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgIHRvIGN1c3RvbWl6ZSB0aGUgdmFsdWVzIHRoYXQgZ28gaW50byB0byB0aGUgZGF0YWJhc2UuCisgICAgICAgICAgICAgICAgQ3VzdG9taXphdGlvbiBpcyBhZGRpdGl2ZSwKKyAgICAgICAgICAgICAgICBhbmQgY2FuIGVpdGhlciBleHRlbmQgb3IgY29tcGxldGVseSByZXBsYWNlIHRoZSBleGlzdGluZyB2YWx1ZXMuCiAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRvIHN1bW1hcml6ZSB3aGF0IGNvbXByaXNlcyBhIHJlbGVhc2UsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcKLSAgICAgICAgICAgICAgICBleGFtcGxlIGZyb20gYSBUb2FzdGVyIEpTT04gZmlsZS4KLSAgICAgICAgICAgICAgICBUaGUgY29uZmlndXJhdGlvbiBuYW1lcyB0aGUgcmVsZWFzZSAibWFzdGVyIiBhbmQgdXNlcyB0aGUKLSAgICAgICAgICAgICAgICAibWFzdGVyIiBicmFuY2ggcHJvdmlkZWQgYnkgdGhlIGxheWVyIHNvdXJjZSBvZiB0eXBlCi0gICAgICAgICAgICAgICAgImxheWVyaW5kZXgiLCB3aGljaCBpcyBjYWxsZWQgIk9wZW5FbWJlZGRlZCIsIGFuZCBzZXRzCi0gICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5vcGVuZW1iZWRkZWQtY29yZTwvZmlsZW5hbWU+IGxheWVyIGFzIHRoZSBvbmUKLSAgICAgICAgICAgICAgICB0byBiZSBhZGRlZCBieSBkZWZhdWx0IHRvIGFueSBwcm9qZWN0cyBjcmVhdGVkIGluIFRvYXN0ZXIuCi0gICAgICAgICAgICAgICAgVGhlIEJpdEJha2UgdmVyc2lvbiB1c2VkIHdvdWxkIGJlIGRlZmluZWQgYXMgc2hvd24gZWFybGllcgotICAgICAgICAgICAgICAgIGluIHRoZSBwcmV2aW91cyBsaXN0OgorICAgICAgICAgICAgICAgIFlvdSB1c2UgdGhlIDxmaWxlbmFtZT5vcm0vZml4dHVyZXMvY3VzdG9tLnhtbDwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgcHJvamVjdCBzZXR0aW5ncyBmb3IgdGhlIG1hY2hpbmUsIGRpc3RybywKKyAgICAgICAgICAgICAgICBmaWxlIGltYWdlcywgYW5kIGxheWVycy4KKyAgICAgICAgICAgICAgICBXaGVuIGNyZWF0aW5nIGEgbmV3IHByb2plY3QsIHlvdSBjYW4gdXNlIHRoZSBmaWxlIHRvIGRlZmluZQorICAgICAgICAgICAgICAgIHRoZSBvZmZlcmVkIGFsdGVybmF0ZSBwcm9qZWN0IHJlbGVhc2Ugc2VsZWN0aW9ucy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNhbiBhZGQgb25lIG9yIG1vcmUgYWRkaXRpb25hbCBzZWxlY3Rpb25zIHRoYXQKKyAgICAgICAgICAgICAgICBwcmVzZW50IGN1c3RvbSBsYXllciBzZXRzIG9yIGRpc3Ryb3MsIGFuZCBhbnkgb3RoZXIgbG9jYWwgb3IgcHJvcHJpZXRhcnkKKyAgICAgICAgICAgICAgICBjb250ZW50LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHlvdSBjYW4gY29tcGxldGVseSBkaXNhYmxlIHRoZSBjb250ZW50IGZyb20gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9lLWNvcmUueG1sPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5wb2t5LnhtbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZXMgYnkgZGVmaW5pbmcgdGhlIHNlY3Rpb24gc2hvd24gYmVsb3cgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNldHRpbmdzLnhtbDwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgb3B0aW9uIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgaWYgeW91ciBjdXN0b20KKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGRlZmluZXMgZmV3ZXIgcmVsZWFzZXMgb3IgbGF5ZXJzIHRoYW4gdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICBmaXh0dXJlIGZpbGVzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2V0cyAibmFtZSIgdG8gIkNVU1RPTV9YTUxfT05MWSIgYW5kIGl0cyB2YWx1ZQorICAgICAgICAgICAgICAgIHRvICJUcnVlIi4KICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICJyZWxlYXNlcyI6IFsKLSAgICAgICAgIHsKLSAgICAgICAgICAgICAibmFtZSI6ICJtYXN0ZXIiLAotICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPcGVuRW1iZWRkZWQgbWFzdGVyIiwKLSAgICAgICAgICAgICAiYml0YmFrZSI6ICJtYXN0ZXIiLAotICAgICAgICAgICAgICJicmFuY2giOiAibWFzdGVyIiwKLSAgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiBdLAotICAgICAgICAgICAgICJsYXllcnNvdXJjZXByaW9yaXR5IjogeyAiSW1wb3J0ZWQgbGF5ZXJzIjogOTksICJMb2NhbCBPcGVuRW1iZWRkZWQiIDogMTAsICJPcGVuRW1iZWRkZWQiIDogIDAgfSwKLSAgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB1c2luZyB0aGUgdGlwIG9mIHRoZSAmbHQ7YSBocmVmPVwiaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvcG9reS9sb2cvXCImZ3Q7WW9jdG8gUHJvamVjdCBtYXN0ZXIgYnJhbmNoJmx0Oy9hJmd0Oywgd2hlcmUgYWN0aXZlIGRldmVsb3BtZW50IHRha2VzIHBsYWNlLiBUaGlzIGlzIG5vdCBhIHN0YWJsZSBicmFuY2gsIHNvIHlvdXIgYnVpbGRzIG1pZ2h0IG5vdCB3b3JrIGFzIGV4cGVjdGVkLiIKLSAgICAgICAgIH0KLSAgICAgXQorICAgICAmbHQ7b2JqZWN0IG1vZGVsPSJvcm0udG9hc3RlcnNldHRpbmciIHBrPSI5OSImZ3Q7CisgICAgICAgJmx0O2ZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibmFtZSImZ3Q7Q1VTVE9NX1hNTF9PTkxZJmx0Oy9maWVsZCZndDsKKyAgICAgICAmbHQ7ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJ2YWx1ZSImZ3Q7VHJ1ZSZsdDsvZmllbGQmZ3Q7CisgICAgICZsdDsvb2JqZWN0Jmd0OwogICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9zZWN0aW9uPgotICAgIDwvc2VjdGlvbj4KIAotICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWpzb24tZmlsZXMnPgotICAgICAgICA8dGl0bGU+SlNPTiBGaWxlczwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBZb3UgbXVzdCBjb25maWd1cmUgVG9hc3RlciBiZWZvcmUgdXNpbmcgaXQuCi0gICAgICAgICAgICBDb25maWd1cmF0aW9uIGN1c3RvbWl6ZXMgbGF5ZXIgc291cmNlIHNldHRpbmdzIGFuZCBUb2FzdGVyIGRlZmF1bHRzCi0gICAgICAgICAgICBmb3IgYWxsIHVzZXJzIGFuZCBpcyBwZXJmb3JtZWQgYnkgdGhlIHBlcnNvbiByZXNwb25zaWJsZSBmb3IKLSAgICAgICAgICAgIFRvYXN0ZXIgQ29uZmlndXJhdGlvbiAoaS5lICB0aGUgVG9hc3RlciBBZG1pbmlzdHJhdG9yKS4KLSAgICAgICAgICAgIFRoZSBUb2FzdGVyIEFkbWluaXN0cmF0b3IgcGVyZm9ybXMgdGhpcyBjb25maWd1cmF0aW9uIHRocm91Z2ggdGhlCi0gICAgICAgICAgICBEamFuZ28gYWRtaW5pc3RyYXRpb24gaW50ZXJmYWNlLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUbyBtYWtlIGl0IGVhc2llciB0byBpbml0aWFsbHkgc3RhcnQgVG9hc3RlciwgeW91IGNhbiBpbXBvcnQgYQotICAgICAgICAgICAgcHJlLWRlZmluZWQgY29uZmlndXJhdGlvbiBmaWxlIHVzaW5nIHRoZQotICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndG9hc3Rlci1jb21tYW5kLWxvYWRjb25mJz48ZmlsZW5hbWU+bG9hZGNvbmY8L2ZpbGVuYW1lPjwvbGluaz4KLSAgICAgICAgICAgIGNvbW1hbmQuCi0gICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICBUaGUgY29uZmlndXJhdGlvbiBmaWxlIGlzIGEgSlNPTi1mb3JtYXR0ZWQgdGV4dCBmaWxlIHdpdGgKLSAgICAgICAgICAgICAgICBzcGVjaWZpYyBmaWVsZHMgdGhhdCBUb2FzdGVyIHJlY29nbml6ZXMuCi0gICAgICAgICAgICAgICAgSXQgaXMgbm90IGEgZGF0YSBkdW1wIGZyb20gdGhlIGRhdGFiYXNlLCBzbyBpdCBjYW5ub3QgYmUKLSAgICAgICAgICAgICAgICBsb2FkZWQgZGlyZWN0bHkgaW4gdGhlIGRhdGFiYXNlLgotICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBCeSBjb252ZW50aW9uLCB0aGUgc3VwcGxpZWQgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgbmFtZWQKLSAgICAgICAgICAgIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4uCi0gICAgICAgICAgICBUaGUgVG9hc3RlciBBZG1pbmlzdHJhdG9yIGNhbiBjdXN0b21pemUgdGhlIGZpbGUgcHJpb3IgdG8gbG9hZGluZwotICAgICAgICAgICAgaXQgaW50byBUb2FzdGVyLgotICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5UT0FTVEVSX0NPTkY8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpbiB0aGUKLSAgICAgICAgICAgIFRvYXN0ZXIgc3RhcnR1cCBzY3JpcHQgYXQgPGZpbGVuYW1lPmJpdGJha2UvYmluL3RvYXN0ZXI8L2ZpbGVuYW1lPgotICAgICAgICAgICAgc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgPGZpbGVuYW1lPnRvYXN0ZXJjb25mLmpzb248L2ZpbGVuYW1lPiBmaWxlLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHNlY3Rpb24gaWQ9J2pzb24tZmlsZS1jaG9pY2VzJz4KLSAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmF0aW9uIEZpbGUgQ2hvaWNlczwvdGl0bGU+CisgICAgICAgIDxzZWN0aW9uIGlkPSd1bmRlcnN0YW5kaW5nLWZpeHR1cmUtZmlsZS1mb3JtYXQnPgorICAgICAgICAgICAgPHRpdGxlPlVuZGVyc3RhbmRpbmcgRml4dHVyZSBGaWxlIEZvcm1hdDwvdGl0bGU+CiAKICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFR3byB2ZXJzaW9ucyBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGV4aXN0OgotICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtcG9reS9jb25mL3RvYXN0ZXJjb25mLmpzb248L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5IG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCdzIDxmaWxlbmFtZT5tZXRhLXBva3k8L2ZpbGVuYW1lPiBsYXllci4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmVyc2lvbiBjb250YWlucyB0aGUgZGVmYXVsdCBZb2N0byBQcm9qZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZvciBUb2FzdGVyLgotICAgICAgICAgICAgICAgICAgICAgICAgWW91IGFyZSBwcm9tcHRlZCB0byBzZWxlY3QgdGhpcyBmaWxlIGR1cmluZyB0aGUgVG9hc3RlcgotICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHVwIHByb2Nlc3MgaWYgeW91IGNsb25lZCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gcmVwb3NpdG9yeSAoaS5lLgotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiZZT0NUT19HSVRfVVJMOy9wb2t5PC9maWxlbmFtZT4pLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bWV0YS9jb25mL3RvYXN0ZXJjb25mLmpzb248L2ZpbGVuYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5IG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkJ3MgPGZpbGVuYW1lPm9wZW5lbWJlZGRlZC1jb3JlPC9maWxlbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2ZXJzaW9uIGNvbnRhaW5zIHRoZSBkZWZhdWx0IE9wZW5FbWJlZGRlZAotICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmb3IgVG9hc3Rlci4KLSAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhcmUgcHJvbXB0ZWQgdG8gc2VsZWN0IHRoaXMgZmlsZSBkdXJpbmcgdGhlIFRvYXN0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldCB1cCBwcm9jZXNzIGlmIHlvdSBoYWQgY2xvbmVkIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9wZW5lbWJlZGRlZC1jb3JlPC9maWxlbmFtZT4gcmVwb3NpdG9yeSAoaS5lLgotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlPC9maWxlbmFtZT4pLgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBvdmVydmlldyBvZiB0aGUgZmlsZSBmb3JtYXQgdXNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b2UtY29yZS54bWw8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPnBva3kueG1sPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5jdXN0b20ueG1sPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgc3Vic2VjdGlvbnMgZGVzY3JpYmUgZWFjaCBvZiB0aGUgc2VjdGlvbnMgaW4gdGhlCisgICAgICAgICAgICAgICAgZml4dHVyZSBmaWxlcywgYW5kIG91dGxpbmUgYW4gZXhhbXBsZSBzZWN0aW9uIG9mIHRoZSBYTUwgY29kZS4KKyAgICAgICAgICAgICAgICB5b3UgY2FuIHVzZSB0byBoZWxwIHVuZGVyc3RhbmQgdGhpcyBpbmZvcm1hdGlvbiBhbmQgY3JlYXRlIGEgbG9jYWwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y3VzdG9tLnhtbDwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdkZWZpbmluZy10aGUtZGVmYXVsdC1kaXN0cm8tYW5kLW90aGVyLXZhbHVlcyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkRlZmluaW5nIHRoZSBEZWZhdWx0IERpc3RybyBhbmQgT3RoZXIgVmFsdWVzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgZGVmYXVsdCBkaXN0cm8gdmFsdWUgZm9yIG5ldyBwcm9qZWN0cy4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgaXQgcmVzZXJ2ZXMgdGhlIGZpcnN0IFRvYXN0ZXIgU2V0dGluZyByZWNvcmQgIjEiLgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGRlbW9uc3RyYXRlcyBob3cgdG8gc2V0IHRoZSBwcm9qZWN0IGRlZmF1bHQgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgZm9yCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ESVNUUk8nPjxmaWxlbmFtZT5ESVNUUk88L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICZsdDshLS0gU2V0IHRoZSBwcm9qZWN0IGRlZmF1bHQgdmFsdWUgZm9yIERJU1RSTyAtLSZndDsKKyAgICAgJmx0O29iamVjdCBtb2RlbD0ib3JtLnRvYXN0ZXJzZXR0aW5nIiBwaz0iMSImZ3Q7CisgICAgICAgJmx0O2ZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibmFtZSImZ3Q7REVGQ09ORl9ESVNUUk8mbHQ7L2ZpZWxkJmd0OworICAgICAgICZsdDtmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9InZhbHVlIiZndDtwb2t5Jmx0Oy9maWVsZCZndDsKKyAgICAgJmx0Oy9vYmplY3QmZ3Q7CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBvdmVycmlkZSBvdGhlciBkZWZhdWx0IHByb2plY3QgdmFsdWVzIGJ5IGFkZGluZworICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsIFRvYXN0ZXIgU2V0dGluZyBzZWN0aW9ucyBzdWNoIGFzIGFueSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MgY29taW5nIGZyb20gdGhlIDxmaWxlbmFtZT5zZXR0aW5ncy54bWw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICBBbHNvLCB5b3UgY2FuIGFkZCBjdXN0b20gdmFsdWVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgICAgICAgICBUaGUgInBrIiB2YWx1ZXMgbXVzdCBiZSB1bmlxdWUuCisgICAgICAgICAgICAgICAgICAgICAgIEJ5IGNvbnZlbnRpb24sIHZhbHVlcyB0aGF0IHNldCBkZWZhdWx0IHByb2plY3QgdmFsdWVzIGhhdmUgYQorICAgICAgICAgICAgICAgICAgICAgICAiREVGQ09ORiIgcHJlZml4LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2RlZmluaW5nLWJpdGJha2UtdmVyc2lvbic+CisgICAgICAgICAgICAgICAgPHRpdGxlPkRlZmluaW5nIEJpdEJha2UgVmVyc2lvbjwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIHdoaWNoIHZlcnNpb24gb2YgQml0QmFrZSBpcyB1c2VkCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgZm9sbG93aW5nIHJlbGVhc2Ugc2VsZWN0aW9uOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICZsdDshLS0gQml0YmFrZSB2ZXJzaW9ucyB3aGljaCBjb3JyZXNwb25kIHRvIHRoZSBtZXRhZGF0YSByZWxlYXNlIC0tJmd0OworICAgICAmbHQ7b2JqZWN0IG1vZGVsPSJvcm0uYml0YmFrZXZlcnNpb24iIHBrPSIxIiZndDsKKyAgICAgICAmbHQ7ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJuYW1lIiZndDtyb2NrbyZsdDsvZmllbGQmZ3Q7CisgICAgICAgJmx0O2ZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iZ2l0dXJsIiZndDtnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5Jmx0Oy9maWVsZCZndDsKKyAgICAgICAmbHQ7ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJicmFuY2giJmd0O3JvY2tvJmx0Oy9maWVsZCZndDsKKyAgICAgICAmbHQ7ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJkaXJwYXRoIiZndDtiaXRiYWtlJmx0Oy9maWVsZCZndDsKKyAgICAgJmx0Oy9vYmplY3QmZ3Q7CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdkZWZpbmluZy1yZWxlYXNlcyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkRlZmluaW5nIFJlbGVhc2U8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyB0aGUgcmVsZWFzZXMgd2hlbiB5b3UgY3JlYXRlIGEgbmV3CisgICAgICAgICAgICAgICAgICAgIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJmx0OyEtLSBSZWxlYXNlcyBhdmFpbGFibGUgLS0mZ3Q7CisgICAgICZsdDtvYmplY3QgbW9kZWw9Im9ybS5yZWxlYXNlIiBwaz0iMSImZ3Q7CisgICAgICAgJmx0O2ZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibmFtZSImZ3Q7cm9ja28mbHQ7L2ZpZWxkJmd0OworICAgICAgICZsdDtmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImRlc2NyaXB0aW9uIiZndDtZb2N0byBQcm9qZWN0IDIuNCAiUm9ja28iJmx0Oy9maWVsZCZndDsKKyAgICAgICAmbHQ7ZmllbGQgcmVsPSJNYW55VG9PbmVSZWwiIHRvPSJvcm0uYml0YmFrZXZlcnNpb24iIG5hbWU9ImJpdGJha2VfdmVyc2lvbiImZ3Q7MSZsdDsvZmllbGQmZ3Q7CisgICAgICAgJmx0O2ZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iYnJhbmNoX25hbWUiJmd0O3JvY2tvJmx0Oy9maWVsZCZndDsKKyAgICAgICAmbHQ7ZmllbGQgdHlwZT0iVGV4dEZpZWxkIiBuYW1lPSJoZWxwdGV4dCImZ3Q7VG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB1c2luZyB0aGUgdGlwIG9mIHRoZSAmbHQ7YSBocmVmPSJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wb2t5L2xvZy8/aD1yb2NrbyImZ3Q7WW9jdG8gUHJvamVjdCBSb2NrbyBicmFuY2gmbHQ7L2EmZ3Q7LiZsdDsvZmllbGQmZ3Q7CisgICAgICZsdDsvb2JqZWN0Jmd0OworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSAicGsiIHZhbHVlIG11c3QgbWF0Y2ggdGhlIGFib3ZlIHJlc3BlY3RpdmUgQml0QmFrZQorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uIHJlY29yZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdkZWZpbmluZy10aGUtcmVsZWFzZS1kZWZhdWx0LWxheWVyLW5hbWVzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+RGVmaW5pbmcgdGhlIFJlbGVhc2UgRGVmYXVsdCBMYXllciBOYW1lczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIHRoZSBkZWZhdWx0IGxheWVycyBmb3IgZWFjaCByZWxlYXNlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICZsdDshLS0gRGVmYXVsdCBwcm9qZWN0IGxheWVycyBmb3IgZWFjaCByZWxlYXNlIC0tJmd0OworICAgICAmbHQ7b2JqZWN0IG1vZGVsPSJvcm0ucmVsZWFzZWRlZmF1bHRsYXllciIgcGs9IjEiJmd0OworICAgICAgICZsdDtmaWVsZCByZWw9Ik1hbnlUb09uZVJlbCIgdG89Im9ybS5yZWxlYXNlIiBuYW1lPSJyZWxlYXNlIiZndDsxJmx0Oy9maWVsZCZndDsKKyAgICAgICAmbHQ7ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJsYXllcl9uYW1lIiZndDtvcGVuZW1iZWRkZWQtY29yZSZsdDsvZmllbGQmZ3Q7CisgICAgICZsdDsvb2JqZWN0Jmd0OworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSAncGsnIHZhbHVlcyBpbiB0aGUgZXhhbXBsZSBhYm92ZSBzaG91bGQgc3RhcnQgYXQgIjEiIGFuZCBpbmNyZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgdW5pcXVlbHkuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBzYW1lIGxheWVyIG5hbWUgaW4gbXVsdGlwbGUgcmVsZWFzZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nZGVmaW5pbmctbGF5ZXItZGVmaW5pdGlvbnMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5EZWZpbmluZyBMYXllciBEZWZpbml0aW9uczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTGF5ZXIgZGVmaW5pdGlvbnMgYXJlIHRoZSBtb3N0IGNvbXBsZXguCisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBlYWNoIG9mIHRoZSBsYXllcnMsIGFuZCB0aGVuIGRlZmluZXMgdGhlIGV4YWN0IGxheWVyCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gb2YgdGhlIGxheWVyIHVzZWQgZm9yIGVhY2ggcmVzcGVjdGl2ZSByZWxlYXNlLgorICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBoYXZlIG9uZSA8ZmlsZW5hbWU+b3JtLmxheWVyPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZW50cnkgZm9yIGVhY2ggbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIFRoZW4sIHdpdGggZWFjaCBlbnRyeSB5b3UgbmVlZCBhIHNldCBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b3JtLmxheWVyX3ZlcnNpb248L2ZpbGVuYW1lPiBlbnRyaWVzIHRoYXQgY29ubmVjdHMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGxheWVyIHdpdGggZWFjaCByZWxlYXNlIHRoYXQgaW5jbHVkZXMgdGhlIGxheWVyLgorICAgICAgICAgICAgICAgICAgICBJbiBnZW5lcmFsIGFsbCByZWxlYXNlcyBpbmNsdWRlIHRoZSBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAmbHQ7b2JqZWN0IG1vZGVsPSJvcm0ubGF5ZXIiIHBrPSIxIiZndDsKKyAgICAgICAmbHQ7ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJuYW1lIiZndDtvcGVuZW1iZWRkZWQtY29yZSZsdDsvZmllbGQmZ3Q7CisgICAgICAgJmx0O2ZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0ibGF5ZXJfaW5kZXhfdXJsIiZndDsmbHQ7L2ZpZWxkJmd0OworICAgICAgICZsdDtmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9InZjc191cmwiJmd0O2dpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kmbHQ7L2ZpZWxkJmd0OworICAgICAgICZsdDtmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9InZjc193ZWJfdXJsIiZndDtodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wb2t5Jmx0Oy9maWVsZCZndDsKKyAgICAgICAmbHQ7ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJ2Y3Nfd2ViX3RyZWVfYmFzZV91cmwiJmd0O2h0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL3Bva3kvdHJlZS8lcGF0aCU/aD0lYnJhbmNoJSZsdDsvZmllbGQmZ3Q7CisgICAgICAgJmx0O2ZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0idmNzX3dlYl9maWxlX2Jhc2VfdXJsIiZndDtodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wb2t5L3RyZWUvJXBhdGglP2g9JWJyYW5jaCUmbHQ7L2ZpZWxkJmd0OworICAgICAmbHQ7L29iamVjdCZndDsKKyAgICAgJmx0O29iamVjdCBtb2RlbD0ib3JtLmxheWVyX3ZlcnNpb24iIHBrPSIxIiZndDsKKyAgICAgICAmbHQ7ZmllbGQgcmVsPSJNYW55VG9PbmVSZWwiIHRvPSJvcm0ubGF5ZXIiIG5hbWU9ImxheWVyIiZndDsxJmx0Oy9maWVsZCZndDsKKyAgICAgICAmbHQ7ZmllbGQgdHlwZT0iSW50ZWdlckZpZWxkIiBuYW1lPSJsYXllcl9zb3VyY2UiJmd0OzAmbHQ7L2ZpZWxkJmd0OworICAgICAgICZsdDtmaWVsZCByZWw9Ik1hbnlUb09uZVJlbCIgdG89Im9ybS5yZWxlYXNlIiBuYW1lPSJyZWxlYXNlIiZndDsxJmx0Oy9maWVsZCZndDsKKyAgICAgICAmbHQ7ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJicmFuY2giJmd0O3JvY2tvJmx0Oy9maWVsZCZndDsKKyAgICAgICAmbHQ7ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJkaXJwYXRoIiZndDttZXRhJmx0Oy9maWVsZCZndDsKKyAgICAgJmx0Oy9vYmplY3QmZ3Q7CisgICAgICZsdDtvYmplY3QgbW9kZWw9Im9ybS5sYXllcl92ZXJzaW9uIiBwaz0iMiImZ3Q7CisgICAgICAgJmx0O2ZpZWxkIHJlbD0iTWFueVRvT25lUmVsIiB0bz0ib3JtLmxheWVyIiBuYW1lPSJsYXllciImZ3Q7MSZsdDsvZmllbGQmZ3Q7CisgICAgICAgJmx0O2ZpZWxkIHR5cGU9IkludGVnZXJGaWVsZCIgbmFtZT0ibGF5ZXJfc291cmNlIiZndDswJmx0Oy9maWVsZCZndDsKKyAgICAgICAmbHQ7ZmllbGQgcmVsPSJNYW55VG9PbmVSZWwiIHRvPSJvcm0ucmVsZWFzZSIgbmFtZT0icmVsZWFzZSImZ3Q7MiZsdDsvZmllbGQmZ3Q7CisgICAgICAgJmx0O2ZpZWxkIHR5cGU9IkNoYXJGaWVsZCIgbmFtZT0iYnJhbmNoIiZndDtIRUFEJmx0Oy9maWVsZCZndDsKKyAgICAgICAmbHQ7ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJjb21taXQiJmd0O0hFQUQmbHQ7L2ZpZWxkJmd0OworICAgICAgICZsdDtmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImRpcnBhdGgiJmd0O21ldGEmbHQ7L2ZpZWxkJmd0OworICAgICAmbHQ7L29iamVjdCZndDsKKyAgICAgJmx0O29iamVjdCBtb2RlbD0ib3JtLmxheWVyX3ZlcnNpb24iIHBrPSIzIiZndDsKKyAgICAgICAmbHQ7ZmllbGQgcmVsPSJNYW55VG9PbmVSZWwiIHRvPSJvcm0ubGF5ZXIiIG5hbWU9ImxheWVyIiZndDsxJmx0Oy9maWVsZCZndDsKKyAgICAgICAmbHQ7ZmllbGQgdHlwZT0iSW50ZWdlckZpZWxkIiBuYW1lPSJsYXllcl9zb3VyY2UiJmd0OzAmbHQ7L2ZpZWxkJmd0OworICAgICAgICZsdDtmaWVsZCByZWw9Ik1hbnlUb09uZVJlbCIgdG89Im9ybS5yZWxlYXNlIiBuYW1lPSJyZWxlYXNlIiZndDszJmx0Oy9maWVsZCZndDsKKworICAgICAgICZsdDtmaWVsZCB0eXBlPSJDaGFyRmllbGQiIG5hbWU9ImJyYW5jaCImZ3Q7bWFzdGVyJmx0Oy9maWVsZCZndDsKKyAgICAgICAmbHQ7ZmllbGQgdHlwZT0iQ2hhckZpZWxkIiBuYW1lPSJkaXJwYXRoIiZndDttZXRhJmx0Oy9maWVsZCZndDsKKyAgICAgJmx0Oy9vYmplY3QmZ3Q7CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxheWVyICJwayIgdmFsdWVzIGFib3ZlIG11c3QgYmUgdW5pcXVlLCBhbmQgdHlwaWNhbGx5IHN0YXJ0IGF0ICIxIi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxheWVyIHZlcnNpb24gInBrIiB2YWx1ZXMgbXVzdCBhbHNvIGJlIHVuaXF1ZSBhY3Jvc3MgYWxsIGxheWVycywKKyAgICAgICAgICAgICAgICAgICAgYW5kIHR5cGljYWxseSBzdGFydCBhdCAiMSIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlbW90ZS10b2FzdGVyLW1vbml0b3JpbmcnPgorICAgICAgICA8dGl0bGU+UmVtb3RlIFRvYXN0ZXIgTW9uaXRvcmluZzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUb2FzdGVyIGhhcyBhbiBBUEkgdGhhdCBhbGxvd3MgcmVtb3RlIG1hbmFnZW1lbnQgYXBwbGljYXRpb25zIHRvCisgICAgICAgICAgICBkaXJlY3RseSBxdWVyeSB0aGUgc3RhdGUgb2YgdGhlIFRvYXN0ZXIgc2VydmVyIGFuZCBpdHMgYnVpbGRzCisgICAgICAgICAgICBpbiBhIG1hY2hpbmUtdG8tbWFjaGluZSBtYW5uZXIuCisgICAgICAgICAgICBUaGlzIEFQSSB1c2VzIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SZXByZXNlbnRhdGlvbmFsX3N0YXRlX3RyYW5zZmVyJz5SRVNUPC91bGluaz4KKyAgICAgICAgICAgIGludGVyZmFjZSBhbmQgdGhlIHRyYW5zZmVyIG9mIEpTT04gZmlsZXMuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IG1pZ2h0CisgICAgICAgICAgICBtb25pdG9yIGEgYnVpbGQgaW5zaWRlIGEgY29udGFpbmVyIHRocm91Z2ggd2VsbCBzdXBwb3J0ZWQKKyAgICAgICAgICAgIGtub3duIEhUVFAgcG9ydHMgaW4gb3JkZXIgdG8gZWFzaWx5IGFjY2VzcyBhIFRvYXN0ZXIgc2VydmVyCisgICAgICAgICAgICBpbnNpZGUgdGhlIGNvbnRhaW5lci4KKyAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgd2hlbiB5b3UgdXNlIHRoaXMgZGlyZWN0IEpTT04gQVBJLCB5b3UgYXZvaWQKKyAgICAgICAgICAgIGhhdmluZyB3ZWIgcGFnZSBwYXJzaW5nIGFnYWluc3QgdGhlIGRpc3BsYXkgdGhlIHVzZXIgc2Vlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjaGVja2luZy1oZWFsdGgnPgorICAgICAgICAgICAgPHRpdGxlPkNoZWNraW5nIEhlYWx0aDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlZm9yZSB5b3UgdXNlIHJlbW90ZSBUb2FzdGVyIG1vbml0b3JpbmcsIHlvdSBzaG91bGQgZG8KKyAgICAgICAgICAgICAgICBhIGhlYWx0aCBjaGVjay4KKyAgICAgICAgICAgICAgICBUbyBkbyB0aGlzLCBwaW5nIHRoZSBUb2FzdGVyIHNlcnZlciB1c2luZyB0aGUgZm9sbG93aW5nIGNhbGwKKyAgICAgICAgICAgICAgICB0byBzZWUgaWYgaXQgaXMgc3RpbGwgYWxpdmU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBodHRwOi8vPHJlcGxhY2VhYmxlPmhvc3Q8L3JlcGxhY2VhYmxlPjo8cmVwbGFjZWFibGU+cG9ydDwvcmVwbGFjZWFibGU+L2hlYWx0aAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIHByb3ZpZGUgdmFsdWVzIGZvciA8cmVwbGFjZWFibGU+aG9zdDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgYW5kIDxyZXBsYWNlYWJsZT5wb3J0PC9yZXBsYWNlYWJsZT4uCisgICAgICAgICAgICAgICAgSWYgdGhlIHNlcnZlciBpcyBhbGl2ZSwgeW91IHdpbGwgZ2V0IHRoZSByZXNwb25zZSBIVE1MOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJmx0OyFET0NUWVBFIGh0bWwmZ3Q7CisgICAgICZsdDtodG1sIGxhbmc9ImVuIiZndDsKKyAgICAgICAmbHQ7aGVhZCZndDsmbHQ7dGl0bGUmZ3Q7VG9hc3RlciBIZWFsdGgmbHQ7L3RpdGxlJmd0OyZsdDsvaGVhZCZndDsKKyAgICAgICAmbHQ7Ym9keSZndDtPayZsdDsvYm9keSZndDsKKyAgICAgJmx0Oy9odG1sJmd0OworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9zZWN0aW9uPgogCi0gICAgICAgIDxzZWN0aW9uIGlkPSdqc29uLXN0cnVjdHVyZSc+Ci0gICAgICAgICAgICA8dGl0bGU+RmlsZSBTdHJ1Y3R1cmU8L3RpdGxlPgorICAgICAgICA8c2VjdGlvbiBpZD0nZGV0ZXJtaW5pbmctc3RhdHVzLW9mLWJ1aWxkcy1pbi1wcm9ncmVzcyc+CisgICAgICAgICAgICA8dGl0bGU+RGV0ZXJtaW5pbmcgU3RhdHVzIG9mIEJ1aWxkcyBpbiBQcm9ncmVzczwvdGl0bGU+CiAKICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+dG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+IGZpbGUgY29uc2lzdHMgb2YKLSAgICAgICAgICAgICAgICBlYXNpbHkgcmVhZGFibGUgYXJlYXM6IGNvbmZpZ3VyYXRpb24sIGxheWVyIHNvdXJjZXMsIEJpdEJha2UsCi0gICAgICAgICAgICAgICAgZGVmYXVsdCByZWxlYXNlLCBhbmQgcmVsZWFzZXMuCisgICAgICAgICAgICAgICAgU29tZXRpbWVzIGl0IGlzIHVzZWZ1bCB0byBkZXRlcm1pbmUgdGhlIHN0YXR1cyBvZiBhIGJ1aWxkCisgICAgICAgICAgICAgICAgaW4gcHJvZ3Jlc3MuCisgICAgICAgICAgICAgICAgVG8gZ2V0IHRoZSBzdGF0dXMgb2YgcGVuZGluZyBidWlsZHMsIHVzZSB0aGUgZm9sbG93aW5nIGNhbGw6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBodHRwOi8vPHJlcGxhY2VhYmxlPmhvc3Q8L3JlcGxhY2VhYmxlPjo8cmVwbGFjZWFibGU+cG9ydDwvcmVwbGFjZWFibGU+L3RvYXN0ZXJndWkvYXBpL2J1aWxkaW5nCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gcHJvdmlkZSB2YWx1ZXMgZm9yIDxyZXBsYWNlYWJsZT5ob3N0PC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICBhbmQgPHJlcGxhY2VhYmxlPnBvcnQ8L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgICAgICAgICBUaGUgb3V0cHV0IGlzIGEgSlNPTiBmaWxlIHRoYXQgaXRlbWl6ZXMgYWxsIGJ1aWxkcyBpbgorICAgICAgICAgICAgICAgIHByb2dyZXNzLgorICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBpbmNsdWRlcyB0aGUgdGltZSBpbiBzZWNvbmRzIHNpbmNlIGVhY2gKKyAgICAgICAgICAgICAgICByZXNwZWN0aXZlIGJ1aWxkIHN0YXJ0ZWQgYXMgd2VsbCBhcyB0aGUgcHJvZ3Jlc3Mgb2YgdGhlCisgICAgICAgICAgICAgICAgY2xvbmluZywgcGFyc2luZywgYW5kIHRhc2sgZXhlY3V0aW9uLgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgc2FtcGxlIG91dHB1dCBmb3IgYSBidWlsZCBpbiBwcm9ncmVzczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHsiY291bnQiOiAxLAorICAgICAgImJ1aWxkaW5nIjogWworICAgICAgICB7Im1hY2hpbmUiOiAiYmVhZ2xlYm9uZSIsCisgICAgICAgICAgICJzZWNvbmRzIjogIjQ2My44NjkiLAorICAgICAgICAgICAidGFzayI6ICI5Mjc6MjM4NCIsCisgICAgICAgICAgICJkaXN0cm8iOiAicG9reSIsCisgICAgICAgICAgICJjbG9uZSI6ICIxOjEiLAorICAgICAgICAgICAiaWQiOiAyLAorICAgICAgICAgICAic3RhcnQiOiAiMjAxNy0wOS0yMlQwOTozMTo0NC44ODdaIiwKKyAgICAgICAgICAgIm5hbWUiOiAiMjAxNzA5MjIwOTMyMDAiLAorICAgICAgICAgICAicGFyc2UiOiAiODE4OjgxOCIsCisgICAgICAgICAgICJwcm9qZWN0IjogIm15X3JvY2tvIiwKKyAgICAgICAgICAgInRhcmdldCI6ICJjb3JlLWltYWdlLW1pbmltYWwiCisgICAgICAgICAgIH1dCisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIEpTT04gZGF0YSBmb3IgdGhpcyBxdWVyeSBpcyByZXR1cm5lZCBpbiBhIHNpbmdsZSBsaW5lLgorICAgICAgICAgICAgICAgIEluIHRoZSBwcmV2aW91cyBleGFtcGxlIHRoZSBsaW5lIGhhcyBiZWVuIGFydGlmaWNpYWxseSBzcGxpdCBmb3IgcmVhZGFiaWxpdHkuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY2hlY2tpbmctc3RhdHVzLW9mLWJ1aWxkcy1jb21wbGV0ZWQnPgorICAgICAgICAgICAgPHRpdGxlPkNoZWNraW5nIFN0YXR1cyBvZiBCdWlsZHMgQ29tcGxldGVkPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSBhIGJ1aWxkIGlzIGNvbXBsZXRlZCwgeW91IGdldCB0aGUgc3RhdHVzIHdoZW4geW91IHVzZQorICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmcgY2FsbDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGh0dHA6Ly88cmVwbGFjZWFibGU+aG9zdDwvcmVwbGFjZWFibGU+OjxyZXBsYWNlYWJsZT5wb3J0PC9yZXBsYWNlYWJsZT4vdG9hc3Rlcmd1aS9hcGkvYnVpbGRzCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gcHJvdmlkZSB2YWx1ZXMgZm9yIDxyZXBsYWNlYWJsZT5ob3N0PC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICBhbmQgPHJlcGxhY2VhYmxlPnBvcnQ8L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgICAgICAgICBUaGUgb3V0cHV0IGlzIGEgSlNPTiBmaWxlIHRoYXQgaXRlbWl6ZXMgYWxsIGNvbXBsZXRlIGJ1aWxkcywKKyAgICAgICAgICAgICAgICBhbmQgaW5jbHVkZXMgYnVpbGQgc3VtbWFyeSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGlzIHNhbXBsZSBvdXRwdXQgZm9yIGEgY29tcGxldGVkIGJ1aWxkOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgeyJjb3VudCI6IDEsCisgICAgICAiYnVpbGRzIjogWworICAgICAgICB7ImRpc3RybyI6ICJwb2t5IiwKKyAgICAgICAgICAgImVycm9ycyI6IDAsCisgICAgICAgICAgICJtYWNoaW5lIjoKKyAgICAgICAgICAgImJlYWdsZWJvbmUiLAorICAgICAgICAgICAicHJvamVjdCI6ICJteV9yb2NrbyIsCisgICAgICAgICAgICJzdG9wIjogIjIwMTctMDktMjJUMDk6MjY6MzYuMDE3WiIsCisgICAgICAgICAgICJ0YXJnZXQiOiAicXVpbHQtbmF0aXZlIiwKKyAgICAgICAgICAgInNlY29uZHMiOiAiNzguMTkzIiwKKyAgICAgICAgICAgIm91dGNvbWUiOiAiU3VjY2VlZGVkIiwKKyAgICAgICAgICAgImlkIjogMSwKKyAgICAgICAgICAgInN0YXJ0IjogIjIwMTctMDktMjJUMDk6MjU6MTcuODI0WiIsCisgICAgICAgICAgICJ3YXJuaW5ncyI6IDEsCisgICAgICAgICAgICJuYW1lIjogIjIwMTcwOTIyMDkyNjE4IgorICAgICAgICAgICB9XQorICAgICB9CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBKU09OIGRhdGEgZm9yIHRoaXMgcXVlcnkgaXMgcmV0dXJuZWQgaW4gYSBzaW5nbGUgbGluZS4KKyAgICAgICAgICAgICAgICBJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSB0aGUgbGluZSBoYXMgYmVlbiBhcnRpZmljaWFsbHkgc3BsaXQgZm9yIHJlYWRhYmlsaXR5LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RldGVybWluaW5nLXN0YXR1cy1vZi1hLXNwZWNpZmljLWJ1aWxkJz4KKyAgICAgICAgICAgIDx0aXRsZT5EZXRlcm1pbmluZyBTdGF0dXMgb2YgYSBTcGVjaWZpYyBCdWlsZDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNvbWV0aW1lcyBpdCBpcyB1c2VmdWwgdG8gZGV0ZXJtaW5lIHRoZSBzdGF0dXMgb2YgYSBzcGVjaWZpYworICAgICAgICAgICAgICAgIGJ1aWxkLgorICAgICAgICAgICAgICAgIFRvIGdldCB0aGUgc3RhdHVzIG9mIGEgc3BlY2lmaWMgYnVpbGQsIHVzZSB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgY2FsbDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGh0dHA6Ly88cmVwbGFjZWFibGU+aG9zdDwvcmVwbGFjZWFibGU+OjxyZXBsYWNlYWJsZT5wb3J0PC9yZXBsYWNlYWJsZT4vdG9hc3Rlcmd1aS9hcGkvYnVpbGQvPHJlcGxhY2VhYmxlPklEPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBwcm92aWRlIHZhbHVlcyBmb3IgPHJlcGxhY2VhYmxlPmhvc3Q8L3JlcGxhY2VhYmxlPiwKKyAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+cG9ydDwvcmVwbGFjZWFibGU+LCBhbmQgPHJlcGxhY2VhYmxlPklEPC9yZXBsYWNlYWJsZT4uCisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZSB2YWx1ZSBmb3IgPHJlcGxhY2VhYmxlPklEPC9yZXBsYWNlYWJsZT4gZnJvbSB0aGUKKyAgICAgICAgICAgICAgICBCdWlsZHMgQ29tcGxldGVkIHF1ZXJ5LiBTZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NoZWNraW5nLXN0YXR1cy1vZi1idWlsZHMtY29tcGxldGVkJz5DaGVja2luZyBTdGF0dXMgb2YgQnVpbGRzIENvbXBsZXRlZDwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgIDwvcGFyYT4KIAotICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2pzb24tY29uZmlnLWFyZWEnPgotICAgICAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmF0aW9uIEFyZWE8L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoaXMgYXJlYSBvZiB0aGUgSlNPTiBmaWxlIHNldHMgd2hpY2ggdmFyaWFibGVzIGFyZSBleHBvc2VkCi0gICAgICAgICAgICAgICAgICAgIHRvIHVzZXJzIHRocm91Z2ggdGhlIFRvYXN0ZXIgd2ViIGludGVyZmFjZS4KLSAgICAgICAgICAgICAgICAgICAgVXNlcnMgY2FuIGVhc2lseSBlZGl0IHRoZXNlIHZhcmlhYmxlcy4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlcyB5b3Ugc2V0IGhlcmUgYXJlIGRpc3BsYXllZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgIkNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIiBwYWdlIGluIFRvYXN0ZXIuCi0gICAgICAgICAgICAgICAgICAgIE1pbmltYWxseSwgeW91IHNob3VsZCBzZXQgdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHdoaWNoIGFwcGVhcnMgdG8gdXNlcnMgYXMgcGFydCBvZiB0aGUgcHJvamVjdAotICAgICAgICAgICAgICAgICAgICBwYWdlIGluIFRvYXN0ZXIuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGRlZmF1bHQgPGZpbGVuYW1lPmNvbmZpZzwvZmlsZW5hbWU+IGFyZWE6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAgImNvbmZpZyI6IHsKLSAgICAgICAgICJNQUNISU5FIiAgICAgIDogInFlbXV4ODYiLAotICAgICAgICAgIkRJU1RSTyIgICAgICAgOiAicG9reSIsCi0gICAgICAgICAiSU1BR0VfRlNUWVBFUyI6ICJleHQzIGpmZnMyIHRhci5iejIiLAotICAgICAgICAgIklNQUdFX0lOU1RBTExfYXBwZW5kIjogIiIsCi0gICAgICAgICAiUEFDS0FHRV9DTEFTU0VTIjogInBhY2thZ2VfcnBtIiwKLSAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2pzb24tbGF5ZXJzb3VyY2VzLWFyZWEnPgotICAgICAgICAgICAgICAgIDx0aXRsZT5MYXllciBTb3VyY2VzIEFyZWE8L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoaXMgYXJlYSBvZiB0aGUgSlNPTiBmaWxlIGRlZmluZXMgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2xheWVyLXNvdXJjZSc+bGF5ZXIgc291cmNlczwvbGluaz4KLSAgICAgICAgICAgICAgICAgICAgVG9hc3RlciB1c2VzLgotICAgICAgICAgICAgICAgICAgICBUb2FzdGVyIHJlYWRzIGxheWVyIGluZm9ybWF0aW9uIGZyb20gbGF5ZXIgc291cmNlcy4KLSAgICAgICAgICAgICAgICAgICAgVGhyZWUgdHlwZXMgb2YgbGF5ZXIgc291cmNlcyBleGlzdCB0aGF0IFRvYXN0ZXIKLSAgICAgICAgICAgICAgICAgICAgcmVjb2duaXplczogTG9jYWwsIExheWVySW5kZXgsIGFuZCBJbXBvcnRlZC4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIExvY2FsIGxheWVyIHNvdXJjZSByZWFkcyBsYXllcnMgZnJvbSBHaXQgY2xvbmVzCi0gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBvbiB5b3VyIGxvY2FsIGRyaXZlLgotICAgICAgICAgICAgICAgICAgICBVc2luZyBhIGxvY2FsIGxheWVyIHNvdXJjZSBlbmFibGVzIHlvdSB0byBlYXNpbHkgdGVzdAotICAgICAgICAgICAgICAgICAgICBUb2FzdGVyLgotICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgc2V0dGluZyB1cCBhIGhvc3RlZCB2ZXJzaW9uIG9mIFRvYXN0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBpdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIGhhdmUgYSBsb2NhbCBsYXllciBzb3VyY2UuCi0gICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhlIExheWVySW5kZXggbGF5ZXIgc291cmNlIHVzZXMgYSBSRVNUIEFQSSBleHBvc2VkIGJ5Ci0gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlcyBvZiB0aGUgTGF5ZXIgSW5kZXggYXBwbGljYXRpb24gKGUuZyB0aGUgcHVibGljCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy8nPjwvdWxpbms+KQotICAgICAgICAgICAgICAgICAgICB0byByZWFkIGxheWVyIGRhdGEuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBJbXBvcnRlZCBsYXllciBzb3VyY2UgaXMgcmVzZXJ2ZWQgZm9yIGxheWVyIGRhdGEKLSAgICAgICAgICAgICAgICAgICAgbWFudWFsbHkgaW50cm9kdWNlZCBieSB0aGUgdXNlciBvciBUb2FzdGVyIEFkbWluaXN0cmF0b3IKLSAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgR1VJLgotICAgICAgICAgICAgICAgICAgICBUaGlzIGxheWVyIHNvdXJjZSBsZXRzIHVzZXJzIGltcG9ydCB0aGVpciBvd24gbGF5ZXJzCi0gICAgICAgICAgICAgICAgICAgIGFuZCBidWlsZCB0aGVtIHdpdGggVG9hc3Rlci4KLSAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBub3QgcmVtb3ZlIHRoZSBpbXBvcnRlZCBsYXllciBzb3VyY2UuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGRlZmF1bHQgPGZpbGVuYW1lPmxheWVyc291cmNlczwvZmlsZW5hbWU+IGFyZWE6Ci0gICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KLSAgICAibGF5ZXJzb3VyY2VzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJMb2NhbCBZb2N0byBQcm9qZWN0IiwKLSAgICAgICAgICAgICJzb3VyY2V0eXBlIjogImxvY2FsIiwKLSAgICAgICAgICAgICJhcGl1cmwiOiAiLi4vLi4vIiwKLSAgICAgICAgICAgICJicmFuY2hlcyI6IFsiSEVBRCIgXSwKLSAgICAgICAgICAgICJsYXllcnMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJvcGVuZW1iZWRkZWQtY29yZSIsCi0gICAgICAgICAgICAgICAgICAgICJsb2NhbF9wYXRoIjogIm1ldGEiLAotICAgICAgICAgICAgICAgICAgICAidmNzX3VybCI6ICJyZW1vdGU6b3JpZ2luIiwKLSAgICAgICAgICAgICAgICAgICAgImRpcnBhdGgiOiAibWV0YSIKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAibWV0YS1wb2t5IiwKLSAgICAgICAgICAgICAgICAgICAgImxvY2FsX3BhdGgiOiAibWV0YS1wb2t5IiwKLSAgICAgICAgICAgICAgICAgICAgInZjc191cmwiOiAicmVtb3RlOm9yaWdpbiIsCi0gICAgICAgICAgICAgICAgICAgICJkaXJwYXRoIjogIm1ldGEtcG9reSIKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAibWV0YS15b2N0by1ic3AiLAotICAgICAgICAgICAgICAgICAgICAibG9jYWxfcGF0aCI6ICJtZXRhLXlvY3RvLWJzcCIsCi0gICAgICAgICAgICAgICAgICAgICJ2Y3NfdXJsIjogInJlbW90ZTpvcmlnaW4iLAotICAgICAgICAgICAgICAgICAgICAiZGlycGF0aCI6ICJtZXRhLXlvY3RvLWJzcCIKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiT3BlbkVtYmVkZGVkIiwKLSAgICAgICAgICAgICJzb3VyY2V0eXBlIjogImxheWVyaW5kZXgiLAotICAgICAgICAgICAgImFwaXVybCI6ICJodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcvbGF5ZXJpbmRleC9hcGkvIiwKLSAgICAgICAgICAgICJicmFuY2hlcyI6IFsibWFzdGVyIiwgImpldGhybyIgLCJmaWRvIl0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiSW1wb3J0ZWQgbGF5ZXJzIiwKLSAgICAgICAgICAgICJzb3VyY2V0eXBlIjogImltcG9ydGVkIiwKLSAgICAgICAgICAgICJhcGl1cmwiOiAiIiwKLSAgICAgICAgICAgICJicmFuY2hlcyI6IFsibWFzdGVyIiwgImpldGhybyIsImZpZG8iLCAiSEVBRCJdCi0KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBvdXRwdXQgaXMgYSBKU09OIGZpbGUgdGhhdCBpdGVtaXplcyB0aGUgc3BlY2lmaWMgYnVpbGQKKyAgICAgICAgICAgICAgICBhbmQgaW5jbHVkZXMgYnVpbGQgc3VtbWFyeSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGlzIHNhbXBsZSBvdXRwdXQgZm9yIGEgc3BlY2lmaWMgYnVpbGQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICB7ImJ1aWxkIjoKKyAgICAgICB7ImRpc3RybyI6ICJwb2t5IiwKKyAgICAgICAgImVycm9ycyI6IDAsCisgICAgICAgICJtYWNoaW5lIjogImJlYWdsZWJvbmUiLAorICAgICAgICAicHJvamVjdCI6ICJteV9yb2NrbyIsCisgICAgICAgICJzdG9wIjogIjIwMTctMDktMjJUMDk6MjY6MzYuMDE3WiIsCisgICAgICAgICJ0YXJnZXQiOiAicXVpbHQtbmF0aXZlIiwKKyAgICAgICAgInNlY29uZHMiOiAiNzguMTkzIiwKKyAgICAgICAgIm91dGNvbWUiOiAiU3VjY2VlZGVkIiwKKyAgICAgICAgImlkIjogMSwKKyAgICAgICAgInN0YXJ0IjogIjIwMTctMDktMjJUMDk6MjU6MTcuODI0WiIsCisgICAgICAgICJ3YXJuaW5ncyI6IDEsCisgICAgICAgICJuYW1lIjogIjIwMTcwOTIyMDkyNjE4IiwKKyAgICAgICAgImNvb2tlcl9sb2ciOiAiL29wdC91c2VyL3Bva3kvYnVpbGQtdG9hc3Rlci0yL3RtcC9sb2cvY29va2VyL2JlYWdsZWJvbmUvYnVpbGRfMjAxNzA5MjJfMDIyNjA3Ljk5MS5sb2ciCiAgICAgICAgIH0KLSAgICBdLAotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgICAgICA8c2VjdGlvbiBpZD0nanNvbi1iaXRiYWtlLWFyZWEnPgotICAgICAgICAgICAgICAgIDx0aXRsZT5CaXRCYWtlIEFyZWE8L3RpdGxlPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIFRoaXMgYXJlYSBvZiB0aGUgSlNPTiBmaWxlIGRlZmluZXMgdGhlIHZlcnNpb24gb2YKLSAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBUb2FzdGVyIHVzZXMuCi0gICAgICAgICAgICAgICAgICAgIEFzIHNoaXBwZWQsIFRvYXN0ZXIgaXMgY29uZmlndXJlZCB0byByZWNvZ25pemUgZm91cgotICAgICAgICAgICAgICAgICAgICB2ZXJzaW9ucyBvZiBCaXRCYWtlOiBtYXN0ZXIsIGZpZG8sIGpldGhybywgYW5kIEhFQUQuCi0gICAgICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICAgICAgSEVBRCBpcyBhIHNwZWNpYWwgb3B0aW9uIHRoYXQgYnVpbGRzIHdoYXRldmVyIGlzCi0gICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgb24gZGlzaywgd2l0aG91dCBjaGVja2luZyBvdXQgYW55IHJlbW90ZQotICAgICAgICAgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcmllcy4KLSAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBkZWZhdWx0IDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gYXJlYToKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAiYml0YmFrZSIgOiBbCi0gICAgICAgICB7Ci0gICAgICAgICAgICAgIm5hbWUiOiAibWFzdGVyIiwKLSAgICAgICAgICAgICAiZ2l0dXJsIjogInJlbW90ZTpvcmlnaW4iLAotICAgICAgICAgICAgICJicmFuY2giOiAibWFzdGVyIiwKLSAgICAgICAgICAgICAiZGlycGF0aCI6ICJiaXRiYWtlIgotICAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgICJuYW1lIjogImpldGhybyIsCi0gICAgICAgICAgICAgImdpdHVybCI6ICJyZW1vdGU6b3JpZ2luIiwKLSAgICAgICAgICAgICAiYnJhbmNoIjogImpldGhybyIsCi0gICAgICAgICAgICAgImRpcnBhdGgiOiAiYml0YmFrZSIKLSAgICAgICAgIH0sCi0gICAgICAgICB7Ci0gICAgICAgICAgICAgIm5hbWUiOiAiZmlkbyIsCi0gICAgICAgICAgICAgImdpdHVybCI6ICJyZW1vdGU6b3JpZ2luIiwKLSAgICAgICAgICAgICAiYnJhbmNoIjogImZpZG8iLAotICAgICAgICAgICAgImRpcnBhdGgiOiAiYml0YmFrZSIKLSAgICAgICAgfSwKLSAgICAgICAgIHsKLSAgICAgICAgICAgICAibmFtZSI6ICJIRUFEIiwKLSAgICAgICAgICAgICAiZ2l0dXJsIjogInJlbW90ZTpvcmlnaW4iLAotICAgICAgICAgICAgICJicmFuY2giOiAiSEVBRCIsCi0gICAgICAgICAgICAgImRpcnBhdGgiOiAiYml0YmFrZSIKLSAgICAgICAgIH0KLSAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2pzb24tZGVmYXVsdC1hcmVhJz4KLSAgICAgICAgICAgICAgICA8dGl0bGU+RGVmYXVsdCBBcmVhPC90aXRsZT4KLQotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICBUaGlzIGFyZWEgb2YgdGhlIEpTT04gZmlsZSBlc3RhYmxpc2hlcyBhIGRlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSB1c2VkIGJ5IFRvYXN0ZXIuCi0gICAgICAgICAgICAgICAgICAgIEFzIHNoaXBwZWQsIFRvYXN0ZXIgdXNlcyB0aGUgIm1hc3RlciIgcmVsZWFzZS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgc3RhdGVtZW50IGluIHRoZSBKU09OIGZpbGUgdGhhdCBlc3RhYmxpc2hlcwotICAgICAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCByZWxlYXNlOgotICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+Ci0gICAgICJkZWZhdWx0cmVsZWFzZSI6ICJtYXN0ZXIiLAotICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9zZWN0aW9uPgotCi0gICAgICAgICAgICA8c2VjdGlvbiBpZD0nanNvbi1yZWxlYXNlcy1hcmVhJz4KLSAgICAgICAgICAgICAgICA8dGl0bGU+UmVsZWFzZXMgQXJlYTwvdGl0bGU+Ci0KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBhcmVhIG9mIHRoZSBKU09OIGZpbGUgZGVmaW5lcyB0aGUgdmVyc2lvbnMgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gVG9hc3RlciByZWNvZ25pemVzLgotICAgICAgICAgICAgICAgICAgICBBcyBzaGlwcGVkLCBUb2FzdGVyIGlzIGNvbmZpZ3VyZWQgdG8gd29yayB3aXRoIHRoZSBmb3VyCi0gICAgICAgICAgICAgICAgICAgIHJlbGVhc2VzIGRlc2NyaWJlZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3RvYXN0ZXItcmVsZWFzZXMtc3VwcG9ydGVkJz5QcmUtQ29uZmlndXJlZCBSZWxlYXNlczwvbGluaz4iCi0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotCi0gICAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGRlZmF1bHQgPGZpbGVuYW1lPnJlbGVhc2VzPC9maWxlbmFtZT4gYXJlYToKLSAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAicmVsZWFzZXMiOiBbCi0gICAgICAgICB7Ci0gICAgICAgICAgICAgIm5hbWUiOiAibWFzdGVyIiwKLSAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiWW9jdG8gUHJvamVjdCBtYXN0ZXIiLAotICAgICAgICAgICAgICJiaXRiYWtlIjogIm1hc3RlciIsCi0gICAgICAgICAgICAgImJyYW5jaCI6ICJtYXN0ZXIiLAotICAgICAgICAgICAgICJkZWZhdWx0bGF5ZXJzIjogWyAib3BlbmVtYmVkZGVkLWNvcmUiLCAibWV0YS1wb2t5IiwgIm1ldGEteW9jdG8tYnNwIl0sCi0gICAgICAgICAgICAgImxheWVyc291cmNlcHJpb3JpdHkiOiB7ICJJbXBvcnRlZCBsYXllcnMiOiA5OSwgIkxvY2FsIFlvY3RvIFByb2plY3QiIDogMTAsICJPcGVuRW1iZWRkZWQiIDogIDAgfSwKLSAgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB1c2luZyB0aGUgdGlwIG9mIHRoZSAmbHQ7YSBocmVmPVwiaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvcG9reS9sb2cvXCImZ3Q7WW9jdG8gUHJvamVjdCBtYXN0ZXIgYnJhbmNoJmx0Oy9hJmd0Oywgd2hlcmUgYWN0aXZlIGRldmVsb3BtZW50IHRha2VzIHBsYWNlLiBUaGlzIGlzIG5vdCBhIHN0YWJsZSBicmFuY2gsIHNvIHlvdXIgYnVpbGRzIG1pZ2h0IG5vdCB3b3JrIGFzIGV4cGVjdGVkLiIKLSAgICAgICAgIH0sCi0gICAgICAgICB7Ci0gICAgICAgICAgICAgIm5hbWUiOiAiamV0aHJvIiwKLSAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiWW9jdG8gUHJvamVjdCAyLjAgSmV0aHJvIiwKLSAgICAgICAgICAgICAiYml0YmFrZSI6ICJqZXRocm8iLAotICAgICAgICAgICAgICJicmFuY2giOiAiamV0aHJvIiwKLSAgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiwgIm1ldGEtcG9reSIsICJtZXRhLXlvY3RvLWJzcCJdLAotICAgICAgICAgICAgICJsYXllcnNvdXJjZXByaW9yaXR5IjogeyAiSW1wb3J0ZWQgbGF5ZXJzIjogOTksICJMb2NhbCBZb2N0byBQcm9qZWN0IiA6IDEwLCAiT3BlbkVtYmVkZGVkIiA6ICAwIH0sCi0gICAgICAgICAgICAgImhlbHB0ZXh0IjogIlRvYXN0ZXIgd2lsbCBydW4geW91ciBidWlsZHMgd2l0aCB0aGUgdGlwIG9mIHRoZSAmbHQ7YSBocmVmPVwiaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvcG9reS9sb2cvP2g9amV0aHJvXCImZ3Q7WW9jdG8gUHJvamVjdCAyLjAgXCJKZXRocm9cIiZsdDsvYSZndDsgYnJhbmNoLiIKLSAgICAgICAgIH0sCi0gICAgICAgICB7Ci0gICAgICAgICAgICAgIm5hbWUiOiAiZmlkbyIsCi0gICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIllvY3RvIFByb2plY3QgMS44IEZpZG8iLAotICAgICAgICAgICAgICJiaXRiYWtlIjogImZpZG8iLAotICAgICAgICAgICAgICJicmFuY2giOiAiZmlkbyIsCi0gICAgICAgICAgICAgImRlZmF1bHRsYXllcnMiOiBbICJvcGVuZW1iZWRkZWQtY29yZSIsICJtZXRhLXBva3kiLCAibWV0YS15b2N0by1ic3AiXSwKLSAgICAgICAgICAgICAibGF5ZXJzb3VyY2Vwcmlvcml0eSI6IHsgIkltcG9ydGVkIGxheWVycyI6IDk5LCAiTG9jYWwgWW9jdG8gUHJvamVjdCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAotICAgICAgICAgICAgICJoZWxwdGV4dCI6ICJUb2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHdpdGggdGhlIHRpcCBvZiB0aGUgJmx0O2EgaHJlZj1cImh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL3Bva3kvbG9nLz9oPWZpZG9cIiZndDtZb2N0byBQcm9qZWN0IDEuOCBcIkZpZG9cIiZsdDsvYSZndDsgYnJhbmNoLiIKLSAgICAgICAgIH0sCi0gICAgICAgICB7Ci0gICAgICAgICAgICAgIm5hbWUiOiAibG9jYWwiLAotICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2NhbCBZb2N0byBQcm9qZWN0IiwKLSAgICAgICAgICAgICAiYml0YmFrZSI6ICJIRUFEIiwKLSAgICAgICAgICAgICAiYnJhbmNoIjogIkhFQUQiLAotICAgICAgICAgICAgICJkZWZhdWx0bGF5ZXJzIjogWyAib3BlbmVtYmVkZGVkLWNvcmUiLCAibWV0YS1wb2t5IiwgIm1ldGEteW9jdG8tYnNwIl0sCi0gICAgICAgICAgICAgImxheWVyc291cmNlcHJpb3JpdHkiOiB7ICJJbXBvcnRlZCBsYXllcnMiOiA5OSwgIkxvY2FsIFlvY3RvIFByb2plY3QiIDogMTAsICJPcGVuRW1iZWRkZWQiIDogIDAgfSwKLSAgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB3aXRoIHRoZSB2ZXJzaW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IHlvdSBoYXZlIGNsb25lZCBvciBkb3dubG9hZGVkIHRvIHlvdXIgY29tcHV0ZXIuIgotICAgICAgICAgfQotICAgICBdCi0gICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIEpTT04gZGF0YSBmb3IgdGhpcyBxdWVyeSBpcyByZXR1cm5lZCBpbiBhIHNpbmdsZSBsaW5lLgorICAgICAgICAgICAgICAgIEluIHRoZSBwcmV2aW91cyBleGFtcGxlIHRoZSBsaW5lIGhhcyBiZWVuIGFydGlmaWNpYWxseSBzcGxpdCBmb3IgcmVhZGFiaWxpdHkuCisgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvc2VjdGlvbj4KICAgICA8L3NlY3Rpb24+CiAKQEAgLTg3MCw3ICs2NzcsNyBAQAogICAgICAgICAgICAgY3JlYXRlZCB0aGF0IGFyZSBzcGVjaWZpYyB0byBUb2FzdGVyIGFuZCBhcmUgdXNlZCB0byBjb250cm9sCiAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGFuZCBiYWNrLWVuZCB0YXNrcy4KICAgICAgICAgICAgIFlvdSBjYW4gbG9jYXRlIHRoZXNlIGNvbW1hbmRzIGluIHRoZQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4pIGF0CiAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS9saWIvbWFuYWdlLnB5PC9maWxlbmFtZT4uCiAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZG9jdW1lbnRzIHRob3NlIGNvbW1hbmRzLgpAQCAtODc5LDcgKzY4Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIFdoZW4gdXNpbmcgPGZpbGVuYW1lPm1hbmFnZS5weTwvZmlsZW5hbWU+IGNvbW1hbmRzIGdpdmVuCiAgICAgICAgICAgICAgICAgICAgIGEgZGVmYXVsdCBjb25maWd1cmF0aW9uLCB5b3UgbXVzdCBiZSBzdXJlIHRoYXQgeW91cgogICAgICAgICAgICAgICAgICAgICB3b3JraW5nIGRpcmVjdG9yeSBpcyBzZXQgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCiAgICAgICAgICAgICAgICAgICAgIFVzaW5nIDxmaWxlbmFtZT5tYW5hZ2UucHk8L2ZpbGVuYW1lPiBjb21tYW5kcyBmcm9tIHRoZQogICAgICAgICAgICAgICAgICAgICBCdWlsZCBEaXJlY3RvcnkgYWxsb3dzIFRvYXN0ZXIgdG8gZmluZCB0aGUKICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRvYXN0ZXIuc3FsaXRlPC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMgbG9jYXRlZApAQCAtMTAwNSwzMCArODEyLDYgQEAKICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9zZWN0aW9uPgogCi0gICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWNvbW1hbmQtbG9hZGNvbmYnPgotICAgICAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5sb2FkY29uZjwvZmlsZW5hbWU+PC90aXRsZT4KLQotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5sb2FkY29uZjwvZmlsZW5hbWU+IGNvbW1hbmQgbG9hZHMgYW4KLSAgICAgICAgICAgICAgICBleGlzdGluZyBUb2FzdGVyIGNvbmZpZ3VyYXRpb24gZmlsZSAoSlNPTiBmaWxlKS4KLSAgICAgICAgICAgICAgICBZb3UgbXVzdCBydW4gdGhpcyBvbiBhIG5ldyBkYXRhYmFzZSB0aGF0IGRvZXMgbm90IGhhdmUgYW55Ci0gICAgICAgICAgICAgICAgZGF0YS4KLSAgICAgICAgICAgICAgICBSdW5uaW5nIHRoaXMgY29tbWFuZCBvbiBhbiBleGlzdGluZyBkYXRhYmFzZSB0aGF0IGhhcyBkYXRhCi0gICAgICAgICAgICAgICAgcmVzdWx0cyBpbiBlcnJvcnMuCi0gICAgICAgICAgICAgICAgQWNjZXNzIHRoZSBjb21tYW5kIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGxvYWRjb25mIDxyZXBsYWNlYWJsZT5maWxlcGF0aDwvcmVwbGFjZWFibGU+Ci0gICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bG9hZGNvbmY8L2ZpbGVuYW1lPiBjb21tYW5kIGNvbmZpZ3VyZXMgYSBkYXRhYmFzZQotICAgICAgICAgICAgICAgIGJhc2VkIG9uIHRoZSBzdXBwbGllZCBleGlzdGluZwotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4gZmlsZS4KLSAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4sCi0gICAgICAgICAgICAgICAgc2VlIHRoZQotICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd0b2FzdGVyLWpzb24tZmlsZXMnPkpTT04gRmlsZXM8L2xpbms+IgotICAgICAgICAgICAgICAgIHNlY3Rpb24uCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLQogICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1jb21tYW5kLXJ1bmJ1aWxkcyc+CiAgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPnJ1bmJ1aWxkczwvZmlsZW5hbWU+PC90aXRsZT4KIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtc2V0dXAtYW5kLXVzZS54bWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1zZXR1cC1hbmQtdXNlLnhtbAppbmRleCA5NjZjMzVkLi5jMjZhMzJhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1zZXR1cC1hbmQtdXNlLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1zZXR1cC1hbmQtdXNlLnhtbApAQCAtMTgsNyArMTgsNyBAQAogCiAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgTmF2aWdhdGUgdG8gdGhlIHJvb3Qgb2YgeW91cgotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4pOgogICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAkIGNkIHBva3kKQEAgLTYxLDE5ICs2MSwzMiBAQAogICAgICAgICA8L3BhcmE+CiAgICAgPC9zZWN0aW9uPgogCi0gICAgPHNlY3Rpb24gaWQ9J3NldHRpbmctYS1kaWZmZXJlbnQtYWRkcmVzcyc+Ci0gICAgICAgIDx0aXRsZT5TZXR0aW5nIGEgRGlmZmVyZW50IEFkZHJlc3M8L3RpdGxlPgorICAgIDxzZWN0aW9uIGlkPSdzZXR0aW5nLXVwLWV4dGVybmFsLWFjY2Vzcyc+CisgICAgICAgIDx0aXRsZT5TZXR0aW5nIHVwIEV4dGVybmFsIEFjY2VzczwvdGl0bGU+CiAKICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICBCeSBkZWZhdWx0LCBUb2FzdGVyIGJpbmRzIHRvIHRoZSBsb29wIGJhY2sgYWRkcmVzcwotICAgICAgICAgICAgKGkuZS4gbG9jYWxob3N0KS4KLSAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+V0VCUE9SVDwvZmlsZW5hbWU+IHBhcmFtZXRlciB0bwotICAgICAgICAgICAgc2V0IGEgZGlmZmVyZW50IGhvc3QuCi0gICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21tYW5kIHNldHMgdGhlIGhvc3QgYW5kIHBvcnQKLSAgICAgICAgICAgIHRvICIwLjAuMC4wOjg0MDAiOgorICAgICAgICAgICAgKGkuZS4gbG9jYWxob3N0KSwgd2hpY2ggZG9lcyBub3QgYWxsb3cgYWNjZXNzIGZyb20KKyAgICAgICAgICAgIGV4dGVybmFsIGhvc3RzLiBUbyBhbGxvdyBleHRlcm5hbCBhY2Nlc3MsIHVzZSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5XRUJQT1JUPC9maWxlbmFtZT4gcGFyYW1ldGVyIHRvIG9wZW4gYW4KKyAgICAgICAgICAgIGFkZHJlc3MgdGhhdCBjb25uZWN0cyB0byB0aGUgbmV0d29yaywgc3BlY2lmaWNhbGx5IHRoZQorICAgICAgICAgICAgSVAgYWRkcmVzcyB0aGF0IHlvdXIgTklDIHVzZXMgdG8gY29ubmVjdCB0byB0aGUgbmV0d29yay4KKyAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBiaW5kIHRvIGFsbCBJUCBhZGRyZXNzZXMgdGhlIGNvbXB1dGVyCisgICAgICAgICAgICBzdXBwb3J0cyBieSB1c2luZyB0aGUgc2hvcnRjdXQKKyAgICAgICAgICAgICIwLjAuMC4wOjxyZXBsYWNlYWJsZT5wb3J0PC9yZXBsYWNlYWJsZT4iLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgYmluZHMgdG8gYWxsIElQIGFkZHJlc3NlcyBvbiB0aGUKKyAgICAgICAgICAgIGhvc3Q6CiAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgICQgc291cmNlIHRvYXN0ZXIgc3RhcnQgd2VicG9ydD0wLjAuMC4wOjg0MDAKICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBiaW5kcyB0byBhIHNwZWNpZmljIElQIGFkZHJlc3Mgb24gdGhlIGhvc3QncworICAgICAgICAgICAgTklDOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSB0b2FzdGVyIHN0YXJ0IHdlYnBvcnQ9MTkyLjE2OC4xLjE6ODQwMAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgogICAgICAgICA8L3BhcmE+CiAgICAgPC9zZWN0aW9uPgogCkBAIC0xNDUsNyArMTU4LDcgQEAKICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgogICAgICAgICAgICAgICAgICAgRnJvbSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIFRvYXN0ZXIgZGF0YWJhc2UsCiAgICAgICAgICAgICAgICAgICB3aGljaCBieSBkZWZhdWx0IGlzIHRoZQotICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4sCiAgICAgICAgICAgICAgICAgICBpbnZva2UgdGhlIDxmaWxlbmFtZT5jcmVhdGVzdXBlcnVzZXI8L2ZpbGVuYW1lPiBjb21tYW5kCiAgICAgICAgICAgICAgICAgICBmcm9tIDxmaWxlbmFtZT5tYW5hZ2UucHk8L2ZpbGVuYW1lPjoKICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KQEAgLTM2OSwxNiArMzgyLDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UT0FTVEVSX0NPTkY8L2ZpbGVuYW1lPiwgd2hpY2ggaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmUgdG8gdGhlIFRvYXN0ZXIgcm9vdCBkaXJlY3RvcnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRPQVNURVJfRElSPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBUb2FzdGVyIGNvbmZpZ3VyYXRpb24gZmlsZQotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VE9BU1RFUl9DT05GPC9maWxlbmFtZT4sIHNlZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndG9hc3Rlci1qc29uLWZpbGVzJz5KU09OIEZpbGVzPC9saW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIG9mIHRoaXMgbWFudWFsLgorICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgVG9hc3RlciBjb25maWd1cmF0aW9uIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nY29uZmlndXJpbmctdG9hc3Rlcic+Q29uZmlndXJpbmcgVG9hc3RlcjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcHRlci4KICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBsaW5lIGFsc28gcnVucyB0aGUgPGZpbGVuYW1lPmNoZWNrc2V0dGluZ3M8L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLCB3aGljaCBjb25maWd1cmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgVG9hc3RlcgotICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIGRpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIGRpcmVjdG9yeTwvdWxpbms+LgogICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgVG9hc3RlciByb290IGRpcmVjdG9yeSA8ZmlsZW5hbWU+VE9BU1RFUl9ESVI8L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVzIHdoZXJlIHRoZSBUb2FzdGVyIGJ1aWxkIGRpcmVjdG9yeQogICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBjcmVhdGVkIG9uIHRoZSBmaWxlIHN5c3RlbS4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLXN0YXJ0LnhtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLXN0YXJ0LnhtbAppbmRleCBjNWM2Nzk1Li42NWUwNTdhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1zdGFydC54bWwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtc3RhcnQueG1sCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgICAgICBUaGUgcmVxdWlyZW1lbnRzIGZpbGUgaXMgbG9jYXRlZCBpbiB0aGUKICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gZGlyZWN0b3J5LCB3aGljaCBpcyBsb2NhdGVkIGluIHRoZQogICAgICAgICAgICAgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgogICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPnBva3kvYml0YmFrZS90b2FzdGVyLXJlcXVpcmVtZW50cy50eHQ8L2ZpbGVuYW1lPikuCiAgICAgICAgICAgICBUaGUgZGVwZW5kZW5jaWVzIGFwcGVhciBpbiBhIDxmaWxlbmFtZT5waXA8L2ZpbGVuYW1lPiwKICAgICAgICAgICAgIGluc3RhbGwtY29tcGF0aWJsZSBmb3JtYXQuCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gaW5zdGFsbCB0aGUgcGFja2FnZXMgdGhhdCBUb2FzdGVyIHJlcXVpcmVzLgogICAgICAgICAgICAgICAgIFVzZSB0aGlzIGNvbW1hbmQ6CiAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgotICAgICAkICQgcGlwMyBpbnN0YWxsIC0tdXNlciAtciBiaXRiYWtlL3RvYXN0ZXItcmVxdWlyZW1lbnRzLnR4dAorICAgICAkIHBpcDMgaW5zdGFsbCAtLXVzZXIgLXIgYml0YmFrZS90b2FzdGVyLXJlcXVpcmVtZW50cy50eHQKICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CiAgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIGNvbW1hbmQgaW5zdGFsbHMgdGhlIG5lY2Vzc2FyeSBUb2FzdGVyIG1vZHVsZXMKICAgICAgICAgICAgICAgICBpbnRvIGEgbG9jYWwgcHl0aG9uIDMgY2FjaGUgaW4geW91cgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwueG1sCmluZGV4IGM3YTdmY2QuLjVhMWI2MGUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLnhtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC54bWwKQEAgLTIyLDExICsyMiwxMSBAQAogCiAgICAgICAgIDxhdXRob3Jncm91cD4KICAgICAgICAgICAgIDxhdXRob3I+Ci0gICAgICAgICAgICAgICAgPGZpcnN0bmFtZT5TY290dDwvZmlyc3RuYW1lPiA8c3VybmFtZT5SaWZlbmJhcms8L3N1cm5hbWU+CisgICAgICAgICAgICAgICAgPGZpcnN0bmFtZT5LcmlzdGk8L2ZpcnN0bmFtZT4gPHN1cm5hbWU+UmlmZW5iYXJrPC9zdXJuYW1lPgogICAgICAgICAgICAgICAgIDxhZmZpbGlhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPG9yZ25hbWU+SW50ZWwgQ29ycG9yYXRpb248L29yZ25hbWU+CisgICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPlNjb3R0eSdzIERvY3VtZW50YXRpb24gU2VydmljZXMsIElOQzwvb3JnbmFtZT4KICAgICAgICAgICAgICAgICA8L2FmZmlsaWF0aW9uPgotICAgICAgICAgICAgICAgIDxlbWFpbD5zcmlmZW5iYXJrQGdtYWlsLmNvbTwvZW1haWw+CisgICAgICAgICAgICAgICAgPGVtYWlsPmtyaXN0aUBidXp6Y29sbGVjdGl2ZW1hcmtldGluZy5jb208L2VtYWlsPgogICAgICAgICAgICAgPC9hdXRob3I+CiAgICAgICAgIDwvYXV0aG9yZ3JvdXA+CiAKQEAgLTU3LDI0ICs1NywxOSBAQAogICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjMgUmVsZWFzZS48L3JldnJlbWFyaz4KICAgICAgICAgICAgIDwvcmV2aXNpb24+CiAgICAgICAgICAgICA8cmV2aXNpb24+Ci0gICAgICAgICAgICAgICAgPHJldm51bWJlcj4yLjMuMTwvcmV2bnVtYmVyPgotICAgICAgICAgICAgICAgIDxkYXRlPkp1bmUgMjAxNzwvZGF0ZT4KLSAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi4zLjEgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjIuNDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxNzwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi40IFJlbGVhc2UuPC9yZXZyZW1hcms+CiAgICAgICAgICAgICA8L3JldmlzaW9uPgogICAgICAgICAgICAgPHJldmlzaW9uPgotICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi4zLjI8L3Jldm51bWJlcj4KLSAgICAgICAgICAgICAgICA8ZGF0ZT5TZXB0ZW1iZXIgMjAxNzwvZGF0ZT4KLSAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMi4zLjIgUmVsZWFzZS48L3JldnJlbWFyaz4KLSAgICAgICAgICAgIDwvcmV2aXNpb24+Ci0gICAgICAgICAgICA8cmV2aXNpb24+Ci0gICAgICAgICAgICAgICAgPHJldm51bWJlcj4yLjMuMzwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi40LjE8L3Jldm51bWJlcj4KICAgICAgICAgICAgICAgICA8ZGF0ZT5KYW51YXJ5IDIwMTg8L2RhdGU+Ci0gICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDIuMy4zIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDIuNC4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CiAgICAgICAgICAgICA8L3JldmlzaW9uPgogICAgICAgICAgICAgPHJldmlzaW9uPgotICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi4zLjQ8L3Jldm51bWJlcj4KLSAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE4PC9kYXRlPgotICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjMuNCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+Mi40LjI8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5NYXJjaCAyMDE4PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAyLjQuMiBSZWxlYXNlLjwvcmV2cmVtYXJrPgogICAgICAgICAgICAgPC9yZXZpc2lvbj4KICAgICAgICA8L3Jldmhpc3Rvcnk+CiAKQEAgLTkxLDI3ICs4NiwyOSBAQAogICAgICAgICAgICA8bm90ZT48dGl0bGU+TWFudWFsIE5vdGVzPC90aXRsZT4KICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CiAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICBGb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IFRvYXN0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgVXNlciBNYW51YWwgYXNzb2NpYXRlZCB3aXRoIHRoaXMgWW9jdG8gUHJvamVjdCByZWxlYXNlCi0gICAgICAgICAgICAgICAgICAgICAgICh2ZXJzaW9uICZZT0NUT19ET0NfVkVSU0lPTjspLAotICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlIFlvY3RvIFByb2plY3QgVG9hc3RlciBVc2VyIE1hbnVhbCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZlcnNpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5Ub2FzdGVyIFVzZXIgTWFudWFsPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgaXMgZm9yIHRoZSAmWU9DVE9fRE9DX1ZFUlNJT047IHJlbGVhc2Ugb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgIFRvIGJlIHN1cmUgeW91IGhhdmUgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBtYW51YWwKKyAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgcmVsZWFzZSwgdXNlIHRoZSBtYW51YWwgZnJvbSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy9kb2N1bWVudGF0aW9uJz5Zb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24gcGFnZTwvdWxpbms+LgogICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmVyc2lvbiBvZiB0aGUgbWFudWFsIGlzIHZlcnNpb24KLSAgICAgICAgICAgICAgICAgICAgICAgJllPQ1RPX0RPQ19WRVJTSU9OOy4KLSAgICAgICAgICAgICAgICAgICAgICAgRm9yIGxhdGVyIHJlbGVhc2VzIG9mIHRoZSBZb2N0byBQcm9qZWN0IChpZiB0aGV5IGV4aXN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgZ28gdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgIEZvciBtYW51YWxzIGFzc29jaWF0ZWQgd2l0aCBvdGhlciByZWxlYXNlcyBvZiB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdCwgZ28gdG8gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvZG9jdW1lbnRhdGlvbic+WW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uIHBhZ2U8L3VsaW5rPgogICAgICAgICAgICAgICAgICAgICAgICBhbmQgdXNlIHRoZSBkcm9wLWRvd24gIkFjdGl2ZSBSZWxlYXNlcyIgYnV0dG9uCi0gICAgICAgICAgICAgICAgICAgICAgIGFuZCBjaG9vc2UgdGhlIFlvY3RvIFByb2plY3QgdmVyc2lvbiBmb3Igd2hpY2ggeW91IHdhbnQKLSAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgYW5kIGNob29zZSB0aGUgbWFudWFsIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGVzaXJlZAorICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0LgogICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgIEZvciBhbiBpbi1kZXZlbG9wbWVudCB2ZXJzaW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgVXNlciBNYW51YWwsIHNlZQotICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19VUkw7L2xhdGVzdC90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC5odG1sJz48L3VsaW5rPi4KLSAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICBUbyByZXBvcnQgYW55IGluYWNjdXJhY2llcyBvciBwcm9ibGVtcyB3aXRoIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hbnVhbCwgc2VuZCBhbiBlbWFpbCB0byB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgZGlzY3Vzc2lvbiBncm91cCBhdAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnlvY3RvQHlvY3RvcHJvamVjdC5jb208L2ZpbGVuYW1lPiBvciBsb2cgaW50bworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZyZWVub2RlIDxmaWxlbmFtZT4jeW9jdG88L2ZpbGVuYW1lPiBjaGFubmVsLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KICAgICAgICAgICAgPC9ub3RlPgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b29scy9tZWdhLW1hbnVhbC5zZWQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b29scy9tZWdhLW1hbnVhbC5zZWQKaW5kZXggOTM2YjEwOS4uYWUyODAwYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9vbHMvbWVnYS1tYW51YWwuc2VkCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Rvb2xzL21lZ2EtbWFudWFsLnNlZApAQCAtMiwzMiArMiwzMiBAQAogIyBUaGlzIHN0eWxlIGlzIGZvciBtYW51YWwgZm9sZGVycyBsaWtlICJ5b2N0by1wcm9qZWN0LXFzIiBhbmQgInBva3ktcmVmLW1hbnVhbCIuCiAjIFRoaXMgaXMgdGhlIG9sZCB3YXkgdGhhdCBkaWQgaXQuICBDYW4ndCBkbyB0aGF0IG5vdyB0aGF0IHdlIGhhdmUgImJpdGJha2UtdXNlci1tYW51YWwiIHN0cmluZ3MKICMgaW4gdGhlIG1lZ2EtbWFudWFsLgotIyBzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMy40XC9bYS16XSotW2Etel0qLVthLXpdKlwvW2Etel0qLVthLXpdKi1bYS16XSouaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZwotcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjMuNFwveW9jdG8tcHJvamVjdC1xc1wveW9jdG8tcHJvamVjdC1xcy5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCi1zL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMy40XC9wb2t5LXJlZi1tYW51YWxcL3Bva3ktcmVmLW1hbnVhbC5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCisjIHMvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMi40LjJcL1thLXpdKi1bYS16XSotW2Etel0qXC9bYS16XSotW2Etel0qLVthLXpdKi5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuNC4yXC95b2N0by1wcm9qZWN0LXFzXC95b2N0by1wcm9qZWN0LXFzLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKK3MvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMi40LjJcL3Bva3ktcmVmLW1hbnVhbFwvcG9reS1yZWYtbWFudWFsLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKIAogIyBQcm9jZXNzZXMgYWxsIG90aGVyIG1hbnVhbHMgKDx3b3JkPi08d29yZD4gc3R5bGUpIGV4Y2VwdCBmb3IgdGhlIEJpdEJha2UgVXNlciBNYW51YWwgYmVjYXVzZQogIyBpdCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIG1lZ2EtbWFudWFsLgogIyBUaGlzIHN0eWxlIGlzIGZvciBtYW51YWwgZm9sZGVycyB0aGF0IHVzZSB0d28gd29yZCwgd2hpY2ggaXMgdGhlIHN0YW5kYXJkIG5vdyAoZS5nLiAicmVmLW1hbnVhbCIpLgogIyBUaGlzIHdhcyB0aGUgb25lLWxpbmVyIHRoYXQgd29ya2VkIGJlZm9yZSB3ZSBpbnRyb2R1Y2VkIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsLCB3aGljaCBpcwogIyBub3QgaW4gdGhlIG1lZ2EtbWFudWFsLgotIyBzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMy40XC9bYS16XSotW2Etel0qXC9bYS16XSotW2Etel0qLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKKyMgcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjQuMlwvW2Etel0qLVthLXpdKlwvW2Etel0qLVthLXpdKi5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCiAKLXMvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMi4zLjRcL3Nkay1tYW51YWxcL3Nkay1tYW51YWwuaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZwotcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjMuNFwvYnNwLWd1aWRlXC9ic3AtZ3VpZGUuaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZwotcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjMuNFwvZGV2LW1hbnVhbFwvZGV2LW1hbnVhbC5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCi1zL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMy40XC9rZXJuZWwtZGV2XC9rZXJuZWwtZGV2Lmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKLXMvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMi4zLjRcL3Byb2ZpbGUtbWFudWFsXC9wcm9maWxlLW1hbnVhbC5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCi1zL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMy40XC9yZWYtbWFudWFsXC9yZWYtbWFudWFsLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKLXMvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMi4zLjRcL3RvYXN0ZXItbWFudWFsXC90b2FzdGVyLW1hbnVhbC5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCi1zL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMy40XC95b2N0by1wcm9qZWN0LXFzXC95b2N0by1wcm9qZWN0LXFzLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKK3MvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMi40LjJcL3Nkay1tYW51YWxcL3Nkay1tYW51YWwuaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZworcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjQuMlwvYnNwLWd1aWRlXC9ic3AtZ3VpZGUuaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZworcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjQuMlwvZGV2LW1hbnVhbFwvZGV2LW1hbnVhbC5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuNC4yXC9rZXJuZWwtZGV2XC9rZXJuZWwtZGV2Lmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKK3MvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMi40LjJcL3Byb2ZpbGUtbWFudWFsXC9wcm9maWxlLW1hbnVhbC5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuNC4yXC9yZWYtbWFudWFsXC9yZWYtbWFudWFsLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKK3MvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMi40LjJcL3RvYXN0ZXItbWFudWFsXC90b2FzdGVyLW1hbnVhbC5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuNC4yXC95b2N0by1wcm9qZWN0LXFzXC95b2N0by1wcm9qZWN0LXFzLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKIAogIyBQcm9jZXNzIGNhc2VzIHdoZXJlIGp1c3QgYW4gZXh0ZXJuYWwgbWFudWFsIGlzIHJlZmVyZW5jZWQgd2l0aG91dCBhbiBpZCBhbmNob3IKLXMvPGEgY2xhc3M9XCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMi4zLjRcL3lvY3RvLXByb2plY3QtcXNcL3lvY3RvLXByb2plY3QtcXMuaHRtbFwiIHRhcmdldD1cIl90b3BcIj5Zb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0PFwvYT4vWW9jdG8gUHJvamVjdCBRdWljayBTdGFydC9nCi1zLzxhIGNsYXNzPVwidWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMy40XC9kZXYtbWFudWFsXC9kZXYtbWFudWFsLmh0bWxcIiB0YXJnZXQ9XCJfdG9wXCI+WW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWw8XC9hPi9Zb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC9nCi1zLzxhIGNsYXNzPVwidWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMy40XC9zZGstbWFudWFsXC9zZGstbWFudWFsLmh0bWxcIiB0YXJnZXQ9XCJfdG9wXCI+WW9jdG8gUHJvamVjdCBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKFNESykgRGV2ZWxvcGVyJ3MgR3VpZGU8XC9hPi9Zb2N0byBQcm9qZWN0IFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoU0RLKSBEZXZlbG9wZXIncyBHdWlkZS9nCi1zLzxhIGNsYXNzPVwidWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMy40XC9ic3AtZ3VpZGVcL2JzcC1ndWlkZS5odG1sXCIgdGFyZ2V0PVwiX3RvcFwiPllvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIERldmVsb3BlcidzIEd1aWRlPFwvYT4vWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGUvZwotcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjMuNFwvcHJvZmlsZS1tYW51YWxcL3Byb2ZpbGUtbWFudWFsLmh0bWxcIiB0YXJnZXQ9XCJfdG9wXCI+WW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsPFwvYT4vWW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsL2cKLXMvPGEgY2xhc3M9XCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMi4zLjRcL2tlcm5lbC1kZXZcL2tlcm5lbC1kZXYuaHRtbFwiIHRhcmdldD1cIl90b3BcIj5Zb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWw8XC9hPi9Zb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWwvZwotcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjMuNFwvcmVmLW1hbnVhbFwvcmVmLW1hbnVhbC5odG1sXCIgdGFyZ2V0PVwiX3RvcFwiPllvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbDxcL2E+L1lvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC9nCi1zLzxhIGNsYXNzPVwidWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuMy40XC90b2FzdGVyLW1hbnVhbFwvdG9hc3Rlci1tYW51YWwuaHRtbFwiIHRhcmdldD1cIl90b3BcIj5Ub2FzdGVyIFVzZXIgTWFudWFsPFwvYT4vVG9hc3RlciBVc2VyIE1hbnVhbC9nCitzLzxhIGNsYXNzPVwidWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuNC4yXC95b2N0by1wcm9qZWN0LXFzXC95b2N0by1wcm9qZWN0LXFzLmh0bWxcIiB0YXJnZXQ9XCJfdG9wXCI+WW9jdG8gUHJvamVjdCBRdWljayBTdGFydDxcL2E+L1lvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQvZworcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjQuMlwvZGV2LW1hbnVhbFwvZGV2LW1hbnVhbC5odG1sXCIgdGFyZ2V0PVwiX3RvcFwiPllvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsPFwvYT4vWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwvZworcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjQuMlwvc2RrLW1hbnVhbFwvc2RrLW1hbnVhbC5odG1sXCIgdGFyZ2V0PVwiX3RvcFwiPllvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgYW5kIHRoZSBFeHRlbnNpYmxlIFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoZVNESyk8XC9hPi9Zb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BtZW50IGFuZCB0aGUgRXh0ZW5zaWJsZSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKGVTREspL2cKK3MvPGEgY2xhc3M9XCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMi40LjJcL2JzcC1ndWlkZVwvYnNwLWd1aWRlLmh0bWxcIiB0YXJnZXQ9XCJfdG9wXCI+WW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGU8XC9hPi9Zb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZS9nCitzLzxhIGNsYXNzPVwidWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuNC4yXC9wcm9maWxlLW1hbnVhbFwvcHJvZmlsZS1tYW51YWwuaHRtbFwiIHRhcmdldD1cIl90b3BcIj5Zb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZyBNYW51YWw8XC9hPi9Zb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZyBNYW51YWwvZworcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8yLjQuMlwva2VybmVsLWRldlwva2VybmVsLWRldi5odG1sXCIgdGFyZ2V0PVwiX3RvcFwiPllvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbDxcL2E+L1lvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbC9nCitzLzxhIGNsYXNzPVwidWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzIuNC4yXC9yZWYtbWFudWFsXC9yZWYtbWFudWFsLmh0bWxcIiB0YXJnZXQ9XCJfdG9wXCI+WW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsPFwvYT4vWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsL2cKK3MvPGEgY2xhc3M9XCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMi40LjJcL3RvYXN0ZXItbWFudWFsXC90b2FzdGVyLW1hbnVhbC5odG1sXCIgdGFyZ2V0PVwiX3RvcFwiPlRvYXN0ZXIgVXNlciBNYW51YWw8XC9hPi9Ub2FzdGVyIFVzZXIgTWFudWFsL2cKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMvZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC5wbmcgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL2ZpZ3VyZXMveW9jdG8tZW52aXJvbm1lbnQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTk2OTAzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMvZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL3FzLXN0eWxlLmNzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMvcXMtc3R5bGUuY3NzCmluZGV4IDIzNWM4NWEuLjk0OGYxYmUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMvcXMtc3R5bGUuY3NzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMvcXMtc3R5bGUuY3NzCkBAIC03MzAsNiArNzMwLDExIEBACiB9CiAKIAorLndyaXRlcm5vdGVzIHsKKyAgY29sb3I6IHJlZDsKK30KKworCiAgIC8qKioqKioqKioqKiAvCiAgLyAgZ3JhcGhpY3MgIC8KIC8gKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL3lvY3RvLXByb2plY3QtcXMueG1sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLnhtbAppbmRleCBiNGIzZjRiLi5lNmRhZTdmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL3lvY3RvLXByb2plY3QtcXMueG1sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMveW9jdG8tcHJvamVjdC1xcy54bWwKQEAgLTE2LDM1ICsxNiwzNiBAQAogICAgICAgICAgICAgICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudCB1bmRlcgogICAgICAgICAgICAgICAgIHRoZSB0ZXJtcyBvZiB0aGUgPHVsaW5rIHR5cGU9Imh0dHAiIHVybD0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMi4wL3VrLyI+Q3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZSBBbGlrZSAyLjAgVUs6IEVuZ2xhbmQgJmFtcDsgV2FsZXM8L3VsaW5rPiBhcyBwdWJsaXNoZWQgYnkgQ3JlYXRpdmUgQ29tbW9ucy4KICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDxub3RlPjx0aXRsZT5NYW51YWwgTm90ZXM8L3RpdGxlPgotICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgUXVpY2sKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIFlvY3RvIFByb2plY3QgcmVsZWFzZQotICAgICAgICAgICAgICAgICAgICAgICAgKHZlcnNpb24gJllPQ1RPX0RPQ19WRVJTSU9OOyksCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQgZnJvbSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvZG9jdW1lbnRhdGlvbic+WW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uIHBhZ2U8L3VsaW5rPi4KKyAgICAgICAgICAgPG5vdGU+PHRpdGxlPk1hbnVhbCBOb3RlczwvdGl0bGU+CisgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2ZXJzaW9uIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+WW9jdG8gUHJvamVjdCBRdWljayBTdGFydDwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgIGlzIGZvciB0aGUgJllPQ1RPX0RPQ19WRVJTSU9OOyByZWxlYXNlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICBUbyBiZSBzdXJlIHlvdSBoYXZlIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgbWFudWFsCisgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGlzIHJlbGVhc2UsIHVzZSB0aGUgbWFudWFsIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvZG9jdW1lbnRhdGlvbic+WW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uIHBhZ2U8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICBGb3IgbWFudWFscyBhc3NvY2lhdGVkIHdpdGggb3RoZXIgcmVsZWFzZXMgb2YgdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgICAgICAgIFByb2plY3QsIGdvIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L2RvY3VtZW50YXRpb24nPllvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbiBwYWdlPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgYW5kIHVzZSB0aGUgZHJvcC1kb3duICJBY3RpdmUgUmVsZWFzZXMiIGJ1dHRvbgorICAgICAgICAgICAgICAgICAgICAgICBhbmQgY2hvb3NlIHRoZSBtYW51YWwgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXNpcmVkCisgICAgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIHJlcG9ydCBhbnkgaW5hY2N1cmFjaWVzIG9yIHByb2JsZW1zIHdpdGggdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgbWFudWFsLCBzZW5kIGFuIGVtYWlsIHRvIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgICAgICBkaXNjdXNzaW9uIGdyb3VwIGF0CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG9AeW9jdG9wcm9qZWN0LmNvbTwvZmlsZW5hbWU+IG9yIGxvZyBpbnRvCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZnJlZW5vZGUgPGZpbGVuYW1lPiN5b2N0bzwvZmlsZW5hbWU+IGNoYW5uZWwuCiAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2ZXJzaW9uIG9mIHRoZSBtYW51YWwgaXMgdmVyc2lvbgotICAgICAgICAgICAgICAgICAgICAgICAgJllPQ1RPX0RPQ19WRVJTSU9OOy4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZvciBsYXRlciByZWxlYXNlcyBvZiB0aGUgWW9jdG8gUHJvamVjdCAoaWYgdGhleSBleGlzdCksCi0gICAgICAgICAgICAgICAgICAgICAgICBnbyB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvZG9jdW1lbnRhdGlvbic+WW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uIHBhZ2U8L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHVzZSB0aGUgZHJvcC1kb3duICJBY3RpdmUgUmVsZWFzZXMiIGJ1dHRvbgotICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGNob29zZSB0aGUgWW9jdG8gUHJvamVjdCB2ZXJzaW9uIGZvciB3aGljaCB5b3Ugd2FudAotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hbnVhbC4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBGb3IgYW4gaW4tZGV2ZWxvcG1lbnQgdmVyc2lvbiBvZiB0aGUgWW9jdG8gUHJvamVjdAotICAgICAgICAgICAgICAgICAgICAgICAgUXVpY2sgU3RhcnQsIHNlZQotICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfVVJMOy9sYXRlc3QveW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLmh0bWwnPjwvdWxpbms+LgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgPC9ub3RlPgogICAgICAgICA8L2xlZ2Fsbm90aWNlPgogCi0KICAgICAgICAgPGFic3RyYWN0PgogICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3lvY3RvLXByb2plY3QtdHJhbnNwLnBuZyIKICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPSI2aW4iIGRlcHRoPSIxaW4iCkBAIC02MCwyNCArNjEsMTIgQEAKICAgICAgICAgICAgIGZvY3VzIGlzIGRldmVsb3BlcnMgb2YgZW1iZWRkZWQgTGludXggc3lzdGVtcy4KICAgICAgICAgICAgIEFtb25nIG90aGVyIHRoaW5ncywgdGhlIFlvY3RvIFByb2plY3QgdXNlcyBhIGJ1aWxkIGhvc3QgYmFzZWQKICAgICAgICAgICAgIG9uIHRoZSBPcGVuRW1iZWRkZWQgKE9FKSBwcm9qZWN0LCB3aGljaCB1c2VzIHRoZQotICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYml0YmFrZS10ZXJtJz5CaXRCYWtlPC91bGluaz4KKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+CiAgICAgICAgICAgICB0b29sLCB0byBjb25zdHJ1Y3QgY29tcGxldGUgTGludXggaW1hZ2VzLgotICAgICAgICAgICAgVGhlIEJpdEJha2UgYW5kIE9FIGNvbXBvbmVudHMgYXJlIGNvbWJpbmVkIHRvZ2V0aGVyIHRvIGZvcm0KKyAgICAgICAgICAgIFRoZSBCaXRCYWtlIGFuZCBPRSBjb21wb25lbnRzIGNvbWJpbmUgdG9nZXRoZXIgdG8gZm9ybQogICAgICAgICAgICAgYSByZWZlcmVuY2UgYnVpbGQgaG9zdCwgaGlzdG9yaWNhbGx5IGtub3duIGFzCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwb2t5Jz5Qb2t5PC91bGluaz4KLSAgICAgICAgICAgICg8ZW1waGFzaXM+UGFoPC9lbXBoYXNpcz4ta2V5KS4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBoYXZlIGEgc3lzdGVtIHRoYXQgcnVucyBMaW51eCBhbmQgeW91IHdhbnQgdG8gZ2l2ZQotICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgYSB0ZXN0IHJ1biwgeW91IG1pZ2h0IGNvbnNpZGVyIHVzaW5nIHRoZSBZb2N0bwotICAgICAgICAgICAgUHJvamVjdCBCdWlsZCBBcHBsaWFuY2UuCi0gICAgICAgICAgICBUaGUgQnVpbGQgQXBwbGlhbmNlIGFsbG93cyB5b3UgdG8gYnVpbGQgYW5kIGJvb3QgYSBjdXN0b20gZW1iZWRkZWQKLSAgICAgICAgICAgIExpbnV4IGltYWdlIHdpdGggdGhlIFlvY3RvIFByb2plY3QgdXNpbmcgYSBub24tTGludXggZGV2ZWxvcG1lbnQKLSAgICAgICAgICAgIHN5c3RlbS4KLSAgICAgICAgICAgIFNlZSB0aGUKLSAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2J1aWxkLWFwcGxpYW5jZSc+WW9jdG8gUHJvamVjdCBCdWlsZCBBcHBsaWFuY2U8L3VsaW5rPgotICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNwb2t5Jz5Qb2t5PC91bGluaz4KKyAgICAgICAgICAgICg8ZW1waGFzaXM+UGFoPC9lbXBoYXNpcz4ta2VlKS4KICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgIDxwYXJhPgpAQCAtODYsMzAgKzc1LDc0IEBACiAgICAgICAgICAgICBMaW51eCBpbWFnZXMuCiAgICAgICAgICAgICBSYXRoZXIgdGhhbiBnbyBpbnRvIGdyZWF0IGRldGFpbCBhYm91dCB0aGUgWW9jdG8gUHJvamVjdCBhbmQgaXRzCiAgICAgICAgICAgICBtYW55IGNhcGFiaWxpdGllcywgdGhpcyBxdWljayBzdGFydCBwcm92aWRlcyB0aGUgbWluaW1hbAotICAgICAgICAgICAgaW5mb3JtYXRpb24geW91IG5lZWQgdG8gdHJ5IG91dCB0aGUgWW9jdG8gUHJvamVjdCB1c2luZyBhCi0gICAgICAgICAgICBzdXBwb3J0ZWQgTGludXggYnVpbGQgaG9zdC4KKyAgICAgICAgICAgIGluZm9ybWF0aW9uIHlvdSBuZWVkIHRvIHRyeSBvdXQgdGhlIFlvY3RvIFByb2plY3QgdXNpbmcgZWl0aGVyIGEKKyAgICAgICAgICAgIHN1cHBvcnRlZCBMaW51eCBidWlsZCBob3N0IG9yIGEgYnVpbGQgaG9zdCBzZXQgdXAgdG8gdXNlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvY3JvcHMvYWJvdXQvJz5DUk9QUzwvdWxpbms+LAorICAgICAgICAgICAgd2hpY2ggbGV2ZXJhZ2VzCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3d3dy5kb2NrZXIuY29tLyc+RG9ja2VyIENvbnRhaW5lcnM8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgUmVhZGluZyBhbmQgdXNpbmcgdGhlIHF1aWNrIHN0YXJ0IHNob3VsZCByZXN1bHQgaW4geW91IGhhdmluZyBhCiAgICAgICAgICAgICBiYXNpYyB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhlIFlvY3RvIFByb2plY3QgaXMgYW5kIGhvdyB0byB1c2UKICAgICAgICAgICAgIHNvbWUgb2YgaXRzIGNvcmUgY29tcG9uZW50cy4KICAgICAgICAgICAgIFlvdSB3aWxsIGFsc28gaGF2ZSB3b3JrZWQgdGhyb3VnaCBzdGVwcyB0byBwcm9kdWNlIHR3byBpbWFnZXM6Ci0gICAgICAgICAgICBvbmUgdGhhdCBpcyBzdWl0YWJsZSBmb3IgZW11bGF0aW9uIGFuZCBvbmUgdGhhdCBib290cyBvbiBhY3R1YWwKLSAgICAgICAgICAgIGhhcmR3YXJlLgorICAgICAgICAgICAgb25lIHRoYXQgcnVucyBvbiB0aGUgZW11bGF0b3IgKFFFTVUpIGFuZCBvbmUgdGhhdCBib290cyBvbiBhY3R1YWwKKyAgICAgICAgICAgIGhhcmR3YXJlIChpLmUuIE1pbm5vd0JvYXJkIFR1cmJvdCkuCiAgICAgICAgICAgICBUaGUgZXhhbXBsZXMgaGlnaGxpZ2h0IHRoZSBlYXNlIHdpdGggd2hpY2ggeW91IGNhbiB1c2UgdGhlCiAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHRvIGNyZWF0ZSBpbWFnZXMgZm9yIG11bHRpcGxlIHR5cGVzIG9mIGhhcmR3YXJlLgogICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3QgZGlyZWN0cyB5b3UgdG8ga2V5IHNlY3Rpb25zIG9mIHRoaXMKKyAgICAgICAgICAgIHF1aWNrIHN0YXJ0OgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzIuNC95b2N0by1wcm9qZWN0LXFzL3lvY3RvLXByb2plY3QtcXMuaHRtbCN5cC1yZXNvdXJjZXMnPlNldHRpbmcgVXAgdG8gVXNlIHRoZSBZb2N0byBQcm9qZWN0PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8yLjQveW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLmh0bWwjYnVpbGRpbmctYW4taW1hZ2UtZm9yLWVtdWxhdGlvbic+QnVpbGRpbmcgYW4gSW1hZ2UgZm9yIEVtdWxhdGlvbjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvMi40L3lvY3RvLXByb2plY3QtcXMveW9jdG8tcHJvamVjdC1xcy5odG1sI2J1aWxkaW5nLWFuLWltYWdlLWZvci1oYXJkd2FyZSc+QnVpbGRpbmcgYW4gSW1hZ2UgZm9yIEhhcmR3YXJlPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKzwhLS0KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3QgaGF2ZSBhIHN5c3RlbSB0aGF0IHJ1bnMgTGludXggYW5kIHlvdSB3YW50IHRvIGdpdmUKKyAgICAgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCBhIHRlc3QgcnVuLCB5b3UgbWlnaHQgY29uc2lkZXIgdXNpbmcgdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgUHJvamVjdCBCdWlsZCBBcHBsaWFuY2UuCisgICAgICAgICAgICAgICAgVGhlIEJ1aWxkIEFwcGxpYW5jZSBhbGxvd3MgeW91IHRvIGJ1aWxkIGFuZCBib290IGEgY3VzdG9tCisgICAgICAgICAgICAgICAgZW1iZWRkZWQgTGludXggaW1hZ2Ugd2l0aCB0aGUgWW9jdG8gUHJvamVjdCB1c2luZyBhIG5vbi1MaW51eAorICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IHN5c3RlbS4KKyAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy90b29scy1yZXNvdXJjZXMvcHJvamVjdHMvYnVpbGQtYXBwbGlhbmNlJz5Zb2N0byBQcm9qZWN0IEJ1aWxkIEFwcGxpYW5jZTwvdWxpbms+CisgICAgICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICA8L25vdGU+CistLT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgRm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIFlvY3RvIFByb2plY3QsIHlvdSBjYW4KICAgICAgICAgICAgIHJlZmVyZW5jZSB0aGVzZSByZXNvdXJjZXM6CiAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+V2Vic2l0ZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPldlYnNpdGU6PC9lbXBoYXNpcz4KICAgICAgICAgICAgICAgICAgICAgVGhlCiAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsnPllvY3RvIFByb2plY3QgV2Vic2l0ZTwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVzIHRoZSBsYXRlc3QgYnVpbGRzLCBicmVha2luZyBuZXdzLCBmdWxsIGRldmVsb3BtZW50Ci0gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50YXRpb24sIGFuZCBhY2Nlc3MgdG8gYSByaWNoIFlvY3RvIFByb2plY3QKLSAgICAgICAgICAgICAgICAgICAgRGV2ZWxvcG1lbnQgQ29tbXVuaXR5IGludG8gd2hpY2ggeW91IGNhbiB0YXAuCisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVzIGJhY2tncm91bmQgaW5mb3JtYXRpb24sIHRoZSBsYXRlc3QgYnVpbGRzLCBicmVha2luZworICAgICAgICAgICAgICAgICAgICBuZXdzLCBmdWxsIGRldmVsb3BtZW50IGRvY3VtZW50YXRpb24sIGFuZCBhY2Nlc3MgdG8gYSByaWNoCisgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgQ29tbXVuaXR5IGludG8gd2hpY2ggeW91IGNhbiB0YXAuCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RkFRczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPllvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgT3ZlcnZpZXc6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN5cC1pbnRybyc+SW50cm9kdWNpbmcgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBwcmVzZW50cyBhbiBvdmVydmlldyBvZiB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+RkFRczo8L2VtcGhhc2lzPgogICAgICAgICAgICAgICAgICAgICBMaXN0cyBjb21tb25seSBhc2tlZCBZb2N0byBQcm9qZWN0IHF1ZXN0aW9ucyBhbmQgYW5zd2Vycy4KICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHR3byBGQVFzOgogICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvRkFRJz5Zb2N0byBQcm9qZWN0IEZBUTwvdWxpbms+CkBAIC0xMTcsNyArMTUwLDggQEAKICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2ZhcSc+RkFRPC91bGluaz4iCiAgICAgICAgICAgICAgICAgICAgIGNoYXB0ZXIgaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5EZXZlbG9wZXIgU2NyZWVuY2FzdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkRldmVsb3BlciBTY3JlZW5jYXN0OjwvZW1waGFzaXM+CiAgICAgICAgICAgICAgICAgICAgIFRoZQogICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vdmltZW8uY29tLzM2NDUwMzIxJz5HZXR0aW5nIFN0YXJ0ZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAtIE5ldyBEZXZlbG9wZXIgU2NyZWVuY2FzdCBUdXRvcmlhbDwvdWxpbms+CiAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVzIGEgMzAtbWludXRlIHZpZGVvIGNyZWF0ZWQgZm9yIHVzZXJzIHVuZmFtaWxpYXIKQEAgLTEyNiwyMzggKzE2MCwyNDAgQEAKICAgICAgICAgICAgICAgICAgICAgV2hpbGUgdGhpcyBzY3JlZW5jYXN0IGlzIHNvbWV3aGF0IGRhdGVkLCB0aGUgaW50cm9kdWN0b3J5CiAgICAgICAgICAgICAgICAgICAgIGFuZCBmdW5kYW1lbnRhbCBjb25jZXB0cyBhcmUgdXNlZnVsIGZvciB0aGUgYmVnaW5uZXIuCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkNvbXByZWhlbnNpdmUgTGlzdCBvZiBMaW5rcyBhbmQgT3RoZXIgRG9jdW1lbnRhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Jlc291cmNlcy1saW5rcy1hbmQtcmVsYXRlZC1kb2N1bWVudGF0aW9uJz5MaW5rcyBhbmQgUmVsYXRlZCBEb2N1bWVudGF0aW9uPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBwcm92aWRlcyBhCisgICAgICAgICAgICAgICAgICAgIGNvbXByZWhlbnNpdmUgbGlzdCBvZiByZWxhdGVkIGxpbmtzIGFuZCBkb2N1bWVudGF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgICA8L3BhcmE+CiAgICAgPC9zZWN0aW9uPgogCi0gICAgPHNlY3Rpb24gaWQ9J3lwLWludHJvJz4KLSAgICAgICAgPHRpdGxlPkludHJvZHVjaW5nIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50PC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHRocm91Z2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcHJvdmlkZXMgYW4KLSAgICAgICAgICAgIG9wZW4gc291cmNlIGRldmVsb3BtZW50IGVudmlyb25tZW50IHRhcmdldGluZyB0aGUgQVJNLCBNSVBTLAotICAgICAgICAgICAgUG93ZXJQQywgYW5kIHg4NiBhcmNoaXRlY3R1cmVzIGZvciBhIHZhcmlldHkgb2YgcGxhdGZvcm1zCi0gICAgICAgICAgICBpbmNsdWRpbmcgeDg2LTY0IGFuZCBlbXVsYXRlZCBvbmVzLgotICAgICAgICAgICAgWW91IGNhbiB1c2UgY29tcG9uZW50cyBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IHRvIGRlc2lnbiwgZGV2ZWxvcCwKLSAgICAgICAgICAgIGJ1aWxkLCBkZWJ1Zywgc2ltdWxhdGUsIGFuZCB0ZXN0IHRoZSBjb21wbGV0ZSBzb2Z0d2FyZSBzdGFjayB1c2luZwotICAgICAgICAgICAgTGludXgsIHRoZSBYIFdpbmRvdyBTeXN0ZW0sIEdUSysgZnJhbWV3b3JrcywgYW5kIFF0IGZyYW1ld29ya3MuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8bWVkaWFvYmplY3Q+Ci0gICAgICAgICAgICA8aW1hZ2VvYmplY3Q+Ci0gICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZyIKLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSJQTkciIGFsaWduPSdjZW50ZXInIHdpZHRoPSI4aW4iLz4KLSAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+Ci0gICAgICAgICA8L21lZGlhb2JqZWN0PgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBoaWdobGlnaHRzIGZvciB0aGUgWW9jdG8gUHJvamVjdDoKLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgUHJvdmlkZXMgYSByZWNlbnQgTGludXgga2VybmVsIGFsb25nIHdpdGggYSBzZXQgb2Ygc3lzdGVtCi0gICAgICAgICAgICAgICAgY29tbWFuZHMgYW5kIGxpYnJhcmllcyBzdWl0YWJsZSBmb3IgdGhlIGVtYmVkZGVkCi0gICAgICAgICAgICAgICAgZW52aXJvbm1lbnQuCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgTWFrZXMgYXZhaWxhYmxlIHN5c3RlbSBjb21wb25lbnRzIHN1Y2ggYXMgWDExLCBHVEsrLCBRdCwKLSAgICAgICAgICAgICAgICBDbHV0dGVyLCBhbmQgU0RMIChhbW9uZyBvdGhlcnMpIHNvIHlvdSBjYW4gY3JlYXRlIGEgcmljaCB1c2VyCi0gICAgICAgICAgICAgICAgZXhwZXJpZW5jZSBvbiBkZXZpY2VzIHRoYXQgaGF2ZSBkaXNwbGF5IGhhcmR3YXJlLgotICAgICAgICAgICAgICAgIEZvciBkZXZpY2VzIHRoYXQgZG8gbm90IGhhdmUgYSBkaXNwbGF5IG9yIHdoZXJlIHlvdSB3aXNoIHRvCi0gICAgICAgICAgICAgICAgdXNlIGFsdGVybmF0aXZlIFVJIGZyYW1ld29ya3MsIHRoZXNlIGNvbXBvbmVudHMgbmVlZCBub3QgYmUKLSAgICAgICAgICAgICAgICBpbnN0YWxsZWQuCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgQ3JlYXRlcyBhIGZvY3VzZWQgYW5kIHN0YWJsZSBjb3JlIGNvbXBhdGlibGUgd2l0aCB0aGUKLSAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgcHJvamVjdCB3aXRoIHdoaWNoIHlvdSBjYW4gZWFzaWx5IGFuZCByZWxpYWJseQotICAgICAgICAgICAgICAgIGJ1aWxkIGFuZCBkZXZlbG9wLgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgIEZ1bGx5IHN1cHBvcnRzIGEgd2lkZSByYW5nZSBvZiBoYXJkd2FyZSBhbmQgZGV2aWNlIGVtdWxhdGlvbgotICAgICAgICAgICAgICAgIHRocm91Z2ggdGhlIFF1aWNrIEVNVWxhdG9yIChRRU1VKS4KLSAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICBQcm92aWRlcyBhIGxheWVyIG1lY2hhbmlzbSB0aGF0IGFsbG93cyB5b3UgdG8gZWFzaWx5IGV4dGVuZAotICAgICAgICAgICAgICAgIHRoZSBzeXN0ZW0sIG1ha2UgY3VzdG9taXphdGlvbnMsIGFuZCBrZWVwIHRoZW0gb3JnYW5pemVkLgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBZb2N0byBQcm9qZWN0IHRvIGdlbmVyYXRlIGltYWdlcyBmb3IgbWFueSBraW5kcwotICAgICAgICAgICAgb2YgZGV2aWNlcy4KLSAgICAgICAgICAgIEFzIG1lbnRpb25lZCBlYXJsaWVyLCB0aGUgWW9jdG8gUHJvamVjdCBzdXBwb3J0cyBjcmVhdGlvbiBvZgotICAgICAgICAgICAgcmVmZXJlbmNlIGltYWdlcyB0aGF0IHlvdSBjYW4gYm9vdCB3aXRoaW4gYW5kIGVtdWxhdGUgdXNpbmcgUUVNVS4KLSAgICAgICAgICAgIFRoZSBzdGFuZGFyZCBleGFtcGxlIG1hY2hpbmVzIHRhcmdldCBRRU1VIGZ1bGwtc3lzdGVtCi0gICAgICAgICAgICBlbXVsYXRpb24gZm9yIDMyLWJpdCBhbmQgNjQtYml0IHZhcmlhbnRzIG9mIHg4NiwgQVJNLCBNSVBTLCBhbmQKLSAgICAgICAgICAgIFBvd2VyUEMgYXJjaGl0ZWN0dXJlcy4KLSAgICAgICAgICAgIEJleW9uZCBlbXVsYXRpb24sIHlvdSBjYW4gdXNlIHRoZSBsYXllciBtZWNoYW5pc20gdG8gZXh0ZW5kCi0gICAgICAgICAgICBzdXBwb3J0IHRvIGp1c3QgYWJvdXQgYW55IHBsYXRmb3JtIHRoYXQgTGludXggY2FuIHJ1biBvbiBhbmQgdGhhdAotICAgICAgICAgICAgYSB0b29sY2hhaW4gY2FuIHRhcmdldC4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQW5vdGhlciBZb2N0byBQcm9qZWN0IGZlYXR1cmUgaXMgdGhlIFNhdG8gcmVmZXJlbmNlIFVzZXIKLSAgICAgICAgICAgIEludGVyZmFjZS4KLSAgICAgICAgICAgIFRoaXMgb3B0aW9uYWwgVUkgdGhhdCBpcyBiYXNlZCBvbiBHVEsrIGlzIGludGVuZGVkIGZvciBkZXZpY2VzIHdpdGgKLSAgICAgICAgICAgIHJlc3RyaWN0ZWQgc2NyZWVuIHNpemVzIGFuZCBpcyBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZQotICAgICAgICAgICAgT3BlbkVtYmVkZGVkIENvcmUgbGF5ZXIgc28gdGhhdCBkZXZlbG9wZXJzIGNhbiB0ZXN0IHBhcnRzIG9mIHRoZQotICAgICAgICAgICAgc29mdHdhcmUgc3RhY2suCi0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KICAgICA8c2VjdGlvbiBpZD0neXAtcmVzb3VyY2VzJz4KICAgICAgICAgPHRpdGxlPlNldHRpbmcgVXAgdG8gVXNlIHRoZSBZb2N0byBQcm9qZWN0PC90aXRsZT4KIAogICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBzaG93cyB3aGF0IHlvdSBuZWVkIGluIG9yZGVyIHRvIHVzZSBhCi0gICAgICAgICAgICBMaW51eC1iYXNlZCBidWlsZCBob3N0IHRvIHVzZSB0aGUgWW9jdG8gUHJvamVjdCB0byBidWlsZCBpbWFnZXM6CisgICAgICAgICAgICBTZXR0aW5nIHVwIHRvIHVzZSB0aGUgWW9jdG8gUHJvamVjdCBpbnZvbHZlcyBnZXR0aW5nIHlvdXIgYnVpbGQKKyAgICAgICAgICAgIGhvc3QgcmVhZHkuCisgICAgICAgICAgICBJZiB5b3UgaGF2ZSBhIG5hdGl2ZSBMaW51eCBtYWNoaW5lIHRoYXQgcnVucyBhIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgIHN1cHBvcnRlZCBkaXN0cmlidXRpb24gYXMgZGVzY3JpYmVkIGJ5IHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2RldGFpbGVkLXN1cHBvcnRlZC1kaXN0cm9zJz5TdXBwb3J0ZWQgTGludXggRGlzdHJpYnV0aW9uczwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLCB5b3UgY2FuIHByZXBhcmUKKyAgICAgICAgICAgIHRoYXQgbWFjaGluZSBhcyB5b3VyIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncXMtbmF0aXZlLWxpbnV4LWJ1aWxkLWhvc3QnPlVzaW5nIGEgTmF0aXZlIExpbnV4IE1hY2hpbmU8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgPC9wYXJhPgogCi0gICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIEhvc3Q8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIEEgYnVpbGQgaG9zdCB3aXRoIGEgbWluaW11bSBvZiA1MCBHYnl0ZXMgb2YgZnJlZSBkaXNrCi0gICAgICAgICAgICAgICAgc3BhY2UgdGhhdCBpcyBydW5uaW5nIGEgc3VwcG9ydGVkIExpbnV4IGRpc3RyaWJ1dGlvbiAoaS5lLgotICAgICAgICAgICAgICAgIHJlY2VudCByZWxlYXNlcyBvZiBGZWRvcmEsIG9wZW5TVVNFLCBDZW50T1MsIERlYmlhbiwgb3IKLSAgICAgICAgICAgICAgICBVYnVudHUpLgotICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCBIb3N0IFBhY2thZ2VzPC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBBcHByb3ByaWF0ZSBwYWNrYWdlcyBpbnN0YWxsZWQgb24gdGhlIGJ1aWxkIGhvc3QuCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRoZSBZb2N0byBQcm9qZWN0PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBBIHJlbGVhc2Ugb2YgdGhlIFlvY3RvIFByb2plY3QuCi0gICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgd2FudCB0byB1c2UgdGhlIFlvY3RvIFByb2plY3Qgb24gYSBuYXRpdmUgTGludXgKKyAgICAgICAgICAgIG1hY2hpbmUsIHlvdSBjYW4gcHJlcGFyZSB5b3VyIGJ1aWxkIGhvc3QgdG8gdXNlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvY3JvcHMvYWJvdXQvJz5DUk9QUzwvdWxpbms+LAorICAgICAgICAgICAgd2hpY2ggbGV2ZXJhZ2VzCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3d3dy5kb2NrZXIuY29tLyc+RG9ja2VyIENvbnRhaW5lcnM8L3VsaW5rPi4KKyAgICAgICAgICAgIFlvdSBjYW4gc2V0IHVwIGEgYnVpbGQgaG9zdCBmb3IgV2luZG93cywgTWFjLCBhbmQgTGludXgKKyAgICAgICAgICAgIG1hY2hpbmVzLgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3FzLWNyb3BzLWJ1aWxkLWhvc3QnPlVzaW5nIENST1BTIGFuZCBDb250YWluZXJzPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KIAotICAgICAgICA8c2VjdGlvbiBpZD0ndGhlLWxpbnV4LWRpc3Rybyc+Ci0gICAgICAgICAgICA8dGl0bGU+VGhlIExpbnV4IERpc3RyaWJ1dGlvbjwvdGl0bGU+CisgICAgICAgIDxzZWN0aW9uIGlkPSdxcy1jcm9wcy1idWlsZC1ob3N0Jz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBDUk9QUyBhbmQgQ29udGFpbmVyczwvdGl0bGU+CiAKICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHRlYW0gdmVyaWZpZXMgZWFjaCByZWxlYXNlIGFnYWluc3QgcmVjZW50Ci0gICAgICAgICAgICAgICAgdmVyc2lvbnMgb2YgdGhlIG1vc3QgcG9wdWxhciBMaW51eCBkaXN0cmlidXRpb25zIHRoYXQKLSAgICAgICAgICAgICAgICBwcm92aWRlIHN0YWJsZSByZWxlYXNlcy4KLSAgICAgICAgICAgICAgICBJbiBnZW5lcmFsLCBpZiB5b3UgaGF2ZSB0aGUgY3VycmVudCByZWxlYXNlIG1pbnVzIG9uZSBvZiB0aGUKLSAgICAgICAgICAgICAgICBmb2xsb3dpbmcgZGlzdHJpYnV0aW9ucywgeW91IHNob3VsZCBoYXZlIG5vIHByb2JsZW1zLgotICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgRm9sbG93IHRoZXNlIHN0ZXBzIHRvIGdldCB5b3VyIGJ1aWxkIGhvc3Qgc2V0IHVwIHdpdGggYQorICAgICAgICAgICAgICAgIFBva3kgY29udGFpbmVyIHRoYXQgeW91IGNhbiB1c2UgdG8gY29tcGxldGUgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgZXhhbXBsZXMgZnVydGhlciBkb3duIGluIHRoZSBRdWljayBTdGFydDoKKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CiAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFVidW50dQorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlNldCBVcCB0byB1c2UgQ1JPc3MgUGxhdGZvcm1TIChDUk9QUyk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdvcmsgdGhyb3VnaCB0aGUgZmlyc3Qgc2l4IHN0ZXBzIG9mIHRoZSBwcm9jZWR1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NldHRpbmctdXAtdG8tdXNlLWNyb3BzJz5TZXR0aW5nIFVwIHRvIFVzZSBDUk9zcyBQbGF0Zm9ybVMgKENST1BTKTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBUYXNrcyBNYW51YWwuCiAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgRmVkb3JhCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgb3BlblNVU0UKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBDZW50T1MKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICBEZWJpYW4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgICAgIEZvciBhIG1vcmUgZGV0YWlsZWQgbGlzdCBvZiBkaXN0cmlidXRpb25zIHRoYXQgc3VwcG9ydCB0aGUKLSAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0LCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2RldGFpbGVkLXN1cHBvcnRlZC1kaXN0cm9zJz5TdXBwb3J0ZWQgTGludXggRGlzdHJpYnV0aW9uczwvdWxpbms+IgotICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KLSAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5TZXQgVXAgdGhlIFBva3kgQ29udGFpbmVyIHRvIFVzZSB0aGUgWW9jdG8gUHJvamVjdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgR28gdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vZ2l0aHViLmNvbS9jcm9wcy9wb2t5LWNvbnRhaW5lci9ibG9iL21hc3Rlci9SRUFETUUubWQnPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZm9sbG93IHRoZSBkaXJlY3Rpb25zIHRvIHNldCB1cCB0aGUgUG9reSBjb250YWluZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uIHlvdXIgYnVpbGQgaG9zdC48L3BhcmE+CiAKLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHNob3VsZCBiZSBhYmxlIHRvIHJ1biBvbiBhbnkKLSAgICAgICAgICAgICAgICBtb2Rlcm4gZGlzdHJpYnV0aW9uIHRoYXQgaGFzIHRoZSBmb2xsb3dpbmcgdmVyc2lvbnMgZm9yCi0gICAgICAgICAgICAgICAgR2l0LCB0YXIsIGFuZCBQeXRob24uCi0gICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgR2l0IDEuOC4zLjEgb3IgZ3JlYXRlcgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+T25jZSB5b3UgY29tcGxldGUgdGhlIHNldHVwIGluc3RydWN0aW9ucyBmb3IgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZSwgeW91IG5lZWQgdG8gZ2V0IGEgY29weSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gcmVwb3NpdG9yeSBvbiB5b3VyIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICBob3N0LgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlbGVhc2VzJz5Zb2N0byBQcm9qZWN0IFJlbGVhc2U8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiB0byBjb250aW51ZS4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICB0YXIgMS4yNCBvciBncmVhdGVyCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgUHl0aG9uIDMuNC4wIG9yIGdyZWF0ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICBJZiB5b3VyIGJ1aWxkIGhvc3QgZG9lcyBub3QgbWVldCBhbnkgb2YgdGhlc2UgdGhyZWUgbGlzdGVkCi0gICAgICAgICAgICAgICAgdmVyc2lvbiByZXF1aXJlbWVudHMsIHlvdSBjYW4gdGFrZSBzdGVwcyB0byBwcmVwYXJlIHRoZQotICAgICAgICAgICAgICAgIHN5c3RlbSBzbyB0aGF0IHlvdSBjYW4gc3RpbGwgdXNlIHRoZSBZb2N0byBQcm9qZWN0LgotICAgICAgICAgICAgICAgIFNlZSB0aGUKLSAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVxdWlyZWQtZ2l0LXRhci1hbmQtcHl0aG9uLXZlcnNpb25zJz5SZXF1aXJlZCBHaXQsIHRhciwgYW5kIFB5dGhvbiBWZXJzaW9uczwvdWxpbms+IgotICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBmb3IgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9zZWN0aW9uPgogCi0gICAgICAgIDxzZWN0aW9uIGlkPSdwYWNrYWdlcyc+Ci0gICAgICAgICAgICA8dGl0bGU+VGhlIEJ1aWxkIEhvc3QgUGFja2FnZXM8L3RpdGxlPgorICAgICAgICA8c2VjdGlvbiBpZD0ncXMtbmF0aXZlLWxpbnV4LWJ1aWxkLWhvc3QnPgorICAgICAgICAgICAgPHRpdGxlPlVzaW5nIGEgTmF0aXZlIExpbnV4IE1hY2hpbmU8L3RpdGxlPgogCiAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBSZXF1aXJlZCBidWlsZCBob3N0IHBhY2thZ2VzIHZhcnkgZGVwZW5kaW5nIG9uIHlvdXIKLSAgICAgICAgICAgICAgICBidWlsZCBtYWNoaW5lIGFuZCB3aGF0IHlvdSB3YW50IHRvIGRvIHdpdGggdGhlIFlvY3RvIFByb2plY3QuCi0gICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGJ1aWxkIGFuIGltYWdlIHRoYXQgY2FuIHJ1bgotICAgICAgICAgICAgICAgIG9uIFFFTVUgaW4gZ3JhcGhpY2FsIG1vZGUgKGEgbWluaW1hbCwgYmFzaWMgYnVpbGQKLSAgICAgICAgICAgICAgICByZXF1aXJlbWVudCksIHRoZW4gdGhlIGJ1aWxkIGhvc3QgcGFja2FnZSByZXF1aXJlbWVudHMKLSAgICAgICAgICAgICAgICBhcmUgZGlmZmVyZW50IHRoYW4gaWYgeW91IHdhbnQgdG8gYnVpbGQgYW4gaW1hZ2Ugb24gYSBoZWFkbGVzcwotICAgICAgICAgICAgICAgIHN5c3RlbSBvciBidWlsZCBvdXQgdGhlIFlvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbiBzZXQuCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHNob3dzIHdoYXQgeW91IG5lZWQgaW4gb3JkZXIgdG8gdXNlIGEKKyAgICAgICAgICAgICAgICBMaW51eC1iYXNlZCBidWlsZCBob3N0IHRvIHVzZSB0aGUgWW9jdG8gUHJvamVjdCB0byBidWlsZCBpbWFnZXM6CiAgICAgICAgICAgICA8L3BhcmE+CiAKLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIENvbGxlY3RpdmVseSwgdGhlIG51bWJlciBvZiByZXF1aXJlZCBwYWNrYWdlcyBpcyBsYXJnZQotICAgICAgICAgICAgICAgIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gY292ZXIgYWxsIGNhc2VzLgotICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICBJbiBnZW5lcmFsLCB5b3UgbmVlZCB0byBoYXZlIHJvb3QgYWNjZXNzIGFuZCB0aGVuIGluc3RhbGwKLSAgICAgICAgICAgICAgICAgICAgdGhlIHJlcXVpcmVkIHBhY2thZ2VzLgotICAgICAgICAgICAgICAgICAgICBUaHVzLCB0aGUgY29tbWFuZHMgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uIG1heSBvciBtYXkKLSAgICAgICAgICAgICAgICAgICAgbm90IHdvcmsgZGVwZW5kaW5nIG9uIHdoZXRoZXIgb3Igbm90IHlvdXIgTGludXgKLSAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uIGhhcyA8ZmlsZW5hbWU+c3VkbzwvZmlsZW5hbWU+IGluc3RhbGxlZC4KLSAgICAgICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgSG9zdDwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEEgYnVpbGQgaG9zdCB3aXRoIGEgbWluaW11bSBvZiA1MCBHYnl0ZXMgb2YgZnJlZSBkaXNrCisgICAgICAgICAgICAgICAgICAgIHNwYWNlIHRoYXQgaXMgcnVubmluZyBhIHN1cHBvcnRlZCBMaW51eCBkaXN0cmlidXRpb24gKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgcmVjZW50IHJlbGVhc2VzIG9mIEZlZG9yYSwgb3BlblNVU0UsIENlbnRPUywgRGViaWFuLCBvcgorICAgICAgICAgICAgICAgICAgICBVYnVudHUpLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIEhvc3QgUGFja2FnZXM8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBBcHByb3ByaWF0ZSBwYWNrYWdlcyBpbnN0YWxsZWQgb24gdGhlIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAKLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBzaG93cyB0aGUgcmVxdWlyZWQgcGFja2FnZXMgbmVlZGVkIHRvIGJ1aWxkCi0gICAgICAgICAgICAgICAgYW4gaW1hZ2UgdGhhdCBydW5zIG9uIFFFTVUgaW4gZ3JhcGhpY2FsIG1vZGUgKGUuZy4gZXNzZW50aWFsCi0gICAgICAgICAgICAgICAgcGx1cyBncmFwaGljcyBzdXBwb3J0KS4KLSAgICAgICAgICAgICAgICBGb3IgbGlzdHMgb2YgcmVxdWlyZWQgcGFja2FnZXMgZm9yIG90aGVyIHNjZW5hcmlvcywgc2VlIHRoZQotICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZXF1aXJlZC1wYWNrYWdlcy1mb3ItdGhlLWhvc3QtZGV2ZWxvcG1lbnQtc3lzdGVtJz5SZXF1aXJlZCBQYWNrYWdlcyBmb3IgdGhlIEhvc3QgRGV2ZWxvcG1lbnQgU3lzdGVtPC91bGluaz4iCi0gICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgotICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VWJ1bnR1IGFuZCBEZWJpYW48L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3RoZS1saW51eC1kaXN0cm8nPgorICAgICAgICAgICAgICAgIDx0aXRsZT5UaGUgTGludXggRGlzdHJpYnV0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB0ZWFtIHZlcmlmaWVzIGVhY2ggcmVsZWFzZSBhZ2FpbnN0IHJlY2VudAorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9ucyBvZiB0aGUgbW9zdCBwb3B1bGFyIExpbnV4IGRpc3RyaWJ1dGlvbnMgdGhhdAorICAgICAgICAgICAgICAgICAgICBwcm92aWRlIHN0YWJsZSByZWxlYXNlcy4KKyAgICAgICAgICAgICAgICAgICAgSW4gZ2VuZXJhbCwgaWYgeW91IGhhdmUgdGhlIGN1cnJlbnQgcmVsZWFzZSBtaW51cyBvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBkaXN0cmlidXRpb25zLCB5b3Ugc2hvdWxkIGhhdmUgbm8gcHJvYmxlbXMuCisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVWJ1bnR1CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmVkb3JhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlblNVU0UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDZW50T1MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWJpYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIEZvciBhIG1vcmUgZGV0YWlsZWQgbGlzdCBvZiBkaXN0cmlidXRpb25zIHRoYXQgc3VwcG9ydCB0aGUKKyAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjZGV0YWlsZWQtc3VwcG9ydGVkLWRpc3Ryb3MnPlN1cHBvcnRlZCBMaW51eCBEaXN0cmlidXRpb25zPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc2hvdWxkIGJlIGFibGUgdG8gcnVuIG9uIGFueQorICAgICAgICAgICAgICAgICAgICBtb2Rlcm4gZGlzdHJpYnV0aW9uIHRoYXQgaGFzIHRoZSBmb2xsb3dpbmcgdmVyc2lvbnMgZm9yCisgICAgICAgICAgICAgICAgICAgIEdpdCwgdGFyLCBhbmQgUHl0aG9uLgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdpdCAxLjguMy4xIG9yIGdyZWF0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXIgMS4yNyBvciBncmVhdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHl0aG9uIDMuNC4wIG9yIGdyZWF0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICBJZiB5b3VyIGJ1aWxkIGhvc3QgZG9lcyBub3QgbWVldCBhbnkgb2YgdGhlc2UgdGhyZWUgbGlzdGVkCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gcmVxdWlyZW1lbnRzLCB5b3UgY2FuIHRha2Ugc3RlcHMgdG8gcHJlcGFyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIHNvIHRoYXQgeW91IGNhbiBzdGlsbCB1c2UgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlcXVpcmVkLWdpdC10YXItYW5kLXB5dGhvbi12ZXJzaW9ucyc+UmVxdWlyZWQgR2l0LCB0YXIsIGFuZCBQeXRob24gVmVyc2lvbnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsIGZvciBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdwYWNrYWdlcyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPlRoZSBCdWlsZCBIb3N0IFBhY2thZ2VzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBSZXF1aXJlZCBidWlsZCBob3N0IHBhY2thZ2VzIHZhcnkgZGVwZW5kaW5nIG9uIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgbWFjaGluZSBhbmQgd2hhdCB5b3Ugd2FudCB0byBkbyB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gYnVpbGQgYW4gaW1hZ2UgdGhhdCBjYW4gcnVuCisgICAgICAgICAgICAgICAgICAgIG9uIFFFTVUgaW4gZ3JhcGhpY2FsIG1vZGUgKGEgbWluaW1hbCwgYmFzaWMgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZW1lbnQpLCB0aGVuIHRoZSBidWlsZCBob3N0IHBhY2thZ2UgcmVxdWlyZW1lbnRzCisgICAgICAgICAgICAgICAgICAgIGFyZSBkaWZmZXJlbnQgdGhhbiBpZiB5b3Ugd2FudCB0byBidWlsZCBhbiBpbWFnZSBvbiBhIGhlYWRsZXNzCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBvciBidWlsZCBvdXQgdGhlIFlvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbiBzZXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbGxlY3RpdmVseSwgdGhlIG51bWJlciBvZiByZXF1aXJlZCBwYWNrYWdlcyBpcyBsYXJnZQorICAgICAgICAgICAgICAgICAgICBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGNvdmVyIGFsbCBjYXNlcy4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiBnZW5lcmFsLCB5b3UgbmVlZCB0byBoYXZlIHJvb3QgYWNjZXNzIGFuZCB0aGVuIGluc3RhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZXF1aXJlZCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRodXMsIHRoZSBjb21tYW5kcyBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb24gbWF5IG9yIG1heQorICAgICAgICAgICAgICAgICAgICAgICAgbm90IHdvcmsgZGVwZW5kaW5nIG9uIHdoZXRoZXIgb3Igbm90IHlvdXIgTGludXgKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiBoYXMgPGZpbGVuYW1lPnN1ZG88L2ZpbGVuYW1lPiBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHNob3dzIHRoZSByZXF1aXJlZCBwYWNrYWdlcyBuZWVkZWQgdG8gYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgYW4gaW1hZ2UgdGhhdCBydW5zIG9uIFFFTVUgaW4gZ3JhcGhpY2FsIG1vZGUgKGUuZy4gZXNzZW50aWFsCisgICAgICAgICAgICAgICAgICAgIHBsdXMgZ3JhcGhpY3Mgc3VwcG9ydCkuCisgICAgICAgICAgICAgICAgICAgIEZvciBsaXN0cyBvZiByZXF1aXJlZCBwYWNrYWdlcyBmb3Igb3RoZXIgc2NlbmFyaW9zLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZXF1aXJlZC1wYWNrYWdlcy1mb3ItdGhlLWhvc3QtZGV2ZWxvcG1lbnQtc3lzdGVtJz5SZXF1aXJlZCBQYWNrYWdlcyBmb3IgdGhlIEhvc3QgRGV2ZWxvcG1lbnQgU3lzdGVtPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VWJ1bnR1IGFuZCBEZWJpYW48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgJCBzdWRvIGFwdC1nZXQgaW5zdGFsbCAmVUJVTlRVX0hPU1RfUEFDS0FHRVNfRVNTRU5USUFMOyBsaWJzZGwxLjItZGV2IHh0ZXJtCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5GZWRvcmE8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RmVkb3JhPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgICQgc3VkbyBkbmYgaW5zdGFsbCAmRkVET1JBX0hPU1RfUEFDS0FHRVNfRVNTRU5USUFMOyBTREwtZGV2ZWwgeHRlcm0KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk9wZW5TVVNFPC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk9wZW5TVVNFPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgICQgc3VkbyB6eXBwZXIgaW5zdGFsbCAmT1BFTlNVU0VfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUw7IGxpYlNETC1kZXZlbCB4dGVybQotICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2VudE9TPC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNlbnRPUzwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgogICAgICAkIHN1ZG8geXVtIGluc3RhbGwgJkNFTlRPU19IT1NUX1BBQ0tBR0VTX0VTU0VOVElBTDsgU0RMLWRldmVsIHh0ZXJtCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+Tm90ZXM8L3RpdGxlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhIFBhY2thZ2VzIGZvciBFbnRlcnByaXNlIExpbnV4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+ZXBlbC1yZWxlYXNlPC9maWxlbmFtZT4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBhIGNvbGxlY3Rpb24gb2YgcGFja2FnZXMgZnJvbSBGZWRvcmEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWx0IG9uIFJIRUwvQ2VudE9TIGZvciBlYXN5IGluc3RhbGxhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgcGFja2FnZXMgbm90IGluY2x1ZGVkIGluIGVudGVycHJpc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbnV4IGJ5IGRlZmF1bHQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBpbnN0YWxsIHRoZXNlIHBhY2thZ2VzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZWx5LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bWFrZWNhY2hlPC9maWxlbmFtZT4gY29tbWFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXMgYWRkaXRpb25hbCBNZXRhZGF0YSBmcm9tCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZXBlbC1yZWxlYXNlPC9maWxlbmFtZT4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+Tm90ZXM8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhIFBhY2thZ2VzIGZvciBFbnRlcnByaXNlIExpbnV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPmVwZWwtcmVsZWFzZTwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGEgY29sbGVjdGlvbiBvZiBwYWNrYWdlcyBmcm9tIEZlZG9yYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWx0IG9uIFJIRUwvQ2VudE9TIGZvciBlYXN5IGluc3RhbGxhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHBhY2thZ2VzIG5vdCBpbmNsdWRlZCBpbiBlbnRlcnByaXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGludXggYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBpbnN0YWxsIHRoZXNlIHBhY2thZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGVseS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1ha2VjYWNoZTwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lcyBhZGRpdGlvbmFsIE1ldGFkYXRhIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZXBlbC1yZWxlYXNlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBjb21wbGV0ZSB0aGUgc2V0dXAgaW5zdHJ1Y3Rpb25zIGZvciB5b3VyCisgICAgICAgICAgICAgICAgbWFjaGluZSwgeW91IG5lZWQgdG8gZ2V0IGEgY29weSBvZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkgb24geW91ciBidWlsZAorICAgICAgICAgICAgICAgIGhvc3QuCisgICAgICAgICAgICAgICAgQ29udGludWUgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVsZWFzZXMnPllvY3RvIFByb2plY3QgUmVsZWFzZTwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9zZWN0aW9uPgogCkBAIC0zNjUsMTEgKzQwMSwxMiBAQAogICAgICAgICAgICAgPHRpdGxlPllvY3RvIFByb2plY3QgUmVsZWFzZTwvdGl0bGU+CiAKICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSBsYXN0IHJlcXVpcmVtZW50IHlvdSBuZWVkIHRvIG1lZXQgYmVmb3JlIHVzaW5nIHRoZQotICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgaXMgZ2V0dGluZyBhIFlvY3RvIFByb2plY3QgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICBOb3cgdGhhdCB5b3VyIGJ1aWxkIGhvc3QgaGFzIHRoZSByaWdodCBwYWNrYWdlcyAobmF0aXZlCisgICAgICAgICAgICAgICAgTGludXggbWFjaGluZSkgb3IgeW91IGhhdmUgdGhlIFBva3kgY29udGFpbmVyIHNldCB1cAorICAgICAgICAgICAgICAgIChDUk9QUyksIHlvdSBuZWVkIHRvIGdldCBhIGNvcHkgb2YgdGhlIFlvY3RvIFByb2plY3QuCiAgICAgICAgICAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgZ2V0IHRoZSBsYXRlc3QgWW9jdG8gUHJvamVjdCByZWxlYXNlCiAgICAgICAgICAgICAgICAgYnkgc2V0dGluZyB1cCAoY2xvbmluZyBpbgotICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2dpdCc+R2l0PC91bGluaz4gdGVybXMpIGEKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNnaXQnPkdpdDwvdWxpbms+IHRlcm1zKSBhCiAgICAgICAgICAgICAgICAgbG9jYWwgY29weSBvZiB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSBvbgogICAgICAgICAgICAgICAgIHlvdXIgYnVpbGQgaG9zdCBhbmQgdGhlbiBjaGVja2luZyBvdXQgdGhlIGxhdGVzdCByZWxlYXNlLgogICAgICAgICAgICAgICAgIERvaW5nIHNvIGFsbG93cyB5b3UgdG8gZWFzaWx5IHVwZGF0ZSB0byBuZXdlciBZb2N0byBQcm9qZWN0CkBAIC0zNzcsOSArNDE0LDE1IEBACiAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIGFuIFVidW50dSBidWlsZCBob3N0IHRoYXQgY2xvbmVzIHRoZQotICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gcmVwb3NpdG9yeSBhbmQgdGhlbiBjaGVja3Mgb3V0IHRoZQotICAgICAgICAgICAgICAgIGxhdGVzdCBZb2N0byBQcm9qZWN0IFJlbGVhc2UgKGkuZS4gJkRJU1RSTzspOgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIGEgbmF0aXZlIExpbnV4IG1hY2hpbmUgdGhhdCBpcworICAgICAgICAgICAgICAgIHJ1bm5pbmcgVWJ1bnR1LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3VyIGJ1aWxkIGhvc3QgaXMgdXNpbmcgYSBQb2t5IGNvbnRhaW5lciwgeW91IGNhbgorICAgICAgICAgICAgICAgICAgICB1c2UgdGhlIHNhbWUgR2l0IGNvbW1hbmRzLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgY2xvbmVzIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSBhbmQgdGhlbiBjaGVja3Mgb3V0IHRoZSBsYXRlc3QgWW9jdG8gUHJvamVjdCBSZWxlYXNlCisgICAgICAgICAgICAgICAgYnkgdGFnIChpLmUuIDxmaWxlbmFtZT4mRElTVFJPX1JFTF9UQUc7PC9maWxlbmFtZT4pOgogICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reQogICAgICBDbG9uaW5nIGludG8gJ3Bva3knLi4uCkBAIC0zODksMTggKzQzMiwzNSBAQAogICAgICBSZWNlaXZpbmcgb2JqZWN0czogMTAwJSAoMzYxNzgyLzM2MTc4MiksIDEzMS45NCBNaUIgfCA2Ljg4IE1pQi9zLCBkb25lLgogICAgICBSZXNvbHZpbmcgZGVsdGFzOiAxMDAlICgyNjg2MTkvMjY4NjE5KSwgZG9uZS4KICAgICAgQ2hlY2tpbmcgY29ubmVjdGl2aXR5Li4uIGRvbmUuCi0gICAgICQgZ2l0IGNoZWNrb3V0ICZESVNUUk9fTkFNRV9OT19DQVA7CisgICAgICQgZ2l0IGNoZWNrb3V0IHRhZ3MvJkRJU1RST19SRUxfVEFHOyAtYiBwb2t5XyZESVNUUk87CiAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBnZXQgdGhlIFlvY3RvIFByb2plY3QgRmlsZXMgYnkgZG93bmxvYWRpbmcKLSAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2VzIGZyb20gdGhlCi0gICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iJllPQ1RPX0hPTUVfVVJMOyI+WW9jdG8gUHJvamVjdCB3ZWJzaXRlPC91bGluaz4uCiAgICAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGdldHRpbmcgc2V0IHVwIHdpdGggdGhlIFlvY3RvIFByb2plY3QKLSAgICAgICAgICAgICAgICByZWxlYXNlLCBzZWUgdGhlCi0gICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2xvY2FsLXlwLXJlbGVhc2UnPllvY3RvIFByb2plY3QgUmVsZWFzZTwvdWxpbms+IgotICAgICAgICAgICAgICAgIGl0ZW0gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBHaXQgPGZpbGVuYW1lPmNoZWNrb3V0PC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgIGNyZWF0ZXMgYSBsb2NhbCBicmFuY2ggbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reV8mRElTVFJPOzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBmaWxlcyBhdmFpbGFibGUgdG8geW91IGluIHRoYXQgYnJhbmNoIGV4YWN0bHkgbWF0Y2ggdGhlCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSdzIGZpbGVzIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4mRElTVFJPX05BTUVfTk9fQ0FQOzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgYnJhbmNoIGF0IHRoZSB0aW1lIG9mIHRoZSBZb2N0byBQcm9qZWN0ICZESVNUUk87CisgICAgICAgICAgICAgICAgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgUmF0aGVyIHRoYW4gY2hlY2tpbmcgb3V0IHRoZSBlbnRpcmUgZGV2ZWxvcG1lbnQgYnJhbmNoCisgICAgICAgICAgICAgICAgICAgIG9mIGEgcmVsZWFzZSAoaS5lLiB0aGUgdGlwKSwgd2hpY2ggY291bGQgYmUgY29udGludW91c2x5CisgICAgICAgICAgICAgICAgICAgIGNoYW5naW5nIHdoaWxlIHlvdSBhcmUgZG9pbmcgeW91ciBkZXZlbG9wbWVudCwgeW91IHdvdWxkCisgICAgICAgICAgICAgICAgICAgIGNoZWNrIG91dCBhIGJyYW5jaCBiYXNlZCBvbiBhIHJlbGVhc2UgdGFnIGFzIHNob3duIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSBwcmV2aW91cyBleGFtcGxlLgorICAgICAgICAgICAgICAgICAgICBEb2luZyBzbyBwcm92aWRlcyB5b3Ugd2l0aCBhbiB1bmNoYW5naW5nLCBzdGFibGUgc2V0IG9mCisgICAgICAgICAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIG1vcmUgb3B0aW9ucyBhbmQgaW5mb3JtYXRpb24gYWJvdXQgYWNjZXNzaW5nIFlvY3RvCisgICAgICAgICAgICAgICAgUHJvamVjdCByZWxhdGVkIHJlcG9zaXRvcmllcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN3b3JraW5nLXdpdGgteW9jdG8tcHJvamVjdC1zb3VyY2UtZmlsZXMnPldvcmtpbmcgV2l0aCBZb2N0byBQcm9qZWN0IFNvdXJjZSBGaWxlczwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L3NlY3Rpb24+CiAgICAgPC9zZWN0aW9uPgpAQCAtNDA5LDIwICs0NjksMjIgQEAKICAgICAgICAgPHRpdGxlPkJ1aWxkaW5nIEltYWdlczwvdGl0bGU+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBOb3cgdGhhdCB5b3UgaGF2ZSB5b3VyIHN5c3RlbSByZXF1aXJlbWVudHMgaW4gb3JkZXIsIHlvdSBjYW4gZ2l2ZQotICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBhIHRyeS4KLSAgICAgICAgICAgIFlvdSBjYW4gdHJ5IG91dCBZb2N0byBQcm9qZWN0IHVzaW5nIGVpdGhlciB0aGUgY29tbWFuZC1saW5lCi0gICAgICAgICAgICBpbnRlcmZhY2Ugb3IgdXNpbmcgVG9hc3Rlciwgd2hpY2ggdXNlcyBhIGdyYXBoaWNhbCB1c2VyCi0gICAgICAgICAgICBpbnRlcmZhY2UuCi0gICAgICAgICAgICBJZiB5b3Ugd2FudCB0byB0cnkgb3V0IHRoZSBZb2N0byBQcm9qZWN0IHVzaW5nIGEgR1VJLCBzZWUgdGhlCi0gICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19UT0FTVF9VUkw7Jz5Ub2FzdGVyIFVzZXIgTWFudWFsPC91bGluaz4KLSAgICAgICAgICAgIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaW5zdGFsbCBhbmQgc2V0IHVwIFRvYXN0ZXIuCisgICAgICAgICAgICBZb3UgYXJlIG5vdyByZWFkeSB0byBnaXZlIHRoZSBZb2N0byBQcm9qZWN0IGEgdHJ5LgorICAgICAgICAgICAgRm9yIHRoaXMgZXhhbXBsZSwgeW91IHdpbGwgYmUgdXNpbmcgdGhlIGNvbW1hbmQgbGluZSB0byBidWlsZAorICAgICAgICAgICAgeW91ciBpbWFnZXMuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBBIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSB0byB0aGUgWW9jdG8gUHJvamVjdCBpcyBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICB0aHJvdWdoCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdG9hc3Rlci10ZXJtJz5Ub2FzdGVyPC91bGluaz4uCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1RPQVNUX1VSTDsnPlRvYXN0ZXIgVXNlciBNYW51YWw8L3VsaW5rPgorICAgICAgICAgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUbyB1c2UgdGhlIFlvY3RvIFByb2plY3QgdGhyb3VnaCB0aGUgY29tbWFuZC1saW5lIGludGVyZmFjZSwKLSAgICAgICAgICAgIGZpbmlzaCB0aGlzIHF1aWNrIHN0YXJ0LCB3aGljaCBwcmVzZW50cyBzdGVwcyB0aGF0IGxldCB5b3UKLSAgICAgICAgICAgIGRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgcXVpY2sgc3RhcnQgc3RlcHMgeW91IHRocm91Z2ggdGhlCisgICAgICAgICAgICBmb2xsb3dpbmc6CiAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgogICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KICAgICAgICAgICAgICAgICAgICAgQnVpbGQgYSA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+IHJlZmVyZW5jZSBpbWFnZQpAQCAtNDMzLDcgKzQ5NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZSBhIHNlY29uZCBpbWFnZSB0aGF0IHlvdSBjYW4gbG9hZCBvbnRvIGJvb3RhYmxlCiAgICAgICAgICAgICAgICAgICAgIG1lZGlhIGFuZCBhY3R1YWxseSBib290IHRhcmdldCBoYXJkd2FyZS4KICAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIHVzZXMgdGhlIE1pbm5vd0JvYXJkCi0gICAgICAgICAgICAgICAgICAgIE1BWC1jb21wYXRpYmxlIGJvYXJkcy4KKyAgICAgICAgICAgICAgICAgICAgVHVyYm90LWNvbXBhdGlibGUgYm9hcmRzLgogICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgICAgICAgPG5vdGU+CkBAIC00NTIsMzcgKzUxNCwzOSBAQAogICAgICAgICAgICAgICAgIFVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHRvIGJ1aWxkIHlvdXIgaW1hZ2UuCiAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY3JlYXRlcyBhbiBlbnRpcmUgTGludXgKICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24sIGluY2x1ZGluZyB0aGUgdG9vbGNoYWluLCBmcm9tIHNvdXJjZS4KLSAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+Tm90ZSBhYm91dCBOZXR3b3JrIFByb3hpZXM8L3RpdGxlPgotICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBidWlsZCBwcm9jZXNzIHNlYXJjaGVzIGZvciBzb3VyY2UgY29kZQotICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgYSBwcmUtZGV0ZXJtaW5lZCBvcmRlciB0aHJvdWdoIGEgc2V0IG9mCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHdvcmtpbmcgYmVoaW5kIGEgZmlyZXdhbGwgYW5kIHlvdXIgYnVpbGQKLSAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QgaXMgbm90IHNldCB1cCBmb3IgcHJveGllcywgeW91IGNvdWxkIGVuY291bnRlcgotICAgICAgICAgICAgICAgICAgICAgICAgcHJvYmxlbXMgd2l0aCB0aGUgYnVpbGQgcHJvY2VzcyB3aGVuIGZldGNoaW5nIHNvdXJjZQotICAgICAgICAgICAgICAgICAgICAgICAgY29kZSAoZS5nLiBmZXRjaGVyIGZhaWx1cmVzIG9yIEdpdCBmYWlsdXJlcykuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KLQotICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qga25vdyB5b3VyIHByb3h5IHNldHRpbmdzLCBjb25zdWx0IHlvdXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUgcmVzb3VyY2VzIGFuZCBnZXQgdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICBBIGdvb2Qgc3RhcnRpbmcgcG9pbnQgY291bGQgYWxzbyBiZSB0byBjaGVjayB5b3VyIHdlYgotICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3NlciBzZXR0aW5ncy4KLSAgICAgICAgICAgICAgICAgICAgICAgIEZpbmFsbHksIHlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBiZWhpbmQgYSBmaXJld2FsbCBpbiB0aGUgWW9jdG8gUHJvamVjdAotICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlIE1hbnVhbAotICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjaG93LWRvZXMtdGhlLXlvY3RvLXByb2plY3Qtb2J0YWluLXNvdXJjZS1jb2RlLWFuZC13aWxsLWl0LXdvcmstYmVoaW5kLW15LWZpcmV3YWxsLW9yLXByb3h5LXNlcnZlcic+RkFRPC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBvbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPSdodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL1dvcmtpbmdfQmVoaW5kX2FfTmV0d29ya19Qcm94eSc+V29ya2luZyBCZWhpbmQgYSBOZXR3b3JrIFByb3h5PC91bGluaz4iCi0gICAgICAgICAgICAgICAgICAgICAgICB3aWtpIHBhZ2UuCi0gICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+Tm90ZXMgYWJvdXQgTmV0d29yayBQcm94aWVzPC90aXRsZT4KKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgYnVpbGQgcHJvY2VzcyBzZWFyY2hlcyBmb3Igc291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSB1c2luZyBhIHByZS1kZXRlcm1pbmVkIG9yZGVyIHRocm91Z2ggYSBzZXQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB3b3JraW5nIGJlaGluZCBhIGZpcmV3YWxsIGFuZCB5b3VyIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCBpcyBub3Qgc2V0IHVwIGZvciBwcm94aWVzLCB5b3UgY291bGQgZW5jb3VudGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvYmxlbXMgd2l0aCB0aGUgYnVpbGQgcHJvY2VzcyB3aGVuIGZldGNoaW5nIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgKGUuZy4gZmV0Y2hlciBmYWlsdXJlcyBvciBHaXQgZmFpbHVyZXMpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qga25vdyB5b3VyIHByb3h5IHNldHRpbmdzLCBjb25zdWx0IHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBuZXR3b3JrIGluZnJhc3RydWN0dXJlIHJlc291cmNlcyBhbmQgZ2V0IHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIGdvb2Qgc3RhcnRpbmcgcG9pbnQgY291bGQgYWxzbyBiZSB0byBjaGVjayB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViIGJyb3dzZXIgc2V0dGluZ3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmluYWxseSwgeW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBiZWhpbmQgYSBmaXJld2FsbCBpbiB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZmVyZW5jZSBNYW51YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNob3ctZG9lcy10aGUteW9jdG8tcHJvamVjdC1vYnRhaW4tc291cmNlLWNvZGUtYW5kLXdpbGwtaXQtd29yay1iZWhpbmQtbXktZmlyZXdhbGwtb3ItcHJveHktc2VydmVyJz5GQVE8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9Xb3JraW5nX0JlaGluZF9hX05ldHdvcmtfUHJveHknPldvcmtpbmcgQmVoaW5kIGEgTmV0d29yayBQcm94eTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpa2kgcGFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICAgICAgICAgICAgPC9ub3RlPgogICAgICAgICAgICAgPC9wYXJhPgogCiAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QmUgU3VyZSBZb3VyIEJ1aWxkIEhvc3QgaXMgU2V0IFVwOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5CZSBTdXJlIFlvdXIgQnVpbGQgSG9zdCBpcyBTZXQgVXA6PC9lbXBoYXNpcz4KICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzdGVwcyB0byBidWlsZCBhbiBpbWFnZSBpbiB0aGlzIHNlY3Rpb24gZGVwZW5kIG9uCiAgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIGJ1aWxkIGhvc3QgYmVpbmcgcHJvcGVybHkgc2V0IHVwLgogICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB5b3UgaGF2ZSB3b3JrZWQgdGhyb3VnaCB0aGUgcmVxdWlyZW1lbnRzCkBAIC00OTAsOSArNTU0LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0neXAtcmVzb3VyY2VzJz5TZXR0aW5nIFVwIHRvIFVzZSB0aGUgWW9jdG8gUHJvamVjdDwvbGluaz4iCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2hlY2sgT3V0IFlvdXIgQnJhbmNoOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5DaGVjayBPdXQgWW91ciBCcmFuY2g6PC9lbXBoYXNpcz4KICAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgeW91IGFyZSBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CiAgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+KSBhbmQgdGhlbiBjaGVjayBvdXQKICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBicmFuY2ggYXNzb2NpYXRlZCB3aXRoIHRoZSBsYXRlc3QgWW9jdG8gUHJvamVjdAogICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZToKQEAgLTUxMCw3ICs1NzUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoIGVuc3VyZXMgeW91IGFyZSB1c2luZyB0aGUgbGF0ZXN0IGZpbGVzIGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCByZWxlYXNlLgogICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW5pdGlhbGl6ZSB0aGUgQnVpbGQgRW52aXJvbm1lbnQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkluaXRpYWxpemUgdGhlIEJ1aWxkIEVudmlyb25tZW50OjwvZW1waGFzaXM+CiAgICAgICAgICAgICAgICAgICAgICAgICBSdW4gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCB0byBkZWZpbmUgdGhlIE9wZW5FbWJlZGRlZApAQCAtNTE5LDIzICs1ODUsMTcgQEAKICAgICAgJCBzb3VyY2UgJk9FX0lOSVRfRklMRTsKICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICAgICAgICAgIEFtb25nIG90aGVyIHRoaW5ncywgdGhlIHNjcmlwdCBjcmVhdGVzIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4sCiAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyA8ZmlsZW5hbWU+YnVpbGQ8L2ZpbGVuYW1lPiBpbiB0aGlzIGNhc2UKICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBpcyBsb2NhdGVkIGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgogICAgICAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgdGhlIHNjcmlwdCBydW5zLCB5b3VyIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byB0aGUgQnVpbGQgRGlyZWN0b3J5LgogICAgICAgICAgICAgICAgICAgICAgICAgTGF0ZXIsIHdoZW4gdGhlIGJ1aWxkIGNvbXBsZXRlcywgdGhlIEJ1aWxkIERpcmVjdG9yeQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgYWxsIHRoZSBmaWxlcyBjcmVhdGVkIGR1cmluZyB0aGUgYnVpbGQuCi0gICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gcnVubmluZyBhIG1lbW9yeS1yZXNpZGVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3VzaW5ncG9reS1jb21wb25lbnRzLWJpdGJha2UnPkJpdEJha2U8L3VsaW5rPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR1cCBzY3JpcHQuCi0gICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FeGFtaW5lIFlvdXIgTG9jYWwgQ29uZmlndXJhdGlvbiBGaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5FeGFtaW5lIFlvdXIgTG9jYWwgQ29uZmlndXJhdGlvbiBGaWxlOjwvZW1waGFzaXM+CiAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBzZXQgdXAgdGhlIGJ1aWxkIGVudmlyb25tZW50LCBhIGxvY2FsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgbmFtZWQKICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gYmVjb21lcyBhdmFpbGFibGUgaW4KQEAgLTU4OSw3ICs2NDksOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3RhcnQgdGhlIEJ1aWxkOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5TdGFydCB0aGUgQnVpbGQ6PC9lbXBoYXNpcz4KICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRpbnVlIHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGJ1aWxkIGFuIE9TIGltYWdlCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHRhcmdldCwgd2hpY2ggaXMKICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPiBpbiB0aGlzIGV4YW1wbGU6CkBAIC02NDcsNyArNzA4LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtaW1hZ2VzJz5JbWFnZXM8L3VsaW5rPiIKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXB0ZXIgaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNpbXVsYXRlIFlvdXIgSW1hZ2UgVXNpbmcgUUVNVTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+U2ltdWxhdGUgWW91ciBJbWFnZSBVc2luZyBRRU1VOjwvZW1waGFzaXM+CiAgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHRoaXMgcGFydGljdWxhciBpbWFnZSBpcyBidWlsdCwgeW91IGNhbiBzdGFydCBRRU1VCiAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgcnVuIHRoZSBpbWFnZToKICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KQEAgLTY1NSw5ICs3MTcsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGxlYXJuIG1vcmUgYWJvdXQgcnVubmluZyBRRU1VLCBzZWUgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0iJllPQ1RPX0RPQ1NfREVWX1VSTDsjZGV2LW1hbnVhbC1xZW11Ij5Vc2luZyB0aGUgUXVpY2sgRU1VbGF0b3IgKFFFTVUpPC91bGluaz4iCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGFwdGVyIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXB0ZXIgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgVGFza3MgTWFudWFsLgogICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXhpdCBRRU1VOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5FeGl0IFFFTVU6PC9lbXBoYXNpcz4KICAgICAgICAgICAgICAgICAgICAgICAgIEV4aXQgUUVNVSBieSBlaXRoZXIgY2xpY2tpbmcgb24gdGhlIHNodXRkb3duIGljb24gb3IgYnkKICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGluZyA8ZmlsZW5hbWU+Q3RybC1DPC9maWxlbmFtZT4gaW4gdGhlIFFFTVUKICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zY3JpcHQgd2luZG93IGZyb20gd2hpY2ggeW91IGV2b2tlZCBRRU1VLgpAQCAtNjcyLDEzICs3MzUsMTMgQEAKICAgICAgICAgICAgIDxwYXJhIGlkPSdxcy1taW5ub3dib2FyZC1leGFtcGxlJz4KICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN0ZXBzIHNob3cgaG93IGVhc3kgaXQgaXMgdG8gc2V0IHVwIHRvIGJ1aWxkIGFuCiAgICAgICAgICAgICAgICAgaW1hZ2UgZm9yIGEgbmV3IG1hY2hpbmUuCi0gICAgICAgICAgICAgICAgVGhlc2Ugc3RlcHMgYnVpbGQgYW4gaW1hZ2UgZm9yIHRoZSBNaW5ub3dCb2FyZCBNQVgsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgVGhlc2Ugc3RlcHMgYnVpbGQgYW4gaW1hZ2UgZm9yIHRoZSBNaW5ub3dCb2FyZCBUdXJib3QsIHdoaWNoIGlzCiAgICAgICAgICAgICAgICAgc3VwcG9ydGVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0IGFuZCB0aGUKICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+IDxmaWxlbmFtZT5pbnRlbC1jb3JlaTctNjQ8L2ZpbGVuYW1lPgogICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+aW50ZWwtY29yZTItMzI8L2ZpbGVuYW1lPiBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzCiAgICAgICAgICAgICAgICAgKEJTUHMpLgogICAgICAgICAgICAgICAgIDxub3RlPgotICAgICAgICAgICAgICAgICAgICBUaGUgTWlubm93Qm9hcmQgTUFYIHNoaXBzIHdpdGggNjQtYml0IGZpcm13YXJlLgorICAgICAgICAgICAgICAgICAgICBUaGUgTWlubm93Qm9hcmQgVHVyYm90IHNoaXBzIHdpdGggNjQtYml0IGZpcm13YXJlLgogICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIGJvYXJkIGluIDMyLWJpdCBtb2RlLCB5b3UgbXVzdAogICAgICAgICAgICAgICAgICAgICBkb3dubG9hZCB0aGUKICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2Zpcm13YXJlLmludGVsLmNvbS9wcm9qZWN0cy9taW5ub3dib2FyZC1tYXgnPjMyLWJpdCBmaXJtd2FyZTwvdWxpbms+LgpAQCAtNjg3LDEzICs3NTAsMTUgQEAKIAogICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSBhIExvY2FsIENvcHkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5DcmVhdGUgYSBMb2NhbCBDb3B5IG9mIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBSZXBvc2l0b3J5OjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICBCdWlsZGluZyBhbiBpbWFnZSBmb3IgdGhlIE1pbm5vd0JvYXJkIE1BWCByZXF1aXJlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkaW5nIGFuIGltYWdlIGZvciB0aGUgTWlubm93Qm9hcmQgVHVyYm90IHJlcXVpcmVzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gbGF5ZXIuCiAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5naXQgY2xvbmU8L2ZpbGVuYW1lPiBjb21tYW5kIHRvIGNyZWF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgYSBsb2NhbCBjb3B5IG9mIHRoZSByZXBvc2l0b3J5IGluc2lkZSB5b3VyCi0gICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4sCiAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IGluIHRoaXMgZXhhbXBsZToKICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KICAgICAgJCBjZCAkSE9NRS9wb2t5CkBAIC03MTMsMTcgKzc3OCwzMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc3VyZSB0aGF0IGJvdGggcmVwb3NpdG9yaWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4pIGFyZSB1c2luZyB0aGUgc2FtZSByZWxlYXNlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgeW91IHVzZWQgdGhlIDxmaWxlbmFtZT4mRElTVFJPX1JFTF9UQUc7PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhZyB3aGVuIHlvdSBjaGVja2VkIG91dCB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSBieSB0YWcsIHlvdSBzaG91bGQgdXNlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhZyB0aGF0IGNvcnJlc3BvbmRzIHdpdGggdGhlIHJlbGVhc2UgeW91IHVzZWQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+LgogICAgICAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgbmVlZCB0byBjaGVja291dCBvdXQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAiPGZpbGVuYW1lPiZESVNUUk9fTkFNRV9OT19DQVA7PC9maWxlbmFtZT4iIHJlbGVhc2UgYWZ0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsb25pbmcgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICI8ZmlsZW5hbWU+Jk1FVEFJTlRFTFZFUlNJT047LSZESVNUUk9fTkFNRV9OT19DQVA7LSZZT0NUT19ET0NfVkVSU0lPTjs8L2ZpbGVuYW1lPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaCBhZnRlciBjbG9uaW5nIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT46CiAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CiAgICAgICQgY2QgJEhPTUUvcG9reS9tZXRhLWludGVsCi0gICAgICQgZ2l0IGNoZWNrb3V0ICZESVNUUk9fTkFNRV9OT19DQVA7Ci0gICAgIEJyYW5jaCAmRElTVFJPX05BTUVfTk9fQ0FQOyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAmRElTVFJPX05BTUVfTk9fQ0FQOyBmcm9tIG9yaWdpbi4KLSAgICAgU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICcmRElTVFJPX05BTUVfTk9fQ0FQOycKKyAgICAgJCBnaXQgY2hlY2tvdXQgdGFncy8mTUVUQUlOVEVMVkVSU0lPTjstJkRJU1RST19OQU1FX05PX0NBUDstJllPQ1RPX0RPQ19WRVJTSU9OOyAtYiBtZXRhLWludGVsLSZESVNUUk9fTkFNRV9OT19DQVA7LSZZT0NUT19ET0NfVkVSU0lPTjsKKyAgICAgU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICdtZXRhLWludGVsLSZESVNUUk9fTkFNRV9OT19DQVA7LSZZT0NUT19ET0NfVkVSU0lPTjsnCiAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcHJldmlvdXMgR2l0IDxmaWxlbmFtZT5jaGVja291dDwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZXMgYSBsb2NhbCBicmFuY2ggbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsLSZESVNUUk9fTkFNRV9OT19DQVA7LSZZT0NUT19ET0NfVkVSU0lPTjs8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBoYXZlIHRoZSBvcHRpb24gdG8gbmFtZSB5b3VyIGxvY2FsIGJyYW5jaCB3aGF0ZXZlcgorICAgICAgICAgICAgICAgICAgICAgICAgeW91IHdhbnQgYnkgcHJvdmlkaW5nIGFueSBuYW1lIHlvdSBsaWtlIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgIm1ldGEtaW50ZWwtJkRJU1RST19OQU1FX05PX0NBUDstJllPQ1RPX0RPQ19WRVJTSU9OOyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBhYm92ZSBleGFtcGxlLgogICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q29uZmlndXJlIHRoZSBCdWlsZDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q29uZmlndXJlIHRoZSBCdWlsZDo8L2VtcGhhc2lzPgogICAgICAgICAgICAgICAgICAgICAgICAgVG8gY29uZmlndXJlIHRoZSBidWlsZCwgeW91IGVkaXQgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlcywgYm90aCBvZiB3aGljaCBhcmUKQEAgLTc2MCwxMyArODM4LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCBhbiBJbWFnZSBmb3IgTWlubm93Qm9hcmQgTUFYOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5CdWlsZCBhbiBJbWFnZSBmb3IgTWlubm93Qm9hcmQKKyAgICAgICAgICAgICAgICAgICAgICAgIFR1cmJvdDo8L2VtcGhhc2lzPgogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHR5cGUgb2YgaW1hZ2UgeW91IGJ1aWxkIGRlcGVuZHMgb24geW91ciBnb2Fscy4KICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgcHJldmlvdXMgYnVpbGQgY3JlYXRlZCBhCiAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4gaW1hZ2UsIHdoaWNoIGlzIGFuCiAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSB3aXRoIFNhdG8gc3VwcG9ydC4KICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIHBvc3NpYmxlIHRvIGJ1aWxkIG1hbnkgaW1hZ2UgdHlwZXMgZm9yIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgTWlubm93Qm9hcmQgTUFYLgorICAgICAgICAgICAgICAgICAgICAgICAgTWlubm93Qm9hcmQgVHVyYm90LgogICAgICAgICAgICAgICAgICAgICAgICAgU29tZSBwb3NzaWJpbGl0aWVzIGFyZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1iYXNlPC9maWxlbmFtZT4sCiAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBhIGNvbnNvbGUtb25seSBpbWFnZS4KICAgICAgICAgICAgICAgICAgICAgICAgIEFub3RoZXIgY2hvaWNlIGNvdWxkIGJlIGEKQEAgLTgyNiw3ICs5MDYsOCBAQAogICAgICB0bXAvZGVwbG95L2ltYWdlcy9pbnRlbC1jb3JlaTctNjQvY29yZS1pbWFnZS1iYXNlLWludGVsLWNvcmVpNy02NC53aWMKICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPldyaXRlIHRoZSBJbWFnZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+V3JpdGUgdGhlIEltYWdlOjwvZW1waGFzaXM+CiAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHdyaXRlIHRoZSBpbWFnZSBqdXN0IGJ1aWx0IHRvIGEgYm9vdGFibGUgbWVkaWEKICAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIGEgVVNCIGtleSwgU0FUQSBkcml2ZSwgU0QgY2FyZCwgZXRjLikgdXNpbmcgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGQ8L2ZpbGVuYW1lPiB1dGlsaXR5OgpAQCAtODQwLDkgKzkyMSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9kZXYvbW1jYmxrMDwvZmlsZW5hbWU+LCB3aGljaCBpcyBtb3N0IGxpa2VseSBhbgogICAgICAgICAgICAgICAgICAgICAgICAgU0QgY2FyZCkuCiAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Cb290IHRoZSBIYXJkd2FyZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Qm9vdCB0aGUgSGFyZHdhcmU6PC9lbXBoYXNpcz4KICAgICAgICAgICAgICAgICAgICAgICAgIFdpdGggdGhlIGJvb3QgZGV2aWNlIHByb3Zpc2lvbmVkLCB5b3UgY2FuIGluc2VydCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhIGludG8gdGhlIE1pbm5vd0JvYXJkIE1BWCBhbmQgYm9vdCB0aGUgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYSBpbnRvIHRoZSBNaW5ub3dCb2FyZCBUdXJib3QgYW5kIGJvb3QgdGhlIGhhcmR3YXJlLgogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJvYXJkIHNob3VsZCBhdXRvbWF0aWNhbGx5IGRldGVjdCB0aGUgbWVkaWEgYW5kIGJvb3QgdG8KICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBib290bG9hZGVyIGFuZCBzdWJzZXF1ZW50bHkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uCiAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CkBAIC04ODAsNjYgKzk2Miw3NiBAQAogICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHdoYXQgeW91IHByaW1hcnkgaW50ZXJlc3RzIGFyZSB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LAogICAgICAgICAgICAgeW91IGNvdWxkIGNvbnNpZGVyIGFueSBvZiB0aGUgZm9sbG93aW5nOgogICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlZpc2l0IHRoZSBZb2N0byBQcm9qZWN0IFdlYiBTaXRlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+VmlzaXQgdGhlIFlvY3RvIFByb2plY3QgV2ViIFNpdGU6PC9lbXBoYXNpcz4KICAgICAgICAgICAgICAgICAgICAgVGhlIG9mZmljaWFsCiAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsnPllvY3RvIFByb2plY3Q8L3VsaW5rPgogICAgICAgICAgICAgICAgICAgICB3ZWIgc2l0ZSBjb250YWlucyBpbmZvcm1hdGlvbiBvbiB0aGUgZW50aXJlIHByb2plY3QuCiAgICAgICAgICAgICAgICAgICAgIFZpc2l0aW5nIHRoaXMgc2l0ZSBpcyBhIGdvb2Qgd2F5IHRvIGZhbWlsaWFyaXplIHlvdXJzZWxmCiAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIG92ZXJhbGwgcHJvamVjdC4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Mb29rIFRocm91Z2ggdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsOjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIFRoZQotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNkZXYtbWFudWFsLWludHJvJz5Zb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbDwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgIGlzIGEgZ3JlYXQgcGxhY2UgdG8gZ2V0IGEgZmVlbCBmb3IgaG93IHRvIHVzZSB0aGUgWW9jdG8KLSAgICAgICAgICAgICAgICAgICAgUHJvamVjdC4KLSAgICAgICAgICAgICAgICAgICAgVGhlIG1hbnVhbCBjb250YWlucyBjb25jZXB0dWFsIGFuZCBwcm9jZWR1cmFsIGluZm9ybWF0aW9uCi0gICAgICAgICAgICAgICAgICAgIHRoYXQgY292ZXJzCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2Rldi1tYW51YWwtbW9kZWwnPmNvbW1vbiBkZXZlbG9wbWVudCBtb2RlbHM8L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICBhbmQgaW50cm9kdWNlcwotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNkZXYtbWFudWFsLW5ld2JpZSc+dGhlIFlvY3RvIFByb2plY3Qgb3BlbiBzb3VyY2UgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQ8L3VsaW5rPi4KLSAgICAgICAgICAgICAgICAgICAgVGhlIG1hbnVhbCBhbHNvIGNvbnRhaW5zIHNldmVyYWwgdGFyZ2V0ZWQgc2VjdGlvbnMgdGhhdAotICAgICAgICAgICAgICAgICAgICBjb3ZlciBzcGVjaWZpYwotICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNleHRlbmRwb2t5Jz5jb21tb24gdGFza3M8L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICBzdWNoIGFzIHVuZGVyc3RhbmRpbmcgYW5kIGNyZWF0aW5nIGxheWVycywgY3VzdG9taXppbmcKLSAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLCB3cml0aW5nIG5ldyByZWNpcGVzLCB3b3JraW5nIHdpdGggbGlicmFyaWVzLCBhbmQKLSAgICAgICAgICAgICAgICAgICAgY29uZmlndXJpbmcgYW5kIHBhdGNoaW5nIHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+TG9vayBUaHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNkZXYtbWFudWFsLWludHJvJz5Zb2N0byBQcm9qZWN0IERldmVsb3BtZW50IFRhc2tzIE1hbnVhbDwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgbWFudWFsIGNvbnRhaW5zIHByb2NlZHVyYWwgaW5mb3JtYXRpb24gZ3JvdXBlZCB0bworICAgICAgICAgICAgICAgICAgICBoZWxwIHlvdSBnZXQgc2V0IHVwLCB3b3JrIHdpdGggbGF5ZXJzLCBjdXN0b21pemUgaW1hZ2VzLAorICAgICAgICAgICAgICAgICAgICB3cml0ZSBuZXcgcmVjaXBlcywgd29yayB3aXRoIGxpYnJhcmllcywgYW5kIHVzZSBRRU1VLgorICAgICAgICAgICAgICAgICAgICBUaGUgaW5mb3JtYXRpb24gaXMgdGFzay1iYXNlZCBhbmQgc3BhbnMgdGhlIGJyZWFkdGggb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QuCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TG9vayBUaHJvdWdoIHRoZSBZb2N0byBQcm9qZWN0IFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoU0RLKSBEZXZlbG9wZXIncyBHdWlkZTo8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICBUaGUKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfU0RLX1VSTDsjc2RrLWludHJvJz5Zb2N0byBQcm9qZWN0IFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoU0RLKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+Ci0gICAgICAgICAgICAgICAgICAgIGRlc2NyaWJlcyBob3cgdG8gdXNlIGJvdGggdGhlCisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+TG9vayBUaHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyc+WW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBhbmQgdGhlIEV4dGVuc2libGUgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChlU0RLKTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIG1hbnVhbDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIG1hbnVhbCBkZXNjcmliZXMgaG93IHRvIHVzZSBib3RoIHRoZQogICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyNzZGstdXNpbmctdGhlLXN0YW5kYXJkLXNkayc+c3RhbmRhcmQgU0RLPC91bGluaz4KICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZQogICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19TREtfVVJMOyNzZGstZXh0ZW5zaWJsZSc+ZXh0ZW5zaWJsZSBTREs8L3VsaW5rPiwKICAgICAgICAgICAgICAgICAgICAgd2hpY2ggYXJlIHVzZWQgcHJpbWFyaWx5IGZvciBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudC4KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBtYW51YWwgYWxzbyBwcm92aWRlcyBhbiBleGFtcGxlIHdvcmtmbG93IHRoYXQgdXNlcwotICAgICAgICAgICAgICAgICAgICB0aGUgcG9wdWxhciA8dHJhZGVtYXJrIGNsYXNzPSd0cmFkZSc+RWNsaXBzZTwvdHJhZGVtYXJrPgotICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBtYW51YWwgYWxzbyBwcm92aWRlcyBleGFtcGxlIHdvcmtmbG93cworICAgICAgICAgICAgICAgICAgICB0aGF0IHVzZSB0aGUgcG9wdWxhciA8dHJhZGVtYXJrIGNsYXNzPSd0cmFkZSc+RWNsaXBzZTwvdHJhZGVtYXJrPgorICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBhbmQgdGhhdCB1c2UgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPi4KICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQogICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfU0RLX1VSTDsjd29ya2Zsb3ctdXNpbmctZWNsaXBzZSc+V29ya2Zsb3cgdXNpbmcgRWNsaXBzZeKEojwvdWxpbms+IgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1NES19VUkw7I3VzaW5nLWRldnRvb2wtaW4teW91ci1zZGstd29ya2Zsb3cnPlVzaW5nIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gaW4geW91ciBTREsgV29ya2Zsb3c8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TGVhcm4gQWJvdXQgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcyk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5MZWFybiBBYm91dCBLZXJuZWwgRGV2ZWxvcG1lbnQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gc2VlIGhvdyB0byB3b3JrIHdpdGggdGhlIGtlcm5lbCBhbmQKKyAgICAgICAgICAgICAgICAgICAgdW5kZXJzdGFuZCBZb2N0byBMaW51eCBrZXJuZWxzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyNrZXJuZWwtZGV2LWludHJvJz5Zb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBtYW51YWwgcHJvdmlkZXMgaW5mb3JtYXRpb24gb24gaG93IHRvIHBhdGNoIHRoZQorICAgICAgICAgICAgICAgICAgICBrZXJuZWwsIG1vZGlmeSBrZXJuZWwgcmVjaXBlcywgYW5kIGNvbmZpZ3VyZSB0aGUga2VybmVsLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5MZWFybiBBYm91dCBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1BzKTo8L2VtcGhhc2lzPgogICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBsZWFybiBhYm91dCBCU1BzLCBzZWUgdGhlCiAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2JzcCc+WW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1ApIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbWFudWFsIGFsc28gcHJvdmlkZXMgYW4gZXhhbXBsZSBCU1AgY3JlYXRpb24gd29ya2Zsb3cuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjZGV2ZWxvcGluZy1hLWJvYXJkLXN1cHBvcnQtcGFja2FnZS1ic3AnPiJEZXZlbG9waW5nIGEgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCiAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TGVhcm4gQWJvdXQgVG9hc3Rlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkxlYXJuIEFib3V0IFRvYXN0ZXI6PC9lbXBoYXNpcz4KICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBpcyBhIHdlYiBpbnRlcmZhY2UgdG8gdGhlIFlvY3RvIFByb2plY3QncwogICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgogICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gdXNpbmcgdGhpcyB0eXBlIG9mIGludGVyZmFjZSB0bwogICAgICAgICAgICAgICAgICAgICBjcmVhdGUgaW1hZ2VzLCBzZWUgdGhlCiAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1RPQVNUX1VSTDsjdG9hc3Rlci1tYW51YWwtaW50cm8nPlRvYXN0ZXIgVXNlciBNYW51YWw8L3VsaW5rPi4KICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5IYXZlIEF2YWlsYWJsZSB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsPC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgVGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1tYW51YWwtaW50cm8nPllvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbDwvdWxpbms+LAotICAgICAgICAgICAgICAgICAgICB1bmxpa2UgdGhlIHJlc3Qgb2YgdGhlIFlvY3RvIFByb2plY3QgbWFudWFsIHNldCwgaXMKLSAgICAgICAgICAgICAgICAgICAgY29tcHJpc2VkIG9mIG1hdGVyaWFsIHN1aXRlZCBmb3IgcmVmZXJlbmNlIHJhdGhlciB0aGFuCisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+SGF2ZSBBdmFpbGFibGUgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1tYW51YWwtaW50cm8nPllvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbDo8L3VsaW5rPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFVubGlrZSB0aGUgcmVzdCBvZiB0aGUgWW9jdG8gUHJvamVjdCBtYW51YWwgc2V0LCB0aGlzIG1hbnVhbAorICAgICAgICAgICAgICAgICAgICBpcyBjb21wcmlzZWQgb2YgbWF0ZXJpYWwgc3VpdGVkIGZvciByZWZlcmVuY2UgcmF0aGVyIHRoYW4KICAgICAgICAgICAgICAgICAgICAgcHJvY2VkdXJlcy4KICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBnZXQKICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdXNpbmdwb2t5Jz5idWlsZCBkZXRhaWxzPC91bGluaz4sCiAgICAgICAgICAgICAgICAgICAgIGEKLSAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjY2xvc2VyLWxvb2snPmNsb3NlciBsb29rPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjZGV2ZWxvcG1lbnQtY29uY2VwdHMnPmNsb3NlciBsb29rPC91bGluaz4KICAgICAgICAgICAgICAgICAgICAgYXQgaG93IHRoZSBwaWVjZXMgb2YgdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQKICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgd29yayB0b2dldGhlciwgaW5mb3JtYXRpb24gb24gdmFyaW91cwogICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN0ZWNobmljYWwtZGV0YWlscyc+dGVjaG5pY2FsIGRldGFpbHM8L3VsaW5rPiwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXBva3kvUkVBRE1FLnBva3kgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1wb2t5L1JFQURNRS5wb2t5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNDI4NDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1wb2t5L1JFQURNRS5wb2t5CkBAIC0wLDAgKzEsNTggQEAKK1Bva3kKKz09PT0KKworUG9reSBpcyBhbiBpbnRlZ3JhdGlvbiBvZiB2YXJpb3VzIGNvbXBvbmVudHMgdG8gZm9ybSBhIGNvbXBsZXRlIHByZXBhY2thZ2VkCitidWlsZCBzeXN0ZW0gYW5kIGRldmVsb3BtZW50IGVudmlyb25tZW50LiBJdCBmZWF0dXJlcyBzdXBwb3J0IGZvciBidWlsZGluZworY3VzdG9taXNlZCBlbWJlZGRlZCBkZXZpY2Ugc3R5bGUgaW1hZ2VzLiBUaGVyZSBhcmUgcmVmZXJlbmNlIGRlbW8gaW1hZ2VzCitmZWF0dXJpbmcgYSBYMTEvTWF0Y2hib3gvR1RLIHRoZW1lZCBVSSBjYWxsZWQgU2F0by4gVGhlIHN5c3RlbSBzdXBwb3J0cworY3Jvc3MtYXJjaGl0ZWN0dXJlIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IHVzaW5nIFFFTVUgZW11bGF0aW9uIGFuZCBhCitzdGFuZGFsb25lIHRvb2xjaGFpbiBhbmQgU0RLIHdpdGggSURFIGludGVncmF0aW9uLgorCitBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIHRoZSBzcGVjaWZpY3Mgb2YgaGFyZHdhcmUgdGhhdCBQb2t5IHN1cHBvcnRzCitpcyBhdmFpbGFibGUgaW4gUkVBRE1FLmhhcmR3YXJlLiBGdXJ0aGVyIGhhcmR3YXJlIHN1cHBvcnQgY2FuIGVhc2lseSBiZSBhZGRlZAoraW4gdGhlIGZvcm0gb2YgbGF5ZXJzIHdoaWNoIGV4dGVuZCB0aGUgc3lzdGVtcyBjYXBhYmlsaXRpZXMgaW4gYSBtb2R1bGFyIHdheS4KKworQXMgYW4gaW50ZWdyYXRpb24gbGF5ZXIgUG9reSBjb25zaXN0cyBvZiBzZXZlcmFsIHVwc3RyZWFtIHByb2plY3RzIHN1Y2ggYXMgCitCaXRCYWtlLCBPcGVuRW1iZWRkZWQtQ29yZSwgWW9jdG8gZG9jdW1lbnRhdGlvbiBhbmQgdmFyaW91cyBzb3VyY2VzIG9mIGluZm9ybWF0aW9uIAorZS5nLiBmb3IgdGhlIGhhcmR3YXJlIHN1cHBvcnQuIFBva3kgaXMgaW4gdHVybiBhIGNvbXBvbmVudCBvZiB0aGUgWW9jdG8gUHJvamVjdC4KKworVGhlIFlvY3RvIFByb2plY3QgaGFzIGV4dGVuc2l2ZSBkb2N1bWVudGF0aW9uIGFib3V0IHRoZSBzeXN0ZW0gaW5jbHVkaW5nIGEgCityZWZlcmVuY2UgbWFudWFsIHdoaWNoIGNhbiBiZSBmb3VuZCBhdDoKKyAgICBodHRwOi8veW9jdG9wcm9qZWN0Lm9yZy9kb2N1bWVudGF0aW9uCisKK09wZW5FbWJlZGRlZC1Db3JlIGlzIGEgbGF5ZXIgY29udGFpbmluZyB0aGUgY29yZSBtZXRhZGF0YSBmb3IgY3VycmVudCB2ZXJzaW9ucworb2YgT3BlbkVtYmVkZGVkLiBJdCBpcyBkaXN0cm8tbGVzcyAoY2FuIGJ1aWxkIGEgZnVuY3Rpb25hbCBpbWFnZSB3aXRoCitESVNUUk8gPSAibm9kaXN0cm8iKSBhbmQgY29udGFpbnMgb25seSBlbXVsYXRlZCBtYWNoaW5lIHN1cHBvcnQuCisKK0ZvciBpbmZvcm1hdGlvbiBhYm91dCBPcGVuRW1iZWRkZWQsIHNlZSB0aGUgT3BlbkVtYmVkZGVkIHdlYnNpdGU6CisgICAgaHR0cDovL3d3dy5vcGVuZW1iZWRkZWQub3JnLworCitXaGVyZSB0byBTZW5kIFBhdGNoZXMKKz09PT09PT09PT09PT09PT09PT09PQorCitBcyBQb2t5IGlzIGFuIGludGVncmF0aW9uIHJlcG9zaXRvcnkgKGJ1aWx0IHVzaW5nIGEgdG9vbCBjYWxsZWQgY29tYm8tbGF5ZXIpLAorcGF0Y2hlcyBhZ2FpbnN0IHRoZSB2YXJpb3VzIGNvbXBvbmVudHMgc2hvdWxkIGJlIHNlbnQgdG8gdGhlaXIgcmVzcGVjdGl2ZQordXBzdHJlYW1zOgorCitiaXRiYWtlOgorICAgIEdpdCByZXBvc2l0b3J5OiBodHRwOi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZS8KKyAgICBNYWlsaW5nIGxpc3Q6IGJpdGJha2UtZGV2ZWxAbGlzdHMub3BlbmVtYmVkZGVkLm9yZworCitkb2N1bWVudGF0aW9uOgorICAgIEdpdCByZXBvc2l0b3J5OiBodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS95b2N0by1kb2NzLworICAgIE1haWxpbmcgbGlzdDogeW9jdG9AeW9jdG9wcm9qZWN0Lm9yZworCittZXRhLXBva3ksIG1ldGEteW9jdG8tYnNwOgorICAgIEdpdCByZXBvc2l0b3J5OiBodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9tZXRhLXlvY3RvKC1ic3ApCisgICAgTWFpbGluZyBsaXN0OiBwb2t5QHlvY3RvcHJvamVjdC5vcmcKKworRXZlcnl0aGluZyBlbHNlIHNob3VsZCBiZSBzZW50IHRvIHRoZSBPcGVuRW1iZWRkZWQgQ29yZSBtYWlsaW5nIGxpc3QuICBJZiBpbgorZG91YnQsIGNoZWNrIHRoZSBvZS1jb3JlIGdpdCByZXBvc2l0b3J5IGZvciB0aGUgY29udGVudCB5b3UgaW50ZW5kIHRvIG1vZGlmeS4KK0JlZm9yZSBzZW5kaW5nLCBiZSBzdXJlIHRoZSBwYXRjaGVzIGFwcGx5IGNsZWFubHkgdG8gdGhlIGN1cnJlbnQgb2UtY29yZSBnaXQKK3JlcG9zaXRvcnkuCisKKyAgICBHaXQgcmVwb3NpdG9yeTogaHR0cDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlLworICAgIE1haWxpbmcgbGlzdDogb3BlbmVtYmVkZGVkLWNvcmVAbGlzdHMub3BlbmVtYmVkZGVkLm9yZworCitOb3RlOiBUaGUgc2NyaXB0cyBkaXJlY3Rvcnkgc2hvdWxkIGJlIHRyZWF0ZWQgd2l0aCBleHRyYSBjYXJlIGFzIGl0IGlzIGEgbWl4IG9mCitvZS1jb3JlIGFuZCBwb2t5LXNwZWNpZmljIGZpbGVzIGZyb20gbWV0YS1wb2t5LgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL2NvbmYtbm90ZXMudHh0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL2NvbmYtbm90ZXMudHh0CmluZGV4IDJmMjkzMmIuLmYxYTRmNGQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXBva3kvY29uZi9jb25mLW5vdGVzLnR4dAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1wb2t5L2NvbmYvY29uZi1ub3Rlcy50eHQKQEAgLTEsMyArMSw4IEBACisKKyMjIyBTaGVsbCBlbnZpcm9ubWVudCBzZXQgdXAgZm9yIGJ1aWxkcy4gIyMjCisKK1lvdSBjYW4gbm93IHJ1biAnYml0YmFrZSA8dGFyZ2V0PicKKwogQ29tbW9uIHRhcmdldHMgYXJlOgogICAgIGNvcmUtaW1hZ2UtbWluaW1hbAogICAgIGNvcmUtaW1hZ2Utc2F0bwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL2Rpc3Ryby9pbmNsdWRlL21haW50YWluZXJzLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXBva3kvY29uZi9kaXN0cm8vaW5jbHVkZS9tYWludGFpbmVycy5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MWM4ZjMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL2Rpc3Ryby9pbmNsdWRlL21haW50YWluZXJzLmluYworKysgL2Rldi9udWxsCkBAIC0xLDg0MCArMCwwIEBACi0jIFlvY3RvIFByb2plY3QgLyBPcGVuRW1iZWRkZWQtQ29yZSAoT0UtQ29yZSkgTWFpbnRhaW5lcnMgRmlsZQotIwotIyBUaGlzIGZpbGUgY29udGFpbnMgYSBsaXN0IG9mIHJlY2lwZSBtYWludGFpbmVycy4KLSMKLSMgUGxlYXNlIHN1Ym1pdCBhbnkgcGF0Y2hlcyBhZ2FpbnN0IHJlY2lwZXMgaW4gbWV0YSB0byB0aGUgCi0jIE9FLUNvcmUgbWFpbCBsaXN0IChvcGVuZW1iZWRkZWQtY29yZUBsaXN0cy5vcGVuZW1iZWRkZWQub3JnKQotIyBGb3IgcmVjaXBlcyBpbiBtZXRhLXlvY3RvIHBsZWFzZSB1c2UgdGhlIFBva3kgbGlzdCAocG9reUB5b2N0b3Byb2plY3Qub3JnKQotIwotIyBJZiB5b3UgaGF2ZSBwcm9ibGVtcyB3aXRoIG9yIHF1ZXN0aW9ucyBhYm91dCBhIHBhcnRpY3VsYXIgcmVjaXBlLCBmZWVsCi0jIGZyZWUgdG8gY29udGFjdCB0aGUgbWFpbnRhaW5lciBkaXJlY3RseSAoY2M6aW5nIHRoZSBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3QKLSMgcHV0cyBpdCBpbiB0aGUgYXJjaGl2ZSBhbmQgaGVscHMgb3RoZXIgcGVvcGxlIHdobyBtaWdodCBoYXZlIHRoZSBzYW1lCi0jIHF1ZXN0aW9ucyBpbiB0aGUgZnV0dXJlKSwgYnV0IHBsZWFzZSB0cnkgdG8gZG8gdGhlIGZvbGxvd2luZyBmaXJzdDoKLSMKLSMgIC0gbG9vayBpbiB0aGUgWW9jdG8gUHJvamVjdCBCdWd6aWxsYQotIyAgICAoaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvKSB0byBzZWUgaWYgYSBwcm9ibGVtIGhhcwotIyAgICBhbHJlYWR5IGJlZW4gcmVwb3J0ZWQKLSMKLSMgLSBsb29rIHRocm91Z2ggcmVjZW50IGVudHJpZXMgb2YgdGhlIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdCBhcmNoaXZlcwotIyAgIChodHRwOi8vbGlzdHMubGludXh0b2dvLm9yZy9waXBlcm1haWwvb3BlbmVtYmVkZGVkLWNvcmUgb3IKLSMgICAgaHR0cHM6Ly9saXN0cy55b2N0b3Byb2plY3Qub3JnL3BpcGVybWFpbC9wb2t5LykgdG8gc2VlIGlmIG90aGVyCi0jICAgcGVvcGxlIGhhdmUgcnVuIGludG8gc2ltaWxhciBwcm9ibGVtcyBvciBoYWQgc2ltaWxhciBxdWVzdGlvbnMKLSMgICBhbnN3ZXJlZC4KLSMKLSMgVGhlIGZvcm1hdCBpcyBhcyBhIGJpdGJha2UgdmFyaWFibGUgb3ZlcnJpZGUgZm9yIGVhY2ggcmVjaXBlCi0jCi0jCVJFQ0lQRV9NQUlOVEFJTkVSX3BuLTxyZWNpcGUgbmFtZT4gPSAiRnVsbCBOYW1lIDxhZGRyZXNzQGRvbWFpbj4iCi0jCi0jIFBsZWFzZSBrZWVwIHRoaXMgbGlzdCBpbiBhbHBoYWJldGljYWwgb3JkZXIuCi0jCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1hY2wgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWFjcGlkID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWFkd2FpdGEtaWNvbi10aGVtZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWFsc2EtbGliID0gIlRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1hbHNhLXBsdWdpbnMgPSAiVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWFsc2Etc3RhdGUgPSAiVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWFsc2EtdG9vbHMgPSAiVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWFsc2EtdXRpbHMgPSAiVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWFsc2EtdXRpbHMtc2NyaXB0cyA9ICJUYW51IEthc2tpbmVuIDx0YW51a0Bpa2kuZmk+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tYXBtZCA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1hcHIgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWFwci11dGlsID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1hcHQgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tYXB0LW5hdGl2ZSA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1hcmdwLXN0YW5kYWxvbmUgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1hc2NpaWRvYyA9ICJEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWFzcGVsbCA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tYXQgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWF0LXNwaTItYXRrID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tYXQtc3BpMi1jb3JlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tYXRrID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tYXR0ciA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tYXV0b2NvbmYgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tYXV0b2dlbi1uYXRpdmUgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tYXV0b21ha2UgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tYXZhaGkgPSAiRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1hdmFoaS11aSA9ICJEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWJhYmVsdHJhY2UgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1iYXNlLWZpbGVzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tYmFzZS1wYXNzd2QgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1iYXNoID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1iYXNoLWNvbXBsZXRpb24gPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1iYyA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tYmR3Z2MgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1iZWVjcnlwdCA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1iaWdyZXFzcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1iaW5kID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWJpbnV0aWxzID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tYmludXRpbHMtY3Jvc3MgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1iaW51dGlscy1jcm9zcy1jYW5hZGlhbiA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWJpbnV0aWxzLWNyb3Nzc2RrID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tYmlzb24gPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWJqYW0tbmF0aXZlID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tYmxrdG9vbCA9ICJEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWJsa3RyYWNlID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tYmx1ZXo1ID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWJtYXAtdG9vbHMgPSAiRWQgQmFydG9zaCA8ZWQuYmFydG9zaEBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tYm9vc3QgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1ib290Y2hhcnQyID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tYnNkLWhlYWRlcnMgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1idHJmcy10b29scyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWJ1aWxkLWFwcGxpYW5jZS1pbWFnZSA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWJ1aWxkLWNvbXBhcmUgPSAiUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1idWlsZGVyID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tYnVpbGR0b29scy10YXJiYWxsID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tYnVzeWJveCA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXI4MDhAZ21haWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWJ5YWNjID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1iemlwMiA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1jYS1jZXJ0aWZpY2F0ZXMgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1jYWlybyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWNhbGlicmF0ZXByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tY2FudGFyZWxsLWZvbnRzID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tY2NhY2hlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWNkcnRvb2xzLW5hdGl2ZSA9ICJEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWNoa2NvbmZpZyA9ICJEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWNoa2NvbmZpZy1hbHRlcm5hdGl2ZXMtbmF0aXZlID0gIkRlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tY2hycGF0aCA9ICJEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWNsdXR0ZXItMS4wID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tY2x1dHRlci1nc3QtMy4wID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tY2x1dHRlci1ndGstMS4wID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tY21ha2UgPSAiT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW8uc2FsdmFkb3JAb3NzeXN0ZW1zLmNvbS5icj4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1jbWFrZS1uYXRpdmUgPSAiT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW8uc2FsdmFkb3JAb3NzeXN0ZW1zLmNvbS5icj4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1jb2dsLTEuMCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvbXBvc2l0ZXByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tY29ubm1hbiA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1jb25ubWFuLWNvbmYgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tY29ubm1hbi1nbm9tZSA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1jb25zb2xlLXRvb2xzID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1jb25zb2xla2l0ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLWJhc2UgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLWNsdXR0ZXIgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLWZ1bGwtY21kbGluZSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2Uta2VybmVsLWRldiA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2UtbHNiID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1sc2ItZGV2ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1sc2Itc2RrID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1taW5pbWFsID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1taW5pbWFsLWRldiA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLW1pbmltYWwtbXRkdXRpbHMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLXJ0ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1ydC1zZGsgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLXNhdG8gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLXNhdG8tZGV2ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1zYXRvLXNkayA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2Utc2F0by1zZGstcHRlc3QgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLXRlc3RtYXN0ZXIgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLXRlc3RtYXN0ZXItaW5pdHJhbWZzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS13ZXN0b24gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLXgxMSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmV1dGlscyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tY3BpbyA9ICJEZW55cyBEbXl0cml5ZW5rbyA8ZGVuaXNAZGVuaXgub3JnPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWNyYWNrbGliID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWNyZWF0ZXJlcG8gPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWNyb25pZSA9ICJFZHdpbiBQbGF1Y2h1IDxlZHdpbi5wbGF1Y2h1LmNhbWFjaG9AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWNyb3NzLWxvY2FsZWRlZi1uYXRpdmUgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1jcnlwdG9kZXYtbGludXggPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tY3J5cHRvZGV2LW1vZHVsZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1jcnlwdG9kZXYtdGVzdHMgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tY3VwcyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tY3VybCA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1jdmUtY2hlY2stdG9vbCA9ICJMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWN3YXV0b21hY3JvcyA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1kYW1hZ2Vwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWRiID0gIk1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1kYnVzID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1kYnVzLWdsaWIgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWRidXMtdGVzdCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZGJ1cy13YWl0ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1kZWJpYW51dGlscyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1kZXBtb2R3cmFwcGVyLWNyb3NzID0gIk1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1kZXNrdG9wLWZpbGUtdXRpbHMtbmF0aXZlID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZGhjcCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZGlmZnN0YXQgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWRpZmZ1dGlscyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZGlyZWN0ZmIgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWRpcmVjdGZiLWV4YW1wbGVzID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1kaXN0Y2MgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWRpc3RjYy1jb25maWcgPSAiRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1kbWlkZWNvZGUgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1kbXhwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWRvY2Jvb2steG1sLWR0ZDQgPSAiRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1kb2Nib29rLXhzbC1zdHlsZXNoZWV0cyA9ICJEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWRvc2ZzdG9vbHMgPSAiRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1kcGtnID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWRyaTJwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWRyaTNwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWRyb3BiZWFyID0gIkRlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZHRjID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZTJmc3Byb2dzID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWVkID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZWVlLWFjcGktc2NyaXB0cyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWVmaWxpbnV4ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZWdsaW5mby1mYiA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWVnbGluZm8teDExID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZWZpbGludXggPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1lbGZ1dGlscyA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZW5jaGFudCA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1lbmNvZGluZ3MgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1lcGlwaGFueSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWV0aHRvb2wgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZXVkZXYgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZXhwYXQgPSAiRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1leHBlY3QgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1mZm1wZWcgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1maWxlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWZpbmR1dGlscyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZml4ZXNwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWZsYWMgPSAiVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWZsZXggPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWZvbnQtYWxpYXMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1mb250LXV0aWwgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1mb250Y29uZmlnID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZm9udHNwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWZvb21hdGljLWZpbHRlcnMgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWZvcm1mYWN0b3IgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZnJlZXR5cGUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1mc3Rlc3RzID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZnRzID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ2F3ayA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ2NjID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ2NjLWNyb3NzID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ2NjLWNyb3NzLWNhbmFkaWFuID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ2NjLWNyb3NzLWluaXRpYWwgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1nY2MtY3Jvc3NzZGsgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1nY2MtY3Jvc3NzZGstaW5pdGlhbCA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdjYy1ydW50aW1lID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ2NjLXNhbml0aXplcnMgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1nY2Mtc291cmNlID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ2NjbWFrZWRlcCA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdjb25mID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ2NyID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ2RiID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ2RiLWNyb3NzID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ2RiLWNyb3NzLWNhbmFkaWFuID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ2RibSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdkay1waXhidWYgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1nZXR0ZXh0ID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdldHRleHQtbWluaW1hbC1uYXRpdmUgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ2hvc3RzY3JpcHQgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdpdCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1nbGV3ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ2xpYi0yLjAgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1nbGliLW5ldHdvcmtpbmcgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1nbGliYyA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdsaWJjLWluaXRpYWwgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1nbGliYy1sb2NhbGUgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1nbGliYy1tdHJhY2UgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1nbGliYy1zY3JpcHRzID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ2xwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdtcCA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdub21lLWNvbW1vbiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdub21lLWRlc2t0b3AtdGVzdGluZyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdub21lLWRlc2t0b3AzID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ25vbWUtZG9jLXV0aWxzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ25vbWUtdGhlbWVzLXN0YW5kYXJkID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ251LWNvbmZpZyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1nbnUtZWZpID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdudXBnID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1nbnV0bHMgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ29iamVjdC1pbnRyb3NwZWN0aW9uID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ28tbmF0aXZlID0gIkFybWluIEt1c3RlciA8YWt1c3RlcjgwOEBnbWFpbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ3BlcmYgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1ncGdtZSA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ3B0ZmRpc2sgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1ncmVwID0gIkRlbnlzIERteXRyaXllbmtvIDxkZW5pc0BkZW5peC5vcmc+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ3JvZmYgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdydWIgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1ncnViLWVmaSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1nc3QtcGxheWVyID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ3N0cmVhbWVyMS4wID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdzdHJlYW1lcjEuMC1saWJhdiA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1nc3RyZWFtZXIxLjAtb214ID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdzdHJlYW1lcjEuMC1tZXRhLWJhc2UgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZCA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5ID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWdzdHJlYW1lcjEuMC1ydHNwLXNlcnZlciA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1ndGsrID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ3RrKzMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1ndGstZG9jID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ3RrLWVuZ2luZXMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1ndGstaWNvbi11dGlscy1uYXRpdmUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1ndGstc2F0by1lbmdpbmUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1ndWlsZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1ndWlsdC1uYXRpdmUgPSAiQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ3VtbWlib290ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tZ3ppcCA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1oYXJmYnV6eiA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1oZHBhcm0gPSAiRGVueXMgRG15dHJpeWVua28gPGRlbmlzQGRlbml4Lm9yZz4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1oZWxwMm1hbi1uYXRpdmUgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWhpY29sb3ItaWNvbi10aGVtZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWhvc3RhcC1jb25mID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWhvc3RhcC11dGlscyA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1od2xhdGRldGVjdCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWkyYy10b29scyA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1pY2VjYy1jcmVhdGUtZW52LW5hdGl2ZSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWljb24tbmFtaW5nLXV0aWxzID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4taWN1ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4taWZ1cGRvd24gPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4taW5pdC1pZnVwZG93biA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1pbml0cmFtZnMtYm9vdCA9ICJPdGF2aW8gU2FsdmFkb3IgPG90YXZpby5zYWx2YWRvckBvc3N5c3RlbXMuY29tLmJyPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWluaXRyYW1mcy1mcmFtZXdvcmsgPSAiT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW8uc2FsdmFkb3JAb3NzeXN0ZW1zLmNvbS5icj4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1pbml0cmFtZnMtbGl2ZS1ib290ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4taW5pdHJhbWZzLWxpdmUtaW5zdGFsbCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWluaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4taW5pdHJhbWZzLWxpdmUtaW5zdGFsbC1lZmktdGVzdGZzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4taW5pdHJhbWZzLWxpdmUtaW5zdGFsbC10ZXN0ZnMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1pbml0c2NyaXB0cyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWlucHV0cHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1pbnRsdG9vbCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWlwcm91dGUyID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWlwdGFibGVzID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWlwdXRpbHMgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4taXJkYS11dGlscyA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1pc28tY29kZXMgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1pdyA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJqcGVnLXR1cmJvID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWpzb24tYyA9ICJEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWpzb24tZ2xpYiA9ICJEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWtiZCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWticHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1rY29uZmlnLWZyb250ZW5kcyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWtlcm4tdG9vbHMtbmF0aXZlID0gIkJydWNlIEFzaGZpZWxkIDxicnVjZS5hc2hmaWVsZEB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWtlcm5lbHNoYXJrID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4ta2VybmVsLWRldnNyYyA9ICJCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1rZXhlYy10b29scyA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1rZXltYXBzID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4ta21vZCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4ta21vZC1uYXRpdmUgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWwzYWZwYWQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1sYW1lID0gIlRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1sYXRlbmN5dG9wID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGRjb25maWctbmF0aXZlID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGVzcyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJhNTIgPSAiVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmFjcGkgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGliYWlvID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGliYXJjaGl2ZSA9ICJPdGF2aW8gU2FsdmFkb3IgPG90YXZpby5zYWx2YWRvckBvc3N5c3RlbXMuY29tLmJyPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmFydC1sZ3BsID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGliYXNzdWFuID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmF0b21pYy1vcHMgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGliYXYgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJic2QgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGliY2FwID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmNhcC1uZyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJjZ3JvdXAgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJjaGVjayA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJjbGFzcy1pc2EtcGVybCA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJjb252ZXJ0LWFzbjEtcGVybCA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJjcm9jbyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmRhZW1vbiA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmRteCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmRybSA9ICJPdGF2aW8gU2FsdmFkb3IgPG90YXZpby5zYWx2YWRvckBvc3N5c3RlbXMuY29tLmJyPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmR1bXB2YWx1ZS1wZXJsID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmVudi1wZXJsID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmVwb3h5ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZXJhdGlvbi1mb250cyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmVycm9yLXBlcmwgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZXZkZXYgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJldmVudCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmV4aWYgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJmYWtla2V5ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZmZpID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZmlsZS1jaGVja3RyZWUtcGVybCA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJmbSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmZtLWV4dHJhID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZm9udGVuYyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmdjYyA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmdjYy1pbml0aWFsID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZ2NyeXB0ID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJnZm9ydHJhbiA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmdsYWRlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZ2x1ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZ3BnLWVycm9yID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJndWRldiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmkxOG4tY29sbGF0ZS1wZXJsID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmljYWwgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGliaWNlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGliaWNvbnYgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJpZDN0YWcgPSAiVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmlkbiA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmlucHV0ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlianNvbiA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmtzYmEgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJtYXRjaGJveCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm1wYyA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm5ld3QgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm5ld3QtcHl0aG9uID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJuZnNpZG1hcCA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJubCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm5vdGlmeSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm5zcy1tZG5zID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlib2dnID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm9teGlsID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm93bCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnBhbSA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJwY2FwID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnBjaWFjY2VzcyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnBjcmUgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlicGNyZTIgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlicGZtNCA9ICJNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnBuZyA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJwbmcxMiA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJwb2QtcGxhaW5lci1wZXJsID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnByb3h5ID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnB0aHJlYWQtc3R1YnMgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJyc3ZnID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlic2FtcGxlcmF0ZTAgPSAiVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnNkbCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJzZGwyID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnNlY3JldCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnNtID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlic25kZmlsZTEgPSAiVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnNvbHYgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlic291cC0yLjQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ0YXNuMSA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ0aGVvcmEgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ0aW1lZGF0ZS1wZXJsID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnRpcnBjID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnRvb2wgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidG9vbC1jcm9zcyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ0b29sLW5hdGl2ZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ1bmlzdHJpbmcgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidW53aW5kID0gIkJydWNlIEFzaGZpZWxkIDxicnVjZS5hc2hmaWVsZEB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnVyY3UgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ1cmktcGVybCA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ1c2ItY29tcGF0ID0gIkxlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidXNiMSA9ICJMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnVzZXIgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidm9yYmlzID0gIlRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ3ZWJwID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieDExID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieDExLWRpZXQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4YXUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4Y2FsaWJyYXRlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGNiID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGNvbXBvc2l0ZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhjdXJzb3IgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4ZGFtYWdlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGRtY3AgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4ZXh0ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGZpeGVzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGZvbnQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4ZnQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4aSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhpbmVyYW1hID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGtiY29tbW9uID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGtiZmlsZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhtbC1uYW1lc3BhY2VzdXBwb3J0LXBlcmwgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieG1sLXBhcnNlci1wZXJsID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhtbC1wZXJsID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhtbC1zYXgtYmFzZS1wZXJsID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhtbC1zYXgtcGVybCA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4bWwtc2ltcGxlLXBlcmwgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieG1sMiA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieG11ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHBtID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHJhbmRyID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHJlbmRlciA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhyZXMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4c2NybnNhdmVyID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHNldHRpbmdzLWNsaWVudCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhzaG1mZW5jZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhzbHQgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4dCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnh0c3QgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4diA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnh2bWMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4eGY4NmRnYSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnh4Zjg2bWlzYyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnh4Zjg2dm0gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ5YW1sID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGlnaHR0cGQgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saW51eC1kdW1teSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpbnV4LWZpcm13YXJlID0gIk90YXZpbyBTYWx2YWRvciA8b3RhdmlvLnNhbHZhZG9yQG9zc3lzdGVtcy5jb20uYnI+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbGludXgtbGliYy1oZWFkZXJzID0gIkJydWNlIEFzaGZpZWxkIDxicnVjZS5hc2hmaWVsZEB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpbnV4LXlvY3RvID0gIkJydWNlIEFzaGZpZWxkIDxicnVjZS5hc2hmaWVsZEB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpbnV4LXlvY3RvLWRldiA9ICJCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saW51eC15b2N0by1ydCA9ICJCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1saW51eC15b2N0by10aW55ID0gIkJydWNlIEFzaGZpZWxkIDxicnVjZS5hc2hmaWVsZEB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxvZ3JvdGF0ZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1scnpzeiA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1sc2IgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxzYmluaXRzY3JpcHRzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbHNidGVzdCA9ICJEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLWxzb2YgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbHRwID0gIkRlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbHR0bmctbW9kdWxlcyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1sdHRuZy10b29scyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1sdHRuZy11c3QgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbHo0ID0gIkFybWluIEt1c3RlciA8YWt1c3RlcjgwOEBnbWFpbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbHpvID0gIkFybWluIEt1c3RlciA8YWt1c3RlcjgwOEBnbWFpbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbHpvcCA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXI4MDhAZ21haWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW00ID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW00LW5hdGl2ZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1tYWlseCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1tYWtlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW1ha2VkZXBlbmQgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbWFrZWRldnMgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hbiA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbWFuLXBhZ2VzID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1tYXRjaGJveC1jb25maWctZ3RrID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbWF0Y2hib3gtZGVza3RvcCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hdGNoYm94LWRlc2t0b3Atc2F0byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hdGNoYm94LWtleWJvYXJkID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbWF0Y2hib3gtcGFuZWwtMiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hdGNoYm94LXNlc3Npb24gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1tYXRjaGJveC1zZXNzaW9uLXNhdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1tYXRjaGJveC10ZXJtaW5hbCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hdGNoYm94LXRoZW1lLXNhdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1tYXRjaGJveC13bSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW1jID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW1kYWRtID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW1lbnUtY2FjaGUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1tZXNhID0gIk90YXZpbyBTYWx2YWRvciA8b3RhdmlvLnNhbHZhZG9yQG9zc3lzdGVtcy5jb20uYnI+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbWVzYS1kZW1vcyA9ICJPdGF2aW8gU2FsdmFkb3IgPG90YXZpby5zYWx2YWRvckBvc3N5c3RlbXMuY29tLmJyPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW1lc2EtZ2wgPSAiT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW8uc2FsdmFkb3JAb3NzeXN0ZW1zLmNvbS5icj4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1tZXRhLWVudmlyb25tZW50ID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW1ldGEtZW52aXJvbm1lbnQtZXh0c2RrID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW1ldGEtZXh0c2RrLXRvb2xjaGFpbiA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1tZXRhLWlkZS1zdXBwb3J0ID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbWV0YS10b29sY2hhaW4gPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1tZXRhLXdvcmxkLXBrZ2RhdGEgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbWluZ2V0dHkgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbWluaS14LXNlc3Npb24gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1taW5pY29tID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW1rZWxmaW1hZ2UgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1ta2ZvbnRkaXIgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1ta2ZvbnRzY2FsZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW1rbGlicy1uYXRpdmUgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbWt0ZW1wID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW1tYy11dGlscyA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1tb2JpbGUtYnJvYWRiYW5kLXByb3ZpZGVyLWluZm8gPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1tb2R1dGlscy1pbml0c2NyaXB0cyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1tcGVnMmRlYyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW1wZnIgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1tcGcxMjMgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1tc210cCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW10ZC11dGlscyA9ICJEZW55cyBEbXl0cml5ZW5rbyA8ZGVuaXNAZGVuaXgub3JnPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW10ZGV2ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbXRvb2xzID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW11c2wgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1teC0xLjAgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1uYXNtID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW5hdGl2ZXNkay1idWlsZHRvb2xzLXBlcmwtZHVtbXkgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbmF0aXZlc2RrLWxpYnRvb2wgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1zZGstaG9zdCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW5hdGl2ZXNkay1xZW11LWhlbHBlciA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1uYXRpdmVzZGstcG9zdGluc3QtaW50ZXJjZXB0ID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW5jdXJzZXMgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW5lYXJkID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW5lb24gPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbmV0LXRvb2xzID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW5ldGJhc2UgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbmV0dGxlID0gIkFybWluIEt1c3RlciA8YWt1c3RlcjgwOEBnbWFpbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tbmZzLWV4cG9ydC1yb290ID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW5mcy11dGlscyA9ICJMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW5wdGggPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1uc3ByID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW5zcyA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1uc3MtbXlob3N0bmFtZSA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1vZm9ubyA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1vaC1wdXp6bGVzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tb3BlbnNzaCA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1vcGVuc3NsID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tb3BrZyA9ICJBbGVqYW5kcm8gZGVsIENhc3RpbGxvIDxhbGVqYW5kcm8uZGVsY2FzdGlsbG9AbmkuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wa2ctYXJjaC1jb25maWcgPSAiQWxlamFuZHJvIGRlbCBDYXN0aWxsbyA8YWxlamFuZHJvLmRlbGNhc3RpbGxvQG5pLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1vcGtnLWtleXJpbmdzID0gIkFsZWphbmRybyBkZWwgQ2FzdGlsbG8gPGFsZWphbmRyby5kZWxjYXN0aWxsb0BuaS5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tb3BrZy11dGlscyA9ICJBbGVqYW5kcm8gZGVsIENhc3RpbGxvIDxhbGVqYW5kcm8uZGVsY2FzdGlsbG9AbmkuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wcm9maWxlID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tb3JjID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLW9zLXJlbGVhc2UgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1vc3NwLXV1aWQgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1wMTEta2l0ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZS1pbmRleCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1iYXNlID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtYm9vdCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLWJ1aWxkZXNzZW50aWFsID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtY2x1dHRlciA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLWRldmljZS1kZXZlbCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLWRpcmVjdGZiID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtZWNsaXBzZS1kZWJ1ZyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLWxzYiA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLW5mcyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLXNkayA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLXNzaC1kcm9wYmVhciA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLXNzaC1vcGVuc3NoID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtZGVidWcgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtdGVzdGFwcHMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS14MTEgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS14MTEtYmFzZSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUteDExLXhzZXJ2ZXIgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1wYW5nbyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhcnRlZCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcGF0Y2ggPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhdGNoZWxmID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBheCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcGF4LXV0aWxzID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1wYnppcDIgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcGNpdXRpbHMgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBjbWFuZm0gPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1wY21jaWF1dGlscyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1wZXJmID0gIkJydWNlIEFzaGZpZWxkIDxicnVjZS5hc2hmaWVsZEB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBlcmwgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcGVybC1uYXRpdmUgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcGlnbGl0ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcGlneiA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcGluZW50cnkgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyODA4QGdtYWlsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1waXhtYW4gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1waXh6ID0gIkFybWluIEt1c3RlciA8YWt1c3RlcjgwOEBnbWFpbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcGtnY29uZmlnID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBtLXV0aWxzID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBvaW50ZXJjYWwgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1wb2ludGVyY2FsLXhpbnB1dCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBvbmctY2xvY2sgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1wb3B0ID0gIkRlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcG9ydG1hcCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1wb3dlcnRvcCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXBwcCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHBwLWRpYWxpbiA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHJlbGluayA9ICJNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHJlc2VudHByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHJvY3BzID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHNldWRvID0gIk1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1wc21pc2MgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1wc3BsYXNoID0gIkRlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHRlc3QtcnVubmVyID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB1bHNlYXVkaW8gPSAiVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB1bHNlYXVkaW8tY2xpZW50LWNvbmYtc2F0byA9ICJUYW51IEthc2tpbmVuIDx0YW51a0Bpa2kuZmk+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHV6emxlcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbiA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tbmF0aXZlID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1hc3luYyA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLWRpc3RyaWJ1dGUgPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1naXQgPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1naXRkYiA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLWltYWdpbmcgPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1tYWtvID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tbmF0aXZlID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1ub3NlID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tbnVtcHkgPSAiRWR3aW4gUGxhdWNodSA8ZWR3aW4ucGxhdWNodS5jYW1hY2hvQGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tcGV4cGVjdCA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLXB0eXByb2Nlc3MgPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1weWNhaXJvID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tcHljdXJsID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tcHlndGsgPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1weXJleCA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLXNjb25zID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tc2NvbnMtbmF0aXZlID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tc2V0dXB0b29scyA9ICJFZHdpbiBQbGF1Y2h1IDxlZHdpbi5wbGF1Y2h1LmNhbWFjaG9AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1zaXggPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1zbWFydHBtID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tc21tYXAgPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbjMgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uMy1hc3luYyA9ICJFZHdpbiBQbGF1Y2h1IDxlZHdpbi5wbGF1Y2h1LmNhbWFjaG9AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbjMtZGJ1cyA9ICJFZHdpbiBQbGF1Y2h1IDxlZHdpbi5wbGF1Y2h1LmNhbWFjaG9AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbjMtZGlzdHJpYnV0ZSA9ICJFZHdpbiBQbGF1Y2h1IDxlZHdpbi5wbGF1Y2h1LmNhbWFjaG9AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbjMtZG9jdXRpbHMgPSAiRWR3aW4gUGxhdWNodSA8ZWR3aW4ucGxhdWNodS5jYW1hY2hvQGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24zLWdpdCA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uMy1naXRkYiA9ICJFZHdpbiBQbGF1Y2h1IDxlZHdpbi5wbGF1Y2h1LmNhbWFjaG9AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbjMtbWFrbyA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uMy1uYXRpdmUgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uMy1ub3NlID0gIkVkd2luIFBsYXVjaHUgPGVkd2luLnBsYXVjaHUuY2FtYWNob0BsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uMy1udW1weSA9ICJFZHdpbiBQbGF1Y2h1IDxlZHdpbi5wbGF1Y2h1LmNhbWFjaG9AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbjMtcGlwID0gIkVkd2luIFBsYXVjaHUgPGVkd2luLnBsYXVjaHUuY2FtYWNob0BsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uMy1weWdvYmplY3QgPSAiRWR3aW4gUGxhdWNodSA8ZWR3aW4ucGxhdWNodS5jYW1hY2hvQGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24zLXNldHVwdG9vbHMgPSAiRWR3aW4gUGxhdWNodSA8ZWR3aW4ucGxhdWNodS5jYW1hY2hvQGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24zLXNpeCA9ICJFZHdpbiBQbGF1Y2h1IDxlZHdpbi5wbGF1Y2h1LmNhbWFjaG9AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbjMtc21tYXAgPSAiRWR3aW4gUGxhdWNodSA8ZWR3aW4ucGxhdWNodS5jYW1hY2hvQGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1xZW11ID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXFlbXUtaGVscGVyLW5hdGl2ZSA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1xZW11d3JhcHBlci1jcm9zcyA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1xdWlsdCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1xdWlsdC1uYXRpdmUgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcXVvdGEgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcmFuZHJwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXJlYWRsaW5lID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1yZWNvcmRwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXJlbWFrZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1yZW5kZXJwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXJlc29sdmNvbmYgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXJlc291cmNlcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1yZ2IgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1ycGNiaW5kID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1ybmctdG9vbHMgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcnBtID0gIk1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1ycG1yZXNvbHZlID0gIk1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1yc3luYyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1ydC10ZXN0cyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXJ1YnkgPSAiTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1ydW4tcG9zdGluc3RzID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tcnh2dC11bmljb2RlID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tc2F0by1pY29uLXRoZW1lID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXNhdG8tc2NyZWVuc2hvdCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXNiYyA9ICJUYW51IEthc2tpbmVuIDx0YW51a0Bpa2kuZmk+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tc2NyZWVuID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXNjcm5zYXZlcnByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tc2VkID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1zZXJmID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXNldHNlcmlhbCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1zZXR0aW5ncy1kYWVtb24gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1zaGFkb3cgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXNoYWRvdy1zZWN1cmV0dHkgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXNoYWRvdy1zeXNyb290ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1zaGFyZWQtbWltZS1pbmZvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tc2h1dGRvd24tZGVza3RvcCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXNpZ25pbmcta2V5cyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1zbGFuZyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1zb2NhdCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tc291cmNlLWhpZ2hsaWdodCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXNwZWV4ID0gIlRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1zcGVleGRzcCA9ICJUYW51IEthc2tpbmVuIDx0YW51a0Bpa2kuZmk+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tc3FsaXRlMyA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1zcXVhc2hmcy10b29scyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1zdGFydHVwLW5vdGlmaWNhdGlvbiA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXN0YXQgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXN0cmFjZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1zdHJlc3MgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tc3VidmVyc2lvbiA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1zdWRvID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1zd2FiYmVyLW5hdGl2ZSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXN3aWcgPSAiRWR3aW4gUGxhdWNodSA8ZWR3aW4ucGxhdWNodS5jYW1hY2hvQGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1zeXNmc3V0aWxzID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1zeXNrbG9nZCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzbGludXggPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1zeXNwcm9mID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzc3RhdCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzdGVtZCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzdGVtZC1ib290ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1zeXN0ZW1kLWJvb3RjaGFydCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzdGVtZC1jb21wYXQtdW5pdHMgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXN5c3RlbWQtc2VyaWFsZ2V0dHkgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXN5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZSA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzdGVtdGFwID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzdGVtdGFwLXVwcm9iZXMgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi1zeXN2aW5pdCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXN5c3Zpbml0LWluaXR0YWIgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi10YWdsaWIgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tdGFyID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi10Y2YtYWdlbnQgPSAiUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi10Y2wgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tdGNwLXdyYXBwZXJzID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXRlc3RleHBvcnQtdGFyYmFsbCA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi10ZXhpMmh0bWwgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tdGV4aW5mbyA9ICJMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXRleGluZm8tZHVtbXktbmF0aXZlID0gIkxlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tdGlmZiA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXRpbWUgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tdGlueS1pbml0ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tdHJhY2UtY21kID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tdHJlbW9yID0gIlRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi10c2xpYiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXR0Zi1iaXRzdHJlYW0tdmVyYSA9ICJMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXR6Y29kZS1uYXRpdmUgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tdHpkYXRhID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXUtYm9vdCA9ICJNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXUtYm9vdC1mdy11dGlscyA9ICJNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXUtYm9vdC1ta2ltYWdlID0gIk1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tdWJvb3RjaGFydCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXVkZXYtZXh0cmFjb25mID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXVuZnMzID0gIlJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tdW5pZmRlZiA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXVuaW5hdGl2ZS10YXJiYWxsID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXVuemlwID0gIkFybWluIEt1c3RlciA8YWt1c3RlcjgwOEBnbWFpbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tdXBkYXRlLXJjLmQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi11c2Jpbml0ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tdXNidXRpbHMgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi11dGlsLWxpbnV4ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi11dGlsLW1hY3JvcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXY4NmQgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi12YWxhID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tdmFsZ3JpbmQgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi12aWRlb3Byb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4tdm9sYXRpbGUtYmluZHMgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXZ0ZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXZ1bGthbiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXdhZmZsZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXdhdGNoZG9nID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4td2F0Y2hkb2ctY29uZmlnID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4td2F5bGFuZCA9ICJEZW55cyBEbXl0cml5ZW5rbyA8ZGVuaXNAZGVuaXgub3JnPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXdheWxhbmQtcHJvdG9jb2xzID0gIkRlbnlzIERteXRyaXllbmtvIDxkZW5pc0BkZW5peC5vcmc+IgotUkVDSVBFX01BSU5UQUlORVJfcG4td2Via2l0Z3RrID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4td2VzdG9uID0gIkRlbnlzIERteXRyaXllbmtvIDxkZW5pc0BkZW5peC5vcmc+IgotUkVDSVBFX01BSU5UQUlORVJfcG4td2VzdG9uLWluaXQgPSAiRGVueXMgRG15dHJpeWVua28gPGRlbmlzQGRlbml4Lm9yZz4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi13Z2V0ID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXdoaWNoID0gIkxlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4td2lyZWxlc3MtdG9vbHMgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4td3BhLXN1cHBsaWNhbnQgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4teDExLWNvbW1vbiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXgxMXBlcmYgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi14MjY0ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4teGF1dGggPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi14Y2ItcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi14Y2ItdXRpbCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXhjYi11dGlsLWltYWdlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4teGNiLXV0aWwta2V5c3ltcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXhjYi11dGlsLXJlbmRlcnV0aWwgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi14Y2ItdXRpbC13bSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXhjbWlzY3Byb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4teGN1cnNvci10cmFuc3BhcmVudC10aGVtZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXhkZy11dGlscyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXhkcHlpbmZvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4teGV2ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4teGV4dHByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4teGV5ZXMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LWlucHV0LWV2ZGV2ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Ni1pbnB1dC1rZXlib2FyZCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtaW5wdXQtbGliaW5wdXQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LWlucHV0LW1vdXNlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Ni1pbnB1dC1zeW5hcHRpY3MgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LWlucHV0LXZtbW91c2UgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LXZpZGVvLWNpcnJ1cyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtdmlkZW8tZmJkZXYgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LXZpZGVvLWludGVsID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Ni12aWRlby1vbWFwID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Ni12aWRlby1vbWFwZmIgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LXZpZGVvLXZlc2EgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LXZpZGVvLXZtd2FyZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODZkZ2Fwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODZkcmlwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODZtaXNjcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2dmlkbW9kZXByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4teGhvc3QgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi14aW5lcmFtYXByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4teGluZXRkID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXhpbml0ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4teGlucHV0ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4teGlucHV0LWNhbGlicmF0b3IgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi14a2Jjb21wID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4teGtleWJvYXJkLWNvbmZpZyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXhtbHRvID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi14bW9kbWFwID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4teG9yZy1taW5pbWFsLWZvbnRzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4teHByb3AgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi14cHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi14cmFuZHIgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi14cmVzdG9wID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4teHNlcnZlci1ub2RtLWluaXQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi14c2VydmVyLXhmODYtY29uZmlnID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4teHNlcnZlci14b3JnID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4teHNldCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXh0cmFucyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXh0c2NhbCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXh1c2VyLWFjY291bnQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi14dmlkZW8tdGVzdHMgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4teHZpbmZvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4teHdpbmluZm8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi14eiA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXI4MDhAZ21haWwuY29tPiIKLVJFQ0lQRV9NQUlOVEFJTkVSX3BuLXlhc20gPSAiRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi16aXAgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyODA4QGdtYWlsLmNvbT4iCi1SRUNJUEVfTUFJTlRBSU5FUl9wbi16aXNvZnMtdG9vbHMtbmF0aXZlID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgotUkVDSVBFX01BSU5UQUlORVJfcG4temxpYiA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXI4MDhAZ21haWwuY29tPiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXBva3kvY29uZi9kaXN0cm8vaW5jbHVkZS9wb2t5LXdvcmxkLWV4Y2x1ZGUuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL2Rpc3Ryby9pbmNsdWRlL3Bva3ktd29ybGQtZXhjbHVkZS5pbmMKaW5kZXggYTY2MzViNi4uMWEyZGVhNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL2Rpc3Ryby9pbmNsdWRlL3Bva3ktd29ybGQtZXhjbHVkZS5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL2Rpc3Ryby9pbmNsdWRlL3Bva3ktd29ybGQtZXhjbHVkZS5pbmMKQEAgLTIsNyArMiwzIEBACiAjIFRoaW5ncyB3ZSBleGx1ZGUgZnJvbXcgd29ybGQgdGVzdGluZyB3aXRoaW4gdGhlIHJlZmVyZW5jZSBkaXN0cm8KICMKIAotIyBxd3QgZnJvbSBtZXRhLXF0NCwgaGFzIHBva3ktbHNiIFFBIHdhcm5pbmdzLCBxdDQgZm9yIGxzYiBvbmx5Ci1FWENMVURFX0ZST01fV09STERfcG4tcXd0ID0gIjEiCi0jIHB5dGhvbi1weXF0IGZyb20gbWV0YS1xdDQgcmVxdWlyZXMgc2lwIGZyb20gbWV0YS1vZQotRVhDTFVERV9GUk9NX1dPUkxEX3BuLXB5dGhvbi1weXF0ID0gIjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1wb2t5L2NvbmYvZGlzdHJvL3Bva3ktbHNiLmNvbmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1wb2t5L2NvbmYvZGlzdHJvL3Bva3ktbHNiLmNvbmYKaW5kZXggZTdkNjk5NS4uMjRjZmIwOCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL2Rpc3Ryby9wb2t5LWxzYi5jb25mCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXBva3kvY29uZi9kaXN0cm8vcG9reS1sc2IuY29uZgpAQCAtMTIsNCArMTIsNCBAQAogS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9wbi1saW51eC15b2N0byA9ICIgZmVhdHVyZXMvbmZzZC9uZnNkLWVuYWJsZS5zY2MiCiAKICMgVXNlIHRoZSBMVFNJIEtlcm5lbCBmb3IgTFNCIFRlc3RpbmcKLVBSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvX2xpbnV4c3RkYmFzZSA/PSAiNC4xJSIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvX2xpbnV4c3RkYmFzZSA/PSAiNC45JSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXBva3kvY29uZi9kaXN0cm8vcG9reS10aW55LmNvbmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1wb2t5L2NvbmYvZGlzdHJvL3Bva3ktdGlueS5jb25mCmluZGV4IDU2MTU2NmUuLjIwMzJiZmQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXBva3kvY29uZi9kaXN0cm8vcG9reS10aW55LmNvbmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL2Rpc3Ryby9wb2t5LXRpbnkuY29uZgpAQCAtMzgsNyArMzgsNyBAQAogIyBEaXN0cm8gY29uZmlnIGlzIGV2YWx1YXRlZCBhZnRlciB0aGUgbWFjaGluZSBjb25maWcsIHNvIHdlIGhhdmUgdG8gZXhwbGljaXRseQogIyBzZXQgdGhlIGtlcm5lbCBwcm92aWRlciB0byBvdmVycmlkZSBhIG1hY2hpbmUgY29uZmlnLgogUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID0gImxpbnV4LXlvY3RvLXRpbnkiCi1QUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0by10aW55ID89ICI0LjklIgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8tdGlueSA/PSAiNC4xMiUiCiAKICMgV2UgY2FuIHVzZSBwYWNrYWdlZ3JvdXAtY29yZS1ib290LCBidXQgaW4gdGhlIGZ1dHVyZSB3ZSBtYXkgbmVlZCBhIG5ldyBwYWNrYWdlZ3JvdXAtY29yZS10aW55CiAjUE9LWV9ERUZBVUxUX0VYVFJBX1JERVBFTkRTICs9ICJwYWNrYWdlZ3JvdXAtY29yZS1ib290IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL2Rpc3Ryby9wb2t5LmNvbmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1wb2t5L2NvbmYvZGlzdHJvL3Bva3kuY29uZgppbmRleCA2MjFkODQ1Li41N2QwMGJjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1wb2t5L2NvbmYvZGlzdHJvL3Bva3kuY29uZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1wb2t5L2NvbmYvZGlzdHJvL3Bva3kuY29uZgpAQCAtMSw3ICsxLDcgQEAKIERJU1RSTyA9ICJwb2t5IgogRElTVFJPX05BTUUgPSAiUG9reSAoWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgRGlzdHJvKSIKLURJU1RST19WRVJTSU9OID0gIjIuMy4zIgotRElTVFJPX0NPREVOQU1FID0gInB5cm8iCitESVNUUk9fVkVSU0lPTiA9ICIyLjQuMiIKK0RJU1RST19DT0RFTkFNRSA9ICJyb2NrbyIKIFNES19WRU5ET1IgPSAiLXBva3lzZGsiCiBTREtfVkVSU0lPTiA6PSAiJHtAJyR7RElTVFJPX1ZFUlNJT059Jy5yZXBsYWNlKCdzbmFwc2hvdC0ke0RBVEV9Jywnc25hcHNob3QnKX0iCiAKQEAgLTE1LDE5ICsxNSwxMyBAQAogU0RLX1ZFUlNJT05bdmFyZGVwc2V4Y2x1ZGVdID0gIkRBVEUiCiAKICMgT3ZlcnJpZGUgdGhlc2UgaW4gcG9reSBiYXNlZCBkaXN0cm9zCi1QT0tZX0RFRkFVTFRfRElTVFJPX0ZFQVRVUkVTID0gImxhcmdlZmlsZSBvcGVuZ2wgcHRlc3QgbXVsdGlhcmNoIHdheWxhbmQiCitQT0tZX0RFRkFVTFRfRElTVFJPX0ZFQVRVUkVTID0gImxhcmdlZmlsZSBvcGVuZ2wgcHRlc3QgbXVsdGlhcmNoIHdheWxhbmQgdnVsa2FuIgogUE9LWV9ERUZBVUxUX0VYVFJBX1JERVBFTkRTID0gInBhY2thZ2Vncm91cC1jb3JlLWJvb3QiCiBQT0tZX0RFRkFVTFRfRVhUUkFfUlJFQ09NTUVORFMgPSAia2VybmVsLW1vZHVsZS1hZi1wYWNrZXQiCiAKIERJU1RST19GRUFUVVJFUyA/PSAiJHtESVNUUk9fRkVBVFVSRVNfREVGQVVMVH0gJHtESVNUUk9fRkVBVFVSRVNfTElCQ30gJHtQT0tZX0RFRkFVTFRfRElTVFJPX0ZFQVRVUkVTfSIKIAotUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8gPz0gIjQuMTAlIgotUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG9fcWVtdXg4NiA/PSAiNC4xMCUiCi1QUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0b19xZW11eDg2LTY0ID89ICI0LjEwJSIKLVBSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvX3FlbXVhcm0gPz0gIjQuMTAlIgotUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG9fcWVtdW1pcHMgPz0gIjQuMTAlIgotUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG9fcWVtdW1pcHM2NCA/PSAiNC4xMCUiCi1QUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0b19xZW11cHBjID89ICI0LjEwJSIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvID89ICI0LjEyJSIKIAogU0RLX05BTUUgPSAiJHtESVNUUk99LSR7VENMSUJDfS0ke1NES19BUkNIfS0ke0lNQUdFX0JBU0VOQU1FfS0ke1RVTkVfUEtHQVJDSH0iCiBTREtQQVRIID0gIi9vcHQvJHtESVNUUk99LyR7U0RLX1ZFUlNJT059IgpAQCAtNDUsNyArMzksNyBAQAogCiBUQ0xJQkNBUFBFTkQgPSAiIgogCi1RRU1VX1RBUkdFVFMgPz0gImFybSBhYXJjaDY0IGkzODYgbWlwcyBtaXBzZWwgbWlwczY0IG1pcHM2NGVsIHBwYyB4ODZfNjQiCitRRU1VX1RBUkdFVFMgPz0gImFybSBhYXJjaDY0IGkzODYgbWlwcyBtaXBzZWwgbWlwczY0IG1pcHM2NGVsIG5pb3MyIHBwYyB4ODZfNjQiCiAjIE90aGVyIFFFTVVfVEFSR0VUUyAic2g0IgogCiBQUkVNSVJST1JTID8/PSAiXApAQCAtNzIsMjAgKzY2LDI0IEBACiBTQU5JVFlfVEVTVEVEX0RJU1RST1MgPz0gIiBcCiAgICAgICAgICAgICBwb2t5LTIuMiBcbiBcCiAgICAgICAgICAgICBwb2t5LTIuMyBcbiBcCisgICAgICAgICAgICBwb2t5LTIuNCBcbiBcCiAgICAgICAgICAgICB1YnVudHUtMTUuMDQgXG4gXAogICAgICAgICAgICAgdWJ1bnR1LTE2LjA0IFxuIFwKICAgICAgICAgICAgIHVidW50dS0xNi4xMCBcbiBcCisgICAgICAgICAgICB1YnVudHUtMTcuMDQgXG4gXAogICAgICAgICAgICAgZmVkb3JhLTI0IFxuIFwKICAgICAgICAgICAgIGZlZG9yYS0yNSBcbiBcCisgICAgICAgICAgICBmZWRvcmEtMjYgXG4gXAogICAgICAgICAgICAgY2VudG9zLTcgXG4gXAogICAgICAgICAgICAgZGViaWFuLTggXG4gXAorICAgICAgICAgICAgZGViaWFuLTkgXG4gXAogICAgICAgICAgICAgb3BlbnN1c2UtNDIuMSBcbiBcCiAgICAgICAgICAgICBvcGVuc3VzZS00Mi4yIFxuIFwKICAgICAgICAgICAgICIKICMKLSMgT0VMQVlPVVRfQUJJIGFsbG93cyB1cyB0byBub3RpZnkgdXNlcnMgd2hlbiB0aGUgZm9ybWF0IG9mIFRNUERJUiBjaGFuZ2VzIGluIAorIyBPRUxBWU9VVF9BQkkgYWxsb3dzIHVzIHRvIG5vdGlmeSB1c2VycyB3aGVuIHRoZSBmb3JtYXQgb2YgVE1QRElSIGNoYW5nZXMgaW4KICMgYW4gaW5jb21wYXRpYmxlIHdheS4gU3VjaCBjaGFuZ2VzIHNob3VsZCB1c3VhbGx5IGJlIGRldGFpbGVkIGluIHRoZSBjb21taXQKLSMgdGhhdCBicmVha3MgdGhlIGZvcm1hdCBhbmQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgZGlzY3Vzc2VkIG9uIHRoZSBtYWlsaW5nIGxpc3QgCisjIHRoYXQgYnJlYWtzIHRoZSBmb3JtYXQgYW5kIGhhdmUgYmVlbiBwcmV2aW91c2x5IGRpc2N1c3NlZCBvbiB0aGUgbWFpbGluZyBsaXN0CiAjIHdpdGggZ2VuZXJhbCBhZ3JlZW1lbnQgZnJvbSB0aGUgY29yZSB0ZWFtLgogIwogT0VMQVlPVVRfQUJJID0gIjEyIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL2xheWVyLmNvbmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1wb2t5L2NvbmYvbGF5ZXIuY29uZgppbmRleCA4YjdiMzNkLi4yNmQ3YzNiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1wb2t5L2NvbmYvbGF5ZXIuY29uZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1wb2t5L2NvbmYvbGF5ZXIuY29uZgpAQCAtOSw2ICs5LDggQEAKIEJCRklMRV9QQVRURVJOX3lvY3RvID0gIl4ke0xBWUVSRElSfS8iCiBCQkZJTEVfUFJJT1JJVFlfeW9jdG8gPSAiNSIKIAorTEFZRVJTRVJJRVNfQ09NUEFUX3lvY3RvID0gInJvY2tvIgorCiAjIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW5jcmVtZW50ZWQgb24gc2lnbmlmaWNhbnQgY2hhbmdlcyB0aGF0IHdpbGwKICMgY2F1c2UgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2l0aCBvdGhlciBsYXllcnMKIExBWUVSVkVSU0lPTl95b2N0byA9ICIzIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL2xvY2FsLmNvbmYuc2FtcGxlIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtcG9reS9jb25mL2xvY2FsLmNvbmYuc2FtcGxlCmluZGV4IDMwNGVlMDEuLjlhNTYwZGYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXBva3kvY29uZi9sb2NhbC5jb25mLnNhbXBsZQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1wb2t5L2NvbmYvbG9jYWwuY29uZi5zYW1wbGUKQEAgLTE0OSw3ICsxNDksNiBAQAogIyAgIC0gJ2J1aWxkc3RhdHMnIGNvbGxlY3QgYnVpbGQgc3RhdGlzdGljcwogIyAgIC0gJ2ltYWdlLW1rbGlicycgdG8gcmVkdWNlIHNoYXJlZCBsaWJyYXJ5IGZpbGVzIHNpemUgZm9yIGFuIGltYWdlCiAjICAgLSAnaW1hZ2UtcHJlbGluaycgaW4gb3JkZXIgdG8gcHJlbGluayB0aGUgZmlsZXN5c3RlbSBpbWFnZQotIyAgIC0gJ2ltYWdlLXN3YWInIHRvIHBlcmZvcm0gaG9zdCBzeXN0ZW0gaW50cnVzaW9uIGRldGVjdGlvbgogIyBOT1RFOiBpZiBsaXN0aW5nIG1rbGlicyAmIHByZWxpbmsgYm90aCwgdGhlbiBtYWtlIHN1cmUgbWtsaWJzIGlzIGJlZm9yZSBwcmVsaW5rCiAjIE5PVEU6IG1rbGlicyBhbHNvIG5lZWRzIHRvIGJlIGV4cGxpY2l0bHkgZW5hYmxlZCBmb3IgYSBnaXZlbiBpbWFnZSwgc2VlIGxvY2FsLmNvbmYuZXh0ZW5kZWQKIFVTRVJfQ0xBU1NFUyA/PSAiYnVpbGRzdGF0cyBpbWFnZS1ta2xpYnMgaW1hZ2UtcHJlbGluayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L2NvbmYvbGF5ZXIuY29uZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L2NvbmYvbGF5ZXIuY29uZgppbmRleCBhODQ3Yjc4Li4yYTcxODk1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9jb25mL2xheWVyLmNvbmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvY29uZi9sYXllci5jb25mCkBAIC04LDMgKzgsNSBAQAogQkJGSUxFX0NPTExFQ1RJT05TICs9ICJzZWxmdGVzdCIKIEJCRklMRV9QQVRURVJOX3NlbGZ0ZXN0ID0gIl4ke0xBWUVSRElSfS8iCiBCQkZJTEVfUFJJT1JJVFlfc2VsZnRlc3QgPSAiNSIKKworTEFZRVJTRVJJRVNfQ09NUEFUX3NlbGZ0ZXN0ID0gInJvY2tvIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvZmlsZXMvc2lnbmluZy9rZXkucGFzc3BocmFzZSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L2ZpbGVzL3NpZ25pbmcva2V5LnBhc3NwaHJhc2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI3MWE1MgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L2ZpbGVzL3NpZ25pbmcva2V5LnBhc3NwaHJhc2UKQEAgLTAsMCArMSBAQAordGVzdDEyMwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvZmlsZXMvc3RhdGljLWdyb3VwIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvZmlsZXMvc3RhdGljLWdyb3VwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMTNiOGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9maWxlcy9zdGF0aWMtZ3JvdXAKQEAgLTAsMCArMSwxNCBAQAorbWVzc2FnZWJ1czp4OjUwMDoKK3N5c3RlbWQtYnVzLXByb3h5Ong6NTAxOgorc3lzdGVtZC1uZXR3b3JrOng6NTAyOgorc3lzdGVtZC1yZXNvbHZlOng6NTAzOgorc3lzdGVtZC10aW1lc3luYzp4OjUwNDoKK3BvbGtpdGQ6eDo1MDU6Citsb2NrOng6NTA2Ogorc3lzdGVtZC1qb3VybmFsOng6NTA3OgorbmV0ZGV2Ong6NTA4OgorYXZhaGk6eDo1MDk6CithdmFoaS1hdXRvaXBkOng6NTEwOgorcnBjOng6NTExOgorcnBjdXNlcjp4OjUxMzoKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvZmlsZXMvc3RhdGljLXBhc3N3ZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L2ZpbGVzL3N0YXRpYy1wYXNzd2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEyZjg1ZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L2ZpbGVzL3N0YXRpYy1wYXNzd2QKQEAgLTAsMCArMSwxMSBAQAorbWVzc2FnZWJ1czp4OjUwMDo1MDA6Oi92YXIvbGliL2RidXM6L2Jpbi9mYWxzZQorc3lzdGVtZC1idXMtcHJveHk6eDo1MDE6NTAxOjovOi9iaW4vbm9sb2dpbgorc3lzdGVtZC1uZXR3b3JrOng6NTAyOjUwMjo6LzovYmluL25vbG9naW4KK3N5c3RlbWQtcmVzb2x2ZTp4OjUwMzo1MDM6Oi86L2Jpbi9ub2xvZ2luCitzeXN0ZW1kLXRpbWVzeW5jOng6NTA0OjUwNDo6LzovYmluL25vbG9naW4KK3BvbGtpdGQ6eDo1MDU6NTA1OjovOi9iaW4vbm9sb2dpbgorYXZhaGk6eDo1MDk6NTA5OjovOi9iaW4vbm9sb2dpbgorYXZhaGktYXV0b2lwZDp4OjUxMDo1MTA6Oi86L2Jpbi9ub2xvZ2luCitycGM6eDo1MTE6NTExOjovOi9iaW4vbm9sb2dpbgorZGlzdGNjOng6NTEyOm5vZ3JvdXA6Oi86L2Jpbi9ub2xvZ2luCitycGN1c2VyOng6NTEzOjUxMzo6L3Zhci9saWIvbmZzOi9iaW4vbm9sb2dpbgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvbGliL29lcWEvcnVudGltZS9jYXNlcy9kbmZfcnVudGltZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L2xpYi9vZXFhL3J1bnRpbWUvY2FzZXMvZG5mX3J1bnRpbWUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFjNTBlZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L2xpYi9vZXFhL3J1bnRpbWUvY2FzZXMvZG5mX3J1bnRpbWUucHkKQEAgLTAsMCArMSw0NyBAQAorZnJvbSBvZXFhLmNvcmUuZGVjb3JhdG9yLmRlcGVuZHMgaW1wb3J0IE9FVGVzdERlcGVuZHMKK2Zyb20gb2VxYS5ydW50aW1lLmNhc2VzLmRuZiBpbXBvcnQgRG5mVGVzdAorZnJvbSBvZXFhLnV0aWxzLmh0dHBzZXJ2ZXIgaW1wb3J0IEhUVFBTZXJ2aWNlCisKK2NsYXNzIERuZlNlbGZ0ZXN0KERuZlRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgaW1wb3J0IHRlbXBmaWxlCisgICAgICAgIGNscy50ZW1wX2RpciA9IHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeShwcmVmaXg9Im9lcWEtcmVtb3RlZmVlZHMtIikKKyAgICAgICAgY2xzLnJlcG9fc2VydmVyID0gSFRUUFNlcnZpY2Uob3MucGF0aC5qb2luKGNscy50Yy50ZFsnV09SS0RJUiddLCAnb2Utcm9vdGZzLXJlcG8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzLnRjLnRhcmdldC5zZXJ2ZXJfaXApCisgICAgICAgIGNscy5yZXBvX3NlcnZlci5zdGFydCgpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICBjbHMucmVwb19zZXJ2ZXIuc3RvcCgpCisgICAgICAgIGNscy50ZW1wX2Rpci5jbGVhbnVwKCkKKworICAgIEBPRVRlc3REZXBlbmRzKFsnZG5mLkRuZkJhc2ljVGVzdC50ZXN0X2RuZl9oZWxwJ10pCisgICAgZGVmIHRlc3RfdmVyaWZ5X3BhY2thZ2VfZmVlZHMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiBDaGVjayBjb3JyZWN0IHNldHRpbmcgb2YgUEFDS0FHRV9GRUVEX1VSSVMgdmFyCisgICAgICAgIEV4cGVjdGVkOiAxLiBGZWVkcyB3ZXJlIGNvcnJlY3RseSBzZXQgZm9yIGRuZgorICAgICAgICAgICAgICAgICAgMi4gVXBkYXRlIHJlY292ZXJzIHBhY2thZ2VzIGZyb20gaG9zdCdzIHJlcG8KKyAgICAgICAgQXV0aG9yOiBIdW1iZXJ0byBJYmFycmEgPGh1bWJlcnRvLmliYXJyYS5sb3BlekBpbnRlbC5jb20+CisgICAgICAgIEF1dGhvcjogQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisgICAgICAgICMgV2hlbiB3ZSBjcmVhdGVkIGFuIGltYWdlLCB3ZSBoYWQgdG8gc3VwcGx5IGZha2UgaXAgYW5kIHBvcnQKKyAgICAgICAgIyBmb3IgdGhlIGZlZWRzLiBOb3cgd2UgY2FuIHBhdGNoIHRoZSByZWFsIG9uZXMgaW50byB0aGUgY29uZmlnIGZpbGUuCisgICAgICAgIHRlbXBfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBfZGlyLm5hbWUsICd0bXAucmVwbycpCisgICAgICAgIHNlbGYudGMudGFyZ2V0LmNvcHlGcm9tKCIvZXRjL3l1bS5yZXBvcy5kL29lLXJlbW90ZS1yZXBvLnJlcG8iLCB0ZW1wX2ZpbGUpCisgICAgICAgIGZpeGVkX2NvbmZpZyA9IG9wZW4odGVtcF9maWxlLCAiciIpLnJlYWQoKS5yZXBsYWNlKCJib2d1c19pcCIsIHNlbGYudGMudGFyZ2V0LnNlcnZlcl9pcCkucmVwbGFjZSgiYm9ndXNfcG9ydCIsIHN0cihzZWxmLnJlcG9fc2VydmVyLnBvcnQpKQorICAgICAgICB3aXRoIG9wZW4odGVtcF9maWxlLCAidyIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGZpeGVkX2NvbmZpZykKKyAgICAgICAgc2VsZi50Yy50YXJnZXQuY29weVRvKHRlbXBfZmlsZSwgIi9ldGMveXVtLnJlcG9zLmQvb2UtcmVtb3RlLXJlcG8ucmVwbyIpCisKKyAgICAgICAgaW1wb3J0IHJlCisgICAgICAgICMgVXNlICcteScgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlOiBhdXRvbWF0aWNhbGx5IGltcG9ydCB0aGUgZmVlZCBzaWduaW5nIGtleQorICAgICAgICBvdXRwdXRfbWFrZWNhY2hlID0gc2VsZi5kbmYoJy12eSBtYWtlY2FjaGUnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociIuKkZhaWxlZCB0byBzeW5jaHJvbml6ZSBjYWNoZSIsIG91dHB1dF9tYWtlY2FjaGUsIHJlLkRPVEFMTCkgaXMgTm9uZSwgbXNnID0gImRuZiBtYWtlY2FjaGUgZmFpbGVkIHRvIHN5bmNocm9uaXplIHJlcG86ICVzIiAlKG91dHB1dF9tYWtlY2FjaGUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociIuKk1ldGFkYXRhIGNhY2hlIGNyZWF0ZWQiLCBvdXRwdXRfbWFrZWNhY2hlLCByZS5ET1RBTEwpIGlzIG5vdCBOb25lLCBtc2cgPSAiZG5mIG1ha2VjYWNoZSBmYWlsZWQ6ICVzIiAlKG91dHB1dF9tYWtlY2FjaGUpKQorCisgICAgICAgIG91dHB1dF9yZXBvaW5mbyA9IHNlbGYuZG5mKCctdiByZXBvaW5mbycpCisgICAgICAgIG1hdGNob2JqID0gcmUubWF0Y2gociIuKlJlcG8tcGtnc1xzKjpccyooP1A8bl9wa2dzPlswLTldKykiLCBvdXRwdXRfcmVwb2luZm8sIHJlLkRPVEFMTCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGNob2JqIGlzIG5vdCBOb25lLCBtc2cgPSAiQ291bGQgbm90IGZpbmQgdGhlIGFtb3VudCBvZiBwYWNrYWdlcyBpbiBkbmYgcmVwb2luZm8gb3V0cHV0OiAlcyIgJShvdXRwdXRfcmVwb2luZm8pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50KG1hdGNob2JqLmdyb3VwKCduX3BrZ3MnKSkgPiAwLCBtc2cgPSAiQW1vdW50IG9mIHJlbW90ZSBwYWNrYWdlcyBpcyBub3QgbW9yZSB0aGFuIHplcm86ICVzXG4iICUob3V0cHV0X3JlcG9pbmZvKSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L2xpYi9vZXFhL3J1bnRpbWUvY2FzZXMvc2VsZnRlc3QucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9saWIvb2VxYS9ydW50aW1lL2Nhc2VzL3NlbGZ0ZXN0LnB5CmluZGV4IGU0OTg1YTYuLjE5ZGU3NDAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L2xpYi9vZXFhL3J1bnRpbWUvY2FzZXMvc2VsZnRlc3QucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvbGliL29lcWEvcnVudGltZS9jYXNlcy9zZWxmdGVzdC5weQpAQCAtMSw3ICsxLDUgQEAKIGZyb20gb2VxYS5ydW50aW1lLmNhc2UgaW1wb3J0IE9FUnVudGltZVRlc3RDYXNlCiBmcm9tIG9lcWEuY29yZS5kZWNvcmF0b3IuZGVwZW5kcyBpbXBvcnQgT0VUZXN0RGVwZW5kcwotZnJvbSBvZXFhLnJ1bnRpbWUuY2FzZXMuZG5mIGltcG9ydCBEbmZUZXN0Ci1mcm9tIG9lcWEudXRpbHMuaHR0cHNlcnZlciBpbXBvcnQgSFRUUFNlcnZpY2UKIAogY2xhc3MgU2VsZnRlc3QoT0VSdW50aW1lVGVzdENhc2UpOgogCkBAIC0zMSw0MyArMjksMyBAQAogCiAgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oInNvY2F0IC1WIikKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzdGF0dXMsIDAsIG1zZz0ic29jYXQgaXMgc3RpbGwgaW5zdGFsbGVkIikKLQotCi1jbGFzcyBEbmZTZWxmdGVzdChEbmZUZXN0KToKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBzZXRVcENsYXNzKGNscyk6Ci0gICAgICAgIGNscy5yZXBvX3NlcnZlciA9IEhUVFBTZXJ2aWNlKG9zLnBhdGguam9pbihjbHMudGMudGRbJ1dPUktESVInXSwgJ29lLXJvb3Rmcy1yZXBvJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscy50Yy50YXJnZXQuc2VydmVyX2lwKQotICAgICAgICBjbHMucmVwb19zZXJ2ZXIuc3RhcnQoKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKLSAgICAgICAgY2xzLnJlcG9fc2VydmVyLnN0b3AoKQotCi0gICAgQE9FVGVzdERlcGVuZHMoWydzc2guU1NIVGVzdC50ZXN0X3NzaCddKQotICAgIGRlZiB0ZXN0X3ZlcmlmeV9wYWNrYWdlX2ZlZWRzKHNlbGYpOgotICAgICAgICAiIiIKLSAgICAgICAgU3VtbWFyeTogQ2hlY2sgY29ycmVjdCBzZXR0aW5nIG9mIFBBQ0tBR0VfRkVFRF9VUklTIHZhcgotICAgICAgICBFeHBlY3RlZDogMS4gRmVlZHMgd2VyZSBjb3JyZWN0bHkgc2V0IGZvciBkbmYKLSAgICAgICAgICAgICAgICAgIDIuIFVwZGF0ZSByZWNvdmVycyBwYWNrYWdlcyBmcm9tIGhvc3QncyByZXBvCi0gICAgICAgIEF1dGhvcjogSHVtYmVydG8gSWJhcnJhIDxodW1iZXJ0by5pYmFycmEubG9wZXpAaW50ZWwuY29tPgotICAgICAgICBBdXRob3I6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+Ci0gICAgICAgICIiIgotICAgICAgICAjIFdoZW4gd2UgY3JlYXRlZCBhbiBpbWFnZSwgd2UgaGFkIHRvIHN1cHBseSBmYWtlIGlwIGFuZCBwb3J0Ci0gICAgICAgICMgZm9yIHRoZSBmZWVkcy4gTm93IHdlIGNhbiBwYXRjaCB0aGUgcmVhbCBvbmVzIGludG8gdGhlIGNvbmZpZyBmaWxlLgotICAgICAgICBpbXBvcnQgdGVtcGZpbGUKLSAgICAgICAgdGVtcF9maWxlID0gdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KHByZWZpeD0ib2VxYS1yZW1vdGVmZWVkcy0iKS5uYW1lCi0gICAgICAgIHNlbGYudGMudGFyZ2V0LmNvcHlGcm9tKCIvZXRjL3l1bS5yZXBvcy5kL29lLXJlbW90ZS1yZXBvLnJlcG8iLCB0ZW1wX2ZpbGUpCi0gICAgICAgIGZpeGVkX2NvbmZpZyA9IG9wZW4odGVtcF9maWxlLCAiciIpLnJlYWQoKS5yZXBsYWNlKCJib2d1c19pcCIsIHNlbGYudGMudGFyZ2V0LnNlcnZlcl9pcCkucmVwbGFjZSgiYm9ndXNfcG9ydCIsIHN0cihzZWxmLnJlcG9fc2VydmVyLnBvcnQpKQotICAgICAgICBvcGVuKHRlbXBfZmlsZSwgInciKS53cml0ZShmaXhlZF9jb25maWcpCi0gICAgICAgIHNlbGYudGMudGFyZ2V0LmNvcHlUbyh0ZW1wX2ZpbGUsICIvZXRjL3l1bS5yZXBvcy5kL29lLXJlbW90ZS1yZXBvLnJlcG8iKQotCi0gICAgICAgIGltcG9ydCByZQotICAgICAgICBvdXRwdXRfbWFrZWNhY2hlID0gc2VsZi5kbmYoJ21ha2VjYWNoZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIi4qTWV0YWRhdGEgY2FjaGUgY3JlYXRlZCIsIG91dHB1dF9tYWtlY2FjaGUsIHJlLkRPVEFMTCkgaXMgbm90IE5vbmUsIG1zZyA9ICJkbmYgbWFrZWNhY2hlIGZhaWxlZDogJXMiICUob3V0cHV0X21ha2VjYWNoZSkpCi0KLSAgICAgICAgb3V0cHV0X3JlcG9pbmZvID0gc2VsZi5kbmYoJ3JlcG9pbmZvJykKLSAgICAgICAgbWF0Y2hvYmogPSByZS5tYXRjaChyIi4qUmVwby1wa2dzXHMqOlxzKig/UDxuX3BrZ3M+WzAtOV0rKSIsIG91dHB1dF9yZXBvaW5mbywgcmUuRE9UQUxMKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2hvYmogaXMgbm90IE5vbmUsIG1zZyA9ICJDb3VsZCBub3QgZmluZCB0aGUgYW1vdW50IG9mIHBhY2thZ2VzIGluIGRuZiByZXBvaW5mbyBvdXRwdXQ6ICVzIiAlKG91dHB1dF9yZXBvaW5mbykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnQobWF0Y2hvYmouZ3JvdXAoJ25fcGtncycpKSA+IDAsIG1zZyA9ICJBbW91bnQgb2YgcmVtb3RlIHBhY2thZ2VzIGlzIG5vdCBtb3JlIHRoYW4gemVybzogJXNcbiIgJShvdXRwdXRfcmVwb2luZm8pKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvZXh0ZXJuYWwtbGF5ZXIucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9leHRlcm5hbC1sYXllci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWIxYWZhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvZXh0ZXJuYWwtbGF5ZXIucHkKQEAgLTAsMCArMSwxNiBAQAorI2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEuc2VsZnRlc3QuY2FzZSBpbXBvcnQgT0VTZWxmdGVzdFRlc3RDYXNlCisjZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKKworY2xhc3MgSW1wb3J0ZWRUZXN0cyhPRVNlbGZ0ZXN0VGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdW5jb25kaXRpb25hbF9wYXNzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogRG9lc24ndCBjaGVjayBhbnl0aGluZywgdXNlZCB0byBjaGVjayBpbXBvcnQgdGVzdCBmcm9tIG90aGVyIGxheWVycy4KKyAgICAgICAgRXhwZWN0ZWQ6IDEuIFBhc3MgdW5jb25kaXRpb25hbGx5CisgICAgICAgIFByb2R1Y3Q6IG9lLWNvcmUKKyAgICAgICAgQXV0aG9yOiBNYXJpYW5vIExvcGV6IDxtYXJpYW5vLmxvcGV6QGludGVsLmNvbQorICAgICAgICAiIiIKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIFRydWUsIG1zZyA9ICJJbXBvc3NpYmxlIHRvIGZhaWwgdGhpcyB0ZXN0IikKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2RldnRvb2wtdGVzdC1wYXRjaC1nei5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2RldnRvb2wtdGVzdC1wYXRjaC1nei5iYgppbmRleCBlNDVlZTlmLi5mYzM3OTk1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZGV2dG9vbC9kZXZ0b29sLXRlc3QtcGF0Y2gtZ3ouYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2RldnRvb2wvZGV2dG9vbC10ZXN0LXBhdGNoLWd6LmJiCkBAIC02LDYgKzYsNyBAQAogU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMveHJlc3RvcC94cmVzdG9wLTAuNC50YXIuZ3ogXAogICAgICAgICAgICBmaWxlOi8vcmVhZG1lLnBhdGNoLmd6IFwKICAgICAgICAgICAgIgorVVBTVFJFQU1fVkVSU0lPTl9VTktOT1dOID0gIjEiCiAKIFMgPSAiJHtXT1JLRElSfS94cmVzdG9wLTAuNCIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2RldnRvb2wvZGV2dG9vbC11cGdyYWRlLXRlc3QxXzEuNS4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2RldnRvb2wvZGV2dG9vbC11cGdyYWRlLXRlc3QxXzEuNS4zLmJiCmluZGV4IDQwNDliZTIuLjMzM2VjYWMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2RldnRvb2wtdXBncmFkZS10ZXN0MV8xLjUuMy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZGV2dG9vbC9kZXZ0b29sLXVwZ3JhZGUtdGVzdDFfMS41LjMuYmIKQEAgLTQsNiArNCw4IEBACiAKIFNSQ19VUkkgPSAiaHR0cDovL3d3dy5pdmFyY2guY29tL3Byb2dyYW1zL3NvdXJjZXMvcHYtJHtQVn0udGFyLmd6IFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtQWRkLWEtbm90ZS1saW5lLXRvLXRoZS1xdWljay1yZWZlcmVuY2UucGF0Y2giCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL3d3dy5pdmFyY2guY29tL3Byb2dyYW1zL3B2LnNodG1sIgorUkVDSVBFX05PX1VQREFURV9SRUFTT04gPSAiVGhpcyByZWNpcGUgaXMgdXNlZCB0byB0ZXN0IGRldnRvb2wgdXBncmFkZSBmZWF0dXJlIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiOTM2NWQ4NmJkODg0MjIyYjRiZjEwMzliNWE5ZWQxYmQiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjgxYmNjYTk3ODRiZjNjYjIyMDdlNjgyMzZkMWY2OGUyYWE3YjgwZjk5OWI1NzUwZGM3N2RjZDc1NmU4MWZiYyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2RldnRvb2wtdXBncmFkZS10ZXN0MV8xLjUuMy5iYi51cGdyYWRlZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2RldnRvb2wtdXBncmFkZS10ZXN0MV8xLjUuMy5iYi51cGdyYWRlZAppbmRleCA0MmMwNzA1Li45ZDk0ZjY3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZGV2dG9vbC9kZXZ0b29sLXVwZ3JhZGUtdGVzdDFfMS41LjMuYmIudXBncmFkZWQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2RldnRvb2wvZGV2dG9vbC11cGdyYWRlLXRlc3QxXzEuNS4zLmJiLnVwZ3JhZGVkCkBAIC00LDYgKzQsOCBAQAogCiBTUkNfVVJJID0gImh0dHA6Ly93d3cuaXZhcmNoLmNvbS9wcm9ncmFtcy9zb3VyY2VzL3B2LSR7UFZ9LnRhci5neiBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLUFkZC1hLW5vdGUtbGluZS10by10aGUtcXVpY2stcmVmZXJlbmNlLnBhdGNoIgorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly93d3cuaXZhcmNoLmNvbS9wcm9ncmFtcy9wdi5zaHRtbCIKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIlRoaXMgcmVjaXBlIGlzIHVzZWQgdG8gdGVzdCBkZXZ0b29sIHVwZ3JhZGUgZmVhdHVyZSIKIAogU1JDX1VSSVttZDVzdW1dID0gIjA2MmJjYTVmZjMzZGYxZGQwOTQ3MmU3ZmMzYmJlMzMyIgogU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlkZDQ1MzkxODA2YjBlZDIxNWFiZWU0YzVhYzE1OTdkMDE4YzM4NmZlOWMxZjVhZmQyZjZiYzNiMDdmZDgyYzMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZGV2dG9vbC9kZXZ0b29sLXVwZ3JhZGUtdGVzdDJfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2RldnRvb2wvZGV2dG9vbC11cGdyYWRlLXRlc3QyX2dpdC5iYgppbmRleCA0NTA2MzZlLi4wN2I4MzI3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZGV2dG9vbC9kZXZ0b29sLXVwZ3JhZGUtdGVzdDJfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2RldnRvb2wtdXBncmFkZS10ZXN0Ml9naXQuYmIKQEAgLTEyLDYgKzEyLDggQEAKIFBSID0gInIyIgogCiBTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2RidXMtd2FpdCIKK1VQU1RSRUFNX0NIRUNLX0NPTU1JVFMgPSAiMSIKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIlRoaXMgcmVjaXBlIGlzIHVzZWQgdG8gdGVzdCBkZXZ0b29sIHVwZ3JhZGUgZmVhdHVyZSIKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2RldnRvb2wvZGV2dG9vbC11cGdyYWRlLXRlc3QyX2dpdC5iYi51cGdyYWRlZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2RldnRvb2wtdXBncmFkZS10ZXN0Ml9naXQuYmIudXBncmFkZWQKaW5kZXggMGQyZTE5ZS4uMzJlYzRiMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2RldnRvb2wvZGV2dG9vbC11cGdyYWRlLXRlc3QyX2dpdC5iYi51cGdyYWRlZAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZGV2dG9vbC9kZXZ0b29sLXVwZ3JhZGUtdGVzdDJfZ2l0LmJiLnVwZ3JhZGVkCkBAIC0xMSw2ICsxMSw4IEBACiBQViA9ICIwLjErZ2l0JHtTUkNQVn0iCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvZGJ1cy13YWl0IgorVVBTVFJFQU1fQ0hFQ0tfQ09NTUlUUyA9ICIxIgorUkVDSVBFX05PX1VQREFURV9SRUFTT04gPSAiVGhpcyByZWNpcGUgaXMgdXNlZCB0byB0ZXN0IGRldnRvb2wgdXBncmFkZSBmZWF0dXJlIgogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9jb25mL2xheWVyLmNvbmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9jb25mL2xheWVyLmNvbmYKaW5kZXggYWNhMTYzMy4uYTE1NTE2YSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vY29uZi9sYXllci5jb25mCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL2NvbmYvbGF5ZXIuY29uZgpAQCAtMTMsMyArMTMsNSBAQAogTEFZRVJWRVJTSU9OX3NrZWxldG9uID0gIjEiCiAKIExBWUVSREVQRU5EU19za2VsZXRvbiA9ICJjb3JlIgorCitMQVlFUlNFUklFU19DT01QQVRfc2tlbGV0b24gPSAicm9ja28iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvUkVBRE1FLmhhcmR3YXJlIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL1JFQURNRS5oYXJkd2FyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGM1YWZhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL1JFQURNRS5oYXJkd2FyZQpAQCAtMCwwICsxLDQwNyBAQAorICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBIYXJkd2FyZSBSZWZlcmVuY2UgQlNQcyBSRUFETUUKKyAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZmlsZSBnaXZlcyBkZXRhaWxzIGFib3V0IHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0IGhhcmR3YXJlIHJlZmVyZW5jZSBCU1BzLgorVGhlIG1hY2hpbmVzIHN1cHBvcnRlZCBjYW4gYmUgc2VlbiBpbiB0aGUgY29uZi9tYWNoaW5lLyBkaXJlY3RvcnkgYW5kIGFyZSBsaXN0ZWQgCitiZWxvdy4gVGhlcmUgaXMgb25lIHBlciBzdXBwb3J0ZWQgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlIGFuZCB0aGVzZSBhcmUgcHJpbWFyaWx5Cit1c2VkIHRvIHZhbGlkYXRlIHRoYXQgdGhlIFlvY3RvIFByb2plY3Qgd29ya3Mgb24gdGhlIGhhcmR3YXJlIGFyY3RlY3R1cmVzIG9mIAordGhvc2UgbWFjaGluZXMuCisKK0lmIHlvdSBhcmUgaW4gZG91YnQgYWJvdXQgdXNpbmcgUG9reS9PcGVuRW1iZWRkZWQvWW9jdG8gUHJvamVjdCB3aXRoIHlvdXIgaGFyZHdhcmUsIAorY29uc3VsdCB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgeW91ciBib2FyZC9kZXZpY2UuCisKK1N1cHBvcnQgZm9yIGFkZGl0aW9uYWwgZGV2aWNlcyBpcyBub3JtYWxseSBhZGRlZCBieSBhZGRpbmcgQlNQIGxheWVycyB0byB5b3VyIAorY29uZmlndXJhdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gcGxlYXNlIHNlZSB0aGUgWW9jdG8gQm9hcmQgU3VwcG9ydCBQYWNrYWdlIAorKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGUgLSBkb2N1bWVudGF0aW9uIHNvdXJjZSBpcyBpbiBkb2N1bWVudGF0aW9uL2JzcGd1aWRlIG9yIAorZG93bmxvYWQgdGhlIFBERiBmcm9tOgorCisgICBodHRwOi8veW9jdG9wcm9qZWN0Lm9yZy9kb2N1bWVudGF0aW9uCisKK05vdGUgdGhhdCB0aGVzZSByZWZlcmVuY2UgQlNQcyB1c2UgdGhlIGxpbnV4LXlvY3RvIGtlcm5lbCBhbmQgaW4gZ2VuZXJhbCBkb24ndAorcHVsbCBpbiBiaW5hcnkgbW9kdWxlIHN1cHBvcnQgZm9yIHRoZSBwbGF0Zm9ybXMuIFRoaXMgbWVhbnMgc29tZSBkZXZpY2UgZnVuY3Rpb25hbGl0eQorbWF5IGJlIGxpbWl0ZWQgY29tcGFyZWQgdG8gYSAnZnVsbCcgQlNQIHdoaWNoIG1heSBiZSBhdmFpbGFibGUuCisKKworSGFyZHdhcmUgUmVmZXJlbmNlIEJvYXJkcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZm9sbG93aW5nIGJvYXJkcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBtZXRhLXlvY3RvLWJzcCBsYXllcjoKKworICAqIFRleGFzIEluc3RydW1lbnRzIEJlYWdsZWJvbmUgKGJlYWdsZWJvbmUpCisgICogRnJlZXNjYWxlIE1QQzgzMTVFLVJEQiAobXBjODMxNWUtcmRiKQorICAqIFViaXF1aXRpIE5ldHdvcmtzIEVkZ2VSb3V0ZXIgTGl0ZSAoZWRnZXJvdXRlcikKKyAgKiBHZW5lcmFsIElBIHBsYXRmb3JtcyAoZ2VuZXJpY3g4NiBhbmQgZ2VuZXJpY3g4Ni02NCkKKworRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZSBib2FyZCdzIHNlY3Rpb24gYmVsb3cuIFRoZSBhcHByb3ByaWF0ZSBNQUNISU5FCit2YXJpYWJsZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBib2FyZCBpcyBnaXZlbiBpbiBicmFja2V0cy4KKworUmVmZXJlbmNlIEJvYXJkIE1haW50ZW5hbmNlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU2VuZCBwdWxsIHJlcXVlc3RzLCBwYXRjaGVzLCBjb21tZW50cyBvciBxdWVzdGlvbnMgYWJvdXQgbWV0YS15b2N0by1ic3BzIHRvIHBva3lAeW9jdG9wcm9qZWN0Lm9yZworCitNYWludGFpbmVyczogS2V2aW4gSGFvIDxrZXhpbi5oYW9Ad2luZHJpdmVyLmNvbT4KKyAgICAgICAgICAgICBCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4KKworQ29uc3VtZXIgRGV2aWNlcworPT09PT09PT09PT09PT09PQorCitUaGUgZm9sbG93aW5nIGNvbnN1bWVyIGRldmljZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgbWV0YS15b2N0by1ic3AgbGF5ZXI6CisKKyAgKiBJbnRlbCB4ODYgYmFzZWQgUENzIGFuZCBkZXZpY2VzIChnZW5lcmljeDg2KQorICAqIFViaXF1aXRpIE5ldHdvcmtzIEVkZ2VSb3V0ZXIgTGl0ZSAoZWRnZXJvdXRlcikKKworRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZSBkZXZpY2UncyBzZWN0aW9uIGJlbG93LiBUaGUgYXBwcm9wcmlhdGUgTUFDSElORQordmFyaWFibGUgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgZGV2aWNlIGlzIGdpdmVuIGluIGJyYWNrZXRzLgorCisKKworICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmljIEhhcmR3YXJlIERvY3VtZW50YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworSW50ZWwgeDg2IGJhc2VkIFBDcyBhbmQgZGV2aWNlcyAoZ2VuZXJpY3g4NiopCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGdlbmVyaWN4ODYgYW5kIGdlbmVyaWN4ODYtNjQgTUFDSElORSBhcmUgdGVzdGVkIG9uIHRoZSBmb2xsb3dpbmcgcGxhdGZvcm1zOgorCitJbnRlbCBYZW9uL0NvcmUgaS1TZXJpZXM6CisgICsgSW50ZWwgTlVDNSBTZXJpZXMgLSBpeC01Mnh4IFNlcmllcyBTT0MgKEJyb2Fkd2VsbCkKKyAgKyBJbnRlbCBOVUM2IFNlcmllcyAtIGl4LTYyeHggU2VyaWVzIFNPQyAoU2t5bGFrZSkKKyAgKyBJbnRlbCBTaHVtd2F5IFhlb24gU2VydmVyCisKK0ludGVsIEF0b20gcGxhdGZvcm1zOgorICArIE1pbm5vd0JvYXJkIE1BWCAtIEUzODI1IFNPQyAoQmF5IFRyYWlsKQorICArIE1pbm5vd0JvYXJkIE1BWCAtIFR1cmJvdCAoQURJIEVuZ2luZWVyaW5nKSAtIEUzODI2IFNPQyAoQmF5IFRyYWlsKQorICAgIC0gVGhlc2UgYm9hcmRzIGNhbiBiZSBlaXRoZXIgMzJib3Qgb3IgNjRiaXQgbW9kZXMgZGVwZW5kaW5nIG9uIGZpcm13YXJlCisgICAgLSBTZWUgbWlubm93Ym9hcmQub3JnIGZvciBkZXRhaWxzIAorICArIEludGVsIEJyYXN3ZWxsIFNPQworCithbmQgaXMgbGlrZWx5IHRvIHdvcmsgb24gbWFueSB1bmxpc3RlZCBBdG9tL0NvcmUvWGVvbiBiYXNlZCBkZXZpY2VzLiBUaGUgTUFDSElORQordHlwZSBzdXBwb3J0cyBldGhlcm5ldCwgd2lmaSwgc291bmQsIGFuZCBJbnRlbC92ZXNhIGdyYXBoaWNzIGJ5IGRlZmF1bHQgaW4KK2FkZGl0aW9uIHRvIGNvbW1vbiBQQyBpbnB1dCBkZXZpY2VzLCBidXNzZXMsIGFuZCBzbyBvbi4KKworRGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UsIGl0IGNhbiBib290IGZyb20gYSB0cmFkaXRpb25hbCBoYXJkLWRpc2ssIGEgVVNCIGRldmljZSwKK29yIG92ZXIgdGhlIG5ldHdvcmsuIFdyaXRpbmcgZ2VuZXJhdGVkIGltYWdlcyB0byBwaHlzaWNhbCBtZWRpYSBpcworc3RyYWlnaHRmb3J3YXJkIHdpdGggYSBjYXZlYXQgZm9yIFVTQiBkZXZpY2VzLiBUaGUgZm9sbG93aW5nIGV4YW1wbGVzIGFzc3VtZSB0aGUKK3RhcmdldCBib290IGRldmljZSBpcyAvZGV2L3NkYiwgYmUgc3VyZSB0byB2ZXJpZnkgdGhpcyBhbmQgdXNlIHRoZSBjb3JyZWN0CitkZXZpY2UgYXMgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBhcmUgcnVuIGFzIHJvb3QgYW5kIGFyZSBub3QgcmV2ZXJzYWJsZS4KKworVVNCIERldmljZToKKyAgMS4gQnVpbGQgYSBsaXZlIGltYWdlLiBUaGlzIGltYWdlIHR5cGUgY29uc2lzdHMgb2YgYSBzaW1wbGUgZmlsZXN5c3RlbQorICAgICB3aXRob3V0IGEgcGFydGl0aW9uIHRhYmxlLCB3aGljaCBpcyBzdWl0YWJsZSBmb3IgVVNCIGtleXMsIGFuZCB3aXRoIHRoZQorICAgICBkZWZhdWx0IHNldHVwIGZvciB0aGUgZ2VuZXJpY3g4NiBtYWNoaW5lLCB0aGlzIGltYWdlIHR5cGUgaXMgYnVpbHQKKyAgICAgYXV0b21hdGljYWxseSBmb3IgYW55IGltYWdlIHlvdSBidWlsZC4gRm9yIGV4YW1wbGU6CisKKyAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2UtbWluaW1hbAorCisgIDIuIFVzZSB0aGUgImRkIiB1dGlsaXR5IHRvIHdyaXRlIHRoZSBpbWFnZSB0byB0aGUgcmF3IGJsb2NrIGRldmljZS4gRm9yCisgICAgIGV4YW1wbGU6CisKKyAgICAgIyBkZCBpZj1jb3JlLWltYWdlLW1pbmltYWwtZ2VuZXJpY3g4Ni5oZGRpbWcgb2Y9L2Rldi9zZGIKKworICBJZiB0aGUgZGV2aWNlIGZhaWxzIHRvIGJvb3Qgd2l0aCAiQm9vdCBlcnJvciIgZGlzcGxheWVkLCBvciBhcHBhcmVudGx5CisgIHN0b3BzIGp1c3QgYWZ0ZXIgdGhlIFNZU0xJTlVYIHZlcnNpb24gYmFubmVyLCBpdCBpcyBsaWtlbHkgdGhlIEJJT1MgY2Fubm90CisgIHVuZGVyc3RhbmQgdGhlIHBoeXNpY2FsIGxheW91dCBvZiB0aGUgZGlzayAob3IgcmF0aGVyIGl0IGV4cGVjdHMgYQorICBwYXJ0aWN1bGFyIGxheW91dCBhbmQgY2Fubm90IGhhbmRsZSBhbnl0aGluZyBlbHNlKS4gVGhlcmUgYXJlIHR3byBwb3NzaWJsZQorICBzb2x1dGlvbnMgdG8gdGhpcyBwcm9ibGVtOgorCisgIDEuIENoYW5nZSB0aGUgQklPUyBVU0IgRGV2aWNlIHNldHRpbmcgdG8gSEREIG1vZGUuIFRoZSBsYWJlbCB3aWxsIHZhcnkgYnkKKyAgICAgZGV2aWNlLCBidXQgdGhlIGlkZWEgaXMgdG8gZm9yY2UgQklPUyB0byByZWFkIHRoZSBDeWxpbmRlci9IZWFkL1NlY3RvcgorICAgICBnZW9tZXRyeSBmcm9tIHRoZSBkZXZpY2UuCisKKyAgMi4gVXNlIGEgIi53aWMiIGltYWdlIHdpdGggYW4gRUZJIHBhcnRpdGlvbgorCisgICAgIGEpIFdpdGggYSBkZWZhdWx0IGdydWItZWZpIGJvb3Rsb2FkZXI6CisgICAgICMgZGQgaWY9Y29yZS1pbWFnZS1taW5pbWFsLWdlbmVyaWN4ODYtNjQud2ljIG9mPS9kZXYvc2RiCisKKyAgICAgYikgVXNlIHN5c3RlbWQtYm9vdCBpbnN0ZWFkCisgICAgIC0gQnVpbGQgYW4gaW1hZ2Ugd2l0aCBFRklfUFJPVklERVI9InN5c3RlbWQtYm9vdCIgdGhlbiB1c2UgdGhlIGFib3ZlCisgICAgICAgZGQgY29tbWFuZCB0byB3cml0ZSB0aGUgaW1hZ2UgdG8gYSBVU0Igc3RpY2suCisKKworVGV4YXMgSW5zdHJ1bWVudHMgQmVhZ2xlYm9uZSAoYmVhZ2xlYm9uZSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBCZWFnbGVib25lIGlzIGFuIEFSTSBDb3J0ZXgtQTggZGV2ZWxvcG1lbnQgYm9hcmQgd2l0aCBVU0IsIEV0aGVybmV0LCAyRC8zRAorYWNjZWxlcmF0ZWQgZ3JhcGhpY3MsIGF1ZGlvLCBzZXJpYWwsIEpUQUcsIGFuZCBTRC9NTUMuIFRoZSBCbGFjayBhZGRzIGEgZmFzdGVyCitDUFUsIG1vcmUgUkFNLCBlTU1DIGZsYXNoIGFuZCBhIG1pY3JvIEhETUkgcG9ydC4gVGhlIGJlYWdsZWJvbmUgTUFDSElORSBpcwordGVzdGVkIG9uIHRoZSBmb2xsb3dpbmcgcGxhdGZvcm1zOgorCisgIG8gQmVhZ2xlYm9uZSBCbGFjayBBNgorICBvIEJlYWdsZWJvbmUgQTYgKHRoZSBvcmlnaW5hbCAiV2hpdGUiIG1vZGVsKQorCitUaGUgQmVhZ2xlYm9uZSBCbGFjayBoYXMgZU1NQywgd2hpbGUgdGhlIFdoaXRlIGRvZXMgbm90LiBQcmVzc2luZyB0aGUgVVNFUi9CT09UCitidXR0b24gd2hlbiBwb3dlcmluZyBvbiB3aWxsIHRlbXBvcmFyaWx5IGNoYW5nZSB0aGUgYm9vdCBvcmRlci4gQnV0IGZvciB0aGUgc2FrZQorb2Ygc2ltcGxpY2l0eSwgdGhlc2UgaW5zdHJ1Y3Rpb25zIGFzc3VtZSB5b3UgaGF2ZSBlcmFzZWQgdGhlIGVNTUMgb24gdGhlIEJsYWNrLAorc28gaXRzIGJvb3QgYmVoYXZpb3IgbWF0Y2hlcyB0aGF0IG9mIHRoZSBXaGl0ZSBhbmQgYm9vdHMgb2ZmIG9mIFNEIGNhcmQuIFRvIGRvCit0aGlzLCBpc3N1ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGZyb20gdGhlIHUtYm9vdCBwcm9tcHQ6CisKKyAgICAjIG1tYyBkZXYgMQorICAgICMgbW1jIGVyYXNlIDAgNTEyCisKK1RvIGZ1cnRoZXIgdGFpbG9yIHRoZXNlIGluc3RydWN0aW9ucyBmb3IgeW91ciBib2FyZCwgcGxlYXNlIHJlZmVyIHRvIHRoZQorZG9jdW1lbnRhdGlvbiBhdCBodHRwOi8vd3d3LmJlYWdsZWJvYXJkLm9yZy9ib25lIGFuZCBodHRwOi8vd3d3LmJlYWdsZWJvYXJkLm9yZy9ibGFjaworCitGcm9tIGEgTGludXggc3lzdGVtIHdpdGggYWNjZXNzIHRvIHRoZSBpbWFnZSBmaWxlcyBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3RlcHM6CisKKyAgMS4gQnVpbGQgYW4gaW1hZ2UuIEZvciBleGFtcGxlOgorCisgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLW1pbmltYWwKKworICAyLiBVc2UgdGhlICJkZCIgdXRpbGl0eSB0byB3cml0ZSB0aGUgaW1hZ2UgdG8gdGhlIFNEIGNhcmQuIEZvciBleGFtcGxlOgorCisgICAgICMgZGQgY29yZS1pbWFnZS1taW5pbWFsLWJlYWdsZWJvbmUud2ljIG9mPS9kZXYvc2RiCisKKyAgMy4gSW5zZXJ0IHRoZSBTRCBjYXJkIGludG8gdGhlIEJlYWdsZWJvbmUgYW5kIGJvb3QgdGhlIGJvYXJkLgorCitGcmVlc2NhbGUgTVBDODMxNUUtUkRCIChtcGM4MzE1ZS1yZGIpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBNUEM4MzE1IFBvd2VyUEMgcmVmZXJlbmNlIHBsYXRmb3JtIChNUEM4MzE1RS1SREIpIGlzIGFpbWVkIGF0IGhhcmR3YXJlIGFuZAorc29mdHdhcmUgZGV2ZWxvcG1lbnQgb2YgbmV0d29yayBhdHRhY2hlZCBzdG9yYWdlIChOQVMpIGFuZCBkaWdpdGFsIG1lZGlhIHNlcnZlcgorYXBwbGljYXRpb25zLiBUaGUgTVBDODMxNUUtUkRCIGZlYXR1cmVzIHRoZSBQb3dlclFVSUNDIElJIFBybyBwcm9jZXNzb3IsIHdoaWNoCitpbmNsdWRlcyBhIGJ1aWx0LWluIHNlY3VyaXR5IGFjY2VsZXJhdG9yLgorCisoTm90ZTogeW91IG1heSBmaW5kIGl0IGVhc2llciB0byBvcmRlciBNUEM4MzE1RS1SREJBOyB0aGlzIGFwcGVhcnMgdG8gYmUgdGhlCitzYW1lIGJvYXJkIGluIGFuIGVuY2xvc3VyZSB3aXRoIGFjY2Vzc29yaWVzLiBJbiBhbnkgY2FzZSBpdCBpcyBmdWxseQorY29tcGF0aWJsZSB3aXRoIHRoZSBpbnN0cnVjdGlvbnMgZ2l2ZW4gaGVyZS4pCisKK1NldHVwIGluc3RydWN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSB3aWxsIG5lZWQgdGhlIGZvbGxvd2luZzoKKyogTkZTIHJvb3Qgc2V0dXAgb24geW91ciB3b3Jrc3RhdGlvbgorKiBURlRQIHNlcnZlciBpbnN0YWxsZWQgb24geW91ciB3b3Jrc3RhdGlvbgorKiBTdHJhaWdodC10aHJ1IDktY29uZHVjdG9yIHNlcmlhbCBjYWJsZSAoREI5LCBNL0YpIGNvbm5lY3RlZCBmcm9tIHlvdXIgCisgIFBDIHRvIFVBUlQxCisqIEV0aGVybmV0IGNvbm5lY3RlZCB0byB0aGUgZmlyc3QgZXRoZXJuZXQgcG9ydCBvbiB0aGUgYm9hcmQKKworLS0tIFByZXBhcmF0aW9uIC0tLQorCitOb3RlOiBpZiB5b3UgaGF2ZSBhbHRlcmVkIHlvdXIgYm9hcmQncyBldGhlcm5ldCBNQUMgYWRkcmVzcyhlcykgZnJvbSB0aGUKK2RlZmF1bHRzLCBvciB5b3UgbmVlZCB0byBkbyBzbyBiZWNhdXNlIHlvdSB3YW50IG11bHRpcGxlIGJvYXJkcyBvbiB0aGUgc2FtZQorbmV0d29yaywgdGhlbiB5b3Ugd2lsbCBuZWVkIHRvIGNoYW5nZSB0aGUgdmFsdWVzIGluIHRoZSBkdHMgZmlsZSAocGF0Y2gKK2xpbnV4L2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzE1ZXJkYi5kdHMgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlKS4gSWYKK3lvdSBoYXZlIGxlZnQgdGhlbSBhdCB0aGUgZmFjdG9yeSBkZWZhdWx0IHRoZW4geW91IHNob3VsZG4ndCBuZWVkIHRvIGRvCithbnl0aGluZyBoZXJlLgorCitOb3RlOiBUbyBib290IGZyb20gVVNCIGRpc2sgeW91IG5lZWQgdS1ib290IHRoYXQgc3VwcG9ydHMgJ2V4dDJsb2FkIHVzYicKK2NvbW1hbmQuIFlvdSBuZWVkIHRvIHNldHVwIFRGVFAgc2VydmVyLCBsb2FkIHUtYm9vdCBmcm9tIHRoZXJlIGFuZAorZmxhc2ggaXQgdG8gTk9SIGZsYXNoLgorCitCZXdhcmUhIEZsYXNoaW5nIGJvb3Rsb2FkZXIgaXMgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIG9wZXJhdGlvbiB0aGF0IGNhbgorYnJpY2sgeW91ciBkZXZpY2UgaWYgZG9uZSBpbmNvcnJlY3RseS4gUGxlYXNlLCBtYWtlIHN1cmUgeW91IHVuZGVyc3RhbmQKK3doYXQgYmVsb3cgY29tbWFuZHMgbWVhbiBiZWZvcmUgZXhlY3V0aW5nIHRoZW0uCisKK0xvYWQgdGhlIG5ldyB1LWJvb3QuYmluIGZyb20gVEZUUCBzZXJ2ZXIgdG8gbWVtb3J5IGFkZHJlc3MgMjAwMDAwCis9PiB0ZnRwIDIwMDAwMCB1LWJvb3QuYmluCisKK0Rpc2FibGUgZmxhc2ggcHJvdGVjdGlvbgorPT4gcHJvdGVjdCBvZmYgYWxsCisKK0VyYXNlIHRoZSBvbGQgdS1ib290IGZyb20gZmUwMDAwMDAgdG8gZmUwNmZmZmYgaW4gTk9SIGZsYXNoLgorVGhlIHNpemUgaXMgMHg3MDAwMCAoNDU4NzUyIGJ5dGVzKQorPT4gZXJhc2UgZmUwMDAwMDAgZmUwNmZmZmYKKworQ29weSB0aGUgbmV3IHUtYm9vdCBmcm9tIGFkZHJlc3MgMjAwMDAwIHRvIGZlMDAwMDAwCit0aGUgc2l6ZSBpcyAweDcwMDAwLiBJdCBoYXMgdG8gYmUgZ3JlYXRlciBvciBlcXVhbCB0byB1LWJvb3QuYmluIHNpemUKKz0+IGNwLmIgMjAwMDAwIGZlMDAwMDAwIDcwMDAwCisKK0VuYWJsZSBmbGFzaCBwcm90ZWN0aW9uIGFnYWluCis9PiBwcm90ZWN0IG9uIGFsbAorCitSZXNldCB0aGUgYm9hcmQKKz0+IHJlc2V0CisKKy0tLSBCb290aW5nIGZyb20gVVNCIGRpc2sgLS0tCisKKyAxLiBGbGFzaCBwYXJ0aXRpb25lZCBpbWFnZSB0byB0aGUgVVNCIGRpc2sKKworICAgICMgZGQgaWY9Y29yZS1pbWFnZS1taW5pbWFsLW1wYzgzMTVlLXJkYi53aWMgb2Y9L2Rldi9zZGIKKworIDIuIFBsdWcgVVNCIGRpc2sgaW50byB0aGUgTVBDODMxNSBib2FyZAorCisgMy4gQ29ubmVjdCB0aGUgYm9hcmQncyBmaXJzdCBzZXJpYWwgcG9ydCB0byB5b3VyIHdvcmtzdGF0aW9uIGFuZCB0aGVuIHN0YXJ0IHVwCisgICAgeW91ciBmYXZvdXJpdGUgc2VyaWFsIHRlcm1pbmFsIHNvIHRoYXQgeW91IHdpbGwgYmUgYWJsZSB0byBpbnRlcmFjdCB3aXRoCisgICAgdGhlIHNlcmlhbCBjb25zb2xlLiBJZiB5b3UgZG9uJ3QgaGF2ZSBhIGZhdm91cml0ZSwgcGljb2NvbSBpcyBzdWdnZXN0ZWQ6CisKKyAgJCBwaWNvY29tIC9kZXYvdHR5VVNCMCAtYiAxMTUyMDAKKworIDQuIFBvd2VyIHVwIG9yIHJlc2V0IHRoZSBib2FyZCBhbmQgcHJlc3MgYSBrZXkgb24gdGhlIHRlcm1pbmFsIHdoZW4gcHJvbXB0ZWQKKyAgICB0byBnZXQgdG8gdGhlIFUtQm9vdCBjb21tYW5kIGxpbmUKKworIDUuIE9wdGlvbmFsLiBMb2FkIHRoZSB1LWJvb3QuYmluIGZyb20gdGhlIFVTQiBkaXNrOgorCisgPT4gdXNiIHN0YXJ0CisgPT4gZXh0MmxvYWQgdXNiIDA6MSAyMDAwMDAgdS1ib290LmJpbgorCisgICAgYW5kIGZsYXNoIGl0IHRvIE5PUiBmbGFzaCBhcyBkZXNjcmliZWQgYWJvdmUuCisKKyA2LiBMb2FkIHRoZSBrZXJuZWwgYW5kIGR0YiBmcm9tIHRoZSBmaXJzdCBwYXJ0aXRpb24gb2YgdGhlIFVTQiBkaXNrOgorCisgPT4gdXNiIHN0YXJ0CisgPT4gZXh0MmxvYWQgdXNiIDA6MSAxMDAwMDAwIHVJbWFnZQorID0+IGV4dDJsb2FkIHVzYiAwOjEgMjAwMDAwMCBkdGIKKworIDcuIFNldCBib290YXJncyBhbmQgYm9vdCB1cCB0aGUgZGV2aWNlCisKKyA9PiBzZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L3NkYjIgcncgcm9vdHdhaXQgY29uc29sZT10dHlTMCwxMTUyMDAKKyA9PiBib290bSAxMDAwMDAwIC0gMjAwMDAwMAorCisKKy0tLSBCb290aW5nIGZyb20gTkZTIHJvb3QgLS0tCisKK0xvYWQgdGhlIGtlcm5lbCBhbmQgZHRiIChkZXZpY2UgdHJlZSBibG9iKSwgYW5kIGJvb3QgdGhlIHN5c3RlbSBhcyBmb2xsb3dzOgorCisgMS4gR2V0IHRoZSBrZXJuZWwgKHVJbWFnZS1tcGM4MzE1ZS1yZGIuYmluKSBhbmQgZHRiICh1SW1hZ2UtbXBjODMxNWUtcmRiLmR0YikKKyAgICBmaWxlcyBmcm9tIHRoZSB0bXAvZGVwbG95IGRpcmVjdG9yeSwgYW5kIG1ha2UgdGhlbSBhdmFpbGFibGUgb24geW91ciBURlRQCisgICAgc2VydmVyLgorCisgMi4gQ29ubmVjdCB0aGUgYm9hcmQncyBmaXJzdCBzZXJpYWwgcG9ydCB0byB5b3VyIHdvcmtzdGF0aW9uIGFuZCB0aGVuIHN0YXJ0IHVwCisgICAgeW91ciBmYXZvdXJpdGUgc2VyaWFsIHRlcm1pbmFsIHNvIHRoYXQgeW91IHdpbGwgYmUgYWJsZSB0byBpbnRlcmFjdCB3aXRoCisgICAgdGhlIHNlcmlhbCBjb25zb2xlLiBJZiB5b3UgZG9uJ3QgaGF2ZSBhIGZhdm91cml0ZSwgcGljb2NvbSBpcyBzdWdnZXN0ZWQ6CisKKyAgJCBwaWNvY29tIC9kZXYvdHR5VVNCMCAtYiAxMTUyMDAKKworIDMuIFBvd2VyIHVwIG9yIHJlc2V0IHRoZSBib2FyZCBhbmQgcHJlc3MgYSBrZXkgb24gdGhlIHRlcm1pbmFsIHdoZW4gcHJvbXB0ZWQKKyAgICB0byBnZXQgdG8gdGhlIFUtQm9vdCBjb21tYW5kIGxpbmUKKworIDQuIFNldCB1cCB0aGUgZW52aXJvbm1lbnQgaW4gVS1Cb290OgorCisgPT4gc2V0ZW52IGlwYWRkciA8Ym9hcmQgaXA+CisgPT4gc2V0ZW52IHNlcnZlcmlwIDx0ZnRwIHNlcnZlciBpcD4KKyA9PiBzZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydyBuZnNyb290PTxuZnNyb290IGlwPjo8cm9vdGZzIHBhdGg+IGlwPTxib2FyZCBpcD46PHNlcnZlciBpcD46PGdhdGV3YXkgaXA+OjI1NS4yNTUuMjU1LjA6bXBjODMxNWU6ZXRoMDpvZmYgY29uc29sZT10dHlTMCwxMTUyMDAKKworIDUuIERvd25sb2FkIHRoZSBrZXJuZWwgYW5kIGR0YiwgYW5kIGJvb3Q6CisKKyA9PiB0ZnRwIDEwMDAwMDAgdUltYWdlLW1wYzgzMTVlLXJkYi5iaW4KKyA9PiB0ZnRwIDIwMDAwMDAgdUltYWdlLW1wYzgzMTVlLXJkYi5kdGIKKyA9PiBib290bSAxMDAwMDAwIC0gMjAwMDAwMAorCistLS0gQm9vdGluZyBmcm9tIEpGRlMyIHJvb3QgLS0tCisKKyAxLiBGaXJzdCBib290IHRoZSBib2FyZCB3aXRoIE5GUyByb290LgorCisgMi4gRXJhc2UgdGhlIE1URCBwYXJ0aXRpb24gd2hpY2ggd2lsbCBiZSB1c2VkIGFzIHJvb3Q6CisKKyAgICAkIGZsYXNoX2VyYXNlYWxsICAvZGV2L210ZDMKKworIDMuIENvcHkgdGhlIEpGRlMyIGltYWdlIHRvIHRoZSBNVEQgcGFydGl0aW9uOgorCisgICAgJCBmbGFzaGNwIGNvcmUtaW1hZ2UtbWluaW1hbC1tcGM4MzE1ZS1yZGIuamZmczIgL2Rldi9tdGQzCisKKyA0LiBUaGVuIHJlYm9vdCB0aGUgYm9hcmQgYW5kIHNldCB1cCB0aGUgZW52aXJvbm1lbnQgaW4gVS1Cb290OgorCisgICAgPT4gc2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9tdGRibG9jazMgcm9vdGZzdHlwZT1qZmZzMiBjb25zb2xlPXR0eVMwLDExNTIwMAorCisKK1ViaXF1aXRpIE5ldHdvcmtzIEVkZ2VSb3V0ZXIgTGl0ZSAoZWRnZXJvdXRlcikKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIEVkZ2VSb3V0ZXIgTGl0ZSBpcyBwYXJ0IG9mIHRoZSBFZGdlTWF4IHNlcmllcy4gSXQgaXMgYSBNSVBTNjQgcm91dGVyCisoYmFzZWQgb24gdGhlIENhdml1bSBPY3Rlb24gcHJvY2Vzc29yKSB3aXRoIDUxMk1CIG9mIFJBTSwgd2hpY2ggdXNlcyBhbgoraW50ZXJuYWwgVVNCIHBlbmRyaXZlIGZvciBzdG9yYWdlLgorCitTZXR1cCBpbnN0cnVjdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3Ugd2lsbCBuZWVkIHRoZSBmb2xsb3dpbmc6CisqIFJKNDUgLT4gc2VyaWFsICgicm9sbG92ZXIiKSBjYWJsZSBjb25uZWN0ZWQgZnJvbSB5b3VyIFBDIHRvIHRoZSBDT05TT0xFCisgIHBvcnQgb24gdGhlIGRldmljZQorKiBFdGhlcm5ldCBjb25uZWN0ZWQgdG8gdGhlIGZpcnN0IGV0aGVybmV0IHBvcnQgb24gdGhlIGJvYXJkCisKK0lmIHVzaW5nIE5GUyBhcyBwYXJ0IG9mIHRoZSBzZXR1cCBwcm9jZXNzLCB5b3Ugd2lsbCBhbHNvIG5lZWQ6CisqIE5GUyByb290IHNldHVwIG9uIHlvdXIgd29ya3N0YXRpb24KKyogVEZUUCBzZXJ2ZXIgaW5zdGFsbGVkIG9uIHlvdXIgd29ya3N0YXRpb24gKGlmIGZldGNoaW5nIHRoZSBrZXJuZWwgZnJvbQorICBURlRQLCBzZWUgYmVsb3cpLgorCistLS0gUHJlcGFyYXRpb24gLS0tCisKK0J1aWxkIGFuIGltYWdlIChlLmcuIGNvcmUtaW1hZ2UtbWluaW1hbCkgdXNpbmcgImVkZ2Vyb3V0ZXIiIGFzIHRoZSBNQUNISU5FLgorSW4gdGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbiBpdCBpcyBiYXNlZCBvbiBjb3JlLWltYWdlLW1pbmltYWwuIEFub3RoZXIgdGFyZ2V0CittYXkgYmUgc2ltaWxpYXIgd2l0aCBpdC4KKworLS0tIEJvb3RpbmcgZnJvbSBORlMgcm9vdCAvIGtlcm5lbCB2aWEgVEZUUCAtLS0KKworTG9hZCB0aGUga2VybmVsLCBhbmQgYm9vdCB0aGUgc3lzdGVtIGFzIGZvbGxvd3M6CisKKyAxLiBHZXQgdGhlIGtlcm5lbCAodm1saW51eCkgZmlsZSBmcm9tIHRoZSB0bXAvZGVwbG95L2ltYWdlcy9lZGdlcm91dGVyCisgICAgZGlyZWN0b3J5LCBhbmQgbWFrZSB0aGVtIGF2YWlsYWJsZSBvbiB5b3VyIFRGVFAgc2VydmVyLgorCisgMi4gQ29ubmVjdCB0aGUgYm9hcmQncyBmaXJzdCBzZXJpYWwgcG9ydCB0byB5b3VyIHdvcmtzdGF0aW9uIGFuZCB0aGVuIHN0YXJ0IHVwCisgICAgeW91ciBmYXZvdXJpdGUgc2VyaWFsIHRlcm1pbmFsIHNvIHRoYXQgeW91IHdpbGwgYmUgYWJsZSB0byBpbnRlcmFjdCB3aXRoCisgICAgdGhlIHNlcmlhbCBjb25zb2xlLiBJZiB5b3UgZG9uJ3QgaGF2ZSBhIGZhdm91cml0ZSwgcGljb2NvbSBpcyBzdWdnZXN0ZWQ6CisKKyAgJCBwaWNvY29tIC9kZXYvdHR5UzAgLWIgMTE1MjAwCisKKyAzLiBQb3dlciB1cCBvciByZXNldCB0aGUgYm9hcmQgYW5kIHByZXNzIGEga2V5IG9uIHRoZSB0ZXJtaW5hbCB3aGVuIHByb21wdGVkCisgICAgdG8gZ2V0IHRvIHRoZSBVLUJvb3QgY29tbWFuZCBsaW5lCisKKyA0LiBTZXQgdXAgdGhlIGVudmlyb25tZW50IGluIFUtQm9vdDoKKworID0+IHNldGVudiBpcGFkZHIgPGJvYXJkIGlwPgorID0+IHNldGVudiBzZXJ2ZXJpcCA8dGZ0cCBzZXJ2ZXIgaXA+CisKKyA1LiBEb3dubG9hZCB0aGUga2VybmVsIGFuZCBib290OgorCisgPT4gdGZ0cCB0ZnRwICRsb2FkYWRkciB2bWxpbnV4CisgPT4gYm9vdG9jdGxpbnV4ICRsb2FkYWRkciBjb3JlbWFzaz0weDMgcm9vdD0vZGV2L25mcyBydyBuZnNyb290PTxuZnNyb290IGlwPjo8cm9vdGZzIHBhdGg+IGlwPTxib2FyZCBpcD46PHNlcnZlciBpcD46PGdhdGV3YXkgaXA+OjxuZXRtYXNrPjplZGdlcm91dGVyOmV0aDA6b2ZmIG10ZHBhcnRzPXBoeXNfbWFwcGVkX2ZsYXNoOjUxMmsoYm9vdDApLDUxMmsoYm9vdDEpLDY0a0AzMDcyayhlZXByb20pCisKKy0tLSBCb290aW5nIGZyb20gVVNCIGRpc2sgLS0tCisKK1RvIGJvb3QgZnJvbSB0aGUgVVNCIGRpc2ssIHlvdSBlaXRoZXIgbmVlZCB0byByZW1vdmUgaXQgZnJvbSB0aGUgZWRnZXJvdXRlcgorYm94IGFuZCBwb3B1bGF0ZSBpdCBmcm9tIGFub3RoZXIgY29tcHV0ZXIsIG9yIHVzZSBhIHByZXZpb3VzbHkgYm9vdGVkIE5GUworaW1hZ2UgYW5kIHBvcHVsYXRlIGZyb20gdGhlIGVkZ2Vyb3V0ZXIgaXRzZWxmLgorCitUeXBlIDE6IFVzZSBwYXJ0aXRpb25lZCBpbWFnZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3RlcHM6CisKKyAxLiBSZW1vdmUgdGhlIFVTQiBkaXNrIGZyb20gdGhlIGVkZ2Vyb3V0ZXIgYW5kIGluc2VydCBpdCBpbnRvIGEgY29tcHV0ZXIKKyAgICB0aGF0IGhhcyBhY2Nlc3MgdG8geW91ciBidWlsZCBhcnRpZmFjdHMuCisKKyAyLiBGbGFzaCB0aGUgaW1hZ2UuCisKKyAgICAjIGRkIGlmPWNvcmUtaW1hZ2UtbWluaW1hbC1lZGdlcm91dGVyLndpYyBvZj0vZGV2L3NkYgorCisgMy4gSW5zZXJ0IFVTQiBkaXNrIGludG8gdGhlIGVkZ2Vyb3V0ZXIgYW5kIGJvb3QgaXQuCisKK1R5cGUgMjogTkZTCistLS0tLS0tLS0tLQorCitOb3RlOiBJZiB5b3UgcGxhY2UgdGhlIGtlcm5lbCBvbiB0aGUgZXh0MyBwYXJ0aXRpb24sIHlvdSBtdXN0IHJlLWNyZWF0ZSB0aGUKKyAgICAgIGV4dDMgZmlsZXN5c3RlbSwgc2luY2UgdGhlIGZhY3RvcnkgdS1ib290IGNhbiBvbmx5IGhhbmRsZSAxMjggYnl0ZSBpbm9kZXMgYW5kCisgICAgICBjYW5ub3QgcmVhZCB0aGUgcGFydGl0aW9uIG90aGVyd2lzZS4KKworICAgICAgVGhlc2UgYm9vdCBpbnN0cnVjdGlvbnMgYXNzdW1lIHRoYXQgeW91IGhhdmUgcmVjcmVhdGVkIHRoZSBleHQzIGZpbGVzeXN0ZW0gd2l0aAorICAgICAgMTI4IGJ5dGUgaW5vZGVzLCB5b3UgaGF2ZSBhbiB1cGRhdGVkIHVib290IG9yIHlvdSBhcmUgcnVubmluZyBhbmQgaW1hZ2UgY2FwYWJsZQorICAgICAgb2YgbWFraW5nIHRoZSBmaWxlc3lzdGVtIG9uIHRoZSBib2FyZCBpdHNlbGYuCisKKworIDEuIEJvb3QgZnJvbSBORlMgcm9vdAorCisgMi4gTW91bnQgdGhlIFVTQiBkaXNrIHBhcnRpdGlvbiAyIGFuZCB0aGVuIGV4dHJhY3QgdGhlIGNvbnRlbnRzIG9mCisgICAgdG1wL2RlcGxveS9jb3JlLWltYWdlLVhYWFgudGFyLmJ6MiBpbnRvIGl0LgorCisgICAgQmVmb3JlIHN0YXJ0aW5nLCBjb3B5IGNvcmUtaW1hZ2UtbWluaW1hbC14eHgudGFyLmJ6MiBhbmQgdm1saW51eCBpbnRvCisgICAgcm9vdGZzIHBhdGggb24geW91ciB3b3Jrc3RhdGlvbi4KKworICAgIGFuZCB0aGVuLAorICAKKyAgICAgICMgbW91bnQgL2Rldi9zZGEyIC9tZWRpYS9zZGEyCisgICAgICAjIHRhciAteHZqcGYgY29yZS1pbWFnZS1taW5pbWFsLVhYWC50YXIuYnoyIC1DIC9tZWRpYS9zZGEyCisgICAgICAjIGNwIHZtbGludXggL21lZGlhL3NkYTIvYm9vdC92bWxpbnV4CisgICAgICAjIHVtb3VudCAvbWVkaWEvc2RhMgorICAgICAgIyByZWJvb3QKKworIDMuIFJlYm9vdCB0aGUgYm9hcmQgYW5kIHByZXNzIGEga2V5IG9uIHRoZSB0ZXJtaW5hbCB3aGVuIHByb21wdGVkIHRvIGdldCB0byB0aGUgVS1Cb290CisgICAgY29tbWFuZCBsaW5lOgorCisgICAgIyByZWJvb3QKKworIDQuIExvYWQgdGhlIGtlcm5lbCBhbmQgYm9vdDoKKworICAgICAgPT4gZXh0MmxvYWQgdXNiIDA6MiAkbG9hZGFkZHIgYm9vdC92bWxpbnV4CisgICAgICA9PiBib290b2N0bGludXggJGxvYWRhZGRyIGNvcmVtYXNrPTB4MyByb290PS9kZXYvc2RhMiBydyByb290d2FpdCBtdGRwYXJ0cz1waHlzX21hcHBlZF9mbGFzaDo1MTJrKGJvb3QwKSw1MTJrKGJvb3QxKSw2NGtAMzA3MmsoZWVwcm9tKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbGF5ZXIuY29uZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL2xheWVyLmNvbmYKaW5kZXggNDRkYmNhNi4uN2I1NjVmMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbGF5ZXIuY29uZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9sYXllci5jb25mCkBAIC05LDMgKzksNCBAQAogQkJGSUxFX1BBVFRFUk5feW9jdG9ic3AgPSAiXiR7TEFZRVJESVJ9LyIKIEJCRklMRV9QUklPUklUWV95b2N0b2JzcCA9ICI1IgogTEFZRVJWRVJTSU9OX3lvY3RvYnNwID0gIjMiCitMQVlFUlNFUklFU19DT01QQVRfeW9jdG9ic3AgPSAicm9ja28iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2JlYWdsZWJvbmUuY29uZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvYmVhZ2xlYm9uZS5jb25mCmluZGV4IDRhOTBiYTUuLjFiZGQ0ZGYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvYmVhZ2xlYm9uZS5jb25mCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvYmVhZ2xlYm9uZS5jb25mCkBAIC0yNiw3ICsyNiw3IEBACiBQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0byA/PSAiNC4xMiUiCiAKIEtFUk5FTF9JTUFHRVRZUEUgPSAiekltYWdlIgotS0VSTkVMX0RFVklDRVRSRUUgPSAiYW0zMzV4LWJvbmUuZHRiIGFtMzM1eC1ib25lYmxhY2suZHRiIgorS0VSTkVMX0RFVklDRVRSRUUgPSAiYW0zMzV4LWJvbmUuZHRiIGFtMzM1eC1ib25lYmxhY2suZHRiIGFtMzM1eC1ib25lZ3JlZW4uZHRiIgogS0VSTkVMX0VYVFJBX0FSR1MgKz0gIkxPQURBRERSPSR7VUJPT1RfRU5UUllQT0lOVH0iCiAKIFNQTF9CSU5BUlkgPSAiTUxPIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9nZW5lcmljeDg2LTY0LmNvbmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2dlbmVyaWN4ODYtNjQuY29uZgppbmRleCBiZmVkZDg0Li4xMmY3YzBkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2dlbmVyaWN4ODYtNjQuY29uZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2dlbmVyaWN4ODYtNjQuY29uZgpAQCAtNyw2ICs3LDQgQEAKIHJlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlMi5pbmMKIHJlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvZ2VuZXJpY3g4Ni1jb21tb24uaW5jCiAKLVBSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvID89ICI0LjEwJSIKLQogU0VSSUFMX0NPTlNPTEVTX0NIRUNLID0gInR0eVMwIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9nZW5lcmljeDg2LmNvbmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2dlbmVyaWN4ODYuY29uZgppbmRleCBhZjAzYjg2Li43OThiNjJlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2dlbmVyaWN4ODYuY29uZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2dlbmVyaWN4ODYuY29uZgpAQCAtOCw1ICs4LDMgQEAKIHJlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvZ2VuZXJpY3g4Ni1jb21tb24uaW5jCiAKIE1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JSRUNPTU1FTkRTICs9ICJnbWE1MDAtZ2Z4LWNoZWNrIgotCi1QUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0byA/PSAiNC4xMCUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL21wYzgzMTVlLXJkYi5jb25mIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9tcGM4MzE1ZS1yZGIuY29uZgppbmRleCA2ZTJkMzE2Li4zNzFhM2RiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL21wYzgzMTVlLXJkYi5jb25mCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvbXBjODMxNWUtcmRiLmNvbmYKQEAgLTMwLDYgKzMwLDYgQEAKIElNQUdFX0ZTVFlQRVMgPz0gImpmZnMyIHRhci5iejIiCiBKRkZTMl9FUkFTRUJMT0NLID0gIjB4NDAwMCIKIAotSU1BR0VfRlNUWVBFUyArPSAid2ljIgorSU1BR0VfRlNUWVBFUyArPSAid2ljIHdpYy5ibWFwIgogV0tTX0ZJTEUgPz0gJ21wYzgzMTVlLXJkYi53a3MnCiBJTUFHRV9CT09UX0ZJTEVTID89ICJ1LWJvb3QuYmluIHVJbWFnZSB1SW1hZ2UtbXBjODMxNWVyZGIuZHRiO2R0YiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9zZWxmdGVzdC9fX2luaXRfXy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9zZWxmdGVzdC9fX2luaXRfXy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvbGliL29lcWEvc2VsZnRlc3QvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL3N5c3RlbWRfYm9vdC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9zeXN0ZW1kX2Jvb3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ1ZWVlYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9zeXN0ZW1kX2Jvb3QucHkKQEAgLTAsMCArMSw5OCBAQAoraW1wb3J0IG9zCisKK2Zyb20gb2VxYS5zZWxmdGVzdC5jYXNlIGltcG9ydCBPRVNlbGZ0ZXN0VGVzdENhc2UKK2Zyb20gb2VxYS5jb3JlLmRlY29yYXRvci5vZWlkIGltcG9ydCBPRVRlc3RJRAorZnJvbSBvZXFhLmNvcmUuZGVjb3JhdG9yLmRlcGVuZHMgaW1wb3J0IE9FVGVzdERlcGVuZHMKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBydW5xZW11CisKK2NsYXNzIFN5c3RlbWRib290KE9FU2VsZnRlc3RUZXN0Q2FzZSk6CisgICAgZGVmIF9jb21tb25fc2V0dXAoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDb21tb24gc2V0dXAgZm9yIHRlc3QgY2FzZXM6IDE0NDUsIDE1MjgKKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBTZXQgRUZJX1BST1ZJREVSID0gInN5c3RlbWRib290IiBhbmQgTUFDSElORSA9ICJnZW5lcmljeDg2LTY0IiBpbiBjb25mL2xvY2FsLmNvbmYKKyAgICAgICAgZmVhdHVyZXMgPSAnRUZJX1BST1ZJREVSID0gInN5c3RlbWQtYm9vdCJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ01BQ0hJTkUgPSAiZ2VuZXJpY3g4Ni02NCInCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhmZWF0dXJlcykKKworICAgIGRlZiBfY29tbW9uX2J1aWxkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29tbW9uIGJ1aWxkIGZvciB0ZXN0IGNhc2VzOiAxNDQ1ICwgMTUyOAorICAgICAgICAiIiIKKworICAgICAgICAjIEJ1aWxkIGEgZ2VuZXJpY3g4Ni02NC9lZmkgc3lzdGVtZGJvb3QgaW1hZ2UKKyAgICAgICAgYml0YmFrZSgnbXRvb2xzLW5hdGl2ZSBjb3JlLWltYWdlLW1pbmltYWwnKQorCisKKyAgICBAT0VUZXN0SUQoMTQ0NSkKKyAgICBkZWYgdGVzdF9lZmlfc3lzdGVtZGJvb3RfaW1hZ2VzX2Nhbl9iZV9idWlsdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6ICAgICBDaGVjayBpZiBzeXN0ZW1kLWJvb3QgaW1hZ2VzIGNhbiBiZSBidWlsdCBjb3JyZWN0bHkKKyAgICAgICAgRXhwZWN0ZWQ6ICAgIDEuIEZpbGUgc3lzdGVtZC1ib290LmVmaSBzaG91bGQgYmUgYXZhaWxhYmxlIGluICRwb2t5L2J1aWxkL3RtcC9kZXBsb3kvaW1hZ2VzL2dlbmVyaWN4ODYtNjQKKyAgICAgICAgICAgICAgICAgICAgIDIuICdzeXN0ZW1kLWJvb3QiIGNhbiBiZSBidWlsdCBjb3JyZWN0bHkKKyAgICAgICAgUHJvZHVjdDogICAgIG9lLWNvcmUKKyAgICAgICAgQXV0aG9yOiAgICAgIEpvc2UgUGVyZXogQ2FycmFuemEgPGpvc2UucGVyZXouY2FycmFuemFAaW50ZWwuY29tPgorICAgICAgICBBdXRvbWF0ZWRCeTogSm9zZSBQZXJleiBDYXJyYW56YSA8am9zZS5wZXJlei5jYXJyYW56YUBpbnRlbC5jb20+CisgICAgICAgICIiIgorCisgICAgICAgICMgV2UnZCB1c2UgREVQTE9ZX0RJUl9JTUFHRSBoZXJlLCBleGNlcHQgdGhhdCB3ZSBuZWVkIGl0cyB2YWx1ZSBmb3IKKyAgICAgICAgIyBNQUNISU5FPSJnZW5lcmljeDg2LTY0IHdoaWNoIGlzIHByb2JhYmx5IG5vdCB0aGUgb25lIGNvbmZpZ3VyZWQKKyAgICAgICAgc3lzdGVtZGJvb3RmaWxlID0gb3MucGF0aC5qb2luKGdldF9iYl92YXIoJ0RFUExPWV9ESVInKSwgJ2ltYWdlcycsICdnZW5lcmljeDg2LTY0JywgJ3N5c3RlbWQtYm9vdHg2NC5lZmknKQorCisgICAgICAgIHNlbGYuX2NvbW1vbl9zZXR1cCgpCisKKyAgICAgICAgIyBFbnN1cmUgd2UncmUgYWN0dWFsbHkgdGVzdGluZyB0aGF0IHRoaXMgZ2V0cyBidWlsdCBhbmQgbm90IHRoYXQKKyAgICAgICAgIyBpdCB3YXMgYXJvdW5kIGZyb20gYW4gZWFybGllciBidWlsZAorICAgICAgICBiaXRiYWtlKCctYyBjbGVhbnNzdGF0ZSBzeXN0ZW1kLWJvb3QnKQorICAgICAgICBydW5DbWQoJ3JtIC1mICVzJyAlIHN5c3RlbWRib290ZmlsZSkKKworICAgICAgICBzZWxmLl9jb21tb25fYnVpbGQoKQorCisgICAgICAgIGZvdW5kID0gb3MucGF0aC5pc2ZpbGUoc3lzdGVtZGJvb3RmaWxlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm91bmQsICdTeXN0ZW1kLUJvb3QgZmlsZSAlcyBub3QgZm91bmQnICUgc3lzdGVtZGJvb3RmaWxlKQorCisgICAgQE9FVGVzdElEKDE1MjgpCisgICAgQE9FVGVzdERlcGVuZHMoWydzeXN0ZW1kX2Jvb3QuU3lzdGVtZGJvb3QudGVzdF9lZmlfc3lzdGVtZGJvb3RfaW1hZ2VzX2Nhbl9iZV9idWlsdCddKQorICAgIGRlZiB0ZXN0X2ltYWdlX2VmaV9maWxlKHNlbGYpOgorCisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgIENoZWNrIGlmIEVGSSBib290bG9hZGVyIGZvciBzeXN0ZW1kIGlzIGNvcnJlY3RseSBidWlsZAorICAgICAgICBEZXBlbmRlbmNpZXM6IEltYWdlIHdhcyBidWlsdCBjb3JyZWN0bHkgb24gdGVzdGNhc2UgMTQ0NQorICAgICAgICBTdGVwczogICAgICAgIDEuIENvcHkgYm9vdHg2NC5lZmkgZmlsZSBmb3JtIHRoZSBoZGRpbWcgY3JlYXRlZAorICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIGJ1aWxkL3RtcC9kZXBsb3kvaW1hZ2VzL2dlbmVyaWN4ODYtNjQKKyAgICAgICAgICAgICAgICAgICAgICAyLiBDaGVjayBib290eDY0LmVmaSB3YXMgY29waWVkIGZvcm0gaGRkaW1nCisgICAgICAgICAgICAgICAgICAgICAgMy4gVmVyaWZ5IHRoZSBjaGVja3N1bXMgZnJvbSB0aGUgY29waWVkIGFuZCBwcmV2aW91c2x5CisgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZCBmaWxlIGFyZSBlcXVhbC4KKyAgICAgICAgRXhwZWN0ZWQgOiAgICBTeXN0ZW1kLWJvb3R4NjQuZWZpIGFuZCBib290eDY0LmVmaSBzaG91bGQgYmUgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAgICAgICBoZW5jZSBjaGVja3N1bXMgc2hvdWxkIGJlIGVxdWFsLgorICAgICAgICBQcm9kdWN0OiAgICAgIG9lLWNvcmUKKyAgICAgICAgQXV0aG9yOiAgICAgICBKb3NlIFBlcmV6IENhcnJhbnphIDxqb3NlLnBlcmV6LmNhcnJhbnphIGF0IGxpbnV4LWludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6ICBKb3NlIFBlcmV6IENhcnJhbnphIDxqb3NlLnBlcmV6LmNhcnJhbnphIGF0IGxpbnV4LWludGVsLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgc3lzdGVtZGJvb3RmaWxlID0gb3MucGF0aC5qb2luKGdldF9iYl92YXIoJ0RFUExPWV9ESVInKSwgJ2ltYWdlcycsICdnZW5lcmljeDg2LTY0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzdGVtZC1ib290eDY0LmVmaScpCisgICAgICAgIHN5c3RlbWRib290aW1hZ2UgPSBvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcignREVQTE9ZX0RJUicpLCAnaW1hZ2VzJywgJ2dlbmVyaWN4ODYtNjQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvcmUtaW1hZ2UtbWluaW1hbC1nZW5lcmljeDg2LTY0LmhkZGltZycpCisgICAgICAgIGltYWdlYm9vdGZpbGUgPSBvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcignREVQTE9ZX0RJUicpLCAnaW1hZ2VzJywgJ2dlbmVyaWN4ODYtNjQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Jvb3R4NjQuZWZpJykKKyAgICAgICAgbWNvcHluYXRpdmUgPSBvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcignU1RBR0lOR19CSU5ESVJfTkFUSVZFJyksICdtY29weScpCisKKyAgICAgICAgI0NsZWFuIGVudmlyb25tZW50IGJlZm9yZSBzdGFydCB0aGUgdGVzdAorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShpbWFnZWJvb3RmaWxlKToKKyAgICAgICAgICAgIHJ1bkNtZCgncm0gLWYgJXMnICUgaW1hZ2Vib290ZmlsZSkKKworICAgICAgICAgICAgI1N0ZXAgMQorICAgICAgICAgICAgcnVuQ21kKCclcyAtaSAlcyA6OkVGSS9CT09UL2Jvb3R4NjQuZWZpICVzJyAlIChtY29weW5hdGl2ZSAsc3lzdGVtZGJvb3RpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2Vib290ZmlsZSkpCisKKyAgICAgICAgICAgICNTdGVwIDIKKyAgICAgICAgICAgIGZvdW5kID0gb3MucGF0aC5pc2ZpbGUoaW1hZ2Vib290ZmlsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZCwgJ2Jvb3R4NjQuZWZpIGZpbGUgJXMgd2FzIG5vdCBjb3BpZWQgZnJvbSBpbWFnZScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGltYWdlYm9vdGZpbGUpCisKKyAgICAgICAgICAgICNTdGVwIDMKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnbWQ1c3VtICVzICVzJyAlIChzeXN0ZW1kYm9vdGZpbGUsIGltYWdlYm9vdGZpbGUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnNwbGl0KClbMF0sIHJlc3VsdC5vdXRwdXQuc3BsaXQoKVsyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVzIHdhcyBub3QgY29ycmVjbHR5IGdlbmVyYXRlZCcgJSBpbWFnZWJvb3RmaWxlKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL3NlbGZ0ZXN0L3N5c3RlbWRfYm9vdC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9zZWxmdGVzdC9zeXN0ZW1kX2Jvb3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3Zjc0ZGIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL3NlbGZ0ZXN0L3N5c3RlbWRfYm9vdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLWZyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Ci1mcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgcnVucWVtdQotZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCi1pbXBvcnQgcmUKLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IGxvZ2dpbmcKLQotCi1jbGFzcyBTeXN0ZW1kYm9vdChvZVNlbGZUZXN0KToKLQotICAgIGRlZiBfY29tbW9uX3NldHVwKHNlbGYpOgotICAgICAgICAiIiIKLSAgICAgICAgQ29tbW9uIHNldHVwIGZvciB0ZXN0IGNhc2VzOiAxNDQ1LCBYWFhYCi0gICAgICAgICIiIgotCi0gICAgICAgICMgU2V0IEVGSV9QUk9WSURFUiA9ICJndW1taWJvb3QiIGFuZCBNQUNISU5FID0gImdlbmVyaWN4ODYtNjQiIGluIGNvbmYvbG9jYWwuY29uZgotICAgICAgICBmZWF0dXJlcyA9ICdFRklfUFJPVklERVIgPSAic3lzdGVtZC1ib290IlxuJwotICAgICAgICBmZWF0dXJlcyArPSAnTUFDSElORSA9ICJnZW5lcmljeDg2LTY0IicKLSAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGZlYXR1cmVzKQotCi0gICAgZGVmIF9jb21tb25fYnVpbGQoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBDb21tb24gYnVpbGQgZm9yIHRlc3QgY2FzZXM6IDE0NDUgLCBYWFhYCi0gICAgICAgICIiIgotCi0gICAgICAgICMgQnVpbGQgYSBnZW5lcmljeDg2LTY0L2VmaSBndW1taWJvb3QgaW1hZ2UKLSAgICAgICAgYml0YmFrZSgnbXRvb2xzLW5hdGl2ZSBjb3JlLWltYWdlLW1pbmltYWwnKQotCi0KLSAgICBAdGVzdGNhc2UoMTQ0NSkKLSAgICBkZWYgdGVzdF9lZmlfc3lzdGVtZGJvb3RfaW1hZ2VzX2Nhbl9iZV9idWlsdChzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFN1bW1hcnk6ICAgICBDaGVjayBpZiBzeXN0ZW1kLWJvb3QgaW1hZ2VzIGNhbiBiZSBidWlsdCBjb3JyZWN0bHkKLSAgICAgICAgRXhwZWN0ZWQ6ICAgIDEuIEZpbGUgc3lzdGVtZC1ib290LmVmaSBzaG91bGQgYmUgYXZhaWxhYmxlIGluICRwb2t5L2J1aWxkL3RtcC9kZXBsb3kvaW1hZ2VzL2dlbmVyaWN4ODYtNjQKLSAgICAgICAgICAgICAgICAgICAgIDIuICdzeXN0ZW1kLWJvb3QiIGNhbiBiZSBidWlsdCBjb3JyZWN0bHkKLSAgICAgICAgUHJvZHVjdDogICAgIG9lLWNvcmUKLSAgICAgICAgQXV0aG9yOiAgICAgIEpvc2UgUGVyZXogQ2FycmFuemEgPGpvc2UucGVyZXouY2FycmFuemFAaW50ZWwuY29tPgotICAgICAgICBBdXRvbWF0ZWRCeTogSm9zZSBQZXJleiBDYXJyYW56YSA8am9zZS5wZXJlei5jYXJyYW56YUBpbnRlbC5jb20+Ci0gICAgICAgICIiIgotCi0gICAgICAgICMgV2UnZCB1c2UgREVQTE9ZX0RJUl9JTUFHRSBoZXJlLCBleGNlcHQgdGhhdCB3ZSBuZWVkIGl0cyB2YWx1ZSBmb3IKLSAgICAgICAgIyBNQUNISU5FPSJnZW5lcmljeDg2LTY0IHdoaWNoIGlzIHByb2JhYmx5IG5vdCB0aGUgb25lIGNvbmZpZ3VyZWQKLSAgICAgICAgc3lzdGVtZGJvb3RmaWxlID0gb3MucGF0aC5qb2luKGdldF9iYl92YXIoJ0RFUExPWV9ESVInKSwgJ2ltYWdlcycsICdnZW5lcmljeDg2LTY0JywgJ3N5c3RlbWQtYm9vdHg2NC5lZmknKQotCi0gICAgICAgIHNlbGYuX2NvbW1vbl9zZXR1cCgpCi0KLSAgICAgICAgIyBFbnN1cmUgd2UncmUgYWN0dWFsbHkgdGVzdGluZyB0aGF0IHRoaXMgZ2V0cyBidWlsdCBhbmQgbm90IHRoYXQKLSAgICAgICAgIyBpdCB3YXMgYXJvdW5kIGZyb20gYW4gZWFybGllciBidWlsZAotICAgICAgICBiaXRiYWtlKCctYyBjbGVhbnNzdGF0ZSBzeXN0ZW1kLWJvb3QnKQotICAgICAgICBydW5DbWQoJ3JtIC1mICVzJyAlIHN5c3RlbWRib290ZmlsZSkKLQotICAgICAgICBzZWxmLl9jb21tb25fYnVpbGQoKQotCi0gICAgICAgIGZvdW5kID0gb3MucGF0aC5pc2ZpbGUoc3lzdGVtZGJvb3RmaWxlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZm91bmQsICdTeXN0ZW1kLUJvb3QgZmlsZSAlcyBub3QgZm91bmQnICUgc3lzdGVtZGJvb3RmaWxlKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXByb2ZpbGUuYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtcHJvZmlsZS5iYmFwcGVuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg2NTk1Yy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtcHJvZmlsZS5iYmFwcGVuZAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotUkRFUEVORFNfJHtQTn1fYXBwZW5kX2dlbmVyaWN4ODYgPSAiIGx0dG5nLXVzdCBzeXN0ZW10YXAiCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEuYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xLmJiYXBwZW5kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTVmOTI1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEuYmJhcHBlbmQKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi1LQlJBTkNIX2dlbmVyaWN4ODYgID0gInN0YW5kYXJkL2Jhc2UiCi1LQlJBTkNIX2dlbmVyaWN4ODYtNjQgID0gInN0YW5kYXJkL2Jhc2UiCi1LQlJBTkNIX2VkZ2Vyb3V0ZXIgPSAic3RhbmRhcmQvZWRnZXJvdXRlciIKLUtCUkFOQ0hfYmVhZ2xlYm9uZSA9ICJzdGFuZGFyZC9iZWFnbGVib25lIgotS0JSQU5DSF9tcGM4MzE1ZS1yZGIgPSAic3RhbmRhcmQvZnNsLW1wYzgzMTVlLXJkYiIKLQotS01BQ0hJTkVfZ2VuZXJpY3g4NiA/PSAiY29tbW9uLXBjIgotS01BQ0hJTkVfZ2VuZXJpY3g4Ni02NCA/PSAiY29tbW9uLXBjLTY0IgotCi1TUkNSRVZfbWFjaGluZV9nZW5lcmljeDg2ICAgID89ICI3ODIxMzNkODE2NmFjNzFlZjFmZmFiYTU4YjdjZjgxZWM5ZTUzMmExIgotU1JDUkVWX21hY2hpbmVfZ2VuZXJpY3g4Ni02NCA/PSAiNzgyMTMzZDgxNjZhYzcxZWYxZmZhYmE1OGI3Y2Y4MWVjOWU1MzJhMSIKLVNSQ1JFVl9tYWNoaW5lX2VkZ2Vyb3V0ZXIgPz0gIjc4MjEzM2Q4MTY2YWM3MWVmMWZmYWJhNThiN2NmODFlYzllNTMyYTEiCi1TUkNSRVZfbWFjaGluZV9iZWFnbGVib25lID89ICJjZTM4ZmRiODIwNDc2ZTQ5NjU3OWYyNDgxYmU5NzdjMGYzNTUwOWY0IgotU1JDUkVWX21hY2hpbmVfbXBjODMxNWUtcmRiID89ICI3ODIxMzNkODE2NmFjNzFlZjFmZmFiYTU4YjdjZjgxZWM5ZTUzMmExIgotCi1DT01QQVRJQkxFX01BQ0hJTkVfZ2VuZXJpY3g4NiA9ICJnZW5lcmljeDg2IgotQ09NUEFUSUJMRV9NQUNISU5FX2dlbmVyaWN4ODYtNjQgPSAiZ2VuZXJpY3g4Ni02NCIKLUNPTVBBVElCTEVfTUFDSElORV9lZGdlcm91dGVyID0gImVkZ2Vyb3V0ZXIiCi1DT01QQVRJQkxFX01BQ0hJTkVfYmVhZ2xlYm9uZSA9ICJiZWFnbGVib25lIgotQ09NUEFUSUJMRV9NQUNISU5FX21wYzgzMTVlLXJkYiA9ICJtcGM4MzE1ZS1yZGIiCi0KLUxJTlVYX1ZFUlNJT05fZ2VuZXJpY3g4NiA9ICI0LjEuNDMiCi1MSU5VWF9WRVJTSU9OX2dlbmVyaWN4ODYtNjQgPSAiNC4xLjQzIgotTElOVVhfVkVSU0lPTl9lZGdlcm91dGVyID0gIjQuMS40MyIKLUxJTlVYX1ZFUlNJT05fYmVhZ2xlYm9uZSA9ICI0LjEuNDMiCi1MSU5VWF9WRVJTSU9OX21wYzgzMTVlLXJkYiA9ICI0LjEuNDMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xMi5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEyLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZDhlYmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xMi5iYmFwcGVuZApAQCAtMCwwICsxLDI3IEBACitLQlJBTkNIX2dlbmVyaWN4ODYgID0gInN0YW5kYXJkL2Jhc2UiCitLQlJBTkNIX2dlbmVyaWN4ODYtNjQgID0gInN0YW5kYXJkL2Jhc2UiCisKK0tNQUNISU5FX2dlbmVyaWN4ODYgPz0gImNvbW1vbi1wYyIKK0tNQUNISU5FX2dlbmVyaWN4ODYtNjQgPz0gImNvbW1vbi1wYy02NCIKK0tCUkFOQ0hfZWRnZXJvdXRlciA9ICJzdGFuZGFyZC9lZGdlcm91dGVyIgorS0JSQU5DSF9iZWFnbGVib25lID0gInN0YW5kYXJkL2JlYWdsZWJvbmUiCitLQlJBTkNIX21wYzgzMTVlLXJkYiA9ICJzdGFuZGFyZC9mc2wtbXBjODMxNWUtcmRiIgorCitTUkNSRVZfbWFjaGluZV9nZW5lcmljeDg2ICAgID89ICIxYzRhZDU2OWFmM2UyM2E3Nzk5NDIzNTQzNTA0MGUzMjI5MDg2ODdmIgorU1JDUkVWX21hY2hpbmVfZ2VuZXJpY3g4Ni02NCA/PSAiMWM0YWQ1NjlhZjNlMjNhNzc5OTQyMzU0MzUwNDBlMzIyOTA4Njg3ZiIKK1NSQ1JFVl9tYWNoaW5lX2VkZ2Vyb3V0ZXIgPz0gIjI1N2Y4NDNlYTM2Nzc0NDYyMGYxZDkyOTEwYWZkMmY0NTRlMzE0ODMiCitTUkNSRVZfbWFjaGluZV9iZWFnbGVib25lLXlvY3RvID89ICIyNTdmODQzZWEzNjc3NDQ2MjBmMWQ5MjkxMGFmZDJmNDU0ZTMxNDgzIgorU1JDUkVWX21hY2hpbmVfbXBjODMxNWUtcmRiID89ICIwMTQ1NjA4NzRmOWViMmE4NjEzOGM5Y2MzNTA0NmZmMTcyMDQ4NWUxIgorCisKK0NPTVBBVElCTEVfTUFDSElORV9nZW5lcmljeDg2ID0gImdlbmVyaWN4ODYiCitDT01QQVRJQkxFX01BQ0hJTkVfZ2VuZXJpY3g4Ni02NCA9ICJnZW5lcmljeDg2LTY0IgorQ09NUEFUSUJMRV9NQUNISU5FX2VkZ2Vyb3V0ZXIgPSAiZWRnZXJvdXRlciIKK0NPTVBBVElCTEVfTUFDSElORV9iZWFnbGVib25lID0gImJlYWdsZWJvbmUiCitDT01QQVRJQkxFX01BQ0hJTkVfbXBjODMxNWUtcmRiID0gIm1wYzgzMTVlLXJkYiIKKworTElOVVhfVkVSU0lPTl9nZW5lcmljeDg2ID0gIjQuMTIuMjAiCitMSU5VWF9WRVJTSU9OX2dlbmVyaWN4ODYtNjQgPSAiNC4xMi4yMCIKK0xJTlVYX1ZFUlNJT05fZWRnZXJvdXRlciA9ICI0LjEyLjE5IgorTElOVVhfVkVSU0lPTl9iZWFnbGVib25lLXlvY3RvID0gIjQuMTIuMTkiCitMSU5VWF9WRVJTSU9OX21wYzgzMTVlLXJkYiA9ICI0LjEyLjE5IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuNC5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjQuYmJhcHBlbmQKaW5kZXggNDI3YWY0Yy4uMzVjY2UxYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuNC5iYmFwcGVuZAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC40LmJiYXBwZW5kCkBAIC03LDExICs3LDExIEBACiBLQlJBTkNIX2JlYWdsZWJvbmUgPSAic3RhbmRhcmQvYmVhZ2xlYm9uZSIKIEtCUkFOQ0hfbXBjODMxNWUtcmRiID0gInN0YW5kYXJkL2ZzbC1tcGM4MzE1ZS1yZGIiCiAKLVNSQ1JFVl9tYWNoaW5lX2dlbmVyaWN4ODYgICAgPz0gImI3MWM3Yjc4NmFlZDI2YzBhMWU0ZWNhNjZmMWQ4NzRlYzAxN2Q2OTkiCi1TUkNSRVZfbWFjaGluZV9nZW5lcmljeDg2LTY0ID89ICJiNzFjN2I3ODZhZWQyNmMwYTFlNGVjYTY2ZjFkODc0ZWMwMTdkNjk5IgotU1JDUkVWX21hY2hpbmVfZWRnZXJvdXRlciA/PSAiYjcxYzdiNzg2YWVkMjZjMGExZTRlY2E2NmYxZDg3NGVjMDE3ZDY5OSIKLVNSQ1JFVl9tYWNoaW5lX2JlYWdsZWJvbmUgPz0gImI3MWM3Yjc4NmFlZDI2YzBhMWU0ZWNhNjZmMWQ4NzRlYzAxN2Q2OTkiCi1TUkNSRVZfbWFjaGluZV9tcGM4MzE1ZS1yZGIgPz0gImI0ZGFhNGU5ZDY4ODYyZTU1OWQ3MjZiMGI2NmI3YmU2MDU4ODliOWUiCitTUkNSRVZfbWFjaGluZV9nZW5lcmljeDg2ICAgID89ICI0ZDMxYThiNzY2MTUwOWZmMTA0NGFiY2Y5MDUwNzUwY2MyNDc4ZTIwIgorU1JDUkVWX21hY2hpbmVfZ2VuZXJpY3g4Ni02NCA/PSAiNGQzMWE4Yjc2NjE1MDlmZjEwNDRhYmNmOTA1MDc1MGNjMjQ3OGUyMCIKK1NSQ1JFVl9tYWNoaW5lX2VkZ2Vyb3V0ZXIgPz0gIjRkMzFhOGI3NjYxNTA5ZmYxMDQ0YWJjZjkwNTA3NTBjYzI0NzhlMjAiCitTUkNSRVZfbWFjaGluZV9iZWFnbGVib25lLXlvY3RvID89ICI0ZDMxYThiNzY2MTUwOWZmMTA0NGFiY2Y5MDUwNzUwY2MyNDc4ZTIwIgorU1JDUkVWX21hY2hpbmVfbXBjODMxNWUtcmRiID89ICI3MDEyMGMwYTZiMGY4ODEyMjc5OTcwNTExNGE5OWExNWJmMDExM2NlIgogCiBDT01QQVRJQkxFX01BQ0hJTkVfZ2VuZXJpY3g4NiA9ICJnZW5lcmljeDg2IgogQ09NUEFUSUJMRV9NQUNISU5FX2dlbmVyaWN4ODYtNjQgPSAiZ2VuZXJpY3g4Ni02NCIKQEAgLTE5LDggKzE5LDggQEAKIENPTVBBVElCTEVfTUFDSElORV9iZWFnbGVib25lID0gImJlYWdsZWJvbmUiCiBDT01QQVRJQkxFX01BQ0hJTkVfbXBjODMxNWUtcmRiID0gIm1wYzgzMTVlLXJkYiIKIAotTElOVVhfVkVSU0lPTl9nZW5lcmljeDg2ID0gIjQuNC44NyIKLUxJTlVYX1ZFUlNJT05fZ2VuZXJpY3g4Ni02NCA9ICI0LjQuODciCi1MSU5VWF9WRVJTSU9OX2VkZ2Vyb3V0ZXIgPSAiNC40Ljg3IgotTElOVVhfVkVSU0lPTl9iZWFnbGVib25lID0gIjQuNC44NyIKLUxJTlVYX1ZFUlNJT05fbXBjODMxNWUtcmRiID0gIjQuNC44NyIKK0xJTlVYX1ZFUlNJT05fZ2VuZXJpY3g4NiA9ICI0LjQuMTEzIgorTElOVVhfVkVSU0lPTl9nZW5lcmljeDg2LTY0ID0gIjQuNC4xMTMiCitMSU5VWF9WRVJTSU9OX2VkZ2Vyb3V0ZXIgPSAiNC40LjExMyIKK0xJTlVYX1ZFUlNJT05fYmVhZ2xlYm9uZS15b2N0byA9ICI0LjQuMTEzIgorTElOVVhfVkVSU0lPTl9tcGM4MzE1ZS1yZGIgPSAiNC40LjExMyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjkuYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC45LmJiYXBwZW5kCmluZGV4IGIzYjVjZDUuLmMwYjJlZWEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjkuYmJhcHBlbmQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOS5iYmFwcGVuZApAQCAtNywxMSArNywxMSBAQAogS0JSQU5DSF9iZWFnbGVib25lID0gInN0YW5kYXJkL2JlYWdsZWJvbmUiCiBLQlJBTkNIX21wYzgzMTVlLXJkYiA9ICJzdGFuZGFyZC9mc2wtbXBjODMxNWUtcmRiIgogCi1TUkNSRVZfbWFjaGluZV9nZW5lcmljeDg2ICAgID89ICI0ODBlZTU5OWZiOGRmNzEyYzEwZGNmNGI3YWE2Mzk4Yjc5ZjdkNDA0IgotU1JDUkVWX21hY2hpbmVfZ2VuZXJpY3g4Ni02NCA/PSAiNDgwZWU1OTlmYjhkZjcxMmMxMGRjZjRiN2FhNjM5OGI3OWY3ZDQwNCIKLVNSQ1JFVl9tYWNoaW5lX2VkZ2Vyb3V0ZXIgPz0gIjQ4MGVlNTk5ZmI4ZGY3MTJjMTBkY2Y0YjdhYTYzOThiNzlmN2Q0MDQiCi1TUkNSRVZfbWFjaGluZV9iZWFnbGVib25lID89ICI0ODBlZTU5OWZiOGRmNzEyYzEwZGNmNGI3YWE2Mzk4Yjc5ZjdkNDA0IgotU1JDUkVWX21hY2hpbmVfbXBjODMxNWUtcmRiID89ICI4OGE3MDNiMTVhNzU2NDcwNGMzZGM1ZDNjMTIzN2UwODU5ODk3NjU1IgorU1JDUkVWX21hY2hpbmVfZ2VuZXJpY3g4NiAgICA/PSAiZjdhNmQ0NWZmZjg1MzE3M2JmYmY2MTcwNmFlZmZjZDFkMWU5OTQ2NyIKK1NSQ1JFVl9tYWNoaW5lX2dlbmVyaWN4ODYtNjQgPz0gImY3YTZkNDVmZmY4NTMxNzNiZmJmNjE3MDZhZWZmY2QxZDFlOTk0NjciCitTUkNSRVZfbWFjaGluZV9lZGdlcm91dGVyID89ICJmN2E2ZDQ1ZmZmODUzMTczYmZiZjYxNzA2YWVmZmNkMWQxZTk5NDY3IgorU1JDUkVWX21hY2hpbmVfYmVhZ2xlYm9uZS15b2N0byA/PSAiZjdhNmQ0NWZmZjg1MzE3M2JmYmY2MTcwNmFlZmZjZDFkMWU5OTQ2NyIKK1NSQ1JFVl9tYWNoaW5lX21wYzgzMTVlLXJkYiA/PSAiMTk1YTg1N2EwZTQyMTUwYjk0MGRmY2JkZjg1N2JlNjZlMDVkZDAwMyIKIAogQ09NUEFUSUJMRV9NQUNISU5FX2dlbmVyaWN4ODYgPSAiZ2VuZXJpY3g4NiIKIENPTVBBVElCTEVfTUFDSElORV9nZW5lcmljeDg2LTY0ID0gImdlbmVyaWN4ODYtNjQiCkBAIC0xOSw4ICsxOSw4IEBACiBDT01QQVRJQkxFX01BQ0hJTkVfYmVhZ2xlYm9uZSA9ICJiZWFnbGVib25lIgogQ09NUEFUSUJMRV9NQUNISU5FX21wYzgzMTVlLXJkYiA9ICJtcGM4MzE1ZS1yZGIiCiAKLUxJTlVYX1ZFUlNJT05fZ2VuZXJpY3g4NiA9ICI0LjkuNDkiCi1MSU5VWF9WRVJTSU9OX2dlbmVyaWN4ODYtNjQgPSAiNC45LjQ5IgotTElOVVhfVkVSU0lPTl9lZGdlcm91dGVyID0gIjQuOS40OSIKLUxJTlVYX1ZFUlNJT05fYmVhZ2xlYm9uZSA9ICI0LjkuNDkiCi1MSU5VWF9WRVJTSU9OX21wYzgzMTVlLXJkYiA9ICI0LjkuNDkiCitMSU5VWF9WRVJTSU9OX2dlbmVyaWN4ODYgPSAiNC45Ljc4IgorTElOVVhfVkVSU0lPTl9nZW5lcmljeDg2LTY0ID0gIjQuOS43OCIKK0xJTlVYX1ZFUlNJT05fZWRnZXJvdXRlciA9ICI0LjkuNzgiCitMSU5VWF9WRVJTSU9OX2JlYWdsZWJvbmUteW9jdG8gPSAiNC45Ljc4IgorTElOVVhfVkVSU0lPTl9tcGM4MzE1ZS1yZGIgPSAiNC45Ljc4IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9sYXllci5jb25mIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9sYXllci5jb25mCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWQzMGVkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvbGF5ZXIuY29uZgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotIyBEdW1teSBmaWxlIHRvIGFsbG93IGZvciBtZXRhLXlvY3RvIC0+IG1ldGEtcG9reSB0cmFuc2l0aW9uCi1CQlBBVEggPS4gIiR7TEFZRVJESVJ9Ly4uL21ldGEtcG9reToiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2FsbGFyY2guYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYWxsYXJjaC5iYmNsYXNzCmluZGV4IGE3Y2UwMjQuLjUxYmE1MDkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYWxsYXJjaC5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYWxsYXJjaC5iYmNsYXNzCkBAIC00Myw4ICs0Myw4IEBACiAgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX1BBQ0tBR0VfU1RSSVAiLCAiMSIpCiAKICAgICAgICAgIyBUaGVzZSBtdWx0aWxpYiB2YWx1ZXMgc2hvdWxkbid0IGNoYW5nZSBhbGxhcmNoIHBhY2thZ2VzIHNvIGV4Y2x1ZGUgdGhlbQotICAgICAgICBkLnNldFZhckZsYWcoImVtaXRfcGtnZGF0YSIsICJ2YXJkZXBzZXhjbHVkZSIsICJNVUxUSUxJQl9WQVJJQU5UUyIpCi0gICAgICAgIGQuc2V0VmFyRmxhZygid3JpdGVfc3BlY2ZpbGUiLCAidmFyZGVwc2V4Y2x1ZGUiLCAiTVVMVElMSUJTIikKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCJlbWl0X3BrZ2RhdGEiLCAidmFyZGVwc2V4Y2x1ZGUiLCAiIE1VTFRJTElCX1ZBUklBTlRTIikKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCJ3cml0ZV9zcGVjZmlsZSIsICJ2YXJkZXBzZXhjbHVkZSIsICIgTVVMVElMSUJTIikKICAgICBlbGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3BhY2thZ2Vncm91cCcsIGQpIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCk6CiAgICAgICAgIGJiLmVycm9yKCJQbGVhc2UgZW5zdXJlIHJlY2lwZSAlcyBzZXRzIFBBQ0tBR0VfQVJDSCBiZWZvcmUgaW5oZXJpdCBwYWNrYWdlZ3JvdXAiICUgZC5nZXRWYXIoIkZJTEUiKSkKIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYXJjaGl2ZXIuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYXJjaGl2ZXIuYmJjbGFzcwppbmRleCAxOGM1Yjk2Li5lYzgwYWQ0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2FyY2hpdmVyLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9hcmNoaXZlci5iYmNsYXNzCkBAIC0yMjMsNiArMjIzLDggQEAKICAgICBpbXBvcnQgc2h1dGlsCiAKICAgICAjIEZvcmNpYmx5IGV4cGFuZCB0aGUgc3lzcm9vdCBwYXRocyBhcyB3ZSdyZSBhYm91dCB0byBjaGFuZ2UgV09SS0RJUgorICAgIGQuc2V0VmFyKCdTVEFHSU5HX0RJUl9IT1NUJywgZC5nZXRWYXIoJ1NUQUdJTkdfRElSX0hPU1QnKSkKKyAgICBkLnNldFZhcignU1RBR0lOR19ESVJfVEFSR0VUJywgZC5nZXRWYXIoJ1NUQUdJTkdfRElSX1RBUkdFVCcpKQogICAgIGQuc2V0VmFyKCdSRUNJUEVfU1lTUk9PVCcsIGQuZ2V0VmFyKCdSRUNJUEVfU1lTUk9PVCcpKQogICAgIGQuc2V0VmFyKCdSRUNJUEVfU1lTUk9PVF9OQVRJVkUnLCBkLmdldFZhcignUkVDSVBFX1NZU1JPT1RfTkFUSVZFJykpCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYXV0b3Rvb2xzLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2F1dG90b29scy5iYmNsYXNzCmluZGV4IGFjMDRhMDcuLmVmYTQwOTggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYXV0b3Rvb2xzLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9hdXRvdG9vbHMuYmJjbGFzcwpAQCAtMTQxLDcgKzE0MSw3IEBACiAKIHB5dGhvbiBhdXRvdG9vbHNfYWNsb2NhbHMgKCkgewogICAgICMgUmVmcmVzaCB2YXJpYWJsZSB3aXRoIGNhY2hlIGZpbGVzCi0gICAgZC5zZXRWYXIoIkNPTkZJR19TSVRFIiwgc2l0ZWluZm9fZ2V0X2ZpbGVzKGQsIGFjbG9jYWxjYWNoZT1UcnVlKSkKKyAgICBkLnNldFZhcigiQ09ORklHX1NJVEUiLCBzaXRlaW5mb19nZXRfZmlsZXMoZCwgc3lzcm9vdGNhY2hlPVRydWUpKQogfQogCiBDT05GSUdVUkVfRklMRVMgPSAiJHtTfS9jb25maWd1cmUuaW4gJHtTfS9jb25maWd1cmUuYWMgJHtTfS9jb25maWcuaC5pbiAke1N9L2FjaW5jbHVkZS5tNCBNYWtlZmlsZS5hbSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmFzZS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9iYXNlLmJiY2xhc3MKaW5kZXggZDk1YWZiNy4uYmQwZDZlMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9iYXNlLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9iYXNlLmJiY2xhc3MKQEAgLTYxLDIyICs2MSwxNSBAQAogCiAKIGRlZiBiYXNlX2RlcF9wcmVwZW5kKGQpOgotICAgICMKLSAgICAjIElkZWFsbHkgdGhpcyB3aWxsIGNoZWNrIGEgZmxhZyBzbyB3ZSB3aWxsIG9wZXJhdGUgcHJvcGVybHkgaW4KLSAgICAjIHRoZSBjYXNlIHdoZXJlIGhvc3QgPT0gYnVpbGQgPT0gdGFyZ2V0LCBmb3Igbm93IHdlIGRvbid0IHdvcmsgaW4KLSAgICAjIHRoYXQgY2FzZSB0aG91Z2guCi0gICAgIworICAgIGlmIGQuZ2V0VmFyKCdJTkhJQklUX0RFRkFVTFRfREVQUycsIEZhbHNlKToKKyAgICAgICAgcmV0dXJuICIiCisgICAgcmV0dXJuICIke0JBU0VfREVGQVVMVF9ERVBTfSIKIAotICAgIGRlcHMgPSAiIgotICAgICMgSU5ISUJJVF9ERUZBVUxUX0RFUFMgZG9lc24ndCBhcHBseSB0byB0aGUgcGF0Y2ggY29tbWFuZC4gIFdoZXRoZXIgb3IgIG5vdAotICAgICMgd2UgbmVlZCB0aGF0IGJ1aWx0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgcGF0Y2ggZnVuY3Rpb24gLyBjbGFzcywgbm90Ci0gICAgIyB0aGUgYXBwbGljYXRpb24uCi0gICAgaWYgbm90IGQuZ2V0VmFyKCdJTkhJQklUX0RFRkFVTFRfREVQUycsIEZhbHNlKToKLSAgICAgICAgaWYgKGQuZ2V0VmFyKCdIT1NUX1NZUycpICE9IGQuZ2V0VmFyKCdCVUlMRF9TWVMnKSk6Ci0gICAgICAgICAgICBkZXBzICs9ICIgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWNvbXBpbGVybGlicyB2aXJ0dWFsL2xpYmMgIgotICAgIHJldHVybiBkZXBzCitCQVNFX0RFRkFVTFRfREVQUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Y29tcGlsZXJsaWJzIHZpcnR1YWwvbGliYyIKIAotQkFTRURFUEVORFMgPSAiJHtAYmFzZV9kZXBfcHJlcGVuZChkKX0iCitCQVNFREVQRU5EUyA9ICIiCitCQVNFREVQRU5EU19jbGFzcy10YXJnZXQgPSAiJHtAYmFzZV9kZXBfcHJlcGVuZChkKX0iCitCQVNFREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAiJHtAYmFzZV9kZXBfcHJlcGVuZChkKX0iCiAKIERFUEVORFNfcHJlcGVuZD0iJHtCQVNFREVQRU5EU30gIgogCkBAIC0xODUsNyArMTc4LDcgQEAKIAogZGVmIGdldF9sYXllcnNfYnJhbmNoX3JldihkKToKICAgICBsYXllcnMgPSAoZC5nZXRWYXIoIkJCTEFZRVJTIikgb3IgIiIpLnNwbGl0KCkKLSAgICBsYXllcnNfYnJhbmNoX3JldiA9IFsiJS0xN3MgPSBcIiVzOiVzXCIiICUgKG9zLnBhdGguYmFzZW5hbWUoaSksIFwKKyAgICBsYXllcnNfYnJhbmNoX3JldiA9IFsiJS0yMHMgPSBcIiVzOiVzXCIiICUgKG9zLnBhdGguYmFzZW5hbWUoaSksIFwKICAgICAgICAgYmFzZV9nZXRfbWV0YWRhdGFfZ2l0X2JyYW5jaChpLCBOb25lKS5zdHJpcCgpLCBcCiAgICAgICAgIGJhc2VfZ2V0X21ldGFkYXRhX2dpdF9yZXZpc2lvbihpLCBOb25lKSkgXAogICAgICAgICAgICAgZm9yIGkgaW4gbGF5ZXJzXQpAQCAtMjEzLDcgKzIwNiw3IEBACiAgICAgZm9yIHZhciBpbiBzdGF0dXN2YXJzOgogICAgICAgICB2YWx1ZSA9IGQuZ2V0VmFyKHZhcikKICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB5aWVsZCAnJS0xN3MgPSAiJXMiJyAlICh2YXIsIHZhbHVlKQorICAgICAgICAgICAgeWllbGQgJyUtMjBzID0gIiVzIicgJSAodmFyLCB2YWx1ZSkKIAogZGVmIGJ1aWxkY2ZnX25lZWRlZHZhcnMoZCk6CiAgICAgbmVlZGVkX3ZhcnMgPSBvZS5kYXRhLnR5cGVkX3ZhbHVlKCJCVUlMRENGR19ORUVERURWQVJTIiwgZCkKQEAgLTIyNyw3ICsyMjAsNyBAQAogICAgICAgICBiYi5mYXRhbCgnVGhlIGZvbGxvd2luZyB2YXJpYWJsZShzKSB3ZXJlIG5vdCBzZXQ6ICVzXG5QbGVhc2Ugc2V0IHRoZW0gZGlyZWN0bHksIG9yIGNob29zZSBhIE1BQ0hJTkUgb3IgRElTVFJPIHRoYXQgc2V0cyB0aGVtLicgJSAnLCAnLmpvaW4ocGVzdGVydXNlcikpCiAKIGFkZGhhbmRsZXIgYmFzZV9ldmVudGhhbmRsZXIKLWJhc2VfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQ29uZmlnUGFyc2VkIGJiLmV2ZW50LkJ1aWxkU3RhcnRlZCBiYi5ldmVudC5SZWNpcGVQcmVGaW5hbGlzZSBiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlQ29tcGxldGUgYmIuZXZlbnQuUmVjaXBlUGFyc2VkIgorYmFzZV9ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5Db25maWdQYXJzZWQgYmIuZXZlbnQuTXVsdGlDb25maWdQYXJzZWQgYmIuZXZlbnQuQnVpbGRTdGFydGVkIGJiLmV2ZW50LlJlY2lwZVByZUZpbmFsaXNlIGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVDb21wbGV0ZSBiYi5ldmVudC5SZWNpcGVQYXJzZWQiCiBweXRob24gYmFzZV9ldmVudGhhbmRsZXIoKSB7CiAgICAgaW1wb3J0IGJiLnJ1bnF1ZXVlCiAKQEAgLTI0Miw2ICsyMzUsMTYgQEAKICAgICAgICAgc2V0dXBfaG9zdHRvb2xzX2RpcihkLmdldFZhcignSE9TVFRPT0xTX0RJUicpLCAnSE9TVFRPT0xTJywgZCkKICAgICAgICAgc2V0dXBfaG9zdHRvb2xzX2RpcihkLmdldFZhcignSE9TVFRPT0xTX0RJUicpLCAnSE9TVFRPT0xTX05PTkZBVEFMJywgZCwgZmF0YWw9RmFsc2UpCiAKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50Lk11bHRpQ29uZmlnUGFyc2VkKToKKyAgICAgICAgIyBXZSBuZWVkIHRvIGV4cGFuZCBTSUdHRU5fRVhDTFVERV9TQUZFX1JFQ0lQRV9ERVBTIGluIGVhY2ggb2YgdGhlIG11bHRpY29uZmlnIGRhdGEgc3RvcmVzCisgICAgICAgICMgb3duIGNvbnRleHRzIHNvIHRoZSB2YXJpYWJsZXMgZ2V0IGV4cGFuZGVkIGNvcnJlY3RseSBmb3IgdGhhdCBhcmNoLCB0aGVuIGluamVjdCBiYWNrIGludG8KKyAgICAgICAgIyB0aGUgbWFpbiBkYXRhIHN0b3JlLgorICAgICAgICBkZXBzID0gW10KKyAgICAgICAgZm9yIGNvbmZpZyBpbiBlLm1jZGF0YToKKyAgICAgICAgICAgIGRlcHMuYXBwZW5kKGUubWNkYXRhW2NvbmZpZ10uZ2V0VmFyKCJTSUdHRU5fRVhDTFVERV9TQUZFX1JFQ0lQRV9ERVBTIikpCisgICAgICAgIGRlcHMgPSAiICIuam9pbihkZXBzKQorICAgICAgICBlLm1jZGF0YVsnJ10uc2V0VmFyKCJTSUdHRU5fRVhDTFVERV9TQUZFX1JFQ0lQRV9ERVBTIiwgZGVwcykKKwogICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuQnVpbGRTdGFydGVkKToKICAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGUuZGF0YSkKICAgICAgICAgc3RhdHVzbGluZXMgPSBbXQpAQCAtMzkxLDcgKzM5NCw3IEBACiAgICAgIyBUaGVzZSB0YWtlIHRoZSBmb3JtOgogICAgICMKICAgICAjIFBBQ0tBR0VDT05GSUcgPz89ICI8ZGVmYXVsdCBvcHRpb25zPiIKLSAgICAjIFBBQ0tBR0VDT05GSUdbZm9vXSA9ICItLWVuYWJsZS1mb28sLS1kaXNhYmxlLWZvbyxmb29fZGVwZW5kcyxmb29fcnVudGltZV9kZXBlbmRzIgorICAgICMgUEFDS0FHRUNPTkZJR1tmb29dID0gIi0tZW5hYmxlLWZvbywtLWRpc2FibGUtZm9vLGZvb19kZXBlbmRzLGZvb19ydW50aW1lX2RlcGVuZHMsZm9vX3J1bnRpbWVfcmVjb21tZW5kcyIKICAgICBwa2djb25maWdmbGFncyA9IGQuZ2V0VmFyRmxhZ3MoIlBBQ0tBR0VDT05GSUciKSBvciB7fQogICAgIGlmIHBrZ2NvbmZpZ2ZsYWdzOgogICAgICAgICBwa2djb25maWcgPSAoZC5nZXRWYXIoJ1BBQ0tBR0VDT05GSUcnKSBvciAiIikuc3BsaXQoKQpAQCAtNDMzLDEyICs0MzYsMTMgQEAKIAogICAgICAgICBleHRyYWRlcHMgPSBbXQogICAgICAgICBleHRyYXJkZXBzID0gW10KKyAgICAgICAgZXh0cmFycmVjcyA9IFtdCiAgICAgICAgIGV4dHJhY29uZiA9IFtdCiAgICAgICAgIGZvciBmbGFnLCBmbGFndmFsIGluIHNvcnRlZChwa2djb25maWdmbGFncy5pdGVtcygpKToKICAgICAgICAgICAgIGl0ZW1zID0gZmxhZ3ZhbC5zcGxpdCgiLCIpCiAgICAgICAgICAgICBudW0gPSBsZW4oaXRlbXMpCi0gICAgICAgICAgICBpZiBudW0gPiA0OgotICAgICAgICAgICAgICAgIGJiLmVycm9yKCIlczogUEFDS0FHRUNPTkZJR1slc10gT25seSBlbmFibGUsZGlzYWJsZSxkZXBlbmQscmRlcGVuZCBjYW4gYmUgc3BlY2lmaWVkISIKKyAgICAgICAgICAgIGlmIG51bSA+IDU6CisgICAgICAgICAgICAgICAgYmIuZXJyb3IoIiVzOiBQQUNLQUdFQ09ORklHWyVzXSBPbmx5IGVuYWJsZSxkaXNhYmxlLGRlcGVuZCxyZGVwZW5kLHJyZWNvbW1lbmQgY2FuIGJlIHNwZWNpZmllZCEiCiAgICAgICAgICAgICAgICAgICAgICUgKGQuZ2V0VmFyKCdQTicpLCBmbGFnKSkKIAogICAgICAgICAgICAgaWYgZmxhZyBpbiBwa2djb25maWc6CkBAIC00NDYsMTIgKzQ1MCwxNSBAQAogICAgICAgICAgICAgICAgICAgICBleHRyYWRlcHMuYXBwZW5kKGl0ZW1zWzJdKQogICAgICAgICAgICAgICAgIGlmIG51bSA+PSA0IGFuZCBpdGVtc1szXToKICAgICAgICAgICAgICAgICAgICAgZXh0cmFyZGVwcy5hcHBlbmQoaXRlbXNbM10pCisgICAgICAgICAgICAgICAgaWYgbnVtID49IDUgYW5kIGl0ZW1zWzRdOgorICAgICAgICAgICAgICAgICAgICBleHRyYXJyZWNzLmFwcGVuZChpdGVtc1s0XSkKICAgICAgICAgICAgICAgICBpZiBudW0gPj0gMSBhbmQgaXRlbXNbMF06CiAgICAgICAgICAgICAgICAgICAgIGV4dHJhY29uZi5hcHBlbmQoaXRlbXNbMF0pCiAgICAgICAgICAgICBlbGlmIG51bSA+PSAyIGFuZCBpdGVtc1sxXToKICAgICAgICAgICAgICAgICAgICAgZXh0cmFjb25mLmFwcGVuZChpdGVtc1sxXSkKICAgICAgICAgYXBwZW5kVmFyKCdERVBFTkRTJywgZXh0cmFkZXBzKQogICAgICAgICBhcHBlbmRWYXIoJ1JERVBFTkRTXyR7UE59JywgZXh0cmFyZGVwcykKKyAgICAgICAgYXBwZW5kVmFyKCdSUkVDT01NRU5EU18ke1BOfScsIGV4dHJhcnJlY3MpCiAgICAgICAgIGFwcGVuZFZhcignUEFDS0FHRUNPTkZJR19DT05GQVJHUycsIGV4dHJhY29uZikKIAogICAgIHBuID0gZC5nZXRWYXIoJ1BOJykKQEAgLTYxNywxNiArNjI0LDE2IEBACiAgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3VucGFjaycsICdkZXBlbmRzJywgJyBsemlwLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKIAogICAgICAgICAjICoueHogc2hvdWxkIERFUEVORCBvbiB4ei1uYXRpdmUgZm9yIHVucGFja2luZwotICAgICAgICBlbGlmIHBhdGguZW5kc3dpdGgoJy54eicpOgorICAgICAgICBlbGlmIHBhdGguZW5kc3dpdGgoJy54eicpIG9yIHBhdGguZW5kc3dpdGgoJy50eHonKToKICAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fdW5wYWNrJywgJ2RlcGVuZHMnLCAnIHh6LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKIAogICAgICAgICAjIC56aXAgc2hvdWxkIERFUEVORCBvbiB1bnppcC1uYXRpdmUgZm9yIHVucGFja2luZwotICAgICAgICBlbGlmIHBhdGguZW5kc3dpdGgoJy56aXAnKToKKyAgICAgICAgZWxpZiBwYXRoLmVuZHN3aXRoKCcuemlwJykgb3IgcGF0aC5lbmRzd2l0aCgnLmphcicpOgogICAgICAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb191bnBhY2snLCAnZGVwZW5kcycsICcgdW56aXAtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQogCiAgICAgICAgICMgZmlsZSBpcyBuZWVkZWQgYnkgcnBtMmNwaW8uc2gKLSAgICAgICAgZWxpZiBwYXRoLmVuZHN3aXRoKCcuc3JjLnJwbScpOgotICAgICAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb191bnBhY2snLCAnZGVwZW5kcycsICcgZmlsZS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisgICAgICAgIGVsaWYgcGF0aC5lbmRzd2l0aCgnLnJwbScpOgorICAgICAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb191bnBhY2snLCAnZGVwZW5kcycsICcgeHotbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQogCiAgICAgaWYgbmVlZHNyY3JldjoKICAgICAgICAgZC5zZXRWYXIoIlNSQ1BWIiwgIiR7QGJiLmZldGNoMi5nZXRfc3JjcmV2KGQpfSIpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1aWxkaGlzdG9yeS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9idWlsZGhpc3RvcnkuYmJjbGFzcwppbmRleCAzODIzYzY2Li43YTU1MzRlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1aWxkaGlzdG9yeS5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYnVpbGRoaXN0b3J5LmJiY2xhc3MKQEAgLTE5Miw3ICsxOTIsNyBAQAogICAgIHBlID0gZC5nZXRWYXIoJ1BFJykgb3IgIjAiCiAgICAgcHYgPSBkLmdldFZhcignUFYnKQogICAgIHByID0gZC5nZXRWYXIoJ1BSJykKLSAgICBsYXllciA9IGJiLnV0aWxzLmdldF9maWxlX2xheWVyKGQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSksIGQpCisgICAgbGF5ZXIgPSBiYi51dGlscy5nZXRfZmlsZV9sYXllcihkLmdldFZhcignRklMRScpLCBkKQogCiAgICAgcGtnZGF0YV9kaXIgPSBkLmdldFZhcignUEtHREFUQV9ESVInKQogICAgIHBhY2thZ2VzID0gIiIKQEAgLTM0OCw2ICszNDgsNyBAQAogICAgICAgICBmLndyaXRlKHUiUEFDS0FHRVMgPSAlc1xuIiAlICByY3BpbmZvLnBhY2thZ2VzKQogICAgICAgICBmLndyaXRlKHUiTEFZRVIgPSAlc1xuIiAlICByY3BpbmZvLmxheWVyKQogCisgICAgd3JpdGVfbGF0ZXN0X3NyY3JldihkLCBwa2doaXN0ZGlyKQogCiBkZWYgd3JpdGVfcGtnaGlzdG9yeShwa2dpbmZvLCBkKToKICAgICBiYi5kZWJ1ZygyLCAiV3JpdGluZyBwYWNrYWdlIGhpc3RvcnkgZm9yIHBhY2thZ2UgJXMiICUgcGtnaW5mby5uYW1lKQpAQCAtNjAwLDI2ICs2MDEsMTkgQEAKIAogcHl0aG9uIGJ1aWxkaGlzdG9yeV9nZXRfZXh0cmFfc2RraW5mbygpIHsKICAgICBpbXBvcnQgb3BlcmF0b3IKLSAgICBpbXBvcnQgbWF0aAorICAgIGZyb20gb2Uuc2RrIGltcG9ydCBnZXRfZXh0cmFfc2RraW5mbworCisgICAgc3N0YXRlX2RpciA9IGQuZXhwYW5kKCcke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vc3N0YXRlLWNhY2hlJykKKyAgICBleHRyYV9pbmZvID0gZ2V0X2V4dHJhX3Nka2luZm8oc3N0YXRlX2RpcikKIAogICAgIGlmIGQuZ2V0VmFyKCdCQl9DVVJSRU5UVEFTSycpID09ICdwb3B1bGF0ZV9zZGtfZXh0JyBhbmQgXAogICAgICAgICAgICAgInNkayIgaW4gKGQuZ2V0VmFyKCdCVUlMREhJU1RPUllfRkVBVFVSRVMnKSBvciAiIikuc3BsaXQoKToKLSAgICAgICAgdGFza3NpemVzID0ge30KLSAgICAgICAgZmlsZXNpemVzID0ge30KLSAgICAgICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsoZC5leHBhbmQoJyR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS9zc3RhdGUtY2FjaGUnKSk6Ci0gICAgICAgICAgICBmb3IgZm4gaW4gZmlsZXM6Ci0gICAgICAgICAgICAgICAgaWYgZm4uZW5kc3dpdGgoJy50Z3onKToKLSAgICAgICAgICAgICAgICAgICAgZnNpemUgPSBpbnQobWF0aC5jZWlsKGZsb2F0KG9zLnBhdGguZ2V0c2l6ZShvcy5wYXRoLmpvaW4ocm9vdCwgZm4pKSkgLyAxMDI0KSkKLSAgICAgICAgICAgICAgICAgICAgdGFzayA9IGZuLnJzcGxpdCgnOicsIDEpWzFdLnNwbGl0KCdfJywgMSlbMV0uc3BsaXQoJy4nKVswXQotICAgICAgICAgICAgICAgICAgICBvcmlndG90YWwgPSB0YXNrc2l6ZXMuZ2V0KHRhc2ssIDApCi0gICAgICAgICAgICAgICAgICAgIHRhc2tzaXplc1t0YXNrXSA9IG9yaWd0b3RhbCArIGZzaXplCi0gICAgICAgICAgICAgICAgICAgIGZpbGVzaXplc1tmbl0gPSBmc2l6ZQogICAgICAgICB3aXRoIG9wZW4oZC5leHBhbmQoJyR7QlVJTERISVNUT1JZX0RJUl9TREt9L3NzdGF0ZS1wYWNrYWdlLXNpemVzLnR4dCcpLCAndycpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlc2l6ZXNfc29ydGVkID0gc29ydGVkKGZpbGVzaXplcy5pdGVtcygpLCBrZXk9b3BlcmF0b3IuaXRlbWdldHRlcigxLCAwKSwgcmV2ZXJzZT1UcnVlKQorICAgICAgICAgICAgZmlsZXNpemVzX3NvcnRlZCA9IHNvcnRlZChleHRyYV9pbmZvWydmaWxlc2l6ZXMnXS5pdGVtcygpLCBrZXk9b3BlcmF0b3IuaXRlbWdldHRlcigxLCAwKSwgcmV2ZXJzZT1UcnVlKQogICAgICAgICAgICAgZm9yIGZuLCBzaXplIGluIGZpbGVzaXplc19zb3J0ZWQ6CiAgICAgICAgICAgICAgICAgZi53cml0ZSgnJTEwZCBLaUIgJXNcbicgJSAoc2l6ZSwgZm4pKQogICAgICAgICB3aXRoIG9wZW4oZC5leHBhbmQoJyR7QlVJTERISVNUT1JZX0RJUl9TREt9L3NzdGF0ZS10YXNrLXNpemVzLnR4dCcpLCAndycpIGFzIGY6Ci0gICAgICAgICAgICB0YXNrc2l6ZXNfc29ydGVkID0gc29ydGVkKHRhc2tzaXplcy5pdGVtcygpLCBrZXk9b3BlcmF0b3IuaXRlbWdldHRlcigxLCAwKSwgcmV2ZXJzZT1UcnVlKQorICAgICAgICAgICAgdGFza3NpemVzX3NvcnRlZCA9IHNvcnRlZChleHRyYV9pbmZvWyd0YXNrc2l6ZXMnXS5pdGVtcygpLCBrZXk9b3BlcmF0b3IuaXRlbWdldHRlcigxLCAwKSwgcmV2ZXJzZT1UcnVlKQogICAgICAgICAgICAgZm9yIHRhc2ssIHNpemUgaW4gdGFza3NpemVzX3NvcnRlZDoKICAgICAgICAgICAgICAgICBmLndyaXRlKCclMTBkIEtpQiAlc1xuJyAlIChzaXplLCB0YXNrKSkKIH0KQEAgLTcxNSwyMCArNzA5LDIzIEBACiAKIAogZGVmIGJ1aWxkaGlzdG9yeV9nZXRfY21kbGluZShkKToKLSAgICBpZiBzeXMuYXJndlswXS5lbmRzd2l0aCgnYmluL2JpdGJha2UnKToKLSAgICAgICAgYmluY21kID0gJ2JpdGJha2UnCi0gICAgZWxzZToKLSAgICAgICAgYmluY21kID0gc3lzLmFyZ3ZbMF0KLSAgICByZXR1cm4gJyVzICVzJyAlIChiaW5jbWQsICcgJy5qb2luKHN5cy5hcmd2WzE6XSkpCisgICAgYXJndiA9IGQuZ2V0VmFyKCdCQl9DTURMSU5FJywgRmFsc2UpCisgICAgaWYgYXJndjoKKyAgICAgICAgaWYgYXJndlswXS5lbmRzd2l0aCgnYmluL2JpdGJha2UnKToKKyAgICAgICAgICAgIGJpbmNtZCA9ICdiaXRiYWtlJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmluY21kID0gYXJndlswXQorICAgICAgICByZXR1cm4gJyVzICVzJyAlIChiaW5jbWQsICcgJy5qb2luKGFyZ3ZbMTpdKSkKKyAgICByZXR1cm4gJycKIAogCiBidWlsZGhpc3Rvcnlfc2luZ2xlX2NvbW1pdCgpIHsKIAlpZiBbICIkMyIgPSAiIiBdIDsgdGhlbgogCQljb21taXRvcHRzPSIke0JVSUxESElTVE9SWV9ESVJ9LyAtLWFsbG93LWVtcHR5IgotCQlpdGVtPSJObyBjaGFuZ2VzIgorCQlzaG9ydGxvZ3ByZWZpeD0iTm8gY2hhbmdlczogIgogCWVsc2UKLQkJY29tbWl0b3B0cz0iJDMgbWV0YWRhdGEtcmV2cyIKLQkJaXRlbT0iJDMiCisJCWNvbW1pdG9wdHM9IiIKKwkJc2hvcnRsb2dwcmVmaXg9IiIKIAlmaQogCWlmIFsgIiR7QlVJTERISVNUT1JZX0JVSUxEX0ZBSUxVUkVTfSIgPSAiMCIgXSA7IHRoZW4KIAkJcmVzdWx0PSJzdWNjZWVkZWQiCkBAIC03NDUsNyArNzQyLDcgQEAKIAllc2FjCiAJY29tbWl0bXNnZmlsZT1gbWt0ZW1wYAogCWNhdCA+ICRjb21taXRtc2dmaWxlIDw8IEVORAotJGl0ZW06IEJ1aWxkICR7QlVJTEROQU1FfSBvZiAke0RJU1RST30gJHtESVNUUk9fVkVSU0lPTn0gZm9yIG1hY2hpbmUgJHtNQUNISU5FfSBvbiAkMgorJHtzaG9ydGxvZ3ByZWZpeH1CdWlsZCAke0JVSUxETkFNRX0gb2YgJHtESVNUUk99ICR7RElTVFJPX1ZFUlNJT059IGZvciBtYWNoaW5lICR7TUFDSElORX0gb24gJDIKIAogY21kOiAkMQogCkBAIC03ODksOSArNzg2LDcgQEAKIAkJCWdpdCBhZGQgLUEgLgogCQkJIyBwb3JjZWxhaW4gb3V0cHV0IGxvb2tzIGxpa2UgIj8/IHBhY2thZ2VzL2Zvby9iYXIiCiAJCQkjIEVuc3VyZSB3ZSBjb21taXQgbWV0YWRhdGEtcmV2cyB3aXRoIHRoZSBmaXJzdCBjb21taXQKLQkJCWZvciBlbnRyeSBpbiBgZWNobyAiJHJlcG9zdGF0dXMiIHwgYXdrICd7cHJpbnQgJDJ9JyB8IGF3ayAtRi8gJ3twcmludCAkMX0nIHwgc29ydCB8IHVuaXFgIDsgZG8KLQkJCQlidWlsZGhpc3Rvcnlfc2luZ2xlX2NvbW1pdCAiJENNRExJTkUiICIkSE9TVE5BTUUiICIkZW50cnkiCi0JCQlkb25lCisJCQlidWlsZGhpc3Rvcnlfc2luZ2xlX2NvbW1pdCAiJENNRExJTkUiICIkSE9TVE5BTUUiIGR1bW15CiAJCQlnaXQgZ2MgLS1hdXRvIC0tcXVpZXQKIAkJZWxzZQogCQkJYnVpbGRoaXN0b3J5X3NpbmdsZV9jb21taXQgIiRDTURMSU5FIiAiJEhPU1ROQU1FIgpAQCAtODI5LDYgKzgyNCw4IEBACiAgICAgICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSBnZXRhdHRyKGUsICdfaW50ZXJydXB0ZWQnLCAwKQogICAgICAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0JVSUxESElTVE9SWV9CVUlMRF9JTlRFUlJVUFRFRCcsIHN0cihpbnRlcnJ1cHRlZCkpCiAgICAgICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJidWlsZGhpc3RvcnlfY29tbWl0IiwgbG9jYWxkYXRhKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJObyBjb21taXQgc2luY2UgQlVJTERISVNUT1JZX0NPTU1JVCAhPSAnMSciKQogfQogCiBhZGRoYW5kbGVyIGJ1aWxkaGlzdG9yeV9ldmVudGhhbmRsZXIKQEAgLTg3NCw3ICs4NzEsMTAgQEAKIGRvX2ZldGNoW3Bvc3RmdW5jc10gKz0gIndyaXRlX3NyY3JldiIKIGRvX2ZldGNoW3ZhcmRlcHNleGNsdWRlXSArPSAid3JpdGVfc3JjcmV2IgogcHl0aG9uIHdyaXRlX3NyY3JldigpIHsKLSAgICBwa2doaXN0ZGlyID0gZC5nZXRWYXIoJ0JVSUxESElTVE9SWV9ESVJfUEFDS0FHRScpCisgICAgd3JpdGVfbGF0ZXN0X3NyY3JldihkLCBkLmdldFZhcignQlVJTERISVNUT1JZX0RJUl9QQUNLQUdFJykpCit9CisKK2RlZiB3cml0ZV9sYXRlc3Rfc3JjcmV2KGQsIHBrZ2hpc3RkaXIpOgogICAgIHNyY3JldmZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnaGlzdGRpciwgJ2xhdGVzdF9zcmNyZXYnKQogCiAgICAgc3JjcmV2cywgdGFnX3NyY3JldnMgPSBfZ2V0X3NyY3Jldl92YWx1ZXMoZCkKQEAgLTkxMiw0ICs5MTIsMzMgQEAKICAgICBlbHNlOgogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzcmNyZXZmaWxlKToKICAgICAgICAgICAgIG9zLnJlbW92ZShzcmNyZXZmaWxlKQorCitkb190ZXN0aW1hZ2VbcG9zdGZ1bmNzXSArPSAid3JpdGVfcHRlc3RfcmVzdWx0IgorZG9fdGVzdGltYWdlW3ZhcmRlcHNleGNsdWRlXSArPSAid3JpdGVfcHRlc3RfcmVzdWx0IgorCitweXRob24gd3JpdGVfcHRlc3RfcmVzdWx0KCkgeworICAgIHdyaXRlX2xhdGVzdF9wdGVzdF9yZXN1bHQoZCwgZC5nZXRWYXIoJ0JVSUxESElTVE9SWV9ESVInKSkKIH0KKworZGVmIHdyaXRlX2xhdGVzdF9wdGVzdF9yZXN1bHQoZCwgaGlzdGRpcik6CisgICAgaW1wb3J0IGdsb2IKKyAgICBpbXBvcnQgc3VicHJvY2VzcworICAgIHRlc3RfbG9nX2RpciA9IGQuZ2V0VmFyKCdURVNUX0xPR19ESVInKQorICAgIGlucHV0X3B0ZXN0ID0gb3MucGF0aC5qb2luKHRlc3RfbG9nX2RpciwgJ3B0ZXN0X2xvZycpCisgICAgb3V0cHV0X3B0ZXN0ID0gb3MucGF0aC5qb2luKGhpc3RkaXIsICdwdGVzdCcpCisgICAgaWYgb3MucGF0aC5leGlzdHMoaW5wdXRfcHRlc3QpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIExvY2sgaXQgYXZvaWQgcmFjZSBpc3N1ZQorICAgICAgICAgICAgbG9jayA9IGJiLnV0aWxzLmxvY2tmaWxlKG91dHB1dF9wdGVzdCArICIvcHRlc3QubG9jayIpCisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3V0cHV0X3B0ZXN0KQorICAgICAgICAgICAgb2UucGF0aC5jb3B5dHJlZShpbnB1dF9wdGVzdCwgb3V0cHV0X3B0ZXN0KQorICAgICAgICAgICAgIyBTb3J0IHRlc3QgcmVzdWx0CisgICAgICAgICAgICBmb3IgcmVzdWx0IGluIGdsb2IuZ2xvYignJXMvcGFzcy5mYWlsLionICUgb3V0cHV0X3B0ZXN0KToKKyAgICAgICAgICAgICAgICBiYi5kZWJ1ZygxLCAnUHJvY2Vzc2luZyAlcycgJSByZXN1bHQpCisgICAgICAgICAgICAgICAgY21kID0gWydzb3J0JywgcmVzdWx0LCAnLW8nLCByZXN1bHRdCisgICAgICAgICAgICAgICAgYmIuZGVidWcoMSwgJ1J1bm5pbmcgJXMnICUgY21kKQorICAgICAgICAgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbChjbWQpCisgICAgICAgICAgICAgICAgaWYgcmV0ICE9IDA6CisgICAgICAgICAgICAgICAgICAgIGJiLmVycm9yKCdGYWlsZWQgdG8gcnVuICVzIScgJSBjbWQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxvY2spCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NjYWNoZS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jY2FjaGUuYmJjbGFzcwppbmRleCBkNThjOGY2Li45NjA5MDIwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NjYWNoZS5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY2NhY2hlLmJiY2xhc3MKQEAgLTEsNiArMSw1IEBACiBDQ0FDSEUgPSAiJHtAYmIudXRpbHMud2hpY2goZC5nZXRWYXIoJ1BBVEgnKSwgJ2NjYWNoZScpIGFuZCAnY2NhY2hlICd9IgogZXhwb3J0IENDQUNIRV9ESVIgPz0gIiR7VE1QRElSfS9jY2FjaGUvJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30vJHtQTn0iCi1DQ0FDSEVfRElTQUJMRVt1bmV4cG9ydF0gPSAiMSIKIAogIyBXZSBuZWVkIHRvIHN0b3AgY2NhY2hlIGNvbnNpZGVyaW5nIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBvciB0aGUKICMgZGVidWctcHJlZml4LW1hcCB0YXJnZXQgZGlyZWN0b3J5IHRvIGJlIHNpZ25pZmljYW50IHdoZW4gY2FsY3VsYXRpbmcKQEAgLTEwLDYgKzksMyBAQAogCiBERVBFTkRTX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIGNjYWNoZS1uYXRpdmUiCiBERVBFTkRTW3ZhcmRlcHZhbHVlZXhjbHVkZV0gPSAiIGNjYWNoZS1uYXRpdmUiCi0KLWRvX2NvbmZpZ3VyZVtkaXJzXSA9KyAiJHtDQ0FDSEVfRElSfSIKLWRvX2tlcm5lbF9jb25maWdtZVtkaXJzXSA9KyAiJHtDQ0FDSEVfRElSfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY21ha2UuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY21ha2UuYmJjbGFzcwppbmRleCAxMmRmNjE3Li5hYzJjMTUxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NtYWtlLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jbWFrZS5iYmNsYXNzCkBAIC0zMSw2ICszMSw5IEBACiAKIEVYVFJBX09FQ01BS0VfYXBwZW5kID0gIiAke1BBQ0tBR0VDT05GSUdfQ09ORkFSR1N9IgogCitFWFRSQV9PRUNNQUtFX0JVSUxEX3ByZXBlbmRfdGFzay1jb21waWxlID0gIiR7UEFSQUxMRUxfTUFLRX0gIgorRVhUUkFfT0VDTUFLRV9CVUlMRF9wcmVwZW5kX3Rhc2staW5zdGFsbCA9ICIke1BBUkFMTEVMX01BS0VJTlNUfSAiCisKICMgQ01ha2UgZXhwZWN0cyB0YXJnZXQgYXJjaGl0ZWN0dXJlcyBpbiB0aGUgZm9ybWF0IG9mIHVuYW1lKDIpLAogIyB3aGljaCBkbyBub3QgYWx3YXlzIG1hdGNoIFRBUkdFVF9BUkNILCBzbyBhbGwgdGhlIG5lY2Vzc2FyeQogIyBjb252ZXJzaW9ucyBzaG91bGQgaGFwcGVuIGhlcmUuCkBAIC0xMzUsMTMgKzEzOCwxMyBAQAogCiBkb19jb21waWxlW3Byb2dyZXNzXSA9ICJwZXJjZW50IgogY21ha2VfZG9fY29tcGlsZSgpICB7Ci0JY2QgJHtCfQotCWJhc2VfZG9fY29tcGlsZSBWRVJCT1NFPTEKKwliYm5vdGUgVkVSQk9TRT0xIGNtYWtlIC0tYnVpbGQgJyR7Qn0nIC0tICR7RVhUUkFfT0VDTUFLRV9CVUlMRH0KKwlWRVJCT1NFPTEgY21ha2UgLS1idWlsZCAnJHtCfScgLS0gJHtFWFRSQV9PRUNNQUtFX0JVSUxEfQogfQogCiBjbWFrZV9kb19pbnN0YWxsKCkgewotCWNkICR7Qn0KLQlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKKwliYm5vdGUgREVTVERJUj0nJHtEfScgY21ha2UgLS1idWlsZCAnJHtCfScgLS10YXJnZXQgaW5zdGFsbCAtLSAke0VYVFJBX09FQ01BS0VfQlVJTER9CisJREVTVERJUj0nJHtEfScgY21ha2UgLS1idWlsZCAnJHtCfScgLS10YXJnZXQgaW5zdGFsbCAtLSAke0VYVFJBX09FQ01BS0VfQlVJTER9CiB9CiAKIEVYUE9SVF9GVU5DVElPTlMgZG9fY29uZmlndXJlIGRvX2NvbXBpbGUgZG9faW5zdGFsbCBkb19nZW5lcmF0ZV90b29sY2hhaW5fZmlsZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jbWwxLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NtbDEuYmJjbGFzcwppbmRleCAzOGU2NjEzLi45MjY3NDdmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NtbDEuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NtbDEuYmJjbGFzcwpAQCAtNjQsNyArNjQsOCBAQAogICAgIGlmIGlzZGlmZjoKICAgICAgICAgc3RhdGVtZW50ID0gJ2RpZmYgLS11bmNoYW5nZWQtbGluZS1mb3JtYXQ9IC0tb2xkLWxpbmUtZm9ybWF0PSAtLW5ldy1saW5lLWZvcm1hdD0iJUwiICcgKyBjb25maWdvcmlnICsgJyAnICsgY29uZmlnICsgJz4nICsgZnJhZ21lbnQKICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKHN0YXRlbWVudCwgc2hlbGw9VHJ1ZSkKLQorICAgICAgICAjIE5vIG5lZWQgdG8gY2hlY2sgdGhlIGV4aXQgY29kZSBhcyB3ZSBrbm93IGl0J3MgZ29pbmcgdG8gYmUKKyAgICAgICAgIyBub24temVybywgYnV0IHRoYXQncyB3aGF0IHdlIGV4cGVjdC4KICAgICAgICAgc2h1dGlsLmNvcHkoY29uZmlnb3JpZywgY29uZmlnKQogCiAgICAgICAgIGJiLnBsYWluKCJDb25maWcgZnJhZ21lbnQgaGFzIGJlZW4gZHVtcGVkIGludG86XG4gJXMiICUgZnJhZ21lbnQpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Nyb3NzLWNhbmFkaWFuLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Nyb3NzLWNhbmFkaWFuLmJiY2xhc3MKaW5kZXggNDkzODhkNC4uMTkyODQ1NSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcm9zcy1jYW5hZGlhbi5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY3Jvc3MtY2FuYWRpYW4uYmJjbGFzcwpAQCAtMTUsNyArMTUsNyBAQAogIyBVcGRhdGUgQkFTRV9QQUNLQUdFX0FSQ0ggYW5kIFBBQ0tBR0VfQVJDSFMKICMKIFBBQ0tBR0VfQVJDSCA9ICIke1NES19BUkNIfS0ke1NES1BLR1NVRkZJWH0iCi1CQVNFQ0FOQURJQU5FWFRSQU9TID89ICJsaW51eC11Y2xpYmMgbGludXgtbXVzbCIKK0JBU0VDQU5BRElBTkVYVFJBT1MgPz0gImxpbnV4LW11c2wiCiBDQU5BRElBTkVYVFJBT1MgPSAiJHtCQVNFQ0FOQURJQU5FWFRSQU9TfSIKIENBTkFESUFORVhUUkFWRU5ET1IgPSAiIgogTU9ESUZZVE9TID8/PSAiMSIKQEAgLTM2LDExICszNiw5IEBACiAgICAgdG9zID0gZC5nZXRWYXIoIlRBUkdFVF9PUyIpCiAgICAgd2hpdGVsaXN0ID0gW10KICAgICBleHRyYWxpYmNzID0gWyIiXQotICAgIGlmICJ1Y2xpYmMiIGluIGQuZ2V0VmFyKCJCQVNFQ0FOQURJQU5FWFRSQU9TIik6Ci0gICAgICAgIGV4dHJhbGliY3MuYXBwZW5kKCJ1Y2xpYmMiKQogICAgIGlmICJtdXNsIiBpbiBkLmdldFZhcigiQkFTRUNBTkFESUFORVhUUkFPUyIpOgogICAgICAgICBleHRyYWxpYmNzLmFwcGVuZCgibXVzbCIpCi0gICAgZm9yIHZhcmlhbnQgaW4gWyIiLCAic3BlIiwgIngzMiIsICJlYWJpIiwgIm4zMiJdOgorICAgIGZvciB2YXJpYW50IGluIFsiIiwgInNwZSIsICJ4MzIiLCAiZWFiaSIsICJuMzIiLCAiaWxwMzIiXToKICAgICAgICAgZm9yIGxpYmMgaW4gZXh0cmFsaWJjczoKICAgICAgICAgICAgIGVudHJ5ID0gImxpbnV4IgogICAgICAgICAgICAgaWYgdmFyaWFudCBhbmQgbGliYzoKQEAgLTgwLDcgKzc4LDcgQEAKICAgICAgICAgZm9yIGV4dHJhb3MgaW4gZC5nZXRWYXIoIkJBU0VDQU5BRElBTkVYVFJBT1MiKS5zcGxpdCgpOgogICAgICAgICAgICAgZC5hcHBlbmRWYXIoIkNBTkFESUFORVhUUkFPUyIsICIgIiArIGV4dHJhb3MgKyAibjMyIikKICAgICBpZiB0YXJjaCA9PSAiYXJtIiBvciB0YXJjaCA9PSAiYXJtZWIiOgotICAgICAgICBkLmFwcGVuZFZhcigiQ0FOQURJQU5FWFRSQU9TIiwgIiBsaW51eC1nbnVlYWJpIGxpbnV4LW11c2xlYWJpIGxpbnV4LXVjbGliY2VhYmkiKQorICAgICAgICBkLmFwcGVuZFZhcigiQ0FOQURJQU5FWFRSQU9TIiwgIiBsaW51eC1nbnVlYWJpIGxpbnV4LW11c2xlYWJpIikKICAgICAgICAgZC5zZXRWYXIoIlRBUkdFVF9PUyIsICJsaW51eC1nbnVlYWJpIikKICAgICBlbHNlOgogICAgICAgICBkLnNldFZhcigiVEFSR0VUX09TIiwgImxpbnV4IikKQEAgLTExNSwxMSArMTEzLDYgQEAKIEhPU1RfTERfQVJDSCA9ICIke1NES19MRF9BUkNIfSIKIEhPU1RfQVNfQVJDSCA9ICIke1NES19BU19BUkNIfSIKIAotVEFSR0VUX0NQUEZMQUdTID0gIiR7QlVJTERTREtfQ1BQRkxBR1N9IgotVEFSR0VUX0NGTEFHUyA9ICIke0JVSUxEU0RLX0NGTEFHU30iCi1UQVJHRVRfQ1hYRkxBR1MgPSAiJHtCVUlMRFNES19DWFhGTEFHU30iCi1UQVJHRVRfTERGTEFHUyA9ICIke0JVSUxEU0RLX0xERkxBR1N9IgotCiAjYXNzaWduIERQS0dfQVJDSAogRFBLR19BUkNIID0gIiR7QGRlYmlhbl9hcmNoX21hcChkLmdldFZhcignU0RLX0FSQ0gnKSwgJycpfSIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcm9zcy5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcm9zcy5iYmNsYXNzCmluZGV4IDRmZWIwMWUuLmQyMTc3MTcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY3Jvc3MuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Nyb3NzLmJiY2xhc3MKQEAgLTUwLDcgKzUwLDcgQEAKICMgUGF0aCBtYW5nbGluZyBuZWVkZWQgYnkgdGhlIGNyb3NzIHBhY2thZ2luZwogIyBOb3RlIHRoYXQgd2UgdXNlIDo9IGhlcmUgdG8gZW5zdXJlIHRoYXQgbGliZGlyIGFuZCBpbmNsdWRlZGlyIGFyZQogIyB0YXJnZXQgcGF0aHMuCi10YXJnZXRfYmFzZV9wcmVmaXggOj0gIiR7YmFzZV9wcmVmaXh9IgordGFyZ2V0X2Jhc2VfcHJlZml4IDo9ICIke3Jvb3RfcHJlZml4fSIKIHRhcmdldF9wcmVmaXggOj0gIiR7cHJlZml4fSIKIHRhcmdldF9leGVjX3ByZWZpeCA6PSAiJHtleGVjX3ByZWZpeH0iCiB0YXJnZXRfYmFzZV9saWJkaXIgPSAiJHt0YXJnZXRfYmFzZV9wcmVmaXh9LyR7YmFzZWxpYn0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2N2ZS1jaGVjay5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jdmUtY2hlY2suYmJjbGFzcwppbmRleCAxM2VjNjJlLi5iYzJmMDNmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2N2ZS1jaGVjay5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY3ZlLWNoZWNrLmJiY2xhc3MKQEAgLTgzLDYgKzgzLDExIEBACiAKICAgICBpbXBvcnQgc2h1dGlsCiAKKyAgICBpZiBkLmdldFZhcigiQ1ZFX0NIRUNLX0NPUFlfRklMRVMiKSA9PSAiMSI6CisgICAgICAgIGRlcGxveV9maWxlID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJDVkVfQ0hFQ0tfRElSIiksIGQuZ2V0VmFyKCJQTiIpKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkZXBsb3lfZmlsZSk6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoZGVwbG95X2ZpbGUpCisKICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkLmdldFZhcigiQ1ZFX0NIRUNLX1RNUF9GSUxFIikpOgogICAgICAgICBiYi5ub3RlKCJXcml0aW5nIHJvb3RmcyBDVkUgbWFuaWZlc3QiKQogICAgICAgICBkZXBsb3lfZGlyID0gZC5nZXRWYXIoIkRFUExPWV9ESVJfSU1BR0UiKQpAQCAtMTAyLDYgKzEwNyw3IEBACiB9CiAKIFJPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EX3ByZXBlbmQgPSAiJHtAJ2N2ZV9jaGVja193cml0ZV9yb290ZnNfbWFuaWZlc3Q7ICcgaWYgZC5nZXRWYXIoJ0NWRV9DSEVDS19DUkVBVEVfTUFOSUZFU1QnKSA9PSAnMScgZWxzZSAnJ30iCitkb19yb290ZnNbcmVjcmRlcHRhc2tdICs9ICIke0AnZG9fY3ZlX2NoZWNrJyBpZiBkLmdldFZhcignQ1ZFX0NIRUNLX0NSRUFURV9NQU5JRkVTVCcpID09ICcxJyBlbHNlICcnfSIKIAogZGVmIGdldF9wYXRjaGVzX2N2ZXMoZCk6CiAgICAgIiIiCkBAIC0xMTIsMTAgKzExOCwyNCBAQAogCiAgICAgcG4gPSBkLmdldFZhcigiUE4iKQogICAgIGN2ZV9tYXRjaCA9IHJlLmNvbXBpbGUoIkNWRTooIENWRVwtXGR7NH1cLVxkKykrIikKKworICAgICMgTWF0Y2hlcyBsYXN0IENWRS0xMjM0LTIxMTQzMiBpbiB0aGUgZmlsZSBuYW1lLCBhbHNvIGlmIHdyaXR0ZW4KKyAgICAjIHdpdGggc21hbGwgbGV0dGVycy4gTm90IHN1cHBvcnRpbmcgbXVsdGlwbGUgQ1ZFIGlkJ3MgaW4gYSBzaW5nbGUKKyAgICAjIGZpbGUgbmFtZS4KKyAgICBjdmVfZmlsZV9uYW1lX21hdGNoID0gcmUuY29tcGlsZSgiLiooW0NjXVtWdl1bRWVdXC1cZHs0fVwtXGQrKSIpCisKICAgICBwYXRjaGVkX2N2ZXMgPSBzZXQoKQogICAgIGJiLmRlYnVnKDIsICJMb29raW5nIGZvciBwYXRjaGVzIHRoYXQgc29sdmVzIENWRXMgZm9yICVzIiAlIHBuKQogICAgIGZvciB1cmwgaW4gc3JjX3BhdGNoZXMoZCk6CiAgICAgICAgIHBhdGNoX2ZpbGUgPSBiYi5mZXRjaC5kZWNvZGV1cmwodXJsKVsyXQorCisgICAgICAgICMgQ2hlY2sgcGF0Y2ggZmlsZSBuYW1lIGZvciBDVkUgSUQKKyAgICAgICAgZm5hbWVfbWF0Y2ggPSBjdmVfZmlsZV9uYW1lX21hdGNoLnNlYXJjaChwYXRjaF9maWxlKQorICAgICAgICBpZiBmbmFtZV9tYXRjaDoKKyAgICAgICAgICAgIGN2ZSA9IGZuYW1lX21hdGNoLmdyb3VwKDEpLnVwcGVyKCkKKyAgICAgICAgICAgIHBhdGNoZWRfY3Zlcy5hZGQoY3ZlKQorICAgICAgICAgICAgYmIuZGVidWcoMiwgIkZvdW5kIENWRSAlcyBmcm9tIHBhdGNoIGZpbGUgbmFtZSAlcyIgJSAoY3ZlLCBwYXRjaF9maWxlKSkKKwogICAgICAgICB3aXRoIG9wZW4ocGF0Y2hfZmlsZSwgInIiLCBlbmNvZGluZz0idXRmLTgiKSBhcyBmOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHBhdGNoX3RleHQgPSBmLnJlYWQoKQpAQCAtMTM0LDcgKzE1NCw3IEBACiAgICAgICAgICAgICBmb3IgY3ZlIGluIGN2ZXMuc3BsaXQoKToKICAgICAgICAgICAgICAgICBiYi5kZWJ1ZygyLCAiUGF0Y2ggJXMgc29sdmVzICVzIiAlIChwYXRjaF9maWxlLCBjdmUpKQogICAgICAgICAgICAgICAgIHBhdGNoZWRfY3Zlcy5hZGQoY3ZlKQotICAgICAgICBlbHNlOgorICAgICAgICBlbGlmIG5vdCBmbmFtZV9tYXRjaDoKICAgICAgICAgICAgIGJiLmRlYnVnKDIsICJQYXRjaCAlcyBkb2Vzbid0IHNvbHZlIENWRXMiICUgcGF0Y2hfZmlsZSkKIAogICAgIHJldHVybiBwYXRjaGVkX2N2ZXMKQEAgLTE0OSw3ICsxNjksNyBAQAogICAgIGN2ZXNfcGF0Y2hlZCA9IFtdCiAgICAgY3Zlc191bnBhdGNoZWQgPSBbXQogICAgIGJwbiA9IGQuZ2V0VmFyKCJDVkVfUFJPRFVDVCIpCi0gICAgcHYgPSBkLmdldFZhcigiUFYiKS5zcGxpdCgiZ2l0KyIpWzBdCisgICAgcHYgPSBkLmdldFZhcigiUFYiKS5zcGxpdCgiK2dpdCIpWzBdCiAgICAgY3ZlcyA9ICIgIi5qb2luKHBhdGNoZWRfY3ZlcykKICAgICBjdmVfZGJfZGlyID0gZC5nZXRWYXIoIkNWRV9DSEVDS19EQl9ESVIiKQogICAgIGN2ZV93aGl0ZWxpc3QgPSBhc3QubGl0ZXJhbF9ldmFsKGQuZ2V0VmFyKCJDVkVfQ0hFQ0tfQ1ZFX1dISVRFTElTVCIpKQpAQCAtMTcxLDcgKzE5MSw3IEBACiAgICAgICAgICAgICBmLndyaXRlKCIlcywlcywlcywiICUgKGJwbiwgcHYsIGN2ZXMpKQogICAgICAgICBjbWQuYXBwZW5kKGZhdXgpCiAKLSAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpLmRlY29kZSgidXRmLTgiKQorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQpLmRlY29kZSgidXRmLTgiKQogICAgICAgICBiYi5kZWJ1ZygyLCAiT3V0cHV0IG9mIGNvbW1hbmQgJXM6XG4lcyIgJSAoIlxuIi5qb2luKGNtZCksIG91dHB1dCkpCiAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CiAgICAgICAgIGJiLndhcm4oIkNvdWxkbid0IGNoZWNrIGZvciBDVkVzOiAlcyAob3V0cHV0ICVzKSIgJSAoZSwgZS5vdXRwdXQpKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kZXZzaGVsbC5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kZXZzaGVsbC5iYmNsYXNzCmluZGV4IDRkZTdlYTYuLmZkZjdkYzEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGV2c2hlbGwuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2RldnNoZWxsLmJiY2xhc3MKQEAgLTgsMTQgKzgsMTQgQEAKICAgICAgICBmYWtlZW52ID0gZC5nZXRWYXIoIkZBS0VST09URU5WIikuc3BsaXQoKQogICAgICAgIGZvciBmIGluIGZha2VlbnY6CiAgICAgICAgICAgICBrID0gZi5zcGxpdCgiPSIpCi0gICAgICAgICAgICBkLnNldFZhcihrWzBdLCBrWzFdKSAgICAgICAgICAgCisgICAgICAgICAgICBkLnNldFZhcihrWzBdLCBrWzFdKQogICAgICAgICAgICAgZC5hcHBlbmRWYXIoIk9FX1RFUk1JTkFMX0VYUE9SVFMiLCAiICIgKyBrWzBdKQogICAgICAgIGQuZGVsVmFyRmxhZygiZG9fZGV2c2hlbGwiLCAiZmFrZXJvb3QiKQogCiAgICAgb2VfdGVybWluYWwoZC5nZXRWYXIoJ0RFVlNIRUxMJyksICdPcGVuRW1iZWRkZWQgRGV2ZWxvcGVyIFNoZWxsJywgZCkKIH0KIAotYWRkdGFzayBkZXZzaGVsbCBhZnRlciBkb19wYXRjaAorYWRkdGFzayBkZXZzaGVsbCBhZnRlciBkb19wYXRjaCBkb19wcmVwYXJlX3JlY2lwZV9zeXNyb290CiAKICMgVGhlIGRpcmVjdG9yeSB0aGF0IHRoZSB0ZXJtaW5hbCBzdGFydHMgaW4KIERFVlNIRUxMX1NUQVJURElSID89ICIke1N9IgpAQCAtNDksNyArNDksNyBAQAogICAgICAgICBvbGRbM10gPSBvbGRbM10gJn4gdGVybWlvcy5FQ0hPICZ+IHRlcm1pb3MuSUNBTk9OCiAgICAgICAgICMgJn4gdGVybWlvcy5JU0lHCiAgICAgICAgIHRlcm1pb3MudGNzZXRhdHRyKGZkLCB0ZXJtaW9zLlRDU0FEUkFJTiwgb2xkKQotICAgIAorCiAgICAgIyBObyBlY2hvIG9yIGJ1ZmZlcmluZyBvdmVyIHRoZSBwdHkKICAgICBub2VjaG9pY2Fub24ocykKIApAQCAtMTQ1LDcgKzE0NSw3IEBACiAgICAgdHJ5OgogICAgICAgICBkZXZweXNoZWxsKGQpCiAgICAgZXhjZXB0IFN5c3RlbUV4aXQ6Ci0gICAgICAgICMgU3RvcCB0aGUgU0lHVEVSTSBhYm92ZSBjYXVzaW5nIGFuIGVycm9yIGV4aXQgY29kZSAgICAKKyAgICAgICAgIyBTdG9wIHRoZSBTSUdURVJNIGFib3ZlIGNhdXNpbmcgYW4gZXJyb3IgZXhpdCBjb2RlCiAgICAgICAgIHJldHVybgogICAgIGZpbmFsbHk6CiAgICAgICAgIHJldHVybgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kZXZ0b29sLXNvdXJjZS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kZXZ0b29sLXNvdXJjZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNWJjODYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2RldnRvb2wtc291cmNlLmJiY2xhc3MKQEAgLTAsMCArMSwxNjUgQEAKKyMgRGV2ZWxvcG1lbnQgdG9vbCAtIHNvdXJjZSBleHRyYWN0aW9uIGhlbHBlciBjbGFzcworIworIyBOT1RFOiB0aGlzIGNsYXNzIGlzIGludGVuZGVkIGZvciB1c2UgYnkgZGV2dG9vbCBhbmQgc2hvdWxkIG5vdCBiZQorIyBpbmhlcml0ZWQgbWFudWFsbHkuCisjCisjIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisKK0RFVlRPT0xfVEVNUERJUiA/PSAiIgorREVWVE9PTF9QQVRDSF9TUkNESVIgPSAiJHtERVZUT09MX1RFTVBESVJ9L3BhdGNod29ya2RpciIKKworCitweXRob24oKSB7CisgICAgdGVtcGRpciA9IGQuZ2V0VmFyKCdERVZUT09MX1RFTVBESVInKQorCisgICAgaWYgbm90IHRlbXBkaXI6CisgICAgICAgIGJiLmZhdGFsKCdkZXZ0b29sLXNvdXJjZSBjbGFzcyBpcyBmb3IgaW50ZXJuYWwgdXNlIGJ5IGRldnRvb2wgb25seScpCisKKyAgICAjIE1ha2UgYSBzdWJkaXIgc28gd2UgZ3VhcmQgYWdhaW5zdCBXT1JLRElSPT1TCisgICAgd29ya2RpciA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAnd29ya2RpcicpCisgICAgZC5zZXRWYXIoJ1dPUktESVInLCB3b3JrZGlyKQorICAgIGlmIG5vdCBkLmdldFZhcignUycpLnN0YXJ0c3dpdGgod29ya2Rpcik6CisgICAgICAgICMgVXN1YWxseSBhIHNoYXJlZCB3b3JrZGlyIHJlY2lwZSAoa2VybmVsLCBnY2MpCisgICAgICAgICMgVHJ5IHRvIHNldCBhIHJlYXNvbmFibGUgZGVmYXVsdAorICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwnLCBkKToKKyAgICAgICAgICAgIGQuc2V0VmFyKCdTJywgJyR7V09SS0RJUn0vc291cmNlJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGQuc2V0VmFyKCdTJywgJyR7V09SS0RJUn0vJXMnICUgb3MucGF0aC5iYXNlbmFtZShkLmdldFZhcignUycpKSkKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwnLCBkKToKKyAgICAgICAgIyBXZSBkb24ndCB3YW50IHRvIG1vdmUgdGhlIHNvdXJjZSB0byBTVEFHSU5HX0tFUk5FTF9ESVIgaGVyZQorICAgICAgICBkLnNldFZhcignU1RBR0lOR19LRVJORUxfRElSJywgJyR7U30nKQorCisgICAgZC5zZXRWYXIoJ1NUQU1QU19ESVInLCBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ3N0YW1wcycpKQorICAgIGQuc2V0VmFyKCdUJywgb3MucGF0aC5qb2luKHRlbXBkaXIsICd0ZW1wJykpCisKKyAgICAjIEhvb2sgaW4gcHJlL3Bvc3RmdW5jcworICAgIGlzX2tlcm5lbF95b2N0byA9IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2tlcm5lbC15b2N0bycsIGQpCisgICAgaWYgaXNfa2VybmVsX3lvY3RvOgorICAgICAgICB1bnBhY2t0YXNrID0gJ2RvX2tlcm5lbF9jaGVja291dCcKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19jb25maWd1cmUnLCAncG9zdGZ1bmNzJywgJyBkZXZ0b29sX3Bvc3RfY29uZmlndXJlJykKKyAgICBlbHNlOgorICAgICAgICB1bnBhY2t0YXNrID0gJ2RvX3VucGFjaycKKyAgICBkLmFwcGVuZFZhckZsYWcodW5wYWNrdGFzaywgJ3Bvc3RmdW5jcycsICcgZGV2dG9vbF9wb3N0X3VucGFjaycpCisgICAgZC5wcmVwZW5kVmFyRmxhZygnZG9fcGF0Y2gnLCAncHJlZnVuY3MnLCAnIGRldnRvb2xfcHJlX3BhdGNoJykKKyAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhdGNoJywgJ3Bvc3RmdW5jcycsICcgZGV2dG9vbF9wb3N0X3BhdGNoJykKKworICAgICMgTk9URTogaW4gb3JkZXIgZm9yIHRoZSBwYXRjaCBzdHVmZiB0byBiZSBmdWxseSBmdW5jdGlvbmFsLAorICAgICMgUEFUQ0hUT09MIGFuZCBQQVRDSF9DT01NSVRfRlVOQ1RJT05TIG5lZWQgdG8gYmUgc2V0OyB3ZSBjYW4ndAorICAgICMgZG8gdGhhdCBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgZ3VhcmFudGVlIHRoZSBvcmRlciBvZiB0aGUgYW5vbnltb3VzCisgICAgIyBmdW5jdGlvbnMsIHNvIGl0IGdldHMgZG9uZSBpbiB0aGUgYmJhcHBlbmQgd2UgY3JlYXRlLgorfQorCisKK3B5dGhvbiBkZXZ0b29sX3Bvc3RfdW5wYWNrKCkgeworICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscworICAgIGltcG9ydCBzaHV0aWwKKyAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdDT1JFQkFTRScpLCAnc2NyaXB0cycsICdsaWInKSkKKyAgICBpbXBvcnQgc2NyaXB0dXRpbHMKKyAgICBmcm9tIGRldnRvb2wgaW1wb3J0IHNldHVwX2dpdF9yZXBvCisKKyAgICB0ZW1wZGlyID0gZC5nZXRWYXIoJ0RFVlRPT0xfVEVNUERJUicpCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJykKKyAgICBzcmNzdWJkaXIgPSBkLmdldFZhcignUycpCisKKyAgICBkZWYgX21vdmVfZmlsZShzcmMsIGRzdCk6CisgICAgICAgICIiIk1vdmUgYSBmaWxlLiBDcmVhdGVzIGFsbCB0aGUgZGlyZWN0b3J5IGNvbXBvbmVudHMgb2YgZGVzdGluYXRpb24gcGF0aC4iIiIKKyAgICAgICAgZHN0X2QgPSBvcy5wYXRoLmRpcm5hbWUoZHN0KQorICAgICAgICBpZiBkc3RfZDoKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihkc3RfZCkKKyAgICAgICAgc2h1dGlsLm1vdmUoc3JjLCBkc3QpCisKKyAgICBkZWYgX2xzX3RyZWUoZGlyZWN0b3J5KToKKyAgICAgICAgIiIiUmVjdXJzaXZlIGxpc3Rpbmcgb2YgZmlsZXMgaW4gYSBkaXJlY3RvcnkiIiIKKyAgICAgICAgcmV0ID0gW10KKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoZGlyZWN0b3J5KToKKyAgICAgICAgICAgIHJldC5leHRlbmQoW29zLnBhdGgucmVscGF0aChvcy5wYXRoLmpvaW4ocm9vdCwgZm5hbWUpLCBkaXJlY3RvcnkpIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgZm5hbWUgaW4gZmlsZXNdKQorICAgICAgICByZXR1cm4gcmV0CisKKyAgICAjIE1vdmUgbG9jYWwgc291cmNlIGZpbGVzIGludG8gc2VwYXJhdGUgc3ViZGlyCisgICAgcmVjaXBlX3BhdGNoZXMgPSBbb3MucGF0aC5iYXNlbmFtZShwYXRjaCkgZm9yIHBhdGNoIGluCisgICAgICAgICAgICAgICAgICAgICAgICBvZS5yZWNpcGV1dGlscy5nZXRfcmVjaXBlX3BhdGNoZXMoZCldCisgICAgbG9jYWxfZmlsZXMgPSBvZS5yZWNpcGV1dGlscy5nZXRfcmVjaXBlX2xvY2FsX2ZpbGVzKGQpCisKKyAgICAjIElnbm9yZSBsb2NhbCBmaWxlcyB3aXRoIHN1YmRpcj17QlB9CisgICAgc3JjYWJzcGF0aCA9IG9zLnBhdGguYWJzcGF0aChzcmNzdWJkaXIpCisgICAgbG9jYWxfZmlsZXMgPSBbZm5hbWUgZm9yIGZuYW1lIGluIGxvY2FsX2ZpbGVzIGlmCisgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih3b3JrZGlyLCBmbmFtZSkpIGFuZAorICAgICAgICAgICAgICAgICAgICAoc3JjYWJzcGF0aCA9PSB3b3JrZGlyIG9yIG5vdAorICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4od29ya2RpciwgZm5hbWUpLnN0YXJ0c3dpdGgoc3JjYWJzcGF0aCArCisgICAgICAgICAgICAgICAgICAgICAgICBvcy5zZXApKV0KKyAgICBpZiBsb2NhbF9maWxlczoKKyAgICAgICAgZm9yIGZuYW1lIGluIGxvY2FsX2ZpbGVzOgorICAgICAgICAgICAgX21vdmVfZmlsZShvcy5wYXRoLmpvaW4od29ya2RpciwgZm5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHRlbXBkaXIsICdvZS1sb2NhbC1maWxlcycsIGZuYW1lKSkKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnb2UtbG9jYWwtZmlsZXMnLCAnLmdpdGlnbm9yZScpLAorICAgICAgICAgICAgICAgICAgICAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCcjIElnbm9yZSBsb2NhbCBmaWxlcywgYnkgZGVmYXVsdC4gUmVtb3ZlIHRoaXMgZmlsZSAnCisgICAgICAgICAgICAgICAgICAgICdpZiB5b3Ugd2FudCB0byBjb21taXQgdGhlIGRpcmVjdG9yeSB0byBHaXRcbipcbicpCisKKyAgICBpZiBzcmNzdWJkaXIgPT0gd29ya2RpcjoKKyAgICAgICAgIyBGaW5kIG5vbi1wYXRjaCBub24tbG9jYWwgc291cmNlcyB0aGF0IHdlcmUgInVucGFja2VkIiB0byBzcmN0cmVlCisgICAgICAgICMgZGlyZWN0b3J5CisgICAgICAgIHNyY19maWxlcyA9IFtmbmFtZSBmb3IgZm5hbWUgaW4gX2xzX3RyZWUod29ya2RpcikgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUoZm5hbWUpIG5vdCBpbiByZWNpcGVfcGF0Y2hlc10KKyAgICAgICAgc3Jjc3ViZGlyID0gZC5nZXRWYXIoJ0RFVlRPT0xfUEFUQ0hfU1JDRElSJykKKyAgICAgICAgIyBNb3ZlIHNvdXJjZSBmaWxlcyB0byBTCisgICAgICAgIGZvciBwYXRoIGluIHNyY19maWxlczoKKyAgICAgICAgICAgIF9tb3ZlX2ZpbGUob3MucGF0aC5qb2luKHdvcmtkaXIsIHBhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNyY3N1YmRpciwgcGF0aCkpCisgICAgZWxpZiBvcy5wYXRoLmRpcm5hbWUoc3Jjc3ViZGlyKSAhPSB3b3JrZGlyOgorICAgICAgICAjIEhhbmRsZSBpZiBTIGlzIHNldCB0byBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgc291cmNlCisgICAgICAgIHNyY3N1YmRpciA9IG9zLnBhdGguam9pbih3b3JrZGlyLCBvcy5wYXRoLnJlbHBhdGgoc3Jjc3ViZGlyLCB3b3JrZGlyKS5zcGxpdChvcy5zZXApWzBdKQorCisgICAgc2NyaXB0dXRpbHMuZ2l0X2NvbnZlcnRfc3RhbmRhbG9uZV9jbG9uZShzcmNzdWJkaXIpCisKKyAgICAjIE1ha2Ugc3VyZSB0aGF0IHNyY3N1YmRpciBleGlzdHMKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoc3Jjc3ViZGlyKQorICAgIGlmIG5vdCBvcy5saXN0ZGlyKHNyY3N1YmRpcik6CisgICAgICAgIGJiLndhcm4oIk5vIHNvdXJjZSB1bnBhY2tlZCB0byBTIC0gZWl0aGVyIHRoZSAlcyByZWNpcGUgIgorICAgICAgICAgICAgICAgICJkb2Vzbid0IHVzZSBhbnkgc291cmNlIG9yIHRoZSBjb3JyZWN0IHNvdXJjZSAiCisgICAgICAgICAgICAgICAgImRpcmVjdG9yeSBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZCIgJSBkLmdldFZhcignUE4nKSkKKworICAgIGRldmJyYW5jaCA9IGQuZ2V0VmFyKCdERVZUT09MX0RFVkJSQU5DSCcpCisgICAgc2V0dXBfZ2l0X3JlcG8oc3Jjc3ViZGlyLCBkLmdldFZhcignUFYnKSwgZGV2YnJhbmNoLCBkPWQpCisKKyAgICAoc3Rkb3V0LCBfKSA9IGJiLnByb2Nlc3MucnVuKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCBjd2Q9c3Jjc3ViZGlyKQorICAgIGluaXRpYWxfcmV2ID0gc3Rkb3V0LnJzdHJpcCgpCisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnaW5pdGlhbF9yZXYnKSwgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlKGluaXRpYWxfcmV2KQorCisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnc3Jjc3ViZGlyJyksICd3JykgYXMgZjoKKyAgICAgICAgZi53cml0ZShzcmNzdWJkaXIpCit9CisKK3B5dGhvbiBkZXZ0b29sX3ByZV9wYXRjaCgpIHsKKyAgICBpZiBkLmdldFZhcignUycpID09IGQuZ2V0VmFyKCdXT1JLRElSJyk6CisgICAgICAgIGQuc2V0VmFyKCdTJywgJyR7REVWVE9PTF9QQVRDSF9TUkNESVJ9JykKK30KKworcHl0aG9uIGRldnRvb2xfcG9zdF9wYXRjaCgpIHsKKyAgICB0ZW1wZGlyID0gZC5nZXRWYXIoJ0RFVlRPT0xfVEVNUERJUicpCisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnc3Jjc3ViZGlyJyksICdyJykgYXMgZjoKKyAgICAgICAgc3Jjc3ViZGlyID0gZi5yZWFkKCkKKyAgICBiYi5wcm9jZXNzLnJ1bignZ2l0IHRhZyAtZiBkZXZ0b29sLXBhdGNoZWQnLCBjd2Q9c3Jjc3ViZGlyKQorfQorCitweXRob24gZGV2dG9vbF9wb3N0X2NvbmZpZ3VyZSgpIHsKKyAgICBpbXBvcnQgc2h1dGlsCisgICAgdGVtcGRpciA9IGQuZ2V0VmFyKCdERVZUT09MX1RFTVBESVInKQorICAgIHNodXRpbC5jb3B5Mihvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0InKSwgJy5jb25maWcnKSwgdGVtcGRpcikKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHJvZGF0YS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0cm9kYXRhLmJiY2xhc3MKaW5kZXggNWUzNDQ0MS4uYzg1ZjdiMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0cm9kYXRhLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0cm9kYXRhLmJiY2xhc3MKQEAgLTI2MSwxMiArMjYxLDQ0IEBACiAgICAgICAgIGZyb20gYmIudXRpbHMgaW1wb3J0IHZlcmNtcF9zdHJpbmcKICAgICAgICAgZnJvbSBiYi5mZXRjaDIgaW1wb3J0IEZldGNoRXJyb3IsIE5vTWV0aG9kRXJyb3IsIGRlY29kZXVybAogCi0gICAgICAgICIiImZpcnN0IGNoZWNrIHdoZXRoZXIgYSB1cmkgaXMgcHJvdmlkZWQiIiIKLSAgICAgICAgc3JjX3VyaSA9IChkLmdldFZhcignU1JDX1VSSScpIG9yICcnKS5zcGxpdCgpCi0gICAgICAgIGlmIHNyY191cmk6Ci0gICAgICAgICAgICB1cmlfdHlwZSwgXywgXywgXywgXywgXyA9IGRlY29kZXVybChzcmNfdXJpWzBdKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdXJpX3R5cGUgPSAibm9uZSIKKyAgICAgICAgZGVmIGdldF91cHN0cmVhbV92ZXJzaW9uX2FuZF9zdGF0dXMoKToKKworICAgICAgICAgICAgIyBzZXQgaWYgdGhlIHVwc3RyZWFtIGNoZWNrIGZhaWxzIHJlbGlhYmx5LCBlLmcuIGFic2VudCBnaXQgdGFncywgb3Igd2VpcmQgdmVyc2lvbiBmb3JtYXQgdXNlZCBvbiBvdXIgb3Igb24gdXBzdHJlYW0gc2lkZS4KKyAgICAgICAgICAgIHVwc3RyZWFtX3ZlcnNpb25fdW5rbm93biA9IGxvY2FsZGF0YS5nZXRWYXIoJ1VQU1RSRUFNX1ZFUlNJT05fVU5LTk9XTicpCisgICAgICAgICAgICAjIHNldCBpZiB0aGUgdXBzdHJlYW0gY2hlY2sgY2Fubm90IGJlIHJlbGlhYmx5IHBlcmZvcm1lZCBkdWUgdG8gdHJhbnNpZW50IG5ldHdvcmsgZmFpbHVyZXMsIG9yIHNlcnZlciBiZWhhdmluZyB3ZWlyZGx5LiAKKyAgICAgICAgICAgICMgVGhpcyBvbmUgc2hvdWxkIGJlIHVzZWQgc3BhcmluZ2x5LCBhcyBpdCBjb21wbGV0ZWx5IGV4Y2x1ZGVzIGEgcmVjaXBlIGZyb20gdXBzdHJlYW0gY2hlY2tpbmcuCisgICAgICAgICAgICB1cHN0cmVhbV9jaGVja191bnJlbGlhYmxlID0gbG9jYWxkYXRhLmdldFZhcignVVBTVFJFQU1fQ0hFQ0tfVU5SRUxJQUJMRScpCisKKyAgICAgICAgICAgIGlmIHVwc3RyZWFtX2NoZWNrX3VucmVsaWFibGUgPT0gIjEiOgorICAgICAgICAgICAgICAgIHJldHVybiAiTi9BIiwgIkNIRUNLX0lTX1VOUkVMSUFCTEUiCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB1diA9IG9lLnJlY2lwZXV0aWxzLmdldF9yZWNpcGVfdXBzdHJlYW1fdmVyc2lvbihsb2NhbGRhdGEpCisgICAgICAgICAgICAgICAgcHVwdmVyID0gdXZbJ3ZlcnNpb24nXSBpZiB1dlsndmVyc2lvbiddIGVsc2UgIk4vQSIKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBwdXB2ZXIgPSAiTi9BIgorCisgICAgICAgICAgICBpZiBwdXB2ZXIgPT0gIk4vQSI6CisgICAgICAgICAgICAgICAgcHN0YXR1cyA9ICJVTktOT1dOIiBpZiB1cHN0cmVhbV92ZXJzaW9uX3Vua25vd24gZWxzZSAiVU5LTk9XTl9CUk9LRU4iCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNyY191cmkgPSAobG9jYWxkYXRhLmdldFZhcignU1JDX1VSSScpIG9yICcnKS5zcGxpdCgpCisgICAgICAgICAgICAgICAgaWYgc3JjX3VyaToKKyAgICAgICAgICAgICAgICAgICAgdXJpX3R5cGUsIF8sIF8sIF8sIF8sIF8gPSBkZWNvZGV1cmwoc3JjX3VyaVswXSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB1cmlfdHlwZSA9ICJub25lIgorICAgICAgICAgICAgICAgIHB2LCBfLCBfID0gb2UucmVjaXBldXRpbHMuZ2V0X3JlY2lwZV9wdl93aXRob3V0X3NyY3B2KHB2ZXJzaW9uLCB1cmlfdHlwZSkKKyAgICAgICAgICAgICAgICB1cHYsIF8sIF8gPSBvZS5yZWNpcGV1dGlscy5nZXRfcmVjaXBlX3B2X3dpdGhvdXRfc3JjcHYocHVwdmVyLCB1cmlfdHlwZSkKKworICAgICAgICAgICAgICAgIGNtcCA9IHZlcmNtcF9zdHJpbmcocHYsIHVwdikKKyAgICAgICAgICAgICAgICBpZiBjbXAgPT0gLTE6CisgICAgICAgICAgICAgICAgICAgIHBzdGF0dXMgPSAiVVBEQVRFIiBpZiBub3QgdXBzdHJlYW1fdmVyc2lvbl91bmtub3duIGVsc2UgIktOT1dOX0JST0tFTiIKKyAgICAgICAgICAgICAgICBlbGlmIGNtcCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBwc3RhdHVzID0gIk1BVENIIiBpZiBub3QgdXBzdHJlYW1fdmVyc2lvbl91bmtub3duIGVsc2UgIktOT1dOX0JST0tFTiIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwc3RhdHVzID0gIlVOS05PV04iIGlmIHVwc3RyZWFtX3ZlcnNpb25fdW5rbm93biBlbHNlICJVTktOT1dOX0JST0tFTiIKKworICAgICAgICAgICAgcmV0dXJuIHB1cHZlciwgcHN0YXR1cworCiAKICAgICAgICAgIiIiaW5pdGlhbGl6ZSBsb2cgZmlsZXMuIiIiCiAgICAgICAgIGxvZ3BhdGggPSBkLmdldFZhcignTE9HX0RJUicpCkBAIC0zMTMsMzQgKzM0NSw3IEBACiAgICAgICAgIHBzcmN1cmkgPSBsb2NhbGRhdGEuZ2V0VmFyKCdTUkNfVVJJJykKICAgICAgICAgbWFpbnRhaW5lciA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9NQUlOVEFJTkVSJykKIAotICAgICAgICAiIiIgR2V0IHVwc3RyZWFtIHZlcnNpb24gdmVyc2lvbiAiIiIKLSAgICAgICAgcHVwdmVyID0gIiIKLSAgICAgICAgcHN0YXR1cyA9ICIiCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdXYgPSBvZS5yZWNpcGV1dGlscy5nZXRfcmVjaXBlX3Vwc3RyZWFtX3ZlcnNpb24obG9jYWxkYXRhKQotCi0gICAgICAgICAgICBwdXB2ZXIgPSB1dlsndmVyc2lvbiddCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgIGlmIGUgaXMgRmV0Y2hFcnJvcjoKLSAgICAgICAgICAgICAgICBwc3RhdHVzID0gIkVyckFjY2VzcyIKLSAgICAgICAgICAgIGVsaWYgZSBpcyBOb01ldGhvZEVycm9yOgotICAgICAgICAgICAgICAgIHBzdGF0dXMgPSAiRXJyVW5zdXBwb3J0ZWRQcm90byIKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcHN0YXR1cyA9ICJFcnJVbmtub3duIgotCi0gICAgICAgICIiIlNldCB1cHN0cmVhbSB2ZXJzaW9uIHN0YXR1cyIiIgotICAgICAgICBpZiBub3QgcHVwdmVyOgotICAgICAgICAgICAgcHVwdmVyID0gIk4vQSIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHB2LCBfLCBfID0gb2UucmVjaXBldXRpbHMuZ2V0X3JlY2lwZV9wdl93aXRob3V0X3NyY3B2KHB2ZXJzaW9uLCB1cmlfdHlwZSkKLSAgICAgICAgICAgIHVwdiwgXywgXyA9IG9lLnJlY2lwZXV0aWxzLmdldF9yZWNpcGVfcHZfd2l0aG91dF9zcmNwdihwdXB2ZXIsIHVyaV90eXBlKQotCi0gICAgICAgICAgICBjbXAgPSB2ZXJjbXBfc3RyaW5nKHB2LCB1cHYpCi0gICAgICAgICAgICBpZiBjbXAgPT0gLTE6Ci0gICAgICAgICAgICAgICAgcHN0YXR1cyA9ICJVUERBVEUiCi0gICAgICAgICAgICBlbGlmIGNtcCA9PSAwOgotICAgICAgICAgICAgICAgIHBzdGF0dXMgPSAiTUFUQ0giCisgICAgICAgIHB1cHZlciwgcHN0YXR1cyA9IGdldF91cHN0cmVhbV92ZXJzaW9uX2FuZF9zdGF0dXMoKQogCiAgICAgICAgIGlmIHBzcmN1cmk6CiAgICAgICAgICAgICBwc3JjdXJpID0gcHNyY3VyaS5zcGxpdCgpWzBdCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3Ryb292ZXJyaWRlcy5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0cm9vdmVycmlkZXMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjRkYjBkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0cm9vdmVycmlkZXMuYmJjbGFzcwpAQCAtMCwwICsxLDMyIEBACisjIFR1cm5zIGNlcnRhaW4gRElTVFJPX0ZFQVRVUkVTIGludG8gb3ZlcnJpZGVzIHdpdGggdGhlIHNhbWUKKyMgbmFtZSBwbHVzIGEgZGYtIHByZWZpeC4gRW5zdXJlcyB0aGF0IHRoZXNlIHNwZWNpYWwKKyMgZGlzdHJvIGZlYXR1cmVzIHJlbWFpbiBzZXQgYWxzbyBmb3IgbmF0aXZlIGFuZCBuYXRpdmVzZGsKKyMgcmVjaXBlcywgc28gdGhhdCB0aGVzZSBvdmVycmlkZXMgY2FuIGFsc28gYmUgdXNlZCB0aGVyZS4KKyMKKyMgVGhpcyBtYWtlcyBpdCBzaW1wbGVyIHRvIHdyaXRlIC5iYmFwcGVuZHMgdGhhdCBvbmx5IGNoYW5nZSB0aGUKKyMgdGFzayBzaWduYXR1cmVzIG9mIHRoZSByZWNpcGUgaWYgdGhlIGNoYW5nZSBpcyByZWFsbHkgZW5hYmxlZCwKKyMgZm9yIGV4YW1wbGUgd2l0aDoKKyMgICBkb19pbnN0YWxsX2FwcGVuZF9kZi1teS1mZWF0dXJlICgpIHsgLi4uIH0KKyMgd2hlcmUgIm15LWZlYXR1cmUiIGlzIGEgRElTVFJPX0ZFQVRVUkUuCisjCisjIFRoZSBjbGFzcyBpcyBtZWFudCB0byBiZSB1c2VkIGluIGEgbGF5ZXIuY29uZiBvciBkaXN0cm8KKyMgLmluYyBmaWxlIHdpdGg6CisjIElOSEVSSVQgKz0gImRpc3Ryb292ZXJyaWRlcyIKKyMgRElTVFJPX0ZFQVRVUkVTX09WRVJSSURFUyArPSAibXktZmVhdHVyZSIKKyMKKyMgQmV3YXJlIHRoYXQgdGhpcyBwYXJ0IG9mIE9WRVJSSURFUyBjaGFuZ2VzIGR1cmluZyBwYXJzaW5nLCBzbyB1c2FnZQorIyBvZiB0aGVzZSBvdmVycmlkZXMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gLmJiIGFuZCAuYmJhcHBlbmQgZmlsZXMsCisjIGJlY2F1c2UgdGhlbiBESVNUUk9fRkVBVFVSRVMgaXMgZmluYWwuCisKK0RJU1RST19GRUFUVVJFU19PVkVSUklERVMgPz0gIiIKK0RJU1RST19GRUFUVVJFU19PVkVSUklERVNbZG9jXSA9ICJBIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIDxmZWF0dXJlPiBlbnRyaWVzLiBcCitFYWNoIGVudHJ5IGlzIGFkZGVkIHRvIE9WRVJSSURFUyBhcyBkZi08ZmVhdHVyZT4gaWYgPGZlYXR1cmU+IGlzIGluIERJU1RST19GRUFUVVJFUy4iCisKK0RJU1RST19GRUFUVVJFU19GSUxURVJfTkFUSVZFX2FwcGVuZCA9ICIgJHtESVNUUk9fRkVBVFVSRVNfT1ZFUlJJREVTfSIKK0RJU1RST19GRUFUVVJFU19GSUxURVJfTkFUSVZFU0RLX2FwcGVuZCA9ICIgJHtESVNUUk9fRkVBVFVSRVNfT1ZFUlJJREVTfSIKKworIyBJZiBESVNUUk9fRkVBVFVSRVNfT1ZFUlJJREVTIG9yIERJU1RST19GRUFUVVJFUyBzaG93IHVwIGluIGEgdGFzaworIyBzaWduYXR1cmUgYmVjYXVzZSBvZiB0aGlzIGxpbmUsIHRoZW4gdGhlIHRhc2sgZGVwZW5kZW5jeSBvbgorIyBPVkVSUklERVMgaXRzZWxmIHNob3VsZCBiZSBmaXhlZC4gRXhjbHVkaW5nIHRoZXNlIHR3byB2YXJpYWJsZXMKKyMgd2l0aCBESVNUUk9PVkVSUklERVNbdmFyZGVwc2V4Y2x1ZGVdIHdvdWxkIGp1c3Qgd29yayBhcm91bmQgdGhlIHByb2JsZW0uCitESVNUUk9PVkVSUklERVMgLj0gIiR7QCAnJy5qb2luKFsnOmRmLScgKyB4IGZvciB4IGluIHNvcnRlZChzZXQoZC5nZXRWYXIoJ0RJU1RST19GRUFUVVJFU19PVkVSUklERVMnKS5zcGxpdCgpKSAmIHNldCgoZC5nZXRWYXIoJ0RJU1RST19GRUFUVVJFUycpIG9yICcnKS5zcGxpdCgpKSldKSB9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9leHRlcm5hbHNyYy5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9leHRlcm5hbHNyYy5iYmNsYXNzCmluZGV4IGQ2NGFmNmEuLjY1ZGQxM2QgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZXh0ZXJuYWxzcmMuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2V4dGVybmFsc3JjLmJiY2xhc3MKQEAgLTI5LDYgKzI5LDEyIEBACiAKIHB5dGhvbiAoKSB7CiAgICAgZXh0ZXJuYWxzcmMgPSBkLmdldFZhcignRVhURVJOQUxTUkMnKQorICAgIGV4dGVybmFsc3JjYnVpbGQgPSBkLmdldFZhcignRVhURVJOQUxTUkNfQlVJTEQnKQorCisgICAgaWYgZXh0ZXJuYWxzcmMgYW5kIG5vdCBleHRlcm5hbHNyYy5zdGFydHN3aXRoKCIvIik6CisgICAgICAgIGJiLmVycm9yKCJFWFRFUk5BTFNSQyBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGgiKQorICAgIGlmIGV4dGVybmFsc3JjYnVpbGQgYW5kIG5vdCBleHRlcm5hbHNyY2J1aWxkLnN0YXJ0c3dpdGgoIi8iKToKKyAgICAgICAgYmIuZXJyb3IoIkVYVEVSTkFMU1JDX0JVSUxEIG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aCIpCiAKICAgICAjIElmIHRoaXMgaXMgdGhlIGJhc2UgcmVjaXBlIGFuZCBFWFRFUk5BTFNSQyBpcyBzZXQgZm9yIGl0IG9yIGFueSBvZiBpdHMKICAgICAjIGRlcml2YXRpdmVzLCB0aGVuIGVuYWJsZSBCQl9ET05UX0NBQ0hFIHRvIGZvcmNlIHRoZSByZWNpcGUgdG8gYWx3YXlzIGJlCkBAIC00OCw3ICs1NCw2IEBACiAKICAgICBpZiBleHRlcm5hbHNyYzoKICAgICAgICAgZC5zZXRWYXIoJ1MnLCBleHRlcm5hbHNyYykKLSAgICAgICAgZXh0ZXJuYWxzcmNidWlsZCA9IGQuZ2V0VmFyKCdFWFRFUk5BTFNSQ19CVUlMRCcpCiAgICAgICAgIGlmIGV4dGVybmFsc3JjYnVpbGQ6CiAgICAgICAgICAgICBkLnNldFZhcignQicsIGV4dGVybmFsc3JjYnVpbGQpCiAgICAgICAgIGVsc2U6CkBAIC0xNjcsNiArMTcyLDcgQEAKIGRvX2J1aWxkY2xlYW5bZG9jXSA9ICJDYWxsICdtYWtlIGNsZWFuJyBvciBlcXVpdmFsZW50IGluICR7Qn0iCiBleHRlcm5hbHNyY19kb19idWlsZGNsZWFuKCkgewogCWlmIFsgLWUgTWFrZWZpbGUgLW8gLWUgbWFrZWZpbGUgLW8gLWUgR05VbWFrZWZpbGUgXTsgdGhlbgorCQlybSAtZiAke0AnICcuam9pbihbeC5zcGxpdCgnOicpWzBdIGZvciB4IGluIChkLmdldFZhcignRVhURVJOQUxTUkNfU1lNTElOS1MnKSBvciAnJykuc3BsaXQoKV0pfQogCQlvZV9ydW5tYWtlIGNsZWFuIHx8IGRpZSAibWFrZSBmYWlsZWQiCiAJZWxzZQogCQliYm5vdGUgIm5vdGhpbmcgdG8gZG8gLSBubyBtYWtlZmlsZSBmb3VuZCIKQEAgLTE3OSwxNCArMTg1LDIwIEBACiAgICAgaW1wb3J0IHRlbXBmaWxlCiAKICAgICBzX2RpciA9IHNyY2RpciBvciBkLmdldFZhcignRVhURVJOQUxTUkMnKQotICAgIGdpdF9kaXIgPSBvcy5wYXRoLmpvaW4oc19kaXIsICcuZ2l0JykKLSAgICBvZV9oYXNoX2ZpbGUgPSBvcy5wYXRoLmpvaW4oZ2l0X2RpciwgJ29lLWRldnRvb2wtdHJlZS1zaGExJykKKyAgICBnaXRfZGlyID0gTm9uZQorCisgICAgdHJ5OgorICAgICAgICBnaXRfZGlyID0gb3MucGF0aC5qb2luKHNfZGlyLAorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWydnaXQnLCAnLUMnLCBzX2RpciwgJ3Jldi1wYXJzZScsICctLWdpdC1kaXInXSkuZGVjb2RlKCJ1dGYtOCIpLnJzdHJpcCgpKQorICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgcGFzcwogCiAgICAgcmV0ID0gIiAiCi0gICAgaWYgb3MucGF0aC5leGlzdHMoZ2l0X2Rpcik6Ci0gICAgICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKGRpcj1naXRfZGlyLCBwcmVmaXg9J29lLWRldnRvb2wtaW5kZXgnKSBhcyB0bXBfaW5kZXg6CisgICAgaWYgZ2l0X2RpciBpcyBub3QgTm9uZToKKyAgICAgICAgb2VfaGFzaF9maWxlID0gb3MucGF0aC5qb2luKGdpdF9kaXIsICdvZS1kZXZ0b29sLXRyZWUtc2hhMScpCisgICAgICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKHByZWZpeD0nb2UtZGV2dG9vbC1pbmRleCcpIGFzIHRtcF9pbmRleDoKICAgICAgICAgICAgICMgQ2xvbmUgaW5kZXgKLSAgICAgICAgICAgIHNodXRpbC5jb3B5Mihvcy5wYXRoLmpvaW4oZ2l0X2RpciwgJ2luZGV4JyksIHRtcF9pbmRleC5uYW1lKQorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihnaXRfZGlyLCAnaW5kZXgnKSwgdG1wX2luZGV4Lm5hbWUpCiAgICAgICAgICAgICAjIFVwZGF0ZSBvdXIgY3VzdG9tIGluZGV4CiAgICAgICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQogICAgICAgICAgICAgZW52WydHSVRfSU5ERVhfRklMRSddID0gdG1wX2luZGV4Lm5hbWUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ2V0dGV4dC5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9nZXR0ZXh0LmJiY2xhc3MKaW5kZXggMGJlMTQyNC4uZGE2OGU2MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9nZXR0ZXh0LmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9nZXR0ZXh0LmJiY2xhc3MKQEAgLTEzLDcgKzEzLDEyIEBACiAgICAgICAgIHJldHVybiAnLS1kaXNhYmxlLW5scycKICAgICByZXR1cm4gIi0tZW5hYmxlLW5scyIKIAotREVQRU5EU19HRVRURVhUID8/PSAidmlydHVhbC9nZXR0ZXh0IGdldHRleHQtbmF0aXZlIgorREVQRU5EU19HRVRURVhUID8/PSAiZ2V0dGV4dC1uYXRpdmUiCiAKLUJBU0VERVBFTkRTID0rICIke0BnZXR0ZXh0X2RlcGVuZGVuY2llcyhkKX0iCitCQVNFREVQRU5EU19hcHBlbmQgPSAiICR7QGdldHRleHRfZGVwZW5kZW5jaWVzKGQpfSIKIEVYVFJBX09FQ09ORl9hcHBlbmQgPSAiICR7QGdldHRleHRfb2Vjb25mKGQpfSIKKworIyBXaXRob3V0IHRoaXMsIG1zZ2ZtdCBmcm9tIGdldHRleHQtbmF0aXZlIHdpbGwgbm90IGZpbmQgSVRTIGZpbGVzCisjIHByb3ZpZGVkIGJ5IHRhcmdldCByZWNpcGVzIChmb3IgZXhhbXBsZSwgcG9sa2l0Lml0cykuCitHRVRURVhUREFUQURJUlNfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICI6JHtTVEFHSU5HX0RBVEFESVJ9L2dldHRleHQiCitleHBvcnQgR0VUVEVYVERBVEFESVJTCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2dub21lYmFzZS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9nbm9tZWJhc2UuYmJjbGFzcwppbmRleCA1NGFhNDVmLi40Y2NjOGUwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2dub21lYmFzZS5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ25vbWViYXNlLmJiY2xhc3MKQEAgLTE0LDYgKzE0LDggQEAKICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3BvbGtpdCogXAogICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vR0NvbmYgXAogICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ2xpYi0yLjAvc2NoZW1hcyBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9hcHBkYXRhIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2ljb25zIFwKICIKIAogRklMRVNfJHtQTn0tZG9jICs9ICIke2RhdGFkaXJ9L2RldmhlbHAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2dvLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2dvLmJiY2xhc3MKaW5kZXggODVmNzFhMi4uMDliMDFhOCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9nby5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ28uYmJjbGFzcwpAQCAtMSw3NyArMSwxODIgQEAKLWluaGVyaXQgZ29hcmNoCitpbmhlcml0IGdvYXJjaCBwdGVzdAogCi0jIHgzMiBBQkkgaXMgbm90IHN1cHBvcnRlZCBvbiBnbyBjb21waWxlciBzbyBmYXIKLUNPTVBBVElCTEVfSE9TVF9saW51eC1nbnV4MzIgPSAibnVsbCIKLSMgcHBjMzIgaXMgbm90IHN1cHBvcnRlZCBpbiBnbyBjb21waWxlcnMKLUNPTVBBVElCTEVfSE9TVF9wb3dlcnBjID0gIm51bGwiCitkZWYgZ2V0X2dvX3BhcmFsbGVsX21ha2UoZCk6CisgICAgcG0gPSAoZC5nZXRWYXIoJ1BBUkFMTEVMX01BS0UnKSBvciAnJykuc3BsaXQoKQorICAgICMgbG9vayBmb3IgJy1qJyBhbmQgdGhyb3cgb3RoZXIgb3B0aW9ucyAoZS5nLiAnLWwnKSBhd2F5CisgICAgIyBiZWNhdXNlIHRoZXkgbWlnaHQgaGF2ZSBhIGRpZmZlcmVudCBtZWFuaW5nIGluIGdvbGFuZworICAgIHdoaWxlIHBtOgorICAgICAgICBvcHQgPSBwbS5wb3AoMCkKKyAgICAgICAgaWYgb3B0ID09ICctaic6CisgICAgICAgICAgICB2ID0gcG0ucG9wKDApCisgICAgICAgIGVsaWYgb3B0LnN0YXJ0c3dpdGgoJy1qJyk6CisgICAgICAgICAgICB2ID0gb3B0WzI6XS5zdHJpcCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHJldHVybiAnLXAgJWQnICUgaW50KHYpCisKKyAgICByZXR1cm4gIiIKKworR09fUEFSQUxMRUxfQlVJTEQgPz0gIiR7QGdldF9nb19wYXJhbGxlbF9tYWtlKGQpfSIKIAogR09ST09UX2NsYXNzLW5hdGl2ZSA9ICIke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ28iCi1HT1JPT1QgPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9LyR7VEFSR0VUX1NZU30vZ28iCi1HT0JJTl9GSU5BTF9jbGFzcy1uYXRpdmUgPSAiJHtHT1JPT1RfRklOQUx9L2JpbiIKLUdPQklOX0ZJTkFMID0gIiR7R09ST09UX0ZJTkFMfS9iaW4vJHtHT09TfV8ke0dPQVJDSH0iCi0KLWV4cG9ydCBHT09TID0gIiR7VEFSR0VUX0dPT1N9IgotZXhwb3J0IEdPQVJDSCA9ICIke1RBUkdFVF9HT0FSQ0h9IgotZXhwb3J0IEdPQVJNID0gIiR7VEFSR0VUX0dPQVJNfSIKLWV4cG9ydCBDR09fRU5BQkxFRCA9ICIxIgorR09ST09UX2NsYXNzLW5hdGl2ZXNkayA9ICIke1NUQUdJTkdfRElSX1RBUkdFVH0ke2xpYmRpcn0vZ28iCitHT1JPT1QgPSAiJHtTVEFHSU5HX0xJQkRJUn0vZ28iCiBleHBvcnQgR09ST09UCi1leHBvcnQgR09ST09UX0ZJTkFMID0gIiR7bGliZGlyfS8ke1RBUkdFVF9TWVN9L2dvIgotZXhwb3J0IEdPQklOX0ZJTkFMCi1leHBvcnQgR09QS0dfRklOQUwgPSAiJHtHT1JPT1RfRklOQUx9L3BrZy8ke0dPT1N9XyR7R09BUkNIfSIKLWV4cG9ydCBHT1NSQ19GSU5BTCA9ICIke0dPUk9PVF9GSU5BTH0vc3JjIgotZXhwb3J0IEdPX0dDRkxBR1MgPSAiJHtUQVJHRVRfQ0ZMQUdTfSIKLWV4cG9ydCBHT19MREZMQUdTID0gIiR7VEFSR0VUX0xERkxBR1N9IgotZXhwb3J0IENHT19DRkxBR1MgPSAiJHtUQVJHRVRfQ0NfQVJDSH0ke1RPT0xDSEFJTl9PUFRJT05TfSAke1RBUkdFVF9DRkxBR1N9IgotZXhwb3J0IENHT19DUFBGTEFHUyA9ICIke1RBUkdFVF9DUFBGTEFHU30iCi1leHBvcnQgQ0dPX0NYWEZMQUdTID0gIiR7VEFSR0VUX0NDX0FSQ0h9JHtUT09MQ0hBSU5fT1BUSU9OU30gJHtUQVJHRVRfQ1hYRkxBR1N9IgotZXhwb3J0IENHT19MREZMQUdTID0gIiR7VEFSR0VUX0NDX0FSQ0h9JHtUT09MQ0hBSU5fT1BUSU9OU30gJHtUQVJHRVRfTERGTEFHU30iCitleHBvcnQgR09ST09UX0ZJTkFMID0gIiR7bGliZGlyfS9nbyIKIAotREVQRU5EUyArPSAiZ28tY3Jvc3MtJHtUQVJHRVRfQVJDSH0iCi1ERVBFTkRTX2NsYXNzLW5hdGl2ZSArPSAiZ28tbmF0aXZlIgorREVQRU5EU19HT0xBTkdfY2xhc3MtdGFyZ2V0ID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdvIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdvLXJ1bnRpbWUiCitERVBFTkRTX0dPTEFOR19jbGFzcy1uYXRpdmUgPSAiZ28tbmF0aXZlIgorREVQRU5EU19HT0xBTkdfY2xhc3MtbmF0aXZlc2RrID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdvLWNyb3Nzc2RrIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdvLXJ1bnRpbWUiCiAKLUZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtHT1NSQ19GSU5BTH0vJHtHT19JTVBPUlR9IgotRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke0dPUEtHX0ZJTkFMfS8ke0dPX0lNUE9SVH0qIgorREVQRU5EU19hcHBlbmQgPSAiICR7REVQRU5EU19HT0xBTkd9IgorCitHT19MSU5LU0hBUkVEID89ICIke0AnLWxpbmtzaGFyZWQnIGlmIGQuZ2V0VmFyKCdHT19EWU5MSU5LJykgZWxzZSAnJ30iCitHT19SUEFUSF9MSU5LID0gIiR7QCctV2wsLXJwYXRoLWxpbms9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtsaWJkaXJ9L2dvL3BrZy8ke1RBUkdFVF9HT1RVUExFfV9keW5saW5rJyBpZiBkLmdldFZhcignR09fRFlOTElOSycpIGVsc2UgJyd9IgorR09fUlBBVEggPSAiJHtAJy1yICR7bGliZGlyfS9nby9wa2cvJHtUQVJHRVRfR09UVVBMRX1fZHlubGluaycgaWYgZC5nZXRWYXIoJ0dPX0RZTkxJTksnKSBlbHNlICcnfSIKK0dPX1JQQVRIX2NsYXNzLW5hdGl2ZSA9ICIke0AnLXIgJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dvL3BrZy8ke1RBUkdFVF9HT1RVUExFfV9keW5saW5rJyBpZiBkLmdldFZhcignR09fRFlOTElOSycpIGVsc2UgJyd9IgorR09fUlBBVEhfTElOS19jbGFzcy1uYXRpdmUgPSAiJHtAJy1XbCwtcnBhdGgtbGluaz0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ28vcGtnLyR7VEFSR0VUX0dPVFVQTEV9X2R5bmxpbmsnIGlmIGQuZ2V0VmFyKCdHT19EWU5MSU5LJykgZWxzZSAnJ30iCitHT19FWFRMREZMQUdTID89ICIke0hPU1RfQ0NfQVJDSH0ke1RPT0xDSEFJTl9PUFRJT05TfSAke0dPX1JQQVRIX0xJTkt9ICR7TERGTEFHU30iCitHT19MSU5LTU9ERSA/PSAiIgorR09fTElOS01PREVfY2xhc3MtbmF0aXZlc2RrID0gIi0tbGlua21vZGU9ZXh0ZXJuYWwiCitHT19MREZMQUdTID89ICctbGRmbGFncz0iJHtHT19SUEFUSH0gJHtHT19MSU5LTU9ERX0gLWV4dGxkZmxhZ3MgJyR7R09fRVhUTERGTEFHU30nIicKK2V4cG9ydCBHT0JVSUxERkxBR1MgPz0gIi12ICR7R09fTERGTEFHU30iCitleHBvcnQgR09QVEVTVEJVSUxERkxBR1MgPz0gIiR7R09CVUlMREZMQUdTfSAtYyIKK2V4cG9ydCBHT1BURVNURkxBR1MgPz0gIi10ZXN0LnYiCitHT0JVSUxERkxBR1NfcHJlcGVuZF90YXNrLWNvbXBpbGUgPSAiJHtHT19QQVJBTExFTF9CVUlMRH0gIgorCitleHBvcnQgR08gPSAiJHtIT1NUX1BSRUZJWH1nbyIKK0dPVE9PTERJUiA9ICIke1NUQUdJTkdfTElCRElSX05BVElWRX0vJHtUQVJHRVRfU1lTfS9nby9wa2cvdG9vbC8ke0JVSUxEX0dPVFVQTEV9IgorR09UT09MRElSX2NsYXNzLW5hdGl2ZSA9ICIke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ28vcGtnL3Rvb2wvJHtCVUlMRF9HT1RVUExFfSIKK2V4cG9ydCBHT1RPT0xESVIKKworU0VDVVJJVFlfQ0ZMQUdTID0gIiR7U0VDVVJJVFlfTk9QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0xERkxBR1MgPSAiIgorCitleHBvcnQgQ0dPX0VOQUJMRUQgPz0gIjEiCitleHBvcnQgQ0dPX0NGTEFHUyA/PSAiJHtDRkxBR1N9IgorZXhwb3J0IENHT19DUFBGTEFHUyA/PSAiJHtDUFBGTEFHU30iCitleHBvcnQgQ0dPX0NYWEZMQUdTID89ICIke0NYWEZMQUdTfSIKK2V4cG9ydCBDR09fTERGTEFHUyA/PSAiJHtMREZMQUdTfSIKIAogR09fSU5TVEFMTCA/PSAiJHtHT19JTVBPUlR9Ly4uLiIKK0dPX0lOU1RBTExfRklMVEVST1VUID89ICIke0dPX0lNUE9SVH0vdmVuZG9yLyIKIAotZG9fZ29fY29tcGlsZSgpIHsKLQlHT1BBVEg9JHtTfToke1NUQUdJTkdfTElCRElSfS8ke1RBUkdFVF9TWVN9L2dvIGdvIGVudgorQiA9ICIke1dPUktESVJ9L2J1aWxkIgorZXhwb3J0IEdPUEFUSCA9ICIke0J9IgorR09fVE1QRElSID89ICIke1dPUktESVJ9L2dvLXRtcCIKK0dPX1RNUERJUlt2YXJkZXB2YWx1ZV0gPSAiIgorCitweXRob24gZ29fZG9fdW5wYWNrKCkgeworICAgIHNyY191cmkgPSAoZC5nZXRWYXIoJ1NSQ19VUkknKSBvciAiIikuc3BsaXQoKQorICAgIGlmIGxlbihzcmNfdXJpKSA9PSAwOgorICAgICAgICByZXR1cm4KKworICAgIHRyeToKKyAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChzcmNfdXJpLCBkKQorICAgICAgICBmb3IgdXJsIGluIGZldGNoZXIudXJsczoKKyAgICAgICAgICAgIGlmIGZldGNoZXIudWRbdXJsXS50eXBlID09ICdnaXQnOgorICAgICAgICAgICAgICAgIGlmIGZldGNoZXIudWRbdXJsXS5wYXJtLmdldCgnZGVzdHN1ZmZpeCcpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNfZGlybmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoZC5nZXRWYXIoJ1MnKSkKKyAgICAgICAgICAgICAgICAgICAgZmV0Y2hlci51ZFt1cmxdLnBhcm1bJ2Rlc3RzdWZmaXgnXSA9IG9zLnBhdGguam9pbihzX2Rpcm5hbWUsICdzcmMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdHT19JTVBPUlQnKSkgKyAnLycKKyAgICAgICAgZmV0Y2hlci51bnBhY2soZC5nZXRWYXIoJ1dPUktESVInKSkKKyAgICBleGNlcHQgYmIuZmV0Y2gyLkJCRmV0Y2hFeGNlcHRpb24gYXMgZToKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZChlKQorfQorCitnb19saXN0X3BhY2thZ2VzKCkgeworCSR7R099IGxpc3QgLWYgJ3t7LkltcG9ydFBhdGh9fScgJHtHT0JVSUxERkxBR1N9ICR7R09fSU5TVEFMTH0gfCBcCisJCWVncmVwIC12ICcke0dPX0lOU1RBTExfRklMVEVST1VUfScKK30KKworZ29fbGlzdF9wYWNrYWdlX3Rlc3RzKCkgeworICAgICR7R099IGxpc3QgLWYgJ3t7LkltcG9ydFBhdGh9fSB7ey5UZXN0R29GaWxlc319JyAke0dPQlVJTERGTEFHU30gJHtHT19JTlNUQUxMfSB8IFwKKwkJZ3JlcCAtdiAnXFtcXSQnIHwgXAorCQllZ3JlcCAtdiAnJHtHT19JTlNUQUxMX0ZJTFRFUk9VVH0nIHwgXAorCQlhd2sgJ3sgcHJpbnQgJDEgfScKK30KKworZ29fZG9fY29uZmlndXJlKCkgeworCWxuIC1zbmYgJHtTfS9zcmMgJHtCfS8KK30KKworZ29fZG9fY29tcGlsZSgpIHsKKwlleHBvcnQgVE1QRElSPSIke0dPX1RNUERJUn0iCisJJHtHT30gZW52CiAJaWYgWyAtbiAiJHtHT19JTlNUQUxMfSIgXTsgdGhlbgotCQlHT1BBVEg9JHtTfToke1NUQUdJTkdfTElCRElSfS8ke1RBUkdFVF9TWVN9L2dvIGdvIGluc3RhbGwgLXYgJHtHT19JTlNUQUxMfQorCQkke0dPfSBpbnN0YWxsICR7R09fTElOS1NIQVJFRH0gJHtHT0JVSUxERkxBR1N9IGBnb19saXN0X3BhY2thZ2VzYAorCWZpCit9Citkb19jb21waWxlW2RpcnNdID0rICIke0dPX1RNUERJUn0iCitkb19jb21waWxlW2NsZWFuZGlyc10gPSAiJHtCfS9iaW4gJHtCfS9wa2ciCisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisgICAgZXhwb3J0IFRNUERJUj0iJHtHT19UTVBESVJ9IgorICAgIHJtIC1mICR7Qn0vLmdvX2NvbXBpbGVkX3Rlc3RzLmxpc3QKKwlnb19saXN0X3BhY2thZ2VfdGVzdHMgfCB3aGlsZSByZWFkIHBrZzsgZG8KKwkJY2QgJHtCfS9zcmMvJHBrZworCQkke0dPfSB0ZXN0ICR7R09QVEVTVEJVSUxERkxBR1N9ICRwa2cKKwkJZmluZCAuIC1taW5kZXB0aCAxIC1tYXhkZXB0aCAxIC10eXBlIGYgLW5hbWUgJyoudGVzdCcgLWV4ZWMgZWNobyAkcGtnL3t9IFw7IHwgXAorCQkJc2VkIC1lJ3MsL1wuLywvLCc+PiAke0J9Ly5nb19jb21waWxlZF90ZXN0cy5saXN0CisJZG9uZQorfQorZG9fY29tcGlsZV9wdGVzdF9iYXNlW2RpcnNdID0rICIke0dPX1RNUERJUn0iCisKK2dvX2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L2dvL3NyYy8ke0dPX0lNUE9SVH0KKwl0YXIgLUMgJHtTfS9zcmMvJHtHT19JTVBPUlR9IC1jZiAtIC0tZXhjbHVkZS12Y3MgLS1leGNsdWRlICcqLnRlc3QnIC4gfCBcCisJCXRhciAtQyAke0R9JHtsaWJkaXJ9L2dvL3NyYy8ke0dPX0lNUE9SVH0gLS1uby1zYW1lLW93bmVyIC14ZiAtCisJdGFyIC1DICR7Qn0gLWNmIC0gcGtnIHwgdGFyIC1DICR7RH0ke2xpYmRpcn0vZ28gLS1uby1zYW1lLW93bmVyIC14ZiAtCisKKwlpZiBbIC1uICJgbHMgJHtCfS8ke0dPX0JVSUxEX0JJTkRJUn0vYCIgXTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwkJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vJHtHT19CVUlMRF9CSU5ESVJ9LyogJHtEfSR7YmluZGlyfS8KIAlmaQogfQogCi1kb19nb19pbnN0YWxsKCkgewotCXJtIC1yZiAke1dPUktESVJ9L3N0YWdpbmcKLQlpbnN0YWxsIC1kICR7V09SS0RJUn0vc3RhZ2luZyR7R09ST09UX0ZJTkFMfSAke0R9JHtHT1JPT1RfRklOQUx9Ci0JdGFyIC1DICR7U30gLWNmIC0gLiB8IHRhciAtQyAke1dPUktESVJ9L3N0YWdpbmcke0dPUk9PVF9GSU5BTH0gLXhwdmYgLQotCi0JZmluZCAke1dPUktESVJ9L3N0YWdpbmcke0dPUk9PVF9GSU5BTH0gXCggXAotCQktbmFtZSBcKi5pbmRpcmVjdGlvbnN5bWxpbmsgLW8gXAotCQktbmFtZSAuZ2l0XCogLW8gICAgICAgICAgICAgICAgXAotCQktbmFtZSAuaGcgLW8gICAgICAgICAgICAgICAgICAgXAotCQktbmFtZSAuc3ZuIC1vICAgICAgICAgICAgICAgICAgXAotCQktbmFtZSAucGNcKiAtbyAgICAgICAgICAgICAgICAgXAotCQktbmFtZSBwYXRjaGVzXCogICAgICAgICAgICAgICAgXAotCQlcKSAtcHJpbnQwIHwgXAotCXhhcmdzIC1yMCBybSAtcmYKLQotCXRhciAtQyAke1dPUktESVJ9L3N0YWdpbmcke0dPUk9PVF9GSU5BTH0gLWNmIC0gLiB8IFwKLQl0YXIgLUMgJHtEfSR7R09ST09UX0ZJTkFMfSAteHB2ZiAtCi0KLQljaG93biAtUiByb290OnJvb3QgIiR7RH0ke0dPUk9PVF9GSU5BTH0iCi0KLQlpZiBbIC1lICIke0R9JHtHT0JJTl9GSU5BTH0iIF07IHRoZW4KLQkJaW5zdGFsbCAtZCAtbSAwNzU1ICIke0R9JHtiaW5kaXJ9IgotCQlmaW5kICIke0R9JHtHT0JJTl9GSU5BTH0iICEgLXR5cGUgZCAtcHJpbnQwIHwgeGFyZ3MgLXIwIG12IC0tdGFyZ2V0LWRpcmVjdG9yeT0iJHtEfSR7YmluZGlyfSIKLQkJcm1kaXIgLXAgIiR7RH0ke0dPQklOX0ZJTkFMfSIgfHwgdHJ1ZQotCWZpCitkb19pbnN0YWxsX3B0ZXN0X2Jhc2UoKSB7CitzZXQgLXgKKyAgICB0ZXN0IC1mICIke0J9Ly5nb19jb21waWxlZF90ZXN0cy5saXN0IiB8fCBleGl0IDAKKyAgICB0ZXN0cz0iIgorICAgIHdoaWxlIHJlYWQgdGVzdDsgZG8KKyAgICAgICAgdGVzdHM9IiR0ZXN0cyR7dGVzdHM6KyB9JHt0ZXN0JS50ZXN0fSIKKyAgICAgICAgdGVzdGRpcj1gZGlybmFtZSAkdGVzdGAKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtQVEVTVF9QQVRIfS8kdGVzdGRpcgorICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtCfS9zcmMvJHRlc3QgJHtEfSR7UFRFU1RfUEFUSH0vJHRlc3QKKyAgICAgICAgaWYgWyAtZCAiJHtCfS9zcmMvJHRlc3RkaXIvdGVzdGRhdGEiIF07IHRoZW4KKyAgICAgICAgICAgIGNwIC0tcHJlc2VydmU9bW9kZSx0aW1lc3RhbXBzIC1SICIke0J9L3NyYy8kdGVzdGRpci90ZXN0ZGF0YSIgJHtEfSR7UFRFU1RfUEFUSH0vJHRlc3RkaXIKKyAgICAgICAgZmkKKyAgICBkb25lIDwgJHtCfS8uZ29fY29tcGlsZWRfdGVzdHMubGlzdAorICAgIGlmIFsgLW4gIiR0ZXN0cyIgXTsgdGhlbgorICAgICAgICBpbnN0YWxsIC1kICR7RH0ke1BURVNUX1BBVEh9CisgICAgICAgIGNhdCA+JHtEfSR7UFRFU1RfUEFUSH0vcnVuLXB0ZXN0IDw8RU9GCisjIS9iaW4vc2gKK0FOWUZBSUxFRD0wCitmb3IgdCBpbiAkdGVzdHM7IGRvCisgICAgdGVzdGRpcj1cYGRpcm5hbWUgXCR0LnRlc3RcYAorICAgIGlmICggY2QgIiR7UFRFU1RfUEFUSH0vXCR0ZXN0ZGlyIjsgIiR7UFRFU1RfUEFUSH0vXCR0LnRlc3QiICR7R09QVEVTVEZMQUdTfSB8IHRlZSAvZGV2L2ZkLzkgfCBncmVwIC1xICJeRkFJTCIgKSA5PiYxOyB0aGVuCisgICAgICAgIEFOWUZBSUxFRD0xCisgICAgZmkKK2RvbmUKK2lmIFsgXCRBTllGQUlMRUQgLW5lIDAgXTsgdGhlbgorICAgIGVjaG8gIkZBSUw6ICR7UE59IgorICAgIGV4aXQgMQorZmkKK2VjaG8gIlBBU1M6ICR7UE59IgorZXhpdCAwCitFT0YKKyAgICAgICAgY2htb2QgK3ggJHtEfSR7UFRFU1RfUEFUSH0vcnVuLXB0ZXN0CisgICAgZWxzZQorICAgICAgICBybSAtcmYgJHtEfSR7UFRFU1RfUEFUSH0KKyAgICBmaQorc2V0ICt4CiB9CiAKLWRvX2NvbXBpbGUoKSB7Ci0JZG9fZ29fY29tcGlsZQotfQorRVhQT1JUX0ZVTkNUSU9OUyBkb191bnBhY2sgZG9fY29uZmlndXJlIGRvX2NvbXBpbGUgZG9faW5zdGFsbAogCi1kb19pbnN0YWxsKCkgewotCWRvX2dvX2luc3RhbGwKLX0KK0ZJTEVTXyR7UE59LWRldiA9ICIke2xpYmRpcn0vZ28vc3JjIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ID0gIiR7bGliZGlyfS9nby9wa2ciCisKK0lOU0FORV9TS0lQXyR7UE59ICs9ICJsZGZsYWdzIgorSU5TQU5FX1NLSVBfJHtQTn0tcHRlc3QgKz0gImxkZmxhZ3MiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2dvYXJjaC5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9nb2FyY2guYmJjbGFzcwppbmRleCAxMmRmODhmLi42NjNjOWZmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2dvYXJjaC5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ29hcmNoLmJiY2xhc3MKQEAgLTEsMTUgKzEsMzcgQEAKLUJVSUxEX0dPT1MgPSAiJHtAZ29fbWFwX29zKGQuZ2V0VmFyKCdCVUlMRF9PUycsIFRydWUpLCBkKX0iCi1CVUlMRF9HT0FSQ0ggPSAiJHtAZ29fbWFwX2FyY2goZC5nZXRWYXIoJ0JVSUxEX0FSQ0gnLCBUcnVlKSwgZCl9IgorQlVJTERfR09PUyA9ICIke0Bnb19tYXBfb3MoZC5nZXRWYXIoJ0JVSUxEX09TJyksIGQpfSIKK0JVSUxEX0dPQVJDSCA9ICIke0Bnb19tYXBfYXJjaChkLmdldFZhcignQlVJTERfQVJDSCcpLCBkKX0iCiBCVUlMRF9HT1RVUExFID0gIiR7QlVJTERfR09PU31fJHtCVUlMRF9HT0FSQ0h9IgotSE9TVF9HT09TID0gIiR7QGdvX21hcF9vcyhkLmdldFZhcignSE9TVF9PUycsIFRydWUpLCBkKX0iCi1IT1NUX0dPQVJDSCA9ICIke0Bnb19tYXBfYXJjaChkLmdldFZhcignSE9TVF9BUkNIJywgVHJ1ZSksIGQpfSIKLUhPU1RfR09BUk0gPSAiJHtAZ29fbWFwX2FybShkLmdldFZhcignSE9TVF9BUkNIJywgVHJ1ZSksIGQuZ2V0VmFyKCdUVU5FX0ZFQVRVUkVTJywgVHJ1ZSksIGQpfSIKK0hPU1RfR09PUyA9ICIke0Bnb19tYXBfb3MoZC5nZXRWYXIoJ0hPU1RfT1MnKSwgZCl9IgorSE9TVF9HT0FSQ0ggPSAiJHtAZ29fbWFwX2FyY2goZC5nZXRWYXIoJ0hPU1RfQVJDSCcpLCBkKX0iCitIT1NUX0dPQVJNID0gIiR7QGdvX21hcF9hcm0oZC5nZXRWYXIoJ0hPU1RfQVJDSCcpLCBkLmdldFZhcignVFVORV9GRUFUVVJFUycpLCBkKX0iCitIT1NUX0dPMzg2ID0gIiR7QGdvX21hcF8zODYoZC5nZXRWYXIoJ0hPU1RfQVJDSCcpLCBkLmdldFZhcignVFVORV9GRUFUVVJFUycpLCBkKX0iCiBIT1NUX0dPVFVQTEUgPSAiJHtIT1NUX0dPT1N9XyR7SE9TVF9HT0FSQ0h9IgotVEFSR0VUX0dPT1MgPSAiJHtAZ29fbWFwX29zKGQuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKSwgZCl9IgotVEFSR0VUX0dPQVJDSCA9ICIke0Bnb19tYXBfYXJjaChkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKSwgZCl9IgotVEFSR0VUX0dPQVJNID0gIiR7QGdvX21hcF9hcm0oZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSksIGQuZ2V0VmFyKCdUVU5FX0ZFQVRVUkVTJywgVHJ1ZSksIGQpfSIKK1RBUkdFVF9HT09TID0gIiR7QGdvX21hcF9vcyhkLmdldFZhcignVEFSR0VUX09TJyksIGQpfSIKK1RBUkdFVF9HT0FSQ0ggPSAiJHtAZ29fbWFwX2FyY2goZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJyksIGQpfSIKK1RBUkdFVF9HT0FSTSA9ICIke0Bnb19tYXBfYXJtKGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcpLCBkLmdldFZhcignVFVORV9GRUFUVVJFUycpLCBkKX0iCitUQVJHRVRfR08zODYgPSAiJHtAZ29fbWFwXzM4NihkLmdldFZhcignVEFSR0VUX0FSQ0gnKSwgZC5nZXRWYXIoJ1RVTkVfRkVBVFVSRVMnKSwgZCl9IgogVEFSR0VUX0dPVFVQTEUgPSAiJHtUQVJHRVRfR09PU31fJHtUQVJHRVRfR09BUkNIfSIKLUdPX0JVSUxEX0JJTkRJUiA9ICIke0BbJ2Jpbi8ke0hPU1RfR09UVVBMRX0nLCdiaW4nXVtkLmdldFZhcignQlVJTERfR09UVVBMRScsVHJ1ZSkgPT0gZC5nZXRWYXIoJ0hPU1RfR09UVVBMRScsVHJ1ZSldfSIKK0dPX0JVSUxEX0JJTkRJUiA9ICIke0BbJ2Jpbi8ke0hPU1RfR09UVVBMRX0nLCdiaW4nXVtkLmdldFZhcignQlVJTERfR09UVVBMRScpID09IGQuZ2V0VmFyKCdIT1NUX0dPVFVQTEUnKV19IgorCisjIEdvIHN1cHBvcnRzIGR5bmFtaWMgbGlua2luZyBvbiBhIGxpbWl0ZWQgc2V0IG9mIGFyY2hpdGVjdHVyZXMuCisjIFNlZSB0aGUgc3VwcG9ydHNEeW5saW5rIGZ1bmN0aW9uIGluIGdvL3NyYy9jbWQvY29tcGlsZS9pbnRlcm5hbC9nYy9tYWluLmdvCitHT19EWU5MSU5LID0gIiIKK0dPX0RZTkxJTktfYXJtID0gIjEiCitHT19EWU5MSU5LX2FhcmNoNjQgPSAiMSIKK0dPX0RZTkxJTktfeDg2ID0gIjEiCitHT19EWU5MSU5LX3g4Ni02NCA9ICIxIgorR09fRFlOTElOS19wb3dlcnBjNjQgPSAiMSIKK0dPX0RZTkxJTktfY2xhc3MtbmF0aXZlID0gIiIKKworIyBkZWZpbmUgaGVyZSBiZWNhdXNlIGV2ZXJ5Ym9keSBpbmhlcml0cyB0aGlzIGNsYXNzCisjCitDT01QQVRJQkxFX0hPU1RfbGludXgtZ251eDMyID0gIm51bGwiCitDT01QQVRJQkxFX0hPU1RfbGludXgtbXVzbHgzMiA9ICJudWxsIgorQ09NUEFUSUJMRV9IT1NUX3Bvd2VycGMgPSAibnVsbCIKK0NPTVBBVElCTEVfSE9TVF9wb3dlcnBjNjQgPSAibnVsbCIKK0NPTVBBVElCTEVfSE9TVF9taXBzYXJjaG4zMiA9ICJudWxsIgorQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCitUVU5FX0NDQVJHU19yZW1vdmUgPSAiLW1hcmNoPW1pcHMzMnIyIgogCiBkZWYgZ29fbWFwX2FyY2goYSwgZCk6CiAgICAgaW1wb3J0IHJlCkBAIC0yMSwxNCArNDMsMTQgQEAKICAgICAgICAgcmV0dXJuICdhcm0nCiAgICAgZWxpZiByZS5tYXRjaCgnYWFyY2g2NC4qJywgYSk6CiAgICAgICAgIHJldHVybiAnYXJtNjQnCi0gICAgZWxpZiByZS5tYXRjaCgnbWlwczY0ZWwqJywgYSk6CisgICAgZWxpZiByZS5tYXRjaCgnbWlwczY0ZWwuKicsIGEpOgogICAgICAgICByZXR1cm4gJ21pcHM2NGxlJwotICAgIGVsaWYgcmUubWF0Y2goJ21pcHM2NConLCBhKToKKyAgICBlbGlmIHJlLm1hdGNoKCdtaXBzNjQuKicsIGEpOgogICAgICAgICByZXR1cm4gJ21pcHM2NCcKLSAgICBlbGlmIHJlLm1hdGNoKCdtaXBzZWwqJywgYSk6Ci0gICAgICAgIHJldHVybiAnbWlwc2xlJwotICAgIGVsaWYgcmUubWF0Y2goJ21pcHMqJywgYSk6CisgICAgZWxpZiBhID09ICdtaXBzJzoKICAgICAgICAgcmV0dXJuICdtaXBzJworICAgIGVsaWYgYSA9PSAnbWlwc2VsJzoKKyAgICAgICAgcmV0dXJuICdtaXBzbGUnCiAgICAgZWxpZiByZS5tYXRjaCgncChwY3xvd2VycGMpKDY0KScsIGEpOgogICAgICAgICByZXR1cm4gJ3BwYzY0JwogICAgIGVsaWYgcmUubWF0Y2goJ3AocGN8b3dlcnBjKSg2NGVsKScsIGEpOgpAQCAtNDMsNiArNjUsMTcgQEAKICAgICAgICAgICAgIHJldHVybiAnNycKICAgICAgICAgZWxpZiAnYXJtdjYnIGluIGY6CiAgICAgICAgICAgICByZXR1cm4gJzYnCisgICAgICAgIGVsaWYgJ2FybXY1JyBpbiBmOgorICAgICAgICAgICAgcmV0dXJuICc1JworICAgIHJldHVybiAnJworCitkZWYgZ29fbWFwXzM4NihhLCBmLCBkKToKKyAgICBpbXBvcnQgcmUKKyAgICBpZiByZS5tYXRjaCgnaS44NicsIGEpOgorICAgICAgICBpZiAoJ2NvcmUyJyBpbiBmKSBvciAoJ2NvcmVpNycgaW4gZik6CisgICAgICAgICAgICByZXR1cm4gJ3NzZTInCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJzM4NycKICAgICByZXR1cm4gJycKIAogZGVmIGdvX21hcF9vcyhvLCBkKToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3J1Yi1lZmkuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3J1Yi1lZmkuYmJjbGFzcwppbmRleCBkZjdmZTE4Li42MTA0NzliIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2dydWItZWZpLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ncnViLWVmaS5iYmNsYXNzCkBAIC0xNyw3ICsxNyw2IEBACiAjICR7R1JVQl9ST09UfSAtIGdydWIncyByb290IGRldmljZS4KIAogZG9fYm9vdGltZ1tkZXBlbmRzXSArPSAiJHtNTFBSRUZJWH1ncnViLWVmaTpkb19kZXBsb3kiCi1kb19ib290ZGlyZWN0ZGlza1tkZXBlbmRzXSArPSAiJHtNTFBSRUZJWH1ncnViLWVmaTpkb19kZXBsb3kiCiAKIEdSVUJfU0VSSUFMID89ICJjb25zb2xlPXR0eVMwLDExNTIwMCIKIEdSVUJfQ0ZHX1ZNID0gIiR7U30vZ3J1Yl92bS5jZmciCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2d0ay1kb2MuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3RrLWRvYy5iYmNsYXNzCmluZGV4IDBhZTI3MjkuLjUyMDFjNzEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3RrLWRvYy5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3RrLWRvYy5iYmNsYXNzCkBAIC00OCw2ICs0OCw3IEBACiAjIHdoaWNoIG1heSB0aGVuIGdldCBkZWxldGVkIChvciB0aGVpciBkZXBlbmRlbmNpZXMpIGFuZCBwb3RlbnRpYWxseSBzZWdmYXVsdAogZXhwb3J0IEdJT19NT0RVTEVfRElSPSR7U1RBR0lOR19MSUJESVJ9L2dpby9tb2R1bGVzLWR1bW15CiAKK0dJUl9FWFRSQV9MSUJTX1BBVEg9XGBmaW5kICR7Qn0gLW5hbWUgKi5zbyAtcHJpbnRmICIlaFxuInxzb3J0fHVuaXF8IHRyICdcbicgJzonXGBcJEdJUl9FWFRSQV9MSUJTX1BBVEgKIEdJUl9FWFRSQV9MSUJTX1BBVEg9XGBmaW5kICR7Qn0gLW5hbWUgLmxpYnN8IHRyICdcbicgJzonXGBcJEdJUl9FWFRSQV9MSUJTX1BBVEgKIAogaWYgWyAtZCAiLmxpYnMiIF07IHRoZW4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaWNlY2MuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaWNlY2MuYmJjbGFzcwppbmRleCA3N2JmNjExLi4xY2MxYzRkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ljZWNjLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pY2VjYy5iYmNsYXNzCkBAIC0xMTYsNyArMTE2LDcgQEAKICAgICAjIGZvciBvbmUgcmVhc29uIG9yIHRoZSBvdGhlcgogICAgICMgdGhpcyBpcyB0aGUgb2xkIGxpc3QgKHdoaWNoIGRvZXNuJ3Qgc2VlbSB0byBiZSB2YWxpZCBhbnltb3JlLCBiZWNhdXNlIEkgd2FzIGFibGUgdG8gYnVpbGQKICAgICAjIGFsbCB0aGVzZSB3aXRoIGljZWNjIGVuYWJsZWQpCi0gICAgIyBzeXN0ZW1fcGFja2FnZV9ibGFja2xpc3QgPSBbICJ1Y2xpYmMiLCAiZ2xpYmMiLCAiZ2NjIiwgImJpbmQiLCAidS1ib290IiwgImRoY3AtZm9yd2FyZGVyIiwgImVuY2hhbnQiLCAiY29ubm1hbiIsICJvcmJpdDIiIF0KKyAgICAjIHN5c3RlbV9wYWNrYWdlX2JsYWNrbGlzdCA9IFsgImdsaWJjIiwgImdjYyIsICJiaW5kIiwgInUtYm9vdCIsICJkaGNwLWZvcndhcmRlciIsICJlbmNoYW50IiwgImNvbm5tYW4iLCAib3JiaXQyIiBdCiAgICAgIyB3aGVuIGFkZGluZyBuZXcgZW50cnksIHBsZWFzZSBkb2N1bWVudCB3aHkgKGhvdyBpdCBmYWlsZWQpIHNvIHRoYXQgd2UgY2FuIHJlLWV2YWx1YXRlIGl0IGxhdGVyCiAgICAgIyBlLmcuIHdoZW4gdGhlcmUgaXMgbmV3IHZlcnNpb24KICAgICAjIGJ1aWxkaW5nIGxpYmdjYy1pbml0aWFsIHdpdGggaWNlY2MgZmFpbHMgd2l0aCBDUFAgc2FuaXR5IGNoZWNrIGVycm9yIGlmIGhvc3Qgc3lzcm9vdCBjb250YWlucyBjcm9zcyBnY2MgYnVpbHQgZm9yIGFub3RoZXIgdGFyZ2V0IHR1bmUvdmFyaWFudApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS1saXZlLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlLWxpdmUuYmJjbGFzcwppbmRleCBhM2QxYjRlLi4xNjIzYzE1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlLWxpdmUuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlLWxpdmUuYmJjbGFzcwpAQCAtMzQsMjAgKzM0LDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAke01MUFJFRklYfXN5c2xpbnV4OmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAogICAgICAgICAgICAgICAgICAgICAgICAgc3lzbGludXgtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAogICAgICAgICAgICAgICAgICAgICAgICAgJHtAb2UudXRpbHMuaWZlbHNlKGQuZ2V0VmFyKCdDT01QUkVTU0lTTycsIEZhbHNlKSwnemlzb2ZzLXRvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JywnJyl9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICR7UE59OmRvX2ltYWdlX2V4dDQgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtQTn06ZG9faW1hZ2VfJHtAZC5nZXRWYXIoJ0xJVkVfUk9PVEZTX1RZUEUnKS5yZXBsYWNlKCctJywgJ18nKX0gXAogICAgICAgICAgICAgICAgICAgICAgICAgIgogCiAKIExBQkVMU19MSVZFID89ICJib290IGluc3RhbGwiCiBST09UX0xJVkUgPz0gInJvb3Q9L2Rldi9yYW0wIgotSU5JVFJEX0lNQUdFX0xJVkUgPz0gImNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMiCitJTklUUkRfSU1BR0VfTElWRSA/PSAiJHtNTFBSRUZJWH1jb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzIgogSU5JVFJEX0xJVkUgPz0gIiR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTklUUkRfSU1BR0VfTElWRX0tJHtNQUNISU5FfS5jcGlvLmd6IgogCi1ST09URlMgPz0gIiR7SU1HREVQTE9ZRElSfS8ke0lNQUdFX0xJTktfTkFNRX0uZXh0NCIKK0xJVkVfUk9PVEZTX1RZUEUgPz0gImV4dDQiCitST09URlMgPz0gIiR7SU1HREVQTE9ZRElSfS8ke0lNQUdFX0xJTktfTkFNRX0uJHtMSVZFX1JPT1RGU19UWVBFfSIKIAotSU1BR0VfVFlQRURFUF9saXZlID0gImV4dDQiCi1JTUFHRV9UWVBFREVQX2lzbyA9ICJleHQ0IgotSU1BR0VfVFlQRURFUF9oZGRpbWcgPSAiZXh0NCIKK0lNQUdFX1RZUEVERVBfbGl2ZSA9ICIke0xJVkVfUk9PVEZTX1RZUEV9IgorSU1BR0VfVFlQRURFUF9pc28gPSAiJHtMSVZFX1JPT1RGU19UWVBFfSIKK0lNQUdFX1RZUEVERVBfaGRkaW1nID0gIiR7TElWRV9ST09URlNfVFlQRX0iCiBJTUFHRV9UWVBFU19NQVNLRUQgKz0gImxpdmUgaGRkaW1nIGlzbyIKIAogcHl0aG9uKCkgewpAQCAtOTEsNyArOTIsNyBAQAogCWZvciBmcyBpbiAke0lOSVRSRH0KIAlkbwogCQlpZiBbICEgLXMgIiRmcyIgXTsgdGhlbgotCQkJYmJub3RlICJJU08gaW1hZ2Ugd2lsbCBub3QgYmUgY3JlYXRlZC4gJGZzIGlzIGludmFsaWQuIgorCQkJYmJ3YXJuICJJU08gaW1hZ2Ugd2lsbCBub3QgYmUgY3JlYXRlZC4gJGZzIGlzIGludmFsaWQuIgogCQkJcmV0dXJuCiAJCWZpCiAJZG9uZQpAQCAtMjE2LDEwICsyMTcsMTAgQEAKIAlmaQogCiAJaWYgWyAteiAiJHtIRERJTUdfSUR9IiBdOyB0aGVuCi0JCW1rZG9zZnMgJHtGQVRTSVpFfSAtbiAke0JPT1RJTUdfVk9MVU1FX0lEfSAtUyA1MTIgLUMgJHtGQVRJTUd9IFwKKwkJbWtkb3NmcyAke0ZBVFNJWkV9IC1uICR7Qk9PVElNR19WT0xVTUVfSUR9ICR7TUtET1NGU19FWFRSQU9QVFN9IC1DICR7RkFUSU1HfSBcCiAJCQkke0JMT0NLU30KIAllbHNlCi0JCW1rZG9zZnMgJHtGQVRTSVpFfSAtbiAke0JPT1RJTUdfVk9MVU1FX0lEfSAtUyA1MTIgLUMgJHtGQVRJTUd9IFwKKwkJbWtkb3NmcyAke0ZBVFNJWkV9IC1uICR7Qk9PVElNR19WT0xVTUVfSUR9ICR7TUtET1NGU19FWFRSQU9QVFN9IC1DICR7RkFUSU1HfSBcCiAJCSR7QkxPQ0tTfSAtaSAke0hERElNR19JRH0KIAlmaQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlLXByZWxpbmsuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtcHJlbGluay5iYmNsYXNzCmluZGV4IDQxNTdkZjAuLmYzYmI2OGIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtcHJlbGluay5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtcHJlbGluay5iYmNsYXNzCkBAIC0xLDYgKzEsNiBAQAogZG9fcm9vdGZzW2RlcGVuZHNdICs9ICJwcmVsaW5rLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgogCi1JTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQgKz0gInByZWxpbmtfc2V0dXA7IHByZWxpbmtfaW1hZ2U7ICIKK0lNQUdFX1BSRVBST0NFU1NfQ09NTUFORF9hcHBlbmRfbGliYy1nbGliYyA9ICIgcHJlbGlua19zZXR1cDsgcHJlbGlua19pbWFnZTsgIgogCiBweXRob24gcHJlbGlua19zZXR1cCAoKSB7CiAgICAgb2UudXRpbHMud3JpdGVfbGRfc29fY29uZihkKQpAQCAtMzYsNyArMzYsMTcgQEAKIAlkeW5hbWljX2xvYWRlcj0kKGxpbnV4bG9hZGVyKQogCiAJIyBwcmVsaW5rIQotCSR7U1RBR0lOR19TQklORElSX05BVElWRX0vcHJlbGluayAtLXJvb3QgJHtJTUFHRV9ST09URlN9IC1hbVIgLU4gLWMgJHtzeXNjb25mZGlyfS9wcmVsaW5rLmNvbmYgLS1keW5hbWljLWxpbmtlciAkZHluYW1pY19sb2FkZXIKKwlpZiBbICIkQlVJTERfUkVQUk9EVUNJQkxFX0JJTkFSSUVTIiA9ICIxIiBdOyB0aGVuCisJCWJibm90ZSAiIHByZWxpbms6IEJVSUxEX1JFUFJPRFVDSUJMRV9CSU5BUklFUy4uLiIKKwkJaWYgWyAiJFJFUFJPRFVDSUJMRV9USU1FU1RBTVBfUk9PVEZTIiA9ICIiIF07IHRoZW4KKwkJCWV4cG9ydCBQUkVMSU5LX1RJTUVTVEFNUD1gZ2l0IGxvZyAtMSAtLXByZXR0eT0lY3QgYAorCQllbHNlCisJCQlleHBvcnQgUFJFTElOS19USU1FU1RBTVA9JFJFUFJPRFVDSUJMRV9USU1FU1RBTVBfUk9PVEZTCisJCWZpCisJCSR7U1RBR0lOR19TQklORElSX05BVElWRX0vcHJlbGluayAtLXJvb3QgJHtJTUFHRV9ST09URlN9IC1hbSAtTiAtYyAke3N5c2NvbmZkaXJ9L3ByZWxpbmsuY29uZiAtLWR5bmFtaWMtbGlua2VyICRkeW5hbWljX2xvYWRlcgorCWVsc2UKKwkJJHtTVEFHSU5HX1NCSU5ESVJfTkFUSVZFfS9wcmVsaW5rIC0tcm9vdCAke0lNQUdFX1JPT1RGU30gLWFtUiAtTiAtYyAke3N5c2NvbmZkaXJ9L3ByZWxpbmsuY29uZiAtLWR5bmFtaWMtbGlua2VyICRkeW5hbWljX2xvYWRlcgorCWZpCiAKIAkjIFJlbW92ZSB0aGUgcHJlbGluay5jb25mIGlmIHdlIGhhZCB0byBhZGQgaXQuCiAJaWYgWyAiJGR1bW15X3ByZWxpbmtfY29uZiIgPSAidHJ1ZSIgXTsgdGhlbgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS12bS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS12bS5iYmNsYXNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGJkOTIwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2Utdm0uYmJjbGFzcworKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0jIGltYWdlLXZtLmJiY2xhc3MKLSMgKGxvb3NseSBiYXNlZCBvZmYgaW1hZ2UtbGl2ZS5iYmNsYXNzIENvcHlyaWdodCAoQykgMjAwNCwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLikKLSMKLSMgQ3JlYXRlIGFuIGltYWdlIHdoaWNoIGNhbiBiZSBwbGFjZWQgZGlyZWN0bHkgb250byBhIGhhcmRkaXNrIHVzaW5nIGRkIGFuZCB0aGVuCi0jIGJvb3RlZC4KLSMKLSMgVGhpcyB1c2VzIHN5c2xpbnV4LiBleHRsaW51eCB3b3VsZCBoYXZlIGJlZW4gbmljZSBidXQgcmVxdWlyZWQgdGhlIGV4dDIvMwotIyBwYXJ0aXRpb24gdG8gYmUgbW91bnRlZC4gZ3J1YiByZXF1aXJlcyB0byBydW4gaXRzZWxmIGFzIHBhcnQgb2YgdGhlIGluc3RhbGwKLSMgcHJvY2Vzcy4KLSMKLSMgVGhlIGVuZCByZXN1bHQgaXMgYSA1MTIgYm9vdCBzZWN0b3IgcG9wdWxhdGVkIHdpdGggYW4gTUJSIGFuZCBwYXJ0aXRpb24gdGFibGUKLSMgZm9sbG93ZWQgYnkgYW4gbXNkb3MgZmF0MTYgcGFydGl0aW9uIGNvbnRhaW5pbmcgc3lzbGludXggYW5kIGEgbGludXgga2VybmVsCi0jIGNvbXBsZXRlZCBieSB0aGUgZXh0Mi8zIHJvb3Rmcy4KLSMKLSMgV2UgaGF2ZSB0byBwdXNoIHRoZSBtc2RvcyBwYXJpdGlvbiB0YWJsZSBzaXplID4gMTZNQiBzbyBmYXQgMTYgaXMgdXNlZCBhcyBwYXJ0ZWQKLSMgd29uJ3QgdG91Y2ggZmF0MTIgcGFydGl0aW9ucy4KLQotaW5oZXJpdCBsaXZlLXZtLWNvbW1vbgotCi1kb19ib290ZGlyZWN0ZGlza1tkZXBlbmRzXSArPSAiZG9zZnN0b29scy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbC9rZXJuZWw6ZG9fZGVwbG95IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNsaW51eDpkb19wb3B1bGF0ZV9zeXNyb290IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNsaW51eC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGVkLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdG9vbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7UE59OmRvX2ltYWdlXyR7Vk1fUk9PVEZTX1RZUEV9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCi0KLUlNQUdFX1RZUEVERVBfdm1kayA9ICIke1ZNX1JPT1RGU19UWVBFfSIKLUlNQUdFX1RZUEVERVBfdmRpID0gIiR7Vk1fUk9PVEZTX1RZUEV9IgotSU1BR0VfVFlQRURFUF9xY293MiA9ICIke1ZNX1JPT1RGU19UWVBFfSIKLUlNQUdFX1RZUEVERVBfaGRkZGlyZWN0ID0gIiR7Vk1fUk9PVEZTX1RZUEV9IgotSU1BR0VfVFlQRVNfTUFTS0VEICs9ICJ2bWRrIHZkaSBxY293MiBoZGRkaXJlY3QiCi0KLVZNX1JPT1RGU19UWVBFID89ICJleHQ0IgotUk9PVEZTID89ICIke0lNR0RFUExPWURJUn0vJHtJTUFHRV9MSU5LX05BTUV9LiR7Vk1fUk9PVEZTX1RZUEV9IgotCi0jIFVzZWQgYnkgYm9vdGxvYWRlcgotTEFCRUxTX1ZNID89ICJib290IgotUk9PVF9WTSA/PSAicm9vdD0vZGV2L3NkYTIiCi0jIFVzaW5nIGFuIGluaXRyYW1mcyBpcyBvcHRpb25hbC4gRW5hYmxlIGl0IGJ5IHNldHRpbmcgSU5JVFJEX0lNQUdFX1ZNLgotSU5JVFJEX0lNQUdFX1ZNID89ICIiCi1JTklUUkRfVk0gPz0gIiR7QCcke0lNR0RFUExPWURJUn0vJHtJTklUUkRfSU1BR0VfVk19LSR7TUFDSElORX0uY3Bpby5neicgaWYgJyR7SU5JVFJEX0lNQUdFX1ZNfScgZWxzZSAnJ30iCi1kb19ib290ZGlyZWN0ZGlza1tkZXBlbmRzXSArPSAiJHtAJyR7SU5JVFJEX0lNQUdFX1ZNfTpkb19pbWFnZV9jb21wbGV0ZScgaWYgJyR7SU5JVFJEX0lNQUdFX1ZNfScgZWxzZSAnJ30iCi0KLUJPT1RERF9WT0xVTUVfSUQgICA/PSAiYm9vdCIKLUJPT1RERF9FWFRSQV9TUEFDRSA/PSAiMTYzODQiCi0KLURJU0tfU0lHTkFUVVJFID89ICIke0RJU0tfU0lHTkFUVVJFX0dFTkVSQVRFRH0iCi1ESVNLX1NJR05BVFVSRVt2YXJkZXBzZXhjbHVkZV0gPSAiRElTS19TSUdOQVRVUkVfR0VORVJBVEVEIgotCi1idWlsZF9ib290X2RkKCkgewotCUhERERJUj0iJHtTfS9oZGQvYm9vdCIKLQlIRERJTUc9IiR7U30vaGRkLmltYWdlIgotCUlNQUdFPSR7SU1HREVQTE9ZRElSfS8ke0lNQUdFX05BTUV9LmhkZGRpcmVjdAotCi0JcG9wdWxhdGVfa2VybmVsICRIRERESVIKLQotCWlmIFsgIiR7UENCSU9TfSIgPSAiMSIgXTsgdGhlbgotCQlzeXNsaW51eF9oZGRpbWdfcG9wdWxhdGUgJEhERERJUgotCWZpCi0JaWYgWyAiJHtFRkl9IiA9ICIxIiBdOyB0aGVuCi0JCWVmaV9oZGRpbWdfcG9wdWxhdGUgJEhERERJUgotCWZpCi0KLQlCTE9DS1M9YGR1IC1ia3MgJEhERERJUiB8IGN1dCAtZiAxYAotCUJMT0NLUz1gZXhwciAkQkxPQ0tTICsgJHtCT09URERfRVhUUkFfU1BBQ0V9YAotCi0JIyBSZW1vdmUgaXQgc2luY2UgbWtkb3NmcyB3b3VsZCBmYWlsIHdoZW4gaXQgZXhpc3RzCi0Jcm0gLWYgJEhERElNRwotCW1rZG9zZnMgLW4gJHtCT09URERfVk9MVU1FX0lEfSAtUyA1MTIgLUMgJEhERElNRyAkQkxPQ0tTIAotCW1jb3B5IC1pICRIRERJTUcgLXMgJEhERERJUi8qIDo6LwotCi0JaWYgWyAiJHtQQ0JJT1N9IiA9ICIxIiBdOyB0aGVuCi0JCXN5c2xpbnV4X2hkZGRpcmVjdF9pbnN0YWxsICRIRERJTUcKLQlmaQkKLQljaG1vZCA2NDQgJEhERElNRwotCi0JUk9PVEZTQkxPQ0tTPWBkdSAtTGJrcyAke1JPT1RGU30gfCBjdXQgLWYgMWAKLQlUT1RBTFNJWkU9YGV4cHIgJEJMT0NLUyArICRST09URlNCTE9DS1NgCi0JRU5EMT1gZXhwciAkQkxPQ0tTIFwqIDEwMjRgCi0JRU5EMj1gZXhwciAkRU5EMSArIDUxMmAKLQlFTkQzPWBleHByIFwoICRST09URlNCTE9DS1MgXCogMTAyNCBcKSArICRFTkQxYAotCi0JZWNobyAkUk9PVEZTQkxPQ0tTICRUT1RBTFNJWkUgJEVORDEgJEVORDIgJEVORDMKLQlybSAtcmYgJElNQUdFCi0JZGQgaWY9L2Rldi96ZXJvIG9mPSRJTUFHRSBicz0xMDI0IHNlZWs9JFRPVEFMU0laRSBjb3VudD0xCi0KLQlwYXJ0ZWQgJElNQUdFIG1rbGFiZWwgbXNkb3MKLQlwYXJ0ZWQgJElNQUdFIG1rcGFydCBwcmltYXJ5IGZhdDE2IDAgJHtFTkQxfUIKLQlwYXJ0ZWQgJElNQUdFIHVuaXQgQiBta3BhcnQgcHJpbWFyeSBleHQyICR7RU5EMn1CICR7RU5EM31CCi0JcGFydGVkICRJTUFHRSBzZXQgMSBib290IG9uIAotCi0JcGFydGVkICRJTUFHRSBwcmludAotCi0JYXdrICJCRUdJTiB7IHByaW50ZiBcIiQoZWNobyAke0RJU0tfU0lHTkFUVVJFfSB8IHNlZCAncy9cKC4uXClcKC4uXClcKC4uXClcKC4uXCkvXFx4XDRcXHhcM1xceFwyXFx4XDEvJylcIiB9IiB8IFwKLQkJZGQgb2Y9JElNQUdFIGJzPTEgc2Vlaz00NDAgY29udj1ub3RydW5jCi0KLQlPRkZTRVQ9YGV4cHIgJEVORDIgLyA1MTJgCi0JaWYgWyAiJHtQQ0JJT1N9IiA9ICIxIiBdOyB0aGVuCi0JCWRkIGlmPSR7U1RBR0lOR19EQVRBRElSfS9zeXNsaW51eC9tYnIuYmluIG9mPSRJTUFHRSBjb252PW5vdHJ1bmMKLQlmaQotCi0JZGQgaWY9JEhERElNRyBvZj0kSU1BR0UgY29udj1ub3RydW5jIHNlZWs9MSBicz01MTIKLQlkZCBpZj0ke1JPT1RGU30gb2Y9JElNQUdFIGNvbnY9bm90cnVuYyBzZWVrPSRPRkZTRVQgYnM9NTEyCi0KLQljZCAke0lNR0RFUExPWURJUn0KLQotCWxuIC1zZiAke0lNQUdFX05BTUV9LmhkZGRpcmVjdCAke0lNR0RFUExPWURJUn0vJHtJTUFHRV9MSU5LX05BTUV9LmhkZGRpcmVjdAotfSAKLQotcHl0aG9uIGRvX2Jvb3RkaXJlY3RkaXNrKCkgewotICAgIHZhbGlkYXRlX2Rpc2tfc2lnbmF0dXJlKGQpCi0gICAgc2V0X2xpdmVfdm1fdmFycyhkLCAnVk0nKQotICAgIGlmIGQuZ2V0VmFyKCJQQ0JJT1MiKSA9PSAiMSI6Ci0gICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnYnVpbGRfc3lzbGludXhfY2ZnJywgZCkKLSAgICBpZiBkLmdldFZhcigiRUZJIikgPT0gIjEiOgotICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2J1aWxkX2VmaV9jZmcnLCBkKQotICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnYnVpbGRfYm9vdF9kZCcsIGQpCi19Ci0KLWRlZiBnZW5lcmF0ZV9kaXNrX3NpZ25hdHVyZSgpOgotICAgIGltcG9ydCB1dWlkCi0KLSAgICBzaWduYXR1cmUgPSBzdHIodXVpZC51dWlkNCgpKVs6OF0KLQotICAgIGlmIHNpZ25hdHVyZSAhPSAnMDAwMDAwMDAnOgotICAgICAgICByZXR1cm4gc2lnbmF0dXJlCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuICdmZmZmZmZmZicKLQotZGVmIHZhbGlkYXRlX2Rpc2tfc2lnbmF0dXJlKGQpOgotICAgIGltcG9ydCByZQotCi0gICAgZGlza19zaWduYXR1cmUgPSBkLmdldFZhcigiRElTS19TSUdOQVRVUkUiKQotCi0gICAgaWYgbm90IHJlLm1hdGNoKHInXlswLTlhLWZBLUZdezh9JCcsIGRpc2tfc2lnbmF0dXJlKToKLSAgICAgICAgYmIuZmF0YWwoIkRJU0tfU0lHTkFUVVJFICclcycgbXVzdCBiZSBhbiA4IGRpZ2l0IGhleCBzdHJpbmciICUgZGlza19zaWduYXR1cmUpCi0KLURJU0tfU0lHTkFUVVJFX0dFTkVSQVRFRCA6PSAiJHtAZ2VuZXJhdGVfZGlza19zaWduYXR1cmUoKX0iCi0KLXJ1bl9xZW11X2ltZyAoKXsKLSAgICB0eXBlPSIkMSIKLSAgICBxZW11LWltZyBjb252ZXJ0IC1PICR0eXBlICR7SU1HREVQTE9ZRElSfS8ke0lNQUdFX0xJTktfTkFNRX0uaGRkZGlyZWN0ICR7SU1HREVQTE9ZRElSfS8ke0lNQUdFX05BTUV9LiR0eXBlCi0KLSAgICBsbiAtc2YgJHtJTUFHRV9OQU1FfS4kdHlwZSAke0lNR0RFUExPWURJUn0vJHtJTUFHRV9MSU5LX05BTUV9LiR0eXBlCi19Ci1jcmVhdGVfdm1ka19pbWFnZSAoKSB7Ci0gICAgcnVuX3FlbXVfaW1nIHZtZGsKLX0KLQotY3JlYXRlX3ZkaV9pbWFnZSAoKSB7Ci0gICAgcnVuX3FlbXVfaW1nIHZkaQotfQotCi1jcmVhdGVfcWNvdzJfaW1hZ2UgKCkgewotICAgIHJ1bl9xZW11X2ltZyBxY293MgotfQotCi1weXRob24gZG9fdm1pbWcoKSB7Ci0gICAgaWYgJ3ZtZGsnIGluIGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJyk6Ci0gICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnY3JlYXRlX3ZtZGtfaW1hZ2UnLCBkKQotICAgIGlmICd2ZGknIGluIGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJyk6Ci0gICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnY3JlYXRlX3ZkaV9pbWFnZScsIGQpCi0gICAgaWYgJ3Fjb3cyJyBpbiBkLmdldFZhcignSU1BR0VfRlNUWVBFUycpOgotICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2NyZWF0ZV9xY293Ml9pbWFnZScsIGQpCi19Ci0KLWFkZHRhc2sgYm9vdGRpcmVjdGRpc2sgYmVmb3JlIGRvX3ZtaW1nCi1hZGR0YXNrIHZtaW1nIGFmdGVyIGRvX2Jvb3RkaXJlY3RkaXNrIGJlZm9yZSBkb19pbWFnZV9jb21wbGV0ZQotZG9fdm1pbWdbZGVwZW5kc10gKz0gInFlbXUtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlLmJiY2xhc3MKaW5kZXggNGJjZmI4Ny4uZDg4Y2U1YyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UuYmJjbGFzcwpAQCAtOSw3ICs5LDcgQEAKIFRPT0xDSEFJTl9UQVJHRVRfVEFTS19BVFRFTVBUT05MWSArPSAiJHtQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFl9IgogUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkQgKz0gInJvb3Rmc19zeXNyb290X3JlbGF0aXZlbGlua3M7ICIKIAotTElDRU5TRSA9ICJNSVQiCitMSUNFTlNFID89ICJNSVQiCiBQQUNLQUdFUyA9ICIiCiBERVBFTkRTICs9ICIke01MUFJFRklYfXFlbXV3cmFwcGVyLWNyb3NzIGRlcG1vZHdyYXBwZXItY3Jvc3MiCiBSREVQRU5EUyArPSAiJHtQQUNLQUdFX0lOU1RBTEx9ICR7TElOR1VBU19JTlNUQUxMfSIKQEAgLTMzLDcgKzMzLDcgQEAKIAogIyBUaGVzZSBwYWNrYWdlcyB3aWxsIGJlIHJlbW92ZWQgZnJvbSBhIHJlYWQtb25seSByb290ZnMgYWZ0ZXIgYWxsIG90aGVyCiAjIHBhY2thZ2VzIGhhdmUgYmVlbiBpbnN0YWxsZWQKLVJPT1RGU19ST19VTk5FRURFRCA9ICJ1cGRhdGUtcmMuZCBiYXNlLXBhc3N3ZCBzaGFkb3cgJHtWSVJUVUFMLVJVTlRJTUVfdXBkYXRlLWFsdGVybmF0aXZlc30gJHtST09URlNfQk9PVFNUUkFQX0lOU1RBTEx9IgorUk9PVEZTX1JPX1VOTkVFREVEID8/PSAidXBkYXRlLXJjLmQgYmFzZS1wYXNzd2Qgc2hhZG93ICR7VklSVFVBTC1SVU5USU1FX3VwZGF0ZS1hbHRlcm5hdGl2ZXN9ICR7Uk9PVEZTX0JPT1RTVFJBUF9JTlNUQUxMfSIKIAogIyBwYWNrYWdlcyB0byBpbnN0YWxsIGZyb20gZmVhdHVyZXMKIEZFQVRVUkVfSU5TVEFMTCA9ICIke0AnICcuam9pbihvZS5wYWNrYWdlZ3JvdXAucmVxdWlyZWRfcGFja2FnZXMob2UuZGF0YS50eXBlZF92YWx1ZSgnSU1BR0VfRkVBVFVSRVMnLCBkKSwgZCkpfSIKQEAgLTg1LDcgKzg1LDYgQEAKIFBBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCiAKIExEQ09ORklHREVQRU5EID89ICJsZGNvbmZpZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKLUxEQ09ORklHREVQRU5EX2xpYmMtdWNsaWJjID0gIiIKIExEQ09ORklHREVQRU5EX2xpYmMtbXVzbCA9ICIiCiAKICMgVGhpcyBpcyBuZWVkZWQgdG8gaGF2ZSBkZXBtb2QgZGF0YSBpbiBQS0dEQVRBX0RJUiwKQEAgLTExOCw3ICsxMTcsNyBAQAogICAgICAgICAgICAgICAgICAnSU1BR0VfUk9PVEZTX01BWFNJWkUnLCdJTUFHRV9OQU1FJywnSU1BR0VfTElOS19OQU1FJywnSU1BR0VfTUFOSUZFU1QnLCdERVBMT1lfRElSX0lNQUdFJywnSU1BR0VfRlNUWVBFUycsJ0lNQUdFX0lOU1RBTExfQ09NUExFTUVOVEFSWScsJ0lNQUdFX0xJTkdVQVMnLAogICAgICAgICAgICAgICAgICAnTVVMVElMSUJSRV9BTExPV19SRVAnLCdNVUxUSUxJQl9URU1QX1JPT1RGUycsJ01VTFRJTElCX1ZBUklBTlRTJywnTVVMVElMSUJTJywnQUxMX01VTFRJTElCX1BBQ0tBR0VfQVJDSFMnLCdNVUxUSUxJQl9HTE9CQUxfVkFSSUFOVFMnLCdCQURfUkVDT01NRU5EQVRJT05TJywnTk9fUkVDT01NRU5EQVRJT05TJywKICAgICAgICAgICAgICAgICAgJ1BBQ0tBR0VfQVJDSFMnLCdQQUNLQUdFX0NMQVNTRVMnLCdUQVJHRVRfVkVORE9SJywnVEFSR0VUX0FSQ0gnLCdUQVJHRVRfT1MnLCdPVkVSUklERVMnLCdCQkVYVEVORFZBUklBTlQnLCdGRUVEX0RFUExPWURJUl9CQVNFX1VSSScsJ0lOVEVSQ0VQVF9ESVInLCdVU0VfREVWRlMnLAotICAgICAgICAgICAgICAgICAnQ09OVkVSU0lPTlRZUEVTJywgJ0lNQUdFX0dFTl9ERUJVR0ZTJywgJ1JPT1RGU19ST19VTk5FRURFRCcsICdJTUdERVBMT1lESVInLCAnUEFDS0FHRV9FWENMVURFX0NPTVBMRU1FTlRBUlknXQorICAgICAgICAgICAgICAgICAnQ09OVkVSU0lPTlRZUEVTJywgJ0lNQUdFX0dFTl9ERUJVR0ZTJywgJ1JPT1RGU19ST19VTk5FRURFRCcsICdJTUdERVBMT1lESVInLCAnUEFDS0FHRV9FWENMVURFX0NPTVBMRU1FTlRBUlknLCAnUkVQUk9EVUNJQkxFX1RJTUVTVEFNUF9ST09URlMnXQogICAgIHZhcmlhYmxlcy5leHRlbmQocm9vdGZzX2NvbW1hbmRfdmFyaWFibGVzKGQpKQogICAgIHZhcmlhYmxlcy5leHRlbmQodmFyaWFibGVfZGVwZW5kcyhkKSkKICAgICByZXR1cm4gIiAiLmpvaW4odmFyaWFibGVzKQpAQCAtMTM5LDkgKzEzOCw2IEBACiBJTUFHRV9UWVBFX2xpdmUgPSAiJHtAYnVpbGRfbGl2ZShkKX0iCiBpbmhlcml0ICR7SU1BR0VfVFlQRV9saXZlfQogCi1JTUFHRV9UWVBFX3ZtID0gJyR7QGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiSU1BR0VfRlNUWVBFUyIsIFsidm1kayIsICJ2ZGkiLCAicWNvdzIiLCAiaGRkZGlyZWN0Il0sICJpbWFnZS12bSIsICIiLCBkKX0nCi1pbmhlcml0ICR7SU1BR0VfVFlQRV92bX0KLQogSU1BR0VfVFlQRV9jb250YWluZXIgPSAnJHtAYmIudXRpbHMuY29udGFpbnMoIklNQUdFX0ZTVFlQRVMiLCAiY29udGFpbmVyIiwgImltYWdlLWNvbnRhaW5lciIsICIiLCBkKX0nCiBpbmhlcml0ICR7SU1BR0VfVFlQRV9jb250YWluZXJ9CiAKQEAgLTE0OSwxNCArMTQ1LDE4IEBACiBpbmhlcml0ICR7SU1BR0VfVFlQRV93aWN9CiAKIHB5dGhvbiAoKSB7CisgICAgZGVmIGV4dHJhaW1hZ2VfZ2V0ZGVwZW5kcyh0YXNrKToKKyAgICAgICAgZGVwcyA9ICIiCisgICAgICAgIGZvciBkZXAgaW4gKGQuZ2V0VmFyKCdFWFRSQV9JTUFHRURFUEVORFMnKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGRlcHMgKz0gIiAlczolcyIgJSAoZGVwLCB0YXNrKQorICAgICAgICByZXR1cm4gZGVwcworCisgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19pbWFnZScsICdkZXBlbmRzJywgZXh0cmFpbWFnZV9nZXRkZXBlbmRzKCdkb19wb3B1bGF0ZV9saWMnKSkKKyAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2ltYWdlX2NvbXBsZXRlJywgJ2RlcGVuZHMnLCBleHRyYWltYWdlX2dldGRlcGVuZHMoJ2RvX3BvcHVsYXRlX3N5c3Jvb3QnKSkKKwogICAgIGRlcHMgPSAiICIgKyBpbWFnZXR5cGVzX2dldGRlcGVuZHMoZCkKICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3Jvb3RmcycsICdkZXBlbmRzJywgZGVwcykKIAotICAgIGRlcHMgPSAiIgotICAgIGZvciBkZXAgaW4gKGQuZ2V0VmFyKCdFWFRSQV9JTUFHRURFUEVORFMnKSBvciAiIikuc3BsaXQoKToKLSAgICAgICAgZGVwcyArPSAiICVzOmRvX3BvcHVsYXRlX3N5c3Jvb3QiICUgZGVwCi0gICAgZC5hcHBlbmRWYXJGbGFnKCdkb19pbWFnZV9jb21wbGV0ZScsICdkZXBlbmRzJywgZGVwcykKLQogICAgICNwcm9jZXNzIElNQUdFX0ZFQVRVUkVTLCB3ZSBtdXN0IGRvIHRoaXMgYmVmb3JlIHJ1bnRpbWVfbWFwcGluZ19yZW5hbWUKICAgICAjQ2hlY2sgZm9yIHJlcGxhY2VzIGltYWdlIGZlYXR1cmVzCiAgICAgZmVhdHVyZXMgPSBzZXQob2UuZGF0YS50eXBlZF92YWx1ZSgnSU1BR0VfRkVBVFVSRVMnLCBkKSkKQEAgLTI1NCw2ICsyNTQsNyBAQAogICAgIHByb2dyZXNzX3JlcG9ydGVyLm5leHRfc3RhZ2UoKQogCiAgICAgIyBnZW5lcmF0ZSByb290ZnMKKyAgICBkLnNldFZhckZsYWcoJ1JFUFJPRFVDSUJMRV9USU1FU1RBTVBfUk9PVEZTJywgJ2V4cG9ydCcsICcxJykKICAgICBjcmVhdGVfcm9vdGZzKGQsIHByb2dyZXNzX3JlcG9ydGVyPXByb2dyZXNzX3JlcG9ydGVyLCBsb2djYXRjaGVyPWxvZ2NhdGNoZXIpCiAKICAgICBwcm9ncmVzc19yZXBvcnRlci5maW5pc2goKQpAQCAtMjYxLDE4ICsyNjIsMTkgQEAKIGRvX3Jvb3Rmc1tkaXJzXSA9ICIke1RPUERJUn0iCiBkb19yb290ZnNbY2xlYW5kaXJzXSArPSAiJHtTfSAke0lNR0RFUExPWURJUn0iCiBkb19yb290ZnNbdW1hc2tdID0gIjAyMiIKLWFkZHRhc2sgcm9vdGZzIGJlZm9yZSBkb19idWlsZCBhZnRlciBkb19wcmVwYXJlX3JlY2lwZV9zeXNyb290CithZGR0YXNrIHJvb3RmcyBhZnRlciBkb19wcmVwYXJlX3JlY2lwZV9zeXNyb290CiAKIGZha2Vyb290IHB5dGhvbiBkb19pbWFnZSAoKSB7CiAgICAgZnJvbSBvZS51dGlscyBpbXBvcnQgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzCiAKKyAgICBkLnNldFZhckZsYWcoJ1JFUFJPRFVDSUJMRV9USU1FU1RBTVBfUk9PVEZTJywgJ2V4cG9ydCcsICcxJykKICAgICBwcmVfcHJvY2Vzc19jbWRzID0gZC5nZXRWYXIoIklNQUdFX1BSRVBST0NFU1NfQ09NTUFORCIpCiAKICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3MoZCwgcHJlX3Byb2Nlc3NfY21kcykKIH0KIGRvX2ltYWdlW2RpcnNdID0gIiR7VE9QRElSfSIKIGRvX2ltYWdlW3VtYXNrXSA9ICIwMjIiCi1hZGR0YXNrIGRvX2ltYWdlIGFmdGVyIGRvX3Jvb3RmcyBiZWZvcmUgZG9fYnVpbGQKK2FkZHRhc2sgZG9faW1hZ2UgYWZ0ZXIgZG9fcm9vdGZzCiAKIGZha2Vyb290IHB5dGhvbiBkb19pbWFnZV9jb21wbGV0ZSAoKSB7CiAgICAgZnJvbSBvZS51dGlscyBpbXBvcnQgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzCkBAIC0yODksMTQgKzI5MSwyMSBAQAogZG9faW1hZ2VfY29tcGxldGVbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7REVQTE9ZX0RJUl9JTUFHRX0iCiBkb19pbWFnZV9jb21wbGV0ZVtzdGFtcC1leHRyYS1pbmZvXSA9ICIke01BQ0hJTkV9IgogYWRkdGFzayBkb19pbWFnZV9jb21wbGV0ZSBhZnRlciBkb19pbWFnZSBiZWZvcmUgZG9fYnVpbGQKK3B5dGhvbiBkb19pbWFnZV9jb21wbGV0ZV9zZXRzY2VuZSAoKSB7CisgICAgc3N0YXRlX3NldHNjZW5lKGQpCit9CithZGR0YXNrIGRvX2ltYWdlX2NvbXBsZXRlX3NldHNjZW5lCiAKICMgQWRkIGltYWdlLWxldmVsIFFBL3Nhbml0eSBjaGVja3MgdG8gSU1BR0VfUUFfQ09NTUFORFMKICMKICMgSU1BR0VfUUFfQ09NTUFORFMgKz0gIiBcCiAjICAgICBpbWFnZV9jaGVja19ldmVyeXRoaW5nX29rIFwKICMgIgotIyBUaGlzIHRhc2sgcnVucyBhbGwgZnVuY3Rpb25zIGluIElNQUdFX1FBX0NPTU1BTkRTIGFmdGVyIHRoZSBpbWFnZQorIyBUaGlzIHRhc2sgcnVucyBhbGwgZnVuY3Rpb25zIGluIElNQUdFX1FBX0NPTU1BTkRTIGFmdGVyIHRoZSByb290ZnMKICMgY29uc3RydWN0aW9uIGhhcyBjb21wbGV0ZWQgaW4gb3JkZXIgdG8gdmFsaWRhdGUgdGhlIHJlc3VsdGluZyBpbWFnZS4KKyMKKyMgVGhlIGZ1bmN0aW9ucyBzaG91bGQgdXNlICR7SU1BR0VfUk9PVEZTfSB0byBmaW5kIHRoZSB1bnBhY2tlZCByb290ZnMKKyMgZGlyZWN0b3J5LCB3aGljaCBpZiBRQSBwYXNzZXMgd2lsbCBiZSB0aGUgYmFzaXMgZm9yIHRoZSBpbWFnZXMuCiBmYWtlcm9vdCBweXRob24gZG9faW1hZ2VfcWEgKCkgewogICAgIGZyb20gb2UudXRpbHMgaW1wb3J0IEltYWdlUUFGYWlsZWQKIApAQCAtMzE4LDcgKzMyNywxNiBAQAogICAgICAgICBpbWduYW1lID0gZC5nZXRWYXIoJ0lNQUdFX05BTUUnKQogICAgICAgICBiYi5mYXRhbCgiUUEgZXJyb3JzIGZvdW5kIHdoaWxzdCB2YWxpZGF0aW5nIGltYWdlOiAlc1xuJXMiICUgKGltZ25hbWUsIHFhbXNnKSkKIH0KLWFkZHRhc2sgZG9faW1hZ2VfcWEgYWZ0ZXIgZG9faW1hZ2VfY29tcGxldGUgYmVmb3JlIGRvX2J1aWxkCithZGR0YXNrIGRvX2ltYWdlX3FhIGFmdGVyIGRvX3Jvb3RmcyBiZWZvcmUgZG9faW1hZ2UKKworU1NUQVRFVEFTS1MgKz0gImRvX2ltYWdlX3FhIgorU1NUQVRFX1NLSVBfQ1JFQVRJT05fdGFzay1pbWFnZS1xYSA9ICcxJworZG9faW1hZ2VfcWFbc3N0YXRlLWlucHV0ZGlyc10gPSAiIgorZG9faW1hZ2VfcWFbc3N0YXRlLW91dHB1dGRpcnNdID0gIiIKK3B5dGhvbiBkb19pbWFnZV9xYV9zZXRzY2VuZSAoKSB7CisgICAgc3N0YXRlX3NldHNjZW5lKGQpCit9CithZGR0YXNrIGRvX2ltYWdlX3FhX3NldHNjZW5lCiAKIGRlZiBzZXR1cF9kZWJ1Z2ZzX3ZhcmlhYmxlcyhkKToKICAgICBkLmFwcGVuZFZhcignSU1BR0VfUk9PVEZTJywgJy1kYmcnKQpAQCAtNDI2LDcgKzQ0NCwxMSBAQAogICAgICAgICAjIEV4cGFuZCBQViBlbHNlIGl0IGNhbiB0cmlnZ2VyIGdldF9zcmNyZXYgd2hpY2ggY2FuIGZhaWwgZHVlIHRvIHRoZXNlIHZhcmlhYmxlcyBiZWluZyB1bnNldAogICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdQVicsIGQuZ2V0VmFyKCdQVicpKQogICAgICAgICBsb2NhbGRhdGEuZGVsVmFyKCdEQVRFVElNRScpCisgICAgICAgIGxvY2FsZGF0YS5kZWxWYXIoJ0RBVEUnKQogICAgICAgICBsb2NhbGRhdGEuZGVsVmFyKCdUTVBESVInKQorICAgICAgICB2YXJkZXBzZXhjbHVkZSA9IChkLmdldFZhckZsYWcoJ0lNQUdFX0NNRF8nICsgcmVhbHQsICd2YXJkZXBzZXhjbHVkZScsIFRydWUpIG9yICcnKS5zcGxpdCgpCisgICAgICAgIGZvciBkZXAgaW4gdmFyZGVwc2V4Y2x1ZGU6CisgICAgICAgICAgICBsb2NhbGRhdGEuZGVsVmFyKGRlcCkKIAogICAgICAgICBpbWFnZV9jbWQgPSBsb2NhbGRhdGEuZ2V0VmFyKCJJTUFHRV9DTUQiKQogICAgICAgICB2YXJkZXBzLmFkZCgnSU1BR0VfQ01EXycgKyByZWFsdCkKQEAgLTQ4MCwxOSArNTAyLDIwIEBACiAgICAgICAgIGZvciBkZXAgaW4gdHlwZWRlcHNbdF06CiAgICAgICAgICAgICBhZnRlciArPSAnIGRvX2ltYWdlXyVzJyAlIGRlcC5yZXBsYWNlKCItIiwgIl8iKS5yZXBsYWNlKCIuIiwgIl8iKQogCi0gICAgICAgIHQgPSB0LnJlcGxhY2UoIi0iLCAiXyIpLnJlcGxhY2UoIi4iLCAiXyIpCisgICAgICAgIHRhc2sgPSAiZG9faW1hZ2VfJXMiICUgdC5yZXBsYWNlKCItIiwgIl8iKS5yZXBsYWNlKCIuIiwgIl8iKQogCi0gICAgICAgIGQuc2V0VmFyKCdkb19pbWFnZV8lcycgJSB0LCAnXG4nLmpvaW4oY21kcykpCi0gICAgICAgIGQuc2V0VmFyRmxhZygnZG9faW1hZ2VfJXMnICUgdCwgJ2Z1bmMnLCAnMScpCi0gICAgICAgIGQuc2V0VmFyRmxhZygnZG9faW1hZ2VfJXMnICUgdCwgJ2Zha2Vyb290JywgJzEnKQotICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2ltYWdlXyVzJyAlIHQsICdwcmVmdW5jcycsIGRlYnVnICsgJ3NldF9pbWFnZV9zaXplJykKLSAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19pbWFnZV8lcycgJSB0LCAncG9zdGZ1bmNzJywgJ2NyZWF0ZV9zeW1saW5rcycpCi0gICAgICAgIGQuc2V0VmFyRmxhZygnZG9faW1hZ2VfJXMnICUgdCwgJ3N1YmltYWdlcycsICcgJy5qb2luKHN1YmltYWdlcykpCi0gICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9faW1hZ2VfJXMnICUgdCwgJ3ZhcmRlcHMnLCAnICcuam9pbih2YXJkZXBzKSkKLSAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19pbWFnZV8lcycgJSB0LCAndmFyZGVwc2V4Y2x1ZGUnLCAnREFURVRJTUUnKQorICAgICAgICBkLnNldFZhcih0YXNrLCAnXG4nLmpvaW4oY21kcykpCisgICAgICAgIGQuc2V0VmFyRmxhZyh0YXNrLCAnZnVuYycsICcxJykKKyAgICAgICAgZC5zZXRWYXJGbGFnKHRhc2ssICdmYWtlcm9vdCcsICcxJykKIAotICAgICAgICBiYi5kZWJ1ZygyLCAiQWRkaW5nIHR5cGUgJXMgYmVmb3JlICVzLCBhZnRlciAlcyIgJSAodCwgJ2RvX2ltYWdlX2NvbXBsZXRlJywgYWZ0ZXIpKQotICAgICAgICBiYi5idWlsZC5hZGR0YXNrKCdkb19pbWFnZV8lcycgJSB0LCAnZG9faW1hZ2VfY29tcGxldGUnLCBhZnRlciwgZCkKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKHRhc2ssICdwcmVmdW5jcycsICcgJyArIGRlYnVnICsgJyBzZXRfaW1hZ2Vfc2l6ZScpCisgICAgICAgIGQucHJlcGVuZFZhckZsYWcodGFzaywgJ3Bvc3RmdW5jcycsICcgY3JlYXRlX3N5bWxpbmtzJykKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKHRhc2ssICdzdWJpbWFnZXMnLCAnICcgKyAnICcuam9pbihzdWJpbWFnZXMpKQorICAgICAgICBkLmFwcGVuZFZhckZsYWcodGFzaywgJ3ZhcmRlcHMnLCAnICcgKyAnICcuam9pbih2YXJkZXBzKSkKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKHRhc2ssICd2YXJkZXBzZXhjbHVkZScsICdEQVRFVElNRSBEQVRFICcgKyAnICcuam9pbih2YXJkZXBzZXhjbHVkZSkpCisKKyAgICAgICAgYmIuZGVidWcoMiwgIkFkZGluZyB0YXNrICVzIGJlZm9yZSAlcywgYWZ0ZXIgJXMiICUgKHRhc2ssICdkb19pbWFnZV9jb21wbGV0ZScsIGFmdGVyKSkKKyAgICAgICAgYmIuYnVpbGQuYWRkdGFzayh0YXNrLCAnZG9faW1hZ2VfY29tcGxldGUnLCBhZnRlciwgZCkKIH0KIAogIwpAQCAtNTk4LDMgKzYyMSw0NiBAQAogZG9fcGFja2FnZV93cml0ZV9kZWJbbm9leGVjXSA9ICIxIgogZG9fcGFja2FnZV93cml0ZV9ycG1bbm9leGVjXSA9ICIxIgogCisjIFByZXBhcmUgdGhlIHJvb3QgbGlua3MgdG8gcG9pbnQgdG8gdGhlIC91c3IgY291bnRlcnBhcnRzLgorY3JlYXRlX21lcmdlZF91c3Jfc3ltbGlua3MoKSB7CisgICAgcm9vdD0iJDEiCisgICAgaW5zdGFsbCAtZCAkcm9vdCR7YmFzZV9iaW5kaXJ9ICRyb290JHtiYXNlX3NiaW5kaXJ9ICRyb290JHtiYXNlX2xpYmRpcn0KKyAgICBsbnIgJHJvb3Qke2Jhc2VfYmluZGlyfSAkcm9vdC9iaW4KKyAgICBsbnIgJHJvb3Qke2Jhc2Vfc2JpbmRpcn0gJHJvb3Qvc2JpbgorICAgIGxuciAkcm9vdCR7YmFzZV9saWJkaXJ9ICRyb290LyR7YmFzZWxpYn0KKworICAgIGlmIFsgIiR7bm9uYXJjaF9iYXNlX2xpYmRpcn0iICE9ICIke2Jhc2VfbGliZGlyfSIgXTsgdGhlbgorICAgICAgIGluc3RhbGwgLWQgJHJvb3Qke25vbmFyY2hfYmFzZV9saWJkaXJ9CisgICAgICAgbG5yICRyb290JHtub25hcmNoX2Jhc2VfbGliZGlyfSAkcm9vdC9saWIKKyAgICBmaQorCisgICAgIyBjcmVhdGUgYmFzZSBsaW5rcyBmb3IgbXVsdGlsaWJzCisgICAgbXVsdGlfbGliZGlycz0iJHtAZC5nZXRWYXIoJ01VTFRJTElCX1ZBUklBTlRTJyl9IgorICAgIGZvciBkIGluICRtdWx0aV9saWJkaXJzOyBkbworICAgICAgICBpbnN0YWxsIC1kICRyb290JHtleGVjX3ByZWZpeH0vJGQKKyAgICAgICAgbG5yICRyb290JHtleGVjX3ByZWZpeH0vJGQgJHJvb3QvJGQKKyAgICBkb25lCit9CisKK2NyZWF0ZV9tZXJnZWRfdXNyX3N5bWxpbmtzX3Jvb3RmcygpIHsKKyAgICBjcmVhdGVfbWVyZ2VkX3Vzcl9zeW1saW5rcyAke0lNQUdFX1JPT1RGU30KK30KKworY3JlYXRlX21lcmdlZF91c3Jfc3ltbGlua3Nfc2RrKCkgeworICAgIGNyZWF0ZV9tZXJnZWRfdXNyX3N5bWxpbmtzICR7U0RLX09VVFBVVH0ke1NES1RBUkdFVFNZU1JPT1R9Cit9CisKK1JPT1RGU19QUkVQUk9DRVNTX0NPTU1BTkQgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAndXNybWVyZ2UnLCAnY3JlYXRlX21lcmdlZF91c3Jfc3ltbGlua3Nfcm9vdGZzOyAnLCAnJyxkKX0iCitQT1BVTEFURV9TREtfUFJFX1RBUkdFVF9DT01NQU5EICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3Vzcm1lcmdlJywgJ2NyZWF0ZV9tZXJnZWRfdXNyX3N5bWxpbmtzX3NkazsgJywgJycsZCl9IgorCityZXByb2R1Y2libGVfZmluYWxfaW1hZ2VfdGFzayAoKSB7CisgICAgaWYgWyAiJEJVSUxEX1JFUFJPRFVDSUJMRV9CSU5BUklFUyIgPSAiMSIgXTsgdGhlbgorICAgICAgICBpZiBbICIkUkVQUk9EVUNJQkxFX1RJTUVTVEFNUF9ST09URlMiID0gIiIgXTsgdGhlbgorICAgICAgICAgICAgUkVQUk9EVUNJQkxFX1RJTUVTVEFNUF9ST09URlM9YGdpdCBsb2cgLTEgLS1wcmV0dHk9JWN0YAorICAgICAgICBmaQorICAgICAgICAjIFNldCBtdGltZSBvZiBhbGwgZmlsZXMgdG8gYSByZXByb2R1Y2libGUgdmFsdWUKKyAgICAgICAgYmJub3RlICJyZXByb2R1Y2libGVfZmluYWxfaW1hZ2VfdGFzazogbXRpbWUgc2V0IHRvICRSRVBST0RVQ0lCTEVfVElNRVNUQU1QX1JPT1RGUyIKKyAgICAgICAgZmluZCAgJHtJTUFHRV9ST09URlN9IC1leGVjIHRvdWNoIC1oICAtLWRhdGU9QCRSRVBST0RVQ0lCTEVfVElNRVNUQU1QX1JPT1RGUyB7fSBcOworICAgIGZpCit9CitJTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkRfYXBwZW5kID0gIiByZXByb2R1Y2libGVfZmluYWxfaW1hZ2VfdGFzazsgIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZV90eXBlcy5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZV90eXBlcy5iYmNsYXNzCmluZGV4IDhkYjE4YWMuLmU4ODFkMGMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2VfdHlwZXMuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlX3R5cGVzLmJiY2xhc3MKQEAgLTI2LDIwICsyNiwzMSBAQAogICAgIGZzdHlwZXMgPSBzZXQoKGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJykgb3IgIiIpLnNwbGl0KCkpCiAgICAgZnN0eXBlcyB8PSBzZXQoKGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTX0RFQlVHRlMnKSBvciAiIikuc3BsaXQoKSkKIAorICAgIGRlcHJlY2F0ZWQgPSBzZXQoKQogICAgIGRlcHMgPSBzZXQoKQogICAgIGZvciB0eXBlc3RyaW5nIGluIGZzdHlwZXM6CiAgICAgICAgIGJhc2V0eXBlLCByZXN0dHlwZXMgPSBzcGxpdF90eXBlcyh0eXBlc3RyaW5nKQotICAgICAgICBhZGRkZXAoZC5nZXRWYXIoJ0lNQUdFX0RFUEVORFNfJXMnICUgYmFzZXR5cGUpICwgZGVwcykKKworICAgICAgICB2YXIgPSAiSU1BR0VfREVQRU5EU18lcyIgJSBiYXNldHlwZQorICAgICAgICBpZiBkLmdldFZhcih2YXIpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZGVwcmVjYXRlZC5hZGQodmFyKQogCiAgICAgICAgIGZvciB0eXBlZGVwZW5kcyBpbiAoZC5nZXRWYXIoIklNQUdFX1RZUEVERVBfJXMiICUgYmFzZXR5cGUpIG9yICIiKS5zcGxpdCgpOgogICAgICAgICAgICAgYmFzZSwgcmVzdCA9IHNwbGl0X3R5cGVzKHR5cGVkZXBlbmRzKQotICAgICAgICAgICAgYWRkZGVwKGQuZ2V0VmFyKCdJTUFHRV9ERVBFTkRTXyVzJyAlIGJhc2UpICwgZGVwcykKICAgICAgICAgICAgIHJlc3R0eXBlcyArPSByZXN0CiAKKyAgICAgICAgICAgIHZhciA9ICJJTUFHRV9ERVBFTkRTXyVzIiAlIGJhc2UKKyAgICAgICAgICAgIGlmIGQuZ2V0VmFyKHZhcikgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgZGVwcmVjYXRlZC5hZGQodmFyKQorCiAgICAgICAgIGZvciBjdHlwZSBpbiByZXN0dHlwZXM6CiAgICAgICAgICAgICBhZGRkZXAoZC5nZXRWYXIoIkNPTlZFUlNJT05fREVQRU5EU18lcyIgJSBjdHlwZSksIGRlcHMpCiAgICAgICAgICAgICBhZGRkZXAoZC5nZXRWYXIoIkNPTVBSRVNTX0RFUEVORFNfJXMiICUgY3R5cGUpLCBkZXBzKQogCisgICAgaWYgZGVwcmVjYXRlZDoKKyAgICAgICAgYmIuZmF0YWwoJ0RlcHJlY2F0ZWQgdmFyaWFibGUocykgZm91bmQ6ICIlcyIuICcKKyAgICAgICAgICAgICAgICAgJ1VzZSBkb19pbWFnZV88dHlwZT5bZGVwZW5kc10gKz0gIjxyZWNpcGU+Ojx0YXNrPiIgaW5zdGVhZCcgJSAnLCAnLmpvaW4oZGVwcmVjYXRlZCkpCisKICAgICAjIFNvcnQgdGhlIHNldCBzbyB0aGF0IG9yZGVyaW5nIGlzIGNvbnNpc3RhbnQKICAgICByZXR1cm4gIiAiLmpvaW4oc29ydGVkKGRlcHMpKQogCkBAIC03Miw3ICs4MywxMSBAQAogCQlldmFsIENPVU5UPVwiJE1JTl9DT1VOVFwiCiAJZmkKIAkjIENyZWF0ZSBhIHNwYXJzZSBpbWFnZSBibG9jaworCWJiZGVidWcgMSBFeGVjdXRpbmcgImRkIGlmPS9kZXYvemVybyBvZj0ke0lNR0RFUExPWURJUn0vJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiRmc3R5cGUgc2Vlaz0kUk9PVEZTX1NJWkUgY291bnQ9JENPVU5UIGJzPTEwMjQiCiAJZGQgaWY9L2Rldi96ZXJvIG9mPSR7SU1HREVQTE9ZRElSfS8ke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uJGZzdHlwZSBzZWVrPSRST09URlNfU0laRSBjb3VudD0kQ09VTlQgYnM9MTAyNAorCWJiZGVidWcgMSAiQWN0dWFsIFJvb3RmcyBzaXplOiAgYGR1IC1zICR7SU1BR0VfUk9PVEZTfWAiCisJYmJkZWJ1ZyAxICJBY3R1YWwgUGFydGlvbiBzaXplOiBgbHMgLXMgJHtJTUdERVBMT1lESVJ9LyR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4kZnN0eXBlYCIKKwliYmRlYnVnIDEgRXhlY3V0aW5nICJta2ZzLiRmc3R5cGUgLUYgJGV4dHJhX2ltYWdlY21kICR7SU1HREVQTE9ZRElSfS8ke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uJGZzdHlwZSAtZCAke0lNQUdFX1JPT1RGU30iCiAJbWtmcy4kZnN0eXBlIC1GICRleHRyYV9pbWFnZWNtZCAke0lNR0RFUExPWURJUn0vJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiRmc3R5cGUgLWQgJHtJTUFHRV9ST09URlN9CiAJIyBFcnJvciBjb2RlcyAwLTMgaW5kaWNhdGUgc3VjY2Vzc2Z1bGwgb3BlcmF0aW9uIG9mIGZzY2sgKG5vIGVycm9ycyBvciBlcnJvcnMgY29ycmVjdGVkKQogCWZzY2suJGZzdHlwZSAtcHZmRCAke0lNR0RFUExPWURJUn0vJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiRmc3R5cGUgfHwgWyAkPyAtbGUgMyBdCkBAIC04OSwyNiArMTA0LDI4IEBACiAJCXNpemU9JHtNSU5fQlRSRlNfU0laRX0KIAkJYmJ3YXJuICJSb290ZnMgc2l6ZSBpcyB0b28gc21hbGwgZm9yIEJUUkZTLiBGaWxlc3lzdGVtIHdpbGwgYmUgZXh0ZW5kZWQgdG8gJHtzaXplfUsiCiAJZmkKLQlkZCBpZj0vZGV2L3plcm8gb2Y9JHtJTUdERVBMT1lESVJ9LyR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS5idHJmcyBjb3VudD0ke3NpemV9IGJzPTEwMjQKKwlkZCBpZj0vZGV2L3plcm8gb2Y9JHtJTUdERVBMT1lESVJ9LyR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS5idHJmcyBzZWVrPSR7c2l6ZX0gY291bnQ9MCBicz0xMDI0CiAJbWtmcy5idHJmcyAke0VYVFJBX0lNQUdFQ01EfSAtciAke0lNQUdFX1JPT1RGU30gJHtJTUdERVBMT1lESVJ9LyR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS5idHJmcwogfQogCiBJTUFHRV9DTURfc3F1YXNoZnMgPSAibWtzcXVhc2hmcyAke0lNQUdFX1JPT1RGU30gJHtJTUdERVBMT1lESVJ9LyR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS5zcXVhc2hmcyAke0VYVFJBX0lNQUdFQ01EfSAtbm9hcHBlbmQiCiBJTUFHRV9DTURfc3F1YXNoZnMteHogPSAibWtzcXVhc2hmcyAke0lNQUdFX1JPT1RGU30gJHtJTUdERVBMT1lESVJ9LyR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS5zcXVhc2hmcy14eiAke0VYVFJBX0lNQUdFQ01EfSAtbm9hcHBlbmQgLWNvbXAgeHoiCiBJTUFHRV9DTURfc3F1YXNoZnMtbHpvID0gIm1rc3F1YXNoZnMgJHtJTUFHRV9ST09URlN9ICR7SU1HREVQTE9ZRElSfS8ke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uc3F1YXNoZnMtbHpvICR7RVhUUkFfSU1BR0VDTUR9IC1ub2FwcGVuZCAtY29tcCBsem8iCitJTUFHRV9DTURfc3F1YXNoZnMtbHo0ID0gIm1rc3F1YXNoZnMgJHtJTUFHRV9ST09URlN9ICR7SU1HREVQTE9ZRElSfS8ke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uc3F1YXNoZnMtbHo0ICR7RVhUUkFfSU1BR0VDTUR9IC1ub2FwcGVuZCAtY29tcCBsejQiCiAKICMgQnkgZGVmYXVsdCwgdGFyIGZyb20gdGhlIGhvc3QgaXMgdXNlZCwgd2hpY2ggY2FuIGJlIHF1aXRlIG9sZC4gSWYKICMgeW91IG5lZWQgc3BlY2lhbCBwYXJhbWV0ZXJzIChsaWtlIC0teGF0dHJzKSB3aGljaCBhcmUgb25seSBzdXBwb3J0ZWQKICMgYnkgR05VIHRhciB1cHN0cmVhbSA+PSAxLjI3LCB0aGVuIG92ZXJyaWRlIHRoYXQgZGVmYXVsdDoKICMgSU1BR0VfQ01EX1RBUiA9ICJ0YXIgLS14YXR0cnMgLS14YXR0cnMtaW5jbHVkZT0qIgotIyBJTUFHRV9ERVBFTkRTX3Rhcl9hcHBlbmQgPSAiIHRhci1yZXBsYWNlbWVudC1uYXRpdmUiCisjIGRvX2ltYWdlX3RhcltkZXBlbmRzXSArPSAidGFyLXJlcGxhY2VtZW50LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgogIyBFWFRSQU5BVElWRVBBVEggKz0gInRhci1uYXRpdmUiCiAjCiAjIFRoZSBHTlUgZG9jdW1lbnRhdGlvbiBkb2VzIG5vdCBzcGVjaWZ5IHdoZXRoZXIgLS14YXR0cnMtaW5jbHVkZSBpcyBuZWNlc3NhcnkuCiAjIEluIHByYWN0aWNlLCBpdCB0dXJuZWQgb3V0IHRvIGJlIG5vdCBuZWVkZWQgd2hlbiBjcmVhdGluZyBhcmNoaXZlcyBhbmQKICMgcmVxdWlyZWQgd2hlbiBleHRyYWN0aW5nLCBidXQgaXQgc2VlbXMgcHJ1ZGVudCB0byB1c2UgaXQgaW4gYm90aCBjYXNlcy4KIElNQUdFX0NNRF9UQVIgPz0gInRhciIKLUlNQUdFX0NNRF90YXIgPSAiJHtJTUFHRV9DTURfVEFSfSAtY3ZmICR7SU1HREVQTE9ZRElSfS8ke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0udGFyIC1DICR7SU1BR0VfUk9PVEZTfSAuIgorIyBpZ25vcmUgcmV0dXJuIGNvZGUgMSAiZmlsZSBjaGFuZ2VkIGFzIHdlIHJlYWQgaXQiIGFzIG90aGVyIHRhc2tzKGUuZy4gZG9faW1hZ2Vfd2ljKSBtYXkgYmUgaGFyZGxpbmtpbmcgcm9vdGZzCitJTUFHRV9DTURfdGFyID0gIiR7SU1BR0VfQ01EX1RBUn0gLWNmICR7SU1HREVQTE9ZRElSfS8ke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0udGFyIC1DICR7SU1BR0VfUk9PVEZTfSAuIHx8IFsgJD8gLWVxIDEgXSIKIAogZG9faW1hZ2VfY3Bpb1tjbGVhbmRpcnNdICs9ICIke1dPUktESVJ9L2NwaW9fYXBwZW5kIgogSU1BR0VfQ01EX2NwaW8gKCkgewpAQCAtMTM1LDcgKzE1Miw3IEBACiAKIElNQUdFX0NNRF9lbGYgKCkgewogCXRlc3QgLWYgJHtJTUdERVBMT1lESVJ9LyR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS5lbGYgJiYgcm0gLWYgJHtJTUdERVBMT1lESVJ9LyR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS5lbGYKLQlta2VsZkltYWdlIC0ta2VybmVsPSR7RUxGX0tFUk5FTH0gLS1pbml0cmQ9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX0xJTktfTkFNRX0uY3Bpby5neiAtLW91dHB1dD0ke0lNR0RFUExPWURJUn0vJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LmVsZiAtLWFwcGVuZD0nJHtFTEZfQVBQRU5EfScgJHtFWFRSQV9JTUFHRUNNRH0KKwlta2VsZkltYWdlIC0ta2VybmVsPSR7RUxGX0tFUk5FTH0gLS1pbml0cmQ9JHtJTUdERVBMT1lESVJ9LyR7SU1BR0VfTElOS19OQU1FfS5jcGlvLmd6IC0tb3V0cHV0PSR7SU1HREVQTE9ZRElSfS8ke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uZWxmIC0tYXBwZW5kPScke0VMRl9BUFBFTkR9JyAke0VYVFJBX0lNQUdFQ01EfQogfQogCiBJTUFHRV9UWVBFREVQX2VsZiA9ICJjcGlvLmd6IgpAQCAtMTQ1LDYgKzE2MiwxMiBAQAogbXVsdGl1YmlfbWtmcygpIHsKIAlsb2NhbCBta3ViaWZzX2FyZ3M9IiQxIgogCWxvY2FsIHViaW5pemVfYXJncz0iJDIiCisgICAgCisgICAgICAgICMgQWRkZWQgcHJvbXB0IGVycm9yIG1lc3NhZ2UgZm9yIHViaSBhbmQgdWJpZnMgaW1hZ2UgY3JlYXRpb24uCisgICAgICAgIGlmIFsgLXogIiRta3ViaWZzX2FyZ3MiXSB8fCBbIC16ICIkdWJpbml6ZV9hcmdzIiBdOyB0aGVuCisgICAgICAgICAgICBiYmZhdGFsICJNS1VCSUZTX0FSR1MgYW5kIFVCSU5JWkVfQVJHUyBoYXZlIHRvIGJlIHNldCwgc2VlIGh0dHA6Ly93d3cubGludXgtbXRkLmluZnJhZGVhZC5vcmcvZmFxL3ViaWZzLmh0bWwgZm9yIGRldGFpbHMiCisgICAgICAgIGZpCisgICAgCiAJaWYgWyAteiAiJDMiIF07IHRoZW4KIAkJbG9jYWwgdm5hbWU9IiIKIAllbHNlCkBAIC0yMDksMjEgKzIzMiwyMCBAQAogRVhUUkFfSU1BR0VDTURfYnRyZnMgPz0gIi1uIDQwOTYiCiBFWFRSQV9JTUFHRUNNRF9lbGYgPz0gIiIKIAotSU1BR0VfREVQRU5EUyA9ICIiCi1JTUFHRV9ERVBFTkRTX2pmZnMyID0gIm10ZC11dGlscy1uYXRpdmUiCi1JTUFHRV9ERVBFTkRTX2NyYW1mcyA9ICJ1dGlsLWxpbnV4LW5hdGl2ZSIKLUlNQUdFX0RFUEVORFNfZXh0MiA9ICJlMmZzcHJvZ3MtbmF0aXZlIgotSU1BR0VfREVQRU5EU19leHQzID0gImUyZnNwcm9ncy1uYXRpdmUiCi1JTUFHRV9ERVBFTkRTX2V4dDQgPSAiZTJmc3Byb2dzLW5hdGl2ZSIKLUlNQUdFX0RFUEVORFNfYnRyZnMgPSAiYnRyZnMtdG9vbHMtbmF0aXZlIgotSU1BR0VfREVQRU5EU19zcXVhc2hmcyA9ICJzcXVhc2hmcy10b29scy1uYXRpdmUiCi1JTUFHRV9ERVBFTkRTX3NxdWFzaGZzLXh6ID0gInNxdWFzaGZzLXRvb2xzLW5hdGl2ZSIKLUlNQUdFX0RFUEVORFNfc3F1YXNoZnMtbHpvID0gInNxdWFzaGZzLXRvb2xzLW5hdGl2ZSIKLUlNQUdFX0RFUEVORFNfZWxmID0gInZpcnR1YWwva2VybmVsIG1rZWxmaW1hZ2UtbmF0aXZlIgotSU1BR0VfREVQRU5EU191YmkgPSAibXRkLXV0aWxzLW5hdGl2ZSIKLUlNQUdFX0RFUEVORFNfdWJpZnMgPSAibXRkLXV0aWxzLW5hdGl2ZSIKLUlNQUdFX0RFUEVORFNfbXVsdGl1YmkgPSAibXRkLXV0aWxzLW5hdGl2ZSIKLUlNQUdFX0RFUEVORFNfd2ljID0gInBhcnRlZC1uYXRpdmUiCitkb19pbWFnZV9qZmZzMltkZXBlbmRzXSArPSAibXRkLXV0aWxzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9faW1hZ2VfY3JhbWZzW2RlcGVuZHNdICs9ICJ1dGlsLWxpbnV4LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9faW1hZ2VfZXh0MltkZXBlbmRzXSArPSAiZTJmc3Byb2dzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9faW1hZ2VfZXh0M1tkZXBlbmRzXSArPSAiZTJmc3Byb2dzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9faW1hZ2VfZXh0NFtkZXBlbmRzXSArPSAiZTJmc3Byb2dzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9faW1hZ2VfYnRyZnNbZGVwZW5kc10gKz0gImJ0cmZzLXRvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9faW1hZ2Vfc3F1YXNoZnNbZGVwZW5kc10gKz0gInNxdWFzaGZzLXRvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9faW1hZ2Vfc3F1YXNoZnNfeHpbZGVwZW5kc10gKz0gInNxdWFzaGZzLXRvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9faW1hZ2Vfc3F1YXNoZnNfbHpvW2RlcGVuZHNdICs9ICJzcXVhc2hmcy10b29scy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK2RvX2ltYWdlX3NxdWFzaGZzX2x6NFtkZXBlbmRzXSArPSAic3F1YXNoZnMtdG9vbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCitkb19pbWFnZV9lbGZbZGVwZW5kc10gKz0gInZpcnR1YWwva2VybmVsOmRvX3BvcHVsYXRlX3N5c3Jvb3QgbWtlbGZpbWFnZS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK2RvX2ltYWdlX3ViaVtkZXBlbmRzXSArPSAibXRkLXV0aWxzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9faW1hZ2VfdWJpZnNbZGVwZW5kc10gKz0gIm10ZC11dGlscy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK2RvX2ltYWdlX211bHRpdWJpW2RlcGVuZHNdICs9ICJtdGQtdXRpbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCiAKICMgVGhpcyB2YXJpYWJsZSBpcyBhdmFpbGFibGUgdG8gcmVxdWVzdCB3aGljaCB2YWx1ZXMgYXJlIHN1aXRhYmxlIGZvciBJTUFHRV9GU1RZUEVTCiBJTUFHRV9UWVBFUyA9ICIgXApAQCAtMjM1LDE0ICsyNTcsMTAgQEAKICAgICBidHJmcyBcCiAgICAgaXNvIFwKICAgICBoZGRpbWcgXAotICAgIHNxdWFzaGZzIHNxdWFzaGZzLXh6IHNxdWFzaGZzLWx6byBcCisgICAgc3F1YXNoZnMgc3F1YXNoZnMteHogc3F1YXNoZnMtbHpvIHNxdWFzaGZzLWx6NCBcCiAgICAgdWJpIHViaWZzIG11bHRpdWJpIFwKICAgICB0YXIgdGFyLmd6IHRhci5iejIgdGFyLnh6IHRhci5sejQgXAogICAgIGNwaW8gY3Bpby5neiBjcGlvLnh6IGNwaW8ubHptYSBjcGlvLmx6NCBcCi0gICAgdm1kayBcCi0gICAgdmRpIFwKLSAgICBxY293MiBcCi0gICAgaGRkZGlyZWN0IFwKICAgICBlbGYgXAogICAgIHdpYyB3aWMuZ3ogd2ljLmJ6MiB3aWMubHptYSBcCiAgICAgY29udGFpbmVyIFwKQEAgLTI1NCw5ICsyNzIsOSBAQAogIyBDT05WRVJTSU9OX0NNRC9ERVBFTkRTLgogQ09NUFJFU1NJT05UWVBFUyA/PSAiIgogCi1DT05WRVJTSU9OVFlQRVMgPSAiZ3ogYnoyIGx6bWEgeHogbHo0IGx6byB6aXAgc3VtIG1kNXN1bSBzaGExc3VtIHNoYTIyNHN1bSBzaGEyNTZzdW0gc2hhMzg0c3VtIHNoYTUxMnN1bSBibWFwIHUtYm9vdCAke0NPTVBSRVNTSU9OVFlQRVN9IgorQ09OVkVSU0lPTlRZUEVTID0gImd6IGJ6MiBsem1hIHh6IGx6NCBsem8gemlwIHN1bSBtZDVzdW0gc2hhMXN1bSBzaGEyMjRzdW0gc2hhMjU2c3VtIHNoYTM4NHN1bSBzaGE1MTJzdW0gYm1hcCB1LWJvb3Qgdm1kayB2ZGkgcWNvdzIgJHtDT01QUkVTU0lPTlRZUEVTfSIKIENPTlZFUlNJT05fQ01EX2x6bWEgPSAibHptYSAtayAtZiAtNyAke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uJHt0eXBlfSIKLUNPTlZFUlNJT05fQ01EX2d6ID0gImd6aXAgLWYgLTkgLWMgJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiR7dHlwZX0gPiAke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uJHt0eXBlfS5neiIKK0NPTlZFUlNJT05fQ01EX2d6ID0gImd6aXAgLWYgLTkgLW4gLWMgJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiR7dHlwZX0gPiAke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uJHt0eXBlfS5neiIKIENPTlZFUlNJT05fQ01EX2J6MiA9ICJwYnppcDIgLWYgLWsgJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiR7dHlwZX0iCiBDT05WRVJTSU9OX0NNRF94eiA9ICJ4eiAtZiAtayAtYyAke1haX0NPTVBSRVNTSU9OX0xFVkVMfSAke1haX1RIUkVBRFN9IC0tY2hlY2s9JHtYWl9JTlRFR1JJVFlfQ0hFQ0t9ICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9ID4gJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiR7dHlwZX0ueHoiCiBDT05WRVJTSU9OX0NNRF9sejQgPSAibHo0IC05IC16ICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9ICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9Lmx6NCIKQEAgLTI3Miw2ICsyOTAsOSBAQAogQ09OVkVSU0lPTl9DTURfc2hhNTEyc3VtID0gInNoYTUxMnN1bSAke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uJHt0eXBlfSA+ICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9LnNoYTUxMnN1bSIKIENPTlZFUlNJT05fQ01EX2JtYXAgPSAiYm1hcHRvb2wgY3JlYXRlICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9IC1vICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9LmJtYXAiCiBDT05WRVJTSU9OX0NNRF91LWJvb3QgPSAibWtpbWFnZSAtQSAke1VCT09UX0FSQ0h9IC1PIGxpbnV4IC1UIHJhbWRpc2sgLUMgbm9uZSAtbiAke0lNQUdFX05BTUV9IC1kICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9ICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9LnUtYm9vdCIKK0NPTlZFUlNJT05fQ01EX3ZtZGsgPSAicWVtdS1pbWcgY29udmVydCAtTyB2bWRrICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9ICR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS4ke3R5cGV9LnZtZGsiCitDT05WRVJTSU9OX0NNRF92ZGkgPSAicWVtdS1pbWcgY29udmVydCAtTyB2ZGkgJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiR7dHlwZX0gJHtJTUFHRV9OQU1FfSR7SU1BR0VfTkFNRV9TVUZGSVh9LiR7dHlwZX0udmRpIgorQ09OVkVSU0lPTl9DTURfcWNvdzIgPSAicWVtdS1pbWcgY29udmVydCAtTyBxY293MiAke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uJHt0eXBlfSAke0lNQUdFX05BTUV9JHtJTUFHRV9OQU1FX1NVRkZJWH0uJHt0eXBlfS5xY293MiIKIENPTlZFUlNJT05fREVQRU5EU19sem1hID0gInh6LW5hdGl2ZSIKIENPTlZFUlNJT05fREVQRU5EU19neiA9ICJwaWd6LW5hdGl2ZSIKIENPTlZFUlNJT05fREVQRU5EU19iejIgPSAicGJ6aXAyLW5hdGl2ZSIKQEAgLTI4MiwxNSArMzAzLDE4IEBACiBDT05WRVJTSU9OX0RFUEVORFNfc3VtID0gIm10ZC11dGlscy1uYXRpdmUiCiBDT05WRVJTSU9OX0RFUEVORFNfYm1hcCA9ICJibWFwLXRvb2xzLW5hdGl2ZSIKIENPTlZFUlNJT05fREVQRU5EU191LWJvb3QgPSAidS1ib290LW1raW1hZ2UtbmF0aXZlIgorQ09OVkVSU0lPTl9ERVBFTkRTX3ZtZGsgPSAicWVtdS1uYXRpdmUiCitDT05WRVJTSU9OX0RFUEVORFNfdmRpID0gInFlbXUtbmF0aXZlIgorQ09OVkVSU0lPTl9ERVBFTkRTX3Fjb3cyID0gInFlbXUtbmF0aXZlIgogCiBSVU5OQUJMRV9JTUFHRV9UWVBFUyA/PSAiZXh0MiBleHQzIGV4dDQiCiBSVU5OQUJMRV9NQUNISU5FX1BBVFRFUk5TID89ICJxZW11IgogCiBERVBMT1lBQkxFX0lNQUdFX1RZUEVTID89ICJoZGRpbWcgaXNvIiAKIAotIyBVc2UgSU1BR0VfRVhURU5TSU9OX3h4eCB0byBtYXAgaW1hZ2UgdHlwZSAneHh4JyB3aXRoIHJlYWwgaW1hZ2UgZmlsZSBleHRlbnNpb24gbmFtZShzKSBmb3IgSG9iCi1JTUFHRV9FWFRFTlNJT05fbGl2ZSA9ICJoZGRpbWcgaXNvIgotCiAjIFRoZSBJTUFHRV9UWVBFU19NQVNLRUQgdmFyaWFibGUgd2lsbCBiZSB1c2VkIHRvIG1hc2sgb3V0IGZyb20gdGhlIElNQUdFX0ZTVFlQRVMsCiAjIGltYWdlcyB0aGF0IHdpbGwgbm90IGJlIGJ1aWx0IGF0IGRvX3Jvb3RmcyB0aW1lOiB2bWRrLCB2ZGksIHFjb3cyLCBoZGRkaXJlY3QsIGhkZGltZywgaXNvLCBldGMuCiBJTUFHRV9UWVBFU19NQVNLRUQgPz0gIiIKKworIyBibWFwIHJlcXVpcmVzIHB5dGhvbjMgdG8gYmUgaW4gdGhlIFBBVEgKK0VYVFJBTkFUSVZFUEFUSCArPSAiJHtAJ3B5dGhvbjMtbmF0aXZlJyBpZiBkLmdldFZhcignSU1BR0VfRlNUWVBFUycpLmZpbmQoJy5ibWFwJykgZWxzZSAnJ30iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlX3R5cGVzX3dpYy5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZV90eXBlc193aWMuYmJjbGFzcwppbmRleCA2OGYyNTFjLi5kY2Y2MjBjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlX3R5cGVzX3dpYy5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2VfdHlwZXNfd2ljLmJiY2xhc3MKQEAgLTMsNyArMyw3IEBACiBXSUNWQVJTID89ICJcCiAgICAgICAgICAgIEJCTEFZRVJTIElNR0RFUExPWURJUiBERVBMT1lfRElSX0lNQUdFIEZBS0VST09UQ01EIElNQUdFX0JBU0VOQU1FIElNQUdFX0JPT1RfRklMRVMgXAogICAgICAgICAgICBJTUFHRV9MSU5LX05BTUUgSU1BR0VfUk9PVEZTIElOSVRSQU1GU19GU1RZUEVTIElOSVRSRCBJTklUUkRfTElWRSBJU09ESVIgUkVDSVBFX1NZU1JPT1RfTkFUSVZFIFwKLSAgICAgICAgICAgUk9PVEZTX1NJWkUgU1RBR0lOR19EQVRBRElSIFNUQUdJTkdfRElSIFNUQUdJTkdfTElCRElSIFRBUkdFVF9TWVMgVFJBTlNMQVRFRF9UQVJHRVRfQVJDSCIKKyAgICAgICAgICAgUk9PVEZTX1NJWkUgU1RBR0lOR19EQVRBRElSIFNUQUdJTkdfRElSIFNUQUdJTkdfTElCRElSIFRBUkdFVF9TWVMiCiAKIFdLU19GSUxFID8/PSAiJHtJTUFHRV9CQVNFTkFNRX0uJHtNQUNISU5FfS53a3MiCiBXS1NfRklMRVMgPz0gIiR7V0tTX0ZJTEV9ICR7SU1BR0VfQkFTRU5BTUV9LndrcyIKQEAgLTM5LDggKzM5LDE5IEBACiBVU0lOR19XSUMgPSAiJHtAYmIudXRpbHMuY29udGFpbnNfYW55KCdJTUFHRV9GU1RZUEVTJywgJ3dpYyAnICsgJyAnLmpvaW4oJ3dpYy4lcycgJSBjIGZvciBjIGluICcke0NPTlZFUlNJT05UWVBFU30nLnNwbGl0KCkpLCAnMScsICcnLCBkKX0iCiBXS1NfRklMRV9DSEVDS1NVTSA9ICIke0AnJHtXS1NfRlVMTF9QQVRIfTolcycgJSBvcy5wYXRoLmV4aXN0cygnJHtXS1NfRlVMTF9QQVRIfScpIGlmICcke1VTSU5HX1dJQ30nIGVsc2UgJyd9IgogZG9faW1hZ2Vfd2ljW2ZpbGUtY2hlY2tzdW1zXSArPSAiJHtXS1NfRklMRV9DSEVDS1NVTX0iCi1kb19pbWFnZV93aWNbZGVwZW5kc10gKz0gIndpYy10b29sczpkb19wb3B1bGF0ZV9zeXNyb290IgotV0tTX0ZJTEVfREVQRU5EUyA/Pz0gJycKK2RvX2ltYWdlX3dpY1tkZXBlbmRzXSArPSAiJHtAJyAnLmpvaW4oJyVzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JyAlIHIgZm9yIHIgaW4gKCdwYXJ0ZWQnLCAnZ3B0ZmRpc2snLCAnZG9zZnN0b29scycsICdtdG9vbHMnKSl9IgorCisjIFdlIGVuc3VyZSBhbGwgYXJ0ZmFjdHMgYXJlIGRlcGxveWVkIChlLmcgdmlydHVhbC9ib290bG9hZGVyKQorZG9faW1hZ2Vfd2ljW3JlY3JkZXB0YXNrXSArPSAiZG9fZGVwbG95IgorCitXS1NfRklMRV9ERVBFTkRTX0RFRkFVTFQgPSAic3lzbGludXgtbmF0aXZlIGJtYXAtdG9vbHMtbmF0aXZlIGNkcnRvb2xzLW5hdGl2ZSBidHJmcy10b29scy1uYXRpdmUgc3F1YXNoZnMtdG9vbHMtbmF0aXZlIGUyZnNwcm9ncy1uYXRpdmUiCitXS1NfRklMRV9ERVBFTkRTX0JPT1RMT0FERVJTID0gIiIKK1dLU19GSUxFX0RFUEVORFNfQk9PVExPQURFUlNfeDg2ID0gInN5c2xpbnV4IGdydWItZWZpIHN5c3RlbWQtYm9vdCIKK1dLU19GSUxFX0RFUEVORFNfQk9PVExPQURFUlNfeDg2LTY0ID0gInN5c2xpbnV4IGdydWItZWZpIHN5c3RlbWQtYm9vdCIKK1dLU19GSUxFX0RFUEVORFNfQk9PVExPQURFUlNfeDg2LXgzMiA9ICJzeXNsaW51eCBncnViLWVmaSIKKworV0tTX0ZJTEVfREVQRU5EUyA/Pz0gIiR7V0tTX0ZJTEVfREVQRU5EU19ERUZBVUxUfSAke1dLU19GSUxFX0RFUEVORFNfQk9PVExPQURFUlN9IgorCiBERVBFTkRTICs9ICIke0AgJyR7V0tTX0ZJTEVfREVQRU5EU30nIGlmIGQuZ2V0VmFyKCdVU0lOR19XSUMnKSBlbHNlICcnIH0iCiAKIHB5dGhvbiBkb193cml0ZV93a3NfdGVtcGxhdGUgKCkgewpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbnNhbmUuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW5zYW5lLmJiY2xhc3MKaW5kZXggMGMxMWMzNi4uMGEzYjUyOCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbnNhbmUuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2luc2FuZS5iYmNsYXNzCkBAIC0xNiwxMyArMTYsOCBAQAogIyAgIGludG8gZXhlY19wcmVmaXgKICMgIC1DaGVjayB0aGF0IHNjcmlwdHMgaW4gYmFzZV9bYmluZGlyfHNiaW5kaXJ8bGliZGlyXSBkbyBub3QgcmVmZXJlbmNlCiAjICAgZmlsZXMgdW5kZXIgZXhlY19wcmVmaXgKKyMgIC1DaGVjayBpZiB0aGUgcGFja2FnZSBuYW1lIGlzIHVwcGVyIGNhc2UKIAotCi0jIHVuc2FmZS1yZWZlcmVuY2VzLWluLWJpbmFyaWVzIHJlcXVpcmVzIHByZWxpbmstcnRsZCBmcm9tCi0jIHByZWxpbmstbmF0aXZlLCBidXQgd2UgZG9uJ3Qgd2FudCB0aGlzIERFUEVORFMgZm9yIC1uYXRpdmUgYnVpbGRzCi1RQURFUEVORFMgPSAicHJlbGluay1uYXRpdmUiCi1RQURFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKLVFBREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAiIgogUUFfU0FORSA9ICJUcnVlIgogCiAjIEVsZWN0IHdoZXRoZXIgYSBnaXZlbiB0eXBlIG9mIGVycm9yIGlzIGEgd2FybmluZyBvciBlcnJvciwgdGhleSBtYXkKQEAgLTMyLDcgKzI3LDcgQEAKICAgICAgICAgICAgIGluc3RhbGxlZC12cy1zaGlwcGVkIGNvbXBpbGUtaG9zdC1wYXRoIGluc3RhbGwtaG9zdC1wYXRoIFwKICAgICAgICAgICAgIHBuLW92ZXJyaWRlcyBpbmZvZGlyIGJ1aWxkLWRlcHMgXAogICAgICAgICAgICAgdW5rbm93bi1jb25maWd1cmUtb3B0aW9uIHN5bWxpbmstdG8tc3lzcm9vdCBtdWx0aWxpYiBcCi0gICAgICAgICAgICBpbnZhbGlkLXBhY2thZ2Vjb25maWcgaG9zdC11c2VyLWNvbnRhbWluYXRlZCBcCisgICAgICAgICAgICBpbnZhbGlkLXBhY2thZ2Vjb25maWcgaG9zdC11c2VyLWNvbnRhbWluYXRlZCB1cHBlcmNhc2UtcG4gXAogICAgICAgICAgICAgIgogRVJST1JfUUEgPz0gImRldi1zbyBkZWJ1Zy1kZXBzIGRldi1kZXBzIGRlYnVnLWZpbGVzIGFyY2ggcGtnY29uZmlnIGxhIFwKICAgICAgICAgICAgIHBlcm1zIGRlcC1jbXAgcGtndmFyY2hlY2sgcGVybS1jb25maWcgcGVybS1saW5lIHBlcm0tbGluayBcCkBAIC00MCw2ICszNSw5IEBACiAgICAgICAgICAgICB2ZXJzaW9uLWdvaW5nLWJhY2t3YXJkcyBleHBhbmRlZC1kIGludmFsaWQtY2hhcnMgXAogICAgICAgICAgICAgbGljZW5zZS1jaGVja3N1bSBkZXYtZWxmIGZpbGUtcmRlcHMgXAogICAgICAgICAgICAgIgorIyBBZGQgdXNybWVyZ2UgUUEgY2hlY2sgYmFzZWQgb24gZGlzdHJvIGZlYXR1cmUKK0VSUk9SX1FBX2FwcGVuZCA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3Vzcm1lcmdlJywgJyB1c3JtZXJnZScsICcnLCBkKX0iCisKIEZBS0VST09UX1FBID0gImhvc3QtdXNlci1jb250YW1pbmF0ZWQiCiBGQUtFUk9PVF9RQVtkb2NdID0gIlFBIHRlc3RzIHdoaWNoIG5lZWQgdG8gcnVuIHVuZGVyIGZha2Vyb290LiBJZiBhbnkgXAogZW5hYmxlZCB0ZXN0cyBhcmUgbGlzdGVkIGhlcmUsIHRoZSBkb19wYWNrYWdlX3FhIHRhc2sgd2lsbCBydW4gdW5kZXIgZmFrZXJvb3QuIgpAQCAtMTAzLDIzICsxMDEsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIm1pY3JvYmxhemVlYiI6KDE4OSwgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAibWljcm9ibGF6ZWVsIjooMTg5LCAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgImxpbnV4LXVjbGliYyIgOiB7IAotICAgICAgICAgICAgICAgICAgICAgICAgImFybSIgOiAgICAgICAoICA0MCwgICAgOTcsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJhcm1lYiI6ICAgICAgKCAgNDAsICAgIDk3LCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAicG93ZXJwYyI6ICAgICggIDIwLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAotICAgICAgICAgICAgICAgICAgICAgICAgImkzODYiOiAgICAgICAoICAgMywgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJpNDg2IjogICAgICAgKCAgIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAiaTU4NiI6ICAgICAgICggICAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAotICAgICAgICAgICAgICAgICAgICAgICAgImk2ODYiOiAgICAgICAoICAgMywgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJ4ODZfNjQiOiAgICAgKCAgNjIsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCi0gICAgICAgICAgICAgICAgICAgICAgICAibWlwcyI6ICAgICAgICggICA4LCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHNlbCI6ICAgICAoICAgOCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzNjQiOiAgICAgKCAgIDgsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICA2NCksCi0gICAgICAgICAgICAgICAgICAgICAgICAibWlwczY0ZWwiOiAgICggICA4LCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQpLAotICAgICAgICAgICAgICAgICAgICAgICAgImF2cjMyIjogICAgICAoNjMxNywgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJzaDQiOiAgICAgICAgKDQyLCAgICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCi0KLSAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgImxpbnV4LW11c2wiIDogeyAKICAgICAgICAgICAgICAgICAgICAgICAgICJhYXJjaDY0IiA6ICAgKDE4MywgICAgMCwgICAgMCwgICAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCiAgICAgICAgICAgICAgICAgICAgICAgICAiYWFyY2g2NF9iZSIgOigxODMsICAgIDAsICAgIDAsICAgICAgICAgICAgRmFsc2UsICAgICAgICAgNjQpLApAQCAtMTUxLDE5ICsxMzIsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJhcm0iIDogICAgICAgKDQwLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgImFybWViIiA6ICAgICAoNDAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCiAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJsaW51eC11Y2xpYmNlYWJpIiA6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICJhcm0iIDogICAgICAgKDQwLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAotICAgICAgICAgICAgICAgICAgICAgICAgImFybWViIiA6ICAgICAoNDAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCi0gICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICJsaW51eC1nbnVzcGUiIDogewogICAgICAgICAgICAgICAgICAgICAgICAgInBvd2VycGMiOiAgICAoMjAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCiAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICJsaW51eC1tdXNsc3BlIiA6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICJwb3dlcnBjIjogICAgKDIwLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAogICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAibGludXgtdWNsaWJjc3BlIiA6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICJwb3dlcnBjIjogICAgKDIwLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAotICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAibGludXgtZ251IiA6ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICJwb3dlcnBjIjogICAgKDIwLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgInNoNCI6ICAgICAgICAoNDIsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCkBAIC0xNzEsNiArMTQ1LDkgQEAKICAgICAgICAgICAgICJsaW51eC1nbnV4MzIiIDogICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIng4Nl82NCI6ICAgICAoNjIsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCiAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsaW51eC1tdXNseDMyIiA6ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJ4ODZfNjQiOiAgICAgKDYyLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAibGludXgtZ251bjMyIiA6ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzNjQiOiAgICAgICAoIDgsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAibWlwczY0ZWwiOiAgICAgKCA4LCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLApAQCAtMjA3LDEyICsxODQsMTMgQEAKICAgICAgICAgICAgIGYud3JpdGUoIiVzOiAlcyBbJXNdXG4iICUgKHAsIGVycm9yLCB0eXBlKSkKIAogZGVmIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKGVycm9yX2NsYXNzLCBlcnJvcl9tc2csIGQpOgotICAgIHBhY2thZ2VfcWFfd3JpdGVfZXJyb3IoZXJyb3JfY2xhc3MsIGVycm9yX21zZywgZCkKICAgICBpZiBlcnJvcl9jbGFzcyBpbiAoZC5nZXRWYXIoIkVSUk9SX1FBIikgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgIHBhY2thZ2VfcWFfd3JpdGVfZXJyb3IoZXJyb3JfY2xhc3MsIGVycm9yX21zZywgZCkKICAgICAgICAgYmIuZXJyb3IoIlFBIElzc3VlOiAlcyBbJXNdIiAlIChlcnJvcl9tc2csIGVycm9yX2NsYXNzKSkKICAgICAgICAgZC5zZXRWYXIoIlFBX1NBTkUiLCBGYWxzZSkKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgZWxpZiBlcnJvcl9jbGFzcyBpbiAoZC5nZXRWYXIoIldBUk5fUUEiKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgcGFja2FnZV9xYV93cml0ZV9lcnJvcihlcnJvcl9jbGFzcywgZXJyb3JfbXNnLCBkKQogICAgICAgICBiYi53YXJuKCJRQSBJc3N1ZTogJXMgWyVzXSIgJSAoZXJyb3JfbXNnLCBlcnJvcl9jbGFzcykpCiAgICAgZWxzZToKICAgICAgICAgYmIubm90ZSgiUUEgSXNzdWU6ICVzIFslc10iICUgKGVycm9yX21zZywgZXJyb3JfY2xhc3MpKQpAQCAtNDA4LDcxICszODYsNiBAQAogICAgICIiIgogICAgIHJldHVybgogCi1RQVBBVEhURVNUW3Vuc2FmZS1yZWZlcmVuY2VzLWluLXNjcmlwdHNdID0gInBhY2thZ2VfcWFfY2hlY2tfdW5zYWZlX3JlZmVyZW5jZXNfaW5fc2NyaXB0cyIKLWRlZiBwYWNrYWdlX3FhX2NoZWNrX3Vuc2FmZV9yZWZlcmVuY2VzX2luX3NjcmlwdHMocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6Ci0gICAgIiIiCi0gICAgV2FybiBpZiBzY3JpcHRzIGluIGJhc2VfW2JpbmRpcnxzYmluZGlyfGxpYmRpcl0gcmVmZXJlbmNlIGZpbGVzIHVuZGVyIGV4ZWNfcHJlZml4Ci0gICAgIiIiCi0gICAgaWYgdW5zYWZlX3JlZmVyZW5jZXNfc2tpcHBhYmxlKHBhdGgsIG5hbWUsIGQpOgotICAgICAgICByZXR1cm4KLQotICAgIGlmIG5vdCBlbGY6Ci0gICAgICAgIGltcG9ydCBzdGF0Ci0gICAgICAgIGltcG9ydCBzdWJwcm9jZXNzCi0gICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJykKLQotICAgICAgICAjIEVuc3VyZSB3ZSdyZSBjaGVja2luZyBhbiBleGVjdXRhYmxlIHNjcmlwdAotICAgICAgICBzdGF0aW5mbyA9IG9zLnN0YXQocGF0aCkKLSAgICAgICAgaWYgYm9vbChzdGF0aW5mby5zdF9tb2RlICYgc3RhdC5TX0lYVVNSKToKLSAgICAgICAgICAgICMgZ3JlcCBzaGVsbCBzY3JpcHRzIGZvciBwb3NzaWJsZSByZWZlcmVuY2VzIHRvIC9leGVjX3ByZWZpeC8KLSAgICAgICAgICAgIGV4ZWNfcHJlZml4ID0gZC5nZXRWYXIoJ2V4ZWNfcHJlZml4JykKLSAgICAgICAgICAgIHN0YXRlbWVudCA9ICJncmVwIC1lICclcy9bXiA6XVx7MSxcfS9bXiA6XVx7MSxcfScgJXMgPiAvZGV2L251bGwiICUgKGV4ZWNfcHJlZml4LCBwYXRoKQotICAgICAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKHN0YXRlbWVudCwgc2hlbGw9VHJ1ZSkgPT0gMDoKLSAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSBwbiArICI6IEZvdW5kIGEgcmVmZXJlbmNlIHRvICVzLyBpbiAlcyIgJSAoZXhlY19wcmVmaXgsIHBhdGgpCi0gICAgICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInVuc2FmZS1yZWZlcmVuY2VzLWluLXNjcmlwdHMiLCBlcnJvcl9tc2csIGQpCi0gICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIlNoZWxsIHNjcmlwdHMgaW4gYmFzZV9iaW5kaXIgYW5kIGJhc2Vfc2JpbmRpciBzaG91bGQgbm90IHJlZmVyZW5jZSBhbnl0aGluZyBpbiBleGVjX3ByZWZpeCIKLSAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigidW5zYWZlLXJlZmVyZW5jZXMtaW4tc2NyaXB0cyIsIGVycm9yX21zZywgZCkKLQotZGVmIHVuc2FmZV9yZWZlcmVuY2VzX3NraXBwYWJsZShwYXRoLCBuYW1lLCBkKToKLSAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKToKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGlmICItZGJnIiBpbiBuYW1lIG9yICItZGV2IiBpbiBuYW1lOgotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgIyBPdGhlciBwYWNrYWdlIG5hbWVzIHRvIHNraXA6Ci0gICAgaWYgbmFtZS5zdGFydHN3aXRoKCJrZXJuZWwtbW9kdWxlLSIpOgotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgIyBTa2lwIHN5bWxpbmtzCi0gICAgaWYgb3MucGF0aC5pc2xpbmsocGF0aCk6Ci0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICAjIFNraXAgdW51c3VhbCByb290ZnMgbGF5b3V0cyB3aGljaCBtYWtlIHRoZXNlIHRlc3RzIGlycmVsZXZhbnQKLSAgICBleGVjX3ByZWZpeCA9IGQuZ2V0VmFyKCdleGVjX3ByZWZpeCcpCi0gICAgaWYgZXhlY19wcmVmaXggPT0gIiI6Ci0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnKQotICAgIHBrZ2Rlc3QgPSBwa2dkZXN0ICsgIi8iICsgbmFtZQotICAgIHBrZ2Rlc3QgPSBvcy5wYXRoLmFic3BhdGgocGtnZGVzdCkKLSAgICBiYXNlX2JpbmRpciA9IHBrZ2Rlc3QgKyBkLmdldFZhcignYmFzZV9iaW5kaXInKQotICAgIGJhc2Vfc2JpbmRpciA9IHBrZ2Rlc3QgKyBkLmdldFZhcignYmFzZV9zYmluZGlyJykKLSAgICBiYXNlX2xpYmRpciA9IHBrZ2Rlc3QgKyBkLmdldFZhcignYmFzZV9saWJkaXInKQotICAgIGJpbmRpciA9IHBrZ2Rlc3QgKyBkLmdldFZhcignYmluZGlyJykKLSAgICBzYmluZGlyID0gcGtnZGVzdCArIGQuZ2V0VmFyKCdzYmluZGlyJykKLSAgICBsaWJkaXIgPSBwa2dkZXN0ICsgZC5nZXRWYXIoJ2xpYmRpcicpCi0KLSAgICBpZiBiYXNlX2JpbmRpciA9PSBiaW5kaXIgYW5kIGJhc2Vfc2JpbmRpciA9PSBzYmluZGlyIGFuZCBiYXNlX2xpYmRpciA9PSBsaWJkaXI6Ci0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICAjIFNraXAgZmlsZXMgbm90IGluIGJhc2VfW2JpbmRpcnxzYmluZGlyfGxpYmRpcl0KLSAgICBwYXRoID0gb3MucGF0aC5hYnNwYXRoKHBhdGgpCi0gICAgaWYgbm90IChiYXNlX2JpbmRpciBpbiBwYXRoIG9yIGJhc2Vfc2JpbmRpciBpbiBwYXRoIG9yIGJhc2VfbGliZGlyIGluIHBhdGgpOgotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgcmV0dXJuIEZhbHNlCi0KIFFBUEFUSFRFU1RbYXJjaF0gPSAicGFja2FnZV9xYV9jaGVja19hcmNoIgogZGVmIHBhY2thZ2VfcWFfY2hlY2tfYXJjaChwYXRoLG5hbWUsZCwgZWxmLCBtZXNzYWdlcyk6CiAgICAgIiIiCkBAIC01MDksNyArNDIyLDcgQEAKIAogICAgICMgQ2hlY2sgdGhlIGFyY2hpdGVjdHVyZSBhbmQgZW5kaWFubmVzIG9mIHRoZSBiaW5hcnkKICAgICBpc18zMiA9ICgoInZpcnR1YWwva2VybmVsIiBpbiBwcm92aWRlcykgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygibW9kdWxlIiwgZCkpIGFuZCBcCi0gICAgICAgICAgICAodGFyZ2V0X29zID09ICJsaW51eC1nbnV4MzIiIG9yIHJlLm1hdGNoKCdtaXBzNjQuKjMyJywgZC5nZXRWYXIoJ0RFRkFVTFRUVU5FJykpKQorICAgICAgICAgICAgKHRhcmdldF9vcyA9PSAibGludXgtZ251eDMyIiBvciB0YXJnZXRfb3MgPT0gImxpbnV4LW11c2x4MzIiICBvciByZS5tYXRjaCgnbWlwczY0LiozMicsIGQuZ2V0VmFyKCdERUZBVUxUVFVORScpKSkKICAgICBpZiBub3QgKChtYWNoaW5lID09IGVsZi5tYWNoaW5lKCkpIG9yIGlzXzMyKToKICAgICAgICAgcGFja2FnZV9xYV9hZGRfbWVzc2FnZShtZXNzYWdlcywgImFyY2giLCAiQXJjaGl0ZWN0dXJlIGRpZCBub3QgbWF0Y2ggKCVzLCBleHBlY3RlZCAlcykgb24gJXMiICUgXAogICAgICAgICAgICAgICAgICAob2UucWEuZWxmX21hY2hpbmVfdG9fc3RyaW5nKGVsZi5tYWNoaW5lKCkpLCBvZS5xYS5lbGZfbWFjaGluZV90b19zdHJpbmcobWFjaGluZSksIHBhY2thZ2VfcWFfY2xlYW5fcGF0aChwYXRoLGQpKSkKQEAgLTY3Nyw3ICs1OTAsNyBAQAogICAgICAgICBzYW5lID0gcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImxpY2Vuc2UtY2hlY2tzdW0iLCBwbiArICI6IFJlY2lwZSBmaWxlIGZldGNoZXMgZmlsZXMgYW5kIGRvZXMgbm90IGhhdmUgbGljZW5zZSBmaWxlIGluZm9ybWF0aW9uIChMSUNfRklMRVNfQ0hLU1VNKSIsIGQpCiAKICAgICBzcmNkaXIgPSBkLmdldFZhcignUycpCi0KKyAgICBjb3JlYmFzZV9saWNlbnNlZmlsZSA9IGQuZ2V0VmFyKCdDT1JFQkFTRScpICsgIi9MSUNFTlNFIgogICAgIGZvciB1cmwgaW4gbGljX2ZpbGVzLnNwbGl0KCk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgICh0eXBlLCBob3N0LCBwYXRoLCB1c2VyLCBwc3dkLCBwYXJtKSA9IGJiLmZldGNoLmRlY29kZXVybCh1cmwpCkBAIC02ODksNiArNjAyLDkgQEAKICAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJsaWNlbnNlLWNoZWNrc3VtIiwgcG4gKyAiOiBMSUNfRklMRVNfQ0hLU1VNIHBvaW50cyB0byBhbiBpbnZhbGlkIGZpbGU6ICIgKyBzcmNsaWNmaWxlLCBkKQogICAgICAgICAgICAgY29udGludWUKIAorICAgICAgICBpZiAoc3JjbGljZmlsZSA9PSBjb3JlYmFzZV9saWNlbnNlZmlsZSk6CisgICAgICAgICAgICBiYi53YXJuKCIke0NPUkVCQVNFfS9MSUNFTlNFIGlzIG5vdCBhIHZhbGlkIGxpY2Vuc2UgZmlsZSwgcGxlYXNlIHVzZSAnJHtDT01NT05fTElDRU5TRV9ESVJ9L01JVCcgZm9yIGEgTUlUIExpY2Vuc2UgZmlsZSBpbiBMSUNfRklMRVNfQ0hLU1VNLiBUaGlzIHdpbGwgYmVjb21lIGFuIGVycm9yIGluIHRoZSBmdXR1cmUiKQorCiAgICAgICAgIHJlY2lwZW1kNSA9IHBhcm0uZ2V0KCdtZDUnLCAnJykKICAgICAgICAgYmVnaW5saW5lLCBlbmRsaW5lID0gMCwgMAogICAgICAgICBpZiAnYmVnaW5saW5lJyBpbiBwYXJtOgpAQCAtODE2LDcgKzczMiw3IEBACiAgICAgcmV0dXJuIHNhbmUKIAogIyBSdW4gYWxsIHBhY2thZ2Utd2lkZSB3YXJuZnVuY3MgYW5kIGVycm9yZnVuY3MKLWRlZiBwYWNrYWdlX3FhX3BhY2thZ2Uod2FybmZ1bmNzLCBlcnJvcmZ1bmNzLCBza2lwLCBwYWNrYWdlLCBkKToKK2RlZiBwYWNrYWdlX3FhX3BhY2thZ2Uod2FybmZ1bmNzLCBlcnJvcmZ1bmNzLCBwYWNrYWdlLCBkKToKICAgICB3YXJuaW5ncyA9IHt9CiAgICAgZXJyb3JzID0ge30KIApAQCAtODMyLDggKzc0OCwyNSBAQAogCiAgICAgcmV0dXJuIGxlbihlcnJvcnMpID09IDAKIAorIyBSdW4gYWxsIHJlY2lwZS13aWRlIHdhcm5mdW5jcyBhbmQgZXJyb3JmdW5jcworZGVmIHBhY2thZ2VfcWFfcmVjaXBlKHdhcm5mdW5jcywgZXJyb3JmdW5jcywgcG4sIGQpOgorICAgIHdhcm5pbmdzID0ge30KKyAgICBlcnJvcnMgPSB7fQorCisgICAgZm9yIGZ1bmMgaW4gd2FybmZ1bmNzOgorICAgICAgICBmdW5jKHBuLCBkLCB3YXJuaW5ncykKKyAgICBmb3IgZnVuYyBpbiBlcnJvcmZ1bmNzOgorICAgICAgICBmdW5jKHBuLCBkLCBlcnJvcnMpCisKKyAgICBmb3IgdyBpbiB3YXJuaW5nczoKKyAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3Iodywgd2FybmluZ3Nbd10sIGQpCisgICAgZm9yIGUgaW4gZXJyb3JzOgorICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcihlLCBlcnJvcnNbZV0sIGQpCisKKyAgICByZXR1cm4gbGVuKGVycm9ycykgPT0gMAorCiAjIFdhbGsgb3ZlciBhbGwgZmlsZXMgaW4gYSBkaXJlY3RvcnkgYW5kIGNhbGwgZnVuYwotZGVmIHBhY2thZ2VfcWFfd2Fsayh3YXJuZnVuY3MsIGVycm9yZnVuY3MsIHNraXAsIHBhY2thZ2UsIGQpOgorZGVmIHBhY2thZ2VfcWFfd2Fsayh3YXJuZnVuY3MsIGVycm9yZnVuY3MsIHBhY2thZ2UsIGQpOgogICAgIGltcG9ydCBvZS5xYQogCiAgICAgI2lmIHRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24sIHRoZW4gZml4IHRoZSBkaWN0IGFib3ZlCkBAIC05NzMsOCArOTA2LDkgQEAKICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIiVzIGNvbnRhaW5lZCBpbiBwYWNrYWdlICVzIHJlcXVpcmVzICVzLCBidXQgbm8gcHJvdmlkZXJzIGZvdW5kIGluIFJERVBFTkRTXyVzPyIgJSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGVyZGVwZW5kc1trZXldLnJlcGxhY2UoIl8lcyIgJSBwa2csICIiKS5yZXBsYWNlKCJAdW5kZXJzY29yZUAiLCAiXyIpLCBwa2csIGtleSwgcGtnKQogICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiZmlsZS1yZGVwcyIsIGVycm9yX21zZywgZCkKK3BhY2thZ2VfcWFfY2hlY2tfcmRlcGVuZHNbdmFyZGVwc2V4Y2x1ZGVdID0gIk9WRVJSSURFUyIKIAotZGVmIHBhY2thZ2VfcWFfY2hlY2tfZGVwcyhwa2csIHBrZ2Rlc3QsIHNraXAsIGQpOgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfZGVwcyhwa2csIHBrZ2Rlc3QsIGQpOgogCiAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCiAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgcGtnKQpAQCAtOTk3LDYgKzkzMSwxOCBAQAogICAgIGNoZWNrX3ZhbGlkX2RlcHMoJ1JSRVBMQUNFUycpCiAgICAgY2hlY2tfdmFsaWRfZGVwcygnUkNPTkZMSUNUUycpCiAKK1FBUEtHVEVTVFt1c3JtZXJnZV0gPSAicGFja2FnZV9xYV9jaGVja191c3JtZXJnZSIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX3Vzcm1lcmdlKHBrZywgZCwgbWVzc2FnZXMpOgorICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcpCisgICAgcGtnX2RpciA9IHBrZ2Rlc3QgKyBvcy5zZXAgKyBwa2cgKyBvcy5zZXAKKyAgICBtZXJnZWRfZGlycyA9IFsnYmluJywgJ3NiaW4nLCAnbGliJ10gKyBkLmdldFZhcignTVVMVElMSUJfVkFSSUFOVFMnKS5zcGxpdCgpCisgICAgZm9yIGYgaW4gbWVyZ2VkX2RpcnM6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBrZ19kaXIgKyBmKSBhbmQgbm90IG9zLnBhdGguaXNsaW5rKHBrZ19kaXIgKyBmKToKKyAgICAgICAgICAgIG1zZyA9ICIlcyBwYWNrYWdlIGlzIG5vdCBvYmV5aW5nIHVzcm1lcmdlIGRpc3RybyBmZWF0dXJlLiAvJXMgc2hvdWxkIGJlIHJlbG9jYXRlZCB0byAvdXNyLiIgJSAocGtnLCBmKQorICAgICAgICAgICAgcGFja2FnZV9xYV9hZGRfbWVzc2FnZShtZXNzYWdlcywgInVzcm1lcmdlIiwgbXNnKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIFRydWUKKwogUUFQS0dURVNUW2V4cGFuZGVkLWRdID0gInBhY2thZ2VfcWFfY2hlY2tfZXhwYW5kZWRfZCIKIGRlZiBwYWNrYWdlX3FhX2NoZWNrX2V4cGFuZGVkX2QocGFja2FnZSwgZCwgbWVzc2FnZXMpOgogICAgICIiIgpAQCAtMTA3MCw2ICsxMDE2LDcgQEAKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgIHJldHVybiBUcnVlCiAKKwogIyBUaGUgUEFDS0FHRSBGVU5DIHRvIHNjYW4gZWFjaCBwYWNrYWdlCiBweXRob24gZG9fcGFja2FnZV9xYSAoKSB7CiAgICAgaW1wb3J0IHN1YnByb2Nlc3MKQEAgLTEwODMsNyArMTAzMCw3IEBACiAgICAgcGFja2FnZV9xYV9jaGVja19lbmNvZGluZyhbJ0RFU0NSSVBUSU9OJywgJ1NVTU1BUlknLCAnTElDRU5TRScsICdTRUNUSU9OJ10sICd1dGYtOCcsIGQpCiAKICAgICBsb2dkaXIgPSBkLmdldFZhcignVCcpCi0gICAgcGtnID0gZC5nZXRWYXIoJ1BOJykKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicpCiAKICAgICAjIENoZWNrIHRoZSBjb21waWxlIGxvZyBmb3IgaG9zdCBjb250YW1pbmF0aW9uCiAgICAgY29tcGlsZWxvZyA9IG9zLnBhdGguam9pbihsb2dkaXIsImxvZy5kb19jb21waWxlIikKQEAgLTEwOTIsNyArMTAzOSw3IEBACiAgICAgICAgIHN0YXRlbWVudCA9ICJncmVwIC1lICdDUk9TUyBDT01QSUxFIEJhZG5lc3M6JyAtZSAnaXMgdW5zYWZlIGZvciBjcm9zcy1jb21waWxhdGlvbicgJXMgPiAvZGV2L251bGwiICUgY29tcGlsZWxvZwogICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoc3RhdGVtZW50LCBzaGVsbD1UcnVlKSA9PSAwOgogICAgICAgICAgICAgbXNnID0gIiVzOiBUaGUgY29tcGlsZSBsb2cgaW5kaWNhdGVzIHRoYXQgaG9zdCBpbmNsdWRlIGFuZC9vciBsaWJyYXJ5IHBhdGhzIHdlcmUgdXNlZC5cbiBcCi0gICAgICAgIFBsZWFzZSBjaGVjayB0aGUgbG9nICclcycgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAlIChwa2csIGNvbXBpbGVsb2cpCisgICAgICAgIFBsZWFzZSBjaGVjayB0aGUgbG9nICclcycgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAlIChwbiwgY29tcGlsZWxvZykKICAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJjb21waWxlLWhvc3QtcGF0aCIsIG1zZywgZCkKIAogICAgICMgQ2hlY2sgdGhlIGluc3RhbGwgbG9nIGZvciBob3N0IGNvbnRhbWluYXRpb24KQEAgLTExMDIsNyArMTA0OSw3IEBACiAgICAgICAgIHN0YXRlbWVudCA9ICJncmVwIC1lICdDUk9TUyBDT01QSUxFIEJhZG5lc3M6JyAtZSAnaXMgdW5zYWZlIGZvciBjcm9zcy1jb21waWxhdGlvbicgJXMgPiAvZGV2L251bGwiICUgaW5zdGFsbGxvZwogICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoc3RhdGVtZW50LCBzaGVsbD1UcnVlKSA9PSAwOgogICAgICAgICAgICAgbXNnID0gIiVzOiBUaGUgaW5zdGFsbCBsb2cgaW5kaWNhdGVzIHRoYXQgaG9zdCBpbmNsdWRlIGFuZC9vciBsaWJyYXJ5IHBhdGhzIHdlcmUgdXNlZC5cbiBcCi0gICAgICAgIFBsZWFzZSBjaGVjayB0aGUgbG9nICclcycgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAlIChwa2csIGluc3RhbGxsb2cpCisgICAgICAgIFBsZWFzZSBjaGVjayB0aGUgbG9nICclcycgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAlIChwbiwgaW5zdGFsbGxvZykKICAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJpbnN0YWxsLWhvc3QtcGF0aCIsIG1zZywgZCkKIAogICAgICMgU2NhbiB0aGUgcGFja2FnZXMuLi4KQEAgLTExMzEsMzUgKzEwNzgsMzAgQEAKICAgICBmb3IgZGVwIGluIHRhc2tkZXBkYXRhOgogICAgICAgICB0YXNrZGVwcy5hZGQodGFza2RlcGRhdGFbZGVwXVswXSkKIAorICAgIGRlZiBwYXJzZV90ZXN0X21hdHJpeChtYXRyaXhfbmFtZSk6CisgICAgICAgIHRlc3RtYXRyaXggPSBkLmdldFZhckZsYWdzKG1hdHJpeF9uYW1lKSBvciB7fQorICAgICAgICBnID0gZ2xvYmFscygpCisgICAgICAgIHdhcm5jaGVja3MgPSBbXQorICAgICAgICBmb3IgdyBpbiAoZC5nZXRWYXIoIldBUk5fUUEiKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIHcgaW4gc2tpcDoKKyAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiB3IGluIHRlc3RtYXRyaXggYW5kIHRlc3RtYXRyaXhbd10gaW4gZzoKKyAgICAgICAgICAgICAgICB3YXJuY2hlY2tzLmFwcGVuZChnW3Rlc3RtYXRyaXhbd11dKQorCisgICAgICAgIGVycm9yY2hlY2tzID0gW10KKyAgICAgICAgZm9yIGUgaW4gKGQuZ2V0VmFyKCJFUlJPUl9RQSIpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgZSBpbiBza2lwOgorICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGUgaW4gdGVzdG1hdHJpeCBhbmQgdGVzdG1hdHJpeFtlXSBpbiBnOgorICAgICAgICAgICAgICAgIGVycm9yY2hlY2tzLmFwcGVuZChnW3Rlc3RtYXRyaXhbZV1dKQorICAgICAgICByZXR1cm4gd2FybmNoZWNrcywgZXJyb3JjaGVja3MKKwogICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VzOgotICAgICAgICBkZWYgcGFyc2VfdGVzdF9tYXRyaXgobWF0cml4X25hbWUpOgotICAgICAgICAgICAgdGVzdG1hdHJpeCA9IGQuZ2V0VmFyRmxhZ3MobWF0cml4X25hbWUpIG9yIHt9Ci0gICAgICAgICAgICBnID0gZ2xvYmFscygpCi0gICAgICAgICAgICB3YXJuY2hlY2tzID0gW10KLSAgICAgICAgICAgIGZvciB3IGluIChkLmdldFZhcigiV0FSTl9RQSIpIG9yICIiKS5zcGxpdCgpOgotICAgICAgICAgICAgICAgIGlmIHcgaW4gc2tpcDoKLSAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGlmIHcgaW4gdGVzdG1hdHJpeCBhbmQgdGVzdG1hdHJpeFt3XSBpbiBnOgotICAgICAgICAgICAgICAgICAgICB3YXJuY2hlY2tzLmFwcGVuZChnW3Rlc3RtYXRyaXhbd11dKQotICAgICAgICAgICAgICAgIGlmIHcgPT0gJ3Vuc2FmZS1yZWZlcmVuY2VzLWluLWJpbmFyaWVzJzoKLSAgICAgICAgICAgICAgICAgICAgb2UudXRpbHMud3JpdGVfbGRfc29fY29uZihkKQotCi0gICAgICAgICAgICBlcnJvcmNoZWNrcyA9IFtdCi0gICAgICAgICAgICBmb3IgZSBpbiAoZC5nZXRWYXIoIkVSUk9SX1FBIikgb3IgIiIpLnNwbGl0KCk6Ci0gICAgICAgICAgICAgICAgaWYgZSBpbiBza2lwOgotICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgaWYgZSBpbiB0ZXN0bWF0cml4IGFuZCB0ZXN0bWF0cml4W2VdIGluIGc6Ci0gICAgICAgICAgICAgICAgICAgIGVycm9yY2hlY2tzLmFwcGVuZChnW3Rlc3RtYXRyaXhbZV1dKQotICAgICAgICAgICAgICAgIGlmIGUgPT0gJ3Vuc2FmZS1yZWZlcmVuY2VzLWluLWJpbmFyaWVzJzoKLSAgICAgICAgICAgICAgICAgICAgb2UudXRpbHMud3JpdGVfbGRfc29fY29uZihkKQotICAgICAgICAgICAgcmV0dXJuIHdhcm5jaGVja3MsIGVycm9yY2hlY2tzCi0KICAgICAgICAgc2tpcCA9IHNldCgoZC5nZXRWYXIoJ0lOU0FORV9TS0lQJykgb3IgIiIpLnNwbGl0KCkgKwogICAgICAgICAgICAgICAgICAgIChkLmdldFZhcignSU5TQU5FX1NLSVBfJyArIHBhY2thZ2UpIG9yICIiKS5zcGxpdCgpKQogICAgICAgICBpZiBza2lwOgogICAgICAgICAgICAgYmIubm90ZSgiUGFja2FnZSAlcyBza2lwcGluZyBRQSB0ZXN0czogJXMiICUgKHBhY2thZ2UsIHN0cihza2lwKSkpCiAKLQogICAgICAgICBiYi5ub3RlKCJDaGVja2luZyBQYWNrYWdlOiAlcyIgJSBwYWNrYWdlKQogICAgICAgICAjIENoZWNrIHBhY2thZ2UgbmFtZQogICAgICAgICBpZiBub3QgcGtnbmFtZV9wYXR0ZXJuLm1hdGNoKHBhY2thZ2UpOgpAQCAtMTE2NywxMyArMTEwOSwxNiBAQAogICAgICAgICAgICAgICAgICAgICAiJXMgZG9lc24ndCBtYXRjaCB0aGUgW2EtejAtOS4rLV0rIHJlZ2V4IiAlIHBhY2thZ2UsIGQpCiAKICAgICAgICAgd2Fybl9jaGVja3MsIGVycm9yX2NoZWNrcyA9IHBhcnNlX3Rlc3RfbWF0cml4KCJRQVBBVEhURVNUIikKLSAgICAgICAgcGFja2FnZV9xYV93YWxrKHdhcm5fY2hlY2tzLCBlcnJvcl9jaGVja3MsIHNraXAsIHBhY2thZ2UsIGQpCisgICAgICAgIHBhY2thZ2VfcWFfd2Fsayh3YXJuX2NoZWNrcywgZXJyb3JfY2hlY2tzLCBwYWNrYWdlLCBkKQogCiAgICAgICAgIHdhcm5fY2hlY2tzLCBlcnJvcl9jaGVja3MgPSBwYXJzZV90ZXN0X21hdHJpeCgiUUFQS0dURVNUIikKLSAgICAgICAgcGFja2FnZV9xYV9wYWNrYWdlKHdhcm5fY2hlY2tzLCBlcnJvcl9jaGVja3MsIHNraXAsIHBhY2thZ2UsIGQpCisgICAgICAgIHBhY2thZ2VfcWFfcGFja2FnZSh3YXJuX2NoZWNrcywgZXJyb3JfY2hlY2tzLCBwYWNrYWdlLCBkKQogCiAgICAgICAgIHBhY2thZ2VfcWFfY2hlY2tfcmRlcGVuZHMocGFja2FnZSwgcGtnZGVzdCwgc2tpcCwgdGFza2RlcHMsIHBhY2thZ2VzLCBkKQotICAgICAgICBwYWNrYWdlX3FhX2NoZWNrX2RlcHMocGFja2FnZSwgcGtnZGVzdCwgc2tpcCwgZCkKKyAgICAgICAgcGFja2FnZV9xYV9jaGVja19kZXBzKHBhY2thZ2UsIHBrZ2Rlc3QsIGQpCisKKyAgICB3YXJuX2NoZWNrcywgZXJyb3JfY2hlY2tzID0gcGFyc2VfdGVzdF9tYXRyaXgoIlFBUkVDSVBFVEVTVCIpCisgICAgcGFja2FnZV9xYV9yZWNpcGUod2Fybl9jaGVja3MsIGVycm9yX2NoZWNrcywgcG4sIGQpCiAKICAgICBpZiAnbGliZGlyJyBpbiBkLmdldFZhcigiQUxMX1FBIikuc3BsaXQoKToKICAgICAgICAgcGFja2FnZV9xYV9jaGVja19saWJkaXIoZCkKQEAgLTEyMzgsMTIgKzExODMsMTAgQEAKICAgICBjbmYgPSBkLmdldFZhcignRVhUUkFfT0VDT05GJykgb3IgIiIKICAgICBpZiAiZ2V0dGV4dCIgbm90IGluIGQuZ2V0VmFyKCdQJykgYW5kICJnY2MtcnVudGltZSIgbm90IGluIGQuZ2V0VmFyKCdQJykgYW5kICItLWRpc2FibGUtbmxzIiBub3QgaW4gY25mOgogICAgICAgICBtbCA9IGQuZ2V0VmFyKCJNTFBSRUZJWCIpIG9yICIiCi0gICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3NzZGsnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKToKLSAgICAgICAgICAgIGd0ID0gImdldHRleHQtbmF0aXZlIgotICAgICAgICBlbGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzLWNhbmFkaWFuJywgZCk6CisgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzLWNhbmFkaWFuJywgZCk6CiAgICAgICAgICAgICBndCA9ICJuYXRpdmVzZGstZ2V0dGV4dCIKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGd0ID0gInZpcnR1YWwvIiArIG1sICsgImdldHRleHQiCisgICAgICAgICAgICBndCA9ICJnZXR0ZXh0LW5hdGl2ZSIKICAgICAgICAgZGVwcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhkLmdldFZhcignREVQRU5EUycpIG9yICIiKQogICAgICAgICBpZiBndCBub3QgaW4gZGVwczoKICAgICAgICAgICAgIGZvciBjb25maWcgaW4gY29uZmlnczoKQEAgLTEzMDgsNiArMTI1MSw4IEBACiBkb191bnBhY2tbcG9zdGZ1bmNzXSArPSAiZG9fcWFfdW5wYWNrIgogCiBweXRob24gKCkgeworICAgIGltcG9ydCByZQorICAgIAogICAgIHRlc3RzID0gZC5nZXRWYXIoJ0FMTF9RQScpLnNwbGl0KCkKICAgICBpZiAiZGVza3RvcCIgaW4gdGVzdHM6CiAgICAgICAgIGQuYXBwZW5kVmFyKCJQQUNLQUdFX0RFUEVORFMiLCAiIGRlc2t0b3AtZmlsZS11dGlscy1uYXRpdmUiKQpAQCAtMTMzNCw2ICsxMjc5LDkgQEAKICAgICBpZiBwbiBpbiBvdmVycmlkZXM6CiAgICAgICAgIG1zZyA9ICdSZWNpcGUgJXMgaGFzIFBOIG9mICIlcyIgd2hpY2ggaXMgaW4gT1ZFUlJJREVTLCB0aGlzIGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBiZWhhdmlvdXIuJyAlIChkLmdldFZhcigiRklMRSIpLCBwbikKICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInBuLW92ZXJyaWRlcyIsIG1zZywgZCkKKyAgICBwcm9nID0gcmUuY29tcGlsZSgnW0EtWl0nKQorICAgIGlmIHByb2cuc2VhcmNoKHBuKToKKyAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInVwcGVyY2FzZS1wbiIsICdQTjogJXMgaXMgdXBwZXIgY2FzZSwgdGhpcyBjYW4gcmVzdWx0IGluIHVuZXhwZWN0ZWQgYmVoYXZpb3IuJyAlIHBuLCBkKQogCiAgICAgaXNzdWVzID0gW10KICAgICBpZiAoZC5nZXRWYXIoJ1BBQ0tBR0VTJykgb3IgIiIpLnNwbGl0KCk6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC1kZXZpY2V0cmVlLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC1kZXZpY2V0cmVlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUwOGJlNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLWRldmljZXRyZWUuYmJjbGFzcwpAQCAtMCwwICsxLDExMiBAQAorIyBTdXBwb3J0IGZvciBkZXZpY2UgdHJlZSBnZW5lcmF0aW9uCitQQUNLQUdFU19hcHBlbmQgPSAiIFwKKyAgICBrZXJuZWwtZGV2aWNldHJlZSBcCisgICAgJHtAWydrZXJuZWwtaW1hZ2UtemltYWdlLWJ1bmRsZScsICcnXVtkLmdldFZhcignS0VSTkVMX0RFVklDRVRSRUVfQlVORExFJykgIT0gJzEnXX0gXAorIgorRklMRVNfa2VybmVsLWRldmljZXRyZWUgPSAiLyR7S0VSTkVMX0lNQUdFREVTVH0vKi5kdGIgLyR7S0VSTkVMX0lNQUdFREVTVH0vKi5kdGJvIgorRklMRVNfa2VybmVsLWltYWdlLXppbWFnZS1idW5kbGUgPSAiLyR7S0VSTkVMX0lNQUdFREVTVH0vekltYWdlLSouZHRiLmJpbiIKKworIyBHZW5lcmF0ZSBrZXJuZWwrZGV2aWNldHJlZSBidW5kbGUKK0tFUk5FTF9ERVZJQ0VUUkVFX0JVTkRMRSA/PSAiMCIKKworbm9ybWFsaXplX2R0YiAoKSB7CisJRFRCPSIkMSIKKwlpZiBlY2hvICR7RFRCfSB8IGdyZXAgLXEgJy9kdHMvJzsgdGhlbgorCQliYndhcm4gIiR7RFRCfSBjb250YWlucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSB0aGUgZHRzIGZpbGUsIGJ1dCBvbmx5IHRoZSBkdGIgbmFtZSBzaG91bGQgYmUgdXNlZC4iCisJCURUQj1gYmFzZW5hbWUgJHtEVEJ9IHwgc2VkICdzLFwuZHRzJCwuZHRiLGcnYAorCWZpCisJZWNobyAiJHtEVEJ9IgorfQorCitnZXRfcmVhbF9kdGJfcGF0aF9pbl9rZXJuZWwgKCkgeworCURUQj0iJDEiCisJRFRCX1BBVEg9IiR7Qn0vYXJjaC8ke0FSQ0h9L2Jvb3QvZHRzLyR7RFRCfSIKKwlpZiBbICEgLWUgIiR7RFRCX1BBVEh9IiBdOyB0aGVuCisJCURUQl9QQVRIPSIke0J9L2FyY2gvJHtBUkNIfS9ib290LyR7RFRCfSIKKwlmaQorCWVjaG8gIiR7RFRCX1BBVEh9IgorfQorCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCWlmIFsgIiR7S0VSTkVMX0RFVklDRVRSRUVfQlVORExFfSIgPSAiMSIgXTsgdGhlbgorCQlpZiBlY2hvICR7S0VSTkVMX0lNQUdFVFlQRV9GT1JfTUFLRX0gfCBncmVwIC1xICd6SW1hZ2UnOyB0aGVuCisJCQljYXNlICIke0FSQ0h9IiBpbgorCQkJCSJhcm0iKQorCQkJCWNvbmZpZz0iJHtCfS8uY29uZmlnIgorCQkJCWlmICEgZ3JlcCAtcSAnQ09ORklHX0FSTV9BUFBFTkRFRF9EVEI9eScgJGNvbmZpZzsgdGhlbgorCQkJCQliYndhcm4gJ0NPTkZJR19BUk1fQVBQRU5ERURfRFRCIGlzIE5PVCBlbmFibGVkIGluIHRoZSBrZXJuZWwuIEVuYWJsaW5nIGl0IHRvIGFsbG93IHRoZSBrZXJuZWwgdG8gYm9vdCB3aXRoIHRoZSBEZXZpY2UgVHJlZSBhcHBlbmRlZCEnCisJCQkJCXNlZCAtaSAiL0NPTkZJR19BUk1fQVBQRU5ERURfRFRCWyA9XS9kIiAkY29uZmlnCisJCQkJCWVjaG8gIkNPTkZJR19BUk1fQVBQRU5ERURfRFRCPXkiID4+ICRjb25maWcKKwkJCQkJZWNobyAiIyBDT05GSUdfQVJNX0FUQUdfRFRCX0NPTVBBVCBpcyBub3Qgc2V0IiA+PiAkY29uZmlnCisJCQkJZmkKKwkJCQk7OworCQkJCSopCisJCQkJYmJlcnJvciAiS0VSTkVMX0RFVklDRVRSRUVfQlVORExFIGlzIG5vdCBzdXBwb3J0ZWQgZm9yICR7QVJDSH0uIEN1cnJlbnRseSBpdCBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgJ0FSTScuIgorCQkJZXNhYworCQllbHNlCisJCQliYmVycm9yICdUaGUgS0VSTkVMX0RFVklDRVRSRUVfQlVORExFIHJlcXVpcmVzIHRoZSBLRVJORUxfSU1BR0VUWVBFIHRvIGNvbnRhaW4gekltYWdlLicKKwkJZmkKKwlmaQorfQorCitkb19jb21waWxlX2FwcGVuZCgpIHsKKwlmb3IgRFRCIGluICR7S0VSTkVMX0RFVklDRVRSRUV9OyBkbworCQlEVEI9YG5vcm1hbGl6ZV9kdGIgIiR7RFRCfSJgCisJCW9lX3J1bm1ha2UgJHtEVEJ9CisJZG9uZQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlmb3IgRFRCIGluICR7S0VSTkVMX0RFVklDRVRSRUV9OyBkbworCQlEVEI9YG5vcm1hbGl6ZV9kdGIgIiR7RFRCfSJgCisJCURUQl9FWFQ9JHtEVEIjIyoufQorCQlEVEJfUEFUSD1gZ2V0X3JlYWxfZHRiX3BhdGhfaW5fa2VybmVsICIke0RUQn0iYAorCQlEVEJfQkFTRV9OQU1FPWBiYXNlbmFtZSAke0RUQn0gLiIke0RUQl9FWFR9ImAKKwkJaW5zdGFsbCAtbSAwNjQ0ICR7RFRCX1BBVEh9ICR7RH0vJHtLRVJORUxfSU1BR0VERVNUfS8ke0RUQl9CQVNFX05BTUV9LiR7RFRCX0VYVH0KKwkJZm9yIHR5cGUgaW4gJHtLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFfTsgZG8KKwkJCXN5bWxpbmtfbmFtZT0ke3R5cGV9Ii0iJHtLRVJORUxfSU1BR0VfU1lNTElOS19OQU1FfQorCQkJRFRCX1NZTUxJTktfTkFNRT1gZWNobyAke3N5bWxpbmtfbmFtZX0gfCBzZWQgInMvJHtNQUNISU5FfS8ke0RUQl9CQVNFX05BTUV9L2ciYAorCQkJbG4gLXNmICR7RFRCX0JBU0VfTkFNRX0uJHtEVEJfRVhUfSAke0R9LyR7S0VSTkVMX0lNQUdFREVTVH0vZGV2aWNldHJlZS0ke0RUQl9TWU1MSU5LX05BTUV9LiR7RFRCX0VYVH0KKworCQkJaWYgWyAiJHR5cGUiID0gInpJbWFnZSIgXSAmJiBbICIke0tFUk5FTF9ERVZJQ0VUUkVFX0JVTkRMRX0iID0gIjEiIF07IHRoZW4KKwkJCQljYXQgJHtEfS8ke0tFUk5FTF9JTUFHRURFU1R9LyR0eXBlIFwKKwkJCQkJJHtEfS8ke0tFUk5FTF9JTUFHRURFU1R9LyR7RFRCX0JBU0VfTkFNRX0uJHtEVEJfRVhUfSBcCisJCQkJCT4gJHtEfS8ke0tFUk5FTF9JTUFHRURFU1R9LyR0eXBlLSR7RFRCX0JBU0VfTkFNRX0uJHtEVEJfRVhUfS5iaW4KKwkJCWZpCisJCWRvbmUKKwlkb25lCit9CisKK2RvX2RlcGxveV9hcHBlbmQoKSB7CisJZm9yIERUQiBpbiAke0tFUk5FTF9ERVZJQ0VUUkVFfTsgZG8KKwkJRFRCPWBub3JtYWxpemVfZHRiICIke0RUQn0iYAorCQlEVEJfRVhUPSR7RFRCIyMqLn0KKwkJRFRCX0JBU0VfTkFNRT1gYmFzZW5hbWUgJHtEVEJ9IC4iJHtEVEJfRVhUfSJgCisJCWZvciB0eXBlIGluICR7S0VSTkVMX0lNQUdFVFlQRV9GT1JfTUFLRX07IGRvCisJCQliYXNlX25hbWU9JHt0eXBlfSItIiR7S0VSTkVMX0lNQUdFX0JBU0VfTkFNRX0KKwkJCXN5bWxpbmtfbmFtZT0ke3R5cGV9Ii0iJHtLRVJORUxfSU1BR0VfU1lNTElOS19OQU1FfQorCQkJRFRCX05BTUU9YGVjaG8gJHtiYXNlX25hbWV9IHwgc2VkICJzLyR7TUFDSElORX0vJHtEVEJfQkFTRV9OQU1FfS9nImAKKwkJCURUQl9TWU1MSU5LX05BTUU9YGVjaG8gJHtzeW1saW5rX25hbWV9IHwgc2VkICJzLyR7TUFDSElORX0vJHtEVEJfQkFTRV9OQU1FfS9nImAKKwkJCURUQl9QQVRIPWBnZXRfcmVhbF9kdGJfcGF0aF9pbl9rZXJuZWwgIiR7RFRCfSJgCisJCQlpbnN0YWxsIC1kICR7REVQTE9ZRElSfQorCQkJaW5zdGFsbCAtbSAwNjQ0ICR7RFRCX1BBVEh9ICR7REVQTE9ZRElSfS8ke0RUQl9OQU1FfS4ke0RUQl9FWFR9CisJCQlsbiAtc2YgJHtEVEJfTkFNRX0uJHtEVEJfRVhUfSAke0RFUExPWURJUn0vJHtEVEJfU1lNTElOS19OQU1FfS4ke0RUQl9FWFR9CisJCQlsbiAtc2YgJHtEVEJfTkFNRX0uJHtEVEJfRVhUfSAke0RFUExPWURJUn0vJHtEVEJfQkFTRV9OQU1FfS4ke0RUQl9FWFR9CisKKwkJCWlmIFsgIiR0eXBlIiA9ICJ6SW1hZ2UiIF0gJiYgWyAiJHtLRVJORUxfREVWSUNFVFJFRV9CVU5ETEV9IiA9ICIxIiBdOyB0aGVuCisJCQkJY2F0ICR7REVQTE9ZRElSfS8kdHlwZSBcCisJCQkJCSR7REVQTE9ZRElSfS8ke0RUQl9OQU1FfS4ke0RUQl9FWFR9IFwKKwkJCQkJPiAke0RFUExPWURJUn0vJHtEVEJfTkFNRX0uJHtEVEJfRVhUfS5iaW4KKwkJCQlsbiAtc2YgJHtEVEJfTkFNRX0uJHtEVEJfRVhUfS5iaW4gJHtERVBMT1lESVJ9LyR0eXBlLSR7RFRCX0JBU0VfTkFNRX0uJHtEVEJfRVhUfS5iaW4KKworCQkJCWlmIFsgLWUgIiR7S0VSTkVMX09VVFBVVF9ESVJ9LyR7dHlwZX0uaW5pdHJhbWZzIiBdOyB0aGVuCisJCQkJCWNhdCAke0tFUk5FTF9PVVRQVVRfRElSfS8ke3R5cGV9LmluaXRyYW1mcyBcCisJCQkJCQkke0RFUExPWURJUn0vJHtEVEJfTkFNRX0uJHtEVEJfRVhUfSBcCisJCQkJCQk+ICR7REVQTE9ZRElSfS8ke3R5cGV9LSR7SU5JVFJBTUZTX0JBU0VfTkFNRX0tJHtEVEJfQkFTRV9OQU1FfS4ke0RUQl9FWFR9LmJpbgorCQkJCQlsbiAtc2YgJHt0eXBlfS0ke0lOSVRSQU1GU19CQVNFX05BTUV9LSR7RFRCX0JBU0VfTkFNRX0uJHtEVEJfRVhUfS5iaW4gXAorCQkJCQkgICAgICAgJHtERVBMT1lESVJ9LyR7dHlwZX0taW5pdHJhbWZzLSR7RFRCX0JBU0VfTkFNRX0uJHtEVEJfRVhUfS0ke01BQ0hJTkV9LmJpbgorCQkJCWZpCisJCQlmaQorCQlkb25lCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwtZml0aW1hZ2UuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLWZpdGltYWdlLmJiY2xhc3MKaW5kZXggMTc5MTg1Yi4uOWJhZjM5OSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwtZml0aW1hZ2UuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC1maXRpbWFnZS5iYmNsYXNzCkBAIC03LDkgKzcsMTIgQEAKICAgICAgICAgZGVwZW5kcyA9ICIlcyB1LWJvb3QtbWtpbWFnZS1uYXRpdmUgZHRjLW5hdGl2ZSIgJSBkZXBlbmRzCiAgICAgICAgIGQuc2V0VmFyKCJERVBFTkRTIiwgZGVwZW5kcykKIAotICAgICAgICBpZiBkLmdldFZhcigiVUJPT1RfQVJDSCIpID09ICJtaXBzIjoKKyAgICAgICAgdWFyY2ggPSBkLmdldFZhcigiVUJPT1RfQVJDSCIpCisgICAgICAgIGlmIHVhcmNoID09ICJhcm02NCI6CisgICAgICAgICAgICByZXBsYWNlbWVudHR5cGUgPSAiSW1hZ2UiCisgICAgICAgIGVsaWYgdWFyY2ggPT0gIm1pcHMiOgogICAgICAgICAgICAgcmVwbGFjZW1lbnR0eXBlID0gInZtbGludXouYmluIgotICAgICAgICBlbGlmIGQuZ2V0VmFyKCJVQk9PVF9BUkNIIikgPT0gIng4NiI6CisgICAgICAgIGVsaWYgdWFyY2ggPT0gIng4NiI6CiAgICAgICAgICAgICByZXBsYWNlbWVudHR5cGUgPSAiYnpJbWFnZSIKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJlcGxhY2VtZW50dHlwZSA9ICJ6SW1hZ2UiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC1tb2R1bGUtc3BsaXQuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLW1vZHVsZS1zcGxpdC5iYmNsYXNzCmluZGV4IDVlMTBkY2YuLjEwMzU1MjUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLW1vZHVsZS1zcGxpdC5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLW1vZHVsZS1zcGxpdC5iYmNsYXNzCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgIHRmID0gdGVtcGZpbGUubWtzdGVtcCgpCiAgICAgICAgIHRtcGZpbGUgPSB0ZlsxXQogICAgICAgICBjbWQgPSAiJXNvYmpjb3B5IC1qIC5tb2RpbmZvIC1PIGJpbmFyeSAlcyAlcyIgJSAoZC5nZXRWYXIoIkhPU1RfUFJFRklYIikgb3IgIiIsIGZpbGUsIHRtcGZpbGUpCi0gICAgICAgIHN1YnByb2Nlc3MuY2FsbChjbWQsIHNoZWxsPVRydWUpCisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChjbWQsIHNoZWxsPVRydWUpCiAgICAgICAgIGYgPSBvcGVuKHRtcGZpbGUpCiAgICAgICAgIGwgPSBmLnJlYWQoKS5zcGxpdCgiXDAwMCIpCiAgICAgICAgIGYuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwtdWJvb3QuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLXVib290LmJiY2xhc3MKaW5kZXggODdmMDI2NS4uMjM2NDA1MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwtdWJvb3QuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC11Ym9vdC5iYmNsYXNzCkBAIC0zLDYgKzMsMTAgQEAKIAkJdm1saW51eF9wYXRoPSJhcmNoLyR7QVJDSH0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXgiCiAJCWxpbnV4X3N1ZmZpeD0iIgogCQlsaW51eF9jb21wPSJub25lIgorCWVsaWYgWyAtZSBhcmNoLyR7QVJDSH0vYm9vdC9JbWFnZSBdIDsgdGhlbgorCQl2bWxpbnV4X3BhdGg9InZtbGludXgiCisJCWxpbnV4X3N1ZmZpeD0iIgorCQlsaW51eF9jb21wPSJub25lIgogCWVsaWYgWyAtZSBhcmNoLyR7QVJDSH0vYm9vdC92bWxpbnV6LmJpbiBdOyB0aGVuCiAJCXJtIC1mIGxpbnV4LmJpbgogCQljcCAtbCBhcmNoLyR7QVJDSH0vYm9vdC92bWxpbnV6LmJpbiBsaW51eC5iaW4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLXlvY3RvLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC15b2N0by5iYmNsYXNzCmluZGV4IDFjYTA3NTYuLjY2M2M2NTUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLXlvY3RvLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwteW9jdG8uYmJjbGFzcwpAQCAtMTA3LDIwICsxMDcsMzEgQEAKIAkJCQljbXAgIiR7V09SS0RJUn0vZGVmY29uZmlnIiAiJHtTfS9hcmNoLyR7QVJDSH0vY29uZmlncy8ke0tCVUlMRF9ERUZDT05GSUd9IgogCQkJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgogCQkJCQliYndhcm4gImRlZmNvbmZpZyBkZXRlY3RlZCBpbiBXT1JLRElSLiAke0tCVUlMRF9ERUZDT05GSUd9IHNraXBwZWQiCisJCQkJZWxzZQorCQkJCQljcCAtZiAke1N9L2FyY2gvJHtBUkNIfS9jb25maWdzLyR7S0JVSUxEX0RFRkNPTkZJR30gJHtXT1JLRElSfS9kZWZjb25maWcKIAkJCQlmaQogCQkJZWxzZQogCQkJCWNwIC1mICR7U30vYXJjaC8ke0FSQ0h9L2NvbmZpZ3MvJHtLQlVJTERfREVGQ09ORklHfSAke1dPUktESVJ9L2RlZmNvbmZpZwotCQkJCXNjY3M9IiR7V09SS0RJUn0vZGVmY29uZmlnIgogCQkJZmkKKwkJCXNjY3M9IiR7V09SS0RJUn0vZGVmY29uZmlnIgogCQllbHNlCi0JCQliYmZhdGFsICJBIEtCVUlMRF9ERUNPTkZJRyAnJHtLQlVJTERfREVGQ09ORklHfScgd2FzIHNwZWNpZmllZCwgYnV0IG5vdCBwcmVzZW50IGluIHRoZSBzb3VyY2UgdHJlZSIKKwkJCWJiZmF0YWwgIkEgS0JVSUxEX0RFRkNPTkZJRyAnJHtLQlVJTERfREVGQ09ORklHfScgd2FzIHNwZWNpZmllZCwgYnV0IG5vdCBwcmVzZW50IGluIHRoZSBzb3VyY2UgdHJlZSIKIAkJZmkKIAlmaQogCi0Jc2Njcz0iJHNjY3MgJHtAIiAiLmpvaW4oZmluZF9zY2NzKGQpKX0iCisJc2Njc19mcm9tX3NyY191cmk9IiR7QCIgIi5qb2luKGZpbmRfc2NjcyhkKSl9IgogCXBhdGNoZXM9IiR7QCIgIi5qb2luKGZpbmRfcGF0Y2hlcyhkKSl9IgogCWZlYXRfZGlycz0iJHtAIiAiLmpvaW4oZmluZF9rZXJuZWxfZmVhdHVyZV9kaXJzKGQpKX0iCiAKKwkjIGEgcXVpY2sgY2hlY2sgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGhhdmUgZHVwbGljYXRlIGRlZmNvbmZpZ3MKKwkjIElmIHRoZXJlJ3MgYSBkZWZjb25maWcgaW4gdGhlIFNSQ19VUkksIGRpZCB3ZSBhbHNvIGhhdmUgb25lIGZyb20KKwkjIHRoZSBLQlVJTERfREVGQ09ORklHIHByb2Nlc3NpbmcgYWJvdmUgPworCWlmIFsgLW4gIiRzY2NzIiBdOyB0aGVuCisJICAgICMgd2UgZGlkIGhhdmUgYSBkZWZjb25maWcgZnJvbSBhYm92ZS4gcmVtb3ZlIGFueSB0aGF0IG1pZ2h0IGJlIGluIHRoZSBzcmNfdXJpCisJICAgIHNjY3NfZnJvbV9zcmNfdXJpPSQoZWNobyAkc2Njc19mcm9tX3NyY191cmkgfCBhd2sgJ3sgaWYgKCQwIT0iZGVmY29uZmlnIikgeyBwcmludCAkMCB9IH0nIFJTPScgJykKKwlmaQorCXNjY3M9IiRzY2NzICRzY2NzX2Zyb21fc3JjX3VyaSIKKwogCSMgY2hlY2sgZm9yIGZlYXR1cmUgZGlyZWN0b3JpZXMvcmVwb3MvYnJhbmNoZXMgdGhhdCB3ZXJlIHBhcnQgb2YgdGhlCiAJIyBTUkNfVVJJLiBJZiB0aGV5IHdlcmUgc3VwcGxpZWQsIHdlIGNvbnZlcnQgdGhlbSBpbnRvIGluY2x1ZGUgZGlyZWN0aXZlcwogCSMgZm9yIHRoZSB1cGRhdGUgcGFydCBvZiB0aGUgcHJvY2VzcwpAQCAtMTQzLDYgKzE1NCwxMiBAQAogCiAJIyBleHBhbmQga2VybmVsIGZlYXR1cmVzIGludG8gdGhlaXIgZnVsbCBwYXRoIGVxdWl2YWxlbnRzCiAJYnNwX2RlZmluaXRpb249JChzcHAgJHtpbmNsdWRlc30gLS1maW5kIC1ES01BQ0hJTkU9JHtLTUFDSElORX0gLURLVFlQRT0ke0xJTlVYX0tFUk5FTF9UWVBFfSkKKwlpZiBbIC16ICIkYnNwX2RlZmluaXRpb24iIF07IHRoZW4KKwkJZWNobyAiJHNjY3MiIHwgZ3JlcCAtcSBkZWZjb25maWcKKwkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCQliYmZhdGFsX2xvZyAiQ291bGQgbm90IGxvY2F0ZSBCU1AgZGVmaW5pdGlvbiBmb3IgJHtLTUFDSElORX0vJHtMSU5VWF9LRVJORUxfVFlQRX0gYW5kIG5vIGRlZmNvbmZpZyB3YXMgcHJvdmlkZWQiCisJCWZpCisJZmkKIAltZXRhX2Rpcj0kKGtnaXQgLS1tZXRhKQogCiAJIyBydW4xOiBwdWxsIGFsbCB0aGUgY29uZmlndXJhdGlvbiBmcmFnbWVudHMsIG5vIG1hdHRlciB3aGVyZSB0aGV5IGNvbWUgZnJvbQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLmJiY2xhc3MKaW5kZXggY2UyY2FiNi4uMTRmNDFlOSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC5iYmNsYXNzCkBAIC0yLDcgKzIsNyBAQAogCiBQUk9WSURFUyArPSAidmlydHVhbC9rZXJuZWwiCiBERVBFTkRTICs9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2Mga21vZC1uYXRpdmUgYmMtbmF0aXZlIGx6b3AtbmF0aXZlIgotUEFDS0FHRV9XUklURV9ERVBTICs9ICJkZXBtb2R3cmFwcGVyLWNyb3NzIHZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcy1uYXRpdmUiCitQQUNLQUdFX1dSSVRFX0RFUFMgKz0gImRlcG1vZHdyYXBwZXItY3Jvc3MiCiAKIGRvX2RlcGxveVtkZXBlbmRzXSArPSAiZGVwbW9kd3JhcHBlci1jcm9zczpkb19wb3B1bGF0ZV9zeXNyb290IgogCkBAIC01Nyw3ICs1Nyw3IEBACiAKICAgICAgICAgZC5hcHBlbmRWYXIoJ1BBQ0tBR0VTJywgJyAnICsgJ2tlcm5lbC1pbWFnZS0nICsgdHlwZWxvd2VyKQogCi0gICAgICAgIGQuc2V0VmFyKCdGSUxFU19rZXJuZWwtaW1hZ2UtJyArIHR5cGVsb3dlciwgJy8nICsgaW1hZ2VkZXN0ICsgJy8nICsgdHlwZSArICctJHtLRVJORUxfVkVSU0lPTl9OQU1FfScpCisgICAgICAgIGQuc2V0VmFyKCdGSUxFU19rZXJuZWwtaW1hZ2UtJyArIHR5cGVsb3dlciwgJy8nICsgaW1hZ2VkZXN0ICsgJy8nICsgdHlwZSArICctJHtLRVJORUxfVkVSU0lPTl9OQU1FfScgKyAnIC8nICsgaW1hZ2VkZXN0ICsgJy8nICsgdHlwZSkKIAogICAgICAgICBkLmFwcGVuZFZhcignUkRFUEVORFNfa2VybmVsLWltYWdlJywgJyAnICsgJ2tlcm5lbC1pbWFnZS0nICsgdHlwZWxvd2VyKQogCkBAIC02NSwxMyArNjUsNiBAQAogCiAgICAgICAgIGQuc2V0VmFyKCdBTExPV19FTVBUWV9rZXJuZWwtaW1hZ2UtJyArIHR5cGVsb3dlciwgJzEnKQogCi0gICAgICAgIHByaW9yaXR5ID0gZC5nZXRWYXIoJ0tFUk5FTF9QUklPUklUWScpCi0gICAgICAgIHBvc3RpbnN0ID0gJyMhL2Jpbi9zaFxuJyArICd1cGRhdGUtYWx0ZXJuYXRpdmVzIC0taW5zdGFsbCAvJyArIGltYWdlZGVzdCArICcvJyArIHR5cGUgKyAnICcgKyB0eXBlICsgJyAnICsgdHlwZSArICctJHtLRVJORUxfVkVSU0lPTl9OQU1FfSAnICsgcHJpb3JpdHkgKyAnIHx8IHRydWUnICsgJ1xuJwotICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0X2tlcm5lbC1pbWFnZS0nICsgdHlwZWxvd2VyLCBwb3N0aW5zdCkKLQotICAgICAgICBwb3N0cm0gPSAnIyEvYmluL3NoXG4nICsgJ3VwZGF0ZS1hbHRlcm5hdGl2ZXMgLS1yZW1vdmUnICsgJyAnICsgdHlwZSArICcgJyArIHR5cGUgKyAnLSR7S0VSTkVMX1ZFUlNJT05fTkFNRX0gfHwgdHJ1ZScgKyAnXG4nCi0gICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtX2tlcm5lbC1pbWFnZS0nICsgdHlwZWxvd2VyLCBwb3N0cm0pCi0KICAgICBpbWFnZSA9IGQuZ2V0VmFyKCdJTklUUkFNRlNfSU1BR0UnKQogICAgIGlmIGltYWdlOgogICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2J1bmRsZV9pbml0cmFtZnMnLCAnZGVwZW5kcycsICcgJHtJTklUUkFNRlNfSU1BR0V9OmRvX2ltYWdlX2NvbXBsZXRlJykKQEAgLTEzNywxMCArMTMwLDYgQEAKIGV4cG9ydCBLQlVJTERfQlVJTERfVVNFUiA9ICJvZS11c2VyIgogZXhwb3J0IEtCVUlMRF9CVUlMRF9IT1NUID0gIm9lLWhvc3QiCiAKLUtFUk5FTF9QUklPUklUWSA/PSAiJHtAaW50KGQuZ2V0VmFyKCdQVicpLnNwbGl0KCctJylbMF0uc3BsaXQoJysnKVswXS5zcGxpdCgnLicpWzBdKSAqIDEwMDAwICsgXAotICAgICAgICAgICAgICAgICAgICAgICBpbnQoZC5nZXRWYXIoJ1BWJykuc3BsaXQoJy0nKVswXS5zcGxpdCgnKycpWzBdLnNwbGl0KCcuJylbMV0pICogMTAwICsgXAotICAgICAgICAgICAgICAgICAgICAgICBpbnQoZC5nZXRWYXIoJ1BWJykuc3BsaXQoJy0nKVswXS5zcGxpdCgnKycpWzBdLnNwbGl0KCcuJylbLTFdKX0iCi0KIEtFUk5FTF9SRUxFQVNFID89ICIke0tFUk5FTF9WRVJTSU9OfSIKIAogIyBUaGUgZGlyZWN0b3J5IHdoZXJlIGJ1aWx0IGtlcm5lbCBsaWVzIGluIHRoZSBrZXJuZWwgdHJlZQpAQCAtMTY2LDcgKzE1NSw3IEBACiAjIFNvbWUgTGludXgga2VybmVsIGNvbmZpZ3VyYXRpb25zIG5lZWQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIG9uIHRoZSBjb21tYW5kIGxpbmUKIEtFUk5FTF9FWFRSQV9BUkdTID89ICIiCiAKLUVYVFJBX09FTUFLRSA9ICIgSE9TVENDPSIke0JVSUxEX0NDfSIgSE9TVENQUD0iJHtCVUlMRF9DUFB9IiIKK0VYVFJBX09FTUFLRSA9ICIgSE9TVENDPSIke0JVSUxEX0NDfSAke0JVSUxEX0NGTEFHU30gJHtCVUlMRF9MREZMQUdTfSIgSE9TVENQUD0iJHtCVUlMRF9DUFB9IiIKIEtFUk5FTF9BTFRfSU1BR0VUWVBFID8/PSAiIgogCiBjb3B5X2luaXRyYW1mcygpIHsKQEAgLTI1NSw4ICsyNDQsMzYgQEAKIAogYWRkdGFzayBidW5kbGVfaW5pdHJhbWZzIGFmdGVyIGRvX2luc3RhbGwgYmVmb3JlIGRvX2RlcGxveQogCitnZXRfY2Nfb3B0aW9uICgpIHsKKwkJIyBDaGVjayBpZiBLRVJORUxfQ0Mgc3VwcG9ydHMgdGhlIG9wdGlvbiAiZmlsZS1wcmVmaXgtbWFwIi4KKwkJIyBUaGlzIG9wdGlvbiBhbGxvd3MgdXMgdG8gYnVpbGQgaW1hZ2VzIHdpdGggX19GSUxFX18gdmFsdWVzIHRoYXQgZG8gbm90CisJCSMgY29udGFpbiB0aGUgaG9zdCBidWlsZCBwYXRoLgorCQlpZiAke0tFUk5FTF9DQ30gLVEgLS1oZWxwPWpvaW5lZCB8IGdyZXAgLXEgIlwtZmZpbGUtcHJlZml4LW1hcD08b2xkPW5ldz4iOyB0aGVuCisJCQllY2hvICItZmZpbGUtcHJlZml4LW1hcD0ke1N9PS9rZXJuZWwtc291cmNlLyIKKwkJZmkKK30KKwoga2VybmVsX2RvX2NvbXBpbGUoKSB7CiAJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MgTUFDSElORQorCWlmIFsgIiRCVUlMRF9SRVBST0RVQ0lCTEVfQklOQVJJRVMiID0gIjEiIF07IHRoZW4KKwkJIyBrZXJuZWwgc291cmNlcyBkbyBub3QgdXNlIGRvX3VucGFjaywgc28gU09VUkNFX0RBVEVfRVBPQ0ggbWF5IG5vdAorCQkjIGJlIHNldC4uLi4KKwkJaWYgWyAiJFNPVVJDRV9EQVRFX0VQT0NIIiA9ICIwIiBdOyB0aGVuCisJCQlvbGRkaXI9YHB3ZGAKKwkJCWNkICR7U30KKwkJCVNPVVJDRV9EQVRFX0VQT0NIPWBnaXQgbG9nICAtMSAtLXByZXR0eT0lY3RgCisJCQkjIGdpdCByZXBvIG5vdCBndWFyYW50ZWVkLCBzbyBmYWxsIGJhY2sgdG8gUkVQUk9EVUNJQkxFX1RJTUVTVEFNUF9ST09URlMKKwkJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQkJCVNPVVJDRV9EQVRFX0VQT0NIPSR7UkVQUk9EVUNJQkxFX1RJTUVTVEFNUF9ST09URlN9CisJCQlmaQorCQkJY2QgJG9sZGRpcgorCQlmaQorCisJCXRzPWBMQ19BTEw9QyBkYXRlIC1kIEAkU09VUkNFX0RBVEVfRVBPQ0hgCisJCWV4cG9ydCBLQlVJTERfQlVJTERfVElNRVNUQU1QPSIkdHMiCisJCWV4cG9ydCBLQ09ORklHX05PVElNRVNUQU1QPTEKKwkJYmJub3RlICJLQlVJTERfQlVJTERfVElNRVNUQU1QOiAkdHMiCisJZmkKIAkjIFRoZSAkdXNlX2FsdGVybmF0ZV9pbml0cmQgaXMgb25seSBzZXQgZnJvbQogCSMgZG9fYnVuZGxlX2luaXRyYW1mcygpIFRoaXMgdmFyaWFibGUgaXMgc3BlY2lmaWNhbGx5IGZvciB0aGUKIAkjIGNhc2Ugd2hlcmUgd2UgYXJlIG1ha2luZyBhIHNlY29uZCBwYXNzIGF0IHRoZSBrZXJuZWwKQEAgLTI3MCwyMCArMjg3LDIyIEBACiAJCWNvcHlfaW5pdHJhbWZzCiAJCXVzZV9hbHRlcm5hdGVfaW5pdHJkPUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSR7Qn0vdXNyLyR7SU5JVFJBTUZTX0lNQUdFX05BTUV9LmNwaW8KIAlmaQorCWNjX2V4dHJhPSQoZ2V0X2NjX29wdGlvbikKIAlmb3IgdHlwZWZvcm1ha2UgaW4gJHtLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFfSA7IGRvCi0JCW9lX3J1bm1ha2UgJHt0eXBlZm9ybWFrZX0gQ0M9IiR7S0VSTkVMX0NDfSIgTEQ9IiR7S0VSTkVMX0xEfSIgJHtLRVJORUxfRVhUUkFfQVJHU30gJHVzZV9hbHRlcm5hdGVfaW5pdHJkCisJCW9lX3J1bm1ha2UgJHt0eXBlZm9ybWFrZX0gQ0M9IiR7S0VSTkVMX0NDfSAkY2NfZXh0cmEgIiBMRD0iJHtLRVJORUxfTER9IiAke0tFUk5FTF9FWFRSQV9BUkdTfSAkdXNlX2FsdGVybmF0ZV9pbml0cmQKIAlkb25lCiAJIyB2bWxpbnV4Lmd6IGlzIG5vdCBidWlsdCBieSBrZXJuZWwKIAlpZiAoZWNobyAiJHtLRVJORUxfSU1BR0VUWVBFU30iIHwgZ3JlcCAtd3EgInZtbGludXhcLmd6Iik7IHRoZW4KIAkJbWtkaXIgLXAgIiR7S0VSTkVMX09VVFBVVF9ESVJ9IgotCQlnemlwIC05YyA8ICR7Qn0vdm1saW51eCA+ICIke0tFUk5FTF9PVVRQVVRfRElSfS92bWxpbnV4Lmd6IgorCQlnemlwIC05Y24gPCAke0J9L3ZtbGludXggPiAiJHtLRVJORUxfT1VUUFVUX0RJUn0vdm1saW51eC5neiIKIAlmaQogfQogCiBkb19jb21waWxlX2tlcm5lbG1vZHVsZXMoKSB7CiAJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MgTUFDSElORQogCWlmIChncmVwIC1xIC1pIC1lICdeQ09ORklHX01PRFVMRVM9eSQnICR7Qn0vLmNvbmZpZyk7IHRoZW4KLQkJb2VfcnVubWFrZSAtQyAke0J9ICR7UEFSQUxMRUxfTUFLRX0gbW9kdWxlcyBDQz0iJHtLRVJORUxfQ0N9IiBMRD0iJHtLRVJORUxfTER9IiAke0tFUk5FTF9FWFRSQV9BUkdTfQorCQljY19leHRyYT0kKGdldF9jY19vcHRpb24pCisJCW9lX3J1bm1ha2UgLUMgJHtCfSAke1BBUkFMTEVMX01BS0V9IG1vZHVsZXMgQ0M9IiR7S0VSTkVMX0NDfSAkY2NfZXh0cmEgIiBMRD0iJHtLRVJORUxfTER9IiAke0tFUk5FTF9FWFRSQV9BUkdTfQogCiAJCSMgTW9kdWxlLnN5bXZlcnMgZ2V0cyB1cGRhdGVkIGR1cmluZyB0aGUgCiAJCSMgYnVpbGRpbmcgb2YgdGhlIGtlcm5lbCBtb2R1bGVzLiBXZSBuZWVkIHRvCkBAIC0zMjAsNiArMzM5LDcgQEAKIAlpbnN0YWxsIC1kICR7RH0vYm9vdAogCWZvciB0eXBlIGluICR7S0VSTkVMX0lNQUdFVFlQRVN9IDsgZG8KIAkJaW5zdGFsbCAtbSAwNjQ0ICR7S0VSTkVMX09VVFBVVF9ESVJ9LyR7dHlwZX0gJHtEfS8ke0tFUk5FTF9JTUFHRURFU1R9LyR7dHlwZX0tJHtLRVJORUxfVkVSU0lPTn0KKwkJbG4gLXNmICR7dHlwZX0tJHtLRVJORUxfVkVSU0lPTn0gJHtEfS8ke0tFUk5FTF9JTUFHRURFU1R9LyR7dHlwZX0KIAlkb25lCiAJaW5zdGFsbCAtbSAwNjQ0IFN5c3RlbS5tYXAgJHtEfS9ib290L1N5c3RlbS5tYXAtJHtLRVJORUxfVkVSU0lPTn0KIAlpbnN0YWxsIC1tIDA2NDQgLmNvbmZpZyAke0R9L2Jvb3QvY29uZmlnLSR7S0VSTkVMX1ZFUlNJT059CkBAIC01NzUsMTkgKzU5NSwyNyBAQAogYWRkdGFzayBzdHJpcCBiZWZvcmUgZG9fc2l6ZWNoZWNrIGFmdGVyIGRvX2tlcm5lbF9saW5rX2ltYWdlcwogCiAjIFN1cHBvcnQgY2hlY2tpbmcgdGhlIGtlcm5lbCBzaXplIHNpbmNlIHNvbWUga2VybmVscyBuZWVkIHRvIHJlc2lkZSBpbiBwYXJ0aXRpb25zCi0jIHdpdGggYSBmaXhlZCBsZW5ndGggb3IgdGhlcmUgaXMgYSBsaW1pdCBpbiB0cmFuc2ZlcnJpbmcgdGhlIGtlcm5lbCB0byBtZW1vcnkKKyMgd2l0aCBhIGZpeGVkIGxlbmd0aCBvciB0aGVyZSBpcyBhIGxpbWl0IGluIHRyYW5zZmVycmluZyB0aGUga2VybmVsIHRvIG1lbW9yeS4KKyMgSWYgbW9yZSB0aGFuIG9uZSBpbWFnZSB0eXBlIGlzIGVuYWJsZWQsIHdhcm4gb24gYW55IHRoYXQgZG9uJ3QgZml0IGJ1dCBvbmx5IGZhaWwKKyMgaWYgbm9uZSBmaXQuCiBkb19zaXplY2hlY2soKSB7CiAJaWYgWyAhIC16ICIke0tFUk5FTF9JTUFHRV9NQVhTSVpFfSIgXTsgdGhlbgogCQlpbnZhbGlkPWBlY2hvICR7S0VSTkVMX0lNQUdFX01BWFNJWkV9IHwgc2VkICdzL1swLTldLy9nJ2AKIAkJaWYgWyAtbiAiJGludmFsaWQiIF07IHRoZW4KLQkJCWRpZSAiSW52YWxpZCBLRVJORUxfSU1BR0VfTUFYU0laRTogJHtLRVJORUxfSU1BR0VfTUFYU0laRX0sIHNob3VsZCBiZSBhbiBpbnRlZ2VyeCAoVGhlIHVuaXQgaXMgS2J5dGVzKSIKKwkJCWRpZSAiSW52YWxpZCBLRVJORUxfSU1BR0VfTUFYU0laRTogJHtLRVJORUxfSU1BR0VfTUFYU0laRX0sIHNob3VsZCBiZSBhbiBpbnRlZ2VyIChUaGUgdW5pdCBpcyBLYnl0ZXMpIgogCQlmaQorCQlhdF9sZWFzdF9vbmVfZml0cz0KIAkJZm9yIHR5cGUgaW4gJHtLRVJORUxfSU1BR0VUWVBFU30gOyBkbwogCQkJc2l6ZT1gZHUgLWtzICR7Qn0vJHtLRVJORUxfT1VUUFVUX0RJUn0vJHR5cGUgfCBhd2sgJ3twcmludCAkMX0nYAogCQkJaWYgWyAkc2l6ZSAtZ2UgJHtLRVJORUxfSU1BR0VfTUFYU0laRX0gXTsgdGhlbgotCQkJCXdhcm4gIlRoaXMga2VybmVsICR0eXBlIChzaXplPSRzaXplKEspID4gJHtLRVJORUxfSU1BR0VfTUFYU0laRX0oSykpIGlzIHRvbyBiaWcgZm9yIHlvdXIgZGV2aWNlLiBQbGVhc2UgcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBrZXJuZWwgYnkgbWFraW5nIG1vcmUgb2YgaXQgbW9kdWxhci4iCisJCQkJYmJ3YXJuICJUaGlzIGtlcm5lbCAkdHlwZSAoc2l6ZT0kc2l6ZShLKSA+ICR7S0VSTkVMX0lNQUdFX01BWFNJWkV9KEspKSBpcyB0b28gYmlnIGZvciB5b3VyIGRldmljZS4iCisJCQllbHNlCisJCQkJYXRfbGVhc3Rfb25lX2ZpdHM9eQogCQkJZmkKIAkJZG9uZQorCQlpZiBbIC16ICIkYXRfbGVhc3Rfb25lX2ZpdHMiIF07IHRoZW4KKwkJCWRpZSAiQWxsIGtlcm5lbCBpbWFnZXMgYXJlIHRvbyBiaWcgZm9yIHlvdXIgZGV2aWNlLiBQbGVhc2UgcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBrZXJuZWwgYnkgbWFraW5nIG1vcmUgb2YgaXQgbW9kdWxhci4iCisJCWZpCiAJZmkKIH0KIGRvX3NpemVjaGVja1tkaXJzXSA9ICIke0J9IgpAQCAtNjQyLDMgKzY3MCw2IEBACiBhZGR0YXNrIGRlcGxveSBhZnRlciBkb19wb3B1bGF0ZV9zeXNyb290IGRvX3BhY2thZ2VkYXRhCiAKIEVYUE9SVF9GVU5DVElPTlMgZG9fZGVwbG95CisKKyMgQWRkIHVzaW5nIERldmljZSBUcmVlIHN1cHBvcnQKK2luaGVyaXQga2VybmVsLWRldmljZXRyZWUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbGljZW5zZS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saWNlbnNlLmJiY2xhc3MKaW5kZXggYjFmZmZlNy4uZDM1MzExMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saWNlbnNlLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saWNlbnNlLmJiY2xhc3MKQEAgLTI1NSwxNCArMjU1LDkgQEAKICAgICAiIiIKIAogICAgIGRlcGVuZHMgPSBbXQotICAgIGJvb3RfZGVwZW5kc19zdHJpbmcgPSAiIgogICAgIHRhc2tkZXBkYXRhID0gZC5nZXRWYXIoIkJCX1RBU0tERVBEQVRBIiwgRmFsc2UpCi0gICAgIyBPbmx5IGJvb3RpbWcgYW5kIGJvb3RkaXJlY3RkaXNrIGluY2x1ZGUgdGhlIGRlcGVuZHMgZmxhZwotICAgIGJvb3RfdGFza3MgPSBbImRvX2Jvb3RpbWciLCAiZG9fYm9vdGRpcmVjdGRpc2siLF0KLQotICAgIGZvciB0YXNrIGluIGJvb3RfdGFza3M6Ci0gICAgICAgIGJvb3RfZGVwZW5kc19zdHJpbmcgPSAiJXMgJXMiICUgKGJvb3RfZGVwZW5kc19zdHJpbmcsCi0gICAgICAgICAgICAgICAgZC5nZXRWYXJGbGFnKHRhc2ssICJkZXBlbmRzIikgb3IgIiIpCisgICAgIyBPbmx5IGJvb3RpbWcgaW5jbHVkZXMgdGhlIGRlcGVuZHMgZmxhZworICAgIGJvb3RfZGVwZW5kc19zdHJpbmcgPSBkLmdldFZhckZsYWcoImRvX2Jvb3RpbWciLCAiZGVwZW5kcyIpIG9yICIiCiAgICAgYm9vdF9kZXBlbmRzID0gW2RlcC5zcGxpdCgiOiIpWzBdIGZvciBkZXAKICAgICAgICAgICAgICAgICBpbiBib290X2RlcGVuZHNfc3RyaW5nLnNwbGl0KCkKICAgICAgICAgICAgICAgICBpZiBub3QgZGVwLnNwbGl0KCI6IilbMF0uZW5kc3dpdGgoIi1uYXRpdmUiKV0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbGludXhsb2FkZXIuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbGludXhsb2FkZXIuYmJjbGFzcwppbmRleCAxMTdiMDMwLi44ZjMwZWIzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpbnV4bG9hZGVyLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saW51eGxvYWRlci5iYmNsYXNzCkBAIC0xLDUgKzEsOCBAQAorTERTT19UQ0xJQkMgPSAiZ2xpYmMiCitMRFNPX1RDTElCQ19saWJjLW11c2wgPSAibXVzbCIKK0xEU09fVENMSUJDX2xpYmMtYmFyZW1ldGFsID0gIm11c2wiCiAKLWxpbnV4bG9hZGVyICgpIHsKK2xpbnV4bG9hZGVyX2dsaWJjICgpIHsKIAljYXNlICR7VEFSR0VUX0FSQ0h9IGluCiAJCXBvd2VycGMgfCBtaWNyb2JsYXplICkKIAkJCWR5bmFtaWNfbG9hZGVyPSIke2Jhc2VfbGliZGlyfS9sZC5zby4xIgpAQCAtMjgsMyArMzEsNDAgQEAKIAllc2FjCiAJZWNobyAkZHluYW1pY19sb2FkZXIKIH0KKworbGludXhsb2FkZXJfbXVzbCAoKSB7CisJY2FzZSAke1RBUkdFVF9BUkNIfSBpbgorCQltaWNyb2JsYXplKiApCisJCQlkeW5hbWljX2xvYWRlcj0iJHtiYXNlX2xpYmRpcn0vbGQtbXVzbC1taWNyb2JsYXplJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnYmlnZW5kaWFuJywgJycsICdlbCcgLGQpfS5zby4xIgorCQkJOzsKKwkJbWlwcyogKQorCQkJZHluYW1pY19sb2FkZXI9IiR7YmFzZV9saWJkaXJ9L2xkLW11c2wtbWlwcyR7QUJJRVhURU5TSU9OfSR7TUlQU1BLR1NGWF9CWVRFfSR7TUlQU1BLR1NGWF9SNn0ke01JUFNQS0dTRlhfRU5ESUFOfSR7QFsnJywgJy1zZiddW2QuZ2V0VmFyKCdUQVJHRVRfRlBVJykgPT0gJ3NvZnQnXX0uc28uMSIKKwkJCTs7CisJCXBvd2VycGMgKQorCQkJZHluYW1pY19sb2FkZXI9IiR7YmFzZV9saWJkaXJ9L2xkLW11c2wtcG93ZXJwYyR7QFsnJywgJy1zZiddW2QuZ2V0VmFyKCdUQVJHRVRfRlBVJykgPT0gJ3NvZnQnXX0uc28uMSIKKwkJCTs7CisJCXBvd2VycGM2NCApCisJCQlkeW5hbWljX2xvYWRlcj0iJHtiYXNlX2xpYmRpcn0vbGQtbXVzbC1wb3dlcnBjNjQuc28uMSIKKwkJCTs7CisJCXg4Nl82NCApCisJCQlkeW5hbWljX2xvYWRlcj0iJHtiYXNlX2xpYmRpcn0vbGQtbXVzbC14ODZfNjQuc28uMSIKKwkJCTs7CisJCWkqODYgKQorCQkJZHluYW1pY19sb2FkZXI9IiR7YmFzZV9saWJkaXJ9L2xkLW11c2wtaTM4Ni5zby4xIgorCQkJOzsKKwkJYXJtKiApCisJCQlkeW5hbWljX2xvYWRlcj0iJHtiYXNlX2xpYmRpcn0vbGQtbXVzbC1hcm0ke0FSTVBLR1NGWF9FTkRJQU59JHtBUk1QS0dTRlhfRUFCSX0uc28uMSIKKwkJCTs7CisJCWFhcmNoNjQqICkKKwkJCWR5bmFtaWNfbG9hZGVyPSIke2Jhc2VfbGliZGlyfS9sZC1tdXNsLWFhcmNoNjQke0FSTVBLR1NGWF9FTkRJQU5fNjR9LnNvLjEiCisJCQk7OworCQkqICkKKwkJCWR5bmFtaWNfbG9hZGVyPSIvdW5rbm93bl9keW5hbWljX2xpbmtlciIKKwkJCTs7CisJZXNhYworCWVjaG8gJGR5bmFtaWNfbG9hZGVyCit9CisKK2xpbnV4bG9hZGVyICgpIHsKKwlsaW51eGxvYWRlcl8ke0xEU09fVENMSUJDfQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saXZlLXZtLWNvbW1vbi5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saXZlLXZtLWNvbW1vbi5iYmNsYXNzCmluZGV4IDI3YjEzN2QuLmUxZDhiMTggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbGl2ZS12bS1jb21tb24uYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpdmUtdm0tY29tbW9uLmJiY2xhc3MKQEAgLTE1LDYgKzE1LDggQEAKIEVGSV9QUk9WSURFUiA/PSAiZ3J1Yi1lZmkiCiBFRklfQ0xBU1MgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiZWZpIiwgIiR7RUZJX1BST1ZJREVSfSIsICIiLCBkKX0iCiAKK01LRE9TRlNfRVhUUkFPUFRTID8/PSAiLVMgNTEyIgorCiAjIEluY2x1ZGUgbGVnYWN5IGJvb3QgaWYgTUFDSElORV9GRUFUVVJFUyBpbmNsdWRlcyAicGNiaW9zIiBvciBpZiBpdCBkb2VzIG5vdAogIyBjb250YWluICJlZmkiLiBUaGlzIHdheSBsZWdhY3kgaXMgc3VwcG9ydGVkIGJ5IGRlZmF1bHQgaWYgbmVpdGhlciBpcwogIyBzcGVjaWZpZWQsIG1haW50YWluaW5nIHRoZSBvcmlnaW5hbCBiZWhhdmlvci4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbWlycm9ycy5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9taXJyb3JzLmJiY2xhc3MKaW5kZXggNGFkODE0Zi4uNzY2ZjFjYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9taXJyb3JzLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9taXJyb3JzLmJiY2xhc3MKQEAgLTMwLDIxICszMCwxNSBAQAogZnRwOi8vZnRwLmdudXRscy5vcmcvZ2NyeXB0L2dudXRscyAke0dOVVBHX01JUlJPUn0vZ251dGxzIFxuIFwKIGh0dHA6Ly9mdHAuaW5mby16aXAub3JnL3B1Yi9pbmZvemlwL3NyYy8gaHR0cDovL21pcnJvci5zd2l0Y2guY2gvZnRwL21pcnJvci9pbmZvemlwL3NyYy8gXG4gXAogaHR0cDovL2Z0cC5pbmZvLXppcC5vcmcvcHViL2luZm96aXAvc3JjLyBmdHA6Ly9zdW5zaXRlLmljbS5lZHUucGwvcHViL3VuaXgvYXJjaGl2aW5nL2luZm8temlwL3NyYy8gXG4gXAotZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL2Z0cC5jZXJpYXMucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9zeXN1dGlscy9sc29mLyBcbiBcCi1mdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZnRwLnRhdS5hYy5pbC9wdWIvdW5peC9hZG1pbi8gXG4gXAotZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL2Z0cC5jZXJ0LmRmbi5kZS9wdWIvdG9vbHMvYWRtaW4vbHNvZi8gXG4gXAotZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL2Z0cC5mdS1iZXJsaW4uZGUvcHViL3VuaXgvdG9vbHMvbHNvZi8gXG4gXAotZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL2Z0cC5rYWl6by5vcmcvcHViL2xzb2YvIFxuIFwKLWZ0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9mdHAudHUtZGFybXN0YWR0LmRlL3B1Yi9zeXNhZG1pbi9sc29mLyBcbiBcCi1mdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZnRwLnR1eC5vcmcvcHViL3NpdGVzL3ZpYy5jYy5wdXJkdWUuZWR1L3Rvb2xzL3VuaXgvbHNvZi8gXG4gXAotZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL2dkLnR1d2llbi5hYy5hdC91dGlscy9hZG1pbi10b29scy9sc29mLyBcbiBcCi1mdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vc3Vuc2l0ZS51YWxiZXJ0YS5jYS9wdWIvTWlycm9yL2xzb2YvIFxuIFwKLWZ0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly90aGUud2lyZXRhcHBlZC5uZXQvcHViL3NlY3VyaXR5L2hvc3Qtc2VjdXJpdHkvbHNvZi8gXG4gXAoraHR0cDovL3d3dy5taXJyb3JzZXJ2aWNlLm9yZy9zaXRlcy9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyBodHRwOi8vd3d3Lm1pcnJvcnNlcnZpY2Uub3JnL3NpdGVzL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvT0xELyBcbiBcCiAke0FQQUNIRV9NSVJST1J9ICBodHRwOi8vd3d3LnVzLmFwYWNoZS5vcmcvZGlzdCBcbiBcCiAke0FQQUNIRV9NSVJST1J9ICBodHRwOi8vYXJjaGl2ZS5hcGFjaGUub3JnL2Rpc3QgXG4gXAogaHR0cDovL2Rvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvd2F0Y2hkb2cvIGh0dHA6Ly9mb3NzaWVzLm9yZy9saW51eC9taXNjLyBcbiBcCiAke1NBVkFOTkFIX0dOVV9NSVJST1J9IGh0dHA6Ly9kb3dubG9hZC1taXJyb3Iuc2F2YW5uYWguZ251Lm9yZy9yZWxlYXNlcyBcbiBcCiAke1NBVkFOTkFIX05PTkdOVV9NSVJST1J9IGh0dHA6Ly9kb3dubG9hZC1taXJyb3Iuc2F2YW5uYWgubm9uZ251Lm9yZy9yZWxlYXNlcyBcbiBcCitmdHA6Ly9zb3VyY2V3YXJlLm9yZy9wdWIgaHR0cDovL21pcnJvcnMua2VybmVsLm9yZy9zb3VyY2V3YXJlIFxuIFwKK2Z0cDovL3NvdXJjZXdhcmUub3JnL3B1YiBodHRwOi8vZ2QudHV3aWVuLmFjLmF0L2dudS9zb3VyY2V3YXJlIFxuIFwKK2Z0cDovL3NvdXJjZXdhcmUub3JnL3B1YiBodHRwOi8vZnRwLmd3ZGcuZGUvcHViL2xpbnV4L3NvdXJjZXMucmVkaGF0LmNvbS9zb3VyY2V3YXJlIFxuIFwKIGN2czovLy4qLy4qICAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKIHN2bjovLy4qLy4qICAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKIGdpdDovLy4qLy4qICAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbW9kdWxlLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL21vZHVsZS5iYmNsYXNzCmluZGV4IDgwMjQ3NmIuLjc4ZDFiMjEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbW9kdWxlLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tb2R1bGUuYmJjbGFzcwpAQCAtMSw2ICsxLDYgQEAKIGluaGVyaXQgbW9kdWxlLWJhc2Uga2VybmVsLW1vZHVsZS1zcGxpdCBwa2djb25maWcKIAotYWRkdGFzayBtYWtlX3NjcmlwdHMgYWZ0ZXIgZG9fcHJlcGFyZV9yZWNpcGVfc3lzcm9vdCBiZWZvcmUgZG9fY29tcGlsZQorYWRkdGFzayBtYWtlX3NjcmlwdHMgYWZ0ZXIgZG9fcHJlcGFyZV9yZWNpcGVfc3lzcm9vdCBiZWZvcmUgZG9fY29uZmlndXJlCiBkb19tYWtlX3NjcmlwdHNbbG9ja2ZpbGVzXSA9ICIke1RNUERJUn0va2VybmVsLXNjcmlwdHMubG9jayIKIGRvX21ha2Vfc2NyaXB0c1tkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9fc2hhcmVkX3dvcmtkaXIiCiAKQEAgLTE4LDYgKzE4LDI2IEBACiAgICAgZC5zZXRWYXIoJ0tCVUlMRF9FWFRSQV9TWU1CT0xTJywgIiAiLmpvaW4oZXh0cmFfc3ltYm9scykpCiB9CiAKK3B5dGhvbiBkb19kZXZzaGVsbF9wcmVwZW5kICgpIHsKKyAgICBvcy5lbnZpcm9uWydDRkxBR1MnXSA9ICcnCisgICAgb3MuZW52aXJvblsnQ1BQRkxBR1MnXSA9ICcnCisgICAgb3MuZW52aXJvblsnQ1hYRkxBR1MnXSA9ICcnCisgICAgb3MuZW52aXJvblsnTERGTEFHUyddID0gJycKKworICAgIG9zLmVudmlyb25bJ0tFUk5FTF9QQVRIJ10gPSBkLmdldFZhcignU1RBR0lOR19LRVJORUxfRElSJykKKyAgICBvcy5lbnZpcm9uWydLRVJORUxfU1JDJ10gPSBkLmdldFZhcignU1RBR0lOR19LRVJORUxfRElSJykKKyAgICBvcy5lbnZpcm9uWydLRVJORUxfVkVSU0lPTiddID0gZC5nZXRWYXIoJ0tFUk5FTF9WRVJTSU9OJykKKyAgICBvcy5lbnZpcm9uWydDQyddID0gZC5nZXRWYXIoJ0tFUk5FTF9DQycpCisgICAgb3MuZW52aXJvblsnTEQnXSA9IGQuZ2V0VmFyKCdLRVJORUxfTEQnKQorICAgIG9zLmVudmlyb25bJ0FSJ10gPSBkLmdldFZhcignS0VSTkVMX0FSJykKKyAgICBvcy5lbnZpcm9uWydPJ10gPSBkLmdldFZhcignU1RBR0lOR19LRVJORUxfQlVJTERESVInKQorICAgIGtidWlsZF9leHRyYV9zeW1ib2xzID0gZC5nZXRWYXIoJ0tCVUlMRF9FWFRSQV9TWU1CT0xTJykKKyAgICBpZiBrYnVpbGRfZXh0cmFfc3ltYm9sczoKKyAgICAgICAgb3MuZW52aXJvblsnS0JVSUxEX0VYVFJBX1NZTUJPTFMnXSA9IGtidWlsZF9leHRyYV9zeW1ib2xzCisgICAgZWxzZToKKyAgICAgICAgb3MuZW52aXJvblsnS0JVSUxEX0VYVFJBX1NZTUJPTFMnXSA9ICcnCit9CisKIG1vZHVsZV9kb19jb21waWxlKCkgewogCXVuc2V0IENGTEFHUyBDUFBGTEFHUyBDWFhGTEFHUyBMREZMQUdTCiAJb2VfcnVubWFrZSBLRVJORUxfUEFUSD0ke1NUQUdJTkdfS0VSTkVMX0RJUn0gICBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL211bHRpbGliLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL211bHRpbGliLmJiY2xhc3MKaW5kZXggYWIwNDU5Ny4uODE2ZjU0ZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tdWx0aWxpYi5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbXVsdGlsaWIuYmJjbGFzcwpAQCAtNCw3ICs0LDkgQEAKICAgICBpZiBjbHMgIT0gIm11bHRpbGliIiBvciBub3QgdmFyaWFudDoKICAgICAgICAgcmV0dXJuCiAKLSAgICBlLmRhdGEuc2V0VmFyKCdTVEFHSU5HX0tFUk5FTF9ESVInLCBlLmRhdGEuZ2V0VmFyKCdTVEFHSU5HX0tFUk5FTF9ESVInKSkKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZS5kYXRhKQorICAgIGxvY2FsZGF0YS5kZWxWYXIoJ1RNUERJUicpCisgICAgZS5kYXRhLnNldFZhcignU1RBR0lOR19LRVJORUxfRElSJywgbG9jYWxkYXRhLmdldFZhcignU1RBR0lOR19LRVJORUxfRElSJykpCiAKICAgICAjIFRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZSBrZXJuZWwgaW4gbXVsdGlsaWIgY29uZmlncwogICAgICMgV2UgYWxzbyBza2lwIG11bHRpbGliIHNldHVwIGZvciBtb2R1bGUgcGFja2FnZXMuCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL25hdGl2ZS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9uYXRpdmUuYmJjbGFzcwppbmRleCA2YjdmM2RkLi45YzQzNGRjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL25hdGl2ZS5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbmF0aXZlLmJiY2xhc3MKQEAgLTEwOCw3ICsxMDgsNyBAQAogUEtHX0NPTkZJR19TWVNURU1fTElCUkFSWV9QQVRIW3VuZXhwb3J0XSA9ICIxIgogUEtHX0NPTkZJR19TWVNURU1fSU5DTFVERV9QQVRIW3VuZXhwb3J0XSA9ICIxIgogCi0jIHdlIGRvbnQgd2FudCBsaWJjLXVjbGliYyBvciBsaWJjLWdsaWJjIHRvIGtpY2sgaW4gZm9yIG5hdGl2ZSByZWNpcGVzCisjIHdlIGRvbnQgd2FudCBsaWJjLSpsaWJjIHRvIGtpY2sgaW4gZm9yIG5hdGl2ZSByZWNpcGVzCiBMSUJDT1ZFUlJJREUgPSAiIgogQ0xBU1NPVkVSUklERSA9ICJjbGFzcy1uYXRpdmUiCiBNQUNISU5FT1ZFUlJJREVTID0gIiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvb3duLW1pcnJvcnMuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvb3duLW1pcnJvcnMuYmJjbGFzcwppbmRleCAwMjk2ZDU0Li5hNzc3ODM1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL293bi1taXJyb3JzLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9vd24tbWlycm9ycy5iYmNsYXNzCkBAIC0xLDEzICsxLDEzIEBACi1QUkVNSVJST1JTKCkgewotY3ZzOi8vLiovLiogICAgICR7U09VUkNFX01JUlJPUl9VUkx9Ci1zdm46Ly8uKi8uKiAgICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0KLWdpdDovLy4qLy4qICAgICAke1NPVVJDRV9NSVJST1JfVVJMfQotZ2l0c206Ly8uKi8uKiAgICR7U09VUkNFX01JUlJPUl9VUkx9Ci1oZzovLy4qLy4qICAgICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0KLWJ6cjovLy4qLy4qICAgICAke1NPVVJDRV9NSVJST1JfVVJMfQotcDQ6Ly8uKi8uKiAgICAgICR7U09VUkNFX01JUlJPUl9VUkx9Ci1vc2M6Ly8uKi8uKiAgICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0KLWh0dHBzPyQ6Ly8uKi8uKiAke1NPVVJDRV9NSVJST1JfVVJMfQotZnRwOi8vLiovLiogICAgICR7U09VUkNFX01JUlJPUl9VUkx9Ci1ucG06Ly8uKi8/LiogICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0KLX0KK1BSRU1JUlJPUlNfcHJlcGVuZCA9ICIgXAorY3ZzOi8vLiovLiogICAgICR7U09VUkNFX01JUlJPUl9VUkx9IFxuIFwKK3N2bjovLy4qLy4qICAgICAke1NPVVJDRV9NSVJST1JfVVJMfSBcbiBcCitnaXQ6Ly8uKi8uKiAgICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0gXG4gXAorZ2l0c206Ly8uKi8uKiAgICR7U09VUkNFX01JUlJPUl9VUkx9IFxuIFwKK2hnOi8vLiovLiogICAgICAke1NPVVJDRV9NSVJST1JfVVJMfSBcbiBcCitienI6Ly8uKi8uKiAgICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0gXG4gXAorcDQ6Ly8uKi8uKiAgICAgICR7U09VUkNFX01JUlJPUl9VUkx9IFxuIFwKK29zYzovLy4qLy4qICAgICAke1NPVVJDRV9NSVJST1JfVVJMfSBcbiBcCitodHRwcz8kOi8vLiovLiogJHtTT1VSQ0VfTUlSUk9SX1VSTH0gXG4gXAorZnRwOi8vLiovLiogICAgICR7U09VUkNFX01JUlJPUl9VUkx9IFxuIFwKK25wbTovLy4qLz8uKiAgICAke1NPVVJDRV9NSVJST1JfVVJMfSBcbiBcCisiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2UuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZS5iYmNsYXNzCmluZGV4IGEwM2MwNWIuLjIwNTNkNDYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZS5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZS5iYmNsYXNzCkBAIC03MzcsOSArNzM3LDcgQEAKICAgICBkZWYgZ2V0X2ZzX3Blcm1zX2xpc3QoZCk6CiAgICAgICAgIHN0ciA9ICIiCiAgICAgICAgIGJicGF0aCA9IGQuZ2V0VmFyKCdCQlBBVEgnKQotICAgICAgICBmc19wZXJtc190YWJsZXMgPSBkLmdldFZhcignRklMRVNZU1RFTV9QRVJNU19UQUJMRVMnKQotICAgICAgICBpZiBub3QgZnNfcGVybXNfdGFibGVzOgotICAgICAgICAgICAgZnNfcGVybXNfdGFibGVzID0gJ2ZpbGVzL2ZzLXBlcm1zLnR4dCcKKyAgICAgICAgZnNfcGVybXNfdGFibGVzID0gZC5nZXRWYXIoJ0ZJTEVTWVNURU1fUEVSTVNfVEFCTEVTJykgb3IgIiIKICAgICAgICAgZm9yIGNvbmZfZmlsZSBpbiBmc19wZXJtc190YWJsZXMuc3BsaXQoKToKICAgICAgICAgICAgIHN0ciArPSAiICVzIiAlIGJiLnV0aWxzLndoaWNoKGJicGF0aCwgY29uZl9maWxlKQogICAgICAgICByZXR1cm4gc3RyCkBAIC04NzksNiArODc3LDExIEBACiAgICAgICAgIGRlYnVnZGlyID0gIi8uZGVidWciCiAgICAgICAgIGRlYnVnbGliZGlyID0gIiIKICAgICAgICAgZGVidWdzcmNkaXIgPSAiIgorICAgIGVsaWYgZC5nZXRWYXIoJ1BBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEUnKSA9PSAnZGVidWctd2l0aC1zcmNwa2cnOgorICAgICAgICBkZWJ1Z2FwcGVuZCA9ICIiCisgICAgICAgIGRlYnVnZGlyID0gIi8uZGVidWciCisgICAgICAgIGRlYnVnbGliZGlyID0gIiIKKyAgICAgICAgZGVidWdzcmNkaXIgPSAiL3Vzci9zcmMvZGVidWciCiAgICAgZWxzZToKICAgICAgICAgIyBPcmlnaW5hbCBPRS1jb3JlLCBhLmsuYS4gIi5kZWJ1ZyIsIHN0eWxlIGRlYnVnIGluZm8KICAgICAgICAgZGVidWdhcHBlbmQgPSAiIgpAQCAtMTA5Miw2ICsxMDk1LDE1IEBACiAgICAgCiAgICAgYXV0b2RlYnVnID0gbm90IChkLmdldFZhcigiTk9BVVRPUEFDS0FHRURFQlVHIikgb3IgRmFsc2UpCiAKKyAgICBzcGxpdF9zb3VyY2VfcGFja2FnZSA9IChkLmdldFZhcignUEFDS0FHRV9ERUJVR19TUExJVF9TVFlMRScpID09ICdkZWJ1Zy13aXRoLXNyY3BrZycpCisKKyAgICAjIElmIGRlYnVnLXdpdGgtc3JjcGtnIG1vZGUgaXMgZW5hYmxlZCB0aGVuIHRoZSBzcmMgcGFja2FnZSBpcyBhZGRlZAorICAgICMgaW50byB0aGUgcGFja2FnZSBsaXN0IGFuZCB0aGUgc291cmNlIGRpcmVjdG9yeSBhcyBpdHMgbWFpbiBjb250ZW50CisgICAgaWYgc3BsaXRfc291cmNlX3BhY2thZ2U6CisgICAgICAgIHNyY19wYWNrYWdlX25hbWUgPSAoJyVzLXNyYycgJSBkLmdldFZhcignUE4nKSkKKyAgICAgICAgcGFja2FnZXMgKz0gKCcgJyArIHNyY19wYWNrYWdlX25hbWUpCisgICAgICAgIGQuc2V0VmFyKCdGSUxFU18lcycgJSBzcmNfcGFja2FnZV9uYW1lLCAnL3Vzci9zcmMvZGVidWcnKQorCiAgICAgIyBTYW5pdHkgY2hlY2sgUEFDS0FHRVMgZm9yIGR1cGxpY2F0ZXMKICAgICAjIFNhbml0eSBzaG91bGQgYmUgbW92ZWQgdG8gc2FuaXR5LmJiY2xhc3Mgb25jZSB3ZSBoYXZlIHRoZSBpbmZyYXN0dWN0dXJlCiAgICAgcGFja2FnZV9saXN0ID0gW10KQEAgLTExMDAsNyArMTExMiwxMiBAQAogICAgICAgICBpZiBwa2cgaW4gcGFja2FnZV9saXN0OgogICAgICAgICAgICAgbXNnID0gIiVzIGlzIGxpc3RlZCBpbiBQQUNLQUdFUyBtdWx0aXBsZSB0aW1lcywgdGhpcyBsZWFkcyB0byBwYWNrYWdpbmcgZXJyb3JzLiIgJSBwa2cKICAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJwYWNrYWdlcy1saXN0IiwgbXNnLCBkKQotICAgICAgICBlbGlmIGF1dG9kZWJ1ZyBhbmQgcGtnLmVuZHN3aXRoKCItZGJnIik6CisgICAgICAgICMgSWYgZGVidWctd2l0aC1zcmNwa2cgbW9kZSBpcyBlbmFibGVkIHRoZW4gdGhlIHNyYyBwYWNrYWdlIHdpbGwgaGF2ZQorICAgICAgICAjIHByaW9yaXR5IG92ZXIgZGJnIHBhY2thZ2Ugd2hlbiBhc3NpZ25pbmcgdGhlIGZpbGVzLgorICAgICAgICAjIFRoaXMgYWxsb3dzIHNyYyBwYWNrYWdlIHRvIGluY2x1ZGUgc291cmNlIGZpbGVzIGFuZCByZW1vdmUgdGhlbSBmcm9tIGRiZy4KKyAgICAgICAgZWxpZiBzcGxpdF9zb3VyY2VfcGFja2FnZSBhbmQgcGtnLmVuZHN3aXRoKCItc3JjIik6CisgICAgICAgICAgICBwYWNrYWdlX2xpc3QuaW5zZXJ0KDAsIHBrZykKKyAgICAgICAgZWxpZiBhdXRvZGVidWcgYW5kIHBrZy5lbmRzd2l0aCgiLWRiZyIpIGFuZCBub3Qgc3BsaXRfc291cmNlX3BhY2thZ2U6CiAgICAgICAgICAgICBwYWNrYWdlX2xpc3QuaW5zZXJ0KDAsIHBrZykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHBhY2thZ2VfbGlzdC5hcHBlbmQocGtnKQpAQCAtMTQzNCwxMyArMTQ1MSw3IEBACiBmaQogfQogCi0jIEluIE1vcnR5IGFuZCBlYXJsaWVyIHJlbGVhc2VzLCBhbmQgb24gbWFzdGVyIChSb2NrbyksIHRoZSBSUE0gZmlsZQotIyBkZXBlbmRlbmNpZXMgYXJlIGFsd2F5cyBlbmFibGVkLiBIb3dldmVyLCBzaW5jZSB0aGV5IHdlcmUgYnJva2VuIHdpdGggdGhlCi0jIHJlbGVhc2Ugb2YgUHlybyBhbmQgZW5hYmxpbmcgdGhlbSBtYXkgY2F1c2UgYnVpbGQgcHJvYmxlbXMgZm9yIHNvbWUgcGFja2FnZXMsCi0jIHRoZXkgYXJlIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gUHlyby4gU2V0dGluZyBFTkFCTEVfUlBNX0ZJTEVERVBTX0ZPUl9QWVJPCi0jIHRvICIxIiB3aWxsIGVuYWJsZSB0aGVtIGFnYWluLgotRU5BQkxFX1JQTV9GSUxFREVQU19GT1JfUFlSTyA/Pz0gIjAiCi1SUE1ERVBTID0gIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9ycG0vcnBtZGVwcyR7QCcgLS1hbGxkZXBzJyBpZiBkLmdldFZhcignRU5BQkxFX1JQTV9GSUxFREVQU19GT1JfUFlSTycpID09ICcxJyBlbHNlICcnfSIKK1JQTURFUFMgPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3JwbS9ycG1kZXBzIC0tYWxsZGVwcyIKIAogIyBDb2xsZWN0IHBlcmZpbGUgcnVuLXRpbWUgZGVwZW5kZW5jeSBtZXRhZGF0YQogIyBPdXRwdXQ6CkBAIC0xNDY1LDcgKzE0NzYsNyBAQAogICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKICAgICAgICAgaWYgZC5nZXRWYXIoJ1NLSVBfRklMRURFUFNfJyArIHBrZykgPT0gJzEnOgogICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgcGtnLmVuZHN3aXRoKCctZGJnJykgb3IgcGtnLmVuZHN3aXRoKCctZG9jJykgb3IgcGtnLmZpbmQoJy1sb2NhbGUtJykgIT0gLTEgb3IgcGtnLmZpbmQoJy1sb2NhbGVkYXRhLScpICE9IC0xIG9yIHBrZy5maW5kKCctZ2NvbnYtJykgIT0gLTEgb3IgcGtnLmZpbmQoJy1jaGFybWFwLScpICE9IC0xIG9yIHBrZy5zdGFydHN3aXRoKCdrZXJuZWwtbW9kdWxlLScpOgorICAgICAgICBpZiBwa2cuZW5kc3dpdGgoJy1kYmcnKSBvciBwa2cuZW5kc3dpdGgoJy1kb2MnKSBvciBwa2cuZmluZCgnLWxvY2FsZS0nKSAhPSAtMSBvciBwa2cuZmluZCgnLWxvY2FsZWRhdGEtJykgIT0gLTEgb3IgcGtnLmZpbmQoJy1nY29udi0nKSAhPSAtMSBvciBwa2cuZmluZCgnLWNoYXJtYXAtJykgIT0gLTEgb3IgcGtnLnN0YXJ0c3dpdGgoJ2tlcm5lbC1tb2R1bGUtJykgb3IgcGtnLmVuZHN3aXRoKCctc3JjJyk6CiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBmb3IgZmlsZXMgaW4gY2h1bmtzKHBrZ2ZpbGVzW3BrZ10sIDEwMCk6CiAgICAgICAgICAgICBwa2dsaXN0LmFwcGVuZCgocGtnLCBmaWxlcywgcnBtZGVwcywgcGtnZGVzdCkpCkBAIC0xNTgzLDcgKzE1OTQsNyBAQAogICAgICAgICAgICAgICAgIGNvbWJvcy5hcHBlbmQoIi0iLmpvaW4ob3B0aW9uc1swOmldKSkKICAgICAgICAgICAgIHJldHVybiBjb21ib3MKIAotICAgICAgICBpZiAoZmlsZS5lbmRzd2l0aCgnLmR5bGliJykgb3IgZmlsZS5lbmRzd2l0aCgnLnNvJykpIGFuZCBub3QgcGtnLmVuZHN3aXRoKCctZGV2JykgYW5kIG5vdCBwa2cuZW5kc3dpdGgoJy1kYmcnKToKKyAgICAgICAgaWYgKGZpbGUuZW5kc3dpdGgoJy5keWxpYicpIG9yIGZpbGUuZW5kc3dpdGgoJy5zbycpKSBhbmQgbm90IHBrZy5lbmRzd2l0aCgnLWRldicpIGFuZCBub3QgcGtnLmVuZHN3aXRoKCctZGJnJykgYW5kIG5vdCBwa2cuZW5kc3dpdGgoJy1zcmMnKToKICAgICAgICAgICAgICMgRHJvcCBzdWZmaXgKICAgICAgICAgICAgIG5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGZpbGUpLnJzcGxpdCgiLiIsMSlbMF0KICAgICAgICAgICAgICMgRmluZCBhbGwgY29tYmluYXRpb25zCkBAIC0yMDYwLDcgKzIwNzEsNyBAQAogICAgICMgY2FjaGUuICBUaGlzIGlzIHVzZWZ1bCBpZiBhbiBpdGVtIHRoaXMgY2xhc3MgZGVwZW5kcyBvbiBjaGFuZ2VzIGluIGEKICAgICAjIHdheSB0aGF0IHRoZSBvdXRwdXQgb2YgdGhpcyBjbGFzcyBjaGFuZ2VzLiAgcnBtZGVwcyBpcyBhIGdvb2QgZXhhbXBsZQogICAgICMgYXMgYW55IGNoYW5nZSB0byBycG1kZXBzIHJlcXVpcmVzIHRoaXMgdG8gYmUgcmVydW4uCi0gICAgIyBQQUNLQUdFX0JCQ0xBU1NfVkVSU0lPTiA9ICIxIgorICAgICMgUEFDS0FHRV9CQkNMQVNTX1ZFUlNJT04gPSAiMiIKIAogICAgICMgSW5pdCBjYWNoZWRwYXRoCiAgICAgZ2xvYmFsIGNwYXRoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VfZGViLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VfZGViLmJiY2xhc3MKaW5kZXggZWFjYWJjZC4uNWQyOTc5MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlX2RlYi5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZV9kZWIuYmJjbGFzcwpAQCAtMzksNTAgKzM5LDc5IEBACiAgICAgaWYgYXJjaCA9PSAiYXJtIjoKICAgICAgICAgcmV0dXJuIGFyY2ggKyBbImVsIiwgImhmIl1bImNhbGxjb252ZW50aW9uLWhhcmQiIGluIHR1bmVfZmVhdHVyZXNdCiAgICAgcmV0dXJuIGFyY2gKLSMKLSMgaW5zdGFsbCBhIGJ1bmNoIG9mIHBhY2thZ2VzIHVzaW5nIGFwdAotIyB0aGUgZm9sbG93aW5nIHNoZWxsIHZhcmlhYmxlcyBuZWVkcyB0byBiZSBzZXQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jOgotIyBJTlNUQUxMX1JPT1RGU19ERUIgLSBpbnN0YWxsIHJvb3QgZGlyCi0jIElOU1RBTExfQkFTRUFSQ0hfREVCIC0gaW5zdGFsbCBiYXNlIGFyY2hpdGVjdXRyZQotIyBJTlNUQUxMX0FSQ0hTX0RFQiAtIGxpc3Qgb2YgYXZhaWxhYmxlIGFyY2hzCi0jIElOU1RBTExfUEFDS0FHRVNfTk9STUFMX0RFQiAtIHBhY2thZ2VzIHRvIGJlIGluc3RhbGxlZAotIyBJTlNUQUxMX1BBQ0tBR0VTX0FUVEVNUFRPTkxZX0RFQiAtIHBhY2thZ2VzIGF0dGVtcHRlZCB0byBiZSBpbnN0YWxsZWQgb25seQotIyBJTlNUQUxMX1BBQ0tBR0VTX0xJTkdVQVNfREVCIC0gYWRkaXRpb25hbCBwYWNrYWdlcyBmb3IgdWNsaWJjCi0jIElOU1RBTExfVEFTS19ERUIgLSB0YXNrIG5hbWUKIAogcHl0aG9uIGRvX3BhY2thZ2VfZGViICgpIHsKLSAgICBpbXBvcnQgcmUsIGNvcHkKLSAgICBpbXBvcnQgdGV4dHdyYXAKLSAgICBpbXBvcnQgc3VicHJvY2VzcwotICAgIGltcG9ydCBjb2xsZWN0aW9ucwotICAgIGltcG9ydCBjb2RlY3MKKworICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKKyAgICBpbXBvcnQgdHJhY2ViYWNrCisKKyAgICBjbGFzcyBEZWJpYW5Xcml0ZVBrZ1Byb2Nlc3MobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgICAgIHNlbGYuX3Bjb25uLCBzZWxmLl9jY29ubiA9IG11bHRpcHJvY2Vzc2luZy5QaXBlKCkKKyAgICAgICAgICAgIHNlbGYuX2V4Y2VwdGlvbiA9IE5vbmUKKworICAgICAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLnJ1bihzZWxmKQorICAgICAgICAgICAgICAgIHNlbGYuX2Njb25uLnNlbmQoTm9uZSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICB0YiA9IHRyYWNlYmFjay5mb3JtYXRfZXhjKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9jY29ubi5zZW5kKChlLCB0YikpCisKKyAgICAgICAgQHByb3BlcnR5CisgICAgICAgIGRlZiBleGNlcHRpb24oc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLl9wY29ubi5wb2xsKCk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXhjZXB0aW9uID0gc2VsZi5fcGNvbm4ucmVjdigpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZXhjZXB0aW9uCiAKICAgICBvbGRjd2QgPSBvcy5nZXRjd2QoKQogCi0gICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJykKLSAgICBpZiBub3Qgd29ya2RpcjoKLSAgICAgICAgYmIuZXJyb3IoIldPUktESVIgbm90IGRlZmluZWQsIHVuYWJsZSB0byBwYWNrYWdlIikKLSAgICAgICAgcmV0dXJuCi0KLSAgICBvdXRkaXIgPSBkLmdldFZhcignUEtHV1JJVEVESVJERUInKQotICAgIGlmIG5vdCBvdXRkaXI6Ci0gICAgICAgIGJiLmVycm9yKCJQS0dXUklURURJUkRFQiBub3QgZGVmaW5lZCwgdW5hYmxlIHRvIHBhY2thZ2UiKQotICAgICAgICByZXR1cm4KLQogICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJykKICAgICBpZiBub3QgcGFja2FnZXM6CiAgICAgICAgIGJiLmRlYnVnKDEsICJQQUNLQUdFUyBub3QgZGVmaW5lZCwgbm90aGluZyB0byBwYWNrYWdlIikKICAgICAgICAgcmV0dXJuCiAKICAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJykKLQogICAgIGlmIG9zLmFjY2Vzcyhvcy5wYXRoLmpvaW4odG1wZGlyLCAic3RhbXBzIiwgIkRFQl9QQUNLQUdFX0lOREVYX0NMRUFOIiksb3MuUl9PSyk6CiAgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4odG1wZGlyLCAic3RhbXBzIiwgIkRFQl9QQUNLQUdFX0lOREVYX0NMRUFOIikpCiAKLSAgICBpZiBwYWNrYWdlcyA9PSBbXToKLSAgICAgICAgYmIuZGVidWcoMSwgIk5vIHBhY2thZ2VzOyBub3RoaW5nIHRvIGRvIikKLSAgICAgICAgcmV0dXJuCisgICAgbWF4X3Byb2Nlc3MgPSBpbnQoZC5nZXRWYXIoIkJCX05VTUJFUl9USFJFQURTIikgb3Igb3MuY3B1X2NvdW50KCkgb3IgMSkKKyAgICBsYXVuY2hlZCA9IFtdCisgICAgZXJyb3IgPSBOb25lCisgICAgcGtncyA9IHBhY2thZ2VzLnNwbGl0KCkKKyAgICB3aGlsZSBub3QgZXJyb3IgYW5kIHBrZ3M6CisgICAgICAgIGlmIGxlbihsYXVuY2hlZCkgPCBtYXhfcHJvY2VzczoKKyAgICAgICAgICAgIHAgPSBEZWJpYW5Xcml0ZVBrZ1Byb2Nlc3ModGFyZ2V0PWRlYl93cml0ZV9wa2csIGFyZ3M9KHBrZ3MucG9wKCksIGQpKQorICAgICAgICAgICAgcC5zdGFydCgpCisgICAgICAgICAgICBsYXVuY2hlZC5hcHBlbmQocCkKKyAgICAgICAgZm9yIHEgaW4gbGF1bmNoZWQ6CisgICAgICAgICAgICAjIFRoZSBmaW5pc2hlZCBwcm9jZXNzZXMgYXJlIGpvaW5lZCB3aGVuIGNhbGxpbmcgaXNfYWxpdmUoKQorICAgICAgICAgICAgaWYgbm90IHEuaXNfYWxpdmUoKToKKyAgICAgICAgICAgICAgICBsYXVuY2hlZC5yZW1vdmUocSkKKyAgICAgICAgICAgIGlmIHEuZXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIGVycm9yLCB0cmFjZWJhY2sgPSBxLmV4Y2VwdGlvbgorICAgICAgICAgICAgICAgIGJyZWFrCiAKKyAgICBmb3IgcCBpbiBsYXVuY2hlZDoKKyAgICAgICAgcC5qb2luKCkKKworICAgIG9zLmNoZGlyKG9sZGN3ZCkKKworICAgIGlmIGVycm9yOgorICAgICAgICByYWlzZSBlcnJvcgorfQorZG9fcGFja2FnZV9kZWJbdmFyZGVwc10gKz0gImRlYl93cml0ZV9wa2ciCitkb19wYWNrYWdlX2RlYlt2YXJkZXBzZXhjbHVkZV0gPSAiQkJfTlVNQkVSX1RIUkVBRFMiCisKK2RlZiBkZWJfd3JpdGVfcGtnKHBrZywgZCk6CisgICAgaW1wb3J0IHJlLCBjb3B5CisgICAgaW1wb3J0IHRleHR3cmFwCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICBpbXBvcnQgY29sbGVjdGlvbnMKKyAgICBpbXBvcnQgY29kZWNzCisKKyAgICBvdXRkaXIgPSBkLmdldFZhcignUEtHV1JJVEVESVJERUInKQogICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcpCiAKICAgICBkZWYgY2xlYW51cGNvbnRyb2wocm9vdCk6CkBAIC05MSwxMSArMTIwLDExIEBACiAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwKToKICAgICAgICAgICAgICAgICBiYi51dGlscy5wcnVuZWRpcihwKQogCi0gICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgotICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKLSAgICAgICAgcm9vdCA9ICIlcy8lcyIgJSAocGtnZGVzdCwgcGtnKQorICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIHJvb3QgPSAiJXMvJXMiICUgKHBrZ2Rlc3QsIHBrZykKIAotICAgICAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKHJvb3QgKyAiLmxvY2siKQorICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUocm9vdCArICIubG9jayIpCisgICAgdHJ5OgogCiAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1JPT1QnLCAnJykKICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUk9PVF8lcycgJSBwa2csIHJvb3QpCkBAIC0xMTcsOCArMTQ2LDcgQEAKICAgICAgICAgZyA9IGdsb2IoJyonKQogICAgICAgICBpZiBub3QgZyBhbmQgbG9jYWxkYXRhLmdldFZhcignQUxMT1dfRU1QVFknLCBGYWxzZSkgIT0gIjEiOgogICAgICAgICAgICAgYmIubm90ZSgiTm90IGNyZWF0aW5nIGVtcHR5IGFyY2hpdmUgZm9yICVzLSVzLSVzIiAlIChwa2csIGxvY2FsZGF0YS5nZXRWYXIoJ1BLR1YnKSwgbG9jYWxkYXRhLmdldFZhcignUEtHUicpKSkKLSAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCi0gICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgY29udHJvbGRpciA9IG9zLnBhdGguam9pbihyb290LCAnREVCSUFOJykKICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGNvbnRyb2xkaXIpCkBAIC0xOTQsOCArMjIyLDggQEAKICAgICAgICAgbWFwcGluZ19yZW5hbWVfaG9vayhsb2NhbGRhdGEpCiAKICAgICAgICAgZGVmIGRlYmlhbl9jbXBfcmVtYXAodmFyKToKLSAgICAgICAgICAgICMgZHBrZyBkb2VzIG5vdCBhbGxvdyBmb3IgJygnIG9yICcpJyBpbiBhIGRlcGVuZGVuY3kgbmFtZQotICAgICAgICAgICAgIyByZXBsYWNlIHRoZXNlIGluc3RhbmNlcyB3aXRoICdfXycgYW5kICdfXycKKyAgICAgICAgICAgICMgZHBrZyBkb2VzIG5vdCBhbGxvdyBmb3IgJygnLCAnKScgb3IgJzonIGluIGEgZGVwZW5kZW5jeSBuYW1lCisgICAgICAgICAgICAjIFJlcGxhY2UgYW55IGluc3RhbmNlcyBvZiB0aGVtIHdpdGggJ19fJwogICAgICAgICAgICAgIwogICAgICAgICAgICAgIyBJbiBkZWJpYW4gJz4nIGFuZCAnPCcgZG8gbm90IG1lYW4gd2hhdCBpdCBhcHBlYXJzIHRoZXkgbWVhbgogICAgICAgICAgICAgIyAgICc8JyA9IGxlc3Mgb3IgZXF1YWwKQEAgLTIwNCw4ICsyMzIsNyBAQAogICAgICAgICAgICAgIwogICAgICAgICAgICAgZm9yIGRlcCBpbiB2YXI6CiAgICAgICAgICAgICAgICAgaWYgJygnIGluIGRlcDoKLSAgICAgICAgICAgICAgICAgICAgbmV3ZGVwID0gZGVwLnJlcGxhY2UoJygnLCAnX18nKQotICAgICAgICAgICAgICAgICAgICBuZXdkZXAgPSBuZXdkZXAucmVwbGFjZSgnKScsICdfXycpCisgICAgICAgICAgICAgICAgICAgIG5ld2RlcCA9IHJlLnN1YihyJ1soOildJywgJ19fJywgZGVwKQogICAgICAgICAgICAgICAgICAgICBpZiBuZXdkZXAgIT0gZGVwOgogICAgICAgICAgICAgICAgICAgICAgICAgdmFyW25ld2RlcF0gPSB2YXJbZGVwXQogICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHZhcltkZXBdCkBAIC0yODksMTcgKzMxNiwxOSBAQAogICAgICAgICAgICAgY29uZmZpbGVzLmNsb3NlKCkKIAogICAgICAgICBvcy5jaGRpcihiYXNlZGlyKQotICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgiUEFUSD1cIiVzXCIgZHBrZy1kZWIgLWIgJXMgJXMiICUgKGxvY2FsZGF0YS5nZXRWYXIoIlBBVEgiKSwgcm9vdCwgcGtnb3V0ZGlyKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoIlBBVEg9XCIlc1wiIGRwa2ctZGViIC1iICVzICVzIiAlIChsb2NhbGRhdGEuZ2V0VmFyKCJQQVRIIiksIHJvb3QsIHBrZ291dGRpciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9VHJ1ZSkKIAorICAgIGZpbmFsbHk6CiAgICAgICAgIGNsZWFudXBjb250cm9sKHJvb3QpCiAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCi0gICAgb3MuY2hkaXIob2xkY3dkKQotfQorCisjIE90aGVyd2lzZSBhbGxhcmNoIHBhY2thZ2VzIG1heSBjaGFuZ2UgZGVwZW5kaW5nIG9uIG92ZXJyaWRlIGNvbmZpZ3VyYXRpb24KK2RlYl93cml0ZV9wa2dbdmFyZGVwc2V4Y2x1ZGVdID0gIk9WRVJSSURFUyIKKwogIyBJbmRpcmVjdCByZWZlcmVuY2VzIHRvIHRoZXNlIHZhcnMKIGRvX3BhY2thZ2Vfd3JpdGVfZGViW3ZhcmRlcHNdICs9ICJQS0dWIFBLR1IgUEtHViBERVNDUklQVElPTiBTRUNUSU9OIFBSSU9SSVRZIE1BSU5UQUlORVIgRFBLR19BUkNIIFBOIEhPTUVQQUdFIgotIyBPdGhlcndpc2UgYWxsYXJjaCBwYWNrYWdlcyBtYXkgY2hhbmdlIGRlcGVuZGluZyBvbiBvdmVycmlkZSBjb25maWd1cmF0aW9uCi1kb19wYWNrYWdlX2RlYlt2YXJkZXBzZXhjbHVkZV0gPSAiT1ZFUlJJREVTIgotCiAKIFNTVEFURVRBU0tTICs9ICJkb19wYWNrYWdlX3dyaXRlX2RlYiIKIGRvX3BhY2thZ2Vfd3JpdGVfZGViW3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7UEtHV1JJVEVESVJERUJ9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlX2lway5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlX2lway5iYmNsYXNzCmluZGV4IGExZTUxZWUuLjZjMWZkYWEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZV9pcGsuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VfaXBrLmJiY2xhc3MKQEAgLTEyLDE1ICsxMiwzNCBAQAogCiBPUEtHX0FSR1MgKz0gIi0tZm9yY2VfcG9zdGluc3RhbGwgLS1wcmVmZXItYXJjaC10by12ZXJzaW9uIgogT1BLR19BUkdTICs9ICIke0BbJycsICctLW5vLWluc3RhbGwtcmVjb21tZW5kcyddW2QuZ2V0VmFyKCJOT19SRUNPTU1FTkRBVElPTlMiKSA9PSAiMSJdfSIKLU9QS0dfQVJHUyArPSAiJHtAWycnLCAnLS1hZGQtZXhjbHVkZSAnICsgJyAtLWFkZC1leGNsdWRlICcuam9pbigoZC5nZXRWYXIoJ1BBQ0tBR0VfRVhDTFVERScpIG9yICIiKS5zcGxpdCgpKV1bKGQuZ2V0VmFyKCJQQUNLQUdFX0VYQ0xVREUiKSBvciAiIikgIT0gIiJdfSIKK09QS0dfQVJHUyArPSAiJHtAWycnLCAnLS1hZGQtZXhjbHVkZSAnICsgJyAtLWFkZC1leGNsdWRlICcuam9pbigoZC5nZXRWYXIoJ1BBQ0tBR0VfRVhDTFVERScpIG9yICIiKS5zcGxpdCgpKV1bKGQuZ2V0VmFyKCJQQUNLQUdFX0VYQ0xVREUiKSBvciAiIikuc3RyaXAoKSAhPSAiIl19IgogCiBPUEtHTElCRElSID0gIiR7bG9jYWxzdGF0ZWRpcn0vbGliIgogCiBweXRob24gZG9fcGFja2FnZV9pcGsgKCkgewotICAgIGltcG9ydCByZSwgY29weQotICAgIGltcG9ydCB0ZXh0d3JhcAotICAgIGltcG9ydCBzdWJwcm9jZXNzCi0gICAgaW1wb3J0IGNvbGxlY3Rpb25zCisgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZworICAgIGltcG9ydCB0cmFjZWJhY2sKKworICAgIGNsYXNzIElQS1dyaXRlUGtnUHJvY2VzcyhtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgc2VsZi5fcGNvbm4sIHNlbGYuX2Njb25uID0gbXVsdGlwcm9jZXNzaW5nLlBpcGUoKQorICAgICAgICAgICAgc2VsZi5fZXhjZXB0aW9uID0gTm9uZQorCisgICAgICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MucnVuKHNlbGYpCisgICAgICAgICAgICAgICAgc2VsZi5fY2Nvbm4uc2VuZChOb25lKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIHRiID0gdHJhY2ViYWNrLmZvcm1hdF9leGMoKQorICAgICAgICAgICAgICAgIHNlbGYuX2Njb25uLnNlbmQoKGUsIHRiKSkKKworICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgZGVmIGV4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYuX3Bjb25uLnBvbGwoKToKKyAgICAgICAgICAgICAgICBzZWxmLl9leGNlcHRpb24gPSBzZWxmLl9wY29ubi5yZWN2KCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9leGNlcHRpb24KKwogCiAgICAgb2xkY3dkID0gb3MuZ2V0Y3dkKCkKIApAQCAtNDIsMjAgKzYxLDU1IEBACiAgICAgaWYgb3MuYWNjZXNzKG9zLnBhdGguam9pbih0bXBkaXIsICJzdGFtcHMiLCAiSVBLX1BBQ0tBR0VfSU5ERVhfQ0xFQU4iKSwgb3MuUl9PSyk6CiAgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4odG1wZGlyLCAic3RhbXBzIiwgIklQS19QQUNLQUdFX0lOREVYX0NMRUFOIikpCiAKKyAgICBtYXhfcHJvY2VzcyA9IGludChkLmdldFZhcigiQkJfTlVNQkVSX1RIUkVBRFMiKSBvciBvcy5jcHVfY291bnQoKSBvciAxKQorICAgIGxhdW5jaGVkID0gW10KKyAgICBlcnJvciA9IE5vbmUKKyAgICBwa2dzID0gcGFja2FnZXMuc3BsaXQoKQorICAgIHdoaWxlIG5vdCBlcnJvciBhbmQgcGtnczoKKyAgICAgICAgaWYgbGVuKGxhdW5jaGVkKSA8IG1heF9wcm9jZXNzOgorICAgICAgICAgICAgcCA9IElQS1dyaXRlUGtnUHJvY2Vzcyh0YXJnZXQ9aXBrX3dyaXRlX3BrZywgYXJncz0ocGtncy5wb3AoKSwgZCkpCisgICAgICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgICAgIGxhdW5jaGVkLmFwcGVuZChwKQorICAgICAgICBmb3IgcSBpbiBsYXVuY2hlZDoKKyAgICAgICAgICAgICMgVGhlIGZpbmlzaGVkIHByb2Nlc3NlcyBhcmUgam9pbmVkIHdoZW4gY2FsbGluZyBpc19hbGl2ZSgpCisgICAgICAgICAgICBpZiBub3QgcS5pc19hbGl2ZSgpOgorICAgICAgICAgICAgICAgIGxhdW5jaGVkLnJlbW92ZShxKQorICAgICAgICAgICAgaWYgcS5leGNlcHRpb246CisgICAgICAgICAgICAgICAgZXJyb3IsIHRyYWNlYmFjayA9IHEuZXhjZXB0aW9uCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGZvciBwIGluIGxhdW5jaGVkOgorICAgICAgICBwLmpvaW4oKQorCisgICAgb3MuY2hkaXIob2xkY3dkKQorCisgICAgaWYgZXJyb3I6CisgICAgICAgIHJhaXNlIGVycm9yCit9Citkb19wYWNrYWdlX2lwa1t2YXJkZXBzXSArPSAiaXBrX3dyaXRlX3BrZyIKK2RvX3BhY2thZ2VfaXBrW3ZhcmRlcHNleGNsdWRlXSA9ICJCQl9OVU1CRVJfVEhSRUFEUyIKKworZGVmIGlwa193cml0ZV9wa2cocGtnLCBkKToKKyAgICBpbXBvcnQgcmUsIGNvcHkKKyAgICBpbXBvcnQgc3VicHJvY2VzcworICAgIGltcG9ydCB0ZXh0d3JhcAorICAgIGltcG9ydCBjb2xsZWN0aW9ucworCiAgICAgZGVmIGNsZWFudXBjb250cm9sKHJvb3QpOgogICAgICAgICBmb3IgcCBpbiBbJ0NPTlRST0wnLCAnREVCSUFOJ106CiAgICAgICAgICAgICBwID0gb3MucGF0aC5qb2luKHJvb3QsIHApCiAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwKToKICAgICAgICAgICAgICAgICBiYi51dGlscy5wcnVuZWRpcihwKQogCisgICAgb3V0ZGlyID0gZC5nZXRWYXIoJ1BLR1dSSVRFRElSSVBLJykKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnKQogICAgIHJlY2lwZXNvdXJjZSA9IG9zLnBhdGguYmFzZW5hbWUoZC5nZXRWYXIoJ0ZJTEUnKSkKIAotICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKLSAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCi0gICAgICAgIHJvb3QgPSAiJXMvJXMiICUgKHBrZ2Rlc3QsIHBrZykKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICByb290ID0gIiVzLyVzIiAlIChwa2dkZXN0LCBwa2cpCiAKLSAgICAgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZShyb290ICsgIi5sb2NrIikKLQorICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUocm9vdCArICIubG9jayIpCisgICAgdHJ5OgogICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdST09UJywgJycpCiAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1JPT1RfJXMnICUgcGtnLCByb290KQogICAgICAgICBwa2duYW1lID0gbG9jYWxkYXRhLmdldFZhcignUEtHXyVzJyAlIHBrZykKQEAgLTEwMCw4ICsxNTQsNyBAQAogICAgICAgICBnID0gZ2xvYignKicpCiAgICAgICAgIGlmIG5vdCBnIGFuZCBsb2NhbGRhdGEuZ2V0VmFyKCdBTExPV19FTVBUWScsIEZhbHNlKSAhPSAiMSI6CiAgICAgICAgICAgICBiYi5ub3RlKCJOb3QgY3JlYXRpbmcgZW1wdHkgYXJjaGl2ZSBmb3IgJXMtJXMtJXMiICUgKHBrZywgbG9jYWxkYXRhLmdldFZhcignUEtHVicpLCBsb2NhbGRhdGEuZ2V0VmFyKCdQS0dSJykpKQotICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKLSAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICBjb250cm9sZGlyID0gb3MucGF0aC5qb2luKHJvb3QsICdDT05UUk9MJykKICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGNvbnRyb2xkaXIpCkBAIC0xNDIsMTYgKzE5NSw5IEBACiAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBsb2NhbGRhdGEuZ2V0VmFyKCdERVNDUklQVElPTicpIG9yICIuIgogICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGV4dHdyYXAuZGVkZW50KGRlc2NyaXB0aW9uKS5zdHJpcCgpCiAgICAgICAgICAgICAgICAgaWYgJ1xcbicgaW4gZGVzY3JpcHRpb246Ci0gICAgICAgICAgICAgICAgICAgICMgTWFudWFsbHkgaW5kZW50CisgICAgICAgICAgICAgICAgICAgICMgTWFudWFsbHkgaW5kZW50OiBtdWx0aWxpbmUgZGVzY3JpcHRpb24gaW5jbHVkZXMgYSBsZWFkaW5nIHNwYWNlCiAgICAgICAgICAgICAgICAgICAgIGZvciB0IGluIGRlc2NyaXB0aW9uLnNwbGl0KCdcXG4nKToKLSAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgZG9uJ3QgbGltaXQgdGhlIHdpZHRoIHdoZW4gbWFudWFsbHkgaW5kZW50LCBidXQgd2UgZG8KLSAgICAgICAgICAgICAgICAgICAgICAgICMgbmVlZCB0aGUgdGV4dHdyYXAuZmlsbCgpIHRvIHNldCB0aGUgaW5pdGlhbF9pbmRlbnQgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAjIHN1YnNlcXVlbnRfaW5kZW50LCBzbyBzZXQgYSBsYXJnZSB3aWR0aAotICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IHRleHR3cmFwLmZpbGwodC5zdHJpcCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9MTAwMDAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbF9pbmRlbnQ9JyAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2VxdWVudF9pbmRlbnQ9JyAnKSBvciAnLicKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCclc1xuJyAlIGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgnICVzXG4nICUgKHQuc3RyaXAoKSBvciAnIC4nKSkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAjIEF1dG8gaW5kZW50CiAgICAgICAgICAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCclc1xuJyAlIHRleHR3cmFwLmZpbGwoZGVzY3JpcHRpb24sIHdpZHRoPTc0LCBpbml0aWFsX2luZGVudD0nICcsIHN1YnNlcXVlbnRfaW5kZW50PScgJykpCkBAIC0yMjgsMjAgKzI3NCwyMiBAQAogCiAgICAgICAgIG9zLmNoZGlyKGJhc2VkaXIpCiAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCJQQVRIPVwiJXNcIiAlcyAlcyAlcyIgJSAobG9jYWxkYXRhLmdldFZhcigiUEFUSCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCJPUEtHQlVJTERDTUQiKSwgcGtnLCBwa2dvdXRkaXIpLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCJPUEtHQlVJTERDTUQiKSwgcGtnLCBwa2dvdXRkaXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsPVRydWUpCiAKICAgICAgICAgaWYgZC5nZXRWYXIoJ0lQS19TSUdOX1BBQ0tBR0VTJykgPT0gJzEnOgogICAgICAgICAgICAgaXBrdmVyID0gIiVzLSVzIiAlIChkLmdldFZhcignUEtHVicpLCBkLmdldFZhcignUEtHUicpKQogICAgICAgICAgICAgaXBrX3RvX3NpZ24gPSAiJXMvJXNfJXNfJXMuaXBrIiAlIChwa2dvdXRkaXIsIHBrZ25hbWUsIGlwa3ZlciwgZC5nZXRWYXIoJ1BBQ0tBR0VfQVJDSCcpKQogICAgICAgICAgICAgc2lnbl9pcGsoZCwgaXBrX3RvX3NpZ24pCiAKKyAgICBmaW5hbGx5OgogICAgICAgICBjbGVhbnVwY29udHJvbChyb290KQogICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQogCi0gICAgb3MuY2hkaXIob2xkY3dkKQotfQogIyBPdGhlcndpc2UgYWxsYXJjaCBwYWNrYWdlcyBtYXkgY2hhbmdlIGRlcGVuZGluZyBvbiBvdmVycmlkZSBjb25maWd1cmF0aW9uCi1kb19wYWNrYWdlX2lwa1t2YXJkZXBzZXhjbHVkZV0gPSAiT1ZFUlJJREVTIgoraXBrX3dyaXRlX3BrZ1t2YXJkZXBzZXhjbHVkZV0gPSAiT1ZFUlJJREVTIgorCiAKIFNTVEFURVRBU0tTICs9ICJkb19wYWNrYWdlX3dyaXRlX2lwayIKIGRvX3BhY2thZ2Vfd3JpdGVfaXBrW3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7UEtHV1JJVEVESVJJUEt9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlX3JwbS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlX3JwbS5iYmNsYXNzCmluZGV4IDFkZWFmODMuLmE0MjhkMzAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZV9ycG0uYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VfcnBtLmJiY2xhc3MKQEAgLTY0Niw5ICs2NDYsMTMgQEAKICAgICBycG1idWlsZCA9IGQuZ2V0VmFyKCdSUE1CVUlMRCcpCiAgICAgdGFyZ2V0c3lzID0gZC5nZXRWYXIoJ1RBUkdFVF9TWVMnKQogICAgIHRhcmdldHZlbmRvciA9IGQuZ2V0VmFyKCdIT1NUX1ZFTkRPUicpCisKICAgICAjIFRvbyBtYW55IHBsYWNlcyBpbiBkbmYgc3RhY2sgYXNzdW1lIHRoYXQgYXJjaC1pbmRlcGVuZGVudCBwYWNrYWdlcyBhcmUgIm5vYXJjaCIuCiAgICAgIyBMZXQncyBub3QgZmlnaHQgYWdhaW5zdCB0aGlzLgotICAgIHBhY2thZ2VfYXJjaCA9IChkLmdldFZhcignUEFDS0FHRV9BUkNIJykgb3IgIiIpLnJlcGxhY2UoIi0iLCAiXyIpLnJlcGxhY2UoImFsbCIsICJub2FyY2giKQorICAgIHBhY2thZ2VfYXJjaCA9IChkLmdldFZhcignUEFDS0FHRV9BUkNIJykgb3IgIiIpLnJlcGxhY2UoIi0iLCAiXyIpCisgICAgaWYgcGFja2FnZV9hcmNoID09ICJhbGwiOgorICAgICAgICBwYWNrYWdlX2FyY2ggPSAibm9hcmNoIgorCiAgICAgc2RrcGtnc3VmZml4ID0gKGQuZ2V0VmFyKCdTREtQS0dTVUZGSVgnKSBvciAibmF0aXZlc2RrIikucmVwbGFjZSgiLSIsICJfIikKICAgICBkLnNldFZhcignUEFDS0FHRV9BUkNIX0VYVEVORCcsIHBhY2thZ2VfYXJjaCkKICAgICBwa2d3cml0ZWRpciA9IGQuZXhwYW5kKCcke1BLR1dSSVRFRElSUlBNfS8ke1BBQ0tBR0VfQVJDSF9FWFRFTkR9JykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZWZlZWQtc3RhYmlsaXR5LmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VmZWVkLXN0YWJpbGl0eS5iYmNsYXNzCmluZGV4IGMwZTliZTUuLjU2NDg2MDIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZWZlZWQtc3RhYmlsaXR5LmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlZmVlZC1zdGFiaWxpdHkuYmJjbGFzcwpAQCAtMTg5LDcgKzE4OSw3IEBACiAKICAgICAjIFJlbW92ZSBhbGwgdGhlIG9sZCBmaWxlcyBhbmQgY29weSBhZ2FpbiBpZiBkb2NvcHkKICAgICBpZiBkb2NvcHk6Ci0gICAgICAgIGJiLnBsYWluKCdDb3B5aW5nIHBhY2thZ2VzIGZvciByZWNpcGUgJXMnICUgcG4pCisgICAgICAgIGJiLm5vdGUoJ0NvcHlpbmcgcGFja2FnZXMgZm9yIHJlY2lwZSAlcycgJSBwbikKICAgICAgICAgcGNtYW5pZmVzdCA9IG9zLnBhdGguam9pbihwcmVwYXRoLCBkLmV4cGFuZCgncGtnLWNvbXBhcmUtbWFuaWZlc3QtJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30tJHtQTn0nKSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2l0aCBvcGVuKHBjbWFuaWZlc3QsICdyJykgYXMgZjoKQEAgLTIyNCw3ICsyMjQsNyBAQAogICAgICAgICAgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUoc3JjcGF0aCwgZGVzdHBhdGgpCiAgICAgICAgICAgICAgICAgZi53cml0ZSgnJXNcbicgJSBkZXN0cGF0aCkKICAgICBlbHNlOgotICAgICAgICBiYi5wbGFpbignTm90IGNvcHlpbmcgcGFja2FnZXMgZm9yIHJlY2lwZSAlcycgJSBwbikKKyAgICAgICAgYmIubm90ZSgnTm90IGNvcHlpbmcgcGFja2FnZXMgZm9yIHJlY2lwZSAlcycgJSBwbikKIAogZG9fY2xlYW5zc3RhdGVbcG9zdGZ1bmNzXSArPSAicGZzX2NsZWFucGtncyIKIHB5dGhvbiBwZnNfY2xlYW5wa2dzICgpIHsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrX2Jhc2UuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrX2Jhc2UuYmJjbGFzcwppbmRleCA1NjM1ODJlLi40MjRjNjNjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nka19iYXNlLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wb3B1bGF0ZV9zZGtfYmFzZS5iYmNsYXNzCkBAIC01OSw2ICs1OSw5IEBACiAKIFNES19UQVJHRVRfTUFOSUZFU1QgPSAiJHtTREtERVBMT1lESVJ9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnRhcmdldC5tYW5pZmVzdCIKIFNES19IT1NUX01BTklGRVNUID0gIiR7U0RLREVQTE9ZRElSfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS5ob3N0Lm1hbmlmZXN0IgorU0RLX0VYVF9UQVJHRVRfTUFOSUZFU1QgPSAiJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTkVYVF9PVVRQVVROQU1FfS50YXJnZXQubWFuaWZlc3QiCitTREtfRVhUX0hPU1RfTUFOSUZFU1QgPSAiJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTkVYVF9PVVRQVVROQU1FfS5ob3N0Lm1hbmlmZXN0IgorCiBweXRob24gd3JpdGVfdGFyZ2V0X3Nka19tYW5pZmVzdCAoKSB7CiAgICAgZnJvbSBvZS5zZGsgaW1wb3J0IHNka19saXN0X2luc3RhbGxlZF9wYWNrYWdlcwogICAgIGZyb20gb2UudXRpbHMgaW1wb3J0IGZvcm1hdF9wa2dfbGlzdApAQCAtODgsOCArOTEsOSBAQAogICAgICAgICBvdXRwdXQud3JpdGUoZm9ybWF0X3BrZ19saXN0KHBrZ3MsICd2ZXInKSkKIH0KIAotUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkRfYXBwZW5kID0gIiB3cml0ZV90YXJnZXRfc2RrX21hbmlmZXN0IDsgd3JpdGVfc2RrX3Rlc3RfZGF0YSA7ICIKLVBPUFVMQVRFX1NES19QT1NUX0hPU1RfQ09NTUFORF9hcHBlbmQgPSAiIHdyaXRlX2hvc3Rfc2RrX21hbmlmZXN0OyAiCitQT1BVTEFURV9TREtfUE9TVF9UQVJHRVRfQ09NTUFORF9hcHBlbmQgPSAiIHdyaXRlX3Nka190ZXN0X2RhdGEgOyAiCitQT1BVTEFURV9TREtfUE9TVF9UQVJHRVRfQ09NTUFORF9hcHBlbmRfdGFzay1wb3B1bGF0ZS1zZGsgID0gIiB3cml0ZV90YXJnZXRfc2RrX21hbmlmZXN0IDsgIgorUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EX2FwcGVuZF90YXNrLXBvcHVsYXRlLXNkayA9ICIgd3JpdGVfaG9zdF9zZGtfbWFuaWZlc3Q7ICIKIFNES19QQUNLQUdJTkdfQ09NTUFORCA9ICIke0AnJHtTREtfUEFDS0FHSU5HX0ZVTkN9OycgaWYgJyR7U0RLX1BBQ0tBR0lOR19GVU5DfScgZWxzZSAnJ30iCiBTREtfUE9TVFBST0NFU1NfQ09NTUFORCA9ICIgY3JlYXRlX3Nka19maWxlczsgY2hlY2tfc2RrX3N5c3Jvb3RzOyB0YXJfc2RrOyAke1NES19QQUNLQUdJTkdfQ09NTUFORH0gIgogCkBAIC05Nyw2ICsxMDEsMjYgQEAKICAgICBmcm9tIG9lLnNkayBpbXBvcnQgcG9wdWxhdGVfc2RrCiAgICAgZnJvbSBvZS5tYW5pZmVzdCBpbXBvcnQgY3JlYXRlX21hbmlmZXN0LCBNYW5pZmVzdAogCisgICAgIyBIYW5kbGUgcGFja2FnZSBleGNsdXNpb25zCisgICAgZXhjbF9wa2dzID0gKGQuZ2V0VmFyKCJQQUNLQUdFX0VYQ0xVREUiKSBvciAiIikuc3BsaXQoKQorICAgIGluc3RfcGtncyA9IChkLmdldFZhcigiUEFDS0FHRV9JTlNUQUxMIikgb3IgIiIpLnNwbGl0KCkKKyAgICBpbnN0X2F0dGVtcHRfcGtncyA9IChkLmdldFZhcigiUEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZIikgb3IgIiIpLnNwbGl0KCkKKworICAgIGQuc2V0VmFyKCdQQUNLQUdFX0lOU1RBTExfT1JJRycsICcgJy5qb2luKGluc3RfcGtncykpCisgICAgZC5zZXRWYXIoJ1BBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWScsICcgJy5qb2luKGluc3RfYXR0ZW1wdF9wa2dzKSkKKworICAgIGZvciBwa2cgaW4gZXhjbF9wa2dzOgorICAgICAgICBpZiBwa2cgaW4gaW5zdF9wa2dzOgorICAgICAgICAgICAgYmIud2FybigiUGFja2FnZSAlcywgc2V0IHRvIGJlIGV4Y2x1ZGVkLCBpcyBpbiAlcyBQQUNLQUdFX0lOU1RBTEwgKCVzKS4gIEl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LiIgJSAocGtnLCBkLmdldFZhcignUE4nKSwgaW5zdF9wa2dzKSkKKyAgICAgICAgICAgIGluc3RfcGtncy5yZW1vdmUocGtnKQorCisgICAgICAgIGlmIHBrZyBpbiBpbnN0X2F0dGVtcHRfcGtnczoKKyAgICAgICAgICAgIGJiLndhcm4oIlBhY2thZ2UgJXMsIHNldCB0byBiZSBleGNsdWRlZCwgaXMgaW4gJXMgUEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZICglcykuICBJdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgbGlzdC4iICUgKHBrZywgZC5nZXRWYXIoJ1BOJyksIGluc3RfcGtncykpCisgICAgICAgICAgICBpbnN0X2F0dGVtcHRfcGtncy5yZW1vdmUocGtnKQorCisgICAgZC5zZXRWYXIoIlBBQ0tBR0VfSU5TVEFMTCIsICcgJy5qb2luKGluc3RfcGtncykpCisgICAgZC5zZXRWYXIoIlBBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWSIsICcgJy5qb2luKGluc3RfYXR0ZW1wdF9wa2dzKSkKKwogICAgIHBuID0gZC5nZXRWYXIoJ1BOJykKICAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJUT09MQ0hBSU5fVEFSR0VUX1RBU0siLCBwbiwgZCkKICAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJUT09MQ0hBSU5fVEFSR0VUX1RBU0tfQVRURU1QVE9OTFkiLCBwbiwgZCkKQEAgLTI1Niw4ICsyODAsNyBAQAogfQogCiBkZWYgc2RrX2NvbW1hbmRfdmFyaWFibGVzKGQpOgotICAgIHJldHVybiBbJ09QS0dfUFJFUFJPQ0VTU19DT01NQU5EUycsJ09QS0dfUE9TVFBST0NFU1NfQ09NTUFORFMnLCdQT1BVTEFURV9TREtfUE9TVF9IT1NUX0NPTU1BTkQnLCdQT1BVTEFURV9TREtfUE9TVF9UQVJHRVRfQ09NTUFORCcsJ1NES19QT1NUUFJPQ0VTU19DT01NQU5EJywnUlBNX1BSRVBST0NFU1NfQ09NTUFORFMnLAotICAgICAgICAgICAgJ1JQTV9QT1NUUFJPQ0VTU19DT01NQU5EUyddCisgICAgcmV0dXJuIFsnT1BLR19QUkVQUk9DRVNTX0NPTU1BTkRTJywnT1BLR19QT1NUUFJPQ0VTU19DT01NQU5EUycsJ1BPUFVMQVRFX1NES19QT1NUX0hPU1RfQ09NTUFORCcsJ1BPUFVMQVRFX1NES19QUkVfVEFSR0VUX0NPTU1BTkQnLCdQT1BVTEFURV9TREtfUE9TVF9UQVJHRVRfQ09NTUFORCcsJ1NES19QT1NUUFJPQ0VTU19DT01NQU5EJywnUlBNX1BSRVBST0NFU1NfQ09NTUFORFMnLCdSUE1fUE9TVFBST0NFU1NfQ09NTUFORFMnXQogCiBkZWYgc2RrX3ZhcmlhYmxlcyhkKToKICAgICB2YXJpYWJsZXMgPSBbJ0JVSUxEX0lNQUdFU19GUk9NX0ZFRURTJywnU0RLX09TJywnU0RLX09VVFBVVCcsJ1NES1BBVEhOQVRJVkUnLCdTREtUQVJHRVRTWVNST09UJywnU0RLX0RJUicsJ1NES19WRU5ET1InLCdTREtJTUFHRV9JTlNUQUxMX0NPTVBMRU1FTlRBUlknLCdTREtfUEFDS0FHRV9BUkNIUycsJ1NES19PVVRQVVQnLApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wb3B1bGF0ZV9zZGtfZXh0LmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nka19leHQuYmJjbGFzcwppbmRleCA4YjhhMzQxLi5jNzlkZGJiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nka19leHQuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nka19leHQuYmJjbGFzcwpAQCAtMzMsNiArMzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETF9ESVIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU1RBVEVfRElSIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVE1QRElSIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkJfU0VSVkVSX1RJTUVPVVQgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKIFNES19JTkhFUklUX0JMQUNLTElTVCA/PSAiYnVpbGRoaXN0b3J5IGljZWNjIgogU0RLX1VQREFURV9VUkwgPz0gIiIKQEAgLTY5LDcgKzcwLDYgQEAKICMgQ09SRUJBU0UgYmUgcHJlc2VydmVkIGFzIHdlbGwgYXMgdW50cmFja2VkIGZpbGVzLgogQ09SRUJBU0VfRklMRVMgPz0gIiBcCiAgICAgb2UtaW5pdC1idWlsZC1lbnYgXAotICAgIG9lLWluaXQtYnVpbGQtZW52LW1lbXJlcyBcCiAgICAgc2NyaXB0cyBcCiAgICAgTElDRU5TRSBcCiAgICAgLnRlbXBsYXRlY29uZiBcCkBAIC04Myw2ICs4MywzOSBAQAogU0RLX0VYVF9UQVJHRVRfTUFOSUZFU1QgPSAiJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTkVYVF9PVVRQVVROQU1FfS50YXJnZXQubWFuaWZlc3QiCiBTREtfRVhUX0hPU1RfTUFOSUZFU1QgPSAiJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTkVYVF9PVVRQVVROQU1FfS5ob3N0Lm1hbmlmZXN0IgogCitweXRob24gd3JpdGVfdGFyZ2V0X3Nka19leHRfbWFuaWZlc3QgKCkgeworICAgIGZyb20gb2Uuc2RrIGltcG9ydCBnZXRfZXh0cmFfc2RraW5mbworICAgIHNzdGF0ZV9kaXIgPSBkLmV4cGFuZCgnJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L3NzdGF0ZS1jYWNoZScpCisgICAgZXh0cmFfaW5mbyA9IGdldF9leHRyYV9zZGtpbmZvKHNzdGF0ZV9kaXIpCisKKyAgICB0YXJnZXQgPSBkLmdldFZhcignVEFSR0VUX1NZUycpCisgICAgdGFyZ2V0X211bHRpbWFjaCA9IGQuZ2V0VmFyKCdNVUxUSU1BQ0hfVEFSR0VUX1NZUycpCisgICAgcmVhbF90YXJnZXRfbXVsdGltYWNoID0gZC5nZXRWYXIoJ1JFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVMnKQorCisgICAgcGtncyA9IHt9CisgICAgd2l0aCBvcGVuKGQuZ2V0VmFyKCdTREtfRVhUX1RBUkdFVF9NQU5JRkVTVCcpLCAndycpIGFzIGY6CisgICAgICAgIGZvciBmbiBpbiBleHRyYV9pbmZvWydmaWxlc2l6ZXMnXToKKyAgICAgICAgICAgIGluZm8gPSBmbi5zcGxpdCgnOicpCisgICAgICAgICAgICBpZiBpbmZvWzJdIGluICh0YXJnZXQsIHRhcmdldF9tdWx0aW1hY2gsIHJlYWxfdGFyZ2V0X211bHRpbWFjaCkgXAorICAgICAgICAgICAgICAgICAgICBvciBpbmZvWzVdID09ICdhbGxhcmNoJzoKKyAgICAgICAgICAgICAgICBpZiBub3QgaW5mb1sxXSBpbiBwa2dzOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCIlcyAlcyAlc1xuIiAlIChpbmZvWzFdLCBpbmZvWzJdLCBpbmZvWzNdKSkKKyAgICAgICAgICAgICAgICAgICAgcGtnc1tpbmZvWzFdXSA9IHt9Cit9CitweXRob24gd3JpdGVfaG9zdF9zZGtfZXh0X21hbmlmZXN0ICgpIHsKKyAgICBmcm9tIG9lLnNkayBpbXBvcnQgZ2V0X2V4dHJhX3Nka2luZm8KKyAgICBzc3RhdGVfZGlyID0gZC5leHBhbmQoJyR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS9zc3RhdGUtY2FjaGUnKQorICAgIGV4dHJhX2luZm8gPSBnZXRfZXh0cmFfc2RraW5mbyhzc3RhdGVfZGlyKQorICAgIGhvc3QgPSBkLmdldFZhcignQlVJTERfU1lTJykKKyAgICB3aXRoIG9wZW4oZC5nZXRWYXIoJ1NES19FWFRfSE9TVF9NQU5JRkVTVCcpLCAndycpIGFzIGY6CisgICAgICAgIGZvciBmbiBpbiBleHRyYV9pbmZvWydmaWxlc2l6ZXMnXToKKyAgICAgICAgICAgIGluZm8gPSBmbi5zcGxpdCgnOicpCisgICAgICAgICAgICBpZiBpbmZvWzJdID09IGhvc3Q6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiJXMgJXMgJXNcbiIgJSAoaW5mb1sxXSwgaW5mb1syXSwgaW5mb1szXSkpCit9CisKK1NES19QT1NUUFJPQ0VTU19DT01NQU5EX2FwcGVuZF90YXNrLXBvcHVsYXRlLXNkay1leHQgPSAid3JpdGVfdGFyZ2V0X3Nka19leHRfbWFuaWZlc3Q7IHdyaXRlX2hvc3Rfc2RrX2V4dF9tYW5pZmVzdDsgIiAgICAKKwogU0RLX1RJVExFX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICIke0BkLmdldFZhcignRElTVFJPX05BTUUnKSBvciBkLmdldFZhcignRElTVFJPJyl9IEV4dGVuc2libGUgU0RLIgogCiBkZWYgY2xlYW5fZXNka19idWlsZGRpcihkLCBzZGtiYXNlcGF0aCk6CkBAIC0xMTEsNyArMTQ0LDcgQEAKICAgICAgICAgd2l0aCBvcGVuKHNka2Jhc2VwYXRoICsgJy9jb25mL2xvY2FsLmNvbmYnLCAnYScpIGFzIGY6CiAgICAgICAgICAgICAjIEZvcmNlIHRoZSB1c2Ugb2Ygc3N0YXRlIGZyb20gdGhlIGJ1aWxkIHN5c3RlbQogICAgICAgICAgICAgZi53cml0ZSgnXG5TU1RBVEVfRElSX2ZvcmNldmFyaWFibGUgPSAiJXMiXG4nICUgZC5nZXRWYXIoJ1NTVEFURV9ESVInKSkKLSAgICAgICAgICAgIGYud3JpdGUoJ1NTVEFURV9NSVJST1JTX2ZvcmNldmFyaWFibGUgPSAiIlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ1NTVEFURV9NSVJST1JTX2ZvcmNldmFyaWFibGUgPSAiZmlsZTovL3VuaXZlcnNhbC8oLiopIGZpbGU6Ly91bml2ZXJzYWwtNC45L1xcMSBmaWxlOi8vdW5pdmVyc2FsLTQuOS8oLiopIGZpbGU6Ly91bml2ZXJzYWwtNC44L1xcMSJcbicpCiAgICAgICAgICAgICAjIEVuc3VyZSBUTVBESVIgaXMgdGhlIGRlZmF1bHQgc28gdGhhdCBjbGVhbl9lc2RrX2J1aWxkZGlyKCkgY2FuIGRlbGV0ZSBpdAogICAgICAgICAgICAgZi53cml0ZSgnVE1QRElSX2ZvcmNldmFyaWFibGUgPSAiJHtUT1BESVJ9L3RtcCJcbicpCiAgICAgICAgICAgICBmLndyaXRlKCdUQ0xJQkNBUFBFTkRfZm9yY2V2YXJpYWJsZSA9ICIiXG4nKQpAQCAtMzE0LDEyICszNDcsMTggQEAKICAgICAgICAgICAgICMgdGhlIHNpZyBjb21wdXRlZCBmcm9tIHRoZSBtZXRhZGF0YS4KICAgICAgICAgICAgIGYud3JpdGUoJ1NJR0dFTl9MT0NLRURTSUdTX1RBU0tTSUdfQ0hFQ0sgPSAid2FybiJcblxuJykKIAorICAgICAgICAgICAgIyBXZSB3YW50IHRvIGJlIGFibGUgdG8gc2V0IHRoaXMgd2l0aG91dCBhIGZ1bGwgcmVwYXJzZQorICAgICAgICAgICAgZi53cml0ZSgnQkJfSEFTSENPTkZJR19XSElURUxJU1RfYXBwZW5kID0gIiBTSUdHRU5fVU5MT0NLRURfUkVDSVBFUyJcblxuJykKKwogICAgICAgICAgICAgIyBTZXQgdXAgd2hpdGVsaXN0IGZvciBydW4gb24gaW5zdGFsbAogICAgICAgICAgICAgZi53cml0ZSgnQkJfU0VUU0NFTkVfRU5GT1JDRV9XSElURUxJU1QgPSAiJToqICo6ZG9fc2hhcmVkX3dvcmtkaXIgKjpkb19ybV93b3JrIHdpYy10b29sczoqICo6ZG9fYWRkdG9fcmVjaXBlX3N5c3Jvb3QiXG5cbicpCiAKICAgICAgICAgICAgICMgSGlkZSB0aGUgY29uZmlnIGluZm9ybWF0aW9uIGZyb20gYml0YmFrZSBvdXRwdXQgKHNpbmNlIGl0J3MgZml4ZWQgd2l0aGluIHRoZSBTREspCiAgICAgICAgICAgICBmLndyaXRlKCdCVUlMRENGR19IRUFERVIgPSAiIlxuXG4nKQogCisgICAgICAgICAgICBmLndyaXRlKCcjIFByb3ZpZGUgYSBmbGFnIHRvIGluZGljYXRlIHdlIGFyZSBpbiB0aGUgRVhUX1NESyBDb250ZXh0XG4nKQorICAgICAgICAgICAgZi53cml0ZSgnV0lUSElOX0VYVF9TREsgPSAiMSJcblxuJykKKwogICAgICAgICAgICAgIyBNYXAgZ2NjLWRlcGVuZGVudCB1bmluYXRpdmUgc3N0YXRlIGNhY2hlIGZvciBpbnN0YWxsZXIgdXNhZ2UKICAgICAgICAgICAgIGYud3JpdGUoJ1NTVEFURV9NSVJST1JTICs9ICIgZmlsZTovL3VuaXZlcnNhbC8oLiopIGZpbGU6Ly91bml2ZXJzYWwtNC45L1xcMSBmaWxlOi8vdW5pdmVyc2FsLTQuOS8oLiopIGZpbGU6Ly91bml2ZXJzYWwtNC44L1xcMSJcblxuJykKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9weXRob24zbmF0aXZlLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3B5dGhvbjNuYXRpdmUuYmJjbGFzcwppbmRleCBlZjQ2OGIzLi44OTY2NWVmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3B5dGhvbjNuYXRpdmUuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3B5dGhvbjNuYXRpdmUuYmJjbGFzcwpAQCAtOSw1ICs5LDggQEAKIGV4cG9ydCBTVEFHSU5HX0lOQ0RJUgogZXhwb3J0IFNUQUdJTkdfTElCRElSCiAKKyMgc3VwcHJlc3MgaG9zdCB1c2VyJ3Mgc2l0ZS1wYWNrYWdlcyBkaXJzLgorZXhwb3J0IFBZVEhPTk5PVVNFUlNJVEUgPSAiMSIKKwogIyBhdXRvY29uZiBtYWNyb3Mgd2lsbCB1c2UgdGhlaXIgaW50ZXJuYWwgZGVmYXVsdCBwcmVmZXJlbmNlIG90aGVyd2lzZQogZXhwb3J0IFBZVEhPTgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9weXRob25uYXRpdmUuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHl0aG9ubmF0aXZlLmJiY2xhc3MKaW5kZXggNGUwMzgxYi4uNGNjOGIyNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9weXRob25uYXRpdmUuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3B5dGhvbm5hdGl2ZS5iYmNsYXNzCkBAIC0xMiw1ICsxMiw4IEBACiBleHBvcnQgU1RBR0lOR19JTkNESVIKIGV4cG9ydCBTVEFHSU5HX0xJQkRJUgogCisjIHN1cHByZXNzIGhvc3QgdXNlcidzIHNpdGUtcGFja2FnZXMgZGlycy4KK2V4cG9ydCBQWVRIT05OT1VTRVJTSVRFID0gIjEiCisKICMgYXV0b2NvbmYgbWFjcm9zIHdpbGwgdXNlIHRoZWlyIGludGVybmFsIGRlZmF1bHQgcHJlZmVyZW5jZSBvdGhlcndpc2UKIGV4cG9ydCBQWVRIT04KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcWVtdWJvb3QuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcWVtdWJvb3QuYmJjbGFzcwppbmRleCAzNDY4ZDFjLi4xNWE5ZTYzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3FlbXVib290LmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9xZW11Ym9vdC5iYmNsYXNzCkBAIC04NSwxMCArODUsMTEgQEAKIAogICAgIHFlbXVib290ID0gIiVzLyVzLnFlbXVib290LmNvbmYiICUgKGQuZ2V0VmFyKCdJTUdERVBMT1lESVInKSwgZC5nZXRWYXIoJ0lNQUdFX05BTUUnKSkKICAgICBxZW11Ym9vdF9saW5rID0gIiVzLyVzLnFlbXVib290LmNvbmYiICUgKGQuZ2V0VmFyKCdJTUdERVBMT1lESVInKSwgZC5nZXRWYXIoJ0lNQUdFX0xJTktfTkFNRScpKQotICAgIHRvcGRpcj0iJXMvIiUoZC5nZXRWYXIoJ1RPUERJUicpKS5yZXBsYWNlKCIvLyIsIi8iKQorICAgIGZpbmFscGF0aCA9IGQuZ2V0VmFyKCJERVBMT1lfRElSX0lNQUdFIikKKyAgICB0b3BkaXIgPSBkLmdldFZhcignVE9QRElSJykKICAgICBjZiA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoKQogICAgIGNmLmFkZF9zZWN0aW9uKCdjb25maWdfYnNwJykKLSAgICBmb3IgayBpbiBxZW11Ym9vdF92YXJzKGQpOgorICAgIGZvciBrIGluIHNvcnRlZChxZW11Ym9vdF92YXJzKGQpKToKICAgICAgICAgIyBxZW11LWhlbHBlci1uYXRpdmUgc3lzcm9vdCBpcyBub3QgcmVtb3ZlZCBieSBybV93b3JrIGFuZAogICAgICAgICAjIGNvbnRhaW5zIGFsbCB0b29scyByZXF1aXJlZCBieSBydW5xZW11CiAgICAgICAgIGlmIGsgPT0gJ1NUQUdJTkdfQklORElSX05BVElWRSc6CkBAIC05OCw3ICs5OSw4IEBACiAgICAgICAgICAgICB2YWwgPSBkLmdldFZhcihrKQogICAgICAgICAjIHdlIG9ubHkgd2FudCB0byB3cml0ZSBvdXQgcmVsYXRpdmUgcGF0aHMgc28gdGhhdCB3ZSBjYW4gcmVsb2NhdGUgaW1hZ2VzCiAgICAgICAgICMgYW5kIHN0aWxsIHJ1biB0aGVtCi0gICAgICAgIHZhbD12YWwucmVwbGFjZSh0b3BkaXIsIiIpCisgICAgICAgIGlmIHZhbC5zdGFydHN3aXRoKHRvcGRpcik6CisgICAgICAgICAgICB2YWwgPSBvcy5wYXRoLnJlbHBhdGgodmFsLCBmaW5hbHBhdGgpCiAgICAgICAgIGNmLnNldCgnY29uZmlnX2JzcCcsIGssICclcycgJSB2YWwpCiAKICAgICAjIFFCX0RFRkFVTFRfS0VSTkVMJ3MgdmFsdWUgb2YgS0VSTkVMX0lNQUdFVFlQRSBpcyB0aGUgbmFtZSBvZiBhIHN5bWxpbmsKQEAgLTEwOCwxNCArMTEwLDE1IEBACiAgICAga2VybmVsID0gb3MucGF0aC5yZWFscGF0aChrZXJuZWxfbGluaykKICAgICAjIHdlIG9ubHkgd2FudCB0byB3cml0ZSBvdXQgcmVsYXRpdmUgcGF0aHMgc28gdGhhdCB3ZSBjYW4gcmVsb2NhdGUgaW1hZ2VzCiAgICAgIyBhbmQgc3RpbGwgcnVuIHRoZW0KLSAgICBrZXJuZWw9a2VybmVsLnJlcGxhY2UodG9wZGlyLCIiKQorICAgIGtlcm5lbCA9IG9zLnBhdGgucmVscGF0aChrZXJuZWwsIGZpbmFscGF0aCkKICAgICBjZi5zZXQoJ2NvbmZpZ19ic3AnLCAnUUJfREVGQVVMVF9LRVJORUwnLCBrZXJuZWwpCiAKICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKHFlbXVib290KSkKICAgICB3aXRoIG9wZW4ocWVtdWJvb3QsICd3JykgYXMgZjoKICAgICAgICAgY2Yud3JpdGUoZikKIAotICAgIGlmIG9zLnBhdGgubGV4aXN0cyhxZW11Ym9vdF9saW5rKToKLSAgICAgICBvcy5yZW1vdmUocWVtdWJvb3RfbGluaykKLSAgICBvcy5zeW1saW5rKG9zLnBhdGguYmFzZW5hbWUocWVtdWJvb3QpLCBxZW11Ym9vdF9saW5rKQorICAgIGlmIHFlbXVib290X2xpbmsgIT0gcWVtdWJvb3Q6CisgICAgICAgIGlmIG9zLnBhdGgubGV4aXN0cyhxZW11Ym9vdF9saW5rKToKKyAgICAgICAgICAgb3MucmVtb3ZlKHFlbXVib290X2xpbmspCisgICAgICAgIG9zLnN5bWxpbmsob3MucGF0aC5iYXNlbmFtZShxZW11Ym9vdCksIHFlbXVib290X2xpbmspCiB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JlcG9ydC1lcnJvci5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yZXBvcnQtZXJyb3IuYmJjbGFzcwppbmRleCBkNmZkZDM2Li4xYzU1YWJmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JlcG9ydC1lcnJvci5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcmVwb3J0LWVycm9yLmJiY2xhc3MKQEAgLTI5LDYgKzI5LDEzIEBACiAgICAgICAgIGltcG9ydCBqc29uCiAgICAgICAgIGltcG9ydCBjb2RlY3MKIAorICAgICAgICBkZWYgbmF0aXZlbHNiKCk6CisgICAgICAgICAgICBuYXRpdmVsc2JzdHIgPSBlLmRhdGEuZ2V0VmFyKCJOQVRJVkVMU0JTVFJJTkciKQorICAgICAgICAgICAgIyBwcm92aWRlIGEgYml0IG1vcmUgaG9zdCBpbmZvIGluIGNhc2Ugb2YgdW5pbmF0aXZlIGJ1aWxkCisgICAgICAgICAgICBpZiBlLmRhdGEuZ2V0VmFyKCdVTklOQVRJVkVfVVJMJykgIT0gJ3Vuc2V0JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJy8nLmpvaW4oW25hdGl2ZWxzYnN0ciwgbHNiX2Rpc3Ryb19pZGVudGlmaWVyKGUuZGF0YSldKQorICAgICAgICAgICAgcmV0dXJuIG5hdGl2ZWxzYnN0cgorCiAgICAgICAgIGxvZ3BhdGggPSBlLmRhdGEuZ2V0VmFyKCdFUlJfUkVQT1JUX0RJUicpCiAgICAgICAgIGRhdGFmaWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsICJlcnJvci1yZXBvcnQudHh0IikKIApAQCAtMzgsNyArNDUsNyBAQAogICAgICAgICAgICAgbWFjaGluZSA9IGUuZGF0YS5nZXRWYXIoIk1BQ0hJTkUiKQogICAgICAgICAgICAgZGF0YVsnbWFjaGluZSddID0gbWFjaGluZQogICAgICAgICAgICAgZGF0YVsnYnVpbGRfc3lzJ10gPSBlLmRhdGEuZ2V0VmFyKCJCVUlMRF9TWVMiKQotICAgICAgICAgICAgZGF0YVsnbmF0aXZlbHNiJ10gPSBlLmRhdGEuZ2V0VmFyKCJOQVRJVkVMU0JTVFJJTkciKQorICAgICAgICAgICAgZGF0YVsnbmF0aXZlbHNiJ10gPSBuYXRpdmVsc2IoKQogICAgICAgICAgICAgZGF0YVsnZGlzdHJvJ10gPSBlLmRhdGEuZ2V0VmFyKCJESVNUUk8iKQogICAgICAgICAgICAgZGF0YVsndGFyZ2V0X3N5cyddID0gZS5kYXRhLmdldFZhcigiVEFSR0VUX1NZUyIpCiAgICAgICAgICAgICBkYXRhWydmYWlsdXJlcyddID0gW10KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcm1fd29yay5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ybV93b3JrLmJiY2xhc3MKaW5kZXggYmFkZWFlYi4uMzFkOTllNCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ybV93b3JrLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ybV93b3JrLmJiY2xhc3MKQEAgLTM1LDIyICszNSwxMiBAQAogICAgICAgICBmaQogICAgIGRvbmUKIAotICAgIGNkICR7V09SS0RJUn0KLSAgICBmb3IgZGlyIGluICoKLSAgICBkbwotICAgICAgICAjIFJldGFpbiBvbmx5IGxvZ3MgYW5kIG90aGVyIGZpbGVzIGluIHRlbXAsIHNhZmVseSBpZ25vcmUKLSAgICAgICAgIyBmYWlsdXJlcyBvZiByZW1vdmluZyBwc2V1ZG8gZm9sZXJzIG9uIE5GUzIvMyBzZXJ2ZXIuCi0gICAgICAgIGlmIFsgJGRpciA9ICdwc2V1ZG8nIF07IHRoZW4KLSAgICAgICAgICAgIHJtIC1yZiAkZGlyIDI+IC9kZXYvbnVsbCB8fCB0cnVlCi0gICAgICAgIGVsaWYgISBlY2hvICcke1JNX1dPUktfRVhDTFVERV9JVEVNU30nIHwgZ3JlcCAtcSAtdyAiJGRpciI7IHRoZW4KLSAgICAgICAgICAgIHJtIC1yZiAkZGlyCi0gICAgICAgIGZpCi0gICAgZG9uZQotCiAgICAgIyBOZWVkIHRvIGFkZCBwc2V1ZG8gYmFjayBvciBzdWJzcWV1ZW50IHdvcmsgaW4gdGhpcyB3b3JrZGlyCiAgICAgIyBtaWdodCBmYWlsIHNpbmNlIHNldHNjZW5lIG1heSBub3QgcmVydW4gdG8gcmVjcmVhdGUgaXQKICAgICBta2RpciAtcCAke1dPUktESVJ9L3BzZXVkby8KIAorICAgIGV4Y2x1ZGVzPScke1JNX1dPUktfRVhDTFVERV9JVEVNU30nCisKICAgICAjIENoYW5nZSBub3JtYWwgc3RhbXBzIGludG8gc2V0c2NlbmUgc3RhbXBzIGFzIHRoZXkgYmV0dGVyIHJlZmxlY3QgdGhlCiAgICAgIyBmYWN0IFdPUktESVIgaXMgbm93IGVtcHR5CiAgICAgIyBBbHNvIGxlYXZlIG5vZXhlYyBzdGFtcHMgc2luY2Ugc2V0c2NlbmUgc3RhbXBzIGRvbid0IGNvdmVyIHRoZW0KQEAgLTcxLDcgKzYxLDEyIEBACiAgICAgICAgICAgICAgICAgaT1kdW1teQogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICpkb19yb290ZnMqfCpkb19pbWFnZSp8KmRvX2Jvb3RpbWcqfCpkb19ib290ZGlyZWN0ZGlzayp8KmRvX3ZtaW1nKnwqZG9fd3JpdGVfcWVtdWJvb3RfY29uZiopCisgICAgICAgICAgICAqZG9faW1hZ2VfY29tcGxldGUqKQorICAgICAgICAgICAgICAgIG12ICRpIGBlY2hvICRpIHwgc2VkIC1lICJzI2RvX2ltYWdlX2NvbXBsZXRlI2RvX2ltYWdlX2NvbXBsZXRlX3NldHNjZW5lIyJgCisgICAgICAgICAgICAgICAgaT1kdW1teQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICpkb19yb290ZnMqfCpkb19pbWFnZSp8KmRvX2Jvb3RpbWcqfCpkb193cml0ZV9xZW11Ym9vdF9jb25mKikKICAgICAgICAgICAgICAgICBpPWR1bW15CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICA7OwpAQCAtNzksNiArNzQsMTIgQEAKICAgICAgICAgICAgICAgICBpPWR1bW15CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKmRvX2FkZHRvX3JlY2lwZV9zeXNyb290KikKKyAgICAgICAgICAgICAgICAjIFByZXNlcnZlIHJlY2lwZS1zeXNyb290LW5hdGl2ZSBpZiBkb19hZGR0b19yZWNpcGVfc3lzcm9vdCBoYXMgYmVlbiB1c2VkCisgICAgICAgICAgICAgICAgZXhjbHVkZXM9IiRleGNsdWRlcyByZWNpcGUtc3lzcm9vdC1uYXRpdmUiCisgICAgICAgICAgICAgICAgaT1kdW1teQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICMgV2UgcmVtb3ZlIGRvX3BhY2thZ2UgZW50aXJlbHksIGluY2x1ZGluZyBhbnkKICAgICAgICAgICAgICMgc3N0YXRlIHZlcnNpb24gc2luY2Ugb3RoZXJ3aXNlIHdlJ2QgbmVlZCB0byBsZWF2ZSAncGxhaW5kaXJzJyBhcm91bmQKICAgICAgICAgICAgICMgc3VjaCBhcyAncGFja2FnZXMnIGFuZCAncGFja2FnZXMtc3BsaXQnIGFuZCB0aGVzZSBjYW4gYmUgbGFyZ2UuIE5vIGVuZApAQCAtMTAxLDYgKzEwMiwxOCBAQAogICAgICAgICBkb25lCiAgICAgICAgIHJtIC1mICRpCiAgICAgZG9uZQorCisgICAgY2QgJHtXT1JLRElSfQorICAgIGZvciBkaXIgaW4gKgorICAgIGRvCisgICAgICAgICMgUmV0YWluIG9ubHkgbG9ncyBhbmQgb3RoZXIgZmlsZXMgaW4gdGVtcCwgc2FmZWx5IGlnbm9yZQorICAgICAgICAjIGZhaWx1cmVzIG9mIHJlbW92aW5nIHBzZXVkbyBmb2xlcnMgb24gTkZTMi8zIHNlcnZlci4KKyAgICAgICAgaWYgWyAkZGlyID0gJ3BzZXVkbycgXTsgdGhlbgorICAgICAgICAgICAgcm0gLXJmICRkaXIgMj4gL2Rldi9udWxsIHx8IHRydWUKKyAgICAgICAgZWxpZiAhIGVjaG8gIiRleGNsdWRlcyIgfCBncmVwIC1xIC13ICIkZGlyIjsgdGhlbgorICAgICAgICAgICAgcm0gLXJmICRkaXIKKyAgICAgICAgZmkKKyAgICBkb25lCiB9CiBkb19ybV93b3JrX2FsbCAoKSB7CiAgICAgOgpAQCAtMTUzLDYgKzE2NiwxMCBAQAogICAgIGRlcHMgPSBzZXQoYmIuYnVpbGQucHJlY2VlZHRhc2soJ2RvX2J1aWxkJywgVHJ1ZSwgZCkpCiAgICAgZGVwcy5kaWZmZXJlbmNlX3VwZGF0ZSgoJ2RvX2J1aWxkJywgJ2RvX3JtX3dvcmtfYWxsJykpCiAKKyAgICAjIGRlcHMgY2FuIGJlIGVtcHR5IGlmIGRvX2J1aWxkIGRvZXNuJ3QgZXhpc3QsIGUuZy4gKi1pbml0YWwgcmVjaXBlcworICAgIGlmIG5vdCBkZXBzOgorICAgICAgICBkZXBzID0gWyJkb19wb3B1bGF0ZV9zeXNyb290IiwgImRvX3BvcHVsYXRlX2xpYyJdCisKICAgICBpZiBwbiBpbiBleGNsdWRlczoKICAgICAgICAgZC5kZWxWYXJGbGFnKCdybV93b3JrX3Jvb3RmcycsICdjbGVhbmRpcnMnKQogICAgICAgICBkLmRlbFZhckZsYWcoJ3JtX3dvcmtfcG9wdWxhdGVzZGsnLCAnY2xlYW5kaXJzJykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcm9vdGZzLXBvc3Rjb21tYW5kcy5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yb290ZnMtcG9zdGNvbW1hbmRzLmJiY2xhc3MKaW5kZXggYzE5ZmY4Ny4uYTRlNjI3ZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yb290ZnMtcG9zdGNvbW1hbmRzLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yb290ZnMtcG9zdGNvbW1hbmRzLmJiY2xhc3MKQEAgLTE0LDYgKzE0LDE0IEBACiAjIFR3ZWFrIHRoZSBtb3VudCBvcHRpb25zIGZvciByb290ZnMgaW4gL2V0Yy9mc3RhYiBpZiByZWFkLW9ubHktcm9vdGZzIGlzIGVuYWJsZWQKIFJPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICcke0BiYi51dGlscy5jb250YWlucygiSU1BR0VfRkVBVFVSRVMiLCAicmVhZC1vbmx5LXJvb3RmcyIsICJyZWFkX29ubHlfcm9vdGZzX2hvb2s7ICIsICIiLGQpfScKIAorIyBXZSBhbHNvIG5lZWQgdG8gZG8gdGhlIHNhbWUgZm9yIHRoZSBrZXJuZWwgYm9vdCBwYXJhbWV0ZXJzLAorIyBvdGhlcndpc2Uga2VybmVsIG9yIGluaXRyYW1mcyBlbmQgdXAgbW91bnRpbmcgdGhlIHJvb3RmcyByZWFkL3dyaXRlCisjICh0aGUgZGVmYXVsdCkgaWYgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UuCisjCisjIFdlIGRvIHRoaXMgd2l0aCBfYXBwZW5kIGJlY2F1c2UgdGhlIGRlZmF1bHQgdmFsdWUgbWlnaHQgZ2V0IHNldCBsYXRlciB3aXRoID89CisjIGFuZCB3ZSBkb24ndCB3YW50IHRvIGRpc2FibGUgc3VjaCBhIGRlZmF1bHQgdGhhdCBieSBzZXR0aW5nIGEgdmFsdWUgaGVyZS4KK0FQUEVORF9hcHBlbmQgPSAnJHtAYmIudXRpbHMuY29udGFpbnMoIklNQUdFX0ZFQVRVUkVTIiwgInJlYWQtb25seS1yb290ZnMiLCAiIHJvIiwgIiIsIGQpfScKKwogIyBHZW5lcmF0ZXMgdGVzdCBkYXRhIGZpbGUgd2l0aCBkYXRhIHN0b3JlIHZhcmlhYmxlcyBleHBhbmRlZCBpbiBqc29uIGZvcm1hdAogUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gIndyaXRlX2ltYWdlX3Rlc3RfZGF0YSA7ICIKIApAQCAtODQsNyArOTIsOSBAQAogIwogcmVhZF9vbmx5X3Jvb3Rmc19ob29rICgpIHsKIAkjIFR3ZWFrIHRoZSBtb3VudCBvcHRpb24gYW5kIGZzX3Bhc3NubyBmb3Igcm9vdGZzIGluIGZzdGFiCi0Jc2VkIC1pIC1lICcvXlsjWzpzcGFjZTpdXSpcL2Rldlwvcm9vdC97cy9kZWZhdWx0cy9yby87cy9cKFtbOnNwYWNlOl1dKltbOmRpZ2l0Ol1dXClcKFtbOnNwYWNlOl1dKlwpW1s6ZGlnaXQ6XV0kL1wxXDIwL30nICR7SU1BR0VfUk9PVEZTfS9ldGMvZnN0YWIKKwlpZiBbIC1mICR7SU1BR0VfUk9PVEZTfS9ldGMvZnN0YWIgXTsgdGhlbgorCQlzZWQgLWkgLWUgJy9eWyNbOnNwYWNlOl1dKlwvZGV2XC9yb290L3tzL2RlZmF1bHRzL3JvLztzL1woW1s6c3BhY2U6XV0qW1s6ZGlnaXQ6XV1cKVwoW1s6c3BhY2U6XV0qXClbWzpkaWdpdDpdXSQvXDFcMjAvfScgJHtJTUFHRV9ST09URlN9L2V0Yy9mc3RhYgorCWZpCiAKIAkjIElmIHdlJ3JlIHVzaW5nIG9wZW5zc2ggYW5kIHRoZSAvZXRjL3NzaCBkaXJlY3RvcnkgaGFzIG5vIHByZS1nZW5lcmF0ZWQga2V5cywKIAkjIHdlIHNob3VsZCBjb25maWd1cmUgb3BlbnNzaCB0byB1c2UgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSAvZXRjL3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQpAQCAtMzE2LDUgKzMyNiw1IEBACiAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgaWYgJ3Vuc2F0aXNmaWVkIHJlY29tbWVuZGF0aW9uIGZvcicgaW4gbGluZToKLSAgICAgICAgICAgICAgICBiYi53YXJuKCdbbG9nX2NoZWNrXSAlczogJXMnICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBsaW5lKSkKKyAgICAgICAgICAgICAgICBiYi53YXJuKCdbbG9nX2NoZWNrXSAlczogJXMnICUgKGQuZ2V0VmFyKCdQTicpLCBsaW5lKSkKIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcm9vdGZzX2RlYi5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yb290ZnNfZGViLmJiY2xhc3MKaW5kZXggMjYyZTNkNS4uOWVlMWRmYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yb290ZnNfZGViLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yb290ZnNfZGViLmJiY2xhc3MKQEAgLTMzLDYgKzMzLDMgQEAKICAgICBlbGlmIGRhcmNoID09ICJhcm0iOgogICAgICAgICAgZC5zZXRWYXIoJ0RFQl9TREtfQVJDSCcsICdhcm1lbCcpCiB9Ci0KLSMgVGhpcyB3aWxsIG9mIGNvdXJzZSBvbmx5IHdvcmsgYWZ0ZXIgcm9vdGZzX2RlYl9kb19yb290ZnMgb3IgcG9wdWxhdGVfc2RrX2RlYiBoYXMgYmVlbiBjYWxsZWQKLURQS0dfUVVFUllfQ09NTUFORCA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vZHBrZy1xdWVyeSAtLWFkbWluZGlyPSRJTlNUQUxMX1JPT1RGU19ERUIvdmFyL2xpYi9kcGtnIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yb290ZnNkZWJ1Z2ZpbGVzLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Jvb3Rmc2RlYnVnZmlsZXMuYmJjbGFzcwppbmRleCBhNTU4ODcxLi5lMmJhNGUzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Jvb3Rmc2RlYnVnZmlsZXMuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Jvb3Rmc2RlYnVnZmlsZXMuYmJjbGFzcwpAQCAtMTUsNiArMTUsMTAgQEAKICMgICAgUk9PVEZTX0RFQlVHX0ZJTEVTICs9ICIke1RPUERJUn0vY29uZi9kcm9wYmVhcl9yc2FfaG9zdF9rZXkgJHtJTUFHRV9ST09URlN9L2V0Yy9kcm9wYmVhci9kcm9wYmVhcl9yc2FfaG9zdF9rZXkgOyIKICMgMi4gQm9vdCB0aGUgaW1hZ2Ugb25jZSwgY29weSB0aGUgZHJvcGJlYXJfcnNhX2hvc3Rfa2V5IGZyb20KICMgICAgdGhlIGRldmljZSBpbnRvIHlvdXIgYnVpbGQgY29uZiBkaXJlY3RvcnkuCisjIDMuIEEgb3B0aW9uYWwgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIHNldCBmaWxlIG1vZGUKKyMgICAgb2YgdGhlIGNvcGllZCB0YXJnZXQsIGZvciBpbnN0YW5jZToKKyMgICAgUk9PVEZTX0RFQlVHX0ZJTEVTICs9ICIke1RPUERJUn0vY29uZi9kcm9wYmVhcl9yc2FfaG9zdF9rZXkgJHtJTUFHRV9ST09URlN9L2V0Yy9kcm9wYmVhci9kcm9wYmVhcl9yc2FfaG9zdF9rZXkgMDYwMDsiCisjICAgIGluIGNhc2UgdGhleSBtaWdodCBiZSByZXF1aXJlZCB0byBoYXZlIGEgc3BlY2lmaWMgbW9kZS4gKFNob3VuZG4ndCBiZSB0b28gb3BlbiwgZm9yIGV4YW1wbGUpCiAjCiAjIERvIG5vdCB1c2UgZm9yIHByb2R1Y3Rpb24gaW1hZ2VzISBJdCBieXBhc3NlcyBzZXZlcmFsCiAjIGNvcmUgYnVpbGQgbWVjaGFuaXNtcyAodXBkYXRpbmcgdGhlIGltYWdlIHdoZW4gb25lCkBAIC0yNywxMCArMzEsMTEgQEAKIFJPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICJyb290ZnNfZGVidWdfZmlsZXMgOyIKIHJvb3Rmc19kZWJ1Z19maWxlcyAoKSB7CiAgICAjIS9iaW4vc2ggLWUKLSAgIGVjaG8gIiR7Uk9PVEZTX0RFQlVHX0ZJTEVTfSIgfCBzZWQgLWUgJ3MvOy9cbi9nJyB8IHdoaWxlIHJlYWQgc291cmNlIHRhcmdldDsgZG8KKyAgIGVjaG8gIiR7Uk9PVEZTX0RFQlVHX0ZJTEVTfSIgfCBzZWQgLWUgJ3MvOy9cbi9nJyB8IHdoaWxlIHJlYWQgc291cmNlIHRhcmdldCBtb2RlOyBkbwogICAgICAgaWYgWyAtZSAiJHNvdXJjZSIgXTsgdGhlbgogICAgICAgICAgbWtkaXIgLXAgJChkaXJuYW1lICR0YXJnZXQpCiAgICAgICAgICBjcCAtYSAkc291cmNlICR0YXJnZXQKKyAgICAgICAgIFsgLW4gIiRtb2RlIiBdICYmIGNobW9kICRtb2RlICR0YXJnZXQKICAgICAgIGZpCiAgICBkb25lCiB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Nhbml0eS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zYW5pdHkuYmJjbGFzcwppbmRleCBlODA2NGFjLi4xZmViNzk0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Nhbml0eS5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2FuaXR5LmJiY2xhc3MKQEAgLTM1MCw2ICszNTAsMTQgQEAKICAgICAgICAgcmV0dXJuICJUaGUgJXM6ICVzIGNhbid0IGJlIGxvY2F0ZWQgb24gbmZzLlxuIiAlIChuYW1lLCBwYXRoKQogICAgIHJldHVybiAiIgogCisjIENoZWNrIHRoYXQgdGhlIHBhdGggaXMgb24gYSBjYXNlLXNlbnNpdGl2ZSBmaWxlIHN5c3RlbQorZGVmIGNoZWNrX2Nhc2Vfc2Vuc2l0aXZlKHBhdGgsIG5hbWUpOgorICAgIGltcG9ydCB0ZW1wZmlsZQorICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKHByZWZpeD0nVG1QJywgZGlyPXBhdGgpIGFzIHRtcF9maWxlOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh0bXBfZmlsZS5uYW1lLmxvd2VyKCkpOgorICAgICAgICAgICAgcmV0dXJuICJUaGUgJXMgKCVzKSBjYW4ndCBiZSBvbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBzeXN0ZW0uXG4iICUgKG5hbWUsIHBhdGgpCisgICAgICAgIHJldHVybiAiIgorCiAjIENoZWNrIHRoYXQgcGF0aCBpc24ndCBhIGJyb2tlbiBzeW1saW5rCiBkZWYgY2hlY2tfc3ltbGluayhsbmssIGRhdGEpOgogICAgIGlmIG9zLnBhdGguaXNsaW5rKGxuaykgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyhsbmspOgpAQCAtNDQ4LDQ1ICs0NTYsNiBAQAogCiAgICAgcmV0dXJuIG1lc3NhZ2VzCiAKLSMgQ2hlY2tzIGlmIG5lY2Vzc2FyeSB0byBhZGQgb3B0aW9uIG1hcmNoIHRvIGhvc3QgZ2NjCi1kZWYgY2hlY2tfZ2NjX21hcmNoKHNhbml0eV9kYXRhKToKLSAgICByZXN1bHQgPSBUcnVlCi0gICAgbWVzc2FnZSA9ICIiCi0KLSAgICAjIENoZWNrIGlmIC1tYXJjaCBub3QgaW4gQlVJTERfQ0ZMQUdTCi0gICAgaWYgc2FuaXR5X2RhdGEuZ2V0VmFyKCJCVUlMRF9DRkxBR1MiKS5maW5kKCItbWFyY2giKSA8IDA6Ci0gICAgICAgIHJlc3VsdCA9IEZhbHNlCi0KLSAgICAgICAgIyBDb25zdHJ1Y3QgYSB0ZXN0IGZpbGUKLSAgICAgICAgZiA9IG9wZW4oImdjY190ZXN0LmMiLCAidyIpCi0gICAgICAgIGYud3JpdGUoImludCBtYWluICgpeyB2b2xhdGlsZSBpbnQgYXRvbWljID0gMjsgX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcCAoJmF0b21pYywgMiwgMyk7IHJldHVybiAwOyB9XG4iKQotICAgICAgICBmLmNsb3NlKCkKLQotICAgICAgICAjIENoZWNrIGlmIEdDQyBjb3VsZCB3b3JrIHdpdGhvdXQgbWFyY2gKLSAgICAgICAgaWYgbm90IHJlc3VsdDoKLSAgICAgICAgICAgIHN0YXR1cyxyZXMgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoc2FuaXR5X2RhdGEuZXhwYW5kKCIke0JVSUxEX0NDfSBnY2NfdGVzdC5jIC1vIGdjY190ZXN0IikpCi0gICAgICAgICAgICBpZiBzdGF0dXMgPT0gMDoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBUcnVlOwotCi0gICAgICAgIGlmIG5vdCByZXN1bHQ6Ci0gICAgICAgICAgICBzdGF0dXMscmVzID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KHNhbml0eV9kYXRhLmV4cGFuZCgiJHtCVUlMRF9DQ30gLW1hcmNoPW5hdGl2ZSBnY2NfdGVzdC5jIC1vIGdjY190ZXN0IikpCi0gICAgICAgICAgICBpZiBzdGF0dXMgPT0gMDoKLSAgICAgICAgICAgICAgICBtZXNzYWdlID0gIkJVSUxEX0NGTEFHU19hcHBlbmQgPSBcIiAtbWFyY2g9bmF0aXZlXCIiCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gVHJ1ZTsKLQotICAgICAgICBpZiBub3QgcmVzdWx0OgotICAgICAgICAgICAgYnVpbGRfYXJjaCA9IHNhbml0eV9kYXRhLmdldFZhcignQlVJTERfQVJDSCcpCi0gICAgICAgICAgICBzdGF0dXMscmVzID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KHNhbml0eV9kYXRhLmV4cGFuZCgiJHtCVUlMRF9DQ30gLW1hcmNoPSVzIGdjY190ZXN0LmMgLW8gZ2NjX3Rlc3QiICUgYnVpbGRfYXJjaCkpCi0gICAgICAgICAgICBpZiBzdGF0dXMgPT0gMDoKLSAgICAgICAgICAgICAgICBtZXNzYWdlID0gIkJVSUxEX0NGTEFHU19hcHBlbmQgPSBcIiAtbWFyY2g9JXNcIiIgJSBidWlsZF9hcmNoCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gVHJ1ZTsKLQotICAgICAgICBvcy5yZW1vdmUoImdjY190ZXN0LmMiKQotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygiZ2NjX3Rlc3QiKToKLSAgICAgICAgICAgIG9zLnJlbW92ZSgiZ2NjX3Rlc3QiKQotCi0gICAgcmV0dXJuIChyZXN1bHQsIG1lc3NhZ2UpCi0KICMgVW5wYXRjaGVkIHZlcnNpb25zIG9mIG1ha2UgMy44MiBhcmUga25vd24gdG8gYmUgYnJva2VuLiAgU2VlIEdOVSBTYXZhbm5haCBCdWcgMzA2MTIuCiAjIFVzZSBhIG1vZGlmaWVkIHJlcHJvZHVjZXIgZnJvbSBodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9idWdzLz8zMDYxMiB0byB2YWxpZGF0ZS4KIGRlZiBjaGVja19tYWtlX3ZlcnNpb24oc2FuaXR5X2RhdGEpOgpAQCAtNjEyLDcgKzU4MSw3IEBACiAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgogICAgICAgICAgICAgcGFzcwogICAgIHJldHVybiB0ZXN0bXNnCi0gICAgICAgCisKIGRlZiBjaGVja19zYW5pdHlfdmVyc2lvbl9jaGFuZ2Uoc3RhdHVzLCBkKToKICAgICAjIFNhbml0eSBjaGVja3MgdG8gYmUgZG9uZSB3aGVuIFNBTklUWV9WRVJTSU9OIG9yIE5BVElWRUxTQlNUUklORyBjaGFuZ2VzCiAgICAgIyBJbiBvdGhlciB3b3JkcywgdGhlc2UgdGVzdHMgcnVuIG9uY2UgaW4gYSBnaXZlbiBidWlsZCBkaXJlY3RvcnkgYW5kIHRoZW4gCkBAIC02NTcsMjMgKzYyNiw2IEBACiAgICAgaWYgImRpZmZzdGF0LW5hdGl2ZSIgbm90IGluIGFzc3VtZV9wcm92aWRlZDoKICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgnUGxlYXNlIHVzZSBBU1NVTUVfUFJPVklERUQgKz0sIG5vdCBBU1NVTUVfUFJPVklERUQgPSBpbiB5b3VyIGxvY2FsLmNvbmZcbicpCiAKLSAgICBpZiAicWVtdS1uYXRpdmUiIGluIGFzc3VtZV9wcm92aWRlZDoKLSAgICAgICAgaWYgbm90IGNoZWNrX2FwcF9leGlzdHMoInFlbXUtYXJtIiwgZCk6Ci0gICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJxZW11LW5hdGl2ZSB3YXMgaW4gQVNTVU1FX1BST1ZJREVEIGJ1dCB0aGUgUUVNVSBiaW5hcmllcyAocWVtdS1hcm0pIGNhbid0IGJlIGZvdW5kIGluIFBBVEgiKQotCi0gICAgaWYgImxpYnNkbC1uYXRpdmUiIGluIGFzc3VtZV9wcm92aWRlZDoKLSAgICAgICAgaWYgbm90IGNoZWNrX2FwcF9leGlzdHMoInNkbC1jb25maWciLCBkKToKLSAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoImxpYnNkbC1uYXRpdmUgaXMgc2V0IHRvIGJlIEFTU1VNRV9QUk9WSURFRCBidXQgc2RsLWNvbmZpZyBjYW4ndCBiZSBmb3VuZCBpbiBQQVRILiBQbGVhc2UgZWl0aGVyIGluc3RhbGwgaXQsIG9yIGNvbmZpZ3VyZSBxZW11IG5vdCB0byByZXF1aXJlIHNkbC4iKQotCi0gICAgKHJlc3VsdCwgbWVzc2FnZSkgPSBjaGVja19nY2NfbWFyY2goZCkKLSAgICBpZiByZXN1bHQgYW5kIG1lc3NhZ2U6Ci0gICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIllvdXIgZ2NjIHZlcnNpb24gaXMgb2xkZXIgdGhhbiA0LjUsIHBsZWFzZSBhZGQgdGhlIGZvbGxvd2luZyBwYXJhbSB0byBsb2NhbC5jb25mXG4gXAotICAgICAgICAlc1xuIiAlIG1lc3NhZ2UpCi0gICAgaWYgbm90IHJlc3VsdDoKLSAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiWW91ciBnY2MgdmVyc2lvbiBpcyBvbGRlciB0aGFuIDQuNSBvciBpcyBub3Qgd29ya2luZyBwcm9wZXJseS4gIFBsZWFzZSB2ZXJpZnkgeW91IGNhbiBidWlsZCIpCi0gICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIiBhbmQgbGluayBzb21ldGhpbmcgdGhhdCB1c2VzIGF0b21pYyBvcGVyYXRpb25zLCBzdWNoIGFzOiBcbiIpCi0gICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIiAgICAgICAgX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcCAoJmF0b21pYywgMiwgMyk7XG4iKQotCiAgICAgIyBDaGVjayB0aGF0IFRNUERJUiBpc24ndCBvbiBhIGZpbGVzeXN0ZW0gd2l0aCBsaW1pdGVkIGZpbGVuYW1lIGxlbmd0aCAoZWcuIGVDcnlwdEZTKQogICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInKQogICAgIHN0YXR1cy5hZGRyZXN1bHQoY2hlY2tfY3JlYXRlX2xvbmdfZmlsZW5hbWUodG1wZGlyLCAiVE1QRElSIikpCkBAIC03MjgsNiArNjgwLDEwIEBACiAgICAgIyBDaGVjayB0aGF0IFRNUERJUiBpc24ndCBsb2NhdGVkIG9uIG5mcwogICAgIHN0YXR1cy5hZGRyZXN1bHQoY2hlY2tfbm90X25mcyh0bXBkaXIsICJUTVBESVIiKSkKIAorICAgICMgQ2hlY2sgZm9yIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBzeXN0ZW1zIChzdWNoIGFzIExpbnV4IGluIERvY2tlciBvbgorICAgICMgbWFjT1Mgd2l0aCBkZWZhdWx0IEhGUysgZmlsZSBzeXN0ZW0pCisgICAgc3RhdHVzLmFkZHJlc3VsdChjaGVja19jYXNlX3NlbnNpdGl2ZSh0bXBkaXIsICJUTVBESVIiKSkKKwogZGVmIHNhbml0eV9jaGVja19sb2NhbGUoZCk6CiAgICAgIiIiCiAgICAgQ3VycmVudGx5IGJpdGJha2Ugc3dpdGNoZXMgbG9jYWxlIHRvIGVuX1VTLlVURi04IHNvIGNoZWNrIHRoYXQgdGhpcyBsb2NhbGUgYWN0dWFsbHkgZXhpc3RzLgpAQCAtNzQ2LDEwICs3MDIsMTAgQEAKICAgICBpZiAwID09IG9zLmdldHVpZCgpOgogICAgICAgICByYWlzZV9zYW5pdHlfZXJyb3IoIkRvIG5vdCB1c2UgQml0YmFrZSBhcyByb290LiIsIGQpCiAKLSAgICAjIENoZWNrIHRoZSBQeXRob24gdmVyc2lvbiwgd2Ugbm93IGhhdmUgYSBtaW5pbXVtIG9mIFB5dGhvbiAyLjcuMworICAgICMgQ2hlY2sgdGhlIFB5dGhvbiB2ZXJzaW9uLCB3ZSBub3cgaGF2ZSBhIG1pbmltdW0gb2YgUHl0aG9uIDMuNAogICAgIGltcG9ydCBzeXMKLSAgICBpZiBzeXMuaGV4dmVyc2lvbiA8IDB4MDIwNzAzRjA6Ci0gICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoJ1RoZSBzeXN0ZW0gcmVxdWlyZXMgYXQgbGVhc3QgUHl0aG9uIDIuNy4zIHRvIHJ1bi4gUGxlYXNlIHVwZGF0ZSB5b3VyIFB5dGhvbiBpbnRlcnByZXRlci5cbicpCisgICAgaWYgc3lzLmhleHZlcnNpb24gPCAweDAzMDQwMDAwOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCdUaGUgc3lzdGVtIHJlcXVpcmVzIGF0IGxlYXN0IFB5dGhvbiAzLjQgdG8gcnVuLiBQbGVhc2UgdXBkYXRlIHlvdXIgUHl0aG9uIGludGVycHJldGVyLlxuJykKIAogICAgICMgQ2hlY2sgdGhlIGJpdGJha2UgdmVyc2lvbiBtZWV0cyBtaW5pbXVtIHJlcXVpcmVtZW50cwogICAgIGZyb20gZGlzdHV0aWxzLnZlcnNpb24gaW1wb3J0IExvb3NlVmVyc2lvbgpAQCAtNzcwLDYgKzcyNiwxMSBAQAogICAgICAgICBpZiBub3QgKCBjaGVja19jb25mX2V4aXN0cygiY29uZi9kaXN0cm8vJHtESVNUUk99LmNvbmYiLCBkKSBvciBjaGVja19jb25mX2V4aXN0cygiY29uZi9kaXN0cm8vaW5jbHVkZS8ke0RJU1RST30uaW5jIiwgZCkgKToKICAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkRJU1RSTyAnJXMnIG5vdCBmb3VuZC4gUGxlYXNlIHNldCBhIHZhbGlkIERJU1RSTyBpbiB5b3VyIGxvY2FsLmNvbmZcbiIgJSBkLmdldFZhcigiRElTVFJPIikpCiAKKyAgICAjIENoZWNrIHRoYXQgdGhlc2UgdmFyaWFibGVzIGRvbid0IHVzZSB0aWxkZS1leHBhbnNpb24gYXMgd2UgZG9uJ3QgZG8gdGhhdAorICAgIGZvciB2IGluICgiVE1QRElSIiwgIkRMX0RJUiIsICJTU1RBVEVfRElSIik6CisgICAgICAgIGlmIGQuZ2V0VmFyKHYpLnN0YXJ0c3dpdGgoIn4iKToKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIiVzIHVzZXMgfiBidXQgQml0YmFrZSB3aWxsIG5vdCBleHBhbmQgdGhpcywgdXNlIGFuIGFic29sdXRlIHBhdGggb3IgdmFyaWFibGVzLiIgJSB2KQorCiAgICAgIyBDaGVjayB0aGF0IERMX0RJUiBpcyBzZXQsIGV4aXN0cyBhbmQgaXMgd3JpdGFibGUuIEluIHRoZW9yeSwgd2Ugc2hvdWxkIG5ldmVyIGV2ZW4gaGl0IHRoZSBjaGVjayBpZiBETF9ESVIgaXNuJ3QgCiAgICAgIyBzZXQsIHNpbmNlIHNvIG11Y2ggcmVsaWVzIG9uIGl0IGJlaW5nIHNldC4KICAgICBkbGRpciA9IGQuZ2V0VmFyKCdETF9ESVInKQpAQCAtODM5LDcgKzgwMCw3IEBACiAKICAgICAgICAgIyBTcGxpdCBpbnRvIHBhaXJzCiAgICAgICAgIGlmIGxlbihtaXJyb3JzKSAlIDIgIT0gMDoKLSAgICAgICAgICAgIGJiLndhcm4oJ0ludmFsaWQgbWlycm9yIHZhcmlhYmxlIHZhbHVlIGZvciAlczogJXMsIHNob3VsZCBjb250YWluIHBhaXJlZCBtZW1iZXJzLicgJSAobWlycm9yX3ZhciwgbWlycm9ycy5zdHJpcCgpKSkKKyAgICAgICAgICAgIGJiLndhcm4oJ0ludmFsaWQgbWlycm9yIHZhcmlhYmxlIHZhbHVlIGZvciAlczogJXMsIHNob3VsZCBjb250YWluIHBhaXJlZCBtZW1iZXJzLicgJSAobWlycm9yX3Zhciwgc3RyKG1pcnJvcnMpKSkKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIG1pcnJvcnMgPSBsaXN0KHppcCgqW2l0ZXIobWlycm9ycyldKjIpKQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NpZ25fcGFja2FnZV9mZWVkLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NpZ25fcGFja2FnZV9mZWVkLmJiY2xhc3MKaW5kZXggNzFkZjAzYi4uZjAzYzQ4MCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zaWduX3BhY2thZ2VfZmVlZC5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2lnbl9wYWNrYWdlX2ZlZWQuYmJjbGFzcwpAQCAtMjgsNiArMjgsOSBAQAogUEFDS0FHRV9GRUVEX0dQR19CQUNLRU5EID89ICdsb2NhbCcKIFBBQ0tBR0VfRkVFRF9HUEdfU0lHTkFUVVJFX1RZUEUgPz0gJ0FTQycKIAorIyBNYWtlIGZlZWQgc2lnbmluZyBrZXkgdG8gYmUgcHJlc2VudCBpbiByb290ZnMKK0ZFQVRVUkVfUEFDS0FHRVNfcGFja2FnZS1tYW5hZ2VtZW50X2FwcGVuZCA9ICIgc2lnbmluZy1rZXlzLXBhY2thZ2VmZWVkIgorCiBweXRob24gKCkgewogICAgICMgQ2hlY2sgc2FuaXR5IG9mIGNvbmZpZ3VyYXRpb24KICAgICBmb3IgdmFyIGluICgnUEFDS0FHRV9GRUVEX0dQR19OQU1FJywgJ1BBQ0tBR0VfRkVFRF9HUEdfUEFTU1BIUkFTRV9GSUxFJyk6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NpZ25fcnBtLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NpZ25fcnBtLmJiY2xhc3MKaW5kZXggYmMyZTk0Ny4uNDk2MWIwMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zaWduX3JwbS5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2lnbl9ycG0uYmJjbGFzcwpAQCAtOSwxNiArOSwzMCBAQAogIyAgICAgICAgICAgT3B0aW9uYWwgdmFyaWFibGUgZm9yIHNwZWNpZnlpbmcgdGhlIGJhY2tlbmQgdG8gdXNlIGZvciBzaWduaW5nLgogIyAgICAgICAgICAgQ3VycmVudGx5IHRoZSBvbmx5IGF2YWlsYWJsZSBvcHRpb24gaXMgJ2xvY2FsJywgaS5lLiBsb2NhbCBzaWduaW5nCiAjICAgICAgICAgICBvbiB0aGUgYnVpbGQgaG9zdC4KKyMgUlBNX0ZJTEVfQ0hFQ0tTVU1fRElHRVNUCisjICAgICAgICAgICBPcHRpb25hbCB2YXJpYWJsZSBmb3Igc3BlY2lmeWluZyB0aGUgYWxnb3JpdGhtIGZvciBnZW5lcmF0aW5nIGZpbGUKKyMgICAgICAgICAgIGNoZWNrc3VtIGRpZ2VzdC4KKyMgUlBNX0ZTS19QQVRICisjICAgICAgICAgICBPcHRpb25hbCB2YXJpYWJsZSBmb3IgdGhlIGZpbGUgc2lnbmluZyBrZXkuCisjIFJQTV9GU0tfUEFTU1dPUkQKKyMgICAgICAgICAgIE9wdGlvbmFsIHZhcmlhYmxlIGZvciB0aGUgZmlsZSBzaWduaW5nIGtleSBwYXNzd29yZC4KICMgR1BHX0JJTgogIyAgICAgICAgICAgT3B0aW9uYWwgdmFyaWFibGUgZm9yIHNwZWNpZnlpbmcgdGhlIGdwZyBiaW5hcnkvd3JhcHBlciB0byB1c2UgZm9yCiAjICAgICAgICAgICBzaWduaW5nLgorIyBSUE1fR1BHX1NJR05fQ0hVTksKKyMgICAgICAgICAgIE9wdGlvbmFsIHZhcmlhYmxlIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiBwYWNrYWdlcyB1c2VkIHBlciBncGcKKyMgICAgICAgICAgIGludm9jYXRpb24KICMgR1BHX1BBVEgKICMgICAgICAgICAgIE9wdGlvbmFsIHZhcmlhYmxlIGZvciBzcGVjaWZ5aW5nIHRoZSBnbnVwZyAiaG9tZSIgZGlyZWN0b3J5OgotIworCiBpbmhlcml0IHNhbml0eQogCiBSUE1fU0lHTl9QQUNLQUdFUz0nMScKK1JQTV9TSUdOX0ZJTEVTID89ICcwJwogUlBNX0dQR19CQUNLRU5EID89ICdsb2NhbCcKKyMgU0hBLTI1NiBpcyB1c2VkIGJ5IGRlZmF1bHQKK1JQTV9GSUxFX0NIRUNLU1VNX0RJR0VTVCA/PSAnOCcKK1JQTV9HUEdfU0lHTl9DSFVOSyA/PSAiJHtCQl9OVU1CRVJfVEhSRUFEU30iCiAKIAogcHl0aG9uICgpIHsKQEAgLTI4LDYgKzQyLDExIEBACiAgICAgZm9yIHZhciBpbiAoJ1JQTV9HUEdfTkFNRScsICdSUE1fR1BHX1BBU1NQSFJBU0UnKToKICAgICAgICAgaWYgbm90IGQuZ2V0VmFyKHZhcik6CiAgICAgICAgICAgICByYWlzZV9zYW5pdHlfZXJyb3IoIllvdSBuZWVkIHRvIGRlZmluZSAlcyBpbiB0aGUgY29uZmlnIiAlIHZhciwgZCkKKworICAgIGlmIGQuZ2V0VmFyKCdSUE1fU0lHTl9GSUxFUycpID09ICcxJzoKKyAgICAgICAgZm9yIHZhciBpbiAoJ1JQTV9GU0tfUEFUSCcsICdSUE1fRlNLX1BBU1NXT1JEJyk6CisgICAgICAgICAgICBpZiBub3QgZC5nZXRWYXIodmFyKToKKyAgICAgICAgICAgICAgICByYWlzZV9zYW5pdHlfZXJyb3IoIllvdSBuZWVkIHRvIGRlZmluZSAlcyBpbiB0aGUgY29uZmlnIiAlIHZhciwgZCkKIH0KIAogcHl0aG9uIHNpZ25fcnBtICgpIHsKQEAgLTM5LDggKzU4LDE4IEBACiAKICAgICBzaWduZXIuc2lnbl9ycG1zKHJwbXMsCiAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcignUlBNX0dQR19OQU1FJyksCi0gICAgICAgICAgICAgICAgICAgICBkLmdldFZhcignUlBNX0dQR19QQVNTUEhSQVNFJykpCisgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcignUlBNX0dQR19QQVNTUEhSQVNFJyksCisgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcignUlBNX0ZJTEVfQ0hFQ0tTVU1fRElHRVNUJyksCisgICAgICAgICAgICAgICAgICAgICBpbnQoZC5nZXRWYXIoJ1JQTV9HUEdfU0lHTl9DSFVOSycpKSwKKyAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdSUE1fRlNLX1BBVEgnKSwKKyAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdSUE1fRlNLX1BBU1NXT1JEJykpCiB9CiAKIGRvX3BhY2thZ2VfaW5kZXhbZGVwZW5kc10gKz0gInNpZ25pbmcta2V5czpkb19kZXBsb3kiCiBkb19yb290ZnNbZGVwZW5kc10gKz0gInNpZ25pbmcta2V5czpkb19wb3B1bGF0ZV9zeXNyb290IgorCisjIE5ld2VyIHZlcnNpb25zIG9mIGdwZyAoYXQgbGVhc3QgMi4xLjUgYW5kIDIuMi4xKSBoYXZlIGlzc3VlcyB3aGVuIHNpZ25pbmcgb2NjdXJzIGluIHBhcmFsbGVsCisjIHNvIHVuZm9ydHVuYXRlbHkgdGhlIHNpZ25pbmcgbXVzdCBiZSBkb25lIHNlcmlhbGx5LiBPbmNlIHRoZSB1cHN0cmVhbSBwcm9ibGVtIGlzIGZpeGVkLAorIyB0aGUgZm9sbG93aW5nIGxpbmUgbXVzdCBiZSByZW1vdmVkIG90aGVyd2lzZSB3ZSBsb29zZSBhbGwgdGhlIGludHJpbnNpYyBwYXJhbGxlbGlzbSBmcm9tCisjIGJpdGJha2UuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgY2hlY2sgaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjAyMi4KK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW2xvY2tmaWxlc10gKz0gIiR7VE1QRElSfS9ncGcubG9jayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2l0ZWluZm8uYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2l0ZWluZm8uYmJjbGFzcwppbmRleCAyYzMzNzMyLi4xYWFkYTQwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NpdGVpbmZvLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zaXRlaW5mby5iYmNsYXNzCkBAIC02MiwxMCArNjIsOCBAQAogICAgICAgICAibGludXgtZ251bjMyIjogImNvbW1vbi1saW51eCBjb21tb24tZ2xpYmMiLAogICAgICAgICAibGludXgtZ251ZWFiaSI6ICJjb21tb24tbGludXggY29tbW9uLWdsaWJjIiwKICAgICAgICAgImxpbnV4LWdudXNwZSI6ICJjb21tb24tbGludXggY29tbW9uLWdsaWJjIiwKLSAgICAgICAgImxpbnV4LXVjbGliYyI6ICJjb21tb24tbGludXggY29tbW9uLXVjbGliYyIsCi0gICAgICAgICJsaW51eC11Y2xpYmNlYWJpIjogImNvbW1vbi1saW51eCBjb21tb24tdWNsaWJjIiwKLSAgICAgICAgImxpbnV4LXVjbGliY3NwZSI6ICJjb21tb24tbGludXggY29tbW9uLXVjbGliYyIsCiAgICAgICAgICJsaW51eC1tdXNsIjogImNvbW1vbi1saW51eCBjb21tb24tbXVzbCIsCisgICAgICAgICJsaW51eC1tdXNseDMyIjogImNvbW1vbi1saW51eCBjb21tb24tbXVzbCIsCiAgICAgICAgICJsaW51eC1tdXNsZWFiaSI6ICJjb21tb24tbGludXggY29tbW9uLW11c2wiLAogICAgICAgICAibGludXgtbXVzbHNwZSI6ICJjb21tb24tbGludXggY29tbW9uLW11c2wiLAogICAgICAgICAidWNsaW51eC11Y2xpYmMiOiAiY29tbW9uLXVjbGliYyIsCkBAIC03OSw5ICs3Nyw3IEBACiAgICAgICAgICJhYXJjaDY0X2JlLWxpbnV4LW11c2wiOiAiYWFyY2g2NF9iZS1saW51eCIsCiAgICAgICAgICJhcm0tbGludXgtZ251ZWFiaSI6ICJhcm0tbGludXgiLAogICAgICAgICAiYXJtLWxpbnV4LW11c2xlYWJpIjogImFybS1saW51eCIsCi0gICAgICAgICJhcm0tbGludXgtdWNsaWJjZWFiaSI6ICJhcm0tbGludXgtdWNsaWJjIiwKICAgICAgICAgImFybWViLWxpbnV4LWdudWVhYmkiOiAiYXJtZWItbGludXgiLAotICAgICAgICAiYXJtZWItbGludXgtdWNsaWJjZWFiaSI6ICJhcm1lYi1saW51eC11Y2xpYmMiLAogICAgICAgICAiYXJtZWItbGludXgtbXVzbGVhYmkiOiAiYXJtZWItbGludXgiLAogICAgICAgICAibWlwcy1saW51eC1tdXNsIjogIm1pcHMtbGludXgiLAogICAgICAgICAibWlwc2VsLWxpbnV4LW11c2wiOiAibWlwc2VsLWxpbnV4IiwKQEAgLTkzLDEwICs4OSw4IEBACiAgICAgICAgICJtaXBzaXNhNjRyNmVsLWxpbnV4LWdudW4zMiI6ICJtaXBzaXNhMzJyNmVsLWxpbnV4IGJpdC0zMiIsCiAgICAgICAgICJwb3dlcnBjLWxpbnV4IjogInBvd2VycGMzMi1saW51eCIsCiAgICAgICAgICJwb3dlcnBjLWxpbnV4LW11c2wiOiAicG93ZXJwYy1saW51eCBwb3dlcnBjMzItbGludXgiLAotICAgICAgICAicG93ZXJwYy1saW51eC11Y2xpYmMiOiAicG93ZXJwYy1saW51eCBwb3dlcnBjMzItbGludXgiLAogICAgICAgICAicG93ZXJwYy1saW51eC1nbnVzcGUiOiAicG93ZXJwYy1saW51eCBwb3dlcnBjMzItbGludXgiLAogICAgICAgICAicG93ZXJwYy1saW51eC1tdXNsc3BlIjogInBvd2VycGMtbGludXggcG93ZXJwYzMyLWxpbnV4IiwKLSAgICAgICAgInBvd2VycGMtbGludXgtdWNsaWJjc3BlIjogInBvd2VycGMtbGludXggcG93ZXJwYzMyLWxpbnV4IHBvd2VycGMtbGludXgtdWNsaWJjIiwKICAgICAgICAgInBvd2VycGM2NC1saW51eC1nbnVzcGUiOiAicG93ZXJwYy1saW51eCBwb3dlcnBjNjQtbGludXgiLAogICAgICAgICAicG93ZXJwYzY0LWxpbnV4LW11c2xzcGUiOiAicG93ZXJwYy1saW51eCBwb3dlcnBjNjQtbGludXgiLAogICAgICAgICAicG93ZXJwYzY0LWxpbnV4IjogInBvd2VycGMtbGludXgiLApAQCAtMTA2LDcgKzEwMCw3IEBACiAgICAgICAgICJ4ODZfNjQtZGFyd2luOSI6ICJiaXQtNjQiLAogICAgICAgICAieDg2XzY0LWxpbnV4IjogImJpdC02NCIsCiAgICAgICAgICJ4ODZfNjQtbGludXgtbXVzbCI6ICJ4ODZfNjQtbGludXggYml0LTY0IiwKLSAgICAgICAgIng4Nl82NC1saW51eC11Y2xpYmMiOiAiYml0LTY0IiwKKyAgICAgICAgIng4Nl82NC1saW51eC1tdXNseDMyIjogImJpdC0zMiBpeDg2LWNvbW1vbiB4MzItbGludXgiLAogICAgICAgICAieDg2XzY0LWVsZiI6ICJiaXQtNjQiLAogICAgICAgICAieDg2XzY0LWxpbnV4LWdudSI6ICJiaXQtNjQgeDg2XzY0LWxpbnV4IiwKICAgICAgICAgIng4Nl82NC1saW51eC1nbnV4MzIiOiAiYml0LTMyIGl4ODYtY29tbW9uIHgzMi1saW51eCIsCkBAIC0xNTksNyArMTUzLDcgQEAKICAgICAgICAgYmIuZmF0YWwoIlBsZWFzZSBhZGQgeW91ciBhcmNoaXRlY3R1cmUgdG8gc2l0ZWluZm8uYmJjbGFzcyIpCiB9CiAKLWRlZiBzaXRlaW5mb19nZXRfZmlsZXMoZCwgYWNsb2NhbGNhY2hlID0gRmFsc2UpOgorZGVmIHNpdGVpbmZvX2dldF9maWxlcyhkLCBzeXNyb290Y2FjaGUgPSBGYWxzZSk6CiAgICAgc2l0ZWRhdGEgPSBzaXRlaW5mb19kYXRhKGQpCiAgICAgc2l0ZWZpbGVzID0gIiIKICAgICBmb3IgcGF0aCBpbiBkLmdldFZhcigiQkJQQVRIIikuc3BsaXQoIjoiKToKQEAgLTE2OCwxOCArMTYyLDExIEBACiAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSk6CiAgICAgICAgICAgICAgICAgc2l0ZWZpbGVzICs9IGZpbGVuYW1lICsgIiAiCiAKLSAgICBpZiBub3QgYWNsb2NhbGNhY2hlOgorICAgIGlmIG5vdCBzeXNyb290Y2FjaGU6CiAgICAgICAgIHJldHVybiBzaXRlZmlsZXMKIAotICAgICMgTm93IGNoZWNrIGZvciBzaXRlY29uZmlnIGNhY2hlIGZpbGVzIGluIHRoZSBkaXJlY3Rvcnkgc2V0dXAgYnkgYXV0b3Rvb2xzLmJiY2xhc3MgdG8KLSAgICAjIGF2b2lkIHJhY2VzLgotICAgICMKLSAgICAjIEFDTE9DQUxESVIgbWF5IG9yIG1heSBub3QgZXhpc3Qgc28gY2FjaGUgc2hvdWxkIG9ubHkgYmUgc2V0IHRvIFRydWUgZnJvbSBhdXRvdG9vbHMuYmJjbGFzcwotICAgICMgYWZ0ZXIgZmlsZXMgaGF2ZSBiZWVuIGNvcGllZCBpbnRvIHRoaXMgbG9jYXRpb24uIFRvIGRvIG90aGVyd2lzZSByaXNrcyBwYXJzaW5nL3NpZ25hdHVyZQotICAgICMgaXNzdWVzIGFuZCB0aGUgZGlyZWN0b3J5IGJlaW5nIGNyZWF0ZWQvcmVtb3ZlZCB3aGlsc3QgdGhpcyBjb2RlIGV4ZWN1dGVzLiBUaGlzIGNhbiBoYXBwZW4KLSAgICAjIHdoZW4gYSBtdWx0aWxpYiByZWNpcGUgaXMgcGFyc2VkIGFsb25nIHdpdGggaXRzIGJhc2UgdmFyaWFudCB3aGljaCBtYXkgYmUgcnVubmluZyBhdCB0aGUgdGltZQotICAgICMgY2F1c2luZyByYXJlIGJ1dCBuYXN0eSBmYWlsdXJlcwotICAgIHBhdGhfc2l0ZWNvbmZpZyA9IGQuZ2V0VmFyKCdBQ0xPQ0FMRElSJykKKyAgICAjIE5vdyBjaGVjayBmb3Igc2l0ZWNvbmZpZyBjYWNoZSBmaWxlcyBpbiBzeXNyb290cworICAgIHBhdGhfc2l0ZWNvbmZpZyA9IGQuZ2V0VmFyKCdTSVRFQ09ORklHX1NZU1JPT1RDQUNIRScpCiAgICAgaWYgcGF0aF9zaXRlY29uZmlnIGFuZCBvcy5wYXRoLmlzZGlyKHBhdGhfc2l0ZWNvbmZpZyk6CiAgICAgICAgIGZvciBpIGluIG9zLmxpc3RkaXIocGF0aF9zaXRlY29uZmlnKToKICAgICAgICAgICAgIGlmIG5vdCBpLmVuZHN3aXRoKCJfY29uZmlnIik6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NzdGF0ZS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zc3RhdGUuYmJjbGFzcwppbmRleCAwYTEyOTM1Li5lMzBmYmUxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NzdGF0ZS5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3N0YXRlLmJiY2xhc3MKQEAgLTM0Niw4ICszNDYsNiBAQAogICAgICAgICBvZS5wYXRoLnJlbW92ZShkaXIpCiAKICAgICBmb3Igc3RhdGUgaW4gc3NbJ2RpcnMnXToKLSAgICAgICAgaWYgZC5nZXRWYXIoJ1NTVEFURV9TS0lQX0NSRUFUSU9OJykgPT0gJzEnOgotICAgICAgICAgICAgY29udGludWUKICAgICAgICAgcHJlcGRpcihzdGF0ZVsxXSkKICAgICAgICAgb3MucmVuYW1lKHNzdGF0ZWluc3QgKyBzdGF0ZVswXSwgc3RhdGVbMV0pCiAgICAgc3N0YXRlX2luc3RhbGwoc3MsIGQpCkBAIC00MDQsNyArNDAyLDcgQEAKICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgIGJiLm5vdGUoIlJlcGxhY2luZyBmaXhtZSBwYXRocyBpbiBzc3RhdGUgcGFja2FnZTogJXMiICUgKHNzdGF0ZV9oYXJkY29kZV9jbWQpKQotICAgICAgICBzdWJwcm9jZXNzLmNhbGwoc3N0YXRlX2hhcmRjb2RlX2NtZCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKHNzdGF0ZV9oYXJkY29kZV9jbWQsIHNoZWxsPVRydWUpCiAKICAgICAgICAgIyBOZWVkIHRvIHJlbW92ZSB0aGlzIG9yIHdlJ2QgY29weSBpdCBpbnRvIHRoZSB0YXJnZXQgZGlyZWN0b3J5IGFuZCBtYXkgCiAgICAgICAgICMgY29uZmxpY3Qgd2l0aCBhbm90aGVyIHdyaXRlcgpAQCAtNDUzLDcgKzQ1MSw3IEBACiAgICAgaWYgb3MucGF0aC5leGlzdHMobWFuaWZlc3QgKyAiLnBvc3RybSIpOgogICAgICAgICBpbXBvcnQgc3VicHJvY2VzcwogICAgICAgICBvcy5jaG1vZChwb3N0cm0sIDBvNzU1KQotICAgICAgICBzdWJwcm9jZXNzLmNhbGwocG9zdHJtLCBzaGVsbD1UcnVlKQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwocG9zdHJtLCBzaGVsbD1UcnVlKQogICAgICAgICBvZS5wYXRoLnJlbW92ZShwb3N0cm0pCiAKICAgICBvZS5wYXRoLnJlbW92ZShtYW5pZmVzdCkKQEAgLTU5Niw4ICs1OTQsNiBAQAogICAgIGZvciBzdGF0ZSBpbiBzc1snZGlycyddOgogICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3RhdGVbMV0pOgogICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgZC5nZXRWYXIoJ1NTVEFURV9TS0lQX0NSRUFUSU9OJykgPT0gJzEnOgotICAgICAgICAgICAgY29udGludWUKICAgICAgICAgc3JjYmFzZSA9IHN0YXRlWzBdLnJzdHJpcCgiLyIpLnJzcGxpdCgnLycsIDEpWzBdCiAgICAgICAgICMgRmluZCBhbmQgZXJyb3IgZm9yIGFic29sdXRlIHN5bWxpbmtzLiBXZSBjb3VsZCBhdHRlbXB0IHRvIHJlbG9jYXRlIGJ1dCBpdHMgbm90CiAgICAgICAgICMgY2xlYXIgd2hlcmUgdGhlIHN5bWxpbmsgaXMgcmVsYXRpdmUgdG8gaW4gdGhpcyBjb250ZXh0LiBXZSBjb3VsZCBhZGQgdGhhdCBtYXJrdXAKQEAgLTYyNSw2ICs2MjEsMTAgQEAKIAogICAgIGQuc2V0VmFyKCdTU1RBVEVfQlVJTERESVInLCBzc3RhdGVidWlsZCkKICAgICBkLnNldFZhcignU1NUQVRFX1BLRycsIHNzdGF0ZXBrZykKKyAgICBkLnNldFZhcignU1NUQVRFX0lOU1RESVInLCBzc3RhdGVidWlsZCkKKworICAgIGlmIGQuZ2V0VmFyKCdTU1RBVEVfU0tJUF9DUkVBVElPTicpID09ICcxJzoKKyAgICAgICAgcmV0dXJuCiAKICAgICBmb3IgZiBpbiAoZC5nZXRWYXIoJ1NTVEFURUNSRUFURUZVTkNTJykgb3IgJycpLnNwbGl0KCkgKyBcCiAgICAgICAgICAgICAgWydzc3RhdGVfY3JlYXRlX3BhY2thZ2UnLCAnc3N0YXRlX3NpZ25fcGFja2FnZSddICsgXApAQCAtNjM0LDggKzYzNCw2IEBACiAKICAgICBiYi5zaWdnZW4uZHVtcF90aGlzX3Rhc2soc3N0YXRlcGtnICsgIi5zaWdpbmZvIiwgZCkKIAotICAgIGQuc2V0VmFyKCdTU1RBVEVfSU5TVERJUicsIHNzdGF0ZWJ1aWxkKQotCiAgICAgcmV0dXJuCiAKIGRlZiBwc3RhZ2luZ19mZXRjaChzc3RhdGVmZXRjaCwgc3N0YXRlcGtnLCBkKToKQEAgLTk2OSw3ICs5NjcsOCBAQAogICAgICAgICAgICAgaWYgaXNOYXRpdmVDcm9zcyh0YXNrZGVwZW5kZWVzW2RlcF1bMF0pOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgIyBOYXRpdmUvY3Jvc3MgdG9vbHMgZGVwZW5kZWQgdXBvbiBieSB0YXJnZXQgc3lzcm9vdCBhcmUgbm90IG5lZWRlZAotICAgICAgICAgICAgaWYgaXNOYXRpdmVDcm9zcyh0YXNrZGVwZW5kZWVzW3Rhc2tdWzBdKToKKyAgICAgICAgICAgICMgQWRkIGFuIGV4Y2VwdGlvbiBmb3Igc2hhZG93LW5hdGl2ZSBhcyByZXF1aXJlZCBieSB1c2VyYWRkLmJiY2xhc3MKKyAgICAgICAgICAgIGlmIGlzTmF0aXZlQ3Jvc3ModGFza2RlcGVuZGVlc1t0YXNrXVswXSkgYW5kIHRhc2tkZXBlbmRlZXNbdGFza11bMF0gIT0gJ3NoYWRvdy1uYXRpdmUnOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAjIFRhcmdldCBwb3B1bGF0ZV9zeXNyb290IG5lZWQgdGhlaXIgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKQEAgLTEwMTcsNiArMTAxNiwxMSBAQAogICAgIGQgPSBlLmRhdGEKICAgICBzdGFtcHMgPSBlLnN0YW1wcy52YWx1ZXMoKQogICAgIHJlbW92ZXdvcmtkaXIgPSAoZC5nZXRWYXIoIlNTVEFURV9QUlVORV9PQlNPTEVURVdPUktESVIiLCBGYWxzZSkgPT0gIjEiKQorICAgIHByZXNlcnZlc3RhbXBmaWxlID0gZC5leHBhbmQoJyR7U1NUQVRFX01BTklGRVNUU30vcHJlc2VydmUtc3RhbXBzJykKKyAgICBwcmVzZXJ2ZXN0YW1wcyA9IFtdCisgICAgaWYgb3MucGF0aC5leGlzdHMocHJlc2VydmVzdGFtcGZpbGUpOgorICAgICAgICB3aXRoIG9wZW4ocHJlc2VydmVzdGFtcGZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIHByZXNlcnZlc3RhbXBzID0gZi5yZWFkbGluZXMoKQogICAgIHNlZW4gPSBbXQogICAgIGZvciBhIGluIGQuZ2V0VmFyKCJTU1RBVEVfQVJDSFMiKS5zcGxpdCgpOgogICAgICAgICB0b3JlbW92ZSA9IFtdCkBAIC0xMDI3LDcgKzEwMzEsNyBAQAogICAgICAgICAgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCiAgICAgICAgICAgICBmb3IgbCBpbiBsaW5lczoKICAgICAgICAgICAgICAgICAoc3RhbXAsIG1hbmlmZXN0LCB3b3JrZGlyKSA9IGwuc3BsaXQoKQotICAgICAgICAgICAgICAgIGlmIHN0YW1wIG5vdCBpbiBzdGFtcHM6CisgICAgICAgICAgICAgICAgaWYgc3RhbXAgbm90IGluIHN0YW1wcyBhbmQgc3RhbXAgbm90IGluIHByZXNlcnZlc3RhbXBzOgogICAgICAgICAgICAgICAgICAgICB0b3JlbW92ZS5hcHBlbmQobCkKICAgICAgICAgICAgICAgICAgICAgaWYgc3RhbXAgbm90IGluIHNlZW46CiAgICAgICAgICAgICAgICAgICAgICAgICBiYi5kZWJ1ZygyLCAiU3RhbXAgJXMgaXMgbm90IHJlYWNoYWJsZSwgcmVtb3ZpbmcgcmVsYXRlZCBtYW5pZmVzdHMiICUgc3RhbXApCkBAIC0xMDQ5LDQgKzEwNTMsNiBAQAogICAgICAgICB3aXRoIG9wZW4oaSwgInciKSBhcyBmOgogICAgICAgICAgICAgZm9yIGwgaW4gbGluZXM6CiAgICAgICAgICAgICAgICAgZi53cml0ZShsKQorICAgIGlmIHByZXNlcnZlc3RhbXBzOgorICAgICAgICBvcy5yZW1vdmUocHJlc2VydmVzdGFtcGZpbGUpCiB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3N0YWdpbmcuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3RhZ2luZy5iYmNsYXNzCmluZGV4IDk4NDA1MWQuLmM0NzliZDkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3RhZ2luZy5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3RhZ2luZy5iYmNsYXNzCkBAIC02OCwxMDEgKzY4LDE5IEBACiB9CiAKIHB5dGhvbiBzeXNyb290X3N0cmlwICgpIHsKLSAgICBpbXBvcnQgc3RhdCwgZXJybm8KKyAgICBpbmhpYml0X3N5c3Jvb3QgPSBkLmdldFZhcignSU5ISUJJVF9TWVNST09UX1NUUklQJykKKyAgICBpZiBpbmhpYml0X3N5c3Jvb3QgYW5kIG9lLnR5cGVzLmJvb2xlYW4oaW5oaWJpdF9zeXNyb290KToKKyAgICAgICAgcmV0dXJuIDAKIAotICAgIGR2YXIgPSBkLmdldFZhcignU1lTUk9PVF9ERVNURElSJykKKyAgICBkc3RkaXIgPSBkLmdldFZhcignU1lTUk9PVF9ERVNURElSJykKICAgICBwbiA9IGQuZ2V0VmFyKCdQTicpCisgICAgbGliZGlyID0gb3MucGF0aC5hYnNwYXRoKGRzdGRpciArIG9zLnNlcCArIGQuZ2V0VmFyKCJsaWJkaXIiKSkKKyAgICBiYXNlX2xpYmRpciA9IG9zLnBhdGguYWJzcGF0aChkc3RkaXIgKyBvcy5zZXAgKyBkLmdldFZhcigiYmFzZV9saWJkaXIiKSkKKyAgICBxYV9hbHJlYWR5X3N0cmlwcGVkID0gJ2FscmVhZHktc3RyaXBwZWQnIGluIChkLmdldFZhcignSU5TQU5FX1NLSVBfJyArIHBuKSBvciAiIikuc3BsaXQoKQorICAgIHN0cmlwX2NtZCA9IGQuZ2V0VmFyKCJTVFJJUCIpCiAKLSAgICBvcy5jaGRpcihkdmFyKQotCi0gICAgIyBSZXR1cm4gdHlwZSAoYml0cyk6Ci0gICAgIyAwIC0gbm90IGVsZgotICAgICMgMSAtIEVMRgotICAgICMgMiAtIHN0cmlwcGVkCi0gICAgIyA0IC0gZXhlY3V0YWJsZQotICAgICMgOCAtIHNoYXJlZCBsaWJyYXJ5Ci0gICAgIyAxNiAtIGtlcm5lbCBtb2R1bGUKLSAgICBkZWYgaXNFTEYocGF0aCk6Ci0gICAgICAgIHR5cGUgPSAwCi0gICAgICAgIHJldCwgcmVzdWx0ID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCJmaWxlIFwiJXNcIiIgJSBwYXRoLnJlcGxhY2UoIlwiIiwgIlxcXCIiKSkKLQotICAgICAgICBpZiByZXQ6Ci0gICAgICAgICAgICBiYi5lcnJvcigic3BsaXRfYW5kX3N0cmlwX2ZpbGVzOiAnZmlsZSAlcycgZmFpbGVkIiAlIHBhdGgpCi0gICAgICAgICAgICByZXR1cm4gdHlwZQotCi0gICAgICAgICMgTm90IHN0cmlwcGVkCi0gICAgICAgIGlmICJFTEYiIGluIHJlc3VsdDoKLSAgICAgICAgICAgIHR5cGUgfD0gMQotICAgICAgICAgICAgaWYgIm5vdCBzdHJpcHBlZCIgbm90IGluIHJlc3VsdDoKLSAgICAgICAgICAgICAgICB0eXBlIHw9IDIKLSAgICAgICAgICAgIGlmICJleGVjdXRhYmxlIiBpbiByZXN1bHQ6Ci0gICAgICAgICAgICAgICAgdHlwZSB8PSA0Ci0gICAgICAgICAgICBpZiAic2hhcmVkIiBpbiByZXN1bHQ6Ci0gICAgICAgICAgICAgICAgdHlwZSB8PSA4Ci0gICAgICAgIHJldHVybiB0eXBlCi0KLQotICAgIGVsZmZpbGVzID0ge30KLSAgICBpbm9kZXMgPSB7fQotICAgIGxpYmRpciA9IG9zLnBhdGguYWJzcGF0aChkdmFyICsgb3Muc2VwICsgZC5nZXRWYXIoImxpYmRpciIpKQotICAgIGJhc2VsaWJkaXIgPSBvcy5wYXRoLmFic3BhdGgoZHZhciArIG9zLnNlcCArIGQuZ2V0VmFyKCJiYXNlX2xpYmRpciIpKQotICAgIGlmIChkLmdldFZhcignSU5ISUJJVF9TWVNST09UX1NUUklQJykgIT0gJzEnKToKLSAgICAgICAgIwotICAgICAgICAjIEZpcnN0IGxldHMgZmlndXJlIG91dCBhbGwgb2YgdGhlIGZpbGVzIHdlIG1heSBoYXZlIHRvIHByb2Nlc3MKLSAgICAgICAgIwotICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkdmFyKToKLSAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgotICAgICAgICAgICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZikKLQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgbHRhcmdldCA9IG9lLnBhdGgucmVhbHBhdGgoZmlsZSwgZHZhciwgRmFsc2UpCi0gICAgICAgICAgICAgICAgICAgIHMgPSBvcy5sc3RhdChsdGFyZ2V0KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIChlcnIsIHN0cmVycm9yKSA9IGUuYXJncwotICAgICAgICAgICAgICAgICAgICBpZiBlcnIgIT0gZXJybm8uRU5PRU5UOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICAgICAgIyBTa2lwIGJyb2tlbiBzeW1saW5rcwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGlmIG5vdCBzOgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICMgQ2hlY2sgaXRzIGFuIGV4Y3V0YWJsZQotICAgICAgICAgICAgICAgIGlmIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhVU1IpIG9yIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhHUlApIG9yIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhPVEgpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIG9yICgoZmlsZS5zdGFydHN3aXRoKGxpYmRpcikgb3IgZmlsZS5zdGFydHN3aXRoKGJhc2VsaWJkaXIpKSBhbmQgIi5zbyIgaW4gZik6Ci0gICAgICAgICAgICAgICAgICAgICMgSWYgaXQncyBhIHN5bWxpbmssIGFuZCBwb2ludHMgdG8gYW4gRUxGIGZpbGUsIHdlIGNhcHR1cmUgdGhlIHJlYWRsaW5rIHRhcmdldAotICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmaWxlKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgICAgICAgICAgIyBJdCdzIGEgZmlsZSAob3IgaGFyZGxpbmspLCBub3QgYSBsaW5rCi0gICAgICAgICAgICAgICAgICAgICMgLi4uYnV0IGlzIGl0IEVMRiwgYW5kIGlzIGl0IGFscmVhZHkgc3RyaXBwZWQ/Ci0gICAgICAgICAgICAgICAgICAgIGVsZl9maWxlID0gaXNFTEYoZmlsZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgZWxmX2ZpbGUgJiAxOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgZWxmX2ZpbGUgJiAyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICdhbHJlYWR5LXN0cmlwcGVkJyBpbiAoZC5nZXRWYXIoJ0lOU0FORV9TS0lQXycgKyBwbikgb3IgIiIpLnNwbGl0KCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIlNraXBwaW5nIGZpbGUgJXMgZnJvbSAlcyBmb3IgYWxyZWFkeS1zdHJpcHBlZCBRQSB0ZXN0IiAlIChmaWxlW2xlbihkdmFyKTpdLCBwbikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiRmlsZSAnJXMnIGZyb20gJXMgd2FzIGFscmVhZHkgc3RyaXBwZWQsIHRoaXMgd2lsbCBwcmV2ZW50IGZ1dHVyZSBkZWJ1Z2dpbmchIiAlIChmaWxlW2xlbihkdmFyKTpdLCBwbikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgcy5zdF9pbm8gaW4gaW5vZGVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhmaWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmxpbmsoaW5vZGVzW3Muc3RfaW5vXSwgZmlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5vZGVzW3Muc3RfaW5vXSA9IGZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGJyZWFrIGhhcmRsaW5rCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMuY29weWZpbGUoZmlsZSwgZmlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGZmaWxlc1tmaWxlXSA9IGVsZl9maWxlCi0KLSAgICAgICAgIwotICAgICAgICAjIE5vdyBzdHJpcCB0aGVtIChpbiBwYXJhbGxlbCkKLSAgICAgICAgIwotICAgICAgICBzdHJpcCA9IGQuZ2V0VmFyKCJTVFJJUCIpCi0gICAgICAgIHNmaWxlcyA9IFtdCi0gICAgICAgIGZvciBmaWxlIGluIGVsZmZpbGVzOgotICAgICAgICAgICAgZWxmX2ZpbGUgPSBpbnQoZWxmZmlsZXNbZmlsZV0pCi0gICAgICAgICAgICAjYmIubm90ZSgiU3RyaXAgJXMiICUgZmlsZSkKLSAgICAgICAgICAgIHNmaWxlcy5hcHBlbmQoKGZpbGUsIGVsZl9maWxlLCBzdHJpcCkpCi0KLSAgICAgICAgb2UudXRpbHMubXVsdGlwcm9jZXNzX2V4ZWMoc2ZpbGVzLCBvZS5wYWNrYWdlLnJ1bnN0cmlwKQorICAgIG9lLnBhY2thZ2Uuc3RyaXBfZXhlY3MocG4sIGRzdGRpciwgc3RyaXBfY21kLCBsaWJkaXIsIGJhc2VfbGliZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcWFfYWxyZWFkeV9zdHJpcHBlZD1xYV9hbHJlYWR5X3N0cmlwcGVkKQogfQogCiBkb19wb3B1bGF0ZV9zeXNyb290W2RpcnNdID0gIiR7U1lTUk9PVF9ERVNURElSfSIKQEAgLTI1OSw2ICsxNzcsNyBAQAogZGVmIHN0YWdpbmdfcG9wdWxhdGVfc3lzcm9vdF9kaXIodGFyZ2V0c3lzcm9vdCwgbmF0aXZlc3lzcm9vdCwgbmF0aXZlLCBkKToKICAgICBpbXBvcnQgZ2xvYgogICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgaW1wb3J0IGVycm5vCiAKICAgICBmaXhtZSA9IFtdCiAgICAgcG9zdGluc3RzID0gW10KQEAgLTQ1NCw3ICszNzMsOCBAQAogICAgICAgICAgICAgICAgICAgICBtc2didWYuYXBwZW5kKCJGb2xsb3dpbmcgZGVwZW5kZW5jeSBvbiAlcyIgJSBzZXRzY2VuZWRlcHNbZGF0YWRlcF1bMF0pCiAgICAgICAgIG5leHQgPSBuZXcKIAotICAgIGJiLm5vdGUoIlxuIi5qb2luKG1zZ2J1ZikpCisgICAgIyBUaGlzIGxvZ2dpbmcgaXMgdG9vIHZlcmJvc2UgZm9yIGRheSB0byBkYXkgdXNlIHNhZGx5CisgICAgI2JiLmRlYnVnKDIsICJcbiIuam9pbihtc2didWYpKQogCiAgICAgZGVwZGlyID0gcmVjaXBlc3lzcm9vdG5hdGl2ZSArICIvaW5zdGFsbGVkZGVwcyIKICAgICBiYi51dGlscy5ta2RpcmhpZXIoZGVwZGlyKQpAQCAtNDY5LDYgKzM4OSw4IEBACiAgICAgcG9zdGluc3RzID0gW10KICAgICBtdWx0aWxpYnMgPSB7fQogICAgIG1hbmlmZXN0cyA9IHt9CisgICAgIyBBbGwgZmlsZXMgdGhhdCB3ZSdyZSBnb2luZyB0byBiZSBpbnN0YWxsaW5nLCB0byBmaW5kIGNvbmZsaWN0cy4KKyAgICBmaWxlc2V0ID0ge30KIAogICAgIGZvciBmIGluIG9zLmxpc3RkaXIoZGVwZGlyKToKICAgICAgICAgaWYgbm90IGYuZW5kc3dpdGgoIi5jb21wbGV0ZSIpOgpAQCAtNTIxLDYgKzQ0Myw4IEBACiAgICAgICAgICAgICBvcy51bmxpbmsoZmwpCiAgICAgICAgICAgICBvcy51bmxpbmsoZmwgKyAiLmNvbXBsZXRlIikKIAorICAgIG1zZ19leGlzdHMgPSBbXQorICAgIG1zZ19hZGRpbmcgPSBbXQogICAgIGZvciBkZXAgaW4gY29uZmlndXJlZGVwczoKICAgICAgICAgYyA9IHNldHNjZW5lZGVwc1tkZXBdWzBdCiAgICAgICAgIGlmIGMgbm90IGluIGluc3RhbGxlZDoKQEAgLTUzMSw3ICs0NTUsNyBAQAogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkZXBkaXIgKyAiLyIgKyBjKToKICAgICAgICAgICAgIGxuayA9IG9zLnJlYWRsaW5rKGRlcGRpciArICIvIiArIGMpCiAgICAgICAgICAgICBpZiBsbmsgPT0gYyArICIuIiArIHRhc2toYXNoIGFuZCBvcy5wYXRoLmV4aXN0cyhkZXBkaXIgKyAiLyIgKyBjICsgIi5jb21wbGV0ZSIpOgotICAgICAgICAgICAgICAgIGJiLm5vdGUoIiVzIGV4aXN0cyBpbiBzeXNyb290LCBza2lwcGluZyIgJSBjKQorICAgICAgICAgICAgICAgIG1zZ19leGlzdHMuYXBwZW5kKGMpCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgYmIubm90ZSgiJXMgZXhpc3RzIGluIHN5c3Jvb3QsIGJ1dCBpcyBzdGFsZSAoJXMgdnMuICVzKSwgcmVtb3ZpbmcuIiAlIChjLCBsbmssIGMgKyAiLiIgKyB0YXNraGFzaCkpCkBAIC01NDIsNiArNDY2LDggQEAKICAgICAgICAgZWxpZiBvcy5wYXRoLmxleGlzdHMoZGVwZGlyICsgIi8iICsgYyk6CiAgICAgICAgICAgICBvcy51bmxpbmsoZGVwZGlyICsgIi8iICsgYykKIAorICAgICAgICBtc2dfYWRkaW5nLmFwcGVuZChjKQorCiAgICAgICAgIG9zLnN5bWxpbmsoYyArICIuIiArIHRhc2toYXNoLCBkZXBkaXIgKyAiLyIgKyBjKQogCiAgICAgICAgIGQyID0gZApAQCAtNTk1LDggKzUyMSwxOSBAQAogICAgICAgICAgICAgICAgICAgICBpZiBsLmVuZHN3aXRoKCIvZml4bWVwYXRoLmNtZCIpOgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgZGVzdCA9IGwucmVwbGFjZShzdGFnaW5nZGlyLCAiIikKLSAgICAgICAgICAgICAgICAgICAgZGVzdCA9IHRhcmdldGRpciArICIvIiArICIvIi5qb2luKGRlc3Quc3BsaXQoIi8iKVszOl0pCi0gICAgICAgICAgICAgICAgICAgIG5ld21hbmlmZXN0W2xdID0gZGVzdAorICAgICAgICAgICAgICAgICAgICBkZXN0ID0gIi8iICsgIi8iLmpvaW4oZGVzdC5zcGxpdCgiLyIpWzM6XSkKKyAgICAgICAgICAgICAgICAgICAgbmV3bWFuaWZlc3RbbF0gPSB0YXJnZXRkaXIgKyBkZXN0CisKKyAgICAgICAgICAgICAgICAgICAgIyBDaGVjayBpZiBmaWxlcyBoYXZlIGFscmVhZHkgYmVlbiBpbnN0YWxsZWQgYnkgYW5vdGhlcgorICAgICAgICAgICAgICAgICAgICAjIHJlY2lwZSBhbmQgYWJvcnQgaWYgdGhleSBoYXZlLCBleHBsYWluaW5nIHdoYXQgcmVjaXBlcyBhcmUKKyAgICAgICAgICAgICAgICAgICAgIyBjb25mbGljdGluZy4KKyAgICAgICAgICAgICAgICAgICAgaGFzaG5hbWUgPSB0YXJnZXRkaXIgKyBkZXN0CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNobmFtZS5lbmRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaGFzaG5hbWUgaW4gZmlsZXNldDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiVGhlIGZpbGUgJXMgaXMgaW5zdGFsbGVkIGJ5IGJvdGggJXMgYW5kICVzLCBhYm9ydGluZyIgJSAoZGVzdCwgYywgZmlsZXNldFtoYXNobmFtZV0pKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc2V0W2hhc2huYW1lXSA9IGMKKwogICAgICAgICAgICAgIyBIYXZpbmcgbXVsdGlwbGUgaWRlbnRpY2FsIG1hbmlmZXN0cyBpbiBlYWNoIHN5c3Jvb3QgZWF0cyBkaXNrc3BhY2Ugc28KICAgICAgICAgICAgICMgY3JlYXRlIGEgc2hhcmVkIHBvb2wgb2YgdGhlbSBhbmQgaGFyZGxpbmsgaWYgd2UgY2FuLgogICAgICAgICAgICAgIyBXZSBjcmVhdGUgdGhlIG1hbmlmZXN0IGluIGFkdmFuY2Ugc28gdGhhdCBpZiBzb21ldGhpbmcgZmFpbHMgZHVyaW5nIGluc3RhbGxhdGlvbiwKQEAgLTYyNyw2ICs1NjQsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgc3RhZ2luZ19jb3B5ZmlsZShsLCB0YXJnZXRkaXIsIGRlc3QsIHBvc3RpbnN0cywgc2VlbmRpcnMpCiAKKyAgICBiYi5ub3RlKCJJbnN0YWxsZWQgaW50byBzeXNyb290OiAlcyIgJSBzdHIobXNnX2FkZGluZykpCisgICAgYmIubm90ZSgiU2tpcHBpbmcgYXMgYWxyZWFkeSBleGlzdHMgaW4gc3lzcm9vdDogJXMiICUgc3RyKG1zZ19leGlzdHMpKQorCiAgICAgZm9yIGYgaW4gZml4bWU6CiAgICAgICAgIGlmIGYgPT0gJyc6CiAgICAgICAgICAgICBzdGFnaW5nX3Byb2Nlc3NmaXhtZShmaXhtZVtmXSwgcmVjaXBlc3lzcm9vdCwgcmVjaXBlc3lzcm9vdCwgcmVjaXBlc3lzcm9vdG5hdGl2ZSwgZCkKQEAgLTY1OCw2ICs1OTgsOSBAQAogIyBDbGVhbiBvdXQgdGhlIHJlY2lwZSBzcGVjaWZpYyBzeXNyb290cyBiZWZvcmUgZG9fZmV0Y2gKICMgKHVzZSBhIHByZWZ1bmMgc28gd2UgY2FuIG9yZGVyIGJlZm9yZSBleHRlbmRfcmVjaXBlX3N5c3Jvb3QgaWYgaXQgZ2V0cyBhZGRlZCkKIHB5dGhvbiBjbGVhbl9yZWNpcGVfc3lzcm9vdCgpIHsKKyAgICAjIFdlIHJlbW92ZSB0aGVzZSBzdGFtcHMgc2luY2Ugd2UncmUgcmVtb3ZpbmcgYW55IGNvbnRlbnQgdGhleSdkIGhhdmUgYWRkZWQgd2l0aAorICAgICMgY2xlYW5kaXJzLiBUaGlzIHJlbW92ZXMgdGhlIHNpZ2RhdGEgdG9vLCBsaWtlbHkgbm90IGEgYmlnIGRlYWwsCisgICAgb2UucGF0aC5yZW1vdmUoZC5nZXRWYXIoIlNUQU1QIikgKyAiKmFkZHRvX3JlY2lwZV9zeXNyb290KiIpCiAgICAgcmV0dXJuCiB9CiBjbGVhbl9yZWNpcGVfc3lzcm9vdFtjbGVhbmRpcnNdICs9ICIke1JFQ0lQRV9TWVNST09UfSAke1JFQ0lQRV9TWVNST09UX05BVElWRX0iCkBAIC02NzIsNCArNjE1LDMgQEAKIH0KIHN0YWdpbmdfdGFza2hhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5SZWNpcGVUYXNrUHJlUHJvY2VzcyIKIGFkZGhhbmRsZXIgc3RhZ2luZ190YXNraGFuZGxlcgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3N5c3RlbWQtYm9vdC5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zeXN0ZW1kLWJvb3QuYmJjbGFzcwppbmRleCA5NTk3NzU5Li45MzczMDcwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3N5c3RlbWQtYm9vdC5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3lzdGVtZC1ib290LmJiY2xhc3MKQEAgLTcsMTAgKzcsOSBAQAogIyAgICAgICAgICAgICAgICAgICAgICAgIG1haW50ZW5hbmNlLgogIwogIyBTZXQgRUZJX1BST1ZJREVSID0gInN5c3RlbWQtYm9vdCIgdG8gdXNlIHN5c3RlbWQtYm9vdCBvbiB5b3VyIGxpdmUgaW1hZ2VzIGluc3RlYWQgb2YgZ3J1Yi1lZmkKLSMgKGltYWdlcyBidWlsdCBieSBpbWFnZS1saXZlLmJiY2xhc3Mgb3IgaW1hZ2Utdm0uYmJjbGFzcykKKyMgKGltYWdlcyBidWlsdCBieSBpbWFnZS1saXZlLmJiY2xhc3MpCiAKIGRvX2Jvb3RpbWdbZGVwZW5kc10gKz0gIiR7TUxQUkVGSVh9c3lzdGVtZC1ib290OmRvX2RlcGxveSIKLWRvX2Jvb3RkaXJlY3RkaXNrW2RlcGVuZHNdICs9ICIke01MUFJFRklYfXN5c3RlbWQtYm9vdDpkb19kZXBsb3kiCiAKIEVGSURJUiA9ICIvRUZJL0JPT1QiCiAKQEAgLTEwMCw2ICs5OSw4IEBACiAgICAgICAgICAgICBiYi5mYXRhbCgnT1ZFUlJJREVTIG5vdCBkZWZpbmVkJykKIAogICAgICAgICBlbnRyeWZpbGUgPSAiJXMvJXMuY29uZiIgJSAocywgbGFiZWwpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzKToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKHMpCiAgICAgICAgIGQuYXBwZW5kVmFyKCJTWVNURU1EX0JPT1RfRU5UUklFUyIsICIgIiArIGVudHJ5ZmlsZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZW50cnljZmcgPSBvcGVuKGVudHJ5ZmlsZSwgInciKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zeXN0ZW1kLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3N5c3RlbWQuYmJjbGFzcwppbmRleCBjNGI0YmI5Li4xYjEzNDMyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3N5c3RlbWQuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3N5c3RlbWQuYmJjbGFzcwpAQCAtMTU0LDggKzE1NCwxMCBAQAogICAgICAgICAgICAgICAgICMgRGVhbCB3aXRoIGFkZGluZywgZm9yIGV4YW1wbGUsICdpZnBsdWdkQGV0aDAuc2VydmljZScgZnJvbQogICAgICAgICAgICAgICAgICMgJ2lmcGx1Z2RALnNlcnZpY2UnCiAgICAgICAgICAgICAgICAgYmFzZSA9IE5vbmUKLSAgICAgICAgICAgICAgICBpZiBzZXJ2aWNlLmZpbmQoJ0AnKSAhPSAtMToKLSAgICAgICAgICAgICAgICAgICAgYmFzZSA9IHJlLnN1YignQFteLl0rLicsICdALicsIHNlcnZpY2UpCisgICAgICAgICAgICAgICAgYXQgPSBzZXJ2aWNlLmZpbmQoJ0AnKQorICAgICAgICAgICAgICAgIGlmIGF0ICE9IC0xOgorICAgICAgICAgICAgICAgICAgICBleHQgPSBzZXJ2aWNlLnJmaW5kKCcuJykKKyAgICAgICAgICAgICAgICAgICAgYmFzZSA9IHNlcnZpY2VbOmF0XSArICdAJyArIHNlcnZpY2VbZXh0Ol0KIAogICAgICAgICAgICAgICAgIGZvciBwYXRoIGluIHNlYXJjaHBhdGhzOgogICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvZS5wYXRoLmpvaW4oZC5nZXRWYXIoIkQiKSwgcGF0aCwgc2VydmljZSkpOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90ZXN0ZXhwb3J0LmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rlc3RleHBvcnQuYmJjbGFzcwppbmRleCA1NmVkZGE5Li5kMDcwZjA3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rlc3RleHBvcnQuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rlc3RleHBvcnQuYmJjbGFzcwpAQCAtMTEzLDcgKzExMyw3IEBACiAgICAgb2UucGF0aC5yZW1vdmUoY2FzZXNfcGF0aCkKICAgICBiYi51dGlscy5ta2RpcmhpZXIoY2FzZXNfcGF0aCkKICAgICB0ZXN0X3BhdGhzID0gZ2V0X3J1bnRpbWVfcGF0aHMoZCkKLSAgICB0ZXN0X21vZHVsZXMgPSBkLmdldFZhcignVEVTVF9TVUlURVMnKQorICAgIHRlc3RfbW9kdWxlcyA9IGQuZ2V0VmFyKCdURVNUX1NVSVRFUycpLnNwbGl0KCkKICAgICB0Yy5sb2FkVGVzdHModGVzdF9wYXRocywgbW9kdWxlcz10ZXN0X21vZHVsZXMpCiAgICAgZm9yIGYgaW4gZ2V0U3VpdGVDYXNlc0ZpbGVzKHRjLnN1aXRlcyk6CiAgICAgICAgIHNodXRpbC5jb3B5MihmLCBjYXNlc19wYXRoKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90ZXN0aW1hZ2UuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdGVzdGltYWdlLmJiY2xhc3MKaW5kZXggZmIyMTQ2MC4uNDViYjJiZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90ZXN0aW1hZ2UuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rlc3RpbWFnZS5iYmNsYXNzCkBAIC03LDEzICs3LDEzIEBACiAjIE1vc3Qgb2YgdGhlIHRlc3RzIGFyZSBjb21tYW5kcyBydW4gb24gdGFyZ2V0IGltYWdlIG92ZXIgc3NoLgogIyBUbyB1c2UgaXQgYWRkIHRlc3RpbWFnZSB0byBnbG9iYWwgaW5oZXJpdCBhbmQgY2FsbCB5b3VyIHRhcmdldCBpbWFnZSB3aXRoIC1jIHRlc3RpbWFnZQogIyBZb3UgY2FuIHRyeSBpdCBvdXQgbGlrZSB0aGlzOgotIyAtIGZpcnN0IGJ1aWxkIGEgcWVtdSBjb3JlLWltYWdlLXNhdG8KLSMgLSBhZGQgSU1BR0VfQ0xBU1NFUyArPSAidGVzdGltYWdlIiBpbiBsb2NhbC5jb25mCisjIC0gZmlyc3QgYWRkIElNQUdFX0NMQVNTRVMgKz0gInRlc3RpbWFnZSIgaW4gbG9jYWwuY29uZgorIyAtIGJ1aWxkIGEgcWVtdSBjb3JlLWltYWdlLXNhdG8KICMgLSB0aGVuIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvIC1jIHRlc3RpbWFnZS4gVGhhdCB3aWxsIHJ1biBhIHN0YW5kYXJkIHN1aXRlIG9mIHRlc3RzLgogCiAjIFlvdSBjYW4gc2V0IChvciBhcHBlbmQgdG8pIFRFU1RfU1VJVEVTIGluIGxvY2FsLmNvbmYgdG8gc2VsZWN0IHRoZSB0ZXN0cwogIyB3aGljaCB5b3Ugd2FudCB0byBydW4gZm9yIHlvdXIgdGFyZ2V0LgotIyBUaGUgdGVzdCBuYW1lcyBhcmUgdGhlIG1vZHVsZSBuYW1lcyBpbiBtZXRhL2xpYi9vZXFhL3J1bnRpbWUuCisjIFRoZSB0ZXN0IG5hbWVzIGFyZSB0aGUgbW9kdWxlIG5hbWVzIGluIG1ldGEvbGliL29lcWEvcnVudGltZS9jYXNlcy4KICMgRWFjaCBuYW1lIGluIFRFU1RfU1VJVEVTIHJlcHJlc2VudHMgYSByZXF1aXJlZCB0ZXN0IGZvciB0aGUgaW1hZ2UuIChubyBza2lwcGluZyBhbGxvd2VkKQogIyBBcHBlbmRpbmcgImF1dG8iIG1lYW5zIHRoYXQgaXQgd2lsbCB0cnkgdG8gcnVuIGFsbCB0ZXN0cyB0aGF0IGFyZSBzdWl0YWJsZSBmb3IgdGhlIGltYWdlIChlYWNoIHRlc3QgZGVjaWRlcyB0aGF0IG9uIGl0J3Mgb3duKS4KICMgTm90ZSB0aGF0IG9yZGVyIGluIFRFU1RfU1VJVEVTIGlzIHJlbGV2YW50OiB0ZXN0cyBhcmUgcnVuIGluIGFuIG9yZGVyIHN1Y2ggdGhhdApAQCAtNDksMTAgKzQ5LDEwIEBACiBERUZBVUxUX1RFU1RfU1VJVEVTX3BuLWNvcmUtaW1hZ2UtbHNiID0gIiR7TkVUVEVTVFNVSVRFfSBwYW0gcGFyc2Vsb2dzICR7UlBNVEVTVFNVSVRFfSIKIERFRkFVTFRfVEVTVF9TVUlURVNfcG4tY29yZS1pbWFnZS1zYXRvID0gIiR7TkVUVEVTVFNVSVRFfSBjb25ubWFuIHhvcmcgcGFyc2Vsb2dzICR7UlBNVEVTVFNVSVRFfSBcCiAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0lNQUdFX1BLR1RZUEUnLCAncnBtJywgJ3B5dGhvbicsICcnLCBkKX0iCi1ERUZBVUxUX1RFU1RfU1VJVEVTX3BuLWNvcmUtaW1hZ2Utc2F0by1zZGsgPSAiJHtORVRURVNUU1VJVEV9IGJ1aWxkY3BpbyBidWlsZGlwdGFibGVzIGJ1aWxkZ2FsY3VsYXRvciBcCitERUZBVUxUX1RFU1RfU1VJVEVTX3BuLWNvcmUtaW1hZ2Utc2F0by1zZGsgPSAiJHtORVRURVNUU1VJVEV9IGJ1aWxkY3BpbyBidWlsZGx6aXAgYnVpbGRnYWxjdWxhdG9yIFwKICAgICBjb25ubWFuICR7REVWVEVTVFNVSVRFfSBsb2dyb3RhdGUgcGVybCBwYXJzZWxvZ3MgcHl0aG9uICR7UlBNVEVTVFNVSVRFfSB4b3JnIgogREVGQVVMVF9URVNUX1NVSVRFU19wbi1jb3JlLWltYWdlLWxzYi1kZXYgPSAiJHtORVRURVNUU1VJVEV9IHBhbSBwZXJsIHB5dGhvbiBwYXJzZWxvZ3MgJHtSUE1URVNUU1VJVEV9IgotREVGQVVMVF9URVNUX1NVSVRFU19wbi1jb3JlLWltYWdlLWxzYi1zZGsgPSAiJHtORVRURVNUU1VJVEV9IGJ1aWxkY3BpbyBidWlsZGlwdGFibGVzIGJ1aWxkZ2FsY3VsYXRvciBcCitERUZBVUxUX1RFU1RfU1VJVEVTX3BuLWNvcmUtaW1hZ2UtbHNiLXNkayA9ICIke05FVFRFU1RTVUlURX0gYnVpbGRjcGlvIGJ1aWxkbHppcCBidWlsZGdhbGN1bGF0b3IgXAogICAgIGNvbm5tYW4gJHtERVZURVNUU1VJVEV9IGxvZ3JvdGF0ZSBwYW0gcGFyc2Vsb2dzIHBlcmwgcHl0aG9uICR7UlBNVEVTVFNVSVRFfSIKIERFRkFVTFRfVEVTVF9TVUlURVNfcG4tbWV0YS10b29sY2hhaW4gPSAiYXV0byIKIApAQCAtNjEsNyArNjEsNyBAQAogCiAjIHFlbXVtaXBzIGlzIHF1aXRlIHNsb3cgYW5kIGhhcyByZWFjaGVkIHRoZSB0aW1lb3V0IGxpbWl0IHNldmVyYWwgdGltZXMgb24gdGhlIFlQIGJ1aWxkIGNsdXN0ZXIsCiAjIG1pdGlnYXRlIHRoaXMgYnkgcmVtb3ZpbmcgYnVpbGQgdGVzdHMgZm9yIHFlbXVtaXBzIG1hY2hpbmVzLgotTUlQU1JFTU9WRSA/Pz0gImJ1aWxkY3BpbyBidWlsZGlwdGFibGVzIGJ1aWxkZ2FsY3VsYXRvciIKK01JUFNSRU1PVkUgPz89ICJidWlsZGNwaW8gYnVpbGRsemlwIGJ1aWxkZ2FsY3VsYXRvciIKIERFRkFVTFRfVEVTVF9TVUlURVNfcmVtb3ZlX3FlbXVtaXBzID0gIiR7TUlQU1JFTU9WRX0iCiBERUZBVUxUX1RFU1RfU1VJVEVTX3JlbW92ZV9xZW11bWlwczY0ID0gIiR7TUlQU1JFTU9WRX0iCiAKQEAgLTI0OCw3ICsyNDgsNyBAQAogCiAgICAgIyB0aGUgcm9ib3QgZGFuY2UKICAgICB0YXJnZXQgPSBPRVJ1bnRpbWVUZXN0Q29udGV4dEV4ZWN1dG9yLmdldFRhcmdldCgKLSAgICAgICAgZC5nZXRWYXIoIlRFU1RfVEFSR0VUIiksIE5vbmUsIGQuZ2V0VmFyKCJURVNUX1RBUkdFVF9JUCIpLAorICAgICAgICBkLmdldFZhcigiVEVTVF9UQVJHRVQiKSwgbG9nZ2VyLCBkLmdldFZhcigiVEVTVF9UQVJHRVRfSVAiKSwKICAgICAgICAgZC5nZXRWYXIoIlRFU1RfU0VSVkVSX0lQIiksICoqdGFyZ2V0X2t3YXJncykKIAogICAgICMgdGVzdCBjb250ZXh0CkBAIC0yNTcsNyArMjU3LDcgQEAKIAogICAgICMgTG9hZCB0ZXN0cyBiZWZvcmUgc3RhcnRpbmcgdGhlIHRhcmdldAogICAgIHRlc3RfcGF0aHMgPSBnZXRfcnVudGltZV9wYXRocyhkKQotICAgIHRlc3RfbW9kdWxlcyA9IGQuZ2V0VmFyKCdURVNUX1NVSVRFUycpCisgICAgdGVzdF9tb2R1bGVzID0gZC5nZXRWYXIoJ1RFU1RfU1VJVEVTJykuc3BsaXQoKQogICAgIHRjLmxvYWRUZXN0cyh0ZXN0X3BhdGhzLCBtb2R1bGVzPXRlc3RfbW9kdWxlcykKIAogICAgIGlmIG5vdCBnZXRTdWl0ZUNhc2VzKHRjLnN1aXRlcyk6CkBAIC0yOTEsMTEgKzI5MSwxMSBAQAogCiAgICAgIyBTaG93IHJlc3VsdHMgKGlmIHdlIGhhdmUgdGhlbSkKICAgICBpZiBub3QgcmVzdWx0czoKLSAgICAgICAgYmIuZmF0YWwoJyVzIC0gRkFJTEVEIC0gdGVzdHMgd2VyZSBpbnRlcnJ1cHRlZCBkdXJpbmcgZXhlY3V0aW9uJyAlIHBuKQotICAgIHRjLmxvZ1N1bW1hcnkocmVzdWx0cywgcG4pCi0gICAgdGMubG9nRGV0YWlscygpCisgICAgICAgIGJiLmZhdGFsKCclcyAtIEZBSUxFRCAtIHRlc3RzIHdlcmUgaW50ZXJydXB0ZWQgZHVyaW5nIGV4ZWN1dGlvbicgJSBwbiwgZm9yY2Vsb2c9VHJ1ZSkKKyAgICByZXN1bHRzLmxvZ0RldGFpbHMoKQorICAgIHJlc3VsdHMubG9nU3VtbWFyeShwbikKICAgICBpZiBub3QgcmVzdWx0cy53YXNTdWNjZXNzZnVsKCk6Ci0gICAgICAgIGJiLmZhdGFsKCclcyAtIEZBSUxFRCAtIGNoZWNrIHRoZSB0YXNrIGxvZyBhbmQgdGhlIHNzaCBsb2cnICUgcG4pCisgICAgICAgIGJiLmZhdGFsKCclcyAtIEZBSUxFRCAtIGNoZWNrIHRoZSB0YXNrIGxvZyBhbmQgdGhlIHNzaCBsb2cnICUgcG4sIGZvcmNlbG9nPVRydWUpCiAKIGRlZiBnZXRfcnVudGltZV9wYXRocyhkKToKICAgICAiIiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdGVzdHNkay5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90ZXN0c2RrLmJiY2xhc3MKaW5kZXggNmEyMDFhYS4uNmI1MWEzMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90ZXN0c2RrLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90ZXN0c2RrLmJiY2xhc3MKQEAgLTIxLDEwICsyMSwxMSBAQAogICAgIGltcG9ydCBsb2dnaW5nCiAKICAgICBmcm9tIGJiLnV0aWxzIGltcG9ydCBleHBvcnRfcHJveGllcwotICAgIGZyb20gb2VxYS5jb3JlLnJ1bm5lciBpbXBvcnQgT0VTdHJlYW1Mb2dnZXIKICAgICBmcm9tIG9lcWEuc2RrLmNvbnRleHQgaW1wb3J0IE9FU0RLVGVzdENvbnRleHQsIE9FU0RLVGVzdENvbnRleHRFeGVjdXRvcgogICAgIGZyb20gb2VxYS51dGlscyBpbXBvcnQgbWFrZV9sb2dnZXJfYml0YmFrZV9jb21wYXRpYmxlCiAKKyAgICBiYi5ldmVudC5lbmFibGVfdGhyZWFkbG9jaygpCisKICAgICBwbiA9IGQuZ2V0VmFyKCJQTiIpCiAgICAgbG9nZ2VyID0gbWFrZV9sb2dnZXJfYml0YmFrZV9jb21wYXRpYmxlKGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlIikpCiAKQEAgLTcxLDggKzcyLDggQEAKICAgICAgICAgY29tcG9uZW50ID0gIiVzICVzIiAlIChwbiwgT0VTREtUZXN0Q29udGV4dEV4ZWN1dG9yLm5hbWUpCiAgICAgICAgIGNvbnRleHRfbXNnID0gIiVzOiVzIiAlIChvcy5wYXRoLmJhc2VuYW1lKHRjbmFtZSksIG9zLnBhdGguYmFzZW5hbWUoc2RrX2VudikpCiAKLSAgICAgICAgdGMubG9nU3VtbWFyeShyZXN1bHQsIGNvbXBvbmVudCwgY29udGV4dF9tc2cpCi0gICAgICAgIHRjLmxvZ0RldGFpbHMoKQorICAgICAgICByZXN1bHQubG9nRGV0YWlscygpCisgICAgICAgIHJlc3VsdC5sb2dTdW1tYXJ5KGNvbXBvbmVudCwgY29udGV4dF9tc2cpCiAKICAgICAgICAgaWYgbm90IHJlc3VsdC53YXNTdWNjZXNzZnVsKCk6CiAgICAgICAgICAgICBmYWlsID0gVHJ1ZQpAQCAtOTgsNiArOTksOCBAQAogICAgIGZyb20gb2VxYS51dGlscyBpbXBvcnQgYXZvaWRfcGF0aHNfaW5fZW52aXJvbiwgbWFrZV9sb2dnZXJfYml0YmFrZV9jb21wYXRpYmxlLCBzdWJwcm9jZXNzdHdlYWsKICAgICBmcm9tIG9lcWEuc2RrZXh0LmNvbnRleHQgaW1wb3J0IE9FU0RLRXh0VGVzdENvbnRleHQsIE9FU0RLRXh0VGVzdENvbnRleHRFeGVjdXRvcgogCisgICAgYmIuZXZlbnQuZW5hYmxlX3RocmVhZGxvY2soKQorCiAgICAgcG4gPSBkLmdldFZhcigiUE4iKQogICAgIGxvZ2dlciA9IG1ha2VfbG9nZ2VyX2JpdGJha2VfY29tcGF0aWJsZShsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZSIpKQogCkBAIC0xNzMsOCArMTc2LDggQEAKICAgICAgICAgY29tcG9uZW50ID0gIiVzICVzIiAlIChwbiwgT0VTREtFeHRUZXN0Q29udGV4dEV4ZWN1dG9yLm5hbWUpCiAgICAgICAgIGNvbnRleHRfbXNnID0gIiVzOiVzIiAlIChvcy5wYXRoLmJhc2VuYW1lKHRjbmFtZSksIG9zLnBhdGguYmFzZW5hbWUoc2RrX2VudikpCiAKLSAgICAgICAgdGMubG9nU3VtbWFyeShyZXN1bHQsIGNvbXBvbmVudCwgY29udGV4dF9tc2cpCi0gICAgICAgIHRjLmxvZ0RldGFpbHMoKQorICAgICAgICByZXN1bHQubG9nRGV0YWlscygpCisgICAgICAgIHJlc3VsdC5sb2dTdW1tYXJ5KGNvbXBvbmVudCwgY29udGV4dF9tc2cpCiAKICAgICAgICAgaWYgbm90IHJlc3VsdC53YXNTdWNjZXNzZnVsKCk6CiAgICAgICAgICAgICBmYWlsID0gVHJ1ZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90b29sY2hhaW4tc2NyaXB0cy5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90b29sY2hhaW4tc2NyaXB0cy5iYmNsYXNzCmluZGV4IDI2MGVjZTkuLjliY2ZlNzAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdG9vbGNoYWluLXNjcmlwdHMuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rvb2xjaGFpbi1zY3JpcHRzLmJiY2xhc3MKQEAgLTMsNyArMyw2IEBACiAjIFdlIHdhbnQgdG8gYmUgYWJsZSB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIE1VTFRJTUFDSF9UQVJHRVRfU1lTLCBiZWNhdXNlIGl0CiAjIGRvZXNuJ3QgYWx3YXlzIG1hdGNoIG91ciBleHBlY3RhdGlvbnMuLi4gYnV0IHdlIGRlZmF1bHQgdG8gdGhlIHN0b2NrIHZhbHVlCiBSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTID89ICIke01VTFRJTUFDSF9UQVJHRVRfU1lTfSIKLVRBUkdFVF9DQ19BUkNIX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLW11Y2xpYmMiCiBUQVJHRVRfQ0NfQVJDSF9hcHBlbmRfbGliYy1tdXNsID0gIiAtbW11c2wiCiAKICMgZGVmYXVsdCBkZWJ1ZyBwcmVmaXggbWFwIGlzbid0IHZhbGlkIGluIHRoZSBTREsKQEAgLTI1LDYgKzI0LDIxIEBACiAJc2NyaXB0PSR7MTotJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L2Vudmlyb25tZW50LXNldHVwLSRtdWx0aW1hY2hfdGFyZ2V0X3N5c30KIAlybSAtZiAkc2NyaXB0CiAJdG91Y2ggJHNjcmlwdAorCisJZWNobyAnIyBDaGVjayBmb3IgTERfTElCUkFSWV9QQVRIIGJlaW5nIHNldCwgd2hpY2ggY2FuIGJyZWFrIFNESyBhbmQgZ2VuZXJhbGx5IGlzIGEgYmFkIHByYWN0aWNlJyA+PiAkc2NyaXB0CisJZWNobyAnIyBodHRwOi8vdGxkcC5vcmcvSE9XVE8vUHJvZ3JhbS1MaWJyYXJ5LUhPV1RPL3NoYXJlZC1saWJyYXJpZXMuaHRtbCNBRU44MCcgPj4gJHNjcmlwdAorCWVjaG8gJyMgaHR0cDovL3hhaGxlZS5pbmZvL1VuaXhSZXNvdXJjZV9kaXIvXy9sZHBhdGguaHRtbCcgPj4gJHNjcmlwdAorCWVjaG8gJyMgT25seSBkaXNhYmxlIHRoaXMgY2hlY2sgaWYgeW91IGFyZSBhYnNvbHV0ZWx5IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIScgPj4gJHNjcmlwdAorCWVjaG8gJ2lmIFsgISAteiAiJExEX0xJQlJBUllfUEFUSCIgXTsgdGhlbicgPj4gJHNjcmlwdAorCWVjaG8gIiAgICBlY2hvIFwiWW91ciBlbnZpcm9ubWVudCBpcyBtaXNjb25maWd1cmVkLCB5b3UgcHJvYmFibHkgbmVlZCB0byAndW5zZXQgTERfTElCUkFSWV9QQVRIJ1wiIiA+PiAkc2NyaXB0CisJZWNobyAiICAgIGVjaG8gXCJidXQgcGxlYXNlIGNoZWNrIHdoeSB0aGlzIHdhcyBzZXQgaW4gdGhlIGZpcnN0IHBsYWNlIGFuZCB0aGF0IGl0J3Mgc2FmZSB0byB1bnNldC5cIiIgPj4gJHNjcmlwdAorCWVjaG8gJyAgICBlY2hvICJUaGUgU0RLIHdpbGwgbm90IG9wZXJhdGUgY29ycmVjdGx5IGluIG1vc3QgY2FzZXMgd2hlbiBMRF9MSUJSQVJZX1BBVEggaXMgc2V0LiInID4+ICRzY3JpcHQKKwllY2hvICcgICAgZWNobyAiRm9yIG1vcmUgcmVmZXJlbmNlcyBzZWU6IicgPj4gJHNjcmlwdAorCWVjaG8gJyAgICBlY2hvICIgIGh0dHA6Ly90bGRwLm9yZy9IT1dUTy9Qcm9ncmFtLUxpYnJhcnktSE9XVE8vc2hhcmVkLWxpYnJhcmllcy5odG1sI0FFTjgwIicgPj4gJHNjcmlwdAorCWVjaG8gJyAgICBlY2hvICIgIGh0dHA6Ly94YWhsZWUuaW5mby9Vbml4UmVzb3VyY2VfZGlyL18vbGRwYXRoLmh0bWwiJyA+PiAkc2NyaXB0CisJZWNobyAnICAgIHJldHVybiAxJyA+PiAkc2NyaXB0CisJZWNobyAnZmknID4+ICRzY3JpcHQKKwogCWVjaG8gJ2V4cG9ydCBTREtUQVJHRVRTWVNST09UPSciJHN5c3Jvb3QiID4+ICRzY3JpcHQKIAlFWFRSQVBBVEg9IiIKIAlmb3IgaSBpbiAke0NBTkFESUFORVhUUkFPU307IGRvCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Vib290LWNvbmZpZy5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91Ym9vdC1jb25maWcuYmJjbGFzcwppbmRleCAxMDAxM2I3Li41MzNlMTc1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Vib290LWNvbmZpZy5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdWJvb3QtY29uZmlnLmJiY2xhc3MKQEAgLTIwLDI0ICsyMCwyMSBAQAogICAgIHVib290YmluYXJpZXMgPSBkLmdldFZhcignVUJPT1RfQklOQVJJRVMnKQogICAgICMgVGhlICJkb2MiIHZhcmZsYWcgaXMgc3BlY2lhbCwgd2UgZG9uJ3Qgd2FudCB0byBzZWUgaXQgaGVyZQogICAgIHVib290Y29uZmlnZmxhZ3MucG9wKCdkb2MnLCBOb25lKQorICAgIHVib290Y29uZmlnID0gKGQuZ2V0VmFyKCdVQk9PVF9DT05GSUcnKSBvciAiIikuc3BsaXQoKQogCi0gICAgaWYgbm90IHVib290bWFjaGluZSBhbmQgbm90IHVib290Y29uZmlnZmxhZ3M6CisgICAgaWYgbm90IHVib290bWFjaGluZSBhbmQgbm90IHVib290Y29uZmlnOgogICAgICAgICBQTiA9IGQuZ2V0VmFyKCJQTiIpCiAgICAgICAgIEZJTEUgPSBvcy5wYXRoLmJhc2VuYW1lKGQuZ2V0VmFyKCJGSUxFIikpCiAgICAgICAgIGJiLmRlYnVnKDEsICJUbyBidWlsZCAlcywgc2VlICVzIGZvciBpbnN0cnVjdGlvbnMgb24gXAogICAgICAgICAgICAgICAgICBzZXR0aW5nIHVwIHlvdXIgbWFjaGluZSBjb25maWciICUgKFBOLCBGSUxFKSkKICAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIkVpdGhlciBVQk9PVF9NQUNISU5FIG9yIFVCT09UX0NPTkZJRyBtdXN0IGJlIHNldCBpbiB0aGUgJXMgbWFjaGluZSBjb25maWd1cmF0aW9uLiIgJSBkLmdldFZhcigiTUFDSElORSIpKQogCi0gICAgaWYgdWJvb3RtYWNoaW5lIGFuZCB1Ym9vdGNvbmZpZ2ZsYWdzOgorICAgIGlmIHVib290bWFjaGluZSBhbmQgdWJvb3Rjb25maWc6CiAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJZb3UgY2Fubm90IHVzZSBVQk9PVF9NQUNISU5FIGFuZCBVQk9PVF9DT05GSUcgYXQgdGhlIHNhbWUgdGltZS4iKQogCiAgICAgaWYgdWJvb3Rjb25maWdmbGFncyBhbmQgdWJvb3RiaW5hcmllczoKICAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIllvdSBjYW5ub3QgdXNlIFVCT09UX0JJTkFSSUVTIGFzIGl0IGlzIGludGVybmFsIHRvIHVib290X2NvbmZpZy5iYmNsYXNzLiIpCiAKLSAgICBpZiBub3QgdWJvb3Rjb25maWdmbGFnczoKLSAgICAgICAgcmV0dXJuCi0KLSAgICB1Ym9vdGNvbmZpZyA9IChkLmdldFZhcignVUJPT1RfQ09ORklHJykgb3IgIiIpLnNwbGl0KCkKICAgICBpZiBsZW4odWJvb3Rjb25maWcpID4gMDoKICAgICAgICAgZm9yIGNvbmZpZyBpbiB1Ym9vdGNvbmZpZzoKICAgICAgICAgICAgIGZvciBmLCB2IGluIHVib290Y29uZmlnZmxhZ3MuaXRlbXMoKToKQEAgLTU3LDYgKzU0LDQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICJBcHBlbmRpbmcgJyVzJyB0byBVQk9PVF9CSU5BUklFUy4iICUgdWJvb3RiaW5hcnkpCiAgICAgICAgICAgICAgICAgICAgICAgICBkLmFwcGVuZFZhcignVUJPT1RfQklOQVJJRVMnLCAnICcgKyB1Ym9vdGJpbmFyeSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICBlbGlmIGxlbih1Ym9vdGNvbmZpZykgPT0gMDoKLSAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgnWW91IG11c3Qgc2V0IGEgZGVmYXVsdCBpbiBVQk9PVF9DT05GSUcuJykKIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdWJvb3QtZXh0bGludXgtY29uZmlnLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Vib290LWV4dGxpbnV4LWNvbmZpZy5iYmNsYXNzCmluZGV4IDg0NDdhMDQuLjYxZGZmMTQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdWJvb3QtZXh0bGludXgtY29uZmlnLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91Ym9vdC1leHRsaW51eC1jb25maWcuYmJjbGFzcwpAQCAtNjgsNyArNjgsNyBAQAogCiBVQk9PVF9FWFRMSU5VWF9DT05GSUcgPSAiJHtCfS9leHRsaW51eC5jb25mIgogCi1weXRob24gY3JlYXRlX2V4dGxpbnV4X2NvbmZpZygpIHsKK3B5dGhvbiBkb19jcmVhdGVfZXh0bGludXhfY29uZmlnKCkgewogICAgIGlmIGQuZ2V0VmFyKCJVQk9PVF9FWFRMSU5VWCIpICE9ICIxIjoKICAgICAgIHJldHVybgogCkBAIC0xNDksNCArMTQ5LDQgQEAKICAgICAgICAgYmIuZmF0YWwoJ1VuYWJsZSB0byBvcGVuICVzJyAlIChjZmlsZSkpCiB9CiAKLWRvX2luc3RhbGxbcHJlZnVuY3NdICs9ICJjcmVhdGVfZXh0bGludXhfY29uZmlnIgorYWRkdGFzayBjcmVhdGVfZXh0bGludXhfY29uZmlnIGJlZm9yZSBkb19pbnN0YWxsIGRvX2RlcGxveSBhZnRlciBkb19jb21waWxlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VuaW5hdGl2ZS5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91bmluYXRpdmUuYmJjbGFzcwppbmRleCA4ZjM0NDgzLi42NzBlZmE5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VuaW5hdGl2ZS5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdW5pbmF0aXZlLmJiY2xhc3MKQEAgLTQ5LDYgKzQ5LDEyIEBACiAgICAgICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKICAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0ZJTEVTUEFUSCcsICIiKQogICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignRExfRElSJywgdGFyYmFsbGRpcikKKyAgICAgICAgICAgICMgT3VyIGdhbWVzIHdpdGggcGF0aCBtYW5pcHVsYXRpb24gb2YgRExfRElSIG1lYW4gc3RhbmRhcmQgUFJFTUlSUk9SUyBkb24ndCB3b3JrCisgICAgICAgICAgICAjIGFuZCB3ZSBjYW4ndCBlYXNpbHkgcHV0ICdjaGtzdW0nIGludG8gdGhlIHVybCBwYXRoIGZyb20gYSB1cmwgcGFyYW1ldGVyIHdpdGgKKyAgICAgICAgICAgICMgdGhlIGN1cnJlbnQgZmV0Y2hlciB1cmwgaGFuZGxpbmcKKyAgICAgICAgICAgIG93bm1pcnJvciA9IGQuZ2V0VmFyKCdTT1VSQ0VfTUlSUk9SX1VSTCcpCisgICAgICAgICAgICBpZiBvd25taXJyb3I6CisgICAgICAgICAgICAgICAgbG9jYWxkYXRhLmFwcGVuZFZhcigiUFJFTUlSUk9SUyIsICIgJHtVTklOQVRJVkVfVVJMfSR7VU5JTkFUSVZFX1RBUkJBTEx9ICR7U09VUkNFX01JUlJPUl9VUkx9L3VuaW5hdGl2ZS8lcy8ke1VOSU5BVElWRV9UQVJCQUxMfSIgJSBjaGtzdW0pCiAKICAgICAgICAgICAgIHNyY3VyaSA9IGQuZXhwYW5kKCIke1VOSU5BVElWRV9VUkx9JHtVTklOQVRJVkVfVEFSQkFMTH07c2hhMjU2c3VtPSVzIiAlIGNoa3N1bSkKICAgICAgICAgICAgIGJiLm5vdGUoIkZldGNoaW5nIHVuaW5hdGl2ZSBiaW5hcnkgc2hpbSBmcm9tICVzIiAlIHNyY3VyaSkKQEAgLTU3LDcgKzYzLDE5IEBACiAgICAgICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKICAgICAgICAgICAgIGxvY2FscGF0aCA9IGZldGNoZXIubG9jYWxwYXRoKHNyY3VyaSkKICAgICAgICAgICAgIGlmIGxvY2FscGF0aCAhPSB0YXJiYWxscGF0aCBhbmQgb3MucGF0aC5leGlzdHMobG9jYWxwYXRoKSBhbmQgbm90IG9zLnBhdGguZXhpc3RzKHRhcmJhbGxwYXRoKToKKyAgICAgICAgICAgICAgICAjIEZvbGxvdyB0aGUgc3ltbGluayBiZWhhdmlvciBmcm9tIHRoZSBiaXRiYWtlIGZldGNoMi4KKyAgICAgICAgICAgICAgICAjIFRoaXMgd2lsbCBjb3ZlciB0aGUgY2FzZSB3aGVyZSBhbiBleGlzdGluZyBzeW1saW5rIGlzIGJyb2tlbgorICAgICAgICAgICAgICAgICMgYXMgd2VsbCBhcyBpZiB0aGVyZSBhcmUgdHdvIHByb2Nlc3NlcyB0cnlpbmcgdG8gY3JlYXRlIGl0CisgICAgICAgICAgICAgICAgIyBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKHRhcmJhbGxwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgIyBCcm9rZW4gc3ltYm9saWMgbGluaworICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsodGFyYmFsbHBhdGgpCisKKyAgICAgICAgICAgICAgICAjIERlYWwgd2l0aCB0d28gcHJvY2Vzc2VzIHRyeWluZyB0byBtYWtlIHN5bWxpbmsgYXQgb25jZQorICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgb3Muc3ltbGluayhsb2NhbHBhdGgsIHRhcmJhbGxwYXRoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBjbWQgPSBkLmV4cGFuZCgiXAogbWtkaXIgLXAgJHtVTklOQVRJVkVfU1RBR0lOR19ESVJ9LXVuaW5hdGl2ZTsgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91cGRhdGUtYWx0ZXJuYXRpdmVzLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzcwppbmRleCA0YmJhNzZjLi5hYTAxMDU4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzcwpAQCAtMTQzLDYgKzE0MywxMCBAQAogICAgICAgICAgICAgaWYgbm90IGFsdF9saW5rOgogICAgICAgICAgICAgICAgIGFsdF9saW5rID0gIiVzLyVzIiAlIChkLmdldFZhcignYmluZGlyJyksIGFsdF9uYW1lKQogICAgICAgICAgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgYWx0X25hbWUsIGFsdF9saW5rKQorICAgICAgICAgICAgaWYgYWx0X2xpbmsuc3RhcnRzd2l0aChvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgJ2luaXQuZCcpKToKKyAgICAgICAgICAgICAgICAjIE1hbmFnaW5nIGluaXQgc2NyaXB0cyBkb2VzIG5vdCB3b3JrIChidWcgIzEwNDMzKSwgZm9yZW1vc3QKKyAgICAgICAgICAgICAgICAjIGJlY2F1c2Ugb2YgYSByYWNlIHdpdGggdXBkYXRlLXJjLmQKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiVXNpbmcgdXBkYXRlLWFsdGVybmF0aXZlcyBmb3IgbWFuYWdpbmcgU3lzViBpbml0IHNjcmlwdHMgaXMgbm90IHN1cHBvcnRlZCIpCiAKICAgICAgICAgICAgIGFsdF90YXJnZXQgICA9IGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgYWx0X25hbWUpIG9yIGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUJywgYWx0X25hbWUpCiAgICAgICAgICAgICBhbHRfdGFyZ2V0ICAgPSBhbHRfdGFyZ2V0IG9yIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnKSBvciBkLmdldFZhcignQUxURVJOQVRJVkVfVEFSR0VUJykgb3IgYWx0X2xpbmsKQEAgLTIwMSw4ICsyMDUsOCBAQAogICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHRCcpCiAgICAgZm9yIHBrZyBpbiAoZC5nZXRWYXIoJ1BBQ0tBR0VTJykgb3IgIiIpLnNwbGl0KCk6CiAgICAgICAgICMgQ3JlYXRlIHBvc3QgaW5zdGFsbC9yZW1vdmFsIHNjcmlwdHMKLSAgICAgICAgYWx0X3NldHVwX2xpbmtzID0gIiMgQmVnaW4gc2VjdGlvbiB1cGRhdGUtYWx0ZXJuYXRpdmVzXG4iCi0gICAgICAgIGFsdF9yZW1vdmVfbGlua3MgPSAiIyBCZWdpbiBzZWN0aW9uIHVwZGF0ZS1hbHRlcm5hdGl2ZXNcbiIKKyAgICAgICAgYWx0X3NldHVwX2xpbmtzID0gIiIKKyAgICAgICAgYWx0X3JlbW92ZV9saW5rcyA9ICIiCiAgICAgICAgIGZvciBhbHRfbmFtZSBpbiAoZC5nZXRWYXIoJ0FMVEVSTkFUSVZFXyVzJyAlIHBrZykgb3IgIiIpLnNwbGl0KCk6CiAgICAgICAgICAgICBhbHRfbGluayAgICAgPSBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIGFsdF9uYW1lKQogICAgICAgICAgICAgYWx0X3RhcmdldCAgID0gZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBhbHRfbmFtZSkgb3IgZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBhbHRfbmFtZSkKQEAgLTIyNSwxMyArMjI5LDEwIEBACiAgICAgICAgICAgICAjIERlZmF1bHQgdG8gZ2VuZXJhdGUgc2hlbGwgc2NyaXB0Li4gZXZlbnR1YWxseSB3ZSBtYXkgd2FudCB0byBjaGFuZ2UgdGhpcy4uLgogICAgICAgICAgICAgYWx0X3RhcmdldCA9IG9zLnBhdGgubm9ybXBhdGgoYWx0X3RhcmdldCkKIAotICAgICAgICAgICAgYWx0X3NldHVwX2xpbmtzICArPSAndXBkYXRlLWFsdGVybmF0aXZlcyAtLWluc3RhbGwgJXMgJXMgJXMgJXNcbicgJSAoYWx0X2xpbmssIGFsdF9uYW1lLCBhbHRfdGFyZ2V0LCBhbHRfcHJpb3JpdHkpCi0gICAgICAgICAgICBhbHRfcmVtb3ZlX2xpbmtzICs9ICd1cGRhdGUtYWx0ZXJuYXRpdmVzIC0tcmVtb3ZlICAlcyAlc1xuJyAlIChhbHRfbmFtZSwgYWx0X3RhcmdldCkKKyAgICAgICAgICAgIGFsdF9zZXR1cF9saW5rcyAgKz0gJ1x0dXBkYXRlLWFsdGVybmF0aXZlcyAtLWluc3RhbGwgJXMgJXMgJXMgJXNcbicgJSAoYWx0X2xpbmssIGFsdF9uYW1lLCBhbHRfdGFyZ2V0LCBhbHRfcHJpb3JpdHkpCisgICAgICAgICAgICBhbHRfcmVtb3ZlX2xpbmtzICs9ICdcdHVwZGF0ZS1hbHRlcm5hdGl2ZXMgLS1yZW1vdmUgICVzICVzXG4nICUgKGFsdF9uYW1lLCBhbHRfdGFyZ2V0KQogCi0gICAgICAgIGFsdF9zZXR1cF9saW5rcyArPSAiIyBFbmQgc2VjdGlvbiB1cGRhdGUtYWx0ZXJuYXRpdmVzXG4iCi0gICAgICAgIGFsdF9yZW1vdmVfbGlua3MgKz0gIiMgRW5kIHNlY3Rpb24gdXBkYXRlLWFsdGVybmF0aXZlc1xuIgotCi0gICAgICAgIGlmIGxlbihhbHRfc2V0dXBfbGlua3Muc3BsaXRsaW5lcygpKSA+IDI6CisgICAgICAgIGlmIGFsdF9zZXR1cF9saW5rczoKICAgICAgICAgICAgICMgUkRFUEVORFMgc2V0dXAKICAgICAgICAgICAgIHByb3ZpZGVyID0gZC5nZXRWYXIoJ1ZJUlRVQUwtUlVOVElNRV91cGRhdGUtYWx0ZXJuYXRpdmVzJykKICAgICAgICAgICAgIGlmIHByb3ZpZGVyOgpAQCAtMjQxLDI0ICsyNDIsMTIgQEAKICAgICAgICAgICAgIGJiLm5vdGUoJ2FkZGluZyB1cGRhdGUtYWx0ZXJuYXRpdmVzIGNhbGxzIHRvIHBvc3RpbnN0L3ByZXJtIGZvciAlcycgJSBwa2cpCiAgICAgICAgICAgICBiYi5ub3RlKCclcycgJSBhbHRfc2V0dXBfbGlua3MpCiAgICAgICAgICAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnKSBvciAnIyEvYmluL3NoXG4nCi0gICAgICAgICAgICBwb3N0aW5zdCA9IHBvc3RpbnN0LnNwbGl0bGluZXMoVHJ1ZSkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpbmRleCA9IHBvc3RpbnN0LmluZGV4KCcjIEJlZ2luIHNlY3Rpb24gdXBkYXRlLXJjLmRcbicpCi0gICAgICAgICAgICAgICAgcG9zdGluc3QuaW5zZXJ0KGluZGV4LCBhbHRfc2V0dXBfbGlua3MpCi0gICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICBwb3N0aW5zdC5hcHBlbmQoYWx0X3NldHVwX2xpbmtzKQotICAgICAgICAgICAgcG9zdGluc3QgPSAnJy5qb2luKHBvc3RpbnN0KQorICAgICAgICAgICAgcG9zdGluc3QgKz0gYWx0X3NldHVwX2xpbmtzCiAgICAgICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCiAKICAgICAgICAgICAgIGJiLm5vdGUoJyVzJyAlIGFsdF9yZW1vdmVfbGlua3MpCiAgICAgICAgICAgICBwcmVybSA9IGQuZ2V0VmFyKCdwa2dfcHJlcm1fJXMnICUgcGtnKSBvciAnIyEvYmluL3NoXG4nCi0gICAgICAgICAgICBwcmVybSA9IHByZXJtLnNwbGl0bGluZXMoVHJ1ZSkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpbmRleCA9IHByZXJtLmluZGV4KCcjIEVuZCBzZWN0aW9uIHVwZGF0ZS1yYy5kXG4nKQotICAgICAgICAgICAgICAgIHByZXJtLmluc2VydChpbmRleCArIDEsIGFsdF9yZW1vdmVfbGlua3MpCi0gICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICBwcmVybS5hcHBlbmQoYWx0X3JlbW92ZV9saW5rcykKLSAgICAgICAgICAgIHByZXJtID0gJycuam9pbihwcmVybSkKKyAgICAgICAgICAgIHByZXJtICs9IGFsdF9yZW1vdmVfbGlua3MKICAgICAgICAgICAgIGQuc2V0VmFyKCdwa2dfcHJlcm1fJXMnICUgcGtnLCBwcmVybSkKIH0KIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91cGRhdGUtcmMuZC5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91cGRhdGUtcmMuZC5iYmNsYXNzCmluZGV4IDliYTNkYWMuLmUxZTBlMDQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXBkYXRlLXJjLmQuYmJjbGFzcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VwZGF0ZS1yYy5kLmJiY2xhc3MKQEAgLTM3LDcgKzM3LDYgQEAKIFBBQ0tBR0VfV1JJVEVfREVQUyArPSAidXBkYXRlLXJjLmQtbmF0aXZlIgogCiB1cGRhdGVyY2RfcG9zdGluc3QoKSB7Ci0jIEJlZ2luIHNlY3Rpb24gdXBkYXRlLXJjLmQKIGlmICR7QHVzZV91cGRhdGVyY2QoZCl9ICYmIHR5cGUgdXBkYXRlLXJjLmQgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgogCWlmIFsgLW4gIiREIiBdOyB0aGVuCiAJCU9QVD0iLXIgJEQiCkBAIC00NiwxNSArNDUsMTIgQEAKIAlmaQogCXVwZGF0ZS1yYy5kICRPUFQgJHtJTklUU0NSSVBUX05BTUV9ICR7SU5JVFNDUklQVF9QQVJBTVN9CiBmaQotIyBFbmQgc2VjdGlvbiB1cGRhdGUtcmMuZAogfQogCiB1cGRhdGVyY2RfcHJlcm0oKSB7Ci0jIEJlZ2luIHNlY3Rpb24gdXBkYXRlLXJjLmQKIGlmICR7QHVzZV91cGRhdGVyY2QoZCl9ICYmIFsgLXogIiREIiAtYSAteCAiJHtJTklUX0RfRElSfS8ke0lOSVRTQ1JJUFRfTkFNRX0iIF07IHRoZW4KIAkke0lOSVRfRF9ESVJ9LyR7SU5JVFNDUklQVF9OQU1FfSBzdG9wIHx8IDoKIGZpCi0jIEVuZCBzZWN0aW9uIHVwZGF0ZS1yYy5kCiB9CiAKIHVwZGF0ZXJjZF9wb3N0cm0oKSB7CkBAIC05NSw4ICs5MSw3IEBACiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc3RhdGVtZW50ID0gImdyZXAgLXEgLXcgJy9ldGMvaW5pdC5kL2Z1bmN0aW9ucycgJXMiICUgcGF0aAogICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoc3RhdGVtZW50LCBzaGVsbD1UcnVlKSA9PSAwOgotICAgICAgICAgICAgbWxwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnKSBvciAiIgotICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ1JERVBFTkRTXycgKyBwa2csICcgJXNpbml0c2NyaXB0cy1mdW5jdGlvbnMnICUgKG1scHJlZml4KSkKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdSREVQRU5EU18nICsgcGtnLCAnIGluaXRkLWZ1bmN0aW9ucycpCiAKICAgICBkZWYgdXBkYXRlX3JjZF9wYWNrYWdlKHBrZyk6CiAgICAgICAgIGJiLmRlYnVnKDEsICdhZGRpbmcgdXBkYXRlLXJjLmQgY2FsbHMgdG8gcHJlaW5zdC9wb3N0aW5zdC9wcmVybS9wb3N0cm0gZm9yICVzJyAlIHBrZykKQEAgLTExNiwyNSArMTExLDEzIEBACiAgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2cpCiAgICAgICAgIGlmIG5vdCBwb3N0aW5zdDoKICAgICAgICAgICAgIHBvc3RpbnN0ID0gJyMhL2Jpbi9zaFxuJwotICAgICAgICBwb3N0aW5zdCA9IHBvc3RpbnN0LnNwbGl0bGluZXMoVHJ1ZSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaW5kZXggPSBwb3N0aW5zdC5pbmRleCgnIyBFbmQgc2VjdGlvbiB1cGRhdGUtYWx0ZXJuYXRpdmVzXG4nKQotICAgICAgICAgICAgcG9zdGluc3QuaW5zZXJ0KGluZGV4ICsgMSwgbG9jYWxkYXRhLmdldFZhcigndXBkYXRlcmNkX3Bvc3RpbnN0JykpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcG9zdGluc3QuYXBwZW5kKGxvY2FsZGF0YS5nZXRWYXIoJ3VwZGF0ZXJjZF9wb3N0aW5zdCcpKQotICAgICAgICBwb3N0aW5zdCA9ICcnLmpvaW4ocG9zdGluc3QpCisgICAgICAgIHBvc3RpbnN0ICs9IGxvY2FsZGF0YS5nZXRWYXIoJ3VwZGF0ZXJjZF9wb3N0aW5zdCcpCiAgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBwb3N0aW5zdCkKIAogICAgICAgICBwcmVybSA9IGQuZ2V0VmFyKCdwa2dfcHJlcm1fJXMnICUgcGtnKQogICAgICAgICBpZiBub3QgcHJlcm06CiAgICAgICAgICAgICBwcmVybSA9ICcjIS9iaW4vc2hcbicKLSAgICAgICAgcHJlcm0gPSBwcmVybS5zcGxpdGxpbmVzKFRydWUpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGluZGV4ID0gcHJlcm0uaW5kZXgoJyMgQmVnaW4gc2VjdGlvbiB1cGRhdGUtYWx0ZXJuYXRpdmVzXG4nKQotICAgICAgICAgICAgcHJlcm0uaW5zZXJ0KGluZGV4LCBsb2NhbGRhdGEuZ2V0VmFyKCd1cGRhdGVyY2RfcHJlcm0nKSkKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBwcmVybS5hcHBlbmQobG9jYWxkYXRhLmdldFZhcigndXBkYXRlcmNkX3ByZXJtJykpCi0gICAgICAgIHByZXJtID0gJycuam9pbihwcmVybSkKKyAgICAgICAgcHJlcm0gKz0gbG9jYWxkYXRhLmdldFZhcigndXBkYXRlcmNkX3ByZXJtJykKICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wcmVybV8lcycgJSBwa2csIHByZXJtKQogCiAgICAgICAgIHBvc3RybSA9IGQuZ2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXNlcmFkZC1zdGF0aWNpZHMuYmJjbGFzcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXNlcmFkZC1zdGF0aWNpZHMuYmJjbGFzcwppbmRleCA2ZWJmNzYwLi41ODlhOTlmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VzZXJhZGQtc3RhdGljaWRzLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91c2VyYWRkLXN0YXRpY2lkcy5iYmNsYXNzCkBAIC0xLDIyICsxLDEwIEBACiAjIEluIG9yZGVyIHRvIHN1cHBvcnQgYSBkZXRlcm1pbmlzdGljIHNldCBvZiAnZHluYW1pYycgdXNlcnMvZ3JvdXBzLAogIyB3ZSBuZWVkIGEgZnVuY3Rpb24gdG8gcmVmb3JtYXQgdGhlIHBhcmFtcyBiYXNlZCBvbiBhIHN0YXRpYyBmaWxlCiBkZWYgdXBkYXRlX3VzZXJhZGRfc3RhdGljX2NvbmZpZyhkKToKLSAgICBpbXBvcnQgYXJncGFyc2UKICAgICBpbXBvcnQgaXRlcnRvb2xzCiAgICAgaW1wb3J0IHJlCiAgICAgaW1wb3J0IGVycm5vCi0KLSAgICBjbGFzcyBteUFyZ3VtZW50UGFyc2VyKCBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlciApOgotICAgICAgICBkZWYgX3ByaW50X21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgZmlsZT1Ob25lKToKLSAgICAgICAgICAgIGJiLndhcm4oIiVzIC0gJXM6ICVzIiAlIChkLmdldFZhcignUE4nKSwgcGtnLCBtZXNzYWdlKSkKLQotICAgICAgICAjIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZC4uLgotICAgICAgICBkZWYgZXhpdChzZWxmLCBzdGF0dXM9MCwgbWVzc2FnZT1Ob25lKToKLSAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlIG9yICgiJXMgLSAlczogdXNlcmFkZC5iYmNsYXNzOiBBcmd1bWVudCBwYXJzaW5nIGV4aXRlZCIgJSAoZC5nZXRWYXIoJ1BOJyksIHBrZykpCi0gICAgICAgICAgICBlcnJvcihtZXNzYWdlKQotCi0gICAgICAgIGRlZiBlcnJvcihzZWxmLCBtZXNzYWdlKToKLSAgICAgICAgICAgIGJiLmZhdGFsKG1lc3NhZ2UpCisgICAgaW1wb3J0IG9lLnVzZXJhZGQKIAogICAgIGRlZiBsaXN0X2V4dGVuZChpdGVyYWJsZSwgbGVuZ3RoLCBvYmogPSBOb25lKToKICAgICAgICAgIiIiRW5zdXJlIHRoYXQgaXRlcmFibGUgaXMgdGhlIHNwZWNpZmllZCBsZW5ndGggYnkgZXh0ZW5kaW5nIHdpdGggb2JqCkBAIC01MCw2MiArMzgsNDQgQEAKIAogICAgICAgICByZXR1cm4gaWRfdGFibGUKIAotICAgIGRlZiBoYW5kbGVfbWlzc2luZ19pZChpZCwgdHlwZSwgcGtnKToKKyAgICBkZWYgaGFuZGxlX21pc3NpbmdfaWQoaWQsIHR5cGUsIHBrZywgZmlsZXMsIHZhciwgdmFsdWUpOgogICAgICAgICAjIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3ZSBhY2NlcHQgIjEiIGluIGFkZGl0aW9uIHRvICJlcnJvciIKLSAgICAgICAgaWYgZC5nZXRWYXIoJ1VTRVJBRERfRVJST1JfRFlOQU1JQycpID09ICdlcnJvcicgb3IgZC5nZXRWYXIoJ1VTRVJBRERfRVJST1JfRFlOQU1JQycpID09ICcxJzoKLSAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIiVzIC0gJXM6ICVzbmFtZSAlcyBkb2VzIG5vdCBoYXZlIGEgc3RhdGljIElEIGRlZmluZWQuIFNraXBwaW5nIGl0LiIgJSAoZC5nZXRWYXIoJ1BOJyksIHBrZywgdHlwZSwgaWQpKQotICAgICAgICBlbGlmIGQuZ2V0VmFyKCdVU0VSQUREX0VSUk9SX0RZTkFNSUMnKSA9PSAnd2Fybic6Ci0gICAgICAgICAgICBiYi53YXJuKCIlcyAtICVzOiAlc25hbWUgJXMgZG9lcyBub3QgaGF2ZSBhIHN0YXRpYyBJRCBkZWZpbmVkLiIgJSAoZC5nZXRWYXIoJ1BOJyksIHBrZywgdHlwZSwgaWQpKQorICAgICAgICBlcnJvcl9keW5hbWljID0gZC5nZXRWYXIoJ1VTRVJBRERfRVJST1JfRFlOQU1JQycpCisgICAgICAgIG1zZyA9ICIlcyAtICVzOiAlc25hbWUgJXMgZG9lcyBub3QgaGF2ZSBhIHN0YXRpYyBJRCBkZWZpbmVkLiIgJSAoZC5nZXRWYXIoJ1BOJyksIHBrZywgdHlwZSwgaWQpCisgICAgICAgIGlmIGZpbGVzOgorICAgICAgICAgICAgbXNnICs9ICIgQWRkICVzIHRvIG9uZSBvZiB0aGVzZSBmaWxlczogJXMiICUgKGlkLCBmaWxlcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZyArPSAiICVzIGZpbGUocykgbm90IGZvdW5kIGluIEJCUEFUSDogJXMiICUgKHZhciwgdmFsdWUpCisgICAgICAgIGlmIGVycm9yX2R5bmFtaWMgPT0gJ2Vycm9yJyBvciBlcnJvcl9keW5hbWljID09ICcxJzoKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IobXNnKQorICAgICAgICBlbGlmIGVycm9yX2R5bmFtaWMgPT0gJ3dhcm4nOgorICAgICAgICAgICAgYmIud2Fybihtc2cpCisgICAgICAgIGVsaWYgZXJyb3JfZHluYW1pYyA9PSAnc2tpcCc6CisgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUmVjaXBlKG1zZykKKworICAgICMgUmV0dXJuIGEgbGlzdCBvZiBjb25maWd1cmF0aW9uIGZpbGVzIGJhc2VkIG9uIGVpdGhlciB0aGUgZGVmYXVsdAorICAgICMgZmlsZXMvZ3JvdXAgb3IgdGhlIGNvbnRlbnRzIG9mIFVTRVJBRERfR0lEX1RBQkxFUywgcmVzcC4KKyAgICAjIGZpbGVzL3Bhc3N3ZCBmb3IgVVNFUkFERF9VSURfVEFCTEVTLgorICAgICMgUGF0aHMgYXJlIHJlc29sdmVkIHZpYSBCQlBBVEguCisgICAgZGVmIGdldF90YWJsZV9saXN0KGQsIHZhciwgZGVmYXVsdCk6CisgICAgICAgIGZpbGVzID0gW10KKyAgICAgICAgYmJwYXRoID0gZC5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpCisgICAgICAgIHRhYmxlcyA9IGQuZ2V0VmFyKHZhciwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHRhYmxlczoKKyAgICAgICAgICAgIHRhYmxlcyA9IGRlZmF1bHQKKyAgICAgICAgZm9yIGNvbmZfZmlsZSBpbiB0YWJsZXMuc3BsaXQoKToKKyAgICAgICAgICAgIGZpbGVzLmFwcGVuZChiYi51dGlscy53aGljaChiYnBhdGgsIGNvbmZfZmlsZSkpCisgICAgICAgIHJldHVybiAoJyAnLmpvaW4oZmlsZXMpLCB2YXIsIGRlZmF1bHQpCiAKICAgICAjIFdlIHBhcnNlIGFuZCByZXdyaXRlIHRoZSB1c2VyYWRkIGNvbXBvbmVudHMKICAgICBkZWYgcmV3cml0ZV91c2VyYWRkKHBhcmFtcywgaXNfcGtnKToKLSAgICAgICAgIyBUaGUgZm9sbG93aW5nIGNvbWVzIGZyb20gLS1oZWxwIG9uIHVzZXJhZGQgZnJvbSBzaGFkb3cKLSAgICAgICAgcGFyc2VyID0gbXlBcmd1bWVudFBhcnNlcihwcm9nPSd1c2VyYWRkJykKLSAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWIiLCAiLS1iYXNlLWRpciIsIG1ldGF2YXI9IkJBU0VfRElSIiwgaGVscD0iYmFzZSBkaXJlY3RvcnkgZm9yIHRoZSBob21lIGRpcmVjdG9yeSBvZiB0aGUgbmV3IGFjY291bnQiKQotICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItYyIsICItLWNvbW1lbnQiLCBtZXRhdmFyPSJDT01NRU5UIiwgaGVscD0iR0VDT1MgZmllbGQgb2YgdGhlIG5ldyBhY2NvdW50IikKLSAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWQiLCAiLS1ob21lLWRpciIsIG1ldGF2YXI9IkhPTUVfRElSIiwgaGVscD0iaG9tZSBkaXJlY3Rvcnkgb2YgdGhlIG5ldyBhY2NvdW50IikKLSAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLUQiLCAiLS1kZWZhdWx0cyIsIGhlbHA9InByaW50IG9yIGNoYW5nZSBkZWZhdWx0IHVzZXJhZGQgY29uZmlndXJhdGlvbiIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCi0gICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1lIiwgIi0tZXhwaXJlZGF0ZSIsIG1ldGF2YXI9IkVYUElSRV9EQVRFIiwgaGVscD0iZXhwaXJhdGlvbiBkYXRlIG9mIHRoZSBuZXcgYWNjb3VudCIpCi0gICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1mIiwgIi0taW5hY3RpdmUiLCBtZXRhdmFyPSJJTkFDVElWRSIsIGhlbHA9InBhc3N3b3JkIGluYWN0aXZpdHkgcGVyaW9kIG9mIHRoZSBuZXcgYWNjb3VudCIpCi0gICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1nIiwgIi0tZ2lkIiwgbWV0YXZhcj0iR1JPVVAiLCBoZWxwPSJuYW1lIG9yIElEIG9mIHRoZSBwcmltYXJ5IGdyb3VwIG9mIHRoZSBuZXcgYWNjb3VudCIpCi0gICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1HIiwgIi0tZ3JvdXBzIiwgbWV0YXZhcj0iR1JPVVBTIiwgaGVscD0ibGlzdCBvZiBzdXBwbGVtZW50YXJ5IGdyb3VwcyBvZiB0aGUgbmV3IGFjY291bnQiKQotICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItayIsICItLXNrZWwiLCBtZXRhdmFyPSJTS0VMX0RJUiIsIGhlbHA9InVzZSB0aGlzIGFsdGVybmF0aXZlIHNrZWxldG9uIGRpcmVjdG9yeSIpCi0gICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1LIiwgIi0ta2V5IiwgbWV0YXZhcj0iS0VZPVZBTFVFIiwgaGVscD0ib3ZlcnJpZGUgL2V0Yy9sb2dpbi5kZWZzIGRlZmF1bHRzIikKLSAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWwiLCAiLS1uby1sb2ctaW5pdCIsIGhlbHA9ImRvIG5vdCBhZGQgdGhlIHVzZXIgdG8gdGhlIGxhc3Rsb2cgYW5kIGZhaWxsb2cgZGF0YWJhc2VzIiwgYWN0aW9uPSJzdG9yZV90cnVlIikKLSAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLW0iLCAiLS1jcmVhdGUtaG9tZSIsIGhlbHA9ImNyZWF0ZSB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IiwgYWN0aW9uPSJzdG9yZV9jb25zdCIsIGNvbnN0PVRydWUpCi0gICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1NIiwgIi0tbm8tY3JlYXRlLWhvbWUiLCBkZXN0PSJjcmVhdGVfaG9tZSIsIGhlbHA9ImRvIG5vdCBjcmVhdGUgdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSIsIGFjdGlvbj0ic3RvcmVfY29uc3QiLCBjb25zdD1GYWxzZSkKLSAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLU4iLCAiLS1uby11c2VyLWdyb3VwIiwgZGVzdD0idXNlcl9ncm91cCIsIGhlbHA9ImRvIG5vdCBjcmVhdGUgYSBncm91cCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHVzZXIiLCBhY3Rpb249InN0b3JlX2NvbnN0IiwgY29uc3Q9RmFsc2UpCi0gICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1vIiwgIi0tbm9uLXVuaXF1ZSIsIGhlbHA9ImFsbG93IHRvIGNyZWF0ZSB1c2VycyB3aXRoIGR1cGxpY2F0ZSAobm9uLXVuaXF1ZSBVSUQpIiwgYWN0aW9uPSJzdG9yZV90cnVlIikKLSAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXAiLCAiLS1wYXNzd29yZCIsIG1ldGF2YXI9IlBBU1NXT1JEIiwgaGVscD0iZW5jcnlwdGVkIHBhc3N3b3JkIG9mIHRoZSBuZXcgYWNjb3VudCIpCi0gICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1QIiwgIi0tY2xlYXItcGFzc3dvcmQiLCBtZXRhdmFyPSJDTEVBUl9QQVNTV09SRCIsIGhlbHA9InVzZSB0aGlzIGNsZWFyIHBhc3N3b3JkIGZvciB0aGUgbmV3IGFjY291bnQiKQotICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItUiIsICItLXJvb3QiLCBtZXRhdmFyPSJDSFJPT1RfRElSIiwgaGVscD0iZGlyZWN0b3J5IHRvIGNocm9vdCBpbnRvIikKLSAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXIiLCAiLS1zeXN0ZW0iLCBoZWxwPSJjcmVhdGUgYSBzeXN0ZW0gYWNjb3VudCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCi0gICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1zIiwgIi0tc2hlbGwiLCBtZXRhdmFyPSJTSEVMTCIsIGhlbHA9ImxvZ2luIHNoZWxsIG9mIHRoZSBuZXcgYWNjb3VudCIpCi0gICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi11IiwgIi0tdWlkIiwgbWV0YXZhcj0iVUlEIiwgaGVscD0idXNlciBJRCBvZiB0aGUgbmV3IGFjY291bnQiKQotICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItVSIsICItLXVzZXItZ3JvdXAiLCBoZWxwPSJjcmVhdGUgYSBncm91cCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHVzZXIiLCBhY3Rpb249InN0b3JlX2NvbnN0IiwgY29uc3Q9VHJ1ZSkKLSAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiTE9HSU4iLCBoZWxwPSJMb2dpbiBuYW1lIG9mIHRoZSBuZXcgdXNlciIpCi0KLSAgICAgICAgIyBSZXR1cm4gYSBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMgYmFzZWQgb24gZWl0aGVyIHRoZSBkZWZhdWx0Ci0gICAgICAgICMgZmlsZXMvcGFzc3dkIG9yIHRoZSBjb250ZW50cyBvZiBVU0VSQUREX1VJRF9UQUJMRVMKLSAgICAgICAgIyBwYXRocyBhcmUgcmVzb2x2ZWQgdmlhIEJCUEFUSAotICAgICAgICBkZWYgZ2V0X3Bhc3N3ZF9saXN0KGQpOgotICAgICAgICAgICAgc3RyID0gIiIKLSAgICAgICAgICAgIGJicGF0aCA9IGQuZ2V0VmFyKCdCQlBBVEgnKQotICAgICAgICAgICAgcGFzc3dkX3RhYmxlcyA9IGQuZ2V0VmFyKCdVU0VSQUREX1VJRF9UQUJMRVMnKQotICAgICAgICAgICAgaWYgbm90IHBhc3N3ZF90YWJsZXM6Ci0gICAgICAgICAgICAgICAgcGFzc3dkX3RhYmxlcyA9ICdmaWxlcy9wYXNzd2QnCi0gICAgICAgICAgICBmb3IgY29uZl9maWxlIGluIHBhc3N3ZF90YWJsZXMuc3BsaXQoKToKLSAgICAgICAgICAgICAgICBzdHIgKz0gIiAlcyIgJSBiYi51dGlscy53aGljaChiYnBhdGgsIGNvbmZfZmlsZSkKLSAgICAgICAgICAgIHJldHVybiBzdHIKKyAgICAgICAgcGFyc2VyID0gb2UudXNlcmFkZC5idWlsZF91c2VyYWRkX3BhcnNlcigpCiAKICAgICAgICAgbmV3cGFyYW1zID0gW10KICAgICAgICAgdXNlcnMgPSBOb25lCi0gICAgICAgIGZvciBwYXJhbSBpbiByZS5zcGxpdCgnJydbIFx0XSo7WyBcdF0qKD89KD86W14nIl18J1teJ10qJ3wiW14iXSoiKSokKScnJywgcGFyYW1zKToKLSAgICAgICAgICAgIHBhcmFtID0gcGFyYW0uc3RyaXAoKQotICAgICAgICAgICAgaWYgbm90IHBhcmFtOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGZvciBwYXJhbSBpbiBvZS51c2VyYWRkLnNwbGl0X2NvbW1hbmRzKHBhcmFtcyk6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdWFhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MocmUuc3BsaXQoJycnWyBcdF0rKD89KD86W14nIl18J1teJ10qJ3wiW14iXSoiKSokKScnJywgcGFyYW0pKQorICAgICAgICAgICAgICAgIHVhYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKG9lLnVzZXJhZGQuc3BsaXRfYXJncyhwYXJhbSkpCiAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIiVzOiBVbmFibGUgdG8gcGFyc2UgYXJndW1lbnRzIGZvciBVU0VSQUREX1BBUkFNXyVzOiAnJXMnIiAlIChkLmdldFZhcignUE4nKSwgcGtnLCBwYXJhbSkpCiAKQEAgLTEyMSwxMCArOTEsMTIgQEAKICAgICAgICAgICAgICMgYWxsIG5ldyB1c2VycyBnZXQgdGhlIGRlZmF1bHQgKCcqJyB3aGljaCBwcmV2ZW50cyBsb2dpbikgdW50aWwgdGhlIHVzZXIgaXMKICAgICAgICAgICAgICMgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyZWQgYnkgdGhlIHN5c3RlbSBhZG1pbi4KICAgICAgICAgICAgIGlmIG5vdCB1c2VyczoKLSAgICAgICAgICAgICAgICB1c2VycyA9IG1lcmdlX2ZpbGVzKGdldF9wYXNzd2RfbGlzdChkKSwgNykKKyAgICAgICAgICAgICAgICBmaWxlcywgdGFibGVfdmFyLCB0YWJsZV92YWx1ZSA9IGdldF90YWJsZV9saXN0KGQsICdVU0VSQUREX1VJRF9UQUJMRVMnLCAnZmlsZXMvcGFzc3dkJykKKyAgICAgICAgICAgICAgICB1c2VycyA9IG1lcmdlX2ZpbGVzKGZpbGVzLCA3KQogCisgICAgICAgICAgICB0eXBlID0gJ3N5c3RlbSB1c2VyJyBpZiB1YWFyZ3Muc3lzdGVtIGVsc2UgJ25vcm1hbCB1c2VyJwogICAgICAgICAgICAgaWYgdWFhcmdzLkxPR0lOIG5vdCBpbiB1c2VyczoKLSAgICAgICAgICAgICAgICBoYW5kbGVfbWlzc2luZ19pZCh1YWFyZ3MuTE9HSU4sICd1c2VyJywgcGtnKQorICAgICAgICAgICAgICAgIGhhbmRsZV9taXNzaW5nX2lkKHVhYXJncy5MT0dJTiwgdHlwZSwgcGtnLCBmaWxlcywgdGFibGVfdmFyLCB0YWJsZV92YWx1ZSkKICAgICAgICAgICAgICAgICBuZXdwYXJhbXMuYXBwZW5kKHBhcmFtKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKQEAgLTE4Miw3ICsxNTQsNyBAQAogCiAgICAgICAgICAgICAjIFNob3VsZCBiZSBhbiBlcnJvciBpZiBhIHNwZWNpZmljIG9wdGlvbiBpcyBzZXQuLi4KICAgICAgICAgICAgIGlmIG5vdCB1YWFyZ3MudWlkIG9yIG5vdCB1YWFyZ3MudWlkLmlzZGlnaXQoKSBvciBub3QgdWFhcmdzLmdpZDoKLSAgICAgICAgICAgICAgICAgaGFuZGxlX21pc3NpbmdfaWQodWFhcmdzLkxPR0lOLCAndXNlcicsIHBrZykKKyAgICAgICAgICAgICAgICAgaGFuZGxlX21pc3NpbmdfaWQodWFhcmdzLkxPR0lOLCB0eXBlLCBwa2csIGZpbGVzLCB0YWJsZV92YXIsIHRhYmxlX3ZhbHVlKQogCiAgICAgICAgICAgICAjIFJlY29uc3RydWN0IHRoZSBhcmdzLi4uCiAgICAgICAgICAgICBuZXdwYXJhbSAgPSBbJycsICcgLS1kZWZhdWx0cyddW3VhYXJncy5kZWZhdWx0c10KQEAgLTIxNyw0MCArMTg5LDE0IEBACiAKICAgICAjIFdlIHBhcnNlIGFuZCByZXdyaXRlIHRoZSBncm91cGFkZCBjb21wb25lbnRzCiAgICAgZGVmIHJld3JpdGVfZ3JvdXBhZGQocGFyYW1zLCBpc19wa2cpOgotICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29tZXMgZnJvbSAtLWhlbHAgb24gZ3JvdXBhZGQgZnJvbSBzaGFkb3cKLSAgICAgICAgcGFyc2VyID0gbXlBcmd1bWVudFBhcnNlcihwcm9nPSdncm91cGFkZCcpCi0gICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1mIiwgIi0tZm9yY2UiLCBoZWxwPSJleGl0IHN1Y2Nlc3NmdWxseSBpZiB0aGUgZ3JvdXAgYWxyZWFkeSBleGlzdHMsIGFuZCBjYW5jZWwgLWcgaWYgdGhlIEdJRCBpcyBhbHJlYWR5IHVzZWQiLCBhY3Rpb249InN0b3JlX3RydWUiKQotICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItZyIsICItLWdpZCIsIG1ldGF2YXI9IkdJRCIsIGhlbHA9InVzZSBHSUQgZm9yIHRoZSBuZXcgZ3JvdXAiKQotICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItSyIsICItLWtleSIsIG1ldGF2YXI9IktFWT1WQUxVRSIsIGhlbHA9Im92ZXJyaWRlIC9ldGMvbG9naW4uZGVmcyBkZWZhdWx0cyIpCi0gICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1vIiwgIi0tbm9uLXVuaXF1ZSIsIGhlbHA9ImFsbG93IHRvIGNyZWF0ZSBncm91cHMgd2l0aCBkdXBsaWNhdGUgKG5vbi11bmlxdWUpIEdJRCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCi0gICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1wIiwgIi0tcGFzc3dvcmQiLCBtZXRhdmFyPSJQQVNTV09SRCIsIGhlbHA9InVzZSB0aGlzIGVuY3J5cHRlZCBwYXNzd29yZCBmb3IgdGhlIG5ldyBncm91cCIpCi0gICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1QIiwgIi0tY2xlYXItcGFzc3dvcmQiLCBtZXRhdmFyPSJDTEVBUl9QQVNTV09SRCIsIGhlbHA9InVzZSB0aGlzIGNsZWFyIHBhc3N3b3JkIGZvciB0aGUgbmV3IGdyb3VwIikKLSAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLVIiLCAiLS1yb290IiwgbWV0YXZhcj0iQ0hST09UX0RJUiIsIGhlbHA9ImRpcmVjdG9yeSB0byBjaHJvb3QgaW50byIpCi0gICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1yIiwgIi0tc3lzdGVtIiwgaGVscD0iY3JlYXRlIGEgc3lzdGVtIGFjY291bnQiLCBhY3Rpb249InN0b3JlX3RydWUiKQotICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCJHUk9VUCIsIGhlbHA9Ikdyb3VwIG5hbWUgb2YgdGhlIG5ldyBncm91cCIpCi0KLSAgICAgICAgIyBSZXR1cm4gYSBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMgYmFzZWQgb24gZWl0aGVyIHRoZSBkZWZhdWx0Ci0gICAgICAgICMgZmlsZXMvZ3JvdXAgb3IgdGhlIGNvbnRlbnRzIG9mIFVTRVJBRERfR0lEX1RBQkxFUwotICAgICAgICAjIHBhdGhzIGFyZSByZXNvbHZlZCB2aWEgQkJQQVRICi0gICAgICAgIGRlZiBnZXRfZ3JvdXBfbGlzdChkKToKLSAgICAgICAgICAgIHN0ciA9ICIiCi0gICAgICAgICAgICBiYnBhdGggPSBkLmdldFZhcignQkJQQVRIJykKLSAgICAgICAgICAgIGdyb3VwX3RhYmxlcyA9IGQuZ2V0VmFyKCdVU0VSQUREX0dJRF9UQUJMRVMnKQotICAgICAgICAgICAgaWYgbm90IGdyb3VwX3RhYmxlczoKLSAgICAgICAgICAgICAgICBncm91cF90YWJsZXMgPSAnZmlsZXMvZ3JvdXAnCi0gICAgICAgICAgICBmb3IgY29uZl9maWxlIGluIGdyb3VwX3RhYmxlcy5zcGxpdCgpOgotICAgICAgICAgICAgICAgIHN0ciArPSAiICVzIiAlIGJiLnV0aWxzLndoaWNoKGJicGF0aCwgY29uZl9maWxlKQotICAgICAgICAgICAgcmV0dXJuIHN0cgorICAgICAgICBwYXJzZXIgPSBvZS51c2VyYWRkLmJ1aWxkX2dyb3VwYWRkX3BhcnNlcigpCiAKICAgICAgICAgbmV3cGFyYW1zID0gW10KICAgICAgICAgZ3JvdXBzID0gTm9uZQotICAgICAgICBmb3IgcGFyYW0gaW4gcmUuc3BsaXQoJycnWyBcdF0qO1sgXHRdKig/PSg/OlteJyJdfCdbXiddKid8IlteIl0qIikqJCknJycsIHBhcmFtcyk6Ci0gICAgICAgICAgICBwYXJhbSA9IHBhcmFtLnN0cmlwKCkKLSAgICAgICAgICAgIGlmIG5vdCBwYXJhbToKLSAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmb3IgcGFyYW0gaW4gb2UudXNlcmFkZC5zcGxpdF9jb21tYW5kcyhwYXJhbXMpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICMgSWYgd2UncmUgcHJvY2Vzc2luZyBtdWx0aXBsZSBsaW5lcywgd2UgY291bGQgaGF2ZSBsZWZ0IG92ZXIgdmFsdWVzIGhlcmUuLi4KLSAgICAgICAgICAgICAgICBnYWFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhyZS5zcGxpdCgnJydbIFx0XSsoPz0oPzpbXiciXXwnW14nXSonfCJbXiJdKiIpKiQpJycnLCBwYXJhbSkpCisgICAgICAgICAgICAgICAgZ2FhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Mob2UudXNlcmFkZC5zcGxpdF9hcmdzKHBhcmFtKSkKICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiJXM6IFVuYWJsZSB0byBwYXJzZSBhcmd1bWVudHMgZm9yIEdST1VQQUREX1BBUkFNXyVzOiAnJXMnIiAlIChkLmdldFZhcignUE4nKSwgcGtnLCBwYXJhbSkpCiAKQEAgLTI2NCwxMCArMjEwLDEyIEBACiAgICAgICAgICAgICAjIE5vdGU6IHNpbWlsYXIgdG8gdGhlIHBhc3N3ZCBmaWxlLCB0aGUgJ3Bhc3N3b3JkJyBmaWxlZCBpcyBpZ25vcmVkCiAgICAgICAgICAgICAjIE5vdGU6IGdyb3VwX21lbWJlcnMgaXMgaWdub3JlZCwgZ3JvdXAgbWVtYmVycyBtdXN0IGJlIGNvbmZpZ3VyZWQgd2l0aCB0aGUgR1JPVVBNRU1TX1BBUkFNCiAgICAgICAgICAgICBpZiBub3QgZ3JvdXBzOgotICAgICAgICAgICAgICAgIGdyb3VwcyA9IG1lcmdlX2ZpbGVzKGdldF9ncm91cF9saXN0KGQpLCA0KQorICAgICAgICAgICAgICAgIGZpbGVzLCB0YWJsZV92YXIsIHRhYmxlX3ZhbHVlID0gZ2V0X3RhYmxlX2xpc3QoZCwgJ1VTRVJBRERfR0lEX1RBQkxFUycsICdmaWxlcy9ncm91cCcpCisgICAgICAgICAgICAgICAgZ3JvdXBzID0gbWVyZ2VfZmlsZXMoZmlsZXMsIDQpCiAKKyAgICAgICAgICAgIHR5cGUgPSAnc3lzdGVtIGdyb3VwJyBpZiBnYWFyZ3Muc3lzdGVtIGVsc2UgJ25vcm1hbCBncm91cCcKICAgICAgICAgICAgIGlmIGdhYXJncy5HUk9VUCBub3QgaW4gZ3JvdXBzOgotICAgICAgICAgICAgICAgIGhhbmRsZV9taXNzaW5nX2lkKGdhYXJncy5HUk9VUCwgJ2dyb3VwJywgcGtnKQorICAgICAgICAgICAgICAgIGhhbmRsZV9taXNzaW5nX2lkKGdhYXJncy5HUk9VUCwgdHlwZSwgcGtnLCBmaWxlcywgdGFibGVfdmFyLCB0YWJsZV92YWx1ZSkKICAgICAgICAgICAgICAgICBuZXdwYXJhbXMuYXBwZW5kKHBhcmFtKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKQEAgLTI3OSw3ICsyMjcsNyBAQAogICAgICAgICAgICAgICAgIGdhYXJncy5naWQgPSBmaWVsZFsyXQogCiAgICAgICAgICAgICBpZiBub3QgZ2FhcmdzLmdpZCBvciBub3QgZ2FhcmdzLmdpZC5pc2RpZ2l0KCk6Ci0gICAgICAgICAgICAgICAgaGFuZGxlX21pc3NpbmdfaWQoZ2FhcmdzLkdST1VQLCAnZ3JvdXAnLCBwa2cpCisgICAgICAgICAgICAgICAgaGFuZGxlX21pc3NpbmdfaWQoZ2FhcmdzLkdST1VQLCB0eXBlLCBwa2csIGZpbGVzLCB0YWJsZV92YXIsIHRhYmxlX3ZhbHVlKQogCiAgICAgICAgICAgICAjIFJlY29uc3RydWN0IHRoZSBhcmdzLi4uCiAgICAgICAgICAgICBuZXdwYXJhbSAgPSBbJycsICcgLS1mb3JjZSddW2dhYXJncy5mb3JjZV0KQEAgLTMzNSwxMSArMjgzLDcgQEAKIAogICAgICNiYi53YXJuKCJCZWZvcmU6ICAnRVhUUkFfVVNFUlNfUEFSQU1TJyAtICclcyciICUgKGQuZ2V0VmFyKCdFWFRSQV9VU0VSU19QQVJBTVMnKSkpCiAgICAgbmV3X2V4dHJhdXNlcnMgPSBbXQotICAgIGZvciBjbWQgaW4gcmUuc3BsaXQoJycnWyBcdF0qO1sgXHRdKig/PSg/OlteJyJdfCdbXiddKid8IlteIl0qIikqJCknJycsIGV4dHJhdXNlcnMpOgotICAgICAgICBjbWQgPSBjbWQuc3RyaXAoKQotICAgICAgICBpZiBub3QgY21kOgotICAgICAgICAgICAgY29udGludWUKLQorICAgIGZvciBjbWQgaW4gb2UudXNlcmFkZC5zcGxpdF9jb21tYW5kcyhleHRyYXVzZXJzKToKICAgICAgICAgaWYgcmUubWF0Y2goJycndXNlcmFkZCAoLiopJycnLCBjbWQpOgogICAgICAgICAgICAgdXNlcmFkZF9wYXJhbSA9IHJlLm1hdGNoKCcnJ3VzZXJhZGQgKC4qKScnJywgY21kKS5ncm91cCgxKQogICAgICAgICAgICAgdXNlcmFkZF9wYXJhbSA9IHJld3JpdGVfdXNlcmFkZCh1c2VyYWRkX3BhcmFtLCBGYWxzZSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXNlcmFkZC5iYmNsYXNzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91c2VyYWRkLmJiY2xhc3MKaW5kZXggMGY1NTFiNS4uMTI0YmVjZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91c2VyYWRkLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91c2VyYWRkLmJiY2xhc3MKQEAgLTExOCw2ICsxMTgsNyBAQAogCSMgdXNlcmFkZC9ncm91cGFkZCB0b29scyBhcmUgdW5hdmFpbGFibGUuIElmIHRoZXJlIGlzIG5vIGRlcGVuZGVuY3ksIHdlIGFzc3VtZSB3ZSBkb24ndCB3YW50IHRvCiAJIyBjcmVhdGUgdXNlcnMgaW4gdGhlIHN5c3Jvb3QKIAlpZiAhIGNvbW1hbmQgLXYgdXNlcmFkZDsgdGhlbgorCQliYndhcm4gImNvbW1hbmQgdXNlcmFkZCBub3QgZm91bmQhIgogCQlleGl0IDAKIAlmaQogCkBAIC0xMzksMjIgKzE0MCwxOSBAQAogRVhUUkFfU1RBR0lOR19GSVhNRVMgKz0gIkNPTVBPTkVOVFNfRElSIFBTRVVET19MT0NBTFNUQVRFRElSIExPR0ZJRk8iCiAKIHB5dGhvbiB1c2VyYWRkX3N5c3Jvb3Rfc3N0YXRlICgpIHsKKyAgICBzY3JpcHRmaWxlID0gTm9uZQogICAgIHRhc2sgPSBkLmdldFZhcigiQkJfQ1VSUkVOVFRBU0siKQogICAgIGlmIHRhc2sgPT0gInBhY2thZ2Vfc2V0c2NlbmUiOgogICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoInVzZXJhZGRfc3lzcm9vdCIsIGQpCiAgICAgZWxpZiB0YXNrID09ICJwcmVwYXJlX3JlY2lwZV9zeXNyb290IjoKICAgICAgICAgIyBVc2VkIHRvIHVwZGF0ZSB0aGlzIHJlY2lwZSdzIG93biBzeXNyb290IHNvIHRoZSB1c2VyL2dyb3VwcyBhcmUgYXZhaWxhYmxlIHRvIGRvX2luc3RhbGwKICAgICAgICAgc2NyaXB0ZmlsZSA9IGQuZXhwYW5kKCIke1JFQ0lQRV9TWVNST09UfSR7YmluZGlyfS9wb3N0aW5zdC11c2VyYWRkLSR7UE59IikKLSAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShzY3JpcHRmaWxlKSkKLSAgICAgICAgd2l0aCBvcGVuKHNjcmlwdGZpbGUsICd3JykgYXMgc2NyaXB0OgotICAgICAgICAgICAgc2NyaXB0LndyaXRlKCIjIS9iaW4vc2hcbiIpCi0gICAgICAgICAgICBiYi5kYXRhLmVtaXRfZnVuYygidXNlcmFkZF9zeXNyb290Iiwgc2NyaXB0LCBkKQotICAgICAgICAgICAgc2NyaXB0LndyaXRlKCJ1c2VyYWRkX3N5c3Jvb3RcbiIpCi0gICAgICAgIG9zLmNobW9kKHNjcmlwdGZpbGUsIDBvNzU1KQogICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoInVzZXJhZGRfc3lzcm9vdCIsIGQpCiAgICAgZWxpZiB0YXNrID09ICJwb3B1bGF0ZV9zeXNyb290IjoKICAgICAgICAgIyBVc2VkIHdoZW4gaW5zdGFsbGVkIGluIGRlcGVuZGVudCB0YXNrIHN5c3Jvb3RzCiAgICAgICAgIHNjcmlwdGZpbGUgPSBkLmV4cGFuZCgiJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJ9L3Bvc3RpbnN0LXVzZXJhZGQtJHtQTn0iKQorCisgICAgaWYgc2NyaXB0ZmlsZToKICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShzY3JpcHRmaWxlKSkKICAgICAgICAgd2l0aCBvcGVuKHNjcmlwdGZpbGUsICd3JykgYXMgc2NyaXB0OgogICAgICAgICAgICAgc2NyaXB0LndyaXRlKCIjIS9iaW4vc2hcbiIpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3V0aWxzLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3V0aWxzLmJiY2xhc3MKaW5kZXggOTY0NjNhYi4uOGUwN2VhYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91dGlscy5iYmNsYXNzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXRpbHMuYmJjbGFzcwpAQCAtMzIwLDcgKzMyMCw3IEBACiAKIAogZGVmIGNoZWNrX2FwcF9leGlzdHMoYXBwLCBkKToKLSAgICBhcHAgPSBkLmV4cGFuZChhcHApLnN0cmlwKCkKKyAgICBhcHAgPSBkLmV4cGFuZChhcHApLnNwbGl0KClbMF0uc3RyaXAoKQogICAgIHBhdGggPSBkLmdldFZhcignUEFUSCcpCiAgICAgcmV0dXJuIGJvb2woYmIudXRpbHMud2hpY2gocGF0aCwgYXBwKSkKIApAQCAtMzY5LDYgKzM2OSw3IEBACiAgICAgbG9jYWxkYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgb3ZlcnJpZGVzKQogICAgIGxvY2FsZGF0YS5zZXRWYXIoIk1MUFJFRklYIiwgdmFyaWFudCArICItIikKICAgICByZXR1cm4gbG9jYWxkYXRhCitnZXRfbXVsdGlsaWJfZGF0YXN0b3JlW3ZhcmRlcHNleGNsdWRlXSA9ICJPVkVSUklERVMiCiAKIGRlZiBhbGxfbXVsdGlsaWJfdHVuZV92YWx1ZXMoZCwgdmFyLCB1bmlxdWUgPSBUcnVlLCBuZWVkX3NwbGl0ID0gVHJ1ZSwgZGVsaW0gPSAnICcpOgogICAgICIiIlJldHVybiBhIHN0cmluZyBvZiBhbGwgJHt2YXJ9IGluIGFsbCBtdWx0aWxpYiB0dW5lIGNvbmZpZ3VyYXRpb24iIiIKQEAgLTQzMSw2ICs0MzIsNyBAQAogICAgICAgICB2YWx1ZXNbdl0uYXBwZW5kKGxvY2FsZGF0YS5nZXRWYXIodikpCiAgICAgICAgIHZhbHVlc1snbWwnXS5hcHBlbmQoaXRlbSkKICAgICByZXR1cm4gdmFsdWVzCithbGxfbXVsdGlsaWJfdHVuZV9saXN0W3ZhcmRlcHNleGNsdWRlXSA9ICJPVkVSUklERVMiCiAKICMgSWYgdGhlIHVzZXIgaGFzbid0IHNldCB1cCB0aGVpciBuYW1lL2VtYWlsLCBzZXQgc29tZSBkZWZhdWx0cwogY2hlY2tfZ2l0X2NvbmZpZygpIHsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvd2FmLmJiY2xhc3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3dhZi5iYmNsYXNzCmluZGV4IGM0Njk4ZTkuLmFjYmRhMjcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvd2FmLmJiY2xhc3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy93YWYuYmJjbGFzcwpAQCAtMjUsOCArMjUsMjMgQEAKIAogICAgIHJldHVybiAiIgogCitweXRob24gd2FmX3ByZWNvbmZpZ3VyZSgpIHsKKyAgICBmcm9tIGRpc3R1dGlscy52ZXJzaW9uIGltcG9ydCBTdHJpY3RWZXJzaW9uCisgICAgc3Jjc3ViZGlyID0gZC5nZXRWYXIoJ1MnKQorICAgIHdhZmJpbiA9IG9zLnBhdGguam9pbihzcmNzdWJkaXIsICd3YWYnKQorICAgIHN0YXR1cywgcmVzdWx0ID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KHdhZmJpbiArICIgLS12ZXJzaW9uIikKKyAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgYmIud2FybigiVW5hYmxlIHRvIGV4ZWN1dGUgd2FmIC0tdmVyc2lvbiwgZXhpdCBjb2RlICVkLiBBc3N1bWluZyB3YWYgdmVyc2lvbiB3aXRob3V0IGJpbmRpci9saWJkaXIgc3VwcG9ydC4iICUgc3RhdHVzKQorICAgICAgICByZXR1cm4KKyAgICB2ZXJzaW9uID0gcmVzdWx0LnNwbGl0KClbMV0KKyAgICBpZiBTdHJpY3RWZXJzaW9uKHZlcnNpb24pID49IFN0cmljdFZlcnNpb24oIjEuOC43Iik6CisgICAgICAgIGQuc2V0VmFyKCJXQUZfRVhUUkFfQ09ORiIsICItLWJpbmRpcj0ke2JpbmRpcn0gLS1saWJkaXI9JHtsaWJkaXJ9IikKK30KKworZG9fY29uZmlndXJlW3ByZWZ1bmNzXSArPSAid2FmX3ByZWNvbmZpZ3VyZSIKKwogd2FmX2RvX2NvbmZpZ3VyZSgpIHsKLQkke1N9L3dhZiBjb25maWd1cmUgLS1wcmVmaXg9JHtwcmVmaXh9ICR7RVhUUkFfT0VDT05GfQorCSR7U30vd2FmIGNvbmZpZ3VyZSAtLXByZWZpeD0ke3ByZWZpeH0gJHtXQUZfRVhUUkFfQ09ORn0gJHtFWFRSQV9PRUNPTkZ9CiB9CiAKIHdhZl9kb19jb21waWxlKCkgIHsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvYml0YmFrZS5jb25mIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9iaXRiYWtlLmNvbmYKaW5kZXggMmRhYzNhMS4uOTY5NjI3MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9iaXRiYWtlLmNvbmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9iaXRiYWtlLmNvbmYKQEAgLTE3LDExICsxNywxMyBAQAogZXhwb3J0IHByZWZpeCA9ICIvdXNyIgogZXhwb3J0IGV4ZWNfcHJlZml4ID0gIiR7cHJlZml4fSIKIAorcm9vdF9wcmVmaXggPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd1c3JtZXJnZScsICcke2V4ZWNfcHJlZml4fScsICcke2Jhc2VfcHJlZml4fScsIGQpfSIKKwogIyBCYXNlIHBhdGhzCi1leHBvcnQgYmFzZV9iaW5kaXIgPSAiJHtiYXNlX3ByZWZpeH0vYmluIgotZXhwb3J0IGJhc2Vfc2JpbmRpciA9ICIke2Jhc2VfcHJlZml4fS9zYmluIgotZXhwb3J0IGJhc2VfbGliZGlyID0gIiR7YmFzZV9wcmVmaXh9LyR7YmFzZWxpYn0iCi1leHBvcnQgbm9uYXJjaF9iYXNlX2xpYmRpciA9ICIke2Jhc2VfcHJlZml4fS9saWIiCitleHBvcnQgYmFzZV9iaW5kaXIgPSAiJHtyb290X3ByZWZpeH0vYmluIgorZXhwb3J0IGJhc2Vfc2JpbmRpciA9ICIke3Jvb3RfcHJlZml4fS9zYmluIgorZXhwb3J0IGJhc2VfbGliZGlyID0gIiR7cm9vdF9wcmVmaXh9LyR7YmFzZWxpYn0iCitleHBvcnQgbm9uYXJjaF9iYXNlX2xpYmRpciA9ICIke3Jvb3RfcHJlZml4fS9saWIiCiAKICMgQXJjaGl0ZWN0dXJlIGluZGVwZW5kZW50IHBhdGhzCiBleHBvcnQgc3lzY29uZmRpciA9ICIke2Jhc2VfcHJlZml4fS9ldGMiCkBAIC04Myw2ICs4NSwxMCBAQAogIyBSb290IGhvbWUgZGlyZWN0b3J5CiBST09UX0hPTUUgPz89ICIvaG9tZS9yb290IgogCisjIElmIHNldCB0byBib29sZWFuIHRydWUgKCd5ZXMnLCAneScsICd0cnVlJywgJ3QnLCAnMScpLCAvdmFyL2xvZyBsaW5rcyB0byAvdmFyL3ZvbGF0aWxlL2xvZy4KKyMgSWYgc2V0IHRvIGJvb2xlYW4gZmFsc2UgKCdubycsICduJywgJ2ZhbHNlJywgJ2YnLCAnMCcpLCAvdmFyL2xvZyBpcyBvbiBwZXJzaXN0ZW50IHN0b3JhZ2UuCitWT0xBVElMRV9MT0dfRElSID89ICJ5ZXMiCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBBcmNoaXRlY3R1cmUtZGVwZW5kZW50IGJ1aWxkIHZhcmlhYmxlcy4KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtMTcwLDYgKzE3Niw3IEBACiAgICAgY2hycGF0aC1uYXRpdmUgXAogICAgIGZpbGUtbmF0aXZlIFwKICAgICBmaW5kdXRpbHMtbmF0aXZlIFwKKyAgICBnYXdrLW5hdGl2ZSBcCiAgICAgZ2l0LW5hdGl2ZSBcCiAgICAgZ3JlcC1uYXRpdmUgXAogICAgIGRpZmZzdGF0LW5hdGl2ZSBcCkBAIC0zMjQsNiArMzMxLDE0IEBACiAjIFRoaXMgZGVmYXVsdCB3YXMgb25seSB1c2VkIGZvciBjaGVja2luZwogRklMRVNFWFRSQVBBVEhTID89ICJfX2RlZmF1bHQ6IgogCisjIFRoZSBkZWZhdWx0IGxpc3Qgb2YgZnMtcGVybXMgZmlsZXMgdG8gcHJvY2Vzcy4gIElmIHRoZSBsaXN0IGlzIGVtcHR5IG9ubHkKKyMgdGhlIGJ1aWx0aW4gZGVmaW5pdGlvbnMgd2lsbCBiZSB1c2VkLiAgQnVpbHRpbiBkZWZpbml0aW9ucyBpbmNsdWRlZDoKKyMgIGJhc2VfcHJlZml4LCBwcmVmaXgsIGV4ZWNfcHJlZml4LCBiYXNlX2JpbmRpciwgYmFzZV9zYmluZGlyLCBiYXNlX2xpYmRpciwKKyMgIGRhdGFkaXIsIHN5c2NvbmZkaXIsIHNlcnZpY2VkaXIsIHNoYXJlZHN0YXRlZGlyLCBsb2NhbHN0YXRlZGlyLCBpbmZvZGlyLAorIyAgbWFuZGlyLCBkb2NkaXIsIGJpbmRpciwgc2JpbmRpciwgbGliZXhlY2RpciwgbGliZGlyLCBpbmNsdWRlZGlyIGFuZAorIyAgb2xkaW5jbHVkZWRpcgorRklMRVNZU1RFTV9QRVJNU19UQUJMRVMgPz0gIiR7QCdmaWxlcy9mcy1wZXJtcy50eHQnIGlmIG9lLnR5cGVzLmJvb2xlYW4oZC5nZXRWYXIoJ1ZPTEFUSUxFX0xPR19ESVInKSkgZWxzZSAnZmlsZXMvZnMtcGVybXMtcGVyc2lzdGVudC1sb2cudHh0J30iCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBHZW5lcmFsIHdvcmsgYW5kIG91dHB1dCBkaXJlY3RvcmllcyBmb3IgdGhlIGJ1aWxkIHN5c3RlbS4KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtNDYxLDcgKzQ3Niw3IEBACiAgICAgWyBhciBhcyBhd2sgYmFzZW5hbWUgYmFzaCBiemlwMiBjYXQgY2hncnAgY2htb2QgY2hvd24gY2hycGF0aCBjbXAgY3AgY3BpbyBcCiAgICAgY3BwIGN1dCBkYXRlIGRkIGRpZmYgZGlmZnN0YXQgZGlybmFtZSBkdSBlY2hvIGVncmVwIGVudiBleHBhbmQgZXhwciBmYWxzZSBcCiAgICAgZmdyZXAgZmlsZSBmaW5kIGZsb2NrIGcrKyBnYXdrIGdjYyBnZXRjb25mIGdldG9wdCBnaXQgZ3JlcCBndW56aXAgZ3ppcCBcCi0gICAgaGVhZCBob3N0bmFtZSBpbnN0YWxsIGxkIGxkZCBsbiBscyBtYWtlIG1ha2VpbmZvIG1kNXN1bSBta2RpciBta25vZCBcCisgICAgaGVhZCBob3N0bmFtZSBpZCBpbnN0YWxsIGxkIGxkZCBsbiBscyBtYWtlIG1ha2VpbmZvIG1kNXN1bSBta2RpciBta25vZCBcCiAgICAgbWt0ZW1wIG12IG5tIG9iamNvcHkgb2JqZHVtcCBvZCBwYXRjaCBwZXJsIHBvZDJtYW4gcHIgcHJpbnRmIHB3ZCBweXRob24gcHl0aG9uMiBcCiAgICAgcHl0aG9uMi43IHB5dGhvbjMgcmFubGliIHJlYWRlbGYgcmVhZGxpbmsgcm0gcm1kaXIgcnBjZ2VuIHNlZCBzaCBzaGEyNTZzdW0gXAogICAgIHNsZWVwIHNvcnQgc3BsaXQgc3RhdCBzdHJpbmdzIHN0cmlwIHRhaWwgdGFyIHRlZSB0ZXN0IHRvdWNoIHRyIHRydWUgdW5hbWUgXApAQCAtNDY5LDEwICs0ODQsMTAgQEAKICIKIAogIyBUb29scyBuZWVkZWQgdG8gcnVuIHRlc3RpbWFnZSBydW50aW1lIGltYWdlIHRlc3RpbmcKLUhPU1RUT09MUyArPSAiaXAgcGluZyBwcyBzY3Agc3NoIHN0dHkiCitIT1NUVE9PTFMgKz0gIiR7QFsnJywgJ2lwIHBpbmcgcHMgc2NwIHNzaCBzdHR5J11bYmIuZGF0YS5pbmhlcml0c19jbGFzcygndGVzdGltYWdlJywgZCldfSIKIAogIyBMaW5rIHRvIHRoZXNlIGlmIHByZXNlbnQKLUhPU1RUT09MU19OT05GQVRBTCArPSAiYXdzIGNjYWNoZSBnY2MtYXIgZ3BnIGxkLmJmZCBsZC5nb2xkIG5jIHNmdHAgc29jYXQgc3VkbyIKK0hPU1RUT09MU19OT05GQVRBTCArPSAiYXdzIGNjYWNoZSBnY2MtYXIgZ3BnIGxkLmJmZCBsZC5nb2xkIG5jIHNmdHAgc29jYXQgc3NoIHN1ZG8iCiAKICMgVGVtcG9yYXJ5IGFkZCBmZXcgbW9yZSBkZXRlY3RlZCBpbiBiaXRiYWtlIHdvcmxkCiBIT1NUVE9PTFNfTk9ORkFUQUwgKz0gImpvaW4gbmwgc2l6ZSB5ZXMgemNhdCIKQEAgLTQ4MSw5ICs0OTYsNiBAQAogSE9TVFRPT0xTX05PTkZBVEFMICs9ICJienIiCiAKIENDQUNIRSA/Pz0gIiIKLSMgRGlzYWJsZSBjY2FjaGUgZXhwbGljaXRseSBpZiBDQ0FDSEUgaXMgbnVsbCBzaW5jZSBnY2MgbWF5IGJlIGEgc3ltbGluawotIyBvZiBjY2FjaGUgc29tZSBkaXN0cmlidXRpb25zIChlLmcuLCBGZWRvcmEgMTcpLgotZXhwb3J0IENDQUNIRV9ESVNBQkxFID8/PSAiJHtAWzAsMV1bZC5nZXRWYXIoJ0NDQUNIRScpID09ICcnXX0iCiAjIGNjYWNoZSA8IDMuMS4xMCB3aWxsIGNyZWF0ZSBDQ0FDSEVfRElSIG9uIHN0YXJ0dXAgZXZlbiBpZiBkaXNhYmxlZCwgYW5kCiAjIGF1dG9nZW4gc2V0cyBIT01FPS9kZXYvbnVsbCBzbyBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgYnVpbGRzIGNhbiBmYWlsLgogIyBFeHBsaWNpdGx5IGV4cG9ydCBDQ0FDSEVfRElSIHVudGlsIHdlIGNhbiBhc3N1bWUgY2NhY2hlID4zLjEuMTAgb24gdGhlIGhvc3QuCkBAIC01NDYsNiArNTU4LDcgQEAKIGV4cG9ydCBUQVJHRVRfQ0ZMQUdTID0gIiR7VEFSR0VUX0NQUEZMQUdTfSAke1NFTEVDVEVEX09QVElNSVpBVElPTn0iCiAKIGV4cG9ydCBCVUlMRF9DWFhGTEFHUyA9ICIke0JVSUxEX0NGTEFHU30iCitCVUlMRFNES19DWFhGTEFHUyA9ICIke0JVSUxEU0RLX0NGTEFHU30iCiBleHBvcnQgQ1hYRkxBR1MgPSAiJHtUQVJHRVRfQ1hYRkxBR1N9IgogZXhwb3J0IFRBUkdFVF9DWFhGTEFHUyA9ICIke1RBUkdFVF9DRkxBR1N9IgogCkBAIC03MTQsMTEgKzcyNyw5IEBACiAjIFRoaXMgd29ya3MgZm9yICBmdW5jdGlvbnMgYXMgd2VsbCwgdGhleSBhcmUgcmVhbGx5IGp1c3QgZW52aXJvbm1lbnQgdmFyaWFibGVzLgogIyBEZWZhdWx0IE9WRVJSSURFUyB0byBtYWtlIGNvbXBpbGF0aW9uIGZhaWwgZmFzdCBpbiBjYXNlIG9mIGJ1aWxkIHN5c3RlbSBtaXNjb25maWd1cmF0aW9uLgogT1ZFUlJJREVTID0gIiR7VEFSR0VUX09TfToke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9OmJ1aWxkLSR7QlVJTERfT1N9OnBuLSR7UE59OiR7TUFDSElORU9WRVJSSURFU306JHtESVNUUk9PVkVSUklERVN9OiR7Q0xBU1NPVkVSUklERX06Zm9yY2V2YXJpYWJsZSIKLU9WRVJSSURFU1t2YXJkZXBzZXhjbHVkZV0gPSAiTUFDSElORU9WRVJSSURFUyIKIENMQVNTT1ZFUlJJREUgPz0gImNsYXNzLXRhcmdldCIKIERJU1RST09WRVJSSURFUyA/PSAiJHtAZC5nZXRWYXIoJ0RJU1RSTycpIG9yICcnfSIKIE1BQ0hJTkVPVkVSUklERVMgPz0gIiR7TUFDSElORX0iCi1NQUNISU5FT1ZFUlJJREVTW3ZhcmRlcHNleGNsdWRlXSA9ICJNQUNISU5FIgogCiBGSUxFU09WRVJSSURFUyA9ICIke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9OiR7TUFDSElORU9WRVJSSURFU306JHtESVNUUk9PVkVSUklERVN9IgogCkBAIC03MzEsMTAgKzc0Miw4IEBACiBpbmNsdWRlIGNvbmYvYXV0by5jb25mCiBpbmNsdWRlIGNvbmYvbG9jYWwuY29uZgogcmVxdWlyZSBjb25mL211bHRpY29uZmlnLyR7QkJfQ1VSUkVOVF9NQ30uY29uZgotaW5jbHVkZSBjb25mL2J1aWxkLyR7QlVJTERfU1lTfS5jb25mCiBpbmNsdWRlIGNvbmYvbWFjaGluZS8ke01BQ0hJTkV9LmNvbmYKIGluY2x1ZGUgY29uZi9tYWNoaW5lLXNkay8ke1NES01BQ0hJTkV9LmNvbmYKLWluY2x1ZGUgY29uZi90YXJnZXQvJHtUQVJHRVRfU1lTfS5jb25mCiBpbmNsdWRlIGNvbmYvZGlzdHJvLyR7RElTVFJPfS5jb25mCiBpbmNsdWRlIGNvbmYvZGlzdHJvL2RlZmF1bHRzZXR1cC5jb25mCiBpbmNsdWRlIGNvbmYvZG9jdW1lbnRhdGlvbi5jb25mCkBAIC03OTgsNyArODA3LDcgQEAKIAogIyBOYXRpdmUgZGlzdHJvIGZlYXR1cmVzICh3aWxsIGFsd2F5cyBiZSB1c2VkIGZvciAtbmF0aXZlLCBldmVuIGlmIHRoZXkKICMgYXJlIG5vdCBlbmFibGVkIGZvciB0YXJnZXQpCi1ESVNUUk9fRkVBVFVSRVNfTkFUSVZFID89ICJ4MTEiCitESVNUUk9fRkVBVFVSRVNfTkFUSVZFID89ICJ4MTEgaXB2NiIKIERJU1RST19GRUFUVVJFU19OQVRJVkVTREsgPz0gIngxMSBsaWJjLWNoYXJzZXRzIGxpYmMtbG9jYWxlcyBsaWJjLWxvY2FsZS1jb2RlIgogCiAjIE5vcm1hbGx5IHRhcmdldCBkaXN0cm8gZmVhdHVyZXMgd2lsbCBub3QgYmUgYXBwbGllZCB0byBuYXRpdmUgYnVpbGRzOgpAQCAtODQ4LDcgKzg1Nyw3IEBACiAgICAgU1NUQVRFX0RJUiBUSElTRElSIEZJTEVTRVhUUkFQQVRIUyBGSUxFX0RJUk5BTUUgSE9NRSBMT0dOQU1FIFNIRUxMIFRFUk0gXAogICAgIFVTRVIgRklMRVNQQVRIIFNUQUdJTkdfRElSX0hPU1QgU1RBR0lOR19ESVJfVEFSR0VUIENPUkVCQVNFIFBSU0VSVl9IT1NUIFwKICAgICBQUlNFUlZfRFVNUERJUiBQUlNFUlZfRFVNUEZJTEUgUFJTRVJWX0xPQ0tET1dOIFBBUkFMTEVMX01BS0UgXAotICAgIENDQUNIRV9ESVIgRVhURVJOQUxfVE9PTENIQUlOIENDQUNIRSBDQ0FDSEVfRElTQUJMRSBMSUNFTlNFX1BBVEggU0RLUEtHU1VGRklYIFwKKyAgICBDQ0FDSEVfRElSIEVYVEVSTkFMX1RPT0xDSEFJTiBDQ0FDSEUgQ0NBQ0hFX05PSEFTSERJUiBMSUNFTlNFX1BBVEggU0RLUEtHU1VGRklYIFwKICAgICBXQVJOX1FBIEVSUk9SX1FBIFdPUktESVIgU1RBTVBDTEVBTiBQS0dEQVRBX0RJUiBCVUlMRF9BUkNIIFNTVEFURV9QS0dBUkNIIFwKICAgICBCQl9XT1JLRVJDT05URVhUIEJCX0xJTUlURURERVBTIGV4dGVuZF9yZWNpcGVfc3lzcm9vdCBERVBMT1lfRElSIgogQkJfSEFTSENPTkZJR19XSElURUxJU1QgPz0gIiR7QkJfSEFTSEJBU0VfV0hJVEVMSVNUfSBEQVRFIFRJTUUgU1NIX0FHRU5UX1BJRCBcCkBAIC04NTYsNyArODY1LDcgQEAKICAgICBQQVJBTExFTF9NQUtFIEJCX05VTUJFUl9USFJFQURTIEJCX09SSUdFTlYgQkJfSU5WQUxJRENPTkYgQkJJTkNMVURFRCBcCiAgICAgR0lUX1BST1hZX0NPTU1BTkQgQUxMX1BST1hZIGFsbF9wcm94eSBOT19QUk9YWSBub19wcm94eSBGVFBfUFJPWFkgZnRwX3Byb3h5IFwKICAgICBIVFRQX1BST1hZIGh0dHBfcHJveHkgSFRUUFNfUFJPWFkgaHR0cHNfcHJveHkgU09DS1M1X1VTRVIgU09DS1M1X1BBU1NXRCBcCi0gICAgQkJfU0VUU0NFTkVfRU5GT1JDRSIKKyAgICBCQl9TRVRTQ0VORV9FTkZPUkNFIEJCX0NNRExJTkUgQkJfU0VSVkVSX1RJTUVPVVQiCiBCQl9TSUdOQVRVUkVfRVhDTFVERV9GTEFHUyA/PSAiZG9jIGRlcHMgZGVwZW5kcyBcCiAgICAgbG9ja2ZpbGVzIHR5cGUgdmFyZGVwc2V4Y2x1ZGUgdmFyZGVwcyB2YXJkZXB2YWx1ZSB2YXJkZXB2YWx1ZWV4Y2x1ZGUgXAogICAgIGZpbGUtY2hlY2tzdW1zIHB5dGhvbiBmdW5jIHRhc2sgZXhwb3J0IHVuZXhwb3J0IG5vZXhlYyBub3N0YW1wIGRpcnMgY2xlYW5kaXJzIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvY29uZi1ub3Rlcy50eHQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2NvbmYtbm90ZXMudHh0CmluZGV4IDJmMjkzMmIuLmYxYTRmNGQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvY29uZi1ub3Rlcy50eHQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9jb25mLW5vdGVzLnR4dApAQCAtMSwzICsxLDggQEAKKworIyMjIFNoZWxsIGVudmlyb25tZW50IHNldCB1cCBmb3IgYnVpbGRzLiAjIyMKKworWW91IGNhbiBub3cgcnVuICdiaXRiYWtlIDx0YXJnZXQ+JworCiBDb21tb24gdGFyZ2V0cyBhcmU6CiAgICAgY29yZS1pbWFnZS1taW5pbWFsCiAgICAgY29yZS1pbWFnZS1zYXRvCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2FzLW5lZWRlZC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2FzLW5lZWRlZC5pbmMKaW5kZXggMTE0ZDM3Ny4uNmE4YWQ5ZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9hcy1uZWVkZWQuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvYXMtbmVlZGVkLmluYwpAQCAtOCw3ICs4LDYgQEAKIEFTTkVFREVEX3BuLWljdSA9ICIiCiBBU05FRURFRF9wbi1wY2l1dGlscyA9ICIiCiBBU05FRURFRF9wbi1wdXp6bGVzID0gIiIKLUFTTkVFREVEX3BuLXB1bHNlYXVkaW8gPSAiIgogQVNORUVERURfcG4tcnBtID0gIiIKIAogVEFSR0VUX0xERkxBR1MgKz0gIiR7QVNORUVERUR9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXByb3ZpZGVycy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtcHJvdmlkZXJzLmluYwppbmRleCBlY2U0ZDhiLi4yYjc2YzNjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtcHJvdmlkZXJzLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtcHJvdmlkZXJzLmluYwpAQCAtNDYsNyArNDYsNiBAQAogUFJFRkVSUkVEX1BST1ZJREVSX2NvbnNvbGUtdG9vbHMgPz0gImtiZCIKIFBSRUZFUlJFRF9QUk9WSURFUl9nemlwLW5hdGl2ZSA/PSAicGlnei1uYXRpdmUiCiBQUkVGRVJSRURfUFJPVklERVJfdWRldiA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCdzeXN0ZW1kJywnZXVkZXYnLGQpfSIKLVBSRUZFUlJFRF9SUFJPVklERVJfbGliYXNvdW5kLW1vZHVsZS1ibHVleiA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ2JsdWV0b290aCBibHVlejUnLCdibHVlejUnLCdibHVlejQnLGQpfSIKIFBSRUZFUlJFRF9SUFJPVklERVJfYmx1ZXotaGNpZHVtcCA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ2JsdWV0b290aCBibHVlejUnLCdibHVlejUnLCdibHVlei1oY2lkdW1wJyxkKX0iCiAjIEFsdGVybmF0aXZlIGlzIGx0cC1kZHQgaW4gbWV0YS1vZTogbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2x0cC1kZHQvbHRwLWRkdF8wLjAuNC5iYgogUFJFRkVSUkVEX1BST1ZJREVSX2x0cCA/PSAibHRwIgpAQCAtNTQsMyArNTMsNyBAQAogUFJFRkVSUkVEX1BST1ZJREVSX29wZW5zc2wgPz0gIm9wZW5zc2wiCiBQUkVGRVJSRURfUFJPVklERVJfb3BlbnNzbC1uYXRpdmUgPz0gIm9wZW5zc2wtbmF0aXZlIgogUFJFRkVSUkVEX1BST1ZJREVSX25hdGl2ZXNkay1vcGVuc3NsID89ICJuYXRpdmVzZGstb3BlbnNzbCIKK1BSRUZFUlJFRF9QUk9WSURFUl9wa2djb25maWcgPz0gInBrZ2NvbmZpZyIKK1BSRUZFUlJFRF9QUk9WSURFUl9uYXRpdmVzZGstcGtnY29uZmlnID89ICJuYXRpdmVzZGstcGtnY29uZmlnIgorUFJFRkVSUkVEX1BST1ZJREVSX3BrZ2NvbmZpZy1uYXRpdmUgPz0gInBrZ2NvbmZpZy1uYXRpdmUiCitQUkVGRVJSRURfUlBST1ZJREVSX2luaXRkLWZ1bmN0aW9ucyA/PSAiaW5pdHNjcmlwdHMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtdmVyc2lvbnMuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXZlcnNpb25zLmluYwppbmRleCBkOTc2NTA4Li44NjgwNzM4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtdmVyc2lvbnMuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC12ZXJzaW9ucy5pbmMKQEAgLTIsNiArMiw2IEBACiAjIERlZmF1bHQgcHJlZmVycmVkIHZlcnNpb25zCiAjCiAKLSMgRm9yY2UgdGhlIG9sZGVyIHZlcnNpb24gb2YgbGliZXJhdGlvbi1mb250cyB1bnRpbCB3ZSBmaXggdGhlIGZvbnRmb3JnZSBpc3N1ZQotUFJFRkVSUkVEX1ZFUlNJT05fbGliZXJhdGlvbi1mb250cyA/PSAiMS4wNCIKLQorUFJFRkVSUkVEX1ZFUlNJT05fb3BlbnNzbCA9ICIxLjAuJSIKK1BSRUZFUlJFRF9WRVJTSU9OX29wZW5zc2wtbmF0aXZlID0gIjEuMC4lIgorUFJFRkVSUkVEX1ZFUlNJT05fbmF0aXZlc2RrLW9wZW5zc2wgPSAiMS4wLiUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2Rpc3Ryb19hbGlhcy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2Rpc3Ryb19hbGlhcy5pbmMKaW5kZXggNDg5ZjVlYS4uZjdjOGI0YSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kaXN0cm9fYWxpYXMuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGlzdHJvX2FsaWFzLmluYwpAQCAtMTUsNyArMTUsNiBAQAogRElTVFJPX1BOX0FMSUFTX3BuLWF0ayA9ICJGZWRvcmE9YXRrIE9wZW5TdVNFPWF0ayIKIERJU1RST19QTl9BTElBU19wbi1hdmFoaS11aSA9ICJVYnVudHU9YXZhaGktZGlzY292ZXIgRGViaWFuPWF2YWhpLWRpc2NvdmVyIgogRElTVFJPX1BOX0FMSUFTX3BuLWJhYmVsdHJhY2UgPSAiT1NQRFQiCi1ESVNUUk9fUE5fQUxJQVNfcG4tYmR3Z2MgPSAiT1NQRFQiCiBESVNUUk9fUE5fQUxJQVNfcG4tYmlncmVxc3Byb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWJpZ3JlcXNwcm90byIKIERJU1RST19QTl9BTElBU19wbi1iamFtID0gIk9wZW5TdVNFPWJvb3N0LWphbSBEZWJpbmE9YmphbSIKIERJU1RST19QTl9BTElBU19wbi1ibGt0b29sID0gIkRlYmlhbj1ibGt0b29sIE1hbmRyaXZhPWJsa3Rvb2wiCkBAIC02Myw2ICs2Miw3IEBACiBESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS10ZXN0bWFzdGVyLWluaXRyYW1mcyA9ICJPRS1Db3JlIgogRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2Utd2VzdG9uID0gIk9FLUNvcmUiCiBESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS14MTEgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jcmVhdGVyZXBvLWMgPSAiRmVkb3JhPWNyZWF0ZXJlcG9fYyBDbGVhcj1jcmVhdGVyZXBvX2MiCiBESVNUUk9fUE5fQUxJQVNfcG4tY3Jvc3MtbG9jYWxlZGVmID0gIk9TUERUIgogRElTVFJPX1BOX0FMSUFTX3BuLWNyeXB0b2Rldi1saW51eCA9ICJPRS1Db3JlIgogRElTVFJPX1BOX0FMSUFTX3BuLWNyeXB0b2Rldi1tb2R1bGUgPSAiT0UtQ29yZSIKQEAgLTEyOSw2ICsxMjksNyBAQAogRElTVFJPX1BOX0FMSUFTX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgPSAiRGViaWFuPWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgVWJ1bnR1PWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UiCiBESVNUUk9fUE5fQUxJQVNfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZCA9ICJEZWJpYW49Z3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZCBVYnVudHU9Z3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkIgogRElTVFJPX1BOX0FMSUFTX3BuLWdzdHJlYW1lcjEuMC1ydHNwLXNlcnZlciA9ICJVYnVudHU9Z3N0cmVhbWVyMC4xMC1ydHNwIEZlZG9yYT1nc3RyZWFtZXItcnRzcCIKK0RJU1RST19QTl9BTElBU19wbi1nc3RyZWFtZXIxLjAtdmFhcGkgPSAiRmVkb3JhPWdzdHJlYW1lcjEtdmFhcGkgRGViaWFuPWdzdHJlYW1lci12YWFwaSBDbGVhcj1nc3RyZWFtZXItdmFhcGkiCiBESVNUUk9fUE5fQUxJQVNfcG4tZ3RrKyA9ICJNZWVnbz1ndGsyIEZlZG9yYT1ndGsyIE9wZW5TdVNFPWd0azIgVWJ1bnR1PWd0aysyLjAgTWFuZHJpdmE9Z3RrKzIuMCBEZWJpYW49Z3RrKzIuMCIKIERJU1RST19QTl9BTElBU19wbi1ndGsrMyA9ICJVYnVudHU9Z3RrKzMuMCBEZWJpYW49Z3RrKzMuMCBGZWRvcmE9Z3RrMyIKIERJU1RST19QTl9BTElBU19wbi1ndGstZG9jID0gIkZlZG9yYT1ndGstZG9jIFVidW50dT1ndGstZG9jIgpAQCAtMTUzLDcgKzE1NCw2IEBACiBESVNUUk9fUE5fQUxJQVNfcG4taXByb3V0ZTIgPSAiT1NQRFQiCiBESVNUUk9fUE5fQUxJQVNfcG4tanBlZyA9ICJPcGVuU3VTRT1saWJqcGVnIFVidW50dT1saWJqcGVnNjIiCiBESVNUUk9fUE5fQUxJQVNfcG4ta2Jwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1rYnByb3RvIFVidW50dT14MTFwcm90by1rYi1kZXYgRGViaWFuPXgxMXByb3RvLWtiLWRldiIKLURJU1RST19QTl9BTElBU19wbi1rY29uZmlnLWZyb250ZW5kcyA9ICJPU1BEVCIKIERJU1RST19QTl9BTElBU19wbi1rZXJuZWwtZGV2c3JjID0gIkRlYmlhbj1saW51eC1iYXNlIFVidW50dT1saW51eCIKIERJU1RST19QTl9BTElBU19wbi1rZXJuZWxzaGFyayA9ICJNYW5kcml2YT1rZXJuZWxzaGFyayBVYnVudHU9a2VybmVsc2hhcmsiCiBESVNUUk9fUE5fQUxJQVNfcG4ta2Vybi10b29scy1uYXRpdmUgPSAiV2luZHJpdmVyIgpAQCAtMTk1LDYgKzE5NSw3IEBACiBESVNUUk9fUE5fQUxJQVNfcG4tbGlib3dsID0gIkRlYmlhbj1vd2wgT3BlbmVkSGFuZCIKIERJU1RST19QTl9BTElBU19wbi1saWJwYW0gPSAiTWVlZ289cGFtIEZlZG9yYT1wYW0gT3BlblN1U0U9cGFtIFVidW50dT1wYW0gTWFuZHJpdmE9cGFtIERlYmlhbj1wYW0iCiBESVNUUk9fUE5fQUxJQVNfcG4tbGlicGNyZSA9ICJNYW5kcml2YT1saWJwY3JlMCBGZWRvcmE9cGNyZSIKK0RJU1RST19QTl9BTElBU19wbi1saWJwY3JlMiA9ICJGZWRvcmE9cGNyZTIgRGViaWFuPXBjcmUyIENsZWFyPXBjcmUyIgogRElTVFJPX1BOX0FMSUFTX3BuLWxpYnBuZzEyID0gIkRlYmlhbj1saWJwbmcxMi0wIEZlZG9yYT1saWJwbmciCiBESVNUUk9fUE5fQUxJQVNfcG4tbGlicG9kLXBsYWluZXItcGVybCA9ICJPU1BEVCIKIERJU1RST19QTl9BTElBU19wbi1saWJzYW1wbGVyYXRlMCA9ICJNZWVnbz1saWJzYW1wbGVyYXRlIEZlZG9yYT1saWJzYW1wbGVyYXRlIE9wZW5TdVNFPWxpYnNhbXBsZXJhdGUgVWJ1bnR1PWxpYnNhbXBsZXJhdGUgTWFuZHJpdmE9bGlic2FtcGxlcmF0ZSBEZWJpYW49bGlic2FtcGxlcmF0ZSIKQEAgLTIwOSw2ICsyMTAsNyBAQAogRElTVFJPX1BOX0FMSUFTX3BuLWxpYnVzYi1jb21wYXQgPSAiT1NQRFQiCiBESVNUUk9fUE5fQUxJQVNfcG4tbGlieDExID0gIkRlYmlhbj1saWJ4MTEtNiBGZWRvcmE9bGliWDExIFVidW50dT1saWJ4MTEtNiBPcGVuU3VTRT14b3JnLXgxMS1saWJYMTEiCiBESVNUUk9fUE5fQUxJQVNfcG4tbGlieGNhbGlicmF0ZSA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcveG9yZy9saWIvbGliWENhbGlicmF0ZS8iCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieGZvbnQyID0gIkZlZG9yYT1saWJYZm9udDIgQ2xlYXI9bGliWGZvbnQyIgogRElTVFJPX1BOX0FMSUFTX3BuLWxpYnhmdCA9ICJNYW5kcml2YT1saWJ4ZnQgRGViaWFuPWxpYnhmdDIgVWJ1bnR1PWxpYnhmdDIiCiBESVNUUk9fUE5fQUxJQVNfcG4tbGlieGkgPSAiVWJ1bnR1PWxpYnhpIEZlZG9yYT1saWJYaSIKIERJU1RST19QTl9BTElBU19wbi1saWJ4a2Jjb21tb24gPSAiRmVkb3JhPWxpYnhrYmNvbW1vbiBEZWJpYW49bGlieGtiY29tbW9uIgpAQCAtMzI1LDE0ICszMjcsMTYgQEAKIERJU1RST19QTl9BTElBU19wbi1wdXp6bGVzID0gIkRlYmlhbj1zZ3QtcHV6emxlcyBGZWRvcmE9cHV6emxlcyIKIERJU1RST19QTl9BTElBU19wbi1weXRob24zID0gIkZlZG9yYT1weXRob24zIERlYmlhbj1weXRob24zLjIiCiBESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uMy1kaXN0cmlidXRlID0gIkRlYmlhbj1weXRob24zLXNldHVwdG9vbHMgRmVkb3JhPXB5dGhvbjMtc2V0dXB0b29scyIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24zLWluaXBhcnNlID0gIkZlZG9yYT1weXRob24taW5pcGFyc2UgRGViaWFuPXB5dGhvbi1pbmlwYXJzZSIKIERJU1RST19QTl9BTElBU19wbi1weXRob24zLXBpcCA9ICJPcGVuU3VTRT1weXRob24zLXBpcCBEZWJpYW49cHl0aG9uMy1waXAiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uMy1weWN1cmwgPSAiRmVkb3JhPXB5dGhvbi1weWN1cmwgRGViaWFuPXB5Y3VybCIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24zLXB5Z3BnbWUgPSAiRmVkb3JhPXB5dGhvbi1weWdwZ21lIERlYmlhbj1weWdwZ21lIgogRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbjMtc2V0dXB0b29scyA9ICJPcGVuU3VTRT1weXRob24zLXNldHVwdG9vbHMgRGViaWFuPXB5dGhvbjMtc2V0dXB0b29scyIKIERJU1RST19QTl9BTElBU19wbi1weXRob24tZGJ1cyA9ICJVYnVudHU9cHl0aG9uLWRidXMgRGViaWFuPXB5dGhvbi1kYnVzIE1hbmRyaXZhPXB5dGhvbi1kYnVzIgogRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1kaXN0cmlidXRlID0gIk9wZW5zdXNlPXB5dGhvbi1zZXR1cHRvb2xzIEZlZG9yYT1weXRob24tc2V0dXB0b29scyIKIERJU1RST19QTl9BTElBU19wbi1weXRob24tZ2l0ID0gIkRlYmlhbj1weXRob24tZ2l0IEZlZG9yYT1HaXRQeXRob24iCiBESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLW1ha28gPSAiRmVkb3JhPXB5dGhvbi1tYWtvIE9wZW5zdXNlPXB5dGhvbi1NYWtvIgogRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1weWNhaXJvID0gIk1lZWdvPXB5Y2Fpcm8gRmVkb3JhPXB5Y2Fpcm8gVWJ1bnR1PXB5Y2Fpcm8gRGViaWFuPXB5Y2Fpcm8iCi1ESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLXB5Y3VybCA9ICJEZWJpYW49cHl0aG9uLXB5Y3VybCBVYnVudHU9cHl0aG9uLXB5Y3VybCIKIERJU1RST19QTl9BTElBU19wbi1weXRob24tcHlnb2JqZWN0ID0gIk1lZWdvPXB5Z29iamVjdDIgRmVkb3JhPXB5Z29iamVjdDIgVWJ1bnR1PXB5Z29iamVjdCBEZWJpYW49cHlnb2JqZWN0IgogRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1zY29ucyA9ICJGZWRvcmE9c2NvbnMgT3BlblN1U0U9c2NvbnMgVWJ1bnR1PXNjb25zIE1hbmRyaXZhPXNjb25zIERlYmlhbj1zY29ucyIKIERJU1RST19QTl9BTElBU19wbi1weXRob24tc2V0dXB0b29scyA9ICJNYW5kcml2YT1weXRob24tc2V0dXAgT3BlblN1U0U9cHl0aG9uLXNldHVwLWdpdCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvbWFpbnRhaW5lcnMuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9tYWludGFpbmVycy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg3ODliMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvbWFpbnRhaW5lcnMuaW5jCkBAIC0wLDAgKzEsODI3IEBACisjIFlvY3RvIFByb2plY3QgLyBPcGVuRW1iZWRkZWQtQ29yZSAoT0UtQ29yZSkgTWFpbnRhaW5lcnMgRmlsZQorIworIyBUaGlzIGZpbGUgY29udGFpbnMgYSBsaXN0IG9mIHJlY2lwZSBtYWludGFpbmVycy4KKyMKKyMgUGxlYXNlIHN1Ym1pdCBhbnkgcGF0Y2hlcyBhZ2FpbnN0IHJlY2lwZXMgaW4gbWV0YSB0byB0aGUgCisjIE9FLUNvcmUgbWFpbCBsaXN0IChvcGVuZW1iZWRkZWQtY29yZUBsaXN0cy5vcGVuZW1iZWRkZWQub3JnKQorIyBGb3IgcmVjaXBlcyBpbiBtZXRhLXlvY3RvIHBsZWFzZSB1c2UgdGhlIFBva3kgbGlzdCAocG9reUB5b2N0b3Byb2plY3Qub3JnKQorIworIyBJZiB5b3UgaGF2ZSBwcm9ibGVtcyB3aXRoIG9yIHF1ZXN0aW9ucyBhYm91dCBhIHBhcnRpY3VsYXIgcmVjaXBlLCBmZWVsCisjIGZyZWUgdG8gY29udGFjdCB0aGUgbWFpbnRhaW5lciBkaXJlY3RseSAoY2M6aW5nIHRoZSBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3QKKyMgcHV0cyBpdCBpbiB0aGUgYXJjaGl2ZSBhbmQgaGVscHMgb3RoZXIgcGVvcGxlIHdobyBtaWdodCBoYXZlIHRoZSBzYW1lCisjIHF1ZXN0aW9ucyBpbiB0aGUgZnV0dXJlKSwgYnV0IHBsZWFzZSB0cnkgdG8gZG8gdGhlIGZvbGxvd2luZyBmaXJzdDoKKyMKKyMgIC0gbG9vayBpbiB0aGUgWW9jdG8gUHJvamVjdCBCdWd6aWxsYQorIyAgICAoaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvKSB0byBzZWUgaWYgYSBwcm9ibGVtIGhhcworIyAgICBhbHJlYWR5IGJlZW4gcmVwb3J0ZWQKKyMKKyMgLSBsb29rIHRocm91Z2ggcmVjZW50IGVudHJpZXMgb2YgdGhlIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdCBhcmNoaXZlcworIyAgIChodHRwOi8vbGlzdHMubGludXh0b2dvLm9yZy9waXBlcm1haWwvb3BlbmVtYmVkZGVkLWNvcmUgb3IKKyMgICAgaHR0cHM6Ly9saXN0cy55b2N0b3Byb2plY3Qub3JnL3BpcGVybWFpbC9wb2t5LykgdG8gc2VlIGlmIG90aGVyCisjICAgcGVvcGxlIGhhdmUgcnVuIGludG8gc2ltaWxhciBwcm9ibGVtcyBvciBoYWQgc2ltaWxhciBxdWVzdGlvbnMKKyMgICBhbnN3ZXJlZC4KKyMKKyMgVGhlIGZvcm1hdCBpcyBhcyBhIGJpdGJha2UgdmFyaWFibGUgb3ZlcnJpZGUgZm9yIGVhY2ggcmVjaXBlCisjCisjCVJFQ0lQRV9NQUlOVEFJTkVSX3BuLTxyZWNpcGUgbmFtZT4gPSAiRnVsbCBOYW1lIDxhZGRyZXNzQGRvbWFpbj4iCisjCisjIFBsZWFzZSBrZWVwIHRoaXMgbGlzdCBpbiBhbHBoYWJldGljYWwgb3JkZXIuCisjCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hY2wgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFjcGljYSA9ICJGYXRoaSBCb3VkcmEgPGZhdGhpLmJvdWRyYUBsaW5hcm8ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFjcGlkID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFjcGl0ZXN0cyA9ICJGYXRoaSBCb3VkcmEgPGZhdGhpLmJvdWRyYUBsaW5hcm8ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFkd2FpdGEtaWNvbi10aGVtZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFsc2EtbGliID0gIlRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hbHNhLXBsdWdpbnMgPSAiVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFsc2Etc3RhdGUgPSAiVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFsc2EtdG9vbHMgPSAiVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFsc2EtdXRpbHMgPSAiVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFsc2EtdXRpbHMtc2NyaXB0cyA9ICJUYW51IEthc2tpbmVuIDx0YW51a0Bpa2kuZmk+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXBtZCA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hcHIgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFwci11dGlsID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hcHQgPSAiQW7DrWJhbCBMaW3Ds24gPGxpbW9uLmFuaWJhbEBnbWFpbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXB0LW5hdGl2ZSA9ICJBbsOtYmFsIExpbcOzbiA8bGltb24uYW5pYmFsQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hcmdwLXN0YW5kYWxvbmUgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hc2NpaWRvYyA9ICJZaSBaaGFvIDx5aS56aGFvQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXNwZWxsID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hc3NpbXAgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hdCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXQtc3BpMi1hdGsgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hdC1zcGkyLWNvcmUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hdGsgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hdHRyID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hdXRvY29uZiA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hdXRvY29uZi1hcmNoaXZlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF1dG9nZW4tbmF0aXZlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF1dG9tYWtlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF2YWhpID0gIllpIFpoYW8gPHlpLnpoYW9Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hdmFoaS11aSA9ICJZaSBaaGFvIDx5aS56aGFvQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYmFiZWx0cmFjZSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJhc2UtZmlsZXMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iYXNlLXBhc3N3ZCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJhc2ggPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJhc2gtY29tcGxldGlvbiA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJjID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iZHdnYyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJlZWNyeXB0ID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJpZ3JlcXNwcm90byA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iaW5kID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJpbnV0aWxzID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYmludXRpbHMtY3Jvc3MgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iaW51dGlscy1jcm9zcy1jYW5hZGlhbiA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJpbnV0aWxzLWNyb3Nzc2RrID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYmlzb24gPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJqYW0tbmF0aXZlID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYmxrdG9vbCA9ICJZaSBaaGFvIDx5aS56aGFvQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYmxrdHJhY2UgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ibHVlejUgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYm1hcC10b29scyA9ICJFZCBCYXJ0b3NoIDxlZC5iYXJ0b3NoQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ib29zdCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJvb3RjaGFydDIgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ic2QtaGVhZGVycyA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJ0cmZzLXRvb2xzID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYnVpbGQtYXBwbGlhbmNlLWltYWdlID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYnVpbGQtY29tcGFyZSA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJ1aWxkLXN5c3Jvb3RzID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJ1aWxkZXIgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1idWlsZHRvb2xzLXRhcmJhbGwgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1idXN5Ym94ID0gIkFybWluIEt1c3RlciA8YWt1c3RlcjgwOEBnbWFpbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYnlhY2MgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJ6aXAyID0gIkRlbnlzIERteXRyaXllbmtvIDxkZW55c0B0aS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY2EtY2VydGlmaWNhdGVzID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY2Fpcm8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jYWxpYnJhdGVwcm90byA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jYW50YXJlbGwtZm9udHMgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jY2FjaGUgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY2RydG9vbHMtbmF0aXZlID0gIllpIFpoYW8gPHlpLnpoYW9Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jaGtjb25maWcgPSAiWWkgWmhhbyA8eWkuemhhb0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNoa2NvbmZpZy1hbHRlcm5hdGl2ZXMtbmF0aXZlID0gIllpIFpoYW8gPHlpLnpoYW9Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jaHJwYXRoID0gIllpIFpoYW8gPHlpLnpoYW9Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jbHV0dGVyLTEuMCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNsdXR0ZXItZ3N0LTMuMCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNsdXR0ZXItZ3RrLTEuMCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNtYWtlID0gIk90YXZpbyBTYWx2YWRvciA8b3RhdmlvLnNhbHZhZG9yQG9zc3lzdGVtcy5jb20uYnI+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY21ha2UtbmF0aXZlID0gIk90YXZpbyBTYWx2YWRvciA8b3RhdmlvLnNhbHZhZG9yQG9zc3lzdGVtcy5jb20uYnI+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29nbC0xLjAgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb21wb3NpdGVwcm90byA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb25ubWFuID0gIkNoYW5naHllb2sgQmFlIDxjaGFuZ2h5ZW9rLmJhZUBsZ2UuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvbm5tYW4tY29uZiA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb25ubWFuLWdub21lID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvbnNvbGUtdG9vbHMgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvbnNvbGVraXQgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmV1dGlscyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY3BpbyA9ICJEZW55cyBEbXl0cml5ZW5rbyA8ZGVueXNAdGkuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNyYWNrbGliID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNyZWF0ZXJlcG8tYyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNyb25pZSA9ICJMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNyb3NzLWxvY2FsZWRlZi1uYXRpdmUgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jcnlwdG9kZXYtbGludXggPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY3J5cHRvZGV2LW1vZHVsZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jcnlwdG9kZXYtdGVzdHMgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY3VwcyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY3VybCA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jdmUtY2hlY2stdG9vbCA9ICJMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWN3YXV0b21hY3JvcyA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kYW1hZ2Vwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRiID0gIk1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kYnVzID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kYnVzLWdsaWIgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRidXMtdGVzdCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGJ1cy13YWl0ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kZWJpYW51dGlscyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kZXBtb2R3cmFwcGVyLWNyb3NzID0gIk1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kZXNrdG9wLWZpbGUtdXRpbHMtbmF0aXZlID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGhjcCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGlmZnN0YXQgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRpZmZ1dGlscyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGlyZWN0ZmIgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRpcmVjdGZiLWV4YW1wbGVzID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kaXN0Y2MgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRpc3RjYy1jb25maWcgPSAiWWkgWmhhbyA8eWkuemhhb0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRtaWRlY29kZSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRteHByb3RvID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRuZiA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRvY2Jvb2steG1sLWR0ZDQgPSAiWWkgWmhhbyA8eWkuemhhb0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRvY2Jvb2steHNsLXN0eWxlc2hlZXRzID0gIllpIFpoYW8gPHlpLnpoYW9Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kb3Nmc3Rvb2xzID0gIllpIFpoYW8gPHlpLnpoYW9Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kcGtnID0gIkFuw61iYWwgTGltw7NuIDxsaW1vbi5hbmliYWxAZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRyaTJwcm90byA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kcmkzcHJvdG8gPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZHJvcGJlYXIgPSAiWWkgWmhhbyA8eWkuemhhb0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWR0YyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWUyZnNwcm9ncyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1lZCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWVlZS1hY3BpLXNjcmlwdHMgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1lZmlsaW51eCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWVnbGluZm8tZmIgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1lZ2xpbmZvLXgxMSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWVmaWxpbnV4ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZWxmdXRpbHMgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWVuY2hhbnQgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZW5jb2RpbmdzID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWVwaXBoYW55ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZXRodG9vbCA9ICJDaGFuZ2h5ZW9rIEJhZSA8Y2hhbmdoeWVvay5iYWVAbGdlLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ldWRldiA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1leHBhdCA9ICJZaSBaaGFvIDx5aS56aGFvQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZXhwZWN0ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZmZtcGVnID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZmlsZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1maW5kdXRpbHMgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWZpeGVzcHJvdG8gPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZmxhYyA9ICJUYW51IEthc2tpbmVuIDx0YW51a0Bpa2kuZmk+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZmxleCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZm9udC1hbGlhcyA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1mb250LXV0aWwgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZm9udGNvbmZpZyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWZvbnRzcHJvdG8gPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZm9vbWF0aWMtZmlsdGVycyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZm9ybWZhY3RvciA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1mcmVldHlwZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWZzdGVzdHMgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1mdHMgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nYXdrID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nY2MgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nY2MtY3Jvc3MgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nY2MtY3Jvc3MtY2FuYWRpYW4gPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nY2MtY3Jvc3MtaW5pdGlhbCA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdjYy1jcm9zc3NkayA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdjYy1jcm9zc3Nkay1pbml0aWFsID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2NjLXJ1bnRpbWUgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nY2Mtc2FuaXRpemVycyA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdjYy1zb3VyY2UgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nY2NtYWtlZGVwID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2NvbmYgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nY3IgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nZGIgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nZGItY3Jvc3MgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nZGItY3Jvc3MtY2FuYWRpYW4gPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nZGJtID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2RrLXBpeGJ1ZiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdldHRleHQgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2V0dGV4dC1taW5pbWFsLW5hdGl2ZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1naG9zdHNjcmlwdCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2l0ID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdsZXcgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbGliLTIuMCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdsaWItbmV0d29ya2luZyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdsaWJjID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2xpYmMtaW5pdGlhbCA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdsaWJjLWxvY2FsZSA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdsaWJjLW10cmFjZSA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdsaWJjLXNjcmlwdHMgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbHByb3RvID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdtcCA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdub21lLWNvbW1vbiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdub21lLWRlc2t0b3AtdGVzdGluZyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdub21lLWRlc2t0b3AzID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ25vbWUtZG9jLXV0aWxzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ25vbWUtdGhlbWVzLXN0YW5kYXJkID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ251LWNvbmZpZyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbnUtZWZpID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdudXBnID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbnV0bHMgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ28gPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nby1jcm9zcyA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdvLWRlcCA9ICJPdGF2aW8gU2FsdmFkb3IgPG90YXZpby5zYWx2YWRvckBvc3N5c3RlbXMuY29tLmJyPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdvLWhlbGxvd29ybGQgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nby1uYXRpdmUgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nb2JqZWN0LWludHJvc3BlY3Rpb24gPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ncGVyZiA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdwZ21lID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ncHRmZGlzayA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdyZXAgPSAiRGVueXMgRG15dHJpeWVua28gPGRlbnlzQHRpLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ncm9mZiA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3J1YiA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdydWItZWZpID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdzdC1wbGF5ZXIgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nc3RyZWFtZXIxLjAgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3N0cmVhbWVyMS4wLWxpYmF2ID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdzdHJlYW1lcjEuMC1vbXggPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZSA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHkgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3N0cmVhbWVyMS4wLXB5dGhvbiA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXIgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3N0cmVhbWVyMS4wLXZhYXBpID0gIldlaSBUZWUgTmcgPHdlaS50ZWUubmdAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd0aysgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ndGsrMyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd0ay1kb2MgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ndGstZW5naW5lcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd0ay1pY29uLXV0aWxzLW5hdGl2ZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd0ay1zYXRvLWVuZ2luZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd1aWxlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd1aWx0LW5hdGl2ZSA9ICJCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ndW1taWJvb3QgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nemlwID0gIkRlbnlzIERteXRyaXllbmtvIDxkZW55c0B0aS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taGFyZmJ1enogPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taGRwYXJtID0gIkRlbnlzIERteXRyaXllbmtvIDxkZW55c0B0aS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taGVscDJtYW4tbmF0aXZlID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1oaWNvbG9yLWljb24tdGhlbWUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ob3N0YXAtY29uZiA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ob3N0YXAtdXRpbHMgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taHdsYXRkZXRlY3QgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pMmMtdG9vbHMgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taWNlY2MtY3JlYXRlLWVudi1uYXRpdmUgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pY29uLW5hbWluZy11dGlscyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWljdSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWlmdXBkb3duID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWluaXQtaWZ1cGRvd24gPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taW5pdHJhbWZzLWJvb3QgPSAiT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW8uc2FsdmFkb3JAb3NzeXN0ZW1zLmNvbS5icj4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pbml0cmFtZnMtZnJhbWV3b3JrID0gIk90YXZpbyBTYWx2YWRvciA8b3RhdmlvLnNhbHZhZG9yQG9zc3lzdGVtcy5jb20uYnI+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taW5pdHJhbWZzLWxpdmUtYm9vdCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWluaXRyYW1mcy1saXZlLWluc3RhbGwgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLWVmaSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWluaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpLXRlc3RmcyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWluaXRyYW1mcy1saXZlLWluc3RhbGwtdGVzdGZzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taW5pdHNjcmlwdHMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pbnB1dHByb3RvID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWludGx0b29sID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taXByb3V0ZTIgPSAiQ2hhbmdoeWVvayBCYWUgPGNoYW5naHllb2suYmFlQGxnZS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taXB0YWJsZXMgPSAiQ2hhbmdoeWVvayBCYWUgPGNoYW5naHllb2suYmFlQGxnZS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taXB1dGlscyA9ICJDaGFuZ2h5ZW9rIEJhZSA8Y2hhbmdoeWVvay5iYWVAbGdlLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pcmRhLXV0aWxzID0gIkNoYW5naHllb2sgQmFlIDxjaGFuZ2h5ZW9rLmJhZUBsZ2UuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWlzby1jb2RlcyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWl3ID0gIkNoYW5naHllb2sgQmFlIDxjaGFuZ2h5ZW9rLmJhZUBsZ2UuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmpwZWctdHVyYm8gPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tanNvbi1jID0gIllpIFpoYW8gPHlpLnpoYW9Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1qc29uLWdsaWIgPSAiWWkgWmhhbyA8eWkuemhhb0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWtiZCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWticHJvdG8gPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4ta2NvbmZpZy1mcm9udGVuZHMgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1rZXJuLXRvb2xzLW5hdGl2ZSA9ICJCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1rZXJuZWxzaGFyayA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWtlcm5lbC1kZXZzcmMgPSAiQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4ta2V4ZWMtdG9vbHMgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4ta2V5bWFwcyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWttb2QgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWttb2QtbmF0aXZlID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1rbXNjdWJlID0gIkNhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sM2FmcGFkID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGFtZSA9ICJUYW51IEthc2tpbmVuIDx0YW51a0Bpa2kuZmk+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGF0ZW5jeXRvcCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxkY29uZmlnLW5hdGl2ZSA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxlc3MgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliYTUyID0gIlRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJhY3BpID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmFpbyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmFyY2hpdmUgPSAiT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW8uc2FsdmFkb3JAb3NzeXN0ZW1zLmNvbS5icj4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJhcnQtbGdwbCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmFzc3VhbiA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJhdG9taWMtb3BzID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmF2ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliYnNkID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmNhcCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJjYXAtbmcgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliY2dyb3VwID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliY2hlY2sgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliY2xhc3MtaXNhLXBlcmwgPSAiTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJjb21wcyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmNvbnZlcnQtYXNuMS1wZXJsID0gIkxlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliY3JvY28gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJkYWVtb24gPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJkbXggPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZG5mID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZHJtID0gIk90YXZpbyBTYWx2YWRvciA8b3RhdmlvLnNhbHZhZG9yQG9zc3lzdGVtcy5jb20uYnI+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZHVtcHZhbHVlLXBlcmwgPSAiTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJlbnYtcGVybCA9ICJMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmVwb3h5ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZXJhdGlvbi1mb250cyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmVycm9yLXBlcmwgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZXZkZXYgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJldmVudCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmV4aWYgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJmYWtla2V5ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZmZpID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZmlsZS1jaGVja3RyZWUtcGVybCA9ICJMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmZtID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZm0tZXh0cmEgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJmb250ZW5jID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmdjYyA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmdjYy1pbml0aWFsID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZ2NyeXB0ID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJnZm9ydHJhbiA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmdsYWRlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZ2x1ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZ3BnLWVycm9yID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJndWRldiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmkxOG4tY29sbGF0ZS1wZXJsID0gIkxlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliaWNhbCA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJpY2UgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliaWNvbnYgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJpZDN0YWcgPSAiVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmlkbiA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmlucHV0ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlianNvbiA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmtzYmEgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJtYXRjaGJveCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm1ubCA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm1wYyA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm5ld3QgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm5ld3QtcHl0aG9uID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJuZnNpZG1hcCA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJubCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm5vdGlmeSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm5zbDIgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJuc3MtbWRucyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm9nZyA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJvbXhpbCA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJvd2wgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJwYW0gPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlicGNhcCA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJwY2lhY2Nlc3MgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJwY3JlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnBjcmUyID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnBmbTQgPSAiTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJwbmcgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlicG5nMTIgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlicG9kLXBsYWluZXItcGVybCA9ICJMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnByb3h5ID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnB0aHJlYWQtc3R1YnMgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJyZXBvID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlicnN2ZyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnNhbXBsZXJhdGUwID0gIlRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJzZGwgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlic2RsMiA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJzZWNyZXQgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJzbSA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJzbmRmaWxlMSA9ICJUYW51IEthc2tpbmVuIDx0YW51a0Bpa2kuZmk+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlic29sdiA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJzb3VwLTIuNCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnRhc24xID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnRoZW9yYSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnRpbWVkYXRlLXBlcmwgPSAiTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ0aXJwYyA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ0b29sID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnRvb2wtY3Jvc3MgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidG9vbC1uYXRpdmUgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidW5pc3RyaW5nID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnVud2luZCA9ICJCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ1cmN1ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidXJpLXBlcmwgPSAiTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ1c2ItY29tcGF0ID0gIkxlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidXNiMSA9ICJMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnVzZXIgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidmEgPSAiV2VpIFRlZSBOZyA8d2VpLnRlZS5uZ0BpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidmEtdXRpbHMgPSAiV2VpIFRlZSBOZyA8d2VpLnRlZS5uZ0BpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidm9yYmlzID0gIlRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ3ZWJwID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieDExID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYngxMS1kaWV0ID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhhdSA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4Y2FsaWJyYXRlID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhjYiA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4Y29tcG9zaXRlID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhjdXJzb3IgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGRhbWFnZSA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4ZG1jcCA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4ZXh0ID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhmaXhlcyA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4Zm9udCA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4Zm9udDIgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGZ0ID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhpID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhpbmVyYW1hID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhrYmNvbW1vbiA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4a2JmaWxlID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhtbC1uYW1lc3BhY2VzdXBwb3J0LXBlcmwgPSAiTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4bWwtcGFyc2VyLXBlcmwgPSAiTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4bWwtcGVybCA9ICJMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhtbC1zYXgtYmFzZS1wZXJsID0gIkxlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieG1sLXNheC1wZXJsID0gIkxlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieG1sLXNpbXBsZS1wZXJsID0gIkxlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieG1sMiA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieG11ID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhwbSA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4cmFuZHIgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHJlbmRlciA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4cmVzID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhzY3Juc2F2ZXIgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHNldHRpbmdzLWNsaWVudCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhzaG1mZW5jZSA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4c2x0ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHQgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHRzdCA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4diA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4dm1jID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnh4Zjg2ZGdhID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnh4Zjg2bWlzYyA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4eGY4NnZtID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnlhbWwgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWdodHRwZCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpbnV4LWR1bW15ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGludXgtZmlybXdhcmUgPSAiT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW8uc2FsdmFkb3JAb3NzeXN0ZW1zLmNvbS5icj4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saW51eC1saWJjLWhlYWRlcnMgPSAiQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGludXgteW9jdG8gPSAiQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGludXgteW9jdG8tZGV2ID0gIkJydWNlIEFzaGZpZWxkIDxicnVjZS5hc2hmaWVsZEB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpbnV4LXlvY3RvLXJ0ID0gIkJydWNlIEFzaGZpZWxkIDxicnVjZS5hc2hmaWVsZEB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpbnV4LXlvY3RvLXRpbnkgPSAiQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGx2bSA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxvZ3JvdGF0ZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1scnpzeiA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sc2IgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxzYmluaXRzY3JpcHRzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbHNidGVzdCA9ICJZaSBaaGFvIDx5aS56aGFvQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbHNvZiA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sdHAgPSAiWWkgWmhhbyA8eWkuemhhb0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWx0dG5nLW1vZHVsZXMgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbHR0bmctdG9vbHMgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbHR0bmctdXN0ID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWx6NCA9ICJEZW55cyBEbXl0cml5ZW5rbyA8ZGVueXNAdGkuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWx6byA9ICJEZW55cyBEbXl0cml5ZW5rbyA8ZGVueXNAdGkuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWx6aXAgPSAiRGVueXMgRG15dHJpeWVua28gPGRlbnlzQHRpLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sem9wID0gIkRlbnlzIERteXRyaXllbmtvIDxkZW55c0B0aS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbTQgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbTQtbmF0aXZlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1haWx4ID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1ha2UgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWFrZWRlcGVuZCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYWtlZGV2cyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWFuID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYW4tcGFnZXMgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hdGNoYm94LWNvbmZpZy1ndGsgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYXRjaGJveC1kZXNrdG9wID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWF0Y2hib3gtZGVza3RvcC1zYXRvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWF0Y2hib3gta2V5Ym9hcmQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYXRjaGJveC1wYW5lbC0yID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWF0Y2hib3gtc2Vzc2lvbiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hdGNoYm94LXNlc3Npb24tc2F0byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hdGNoYm94LXRlcm1pbmFsID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWF0Y2hib3gtdGhlbWUtc2F0byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hdGNoYm94LXdtID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWMgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWRhZG0gPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWVudS1jYWNoZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1lc2EgPSAiT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW8uc2FsdmFkb3JAb3NzeXN0ZW1zLmNvbS5icj4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tZXNhLWRlbW9zID0gIk90YXZpbyBTYWx2YWRvciA8b3RhdmlvLnNhbHZhZG9yQG9zc3lzdGVtcy5jb20uYnI+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWVzYS1nbCA9ICJPdGF2aW8gU2FsdmFkb3IgPG90YXZpby5zYWx2YWRvckBvc3N5c3RlbXMuY29tLmJyPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1ldGEtZW52aXJvbm1lbnQgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWV0YS1lbnZpcm9ubWVudC1leHRzZGsgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWV0YS1leHRzZGstdG9vbGNoYWluID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1ldGEtaWRlLXN1cHBvcnQgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tZXRhLXRvb2xjaGFpbiA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1ldGEtd29ybGQtcGtnZGF0YSA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1taW5nZXR0eSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1taW5pLXgtc2Vzc2lvbiA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1taW5pY29tID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1rZWxmaW1hZ2UgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ta2ZvbnRkaXIgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWtmb250c2NhbGUgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWtsaWJzLW5hdGl2ZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ta3RlbXAgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbW1jLXV0aWxzID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mbyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1vZHV0aWxzLWluaXRzY3JpcHRzID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1wZWcyZGVjID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbXBmciA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1wZzEyMyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1zbXRwID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbXRkLXV0aWxzID0gIkRlbnlzIERteXRyaXllbmtvIDxkZW55c0B0aS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbXRkZXYgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tdG9vbHMgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbXVzbCA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW14LTEuMCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW5hc20gPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmF0aXZlc2RrLWJ1aWxkdG9vbHMtcGVybC1kdW1teSA9ICJMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW5hdGl2ZXNkay1saWJ0b29sID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW5hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtc2RrLWhvc3QgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uYXRpdmVzZGstcWVtdS1oZWxwZXIgPSAiTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uYXRpdmVzZGstcG9zdGluc3QtaW50ZXJjZXB0ID0gIkxlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmN1cnNlcyA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmVhcmQgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmVvbiA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uZXQtdG9vbHMgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmV0YmFzZSA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uZXR0bGUgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyODA4QGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uZnMtZXhwb3J0LXJvb3QgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmZzLXV0aWxzID0gIkxlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmluamEgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ucHRoID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbnNwciA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uc3MgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbnNzLW15aG9zdG5hbWUgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb2Zvbm8gPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb2gtcHV6emxlcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wZW5zc2ggPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb3BlbnNzbCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wa2cgPSAiQWxlamFuZHJvIGRlbCBDYXN0aWxsbyA8YWxlamFuZHJvLmRlbGNhc3RpbGxvQG5pLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1vcGtnLWFyY2gtY29uZmlnID0gIkFsZWphbmRybyBkZWwgQ2FzdGlsbG8gPGFsZWphbmRyby5kZWxjYXN0aWxsb0BuaS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb3BrZy1rZXlyaW5ncyA9ICJBbGVqYW5kcm8gZGVsIENhc3RpbGxvIDxhbGVqYW5kcm8uZGVsY2FzdGlsbG9AbmkuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wa2ctdXRpbHMgPSAiQWxlamFuZHJvIGRlbCBDYXN0aWxsbyA8YWxlamFuZHJvLmRlbGNhc3RpbGxvQG5pLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1vcHJvZmlsZSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9yYyA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1vcy1yZWxlYXNlID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb3NzcC11dWlkID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb3ZtZiA9ICJSaWNhcmRvIE5lcmkgPHJpY2FyZG8ubmVyaS1jYWxkZXJvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb3ZtZi1zaGVsbC1pbWFnZSA9ICJSaWNhcmRvIE5lcmkgPHJpY2FyZG8ubmVyaS1jYWxkZXJvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcDExLWtpdCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2UtaW5kZXggPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYW5nbyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhcnRlZCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGF0Y2ggPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhdGNoZWxmID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBheCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGF4LXV0aWxzID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYnppcDIgPSAiRGVueXMgRG15dHJpeWVua28gPGRlbnlzQHRpLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wY2l1dGlscyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGNtYW5mbSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBjbWNpYXV0aWxzID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBlcmYgPSAiQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGVybCA9ICJMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBlcmwtbmF0aXZlID0gIkxlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGlnbGl0ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGlneiA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGluZW50cnkgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyODA4QGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1waXhtYW4gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1waXh6ID0gIkRlbnlzIERteXRyaXllbmtvIDxkZW55c0B0aS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGtnY29uZmlnID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBtLXV0aWxzID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBvaW50ZXJjYWwgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wb2ludGVyY2FsLXhpbnB1dCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBvbmctY2xvY2sgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wb3B0ID0gIllpIFpoYW8gPHlpLnpoYW9Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wb3J0bWFwID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBvd2VydG9wID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHBwID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wcHAtZGlhbGluID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wcmVsaW5rID0gIk1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wcmVzZW50cHJvdG8gPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHJvY3BzID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHNldWRvID0gIk1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wc21pc2MgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wc3BsYXNoID0gIllpIFpoYW8gPHlpLnpoYW9Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wdGVzdC1ydW5uZXIgPSAiTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wdWxzZWF1ZGlvID0gIlRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wdWxzZWF1ZGlvLWNsaWVudC1jb25mLXNhdG8gPSAiVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB1enpsZXMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24gPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLW5hdGl2ZSA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tYXN5bmMgPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1kaXN0cmlidXRlID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tZ2l0ID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tZ2l0ZGIgPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1pbWFnaW5nID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tbWFrbyA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLW5hdGl2ZSA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tbm9zZSA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLW51bXB5ID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tcGV4cGVjdCA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLXB0eXByb2Nlc3MgPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1weWNhaXJvID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tcHljdXJsID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tcHlndGsgPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1weXJleCA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLXNjb25zID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tc2NvbnMtbmF0aXZlID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tc2V0dXB0b29scyA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLXNpeCA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLXNtYXJ0cG0gPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1zbW1hcCA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uMyA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24zLWFzeW5jID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24zLWRidXMgPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbjMtZGlzdHJpYnV0ZSA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uMy1kb2N1dGlscyA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uMy1naXQgPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbjMtZ2l0ZGIgPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbjMtaW5pcGFyc2UgPSAiSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbjMtbWFrbyA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uMy1uYXRpdmUgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uMy1ub3NlID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24zLW51bXB5ID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24zLXBpcCA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uMy1weWNhaXJvID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24zLXB5Z29iamVjdCA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uMy1zZXR1cHRvb2xzID0gIkpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24zLXNpeCA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uMy1zbW1hcCA9ICJKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcWVtdSA9ICJMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXFlbXUtaGVscGVyLW5hdGl2ZSA9ICJMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXFlbXV3cmFwcGVyLWNyb3NzID0gIkxlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcXVpbHQgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcXVpbHQtbmF0aXZlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXF1b3RhID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXJhbmRycHJvdG8gPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcmUyYyA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXJlYWRsaW5lID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1yZWNvcmRwcm90byA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1yZW1ha2UgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcmVuZGVycHJvdG8gPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcmVzb2x2Y29uZiA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcmVzb3VyY2Vwcm90byA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1yZ2IgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcnBjYmluZCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcm5nLXRvb2xzID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXJwbSA9ICJNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcnBtcmVzb2x2ZSA9ICJNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcnN5bmMgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcnQtdGVzdHMgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ydWJ5ID0gIkxlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcnVuLXBvc3RpbnN0cyA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXJ4dnQtdW5pY29kZSA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zYXRvLWljb24tdGhlbWUgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2F0by1zY3JlZW5zaG90ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2JjID0gIlRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zY3JlZW4gPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2NybnNhdmVycHJvdG8gPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2VkID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zZXJmID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNldHNlcmlhbCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zZXR0aW5ncy1kYWVtb24gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zaGFkb3cgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNoYWRvdy1zZWN1cmV0dHkgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNoYWRvdy1zeXNyb290ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zaGFyZWQtbWltZS1pbmZvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2h1dGRvd24tZGVza3RvcCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNpZ25pbmcta2V5cyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zbGFuZyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zb2NhdCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc291cmNlLWhpZ2hsaWdodCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNwZWV4ID0gIlRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zcGVleGRzcCA9ICJUYW51IEthc2tpbmVuIDx0YW51a0Bpa2kuZmk+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3FsaXRlMyA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zcXVhc2hmcy10b29scyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zdGFydHVwLW5vdGlmaWNhdGlvbiA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN0YXQgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN0cmFjZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zdHJlc3MgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3VidmVyc2lvbiA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zdWRvID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zd2FiYmVyLW5hdGl2ZSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN3aWcgPSAiTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zeXNmc3V0aWxzID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zeXNrbG9nZCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzbGludXggPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zeXNwcm9mID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzc3RhdCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzdGVtZCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzdGVtZC1ib290ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zeXN0ZW1kLWJvb3RjaGFydCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzdGVtZC1jb21wYXQtdW5pdHMgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN5c3RlbWQtc2VyaWFsZ2V0dHkgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZSA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzdGVtdGFwID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzdGVtdGFwLXVwcm9iZXMgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zeXN2aW5pdCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN5c3Zpbml0LWluaXR0YWIgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10YWdsaWIgPSAiTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGFyID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10Y2YtYWdlbnQgPSAiUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10Y2wgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGNwLXdyYXBwZXJzID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRlc3RleHBvcnQtdGFyYmFsbCA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10ZXhpMmh0bWwgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGV4aW5mbyA9ICJMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRleGluZm8tZHVtbXktbmF0aXZlID0gIkxlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGlmZiA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRpbWUgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGlueS1pbml0ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdHJhY2UtY21kID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdHJlbW9yID0gIlRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10c2xpYiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXR0Zi1iaXRzdHJlYW0tdmVyYSA9ICJMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXR6Y29kZS1uYXRpdmUgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdHpkYXRhID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXUtYm9vdCA9ICJNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXUtYm9vdC1mdy11dGlscyA9ICJNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXUtYm9vdC1ta2ltYWdlID0gIk1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdWJvb3RjaGFydCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXVkZXYtZXh0cmFjb25mID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXVuZnMzID0gIlJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdW5pZmRlZiA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXVuaW5hdGl2ZS10YXJiYWxsID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXVuemlwID0gIkRlbnlzIERteXRyaXllbmtvIDxkZW55c0B0aS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdXBkYXRlLXJjLmQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11c2Jpbml0ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdXNidXRpbHMgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11dGlsLWxpbnV4ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11dGlsLW1hY3JvcyA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi12ODZkID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdmFsYSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXZhbGdyaW5kID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdmlkZW9wcm90byA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi12b2xhdGlsZS1iaW5kcyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdnRlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdnVsa2FuID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdnVsa2FuLWRlbW9zID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4td2FmZmxlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4td2F0Y2hkb2cgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi13YXRjaGRvZy1jb25maWcgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi13YXlsYW5kID0gIkRlbnlzIERteXRyaXllbmtvIDxkZW55c0B0aS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4td2F5bGFuZC1wcm90b2NvbHMgPSAiRGVueXMgRG15dHJpeWVua28gPGRlbnlzQHRpLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi13ZWJraXRndGsgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi13ZXN0b24gPSAiRGVueXMgRG15dHJpeWVua28gPGRlbnlzQHRpLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi13ZXN0b24taW5pdCA9ICJEZW55cyBEbXl0cml5ZW5rbyA8ZGVueXNAdGkuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXdnZXQgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4td2hpY2ggPSAiTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi13aWMtdG9vbHMgPSAiRWQgQmFydG9zaCA8ZWQuYmFydG9zaEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4td2lyZWxlc3MtdG9vbHMgPSAiQ2hhbmdoeWVvayBCYWUgPGNoYW5naHllb2suYmFlQGxnZS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4td3BhLXN1cHBsaWNhbnQgPSAiQ2hhbmdoeWVvayBCYWUgPGNoYW5naHllb2suYmFlQGxnZS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teDExLWNvbW1vbiA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14MTFwZXJmID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXgyNjQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14YXV0aCA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Y2ItcHJvdG8gPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGNiLXV0aWwgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGNiLXV0aWwtaW1hZ2UgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGNiLXV0aWwta2V5c3ltcyA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Y2ItdXRpbC1yZW5kZXJ1dGlsID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhjYi11dGlsLXdtID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhjbWlzY3Byb3RvID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGRnLXV0aWxzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGRweWluZm8gPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGV2ID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhleHRwcm90byA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14ZXllcyA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LWlucHV0LWV2ZGV2ID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtaW5wdXQta2V5Ym9hcmQgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Ni1pbnB1dC1saWJpbnB1dCA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LWlucHV0LW1vdXNlID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtaW5wdXQtc3luYXB0aWNzID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtaW5wdXQtdm1tb3VzZSA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LXZpZGVvLWNpcnJ1cyA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LXZpZGVvLWZiZGV2ID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtdmlkZW8taW50ZWwgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Ni12aWRlby1vbWFwID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtdmlkZW8tb21hcGZiID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtdmlkZW8tdmVzYSA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LXZpZGVvLXZtd2FyZSA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2ZGdhcHJvdG8gPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4NmRyaXByb3RvID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODZtaXNjcHJvdG8gPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4NnZpZG1vZGVwcm90byA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14aG9zdCA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14aW5lcmFtYXByb3RvID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhpbmV0ZCA9ICJNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14aW5pdCA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14aW5wdXQgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGlucHV0LWNhbGlicmF0b3IgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGtiY29tcCA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14a2V5Ym9hcmQtY29uZmlnID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhtbHRvID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14bW9kbWFwID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhvcmctbWluaW1hbC1mb250cyA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14cHJvcCA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14cHJvdG8gPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teHJhbmRyID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhyZXN0b3AgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teHNlcnZlci1ub2RtLWluaXQgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teHNlcnZlci14Zjg2LWNvbmZpZyA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14c2VydmVyLXhvcmcgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teHNldCA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14dHJhbnMgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teHRzY2FsID0gIkFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXh1c2VyLWFjY291bnQgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teHZpZGVvLXRlc3RzID0gIk1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXh2aW5mbyA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14d2luaW5mbyA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14eiA9ICJEZW55cyBEbXl0cml5ZW5rbyA8ZGVueXNAdGkuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXlhc20gPSAiWWkgWmhhbyA8eWkuemhhb0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXppcCA9ICJEZW55cyBEbXl0cml5ZW5rbyA8ZGVueXNAdGkuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXppc29mcy10b29scy1uYXRpdmUgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi16bGliID0gIkRlbnlzIERteXRyaXllbmtvIDxkZW55c0B0aS5jb20+IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9uby1zdGF0aWMtbGlicy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL25vLXN0YXRpYy1saWJzLmluYwppbmRleCBmOGQ4YzA5Li43YzE2NWM3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL25vLXN0YXRpYy1saWJzLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL25vLXN0YXRpYy1saWJzLmluYwpAQCAtMjUsNiArMjUsOSBAQAogRElTQUJMRV9TVEFUSUNfcG4tb3BlbnNzbCA9ICIiCiBESVNBQkxFX1NUQVRJQ19wbi1vcGVuc3NsLW5hdGl2ZSA9ICIiCiBESVNBQkxFX1NUQVRJQ19wbi1uYXRpdmVzZGstb3BlbnNzbCA9ICIiCitESVNBQkxFX1NUQVRJQ19wbi1vcGVuc3NsMTAgPSAiIgorRElTQUJMRV9TVEFUSUNfcG4tb3BlbnNzbDEwLW5hdGl2ZSA9ICIiCitESVNBQkxFX1NUQVRJQ19wbi1uYXRpdmVzZGstb3BlbnNzbDEwID0gIiIKICMgbGlic3NwLXN0YXRpYy1kZXYgaW5jbHVkZWQgaW4gYnVpbGQtYXBwbGlhbmNlCiBESVNBQkxFX1NUQVRJQ19wbi1nY2MtcnVudGltZSA9ICIiCiAjIGxpYnVzYjEtbmF0aXZlIGlzIHVzZWQgdG8gYnVpbGQgc3RhdGljIGRmdS11dGlsLW5hdGl2ZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9zZWN1cml0eV9mbGFncy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3NlY3VyaXR5X2ZsYWdzLmluYwppbmRleCBlMTYyYWJlLi5hYjIwNjJiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3NlY3VyaXR5X2ZsYWdzLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3NlY3VyaXR5X2ZsYWdzLmluYwpAQCAtMSwxMCArMSwxMiBAQAotIyBTZXR1cCBleHRyYSBDRkxBR1MgYW5kIExERkxBR1Mgd2hpY2ggaGF2ZSAnc2VjdXJpdHknIGJlbmVmaXRzLiBUaGVzZSAKKyMgU2V0dXAgZXh0cmEgQ0ZMQUdTIGFuZCBMREZMQUdTIHdoaWNoIGhhdmUgJ3NlY3VyaXR5JyBiZW5lZml0cy4gVGhlc2UKICMgZG9uJ3Qgd29yayB1bml2ZXJzYWxseSwgdGhlcmUgYXJlIHJlY2lwZXMgd2hpY2ggY2FuJ3QgdXNlIG9uZSwgdGhlIG90aGVyCiAjIG9yIGJvdGggc28gYSBibGFja2xpc3QgaXMgbWFpbnRhaW5lZCBoZXJlLiBUaGUgaWRlYSB3b3VsZCBiZSBvdmVyCiAjIHRpbWUgdG8gcmVkdWNlIHRoaXMgbGlzdCB0byBub3RoaW5nLgogIyBGcm9tIGEgWW9jdG8gUHJvamVjdCBwZXJzcGVjdGl2ZSwgdGhpcyBmaWxlIGlzIGluY2x1ZGVkIGFuZCB0ZXN0ZWQKICMgaW4gdGhlIERJU1RSTz0icG9reS1sc2IiIGNvbmZpZ3VyYXRpb24uCiAKK0dDQ1BJRSA/PSAiLS1lbmFibGUtZGVmYXVsdC1waWUiCisKICMgX0ZPUlRJRllfU09VUkNFIHJlcXVpcmVzIC1PMSBvciBoaWdoZXIsIHNvIGRpc2FibGUgaW4gZGVidWcgYnVpbGRzIGFzIHRoZXkgdXNlCiAjIC1PMCB3aGljaCB0aGVuIHJlc3VsdHMgaW4gYSBjb21waWxlciB3YXJuaW5nLgogbGNsX21heWJlX2ZvcnRpZnkgPSAiJHtAYmFzZV9jb25kaXRpb25hbCgnREVCVUdfQlVJTEQnLCcxJywnJywnLURfRk9SVElGWV9TT1VSQ0U9MicsZCl9IgpAQCAtMTIsOTYgKzE0LDUxIEBACiAjIEVycm9yIG9uIHVzZSBvZiBmb3JtYXQgc3RyaW5ncyB0aGF0IHJlcHJlc2VudCBwb3NzaWJsZSBzZWN1cml0eSBwcm9ibGVtcwogU0VDVVJJVFlfU1RSSU5HRk9STUFUID89ICItV2Zvcm1hdCAtV2Zvcm1hdC1zZWN1cml0eSAtV2Vycm9yPWZvcm1hdC1zZWN1cml0eSIKIAotU0VDVVJJVFlfQ0ZMQUdTID89ICItZnN0YWNrLXByb3RlY3Rvci1zdHJvbmcgLXBpZSAtZnBpZSAke2xjbF9tYXliZV9mb3J0aWZ5fSAke1NFQ1VSSVRZX1NUUklOR0ZPUk1BVH0iCisjIEluamVjdCBwaWUgZmxhZ3MgaW50byBjb21waWxlciBmbGFncyBpZiBub3QgY29uZmlndXJlZCB3aXRoIGdjYyBpdHNlbGYKKyMgZXNwZWNpYWxseSB1c2VmdWwgd2l0aCBleHRlcm5hbCB0b29sY2hhaW5zCitTRUNVUklUWV9QSUVfQ0ZMQUdTID89ICIke0AnJyBpZiAnJHtHQ0NQSUV9JyBlbHNlICctcGllIC1mUElFJ30iCisKK1NFQ1VSSVRZX05PUElFX0NGTEFHUyA/PSAiLW5vLXBpZSAtZm5vLVBJRSIKKworU0VDVVJJVFlfQ0ZMQUdTID89ICItZnN0YWNrLXByb3RlY3Rvci1zdHJvbmcgJHtTRUNVUklUWV9QSUVfQ0ZMQUdTfSAke2xjbF9tYXliZV9mb3J0aWZ5fSAke1NFQ1VSSVRZX1NUUklOR0ZPUk1BVH0iCiBTRUNVUklUWV9OT19QSUVfQ0ZMQUdTID89ICItZnN0YWNrLXByb3RlY3Rvci1zdHJvbmcgJHtsY2xfbWF5YmVfZm9ydGlmeX0gJHtTRUNVUklUWV9TVFJJTkdGT1JNQVR9IgogCiBTRUNVUklUWV9MREZMQUdTID89ICItZnN0YWNrLXByb3RlY3Rvci1zdHJvbmcgLVdsLC16LHJlbHJvLC16LG5vdyIKIFNFQ1VSSVRZX1hfTERGTEFHUyA/PSAiLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nIC1XbCwteixyZWxybyIKIAogIyBwb3dlcnBjIGRvZXMgbm90IGdldCBvbiB3aXRoIHBpZSBmb3IgcmVhc29ucyBub3QgbG9va2VkIGludG8gYXMgeWV0Ci1TRUNVUklUWV9DRkxBR1NfcG93ZXJwYyA9ICItZnN0YWNrLXByb3RlY3Rvci1zdHJvbmcgJHtsY2xfbWF5YmVfZm9ydGlmeX0iCi0jIERlYWwgd2l0aCBwcGMgc3BlY2lmaWMgbGlua2VyIGZhaWx1cmVzIHdoZW4gdXNpbmcgdGhlIGNmbGFncwotU0VDVVJJVFlfQ0ZMQUdTX3BuLWRidXNfcG93ZXJwYyA9ICIiCi1TRUNVUklUWV9DRkxBR1NfcG4tZGJ1cy1wdGVzdF9wb3dlcnBjID0gIiIKLVNFQ1VSSVRZX0NGTEFHU19wbi1saWJtYXRjaGJveF9wb3dlcnBjID0gIiIKK1NFQ1VSSVRZX0NGTEFHU19wb3dlcnBjID0gIi1mc3RhY2stcHJvdGVjdG9yLXN0cm9uZyAke2xjbF9tYXliZV9mb3J0aWZ5fSAke1NFQ1VSSVRZX05PUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tbGliZ2NjX3Bvd2VycGMgPSAiIgorR0NDUElFX3Bvd2VycGMgPSAiIgogCiAjIGFybSBzcGVjaWZpYyBzZWN1cml0eSBmbGFnIGlzc3VlcwotU0VDVVJJVFlfQ0ZMQUdTX3BuLWx0dG5nLXRvb2xzX2FybSA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgotU0VDVVJJVFlfQ0ZMQUdTX3BuLWFzcGVsbCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgotU0VDVVJJVFlfQ0ZMQUdTX3BuLWJlZWNyeXB0ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCi1TRUNVUklUWV9DRkxBR1NfcG4tY29yZXV0aWxzID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCi1TRUNVUklUWV9DRkxBR1NfcG4tY3VwcyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgotU0VDVVJJVFlfQ0ZMQUdTX3BuLWRiID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCi1TRUNVUklUWV9DRkxBR1NfcG4tZGlyZWN0ZmIgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKIFNFQ1VSSVRZX0NGTEFHU19wbi1nbGliYyA9ICIiCiBTRUNVUklUWV9DRkxBR1NfcG4tZ2xpYmMtaW5pdGlhbCA9ICIiCi1TRUNVUklUWV9DRkxBR1NfcG4tZWxmdXRpbHMgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKLVNFQ1VSSVRZX0NGTEFHU19wbi1lbmNoYW50ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCi1TRUNVUklUWV9DRkxBR1NfcG4tZXhwZWN0ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCi1TRUNVUklUWV9DRkxBR1NfcG4tZmxhYyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgotU0VDVVJJVFlfQ0ZMQUdTX3BuLWdjYyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgogU0VDVVJJVFlfQ0ZMQUdTX3BuLWdjYy1ydW50aW1lID0gIiIKLVNFQ1VSSVRZX0NGTEFHU19wbi1nY2Mtc2FuaXRpemVycyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgotU0VDVVJJVFlfQ0ZMQUdTX3BuLWdkYiA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgotU0VDVVJJVFlfQ0ZMQUdTX3BuLWdtcCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgotU0VDVVJJVFlfQ0ZMQUdTX3BuLWdudXRscyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgotU0VDVVJJVFlfQ0ZMQUdTX3BuLWdwZ21lID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCiBTRUNVUklUWV9DRkxBR1NfcG4tZ3J1YiA9ICIiCiBTRUNVUklUWV9DRkxBR1NfcG4tZ3J1Yi1lZmkgPSAiIgogU0VDVVJJVFlfQ0ZMQUdTX3BuLWdydWItZWZpLW5hdGl2ZSA9ICIiCiBTRUNVUklUWV9DRkxBR1NfcG4tZ3J1Yi1lZmkteDg2LW5hdGl2ZSA9ICIiCiBTRUNVUklUWV9DRkxBR1NfcG4tZ3J1Yi1lZmktaTU4Ni1uYXRpdmUgPSAiIgogU0VDVVJJVFlfQ0ZMQUdTX3BuLWdydWItZWZpLXg4Ni02NC1uYXRpdmUgPSAiIgotU0VDVVJJVFlfQ0ZMQUdTX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgotU0VDVVJJVFlfQ0ZMQUdTX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKLVNFQ1VSSVRZX0NGTEFHU19wbi1oYXJmYnV6eiA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgotU0VDVVJJVFlfQ0ZMQUdTX3BuLWtleGVjLXRvb2xzID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCi1TRUNVUklUWV9DRkxBR1NfcG4taXB0YWJsZXMgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKLVNFQ1VSSVRZX0NGTEFHU19wbi1saWJhaW8gPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKLVNFQ1VSSVRZX0NGTEFHU19wbi1saWJjYXAgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKLVNFQ1VSSVRZX0NGTEFHU19wbi1saWJnY2MgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKLVNFQ1VSSVRZX0NGTEFHU19wbi1saWJpZDN0YWcgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKLVNFQ1VSSVRZX0NGTEFHU19wbi1saWJuZXd0LXB5dGhvbiA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgotU0VDVVJJVFlfQ0ZMQUdTX3BuLWxpYmdsdSA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgotU0VDVVJJVFlfQ0ZMQUdTX3BuLWxpYnBjYXAgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKLVNFQ1VSSVRZX0NGTEFHU19wbi1saWJwY3JlID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCi1TRUNVUklUWV9DRkxBR1NfcG4tbGlicHJveHkgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKLVNFQ1VSSVRZX0NGTEFHU19wbi1tZXNhID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCi1TRUNVUklUWV9DRkxBR1NfcG4tbWVzYS1nbCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgotU0VDVVJJVFlfQ0ZMQUdTX3BuLW9wZW5zc2wgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKLVNFQ1VSSVRZX0NGTEFHU19wbi1vcGVuc3AgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKLVNFQ1VSSVRZX0NGTEFHU19wbi1wcHAgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKLVNFQ1VSSVRZX0NGTEFHU19wbi1weXRob24gPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKLVNFQ1VSSVRZX0NGTEFHU19wbi1weXRob24tcHljdXJsID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCi1TRUNVUklUWV9DRkxBR1NfcG4tcHl0aG9uLW51bXB5ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCi1TRUNVUklUWV9DRkxBR1NfcG4tcHl0aG9uMy1udW1weSA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgotU0VDVVJJVFlfQ0ZMQUdTX3BuLXB5dGhvbjMtcHljYWlybyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgotU0VDVVJJVFlfQ0ZMQUdTX3BuLXB5dGhvbjMtcHljdXJsID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCi1TRUNVUklUWV9DRkxBR1NfcG4tcHl0aG9uMy1weWdwZ21lID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCi1TRUNVUklUWV9DRkxBR1NfcG4tcHl0aG9uMyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgotU0VDVVJJVFlfQ0ZMQUdTX3BuLXN5c2xpbnV4ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCi1TRUNVUklUWV9DRkxBR1NfcG4tc2xhbmcgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKLVNFQ1VSSVRZX0NGTEFHU19wbi1zb3VyY2UtaGlnaGxpZ2h0ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCi1TRUNVUklUWV9DRkxBR1NfcG4tdGNsID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCi1TRUNVUklUWV9DRkxBR1NfcG4tdGlmZiA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgotU0VDVVJJVFlfQ0ZMQUdTX3BuLXVjbGliYyA9ICIiCi1TRUNVUklUWV9DRkxBR1NfcG4tdWNsaWJjLWluaXRpYWwgPSAiIgotU0VDVVJJVFlfQ0ZMQUdTX3BuLXZhbGdyaW5kID0gIiIKLVNFQ1VSSVRZX0NGTEFHU19wbi16bGliID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCisKK1NFQ1VSSVRZX0NGTEFHU19wbi1ta2VsZmltYWdlX3g4NiA9ICIiCisKK1NFQ1VSSVRZX0NGTEFHU19wbi12YWxncmluZCA9ICIke1NFQ1VSSVRZX05PUElFX0NGTEFHU30iCitTRUNVUklUWV9MREZMQUdTX3BuLXZhbGdyaW5kID0gIiIKK1NFQ1VSSVRZX0NGTEFHU19wbi1zeXNrbG9nZCA9ICIke1NFQ1VSSVRZX05PUElFX0NGTEFHU30iCitTRUNVUklUWV9MREZMQUdTX3BuLXN5c2tsb2dkID0gIiIKIAogIyBSZWNpcGVzIHdoaWNoIGZhaWwgdG8gY29tcGlsZSB3aGVuIGVsZXZhdGluZyAtV2Zvcm1hdC1zZWN1cml0eSB0byBhbiBlcnJvcgogU0VDVVJJVFlfU1RSSU5HRk9STUFUX3BuLWJ1c3lib3ggPSAiIgogU0VDVVJJVFlfU1RSSU5HRk9STUFUX3BuLWdjYyA9ICIiCi1TRUNVUklUWV9TVFJJTkdGT1JNQVRfcG4tb2gtcHV6emxlcyA9ICIiCiAKLVRBUkdFVF9DRkxBR1NfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgJHtTRUNVUklUWV9DRkxBR1N9IgorVEFSR0VUX0NDX0FSQ0hfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgJHtTRUNVUklUWV9DRkxBR1N9IgogVEFSR0VUX0xERkxBR1NfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgJHtTRUNVUklUWV9MREZMQUdTfSIKIAogU0VDVVJJVFlfTERGTEFHU19yZW1vdmVfcG4tZ2NjLXJ1bnRpbWUgPSAiLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nIgogU0VDVVJJVFlfTERGTEFHU19yZW1vdmVfcG4tZ2xpYmMgPSAiLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nIgogU0VDVVJJVFlfTERGTEFHU19yZW1vdmVfcG4tZ2xpYmMtaW5pdGlhbCA9ICItZnN0YWNrLXByb3RlY3Rvci1zdHJvbmciCi1TRUNVUklUWV9MREZMQUdTX3JlbW92ZV9wbi11Y2xpYmMgPSAiLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nIgotU0VDVVJJVFlfTERGTEFHU19yZW1vdmVfcG4tdWNsaWJjLWluaXRpYWwgPSAiLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nIgogU0VDVVJJVFlfTERGTEFHU19wbi14Zjg2LXZpZGVvLWZiZGV2ID0gIiR7U0VDVVJJVFlfWF9MREZMQUdTfSIKIFNFQ1VSSVRZX0xERkxBR1NfcG4teGY4Ni12aWRlby1pbnRlbCA9ICIke1NFQ1VSSVRZX1hfTERGTEFHU30iCiBTRUNVUklUWV9MREZMQUdTX3BuLXhmODYtdmlkZW8tb21hcGZiID0gIiR7U0VDVVJJVFlfWF9MREZMQUdTfSIKQEAgLTExMCw0ICs2Nyw3IEBACiBTRUNVUklUWV9MREZMQUdTX3BuLXhmODYtdmlkZW8tdm13YXJlID0gIiR7U0VDVVJJVFlfWF9MREZMQUdTfSIKIFNFQ1VSSVRZX0xERkxBR1NfcG4teHNlcnZlci14b3JnID0gIiR7U0VDVVJJVFlfWF9MREZMQUdTfSIKIAotVEFSR0VUX0NDX0FSQ0hfYXBwZW5kX3BuLWJpbnV0aWxzID0gIiAke1NFQ1VSSVRZX0NGTEFHU30gJHtTRUxFQ1RFRF9PUFRJTUlaQVRJT059IgorVEFSR0VUX0NDX0FSQ0hfYXBwZW5kX3BuLWJpbnV0aWxzID0gIiAke1NFTEVDVEVEX09QVElNSVpBVElPTn0iCitUQVJHRVRfQ0NfQVJDSF9hcHBlbmRfcG4tZ2NjID0gIiAke1NFTEVDVEVEX09QVElNSVpBVElPTn0iCitUQVJHRVRfQ0NfQVJDSF9hcHBlbmRfcG4tZ2RiID0gIiAke1NFTEVDVEVEX09QVElNSVpBVElPTn0iCitUQVJHRVRfQ0NfQVJDSF9hcHBlbmRfcG4tcGVyZiA9ICIgJHtTRUxFQ1RFRF9PUFRJTUlaQVRJT059IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y2xpYmMtbXVzbC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy1tdXNsLmluYwppbmRleCAzZDNmNmFjLi45YWUyYTkzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy1tdXNsLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy1tdXNsLmluYwpAQCAtMTQsNiArMTQsOCBAQAogUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLWxpYmludGwgPz0gIm5hdGl2ZXNkay1nbGliYyIKIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay1saWJpY29udiA/PSAibmF0aXZlc2RrLWdsaWJjIgogCitESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRCArPSAibGRjb25maWciCisKICNVU0VfTkxTID89ICJubyIKIAogQ1hYRkxBR1MgKz0gIi1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNtb2RlLWRlZmF1bHQuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y21vZGUtZGVmYXVsdC5pbmMKaW5kZXggM2RiMTZlOC4uMTc4N2E4MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y21vZGUtZGVmYXVsdC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y21vZGUtZGVmYXVsdC5pbmMKQEAgLTIyLDEzICsyMiwxMiBAQAogUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLSR7U0RLX1BSRUZJWH1saWJjLWluaXRpYWwgPz0gIm5hdGl2ZXNkay1nbGliYy1pbml0aWFsIgogUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZ2V0dGV4dCA/Pz0gImdldHRleHQiCiAKLUdDQ1ZFUlNJT04gPz0gIjYuMyUiCitHQ0NWRVJTSU9OID89ICI3LiUiCiBTREtHQ0NWRVJTSU9OID89ICIke0dDQ1ZFUlNJT059IgotQklOVVZFUlNJT04gPz0gIjIuMjglIgotR0RCVkVSU0lPTiA/PSAiNy4xMiUiCi1HTElCQ1ZFUlNJT04gPz0gIjIuMjUiCi1VQ0xJQkNWRVJTSU9OID89ICIxLjAlIgotTElOVVhMSUJDVkVSU0lPTiA/PSAiNC4xMCUiCitCSU5VVkVSU0lPTiA/PSAiMi4yOSUiCitHREJWRVJTSU9OID89ICI4LjAlIgorR0xJQkNWRVJTSU9OID89ICIyLjI2JSIKK0xJTlVYTElCQ1ZFUlNJT04gPz0gIjQuMTIlIgogCiBQUkVGRVJSRURfVkVSU0lPTl9nY2MgPz0gIiR7R0NDVkVSU0lPTn0iCiBQUkVGRVJSRURfVkVSU0lPTl9nY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH0gPz0gIiR7R0NDVkVSU0lPTn0iCkBAIC00OCw3ICs0Nyw3IEBACiBQUkVGRVJSRURfVkVSU0lPTl9iaW51dGlscyA/PSAiJHtCSU5VVkVSU0lPTn0iCiBQUkVGRVJSRURfVkVSU0lPTl9iaW51dGlscy1uYXRpdmUgPz0gIiR7QklOVVZFUlNJT059IgogUFJFRkVSUkVEX1ZFUlNJT05fYmludXRpbHMtY3Jvc3MtJHtUQVJHRVRfQVJDSH0gPz0gIiR7QklOVVZFUlNJT059IgotUFJFRkVSUkVEX1ZFUlNJT05fYmludXRpbHMtY3Jvc3NzZGstJHtTREtfQVJDSH0gPz0gIiR7QklOVVZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fYmludXRpbHMtY3Jvc3NzZGstJHtTREtfU1lTfSA/PSAiJHtCSU5VVkVSU0lPTn0iCiBQUkVGRVJSRURfVkVSU0lPTl9iaW51dGlscy1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9ID89ICIke0JJTlVWRVJTSU9OfSIKIFBSRUZFUlJFRF9WRVJTSU9OX2dkYiA/PSAiJHtHREJWRVJTSU9OfSIKIFBSRUZFUlJFRF9WRVJTSU9OX2dkYi1jcm9zcy0ke1RBUkdFVF9BUkNIfSA/PSAiJHtHREJWRVJTSU9OfSIKQEAgLTY0LDggKzYzLDYgQEAKIFBSRUZFUlJFRF9WRVJTSU9OX2dsaWJjLWluaXRpYWwgICAgICAgICAgICA/PSAiJHtHTElCQ1ZFUlNJT059IgogUFJFRkVSUkVEX1ZFUlNJT05fbmF0aXZlc2RrLWdsaWJjLWluaXRpYWwgID89ICIke0dMSUJDVkVSU0lPTn0iCiBQUkVGRVJSRURfVkVSU0lPTl9jcm9zcy1sb2NhbGVkZWYtbmF0aXZlICAgPz0gIiR7R0xJQkNWRVJTSU9OfSIKLVBSRUZFUlJFRF9WRVJTSU9OX3VjbGliYyAgICAgICAgICAgICAgICAgICA/PSAiJHtVQ0xJQkNWRVJTSU9OfSIKLVBSRUZFUlJFRF9WRVJTSU9OX3VjbGliYy1pbml0aWFsICAgICAgICAgICA/PSAiJHtVQ0xJQkNWRVJTSU9OfSIKICMgZG9uJ3QgdXNlIHZlcnNpb24gZWFybGllciB0aGFuIDEuNCBmb3IgZ3ppcC1uYXRpdmUsIGFzIGl0J3MgbmVjZXNzYXJ5IGZvcgogIyBzb21lIHBhY2thZ2VzIHVzaW5nIGFuIGFyY2hpdmUgZm9ybWF0IGluY29tcGF0aWJsZSB3aXRoIGVhcmxpZXIgZ3ppcAogUFJFRkVSUkVEX1ZFUlNJT05fZ3ppcC1uYXRpdmUgPz0gIjEuOCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdW5pbmF0aXZlLWZsYWdzLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdW5pbmF0aXZlLWZsYWdzLmluYwppbmRleCBiNmE5NDRlLi5mZWJmMmE1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3VuaW5hdGl2ZS1mbGFncy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS91bmluYXRpdmUtZmxhZ3MuaW5jCkBAIC0xLDEzICsxLDMgQEAKLSMgaHR0cHM6Ly93aWtpLmRlYmlhbi5vcmcvR0NDNQotIyBXZSBtYXkgc2VlIGJpbmFyaWVzIGJ1aWx0IHdpdGggZ2NjNSBydW4gb3IgbGlua2VkIGludG8gZ2NjNCBlbnZpcm9ubWVudAotIyBzbyB1c2UgdGhlIG9sZGVyIGxpYnN0ZGMrKyBzdGFuZGFyZCBmb3Igbm93IHVudGlsIHdlIGRvbid0IHN1cHBvcnQgZ2NjNAotIyBvbiB0aGUgaG9zdCBzeXN0ZW0uCi1CVUlMRF9DWFhGTEFHU19hcHBlbmQgPSAiIC1EX0dMSUJDWFhfVVNFX0NYWDExX0FCST0wIgotCi0jIGljdSBjb25maWd1cmUgZGVmYXVsdHMgdG8gQ1hYMTEgaWYgbm8gLXN0ZD0gb3B0aW9uIGlzIHBhc3NlZCBpbiBDWFhGTEFHUwotIyB0aGVyZWZvcmUgcGFzcyBvbmUKLUJVSUxEX0NYWEZMQUdTX2FwcGVuZF9wbi1pY3UtbmF0aXZlID0gIiAtc3RkPWMrKzk4IgotCiAjIFNvbWUgZGlzdHJvcyAodWJ1bnR1IDE2LjEwLCBkZWJpYW4tdGVzdGluZykgZGVmYXVsdCB0byBnY2MgY29uZmlndXJlZCB3aXRoCiAjIC0tZW5hYmxlLWRlZmF1bHQtcGllIChzZWUgZ2NjIC12KS4gVGhpcyBicmVha3MgZS5nLiBwcmVsaW5rLW5hdGl2ZSBvbiBhIHBpZQogIyBkZWZhdWx0IHN5c3RlbSBpZiBiaW51dGlscy1uYXRpdmUgd2FzIGJ1aWx0IG9uIGEgc3lzdGVtIHdoaWNoIGlzIG5vdCBwaWUgZGVmYXVsdApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS93b3JsZC1icm9rZW4uaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS93b3JsZC1icm9rZW4uaW5jCmluZGV4IGQ0YmRkZGYuLjQ5ZTk1MTYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvd29ybGQtYnJva2VuLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3dvcmxkLWJyb2tlbi5pbmMKQEAgLTcsMjggKzcsMTQgQEAKIAogIyBlcnJvcjogbm8gbWVtYmVyIG5hbWVkICdzaW5fcG9ydCcgaW4gJ3N0cnVjdCBzb2NrYWRkcl9pbjYnCiAjIHRoaXMgaXMgZHVlIHRvIGxpYnRpcnBjIHVzaW5nIGlwdjYgYnV0IHBvcnRtYXAgcnBjIGV4cGVjdGluZyBpcHY0Ci1FWENMVURFX0ZST01fV09STERfcG4tcG9ydG1hcF9saWJjLW11c2wgPSAiMSIKIEVYQ0xVREVfRlJPTV9XT1JMRF9wbi11bmZzM19saWJjLW11c2wgPSAiMSIKIAogIyBlcnJvcjogdXNlIG9mIHVuZGVjbGFyZWQgaWRlbnRpZmllciAnX1NUQVRfVkVSJwogRVhDTFVERV9GUk9NX1dPUkxEX3BuLXBzZXVkb19saWJjLW11c2wgPSAiMSIKIAotIyBlcnJvcjogTmVlZCB0byBpbXBsZW1lbnQgY3VzdG9tIEkvTwotRVhDTFVERV9GUk9NX1dPUkxEX3BuLWxpYnNvbHZfbGliYy1tdXNsID0gIjEiCi0KLSMgdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgcHRocmVhZF90cnlqb2luX25wJwotRVhDTFVERV9GUk9NX1dPUkxEX3BuLWJ0cmZzLXRvb2xzX2xpYmMtbXVzbCA9ICIxIgotCiAjIGVycm9yOiBlcnJvci5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CiBFWENMVURFX0ZST01fV09STERfcG4tcHJlbGlua19saWJjLW11c2wgPSAiMSIKIAotIyBlcnJvcjogdXNlIG9mIHVuZGVjbGFyZWQgaWRlbnRpZmllciAnT19DUkVBVCcKLUVYQ0xVREVfRlJPTV9XT1JMRF9wbi1saWJic2RfbGliYy1tdXNsID0gIjEiCi0KLSMgZXJyb3I6IGV4cGVjdGVkIGRlY2xhcmF0aW9uIHNwZWNpZmllcnMgYmVmb3JlICdfX25vbm51bGwnCi1FWENMVURFX0ZST01fV09STERfcG4tbHR0bmctdXN0X2xpYmMtbXVzbCA9ICIxIgotRVhDTFVERV9GUk9NX1dPUkxEX3BuLWx0dG5nLXRvb2xzX2xpYmMtbXVzbCA9ICIxIgotCiAjIGVycm9yOiBvYnN0YWNrLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKIEVYQ0xVREVfRlJPTV9XT1JMRF9wbi1zeXN0ZW10YXBfbGliYy1tdXNsID0gIjEiCiBFWENMVURFX0ZST01fV09STERfcG4tc3lzdGVtdGFwLXVwcm9iZXNfbGliYy1tdXNsID0gIjEiCkBAIC0zNywyMCArMjMsOSBAQAogIyAgICAgICAgICAgIHZvaWQgKCpfZnVuY3Rpb24pKHNpZ3ZhbF90KTsKIEVYQ0xVREVfRlJPTV9XT1JMRF9wbi1xZW11X2xpYmMtbXVzbCA9ICIxIgogCi0jIGdsaWJjIHNwZWNpZmljIGZ1bmNyaW9ucwotIyBlcnJvcjogc3RvcmFnZSBzaXplIG9mICdtaScgaXNuJ3Qga25vd24gc3RydWN0IG1hbGxpbmZvIG1pCi1FWENMVURFX0ZST01fV09STERfcG4tdmFsZ3JpbmRfbGliYy1tdXNsID0gIjEiCi0KICMgZXJyb3I6IGZvcm1hdCAnJXMnIGV4cGVjdHMgYXJndW1lbnQgb2YgdHlwZSAnY2hhciAqJywgYnV0IGFyZ3VtZW50IDQgaGFzIHR5cGUgJ2ludCcgWy1XZXJyb3I9Zm9ybWF0PV0KICMgICBzbnByaW50ZihidWYsIHNpemUsICIlcyIsIHN0cmVycm9yX3IoZXJyLCBzYnVmLCBzaXplb2Yoc2J1ZikpKTsKIEVYQ0xVREVfRlJPTV9XT1JMRF9wbi1wZXJmX2xpYmMtbXVzbCA9ICIxIgogCiAjIGVycm9yOiAnUlRMRF9ORVhUJyB3YXMgbm90IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUKIEVYQ0xVREVfRlJPTV9XT1JMRF9wbi1nY2Mtc2FuaXRpemVyc19saWJjLW11c2wgPSAiMSIKLQotIyBnY2MgZmFpbHMgdG8gYnVpbGQgd2hlbiBsaWJ1d2luZCBpcyBzdGFnZWQgYmVmb3JlIGJ1aWxkaW5nIGdjYyBzaW5jZQotIyBpdCB0aGVuIGZpbmRzIHRoZSB1bndpbmQuaCBoZWFkZXIgZnJvbSBsaWJ1bndpbmQgYW5kIG5vdCBmcm9tIGxpYmdjYwotIyBhbmQgb24gYXJtIHNwZWNpYWxseSB0aGV5IGFyZSBkaWZmZXJlbnQgc2luY2UgbGliZ2NjIGRlZmluZXMgc29tZSBmdW5jdGlvbnMKLSMgYXMgbWFjcm9zIHdoaWNoIGFyZSBmdW5jdGlvbnMgaW4gbGlidW53aW5kIGFuZCBpdCBmYWlscyBkdXJpbmcgbGlua2luZwotIyBsaWJiYWNrdHJhY2UvYmFja3RyYWNlLmM6NzY6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9VbndpbmRfR2V0SVAnCi1FWENMVURFX0ZST01fV09STERfcG4tbGlidW53aW5kX2xpYmMtbXVzbF9hcm0gPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvZG9jdW1lbnRhdGlvbi5jb25mIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kb2N1bWVudGF0aW9uLmNvbmYKaW5kZXggMzViOTEwMy4uYTU1ZTI4MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kb2N1bWVudGF0aW9uLmNvbmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9kb2N1bWVudGF0aW9uLmNvbmYKQEAgLTU2LDcgKzU2LDYgQEAKIGRvX3Vib290X21raW1hZ2VbZG9jXSA9ICJDcmVhdGVzIGEgdUltYWdlIGZpbGUgZnJvbSB0aGUga2VybmVsIGZvciB0aGUgVS1Cb290IGJvb3Rsb2FkZXIiCiBkb191bnBhY2tbZG9jXSA9ICJVbnBhY2tzIHRoZSBzb3VyY2UgY29kZSBpbnRvIGEgd29ya2luZyBkaXJlY3RvcnkiCiBkb192YWxpZGF0ZV9icmFuY2hlc1tkb2NdID0gIkVuc3VyZXMgdGhhdCB0aGUgc291cmNlL21ldGEgYnJhbmNoZXMgYXJlIG9uIHRoZSBsb2NhdGlvbnMgc3BlY2lmaWVkIGJ5IHRoZWlyIFNSQ1JFViB2YWx1ZXMgZm9yIGEgbGludXgteW9jdG8gc3R5bGUga2VybmVsIgotZG9fdm1pbWdbZG9jXSA9ICJDcmVhdGVzIGFuIGltYWdlIGZvciB1c2Ugd2l0aCBWTXdhcmUgb3IgVmlydHVhbEJveCBjb21wYXRpYmxlIHZpcnR1YWwgbWFjaGluZSBob3N0cyAoYmFzZWQgb24gSU1BR0VfRlNUWVBFUyBlaXRoZXIgLnZtZGsgb3IgLnZkaSkiCiAKICMgREVTQ1JJUFRJT05TIEZPUiBWQVJJQUJMRVMgIwogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2xheWVyLmNvbmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2xheWVyLmNvbmYKaW5kZXggZmMxNjUwMi4uNGJhMGI5MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9sYXllci5jb25mCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbGF5ZXIuY29uZgpAQCAtOSw3ICs5LDkgQEAKIAogIyBUaGlzIHNob3VsZCBvbmx5IGJlIGluY3JlbWVudGVkIG9uIHNpZ25pZmljYW50IGNoYW5nZXMgdGhhdCB3aWxsCiAjIGNhdXNlIGNvbXBhdGliaWxpdHkgaXNzdWVzIHdpdGggb3RoZXIgbGF5ZXJzCi1MQVlFUlZFUlNJT05fY29yZSA9ICIxMCIKK0xBWUVSVkVSU0lPTl9jb3JlID0gIjExIgorCitMQVlFUlNFUklFU19DT1JFTkFNRVMgPSAicm9ja28iCiAKIEJCTEFZRVJTX0xBWUVSSU5ERVhfTkFNRV9jb3JlID0gIm9wZW5lbWJlZGRlZC1jb3JlIgogCkBAIC0zOCw2ICs0MCw3IEBACiAgIGJhc2UtcGFzc3dkIFwKICAgb3BrZy11dGlscyBcCiAgIGdzdHJlYW1lcjEuMC1tZXRhLWJhc2UgXAorICBjYS1jZXJ0aWZpY2F0ZXMgXAogIgogCiBTSUdHRU5fRVhDTFVERV9TQUZFX1JFQ0lQRV9ERVBTICs9ICIgXApAQCAtNDgsOCArNTEsMTYgQEAKICAgZG9jYm9vay14c2wtc3R5bGVzaGVldHMtPnBlcmwgXAogICBjYS1jZXJ0aWZpY2F0ZXMtPm9wZW5zc2wgXAogICBpbml0cmFtZnMtZnJhbWV3b3JrLT4ke1ZJUlRVQUwtUlVOVElNRV9iYXNlLXV0aWxzfSBcCi0gIGluaXRyYW1mcy1mcmFtZXdvcmstPnN5c3RlbWQgXAogICBpbml0cmFtZnMtZnJhbWV3b3JrLT5ldWRldiBcCisgIGluaXRyYW1mcy1mcmFtZXdvcmstPnN5c3RlbWQgXAorICBpbml0cmFtZnMtbW9kdWxlLWluc3RhbGwtZWZpLT5kb3Nmc3Rvb2xzIFwKKyAgaW5pdHJhbWZzLW1vZHVsZS1pbnN0YWxsLWVmaS0+ZTJmc3Byb2dzIFwKKyAgaW5pdHJhbWZzLW1vZHVsZS1pbnN0YWxsLWVmaS0+cGFydGVkIFwKKyAgaW5pdHJhbWZzLW1vZHVsZS1pbnN0YWxsLWVmaS0+dXRpbC1saW51eCBcCisgIGluaXRyYW1mcy1tb2R1bGUtaW5zdGFsbC0+ZTJmc3Byb2dzIFwKKyAgaW5pdHJhbWZzLW1vZHVsZS1pbnN0YWxsLT5ncnViIFwKKyAgaW5pdHJhbWZzLW1vZHVsZS1pbnN0YWxsLT5wYXJ0ZWQgXAorICBpbml0cmFtZnMtbW9kdWxlLWluc3RhbGwtPnV0aWwtbGludXggXAogICBsaWJlcmF0aW9uLWZvbnRzLT5mb250Y29uZmlnIFwKICAgY2FudGFyZWxsLWZvbnRzLT5mb250Y29uZmlnIFwKICAgZ25vbWUtaWNvbi10aGVtZS0+bGlicnN2ZyBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2xpY2Vuc2VzLmNvbmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL2xpY2Vuc2VzLmNvbmYKaW5kZXggZDIxMGEwZS4uM2UyZDI1OCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9saWNlbnNlcy5jb25mCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbGljZW5zZXMuY29uZgpAQCAtMTA1LDYgKzEwNSwxMCBAQAogU1BEWExJQ0VOU0VNQVBbQUZMdjJdID0gIkFGTC0yLjAiCiBTUERYTElDRU5TRU1BUFtBRkx2MV0gPSAiQUZMLTEuMiIKIAorI0NEREwgdmFyaWF0aW9ucworU1BEWExJQ0VOU0VNQVBbQ0RETHYxXSA9ICJDRERMLTEuMCIKK1NQRFhMSUNFTlNFTUFQW0NEREwtMV0gPSAiQ0RETC0xLjAiCisKICNPdGhlciB2YXJpYXRpb25zCiBTUERYTElDRU5TRU1BUFtFUEx2MS4wXSA9ICJFUEwtMS4wIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUtc2RrL2k1ODYuY29uZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS1zZGsvaTU4Ni5jb25mCmluZGV4IDk5MDgzZmIuLjQxZTVlMTUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS1zZGsvaTU4Ni5jb25mCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS1zZGsvaTU4Ni5jb25mCkBAIC0xLDUgKzEsNCBAQAogU0RLX0FSQ0ggPSAiaTU4NiIKIFNES19DQ19BUkNIID0gIi1tYXJjaD1pNTg2IgogQUJJRVhURU5TSU9OX2NsYXNzLW5hdGl2ZXNkayA9ICIiCi1TREtfT0xERVNUX0tFUk5FTCA9ICIyLjYuMzIiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS1zZGsvaTY4Ni5jb25mIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lLXNkay9pNjg2LmNvbmYKaW5kZXggY2YyMjc4NC4uZmU0MDY5NyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lLXNkay9pNjg2LmNvbmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lLXNkay9pNjg2LmNvbmYKQEAgLTEsNCArMSwzIEBACiBTREtfQVJDSCA9ICJpNjg2IgogU0RLX0NDX0FSQ0ggPSAiLW1hcmNoPWk2ODYiCiBBQklFWFRFTlNJT05fY2xhc3MtbmF0aXZlc2RrID0gIiIKLVNES19PTERFU1RfS0VSTkVMID0gIjIuNi4zMiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS1zZGsveDg2XzY0LmNvbmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUtc2RrL3g4Nl82NC5jb25mCmluZGV4IDdkMmU3MTcuLjYxNDM5YjQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS1zZGsveDg2XzY0LmNvbmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lLXNkay94ODZfNjQuY29uZgpAQCAtMSwzICsxLDIgQEAKIFNES19BUkNIID0gIng4Nl82NCIKIEFCSUVYVEVOU0lPTl9jbGFzcy1uYXRpdmVzZGsgPSAiIgotU0RLX09MREVTVF9LRVJORUwgPSAiMi42LjMyIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2ZlYXR1cmUtYXJtLXZmcC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tdmZwLmluYwppbmRleCA2NjdiNjA5Li43YWU3NDU2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tdmZwLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tdmZwLmluYwpAQCAtNSw4ICs1LDggQEAKIFRVTkVWQUxJRFt2ZnBdID0gIkVuYWJsZSBWZWN0b3IgRmxvYXRpbmcgUG9pbnQgKHZmcCkgdW5pdC4iCiBUVU5FX0NDQVJHU19NRlBVIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICd2ZnAnLCAnIHZmcCcsICcnLCBkKX0iCiAKLVRVTkVfQ0NBUkdTICAuPSAiJHtAICgnIC1tZnB1PSVzICcgJSBkLmdldFZhcignVFVORV9DQ0FSR1NfTUZQVScpLnNwbGl0KClbLTFdKSBpZiAoZC5nZXRWYXIoJ1RVTkVfQ0NBUkdTX01GUFUnKSAhPSAnJykgZWxzZSAnJ30iCi1BUk1QS0dTRlhfRlBVID0gIiR7QCAoJy0lcycgICAgICAgICUgZC5nZXRWYXIoJ1RVTkVfQ0NBUkdTX01GUFUnKS5zcGxpdCgpWy0xXS5yZXBsYWNlKCd2ZnB2My1kMTYnLCAndmZwdjNkMTYnKSkgaWYgKGQuZ2V0VmFyKCdUVU5FX0NDQVJHU19NRlBVJykgIT0gJycpIGVsc2UgJyd9IgorVFVORV9DQ0FSR1MgIC49ICIke0AgKCcgLW1mcHU9JXMnICUgZC5nZXRWYXIoJ1RVTkVfQ0NBUkdTX01GUFUnKS5zcGxpdCgpWy0xXSkgaWYgKGQuZ2V0VmFyKCdUVU5FX0NDQVJHU19NRlBVJykgIT0gJycpIGVsc2UgJyd9IgorQVJNUEtHU0ZYX0ZQVSA9ICIke0AgKCctJXMnICAgICAgICUgZC5nZXRWYXIoJ1RVTkVfQ0NBUkdTX01GUFUnKS5zcGxpdCgpWy0xXS5yZXBsYWNlKCd2ZnB2My1kMTYnLCAndmZwdjNkMTYnKSkgaWYgKGQuZ2V0VmFyKCdUVU5FX0NDQVJHU19NRlBVJykgIT0gJycpIGVsc2UgJyd9IgogCiBUVU5FVkFMSURbY2FsbGNvbnZlbnRpb24taGFyZF0gPSAiRW5hYmxlIEVBQkkgaGFyZCBmbG9hdCBjYWxsIGNvbnZlbnRpb24sIHJlcXVpcmVzIFZGUC4iCiBUVU5FX0NDQVJHU19NRkxPQVQgPSAiJHtAIGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ2NhbGxjb252ZW50aW9uLWhhcmQnLCAnaGFyZCcsICdzb2Z0ZnAnLCBkKSBpZiAoZC5nZXRWYXIoJ1RVTkVfQ0NBUkdTX01GUFUnKSAhPSAnJykgZWxzZSAnJyB9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYwppbmRleCAwZTQxMDNiLi5lNjRiMGM4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYwpAQCAtMjUsNiArMjUsNyBAQAogCiAjIFByb3ZpZGUgdGhlIG5mcyBzZXJ2ZXIga2VybmVsIG1vZHVsZSBmb3IgYWxsIHFlbXUgaW1hZ2VzCiBLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3BuLWxpbnV4LXlvY3RvID0gIiBmZWF0dXJlcy9uZnNkL25mc2QtZW5hYmxlLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcG4tbGludXgteW9jdG8tcnQgPSAiIGZlYXR1cmVzL25mc2QvbmZzZC1lbmFibGUuc2NjIgogCiBNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTICs9ICJybmctdG9vbHMiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXVib290LW1pcHMuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdWJvb3QtbWlwcy5pbmMKaW5kZXggMGM2MGNmMi4uN2Q5ZmE1MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdWJvb3QtbWlwcy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdWJvb3QtbWlwcy5pbmMKQEAgLTQsNSArNCw1IEBACiBRQl9NQUNISU5FID0gIi1tYWNoaW5lIG1hbHRhIgogUUJfS0VSTkVMX0NNRExJTkVfQVBQRU5EID0gImNvbnNvbGU9dHR5UzAgY29uc29sZT10dHkiCiAjIEFkZCB0aGUgJ3ZpcnRpby1ybmctcGNpJyBkZXZpY2Ugb3RoZXJ3aXNlIHRoZSBndWVzdCBtYXkgcnVuIG91dCBvZiBlbnRyb3B5Ci1RQl9PUFRfQVBQRU5EID0gIi12Z2EgY2lycnVzIC1zaG93LWN1cnNvciAtdXNiIC11c2JkZXZpY2UgdGFibGV0IC1kZXZpY2UgdmlydGlvLXJuZy1wY2kiCitRQl9PUFRfQVBQRU5EID0gIi12Z2EgY2lycnVzIC1zaG93LWN1cnNvciAtdXNiIC1kZXZpY2UgdXNiLXRhYmxldCAtZGV2aWNlIHZpcnRpby1ybmctcGNpIgogUUJfU1lTVEVNX05BTUUgPSAicWVtdS1zeXN0ZW0tJHtUVU5FX0FSQ0h9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdWJvb3QteDg2LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXVib290LXg4Ni5pbmMKaW5kZXggYWNmOWQ1NS4uMTQ1NmJmNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdWJvb3QteDg2LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9xZW11Ym9vdC14ODYuaW5jCkBAIC0xMiw5ICsxMiw2IEBACiBRQl9BVURJT19PUFQgPSAiLXNvdW5kaHcgYWM5NyxlczEzNzAiCiBRQl9LRVJORUxfQ01ETElORV9BUFBFTkQgPSAidmdhPTAgdXZlc2FmYi5tb2RlX29wdGlvbj0ke1VWRVNBX01PREV9IG9wcm9maWxlLnRpbWVyPTEgdXZlc2FmYi50YXNrX3RpbWVvdXQ9LTEiCiAjIEFkZCB0aGUgJ3ZpcnRpby1ybmctcGNpJyBkZXZpY2Ugb3RoZXJ3aXNlIHRoZSBndWVzdCBtYXkgcnVuIG91dCBvZiBlbnRyb3B5Ci1RQl9PUFRfQVBQRU5EID0gIi12Z2Egdm13YXJlIC1zaG93LWN1cnNvciAtdXNiIC11c2JkZXZpY2UgdGFibGV0IC1kZXZpY2UgdmlydGlvLXJuZy1wY2kiCitRQl9PUFRfQVBQRU5EID0gIi12Z2Egdm13YXJlIC1zaG93LWN1cnNvciAtdXNiIC1kZXZpY2UgdXNiLXRhYmxldCAtZGV2aWNlIHZpcnRpby1ybmctcGNpIgogCi1LRVJORUxfTU9EVUxFX0FVVE9MT0FEICs9ICJ1dmVzYWZiIgotS0VSTkVMX01PRFVMRV9QUk9CRUNPTkYgKz0gInV2ZXNhZmIiCiBVVkVTQV9NT0RFID89ICI2NDB4NDgwLTMyIgotbW9kdWxlX2NvbmZfdXZlc2FmYiA9ICJvcHRpb25zIHV2ZXNhZmIgbW9kZV9vcHRpb249JHtVVkVTQV9NT0RFfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMyLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMyLmluYwppbmRleCBjZTA0NDVmLi5hOTBjMGYwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMi5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzIuaW5jCkBAIC02LDcgKzYsOCBAQAogVFVORUNPTkZMSUNUU1ttaXBzMzJdID0gIm42NCBuMzIiCiBUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnbWlwczMyJywgJyAtbWFyY2g9bWlwczMyJywgJycsIGQpfSIKIAotQVZBSUxUVU5FUyArPSAibWlwczMyIG1pcHMzMmVsIG1pcHMzMi1uZiBtaXBzMzJlbC1uZiIKKyMgQmFzZSBUdW5lcyAoSGFyZCBGbG9hdCkKK0FWQUlMVFVORVMgKz0gIm1pcHMzMiBtaXBzMzJlbCIKIAogVFVORV9GRUFUVVJFU190dW5lLW1pcHMzMiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzfSBtaXBzMzIiCiBNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzMzIgPSAibWlwczMyIgpAQCAtMTYsNiArMTcsOSBAQAogTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczMyZWwgPSAibWlwczMyZWwiCiBQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczMyZWwgPSAibWlwc2VsIG1pcHMzMmVsIgogCisjIFNvZnQgRmxvYXQKK0FWQUlMVFVORVMgKz0gIm1pcHMzMi1uZiBtaXBzMzJlbC1uZiIKKwogVFVORV9GRUFUVVJFU190dW5lLW1pcHMzMi1uZiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzLW5mfSBtaXBzMzIiCiBNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzMzItbmYgPSAibWlwczMyIgogUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMzMi1uZiA9ICJtaXBzLW5mIG1pcHMzMi1uZiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMycjIuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzJyMi5pbmMKaW5kZXggNWUzOThjYi4uMTQ0NzNjYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzJyMi5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzJyMi5pbmMKQEAgLTYsNyArNiw3IEBACiBUVU5FQ09ORkxJQ1RTW21pcHMzMnIyXSA9ICJuNjQgbjMyIgogVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ21pcHMzMnIyJywgJyAtbWFyY2g9bWlwczMycjInLCAnJywgZCl9IgogCi0jIGhhcmQgZmxvYXQKKyMgQmFzZSBUdW5lcyAoSGFyZCBGbG9hdCkKIEFWQUlMVFVORVMgKz0gIm1pcHMzMnIyIG1pcHMzMnIyZWwiCiAKIFRVTkVfRkVBVFVSRVNfdHVuZS1taXBzMzJyMiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzfSBtaXBzMzJyMiIKQEAgLTE3LDcgKzE3LDcgQEAKIE1JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHMzMnIyZWwgPSAibWlwczMycjJlbCIKIFBBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzMzJyMmVsID0gIm1pcHNlbCBtaXBzMzJlbCBtaXBzMzJyMmVsIgogCi0jIHNvZnQgZmxvYXQKKyMgU29mdCBGbG9hdAogQVZBSUxUVU5FUyArPSAibWlwczMycjItbmYgbWlwczMycjJlbC1uZiIKIAogVFVORV9GRUFUVVJFU190dW5lLW1pcHMzMnIyLW5mID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHMtbmZ9IG1pcHMzMnIyIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzJyNi5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMnI2LmluYwppbmRleCBkZWEzM2VhLi40NDM2OWNiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMnI2LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMnI2LmluYwpAQCAtNiw3ICs2LDcgQEAKIFRVTkVDT05GTElDVFNbbWlwc2lzYTMycjZdID0gIm42NCBuMzIiCiBUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnbWlwc2lzYTMycjYnLCAnIC1tYXJjaD1taXBzMzJyNicsICcnLCBkKX0iCiAKLSMgQmFzZSBUdW5lcworIyBCYXNlIFR1bmVzIChIYXJkIEZsb2F0KQogQVZBSUxUVU5FUyArPSAibWlwc2lzYTMycjYgbWlwc2lzYTMycjZlbCIKIAogVFVORV9GRUFUVVJFU190dW5lLW1pcHNpc2EzMnI2ID0gIm8zMiBiaWdlbmRpYW4gbWlwc2lzYTMycjYgZnB1LWhhcmQgcjYiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYtYmFzZS5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYtYmFzZS5pbmMKaW5kZXggNzM2NTk1My4uMDIzZWI1ZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2LWJhc2UuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni1iYXNlLmluYwpAQCAtMTAsNyArMTAsOCBAQAogCiBNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTICs9ICJrZXJuZWwtbW9kdWxlcyIKIAotSU1BR0VfRlNUWVBFUyArPSAibGl2ZSIKK0lNQUdFX0ZTVFlQRVMgPz0gImxpdmUiCitOT0lTTyA/PSAiMSIKIAogS0VSTkVMX0lNQUdFVFlQRSA/PSAiYnpJbWFnZSIKIApAQCAtMjAsNyArMjEsNyBAQAogIyBrZXJuZWwtcmVsYXRlZCB2YXJpYWJsZXMKICMKIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/Pz0gImxpbnV4LXlvY3RvIgotUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8gPz89ICI0LjEwJSIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvID8/PSAiNC4xMiUiCiAKICMKICMgWFNFUlZFUiBzdWJjb21wb25lbnRzLCB1c2VkIHRvIGJ1aWxkIHRoZSBYU0VSVkVSIHZhcmlhYmxlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYvYXJjaC14ODYuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2L2FyY2gteDg2LmluYwppbmRleCBlNTFkNTk1Li43MDgxNGI4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYvYXJjaC14ODYuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni9hcmNoLXg4Ni5pbmMKQEAgLTI2LDYgKzI2LDcgQEAKIFRVTkVfQVNBUkdTICs9ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdteDMyJywgJy14MzInLCAnJywgZCl9IgogIyB1c2VyIG1vZGUgcWVtdSBkb2Vzbid0IHN1cHBvcnQgeDMyCiBNQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRURfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdteDMyJywgJ3FlbXUtdXNlcm1vZGUnLCAnJywgZCl9IgorTUFDSElORU9WRVJSSURFUyA9LiAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnbXgzMicsICd4ODYteDMyOicsICcnICxkKX0iCiAKICMgRUxGNjQgQUJJCiBUVU5FVkFMSURbbTY0XSA9ICJJQTMyZSAoeDg2XzY0KSBFTEY2NCBzdGFuZGFyZCBBQkkiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdWFybS5jb25mIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXVhcm0uY29uZgppbmRleCA2Yjg3NWU0Li5jODkzMmRkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdWFybS5jb25mCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11YXJtLmNvbmYKQEAgLTE1LDYgKzE1LDYgQEAKIFFCX01BQ0hJTkUgPSAiLW1hY2hpbmUgdmVyc2F0aWxlcGIiCiBRQl9LRVJORUxfQ01ETElORV9BUFBFTkQgPSAiY29uc29sZT10dHlBTUEwLDExNTIwMCBjb25zb2xlPXR0eSIKICMgQWRkIHRoZSAndmlydGlvLXJuZy1wY2knIGRldmljZSBvdGhlcndpc2UgdGhlIGd1ZXN0IG1heSBydW4gb3V0IG9mIGVudHJvcHkKLVFCX09QVF9BUFBFTkQgPSAiLXNob3ctY3Vyc29yIC11c2IgLXVzYmRldmljZSB0YWJsZXQgLWRldmljZSB2aXJ0aW8tcm5nLXBjaSIKLVBSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvID8/PSAiNC4xMCUiCitRQl9PUFRfQVBQRU5EID0gIi1zaG93LWN1cnNvciAtdXNiIC1kZXZpY2UgdXNiLXRhYmxldCAtZGV2aWNlIHZpcnRpby1ybmctcGNpIgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8gPz89ICI0LjEyJSIKIFFCX0RUQiA9ICIke0BiYXNlX3ZlcnNpb25fbGVzc19vcl9lcXVhbCgnUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8nLCAnNC43JywgJycsICd6SW1hZ2UtdmVyc2F0aWxlLXBiLmR0YicsIGQpfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11cHBjLmNvbmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdXBwYy5jb25mCmluZGV4IGE5ZWY2NGIuLjUzN2IyZjYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11cHBjLmNvbmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXVwcGMuY29uZgpAQCAtMTcsNSArMTcsNSBAQAogUUJfQ1BVID0gIi1jcHUgRzQiCiBRQl9LRVJORUxfQ01ETElORV9BUFBFTkQgPSAiY29uc29sZT10dHkgY29uc29sZT10dHlTMCIKICMgQWRkIHRoZSAndmlydGlvLXJuZy1wY2knIGRldmljZSBvdGhlcndpc2UgdGhlIGd1ZXN0IG1heSBydW4gb3V0IG9mIGVudHJvcHkKLVFCX09QVF9BUFBFTkQgPSAiLXNob3ctY3Vyc29yIC11c2IgLXVzYmRldmljZSB0YWJsZXQgLWRldmljZSB2aXJ0aW8tcm5nLXBjaSIKK1FCX09QVF9BUFBFTkQgPSAiLXNob3ctY3Vyc29yIC11c2IgLWRldmljZSB1c2ItdGFibGV0IC1kZXZpY2UgdmlydGlvLXJuZy1wY2kiCiBRQl9UQVBfT1BUID0gIi1uZXRkZXYgdGFwLGlkPW5ldDAsaWZuYW1lPUBUQVBALHNjcmlwdD1ubyxkb3duc2NyaXB0PW5vIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXV4ODYtNjQuY29uZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11eDg2LTY0LmNvbmYKaW5kZXggMTAxODljYi4uZmNjNDQ1OSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXV4ODYtNjQuY29uZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdXg4Ni02NC5jb25mCkBAIC0yNSw5ICsyNSwxMyBAQAogICAgICAgICAgICB4c2VydmVyLXhvcmctbW9kdWxlLWxpYmludDEwIFwKICAgICAgICAgICAgIgogCi1NQUNISU5FX0ZFQVRVUkVTICs9ICJ4ODYiCitNQUNISU5FX0ZFQVRVUkVTICs9ICJ4ODYgcGNpIgogCiBNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUyArPSAidjg2ZCIKIAorS0VSTkVMX01PRFVMRV9BVVRPTE9BRCArPSAidXZlc2FmYiIKK0tFUk5FTF9NT0RVTEVfUFJPQkVDT05GICs9ICJ1dmVzYWZiIgorbW9kdWxlX2NvbmZfdXZlc2FmYiA9ICJvcHRpb25zIHV2ZXNhZmIgbW9kZV9vcHRpb249JHtVVkVTQV9NT0RFfSIKKwogV0tTX0ZJTEUgPz0gImRpcmVjdGRpc2sud2tzIgogZG9faW1hZ2Vfd2ljW2RlcGVuZHNdICs9ICJzeXNsaW51eDpkb19wb3B1bGF0ZV9zeXNyb290IHN5c2xpbnV4LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IG10b29scy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBkb3Nmc3Rvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXV4ODYuY29uZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11eDg2LmNvbmYKaW5kZXggYzI2ZGRhMi4uYzUzZjdhOSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXV4ODYuY29uZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdXg4Ni5jb25mCkBAIC0yNCw5ICsyNCwxMyBAQAogICAgICAgICAgICB4c2VydmVyLXhvcmctbW9kdWxlLWxpYmludDEwIFwKICAgICAgICAgICAgIgogCi1NQUNISU5FX0ZFQVRVUkVTICs9ICJ4ODYiCitNQUNISU5FX0ZFQVRVUkVTICs9ICJ4ODYgcGNpIgogCiBNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUyArPSAidjg2ZCIKIAorS0VSTkVMX01PRFVMRV9BVVRPTE9BRCArPSAidXZlc2FmYiIKK0tFUk5FTF9NT0RVTEVfUFJPQkVDT05GICs9ICJ1dmVzYWZiIgorbW9kdWxlX2NvbmZfdXZlc2FmYiA9ICJvcHRpb25zIHV2ZXNhZmIgbW9kZV9vcHRpb249JHtVVkVTQV9NT0RFfSIKKwogV0tTX0ZJTEUgPz0gImRpcmVjdGRpc2sud2tzIgogZG9faW1hZ2Vfd2ljW2RlcGVuZHNdICs9ICJzeXNsaW51eDpkb19wb3B1bGF0ZV9zeXNyb290IHN5c2xpbnV4LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IG10b29scy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBkb3Nmc3Rvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9zYW5pdHkuY29uZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2NvbmYvc2FuaXR5LmNvbmYKaW5kZXggNDZiZGJlYi4uMzkwZDM0MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvY29uZi9zYW5pdHkuY29uZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9jb25mL3Nhbml0eS5jb25mCkBAIC0zLDcgKzMsNyBAQAogIyBTZWUgc2FuaXR5LmJiY2xhc3MKICMKICMgRXhwZXJ0IHVzZXJzIGNhbiBjb25maXJtIHRoZWlyIHNhbml0eSB3aXRoICJ0b3VjaCBjb25mL3Nhbml0eS5jb25mIgotQkJfTUlOX1ZFUlNJT04gPSAiMS4zMy40IgorQkJfTUlOX1ZFUlNJT04gPSAiMS4zNS4wIgogCiBTQU5JVFlfQUJJRklMRSA9ICIke1RNUERJUn0vYWJpX3ZlcnNpb24iCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9wa2djb25mIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL3BrZ2NvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFhNTIyMQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9wa2djb25mCkBAIC0wLDAgKzEsMTAgQEAKK0NvcHlyaWdodCAoYykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCwgMjAxNSwgMjAxNiwgMjAxNworICAgIHBrZ2NvbmYgYXV0aG9ycyAoc2VlIEFVVEhPUlMgZmlsZSBpbiBzb3VyY2UgZGlyZWN0b3J5KS4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CitwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorCitUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcyBpcycgYW5kIHdpdGhvdXQgYW55IHdhcnJhbnR5LCBleHByZXNzIG9yCitpbXBsaWVkLiAgSW4gbm8gZXZlbnQgc2hhbGwgdGhlIGF1dGhvcnMgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBhcmlzaW5nCitmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2ZzLXBlcm1zLXBlcnNpc3RlbnQtbG9nLnR4dCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2ZzLXBlcm1zLXBlcnNpc3RlbnQtbG9nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTdjZjNhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvZmlsZXMvZnMtcGVybXMtcGVyc2lzdGVudC1sb2cudHh0CkBAIC0wLDAgKzEsNjYgQEAKKyMgVGhpcyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2l0aCBrbm93biBwZXJtaXNzaW9ucy4KKyMgSXQgaXMgdXNlZCBieSB0aGUgcGFja2FnaW5nIGNsYXNzIHRvIGVuc3VyZSB0aGF0IHRoZSBwZXJtaXNzaW9ucywgb3duZXJzIGFuZAorIyBncm91cCBvZiBsaXN0ZWQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGFyZSBpbiBzeW5jIGFjcm9zcyB0aGUgc3lzdGVtLgorIworIyBUaGUgZm9ybWF0IG9mIHRoaXMgZmlsZSAKKyMKKyM8cGF0aD4JPG1vZGU+CTx1aWQ+CTxnaWQ+CTx3YWxrPgk8Zm1vZGU+CTxmdWlkPgk8ZmdpZD4KKyMKKyMgb3IKKyMKKyM8cGF0aD4gbGluayA8dGFyZ2V0PgorIworIyA8cGF0aD46IGRpcmVjdG9yeSBwYXRoCisjIDxtb2RlPjogbW9kZSBmb3IgZGlyZWN0b3J5CisjIDx1aWQ+OiAgdWlkIGZvciBkaXJlY3RvcnkKKyMgPGdpZD46ICBnaWQgZm9yIGRpcmVjdG9yeQorIyA8d2Fsaz46IHJlY3Vyc2l2ZWx5IHdhbGsgdGhlIGRpcmVjdG9yeT8gIHRydWUgb3IgZmFsc2UKKyMgPGZtb2RlPjogaWYgd2Fsa2luZywgbmV3IG1vZGUgZm9yIGZpbGVzCisjIDxmdWlkPjogIGlmIHdhbGtpbmcsIG5ldyB1aWQgZm9yIGZpbGVzCisjIDxmZ2lkPjogIGlmIHdhbGtpbmcsIG5ldyBnaWQgZm9yIGZpbGVzCisjIDx0YXJnZXQ+OiB0dXJuIHRoZSBkaXJlY3RvcnkgaW50byBhIHN5bWxpbmsgcG9pbnQgdG8gdGFyZ2V0CisjCisjIGluIG1vZGUsIHVpZCBvciBnaWQsIGEgIi0iIG1lYW5zIGRvbid0IGNoYW5nZSBhbnkgZXhpc3RpbmcgdmFsdWVzCisjCisjIC91c3Ivc3JjCQkwNzU1CXJvb3QJcm9vdAlmYWxzZQktCS0JLQorIyAvdXNyL3NoYXJlL21hbgkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290CisKKyMgTm90ZTogYWxsIHN0YW5kYXJkIGNvbmZpZyBkaXJlY3RvcmllcyBhcmUgYXV0b21hdGljYWxseSBhc3NpZ25lZCAiMDc1NSByb290IHJvb3QgZmFsc2UgLSAtIC0iCisKKyMgRG9jdW1lbnRhdGlvbiBzaG91bGQgYWx3YXlzIGJlIGNvcnJlY3RlZAorJHttYW5kaXJ9CQkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290Ciske2luZm9kaXJ9CQkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290Ciske2RvY2Rpcn0JCTA3NTUJcm9vdAlyb290CXRydWUJMDY0NAlyb290CXJvb3QKKyR7ZGF0YWRpcn0vZ3RrLWRvYwkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290CisKKyMgRml4dXAgbG9jYWxlcworJHtkYXRhZGlyfS9sb2NhbGUJMDc1NQlyb290CXJvb3QJdHJ1ZQkwNjQ0CXJvb3QJcm9vdAorCisjIENsZWFudXAgaGVhZGVycworJHtpbmNsdWRlZGlyfQkJMDc1NQlyb290CXJvb3QJdHJ1ZQkwNjQ0CXJvb3QJcm9vdAorJHtvbGRpbmNsdWRlZGlyfQkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290CisKKyMgQ2xlYW51cCBkZWJ1ZyBzcmMKKy91c3Ivc3JjL2RlYnVnCQkwNzU1CXJvb3QJcm9vdAl0cnVlCS0Jcm9vdAlyb290CisKKyMgSXRlbXMgZnJvbSBiYXNlLWZpbGVzCisjIExpbmtzCiske2xvY2Fsc3RhdGVkaXJ9L3J1bglsaW5rCS9ydW4KKyR7bG9jYWxzdGF0ZWRpcn0vbG9jawlsaW5rCS9ydW4vbG9jaworJHtsb2NhbHN0YXRlZGlyfS90bXAJbGluawl2b2xhdGlsZS90bXAKKworL2hvbWUJCQkJMDc1NQlyb290CXJvb3QJZmFsc2UgLSAtIC0KKy9zcnYJCQkJMDc1NQlyb290CXJvb3QJZmFsc2UgLSAtIC0KKyR7cHJlZml4fS9zcmMJCQkwNzU1CXJvb3QJcm9vdAlmYWxzZSAtIC0gLQorJHtsb2NhbHN0YXRlZGlyfS9sb2NhbAkJMDc1NQlyb290CXJvb3QJZmFsc2UgLSAtIC0KKworIyBTcGVjaWFsIHBlcm1pc3Npb25zIGZyb20gYmFzZS1maWxlcworIyBTZXQgMTc3NworL3RtcAkJCQkwMTc3Nwlyb290CXJvb3QJZmFsc2UgLSAtIC0KKyR7bG9jYWxzdGF0ZWRpcn0vdm9sYXRpbGUvdG1wCTAxNzc3CXJvb3QJcm9vdAlmYWxzZSAtIC0gLQorCisjIFNldCAwNzAwCiske1JPT1RfSE9NRX0JCQkwNzAwCXJvb3QJcm9vdAlmYWxzZSAtIC0gLQorCisjIFNldCAyNzc1LWxzYgorJHtsb2NhbHN0YXRlZGlyfS9tYWlsCQkwMjc3NQlyb290CW1haWwJZmFsc2UgLSAtIC0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9iYmxheWVycy9jcmVhdGUucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvYmJsYXllcnMvY3JlYXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNDFmZTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvYmJsYXllcnMvY3JlYXRlLnB5CkBAIC0wLDAgKzEsNjYgQEAKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzaHV0aWwKKworaW1wb3J0IGJiLnV0aWxzCisKK2Zyb20gYmJsYXllcnMuY29tbW9uIGltcG9ydCBMYXllclBsdWdpbgorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignYml0YmFrZS1sYXllcnMnKQorCitkZWYgcGx1Z2luX2luaXQocGx1Z2lucyk6CisgICAgcmV0dXJuIENyZWF0ZVBsdWdpbigpCisKK2RlZiByZWFkX3RlbXBsYXRlKHRlbXBsYXRlLCB0ZW1wbGF0ZV9kaXI9J3RlbXBsYXRlcycpOgorICAgIGxpbmVzID0gc3RyKCkKKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksIHRlbXBsYXRlX2RpciwgdGVtcGxhdGUpKSBhcyBmZDoKKyAgICAgICAgbGluZXMgPSAnJy5qb2luKGZkLnJlYWRsaW5lcygpKQorICAgIHJldHVybiBsaW5lcworCitjbGFzcyBDcmVhdGVQbHVnaW4oTGF5ZXJQbHVnaW4pOgorICAgIGRlZiBkb19jcmVhdGVfbGF5ZXIoc2VsZiwgYXJncyk6CisgICAgICAgICIiIkNyZWF0ZSBhIGJhc2ljIGxheWVyIiIiCisgICAgICAgIGxheWVyZGlyID0gb3MucGF0aC5hYnNwYXRoKGFyZ3MubGF5ZXJkaXIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGxheWVyZGlyKToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlNwZWNpZmllZCBsYXllciBkaXJlY3RvcnkgZXhpc3RzXG4iKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICAjIGNyZWF0ZSBkaXJzCisgICAgICAgIGNvbmYgPSBvcy5wYXRoLmpvaW4obGF5ZXJkaXIsICdjb25mJykKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGNvbmYpCisKKyAgICAgICAgIyBDcmVhdGUgdGhlIFJFQURNRSBmcm9tIHRlbXBsYXRlcy9SRUFETUUKKyAgICAgICAgcmVhZG1lX3RlbXBsYXRlID0gIHJlYWRfdGVtcGxhdGUoJ1JFQURNRScpICUgKGFyZ3MubGF5ZXJkaXIsIGFyZ3MubGF5ZXJkaXIsIGFyZ3MubGF5ZXJkaXIsIGFyZ3MubGF5ZXJkaXIsIGFyZ3MubGF5ZXJkaXIsIGFyZ3MubGF5ZXJkaXIpCisgICAgICAgIHJlYWRtZSA9IG9zLnBhdGguam9pbihsYXllcmRpciwgJ1JFQURNRScpCisgICAgICAgIHdpdGggb3BlbihyZWFkbWUsICd3JykgYXMgZmQ6CisgICAgICAgICAgICBmZC53cml0ZShyZWFkbWVfdGVtcGxhdGUpCisKKyAgICAgICAgIyBDb3B5IHRoZSBNSVQgbGljZW5zZSBmcm9tIG1ldGEKKyAgICAgICAgY29weWluZyA9ICdDT1BZSU5HLk1JVCcKKyAgICAgICAgZG4gPSBvcy5wYXRoLmRpcm5hbWUKKyAgICAgICAgbGljZW5zZV9zcmMgPSBvcy5wYXRoLmpvaW4oZG4oZG4oZG4oX19maWxlX18pKSksIGNvcHlpbmcpCisgICAgICAgIGxpY2Vuc2VfZHN0ID0gb3MucGF0aC5qb2luKGxheWVyZGlyLCBjb3B5aW5nKQorICAgICAgICBzaHV0aWwuY29weShsaWNlbnNlX3NyYywgbGljZW5zZV9kc3QpCisKKyAgICAgICAgIyBDcmVhdGUgdGhlIGxheWVyLmNvbmYgZnJvbSB0ZW1wbGF0ZXMvbGF5ZXIuY29uZgorICAgICAgICBsYXllcmNvbmZfdGVtcGxhdGUgPSByZWFkX3RlbXBsYXRlKCdsYXllci5jb25mJykgJSAoYXJncy5sYXllcmRpciwgYXJncy5sYXllcmRpciwgYXJncy5sYXllcmRpciwgYXJncy5wcmlvcml0eSkKKyAgICAgICAgbGF5ZXJjb25mID0gb3MucGF0aC5qb2luKGNvbmYsICdsYXllci5jb25mJykKKyAgICAgICAgd2l0aCBvcGVuKGxheWVyY29uZiwgJ3cnKSBhcyBmZDoKKyAgICAgICAgICAgIGZkLndyaXRlKGxheWVyY29uZl90ZW1wbGF0ZSkKKworICAgICAgICAjIENyZWF0ZSB0aGUgZXhhbXBsZSBmcm9tIHRlbXBsYXRlcy9leGFtcGxlLmJiCisgICAgICAgIGV4YW1wbGVfdGVtcGxhdGUgPSByZWFkX3RlbXBsYXRlKCdleGFtcGxlLmJiJykKKyAgICAgICAgZXhhbXBsZSA9IG9zLnBhdGguam9pbihsYXllcmRpciwgJ3JlY2lwZXMtJyArIGFyZ3MuZXhhbXBsZXJlY2lwZSwgYXJncy5leGFtcGxlcmVjaXBlKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZXhhbXBsZSkKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihleGFtcGxlLCBhcmdzLmV4YW1wbGVyZWNpcGUgKyAnLmJiJyksICd3JykgYXMgZmQ6CisgICAgICAgICAgICBmZC53cml0ZShleGFtcGxlX3RlbXBsYXRlKQorCisgICAgICAgIGxvZ2dlci5wbGFpbignQWRkIHlvdXIgbmV3IGxheWVyIHdpdGggXCdiaXRiYWtlLWxheWVycyBhZGQtbGF5ZXIgJXNcJycgJSBhcmdzLmxheWVyZGlyKQorCisgICAgZGVmIHJlZ2lzdGVyX2NvbW1hbmRzKHNlbGYsIHNwKToKKyAgICAgICAgcGFyc2VyX2NyZWF0ZV9sYXllciA9IHNlbGYuYWRkX2NvbW1hbmQoc3AsICdjcmVhdGUtbGF5ZXInLCBzZWxmLmRvX2NyZWF0ZV9sYXllciwgcGFyc2VyZWNpcGVzPUZhbHNlKQorICAgICAgICBwYXJzZXJfY3JlYXRlX2xheWVyLmFkZF9hcmd1bWVudCgnbGF5ZXJkaXInLCBoZWxwPSdMYXllciBkaXJlY3RvcnkgdG8gY3JlYXRlJykKKyAgICAgICAgcGFyc2VyX2NyZWF0ZV9sYXllci5hZGRfYXJndW1lbnQoJy0tcHJpb3JpdHknLCAnLXAnLCBkZWZhdWx0PTYsIGhlbHA9J0xheWVyIGRpcmVjdG9yeSB0byBjcmVhdGUnKQorICAgICAgICBwYXJzZXJfY3JlYXRlX2xheWVyLmFkZF9hcmd1bWVudCgnLS1leGFtcGxlLXJlY2lwZS1uYW1lJywgJy1lJywgZGVzdD0nZXhhbXBsZXJlY2lwZScsIGRlZmF1bHQ9J2V4YW1wbGUnLCBoZWxwPSdGaWxlbmFtZSBvZiB0aGUgZXhhbXBsZSByZWNpcGUnKQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvYmJsYXllcnMvdGVtcGxhdGVzL1JFQURNRSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9iYmxheWVycy90ZW1wbGF0ZXMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNzdmOGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvYmJsYXllcnMvdGVtcGxhdGVzL1JFQURNRQpAQCAtMCwwICsxLDQxIEBACitUaGlzIFJFQURNRSBmaWxlIGNvbnRhaW5zIGluZm9ybWF0aW9uIG9uIHRoZSBjb250ZW50cyBvZiB0aGUgJXMgbGF5ZXIuCisKK1BsZWFzZSBzZWUgdGhlIGNvcnJlc3BvbmRpbmcgc2VjdGlvbnMgYmVsb3cgZm9yIGRldGFpbHMuCisKK0RlcGVuZGVuY2llcworPT09PT09PT09PT09CisKKyAgVVJJOiA8Zmlyc3QgZGVwZW5kZW5jeT4KKyAgYnJhbmNoOiA8YnJhbmNoIG5hbWU+CisKKyAgVVJJOiA8c2Vjb25kIGRlcGVuZGVuY3k+CisgIGJyYW5jaDogPGJyYW5jaCBuYW1lPgorCisgIC4KKyAgLgorICAuCisKK1BhdGNoZXMKKz09PT09PT0KKworUGxlYXNlIHN1Ym1pdCBhbnkgcGF0Y2hlcyBhZ2FpbnN0IHRoZSAlcyBsYXllciB0byB0aGUgeHh4eCBtYWlsaW5nIGxpc3QgKHh4eHhAenp6ei5vcmcpCithbmQgY2M6IHRoZSBtYWludGFpbmVyOgorCitNYWludGFpbmVyOiBYWFggWVlZWVlZIDx4eHgueXl5eXl5QHp6enp6LmNvbT4KKworVGFibGUgb2YgQ29udGVudHMKKz09PT09PT09PT09PT09PT09CisKKyAgSS4gQWRkaW5nIHRoZSAlcyBsYXllciB0byB5b3VyIGJ1aWxkCisgSUkuIE1pc2MKKworCitJLiBBZGRpbmcgdGhlICVzIGxheWVyIHRvIHlvdXIgYnVpbGQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUnVuICdiaXRiYWtlLWxheWVycyBhZGQtbGF5ZXIgJXMnCisKK0lJLiBNaXNjCis9PT09PT09PQorCistLS0gcmVwbGFjZSB3aXRoIHNwZWNpZmljIGluZm9ybWF0aW9uIGFib3V0IHRoZSAlcyBsYXllciAtLS0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9iYmxheWVycy90ZW1wbGF0ZXMvZXhhbXBsZS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9iYmxheWVycy90ZW1wbGF0ZXMvZXhhbXBsZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGI4NzNkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL2JibGF5ZXJzL3RlbXBsYXRlcy9leGFtcGxlLmJiCkBAIC0wLDAgKzEsMTEgQEAKK1NVTU1BUlkgPSAiYml0YmFrZS1sYXllcnMgcmVjaXBlIgorREVTQ1JJUFRJT04gPSAiUmVjaXBlIGNyZWF0ZWQgYnkgYml0YmFrZS1sYXllcnMiCitMSUNFTlNFID0gIk1JVCIKKworcHl0aG9uIGRvX2J1aWxkKCkgeworICAgIGJiLnBsYWluKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworICAgIGJiLnBsYWluKCIqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiIpOworICAgIGJiLnBsYWluKCIqICBFeGFtcGxlIHJlY2lwZSBjcmVhdGVkIGJ5IGJpdGJha2UtbGF5ZXJzICAgKiIpOworICAgIGJiLnBsYWluKCIqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiIpOworICAgIGJiLnBsYWluKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL2JibGF5ZXJzL3RlbXBsYXRlcy9sYXllci5jb25mIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL2JibGF5ZXJzL3RlbXBsYXRlcy9sYXllci5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMDMwMDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvYmJsYXllcnMvdGVtcGxhdGVzL2xheWVyLmNvbmYKQEAgLTAsMCArMSwxMCBAQAorIyBXZSBoYXZlIGEgY29uZiBhbmQgY2xhc3NlcyBkaXJlY3RvcnksIGFkZCB0byBCQlBBVEgKK0JCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IgorCisjIFdlIGhhdmUgcmVjaXBlcy0qIGRpcmVjdG9yaWVzLCBhZGQgdG8gQkJGSUxFUworQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiBcCisgICAgICAgICAgICAke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIgorCitCQkZJTEVfQ09MTEVDVElPTlMgKz0gIiVzIgorQkJGSUxFX1BBVFRFUk5fJXMgPSAiXiR7TEFZRVJESVJ9LyIKK0JCRklMRV9QUklPUklUWV8lcyA9ICIlcyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9idWlsZGhpc3RvcnlfYW5hbHlzaXMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvYnVpbGRoaXN0b3J5X2FuYWx5c2lzLnB5CmluZGV4IDNhNWI3YjYuLjNlODZhNDYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9idWlsZGhpc3RvcnlfYW5hbHlzaXMucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL2J1aWxkaGlzdG9yeV9hbmFseXNpcy5weQpAQCAtMTQzLDIyICsxNDMsMjUgQEAKICAgICAgICAgICAgIG91dCArPSAnXG4gICcuam9pbihsaXN0KGRpZmYpWzI6XSkKICAgICAgICAgICAgIG91dCArPSAnXG4gIC0tJwogICAgICAgICBlbGlmIHNlbGYuZmllbGRuYW1lIGluIGltZ19tb25pdG9yX2ZpbGVzIG9yICcvaW1hZ2UtZmlsZXMvJyBpbiBzZWxmLnBhdGg6Ci0gICAgICAgICAgICBmaWVsZG5hbWUgPSBzZWxmLmZpZWxkbmFtZQotICAgICAgICAgICAgaWYgJy9pbWFnZS1maWxlcy8nIGluIHNlbGYucGF0aDoKLSAgICAgICAgICAgICAgICBmaWVsZG5hbWUgPSBvcy5wYXRoLmpvaW4oJy8nICsgc2VsZi5wYXRoLnNwbGl0KCcvaW1hZ2UtZmlsZXMvJylbMV0sIHNlbGYuZmllbGRuYW1lKQotICAgICAgICAgICAgICAgIG91dCA9ICdDaGFuZ2VzIHRvICVzOlxuICAnICUgZmllbGRuYW1lCisgICAgICAgICAgICBpZiBzZWxmLmZpbGVjaGFuZ2VzIG9yIChzZWxmLm9sZHZhbHVlIGFuZCBzZWxmLm5ld3ZhbHVlKToKKyAgICAgICAgICAgICAgICBmaWVsZG5hbWUgPSBzZWxmLmZpZWxkbmFtZQorICAgICAgICAgICAgICAgIGlmICcvaW1hZ2UtZmlsZXMvJyBpbiBzZWxmLnBhdGg6CisgICAgICAgICAgICAgICAgICAgIGZpZWxkbmFtZSA9IG9zLnBhdGguam9pbignLycgKyBzZWxmLnBhdGguc3BsaXQoJy9pbWFnZS1maWxlcy8nKVsxXSwgc2VsZi5maWVsZG5hbWUpCisgICAgICAgICAgICAgICAgICAgIG91dCA9ICdDaGFuZ2VzIHRvICVzOlxuICAnICUgZmllbGRuYW1lCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgb3V0ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSAnQ2hhbmdlcyB0byAlcyAnICUgc2VsZi5wYXRoCisgICAgICAgICAgICAgICAgICAgIG91dCA9ICcoJXMpOlxuICAnICUgc2VsZi5maWVsZG5hbWUKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmZpbGVjaGFuZ2VzOgorICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJ1xuICAnLmpvaW4oWyclcycgJSBpIGZvciBpIGluIHNlbGYuZmlsZWNoYW5nZXNdKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGFsaW5lcyA9IHNlbGYub2xkdmFsdWUuc3BsaXRsaW5lcygpCisgICAgICAgICAgICAgICAgICAgIGJsaW5lcyA9IHNlbGYubmV3dmFsdWUuc3BsaXRsaW5lcygpCisgICAgICAgICAgICAgICAgICAgIGRpZmYgPSBkaWZmbGliLnVuaWZpZWRfZGlmZihhbGluZXMsIGJsaW5lcywgZmllbGRuYW1lLCBmaWVsZG5hbWUsIGxpbmV0ZXJtPScnKQorICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJ1xuICAnLmpvaW4obGlzdChkaWZmKSkKKyAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICdcbiAgLS0nCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIG91dGVyOgotICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSAnQ2hhbmdlcyB0byAlcyAnICUgc2VsZi5wYXRoCi0gICAgICAgICAgICAgICAgb3V0ID0gJyglcyk6XG4gICcgJSBzZWxmLmZpZWxkbmFtZQotICAgICAgICAgICAgaWYgc2VsZi5maWxlY2hhbmdlczoKLSAgICAgICAgICAgICAgICBvdXQgKz0gJ1xuICAnLmpvaW4oWyclcycgJSBpIGZvciBpIGluIHNlbGYuZmlsZWNoYW5nZXNdKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBhbGluZXMgPSBzZWxmLm9sZHZhbHVlLnNwbGl0bGluZXMoKQotICAgICAgICAgICAgICAgIGJsaW5lcyA9IHNlbGYubmV3dmFsdWUuc3BsaXRsaW5lcygpCi0gICAgICAgICAgICAgICAgZGlmZiA9IGRpZmZsaWIudW5pZmllZF9kaWZmKGFsaW5lcywgYmxpbmVzLCBmaWVsZG5hbWUsIGZpZWxkbmFtZSwgbGluZXRlcm09JycpCi0gICAgICAgICAgICAgICAgb3V0ICs9ICdcbiAgJy5qb2luKGxpc3QoZGlmZikpCi0gICAgICAgICAgICAgICAgb3V0ICs9ICdcbiAgLS0nCisgICAgICAgICAgICAgICAgb3V0ID0gJycKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG91dCA9ICclcyBjaGFuZ2VkIGZyb20gIiVzIiB0byAiJXMiJyAlIChzZWxmLmZpZWxkbmFtZSwgc2VsZi5vbGR2YWx1ZSwgc2VsZi5uZXd2YWx1ZSkKIApAQCAtMTY5LDcgKzE3Miw3IEBACiAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gY2hnLl9zdHJfaW50ZXJuYWwoRmFsc2UpLnNwbGl0bGluZXMoKToKICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICdcbiAgKiAlcycgJSBsaW5lCiAKLSAgICAgICAgcmV0dXJuICclcyVzJyAlIChwcmVmaXgsIG91dCkKKyAgICAgICAgcmV0dXJuICclcyVzJyAlIChwcmVmaXgsIG91dCkgaWYgb3V0IGVsc2UgJycKIAogY2xhc3MgRmlsZUNoYW5nZToKICAgICBjaGFuZ2V0eXBlX2FkZCA9ICdBJwpAQCAtNTA4LDcgKzUxMSw4IEBACiAgICAgcmV0dXJuICdcbicuam9pbihvdXQpCiAKIAotZGVmIHByb2Nlc3NfY2hhbmdlcyhyZXBvcGF0aCwgcmV2aXNpb24xLCByZXZpc2lvbjI9J0hFQUQnLCByZXBvcnRfYWxsPUZhbHNlLCByZXBvcnRfdmVyPUZhbHNlLCBzaWdzPUZhbHNlLCBzaWdzZGlmZj1GYWxzZSk6CitkZWYgcHJvY2Vzc19jaGFuZ2VzKHJlcG9wYXRoLCByZXZpc2lvbjEsIHJldmlzaW9uMj0nSEVBRCcsIHJlcG9ydF9hbGw9RmFsc2UsIHJlcG9ydF92ZXI9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgIHNpZ3M9RmFsc2UsIHNpZ3NkaWZmPUZhbHNlLCBleGNsdWRlX3BhdGg9Tm9uZSk6CiAgICAgcmVwbyA9IGdpdC5SZXBvKHJlcG9wYXRoKQogICAgIGFzc2VydCByZXBvLmJhcmUgPT0gRmFsc2UKICAgICBjb21taXQgPSByZXBvLmNvbW1pdChyZXZpc2lvbjEpCkBAIC02MDEsNiArNjA1LDE5IEBACiAgICAgICAgICAgICAgICAgICAgIGVsaWYgY2hnLnBhdGggPT0gY2hnMi5wYXRoIGFuZCBjaGcucGF0aC5zdGFydHN3aXRoKCdwYWNrYWdlcy8nKSBhbmQgY2hnMi5maWVsZG5hbWUgaW4gWydQRScsICdQVicsICdQUiddOgogICAgICAgICAgICAgICAgICAgICAgICAgY2hnLnJlbGF0ZWQuYXBwZW5kKGNoZzIpCiAKKyAgICAjIGZpbHRlciBvdXQgdW53YW50ZWQgcGF0aHMKKyAgICBpZiBleGNsdWRlX3BhdGg6CisgICAgICAgIGZvciBjaGcgaW4gY2hhbmdlczoKKyAgICAgICAgICAgIGlmIGNoZy5maWxlY2hhbmdlczoKKyAgICAgICAgICAgICAgICBmY2hncyA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGZjaGcgaW4gY2hnLmZpbGVjaGFuZ2VzOgorICAgICAgICAgICAgICAgICAgICBmb3IgZXBhdGggaW4gZXhjbHVkZV9wYXRoOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZmNoZy5wYXRoLnN0YXJ0c3dpdGgoZXBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZjaGdzLmFwcGVuZChmY2hnKQorICAgICAgICAgICAgICAgIGNoZy5maWxlY2hhbmdlcyA9IGZjaGdzCisKICAgICBpZiByZXBvcnRfYWxsOgogICAgICAgICByZXR1cm4gY2hhbmdlcwogICAgIGVsc2U6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvY29weV9idWlsZHN5c3RlbS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9jb3B5X2J1aWxkc3lzdGVtLnB5CmluZGV4IGEzNzI5MDQuLmFjMmZhZTEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9jb3B5X2J1aWxkc3lzdGVtLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9jb3B5X2J1aWxkc3lzdGVtLnB5CkBAIC0zMiw2ICszMiwxMCBAQAogCiAgICAgICAgIGNvcmViYXNlID0gb3MucGF0aC5hYnNwYXRoKHNlbGYuZC5nZXRWYXIoJ0NPUkVCQVNFJykpCiAgICAgICAgIGxheWVycy5hcHBlbmQoY29yZWJhc2UpCisgICAgICAgICMgVGhlIGJpdGJha2UgYnVpbGQgc3lzdGVtIHVzZXMgdGhlIG1ldGEtc2tlbGV0b24gbGF5ZXIgYXMgYSBsYXlvdXQKKyAgICAgICAgIyBmb3IgY29tbW9uIHJlY2lwaWVzLCBlLmc6IHRoZSByZWNpcGV0b29sIHNjcmlwdCB0byBjcmVhdGUga2VybmVsIHJlY2lwaWVzCisgICAgICAgICMgQWRkIHRoZSBtZXRhLXNrZWxldG9uIGxheWVyIHRvIGJlIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlIGVTREsgaW5zdGFsbGF0aW9uCisgICAgICAgIGxheWVycy5hcHBlbmQob3MucGF0aC5qb2luKGNvcmViYXNlLCAnbWV0YS1za2VsZXRvbicpKQogCiAgICAgICAgICMgRXhjbHVkZSBsYXllcnMKICAgICAgICAgZm9yIGxheWVyX2V4Y2x1ZGUgaW4gc2VsZi5sYXllcnNfZXhjbHVkZToKQEAgLTcxLDYgKzc1LDExIEBACiAgICAgICAgICAgICBsYXllcmRlc3RwYXRoID0gZGVzdGRpcgogICAgICAgICAgICAgaWYgY29yZWJhc2UgPT0gb3MucGF0aC5kaXJuYW1lKGxheWVyKToKICAgICAgICAgICAgICAgICBsYXllcmRlc3RwYXRoICs9ICcvJyArIG9zLnBhdGguYmFzZW5hbWUoY29yZWJhc2UpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxheWVyX3JlbGF0aXZlID0gb3MucGF0aC5iYXNlbmFtZShjb3JlYmFzZSkgKyAnLycgKyBvcy5wYXRoLnJlbHBhdGgobGF5ZXIsIGNvcmViYXNlKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZGlybmFtZShsYXllcl9yZWxhdGl2ZSkgIT0gbGF5ZXJuZXduYW1lOgorICAgICAgICAgICAgICAgICAgICBsYXllcmRlc3RwYXRoICs9ICcvJyArIG9zLnBhdGguZGlybmFtZShsYXllcl9yZWxhdGl2ZSkKKwogICAgICAgICAgICAgbGF5ZXJkZXN0cGF0aCArPSAnLycgKyBsYXllcm5ld25hbWUKIAogICAgICAgICAgICAgbGF5ZXJfcmVsYXRpdmUgPSBvcy5wYXRoLnJlbHBhdGgobGF5ZXJkZXN0cGF0aCwKQEAgLTEyMyw2ICsxMzIsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoJ3dvcmtzcGFjZWxheWVyJywgd29ya3NwYWNlX25ld25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGxpbmUpCiAKKyAgICAgICAgIyBtZXRhLXNrZWxldG9uIGxheWVyIGlzIGFkZGVkIGFzIHBhcnQgb2YgdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAjIGJ1dCBub3QgYXMgYSBsYXllciBpbmNsdWRlZCBpbiB0aGUgYnVpbGQsIHRoZXJlZm9yZSBpdCBpcworICAgICAgICAjIG5vdCByZXBvcnRlZCB0byB0aGUgZnVuY3Rpb24gY2FsbGVyLgorICAgICAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJzX2NvcGllZDoKKyAgICAgICAgICAgIGlmIGxheWVyLmVuZHN3aXRoKCcvbWV0YS1za2VsZXRvbicpOgorICAgICAgICAgICAgICAgIGxheWVyc19jb3BpZWQucmVtb3ZlKGxheWVyKQorICAgICAgICAgICAgICAgIGJyZWFrCisKICAgICAgICAgcmV0dXJuIGxheWVyc19jb3BpZWQKIAogZGVmIGdlbmVyYXRlX2xvY2tlZF9zaWdzKHNpZ2ZpbGUsIGQpOgpAQCAtMjM5LDYgKzI1Niw3IEBACiAgICAgY21kID0gIiVzQkJfU0VUU0NFTkVfRU5GT1JDRT0xIFBTRVVET19ESVNBQkxFRD0xIG9lLWNoZWNrLXNzdGF0ZSAlcyAtcyAtbyAlcyAlcyIgJSAoY21kcHJlZml4LCB0YXJnZXRzLCBmaWx0ZXJvdXRmaWxlLCBsb2dwYXJhbSkKICAgICBlbnYgPSBkaWN0KGQuZ2V0VmFyKCdCQl9PUklHRU5WJywgRmFsc2UpKQogICAgIGVudi5wb3AoJ0JVSUxERElSJywgJycpCisgICAgZW52LnBvcCgnQkJQQVRIJywgJycpCiAgICAgcGF0aGl0ZW1zID0gZW52WydQQVRIJ10uc3BsaXQoJzonKQogICAgIGVudlsnUEFUSCddID0gJzonLmpvaW4oW2l0ZW0gZm9yIGl0ZW0gaW4gcGF0aGl0ZW1zIGlmIG5vdCBpdGVtLmVuZHN3aXRoKCcvYml0YmFrZS9iaW4nKV0pCiAgICAgYmIucHJvY2Vzcy5ydW4oY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIGVudj1lbnYsIGN3ZD1jd2QsIGV4ZWN1dGFibGU9Jy9iaW4vYmFzaCcpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvZGlzdHJvX2NoZWNrLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL2Rpc3Ryb19jaGVjay5weQppbmRleCAzN2YwNGVkLi5lNzc1YzNhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvZGlzdHJvX2NoZWNrLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9kaXN0cm9fY2hlY2sucHkKQEAgLTc3LDE3ICs3NywxMCBAQAogCiBkZWYgZ2V0X2xhdGVzdF9yZWxlYXNlZF9vcGVuc3VzZV9zb3VyY2VfcGFja2FnZV9saXN0KGQpOgogICAgICJSZXR1cm5zIGxpc3Qgb2YgYWxsIHRoZSBuYW1lIG9zIHBhY2thZ2VzIGluIHRoZSBsYXRlc3Qgb3BlbnN1c2UgZGlzdHJvIgotICAgIGxhdGVzdCA9IGZpbmRfbGF0ZXN0X251bWVyaWNfcmVsZWFzZSgiaHR0cDovL2Rvd25sb2FkLm9wZW5zdXNlLm9yZy9zb3VyY2UvZGlzdHJpYnV0aW9uLyIsZCkKKyAgICBsYXRlc3QgPSBmaW5kX2xhdGVzdF9udW1lcmljX3JlbGVhc2UoImh0dHA6Ly9kb3dubG9hZC5vcGVuc3VzZS5vcmcvc291cmNlL2Rpc3RyaWJ1dGlvbi9sZWFwIiwgZCkKIAotICAgIHBhY2thZ2VfbmFtZXMgPSBnZXRfc291cmNlX3BhY2thZ2VfbGlzdF9mcm9tX3VybCgiaHR0cDovL2Rvd25sb2FkLm9wZW5zdXNlLm9yZy9zb3VyY2UvZGlzdHJpYnV0aW9uLyVzL3JlcG8vb3NzL3N1c2Uvc3JjLyIgJSBsYXRlc3QsICJtYWluIiwgZCkKLSAgICBwYWNrYWdlX25hbWVzIHw9IGdldF9zb3VyY2VfcGFja2FnZV9saXN0X2Zyb21fdXJsKCJodHRwOi8vZG93bmxvYWQub3BlbnN1c2Uub3JnL3VwZGF0ZS8lcy9zcmMvIiAlIGxhdGVzdCwgInVwZGF0ZXMiLCBkKQotICAgIHJldHVybiBsYXRlc3QsIHBhY2thZ2VfbmFtZXMKLQotZGVmIGdldF9sYXRlc3RfcmVsZWFzZWRfbWFuZHJpdmFfc291cmNlX3BhY2thZ2VfbGlzdChkKToKLSAgICAiUmV0dXJucyBsaXN0IG9mIGFsbCB0aGUgbmFtZSBvcyBwYWNrYWdlcyBpbiB0aGUgbGF0ZXN0IG1hbmRyaXZhIGRpc3RybyIKLSAgICBsYXRlc3QgPSBmaW5kX2xhdGVzdF9udW1lcmljX3JlbGVhc2UoImh0dHA6Ly9kaXN0cmliLWNvZmZlZS5pcHNsLmp1c3NpZXUuZnIvcHViL2xpbnV4L01hbmRyaXZhTGludXgvb2ZmaWNpYWwvIiwgZCkKLSAgICBwYWNrYWdlX25hbWVzID0gZ2V0X3NvdXJjZV9wYWNrYWdlX2xpc3RfZnJvbV91cmwoImh0dHA6Ly9kaXN0cmliLWNvZmZlZS5pcHNsLmp1c3NpZXUuZnIvcHViL2xpbnV4L01hbmRyaXZhTGludXgvb2ZmaWNpYWwvJXMvU1JQTVMvbWFpbi9yZWxlYXNlLyIgJSBsYXRlc3QsICJtYWluIiwgZCkKLSAgICBwYWNrYWdlX25hbWVzIHw9IGdldF9zb3VyY2VfcGFja2FnZV9saXN0X2Zyb21fdXJsKCJodHRwOi8vZGlzdHJpYi1jb2ZmZWUuaXBzbC5qdXNzaWV1LmZyL3B1Yi9saW51eC9NYW5kcml2YUxpbnV4L29mZmljaWFsLyVzL1NSUE1TL21haW4vdXBkYXRlcy8iICUgbGF0ZXN0LCAidXBkYXRlcyIsIGQpCisgICAgcGFja2FnZV9uYW1lcyA9IGdldF9zb3VyY2VfcGFja2FnZV9saXN0X2Zyb21fdXJsKCJodHRwOi8vZG93bmxvYWQub3BlbnN1c2Uub3JnL3NvdXJjZS9kaXN0cmlidXRpb24vbGVhcC8lcy9yZXBvL29zcy9zdXNlL3NyYy8iICUgbGF0ZXN0LCAibWFpbiIsIGQpCisgICAgcGFja2FnZV9uYW1lcyB8PSBnZXRfc291cmNlX3BhY2thZ2VfbGlzdF9mcm9tX3VybCgiaHR0cDovL2Rvd25sb2FkLm9wZW5zdXNlLm9yZy91cGRhdGUvbGVhcC8lcy9vc3Mvc3JjLyIgJSBsYXRlc3QsICJ1cGRhdGVzIiwgZCkKICAgICByZXR1cm4gbGF0ZXN0LCBwYWNrYWdlX25hbWVzCiAKIGRlZiBnZXRfbGF0ZXN0X3JlbGVhc2VkX2NsZWFyX3NvdXJjZV9wYWNrYWdlX2xpc3QoZCk6CkBAIC0xNjEsOCArMTU0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIkRlYmlhbiIsIGdldF9sYXRlc3RfcmVsZWFzZWRfZGViaWFuX3NvdXJjZV9wYWNrYWdlX2xpc3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiVWJ1bnR1IiwgZ2V0X2xhdGVzdF9yZWxlYXNlZF91YnVudHVfc291cmNlX3BhY2thZ2VfbGlzdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJGZWRvcmEiLCBnZXRfbGF0ZXN0X3JlbGVhc2VkX2ZlZG9yYV9zb3VyY2VfcGFja2FnZV9saXN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIk9wZW5TdVNFIiwgZ2V0X2xhdGVzdF9yZWxlYXNlZF9vcGVuc3VzZV9zb3VyY2VfcGFja2FnZV9saXN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIk1hbmRyaXZhIiwgZ2V0X2xhdGVzdF9yZWxlYXNlZF9tYW5kcml2YV9zb3VyY2VfcGFja2FnZV9saXN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIm9wZW5TVVNFIiwgZ2V0X2xhdGVzdF9yZWxlYXNlZF9vcGVuc3VzZV9zb3VyY2VfcGFja2FnZV9saXN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIkNsZWFyIiwgZ2V0X2xhdGVzdF9yZWxlYXNlZF9jbGVhcl9zb3VyY2VfcGFja2FnZV9saXN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL2dwZ19zaWduLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL2dwZ19zaWduLnB5CmluZGV4IDdjZTc2N2UuLjljYzg4ZjAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9ncGdfc2lnbi5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvZ3BnX3NpZ24ucHkKQEAgLTE1LDcgKzE1LDcgQEAKIAogICAgIGRlZiBleHBvcnRfcHVia2V5KHNlbGYsIG91dHB1dF9maWxlLCBrZXlpZCwgYXJtb3I9VHJ1ZSk6CiAgICAgICAgICIiIkV4cG9ydCBHUEcgcHVibGljIGtleSB0byBhIGZpbGUiIiIKLSAgICAgICAgY21kID0gJyVzIC0tYmF0Y2ggLS15ZXMgLS1leHBvcnQgLW8gJXMgJyAlIFwKKyAgICAgICAgY21kID0gJyVzIC0tbm8tcGVybWlzc2lvbi13YXJuaW5nIC0tYmF0Y2ggLS15ZXMgLS1leHBvcnQgLW8gJXMgJyAlIFwKICAgICAgICAgICAgICAgICAoc2VsZi5ncGdfYmluLCBvdXRwdXRfZmlsZSkKICAgICAgICAgaWYgc2VsZi5ncGdfcGF0aDoKICAgICAgICAgICAgIGNtZCArPSAiLS1ob21lZGlyICVzICIgJSBzZWxmLmdwZ19wYXRoCkBAIC0yNywyMiArMjcsMjcgQEAKICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoJ0ZhaWxlZCB0byBleHBvcnQgZ3BnIHB1YmxpYyBrZXkgKCVzKTogJXMnICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWlkLCBvdXRwdXQpKQogCi0gICAgZGVmIHNpZ25fcnBtcyhzZWxmLCBmaWxlcywga2V5aWQsIHBhc3NwaHJhc2UpOgorICAgIGRlZiBzaWduX3JwbXMoc2VsZiwgZmlsZXMsIGtleWlkLCBwYXNzcGhyYXNlLCBkaWdlc3QsIHNpZ25fY2h1bmssIGZzaz1Ob25lLCBmc2tfcGFzc3dvcmQ9Tm9uZSk6CiAgICAgICAgICIiIlNpZ24gUlBNIGZpbGVzIiIiCiAKICAgICAgICAgY21kID0gc2VsZi5ycG1fYmluICsgIiAtLWFkZHNpZ24gLS1kZWZpbmUgJ19ncGdfbmFtZSAlcycgICIgJSBrZXlpZAotICAgICAgICBncGdfYXJncyA9ICctLWJhdGNoIC0tcGFzc3BocmFzZT0lcycgJSBwYXNzcGhyYXNlCisgICAgICAgIGdwZ19hcmdzID0gJy0tbm8tcGVybWlzc2lvbi13YXJuaW5nIC0tYmF0Y2ggLS1wYXNzcGhyYXNlPSVzJyAlIHBhc3NwaHJhc2UKICAgICAgICAgaWYgc2VsZi5ncGdfdmVyc2lvbiA+ICgyLDEsKToKICAgICAgICAgICAgIGdwZ19hcmdzICs9ICcgLS1waW5lbnRyeS1tb2RlPWxvb3BiYWNrJwogICAgICAgICBjbWQgKz0gIi0tZGVmaW5lICdfZ3BnX3NpZ25fY21kX2V4dHJhX2FyZ3MgJXMnICIgJSBncGdfYXJncworICAgICAgICBjbWQgKz0gIi0tZGVmaW5lICdfYmluYXJ5X2ZpbGVkaWdlc3RfYWxnb3JpdGhtICVzJyAiICUgZGlnZXN0CiAgICAgICAgIGlmIHNlbGYuZ3BnX2JpbjoKLSAgICAgICAgICAgIGNtZCArPSAiLS1kZWZpbmUgJyUlX19ncGcgJXMnICIgJSBzZWxmLmdwZ19iaW4KKyAgICAgICAgICAgIGNtZCArPSAiLS1kZWZpbmUgJ19fZ3BnICVzJyAiICUgc2VsZi5ncGdfYmluCiAgICAgICAgIGlmIHNlbGYuZ3BnX3BhdGg6CiAgICAgICAgICAgICBjbWQgKz0gIi0tZGVmaW5lICdfZ3BnX3BhdGggJXMnICIgJSBzZWxmLmdwZ19wYXRoCisgICAgICAgIGlmIGZzazoKKyAgICAgICAgICAgIGNtZCArPSAiLS1zaWduZmlsZXMgLS1mc2twYXRoICVzICIgJSBmc2sKKyAgICAgICAgICAgIGlmIGZza19wYXNzd29yZDoKKyAgICAgICAgICAgICAgICBjbWQgKz0gIi0tZGVmaW5lICdfZmlsZV9zaWduaW5nX2tleV9wYXNzd29yZCAlcycgIiAlIGZza19wYXNzd29yZAogCi0gICAgICAgICMgU2lnbiBpbiBjaHVua3Mgb2YgMTAwIHBhY2thZ2VzCi0gICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihmaWxlcyksIDEwMCk6Ci0gICAgICAgICAgICBzdGF0dXMsIG91dHB1dCA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dChjbWQgKyAnICcuam9pbihmaWxlc1tpOmkrMTAwXSkpCisgICAgICAgICMgU2lnbiBpbiBjaHVua3MKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGZpbGVzKSwgc2lnbl9jaHVuayk6CisgICAgICAgICAgICBzdGF0dXMsIG91dHB1dCA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dChjbWQgKyAnICcuam9pbihmaWxlc1tpOmkrc2lnbl9jaHVua10pKQogICAgICAgICAgICAgaWYgc3RhdHVzOgogICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIkZhaWxlZCB0byBzaWduIFJQTSBwYWNrYWdlczogJXMiICUgb3V0cHV0KQogCkBAIC01Myw4ICs1OCw4IEBACiAgICAgICAgIGlmIHBhc3NwaHJhc2VfZmlsZSBhbmQgcGFzc3BocmFzZToKICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiWW91IHNob3VsZCB1c2UgZWl0aGVyIHBhc3NwaHJhc2VfZmlsZSBvZiBwYXNzcGhyYXNlLCBub3QgYm90aCIpCiAKLSAgICAgICAgY21kID0gW3NlbGYuZ3BnX2JpbiwgJy0tZGV0YWNoLXNpZ24nLCAnLS1iYXRjaCcsICctLW5vLXR0eScsICctLXllcycsCi0gICAgICAgICAgICAgICAnLS1wYXNzcGhyYXNlLWZkJywgJzAnLCAnLXUnLCBrZXlpZF0KKyAgICAgICAgY21kID0gW3NlbGYuZ3BnX2JpbiwgJy0tZGV0YWNoLXNpZ24nLCAnLS1uby1wZXJtaXNzaW9uLXdhcm5pbmcnLCAnLS1iYXRjaCcsCisgICAgICAgICAgICAgICAnLS1uby10dHknLCAnLS15ZXMnLCAnLS1wYXNzcGhyYXNlLWZkJywgJzAnLCAnLXUnLCBrZXlpZF0KIAogICAgICAgICBpZiBzZWxmLmdwZ19wYXRoOgogICAgICAgICAgICAgY21kICs9IFsnLS1ob21lZGlyJywgc2VsZi5ncGdfcGF0aF0KQEAgLTkzLDcgKzk4LDcgQEAKICAgICAgICAgIiIiUmV0dXJuIHRoZSBncGcgdmVyc2lvbiBhcyBhIHR1cGxlIG9mIGludHMiIiIKICAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgdmVyX3N0ciA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KChzZWxmLmdwZ19iaW4sICItLXZlcnNpb24iKSkuc3BsaXQoKVsyXS5kZWNvZGUoInV0Zi04IikKKyAgICAgICAgICAgIHZlcl9zdHIgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgoc2VsZi5ncGdfYmluLCAiLS12ZXJzaW9uIiwgIi0tbm8tcGVybWlzc2lvbi13YXJuaW5nIikpLnNwbGl0KClbMl0uZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgICAgICByZXR1cm4gdHVwbGUoW2ludChpKSBmb3IgaSBpbiB2ZXJfc3RyLnNwbGl0KCcuJyldKQogICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIkNvdWxkIG5vdCBnZXQgZ3BnIHZlcnNpb246ICVzIiAlIGUpCkBAIC0xMDEsNyArMTA2LDcgQEAKIAogICAgIGRlZiB2ZXJpZnkoc2VsZiwgc2lnX2ZpbGUpOgogICAgICAgICAiIiJWZXJpZnkgc2lnbmF0dXJlIiIiCi0gICAgICAgIGNtZCA9IHNlbGYuZ3BnX2JpbiArICIgLS12ZXJpZnkgIgorICAgICAgICBjbWQgPSBzZWxmLmdwZ19iaW4gKyAiIC0tdmVyaWZ5IC0tbm8tcGVybWlzc2lvbi13YXJuaW5nICIKICAgICAgICAgaWYgc2VsZi5ncGdfcGF0aDoKICAgICAgICAgICAgIGNtZCArPSAiLS1ob21lZGlyICVzICIgJSBzZWxmLmdwZ19wYXRoCiAgICAgICAgIGNtZCArPSBzaWdfZmlsZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL2xpY2Vuc2UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbGljZW5zZS5weQppbmRleCA4ZDJmZDE3Li5jYTM4NWQ1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbGljZW5zZS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbGljZW5zZS5weQpAQCAtMTA2LDcgKzEwNiw4IEBACiAgICAgbGljZW5zZSBzdHJpbmcgbWF0Y2hlcyB0aGUgd2hpdGVsaXN0IGFuZCBkb2VzIG5vdCBtYXRjaCB0aGUgYmxhY2tsaXN0LgogCiAgICAgUmV0dXJucyBhIHR1cGxlIGhvbGRpbmcgdGhlIGJvb2xlYW4gc3RhdGUgYW5kIGEgbGlzdCBvZiB0aGUgYXBwbGljYWJsZQotICAgIGxpY2Vuc2VzIHdoaWNoIHdlcmUgZXhjbHVkZWQgKG9yIE5vbmUsIGlmIHRoZSBzdGF0ZSBpcyBUcnVlKQorICAgIGxpY2Vuc2VzIHRoYXQgd2VyZSBleGNsdWRlZCBpZiBzdGF0ZSBpcyBGYWxzZSwgb3IgdGhlIGxpY2Vuc2VzIHRoYXQgd2VyZQorICAgIGluY2x1ZGVkIGlmIHRoZSBzdGF0ZSBpcyBUcnVlLgogICAgICIiIgogCiAgICAgZGVmIGluY2x1ZGVfbGljZW5zZShsaWNlbnNlKToKQEAgLTExNywxMCArMTE4LDE3IEBACiAKICAgICBkZWYgY2hvb3NlX2xpY2Vuc2VzKGFscGhhLCBiZXRhKToKICAgICAgICAgIiIiU2VsZWN0IHRoZSBvcHRpb24gaW4gYW4gT1Igd2hpY2ggaXMgdGhlICdiZXN0JyAoaGFzIHRoZSBtb3N0Ci0gICAgICAgIGluY2x1ZGVkIGxpY2Vuc2VzKS4iIiIKLSAgICAgICAgYWxwaGFfd2VpZ2h0ID0gbGVuKGxpc3QoZmlsdGVyKGluY2x1ZGVfbGljZW5zZSwgYWxwaGEpKSkKLSAgICAgICAgYmV0YV93ZWlnaHQgPSBsZW4obGlzdChmaWx0ZXIoaW5jbHVkZV9saWNlbnNlLCBiZXRhKSkpCi0gICAgICAgIGlmIGFscGhhX3dlaWdodCA+IGJldGFfd2VpZ2h0OgorICAgICAgICBpbmNsdWRlZCBsaWNlbnNlcyBhbmQgbm8gZXhjbHVkZWQgbGljZW5zZXMpLiIiIgorICAgICAgICAjIFRoZSBmYWN0b3IgMTAwMCBiZWxvdyBpcyBhcmJpdHJhcnksIGp1c3QgZXhwZWN0ZWQgdG8gYmUgbXVjaCBsYXJnZXIKKyAgICAgICAgIyB0aGF0IHRoZSBudW1iZXIgb2YgbGljZW5zZXMgYWN0dWFsbHkgc3BlY2lmaWVkLiBUaGF0IHdheSB0aGUgd2VpZ2h0CisgICAgICAgICMgd2lsbCBiZSBuZWdhdGl2ZSBpZiB0aGUgbGlzdCBvZiBsaWNlbnNlcyBjb250YWlucyBhbiBleGNsdWRlZCBsaWNlbnNlLAorICAgICAgICAjIGJ1dCBzdGlsbCBnaXZlcyBhIGhpZ2hlciB3ZWlnaHQgdG8gdGhlIGxpc3Qgd2l0aCB0aGUgbW9zdCBpbmNsdWRlZAorICAgICAgICAjIGxpY2Vuc2VzLgorICAgICAgICBhbHBoYV93ZWlnaHQgPSAobGVuKGxpc3QoZmlsdGVyKGluY2x1ZGVfbGljZW5zZSwgYWxwaGEpKSkgLQorICAgICAgICAgICAgICAgICAgICAgICAgMTAwMCAqIChsZW4obGlzdChmaWx0ZXIoZXhjbHVkZV9saWNlbnNlLCBhbHBoYSkpKSA+IDApKQorICAgICAgICBiZXRhX3dlaWdodCA9IChsZW4obGlzdChmaWx0ZXIoaW5jbHVkZV9saWNlbnNlLCBiZXRhKSkpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgMTAwMCAqIChsZW4obGlzdChmaWx0ZXIoZXhjbHVkZV9saWNlbnNlLCBiZXRhKSkpID4gMCkpCisgICAgICAgIGlmIGFscGhhX3dlaWdodCA+PSBiZXRhX3dlaWdodDoKICAgICAgICAgICAgIHJldHVybiBhbHBoYQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIGJldGEKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9sc2IucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbHNiLnB5CmluZGV4IDNhOTQ1ZTAuLjcxYzA5OTIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9sc2IucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL2xzYi5weQpAQCAtMSwxOSArMSwyNiBAQAorZGVmIGdldF9vc19yZWxlYXNlKCk6CisgICAgIiIiR2V0IGFsbCBrZXktdmFsdWUgcGFpcnMgZnJvbSAvZXRjL29zLXJlbGVhc2UgYXMgYSBkaWN0IiIiCisgICAgZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKKworICAgIGRhdGEgPSBPcmRlcmVkRGljdCgpCisgICAgaWYgb3MucGF0aC5leGlzdHMoJy9ldGMvb3MtcmVsZWFzZScpOgorICAgICAgICB3aXRoIG9wZW4oJy9ldGMvb3MtcmVsZWFzZScpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAga2V5LCB2YWwgPSBsaW5lLnJzdHJpcCgpLnNwbGl0KCc9JywgMSkKKyAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBkYXRhW2tleS5zdHJpcCgpXSA9IHZhbC5zdHJpcCgnIicpCisgICAgcmV0dXJuIGRhdGEKKwogZGVmIHJlbGVhc2VfZGljdF9vc3IoKToKICAgICAiIiIgUG9wdWxhdGUgYSBkaWN0IHdpdGggcGVydGluZW50IHZhbHVlcyBmcm9tIC9ldGMvb3MtcmVsZWFzZSAiIiIKLSAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoJy9ldGMvb3MtcmVsZWFzZScpOgotICAgICAgICByZXR1cm4gTm9uZQotCiAgICAgZGF0YSA9IHt9Ci0gICAgd2l0aCBvcGVuKCcvZXRjL29zLXJlbGVhc2UnKSBhcyBmOgotICAgICAgICBmb3IgbGluZSBpbiBmOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGtleSwgdmFsID0gbGluZS5yc3RyaXAoKS5zcGxpdCgnPScsIDEpCi0gICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYga2V5ID09ICdJRCc6Ci0gICAgICAgICAgICAgICAgZGF0YVsnRElTVFJJQl9JRCddID0gdmFsLnN0cmlwKCciJykKLSAgICAgICAgICAgIGlmIGtleSA9PSAnVkVSU0lPTl9JRCc6Ci0gICAgICAgICAgICAgICAgZGF0YVsnRElTVFJJQl9SRUxFQVNFJ10gPSB2YWwuc3RyaXAoJyInKQorICAgIG9zX3JlbGVhc2UgPSBnZXRfb3NfcmVsZWFzZSgpCisgICAgaWYgJ0lEJyBpbiBvc19yZWxlYXNlOgorICAgICAgICBkYXRhWydESVNUUklCX0lEJ10gPSBvc19yZWxlYXNlWydJRCddCisgICAgaWYgJ1ZFUlNJT05fSUQnIGluIG9zX3JlbGVhc2U6CisgICAgICAgIGRhdGFbJ0RJU1RSSUJfUkVMRUFTRSddID0gb3NfcmVsZWFzZVsnVkVSU0lPTl9JRCddCiAKICAgICByZXR1cm4gZGF0YQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcGFja2FnZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYWNrYWdlLnB5CmluZGV4IDQ3OTdlN2QuLjFlNWMzYWEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYWNrYWdlLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYWNrYWdlLnB5CkBAIC00NSw2ICs0NSwxMTUgQEAKICAgICByZXR1cm4KIAogCitkZWYgc3RyaXBfZXhlY3MocG4sIGRzdGRpciwgc3RyaXBfY21kLCBsaWJkaXIsIGJhc2VfbGliZGlyLCBxYV9hbHJlYWR5X3N0cmlwcGVkPUZhbHNlKToKKyAgICAiIiIKKyAgICBTdHJpcCBleGVjdXRhYmxlIGNvZGUgKGxpa2UgZXhlY3V0YWJsZXMsIHNoYXJlZCBsaWJyYXJpZXMpIF9pbl9wbGFjZV8KKyAgICAtIEJhc2VkIG9uIHN5c3Jvb3Rfc3RyaXAgaW4gc3RhZ2luZy5iYmNsYXNzCisgICAgOnBhcmFtIGRzdGRpcjogZGlyZWN0b3J5IGluIHdoaWNoIHRvIHN0cmlwIGZpbGVzCisgICAgOnBhcmFtIHN0cmlwX2NtZDogU3RyaXAgY29tbWFuZCAodXN1YWxseSAke1NUUklQfSkKKyAgICA6cGFyYW0gbGliZGlyOiAke2xpYmRpcn0gLSBzdHJpcCAuc28gZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkKKyAgICA6cGFyYW0gYmFzZV9saWJkaXI6ICR7YmFzZV9saWJkaXJ9IC0gc3RyaXAgLnNvIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5CisgICAgOnBhcmFtIHFhX2FscmVhZHlfc3RyaXBwZWQ6IFNldCB0byBUcnVlIGlmIGFscmVhZHktc3RyaXBwZWQnIGluICR7SU5TQU5FX1NLSVB9CisgICAgVGhpcyBpcyBmb3IgcHJvcGVyIGxvZ2dpbmcgYW5kIG1lc3NhZ2VzIG9ubHkuCisgICAgIiIiCisgICAgaW1wb3J0IHN0YXQsIGVycm5vLCBvZS5wYXRoLCBvZS51dGlscywgbW1hcAorCisgICAgIyBEZXRlY3QgLmtvIG1vZHVsZSBieSBzZWFyY2hpbmcgZm9yICJ2ZXJtYWdpYz0iIHN0cmluZworICAgIGRlZiBpc19rZXJuZWxfbW9kdWxlKHBhdGgpOgorICAgICAgICB3aXRoIG9wZW4ocGF0aCkgYXMgZjoKKyAgICAgICAgICAgIHJldHVybiBtbWFwLm1tYXAoZi5maWxlbm8oKSwgMCwgcHJvdD1tbWFwLlBST1RfUkVBRCkuZmluZChiInZlcm1hZ2ljPSIpID49IDAKKworICAgICMgUmV0dXJuIHR5cGUgKGJpdHMpOgorICAgICMgMCAtIG5vdCBlbGYKKyAgICAjIDEgLSBFTEYKKyAgICAjIDIgLSBzdHJpcHBlZAorICAgICMgNCAtIGV4ZWN1dGFibGUKKyAgICAjIDggLSBzaGFyZWQgbGlicmFyeQorICAgICMgMTYgLSBrZXJuZWwgbW9kdWxlCisgICAgZGVmIGlzX2VsZihwYXRoKToKKyAgICAgICAgZXhlY190eXBlID0gMAorICAgICAgICByZXQsIHJlc3VsdCA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgKKyAgICAgICAgICAgICJmaWxlIFwiJXNcIiIgJSBwYXRoLnJlcGxhY2UoIlwiIiwgIlxcXCIiKSkKKworICAgICAgICBpZiByZXQ6CisgICAgICAgICAgICBiYi5lcnJvcigic3BsaXRfYW5kX3N0cmlwX2ZpbGVzOiAnZmlsZSAlcycgZmFpbGVkIiAlIHBhdGgpCisgICAgICAgICAgICByZXR1cm4gZXhlY190eXBlCisKKyAgICAgICAgaWYgIkVMRiIgaW4gcmVzdWx0OgorICAgICAgICAgICAgZXhlY190eXBlIHw9IDEKKyAgICAgICAgICAgIGlmICJub3Qgc3RyaXBwZWQiIG5vdCBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgZXhlY190eXBlIHw9IDIKKyAgICAgICAgICAgIGlmICJleGVjdXRhYmxlIiBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgZXhlY190eXBlIHw9IDQKKyAgICAgICAgICAgIGlmICJzaGFyZWQiIGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICBleGVjX3R5cGUgfD0gOAorICAgICAgICAgICAgaWYgInJlbG9jYXRhYmxlIiBpbiByZXN1bHQgYW5kIGlzX2tlcm5lbF9tb2R1bGUocGF0aCk6CisgICAgICAgICAgICAgICAgZXhlY190eXBlIHw9IDE2CisgICAgICAgIHJldHVybiBleGVjX3R5cGUKKworICAgIGVsZmZpbGVzID0ge30KKyAgICBpbm9kZXMgPSB7fQorICAgIGxpYmRpciA9IG9zLnBhdGguYWJzcGF0aChkc3RkaXIgKyBvcy5zZXAgKyBsaWJkaXIpCisgICAgYmFzZV9saWJkaXIgPSBvcy5wYXRoLmFic3BhdGgoZHN0ZGlyICsgb3Muc2VwICsgYmFzZV9saWJkaXIpCisgICAgZXhlY19tYXNrID0gc3RhdC5TX0lYVVNSIHwgc3RhdC5TX0lYR1JQIHwgc3RhdC5TX0lYT1RICisgICAgIworICAgICMgRmlyc3QgbGV0cyBmaWd1cmUgb3V0IGFsbCBvZiB0aGUgZmlsZXMgd2UgbWF5IGhhdmUgdG8gcHJvY2VzcworICAgICMKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhkc3RkaXIpOgorICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZikKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGx0YXJnZXQgPSBvZS5wYXRoLnJlYWxwYXRoKGZpbGUsIGRzdGRpciwgRmFsc2UpCisgICAgICAgICAgICAgICAgcyA9IG9zLmxzdGF0KGx0YXJnZXQpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIChlcnIsIHN0cmVycm9yKSA9IGUuYXJncworICAgICAgICAgICAgICAgIGlmIGVyciAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgIyBTa2lwIGJyb2tlbiBzeW1saW5rcworICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBub3QgczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgIyBDaGVjayBpdHMgYW4gZXhjdXRhYmxlCisgICAgICAgICAgICBpZiBzW3N0YXQuU1RfTU9ERV0gJiBleGVjX21hc2sgXAorICAgICAgICAgICAgICAgICAgICBvciAoKGZpbGUuc3RhcnRzd2l0aChsaWJkaXIpIG9yIGZpbGUuc3RhcnRzd2l0aChiYXNlX2xpYmRpcikpIGFuZCAiLnNvIiBpbiBmKSBcCisgICAgICAgICAgICAgICAgICAgIG9yIGZpbGUuZW5kc3dpdGgoJy5rbycpOgorICAgICAgICAgICAgICAgICMgSWYgaXQncyBhIHN5bWxpbmssIGFuZCBwb2ludHMgdG8gYW4gRUxGIGZpbGUsIHdlIGNhcHR1cmUgdGhlIHJlYWRsaW5rIHRhcmdldAorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGZpbGUpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgIyBJdCdzIGEgZmlsZSAob3IgaGFyZGxpbmspLCBub3QgYSBsaW5rCisgICAgICAgICAgICAgICAgIyAuLi5idXQgaXMgaXQgRUxGLCBhbmQgaXMgaXQgYWxyZWFkeSBzdHJpcHBlZD8KKyAgICAgICAgICAgICAgICBlbGZfZmlsZSA9IGlzX2VsZihmaWxlKQorICAgICAgICAgICAgICAgIGlmIGVsZl9maWxlICYgMToKKyAgICAgICAgICAgICAgICAgICAgaWYgZWxmX2ZpbGUgJiAyOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcWFfYWxyZWFkeV9zdHJpcHBlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJTa2lwcGluZyBmaWxlICVzIGZyb20gJXMgZm9yIGFscmVhZHktc3RyaXBwZWQgUUEgdGVzdCIgJSAoZmlsZVtsZW4oZHN0ZGlyKTpdLCBwbikpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIkZpbGUgJyVzJyBmcm9tICVzIHdhcyBhbHJlYWR5IHN0cmlwcGVkLCB0aGlzIHdpbGwgcHJldmVudCBmdXR1cmUgZGVidWdnaW5nISIgJSAoZmlsZVtsZW4oZHN0ZGlyKTpdLCBwbikpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgIGlmIHMuc3RfaW5vIGluIGlub2RlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgb3MubGluayhpbm9kZXNbcy5zdF9pbm9dLCBmaWxlKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBicmVhayBoYXJkbGlua3Mgc28gdGhhdCB3ZSBkbyBub3Qgc3RyaXAgdGhlIG9yaWdpbmFsLgorICAgICAgICAgICAgICAgICAgICAgICAgaW5vZGVzW3Muc3RfaW5vXSA9IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLmNvcHlmaWxlKGZpbGUsIGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICBlbGZmaWxlc1tmaWxlXSA9IGVsZl9maWxlCisKKyAgICAjCisgICAgIyBOb3cgc3RyaXAgdGhlbSAoaW4gcGFyYWxsZWwpCisgICAgIworICAgIHNmaWxlcyA9IFtdCisgICAgZm9yIGZpbGUgaW4gZWxmZmlsZXM6CisgICAgICAgIGVsZl9maWxlID0gaW50KGVsZmZpbGVzW2ZpbGVdKQorICAgICAgICBzZmlsZXMuYXBwZW5kKChmaWxlLCBlbGZfZmlsZSwgc3RyaXBfY21kKSkKKworICAgIG9lLnV0aWxzLm11bHRpcHJvY2Vzc19leGVjKHNmaWxlcywgcnVuc3RyaXApCisKKworCiBkZWYgZmlsZV90cmFuc2xhdGUoZmlsZSk6CiAgICAgZnQgPSBmaWxlLnJlcGxhY2UoIkAiLCAiQGF0QCIpCiAgICAgZnQgPSBmdC5yZXBsYWNlKCIgIiwgIkBzcGFjZUAiKQpAQCAtNjcsOCArMTc2LDcgQEAKIAogICAgIGRlZiBwcm9jZXNzX2RlcHMocGlwZSwgcGtnLCBwa2dkZXN0LCBwcm92aWRlcywgcmVxdWlyZXMpOgogICAgICAgICBmaWxlID0gTm9uZQotICAgICAgICBmb3IgbGluZSBpbiBwaXBlOgotICAgICAgICAgICAgbGluZSA9IGxpbmUuZGVjb2RlKCJ1dGYtOCIpCisgICAgICAgIGZvciBsaW5lIGluIHBpcGUuc3BsaXQoIlxuIik6CiAKICAgICAgICAgICAgIG0gPSBmaWxlX3JlLm1hdGNoKGxpbmUpCiAgICAgICAgICAgICBpZiBtOgpAQCAtMTE3LDEyICsyMjUsOCBAQAogCiAgICAgICAgIHJldHVybiBwcm92aWRlcywgcmVxdWlyZXMKIAotICAgIHRyeToKLSAgICAgICAgZGVwX3BvcGVuID0gc3VicHJvY2Vzcy5Qb3BlbihzaGxleC5zcGxpdChycG1kZXBzKSArIHBrZ2ZpbGVzLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQotICAgICAgICBwcm92aWRlcywgcmVxdWlyZXMgPSBwcm9jZXNzX2RlcHMoZGVwX3BvcGVuLnN0ZG91dCwgcGtnLCBwa2dkZXN0LCBwcm92aWRlcywgcmVxdWlyZXMpCi0gICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgYmIuZXJyb3IoInJwbWRlcHM6ICclcycgY29tbWFuZCBmYWlsZWQsICclcyciICUgKHNobGV4LnNwbGl0KHJwbWRlcHMpICsgcGtnZmlsZXMsIGUpKQotICAgICAgICByYWlzZSBlCisgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoc2hsZXguc3BsaXQocnBtZGVwcykgKyBwa2dmaWxlcywgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKS5kZWNvZGUoInV0Zi04IikKKyAgICBwcm92aWRlcywgcmVxdWlyZXMgPSBwcm9jZXNzX2RlcHMob3V0cHV0LCBwa2csIHBrZ2Rlc3QsIHByb3ZpZGVzLCByZXF1aXJlcykKIAogICAgIHJldHVybiAocGtnLCBwcm92aWRlcywgcmVxdWlyZXMpCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYWNrYWdlX21hbmFnZXIucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcGFja2FnZV9tYW5hZ2VyLnB5CmluZGV4IDNhMmRhYWQuLjBjNWQ5MDcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYWNrYWdlX21hbmFnZXIucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3BhY2thZ2VfbWFuYWdlci5weQpAQCAtMTcsMTggKzE3LDExIEBACiBkZWYgY3JlYXRlX2luZGV4KGFyZyk6CiAgICAgaW5kZXhfY21kID0gYXJnCiAKLSAgICB0cnk6Ci0gICAgICAgIGJiLm5vdGUoIkV4ZWN1dGluZyAnJXMnIC4uLiIgJSBpbmRleF9jbWQpCi0gICAgICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGluZGV4X2NtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKS5kZWNvZGUoInV0Zi04IikKLSAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKLSAgICAgICAgcmV0dXJuKCJJbmRleCBjcmVhdGlvbiBjb21tYW5kICclcycgZmFpbGVkIHdpdGggcmV0dXJuIGNvZGUgJWQ6XG4lcyIgJQotICAgICAgICAgICAgICAgKGUuY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0LmRlY29kZSgidXRmLTgiKSkpCi0KKyAgICBiYi5ub3RlKCJFeGVjdXRpbmcgJyVzJyAuLi4iICUgaW5kZXhfY21kKQorICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGluZGV4X2NtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKS5kZWNvZGUoInV0Zi04IikKICAgICBpZiByZXN1bHQ6CiAgICAgICAgIGJiLm5vdGUocmVzdWx0KQogCi0gICAgcmV0dXJuIE5vbmUKLQogIiIiCiBUaGlzIG1ldGhvZCBwYXJzZSB0aGUgb3V0cHV0IGZyb20gdGhlIHBhY2thZ2UgbWFuYWdlcmFuZCByZXR1cm4KIGEgZGljdGlvbmFyeSB3aXRoIHRoZSBpbmZvcm1hdGlvbiBvZiB0aGUgcGFja2FnZXMuIFRoaXMgaXMgdXNlZApAQCAtMTA0LDEzICs5NywyNSBAQAogY2xhc3MgUnBtSW5kZXhlcihJbmRleGVyKToKICAgICBkZWYgd3JpdGVfaW5kZXgoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRkVFRF9TSUdOJykgPT0gJzEnOgotICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignUGFja2FnZSBmZWVkIHNpZ25pbmcgbm90IHlldCBpbXBsZW1lbnRkIGZvciBycG0nKQorICAgICAgICAgICAgc2lnbmVyID0gZ2V0X3NpZ25lcihzZWxmLmQsIHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRkVFRF9HUEdfQkFDS0VORCcpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2lnbmVyID0gTm9uZQogCiAgICAgICAgIGNyZWF0ZXJlcG9fYyA9IGJiLnV0aWxzLndoaWNoKG9zLmVudmlyb25bJ1BBVEgnXSwgImNyZWF0ZXJlcG9fYyIpCiAgICAgICAgIHJlc3VsdCA9IGNyZWF0ZV9pbmRleCgiJXMgLS11cGRhdGUgLXEgJXMiICUgKGNyZWF0ZXJlcG9fYywgc2VsZi5kZXBsb3lfZGlyKSkKICAgICAgICAgaWYgcmVzdWx0OgogICAgICAgICAgICAgYmIuZmF0YWwocmVzdWx0KQogCisgICAgICAgICMgU2lnbiByZXBvbWQKKyAgICAgICAgaWYgc2lnbmVyOgorICAgICAgICAgICAgc2lnX3R5cGUgPSBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0ZFRURfR1BHX1NJR05BVFVSRV9UWVBFJykKKyAgICAgICAgICAgIGlzX2FzY2lpX3NpZyA9IChzaWdfdHlwZS51cHBlcigpICE9ICJCSU4iKQorICAgICAgICAgICAgc2lnbmVyLmRldGFjaF9zaWduKG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsICdyZXBvZGF0YScsICdyZXBvbWQueG1sJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignUEFDS0FHRV9GRUVEX0dQR19OQU1FJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignUEFDS0FHRV9GRUVEX0dQR19QQVNTUEhSQVNFX0ZJTEUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcm1vcj1pc19hc2NpaV9zaWcpCisKKwogY2xhc3MgT3BrZ0luZGV4ZXIoSW5kZXhlcik6CiAgICAgZGVmIHdyaXRlX2luZGV4KHNlbGYpOgogICAgICAgICBhcmNoX3ZhcnMgPSBbIkFMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTIiwKQEAgLTE1Miw5ICsxNTcsNyBAQAogICAgICAgICAgICAgYmIubm90ZSgiVGhlcmUgYXJlIG5vIHBhY2thZ2VzIGluICVzISIgJSBzZWxmLmRlcGxveV9kaXIpCiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICByZXN1bHQgPSBvZS51dGlscy5tdWx0aXByb2Nlc3NfZXhlYyhpbmRleF9jbWRzLCBjcmVhdGVfaW5kZXgpCi0gICAgICAgIGlmIHJlc3VsdDoKLSAgICAgICAgICAgIGJiLmZhdGFsKCclcycgJSAoJ1xuJy5qb2luKHJlc3VsdCkpKQorICAgICAgICBvZS51dGlscy5tdWx0aXByb2Nlc3NfZXhlYyhpbmRleF9jbWRzLCBjcmVhdGVfaW5kZXgpCiAKICAgICAgICAgaWYgc2lnbmVyOgogICAgICAgICAgICAgZmVlZF9zaWdfdHlwZSA9IHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRkVFRF9HUEdfU0lHTkFUVVJFX1RZUEUnKQpAQCAtMjIwLDcgKzIyMyw3IEBACiAKICAgICAgICAgICAgIGNtZCA9ICJjZCAlczsgUFNFVURPX1VOTE9BRD0xICVzIHBhY2thZ2VzIC4gPiBQYWNrYWdlczsiICUgKGFyY2hfZGlyLCBhcHRfZnRwYXJjaGl2ZSkKIAotICAgICAgICAgICAgY21kICs9ICIlcyAtZmMgUGFja2FnZXMgPiBQYWNrYWdlcy5nejsiICUgZ3ppcAorICAgICAgICAgICAgY21kICs9ICIlcyAtZmNuIFBhY2thZ2VzID4gUGFja2FnZXMuZ3o7IiAlIGd6aXAKIAogICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihhcmNoX2RpciwgIlJlbGVhc2UiKSwgIncrIikgYXMgcmVsZWFzZToKICAgICAgICAgICAgICAgICByZWxlYXNlLndyaXRlKCJMYWJlbDogJXNcbiIgJSBhcmNoKQpAQCAtMjM1LDkgKzIzOCw3IEBACiAgICAgICAgICAgICBiYi5ub3RlKCJUaGVyZSBhcmUgbm8gcGFja2FnZXMgaW4gJXMiICUgc2VsZi5kZXBsb3lfZGlyKQogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgcmVzdWx0ID0gb2UudXRpbHMubXVsdGlwcm9jZXNzX2V4ZWMoaW5kZXhfY21kcywgY3JlYXRlX2luZGV4KQotICAgICAgICBpZiByZXN1bHQ6Ci0gICAgICAgICAgICBiYi5mYXRhbCgnJXMnICUgKCdcbicuam9pbihyZXN1bHQpKSkKKyAgICAgICAgb2UudXRpbHMubXVsdGlwcm9jZXNzX2V4ZWMoaW5kZXhfY21kcywgY3JlYXRlX2luZGV4KQogICAgICAgICBpZiBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0ZFRURfU0lHTicpID09ICcxJzoKICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BhY2thZ2UgZmVlZCBzaWduaW5nIG5vdCBpbXBsZW1lbnRkIGZvciBkcGtnJykKIApAQCAtNTQ4LDYgKzU0OSwxNCBAQAogICAgICAgICBpZiBmZWVkX3VyaXMgPT0gIiI6CiAgICAgICAgICAgICByZXR1cm4KIAorICAgICAgICBncGdfb3B0cyA9ICcnCisgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRkVFRF9TSUdOJykgPT0gJzEnOgorICAgICAgICAgICAgZ3BnX29wdHMgKz0gJ3JlcG9fZ3BnY2hlY2s9MVxuJworICAgICAgICAgICAgZ3BnX29wdHMgKz0gJ2dwZ2tleT1maWxlOi8vJXMvcGtpL3BhY2thZ2VmZWVkLWdwZy9QQUNLQUdFRkVFRC1HUEctS0VZLSVzLSVzXG4nICUgKHNlbGYuZC5nZXRWYXIoJ3N5c2NvbmZkaXInKSwgc2VsZi5kLmdldFZhcignRElTVFJPJyksIHNlbGYuZC5nZXRWYXIoJ0RJU1RST19DT0RFTkFNRScpKQorCisgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ1JQTV9TSUdOX1BBQ0tBR0VTJykgPT0gJzAnOgorICAgICAgICAgICAgZ3BnX29wdHMgKz0gJ2dwZ2NoZWNrPTBcbicKKwogICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob2UucGF0aC5qb2luKHNlbGYudGFyZ2V0X3Jvb3RmcywgImV0YyIsICJ5dW0ucmVwb3MuZCIpKQogICAgICAgICByZW1vdGVfdXJpcyA9IHNlbGYuY29uc3RydWN0X3VyaXMoZmVlZF91cmlzLnNwbGl0KCksIGZlZWRfYmFzZV9wYXRocy5zcGxpdCgpKQogICAgICAgICBmb3IgdXJpIGluIHJlbW90ZV91cmlzOgpAQCAtNTU4LDEyICs1NjcsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgcmVwb19pZCAgID0gIm9lLXJlbW90ZS1yZXBvIiAgKyAiLSIuam9pbih1cmxwYXJzZShyZXBvX3VyaSkucGF0aC5zcGxpdCgiLyIpKQogICAgICAgICAgICAgICAgICAgICByZXBvX25hbWUgPSAiT0UgUmVtb3RlIFJlcG86IiArICIgIi5qb2luKHVybHBhcnNlKHJlcG9fdXJpKS5wYXRoLnNwbGl0KCIvIikpCiAgICAgICAgICAgICAgICAgICAgIG9wZW4ob2UucGF0aC5qb2luKHNlbGYudGFyZ2V0X3Jvb3RmcywgImV0YyIsICJ5dW0ucmVwb3MuZCIsIHJlcG9fYmFzZSArICIucmVwbyIpLCAnYScpLndyaXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWyVzXVxubmFtZT0lc1xuYmFzZXVybD0lc1xuXG4iICUgKHJlcG9faWQsIHJlcG9fbmFtZSwgcmVwb191cmkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWyVzXVxubmFtZT0lc1xuYmFzZXVybD0lc1xuJXNcbiIgJSAocmVwb19pZCwgcmVwb19uYW1lLCByZXBvX3VyaSwgZ3BnX29wdHMpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXBvX25hbWUgPSAiT0UgUmVtb3RlIFJlcG86IiArICIgIi5qb2luKHVybHBhcnNlKHVyaSkucGF0aC5zcGxpdCgiLyIpKQogICAgICAgICAgICAgICAgIHJlcG9fdXJpID0gdXJpCiAgICAgICAgICAgICAgICAgb3BlbihvZS5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLCAiZXRjIiwgInl1bS5yZXBvcy5kIiwgcmVwb19iYXNlICsgIi5yZXBvIiksICd3Jykud3JpdGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJbJXNdXG5uYW1lPSVzXG5iYXNldXJsPSVzXG4iICUgKHJlcG9fYmFzZSwgcmVwb19uYW1lLCByZXBvX3VyaSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJbJXNdXG5uYW1lPSVzXG5iYXNldXJsPSVzXG4lcyIgJSAocmVwb19iYXNlLCByZXBvX25hbWUsIHJlcG9fdXJpLCBncGdfb3B0cykpCiAKICAgICBkZWYgX3ByZXBhcmVfcGtnX3RyYW5zYWN0aW9uKHNlbGYpOgogICAgICAgICBvcy5lbnZpcm9uWydEJ10gPSBzZWxmLnRhcmdldF9yb290ZnMKQEAgLTYwOCwxMCArNjE3LDEyIEBACiAgICAgICAgICAgICBzZWxmLl9pbnZva2VfZG5mKFsicmVtb3ZlIl0gKyBwa2dzKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgY21kID0gYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJycG0iKQotICAgICAgICAgICAgYXJncyA9IFsiLWUiLCAiLS1ub2RlcHMiLCAiLS1yb290PSVzIiAlc2VsZi50YXJnZXRfcm9vdGZzXQorICAgICAgICAgICAgYXJncyA9IFsiLWUiLCAiLXYiLCAiLS1ub2RlcHMiLCAiLS1yb290PSVzIiAlc2VsZi50YXJnZXRfcm9vdGZzXQogCiAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYmIubm90ZSgiUnVubmluZyAlcyIgJSAnICcuam9pbihbY21kXSArIGFyZ3MgKyBwa2dzKSkKICAgICAgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbY21kXSArIGFyZ3MgKyBwa2dzLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpLmRlY29kZSgidXRmLTgiKQorICAgICAgICAgICAgICAgIGJiLm5vdGUob3V0cHV0KQogICAgICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIkNvdWxkIG5vdCBpbnZva2UgcnBtLiBDb21tYW5kICIKICAgICAgICAgICAgICAgICAgICAgICInJXMnIHJldHVybmVkICVkOlxuJXMiICUgKCcgJy5qb2luKFtjbWRdICsgYXJncyArIHBrZ3MpLCBlLnJldHVybmNvZGUsIGUub3V0cHV0LmRlY29kZSgidXRmLTgiKSkpCkBAIC02ODIsNyArNjkzLDcgQEAKICAgICAgICAgcmV0dXJuIHBhY2thZ2VzCiAKICAgICBkZWYgdXBkYXRlKHNlbGYpOgotICAgICAgICBzZWxmLl9pbnZva2VfZG5mKFsibWFrZWNhY2hlIl0pCisgICAgICAgIHNlbGYuX2ludm9rZV9kbmYoWyJtYWtlY2FjaGUiLCAiLS1yZWZyZXNoIl0pCiAKICAgICBkZWYgX2ludm9rZV9kbmYoc2VsZiwgZG5mX2FyZ3MsIGZhdGFsID0gVHJ1ZSwgcHJpbnRfb3V0cHV0ID0gVHJ1ZSApOgogICAgICAgICBvcy5lbnZpcm9uWydSUE1fRVRDQ09ORklHRElSJ10gPSBzZWxmLnRhcmdldF9yb290ZnMKQEAgLTExNDUsNyArMTE1Niw3IEBACiAKICAgICAgICAgIyBDcmVhdGUgYW4gdGVtcCBkaXIgYXMgb3BrZyByb290IGZvciBkdW1teSBpbnN0YWxsYXRpb24KICAgICAgICAgdGVtcF9yb290ZnMgPSBzZWxmLmQuZXhwYW5kKCcke1R9L29wa2cnKQotICAgICAgICBvcGtnX2xpYl9kaXIgPSBzZWxmLmQuZ2V0VmFyKCdPUEtHTElCRElSJywgVHJ1ZSkKKyAgICAgICAgb3BrZ19saWJfZGlyID0gc2VsZi5kLmdldFZhcignT1BLR0xJQkRJUicpCiAgICAgICAgIGlmIG9wa2dfbGliX2RpclswXSA9PSAiLyI6CiAgICAgICAgICAgICBvcGtnX2xpYl9kaXIgPSBvcGtnX2xpYl9kaXJbMTpdCiAgICAgICAgIHRlbXBfb3BrZ19kaXIgPSBvcy5wYXRoLmpvaW4odGVtcF9yb290ZnMsIG9wa2dfbGliX2RpciwgJ29wa2cnKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3BhdGNoLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3BhdGNoLnB5CmluZGV4IGYxYWIzZGQuLjU4NGJmNmMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYXRjaC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcGF0Y2gucHkKQEAgLTEsNCArMSw1IEBACiBpbXBvcnQgb2UucGF0aAoraW1wb3J0IG9lLnR5cGVzCiAKIGNsYXNzIE5vdEZvdW5kRXJyb3IoYmIuQkJIYW5kbGVkRXhjZXB0aW9uKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcGF0aC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYXRoLnB5CmluZGV4IDQ0OGEyYjkuLjFlYTAzZDUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYXRoLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYXRoLnB5CkBAIC05OCw3ICs5OCw3IEBACiAgICAgaWYgKG9zLnN0YXQoc3JjKS5zdF9kZXYgPT0gIG9zLnN0YXQoZHN0KS5zdF9kZXYpOgogICAgICAgICAjIE5lZWQgdG8gY29weSBkaXJlY3RvcmllcyBvbmx5IHdpdGggdGFyIGZpcnN0IHNpbmNlIGNwIHdpbGwgZXJyb3IgaWYgdHdvIAogICAgICAgICAjIHdyaXRlcnMgdHJ5IGFuZCBjcmVhdGUgYSBkaXJlY3RvcnkgYXQgdGhlIHNhbWUgdGltZQotICAgICAgICBjbWQgPSAiY2QgJXM7IGZpbmQgLiAtdHlwZSBkIC1wcmludCB8IHRhciAtLXhhdHRycyAtLXhhdHRycy1pbmNsdWRlPScqJyAtY2YgLSAtQyAlcyAtcCAtLW5vLXJlY3Vyc2lvbiAtLWZpbGVzLWZyb20gLSB8IHRhciAtLXhhdHRycyAtLXhhdHRycy1pbmNsdWRlPScqJyAteGYgLSAtQyAlcyIgJSAoc3JjLCBzcmMsIGRzdCkKKyAgICAgICAgY21kID0gImNkICVzOyBmaW5kIC4gLXR5cGUgZCAtcHJpbnQgfCB0YXIgLS14YXR0cnMgLS14YXR0cnMtaW5jbHVkZT0nKicgLWNmIC0gLUMgJXMgLXAgLS1uby1yZWN1cnNpb24gLS1maWxlcy1mcm9tIC0gfCB0YXIgLS14YXR0cnMgLS14YXR0cnMtaW5jbHVkZT0nKicgLXhoZiAtIC1DICVzIiAlIChzcmMsIHNyYywgZHN0KQogICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHNoZWxsPVRydWUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKICAgICAgICAgc291cmNlID0gJycKICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihzcmMpOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3JlY2lwZXV0aWxzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3JlY2lwZXV0aWxzLnB5CmluZGV4IGE3ZmRkMzYuLmNhYjhlNDAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9yZWNpcGV1dGlscy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcmVjaXBldXRpbHMucHkKQEAgLTIsNyArMiw3IEBACiAjCiAjIFNvbWUgY29kZSBib3Jyb3dlZCBmcm9tIHRoZSBPRSBsYXllciBpbmRleAogIwotIyBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgogIwogCiBpbXBvcnQgc3lzCkBAIC0xODgsNiArMTg4LDExIEBACiAgICAgICAgICAgICBmb3Igd3JhcGxpbmUgaW4gd3JhcHBlZFs6LTFdOgogICAgICAgICAgICAgICAgIGFkZGxpbmVzLmFwcGVuZCgnJXMgXFwlcycgJSAod3JhcGxpbmUsIG5ld2xpbmUpKQogICAgICAgICAgICAgYWRkbGluZXMuYXBwZW5kKCclcyVzJyAlICh3cmFwcGVkWy0xXSwgbmV3bGluZSkpCisKKyAgICAgICAgIyBTcGxpdCBvbiBuZXdsaW5lcyAtIHRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGlmIHlvdSBhcmUgb25seQorICAgICAgICAjIGdvaW5nIHRvIHdyaXRlIHRoZSBvdXRwdXQgdG8gZGlzaywgYnV0IGlmIHlvdSB3YW50IHRvIGNvbXBhcmUgaXQKKyAgICAgICAgIyAoYXMgcGF0Y2hfcmVjaXBlX2ZpbGUoKSB3aWxsIGRvIGlmIHBhdGNoPVRydWUpIHRoZW4gaXQncyBpbXBvcnRhbnQuCisgICAgICAgIGFkZGxpbmVzID0gW2xpbmUgZm9yIGwgaW4gYWRkbGluZXMgZm9yIGxpbmUgaW4gbC5zcGxpdGxpbmVzKFRydWUpXQogICAgICAgICBpZiByZXdpbmRjb21tZW50czoKICAgICAgICAgICAgICMgRW5zdXJlIHdlIGluc2VydCB0aGUgbGluZXMgYmVmb3JlIGFueSBsZWFkaW5nIGNvbW1lbnRzCiAgICAgICAgICAgICAjICh0aGF0IHdlJ2Qgd2FudCB0byBlbnN1cmUgcmVtYWluIGxlYWRpbmcgdGhlIG5leHQgdmFsdWUpCkBAIC0zMjAsNyArMzI1LDcgQEAKIAogCiAKLWRlZiBjb3B5X3JlY2lwZV9maWxlcyhkLCB0Z3RfZGlyLCB3aG9sZV9kaXI9RmFsc2UsIGRvd25sb2FkPVRydWUpOgorZGVmIGNvcHlfcmVjaXBlX2ZpbGVzKGQsIHRndF9kaXIsIHdob2xlX2Rpcj1GYWxzZSwgZG93bmxvYWQ9VHJ1ZSwgYWxsX3ZhcmlhbnRzPUZhbHNlKToKICAgICAiIiJDb3B5IChsb2NhbCkgcmVjaXBlIGZpbGVzLCBpbmNsdWRpbmcgYm90aCBmaWxlcyBpbmNsdWRlZCB2aWEgaW5jbHVkZS9yZXF1aXJlLAogICAgIGFuZCBmaWxlcyByZWZlcnJlZCB0byBpbiB0aGUgU1JDX1VSSSB2YXJpYWJsZS4iIiIKICAgICBpbXBvcnQgYmIuZmV0Y2gyCkBAIC0zMjgsMTggKzMzMyw0MSBAQAogCiAgICAgIyBGSVhNRSBuZWVkIGEgd2FybmluZyBpZiB0aGUgdW5leHBhbmRlZCBTUkNfVVJJIHZhbHVlIGNvbnRhaW5zIHZhcmlhYmxlIHJlZmVyZW5jZXMKIAotICAgIHVyaXMgPSAoZC5nZXRWYXIoJ1NSQ19VUkknKSBvciAiIikuc3BsaXQoKQotICAgIGZldGNoID0gYmIuZmV0Y2gyLkZldGNoKHVyaXMsIGQpCi0gICAgaWYgZG93bmxvYWQ6Ci0gICAgICAgIGZldGNoLmRvd25sb2FkKCkKKyAgICB1cmlfdmFsdWVzID0gW10KKyAgICBsb2NhbHBhdGhzID0gW10KKyAgICBkZWYgZmV0Y2hfdXJscyhyZGF0YSk6CisgICAgICAgICMgQ29sbGVjdCB0aGUgbG9jYWwgcGF0aHMgZnJvbSBTUkNfVVJJCisgICAgICAgIHNyY3VyaSA9IHJkYXRhLmdldFZhcignU1JDX1VSSScpIG9yICIiCisgICAgICAgIGlmIHNyY3VyaSBub3QgaW4gdXJpX3ZhbHVlczoKKyAgICAgICAgICAgIGZldGNoID0gYmIuZmV0Y2gyLkZldGNoKHNyY3VyaS5zcGxpdCgpLCByZGF0YSkKKyAgICAgICAgICAgIGlmIGRvd25sb2FkOgorICAgICAgICAgICAgICAgIGZldGNoLmRvd25sb2FkKCkKKyAgICAgICAgICAgIGZvciBwdGggaW4gZmV0Y2gubG9jYWxwYXRocygpOgorICAgICAgICAgICAgICAgIGlmIHB0aCBub3QgaW4gbG9jYWxwYXRoczoKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxwYXRocy5hcHBlbmQocHRoKQorICAgICAgICAgICAgdXJpX3ZhbHVlcy5hcHBlbmQoc3JjdXJpKQorCisgICAgZmV0Y2hfdXJscyhkKQorICAgIGlmIGFsbF92YXJpYW50czoKKyAgICAgICAgIyBHZXQgZmlsZXMgZm9yIG90aGVyIHZhcmlhbnRzIGUuZy4gaW4gdGhlIGNhc2Ugb2YgYSBTUkNfVVJJX2FwcGVuZAorICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgdmFyaWFudHMgPSAobG9jYWxkYXRhLmdldFZhcignQkJDTEFTU0VYVEVORCcpIG9yICcnKS5zcGxpdCgpCisgICAgICAgIGlmIHZhcmlhbnRzOgorICAgICAgICAgICAgIyBFbnN1cmUgd2UgaGFuZGxlIGNsYXNzLXRhcmdldCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggb25lIG9mIHRoZSB2YXJpYW50cworICAgICAgICAgICAgdmFyaWFudHMuYXBwZW5kKCd0YXJnZXQnKQorICAgICAgICAgICAgZm9yIHZhcmlhbnQgaW4gdmFyaWFudHM6CisgICAgICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignQ0xBU1NPVkVSUklERScsICdjbGFzcy0lcycgJSB2YXJpYW50KQorICAgICAgICAgICAgICAgIGZldGNoX3VybHMobG9jYWxkYXRhKQogCiAgICAgIyBDb3B5IGxvY2FsIGZpbGVzIHRvIHRhcmdldCBkaXJlY3RvcnkgYW5kIGdhdGhlciBhbnkgcmVtb3RlIGZpbGVzCi0gICAgYmJfZGlyID0gb3MucGF0aC5kaXJuYW1lKGQuZ2V0VmFyKCdGSUxFJykpICsgb3Muc2VwCisgICAgYmJfZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShkLmdldFZhcignRklMRScpKSkgKyBvcy5zZXAKICAgICByZW1vdGVzID0gW10KICAgICBjb3BpZWQgPSBbXQotICAgIGluY2x1ZGVzID0gW3BhdGggZm9yIHBhdGggaW4gZC5nZXRWYXIoJ0JCSU5DTFVERUQnKS5zcGxpdCgpIGlmCi0gICAgICAgICAgICAgICAgcGF0aC5zdGFydHN3aXRoKGJiX2RpcikgYW5kIG9zLnBhdGguZXhpc3RzKHBhdGgpXQotICAgIGZvciBwYXRoIGluIGZldGNoLmxvY2FscGF0aHMoKSArIGluY2x1ZGVzOgorICAgICMgTmVlZCB0byBkbyB0aGlzIGluIHR3byBzdGVwcyBzaW5jZSB3ZSB3YW50IHRvIGNoZWNrIGFnYWluc3QgdGhlIGFic29sdXRlIHBhdGgKKyAgICBpbmNsdWRlcyA9IFtvcy5wYXRoLmFic3BhdGgocGF0aCkgZm9yIHBhdGggaW4gZC5nZXRWYXIoJ0JCSU5DTFVERUQnKS5zcGxpdCgpIGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpXQorICAgICMgV2UgYWxzbyBjaGVjayB0aGlzIGJlbG93LCBidXQgd2UgZG9uJ3Qgd2FudCBhbnkgaXRlbXMgaW4gdGhpcyBsaXN0IGJlaW5nIGNvbnNpZGVyZWQgcmVtb3RlcworICAgIGluY2x1ZGVzID0gW3BhdGggZm9yIHBhdGggaW4gaW5jbHVkZXMgaWYgcGF0aC5zdGFydHN3aXRoKGJiX2RpcildCisgICAgZm9yIHBhdGggaW4gbG9jYWxwYXRocyArIGluY2x1ZGVzOgogICAgICAgICAjIE9ubHkgaW1wb3J0IGZpbGVzIHRoYXQgYXJlIHVuZGVyIHRoZSBtZXRhIGRpcmVjdG9yeQogICAgICAgICBpZiBwYXRoLnN0YXJ0c3dpdGgoYmJfZGlyKToKICAgICAgICAgICAgIGlmIG5vdCB3aG9sZV9kaXI6CkBAIC03NzgsNyArODA2LDcgQEAKIAogZGVmIGZpbmRfbGF5ZXJkaXIoZm4pOgogICAgICIiIiBGaWd1cmUgb3V0IHRoZSBwYXRoIHRvIHRoZSBiYXNlIG9mIHRoZSBsYXllciBjb250YWluaW5nIGEgZmlsZSAoZS5nLiBhIHJlY2lwZSkiIiIKLSAgICBwdGggPSBmbgorICAgIHB0aCA9IG9zLnBhdGguYWJzcGF0aChmbikKICAgICBsYXllcmRpciA9ICcnCiAgICAgd2hpbGUgcHRoOgogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocHRoLCAnY29uZicsICdsYXllci5jb25mJykpOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3Jvb3Rmcy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9yb290ZnMucHkKaW5kZXggOTY1OTFmMy4uNzU0ZWY1NiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3Jvb3Rmcy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2Uvcm9vdGZzLnB5CkBAIC0yNjEsMTUgKzI2MSwyMiBAQAogICAgICAgICAgICAgIyBSZW1vdmUgY29tcG9uZW50cyB0aGF0IHdlIGRvbid0IG5lZWQgaWYgaXQncyBhIHJlYWQtb25seSByb290ZnMKICAgICAgICAgICAgIHVubmVlZGVkX3BrZ3MgPSBzZWxmLmQuZ2V0VmFyKCJST09URlNfUk9fVU5ORUVERUQiKS5zcGxpdCgpCiAgICAgICAgICAgICBwa2dzX2luc3RhbGxlZCA9IGltYWdlX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzKHNlbGYuZCkKLSAgICAgICAgICAgICMgTWFrZSBzdXJlIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgaXMgbGFzdCBvbiB0aGUgY29tbWFuZCBsaW5lLCBzbwotICAgICAgICAgICAgIyB0aGF0IGl0IGlzIHJlbW92ZWQgbGFzdC4gVGhpcyBtYWtlcyBzdXJlIHRoYXQgaXRzIGRhdGFiYXNlIGlzCi0gICAgICAgICAgICAjIGF2YWlsYWJsZSB3aGlsZSB1bmluc3RhbGxpbmcgcGFja2FnZXMsIGFsbG93aW5nIGFsdGVybmF0aXZlCi0gICAgICAgICAgICAjIHN5bWxpbmtzIG9mIHBhY2thZ2VzIHRvIGJlIHVuaW5zdGFsbGVkIHRvIGJlIG1hbmFnZWQgY29ycmVjdGx5LgorICAgICAgICAgICAgIyBNYWtlIHN1cmUgdXBkYXRlLWFsdGVybmF0aXZlcyBpcyByZW1vdmVkIGxhc3QuIFRoaXMgaXMKKyAgICAgICAgICAgICMgYmVjYXVzZSBpdHMgZGF0YWJhc2UgaGFzIHRvIGF2YWlsYWJsZSB3aGlsZSB1bmluc3RhbGxpbmcKKyAgICAgICAgICAgICMgb3RoZXIgcGFja2FnZXMsIGFsbG93aW5nIGFsdGVybmF0aXZlIHN5bWxpbmtzIG9mIHBhY2thZ2VzCisgICAgICAgICAgICAjIHRvIGJlIHVuaW5zdGFsbGVkIG9yIHRvIGJlIG1hbmFnZWQgY29ycmVjdGx5IG90aGVyd2lzZS4KICAgICAgICAgICAgIHByb3ZpZGVyID0gc2VsZi5kLmdldFZhcigiVklSVFVBTC1SVU5USU1FX3VwZGF0ZS1hbHRlcm5hdGl2ZXMiKQogICAgICAgICAgICAgcGtnc190b19yZW1vdmUgPSBzb3J0ZWQoW3BrZyBmb3IgcGtnIGluIHBrZ3NfaW5zdGFsbGVkIGlmIHBrZyBpbiB1bm5lZWRlZF9wa2dzXSwga2V5PWxhbWJkYSB4OiB4ID09IHByb3ZpZGVyKQogCisgICAgICAgICAgICAjIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgcHJvdmlkZXIgaXMgcmVtb3ZlZCBpbiBpdHMgb3duIHJlbW92ZSgpCisgICAgICAgICAgICAjIGNhbGwgYmVjYXVzZSBhbGwgcGFja2FnZSBtYW5hZ2VycyBkbyBub3QgZ3VhcmFudGVlIHRoZSBwYWNrYWdlcworICAgICAgICAgICAgIyBhcmUgcmVtb3ZlZCBpbiB0aGUgb3JkZXIgdGhleSBnaXZlbiBpbiB0aGUgbGlzdCAod2hpY2ggaXMKKyAgICAgICAgICAgICMgcGFzc2VkIHRvIHRoZSBjb21tYW5kIGxpbmUpLiBUaGUgc29ydGluZyBkb25lIGVhcmxpZXIgaXMKKyAgICAgICAgICAgICMgdXRpbGl6ZWQgdG8gaW1wbGVtZW50IHRoZSAyLXN0YWdlIHJlbW92YWwuCisgICAgICAgICAgICBpZiBsZW4ocGtnc190b19yZW1vdmUpID4gMToKKyAgICAgICAgICAgICAgICBzZWxmLnBtLnJlbW92ZShwa2dzX3RvX3JlbW92ZVs6LTFdLCBGYWxzZSkKICAgICAgICAgICAgIGlmIGxlbihwa2dzX3RvX3JlbW92ZSkgPiAwOgotICAgICAgICAgICAgICAgIHNlbGYucG0ucmVtb3ZlKHBrZ3NfdG9fcmVtb3ZlLCBGYWxzZSkKKyAgICAgICAgICAgICAgICBzZWxmLnBtLnJlbW92ZShbcGtnc190b19yZW1vdmVbLTFdXSwgRmFsc2UpCiAKICAgICAgICAgaWYgZGVsYXllZF9wb3N0aW5zdHM6CiAgICAgICAgICAgICBzZWxmLl9zYXZlX3Bvc3RpbnN0cygpCkBAIC0zMDIsMTAgKzMwOSwxMSBAQAogICAgICAgICAgICAgYmIubm90ZSgiPiBFeGVjdXRpbmcgJXMgaW50ZXJjZXB0IC4uLiIgJSBzY3JpcHQpCiAKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChzY3JpcHRfZnVsbCkKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChzY3JpcHRfZnVsbCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICAgICAgICAgIGlmIG91dHB1dDogYmIubm90ZShvdXRwdXQuZGVjb2RlKCJ1dGYtOCIpKQogICAgICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgYmIud2FybigiVGhlIHBvc3RpbnN0YWxsIGludGVyY2VwdCBob29rICclcycgZmFpbGVkIChleGl0IGNvZGU6ICVkKSEgU2VlIGxvZyBmb3IgZGV0YWlscyEgKE91dHB1dDogJXMpIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAoc2NyaXB0LCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKyAgICAgICAgICAgICAgICBiYi53YXJuKCJUaGUgcG9zdGluc3RhbGwgaW50ZXJjZXB0IGhvb2sgJyVzJyBmYWlsZWQsIGRldGFpbHMgaW4gbG9nLmRvX3Jvb3RmcyIgJSBzY3JpcHQpCisgICAgICAgICAgICAgICAgYmIubm90ZSgiRXhpdCBjb2RlICVkLiBPdXRwdXQ6XG4lcyIgJSAoZS5yZXR1cm5jb2RlLCBlLm91dHB1dC5kZWNvZGUoInV0Zi04IikpKQogCiAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHNjcmlwdF9mdWxsKSBhcyBpbnRlcmNlcHQ6CiAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyZWRfcGtncyA9IE5vbmUKQEAgLTUyNCw3ICs1MzIsOCBAQAogICAgICAgICAgICAgc2VsZi5wbS5zYXZlX3JwbXBvc3RpbnN0KHBrZykKIAogICAgIGRlZiBfY2xlYW51cChzZWxmKToKLSAgICAgICAgcGFzcworICAgICAgICBzZWxmLnBtLl9pbnZva2VfZG5mKFsiY2xlYW4iLCAiYWxsIl0pCisKIAogY2xhc3MgRHBrZ09wa2dSb290ZnMoUm9vdGZzKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgcHJvZ3Jlc3NfcmVwb3J0ZXI9Tm9uZSwgbG9nY2F0Y2hlcj1Ob25lKToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9zZGsucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2Uvc2RrLnB5CmluZGV4IDlmZTE2ODcuLmEzYTZjMzkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9zZGsucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3Nkay5weQpAQCAtMTUyLDYgKzE1Miw4IEBACiAgICAgICAgIHBtLmluc3RhbGwocGtnc19hdHRlbXB0LCBUcnVlKQogCiAgICAgZGVmIF9wb3B1bGF0ZShzZWxmKToKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcigiUE9QVUxBVEVfU0RLX1BSRV9UQVJHRVRfQ09NTUFORCIpKQorCiAgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgVEFSR0VUIHBhY2thZ2VzIikKICAgICAgICAgc2VsZi5fcG9wdWxhdGVfc3lzcm9vdChzZWxmLnRhcmdldF9wbSwgc2VsZi50YXJnZXRfbWFuaWZlc3QpCiAKQEAgLTIzMyw2ICsyMzUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW0ZhbHNlLCBUcnVlXVtwa2dfdHlwZSA9PSBNYW5pZmVzdC5QS0dfVFlQRV9BVFRFTVBUX09OTFldKQogCiAgICAgZGVmIF9wb3B1bGF0ZShzZWxmKToKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcigiUE9QVUxBVEVfU0RLX1BSRV9UQVJHRVRfQ09NTUFORCIpKQorCiAgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgVEFSR0VUIHBhY2thZ2VzIikKICAgICAgICAgc2VsZi5fcG9wdWxhdGVfc3lzcm9vdChzZWxmLnRhcmdldF9wbSwgc2VsZi50YXJnZXRfbWFuaWZlc3QpCiAKQEAgLTMxNSw2ICszMTksOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW0ZhbHNlLCBUcnVlXVtwa2dfdHlwZSA9PSBNYW5pZmVzdC5QS0dfVFlQRV9BVFRFTVBUX09OTFldKQogCiAgICAgZGVmIF9wb3B1bGF0ZShzZWxmKToKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcigiUE9QVUxBVEVfU0RLX1BSRV9UQVJHRVRfQ09NTUFORCIpKQorCiAgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgVEFSR0VUIHBhY2thZ2VzIikKICAgICAgICAgc2VsZi5fcG9wdWxhdGVfc3lzcm9vdChzZWxmLnRhcmdldF9wbSwgc2VsZi50YXJnZXRfbWFuaWZlc3QpCiAKQEAgLTM3OSw1ICszODUsMjQgQEAKICAgICBvcy5lbnZpcm9uLmNsZWFyKCkKICAgICBvcy5lbnZpcm9uLnVwZGF0ZShlbnZfYmtwKQogCitkZWYgZ2V0X2V4dHJhX3Nka2luZm8oc3N0YXRlX2Rpcik6CisgICAgIiIiCisgICAgVGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSB1c2VkIGZvciBnZW5lcmF0aW5nIHRoZSB0YXJnZXQgYW5kIGhvc3QgbWFuaWZlc3QgZmlsZXMgcGFja2FnZXMgb2YgZVNESy4KKyAgICAiIiIKKyAgICBpbXBvcnQgbWF0aAorICAgIAorICAgIGV4dHJhX2luZm8gPSB7fQorICAgIGV4dHJhX2luZm9bJ3Rhc2tzaXplcyddID0ge30KKyAgICBleHRyYV9pbmZvWydmaWxlc2l6ZXMnXSA9IHt9CisgICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsoc3N0YXRlX2Rpcik6CisgICAgICAgIGZvciBmbiBpbiBmaWxlczoKKyAgICAgICAgICAgIGlmIGZuLmVuZHN3aXRoKCcudGd6Jyk6CisgICAgICAgICAgICAgICAgZnNpemUgPSBpbnQobWF0aC5jZWlsKGZsb2F0KG9zLnBhdGguZ2V0c2l6ZShvcy5wYXRoLmpvaW4ocm9vdCwgZm4pKSkgLyAxMDI0KSkKKyAgICAgICAgICAgICAgICB0YXNrID0gZm4ucnNwbGl0KCc6JywxKVsxXS5zcGxpdCgnXycsMSlbMV0uc3BsaXQoJywnKVswXQorICAgICAgICAgICAgICAgIG9yaWd0b3RhbCA9IGV4dHJhX2luZm9bJ3Rhc2tzaXplcyddLmdldCh0YXNrLCAwKQorICAgICAgICAgICAgICAgIGV4dHJhX2luZm9bJ3Rhc2tzaXplcyddW3Rhc2tdID0gb3JpZ3RvdGFsICsgZnNpemUKKyAgICAgICAgICAgICAgICBleHRyYV9pbmZvWydmaWxlc2l6ZXMnXVtmbl0gPSBmc2l6ZQorICAgIHJldHVybiBleHRyYV9pbmZvCisKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3NzdGF0ZXNpZy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9zc3RhdGVzaWcucHkKaW5kZXggYjhkZDRjOC4uM2E4Nzc4ZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3NzdGF0ZXNpZy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2Uvc3N0YXRlc2lnLnB5CkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICAjIFF1aWx0IChwYXRjaCBhcHBsaWNhdGlvbikgY2hhbmdpbmcgaXNuJ3QgbGlrZWx5IHRvIGFmZmVjdCBhbnl0aGluZwotICAgIGV4Y2x1ZGVsaXN0ID0gWydxdWlsdC1uYXRpdmUnLCAnc3VidmVyc2lvbi1uYXRpdmUnLCAnZ2l0LW5hdGl2ZSddCisgICAgZXhjbHVkZWxpc3QgPSBbJ3F1aWx0LW5hdGl2ZScsICdzdWJ2ZXJzaW9uLW5hdGl2ZScsICdnaXQtbmF0aXZlJywgJ2NjYWNoZS1uYXRpdmUnXQogICAgIGlmIGRlcG5hbWUgaW4gZXhjbHVkZWxpc3QgYW5kIHJlY2lwZW5hbWUgIT0gZGVwbmFtZToKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKQEAgLTMyMCw3ICszMjAsNyBAQAogCiAgICAgaWYgbm90IHRhc2toYXNobGlzdCBvciAobGVuKGZpbGVkYXRlcykgPCAyIGFuZCBub3QgZm91bmRhbGwpOgogICAgICAgICAjIFRoYXQgZGlkbid0IHdvcmssIGxvb2sgaW4gc3N0YXRlLWNhY2hlCi0gICAgICAgIGhhc2hlcyA9IHRhc2toYXNobGlzdCBvciBbJyonXQorICAgICAgICBoYXNoZXMgPSB0YXNraGFzaGxpc3Qgb3IgWyc/JyAqIDMyXQogICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKICAgICAgICAgZm9yIGhhc2h2YWwgaW4gaGFzaGVzOgogICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUEFDS0FHRV9BUkNIJywgJyonKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlcm1pbmFsLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlcm1pbmFsLnB5CmluZGV4IDJmMThlYzAuLjk0YWZlMzkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90ZXJtaW5hbC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdGVybWluYWwucHkKQEAgLTI5Miw2ICsyOTIsOCBAQAogICAgICAgICAgICAgdmVybnVtID0gdmVyLnNwbGl0KCcgJylbLTFdCiAgICAgICAgIGlmIHZlci5zdGFydHN3aXRoKCdHTk9NRSBUZXJtaW5hbCcpOgogICAgICAgICAgICAgdmVybnVtID0gdmVyLnNwbGl0KCcgJylbLTFdCisgICAgICAgIGlmIHZlci5zdGFydHN3aXRoKCdNQVRFIFRlcm1pbmFsJyk6CisgICAgICAgICAgICB2ZXJudW0gPSB2ZXIuc3BsaXQoJyAnKVstMV0KICAgICAgICAgaWYgdmVyLnN0YXJ0c3dpdGgoJ3RtdXgnKToKICAgICAgICAgICAgIHZlcm51bSA9IHZlci5zcGxpdCgpWy0xXQogICAgIHJldHVybiB2ZXJudW0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS91c2VyYWRkLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3VzZXJhZGQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc5YWM3NgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS91c2VyYWRkLnB5CkBAIC0wLDAgKzEsNjggQEAKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IHJlCisKK2NsYXNzIG15QXJndW1lbnRQYXJzZXIoYXJncGFyc2UuQXJndW1lbnRQYXJzZXIpOgorICAgIGRlZiBfcHJpbnRfbWVzc2FnZShzZWxmLCBtZXNzYWdlLCBmaWxlPU5vbmUpOgorICAgICAgICBiYi53YXJuKCIlcyAtICVzOiAlcyIgJSAoZC5nZXRWYXIoJ1BOJyksIHBrZywgbWVzc2FnZSkpCisKKyAgICAjIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZC4uLgorICAgIGRlZiBleGl0KHNlbGYsIHN0YXR1cz0wLCBtZXNzYWdlPU5vbmUpOgorICAgICAgICBtZXNzYWdlID0gbWVzc2FnZSBvciAoIiVzIC0gJXM6IHVzZXJhZGQuYmJjbGFzczogQXJndW1lbnQgcGFyc2luZyBleGl0ZWQiICUgKGQuZ2V0VmFyKCdQTicpLCBwa2cpKQorICAgICAgICBlcnJvcihtZXNzYWdlKQorCisgICAgZGVmIGVycm9yKHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKG1lc3NhZ2UpCisKK2RlZiBzcGxpdF9jb21tYW5kcyhwYXJhbXMpOgorICAgIHBhcmFtcyA9IHJlLnNwbGl0KCcnJ1sgXHRdKjtbIFx0XSooPz0oPzpbXiciXXwnW14nXSonfCJbXiJdKiIpKiQpJycnLCBwYXJhbXMuc3RyaXAoKSkKKyAgICAjIFJlbW92ZSBhbnkgZW1wdHkgaXRlbXMKKyAgICByZXR1cm4gW3ggZm9yIHggaW4gcGFyYW1zIGlmIHhdCisKK2RlZiBzcGxpdF9hcmdzKHBhcmFtcyk6CisgICAgcGFyYW1zID0gcmUuc3BsaXQoJycnWyBcdF0rKD89KD86W14nIl18J1teJ10qJ3wiW14iXSoiKSokKScnJywgcGFyYW1zLnN0cmlwKCkpCisgICAgIyBSZW1vdmUgYW55IGVtcHR5IGl0ZW1zCisgICAgcmV0dXJuIFt4IGZvciB4IGluIHBhcmFtcyBpZiB4XQorCitkZWYgYnVpbGRfdXNlcmFkZF9wYXJzZXIoKToKKyAgICAjIFRoZSBmb2xsb3dpbmcgY29tZXMgZnJvbSAtLWhlbHAgb24gdXNlcmFkZCBmcm9tIHNoYWRvdworICAgIHBhcnNlciA9IG15QXJndW1lbnRQYXJzZXIocHJvZz0ndXNlcmFkZCcpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWIiLCAiLS1iYXNlLWRpciIsIG1ldGF2YXI9IkJBU0VfRElSIiwgaGVscD0iYmFzZSBkaXJlY3RvcnkgZm9yIHRoZSBob21lIGRpcmVjdG9yeSBvZiB0aGUgbmV3IGFjY291bnQiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1jIiwgIi0tY29tbWVudCIsIG1ldGF2YXI9IkNPTU1FTlQiLCBoZWxwPSJHRUNPUyBmaWVsZCBvZiB0aGUgbmV3IGFjY291bnQiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1kIiwgIi0taG9tZS1kaXIiLCBtZXRhdmFyPSJIT01FX0RJUiIsIGhlbHA9ImhvbWUgZGlyZWN0b3J5IG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLUQiLCAiLS1kZWZhdWx0cyIsIGhlbHA9InByaW50IG9yIGNoYW5nZSBkZWZhdWx0IHVzZXJhZGQgY29uZmlndXJhdGlvbiIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWUiLCAiLS1leHBpcmVkYXRlIiwgbWV0YXZhcj0iRVhQSVJFX0RBVEUiLCBoZWxwPSJleHBpcmF0aW9uIGRhdGUgb2YgdGhlIG5ldyBhY2NvdW50IikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItZiIsICItLWluYWN0aXZlIiwgbWV0YXZhcj0iSU5BQ1RJVkUiLCBoZWxwPSJwYXNzd29yZCBpbmFjdGl2aXR5IHBlcmlvZCBvZiB0aGUgbmV3IGFjY291bnQiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1nIiwgIi0tZ2lkIiwgbWV0YXZhcj0iR1JPVVAiLCBoZWxwPSJuYW1lIG9yIElEIG9mIHRoZSBwcmltYXJ5IGdyb3VwIG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLUciLCAiLS1ncm91cHMiLCBtZXRhdmFyPSJHUk9VUFMiLCBoZWxwPSJsaXN0IG9mIHN1cHBsZW1lbnRhcnkgZ3JvdXBzIG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWsiLCAiLS1za2VsIiwgbWV0YXZhcj0iU0tFTF9ESVIiLCBoZWxwPSJ1c2UgdGhpcyBhbHRlcm5hdGl2ZSBza2VsZXRvbiBkaXJlY3RvcnkiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1LIiwgIi0ta2V5IiwgbWV0YXZhcj0iS0VZPVZBTFVFIiwgaGVscD0ib3ZlcnJpZGUgL2V0Yy9sb2dpbi5kZWZzIGRlZmF1bHRzIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItbCIsICItLW5vLWxvZy1pbml0IiwgaGVscD0iZG8gbm90IGFkZCB0aGUgdXNlciB0byB0aGUgbGFzdGxvZyBhbmQgZmFpbGxvZyBkYXRhYmFzZXMiLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1tIiwgIi0tY3JlYXRlLWhvbWUiLCBoZWxwPSJjcmVhdGUgdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSIsIGFjdGlvbj0ic3RvcmVfY29uc3QiLCBjb25zdD1UcnVlKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1NIiwgIi0tbm8tY3JlYXRlLWhvbWUiLCBkZXN0PSJjcmVhdGVfaG9tZSIsIGhlbHA9ImRvIG5vdCBjcmVhdGUgdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSIsIGFjdGlvbj0ic3RvcmVfY29uc3QiLCBjb25zdD1GYWxzZSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItTiIsICItLW5vLXVzZXItZ3JvdXAiLCBkZXN0PSJ1c2VyX2dyb3VwIiwgaGVscD0iZG8gbm90IGNyZWF0ZSBhIGdyb3VwIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgdXNlciIsIGFjdGlvbj0ic3RvcmVfY29uc3QiLCBjb25zdD1GYWxzZSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItbyIsICItLW5vbi11bmlxdWUiLCBoZWxwPSJhbGxvdyB0byBjcmVhdGUgdXNlcnMgd2l0aCBkdXBsaWNhdGUgKG5vbi11bmlxdWUgVUlEKSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXAiLCAiLS1wYXNzd29yZCIsIG1ldGF2YXI9IlBBU1NXT1JEIiwgaGVscD0iZW5jcnlwdGVkIHBhc3N3b3JkIG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLVAiLCAiLS1jbGVhci1wYXNzd29yZCIsIG1ldGF2YXI9IkNMRUFSX1BBU1NXT1JEIiwgaGVscD0idXNlIHRoaXMgY2xlYXIgcGFzc3dvcmQgZm9yIHRoZSBuZXcgYWNjb3VudCIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLVIiLCAiLS1yb290IiwgbWV0YXZhcj0iQ0hST09UX0RJUiIsIGhlbHA9ImRpcmVjdG9yeSB0byBjaHJvb3QgaW50byIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXIiLCAiLS1zeXN0ZW0iLCBoZWxwPSJjcmVhdGUgYSBzeXN0ZW0gYWNjb3VudCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXMiLCAiLS1zaGVsbCIsIG1ldGF2YXI9IlNIRUxMIiwgaGVscD0ibG9naW4gc2hlbGwgb2YgdGhlIG5ldyBhY2NvdW50IikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItdSIsICItLXVpZCIsIG1ldGF2YXI9IlVJRCIsIGhlbHA9InVzZXIgSUQgb2YgdGhlIG5ldyBhY2NvdW50IikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItVSIsICItLXVzZXItZ3JvdXAiLCBoZWxwPSJjcmVhdGUgYSBncm91cCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHVzZXIiLCBhY3Rpb249InN0b3JlX2NvbnN0IiwgY29uc3Q9VHJ1ZSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCJMT0dJTiIsIGhlbHA9IkxvZ2luIG5hbWUgb2YgdGhlIG5ldyB1c2VyIikKKworICAgIHJldHVybiBwYXJzZXIKKworZGVmIGJ1aWxkX2dyb3VwYWRkX3BhcnNlcigpOgorICAgICMgVGhlIGZvbGxvd2luZyBjb21lcyBmcm9tIC0taGVscCBvbiBncm91cGFkZCBmcm9tIHNoYWRvdworICAgIHBhcnNlciA9IG15QXJndW1lbnRQYXJzZXIocHJvZz0nZ3JvdXBhZGQnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1mIiwgIi0tZm9yY2UiLCBoZWxwPSJleGl0IHN1Y2Nlc3NmdWxseSBpZiB0aGUgZ3JvdXAgYWxyZWFkeSBleGlzdHMsIGFuZCBjYW5jZWwgLWcgaWYgdGhlIEdJRCBpcyBhbHJlYWR5IHVzZWQiLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1nIiwgIi0tZ2lkIiwgbWV0YXZhcj0iR0lEIiwgaGVscD0idXNlIEdJRCBmb3IgdGhlIG5ldyBncm91cCIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLUsiLCAiLS1rZXkiLCBtZXRhdmFyPSJLRVk9VkFMVUUiLCBoZWxwPSJvdmVycmlkZSAvZXRjL2xvZ2luLmRlZnMgZGVmYXVsdHMiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1vIiwgIi0tbm9uLXVuaXF1ZSIsIGhlbHA9ImFsbG93IHRvIGNyZWF0ZSBncm91cHMgd2l0aCBkdXBsaWNhdGUgKG5vbi11bmlxdWUpIEdJRCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXAiLCAiLS1wYXNzd29yZCIsIG1ldGF2YXI9IlBBU1NXT1JEIiwgaGVscD0idXNlIHRoaXMgZW5jcnlwdGVkIHBhc3N3b3JkIGZvciB0aGUgbmV3IGdyb3VwIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItUCIsICItLWNsZWFyLXBhc3N3b3JkIiwgbWV0YXZhcj0iQ0xFQVJfUEFTU1dPUkQiLCBoZWxwPSJ1c2UgdGhpcyBjbGVhciBwYXNzd29yZCBmb3IgdGhlIG5ldyBncm91cCIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLVIiLCAiLS1yb290IiwgbWV0YXZhcj0iQ0hST09UX0RJUiIsIGhlbHA9ImRpcmVjdG9yeSB0byBjaHJvb3QgaW50byIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXIiLCAiLS1zeXN0ZW0iLCBoZWxwPSJjcmVhdGUgYSBzeXN0ZW0gYWNjb3VudCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiR1JPVVAiLCBoZWxwPSJHcm91cCBuYW1lIG9mIHRoZSBuZXcgZ3JvdXAiKQorCisgICAgcmV0dXJuIHBhcnNlcgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3V0aWxzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lL3V0aWxzLnB5CmluZGV4IDMzMGE1ZmYuLjY0M2FiNzggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZS91dGlscy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdXRpbHMucHkKQEAgLTEyNiw2ICsxMjYsNDYgQEAKICAgICBpZiBhZGRmZWF0dXJlczoKICAgICAgICAgZC5hcHBlbmRWYXIodmFyLCAiICIgKyAiICIuam9pbihhZGRmZWF0dXJlcykpCiAKK2RlZiBhbGxfZGlzdHJvX2ZlYXR1cmVzKGQsIGZlYXR1cmVzLCB0cnVldmFsdWU9IjEiLCBmYWxzZXZhbHVlPSIiKToKKyAgICAiIiIKKyAgICBSZXR1cm5zIHRydWV2YWx1ZSBpZiAqYWxsKiBnaXZlbiBmZWF0dXJlcyBhcmUgc2V0IGluIERJU1RST19GRUFUVVJFUywKKyAgICBlbHNlIGZhbHNldmFsdWUuIFRoZSBmZWF0dXJlcyBjYW4gYmUgZ2l2ZW4gYXMgc2luZ2xlIHN0cmluZyBvciBhbnl0aGluZworICAgIHRoYXQgY2FuIGJlIHR1cm5lZCBpbnRvIGEgc2V0LgorCisgICAgVGhpcyBpcyBhIHNob3J0ZXIsIG1vcmUgZmxleGlibGUgdmVyc2lvbiBvZgorICAgIGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCBmZWF0dXJlcywgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKS4KKworICAgIFdpdGhvdXQgZXhwbGljaXQgdHJ1ZS9mYWxzZSB2YWx1ZXMgaXQgY2FuIGJlIHVzZWQgZGlyZWN0bHkgd2hlcmUKKyAgICBQeXRob24gZXhwZWN0cyBhIGJvb2xlYW46CisgICAgICAgaWYgb2UudXRpbHMuYWxsX2Rpc3Ryb19mZWF0dXJlcyhkLCAiZm9vIGJhciIpOgorICAgICAgICAgICBiYi5mYXRhbCgiZm9vIGFuZCBiYXIgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBESVNUUk9fRkVBVFVSRVMiKQorCisgICAgV2l0aCBqdXN0IGEgdHJ1ZXZhbHVlLCBpdCBjYW4gYmUgdXNlZCB0byBpbmNsdWRlIGZpbGVzIHRoYXQgYXJlIG1lYW50IHRvIGJlCisgICAgdXNlZCBvbmx5IHdoZW4gcmVxdWVzdGVkIHZpYSBESVNUUk9fRkVBVFVSRVM6CisgICAgICAgcmVxdWlyZSAke0Agb2UudXRpbHMuYWxsX2Rpc3Ryb19mZWF0dXJlcyhkLCAiZm9vIGJhciIsICJmb28tYW5kLWJhci5pbmMiKQorICAgICIiIgorICAgIHJldHVybiBiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgZmVhdHVyZXMsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCkKKworZGVmIGFueV9kaXN0cm9fZmVhdHVyZXMoZCwgZmVhdHVyZXMsIHRydWV2YWx1ZT0iMSIsIGZhbHNldmFsdWU9IiIpOgorICAgICIiIgorICAgIFJldHVybnMgdHJ1ZXZhbHVlIGlmIGF0IGxlYXN0ICpvbmUqIG9mIHRoZSBnaXZlbiBmZWF0dXJlcyBpcyBzZXQgaW4gRElTVFJPX0ZFQVRVUkVTLAorICAgIGVsc2UgZmFsc2V2YWx1ZS4gVGhlIGZlYXR1cmVzIGNhbiBiZSBnaXZlbiBhcyBzaW5nbGUgc3RyaW5nIG9yIGFueXRoaW5nCisgICAgdGhhdCBjYW4gYmUgdHVybmVkIGludG8gYSBzZXQuCisKKyAgICBUaGlzIGlzIGEgc2hvcnRlciwgbW9yZSBmbGV4aWJsZSB2ZXJzaW9uIG9mCisgICAgYmIudXRpbHMuY29udGFpbnNfYW55KCJESVNUUk9fRkVBVFVSRVMiLCBmZWF0dXJlcywgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKS4KKworICAgIFdpdGhvdXQgZXhwbGljaXQgdHJ1ZS9mYWxzZSB2YWx1ZXMgaXQgY2FuIGJlIHVzZWQgZGlyZWN0bHkgd2hlcmUKKyAgICBQeXRob24gZXhwZWN0cyBhIGJvb2xlYW46CisgICAgICAgaWYgbm90IG9lLnV0aWxzLmFueV9kaXN0cm9fZmVhdHVyZXMoZCwgImZvbyBiYXIiKToKKyAgICAgICAgICAgYmIuZmF0YWwoImZvbywgYmFyIG9yIGJvdGggbXVzdCBiZSBzZXQgaW4gRElTVFJPX0ZFQVRVUkVTIikKKworICAgIFdpdGgganVzdCBhIHRydWV2YWx1ZSwgaXQgY2FuIGJlIHVzZWQgdG8gaW5jbHVkZSBmaWxlcyB0aGF0IGFyZSBtZWFudCB0byBiZQorICAgIHVzZWQgb25seSB3aGVuIHJlcXVlc3RlZCB2aWEgRElTVFJPX0ZFQVRVUkVTOgorICAgICAgIHJlcXVpcmUgJHtAIG9lLnV0aWxzLmFueV9kaXN0cm9fZmVhdHVyZXMoZCwgImZvbyBiYXIiLCAiZm9vLW9yLWJhci5pbmMiKQorCisgICAgIiIiCisgICAgcmV0dXJuIGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiRElTVFJPX0ZFQVRVUkVTIiwgZmVhdHVyZXMsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCkKIAogZGVmIHBhY2thZ2VzX2ZpbHRlcl9vdXRfc3lzdGVtKGQpOgogICAgICIiIgpAQCAtMTg0LDI1ICsyMjQsMzAgQEAKICAgICBkZWYgaW5pdF93b3JrZXIoKToKICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBzaWduYWwuU0lHX0lHTikKIAorICAgIGZhaWxzID0gW10KKworICAgIGRlZiBmYWlsdXJlcyhyZXMpOgorICAgICAgICBmYWlscy5hcHBlbmQocmVzKQorCiAgICAgbnByb2MgPSBtaW4obXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpLCBsZW4oY29tbWFuZHMpKQogICAgIHBvb2wgPSBiYi51dGlscy5tdWx0aXByb2Nlc3Npbmdwb29sKG5wcm9jLCBpbml0X3dvcmtlcikKLSAgICBpbWFwID0gcG9vbC5pbWFwKGZ1bmN0aW9uLCBjb21tYW5kcykKIAogICAgIHRyeToKLSAgICAgICAgcmVzID0gbGlzdChpbWFwKQorICAgICAgICBtYXByZXN1bHQgPSBwb29sLm1hcF9hc3luYyhmdW5jdGlvbiwgY29tbWFuZHMsIGVycm9yX2NhbGxiYWNrPWZhaWx1cmVzKQorCiAgICAgICAgIHBvb2wuY2xvc2UoKQogICAgICAgICBwb29sLmpvaW4oKQotICAgICAgICByZXN1bHRzID0gW10KLSAgICAgICAgZm9yIHJlc3VsdCBpbiByZXM6Ci0gICAgICAgICAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KQotICAgICAgICByZXR1cm4gcmVzdWx0cwotCisgICAgICAgIHJlc3VsdHMgPSBtYXByZXN1bHQuZ2V0KCkKICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgIHBvb2wudGVybWluYXRlKCkKICAgICAgICAgcG9vbC5qb2luKCkKICAgICAgICAgcmFpc2UKIAorICAgIGlmIGZhaWxzOgorICAgICAgICByYWlzZSBmYWlsc1swXQorCisgICAgcmV0dXJuIHJlc3VsdHMKKwogZGVmIHNxdWFzaHNwYWNlcyhzdHJpbmcpOgogICAgIGltcG9ydCByZQogICAgIHJldHVybiByZS5zdWIoIlxzKyIsICIgIiwgc3RyaW5nKS5zdHJpcCgpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9idWlsZHBlcmYvYmFzZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2J1aWxkcGVyZi9iYXNlLnB5CmluZGV4IDZlNjJiMjcuLjdiMmI0YWEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2J1aWxkcGVyZi9iYXNlLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2J1aWxkcGVyZi9iYXNlLnB5CkBAIC00ODUsNiArNDg1LDcgQEAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIHN5bmMoKToKICAgICAgICAgIiIiU3luYyBhbmQgZHJvcCBrZXJuZWwgY2FjaGVzIiIiCisgICAgICAgIHJ1bkNtZDIoJ2JpdGJha2UgLW0nLCBpZ25vcmVfc3RhdHVzPVRydWUpCiAgICAgICAgIGxvZy5kZWJ1ZygiU3luY2luZyBhbmQgZHJvcHBpbmcga2VybmVsIGNhY2hlcyIiIikKICAgICAgICAgS2VybmVsRHJvcENhY2hlcy5kcm9wKCkKICAgICAgICAgb3Muc3luYygpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9idWlsZHBlcmYvdGVzdF9iYXNpYy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2J1aWxkcGVyZi90ZXN0X2Jhc2ljLnB5CmluZGV4IGE5ZTRhNWIuLmExOTA4OWEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2J1aWxkcGVyZi90ZXN0X2Jhc2ljLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2J1aWxkcGVyZi90ZXN0X2Jhc2ljLnB5CkBAIC0xMjEsNSArMTIxLDcgQEAKICAgICAgICAgc2VsZi5zeW5jKCkKICAgICAgICAgc2VsZi5tZWFzdXJlX2NtZF9yZXNvdXJjZXMoW2luc3RhbGxlciwgJy15JywgJy1kJywgZGVwbG95X2Rpcl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXBsb3knLCAnZVNESyBkZXBsb3knKQorICAgICAgICAjbWFrZSBzdXJlIGJpdGJha2UgaXMgdW5sb2FkZWQKKyAgICAgICAgc2VsZi5zeW5jKCkKICAgICAgICAgc2VsZi5tZWFzdXJlX2Rpc2tfdXNhZ2UoZGVwbG95X2RpciwgJ2RlcGxveV9kaXInLCAnZGVwbG95IGRpcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGFyZW50X3NpemU9VHJ1ZSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvbnRyb2xsZXJzL21hc3RlcmltYWdlLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29udHJvbGxlcnMvbWFzdGVyaW1hZ2UucHkKaW5kZXggMDc0MThmYy4uYTI5MTJmYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29udHJvbGxlcnMvbWFzdGVyaW1hZ2UucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29udHJvbGxlcnMvbWFzdGVyaW1hZ2UucHkKQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgICAgICAgICAgdGltZS5zbGVlcCgxMCkKICAgICAgICAgICAgIHNlbGYucG93ZXJfY3RsKCJjeWNsZSIpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzdGF0dXMsIG91dHB1dCA9IGNvbm4ucnVuKCJyZWJvb3QiKQorICAgICAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBjb25uLnJ1bigic3luYzsgeyBzbGVlcCAxOyByZWJvb3Q7IH0gPiAvZGV2L251bGwgJiIpCiAgICAgICAgICAgICBpZiBzdGF0dXMgIT0gMDoKICAgICAgICAgICAgICAgICBiYi5lcnJvcigiRmFpbGVkIHJlYm9vdGluZyB0YXJnZXQgYW5kIG5vIHBvd2VyIGNvbnRyb2wgY29tbWFuZCBkZWZpbmVkLiBZb3UgbmVlZCB0byBtYW51YWxseSByZXNldCB0aGUgZGV2aWNlLlxuJXMiICUgb3V0cHV0KQogCkBAIC0xNDMsNyArMTQzLDcgQEAKICAgICBkZWYgX2RlcGxveShzZWxmKToKICAgICAgICAgcGFzcwogCi0gICAgZGVmIHN0YXJ0KHNlbGYsIHBhcmFtcz1Ob25lKToKKyAgICBkZWYgc3RhcnQoc2VsZiwgZXh0cmFfYm9vdHBhcmFtcz1Ob25lKToKICAgICAgICAgYmIucGxhaW4oIiVzIC0gYm9vdCB0ZXN0IGltYWdlIG9uIHRhcmdldCIgJSBzZWxmLnBuKQogICAgICAgICBzZWxmLl9zdGFydCgpCiAgICAgICAgICMgc2V0IHRoZSBzc2ggb2JqZWN0IGZvciB0aGUgdGFyZ2V0L3Rlc3QgaW1hZ2UKQEAgLTE1Niw3ICsxNTYsNyBAQAogCiAgICAgZGVmIHN0b3Aoc2VsZik6CiAgICAgICAgIGJiLnBsYWluKCIlcyAtIHJlYm9vdC9wb3dlcmN5Y2xlIHRhcmdldCIgJSBzZWxmLnBuKQotICAgICAgICBzZWxmLnBvd2VyX2N5Y2xlKHNlbGYuY29ubmVjdGlvbikKKyAgICAgICAgc2VsZi5wb3dlcl9jeWNsZShzZWxmLm1hc3RlcikKIAogCiBjbGFzcyBTeXN0ZW1kYm9vdFRhcmdldChNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0KToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvcmUvUkVBRE1FIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS9SRUFETUUKaW5kZXggMGM4NTlmZC4uZDRmY2RhNCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS9SRUFETUUKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS9SRUFETUUKQEAgLTEsMzggKzEsNzYgQEAKLT0gT0VRQSBGcmFtZXdvcmsgPQorPSBPRVFBICh2MikgRnJhbWV3b3JrID0KIAogPT0gSW50cm9kdWN0aW9uID09CiAKLVRoaXMgaXMgdGhlIG5ldyBPRVFBIGZyYW1ld29yayB0aGUgYmFzZSBjbGFzZXMgb2YgdGhlIGZyYW1ld29yawotYXJlIGluIHRoaXMgbW9kdWxlIG9lcWEvY29yZSB0aGUgc3Vic2VxdWVudCBjb21wb25lbnRzIG5lZWRzIHRvCi1leHRlbmQgdGhpcyBjbGFzc2VzLgorVGhpcyBpcyB2ZXJzaW9uIDIgb2YgdGhlIE9FUUEgZnJhbWV3b3JrLiBCYXNlIGNsYXNlcyBhcmUgbG9jYXRlZCBpbiB0aGUKKydvZXFhL2NvcmUnIGRpcmVjdG9yeSBhbmQgc3Vic2VxdWVudCBjb21wb25lbnRzIG11c3QgZXh0ZW5kIGZyb20gdGhlc2UuCiAKLUEgbmV3L3VuaXF1ZSBydW5uZXIgd2FzIGNyZWF0ZWQgY2FsbGVkIG9lLXRlc3QgYW5kIGlzIHVuZGVyIHNjcmlwdHMvCi1vZS10ZXN0LCB0aGlzIG5ldyBydW5uZXIgc2NhbnMgb3ZlciBvZXFhIG1vZHVsZSBzZWFyY2hpbmcgZm9yIHRlc3QKLWNvbXBvbmVudHMgdGhhdCBzdXBwb3J0cyBPRVRlc3RDb250ZXh0RXhlY3V0b3IgaW1wbGVtZW50ZWQgaW4gY29udGV4dAotbW9kdWxlIChpLmUuIG9lcWEvY29yZS9jb250ZXh0LnB5KS4KK1RoZSBtYWluIGRlc2lnbiBjb25zaWRlcmF0aW9uIHdhcyB0byBpbXBsZW1lbnQgdGhlIG5lZWRlZCBmdW5jdGlvbmFsaXR5IG9uCit0b3Agb2YgdGhlIFB5dGhvbiB1bml0dGVzdCBmcmFtZXdvcmsuIFRvIGFjaGlldmUgdGhpcyBnb2FsLCB0aGUgZm9sbG93aW5nCittb2R1bGVzIGFyZSB1c2VkOgogCi1Gb3IgZXhlY3V0ZSBhbiBleGFtcGxlOgorICAgICogb2VxYS9jb3JlL3J1bm5lci5weTogUHJvdmlkZXMgT0VUZXN0UmVzdWx0IGFuZCBPRVRlc3RSdW5uZXIgYmFzZQorICAgICAgY2xhc3NlcyBleHRlbmRpbmcgdGhlIHVuaXR0ZXN0IGNsYXNzLiBUaGVzZSBjbGFzc2VzIHN1cHBvcnQgZXhwb3J0aW5nCisgICAgICByZXN1bHRzIHRvIGRpZmZlcmVudCBmb3JtYXRzOyBjdXJyZW50bHkgUkFXIGFuZCBYTUwgc3VwcG9ydCBleGlzdC4KIAotJCBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnYKLSQgb2UtdGVzdCBjb3JlCisgICAgKiBvZXFhL2NvcmUvbG9hZGVyLnB5OiBQcm92aWRlcyBPRVRlc3RMb2FkZXIgZXh0ZW5kaW5nIHRoZSB1bml0dGVzdCBjbGFzcy4KKyAgICAgIEl0IGFsc28gZmVhdHVyZXMgYSB1bmlmaWVkIGltcGxlbWVudGF0aW9uIG9mIGRlY29yYXRvciBzdXBwb3J0IGFuZAorICAgICAgZmlsdGVyaW5nIHRlc3QgY2FzZXMuCiAKLUZvciBsaXN0IHN1cHBvcnRlZCBjb21wb25lbnRzOgorICAgICogb2VxYS9jb3JlL2Nhc2UucHk6IFByb3ZpZGVzIE9FVGVzdENhc2UgYmFzZSBjbGFzcyBleHRlbmRpbmcKKyAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlIGFuZCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIFRlc3QgZGF0YSAodGQpLCBUZXN0IGNvbnRleHQKKyAgICAgIGFuZCBMb2dnZXIgZnVuY3Rpb25hbGl0eS4KIAotJCBvZS10ZXN0IC1oCisgICAgKiBvZXFhL2NvcmUvZGVjb3JhdG9yOiBQcm92aWRlcyBPRVRlc3REZWNvcmF0b3IsIGEgbmV3IGNsYXNzIHRvIGltcGxlbWVudAorICAgICAgZGVjb3JhdG9ycyBmb3IgVGVzdCBjYXNlcy4KIAotPT0gQ3JlYXRlIG5ldyBUZXN0IGNvbXBvbmVudCA9PQorICAgICogb2VxYS9jb3JlL2NvbnRleHQ6IFByb3ZpZGVzIE9FVGVzdENvbnRleHQsIGEgaGlnaC1sZXZlbCBBUEkgZm9yCisgICAgICBsb2FkVGVzdHMgYW5kIHJ1blRlc3RzIG9mIGNlcnRhaW4gVGVzdCBjb21wb25lbnQgYW5kCisgICAgICBPRVRlc3RDb250ZXh0RXhlY3V0b3IgYSBiYXNlIGNsYXNzIHRvIGVuYWJsZSBvZS10ZXN0IHRvIGRpc2NvdmVyL3VzZQorICAgICAgdGhlIFRlc3QgY29tcG9uZW50LgogCi1Vc2FsbHkgZm9yIGFkZCBhIG5ldyBUZXN0IGNvbXBvbmVudCB0aGUgZGV2ZWxvcGVyIG5lZWRzIHRvIGV4dGVuZAotT0VUZXN0Q29udGV4dC9PRVRlc3RDb250ZXh0RXhlY3V0b3IgaW4gY29udGV4dC5weSBhbmQgT0VUZXN0Q2FzZSBpbgotY2FzZS5weS4KK0Fsc28sIGEgbmV3ICdvZS10ZXN0JyBydW5uZXIgaXMgbG9jYXRlZCB1bmRlciAnc2NyaXB0cycsIGFsbG93aW5nIHNjYW5zIGZvciBjb21wb25lbnRzCit0aGF0IHN1cHBvcnRzIE9FVGVzdENvbnRleHRFeGVjdXRvciAoc2VlIGJlbG93KS4KIAotPT0gSG93IHRvIHJ1biB0aGUgdGVzdGluZyBvZiB0aGUgT0VRQSBmcmFtZXdvcmsgPT0KKz09IFRlcm1pbm9sb2d5ID09CisKKyAgICAqIFRlc3QgY29tcG9uZW50OiBUaGUgYXJlYSBvZiB0ZXN0aW5nIGluIHRoZSBQcm9qZWN0LCBmb3IgZXhhbXBsZTogcnVudGltZSwgU0RLLCBlU0RLLCBzZWxmdGVzdC4KKworICAgICogVGVzdCBkYXRhOiBEYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgVGVzdCBjb21wb25lbnQuIEN1cnJlbnRseSB3ZSB1c2UgYml0YmFrZSBkYXRhc3RvcmUgYXMKKyAgICAgIGEgVGVzdCBkYXRhIGlucHV0LgorCisgICAgKiBUZXN0IGNvbnRleHQ6IEEgY29udGV4dCBvZiB3aGF0IHRlc3RzIG5lZWRzIHRvIGJlIHJ1biBhbmQgaG93IHRvIGRvIGl0OyB0aGlzIGFkZGl0aW9uYWxseQorICAgICAgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBUZXN0IGRhdGEgYW5kIGNvdWxkIGhhdmUgY3VzdG9tIG1ldGhvZHMgYW5kL29yIGF0dHJzLgorCis9PSBvZS10ZXN0ID09CisKK1RoZSBuZXcgdG9vbCwgb2UtdGVzdCwgaGFzIHRoZSBhYmlsaXR5IHRvIHNjYW4gdGhlIGNvZGUgYmFzZSBmb3IgdGVzdCBjb21wb25lbnRzIGFuZCBwcm92aWRlCithIHVuaWZpZWQgd2F5IHRvIHJ1biB0ZXN0IGNhc2VzLiBJbnRlcm5hbGx5IGl0IHNjYW5zIGZvbGRlcnMgaW5zaWRlIG9lcWEgbW9kdWxlIGluIG9yZGVyIHRvIGZpbmQKK3NwZWNpZmljIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgYSB0ZXN0IGNvbXBvbmVudC4KKworPT0gVXNhZ2UgPT0KKworRXhlY3V0aW5nIHRoZSBleGFtcGxlIHRlc3QgY29tcG9uZW50CisKKyAgICAkIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudgorICAgICQgb2UtdGVzdCBjb3JlCisKK0dldHRpbmcgaGVscAorCisgICAgJCBvZS10ZXN0IC1oCisKKz09IENyZWF0aW5nIG5ldyBUZXN0IENvbXBvbmVudCA9PQorCitBZGRpbmcgYSBuZXcgdGVzdCBjb21wb25lbnQgdGhlIGRldmVsb3BlciBuZWVkcyB0byBleHRlbmQgT0VUZXN0Q29udGV4dC9PRVRlc3RDb250ZXh0RXhlY3V0b3IKKyhmcm9tIGNvbnRleHQucHkpIGFuZCBPRVRlc3RDYXNlIChmcm9tIGNhc2UucHkpCisKKz09IFNlbGZ0ZXN0aW5nIHRoZSBmcmFtZXdvcmsgPT0KIAogUnVuIGFsbCB0ZXN0czoKIAotJCBQQVRIPSRQQVRIOi4uLy4uLyBweXRob24zIC1tIHVuaXR0ZXN0IGRpc2NvdmVyIC1zIHRlc3RzCisgICAgJCBQQVRIPSRQQVRIOi4uLy4uLyBweXRob24zIC1tIHVuaXR0ZXN0IGRpc2NvdmVyIC1zIHRlc3RzCiAKIFJ1biBzb21lIHRlc3Q6CiAKLSQgY2QgdGVzdHMvCi0kIC4vdGVzdF9kYXRhLnB5CisgICAgJCBjZCB0ZXN0cy8KKyAgICAkIC4vdGVzdF9kYXRhLnB5CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb3JlL2Nhc2UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb3JlL2Nhc2UucHkKaW5kZXggZDJkYmYyMC4uOTE3YTJhYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS9jYXNlLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvcmUvY2FzZS5weQpAQCAtMjMsNyArMjMsNyBAQAogCiAgICAgIyB0ZF92YXJzIGhhcyB0aGUgdmFyaWFibGVzIG5lZWRlZCBieSBhIHRlc3QgY2xhc3MKICAgICAjIG9yIHRlc3QgY2FzZSBpbnN0YW5jZSwgaWYgc29tZSB2YXIgaXNuJ3QgaW50byB0ZCBhCi0gICAgIyBPRU1pc3NpbmdWYXJpYWJsZSBleGNlcHRpb24gaXMgcmFpc2VkCisgICAgIyBPRVFBTWlzc2luZ1ZhcmlhYmxlIGV4Y2VwdGlvbiBpcyByYWlzZWQKICAgICB0ZF92YXJzID0gTm9uZQogCiAgICAgQGNsYXNzbWV0aG9kCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb3JlL2NvbnRleHQucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb3JlL2NvbnRleHQucHkKaW5kZXggNDQ3Njc1MC4uYWNkNTQ3NCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS9jb250ZXh0LnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvcmUvY29udGV4dC5weQpAQCAtNywxNSArNywxNCBAQAogaW1wb3J0IHRpbWUKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgY29sbGVjdGlvbnMKLWltcG9ydCByZQogCiBmcm9tIG9lcWEuY29yZS5sb2FkZXIgaW1wb3J0IE9FVGVzdExvYWRlcgotZnJvbSBvZXFhLmNvcmUucnVubmVyIGltcG9ydCBPRVRlc3RSdW5uZXIsIE9FU3RyZWFtTG9nZ2VyLCB4bWxFbmFibGVkCitmcm9tIG9lcWEuY29yZS5ydW5uZXIgaW1wb3J0IE9FVGVzdFJ1bm5lcgorZnJvbSBvZXFhLmNvcmUuZXhjZXB0aW9uIGltcG9ydCBPRVFBTWlzc2luZ01hbmlmZXN0LCBPRVFBVGVzdE5vdEZvdW5kCiAKIGNsYXNzIE9FVGVzdENvbnRleHQob2JqZWN0KToKICAgICBsb2FkZXJDbGFzcyA9IE9FVGVzdExvYWRlcgogICAgIHJ1bm5lckNsYXNzID0gT0VUZXN0UnVubmVyCi0gICAgc3RyZWFtTG9nZ2VyQ2xhc3MgPSBPRVN0cmVhbUxvZ2dlcgogCiAgICAgZmlsZXNfZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoCiAgICAgICAgIG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpLCAiLi4vZmlsZXMiKSkKQEAgLTMyLDcgKzMxLDcgQEAKIAogICAgIGRlZiBfcmVhZF9tb2R1bGVzX2Zyb21fbWFuaWZlc3Qoc2VsZiwgbWFuaWZlc3QpOgogICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobWFuaWZlc3QpOgotICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHJhaXNlIE9FUUFNaXNzaW5nTWFuaWZlc3QoIk1hbmlmZXN0IGRvZXMgbm90IGV4aXN0IG9uICVzIiAlIG1hbmlmZXN0KQogCiAgICAgICAgIG1vZHVsZXMgPSBbXQogICAgICAgICBmb3IgbGluZSBpbiBvcGVuKG1hbmlmZXN0KS5yZWFkbGluZXMoKToKQEAgLTQyLDYgKzQxLDE0IEBACiAKICAgICAgICAgcmV0dXJuIG1vZHVsZXMKIAorICAgIGRlZiBza2lwVGVzdHMoc2VsZiwgc2tpcHMpOgorICAgICAgICBpZiBub3Qgc2tpcHM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi5zdWl0ZXM6CisgICAgICAgICAgICBmb3Igc2tpcCBpbiBza2lwczoKKyAgICAgICAgICAgICAgICBpZiB0ZXN0LmlkKCkuc3RhcnRzd2l0aChza2lwKToKKyAgICAgICAgICAgICAgICAgICAgc2V0YXR0cih0ZXN0LCAnc2V0VXAnLCBsYW1iZGE6IHRlc3Quc2tpcFRlc3QoJ1NraXAgYnkgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAiJXMiJyAlIHNraXApKQorCiAgICAgZGVmIGxvYWRUZXN0cyhzZWxmLCBtb2R1bGVfcGF0aHMsIG1vZHVsZXM9W10sIHRlc3RzPVtdLAogICAgICAgICAgICAgbW9kdWxlc19tYW5pZmVzdD0iIiwgbW9kdWxlc19yZXF1aXJlZD1bXSwgZmlsdGVycz17fSk6CiAgICAgICAgIGlmIG1vZHVsZXNfbWFuaWZlc3Q6CkBAIC01MSw5ICs1OCwxMSBAQAogICAgICAgICAgICAgICAgIG1vZHVsZXNfcmVxdWlyZWQsIGZpbHRlcnMpCiAgICAgICAgIHNlbGYuc3VpdGVzID0gc2VsZi5sb2FkZXIuZGlzY292ZXIoKQogCi0gICAgZGVmIHJ1blRlc3RzKHNlbGYpOgotICAgICAgICBzdHJlYW1Mb2dnZXIgPSBzZWxmLnN0cmVhbUxvZ2dlckNsYXNzKHNlbGYubG9nZ2VyKQotICAgICAgICBzZWxmLnJ1bm5lciA9IHNlbGYucnVubmVyQ2xhc3Moc2VsZiwgc3RyZWFtPXN0cmVhbUxvZ2dlciwgdmVyYm9zaXR5PTIpCisgICAgZGVmIHJ1blRlc3RzKHNlbGYsIHNraXBzPVtdKToKKyAgICAgICAgc2VsZi5ydW5uZXIgPSBzZWxmLnJ1bm5lckNsYXNzKHNlbGYsIGRlc2NyaXB0aW9ucz1GYWxzZSwgdmVyYm9zaXR5PTIpCisKKyAgICAgICAgIyBEaW5hbWljYWxseSBza2lwIHRob3NlIHRlc3RzIHNwZWNpZmllZCB0aG91Z2ggYXJndW1lbnRzCisgICAgICAgIHNlbGYuc2tpcFRlc3RzKHNraXBzKQogCiAgICAgICAgIHNlbGYuX3J1bl9zdGFydF90aW1lID0gdGltZS50aW1lKCkKICAgICAgICAgcmVzdWx0ID0gc2VsZi5ydW5uZXIucnVuKHNlbGYuc3VpdGVzKQpAQCAtNjEsOTQgKzcwLDEzIEBACiAKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCi0gICAgZGVmIGxvZ1N1bW1hcnkoc2VsZiwgcmVzdWx0LCBjb21wb25lbnQsIGNvbnRleHRfbXNnPScnKToKLSAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiU1VNTUFSWToiKQotICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCIlcyAoJXMpIC0gUmFuICVkIHRlc3QlcyBpbiAlLjNmcyIgJSAoY29tcG9uZW50LAotICAgICAgICAgICAgY29udGV4dF9tc2csIHJlc3VsdC50ZXN0c1J1biwgcmVzdWx0LnRlc3RzUnVuICE9IDEgYW5kICJzIiBvciAiIiwKLSAgICAgICAgICAgIChzZWxmLl9ydW5fZW5kX3RpbWUgLSBzZWxmLl9ydW5fc3RhcnRfdGltZSkpKQotCi0gICAgICAgIGlmIHJlc3VsdC53YXNTdWNjZXNzZnVsKCk6Ci0gICAgICAgICAgICBtc2cgPSAiJXMgLSBPSyAtIEFsbCByZXF1aXJlZCB0ZXN0cyBwYXNzZWQiICUgY29tcG9uZW50Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtc2cgPSAiJXMgLSBGQUlMIC0gUmVxdWlyZWQgdGVzdHMgZmFpbGVkIiAlIGNvbXBvbmVudAotICAgICAgICBza2lwcGVkID0gbGVuKHNlbGYuX3Jlc3VsdHNbJ3NraXBwZWQnXSkKLSAgICAgICAgaWYgc2tpcHBlZDogCi0gICAgICAgICAgICBtc2cgKz0gIiAoc2tpcHBlZD0lZCkiICUgc2tpcHBlZAotICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKG1zZykKLQotICAgIGRlZiBfZ2V0RGV0YWlsc05vdFBhc3NlZChzZWxmLCBjYXNlLCB0eXBlLCBkZXNjKToKLSAgICAgICAgZm91bmQgPSBGYWxzZQotCi0gICAgICAgIGZvciAoc2Nhc2UsIG1zZykgaW4gc2VsZi5fcmVzdWx0c1t0eXBlXToKLSAgICAgICAgICAgICMgWFhYOiBXaGVuIFhNTCByZXBvcnRpbmcgaXMgZW5hYmxlZCBzY2FzZSBpcwotICAgICAgICAgICAgIyB4bWxydW5uZXIucmVzdWx0Ll9UZXN0SW5mbyBpbnN0YW5jZSBpbnN0ZWFkIG9mCi0gICAgICAgICAgICAjIHN0cmluZy4KLSAgICAgICAgICAgIGlmIHhtbEVuYWJsZWQ6Ci0gICAgICAgICAgICAgICAgaWYgY2FzZS5pZCgpID09IHNjYXNlLnRlc3RfaWQ6Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIHNjYXNlX3N0ciA9IHNjYXNlLnRlc3RfaWQKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgY2FzZSA9PSBzY2FzZToKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgc2Nhc2Vfc3RyID0gc3RyKHNjYXNlKQotCi0gICAgICAgICAgICAjIFdoZW4gZmFpbHMgYXQgbW9kdWxlIG9yIGNsYXNzIGxldmVsIHRoZSBjbGFzcyBuYW1lIGlzIHBhc3NlZCBhcyBzdHJpbmcKLSAgICAgICAgICAgICMgc28gZmlndXJlIG91dCB0byBzZWUgaWYgbWF0Y2gKLSAgICAgICAgICAgIG0gPSByZS5zZWFyY2goIl5zZXRVcE1vZHVsZSBcKCg/UDxtb2R1bGVfbmFtZT4uKilcKSQiLCBzY2FzZV9zdHIpCi0gICAgICAgICAgICBpZiBtOgotICAgICAgICAgICAgICAgIGlmIGNhc2UuX19jbGFzc19fLl9fbW9kdWxlX18gPT0gbS5ncm91cCgnbW9kdWxlX25hbWUnKToKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgICAgIG0gPSByZS5zZWFyY2goIl5zZXRVcENsYXNzIFwoKD9QPGNsYXNzX25hbWU+LiopXCkkIiwgc2Nhc2Vfc3RyKQotICAgICAgICAgICAgaWYgbToKLSAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0gIiVzLiVzIiAlIChjYXNlLl9fY2xhc3NfXy5fX21vZHVsZV9fLAotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZS5fX2NsYXNzX18uX19uYW1lX18pCi0KLSAgICAgICAgICAgICAgICBpZiBjbGFzc19uYW1lID09IG0uZ3JvdXAoJ2NsYXNzX25hbWUnKToKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgaWYgZm91bmQ6Ci0gICAgICAgICAgICByZXR1cm4gKGZvdW5kLCBtc2cpCi0KLSAgICAgICAgcmV0dXJuIChmb3VuZCwgTm9uZSkKLQotICAgIGRlZiBsb2dEZXRhaWxzKHNlbGYpOgotICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJSRVNVTFRTOiIpCi0gICAgICAgIGZvciBjYXNlX25hbWUgaW4gc2VsZi5fcmVnaXN0cnlbJ2Nhc2VzJ106Ci0gICAgICAgICAgICBjYXNlID0gc2VsZi5fcmVnaXN0cnlbJ2Nhc2VzJ11bY2FzZV9uYW1lXQotCi0gICAgICAgICAgICByZXN1bHRfdHlwZXMgPSBbJ2ZhaWx1cmVzJywgJ2Vycm9ycycsICdza2lwcGVkJywgJ2V4cGVjdGVkRmFpbHVyZXMnXQotICAgICAgICAgICAgcmVzdWx0X2Rlc2MgPSBbJ0ZBSUxFRCcsICdFUlJPUicsICdTS0lQUEVEJywgJ0VYUEVDVEVERkFJTCddCi0KLSAgICAgICAgICAgIGZhaWwgPSBGYWxzZQotICAgICAgICAgICAgZGVzYyA9IE5vbmUKLSAgICAgICAgICAgIGZvciBpZHgsIG5hbWUgaW4gZW51bWVyYXRlKHJlc3VsdF90eXBlcyk6Ci0gICAgICAgICAgICAgICAgKGZhaWwsIG1zZykgPSBzZWxmLl9nZXREZXRhaWxzTm90UGFzc2VkKGNhc2UsIHJlc3VsdF90eXBlc1tpZHhdLAotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2Rlc2NbaWR4XSkKLSAgICAgICAgICAgICAgICBpZiBmYWlsOgotICAgICAgICAgICAgICAgICAgICBkZXNjID0gcmVzdWx0X2Rlc2NbaWR4XQotICAgICAgICAgICAgICAgICAgICBicmVhawotCi0gICAgICAgICAgICBvZWlkID0gLTEKLSAgICAgICAgICAgIGZvciBkIGluIGNhc2UuZGVjb3JhdG9yczoKLSAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGQsICdvZWlkJyk6Ci0gICAgICAgICAgICAgICAgICAgIG9laWQgPSBkLm9laWQKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgZmFpbDoKLSAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJSRVNVTFRTIC0gJXMgLSBUZXN0Y2FzZSAlczogJXMiICUgKGNhc2UuaWQoKSwKLSAgICAgICAgICAgICAgICAgICAgb2VpZCwgZGVzYykpCi0gICAgICAgICAgICAgICAgaWYgbXNnOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKG1zZykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiUkVTVUxUUyAtICVzIC0gVGVzdGNhc2UgJXM6ICVzIiAlIChjYXNlLmlkKCksCi0gICAgICAgICAgICAgICAgICAgIG9laWQsICdQQVNTRUQnKSkKKyAgICBkZWYgbGlzdFRlc3RzKHNlbGYsIGRpc3BsYXlfdHlwZSk6CisgICAgICAgIHNlbGYucnVubmVyID0gc2VsZi5ydW5uZXJDbGFzcyhzZWxmLCB2ZXJib3NpdHk9MikKKyAgICAgICAgcmV0dXJuIHNlbGYucnVubmVyLmxpc3RfdGVzdHMoc2VsZi5zdWl0ZXMsIGRpc3BsYXlfdHlwZSkKIAogY2xhc3MgT0VUZXN0Q29udGV4dEV4ZWN1dG9yKG9iamVjdCk6CiAgICAgX2NvbnRleHRfY2xhc3MgPSBPRVRlc3RDb250ZXh0CisgICAgX3NjcmlwdF9leGVjdXRvciA9ICdvZS10ZXN0JwogCiAgICAgbmFtZSA9ICdjb3JlJwogICAgIGhlbHAgPSAnY29yZSB0ZXN0IGNvbXBvbmVudCBleGFtcGxlJwpAQCAtMTY4LDkgKzk2LDE0IEBACiAgICAgICAgIHNlbGYucGFyc2VyLmFkZF9hcmd1bWVudCgnLS1vdXRwdXQtbG9nJywgYWN0aW9uPSdzdG9yZScsCiAgICAgICAgICAgICAgICAgZGVmYXVsdD1zZWxmLmRlZmF1bHRfb3V0cHV0X2xvZywKICAgICAgICAgICAgICAgICBoZWxwPSJyZXN1bHRzIG91dHB1dCBsb2csIGRlZmF1bHQ6ICVzIiAlIHNlbGYuZGVmYXVsdF9vdXRwdXRfbG9nKQotICAgICAgICBzZWxmLnBhcnNlci5hZGRfYXJndW1lbnQoJy0tcnVuLXRlc3RzJywgYWN0aW9uPSdzdG9yZScsCisKKyAgICAgICAgZ3JvdXAgPSBzZWxmLnBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXJ1bi10ZXN0cycsIGFjdGlvbj0nc3RvcmUnLCBuYXJncz0nKycsCiAgICAgICAgICAgICAgICAgZGVmYXVsdD1zZWxmLmRlZmF1bHRfdGVzdHMsCi0gICAgICAgICAgICAgICAgaGVscD0idGVzdHMgdG8gcnVuIGluIDxtb2R1bGU+Wy48Y2xhc3M+Wy48bmFtZT5dXSBmb3JtYXQuIEp1c3Qgd29ya3MgZm9yIG1vZHVsZXMgbm93IikKKyAgICAgICAgICAgICAgICBoZWxwPSJ0ZXN0cyB0byBydW4gaW4gPG1vZHVsZT5bLjxjbGFzcz5bLjxuYW1lPl1dIikKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWxpc3QtdGVzdHMnLCBhY3Rpb249J3N0b3JlJywKKyAgICAgICAgICAgICAgICBjaG9pY2VzPSgnbW9kdWxlJywgJ2NsYXNzJywgJ25hbWUnKSwKKyAgICAgICAgICAgICAgICBoZWxwPSJsaXN0cyBhdmFpbGFibGUgdGVzdHMiKQogCiAgICAgICAgIGlmIHNlbGYuZGVmYXVsdF90ZXN0X2RhdGE6CiAgICAgICAgICAgICBzZWxmLnBhcnNlci5hZGRfYXJndW1lbnQoJy0tdGVzdC1kYXRhLWZpbGUnLCBhY3Rpb249J3N0b3JlJywKQEAgLTIwNiw3ICsxMzksOCBAQAogICAgICAgICBzZWxmLnRjX2t3YXJncyA9IHt9CiAgICAgICAgIHNlbGYudGNfa3dhcmdzWydpbml0J10gPSB7fQogICAgICAgICBzZWxmLnRjX2t3YXJnc1snbG9hZCddID0ge30KLSAgICAgICAgc2VsZi50Y19rd2FyZ3NbJ3J1biddID0ge30KKyAgICAgICAgc2VsZi50Y19rd2FyZ3NbJ2xpc3QnXSA9IHt9CisgICAgICAgIHNlbGYudGNfa3dhcmdzWydydW4nXSAgPSB7fQogCiAgICAgICAgIHNlbGYudGNfa3dhcmdzWydpbml0J11bJ2xvZ2dlciddID0gc2VsZi5fc2V0dXBfbG9nZ2VyKGxvZ2dlciwgYXJncykKICAgICAgICAgaWYgYXJncy50ZXN0X2RhdGFfZmlsZToKQEAgLTIxNSwyMiArMTQ5LDM2IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLnRjX2t3YXJnc1snaW5pdCddWyd0ZCddID0ge30KIAotCiAgICAgICAgIGlmIGFyZ3MucnVuX3Rlc3RzOgotICAgICAgICAgICAgc2VsZi50Y19rd2FyZ3NbJ2xvYWQnXVsnbW9kdWxlcyddID0gYXJncy5ydW5fdGVzdHMuc3BsaXQoKQorICAgICAgICAgICAgc2VsZi50Y19rd2FyZ3NbJ2xvYWQnXVsnbW9kdWxlcyddID0gYXJncy5ydW5fdGVzdHMKKyAgICAgICAgICAgIHNlbGYudGNfa3dhcmdzWydsb2FkJ11bJ21vZHVsZXNfcmVxdWlyZWQnXSA9IGFyZ3MucnVuX3Rlc3RzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnRjX2t3YXJnc1snbG9hZCddWydtb2R1bGVzJ10gPSBOb25lCisgICAgICAgICAgICBzZWxmLnRjX2t3YXJnc1snbG9hZCddWydtb2R1bGVzJ10gPSBbXQorCisgICAgICAgIHNlbGYudGNfa3dhcmdzWydydW4nXVsnc2tpcHMnXSA9IFtdCiAKICAgICAgICAgc2VsZi5tb2R1bGVfcGF0aHMgPSBhcmdzLkNBU0VTX1BBVEhTCiAKKyAgICBkZWYgX3ByZV9ydW4oc2VsZik6CisgICAgICAgIHBhc3MKKwogICAgIGRlZiBydW4oc2VsZiwgbG9nZ2VyLCBhcmdzKToKICAgICAgICAgc2VsZi5fcHJvY2Vzc19hcmdzKGxvZ2dlciwgYXJncykKIAogICAgICAgICBzZWxmLnRjID0gc2VsZi5fY29udGV4dF9jbGFzcygqKnNlbGYudGNfa3dhcmdzWydpbml0J10pCi0gICAgICAgIHNlbGYudGMubG9hZFRlc3RzKHNlbGYubW9kdWxlX3BhdGhzLCAqKnNlbGYudGNfa3dhcmdzWydsb2FkJ10pCi0gICAgICAgIHJjID0gc2VsZi50Yy5ydW5UZXN0cygqKnNlbGYudGNfa3dhcmdzWydydW4nXSkKLSAgICAgICAgc2VsZi50Yy5sb2dTdW1tYXJ5KHJjLCBzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYudGMubG9nRGV0YWlscygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYudGMubG9hZFRlc3RzKHNlbGYubW9kdWxlX3BhdGhzLCAqKnNlbGYudGNfa3dhcmdzWydsb2FkJ10pCisgICAgICAgIGV4Y2VwdCBPRVFBVGVzdE5vdEZvdW5kIGFzIGV4OgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGV4KQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICBpZiBhcmdzLmxpc3RfdGVzdHM6CisgICAgICAgICAgICByYyA9IHNlbGYudGMubGlzdFRlc3RzKGFyZ3MubGlzdF90ZXN0cywgKipzZWxmLnRjX2t3YXJnc1snbGlzdCddKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcHJlX3J1bigpCisgICAgICAgICAgICByYyA9IHNlbGYudGMucnVuVGVzdHMoKipzZWxmLnRjX2t3YXJnc1sncnVuJ10pCisgICAgICAgICAgICByYy5sb2dEZXRhaWxzKCkKKyAgICAgICAgICAgIHJjLmxvZ1N1bW1hcnkoc2VsZi5uYW1lKQogCiAgICAgICAgIG91dHB1dF9saW5rID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShhcmdzLm91dHB1dF9sb2cpLAogICAgICAgICAgICAgICAgICIlcy1yZXN1bHRzLmxvZyIgJSBzZWxmLm5hbWUpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb3JlL2RlY29yYXRvci9kZXBlbmRzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS9kZWNvcmF0b3IvZGVwZW5kcy5weQppbmRleCAxOTU3MTFjLi5iYWEwNDM0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb3JlL2RlY29yYXRvci9kZXBlbmRzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvcmUvZGVjb3JhdG9yL2RlcGVuZHMucHkKQEAgLTMsNiArMyw3IEBACiAKIGZyb20gdW5pdHRlc3QgaW1wb3J0IFNraXBUZXN0CiAKK2Zyb20gb2VxYS5jb3JlLnRocmVhZGVkIGltcG9ydCBPRVRlc3RSdW5uZXJUaHJlYWRlZAogZnJvbSBvZXFhLmNvcmUuZXhjZXB0aW9uIGltcG9ydCBPRVFBRGVwZW5kZW5jeQogCiBmcm9tIC4gaW1wb3J0IE9FVGVzdERpc2NvdmVyLCByZWdpc3RlckRlY29yYXRvcgpAQCAtNjMsNyArNjQsMTIgQEAKICAgICByZXR1cm4gW2Nhc2VzW2Nhc2VfaWRdIGZvciBjYXNlX2lkIGluIGNhc2VzX29yZGVyZWRdCiAKIGRlZiBfc2tpcFRlc3REZXBlbmRlbmN5KGNhc2UsIGRlcGVuZHMpOgotICAgIHJlc3VsdHMgPSBjYXNlLnRjLl9yZXN1bHRzCisgICAgaWYgaXNpbnN0YW5jZShjYXNlLnRjLnJ1bm5lciwgT0VUZXN0UnVubmVyVGhyZWFkZWQpOgorICAgICAgICBpbXBvcnQgdGhyZWFkaW5nCisgICAgICAgIHJlc3VsdHMgPSBjYXNlLnRjLl9yZXN1bHRzW3RocmVhZGluZy5nZXRfaWRlbnQoKV0KKyAgICBlbHNlOgorICAgICAgICByZXN1bHRzID0gY2FzZS50Yy5fcmVzdWx0cworCiAgICAgc2tpcFJlYXNvbnMgPSBbJ2Vycm9ycycsICdmYWlsdXJlcycsICdza2lwcGVkJ10KIAogICAgIGZvciByZWFzb24gaW4gc2tpcFJlYXNvbnM6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb3JlL2RlY29yYXRvci9vZXRpbWVvdXQucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb3JlL2RlY29yYXRvci9vZXRpbWVvdXQucHkKaW5kZXggYTI0NzU4My4uZjg1ZTdkOSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS9kZWNvcmF0b3Ivb2V0aW1lb3V0LnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvcmUvZGVjb3JhdG9yL29ldGltZW91dC5weQpAQCAtMSw4ICsxLDEyIEBACiAjIENvcHlyaWdodCAoQykgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgogIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKIAotaW1wb3J0IHNpZ25hbAogZnJvbSAuIGltcG9ydCBPRVRlc3REZWNvcmF0b3IsIHJlZ2lzdGVyRGVjb3JhdG9yCisKK2ltcG9ydCBzaWduYWwKK2Zyb20gdGhyZWFkaW5nIGltcG9ydCBUaW1lcgorCitmcm9tIG9lcWEuY29yZS50aHJlYWRlZCBpbXBvcnQgT0VUZXN0UnVubmVyVGhyZWFkZWQKIGZyb20gb2VxYS5jb3JlLmV4Y2VwdGlvbiBpbXBvcnQgT0VRQVRpbWVvdXRFcnJvcgogCiBAcmVnaXN0ZXJEZWNvcmF0b3IKQEAgLTEwLDE2ICsxNCwzMiBAQAogICAgIGF0dHJzID0gKCdvZXRpbWVvdXQnLCkKIAogICAgIGRlZiBzZXRVcERlY29yYXRvcihzZWxmKToKLSAgICAgICAgdGltZW91dCA9IHNlbGYub2V0aW1lb3V0Ci0gICAgICAgIGRlZiBfdGltZW91dEhhbmRsZXIoc2lnbnVtLCBmcmFtZSk6Ci0gICAgICAgICAgICByYWlzZSBPRVFBVGltZW91dEVycm9yKCJUaW1lZCBvdXQgYWZ0ZXIgJXMgIgorICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiU2V0dGluZyB1cCBhICVkIHNlY29uZChzKSB0aW1lb3V0IiAlIHNlbGYub2V0aW1lb3V0KQorCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5jYXNlLnRjLnJ1bm5lciwgT0VUZXN0UnVubmVyVGhyZWFkZWQpOgorICAgICAgICAgICAgc2VsZi50aW1lb3V0ZWQgPSBGYWxzZQorICAgICAgICAgICAgZGVmIF90aW1lb3V0SGFuZGxlcigpOgorICAgICAgICAgICAgICAgIHNlbGYudGltZW91dGVkID0gVHJ1ZQorCisgICAgICAgICAgICBzZWxmLnRpbWVyID0gVGltZXIoc2VsZi5vZXRpbWVvdXQsIF90aW1lb3V0SGFuZGxlcikKKyAgICAgICAgICAgIHNlbGYudGltZXIuc3RhcnQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGltZW91dCA9IHNlbGYub2V0aW1lb3V0CisgICAgICAgICAgICBkZWYgX3RpbWVvdXRIYW5kbGVyKHNpZ251bSwgZnJhbWUpOgorICAgICAgICAgICAgICAgIHJhaXNlIE9FUUFUaW1lb3V0RXJyb3IoIlRpbWVkIG91dCBhZnRlciAlcyAiCiAgICAgICAgICAgICAgICAgICAgICJzZWNvbmRzIG9mIGV4ZWN1dGlvbiIgJSB0aW1lb3V0KQogCi0gICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJTZXR0aW5nIHVwIGEgJWQgc2Vjb25kKHMpIHRpbWVvdXQiICUgc2VsZi5vZXRpbWVvdXQpCi0gICAgICAgIHNlbGYuYWxhcm1TaWduYWwgPSBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBfdGltZW91dEhhbmRsZXIpCi0gICAgICAgIHNpZ25hbC5hbGFybShzZWxmLm9ldGltZW91dCkKKyAgICAgICAgICAgIHNlbGYuYWxhcm1TaWduYWwgPSBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBfdGltZW91dEhhbmRsZXIpCisgICAgICAgICAgICBzaWduYWwuYWxhcm0oc2VsZi5vZXRpbWVvdXQpCiAKICAgICBkZWYgdGVhckRvd25EZWNvcmF0b3Ioc2VsZik6Ci0gICAgICAgIHNpZ25hbC5hbGFybSgwKQotICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBzZWxmLmFsYXJtU2lnbmFsKQotICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiUmVtb3ZlZCBTSUdBTFJNIGhhbmRsZXIiKQorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuY2FzZS50Yy5ydW5uZXIsIE9FVGVzdFJ1bm5lclRocmVhZGVkKToKKyAgICAgICAgICAgIHNlbGYudGltZXIuY2FuY2VsKCkKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJSZW1vdmVkIFRpbWVyIGhhbmRsZXIiKQorICAgICAgICAgICAgaWYgc2VsZi50aW1lb3V0ZWQ6CisgICAgICAgICAgICAgICAgcmFpc2UgT0VRQVRpbWVvdXRFcnJvcigiVGltZWQgb3V0IGFmdGVyICVzICIKKyAgICAgICAgICAgICAgICAgICAgInNlY29uZHMgb2YgZXhlY3V0aW9uIiAlIHNlbGYub2V0aW1lb3V0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDApCisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBzZWxmLmFsYXJtU2lnbmFsKQorICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIlJlbW92ZWQgU0lHQUxSTSBoYW5kbGVyIikKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvcmUvZXhjZXB0aW9uLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS9leGNlcHRpb24ucHkKaW5kZXggMmRmZDg0MC4uNzMyZjJlZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS9leGNlcHRpb24ucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS9leGNlcHRpb24ucHkKQEAgLTEyLDMgKzEyLDEyIEBACiAKIGNsYXNzIE9FUUFEZXBlbmRlbmN5KE9FUUFFeGNlcHRpb24pOgogICAgIHBhc3MKKworY2xhc3MgT0VRQU1pc3NpbmdNYW5pZmVzdChPRVFBRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2NsYXNzIE9FUUFQcmVSdW4oT0VRQUV4Y2VwdGlvbik6CisgICAgcGFzcworCitjbGFzcyBPRVFBVGVzdE5vdEZvdW5kKE9FUUFFeGNlcHRpb24pOgorICAgIHBhc3MKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvcmUvbG9hZGVyLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS9sb2FkZXIucHkKaW5kZXggNjNhMTcwMy4uOTc1YTA4MSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS9sb2FkZXIucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS9sb2FkZXIucHkKQEAgLTIsMjUgKzIsMzAgQEAKICMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCiAKIGltcG9ydCBvcworaW1wb3J0IHJlCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBpbnNwZWN0CiAKIGZyb20gb2VxYS5jb3JlLnV0aWxzLnBhdGggaW1wb3J0IGZpbmRGaWxlCiBmcm9tIG9lcWEuY29yZS51dGlscy50ZXN0IGltcG9ydCBnZXRTdWl0ZU1vZHVsZXMsIGdldENhc2VJRAogCitmcm9tIG9lcWEuY29yZS5leGNlcHRpb24gaW1wb3J0IE9FUUFUZXN0Tm90Rm91bmQKIGZyb20gb2VxYS5jb3JlLmNhc2UgaW1wb3J0IE9FVGVzdENhc2UKIGZyb20gb2VxYS5jb3JlLmRlY29yYXRvciBpbXBvcnQgZGVjb3JhdG9yQ2xhc3NlcywgT0VUZXN0RGVjb3JhdG9yLCBcCiAgICAgICAgIE9FVGVzdEZpbHRlciwgT0VUZXN0RGlzY292ZXIKIAotZGVmIF9tYWtlX2ZhaWxlZF90ZXN0KGNsYXNzbmFtZSwgbWV0aG9kbmFtZSwgZXhjZXB0aW9uLCBzdWl0ZUNsYXNzKToKLSAgICAiIiIKLSAgICAgICAgV2hlbiBsb2FkaW5nIHRlc3RzIHVuaXR0ZXN0IGZyYW1ld29yayBzdG9yZXMgdGhlIGV4Y2VwdGlvbiBpbiBhIG5ldwotICAgICAgICBjbGFzcyBjcmVhdGVkIGZvciBiZSBkaXNwbGF5ZWQgaW50byBydW4oKS4KLQotICAgICAgICBGb3Igb3VyIHB1cnBvc2VzIHdpbGwgYmUgYmV0dGVyIHRvIHJhaXNlIHRoZSBleGNlcHRpb24gaW4gbG9hZGluZyAKLSAgICAgICAgc3RlcCBpbnN0ZWFkIG9mIHdhaXQgdG8gcnVuIHRoZSB0ZXN0IHN1aXRlLgotICAgICIiIgotICAgIHJhaXNlIGV4Y2VwdGlvbgorIyBXaGVuIGxvYWRpbmcgdGVzdHMsIHRoZSB1bml0dGVzdCBmcmFtZXdvcmsgc3RvcmVzIGFueSBleGNlcHRpb25zIGFuZAorIyBkaXNwbGF5cyB0aGVtIG9ubHkgd2hlbiB0aGUgcnVuIG1ldGhvZCBpcyBjYWxsZWQuCisjCisjIEZvciBvdXIgcHVycG9zZXMsIGl0IGlzIGJldHRlciB0byByYWlzZSB0aGUgZXhjZXB0aW9ucyBpbiB0aGUgbG9hZGluZworIyBzdGVwIHJhdGhlciB0aGFuIHdhaXRpbmcgdG8gcnVuIHRoZSB0ZXN0IHN1aXRlLgorIworIyBHZW5lcmF0ZSB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBiZWNhdXNlIHRoaXMgZGlmZmVyIGFjcm9zcyBweXRob24gdmVyc2lvbnMKKyMgUHl0aG9uID49IDMuNC40IHVzZXMgdHJlZSBwYXJhbWV0ZXJzIGluc3RlYWQgZm91ciBidXQgZm9yIGV4YW1wbGUgUHl0aG9uIDMuNS4zCisjIHVlc2VzIGZvdXIgcGFyYW1ldGVycyBzbyBpc24ndCBpbmNyZW1lbnRhbC4KK19mYWlsZWRfdGVzdF9hcmdzID0gaW5zcGVjdC5nZXRhcmdzcGVjKHVuaXR0ZXN0LmxvYWRlci5fbWFrZV9mYWlsZWRfdGVzdCkuYXJncworZXhlYygiIiJkZWYgX21ha2VfZmFpbGVkX3Rlc3QoJXMpOiByYWlzZSBleGNlcHRpb24iIiIgJSAnLCAnLmpvaW4oX2ZhaWxlZF90ZXN0X2FyZ3MpKQogdW5pdHRlc3QubG9hZGVyLl9tYWtlX2ZhaWxlZF90ZXN0ID0gX21ha2VfZmFpbGVkX3Rlc3QKIAogZGVmIF9maW5kX2R1cGxpY2F0ZWRfbW9kdWxlcyhzdWl0ZSwgZGlyZWN0b3J5KToKQEAgLTI5LDYgKzM0LDI4IEBACiAgICAgICAgIGlmIHBhdGg6CiAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiRHVwbGljYXRlZCAlcyBtb2R1bGUgZm91bmQgaW4gJXMiICUgKG1vZHVsZSwgcGF0aCkpCiAKK2RlZiBfYnVpbHRfbW9kdWxlc19kaWN0KG1vZHVsZXMpOgorICAgIG1vZHVsZXNfZGljdCA9IHt9CisKKyAgICBpZiBtb2R1bGVzID09IE5vbmU6CisgICAgICAgIHJldHVybiBtb2R1bGVzX2RpY3QKKworICAgIGZvciBtb2R1bGUgaW4gbW9kdWxlczoKKyAgICAgICAgIyBBc3N1bXB0aW9uOiBwYWNrYWdlIGFuZCBtb2R1bGUgbmFtZXMgZG8gbm90IGNvbnRhaW4gdXBwZXIgY2FzZQorICAgICAgICAjIGNoYXJhY3RlcnMsIHdoZXJlYXMgY2xhc3MgbmFtZXMgZG8KKyAgICAgICAgbSA9IHJlLm1hdGNoKHInXihbXkEtWl0rKSg/OlwuKFtBLVpdW14uXSopKD86XC4oW14uXSspKT8pPyQnLCBtb2R1bGUpCisKKyAgICAgICAgbW9kdWxlX25hbWUsIGNsYXNzX25hbWUsIHRlc3RfbmFtZSA9IG0uZ3JvdXBzKCkKKworICAgICAgICBpZiBtb2R1bGVfbmFtZSBhbmQgbW9kdWxlX25hbWUgbm90IGluIG1vZHVsZXNfZGljdDoKKyAgICAgICAgICAgIG1vZHVsZXNfZGljdFttb2R1bGVfbmFtZV0gPSB7fQorICAgICAgICBpZiBjbGFzc19uYW1lIGFuZCBjbGFzc19uYW1lIG5vdCBpbiBtb2R1bGVzX2RpY3RbbW9kdWxlX25hbWVdOgorICAgICAgICAgICAgbW9kdWxlc19kaWN0W21vZHVsZV9uYW1lXVtjbGFzc19uYW1lXSA9IFtdCisgICAgICAgIGlmIHRlc3RfbmFtZSBhbmQgdGVzdF9uYW1lIG5vdCBpbiBtb2R1bGVzX2RpY3RbbW9kdWxlX25hbWVdW2NsYXNzX25hbWVdOgorICAgICAgICAgICAgbW9kdWxlc19kaWN0W21vZHVsZV9uYW1lXVtjbGFzc19uYW1lXS5hcHBlbmQodGVzdF9uYW1lKQorCisgICAgcmV0dXJuIG1vZHVsZXNfZGljdAorCiBjbGFzcyBPRVRlc3RMb2FkZXIodW5pdHRlc3QuVGVzdExvYWRlcik6CiAgICAgY2FzZUNsYXNzID0gT0VUZXN0Q2FzZQogCkBAIC0zOSw3ICs2Niw4IEBACiAgICAgICAgICAgICBmaWx0ZXJzLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICBzZWxmLnRjID0gdGMKIAotICAgICAgICBzZWxmLm1vZHVsZXMgPSBtb2R1bGVzCisgICAgICAgIHNlbGYubW9kdWxlcyA9IF9idWlsdF9tb2R1bGVzX2RpY3QobW9kdWxlcykKKwogICAgICAgICBzZWxmLnRlc3RzID0gdGVzdHMKICAgICAgICAgc2VsZi5tb2R1bGVzX3JlcXVpcmVkID0gbW9kdWxlc19yZXF1aXJlZAogCkBAIC02Myw2ICs5MSw4IEBACiAKICAgICAgICAgc2VsZi5fcGF0Y2hDYXNlQ2xhc3Moc2VsZi5jYXNlQ2xhc3MpCiAKKyAgICAgICAgc3VwZXIoT0VUZXN0TG9hZGVyLCBzZWxmKS5fX2luaXRfXygpCisKICAgICBkZWYgX3BhdGNoQ2FzZUNsYXNzKHNlbGYsIHRlc3RDYXNlQ2xhc3MpOgogICAgICAgICAjIEFkZHMgY3VzdG9tIGF0dHJpYnV0ZXMgdG8gdGhlIE9FVGVzdENhc2UgY2xhc3MKICAgICAgICAgc2V0YXR0cih0ZXN0Q2FzZUNsYXNzLCAndGMnLCBzZWxmLnRjKQpAQCAtMTE2LDcgKzE0NiwzNSBAQAogICAgICAgICAiIiIKICAgICAgICAgICAgIFJldHVybnMgVHJ1ZSBpZiB0ZXN0IGNhc2UgbXVzdCBiZSBmaWx0ZXJlZCwgRmFsc2Ugb3RoZXJ3aXNlLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi5maWx0ZXJzOgorICAgICAgICAjIFhYWDsgSWYgdGhlIG1vZHVsZSBoYXMgbW9yZSB0aGFuIG9uZSBuYW1lc3BhY2Ugb25seSB1c2UKKyAgICAgICAgIyB0aGUgZmlyc3QgdG8gc3VwcG9ydCBydW4gdGhlIHdob2xlIG1vZHVsZSBzcGVjaWZ5aW5nIHRoZQorICAgICAgICAjIDxtb2R1bGVfbmFtZT4uW3Rlc3RfY2xhc3NdLlt0ZXN0X25hbWVdCisgICAgICAgIG1vZHVsZV9uYW1lX3NtYWxsID0gY2FzZS5fX21vZHVsZV9fLnNwbGl0KCcuJylbMF0KKyAgICAgICAgbW9kdWxlX25hbWUgPSBjYXNlLl9fbW9kdWxlX18KKworICAgICAgICBjbGFzc19uYW1lID0gY2FzZS5fX2NsYXNzX18uX19uYW1lX18KKyAgICAgICAgdGVzdF9uYW1lID0gY2FzZS5fdGVzdE1ldGhvZE5hbWUKKworICAgICAgICBpZiBzZWxmLm1vZHVsZXM6CisgICAgICAgICAgICBtb2R1bGUgPSBOb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5tb2R1bGVzW21vZHVsZV9uYW1lX3NtYWxsXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5tb2R1bGVzW21vZHVsZV9uYW1lXQorICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAgICAgaWYgbW9kdWxlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBjbGFzc19uYW1lIGluIG1vZHVsZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAgICAgICAgIGlmIG1vZHVsZVtjbGFzc19uYW1lXToKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdF9uYW1lIG5vdCBpbiBtb2R1bGVbY2xhc3NfbmFtZV06CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICMgRGVjb3JhdG9yIGZpbHRlcnMKKyAgICAgICAgaWYgc2VsZi5maWx0ZXJzIGFuZCBpc2luc3RhbmNlKGNhc2UsIE9FVGVzdENhc2UpOgogICAgICAgICAgICAgZmlsdGVycyA9IHNlbGYuZmlsdGVycy5jb3B5KCkKICAgICAgICAgICAgIGNhc2VfZGVjb3JhdG9ycyA9IFtjZCBmb3IgY2QgaW4gY2FzZS5kZWNvcmF0b3JzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2QuX19jbGFzc19fIGluIHNlbGYudXNlZF9maWx0ZXJzXQpAQCAtMTM0LDcgKzE5Miw4IEBACiAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgZGVmIF9nZXRUZXN0Q2FzZShzZWxmLCB0ZXN0Q2FzZUNsYXNzLCB0Y05hbWUpOgotICAgICAgICBpZiBub3QgaGFzYXR0cih0ZXN0Q2FzZUNsYXNzLCAnX19vZXFhX2xvYWRlcicpOgorICAgICAgICBpZiBub3QgaGFzYXR0cih0ZXN0Q2FzZUNsYXNzLCAnX19vZXFhX2xvYWRlcicpIGFuZCBcCisgICAgICAgICAgICAgICAgaXNzdWJjbGFzcyh0ZXN0Q2FzZUNsYXNzLCBPRVRlc3RDYXNlKToKICAgICAgICAgICAgICMgSW4gb3JkZXIgdG8gc3VwcG9ydCBkYXRhX3ZhcnMgdmFsaWRhdGlvbgogICAgICAgICAgICAgIyBtb25rZXkgcGF0Y2ggdGhlIGRlZmF1bHQgc2V0VXAvdGVhckRvd257Q2xhc3N9IHRvIHVzZQogICAgICAgICAgICAgIyB0aGUgb25lcyBwcm92aWRlZCBieSBPRVRlc3RDYXNlCkBAIC0xNjEsNyArMjIwLDggQEAKICAgICAgICAgICAgIHNldGF0dHIodGVzdENhc2VDbGFzcywgJ19fb2VxYV9sb2FkZXInLCBUcnVlKQogCiAgICAgICAgIGNhc2UgPSB0ZXN0Q2FzZUNsYXNzKHRjTmFtZSkKLSAgICAgICAgc2V0YXR0cihjYXNlLCAnZGVjb3JhdG9ycycsIFtdKQorICAgICAgICBpZiBpc2luc3RhbmNlKGNhc2UsIE9FVGVzdENhc2UpOgorICAgICAgICAgICAgc2V0YXR0cihjYXNlLCAnZGVjb3JhdG9ycycsIFtdKQogCiAgICAgICAgIHJldHVybiBjYXNlCiAKQEAgLTE3Myw5ICsyMzMsOSBAQAogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJUZXN0IGNhc2VzIHNob3VsZCBub3QgYmUgZGVyaXZlZCBmcm9tIFRlc3RTdWl0ZS4iIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBNYXliZSB5b3UgbWVhbnQgdG8gZGVyaXZlICVzIGZyb20gVGVzdENhc2U/IiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgdGVzdENhc2VDbGFzcy5fX25hbWVfXykKLSAgICAgICAgaWYgbm90IGlzc3ViY2xhc3ModGVzdENhc2VDbGFzcywgc2VsZi5jYXNlQ2xhc3MpOgorICAgICAgICBpZiBub3QgaXNzdWJjbGFzcyh0ZXN0Q2FzZUNsYXNzLCB1bml0dGVzdC5jYXNlLlRlc3RDYXNlKToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVGVzdCAlcyBpcyBub3QgZGVyaXZlZCBmcm9tICVzIiAlIFwKLSAgICAgICAgICAgICAgICAgICAgKHRlc3RDYXNlQ2xhc3MuX19uYW1lX18sIHNlbGYuY2FzZUNsYXNzLl9fbmFtZV9fKSkKKyAgICAgICAgICAgICAgICAgICAgKHRlc3RDYXNlQ2xhc3MuX19uYW1lX18sIHVuaXR0ZXN0LmNhc2UuVGVzdENhc2UuX19uYW1lX18pKQogCiAgICAgICAgIHRlc3RDYXNlTmFtZXMgPSBzZWxmLmdldFRlc3RDYXNlTmFtZXModGVzdENhc2VDbGFzcykKICAgICAgICAgaWYgbm90IHRlc3RDYXNlTmFtZXMgYW5kIGhhc2F0dHIodGVzdENhc2VDbGFzcywgJ3J1blRlc3QnKToKQEAgLTE5Niw2ICsyNTYsMjggQEAKIAogICAgICAgICByZXR1cm4gc2VsZi5zdWl0ZUNsYXNzKHN1aXRlKQogCisgICAgZGVmIF9yZXF1aXJlZF9tb2R1bGVzX3ZhbGlkYXRpb24oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICAgICAgU2VhcmNoIGluIFRlc3QgY29udGV4dCByZWdpc3RyeSBpZiBhIHJlcXVpcmVkCisgICAgICAgICAgICB0ZXN0IGlzIGZvdW5kLCByYWlzZSBhbiBleGNlcHRpb24gd2hlbiBub3QgZm91bmQuCisgICAgICAgICIiIgorCisgICAgICAgIGZvciBtb2R1bGUgaW4gc2VsZi5tb2R1bGVzX3JlcXVpcmVkOgorICAgICAgICAgICAgZm91bmQgPSBGYWxzZQorCisgICAgICAgICAgICAjIFRoZSBtb2R1bGUgbmFtZSBpcyBzcGxpdHRlZCB0byBvbmx5IGNvbXBhcmUgdGhlCisgICAgICAgICAgICAjIGZpcnN0IHBhcnQgb2YgYSB0ZXN0IGNhc2UgaWQuCisgICAgICAgICAgICBjb21wX2xlbiA9IGxlbihtb2R1bGUuc3BsaXQoJy4nKSkKKyAgICAgICAgICAgIGZvciBjYXNlIGluIHNlbGYudGMuX3JlZ2lzdHJ5WydjYXNlcyddOgorICAgICAgICAgICAgICAgIGNhc2VfY29tcCA9ICcuJy5qb2luKGNhc2Uuc3BsaXQoJy4nKVswOmNvbXBfbGVuXSkKKyAgICAgICAgICAgICAgICBpZiBtb2R1bGUgPT0gY2FzZV9jb21wOgorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgaWYgbm90IGZvdW5kOgorICAgICAgICAgICAgICAgIHJhaXNlIE9FUUFUZXN0Tm90Rm91bmQoIk5vdCBmb3VuZCAlcyBpbiBsb2FkZWQgdGVzdCBjYXNlcyIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUpCisKICAgICBkZWYgZGlzY292ZXIoc2VsZik6CiAgICAgICAgIGJpZ19zdWl0ZSA9IHNlbGYuc3VpdGVDbGFzcygpCiAgICAgICAgIGZvciBwYXRoIGluIHNlbGYubW9kdWxlX3BhdGhzOgpAQCAtMjEwLDggKzI5Miw0MSBAQAogICAgICAgICBmb3IgY2xzcyBpbiBkaXNjb3Zlcl9jbGFzc2VzOgogICAgICAgICAgICAgY2FzZXMgPSBjbHNzLmRpc2NvdmVyKHNlbGYudGMuX3JlZ2lzdHJ5KQogCisgICAgICAgIGlmIHNlbGYubW9kdWxlc19yZXF1aXJlZDoKKyAgICAgICAgICAgIHNlbGYuX3JlcXVpcmVkX21vZHVsZXNfdmFsaWRhdGlvbigpCisKICAgICAgICAgcmV0dXJuIHNlbGYuc3VpdGVDbGFzcyhjYXNlcykgaWYgY2FzZXMgZWxzZSBiaWdfc3VpdGUKIAorICAgIGRlZiBfZmlsdGVyTW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgIGlmIG1vZHVsZS5fX25hbWVfXyBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6CisgICAgICAgICAgICBtc2cgPSAnVHJpZWQgdG8gaW1wb3J0ICVzIHRlc3QgbW9kdWxlIGJ1dCBpcyBhIGJ1aWx0LWluJworICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnICUgbW9kdWxlLl9fbmFtZV9fKQorCisgICAgICAgICMgWFhYOyBJZiB0aGUgbW9kdWxlIGhhcyBtb3JlIHRoYW4gb25lIG5hbWVzcGFjZSBvbmx5IHVzZQorICAgICAgICAjIHRoZSBmaXJzdCB0byBzdXBwb3J0IHJ1biB0aGUgd2hvbGUgbW9kdWxlIHNwZWNpZnlpbmcgdGhlCisgICAgICAgICMgPG1vZHVsZV9uYW1lPi5bdGVzdF9jbGFzc10uW3Rlc3RfbmFtZV0KKyAgICAgICAgbW9kdWxlX25hbWVfc21hbGwgPSBtb2R1bGUuX19uYW1lX18uc3BsaXQoJy4nKVswXQorICAgICAgICBtb2R1bGVfbmFtZSA9IG1vZHVsZS5fX25hbWVfXworCisgICAgICAgICMgTm9ybWFsIHRlc3QgbW9kdWxlcyBhcmUgbG9hZGVkIGlmIG5vIG1vZHVsZXMgd2VyZSBzcGVjaWZpZWQsCisgICAgICAgICMgaWYgbW9kdWxlIGlzIGluIHRoZSBzcGVjaWZpZWQgbW9kdWxlIGxpc3Qgb3IgaWYgJ2FsbCcgaXMgaW4KKyAgICAgICAgIyBtb2R1bGUgbGlzdC4KKyAgICAgICAgIyBVbmRlcnNjb3JlIG1vZHVsZXMgYXJlIGxvYWRlZCBvbmx5IGlmIHNwZWNpZmllZCBpbiBtb2R1bGUgbGlzdC4KKyAgICAgICAgbG9hZF9tb2R1bGUgPSBUcnVlIGlmIG5vdCBtb2R1bGVfbmFtZS5zdGFydHN3aXRoKCdfJykgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIChub3Qgc2VsZi5tb2R1bGVzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgbW9kdWxlX25hbWUgaW4gc2VsZi5tb2R1bGVzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgbW9kdWxlX25hbWVfc21hbGwgaW4gc2VsZi5tb2R1bGVzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgJ2FsbCcgaW4gc2VsZi5tb2R1bGVzKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIEZhbHNlCisKKyAgICAgICAgbG9hZF91bmRlcnNjb3JlID0gVHJ1ZSBpZiBtb2R1bGVfbmFtZS5zdGFydHN3aXRoKCdfJykgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCAobW9kdWxlX25hbWUgaW4gc2VsZi5tb2R1bGVzIG9yIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfbmFtZV9zbWFsbCBpbiBzZWxmLm1vZHVsZXMpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIEZhbHNlCisKKyAgICAgICAgcmV0dXJuIChsb2FkX21vZHVsZSwgbG9hZF91bmRlcnNjb3JlKQorCisKICAgICAjIFhYWCBBZnRlciBQeXRob24gMy41LCByZW1vdmUgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBoYWNrcyBmb3IKICAgICAjIHVzZV9sb2FkX3Rlc3RzIGRlcHJlY2F0aW9uIHZpYSAqYXJncyBhbmQgKiprd3MuICBTZWUgaXNzdWUgMTY2NjIuCiAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA+PSAoMyw1KToKQEAgLTIxOSwyMyArMzM0LDcgQEAKICAgICAgICAgICAgICIiIgogICAgICAgICAgICAgICAgIFJldHVybnMgYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgY29udGFpbmVkIGluIG1vZHVsZS4KICAgICAgICAgICAgICIiIgotICAgICAgICAgICAgaWYgbW9kdWxlLl9fbmFtZV9fIGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lczoKLSAgICAgICAgICAgICAgICBtc2cgPSAnVHJpZWQgdG8gaW1wb3J0ICVzIHRlc3QgbW9kdWxlIGJ1dCBpcyBhIGJ1aWx0LWluJwotICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZyAlIG1vZHVsZS5fX25hbWVfXykKLQotICAgICAgICAgICAgIyBOb3JtYWwgdGVzdCBtb2R1bGVzIGFyZSBsb2FkZWQgaWYgbm8gbW9kdWxlcyB3ZXJlIHNwZWNpZmllZCwKLSAgICAgICAgICAgICMgaWYgbW9kdWxlIGlzIGluIHRoZSBzcGVjaWZpZWQgbW9kdWxlIGxpc3Qgb3IgaWYgJ2FsbCcgaXMgaW4KLSAgICAgICAgICAgICMgbW9kdWxlIGxpc3QuCi0gICAgICAgICAgICAjIFVuZGVyc2NvcmUgbW9kdWxlcyBhcmUgbG9hZGVkIG9ubHkgaWYgc3BlY2lmaWVkIGluIG1vZHVsZSBsaXN0LgotICAgICAgICAgICAgbG9hZF9tb2R1bGUgPSBUcnVlIGlmIG5vdCBtb2R1bGUuX19uYW1lX18uc3RhcnRzd2l0aCgnXycpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgKG5vdCBzZWxmLm1vZHVsZXMgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgbW9kdWxlLl9fbmFtZV9fIGluIHNlbGYubW9kdWxlcyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciAnYWxsJyBpbiBzZWxmLm1vZHVsZXMpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIEZhbHNlCi0KLSAgICAgICAgICAgIGxvYWRfdW5kZXJzY29yZSA9IFRydWUgaWYgbW9kdWxlLl9fbmFtZV9fLnN0YXJ0c3dpdGgoJ18nKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBtb2R1bGUuX19uYW1lX18gaW4gc2VsZi5tb2R1bGVzIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBGYWxzZQorICAgICAgICAgICAgbG9hZF9tb2R1bGUsIGxvYWRfdW5kZXJzY29yZSA9IHNlbGYuX2ZpbHRlck1vZHVsZShtb2R1bGUpCiAKICAgICAgICAgICAgIGlmIGxvYWRfbW9kdWxlIG9yIGxvYWRfdW5kZXJzY29yZToKICAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoT0VUZXN0TG9hZGVyLCBzZWxmKS5sb2FkVGVzdHNGcm9tTW9kdWxlKApAQCAtMjQ3LDIzICszNDYsNyBAQAogICAgICAgICAgICAgIiIiCiAgICAgICAgICAgICAgICAgUmV0dXJucyBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBjb250YWluZWQgaW4gbW9kdWxlLgogICAgICAgICAgICAgIiIiCi0gICAgICAgICAgICBpZiBtb2R1bGUuX19uYW1lX18gaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgotICAgICAgICAgICAgICAgIG1zZyA9ICdUcmllZCB0byBpbXBvcnQgJXMgdGVzdCBtb2R1bGUgYnV0IGlzIGEgYnVpbHQtaW4nCi0gICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnICUgbW9kdWxlLl9fbmFtZV9fKQotCi0gICAgICAgICAgICAjIE5vcm1hbCB0ZXN0IG1vZHVsZXMgYXJlIGxvYWRlZCBpZiBubyBtb2R1bGVzIHdlcmUgc3BlY2lmaWVkLAotICAgICAgICAgICAgIyBpZiBtb2R1bGUgaXMgaW4gdGhlIHNwZWNpZmllZCBtb2R1bGUgbGlzdCBvciBpZiAnYWxsJyBpcyBpbgotICAgICAgICAgICAgIyBtb2R1bGUgbGlzdC4KLSAgICAgICAgICAgICMgVW5kZXJzY29yZSBtb2R1bGVzIGFyZSBsb2FkZWQgb25seSBpZiBzcGVjaWZpZWQgaW4gbW9kdWxlIGxpc3QuCi0gICAgICAgICAgICBsb2FkX21vZHVsZSA9IFRydWUgaWYgbm90IG1vZHVsZS5fX25hbWVfXy5zdGFydHN3aXRoKCdfJykgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCAobm90IHNlbGYubW9kdWxlcyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBtb2R1bGUuX19uYW1lX18gaW4gc2VsZi5tb2R1bGVzIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yICdhbGwnIGluIHNlbGYubW9kdWxlcykgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgRmFsc2UKLQotICAgICAgICAgICAgbG9hZF91bmRlcnNjb3JlID0gVHJ1ZSBpZiBtb2R1bGUuX19uYW1lX18uc3RhcnRzd2l0aCgnXycpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG1vZHVsZS5fX25hbWVfXyBpbiBzZWxmLm1vZHVsZXMgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIEZhbHNlCisgICAgICAgICAgICBsb2FkX21vZHVsZSwgbG9hZF91bmRlcnNjb3JlID0gc2VsZi5fZmlsdGVyTW9kdWxlKG1vZHVsZSkKIAogICAgICAgICAgICAgaWYgbG9hZF9tb2R1bGUgb3IgbG9hZF91bmRlcnNjb3JlOgogICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcihPRVRlc3RMb2FkZXIsIHNlbGYpLmxvYWRUZXN0c0Zyb21Nb2R1bGUoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb3JlL3J1bm5lci5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvcmUvcnVubmVyLnB5CmluZGV4IDQ0ZmZlY2IuLjEzY2RmNWIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvcmUvcnVubmVyLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvcmUvcnVubmVyLnB5CkBAIC01LDYgKzUsNyBAQAogaW1wb3J0IHRpbWUKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQogCiB4bWxFbmFibGVkID0gRmFsc2UKIHRyeToKQEAgLTI0LDEwICsyNSwxNCBAQAogCiAgICAgZGVmIHdyaXRlKHNlbGYsIG1zZyk6CiAgICAgICAgIGlmIGxlbihtc2cpID4gMSBhbmQgbXNnWzBdICE9ICdcbic6Ci0gICAgICAgICAgICBzZWxmLmJ1ZmZlciArPSBtc2cKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYubG9nZ2VyLmxvZyhsb2dnaW5nLklORk8sIHNlbGYuYnVmZmVyLnJzdHJpcCgiXG4iKSkKLSAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gIiIKKyAgICAgICAgICAgIGlmICcuLi4nIGluIG1zZzoKKyAgICAgICAgICAgICAgICBzZWxmLmJ1ZmZlciArPSBtc2cKKyAgICAgICAgICAgIGVsaWYgc2VsZi5idWZmZXI6CisgICAgICAgICAgICAgICAgc2VsZi5idWZmZXIgKz0gbXNnCisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIubG9nKGxvZ2dpbmcuSU5GTywgc2VsZi5idWZmZXIpCisgICAgICAgICAgICAgICAgc2VsZi5idWZmZXIgPSAiIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5sb2cobG9nZ2luZy5JTkZPLCBtc2cpCiAKICAgICBkZWYgZmx1c2goc2VsZik6CiAgICAgICAgIGZvciBoYW5kbGVyIGluIHNlbGYubG9nZ2VyLmhhbmRsZXJzOgpAQCAtMzgsMjIgKzQzLDEyMiBAQAogICAgICAgICBzdXBlcihPRVRlc3RSZXN1bHQsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKIAogICAgICAgICBzZWxmLnRjID0gdGMKKyAgICAgICAgc2VsZi5fdGNfbWFwX3Jlc3VsdHMoKQogCisgICAgZGVmIHN0YXJ0VGVzdChzZWxmLCB0ZXN0KToKKyAgICAgICAgIyBBbGxvdyB1cyB0byB0cmlnZ2VyIHRoZSB0ZXN0Y2FzZSBidWZmZXIgbW9kZSBvbiBhIHBlciB0ZXN0IGJhc2lzCisgICAgICAgICMgc28gc3Rkb3V0L3N0ZGVyciBhcmUgb25seSBwcmludGVkIHVwb24gZmFpbHVyZS4gRW5hYmxlcyBkZWJ1Z2dpbmcKKyAgICAgICAgIyBidXQgY2xlYW4gb3V0cHV0CisgICAgICAgIGlmIGhhc2F0dHIodGVzdCwgImJ1ZmZlciIpOgorICAgICAgICAgICAgc2VsZi5idWZmZXIgPSB0ZXN0LmJ1ZmZlcgorICAgICAgICBzdXBlcihPRVRlc3RSZXN1bHQsIHNlbGYpLnN0YXJ0VGVzdCh0ZXN0KQorCisgICAgZGVmIF90Y19tYXBfcmVzdWx0cyhzZWxmKToKICAgICAgICAgc2VsZi50Yy5fcmVzdWx0c1snZmFpbHVyZXMnXSA9IHNlbGYuZmFpbHVyZXMKICAgICAgICAgc2VsZi50Yy5fcmVzdWx0c1snZXJyb3JzJ10gPSBzZWxmLmVycm9ycwogICAgICAgICBzZWxmLnRjLl9yZXN1bHRzWydza2lwcGVkJ10gPSBzZWxmLnNraXBwZWQKICAgICAgICAgc2VsZi50Yy5fcmVzdWx0c1snZXhwZWN0ZWRGYWlsdXJlcyddID0gc2VsZi5leHBlY3RlZEZhaWx1cmVzCiAKLSAgICBkZWYgc3RhcnRUZXN0KHNlbGYsIHRlc3QpOgotICAgICAgICBzdXBlcihPRVRlc3RSZXN1bHQsIHNlbGYpLnN0YXJ0VGVzdCh0ZXN0KQorICAgIGRlZiBsb2dTdW1tYXJ5KHNlbGYsIGNvbXBvbmVudCwgY29udGV4dF9tc2c9JycpOgorICAgICAgICBlbGFwc2VkX3RpbWUgPSBzZWxmLnRjLl9ydW5fZW5kX3RpbWUgLSBzZWxmLnRjLl9ydW5fc3RhcnRfdGltZQorICAgICAgICBzZWxmLnRjLmxvZ2dlci5pbmZvKCJTVU1NQVJZOiIpCisgICAgICAgIHNlbGYudGMubG9nZ2VyLmluZm8oIiVzICglcykgLSBSYW4gJWQgdGVzdCVzIGluICUuM2ZzIiAlIChjb21wb25lbnQsCisgICAgICAgICAgICBjb250ZXh0X21zZywgc2VsZi50ZXN0c1J1biwgc2VsZi50ZXN0c1J1biAhPSAxIGFuZCAicyIgb3IgIiIsCisgICAgICAgICAgICBlbGFwc2VkX3RpbWUpKQorCisgICAgICAgIGlmIHNlbGYud2FzU3VjY2Vzc2Z1bCgpOgorICAgICAgICAgICAgbXNnID0gIiVzIC0gT0sgLSBBbGwgcmVxdWlyZWQgdGVzdHMgcGFzc2VkIiAlIGNvbXBvbmVudAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnID0gIiVzIC0gRkFJTCAtIFJlcXVpcmVkIHRlc3RzIGZhaWxlZCIgJSBjb21wb25lbnQKKyAgICAgICAgc2tpcHBlZCA9IGxlbihzZWxmLnRjLl9yZXN1bHRzWydza2lwcGVkJ10pCisgICAgICAgIGlmIHNraXBwZWQ6IAorICAgICAgICAgICAgbXNnICs9ICIgKHNraXBwZWQ9JWQpIiAlIHNraXBwZWQKKyAgICAgICAgc2VsZi50Yy5sb2dnZXIuaW5mbyhtc2cpCisKKyAgICBkZWYgX2dldERldGFpbHNOb3RQYXNzZWQoc2VsZiwgY2FzZSwgdHlwZSwgZGVzYyk6CisgICAgICAgIGZvdW5kID0gRmFsc2UKKworICAgICAgICBmb3IgKHNjYXNlLCBtc2cpIGluIHNlbGYudGMuX3Jlc3VsdHNbdHlwZV06CisgICAgICAgICAgICAjIFhYWDogV2hlbiBYTUwgcmVwb3J0aW5nIGlzIGVuYWJsZWQgc2Nhc2UgaXMKKyAgICAgICAgICAgICMgeG1scnVubmVyLnJlc3VsdC5fVGVzdEluZm8gaW5zdGFuY2UgaW5zdGVhZCBvZgorICAgICAgICAgICAgIyBzdHJpbmcuCisgICAgICAgICAgICBpZiB4bWxFbmFibGVkOgorICAgICAgICAgICAgICAgIGlmIGNhc2UuaWQoKSA9PSBzY2FzZS50ZXN0X2lkOgorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBzY2FzZV9zdHIgPSBzY2FzZS50ZXN0X2lkCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGNhc2UgPT0gc2Nhc2U6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHNjYXNlX3N0ciA9IHN0cihzY2FzZSkKKworICAgICAgICAgICAgIyBXaGVuIGZhaWxzIGF0IG1vZHVsZSBvciBjbGFzcyBsZXZlbCB0aGUgY2xhc3MgbmFtZSBpcyBwYXNzZWQgYXMgc3RyaW5nCisgICAgICAgICAgICAjIHNvIGZpZ3VyZSBvdXQgdG8gc2VlIGlmIG1hdGNoCisgICAgICAgICAgICBtID0gcmUuc2VhcmNoKCJec2V0VXBNb2R1bGUgXCgoP1A8bW9kdWxlX25hbWU+LiopXCkkIiwgc2Nhc2Vfc3RyKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBpZiBjYXNlLl9fY2xhc3NfXy5fX21vZHVsZV9fID09IG0uZ3JvdXAoJ21vZHVsZV9uYW1lJyk6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBtID0gcmUuc2VhcmNoKCJec2V0VXBDbGFzcyBcKCg/UDxjbGFzc19uYW1lPi4qKVwpJCIsIHNjYXNlX3N0cikKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgY2xhc3NfbmFtZSA9ICIlcy4lcyIgJSAoY2FzZS5fX2NsYXNzX18uX19tb2R1bGVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UuX19jbGFzc19fLl9fbmFtZV9fKQorCisgICAgICAgICAgICAgICAgaWYgY2xhc3NfbmFtZSA9PSBtLmdyb3VwKCdjbGFzc19uYW1lJyk6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIGZvdW5kOgorICAgICAgICAgICAgcmV0dXJuIChmb3VuZCwgbXNnKQorCisgICAgICAgIHJldHVybiAoZm91bmQsIE5vbmUpCisKKyAgICBkZWYgbG9nRGV0YWlscyhzZWxmKToKKyAgICAgICAgc2VsZi50Yy5sb2dnZXIuaW5mbygiUkVTVUxUUzoiKQorICAgICAgICBmb3IgY2FzZV9uYW1lIGluIHNlbGYudGMuX3JlZ2lzdHJ5WydjYXNlcyddOgorICAgICAgICAgICAgY2FzZSA9IHNlbGYudGMuX3JlZ2lzdHJ5WydjYXNlcyddW2Nhc2VfbmFtZV0KKworICAgICAgICAgICAgcmVzdWx0X3R5cGVzID0gWydmYWlsdXJlcycsICdlcnJvcnMnLCAnc2tpcHBlZCcsICdleHBlY3RlZEZhaWx1cmVzJ10KKyAgICAgICAgICAgIHJlc3VsdF9kZXNjID0gWydGQUlMRUQnLCAnRVJST1InLCAnU0tJUFBFRCcsICdFWFBFQ1RFREZBSUwnXQorCisgICAgICAgICAgICBmYWlsID0gRmFsc2UKKyAgICAgICAgICAgIGRlc2MgPSBOb25lCisgICAgICAgICAgICBmb3IgaWR4LCBuYW1lIGluIGVudW1lcmF0ZShyZXN1bHRfdHlwZXMpOgorICAgICAgICAgICAgICAgIChmYWlsLCBtc2cpID0gc2VsZi5fZ2V0RGV0YWlsc05vdFBhc3NlZChjYXNlLCByZXN1bHRfdHlwZXNbaWR4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9kZXNjW2lkeF0pCisgICAgICAgICAgICAgICAgaWYgZmFpbDoKKyAgICAgICAgICAgICAgICAgICAgZGVzYyA9IHJlc3VsdF9kZXNjW2lkeF0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgb2VpZCA9IC0xCisgICAgICAgICAgICBpZiBoYXNhdHRyKGNhc2UsICdkZWNvcmF0b3JzJyk6CisgICAgICAgICAgICAgICAgZm9yIGQgaW4gY2FzZS5kZWNvcmF0b3JzOgorICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGQsICdvZWlkJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBvZWlkID0gZC5vZWlkCisKKyAgICAgICAgICAgIGlmIGZhaWw6CisgICAgICAgICAgICAgICAgc2VsZi50Yy5sb2dnZXIuaW5mbygiUkVTVUxUUyAtICVzIC0gVGVzdGNhc2UgJXM6ICVzIiAlIChjYXNlLmlkKCksCisgICAgICAgICAgICAgICAgICAgIG9laWQsIGRlc2MpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnRjLmxvZ2dlci5pbmZvKCJSRVNVTFRTIC0gJXMgLSBUZXN0Y2FzZSAlczogJXMiICUgKGNhc2UuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgb2VpZCwgJ1BBU1NFRCcpKQorCitjbGFzcyBPRUxpc3RUZXN0c1Jlc3VsdChvYmplY3QpOgorICAgIGRlZiB3YXNTdWNjZXNzZnVsKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQogCiBjbGFzcyBPRVRlc3RSdW5uZXIoX1Rlc3RSdW5uZXIpOgorICAgIHN0cmVhbUxvZ2dlckNsYXNzID0gT0VTdHJlYW1Mb2dnZXIKKwogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YywgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgaWYgeG1sRW5hYmxlZDoKICAgICAgICAgICAgIGlmIG5vdCBrd2FyZ3MuZ2V0KCdvdXRwdXQnKToKICAgICAgICAgICAgICAgICBrd2FyZ3NbJ291dHB1dCddID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgJ1Rlc3RSZXN1bHRzXyVzXyVzJyAlICh0aW1lLnN0cmZ0aW1lKCIlWSVtJWQlSCVNJVMiKSwgb3MuZ2V0cGlkKCkpKQogCisgICAgICAgIGt3YXJnc1snc3RyZWFtJ10gPSBzZWxmLnN0cmVhbUxvZ2dlckNsYXNzKHRjLmxvZ2dlcikKICAgICAgICAgc3VwZXIoT0VUZXN0UnVubmVyLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCiAgICAgICAgIHNlbGYudGMgPSB0YwogICAgICAgICBzZWxmLnJlc3VsdGNsYXNzID0gT0VUZXN0UmVzdWx0CkBAIC03NCwzICsxNzksOTkgQEAKICAgICAgICAgZGVmIF9tYWtlUmVzdWx0KHNlbGYpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVzdWx0Y2xhc3Moc2VsZi50Yywgc2VsZi5zdHJlYW0sIHNlbGYuZGVzY3JpcHRpb25zLAogICAgICAgICAgICAgICAgICAgICBzZWxmLnZlcmJvc2l0eSkKKworCisgICAgZGVmIF93YWxrX3N1aXRlKHNlbGYsIHN1aXRlLCBmdW5jKToKKyAgICAgICAgZm9yIG9iaiBpbiBzdWl0ZToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCB1bml0dGVzdC5zdWl0ZS5UZXN0U3VpdGUpOgorICAgICAgICAgICAgICAgIGlmIGxlbihvYmouX3Rlc3RzKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2Fsa19zdWl0ZShvYmosIGZ1bmMpCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCB1bml0dGVzdC5jYXNlLlRlc3RDYXNlKToKKyAgICAgICAgICAgICAgICBmdW5jKHNlbGYudGMubG9nZ2VyLCBvYmopCisgICAgICAgICAgICAgICAgc2VsZi5fd2Fsa2VkX2Nhc2VzID0gc2VsZi5fd2Fsa2VkX2Nhc2VzICsgMQorCisgICAgZGVmIF9saXN0X3Rlc3RzX25hbWUoc2VsZiwgc3VpdGUpOgorICAgICAgICBmcm9tIG9lcWEuY29yZS5kZWNvcmF0b3Iub2VpZCBpbXBvcnQgT0VUZXN0SUQKKyAgICAgICAgZnJvbSBvZXFhLmNvcmUuZGVjb3JhdG9yLm9ldGFnIGltcG9ydCBPRVRlc3RUYWcKKworICAgICAgICBzZWxmLl93YWxrZWRfY2FzZXMgPSAwCisKKyAgICAgICAgZGVmIF9saXN0X2Nhc2VzX3dpdGhvdXRfaWQobG9nZ2VyLCBjYXNlKToKKworICAgICAgICAgICAgZm91bmRfaWQgPSBGYWxzZQorICAgICAgICAgICAgaWYgaGFzYXR0cihjYXNlLCAnZGVjb3JhdG9ycycpOgorICAgICAgICAgICAgICAgIGZvciBkIGluIGNhc2UuZGVjb3JhdG9yczoKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShkLCBPRVRlc3RJRCk6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9pZCA9IFRydWUKKworICAgICAgICAgICAgaWYgbm90IGZvdW5kX2lkOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdvZWlkIG1pc3NpbmcgZm9yICVzJyAlIGNhc2UuaWQoKSkKKworICAgICAgICBkZWYgX2xpc3RfY2FzZXMobG9nZ2VyLCBjYXNlKToKKyAgICAgICAgICAgIG9laWQgPSBOb25lCisgICAgICAgICAgICBvZXRhZyA9IE5vbmUKKworICAgICAgICAgICAgaWYgaGFzYXR0cihjYXNlLCAnZGVjb3JhdG9ycycpOgorICAgICAgICAgICAgICAgIGZvciBkIGluIGNhc2UuZGVjb3JhdG9yczoKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShkLCBPRVRlc3RJRCk6CisgICAgICAgICAgICAgICAgICAgICAgICBvZWlkID0gZC5vZWlkCisgICAgICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShkLCBPRVRlc3RUYWcpOgorICAgICAgICAgICAgICAgICAgICAgICAgb2V0YWcgPSBkLm9ldGFnCisKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCIlc1x0JXNcdFx0JXMiICUgKG9laWQsIG9ldGFnLCBjYXNlLmlkKCkpKQorCisgICAgICAgIHNlbGYudGMubG9nZ2VyLmluZm8oIkxpc3RpbmcgdGVzdCBjYXNlcyB0aGF0IGRvbid0IGhhdmUgb2VpZCAuLi4iKQorICAgICAgICBzZWxmLl93YWxrX3N1aXRlKHN1aXRlLCBfbGlzdF9jYXNlc193aXRob3V0X2lkKQorICAgICAgICBzZWxmLnRjLmxvZ2dlci5pbmZvKCItIiAqIDgwKQorCisgICAgICAgIHNlbGYudGMubG9nZ2VyLmluZm8oIkxpc3RpbmcgYWxsIGF2YWlsYWJsZSB0ZXN0czoiKQorICAgICAgICBzZWxmLl93YWxrZWRfY2FzZXMgPSAwCisgICAgICAgIHNlbGYudGMubG9nZ2VyLmluZm8oImlkXHR0YWdcdFx0dGVzdCIpCisgICAgICAgIHNlbGYudGMubG9nZ2VyLmluZm8oIi0iICogODApCisgICAgICAgIHNlbGYuX3dhbGtfc3VpdGUoc3VpdGUsIF9saXN0X2Nhc2VzKQorICAgICAgICBzZWxmLnRjLmxvZ2dlci5pbmZvKCItIiAqIDgwKQorICAgICAgICBzZWxmLnRjLmxvZ2dlci5pbmZvKCJUb3RhbCBmb3VuZDpcdCVzIiAlIHNlbGYuX3dhbGtlZF9jYXNlcykKKworICAgIGRlZiBfbGlzdF90ZXN0c19jbGFzcyhzZWxmLCBzdWl0ZSk6CisgICAgICAgIHNlbGYuX3dhbGtlZF9jYXNlcyA9IDAKKworICAgICAgICBjdXJyID0ge30KKyAgICAgICAgZGVmIF9saXN0X2NsYXNzZXMobG9nZ2VyLCBjYXNlKToKKyAgICAgICAgICAgIGlmIG5vdCAnbW9kdWxlJyBpbiBjdXJyIG9yIGN1cnJbJ21vZHVsZSddICE9IGNhc2UuX19tb2R1bGVfXzoKKyAgICAgICAgICAgICAgICBjdXJyWydtb2R1bGUnXSA9IGNhc2UuX19tb2R1bGVfXworICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGN1cnJbJ21vZHVsZSddKQorCisgICAgICAgICAgICBpZiBub3QgJ2NsYXNzJyBpbiBjdXJyICBvciBjdXJyWydjbGFzcyddICE9IFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZS5fX2NsYXNzX18uX19uYW1lX186CisgICAgICAgICAgICAgICAgY3VyclsnY2xhc3MnXSA9IGNhc2UuX19jbGFzc19fLl9fbmFtZV9fCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIiAtLSAlcyIgJSBjdXJyWydjbGFzcyddKQorCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiIC0tIC0tICVzIiAlIGNhc2UuX3Rlc3RNZXRob2ROYW1lKQorCisgICAgICAgIHNlbGYudGMubG9nZ2VyLmluZm8oIkxpc3RpbmcgYWxsIGF2YWlsYWJsZSB0ZXN0IGNsYXNzZXM6IikKKyAgICAgICAgc2VsZi5fd2Fsa19zdWl0ZShzdWl0ZSwgX2xpc3RfY2xhc3NlcykKKworICAgIGRlZiBfbGlzdF90ZXN0c19tb2R1bGUoc2VsZiwgc3VpdGUpOgorICAgICAgICBzZWxmLl93YWxrZWRfY2FzZXMgPSAwCisKKyAgICAgICAgbGlzdGVkID0gW10KKyAgICAgICAgZGVmIF9saXN0X21vZHVsZXMobG9nZ2VyLCBjYXNlKToKKyAgICAgICAgICAgIGlmIG5vdCBjYXNlLl9fbW9kdWxlX18gaW4gbGlzdGVkOgorICAgICAgICAgICAgICAgIGlmIGNhc2UuX19tb2R1bGVfXy5zdGFydHN3aXRoKCdfJyk6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCIlcyAoaGlkZGVuKSIgJSBjYXNlLl9fbW9kdWxlX18pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oY2FzZS5fX21vZHVsZV9fKQorICAgICAgICAgICAgICAgIGxpc3RlZC5hcHBlbmQoY2FzZS5fX21vZHVsZV9fKQorCisgICAgICAgIHNlbGYudGMubG9nZ2VyLmluZm8oIkxpc3RpbmcgYWxsIGF2YWlsYWJsZSB0ZXN0IG1vZHVsZXM6IikKKyAgICAgICAgc2VsZi5fd2Fsa19zdWl0ZShzdWl0ZSwgX2xpc3RfbW9kdWxlcykKKworICAgIGRlZiBsaXN0X3Rlc3RzKHNlbGYsIHN1aXRlLCBkaXNwbGF5X3R5cGUpOgorICAgICAgICBpZiBkaXNwbGF5X3R5cGUgPT0gJ25hbWUnOgorICAgICAgICAgICAgc2VsZi5fbGlzdF90ZXN0c19uYW1lKHN1aXRlKQorICAgICAgICBlbGlmIGRpc3BsYXlfdHlwZSA9PSAnY2xhc3MnOgorICAgICAgICAgICAgc2VsZi5fbGlzdF90ZXN0c19jbGFzcyhzdWl0ZSkKKyAgICAgICAgZWxpZiBkaXNwbGF5X3R5cGUgPT0gJ21vZHVsZSc6CisgICAgICAgICAgICBzZWxmLl9saXN0X3Rlc3RzX21vZHVsZShzdWl0ZSkKKworICAgICAgICByZXR1cm4gT0VMaXN0VGVzdHNSZXN1bHQoKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS90YXJnZXQvcWVtdS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvcmUvdGFyZ2V0L3FlbXUucHkKaW5kZXggMmRjNTIxYy4uZDM1OWJmOSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS90YXJnZXQvcWVtdS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb3JlL3RhcmdldC9xZW11LnB5CkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBsb3lfZGlyX2ltYWdlPWRpcl9pbWFnZSwgZGlzcGxheT1kaXNwbGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZmlsZT1ib290bG9nLCBib290dGltZT1ib290dGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9rdm09a3ZtLCBkdW1wX2Rpcj1kdW1wX2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBfaG9zdF9jbWRzPWR1bXBfaG9zdF9jbWRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcF9ob3N0X2NtZHM9ZHVtcF9ob3N0X2NtZHMsIGxvZ2dlcj1sb2dnZXIpCiAKICAgICBkZWYgc3RhcnQoc2VsZiwgcGFyYW1zPU5vbmUsIGV4dHJhX2Jvb3RwYXJhbXM9Tm9uZSk6CiAgICAgICAgIGlmIHNlbGYucnVubmVyLnN0YXJ0KHBhcmFtcywgZXh0cmFfYm9vdHBhcmFtcz1leHRyYV9ib290cGFyYW1zKToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvcmUvdGFyZ2V0L3NzaC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvcmUvdGFyZ2V0L3NzaC5weQppbmRleCBiODA5MzljLi4xNTFiOTlhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb3JlL3RhcmdldC9zc2gucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS90YXJnZXQvc3NoLnB5CkBAIC02LDYgKzYsNyBAQAogaW1wb3J0IHNlbGVjdAogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgY29kZWNzCiAKIGZyb20gLiBpbXBvcnQgT0VUYXJnZXQKIApAQCAtODIsNyArODMsNyBAQAogICAgICAgICAgICAgcHJvY2Vzc1RpbWVvdXQgPSBzZWxmLnRpbWVvdXQKIAogICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHNlbGYuX3J1bihzc2hDbWQsIHByb2Nlc3NUaW1lb3V0LCBUcnVlKQotICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCdcbkNvbW1hbmQ6ICVzXG5PdXRwdXQ6ICAlc1xuJyAlIChjb21tYW5kLCBvdXRwdXQpKQorICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygnQ29tbWFuZDogJXNcbk91dHB1dDogICVzXG4nICUgKGNvbW1hbmQsIG91dHB1dCkpCiAgICAgICAgIHJldHVybiAoc3RhdHVzLCBvdXRwdXQpCiAKICAgICBkZWYgY29weVRvKHNlbGYsIGxvY2FsU3JjLCByZW1vdGVEc3QpOgpAQCAtMjA2LDEyICsyMDcsMTIgQEAKICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ3RpbWU6ICVzLCBlbmR0aW1lOiAlcycgJSAodGltZS50aW1lKCksIGVuZHRpbWUpKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZWN0LnNlbGVjdChbcHJvY2Vzcy5zdGRvdXRdLCBbXSwgW10sIDUpWzBdICE9IFtdOgotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG9zLnJlYWQocHJvY2Vzcy5zdGRvdXQuZmlsZW5vKCksIDEwMjQpCisgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSBjb2RlY3MuZ2V0cmVhZGVyKCd1dGYtOCcpKHByb2Nlc3Muc3Rkb3V0KQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHJlYWRlci5yZWFkKDEwMjQsIDEwMjQpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC5jbG9zZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW9mID0gVHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5kZWNvZGUoInV0Zi04IikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gZGF0YQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnUGFydGlhbCBkYXRhIGZyb20gU1NIIGNhbGw6ICVzJyAlIGRhdGEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kdGltZSA9IHRpbWUudGltZSgpICsgdGltZW91dApAQCAtMjMzLDcgKzIzNCw3IEBACiAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IGxhc3RsaW5lCiAKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG91dHB1dCA9IHByb2Nlc3MuY29tbXVuaWNhdGUoKVswXS5kZWNvZGUoInV0Zi04IikKKyAgICAgICAgICAgIG91dHB1dCA9IHByb2Nlc3MuY29tbXVuaWNhdGUoKVswXS5kZWNvZGUoInV0Zi04IiwgZXJyb3JzPSdyZXBsYWNlJykKICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnRGF0YSBmcm9tIFNTSCBjYWxsOiAlcycgJSBvdXRwdXQucnN0cmlwKCkpCiAKICAgICBvcHRpb25zID0gewpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS90ZXN0cy9jYXNlcy9sb2FkZXIvdGhyZWFkZWQvdGhyZWFkZWQucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb3JlL3Rlc3RzL2Nhc2VzL2xvYWRlci90aHJlYWRlZC90aHJlYWRlZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmU0Y2IzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS90ZXN0cy9jYXNlcy9sb2FkZXIvdGhyZWFkZWQvdGhyZWFkZWQucHkKQEAgLTAsMCArMSwxMiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKK2Zyb20gb2VxYS5jb3JlLmNhc2UgaW1wb3J0IE9FVGVzdENhc2UKKworY2xhc3MgVGhyZWFkZWRUZXN0KE9FVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3RocmVhZGVkX25vX2RlcGVuZHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShUcnVlLCBtc2c9J0hvdyBpcyB0aGlzIHBvc3NpYmxlPycpCisKK2NsYXNzIFRocmVhZGVkVGVzdDIoT0VUZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfdGhyZWFkZWRfc2FtZV9tb2R1bGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShUcnVlLCBtc2c9J0hvdyBpcyB0aGlzIHBvc3NpYmxlPycpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb3JlL3Rlc3RzL2Nhc2VzL2xvYWRlci90aHJlYWRlZC90aHJlYWRlZF9hbG9uZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvcmUvdGVzdHMvY2FzZXMvbG9hZGVyL3RocmVhZGVkL3RocmVhZGVkX2Fsb25lLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNWYzOTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb3JlL3Rlc3RzL2Nhc2VzL2xvYWRlci90aHJlYWRlZC90aHJlYWRlZF9hbG9uZS5weQpAQCAtMCwwICsxLDggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IEludGVsIENvcnBvcmF0aW9uCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCitmcm9tIG9lcWEuY29yZS5jYXNlIGltcG9ydCBPRVRlc3RDYXNlCisKK2NsYXNzIFRocmVhZGVkVGVzdEFsb25lKE9FVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3RocmVhZGVkX2Fsb25lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoVHJ1ZSwgbXNnPSdIb3cgaXMgdGhpcyBwb3NzaWJsZT8nKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS90ZXN0cy9jYXNlcy9sb2FkZXIvdGhyZWFkZWQvdGhyZWFkZWRfZGVwZW5kcy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvcmUvdGVzdHMvY2FzZXMvbG9hZGVyL3RocmVhZGVkL3RocmVhZGVkX2RlcGVuZHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMxNThkMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvcmUvdGVzdHMvY2FzZXMvbG9hZGVyL3RocmVhZGVkL3RocmVhZGVkX2RlcGVuZHMucHkKQEAgLTAsMCArMSwxMCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKK2Zyb20gb2VxYS5jb3JlLmNhc2UgaW1wb3J0IE9FVGVzdENhc2UKK2Zyb20gb2VxYS5jb3JlLmRlY29yYXRvci5kZXBlbmRzIGltcG9ydCBPRVRlc3REZXBlbmRzCisKK2NsYXNzIFRocmVhZGVkVGVzdDMoT0VUZXN0Q2FzZSk6CisgICAgQE9FVGVzdERlcGVuZHMoWyd0aHJlYWRlZC5UaHJlYWRlZFRlc3QudGVzdF90aHJlYWRlZF9ub19kZXBlbmRzJ10pCisgICAgZGVmIHRlc3RfdGhyZWFkZWRfZGVwZW5kcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFRydWUsIG1zZz0nSG93IGlzIHRoaXMgcG9zc2libGU/JykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvcmUvdGVzdHMvY2FzZXMvbG9hZGVyL3RocmVhZGVkL3RocmVhZGVkX21vZHVsZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvcmUvdGVzdHMvY2FzZXMvbG9hZGVyL3RocmVhZGVkL3RocmVhZGVkX21vZHVsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2QxN2UwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS90ZXN0cy9jYXNlcy9sb2FkZXIvdGhyZWFkZWQvdGhyZWFkZWRfbW9kdWxlLnB5CkBAIC0wLDAgKzEsMTIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IEludGVsIENvcnBvcmF0aW9uCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCitmcm9tIG9lcWEuY29yZS5jYXNlIGltcG9ydCBPRVRlc3RDYXNlCisKK2NsYXNzIFRocmVhZGVkVGVzdE1vZHVsZShPRVRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF90aHJlYWRlZF9tb2R1bGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShUcnVlLCBtc2c9J0hvdyBpcyB0aGlzIHBvc3NpYmxlPycpCisKK2NsYXNzIFRocmVhZGVkVGVzdE1vZHVsZTIoT0VUZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfdGhyZWFkZWRfbW9kdWxlMihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFRydWUsIG1zZz0nSG93IGlzIHRoaXMgcG9zc2libGU/JykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvcmUvdGVzdHMvY29tbW9uLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS90ZXN0cy9jb21tb24ucHkKaW5kZXggNTJiMThhMS4uMTkzMjMyMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS90ZXN0cy9jb21tb24ucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS90ZXN0cy9jb21tb24ucHkKQEAgLTMzLDMgKzMzLDEzIEBACiAgICAgICAgIHRjLmxvYWRUZXN0cyhzZWxmLmNhc2VzX3BhdGgsIG1vZHVsZXM9bW9kdWxlcywgdGVzdHM9dGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzPWZpbHRlcnMpCiAgICAgICAgIHJldHVybiB0YworCisgICAgZGVmIF90ZXN0TG9hZGVyVGhyZWFkZWQoc2VsZiwgZD17fSwgbW9kdWxlcz1bXSwKKyAgICAgICAgICAgIHRlc3RzPVtdLCBmaWx0ZXJzPXt9KToKKyAgICAgICAgZnJvbSBvZXFhLmNvcmUudGhyZWFkZWQgaW1wb3J0IE9FVGVzdENvbnRleHRUaHJlYWRlZAorCisgICAgICAgIHRjID0gT0VUZXN0Q29udGV4dFRocmVhZGVkKGQsIHNlbGYubG9nZ2VyKQorICAgICAgICB0Yy5sb2FkVGVzdHMoc2VsZi5jYXNlc19wYXRoLCBtb2R1bGVzPW1vZHVsZXMsIHRlc3RzPXRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgZmlsdGVycz1maWx0ZXJzKQorCisgICAgICAgIHJldHVybiB0YwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS90ZXN0cy90ZXN0X2RlY29yYXRvcnMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb3JlL3Rlc3RzL3Rlc3RfZGVjb3JhdG9ycy5weQppbmRleCBmN2QxMWU4Li5jZjk5ZTBkIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb3JlL3Rlc3RzL3Rlc3RfZGVjb3JhdG9ycy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb3JlL3Rlc3RzL3Rlc3RfZGVjb3JhdG9ycy5weQpAQCAtMTMxLDUgKzEzMSwxNyBAQAogICAgICAgICBtc2cgPSAiT0VUZXN0VGltZW91dCBkaWRuJ3QgcmVzdG9yZSBTSUdBTFJNIgogICAgICAgICBzZWxmLmFzc2VydElzKGFsYXJtX3NpZ25hbCwgc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHQUxSTSksIG1zZz1tc2cpCiAKKyAgICBkZWYgdGVzdF90aW1lb3V0X3RocmVhZChzZWxmKToKKyAgICAgICAgdGVzdHMgPSBbJ3RpbWVvdXQuVGltZW91dFRlc3QudGVzdFRpbWVvdXRQYXNzJ10KKyAgICAgICAgbXNnID0gJ0ZhaWxlZCB0byBydW4gdGVzdCB1c2luZyBPRVRlc3RUaW1lb3V0JworICAgICAgICB0YyA9IHNlbGYuX3Rlc3RMb2FkZXJUaHJlYWRlZChtb2R1bGVzPXNlbGYubW9kdWxlcywgdGVzdHM9dGVzdHMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Yy5ydW5UZXN0cygpLndhc1N1Y2Nlc3NmdWwoKSwgbXNnPW1zZykKKworICAgIGRlZiB0ZXN0X3RpbWVvdXRfdGhyZWFkZWRfZmFpbChzZWxmKToKKyAgICAgICAgdGVzdHMgPSBbJ3RpbWVvdXQuVGltZW91dFRlc3QudGVzdFRpbWVvdXRGYWlsJ10KKyAgICAgICAgbXNnID0gIk9FVGVzdFRpbWVvdXQgdGVzdCBkaWRuJ3QgdGltZW91dCBhcyBleHBlY3RlZCIKKyAgICAgICAgdGMgPSBzZWxmLl90ZXN0TG9hZGVyVGhyZWFkZWQobW9kdWxlcz1zZWxmLm1vZHVsZXMsIHRlc3RzPXRlc3RzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRjLnJ1blRlc3RzKCkud2FzU3VjY2Vzc2Z1bCgpLCBtc2c9bXNnKQorCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS90ZXN0cy90ZXN0X2xvYWRlci5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvcmUvdGVzdHMvdGVzdF9sb2FkZXIucHkKaW5kZXggYjc5YjhiYS4uZTBkOTE3ZCAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS90ZXN0cy90ZXN0X2xvYWRlci5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb3JlL3Rlc3RzL3Rlc3RfbG9hZGVyLnB5CkBAIC0xLDYgKzEsNiBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCi0jIENvcHlyaWdodCAoQykgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgogIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKIAogaW1wb3J0IG9zCkBAIC04Miw1ICs4MiwzMyBAQAogICAgICAgICBtc2cgPSAnRXhwZWN0ZWQgbW9kdWxlcyBmcm9tIHR3byBkaWZmZXJlbnQgcGF0aHMnCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlcywgZXhwZWN0ZWRfbW9kdWxlcywgbXNnPW1zZykKIAorICAgIGRlZiB0ZXN0X2xvYWRlcl90aHJlYWRlZChzZWxmKToKKyAgICAgICAgY2FzZXNfcGF0aCA9IHNlbGYuY2FzZXNfcGF0aAorCisgICAgICAgIHNlbGYuY2FzZXNfcGF0aCA9IFtvcy5wYXRoLmpvaW4oc2VsZi5jYXNlc19wYXRoLCAnbG9hZGVyJywgJ3RocmVhZGVkJyldCisKKyAgICAgICAgdGMgPSBzZWxmLl90ZXN0TG9hZGVyVGhyZWFkZWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0Yy5zdWl0ZXMpLCAzLCAiRXhwZWN0ZWQgdG8gYmUgMyBzdWl0ZXMiKQorCisgICAgICAgIGNhc2VfaWRzID0gWyd0aHJlYWRlZC5UaHJlYWRlZFRlc3QudGVzdF90aHJlYWRlZF9ub19kZXBlbmRzJywKKyAgICAgICAgICAgICAgICAndGhyZWFkZWQuVGhyZWFkZWRUZXN0Mi50ZXN0X3RocmVhZGVkX3NhbWVfbW9kdWxlJywKKyAgICAgICAgICAgICAgICAndGhyZWFkZWRfZGVwZW5kcy5UaHJlYWRlZFRlc3QzLnRlc3RfdGhyZWFkZWRfZGVwZW5kcyddCisgICAgICAgIGZvciBjYXNlIGluIHRjLnN1aXRlc1swXS5fdGVzdHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhc2UuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgY2FzZV9pZHNbdGMuc3VpdGVzWzBdLl90ZXN0cy5pbmRleChjYXNlKV0pCisKKyAgICAgICAgY2FzZV9pZHMgPSBbJ3RocmVhZGVkX2Fsb25lLlRocmVhZGVkVGVzdEFsb25lLnRlc3RfdGhyZWFkZWRfYWxvbmUnXQorICAgICAgICBmb3IgY2FzZSBpbiB0Yy5zdWl0ZXNbMV0uX3Rlc3RzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXNlLmlkKCksCisgICAgICAgICAgICAgICAgICAgIGNhc2VfaWRzW3RjLnN1aXRlc1sxXS5fdGVzdHMuaW5kZXgoY2FzZSldKQorCisgICAgICAgIGNhc2VfaWRzID0gWyd0aHJlYWRlZF9tb2R1bGUuVGhyZWFkZWRUZXN0TW9kdWxlLnRlc3RfdGhyZWFkZWRfbW9kdWxlJywKKyAgICAgICAgICAgICAgICAndGhyZWFkZWRfbW9kdWxlLlRocmVhZGVkVGVzdE1vZHVsZTIudGVzdF90aHJlYWRlZF9tb2R1bGUyJ10KKyAgICAgICAgZm9yIGNhc2UgaW4gdGMuc3VpdGVzWzJdLl90ZXN0czoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FzZS5pZCgpLAorICAgICAgICAgICAgICAgICAgICBjYXNlX2lkc1t0Yy5zdWl0ZXNbMl0uX3Rlc3RzLmluZGV4KGNhc2UpXSkKKworICAgICAgICBzZWxmLmNhc2VzX3BhdGggPSBjYXNlc19wYXRoCisKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb3JlL3RocmVhZGVkLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS90aHJlYWRlZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2FmZTAzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29yZS90aHJlYWRlZC5weQpAQCAtMCwwICsxLDI3NSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2ltcG9ydCBxdWV1ZQoraW1wb3J0IHRpbWUKKworZnJvbSB1bml0dGVzdC5zdWl0ZSBpbXBvcnQgVGVzdFN1aXRlCisKK2Zyb20gb2VxYS5jb3JlLmxvYWRlciBpbXBvcnQgT0VUZXN0TG9hZGVyCitmcm9tIG9lcWEuY29yZS5ydW5uZXIgaW1wb3J0IE9FU3RyZWFtTG9nZ2VyLCBPRVRlc3RSZXN1bHQsIE9FVGVzdFJ1bm5lcgorZnJvbSBvZXFhLmNvcmUuY29udGV4dCBpbXBvcnQgT0VUZXN0Q29udGV4dAorCitjbGFzcyBPRVRlc3RMb2FkZXJUaHJlYWRlZChPRVRlc3RMb2FkZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YywgbW9kdWxlX3BhdGhzLCBtb2R1bGVzLCB0ZXN0cywgbW9kdWxlc19yZXF1aXJlZCwKKyAgICAgICAgICAgIGZpbHRlcnMsIHByb2Nlc3NfbnVtPTAsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKE9FVGVzdExvYWRlclRocmVhZGVkLCBzZWxmKS5fX2luaXRfXyh0YywgbW9kdWxlX3BhdGhzLCBtb2R1bGVzLAorICAgICAgICAgICAgICAgIHRlc3RzLCBtb2R1bGVzX3JlcXVpcmVkLCBmaWx0ZXJzLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgc2VsZi5wcm9jZXNzX251bSA9IHByb2Nlc3NfbnVtCisKKyAgICBkZWYgZGlzY292ZXIoc2VsZik6CisgICAgICAgIHN1aXRlID0gc3VwZXIoT0VUZXN0TG9hZGVyVGhyZWFkZWQsIHNlbGYpLmRpc2NvdmVyKCkKKworICAgICAgICBpZiBzZWxmLnByb2Nlc3NfbnVtIDw9IDA6CisgICAgICAgICAgICBzZWxmLnByb2Nlc3NfbnVtID0gbWluKG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKSwKKyAgICAgICAgICAgICAgICAgICAgbGVuKHN1aXRlLl90ZXN0cykpCisKKyAgICAgICAgc3VpdGVzID0gW10KKyAgICAgICAgZm9yIF8gaW4gcmFuZ2Uoc2VsZi5wcm9jZXNzX251bSk6CisgICAgICAgICAgICBzdWl0ZXMuYXBwZW5kKHNlbGYuc3VpdGVDbGFzcygpKQorCisgICAgICAgIGRlZiBfc2VhcmNoX2Zvcl9tb2R1bGVfaWR4KHN1aXRlcywgY2FzZSk6CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgICAgICBDYXNlcyBpbiB0aGUgc2FtZSBtb2R1bGUgbmVlZHMgdG8gYmUgcnVuCisgICAgICAgICAgICAgICAgaW4gdGhlIHNhbWUgdGhyZWFkIGJlY2F1c2UgUHlVbml0IGtlZXBzIHRyYWNrCisgICAgICAgICAgICAgICAgb2Ygc2V0VXB7TW9kdWxlLCBDbGFzcyx9IGFuZCB0ZWFyRG93bntNb2R1bGUsIENsYXNzLH0uCisgICAgICAgICAgICAiIiIKKworICAgICAgICAgICAgZm9yIGlkeCBpbiByYW5nZShzZWxmLnByb2Nlc3NfbnVtKToKKyAgICAgICAgICAgICAgICBzdWl0ZSA9IHN1aXRlc1tpZHhdCisgICAgICAgICAgICAgICAgZm9yIGMgaW4gc3VpdGUuX3Rlc3RzOgorICAgICAgICAgICAgICAgICAgICBpZiBjYXNlLl9fbW9kdWxlX18gPT0gYy5fX21vZHVsZV9fOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkeAorCisgICAgICAgICAgICByZXR1cm4gLTEKKworICAgICAgICBkZWYgX3NlYXJjaF9mb3JfZGVwZW5kX2lkeChzdWl0ZXMsIGRlcGVuZHMpOgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICAgICAgRGVwZW5kZW5jeSBjYXNlcyBuZWVkcyB0byBiZSBydW4gaW4gdGhlIHNhbWUKKyAgICAgICAgICAgICAgICB0aHJlYWQsIGJlY2F1c2UgT0VRQSBmcmFtZXdvcmsgbG9vayBhdCB0aGUgc3RhdGUKKyAgICAgICAgICAgICAgICBvZiBkZXBlbmRhbnQgdGVzdCB0byBmaWd1cmUgb3V0IGlmIHNraXAgb3Igbm90LgorICAgICAgICAgICAgIiIiCisKKyAgICAgICAgICAgIGZvciBpZHggaW4gcmFuZ2Uoc2VsZi5wcm9jZXNzX251bSk6CisgICAgICAgICAgICAgICAgc3VpdGUgPSBzdWl0ZXNbaWR4XQorCisgICAgICAgICAgICAgICAgZm9yIGNhc2UgaW4gc3VpdGUuX3Rlc3RzOgorICAgICAgICAgICAgICAgICAgICBpZiBjYXNlLmlkKCkgaW4gZGVwZW5kczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpZHgKKyAgICAgICAgICAgIHJldHVybiAtMQorCisgICAgICAgIGRlZiBfZ2V0X2Jlc3RfaWR4KHN1aXRlcyk6CisgICAgICAgICAgICBzaXplcyA9IFtsZW4oc3VpdGUuX3Rlc3RzKSBmb3Igc3VpdGUgaW4gc3VpdGVzXQorICAgICAgICAgICAgcmV0dXJuIHNpemVzLmluZGV4KG1pbihzaXplcykpCisKKyAgICAgICAgZGVmIF9maWxsX3N1aXRlcyhzdWl0ZSk6CisgICAgICAgICAgICBpZHggPSAtMQorICAgICAgICAgICAgZm9yIGNhc2UgaW4gc3VpdGU6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjYXNlLCBUZXN0U3VpdGUpOgorICAgICAgICAgICAgICAgICAgICBfZmlsbF9zdWl0ZXMoY2FzZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZHggPSBfc2VhcmNoX2Zvcl9tb2R1bGVfaWR4KHN1aXRlcywgY2FzZSkKKworICAgICAgICAgICAgICAgICAgICBkZXBlbmRzID0ge30KKyAgICAgICAgICAgICAgICAgICAgaWYgJ2RlcGVuZHMnIGluIHNlbGYudGMuX3JlZ2lzdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcyA9IHNlbGYudGMuX3JlZ2lzdHJ5WydkZXBlbmRzJ10KKworICAgICAgICAgICAgICAgICAgICBpZiBpZHggPT0gLTEgYW5kIGNhc2UuaWQoKSBpbiBkZXBlbmRzOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZV9kZXBlbmRzID0gZGVwZW5kc1tjYXNlLmlkKCldIAorICAgICAgICAgICAgICAgICAgICAgICAgaWR4ID0gX3NlYXJjaF9mb3JfZGVwZW5kX2lkeChzdWl0ZXMsIGNhc2VfZGVwZW5kcykKKworICAgICAgICAgICAgICAgICAgICBpZiBpZHggPT0gLTE6CisgICAgICAgICAgICAgICAgICAgICAgICBpZHggPSBfZ2V0X2Jlc3RfaWR4KHN1aXRlcykKKworICAgICAgICAgICAgICAgICAgICBzdWl0ZXNbaWR4XS5hZGRUZXN0KGNhc2UpCisgICAgICAgIF9maWxsX3N1aXRlcyhzdWl0ZSkKKworICAgICAgICBzdWl0ZXNfdG1wID0gc3VpdGVzCisgICAgICAgIHN1aXRlcyA9IFtdCisgICAgICAgIGZvciBzdWl0ZSBpbiBzdWl0ZXNfdG1wOgorICAgICAgICAgICAgaWYgbGVuKHN1aXRlLl90ZXN0cykgPiAwOgorICAgICAgICAgICAgICAgIHN1aXRlcy5hcHBlbmQoc3VpdGUpCisKKyAgICAgICAgcmV0dXJuIHN1aXRlcworCitjbGFzcyBPRVN0cmVhbUxvZ2dlclRocmVhZGVkKE9FU3RyZWFtTG9nZ2VyKToKKyAgICBfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKyAgICBidWZmZXJzID0ge30KKworICAgIGRlZiB3cml0ZShzZWxmLCBtc2cpOgorICAgICAgICB0aWQgPSB0aHJlYWRpbmcuZ2V0X2lkZW50KCkKKworICAgICAgICBpZiBub3QgdGlkIGluIHNlbGYuYnVmZmVyczoKKyAgICAgICAgICAgIHNlbGYuYnVmZmVyc1t0aWRdID0gIiIKKworICAgICAgICBpZiBtc2c6CisgICAgICAgICAgICBzZWxmLmJ1ZmZlcnNbdGlkXSArPSBtc2cKKworICAgIGRlZiBmaW5pc2goc2VsZik6CisgICAgICAgIHRpZCA9IHRocmVhZGluZy5nZXRfaWRlbnQoKQorICAgICAgICAKKyAgICAgICAgc2VsZi5fbG9jay5hY3F1aXJlKCkKKyAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygnVEhSRUFEOiAlZCcgJSB0aWQpCisgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oJy0nICogNzApCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuYnVmZmVyc1t0aWRdLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbyhsaW5lKQorICAgICAgICBzZWxmLl9sb2NrLnJlbGVhc2UoKQorCitjbGFzcyBPRVRlc3RSZXN1bHRUaHJlYWRlZEludGVybmFsKE9FVGVzdFJlc3VsdCk6CisgICAgZGVmIF90Y19tYXBfcmVzdWx0cyhzZWxmKToKKyAgICAgICAgdGlkID0gdGhyZWFkaW5nLmdldF9pZGVudCgpCisgICAgICAgIAorICAgICAgICAjIFB5VW5pdCBnZW5lcmF0ZXMgYSByZXN1bHQgZm9yIGV2ZXJ5IHRlc3QgbW9kdWxlIHJ1biwgdGVzdAorICAgICAgICAjIGlmIHRoZSB0aHJlYWQgYWxyZWFkeSBoYXMgYW4gZW50cnkgdG8gYXZvaWQgbG9zZSB0aGUgcHJldmlvdXMKKyAgICAgICAgIyB0ZXN0IG1vZHVsZSByZXN1bHRzLgorICAgICAgICBpZiBub3QgdGlkIGluIHNlbGYudGMuX3Jlc3VsdHM6CisgICAgICAgICAgICBzZWxmLnRjLl9yZXN1bHRzW3RpZF0gPSB7fQorICAgICAgICAgICAgc2VsZi50Yy5fcmVzdWx0c1t0aWRdWydmYWlsdXJlcyddID0gc2VsZi5mYWlsdXJlcworICAgICAgICAgICAgc2VsZi50Yy5fcmVzdWx0c1t0aWRdWydlcnJvcnMnXSA9IHNlbGYuZXJyb3JzCisgICAgICAgICAgICBzZWxmLnRjLl9yZXN1bHRzW3RpZF1bJ3NraXBwZWQnXSA9IHNlbGYuc2tpcHBlZAorICAgICAgICAgICAgc2VsZi50Yy5fcmVzdWx0c1t0aWRdWydleHBlY3RlZEZhaWx1cmVzJ10gPSBzZWxmLmV4cGVjdGVkRmFpbHVyZXMKKworY2xhc3MgT0VUZXN0UmVzdWx0VGhyZWFkZWQob2JqZWN0KToKKyAgICBfcmVzdWx0cyA9IHt9CisgICAgX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGMpOgorICAgICAgICBzZWxmLnRjID0gdGMKKworICAgIGRlZiBfZmlsbF90Y19yZXN1bHRzKHNlbGYpOgorICAgICAgICB0aWRzID0gbGlzdChzZWxmLnRjLl9yZXN1bHRzLmtleXMoKSkKKyAgICAgICAgZmllbGRzID0gWydmYWlsdXJlcycsICdlcnJvcnMnLCAnc2tpcHBlZCcsICdleHBlY3RlZEZhaWx1cmVzJ10KKworICAgICAgICBmb3IgdGlkIGluIHRpZHM6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLnRjLl9yZXN1bHRzW3RpZF0KKyAgICAgICAgICAgIGZvciBmaWVsZCBpbiBmaWVsZHM6CisgICAgICAgICAgICAgICAgaWYgbm90IGZpZWxkIGluIHNlbGYudGMuX3Jlc3VsdHM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYudGMuX3Jlc3VsdHNbZmllbGRdID0gW10KKyAgICAgICAgICAgICAgICBzZWxmLnRjLl9yZXN1bHRzW2ZpZWxkXS5leHRlbmQocmVzdWx0W2ZpZWxkXSkKKworICAgIGRlZiBhZGRSZXN1bHQoc2VsZiwgcmVzdWx0LCBydW5fc3RhcnRfdGltZSwgcnVuX2VuZF90aW1lKToKKyAgICAgICAgdGlkID0gdGhyZWFkaW5nLmdldF9pZGVudCgpCisKKyAgICAgICAgc2VsZi5fbG9jay5hY3F1aXJlKCkKKyAgICAgICAgc2VsZi5fcmVzdWx0c1t0aWRdID0ge30KKyAgICAgICAgc2VsZi5fcmVzdWx0c1t0aWRdWydyZXN1bHQnXSA9IHJlc3VsdAorICAgICAgICBzZWxmLl9yZXN1bHRzW3RpZF1bJ3J1bl9zdGFydF90aW1lJ10gPSBydW5fc3RhcnRfdGltZSAKKyAgICAgICAgc2VsZi5fcmVzdWx0c1t0aWRdWydydW5fZW5kX3RpbWUnXSA9IHJ1bl9lbmRfdGltZSAKKyAgICAgICAgc2VsZi5fcmVzdWx0c1t0aWRdWydyZXN1bHQnXSA9IHJlc3VsdAorICAgICAgICBzZWxmLl9sb2NrLnJlbGVhc2UoKQorCisgICAgZGVmIHdhc1N1Y2Nlc3NmdWwoc2VsZik6CisgICAgICAgIHdhc1N1Y2Nlc3NmdWwgPSBUcnVlCisgICAgICAgIGZvciB0aWQgaW4gc2VsZi5fcmVzdWx0cy5rZXlzKCk6CisgICAgICAgICAgICB3YXNTdWNjZXNzZnVsID0gd2FzU3VjY2Vzc2Z1bCBhbmQgXAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZXN1bHRzW3RpZF1bJ3Jlc3VsdCddLndhc1N1Y2Nlc3NmdWwoKQorICAgICAgICByZXR1cm4gd2FzU3VjY2Vzc2Z1bAorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIGZvciB0aWQgaW4gc2VsZi5fcmVzdWx0cy5rZXlzKCk6CisgICAgICAgICAgICBzZWxmLl9yZXN1bHRzW3RpZF1bJ3Jlc3VsdCddLnN0b3AoKQorCisgICAgZGVmIGxvZ1N1bW1hcnkoc2VsZiwgY29tcG9uZW50LCBjb250ZXh0X21zZz0nJyk6CisgICAgICAgIGVsYXBzZWRfdGltZSA9IChzZWxmLnRjLl9ydW5fZW5kX3RpbWUgLSBzZWxmLnRjLl9ydW5fc3RhcnRfdGltZSkKKworICAgICAgICBzZWxmLnRjLmxvZ2dlci5pbmZvKCJTVU1NQVJZOiIpCisgICAgICAgIHNlbGYudGMubG9nZ2VyLmluZm8oIiVzICglcykgLSBSYW4gJWQgdGVzdHMgaW4gJS4zZnMiICUgKGNvbXBvbmVudCwKKyAgICAgICAgICAgIGNvbnRleHRfbXNnLCBsZW4oc2VsZi50Yy5fcmVnaXN0cnlbJ2Nhc2VzJ10pLCBlbGFwc2VkX3RpbWUpKQorICAgICAgICBpZiBzZWxmLndhc1N1Y2Nlc3NmdWwoKToKKyAgICAgICAgICAgIG1zZyA9ICIlcyAtIE9LIC0gQWxsIHJlcXVpcmVkIHRlc3RzIHBhc3NlZCIgJSBjb21wb25lbnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZyA9ICIlcyAtIEZBSUwgLSBSZXF1aXJlZCB0ZXN0cyBmYWlsZWQiICUgY29tcG9uZW50CisgICAgICAgIHNlbGYudGMubG9nZ2VyLmluZm8obXNnKQorCisgICAgZGVmIGxvZ0RldGFpbHMoc2VsZik6CisgICAgICAgIGlmIGxpc3Qoc2VsZi5fcmVzdWx0cyk6CisgICAgICAgICAgICB0aWQgPSBsaXN0KHNlbGYuX3Jlc3VsdHMpWzBdCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9yZXN1bHRzW3RpZF1bJ3Jlc3VsdCddCisgICAgICAgICAgICByZXN1bHQubG9nRGV0YWlscygpCisKK2NsYXNzIF9Xb3JrZXIodGhyZWFkaW5nLlRocmVhZCk6CisgICAgIiIiVGhyZWFkIGV4ZWN1dGluZyB0YXNrcyBmcm9tIGEgZ2l2ZW4gdGFza3MgcXVldWUiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGFza3MsIHJlc3VsdCwgc3RyZWFtKToKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnRhc2tzID0gdGFza3MKKworICAgICAgICBzZWxmLnJlc3VsdCA9IHJlc3VsdAorICAgICAgICBzZWxmLnN0cmVhbSA9IHN0cmVhbQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmdW5jLCBhcmdzLCBrYXJncyA9IHNlbGYudGFza3MuZ2V0KGJsb2NrPUZhbHNlKQorICAgICAgICAgICAgZXhjZXB0IHF1ZXVlLkVtcHR5OgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBydW5fc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICAgICAgcmMgPSBmdW5jKCphcmdzLCAqKmthcmdzKQorICAgICAgICAgICAgICAgIHJ1bl9lbmRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQuYWRkUmVzdWx0KHJjLCBydW5fc3RhcnRfdGltZSwgcnVuX2VuZF90aW1lKQorICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtLmZpbmlzaCgpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgcHJpbnQoZSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VsZi50YXNrcy50YXNrX2RvbmUoKQorCitjbGFzcyBfVGhyZWFkZWRQb29sOgorICAgICIiIlBvb2wgb2YgdGhyZWFkcyBjb25zdW1pbmcgdGFza3MgZnJvbSBhIHF1ZXVlIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG51bV93b3JrZXJzLCBudW1fdGFza3MsIHN0cmVhbT1Ob25lLCByZXN1bHQ9Tm9uZSk6CisgICAgICAgIHNlbGYudGFza3MgPSBxdWV1ZS5RdWV1ZShudW1fdGFza3MpCisgICAgICAgIHNlbGYud29ya2VycyA9IFtdCisKKyAgICAgICAgZm9yIF8gaW4gcmFuZ2UobnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgd29ya2VyID0gX1dvcmtlcihzZWxmLnRhc2tzLCByZXN1bHQsIHN0cmVhbSkKKyAgICAgICAgICAgIHNlbGYud29ya2Vycy5hcHBlbmQod29ya2VyKQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBmb3Igd29ya2VyIGluIHNlbGYud29ya2VyczoKKyAgICAgICAgICAgIHdvcmtlci5zdGFydCgpCisKKyAgICBkZWYgYWRkX3Rhc2soc2VsZiwgZnVuYywgKmFyZ3MsICoqa2FyZ3MpOgorICAgICAgICAiIiJBZGQgYSB0YXNrIHRvIHRoZSBxdWV1ZSIiIgorICAgICAgICBzZWxmLnRhc2tzLnB1dCgoZnVuYywgYXJncywga2FyZ3MpKQorCisgICAgZGVmIHdhaXRfY29tcGxldGlvbihzZWxmKToKKyAgICAgICAgIiIiV2FpdCBmb3IgY29tcGxldGlvbiBvZiBhbGwgdGhlIHRhc2tzIGluIHRoZSBxdWV1ZSIiIgorICAgICAgICBzZWxmLnRhc2tzLmpvaW4oKQorICAgICAgICBmb3Igd29ya2VyIGluIHNlbGYud29ya2VyczoKKyAgICAgICAgICAgIHdvcmtlci5qb2luKCkKKworY2xhc3MgT0VUZXN0UnVubmVyVGhyZWFkZWQoT0VUZXN0UnVubmVyKToKKyAgICBzdHJlYW1Mb2dnZXJDbGFzcyA9IE9FU3RyZWFtTG9nZ2VyVGhyZWFkZWQKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoT0VUZXN0UnVubmVyVGhyZWFkZWQsIHNlbGYpLl9faW5pdF9fKHRjLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYucmVzdWx0Y2xhc3MgPSBPRVRlc3RSZXN1bHRUaHJlYWRlZEludGVybmFsICMgWFhYOiBYTUwgcmVwb3J0aW5nIG92ZXJyaWRlcyBhdCBfX2luaXRfXworCisgICAgZGVmIHJ1bihzZWxmLCBzdWl0ZXMpOgorICAgICAgICByZXN1bHQgPSBPRVRlc3RSZXN1bHRUaHJlYWRlZChzZWxmLnRjKQorCisgICAgICAgIHBvb2wgPSBfVGhyZWFkZWRQb29sKGxlbihzdWl0ZXMpLCBsZW4oc3VpdGVzKSwgc3RyZWFtPXNlbGYuc3RyZWFtLAorICAgICAgICAgICAgICAgIHJlc3VsdD1yZXN1bHQpCisgICAgICAgIGZvciBzIGluIHN1aXRlczoKKyAgICAgICAgICAgIHBvb2wuYWRkX3Rhc2soc3VwZXIoT0VUZXN0UnVubmVyVGhyZWFkZWQsIHNlbGYpLnJ1biwgcykKKyAgICAgICAgcG9vbC5zdGFydCgpCisgICAgICAgIHBvb2wud2FpdF9jb21wbGV0aW9uKCkKKyAgICAgICAgcmVzdWx0Ll9maWxsX3RjX3Jlc3VsdHMoKQorCisgICAgICAgIHJldHVybiByZXN1bHQKKworY2xhc3MgT0VUZXN0Q29udGV4dFRocmVhZGVkKE9FVGVzdENvbnRleHQpOgorICAgIGxvYWRlckNsYXNzID0gT0VUZXN0TG9hZGVyVGhyZWFkZWQKKyAgICBydW5uZXJDbGFzcyA9IE9FVGVzdFJ1bm5lclRocmVhZGVkCisKKyAgICBkZWYgbG9hZFRlc3RzKHNlbGYsIG1vZHVsZV9wYXRocywgbW9kdWxlcz1bXSwgdGVzdHM9W10sCisgICAgICAgICAgICBtb2R1bGVzX21hbmlmZXN0PSIiLCBtb2R1bGVzX3JlcXVpcmVkPVtdLCBmaWx0ZXJzPXt9LCBwcm9jZXNzX251bT0wKToKKyAgICAgICAgaWYgbW9kdWxlc19tYW5pZmVzdDoKKyAgICAgICAgICAgIG1vZHVsZXMgPSBzZWxmLl9yZWFkX21vZHVsZXNfZnJvbV9tYW5pZmVzdChtb2R1bGVzX21hbmlmZXN0KQorCisgICAgICAgIHNlbGYubG9hZGVyID0gc2VsZi5sb2FkZXJDbGFzcyhzZWxmLCBtb2R1bGVfcGF0aHMsIG1vZHVsZXMsIHRlc3RzLAorICAgICAgICAgICAgICAgIG1vZHVsZXNfcmVxdWlyZWQsIGZpbHRlcnMsIHByb2Nlc3NfbnVtKQorICAgICAgICBzZWxmLnN1aXRlcyA9IHNlbGYubG9hZGVyLmRpc2NvdmVyKCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvY2FzZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvY2FzZS5weQppbmRleCBjMTQ4NWM5Li4yZjE5MGFjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2Nhc2UucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9jYXNlLnB5CkBAIC04LDEwICs4LDEwIEBACiAgICAgIyB0YXJnZXQgaW5zdGFuY2Ugc2V0IGJ5IE9FUnVudGltZVRlc3RMb2FkZXIuCiAgICAgdGFyZ2V0ID0gTm9uZQogCi0gICAgZGVmIF9vZVNldFVwKHNlbGYpOgotICAgICAgICBzdXBlcihPRVJ1bnRpbWVUZXN0Q2FzZSwgc2VsZikuX29lU2V0VXAoKQorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoT0VSdW50aW1lVGVzdENhc2UsIHNlbGYpLnNldFVwKCkKICAgICAgICAgaW5zdGFsbF9wYWNrYWdlKHNlbGYpCiAKLSAgICBkZWYgX29lVGVhckRvd24oc2VsZik6Ci0gICAgICAgIHN1cGVyKE9FUnVudGltZVRlc3RDYXNlLCBzZWxmKS5fb2VUZWFyRG93bigpCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzdXBlcihPRVJ1bnRpbWVUZXN0Q2FzZSwgc2VsZikudGVhckRvd24oKQogICAgICAgICB1bmluc3RhbGxfcGFja2FnZShzZWxmKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9jYXNlcy9fcHRlc3QucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2Nhc2VzL19wdGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFlZDlhNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2Nhc2VzL19wdGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi1pbXBvcnQgb3MKLWltcG9ydCBzaHV0aWwKLWltcG9ydCBzdWJwcm9jZXNzCi0KLWZyb20gb2VxYS5ydW50aW1lLmNhc2UgaW1wb3J0IE9FUnVudGltZVRlc3RDYXNlCi1mcm9tIG9lcWEuY29yZS5kZWNvcmF0b3IuZGVwZW5kcyBpbXBvcnQgT0VUZXN0RGVwZW5kcwotZnJvbSBvZXFhLmNvcmUuZGVjb3JhdG9yLm9laWQgaW1wb3J0IE9FVGVzdElECi1mcm9tIG9lcWEuY29yZS5kZWNvcmF0b3IuZGF0YSBpbXBvcnQgc2tpcElmTm90RGF0YVZhciwgc2tpcElmTm90RmVhdHVyZQotZnJvbSBvZXFhLnJ1bnRpbWUuZGVjb3JhdG9yLnBhY2thZ2UgaW1wb3J0IE9FSGFzUGFja2FnZQotCi1mcm9tIG9lcWEucnVudGltZS5jYXNlcy5kbmYgaW1wb3J0IERuZlRlc3QKLWZyb20gb2VxYS51dGlscy5sb2dwYXJzZXIgaW1wb3J0ICoKLWZyb20gb2VxYS51dGlscy5odHRwc2VydmVyIGltcG9ydCBIVFRQU2VydmljZQotCi1jbGFzcyBQdGVzdFJ1bm5lclRlc3QoRG5mVGVzdCk6Ci0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgotICAgICAgICBycG1fZGVwbG95ID0gb3MucGF0aC5qb2luKGNscy50Yy50ZFsnREVQTE9ZX0RJUiddLCAncnBtJykKLSAgICAgICAgY2xzLnJlcG9fc2VydmVyID0gSFRUUFNlcnZpY2UocnBtX2RlcGxveSwgY2xzLnRjLnRhcmdldC5zZXJ2ZXJfaXApCi0gICAgICAgIGNscy5yZXBvX3NlcnZlci5zdGFydCgpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgotICAgICAgICBjbHMucmVwb19zZXJ2ZXIuc3RvcCgpCi0KLSAgICAjIGEgcHRlc3QgbG9nIHBhcnNlcgotICAgIGRlZiBwYXJzZV9wdGVzdChzZWxmLCBsb2dmaWxlKToKLSAgICAgICAgcGFyc2VyID0gTHBhcnNlcih0ZXN0XzBfcGFzc19yZWdleD0iXlBBU1M6KC4rKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF8wX2ZhaWxfcmVnZXg9Il5GQUlMOiguKykiLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25fMF9iZWdpbl9yZWdleD0iXkJFR0lOOiAuKi8oLispL3B0ZXN0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uXzBfZW5kX3JlZ2V4PSJeRU5EOiAuKi8oLispL3B0ZXN0IikKLSAgICAgICAgcGFyc2VyLmluaXQoKQotICAgICAgICByZXN1bHQgPSBSZXN1bHQoKQotCi0gICAgICAgIHdpdGggb3Blbihsb2dmaWxlLCBlcnJvcnM9J3JlcGxhY2UnKSBhcyBmOgotICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKLSAgICAgICAgICAgICAgICByZXN1bHRfdHVwbGUgPSBwYXJzZXIucGFyc2VfbGluZShsaW5lKQotICAgICAgICAgICAgICAgIGlmIG5vdCByZXN1bHRfdHVwbGU6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgcmVzdWx0X3R1cGxlID0gbGluZV90eXBlLCBjYXRlZ29yeSwgc3RhdHVzLCBuYW1lID0gcGFyc2VyLnBhcnNlX2xpbmUobGluZSkKLQotICAgICAgICAgICAgICAgIGlmIGxpbmVfdHlwZSA9PSAnc2VjdGlvbicgYW5kIHN0YXR1cyA9PSAnYmVnaW4nOgotICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3NlY3Rpb24gPSBuYW1lCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgICAgICBpZiBsaW5lX3R5cGUgPT0gJ3NlY3Rpb24nIGFuZCBzdGF0dXMgPT0gJ2VuZCc6Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfc2VjdGlvbiA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAgICAgIGlmIGxpbmVfdHlwZSA9PSAndGVzdCcgYW5kIHN0YXR1cyA9PSAncGFzcyc6Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdG9yZShjdXJyZW50X3NlY3Rpb24sIG5hbWUsIHN0YXR1cykKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAgICAgIGlmIGxpbmVfdHlwZSA9PSAndGVzdCcgYW5kIHN0YXR1cyA9PSAnZmFpbCc6Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdG9yZShjdXJyZW50X3NlY3Rpb24sIG5hbWUsIHN0YXR1cykKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICByZXN1bHQuc29ydF90ZXN0cygpCi0gICAgICAgIHJldHVybiByZXN1bHQKLQotICAgIGRlZiBfaW5zdGFsbF9wdGVzdF9wYWNrYWdlcyhzZWxmKToKLSAgICAgICAgIyBHZXQgcHRlc3QgcGFja2FnZXMgdGhhdCBjYW4gYmUgaW5zdGFsbGVkIGluIHRoZSBpbWFnZS4KLSAgICAgICAgcGFja2FnZXNfZGlyID0gb3MucGF0aC5qb2luKHNlbGYudGMudGRbJ0RFUExPWV9ESVInXSwgJ3JwbScpCi0gICAgICAgIHB0ZXN0X3BrZ3MgPSBbcGtnWzpwa2cuZmluZCgnLXB0ZXN0JykrNl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIF8sIF8sIGZpbGVuYW1lcyBpbiBvcy53YWxrKHBhY2thZ2VzX2RpcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiBmaWxlbmFtZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ3B0ZXN0JyBpbiBwa2cKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHBrZ1s6cGtnLmZpbmQoJy1wdGVzdCcpXSBpbiBzZWxmLnRjLmltYWdlX3BhY2thZ2VzXQotCi0gICAgICAgIHJlcG9fdXJsID0gJ2h0dHA6Ly8lczolcycgJSAoc2VsZi50YXJnZXQuc2VydmVyX2lwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVwb19zZXJ2ZXIucG9ydCkKLSAgICAgICAgZG5mX29wdGlvbnMgPSAoJy0tcmVwb2Zyb21wYXRoPW9lLXB0ZXN0LXJlcG8sJXMgJwotICAgICAgICAgICAgICAgICAgICAgICAnLS1ub2dwZ2NoZWNrICcKLSAgICAgICAgICAgICAgICAgICAgICAgJ2luc3RhbGwgLXknICUgcmVwb191cmwpCi0gICAgICAgIHNlbGYuZG5mKCclcyAlcyBwdGVzdC1ydW5uZXInICUgKGRuZl9vcHRpb25zLCAnICcuam9pbihwdGVzdF9wa2dzKSkpCi0KLSAgICBAc2tpcElmTm90RmVhdHVyZSgncGFja2FnZS1tYW5hZ2VtZW50JywKLSAgICAgICAgICAgICAgICAgICAgICAnVGVzdCByZXF1aXJlcyBwYWNrYWdlLW1hbmFnZW1lbnQgdG8gYmUgaW4gRElTVFJPX0ZFQVRVUkVTJykKLSAgICBAc2tpcElmTm90RmVhdHVyZSgncHRlc3QnLAotICAgICAgICAgICAgICAgICAgICAgICdUZXN0IHJlcXVpcmVzIHBhY2thZ2UtbWFuYWdlbWVudCB0byBiZSBpbiBESVNUUk9fRkVBVFVSRVMnKQotICAgIEBza2lwSWZOb3REYXRhVmFyKCdJTUFHRV9QS0dUWVBFJywgJ3JwbScsCi0gICAgICAgICAgICAgICAgICAgICAgJ1JQTSBpcyBub3QgdGhlIHByaW1hcnkgcGFja2FnZSBtYW5hZ2VyJykKLSAgICBAT0VIYXNQYWNrYWdlKFsnZG5mJ10pCi0gICAgQE9FVGVzdERlcGVuZHMoWydzc2guU1NIVGVzdC50ZXN0X3NzaCddKQotICAgIGRlZiB0ZXN0X3B0ZXN0cnVubmVyKHNlbGYpOgotICAgICAgICBzZWxmLnB0ZXN0X2xvZyA9IG9zLnBhdGguam9pbihzZWxmLnRjLnRkWydURVNUX0xPR19ESVInXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B0ZXN0LSVzLmxvZycgJSBzZWxmLnRjLnRkWydEQVRFVElNRSddKQotICAgICAgICBzZWxmLl9pbnN0YWxsX3B0ZXN0X3BhY2thZ2VzKCkKLQotICAgICAgICAocnVubmVyc3RhdHVzLCByZXN1bHQpID0gc2VsZi50YXJnZXQucnVuKCcvdXNyL2Jpbi9wdGVzdC1ydW5uZXIgPiAvdG1wL3B0ZXN0LmxvZyAyPiYxJywgMCkKLSAgICAgICAgI2V4aXQgY29kZSBpcyAhPTAgZXZlbiBpZiBwdGVzdC1ydW5uZXIgZXhlY3V0ZXMgYmVjYXVzZSBzb21lIHB0ZXN0IHRlc3RzIGZhaWwuCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShydW5uZXJzdGF0dXMgIT0gMTI3LCBtc2c9IkNhbm5vdCBleGVjdXRlIHB0ZXN0LXJ1bm5lciEiKQotICAgICAgICBzZWxmLnRhcmdldC5jb3B5RnJvbSgnL3RtcC9wdGVzdC5sb2cnLCBzZWxmLnB0ZXN0X2xvZykKLSAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNlbGYucHRlc3RfbG9nLCAicHRlc3QubG9nIikKLQotICAgICAgICByZXN1bHQgPSBzZWxmLnBhcnNlX3B0ZXN0KCJwdGVzdC5sb2ciKQotICAgICAgICBsb2dfcmVzdWx0c190b19sb2NhdGlvbiA9ICIuL3Jlc3VsdHMiCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGxvZ19yZXN1bHRzX3RvX2xvY2F0aW9uKToKLSAgICAgICAgICAgIHNodXRpbC5ybXRyZWUobG9nX3Jlc3VsdHNfdG9fbG9jYXRpb24pCi0gICAgICAgIG9zLm1ha2VkaXJzKGxvZ19yZXN1bHRzX3RvX2xvY2F0aW9uKQotCi0gICAgICAgIHJlc3VsdC5sb2dfYXNfZmlsZXMobG9nX3Jlc3VsdHNfdG9fbG9jYXRpb24sIHRlc3Rfc3RhdHVzID0gWydwYXNzJywnZmFpbCddKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9jYXNlcy9idWlsZGNwaW8ucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2Nhc2VzL2J1aWxkY3Bpby5weQppbmRleCA1OWVkYzljLi43OWIyMmQwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2Nhc2VzL2J1aWxkY3Bpby5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2Nhc2VzL2J1aWxkY3Bpby5weQpAQCAtOSw4ICs5LDcgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBzZXRVcENsYXNzKGNscyk6Ci0gICAgICAgIHVyaSA9ICdodHRwczovL2Z0cC5nbnUub3JnL2dudS9jcGlvJwotICAgICAgICB1cmkgPSAnJXMvY3Bpby0yLjEyLnRhci5iejInICUgdXJpCisgICAgICAgIHVyaSA9ICdodHRwczovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2NwaW8tMi4xMi50YXIuZ3onCiAgICAgICAgIGNscy5wcm9qZWN0ID0gVGFyZ2V0QnVpbGRQcm9qZWN0KGNscy50Yy50YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGxfZGlyID0gY2xzLnRjLnRkWydETF9ESVInXSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvY2FzZXMvcGFyc2Vsb2dzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9jYXNlcy9wYXJzZWxvZ3MucHkKaW5kZXggNmU5Mjk0Ni4uMWYzNmM2MSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9jYXNlcy9wYXJzZWxvZ3MucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9jYXNlcy9wYXJzZWxvZ3MucHkKQEAgLTg2LDkgKzg2LDExIEBACiAgICAgJ3FlbXVtaXBzJyA6IFsKICAgICAgICAgJ0ZhaWxlZCB0byBsb2FkIG1vZHVsZSAiZ2x4IicsCiAgICAgICAgICdwY2kgMDAwMDowMDowMC4wOiBbRmlybXdhcmUgQnVnXTogcmVnIDB4Li46IGludmFsaWQgQkFSIChjYW5cJ3Qgc2l6ZSknLAorICAgICAgICAnY2FjaGVpbmZvOiBGYWlsZWQgdG8gZmluZCBjcHUwIGRldmljZSBub2RlJywKICAgICAgICAgXSArIGNvbW1vbl9lcnJvcnMsCiAgICAgJ3FlbXVtaXBzNjQnIDogWwogICAgICAgICAncGNpIDAwMDA6MDA6MDAuMDogW0Zpcm13YXJlIEJ1Z106IHJlZyAweC4uOiBpbnZhbGlkIEJBUiAoY2FuXCd0IHNpemUpJywKKyAgICAgICAgJ2NhY2hlaW5mbzogRmFpbGVkIHRvIGZpbmQgY3B1MCBkZXZpY2Ugbm9kZScsCiAgICAgICAgICBdICsgY29tbW9uX2Vycm9ycywKICAgICAncWVtdXBwYycgOiBbCiAgICAgICAgICdQQ0kgMDAwMDowMCBDYW5ub3QgcmVzZXJ2ZSBMZWdhY3kgSU8gW2lvICAweDAwMDAtMHgwZmZmXScsCkBAIC0xNTEsNiArMTUzLDggQEAKICAgICAgICAgJ2ZhaWxlZCB0byByZWFkIG91dCB0aGVybWFsIHpvbmUnLAogICAgICAgICAnQmx1ZXRvb3RoOiBoY2kwOiBTZXR0aW5nIEludGVsIGV2ZW50IG1hc2sgZmFpbGVkJywKICAgICAgICAgJ3R0eVMyIC0gZmFpbGVkIHRvIHJlcXVlc3QgRE1BJywKKyAgICAgICAgJ0JsdWV0b290aDogaGNpMDogRmFpbGVkIHRvIHNlbmQgZmlybXdhcmUgZGF0YSAoLTM4KScsCisgICAgICAgICdhdGtiZCBzZXJpbzA6IEZhaWxlZCB0byBlbmFibGUga2V5Ym9hcmQgb24gaXNhMDA2MC9zZXJpbzAnLAogICAgICAgICBdICsgeDg2X2NvbW1vbiwKICAgICAnY3Jvd25iYXknIDogeDg2X2NvbW1vbiwKICAgICAnZ2VuZXJpY3g4NicgOiB4ODZfY29tbW9uLApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9jYXNlcy9wdGVzdC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvY2FzZXMvcHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM4YzAzOAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvY2FzZXMvcHRlc3QucHkKQEAgLTAsMCArMSw4MiBAQAorZnJvbSBvZXFhLnJ1bnRpbWUuY2FzZSBpbXBvcnQgT0VSdW50aW1lVGVzdENhc2UKK2Zyb20gb2VxYS5jb3JlLmRlY29yYXRvci5kZXBlbmRzIGltcG9ydCBPRVRlc3REZXBlbmRzCitmcm9tIG9lcWEuY29yZS5kZWNvcmF0b3Iub2VpZCBpbXBvcnQgT0VUZXN0SUQKK2Zyb20gb2VxYS5jb3JlLmRlY29yYXRvci5kYXRhIGltcG9ydCBza2lwSWZOb3RGZWF0dXJlCitmcm9tIG9lcWEudXRpbHMubG9ncGFyc2VyIGltcG9ydCBMcGFyc2VyLCBSZXN1bHQKKworY2xhc3MgUHRlc3RSdW5uZXJUZXN0KE9FUnVudGltZVRlc3RDYXNlKToKKworICAgICMgYSBwdGVzdCBsb2cgcGFyc2VyCisgICAgZGVmIHBhcnNlX3B0ZXN0KHNlbGYsIGxvZ2ZpbGUpOgorICAgICAgICBwYXJzZXIgPSBMcGFyc2VyKHRlc3RfMF9wYXNzX3JlZ2V4PSJeUEFTUzooLispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0XzBfZmFpbF9yZWdleD0iXkZBSUw6KC4rKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF8wX3NraXBfcmVnZXg9Il5TS0lQOiguKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25fMF9iZWdpbl9yZWdleD0iXkJFR0lOOiAuKi8oLispL3B0ZXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uXzBfZW5kX3JlZ2V4PSJeRU5EOiAuKi8oLispL3B0ZXN0IikKKyAgICAgICAgcGFyc2VyLmluaXQoKQorICAgICAgICByZXN1bHQgPSBSZXN1bHQoKQorCisgICAgICAgIHdpdGggb3Blbihsb2dmaWxlLCBlcnJvcnM9J3JlcGxhY2UnKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICByZXN1bHRfdHVwbGUgPSBwYXJzZXIucGFyc2VfbGluZShsaW5lKQorICAgICAgICAgICAgICAgIGlmIG5vdCByZXN1bHRfdHVwbGU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcmVzdWx0X3R1cGxlID0gbGluZV90eXBlLCBjYXRlZ29yeSwgc3RhdHVzLCBuYW1lID0gcGFyc2VyLnBhcnNlX2xpbmUobGluZSkKKworICAgICAgICAgICAgICAgIGlmIGxpbmVfdHlwZSA9PSAnc2VjdGlvbicgYW5kIHN0YXR1cyA9PSAnYmVnaW4nOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3NlY3Rpb24gPSBuYW1lCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBsaW5lX3R5cGUgPT0gJ3NlY3Rpb24nIGFuZCBzdGF0dXMgPT0gJ2VuZCc6CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfc2VjdGlvbiA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIGxpbmVfdHlwZSA9PSAndGVzdCcgYW5kIHN0YXR1cyA9PSAncGFzcyc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdG9yZShjdXJyZW50X3NlY3Rpb24sIG5hbWUsIHN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIGxpbmVfdHlwZSA9PSAndGVzdCcgYW5kIHN0YXR1cyA9PSAnZmFpbCc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdG9yZShjdXJyZW50X3NlY3Rpb24sIG5hbWUsIHN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIGxpbmVfdHlwZSA9PSAndGVzdCcgYW5kIHN0YXR1cyA9PSAnc2tpcCc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdG9yZShjdXJyZW50X3NlY3Rpb24sIG5hbWUsIHN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICByZXN1bHQuc29ydF90ZXN0cygpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIEBPRVRlc3RJRCgxNjAwKQorICAgIEBza2lwSWZOb3RGZWF0dXJlKCdwdGVzdCcsICdUZXN0IHJlcXVpcmVzIHB0ZXN0IHRvIGJlIGluIERJU1RST19GRUFUVVJFUycpCisgICAgQHNraXBJZk5vdEZlYXR1cmUoJ3B0ZXN0LXBrZ3MnLCAnVGVzdCByZXF1aXJlcyBwdGVzdC1wa2dzIHRvIGJlIGluIElNQUdFX0ZFQVRVUkVTJykKKyAgICBAT0VUZXN0RGVwZW5kcyhbJ3NzaC5TU0hUZXN0LnRlc3Rfc3NoJ10pCisgICAgZGVmIHRlc3RfcHRlc3RydW5uZXIoc2VsZik6CisgICAgICAgIGltcG9ydCBkYXRldGltZQorCisgICAgICAgIHRlc3RfbG9nX2RpciA9IHNlbGYudGQuZ2V0KCdURVNUX0xPR19ESVInLCAnJykKKyAgICAgICAgIyBUaGUgVEVTVF9MT0dfRElSIG1heWJlIE5VTEwgd2hlbiB0ZXN0aW1hZ2UgaXMgYWRkZWQgYWZ0ZXIKKyAgICAgICAgIyB0ZXN0ZGF0YS5qc29uIGlzIGdlbmVyYXRlZC4KKyAgICAgICAgaWYgbm90IHRlc3RfbG9nX2RpcjoKKyAgICAgICAgICAgIHRlc3RfbG9nX2RpciA9IG9zLnBhdGguam9pbihzZWxmLnRkLmdldCgnV09SS0RJUicsICcnKSwgJ3Rlc3RpbWFnZScpCisgICAgICAgICMgRG9uJ3QgdXNlIHNlbGYudGQuZ2V0KCdEQVRFVElNRScpLCBpdCdzIGZyb20gdGVzdGRhdGEuanNvbiwgbm90CisgICAgICAgICMgdXAtdG8tZGF0ZSwgYW5kIG1heSBjYXVzZSAiRmlsZSBleGlzdHMiIHdoZW4gcmUtcmV1bi4KKyAgICAgICAgZGF0ZXRpbWUgPSBkYXRldGltZS5kYXRldGltZS5ub3coKS5zdHJmdGltZSgnJVklbSVkJUglTSVTJykKKyAgICAgICAgcHRlc3RfbG9nX2Rpcl9saW5rID0gb3MucGF0aC5qb2luKHRlc3RfbG9nX2RpciwgJ3B0ZXN0X2xvZycpCisgICAgICAgIHB0ZXN0X2xvZ19kaXIgPSAnJXMuJXMnICUgKHB0ZXN0X2xvZ19kaXJfbGluaywgZGF0ZXRpbWUpCisgICAgICAgIHB0ZXN0X3J1bm5lcl9sb2cgPSBvcy5wYXRoLmpvaW4ocHRlc3RfbG9nX2RpciwgJ3B0ZXN0LXJ1bm5lci5sb2cnKQorCisgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc2VsZi50YXJnZXQucnVuKCdwdGVzdC1ydW5uZXInLCAwKQorICAgICAgICBvcy5tYWtlZGlycyhwdGVzdF9sb2dfZGlyKQorICAgICAgICB3aXRoIG9wZW4ocHRlc3RfcnVubmVyX2xvZywgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShvdXRwdXQpCisKKyAgICAgICAgIyBzdGF0dXMgIT0gMCBpcyBPSyBzaW5jZSBzb21lIHB0ZXN0IHRlc3RzIG1heSBmYWlsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGF0dXMgIT0gMTI3LCBtc2c9IkNhbm5vdCBleGVjdXRlIHB0ZXN0LXJ1bm5lciEiKQorCisgICAgICAgICMgUGFyc2UgYW5kIHNhdmUgcmVzdWx0cworICAgICAgICBwYXJzZV9yZXN1bHQgPSBzZWxmLnBhcnNlX3B0ZXN0KHB0ZXN0X3J1bm5lcl9sb2cpCisgICAgICAgIHBhcnNlX3Jlc3VsdC5sb2dfYXNfZmlsZXMocHRlc3RfbG9nX2RpciwgdGVzdF9zdGF0dXMgPSBbJ3Bhc3MnLCdmYWlsJywgJ3NraXAnXSkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocHRlc3RfbG9nX2Rpcl9saW5rKToKKyAgICAgICAgICAgICMgUmVtb3ZlIHRoZSBvbGQgbGluayB0byBjcmVhdGUgYSBuZXcgb25lCisgICAgICAgICAgICBvcy5yZW1vdmUocHRlc3RfbG9nX2Rpcl9saW5rKQorICAgICAgICBvcy5zeW1saW5rKG9zLnBhdGguYmFzZW5hbWUocHRlc3RfbG9nX2RpciksIHB0ZXN0X2xvZ19kaXJfbGluaykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvY29udGV4dC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvY29udGV4dC5weQppbmRleCBjNGNkNzZjLi4wMjk0MDAzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2NvbnRleHQucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9jb250ZXh0LnB5CkBAIC05Miw2ICs5MiwxMiBAQAogICAgIGRlZiBnZXRUYXJnZXQodGFyZ2V0X3R5cGUsIGxvZ2dlciwgdGFyZ2V0X2lwLCBzZXJ2ZXJfaXAsICoqa3dhcmdzKToKICAgICAgICAgdGFyZ2V0ID0gTm9uZQogCisgICAgICAgIGlmIHRhcmdldF9pcDoKKyAgICAgICAgICAgIHRhcmdldF9pcF9wb3J0ID0gdGFyZ2V0X2lwLnNwbGl0KCc6JykKKyAgICAgICAgICAgIGlmIGxlbih0YXJnZXRfaXBfcG9ydCkgPT0gMjoKKyAgICAgICAgICAgICAgICB0YXJnZXRfaXAgPSB0YXJnZXRfaXBfcG9ydFswXQorICAgICAgICAgICAgICAgIGt3YXJnc1sncG9ydCddID0gdGFyZ2V0X2lwX3BvcnRbMV0KKwogICAgICAgICBpZiB0YXJnZXRfdHlwZSA9PSAnc2ltcGxlcmVtb3RlJzoKICAgICAgICAgICAgIHRhcmdldCA9IE9FU1NIVGFyZ2V0KGxvZ2dlciwgdGFyZ2V0X2lwLCBzZXJ2ZXJfaXAsICoqa3dhcmdzKQogICAgICAgICBlbGlmIHRhcmdldF90eXBlID09ICdxZW11JzoKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nkay9jYXNlcy9idWlsZGdhbGN1bGF0b3IucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvY2FzZXMvYnVpbGRnYWxjdWxhdG9yLnB5CmluZGV4IDQyZThkZGIuLjc4MGFmY2MgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nkay9jYXNlcy9idWlsZGdhbGN1bGF0b3IucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL2Nhc2VzL2J1aWxkZ2FsY3VsYXRvci5weQpAQCAtOCw3ICs4LDcgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgotICAgICAgICBpZiBub3QgKHNlbGYudGMuaGFzVGFyZ2V0UGFja2FnZSgiZ3RrKzMiKSBvclwKKyAgICAgICAgaWYgbm90IChzZWxmLnRjLmhhc1RhcmdldFBhY2thZ2UoImd0a1wrMyIpIG9yXAogICAgICAgICAgICAgICAgIHNlbGYudGMuaGFzVGFyZ2V0UGFja2FnZSgibGliZ3RrLTMuMCIpKToKICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJHYWxjdWxhdG9yVGVzdCBjbGFzczogU0RLIGRvbid0IHN1cHBvcnQgZ3RrKzMiKQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvY2FzZXMvYnVpbGRsemlwLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL2Nhc2VzL2J1aWxkbHppcC5weQppbmRleCAyYTUzYjc4Li4zYTg5Y2U4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvY2FzZXMvYnVpbGRsemlwLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nkay9jYXNlcy9idWlsZGx6aXAucHkKQEAgLTE3LDcgKzE3LDggQEAKIAogICAgICAgICBtYWNoaW5lID0gc2VsZi50ZC5nZXQoIk1BQ0hJTkUiKQogCi0gICAgICAgIGlmIG5vdCBzZWxmLnRjLmhhc0hvc3RQYWNrYWdlKCJwYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4tJXMiICUgbWFjaGluZSk6CisgICAgICAgIGlmIG5vdCAoc2VsZi50Yy5oYXNUYXJnZXRQYWNrYWdlKCJwYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4tJXMiICUgbWFjaGluZSkgb3IKKyAgICAgICAgICAgICAgICBzZWxmLnRjLmhhc1RhcmdldFBhY2thZ2UoImdjYyIpKToKICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJTREsgZG9lc24ndCBjb250YWluIGEgY3Jvc3MtY2FuYWRpYW4gdG9vbGNoYWluIikKIAogICAgIGRlZiB0ZXN0X2x6aXAoc2VsZik6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvY2FzZXMvZ2NjLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL2Nhc2VzL2djYy5weQppbmRleCA3NGFkMmEyLi5kMTFmNGI2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvY2FzZXMvZ2NjLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nkay9jYXNlcy9nY2MucHkKQEAgLTE4LDcgKzE4LDggQEAKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgbWFjaGluZSA9IHNlbGYudGQuZ2V0KCJNQUNISU5FIikKLSAgICAgICAgaWYgbm90IHNlbGYudGMuaGFzSG9zdFBhY2thZ2UoInBhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi0lcyIgJSBtYWNoaW5lKToKKyAgICAgICAgaWYgbm90IChzZWxmLnRjLmhhc1RhcmdldFBhY2thZ2UoInBhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi0lcyIgJSBtYWNoaW5lKSBvcgorICAgICAgICAgICAgICAgIHNlbGYudGMuaGFzVGFyZ2V0UGFja2FnZSgiZ2NjIikpOgogICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIkdjY0NvbXBpbGVUZXN0IGNsYXNzOiBTREsgZG9lc24ndCBjb250YWluIGEgY3Jvc3MtY2FuYWRpYW4gdG9vbGNoYWluIikKIAogICAgIGRlZiB0ZXN0X2djY19jb21waWxlKHNlbGYpOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL2Nhc2VzL3BlcmwucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvY2FzZXMvcGVybC5weQppbmRleCBlMWJkZWQyLi44MDg1Njc4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvY2FzZXMvcGVybC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvY2FzZXMvcGVybC5weQpAQCAtOCw3ICs4LDggQEAKIGNsYXNzIFBlcmxUZXN0KE9FU0RLVGVzdENhc2UpOgogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi50Yy5oYXNIb3N0UGFja2FnZSgibmF0aXZlc2RrLXBlcmwiKToKKyAgICAgICAgaWYgbm90IChzZWxmLnRjLmhhc0hvc3RQYWNrYWdlKCJuYXRpdmVzZGstcGVybCIpIG9yCisgICAgICAgICAgICAgICAgc2VsZi50Yy5oYXNIb3N0UGFja2FnZSgicGVybC1uYXRpdmUiKSk6CiAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiTm8gcGVybCBwYWNrYWdlIGluIHRoZSBTREsiKQogCiAgICAgICAgIGZvciBmIGluIFsndGVzdC5wbCddOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL2Nhc2VzL3B5dGhvbi5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nkay9jYXNlcy9weXRob24ucHkKaW5kZXggOTRhMjk2Zi4uNzJkZmNjNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL2Nhc2VzL3B5dGhvbi5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvY2FzZXMvcHl0aG9uLnB5CkBAIC04LDcgKzgsOCBAQAogY2xhc3MgUHl0aG9uVGVzdChPRVNES1Rlc3RDYXNlKToKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYudGMuaGFzSG9zdFBhY2thZ2UoIm5hdGl2ZXNkay1weXRob24iKToKKyAgICAgICAgaWYgbm90IChzZWxmLnRjLmhhc0hvc3RQYWNrYWdlKCJuYXRpdmVzZGstcHl0aG9uIikgb3IKKyAgICAgICAgICAgICAgICBzZWxmLnRjLmhhc0hvc3RQYWNrYWdlKCJweXRob24tbmF0aXZlIikpOgogICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIk5vIHB5dGhvbiBwYWNrYWdlIGluIHRoZSBTREsiKQogCiAgICAgICAgIGZvciBmIGluIFsndGVzdC5weSddOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL2NvbnRleHQucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvY29udGV4dC5weQppbmRleCAwMTg5ZWQ4Li5iM2Q3Yzc1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvY29udGV4dC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvY29udGV4dC5weQpAQCAtNiw5ICs2LDEwIEBACiBpbXBvcnQgZ2xvYgogaW1wb3J0IHJlCiAKLWZyb20gb2VxYS5jb3JlLmNvbnRleHQgaW1wb3J0IE9FVGVzdENvbnRleHQsIE9FVGVzdENvbnRleHRFeGVjdXRvcgorZnJvbSBvZXFhLmNvcmUuY29udGV4dCBpbXBvcnQgT0VUZXN0Q29udGV4dEV4ZWN1dG9yCitmcm9tIG9lcWEuY29yZS50aHJlYWRlZCBpbXBvcnQgT0VUZXN0Q29udGV4dFRocmVhZGVkCiAKLWNsYXNzIE9FU0RLVGVzdENvbnRleHQoT0VUZXN0Q29udGV4dCk6CitjbGFzcyBPRVNES1Rlc3RDb250ZXh0KE9FVGVzdENvbnRleHRUaHJlYWRlZCk6CiAgICAgc2RrX2ZpbGVzX2RpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSksICJmaWxlcyIpCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgdGQ9Tm9uZSwgbG9nZ2VyPU5vbmUsIHNka19kaXI9Tm9uZSwgc2RrX2Vudj1Ob25lLApAQCAtNDQsOCArNDUsNiBAQAogICAgIGRlZmF1bHRfdGVzdF9kYXRhID0gTm9uZQogCiAgICAgZGVmIHJlZ2lzdGVyX2NvbW1hbmRzKHNlbGYsIGxvZ2dlciwgc3VicGFyc2Vycyk6Ci0gICAgICAgIGltcG9ydCBhcmdwYXJzZV9vZQotCiAgICAgICAgIHN1cGVyKE9FU0RLVGVzdENvbnRleHRFeGVjdXRvciwgc2VsZikucmVnaXN0ZXJfY29tbWFuZHMobG9nZ2VyLCBzdWJwYXJzZXJzKQogCiAgICAgICAgIHNka19ncm91cCA9IHNlbGYucGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnc2RrIG9wdGlvbnMnKQpAQCAtMTA5LDYgKzEwOCw4IEBACiAgICAgICAgICAgICBsb2coZW52KQogCiAgICAgZGVmIHJ1bihzZWxmLCBsb2dnZXIsIGFyZ3MpOgorICAgICAgICBpbXBvcnQgYXJncGFyc2Vfb2UKKwogICAgICAgICBpZiBub3QgYXJncy5zZGtfZGlyOgogICAgICAgICAgICAgcmFpc2UgYXJncGFyc2Vfb2UuQXJndW1lbnRVc2FnZUVycm9yKCJObyBTREsgZGlyZWN0b3J5ICJcCiAgICAgICAgICAgICAgICAgICAgInNwZWNpZmllZCBwbGVhc2UgZG8sIC0tc2RrLWRpciBTREtfRElSIiwgc2VsZi5uYW1lKQpAQCAtMTI4LDYgKzEyOSw2IEBACiAgICAgICAgICAgICAgICAgICAgImVudmlyb25tZW50ICglcykgc3BlY2lmaWVkIiAlIGFyZ3Muc2RrX2Vudiwgc2VsZi5uYW1lKQogCiAgICAgICAgIHNlbGYuc2RrX2VudiA9IHNka19lbnZzW2FyZ3Muc2RrX2Vudl0KLSAgICAgICAgc3VwZXIoT0VTREtUZXN0Q29udGV4dEV4ZWN1dG9yLCBzZWxmKS5ydW4obG9nZ2VyLCBhcmdzKQorICAgICAgICByZXR1cm4gc3VwZXIoT0VTREtUZXN0Q29udGV4dEV4ZWN1dG9yLCBzZWxmKS5ydW4obG9nZ2VyLCBhcmdzKQogCiBfZXhlY3V0b3JfY2xhc3MgPSBPRVNES1Rlc3RDb250ZXh0RXhlY3V0b3IKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nka2V4dC9jYXNlcy9kZXZ0b29sLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrZXh0L2Nhc2VzL2RldnRvb2wucHkKaW5kZXggYTAxYmMwYi4uZWE5MDUxNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrZXh0L2Nhc2VzL2RldnRvb2wucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrZXh0L2Nhc2VzL2RldnRvb2wucHkKQEAgLTEsMTIgKzEsMTQgQEAKICMgQ29weXJpZ2h0IChDKSAyMDE2IEludGVsIENvcnBvcmF0aW9uCiAjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQogCitpbXBvcnQgb3MKIGltcG9ydCBzaHV0aWwKIGltcG9ydCBzdWJwcm9jZXNzCiAKIGZyb20gb2VxYS5zZGtleHQuY2FzZSBpbXBvcnQgT0VTREtFeHRUZXN0Q2FzZQogZnJvbSBvZXFhLmNvcmUuZGVjb3JhdG9yLmRlcGVuZHMgaW1wb3J0IE9FVGVzdERlcGVuZHMKIGZyb20gb2VxYS5jb3JlLmRlY29yYXRvci5vZWlkIGltcG9ydCBPRVRlc3RJRAorZnJvbSBvZXFhLnV0aWxzLmh0dHBzZXJ2ZXIgaW1wb3J0IEhUVFBTZXJ2aWNlCiAKIGNsYXNzIERldnRvb2xUZXN0KE9FU0RLRXh0VGVzdENhc2UpOgogICAgIEBjbGFzc21ldGhvZApAQCAtOTUsMyArOTcsMzMgQEAKICAgICAgICAgICAgIHNlbGYuX3J1bignZGV2dG9vbCBidWlsZCAlcyAnICUgcGFja2FnZV9ub2RlanMpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLl9ydW4oJ2RldnRvb2wgcmVzZXQgJXMgJyUgcGFja2FnZV9ub2RlanMpCisKK2NsYXNzIFNka1VwZGF0ZVRlc3QoT0VTREtFeHRUZXN0Q2FzZSk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHVibGlzaF9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi50Yy5zZGtfZGlyLCAnZXNka19wdWJsaXNoJykKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5wdWJsaXNoX2Rpcik6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYucHVibGlzaF9kaXIpCisgICAgICAgIG9zLm1rZGlyKHNlbGYucHVibGlzaF9kaXIpCisKKyAgICAgICAgYmFzZV90Y25hbWUgPSAiJXMvJXMiICUgKHNlbGYudGQuZ2V0KCJTREtfREVQTE9ZIiwgJycpLAorICAgICAgICAgICAgc2VsZi50ZC5nZXQoIlRPT0xDSEFJTkVYVF9PVVRQVVROQU1FIiwgJycpKQorICAgICAgICB0Y25hbWVfbmV3ID0gIiVzLW5ldy5zaCIgJSBiYXNlX3RjbmFtZQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModGNuYW1lX25ldyk6CisgICAgICAgICAgICB0Y25hbWVfbmV3ID0gIiVzLnNoIiAlIGJhc2VfdGNuYW1lCisKKyAgICAgICAgY21kID0gJ29lLXB1Ymxpc2gtc2RrICVzICVzJyAlICh0Y25hbWVfbmV3LCBzZWxmLnB1Ymxpc2hfZGlyKQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHNoZWxsPVRydWUpCisKKyAgICAgICAgc2VsZi5odHRwX3NlcnZpY2UgPSBIVFRQU2VydmljZShzZWxmLnB1Ymxpc2hfZGlyKQorICAgICAgICBzZWxmLmh0dHBfc2VydmljZS5zdGFydCgpCisKKyAgICAgICAgc2VsZi5odHRwX3VybCA9ICJodHRwOi8vMTI3LjAuMC4xOiVkIiAlIHNlbGYuaHR0cF9zZXJ2aWNlLnBvcnQKKworICAgIGRlZiB0ZXN0X3Nka191cGRhdGVfaHR0cChzZWxmKToKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5fcnVuKCJkZXZ0b29sIHNkay11cGRhdGUgXCIlc1wiIiAlIHNlbGYuaHR0cF91cmwpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5odHRwX3NlcnZpY2Uuc3RvcCgpCisgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5wdWJsaXNoX2RpcikKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nka2V4dC9jYXNlcy9zZGtfdXBkYXRlLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrZXh0L2Nhc2VzL3Nka191cGRhdGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmODU5OGIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrZXh0L2Nhc2VzL3Nka191cGRhdGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgotIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKLQotaW1wb3J0IG9zCi1pbXBvcnQgc2h1dGlsCi1pbXBvcnQgc3VicHJvY2VzcwotCi1mcm9tIG9lcWEuc2RrZXh0LmNhc2UgaW1wb3J0IE9FU0RLRXh0VGVzdENhc2UKLWZyb20gb2VxYS51dGlscy5odHRwc2VydmVyIGltcG9ydCBIVFRQU2VydmljZQotCi1jbGFzcyBTZGtVcGRhdGVUZXN0KE9FU0RLRXh0VGVzdENhc2UpOgotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgotICAgICAgICBzZWxmLnB1Ymxpc2hfZGlyID0gb3MucGF0aC5qb2luKHNlbGYudGMuc2RrX2RpciwgJ2VzZGtfcHVibGlzaCcpCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYucHVibGlzaF9kaXIpOgotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLnB1Ymxpc2hfZGlyKQotICAgICAgICBvcy5ta2RpcihzZWxmLnB1Ymxpc2hfZGlyKQotCi0gICAgICAgIGJhc2VfdGNuYW1lID0gIiVzLyVzIiAlIChzZWxmLnRkLmdldCgiU0RLX0RFUExPWSIsICcnKSwKLSAgICAgICAgICAgIHNlbGYudGQuZ2V0KCJUT09MQ0hBSU5FWFRfT1VUUFVUTkFNRSIsICcnKSkKLSAgICAgICAgdGNuYW1lX25ldyA9ICIlcy1uZXcuc2giICUgYmFzZV90Y25hbWUKLSAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHRjbmFtZV9uZXcpOgotICAgICAgICAgICAgdGNuYW1lX25ldyA9ICIlcy5zaCIgJSBiYXNlX3RjbmFtZQotCi0gICAgICAgIGNtZCA9ICdvZS1wdWJsaXNoLXNkayAlcyAlcycgJSAodGNuYW1lX25ldywgc2VsZi5wdWJsaXNoX2RpcikKLSAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzaGVsbD1UcnVlKQotCi0gICAgICAgIHNlbGYuaHR0cF9zZXJ2aWNlID0gSFRUUFNlcnZpY2Uoc2VsZi5wdWJsaXNoX2RpcikKLSAgICAgICAgc2VsZi5odHRwX3NlcnZpY2Uuc3RhcnQoKQotCi0gICAgICAgIHNlbGYuaHR0cF91cmwgPSAiaHR0cDovLzEyNy4wLjAuMTolZCIgJSBzZWxmLmh0dHBfc2VydmljZS5wb3J0Ci0KLSAgICBkZWYgdGVzdF9zZGtfdXBkYXRlX2h0dHAoc2VsZik6Ci0gICAgICAgIG91dHB1dCA9IHNlbGYuX3J1bigiZGV2dG9vbCBzZGstdXBkYXRlIFwiJXNcIiIgJSBzZWxmLmh0dHBfdXJsKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6Ci0gICAgICAgIHNlbGYuaHR0cF9zZXJ2aWNlLnN0b3AoKQotICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYucHVibGlzaF9kaXIpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9fX2luaXRfXy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWQ5NTEzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L19faW5pdF9fLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1mcm9tIHBrZ3V0aWwgaW1wb3J0IGV4dGVuZF9wYXRoCi1fX3BhdGhfXyA9IGV4dGVuZF9wYXRoKF9fcGF0aF9fLCBfX25hbWVfXykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L19zc3RhdGV0ZXN0c19ub2F1dG8ucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9fc3N0YXRldGVzdHNfbm9hdXRvLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzlhZTdlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L19zc3RhdGV0ZXN0c19ub2F1dG8ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi1pbXBvcnQgZGF0ZXRpbWUKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IG9zCi1pbXBvcnQgcmUKLWltcG9ydCBzaHV0aWwKLQotaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scwotZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKLWZyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBnZXRfdGVzdF9sYXllcgotZnJvbSBvZXFhLnNlbGZ0ZXN0LnNzdGF0ZSBpbXBvcnQgU1N0YXRlQmFzZQotCi0KLWNsYXNzIFJlYnVpbGRGcm9tU1N0YXRlKFNTdGF0ZUJhc2UpOgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6Ci0gICAgICAgIHNlbGYuYnVpbGRkaXIgPSBvcy5wYXRoLmpvaW4ob3MuZW52aXJvbi5nZXQoJ0JVSUxERElSJykpCi0KLSAgICBkZWYgZ2V0X2RlcF90YXJnZXRzKHNlbGYsIHByaW1hcnlfdGFyZ2V0cyk6Ci0gICAgICAgIGZvdW5kX3RhcmdldHMgPSBbXQotICAgICAgICBiaXRiYWtlKCItZyAiICsgJyAnLmpvaW4obWFwKHN0ciwgcHJpbWFyeV90YXJnZXRzKSkpCi0gICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3BuLWJ1aWxkbGlzdCcpLCAncicpIGFzIHBuZmlsZToKLSAgICAgICAgICAgIGZvdW5kX3RhcmdldHMgPSBwbmZpbGUucmVhZCgpLnNwbGl0bGluZXMoKQotICAgICAgICByZXR1cm4gZm91bmRfdGFyZ2V0cwotCi0gICAgZGVmIGNvbmZpZ3VyZV9idWlsZGRpcihzZWxmLCBidWlsZGRpcik6Ci0gICAgICAgIG9zLm1rZGlyKGJ1aWxkZGlyKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKGJ1aWxkZGlyKQotICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICdjb25mJykpCi0gICAgICAgIHNodXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4ob3MuZW52aXJvbi5nZXQoJ0JVSUxERElSJyksICdjb25mL2xvY2FsLmNvbmYnKSwgb3MucGF0aC5qb2luKGJ1aWxkZGlyLCAnY29uZi9sb2NhbC5jb25mJykpCi0gICAgICAgIGNvbmZpZyA9IHt9Ci0gICAgICAgIGNvbmZpZ1snZGVmYXVsdF9zc3RhdGVfZGlyJ10gPSAiU1NUQVRFX0RJUiA/PSBcIiR7VE9QRElSfS9zc3RhdGUtY2FjaGVcIiIKLSAgICAgICAgY29uZmlnWydudWxsX3NzdGF0ZV9taXJyb3JzJ10gPSAiU1NUQVRFX01JUlJPUlMgPSBcIlwiIgotICAgICAgICBjb25maWdbJ2RlZmF1bHRfdG1wX2RpciddID0gIlRNUERJUiA9IFwiJHtUT1BESVJ9L3RtcFwiIgotICAgICAgICBmb3Iga2V5IGluIGNvbmZpZzoKLSAgICAgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICdjb25mL3NlbGZ0ZXN0LmluYycpLCBjb25maWdba2V5XSkKLSAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihvcy5lbnZpcm9uLmdldCgnQlVJTERESVInKSwgJ2NvbmYvYmJsYXllcnMuY29uZicpLCBvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICdjb25mL2JibGF5ZXJzLmNvbmYnKSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihvcy5lbnZpcm9uLmdldCgnQlVJTERESVInKSwgJ2NvbmYvYXV0by5jb25mJyksIG9zLnBhdGguam9pbihidWlsZGRpciwgJ2NvbmYvYXV0by5jb25mJykpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHBhc3MKLQotICAgIGRlZiBoYXJkbGlua190cmVlKHNlbGYsIHNyYywgZHN0KToKLSAgICAgICAgb3MubWtkaXIoZHN0KQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKGRzdCkKLSAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc3JjKToKLSAgICAgICAgICAgIGlmIHJvb3QgPT0gc3JjOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oZHN0LCByb290LnNwbGl0KHNyYylbMV1bMTpdKSkKLSAgICAgICAgICAgIGZvciBzc3RhdGVfZmlsZSBpbiBmaWxlczoKLSAgICAgICAgICAgICAgICBvcy5saW5rKG9zLnBhdGguam9pbihyb290LCBzc3RhdGVfZmlsZSksIG9zLnBhdGguam9pbihkc3QsIHJvb3Quc3BsaXQoc3JjKVsxXVsxOl0sIHNzdGF0ZV9maWxlKSkKLQotICAgIGRlZiBydW5fdGVzdF9zc3RhdGVfcmVidWlsZChzZWxmLCBwcmltYXJ5X3RhcmdldHMsIHJlbG9jYXRlPUZhbHNlLCByZWJ1aWxkX2RlcGVuZGVuY2llcz1GYWxzZSk6Ci0gICAgICAgIGJ1aWxkQSA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnYnVpbGRBJykKLSAgICAgICAgaWYgcmVsb2NhdGU6Ci0gICAgICAgICAgICBidWlsZEIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ2J1aWxkQicpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBidWlsZEIgPSBidWlsZEEKLQotICAgICAgICBpZiByZWJ1aWxkX2RlcGVuZGVuY2llczoKLSAgICAgICAgICAgIHJlYnVpbGRfdGFyZ2V0cyA9IHNlbGYuZ2V0X2RlcF90YXJnZXRzKHByaW1hcnlfdGFyZ2V0cykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJlYnVpbGRfdGFyZ2V0cyA9IHByaW1hcnlfdGFyZ2V0cwotCi0gICAgICAgIHNlbGYuY29uZmlndXJlX2J1aWxkZGlyKGJ1aWxkQSkKLSAgICAgICAgcnVuQ21kKCgiLiAlcy9vZS1pbml0LWJ1aWxkLWVudiAlcyAmJiAiICUgKGdldF9iYl92YXIoJ0NPUkVCQVNFJyksIGJ1aWxkQSkpICsgJ2JpdGJha2UgICcgKyAnICcuam9pbihtYXAoc3RyLCBwcmltYXJ5X3RhcmdldHMpKSwgc2hlbGw9VHJ1ZSwgZXhlY3V0YWJsZT0nL2Jpbi9iYXNoJykKLSAgICAgICAgc2VsZi5oYXJkbGlua190cmVlKG9zLnBhdGguam9pbihidWlsZEEsICdzc3RhdGUtY2FjaGUnKSwgb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdzc3RhdGUtY2FjaGUtYnVpbGRBJykpCi0gICAgICAgIHNodXRpbC5ybXRyZWUoYnVpbGRBKQotCi0gICAgICAgIGZhaWxlZF9yZWJ1aWxkID0gW10KLSAgICAgICAgZmFpbGVkX2NsZWFuc3N0YXRlID0gW10KLSAgICAgICAgZm9yIHRhcmdldCBpbiByZWJ1aWxkX3RhcmdldHM6Ci0gICAgICAgICAgICBzZWxmLmNvbmZpZ3VyZV9idWlsZGRpcihidWlsZEIpCi0gICAgICAgICAgICBzZWxmLmhhcmRsaW5rX3RyZWUob3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdzc3RhdGUtY2FjaGUtYnVpbGRBJyksIG9zLnBhdGguam9pbihidWlsZEIsICdzc3RhdGUtY2FjaGUnKSkKLQotICAgICAgICAgICAgcmVzdWx0X2NsZWFuc3N0YXRlID0gcnVuQ21kKCgiLiAlcy9vZS1pbml0LWJ1aWxkLWVudiAlcyAmJiAiICUgKGdldF9iYl92YXIoJ0NPUkVCQVNFJyksIGJ1aWxkQikpICsgJ2JpdGJha2UgLWNjbGVhbnNzdGF0ZSAnICsgdGFyZ2V0LCBpZ25vcmVfc3RhdHVzPVRydWUsIHNoZWxsPVRydWUsIGV4ZWN1dGFibGU9Jy9iaW4vYmFzaCcpCi0gICAgICAgICAgICBpZiBub3QgcmVzdWx0X2NsZWFuc3N0YXRlLnN0YXR1cyA9PSAwOgotICAgICAgICAgICAgICAgIGZhaWxlZF9jbGVhbnNzdGF0ZS5hcHBlbmQodGFyZ2V0KQotICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoYnVpbGRCKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgIHJlc3VsdF9idWlsZCA9IHJ1bkNtZCgoIi4gJXMvb2UtaW5pdC1idWlsZC1lbnYgJXMgJiYgIiAlIChnZXRfYmJfdmFyKCdDT1JFQkFTRScpLCBidWlsZEIpKSArICdiaXRiYWtlICcgKyB0YXJnZXQsIGlnbm9yZV9zdGF0dXM9VHJ1ZSwgc2hlbGw9VHJ1ZSwgZXhlY3V0YWJsZT0nL2Jpbi9iYXNoJykKLSAgICAgICAgICAgIGlmIG5vdCByZXN1bHRfYnVpbGQuc3RhdHVzID09IDA6Ci0gICAgICAgICAgICAgICAgZmFpbGVkX3JlYnVpbGQuYXBwZW5kKHRhcmdldCkKLQotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShidWlsZEIpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmYWlsZWRfcmVidWlsZCwgbXNnPSJUaGUgZm9sbG93aW5nIHJlY2lwZXMgaGF2ZSBmYWlsZWQgdG8gcmVidWlsZDogJXMiICUgJyAnLmpvaW4obWFwKHN0ciwgZmFpbGVkX3JlYnVpbGQpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmYWlsZWRfY2xlYW5zc3RhdGUsIG1zZz0iVGhlIGZvbGxvd2luZyByZWNpcGVzIGhhdmUgZmFpbGVkIGNsZWFuc3N0YXRlKGFsbCBvdGhlcnMgaGF2ZSBwYXNzZWQgYm90aCBjbGVhbnNzdGF0ZSBhbmQgcmVidWlsZCBmcm9tIHNzdGF0ZSB0ZXN0cyk6ICVzIiAlICcgJy5qb2luKG1hcChzdHIsIGZhaWxlZF9jbGVhbnNzdGF0ZSkpKQotCi0gICAgZGVmIHRlc3Rfc3N0YXRlX3JlbG9jYXRpb24oc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX3JlYnVpbGQoWydjb3JlLWltYWdlLXNhdG8tc2RrJ10sIHJlbG9jYXRlPVRydWUsIHJlYnVpbGRfZGVwZW5kZW5jaWVzPVRydWUpCi0KLSAgICBkZWYgdGVzdF9zc3RhdGVfcmVidWlsZChzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfcmVidWlsZChbJ2NvcmUtaW1hZ2Utc2F0by1zZGsnXSwgcmVsb2NhdGU9RmFsc2UsIHJlYnVpbGRfZGVwZW5kZW5jaWVzPVRydWUpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9hcmNoaXZlci5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2FyY2hpdmVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjAxYzM2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2FyY2hpdmVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLWZyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Ci1mcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IGJpdGJha2UsIGdldF9iYl92YXJzCi1mcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKLWltcG9ydCBnbG9iCi1pbXBvcnQgb3MKLWltcG9ydCBzaHV0aWwKLQotCi1jbGFzcyBBcmNoaXZlcihvZVNlbGZUZXN0KToKLQotICAgIEB0ZXN0Y2FzZSgxMzQ1KQotICAgIGRlZiB0ZXN0X2FyY2hpdmVyX2FsbG93c190b19maWx0ZXJfb25fcmVjaXBlX25hbWUoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBTdW1tYXJ5OiAgICAgVGhlIGFyY2hpdmVyIHNob3VsZCBvZmZlciB0aGUgcG9zc2liaWxpdHkgdG8gZmlsdGVyIG9uIHRoZSByZWNpcGUuICgjNjkyOSkKLSAgICAgICAgRXhwZWN0ZWQ6ICAgIDEuIEluY2x1ZGVkIHJlY2lwZSAoYnVzeWJveCkgc2hvdWxkIGJlIGluY2x1ZGVkCi0gICAgICAgICAgICAgICAgICAgICAyLiBFeGNsdWRlZCByZWNpcGUgKHpsaWIpIHNob3VsZCBiZSBleGNsdWRlZAotICAgICAgICBQcm9kdWN0OiAgICAgb2UtY29yZQotICAgICAgICBBdXRob3I6ICAgICAgRGFuaWVsIElzdHJhdGUgPGRhbmllbC5hbGV4YW5kcnV4LmlzdHJhdGVAaW50ZWwuY29tPgotICAgICAgICBBdXRvbWF0ZWRCeTogRGFuaWVsIElzdHJhdGUgPGRhbmllbC5hbGV4YW5kcnV4LmlzdHJhdGVAaW50ZWwuY29tPgotICAgICAgICAiIiIKLQotICAgICAgICBpbmNsdWRlX3JlY2lwZSA9ICdidXN5Ym94JwotICAgICAgICBleGNsdWRlX3JlY2lwZSA9ICd6bGliJwotCi0gICAgICAgIGZlYXR1cmVzID0gJ0lOSEVSSVQgKz0gImFyY2hpdmVyIlxuJwotICAgICAgICBmZWF0dXJlcyArPSAnQVJDSElWRVJfTU9ERVtzcmNdID0gIm9yaWdpbmFsIlxuJwotICAgICAgICBmZWF0dXJlcyArPSAnQ09QWUxFRlRfUE5fSU5DTFVERSA9ICIlcyJcbicgJSBpbmNsdWRlX3JlY2lwZQotICAgICAgICBmZWF0dXJlcyArPSAnQ09QWUxFRlRfUE5fRVhDTFVERSA9ICIlcyJcbicgJSBleGNsdWRlX3JlY2lwZQotICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhmZWF0dXJlcykKLQotICAgICAgICBiaXRiYWtlKCctYyBjbGVhbiAlcyAlcycgJSAoaW5jbHVkZV9yZWNpcGUsIGV4Y2x1ZGVfcmVjaXBlKSkKLSAgICAgICAgYml0YmFrZSgiLWMgZGVwbG95X2FyY2hpdmVzICVzICVzIiAlIChpbmNsdWRlX3JlY2lwZSwgZXhjbHVkZV9yZWNpcGUpKQotCi0gICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhbJ0RFUExPWV9ESVJfU1JDJywgJ1RBUkdFVF9TWVMnXSkKLSAgICAgICAgc3JjX3BhdGggPSBvcy5wYXRoLmpvaW4oYmJfdmFyc1snREVQTE9ZX0RJUl9TUkMnXSwgYmJfdmFyc1snVEFSR0VUX1NZUyddKQotCi0gICAgICAgICMgQ2hlY2sgdGhhdCBpbmNsdWRlX3JlY2lwZSB3YXMgaW5jbHVkZWQKLSAgICAgICAgaW5jbHVkZWRfcHJlc2VudCA9IGxlbihnbG9iLmdsb2Ioc3JjX3BhdGggKyAnLyVzLSonICUgaW5jbHVkZV9yZWNpcGUpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5jbHVkZWRfcHJlc2VudCwgJ1JlY2lwZSAlcyB3YXMgbm90IGluY2x1ZGVkLicgJSBpbmNsdWRlX3JlY2lwZSkKLQotICAgICAgICAjIENoZWNrIHRoYXQgZXhjbHVkZV9yZWNpcGUgd2FzIGV4Y2x1ZGVkCi0gICAgICAgIGV4Y2x1ZGVkX3ByZXNlbnQgPSBsZW4oZ2xvYi5nbG9iKHNyY19wYXRoICsgJy8lcy0qJyAlIGV4Y2x1ZGVfcmVjaXBlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShleGNsdWRlZF9wcmVzZW50LCAnUmVjaXBlICVzIHdhcyBub3QgZXhjbHVkZWQuJyAlIGV4Y2x1ZGVfcmVjaXBlKQotCi0KLSAgICBkZWYgdGVzdF9hcmNoaXZlcl9maWx0ZXJzX2J5X3R5cGUoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBTdW1tYXJ5OiAgICAgVGhlIGFyY2hpdmVyIGlzIGRvY3VtZW50ZWQgdG8gZmlsdGVyIG9uIHRoZSByZWNpcGUgdHlwZS4KLSAgICAgICAgRXhwZWN0ZWQ6ICAgIDEuIGluY2x1ZGVkIHJlY2lwZSB0eXBlICh0YXJnZXQpIHNob3VsZCBiZSBpbmNsdWRlZAotICAgICAgICAgICAgICAgICAgICAgMi4gb3RoZXIgdHlwZXMgc2hvdWxkIGJlIGV4Y2x1ZGVkCi0gICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCi0gICAgICAgIEF1dGhvcjogICAgICBBbmRyw6kgRHJhc3ppayA8YWRyYXN6aWtAdHljb2ludC5jb20+Ci0gICAgICAgICIiIgotCi0gICAgICAgIHRhcmdldF9yZWNpcGUgPSAnaW5pdHNjcmlwdHMnCi0gICAgICAgIG5hdGl2ZV9yZWNpcGUgPSAnemxpYi1uYXRpdmUnCi0KLSAgICAgICAgZmVhdHVyZXMgPSAnSU5IRVJJVCArPSAiYXJjaGl2ZXIiXG4nCi0gICAgICAgIGZlYXR1cmVzICs9ICdBUkNISVZFUl9NT0RFW3NyY10gPSAib3JpZ2luYWwiXG4nCi0gICAgICAgIGZlYXR1cmVzICs9ICdDT1BZTEVGVF9SRUNJUEVfVFlQRVMgPSAidGFyZ2V0IlxuJwotICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhmZWF0dXJlcykKLQotICAgICAgICBiaXRiYWtlKCctYyBjbGVhbiAlcyAlcycgJSAodGFyZ2V0X3JlY2lwZSwgbmF0aXZlX3JlY2lwZSkpCi0gICAgICAgIGJpdGJha2UoIiVzIC1jIGRlcGxveV9hcmNoaXZlcyAlcyIgJSAodGFyZ2V0X3JlY2lwZSwgbmF0aXZlX3JlY2lwZSkpCi0KLSAgICAgICAgYmJfdmFycyA9IGdldF9iYl92YXJzKFsnREVQTE9ZX0RJUl9TUkMnLCAnVEFSR0VUX1NZUycsICdCVUlMRF9TWVMnXSkKLSAgICAgICAgc3JjX3BhdGhfdGFyZ2V0ID0gb3MucGF0aC5qb2luKGJiX3ZhcnNbJ0RFUExPWV9ESVJfU1JDJ10sIGJiX3ZhcnNbJ1RBUkdFVF9TWVMnXSkKLSAgICAgICAgc3JjX3BhdGhfbmF0aXZlID0gb3MucGF0aC5qb2luKGJiX3ZhcnNbJ0RFUExPWV9ESVJfU1JDJ10sIGJiX3ZhcnNbJ0JVSUxEX1NZUyddKQotCi0gICAgICAgICMgQ2hlY2sgdGhhdCB0YXJnZXRfcmVjaXBlIHdhcyBpbmNsdWRlZAotICAgICAgICBpbmNsdWRlZF9wcmVzZW50ID0gbGVuKGdsb2IuZ2xvYihzcmNfcGF0aF90YXJnZXQgKyAnLyVzLSonICUgdGFyZ2V0X3JlY2lwZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmNsdWRlZF9wcmVzZW50LCAnUmVjaXBlICVzIHdhcyBub3QgaW5jbHVkZWQuJyAlIHRhcmdldF9yZWNpcGUpCi0KLSAgICAgICAgIyBDaGVjayB0aGF0IG5hdGl2ZV9yZWNpcGUgd2FzIGV4Y2x1ZGVkCi0gICAgICAgIGV4Y2x1ZGVkX3ByZXNlbnQgPSBsZW4oZ2xvYi5nbG9iKHNyY19wYXRoX25hdGl2ZSArICcvJXMtKicgJSBuYXRpdmVfcmVjaXBlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShleGNsdWRlZF9wcmVzZW50LCAnUmVjaXBlICVzIHdhcyBub3QgZXhjbHVkZWQuJyAlIG5hdGl2ZV9yZWNpcGUpCi0KLSAgICBkZWYgdGVzdF9hcmNoaXZlcl9maWx0ZXJzX2J5X3R5cGVfYW5kX25hbWUoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBTdW1tYXJ5OiAgICAgVGVzdCB0aGF0IHRoZSBhcmNoaXZlciBhcmNoaXZlcyBieSByZWNpcGUgdHlwZSwgdGFraW5nIHRoZQotICAgICAgICAgICAgICAgICAgICAgcmVjaXBlIG5hbWUgaW50byBhY2NvdW50LgotICAgICAgICBFeHBlY3RlZDogICAgMS4gaW5jbHVkZWQgcmVjaXBlIHR5cGUgKHRhcmdldCkgc2hvdWxkIGJlIGluY2x1ZGVkCi0gICAgICAgICAgICAgICAgICAgICAyLiBvdGhlciB0eXBlcyBzaG91bGQgYmUgZXhjbHVkZWQKLSAgICAgICAgICAgICAgICAgICAgIDMuIHJlY2lwZSBieSBuYW1lIHNob3VsZCBiZSBpbmNsdWRlZCAvIGV4Y2x1ZGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGluZyBwcmV2aW91cyBkZWNpc2lvbiBieSB0eXBlCi0gICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCi0gICAgICAgIEF1dGhvcjogICAgICBBbmRyw6kgRHJhc3ppayA8YWRyYXN6aWtAdHljb2ludC5jb20+Ci0gICAgICAgICIiIgotCi0gICAgICAgIHRhcmdldF9yZWNpcGVzID0gWyAnaW5pdHNjcmlwdHMnLCAnemxpYicgXQotICAgICAgICBuYXRpdmVfcmVjaXBlcyA9IFsgJ3VwZGF0ZS1yYy5kLW5hdGl2ZScsICd6bGliLW5hdGl2ZScgXQotCi0gICAgICAgIGZlYXR1cmVzID0gJ0lOSEVSSVQgKz0gImFyY2hpdmVyIlxuJwotICAgICAgICBmZWF0dXJlcyArPSAnQVJDSElWRVJfTU9ERVtzcmNdID0gIm9yaWdpbmFsIlxuJwotICAgICAgICBmZWF0dXJlcyArPSAnQ09QWUxFRlRfUkVDSVBFX1RZUEVTID0gInRhcmdldCJcbicKLSAgICAgICAgZmVhdHVyZXMgKz0gJ0NPUFlMRUZUX1BOX0lOQ0xVREUgPSAiJXMiXG4nICUgbmF0aXZlX3JlY2lwZXNbMV0KLSAgICAgICAgZmVhdHVyZXMgKz0gJ0NPUFlMRUZUX1BOX0VYQ0xVREUgPSAiJXMiXG4nICUgdGFyZ2V0X3JlY2lwZXNbMV0KLSAgICAgICAgc2VsZi53cml0ZV9jb25maWcoZmVhdHVyZXMpCi0KLSAgICAgICAgYml0YmFrZSgnLWMgY2xlYW4gJXMgJXMnICUgKCcgJy5qb2luKHRhcmdldF9yZWNpcGVzKSwgJyAnLmpvaW4obmF0aXZlX3JlY2lwZXMpKSkKLSAgICAgICAgYml0YmFrZSgnLWMgZGVwbG95X2FyY2hpdmVzICVzICVzJyAlICgnICcuam9pbih0YXJnZXRfcmVjaXBlcyksICcgJy5qb2luKG5hdGl2ZV9yZWNpcGVzKSkpCi0KLSAgICAgICAgYmJfdmFycyA9IGdldF9iYl92YXJzKFsnREVQTE9ZX0RJUl9TUkMnLCAnVEFSR0VUX1NZUycsICdCVUlMRF9TWVMnXSkKLSAgICAgICAgc3JjX3BhdGhfdGFyZ2V0ID0gb3MucGF0aC5qb2luKGJiX3ZhcnNbJ0RFUExPWV9ESVJfU1JDJ10sIGJiX3ZhcnNbJ1RBUkdFVF9TWVMnXSkKLSAgICAgICAgc3JjX3BhdGhfbmF0aXZlID0gb3MucGF0aC5qb2luKGJiX3ZhcnNbJ0RFUExPWV9ESVJfU1JDJ10sIGJiX3ZhcnNbJ0JVSUxEX1NZUyddKQotCi0gICAgICAgICMgQ2hlY2sgdGhhdCB0YXJnZXRfcmVjaXBlWzBdIGFuZCBuYXRpdmVfcmVjaXBlc1sxXSB3ZXJlIGluY2x1ZGVkCi0gICAgICAgIGluY2x1ZGVkX3ByZXNlbnQgPSBsZW4oZ2xvYi5nbG9iKHNyY19wYXRoX3RhcmdldCArICcvJXMtKicgJSB0YXJnZXRfcmVjaXBlc1swXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmNsdWRlZF9wcmVzZW50LCAnUmVjaXBlICVzIHdhcyBub3QgaW5jbHVkZWQuJyAlIHRhcmdldF9yZWNpcGVzWzBdKQotCi0gICAgICAgIGluY2x1ZGVkX3ByZXNlbnQgPSBsZW4oZ2xvYi5nbG9iKHNyY19wYXRoX25hdGl2ZSArICcvJXMtKicgJSBuYXRpdmVfcmVjaXBlc1sxXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmNsdWRlZF9wcmVzZW50LCAnUmVjaXBlICVzIHdhcyBub3QgaW5jbHVkZWQuJyAlIG5hdGl2ZV9yZWNpcGVzWzFdKQotCi0gICAgICAgICMgQ2hlY2sgdGhhdCBuYXRpdmVfcmVjaXBlc1swXSBhbmQgdGFyZ2V0X3JlY2lwZXNbMV0gd2VyZSBleGNsdWRlZAotICAgICAgICBleGNsdWRlZF9wcmVzZW50ID0gbGVuKGdsb2IuZ2xvYihzcmNfcGF0aF9uYXRpdmUgKyAnLyVzLSonICUgbmF0aXZlX3JlY2lwZXNbMF0pKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV4Y2x1ZGVkX3ByZXNlbnQsICdSZWNpcGUgJXMgd2FzIG5vdCBleGNsdWRlZC4nICUgbmF0aXZlX3JlY2lwZXNbMF0pCi0KLSAgICAgICAgZXhjbHVkZWRfcHJlc2VudCA9IGxlbihnbG9iLmdsb2Ioc3JjX3BhdGhfdGFyZ2V0ICsgJy8lcy0qJyAlIHRhcmdldF9yZWNpcGVzWzFdKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShleGNsdWRlZF9wcmVzZW50LCAnUmVjaXBlICVzIHdhcyBub3QgZXhjbHVkZWQuJyAlIHRhcmdldF9yZWNpcGVzWzFdKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvYmFzZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Jhc2UucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3YThlYTguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvYmFzZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDIzNSArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgotIwotIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKLQotCi0jIERFU0NSSVBUSU9OCi0jIEJhc2UgY2xhc3MgaW5oZXJpdGVkIGJ5IHRlc3QgY2xhc3NlcyBpbiBtZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0Ci0KLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgc2h1dGlsCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IGVycm5vCi0KLWltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKLWZyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBnZXRfdGVzdF9sYXllcgotZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IExvZ1Jlc3VsdHMKLWZyb20gcmFuZG9tIGltcG9ydCBjaG9pY2UKLWltcG9ydCBnbG9iCi0KLUBMb2dSZXN1bHRzCi1jbGFzcyBvZVNlbGZUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJzZWxmdGVzdC5iYXNlIikKLSAgICBsb25nTWVzc2FnZSA9IFRydWUKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSJydW5UZXN0Iik6Ci0gICAgICAgIHNlbGYuYnVpbGRkaXIgPSBvcy5lbnZpcm9uLmdldCgiQlVJTERESVIiKQotICAgICAgICBzZWxmLmxvY2FsY29uZl9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICJjb25mL2xvY2FsLmNvbmYiKQotICAgICAgICBzZWxmLmxvY2FsY29uZl9iYWNrdXAgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgImNvbmYvbG9jYWwuYmsiKQotICAgICAgICBzZWxmLnRlc3RpbmNfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAiY29uZi9zZWxmdGVzdC5pbmMiKQotICAgICAgICBzZWxmLmxvY2FsX2JibGF5ZXJzX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgImNvbmYvYmJsYXllcnMuY29uZiIpCi0gICAgICAgIHNlbGYubG9jYWxfYmJsYXllcnNfYmFja3VwID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb25mL2JibGF5ZXJzLmJrIikKLSAgICAgICAgc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgImNvbmYvYmJsYXllcnMuaW5jIikKLSAgICAgICAgc2VsZi5tYWNoaW5laW5jX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgImNvbmYvbWFjaGluZS5pbmMiKQotICAgICAgICBzZWxmLnRlc3RsYXllcl9wYXRoID0gb2VTZWxmVGVzdC50ZXN0bGF5ZXJfcGF0aAotICAgICAgICBzZWxmLl9leHRyYV90ZWFyX2Rvd25fY29tbWFuZHMgPSBbXQotICAgICAgICBzZWxmLl90cmFja19mb3JfY2xlYW51cCA9IFsKLSAgICAgICAgICAgIHNlbGYudGVzdGluY19wYXRoLCBzZWxmLnRlc3RpbmNfYmJsYXllcnNfcGF0aCwKLSAgICAgICAgICAgIHNlbGYubWFjaGluZWluY19wYXRoLCBzZWxmLmxvY2FsY29uZl9iYWNrdXAsCi0gICAgICAgICAgICBzZWxmLmxvY2FsX2JibGF5ZXJzX2JhY2t1cF0KLSAgICAgICAgc3VwZXIob2VTZWxmVGVzdCwgc2VsZikuX19pbml0X18obWV0aG9kTmFtZSkKLQotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgb3MuY2hkaXIoc2VsZi5idWlsZGRpcikKLSAgICAgICAgIyBDaGVjayBpZiBsb2NhbC5jb25mIG9yIGJibGF5ZXJzLmNvbmYgZmlsZXMgYmFja3VwIGV4aXN0cwotICAgICAgICAjIGZyb20gYSBwcmV2aW91cyBmYWlsZWQgdGVzdCBhbmQgcmVzdG9yZSB0aGVtCi0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHNlbGYubG9jYWxjb25mX2JhY2t1cCkgb3Igb3MucGF0aC5pc2ZpbGUoCi0gICAgICAgICAgICAgICAgc2VsZi5sb2NhbF9iYmxheWVyc19iYWNrdXApOgotICAgICAgICAgICAgc2VsZi5sb2cuZGVidWcoIkZvdW5kIGEgbG9jYWwuY29uZiBhbmQvb3IgYmJsYXllcnMuY29uZiBiYWNrdXAgXAotZnJvbSBhIHByZXZpb3VzbHkgYWJvcnRlZCB0ZXN0LiBSZXN0b3JpbmcgdGhlc2UgZmlsZXMgbm93LCBidXQgdGVzdHMgc2hvdWxkIFwKLWJlIHJlLWV4ZWN1dGVkIGZyb20gYSBjbGVhbiBlbnZpcm9ubWVudCB0byBlbnN1cmUgYWNjdXJhdGUgcmVzdWx0cy4iKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzZWxmLmxvY2FsY29uZl9iYWNrdXAsIHNlbGYubG9jYWxjb25mX3BhdGgpCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzZWxmLmxvY2FsX2JibGF5ZXJzX2JhY2t1cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2NhbF9iYmxheWVyc19wYXRoKQotICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgYmFja3VwIGxvY2FsLmNvbmYgYW5kIGJibGF5ZXJzLmNvbmYKLSAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzZWxmLmxvY2FsY29uZl9wYXRoLCBzZWxmLmxvY2FsY29uZl9iYWNrdXApCi0gICAgICAgICAgICBzaHV0aWwuY29weWZpbGUoc2VsZi5sb2NhbF9iYmxheWVyc19wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9jYWxfYmJsYXllcnNfYmFja3VwKQotICAgICAgICAgICAgc2VsZi5sb2cuZGVidWcoIkNyZWF0aW5nIGxvY2FsLmNvbmYgYW5kIGJibGF5ZXJzLmNvbmYgYmFja3Vwcy4iKQotICAgICAgICAjIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgcHJldmlvdXMgdGVzdCBsZWZ0IGFyb3VuZCBpbiBjb25maWcgb3IgaW5jIGZpbGVzCi0gICAgICAgICMgaWYgaXQgZmFpbGVkIHNvIHdlIG5lZWQgYSBmcmVzaCBzdGFydAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi50ZXN0aW5jX3BhdGgpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhzZWxmLnRlc3RsYXllcl9wYXRoKToKLSAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgotICAgICAgICAgICAgICAgIGlmIGYgPT0gJ3Rlc3RfcmVjaXBlLmluYyc6Ci0gICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLmpvaW4ocm9vdCwgZikpCi0KLSAgICAgICAgZm9yIGluY2xfZmlsZSBpbiBbc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGgsIHNlbGYubWFjaGluZWluY19wYXRoXToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUoaW5jbF9maWxlKQotICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLQotICAgICAgICAjIEdldCBDVVNUT01NQUNISU5FIGZyb20gZW52IChzZXQgYnkgLS1tYWNoaW5lIGFyZ3VtZW50IHRvIG9lLXNlbGZ0ZXN0KQotICAgICAgICBjdXN0b21tYWNoaW5lID0gb3MuZ2V0ZW52KCdDVVNUT01NQUNISU5FJykKLSAgICAgICAgaWYgY3VzdG9tbWFjaGluZToKLSAgICAgICAgICAgIGlmIGN1c3RvbW1hY2hpbmUgPT0gJ3JhbmRvbSc6Ci0gICAgICAgICAgICAgICAgbWFjaGluZSA9IGdldF9yYW5kb21fbWFjaGluZSgpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG1hY2hpbmUgPSBjdXN0b21tYWNoaW5lCi0gICAgICAgICAgICBtYWNoaW5lX2NvbmYgPSAnTUFDSElORSA/Pz0gIiVzIlxuJyAlIG1hY2hpbmUKLSAgICAgICAgICAgIHNlbGYuc2V0X21hY2hpbmVfY29uZmlnKG1hY2hpbmVfY29uZikKLSAgICAgICAgICAgIHByaW50KCdNQUNISU5FOiAlcycgJSBtYWNoaW5lKQotCi0gICAgICAgICMgdGVzdHMgbWlnaHQgbmVlZCB0aGVpciBvd24gc2V0dXAKLSAgICAgICAgIyBidXQgaWYgdGhleSBvdmVyd3JpdGUgdGhpcyBvbmUgdGhleSBoYXZlIHRvIGNhbGwKLSAgICAgICAgIyBzdXBlciBlYWNoIHRpbWUsIHNvIGxldCdzIGdpdmUgdGhlbSBhbiBhbHRlcm5hdGl2ZQotICAgICAgICBzZWxmLnNldFVwTG9jYWwoKQotCi0gICAgZGVmIHNldFVwTG9jYWwoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fZXh0cmFfdGVhcl9kb3duX2NvbW1hbmRzOgotICAgICAgICAgICAgZmFpbGVkX2V4dHJhX2NvbW1hbmRzID0gW10KLSAgICAgICAgICAgIGZvciBjb21tYW5kIGluIHNlbGYuX2V4dHJhX3RlYXJfZG93bl9jb21tYW5kczoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoY29tbWFuZCwgaWdub3JlX3N0YXR1cz1UcnVlKQotICAgICAgICAgICAgICAgIGlmIG5vdCByZXN1bHQuc3RhdHVzID09ICAwOgotICAgICAgICAgICAgICAgICAgICBmYWlsZWRfZXh0cmFfY29tbWFuZHMuYXBwZW5kKGNvbW1hbmQpCi0gICAgICAgICAgICBpZiBmYWlsZWRfZXh0cmFfY29tbWFuZHM6Ci0gICAgICAgICAgICAgICAgc2VsZi5sb2cud2FybmluZygidGVhckRvd24gY29tbWFuZHMgaGF2ZSBmYWlsZWQ6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCBmYWlsZWRfZXh0cmFfY29tbWFuZHMpKSkKLSAgICAgICAgICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiVHJ5aW5nIHRvIG1vdmUgb24uIikKLSAgICAgICAgICAgIHNlbGYuX2V4dHJhX3RlYXJfZG93bl9jb21tYW5kcyA9IFtdCi0KLSAgICAgICAgaWYgc2VsZi5fdHJhY2tfZm9yX2NsZWFudXA6Ci0gICAgICAgICAgICBmb3IgcGF0aCBpbiBzZWxmLl90cmFja19mb3JfY2xlYW51cDoKLSAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgotICAgICAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHBhdGgpCi0gICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUocGF0aCk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShwYXRoKQotICAgICAgICAgICAgc2VsZi5fdHJhY2tfZm9yX2NsZWFudXAgPSBbXQotCi0gICAgICAgIHNlbGYudGVhckRvd25Mb2NhbCgpCi0KLSAgICBkZWYgdGVhckRvd25Mb2NhbChzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgIyBhZGQgdGVzdCBzcGVjaWZpYyBjb21tYW5kcyB0byB0aGUgdGVhckRvd24gbWV0aG9kLgotICAgIGRlZiBhZGRfY29tbWFuZF90b190ZWFyRG93bihzZWxmLCBjb21tYW5kKToKLSAgICAgICAgc2VsZi5sb2cuZGVidWcoIkFkZGluZyBjb21tYW5kICclcycgdG8gdGVhckRvd24gZm9yIHRoaXMgdGVzdC4iICUgY29tbWFuZCkKLSAgICAgICAgc2VsZi5fZXh0cmFfdGVhcl9kb3duX2NvbW1hbmRzLmFwcGVuZChjb21tYW5kKQotICAgICMgYWRkIHRlc3Qgc3BlY2lmaWMgZmlsZXMgb3IgZGlyZWN0b3JpZXMgdG8gYmUgcmVtb3ZlZCBpbiB0aGUgdGVhckRvd24gbWV0aG9kCi0gICAgZGVmIHRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYsIHBhdGgpOgotICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiQWRkaW5nIHBhdGggJyVzJyB0byBiZSBjbGVhbmVkIHVwIHdoZW4gdGVzdCBpcyBvdmVyIiAlIHBhdGgpCi0gICAgICAgIHNlbGYuX3RyYWNrX2Zvcl9jbGVhbnVwLmFwcGVuZChwYXRoKQotCi0gICAgIyB3cml0ZSB0byA8YnVpbGRkaXI+L2NvbmYvc2VsZnRlc3QuaW5jCi0gICAgZGVmIHdyaXRlX2NvbmZpZyhzZWxmLCBkYXRhKToKLSAgICAgICAgc2VsZi5sb2cuZGVidWcoIldyaXRpbmcgdG86ICVzXG4lc1xuIiAlIChzZWxmLnRlc3RpbmNfcGF0aCwgZGF0YSkpCi0gICAgICAgIGZ0b29scy53cml0ZV9maWxlKHNlbGYudGVzdGluY19wYXRoLCBkYXRhKQotCi0gICAgICAgIGN1c3RvbW1hY2hpbmUgPSBvcy5nZXRlbnYoJ0NVU1RPTU1BQ0hJTkUnKQotICAgICAgICBpZiBjdXN0b21tYWNoaW5lIGFuZCAnTUFDSElORScgaW4gZGF0YToKLSAgICAgICAgICAgIG1hY2hpbmUgPSBnZXRfYmJfdmFyKCdNQUNISU5FJykKLSAgICAgICAgICAgIHNlbGYubG9nLndhcm5pbmcoJ01BQ0hJTkUgb3ZlcnJpZGRlbjogJXMnICUgbWFjaGluZSkKLQotICAgICMgYXBwZW5kIHRvIDxidWlsZGRpcj4vY29uZi9zZWxmdGVzdC5pbmMKLSAgICBkZWYgYXBwZW5kX2NvbmZpZyhzZWxmLCBkYXRhKToKLSAgICAgICAgc2VsZi5sb2cuZGVidWcoIkFwcGVuZGluZyB0bzogJXNcbiVzXG4iICUgKHNlbGYudGVzdGluY19wYXRoLCBkYXRhKSkKLSAgICAgICAgZnRvb2xzLmFwcGVuZF9maWxlKHNlbGYudGVzdGluY19wYXRoLCBkYXRhKQotCi0gICAgICAgIGN1c3RvbW1hY2hpbmUgPSBvcy5nZXRlbnYoJ0NVU1RPTU1BQ0hJTkUnKQotICAgICAgICBpZiBjdXN0b21tYWNoaW5lIGFuZCAnTUFDSElORScgaW4gZGF0YToKLSAgICAgICAgICAgIG1hY2hpbmUgPSBnZXRfYmJfdmFyKCdNQUNISU5FJykKLSAgICAgICAgICAgIHNlbGYubG9nLndhcm5pbmcoJ01BQ0hJTkUgb3ZlcnJpZGRlbjogJXMnICUgbWFjaGluZSkKLQotICAgICMgcmVtb3ZlIGRhdGEgZnJvbSA8YnVpbGRkaXI+L2NvbmYvc2VsZnRlc3QuaW5jCi0gICAgZGVmIHJlbW92ZV9jb25maWcoc2VsZiwgZGF0YSk6Ci0gICAgICAgIHNlbGYubG9nLmRlYnVnKCJSZW1vdmluZyBmcm9tOiAlc1xuJXNcbiIgJSAoc2VsZi50ZXN0aW5jX3BhdGgsIGRhdGEpKQotICAgICAgICBmdG9vbHMucmVtb3ZlX2Zyb21fZmlsZShzZWxmLnRlc3RpbmNfcGF0aCwgZGF0YSkKLQotICAgICMgd3JpdGUgdG8gbWV0YS1zZWZsdGVzdC9yZWNpcGVzLXRlc3QvPHJlY2lwZT4vdGVzdF9yZWNpcGUuaW5jCi0gICAgZGVmIHdyaXRlX3JlY2lwZWluYyhzZWxmLCByZWNpcGUsIGRhdGEpOgotICAgICAgICBpbmNfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RsYXllcl9wYXRoLCAncmVjaXBlcy10ZXN0JywgcmVjaXBlLCAndGVzdF9yZWNpcGUuaW5jJykKLSAgICAgICAgc2VsZi5sb2cuZGVidWcoIldyaXRpbmcgdG86ICVzXG4lc1xuIiAlIChpbmNfZmlsZSwgZGF0YSkpCi0gICAgICAgIGZ0b29scy53cml0ZV9maWxlKGluY19maWxlLCBkYXRhKQotCi0gICAgIyBhcHBlbmQgZGF0YSB0byBtZXRhLXNlZmx0ZXN0L3JlY2lwZXMtdGVzdC88cmVjaXBlPi90ZXN0X3JlY2lwZS5pbmMKLSAgICBkZWYgYXBwZW5kX3JlY2lwZWluYyhzZWxmLCByZWNpcGUsIGRhdGEpOgotICAgICAgICBpbmNfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RsYXllcl9wYXRoLCAncmVjaXBlcy10ZXN0JywgcmVjaXBlLCAndGVzdF9yZWNpcGUuaW5jJykKLSAgICAgICAgc2VsZi5sb2cuZGVidWcoIkFwcGVuZGluZyB0bzogJXNcbiVzXG4iICUgKGluY19maWxlLCBkYXRhKSkKLSAgICAgICAgZnRvb2xzLmFwcGVuZF9maWxlKGluY19maWxlLCBkYXRhKQotCi0gICAgIyByZW1vdmUgZGF0YSBmcm9tIG1ldGEtc2VmbHRlc3QvcmVjaXBlcy10ZXN0LzxyZWNpcGU+L3Rlc3RfcmVjaXBlLmluYwotICAgIGRlZiByZW1vdmVfcmVjaXBlaW5jKHNlbGYsIHJlY2lwZSwgZGF0YSk6Ci0gICAgICAgIGluY19maWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGxheWVyX3BhdGgsICdyZWNpcGVzLXRlc3QnLCByZWNpcGUsICd0ZXN0X3JlY2lwZS5pbmMnKQotICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiUmVtb3ZpbmcgZnJvbTogJXNcbiVzXG4iICUgKGluY19maWxlLCBkYXRhKSkKLSAgICAgICAgZnRvb2xzLnJlbW92ZV9mcm9tX2ZpbGUoaW5jX2ZpbGUsIGRhdGEpCi0KLSAgICAjIGRlbGV0ZSBtZXRhLXNlZmx0ZXN0L3JlY2lwZXMtdGVzdC88cmVjaXBlPi90ZXN0X3JlY2lwZS5pbmMgZmlsZQotICAgIGRlZiBkZWxldGVfcmVjaXBlaW5jKHNlbGYsIHJlY2lwZSk6Ci0gICAgICAgIGluY19maWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGxheWVyX3BhdGgsICdyZWNpcGVzLXRlc3QnLCByZWNpcGUsICd0ZXN0X3JlY2lwZS5pbmMnKQotICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiRGVsZXRpbmcgZmlsZTogJXMiICUgaW5jX2ZpbGUpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLnJlbW92ZShpbmNfZmlsZSkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgotICAgICAgICAgICAgICAgIHJhaXNlCi0KLSAgICAjIHdyaXRlIHRvIDxidWlsZGRpcj4vY29uZi9iYmxheWVycy5pbmMKLSAgICBkZWYgd3JpdGVfYmJsYXllcnNfY29uZmlnKHNlbGYsIGRhdGEpOgotICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiV3JpdGluZyB0bzogJXNcbiVzXG4iICUgKHNlbGYudGVzdGluY19iYmxheWVyc19wYXRoLCBkYXRhKSkKLSAgICAgICAgZnRvb2xzLndyaXRlX2ZpbGUoc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGgsIGRhdGEpCi0KLSAgICAjIGFwcGVuZCB0byA8YnVpbGRkaXI+L2NvbmYvYmJsYXllcnMuaW5jCi0gICAgZGVmIGFwcGVuZF9iYmxheWVyc19jb25maWcoc2VsZiwgZGF0YSk6Ci0gICAgICAgIHNlbGYubG9nLmRlYnVnKCJBcHBlbmRpbmcgdG86ICVzXG4lc1xuIiAlIChzZWxmLnRlc3RpbmNfYmJsYXllcnNfcGF0aCwgZGF0YSkpCi0gICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShzZWxmLnRlc3RpbmNfYmJsYXllcnNfcGF0aCwgZGF0YSkKLQotICAgICMgcmVtb3ZlIGRhdGEgZnJvbSA8YnVpbGRkaXI+L2NvbmYvYmJsYXllcnMuaW5jCi0gICAgZGVmIHJlbW92ZV9iYmxheWVyc19jb25maWcoc2VsZiwgZGF0YSk6Ci0gICAgICAgIHNlbGYubG9nLmRlYnVnKCJSZW1vdmluZyBmcm9tOiAlc1xuJXNcbiIgJSAoc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGgsIGRhdGEpKQotICAgICAgICBmdG9vbHMucmVtb3ZlX2Zyb21fZmlsZShzZWxmLnRlc3RpbmNfYmJsYXllcnNfcGF0aCwgZGF0YSkKLQotICAgICMgd3JpdGUgdG8gPGJ1aWxkZGlyPi9jb25mL21hY2hpbmUuaW5jCi0gICAgZGVmIHNldF9tYWNoaW5lX2NvbmZpZyhzZWxmLCBkYXRhKToKLSAgICAgICAgc2VsZi5sb2cuZGVidWcoIldyaXRpbmcgdG86ICVzXG4lc1xuIiAlIChzZWxmLm1hY2hpbmVpbmNfcGF0aCwgZGF0YSkpCi0gICAgICAgIGZ0b29scy53cml0ZV9maWxlKHNlbGYubWFjaGluZWluY19wYXRoLCBkYXRhKQotCi0KLWRlZiBnZXRfYXZhaWxhYmxlX21hY2hpbmVzKCk6Ci0gICAgIyBHZXQgYSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgbWFjaGluZXMKLSAgICBiYnBhdGggPSBnZXRfYmJfdmFyKCdCQlBBVEgnKS5zcGxpdCgnOicpCi0gICAgbWFjaGluZXMgPSBbXQotCi0gICAgZm9yIHBhdGggaW4gYmJwYXRoOgotICAgICAgICBmb3VuZF9tYWNoaW5lcyA9IGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4ocGF0aCwgJ2NvbmYnLCAnbWFjaGluZScsICcqLmNvbmYnKSkKLSAgICAgICAgaWYgZm91bmRfbWFjaGluZXM6Ci0gICAgICAgICAgICBmb3IgaSBpbiBmb3VuZF9tYWNoaW5lczoKLSAgICAgICAgICAgICAgICAjIGVnOiAnL2hvbWUvPHVzZXI+L3Bva3kvbWV0YS1pbnRlbC9jb25mL21hY2hpbmUvaW50ZWwtY29yZTItMzIuY29uZicKLSAgICAgICAgICAgICAgICBtYWNoaW5lcy5hcHBlbmQob3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGkpKVswXSkKLQotICAgIHJldHVybiBtYWNoaW5lcwotCi0KLWRlZiBnZXRfcmFuZG9tX21hY2hpbmUoKToKLSAgICAjIEdldCBhIHJhbmRvbSBtYWNoaW5lCi0gICAgcmV0dXJuIGNob2ljZShnZXRfYXZhaWxhYmxlX21hY2hpbmVzKCkpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYmxheWVycy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2JibGF5ZXJzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDY1OGM1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2JibGF5ZXJzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgb3MKLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgcmUKLWltcG9ydCBzaHV0aWwKLQotaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scwotZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKLWZyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBnZXRfYmJfdmFyCi1mcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKLQotY2xhc3MgQml0YmFrZUxheWVycyhvZVNlbGZUZXN0KToKLQotICAgIEB0ZXN0Y2FzZSg3NTYpCi0gICAgZGVmIHRlc3RfYml0YmFrZWxheWVyc19zaG93Y3Jvc3NkZXBlbmRzKHNlbGYpOgotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctY3Jvc3MtZGVwZW5kcycpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYXNwZWxsJyBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiTm8gZGVwZW5kZW5jaWVzIHdlcmUgc2hvd24uIGJpdGJha2UtbGF5ZXJzIHNob3ctY3Jvc3MtZGVwZW5kcyBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCi0KLSAgICBAdGVzdGNhc2UoODMpCi0gICAgZGVmIHRlc3RfYml0YmFrZWxheWVyc19zaG93bGF5ZXJzKHNlbGYpOgotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdtZXRhLXNlbGZ0ZXN0JyBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiTm8gbGF5ZXJzIHdlcmUgc2hvd24uIGJpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKLQotICAgIEB0ZXN0Y2FzZSg5MykKLSAgICBkZWYgdGVzdF9iaXRiYWtlbGF5ZXJzX3Nob3dhcHBlbmRzKHNlbGYpOgotICAgICAgICByZWNpcGUgPSAieGN1cnNvci10cmFuc3BhcmVudC10aGVtZSIKLSAgICAgICAgYmJfZmlsZSA9IHNlbGYuZ2V0X3JlY2lwZV9iYXNlbmFtZShyZWNpcGUpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1hcHBlbmRzJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiX2ZpbGUgaW4gcmVzdWx0Lm91dHB1dCwgbXNnPSIlcyBmaWxlIHdhcyBub3QgcmVjb2duaXNlZC4gYml0YmFrZS1sYXllcnMgc2hvdy1hcHBlbmRzIG91dHB1dDogJXMiICUgKGJiX2ZpbGUsIHJlc3VsdC5vdXRwdXQpKQotCi0gICAgQHRlc3RjYXNlKDkwKQotICAgIGRlZiB0ZXN0X2JpdGJha2VsYXllcnNfc2hvd292ZXJsYXllZChzZWxmKToKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LW92ZXJsYXllZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYXNwZWxsJyBpbiByZXN1bHQub3V0cHV0LCBtc2c9ImFzcGVsbCBvdmVybGF5ZWQgcmVjaXBlIHdhcyBub3QgcmVjb2duaXNlZCBiaXRiYWtlLWxheWVycyBzaG93LW92ZXJsYXllZCAlcyIgJSByZXN1bHQub3V0cHV0KQotCi0gICAgQHRlc3RjYXNlKDk1KQotICAgIGRlZiB0ZXN0X2JpdGJha2VsYXllcnNfZmxhdHRlbihzZWxmKToKLSAgICAgICAgcmVjaXBlID0gInhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUiCi0gICAgICAgIHJlY2lwZV9wYXRoID0gInJlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZSIKLSAgICAgICAgcmVjaXBlX2ZpbGUgPSBzZWxmLmdldF9yZWNpcGVfYmFzZW5hbWUocmVjaXBlKQotICAgICAgICB0ZXN0b3V0ZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd0ZXN0X2JpdGJha2VsYXllcnNfZmxhdHRlbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5pc2Rpcih0ZXN0b3V0ZGlyKSwgbXNnID0gInRlc3RfYml0YmFrZWxheWVyc19mbGF0dGVuIHNob3VsZCBub3QgZXhpc3QgYXQgdGhpcyBwb2ludCBpbiB0aW1lIikKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZXN0b3V0ZGlyKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIGZsYXR0ZW4gJXMnICUgdGVzdG91dGRpcikKLSAgICAgICAgYmJfZmlsZSA9IG9zLnBhdGguam9pbih0ZXN0b3V0ZGlyLCByZWNpcGVfcGF0aCwgcmVjaXBlX2ZpbGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShiYl9maWxlKSwgbXNnID0gIkNhbm5vdCBmaW5kIHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWVfMC4xLjEuYmIgaW4gdGhlIHRlc3RfYml0YmFrZWxheWVyc19mbGF0dGVuIGxvY2FsIGRpci4iKQotICAgICAgICBjb250ZW50cyA9IGZ0b29scy5yZWFkX2ZpbGUoYmJfZmlsZSkKLSAgICAgICAgZmluZF9pbl9jb250ZW50cyA9IHJlLnNlYXJjaCgiIyMjIyMgYmJhcHBlbmRlZCBmcm9tIG1ldGEtc2VsZnRlc3QgIyMjIyNcbiguKlxuKSppbmNsdWRlIHRlc3RfcmVjaXBlLmluYyIsIGNvbnRlbnRzKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluZF9pbl9jb250ZW50cywgbXNnID0gIkZsYXR0ZW5pbmcgbGF5ZXJzIGRpZCBub3Qgd29yay4gYml0YmFrZS1sYXllcnMgZmxhdHRlbiBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCi0KLSAgICBAdGVzdGNhc2UoMTE5NSkKLSAgICBkZWYgdGVzdF9iaXRiYWtlbGF5ZXJzX2FkZF9yZW1vdmUoc2VsZik6Ci0gICAgICAgIHRlc3RfbGF5ZXIgPSBvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcignQ09SRUJBU0UnKSwgJ21ldGEtc2tlbGV0b24nKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbWV0YS1za2VsZXRvbicsIHJlc3VsdC5vdXRwdXQsICJUaGlzIHRlc3QgY2Fubm90IHJ1biB3aXRoIG1ldGEtc2tlbGV0b24gaW4gYmJsYXllcnMuY29uZi4gYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMgb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIGFkZC1sYXllciAlcycgJSB0ZXN0X2xheWVyKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbignbWV0YS1za2VsZXRvbicsIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJTb21ldGhpbmcgd3JvbmcgaGFwcGVuZWQuIG1ldGEtc2tlbGV0b24gbGF5ZXIgd2FzIG5vdCBhZGRlZCB0byBjb25mL2JibGF5ZXJzLmNvbmYuICBiaXRiYWtlLWxheWVycyBzaG93LWxheWVycyBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICVzJyAlIHRlc3RfbGF5ZXIpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtZXRhLXNrZWxldG9uJywgcmVzdWx0Lm91dHB1dCwgbXNnID0gIm1ldGEtc2tlbGV0b24gc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkIGF0IHRoaXMgc3RlcC4gIGJpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBhZGQtbGF5ZXIgJXMnICUgdGVzdF9sYXllcikKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LWxheWVycycpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ21ldGEtc2tlbGV0b24nLCByZXN1bHQub3V0cHV0LCBtc2cgPSAiU29tZXRoaW5nIHdyb25nIGhhcHBlbmVkLiBtZXRhLXNrZWxldG9uIGxheWVyIHdhcyBub3QgYWRkZWQgdG8gY29uZi9iYmxheWVycy5jb25mLiAgYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMgb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL21ldGEtc2tlbGV0b24nKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbWV0YS1za2VsZXRvbicsIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJtZXRhLXNrZWxldG9uIHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCBhdCB0aGlzIHN0ZXAuICBiaXRiYWtlLWxheWVycyBzaG93LWxheWVycyBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCi0KLSAgICBAdGVzdGNhc2UoMTM4NCkKLSAgICBkZWYgdGVzdF9iaXRiYWtlbGF5ZXJzX3Nob3dyZWNpcGVzKHNlbGYpOgotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctcmVjaXBlcycpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2FzcGVsbDonLCByZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCdtdGQtdXRpbHM6JywgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignY29yZS1pbWFnZS1taW5pbWFsOicsIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1yZWNpcGVzIG10ZC11dGlscycpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ210ZC11dGlsczonLCByZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdhc3BlbGw6JywgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LXJlY2lwZXMgLWkgaW1hZ2UnKQotICAgICAgICBzZWxmLmFzc2VydEluKCdjb3JlLWltYWdlLW1pbmltYWwnLCByZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtdGQtdXRpbHM6JywgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LXJlY2lwZXMgLWkgY21ha2UscGtnY29uZmlnJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbignbGlicHJveHk6JywgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbXRkLXV0aWxzOicsIHJlc3VsdC5vdXRwdXQpICMgZG9lc24ndCBpbmhlcml0IGVpdGhlcgotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCd3Z2V0OicsIHJlc3VsdC5vdXRwdXQpICMgZG9lc24ndCBpbmhlcml0IGNtYWtlCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3dhZmZsZTonLCByZXN1bHQub3V0cHV0KSAjIGRvZXNuJ3QgaW5oZXJpdCBwa2djb25maWcKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LXJlY2lwZXMgLWkgbm9uZXhpc3RlbnRjbGFzcycsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQuc3RhdHVzLCAwLCAnYml0YmFrZS1sYXllcnMgc2hvdy1yZWNpcGVzIC1pIG5vbmV4aXN0ZW50Y2xhc3Mgc2hvdWxkIGhhdmUgZmFpbGVkJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbignRVJST1I6JywgcmVzdWx0Lm91dHB1dCkKLQotICAgIGRlZiBnZXRfcmVjaXBlX2Jhc2VuYW1lKHNlbGYsIHJlY2lwZSk6Ci0gICAgICAgIHJlY2lwZV9maWxlID0gIiIKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJiaXRiYWtlLWxheWVycyBzaG93LXJlY2lwZXMgLWYgJXMiICUgcmVjaXBlKQotICAgICAgICBmb3IgbGluZSBpbiByZXN1bHQub3V0cHV0LnNwbGl0bGluZXMoKToKLSAgICAgICAgICAgIGlmIHJlY2lwZSBpbiBsaW5lOgotICAgICAgICAgICAgICAgIHJlY2lwZV9maWxlID0gbGluZQotICAgICAgICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHJlY2lwZV9maWxlKSwgbXNnID0gIkNhbid0IGZpbmQgcmVjaXBlIGZpbGUgZm9yICVzIiAlIHJlY2lwZSkKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguYmFzZW5hbWUocmVjaXBlX2ZpbGUpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYnRlc3RzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvYmJ0ZXN0cy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZlMDlmNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYnRlc3RzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjc4ICswLDAgQEAKLWltcG9ydCBvcwotaW1wb3J0IHJlCi0KLWltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKLWZyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Ci1mcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgZ2V0X2JiX3ZhcnMKLWZyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQotCi1jbGFzcyBCaXRiYWtlVGVzdHMob2VTZWxmVGVzdCk6Ci0KLSAgICBkZWYgZ2V0bGluZShzZWxmLCByZXMsIGxpbmUpOgotICAgICAgICBmb3IgbCBpbiByZXMub3V0cHV0LnNwbGl0KCdcbicpOgotICAgICAgICAgICAgaWYgbGluZSBpbiBsOgotICAgICAgICAgICAgICAgIHJldHVybiBsCi0KLSAgICBAdGVzdGNhc2UoNzg5KQotICAgIGRlZiB0ZXN0X3J1bl9iaXRiYWtlX2Zyb21fZGlyXzEoc2VsZik6Ci0gICAgICAgIG9zLmNoZGlyKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnY29uZicpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpdGJha2UoJy1lJykuc3RhdHVzLCAwLCBtc2cgPSAiYml0YmFrZSBjb3VsZG4ndCBydW4gZnJvbSBcImNvbmZcIiBkaXIiKQotCi0gICAgQHRlc3RjYXNlKDc5MCkKLSAgICBkZWYgdGVzdF9ydW5fYml0YmFrZV9mcm9tX2Rpcl8yKHNlbGYpOgotICAgICAgICBteV9lbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQotICAgICAgICBteV9lbnZbJ0JCUEFUSCddID0gbXlfZW52WydCVUlMRERJUiddCi0gICAgICAgIG9zLmNoZGlyKG9zLnBhdGguZGlybmFtZShvcy5lbnZpcm9uWydCVUlMRERJUiddKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaXRiYWtlKCctZScsIGVudj1teV9lbnYpLnN0YXR1cywgMCwgbXNnID0gImJpdGJha2UgY291bGRuJ3QgcnVuIGZyb20gYnVpbGRkaXIiKQotCi0gICAgQHRlc3RjYXNlKDgwNikKLSAgICBkZWYgdGVzdF9ldmVudF9oYW5kbGVyKHNlbGYpOgotICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiSU5IRVJJVCArPSBcInRlc3RfZXZlbnRzXCIiKQotICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCdtNC1uYXRpdmUnKQotICAgICAgICBmaW5kX2J1aWxkX3N0YXJ0ZWQgPSByZS5zZWFyY2goIk5PVEU6IFRlc3QgZm9yIGJiXC5ldmVudFwuQnVpbGRTdGFydGVkKFxuLiopKk5PVEU6IEV4ZWN1dGluZyBSdW5RdWV1ZSBUYXNrcyIsIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgIGZpbmRfYnVpbGRfY29tcGxldGVkID0gcmUuc2VhcmNoKCJUYXNrcyBTdW1tYXJ5Oi4qKFxuLiopKk5PVEU6IFRlc3QgZm9yIGJiXC5ldmVudFwuQnVpbGRDb21wbGV0ZWQiLCByZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluZF9idWlsZF9zdGFydGVkLCBtc2cgPSAiTWF0Y2ggZmFpbGVkIGluOlxuJXMiICAlIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kX2J1aWxkX2NvbXBsZXRlZCwgbXNnID0gIk1hdGNoIGZhaWxlZCBpbjpcbiVzIiAlIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoJ1Rlc3QgZm9yIGJiLmV2ZW50LkludmFsaWRFdmVudCcgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gIlwiVGVzdCBmb3IgYmIuZXZlbnQuSW52YWxpZEV2ZW50XCIgbWVzc2FnZSBmb3VuZCBkdXJpbmcgYml0YmFrZSBwcm9jZXNzLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKLQotICAgIEB0ZXN0Y2FzZSgxMDMpCi0gICAgZGVmIHRlc3RfbG9jYWxfc3N0YXRlKHNlbGYpOgotICAgICAgICBiaXRiYWtlKCdtNC1uYXRpdmUnKQotICAgICAgICBiaXRiYWtlKCdtNC1uYXRpdmUgLWNjbGVhbicpCi0gICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJ200LW5hdGl2ZScpCi0gICAgICAgIGZpbmRfc2V0c2NlbmUgPSByZS5zZWFyY2goIm00LW5hdGl2ZS4qZG9fLipfc2V0c2NlbmUiLCByZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluZF9zZXRzY2VuZSwgbXNnID0gIk5vIFwibTQtbmF0aXZlLipkb18uKl9zZXRzY2VuZVwiIG1lc3NhZ2UgZm91bmQgZHVyaW5nIGJpdGJha2UgbTQtbmF0aXZlLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCApCi0KLSAgICBAdGVzdGNhc2UoMTA1KQotICAgIGRlZiB0ZXN0X2JpdGJha2VfaW52YWxpZF9yZWNpcGUoc2VsZik6Ci0gICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJy1iIGFzZGYnLCBpZ25vcmVfc3RhdHVzPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiRVJST1I6IFVuYWJsZSB0byBmaW5kIGFueSByZWNpcGUgZmlsZSBtYXRjaGluZyAnYXNkZiciIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJUaG91Z2ggYXNkZiByZWNpcGUgZG9lc24ndCBleGlzdCwgYml0YmFrZSBkaWRuJ3Qgb3V0cHV0IGFueSBlcnIuIG1lc3NhZ2UuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQotCi0gICAgQHRlc3RjYXNlKDEwNykKLSAgICBkZWYgdGVzdF9iaXRiYWtlX2ludmFsaWRfdGFyZ2V0KHNlbGYpOgotICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCdhc2RmJywgaWdub3JlX3N0YXR1cz1UcnVlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoIkVSUk9SOiBOb3RoaW5nIFBST1ZJREVTICdhc2RmJyIgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gIlRob3VnaCBubyAnYXNkZicgdGFyZ2V0IGV4aXN0cywgYml0YmFrZSBkaWRuJ3Qgb3V0cHV0IGFueSBlcnIuIG1lc3NhZ2UuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQotCi0gICAgQHRlc3RjYXNlKDEwNikKLSAgICBkZWYgdGVzdF93YXJuaW5nc19lcnJvcnMoc2VsZik6Ci0gICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJy1iIGFzZGYnLCBpZ25vcmVfc3RhdHVzPVRydWUpCi0gICAgICAgIGZpbmRfd2FybmluZ3MgPSByZS5zZWFyY2goIlN1bW1hcnk6IFRoZXJlIHcuezIsM30/IFsxLTldWzAtOV0qIFdBUk5JTkcgbWVzc2FnZXMqIHNob3duIiwgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgZmluZF9lcnJvcnMgPSByZS5zZWFyY2goIlN1bW1hcnk6IFRoZXJlIHcuezIsM30/IFsxLTldWzAtOV0qIEVSUk9SIG1lc3NhZ2VzKiBzaG93biIsIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kX3dhcm5pbmdzLCBtc2c9IkRpZCBub3QgZmluZCB0aGUgbXVtYmVyIG9mIHdhcm5pbmdzIGF0IHRoZSBlbmQgb2YgdGhlIGJ1aWxkOlxuIiArIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kX2Vycm9ycywgbXNnPSJEaWQgbm90IGZpbmQgdGhlIG11bWJlciBvZiBlcnJvcnMgYXQgdGhlIGVuZCBvZiB0aGUgYnVpbGQ6XG4iICsgcmVzdWx0Lm91dHB1dCkKLQotICAgIEB0ZXN0Y2FzZSgxMDgpCi0gICAgZGVmIHRlc3RfaW52YWxpZF9wYXRjaChzZWxmKToKLSAgICAgICAgIyBUaGlzIHBhdGNoIGFscmVhZHkgZXhpc3RzIGluIFNSQ19VUkkgc28gYWRkaW5nIGl0IGFnYWluIHdpbGwgY2F1c2UgdGhlCi0gICAgICAgICMgcGF0Y2ggdG8gZmFpbC4KLSAgICAgICAgc2VsZi53cml0ZV9yZWNpcGVpbmMoJ21hbicsICdTUkNfVVJJICs9ICJmaWxlOi8vbWFuLTEuNWgxLW1ha2UucGF0Y2giJykKLSAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIklOSEVSSVRfcmVtb3ZlID0gXCJyZXBvcnQtZXJyb3JcIiIpCi0gICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJ21hbiAtYyBwYXRjaCcsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKLSAgICAgICAgc2VsZi5kZWxldGVfcmVjaXBlaW5jKCdtYW4nKQotICAgICAgICBiaXRiYWtlKCctY2NsZWFuIG1hbicpCi0gICAgICAgIGxpbmUgPSBzZWxmLmdldGxpbmUocmVzdWx0LCAiRnVuY3Rpb24gZmFpbGVkOiBwYXRjaF9kb19wYXRjaCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsaW5lIGFuZCBsaW5lLnN0YXJ0c3dpdGgoIkVSUk9SOiIpLCBtc2cgPSAiUmVwZWF0ZWQgcGF0Y2ggYXBwbGljYXRpb24gZGlkbid0IGZhaWwuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQotCi0gICAgQHRlc3RjYXNlKDEzNTQpCi0gICAgZGVmIHRlc3RfZm9yY2VfdGFza18xKHNlbGYpOgotICAgICAgICAjIHRlc3QgMSBmcm9tIGJ1ZyA1ODc1Ci0gICAgICAgIHRlc3RfcmVjaXBlID0gJ3psaWInCi0gICAgICAgIHRlc3RfZGF0YSA9ICJNaWNyb3NvZnQgTWFkZSBObyBQcm9maXQgRnJvbSBBbnlvbmUncyBadW5lcyBZbyIKLSAgICAgICAgYmJfdmFycyA9IGdldF9iYl92YXJzKFsnRCcsICdQS0dERVNUJywgJ21hbmRpciddLCB0ZXN0X3JlY2lwZSkKLSAgICAgICAgaW1hZ2VfZGlyID0gYmJfdmFyc1snRCddCi0gICAgICAgIHBrZ3NwbGl0X2RpciA9IGJiX3ZhcnNbJ1BLR0RFU1QnXQotICAgICAgICBtYW5fZGlyID0gYmJfdmFyc1snbWFuZGlyJ10KLQotICAgICAgICBiaXRiYWtlKCctYyBjbGVhbiAlcycgJSB0ZXN0X3JlY2lwZSkKLSAgICAgICAgYml0YmFrZSgnLWMgcGFja2FnZSAtZiAlcycgJSB0ZXN0X3JlY2lwZSkKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiAlcycgJSB0ZXN0X3JlY2lwZSkKLQotICAgICAgICBtYW5fZmlsZSA9IG9zLnBhdGguam9pbihpbWFnZV9kaXIgKyBtYW5fZGlyLCAnbWFuMy96bGliLjMnKQotICAgICAgICBmdG9vbHMuYXBwZW5kX2ZpbGUobWFuX2ZpbGUsIHRlc3RfZGF0YSkKLSAgICAgICAgYml0YmFrZSgnLWMgcGFja2FnZSAtZiAlcycgJSB0ZXN0X3JlY2lwZSkKLQotICAgICAgICBtYW5fc3BsaXRfZmlsZSA9IG9zLnBhdGguam9pbihwa2dzcGxpdF9kaXIsICd6bGliLWRvYycgKyBtYW5fZGlyLCAnbWFuMy96bGliLjMnKQotICAgICAgICBtYW5fc3BsaXRfY29udGVudCA9IGZ0b29scy5yZWFkX2ZpbGUobWFuX3NwbGl0X2ZpbGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdF9kYXRhLCBtYW5fc3BsaXRfY29udGVudCwgJ1RoZSBtYW4gZmlsZSBoYXMgbm90IGNoYW5nZWQgaW4gcGFja2FnZXMtc3BsaXQuJykKLQotICAgICAgICByZXQgPSBiaXRiYWtlKHRlc3RfcmVjaXBlKQotICAgICAgICBzZWxmLmFzc2VydEluKCd0YXNrIGRvX3BhY2thZ2Vfd3JpdGVfcnBtOicsIHJldC5vdXRwdXQsICdUYXNrIGRvX3BhY2thZ2Vfd3JpdGVfcnBtIGRpZCBub3QgcmUtZXhlY3V0ZWQuJykKLQotICAgIEB0ZXN0Y2FzZSgxNjMpCi0gICAgZGVmIHRlc3RfZm9yY2VfdGFza18yKHNlbGYpOgotICAgICAgICAjIHRlc3QgMiBmcm9tIGJ1ZyA1ODc1Ci0gICAgICAgIHRlc3RfcmVjaXBlID0gJ3psaWInCi0KLSAgICAgICAgYml0YmFrZSh0ZXN0X3JlY2lwZSkKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiAlcycgJSB0ZXN0X3JlY2lwZSkKLQotICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCctQyBjb21waWxlICVzJyAlIHRlc3RfcmVjaXBlKQotICAgICAgICBsb29rX2Zvcl90YXNrcyA9IFsnZG9fY29tcGlsZTonLCAnZG9faW5zdGFsbDonLCAnZG9fcG9wdWxhdGVfc3lzcm9vdDonLCAnZG9fcGFja2FnZTonXQotICAgICAgICBmb3IgdGFzayBpbiBsb29rX2Zvcl90YXNrczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odGFzaywgcmVzdWx0Lm91dHB1dCwgbXNnPSJDb3VsZG4ndCBmaW5kICVzIHRhc2suIikKLQotICAgIEB0ZXN0Y2FzZSgxNjcpCi0gICAgZGVmIHRlc3RfYml0YmFrZV9nKHNlbGYpOgotICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCctZyBjb3JlLWltYWdlLW1pbmltYWwnKQotICAgICAgICBmb3IgZiBpbiBbJ3BuLWJ1aWxkbGlzdCcsICdyZWNpcGUtZGVwZW5kcy5kb3QnLCAndGFzay1kZXBlbmRzLmRvdCddOgotICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLnJlbW92ZSwgZikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdUYXNrIGRlcGVuZGVuY2llcyBzYXZlZCB0byBcJ3Rhc2stZGVwZW5kcy5kb3RcJycgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gIk5vIHRhc2sgZGVwZW5kZW5jeSBcInRhc2stZGVwZW5kcy5kb3RcIiBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIHRoZSBnaXZlbiB0YXNrIHRhcmdldC4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYnVzeWJveCcgaW4gZnRvb2xzLnJlYWRfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3Rhc2stZGVwZW5kcy5kb3QnKSksIG1zZyA9ICJObyBcImJ1c3lib3hcIiBkZXBlbmRlbmN5IGZvdW5kIGluIHRhc2stZGVwZW5kcy5kb3QgZmlsZS4iKQotCi0gICAgQHRlc3RjYXNlKDg5OSkKLSAgICBkZWYgdGVzdF9pbWFnZV9tYW5pZmVzdChzZWxmKToKLSAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS1taW5pbWFsJykKLSAgICAgICAgYmJfdmFycyA9IGdldF9iYl92YXJzKFsiREVQTE9ZX0RJUl9JTUFHRSIsICJJTUFHRV9MSU5LX05BTUUiXSwgImNvcmUtaW1hZ2UtbWluaW1hbCIpCi0gICAgICAgIGRlcGxveWRpciA9IGJiX3ZhcnNbIkRFUExPWV9ESVJfSU1BR0UiXQotICAgICAgICBpbWFnZW5hbWUgPSBiYl92YXJzWyJJTUFHRV9MSU5LX05BTUUiXQotICAgICAgICBtYW5pZmVzdCA9IG9zLnBhdGguam9pbihkZXBsb3lkaXIsIGltYWdlbmFtZSArICIubWFuaWZlc3QiKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2xpbmsobWFuaWZlc3QpLCBtc2c9Ik5vIG1hbmlmZXN0IGZpbGUgY3JlYXRlZCBmb3IgaW1hZ2UuIEl0IHNob3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBpbiAlcyIgJSBtYW5pZmVzdCkKLQotICAgIEB0ZXN0Y2FzZSgxNjgpCi0gICAgZGVmIHRlc3RfaW52YWxpZF9yZWNpcGVfc3JjX3VyaShzZWxmKToKLSAgICAgICAgZGF0YSA9ICdTUkNfVVJJID0gImZpbGU6Ly9pbnZhbGlkIicKLSAgICAgICAgc2VsZi53cml0ZV9yZWNpcGVpbmMoJ21hbicsIGRhdGEpCi0gICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIkRMX0RJUiA9IFwiJHtUT1BESVJ9L2Rvd25sb2FkLXNlbGZ0ZXN0XCIKLVNTVEFURV9ESVIgPSBcIiR7VE9QRElSfS9kb3dubG9hZC1zZWxmdGVzdFwiCi1JTkhFUklUX3JlbW92ZSA9IFwicmVwb3J0LWVycm9yXCIKLSIiIikKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgImRvd25sb2FkLXNlbGZ0ZXN0IikpCi0KLSAgICAgICAgYml0YmFrZSgnLWNjbGVhbmFsbCBtYW4nKQotICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCctYyBmZXRjaCBtYW4nLCBpZ25vcmVfc3RhdHVzPVRydWUpCi0gICAgICAgIGJpdGJha2UoJy1jY2xlYW5hbGwgbWFuJykKLSAgICAgICAgc2VsZi5kZWxldGVfcmVjaXBlaW5jKCdtYW4nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDEsIG1zZz0iQ29tbWFuZCBzdWNjZWRlZCB3aGVuIGl0IHNob3VsZCBoYXZlIGZhaWxlZC4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnRmV0Y2hlciBmYWlsdXJlOiBVbmFibGUgdG8gZmluZCBmaWxlIGZpbGU6Ly9pbnZhbGlkIGFueXdoZXJlLiBUaGUgcGF0aHMgdGhhdCB3ZXJlIHNlYXJjaGVkIHdlcmU6JyBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiXCJpbnZhbGlkXCIgZmlsZSBcCi1kb2Vzbid0IGV4aXN0LCB5ZXQgbm8gZXJyb3IgbWVzc2FnZSBlbmNvdW50ZXJlZC4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgIGxpbmUgPSBzZWxmLmdldGxpbmUocmVzdWx0LCAnRmV0Y2hlciBmYWlsdXJlIGZvciBVUkw6IFwnZmlsZTovL2ludmFsaWRcJy4gVW5hYmxlIHRvIGZldGNoIFVSTCBmcm9tIGFueSBzb3VyY2UuJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmUgYW5kIGxpbmUuc3RhcnRzd2l0aCgiRVJST1I6IiksIG1zZyA9ICJcImludmFsaWRcIiBmaWxlIFwKLWRvZXNuJ3QgZXhpc3QsIHlldCBmZXRjaGVyIGRpZG4ndCByZXBvcnQgYW55IGVycm9yLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKLQotICAgIEB0ZXN0Y2FzZSgxNzEpCi0gICAgZGVmIHRlc3RfcmVuYW1lX2Rvd25sb2FkZWRfZmlsZShzZWxmKToKLSAgICAgICAgIyBUT0RPIHVuaXF1ZSBkbGRpciBpbnN0ZWFkIG9mIHVzaW5nIGNsZWFuYWxsCi0gICAgICAgICMgVE9ETzogbmVlZCB0byBzZXQgc3N0YXRlZGlyPwotICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiJETF9ESVIgPSBcIiR7VE9QRElSfS9kb3dubG9hZC1zZWxmdGVzdFwiCi1TU1RBVEVfRElSID0gXCIke1RPUERJUn0vZG93bmxvYWQtc2VsZnRlc3RcIgotIiIiKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAiZG93bmxvYWQtc2VsZnRlc3QiKSkKLQotICAgICAgICBkYXRhID0gJ1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9hc3BlbGwvYXNwZWxsLSR7UFZ9LnRhci5nejtkb3dubG9hZGZpbGVuYW1lPXRlc3QtYXNwZWxsLnRhci5neiInCi0gICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCdhc3BlbGwnLCBkYXRhKQotICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCctZiAtYyBmZXRjaCBhc3BlbGwnLCBpZ25vcmVfc3RhdHVzPVRydWUpCi0gICAgICAgIHNlbGYuZGVsZXRlX3JlY2lwZWluYygnYXNwZWxsJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc3RhdHVzLCAwLCBtc2cgPSAiQ291bGRuJ3QgZmV0Y2ggYXNwZWxsLiAlcyIgJSByZXN1bHQub3V0cHV0KQotICAgICAgICBkbF9kaXIgPSBnZXRfYmJfdmFyKCJETF9ESVIiKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGRsX2RpciwgJ3Rlc3QtYXNwZWxsLnRhci5neicpKSwgbXNnID0gIkZpbGUgcmVuYW1lIGZhaWxlZC4gTm8gY29ycmVzcG9uZGluZyB0ZXN0LWFzcGVsbC50YXIuZ3ogZmlsZSBmb3VuZCB1bmRlciAlcyIgJSBkbF9kaXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZGxfZGlyLCAndGVzdC1hc3BlbGwudGFyLmd6LmRvbmUnKSksICJGaWxlIHJlbmFtZSBmYWlsZWQuIE5vIGNvcnJlc3BvbmRpbmcgdGVzdC1hc3BlbGwudGFyLmd6LmRvbmUgZmlsZSBmb3VuZCB1bmRlciAlcyIgJSBkbF9kaXIpCi0KLSAgICBAdGVzdGNhc2UoMTAyOCkKLSAgICBkZWYgdGVzdF9lbnZpcm9ubWVudChzZWxmKToKLSAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIlRFU1RfRU5WPVwibG9jYWxjb25mXCIiKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UgLWUgfCBncmVwIFRFU1RfRU5WPScpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnbG9jYWxjb25mJyBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiYml0YmFrZSBkaWRuJ3QgcmVwb3J0IGFueSB2YWx1ZSBmb3IgVEVTVF9FTlYgdmFyaWFibGUuIFRvIHRlc3QsIHJ1biAnYml0YmFrZSAtZSB8IGdyZXAgVEVTVF9FTlY9JyIpCi0KLSAgICBAdGVzdGNhc2UoMTAyOSkKLSAgICBkZWYgdGVzdF9kcnlfcnVuKHNlbGYpOgotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UgLW4gbTQtbmF0aXZlJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCByZXN1bHQuc3RhdHVzLCAiYml0YmFrZSBkcnkgcnVuIGRpZG4ndCBydW4gYXMgZXhwZWN0ZWQuICVzIiAlIHJlc3VsdC5vdXRwdXQpCi0KLSAgICBAdGVzdGNhc2UoMTAzMCkKLSAgICBkZWYgdGVzdF9qdXN0X3BhcnNlKHNlbGYpOgotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UgLXAnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJlc3VsdC5zdGF0dXMsICJlcnJvcnMgZW5jb3VudGVyZWQgd2hlbiBwYXJzaW5nIHJlY2lwZXMuICVzIiAlIHJlc3VsdC5vdXRwdXQpCi0KLSAgICBAdGVzdGNhc2UoMTAzMSkKLSAgICBkZWYgdGVzdF92ZXJzaW9uKHNlbGYpOgotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UgLXMgfCBncmVwIHdnZXQnKQotICAgICAgICBmaW5kID0gcmUuc2VhcmNoKCJ3Z2V0ICo6KFswLTlhLXpBLVpcLlwtXSspIiwgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmQsICJObyB2ZXJzaW9uIHJldHVybmVkIGZvciBzZWFyY2hlZCByZWNpcGUuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQotCi0gICAgQHRlc3RjYXNlKDEwMzIpCi0gICAgZGVmIHRlc3RfcHJlZmlsZShzZWxmKToKLSAgICAgICAgcHJlY29uZiA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnY29uZi9wcmVmaWxlLmNvbmYnKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHByZWNvbmYpCi0gICAgICAgIGZ0b29scy53cml0ZV9maWxlKHByZWNvbmYgLCJURVNUX1BSRUZJTEU9XCJwcmVmaWxlXCIiKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UgLXIgY29uZi9wcmVmaWxlLmNvbmYgLWUgfCBncmVwIFRFU1RfUFJFRklMRT0nKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3ByZWZpbGUnIGluIHJlc3VsdC5vdXRwdXQsICJQcmVjb25maWd1cmUgZmlsZSBcInByZWZpbGUuY29uZlwid2FzIG5vdCB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uICIpCi0gICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCJURVNUX1BSRUZJTEU9XCJsb2NhbGNvbmZcIiIpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZSAtciBjb25mL3ByZWZpbGUuY29uZiAtZSB8IGdyZXAgVEVTVF9QUkVGSUxFPScpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnbG9jYWxjb25mJyBpbiByZXN1bHQub3V0cHV0LCAiUHJlY29uZmlndXJlIGZpbGUgXCJwcmVmaWxlLmNvbmZcIndhcyBub3QgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiIpCi0KLSAgICBAdGVzdGNhc2UoMTAzMykKLSAgICBkZWYgdGVzdF9wb3N0ZmlsZShzZWxmKToKLSAgICAgICAgcG9zdGNvbmYgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ2NvbmYvcG9zdGZpbGUuY29uZicpCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAocG9zdGNvbmYpCi0gICAgICAgIGZ0b29scy53cml0ZV9maWxlKHBvc3Rjb25mICwgIlRFU1RfUE9TVEZJTEU9XCJwb3N0ZmlsZVwiIikKLSAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIlRFU1RfUE9TVEZJTEU9XCJsb2NhbGNvbmZcIiIpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZSAtUiBjb25mL3Bvc3RmaWxlLmNvbmYgLWUgfCBncmVwIFRFU1RfUE9TVEZJTEU9JykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdwb3N0ZmlsZScgaW4gcmVzdWx0Lm91dHB1dCwgIlBvc3Rjb25maWd1cmUgZmlsZSBcInBvc3RmaWxlLmNvbmZcIndhcyBub3QgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiIpCi0KLSAgICBAdGVzdGNhc2UoMTAzNCkKLSAgICBkZWYgdGVzdF9jaGVja3VyaShzZWxmKToKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1jIGNoZWNrdXJpIG00JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCByZXN1bHQuc3RhdHVzLCBtc2cgPSAiXCJjaGVja3VyaVwiIHRhc2sgd2FzIG5vdCBleGVjdXRlZC4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCi0KLSAgICBAdGVzdGNhc2UoMTAzNSkKLSAgICBkZWYgdGVzdF9jb250aW51ZShzZWxmKToKLSAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiRExfRElSID0gXCIke1RPUERJUn0vZG93bmxvYWQtc2VsZnRlc3RcIgotU1NUQVRFX0RJUiA9IFwiJHtUT1BESVJ9L2Rvd25sb2FkLXNlbGZ0ZXN0XCIKLUlOSEVSSVRfcmVtb3ZlID0gXCJyZXBvcnQtZXJyb3JcIgotIiIiKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAiZG93bmxvYWQtc2VsZnRlc3QiKSkKLSAgICAgICAgc2VsZi53cml0ZV9yZWNpcGVpbmMoJ21hbicsIlxuZG9fZmFpbF90YXNrICgpIHtcbmV4aXQgMSBcbn1cblxuYWRkdGFzayBkb19mYWlsX3Rhc2sgYmVmb3JlIGRvX2ZldGNoXG4iICkKLSAgICAgICAgcnVuQ21kKCdiaXRiYWtlIC1jIGNsZWFuYWxsIG1hbiB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJykKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1jIHVucGFjayAtayBtYW4geGN1cnNvci10cmFuc3BhcmVudC10aGVtZScsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKLSAgICAgICAgZXJyb3Jwb3MgPSByZXN1bHQub3V0cHV0LmZpbmQoJ0VSUk9SOiBGdW5jdGlvbiBmYWlsZWQ6IGRvX2ZhaWxfdGFzaycpCi0gICAgICAgIG1hbnZlciA9IHJlLnNlYXJjaCgiTk9URTogcmVjaXBlIHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtKC4qPyk6IHRhc2sgZG9fdW5wYWNrOiBTdGFydGVkIiwgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgY29udGludWVwb3MgPSByZXN1bHQub3V0cHV0LmZpbmQoJ05PVEU6IHJlY2lwZSB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLSVzOiB0YXNrIGRvX3VucGFjazogU3RhcnRlZCcgJSBtYW52ZXIuZ3JvdXAoMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhlcnJvcnBvcyxjb250aW51ZXBvcywgbXNnID0gImJpdGJha2UgZGlkbid0IHBhc3MgZG9fZmFpbF90YXNrLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKLQotICAgIEB0ZXN0Y2FzZSgxMTE5KQotICAgIGRlZiB0ZXN0X25vbl9ncGx2MyhzZWxmKToKLSAgICAgICAgc2VsZi53cml0ZV9jb25maWcoJ0lOQ09NUEFUSUJMRV9MSUNFTlNFID0gIkdQTHYzIicpCi0gICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJ3NlbGZ0ZXN0LWVkJywgaWdub3JlX3N0YXR1cz1UcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsICJCaXRiYWtlIGZhaWxlZCwgZXhpdCBjb2RlICVzLCBvdXRwdXQgJXMiICUgKHJlc3VsdC5zdGF0dXMsIHJlc3VsdC5vdXRwdXQpKQotICAgICAgICBsaWNfZGlyID0gZ2V0X2JiX3ZhcignTElDRU5TRV9ESVJFQ1RPUlknKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihsaWNfZGlyLCAnc2VsZnRlc3QtZWQvZ2VuZXJpY19HUEx2MycpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihsaWNfZGlyLCAnc2VsZnRlc3QtZWQvZ2VuZXJpY19HUEx2MicpKSkKLQotICAgIEB0ZXN0Y2FzZSgxNDIyKQotICAgIGRlZiB0ZXN0X3NldHNjZW5lX29ubHkoc2VsZik6Ci0gICAgICAgICIiIiBCaXRiYWtlIG9wdGlvbiB0byByZXN0b3JlIGZyb20gc3N0YXRlIG9ubHkgd2l0aGluIGEgYnVpbGQgKGkuZS4gZXhlY3V0ZSBubyByZWFsIHRhc2tzLCBvbmx5IHNldHNjZW5lKSIiIgotICAgICAgICB0ZXN0X3JlY2lwZSA9ICdlZCcKLQotICAgICAgICBiaXRiYWtlKHRlc3RfcmVjaXBlKQotICAgICAgICBiaXRiYWtlKCctYyBjbGVhbiAlcycgJSB0ZXN0X3JlY2lwZSkKLSAgICAgICAgcmV0ID0gYml0YmFrZSgnLS1zZXRzY2VuZS1vbmx5ICVzJyAlIHRlc3RfcmVjaXBlKQotCi0gICAgICAgIHRhc2tzID0gcmUuZmluZGFsbChyJ3Rhc2tccysoZG9fXFMrKTonLCByZXQub3V0cHV0KQotCi0gICAgICAgIGZvciB0YXNrIGluIHRhc2tzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignX3NldHNjZW5lJywgdGFzaywgJ0EgdGFzayBkaWZmZXJlbnQgZnJvbSBfc2V0c2NlbmUgcmFuOiAlcy5cbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFeGVjdXRlZCB0YXNrcyB3ZXJlOiAlcycgJSAodGFzaywgc3RyKHRhc2tzKSkpCi0KLSAgICBAdGVzdGNhc2UoMTQyNSkKLSAgICBkZWYgdGVzdF9iYmFwcGVuZF9vcmRlcihzZWxmKToKLSAgICAgICAgIiIiIEJpdGJha2Ugc2hvdWxkIGJiYXBwZW5kIHRvIHJlY2lwZSBpbiBhIHByZWRpY3RhYmxlIG9yZGVyICIiIgotICAgICAgICB0ZXN0X3JlY2lwZSA9ICdlZCcKLSAgICAgICAgYmJfdmFycyA9IGdldF9iYl92YXJzKFsnU1VNTUFSWScsICdQViddLCB0ZXN0X3JlY2lwZSkKLSAgICAgICAgdGVzdF9yZWNpcGVfc3VtbWFyeV9iZWZvcmUgPSBiYl92YXJzWydTVU1NQVJZJ10KLSAgICAgICAgdGVzdF9yZWNpcGVfcHYgPSBiYl92YXJzWydQViddCi0gICAgICAgIHJlY2lwZV9hcHBlbmRfZmlsZSA9IHRlc3RfcmVjaXBlICsgJ18nICsgdGVzdF9yZWNpcGVfcHYgKyAnLmJiYXBwZW5kJwotICAgICAgICBleHBlY3RlZF9yZWNpcGVfc3VtbWFyeSA9IHRlc3RfcmVjaXBlX3N1bW1hcnlfYmVmb3JlCi0KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6Ci0gICAgICAgICAgICByZWNpcGVfYXBwZW5kX2RpciA9IHRlc3RfcmVjaXBlICsgJ190ZXN0XycgKyBzdHIoaSkKLSAgICAgICAgICAgIHJlY2lwZV9hcHBlbmRfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RsYXllcl9wYXRoLCAncmVjaXBlcy10ZXN0JywgcmVjaXBlX2FwcGVuZF9kaXIsIHJlY2lwZV9hcHBlbmRfZmlsZSkKLSAgICAgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihzZWxmLnRlc3RsYXllcl9wYXRoLCAncmVjaXBlcy10ZXN0JywgcmVjaXBlX2FwcGVuZF9kaXIpKQotICAgICAgICAgICAgZmVhdHVyZSA9ICdTVU1NQVJZICs9ICIlcyJcbicgJSBpCi0gICAgICAgICAgICBmdG9vbHMud3JpdGVfZmlsZShyZWNpcGVfYXBwZW5kX3BhdGgsIGZlYXR1cmUpCi0gICAgICAgICAgICBleHBlY3RlZF9yZWNpcGVfc3VtbWFyeSArPSAnICVzJyAlIGkKLQotICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdybSAtcmYgJXMnICUgb3MucGF0aC5qb2luKHNlbGYudGVzdGxheWVyX3BhdGgsICdyZWNpcGVzLXRlc3QnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9yZWNpcGUgKyAnX3Rlc3RfKicpKQotCi0gICAgICAgIHRlc3RfcmVjaXBlX3N1bW1hcnlfYWZ0ZXIgPSBnZXRfYmJfdmFyKCdTVU1NQVJZJywgdGVzdF9yZWNpcGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfcmVjaXBlX3N1bW1hcnksIHRlc3RfcmVjaXBlX3N1bW1hcnlfYWZ0ZXIpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9idWlsZGhpc3RvcnkucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9idWlsZGhpc3RvcnkucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwOGMzOWMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvYnVpbGRoaXN0b3J5LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotaW1wb3J0IG9zCi1pbXBvcnQgcmUKLWltcG9ydCBkYXRldGltZQotCi1mcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAotZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBiaXRiYWtlLCBnZXRfYmJfdmFycwotZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCi0KLQotY2xhc3MgQnVpbGRoaXN0b3J5QmFzZShvZVNlbGZUZXN0KToKLQotICAgIGRlZiBjb25maWdfYnVpbGRoaXN0b3J5KHNlbGYsIHRtcF9iaF9sb2NhdGlvbj1GYWxzZSk6Ci0gICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhbJ1VTRVJfQ0xBU1NFUycsICdJTkhFUklUJ10pCi0gICAgICAgIGlmIChub3QgJ2J1aWxkaGlzdG9yeScgaW4gYmJfdmFyc1snVVNFUl9DTEFTU0VTJ10pIGFuZCAobm90ICdidWlsZGhpc3RvcnknIGluIGJiX3ZhcnNbJ0lOSEVSSVQnXSk6Ci0gICAgICAgICAgICBhZGRfYnVpbGRoaXN0b3J5X2NvbmZpZyA9ICdJTkhFUklUICs9ICJidWlsZGhpc3RvcnkiXG5CVUlMREhJU1RPUllfQ09NTUlUID0gIjEiJwotICAgICAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGFkZF9idWlsZGhpc3RvcnlfY29uZmlnKQotCi0gICAgICAgIGlmIHRtcF9iaF9sb2NhdGlvbjoKLSAgICAgICAgICAgICMgVXNpbmcgYSB0ZW1wb3JhcnkgYnVpbGRoaXN0b3J5IGxvY2F0aW9uIGZvciB0ZXN0aW5nCi0gICAgICAgICAgICB0bXBfYmhfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICJ0bXBfYnVpbGRoaXN0b3J5XyVzIiAlIGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCclWSVtJWQlSCVNJVMnKSkKLSAgICAgICAgICAgIGJ1aWxkaGlzdG9yeV9kaXJfY29uZmlnID0gIkJVSUxESElTVE9SWV9ESVIgPSBcIiVzXCIiICUgdG1wX2JoX2RpcgotICAgICAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGJ1aWxkaGlzdG9yeV9kaXJfY29uZmlnKQotICAgICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0bXBfYmhfZGlyKQotCi0gICAgZGVmIHJ1bl9idWlsZGhpc3Rvcnlfb3BlcmF0aW9uKHNlbGYsIHRhcmdldCwgZ2xvYmFsX2NvbmZpZz0nJywgdGFyZ2V0X2NvbmZpZz0nJywgY2hhbmdlX2JoX2xvY2F0aW9uPUZhbHNlLCBleHBlY3RfZXJyb3I9RmFsc2UsIGVycm9yX3JlZ2V4PScnKToKLSAgICAgICAgaWYgY2hhbmdlX2JoX2xvY2F0aW9uOgotICAgICAgICAgICAgdG1wX2JoX2xvY2F0aW9uID0gVHJ1ZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdG1wX2JoX2xvY2F0aW9uID0gRmFsc2UKLSAgICAgICAgc2VsZi5jb25maWdfYnVpbGRoaXN0b3J5KHRtcF9iaF9sb2NhdGlvbikKLQotICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZ2xvYmFsX2NvbmZpZykKLSAgICAgICAgc2VsZi5hcHBlbmRfcmVjaXBlaW5jKHRhcmdldCwgdGFyZ2V0X2NvbmZpZykKLSAgICAgICAgYml0YmFrZSgiLWNjbGVhbiAlcyIgJSB0YXJnZXQpCi0gICAgICAgIHJlc3VsdCA9IGJpdGJha2UodGFyZ2V0LCBpZ25vcmVfc3RhdHVzPVRydWUpCi0gICAgICAgIHNlbGYucmVtb3ZlX2NvbmZpZyhnbG9iYWxfY29uZmlnKQotICAgICAgICBzZWxmLnJlbW92ZV9yZWNpcGVpbmModGFyZ2V0LCB0YXJnZXRfY29uZmlnKQotCi0gICAgICAgIGlmIGV4cGVjdF9lcnJvcjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgbXNnPSJFcnJvciBleHBlY3RlZCBmb3IgZ2xvYmFsIGNvbmZpZyAnJXMnIGFuZCB0YXJnZXQgY29uZmlnICclcyciICUgKGdsb2JhbF9jb25maWcsIHRhcmdldF9jb25maWcpKQotICAgICAgICAgICAgc2VhcmNoX2Zvcl9lcnJvciA9IHJlLnNlYXJjaChlcnJvcl9yZWdleCwgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWFyY2hfZm9yX2Vycm9yLCBtc2c9IkNvdWxkIG5vdCBmaW5kIGRlc2lyZWQgZXJyb3IgaW4gb3V0cHV0OiAlcyAoJXMpIiAlIChlcnJvcl9yZWdleCwgcmVzdWx0Lm91dHB1dCkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsIG1zZz0iQ29tbWFuZCAnYml0YmFrZSAlcycgaGFzIGZhaWxlZCB1bmV4cGVjdGVkbHk6ICVzIiAlICh0YXJnZXQsIHJlc3VsdC5vdXRwdXQpKQotCi0gICAgIyBObyB0ZXN0cyBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGJhc2UgY2xhc3MuCi0gICAgIyBQbGVhc2UgY3JlYXRlIGEgbmV3IGNsYXNzIHRoYXQgaW5oZXJpdCB0aGlzIG9uZSwgb3IgdXNlIG9uZSBvZiB0aG9zZSBhbHJlYWR5IGF2YWlsYWJsZSBmb3IgYWRkaW5nIHRlc3RzLgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvYnVpbGRvcHRpb25zLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvYnVpbGRvcHRpb25zLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmUwMjAzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2J1aWxkb3B0aW9ucy5weQorKysgL2Rldi9udWxsCkBAIC0xLDE4NCArMCwwIEBACi1pbXBvcnQgb3MKLWltcG9ydCByZQotaW1wb3J0IGdsb2IgYXMgZwotaW1wb3J0IHNodXRpbAotaW1wb3J0IHRlbXBmaWxlCi1mcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAotZnJvbSBvZXFhLnNlbGZ0ZXN0LmJ1aWxkaGlzdG9yeSBpbXBvcnQgQnVpbGRoaXN0b3J5QmFzZQotZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIGdldF9iYl92YXJzCi1pbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCi1mcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKLQotY2xhc3MgSW1hZ2VPcHRpb25zVGVzdHMob2VTZWxmVGVzdCk6Ci0KLSAgICBAdGVzdGNhc2UoNzYxKQotICAgIGRlZiB0ZXN0X2luY3JlbWVudGFsX2ltYWdlX2dlbmVyYXRpb24oc2VsZik6Ci0gICAgICAgIGltYWdlX3BrZ3R5cGUgPSBnZXRfYmJfdmFyKCJJTUFHRV9QS0dUWVBFIikKLSAgICAgICAgaWYgaW1hZ2VfcGtndHlwZSAhPSAncnBtJzoKLSAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ05vdCB1c2luZyBSUE0gYXMgbWFpbiBwYWNrYWdlIGZvcm1hdCcpCi0gICAgICAgIGJpdGJha2UoIi1jIGNsZWFuIGNvcmUtaW1hZ2UtbWluaW1hbCIpCi0gICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCdJTkNfUlBNX0lNQUdFX0dFTiA9ICIxIicpCi0gICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZygnSU1BR0VfRkVBVFVSRVMgKz0gInNzaC1zZXJ2ZXItb3BlbnNzaCInKQotICAgICAgICBiaXRiYWtlKCJjb3JlLWltYWdlLW1pbmltYWwiKQotICAgICAgICBsb2dfZGF0YV9maWxlID0gb3MucGF0aC5qb2luKGdldF9iYl92YXIoIldPUktESVIiLCAiY29yZS1pbWFnZS1taW5pbWFsIiksICJ0ZW1wL2xvZy5kb19yb290ZnMiKQotICAgICAgICBsb2dfZGF0YV9jcmVhdGVkID0gZnRvb2xzLnJlYWRfZmlsZShsb2dfZGF0YV9maWxlKQotICAgICAgICBpbmNyZW1lbnRhbF9jcmVhdGVkID0gcmUuc2VhcmNoKCJJbnN0YWxsaW5nICA6IHBhY2thZ2Vncm91cC1jb3JlLXNzaC1vcGVuc3NoIiwgbG9nX2RhdGFfY3JlYXRlZCkKLSAgICAgICAgc2VsZi5yZW1vdmVfY29uZmlnKCdJTUFHRV9GRUFUVVJFUyArPSAic3NoLXNlcnZlci1vcGVuc3NoIicpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmNyZW1lbnRhbF9jcmVhdGVkLCBtc2cgPSAiTWF0Y2ggZmFpbGVkIGluOlxuJXMiICUgbG9nX2RhdGFfY3JlYXRlZCkKLSAgICAgICAgYml0YmFrZSgiY29yZS1pbWFnZS1taW5pbWFsIikKLSAgICAgICAgbG9nX2RhdGFfcmVtb3ZlZCA9IGZ0b29scy5yZWFkX2ZpbGUobG9nX2RhdGFfZmlsZSkKLSAgICAgICAgaW5jcmVtZW50YWxfcmVtb3ZlZCA9IHJlLnNlYXJjaCgiRXJhc2luZyAgICAgOiBwYWNrYWdlZ3JvdXAtY29yZS1zc2gtb3BlbnNzaCIsIGxvZ19kYXRhX3JlbW92ZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmNyZW1lbnRhbF9yZW1vdmVkLCBtc2cgPSAiTWF0Y2ggZmFpbGVkIGluOlxuJXMiICUgbG9nX2RhdGFfcmVtb3ZlZCkKLQotICAgIEB0ZXN0Y2FzZSgyODYpCi0gICAgZGVmIHRlc3RfY2NhY2hlX3Rvb2woc2VsZik6Ci0gICAgICAgIGJpdGJha2UoImNjYWNoZS1uYXRpdmUiKQotICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWydTWVNST09UX0RFU1RESVInLCAnYmluZGlyJ10sICdjY2FjaGUtbmF0aXZlJykKLSAgICAgICAgcCA9IGJiX3ZhcnNbJ1NZU1JPT1RfREVTVERJUiddICsgYmJfdmFyc1snYmluZGlyJ10gKyAiLyIgKyAiY2NhY2hlIgotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUocCksIG1zZyA9ICJObyBjY2FjaGUgZm91bmQgKCVzKSIgJSBwKQotICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygnSU5IRVJJVCArPSAiY2NhY2hlIicpCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4gbTQnKQotICAgICAgICBiaXRiYWtlKCJtNCAtZiAtYyBjb21waWxlIikKLSAgICAgICAgbG9nX2NvbXBpbGUgPSBvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcigiV09SS0RJUiIsIm00IiksICJ0ZW1wL2xvZy5kb19jb21waWxlIikKLSAgICAgICAgcmVzID0gcnVuQ21kKCJncmVwIGNjYWNoZSAlcyIgJSBsb2dfY29tcGlsZSwgaWdub3JlX3N0YXR1cz1UcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJlcy5zdGF0dXMsIG1zZz0iTm8gbWF0Y2ggZm9yIGNjYWNoZSBpbiBtNCBsb2cuZG9fY29tcGlsZS4gRm9yIGZ1cnRoZXIgZGV0YWlsczogJXMiICUgbG9nX2NvbXBpbGUpCi0KLSAgICBAdGVzdGNhc2UoMTQzNSkKLSAgICBkZWYgdGVzdF9yZWFkX29ubHlfaW1hZ2Uoc2VsZik6Ci0gICAgICAgIGRpc3Ryb19mZWF0dXJlcyA9IGdldF9iYl92YXIoJ0RJU1RST19GRUFUVVJFUycpCi0gICAgICAgIGlmIG5vdCAoJ3gxMScgaW4gZGlzdHJvX2ZlYXR1cmVzIGFuZCAnb3BlbmdsJyBpbiBkaXN0cm9fZmVhdHVyZXMpOgotICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnY29yZS1pbWFnZS1zYXRvIHJlcXVpcmVzIHgxMSBhbmQgb3BlbmdsIGluIGRpc3RybyBmZWF0dXJlcycpCi0gICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCdJTUFHRV9GRUFUVVJFUyArPSAicmVhZC1vbmx5LXJvb3RmcyInKQotICAgICAgICBiaXRiYWtlKCJjb3JlLWltYWdlLXNhdG8iKQotICAgICAgICAjIGRvX2ltYWdlIHdpbGwgZmFpbCBpZiB0aGVyZSBhcmUgYW55IHBlbmRpbmcgcG9zdGluc3RzCi0KLWNsYXNzIERpc2tNb25UZXN0KG9lU2VsZlRlc3QpOgotCi0gICAgQHRlc3RjYXNlKDI3NykKLSAgICBkZWYgdGVzdF9zdG9wdGFza19iZWhhdmlvcihzZWxmKToKLSAgICAgICAgc2VsZi53cml0ZV9jb25maWcoJ0JCX0RJU0tNT05fRElSUyA9ICJTVE9QVEFTS1MsJHtUTVBESVJ9LDEwMDAwMEcsMTAwSyInKQotICAgICAgICByZXMgPSBiaXRiYWtlKCJtNCIsIGlnbm9yZV9zdGF0dXMgPSBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0VSUk9SOiBObyBuZXcgdGFza3MgY2FuIGJlIGV4ZWN1dGVkIHNpbmNlIHRoZSBkaXNrIHNwYWNlIG1vbml0b3IgYWN0aW9uIGlzICJTVE9QVEFTS1MiIScgaW4gcmVzLm91dHB1dCwgbXNnID0gIlRhc2tzIHNob3VsZCBoYXZlIHN0b3BwZWQuIERpc2sgbW9uaXRvciBpcyBzZXQgdG8gU1RPUFRBU0s6ICVzIiAlIHJlcy5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgMSwgbXNnID0gImJpdGJha2UgcmVwb3J0ZWQgZXhpdCBjb2RlICVzLiBJdCBzaG91bGQgaGF2ZSBiZWVuIDEuIEJpdGJha2Ugb3V0cHV0OiAlcyIgJSAoc3RyKHJlcy5zdGF0dXMpLCByZXMub3V0cHV0KSkKLSAgICAgICAgc2VsZi53cml0ZV9jb25maWcoJ0JCX0RJU0tNT05fRElSUyA9ICJBQk9SVCwke1RNUERJUn0sMTAwMDAwRywxMDBLIicpCi0gICAgICAgIHJlcyA9IGJpdGJha2UoIm00IiwgaWdub3JlX3N0YXR1cyA9IFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnRVJST1I6IEltbWVkaWF0ZWx5IGFib3J0IHNpbmNlIHRoZSBkaXNrIHNwYWNlIG1vbml0b3IgYWN0aW9uIGlzICJBQk9SVCIhJyBpbiByZXMub3V0cHV0LCAiVGFza3Mgc2hvdWxkIGhhdmUgYmVlbiBhYm9ydGVkIGltbWVkaWF0ZWxseS4gRGlzayBtb25pdG9yIGlzIHNldCB0byBBQk9SVDogJXMiICUgcmVzLm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCAxLCBtc2cgPSAiYml0YmFrZSByZXBvcnRlZCBleGl0IGNvZGUgJXMuIEl0IHNob3VsZCBoYXZlIGJlZW4gMS4gQml0YmFrZSBvdXRwdXQ6ICVzIiAlIChzdHIocmVzLnN0YXR1cyksIHJlcy5vdXRwdXQpKQotICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygnQkJfRElTS01PTl9ESVJTID0gIldBUk4sJHtUTVBESVJ9LDEwMDAwMEcsMTAwSyInKQotICAgICAgICByZXMgPSBiaXRiYWtlKCJtNCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnV0FSTklORzogVGhlIGZyZWUgc3BhY2UnIGluIHJlcy5vdXRwdXQsIG1zZyA9ICJBIHdhcm5pbmcgc2hvdWxkIGhhdmUgYmVlbiBkaXNwbGF5ZWQgZm9yIGRpc2sgbW9uaXRvciBpcyBzZXQgdG8gV0FSTjogJXMiICVyZXMub3V0cHV0KQotCi1jbGFzcyBTYW5pdHlPcHRpb25zVGVzdChvZVNlbGZUZXN0KToKLSAgICBkZWYgZ2V0bGluZShzZWxmLCByZXMsIGxpbmUpOgotICAgICAgICBmb3IgbCBpbiByZXMub3V0cHV0LnNwbGl0KCdcbicpOgotICAgICAgICAgICAgaWYgbGluZSBpbiBsOgotICAgICAgICAgICAgICAgIHJldHVybiBsCi0KLSAgICBAdGVzdGNhc2UoOTI3KQotICAgIGRlZiB0ZXN0X29wdGlvbnNfd2FybnFhX2Vycm9ycWFfc3dpdGNoKHNlbGYpOgotCi0gICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCJJTkhFUklUX3JlbW92ZSA9IFwicmVwb3J0LWVycm9yXCIiKQotICAgICAgICBpZiAicGFja2FnZXMtbGlzdCIgbm90IGluIGdldF9iYl92YXIoIkVSUk9SX1FBIik6Ci0gICAgICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoIkVSUk9SX1FBX2FwcGVuZCA9IFwiIHBhY2thZ2VzLWxpc3RcIiIpCi0KLSAgICAgICAgc2VsZi53cml0ZV9yZWNpcGVpbmMoJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnLCAnUEFDS0FHRVMgKz0gXCIke1BOfS1kYmdcIicpCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4geGN1cnNvci10cmFuc3BhcmVudC10aGVtZScpCi0gICAgICAgIHJlcyA9IGJpdGJha2UoInhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUgLWYgLWMgcGFja2FnZSIsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKLSAgICAgICAgc2VsZi5kZWxldGVfcmVjaXBlaW5jKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJykKLSAgICAgICAgbGluZSA9IHNlbGYuZ2V0bGluZShyZXMsICJRQSBJc3N1ZTogeGN1cnNvci10cmFuc3BhcmVudC10aGVtZS1kYmcgaXMgbGlzdGVkIGluIFBBQ0tBR0VTIG11bHRpcGxlIHRpbWVzLCB0aGlzIGxlYWRzIHRvIHBhY2thZ2luZyBlcnJvcnMuIikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmUgYW5kIGxpbmUuc3RhcnRzd2l0aCgiRVJST1I6IiksIG1zZz1yZXMub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDEsIG1zZyA9ICJiaXRiYWtlIHJlcG9ydGVkIGV4aXQgY29kZSAlcy4gSXQgc2hvdWxkIGhhdmUgYmVlbiAxLiBCaXRiYWtlIG91dHB1dDogJXMiICUgKHN0cihyZXMuc3RhdHVzKSwgcmVzLm91dHB1dCkpCi0gICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJywgJ1BBQ0tBR0VTICs9IFwiJHtQTn0tZGJnXCInKQotICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoJ0VSUk9SX1FBX3JlbW92ZSA9ICJwYWNrYWdlcy1saXN0IicpCi0gICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZygnV0FSTl9RQV9hcHBlbmQgPSAiIHBhY2thZ2VzLWxpc3QiJykKLSAgICAgICAgcmVzID0gYml0YmFrZSgieGN1cnNvci10cmFuc3BhcmVudC10aGVtZSAtZiAtYyBwYWNrYWdlIikKLSAgICAgICAgc2VsZi5kZWxldGVfcmVjaXBlaW5jKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJykKLSAgICAgICAgbGluZSA9IHNlbGYuZ2V0bGluZShyZXMsICJRQSBJc3N1ZTogeGN1cnNvci10cmFuc3BhcmVudC10aGVtZS1kYmcgaXMgbGlzdGVkIGluIFBBQ0tBR0VTIG11bHRpcGxlIHRpbWVzLCB0aGlzIGxlYWRzIHRvIHBhY2thZ2luZyBlcnJvcnMuIikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmUgYW5kIGxpbmUuc3RhcnRzd2l0aCgiV0FSTklORzoiKSwgbXNnPXJlcy5vdXRwdXQpCi0KLSAgICBAdGVzdGNhc2UoMjc4KQotICAgIGRlZiB0ZXN0X3Nhbml0eV91bnNhZmVfc2NyaXB0X3JlZmVyZW5jZXMoc2VsZik6Ci0gICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCdXQVJOX1FBX2FwcGVuZCA9ICIgdW5zYWZlLXJlZmVyZW5jZXMtaW4tc2NyaXB0cyInKQotCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4gZ3ppcCcpCi0gICAgICAgIHJlcyA9IGJpdGJha2UoImd6aXAgLWYgLWMgcGFja2FnZV9xYSIpCi0gICAgICAgIGxpbmUgPSBzZWxmLmdldGxpbmUocmVzLCAiUUEgSXNzdWU6IGd6aXAiKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxpbmUsICJXQVJOSU5HOiBRQSBJc3N1ZTogZ3ppcCBtZXNzYWdlIGlzIHByZXNlbnQgaW4gYml0YmFrZSdzIG91dHB1dCBhbmQgc2hvdWxkbid0IGJlOiAlcyIgJSByZXMub3V0cHV0KQotCi0gICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZygiIiIKLWRvX2luc3RhbGxfYXBwZW5kX3BuLWd6aXAgKCkgewotCWVjaG8gIlxuJHtiaW5kaXJ9L3Rlc3QiID4+ICR7RH0ke2JpbmRpcn0vemNhdAotfQotIiIiKQotICAgICAgICByZXMgPSBiaXRiYWtlKCJnemlwIC1mIC1jIHBhY2thZ2VfcWEiKQotICAgICAgICBsaW5lID0gc2VsZi5nZXRsaW5lKHJlcywgIlFBIElzc3VlOiBnemlwIikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmUgYW5kIGxpbmUuc3RhcnRzd2l0aCgiV0FSTklORzoiKSwgIldBUk5JTkc6IFFBIElzc3VlOiBnemlwIG1lc3NhZ2UgaXMgbm90IHByZXNlbnQgaW4gYml0YmFrZSdzIG91dHB1dDogJXMiICUgcmVzLm91dHB1dCkKLQotICAgIEB0ZXN0Y2FzZSgxNDIxKQotICAgIGRlZiB0ZXN0X2xheWVyX3dpdGhvdXRfZ2l0X2RpcihzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFN1bW1hcnk6ICAgICBUZXN0IHRoYXQgbGF5ZXIgZ2l0IHJldmlzaW9ucyBhcmUgZGlzcGxheWVkIGFuZCBkbyBub3QgZmFpbCB3aXRob3V0IGdpdCByZXBvc2l0b3J5Ci0gICAgICAgIEV4cGVjdGVkOiAgICBUaGUgYnVpbGQgdG8gYmUgc3VjY2Vzc2Z1bCBhbmQgd2l0aG91dCAiZmF0YWwiIGVycm9ycwotICAgICAgICBQcm9kdWN0OiAgICAgb2UtY29yZQotICAgICAgICBBdXRob3I6ICAgICAgRGFuaWVsIElzdHJhdGUgPGRhbmllbC5hbGV4YW5kcnV4LmlzdHJhdGVAaW50ZWwuY29tPgotICAgICAgICBBdXRvbWF0ZWRCeTogRGFuaWVsIElzdHJhdGUgPGRhbmllbC5hbGV4YW5kcnV4LmlzdHJhdGVAaW50ZWwuY29tPgotICAgICAgICAiIiIKLQotICAgICAgICBkaXJwYXRoID0gdGVtcGZpbGUubWtkdGVtcCgpCi0KLSAgICAgICAgZHVtbXlfbGF5ZXJfbmFtZSA9ICdtZXRhLWR1bW15JwotICAgICAgICBkdW1teV9sYXllcl9wYXRoID0gb3MucGF0aC5qb2luKGRpcnBhdGgsIGR1bW15X2xheWVyX25hbWUpCi0gICAgICAgIGR1bW15X2xheWVyX2NvbmZfZGlyID0gb3MucGF0aC5qb2luKGR1bW15X2xheWVyX3BhdGgsICdjb25mJykKLSAgICAgICAgb3MubWFrZWRpcnMoZHVtbXlfbGF5ZXJfY29uZl9kaXIpCi0gICAgICAgIGR1bW15X2xheWVyX2NvbmZfcGF0aCA9IG9zLnBhdGguam9pbihkdW1teV9sYXllcl9jb25mX2RpciwgJ2xheWVyLmNvbmYnKQotCi0gICAgICAgIGR1bW15X2xheWVyX2NvbnRlbnQgPSAnQkJQQVRIIC49ICI6JHtMQVlFUkRJUn0iXG4nIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiICR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmJhcHBlbmQiXG4nIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCQkZJTEVfQ09MTEVDVElPTlMgKz0gIiVzIlxuJyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQkJGSUxFX1BBVFRFUk5fJXMgPSAiXiR7TEFZRVJESVJ9LyJcbicgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JCRklMRV9QUklPUklUWV8lcyA9ICI2IlxuJyAlIChkdW1teV9sYXllcl9uYW1lLCBkdW1teV9sYXllcl9uYW1lLCBkdW1teV9sYXllcl9uYW1lKQotCi0gICAgICAgIGZ0b29scy53cml0ZV9maWxlKGR1bW15X2xheWVyX2NvbmZfcGF0aCwgZHVtbXlfbGF5ZXJfY29udGVudCkKLQotICAgICAgICBiYmxheWVyc19jb25mID0gJ0JCTEFZRVJTICs9ICIlcyJcbicgJSBkdW1teV9sYXllcl9wYXRoCi0gICAgICAgIHNlbGYud3JpdGVfYmJsYXllcnNfY29uZmlnKGJibGF5ZXJzX2NvbmYpCi0KLSAgICAgICAgdGVzdF9yZWNpcGUgPSAnZWQnCi0KLSAgICAgICAgcmV0ID0gYml0YmFrZSgnLW4gJXMnICUgdGVzdF9yZWNpcGUpCi0KLSAgICAgICAgZXJyID0gJ2ZhdGFsOiBOb3QgYSBnaXQgcmVwb3NpdG9yeScKLQotICAgICAgICBzaHV0aWwucm10cmVlKGRpcnBhdGgpCi0KLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbihlcnIsIHJldC5vdXRwdXQpCi0KLQotY2xhc3MgQnVpbGRoaXN0b3J5VGVzdHMoQnVpbGRoaXN0b3J5QmFzZSk6Ci0KLSAgICBAdGVzdGNhc2UoMjkzKQotICAgIGRlZiB0ZXN0X2J1aWxkaGlzdG9yeV9iYXNpYyhzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fYnVpbGRoaXN0b3J5X29wZXJhdGlvbigneGN1cnNvci10cmFuc3BhcmVudC10aGVtZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKGdldF9iYl92YXIoJ0JVSUxESElTVE9SWV9ESVInKSksICJidWlsZGhpc3RvcnkgZGlyIHdhcyBub3QgY3JlYXRlZC4iKQotCi0gICAgQHRlc3RjYXNlKDI5NCkKLSAgICBkZWYgdGVzdF9idWlsZGhpc3RvcnlfYnVpbGR0aW1lX3ByX2JhY2t3YXJkcyhzZWxmKToKLSAgICAgICAgdGFyZ2V0ID0gJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnCi0gICAgICAgIGVycm9yID0gIkVSUk9SOi4qUUEgSXNzdWU6IFBhY2thZ2UgdmVyc2lvbiBmb3IgcGFja2FnZSAlcyB3ZW50IGJhY2t3YXJkcyB3aGljaCB3b3VsZCBicmVhayBwYWNrYWdlIGZlZWRzIGZyb20gKC4qLXIxLiogdG8gLiotcjAuKikiICUgdGFyZ2V0Ci0gICAgICAgIHNlbGYucnVuX2J1aWxkaGlzdG9yeV9vcGVyYXRpb24odGFyZ2V0LCB0YXJnZXRfY29uZmlnPSJQUiA9IFwicjFcIiIsIGNoYW5nZV9iaF9sb2NhdGlvbj1UcnVlKQotICAgICAgICBzZWxmLnJ1bl9idWlsZGhpc3Rvcnlfb3BlcmF0aW9uKHRhcmdldCwgdGFyZ2V0X2NvbmZpZz0iUFIgPSBcInIwXCIiLCBjaGFuZ2VfYmhfbG9jYXRpb249RmFsc2UsIGV4cGVjdF9lcnJvcj1UcnVlLCBlcnJvcl9yZWdleD1lcnJvcikKLQotY2xhc3MgQXJjaGl2ZXJUZXN0KG9lU2VsZlRlc3QpOgotICAgIEB0ZXN0Y2FzZSg5MjYpCi0gICAgZGVmIHRlc3RfYXJjaF93b3JrX2Rpcl9hbmRfZXhwb3J0X3NvdXJjZShzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFRlc3QgZm9yIGFyY2hpdmluZyB0aGUgd29yayBkaXJlY3RvcnkgYW5kIGV4cG9ydGluZyB0aGUgc291cmNlIGZpbGVzLgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIklOSEVSSVQgKz0gXCJhcmNoaXZlclwiXG5BUkNISVZFUl9NT0RFW3NyY10gPSBcIm9yaWdpbmFsXCJcbkFSQ0hJVkVSX01PREVbc3JwbV0gPSBcIjFcIiIpCi0gICAgICAgIHJlcyA9IGJpdGJha2UoInhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUiLCBpZ25vcmVfc3RhdHVzPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgMCwgIlxuQ291bGRuJ3QgYnVpbGQgeGN1cnNvcnRyYW5zcGFyZW50dGhlbWUuXG5iaXRiYWtlIG91dHB1dCAlcyIgJSByZXMub3V0cHV0KQotICAgICAgICBkZXBsb3lfZGlyX3NyYyA9IGdldF9iYl92YXIoJ0RFUExPWV9ESVJfU1JDJykKLSAgICAgICAgcGtnc19wYXRoID0gZy5nbG9iKHN0cihkZXBsb3lfZGlyX3NyYykgKyAiL2FsbGFyY2gqL3hjdXJzKiIpCi0gICAgICAgIHNyY19maWxlX2dsb2IgPSBzdHIocGtnc19wYXRoWzBdKSArICIveGN1cnNvciouc3JjLnJwbSIKLSAgICAgICAgdGFyX2ZpbGVfZ2xvYiA9IHN0cihwa2dzX3BhdGhbMF0pICsgIi94Y3Vyc29yKi50YXIuZ3oiCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoZy5nbG9iKHNyY19maWxlX2dsb2IpIGFuZCBnLmdsb2IodGFyX2ZpbGVfZ2xvYikpLCAiQ291bGRuJ3QgZmluZCAuc3JjLnJwbSBhbmQgLnRhci5neiBmaWxlcyB1bmRlciAlcy9hbGxhcmNoKi94Y3Vyc29yKiIgJSBkZXBsb3lfZGlyX3NyYykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwOTkxNWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlLnB5CkBAIC0wLDAgKzEsMjc4IEBACisjIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEludGVsIENvcnBvcmF0aW9uCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBnbG9iCitpbXBvcnQgZXJybm8KK2Zyb20gdW5pdHRlc3QudXRpbCBpbXBvcnQgc2FmZV9yZXByCisKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyCitmcm9tIG9lcWEuY29yZS5jYXNlIGltcG9ydCBPRVRlc3RDYXNlCisKK2NsYXNzIE9FU2VsZnRlc3RUZXN0Q2FzZShPRVRlc3RDYXNlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0icnVuVGVzdCIpOgorICAgICAgICBzZWxmLl9leHRyYV90ZWFyX2Rvd25fY29tbWFuZHMgPSBbXQorICAgICAgICBzdXBlcihPRVNlbGZ0ZXN0VGVzdENhc2UsIHNlbGYpLl9faW5pdF9fKG1ldGhvZE5hbWUpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBzdXBlcihPRVNlbGZ0ZXN0VGVzdENhc2UsIGNscykuc2V0VXBDbGFzcygpCisKKyAgICAgICAgY2xzLnRlc3RsYXllcl9wYXRoID0gY2xzLnRjLmNvbmZpZ19wYXRoc1sndGVzdGxheWVyX3BhdGgnXQorICAgICAgICBjbHMuYnVpbGRkaXIgPSBjbHMudGMuY29uZmlnX3BhdGhzWydidWlsZGRpciddCisKKyAgICAgICAgY2xzLmxvY2FsY29uZl9wYXRoID0gY2xzLnRjLmNvbmZpZ19wYXRoc1snbG9jYWxjb25mJ10KKyAgICAgICAgY2xzLmxvY2FsY29uZl9iYWNrdXAgPSBjbHMudGMuY29uZmlnX3BhdGhzWydsb2NhbGNvbmZfY2xhc3NfYmFja3VwJ10KKyAgICAgICAgY2xzLmxvY2FsX2JibGF5ZXJzX3BhdGggPSBjbHMudGMuY29uZmlnX3BhdGhzWydiYmxheWVycyddCisgICAgICAgIGNscy5sb2NhbF9iYmxheWVyc19iYWNrdXAgPSBjbHMudGMuY29uZmlnX3BhdGhzWydiYmxheWVyc19jbGFzc19iYWNrdXAnXQorCisgICAgICAgIGNscy50ZXN0aW5jX3BhdGggPSBvcy5wYXRoLmpvaW4oY2xzLnRjLmNvbmZpZ19wYXRoc1snYnVpbGRkaXInXSwKKyAgICAgICAgICAgICAgICAiY29uZi9zZWxmdGVzdC5pbmMiKQorICAgICAgICBjbHMudGVzdGluY19iYmxheWVyc19wYXRoID0gb3MucGF0aC5qb2luKGNscy50Yy5jb25maWdfcGF0aHNbJ2J1aWxkZGlyJ10sCisgICAgICAgICAgICAgICAgImNvbmYvYmJsYXllcnMuaW5jIikKKyAgICAgICAgY2xzLm1hY2hpbmVpbmNfcGF0aCA9IG9zLnBhdGguam9pbihjbHMudGMuY29uZmlnX3BhdGhzWydidWlsZGRpciddLAorICAgICAgICAgICAgICAgICJjb25mL21hY2hpbmUuaW5jIikKKworICAgICAgICBjbHMuX3RyYWNrX2Zvcl9jbGVhbnVwID0gWworICAgICAgICAgICAgY2xzLnRlc3RpbmNfcGF0aCwgY2xzLnRlc3RpbmNfYmJsYXllcnNfcGF0aCwKKyAgICAgICAgICAgIGNscy5tYWNoaW5laW5jX3BhdGgsIGNscy5sb2NhbGNvbmZfYmFja3VwLAorICAgICAgICAgICAgY2xzLmxvY2FsX2JibGF5ZXJzX2JhY2t1cF0KKworICAgICAgICBjbHMuYWRkX2luY2x1ZGUoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLnJlbW92ZV9pbmNsdWRlKCkKKyAgICAgICAgY2xzLnJlbW92ZV9pbmNfZmlsZXMoKQorICAgICAgICBzdXBlcihPRVNlbGZ0ZXN0VGVzdENhc2UsIGNscykudGVhckRvd25DbGFzcygpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgYWRkX2luY2x1ZGUoY2xzKToKKyAgICAgICAgaWYgIiNpbmNsdWRlIGFkZGVkIGJ5IG9lLXNlbGZ0ZXN0IiBcCisgICAgICAgICAgICBub3QgaW4gZnRvb2xzLnJlYWRfZmlsZShvcy5wYXRoLmpvaW4oY2xzLmJ1aWxkZGlyLCAiY29uZi9sb2NhbC5jb25mIikpOgorICAgICAgICAgICAgICAgIGNscy5sb2dnZXIuaW5mbygiQWRkaW5nOiBcImluY2x1ZGUgc2VsZnRlc3QuaW5jXCIgaW4gJXMiICUgb3MucGF0aC5qb2luKGNscy5idWlsZGRpciwgImNvbmYvbG9jYWwuY29uZiIpKQorICAgICAgICAgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShvcy5wYXRoLmpvaW4oY2xzLmJ1aWxkZGlyLCAiY29uZi9sb2NhbC5jb25mIiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICJcbiNpbmNsdWRlIGFkZGVkIGJ5IG9lLXNlbGZ0ZXN0XG5pbmNsdWRlIG1hY2hpbmUuaW5jXG5pbmNsdWRlIHNlbGZ0ZXN0LmluYyIpCisKKyAgICAgICAgaWYgIiNpbmNsdWRlIGFkZGVkIGJ5IG9lLXNlbGZ0ZXN0IiBcCisgICAgICAgICAgICBub3QgaW4gZnRvb2xzLnJlYWRfZmlsZShvcy5wYXRoLmpvaW4oY2xzLmJ1aWxkZGlyLCAiY29uZi9iYmxheWVycy5jb25mIikpOgorICAgICAgICAgICAgICAgIGNscy5sb2dnZXIuaW5mbygiQWRkaW5nOiBcImluY2x1ZGUgYmJsYXllcnMuaW5jXCIgaW4gYmJsYXllcnMuY29uZiIpCisgICAgICAgICAgICAgICAgZnRvb2xzLmFwcGVuZF9maWxlKG9zLnBhdGguam9pbihjbHMuYnVpbGRkaXIsICJjb25mL2JibGF5ZXJzLmNvbmYiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIlxuI2luY2x1ZGUgYWRkZWQgYnkgb2Utc2VsZnRlc3RcbmluY2x1ZGUgYmJsYXllcnMuaW5jIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiByZW1vdmVfaW5jbHVkZShjbHMpOgorICAgICAgICBpZiAiI2luY2x1ZGUgYWRkZWQgYnkgb2Utc2VsZnRlc3QucHkiIFwKKyAgICAgICAgICAgIGluIGZ0b29scy5yZWFkX2ZpbGUob3MucGF0aC5qb2luKGNscy5idWlsZGRpciwgImNvbmYvbG9jYWwuY29uZiIpKToKKyAgICAgICAgICAgICAgICBjbHMubG9nZ2VyLmluZm8oIlJlbW92aW5nIHRoZSBpbmNsdWRlIGZyb20gbG9jYWwuY29uZiIpCisgICAgICAgICAgICAgICAgZnRvb2xzLnJlbW92ZV9mcm9tX2ZpbGUob3MucGF0aC5qb2luKGNscy5idWlsZGRpciwgImNvbmYvbG9jYWwuY29uZiIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAiXG4jaW5jbHVkZSBhZGRlZCBieSBvZS1zZWxmdGVzdC5weVxuaW5jbHVkZSBtYWNoaW5lLmluY1xuaW5jbHVkZSBzZWxmdGVzdC5pbmMiKQorCisgICAgICAgIGlmICIjaW5jbHVkZSBhZGRlZCBieSBvZS1zZWxmdGVzdC5weSIgXAorICAgICAgICAgICAgaW4gZnRvb2xzLnJlYWRfZmlsZShvcy5wYXRoLmpvaW4oY2xzLmJ1aWxkZGlyLCAiY29uZi9iYmxheWVycy5jb25mIikpOgorICAgICAgICAgICAgICAgIGNscy5sb2dnZXIuaW5mbygiUmVtb3ZpbmcgdGhlIGluY2x1ZGUgZnJvbSBiYmxheWVycy5jb25mIikKKyAgICAgICAgICAgICAgICBmdG9vbHMucmVtb3ZlX2Zyb21fZmlsZShvcy5wYXRoLmpvaW4oY2xzLmJ1aWxkZGlyLCAiY29uZi9iYmxheWVycy5jb25mIiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICJcbiNpbmNsdWRlIGFkZGVkIGJ5IG9lLXNlbGZ0ZXN0LnB5XG5pbmNsdWRlIGJibGF5ZXJzLmluYyIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcmVtb3ZlX2luY19maWxlcyhjbHMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKGNscy5idWlsZGRpciwgImNvbmYvc2VsZnRlc3QuaW5jIikpCisgICAgICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhjbHMudGVzdGxheWVyX3BhdGgpOgorICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICBpZiBmID09ICd0ZXN0X3JlY2lwZS5pbmMnOgorICAgICAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbihyb290LCBmKSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBmb3IgaW5jbF9maWxlIGluIFsnY29uZi9iYmxheWVycy5pbmMnLCAnY29uZi9tYWNoaW5lLmluYyddOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLmpvaW4oY2xzLmJ1aWxkZGlyLCBpbmNsX2ZpbGUpKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoT0VTZWxmdGVzdFRlc3RDYXNlLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIG9zLmNoZGlyKHNlbGYuYnVpbGRkaXIpCisgICAgICAgICMgQ2hlY2sgaWYgbG9jYWwuY29uZiBvciBiYmxheWVycy5jb25mIGZpbGVzIGJhY2t1cCBleGlzdHMKKyAgICAgICAgIyBmcm9tIGEgcHJldmlvdXMgZmFpbGVkIHRlc3QgYW5kIHJlc3RvcmUgdGhlbQorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShzZWxmLmxvY2FsY29uZl9iYWNrdXApIG9yIG9zLnBhdGguaXNmaWxlKAorICAgICAgICAgICAgICAgIHNlbGYubG9jYWxfYmJsYXllcnNfYmFja3VwKToKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJcCitGb3VuZCBhIGxvY2FsLmNvbmYgYW5kL29yIGJibGF5ZXJzLmNvbmYgYmFja3VwIGZyb20gYSBwcmV2aW91c2x5IGFib3J0ZWQgdGVzdC5cCitSZXN0b3JpbmcgdGhlc2UgZmlsZXMgbm93LCBidXQgdGVzdHMgc2hvdWxkIGJlIHJlLWV4ZWN1dGVkIGZyb20gYSBjbGVhbiBlbnZpcm9ubWVudFwKK3RvIGVuc3VyZSBhY2N1cmF0ZSByZXN1bHRzLiIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNlbGYubG9jYWxjb25mX2JhY2t1cCwgc2VsZi5sb2NhbGNvbmZfcGF0aCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNlbGYubG9jYWxfYmJsYXllcnNfYmFja3VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvY2FsX2JibGF5ZXJzX3BhdGgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBiYWNrdXAgbG9jYWwuY29uZiBhbmQgYmJsYXllcnMuY29uZgorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNlbGYubG9jYWxjb25mX3BhdGgsIHNlbGYubG9jYWxjb25mX2JhY2t1cCkKKyAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzZWxmLmxvY2FsX2JibGF5ZXJzX3BhdGgsIHNlbGYubG9jYWxfYmJsYXllcnNfYmFja3VwKQorICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIkNyZWF0aW5nIGxvY2FsLmNvbmYgYW5kIGJibGF5ZXJzLmNvbmYgYmFja3Vwcy4iKQorICAgICAgICAjIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgcHJldmlvdXMgdGVzdCBsZWZ0IGFyb3VuZCBpbiBjb25maWcgb3IgaW5jIGZpbGVzCisgICAgICAgICMgaWYgaXQgZmFpbGVkIHNvIHdlIG5lZWQgYSBmcmVzaCBzdGFydAorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi50ZXN0aW5jX3BhdGgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhzZWxmLnRlc3RsYXllcl9wYXRoKToKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGlmIGYgPT0gJ3Rlc3RfcmVjaXBlLmluYyc6CisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLmpvaW4ocm9vdCwgZikpCisKKyAgICAgICAgZm9yIGluY2xfZmlsZSBpbiBbc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGgsIHNlbGYubWFjaGluZWluY19wYXRoXToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoaW5jbF9maWxlKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBpZiBzZWxmLnRjLmN1c3RvbW1hY2hpbmU6CisgICAgICAgICAgICBtYWNoaW5lX2NvbmYgPSAnTUFDSElORSA/Pz0gIiVzIlxuJyAlIHNlbGYudGMuY3VzdG9tbWFjaGluZQorICAgICAgICAgICAgc2VsZi5zZXRfbWFjaGluZV9jb25maWcobWFjaGluZV9jb25mKQorCisgICAgICAgICMgdGVzdHMgbWlnaHQgbmVlZCB0aGVpciBvd24gc2V0dXAKKyAgICAgICAgIyBidXQgaWYgdGhleSBvdmVyd3JpdGUgdGhpcyBvbmUgdGhleSBoYXZlIHRvIGNhbGwKKyAgICAgICAgIyBzdXBlciBlYWNoIHRpbWUsIHNvIGxldCdzIGdpdmUgdGhlbSBhbiBhbHRlcm5hdGl2ZQorICAgICAgICBzZWxmLnNldFVwTG9jYWwoKQorCisgICAgZGVmIHNldFVwTG9jYWwoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZXh0cmFfdGVhcl9kb3duX2NvbW1hbmRzOgorICAgICAgICAgICAgZmFpbGVkX2V4dHJhX2NvbW1hbmRzID0gW10KKyAgICAgICAgICAgIGZvciBjb21tYW5kIGluIHNlbGYuX2V4dHJhX3RlYXJfZG93bl9jb21tYW5kczoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoY29tbWFuZCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICAgICAgICAgIGlmIG5vdCByZXN1bHQuc3RhdHVzID09ICAwOgorICAgICAgICAgICAgICAgICAgICBmYWlsZWRfZXh0cmFfY29tbWFuZHMuYXBwZW5kKGNvbW1hbmQpCisgICAgICAgICAgICBpZiBmYWlsZWRfZXh0cmFfY29tbWFuZHM6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIud2FybmluZygidGVhckRvd24gY29tbWFuZHMgaGF2ZSBmYWlsZWQ6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCBmYWlsZWRfZXh0cmFfY29tbWFuZHMpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiVHJ5aW5nIHRvIG1vdmUgb24uIikKKyAgICAgICAgICAgIHNlbGYuX2V4dHJhX3RlYXJfZG93bl9jb21tYW5kcyA9IFtdCisKKyAgICAgICAgaWYgc2VsZi5fdHJhY2tfZm9yX2NsZWFudXA6CisgICAgICAgICAgICBmb3IgcGF0aCBpbiBzZWxmLl90cmFja19mb3JfY2xlYW51cDoKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgorICAgICAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHBhdGgpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUocGF0aCk6CisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShwYXRoKQorICAgICAgICAgICAgc2VsZi5fdHJhY2tfZm9yX2NsZWFudXAgPSBbXQorCisgICAgICAgIHNlbGYudGVhckRvd25Mb2NhbCgpCisgICAgICAgIHN1cGVyKE9FU2VsZnRlc3RUZXN0Q2FzZSwgc2VsZikudGVhckRvd24oKQorCisgICAgZGVmIHRlYXJEb3duTG9jYWwoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBhZGRfY29tbWFuZF90b190ZWFyRG93bihzZWxmLCBjb21tYW5kKToKKyAgICAgICAgIiIiQWRkIHRlc3Qgc3BlY2lmaWMgY29tbWFuZHMgdG8gdGhlIHRlYXJEb3duIG1ldGhvZCIiIgorICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiQWRkaW5nIGNvbW1hbmQgJyVzJyB0byB0ZWFyRG93biBmb3IgdGhpcyB0ZXN0LiIgJSBjb21tYW5kKQorICAgICAgICBzZWxmLl9leHRyYV90ZWFyX2Rvd25fY29tbWFuZHMuYXBwZW5kKGNvbW1hbmQpCisKKyAgICBkZWYgdHJhY2tfZm9yX2NsZWFudXAoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIkFkZCB0ZXN0IHNwZWNpZmljIGZpbGVzIG9yIGRpcmVjdG9yaWVzIHRvIGJlIHJlbW92ZWQgaW4gdGhlIHRlYXJEb3duIG1ldGhvZCIiIgorICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiQWRkaW5nIHBhdGggJyVzJyB0byBiZSBjbGVhbmVkIHVwIHdoZW4gdGVzdCBpcyBvdmVyIiAlIHBhdGgpCisgICAgICAgIHNlbGYuX3RyYWNrX2Zvcl9jbGVhbnVwLmFwcGVuZChwYXRoKQorCisgICAgZGVmIHdyaXRlX2NvbmZpZyhzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiV3JpdGUgdG8gPGJ1aWxkZGlyPi9jb25mL3NlbGZ0ZXN0LmluYyIiIgorCisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJXcml0aW5nIHRvOiAlc1xuJXNcbiIgJSAoc2VsZi50ZXN0aW5jX3BhdGgsIGRhdGEpKQorICAgICAgICBmdG9vbHMud3JpdGVfZmlsZShzZWxmLnRlc3RpbmNfcGF0aCwgZGF0YSkKKworICAgICAgICBpZiBzZWxmLnRjLmN1c3RvbW1hY2hpbmUgYW5kICdNQUNISU5FJyBpbiBkYXRhOgorICAgICAgICAgICAgbWFjaGluZSA9IGdldF9iYl92YXIoJ01BQ0hJTkUnKQorICAgICAgICAgICAgc2VsZi5sb2dnZXIud2FybmluZygnTUFDSElORSBvdmVycmlkZGVuOiAlcycgJSBtYWNoaW5lKQorCisgICAgZGVmIGFwcGVuZF9jb25maWcoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIkFwcGVuZCB0byA8YnVpbGRkaXI+L2NvbmYvc2VsZnRlc3QuaW5jIiIiCisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJBcHBlbmRpbmcgdG86ICVzXG4lc1xuIiAlIChzZWxmLnRlc3RpbmNfcGF0aCwgZGF0YSkpCisgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShzZWxmLnRlc3RpbmNfcGF0aCwgZGF0YSkKKworICAgICAgICBpZiBzZWxmLnRjLmN1c3RvbW1hY2hpbmUgYW5kICdNQUNISU5FJyBpbiBkYXRhOgorICAgICAgICAgICAgbWFjaGluZSA9IGdldF9iYl92YXIoJ01BQ0hJTkUnKQorICAgICAgICAgICAgc2VsZi5sb2dnZXIud2FybmluZygnTUFDSElORSBvdmVycmlkZGVuOiAlcycgJSBtYWNoaW5lKQorCisgICAgZGVmIHJlbW92ZV9jb25maWcoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIlJlbW92ZSBkYXRhIGZyb20gPGJ1aWxkZGlyPi9jb25mL3NlbGZ0ZXN0LmluYyIiIgorICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiUmVtb3ZpbmcgZnJvbTogJXNcbiVzXG4iICUgKHNlbGYudGVzdGluY19wYXRoLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLnJlbW92ZV9mcm9tX2ZpbGUoc2VsZi50ZXN0aW5jX3BhdGgsIGRhdGEpCisKKyAgICBkZWYgcmVjaXBlaW5jKHNlbGYsIHJlY2lwZSk6CisgICAgICAgICIiIlJldHVybiBhYnNvbHV0ZSBwYXRoIG9mIG1ldGEtc2VmbHRlc3QvcmVjaXBlcy10ZXN0LzxyZWNpcGU+L3Rlc3RfcmVjaXBlLmluYyIiIgorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYudGVzdGxheWVyX3BhdGgsICdyZWNpcGVzLXRlc3QnLCByZWNpcGUsICd0ZXN0X3JlY2lwZS5pbmMnKQorCisgICAgZGVmIHdyaXRlX3JlY2lwZWluYyhzZWxmLCByZWNpcGUsIGRhdGEpOgorICAgICAgICAiIiJXcml0ZSB0byBtZXRhLXNlZmx0ZXN0L3JlY2lwZXMtdGVzdC88cmVjaXBlPi90ZXN0X3JlY2lwZS5pbmMiIiIKKyAgICAgICAgaW5jX2ZpbGUgPSBzZWxmLnJlY2lwZWluYyhyZWNpcGUpCisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJXcml0aW5nIHRvOiAlc1xuJXNcbiIgJSAoaW5jX2ZpbGUsIGRhdGEpKQorICAgICAgICBmdG9vbHMud3JpdGVfZmlsZShpbmNfZmlsZSwgZGF0YSkKKyAgICAgICAgcmV0dXJuIGluY19maWxlCisKKyAgICBkZWYgYXBwZW5kX3JlY2lwZWluYyhzZWxmLCByZWNpcGUsIGRhdGEpOgorICAgICAgICAiIiJBcHBlbmQgZGF0YSB0byBtZXRhLXNlZmx0ZXN0L3JlY2lwZXMtdGVzdC88cmVjaXBlPi90ZXN0X3JlY2lwZS5pbmMiIiIKKyAgICAgICAgaW5jX2ZpbGUgPSBzZWxmLnJlY2lwZWluYyhyZWNpcGUpCisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJBcHBlbmRpbmcgdG86ICVzXG4lc1xuIiAlIChpbmNfZmlsZSwgZGF0YSkpCisgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShpbmNfZmlsZSwgZGF0YSkKKyAgICAgICAgcmV0dXJuIGluY19maWxlCisKKyAgICBkZWYgcmVtb3ZlX3JlY2lwZWluYyhzZWxmLCByZWNpcGUsIGRhdGEpOgorICAgICAgICAiIiJSZW1vdmUgZGF0YSBmcm9tIG1ldGEtc2VmbHRlc3QvcmVjaXBlcy10ZXN0LzxyZWNpcGU+L3Rlc3RfcmVjaXBlLmluYyIiIgorICAgICAgICBpbmNfZmlsZSA9IHNlbGYucmVjaXBlaW5jKHJlY2lwZSkKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIlJlbW92aW5nIGZyb206ICVzXG4lc1xuIiAlIChpbmNfZmlsZSwgZGF0YSkpCisgICAgICAgIGZ0b29scy5yZW1vdmVfZnJvbV9maWxlKGluY19maWxlLCBkYXRhKQorCisgICAgZGVmIGRlbGV0ZV9yZWNpcGVpbmMoc2VsZiwgcmVjaXBlKToKKyAgICAgICAgIiIiRGVsZXRlIG1ldGEtc2VmbHRlc3QvcmVjaXBlcy10ZXN0LzxyZWNpcGU+L3Rlc3RfcmVjaXBlLmluYyBmaWxlIiIiCisgICAgICAgIGluY19maWxlID0gc2VsZi5yZWNpcGVpbmMocmVjaXBlKQorICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiRGVsZXRpbmcgZmlsZTogJXMiICUgaW5jX2ZpbGUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnJlbW92ZShpbmNfZmlsZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgZGVmIHdyaXRlX2JibGF5ZXJzX2NvbmZpZyhzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiV3JpdGUgdG8gPGJ1aWxkZGlyPi9jb25mL2JibGF5ZXJzLmluYyIiIgorICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiV3JpdGluZyB0bzogJXNcbiVzXG4iICUgKHNlbGYudGVzdGluY19iYmxheWVyc19wYXRoLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLndyaXRlX2ZpbGUoc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGgsIGRhdGEpCisKKyAgICBkZWYgYXBwZW5kX2JibGF5ZXJzX2NvbmZpZyhzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiQXBwZW5kIHRvIDxidWlsZGRpcj4vY29uZi9iYmxheWVycy5pbmMiIiIKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIkFwcGVuZGluZyB0bzogJXNcbiVzXG4iICUgKHNlbGYudGVzdGluY19iYmxheWVyc19wYXRoLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLmFwcGVuZF9maWxlKHNlbGYudGVzdGluY19iYmxheWVyc19wYXRoLCBkYXRhKQorCisgICAgZGVmIHJlbW92ZV9iYmxheWVyc19jb25maWcoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIlJlbW92ZSBkYXRhIGZyb20gPGJ1aWxkZGlyPi9jb25mL2JibGF5ZXJzLmluYyIiIgorICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiUmVtb3ZpbmcgZnJvbTogJXNcbiVzXG4iICUgKHNlbGYudGVzdGluY19iYmxheWVyc19wYXRoLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLnJlbW92ZV9mcm9tX2ZpbGUoc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGgsIGRhdGEpCisKKyAgICBkZWYgc2V0X21hY2hpbmVfY29uZmlnKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiJXcml0ZSB0byA8YnVpbGRkaXI+L2NvbmYvbWFjaGluZS5pbmMiIiIKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIldyaXRpbmcgdG86ICVzXG4lc1xuIiAlIChzZWxmLm1hY2hpbmVpbmNfcGF0aCwgZGF0YSkpCisgICAgICAgIGZ0b29scy53cml0ZV9maWxlKHNlbGYubWFjaGluZWluY19wYXRoLCBkYXRhKQorCisgICAgIyBjaGVjayBkb2VzIHBhdGggZXhpc3QKKyAgICBkZWYgYXNzZXJ0RXhpc3RzKHNlbGYsIGV4cHIsIG1zZz1Ob25lKToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGV4cHIpOgorICAgICAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csICIlcyBkb2VzIG5vdCBleGlzdCIgJSBzYWZlX3JlcHIoZXhwcikpCisgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24obXNnKQorCisgICAgIyBjaGVjayBkb2VzIHBhdGggbm90IGV4aXN0CisgICAgZGVmIGFzc2VydE5vdEV4aXN0cyhzZWxmLCBleHByLCBtc2c9Tm9uZSk6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGV4cHIpOgorICAgICAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csICIlcyBleGlzdHMgd2hlbiBpdCBzaG91bGQgbm90IiAlIHNhZmVfcmVwcihleHByKSkKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9fc3N0YXRldGVzdHNfbm9hdXRvLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvX3NzdGF0ZXRlc3RzX25vYXV0by5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTU4OTYyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvX3NzdGF0ZXRlc3RzX25vYXV0by5weQpAQCAtMCwwICsxLDkyIEBACitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIGdldF90ZXN0X2xheWVyCitmcm9tIG9lcWEuc2VsZnRlc3QuY2FzZXMuc3N0YXRlIGltcG9ydCBTU3RhdGVCYXNlCisKKworY2xhc3MgUmVidWlsZEZyb21TU3RhdGUoU1N0YXRlQmFzZSk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgc3VwZXIoUmVidWlsZEZyb21TU3RhdGUsIHNlbGYpLnNldFVwQ2xhc3MoKQorICAgICAgICBzZWxmLmJ1aWxkZGlyID0gb3MucGF0aC5qb2luKG9zLmVudmlyb24uZ2V0KCdCVUlMRERJUicpKQorCisgICAgZGVmIGdldF9kZXBfdGFyZ2V0cyhzZWxmLCBwcmltYXJ5X3RhcmdldHMpOgorICAgICAgICBmb3VuZF90YXJnZXRzID0gW10KKyAgICAgICAgYml0YmFrZSgiLWcgIiArICcgJy5qb2luKG1hcChzdHIsIHByaW1hcnlfdGFyZ2V0cykpKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdwbi1idWlsZGxpc3QnKSwgJ3InKSBhcyBwbmZpbGU6CisgICAgICAgICAgICBmb3VuZF90YXJnZXRzID0gcG5maWxlLnJlYWQoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgcmV0dXJuIGZvdW5kX3RhcmdldHMKKworICAgIGRlZiBjb25maWd1cmVfYnVpbGRkaXIoc2VsZiwgYnVpbGRkaXIpOgorICAgICAgICBvcy5ta2RpcihidWlsZGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChidWlsZGRpcikKKyAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKGJ1aWxkZGlyLCAnY29uZicpKQorICAgICAgICBzaHV0aWwuY29weWZpbGUob3MucGF0aC5qb2luKG9zLmVudmlyb24uZ2V0KCdCVUlMRERJUicpLCAnY29uZi9sb2NhbC5jb25mJyksIG9zLnBhdGguam9pbihidWlsZGRpciwgJ2NvbmYvbG9jYWwuY29uZicpKQorICAgICAgICBjb25maWcgPSB7fQorICAgICAgICBjb25maWdbJ2RlZmF1bHRfc3N0YXRlX2RpciddID0gIlNTVEFURV9ESVIgPz0gXCIke1RPUERJUn0vc3N0YXRlLWNhY2hlXCIiCisgICAgICAgIGNvbmZpZ1snbnVsbF9zc3RhdGVfbWlycm9ycyddID0gIlNTVEFURV9NSVJST1JTID0gXCJcIiIKKyAgICAgICAgY29uZmlnWydkZWZhdWx0X3RtcF9kaXInXSA9ICJUTVBESVIgPSBcIiR7VE9QRElSfS90bXBcIiIKKyAgICAgICAgZm9yIGtleSBpbiBjb25maWc6CisgICAgICAgICAgICBmdG9vbHMuYXBwZW5kX2ZpbGUob3MucGF0aC5qb2luKGJ1aWxkZGlyLCAnY29uZi9zZWxmdGVzdC5pbmMnKSwgY29uZmlnW2tleV0pCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4ob3MuZW52aXJvbi5nZXQoJ0JVSUxERElSJyksICdjb25mL2JibGF5ZXJzLmNvbmYnKSwgb3MucGF0aC5qb2luKGJ1aWxkZGlyLCAnY29uZi9iYmxheWVycy5jb25mJykpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4ob3MuZW52aXJvbi5nZXQoJ0JVSUxERElSJyksICdjb25mL2F1dG8uY29uZicpLCBvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICdjb25mL2F1dG8uY29uZicpKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgaGFyZGxpbmtfdHJlZShzZWxmLCBzcmMsIGRzdCk6CisgICAgICAgIG9zLm1rZGlyKGRzdCkKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChkc3QpCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNyYyk6CisgICAgICAgICAgICBpZiByb290ID09IHNyYzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKGRzdCwgcm9vdC5zcGxpdChzcmMpWzFdWzE6XSkpCisgICAgICAgICAgICBmb3Igc3N0YXRlX2ZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgb3MubGluayhvcy5wYXRoLmpvaW4ocm9vdCwgc3N0YXRlX2ZpbGUpLCBvcy5wYXRoLmpvaW4oZHN0LCByb290LnNwbGl0KHNyYylbMV1bMTpdLCBzc3RhdGVfZmlsZSkpCisKKyAgICBkZWYgcnVuX3Rlc3Rfc3N0YXRlX3JlYnVpbGQoc2VsZiwgcHJpbWFyeV90YXJnZXRzLCByZWxvY2F0ZT1GYWxzZSwgcmVidWlsZF9kZXBlbmRlbmNpZXM9RmFsc2UpOgorICAgICAgICBidWlsZEEgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ2J1aWxkQScpCisgICAgICAgIGlmIHJlbG9jYXRlOgorICAgICAgICAgICAgYnVpbGRCID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdidWlsZEInKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYnVpbGRCID0gYnVpbGRBCisKKyAgICAgICAgaWYgcmVidWlsZF9kZXBlbmRlbmNpZXM6CisgICAgICAgICAgICByZWJ1aWxkX3RhcmdldHMgPSBzZWxmLmdldF9kZXBfdGFyZ2V0cyhwcmltYXJ5X3RhcmdldHMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZWJ1aWxkX3RhcmdldHMgPSBwcmltYXJ5X3RhcmdldHMKKworICAgICAgICBzZWxmLmNvbmZpZ3VyZV9idWlsZGRpcihidWlsZEEpCisgICAgICAgIHJ1bkNtZCgoIi4gJXMvb2UtaW5pdC1idWlsZC1lbnYgJXMgJiYgIiAlIChnZXRfYmJfdmFyKCdDT1JFQkFTRScpLCBidWlsZEEpKSArICdiaXRiYWtlICAnICsgJyAnLmpvaW4obWFwKHN0ciwgcHJpbWFyeV90YXJnZXRzKSksIHNoZWxsPVRydWUsIGV4ZWN1dGFibGU9Jy9iaW4vYmFzaCcpCisgICAgICAgIHNlbGYuaGFyZGxpbmtfdHJlZShvcy5wYXRoLmpvaW4oYnVpbGRBLCAnc3N0YXRlLWNhY2hlJyksIG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnc3N0YXRlLWNhY2hlLWJ1aWxkQScpKQorICAgICAgICBzaHV0aWwucm10cmVlKGJ1aWxkQSkKKworICAgICAgICBmYWlsZWRfcmVidWlsZCA9IFtdCisgICAgICAgIGZhaWxlZF9jbGVhbnNzdGF0ZSA9IFtdCisgICAgICAgIGZvciB0YXJnZXQgaW4gcmVidWlsZF90YXJnZXRzOgorICAgICAgICAgICAgc2VsZi5jb25maWd1cmVfYnVpbGRkaXIoYnVpbGRCKQorICAgICAgICAgICAgc2VsZi5oYXJkbGlua190cmVlKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnc3N0YXRlLWNhY2hlLWJ1aWxkQScpLCBvcy5wYXRoLmpvaW4oYnVpbGRCLCAnc3N0YXRlLWNhY2hlJykpCisKKyAgICAgICAgICAgIHJlc3VsdF9jbGVhbnNzdGF0ZSA9IHJ1bkNtZCgoIi4gJXMvb2UtaW5pdC1idWlsZC1lbnYgJXMgJiYgIiAlIChnZXRfYmJfdmFyKCdDT1JFQkFTRScpLCBidWlsZEIpKSArICdiaXRiYWtlIC1jY2xlYW5zc3RhdGUgJyArIHRhcmdldCwgaWdub3JlX3N0YXR1cz1UcnVlLCBzaGVsbD1UcnVlLCBleGVjdXRhYmxlPScvYmluL2Jhc2gnKQorICAgICAgICAgICAgaWYgbm90IHJlc3VsdF9jbGVhbnNzdGF0ZS5zdGF0dXMgPT0gMDoKKyAgICAgICAgICAgICAgICBmYWlsZWRfY2xlYW5zc3RhdGUuYXBwZW5kKHRhcmdldCkKKyAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGJ1aWxkQikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICByZXN1bHRfYnVpbGQgPSBydW5DbWQoKCIuICVzL29lLWluaXQtYnVpbGQtZW52ICVzICYmICIgJSAoZ2V0X2JiX3ZhcignQ09SRUJBU0UnKSwgYnVpbGRCKSkgKyAnYml0YmFrZSAnICsgdGFyZ2V0LCBpZ25vcmVfc3RhdHVzPVRydWUsIHNoZWxsPVRydWUsIGV4ZWN1dGFibGU9Jy9iaW4vYmFzaCcpCisgICAgICAgICAgICBpZiBub3QgcmVzdWx0X2J1aWxkLnN0YXR1cyA9PSAwOgorICAgICAgICAgICAgICAgIGZhaWxlZF9yZWJ1aWxkLmFwcGVuZCh0YXJnZXQpCisKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoYnVpbGRCKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmFpbGVkX3JlYnVpbGQsIG1zZz0iVGhlIGZvbGxvd2luZyByZWNpcGVzIGhhdmUgZmFpbGVkIHRvIHJlYnVpbGQ6ICVzIiAlICcgJy5qb2luKG1hcChzdHIsIGZhaWxlZF9yZWJ1aWxkKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmFpbGVkX2NsZWFuc3N0YXRlLCBtc2c9IlRoZSBmb2xsb3dpbmcgcmVjaXBlcyBoYXZlIGZhaWxlZCBjbGVhbnNzdGF0ZShhbGwgb3RoZXJzIGhhdmUgcGFzc2VkIGJvdGggY2xlYW5zc3RhdGUgYW5kIHJlYnVpbGQgZnJvbSBzc3RhdGUgdGVzdHMpOiAlcyIgJSAnICcuam9pbihtYXAoc3RyLCBmYWlsZWRfY2xlYW5zc3RhdGUpKSkKKworICAgIGRlZiB0ZXN0X3NzdGF0ZV9yZWxvY2F0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3NzdGF0ZV9yZWJ1aWxkKFsnY29yZS1pbWFnZS1zYXRvLXNkayddLCByZWxvY2F0ZT1UcnVlLCByZWJ1aWxkX2RlcGVuZGVuY2llcz1UcnVlKQorCisgICAgZGVmIHRlc3Rfc3N0YXRlX3JlYnVpbGQoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX3JlYnVpbGQoWydjb3JlLWltYWdlLXNhdG8tc2RrJ10sIHJlbG9jYXRlPUZhbHNlLCByZWJ1aWxkX2RlcGVuZGVuY2llcz1UcnVlKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvYXJjaGl2ZXIucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9hcmNoaXZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjFhNTIyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvYXJjaGl2ZXIucHkKQEAgLTAsMCArMSwxMTggQEAKK2ltcG9ydCBvcworaW1wb3J0IGdsb2IKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgYml0YmFrZSwgZ2V0X2JiX3ZhcnMKK2Zyb20gb2VxYS5zZWxmdGVzdC5jYXNlIGltcG9ydCBPRVNlbGZ0ZXN0VGVzdENhc2UKK2Zyb20gb2VxYS5jb3JlLmRlY29yYXRvci5vZWlkIGltcG9ydCBPRVRlc3RJRAorCitjbGFzcyBBcmNoaXZlcihPRVNlbGZ0ZXN0VGVzdENhc2UpOgorCisgICAgQE9FVGVzdElEKDEzNDUpCisgICAgZGVmIHRlc3RfYXJjaGl2ZXJfYWxsb3dzX3RvX2ZpbHRlcl9vbl9yZWNpcGVfbmFtZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6ICAgICBUaGUgYXJjaGl2ZXIgc2hvdWxkIG9mZmVyIHRoZSBwb3NzaWJpbGl0eSB0byBmaWx0ZXIgb24gdGhlIHJlY2lwZS4gKCM2OTI5KQorICAgICAgICBFeHBlY3RlZDogICAgMS4gSW5jbHVkZWQgcmVjaXBlIChidXN5Ym94KSBzaG91bGQgYmUgaW5jbHVkZWQKKyAgICAgICAgICAgICAgICAgICAgIDIuIEV4Y2x1ZGVkIHJlY2lwZSAoemxpYikgc2hvdWxkIGJlIGV4Y2x1ZGVkCisgICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogICAgICBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+CisgICAgICAgIEF1dG9tYXRlZEJ5OiBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+CisgICAgICAgICIiIgorCisgICAgICAgIGluY2x1ZGVfcmVjaXBlID0gJ2J1c3lib3gnCisgICAgICAgIGV4Y2x1ZGVfcmVjaXBlID0gJ3psaWInCisKKyAgICAgICAgZmVhdHVyZXMgPSAnSU5IRVJJVCArPSAiYXJjaGl2ZXIiXG4nCisgICAgICAgIGZlYXR1cmVzICs9ICdBUkNISVZFUl9NT0RFW3NyY10gPSAib3JpZ2luYWwiXG4nCisgICAgICAgIGZlYXR1cmVzICs9ICdDT1BZTEVGVF9QTl9JTkNMVURFID0gIiVzIlxuJyAlIGluY2x1ZGVfcmVjaXBlCisgICAgICAgIGZlYXR1cmVzICs9ICdDT1BZTEVGVF9QTl9FWENMVURFID0gIiVzIlxuJyAlIGV4Y2x1ZGVfcmVjaXBlCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKGZlYXR1cmVzKQorCisgICAgICAgIGJpdGJha2UoJy1jIGNsZWFuICVzICVzJyAlIChpbmNsdWRlX3JlY2lwZSwgZXhjbHVkZV9yZWNpcGUpKQorICAgICAgICBiaXRiYWtlKCItYyBkZXBsb3lfYXJjaGl2ZXMgJXMgJXMiICUgKGluY2x1ZGVfcmVjaXBlLCBleGNsdWRlX3JlY2lwZSkpCisKKyAgICAgICAgYmJfdmFycyA9IGdldF9iYl92YXJzKFsnREVQTE9ZX0RJUl9TUkMnLCAnVEFSR0VUX1NZUyddKQorICAgICAgICBzcmNfcGF0aCA9IG9zLnBhdGguam9pbihiYl92YXJzWydERVBMT1lfRElSX1NSQyddLCBiYl92YXJzWydUQVJHRVRfU1lTJ10pCisKKyAgICAgICAgIyBDaGVjayB0aGF0IGluY2x1ZGVfcmVjaXBlIHdhcyBpbmNsdWRlZAorICAgICAgICBpbmNsdWRlZF9wcmVzZW50ID0gbGVuKGdsb2IuZ2xvYihzcmNfcGF0aCArICcvJXMtKicgJSBpbmNsdWRlX3JlY2lwZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmNsdWRlZF9wcmVzZW50LCAnUmVjaXBlICVzIHdhcyBub3QgaW5jbHVkZWQuJyAlIGluY2x1ZGVfcmVjaXBlKQorCisgICAgICAgICMgQ2hlY2sgdGhhdCBleGNsdWRlX3JlY2lwZSB3YXMgZXhjbHVkZWQKKyAgICAgICAgZXhjbHVkZWRfcHJlc2VudCA9IGxlbihnbG9iLmdsb2Ioc3JjX3BhdGggKyAnLyVzLSonICUgZXhjbHVkZV9yZWNpcGUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV4Y2x1ZGVkX3ByZXNlbnQsICdSZWNpcGUgJXMgd2FzIG5vdCBleGNsdWRlZC4nICUgZXhjbHVkZV9yZWNpcGUpCisKKyAgICBAT0VUZXN0SUQoMTkwMCkKKyAgICBkZWYgdGVzdF9hcmNoaXZlcl9maWx0ZXJzX2J5X3R5cGUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgVGhlIGFyY2hpdmVyIGlzIGRvY3VtZW50ZWQgdG8gZmlsdGVyIG9uIHRoZSByZWNpcGUgdHlwZS4KKyAgICAgICAgRXhwZWN0ZWQ6ICAgIDEuIGluY2x1ZGVkIHJlY2lwZSB0eXBlICh0YXJnZXQpIHNob3VsZCBiZSBpbmNsdWRlZAorICAgICAgICAgICAgICAgICAgICAgMi4gb3RoZXIgdHlwZXMgc2hvdWxkIGJlIGV4Y2x1ZGVkCisgICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogICAgICBBbmRyw6kgRHJhc3ppayA8YWRyYXN6aWtAdHljb2ludC5jb20+CisgICAgICAgICIiIgorCisgICAgICAgIHRhcmdldF9yZWNpcGUgPSAnaW5pdHNjcmlwdHMnCisgICAgICAgIG5hdGl2ZV9yZWNpcGUgPSAnemxpYi1uYXRpdmUnCisKKyAgICAgICAgZmVhdHVyZXMgPSAnSU5IRVJJVCArPSAiYXJjaGl2ZXIiXG4nCisgICAgICAgIGZlYXR1cmVzICs9ICdBUkNISVZFUl9NT0RFW3NyY10gPSAib3JpZ2luYWwiXG4nCisgICAgICAgIGZlYXR1cmVzICs9ICdDT1BZTEVGVF9SRUNJUEVfVFlQRVMgPSAidGFyZ2V0IlxuJworICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhmZWF0dXJlcykKKworICAgICAgICBiaXRiYWtlKCctYyBjbGVhbiAlcyAlcycgJSAodGFyZ2V0X3JlY2lwZSwgbmF0aXZlX3JlY2lwZSkpCisgICAgICAgIGJpdGJha2UoIiVzIC1jIGRlcGxveV9hcmNoaXZlcyAlcyIgJSAodGFyZ2V0X3JlY2lwZSwgbmF0aXZlX3JlY2lwZSkpCisKKyAgICAgICAgYmJfdmFycyA9IGdldF9iYl92YXJzKFsnREVQTE9ZX0RJUl9TUkMnLCAnVEFSR0VUX1NZUycsICdCVUlMRF9TWVMnXSkKKyAgICAgICAgc3JjX3BhdGhfdGFyZ2V0ID0gb3MucGF0aC5qb2luKGJiX3ZhcnNbJ0RFUExPWV9ESVJfU1JDJ10sIGJiX3ZhcnNbJ1RBUkdFVF9TWVMnXSkKKyAgICAgICAgc3JjX3BhdGhfbmF0aXZlID0gb3MucGF0aC5qb2luKGJiX3ZhcnNbJ0RFUExPWV9ESVJfU1JDJ10sIGJiX3ZhcnNbJ0JVSUxEX1NZUyddKQorCisgICAgICAgICMgQ2hlY2sgdGhhdCB0YXJnZXRfcmVjaXBlIHdhcyBpbmNsdWRlZAorICAgICAgICBpbmNsdWRlZF9wcmVzZW50ID0gbGVuKGdsb2IuZ2xvYihzcmNfcGF0aF90YXJnZXQgKyAnLyVzLSonICUgdGFyZ2V0X3JlY2lwZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmNsdWRlZF9wcmVzZW50LCAnUmVjaXBlICVzIHdhcyBub3QgaW5jbHVkZWQuJyAlIHRhcmdldF9yZWNpcGUpCisKKyAgICAgICAgIyBDaGVjayB0aGF0IG5hdGl2ZV9yZWNpcGUgd2FzIGV4Y2x1ZGVkCisgICAgICAgIGV4Y2x1ZGVkX3ByZXNlbnQgPSBsZW4oZ2xvYi5nbG9iKHNyY19wYXRoX25hdGl2ZSArICcvJXMtKicgJSBuYXRpdmVfcmVjaXBlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShleGNsdWRlZF9wcmVzZW50LCAnUmVjaXBlICVzIHdhcyBub3QgZXhjbHVkZWQuJyAlIG5hdGl2ZV9yZWNpcGUpCisKKyAgICBAT0VUZXN0SUQoMTkwMSkKKyAgICBkZWYgdGVzdF9hcmNoaXZlcl9maWx0ZXJzX2J5X3R5cGVfYW5kX25hbWUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgVGVzdCB0aGF0IHRoZSBhcmNoaXZlciBhcmNoaXZlcyBieSByZWNpcGUgdHlwZSwgdGFraW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgcmVjaXBlIG5hbWUgaW50byBhY2NvdW50LgorICAgICAgICBFeHBlY3RlZDogICAgMS4gaW5jbHVkZWQgcmVjaXBlIHR5cGUgKHRhcmdldCkgc2hvdWxkIGJlIGluY2x1ZGVkCisgICAgICAgICAgICAgICAgICAgICAyLiBvdGhlciB0eXBlcyBzaG91bGQgYmUgZXhjbHVkZWQKKyAgICAgICAgICAgICAgICAgICAgIDMuIHJlY2lwZSBieSBuYW1lIHNob3VsZCBiZSBpbmNsdWRlZCAvIGV4Y2x1ZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGluZyBwcmV2aW91cyBkZWNpc2lvbiBieSB0eXBlCisgICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogICAgICBBbmRyw6kgRHJhc3ppayA8YWRyYXN6aWtAdHljb2ludC5jb20+CisgICAgICAgICIiIgorCisgICAgICAgIHRhcmdldF9yZWNpcGVzID0gWyAnaW5pdHNjcmlwdHMnLCAnemxpYicgXQorICAgICAgICBuYXRpdmVfcmVjaXBlcyA9IFsgJ3VwZGF0ZS1yYy5kLW5hdGl2ZScsICd6bGliLW5hdGl2ZScgXQorCisgICAgICAgIGZlYXR1cmVzID0gJ0lOSEVSSVQgKz0gImFyY2hpdmVyIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnQVJDSElWRVJfTU9ERVtzcmNdID0gIm9yaWdpbmFsIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnQ09QWUxFRlRfUkVDSVBFX1RZUEVTID0gInRhcmdldCJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ0NPUFlMRUZUX1BOX0lOQ0xVREUgPSAiJXMiXG4nICUgbmF0aXZlX3JlY2lwZXNbMV0KKyAgICAgICAgZmVhdHVyZXMgKz0gJ0NPUFlMRUZUX1BOX0VYQ0xVREUgPSAiJXMiXG4nICUgdGFyZ2V0X3JlY2lwZXNbMV0KKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoZmVhdHVyZXMpCisKKyAgICAgICAgYml0YmFrZSgnLWMgY2xlYW4gJXMgJXMnICUgKCcgJy5qb2luKHRhcmdldF9yZWNpcGVzKSwgJyAnLmpvaW4obmF0aXZlX3JlY2lwZXMpKSkKKyAgICAgICAgYml0YmFrZSgnLWMgZGVwbG95X2FyY2hpdmVzICVzICVzJyAlICgnICcuam9pbih0YXJnZXRfcmVjaXBlcyksICcgJy5qb2luKG5hdGl2ZV9yZWNpcGVzKSkpCisKKyAgICAgICAgYmJfdmFycyA9IGdldF9iYl92YXJzKFsnREVQTE9ZX0RJUl9TUkMnLCAnVEFSR0VUX1NZUycsICdCVUlMRF9TWVMnXSkKKyAgICAgICAgc3JjX3BhdGhfdGFyZ2V0ID0gb3MucGF0aC5qb2luKGJiX3ZhcnNbJ0RFUExPWV9ESVJfU1JDJ10sIGJiX3ZhcnNbJ1RBUkdFVF9TWVMnXSkKKyAgICAgICAgc3JjX3BhdGhfbmF0aXZlID0gb3MucGF0aC5qb2luKGJiX3ZhcnNbJ0RFUExPWV9ESVJfU1JDJ10sIGJiX3ZhcnNbJ0JVSUxEX1NZUyddKQorCisgICAgICAgICMgQ2hlY2sgdGhhdCB0YXJnZXRfcmVjaXBlWzBdIGFuZCBuYXRpdmVfcmVjaXBlc1sxXSB3ZXJlIGluY2x1ZGVkCisgICAgICAgIGluY2x1ZGVkX3ByZXNlbnQgPSBsZW4oZ2xvYi5nbG9iKHNyY19wYXRoX3RhcmdldCArICcvJXMtKicgJSB0YXJnZXRfcmVjaXBlc1swXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmNsdWRlZF9wcmVzZW50LCAnUmVjaXBlICVzIHdhcyBub3QgaW5jbHVkZWQuJyAlIHRhcmdldF9yZWNpcGVzWzBdKQorCisgICAgICAgIGluY2x1ZGVkX3ByZXNlbnQgPSBsZW4oZ2xvYi5nbG9iKHNyY19wYXRoX25hdGl2ZSArICcvJXMtKicgJSBuYXRpdmVfcmVjaXBlc1sxXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmNsdWRlZF9wcmVzZW50LCAnUmVjaXBlICVzIHdhcyBub3QgaW5jbHVkZWQuJyAlIG5hdGl2ZV9yZWNpcGVzWzFdKQorCisgICAgICAgICMgQ2hlY2sgdGhhdCBuYXRpdmVfcmVjaXBlc1swXSBhbmQgdGFyZ2V0X3JlY2lwZXNbMV0gd2VyZSBleGNsdWRlZAorICAgICAgICBleGNsdWRlZF9wcmVzZW50ID0gbGVuKGdsb2IuZ2xvYihzcmNfcGF0aF9uYXRpdmUgKyAnLyVzLSonICUgbmF0aXZlX3JlY2lwZXNbMF0pKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV4Y2x1ZGVkX3ByZXNlbnQsICdSZWNpcGUgJXMgd2FzIG5vdCBleGNsdWRlZC4nICUgbmF0aXZlX3JlY2lwZXNbMF0pCisKKyAgICAgICAgZXhjbHVkZWRfcHJlc2VudCA9IGxlbihnbG9iLmdsb2Ioc3JjX3BhdGhfdGFyZ2V0ICsgJy8lcy0qJyAlIHRhcmdldF9yZWNpcGVzWzFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShleGNsdWRlZF9wcmVzZW50LCAnUmVjaXBlICVzIHdhcyBub3QgZXhjbHVkZWQuJyAlIHRhcmdldF9yZWNpcGVzWzFdKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvYmJsYXllcnMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9iYmxheWVycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGEyMjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvYmJsYXllcnMucHkKQEAgLTAsMCArMSw5NyBAQAoraW1wb3J0IG9zCitpbXBvcnQgcmUKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGdldF9iYl92YXIKKworZnJvbSBvZXFhLnNlbGZ0ZXN0LmNhc2UgaW1wb3J0IE9FU2VsZnRlc3RUZXN0Q2FzZQorZnJvbSBvZXFhLmNvcmUuZGVjb3JhdG9yLm9laWQgaW1wb3J0IE9FVGVzdElECisKK2NsYXNzIEJpdGJha2VMYXllcnMoT0VTZWxmdGVzdFRlc3RDYXNlKToKKworICAgIEBPRVRlc3RJRCg3NTYpCisgICAgZGVmIHRlc3RfYml0YmFrZWxheWVyc19zaG93Y3Jvc3NkZXBlbmRzKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctY3Jvc3MtZGVwZW5kcycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYXNwZWxsJyBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiTm8gZGVwZW5kZW5jaWVzIHdlcmUgc2hvd24uIGJpdGJha2UtbGF5ZXJzIHNob3ctY3Jvc3MtZGVwZW5kcyBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAT0VUZXN0SUQoODMpCisgICAgZGVmIHRlc3RfYml0YmFrZWxheWVyc19zaG93bGF5ZXJzKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdtZXRhLXNlbGZ0ZXN0JyBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiTm8gbGF5ZXJzIHdlcmUgc2hvd24uIGJpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEBPRVRlc3RJRCg5MykKKyAgICBkZWYgdGVzdF9iaXRiYWtlbGF5ZXJzX3Nob3dhcHBlbmRzKHNlbGYpOgorICAgICAgICByZWNpcGUgPSAieGN1cnNvci10cmFuc3BhcmVudC10aGVtZSIKKyAgICAgICAgYmJfZmlsZSA9IHNlbGYuZ2V0X3JlY2lwZV9iYXNlbmFtZShyZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1hcHBlbmRzJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiX2ZpbGUgaW4gcmVzdWx0Lm91dHB1dCwgbXNnPSIlcyBmaWxlIHdhcyBub3QgcmVjb2duaXNlZC4gYml0YmFrZS1sYXllcnMgc2hvdy1hcHBlbmRzIG91dHB1dDogJXMiICUgKGJiX2ZpbGUsIHJlc3VsdC5vdXRwdXQpKQorCisgICAgQE9FVGVzdElEKDkwKQorICAgIGRlZiB0ZXN0X2JpdGJha2VsYXllcnNfc2hvd292ZXJsYXllZChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LW92ZXJsYXllZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYXNwZWxsJyBpbiByZXN1bHQub3V0cHV0LCBtc2c9ImFzcGVsbCBvdmVybGF5ZWQgcmVjaXBlIHdhcyBub3QgcmVjb2duaXNlZCBiaXRiYWtlLWxheWVycyBzaG93LW92ZXJsYXllZCAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQE9FVGVzdElEKDk1KQorICAgIGRlZiB0ZXN0X2JpdGJha2VsYXllcnNfZmxhdHRlbihzZWxmKToKKyAgICAgICAgcmVjaXBlID0gInhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUiCisgICAgICAgIHJlY2lwZV9wYXRoID0gInJlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZSIKKyAgICAgICAgcmVjaXBlX2ZpbGUgPSBzZWxmLmdldF9yZWNpcGVfYmFzZW5hbWUocmVjaXBlKQorICAgICAgICB0ZXN0b3V0ZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd0ZXN0X2JpdGJha2VsYXllcnNfZmxhdHRlbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5pc2Rpcih0ZXN0b3V0ZGlyKSwgbXNnID0gInRlc3RfYml0YmFrZWxheWVyc19mbGF0dGVuIHNob3VsZCBub3QgZXhpc3QgYXQgdGhpcyBwb2ludCBpbiB0aW1lIikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZXN0b3V0ZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIGZsYXR0ZW4gJXMnICUgdGVzdG91dGRpcikKKyAgICAgICAgYmJfZmlsZSA9IG9zLnBhdGguam9pbih0ZXN0b3V0ZGlyLCByZWNpcGVfcGF0aCwgcmVjaXBlX2ZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShiYl9maWxlKSwgbXNnID0gIkNhbm5vdCBmaW5kIHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWVfMC4xLjEuYmIgaW4gdGhlIHRlc3RfYml0YmFrZWxheWVyc19mbGF0dGVuIGxvY2FsIGRpci4iKQorICAgICAgICBjb250ZW50cyA9IGZ0b29scy5yZWFkX2ZpbGUoYmJfZmlsZSkKKyAgICAgICAgZmluZF9pbl9jb250ZW50cyA9IHJlLnNlYXJjaCgiIyMjIyMgYmJhcHBlbmRlZCBmcm9tIG1ldGEtc2VsZnRlc3QgIyMjIyNcbiguKlxuKSppbmNsdWRlIHRlc3RfcmVjaXBlLmluYyIsIGNvbnRlbnRzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluZF9pbl9jb250ZW50cywgbXNnID0gIkZsYXR0ZW5pbmcgbGF5ZXJzIGRpZCBub3Qgd29yay4gYml0YmFrZS1sYXllcnMgZmxhdHRlbiBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAT0VUZXN0SUQoMTE5NSkKKyAgICBkZWYgdGVzdF9iaXRiYWtlbGF5ZXJzX2FkZF9yZW1vdmUoc2VsZik6CisgICAgICAgIHRlc3RfbGF5ZXIgPSBvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcignQ09SRUJBU0UnKSwgJ21ldGEtc2tlbGV0b24nKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbWV0YS1za2VsZXRvbicsIHJlc3VsdC5vdXRwdXQsICJUaGlzIHRlc3QgY2Fubm90IHJ1biB3aXRoIG1ldGEtc2tlbGV0b24gaW4gYmJsYXllcnMuY29uZi4gYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMgb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIGFkZC1sYXllciAlcycgJSB0ZXN0X2xheWVyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbWV0YS1za2VsZXRvbicsIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJTb21ldGhpbmcgd3JvbmcgaGFwcGVuZWQuIG1ldGEtc2tlbGV0b24gbGF5ZXIgd2FzIG5vdCBhZGRlZCB0byBjb25mL2JibGF5ZXJzLmNvbmYuICBiaXRiYWtlLWxheWVycyBzaG93LWxheWVycyBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICVzJyAlIHRlc3RfbGF5ZXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtZXRhLXNrZWxldG9uJywgcmVzdWx0Lm91dHB1dCwgbXNnID0gIm1ldGEtc2tlbGV0b24gc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkIGF0IHRoaXMgc3RlcC4gIGJpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBhZGQtbGF5ZXIgJXMnICUgdGVzdF9sYXllcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LWxheWVycycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ21ldGEtc2tlbGV0b24nLCByZXN1bHQub3V0cHV0LCBtc2cgPSAiU29tZXRoaW5nIHdyb25nIGhhcHBlbmVkLiBtZXRhLXNrZWxldG9uIGxheWVyIHdhcyBub3QgYWRkZWQgdG8gY29uZi9iYmxheWVycy5jb25mLiAgYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMgb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL21ldGEtc2tlbGV0b24nKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbWV0YS1za2VsZXRvbicsIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJtZXRhLXNrZWxldG9uIHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCBhdCB0aGlzIHN0ZXAuICBiaXRiYWtlLWxheWVycyBzaG93LWxheWVycyBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAT0VUZXN0SUQoMTM4NCkKKyAgICBkZWYgdGVzdF9iaXRiYWtlbGF5ZXJzX3Nob3dyZWNpcGVzKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctcmVjaXBlcycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2FzcGVsbDonLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdtdGQtdXRpbHM6JywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignY29yZS1pbWFnZS1taW5pbWFsOicsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1yZWNpcGVzIG10ZC11dGlscycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ210ZC11dGlsczonLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdhc3BlbGw6JywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LXJlY2lwZXMgLWkgaW1hZ2UnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdjb3JlLWltYWdlLW1pbmltYWwnLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtdGQtdXRpbHM6JywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LXJlY2lwZXMgLWkgY21ha2UscGtnY29uZmlnJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGlicHJveHk6JywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbXRkLXV0aWxzOicsIHJlc3VsdC5vdXRwdXQpICMgZG9lc24ndCBpbmhlcml0IGVpdGhlcgorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCd3Z2V0OicsIHJlc3VsdC5vdXRwdXQpICMgZG9lc24ndCBpbmhlcml0IGNtYWtlCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3dhZmZsZTonLCByZXN1bHQub3V0cHV0KSAjIGRvZXNuJ3QgaW5oZXJpdCBwa2djb25maWcKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LXJlY2lwZXMgLWkgbm9uZXhpc3RlbnRjbGFzcycsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQuc3RhdHVzLCAwLCAnYml0YmFrZS1sYXllcnMgc2hvdy1yZWNpcGVzIC1pIG5vbmV4aXN0ZW50Y2xhc3Mgc2hvdWxkIGhhdmUgZmFpbGVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignRVJST1I6JywgcmVzdWx0Lm91dHB1dCkKKworICAgIGRlZiBnZXRfcmVjaXBlX2Jhc2VuYW1lKHNlbGYsIHJlY2lwZSk6CisgICAgICAgIHJlY2lwZV9maWxlID0gIiIKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJiaXRiYWtlLWxheWVycyBzaG93LXJlY2lwZXMgLWYgJXMiICUgcmVjaXBlKQorICAgICAgICBmb3IgbGluZSBpbiByZXN1bHQub3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIGlmIHJlY2lwZSBpbiBsaW5lOgorICAgICAgICAgICAgICAgIHJlY2lwZV9maWxlID0gbGluZQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHJlY2lwZV9maWxlKSwgbXNnID0gIkNhbid0IGZpbmQgcmVjaXBlIGZpbGUgZm9yICVzIiAlIHJlY2lwZSkKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguYmFzZW5hbWUocmVjaXBlX2ZpbGUpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9iYnRlc3RzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvYmJ0ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzgyMDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvYmJ0ZXN0cy5weQpAQCAtMCwwICsxLDI3OSBAQAoraW1wb3J0IG9zCitpbXBvcnQgcmUKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIGdldF9iYl92YXJzCisKK2Zyb20gb2VxYS5zZWxmdGVzdC5jYXNlIGltcG9ydCBPRVNlbGZ0ZXN0VGVzdENhc2UKK2Zyb20gb2VxYS5jb3JlLmRlY29yYXRvci5vZWlkIGltcG9ydCBPRVRlc3RJRAorCitjbGFzcyBCaXRiYWtlVGVzdHMoT0VTZWxmdGVzdFRlc3RDYXNlKToKKworICAgIGRlZiBnZXRsaW5lKHNlbGYsIHJlcywgbGluZSk6CisgICAgICAgIGZvciBsIGluIHJlcy5vdXRwdXQuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICBpZiBsaW5lIGluIGw6CisgICAgICAgICAgICAgICAgcmV0dXJuIGwKKworICAgIEBPRVRlc3RJRCg3ODkpCisgICAgZGVmIHRlc3RfcnVuX2JpdGJha2VfZnJvbV9kaXJfMShzZWxmKToKKyAgICAgICAgb3MuY2hkaXIob3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdjb25mJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYml0YmFrZSgnLWUnKS5zdGF0dXMsIDAsIG1zZyA9ICJiaXRiYWtlIGNvdWxkbid0IHJ1biBmcm9tIFwiY29uZlwiIGRpciIpCisKKyAgICBAT0VUZXN0SUQoNzkwKQorICAgIGRlZiB0ZXN0X3J1bl9iaXRiYWtlX2Zyb21fZGlyXzIoc2VsZik6CisgICAgICAgIG15X2VudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIG15X2VudlsnQkJQQVRIJ10gPSBteV9lbnZbJ0JVSUxERElSJ10KKyAgICAgICAgb3MuY2hkaXIob3MucGF0aC5kaXJuYW1lKG9zLmVudmlyb25bJ0JVSUxERElSJ10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpdGJha2UoJy1lJywgZW52PW15X2Vudikuc3RhdHVzLCAwLCBtc2cgPSAiYml0YmFrZSBjb3VsZG4ndCBydW4gZnJvbSBidWlsZGRpciIpCisKKyAgICBAT0VUZXN0SUQoODA2KQorICAgIGRlZiB0ZXN0X2V2ZW50X2hhbmRsZXIoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCJJTkhFUklUICs9IFwidGVzdF9ldmVudHNcIiIpCisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJ200LW5hdGl2ZScpCisgICAgICAgIGZpbmRfYnVpbGRfc3RhcnRlZCA9IHJlLnNlYXJjaCgiTk9URTogVGVzdCBmb3IgYmJcLmV2ZW50XC5CdWlsZFN0YXJ0ZWQoXG4uKikqTk9URTogRXhlY3V0aW5nIFJ1blF1ZXVlIFRhc2tzIiwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgZmluZF9idWlsZF9jb21wbGV0ZWQgPSByZS5zZWFyY2goIlRhc2tzIFN1bW1hcnk6LiooXG4uKikqTk9URTogVGVzdCBmb3IgYmJcLmV2ZW50XC5CdWlsZENvbXBsZXRlZCIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kX2J1aWxkX3N0YXJ0ZWQsIG1zZyA9ICJNYXRjaCBmYWlsZWQgaW46XG4lcyIgICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRfYnVpbGRfY29tcGxldGVkLCBtc2cgPSAiTWF0Y2ggZmFpbGVkIGluOlxuJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnVGVzdCBmb3IgYmIuZXZlbnQuSW52YWxpZEV2ZW50JyBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiXCJUZXN0IGZvciBiYi5ldmVudC5JbnZhbGlkRXZlbnRcIiBtZXNzYWdlIGZvdW5kIGR1cmluZyBiaXRiYWtlIHByb2Nlc3MuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQE9FVGVzdElEKDEwMykKKyAgICBkZWYgdGVzdF9sb2NhbF9zc3RhdGUoc2VsZik6CisgICAgICAgIGJpdGJha2UoJ200LW5hdGl2ZScpCisgICAgICAgIGJpdGJha2UoJ200LW5hdGl2ZSAtY2NsZWFuJykKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnbTQtbmF0aXZlJykKKyAgICAgICAgZmluZF9zZXRzY2VuZSA9IHJlLnNlYXJjaCgibTQtbmF0aXZlLipkb18uKl9zZXRzY2VuZSIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kX3NldHNjZW5lLCBtc2cgPSAiTm8gXCJtNC1uYXRpdmUuKmRvXy4qX3NldHNjZW5lXCIgbWVzc2FnZSBmb3VuZCBkdXJpbmcgYml0YmFrZSBtNC1uYXRpdmUuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0ICkKKworICAgIEBPRVRlc3RJRCgxMDUpCisgICAgZGVmIHRlc3RfYml0YmFrZV9pbnZhbGlkX3JlY2lwZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnLWIgYXNkZicsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJFUlJPUjogVW5hYmxlIHRvIGZpbmQgYW55IHJlY2lwZSBmaWxlIG1hdGNoaW5nICdhc2RmJyIgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gIlRob3VnaCBhc2RmIHJlY2lwZSBkb2Vzbid0IGV4aXN0LCBiaXRiYWtlIGRpZG4ndCBvdXRwdXQgYW55IGVyci4gbWVzc2FnZS4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAT0VUZXN0SUQoMTA3KQorICAgIGRlZiB0ZXN0X2JpdGJha2VfaW52YWxpZF90YXJnZXQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJ2FzZGYnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiRVJST1I6IE5vdGhpbmcgUFJPVklERVMgJ2FzZGYnIiBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiVGhvdWdoIG5vICdhc2RmJyB0YXJnZXQgZXhpc3RzLCBiaXRiYWtlIGRpZG4ndCBvdXRwdXQgYW55IGVyci4gbWVzc2FnZS4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAT0VUZXN0SUQoMTA2KQorICAgIGRlZiB0ZXN0X3dhcm5pbmdzX2Vycm9ycyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnLWIgYXNkZicsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgZmluZF93YXJuaW5ncyA9IHJlLnNlYXJjaCgiU3VtbWFyeTogVGhlcmUgdy57MiwzfT8gWzEtOV1bMC05XSogV0FSTklORyBtZXNzYWdlcyogc2hvd24iLCByZXN1bHQub3V0cHV0KQorICAgICAgICBmaW5kX2Vycm9ycyA9IHJlLnNlYXJjaCgiU3VtbWFyeTogVGhlcmUgdy57MiwzfT8gWzEtOV1bMC05XSogRVJST1IgbWVzc2FnZXMqIHNob3duIiwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRfd2FybmluZ3MsIG1zZz0iRGlkIG5vdCBmaW5kIHRoZSBtdW1iZXIgb2Ygd2FybmluZ3MgYXQgdGhlIGVuZCBvZiB0aGUgYnVpbGQ6XG4iICsgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRfZXJyb3JzLCBtc2c9IkRpZCBub3QgZmluZCB0aGUgbXVtYmVyIG9mIGVycm9ycyBhdCB0aGUgZW5kIG9mIHRoZSBidWlsZDpcbiIgKyByZXN1bHQub3V0cHV0KQorCisgICAgQE9FVGVzdElEKDEwOCkKKyAgICBkZWYgdGVzdF9pbnZhbGlkX3BhdGNoKHNlbGYpOgorICAgICAgICAjIFRoaXMgcGF0Y2ggYWxyZWFkeSBleGlzdHMgaW4gU1JDX1VSSSBzbyBhZGRpbmcgaXQgYWdhaW4gd2lsbCBjYXVzZSB0aGUKKyAgICAgICAgIyBwYXRjaCB0byBmYWlsLgorICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYygnbWFuJywgJ1NSQ19VUkkgKz0gImZpbGU6Ly9tYW4tMS41aDEtbWFrZS5wYXRjaCInKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiSU5IRVJJVF9yZW1vdmUgPSBcInJlcG9ydC1lcnJvclwiIikKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnbWFuIC1jIHBhdGNoJywgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmRlbGV0ZV9yZWNpcGVpbmMoJ21hbicpCisgICAgICAgIGJpdGJha2UoJy1jY2xlYW4gbWFuJykKKyAgICAgICAgbGluZSA9IHNlbGYuZ2V0bGluZShyZXN1bHQsICJGdW5jdGlvbiBmYWlsZWQ6IHBhdGNoX2RvX3BhdGNoIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmUgYW5kIGxpbmUuc3RhcnRzd2l0aCgiRVJST1I6IiksIG1zZyA9ICJSZXBlYXRlZCBwYXRjaCBhcHBsaWNhdGlvbiBkaWRuJ3QgZmFpbC4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAT0VUZXN0SUQoMTM1NCkKKyAgICBkZWYgdGVzdF9mb3JjZV90YXNrXzEoc2VsZik6CisgICAgICAgICMgdGVzdCAxIGZyb20gYnVnIDU4NzUKKyAgICAgICAgdGVzdF9yZWNpcGUgPSAnemxpYicKKyAgICAgICAgdGVzdF9kYXRhID0gIk1pY3Jvc29mdCBNYWRlIE5vIFByb2ZpdCBGcm9tIEFueW9uZSdzIFp1bmVzIFlvIgorICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWydEJywgJ1BLR0RFU1QnLCAnbWFuZGlyJ10sIHRlc3RfcmVjaXBlKQorICAgICAgICBpbWFnZV9kaXIgPSBiYl92YXJzWydEJ10KKyAgICAgICAgcGtnc3BsaXRfZGlyID0gYmJfdmFyc1snUEtHREVTVCddCisgICAgICAgIG1hbl9kaXIgPSBiYl92YXJzWydtYW5kaXInXQorCisgICAgICAgIGJpdGJha2UoJy1jIGNsZWFuICVzJyAlIHRlc3RfcmVjaXBlKQorICAgICAgICBiaXRiYWtlKCctYyBwYWNrYWdlIC1mICVzJyAlIHRlc3RfcmVjaXBlKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuICVzJyAlIHRlc3RfcmVjaXBlKQorCisgICAgICAgIG1hbl9maWxlID0gb3MucGF0aC5qb2luKGltYWdlX2RpciArIG1hbl9kaXIsICdtYW4zL3psaWIuMycpCisgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShtYW5fZmlsZSwgdGVzdF9kYXRhKQorICAgICAgICBiaXRiYWtlKCctYyBwYWNrYWdlIC1mICVzJyAlIHRlc3RfcmVjaXBlKQorCisgICAgICAgIG1hbl9zcGxpdF9maWxlID0gb3MucGF0aC5qb2luKHBrZ3NwbGl0X2RpciwgJ3psaWItZG9jJyArIG1hbl9kaXIsICdtYW4zL3psaWIuMycpCisgICAgICAgIG1hbl9zcGxpdF9jb250ZW50ID0gZnRvb2xzLnJlYWRfZmlsZShtYW5fc3BsaXRfZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZXN0X2RhdGEsIG1hbl9zcGxpdF9jb250ZW50LCAnVGhlIG1hbiBmaWxlIGhhcyBub3QgY2hhbmdlZCBpbiBwYWNrYWdlcy1zcGxpdC4nKQorCisgICAgICAgIHJldCA9IGJpdGJha2UodGVzdF9yZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3Rhc2sgZG9fcGFja2FnZV93cml0ZV9ycG06JywgcmV0Lm91dHB1dCwgJ1Rhc2sgZG9fcGFja2FnZV93cml0ZV9ycG0gZGlkIG5vdCByZS1leGVjdXRlZC4nKQorCisgICAgQE9FVGVzdElEKDE2MykKKyAgICBkZWYgdGVzdF9mb3JjZV90YXNrXzIoc2VsZik6CisgICAgICAgICMgdGVzdCAyIGZyb20gYnVnIDU4NzUKKyAgICAgICAgdGVzdF9yZWNpcGUgPSAnemxpYicKKworICAgICAgICBiaXRiYWtlKHRlc3RfcmVjaXBlKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuICVzJyAlIHRlc3RfcmVjaXBlKQorCisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJy1DIGNvbXBpbGUgJXMnICUgdGVzdF9yZWNpcGUpCisgICAgICAgIGxvb2tfZm9yX3Rhc2tzID0gWydkb19jb21waWxlOicsICdkb19pbnN0YWxsOicsICdkb19wb3B1bGF0ZV9zeXNyb290OicsICdkb19wYWNrYWdlOiddCisgICAgICAgIGZvciB0YXNrIGluIGxvb2tfZm9yX3Rhc2tzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih0YXNrLCByZXN1bHQub3V0cHV0LCBtc2c9IkNvdWxkbid0IGZpbmQgJXMgdGFzay4iKQorCisgICAgQE9FVGVzdElEKDE2NykKKyAgICBkZWYgdGVzdF9iaXRiYWtlX2coc2VsZik6CisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJy1nIGNvcmUtaW1hZ2UtbWluaW1hbCcpCisgICAgICAgIGZvciBmIGluIFsncG4tYnVpbGRsaXN0JywgJ3JlY2lwZS1kZXBlbmRzLmRvdCcsICd0YXNrLWRlcGVuZHMuZG90J106CisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAob3MucmVtb3ZlLCBmKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1Rhc2sgZGVwZW5kZW5jaWVzIHNhdmVkIHRvIFwndGFzay1kZXBlbmRzLmRvdFwnJyBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiTm8gdGFzayBkZXBlbmRlbmN5IFwidGFzay1kZXBlbmRzLmRvdFwiIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgdGhlIGdpdmVuIHRhc2sgdGFyZ2V0LiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdidXN5Ym94JyBpbiBmdG9vbHMucmVhZF9maWxlKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAndGFzay1kZXBlbmRzLmRvdCcpKSwgbXNnID0gIk5vIFwiYnVzeWJveFwiIGRlcGVuZGVuY3kgZm91bmQgaW4gdGFzay1kZXBlbmRzLmRvdCBmaWxlLiIpCisKKyAgICBAT0VUZXN0SUQoODk5KQorICAgIGRlZiB0ZXN0X2ltYWdlX21hbmlmZXN0KHNlbGYpOgorICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwnKQorICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWyJERVBMT1lfRElSX0lNQUdFIiwgIklNQUdFX0xJTktfTkFNRSJdLCAiY29yZS1pbWFnZS1taW5pbWFsIikKKyAgICAgICAgZGVwbG95ZGlyID0gYmJfdmFyc1siREVQTE9ZX0RJUl9JTUFHRSJdCisgICAgICAgIGltYWdlbmFtZSA9IGJiX3ZhcnNbIklNQUdFX0xJTktfTkFNRSJdCisgICAgICAgIG1hbmlmZXN0ID0gb3MucGF0aC5qb2luKGRlcGxveWRpciwgaW1hZ2VuYW1lICsgIi5tYW5pZmVzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzbGluayhtYW5pZmVzdCksIG1zZz0iTm8gbWFuaWZlc3QgZmlsZSBjcmVhdGVkIGZvciBpbWFnZS4gSXQgc2hvdWxkIGhhdmUgYmVlbiBjcmVhdGVkIGluICVzIiAlIG1hbmlmZXN0KQorCisgICAgQE9FVGVzdElEKDE2OCkKKyAgICBkZWYgdGVzdF9pbnZhbGlkX3JlY2lwZV9zcmNfdXJpKHNlbGYpOgorICAgICAgICBkYXRhID0gJ1NSQ19VUkkgPSAiZmlsZTovL2ludmFsaWQiJworICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYygnbWFuJywgZGF0YSkKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiRExfRElSID0gXCIke1RPUERJUn0vZG93bmxvYWQtc2VsZnRlc3RcIgorU1NUQVRFX0RJUiA9IFwiJHtUT1BESVJ9L2Rvd25sb2FkLXNlbGZ0ZXN0XCIKK0lOSEVSSVRfcmVtb3ZlID0gXCJyZXBvcnQtZXJyb3JcIgorIiIiKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAiZG93bmxvYWQtc2VsZnRlc3QiKSkKKworICAgICAgICBiaXRiYWtlKCctY2NsZWFuYWxsIG1hbicpCisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJy1jIGZldGNoIG1hbicsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgYml0YmFrZSgnLWNjbGVhbmFsbCBtYW4nKQorICAgICAgICBzZWxmLmRlbGV0ZV9yZWNpcGVpbmMoJ21hbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgbXNnPSJDb21tYW5kIHN1Y2NlZGVkIHdoZW4gaXQgc2hvdWxkIGhhdmUgZmFpbGVkLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdGZXRjaGVyIGZhaWx1cmU6IFVuYWJsZSB0byBmaW5kIGZpbGUgZmlsZTovL2ludmFsaWQgYW55d2hlcmUuIFRoZSBwYXRocyB0aGF0IHdlcmUgc2VhcmNoZWQgd2VyZTonIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJcImludmFsaWRcIiBmaWxlIFwKK2RvZXNuJ3QgZXhpc3QsIHlldCBubyBlcnJvciBtZXNzYWdlIGVuY291bnRlcmVkLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgbGluZSA9IHNlbGYuZ2V0bGluZShyZXN1bHQsICdGZXRjaGVyIGZhaWx1cmUgZm9yIFVSTDogXCdmaWxlOi8vaW52YWxpZFwnLiBVbmFibGUgdG8gZmV0Y2ggVVJMIGZyb20gYW55IHNvdXJjZS4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGluZSBhbmQgbGluZS5zdGFydHN3aXRoKCJFUlJPUjoiKSwgbXNnID0gIlwiaW52YWxpZFwiIGZpbGUgXAorZG9lc24ndCBleGlzdCwgeWV0IGZldGNoZXIgZGlkbid0IHJlcG9ydCBhbnkgZXJyb3IuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQE9FVGVzdElEKDE3MSkKKyAgICBkZWYgdGVzdF9yZW5hbWVfZG93bmxvYWRlZF9maWxlKHNlbGYpOgorICAgICAgICAjIFRPRE8gdW5pcXVlIGRsZGlyIGluc3RlYWQgb2YgdXNpbmcgY2xlYW5hbGwKKyAgICAgICAgIyBUT0RPOiBuZWVkIHRvIHNldCBzc3RhdGVkaXI/CisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIkRMX0RJUiA9IFwiJHtUT1BESVJ9L2Rvd25sb2FkLXNlbGZ0ZXN0XCIKK1NTVEFURV9ESVIgPSBcIiR7VE9QRElSfS9kb3dubG9hZC1zZWxmdGVzdFwiCisiIiIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAob3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICJkb3dubG9hZC1zZWxmdGVzdCIpKQorCisgICAgICAgIGRhdGEgPSAnU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2FzcGVsbC9hc3BlbGwtJHtQVn0udGFyLmd6O2Rvd25sb2FkZmlsZW5hbWU9dGVzdC1hc3BlbGwudGFyLmd6IicKKyAgICAgICAgc2VsZi53cml0ZV9yZWNpcGVpbmMoJ2FzcGVsbCcsIGRhdGEpCisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJy1mIC1jIGZldGNoIGFzcGVsbCcsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5kZWxldGVfcmVjaXBlaW5jKCdhc3BlbGwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsIG1zZyA9ICJDb3VsZG4ndCBmZXRjaCBhc3BlbGwuICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIGRsX2RpciA9IGdldF9iYl92YXIoIkRMX0RJUiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZGxfZGlyLCAndGVzdC1hc3BlbGwudGFyLmd6JykpLCBtc2cgPSAiRmlsZSByZW5hbWUgZmFpbGVkLiBObyBjb3JyZXNwb25kaW5nIHRlc3QtYXNwZWxsLnRhci5neiBmaWxlIGZvdW5kIHVuZGVyICVzIiAlIGRsX2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihkbF9kaXIsICd0ZXN0LWFzcGVsbC50YXIuZ3ouZG9uZScpKSwgIkZpbGUgcmVuYW1lIGZhaWxlZC4gTm8gY29ycmVzcG9uZGluZyB0ZXN0LWFzcGVsbC50YXIuZ3ouZG9uZSBmaWxlIGZvdW5kIHVuZGVyICVzIiAlIGRsX2RpcikKKworICAgIEBPRVRlc3RJRCgxMDI4KQorICAgIGRlZiB0ZXN0X2Vudmlyb25tZW50KHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiVEVTVF9FTlY9XCJsb2NhbGNvbmZcIiIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZSAtZSB8IGdyZXAgVEVTVF9FTlY9JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdsb2NhbGNvbmYnIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJiaXRiYWtlIGRpZG4ndCByZXBvcnQgYW55IHZhbHVlIGZvciBURVNUX0VOViB2YXJpYWJsZS4gVG8gdGVzdCwgcnVuICdiaXRiYWtlIC1lIHwgZ3JlcCBURVNUX0VOVj0nIikKKworICAgIEBPRVRlc3RJRCgxMDI5KQorICAgIGRlZiB0ZXN0X2RyeV9ydW4oc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZSAtbiBtNC1uYXRpdmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJlc3VsdC5zdGF0dXMsICJiaXRiYWtlIGRyeSBydW4gZGlkbid0IHJ1biBhcyBleHBlY3RlZC4gJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEBPRVRlc3RJRCgxMDMwKQorICAgIGRlZiB0ZXN0X2p1c3RfcGFyc2Uoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZSAtcCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzdWx0LnN0YXR1cywgImVycm9ycyBlbmNvdW50ZXJlZCB3aGVuIHBhcnNpbmcgcmVjaXBlcy4gJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEBPRVRlc3RJRCgxMDMxKQorICAgIGRlZiB0ZXN0X3ZlcnNpb24oc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZSAtcyB8IGdyZXAgd2dldCcpCisgICAgICAgIGZpbmQgPSByZS5zZWFyY2goIndnZXQgKjooWzAtOWEtekEtWlwuXC1dKykiLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluZCwgIk5vIHZlcnNpb24gcmV0dXJuZWQgZm9yIHNlYXJjaGVkIHJlY2lwZS4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAT0VUZXN0SUQoMTAzMikKKyAgICBkZWYgdGVzdF9wcmVmaWxlKHNlbGYpOgorICAgICAgICBwcmVjb25mID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdjb25mL3ByZWZpbGUuY29uZicpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAocHJlY29uZikKKyAgICAgICAgZnRvb2xzLndyaXRlX2ZpbGUocHJlY29uZiAsIlRFU1RfUFJFRklMRT1cInByZWZpbGVcIiIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZSAtciBjb25mL3ByZWZpbGUuY29uZiAtZSB8IGdyZXAgVEVTVF9QUkVGSUxFPScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgncHJlZmlsZScgaW4gcmVzdWx0Lm91dHB1dCwgIlByZWNvbmZpZ3VyZSBmaWxlIFwicHJlZmlsZS5jb25mXCJ3YXMgbm90IHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4gIikKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIlRFU1RfUFJFRklMRT1cImxvY2FsY29uZlwiIikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1yIGNvbmYvcHJlZmlsZS5jb25mIC1lIHwgZ3JlcCBURVNUX1BSRUZJTEU9JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdsb2NhbGNvbmYnIGluIHJlc3VsdC5vdXRwdXQsICJQcmVjb25maWd1cmUgZmlsZSBcInByZWZpbGUuY29uZlwid2FzIG5vdCB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIikKKworICAgIEBPRVRlc3RJRCgxMDMzKQorICAgIGRlZiB0ZXN0X3Bvc3RmaWxlKHNlbGYpOgorICAgICAgICBwb3N0Y29uZiA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnY29uZi9wb3N0ZmlsZS5jb25mJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChwb3N0Y29uZikKKyAgICAgICAgZnRvb2xzLndyaXRlX2ZpbGUocG9zdGNvbmYgLCAiVEVTVF9QT1NURklMRT1cInBvc3RmaWxlXCIiKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiVEVTVF9QT1NURklMRT1cImxvY2FsY29uZlwiIikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1SIGNvbmYvcG9zdGZpbGUuY29uZiAtZSB8IGdyZXAgVEVTVF9QT1NURklMRT0nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3Bvc3RmaWxlJyBpbiByZXN1bHQub3V0cHV0LCAiUG9zdGNvbmZpZ3VyZSBmaWxlIFwicG9zdGZpbGUuY29uZlwid2FzIG5vdCB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIikKKworICAgIEBPRVRlc3RJRCgxMDM0KQorICAgIGRlZiB0ZXN0X2NoZWNrdXJpKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UgLWMgY2hlY2t1cmkgbTQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJlc3VsdC5zdGF0dXMsIG1zZyA9ICJcImNoZWNrdXJpXCIgdGFzayB3YXMgbm90IGV4ZWN1dGVkLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEBPRVRlc3RJRCgxMDM1KQorICAgIGRlZiB0ZXN0X2NvbnRpbnVlKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiJETF9ESVIgPSBcIiR7VE9QRElSfS9kb3dubG9hZC1zZWxmdGVzdFwiCitTU1RBVEVfRElSID0gXCIke1RPUERJUn0vZG93bmxvYWQtc2VsZnRlc3RcIgorSU5IRVJJVF9yZW1vdmUgPSBcInJlcG9ydC1lcnJvclwiCisiIiIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAob3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICJkb3dubG9hZC1zZWxmdGVzdCIpKQorICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYygnbWFuJywiXG5kb19mYWlsX3Rhc2sgKCkge1xuZXhpdCAxIFxufVxuXG5hZGR0YXNrIGRvX2ZhaWxfdGFzayBiZWZvcmUgZG9fZmV0Y2hcbiIgKQorICAgICAgICBydW5DbWQoJ2JpdGJha2UgLWMgY2xlYW5hbGwgbWFuIHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UgLWMgdW5wYWNrIC1rIG1hbiB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJywgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBlcnJvcnBvcyA9IHJlc3VsdC5vdXRwdXQuZmluZCgnRVJST1I6IEZ1bmN0aW9uIGZhaWxlZDogZG9fZmFpbF90YXNrJykKKyAgICAgICAgbWFudmVyID0gcmUuc2VhcmNoKCJOT1RFOiByZWNpcGUgeGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0oLio/KTogdGFzayBkb191bnBhY2s6IFN0YXJ0ZWQiLCByZXN1bHQub3V0cHV0KQorICAgICAgICBjb250aW51ZXBvcyA9IHJlc3VsdC5vdXRwdXQuZmluZCgnTk9URTogcmVjaXBlIHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtJXM6IHRhc2sgZG9fdW5wYWNrOiBTdGFydGVkJyAlIG1hbnZlci5ncm91cCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGVycm9ycG9zLGNvbnRpbnVlcG9zLCBtc2cgPSAiYml0YmFrZSBkaWRuJ3QgcGFzcyBkb19mYWlsX3Rhc2suIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQE9FVGVzdElEKDExMTkpCisgICAgZGVmIHRlc3Rfbm9uX2dwbHYzKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygnSU5DT01QQVRJQkxFX0xJQ0VOU0UgPSAiR1BMdjMiJykKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnc2VsZnRlc3QtZWQnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMCwgIkJpdGJha2UgZmFpbGVkLCBleGl0IGNvZGUgJXMsIG91dHB1dCAlcyIgJSAocmVzdWx0LnN0YXR1cywgcmVzdWx0Lm91dHB1dCkpCisgICAgICAgIGxpY19kaXIgPSBnZXRfYmJfdmFyKCdMSUNFTlNFX0RJUkVDVE9SWScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGxpY19kaXIsICdzZWxmdGVzdC1lZC9nZW5lcmljX0dQTHYzJykpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGxpY19kaXIsICdzZWxmdGVzdC1lZC9nZW5lcmljX0dQTHYyJykpKQorCisgICAgQE9FVGVzdElEKDE0MjIpCisgICAgZGVmIHRlc3Rfc2V0c2NlbmVfb25seShzZWxmKToKKyAgICAgICAgIiIiIEJpdGJha2Ugb3B0aW9uIHRvIHJlc3RvcmUgZnJvbSBzc3RhdGUgb25seSB3aXRoaW4gYSBidWlsZCAoaS5lLiBleGVjdXRlIG5vIHJlYWwgdGFza3MsIG9ubHkgc2V0c2NlbmUpIiIiCisgICAgICAgIHRlc3RfcmVjaXBlID0gJ2VkJworCisgICAgICAgIGJpdGJha2UodGVzdF9yZWNpcGUpCisgICAgICAgIGJpdGJha2UoJy1jIGNsZWFuICVzJyAlIHRlc3RfcmVjaXBlKQorICAgICAgICByZXQgPSBiaXRiYWtlKCctLXNldHNjZW5lLW9ubHkgJXMnICUgdGVzdF9yZWNpcGUpCisKKyAgICAgICAgdGFza3MgPSByZS5maW5kYWxsKHIndGFza1xzKyhkb19cUyspOicsIHJldC5vdXRwdXQpCisKKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdfc2V0c2NlbmUnLCB0YXNrLCAnQSB0YXNrIGRpZmZlcmVudCBmcm9tIF9zZXRzY2VuZSByYW46ICVzLlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0V4ZWN1dGVkIHRhc2tzIHdlcmU6ICVzJyAlICh0YXNrLCBzdHIodGFza3MpKSkKKworICAgIEBPRVRlc3RJRCgxNDI1KQorICAgIGRlZiB0ZXN0X2JiYXBwZW5kX29yZGVyKHNlbGYpOgorICAgICAgICAiIiIgQml0YmFrZSBzaG91bGQgYmJhcHBlbmQgdG8gcmVjaXBlIGluIGEgcHJlZGljdGFibGUgb3JkZXIgIiIiCisgICAgICAgIHRlc3RfcmVjaXBlID0gJ2VkJworICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWydTVU1NQVJZJywgJ1BWJ10sIHRlc3RfcmVjaXBlKQorICAgICAgICB0ZXN0X3JlY2lwZV9zdW1tYXJ5X2JlZm9yZSA9IGJiX3ZhcnNbJ1NVTU1BUlknXQorICAgICAgICB0ZXN0X3JlY2lwZV9wdiA9IGJiX3ZhcnNbJ1BWJ10KKyAgICAgICAgcmVjaXBlX2FwcGVuZF9maWxlID0gdGVzdF9yZWNpcGUgKyAnXycgKyB0ZXN0X3JlY2lwZV9wdiArICcuYmJhcHBlbmQnCisgICAgICAgIGV4cGVjdGVkX3JlY2lwZV9zdW1tYXJ5ID0gdGVzdF9yZWNpcGVfc3VtbWFyeV9iZWZvcmUKKworICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKKyAgICAgICAgICAgIHJlY2lwZV9hcHBlbmRfZGlyID0gdGVzdF9yZWNpcGUgKyAnX3Rlc3RfJyArIHN0cihpKQorICAgICAgICAgICAgcmVjaXBlX2FwcGVuZF9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGxheWVyX3BhdGgsICdyZWNpcGVzLXRlc3QnLCByZWNpcGVfYXBwZW5kX2RpciwgcmVjaXBlX2FwcGVuZF9maWxlKQorICAgICAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKHNlbGYudGVzdGxheWVyX3BhdGgsICdyZWNpcGVzLXRlc3QnLCByZWNpcGVfYXBwZW5kX2RpcikpCisgICAgICAgICAgICBmZWF0dXJlID0gJ1NVTU1BUlkgKz0gIiVzIlxuJyAlIGkKKyAgICAgICAgICAgIGZ0b29scy53cml0ZV9maWxlKHJlY2lwZV9hcHBlbmRfcGF0aCwgZmVhdHVyZSkKKyAgICAgICAgICAgIGV4cGVjdGVkX3JlY2lwZV9zdW1tYXJ5ICs9ICcgJXMnICUgaQorCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ3JtIC1yZiAlcycgJSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0bGF5ZXJfcGF0aCwgJ3JlY2lwZXMtdGVzdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3JlY2lwZSArICdfdGVzdF8qJykpCisKKyAgICAgICAgdGVzdF9yZWNpcGVfc3VtbWFyeV9hZnRlciA9IGdldF9iYl92YXIoJ1NVTU1BUlknLCB0ZXN0X3JlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9yZWNpcGVfc3VtbWFyeSwgdGVzdF9yZWNpcGVfc3VtbWFyeV9hZnRlcikKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL2J1aWxkaGlzdG9yeS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL2J1aWxkaGlzdG9yeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjc5MmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvYnVpbGRoaXN0b3J5LnB5CkBAIC0wLDAgKzEsNDYgQEAKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgZGF0ZXRpbWUKKworZnJvbSBvZXFhLnNlbGZ0ZXN0LmNhc2UgaW1wb3J0IE9FU2VsZnRlc3RUZXN0Q2FzZQorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBiaXRiYWtlLCBnZXRfYmJfdmFycworCisKK2NsYXNzIEJ1aWxkaGlzdG9yeUJhc2UoT0VTZWxmdGVzdFRlc3RDYXNlKToKKworICAgIGRlZiBjb25maWdfYnVpbGRoaXN0b3J5KHNlbGYsIHRtcF9iaF9sb2NhdGlvbj1GYWxzZSk6CisgICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhbJ1VTRVJfQ0xBU1NFUycsICdJTkhFUklUJ10pCisgICAgICAgIGlmIChub3QgJ2J1aWxkaGlzdG9yeScgaW4gYmJfdmFyc1snVVNFUl9DTEFTU0VTJ10pIGFuZCAobm90ICdidWlsZGhpc3RvcnknIGluIGJiX3ZhcnNbJ0lOSEVSSVQnXSk6CisgICAgICAgICAgICBhZGRfYnVpbGRoaXN0b3J5X2NvbmZpZyA9ICdJTkhFUklUICs9ICJidWlsZGhpc3RvcnkiXG5CVUlMREhJU1RPUllfQ09NTUlUID0gIjEiJworICAgICAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGFkZF9idWlsZGhpc3RvcnlfY29uZmlnKQorCisgICAgICAgIGlmIHRtcF9iaF9sb2NhdGlvbjoKKyAgICAgICAgICAgICMgVXNpbmcgYSB0ZW1wb3JhcnkgYnVpbGRoaXN0b3J5IGxvY2F0aW9uIGZvciB0ZXN0aW5nCisgICAgICAgICAgICB0bXBfYmhfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICJ0bXBfYnVpbGRoaXN0b3J5XyVzIiAlIGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCclWSVtJWQlSCVNJVMnKSkKKyAgICAgICAgICAgIGJ1aWxkaGlzdG9yeV9kaXJfY29uZmlnID0gIkJVSUxESElTVE9SWV9ESVIgPSBcIiVzXCIiICUgdG1wX2JoX2RpcgorICAgICAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGJ1aWxkaGlzdG9yeV9kaXJfY29uZmlnKQorICAgICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0bXBfYmhfZGlyKQorCisgICAgZGVmIHJ1bl9idWlsZGhpc3Rvcnlfb3BlcmF0aW9uKHNlbGYsIHRhcmdldCwgZ2xvYmFsX2NvbmZpZz0nJywgdGFyZ2V0X2NvbmZpZz0nJywgY2hhbmdlX2JoX2xvY2F0aW9uPUZhbHNlLCBleHBlY3RfZXJyb3I9RmFsc2UsIGVycm9yX3JlZ2V4PScnKToKKyAgICAgICAgaWYgY2hhbmdlX2JoX2xvY2F0aW9uOgorICAgICAgICAgICAgdG1wX2JoX2xvY2F0aW9uID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdG1wX2JoX2xvY2F0aW9uID0gRmFsc2UKKyAgICAgICAgc2VsZi5jb25maWdfYnVpbGRoaXN0b3J5KHRtcF9iaF9sb2NhdGlvbikKKworICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZ2xvYmFsX2NvbmZpZykKKyAgICAgICAgc2VsZi5hcHBlbmRfcmVjaXBlaW5jKHRhcmdldCwgdGFyZ2V0X2NvbmZpZykKKyAgICAgICAgYml0YmFrZSgiLWNjbGVhbiAlcyIgJSB0YXJnZXQpCisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UodGFyZ2V0LCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYucmVtb3ZlX2NvbmZpZyhnbG9iYWxfY29uZmlnKQorICAgICAgICBzZWxmLnJlbW92ZV9yZWNpcGVpbmModGFyZ2V0LCB0YXJnZXRfY29uZmlnKQorCisgICAgICAgIGlmIGV4cGVjdF9lcnJvcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgbXNnPSJFcnJvciBleHBlY3RlZCBmb3IgZ2xvYmFsIGNvbmZpZyAnJXMnIGFuZCB0YXJnZXQgY29uZmlnICclcyciICUgKGdsb2JhbF9jb25maWcsIHRhcmdldF9jb25maWcpKQorICAgICAgICAgICAgc2VhcmNoX2Zvcl9lcnJvciA9IHJlLnNlYXJjaChlcnJvcl9yZWdleCwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWFyY2hfZm9yX2Vycm9yLCBtc2c9IkNvdWxkIG5vdCBmaW5kIGRlc2lyZWQgZXJyb3IgaW4gb3V0cHV0OiAlcyAoJXMpIiAlIChlcnJvcl9yZWdleCwgcmVzdWx0Lm91dHB1dCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsIG1zZz0iQ29tbWFuZCAnYml0YmFrZSAlcycgaGFzIGZhaWxlZCB1bmV4cGVjdGVkbHk6ICVzIiAlICh0YXJnZXQsIHJlc3VsdC5vdXRwdXQpKQorCisgICAgIyBObyB0ZXN0cyBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGJhc2UgY2xhc3MuCisgICAgIyBQbGVhc2UgY3JlYXRlIGEgbmV3IGNsYXNzIHRoYXQgaW5oZXJpdCB0aGlzIG9uZSwgb3IgdXNlIG9uZSBvZiB0aG9zZSBhbHJlYWR5IGF2YWlsYWJsZSBmb3IgYWRkaW5nIHRlc3RzLgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvYnVpbGRvcHRpb25zLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvYnVpbGRvcHRpb25zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMjIxYzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9idWlsZG9wdGlvbnMucHkKQEAgLTAsMCArMSwxNjYgQEAKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgZ2xvYiBhcyBnCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGVtcGZpbGUKK2Zyb20gb2VxYS5zZWxmdGVzdC5jYXNlIGltcG9ydCBPRVNlbGZ0ZXN0VGVzdENhc2UKK2Zyb20gb2VxYS5zZWxmdGVzdC5jYXNlcy5idWlsZGhpc3RvcnkgaW1wb3J0IEJ1aWxkaGlzdG9yeUJhc2UKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBnZXRfYmJfdmFycworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLmNvcmUuZGVjb3JhdG9yLm9laWQgaW1wb3J0IE9FVGVzdElECisKK2NsYXNzIEltYWdlT3B0aW9uc1Rlc3RzKE9FU2VsZnRlc3RUZXN0Q2FzZSk6CisKKyAgICBAT0VUZXN0SUQoNzYxKQorICAgIGRlZiB0ZXN0X2luY3JlbWVudGFsX2ltYWdlX2dlbmVyYXRpb24oc2VsZik6CisgICAgICAgIGltYWdlX3BrZ3R5cGUgPSBnZXRfYmJfdmFyKCJJTUFHRV9QS0dUWVBFIikKKyAgICAgICAgaWYgaW1hZ2VfcGtndHlwZSAhPSAncnBtJzoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ05vdCB1c2luZyBSUE0gYXMgbWFpbiBwYWNrYWdlIGZvcm1hdCcpCisgICAgICAgIGJpdGJha2UoIi1jIGNsZWFuIGNvcmUtaW1hZ2UtbWluaW1hbCIpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCdJTkNfUlBNX0lNQUdFX0dFTiA9ICIxIicpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZygnSU1BR0VfRkVBVFVSRVMgKz0gInNzaC1zZXJ2ZXItb3BlbnNzaCInKQorICAgICAgICBiaXRiYWtlKCJjb3JlLWltYWdlLW1pbmltYWwiKQorICAgICAgICBsb2dfZGF0YV9maWxlID0gb3MucGF0aC5qb2luKGdldF9iYl92YXIoIldPUktESVIiLCAiY29yZS1pbWFnZS1taW5pbWFsIiksICJ0ZW1wL2xvZy5kb19yb290ZnMiKQorICAgICAgICBsb2dfZGF0YV9jcmVhdGVkID0gZnRvb2xzLnJlYWRfZmlsZShsb2dfZGF0YV9maWxlKQorICAgICAgICBpbmNyZW1lbnRhbF9jcmVhdGVkID0gcmUuc2VhcmNoKHIiSW5zdGFsbGluZ1xzKjpccypwYWNrYWdlZ3JvdXAtY29yZS1zc2gtb3BlbnNzaCIsIGxvZ19kYXRhX2NyZWF0ZWQpCisgICAgICAgIHNlbGYucmVtb3ZlX2NvbmZpZygnSU1BR0VfRkVBVFVSRVMgKz0gInNzaC1zZXJ2ZXItb3BlbnNzaCInKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5jcmVtZW50YWxfY3JlYXRlZCwgbXNnID0gIk1hdGNoIGZhaWxlZCBpbjpcbiVzIiAlIGxvZ19kYXRhX2NyZWF0ZWQpCisgICAgICAgIGJpdGJha2UoImNvcmUtaW1hZ2UtbWluaW1hbCIpCisgICAgICAgIGxvZ19kYXRhX3JlbW92ZWQgPSBmdG9vbHMucmVhZF9maWxlKGxvZ19kYXRhX2ZpbGUpCisgICAgICAgIGluY3JlbWVudGFsX3JlbW92ZWQgPSByZS5zZWFyY2gociJFcmFzaW5nXHMqOlxzKnBhY2thZ2Vncm91cC1jb3JlLXNzaC1vcGVuc3NoIiwgbG9nX2RhdGFfcmVtb3ZlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluY3JlbWVudGFsX3JlbW92ZWQsIG1zZyA9ICJNYXRjaCBmYWlsZWQgaW46XG4lcyIgJSBsb2dfZGF0YV9yZW1vdmVkKQorCisgICAgQE9FVGVzdElEKDI4NikKKyAgICBkZWYgdGVzdF9jY2FjaGVfdG9vbChzZWxmKToKKyAgICAgICAgYml0YmFrZSgiY2NhY2hlLW5hdGl2ZSIpCisgICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhbJ1NZU1JPT1RfREVTVERJUicsICdiaW5kaXInXSwgJ2NjYWNoZS1uYXRpdmUnKQorICAgICAgICBwID0gYmJfdmFyc1snU1lTUk9PVF9ERVNURElSJ10gKyBiYl92YXJzWydiaW5kaXInXSArICIvIiArICJjY2FjaGUiCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShwKSwgbXNnID0gIk5vIGNjYWNoZSBmb3VuZCAoJXMpIiAlIHApCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCdJTkhFUklUICs9ICJjY2FjaGUiJykKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiBtNCcpCisgICAgICAgIGJpdGJha2UoIm00IC1mIC1jIGNvbXBpbGUiKQorICAgICAgICBsb2dfY29tcGlsZSA9IG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCJXT1JLRElSIiwibTQiKSwgInRlbXAvbG9nLmRvX2NvbXBpbGUiKQorICAgICAgICByZXMgPSBydW5DbWQoImdyZXAgY2NhY2hlICVzIiAlIGxvZ19jb21waWxlLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzLnN0YXR1cywgbXNnPSJObyBtYXRjaCBmb3IgY2NhY2hlIGluIG00IGxvZy5kb19jb21waWxlLiBGb3IgZnVydGhlciBkZXRhaWxzOiAlcyIgJSBsb2dfY29tcGlsZSkKKworICAgIEBPRVRlc3RJRCgxNDM1KQorICAgIGRlZiB0ZXN0X3JlYWRfb25seV9pbWFnZShzZWxmKToKKyAgICAgICAgZGlzdHJvX2ZlYXR1cmVzID0gZ2V0X2JiX3ZhcignRElTVFJPX0ZFQVRVUkVTJykKKyAgICAgICAgaWYgbm90ICgneDExJyBpbiBkaXN0cm9fZmVhdHVyZXMgYW5kICdvcGVuZ2wnIGluIGRpc3Ryb19mZWF0dXJlcyk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdjb3JlLWltYWdlLXNhdG8gcmVxdWlyZXMgeDExIGFuZCBvcGVuZ2wgaW4gZGlzdHJvIGZlYXR1cmVzJykKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoJ0lNQUdFX0ZFQVRVUkVTICs9ICJyZWFkLW9ubHktcm9vdGZzIicpCisgICAgICAgIGJpdGJha2UoImNvcmUtaW1hZ2Utc2F0byIpCisgICAgICAgICMgZG9faW1hZ2Ugd2lsbCBmYWlsIGlmIHRoZXJlIGFyZSBhbnkgcGVuZGluZyBwb3N0aW5zdHMKKworY2xhc3MgRGlza01vblRlc3QoT0VTZWxmdGVzdFRlc3RDYXNlKToKKworICAgIEBPRVRlc3RJRCgyNzcpCisgICAgZGVmIHRlc3Rfc3RvcHRhc2tfYmVoYXZpb3Ioc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCdCQl9ESVNLTU9OX0RJUlMgPSAiU1RPUFRBU0tTLCR7VE1QRElSfSwxMDAwMDBHLDEwMEsiJykKKyAgICAgICAgcmVzID0gYml0YmFrZSgibTQiLCBpZ25vcmVfc3RhdHVzID0gVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdFUlJPUjogTm8gbmV3IHRhc2tzIGNhbiBiZSBleGVjdXRlZCBzaW5jZSB0aGUgZGlzayBzcGFjZSBtb25pdG9yIGFjdGlvbiBpcyAiU1RPUFRBU0tTIiEnIGluIHJlcy5vdXRwdXQsIG1zZyA9ICJUYXNrcyBzaG91bGQgaGF2ZSBzdG9wcGVkLiBEaXNrIG1vbml0b3IgaXMgc2V0IHRvIFNUT1BUQVNLOiAlcyIgJSByZXMub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDEsIG1zZyA9ICJiaXRiYWtlIHJlcG9ydGVkIGV4aXQgY29kZSAlcy4gSXQgc2hvdWxkIGhhdmUgYmVlbiAxLiBCaXRiYWtlIG91dHB1dDogJXMiICUgKHN0cihyZXMuc3RhdHVzKSwgcmVzLm91dHB1dCkpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCdCQl9ESVNLTU9OX0RJUlMgPSAiQUJPUlQsJHtUTVBESVJ9LDEwMDAwMEcsMTAwSyInKQorICAgICAgICByZXMgPSBiaXRiYWtlKCJtNCIsIGlnbm9yZV9zdGF0dXMgPSBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0VSUk9SOiBJbW1lZGlhdGVseSBhYm9ydCBzaW5jZSB0aGUgZGlzayBzcGFjZSBtb25pdG9yIGFjdGlvbiBpcyAiQUJPUlQiIScgaW4gcmVzLm91dHB1dCwgIlRhc2tzIHNob3VsZCBoYXZlIGJlZW4gYWJvcnRlZCBpbW1lZGlhdGVsbHkuIERpc2sgbW9uaXRvciBpcyBzZXQgdG8gQUJPUlQ6ICVzIiAlIHJlcy5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgMSwgbXNnID0gImJpdGJha2UgcmVwb3J0ZWQgZXhpdCBjb2RlICVzLiBJdCBzaG91bGQgaGF2ZSBiZWVuIDEuIEJpdGJha2Ugb3V0cHV0OiAlcyIgJSAoc3RyKHJlcy5zdGF0dXMpLCByZXMub3V0cHV0KSkKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoJ0JCX0RJU0tNT05fRElSUyA9ICJXQVJOLCR7VE1QRElSfSwxMDAwMDBHLDEwMEsiJykKKyAgICAgICAgcmVzID0gYml0YmFrZSgibTQiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1dBUk5JTkc6IFRoZSBmcmVlIHNwYWNlJyBpbiByZXMub3V0cHV0LCBtc2cgPSAiQSB3YXJuaW5nIHNob3VsZCBoYXZlIGJlZW4gZGlzcGxheWVkIGZvciBkaXNrIG1vbml0b3IgaXMgc2V0IHRvIFdBUk46ICVzIiAlcmVzLm91dHB1dCkKKworY2xhc3MgU2FuaXR5T3B0aW9uc1Rlc3QoT0VTZWxmdGVzdFRlc3RDYXNlKToKKyAgICBkZWYgZ2V0bGluZShzZWxmLCByZXMsIGxpbmUpOgorICAgICAgICBmb3IgbCBpbiByZXMub3V0cHV0LnNwbGl0KCdcbicpOgorICAgICAgICAgICAgaWYgbGluZSBpbiBsOgorICAgICAgICAgICAgICAgIHJldHVybiBsCisKKyAgICBAT0VUZXN0SUQoOTI3KQorICAgIGRlZiB0ZXN0X29wdGlvbnNfd2FybnFhX2Vycm9ycWFfc3dpdGNoKHNlbGYpOgorCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCJJTkhFUklUX3JlbW92ZSA9IFwicmVwb3J0LWVycm9yXCIiKQorICAgICAgICBpZiAicGFja2FnZXMtbGlzdCIgbm90IGluIGdldF9iYl92YXIoIkVSUk9SX1FBIik6CisgICAgICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoIkVSUk9SX1FBX2FwcGVuZCA9IFwiIHBhY2thZ2VzLWxpc3RcIiIpCisKKyAgICAgICAgc2VsZi53cml0ZV9yZWNpcGVpbmMoJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnLCAnUEFDS0FHRVMgKz0gXCIke1BOfS1kYmdcIicpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4geGN1cnNvci10cmFuc3BhcmVudC10aGVtZScpCisgICAgICAgIHJlcyA9IGJpdGJha2UoInhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUgLWYgLWMgcGFja2FnZSIsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5kZWxldGVfcmVjaXBlaW5jKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJykKKyAgICAgICAgbGluZSA9IHNlbGYuZ2V0bGluZShyZXMsICJRQSBJc3N1ZTogeGN1cnNvci10cmFuc3BhcmVudC10aGVtZS1kYmcgaXMgbGlzdGVkIGluIFBBQ0tBR0VTIG11bHRpcGxlIHRpbWVzLCB0aGlzIGxlYWRzIHRvIHBhY2thZ2luZyBlcnJvcnMuIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmUgYW5kIGxpbmUuc3RhcnRzd2l0aCgiRVJST1I6IiksIG1zZz1yZXMub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDEsIG1zZyA9ICJiaXRiYWtlIHJlcG9ydGVkIGV4aXQgY29kZSAlcy4gSXQgc2hvdWxkIGhhdmUgYmVlbiAxLiBCaXRiYWtlIG91dHB1dDogJXMiICUgKHN0cihyZXMuc3RhdHVzKSwgcmVzLm91dHB1dCkpCisgICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJywgJ1BBQ0tBR0VTICs9IFwiJHtQTn0tZGJnXCInKQorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoJ0VSUk9SX1FBX3JlbW92ZSA9ICJwYWNrYWdlcy1saXN0IicpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZygnV0FSTl9RQV9hcHBlbmQgPSAiIHBhY2thZ2VzLWxpc3QiJykKKyAgICAgICAgcmVzID0gYml0YmFrZSgieGN1cnNvci10cmFuc3BhcmVudC10aGVtZSAtZiAtYyBwYWNrYWdlIikKKyAgICAgICAgc2VsZi5kZWxldGVfcmVjaXBlaW5jKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJykKKyAgICAgICAgbGluZSA9IHNlbGYuZ2V0bGluZShyZXMsICJRQSBJc3N1ZTogeGN1cnNvci10cmFuc3BhcmVudC10aGVtZS1kYmcgaXMgbGlzdGVkIGluIFBBQ0tBR0VTIG11bHRpcGxlIHRpbWVzLCB0aGlzIGxlYWRzIHRvIHBhY2thZ2luZyBlcnJvcnMuIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmUgYW5kIGxpbmUuc3RhcnRzd2l0aCgiV0FSTklORzoiKSwgbXNnPXJlcy5vdXRwdXQpCisKKyAgICBAT0VUZXN0SUQoMTQyMSkKKyAgICBkZWYgdGVzdF9sYXllcl93aXRob3V0X2dpdF9kaXIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgVGVzdCB0aGF0IGxheWVyIGdpdCByZXZpc2lvbnMgYXJlIGRpc3BsYXllZCBhbmQgZG8gbm90IGZhaWwgd2l0aG91dCBnaXQgcmVwb3NpdG9yeQorICAgICAgICBFeHBlY3RlZDogICAgVGhlIGJ1aWxkIHRvIGJlIHN1Y2Nlc3NmdWwgYW5kIHdpdGhvdXQgImZhdGFsIiBlcnJvcnMKKyAgICAgICAgUHJvZHVjdDogICAgIG9lLWNvcmUKKyAgICAgICAgQXV0aG9yOiAgICAgIERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZGlycGF0aCA9IHRlbXBmaWxlLm1rZHRlbXAoKQorCisgICAgICAgIGR1bW15X2xheWVyX25hbWUgPSAnbWV0YS1kdW1teScKKyAgICAgICAgZHVtbXlfbGF5ZXJfcGF0aCA9IG9zLnBhdGguam9pbihkaXJwYXRoLCBkdW1teV9sYXllcl9uYW1lKQorICAgICAgICBkdW1teV9sYXllcl9jb25mX2RpciA9IG9zLnBhdGguam9pbihkdW1teV9sYXllcl9wYXRoLCAnY29uZicpCisgICAgICAgIG9zLm1ha2VkaXJzKGR1bW15X2xheWVyX2NvbmZfZGlyKQorICAgICAgICBkdW1teV9sYXllcl9jb25mX3BhdGggPSBvcy5wYXRoLmpvaW4oZHVtbXlfbGF5ZXJfY29uZl9kaXIsICdsYXllci5jb25mJykKKworICAgICAgICBkdW1teV9sYXllcl9jb250ZW50ID0gJ0JCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IlxuJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiAke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIlxuJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQkJGSUxFX0NPTExFQ1RJT05TICs9ICIlcyJcbicgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JCRklMRV9QQVRURVJOXyVzID0gIl4ke0xBWUVSRElSfS8iXG4nIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCQkZJTEVfUFJJT1JJVFlfJXMgPSAiNiJcbicgJSAoZHVtbXlfbGF5ZXJfbmFtZSwgZHVtbXlfbGF5ZXJfbmFtZSwgZHVtbXlfbGF5ZXJfbmFtZSkKKworICAgICAgICBmdG9vbHMud3JpdGVfZmlsZShkdW1teV9sYXllcl9jb25mX3BhdGgsIGR1bW15X2xheWVyX2NvbnRlbnQpCisKKyAgICAgICAgYmJsYXllcnNfY29uZiA9ICdCQkxBWUVSUyArPSAiJXMiXG4nICUgZHVtbXlfbGF5ZXJfcGF0aAorICAgICAgICBzZWxmLndyaXRlX2JibGF5ZXJzX2NvbmZpZyhiYmxheWVyc19jb25mKQorCisgICAgICAgIHRlc3RfcmVjaXBlID0gJ2VkJworCisgICAgICAgIHJldCA9IGJpdGJha2UoJy1uICVzJyAlIHRlc3RfcmVjaXBlKQorCisgICAgICAgIGVyciA9ICdmYXRhbDogTm90IGEgZ2l0IHJlcG9zaXRvcnknCisKKyAgICAgICAgc2h1dGlsLnJtdHJlZShkaXJwYXRoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZXJyLCByZXQub3V0cHV0KQorCisKK2NsYXNzIEJ1aWxkaGlzdG9yeVRlc3RzKEJ1aWxkaGlzdG9yeUJhc2UpOgorCisgICAgQE9FVGVzdElEKDI5MykKKyAgICBkZWYgdGVzdF9idWlsZGhpc3RvcnlfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYucnVuX2J1aWxkaGlzdG9yeV9vcGVyYXRpb24oJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2RpcihnZXRfYmJfdmFyKCdCVUlMREhJU1RPUllfRElSJykpLCAiYnVpbGRoaXN0b3J5IGRpciB3YXMgbm90IGNyZWF0ZWQuIikKKworICAgIEBPRVRlc3RJRCgyOTQpCisgICAgZGVmIHRlc3RfYnVpbGRoaXN0b3J5X2J1aWxkdGltZV9wcl9iYWNrd2FyZHMoc2VsZik6CisgICAgICAgIHRhcmdldCA9ICd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJworICAgICAgICBlcnJvciA9ICJFUlJPUjouKlFBIElzc3VlOiBQYWNrYWdlIHZlcnNpb24gZm9yIHBhY2thZ2UgJXMgd2VudCBiYWNrd2FyZHMgd2hpY2ggd291bGQgYnJlYWsgcGFja2FnZSBmZWVkcyBmcm9tICguKi1yMS4qIHRvIC4qLXIwLiopIiAlIHRhcmdldAorICAgICAgICBzZWxmLnJ1bl9idWlsZGhpc3Rvcnlfb3BlcmF0aW9uKHRhcmdldCwgdGFyZ2V0X2NvbmZpZz0iUFIgPSBcInIxXCIiLCBjaGFuZ2VfYmhfbG9jYXRpb249VHJ1ZSkKKyAgICAgICAgc2VsZi5ydW5fYnVpbGRoaXN0b3J5X29wZXJhdGlvbih0YXJnZXQsIHRhcmdldF9jb25maWc9IlBSID0gXCJyMFwiIiwgY2hhbmdlX2JoX2xvY2F0aW9uPUZhbHNlLCBleHBlY3RfZXJyb3I9VHJ1ZSwgZXJyb3JfcmVnZXg9ZXJyb3IpCisKK2NsYXNzIEFyY2hpdmVyVGVzdChPRVNlbGZ0ZXN0VGVzdENhc2UpOgorICAgIEBPRVRlc3RJRCg5MjYpCisgICAgZGVmIHRlc3RfYXJjaF93b3JrX2Rpcl9hbmRfZXhwb3J0X3NvdXJjZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgZm9yIGFyY2hpdmluZyB0aGUgd29yayBkaXJlY3RvcnkgYW5kIGV4cG9ydGluZyB0aGUgc291cmNlIGZpbGVzLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIklOSEVSSVQgKz0gXCJhcmNoaXZlclwiXG5BUkNISVZFUl9NT0RFW3NyY10gPSBcIm9yaWdpbmFsXCJcbkFSQ0hJVkVSX01PREVbc3JwbV0gPSBcIjFcIiIpCisgICAgICAgIHJlcyA9IGJpdGJha2UoInhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUiLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgMCwgIlxuQ291bGRuJ3QgYnVpbGQgeGN1cnNvcnRyYW5zcGFyZW50dGhlbWUuXG5iaXRiYWtlIG91dHB1dCAlcyIgJSByZXMub3V0cHV0KQorICAgICAgICBkZXBsb3lfZGlyX3NyYyA9IGdldF9iYl92YXIoJ0RFUExPWV9ESVJfU1JDJykKKyAgICAgICAgcGtnc19wYXRoID0gZy5nbG9iKHN0cihkZXBsb3lfZGlyX3NyYykgKyAiL2FsbGFyY2gqL3hjdXJzKiIpCisgICAgICAgIHNyY19maWxlX2dsb2IgPSBzdHIocGtnc19wYXRoWzBdKSArICIveGN1cnNvciouc3JjLnJwbSIKKyAgICAgICAgdGFyX2ZpbGVfZ2xvYiA9IHN0cihwa2dzX3BhdGhbMF0pICsgIi94Y3Vyc29yKi50YXIuZ3oiCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoZy5nbG9iKHNyY19maWxlX2dsb2IpIGFuZCBnLmdsb2IodGFyX2ZpbGVfZ2xvYikpLCAiQ291bGRuJ3QgZmluZCAuc3JjLnJwbSBhbmQgLnRhci5neiBmaWxlcyB1bmRlciAlcy9hbGxhcmNoKi94Y3Vyc29yKiIgJSBkZXBsb3lfZGlyX3NyYykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL2NvbnRhaW5lcmltYWdlLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvY29udGFpbmVyaW1hZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlhNWNjOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL2NvbnRhaW5lcmltYWdlLnB5CkBAIC0wLDAgKzEsODUgQEAKK2ltcG9ydCBvcworCitmcm9tIG9lcWEuc2VsZnRlc3QuY2FzZSBpbXBvcnQgT0VTZWxmdGVzdFRlc3RDYXNlCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IGJpdGJha2UsIGdldF9iYl92YXJzLCBydW5DbWQKK2Zyb20gb2VxYS5jb3JlLmRlY29yYXRvci5vZWlkIGltcG9ydCBPRVRlc3RJRAorCisjIFRoaXMgdGVzdCBidWlsZHMgYW4gaW1hZ2Ugd2l0aCB1c2luZyB0aGUgImNvbnRhaW5lciIgSU1BR0VfRlNUWVBFLCBhbmQKKyMgZW5zdXJlcyB0aGF0IHRoZW4gZmlsZXMgaW4gdGhlIGltYWdlIGFyZSBvbmx5IHRoZSBvbmVzIGV4cGVjdGVkLgorIworIyBUaGUgb25seSBwYWNrYWdlIGFkZGVkIHRvIHRoZSBpbWFnZSBpcyBjb250YWluZXJfaW1hZ2VfdGVzdHBrZywgd2hpY2gKKyMgY29udGFpbnMgb25lIGZpbGUuIEhvd2V2ZXIsIGR1ZSB0byBzb21lIG90aGVyIHRoaW5ncyBub3QgY2xlYW5pbmcgdXAgZHVyaW5nCisjIHJvb3RmcyBjcmVhdGlvbiwgdGhlcmUgaXMgc29tZSBjcnVmdC4gSWRlYWxseSBidWdzIHdpbGwgYmUgZmlsZWQgYW5kIHRoZQorIyBjcnVmdCByZW1vdmVkLCBidXQgZm9yIG5vdyB3ZSB3aGl0ZWxpc3Qgc29tZSBrbm93biBzZXQuCisjCisjIEFsc28gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgd2UncmUgb25seSBjaGVja2luZyB0aGUgY3J1ZnQgd2hlbiB1c2luZyBpcGsuCisjIFdoZW4gdXNpbmcgZGViLCBhbmQgcnBtIGl0IGlzIGEgYml0IGRpZmZlcmVudCBhbmQgd2UgY291bGQgdGVzdCBhbGwKKyMgb2YgdGhlbSwgYnV0IHRoaXMgdGVzdCBpcyBtb3JlIHRvIGNhdGNoIGlmIG90aGVyIHBhY2thZ2VzIGdldCBhZGRlZCBieQorIyBkZWZhdWx0IG90aGVyIHRoYW4gd2hhdCBpcyBpbiBST09URlNfQk9PVFNUUkFQX0lOU1RBTEwuCisjCitjbGFzcyBDb250YWluZXJJbWFnZVRlc3RzKE9FU2VsZnRlc3RUZXN0Q2FzZSk6CisKKyAgICAjIFZlcmlmeSB0aGF0IHdoZW4gc3BlY2lmeWluZyBhIElNQUdFX1RZUEVERVBfIG9mIHRoZSBmb3JtICJmb28uYmFyIiB0aGF0CisgICAgIyB0aGUgY29udmVyc2lvbiB0eXBlIGJhciBnZXRzIGFkZGVkIGFzIGEgZGVwIGFzIHdlbGwKKyAgICBAT0VUZXN0SUQoMTYxOSkKKyAgICBkZWYgdGVzdF9leHBlY3RlZF9maWxlcyhzZWxmKToKKworICAgICAgICBkZWYgZ2V0X2VhY2hfcGF0aF9wYXJ0KHBhdGgpOgorICAgICAgICAgICAgaWYgcGF0aDoKKyAgICAgICAgICAgICAgICBwYXJ0ID0gWyAnLicgKyBwYXRoICsgJy8nIF0KKyAgICAgICAgICAgICAgICByZXN1bHQgPSBnZXRfZWFjaF9wYXRoX3BhcnQocGF0aC5yc3BsaXQoJy8nLCAxKVswXSkKKyAgICAgICAgICAgICAgICBpZiByZXN1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0ICsgcmVzdWx0CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiJQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPSAibGludXgtZHVtbXkiCitJTUFHRV9GU1RZUEVTID0gImNvbnRhaW5lciIKK1BBQ0tBR0VfQ0xBU1NFUyA9ICJwYWNrYWdlX2lwayIKK0lNQUdFX0ZFQVRVUkVTID0gIiIKKyIiIikKKworICAgICAgICBiYnZhcnMgPSBnZXRfYmJfdmFycyhbJ2JpbmRpcicsICdzeXNjb25mZGlyJywgJ2xvY2Fsc3RhdGVkaXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0RFUExPWV9ESVJfSU1BR0UnLCAnSU1BR0VfTElOS19OQU1FJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9J2NvbnRhaW5lci10ZXN0LWltYWdlJykKKyAgICAgICAgZXhwZWN0ZWRfZmlsZXMgPSBbCisgICAgICAgICAgICAgICAgICAgICcuLycsCisgICAgICAgICAgICAgICAgICAgICcue2JpbmRpcn0vdGhlYXBwJywKKyAgICAgICAgICAgICAgICAgICAgJy57c3lzY29uZmRpcn0vZGVmYXVsdC8nLAorICAgICAgICAgICAgICAgICAgICAnLntzeXNjb25mZGlyfS9kZWZhdWx0L3Bvc3RpbnN0JywKKyAgICAgICAgICAgICAgICAgICAgJy57c3lzY29uZmRpcn0vbGQuc28uY2FjaGUnLAorICAgICAgICAgICAgICAgICAgICAnLntzeXNjb25mZGlyfS90aW1lc3RhbXAnLAorICAgICAgICAgICAgICAgICAgICAnLntzeXNjb25mZGlyfS92ZXJzaW9uJywKKyAgICAgICAgICAgICAgICAgICAgJy4vcnVuLycsCisgICAgICAgICAgICAgICAgICAgICcue2xvY2Fsc3RhdGVkaXJ9L2NhY2hlLycsCisgICAgICAgICAgICAgICAgICAgICcue2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL2xkY29uZmlnLycsCisgICAgICAgICAgICAgICAgICAgICcue2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL2xkY29uZmlnL2F1eC1jYWNoZScsCisgICAgICAgICAgICAgICAgICAgICcue2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL29wa2cvJywKKyAgICAgICAgICAgICAgICAgICAgJy57bG9jYWxzdGF0ZWRpcn0vbGliLycsCisgICAgICAgICAgICAgICAgICAgICcue2xvY2Fsc3RhdGVkaXJ9L2xpYi9vcGtnLycKKyAgICAgICAgICAgICAgICBdCisKKyAgICAgICAgZXhwZWN0ZWRfZmlsZXMgPSBbIHguZm9ybWF0KGJpbmRpcj1iYnZhcnNbJ2JpbmRpciddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmRpcj1iYnZhcnNbJ3N5c2NvbmZkaXInXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2Fsc3RhdGVkaXI9YmJ2YXJzWydsb2NhbHN0YXRlZGlyJ10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiBleHBlY3RlZF9maWxlcyBdCisKKyAgICAgICAgIyBTaW5jZSB0YXIgbGlzdHMgYWxsIGRpcmVjdG9yaWVzIGluZGl2aWR1YWxseSwgbWFrZSBzdXJlIGVhY2ggZWxlbWVudAorICAgICAgICAjIGZyb20gYmluZGlyLCBzeXNjb25mZGlyLCBldGMgaXMgYWRkZWQKKyAgICAgICAgZXhwZWN0ZWRfZmlsZXMgKz0gZ2V0X2VhY2hfcGF0aF9wYXJ0KGJidmFyc1snYmluZGlyJ10pCisgICAgICAgIGV4cGVjdGVkX2ZpbGVzICs9IGdldF9lYWNoX3BhdGhfcGFydChiYnZhcnNbJ3N5c2NvbmZkaXInXSkKKyAgICAgICAgZXhwZWN0ZWRfZmlsZXMgKz0gZ2V0X2VhY2hfcGF0aF9wYXJ0KGJidmFyc1snbG9jYWxzdGF0ZWRpciddKQorCisgICAgICAgIGV4cGVjdGVkX2ZpbGVzID0gc29ydGVkKGV4cGVjdGVkX2ZpbGVzKQorCisgICAgICAgICMgQnVpbGQgdGhlIGltYWdlIG9mIGNvdXJzZQorICAgICAgICBiaXRiYWtlKCdjb250YWluZXItdGVzdC1pbWFnZScpCisKKyAgICAgICAgaW1hZ2UgPSBvcy5wYXRoLmpvaW4oYmJ2YXJzWydERVBMT1lfRElSX0lNQUdFJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJidmFyc1snSU1BR0VfTElOS19OQU1FJ10gKyAnLnRhci5iejInKQorCisgICAgICAgICMgRW5zdXJlIHRoZSBmaWxlcyBpbiB0aGUgaW1hZ2UgYXJlIHdoYXQgd2UgZXhwZWN0CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgidGFyIHRmIHt9IHwgc29ydCIuZm9ybWF0KGltYWdlKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnNwbGl0KCdcbicpLCBleHBlY3RlZF9maWxlcykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL2RldnRvb2wucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9kZXZ0b29sLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMjgwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9kZXZ0b29sLnB5CkBAIC0wLDAgKzEsMTcxMSBAQAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IGdsb2IKK2ltcG9ydCBmbm1hdGNoCisKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS5zZWxmdGVzdC5jYXNlIGltcG9ydCBPRVNlbGZ0ZXN0VGVzdENhc2UKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBjcmVhdGVfdGVtcF9sYXllcgorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBnZXRfYmJfdmFycywgcnVucWVtdSwgZ2V0X3Rlc3RfbGF5ZXIKK2Zyb20gb2VxYS5jb3JlLmRlY29yYXRvci5vZWlkIGltcG9ydCBPRVRlc3RJRAorCitjbGFzcyBEZXZ0b29sQmFzZShPRVNlbGZ0ZXN0VGVzdENhc2UpOgorCisgICAgYnVmZmVyID0gVHJ1ZQorCisgICAgZGVmIF90ZXN0X3JlY2lwZV9jb250ZW50cyhzZWxmLCByZWNpcGVmaWxlLCBjaGVja3ZhcnMsIGNoZWNraW5oZXJpdHMpOgorICAgICAgICB3aXRoIG9wZW4ocmVjaXBlZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgaW52YXIgPSBOb25lCisgICAgICAgICAgICBpbnZhbHVlID0gTm9uZQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICB2YXIgPSBOb25lCisgICAgICAgICAgICAgICAgaWYgaW52YXI6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbGluZS5zdHJpcCgpLnN0cmlwKCciJykKKyAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWUuZW5kc3dpdGgoJ1xcJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBpbnZhbHVlICs9ICcgJyArIHZhbHVlWzotMV0uc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGludmFsdWUgKz0gJyAnICsgdmFsdWUuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyID0gaW52YXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaW52YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgaW52YXIgPSBOb25lCisgICAgICAgICAgICAgICAgZWxpZiAnPScgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgc3BsaXRsaW5lID0gbGluZS5zcGxpdCgnPScsIDEpCisgICAgICAgICAgICAgICAgICAgIHZhciA9IHNwbGl0bGluZVswXS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNwbGl0bGluZVsxXS5zdHJpcCgpLnN0cmlwKCciJykKKyAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWUuZW5kc3dpdGgoJ1xcJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBpbnZhbHVlID0gdmFsdWVbOi0xXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICBpbnZhciA9IHZhcgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnaW5oZXJpdCAnKToKKyAgICAgICAgICAgICAgICAgICAgaW5oZXJpdHMgPSBsaW5lLnNwbGl0KClbMTpdCisKKyAgICAgICAgICAgICAgICBpZiB2YXIgYW5kIHZhciBpbiBjaGVja3ZhcnM6CisgICAgICAgICAgICAgICAgICAgIG5lZWR2YWx1ZSA9IGNoZWNrdmFycy5wb3AodmFyKQorICAgICAgICAgICAgICAgICAgICBpZiBuZWVkdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVmFyaWFibGUgJXMgc2hvdWxkIG5vdCBhcHBlYXIgaW4gcmVjaXBlLCBidXQgdmFsdWUgaXMgYmVpbmcgc2V0IHRvICIlcyInICUgKHZhciwgdmFsdWUpKQorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG5lZWR2YWx1ZSwgc2V0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhciA9PSAnTElDRU5TRSc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzZXQodmFsdWUuc3BsaXQoJyAmICcpKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNldCh2YWx1ZS5zcGxpdCgpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCBuZWVkdmFsdWUsICd2YWx1ZXMgZm9yICVzIGRvIG5vdCBtYXRjaCcgJSB2YXIpCisKKworICAgICAgICBtaXNzaW5ndmFycyA9IHt9CisgICAgICAgIGZvciB2YXIsIHZhbHVlIGluIGNoZWNrdmFycy5pdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbWlzc2luZ3ZhcnNbdmFyXSA9IHZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWlzc2luZ3ZhcnMsIHt9LCAnU29tZSBleHBlY3RlZCB2YXJpYWJsZXMgbm90IGZvdW5kIGluIHJlY2lwZTogJXMnICUgY2hlY2t2YXJzKQorCisgICAgICAgIGZvciBpbmhlcml0IGluIGNoZWNraW5oZXJpdHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGluaGVyaXQsIGluaGVyaXRzLCAnTWlzc2luZyBpbmhlcml0IG9mICVzJyAlIGluaGVyaXQpCisKKyAgICBkZWYgX2NoZWNrX2JiYXBwZW5kKHNlbGYsIHRlc3RyZWNpcGUsIHJlY2lwZWZpbGUsIGFwcGVuZGRpcik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1hcHBlbmRzJywgY3dkPXNlbGYuYnVpbGRkaXIpCisgICAgICAgIHJlc3VsdGxpbmVzID0gcmVzdWx0Lm91dHB1dC5zcGxpdGxpbmVzKCkKKyAgICAgICAgaW5yZWNpcGUgPSBGYWxzZQorICAgICAgICBiYmFwcGVuZHMgPSBbXQorICAgICAgICBiYmFwcGVuZGZpbGUgPSBOb25lCisgICAgICAgIGZvciBsaW5lIGluIHJlc3VsdGxpbmVzOgorICAgICAgICAgICAgaWYgaW5yZWNpcGU6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcgJyk6CisgICAgICAgICAgICAgICAgICAgIGJiYXBwZW5kcy5hcHBlbmQobGluZS5zdHJpcCgpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIGxpbmUgPT0gJyVzOicgJSBvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpOgorICAgICAgICAgICAgICAgIGlucmVjaXBlID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChsZW4oYmJhcHBlbmRzKSwgMiwgJyVzIHJlY2lwZSBpcyBiZWluZyBiYmFwcGVuZGVkIGJ5IGFub3RoZXIgbGF5ZXIgLSBiYmFwcGVuZHMgZm91bmQ6XG4gICVzJyAlICh0ZXN0cmVjaXBlLCAnXG4gICcuam9pbihiYmFwcGVuZHMpKSkKKyAgICAgICAgZm9yIGJiYXBwZW5kIGluIGJiYXBwZW5kczoKKyAgICAgICAgICAgIGlmIGJiYXBwZW5kLnN0YXJ0c3dpdGgoYXBwZW5kZGlyKToKKyAgICAgICAgICAgICAgICBiYmFwcGVuZGZpbGUgPSBiYmFwcGVuZAorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2JiYXBwZW5kIGZvciByZWNpcGUgJXMgZG9lcyBub3Qgc2VlbSB0byBiZSBjcmVhdGVkIGluIHRlc3QgbGF5ZXInICUgdGVzdHJlY2lwZSkKKyAgICAgICAgcmV0dXJuIGJiYXBwZW5kZmlsZQorCisgICAgZGVmIF9jcmVhdGVfdGVtcF9sYXllcihzZWxmLCB0ZW1wbGF5ZXJkaXIsIGFkZGxheWVyLCB0ZW1wbGF5ZXJuYW1lLCBwcmlvcml0eT05OTksIHJlY2lwZXBhdGhzcGVjPSdyZWNpcGVzLSovKicpOgorICAgICAgICBjcmVhdGVfdGVtcF9sYXllcih0ZW1wbGF5ZXJkaXIsIHRlbXBsYXllcm5hbWUsIHByaW9yaXR5LCByZWNpcGVwYXRoc3BlYykKKyAgICAgICAgaWYgYWRkbGF5ZXI6CisgICAgICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgJXMgfHwgdHJ1ZScgJSB0ZW1wbGF5ZXJkaXIpCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIGFkZC1sYXllciAlcycgJSB0ZW1wbGF5ZXJkaXIsIGN3ZD1zZWxmLmJ1aWxkZGlyKQorCisgICAgZGVmIF9wcm9jZXNzX2xzX291dHB1dChzZWxmLCBvdXRwdXQpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29udmVydCBscyAtbCBvdXRwdXQgdG8gYSBmb3JtYXQgd2UgY2FuIHJlYXNvbmFibHkgY29tcGFyZSBmcm9tIG9uZSBjb250ZXh0CisgICAgICAgIHRvIGFub3RoZXIgKGUuZy4gZnJvbSBob3N0IHRvIHRhcmdldCkKKyAgICAgICAgIiIiCisgICAgICAgIGZpbGVsaXN0ID0gW10KKyAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIHNwbGl0bGluZSA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgaWYgbGVuKHNwbGl0bGluZSkgPCA4OgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnX3Byb2Nlc3NfbHNfb3V0cHV0OiBpbnZhbGlkIG91dHB1dCBsaW5lOiAlcycgJSBsaW5lKQorICAgICAgICAgICAgIyBSZW1vdmUgdHJhaWxpbmcgLiBvbiBwZXJtcworICAgICAgICAgICAgc3BsaXRsaW5lWzBdID0gc3BsaXRsaW5lWzBdLnJzdHJpcCgnLicpCisgICAgICAgICAgICAjIFJlbW92ZSBsZWFkaW5nIC4gb24gcGF0aHMKKyAgICAgICAgICAgIHNwbGl0bGluZVstMV0gPSBzcGxpdGxpbmVbLTFdLmxzdHJpcCgnLicpCisgICAgICAgICAgICAjIERyb3AgZmllbGRzIHdlIGRvbid0IHdhbnQgdG8gY29tcGFyZQorICAgICAgICAgICAgZGVsIHNwbGl0bGluZVs3XQorICAgICAgICAgICAgZGVsIHNwbGl0bGluZVs2XQorICAgICAgICAgICAgZGVsIHNwbGl0bGluZVs1XQorICAgICAgICAgICAgZGVsIHNwbGl0bGluZVs0XQorICAgICAgICAgICAgZGVsIHNwbGl0bGluZVsxXQorICAgICAgICAgICAgZmlsZWxpc3QuYXBwZW5kKCcgJy5qb2luKHNwbGl0bGluZSkpCisgICAgICAgIHJldHVybiBmaWxlbGlzdAorCisKK2NsYXNzIERldnRvb2xUZXN0cyhEZXZ0b29sQmFzZSk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBzdXBlcihEZXZ0b29sVGVzdHMsIGNscykuc2V0VXBDbGFzcygpCisgICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhbJ1RPUERJUicsICdTU1RBVEVfRElSJ10pCisgICAgICAgIGNscy5vcmlnaW5hbF9zc3RhdGUgPSBiYl92YXJzWydTU1RBVEVfRElSJ10KKyAgICAgICAgY2xzLmRldnRvb2xfc3N0YXRlID0gb3MucGF0aC5qb2luKGJiX3ZhcnNbJ1RPUERJUiddLCAnc3N0YXRlX2RldnRvb2wnKQorICAgICAgICBjbHMuc3N0YXRlX2NvbmYgID0gJ1NTVEFURV9ESVIgPSAiJXMiXG4nICUgY2xzLmRldnRvb2xfc3N0YXRlCisgICAgICAgIGNscy5zc3RhdGVfY29uZiArPSAoJ1NTVEFURV9NSVJST1JTICs9ICJmaWxlOi8vLiogZmlsZTovLy8lcy9QQVRIIlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgY2xzLm9yaWdpbmFsX3NzdGF0ZSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgIGNscy5sb2dnZXIuZGVidWcoJ0RlbGV0aW5nIGRldnRvb2wgc3N0YXRlIGNhY2hlIG9uICVzJyAlIGNscy5kZXZ0b29sX3NzdGF0ZSkKKyAgICAgICAgcnVuQ21kKCdybSAtcmYgJXMnICUgY2xzLmRldnRvb2xfc3N0YXRlKQorICAgICAgICBzdXBlcihEZXZ0b29sVGVzdHMsIGNscykudGVhckRvd25DbGFzcygpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICIiIlRlc3QgY2FzZSBzZXR1cCBmdW5jdGlvbiIiIgorICAgICAgICBzdXBlcihEZXZ0b29sVGVzdHMsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi53b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMoc2VsZi53b3Jrc3BhY2VkaXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICd1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKHNlbGYuc3N0YXRlX2NvbmYpCisKKyAgICBkZWYgX2NoZWNrX3NyY19yZXBvKHNlbGYsIHJlcG9fZGlyKToKKyAgICAgICAgIiIiQ2hlY2sgc3JjdHJlZSBnaXQgcmVwb3NpdG9yeSIiIgorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4ocmVwb19kaXIsICcuZ2l0JykpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2dpdCByZXBvc2l0b3J5IGZvciBleHRlcm5hbCBzb3VyY2UgdHJlZSBub3QgZm91bmQnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW4nLCBjd2Q9cmVwb19kaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnQ3JlYXRlZCBnaXQgcmVwbyBpcyBub3QgY2xlYW4nKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzeW1ib2xpYy1yZWYgSEVBRCcsIGN3ZD1yZXBvX2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICJyZWZzL2hlYWRzL2RldnRvb2wiLAorICAgICAgICAgICAgICAgICAgICAgICAgICdXcm9uZyBicmFuY2ggaW4gZ2l0IHJlcG8nKQorCisgICAgZGVmIF9jaGVja19yZXBvX3N0YXR1cyhzZWxmLCByZXBvX2RpciwgZXhwZWN0ZWRfc3RhdHVzKToKKyAgICAgICAgIiIiQ2hlY2sgdGhlIHdvcmt0cmVlIHN0YXR1cyBvZiBhIHJlcG9zaXRvcnkiIiIKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC4gLS1wb3JjZWxhaW4nLAorICAgICAgICAgICAgICAgICAgICAgICAgY3dkPXJlcG9fZGlyKQorICAgICAgICBmb3IgbGluZSBpbiByZXN1bHQub3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIGZvciBpbmQsIChmX3N0YXR1cywgZm5fcmUpIGluIGVudW1lcmF0ZShleHBlY3RlZF9zdGF0dXMpOgorICAgICAgICAgICAgICAgIGlmIHJlLm1hdGNoKGZuX3JlLCBsaW5lWzM6XSk6CisgICAgICAgICAgICAgICAgICAgIGlmIGZfc3RhdHVzICE9IGxpbmVbOjJdOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmV4cGVjdGVkIHN0YXR1cyBpbiBsaW5lOiAlcycgJSBsaW5lKQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9zdGF0dXMucG9wKGluZCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmV4cGVjdGVkIG1vZGlmaWVkIGZpbGUgaW4gbGluZTogJXMnICUgbGluZSkKKyAgICAgICAgaWYgZXhwZWN0ZWRfc3RhdHVzOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdNaXNzaW5nIGZpbGUgY2hhbmdlczogJXMnICUgZXhwZWN0ZWRfc3RhdHVzKQorCisgICAgQE9FVGVzdElEKDExNTgpCisgICAgZGVmIHRlc3RfY3JlYXRlX3dvcmtzcGFjZShzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJy93b3Jrc3BhY2UnIG5vdCBpbiByZXN1bHQub3V0cHV0LCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBsYXllciBpbiBiYmxheWVycy5jb25mJykKKyAgICAgICAgIyBUcnkgY3JlYXRpbmcgYSB3b3Jrc3BhY2UgbGF5ZXIgd2l0aCBhIHNwZWNpZmljIHBhdGgKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBjcmVhdGUtd29ya3NwYWNlICVzJyAlIHRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4odGVtcGRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpKSwgbXNnID0gIk5vIHdvcmtzcGFjZSBjcmVhdGVkLiBkZXZ0b29sIG91dHB1dDogJXMgIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHRlbXBkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgVHJ5IGNyZWF0aW5nIGEgd29ya3NwYWNlIGxheWVyIHdpdGggdGhlIGRlZmF1bHQgcGF0aAorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgY3JlYXRlLXdvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksIG1zZyA9ICJObyB3b3Jrc3BhY2UgY3JlYXRlZC4gZGV2dG9vbCBvdXRwdXQ6ICVzICIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbih0ZW1wZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYud29ya3NwYWNlZGlyLCByZXN1bHQub3V0cHV0KQorCisgICAgQE9FVGVzdElEKDExNTkpCisgICAgZGVmIHRlc3RfZGV2dG9vbF9hZGQoc2VsZik6CisgICAgICAgICMgRmV0Y2ggc291cmNlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBwbiA9ICdwdicKKyAgICAgICAgcHYgPSAnMS41LjMnCisgICAgICAgIHVybCA9ICdodHRwOi8vd3d3Lml2YXJjaC5jb20vcHJvZ3JhbXMvc291cmNlcy9wdi0xLjUuMy50YXIuYnoyJworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3dnZXQgJXMnICUgdXJsLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCd0YXIgeGZ2ICVzJyAlIG9zLnBhdGguYmFzZW5hbWUodXJsKSwgY3dkPXRlbXBkaXIpCisgICAgICAgIHNyY2RpciA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAnJXMtJXMnICUgKHBuLCBwdikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc3JjZGlyLCAnY29uZmlndXJlJykpLCAnVW5hYmxlIHRvIGZpbmQgY29uZmlndXJlIHNjcmlwdCBpbiBzb3VyY2UgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgYWRkCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW5zc3RhdGUgJXMnICUgcG4pCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBhZGQgJXMgJXMnICUgKHBuLCBzcmNkaXIpKQorICAgICAgICBzZWxmLmFzc2VydEV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSwgJ1dvcmtzcGFjZSBkaXJlY3Rvcnkgbm90IGNyZWF0ZWQnKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBzdGF0dXMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHJlY2lwZXBhdGggPSAnJXMvcmVjaXBlcy8lcy8lc18lcy5iYicgJSAoc2VsZi53b3Jrc3BhY2VkaXIsIHBuLCBwbiwgcHYpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmVjaXBlcGF0aCwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzcmNkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIGZpbmQtcmVjaXBlCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCAtcSBmaW5kLXJlY2lwZSAlcycgJSBwbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNpcGVwYXRoLCByZXN1bHQub3V0cHV0LnN0cmlwKCkpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIGVkaXQtcmVjaXBlCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnVklTVUFMPSJlY2hvIDEyMyIgZGV2dG9vbCAtcSBlZGl0LXJlY2lwZSAlcycgJSBwbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMTIzICVzJyAlIHJlY2lwZXBhdGgsIHJlc3VsdC5vdXRwdXQuc3RyaXAoKSkKKyAgICAgICAgIyBDbGVhbiB1cCBhbnl0aGluZyBpbiB0aGUgd29ya2Rpci9zeXNyb290L3NzdGF0ZSBjYWNoZSAoaGF2ZSB0byBkbyB0aGlzICphZnRlciogZGV2dG9vbCBhZGQgc2luY2UgdGhlIHJlY2lwZSBvbmx5IGV4aXN0cyB0aGVuKQorICAgICAgICBiaXRiYWtlKCclcyAtYyBjbGVhbnNzdGF0ZScgJSBwbikKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgYnVpbGQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGJ1aWxkICVzJyAlIHBuKQorICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWydEJywgJ2JpbmRpciddLCBwbikKKyAgICAgICAgaW5zdGFsbGRpciA9IGJiX3ZhcnNbJ0QnXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5zdGFsbGRpciwgJ0NvdWxkIG5vdCBxdWVyeSBpbnN0YWxsZGlyIHZhcmlhYmxlJykKKyAgICAgICAgYmluZGlyID0gYmJfdmFyc1snYmluZGlyJ10KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJpbmRpciwgJ0NvdWxkIG5vdCBxdWVyeSBiaW5kaXIgdmFyaWFibGUnKQorICAgICAgICBpZiBiaW5kaXJbMF0gPT0gJy8nOgorICAgICAgICAgICAgYmluZGlyID0gYmluZGlyWzE6XQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGluc3RhbGxkaXIsIGJpbmRpciwgJ3B2JykpLCAncHYgYmluYXJ5IG5vdCBmb3VuZCBpbiBEJykKKworICAgIEBPRVRlc3RJRCgxNDIzKQorICAgIGRlZiB0ZXN0X2RldnRvb2xfYWRkX2dpdF9sb2NhbChzZWxmKToKKyAgICAgICAgIyBGZXRjaCBzb3VyY2UgZnJvbSBhIHJlbW90ZSBVUkwsIGJ1dCBkbyBpdCBvdXRzaWRlIG9mIGRldnRvb2wKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHBuID0gJ2RidXMtd2FpdCcKKyAgICAgICAgc3JjcmV2ID0gJzZjYzYwNzdhMzZmZTI2NDhhNWY5OTNmZTdjMTZjOTYzMmY5NDY1MTcnCisgICAgICAgICMgV2UgY2hvb3NlIGFuIGh0dHBzOi8vIGdpdCBVUkwgaGVyZSB0byBjaGVjayByZXdyaXRpbmcgdGhlIFVSTCB3b3JrcworICAgICAgICB1cmwgPSAnaHR0cHM6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9naXQvZGJ1cy13YWl0JworICAgICAgICAjIEZvcmNlIGZldGNoaW5nIHRvICJub25hbWUiIHN1YmRpciBzbyB3ZSB2ZXJpZnkgd2UncmUgcGlja2luZyB1cCB0aGUgbmFtZSBmcm9tIGF1dG9jb25mCisgICAgICAgICMgaW5zdGVhZCBvZiB0aGUgZGlyZWN0b3J5IG5hbWUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgY2xvbmUgJXMgbm9uYW1lJyAlIHVybCwgY3dkPXRlbXBkaXIpCisgICAgICAgIHNyY2RpciA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAnbm9uYW1lJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgcmVzZXQgLS1oYXJkICVzJyAlIHNyY3JldiwgY3dkPXNyY2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzcmNkaXIsICdjb25maWd1cmUuYWMnKSksICdVbmFibGUgdG8gZmluZCBjb25maWd1cmUgc2NyaXB0IGluIHNvdXJjZSBkaXJlY3RvcnknKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBhZGQKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLndvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgIyBEb24ndCBzcGVjaWZ5IGEgbmFtZSBzaW5jZSB3ZSBzaG91bGQgYmUgYWJsZSB0byBhdXRvLWRldGVjdCBpdAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYWRkICVzJyAlIHNyY2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFeGlzdHMob3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJyksICdXb3Jrc3BhY2UgZGlyZWN0b3J5IG5vdCBjcmVhdGVkJykKKyAgICAgICAgIyBDaGVjayB0aGUgcmVjaXBlIG5hbWUgaXMgY29ycmVjdAorICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHBuKQorICAgICAgICBzZWxmLmFzc2VydEluKCclc19naXQuYmInICUgcG4sIHJlY2lwZWZpbGUsICdSZWNpcGUgZmlsZSBpbmNvcnJlY3RseSBuYW1lZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmVjaXBlZmlsZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHBuLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHNyY2RpciwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyZWNpcGVmaWxlLCByZXN1bHQub3V0cHV0KQorICAgICAgICBjaGVja3ZhcnMgPSB7fQorICAgICAgICBjaGVja3ZhcnNbJ0xJQ0VOU0UnXSA9ICdHUEx2MicKKyAgICAgICAgY2hlY2t2YXJzWydMSUNfRklMRVNfQ0hLU1VNJ10gPSAnZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzJworICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9ICcke1dPUktESVJ9L2dpdCcKKyAgICAgICAgY2hlY2t2YXJzWydQViddID0gJzAuMStnaXQke1NSQ1BWfScKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSAnZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvZ2l0L2RidXMtd2FpdDtwcm90b2NvbD1odHRwcycKKyAgICAgICAgY2hlY2t2YXJzWydTUkNSRVYnXSA9IHNyY3JldgorICAgICAgICBjaGVja3ZhcnNbJ0RFUEVORFMnXSA9IHNldChbJ2RidXMnXSkKKyAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBbXSkKKworICAgIEBPRVRlc3RJRCgxMTYyKQorICAgIGRlZiB0ZXN0X2RldnRvb2xfYWRkX2xpYnJhcnkoc2VsZik6CisgICAgICAgICMgRmV0Y2ggc291cmNlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICB2ZXJzaW9uID0gJzEuMScKKyAgICAgICAgdXJsID0gJ2h0dHBzOi8vd3d3LmludHJhMm5ldC5jb20vZW4vZGV2ZWxvcGVyL2xpYmZ0ZGkvZG93bmxvYWQvbGliZnRkaTEtJXMudGFyLmJ6MicgJSB2ZXJzaW9uCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnd2dldCAlcycgJSB1cmwsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3RhciB4ZnYgbGliZnRkaTEtJXMudGFyLmJ6MicgJSB2ZXJzaW9uLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc3JjZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdsaWJmdGRpMS0lcycgJSB2ZXJzaW9uKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNyY2RpciwgJ0NNYWtlTGlzdHMudHh0JykpLCAnVW5hYmxlIHRvIGZpbmQgQ01ha2VMaXN0cy50eHQgaW4gc291cmNlIGRpcmVjdG9yeScpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIGFkZCAoYW5kIHVzZSAtViBzbyB3ZSB0ZXN0IHRoYXQgdG9vKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYWRkIGxpYmZ0ZGkgJXMgLVYgJXMnICUgKHNyY2RpciwgdmVyc2lvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhpc3RzKG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZCcpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliZnRkaScsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3JjZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENsZWFuIHVwIGFueXRoaW5nIGluIHRoZSB3b3JrZGlyL3N5c3Jvb3Qvc3N0YXRlIGNhY2hlIChoYXZlIHRvIGRvIHRoaXMgKmFmdGVyKiBkZXZ0b29sIGFkZCBzaW5jZSB0aGUgcmVjaXBlIG9ubHkgZXhpc3RzIHRoZW4pCisgICAgICAgIGJpdGJha2UoJ2xpYmZ0ZGkgLWMgY2xlYW5zc3RhdGUnKQorICAgICAgICAjIGxpYmZ0ZGkncyBweXRob24vQ01ha2VMaXN0cy50eHQgaXMgYSBiaXQgYnJva2VuLCBzbyBsZXQncyBqdXN0IGRpc2FibGUgaXQKKyAgICAgICAgIyBUaGVyZSdzIGFsc28gdGhlIG1hdHRlciBvZiBpdCBpbnN0YWxsaW5nIGNtYWtlIGZpbGVzIHRvIGEgcGF0aCB3ZSBkb24ndAorICAgICAgICAjIG5vcm1hbGx5IGNvdmVyLCB3aGljaCB0cmlnZ2VycyB0aGUgaW5zdGFsbGVkLXZzLXNoaXBwZWQgUUEgdGVzdCB3ZSBoYXZlCisgICAgICAgICMgd2l0aGluIGRvX3BhY2thZ2UKKyAgICAgICAgcmVjaXBlZmlsZSA9ICclcy9yZWNpcGVzL2xpYmZ0ZGkvbGliZnRkaV8lcy5iYicgJSAoc2VsZi53b3Jrc3BhY2VkaXIsIHZlcnNpb24pCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgncmVjaXBldG9vbCBzZXR2YXIgJXMgRVhUUkFfT0VDTUFLRSAtLSBcJy1EUFlUSE9OX0JJTkRJTkdTPU9GRiAtRExJQkZURElfQ01BS0VfQ09ORklHX0RJUj0ke2RhdGFkaXJ9L2NtYWtlL01vZHVsZXNcJycgJSByZWNpcGVmaWxlKQorICAgICAgICB3aXRoIG9wZW4ocmVjaXBlZmlsZSwgJ2EnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgnXG5GSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vY21ha2UvTW9kdWxlcyJcbicpCisgICAgICAgICAgICAjIFdlIGRvbid0IGhhdmUgdGhlIGFiaWxpdHkgdG8gcGljayB1cCB0aGlzIGRlcGVuZGVuY3kgYXV0b21hdGljYWxseSB5ZXQuLi4KKyAgICAgICAgICAgIGYud3JpdGUoJ1xuREVQRU5EUyArPSAibGlidXNiMSJcbicpCisgICAgICAgICAgICBmLndyaXRlKCdcblRFU1RMSUJPVVRQVVQgPSAiJHtDT01QT05FTlRTX0RJUn0vJHtUVU5FX1BLR0FSQ0h9LyR7UE59LyR7bGliZGlyfSJcbicpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIGJ1aWxkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBidWlsZCBsaWJmdGRpJykKKyAgICAgICAgYmJfdmFycyA9IGdldF9iYl92YXJzKFsnVEVTVExJQk9VVFBVVCcsICdTVEFNUCddLCAnbGliZnRkaScpCisgICAgICAgIHN0YWdpbmdfbGliZGlyID0gYmJfdmFyc1snVEVTVExJQk9VVFBVVCddCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGFnaW5nX2xpYmRpciwgJ0NvdWxkIG5vdCBxdWVyeSBURVNUTElCT1VUUFVUIHZhcmlhYmxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzdGFnaW5nX2xpYmRpciwgJ2xpYmZ0ZGkxLnNvLjIuMS4wJykpLCAibGliZnRkaSBiaW5hcnkgbm90IGZvdW5kIGluIFNUQUdJTkdfTElCRElSLiBPdXRwdXQgb2YgZGV2dG9vbCBidWlsZCBsaWJmdGRpICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHJlc2V0CisgICAgICAgIHN0YW1wcHJlZml4ID0gYmJfdmFyc1snU1RBTVAnXQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgcmVzZXQgbGliZnRkaScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdsaWJmdGRpJywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YW1wcHJlZml4LCAnVW5hYmxlIHRvIGdldCBTVEFNUCB2YWx1ZSBmb3IgcmVjaXBlIGxpYmZ0ZGknKQorICAgICAgICBtYXRjaGVzID0gZ2xvYi5nbG9iKHN0YW1wcHJlZml4ICsgJyonKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1hdGNoZXMsICdTdGFtcCBmaWxlcyBleGlzdCBmb3IgcmVjaXBlIGxpYmZ0ZGkgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIGNsZWFuZWQnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzdGFnaW5nX2xpYmRpciwgJ2xpYmZ0ZGkxLnNvLjIuMS4wJykpLCAnbGliZnRkaSBiaW5hcnkgc3RpbGwgZm91bmQgaW4gU1RBR0lOR19MSUJESVIgYWZ0ZXIgY2xlYW5pbmcnKQorCisgICAgQE9FVGVzdElEKDExNjApCisgICAgZGVmIHRlc3RfZGV2dG9vbF9hZGRfZmV0Y2goc2VsZik6CisgICAgICAgICMgRmV0Y2ggc291cmNlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICB0ZXN0dmVyID0gJzAuMjMnCisgICAgICAgIHVybCA9ICdodHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvTS9NYXJrdXBTYWZlL01hcmt1cFNhZmUtJXMudGFyLmd6JyAlIHRlc3R2ZXIKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdweXRob24tbWFya3Vwc2FmZScKKyAgICAgICAgc3JjZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsIHRlc3RyZWNpcGUpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIGFkZAorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuc3N0YXRlICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBhZGQgJXMgJXMgLWYgJXMnICUgKHRlc3RyZWNpcGUsIHNyY2RpciwgdXJsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFeGlzdHMob3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJyksICdXb3Jrc3BhY2UgZGlyZWN0b3J5IG5vdCBjcmVhdGVkLiAlcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNyY2RpciwgJ3NldHVwLnB5JykpLCAnVW5hYmxlIHRvIGZpbmQgc2V0dXAucHkgaW4gc291cmNlIGRpcmVjdG9yeScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihzcmNkaXIsICcuZ2l0JykpLCAnZ2l0IHJlcG9zaXRvcnkgZm9yIGV4dGVybmFsIHNvdXJjZSB0cmVlIHdhcyBub3QgY3JlYXRlZCcpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZXN0cmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHNyY2RpciwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDaGVjayByZWNpcGUKKyAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFzc2VydEluKCclc18lcy5iYicgJSAodGVzdHJlY2lwZSwgdGVzdHZlciksIHJlY2lwZWZpbGUsICdSZWNpcGUgZmlsZSBpbmNvcnJlY3RseSBuYW1lZCcpCisgICAgICAgIGNoZWNrdmFycyA9IHt9CisgICAgICAgIGNoZWNrdmFyc1snUyddID0gJyR7V09SS0RJUn0vTWFya3VwU2FmZS0ke1BWfScKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSB1cmwucmVwbGFjZSh0ZXN0dmVyLCAnJHtQVn0nKQorICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIFtdKQorICAgICAgICAjIFRyeSB3aXRoIHZlcnNpb24gc3BlY2lmaWVkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCAtbiAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICBzaHV0aWwucm10cmVlKHNyY2RpcikKKyAgICAgICAgZmFrZXZlciA9ICcxLjknCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBhZGQgJXMgJXMgLWYgJXMgLVYgJXMnICUgKHRlc3RyZWNpcGUsIHNyY2RpciwgdXJsLCBmYWtldmVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzcmNkaXIsICdzZXR1cC5weScpKSwgJ1VuYWJsZSB0byBmaW5kIHNldHVwLnB5IGluIHNvdXJjZSBkaXJlY3RvcnknKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBzdGF0dXMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzcmNkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2hlY2sgcmVjaXBlCisgICAgICAgIHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJXNfJXMuYmInICUgKHRlc3RyZWNpcGUsIGZha2V2ZXIpLCByZWNpcGVmaWxlLCAnUmVjaXBlIGZpbGUgaW5jb3JyZWN0bHkgbmFtZWQnKQorICAgICAgICBjaGVja3ZhcnMgPSB7fQorICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9ICcke1dPUktESVJ9L01hcmt1cFNhZmUtJXMnICUgdGVzdHZlcgorICAgICAgICBjaGVja3ZhcnNbJ1NSQ19VUkknXSA9IHVybAorICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIFtdKQorCisgICAgQE9FVGVzdElEKDExNjEpCisgICAgZGVmIHRlc3RfZGV2dG9vbF9hZGRfZmV0Y2hfZ2l0KHNlbGYpOgorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgdXJsID0gJ2dpdHNtOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbXJhYScKKyAgICAgICAgY2hlY2tyZXYgPSAnYWUxMjdiMTlhNTBhYTU0MjU1ZTQzMzBjY2ZkZDlhNWQwNThlNTgxZCcKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdtcmFhJworICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgYWRkCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW5zc3RhdGUgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGFkZCAlcyAlcyAtYSAtZiAlcycgJSAodGVzdHJlY2lwZSwgc3JjZGlyLCB1cmwpKQorICAgICAgICBzZWxmLmFzc2VydEV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSwgJ1dvcmtzcGFjZSBkaXJlY3Rvcnkgbm90IGNyZWF0ZWQ6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc3JjZGlyLCAnaW1yYWEnLCAnaW1yYWEuYycpKSwgJ1VuYWJsZSB0byBmaW5kIGltcmFhL2ltcmFhLmMgaW4gc291cmNlIGRpcmVjdG9yeScpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZXN0cmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHNyY2RpciwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDaGVjayByZWNpcGUKKyAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFzc2VydEluKCdfZ2l0LmJiJywgcmVjaXBlZmlsZSwgJ1JlY2lwZSBmaWxlIGluY29ycmVjdGx5IG5hbWVkJykKKyAgICAgICAgY2hlY2t2YXJzID0ge30KKyAgICAgICAgY2hlY2t2YXJzWydTJ10gPSAnJHtXT1JLRElSfS9naXQnCisgICAgICAgIGNoZWNrdmFyc1snUFYnXSA9ICcxLjArZ2l0JHtTUkNQVn0nCisgICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSSddID0gdXJsCisgICAgICAgIGNoZWNrdmFyc1snU1JDUkVWJ10gPSAnJHtBVVRPUkVWfScKKyAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBbXSkKKyAgICAgICAgIyBUcnkgd2l0aCByZXZpc2lvbiBhbmQgdmVyc2lvbiBzcGVjaWZpZWQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHJlc2V0IC1uICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHNodXRpbC5ybXRyZWUoc3JjZGlyKQorICAgICAgICB1cmxfcmV2ID0gJyVzO3Jldj0lcycgJSAodXJsLCBjaGVja3JldikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGFkZCAlcyAlcyAtZiAiJXMiIC1WIDEuNScgJSAodGVzdHJlY2lwZSwgc3JjZGlyLCB1cmxfcmV2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzcmNkaXIsICdpbXJhYScsICdpbXJhYS5jJykpLCAnVW5hYmxlIHRvIGZpbmQgaW1yYWEvaW1yYWEuYyBpbiBzb3VyY2UgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3JjZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIHJlY2lwZQorICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ19naXQuYmInLCByZWNpcGVmaWxlLCAnUmVjaXBlIGZpbGUgaW5jb3JyZWN0bHkgbmFtZWQnKQorICAgICAgICBjaGVja3ZhcnMgPSB7fQorICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9ICcke1dPUktESVJ9L2dpdCcKKyAgICAgICAgY2hlY2t2YXJzWydQViddID0gJzEuNStnaXQke1NSQ1BWfScKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSB1cmwKKyAgICAgICAgY2hlY2t2YXJzWydTUkNSRVYnXSA9IGNoZWNrcmV2CisgICAgICAgIHNlbGYuX3Rlc3RfcmVjaXBlX2NvbnRlbnRzKHJlY2lwZWZpbGUsIGNoZWNrdmFycywgW10pCisKKyAgICBAT0VUZXN0SUQoMTM5MSkKKyAgICBkZWYgdGVzdF9kZXZ0b29sX2FkZF9mZXRjaF9zaW1wbGUoc2VsZik6CisgICAgICAgICMgRmV0Y2ggc291cmNlIGZyb20gYSByZW1vdGUgVVJMLCBhdXRvLWRldGVjdGluZyBuYW1lCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICB0ZXN0dmVyID0gJzEuNi4wJworICAgICAgICB1cmwgPSAnaHR0cDovL3d3dy5pdmFyY2guY29tL3Byb2dyYW1zL3NvdXJjZXMvcHYtJXMudGFyLmJ6MicgJSB0ZXN0dmVyCisgICAgICAgIHRlc3RyZWNpcGUgPSAncHYnCisgICAgICAgIHNyY2RpciA9IG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ3NvdXJjZXMnLCB0ZXN0cmVjaXBlKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBhZGQKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLndvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGFkZCAlcycgJSB1cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhpc3RzKG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZC4gJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzcmNkaXIsICdjb25maWd1cmUnKSksICdVbmFibGUgdG8gZmluZCBjb25maWd1cmUgc2NyaXB0IGluIHNvdXJjZSBkaXJlY3RvcnknKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc3JjZGlyLCAnLmdpdCcpKSwgJ2dpdCByZXBvc2l0b3J5IGZvciBleHRlcm5hbCBzb3VyY2UgdHJlZSB3YXMgbm90IGNyZWF0ZWQnKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBzdGF0dXMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzcmNkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2hlY2sgcmVjaXBlCisgICAgICAgIHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJXNfJXMuYmInICUgKHRlc3RyZWNpcGUsIHRlc3R2ZXIpLCByZWNpcGVmaWxlLCAnUmVjaXBlIGZpbGUgaW5jb3JyZWN0bHkgbmFtZWQnKQorICAgICAgICBjaGVja3ZhcnMgPSB7fQorICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9IE5vbmUKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSB1cmwucmVwbGFjZSh0ZXN0dmVyLCAnJHtQVn0nKQorICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIFtdKQorCisgICAgQE9FVGVzdElEKDExNjQpCisgICAgZGVmIHRlc3RfZGV2dG9vbF9tb2RpZnkoc2VsZik6CisgICAgICAgIGltcG9ydCBvZS5wYXRoCisKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4gbWRhZG0nKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5IG1kYWRtIC14ICVzJyAlIHRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhpc3RzKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnTWFrZWZpbGUnKSwgJ0V4dHJhY3RlZCBzb3VyY2UgY291bGQgbm90IGJlIGZvdW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRFeGlzdHMob3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJyksICdXb3Jrc3BhY2UgZGlyZWN0b3J5IG5vdCBjcmVhdGVkJykKKyAgICAgICAgbWF0Y2hlcyA9IGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdhcHBlbmRzJywgJ21kYWRtXyouYmJhcHBlbmQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGNoZXMsICdiYmFwcGVuZCBub3QgY3JlYXRlZCAlcycgJSByZXN1bHQub3V0cHV0KQorCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbWRhZG0nLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHRlbXBkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuX2NoZWNrX3NyY19yZXBvKHRlbXBkaXIpCisKKyAgICAgICAgYml0YmFrZSgnbWRhZG0gLUMgdW5wYWNrJykKKworICAgICAgICBkZWYgY2hlY2tfbGluZShjaGVja2ZpbGUsIGV4cGVjdGVkLCBtZXNzYWdlLCBwcmVzZW50PVRydWUpOgorICAgICAgICAgICAgIyBDaGVjayBmb3IgJGV4cGVjdGVkLCBvbiBhIGxpbmUgb24gaXRzIG93biwgaW4gY2hlY2tmaWxlLgorICAgICAgICAgICAgd2l0aCBvcGVuKGNoZWNrZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIGlmIHByZXNlbnQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhwZWN0ZWQgKyAnXG4nLCBmLCBtZXNzYWdlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZXhwZWN0ZWQgKyAnXG4nLCBmLCBtZXNzYWdlKQorCisgICAgICAgIG1vZGZpbGUgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ21kYWRtLjguaW4nKQorICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWydQS0dEJywgJ21hbmRpciddLCAnbWRhZG0nKQorICAgICAgICBwa2dkID0gYmJfdmFyc1snUEtHRCddCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwa2dkLCAnQ291bGQgbm90IHF1ZXJ5IFBLR0QgdmFyaWFibGUnKQorICAgICAgICBtYW5kaXIgPSBiYl92YXJzWydtYW5kaXInXQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWFuZGlyLCAnQ291bGQgbm90IHF1ZXJ5IG1hbmRpciB2YXJpYWJsZScpCisgICAgICAgIG1hbmZpbGUgPSBvZS5wYXRoLmpvaW4ocGtnZCwgbWFuZGlyLCAnbWFuOCcsICdtZGFkbS44JykKKworICAgICAgICBjaGVja19saW5lKG1vZGZpbGUsICdMaW51eCBTb2Z0d2FyZSBSQUlEJywgJ0NvdWxkIG5vdCBmaW5kIGluaXRpYWwgc3RyaW5nJykKKyAgICAgICAgY2hlY2tfbGluZShtb2RmaWxlLCAnYW50aXF1ZSBwaW4gc2FyZGluZScsICdVbmV4cGVjdGVkbHkgZm91bmQgcmVwbGFjZW1lbnQgc3RyaW5nJywgcHJlc2VudD1GYWxzZSkKKworICAgICAgICByZXN1bHQgPSBydW5DbWQoInNlZCAtaSAncyFeTGludXggU29mdHdhcmUgUkFJRCQhYW50aXF1ZSBwaW4gc2FyZGluZSEnICVzIiAlIG1vZGZpbGUpCisgICAgICAgIGNoZWNrX2xpbmUobW9kZmlsZSwgJ2FudGlxdWUgcGluIHNhcmRpbmUnLCAnbWRhZG0uOC5pbiBmaWxlIG5vdCBtb2RpZmllZCAoc2VkIGZhaWxlZCknKQorCisgICAgICAgIGJpdGJha2UoJ21kYWRtIC1jIHBhY2thZ2UnKQorICAgICAgICBjaGVja19saW5lKG1hbmZpbGUsICdhbnRpcXVlIHBpbiBzYXJkaW5lJywgJ21hbiBmaWxlIG5vdCBtb2RpZmllZC4gbWFuIHNlYXJjaGVkIGZpbGUgcGF0aDogJXMnICUgbWFuZmlsZSkKKworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjaGVja291dCAtLSAlcycgJSBtb2RmaWxlLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgY2hlY2tfbGluZShtb2RmaWxlLCAnTGludXggU29mdHdhcmUgUkFJRCcsICdtYW4gLmluIGZpbGUgbm90IHJlc3RvcmVkIChnaXQgZmFpbGVkKScpCisKKyAgICAgICAgYml0YmFrZSgnbWRhZG0gLWMgcGFja2FnZScpCisgICAgICAgIGNoZWNrX2xpbmUobWFuZmlsZSwgJ0xpbnV4IFNvZnR3YXJlIFJBSUQnLCAnbWFuIGZpbGUgbm90IHVwZGF0ZWQuIG1hbiBzZWFyY2hlZCBmaWxlIHBhdGg6ICVzJyAlIG1hbmZpbGUpCisKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHJlc2V0IG1kYWRtJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ21kYWRtJywgcmVzdWx0Lm91dHB1dCkKKworICAgIEBPRVRlc3RJRCgxNjIwKQorICAgIGRlZiB0ZXN0X2RldnRvb2xfYnVpbGRjbGVhbihzZWxmKToKKyAgICAgICAgZGVmIGFzc2VydEZpbGUocGF0aCwgKnBhdGhzKToKKyAgICAgICAgICAgIGYgPSBvcy5wYXRoLmpvaW4ocGF0aCwgKnBhdGhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFeGlzdHMoZikKKyAgICAgICAgZGVmIGFzc2VydE5vRmlsZShwYXRoLCAqcGF0aHMpOgorICAgICAgICAgICAgZiA9IG9zLnBhdGguam9pbihwYXRoLCAqcGF0aHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEV4aXN0cyhmKQorCisgICAgICAgICMgQ2xlYW4gdXAgYW55dGhpbmcgaW4gdGhlIHdvcmtkaXIvc3lzcm9vdC9zc3RhdGUgY2FjaGUKKyAgICAgICAgYml0YmFrZSgnbWRhZG0gbTQgLWMgY2xlYW5zc3RhdGUnKQorICAgICAgICAjIFRyeSBtb2RpZnlpbmcgYSByZWNpcGUKKyAgICAgICAgdGVtcGRpcl9tZGFkbSA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICB0ZW1wZGlyX200ID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIGJ1aWxkZGlyX200ID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcl9tZGFkbSkKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyX200KQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKGJ1aWxkZGlyX200KQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuIG1kYWRtIG00JykKKyAgICAgICAgc2VsZi53cml0ZV9yZWNpcGVpbmMoJ200JywgJ0VYVEVSTkFMU1JDX0JVSUxEID0gIiVzIlxuZG9fY2xlYW4oKSB7XG5cdDpcbn1cbicgJSBidWlsZGRpcl9tNCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSBtZGFkbSAteCAlcycgJSB0ZW1wZGlyX21kYWRtKQorICAgICAgICAgICAgcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSBtNCAteCAlcycgJSB0ZW1wZGlyX200KQorICAgICAgICAgICAgYXNzZXJ0Tm9GaWxlKHRlbXBkaXJfbWRhZG0sICdtZGFkbScpCisgICAgICAgICAgICBhc3NlcnROb0ZpbGUoYnVpbGRkaXJfbTQsICdzcmMvbTQnKQorICAgICAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnbTQgLWUnKQorICAgICAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnbWRhZG0gbTQgLWMgY29tcGlsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDApCisgICAgICAgICAgICBhc3NlcnRGaWxlKHRlbXBkaXJfbWRhZG0sICdtZGFkbScpCisgICAgICAgICAgICBhc3NlcnRGaWxlKGJ1aWxkZGlyX200LCAnc3JjL200JykKKyAgICAgICAgICAgICMgQ2hlY2sgdGhhdCBidWlsZGNsZWFuIHRhc2sgZXhpc3RzIGFuZCBkb2VzIGNhbGwgbWFrZSBjbGVhbgorICAgICAgICAgICAgYml0YmFrZSgnbWRhZG0gbTQgLWMgYnVpbGRjbGVhbicpCisgICAgICAgICAgICBhc3NlcnROb0ZpbGUodGVtcGRpcl9tZGFkbSwgJ21kYWRtJykKKyAgICAgICAgICAgIGFzc2VydE5vRmlsZShidWlsZGRpcl9tNCwgJ3NyYy9tNCcpCisgICAgICAgICAgICBiaXRiYWtlKCdtZGFkbSBtNCAtYyBjb21waWxlJykKKyAgICAgICAgICAgIGFzc2VydEZpbGUodGVtcGRpcl9tZGFkbSwgJ21kYWRtJykKKyAgICAgICAgICAgIGFzc2VydEZpbGUoYnVpbGRkaXJfbTQsICdzcmMvbTQnKQorICAgICAgICAgICAgYml0YmFrZSgnbWRhZG0gbTQgLWMgY2xlYW4nKQorICAgICAgICAgICAgIyBDaGVjayB0aGF0IGJ1aWxkY2xlYW4gdGFzayBpcyBydW4gYmVmb3JlIGNsZWFuIGZvciBCID09IFMKKyAgICAgICAgICAgIGFzc2VydE5vRmlsZSh0ZW1wZGlyX21kYWRtLCAnbWRhZG0nKQorICAgICAgICAgICAgIyBDaGVjayB0aGF0IGJ1aWxkY2xlYW4gdGFzayBpcyBub3QgcnVuIGJlZm9yZSBjbGVhbiBmb3IgQiAhPSBTCisgICAgICAgICAgICBhc3NlcnRGaWxlKGJ1aWxkZGlyX200LCAnc3JjL200JykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuZGVsZXRlX3JlY2lwZWluYygnbTQnKQorCisgICAgQE9FVGVzdElEKDExNjYpCisgICAgZGVmIHRlc3RfZGV2dG9vbF9tb2RpZnlfaW52YWxpZChzZWxmKToKKyAgICAgICAgIyBUcnkgbW9kaWZ5aW5nIHNvbWUgcmVjaXBlcworICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLndvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKworICAgICAgICB0ZXN0cmVjaXBlcyA9ICdwZXJmIGtlcm5lbC1kZXZzcmMgcGFja2FnZS1pbmRleCBjb3JlLWltYWdlLW1pbmltYWwgbWV0YS10b29sY2hhaW4gcGFja2FnZWdyb3VwLWNvcmUtc2RrIG1ldGEtaWRlLXN1cHBvcnQnLnNwbGl0KCkKKyAgICAgICAgIyBGaW5kIGFjdHVhbCBuYW1lIG9mIGdjYy1zb3VyY2Ugc2luY2UgaXQgbm93IGluY2x1ZGVzIHRoZSB2ZXJzaW9uIC0gY3J1ZGUsIGJ1dCBnb29kIGVub3VnaCBmb3IgdGhpcyBwdXJwb3NlCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1yZWNpcGVzIGdjYy1zb3VyY2UqJykKKyAgICAgICAgZm9yIGxpbmUgaW4gcmVzdWx0Lm91dHB1dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAjIGp1c3QgbWF0Y2ggdGhvc2UgbGluZXMgdGhhdCBjb250YWluIGEgcmVhbCB0YXJnZXQKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaCgnKD9QPHJlY2lwZT5eW2EtekEtWjAtOS4tXSspKD9QPGNvbG9uPjokKScsIGxpbmUpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIHRlc3RyZWNpcGVzLmFwcGVuZChtLmdyb3VwKCdyZWNpcGUnKSkKKyAgICAgICAgZm9yIHRlc3RyZWNpcGUgaW4gdGVzdHJlY2lwZXM6CisgICAgICAgICAgICAjIENoZWNrIGl0J3MgYSB2YWxpZCByZWNpcGUKKyAgICAgICAgICAgIGJpdGJha2UoJyVzIC1lJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICAgICAjIGRldnRvb2wgZXh0cmFjdCBzaG91bGQgZmFpbAorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGV4dHJhY3QgJXMgJXMnICUgKHRlc3RyZWNpcGUsIG9zLnBhdGguam9pbih0ZW1wZGlyLCB0ZXN0cmVjaXBlKSksIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0LnN0YXR1cywgMCwgJ2RldnRvb2wgZXh0cmFjdCBvbiAlcyBzaG91bGQgaGF2ZSBmYWlsZWQuIGRldnRvb2wgb3V0cHV0OiAlcycgJSAodGVzdHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdGZXRjaGluZyAnLCByZXN1bHQub3V0cHV0LCAnZGV2dG9vbCBleHRyYWN0IG9uICVzIHNob3VsZCBoYXZlIGVycm9yZWQgb3V0IGJlZm9yZSB0cnlpbmcgdG8gZmV0Y2gnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0VSUk9SOiAnLCByZXN1bHQub3V0cHV0LCAnZGV2dG9vbCBleHRyYWN0IG9uICVzIHNob3VsZCBoYXZlIGdpdmVuIGFuIEVSUk9SJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICAgICAjIGRldnRvb2wgbW9kaWZ5IHNob3VsZCBmYWlsCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZSkpLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsICdkZXZ0b29sIG1vZGlmeSBvbiAlcyBzaG91bGQgaGF2ZSBmYWlsZWQuIGRldnRvb2wgb3V0cHV0OiAlcycgJSAgKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignRVJST1I6ICcsIHJlc3VsdC5vdXRwdXQsICdkZXZ0b29sIG1vZGlmeSBvbiAlcyBzaG91bGQgaGF2ZSBnaXZlbiBhbiBFUlJPUicgJSB0ZXN0cmVjaXBlKQorCisgICAgQE9FVGVzdElEKDEzNjUpCisgICAgZGVmIHRlc3RfZGV2dG9vbF9tb2RpZnlfbmF0aXZlKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLndvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUcnkgbW9kaWZ5aW5nIHNvbWUgcmVjaXBlcworICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLndvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKworICAgICAgICBiYmNsYXNzZXh0ZW5kZWQgPSBGYWxzZQorICAgICAgICBpbmhlcml0bmF0aXZlID0gRmFsc2UKKyAgICAgICAgdGVzdHJlY2lwZXMgPSAnbXRvb2xzLW5hdGl2ZSBhcHQtbmF0aXZlIGRlc2t0b3AtZmlsZS11dGlscy1uYXRpdmUnLnNwbGl0KCkKKyAgICAgICAgZm9yIHRlc3RyZWNpcGUgaW4gdGVzdHJlY2lwZXM6CisgICAgICAgICAgICBjaGVja2V4dGVuZCA9ICduYXRpdmUnIGluIChnZXRfYmJfdmFyKCdCQkNMQVNTRVhURU5EJywgdGVzdHJlY2lwZSkgb3IgJycpLnNwbGl0KCkKKyAgICAgICAgICAgIGlmIG5vdCBiYmNsYXNzZXh0ZW5kZWQ6CisgICAgICAgICAgICAgICAgYmJjbGFzc2V4dGVuZGVkID0gY2hlY2tleHRlbmQKKyAgICAgICAgICAgIGlmIG5vdCBpbmhlcml0bmF0aXZlOgorICAgICAgICAgICAgICAgIGluaGVyaXRuYXRpdmUgPSBub3QgY2hlY2tleHRlbmQKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgLXggJXMnICUgKHRlc3RyZWNpcGUsIG9zLnBhdGguam9pbih0ZW1wZGlyLCB0ZXN0cmVjaXBlKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdFUlJPUjogJywgcmVzdWx0Lm91dHB1dCwgJ0VSUk9SIGluIGRldnRvb2wgbW9kaWZ5IG91dHB1dDogJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBidWlsZCAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignRVJST1I6ICcsIHJlc3VsdC5vdXRwdXQsICdFUlJPUiBpbiBkZXZ0b29sIGJ1aWxkIG91dHB1dDogJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignRVJST1I6ICcsIHJlc3VsdC5vdXRwdXQsICdFUlJPUiBpbiBkZXZ0b29sIHJlc2V0IG91dHB1dDogJXMnICUgcmVzdWx0Lm91dHB1dCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoYmJjbGFzc2V4dGVuZGVkLCAnTm9uZSBvZiB0aGVzZSByZWNpcGVzIGFyZSBCQkNMQVNTRVhURU5EZWQgdG8gbmF0aXZlIC0gbmVlZCB0byBhZGp1c3QgdGVzdHJlY2lwZXMgbGlzdDogJXMnICUgJywgJy5qb2luKHRlc3RyZWNpcGVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluaGVyaXRuYXRpdmUsICdOb25lIG9mIHRoZXNlIHJlY2lwZXMgZG8gImluaGVyaXQgbmF0aXZlIiAtIG5lZWQgdG8gYWRqdXN0IHRlc3RyZWNpcGVzIGxpc3Q6ICVzJyAlICcsICcuam9pbih0ZXN0cmVjaXBlcykpCisKKworICAgIEBPRVRlc3RJRCgxMTY1KQorICAgIGRlZiB0ZXN0X2RldnRvb2xfbW9kaWZ5X2dpdChzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHRlc3RyZWNpcGUgPSAnbWtlbGZpbWFnZScKKyAgICAgICAgc3JjX3VyaSA9IGdldF9iYl92YXIoJ1NSQ19VUkknLCB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFzc2VydEluKCdnaXQ6Ly8nLCBzcmNfdXJpLCAnVGhpcyB0ZXN0IGV4cGVjdHMgdGhlICVzIHJlY2lwZSB0byBiZSBhIGdpdCByZWNpcGUnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBDbGVhbiB1cCBhbnl0aGluZyBpbiB0aGUgd29ya2Rpci9zeXNyb290L3NzdGF0ZSBjYWNoZQorICAgICAgICBiaXRiYWtlKCclcyAtYyBjbGVhbnNzdGF0ZScgJSB0ZXN0cmVjaXBlKQorICAgICAgICAjIFRyeSBtb2RpZnlpbmcgYSByZWNpcGUKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4gJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGRpcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhpc3RzKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnTWFrZWZpbGUnKSwgJ0V4dHJhY3RlZCBzb3VyY2UgY291bGQgbm90IGJlIGZvdW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRFeGlzdHMob3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJyksICdXb3Jrc3BhY2UgZGlyZWN0b3J5IG5vdCBjcmVhdGVkLiBkZXZ0b29sIG91dHB1dDogJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgbWF0Y2hlcyA9IGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdhcHBlbmRzJywgJ21rZWxmaW1hZ2VfKi5iYmFwcGVuZCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2hlcywgJ2JiYXBwZW5kIG5vdCBjcmVhdGVkJykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVtcGRpciwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDaGVjayBnaXQgcmVwbworICAgICAgICBzZWxmLl9jaGVja19zcmNfcmVwbyh0ZW1wZGlyKQorICAgICAgICAjIFRyeSBidWlsZGluZworICAgICAgICBiaXRiYWtlKHRlc3RyZWNpcGUpCisKKyAgICBAT0VUZXN0SUQoMTE2NykKKyAgICBkZWYgdGVzdF9kZXZ0b29sX21vZGlmeV9sb2NhbGZpbGVzKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdsaWdodHRwZCcKKyAgICAgICAgc3JjX3VyaSA9IChnZXRfYmJfdmFyKCdTUkNfVVJJJywgdGVzdHJlY2lwZSkgb3IgJycpLnNwbGl0KCkKKyAgICAgICAgZm91bmRsb2NhbCA9IEZhbHNlCisgICAgICAgIGZvciBpdGVtIGluIHNyY191cmk6CisgICAgICAgICAgICBpZiBpdGVtLnN0YXJ0c3dpdGgoJ2ZpbGU6Ly8nKSBhbmQgJy5wYXRjaCcgbm90IGluIGl0ZW06CisgICAgICAgICAgICAgICAgZm91bmRsb2NhbCA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBzZWxmLmFzc2VydFRydWUoZm91bmRsb2NhbCwgJ1RoaXMgdGVzdCBleHBlY3RzIHRoZSAlcyByZWNpcGUgdG8gZmV0Y2ggbG9jYWwgZmlsZXMgYW5kIGl0IHNlZW1zIHRoYXQgaXQgbm8gbG9uZ2VyIGRvZXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBDbGVhbiB1cCBhbnl0aGluZyBpbiB0aGUgd29ya2Rpci9zeXNyb290L3NzdGF0ZSBjYWNoZQorICAgICAgICBiaXRiYWtlKCclcyAtYyBjbGVhbnNzdGF0ZScgJSB0ZXN0cmVjaXBlKQorICAgICAgICAjIFRyeSBtb2RpZnlpbmcgYSByZWNpcGUKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4gJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGRpcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhpc3RzKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnY29uZmlndXJlLmFjJyksICdFeHRyYWN0ZWQgc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhpc3RzKG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZCcpCisgICAgICAgIG1hdGNoZXMgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAnYXBwZW5kcycsICclc18qLmJiYXBwZW5kJyAlIHRlc3RyZWNpcGUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2hlcywgJ2JiYXBwZW5kIG5vdCBjcmVhdGVkJykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVtcGRpciwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBUcnkgYnVpbGRpbmcKKyAgICAgICAgYml0YmFrZSh0ZXN0cmVjaXBlKQorCisgICAgQE9FVGVzdElEKDEzNzgpCisgICAgZGVmIHRlc3RfZGV2dG9vbF9tb2RpZnlfdmlydHVhbChzZWxmKToKKyAgICAgICAgIyBUcnkgbW9kaWZ5aW5nIGEgdmlydHVhbCByZWNpcGUKKyAgICAgICAgdmlydHJlY2lwZSA9ICd2aXJ0dWFsL21ha2UnCisgICAgICAgIHJlYWxyZWNpcGUgPSAnbWFrZScKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgLXggJXMnICUgKHZpcnRyZWNpcGUsIHRlbXBkaXIpKQorICAgICAgICBzZWxmLmFzc2VydEV4aXN0cyhvcy5wYXRoLmpvaW4odGVtcGRpciwgJ01ha2VmaWxlLmFtJyksICdFeHRyYWN0ZWQgc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhpc3RzKG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZCcpCisgICAgICAgIG1hdGNoZXMgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAnYXBwZW5kcycsICclc18qLmJiYXBwZW5kJyAlIHJlYWxyZWNpcGUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2hlcywgJ2JiYXBwZW5kIG5vdCBjcmVhdGVkICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbih2aXJ0cmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHJlYWxyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2hlY2sgZ2l0IHJlcG8KKyAgICAgICAgc2VsZi5fY2hlY2tfc3JjX3JlcG8odGVtcGRpcikKKyAgICAgICAgIyBUaGlzIGlzIHByb2JhYmx5IHN1ZmZpY2llbnQKKworCisgICAgQE9FVGVzdElEKDExNjkpCisgICAgZGVmIHRlc3RfZGV2dG9vbF91cGRhdGVfcmVjaXBlKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdtaW5pY29tJworICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWydGSUxFJywgJ1NSQ19VUkknXSwgdGVzdHJlY2lwZSkKKyAgICAgICAgcmVjaXBlZmlsZSA9IGJiX3ZhcnNbJ0ZJTEUnXQorICAgICAgICBzcmNfdXJpID0gYmJfdmFyc1snU1JDX1VSSSddCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2dpdDovLycsIHNyY191cmksICdUaGlzIHRlc3QgZXhwZWN0cyB0aGUgJXMgcmVjaXBlIHRvIE5PVCBiZSBhIGdpdCByZWNpcGUnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5fY2hlY2tfcmVwb19zdGF0dXMob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCBbXSkKKyAgICAgICAgIyBGaXJzdCwgbW9kaWZ5IGEgcmVjaXBlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICAjIChkb24ndCBib3RoZXIgd2l0aCBjbGVhbmluZyB0aGUgcmVjaXBlIG9uIHRlYXJkb3duLCB3ZSB3b24ndCBiZSBidWlsZGluZyBpdCkKKyAgICAgICAgIyBXZSBkb24ndCB1c2UgLXggaGVyZSBzbyB0aGF0IHdlIHRlc3QgdGhlIGJlaGF2aW91ciBvZiBkZXZ0b29sIG1vZGlmeSB3aXRob3V0IGl0CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBkaXIpKQorICAgICAgICAjIENoZWNrIGdpdCByZXBvCisgICAgICAgIHNlbGYuX2NoZWNrX3NyY19yZXBvKHRlbXBkaXIpCisgICAgICAgICMgQWRkIGEgY291cGxlIG9mIGNvbW1pdHMKKyAgICAgICAgIyBGSVhNRTogdGhpcyBvbmx5IHRlc3RzIGFkZGluZywgbmVlZCB0byBhbHNvIHRlc3QgdXBkYXRlIGFuZCByZW1vdmUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdlY2hvICJBZGRpdGlvbmFsIGxpbmUiID4+IFJFQURNRScsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjb21taXQgLWEgLW0gIkNoYW5nZSB0aGUgUkVBRE1FIicsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2VjaG8gIkEgbmV3IGZpbGUiID4gZGV2dG9vbC1uZXctZmlsZScsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBhZGQgZGV2dG9vbC1uZXctZmlsZScsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjb21taXQgLW0gIkFkZCBhIG5ldyBmaWxlIicsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjZCAlczsgcm0gJXMvKi5wYXRjaDsgZ2l0IGNoZWNrb3V0ICVzICVzJyAlIChvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIHRlc3RyZWNpcGUsIHRlc3RyZWNpcGUsIG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSkpKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICBleHBlY3RlZF9zdGF0dXMgPSBbKCcgTScsICcuKi8lcyQnICUgb3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJz8/JywgJy4qLzAwMDEtQ2hhbmdlLXRoZS1SRUFETUUucGF0Y2gkJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJz8/JywgJy4qLzAwMDItQWRkLWEtbmV3LWZpbGUucGF0Y2gkJyldCisgICAgICAgIHNlbGYuX2NoZWNrX3JlcG9fc3RhdHVzKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgZXhwZWN0ZWRfc3RhdHVzKQorCisgICAgQE9FVGVzdElEKDExNzIpCisgICAgZGVmIHRlc3RfZGV2dG9vbF91cGRhdGVfcmVjaXBlX2dpdChzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHRlc3RyZWNpcGUgPSAnbXRkLXV0aWxzJworICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWydGSUxFJywgJ1NSQ19VUkknXSwgdGVzdHJlY2lwZSkKKyAgICAgICAgcmVjaXBlZmlsZSA9IGJiX3ZhcnNbJ0ZJTEUnXQorICAgICAgICBzcmNfdXJpID0gYmJfdmFyc1snU1JDX1VSSSddCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2dpdDovLycsIHNyY191cmksICdUaGlzIHRlc3QgZXhwZWN0cyB0aGUgJXMgcmVjaXBlIHRvIGJlIGEgZ2l0IHJlY2lwZScgJSB0ZXN0cmVjaXBlKQorICAgICAgICBwYXRjaGVzID0gW10KKyAgICAgICAgZm9yIGVudHJ5IGluIHNyY191cmkuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIGVudHJ5LnN0YXJ0c3dpdGgoJ2ZpbGU6Ly8nKSBhbmQgZW50cnkuZW5kc3dpdGgoJy5wYXRjaCcpOgorICAgICAgICAgICAgICAgIHBhdGNoZXMuYXBwZW5kKGVudHJ5Wzc6XS5zcGxpdCgnOycpWzBdKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobGVuKHBhdGNoZXMpLCAwLCAnVGhlICVzIHJlY2lwZSBkb2VzIG5vdCBhcHBlYXIgdG8gY29udGFpbiBhbnkgcGF0Y2hlcywgc28gdGhpcyB0ZXN0IHdpbGwgbm90IGJlIGVmZmVjdGl2ZScgJSB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLl9jaGVja19yZXBvX3N0YXR1cyhvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIFtdKQorICAgICAgICAjIEZpcnN0LCBtb2RpZnkgYSByZWNpcGUKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgICMgKGRvbid0IGJvdGhlciB3aXRoIGNsZWFuaW5nIHRoZSByZWNpcGUgb24gdGVhcmRvd24sIHdlIHdvbid0IGJlIGJ1aWxkaW5nIGl0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wZGlyKSkKKyAgICAgICAgIyBDaGVjayBnaXQgcmVwbworICAgICAgICBzZWxmLl9jaGVja19zcmNfcmVwbyh0ZW1wZGlyKQorICAgICAgICAjIEFkZCBhIGNvdXBsZSBvZiBjb21taXRzCisgICAgICAgICMgRklYTUU6IHRoaXMgb25seSB0ZXN0cyBhZGRpbmcsIG5lZWQgdG8gYWxzbyB0ZXN0IHVwZGF0ZSBhbmQgcmVtb3ZlCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZWNobyAiIyBBZGRpdGlvbmFsIGxpbmUiID4+IE1ha2VmaWxlLmFtJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIHRoZSBNYWtlZmlsZSInLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdlY2hvICJBIG5ldyBmaWxlIiA+IGRldnRvb2wtbmV3LWZpbGUnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgYWRkIGRldnRvb2wtbmV3LWZpbGUnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgY29tbWl0IC1tICJBZGQgYSBuZXcgZmlsZSInLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignY2QgJXM7IHJtIC1yZiAlczsgZ2l0IGNoZWNrb3V0ICVzICVzJyAlIChvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIHRlc3RyZWNpcGUsIHRlc3RyZWNpcGUsIG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSkpKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAtbSBzcmNyZXYgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgZXhwZWN0ZWRfc3RhdHVzID0gWygnIE0nLCAnLiovJXMkJyAlIG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSkpXSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWygnIEQnLCAnLiovJXMkJyAlIHBhdGNoKSBmb3IgcGF0Y2ggaW4gcGF0Y2hlc10KKyAgICAgICAgc2VsZi5fY2hlY2tfcmVwb19zdGF0dXMob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCBleHBlY3RlZF9zdGF0dXMpCisKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgZGlmZiAlcycgJSBvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICBhZGRsaW5lcyA9IFsnU1JDUkVWID0gIi4qIicsICdTUkNfVVJJID0gImdpdDovL2dpdC5pbmZyYWRlYWQub3JnL210ZC11dGlscy5naXQiJ10KKyAgICAgICAgc3JjdXJpbGluZXMgPSBzcmNfdXJpLnNwbGl0KCkKKyAgICAgICAgc3JjdXJpbGluZXNbMF0gPSAnU1JDX1VSSSA9ICInICsgc3JjdXJpbGluZXNbMF0KKyAgICAgICAgc3JjdXJpbGluZXMuYXBwZW5kKCciJykKKyAgICAgICAgcmVtb3ZlbGluZXMgPSBbJ1NSQ1JFViA9ICIuKiInXSArIHNyY3VyaWxpbmVzCisgICAgICAgIGZvciBsaW5lIGluIHJlc3VsdC5vdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcrKysnKSBvciBsaW5lLnN0YXJ0c3dpdGgoJy0tLScpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnKycpOgorICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIGFkZGxpbmVzOgorICAgICAgICAgICAgICAgICAgICBpZiByZS5tYXRjaChpdGVtLCBsaW5lWzE6XS5zdHJpcCgpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRjaGVkLCAnVW5leHBlY3RlZCBkaWZmIGFkZCBsaW5lOiAlcycgJSBsaW5lKQorICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJy0nKToKKyAgICAgICAgICAgICAgICBtYXRjaGVkID0gRmFsc2UKKyAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiByZW1vdmVsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2goaXRlbSwgbGluZVsxOl0uc3RyaXAoKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2hlZCwgJ1VuZXhwZWN0ZWQgZGlmZiByZW1vdmUgbGluZTogJXMnICUgbGluZSkKKyAgICAgICAgIyBOb3cgdHJ5IHdpdGggYXV0byBtb2RlCisgICAgICAgIHJ1bkNtZCgnY2QgJXM7IGdpdCBjaGVja291dCAlcyAlcycgJSAob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCB0ZXN0cmVjaXBlLCBvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpKSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCcsIGN3ZD1vcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkpCisgICAgICAgIHRvcGxldmVsZGlyID0gcmVzdWx0Lm91dHB1dC5zdHJpcCgpCisgICAgICAgIHJlbHBhdGNocGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLnJlbHBhdGgob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCB0b3BsZXZlbGRpciksIHRlc3RyZWNpcGUpCisgICAgICAgIGV4cGVjdGVkX3N0YXR1cyA9IFsoJyBNJywgb3MucGF0aC5yZWxwYXRoKHJlY2lwZWZpbGUsIHRvcGxldmVsZGlyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJz8/JywgJyVzLzAwMDEtQ2hhbmdlLXRoZS1NYWtlZmlsZS5wYXRjaCcgJSByZWxwYXRjaHBhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCc/PycsICclcy8wMDAyLUFkZC1hLW5ldy1maWxlLnBhdGNoJyAlIHJlbHBhdGNocGF0aCldCisgICAgICAgIHNlbGYuX2NoZWNrX3JlcG9fc3RhdHVzKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgZXhwZWN0ZWRfc3RhdHVzKQorCisgICAgQE9FVGVzdElEKDExNzApCisgICAgZGVmIHRlc3RfZGV2dG9vbF91cGRhdGVfcmVjaXBlX2FwcGVuZChzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHRlc3RyZWNpcGUgPSAnbWRhZG0nCisgICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhbJ0ZJTEUnLCAnU1JDX1VSSSddLCB0ZXN0cmVjaXBlKQorICAgICAgICByZWNpcGVmaWxlID0gYmJfdmFyc1snRklMRSddCisgICAgICAgIHNyY191cmkgPSBiYl92YXJzWydTUkNfVVJJJ10KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignZ2l0Oi8vJywgc3JjX3VyaSwgJ1RoaXMgdGVzdCBleHBlY3RzIHRoZSAlcyByZWNpcGUgdG8gTk9UIGJlIGEgZ2l0IHJlY2lwZScgJSB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLl9jaGVja19yZXBvX3N0YXR1cyhvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIFtdKQorICAgICAgICAjIEZpcnN0LCBtb2RpZnkgYSByZWNpcGUKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICB0ZW1wc3JjZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdzb3VyY2UnKQorICAgICAgICB0ZW1wbGF5ZXJkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ2xheWVyJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICAjIChkb24ndCBib3RoZXIgd2l0aCBjbGVhbmluZyB0aGUgcmVjaXBlIG9uIHRlYXJkb3duLCB3ZSB3b24ndCBiZSBidWlsZGluZyBpdCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgdGVtcHNyY2RpcikpCisgICAgICAgICMgQ2hlY2sgZ2l0IHJlcG8KKyAgICAgICAgc2VsZi5fY2hlY2tfc3JjX3JlcG8odGVtcHNyY2RpcikKKyAgICAgICAgIyBBZGQgYSBjb21taXQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJzZWQgJ3MhXFwoI2RlZmluZSBWRVJTSU9OXFxXKlwiW15cIl0qXFwpXCIhXFwxLWN1c3RvbVwiIScgLWkgUmVhZE1lLmMiLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgY29tbWl0IC1hIC1tICJBZGQgb3VyIGN1c3RvbSB2ZXJzaW9uIicsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjZCAlczsgcm0gLWYgJXMvKi5wYXRjaDsgZ2l0IGNoZWNrb3V0IC4nICUgKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgdGVzdHJlY2lwZSkpCisgICAgICAgICMgQ3JlYXRlIGEgdGVtcG9yYXJ5IGxheWVyIGFuZCBhZGQgaXQgdG8gYmJsYXllcnMuY29uZgorICAgICAgICBzZWxmLl9jcmVhdGVfdGVtcF9sYXllcih0ZW1wbGF5ZXJkaXIsIFRydWUsICdzZWxmdGVzdHVwZGF0ZXJlY2lwZScpCisgICAgICAgICMgQ3JlYXRlIHRoZSBiYmFwcGVuZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAlcyAtYSAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGxheWVyZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzonLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIHJlY2lwZSBpcyBzdGlsbCBjbGVhbgorICAgICAgICBzZWxmLl9jaGVja19yZXBvX3N0YXR1cyhvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIFtdKQorICAgICAgICAjIENoZWNrIGJiYXBwZW5kIHdhcyBjcmVhdGVkCisgICAgICAgIHNwbGl0cGF0aCA9IG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKS5zcGxpdChvcy5zZXApCisgICAgICAgIGFwcGVuZGRpciA9IG9zLnBhdGguam9pbih0ZW1wbGF5ZXJkaXIsIHNwbGl0cGF0aFstMl0sIHNwbGl0cGF0aFstMV0pCisgICAgICAgIGJiYXBwZW5kZmlsZSA9IHNlbGYuX2NoZWNrX2JiYXBwZW5kKHRlc3RyZWNpcGUsIHJlY2lwZWZpbGUsIGFwcGVuZGRpcikKKyAgICAgICAgcGF0Y2hmaWxlID0gb3MucGF0aC5qb2luKGFwcGVuZGRpciwgdGVzdHJlY2lwZSwgJzAwMDEtQWRkLW91ci1jdXN0b20tdmVyc2lvbi5wYXRjaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhpc3RzKHBhdGNoZmlsZSwgJ1BhdGNoIGZpbGUgbm90IGNyZWF0ZWQnKQorCisgICAgICAgICMgQ2hlY2sgYmJhcHBlbmQgY29udGVudHMKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1BZGQtb3VyLWN1c3RvbS12ZXJzaW9uLnBhdGNoIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICB3aXRoIG9wZW4oYmJhcHBlbmRmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkbGluZXMsIGYucmVhZGxpbmVzKCkpCisKKyAgICAgICAgIyBDaGVjayB3ZSBjYW4gcnVuIGl0IGFnYWluIGFuZCBiYmFwcGVuZCBpc24ndCBtb2RpZmllZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAlcyAtYSAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGxheWVyZGlyKSkKKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorICAgICAgICAjIERyb3AgbmV3IGNvbW1pdCBhbmQgY2hlY2sgcGF0Y2ggZ2V0cyBkZWxldGVkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHJlc2V0IEhFQUReJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEV4aXN0cyhwYXRjaGZpbGUsICdQYXRjaCBmaWxlIG5vdCBkZWxldGVkJykKKyAgICAgICAgZXhwZWN0ZWRsaW5lczIgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzMiwgZi5yZWFkbGluZXMoKSkKKyAgICAgICAgIyBQdXQgY29tbWl0IGJhY2sgYW5kIGNoZWNrIHdlIGNhbiBydW4gaXQgaWYgbGF5ZXIgaXNuJ3QgaW4gYmJsYXllcnMuY29uZgorICAgICAgICBvcy5yZW1vdmUoYmJhcHBlbmRmaWxlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjb21taXQgLWEgLW0gIkFkZCBvdXIgY3VzdG9tIHZlcnNpb24iJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICVzJyAlIHRlbXBsYXllcmRpciwgY3dkPXNlbGYuYnVpbGRkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdXQVJOSU5HOiBTcGVjaWZpZWQgbGF5ZXIgaXMgbm90IGN1cnJlbnRseSBlbmFibGVkIGluIGJibGF5ZXJzLmNvbmYnLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEV4aXN0cyhwYXRjaGZpbGUsICdQYXRjaCBmaWxlIG5vdCBjcmVhdGVkICh3aXRoIGRpc2FibGVkIGxheWVyKScpCisgICAgICAgIHdpdGggb3BlbihiYmFwcGVuZGZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRsaW5lcywgZi5yZWFkbGluZXMoKSkKKyAgICAgICAgIyBEZWxldGluZyBpc24ndCBleHBlY3RlZCB0byB3b3JrIHVuZGVyIHRoZXNlIGNpcmN1bXN0YW5jZXMKKworICAgIEBPRVRlc3RJRCgxMTcxKQorICAgIGRlZiB0ZXN0X2RldnRvb2xfdXBkYXRlX3JlY2lwZV9hcHBlbmRfZ2l0KHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdtdGQtdXRpbHMnCisgICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhbJ0ZJTEUnLCAnU1JDX1VSSSddLCB0ZXN0cmVjaXBlKQorICAgICAgICByZWNpcGVmaWxlID0gYmJfdmFyc1snRklMRSddCisgICAgICAgIHNyY191cmkgPSBiYl92YXJzWydTUkNfVVJJJ10KKyAgICAgICAgc2VsZi5hc3NlcnRJbignZ2l0Oi8vJywgc3JjX3VyaSwgJ1RoaXMgdGVzdCBleHBlY3RzIHRoZSAlcyByZWNpcGUgdG8gYmUgYSBnaXQgcmVjaXBlJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIGZvciBlbnRyeSBpbiBzcmNfdXJpLnNwbGl0KCk6CisgICAgICAgICAgICBpZiBlbnRyeS5zdGFydHN3aXRoKCdnaXQ6Ly8nKToKKyAgICAgICAgICAgICAgICBnaXRfdXJpID0gZW50cnkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBzZWxmLl9jaGVja19yZXBvX3N0YXR1cyhvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIFtdKQorICAgICAgICAjIEZpcnN0LCBtb2RpZnkgYSByZWNpcGUKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICB0ZW1wc3JjZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdzb3VyY2UnKQorICAgICAgICB0ZW1wbGF5ZXJkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ2xheWVyJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICAjIChkb24ndCBib3RoZXIgd2l0aCBjbGVhbmluZyB0aGUgcmVjaXBlIG9uIHRlYXJkb3duLCB3ZSB3b24ndCBiZSBidWlsZGluZyBpdCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgdGVtcHNyY2RpcikpCisgICAgICAgICMgQ2hlY2sgZ2l0IHJlcG8KKyAgICAgICAgc2VsZi5fY2hlY2tfc3JjX3JlcG8odGVtcHNyY2RpcikKKyAgICAgICAgIyBBZGQgYSBjb21taXQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdlY2hvICIjIEFkZGl0aW9uYWwgbGluZSIgPj4gTWFrZWZpbGUuYW0nLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgY29tbWl0IC1hIC1tICJDaGFuZ2UgdGhlIE1ha2VmaWxlIicsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjZCAlczsgcm0gLWYgJXMvKi5wYXRjaDsgZ2l0IGNoZWNrb3V0IC4nICUgKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgdGVzdHJlY2lwZSkpCisgICAgICAgICMgQ3JlYXRlIGEgdGVtcG9yYXJ5IGxheWVyCisgICAgICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguam9pbih0ZW1wbGF5ZXJkaXIsICdjb25mJykpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4odGVtcGxheWVyZGlyLCAnY29uZicsICdsYXllci5jb25mJyksICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCRklMRVMgKz0gIiR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmJhcHBlbmQiXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnQkJGSUxFX0NPTExFQ1RJT05TICs9ICJvZXNlbGZ0ZXN0dGVtcGxheWVyIlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCRklMRV9QQVRURVJOX29lc2VsZnRlc3R0ZW1wbGF5ZXIgPSAiXiR7TEFZRVJESVJ9LyJcbicpCisgICAgICAgICAgICBmLndyaXRlKCdCQkZJTEVfUFJJT1JJVFlfb2VzZWxmdGVzdHRlbXBsYXllciA9ICI5OTkiXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnQkJGSUxFX1BBVFRFUk5fSUdOT1JFX0VNUFRZX29lc2VsZnRlc3R0ZW1wbGF5ZXIgPSAiMSJcbicpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAlcyB8fCB0cnVlJyAlIHRlbXBsYXllcmRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBhZGQtbGF5ZXIgJXMnICUgdGVtcGxheWVyZGlyLCBjd2Q9c2VsZi5idWlsZGRpcikKKyAgICAgICAgIyBDcmVhdGUgdGhlIGJiYXBwZW5kCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlIC1tIHNyY3JldiAlcyAtYSAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGxheWVyZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzonLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIHJlY2lwZSBpcyBzdGlsbCBjbGVhbgorICAgICAgICBzZWxmLl9jaGVja19yZXBvX3N0YXR1cyhvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIFtdKQorICAgICAgICAjIENoZWNrIGJiYXBwZW5kIHdhcyBjcmVhdGVkCisgICAgICAgIHNwbGl0cGF0aCA9IG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKS5zcGxpdChvcy5zZXApCisgICAgICAgIGFwcGVuZGRpciA9IG9zLnBhdGguam9pbih0ZW1wbGF5ZXJkaXIsIHNwbGl0cGF0aFstMl0sIHNwbGl0cGF0aFstMV0pCisgICAgICAgIGJiYXBwZW5kZmlsZSA9IHNlbGYuX2NoZWNrX2JiYXBwZW5kKHRlc3RyZWNpcGUsIHJlY2lwZWZpbGUsIGFwcGVuZGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFeGlzdHMob3MucGF0aC5qb2luKGFwcGVuZGRpciwgdGVzdHJlY2lwZSksICdQYXRjaCBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBiZSBjcmVhdGVkJykKKworICAgICAgICAjIENoZWNrIGJiYXBwZW5kIGNvbnRlbnRzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHJldi1wYXJzZSBIRUFEJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBzZXQoWydTUkNSRVYgPSAiJXMiXG4nICUgcmVzdWx0Lm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgPSAiJXMiXG4nICUgZ2l0X3VyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10pCisgICAgICAgIHdpdGggb3BlbihiYmFwcGVuZGZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRsaW5lcywgc2V0KGYucmVhZGxpbmVzKCkpKQorCisgICAgICAgICMgQ2hlY2sgd2UgY2FuIHJ1biBpdCBhZ2FpbiBhbmQgYmJhcHBlbmQgaXNuJ3QgbW9kaWZpZWQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgLW0gc3JjcmV2ICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQorICAgICAgICB3aXRoIG9wZW4oYmJhcHBlbmRmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkbGluZXMsIHNldChmLnJlYWRsaW5lcygpKSkKKyAgICAgICAgIyBEcm9wIG5ldyBjb21taXQgYW5kIGNoZWNrIFNSQ1JFViBjaGFuZ2VzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHJlc2V0IEhFQUReJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlIC1tIHNyY3JldiAlcyAtYSAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGxheWVyZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFeGlzdHMob3MucGF0aC5qb2luKGFwcGVuZGRpciwgdGVzdHJlY2lwZSksICdQYXRjaCBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBiZSBjcmVhdGVkJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IHNldChbJ1NSQ1JFViA9ICIlcyJcbicgJSByZXN1bHQub3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSA9ICIlcyJcbicgJSBnaXRfdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXSkKKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBzZXQoZi5yZWFkbGluZXMoKSkpCisgICAgICAgICMgUHV0IGNvbW1pdCBiYWNrIGFuZCBjaGVjayB3ZSBjYW4gcnVuIGl0IGlmIGxheWVyIGlzbid0IGluIGJibGF5ZXJzLmNvbmYKKyAgICAgICAgb3MucmVtb3ZlKGJiYXBwZW5kZmlsZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgY29tbWl0IC1hIC1tICJDaGFuZ2UgdGhlIE1ha2VmaWxlIicsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAlcycgJSB0ZW1wbGF5ZXJkaXIsIGN3ZD1zZWxmLmJ1aWxkZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAtbSBzcmNyZXYgJXMgLWEgJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBsYXllcmRpcikpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1dBUk5JTkc6IFNwZWNpZmllZCBsYXllciBpcyBub3QgY3VycmVudGx5IGVuYWJsZWQgaW4gYmJsYXllcnMuY29uZicsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXhpc3RzKG9zLnBhdGguam9pbihhcHBlbmRkaXIsIHRlc3RyZWNpcGUpLCAnUGF0Y2ggZGlyZWN0b3J5IHNob3VsZCBub3QgYmUgY3JlYXRlZCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHJldi1wYXJzZSBIRUFEJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBzZXQoWydTUkNSRVYgPSAiJXMiXG4nICUgcmVzdWx0Lm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgPSAiJXMiXG4nICUgZ2l0X3VyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10pCisgICAgICAgIHdpdGggb3BlbihiYmFwcGVuZGZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRsaW5lcywgc2V0KGYucmVhZGxpbmVzKCkpKQorICAgICAgICAjIERlbGV0aW5nIGlzbid0IGV4cGVjdGVkIHRvIHdvcmsgdW5kZXIgdGhlc2UgY2lyY3Vtc3RhbmNlcworCisgICAgQE9FVGVzdElEKDEzNzApCisgICAgZGVmIHRlc3RfZGV2dG9vbF91cGRhdGVfcmVjaXBlX2xvY2FsX2ZpbGVzKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGxvY2FsIHNvdXJjZSBmaWxlcyBhcmUgY29waWVkIG92ZXIgaW5zdGVhZCBvZiBwYXRjaGVkIiIiCisgICAgICAgIHRlc3RyZWNpcGUgPSAnbWFrZWRldnMnCisgICAgICAgIHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBTZXR1cCBzcmN0cmVlIGZvciBtb2RpZnlpbmcgdGhlIHJlY2lwZQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLndvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgIyAoZG9uJ3QgYm90aGVyIHdpdGggY2xlYW5pbmcgdGhlIHJlY2lwZSBvbiB0ZWFyZG93biwgd2Ugd29uJ3QgYmUKKyAgICAgICAgIyBidWlsZGluZyBpdCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGRpcikpCisgICAgICAgICMgQ2hlY2sgZ2l0IHJlcG8KKyAgICAgICAgc2VsZi5fY2hlY2tfc3JjX3JlcG8odGVtcGRpcikKKyAgICAgICAgIyBUcnkgYnVpbGRpbmcganVzdCB0byBlbnN1cmUgd2UgaGF2ZW4ndCBicm9rZW4gdGhhdAorICAgICAgICBiaXRiYWtlKCIlcyIgJSB0ZXN0cmVjaXBlKQorICAgICAgICAjIEVkaXQgLyBjb21taXQgbG9jYWwgc291cmNlCisgICAgICAgIHJ1bkNtZCgnZWNobyAiLyogRm9vYmFyICovIiA+PiBvZS1sb2NhbC1maWxlcy9tYWtlZGV2cy5jJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJ1bkNtZCgnZWNobyAiRm9vIiA+IG9lLWxvY2FsLWZpbGVzL25ldy1sb2NhbCcsIGN3ZD10ZW1wZGlyKQorICAgICAgICBydW5DbWQoJ2VjaG8gIkJhciIgPiBuZXctZmlsZScsIGN3ZD10ZW1wZGlyKQorICAgICAgICBydW5DbWQoJ2dpdCBhZGQgbmV3LWZpbGUnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcnVuQ21kKCdnaXQgY29tbWl0IC1tICJBZGQgbmV3IGZpbGUiJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2NkICVzOyBnaXQgY2xlYW4gLWZkIC47IGdpdCBjaGVja291dCAuJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICBleHBlY3RlZF9zdGF0dXMgPSBbKCcgTScsICcuKi8lcyQnICUgb3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJyBNJywgJy4qL21ha2VkZXZzL21ha2VkZXZzLmMkJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJz8/JywgJy4qL21ha2VkZXZzL25ldy1sb2NhbCQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnPz8nLCAnLiovbWFrZWRldnMvMDAwMS1BZGQtbmV3LWZpbGUucGF0Y2gkJyldCisgICAgICAgIHNlbGYuX2NoZWNrX3JlcG9fc3RhdHVzKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgZXhwZWN0ZWRfc3RhdHVzKQorCisgICAgQE9FVGVzdElEKDEzNzEpCisgICAgZGVmIHRlc3RfZGV2dG9vbF91cGRhdGVfcmVjaXBlX2xvY2FsX2ZpbGVzXzIoc2VsZik6CisgICAgICAgICIiIkNoZWNrIGxvY2FsIHNvdXJjZSBmaWxlcyBzdXBwb3J0IHdoZW4gb2UtbG9jYWwtZmlsZXMgaXMgaW4gR2l0IiIiCisgICAgICAgIHRlc3RyZWNpcGUgPSAnbHpvJworICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgICMgU2V0dXAgc3JjdHJlZSBmb3IgbW9kaWZ5aW5nIHRoZSByZWNpcGUKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgLXggJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBkaXIpKQorICAgICAgICAjIENoZWNrIGdpdCByZXBvCisgICAgICAgIHNlbGYuX2NoZWNrX3NyY19yZXBvKHRlbXBkaXIpCisgICAgICAgICMgQWRkIG9lLWxvY2FsLWZpbGVzIHRvIEdpdAorICAgICAgICBydW5DbWQoJ3JtIG9lLWxvY2FsLWZpbGVzLy5naXRpZ25vcmUnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcnVuQ21kKCdnaXQgYWRkIG9lLWxvY2FsLWZpbGVzJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJ1bkNtZCgnZ2l0IGNvbW1pdCAtbSAiQWRkIGxvY2FsIHNvdXJjZXMiJywgY3dkPXRlbXBkaXIpCisgICAgICAgICMgRWRpdCAvIGNvbW1pdCBsb2NhbCBzb3VyY2VzCisgICAgICAgIHJ1bkNtZCgnZWNobyAiIyBGb29iYXIiID4+IG9lLWxvY2FsLWZpbGVzL2FjaW5jbHVkZS5tNCcsIGN3ZD10ZW1wZGlyKQorICAgICAgICBydW5DbWQoJ2dpdCBjb21taXQgLWFtICJFZGl0IGV4aXN0aW5nIGZpbGUiJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJ1bkNtZCgnZ2l0IHJtIG9lLWxvY2FsLWZpbGVzL3J1bi1wdGVzdCcsIGN3ZD10ZW1wZGlyKQorICAgICAgICBydW5DbWQoJ2dpdCBjb21taXQgLW0iUmVtb3ZlIGZpbGUiJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJ1bkNtZCgnZWNobyAiRm9vIiA+IG9lLWxvY2FsLWZpbGVzL25ldy1sb2NhbCcsIGN3ZD10ZW1wZGlyKQorICAgICAgICBydW5DbWQoJ2dpdCBhZGQgb2UtbG9jYWwtZmlsZXMvbmV3LWxvY2FsJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJ1bkNtZCgnZ2l0IGNvbW1pdCAtbSAiQWRkIG5ldyBsb2NhbCBmaWxlIicsIGN3ZD10ZW1wZGlyKQorICAgICAgICBydW5DbWQoJ2VjaG8gIkdhciIgPiBuZXctZmlsZScsIGN3ZD10ZW1wZGlyKQorICAgICAgICBydW5DbWQoJ2dpdCBhZGQgbmV3LWZpbGUnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcnVuQ21kKCdnaXQgY29tbWl0IC1tICJBZGQgbmV3IGZpbGUiJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2NkICVzOyBnaXQgY2xlYW4gLWZkIC47IGdpdCBjaGVja291dCAuJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICAjIENoZWNrb3V0IHVubW9kaWZpZWQgZmlsZSB0byB3b3JraW5nIGNvcHkgLT4gZGV2dG9vbCBzaG91bGQgc3RpbGwgcGljaworICAgICAgICAjIHRoZSBtb2RpZmllZCB2ZXJzaW9uIGZyb20gSEVBRAorICAgICAgICBydW5DbWQoJ2dpdCBjaGVja291dCBIRUFEXiAtLSBvZS1sb2NhbC1maWxlcy9hY2luY2x1ZGUubTQnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgZXhwZWN0ZWRfc3RhdHVzID0gWygnIE0nLCAnLiovJXMkJyAlIG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCcgTScsICcuKi9hY2luY2x1ZGUubTQkJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJyBEJywgJy4qL3J1bi1wdGVzdCQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnPz8nLCAnLiovbmV3LWxvY2FsJCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCc/PycsICcuKi8wMDAxLUFkZC1uZXctZmlsZS5wYXRjaCQnKV0KKyAgICAgICAgc2VsZi5fY2hlY2tfcmVwb19zdGF0dXMob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCBleHBlY3RlZF9zdGF0dXMpCisKKyAgICBAT0VUZXN0SUQoMTYyNykKKyAgICBkZWYgdGVzdF9kZXZ0b29sX3VwZGF0ZV9yZWNpcGVfbG9jYWxfZmlsZXNfMyhzZWxmKToKKyAgICAgICAgIyBGaXJzdCwgbW9kaWZ5IHRoZSByZWNpcGUKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdkZXZ0b29sLXRlc3QtbG9jYWxvbmx5JworICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWydGSUxFJywgJ1NSQ19VUkknXSwgdGVzdHJlY2lwZSkKKyAgICAgICAgcmVjaXBlZmlsZSA9IGJiX3ZhcnNbJ0ZJTEUnXQorICAgICAgICBzcmNfdXJpID0gYmJfdmFyc1snU1JDX1VSSSddCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICAjIChkb24ndCBib3RoZXIgd2l0aCBjbGVhbmluZyB0aGUgcmVjaXBlIG9uIHRlYXJkb3duLCB3ZSB3b24ndCBiZSBidWlsZGluZyBpdCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICAjIE1vZGlmeSBvbmUgZmlsZQorICAgICAgICBydW5DbWQoJ2VjaG8gIkFub3RoZXIgbGluZSIgPj4gZmlsZTInLCBjd2Q9b3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAnc291cmNlcycsIHRlc3RyZWNpcGUsICdvZS1sb2NhbC1maWxlcycpKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjZCAlczsgcm0gJXMvKjsgZ2l0IGNoZWNrb3V0ICVzICVzJyAlIChvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIHRlc3RyZWNpcGUsIHRlc3RyZWNpcGUsIG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSkpKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICBleHBlY3RlZF9zdGF0dXMgPSBbKCcgTScsICcuKi8lcy9maWxlMiQnICUgdGVzdHJlY2lwZSldCisgICAgICAgIHNlbGYuX2NoZWNrX3JlcG9fc3RhdHVzKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgZXhwZWN0ZWRfc3RhdHVzKQorCisgICAgQE9FVGVzdElEKDE2MjkpCisgICAgZGVmIHRlc3RfZGV2dG9vbF91cGRhdGVfcmVjaXBlX2xvY2FsX3BhdGNoX2d6KHNlbGYpOgorICAgICAgICAjIEZpcnN0LCBtb2RpZnkgdGhlIHJlY2lwZQorICAgICAgICB0ZXN0cmVjaXBlID0gJ2RldnRvb2wtdGVzdC1wYXRjaC1neicKKyAgICAgICAgaWYgZ2V0X2JiX3ZhcignRElTVFJPJykgPT0gJ3Bva3ktdGlueSc6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJUaGUgRElTVFJPICdwb2t5LXRpbnknIGRvZXMgbm90IHByb3ZpZGUgdGhlIGRlcGVuZGVuY2llcyBuZWVkZWQgYnkgJXMiICUgdGVzdHJlY2lwZSkKKyAgICAgICAgYmJfdmFycyA9IGdldF9iYl92YXJzKFsnRklMRScsICdTUkNfVVJJJ10sIHRlc3RyZWNpcGUpCisgICAgICAgIHJlY2lwZWZpbGUgPSBiYl92YXJzWydGSUxFJ10KKyAgICAgICAgc3JjX3VyaSA9IGJiX3ZhcnNbJ1NSQ19VUkknXQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLndvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgIyAoZG9uJ3QgYm90aGVyIHdpdGggY2xlYW5pbmcgdGhlIHJlY2lwZSBvbiB0ZWFyZG93biwgd2Ugd29uJ3QgYmUgYnVpbGRpbmcgaXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBNb2RpZnkgb25lIGZpbGUKKyAgICAgICAgc3JjdHJlZSA9IG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ3NvdXJjZXMnLCB0ZXN0cmVjaXBlKQorICAgICAgICBydW5DbWQoJ2VjaG8gIkFub3RoZXIgbGluZSIgPj4gUkVBRE1FJywgY3dkPXNyY3RyZWUpCisgICAgICAgIHJ1bkNtZCgnZ2l0IGNvbW1pdCAtYSAtLWFtZW5kIC0tbm8tZWRpdCcsIGN3ZD1zcmN0cmVlKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjZCAlczsgcm0gJXMvKjsgZ2l0IGNoZWNrb3V0ICVzICVzJyAlIChvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIHRlc3RyZWNpcGUsIHRlc3RyZWNpcGUsIG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSkpKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICBleHBlY3RlZF9zdGF0dXMgPSBbKCcgTScsICcuKi8lcy9yZWFkbWUucGF0Y2guZ3okJyAlIHRlc3RyZWNpcGUpXQorICAgICAgICBzZWxmLl9jaGVja19yZXBvX3N0YXR1cyhvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIGV4cGVjdGVkX3N0YXR1cykKKyAgICAgICAgcGF0Y2hfZ3ogPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCB0ZXN0cmVjaXBlLCAncmVhZG1lLnBhdGNoLmd6JykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdmaWxlICVzJyAlIHBhdGNoX2d6KQorICAgICAgICBpZiAnZ3ppcCBjb21wcmVzc2VkIGRhdGEnIG5vdCBpbiByZXN1bHQub3V0cHV0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCdOZXcgcGF0Y2ggZmlsZSBpcyBub3QgZ3ppcHBlZCAtIGZpbGUgcmVwb3J0czpcbiVzJyAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAT0VUZXN0SUQoMTYyOCkKKyAgICBkZWYgdGVzdF9kZXZ0b29sX3VwZGF0ZV9yZWNpcGVfbG9jYWxfZmlsZXNfc3ViZGlyKHNlbGYpOgorICAgICAgICAjIFRyeSBkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgb24gYSByZWNpcGUgdGhhdCBoYXMgYSBmaWxlIHdpdGggc3ViZGlyPSBzZXQgaW4KKyAgICAgICAgIyBTUkNfVVJJIHN1Y2ggdGhhdCBpdCBvdmVyd3JpdGVzIGEgZmlsZSB0aGF0IHdhcyBpbiBhbiBhcmNoaXZlIHRoYXQKKyAgICAgICAgIyB3YXMgYWxzbyBpbiBTUkNfVVJJCisgICAgICAgICMgRmlyc3QsIG1vZGlmeSB0aGUgcmVjaXBlCisgICAgICAgIHRlc3RyZWNpcGUgPSAnZGV2dG9vbC10ZXN0LXN1YmRpcicKKyAgICAgICAgYmJfdmFycyA9IGdldF9iYl92YXJzKFsnRklMRScsICdTUkNfVVJJJ10sIHRlc3RyZWNpcGUpCisgICAgICAgIHJlY2lwZWZpbGUgPSBiYl92YXJzWydGSUxFJ10KKyAgICAgICAgc3JjX3VyaSA9IGJiX3ZhcnNbJ1NSQ19VUkknXQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLndvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgIyAoZG9uJ3QgYm90aGVyIHdpdGggY2xlYW5pbmcgdGhlIHJlY2lwZSBvbiB0ZWFyZG93biwgd2Ugd29uJ3QgYmUgYnVpbGRpbmcgaXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgdGVzdGZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdzb3VyY2VzJywgdGVzdHJlY2lwZSwgJ3Rlc3RmaWxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFeGlzdHModGVzdGZpbGUsICdFeHRyYWN0ZWQgc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCcpCisgICAgICAgIHdpdGggb3Blbih0ZXN0ZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgY29udGVudHMgPSBmLnJlYWQoKS5yc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRzLCAnTW9kaWZpZWQgdmVyc2lvbicsICdGaWxlIGhhcyBhcHBhcmVudGx5IG5vdCBiZWVuIG92ZXJ3cml0dGVuIGFzIGl0IHNob3VsZCBoYXZlIGJlZW4nKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCB1cGRhdGUtcmVjaXBlIHdpdGhvdXQgbW9kaWZ5aW5nIGFueSBmaWxlcworICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjZCAlczsgcm0gJXMvKjsgZ2l0IGNoZWNrb3V0ICVzICVzJyAlIChvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIHRlc3RyZWNpcGUsIHRlc3RyZWNpcGUsIG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSkpKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICBleHBlY3RlZF9zdGF0dXMgPSBbXQorICAgICAgICBzZWxmLl9jaGVja19yZXBvX3N0YXR1cyhvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIGV4cGVjdGVkX3N0YXR1cykKKworICAgIEBPRVRlc3RJRCgxMTYzKQorICAgIGRlZiB0ZXN0X2RldnRvb2xfZXh0cmFjdChzZWxmKToKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICAjIFRyeSBkZXZ0b29sIGV4dHJhY3QKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgZXh0cmFjdCBtYXRjaGJveC10ZXJtaW5hbCAlcycgJSB0ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydEV4aXN0cyhvcy5wYXRoLmpvaW4odGVtcGRpciwgJ01ha2VmaWxlLmFtJyksICdFeHRyYWN0ZWQgc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCcpCisgICAgICAgIHNlbGYuX2NoZWNrX3NyY19yZXBvKHRlbXBkaXIpCisKKyAgICBAT0VUZXN0SUQoMTM3OSkKKyAgICBkZWYgdGVzdF9kZXZ0b29sX2V4dHJhY3RfdmlydHVhbChzZWxmKToKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICAjIFRyeSBkZXZ0b29sIGV4dHJhY3QKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgZXh0cmFjdCB2aXJ0dWFsL21ha2UgJXMnICUgdGVtcGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFeGlzdHMob3MucGF0aC5qb2luKHRlbXBkaXIsICdNYWtlZmlsZS5hbScpLCAnRXh0cmFjdGVkIHNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQnKQorICAgICAgICBzZWxmLl9jaGVja19zcmNfcmVwbyh0ZW1wZGlyKQorCisgICAgQE9FVGVzdElEKDExNjgpCisgICAgZGVmIHRlc3RfZGV2dG9vbF9yZXNldF9hbGwoc2VsZik6CisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICB0ZXN0cmVjaXBlMSA9ICdtZGFkbScKKyAgICAgICAgdGVzdHJlY2lwZTIgPSAnY3JvbmllJworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5IC14ICVzICVzJyAlICh0ZXN0cmVjaXBlMSwgb3MucGF0aC5qb2luKHRlbXBkaXIsIHRlc3RyZWNpcGUxKSkpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgLXggJXMgJXMnICUgKHRlc3RyZWNpcGUyLCBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZTIpKSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGJ1aWxkICVzJyAlIHRlc3RyZWNpcGUxKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYnVpbGQgJXMnICUgdGVzdHJlY2lwZTIpCisgICAgICAgIHN0YW1wcHJlZml4MSA9IGdldF9iYl92YXIoJ1NUQU1QJywgdGVzdHJlY2lwZTEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGFtcHByZWZpeDEsICdVbmFibGUgdG8gZ2V0IFNUQU1QIHZhbHVlIGZvciByZWNpcGUgJXMnICUgdGVzdHJlY2lwZTEpCisgICAgICAgIHN0YW1wcHJlZml4MiA9IGdldF9iYl92YXIoJ1NUQU1QJywgdGVzdHJlY2lwZTIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGFtcHByZWZpeDIsICdVbmFibGUgdG8gZ2V0IFNUQU1QIHZhbHVlIGZvciByZWNpcGUgJXMnICUgdGVzdHJlY2lwZTIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCAtYScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZTEsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZTIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHRlc3RyZWNpcGUxLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHRlc3RyZWNpcGUyLCByZXN1bHQub3V0cHV0KQorICAgICAgICBtYXRjaGVzMSA9IGdsb2IuZ2xvYihzdGFtcHByZWZpeDEgKyAnKicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0Y2hlczEsICdTdGFtcCBmaWxlcyBleGlzdCBmb3IgcmVjaXBlICVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBjbGVhbmVkJyAlIHRlc3RyZWNpcGUxKQorICAgICAgICBtYXRjaGVzMiA9IGdsb2IuZ2xvYihzdGFtcHByZWZpeDIgKyAnKicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0Y2hlczIsICdTdGFtcCBmaWxlcyBleGlzdCBmb3IgcmVjaXBlICVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBjbGVhbmVkJyAlIHRlc3RyZWNpcGUyKQorCisgICAgQE9FVGVzdElEKDEyNzIpCisgICAgZGVmIHRlc3RfZGV2dG9vbF9kZXBsb3lfdGFyZ2V0KHNlbGYpOgorICAgICAgICAjIE5PVEU6IFdoaWxzdCB0aGlzIHRlc3Qgd291bGQgc2VlbWluZ2x5IGJlIGJldHRlciBwbGFjZWQgYXMgYSBydW50aW1lIHRlc3QsCisgICAgICAgICMgdW5mb3J0dW5hdGVseSB0aGUgcnVudGltZSB0ZXN0cyBydW4gdW5kZXIgYml0YmFrZSBhbmQgeW91IGNhbid0IHJ1bgorICAgICAgICAjIGRldnRvb2wgd2l0aGluIGJpdGJha2UgKHNpbmNlIGRldnRvb2wgbmVlZHMgdG8gcnVuIGJpdGJha2UgaXRzZWxmKS4KKyAgICAgICAgIyBBZGRpdGlvbmFsbHkgd2UgYXJlIHRlc3RpbmcgYnVpbGQtdGltZSBmdW5jdGlvbmFsaXR5IGFzIHdlbGwsIHNvCisgICAgICAgICMgcmVhbGx5IHRoaXMgaGFzIHRvIGJlIGRvbmUgYXMgYW4gb2Utc2VsZnRlc3QgdGVzdC4KKyAgICAgICAgIworICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgbWFjaGluZSA9IGdldF9iYl92YXIoJ01BQ0hJTkUnKQorICAgICAgICBpZiBub3QgbWFjaGluZS5zdGFydHN3aXRoKCdxZW11Jyk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdUaGlzIHRlc3Qgb25seSB3b3JrcyB3aXRoIHFlbXUgbWFjaGluZXMnKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoJy9ldGMvcnVucWVtdS1ub3N1ZG8nKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ1lvdSBtdXN0IHNldCB1cCB0YXAgZGV2aWNlcyB3aXRoIHNjcmlwdHMvcnVucWVtdS1nZW4tdGFwZGV2cyBiZWZvcmUgcnVubmluZyB0aGlzIHRlc3QnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ1BBVEg9IiRQQVRIOi9zYmluOi91c3Ivc2JpbiIgaXAgdHVudGFwIHNob3cnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIGlmIHJlc3VsdC5zdGF0dXMgIT0gMDoKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnUEFUSD0iJFBBVEg6L3NiaW46L3Vzci9zYmluIiBpZmNvbmZpZyAtYScsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgICAgIGlmIHJlc3VsdC5zdGF0dXMgIT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdGYWlsZWQgdG8gZGV0ZXJtaW5lIGlmIHRhcCBkZXZpY2VzIGV4aXN0IHdpdGggaWZjb25maWcgb3IgaXA6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIGZvciBsaW5lIGluIHJlc3VsdC5vdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCd0YXAnKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnTm8gdGFwIGRldmljZXMgZm91bmQgLSB5b3UgbXVzdCBzZXQgdXAgdGFwIGRldmljZXMgd2l0aCBzY3JpcHRzL3J1bnFlbXUtZ2VuLXRhcGRldnMgYmVmb3JlIHJ1bm5pbmcgdGhpcyB0ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLndvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBEZWZpbml0aW9ucworICAgICAgICB0ZXN0cmVjaXBlID0gJ21kYWRtJworICAgICAgICB0ZXN0ZmlsZSA9ICcvc2Jpbi9tZGFkbScKKyAgICAgICAgdGVzdGltYWdlID0gJ29lLXNlbGZ0ZXN0LWltYWdlJworICAgICAgICB0ZXN0Y29tbWFuZCA9ICcvc2Jpbi9tZGFkbSAtLWhlbHAnCisgICAgICAgICMgQnVpbGQgYW4gaW1hZ2UgdG8gcnVuCisgICAgICAgIGJpdGJha2UoIiVzIHFlbXUtbmF0aXZlIHFlbXUtaGVscGVyLW5hdGl2ZSIgJSB0ZXN0aW1hZ2UpCisgICAgICAgIGRlcGxveV9kaXJfaW1hZ2UgPSBnZXRfYmJfdmFyKCdERVBMT1lfRElSX0lNQUdFJykKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiAlcycgJSB0ZXN0aW1hZ2UpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ3JtIC1mICVzLyVzKicgJSAoZGVwbG95X2Rpcl9pbWFnZSwgdGVzdGltYWdlKSkKKyAgICAgICAgIyBDbGVhbiByZWNpcGUgc28gdGhlIGZpcnN0IGRlcGxveSB3aWxsIGZhaWwKKyAgICAgICAgYml0YmFrZSgiJXMgLWMgY2xlYW4iICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBUcnkgZGV2dG9vbCBtb2RpZnkKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4gJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGRpcikpCisgICAgICAgICMgVGVzdCB0aGF0IGRlcGxveS10YXJnZXQgYXQgdGhpcyBwb2ludCBmYWlscyAocHJvcGVybHkpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBkZXBsb3ktdGFyZ2V0IC1uICVzIHJvb3RAbG9jYWxob3N0JyAlIHRlc3RyZWNpcGUsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQub3V0cHV0LCAwLCAnZGV2dG9vbCBkZXBsb3ktdGFyZ2V0IHNob3VsZCBoYXZlIGZhaWxlZCwgb3V0cHV0OiAlcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHJlc3VsdC5vdXRwdXQsICdUcmFjZWJhY2snLCAnZGV2dG9vbCBkZXBsb3ktdGFyZ2V0IHNob3VsZCBoYXZlIGZhaWxlZCB3aXRoIGEgcHJvcGVyIGVycm9yIG5vdCBhIHRyYWNlYmFjaywgb3V0cHV0OiAlcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYnVpbGQgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBGaXJzdCB0cnkgYSBkcnktcnVuIG9mIGRlcGxveS10YXJnZXQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGRlcGxveS10YXJnZXQgLW4gJXMgcm9vdEBsb2NhbGhvc3QnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignICAlcycgJSB0ZXN0ZmlsZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBCb290IHRoZSBpbWFnZQorICAgICAgICB3aXRoIHJ1bnFlbXUodGVzdGltYWdlKSBhcyBxZW11OgorICAgICAgICAgICAgIyBOb3cgcmVhbGx5IHRlc3QgZGVwbG95LXRhcmdldAorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGRlcGxveS10YXJnZXQgLWMgJXMgcm9vdEAlcycgJSAodGVzdHJlY2lwZSwgcWVtdS5pcCkpCisgICAgICAgICAgICAjIFJ1biBhIHRlc3QgY29tbWFuZCB0byBzZWUgaWYgaXQgd2FzIGluc3RhbGxlZCBwcm9wZXJseQorICAgICAgICAgICAgc3NoYXJncyA9ICctbyBVc2VyS25vd25Ib3N0c0ZpbGU9L2Rldi9udWxsIC1vIFN0cmljdEhvc3RLZXlDaGVja2luZz1ubycKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnc3NoICVzIHJvb3RAJXMgJXMnICUgKHNzaGFyZ3MsIHFlbXUuaXAsIHRlc3Rjb21tYW5kKSkKKyAgICAgICAgICAgICMgQ2hlY2sgaWYgaXQgZGVwbG95ZWQgYWxsIG9mIHRoZSBmaWxlcyB3aXRoIHRoZSByaWdodCBvd25lcnNoaXAvcGVybXMKKyAgICAgICAgICAgICMgRmlyc3QgbG9vayBvbiB0aGUgaG9zdCAtIG5lZWQgdG8gZG8gdGhpcyB1bmRlciBwc2V1ZG8gdG8gZ2V0IHRoZSBjb3JyZWN0IG93bmVyc2hpcC9wZXJtcworICAgICAgICAgICAgYmJfdmFycyA9IGdldF9iYl92YXJzKFsnRCcsICdGQUtFUk9PVEVOVicsICdGQUtFUk9PVENNRCddLCB0ZXN0cmVjaXBlKQorICAgICAgICAgICAgaW5zdGFsbGRpciA9IGJiX3ZhcnNbJ0QnXQorICAgICAgICAgICAgZmFrZXJvb3RlbnYgPSBiYl92YXJzWydGQUtFUk9PVEVOViddCisgICAgICAgICAgICBmYWtlcm9vdGNtZCA9IGJiX3ZhcnNbJ0ZBS0VST09UQ01EJ10KKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnJXMgJXMgZmluZCAuIC10eXBlIGYgLWV4ZWMgbHMgLWwge30gXDsnICUgKGZha2Vyb290ZW52LCBmYWtlcm9vdGNtZCksIGN3ZD1pbnN0YWxsZGlyKQorICAgICAgICAgICAgZmlsZWxpc3QxID0gc2VsZi5fcHJvY2Vzc19sc19vdXRwdXQocmVzdWx0Lm91dHB1dCkKKworICAgICAgICAgICAgIyBOb3cgbG9vayBvbiB0aGUgdGFyZ2V0CisgICAgICAgICAgICB0ZW1wZGlyMiA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyMikKKyAgICAgICAgICAgIHRtcGZpbGVsaXN0ID0gb3MucGF0aC5qb2luKHRlbXBkaXIyLCAnZmlsZXMudHh0JykKKyAgICAgICAgICAgIHdpdGggb3Blbih0bXBmaWxlbGlzdCwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGZpbGVsaXN0MToKKyAgICAgICAgICAgICAgICAgICAgc3BsaXRsaW5lID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoc3BsaXRsaW5lWy0xXSArICdcbicpCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2NhdCAlcyB8IHNzaCAtcSAlcyByb290QCVzIFwneGFyZ3MgbHMgLWxcJycgJSAodG1wZmlsZWxpc3QsIHNzaGFyZ3MsIHFlbXUuaXApKQorICAgICAgICAgICAgZmlsZWxpc3QyID0gc2VsZi5fcHJvY2Vzc19sc19vdXRwdXQocmVzdWx0Lm91dHB1dCkKKyAgICAgICAgICAgIGZpbGVsaXN0MS5zb3J0KGtleT1sYW1iZGEgaXRlbTogaXRlbS5zcGxpdCgpWy0xXSkKKyAgICAgICAgICAgIGZpbGVsaXN0Mi5zb3J0KGtleT1sYW1iZGEgaXRlbTogaXRlbS5zcGxpdCgpWy0xXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZWxpc3QxLCBmaWxlbGlzdDIpCisgICAgICAgICAgICAjIFRlc3QgdW5kZXBsb3ktdGFyZ2V0CisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdW5kZXBsb3ktdGFyZ2V0IC1jICVzIHJvb3RAJXMnICUgKHRlc3RyZWNpcGUsIHFlbXUuaXApKQorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdzc2ggJXMgcm9vdEAlcyAlcycgJSAoc3NoYXJncywgcWVtdS5pcCwgdGVzdGNvbW1hbmQpLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdCwgMCwgJ3VuZGVwbG95LXRhcmdldCBkaWQgbm90IHJlbW92ZSBjb21tYW5kIGFzIGl0IHNob3VsZCBoYXZlJykKKworICAgIEBPRVRlc3RJRCgxMzY2KQorICAgIGRlZiB0ZXN0X2RldnRvb2xfYnVpbGRfaW1hZ2Uoc2VsZik6CisgICAgICAgICIiIlRlc3QgZGV2dG9vbCBidWlsZC1pbWFnZSBwbHVnaW4iIiIKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMoc2VsZi53b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgIGltYWdlID0gJ2NvcmUtaW1hZ2UtbWluaW1hbCcKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLndvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiAlcycgJSBpbWFnZSkKKyAgICAgICAgYml0YmFrZSgnJXMgLWMgY2xlYW4nICUgaW1hZ2UpCisgICAgICAgICMgQWRkIHRhcmdldCBhbmQgbmF0aXZlIHJlY2lwZXMgdG8gd29ya3NwYWNlCisgICAgICAgIHJlY2lwZXMgPSBbJ21kYWRtJywgJ3BhcnRlZC1uYXRpdmUnXQorICAgICAgICBmb3IgcmVjaXBlIGluIHJlY2lwZXM6CisgICAgICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuICVzJyAlIHJlY2lwZSkKKyAgICAgICAgICAgIHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgLXggJXMnICUgKHJlY2lwZSwgdGVtcGRpcikpCisgICAgICAgICMgVHJ5IHRvIGJ1aWxkIGltYWdlCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBidWlsZC1pbWFnZSAlcycgJSBpbWFnZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQsIDAsICdkZXZ0b29sIGJ1aWxkLWltYWdlIGZhaWxlZCcpCisgICAgICAgICMgQ2hlY2sgaWYgaW1hZ2UgY29udGFpbnMgZXhwZWN0ZWQgcGFja2FnZXMKKyAgICAgICAgZGVwbG95X2Rpcl9pbWFnZSA9IGdldF9iYl92YXIoJ0RFUExPWV9ESVJfSU1BR0UnKQorICAgICAgICBpbWFnZV9saW5rX25hbWUgPSBnZXRfYmJfdmFyKCdJTUFHRV9MSU5LX05BTUUnLCBpbWFnZSkKKyAgICAgICAgcmVxcGtncyA9IFtpdGVtIGZvciBpdGVtIGluIHJlY2lwZXMgaWYgbm90IGl0ZW0uZW5kc3dpdGgoJy1uYXRpdmUnKV0KKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihkZXBsb3lfZGlyX2ltYWdlLCBpbWFnZV9saW5rX25hbWUgKyAnLm1hbmlmZXN0JyksICdyJykgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgc3BsaXR2YWwgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBpZiBzcGxpdHZhbDoKKyAgICAgICAgICAgICAgICAgICAgcGtnID0gc3BsaXR2YWxbMF0KKyAgICAgICAgICAgICAgICAgICAgaWYgcGtnIGluIHJlcXBrZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICByZXFwa2dzLnJlbW92ZShwa2cpCisgICAgICAgIGlmIHJlcXBrZ3M6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ1RoZSBmb2xsb3dpbmcgcGFja2FnZXMgd2VyZSBub3QgcHJlc2VudCBpbiB0aGUgaW1hZ2UgYXMgZXhwZWN0ZWQ6ICVzJyAlICcsICcuam9pbihyZXFwa2dzKSkKKworICAgIEBPRVRlc3RJRCgxMzY3KQorICAgIGRlZiB0ZXN0X2RldnRvb2xfdXBncmFkZShzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMoc2VsZi53b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgICMgQ2hlY2sgcGFyYW1ldGVycworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBncmFkZSAtaCcpCisgICAgICAgIGZvciBwYXJhbSBpbiAncmVjaXBlbmFtZSBzcmN0cmVlIC0tdmVyc2lvbiAtViAtLWJyYW5jaCAtYiAtLWtlZXAtdGVtcCAtLW5vLXBhdGNoJy5zcGxpdCgpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihwYXJhbSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBGb3IgdGhlIG1vbWVudCwgd2UgYXJlIHVzaW5nIGEgcmVhbCByZWNpcGUuCisgICAgICAgIHJlY2lwZSA9ICdkZXZ0b29sLXVwZ3JhZGUtdGVzdDEnCisgICAgICAgIHZlcnNpb24gPSAnMS42LjAnCisgICAgICAgIG9sZHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgcmVjaXBlKQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgIyBDaGVjayB0aGF0IHJlY2lwZSBpcyBub3QgYWxyZWFkeSB1bmRlciBkZXZ0b29sIGNvbnRyb2wKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIHVwZ3JhZGUuIENvZGUgZG9lcyBub3QgY2hlY2sgaWYgbmV3IFBWIGlzIG9sZGVyIG9yIG5ld2VyIHRoYXQgY3VycmVudCBQViwgc28sIGl0IG1heSBiZSB0aGF0CisgICAgICAgICMgd2UgYXJlIGRvd25ncmFkaW5nIGluc3RlYWQgb2YgdXBncmFkaW5nLgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBncmFkZSAlcyAlcyAtViAlcycgJSAocmVjaXBlLCB0ZW1wZGlyLCB2ZXJzaW9uKSkKKyAgICAgICAgIyBDaGVjayBpZiBzcmN0cmVlIGF0IGxlYXN0IGlzIHBvcHVsYXRlZAorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKG9zLmxpc3RkaXIodGVtcGRpcikpID4gMCwgJ3NyY3RyZWUgKCVzKSBzaG91bGQgYmUgcG9wdWxhdGVkIHdpdGggbmV3ICglcykgc291cmNlIGNvZGUnICUgKHRlbXBkaXIsIHZlcnNpb24pKQorICAgICAgICAjIENoZWNrIG5ldyByZWNpcGUgc3ViZGlyZWN0b3J5IGlzIHByZXNlbnQKKyAgICAgICAgc2VsZi5hc3NlcnRFeGlzdHMob3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAncmVjaXBlcycsIHJlY2lwZSwgJyVzLSVzJyAlIChyZWNpcGUsIHZlcnNpb24pKSwgJ1JlY2lwZSBmb2xkZXIgc2hvdWxkIGV4aXN0JykKKyAgICAgICAgIyBDaGVjayBuZXcgcmVjaXBlIGZpbGUgaXMgcHJlc2VudAorICAgICAgICBuZXdyZWNpcGVmaWxlID0gb3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAncmVjaXBlcycsIHJlY2lwZSwgJyVzXyVzLmJiJyAlIChyZWNpcGUsIHZlcnNpb24pKQorICAgICAgICBzZWxmLmFzc2VydEV4aXN0cyhuZXdyZWNpcGVmaWxlLCAnUmVjaXBlIGZpbGUgc2hvdWxkIGV4aXN0IGFmdGVyIHVwZ3JhZGUnKQorICAgICAgICAjIENoZWNrIGRldnRvb2wgc3RhdHVzIGFuZCBtYWtlIHN1cmUgcmVjaXBlIGlzIHByZXNlbnQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHRlbXBkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2hlY2sgcmVjaXBlIGdvdCBjaGFuZ2VkIGFzIGV4cGVjdGVkCisgICAgICAgIHdpdGggb3BlbihvbGRyZWNpcGVmaWxlICsgJy51cGdyYWRlZCcsICdyJykgYXMgZjoKKyAgICAgICAgICAgIGRlc2lyZWRsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgd2l0aCBvcGVuKG5ld3JlY2lwZWZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIG5ld2xpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlc2lyZWRsaW5lcywgbmV3bGluZXMpCisgICAgICAgICMgQ2hlY2sgZGV2dG9vbCByZXNldCByZWNpcGUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHJlc2V0ICVzIC1uJyAlIHJlY2lwZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdyZWNpcGVzJywgcmVjaXBlKSwgJ1JlY2lwZSBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBleGlzdCBhZnRlciByZXNldHRpbmcnKQorCisgICAgQE9FVGVzdElEKDE0MzMpCisgICAgZGVmIHRlc3RfZGV2dG9vbF91cGdyYWRlX2dpdChzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMoc2VsZi53b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHJlY2lwZSA9ICdkZXZ0b29sLXVwZ3JhZGUtdGVzdDInCisgICAgICAgIGNvbW1pdCA9ICc2Y2M2MDc3YTM2ZmUyNjQ4YTVmOTkzZmU3YzE2Yzk2MzJmOTQ2NTE3JworICAgICAgICBvbGRyZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHJlY2lwZSkKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgICMgQ2hlY2sgdGhhdCByZWNpcGUgaXMgbm90IGFscmVhZHkgdW5kZXIgZGV2dG9vbCBjb250cm9sCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDaGVjayB1cGdyYWRlCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGdyYWRlICVzICVzIC1TICVzJyAlIChyZWNpcGUsIHRlbXBkaXIsIGNvbW1pdCkpCisgICAgICAgICMgQ2hlY2sgaWYgc3JjdHJlZSBhdCBsZWFzdCBpcyBwb3B1bGF0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihvcy5saXN0ZGlyKHRlbXBkaXIpKSA+IDAsICdzcmN0cmVlICglcykgc2hvdWxkIGJlIHBvcHVsYXRlZCB3aXRoIG5ldyAoJXMpIHNvdXJjZSBjb2RlJyAlICh0ZW1wZGlyLCBjb21taXQpKQorICAgICAgICAjIENoZWNrIG5ldyByZWNpcGUgZmlsZSBpcyBwcmVzZW50CisgICAgICAgIG5ld3JlY2lwZWZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdyZWNpcGVzJywgcmVjaXBlLCBvcy5wYXRoLmJhc2VuYW1lKG9sZHJlY2lwZWZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydEV4aXN0cyhuZXdyZWNpcGVmaWxlLCAnUmVjaXBlIGZpbGUgc2hvdWxkIGV4aXN0IGFmdGVyIHVwZ3JhZGUnKQorICAgICAgICAjIENoZWNrIGRldnRvb2wgc3RhdHVzIGFuZCBtYWtlIHN1cmUgcmVjaXBlIGlzIHByZXNlbnQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHRlbXBkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2hlY2sgcmVjaXBlIGdvdCBjaGFuZ2VkIGFzIGV4cGVjdGVkCisgICAgICAgIHdpdGggb3BlbihvbGRyZWNpcGVmaWxlICsgJy51cGdyYWRlZCcsICdyJykgYXMgZjoKKyAgICAgICAgICAgIGRlc2lyZWRsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgd2l0aCBvcGVuKG5ld3JlY2lwZWZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIG5ld2xpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlc2lyZWRsaW5lcywgbmV3bGluZXMpCisgICAgICAgICMgQ2hlY2sgZGV2dG9vbCByZXNldCByZWNpcGUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHJlc2V0ICVzIC1uJyAlIHJlY2lwZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdyZWNpcGVzJywgcmVjaXBlKSwgJ1JlY2lwZSBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBleGlzdCBhZnRlciByZXNldHRpbmcnKQorCisgICAgQE9FVGVzdElEKDEzNTIpCisgICAgZGVmIHRlc3RfZGV2dG9vbF9sYXllcl9wbHVnaW5zKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHRoYXQgZGV2dG9vbCBjYW4gdXNlIHBsdWdpbnMgZnJvbSBvdGhlciBsYXllcnMuCisKKyAgICAgICAgVGhpcyB0ZXN0IGV4ZWN1dGVzIHRoZSBzZWxmdGVzdC1yZXZlcnNlIGNvbW1hbmQgZnJvbSBtZXRhLXNlbGZ0ZXN0LiIiIgorCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisKKyAgICAgICAgcyA9ICJNaWNyb3NvZnQgTWFkZSBObyBQcm9maXQgRnJvbSBBbnlvbmUncyBadW5lcyBZbyIKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJkZXZ0b29sIC0tcXVpZXQgc2VsZnRlc3QtcmV2ZXJzZSBcIiVzXCIiICUgcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCBzWzo6LTFdKQorCisgICAgZGVmIF9jb3B5X2ZpbGVfd2l0aF9jbGVhbnVwKHNlbGYsIHNyY2ZpbGUsIGJhc2Vkc3RkaXIsICpwYXRocyk6CisgICAgICAgIGRzdGRpciA9IGJhc2Vkc3RkaXIKKyAgICAgICAgc2VsZi5hc3NlcnRFeGlzdHMoZHN0ZGlyKQorICAgICAgICBmb3IgcCBpbiBwYXRoczoKKyAgICAgICAgICAgIGRzdGRpciA9IG9zLnBhdGguam9pbihkc3RkaXIsIHApCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZHN0ZGlyKToKKyAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhkc3RkaXIpCisgICAgICAgICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChkc3RkaXIpCisgICAgICAgIGRzdGZpbGUgPSBvcy5wYXRoLmpvaW4oZHN0ZGlyLCBvcy5wYXRoLmJhc2VuYW1lKHNyY2ZpbGUpKQorICAgICAgICBpZiBzcmNmaWxlICE9IGRzdGZpbGU6CisgICAgICAgICAgICBzaHV0aWwuY29weShzcmNmaWxlLCBkc3RmaWxlKQorICAgICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChkc3RmaWxlKQorCisgICAgQE9FVGVzdElEKDE2MjUpCisgICAgZGVmIHRlc3RfZGV2dG9vbF9sb2FkX3BsdWdpbihzZWxmKToKKyAgICAgICAgIiIiVGVzdCB0aGF0IGRldnRvb2wgbG9hZHMgb25seSB0aGUgZmlyc3QgZm91bmQgcGx1Z2luIGluIEJCUEFUSC4iIiIKKworICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorCisgICAgICAgIGRldnRvb2wgPSBydW5DbWQoIndoaWNoIGRldnRvb2wiKQorICAgICAgICBmcm9tbmFtZSA9IHJ1bkNtZCgiZGV2dG9vbCAtLXF1aWV0IHBsdWdpbmZpbGUiKQorICAgICAgICBzcmNmaWxlID0gZnJvbW5hbWUub3V0cHV0CisgICAgICAgIGJicGF0aCA9IGdldF9iYl92YXIoJ0JCUEFUSCcpCisgICAgICAgIHNlYXJjaHBhdGggPSBiYnBhdGguc3BsaXQoJzonKSArIFtvcy5wYXRoLmRpcm5hbWUoZGV2dG9vbC5vdXRwdXQpXQorICAgICAgICBwbHVnaW5jb250ZW50ID0gW10KKyAgICAgICAgd2l0aCBvcGVuKHNyY2ZpbGUpIGFzIGZoOgorICAgICAgICAgICAgcGx1Z2luY29udGVudCA9IGZoLnJlYWRsaW5lcygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ21ldGEtc2VsZnRlc3QnLCBzcmNmaWxlLCAnd3JvbmcgYmJwYXRoIHBsdWdpbiBmb3VuZCcpCisgICAgICAgICAgICBmb3IgcGF0aCBpbiBzZWFyY2hwYXRoOgorICAgICAgICAgICAgICAgIHNlbGYuX2NvcHlfZmlsZV93aXRoX2NsZWFudXAoc3JjZmlsZSwgcGF0aCwgJ2xpYicsICdkZXZ0b29sJykKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgiZGV2dG9vbCAtLXF1aWV0IGNvdW50IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJzEnKQorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJkZXZ0b29sIC0tcXVpZXQgbXVsdGlsb2FkZWQiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAibm8iKQorICAgICAgICAgICAgZm9yIHBhdGggaW4gc2VhcmNocGF0aDoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoImRldnRvb2wgLS1xdWlldCBiYmRpciIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCBwYXRoKQorICAgICAgICAgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4ocmVzdWx0Lm91dHB1dCwgJ2xpYicsICdkZXZ0b29sJywgJ2JicGF0aC5weScpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgd2l0aCBvcGVuKHNyY2ZpbGUsICd3JykgYXMgZmg6CisgICAgICAgICAgICAgICAgZmgud3JpdGVsaW5lcyhwbHVnaW5jb250ZW50KQorCisgICAgZGVmIF9zZXR1cF90ZXN0X2RldnRvb2xfZmluaXNoX3VwZ3JhZGUoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHNlbGYud29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICAjIFVzZSBhICJyZWFsIiByZWNpcGUgZnJvbSBtZXRhLXNlbGZ0ZXN0CisgICAgICAgIHJlY2lwZSA9ICdkZXZ0b29sLXVwZ3JhZGUtdGVzdDEnCisgICAgICAgIG9sZHZlcnNpb24gPSAnMS41LjMnCisgICAgICAgIG5ld3ZlcnNpb24gPSAnMS42LjAnCisgICAgICAgIG9sZHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgcmVjaXBlKQorICAgICAgICByZWNpcGVkaXIgPSBvcy5wYXRoLmRpcm5hbWUob2xkcmVjaXBlZmlsZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC4nLCBjd2Q9cmVjaXBlZGlyKQorICAgICAgICBpZiByZXN1bHQub3V0cHV0LnN0cmlwKCk6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ1JlY2lwZSBkaXJlY3RvcnkgZm9yICVzIGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMnICUgcmVjaXBlKQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgIyBDaGVjayB0aGF0IHJlY2lwZSBpcyBub3QgYWxyZWFkeSB1bmRlciBkZXZ0b29sIGNvbnRyb2wKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIERvIHRoZSB1cGdyYWRlCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGdyYWRlICVzICVzIC1WICVzJyAlIChyZWNpcGUsIHRlbXBkaXIsIG5ld3ZlcnNpb24pKQorICAgICAgICAjIENoZWNrIGRldnRvb2wgc3RhdHVzIGFuZCBtYWtlIHN1cmUgcmVjaXBlIGlzIHByZXNlbnQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHRlbXBkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgTWFrZSBhIGNoYW5nZSB0byB0aGUgc291cmNlCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnc2VkIC1pIFwnL14jaW5jbHVkZSAicHYuaCIvYSBcXC8qIEhlcmUgaXMgYSBuZXcgY29tbWVudCAqXFwvXCcgc3JjL3B2L251bWJlci5jJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbicsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydEluKCdNIHNyYy9wdi9udW1iZXIuYycsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCBzcmMvcHYvbnVtYmVyLmMgLW0gIkFkZCBhIGNvbW1lbnQgdG8gdGhlIGNvZGUiJywgY3dkPXRlbXBkaXIpCisgICAgICAgICMgQ2hlY2sgaWYgcGF0Y2ggaXMgdGhlcmUKKyAgICAgICAgcmVjaXBlZGlyID0gb3MucGF0aC5kaXJuYW1lKG9sZHJlY2lwZWZpbGUpCisgICAgICAgIG9sZGRpciA9IG9zLnBhdGguam9pbihyZWNpcGVkaXIsIHJlY2lwZSArICctJyArIG9sZHZlcnNpb24pCisgICAgICAgIHBhdGNoZm4gPSAnMDAwMS1BZGQtYS1ub3RlLWxpbmUtdG8tdGhlLXF1aWNrLXJlZmVyZW5jZS5wYXRjaCcKKyAgICAgICAgc2VsZi5hc3NlcnRFeGlzdHMob3MucGF0aC5qb2luKG9sZGRpciwgcGF0Y2hmbiksICdPcmlnaW5hbCBwYXRjaCBmaWxlIGRvZXMgbm90IGV4aXN0JykKKyAgICAgICAgcmV0dXJuIHJlY2lwZSwgb2xkcmVjaXBlZmlsZSwgcmVjaXBlZGlyLCBvbGRkaXIsIG5ld3ZlcnNpb24sIHBhdGNoZm4KKworICAgIEBPRVRlc3RJRCgxNjIzKQorICAgIGRlZiB0ZXN0X2RldnRvb2xfZmluaXNoX3VwZ3JhZGVfb3JpZ2xheWVyKHNlbGYpOgorICAgICAgICByZWNpcGUsIG9sZHJlY2lwZWZpbGUsIHJlY2lwZWRpciwgb2xkZGlyLCBuZXd2ZXJzaW9uLCBwYXRjaGZuID0gc2VsZi5fc2V0dXBfdGVzdF9kZXZ0b29sX2ZpbmlzaF91cGdyYWRlKCkKKyAgICAgICAgIyBFbnN1cmUgdGhlIHJlY2lwZSBpcyB3aGVyZSB3ZSB0aGluayBpdCBzaG91bGQgYmUgKHNvIHRoYXQgY2xlYW51cCBkb2Vzbid0IHRyYXNoIHRoaW5ncykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignL21ldGEtc2VsZnRlc3QvJywgcmVjaXBlZGlyKQorICAgICAgICAjIFRyeSBmaW5pc2ggdG8gdGhlIG9yaWdpbmFsIGxheWVyCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ3JtIC1yZiAlcyA7IGNkICVzIDsgZ2l0IGNoZWNrb3V0ICVzJyAlIChyZWNpcGVkaXIsIG9zLnBhdGguZGlybmFtZShyZWNpcGVkaXIpLCByZWNpcGVkaXIpKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgZmluaXNoICVzIG1ldGEtc2VsZnRlc3QnICUgcmVjaXBlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihyZWNpcGUsIHJlc3VsdC5vdXRwdXQsICdSZWNpcGUgc2hvdWxkIGhhdmUgYmVlbiByZXNldCBieSBmaW5pc2ggYnV0IHdhc25cJ3QnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdyZWNpcGVzJywgcmVjaXBlKSwgJ1JlY2lwZSBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBleGlzdCBhZnRlciBmaW5pc2gnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEV4aXN0cyhvbGRyZWNpcGVmaWxlLCAnT2xkIHJlY2lwZSBmaWxlIHNob3VsZCBoYXZlIGJlZW4gZGVsZXRlZCBidXQgd2FzblwndCcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXhpc3RzKG9zLnBhdGguam9pbihvbGRkaXIsIHBhdGNoZm4pLCAnT2xkIHBhdGNoIGZpbGUgc2hvdWxkIGhhdmUgYmVlbiBkZWxldGVkIGJ1dCB3YXNuXCd0JykKKyAgICAgICAgbmV3cmVjaXBlZmlsZSA9IG9zLnBhdGguam9pbihyZWNpcGVkaXIsICclc18lcy5iYicgJSAocmVjaXBlLCBuZXd2ZXJzaW9uKSkKKyAgICAgICAgbmV3ZGlyID0gb3MucGF0aC5qb2luKHJlY2lwZWRpciwgcmVjaXBlICsgJy0nICsgbmV3dmVyc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFeGlzdHMobmV3cmVjaXBlZmlsZSwgJ05ldyByZWNpcGUgZmlsZSBzaG91bGQgaGF2ZSBiZWVuIGNvcGllZCBpbnRvIGV4aXN0aW5nIGxheWVyIGJ1dCB3YXNuXCd0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFeGlzdHMob3MucGF0aC5qb2luKG5ld2RpciwgcGF0Y2hmbiksICdQYXRjaCBmaWxlIHNob3VsZCBoYXZlIGJlZW4gY29waWVkIGludG8gbmV3IGRpcmVjdG9yeSBidXQgd2FzblwndCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhpc3RzKG9zLnBhdGguam9pbihuZXdkaXIsICcwMDAyLUFkZC1hLWNvbW1lbnQtdG8tdGhlLWNvZGUucGF0Y2gnKSwgJ05ldyBwYXRjaCBmaWxlIHNob3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBidXQgd2FzblwndCcpCisKKyAgICBAT0VUZXN0SUQoMTYyNCkKKyAgICBkZWYgdGVzdF9kZXZ0b29sX2ZpbmlzaF91cGdyYWRlX290aGVybGF5ZXIoc2VsZik6CisgICAgICAgIHJlY2lwZSwgb2xkcmVjaXBlZmlsZSwgcmVjaXBlZGlyLCBvbGRkaXIsIG5ld3ZlcnNpb24sIHBhdGNoZm4gPSBzZWxmLl9zZXR1cF90ZXN0X2RldnRvb2xfZmluaXNoX3VwZ3JhZGUoKQorICAgICAgICAjIEVuc3VyZSB0aGUgcmVjaXBlIGlzIHdoZXJlIHdlIHRoaW5rIGl0IHNob3VsZCBiZSAoc28gdGhhdCBjbGVhbnVwIGRvZXNuJ3QgdHJhc2ggdGhpbmdzKQorICAgICAgICBzZWxmLmFzc2VydEluKCcvbWV0YS1zZWxmdGVzdC8nLCByZWNpcGVkaXIpCisgICAgICAgICMgVHJ5IGZpbmlzaCB0byBhIGRpZmZlcmVudCBsYXllciAtIHNob3VsZCBjcmVhdGUgYSBiYmFwcGVuZAorICAgICAgICAjIFRoaXMgY2xlYW51cCBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0IGRvIGl0IGFueXdheSBqdXN0IGluIGNhc2UgaXQgZ29lcyB3cm9uZyBhbmQgd3JpdGVzIHRvIGhlcmUKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bigncm0gLXJmICVzIDsgY2QgJXMgOyBnaXQgY2hlY2tvdXQgJXMnICUgKHJlY2lwZWRpciwgb3MucGF0aC5kaXJuYW1lKHJlY2lwZWRpciksIHJlY2lwZWRpcikpCisgICAgICAgIG9lX2NvcmVfZGlyID0gb3MucGF0aC5qb2luKGdldF9iYl92YXIoJ0NPUkVCQVNFJyksICdtZXRhJykKKyAgICAgICAgbmV3cmVjaXBlZGlyID0gb3MucGF0aC5qb2luKG9lX2NvcmVfZGlyLCAncmVjaXBlcy10ZXN0JywgJ2RldnRvb2wnKQorICAgICAgICBuZXdyZWNpcGVmaWxlID0gb3MucGF0aC5qb2luKG5ld3JlY2lwZWRpciwgJyVzXyVzLmJiJyAlIChyZWNpcGUsIG5ld3ZlcnNpb24pKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKG5ld3JlY2lwZWRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGZpbmlzaCAlcyBvZS1jb3JlJyAlIHJlY2lwZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocmVjaXBlLCByZXN1bHQub3V0cHV0LCAnUmVjaXBlIHNob3VsZCBoYXZlIGJlZW4gcmVzZXQgYnkgZmluaXNoIGJ1dCB3YXNuXCd0JykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFeGlzdHMob3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAncmVjaXBlcycsIHJlY2lwZSksICdSZWNpcGUgZGlyZWN0b3J5IHNob3VsZCBub3QgZXhpc3QgYWZ0ZXIgZmluaXNoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFeGlzdHMob2xkcmVjaXBlZmlsZSwgJ09sZCByZWNpcGUgZmlsZSBzaG91bGQgbm90IGhhdmUgYmVlbiBkZWxldGVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFeGlzdHMob3MucGF0aC5qb2luKG9sZGRpciwgcGF0Y2hmbiksICdPbGQgcGF0Y2ggZmlsZSBzaG91bGQgbm90IGhhdmUgYmVlbiBkZWxldGVkJykKKyAgICAgICAgbmV3ZGlyID0gb3MucGF0aC5qb2luKG5ld3JlY2lwZWRpciwgcmVjaXBlICsgJy0nICsgbmV3dmVyc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFeGlzdHMobmV3cmVjaXBlZmlsZSwgJ05ldyByZWNpcGUgZmlsZSBzaG91bGQgaGF2ZSBiZWVuIGNvcGllZCBpbnRvIGV4aXN0aW5nIGxheWVyIGJ1dCB3YXNuXCd0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFeGlzdHMob3MucGF0aC5qb2luKG5ld2RpciwgcGF0Y2hmbiksICdQYXRjaCBmaWxlIHNob3VsZCBoYXZlIGJlZW4gY29waWVkIGludG8gbmV3IGRpcmVjdG9yeSBidXQgd2FzblwndCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhpc3RzKG9zLnBhdGguam9pbihuZXdkaXIsICcwMDAyLUFkZC1hLWNvbW1lbnQtdG8tdGhlLWNvZGUucGF0Y2gnKSwgJ05ldyBwYXRjaCBmaWxlIHNob3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBidXQgd2FzblwndCcpCisKKyAgICBkZWYgX3NldHVwX3Rlc3RfZGV2dG9vbF9maW5pc2hfbW9kaWZ5KHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLndvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUcnkgbW9kaWZ5aW5nIGEgcmVjaXBlCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCisgICAgICAgIHJlY2lwZSA9ICdtZGFkbScKKyAgICAgICAgb2xkcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCByZWNpcGUpCisgICAgICAgIHJlY2lwZWRpciA9IG9zLnBhdGguZGlybmFtZShvbGRyZWNpcGVmaWxlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLicsIGN3ZD1yZWNpcGVkaXIpCisgICAgICAgIGlmIHJlc3VsdC5vdXRwdXQuc3RyaXAoKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnUmVjaXBlIGRpcmVjdG9yeSBmb3IgJXMgY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcycgJSByZWNpcGUpCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzICVzJyAlIChyZWNpcGUsIHRlbXBkaXIpKQorICAgICAgICBzZWxmLmFzc2VydEV4aXN0cyhvcy5wYXRoLmpvaW4odGVtcGRpciwgJ01ha2VmaWxlJyksICdFeHRyYWN0ZWQgc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCcpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVtcGRpciwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBNYWtlIGEgY2hhbmdlIHRvIHRoZSBzb3VyY2UKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdzZWQgLWkgXCcvXiNpbmNsdWRlICJtZGFkbS5oIi9hIFxcLyogSGVyZSBpcyBhIG5ldyBjb21tZW50ICpcXC9cJyBtYXBzLmMnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ00gbWFwcy5jJywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgY29tbWl0IG1hcHMuYyAtbSAiQWRkIGEgY29tbWVudCB0byB0aGUgY29kZSInLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgZm9yIGVudHJ5IGluIG9zLmxpc3RkaXIocmVjaXBlZGlyKToKKyAgICAgICAgICAgIGZpbGVzZGlyID0gb3MucGF0aC5qb2luKHJlY2lwZWRpciwgZW50cnkpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZpbGVzZGlyKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmFibGUgdG8gZmluZCByZWNpcGUgZmlsZXMgZGlyZWN0b3J5IGZvciAlcycgJSByZWNpcGUpCisgICAgICAgIHJldHVybiByZWNpcGUsIG9sZHJlY2lwZWZpbGUsIHJlY2lwZWRpciwgZmlsZXNkaXIKKworICAgIEBPRVRlc3RJRCgxNjIxKQorICAgIGRlZiB0ZXN0X2RldnRvb2xfZmluaXNoX21vZGlmeV9vcmlnbGF5ZXIoc2VsZik6CisgICAgICAgIHJlY2lwZSwgb2xkcmVjaXBlZmlsZSwgcmVjaXBlZGlyLCBmaWxlc2RpciA9IHNlbGYuX3NldHVwX3Rlc3RfZGV2dG9vbF9maW5pc2hfbW9kaWZ5KCkKKyAgICAgICAgIyBFbnN1cmUgdGhlIHJlY2lwZSBpcyB3aGVyZSB3ZSB0aGluayBpdCBzaG91bGQgYmUgKHNvIHRoYXQgY2xlYW51cCBkb2Vzbid0IHRyYXNoIHRoaW5ncykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignL21ldGEvJywgcmVjaXBlZGlyKQorICAgICAgICAjIFRyeSBmaW5pc2ggdG8gdGhlIG9yaWdpbmFsIGxheWVyCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ3JtIC1yZiAlcyA7IGNkICVzIDsgZ2l0IGNoZWNrb3V0ICVzJyAlIChyZWNpcGVkaXIsIG9zLnBhdGguZGlybmFtZShyZWNpcGVkaXIpLCByZWNpcGVkaXIpKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgZmluaXNoICVzIG1ldGEnICUgcmVjaXBlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihyZWNpcGUsIHJlc3VsdC5vdXRwdXQsICdSZWNpcGUgc2hvdWxkIGhhdmUgYmVlbiByZXNldCBieSBmaW5pc2ggYnV0IHdhc25cJ3QnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdyZWNpcGVzJywgcmVjaXBlKSwgJ1JlY2lwZSBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBleGlzdCBhZnRlciBmaW5pc2gnKQorICAgICAgICBleHBlY3RlZF9zdGF0dXMgPSBbKCcgTScsICcuKi8lcyQnICUgb3MucGF0aC5iYXNlbmFtZShvbGRyZWNpcGVmaWxlKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJz8/JywgJy4qLy4qLUFkZC1hLWNvbW1lbnQtdG8tdGhlLWNvZGUucGF0Y2gkJyldCisgICAgICAgIHNlbGYuX2NoZWNrX3JlcG9fc3RhdHVzKHJlY2lwZWRpciwgZXhwZWN0ZWRfc3RhdHVzKQorCisgICAgQE9FVGVzdElEKDE2MjIpCisgICAgZGVmIHRlc3RfZGV2dG9vbF9maW5pc2hfbW9kaWZ5X290aGVybGF5ZXIoc2VsZik6CisgICAgICAgIHJlY2lwZSwgb2xkcmVjaXBlZmlsZSwgcmVjaXBlZGlyLCBmaWxlc2RpciA9IHNlbGYuX3NldHVwX3Rlc3RfZGV2dG9vbF9maW5pc2hfbW9kaWZ5KCkKKyAgICAgICAgIyBFbnN1cmUgdGhlIHJlY2lwZSBpcyB3aGVyZSB3ZSB0aGluayBpdCBzaG91bGQgYmUgKHNvIHRoYXQgY2xlYW51cCBkb2Vzbid0IHRyYXNoIHRoaW5ncykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignL21ldGEvJywgcmVjaXBlZGlyKQorICAgICAgICByZWxwdGggPSBvcy5wYXRoLnJlbHBhdGgocmVjaXBlZGlyLCBvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcignQ09SRUJBU0UnKSwgJ21ldGEnKSkKKyAgICAgICAgYXBwZW5kZGlyID0gb3MucGF0aC5qb2luKGdldF90ZXN0X2xheWVyKCksIHJlbHB0aCkKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChhcHBlbmRkaXIpCisgICAgICAgICMgVHJ5IGZpbmlzaCB0byB0aGUgb3JpZ2luYWwgbGF5ZXIKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bigncm0gLXJmICVzIDsgY2QgJXMgOyBnaXQgY2hlY2tvdXQgJXMnICUgKHJlY2lwZWRpciwgb3MucGF0aC5kaXJuYW1lKHJlY2lwZWRpciksIHJlY2lwZWRpcikpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBmaW5pc2ggJXMgbWV0YS1zZWxmdGVzdCcgJSByZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHJlY2lwZSwgcmVzdWx0Lm91dHB1dCwgJ1JlY2lwZSBzaG91bGQgaGF2ZSBiZWVuIHJlc2V0IGJ5IGZpbmlzaCBidXQgd2FzblwndCcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXhpc3RzKG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ3JlY2lwZXMnLCByZWNpcGUpLCAnUmVjaXBlIGRpcmVjdG9yeSBzaG91bGQgbm90IGV4aXN0IGFmdGVyIGZpbmlzaCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAuJywgY3dkPXJlY2lwZWRpcikKKyAgICAgICAgaWYgcmVzdWx0Lm91dHB1dC5zdHJpcCgpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdSZWNpcGUgZGlyZWN0b3J5IGZvciAlcyBjb250YWlucyB0aGUgZm9sbG93aW5nIHVuZXhwZWN0ZWQgY2hhbmdlcyBhZnRlciBmaW5pc2g6XG4lcycgJSAocmVjaXBlLCByZXN1bHQub3V0cHV0LnN0cmlwKCkpKQorICAgICAgICByZWNpcGVmbiA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShvbGRyZWNpcGVmaWxlKSlbMF0KKyAgICAgICAgcmVjaXBlZm4gPSByZWNpcGVmbi5zcGxpdCgnXycpWzBdICsgJ18lJworICAgICAgICBhcHBlbmRmaWxlID0gb3MucGF0aC5qb2luKGFwcGVuZGRpciwgcmVjaXBlZm4gKyAnLmJiYXBwZW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRFeGlzdHMoYXBwZW5kZmlsZSwgJ2JiYXBwZW5kICVzIHNob3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBidXQgd2FzblwndCcgJSBhcHBlbmRmaWxlKQorICAgICAgICBuZXdkaXIgPSBvcy5wYXRoLmpvaW4oYXBwZW5kZGlyLCByZWNpcGUpCisgICAgICAgIGZpbGVzID0gb3MubGlzdGRpcihuZXdkaXIpCisgICAgICAgIGZvdW5kcGF0Y2ggPSBOb25lCisgICAgICAgIGZvciBmbiBpbiBmaWxlczoKKyAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaChmbiwgJyotQWRkLWEtY29tbWVudC10by10aGUtY29kZS5wYXRjaCcpOgorICAgICAgICAgICAgICAgIGZvdW5kcGF0Y2ggPSBmbgorICAgICAgICBpZiBub3QgZm91bmRwYXRjaDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnTm8gcGF0Y2ggZmlsZSBjcmVhdGVkIG5leHQgdG8gYmJhcHBlbmQnKQorICAgICAgICBmaWxlcy5yZW1vdmUoZm91bmRwYXRjaCkKKyAgICAgICAgaWYgZmlsZXM6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ1VuZXhwZWN0ZWQgZmlsZShzKSBjb3BpZWQgbmV4dCB0byBiYmFwcGVuZDogJXMnICUgJywgJy5qb2luKGZpbGVzKSkKKworICAgIEBPRVRlc3RJRCgxNjI2KQorICAgIGRlZiB0ZXN0X2RldnRvb2xfcmVuYW1lKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLndvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLndvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKworICAgICAgICAjIEZpcnN0IHJ1biBkZXZ0b29sIGFkZAorICAgICAgICAjIFdlIGFscmVhZHkgaGF2ZSB0aGlzIHJlY2lwZSBpbiBPRS1Db3JlLCBidXQgdGhhdCBkb2Vzbid0IG1hdHRlcgorICAgICAgICByZWNpcGVuYW1lID0gJ2kyYy10b29scycKKyAgICAgICAgcmVjaXBldmVyID0gJzMuMS4yJworICAgICAgICByZWNpcGVmaWxlID0gb3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAncmVjaXBlcycsIHJlY2lwZW5hbWUsICclc18lcy5iYicgJSAocmVjaXBlbmFtZSwgcmVjaXBldmVyKSkKKyAgICAgICAgdXJsID0gJ2h0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9pMmMtdG9vbHMtJXMudGFyLmJ6MicgJSByZWNpcGV2ZXIKKyAgICAgICAgZGVmIGFkZF9yZWNpcGUoKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBhZGQgJXMnICUgdXJsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFeGlzdHMocmVjaXBlZmlsZSwgJ0V4cGVjdGVkIHJlY2lwZSBmaWxlIG5vdCBjcmVhdGVkJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXhpc3RzKG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ3NvdXJjZXMnLCByZWNpcGVuYW1lKSwgJ1NvdXJjZSBkaXJlY3Rvcnkgbm90IGNyZWF0ZWQnKQorICAgICAgICAgICAgY2hlY2t2YXJzID0ge30KKyAgICAgICAgICAgIGNoZWNrdmFyc1snUyddID0gTm9uZQorICAgICAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSB1cmwucmVwbGFjZShyZWNpcGV2ZXIsICcke1BWfScpCisgICAgICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIFtdKQorICAgICAgICBhZGRfcmVjaXBlKCkKKyAgICAgICAgIyBOb3cgcmVuYW1lIGl0IC0gY2hhbmdlIGJvdGggbmFtZSBhbmQgdmVyc2lvbgorICAgICAgICBuZXdyZWNpcGVuYW1lID0gJ215bmV3cmVjaXBlJworICAgICAgICBuZXdyZWNpcGV2ZXIgPSAnNDU2JworICAgICAgICBuZXdyZWNpcGVmaWxlID0gb3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAncmVjaXBlcycsIG5ld3JlY2lwZW5hbWUsICclc18lcy5iYicgJSAobmV3cmVjaXBlbmFtZSwgbmV3cmVjaXBldmVyKSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHJlbmFtZSAlcyAlcyAtViAlcycgJSAocmVjaXBlbmFtZSwgbmV3cmVjaXBlbmFtZSwgbmV3cmVjaXBldmVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFeGlzdHMobmV3cmVjaXBlZmlsZSwgJ1JlY2lwZSBmaWxlIG5vdCByZW5hbWVkJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFeGlzdHMob3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAncmVjaXBlcycsIHJlY2lwZW5hbWUpLCAnT2xkIHJlY2lwZSBkaXJlY3Rvcnkgc3RpbGwgZXhpc3RzJykKKyAgICAgICAgbmV3c3JjdHJlZSA9IG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ3NvdXJjZXMnLCBuZXdyZWNpcGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEV4aXN0cyhuZXdzcmN0cmVlLCAnU291cmNlIGRpcmVjdG9yeSBub3QgcmVuYW1lZCcpCisgICAgICAgIGNoZWNrdmFycyA9IHt9CisgICAgICAgIGNoZWNrdmFyc1snUyddID0gJyR7V09SS0RJUn0vJXMtJXMnICUgKHJlY2lwZW5hbWUsIHJlY2lwZXZlcikKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSB1cmwKKyAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMobmV3cmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBbXSkKKyAgICAgICAgIyBUcnkgYWdhaW4gLSBjaGFuZ2UganVzdCBuYW1lIHRoaXMgdGltZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgcmVzZXQgLW4gJXMnICUgbmV3cmVjaXBlbmFtZSkKKyAgICAgICAgc2h1dGlsLnJtdHJlZShuZXdzcmN0cmVlKQorICAgICAgICBhZGRfcmVjaXBlKCkKKyAgICAgICAgbmV3cmVjaXBlZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ3JlY2lwZXMnLCBuZXdyZWNpcGVuYW1lLCAnJXNfJXMuYmInICUgKG5ld3JlY2lwZW5hbWUsIHJlY2lwZXZlcikpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZW5hbWUgJXMgJXMnICUgKHJlY2lwZW5hbWUsIG5ld3JlY2lwZW5hbWUpKQorICAgICAgICBzZWxmLmFzc2VydEV4aXN0cyhuZXdyZWNpcGVmaWxlLCAnUmVjaXBlIGZpbGUgbm90IHJlbmFtZWQnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdyZWNpcGVzJywgcmVjaXBlbmFtZSksICdPbGQgcmVjaXBlIGRpcmVjdG9yeSBzdGlsbCBleGlzdHMnKQorICAgICAgICBzZWxmLmFzc2VydEV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdzb3VyY2VzJywgbmV3cmVjaXBlbmFtZSksICdTb3VyY2UgZGlyZWN0b3J5IG5vdCByZW5hbWVkJykKKyAgICAgICAgY2hlY2t2YXJzID0ge30KKyAgICAgICAgY2hlY2t2YXJzWydTJ10gPSAnJHtXT1JLRElSfS8lcy0ke1BWfScgJSByZWNpcGVuYW1lCisgICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSSddID0gdXJsLnJlcGxhY2UocmVjaXBldmVyLCAnJHtQVn0nKQorICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhuZXdyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIFtdKQorICAgICAgICAjIFRyeSBhZ2FpbiAtIGNoYW5nZSBqdXN0IHZlcnNpb24gdGhpcyB0aW1lCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCAtbiAlcycgJSBuZXdyZWNpcGVuYW1lKQorICAgICAgICBzaHV0aWwucm10cmVlKG5ld3NyY3RyZWUpCisgICAgICAgIGFkZF9yZWNpcGUoKQorICAgICAgICBuZXdyZWNpcGVmaWxlID0gb3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAncmVjaXBlcycsIHJlY2lwZW5hbWUsICclc18lcy5iYicgJSAocmVjaXBlbmFtZSwgbmV3cmVjaXBldmVyKSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHJlbmFtZSAlcyAtViAlcycgJSAocmVjaXBlbmFtZSwgbmV3cmVjaXBldmVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFeGlzdHMobmV3cmVjaXBlZmlsZSwgJ1JlY2lwZSBmaWxlIG5vdCByZW5hbWVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFeGlzdHMob3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAnc291cmNlcycsIHJlY2lwZW5hbWUpLCAnU291cmNlIGRpcmVjdG9yeSBubyBsb25nZXIgZXhpc3RzJykKKyAgICAgICAgY2hlY2t2YXJzID0ge30KKyAgICAgICAgY2hlY2t2YXJzWydTJ10gPSAnJHtXT1JLRElSfS8ke0JQTn0tJXMnICUgcmVjaXBldmVyCisgICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSSddID0gdXJsCisgICAgICAgIHNlbGYuX3Rlc3RfcmVjaXBlX2NvbnRlbnRzKG5ld3JlY2lwZWZpbGUsIGNoZWNrdmFycywgW10pCisKKyAgICBAT0VUZXN0SUQoMTU3NykKKyAgICBkZWYgdGVzdF9kZXZ0b29sX3ZpcnR1YWxfa2VybmVsX21vZGlmeShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6ICAgICAgICBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgY2FzZSBpcyB0byB2ZXJpZnkgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgZGV2dG9vbCBtb2RpZnkgd29ya3MgY29ycmVjdGx5IHdoZW4gYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBrZXJuZWwuCisgICAgICAgIERlcGVuZGVuY2llczogICBOQQorICAgICAgICBTdGVwczogICAgICAgICAgMS4gQnVpbGQga2VybmVsIHdpdGggYml0YmFrZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDIuIFNhdmUgdGhlIGNvbmZpZyBmaWxlIGdlbmVyYXRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDMuIENsZWFuIHRoZSBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDQuIFVzZSBgZGV2dG9vbCBtb2RpZnkgdmlydHVhbC9rZXJuZWxgIHRvIHZhbGlkYXRlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuMSBUaGUgc291cmNlIGlzIGNoZWNrZWQgb3V0IGNvcnJlY3RseS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuMiBUaGUgcmVzdWx0aW5nIGNvbmZpZ3VyYXRpb24gaXMgdGhlIHNhbWUgYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGF0IHdhcyBnZXQgb24gc3RlcCAyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgNC4zIFRoZSBLZXJuZWwgY2FuIGJlIGJ1aWxkIGNvcnJlY3RseS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuNCBDaGFuZ2VzIG1hZGUgb24gdGhlIHNvdXJjZSBhcmUgcmVmbGVjdGVkIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNlcXVlbnQgYnVpbGRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgNC41IENoYW5nZXMgb24gdGhlIGNvbmZpZ3VyYXRpb24gYXJlIHJlZmxlY3RlZCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzZXF1ZW50IGJ1aWxkcworICAgICAgICAgRXhwZWN0ZWQ6ICAgICAgIGRldnRvb2wgbW9kaWZ5IGlzIGFibGUgdG8gY2hlY2tvdXQgdGhlIHNvdXJjZSBvZiB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG1vZGlmaWNhdGlvbiB0byB0aGUgc291cmNlIGFuZCBjb25maWd1cmF0aW9ucyBhcmUgcmVmbGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBidWlsZGluZyB0aGUga2VybmVsLgorICAgICAgICAgIiIiCisgICAgICAgIGtlcm5lbF9wcm92aWRlciA9IGdldF9iYl92YXIoJ1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCcpCisgICAgICAgICMgQ2xlYW4gdXAgdGhlIGVudmlyb21lbnQKKyAgICAgICAgYml0YmFrZSgnJXMgLWMgY2xlYW4nICUga2VybmVsX3Byb3ZpZGVyKQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHRlbXBkaXJfY2ZnID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2NvbmZpZ19xYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyX2NmZykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLndvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiAlcycgJSBrZXJuZWxfcHJvdmlkZXIpCisgICAgICAgICNTdGVwIDEKKyAgICAgICAgI0hlcmUgaXMganVzdCBnZW5lcmF0ZWQgdGhlIGNvbmZpZyBmaWxlIGluc3RlYWQgb2YgYWxsIHRoZSBrZXJuZWwgdG8gb3B0aW1pemUgdGhlCisgICAgICAgICN0aW1lIG9mIGV4ZWN1dGluZyB0aGlzIHRlc3QgY2FzZS4KKyAgICAgICAgYml0YmFrZSgnJXMgLWMgY29uZmlndXJlJyAlIGtlcm5lbF9wcm92aWRlcikKKyAgICAgICAgYmJjb25maWcgPSBvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcignQicsIGtlcm5lbF9wcm92aWRlciksJy5jb25maWcnKQorICAgICAgICAjU3RlcCAyCisgICAgICAgIHJ1bkNtZCgnY3AgJXMgJXMnICUgKGJiY29uZmlnLCB0ZW1wZGlyX2NmZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhpc3RzKG9zLnBhdGguam9pbih0ZW1wZGlyX2NmZywgJy5jb25maWcnKSwgJ0NvdWxkIG5vdCBjb3B5IC5jb25maWcgZmlsZSBmcm9tIGtlcm5lbCcpCisKKyAgICAgICAgdG1wY29uZmlnID0gb3MucGF0aC5qb2luKHRlbXBkaXJfY2ZnLCAnLmNvbmZpZycpCisgICAgICAgICNTdGVwIDMKKyAgICAgICAgYml0YmFrZSgnJXMgLWMgY2xlYW4nICUga2VybmVsX3Byb3ZpZGVyKQorICAgICAgICAjU3RlcCA0LjEKKyAgICAgICAgcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSB2aXJ0dWFsL2tlcm5lbCAteCAlcycgJSB0ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydEV4aXN0cyhvcy5wYXRoLmpvaW4odGVtcGRpciwgJ01ha2VmaWxlJyksICdFeHRyYWN0ZWQgc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCcpCisgICAgICAgICNTdGVwIDQuMgorICAgICAgICBjb25maWdmaWxlID0gb3MucGF0aC5qb2luKHRlbXBkaXIsJy5jb25maWcnKQorICAgICAgICBkaWZmID0gcnVuQ21kKCdkaWZmICVzICVzJyAlICh0bXBjb25maWcsIGNvbmZpZ2ZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsZGlmZi5zdGF0dXMsJ0tlcm5lbCAuY29uZmlnIGZpbGUgaXMgbm90IHRoZSBzYW1lIHVzaW5nIGJpdGJha2UgYW5kIGRldnRvb2wnKQorICAgICAgICAjU3RlcCA0LjMKKyAgICAgICAgI05PVEU6IHZpcnR1YWwva2VybmVsIGlzIG1hcHBlZCB0byBrZXJuZWxfcHJvdmlkZXIKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGJ1aWxkICVzJyAlIGtlcm5lbF9wcm92aWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLHJlc3VsdC5zdGF0dXMsJ0Nhbm5vdCBidWlsZCBrZXJuZWwgdXNpbmcgYGRldnRvb2wgYnVpbGRgJykKKyAgICAgICAga2VybmVsZmlsZSA9IG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCdLQlVJTERfT1VUUFVUJywga2VybmVsX3Byb3ZpZGVyKSwgJ3ZtbGludXgnKQorICAgICAgICBzZWxmLmFzc2VydEV4aXN0cyhrZXJuZWxmaWxlLCAnS2VybmVsIHdhcyBub3QgYnVpbGQgY29ycmVjdGx5JykKKworICAgICAgICAjTW9kaWZ5IHRoZSBrZXJuZWwgc291cmNlCisgICAgICAgIG1vZGZpbGUgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwnYXJjaC94ODYvYm9vdC9oZWFkZXIuUycpCisgICAgICAgIG1vZHN0cmluZyA9ICJVc2UgYSBib290IGxvYWRlci4gRGV2dG9vbCB0ZXN0aW5nLiIKKyAgICAgICAgbW9kYXBwbGllZCA9IHJ1bkNtZCgic2VkIC1pICdzL1VzZSBhIGJvb3QgbG9hZGVyLi8lcy8nICVzIiAlIChtb2RzdHJpbmcsIG1vZGZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsbW9kYXBwbGllZC5zdGF0dXMsJ01vZGlmaWNhdGlvbiB0byAlcyBvbiBrZXJuZWwgc291cmNlIGZhaWxlZCcgJSBtb2RmaWxlKQorICAgICAgICAjTW9kaWZ5IHRoZSBjb25maWd1cmF0aW9uCisgICAgICAgIGNvZGVjb25maWdmaWxlID0gb3MucGF0aC5qb2luKHRlbXBkaXIsJy5jb25maWcubmV3JykKKyAgICAgICAgbW9kY29uZm9wdCA9ICJDT05GSUdfU0dfUE9PTD1uIgorICAgICAgICBtb2Rjb25mID0gcnVuQ21kKCJzZWQgLWkgJ3MvQ09ORklHX1NHX1BPT0w9eS8lcy8nICVzIiAlIChtb2Rjb25mb3B0LCBjb2RlY29uZmlnZmlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCxtb2Rjb25mLnN0YXR1cywnTW9kaWZpY2F0aW9uIHRvICVzIGZhaWxlZCcgJSBjb2RlY29uZmlnZmlsZSkKKyAgICAgICAgI0J1aWxkIGFnYWluIGtlcm5lbCB3aXRoIGRldnRvb2wKKyAgICAgICAgcmVidWlsZCA9IHJ1bkNtZCgnZGV2dG9vbCBidWlsZCAlcycgJSBrZXJuZWxfcHJvdmlkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCxyZWJ1aWxkLnN0YXR1cywnRmFpbCB0byBidWlsZCBrZXJuZWwgYWZ0ZXIgbW9kaWZpY2F0aW9uIG9mIHNvdXJjZSBhbmQgY29uZmlnJykKKyAgICAgICAgI1N0ZXAgNC40CisgICAgICAgIGJ6aW1hZ2VuYW1lID0gJ2J6SW1hZ2UtJyArIGdldF9iYl92YXIoJ0tFUk5FTF9WRVJTSU9OX05BTUUnLCBrZXJuZWxfcHJvdmlkZXIpCisgICAgICAgIGJ6aW1hZ2VmaWxlID0gb3MucGF0aC5qb2luKGdldF9iYl92YXIoJ0QnLCBrZXJuZWxfcHJvdmlkZXIpLCdib290JywgYnppbWFnZW5hbWUpCisgICAgICAgIGNoZWNrbW9kY29kZSA9IHJ1bkNtZCgiZ3JlcCAnJXMnICVzIiAlIChtb2RzdHJpbmcsIGJ6aW1hZ2VmaWxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLGNoZWNrbW9kY29kZS5zdGF0dXMsJ01vZGlmaWNhdGlvbiBvbiBrZXJuZWwgc291cmNlIGZhaWxlZCcpCisgICAgICAgICNTdGVwIDQuNQorICAgICAgICBjaGVja21vZGNvbmZnID0gcnVuQ21kKCJncmVwICVzICVzIiAlIChtb2Rjb25mb3B0LCBjb2RlY29uZmlnZmlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCxjaGVja21vZGNvbmZnLnN0YXR1cywnTW9kaWZpY2F0aW9uIHRvIGNvbmZpZ3VyYXRpb24gZmlsZSBmYWlsZWQnKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvZGlzdHJvZGF0YS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL2Rpc3Ryb2RhdGEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI1NDBhZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL2Rpc3Ryb2RhdGEucHkKQEAgLTAsMCArMSw0MiBAQAorZnJvbSBvZXFhLnNlbGZ0ZXN0LmNhc2UgaW1wb3J0IE9FU2VsZnRlc3RUZXN0Q2FzZQorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIGdldF9iYl92YXJzCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKK2Zyb20gb2VxYS51dGlscy5mdG9vbHMgaW1wb3J0IHdyaXRlX2ZpbGUKK2Zyb20gb2VxYS5jb3JlLmRlY29yYXRvci5vZWlkIGltcG9ydCBPRVRlc3RJRAorCitjbGFzcyBEaXN0cm9kYXRhKE9FU2VsZnRlc3RUZXN0Q2FzZSk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBzdXBlcihEaXN0cm9kYXRhLCBjbHMpLnNldFVwQ2xhc3MoKQorCisgICAgQE9FVGVzdElEKDE5MDIpCisgICAgZGVmIHRlc3RfY2hlY2twa2coc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgVGVzdCB0aGF0IHVwc3RyZWFtIHZlcnNpb24gY2hlY2tzIGRvIG5vdCByZWdyZXNzCisgICAgICAgIEV4cGVjdGVkOiAgICBVcHN0cmVhbSB2ZXJzaW9uIGNoZWNrcyBzaG91bGQgc3VjY2VlZCBleGNlcHQgZm9yIHRoZSByZWNpcGVzIGxpc3RlZCBpbiB0aGUgZXhjZXB0aW9uIGxpc3QuCisgICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogICAgICBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPgorICAgICAgICAiIiIKKyAgICAgICAgZmVhdHVyZSA9ICdJTkhFUklUICs9ICJkaXN0cm9kYXRhIlxuJworICAgICAgICBmZWF0dXJlICs9ICdMSUNFTlNFX0ZMQUdTX1dISVRFTElTVCArPSAiIGNvbW1lcmNpYWwiXG4nCisKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoZmVhdHVyZSkKKyAgICAgICAgYml0YmFrZSgnLWMgY2hlY2twa2cgd29ybGQnKQorICAgICAgICBjaGVja3BrZ19yZXN1bHQgPSBvcGVuKG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCJMT0dfRElSIiksICJjaGVja3BrZy5jc3YiKSkucmVhZGxpbmVzKClbMTpdCisgICAgICAgIHJlZ3Jlc3NlZF9mYWlsdXJlcyA9IFtwa2dfZGF0YVswXSBmb3IgcGtnX2RhdGEgaW4gW3BrZ19saW5lLnNwbGl0KCdcdCcpIGZvciBwa2dfbGluZSBpbiBjaGVja3BrZ19yZXN1bHRdIGlmIHBrZ19kYXRhWzExXSA9PSAnVU5LTk9XTl9CUk9LRU4nXQorICAgICAgICByZWdyZXNzZWRfc3VjY2Vzc2VzID0gW3BrZ19kYXRhWzBdIGZvciBwa2dfZGF0YSBpbiBbcGtnX2xpbmUuc3BsaXQoJ1x0JykgZm9yIHBrZ19saW5lIGluIGNoZWNrcGtnX3Jlc3VsdF0gaWYgcGtnX2RhdGFbMTFdID09ICdLTk9XTl9CUk9LRU4nXQorICAgICAgICBtc2cgPSAiIgorICAgICAgICBpZiBsZW4ocmVncmVzc2VkX2ZhaWx1cmVzKSA+IDA6CisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiIiIKK1RoZSBmb2xsb3dpbmcgcGFja2FnZXMgZmFpbGVkIHVwc3RyZWFtIHZlcnNpb24gY2hlY2tzLiBQbGVhc2UgZml4IHRoZW0gdXNpbmcgVVBTVFJFQU1fQ0hFQ0tfVVJJL1VQU1RSRUFNX0NIRUNLX1JFR0VYCisod2hlbiB1c2luZyB0YXJiYWxscykgb3IgVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggKHdoZW4gdXNpbmcgZ2l0KS4gSWYgYW4gdXBzdHJlYW0gdmVyc2lvbiBjaGVjayBjYW5ub3QgYmUgcGVyZm9ybWVkCisoZm9yIGV4YW1wbGUsIGlmIHVwc3RyZWFtIGRvZXMgbm90IHVzZSBnaXQgdGFncyksIHlvdSBjYW4gc2V0IFVQU1RSRUFNX1ZFUlNJT05fVU5LTk9XTiB0byAnMScgaW4gdGhlIHJlY2lwZSB0byBhY2tub3dsZWRnZQordGhhdCB0aGUgY2hlY2sgY2Fubm90IGJlIHBlcmZvcm1lZC4KKyIiIiArICJcbiIuam9pbihyZWdyZXNzZWRfZmFpbHVyZXMpCisgICAgICAgIGlmIGxlbihyZWdyZXNzZWRfc3VjY2Vzc2VzKSA+IDA6CisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiIiIKK1RoZSBmb2xsb3dpbmcgcGFja2FnZXMgaGF2ZSBiZWVuIGNoZWNrZWQgc3VjY2Vzc2Z1bGx5IGZvciB1cHN0cmVhbSB2ZXJzaW9ucywKK2J1dCB0aGVpciByZWNpcGVzIGNsYWltIG90aGVyd2lzZSBieSBzZXR0aW5nIFVQU1RSRUFNX1ZFUlNJT05fVU5LTk9XTi4gUGxlYXNlIHJlbW92ZSB0aGF0IGxpbmUgZnJvbSB0aGUgcmVjaXBlcy4KKyIiIiArICJcbiIuam9pbihyZWdyZXNzZWRfc3VjY2Vzc2VzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHJlZ3Jlc3NlZF9mYWlsdXJlcykgPT0gMCBhbmQgbGVuKHJlZ3Jlc3NlZF9zdWNjZXNzZXMpID09IDAsIG1zZykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL2VTREsucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9lU0RLLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMzE4OGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9lU0RLLnB5CkBAIC0wLDAgKzEsMTExIEBACitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBvcworaW1wb3J0IGdsb2IKK2Zyb20gb2VxYS5jb3JlLmRlY29yYXRvci5vZWlkIGltcG9ydCBPRVRlc3RJRAorZnJvbSBvZXFhLnNlbGZ0ZXN0LmNhc2UgaW1wb3J0IE9FU2VsZnRlc3RUZXN0Q2FzZQorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIGdldF9iYl92YXJzCisKK2NsYXNzIG9lU0RLRXh0U2VsZlRlc3QoT0VTZWxmdGVzdFRlc3RDYXNlKToKKyAgICAiIiIKKyAgICAjIEJ1Z3ppbGxhIFRlc3QgUGxhbjogNjAzMworICAgICMgVGhpcyBjb2RlIGlzIHBsYW5uZWQgdG8gYmUgcGFydCBvZiB0aGUgYXV0b21hdGlvbiBmb3IgZVNESyBjb250YWluaWcKKyAgICAjIEluc3RhbGwgbGlicmFyaWVzIGFuZCBoZWFkZXJzLCBpbWFnZSBnZW5lcmF0aW9uIGJpbmFyeSBmZWVkcywgc2RrLXVwZGF0ZS4KKyAgICAiIiIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ2V0X2VzZGtfZW52aXJvbm1lbnQoZW52X2VTREssIHRtcGRpcl9lU0RLUUEpOgorICAgICAgICAjIFhYWDogYXQgdGhpcyB0aW1lIHVzZSB0aGUgZmlyc3QgZW52IG5lZWQgdG8gaW52ZXN0aWdhdGUKKyAgICAgICAgIyB3aGF0IGVudmlyb25tZW50IGxvYWQgb2Utc2VsZnRlc3QsIGk1ODYsIHg4Nl82NAorICAgICAgICBwYXR0ZXJuID0gb3MucGF0aC5qb2luKHRtcGRpcl9lU0RLUUEsICdlbnZpcm9ubWVudC1zZXR1cC0qJykKKyAgICAgICAgcmV0dXJuIGdsb2IuZ2xvYihwYXR0ZXJuKVswXQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBydW5fZXNka19jbWQoZW52X2VTREssIHRtcGRpcl9lU0RLUUEsIGNtZCwgcG9zdGNvbmZpZz1Ob25lLCAqKm9wdGlvbnMpOgorICAgICAgICBpZiBwb3N0Y29uZmlnOgorICAgICAgICAgICAgZXNka19jb25mX2ZpbGUgPSBvcy5wYXRoLmpvaW4odG1wZGlyX2VTREtRQSwgJ2NvbmYnLCAnbG9jYWwuY29uZicpCisgICAgICAgICAgICB3aXRoIG9wZW4oZXNka19jb25mX2ZpbGUsICdhKycpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShwb3N0Y29uZmlnKQorICAgICAgICBpZiBub3Qgb3B0aW9uczoKKyAgICAgICAgICAgIG9wdGlvbnMgPSB7fQorICAgICAgICBpZiBub3QgJ3NoZWxsJyBpbiBvcHRpb25zOgorICAgICAgICAgICAgb3B0aW9uc1snc2hlbGwnXSA9IFRydWUKKworICAgICAgICBydW5DbWQoImNkICVzOyAuICVzOyAlcyIgJSAodG1wZGlyX2VTREtRQSwgZW52X2VTREssIGNtZCksICoqb3B0aW9ucykKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ2VuZXJhdGVfZVNESyhpbWFnZSk6CisgICAgICAgIHBuX3Rhc2sgPSAnJXMgLWMgcG9wdWxhdGVfc2RrX2V4dCcgJSBpbWFnZQorICAgICAgICBiaXRiYWtlKHBuX3Rhc2spCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGdldF9lU0RLX3Rvb2xjaGFpbihpbWFnZSk6CisgICAgICAgIHBuX3Rhc2sgPSAnJXMgLWMgcG9wdWxhdGVfc2RrX2V4dCcgJSBpbWFnZQorCisgICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhbJ1NES19ERVBMT1knLCAnVE9PTENIQUlORVhUX09VVFBVVE5BTUUnXSwgcG5fdGFzaykKKyAgICAgICAgc2RrX2RlcGxveSA9IGJiX3ZhcnNbJ1NES19ERVBMT1knXQorICAgICAgICB0b29sY2hhaW5fbmFtZSA9IGJiX3ZhcnNbJ1RPT0xDSEFJTkVYVF9PVVRQVVROQU1FJ10KKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZGtfZGVwbG95LCB0b29sY2hhaW5fbmFtZSArICcuc2gnKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB1cGRhdGVfY29uZmlndXJhdGlvbihjbHMsIGltYWdlLCB0bXBkaXJfZVNES1FBLCBlbnZfZVNESywgZXh0X3Nka19wYXRoKToKKyAgICAgICAgc3N0YXRlX2RpciA9IG9zLnBhdGguam9pbihvcy5lbnZpcm9uWydCVUlMRERJUiddLCAnc3N0YXRlLWNhY2hlJykKKworICAgICAgICBvZVNES0V4dFNlbGZUZXN0LmdlbmVyYXRlX2VTREsoY2xzLmltYWdlKQorCisgICAgICAgIGNscy5leHRfc2RrX3BhdGggPSBvZVNES0V4dFNlbGZUZXN0LmdldF9lU0RLX3Rvb2xjaGFpbihjbHMuaW1hZ2UpCisgICAgICAgIHJ1bkNtZCgiJXMgLXkgLWQgXCIlc1wiIiAlIChjbHMuZXh0X3Nka19wYXRoLCBjbHMudG1wZGlyX2VTREtRQSkpCisKKyAgICAgICAgY2xzLmVudl9lU0RLID0gb2VTREtFeHRTZWxmVGVzdC5nZXRfZXNka19lbnZpcm9ubWVudCgnJywgY2xzLnRtcGRpcl9lU0RLUUEpCisKKyAgICAgICAgc3N0YXRlX2NvbmZpZz0iIiIKK1NES19MT0NBTF9DT05GX1dISVRFTElTVCA9ICJTU1RBVEVfTUlSUk9SUyIKK1NTVEFURV9NSVJST1JTID0gICJmaWxlOi8vLiogZmlsZTovLyVzL1BBVEgiCitDT1JFX0lNQUdFX0VYVFJBX0lOU1RBTEwgPSAicGVybCIKKyAgICAgICAgIiIiICUgc3N0YXRlX2RpcgorCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oY2xzLnRtcGRpcl9lU0RLUUEsICdjb25mJywgJ2xvY2FsLmNvbmYnKSwgJ2ErJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoc3N0YXRlX2NvbmZpZykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIHN1cGVyKG9lU0RLRXh0U2VsZlRlc3QsIGNscykuc2V0VXBDbGFzcygpCisgICAgICAgIGNscy50bXBkaXJfZVNES1FBID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2VTREtRQScpCisKKyAgICAgICAgc3N0YXRlX2RpciA9IGdldF9iYl92YXIoJ1NTVEFURV9ESVInKQorCisgICAgICAgIGNscy5pbWFnZSA9ICdjb3JlLWltYWdlLW1pbmltYWwnCisgICAgICAgIG9lU0RLRXh0U2VsZlRlc3QuZ2VuZXJhdGVfZVNESyhjbHMuaW1hZ2UpCisKKyAgICAgICAgIyBJbnN0YWxsIGVTREsKKyAgICAgICAgY2xzLmV4dF9zZGtfcGF0aCA9IG9lU0RLRXh0U2VsZlRlc3QuZ2V0X2VTREtfdG9vbGNoYWluKGNscy5pbWFnZSkKKyAgICAgICAgcnVuQ21kKCIlcyAteSAtZCBcIiVzXCIiICUgKGNscy5leHRfc2RrX3BhdGgsIGNscy50bXBkaXJfZVNES1FBKSkKKworICAgICAgICBjbHMuZW52X2VTREsgPSBvZVNES0V4dFNlbGZUZXN0LmdldF9lc2RrX2Vudmlyb25tZW50KCcnLCBjbHMudG1wZGlyX2VTREtRQSkKKworICAgICAgICAjIENvbmZpZ3VyZSBlU0RLIHRvIHVzZSBzc3RhdGUgbWlycm9yIGZyb20gcG9reQorICAgICAgICBzc3RhdGVfY29uZmlnPSIiIgorU0RLX0xPQ0FMX0NPTkZfV0hJVEVMSVNUID0gIlNTVEFURV9NSVJST1JTIgorU1NUQVRFX01JUlJPUlMgPSAgImZpbGU6Ly8uKiBmaWxlOi8vJXMvUEFUSCIKKyAgICAgICAgICAgICIiIiAlIHNzdGF0ZV9kaXIKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihjbHMudG1wZGlyX2VTREtRQSwgJ2NvbmYnLCAnbG9jYWwuY29uZicpLCAnYSsnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShzc3RhdGVfY29uZmlnKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgc2h1dGlsLnJtdHJlZShjbHMudG1wZGlyX2VTREtRQSwgaWdub3JlX2Vycm9ycz1UcnVlKQorICAgICAgICBzdXBlcihvZVNES0V4dFNlbGZUZXN0LCBjbHMpLnRlYXJEb3duQ2xhc3MoKQorCisgICAgQE9FVGVzdElEKDE2MDIpCisgICAgZGVmIHRlc3RfaW5zdGFsbF9saWJyYXJpZXNfaGVhZGVycyhzZWxmKToKKyAgICAgICAgcG5fc3N0YXRlID0gJ2JjJworICAgICAgICBiaXRiYWtlKHBuX3NzdGF0ZSkKKyAgICAgICAgY21kID0gImRldnRvb2wgc2RrLWluc3RhbGwgJXMgIiAlIHBuX3NzdGF0ZQorICAgICAgICBvZVNES0V4dFNlbGZUZXN0LnJ1bl9lc2RrX2NtZChzZWxmLmVudl9lU0RLLCBzZWxmLnRtcGRpcl9lU0RLUUEsIGNtZCkKKworICAgIEBPRVRlc3RJRCgxNjAzKQorICAgIGRlZiB0ZXN0X2ltYWdlX2dlbmVyYXRpb25fYmluYXJ5X2ZlZWRzKHNlbGYpOgorICAgICAgICBpbWFnZSA9ICdjb3JlLWltYWdlLW1pbmltYWwnCisgICAgICAgIGNtZCA9ICJkZXZ0b29sIGJ1aWxkLWltYWdlICVzIiAlIGltYWdlCisgICAgICAgIG9lU0RLRXh0U2VsZlRlc3QucnVuX2VzZGtfY21kKHNlbGYuZW52X2VTREssIHNlbGYudG1wZGlyX2VTREtRQSwgY21kKQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9pbWFnZV90eXBlZGVwLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvaW1hZ2VfdHlwZWRlcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjc4ODg1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvaW1hZ2VfdHlwZWRlcC5weQpAQCAtMCwwICsxLDUzIEBACitpbXBvcnQgb3MKKworZnJvbSBvZXFhLnNlbGZ0ZXN0LmNhc2UgaW1wb3J0IE9FU2VsZnRlc3RUZXN0Q2FzZQorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBiaXRiYWtlCitmcm9tIG9lcWEuY29yZS5kZWNvcmF0b3Iub2VpZCBpbXBvcnQgT0VUZXN0SUQKKworY2xhc3MgSW1hZ2VUeXBlRGVwVGVzdHMoT0VTZWxmdGVzdFRlc3RDYXNlKToKKworICAgICMgVmVyaWZ5IHRoYXQgd2hlbiBzcGVjaWZ5aW5nIGEgSU1BR0VfVFlQRURFUF8gb2YgdGhlIGZvcm0gImZvby5iYXIiIHRoYXQKKyAgICAjIHRoZSBjb252ZXJzaW9uIHR5cGUgYmFyIGdldHMgYWRkZWQgYXMgYSBkZXAgYXMgd2VsbAorICAgIEBPRVRlc3RJRCgxNjMzKQorICAgIGRlZiB0ZXN0X2NvbnZlcnNpb25fdHlwZWRlcF9hZGRlZChzZWxmKToKKworICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYygnZW1wdHl0ZXN0JywgIiIiCisjIFRyeSB0byBlbXB0eSBvdXQgdGhlIGRlZmF1bHQgZGVwZW5kZW5jeSBsaXN0CitQQUNLQUdFX0lOU1RBTEwgPSAiIgorRElTVFJPX0VYVFJBX1JERVBFTkRTPSIiCisKK0xJQ0VOU0UgPSAiTUlUIgorSU1BR0VfRlNUWVBFUyA9ICJ0ZXN0ZnN0eXBlIgorCitJTUFHRV9UWVBFU19NQVNLRUQgKz0gInRlc3Rmc3R5cGUiCitJTUFHRV9UWVBFREVQX3Rlc3Rmc3R5cGUgPSAidGFyLmJ6MiIKKworaW5oZXJpdCBpbWFnZQorCisiIiIpCisgICAgICAgICMgRmlyc3QgZ2V0IHRoZSBkZXBlbmRlbmN5IHRoYXQgc2hvdWxkIGV4aXN0IGZvciBiejIsIGl0IHdpbGwgbG9vaworICAgICAgICAjIGxpa2UgQ09OVkVSU0lPTl9ERVBFTkRTX2J6Mj0ic29tZWRlcCIKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnLWUgZW1wdHl0ZXN0JykKKworICAgICAgICBmb3IgbGluZSBpbiByZXN1bHQub3V0cHV0LnNwbGl0KCdcbicpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdDT05WRVJTSU9OX0RFUEVORFNfYnoyJyk6CisgICAgICAgICAgICAgICAgZGVwID0gbGluZS5zcGxpdCgnPScpWzFdLnN0cmlwKCciJykKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICMgTm93IGdldCB0aGUgZGVwZW5kZW5jeSB0YXNrIGxpc3QgYW5kIGNoZWNrIGZvciB0aGUgZXhwZWN0ZWQgdGFzaworICAgICAgICAjIGRlcGVuZGVuY3kKKyAgICAgICAgYml0YmFrZSgnLWcgZW1wdHl0ZXN0JykKKworICAgICAgICB0YXNrZGVwZW5kc2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3Rhc2stZGVwZW5kcy5kb3QnKQorICAgICAgICBkZXAgPSAgZGVwICsgIi5kb19wb3B1bGF0ZV9zeXNyb290IgorICAgICAgICBkZXBmb3VuZCA9IEZhbHNlCisgICAgICAgIGV4cGVjdGVkbGluZSA9ICciZW1wdHl0ZXN0LmRvX3Jvb3RmcyIgLT4gInt9IicuZm9ybWF0KGRlcCkKKworICAgICAgICB3aXRoIG9wZW4odGFza2RlcGVuZHNmaWxlLCAiciIpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RyaXAoKSA9PSBleHBlY3RlZGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGRlcGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIG5vdCBkZXBmb3VuZDoKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJcInt9XCIgbm90IGZvdW5kIi5mb3JtYXQoZXhwZWN0ZWRsaW5lKSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL2ltYWdlZmVhdHVyZXMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9pbWFnZWZlYXR1cmVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZmI2ODYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9pbWFnZWZlYXR1cmVzLnB5CkBAIC0wLDAgKzEsMjQwIEBACitmcm9tIG9lcWEuc2VsZnRlc3QuY2FzZSBpbXBvcnQgT0VTZWxmdGVzdFRlc3RDYXNlCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgcnVucWVtdQorZnJvbSBvZXFhLmNvcmUuZGVjb3JhdG9yLm9laWQgaW1wb3J0IE9FVGVzdElECitmcm9tIG9lcWEudXRpbHMuc3NoY29udHJvbCBpbXBvcnQgU1NIQ29udHJvbAoraW1wb3J0IG9zCitpbXBvcnQganNvbgorCitjbGFzcyBJbWFnZUZlYXR1cmVzKE9FU2VsZnRlc3RUZXN0Q2FzZSk6CisKKyAgICB0ZXN0X3VzZXIgPSAndGVzdGVyJworICAgIHJvb3RfdXNlciA9ICdyb290JworCisgICAgYnVmZmVyID0gVHJ1ZQorCisgICAgQE9FVGVzdElEKDExMDcpCisgICAgZGVmIHRlc3Rfbm9uX3Jvb3RfdXNlcl9jYW5fY29ubmVjdF92aWFfc3NoX3dpdGhvdXRfcGFzc3dvcmQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiBDaGVjayBpZiBub24gcm9vdCB1c2VyIGNhbiBjb25uZWN0IHZpYSBzc2ggd2l0aG91dCBwYXNzd29yZAorICAgICAgICBFeHBlY3RlZDogMS4gQ29ubmVjdGlvbiB0byB0aGUgaW1hZ2UgdmlhIHNzaCB1c2luZyByb290IHVzZXIgd2l0aG91dCBwcm92aWRpbmcgYSBwYXNzd29yZCBzaG91bGQgYmUgYWxsb3dlZC4KKyAgICAgICAgICAgICAgICAgIDIuIENvbm5lY3Rpb24gdG8gdGhlIGltYWdlIHZpYSBzc2ggdXNpbmcgdGVzdGVyIHVzZXIgd2l0aG91dCBwcm92aWRpbmcgYSBwYXNzd29yZCBzaG91bGQgYmUgYWxsb3dlZC4KKyAgICAgICAgUHJvZHVjdDogb2UtY29yZQorICAgICAgICBBdXRob3I6IElvbnV0IENoaXNhbm92aWNpIDxpb251dHguY2hpc2Fub3ZpY2lAaW50ZWwuY29tPgorICAgICAgICBBdXRvbWF0ZWRCeTogRGFuaWVsIElzdHJhdGUgPGRhbmllbC5hbGV4YW5kcnV4LmlzdHJhdGVAaW50ZWwuY29tPgorICAgICAgICAiIiIKKworICAgICAgICBmZWF0dXJlcyA9ICdFWFRSQV9JTUFHRV9GRUFUVVJFUyA9ICJzc2gtc2VydmVyLW9wZW5zc2ggZW1wdHktcm9vdC1wYXNzd29yZCBhbGxvdy1lbXB0eS1wYXNzd29yZCJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ0lOSEVSSVQgKz0gImV4dHJhdXNlcnMiXG4nCisgICAgICAgIGZlYXR1cmVzICs9ICdFWFRSQV9VU0VSU19QQVJBTVMgPSAidXNlcmFkZCAtcCBcJ1wnIHt9OyB1c2VybW9kIC1zIC9iaW4vc2gge307IicuZm9ybWF0KHNlbGYudGVzdF91c2VyLCBzZWxmLnRlc3RfdXNlcikKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoZmVhdHVyZXMpCisKKyAgICAgICAgIyBCdWlsZCBhIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwnKQorCisgICAgICAgIHdpdGggcnVucWVtdSgiY29yZS1pbWFnZS1taW5pbWFsIikgYXMgcWVtdToKKyAgICAgICAgICAgICMgQXR0ZW1wdCB0byBzc2ggd2l0aCBlYWNoIHVzZXIgaW50byBxZW11IHdpdGggZW1wdHkgcGFzc3dvcmQKKyAgICAgICAgICAgIGZvciB1c2VyIGluIFtzZWxmLnJvb3RfdXNlciwgc2VsZi50ZXN0X3VzZXJdOgorICAgICAgICAgICAgICAgIHNzaCA9IFNTSENvbnRyb2woaXA9cWVtdS5pcCwgbG9nZmlsZT1xZW11LnNzaGxvZywgdXNlcj11c2VyKQorICAgICAgICAgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc3NoLnJ1bigidHJ1ZSIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsICdzc2ggdG8gdXNlciAlcyBmYWlsZWQgd2l0aCAlcycgJSAodXNlciwgb3V0cHV0KSkKKworICAgIEBPRVRlc3RJRCgxMTE1KQorICAgIGRlZiB0ZXN0X2FsbF91c2Vyc19jYW5fY29ubmVjdF92aWFfc3NoX3dpdGhvdXRfcGFzc3dvcmQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgQ2hlY2sgaWYgYWxsIHVzZXJzIGNhbiBjb25uZWN0IHZpYSBzc2ggd2l0aG91dCBwYXNzd29yZAorICAgICAgICBFeHBlY3RlZDogMS4gQ29ubmVjdGlvbiB0byB0aGUgaW1hZ2UgdmlhIHNzaCB1c2luZyByb290IHVzZXIgd2l0aG91dCBwcm92aWRpbmcgYSBwYXNzd29yZCBzaG91bGQgTk9UIGJlIGFsbG93ZWQuCisgICAgICAgICAgICAgICAgICAyLiBDb25uZWN0aW9uIHRvIHRoZSBpbWFnZSB2aWEgc3NoIHVzaW5nIHRlc3RlciB1c2VyIHdpdGhvdXQgcHJvdmlkaW5nIGEgcGFzc3dvcmQgc2hvdWxkIGJlIGFsbG93ZWQuCisgICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogICAgICBJb251dCBDaGlzYW5vdmljaSA8aW9udXR4LmNoaXNhbm92aWNpQGludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZmVhdHVyZXMgPSAnRVhUUkFfSU1BR0VfRkVBVFVSRVMgPSAic3NoLXNlcnZlci1vcGVuc3NoIGFsbG93LWVtcHR5LXBhc3N3b3JkIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnSU5IRVJJVCArPSAiZXh0cmF1c2VycyJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ0VYVFJBX1VTRVJTX1BBUkFNUyA9ICJ1c2VyYWRkIC1wIFwnXCcge307IHVzZXJtb2QgLXMgL2Jpbi9zaCB7fTsiJy5mb3JtYXQoc2VsZi50ZXN0X3VzZXIsIHNlbGYudGVzdF91c2VyKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhmZWF0dXJlcykKKworICAgICAgICAjIEJ1aWxkIGEgY29yZS1pbWFnZS1taW5pbWFsCisgICAgICAgIGJpdGJha2UoJ2NvcmUtaW1hZ2UtbWluaW1hbCcpCisKKyAgICAgICAgd2l0aCBydW5xZW11KCJjb3JlLWltYWdlLW1pbmltYWwiKSBhcyBxZW11OgorICAgICAgICAgICAgIyBBdHRlbXB0IHRvIHNzaCB3aXRoIGVhY2ggdXNlciBpbnRvIHFlbXUgd2l0aCBlbXB0eSBwYXNzd29yZAorICAgICAgICAgICAgZm9yIHVzZXIgaW4gW3NlbGYucm9vdF91c2VyLCBzZWxmLnRlc3RfdXNlcl06CisgICAgICAgICAgICAgICAgc3NoID0gU1NIQ29udHJvbChpcD1xZW11LmlwLCBsb2dmaWxlPXFlbXUuc3NobG9nLCB1c2VyPXVzZXIpCisgICAgICAgICAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBzc2gucnVuKCJ0cnVlIikKKyAgICAgICAgICAgICAgICBpZiB1c2VyID09ICdyb290JzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzdGF0dXMsIDAsICdzc2ggdG8gdXNlciByb290IHdhcyBhbGxvd2VkIHdoZW4gaXQgc2hvdWxkIG5vdCBoYXZlIGJlZW4nKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCAnc3NoIHRvIHVzZXIgdGVzdGVyIGZhaWxlZCB3aXRoICVzJyAlIG91dHB1dCkKKworCisgICAgQE9FVGVzdElEKDExMTYpCisgICAgZGVmIHRlc3RfY2x1dHRlcl9pbWFnZV9jYW5fYmVfYnVpbHQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgQ2hlY2sgaWYgY2x1dHRlciBpbWFnZSBjYW4gYmUgYnVpbHQKKyAgICAgICAgRXhwZWN0ZWQ6ICAgIDEuIGNvcmUtaW1hZ2UtY2x1dHRlciBjYW4gYmUgYnVpbHQKKyAgICAgICAgUHJvZHVjdDogICAgIG9lLWNvcmUKKyAgICAgICAgQXV0aG9yOiAgICAgIElvbnV0IENoaXNhbm92aWNpIDxpb251dHguY2hpc2Fub3ZpY2lAaW50ZWwuY29tPgorICAgICAgICBBdXRvbWF0ZWRCeTogRGFuaWVsIElzdHJhdGUgPGRhbmllbC5hbGV4YW5kcnV4LmlzdHJhdGVAaW50ZWwuY29tPgorICAgICAgICAiIiIKKworICAgICAgICAjIEJ1aWxkIGEgY29yZS1pbWFnZS1jbHV0dGVyCisgICAgICAgIGJpdGJha2UoJ2NvcmUtaW1hZ2UtY2x1dHRlcicpCisKKyAgICBAT0VUZXN0SUQoMTExNykKKyAgICBkZWYgdGVzdF93YXlsYW5kX3N1cHBvcnRfaW5faW1hZ2Uoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgQ2hlY2sgV2F5bGFuZCBzdXBwb3J0IGluIGltYWdlCisgICAgICAgIEV4cGVjdGVkOiAgICAxLiBXYXlsYW5kIGltYWdlIGNhbiBiZSBidWlsZAorICAgICAgICAgICAgICAgICAgICAgMi4gV2F5bGFuZCBmZWF0dXJlIGNhbiBiZSBpbnN0YWxsZWQKKyAgICAgICAgUHJvZHVjdDogICAgIG9lLWNvcmUKKyAgICAgICAgQXV0aG9yOiAgICAgIElvbnV0IENoaXNhbm92aWNpIDxpb251dHguY2hpc2Fub3ZpY2lAaW50ZWwuY29tPgorICAgICAgICBBdXRvbWF0ZWRCeTogRGFuaWVsIElzdHJhdGUgPGRhbmllbC5hbGV4YW5kcnV4LmlzdHJhdGVAaW50ZWwuY29tPgorICAgICAgICAiIiIKKworICAgICAgICBkaXN0cm9fZmVhdHVyZXMgPSBnZXRfYmJfdmFyKCdESVNUUk9fRkVBVFVSRVMnKQorICAgICAgICBpZiBub3QgKCdvcGVuZ2wnIGluIGRpc3Ryb19mZWF0dXJlcyBhbmQgJ3dheWxhbmQnIGluIGRpc3Ryb19mZWF0dXJlcyk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCduZWl0aGVyIG9wZW5nbCBub3Igd2F5bGFuZCBwcmVzZW50IG9uIERJU1RST19GRUFUVVJFUyBzbyBjb3JlLWltYWdlLXdlc3RvbiBjYW5ub3QgYmUgYnVpbHQnKQorCisgICAgICAgICMgQnVpbGQgYSBjb3JlLWltYWdlLXdlc3RvbgorICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLXdlc3RvbicpCisKKyAgICBAT0VUZXN0SUQoMTQ5NykKKyAgICBkZWYgdGVzdF9ibWFwKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogICAgIENoZWNrIGJtYXAgc3VwcG9ydAorICAgICAgICBFeHBlY3RlZDogICAgMS4gY29yZS1pbWFnZS1taW5pbWFsIGNhbiBiZSBidWlsZCB3aXRoIGJtYXAgc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICAgMi4gY29yZS1pbWFnZS1taW5pbWFsIGlzIHNwYXJzZQorICAgICAgICBQcm9kdWN0OiAgICAgb2UtY29yZQorICAgICAgICBBdXRob3I6ICAgICAgRWQgQmFydG9zaCA8ZWQuYmFydG9zaEBsaW51eC5pbnRlbC5jb20+CisgICAgICAgICIiIgorCisgICAgICAgIGZlYXR1cmVzID0gJ0lNQUdFX0ZTVFlQRVMgKz0gIiBleHQ0IGV4dDQuYm1hcCBleHQ0LmJtYXAuZ3oiJworICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhmZWF0dXJlcykKKworICAgICAgICBpbWFnZV9uYW1lID0gJ2NvcmUtaW1hZ2UtbWluaW1hbCcKKyAgICAgICAgYml0YmFrZShpbWFnZV9uYW1lKQorCisgICAgICAgIGRlcGxveV9kaXJfaW1hZ2UgPSBnZXRfYmJfdmFyKCdERVBMT1lfRElSX0lNQUdFJykKKyAgICAgICAgbGlua19uYW1lID0gZ2V0X2JiX3ZhcignSU1BR0VfTElOS19OQU1FJywgaW1hZ2VfbmFtZSkKKyAgICAgICAgaW1hZ2VfcGF0aCA9IG9zLnBhdGguam9pbihkZXBsb3lfZGlyX2ltYWdlLCAiJXMuZXh0NCIgJSBsaW5rX25hbWUpCisgICAgICAgIGJtYXBfcGF0aCA9ICIlcy5ibWFwIiAlIGltYWdlX3BhdGgKKyAgICAgICAgZ3ppcF9wYXRoID0gIiVzLmd6IiAlIGJtYXBfcGF0aAorCisgICAgICAgICMgY2hlY2sgaWYgcmVzdWx0IGltYWdlLCBibWFwIGFuZCBibWFwLmd6IGZpbGVzIGFyZSBpbiBkZXBsb3kgZGlyZWN0b3J5CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhpbWFnZV9wYXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGJtYXBfcGF0aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhnemlwX3BhdGgpKQorCisgICAgICAgICMgY2hlY2sgaWYgcmVzdWx0IGltYWdlIGlzIHNwYXJzZQorICAgICAgICBpbWFnZV9zdGF0ID0gb3Muc3RhdChpbWFnZV9wYXRoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW1hZ2Vfc3RhdC5zdF9zaXplID4gaW1hZ2Vfc3RhdC5zdF9ibG9ja3MgKiA1MTIpCisKKyAgICAgICAgIyBjaGVjayBpZiB0aGUgcmVzdWx0aW5nIGd6aXAgaXMgdmFsaWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ1bkNtZCgnZ3ppcCAtdCAlcycgJSBnemlwX3BhdGgpKQorCisgICAgQE9FVGVzdElEKDE5MDMpCisgICAgZGVmIHRlc3RfaHlwZXJ2aXNvcl9mbXRzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogICAgIENoZWNrIHZhcmlvdXMgaHlwZXJ2aXNvciBmb3JtYXRzCisgICAgICAgIEV4cGVjdGVkOiAgICAxLiBjb3JlLWltYWdlLW1pbmltYWwgY2FuIGJlIGJ1aWx0IHdpdGggdm1kaywgdmRpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgcWNvdzIgc3VwcG9ydC4KKyAgICAgICAgICAgICAgICAgICAgIDIuIHFlbXUtaW1nIHNheXMgZWFjaCBpbWFnZSBoYXMgdGhlIGV4cGVjdGVkIGZvcm1hdAorICAgICAgICBQcm9kdWN0OiAgICAgb2UtY29yZQorICAgICAgICBBdXRob3I6ICAgICAgVG9tIFJpbmkgPHRyaW5pQGtvbnN1bGtvLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgaW1nX3R5cGVzID0gWyAndm1kaycsICd2ZGknLCAncWNvdzInIF0KKyAgICAgICAgZmVhdHVyZXMgPSAiIgorICAgICAgICBmb3IgaXR5cGUgaW4gaW1nX3R5cGVzOgorICAgICAgICAgICAgZmVhdHVyZXMgKz0gJ0lNQUdFX0ZTVFlQRVMgKz0gIndpYy4lcyJcbicgJSBpdHlwZQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhmZWF0dXJlcykKKworICAgICAgICBpbWFnZV9uYW1lID0gJ2NvcmUtaW1hZ2UtbWluaW1hbCcKKyAgICAgICAgYml0YmFrZShpbWFnZV9uYW1lKQorCisgICAgICAgIGRlcGxveV9kaXJfaW1hZ2UgPSBnZXRfYmJfdmFyKCdERVBMT1lfRElSX0lNQUdFJykKKyAgICAgICAgbGlua19uYW1lID0gZ2V0X2JiX3ZhcignSU1BR0VfTElOS19OQU1FJywgaW1hZ2VfbmFtZSkKKyAgICAgICAgZm9yIGl0eXBlIGluIGltZ190eXBlczoKKyAgICAgICAgICAgIGltYWdlX3BhdGggPSBvcy5wYXRoLmpvaW4oZGVwbG95X2Rpcl9pbWFnZSwgIiVzLndpYy4lcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlua19uYW1lLCBpdHlwZSkpCisKKyAgICAgICAgICAgICMgY2hlY2sgaWYgcmVzdWx0IGltYWdlIGZpbGUgaXMgaW4gZGVwbG95IGRpcmVjdG9yeQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGltYWdlX3BhdGgpKQorCisgICAgICAgICAgICAjIGNoZWNrIGlmIHJlc3VsdCBpbWFnZSBpcyB2bWRrCisgICAgICAgICAgICBzeXNyb290ID0gZ2V0X2JiX3ZhcignU1RBR0lOR19ESVJfTkFUSVZFJywgJ2NvcmUtaW1hZ2UtbWluaW1hbCcpCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3FlbXUtaW1nIGluZm8gLS1vdXRwdXQganNvbiAlcycgJSBpbWFnZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290PXN5c3Jvb3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoanNvbi5sb2FkcyhyZXN1bHQub3V0cHV0KS5nZXQoJ2Zvcm1hdCcpID09IGl0eXBlKQorCisgICAgQE9FVGVzdElEKDE5MDUpCisgICAgZGVmIHRlc3RfbG9uZ19jaGFpbl9jb252ZXJzaW9uKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogICAgIENoZWNrIGZvciBjaGFpbmluZyBtYW55IENPTlZFUlNJT05fQ01EcyB0b2dldGhlcgorICAgICAgICBFeHBlY3RlZDogICAgMS4gY29yZS1pbWFnZS1taW5pbWFsIGNhbiBiZSBidWlsdCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICBleHQ0LmJtYXAuZ3ouYnoyLmx6by54ei51LWJvb3QgYW5kIGFsc28gY3JlYXRlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHNoYTI1NnN1bQorICAgICAgICAgICAgICAgICAgICAgMi4gVGhlIGFib3ZlIGltYWdlIGhhcyBhIHZhbGlkIHNoYTI1NnN1bQorICAgICAgICBQcm9kdWN0OiAgICAgb2UtY29yZQorICAgICAgICBBdXRob3I6ICAgICAgVG9tIFJpbmkgPHRyaW5pQGtvbnN1bGtvLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgY29udiA9ICJleHQ0LmJtYXAuZ3ouYnoyLmx6by54ei51LWJvb3QiCisgICAgICAgIGZlYXR1cmVzID0gJ0lNQUdFX0ZTVFlQRVMgKz0gIiVzICVzLnNoYTI1NnN1bSInICUgKGNvbnYsIGNvbnYpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKGZlYXR1cmVzKQorCisgICAgICAgIGltYWdlX25hbWUgPSAnY29yZS1pbWFnZS1taW5pbWFsJworICAgICAgICBiaXRiYWtlKGltYWdlX25hbWUpCisKKyAgICAgICAgZGVwbG95X2Rpcl9pbWFnZSA9IGdldF9iYl92YXIoJ0RFUExPWV9ESVJfSU1BR0UnKQorICAgICAgICBsaW5rX25hbWUgPSBnZXRfYmJfdmFyKCdJTUFHRV9MSU5LX05BTUUnLCBpbWFnZV9uYW1lKQorICAgICAgICBpbWFnZV9wYXRoID0gb3MucGF0aC5qb2luKGRlcGxveV9kaXJfaW1hZ2UsICIlcy4lcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5rX25hbWUsIGNvbnYpKQorCisgICAgICAgICMgY2hlY2sgaWYgcmVzdWx0aW5nIGltYWdlIGlzIGluIHRoZSBkZXBsb3kgZGlyZWN0b3J5CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhpbWFnZV9wYXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGltYWdlX3BhdGggKyAiLnNoYTI1NnN1bSIpKQorCisgICAgICAgICMgY2hlY2sgaWYgdGhlIHJlc3VsdGluZyBzaGEyNTZzdW0gYWdyZWVzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShydW5DbWQoJ2NkICVzO3NoYTI1NnN1bSAtYyAlcy4lcy5zaGEyNTZzdW0nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVwbG95X2Rpcl9pbWFnZSwgbGlua19uYW1lLCBjb252KSkpCisKKyAgICBAT0VUZXN0SUQoMTkwNCkKKyAgICBkZWYgdGVzdF9pbWFnZV9mc3R5cGVzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogICAgIENoZWNrIGlmIGltYWdlIG9mIHN1cHBvcnRlZCBpbWFnZSBmc3R5cGVzIGNhbiBiZSBidWlsdAorICAgICAgICBFeHBlY3RlZDogICAgY29yZS1pbWFnZS1taW5pbWFsIGNhbiBiZSBidWlsdCBmb3IgdmFyaW91cyBpbWFnZSB0eXBlcworICAgICAgICBQcm9kdWN0OiAgICAgb2UtY29yZQorICAgICAgICBBdXRob3I6ICAgICAgRWQgQmFydG9zaCA8ZWQuYmFydG9zaEBsaW51eC5pbnRlbC5jb20+CisgICAgICAgICIiIgorICAgICAgICBpbWFnZV9uYW1lID0gJ2NvcmUtaW1hZ2UtbWluaW1hbCcKKworICAgICAgICBpbWdfdHlwZXMgPSBbaXR5cGUgZm9yIGl0eXBlIGluIGdldF9iYl92YXIoIklNQUdFX1RZUEVTIiwgaW1hZ2VfbmFtZSkuc3BsaXQoKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXR5cGUgbm90IGluICgnY29udGFpbmVyJywgJ2VsZicsICdtdWx0aXViaScpXQorCisgICAgICAgIGNvbmZpZyA9ICdJTUFHRV9GU1RZUEVTICs9ICIlcyJcbidcCisgICAgICAgICAgICAgICAgICdNS1VCSUZTX0FSR1MgPz0gIi1tIDIwNDggLWUgMTI5MDI0IC1jIDIwNDciXG4nXAorICAgICAgICAgICAgICAgICAnVUJJTklaRV9BUkdTID89ICItbSAyMDQ4IC1wIDEyOEtpQiAtcyA1MTIiJyAlICcgJy5qb2luKGltZ190eXBlcykKKworICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhjb25maWcpCisKKyAgICAgICAgYml0YmFrZShpbWFnZV9uYW1lKQorCisgICAgICAgIGRlcGxveV9kaXJfaW1hZ2UgPSBnZXRfYmJfdmFyKCdERVBMT1lfRElSX0lNQUdFJykKKyAgICAgICAgbGlua19uYW1lID0gZ2V0X2JiX3ZhcignSU1BR0VfTElOS19OQU1FJywgaW1hZ2VfbmFtZSkKKyAgICAgICAgZm9yIGl0eXBlIGluIGltZ190eXBlczoKKyAgICAgICAgICAgIGltYWdlX3BhdGggPSBvcy5wYXRoLmpvaW4oZGVwbG95X2Rpcl9pbWFnZSwgIiVzLiVzIiAlIChsaW5rX25hbWUsIGl0eXBlKSkKKyAgICAgICAgICAgICMgY2hlY2sgaWYgcmVzdWx0IGltYWdlIGlzIGluIGRlcGxveSBkaXJlY3RvcnkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhpbWFnZV9wYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgaW1hZ2UgJXMgZG9lc24ndCBleGlzdCIgJSAoaXR5cGUsIGltYWdlX3BhdGgpKQorCisgICAgZGVmIHRlc3RfdXNlcmFkZF9zdGF0aWMoc2VsZik6CisgICAgICAgIGNvbmZpZyA9ICIiIgorVVNFUkFEREVYVEVOU0lPTiA9ICJ1c2VyYWRkLXN0YXRpY2lkcyIKK1VTRVJBRERfRVJST1JfRFlOQU1JQyA9ICJza2lwIgorVVNFUkFERF9VSURfVEFCTEVTICs9ICJmaWxlcy9zdGF0aWMtcGFzc3dkIgorVVNFUkFERF9HSURfVEFCTEVTICs9ICJmaWxlcy9zdGF0aWMtZ3JvdXAiCisiIiIKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoY29uZmlnKQorICAgICAgICBiaXRiYWtlKCJjb3JlLWltYWdlLWJhc2UiKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvbGF5ZXJhcHBlbmQucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9sYXllcmFwcGVuZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmQ1Y2RiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvbGF5ZXJhcHBlbmQucHkKQEAgLTAsMCArMSw5NSBAQAoraW1wb3J0IG9zCisKK2Zyb20gb2VxYS5zZWxmdGVzdC5jYXNlIGltcG9ydCBPRVNlbGZ0ZXN0VGVzdENhc2UKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuY29yZS5kZWNvcmF0b3Iub2VpZCBpbXBvcnQgT0VUZXN0SUQKKworY2xhc3MgTGF5ZXJBcHBlbmRUZXN0cyhPRVNlbGZ0ZXN0VGVzdENhc2UpOgorICAgIGxheWVyY29uZiA9ICIiIgorIyBXZSBoYXZlIGEgY29uZiBhbmQgY2xhc3NlcyBkaXJlY3RvcnksIGFwcGVuZCB0byBCQlBBVEgKK0JCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IgorCisjIFdlIGhhdmUgYSByZWNpcGVzIGRpcmVjdG9yeSwgYWRkIHRvIEJCRklMRVMKK0JCRklMRVMgKz0gIiR7TEFZRVJESVJ9L3JlY2lwZXMqLyouYmIgJHtMQVlFUkRJUn0vcmVjaXBlcyovKi5iYmFwcGVuZCIKKworQkJGSUxFX0NPTExFQ1RJT05TICs9ICJtZXRhLWxheWVySU5UIgorQkJGSUxFX1BBVFRFUk5fbWV0YS1sYXllcklOVCA6PSAiXiR7TEFZRVJESVJ9LyIKK0JCRklMRV9QUklPUklUWV9tZXRhLWxheWVySU5UID0gIjYiCisiIiIKKyAgICByZWNpcGUgPSAiIiIKK0xJQ0VOU0U9IkNMT1NFRCIKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK3B5dGhvbiBkb19idWlsZCgpIHsKKyAgICBiYi5wbGFpbignQnVpbGRpbmcgLi4uJykKK30KK2FkZHRhc2sgYnVpbGQKKyIiIgorICAgIGFwcGVuZCA9ICIiIgorRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgorCitTUkNfVVJJX2FwcGVuZCA9ICIgZmlsZTovL2FwcGVuZHRlc3QudHh0IgorCitzeXNyb290X3N0YWdlX2FsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9hcHBlbmR0ZXN0LnR4dCAke1NZU1JPT1RfREVTVERJUn0vCit9CisKKyIiIgorCisgICAgYXBwZW5kMiA9ICIiIgorRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgorCitTUkNfVVJJX2FwcGVuZCA9ICIgZmlsZTovL2FwcGVuZHRlc3QudHh0IgorIiIiCisgICAgbGF5ZXJhcHBlbmQgPSAnJworCisgICAgZGVmIHRlYXJEb3duTG9jYWwoc2VsZik6CisgICAgICAgIGlmIHNlbGYubGF5ZXJhcHBlbmQ6CisgICAgICAgICAgICBmdG9vbHMucmVtb3ZlX2Zyb21fZmlsZShzZWxmLmJ1aWxkZGlyICsgIi9jb25mL2JibGF5ZXJzLmNvbmYiLCBzZWxmLmxheWVyYXBwZW5kKQorICAgICAgICBzdXBlcihMYXllckFwcGVuZFRlc3RzLCBzZWxmKS50ZWFyRG93bkxvY2FsKCkKKworICAgIEBPRVRlc3RJRCgxMTk2KQorICAgIGRlZiB0ZXN0X2xheWVyX2FwcGVuZHMoc2VsZik6CisgICAgICAgIGNvcmViYXNlID0gZ2V0X2JiX3ZhcigiQ09SRUJBU0UiKQorCisgICAgICAgIGZvciBsIGluIFsiMCIsICIxIiwgIjIiXToKKyAgICAgICAgICAgIGxheWVyID0gb3MucGF0aC5qb2luKGNvcmViYXNlLCAibWV0YS1sYXllcnRlc3QiICsgbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMobGF5ZXIpKQorICAgICAgICAgICAgb3MubWtkaXIobGF5ZXIpCisgICAgICAgICAgICBvcy5ta2RpcihsYXllciArICIvY29uZiIpCisgICAgICAgICAgICB3aXRoIG9wZW4obGF5ZXIgKyAiL2NvbmYvbGF5ZXIuY29uZiIsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHNlbGYubGF5ZXJjb25mLnJlcGxhY2UoIklOVCIsIGwpKQorICAgICAgICAgICAgb3MubWtkaXIobGF5ZXIgKyAiL3JlY2lwZXMtdGVzdCIpCisgICAgICAgICAgICBpZiBsID09ICIwIjoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4obGF5ZXIgKyAiL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QuYmIiLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5yZWNpcGUpCisgICAgICAgICAgICBlbGlmIGwgPT0gIjEiOgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihsYXllciArICIvcmVjaXBlcy10ZXN0L2xheWVyYXBwZW5kdGVzdC5iYmFwcGVuZCIsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZShzZWxmLmFwcGVuZCkKKyAgICAgICAgICAgICAgICBvcy5ta2RpcihsYXllciArICIvcmVjaXBlcy10ZXN0L2xheWVyYXBwZW5kdGVzdCIpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyICsgIi9yZWNpcGVzLXRlc3QvbGF5ZXJhcHBlbmR0ZXN0L2FwcGVuZHRlc3QudHh0IiwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJMYXllciAxIHRlc3QiKQorICAgICAgICAgICAgZWxpZiBsID09ICIyIjoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4obGF5ZXIgKyAiL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QuYmJhcHBlbmQiLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5hcHBlbmQyKQorICAgICAgICAgICAgICAgIG9zLm1rZGlyKGxheWVyICsgIi9yZWNpcGVzLXRlc3QvbGF5ZXJhcHBlbmR0ZXN0IikKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4obGF5ZXIgKyAiL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QvYXBwZW5kdGVzdC50eHQiLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIkxheWVyIDIgdGVzdCIpCisgICAgICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKGxheWVyKQorCisgICAgICAgIHNlbGYubGF5ZXJhcHBlbmQgPSAiQkJMQVlFUlMgKz0gXCJ7MH0vbWV0YS1sYXllcnRlc3QwIHswfS9tZXRhLWxheWVydGVzdDEgezB9L21ldGEtbGF5ZXJ0ZXN0MlwiIi5mb3JtYXQoY29yZWJhc2UpCisgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShzZWxmLmJ1aWxkZGlyICsgIi9jb25mL2JibGF5ZXJzLmNvbmYiLCBzZWxmLmxheWVyYXBwZW5kKQorICAgICAgICBzdGFnaW5nZGlyID0gZ2V0X2JiX3ZhcigiU1lTUk9PVF9ERVNURElSIiwgImxheWVyYXBwZW5kdGVzdCIpCisgICAgICAgIGJpdGJha2UoImxheWVyYXBwZW5kdGVzdCIpCisgICAgICAgIGRhdGEgPSBmdG9vbHMucmVhZF9maWxlKHN0YWdpbmdkaXIgKyAiL2FwcGVuZHRlc3QudHh0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAiTGF5ZXIgMiB0ZXN0IikKKyAgICAgICAgb3MucmVtb3ZlKGNvcmViYXNlICsgIi9tZXRhLWxheWVydGVzdDIvcmVjaXBlcy10ZXN0L2xheWVyYXBwZW5kdGVzdC9hcHBlbmR0ZXN0LnR4dCIpCisgICAgICAgIGJpdGJha2UoImxheWVyYXBwZW5kdGVzdCIpCisgICAgICAgIGRhdGEgPSBmdG9vbHMucmVhZF9maWxlKHN0YWdpbmdkaXIgKyAiL2FwcGVuZHRlc3QudHh0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAiTGF5ZXIgMSB0ZXN0IikKKyAgICAgICAgd2l0aCBvcGVuKGNvcmViYXNlICsgIi9tZXRhLWxheWVydGVzdDIvcmVjaXBlcy10ZXN0L2xheWVyYXBwZW5kdGVzdC9hcHBlbmR0ZXN0LnR4dCIsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoIkxheWVyIDIgdGVzdCIpCisgICAgICAgIGJpdGJha2UoImxheWVyYXBwZW5kdGVzdCIpCisgICAgICAgIGRhdGEgPSBmdG9vbHMucmVhZF9maWxlKHN0YWdpbmdkaXIgKyAiL2FwcGVuZHRlc3QudHh0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAiTGF5ZXIgMiB0ZXN0IikKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL2xpYm9lLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvbGlib2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg0NjA5MgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL2xpYm9lLnB5CkBAIC0wLDAgKzEsMTAyIEBACitmcm9tIG9lcWEuc2VsZnRlc3QuY2FzZSBpbXBvcnQgT0VTZWxmdGVzdFRlc3RDYXNlCitmcm9tIG9lcWEuY29yZS5kZWNvcmF0b3Iub2VpZCBpbXBvcnQgT0VUZXN0SUQKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgZ2V0X2JiX3ZhciwgZ2V0X2JiX3ZhcnMsIGJpdGJha2UsIHJ1bkNtZAoraW1wb3J0IG9lLnBhdGgKK2ltcG9ydCBvcworCitjbGFzcyBMaWJPRShPRVNlbGZ0ZXN0VGVzdENhc2UpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgc3VwZXIoTGliT0UsIGNscykuc2V0VXBDbGFzcygpCisgICAgICAgIGNscy50bXBfZGlyID0gZ2V0X2JiX3ZhcignVE1QRElSJykKKworICAgIEBPRVRlc3RJRCgxNjM1KQorICAgIGRlZiB0ZXN0X2NvcHlfdHJlZV9zcGVjaWFsKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogICAgb2UucGF0aC5jb3B5dHJlZSgpIHNob3VsZCBjb3B5IGZpbGVzIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXIKKyAgICAgICAgRXhwZWN0ZWQ6ICAgJ3Rlc3QgZmlsZSB3aXRoIHNwwqNjIWFsIEBuZCBzcGFjZXMnIHNob3VsZCBleGlzdCBpbgorICAgICAgICAgICAgICAgICAgICBjb3B5IGRlc3RpbmF0aW9uCisgICAgICAgIFByb2R1Y3Q6ICAgIE9FLUNvcmUKKyAgICAgICAgQXV0aG9yOiAgICAgSm9zaHVhIExvY2sgPGpvc2h1YS5nLmxvY2tAaW50ZWwuY29tPgorICAgICAgICAiIiIKKyAgICAgICAgdGVzdGxvYyA9IG9lLnBhdGguam9pbihzZWxmLnRtcF9kaXIsICdsaWJvZXRlc3RzJykKKyAgICAgICAgc3JjID0gb2UucGF0aC5qb2luKHRlc3Rsb2MsICdzcmMnKQorICAgICAgICBkc3QgPSBvZS5wYXRoLmpvaW4odGVzdGxvYywgJ2RzdCcpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih0ZXN0bG9jKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc3JjKQorICAgICAgICB0ZXN0ZmlsZW5hbWUgPSAndGVzdCBmaWxlIHdpdGggc3DCo2MhYWwgQG5kIHNwYWNlcycKKworICAgICAgICAjIGNyZWF0ZSB0aGUgdGVzdCBmaWxlIGFuZCBjb3B5IGl0CisgICAgICAgIG9wZW4ob2UucGF0aC5qb2luKHNyYywgdGVzdGZpbGVuYW1lKSwgJ3crYicpLmNsb3NlKCkKKyAgICAgICAgb2UucGF0aC5jb3B5dHJlZShzcmMsIGRzdCkKKworICAgICAgICAjIGVuc3VyZSBwYXRoIGV4aXN0cyBpbiBkZXN0CisgICAgICAgIGZpbGVpbmRzdCA9IG9zLnBhdGguaXNmaWxlKG9lLnBhdGguam9pbihkc3QsIHRlc3RmaWxlbmFtZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlaW5kc3QsICJGaWxlIHdpdGggc3BhY2VzIGRvZXNuJ3QgZXhpc3QgaW4gZHN0IikKKworICAgICAgICBvZS5wYXRoLnJlbW92ZSh0ZXN0bG9jKQorCisgICAgQE9FVGVzdElEKDE2MzYpCisgICAgZGVmIHRlc3RfY29weV90cmVlX3hhdHRyKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogICAgb2UucGF0aC5jb3B5dHJlZSgpIHNob3VsZCBwcmVzZXJ2ZSB4YXR0ciBvbiBjb3BpZWQgZmlsZXMKKyAgICAgICAgRXhwZWN0ZWQ6ICAgdGVzdHhhdHRyIGZpbGUgaW4gZGVzdGluYXRpb24gc2hvdWxkIGhhdmUgdXNlci5vZXRlc3QKKyAgICAgICAgICAgICAgICAgICAgZXh0ZW5kZWQgYXR0cmlidXRlCisgICAgICAgIFByb2R1Y3Q6ICAgIE9FLUNvcmUKKyAgICAgICAgQXV0aG9yOiAgICAgSm9zaHVhIExvY2sgPGpvc2h1YS5nLmxvY2tAaW50ZWwuY29tPgorICAgICAgICAiIiIKKyAgICAgICAgdGVzdGxvYyA9IG9lLnBhdGguam9pbihzZWxmLnRtcF9kaXIsICdsaWJvZXRlc3RzJykKKyAgICAgICAgc3JjID0gb2UucGF0aC5qb2luKHRlc3Rsb2MsICdzcmMnKQorICAgICAgICBkc3QgPSBvZS5wYXRoLmpvaW4odGVzdGxvYywgJ2RzdCcpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih0ZXN0bG9jKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc3JjKQorICAgICAgICB0ZXN0ZmlsZW5hbWUgPSAndGVzdHhhdHRyJworCisgICAgICAgICMgZW5zdXJlIHdlIGhhdmUgc2V0ZmF0dHIgYXZhaWxhYmxlCisgICAgICAgIGJpdGJha2UoImF0dHItbmF0aXZlIikKKworICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWydTWVNST09UX0RFU1RESVInLCAnYmluZGlyJ10sICdhdHRyLW5hdGl2ZScpCisgICAgICAgIGRlc3RkaXIgPSBiYl92YXJzWydTWVNST09UX0RFU1RESVInXQorICAgICAgICBiaW5kaXIgPSBiYl92YXJzWydiaW5kaXInXQorICAgICAgICBiaW5kaXIgPSBkZXN0ZGlyICsgYmluZGlyCisKKyAgICAgICAgIyBjcmVhdGUgYSBmaWxlIHdpdGggeGF0dHIgYW5kIGNvcHkgaXQKKyAgICAgICAgb3BlbihvZS5wYXRoLmpvaW4oc3JjLCB0ZXN0ZmlsZW5hbWUpLCAndytiJykuY2xvc2UoKQorICAgICAgICBydW5DbWQoJyVzL3NldGZhdHRyIC1uIHVzZXIub2V0ZXN0IC12ICJ0ZXN0aW5nIGxpYm9lIiAlcycgJSAoYmluZGlyLCBvZS5wYXRoLmpvaW4oc3JjLCB0ZXN0ZmlsZW5hbWUpKSkKKyAgICAgICAgb2UucGF0aC5jb3B5dHJlZShzcmMsIGRzdCkKKworICAgICAgICAjIGVuc3VyZSBmaWxlIGluIGRlc3QgaGFzIHVzZXIub2V0ZXN0IHhhdHRyCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnJXMvZ2V0ZmF0dHIgLW4gdXNlci5vZXRlc3QgJXMnICUgKGJpbmRpciwgb2UucGF0aC5qb2luKGRzdCwgdGVzdGZpbGVuYW1lKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3VzZXIub2V0ZXN0PSJ0ZXN0aW5nIGxpYm9lIicsIHJlc3VsdC5vdXRwdXQsICdFeHRlbmRlZCBhdHRyaWJ1dGUgbm90IHNlcnQgaW4gZHN0JykKKworICAgICAgICBvZS5wYXRoLnJlbW92ZSh0ZXN0bG9jKQorCisgICAgQE9FVGVzdElEKDE2MzQpCisgICAgZGVmIHRlc3RfY29weV9oYXJkbGlua190cmVlX2NvdW50KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogICAgb2UucGF0aC5jb3B5aGFyZGxpbmt0cmVlKCkgc2hvdWxkbid0IG1pc3Mgb3V0IGZpbGVzCisgICAgICAgIEV4cGVjdGVkOiAgIHNyYyBhbmQgZHN0IHNob3VsZCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBmaWxlcworICAgICAgICBQcm9kdWN0OiAgICBPRS1Db3JlCisgICAgICAgIEF1dGhvcjogICAgIEpvc2h1YSBMb2NrIDxqb3NodWEuZy5sb2NrQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisgICAgICAgIHRlc3Rsb2MgPSBvZS5wYXRoLmpvaW4oc2VsZi50bXBfZGlyLCAnbGlib2V0ZXN0cycpCisgICAgICAgIHNyYyA9IG9lLnBhdGguam9pbih0ZXN0bG9jLCAnc3JjJykKKyAgICAgICAgZHN0ID0gb2UucGF0aC5qb2luKHRlc3Rsb2MsICdkc3QnKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodGVzdGxvYykKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNyYykKKyAgICAgICAgdGVzdGZpbGVzID0gWydmb28nLCAnYmFyJywgJy5iYXonLCAncXV1eCddCisKKyAgICAgICAgZGVmIHRvdWNoZmlsZSh0Zik6CisgICAgICAgICAgICBvcGVuKG9lLnBhdGguam9pbihzcmMsIHRmKSwgJ3crYicpLmNsb3NlKCkKKworICAgICAgICBmb3IgZiBpbiB0ZXN0ZmlsZXM6CisgICAgICAgICAgICB0b3VjaGZpbGUoZikKKworICAgICAgICBvZS5wYXRoLmNvcHloYXJkbGlua3RyZWUoc3JjLCBkc3QpCisKKyAgICAgICAgZHN0Y250ID0gbGVuKG9zLmxpc3RkaXIoZHN0KSkKKyAgICAgICAgc3JjY250ID0gbGVuKG9zLmxpc3RkaXIoc3JjKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZHN0Y250LCBsZW4odGVzdGZpbGVzKSwgIk51bWJlciBvZiBmaWxlcyBpbiBkc3QgKCVzKSBkaWZmZXJzIGZyb20gbnVtYmVyIG9mIGZpbGVzIGluIHNyYyglcykuIiAlIChkc3RjbnQsIHNyY2NudCkpCisKKyAgICAgICAgb2UucGF0aC5yZW1vdmUodGVzdGxvYykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL2xpY19jaGVja3N1bS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL2xpY19jaGVja3N1bS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzQwNzE1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvbGljX2NoZWNrc3VtLnB5CkBAIC0wLDAgKzEsMzUgQEAKK2ltcG9ydCBvcworaW1wb3J0IHRlbXBmaWxlCisKK2Zyb20gb2VxYS5zZWxmdGVzdC5jYXNlIGltcG9ydCBPRVNlbGZ0ZXN0VGVzdENhc2UKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgYml0YmFrZQorZnJvbSBvZXFhLnV0aWxzIGltcG9ydCBDb21tYW5kRXJyb3IKK2Zyb20gb2VxYS5jb3JlLmRlY29yYXRvci5vZWlkIGltcG9ydCBPRVRlc3RJRAorCitjbGFzcyBMaWNlbnNlVGVzdHMoT0VTZWxmdGVzdFRlc3RDYXNlKToKKworICAgICMgVmVyaWZ5IHRoYXQgY2hhbmdpbmcgYSBsaWNlbnNlIGZpbGUgdGhhdCBoYXMgYW4gYWJzb2x1dGUgcGF0aCBjYXVzZXMKKyAgICAjIHRoZSBsaWNlbnNlIHFhIHRvIGZhaWwgZHVlIHRvIGEgbWlzbWF0Y2hlZCBtZDVzdW0uCisgICAgQE9FVGVzdElEKDExOTcpCisgICAgZGVmIHRlc3Rfbm9ubWF0Y2hpbmdfY2hlY2tzdW0oc2VsZik6CisgICAgICAgIGJpdGJha2VfY21kID0gJy1jIHBvcHVsYXRlX2xpYyBlbXB0eXRlc3QnCisgICAgICAgIGVycm9yX21zZyA9ICdlbXB0eXRlc3Q6IFRoZSBuZXcgbWQ1IGNoZWNrc3VtIGlzIDhkNzc3ZjM4NWQzZGZlYzg4MTVkMjBmNzQ5NjAyNmRjJworCisgICAgICAgIGxpY19maWxlLCBsaWNfcGF0aCA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICBvcy5jbG9zZShsaWNfZmlsZSkKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChsaWNfcGF0aCkKKworICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYygnZW1wdHl0ZXN0JywgIiIiCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJXM7bWQ1PWQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlIgorU1JDX1VSSSA9ICJmaWxlOi8vJXM7bWQ1PWQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlIgorIiIiICUgKGxpY19wYXRoLCBsaWNfcGF0aCkpCisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoYml0YmFrZV9jbWQpCisKKyAgICAgICAgd2l0aCBvcGVuKGxpY19wYXRoLCAidyIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCJkYXRhIikKKworICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiSU5IRVJJVF9yZW1vdmUgPSBcInJlcG9ydC1lcnJvclwiIikKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZShiaXRiYWtlX2NtZCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBpZiBlcnJvcl9tc2cgbm90IGluIHJlc3VsdC5vdXRwdXQ6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcihyZXN1bHQub3V0cHV0KQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvbWFuaWZlc3QucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9tYW5pZmVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDYwNzE5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvbWFuaWZlc3QucHkKQEAgLTAsMCArMSwxNjYgQEAKK2ltcG9ydCBvcworCitmcm9tIG9lcWEuc2VsZnRlc3QuY2FzZSBpbXBvcnQgT0VTZWxmdGVzdFRlc3RDYXNlCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IGdldF9iYl92YXIsIGdldF9iYl92YXJzLCBiaXRiYWtlCitmcm9tIG9lcWEuY29yZS5kZWNvcmF0b3Iub2VpZCBpbXBvcnQgT0VUZXN0SUQKKworY2xhc3MgTWFuaWZlc3RFbnRyeToKKyAgICAnJydBIG1hbmlmZXN0IGl0ZW0gb2YgYSBjb2xsZWN0aW9uIGFibGUgdG8gbGlzdCBtaXNzaW5nIHBhY2thZ2VzJycnCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVudHJ5KToKKyAgICAgICAgc2VsZi5maWxlID0gZW50cnkKKyAgICAgICAgc2VsZi5taXNzaW5nID0gW10KKworY2xhc3MgVmVyaWZ5TWFuaWZlc3QoT0VTZWxmdGVzdFRlc3RDYXNlKToKKyAgICAnJydUZXN0cyBmb3IgdGhlIG1hbmlmZXN0IGZpbGVzIGFuZCBjb250ZW50cyBvZiBhbiBpbWFnZScnJworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGNoZWNrX21hbmlmZXN0X2VudHJpZXMoc2VsZiwgbWFuaWZlc3QsIHBhdGgpOgorICAgICAgICBtYW5pZmVzdF9lcnJvcnMgPSBbXQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4obWFuaWZlc3QsICJyIikgYXMgbWZpbGU6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gbWZpbGU6CisgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0X2VudHJ5ID0gb3MucGF0aC5qb2luKHBhdGgsIGxpbmUuc3BsaXQoKVswXSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoInt9OiBsb29raW5nIGZvciB7fSJcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYuY2xhc3NuYW1lLCBtYW5pZmVzdF9lbnRyeSkpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShtYW5pZmVzdF9lbnRyeSk6CisgICAgICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdF9lcnJvcnMuYXBwZW5kKG1hbmlmZXN0X2VudHJ5KQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoInt9OiB7fSBub3QgZm91bmQiXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZWxmLmNsYXNzbmFtZSwgbWFuaWZlc3RfZW50cnkpKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoInt9OiBjaGVja2luZyBvZiB7fSBmYWlsZWQiXAorICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYuY2xhc3NuYW1lLCBtYW5pZmVzdCkpCisgICAgICAgICAgICByYWlzZSBlCisKKyAgICAgICAgcmV0dXJuIG1hbmlmZXN0X2Vycm9ycworCisgICAgI3RoaXMgd2lsbCBwb3NzaWJseSBtb3ZlIGZyb20gaGVyZQorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBnZXRfZGlyX2Zyb21fYmJfdmFyKHNlbGYsIGJiX3ZhciwgdGFyZ2V0ID0gTm9uZSk6CisgICAgICAgIHRhcmdldCA9PSBzZWxmLmJ1aWxkdGFyZ2V0IGlmIHRhcmdldCA9PSBOb25lIGVsc2UgdGFyZ2V0CisgICAgICAgIGRpcmVjdG9yeSA9IGdldF9iYl92YXIoYmJfdmFyLCB0YXJnZXQpOworICAgICAgICBpZiBub3QgZGlyZWN0b3J5IG9yIG5vdCBvcy5wYXRoLmlzZGlyKGRpcmVjdG9yeSk6CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1Zygie306IHt9IHBvaW50cyB0byB7fSB3aGVuIHRhcmdldCA9IHt9IlwKKyAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZWxmLmNsYXNzbmFtZSwgYmJfdmFyLCBkaXJlY3RvcnksIHRhcmdldCkpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIHJldHVybiBkaXJlY3RvcnkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorCisgICAgICAgIHN1cGVyKFZlcmlmeU1hbmlmZXN0LCBzZWxmKS5zZXRVcENsYXNzKCkKKyAgICAgICAgc2VsZi5idWlsZHRhcmdldCA9ICdjb3JlLWltYWdlLW1pbmltYWwnCisgICAgICAgIHNlbGYuY2xhc3NuYW1lID0gJ1ZlcmlmeU1hbmlmZXN0JworCisgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oInt9OiBkb2luZyBiaXRiYWtlIHt9IGFzIGEgcHJlcmVxdWlzaXRlIG9mIHRoZSB0ZXN0IlwKKyAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYuY2xhc3NuYW1lLCBzZWxmLmJ1aWxkdGFyZ2V0KSkKKyAgICAgICAgaWYgYml0YmFrZShzZWxmLmJ1aWxkdGFyZ2V0KS5zdGF0dXM6CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1Zygie30gRmFpbGVkIHRvIHNldHVwIHt9IlwKKyAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZWxmLmNsYXNzbmFtZSwgc2VsZi5idWlsZHRhcmdldCkpCisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJ7fTogQ2Fubm90IHNldHVwIHRlc3Rpbmcgc2NlbmFyaW8iXAorICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYuY2xhc3NuYW1lKSkKKworICAgIEBPRVRlc3RJRCgxMzgwKQorICAgIGRlZiB0ZXN0X1NES19tYW5pZmVzdF9lbnRyaWVzKHNlbGYpOgorICAgICAgICAnJydWZXJpZnlpbmcgdGhlIFNESyBtYW5pZmVzdCBlbnRyaWVzIGV4aXN0LCB0aGlzIG1heSB0YWtlIGEgYnVpbGQnJycKKworICAgICAgICAjIHRoZSBzZXR1cCBzaG91bGQgYml0YmFrZSBjb3JlLWltYWdlLW1pbmltYWwgYW5kIGhlcmUgaXQgaXMgcmVxdWlyZWQKKyAgICAgICAgIyB0byBkbyBhbiBhZGRpdGlvbmFsIHNldHVwIGZvciB0aGUgc2RrCisgICAgICAgIHNka3Rhc2sgPSAnLWMgcG9wdWxhdGVfc2RrJworICAgICAgICBiYmFyZ3MgPSBzZGt0YXNrICsgJyAnICsgc2VsZi5idWlsZHRhcmdldAorICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1Zygie306IGRvaW5nIGJpdGJha2Uge30gYXMgYSBwcmVyZXF1aXNpdGUgb2YgdGhlIHRlc3QiXAorICAgICAgICAgICAgICAgIC5mb3JtYXQoc2VsZi5jbGFzc25hbWUsIGJiYXJncykpCisgICAgICAgIGlmIGJpdGJha2UoYmJhcmdzKS5zdGF0dXM6CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1Zygie30gRmFpbGVkIHRvIGJpdGJha2Uge30iXAorICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYuY2xhc3NuYW1lLCBiYmFyZ3MpKQorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgie306IENhbm5vdCBzZXR1cCB0ZXN0aW5nIHNjZW5hcmlvIlwKKyAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZWxmLmNsYXNzbmFtZSkpCisKKworICAgICAgICBwa2dkYXRhX2RpciA9IHJldmVyc2VfZGlyID0ge30KKyAgICAgICAgbWZpbGVuYW1lID0gbXBhdGggPSBtX2VudHJ5ID0ge30KKyAgICAgICAgIyBnZXQgbWFuaWZlc3QgbG9jYXRpb24gYmFzZWQgb24gdGFyZ2V0IHRvIHF1ZXJ5IGFib3V0CisgICAgICAgIGRfdGFyZ2V0PSBkaWN0KHRhcmdldCA9IHNlbGYuYnVpbGR0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCA9ICduYXRpdmVzZGstcGFja2FnZWdyb3VwLXNkay1ob3N0JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbWRpciA9IHNlbGYuZ2V0X2Rpcl9mcm9tX2JiX3ZhcignU0RLX0RFUExPWScsIHNlbGYuYnVpbGR0YXJnZXQpCisgICAgICAgICAgICBmb3IgayBpbiBkX3RhcmdldC5rZXlzKCk6CisgICAgICAgICAgICAgICAgYmJfdmFycyA9IGdldF9iYl92YXJzKFsnU0RLX05BTUUnLCAnU0RLX1ZFUlNJT04nXSwgc2VsZi5idWlsZHRhcmdldCkKKyAgICAgICAgICAgICAgICBtZmlsZW5hbWVba10gPSAie30tdG9vbGNoYWluLXt9Lnt9Lm1hbmlmZXN0Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICBiYl92YXJzWydTREtfTkFNRSddLAorICAgICAgICAgICAgICAgICAgICAgICAgYmJfdmFyc1snU0RLX1ZFUlNJT04nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGspCisgICAgICAgICAgICAgICAgbXBhdGhba10gPSBvcy5wYXRoLmpvaW4obWRpciwgbWZpbGVuYW1lW2tdKQorICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShtcGF0aFtrXSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJ7fToge30gZG9lcyBub3QgZXhpc3QiLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xhc3NuYW1lLCBtcGF0aFtrXSkpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKKyAgICAgICAgICAgICAgICBtX2VudHJ5W2tdID0gTWFuaWZlc3RFbnRyeShtcGF0aFtrXSkKKworICAgICAgICAgICAgICAgIHBrZ2RhdGFfZGlyW2tdID0gc2VsZi5nZXRfZGlyX2Zyb21fYmJfdmFyKCdQS0dEQVRBX0RJUicsCisgICAgICAgICAgICAgICAgICAgICAgICBkX3RhcmdldFtrXSkKKyAgICAgICAgICAgICAgICByZXZlcnNlX2RpcltrXSA9IG9zLnBhdGguam9pbihwa2dkYXRhX2RpcltrXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdydW50aW1lLXJldmVyc2UnKQorICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhyZXZlcnNlX2RpcltrXSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJ7fToge30gZG9lcyBub3QgZXhpc3QiLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xhc3NuYW1lLCByZXZlcnNlX2RpcltrXSkpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICByYWlzZSBzZWxmLnNraXBUZXN0KCJ7fTogRXJyb3IgaW4gb2J0YWluaW5nIG1hbmlmZXN0IGRpcnMiXAorICAgICAgICAgICAgICAgIC5mb3JtYXQoc2VsZi5jbGFzc25hbWUpKQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIG1zZyA9ICJ7fTogRXJyb3IgY2Fubm90IGZpbmQgbWFuaWZlc3RzIGluIHRoZSBzcGVjaWZpZWQgZGlyOlxue30iXAorICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYuY2xhc3NuYW1lLCBtZGlyKQorICAgICAgICAgICAgc2VsZi5mYWlsKG1zZykKKworICAgICAgICBmb3IgayBpbiBkX3RhcmdldC5rZXlzKCk6CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1Zygie306IENoZWNrIG1hbmlmZXN0IHt9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgc2VsZi5jbGFzc25hbWUsIG1fZW50cnlba10uZmlsZSkpCisKKyAgICAgICAgICAgIG1fZW50cnlba10ubWlzc2luZyA9IHNlbGYuY2hlY2tfbWFuaWZlc3RfZW50cmllcyhcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZW50cnlba10uZmlsZSxyZXZlcnNlX2RpcltrXSkKKyAgICAgICAgICAgIGlmIG1fZW50cnlba10ubWlzc2luZzoKKyAgICAgICAgICAgICAgICBtc2cgPSAne306IHt9IEVycm9yIGhhcyB0aGUgZm9sbG93aW5nIG1pc3NpbmcgZW50cmllcydcCisgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYuY2xhc3NuYW1lLCBtX2VudHJ5W2tdLmZpbGUpCisgICAgICAgICAgICAgICAgbG9nbXNnID0gbXNnKyc6XG4nKydcbicuam9pbihtX2VudHJ5W2tdLm1pc3NpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcobG9nbXNnKQorICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8obXNnKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbChsb2dtc2cpCisKKyAgICBAT0VUZXN0SUQoMTM4MSkKKyAgICBkZWYgdGVzdF9pbWFnZV9tYW5pZmVzdF9lbnRyaWVzKHNlbGYpOgorICAgICAgICAnJydWZXJpZnlpbmcgdGhlIGltYWdlIG1hbmlmZXN0IGVudHJpZXMgZXhpc3QnJycKKworICAgICAgICAjIGdldCBtYW5pZmVzdCBsb2NhdGlvbiBiYXNlZCBvbiB0YXJnZXQgdG8gcXVlcnkgYWJvdXQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbWRpciA9IHNlbGYuZ2V0X2Rpcl9mcm9tX2JiX3ZhcignREVQTE9ZX0RJUl9JTUFHRScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkdGFyZ2V0KQorICAgICAgICAgICAgbWZpbGVuYW1lID0gZ2V0X2JiX3ZhcigiSU1BR0VfTElOS19OQU1FIiwgc2VsZi5idWlsZHRhcmdldClcCisgICAgICAgICAgICAgICAgICAgICsgIi5tYW5pZmVzdCIKKyAgICAgICAgICAgIG1wYXRoID0gb3MucGF0aC5qb2luKG1kaXIsIG1maWxlbmFtZSkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShtcGF0aCk6IHJhaXNlIElPRXJyb3IKKyAgICAgICAgICAgIG1fZW50cnkgPSBNYW5pZmVzdEVudHJ5KG1wYXRoKQorCisgICAgICAgICAgICBwa2dkYXRhX2RpciA9IHt9CisgICAgICAgICAgICBwa2dkYXRhX2RpciA9IHNlbGYuZ2V0X2Rpcl9mcm9tX2JiX3ZhcignUEtHREFUQV9ESVInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5idWlsZHRhcmdldCkKKyAgICAgICAgICAgIHJldmRpciA9IG9zLnBhdGguam9pbihwa2dkYXRhX2RpciwgJ3J1bnRpbWUtcmV2ZXJzZScpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocmV2ZGlyKTogcmFpc2UgSU9FcnJvcgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuc2tpcFRlc3QoInt9OiBFcnJvciBpbiBvYnRhaW5pbmcgbWFuaWZlc3QgZGlycyJcCisgICAgICAgICAgICAgICAgLmZvcm1hdChzZWxmLmNsYXNzbmFtZSkpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgbXNnID0gInt9OiBFcnJvciBjYW5ub3QgZmluZCBtYW5pZmVzdHMgaW4gZGlyOlxue30iXAorICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYuY2xhc3NuYW1lLCBtZGlyKQorICAgICAgICAgICAgc2VsZi5mYWlsKG1zZykKKworICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1Zygie306IENoZWNrIG1hbmlmZXN0IHt9IlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYuY2xhc3NuYW1lLCBtX2VudHJ5LmZpbGUpKQorICAgICAgICBtX2VudHJ5Lm1pc3NpbmcgPSBzZWxmLmNoZWNrX21hbmlmZXN0X2VudHJpZXMoXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZW50cnkuZmlsZSwgcmV2ZGlyKQorICAgICAgICBpZiBtX2VudHJ5Lm1pc3Npbmc6CisgICAgICAgICAgICBtc2cgPSAne306IHt9IEVycm9yIGhhcyB0aGUgZm9sbG93aW5nIG1pc3NpbmcgZW50cmllcydcCisgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2VsZi5jbGFzc25hbWUsIG1fZW50cnkuZmlsZSkKKyAgICAgICAgICAgIGxvZ21zZyA9IG1zZysnOlxuJysnXG4nLmpvaW4obV9lbnRyeS5taXNzaW5nKQorICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcobG9nbXNnKQorICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbyhtc2cpCisgICAgICAgICAgICBzZWxmLmZhaWwobG9nbXNnKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvb2VsaWIvX19pbml0X18ucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9vZWxpYi9fX2luaXRfXy5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvb2VsaWIvX19pbml0X18ucHkKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL29lbGliL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9vZWxpYi9idWlsZGhpc3RvcnkucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9vZWxpYi9idWlsZGhpc3RvcnkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg2NzVmZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL29lbGliL2J1aWxkaGlzdG9yeS5weQpAQCAtMCwwICsxLDk5IEBACitpbXBvcnQgb3MKK2Zyb20gb2VxYS5zZWxmdGVzdC5jYXNlIGltcG9ydCBPRVNlbGZ0ZXN0VGVzdENhc2UKK2ltcG9ydCB0ZW1wZmlsZQorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBnZXRfYmJfdmFyCitmcm9tIG9lcWEuY29yZS5kZWNvcmF0b3Iub2VpZCBpbXBvcnQgT0VUZXN0SUQKKworY2xhc3MgVGVzdEJsb2JQYXJzaW5nKE9FU2VsZnRlc3RUZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgIHNlbGYucmVwb19wYXRoID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J3NlbGZ0ZXN0LWJ1aWxkaGlzdG9yeScsCisgICAgICAgICAgICBkaXI9Z2V0X2JiX3ZhcignVE9QRElSJykpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJvbSBnaXQgaW1wb3J0IFJlcG8KKyAgICAgICAgICAgIHNlbGYucmVwbyA9IFJlcG8uaW5pdChzZWxmLnJlcG9fcGF0aCkKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnUHl0aG9uIG1vZHVsZSBHaXRQeXRob24gaXMgbm90IHByZXNlbnQnKQorCisgICAgICAgIHNlbGYudGVzdF9maWxlID0gInRlc3QiCisgICAgICAgIHNlbGYudmFyX21hcCA9IHt9CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGltcG9ydCBzaHV0aWwKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLnJlcG9fcGF0aCkKKworICAgIGRlZiBjb21taXRfdmFycyhzZWxmLCB0b19hZGQ9e30sIHRvX3JlbW92ZSA9IFtdLCBtc2c9IkEgY29tbWl0IG1lc3NhZ2UiKToKKyAgICAgICAgaWYgbGVuKHRvX2FkZCkgPT0gMCBhbmQgbGVuKHRvX3JlbW92ZSkgPT0gMDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGZvciBrIGluIHRvX3JlbW92ZToKKyAgICAgICAgICAgIHNlbGYudmFyX21hcC5wb3AoeCxOb25lKQorICAgICAgICBmb3IgayBpbiB0b19hZGQ6CisgICAgICAgICAgICBzZWxmLnZhcl9tYXBba10gPSB0b19hZGRba10KKworICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYucmVwb19wYXRoLCBzZWxmLnRlc3RfZmlsZSksICd3JykgYXMgcmVwb19maWxlOgorICAgICAgICAgICAgZm9yIGsgaW4gc2VsZi52YXJfbWFwOgorICAgICAgICAgICAgICAgIHJlcG9fZmlsZS53cml0ZSgiJXMgPSAlc1xuIiAlIChrLCBzZWxmLnZhcl9tYXBba10pKQorCisgICAgICAgIHNlbGYucmVwby5naXQuYWRkKCItLWFsbCIpCisgICAgICAgIHNlbGYucmVwby5naXQuY29tbWl0KG1lc3NhZ2U9bXNnKQorCisgICAgQE9FVGVzdElEKDE4NTkpCisgICAgZGVmIHRlc3RfYmxvYl90b19kaWN0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdCBjb252ZXJ0aW9uIG9mIGdpdCBibG9icyB0byBkaWN0aW9uYXJ5CisgICAgICAgICIiIgorICAgICAgICBmcm9tIG9lLmJ1aWxkaGlzdG9yeV9hbmFseXNpcyBpbXBvcnQgYmxvYl90b19kaWN0CisgICAgICAgIHZhbHVlc21hcCA9IHsgImZvbyIgOiAiMSIsICJiYXIiIDogIjIiIH0KKyAgICAgICAgc2VsZi5jb21taXRfdmFycyh0b19hZGQgPSB2YWx1ZXNtYXApCisKKyAgICAgICAgYmxvYiA9IHNlbGYucmVwby5oZWFkLmNvbW1pdC50cmVlLmJsb2JzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzbWFwLCBibG9iX3RvX2RpY3QoYmxvYiksCisgICAgICAgICAgICAiY29tbWl0IHdhcyBub3QgdHJhbnNsYXRlZCBjb3JyZWN0bHkgdG8gZGljdGlvbmFyeSIpCisKKyAgICBAT0VUZXN0SUQoMTg2MCkKKyAgICBkZWYgdGVzdF9jb21wYXJlX2RpY3RfYmxvYnMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUZXN0IGNvbXBhcmlzc29uIG9mIGRpY3Rpb25hcmllcyBleHRyYWN0ZWQgZnJvbSBnaXQgYmxvYnMKKyAgICAgICAgIiIiCisgICAgICAgIGZyb20gb2UuYnVpbGRoaXN0b3J5X2FuYWx5c2lzIGltcG9ydCBjb21wYXJlX2RpY3RfYmxvYnMKKworICAgICAgICBjaGFuZ2VzbWFwID0geyAiZm9vLTIiIDogKCIyIiwgIjgiKSwgImJhciIgOiAoIiIsIjQiKSwgImJhci0yIiA6ICgiIiwiNSIpfQorCisgICAgICAgIHNlbGYuY29tbWl0X3ZhcnModG9fYWRkID0geyAiZm9vIiA6ICIxIiwgImZvby0yIiA6ICIyIiwgImZvby0zIiA6ICIzIiB9KQorICAgICAgICBibG9iMSA9IHNlbGYucmVwby5oZWFkcy5tYXN0ZXIuY29tbWl0LnRyZWUuYmxvYnNbMF0KKworICAgICAgICBzZWxmLmNvbW1pdF92YXJzKHRvX2FkZCA9IHsgImZvby0yIiA6ICI4IiwgImJhciIgOiAiNCIsICJiYXItMiIgOiAiNSIgfSkKKyAgICAgICAgYmxvYjIgPSBzZWxmLnJlcG8uaGVhZHMubWFzdGVyLmNvbW1pdC50cmVlLmJsb2JzWzBdCisKKyAgICAgICAgY2hhbmdlX3JlY29yZHMgPSBjb21wYXJlX2RpY3RfYmxvYnMob3MucGF0aC5qb2luKHNlbGYucmVwb19wYXRoLCBzZWxmLnRlc3RfZmlsZSksCisgICAgICAgICAgICBibG9iMSwgYmxvYjIsIEZhbHNlLCBGYWxzZSkKKworICAgICAgICB2YXJfY2hhbmdlcyA9IHsgeC5maWVsZG5hbWUgOiAoeC5vbGR2YWx1ZSwgeC5uZXd2YWx1ZSkgZm9yIHggaW4gY2hhbmdlX3JlY29yZHN9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hhbmdlc21hcCwgdmFyX2NoYW5nZXMsICJDaGFuZ2VzIG5vdCByZXBvcnRlZCBjb3JyZWN0bHkiKQorCisgICAgQE9FVGVzdElEKDE4NjEpCisgICAgZGVmIHRlc3RfY29tcGFyZV9kaWN0X2Jsb2JzX2RlZmF1bHQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUZXN0IGRlZmF1bHQgdmFsdWVzIGZvciBjb21wYXJpc3NvbiBvZiBnaXQgYmxvYiBkaWN0aW9uYXJpZXMKKyAgICAgICAgIiIiCisgICAgICAgIGZyb20gb2UuYnVpbGRoaXN0b3J5X2FuYWx5c2lzIGltcG9ydCBjb21wYXJlX2RpY3RfYmxvYnMKKyAgICAgICAgZGVmYXVsdG1hcCA9IHsgeCA6ICgiZGVmYXVsdCIsICIxIikgIGZvciB4IGluIFsiUEtHIiwgIlBLR0UiLCAiUEtHViIsICJQS0dSIl19CisKKyAgICAgICAgc2VsZi5jb21taXRfdmFycyh0b19hZGQgPSB7ICJmb28iIDogIjEiIH0pCisgICAgICAgIGJsb2IxID0gc2VsZi5yZXBvLmhlYWRzLm1hc3Rlci5jb21taXQudHJlZS5ibG9ic1swXQorCisgICAgICAgIHNlbGYuY29tbWl0X3ZhcnModG9fYWRkID0geyAiUEtHIiA6ICIxIiwgIlBLR0UiIDogIjEiLCAiUEtHViIgOiAiMSIsICJQS0dSIiA6ICIxIiB9KQorICAgICAgICBibG9iMiA9IHNlbGYucmVwby5oZWFkcy5tYXN0ZXIuY29tbWl0LnRyZWUuYmxvYnNbMF0KKworICAgICAgICBjaGFuZ2VfcmVjb3JkcyA9IGNvbXBhcmVfZGljdF9ibG9icyhvcy5wYXRoLmpvaW4oc2VsZi5yZXBvX3BhdGgsIHNlbGYudGVzdF9maWxlKSwKKyAgICAgICAgICAgIGJsb2IxLCBibG9iMiwgRmFsc2UsIEZhbHNlKQorCisgICAgICAgIHZhcl9jaGFuZ2VzID0ge30KKyAgICAgICAgZm9yIHggaW4gY2hhbmdlX3JlY29yZHM6CisgICAgICAgICAgICBvbGR2YWx1ZSA9ICJkZWZhdWx0IiBpZiAoImRlZmF1bHQiIGluIHgub2xkdmFsdWUpIGVsc2UgeC5vbGR2YWx1ZQorICAgICAgICAgICAgdmFyX2NoYW5nZXNbeC5maWVsZG5hbWVdID0gKG9sZHZhbHVlLCB4Lm5ld3ZhbHVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVmYXVsdG1hcCwgdmFyX2NoYW5nZXMsICJEZWZhdWx0cyBub3Qgc2V0IHByb3Blcmx5IikKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL29lbGliL2VsZi5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL29lbGliL2VsZi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGVlNmExCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvb2VsaWIvZWxmLnB5CkBAIC0wLDAgKzEsMjEgQEAKK2Zyb20gdW5pdHRlc3QuY2FzZSBpbXBvcnQgVGVzdENhc2UKK2ltcG9ydCBvZS5xYQorCitjbGFzcyBUZXN0RWxmKFRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9tYWNoaW5lX25hbWUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUZXN0IGVsZl9tYWNoaW5lX3RvX3N0cmluZygpCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9lLnFhLmVsZl9tYWNoaW5lX3RvX3N0cmluZygweDAyKSwgIlNQQVJDIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZS5xYS5lbGZfbWFjaGluZV90b19zdHJpbmcoMHgwMyksICJ4ODYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9lLnFhLmVsZl9tYWNoaW5lX3RvX3N0cmluZygweDA4KSwgIk1JUFMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9lLnFhLmVsZl9tYWNoaW5lX3RvX3N0cmluZygweDE0KSwgIlBvd2VyUEMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9lLnFhLmVsZl9tYWNoaW5lX3RvX3N0cmluZygweDI4KSwgIkFSTSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2UucWEuZWxmX21hY2hpbmVfdG9fc3RyaW5nKDB4MkEpLCAiU3VwZXJIIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZS5xYS5lbGZfbWFjaGluZV90b19zdHJpbmcoMHgzMiksICJJQS02NCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2UucWEuZWxmX21hY2hpbmVfdG9fc3RyaW5nKDB4M0UpLCAieDg2LTY0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZS5xYS5lbGZfbWFjaGluZV90b19zdHJpbmcoMHhCNyksICJBQXJjaDY0IikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9lLnFhLmVsZl9tYWNoaW5lX3RvX3N0cmluZygweDAwKSwgIlVua25vd24gKDApIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZS5xYS5lbGZfbWFjaGluZV90b19zdHJpbmcoMHhERUFEQkVFRiksICJVbmtub3duICgzNzM1OTI4NTU5KSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2UucWEuZWxmX21hY2hpbmVfdG9fc3RyaW5nKCJmb29iYXIiKSwgIlVua25vd24gKCdmb29iYXInKSIpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9vZWxpYi9saWNlbnNlLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvb2VsaWIvbGljZW5zZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2Y5MWZiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvb2VsaWIvbGljZW5zZS5weQpAQCAtMCwwICsxLDk5IEBACitmcm9tIHVuaXR0ZXN0LmNhc2UgaW1wb3J0IFRlc3RDYXNlCitpbXBvcnQgb2UubGljZW5zZQorCitjbGFzcyBTZWVuVmlzaXRvcihvZS5saWNlbnNlLkxpY2Vuc2VWaXNpdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuc2VlbiA9IFtdCisgICAgICAgIG9lLmxpY2Vuc2UuTGljZW5zZVZpc2l0b3IuX19pbml0X18oc2VsZikKKworICAgIGRlZiB2aXNpdF9TdHIoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYuc2Vlbi5hcHBlbmQobm9kZS5zKQorCitjbGFzcyBUZXN0U2luZ2xlTGljZW5zZShUZXN0Q2FzZSk6CisgICAgbGljZW5zZXMgPSBbCisgICAgICAgICJHUEx2MiIsCisgICAgICAgICJMR1BMLTIuMCIsCisgICAgICAgICJBcnRpc3RpYyIsCisgICAgICAgICJNSVQiLAorICAgICAgICAiR1BMdjMrIiwKKyAgICAgICAgIkZPT19CQVIiLAorICAgIF0KKyAgICBpbnZhbGlkX2xpY2Vuc2VzID0gWyJHUEwvQlNEIl0KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcGFyc2UobGljZW5zZXN0cik6CisgICAgICAgIHZpc2l0b3IgPSBTZWVuVmlzaXRvcigpCisgICAgICAgIHZpc2l0b3IudmlzaXRfc3RyaW5nKGxpY2Vuc2VzdHIpCisgICAgICAgIHJldHVybiB2aXNpdG9yLnNlZW4KKworICAgIGRlZiB0ZXN0X3NpbmdsZV9saWNlbnNlcyhzZWxmKToKKyAgICAgICAgZm9yIGxpY2Vuc2UgaW4gc2VsZi5saWNlbnNlczoKKyAgICAgICAgICAgIGxpY2Vuc2VzID0gc2VsZi5wYXJzZShsaWNlbnNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwobGljZW5zZXMsIFtsaWNlbnNlXSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfbGljZW5zZXMoc2VsZik6CisgICAgICAgIGZvciBsaWNlbnNlIGluIHNlbGYuaW52YWxpZF9saWNlbnNlczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMob2UubGljZW5zZS5JbnZhbGlkTGljZW5zZSkgYXMgY206CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZShsaWNlbnNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubGljZW5zZSwgbGljZW5zZSkKKworY2xhc3MgVGVzdFNpbXBsZUNvbWJpbmF0aW9ucyhUZXN0Q2FzZSk6CisgICAgdGVzdHMgPSB7CisgICAgICAgICJGT08mQkFSIjogWyJGT08iLCAiQkFSIl0sCisgICAgICAgICJCQVogJiBNT08iOiBbIkJBWiIsICJNT08iXSwKKyAgICAgICAgIkFMUEhBfEJFVEEiOiBbIkFMUEhBIl0sCisgICAgICAgICJCQVomTU9PfEZPTyI6IFsiRk9PIl0sCisgICAgICAgICJGT08mQkFSfEJBWiI6IFsiRk9PIiwgIkJBUiJdLAorICAgIH0KKyAgICBwcmVmZXJyZWQgPSBbIkFMUEhBIiwgIkZPTyIsICJCQVIiXQorCisgICAgZGVmIHRlc3RfdGVzdHMoc2VsZik6CisgICAgICAgIGRlZiBjaG9vc2UoYSwgYik6CisgICAgICAgICAgICBpZiBhbGwobGljIGluIHNlbGYucHJlZmVycmVkIGZvciBsaWMgaW4gYik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGEKKworICAgICAgICBmb3IgbGljZW5zZSwgZXhwZWN0ZWQgaW4gc2VsZi50ZXN0cy5pdGVtcygpOgorICAgICAgICAgICAgbGljZW5zZXMgPSBvZS5saWNlbnNlLmZsYXR0ZW5lZF9saWNlbnNlcyhsaWNlbnNlLCBjaG9vc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChsaWNlbnNlcywgZXhwZWN0ZWQpCisKK2NsYXNzIFRlc3RDb21wbGV4Q29tYmluYXRpb25zKFRlc3RTaW1wbGVDb21iaW5hdGlvbnMpOgorICAgIHRlc3RzID0geworICAgICAgICAiRk9PICYgKEJBUiB8IEJBWikmTU9PIjogWyJGT08iLCAiQkFSIiwgIk1PTyJdLAorICAgICAgICAiKEFMUEhBfChCRVRBJlRIRVRBKXxPTUVHQSkmREVMVEEiOiBbIk9NRUdBIiwgIkRFTFRBIl0sCisgICAgICAgICIoKEFMUEhBfEJFVEEpJkZPTyl8QkFaIjogWyJCRVRBIiwgIkZPTyJdLAorICAgICAgICAiKEdQTC0yLjB8UHJvcHJpZXRhcnkpJkJTRC00LWNsYXVzZSZNSVQiOiBbIkdQTC0yLjAiLCAiQlNELTQtY2xhdXNlIiwgIk1JVCJdLAorICAgIH0KKyAgICBwcmVmZXJyZWQgPSBbIkJBUiIsICJPTUVHQSIsICJCRVRBIiwgIkdQTC0yLjAiXQorCitjbGFzcyBUZXN0SXNJbmNsdWRlZChUZXN0Q2FzZSk6CisgICAgdGVzdHMgPSB7CisgICAgICAgICgiRk9PIHwgQkFSIiwgTm9uZSwgTm9uZSk6CisgICAgICAgICAgICBbVHJ1ZSwgWyJGT08iXV0sCisgICAgICAgICgiRk9PIHwgQkFSIiwgTm9uZSwgIkZPTyIpOgorICAgICAgICAgICAgW1RydWUsIFsiQkFSIl1dLAorICAgICAgICAoIkZPTyB8IEJBUiIsICJCQVIiLCBOb25lKToKKyAgICAgICAgICAgIFtUcnVlLCBbIkJBUiJdXSwKKyAgICAgICAgKCJGT08gfCBCQVIgJiBGT09CQVIiLCAiKkJBUiIsIE5vbmUpOgorICAgICAgICAgICAgW1RydWUsIFsiQkFSIiwgIkZPT0JBUiJdXSwKKyAgICAgICAgKCJGT08gfCBCQVIgJiBGT09CQVIiLCBOb25lLCAiRk9PKiIpOgorICAgICAgICAgICAgW0ZhbHNlLCBbIkZPT0JBUiJdXSwKKyAgICAgICAgKCIoRk9PIHwgQkFSKSAmIEZPT0JBUiB8IEJBUkZPTyIsIE5vbmUsICJGT08iKToKKyAgICAgICAgICAgIFtUcnVlLCBbIkJBUiIsICJGT09CQVIiXV0sCisgICAgICAgICgiKEZPTyB8IEJBUikgJiBGT09CQVIgfCBCQVogJiBNT08gJiBCQVJGT08iLCBOb25lLCAiRk9PIik6CisgICAgICAgICAgICBbVHJ1ZSwgWyJCQVoiLCAiTU9PIiwgIkJBUkZPTyJdXSwKKyAgICAgICAgKCJHUEwtMy4wICYgR1BMLTIuMCAmIExHUEwtMi4xIHwgUHJvcHJpZXRhcnkiLCBOb25lLCBOb25lKToKKyAgICAgICAgICAgIFtUcnVlLCBbIkdQTC0zLjAiLCAiR1BMLTIuMCIsICJMR1BMLTIuMSJdXSwKKyAgICAgICAgKCJHUEwtMy4wICYgR1BMLTIuMCAmIExHUEwtMi4xIHwgUHJvcHJpZXRhcnkiLCBOb25lLCAiR1BMLTMuMCIpOgorICAgICAgICAgICAgW1RydWUsIFsiUHJvcHJpZXRhcnkiXV0sCisgICAgICAgICgiR1BMLTMuMCAmIEdQTC0yLjAgJiBMR1BMLTIuMSB8IFByb3ByaWV0YXJ5IiwgTm9uZSwgIkdQTC0zLjAgUHJvcHJpZXRhcnkiKToKKyAgICAgICAgICAgIFtGYWxzZSwgWyJHUEwtMy4wIl1dCisgICAgfQorCisgICAgZGVmIHRlc3RfdGVzdHMoc2VsZik6CisgICAgICAgIGZvciBhcmdzLCBleHBlY3RlZCBpbiBzZWxmLnRlc3RzLml0ZW1zKCk6CisgICAgICAgICAgICBpc19pbmNsdWRlZCwgbGljZW5zZXMgPSBvZS5saWNlbnNlLmlzX2luY2x1ZGVkKAorICAgICAgICAgICAgICAgIGFyZ3NbMF0sIChhcmdzWzFdIG9yICcnKS5zcGxpdCgpLCAoYXJnc1syXSBvciAnJykuc3BsaXQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNfaW5jbHVkZWQsIGV4cGVjdGVkWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwobGljZW5zZXMsIGV4cGVjdGVkWzFdKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvb2VsaWIvcGF0aC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL29lbGliL3BhdGgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVhMjdjMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL29lbGliL3BhdGgucHkKQEAgLTAsMCArMSw4OSBAQAorZnJvbSB1bml0dGVzdC5jYXNlIGltcG9ydCBUZXN0Q2FzZQoraW1wb3J0IG9lLCBvZS5wYXRoCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBvcworaW1wb3J0IGVycm5vCitpbXBvcnQgc2h1dGlsCisKK2NsYXNzIFRlc3RSZWFsUGF0aChUZXN0Q2FzZSk6CisgICAgRElSUyA9IFsgImEiLCAiYiIsICJldGMiLCAic2JpbiIsICJ1c3IiLCAidXNyL2JpbiIsICJ1c3IvYmluWCIsICJ1c3Ivc2JpbiIsICJ1c3IvaW5jbHVkZSIsICJ1c3IvaW5jbHVkZS9nZGJtIiBdCisgICAgRklMRVMgPSBbICJldGMvcGFzc3dkIiwgImIvZmlsZSIgXQorICAgIExJTktTID0gWworICAgICAgICAoICJiaW4iLCAgICAgICAgICAgICAiL3Vzci9iaW4iLCAgICAgICAgICAgICAiL3Vzci9iaW4iICksCisgICAgICAgICggImJpblgiLCAgICAgICAgICAgICJ1c3IvYmluWCIsICAgICAgICAgICAgICIvdXNyL2JpblgiICksCisgICAgICAgICggImMiLCAgICAgICAgICAgICAgICJicm9rZW4iLCAgICAgICAgICAgICAgICIvYnJva2VuIiApLAorICAgICAgICAoICJldGMvcGFzc3dkLTEiLCAgICAicGFzc3dkIiwgICAgICAgICAgICAgICAiL2V0Yy9wYXNzd2QiICksCisgICAgICAgICggImV0Yy9wYXNzd2QtMiIsICAgICJwYXNzd2QtMSIsICAgICAgICAgICAgICIvZXRjL3Bhc3N3ZCIgKSwKKyAgICAgICAgKCAiZXRjL3Bhc3N3ZC0zIiwgICAgIi9ldGMvcGFzc3dkLTEiLCAgICAgICAgIi9ldGMvcGFzc3dkIiApLAorICAgICAgICAoICJldGMvc2hhZG93LTEiLCAgICAiL2V0Yy9zaGFkb3ciLCAgICAgICAgICAiL2V0Yy9zaGFkb3ciICksCisgICAgICAgICggImV0Yy9zaGFkb3ctMiIsICAgICIvZXRjL3NoYWRvdy0xIiwgICAgICAgICIvZXRjL3NoYWRvdyIgKSwKKyAgICAgICAgKCAicHJvZy1BIiwgICAgICAgICAgImJpbi9wcm9nLUEiLCAgICAgICAgICAgIi91c3IvYmluL3Byb2ctQSIgKSwKKyAgICAgICAgKCAicHJvZy1CIiwgICAgICAgICAgIi9iaW4vcHJvZy1CIiwgICAgICAgICAgIi91c3IvYmluL3Byb2ctQiIgKSwKKyAgICAgICAgKCAidXNyL2Jpbi9wcm9nLUMiLCAgIi4uLy4uL3NiaW4vcHJvZy1DIiwgICAgIi9zYmluL3Byb2ctQyIgKSwKKyAgICAgICAgKCAidXNyL2Jpbi9wcm9nLUQiLCAgIi9zYmluL3Byb2ctRCIsICAgICAgICAgIi9zYmluL3Byb2ctRCIgKSwKKyAgICAgICAgKCAidXNyL2JpblgvcHJvZy1FIiwgIi4uL3NiaW4vcHJvZy1FIiwgICAgICAgTm9uZSApLAorICAgICAgICAoICJ1c3IvYmluL3Byb2ctRiIsICAiLi4vLi4vLi4vc2Jpbi9wcm9nLUYiLCAiL3NiaW4vcHJvZy1GIiApLAorICAgICAgICAoICJsb29wIiwgICAgICAgICAgICAiYS9sb29wIiwgICAgICAgICAgICAgICBOb25lICksCisgICAgICAgICggImEvbG9vcCIsICAgICAgICAgICIuLi9sb29wIiwgICAgICAgICAgICAgIE5vbmUgKSwKKyAgICAgICAgKCAiYi90ZXN0IiwgICAgICAgICAgImZpbGUvZm9vIiwgICAgICAgICAgICAgIi9iL2ZpbGUvZm9vIiApLAorICAgIF0KKworICAgIExJTktTX1BIWVMgPSBbCisgICAgICAgICggIi4vIiwgICAgICAgICAgIi8iLCAgICAgICAgICAgICAgICAiIiApLAorICAgICAgICAoICJiaW5YL3Byb2ctRSIsICIvdXNyL3NiaW4vcHJvZy1FIiwgIi9zYmluL3Byb2ctRSIgKSwKKyAgICBdCisKKyAgICBFWENFUFRJT05TID0gWworICAgICAgICAoICJsb29wIiwgICBlcnJuby5FTE9PUCApLAorICAgICAgICAoICJiL3Rlc3QiLCBlcnJuby5FTk9FTlQgKSwKKyAgICBdCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgI29zLnN5c3RlbSgidHJlZSAtRiAlcyIgJSBzZWxmLnRtcGRpcikKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi50bXBkaXIpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi50bXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeCA9ICJvZS10ZXN0X3BhdGgiKQorICAgICAgICBzZWxmLnJvb3QgPSBvcy5wYXRoLmpvaW4oc2VsZi50bXBkaXIsICJSIikKKworICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oc2VsZi50bXBkaXIsICJfcmVhbCIpKQorICAgICAgICBvcy5zeW1saW5rKCJfcmVhbCIsIHNlbGYucm9vdCkKKworICAgICAgICBmb3IgZCBpbiBzZWxmLkRJUlM6CisgICAgICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oc2VsZi5yb290LCBkKSkKKyAgICAgICAgZm9yIGYgaW4gc2VsZi5GSUxFUzoKKyAgICAgICAgICAgIG9wZW4ob3MucGF0aC5qb2luKHNlbGYucm9vdCwgZiksICJ3IikKKyAgICAgICAgZm9yIGwgaW4gc2VsZi5MSU5LUzoKKyAgICAgICAgICAgIG9zLnN5bWxpbmsobFsxXSwgb3MucGF0aC5qb2luKHNlbGYucm9vdCwgbFswXSkpCisKKyAgICBkZWYgX19yZWFscGF0aChzZWxmLCBmaWxlLCB1c2VfcGh5c2RpciwgYXNzdW1lX2RpciA9IFRydWUpOgorICAgICAgICByZXR1cm4gb2UucGF0aC5yZWFscGF0aChvcy5wYXRoLmpvaW4oc2VsZi5yb290LCBmaWxlKSwgc2VsZi5yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VfcGh5c2RpciwgYXNzdW1lX2RpciA9IGFzc3VtZV9kaXIpCisKKyAgICBkZWYgdGVzdF9ub3JtKHNlbGYpOgorICAgICAgICBmb3IgbCBpbiBzZWxmLkxJTktTOgorICAgICAgICAgICAgaWYgbFsyXSA9PSBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHRhcmdldF9wID0gc2VsZi5fX3JlYWxwYXRoKGxbMF0sIFRydWUpCisgICAgICAgICAgICB0YXJnZXRfbCA9IHNlbGYuX19yZWFscGF0aChsWzBdLCBGYWxzZSkKKworICAgICAgICAgICAgaWYgbFsyXSAhPSBGYWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmdldF9wLCB0YXJnZXRfbCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbMl0sIHRhcmdldF9wW2xlbihzZWxmLnJvb3QpOl0pCisKKyAgICBkZWYgdGVzdF9waHlzKHNlbGYpOgorICAgICAgICBmb3IgbCBpbiBzZWxmLkxJTktTX1BIWVM6CisgICAgICAgICAgICB0YXJnZXRfcCA9IHNlbGYuX19yZWFscGF0aChsWzBdLCBUcnVlKQorICAgICAgICAgICAgdGFyZ2V0X2wgPSBzZWxmLl9fcmVhbHBhdGgobFswXSwgRmFsc2UpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFsxXSwgdGFyZ2V0X3BbbGVuKHNlbGYucm9vdCk6XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFsyXSwgdGFyZ2V0X2xbbGVuKHNlbGYucm9vdCk6XSkKKworICAgIGRlZiB0ZXN0X2xvb3Aoc2VsZik6CisgICAgICAgIGZvciBlIGluIHNlbGYuRVhDRVBUSU9OUzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoT1NFcnJvciwgcidcW0Vycm5vICV1XF0nICUgZVsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19yZWFscGF0aCwgZVswXSwgRmFsc2UsIEZhbHNlKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvb2VsaWIvdHlwZXMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9vZWxpYi90eXBlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjUzYWE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvb2VsaWIvdHlwZXMucHkKQEAgLTAsMCArMSw1MCBAQAorZnJvbSB1bml0dGVzdC5jYXNlIGltcG9ydCBUZXN0Q2FzZQorZnJvbSBvZS5tYWtldHlwZSBpbXBvcnQgY3JlYXRlCisKK2NsYXNzIFRlc3RCb29sZWFuVHlwZShUZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaW52YWxpZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY3JlYXRlLCAnJywgJ2Jvb2xlYW4nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjcmVhdGUsICdmb28nLCAnYm9vbGVhbicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3JlYXRlLCBvYmplY3QoKSwgJ2Jvb2xlYW4nKQorCisgICAgZGVmIHRlc3RfdHJ1ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNyZWF0ZSgneScsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmVhdGUoJ3llcycsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmVhdGUoJzEnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3JlYXRlKCd0JywgJ2Jvb2xlYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNyZWF0ZSgndHJ1ZScsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmVhdGUoJ1RSVUUnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3JlYXRlKCd0cnVFJywgJ2Jvb2xlYW4nKSkKKworICAgIGRlZiB0ZXN0X2ZhbHNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNyZWF0ZSgnbicsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3JlYXRlKCdubycsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3JlYXRlKCcwJywgJ2Jvb2xlYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjcmVhdGUoJ2YnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNyZWF0ZSgnZmFsc2UnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNyZWF0ZSgnRkFMU0UnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNyZWF0ZSgnZmFMc2UnLCAnYm9vbGVhbicpKQorCisgICAgZGVmIHRlc3RfYm9vbF9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGUoJ24nLCAnYm9vbGVhbicpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChjcmVhdGUoJ24nLCAnYm9vbGVhbicpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyZWF0ZSgneScsICdib29sZWFuJyksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY3JlYXRlKCd5JywgJ2Jvb2xlYW4nKSwgRmFsc2UpCisKK2NsYXNzIFRlc3RMaXN0KFRlc3RDYXNlKToKKyAgICBkZWYgYXNzZXJ0TGlzdEVxdWFsKHNlbGYsIHZhbHVlLCB2YWxpZCwgc2VwPU5vbmUpOgorICAgICAgICBvYmogPSBjcmVhdGUodmFsdWUsICdsaXN0Jywgc2VwYXJhdG9yPXNlcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmosIHZhbGlkKQorICAgICAgICBpZiBzZXAgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5zZXBhcmF0b3IsIHNlcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIob2JqKSwgb2JqLnNlcGFyYXRvci5qb2luKG9iaikpCisKKyAgICBkZWYgdGVzdF9saXN0X25vc2VwKHNlbGYpOgorICAgICAgICB0ZXN0bGlzdCA9IFsnYWxwaGEnLCAnYmV0YScsICd0aGV0YSddCisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKCdhbHBoYSBiZXRhIHRoZXRhJywgdGVzdGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKCdhbHBoYSAgYmV0YVx0dGhldGEnLCB0ZXN0bGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoJ2FscGhhJywgWydhbHBoYSddKQorCisgICAgZGVmIHRlc3RfbGlzdF91c2Vyc2VwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbCgnZm9vOmJhcicsIFsnZm9vJywgJ2JhciddLCAnOicpCisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKCdmb286YmFyOmJheicsIFsnZm9vJywgJ2JhcicsICdiYXonXSwgJzonKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvb2VsaWIvdXRpbHMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9vZWxpYi91dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmI2YzE1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvb2VsaWIvdXRpbHMucHkKQEAgLTAsMCArMSw1MSBAQAorZnJvbSB1bml0dGVzdC5jYXNlIGltcG9ydCBUZXN0Q2FzZQorZnJvbSBvZS51dGlscyBpbXBvcnQgcGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0sIHRyaW1fdmVyc2lvbgorCitjbGFzcyBUZXN0UGFja2FnZXNGaWx0ZXJPdXRTeXN0ZW0oVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2ZpbHRlcihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgdGhhdCBvZS51dGlscy5wYWNrYWdlc19maWx0ZXJfb3V0X3N5c3RlbSB3b3Jrcy4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBiYgorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJDYW5ub3QgaW1wb3J0IGJiIikKKworICAgICAgICBkID0gYmIuZGF0YV9zbWFydC5EYXRhU21hcnQoKQorICAgICAgICBkLnNldFZhcigiUE4iLCAiZm9vIikKKworICAgICAgICBkLnNldFZhcigiUEFDS0FHRVMiLCAiZm9vIGZvby1kb2MgZm9vLWRldiIpCisgICAgICAgIHBrZ3MgPSBwYWNrYWdlc19maWx0ZXJfb3V0X3N5c3RlbShkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBrZ3MsIFtdKQorCisgICAgICAgIGQuc2V0VmFyKCJQQUNLQUdFUyIsICJmb28gZm9vLWRvYyBmb28tZGF0YSBmb28tZGV2IikKKyAgICAgICAgcGtncyA9IHBhY2thZ2VzX2ZpbHRlcl9vdXRfc3lzdGVtKGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGtncywgWyJmb28tZGF0YSJdKQorCisgICAgICAgIGQuc2V0VmFyKCJQQUNLQUdFUyIsICJmb28gZm9vLWxvY2FsZS1lbi1nYiIpCisgICAgICAgIHBrZ3MgPSBwYWNrYWdlc19maWx0ZXJfb3V0X3N5c3RlbShkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBrZ3MsIFtdKQorCisgICAgICAgIGQuc2V0VmFyKCJQQUNLQUdFUyIsICJmb28gZm9vLWRhdGEgZm9vLWxvY2FsZS1lbi1nYiIpCisgICAgICAgIHBrZ3MgPSBwYWNrYWdlc19maWx0ZXJfb3V0X3N5c3RlbShkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBrZ3MsIFsiZm9vLWRhdGEiXSkKKworCitjbGFzcyBUZXN0VHJpbVZlcnNpb24oVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3ZlcnNpb25fZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB0cmltX3ZlcnNpb24oTm9uZSwgMikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdHJpbV92ZXJzaW9uKCgxLCAyLCAzKSwgMikKKworICAgIGRlZiB0ZXN0X251bV9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICB0cmltX3ZlcnNpb24oIjEuMi4zIiwgMCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHRyaW1fdmVyc2lvbigiMS4yLjMiLCAtMSkKKworICAgIGRlZiB0ZXN0X3ZhbGlkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyaW1fdmVyc2lvbigiMS4yLjMiLCAxKSwgIjEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyaW1fdmVyc2lvbigiMS4yLjMiLCAyKSwgIjEuMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJpbV92ZXJzaW9uKCIxLjIuMyIsIDMpLCAiMS4yLjMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyaW1fdmVyc2lvbigiMS4yLjMiLCA0KSwgIjEuMi4zIikKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL29lc2NyaXB0cy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL29lc2NyaXB0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWU3NTM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvb2VzY3JpcHRzLnB5CkBAIC0wLDAgKzEsMTUgQEAKK2Zyb20gb2VxYS5zZWxmdGVzdC5jYXNlIGltcG9ydCBPRVNlbGZ0ZXN0VGVzdENhc2UKK2Zyb20gb2VxYS5zZWxmdGVzdC5jYXNlcy5idWlsZGhpc3RvcnkgaW1wb3J0IEJ1aWxkaGlzdG9yeUJhc2UKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgQ29tbWFuZCwgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBnZXRfdGVzdF9sYXllcgorZnJvbSBvZXFhLmNvcmUuZGVjb3JhdG9yLm9laWQgaW1wb3J0IE9FVGVzdElECisKK2NsYXNzIEJ1aWxkaGlzdG9yeURpZmZUZXN0cyhCdWlsZGhpc3RvcnlCYXNlKToKKworICAgIEBPRVRlc3RJRCgyOTUpCisgICAgZGVmIHRlc3RfYnVpbGRoaXN0b3J5X2RpZmYoc2VsZik6CisgICAgICAgIHRhcmdldCA9ICd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJworICAgICAgICBzZWxmLnJ1bl9idWlsZGhpc3Rvcnlfb3BlcmF0aW9uKHRhcmdldCwgdGFyZ2V0X2NvbmZpZz0iUFIgPSBcInIxXCIiLCBjaGFuZ2VfYmhfbG9jYXRpb249VHJ1ZSkKKyAgICAgICAgc2VsZi5ydW5fYnVpbGRoaXN0b3J5X29wZXJhdGlvbih0YXJnZXQsIHRhcmdldF9jb25maWc9IlBSID0gXCJyMFwiIiwgY2hhbmdlX2JoX2xvY2F0aW9uPUZhbHNlLCBleHBlY3RfZXJyb3I9VHJ1ZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJidWlsZGhpc3RvcnktZGlmZiAtcCAlcyIgJSBnZXRfYmJfdmFyKCdCVUlMREhJU1RPUllfRElSJykpCisgICAgICAgIGV4cGVjdGVkX291dHB1dCA9ICdQUiBjaGFuZ2VkIGZyb20gInIxIiB0byAicjAiJworICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhwZWN0ZWRfb3V0cHV0IGluIHJlc3VsdC5vdXRwdXQsIG1zZz0iRGlkIG5vdCBmaW5kIGV4cGVjdGVkIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL3BhY2thZ2UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9wYWNrYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2OTY5OGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9wYWNrYWdlLnB5CkBAIC0wLDAgKzEsODYgQEAKK2Zyb20gb2VxYS5zZWxmdGVzdC5jYXNlIGltcG9ydCBPRVNlbGZ0ZXN0VGVzdENhc2UKK2Zyb20gb2VxYS5jb3JlLmRlY29yYXRvci5vZWlkIGltcG9ydCBPRVRlc3RJRAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBiaXRiYWtlLCBnZXRfYmJfdmFycworaW1wb3J0IHN1YnByb2Nlc3MsIG9zCitpbXBvcnQgb2UucGF0aAorCitjbGFzcyBWZXJzaW9uT3JkZXJpbmcoT0VTZWxmdGVzdFRlc3RDYXNlKToKKyAgICAjIHZlcnNpb24xLCB2ZXJzaW9uMiwgc29ydCBvcmRlcgorICAgIHRlc3RzID0gKAorICAgICAgICAoIjEuMCIsICIxLjAiLCAwKSwKKyAgICAgICAgKCIxLjAiLCAiMi4wIiwgLTEpLAorICAgICAgICAoIjIuMCIsICIxLjAiLCAxKSwKKyAgICAgICAgKCIyLjAtcmMiLCAiMi4wIiwgMSksCisgICAgICAgICgiMi4wfnJjIiwgIjIuMCIsIC0xKSwKKyAgICAgICAgKCIxLjJyYzIiLCAiMS4yLjAiLCAtMSkKKyAgICAgICAgKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgc3VwZXIoKS5zZXRVcENsYXNzKCkKKworICAgICAgICAjIEJ1aWxkIHRoZSB0b29scyB3ZSBuZWVkIGFuZCBwb3B1bGF0ZSBhIHN5c3Jvb3QKKyAgICAgICAgYml0YmFrZSgiZHBrZy1uYXRpdmUgb3BrZy1uYXRpdmUgcnBtLW5hdGl2ZSBweXRob24zLW5hdGl2ZSIpCisgICAgICAgIGJpdGJha2UoImJ1aWxkLXN5c3Jvb3RzIC1jIGJ1aWxkX25hdGl2ZV9zeXNyb290IikKKworICAgICAgICAjIEdldCB0aGUgcGF0aHMgc28gd2UgY2FuIHBvaW50IGludG8gdGhlIHN5c3Jvb3QgY29ycmVjdGx5CisgICAgICAgIHZhcnMgPSBnZXRfYmJfdmFycyhbIlNUQUdJTkdfRElSIiwgIkJVSUxEX0FSQ0giLCAiYmluZGlyX25hdGl2ZSIsICJsaWJkaXJfbmF0aXZlIl0pCisgICAgICAgIGNscy5zdGFnaW5nID0gb2UucGF0aC5qb2luKHZhcnNbIlNUQUdJTkdfRElSIl0sIHZhcnNbIkJVSUxEX0FSQ0giXSkKKyAgICAgICAgY2xzLmJpbmRpciA9IG9lLnBhdGguam9pbihjbHMuc3RhZ2luZywgdmFyc1siYmluZGlyX25hdGl2ZSJdKQorICAgICAgICBjbHMubGliZGlyID0gb2UucGF0aC5qb2luKGNscy5zdGFnaW5nLCB2YXJzWyJsaWJkaXJfbmF0aXZlIl0pCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgSnVzdCBmb3IgY29udmVuaWVuY2UKKyAgICAgICAgc2VsZi5zdGFnaW5nID0gdHlwZShzZWxmKS5zdGFnaW5nCisgICAgICAgIHNlbGYuYmluZGlyID0gdHlwZShzZWxmKS5iaW5kaXIKKyAgICAgICAgc2VsZi5saWJkaXIgPSB0eXBlKHNlbGYpLmxpYmRpcgorCisgICAgQE9FVGVzdElEKDE4ODApCisgICAgZGVmIHRlc3RfZHBrZyhzZWxmKToKKyAgICAgICAgZm9yIHZlcjEsIHZlcjIsIHNvcnQgaW4gc2VsZi50ZXN0czoKKyAgICAgICAgICAgIG9wID0geyAtMTogIjw8IiwgMDogIj0iLCAxOiAiPj4iIH1bc29ydF0KKyAgICAgICAgICAgIHN0YXR1cyA9IHN1YnByb2Nlc3MuY2FsbCgob2UucGF0aC5qb2luKHNlbGYuYmluZGlyLCAiZHBrZyIpLCAiLS1jb21wYXJlLXZlcnNpb25zIiwgdmVyMSwgb3AsIHZlcjIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsICIlcyAlcyAlcyBmYWlsZWQiICUgKHZlcjEsIG9wLCB2ZXIyKSkKKworICAgICAgICAgICAgIyBOb3cgZG8gaXQgYWdhaW4gYnV0IHdpdGggaW5jb3JyZWN0IG9wZXJhdGlvbnMKKyAgICAgICAgICAgIG9wID0geyAtMTogIj4+IiwgMDogIj4+IiwgMTogIjw8IiB9W3NvcnRdCisgICAgICAgICAgICBzdGF0dXMgPSBzdWJwcm9jZXNzLmNhbGwoKG9lLnBhdGguam9pbihzZWxmLmJpbmRpciwgImRwa2ciKSwgIi0tY29tcGFyZS12ZXJzaW9ucyIsIHZlcjEsIG9wLCB2ZXIyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc3RhdHVzLCAwLCAiJXMgJXMgJXMgZmFpbGVkIiAlICh2ZXIxLCBvcCwgdmVyMikpCisKKyAgICAgICAgICAgICMgTm93IGRvIGl0IGFnYWluIGJ1dCB3aXRoIGluY29ycmVjdCBvcGVyYXRpb25zCisgICAgICAgICAgICBvcCA9IHsgLTE6ICI9IiwgMDogIjw8IiwgMTogIj0iIH1bc29ydF0KKyAgICAgICAgICAgIHN0YXR1cyA9IHN1YnByb2Nlc3MuY2FsbCgob2UucGF0aC5qb2luKHNlbGYuYmluZGlyLCAiZHBrZyIpLCAiLS1jb21wYXJlLXZlcnNpb25zIiwgdmVyMSwgb3AsIHZlcjIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzdGF0dXMsIDAsICIlcyAlcyAlcyBmYWlsZWQiICUgKHZlcjEsIG9wLCB2ZXIyKSkKKworICAgIEBPRVRlc3RJRCgxODgxKQorICAgIGRlZiB0ZXN0X29wa2coc2VsZik6CisgICAgICAgIGZvciB2ZXIxLCB2ZXIyLCBzb3J0IGluIHNlbGYudGVzdHM6CisgICAgICAgICAgICBvcCA9IHsgLTE6ICI8PCIsIDA6ICI9IiwgMTogIj4+IiB9W3NvcnRdCisgICAgICAgICAgICBzdGF0dXMgPSBzdWJwcm9jZXNzLmNhbGwoKG9lLnBhdGguam9pbihzZWxmLmJpbmRpciwgIm9wa2ciKSwgImNvbXBhcmUtdmVyc2lvbnMiLCB2ZXIxLCBvcCwgdmVyMikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgIiVzICVzICVzIGZhaWxlZCIgJSAodmVyMSwgb3AsIHZlcjIpKQorCisgICAgICAgICAgICAjIE5vdyBkbyBpdCBhZ2FpbiBidXQgd2l0aCBpbmNvcnJlY3Qgb3BlcmF0aW9ucworICAgICAgICAgICAgb3AgPSB7IC0xOiAiPj4iLCAwOiAiPj4iLCAxOiAiPDwiIH1bc29ydF0KKyAgICAgICAgICAgIHN0YXR1cyA9IHN1YnByb2Nlc3MuY2FsbCgob2UucGF0aC5qb2luKHNlbGYuYmluZGlyLCAib3BrZyIpLCAiY29tcGFyZS12ZXJzaW9ucyIsIHZlcjEsIG9wLCB2ZXIyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc3RhdHVzLCAwLCAiJXMgJXMgJXMgZmFpbGVkIiAlICh2ZXIxLCBvcCwgdmVyMikpCisKKyAgICAgICAgICAgICMgTm93IGRvIGl0IGFnYWluIGJ1dCB3aXRoIGluY29ycmVjdCBvcGVyYXRpb25zCisgICAgICAgICAgICBvcCA9IHsgLTE6ICI9IiwgMDogIjw8IiwgMTogIj0iIH1bc29ydF0KKyAgICAgICAgICAgIHN0YXR1cyA9IHN1YnByb2Nlc3MuY2FsbCgob2UucGF0aC5qb2luKHNlbGYuYmluZGlyLCAib3BrZyIpLCAiY29tcGFyZS12ZXJzaW9ucyIsIHZlcjEsIG9wLCB2ZXIyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc3RhdHVzLCAwLCAiJXMgJXMgJXMgZmFpbGVkIiAlICh2ZXIxLCBvcCwgdmVyMikpCisKKyAgICBAT0VUZXN0SUQoMTg4MikKKyAgICBkZWYgdGVzdF9ycG0oc2VsZik6CisgICAgICAgICMgTmVlZCB0byB0ZWxsIHRoZSBQeXRob24gYmluZGluZ3Mgd2hlcmUgdG8gZmluZCBpdHMgY29uZmlndXJhdGlvbgorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnZbIlJQTV9DT05GSUdESVIiXSA9IG9lLnBhdGguam9pbihzZWxmLmxpYmRpciwgInJwbSIpCisKKyAgICAgICAgZm9yIHZlcjEsIHZlcjIsIHNvcnQgaW4gc2VsZi50ZXN0czoKKyAgICAgICAgICAgICMgVGhlIG9ubHkgd2F5IHRvIHRlc3QgcnBtIGlzIHZpYSB0aGUgUHl0aG9uIG1vZHVsZSwgc28gd2UgbmVlZCB0bworICAgICAgICAgICAgIyBleGVjdXRlIHB5dGhvbjMtbmF0aXZlLiAgbGFiZWxDb21wYXJlIHJldHVybnMgLTEvMC8xIChsaWtlIHN0cmNtcCkKKyAgICAgICAgICAgICMgc28gYWRkIDEwMCBhbmQgdXNlIHRoYXQgYXMgdGhlIGV4aXQgY29kZS4KKyAgICAgICAgICAgIGNvbW1hbmQgPSAob2UucGF0aC5qb2luKHNlbGYuYmluZGlyLCAicHl0aG9uMy1uYXRpdmUiLCAicHl0aG9uMyIpLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5cywgcnBtOyB2MT0oTm9uZSwgXCIlc1wiLCBOb25lKTsgdjI9KE5vbmUsIFwiJXNcIiwgTm9uZSk7IHN5cy5leGl0KHJwbS5sYWJlbENvbXBhcmUodjEsIHYyKSArIDEwMCkiICUgKHZlcjEsIHZlcjIpKQorICAgICAgICAgICAgc3RhdHVzID0gc3VicHJvY2Vzcy5jYWxsKGNvbW1hbmQsIGVudj1lbnYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHN0YXR1cywgKDk5LCAxMDAsIDEwMSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cyAtIDEwMCwgc29ydCwgIiVzICVzICglZCkgZmFpbGVkIiAlICh2ZXIxLCB2ZXIyLCBzb3J0KSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL3BrZ2RhdGEucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9wa2dkYXRhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNGNhZjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9wa2dkYXRhLnB5CkBAIC0wLDAgKzEsMjI0IEBACitpbXBvcnQgb3MKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IGZubWF0Y2gKKworZnJvbSBvZXFhLnNlbGZ0ZXN0LmNhc2UgaW1wb3J0IE9FU2VsZnRlc3RUZXN0Q2FzZQorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIGdldF9iYl92YXJzCitmcm9tIG9lcWEuY29yZS5kZWNvcmF0b3Iub2VpZCBpbXBvcnQgT0VUZXN0SUQKKworY2xhc3MgT2VQa2dkYXRhVXRpbFRlc3RzKE9FU2VsZnRlc3RUZXN0Q2FzZSk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBzdXBlcihPZVBrZ2RhdGFVdGlsVGVzdHMsIGNscykuc2V0VXBDbGFzcygpCisgICAgICAgICMgRW5zdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGRhdGEgaW4gcGtnZGF0YQorICAgICAgICBjbHMubG9nZ2VyLmluZm8oJ1J1bm5pbmcgYml0YmFrZSB0byBnZW5lcmF0ZSBwa2dkYXRhJykKKyAgICAgICAgYml0YmFrZSgnYnVzeWJveCB6bGliIG00JykKKworICAgIEBPRVRlc3RJRCgxMjAzKQorICAgIGRlZiB0ZXN0X2xvb2t1cF9wa2coc2VsZik6CisgICAgICAgICMgRm9yd2FyZCB0ZXN0cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsb29rdXAtcGtnICJ6bGliIGJ1c3lib3giJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnbGliejFcbmJ1c3lib3gnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsb29rdXAtcGtnIHpsaWItZGV2JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnbGliei1kZXYnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsb29rdXAtcGtnIG5vbmV4aXN0ZW50cGtnJywgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDEsICJTdGF0dXMgZGlmZmVyZW50IHRoYW4gMS4gb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdFUlJPUjogVGhlIGZvbGxvd2luZyBwYWNrYWdlcyBjb3VsZCBub3QgYmUgZm91bmQ6IG5vbmV4aXN0ZW50cGtnJykKKyAgICAgICAgIyBSZXZlcnNlIHRlc3RzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1wa2cgLXIgImxpYnoxIGJ1c3lib3giJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnemxpYlxuYnVzeWJveCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1wa2cgLXIgbGliei1kZXYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICd6bGliLWRldicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1wa2cgLXIgbm9uZXhpc3RlbnRwa2cnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgIlN0YXR1cyBkaWZmZXJlbnQgdGhhbiAxLiBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ0VSUk9SOiBUaGUgZm9sbG93aW5nIHBhY2thZ2VzIGNvdWxkIG5vdCBiZSBmb3VuZDogbm9uZXhpc3RlbnRwa2cnKQorCisgICAgQE9FVGVzdElEKDEyMDUpCisgICAgZGVmIHRlc3RfcmVhZF92YWx1ZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgcmVhZC12YWx1ZSBQTiBsaWJ6MScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ3psaWInKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCByZWFkLXZhbHVlIFBLRyBsaWJ6MScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ2xpYnoxJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgcmVhZC12YWx1ZSBQS0dTSVpFIG00JykKKyAgICAgICAgcGtnc2l6ZSA9IGludChyZXN1bHQub3V0cHV0LnN0cmlwKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihwa2dzaXplLCAxLCAiU2l6ZSBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDEuICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAT0VUZXN0SUQoMTE5OCkKKyAgICBkZWYgdGVzdF9maW5kX3BhdGgoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGZpbmQtcGF0aCAvbGliL2xpYnouc28uMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ3psaWI6IC9saWIvbGliei5zby4xJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgZmluZC1wYXRoIC91c3IvYmluL200JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnbTQ6IC91c3IvYmluL200JykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgZmluZC1wYXRoIC9ub3QvZXhpc3QnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgIlN0YXR1cyBkaWZmZXJlbnQgdGhhbiAxLiBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ0VSUk9SOiBVbmFibGUgdG8gZmluZCBhbnkgcGFja2FnZSBwcm9kdWNpbmcgcGF0aCAvbm90L2V4aXN0JykKKworICAgIEBPRVRlc3RJRCgxMjA0KQorICAgIGRlZiB0ZXN0X2xvb2t1cF9yZWNpcGUoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1yZWNpcGUgImxpYnotc3RhdGljZGV2IGJ1c3lib3giJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnemxpYlxuYnVzeWJveCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1yZWNpcGUgbGliei1kYmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICd6bGliJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbG9va3VwLXJlY2lwZSBub25leGlzdGVudHBrZycsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc3RhdHVzLCAxLCAiU3RhdHVzIGRpZmZlcmVudCB0aGFuIDEuIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnRVJST1I6IFRoZSBmb2xsb3dpbmcgcGFja2FnZXMgY291bGQgbm90IGJlIGZvdW5kOiBub25leGlzdGVudHBrZycpCisKKyAgICBAT0VUZXN0SUQoMTIwMikKKyAgICBkZWYgdGVzdF9saXN0X3BrZ3Moc2VsZik6CisgICAgICAgICMgTm8gYXJndW1lbnRzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtncycpCisgICAgICAgIHBrZ2xpc3QgPSByZXN1bHQub3V0cHV0LnNwbGl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYicsIHBrZ2xpc3QsICJMaXN0ZWQgcGFja2FnZXM6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWItZGV2JywgcGtnbGlzdCwgIkxpc3RlZCBwYWNrYWdlczogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBObyBwa2dzcGVjLCBydW50aW1lCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtncyAtcicpCisgICAgICAgIHBrZ2xpc3QgPSByZXN1bHQub3V0cHV0LnNwbGl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1kZXYnLCBwa2dsaXN0LCAiTGlzdGVkIHBhY2thZ2VzOiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICAjIFdpdGggcmVjaXBlIHNwZWNpZmllZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZ3MgLXAgemxpYicpCisgICAgICAgIHBrZ2xpc3QgPSBzb3J0ZWQocmVzdWx0Lm91dHB1dC5zcGxpdCgpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwa2dsaXN0LnJlbW92ZSgnemxpYi1wdGVzdCcpICMgaW4gY2FzZSBwdGVzdCBpcyBkaXNhYmxlZAorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2dsaXN0LCBbJ3psaWInLCAnemxpYi1kYmcnLCAnemxpYi1kZXYnLCAnemxpYi1kb2MnLCAnemxpYi1zdGF0aWNkZXYnXSwgIlBhY2thZ2VzIGxpc3RlZCBhZnRlciByZW1vdmU6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgV2l0aCByZWNpcGUgc3BlY2lmaWVkLCBydW50aW1lCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtncyAtcCB6bGliIC1yJykKKyAgICAgICAgcGtnbGlzdCA9IHNvcnRlZChyZXN1bHQub3V0cHV0LnNwbGl0KCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBrZ2xpc3QucmVtb3ZlKCdsaWJ6LXB0ZXN0JykgIyBpbiBjYXNlIHB0ZXN0IGlzIGRpc2FibGVkCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBrZ2xpc3QsIFsnbGliei1kYmcnLCAnbGliei1kZXYnLCAnbGliei1kb2MnLCAnbGliei1zdGF0aWNkZXYnLCAnbGliejEnXSwgIlBhY2thZ2VzIGxpc3RlZCBhZnRlciByZW1vdmU6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgV2l0aCByZWNpcGUgc3BlY2lmaWVkIGFuZCB1bnBhY2thZ2VkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtncyAtcCB6bGliIC11JykKKyAgICAgICAgcGtnbGlzdCA9IHNvcnRlZChyZXN1bHQub3V0cHV0LnNwbGl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWItbG9jYWxlJywgcGtnbGlzdCwgIkxpc3RlZCBwYWNrYWdlczogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBXaXRoIHJlY2lwZSBzcGVjaWZpZWQgYW5kIHVucGFja2FnZWQsIHJ1bnRpbWUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2dzIC1wIHpsaWIgLXUgLXInKQorICAgICAgICBwa2dsaXN0ID0gc29ydGVkKHJlc3VsdC5vdXRwdXQuc3BsaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1sb2NhbGUnLCBwa2dsaXN0LCAiTGlzdGVkIHBhY2thZ2VzOiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICAjIFdpdGggcmVjaXBlIHNwZWNpZmllZCBhbmQgcGtnc3BlYworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZ3MgLXAgemxpYiAiKi1kKiInKQorICAgICAgICBwa2dsaXN0ID0gc29ydGVkKHJlc3VsdC5vdXRwdXQuc3BsaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2dsaXN0LCBbJ3psaWItZGJnJywgJ3psaWItZGV2JywgJ3psaWItZG9jJ10sICJQYWNrYWdlcyBsaXN0ZWQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgV2l0aCByZWNpcGUgc3BlY2lmaWVkIGFuZCBwa2dzcGVjLCBydW50aW1lCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtncyAtcCB6bGliIC1yICIqLWQqIicpCisgICAgICAgIHBrZ2xpc3QgPSBzb3J0ZWQocmVzdWx0Lm91dHB1dC5zcGxpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBrZ2xpc3QsIFsnbGliei1kYmcnLCAnbGliei1kZXYnLCAnbGliei1kb2MnXSwgIlBhY2thZ2VzIGxpc3RlZDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEBPRVRlc3RJRCgxMjAxKQorICAgIGRlZiB0ZXN0X2xpc3RfcGtnX2ZpbGVzKHNlbGYpOgorICAgICAgICBkZWYgc3BsaXRvdXRwdXQob3V0cHV0KToKKyAgICAgICAgICAgIGZpbGVzID0ge30KKyAgICAgICAgICAgIGN1cnBrZyA9IE5vbmUKKyAgICAgICAgICAgIGZvciBsaW5lIGluIG91dHB1dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdcdCcpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY3VycGtnLCAnVW5leHBlY3RlZCBub24tcGFja2FnZSBsaW5lOlxuJXMnICUgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgZmlsZXNbY3VycGtnXS5hcHBlbmQobGluZS5zdHJpcCgpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsaW5lLnJzdHJpcCgpLmVuZHN3aXRoKCc6JyksICdJbnZhbGlkIHBhY2thZ2UgbGluZSBpbiBvdXRwdXQ6XG4lcycgJSBsaW5lKQorICAgICAgICAgICAgICAgICAgICBjdXJwa2cgPSBsaW5lLnNwbGl0KCc6JylbMF0KKyAgICAgICAgICAgICAgICAgICAgZmlsZXNbY3VycGtnXSA9IFtdCisgICAgICAgICAgICByZXR1cm4gZmlsZXMKKyAgICAgICAgYmJfdmFycyA9IGdldF9iYl92YXJzKFsnYmFzZV9saWJkaXInLCAnbGliZGlyJywgJ2luY2x1ZGVkaXInLCAnbWFuZGlyJ10pCisgICAgICAgIGJhc2VfbGliZGlyID0gYmJfdmFyc1snYmFzZV9saWJkaXInXQorICAgICAgICBsaWJkaXIgPSBiYl92YXJzWydsaWJkaXInXQorICAgICAgICBpbmNsdWRlZGlyID0gYmJfdmFyc1snaW5jbHVkZWRpciddCisgICAgICAgIG1hbmRpciA9IGJiX3ZhcnNbJ21hbmRpciddCisgICAgICAgICMgVGVzdCByZWNpcGUtc3BhY2UgcGFja2FnZSBuYW1lCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtnLWZpbGVzIHpsaWItZGV2IHpsaWItZG9jJykKKyAgICAgICAgZmlsZXMgPSBzcGxpdG91dHB1dChyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRldicsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRvYycsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihpbmNsdWRlZGlyLCAnemxpYi5oJyksIGZpbGVzWyd6bGliLWRldiddKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihtYW5kaXIsICdtYW4zL3psaWIuMycpLCBmaWxlc1snemxpYi1kb2MnXSkKKyAgICAgICAgIyBUZXN0IHJ1bnRpbWUgcGFja2FnZSBuYW1lCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtnLWZpbGVzIC1yIGxpYnoxIGxpYnotZGV2JykKKyAgICAgICAgZmlsZXMgPSBzcGxpdG91dHB1dChyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6MScsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRldicsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobGVuKGZpbGVzWydsaWJ6MSddKSwgMSkKKyAgICAgICAgbGlic3BlYyA9IG9zLnBhdGguam9pbihiYXNlX2xpYmRpciwgJ2xpYnouc28uMS4qJykKKyAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICBmb3IgZmlsZWl0ZW0gaW4gZmlsZXNbJ2xpYnoxJ106CisgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2hjYXNlKGZpbGVpdGVtLCBsaWJzcGVjKToKKyAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBzZWxmLmFzc2VydFRydWUoZm91bmQsICdDb3VsZCBub3QgZmluZCB6bGliIGxpYnJhcnkgZmlsZSAlcyBpbiBsaWJ6MSBwYWNrYWdlIGZpbGUgbGlzdDogJXMnICUgKGxpYnNwZWMsIGZpbGVzWydsaWJ6MSddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4oaW5jbHVkZWRpciwgJ3psaWIuaCcpLCBmaWxlc1snbGliei1kZXYnXSkKKyAgICAgICAgIyBUZXN0IHJlY2lwZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZy1maWxlcyAtcCB6bGliJykKKyAgICAgICAgZmlsZXMgPSBzcGxpdG91dHB1dChyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRiZycsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRvYycsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRldicsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLXN0YXRpY2RldicsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliJywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3psaWItbG9jYWxlJywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgKGlnbm9yZSBwdGVzdCwgbWlnaHQgbm90IGJlIHRoZXJlIGRlcGVuZGluZyBvbiBjb25maWcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGluY2x1ZGVkaXIsICd6bGliLmgnKSwgZmlsZXNbJ3psaWItZGV2J10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKG1hbmRpciwgJ21hbjMvemxpYi4zJyksIGZpbGVzWyd6bGliLWRvYyddKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihsaWJkaXIsICdsaWJ6LmEnKSwgZmlsZXNbJ3psaWItc3RhdGljZGV2J10pCisgICAgICAgICMgVGVzdCByZWNpcGUsIHJ1bnRpbWUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2ctZmlsZXMgLXAgemxpYiAtcicpCisgICAgICAgIGZpbGVzID0gc3BsaXRvdXRwdXQocmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1kYmcnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1kb2MnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1kZXYnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1zdGF0aWNkZXYnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliejEnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbGliei1sb2NhbGUnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4oaW5jbHVkZWRpciwgJ3psaWIuaCcpLCBmaWxlc1snbGliei1kZXYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obWFuZGlyLCAnbWFuMy96bGliLjMnKSwgZmlsZXNbJ2xpYnotZG9jJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGxpYmRpciwgJ2xpYnouYScpLCBmaWxlc1snbGliei1zdGF0aWNkZXYnXSkKKyAgICAgICAgIyBUZXN0IHJlY2lwZSwgdW5wYWNrYWdlZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZy1maWxlcyAtcCB6bGliIC11JykKKyAgICAgICAgZmlsZXMgPSBzcGxpdG91dHB1dChyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRiZycsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRvYycsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRldicsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLXN0YXRpY2RldicsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliJywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWItbG9jYWxlJywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpICMgdGhpcyBpcyB0aGUga2V5IG9uZQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihpbmNsdWRlZGlyLCAnemxpYi5oJyksIGZpbGVzWyd6bGliLWRldiddKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihtYW5kaXIsICdtYW4zL3psaWIuMycpLCBmaWxlc1snemxpYi1kb2MnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obGliZGlyLCAnbGliei5hJyksIGZpbGVzWyd6bGliLXN0YXRpY2RldiddKQorICAgICAgICAjIFRlc3QgcmVjaXBlLCBydW50aW1lLCB1bnBhY2thZ2VkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtnLWZpbGVzIC1wIHpsaWIgLXIgLXUnKQorICAgICAgICBmaWxlcyA9IHNwbGl0b3V0cHV0KHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZGJnJywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZG9jJywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZGV2JywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotc3RhdGljZGV2JywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnoxJywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotbG9jYWxlJywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpICMgdGhpcyBpcyB0aGUga2V5IG9uZQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihpbmNsdWRlZGlyLCAnemxpYi5oJyksIGZpbGVzWydsaWJ6LWRldiddKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihtYW5kaXIsICdtYW4zL3psaWIuMycpLCBmaWxlc1snbGliei1kb2MnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obGliZGlyLCAnbGliei5hJyksIGZpbGVzWydsaWJ6LXN0YXRpY2RldiddKQorCisgICAgQE9FVGVzdElEKDEyMDApCisgICAgZGVmIHRlc3RfZ2xvYihzZWxmKToKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdwa2dkYXRhcWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHBrZ2xpc3RmaWxlID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdwa2dsaXN0JykKKyAgICAgICAgd2l0aCBvcGVuKHBrZ2xpc3RmaWxlLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCdsaWJ6MVxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ2J1c3lib3hcbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGdsb2IgJXMgIiotZGV2IicgJSBwa2dsaXN0ZmlsZSkKKyAgICAgICAgZGVzaXJlZHJlc3VsdCA9IFsnbGliei1kZXYnLCAnYnVzeWJveC1kZXYnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChyZXN1bHQub3V0cHV0LnNwbGl0KCkpLCBzb3J0ZWQoZGVzaXJlZHJlc3VsdCkpCisgICAgICAgICMgVGhlIGZvbGxvd2luZyBzaG91bGQgbm90IGVycm9yIChiZWNhdXNlIHdoZW4gd2UgdXNlIHRoaXMgZHVyaW5nIHJvb3RmcyBjb25zdHJ1Y3Rpb24sIHNvbWV0aW1lcyB0aGUgY29tcGxlbWVudGFyeSBwYWNrYWdlIHdvbid0IGV4aXN0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBnbG9iICVzICIqLW5vbmV4aXN0ZW50IicgJSBwa2dsaXN0ZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnJykKKyAgICAgICAgIyBUZXN0IGV4Y2x1ZGUgb3B0aW9uCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGdsb2IgJXMgIiotZGV2ICotZGJnIiAteCAiXmxpYnoiJyAlIHBrZ2xpc3RmaWxlKQorICAgICAgICByZXN1bHRsaXN0ID0gcmVzdWx0Lm91dHB1dC5zcGxpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2xpYnotZGV2JywgcmVzdWx0bGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbGliei1kYmcnLCByZXN1bHRsaXN0KQorCisgICAgQE9FVGVzdElEKDEyMDYpCisgICAgZGVmIHRlc3Rfc3BlY2lmeV9wa2dkYXRhZGlyKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCAtcCAlcyBsb29rdXAtcGtnIHpsaWInICUgZ2V0X2JiX3ZhcignUEtHREFUQV9ESVInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnbGliejEnKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvcHJzZXJ2aWNlLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvcHJzZXJ2aWNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3OWU1MjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9wcnNlcnZpY2UucHkKQEAgLTAsMCArMSwxMzEgQEAKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgZGF0ZXRpbWUKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmNhc2UgaW1wb3J0IE9FU2VsZnRlc3RUZXN0Q2FzZQorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIKK2Zyb20gb2VxYS5jb3JlLmRlY29yYXRvci5vZWlkIGltcG9ydCBPRVRlc3RJRAorZnJvbSBvZXFhLnV0aWxzLm5ldHdvcmsgaW1wb3J0IGdldF9mcmVlX3BvcnQKKworY2xhc3MgQml0YmFrZVByVGVzdHMoT0VTZWxmdGVzdFRlc3RDYXNlKToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIHN1cGVyKEJpdGJha2VQclRlc3RzLCBjbHMpLnNldFVwQ2xhc3MoKQorICAgICAgICBjbHMucGtnZGF0YV9kaXIgPSBnZXRfYmJfdmFyKCdQS0dEQVRBX0RJUicpCisKKyAgICBkZWYgZ2V0X3ByX3ZlcnNpb24oc2VsZiwgcGFja2FnZV9uYW1lKToKKyAgICAgICAgcGFja2FnZV9kYXRhX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5wa2dkYXRhX2RpciwgJ3J1bnRpbWUnLCBwYWNrYWdlX25hbWUpCisgICAgICAgIHBhY2thZ2VfZGF0YSA9IGZ0b29scy5yZWFkX2ZpbGUocGFja2FnZV9kYXRhX2ZpbGUpCisgICAgICAgIGZpbmRfcHIgPSByZS5zZWFyY2goIlBLR1I6IHJbMC05XStcLihbMC05XSspIiwgcGFja2FnZV9kYXRhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluZF9wciwgIk5vIFBLRyByZXZpc2lvbiBmb3VuZCBpbiAlcyIgJSBwYWNrYWdlX2RhdGFfZmlsZSkKKyAgICAgICAgcmV0dXJuIGludChmaW5kX3ByLmdyb3VwKDEpKQorCisgICAgZGVmIGdldF90YXNrX3N0YW1wKHNlbGYsIHBhY2thZ2VfbmFtZSwgcmVjaXBlX3Rhc2spOgorICAgICAgICBzdGFtcGRhdGEgPSBnZXRfYmJfdmFyKCdTVEFNUCcsIHRhcmdldD1wYWNrYWdlX25hbWUpLnNwbGl0KCcvJykKKyAgICAgICAgcHJlZml4ID0gc3RhbXBkYXRhWy0xXQorICAgICAgICBwYWNrYWdlX3N0YW1wc19wYXRoID0gIi8iLmpvaW4oc3RhbXBkYXRhWzotMV0pCisgICAgICAgIHN0YW1wcyA9IFtdCisgICAgICAgIGZvciBzdGFtcCBpbiBvcy5saXN0ZGlyKHBhY2thZ2Vfc3RhbXBzX3BhdGgpOgorICAgICAgICAgICAgZmluZF9zdGFtcCA9IHJlLm1hdGNoKCIlc1wuJXNcLihbYS16MC05XXszMn0pIiAlIChyZS5lc2NhcGUocHJlZml4KSwgcmVjaXBlX3Rhc2spLCBzdGFtcCkKKyAgICAgICAgICAgIGlmIGZpbmRfc3RhbXA6CisgICAgICAgICAgICAgICAgc3RhbXBzLmFwcGVuZChmaW5kX3N0YW1wLmdyb3VwKDEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxlbihzdGFtcHMpID09IDAsIG1zZz0iQ291bmQgbm90IGZpbmQgc3RhbXAgZm9yIHRhc2sgJXMgZm9yIHJlY2lwZSAlcyIgJSAocmVjaXBlX3Rhc2ssIHBhY2thZ2VfbmFtZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGVuKHN0YW1wcykgPiAxLCBtc2c9IkZvdW5kIG11bHRpcGxlICVzIHN0YW1wcyBmb3IgdGhlICVzIHJlY2lwZSBpbiB0aGUgJXMgZGlyZWN0b3J5LiIgJSAocmVjaXBlX3Rhc2ssIHBhY2thZ2VfbmFtZSwgcGFja2FnZV9zdGFtcHNfcGF0aCkpCisgICAgICAgIHJldHVybiBzdHIoc3RhbXBzWzBdKQorCisgICAgZGVmIGluY3JlbWVudF9wYWNrYWdlX3ByKHNlbGYsIHBhY2thZ2VfbmFtZSk6CisgICAgICAgIGluY19kYXRhID0gImRvX3BhY2thZ2VfYXBwZW5kKCkge1xuICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9fdGVzdF9wcnNlcnYnLCBkKVxufVxuZG9fdGVzdF9wcnNlcnYoKSB7XG5lY2hvIFwiVGhlIGN1cnJlbnQgZGF0ZSBpczogJXNcIlxufSIgJSBkYXRldGltZS5kYXRldGltZS5ub3coKQorICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYyhwYWNrYWdlX25hbWUsIGluY19kYXRhKQorICAgICAgICByZXMgPSBiaXRiYWtlKHBhY2thZ2VfbmFtZSwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmRlbGV0ZV9yZWNpcGVpbmMocGFja2FnZV9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDAsIG1zZz1yZXMub3V0cHV0KQorCisgICAgZGVmIGNvbmZpZ19wcl90ZXN0cyhzZWxmLCBwYWNrYWdlX25hbWUsIHBhY2thZ2VfdHlwZT0ncnBtJywgcHJfc29ja2V0PSdsb2NhbGhvc3Q6MCcpOgorICAgICAgICBjb25maWdfcGFja2FnZV9kYXRhID0gJ1BBQ0tBR0VfQ0xBU1NFUyA9ICJwYWNrYWdlXyVzIicgJSBwYWNrYWdlX3R5cGUKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoY29uZmlnX3BhY2thZ2VfZGF0YSkKKyAgICAgICAgY29uZmlnX3NlcnZlcl9kYXRhID0gJ1BSU0VSVl9IT1NUID0gIiVzIicgJSBwcl9zb2NrZXQKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGNvbmZpZ19zZXJ2ZXJfZGF0YSkKKworICAgIGRlZiBydW5fdGVzdF9wcl9zZXJ2aWNlKHNlbGYsIHBhY2thZ2VfbmFtZSwgcGFja2FnZV90eXBlPSdycG0nLCB0cmFja190YXNrPSdkb19wYWNrYWdlJywgcHJfc29ja2V0PSdsb2NhbGhvc3Q6MCcpOgorICAgICAgICBzZWxmLmNvbmZpZ19wcl90ZXN0cyhwYWNrYWdlX25hbWUsIHBhY2thZ2VfdHlwZSwgcHJfc29ja2V0KQorCisgICAgICAgIHNlbGYuaW5jcmVtZW50X3BhY2thZ2VfcHIocGFja2FnZV9uYW1lKQorICAgICAgICBwcl8xID0gc2VsZi5nZXRfcHJfdmVyc2lvbihwYWNrYWdlX25hbWUpCisgICAgICAgIHN0YW1wXzEgPSBzZWxmLmdldF90YXNrX3N0YW1wKHBhY2thZ2VfbmFtZSwgdHJhY2tfdGFzaykKKworICAgICAgICBzZWxmLmluY3JlbWVudF9wYWNrYWdlX3ByKHBhY2thZ2VfbmFtZSkKKyAgICAgICAgcHJfMiA9IHNlbGYuZ2V0X3ByX3ZlcnNpb24ocGFja2FnZV9uYW1lKQorICAgICAgICBzdGFtcF8yID0gc2VsZi5nZXRfdGFza19zdGFtcChwYWNrYWdlX25hbWUsIHRyYWNrX3Rhc2spCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByXzIgLSBwcl8xID09IDEsICJTdGVwIGJldHdlZW4gc2FtZSBwa2cuIHJldmlzaW9uIGlzIGdyZWF0ZXIgdGhhbiAxIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YW1wXzEgIT0gc3RhbXBfMiwgIkRpZmZlcmVudCBwa2cgcmV2LiBidXQgc2FtZSBzdGFtcDogJXMiICUgc3RhbXBfMSkKKworICAgIGRlZiBydW5fdGVzdF9wcl9leHBvcnRfaW1wb3J0KHNlbGYsIHBhY2thZ2VfbmFtZSwgcmVwbGFjZV9jdXJyZW50X2RiPVRydWUpOgorICAgICAgICBzZWxmLmNvbmZpZ19wcl90ZXN0cyhwYWNrYWdlX25hbWUpCisKKyAgICAgICAgc2VsZi5pbmNyZW1lbnRfcGFja2FnZV9wcihwYWNrYWdlX25hbWUpCisgICAgICAgIHByXzEgPSBzZWxmLmdldF9wcl92ZXJzaW9uKHBhY2thZ2VfbmFtZSkKKworICAgICAgICBleHBvcnRlZF9kYl9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdleHBvcnQuaW5jJykKKyAgICAgICAgZXhwb3J0X3Jlc3VsdCA9IHJ1bkNtZCgiYml0YmFrZS1wcnNlcnYtdG9vbCBleHBvcnQgJXMiICUgZXhwb3J0ZWRfZGJfcGF0aCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cG9ydF9yZXN1bHQuc3RhdHVzLCAwLCBtc2c9IlBSIFNlcnZpY2UgZGF0YWJhc2UgZXhwb3J0IGZhaWxlZDogJXMiICUgZXhwb3J0X3Jlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhleHBvcnRlZF9kYl9wYXRoKSkKKworICAgICAgICBpZiByZXBsYWNlX2N1cnJlbnRfZGI6CisgICAgICAgICAgICBjdXJyZW50X2RiX3BhdGggPSBvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcignUEVSU0lTVEVOVF9ESVInKSwgJ3Byc2Vydi5zcWxpdGUzJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhjdXJyZW50X2RiX3BhdGgpLCBtc2c9IlBhdGggdG8gY3VycmVudCBQUiBTZXJ2aWNlIGRhdGFiYXNlIGlzIGludmFsaWQ6ICVzIiAlIGN1cnJlbnRfZGJfcGF0aCkKKyAgICAgICAgICAgIG9zLnJlbW92ZShjdXJyZW50X2RiX3BhdGgpCisKKyAgICAgICAgaW1wb3J0X3Jlc3VsdCA9IHJ1bkNtZCgiYml0YmFrZS1wcnNlcnYtdG9vbCBpbXBvcnQgJXMiICUgZXhwb3J0ZWRfZGJfcGF0aCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBvcy5yZW1vdmUoZXhwb3J0ZWRfZGJfcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbXBvcnRfcmVzdWx0LnN0YXR1cywgMCwgbXNnPSJQUiBTZXJ2aWNlIGRhdGFiYXNlIGltcG9ydCBmYWlsZWQ6ICVzIiAlIGltcG9ydF9yZXN1bHQub3V0cHV0KQorCisgICAgICAgIHNlbGYuaW5jcmVtZW50X3BhY2thZ2VfcHIocGFja2FnZV9uYW1lKQorICAgICAgICBwcl8yID0gc2VsZi5nZXRfcHJfdmVyc2lvbihwYWNrYWdlX25hbWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByXzIgLSBwcl8xID09IDEsICJTdGVwIGJldHdlZW4gc2FtZSBwa2cuIHJldmlzaW9uIGlzIGdyZWF0ZXIgdGhhbiAxIikKKworICAgIEBPRVRlc3RJRCg5MzApCisgICAgZGVmIHRlc3RfaW1wb3J0X2V4cG9ydF9yZXBsYWNlX2RiKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX2V4cG9ydF9pbXBvcnQoJ200JykKKworICAgIEBPRVRlc3RJRCg5MzEpCisgICAgZGVmIHRlc3RfaW1wb3J0X2V4cG9ydF9vdmVycmlkZV9kYihzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9wcl9leHBvcnRfaW1wb3J0KCdtNCcsIHJlcGxhY2VfY3VycmVudF9kYj1GYWxzZSkKKworICAgIEBPRVRlc3RJRCg5MzIpCisgICAgZGVmIHRlc3RfcHJfc2VydmljZV9ycG1fYXJjaF9kZXAoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfcHJfc2VydmljZSgnbTQnLCAncnBtJywgJ2RvX3BhY2thZ2UnKQorCisgICAgQE9FVGVzdElEKDkzNCkKKyAgICBkZWYgdGVzdF9wcl9zZXJ2aWNlX2RlYl9hcmNoX2RlcChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9wcl9zZXJ2aWNlKCdtNCcsICdkZWInLCAnZG9fcGFja2FnZScpCisKKyAgICBAT0VUZXN0SUQoOTMzKQorICAgIGRlZiB0ZXN0X3ByX3NlcnZpY2VfaXBrX2FyY2hfZGVwKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX3NlcnZpY2UoJ200JywgJ2lwaycsICdkb19wYWNrYWdlJykKKworICAgIEBPRVRlc3RJRCg5MzUpCisgICAgZGVmIHRlc3RfcHJfc2VydmljZV9ycG1fYXJjaF9pbmRlcChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9wcl9zZXJ2aWNlKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJywgJ3JwbScsICdkb19wYWNrYWdlJykKKworICAgIEBPRVRlc3RJRCg5MzcpCisgICAgZGVmIHRlc3RfcHJfc2VydmljZV9kZWJfYXJjaF9pbmRlcChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9wcl9zZXJ2aWNlKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJywgJ2RlYicsICdkb19wYWNrYWdlJykKKworICAgIEBPRVRlc3RJRCg5MzYpCisgICAgZGVmIHRlc3RfcHJfc2VydmljZV9pcGtfYXJjaF9pbmRlcChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9wcl9zZXJ2aWNlKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJywgJ2lwaycsICdkb19wYWNrYWdlJykKKworICAgIEBPRVRlc3RJRCgxNDE5KQorICAgIGRlZiB0ZXN0X3N0b3BwaW5nX3Byc2VydmljZV9tZXNzYWdlKHNlbGYpOgorICAgICAgICBwb3J0ID0gZ2V0X2ZyZWVfcG9ydCgpCisKKyAgICAgICAgcnVuQ21kKCdiaXRiYWtlLXByc2VydiAtLWhvc3QgbG9jYWxob3N0IC0tcG9ydCAlcyAtLWxvZ2xldmVsPURFQlVHIC0tc3RhcnQnICUgcG9ydCkKKyAgICAgICAgcmV0ID0gcnVuQ21kKCdiaXRiYWtlLXByc2VydiAtLWhvc3QgbG9jYWxob3N0IC0tcG9ydCAlcyAtLWxvZ2xldmVsPURFQlVHIC0tc3RvcCcgJSBwb3J0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0LnN0YXR1cywgMCkKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvcmVjaXBldG9vbC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL3JlY2lwZXRvb2wucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU0ZWE5NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL3JlY2lwZXRvb2wucHkKQEAgLTAsMCArMSw2OTggQEAKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdXJsbGliLnBhcnNlCisKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IGdldF9iYl92YXJzLCBjcmVhdGVfdGVtcF9sYXllcgorZnJvbSBvZXFhLmNvcmUuZGVjb3JhdG9yLm9laWQgaW1wb3J0IE9FVGVzdElECitmcm9tIG9lcWEuc2VsZnRlc3QuY2FzZXMgaW1wb3J0IGRldnRvb2wKKwordGVtcGxheWVyZGlyID0gTm9uZQorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBnbG9iYWwgdGVtcGxheWVyZGlyCisgICAgdGVtcGxheWVyZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J3JlY2lwZXRvb2xxYScpCisgICAgY3JlYXRlX3RlbXBfbGF5ZXIodGVtcGxheWVyZGlyLCAnc2VsZnRlc3RyZWNpcGV0b29sJykKKyAgICBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIGFkZC1sYXllciAlcycgJSB0ZW1wbGF5ZXJkaXIpCisKKworZGVmIHRlYXJEb3duTW9kdWxlKCk6CisgICAgcnVuQ21kKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgJXMnICUgdGVtcGxheWVyZGlyLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgcnVuQ21kKCdybSAtcmYgJXMnICUgdGVtcGxheWVyZGlyKQorCisKK2NsYXNzIFJlY2lwZXRvb2xCYXNlKGRldnRvb2wuRGV2dG9vbEJhc2UpOgorCisgICAgZGVmIHNldFVwTG9jYWwoc2VsZik6CisgICAgICAgIHN1cGVyKFJlY2lwZXRvb2xCYXNlLCBzZWxmKS5zZXRVcExvY2FsKCkKKyAgICAgICAgc2VsZi50ZW1wbGF5ZXJkaXIgPSB0ZW1wbGF5ZXJkaXIKKyAgICAgICAgc2VsZi50ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J3JlY2lwZXRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi50ZW1wZGlyKQorICAgICAgICBzZWxmLnRlc3RmaWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ3Rlc3RmaWxlJykKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYudGVzdGZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ1Rlc3QgZmlsZVxuJykKKworICAgIGRlZiB0ZWFyRG93bkxvY2FsKHNlbGYpOgorICAgICAgICBydW5DbWQoJ3JtIC1yZiAlcy9yZWNpcGVzLSonICUgc2VsZi50ZW1wbGF5ZXJkaXIpCisgICAgICAgIHN1cGVyKFJlY2lwZXRvb2xCYXNlLCBzZWxmKS50ZWFyRG93bkxvY2FsKCkKKworICAgIGRlZiBfdHJ5X3JlY2lwZXRvb2xfYXBwZW5kY21kKHNlbGYsIGNtZCwgdGVzdHJlY2lwZSwgZXhwZWN0ZWRmaWxlcywgZXhwZWN0ZWRsaW5lcz1Ob25lKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKGNtZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignVHJhY2ViYWNrJywgcmVzdWx0Lm91dHB1dCkKKworICAgICAgICAjIENoZWNrIHRoZSBiYmFwcGVuZCB3YXMgY3JlYXRlZCBhbmQgYXBwbGllcyBwcm9wZXJseQorICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIGJiYXBwZW5kZmlsZSA9IHNlbGYuX2NoZWNrX2JiYXBwZW5kKHRlc3RyZWNpcGUsIHJlY2lwZWZpbGUsIHNlbGYudGVtcGxheWVyZGlyKQorCisgICAgICAgICMgQ2hlY2sgdGhlIGJiYXBwZW5kIGNvbnRlbnRzCisgICAgICAgIGlmIGV4cGVjdGVkbGluZXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB3aXRoIG9wZW4oYmJhcHBlbmRmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpLCAiRXhwZWN0ZWQgbGluZXMgYXJlIG5vdCBwcmVzZW50IGluICVzIiAlIGJiYXBwZW5kZmlsZSkKKworICAgICAgICAjIENoZWNrIGZpbGUgd2FzIGNvcGllZAorICAgICAgICBmaWxlc2RpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoYmJhcHBlbmRmaWxlKSwgdGVzdHJlY2lwZSkKKyAgICAgICAgZm9yIGV4cGVjdGVkZmlsZSBpbiBleHBlY3RlZGZpbGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihmaWxlc2RpciwgZXhwZWN0ZWRmaWxlKSksICdFeHBlY3RlZCBmaWxlICVzIHRvIGJlIGNvcGllZCBuZXh0IHRvIGJiYXBwZW5kLCBidXQgaXQgd2FzblwndCcgJSBleHBlY3RlZGZpbGUpCisKKyAgICAgICAgIyBDaGVjayBubyBvdGhlciBmaWxlcyBjcmVhdGVkCisgICAgICAgIGNyZWF0ZWRmaWxlcyA9IFtdCisgICAgICAgIGZvciByb290LCBfLCBmaWxlcyBpbiBvcy53YWxrKGZpbGVzZGlyKToKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGNyZWF0ZWRmaWxlcy5hcHBlbmQob3MucGF0aC5yZWxwYXRoKG9zLnBhdGguam9pbihyb290LCBmKSwgZmlsZXNkaXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ydGVkKGNyZWF0ZWRmaWxlcyksIHNvcnRlZChleHBlY3RlZGZpbGVzKSkKKworICAgICAgICByZXR1cm4gYmJhcHBlbmRmaWxlLCByZXN1bHQub3V0cHV0CisKKworY2xhc3MgUmVjaXBldG9vbFRlc3RzKFJlY2lwZXRvb2xCYXNlKToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIHN1cGVyKFJlY2lwZXRvb2xUZXN0cywgY2xzKS5zZXRVcENsYXNzKCkKKyAgICAgICAgIyBFbnN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgZGF0YSBpbiBzaGxpYnMvcGtnZGF0YQorICAgICAgICBjbHMubG9nZ2VyLmluZm8oJ1J1bm5pbmcgYml0YmFrZSB0byBnZW5lcmF0ZSBwa2dkYXRhJykKKyAgICAgICAgYml0YmFrZSgnLWMgcGFja2FnZWRhdGEgYmFzZS1maWxlcyBjb3JldXRpbHMgYnVzeWJveCBzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnKQorICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWydDT1JFQkFTRScsICdCQlBBVEgnXSkKKyAgICAgICAgY2xzLmNvcmViYXNlID0gYmJfdmFyc1snQ09SRUJBU0UnXQorICAgICAgICBjbHMuYmJwYXRoID0gYmJfdmFyc1snQkJQQVRIJ10KKworICAgIGRlZiBfdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZShzZWxmLCB0ZXN0cmVjaXBlLCBkZXN0ZmlsZSwgbmV3ZmlsZSwgb3B0aW9ucywgZXhwZWN0ZWRsaW5lcywgZXhwZWN0ZWRmaWxlcyk6CisgICAgICAgIGNtZCA9ICdyZWNpcGV0b29sIGFwcGVuZGZpbGUgJXMgJXMgJXMgJXMnICUgKHNlbGYudGVtcGxheWVyZGlyLCBkZXN0ZmlsZSwgbmV3ZmlsZSwgb3B0aW9ucykKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGNtZChjbWQsIHRlc3RyZWNpcGUsIGV4cGVjdGVkZmlsZXMsIGV4cGVjdGVkbGluZXMpCisKKyAgICBkZWYgX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGVfZmFpbChzZWxmLCBkZXN0ZmlsZSwgbmV3ZmlsZSwgY2hlY2tlcnJvcik6CisgICAgICAgIGNtZCA9ICdyZWNpcGV0b29sIGFwcGVuZGZpbGUgJXMgJXMgJXMnICUgKHNlbGYudGVtcGxheWVyZGlyLCBkZXN0ZmlsZSwgbmV3ZmlsZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKGNtZCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsICdDb21tYW5kICIlcyIgc2hvdWxkIGhhdmUgZmFpbGVkIGJ1dCBkaWRuXCd0JyAlIGNtZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignVHJhY2ViYWNrJywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgZm9yIGVycm9yc3RyIGluIGNoZWNrZXJyb3I6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVycm9yc3RyLCByZXN1bHQub3V0cHV0KQorCisgICAgQE9FVGVzdElEKDExNzcpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2Jhc2ljKHNlbGYpOgorICAgICAgICAjIEJhc2ljIHRlc3QKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ2Jhc2UtZmlsZXMnLCAnL2V0Yy9tb3RkJywgc2VsZi50ZXN0ZmlsZSwgJycsIGV4cGVjdGVkbGluZXMsIFsnbW90ZCddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAT0VUZXN0SUQoMTE4MykKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfaW52YWxpZChzZWxmKToKKyAgICAgICAgIyBUZXN0IHNvbWUgY29tbWFuZHMgdGhhdCBzaG91bGQgZXJyb3IKKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9mYWlsKCcvZXRjL3Bhc3N3ZCcsIHNlbGYudGVzdGZpbGUsIFsnRVJST1I6IC9ldGMvcGFzc3dkIGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoaXMgdG9vbCcsICd1c2VyYWRkJywgJ2V4dHJhdXNlcnMnXSkKKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9mYWlsKCcvZXRjL3RpbWVzdGFtcCcsIHNlbGYudGVzdGZpbGUsIFsnRVJST1I6IC9ldGMvdGltZXN0YW1wIGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoaXMgdG9vbCddKQorICAgICAgICBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2ZhaWwoJy9kZXYvY29uc29sZScsIHNlbGYudGVzdGZpbGUsIFsnRVJST1I6IC9kZXYvY29uc29sZSBjYW5ub3QgYmUgaGFuZGxlZCBieSB0aGlzIHRvb2wnXSkKKworICAgIEBPRVRlc3RJRCgxMTc2KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9hbHRlcm5hdGl2ZXMoc2VsZik6CisgICAgICAgICMgTm93IHRyeSB3aXRoIGEgZmlsZSB3ZSBrbm93IHNob3VsZCBiZSBhbiBhbHRlcm5hdGl2ZQorICAgICAgICAjICh0aGlzIGlzIHZlcnkgbXVjaCBhIGZha2UgZXhhbXBsZSwgYnV0IG9uZSB3ZSBrbm93IGlzIHJlbGlhYmx5IGFuIGFsdGVybmF0aXZlKQorICAgICAgICBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2ZhaWwoJy9iaW4vbHMnLCBzZWxmLnRlc3RmaWxlLCBbJ0VSUk9SOiBGaWxlIC9iaW4vbHMgaXMgYW4gYWx0ZXJuYXRpdmUgcG9zc2libHkgcHJvdmlkZWQgYnkgdGhlIGZvbGxvd2luZyByZWNpcGVzOicsICdjb3JldXRpbHMnLCAnYnVzeWJveCddKQorICAgICAgICAjIE5lZWQgYSB0ZXN0IGZpbGUgLSBzaG91bGQgYmUgZXhlY3V0YWJsZQorICAgICAgICB0ZXN0ZmlsZTIgPSBvcy5wYXRoLmpvaW4oc2VsZi5jb3JlYmFzZSwgJ29lLWluaXQtYnVpbGQtZW52JykKKyAgICAgICAgdGVzdGZpbGUybmFtZSA9IG9zLnBhdGguYmFzZW5hbWUodGVzdGZpbGUyKQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly8lcyJcbicgJSB0ZXN0ZmlsZTJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vJXMgJHtEfSR7YmFzZV9iaW5kaXJ9L2xzXG4nICUgdGVzdGZpbGUybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnY29yZXV0aWxzJywgJy9iaW4vbHMnLCB0ZXN0ZmlsZTIsICctciBjb3JldXRpbHMnLCBleHBlY3RlZGxpbmVzLCBbdGVzdGZpbGUybmFtZV0pCisgICAgICAgICMgTm93IHRyeSBiYmFwcGVuZGluZyB0aGUgc2FtZSBmaWxlIGFnYWluLCBjb250ZW50cyBzaG91bGQgbm90IGNoYW5nZQorICAgICAgICBiYmFwcGVuZGZpbGUsIF8gPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdjb3JldXRpbHMnLCAnL2Jpbi9scycsIHNlbGYudGVzdGZpbGUsICctciBjb3JldXRpbHMnLCBleHBlY3RlZGxpbmVzLCBbdGVzdGZpbGUybmFtZV0pCisgICAgICAgICMgQnV0IGZpbGUgc2hvdWxkIGhhdmUKKyAgICAgICAgY29waWVkZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoYmJhcHBlbmRmaWxlKSwgJ2NvcmV1dGlscycsIHRlc3RmaWxlMm5hbWUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGlmZiAtcSAlcyAlcycgJSAodGVzdGZpbGUyLCBjb3BpZWRmaWxlKSwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsICdOZXcgZmlsZSBzaG91bGQgaGF2ZSBiZWVuIGNvcGllZCBidXQgd2FzIG5vdCAlcycgJSByZXN1bHQub3V0cHV0KQorCisgICAgQE9FVGVzdElEKDExNzgpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2JpbmFyeShzZWxmKToKKyAgICAgICAgIyBUcnkgYXBwZW5kaW5nIGEgYmluYXJ5IGZpbGUKKyAgICAgICAgIyAvYmluL2xzIGNhbiBiZSBhIHN5bWxpbmsgdG8gL3Vzci9iaW4vbHMKKyAgICAgICAgbHMgPSBvcy5wYXRoLnJlYWxwYXRoKCIvYmluL2xzIikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdyZWNpcGV0b29sIGFwcGVuZGZpbGUgJXMgL2Jpbi9scyAlcyAtciBjb3JldXRpbHMnICUgKHNlbGYudGVtcGxheWVyZGlyLCBscykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1dBUk5JTkc6ICcsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2lzIGEgYmluYXJ5JywgcmVzdWx0Lm91dHB1dCkKKworICAgIEBPRVRlc3RJRCgxMTczKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9hZGQoc2VsZik6CisgICAgICAgICMgVHJ5IGFyYml0cmFyeSBmaWxlIGFkZCB0byBhIHJlY2lwZQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly90ZXN0ZmlsZSJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmQoKSB7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2RhdGFkaXJ9L3NvbWV0aGluZ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnbmV0YmFzZScsICcvdXNyL3NoYXJlL3NvbWV0aGluZycsIHNlbGYudGVzdGZpbGUsICctciBuZXRiYXNlJywgZXhwZWN0ZWRsaW5lcywgWyd0ZXN0ZmlsZSddKQorICAgICAgICAjIFRyeSBhZGRpbmcgYW5vdGhlciBmaWxlLCB0aGlzIHRpbWUgd2hlcmUgdGhlIHNvdXJjZSBmaWxlIGlzIGV4ZWN1dGFibGUKKyAgICAgICAgIyAoc28gd2UncmUgdGVzdGluZyB0aGF0LCBwbHVzIG1vZGlmeWluZyBhbiBleGlzdGluZyBiYmFwcGVuZCkKKyAgICAgICAgdGVzdGZpbGUyID0gb3MucGF0aC5qb2luKHNlbGYuY29yZWJhc2UsICdvZS1pbml0LWJ1aWxkLWVudicpCisgICAgICAgIHRlc3RmaWxlMm5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHRlc3RmaWxlMikKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUgXFxcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIGZpbGU6Ly8lcyBcXFxuJyAlIHRlc3RmaWxlMm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmQoKSB7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2RhdGFkaXJ9L3NvbWV0aGluZ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9LyVzICR7RH0ke2RhdGFkaXJ9L3NjcmlwdG5hbWVcbicgJSB0ZXN0ZmlsZTJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nXQorICAgICAgICBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCduZXRiYXNlJywgJy91c3Ivc2hhcmUvc2NyaXB0bmFtZScsIHRlc3RmaWxlMiwgJy1yIG5ldGJhc2UnLCBleHBlY3RlZGxpbmVzLCBbJ3Rlc3RmaWxlJywgdGVzdGZpbGUybmFtZV0pCisKKyAgICBAT0VUZXN0SUQoMTE3NCkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfYWRkX2JpbmRpcihzZWxmKToKKyAgICAgICAgIyBUcnkgYXJiaXRyYXJ5IGZpbGUgYWRkIHRvIGEgcmVjaXBlLCB0aGlzIHRpbWUgdG8gYSBsb2NhdGlvbiBzdWNoIHRoYXQgc2hvdWxkIGJlIGluc3RhbGxlZCBhcyBleGVjdXRhYmxlCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSArPSAiZmlsZTovL3Rlc3RmaWxlIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdkb19pbnN0YWxsX2FwcGVuZCgpIHtcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtiaW5kaXJ9L3NlbGZ0ZXN0LXJlY2lwZXRvb2wtdGVzdGJpblxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnbmV0YmFzZScsICcvdXNyL2Jpbi9zZWxmdGVzdC1yZWNpcGV0b29sLXRlc3RiaW4nLCBzZWxmLnRlc3RmaWxlLCAnLXIgbmV0YmFzZScsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQorCisgICAgQE9FVGVzdElEKDExNzUpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2FkZF9tYWNoaW5lKHNlbGYpOgorICAgICAgICAjIFRyeSBhcmJpdHJhcnkgZmlsZSBhZGQgdG8gYSByZWNpcGUsIHRoaXMgdGltZSB0byBhIGxvY2F0aW9uIHN1Y2ggdGhhdCBzaG91bGQgYmUgaW5zdGFsbGVkIGFzIGV4ZWN1dGFibGUKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJX2FwcGVuZF9teW1hY2hpbmUgPSAiIGZpbGU6Ly90ZXN0ZmlsZSJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmRfbXltYWNoaW5lKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtkYXRhZGlyfS9zb21ldGhpbmdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ25ldGJhc2UnLCAnL3Vzci9zaGFyZS9zb21ldGhpbmcnLCBzZWxmLnRlc3RmaWxlLCAnLXIgbmV0YmFzZSAtbSBteW1hY2hpbmUnLCBleHBlY3RlZGxpbmVzLCBbJ215bWFjaGluZS90ZXN0ZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAT0VUZXN0SUQoMTE4NCkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfb3JpZyhzZWxmKToKKyAgICAgICAgIyBBIGZpbGUgdGhhdCdzIGluIFNSQ19VUkkgYW5kIGluIGRvX2luc3RhbGwgd2l0aCB0aGUgc2FtZSBuYW1lCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLW9yaWcnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWydzZWxmdGVzdC1yZXBsYWNlbWUtb3JpZyddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAT0VUZXN0SUQoMTE5MSkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfdG9kaXIoc2VsZik6CisgICAgICAgICMgQSBmaWxlIHRoYXQncyBpbiBTUkNfVVJJIGFuZCBpbiBkb19pbnN0YWxsIHdpdGggZGVzdGluYXRpb24gZGlyZWN0b3J5IHJhdGhlciB0aGFuIGZpbGUKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtdG9kaXInLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWydzZWxmdGVzdC1yZXBsYWNlbWUtdG9kaXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQorCisgICAgQE9FVGVzdElEKDExODcpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX3JlbmFtZWQoc2VsZik6CisgICAgICAgICMgQSBmaWxlIHRoYXQncyBpbiBTUkNfVVJJIHdpdGggYSBkaWZmZXJlbnQgbmFtZSB0byB0aGUgZGVzdGluYXRpb24gZmlsZQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1yZW5hbWVkJywgc2VsZi50ZXN0ZmlsZSwgJycsIGV4cGVjdGVkbGluZXMsIFsnZmlsZTEnXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQorCisgICAgQE9FVGVzdElEKDExOTApCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX3N1YmRpcihzZWxmKToKKyAgICAgICAgIyBBIGZpbGUgdGhhdCdzIGluIFNSQ19VUkkgaW4gYSBzdWJkaXIKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtc3ViZGlyXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtc3ViZGlyJywgc2VsZi50ZXN0ZmlsZSwgJycsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQorCisgICAgQE9FVGVzdElEKDExODkpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX3NyY19nbG9iKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgaW4gU1JDX1VSSSBhcyBhIGdsb2IKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtc3JjLWdsb2JmaWxlXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtc3JjLWdsb2JmaWxlJywgc2VsZi50ZXN0ZmlsZSwgJycsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQorCisgICAgQE9FVGVzdElEKDExODEpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2luc3RfZ2xvYihzZWxmKToKKyAgICAgICAgIyBBIGZpbGUgdGhhdCdzIGluIGRvX2luc3RhbGwgYXMgYSBnbG9iCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZ2xvYmZpbGUnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWydzZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1nbG9iZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAT0VUZXN0SUQoMTE4MikKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfaW5zdF90b2Rpcl9nbG9iKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgaW4gZG9faW5zdGFsbCBhcyBhIGdsb2Igd2l0aCBkZXN0aW5hdGlvbiBhcyBhIGRpcmVjdG9yeQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LXRvZGlyLWdsb2JmaWxlJywgc2VsZi50ZXN0ZmlsZSwgJycsIGV4cGVjdGVkbGluZXMsIFsnc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtdG9kaXItZ2xvYmZpbGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQorCisgICAgQE9FVGVzdElEKDExODUpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX3BhdGNoKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgYWRkZWQgYnkgYSBwYXRjaCBpbiBTUkNfVVJJCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSArPSAiZmlsZTovL3Rlc3RmaWxlIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdkb19pbnN0YWxsX2FwcGVuZCgpIHtcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdGVzdGZpbGUgJHtEfSR7c3lzY29uZmRpcn0vc2VsZnRlc3QtcmVwbGFjZW1lLXBhdGNoZWRcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvZXRjL3NlbGZ0ZXN0LXJlcGxhY2VtZS1wYXRjaGVkJywgc2VsZi50ZXN0ZmlsZSwgJycsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnXSkKKyAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIGlmICdXQVJOSU5HOiAnIGluIGxpbmU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignYWRkLWZpbGUucGF0Y2gnLCBsaW5lLCAnVW5leHBlY3RlZCB3YXJuaW5nIGZvdW5kIGluIG91dHB1dDpcbiVzJyAlIGxpbmUpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnUGF0Y2ggd2FybmluZyBub3QgZm91bmQgaW4gb3V0cHV0OlxuJXMnICUgb3V0cHV0KQorCisgICAgQE9FVGVzdElEKDExODgpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX3NjcmlwdChzZWxmKToKKyAgICAgICAgIyBOb3csIGEgZmlsZSB0aGF0J3MgaW4gU1JDX1VSSSBidXQgaW5zdGFsbGVkIGJ5IGEgc2NyaXB0IChzbyBubyBtZW50aW9uIGluIGRvX2luc3RhbGwpCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSArPSAiZmlsZTovL3Rlc3RmaWxlIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdkb19pbnN0YWxsX2FwcGVuZCgpIHtcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdGVzdGZpbGUgJHtEfSR7ZGF0YWRpcn0vc2VsZnRlc3QtcmVwbGFjZW1lLXNjcmlwdGVkXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtc2NyaXB0ZWQnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWyd0ZXN0ZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAT0VUZXN0SUQoMTE4MCkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfaW5zdF9mdW5jKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgaW5zdGFsbGVkIGZyb20gYSBmdW5jdGlvbiBjYWxsZWQgYnkgZG9faW5zdGFsbAorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LWZ1bmMnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWydzZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1mdW5jJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEBPRVRlc3RJRCgxMTg2KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9wb3N0aW5zdGFsbChzZWxmKToKKyAgICAgICAgIyBBIGZpbGUgdGhhdCdzIGNyZWF0ZWQgYnkgYSBwb3N0aW5zdGFsbCBzY3JpcHQgKGFuZCBleHBsaWNpdGx5IG1lbnRpb25lZCBpbiBpdCkKKyAgICAgICAgIyBGaXJzdCB0cnkgd2l0aG91dCBzcGVjaWZ5aW5nIHJlY2lwZQorICAgICAgICBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2ZhaWwoJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLXBvc3RpbnN0Jywgc2VsZi50ZXN0ZmlsZSwgWydGaWxlIC91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLXBvc3RpbnN0IG1heSBiZSB3cml0dGVuIG91dCBpbiBhIHByZS9wb3N0aW5zdGFsbCBzY3JpcHQgb2YgdGhlIGZvbGxvd2luZyByZWNpcGVzOicsICdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnXSkKKyAgICAgICAgIyBOb3cgc3BlY2lmeSByZWNpcGUKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtcG9zdGluc3RcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1wb3N0aW5zdCcsIHNlbGYudGVzdGZpbGUsICctciBzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCBleHBlY3RlZGxpbmVzLCBbJ3Rlc3RmaWxlJ10pCisKKyAgICBAT0VUZXN0SUQoMTE3OSkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfZXh0bGF5ZXIoc2VsZik6CisgICAgICAgICMgVHJ5IGNyZWF0aW5nIGEgYmJhcHBlbmQgaW4gYSBsYXllciB0aGF0J3Mgbm90IGluIGJibGF5ZXJzLmNvbmYgYW5kIGhhcyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUKKyAgICAgICAgZXh0dGVtcGxheWVyZGlyID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ2V4dGxheWVyJykKKyAgICAgICAgc2VsZi5fY3JlYXRlX3RlbXBfbGF5ZXIoZXh0dGVtcGxheWVyZGlyLCBGYWxzZSwgJ29lc2VsZnRlc3RleHRsYXllcicsIHJlY2lwZXBhdGhzcGVjPSdtZXRhZGF0YS9yZWNpcGVzL3JlY2lwZXMtKi8qJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdyZWNpcGV0b29sIGFwcGVuZGZpbGUgJXMgL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtb3JpZyAlcycgJSAoZXh0dGVtcGxheWVyZGlyLCBzZWxmLnRlc3RmaWxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignVHJhY2ViYWNrJywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgY3JlYXRlZGZpbGVzID0gW10KKyAgICAgICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsoZXh0dGVtcGxheWVyZGlyKToKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGNyZWF0ZWRmaWxlcy5hcHBlbmQob3MucGF0aC5yZWxwYXRoKG9zLnBhdGguam9pbihyb290LCBmKSwgZXh0dGVtcGxheWVyZGlyKSkKKyAgICAgICAgY3JlYXRlZGZpbGVzLnJlbW92ZSgnY29uZi9sYXllci5jb25mJykKKyAgICAgICAgZXhwZWN0ZWRmaWxlcyA9IFsnbWV0YWRhdGEvcmVjaXBlcy9yZWNpcGVzLXRlc3Qvc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlL3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZS5iYmFwcGVuZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ21ldGFkYXRhL3JlY2lwZXMvcmVjaXBlcy10ZXN0L3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZS9zZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUvc2VsZnRlc3QtcmVwbGFjZW1lLW9yaWcnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChjcmVhdGVkZmlsZXMpLCBzb3J0ZWQoZXhwZWN0ZWRmaWxlcykpCisKKyAgICBAT0VUZXN0SUQoMTE5MikKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfd2lsZGNhcmQoc2VsZik6CisKKyAgICAgICAgZGVmIHRyeV9hcHBlbmRmaWxlX3djKG9wdGlvbnMpOgorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdyZWNpcGV0b29sIGFwcGVuZGZpbGUgJXMgL2V0Yy9wcm9maWxlICVzICVzJyAlIChzZWxmLnRlbXBsYXllcmRpciwgc2VsZi50ZXN0ZmlsZSwgb3B0aW9ucykpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdUcmFjZWJhY2snLCByZXN1bHQub3V0cHV0KQorICAgICAgICAgICAgYmJhcHBlbmRmaWxlID0gTm9uZQorICAgICAgICAgICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsoc2VsZi50ZW1wbGF5ZXJkaXIpOgorICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICBpZiBmLmVuZHN3aXRoKCcuYmJhcHBlbmQnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiYXBwZW5kZmlsZSA9IGYKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBub3QgYmJhcHBlbmRmaWxlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnTm8gYmJhcHBlbmQgZmlsZSBjcmVhdGVkJykKKyAgICAgICAgICAgIHJ1bkNtZCgncm0gLXJmICVzL3JlY2lwZXMtKicgJSBzZWxmLnRlbXBsYXllcmRpcikKKyAgICAgICAgICAgIHJldHVybiBiYmFwcGVuZGZpbGUKKworICAgICAgICAjIENoZWNrIHdpdGhvdXQgd2lsZGNhcmQgb3B0aW9uCisgICAgICAgIHJlY2lwZWZuID0gb3MucGF0aC5iYXNlbmFtZShnZXRfYmJfdmFyKCdGSUxFJywgJ2Jhc2UtZmlsZXMnKSkKKyAgICAgICAgZmlsZW5hbWUgPSB0cnlfYXBwZW5kZmlsZV93YygnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlbmFtZSwgcmVjaXBlZm4ucmVwbGFjZSgnLmJiJywgJy5iYmFwcGVuZCcpKQorICAgICAgICAjIE5vdyBjaGVjayB3aXRoIHdpbGRjYXJkIG9wdGlvbgorICAgICAgICBmaWxlbmFtZSA9IHRyeV9hcHBlbmRmaWxlX3djKCctdycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZW5hbWUsIHJlY2lwZWZuLnNwbGl0KCdfJylbMF0gKyAnXyUuYmJhcHBlbmQnKQorCisgICAgQE9FVGVzdElEKDExOTMpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9jcmVhdGUoc2VsZik6CisgICAgICAgICMgVHJ5IGFkZGluZyBhIHJlY2lwZQorICAgICAgICB0ZW1wc3JjID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ3NyY3RyZWUnKQorICAgICAgICBvcy5tYWtlZGlycyh0ZW1wc3JjKQorICAgICAgICByZWNpcGVmaWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ2xvZ3JvdGF0ZV8zLjEyLjMuYmInKQorICAgICAgICBzcmN1cmkgPSAnaHR0cHM6Ly9naXRodWIuY29tL2xvZ3JvdGF0ZS9sb2dyb3RhdGUvcmVsZWFzZXMvZG93bmxvYWQvMy4xMi4zL2xvZ3JvdGF0ZS0zLjEyLjMudGFyLnh6JworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3JlY2lwZXRvb2wgY3JlYXRlIC1vICVzICVzIC14ICVzJyAlIChyZWNpcGVmaWxlLCBzcmN1cmksIHRlbXBzcmMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUocmVjaXBlZmlsZSkpCisgICAgICAgIGNoZWNrdmFycyA9IHt9CisgICAgICAgIGNoZWNrdmFyc1snTElDRU5TRSddID0gJ0dQTHYyJworICAgICAgICBjaGVja3ZhcnNbJ0xJQ19GSUxFU19DSEtTVU0nXSA9ICdmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMnCisgICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSSddID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9sb2dyb3RhdGUvbG9ncm90YXRlL3JlbGVhc2VzL2Rvd25sb2FkLyR7UFZ9L2xvZ3JvdGF0ZS0ke1BWfS50YXIueHonCisgICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSVttZDVzdW1dJ10gPSAnYTU2MGM1N2ZhYzg3YzQ1YjJmYzE3NDA2Y2RmNzkyODgnCisgICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSVtzaGEyNTZzdW1dJ10gPSAnMmU2YTQwMWNhYzkwMjRkYjIyODgyOTdlM2JlMWE4YWI2MGU3NDAxYmE4ZTkxMjI1MjE4YWFmNGEyN2U4MmEwNycKKyAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBbXSkKKworICAgIEBPRVRlc3RJRCgxMTk0KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfY3JlYXRlX2dpdChzZWxmKToKKyAgICAgICAgaWYgJ3gxMScgbm90IGluIGdldF9iYl92YXIoJ0RJU1RST19GRUFUVVJFUycpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnVGVzdCByZXF1aXJlcyB4MTEgYXMgZGlzdHJvIGZlYXR1cmUnKQorICAgICAgICAjIEVuc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBkYXRhIGluIHNobGlicy9wa2dkYXRhCisgICAgICAgIGJpdGJha2UoJ2xpYnBuZyBwYW5nbyBsaWJ4MTEgbGlieGV4dCBqcGVnIGxpYmNoZWNrJykKKyAgICAgICAgIyBUcnkgYWRkaW5nIGEgcmVjaXBlCisgICAgICAgIHRlbXBzcmMgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAnc3JjdHJlZScpCisgICAgICAgIG9zLm1ha2VkaXJzKHRlbXBzcmMpCisgICAgICAgIHJlY2lwZWZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAnbGlibWF0Y2hib3guYmInKQorICAgICAgICBzcmN1cmkgPSAnZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGlibWF0Y2hib3gnCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZChbJ3JlY2lwZXRvb2wnLCAnY3JlYXRlJywgJy1vJywgcmVjaXBlZmlsZSwgc3JjdXJpICsgIjtyZXY9OWY3Y2Y4ODk1YWUyZDM5YzQ2NWMwNGNjNzhlOTE4YzE1NzQyMDI2OSIsICcteCcsIHRlbXBzcmNdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUocmVjaXBlZmlsZSksICdyZWNpcGV0b29sIGRpZCBub3QgY3JlYXRlIHJlY2lwZSBmaWxlOyBvdXRwdXQ6XG4lcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBjaGVja3ZhcnMgPSB7fQorICAgICAgICBjaGVja3ZhcnNbJ0xJQ0VOU0UnXSA9ICdMR1BMdjIuMScKKyAgICAgICAgY2hlY2t2YXJzWydMSUNfRklMRVNfQ0hLU1VNJ10gPSAnZmlsZTovL0NPUFlJTkc7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0JworICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9ICcke1dPUktESVJ9L2dpdCcKKyAgICAgICAgY2hlY2t2YXJzWydQViddID0gJzEuMTErZ2l0JHtTUkNQVn0nCisgICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSSddID0gc3JjdXJpCisgICAgICAgIGNoZWNrdmFyc1snREVQRU5EUyddID0gc2V0KFsnbGliY2hlY2snLCAnbGlianBlZy10dXJibycsICdsaWJwbmcnLCAnbGlieDExJywgJ2xpYnhleHQnLCAncGFuZ28nXSkKKyAgICAgICAgaW5oZXJpdHMgPSBbJ2F1dG90b29scycsICdwa2djb25maWcnXQorICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIGluaGVyaXRzKQorCisgICAgQE9FVGVzdElEKDEzOTIpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9jcmVhdGVfc2ltcGxlKHNlbGYpOgorICAgICAgICAjIFRyeSBhZGRpbmcgYSByZWNpcGUKKyAgICAgICAgdGVtcHJlY2lwZSA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICdyZWNpcGUnKQorICAgICAgICBvcy5tYWtlZGlycyh0ZW1wcmVjaXBlKQorICAgICAgICBwdiA9ICcxLjcuMy4wJworICAgICAgICBzcmN1cmkgPSAnaHR0cDovL3d3dy5kZXN0LXVucmVhY2gub3JnL3NvY2F0L2Rvd25sb2FkL3NvY2F0LSVzLnRhci5iejInICUgcHYKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdyZWNpcGV0b29sIGNyZWF0ZSAlcyAtbyAlcycgJSAoc3JjdXJpLCB0ZW1wcmVjaXBlKSkKKyAgICAgICAgZGlybGlzdCA9IG9zLmxpc3RkaXIodGVtcHJlY2lwZSkKKyAgICAgICAgaWYgbGVuKGRpcmxpc3QpID4gMToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgncmVjaXBldG9vbCBjcmVhdGVkIG1vcmUgdGhhbiBqdXN0IG9uZSBmaWxlOyBvdXRwdXQ6XG4lc1xuZGlybGlzdDpcbiVzJyAlIChyZXN1bHQub3V0cHV0LCBzdHIoZGlybGlzdCkpKQorICAgICAgICBpZiBsZW4oZGlybGlzdCkgPCAxIG9yIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4odGVtcHJlY2lwZSwgZGlybGlzdFswXSkpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdyZWNpcGV0b29sIGRpZCBub3QgY3JlYXRlIHJlY2lwZSBmaWxlOyBvdXRwdXQ6XG4lc1xuZGlybGlzdDpcbiVzJyAlIChyZXN1bHQub3V0cHV0LCBzdHIoZGlybGlzdCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcmxpc3RbMF0sICdzb2NhdF8lcy5iYicgJSBwdiwgJ1JlY2lwZSBmaWxlIGluY29ycmVjdGx5IG5hbWVkJykKKyAgICAgICAgY2hlY2t2YXJzID0ge30KKyAgICAgICAgY2hlY2t2YXJzWydMSUNFTlNFJ10gPSBzZXQoWydVbmtub3duJywgJ0dQTHYyJ10pCisgICAgICAgIGNoZWNrdmFyc1snTElDX0ZJTEVTX0NIS1NVTSddID0gc2V0KFsnZmlsZTovL0NPUFlJTkcuT3BlblNTTDttZDU9NWM5YmNjYzc3ZjY3YTgzMjhlZjRlYmFmNDY4MTE2ZjQnLCAnZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzJ10pCisgICAgICAgICMgV2UgZG9uJ3QgY2hlY2sgREVQRU5EUyBzaW5jZSB0aGV5IGFyZSB2YXJpYWJsZSBmb3IgdGhpcyByZWNpcGUgZGVwZW5kaW5nIG9uIHdoYXQncyBpbiB0aGUgc3lzcm9vdAorICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9IE5vbmUKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSBzcmN1cmkucmVwbGFjZShwdiwgJyR7UFZ9JykKKyAgICAgICAgaW5oZXJpdHMgPSBbJ2F1dG90b29scyddCisgICAgICAgIHNlbGYuX3Rlc3RfcmVjaXBlX2NvbnRlbnRzKG9zLnBhdGguam9pbih0ZW1wcmVjaXBlLCBkaXJsaXN0WzBdKSwgY2hlY2t2YXJzLCBpbmhlcml0cykKKworICAgIEBPRVRlc3RJRCgxNDE4KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfY3JlYXRlX2NtYWtlKHNlbGYpOgorICAgICAgICAjIFRyeSBhZGRpbmcgYSByZWNpcGUKKyAgICAgICAgdGVtcHJlY2lwZSA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICdyZWNpcGUnKQorICAgICAgICBvcy5tYWtlZGlycyh0ZW1wcmVjaXBlKQorICAgICAgICByZWNpcGVmaWxlID0gb3MucGF0aC5qb2luKHRlbXByZWNpcGUsICduYXZpdF8wLjUuMC5iYicpCisgICAgICAgIHNyY3VyaSA9ICdodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L25hdml0L3YwLjUuMC9uYXZpdC0wLjUuMC50YXIuZ3onCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgncmVjaXBldG9vbCBjcmVhdGUgLW8gJXMgJXMnICUgKHRlbXByZWNpcGUsIHNyY3VyaSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShyZWNpcGVmaWxlKSkKKyAgICAgICAgY2hlY2t2YXJzID0ge30KKyAgICAgICAgY2hlY2t2YXJzWydMSUNFTlNFJ10gPSBzZXQoWydVbmtub3duJywgJ0dQTHYyJywgJ0xHUEx2MiddKQorICAgICAgICBjaGVja3ZhcnNbJ1NSQ19VUkknXSA9ICdodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L25hdml0L3Yke1BWfS9uYXZpdC0ke1BWfS50YXIuZ3onCisgICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSVttZDVzdW1dJ10gPSAnMjQyZjM5OGU5NzlhNmI4YzBmM2M4MDJiNjM0MzViNjgnCisgICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSVtzaGEyNTZzdW1dJ10gPSAnMTMzNTM0ODFkN2ZjMDFhNGY2NGUzODVkZGE0NjBiNTE0OTYzNjZiYmEwZmQyY2M4NWE4OWEwNzQ3OTEwZTk0ZCcKKyAgICAgICAgY2hlY2t2YXJzWydERVBFTkRTJ10gPSBzZXQoWydmcmVldHlwZScsICd6bGliJywgJ29wZW5zc2wnLCAnZ2xpYi0yLjAnLCAndmlydHVhbC9saWJnbCcsICd2aXJ0dWFsL2VnbCcsICdndGsrJywgJ2xpYnBuZycsICdsaWJzZGwnLCAnZnJlZWdsdXQnLCAnZGJ1cy1nbGliJ10pCisgICAgICAgIGluaGVyaXRzID0gWydjbWFrZScsICdweXRob24tZGlyJywgJ2dldHRleHQnLCAncGtnY29uZmlnJ10KKyAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBpbmhlcml0cykKKworICAgIEBPRVRlc3RJRCgxNjM4KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfY3JlYXRlX2dpdGh1YihzZWxmKToKKyAgICAgICAgIyBCYXNpYyB0ZXN0IHRvIHNlZSBpZiBnaXRodWIgVVJMIG1hbmdsaW5nIHdvcmtzCisgICAgICAgIHRlbXByZWNpcGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAncmVjaXBlJykKKyAgICAgICAgb3MubWFrZWRpcnModGVtcHJlY2lwZSkKKyAgICAgICAgcmVjaXBlZmlsZSA9IG9zLnBhdGguam9pbih0ZW1wcmVjaXBlLCAnbWVzb25fZ2l0LmJiJykKKyAgICAgICAgc3JjdXJpID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9tZXNvbmJ1aWxkL21lc29uO3Jldj0wLjMyLjAnCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZChbJ3JlY2lwZXRvb2wnLCAnY3JlYXRlJywgJy1vJywgdGVtcHJlY2lwZSwgc3JjdXJpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHJlY2lwZWZpbGUpKQorICAgICAgICBjaGVja3ZhcnMgPSB7fQorICAgICAgICBjaGVja3ZhcnNbJ0xJQ0VOU0UnXSA9IHNldChbJ0FwYWNoZS0yLjAnXSkKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSAnZ2l0Oi8vZ2l0aHViLmNvbS9tZXNvbmJ1aWxkL21lc29uO3Byb3RvY29sPWh0dHBzJworICAgICAgICBpbmhlcml0cyA9IFsnc2V0dXB0b29scyddCisgICAgICAgIHNlbGYuX3Rlc3RfcmVjaXBlX2NvbnRlbnRzKHJlY2lwZWZpbGUsIGNoZWNrdmFycywgaW5oZXJpdHMpCisKKyAgICBAT0VUZXN0SUQoMTYzOSkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2NyZWF0ZV9naXRodWJfdGFyYmFsbChzZWxmKToKKyAgICAgICAgIyBCYXNpYyB0ZXN0IHRvIGVuc3VyZSBnaXRodWIgVVJMIG1hbmdsaW5nIGRvZXNuJ3QgYXBwbHkgdG8gcmVsZWFzZSB0YXJiYWxscworICAgICAgICB0ZW1wcmVjaXBlID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ3JlY2lwZScpCisgICAgICAgIG9zLm1ha2VkaXJzKHRlbXByZWNpcGUpCisgICAgICAgIHB2ID0gJzAuMzIuMCcKKyAgICAgICAgcmVjaXBlZmlsZSA9IG9zLnBhdGguam9pbih0ZW1wcmVjaXBlLCAnbWVzb25fJXMuYmInICUgcHYpCisgICAgICAgIHNyY3VyaSA9ICdodHRwczovL2dpdGh1Yi5jb20vbWVzb25idWlsZC9tZXNvbi9yZWxlYXNlcy9kb3dubG9hZC8lcy9tZXNvbi0lcy50YXIuZ3onICUgKHB2LCBwdikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdyZWNpcGV0b29sIGNyZWF0ZSAtbyAlcyAlcycgJSAodGVtcHJlY2lwZSwgc3JjdXJpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHJlY2lwZWZpbGUpKQorICAgICAgICBjaGVja3ZhcnMgPSB7fQorICAgICAgICBjaGVja3ZhcnNbJ0xJQ0VOU0UnXSA9IHNldChbJ0FwYWNoZS0yLjAnXSkKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSAnaHR0cHM6Ly9naXRodWIuY29tL21lc29uYnVpbGQvbWVzb24vcmVsZWFzZXMvZG93bmxvYWQvJHtQVn0vbWVzb24tJHtQVn0udGFyLmd6JworICAgICAgICBpbmhlcml0cyA9IFsnc2V0dXB0b29scyddCisgICAgICAgIHNlbGYuX3Rlc3RfcmVjaXBlX2NvbnRlbnRzKHJlY2lwZWZpbGUsIGNoZWNrdmFycywgaW5oZXJpdHMpCisKKyAgICBAT0VUZXN0SUQoMTYzNykKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2NyZWF0ZV9naXRfaHR0cChzZWxmKToKKyAgICAgICAgIyBCYXNpYyB0ZXN0IHRvIGNoZWNrIGh0dHAgZ2l0IFVSTCBtYW5nbGluZyB3b3JrcworICAgICAgICB0ZW1wcmVjaXBlID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ3JlY2lwZScpCisgICAgICAgIG9zLm1ha2VkaXJzKHRlbXByZWNpcGUpCisgICAgICAgIHJlY2lwZWZpbGUgPSBvcy5wYXRoLmpvaW4odGVtcHJlY2lwZSwgJ21hdGNoYm94LXRlcm1pbmFsX2dpdC5iYicpCisgICAgICAgIHNyY3VyaSA9ICdodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvZ2l0L21hdGNoYm94LXRlcm1pbmFsJworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3JlY2lwZXRvb2wgY3JlYXRlIC1vICVzICVzJyAlICh0ZW1wcmVjaXBlLCBzcmN1cmkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUocmVjaXBlZmlsZSkpCisgICAgICAgIGNoZWNrdmFycyA9IHt9CisgICAgICAgIGNoZWNrdmFyc1snTElDRU5TRSddID0gc2V0KFsnR1BMdjInXSkKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSAnZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvZ2l0L21hdGNoYm94LXRlcm1pbmFsO3Byb3RvY29sPWh0dHAnCisgICAgICAgIGluaGVyaXRzID0gWydwa2djb25maWcnLCAnYXV0b3Rvb2xzJ10KKyAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBpbmhlcml0cykKKworICAgIGRlZiBfY29weV9maWxlX3dpdGhfY2xlYW51cChzZWxmLCBzcmNmaWxlLCBiYXNlZHN0ZGlyLCAqcGF0aHMpOgorICAgICAgICBkc3RkaXIgPSBiYXNlZHN0ZGlyCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhkc3RkaXIpKQorICAgICAgICBmb3IgcCBpbiBwYXRoczoKKyAgICAgICAgICAgIGRzdGRpciA9IG9zLnBhdGguam9pbihkc3RkaXIsIHApCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZHN0ZGlyKToKKyAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhkc3RkaXIpCisgICAgICAgICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChkc3RkaXIpCisgICAgICAgIGRzdGZpbGUgPSBvcy5wYXRoLmpvaW4oZHN0ZGlyLCBvcy5wYXRoLmJhc2VuYW1lKHNyY2ZpbGUpKQorICAgICAgICBpZiBzcmNmaWxlICE9IGRzdGZpbGU6CisgICAgICAgICAgICBzaHV0aWwuY29weShzcmNmaWxlLCBkc3RmaWxlKQorICAgICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChkc3RmaWxlKQorCisgICAgQE9FVGVzdElEKDE2NDApCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9sb2FkX3BsdWdpbihzZWxmKToKKyAgICAgICAgIiIiVGVzdCB0aGF0IHJlY2lwZXRvb2wgbG9hZHMgb25seSB0aGUgZmlyc3QgZm91bmQgcGx1Z2luIGluIEJCUEFUSC4iIiIKKworICAgICAgICByZWNpcGV0b29sID0gcnVuQ21kKCJ3aGljaCByZWNpcGV0b29sIikKKyAgICAgICAgZnJvbW5hbWUgPSBydW5DbWQoInJlY2lwZXRvb2wgLS1xdWlldCBwbHVnaW5maWxlIikKKyAgICAgICAgc3JjZmlsZSA9IGZyb21uYW1lLm91dHB1dAorICAgICAgICBzZWFyY2hwYXRoID0gc2VsZi5iYnBhdGguc3BsaXQoJzonKSArIFtvcy5wYXRoLmRpcm5hbWUocmVjaXBldG9vbC5vdXRwdXQpXQorICAgICAgICBwbHVnaW5jb250ZW50ID0gW10KKyAgICAgICAgd2l0aCBvcGVuKHNyY2ZpbGUpIGFzIGZoOgorICAgICAgICAgICAgcGx1Z2luY29udGVudCA9IGZoLnJlYWRsaW5lcygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ21ldGEtc2VsZnRlc3QnLCBzcmNmaWxlLCAnd3JvbmcgYmJwYXRoIHBsdWdpbiBmb3VuZCcpCisgICAgICAgICAgICBmb3IgcGF0aCBpbiBzZWFyY2hwYXRoOgorICAgICAgICAgICAgICAgIHNlbGYuX2NvcHlfZmlsZV93aXRoX2NsZWFudXAoc3JjZmlsZSwgcGF0aCwgJ2xpYicsICdyZWNpcGV0b29sJykKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgicmVjaXBldG9vbCAtLXF1aWV0IGNvdW50IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJzEnKQorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJyZWNpcGV0b29sIC0tcXVpZXQgbXVsdGlsb2FkZWQiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAibm8iKQorICAgICAgICAgICAgZm9yIHBhdGggaW4gc2VhcmNocGF0aDoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoInJlY2lwZXRvb2wgLS1xdWlldCBiYmRpciIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCBwYXRoKQorICAgICAgICAgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4ocmVzdWx0Lm91dHB1dCwgJ2xpYicsICdyZWNpcGV0b29sJywgJ2JicGF0aC5weScpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgd2l0aCBvcGVuKHNyY2ZpbGUsICd3JykgYXMgZmg6CisgICAgICAgICAgICAgICAgZmgud3JpdGVsaW5lcyhwbHVnaW5jb250ZW50KQorCisKK2NsYXNzIFJlY2lwZXRvb2xBcHBlbmRzcmNCYXNlKFJlY2lwZXRvb2xCYXNlKToKKyAgICBkZWYgX3RyeV9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGUoc2VsZiwgdGVzdHJlY2lwZSwgbmV3ZmlsZSwgZGVzdGZpbGUsIG9wdGlvbnMsIGV4cGVjdGVkbGluZXMsIGV4cGVjdGVkZmlsZXMpOgorICAgICAgICBjbWQgPSAncmVjaXBldG9vbCBhcHBlbmRzcmNmaWxlICVzICVzICVzICVzICVzJyAlIChvcHRpb25zLCBzZWxmLnRlbXBsYXllcmRpciwgdGVzdHJlY2lwZSwgbmV3ZmlsZSwgZGVzdGZpbGUpCisgICAgICAgIHJldHVybiBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRjbWQoY21kLCB0ZXN0cmVjaXBlLCBleHBlY3RlZGZpbGVzLCBleHBlY3RlZGxpbmVzKQorCisgICAgZGVmIF90cnlfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlcyhzZWxmLCB0ZXN0cmVjaXBlLCBuZXdmaWxlcywgZXhwZWN0ZWRsaW5lcz1Ob25lLCBleHBlY3RlZGZpbGVzPU5vbmUsIGRlc3RkaXI9Tm9uZSwgb3B0aW9ucz0nJyk6CisKKyAgICAgICAgaWYgZGVzdGRpcjoKKyAgICAgICAgICAgIG9wdGlvbnMgKz0gJyAtRCAlcycgJSBkZXN0ZGlyCisKKyAgICAgICAgaWYgZXhwZWN0ZWRmaWxlcyBpcyBOb25lOgorICAgICAgICAgICAgZXhwZWN0ZWRmaWxlcyA9IFtvcy5wYXRoLmJhc2VuYW1lKGYpIGZvciBmIGluIG5ld2ZpbGVzXQorCisgICAgICAgIGNtZCA9ICdyZWNpcGV0b29sIGFwcGVuZHNyY2ZpbGVzICVzICVzICVzICVzJyAlIChvcHRpb25zLCBzZWxmLnRlbXBsYXllcmRpciwgdGVzdHJlY2lwZSwgJyAnLmpvaW4obmV3ZmlsZXMpKQorICAgICAgICByZXR1cm4gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kY21kKGNtZCwgdGVzdHJlY2lwZSwgZXhwZWN0ZWRmaWxlcywgZXhwZWN0ZWRsaW5lcykKKworICAgIGRlZiBfdHJ5X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZV9mYWlsKHNlbGYsIHRlc3RyZWNpcGUsIG5ld2ZpbGUsIGRlc3RmaWxlLCBjaGVja2Vycm9yKToKKyAgICAgICAgY21kID0gJ3JlY2lwZXRvb2wgYXBwZW5kc3JjZmlsZSAlcyAlcyAlcyAlcycgJSAoc2VsZi50ZW1wbGF5ZXJkaXIsIHRlc3RyZWNpcGUsIG5ld2ZpbGUsIGRlc3RmaWxlIG9yICcnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoY21kLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0LnN0YXR1cywgMCwgJ0NvbW1hbmQgIiVzIiBzaG91bGQgaGF2ZSBmYWlsZWQgYnV0IGRpZG5cJ3QnICUgY21kKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdUcmFjZWJhY2snLCByZXN1bHQub3V0cHV0KQorICAgICAgICBmb3IgZXJyb3JzdHIgaW4gY2hlY2tlcnJvcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXJyb3JzdHIsIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9nZXRfZmlyc3RfZmlsZV91cmkocmVjaXBlKToKKyAgICAgICAgJycnUmV0dXJuIHRoZSBmaXJzdCBmaWxlOi8vIGluIFNSQ19VUkkgZm9yIHRoZSBzcGVjaWZpZWQgcmVjaXBlLicnJworICAgICAgICBzcmNfdXJpID0gZ2V0X2JiX3ZhcignU1JDX1VSSScsIHJlY2lwZSkuc3BsaXQoKQorICAgICAgICBmb3IgdXJpIGluIHNyY191cmk6CisgICAgICAgICAgICBwID0gdXJsbGliLnBhcnNlLnVybHBhcnNlKHVyaSkKKyAgICAgICAgICAgIGlmIHAuc2NoZW1lID09ICdmaWxlJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gcC5uZXRsb2MgKyBwLnBhdGgKKworICAgIGRlZiBfdGVzdF9hcHBlbmRzcmNmaWxlKHNlbGYsIHRlc3RyZWNpcGUsIGZpbGVuYW1lPU5vbmUsIGRlc3RkaXI9Tm9uZSwgaGFzX3NyY191cmk9VHJ1ZSwgc3JjZGlyPU5vbmUsIG5ld2ZpbGU9Tm9uZSwgb3B0aW9ucz0nJyk6CisgICAgICAgIGlmIG5ld2ZpbGUgaXMgTm9uZToKKyAgICAgICAgICAgIG5ld2ZpbGUgPSBzZWxmLnRlc3RmaWxlCisKKyAgICAgICAgaWYgc3JjZGlyOgorICAgICAgICAgICAgaWYgZGVzdGRpcjoKKyAgICAgICAgICAgICAgICBleHBlY3RlZF9zdWJkaXIgPSBvcy5wYXRoLmpvaW4oc3JjZGlyLCBkZXN0ZGlyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBleHBlY3RlZF9zdWJkaXIgPSBzcmNkaXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9wdGlvbnMgKz0gIiAtVyIKKyAgICAgICAgICAgIGV4cGVjdGVkX3N1YmRpciA9IGRlc3RkaXIKKworICAgICAgICBpZiBmaWxlbmFtZToKKyAgICAgICAgICAgIGlmIGRlc3RkaXI6CisgICAgICAgICAgICAgICAgZGVzdHBhdGggPSBvcy5wYXRoLmpvaW4oZGVzdGRpciwgZmlsZW5hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlc3RwYXRoID0gZmlsZW5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShuZXdmaWxlKQorICAgICAgICAgICAgaWYgZGVzdGRpcjoKKyAgICAgICAgICAgICAgICBkZXN0cGF0aCA9IGRlc3RkaXIgKyBvcy5zZXAKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVzdHBhdGggPSAnLicgKyBvcy5zZXAKKworICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisgICAgICAgIGlmIGhhc19zcmNfdXJpOgorICAgICAgICAgICAgdXJpID0gJ2ZpbGU6Ly8lcycgJSBmaWxlbmFtZQorICAgICAgICAgICAgaWYgZXhwZWN0ZWRfc3ViZGlyOgorICAgICAgICAgICAgICAgIHVyaSArPSAnO3N1YmRpcj0lcycgJSBleHBlY3RlZF9zdWJkaXIKKyAgICAgICAgICAgIGV4cGVjdGVkbGluZXNbMDowXSA9IFsnU1JDX1VSSSArPSAiJXMiXG4nICUgdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGUodGVzdHJlY2lwZSwgbmV3ZmlsZSwgZGVzdHBhdGgsIG9wdGlvbnMsIGV4cGVjdGVkbGluZXMsIFtmaWxlbmFtZV0pCisKKyAgICBkZWYgX3Rlc3RfYXBwZW5kc3JjZmlsZXMoc2VsZiwgdGVzdHJlY2lwZSwgbmV3ZmlsZXMsIGV4cGVjdGVkZmlsZXM9Tm9uZSwgZGVzdGRpcj1Ob25lLCBvcHRpb25zPScnKToKKyAgICAgICAgaWYgZXhwZWN0ZWRmaWxlcyBpcyBOb25lOgorICAgICAgICAgICAgZXhwZWN0ZWRmaWxlcyA9IFtvcy5wYXRoLmJhc2VuYW1lKG4pIGZvciBuIGluIG5ld2ZpbGVzXQorCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVzKHRlc3RyZWNpcGUsIG5ld2ZpbGVzLCBleHBlY3RlZGZpbGVzPWV4cGVjdGVkZmlsZXMsIGRlc3RkaXI9ZGVzdGRpciwgb3B0aW9ucz1vcHRpb25zKQorCisgICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhbJ1NSQ19VUkknLCAnRklMRScsICdGSUxFU0VYVFJBUEFUSFMnXSwgdGVzdHJlY2lwZSkKKyAgICAgICAgc3JjX3VyaSA9IGJiX3ZhcnNbJ1NSQ19VUkknXS5zcGxpdCgpCisgICAgICAgIGZvciBmIGluIGV4cGVjdGVkZmlsZXM6CisgICAgICAgICAgICBpZiBkZXN0ZGlyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ZpbGU6Ly8lcztzdWJkaXI9JXMnICUgKGYsIGRlc3RkaXIpLCBzcmNfdXJpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdmaWxlOi8vJXMnICUgZiwgc3JjX3VyaSkKKworICAgICAgICByZWNpcGVmaWxlID0gYmJfdmFyc1snRklMRSddCisgICAgICAgIGJiYXBwZW5kZmlsZSA9IHNlbGYuX2NoZWNrX2JiYXBwZW5kKHRlc3RyZWNpcGUsIHJlY2lwZWZpbGUsIHNlbGYudGVtcGxheWVyZGlyKQorICAgICAgICBmaWxlc2RpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoYmJhcHBlbmRmaWxlKSwgdGVzdHJlY2lwZSkKKyAgICAgICAgZmlsZXNleHRyYXBhdGhzID0gYmJfdmFyc1snRklMRVNFWFRSQVBBVEhTJ10uc3BsaXQoJzonKQorICAgICAgICBzZWxmLmFzc2VydEluKGZpbGVzZGlyLCBmaWxlc2V4dHJhcGF0aHMpCisKKworCisKK2NsYXNzIFJlY2lwZXRvb2xBcHBlbmRzcmNUZXN0cyhSZWNpcGV0b29sQXBwZW5kc3JjQmFzZSk6CisKKyAgICBAT0VUZXN0SUQoMTI3MykKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSgnYmFzZS1maWxlcycsICdhLWZpbGUnKQorCisgICAgQE9FVGVzdElEKDEyNzQpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlX2Jhc2ljX3dpbGRjYXJkKHNlbGYpOgorICAgICAgICB0ZXN0cmVjaXBlID0gJ2Jhc2UtZmlsZXMnCisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSh0ZXN0cmVjaXBlLCAnYS1maWxlJywgb3B0aW9ucz0nLXcnKQorICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIGJiYXBwZW5kZmlsZSA9IHNlbGYuX2NoZWNrX2JiYXBwZW5kKHRlc3RyZWNpcGUsIHJlY2lwZWZpbGUsIHNlbGYudGVtcGxheWVyZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYmFzZW5hbWUoYmJhcHBlbmRmaWxlKSwgJyVzXyUlLmJiYXBwZW5kJyAlIHRlc3RyZWNpcGUpCisKKyAgICBAT0VUZXN0SUQoMTI4MSkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfc3ViZGlyX2Jhc2ljKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGUoJ2Jhc2UtZmlsZXMnLCAnYS1maWxlJywgJ3RtcCcpCisKKyAgICBAT0VUZXN0SUQoMTI4MikKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfc3ViZGlyX2Jhc2ljX2RpcmRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSgnYmFzZS1maWxlcycsIGRlc3RkaXI9J3RtcCcpCisKKyAgICBAT0VUZXN0SUQoMTI4MCkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfc3JjZGlyX2Jhc2ljKHNlbGYpOgorICAgICAgICB0ZXN0cmVjaXBlID0gJ2Jhc2gnCisgICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhbJ1MnLCAnV09SS0RJUiddLCB0ZXN0cmVjaXBlKQorICAgICAgICBzcmNkaXIgPSBiYl92YXJzWydTJ10KKyAgICAgICAgd29ya2RpciA9IGJiX3ZhcnNbJ1dPUktESVInXQorICAgICAgICBzdWJkaXIgPSBvcy5wYXRoLnJlbHBhdGgoc3JjZGlyLCB3b3JrZGlyKQorICAgICAgICBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGUodGVzdHJlY2lwZSwgJ2EtZmlsZScsIHNyY2Rpcj1zdWJkaXIpCisKKyAgICBAT0VUZXN0SUQoMTI3NSkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfZXhpc3RpbmdfaW5fc3JjX3VyaShzZWxmKToKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdiYXNlLWZpbGVzJworICAgICAgICBmaWxlcGF0aCA9IHNlbGYuX2dldF9maXJzdF9maWxlX3VyaSh0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZXBhdGgsICdVbmFibGUgdG8gdGVzdCwgbm8gZmlsZTovLyB1cmkgZm91bmQgaW4gU1JDX1VSSSBmb3IgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5fdGVzdF9hcHBlbmRzcmNmaWxlKHRlc3RyZWNpcGUsIGZpbGVwYXRoLCBoYXNfc3JjX3VyaT1GYWxzZSkKKworICAgIEBPRVRlc3RJRCgxMjc2KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZV9leGlzdGluZ19pbl9zcmNfdXJpX2RpZmZfcGFyYW1zKHNlbGYpOgorICAgICAgICB0ZXN0cmVjaXBlID0gJ2Jhc2UtZmlsZXMnCisgICAgICAgIHN1YmRpciA9ICd0bXAnCisgICAgICAgIGZpbGVwYXRoID0gc2VsZi5fZ2V0X2ZpcnN0X2ZpbGVfdXJpKHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlcGF0aCwgJ1VuYWJsZSB0byB0ZXN0LCBubyBmaWxlOi8vIHVyaSBmb3VuZCBpbiBTUkNfVVJJIGZvciAlcycgJSB0ZXN0cmVjaXBlKQorCisgICAgICAgIG91dHB1dCA9IHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSh0ZXN0cmVjaXBlLCBmaWxlcGF0aCwgc3ViZGlyLCBoYXNfc3JjX3VyaT1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVycycgaW4gbCBmb3IgbCBpbiBvdXRwdXQpKQorCisgICAgQE9FVGVzdElEKDEyNzcpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlX3JlcGxhY2VfZmlsZV9zcmNkaXIoc2VsZik6CisgICAgICAgIHRlc3RyZWNpcGUgPSAnYmFzaCcKKyAgICAgICAgZmlsZXBhdGggPSAnTWFrZWZpbGUuaW4nCisgICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhbJ1MnLCAnV09SS0RJUiddLCB0ZXN0cmVjaXBlKQorICAgICAgICBzcmNkaXIgPSBiYl92YXJzWydTJ10KKyAgICAgICAgd29ya2RpciA9IGJiX3ZhcnNbJ1dPUktESVInXQorICAgICAgICBzdWJkaXIgPSBvcy5wYXRoLnJlbHBhdGgoc3JjZGlyLCB3b3JrZGlyKQorCisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSh0ZXN0cmVjaXBlLCBmaWxlcGF0aCwgc3JjZGlyPXN1YmRpcikKKyAgICAgICAgYml0YmFrZSgnJXM6ZG9fdW5wYWNrJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlbihzZWxmLnRlc3RmaWxlLCAncicpLnJlYWQoKSwgb3Blbihvcy5wYXRoLmpvaW4oc3JjZGlyLCBmaWxlcGF0aCksICdyJykucmVhZCgpKQorCisgICAgQE9FVGVzdElEKDEyNzgpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlc19iYXNpYyhzZWxmLCBkZXN0ZGlyPU5vbmUpOgorICAgICAgICBuZXdmaWxlcyA9IFtzZWxmLnRlc3RmaWxlXQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCA1KToKKyAgICAgICAgICAgIHRlc3RmaWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ3Rlc3RmaWxlJWQnICUgaSkKKyAgICAgICAgICAgIHdpdGggb3Blbih0ZXN0ZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ1Rlc3QgZmlsZSAlZFxuJyAlIGkpCisgICAgICAgICAgICBuZXdmaWxlcy5hcHBlbmQodGVzdGZpbGUpCisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZXMoJ2djYycsIG5ld2ZpbGVzLCBkZXN0ZGlyPWRlc3RkaXIsIG9wdGlvbnM9Jy1XJykKKworICAgIEBPRVRlc3RJRCgxMjc5KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZXNfYmFzaWNfc3ViZGlyKHNlbGYpOgorICAgICAgICBzZWxmLnRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlc19iYXNpYyhkZXN0ZGlyPSd0ZXN0ZGlyJykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL3J1bmNtZC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL3J1bmNtZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzZkNzA2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvcnVuY21kLnB5CkBAIC0wLDAgKzEsMTM0IEBACitmcm9tIG9lcWEuc2VsZnRlc3QuY2FzZSBpbXBvcnQgT0VTZWxmdGVzdFRlc3RDYXNlCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZAorZnJvbSBvZXFhLnV0aWxzIGltcG9ydCBDb21tYW5kRXJyb3IKK2Zyb20gb2VxYS5jb3JlLmRlY29yYXRvci5vZWlkIGltcG9ydCBPRVRlc3RJRAorCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2ltcG9ydCBzaWduYWwKKworY2xhc3MgTWVtTG9nZ2VyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmluZm9fbXNncyA9IFtdCisgICAgICAgIHNlbGYuZXJyb3JfbXNncyA9IFtdCisKKyAgICBkZWYgaW5mbyhzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLmluZm9fbXNncy5hcHBlbmQobXNnKQorCisgICAgZGVmIGVycm9yKHNlbGYsIG1zZyk6CisgICAgICAgIHNlbGYuZXJyb3JfbXNncy5hcHBlbmQobXNnKQorCitjbGFzcyBSdW5DbWRUZXN0cyhPRVNlbGZ0ZXN0VGVzdENhc2UpOgorICAgICIiIiBCYXNpYyB0ZXN0cyBmb3IgcnVuQ21kKCkgdXRpbGl0eSBmdW5jdGlvbiAiIiIKKworICAgICMgVGhlIGRlbHRhIGlzIGludGVudGlvbmFsbHkgc21hbGxlciB0aGFuIHRoZSB0aW1lb3V0LCB0byBkZXRlY3QgY2FzZXMgd2hlcmUKKyAgICAjIHdlIGluY29ycmVjdGx5IGFwcGx5IHRoZSB0aW1lb3V0IG1vcmUgdGhhbiBvbmNlLgorICAgIFRJTUVPVVQgPSAyCisgICAgREVMVEEgPSAxCisKKyAgICBAT0VUZXN0SUQoMTkxNikKKyAgICBkZWYgdGVzdF9yZXN1bHRfb2theShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJ0cnVlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc3RhdHVzLCAwKQorCisgICAgQE9FVGVzdElEKDE5MTUpCisgICAgZGVmIHRlc3RfcmVzdWx0X2ZhbHNlKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBydW5DbWQoImZhbHNlIiwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDEpCisKKyAgICBAT0VUZXN0SUQoMTkxNykKKyAgICBkZWYgdGVzdF9zaGVsbChzZWxmKToKKyAgICAgICAgIyBBIHNoZWxsIGlzIHVzZWQgZm9yIGFsbCBzdHJpbmcgY29tbWFuZHMuCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgiZmFsc2U7IHRydWUiLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMCkKKworICAgIEBPRVRlc3RJRCgxOTEwKQorICAgIGRlZiB0ZXN0X25vX3NoZWxsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhGaWxlTm90Rm91bmRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuQ21kLCAiZmFsc2U7IHRydWUiLCBzaGVsbD1GYWxzZSkKKworICAgIEBPRVRlc3RJRCgxOTA2KQorICAgIGRlZiB0ZXN0X2xpc3Rfbm90X2ZvdW5kKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhGaWxlTm90Rm91bmRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuQ21kLCBbImZhbHNlOyB0cnVlIl0pCisKKyAgICBAT0VUZXN0SUQoMTkwNykKKyAgICBkZWYgdGVzdF9saXN0X29rYXkoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZChbInRydWUiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc3RhdHVzLCAwKQorCisgICAgQE9FVGVzdElEKDE5MTMpCisgICAgZGVmIHRlc3RfcmVzdWx0X2Fzc2VydGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoQXNzZXJ0aW9uRXJyb3IsICJDb21tYW5kICdlY2hvIC4qIGZhbHNlJyByZXR1cm5lZCBub24temVybyBleGl0IHN0YXR1cyAxOlxuZm9vYmFyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuQ21kLCAiZWNobyBmb29iYXIgPiYyOyBmYWxzZSIsIHNoZWxsPVRydWUpCisKKyAgICBAT0VUZXN0SUQoMTkxNCkKKyAgICBkZWYgdGVzdF9yZXN1bHRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChDb21tYW5kRXJyb3IsICJDb21tYW5kICdlY2hvIC4qIGZhbHNlJyByZXR1cm5lZCBub24temVybyBleGl0IHN0YXR1cyAxIHdpdGggb3V0cHV0OiBmb29iYXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5DbWQsICJlY2hvIGZvb2JhciA+JjI7IGZhbHNlIiwgc2hlbGw9VHJ1ZSwgYXNzZXJ0X2Vycm9yPUZhbHNlKQorCisgICAgQE9FVGVzdElEKDE5MTEpCisgICAgZGVmIHRlc3Rfb3V0cHV0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBydW5DbWQoImVjaG8gc3Rkb3V0OyBlY2hvIHN0ZGVyciA+JjIiLCBzaGVsbD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJzdGRvdXRcbnN0ZGVyciIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiIsIHJlc3VsdC5lcnJvcikKKworICAgIEBPRVRlc3RJRCgxOTEyKQorICAgIGRlZiB0ZXN0X291dHB1dF9zcGxpdChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJlY2hvIHN0ZG91dDsgZWNobyBzdGRlcnIgPiYyIiwgc2hlbGw9VHJ1ZSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgic3Rkb3V0IiwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgic3RkZXJyIiwgcmVzdWx0LmVycm9yKQorCisgICAgQE9FVGVzdElEKDE5MjApCisgICAgZGVmIHRlc3RfdGltZW91dChzZWxmKToKKyAgICAgICAgbnVtdGhyZWFkcyA9IHRocmVhZGluZy5hY3RpdmVfY291bnQoKQorICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCisgICAgICAgICMgS2lsbGluZyBhIGhhbmdpbmcgcHJvY2VzcyBvbmx5IHdvcmtzIHdoZW4gbm90IHVzaW5nIGEgc2hlbGw/IQorICAgICAgICByZXN1bHQgPSBydW5DbWQoWydzbGVlcCcsICc2MCddLCB0aW1lb3V0PXNlbGYuVElNRU9VVCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIC1zaWduYWwuU0lHVEVSTSkKKyAgICAgICAgZW5kID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGVuZCAtIHN0YXJ0LCBzZWxmLlRJTUVPVVQgKyBzZWxmLkRFTFRBKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bXRocmVhZHMsIHRocmVhZGluZy5hY3RpdmVfY291bnQoKSkKKworICAgIEBPRVRlc3RJRCgxOTIxKQorICAgIGRlZiB0ZXN0X3RpbWVvdXRfc3BsaXQoc2VsZik6CisgICAgICAgIG51bXRocmVhZHMgPSB0aHJlYWRpbmcuYWN0aXZlX2NvdW50KCkKKyAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQorICAgICAgICAjIEtpbGxpbmcgYSBoYW5naW5nIHByb2Nlc3Mgb25seSB3b3JrcyB3aGVuIG5vdCB1c2luZyBhIHNoZWxsPyEKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKFsnc2xlZXAnLCAnNjAnXSwgdGltZW91dD1zZWxmLlRJTUVPVVQsIGlnbm9yZV9zdGF0dXM9VHJ1ZSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc3RhdHVzLCAtc2lnbmFsLlNJR1RFUk0pCisgICAgICAgIGVuZCA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhlbmQgLSBzdGFydCwgc2VsZi5USU1FT1VUICsgc2VsZi5ERUxUQSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW10aHJlYWRzLCB0aHJlYWRpbmcuYWN0aXZlX2NvdW50KCkpCisKKyAgICBAT0VUZXN0SUQoMTkxOCkKKyAgICBkZWYgdGVzdF9zdGRpbihzZWxmKToKKyAgICAgICAgbnVtdGhyZWFkcyA9IHRocmVhZGluZy5hY3RpdmVfY291bnQoKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoImNhdCIsIGRhdGE9YiJoZWxsbyB3b3JsZCIsIHRpbWVvdXQ9c2VsZi5USU1FT1VUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJoZWxsbyB3b3JsZCIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtdGhyZWFkcywgdGhyZWFkaW5nLmFjdGl2ZV9jb3VudCgpKQorCisgICAgQE9FVGVzdElEKDE5MTkpCisgICAgZGVmIHRlc3Rfc3RkaW5fdGltZW91dChzZWxmKToKKyAgICAgICAgbnVtdGhyZWFkcyA9IHRocmVhZGluZy5hY3RpdmVfY291bnQoKQorICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZChbJ3NsZWVwJywgJzYwJ10sIGRhdGE9YiJoZWxsbyB3b3JsZCIsIHRpbWVvdXQ9c2VsZi5USU1FT1VULCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgLXNpZ25hbC5TSUdURVJNKQorICAgICAgICBlbmQgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydExlc3MoZW5kIC0gc3RhcnQsIHNlbGYuVElNRU9VVCArIHNlbGYuREVMVEEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtdGhyZWFkcywgdGhyZWFkaW5nLmFjdGl2ZV9jb3VudCgpKQorCisgICAgQE9FVGVzdElEKDE5MDgpCisgICAgZGVmIHRlc3RfbG9nKHNlbGYpOgorICAgICAgICBsb2cgPSBNZW1Mb2dnZXIoKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoImVjaG8gc3Rkb3V0OyBlY2hvIHN0ZGVyciA+JjIiLCBzaGVsbD1UcnVlLCBvdXRwdXRfbG9nPWxvZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbIlJ1bm5pbmc6IGVjaG8gc3Rkb3V0OyBlY2hvIHN0ZGVyciA+JjIiLCAic3Rkb3V0IiwgInN0ZGVyciJdLCBsb2cuaW5mb19tc2dzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBsb2cuZXJyb3JfbXNncykKKworICAgIEBPRVRlc3RJRCgxOTA5KQorICAgIGRlZiB0ZXN0X2xvZ19zcGxpdChzZWxmKToKKyAgICAgICAgbG9nID0gTWVtTG9nZ2VyKCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJlY2hvIHN0ZG91dDsgZWNobyBzdGRlcnIgPiYyIiwgc2hlbGw9VHJ1ZSwgb3V0cHV0X2xvZz1sb2csIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyJSdW5uaW5nOiBlY2hvIHN0ZG91dDsgZWNobyBzdGRlcnIgPiYyIiwgInN0ZG91dCJdLCBsb2cuaW5mb19tc2dzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsic3RkZXJyIl0sIGxvZy5lcnJvcl9tc2dzKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvcnVucWVtdS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL3J1bnFlbXUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdkNDFmNQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL3J1bnFlbXUucHkKQEAgLTAsMCArMSwxMzggQEAKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE3IFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgorIworCitpbXBvcnQgcmUKKworZnJvbSBvZXFhLnNlbGZ0ZXN0LmNhc2UgaW1wb3J0IE9FU2VsZnRlc3RUZXN0Q2FzZQorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBiaXRiYWtlLCBydW5xZW11LCBnZXRfYmJfdmFyCitmcm9tIG9lcWEuY29yZS5kZWNvcmF0b3Iub2VpZCBpbXBvcnQgT0VUZXN0SUQKKworY2xhc3MgUnVucWVtdVRlc3RzKE9FU2VsZnRlc3RUZXN0Q2FzZSk6CisgICAgIiIiUnVucWVtdSB0ZXN0IGNsYXNzIiIiCisKKyAgICBpbWFnZV9pc19yZWFkeSA9IEZhbHNlCisgICAgZGVwbG95X2Rpcl9pbWFnZSA9ICcnCisgICAgIyBXZSBvbmx5IHdhbnQgdG8gcHJpbnQgcnVucWVtdSBzdGRvdXQvc3RkZXJyIGlmIHRoZXJlIGlzIGEgdGVzdCBjYXNlIGZhaWx1cmUKKyAgICBidWZmZXIgPSBUcnVlCisKKyAgICBkZWYgc2V0VXBMb2NhbChzZWxmKToKKyAgICAgICAgc3VwZXIoUnVucWVtdVRlc3RzLCBzZWxmKS5zZXRVcExvY2FsKCkKKyAgICAgICAgc2VsZi5yZWNpcGUgPSAnY29yZS1pbWFnZS1taW5pbWFsJworICAgICAgICBzZWxmLm1hY2hpbmUgPSAgJ3FlbXV4ODYtNjQnCisgICAgICAgIHNlbGYuZnN0eXBlcyA9ICJleHQ0IGlzbyBoZGRpbWcgd2ljLnZtZGsgd2ljLnFjb3cyIHdpYy52ZGkiCisgICAgICAgIHNlbGYuY21kX2NvbW1vbiA9ICJydW5xZW11IG5vZ3JhcGhpYyIKKworICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygKKyIiIgorTUFDSElORSA9ICIlcyIKK0lNQUdFX0ZTVFlQRVMgPSAiJXMiCisjIDEwIG1lYW5zIDEgc2Vjb25kCitTWVNMSU5VWF9USU1FT1VUID0gIjEwIgorIiIiCislIChzZWxmLm1hY2hpbmUsIHNlbGYuZnN0eXBlcykKKyAgICAgICAgKQorCisgICAgICAgIGlmIG5vdCBSdW5xZW11VGVzdHMuaW1hZ2VfaXNfcmVhZHk6CisgICAgICAgICAgICBSdW5xZW11VGVzdHMuZGVwbG95X2Rpcl9pbWFnZSA9IGdldF9iYl92YXIoJ0RFUExPWV9ESVJfSU1BR0UnKQorICAgICAgICAgICAgYml0YmFrZShzZWxmLnJlY2lwZSkKKyAgICAgICAgICAgIFJ1bnFlbXVUZXN0cy5pbWFnZV9pc19yZWFkeSA9IFRydWUKKworICAgIEBPRVRlc3RJRCgyMDAxKQorICAgIGRlZiB0ZXN0X2Jvb3RfbWFjaGluZShzZWxmKToKKyAgICAgICAgIiIiVGVzdCBydW5xZW11IG1hY2hpbmUiIiIKKyAgICAgICAgY21kID0gIiVzICVzIiAlIChzZWxmLmNtZF9jb21tb24sIHNlbGYubWFjaGluZSkKKyAgICAgICAgd2l0aCBydW5xZW11KHNlbGYucmVjaXBlLCBzc2g9RmFsc2UsIGxhdW5jaF9jbWQ9Y21kKSBhcyBxZW11OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHFlbXUucnVubmVyLmxvZ2dlZCwgIkZhaWxlZDogJXMiICUgY21kKQorCisgICAgQE9FVGVzdElEKDIwMDIpCisgICAgZGVmIHRlc3RfYm9vdF9tYWNoaW5lX2V4dDQoc2VsZik6CisgICAgICAgICIiIlRlc3QgcnVucWVtdSBtYWNoaW5lIGV4dDQiIiIKKyAgICAgICAgY21kID0gIiVzICVzIGV4dDQiICUgKHNlbGYuY21kX2NvbW1vbiwgc2VsZi5tYWNoaW5lKQorICAgICAgICB3aXRoIHJ1bnFlbXUoc2VsZi5yZWNpcGUsIHNzaD1GYWxzZSwgbGF1bmNoX2NtZD1jbWQpIGFzIHFlbXU6CisgICAgICAgICAgICB3aXRoIG9wZW4ocWVtdS5xZW11cnVubmVybG9nKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgncm9vdGZzLmV4dDQnIGluIGYucmVhZCgpLCAiRmFpbGVkOiAlcyIgJSBjbWQpCisKKyAgICBAT0VUZXN0SUQoMjAwMykKKyAgICBkZWYgdGVzdF9ib290X21hY2hpbmVfaXNvKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHJ1bnFlbXUgbWFjaGluZSBpc28iIiIKKyAgICAgICAgY21kID0gIiVzICVzIGlzbyIgJSAoc2VsZi5jbWRfY29tbW9uLCBzZWxmLm1hY2hpbmUpCisgICAgICAgIHdpdGggcnVucWVtdShzZWxmLnJlY2lwZSwgc3NoPUZhbHNlLCBsYXVuY2hfY21kPWNtZCkgYXMgcWVtdToKKyAgICAgICAgICAgIHdpdGggb3BlbihxZW11LnFlbXVydW5uZXJsb2cpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdtZWRpYT1jZHJvbScgaW4gZi5yZWFkKCksICJGYWlsZWQ6ICVzIiAlIGNtZCkKKworICAgIEBPRVRlc3RJRCgyMDA0KQorICAgIGRlZiB0ZXN0X2Jvb3RfcmVjaXBlX2ltYWdlKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHJ1bnFlbXUgcmVjaXBlLWltYWdlIiIiCisgICAgICAgIGNtZCA9ICIlcyAlcyIgJSAoc2VsZi5jbWRfY29tbW9uLCBzZWxmLnJlY2lwZSkKKyAgICAgICAgd2l0aCBydW5xZW11KHNlbGYucmVjaXBlLCBzc2g9RmFsc2UsIGxhdW5jaF9jbWQ9Y21kKSBhcyBxZW11OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHFlbXUucnVubmVyLmxvZ2dlZCwgIkZhaWxlZDogJXMiICUgY21kKQorCisgICAgQE9FVGVzdElEKDIwMDUpCisgICAgZGVmIHRlc3RfYm9vdF9yZWNpcGVfaW1hZ2Vfdm1kayhzZWxmKToKKyAgICAgICAgIiIiVGVzdCBydW5xZW11IHJlY2lwZS1pbWFnZSB2bWRrIiIiCisgICAgICAgIGNtZCA9ICIlcyAlcyB3aWMudm1kayIgJSAoc2VsZi5jbWRfY29tbW9uLCBzZWxmLnJlY2lwZSkKKyAgICAgICAgd2l0aCBydW5xZW11KHNlbGYucmVjaXBlLCBzc2g9RmFsc2UsIGxhdW5jaF9jbWQ9Y21kKSBhcyBxZW11OgorICAgICAgICAgICAgd2l0aCBvcGVuKHFlbXUucWVtdXJ1bm5lcmxvZykgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2Zvcm1hdD12bWRrJyBpbiBmLnJlYWQoKSwgIkZhaWxlZDogJXMiICUgY21kKQorCisgICAgQE9FVGVzdElEKDIwMDYpCisgICAgZGVmIHRlc3RfYm9vdF9yZWNpcGVfaW1hZ2VfdmRpKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHJ1bnFlbXUgcmVjaXBlLWltYWdlIHZkaSIiIgorICAgICAgICBjbWQgPSAiJXMgJXMgd2ljLnZkaSIgJSAoc2VsZi5jbWRfY29tbW9uLCBzZWxmLnJlY2lwZSkKKyAgICAgICAgd2l0aCBydW5xZW11KHNlbGYucmVjaXBlLCBzc2g9RmFsc2UsIGxhdW5jaF9jbWQ9Y21kKSBhcyBxZW11OgorICAgICAgICAgICAgd2l0aCBvcGVuKHFlbXUucWVtdXJ1bm5lcmxvZykgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2Zvcm1hdD12ZGknIGluIGYucmVhZCgpLCAiRmFpbGVkOiAlcyIgJSBjbWQpCisKKyAgICBAT0VUZXN0SUQoMjAwNykKKyAgICBkZWYgdGVzdF9ib290X2RlcGxveShzZWxmKToKKyAgICAgICAgIiIiVGVzdCBydW5xZW11IGRlcGxveV9kaXJfaW1hZ2UiIiIKKyAgICAgICAgY21kID0gIiVzICVzIiAlIChzZWxmLmNtZF9jb21tb24sIHNlbGYuZGVwbG95X2Rpcl9pbWFnZSkKKyAgICAgICAgd2l0aCBydW5xZW11KHNlbGYucmVjaXBlLCBzc2g9RmFsc2UsIGxhdW5jaF9jbWQ9Y21kKSBhcyBxZW11OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHFlbXUucnVubmVyLmxvZ2dlZCwgIkZhaWxlZDogJXMiICUgY21kKQorCisgICAgQE9FVGVzdElEKDIwMDgpCisgICAgZGVmIHRlc3RfYm9vdF9kZXBsb3lfaGRkaW1nKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHJ1bnFlbXUgZGVwbG95X2Rpcl9pbWFnZSBoZGRpbWciIiIKKyAgICAgICAgY21kID0gIiVzICVzIGhkZGltZyIgJSAoc2VsZi5jbWRfY29tbW9uLCBzZWxmLmRlcGxveV9kaXJfaW1hZ2UpCisgICAgICAgIHdpdGggcnVucWVtdShzZWxmLnJlY2lwZSwgc3NoPUZhbHNlLCBsYXVuY2hfY21kPWNtZCkgYXMgcWVtdToKKyAgICAgICAgICAgIHdpdGggb3BlbihxZW11LnFlbXVydW5uZXJsb2cpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLnNlYXJjaCgnZmlsZT0uKi5oZGRpbWcnLCBmLnJlYWQoKSksICJGYWlsZWQ6ICVzIiAlIGNtZCkKKworICAgIEBPRVRlc3RJRCgyMDA5KQorICAgIGRlZiB0ZXN0X2Jvb3RfbWFjaGluZV9zbGlycChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBydW5xZW11IG1hY2hpbmUgc2xpcnAiIiIKKyAgICAgICAgY21kID0gIiVzIHNsaXJwICVzIiAlIChzZWxmLmNtZF9jb21tb24sIHNlbGYubWFjaGluZSkKKyAgICAgICAgd2l0aCBydW5xZW11KHNlbGYucmVjaXBlLCBzc2g9RmFsc2UsIGxhdW5jaF9jbWQ9Y21kKSBhcyBxZW11OgorICAgICAgICAgICAgd2l0aCBvcGVuKHFlbXUucWVtdXJ1bm5lcmxvZykgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJyAtbmV0ZGV2IHVzZXInIGluIGYucmVhZCgpLCAiRmFpbGVkOiAlcyIgJSBjbWQpCisKKyAgICBAT0VUZXN0SUQoMjAwOSkKKyAgICBkZWYgdGVzdF9ib290X21hY2hpbmVfc2xpcnBfcWNvdzIoc2VsZik6CisgICAgICAgICIiIlRlc3QgcnVucWVtdSBtYWNoaW5lIHNsaXJwIHFjb3cyIiIiCisgICAgICAgIGNtZCA9ICIlcyBzbGlycCB3aWMucWNvdzIgJXMiICUgKHNlbGYuY21kX2NvbW1vbiwgc2VsZi5tYWNoaW5lKQorICAgICAgICB3aXRoIHJ1bnFlbXUoc2VsZi5yZWNpcGUsIHNzaD1GYWxzZSwgbGF1bmNoX2NtZD1jbWQpIGFzIHFlbXU6CisgICAgICAgICAgICB3aXRoIG9wZW4ocWVtdS5xZW11cnVubmVybG9nKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnZm9ybWF0PXFjb3cyJyBpbiBmLnJlYWQoKSwgIkZhaWxlZDogJXMiICUgY21kKQorCisgICAgQE9FVGVzdElEKDIwMTApCisgICAgZGVmIHRlc3RfYm9vdF9xZW11X2Jvb3Qoc2VsZik6CisgICAgICAgICIiIlRlc3QgcnVucWVtdSAvcGF0aC90by9pbWFnZS5xZW11Ym9vdC5jb25mIiIiCisgICAgICAgIHFlbXVib290X2NvbmYgPSAiJXMtJXMucWVtdWJvb3QuY29uZiIgJSAoc2VsZi5yZWNpcGUsIHNlbGYubWFjaGluZSkKKyAgICAgICAgcWVtdWJvb3RfY29uZiA9IG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXJfaW1hZ2UsIHFlbXVib290X2NvbmYpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhxZW11Ym9vdF9jb25mKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIiVzIG5vdCBmb3VuZCIgJSBxZW11Ym9vdF9jb25mKQorICAgICAgICBjbWQgPSAiJXMgJXMiICUgKHNlbGYuY21kX2NvbW1vbiwgcWVtdWJvb3RfY29uZikKKyAgICAgICAgd2l0aCBydW5xZW11KHNlbGYucmVjaXBlLCBzc2g9RmFsc2UsIGxhdW5jaF9jbWQ9Y21kKSBhcyBxZW11OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHFlbXUucnVubmVyLmxvZ2dlZCwgIkZhaWxlZDogJXMiICUgY21kKQorCisgICAgQE9FVGVzdElEKDIwMTEpCisgICAgZGVmIHRlc3RfYm9vdF9yb290ZnMoc2VsZik6CisgICAgICAgICIiIlRlc3QgcnVucWVtdSAvcGF0aC90by9yb290ZnMuZXh0NCIiIgorICAgICAgICByb290ZnMgPSAiJXMtJXMuZXh0NCIgJSAoc2VsZi5yZWNpcGUsIHNlbGYubWFjaGluZSkKKyAgICAgICAgcm9vdGZzID0gb3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2Rpcl9pbWFnZSwgcm9vdGZzKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocm9vdGZzKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIiVzIG5vdCBmb3VuZCIgJSByb290ZnMpCisgICAgICAgIGNtZCA9ICIlcyAlcyIgJSAoc2VsZi5jbWRfY29tbW9uLCByb290ZnMpCisgICAgICAgIHdpdGggcnVucWVtdShzZWxmLnJlY2lwZSwgc3NoPUZhbHNlLCBsYXVuY2hfY21kPWNtZCkgYXMgcWVtdToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxZW11LnJ1bm5lci5sb2dnZWQsICJGYWlsZWQ6ICVzIiAlIGNtZCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL3J1bnRpbWVfdGVzdC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL3J1bnRpbWVfdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTI3MGI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvcnVudGltZV90ZXN0LnB5CkBAIC0wLDAgKzEsMjY3IEBACitmcm9tIG9lcWEuc2VsZnRlc3QuY2FzZSBpbXBvcnQgT0VTZWxmdGVzdFRlc3RDYXNlCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgZ2V0X2JiX3ZhcnMsIHJ1bnFlbXUKK2Zyb20gb2VxYS51dGlscy5zc2hjb250cm9sIGltcG9ydCBTU0hDb250cm9sCitmcm9tIG9lcWEuY29yZS5kZWNvcmF0b3Iub2VpZCBpbXBvcnQgT0VUZXN0SUQKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBzaHV0aWwKKworY2xhc3MgVGVzdEV4cG9ydChPRVNlbGZ0ZXN0VGVzdENhc2UpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgcnVuQ21kKCJybSAtcmYgL3RtcC9zZGsiKQorICAgICAgICBzdXBlcihUZXN0RXhwb3J0LCBjbHMpLnRlYXJEb3duQ2xhc3MoKQorCisgICAgQE9FVGVzdElEKDE0OTkpCisgICAgZGVmIHRlc3RfdGVzdGV4cG9ydF9iYXNpYyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6IENoZWNrIGJhc2ljIHRlc3RleHBvcnQgZnVuY3Rpb25hbGl0eSB3aXRoIG9ubHkgcGluZyB0ZXN0IGVuYWJsZWQuCisgICAgICAgIEV4cGVjdGVkOiAxLiB0ZXN0ZXhwb3J0IGRpcmVjdG9yeSBtdXN0IGJlIGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgICAyLiBydW5leHBvcnRlZC5weSBtdXN0IHJ1biB3aXRob3V0IGFueSBlcnJvci9leGNlcHRpb24uCisgICAgICAgICAgICAgICAgICAzLiBwaW5nIHRlc3QgbXVzdCBzdWNjZWVkLgorICAgICAgICBQcm9kdWN0OiBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogTWFyaWFubyBMb3BleiA8bWFyaWFuby5sb3BlekBpbnRlbC5jb20+CisgICAgICAgICIiIgorCisgICAgICAgIGZlYXR1cmVzID0gJ0lOSEVSSVQgKz0gInRlc3RleHBvcnQiXG4nCisgICAgICAgICMgVGhlc2UgYXJlbid0IHRoZSBhY3R1YWwgSVAgYWRkcmVzc2VzIGJ1dCB0ZXN0ZXhwb3J0IGNsYXNzIG5lZWRzIHNvbWV0aGluZyBkZWZpbmVkCisgICAgICAgIGZlYXR1cmVzICs9ICdURVNUX1NFUlZFUl9JUCA9ICIxOTIuMTY4LjcuMSJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ1RFU1RfVEFSR0VUX0lQID0gIjE5Mi4xNjguNy4xIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnVEVTVF9TVUlURVMgPSAicGluZyJcbicKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoZmVhdHVyZXMpCisKKyAgICAgICAgIyBCdWlsZCB0ZXNleHBvcnQgZm9yIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwnKQorICAgICAgICBiaXRiYWtlKCctYyB0ZXN0ZXhwb3J0IGNvcmUtaW1hZ2UtbWluaW1hbCcpCisKKyAgICAgICAgdGVzdGV4cG9ydF9kaXIgPSBnZXRfYmJfdmFyKCdURVNUX0VYUE9SVF9ESVInLCAnY29yZS1pbWFnZS1taW5pbWFsJykKKworICAgICAgICAjIFZlcmlmeSBpZiBURVNUX0VYUE9SVF9ESVIgd2FzIGNyZWF0ZWQKKyAgICAgICAgaXNkaXIgPSBvcy5wYXRoLmlzZGlyKHRlc3RleHBvcnRfZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlzZGlyLCAnRmFpbGVkIHRvIGNyZWF0ZSB0ZXN0ZXhwb3J0IGRpcjogJXMnICUgdGVzdGV4cG9ydF9kaXIpCisKKyAgICAgICAgd2l0aCBydW5xZW11KCdjb3JlLWltYWdlLW1pbmltYWwnKSBhcyBxZW11OgorICAgICAgICAgICAgIyBBdHRlbXB0IHRvIHJ1biBydW5leHBvcnRlZC5weSB0byBwZXJmb3JtIHBpbmcgdGVzdAorICAgICAgICAgICAgdGVzdF9wYXRoID0gb3MucGF0aC5qb2luKHRlc3RleHBvcnRfZGlyLCAib2UtdGVzdCIpCisgICAgICAgICAgICBkYXRhX2ZpbGUgPSBvcy5wYXRoLmpvaW4odGVzdGV4cG9ydF9kaXIsICdkYXRhJywgJ3Rlc3RkYXRhLmpzb24nKQorICAgICAgICAgICAgbWFuaWZlc3QgPSBvcy5wYXRoLmpvaW4odGVzdGV4cG9ydF9kaXIsICdkYXRhJywgJ21hbmlmZXN0JykKKyAgICAgICAgICAgIGNtZCA9ICgiJXMgcnVudGltZSAtLXRlc3QtZGF0YS1maWxlICVzIC0tcGFja2FnZXMtbWFuaWZlc3QgJXMgIgorICAgICAgICAgICAgICAgICAgICItLXRhcmdldC1pcCAlcyAtLXNlcnZlci1pcCAlcyAtLXF1aWV0IgorICAgICAgICAgICAgICAgICAgJSAodGVzdF9wYXRoLCBkYXRhX2ZpbGUsIG1hbmlmZXN0LCBxZW11LmlwLCBxZW11LnNlcnZlcl9pcCkpCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoY21kKQorICAgICAgICAgICAgIyBWZXJpZnkgcGluZyB0ZXN0IHdhcyBzdWNjZXNmdWwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzdWx0LnN0YXR1cywgJ29lLXRlc3QgcnVudGltZSByZXR1cm5lZCBhIG5vbiAwIHN0YXR1cycpCisKKyAgICBAT0VUZXN0SUQoMTY0MSkKKyAgICBkZWYgdGVzdF90ZXN0ZXhwb3J0X3NkayhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6IENoZWNrIHNkayBmdW5jdGlvbmFsaXR5IGZvciB0ZXN0ZXhwb3J0LgorICAgICAgICBFeHBlY3RlZDogMS4gdGVzdGV4cG9ydCBkaXJlY3RvcnkgbXVzdCBiZSBjcmVhdGVkLgorICAgICAgICAgICAgICAgICAgMi4gU0RLIHRhcmJhbGwgbXVzdCBleGlzdHMuCisgICAgICAgICAgICAgICAgICAzLiBVbmNvbXByZXNzaW5nIG9mIHRhcmJhbGwgbXVzdCBzdWNjZWVkLgorICAgICAgICAgICAgICAgICAgNC4gQ2hlY2sgaWYgdGhlIFNESyBkaXJlY3RvcnkgaXMgYWRkZWQgdG8gUEFUSC4KKyAgICAgICAgICAgICAgICAgIDUuIFJ1biB0YXIgZnJvbSB0aGUgU0RLIGRpcmVjdG9yeS4KKyAgICAgICAgUHJvZHVjdDogb2UtY29yZQorICAgICAgICBBdXRob3I6IE1hcmlhbm8gTG9wZXogPG1hcmlhbm8ubG9wZXpAaW50ZWwuY29tPgorICAgICAgICAiIiIKKworICAgICAgICBmZWF0dXJlcyA9ICdJTkhFUklUICs9ICJ0ZXN0ZXhwb3J0IlxuJworICAgICAgICAjIFRoZXNlIGFyZW4ndCB0aGUgYWN0dWFsIElQIGFkZHJlc3NlcyBidXQgdGVzdGV4cG9ydCBjbGFzcyBuZWVkcyBzb21ldGhpbmcgZGVmaW5lZAorICAgICAgICBmZWF0dXJlcyArPSAnVEVTVF9TRVJWRVJfSVAgPSAiMTkyLjE2OC43LjEiXG4nCisgICAgICAgIGZlYXR1cmVzICs9ICdURVNUX1RBUkdFVF9JUCA9ICIxOTIuMTY4LjcuMSJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ1RFU1RfU1VJVEVTID0gInBpbmciXG4nCisgICAgICAgIGZlYXR1cmVzICs9ICdURVNUX0VYUE9SVF9TREtfRU5BQkxFRCA9ICIxIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnVEVTVF9FWFBPUlRfU0RLX1BBQ0tBR0VTID0gIm5hdGl2ZXNkay10YXIiXG4nCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKGZlYXR1cmVzKQorCisgICAgICAgICMgQnVpbGQgdGVzZXhwb3J0IGZvciBjb3JlLWltYWdlLW1pbmltYWwKKyAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS1taW5pbWFsJykKKyAgICAgICAgYml0YmFrZSgnLWMgdGVzdGV4cG9ydCBjb3JlLWltYWdlLW1pbmltYWwnKQorCisgICAgICAgIG5lZWRlZF92YXJzID0gWydURVNUX0VYUE9SVF9ESVInLCAnVEVTVF9FWFBPUlRfU0RLX0RJUicsICdURVNUX0VYUE9SVF9TREtfTkFNRSddCisgICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhuZWVkZWRfdmFycywgJ2NvcmUtaW1hZ2UtbWluaW1hbCcpCisgICAgICAgIHRlc3RleHBvcnRfZGlyID0gYmJfdmFyc1snVEVTVF9FWFBPUlRfRElSJ10KKyAgICAgICAgc2RrX2RpciA9IGJiX3ZhcnNbJ1RFU1RfRVhQT1JUX1NES19ESVInXQorICAgICAgICBzZGtfbmFtZSA9IGJiX3ZhcnNbJ1RFU1RfRVhQT1JUX1NES19OQU1FJ10KKworICAgICAgICAjIENoZWNrIGZvciBTREsKKyAgICAgICAgdGFyYmFsbF9uYW1lID0gIiVzLnNoIiAlIHNka19uYW1lCisgICAgICAgIHRhcmJhbGxfcGF0aCA9IG9zLnBhdGguam9pbih0ZXN0ZXhwb3J0X2Rpciwgc2RrX2RpciwgdGFyYmFsbF9uYW1lKQorICAgICAgICBtc2cgPSAiQ291bGRuJ3QgZmluZCBTREsgdGFyYmFsbDogJXMiICUgdGFyYmFsbF9wYXRoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5pc2ZpbGUodGFyYmFsbF9wYXRoKSwgVHJ1ZSwgbXNnKQorCisgICAgICAgICMgRXh0cmFjdCBTREsgYW5kIHJ1biB0YXIgZnJvbSBTREsKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCIlcyAteSAtZCAvdG1wL3NkayIgJSB0YXJiYWxsX3BhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzdWx0LnN0YXR1cywgIkNvdWxkbid0IGV4dHJhY3QgU0RLIikKKworICAgICAgICBlbnZfc2NyaXB0ID0gcmVzdWx0Lm91dHB1dC5zcGxpdCgpWy0xXQorICAgICAgICByZXN1bHQgPSBydW5DbWQoIi4gJXM7IHdoaWNoIHRhciIgJSBlbnZfc2NyaXB0LCBzaGVsbD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJlc3VsdC5zdGF0dXMsICJDb3VsZG4ndCBzZXR1cCBTREsgZW52aXJvbm1lbnQiKQorICAgICAgICBpc19zZGtfdGFyID0gVHJ1ZSBpZiAiL3RtcC9zZGsiIGluIHJlc3VsdC5vdXRwdXQgZWxzZSBGYWxzZQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfc2RrX3RhciwgIkNvdWxkbid0IHNldHVwIFNESyBlbnZpcm9ubWVudCIpCisKKyAgICAgICAgdGFyX3NkayA9IHJlc3VsdC5vdXRwdXQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCIlcyAtLXZlcnNpb24iICUgdGFyX3NkaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCByZXN1bHQuc3RhdHVzLCAiQ291bGRuJ3QgcnVuIHRhciBmcm9tIFNESyIpCisKKworY2xhc3MgVGVzdEltYWdlKE9FU2VsZnRlc3RUZXN0Q2FzZSk6CisKKyAgICBAT0VUZXN0SUQoMTY0NCkKKyAgICBkZWYgdGVzdF90ZXN0aW1hZ2VfaW5zdGFsbChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6IENoZWNrIGluc3RhbGwgcGFja2FnZXMgZnVuY3Rpb25hbGl0eSBmb3IgdGVzdGltYWdlL3Rlc3RleHBvcnQuCisgICAgICAgIEV4cGVjdGVkOiAxLiBJbXBvcnQgdGVzdHMgZnJvbSBhIGRpcmVjdG9yeSBvdGhlciB0aGFuIG1ldGEuCisgICAgICAgICAgICAgICAgICAyLiBDaGVjayBpbnN0YWxsL3VuaW5zdGFsbCBvZiBzb2NhdC4KKyAgICAgICAgUHJvZHVjdDogb2UtY29yZQorICAgICAgICBBdXRob3I6IE1hcmlhbm8gTG9wZXogPG1hcmlhbm8ubG9wZXpAaW50ZWwuY29tPgorICAgICAgICAiIiIKKyAgICAgICAgaWYgZ2V0X2JiX3ZhcignRElTVFJPJykgPT0gJ3Bva3ktdGlueSc6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdjb3JlLWltYWdlLWZ1bGwtY21kbGluZSBub3QgYnVpbGRhYmxlIGZvciBwb2t5LXRpbnknKQorCisgICAgICAgIGZlYXR1cmVzID0gJ0lOSEVSSVQgKz0gInRlc3RpbWFnZSJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ1RFU1RfU1VJVEVTID0gInBpbmcgc3NoIHNlbGZ0ZXN0IlxuJworICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhmZWF0dXJlcykKKworICAgICAgICAjIEJ1aWxkIGNvcmUtaW1hZ2Utc2F0byBhbmQgdGVzdGltYWdlCisgICAgICAgIGJpdGJha2UoJ2NvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lIHNvY2F0JykKKyAgICAgICAgYml0YmFrZSgnLWMgdGVzdGltYWdlIGNvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lJykKKworICAgIEBPRVRlc3RJRCgxODgzKQorICAgIGRlZiB0ZXN0X3Rlc3RpbWFnZV9kbmYoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiBDaGVjayBwYWNrYWdlIGZlZWRzIGZ1bmN0aW9uYWxpdHkgZm9yIGRuZgorICAgICAgICBFeHBlY3RlZDogMS4gQ2hlY2sgdGhhdCByZW1vdGUgcGFja2FnZSBmZWVkcyBjYW4gYmUgYWNjZXNzZWQKKyAgICAgICAgUHJvZHVjdDogb2UtY29yZQorICAgICAgICBBdXRob3I6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+CisgICAgICAgICIiIgorICAgICAgICBpZiBnZXRfYmJfdmFyKCdESVNUUk8nKSA9PSAncG9reS10aW55JzoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ2NvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lIG5vdCBidWlsZGFibGUgZm9yIHBva3ktdGlueScpCisKKyAgICAgICAgZmVhdHVyZXMgPSAnSU5IRVJJVCArPSAidGVzdGltYWdlIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnVEVTVF9TVUlURVMgPSAicGluZyBzc2ggZG5mX3J1bnRpbWUgZG5mLkRuZkJhc2ljVGVzdC50ZXN0X2RuZl9oZWxwIlxuJworICAgICAgICAjIFdlIGRvbid0IHlldCBrbm93IHdoYXQgdGhlIHNlcnZlciBpcCBhbmQgcG9ydCB3aWxsIGJlIC0gdGhleSB3aWxsIGJlIHBhdGNoZWQKKyAgICAgICAgIyBpbiBhdCB0aGUgc3RhcnQgb2YgdGhlIG9uLWltYWdlIHRlc3QKKyAgICAgICAgZmVhdHVyZXMgKz0gJ1BBQ0tBR0VfRkVFRF9VUklTID0gImh0dHA6Ly9ib2d1c19pcDpib2d1c19wb3J0IlxuJworICAgICAgICBmZWF0dXJlcyArPSAnRVhUUkFfSU1BR0VfRkVBVFVSRVMgKz0gInBhY2thZ2UtbWFuYWdlbWVudCJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ1BBQ0tBR0VfQ0xBU1NFUyA9ICJwYWNrYWdlX3JwbSJcbicKKworICAgICAgICAjIEVuYWJsZSBwYWNrYWdlIGZlZWQgc2lnbmluZworICAgICAgICBzZWxmLmdwZ19ob21lID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9Im9lcWEtZmVlZC1zaWduLSIpCisgICAgICAgIHNpZ25pbmdfa2V5X2RpciA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RsYXllcl9wYXRoLCAnZmlsZXMnLCAnc2lnbmluZycpCisgICAgICAgIHJ1bkNtZCgnZ3BnIC0tYmF0Y2ggLS1ob21lZGlyICVzIC0taW1wb3J0ICVzJyAlIChzZWxmLmdwZ19ob21lLCBvcy5wYXRoLmpvaW4oc2lnbmluZ19rZXlfZGlyLCAna2V5LnNlY3JldCcpKSkKKyAgICAgICAgZmVhdHVyZXMgKz0gJ0lOSEVSSVQgKz0gInNpZ25fcGFja2FnZV9mZWVkIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnUEFDS0FHRV9GRUVEX0dQR19OQU1FID0gInRlc3R1c2VyIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnUEFDS0FHRV9GRUVEX0dQR19QQVNTUEhSQVNFX0ZJTEUgPSAiJXMiXG4nICUgb3MucGF0aC5qb2luKHNpZ25pbmdfa2V5X2RpciwgJ2tleS5wYXNzcGhyYXNlJykKKyAgICAgICAgZmVhdHVyZXMgKz0gJ0dQR19QQVRIID0gIiVzIlxuJyAlIHNlbGYuZ3BnX2hvbWUKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoZmVhdHVyZXMpCisKKyAgICAgICAgIyBCdWlsZCBjb3JlLWltYWdlLXNhdG8gYW5kIHRlc3RpbWFnZQorICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLWZ1bGwtY21kbGluZSBzb2NhdCcpCisgICAgICAgIGJpdGJha2UoJy1jIHRlc3RpbWFnZSBjb3JlLWltYWdlLWZ1bGwtY21kbGluZScpCisKKyAgICAgICAgIyByZW1vdmUgdGhlIG9lcWEtZmVlZC1zaWduIHRlbXBvcmFsIGRpcmVjdG9yeQorICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZ3BnX2hvbWUsIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKworY2xhc3MgUG9zdGluc3QoT0VTZWxmdGVzdFRlc3RDYXNlKToKKyAgICBAT0VUZXN0SUQoMTU0MCkKKyAgICBkZWYgdGVzdF92ZXJpZnlfcG9zdGluc3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoZSBleGVjdXRpb24gb3JkZXIgb2YgcG9zdGluc3QgQnVnemlsbGEgSUQ6IFs1MzE5XQorICAgICAgICBFeHBlY3RlZCA6CisgICAgICAgIDEuIENvbXBpbGUgYSBtaW5pbWFsIGltYWdlLgorICAgICAgICAyLiBUaGUgY29tcGlsZWQgaW1hZ2Ugd2lsbCBhZGQgdGhlIGNyZWF0ZWQgbGF5ZXIgd2l0aCB0aGUgcmVjaXBlcyBwb3N0aW5zdFsgYWJkcHRdCisgICAgICAgIDMuIFJ1biBxZW11eDg2CisgICAgICAgIDQuIFZhbGlkYXRlIHRoZSB0YXNrIGV4ZWN1dGlvbiBvcmRlcgorICAgICAgICBBdXRob3I6IEZyYW5jaXNjbyBQZWRyYXphIDxmcmFuY2lzY28uai5wZWRyYXphLmdvbnphbGV6QGludGVsLmNvbT4KKyAgICAgICAgIiIiCisgICAgICAgIGZlYXR1cmVzID0gJ0lOSEVSSVQgKz0gInRlc3RpbWFnZSJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ0NPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTCArPSAicG9zdGluc3QtYXQtcm9vdGZzIFwKK3Bvc3RpbnN0LWRlbGF5ZWQtYSBcCitwb3N0aW5zdC1kZWxheWVkLWIgXAorcG9zdGluc3QtZGVsYXllZC1kIFwKK3Bvc3RpbnN0LWRlbGF5ZWQtcCBcCitwb3N0aW5zdC1kZWxheWVkLXQgXAorIlxuJworICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhmZWF0dXJlcykKKworICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwgLWYgJykKKworICAgICAgICBwb3N0aW5zdF9saXN0ID0gWycxMDAtcG9zdGluc3QtYXQtcm9vdGZzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnMTAxLXBvc3RpbnN0LWRlbGF5ZWQtYScsCisgICAgICAgICAgICAgICAgICAgICAgICAgJzEwMi1wb3N0aW5zdC1kZWxheWVkLWInLAorICAgICAgICAgICAgICAgICAgICAgICAgICcxMDMtcG9zdGluc3QtZGVsYXllZC1kJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnMTA0LXBvc3RpbnN0LWRlbGF5ZWQtcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgJzEwNS1wb3N0aW5zdC1kZWxheWVkLXQnXQorICAgICAgICBwYXRoX3dvcmtkaXIgPSBnZXRfYmJfdmFyKCdXT1JLRElSJywnY29yZS1pbWFnZS1taW5pbWFsJykKKyAgICAgICAgd29ya3NwYWNlZGlyID0gJ3Rlc3RpbWFnZS9xZW11X2Jvb3RfbG9nJworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4ocGF0aF93b3JrZGlyLCB3b3Jrc3BhY2VkaXIpCisgICAgICAgIHJleHAgPSByZS5jb21waWxlKCJeUnVubmluZyBwb3N0aW5zdCAuKi8oP1A8cG9zdGluc3Q+LiopXC5cLlwuJCIpCisgICAgICAgIHdpdGggcnVucWVtdSgnY29yZS1pbWFnZS1taW5pbWFsJykgYXMgcWVtdToKKyAgICAgICAgICAgIHdpdGggb3Blbih3b3Jrc3BhY2VkaXIpIGFzIGY6CisgICAgICAgICAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGlkeCA9IDAKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpLnJlcGxhY2UoIl5NIiwiIikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6ICMgVG8gYXZvaWQgZW1wdHkgbGluZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIG0gPSByZXhwLnNlYXJjaChsaW5lKQorICAgICAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3N0aW5zdF9saXN0W2lkeF0sIG0uZ3JvdXAoJ3Bvc3RpbnN0JyksICJGYWlsIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkeCA9IGlkeCsxCisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBmb3VuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWR4LCBsZW4ocG9zdGluc3RfbGlzdCksICJOb3QgZm91bmQgYWxsIHBvc3RpbnN0cyIpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgQE9FVGVzdElEKDE1NDUpCisgICAgZGVmIHRlc3RfcG9zdGluc3Rfcm9vdGZzX2FuZF9ib290KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogICAgICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgdGVzdCBjYXNlIGlzIHRvIHZlcmlmeSBQb3N0LWluc3RhbGxhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0cyBhcmUgY2FsbGVkIHdoZW4gcm9vdGZzIGlzIGNyZWF0ZWQgYW5kIGFsc28gdGVzdAorICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBzY3JpcHQgY2FuIGJlIGRlbGF5ZWQgdG8gcnVuIGF0IGZpcnN0IGJvb3QuCisgICAgICAgIERlcGVuZGVuY2llczogICBOQQorICAgICAgICBTdGVwczogICAgICAgICAgMS4gQWRkIHByb3BlciBjb25maWd1cmF0aW9uIHRvIGxvY2FsLmNvbmYgZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgMi4gQnVpbGQgYSAiY29yZS1pbWFnZS1taW5pbWFsIiBpbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgMy4gVmVyaWZ5IHRoYXQgZmlsZSBjcmVhdGVkIGJ5IHBvc3RpbnN0X3Jvb3RmcyByZWNpcGUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnQgb24gcm9vdGZzIGRpci4KKyAgICAgICAgICAgICAgICAgICAgICAgIDQuIEJvb3QgdGhlIGltYWdlIGNyZWF0ZWQgb24gcWVtdSBhbmQgdmVyaWZ5IHRoYXQgdGhlIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQgYnkgcG9zdGluc3RfYm9vdCByZWNpcGUgaXMgcHJlc2VudCBvbiBpbWFnZS4KKyAgICAgICAgRXhwZWN0ZWQ6ICAgICAgIFRoZSBmaWxlcyBhcmUgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgZHVyaW5nIHJvb3RmcyBhbmQgYm9vdAorICAgICAgICAgICAgICAgICAgICAgICAgdGltZSBmb3IgMyBkaWZmZXJlbnQgcGFja2FnZSBtYW5hZ2VyczogcnBtLGlwayxkZWIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaW5pdGlhbGl6YXRpb24gbWFuYWdlcnM6IHN5c3Zpbml0IGFuZCBzeXN0ZW1kLgorCisgICAgICAgICIiIgorICAgICAgICBmaWxlX3Jvb3Rmc19uYW1lID0gInRoaXMtd2FzLWNyZWF0ZWQtYXQtcm9vdGZzdGltZSIKKyAgICAgICAgZmlsZWJvb3RfbmFtZSA9ICJ0aGlzLXdhcy1jcmVhdGVkLWF0LWZpcnN0LWJvb3QiCisgICAgICAgIHJvb3Rmc19wa2cgPSAncG9zdGluc3QtYXQtcm9vdGZzJworICAgICAgICBib290X3BrZyA9ICdwb3N0aW5zdC1kZWxheWVkLWEnCisKKyAgICAgICAgZm9yIGluaXRfbWFuYWdlciBpbiAoInN5c3Zpbml0IiwgInN5c3RlbWQiKToKKyAgICAgICAgICAgIGZvciBjbGFzc2VzIGluICgicGFja2FnZV9ycG0iLCAicGFja2FnZV9kZWIiLCAicGFja2FnZV9pcGsiKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChpbml0X21hbmFnZXI9aW5pdF9tYW5hZ2VyLCBwYWNrYWdlX2NsYXNzPWNsYXNzZXMpOgorICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyA9ICdNQUNISU5FID0gInFlbXV4ODYiXG4nCisgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzICs9ICdDT1JFX0lNQUdFX0VYVFJBX0lOU1RBTEwgKz0gIiVzICVzICJcbiclIChyb290ZnNfcGtnLCBib290X3BrZykKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgKz0gJ0lNQUdFX0ZFQVRVUkVTICs9ICJwYWNrYWdlLW1hbmFnZW1lbnQgZW1wdHktcm9vdC1wYXNzd29yZCJcbicKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgKz0gJ1BBQ0tBR0VfQ0xBU1NFUyA9ICIlcyJcbicgJSBjbGFzc2VzCisgICAgICAgICAgICAgICAgICAgIGlmIGluaXRfbWFuYWdlciA9PSAic3lzdGVtZCI6CisgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyArPSAnRElTVFJPX0ZFQVRVUkVTX2FwcGVuZCA9ICIgc3lzdGVtZCJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzICs9ICdWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyID0gInN5c3RlbWQiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyArPSAnRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQgPSAic3lzdmluaXQiXG4nCisgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyArPSAnVklSVFVBTC1SVU5USU1FX2luaXRzY3JpcHRzID0gIiJcbicKKyAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9jb25maWcoZmVhdHVyZXMpCisKKyAgICAgICAgICAgICAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS1taW5pbWFsJykKKworICAgICAgICAgICAgICAgICAgICBmaWxlX3Jvb3Rmc19jcmVhdGVkID0gb3MucGF0aC5qb2luKGdldF9iYl92YXIoJ0lNQUdFX1JPT1RGUycsICJjb3JlLWltYWdlLW1pbmltYWwiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3Jvb3Rmc19uYW1lKQorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IG9zLnBhdGguaXNmaWxlKGZpbGVfcm9vdGZzX2NyZWF0ZWQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZCwgIkZpbGUgJXMgd2FzIG5vdCBjcmVhdGVkIGF0IHJvb3RmcyB0aW1lIGJ5ICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlX3Jvb3Rmc19uYW1lLCByb290ZnNfcGtnKSkKKworICAgICAgICAgICAgICAgICAgICB0ZXN0Y29tbWFuZCA9ICdscyAvZXRjLycgKyBmaWxlYm9vdF9uYW1lCisgICAgICAgICAgICAgICAgICAgIHdpdGggcnVucWVtdSgnY29yZS1pbWFnZS1taW5pbWFsJykgYXMgcWVtdToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gcWVtdS5ydW5fc2VyaWFsKCItZiAvZXRjLyIgKyBmaWxlYm9vdF9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsICdGaWxlICVzIHdhcyBub3QgY3JlYXRlZCBhdCBmaXJzdCBib290ICglcyknICUgKGZpbGVib290X25hbWUsIG91dHB1dCkpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9zZWxmdGVzdC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL3NlbGZ0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiM2NiMTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9zZWxmdGVzdC5weQpAQCAtMCwwICsxLDUxIEBACitpbXBvcnQgaW1wb3J0bGliCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZAoraW1wb3J0IG9lcWEuc2VsZnRlc3QKK2Zyb20gb2VxYS5zZWxmdGVzdC5jYXNlIGltcG9ydCBPRVNlbGZ0ZXN0VGVzdENhc2UKK2Zyb20gb2VxYS5jb3JlLmRlY29yYXRvci5vZWlkIGltcG9ydCBPRVRlc3RJRAorCitjbGFzcyBFeHRlcm5hbExheWVyKE9FU2VsZnRlc3RUZXN0Q2FzZSk6CisKKyAgICBAT0VUZXN0SUQoMTg4NSkKKyAgICBkZWYgdGVzdF9saXN0X2ltcG9ydGVkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogQ2hlY2tzIGZ1bmN0aW9uYWxpdHkgdG8gaW1wb3J0IHRlc3RzIGZyb20gb3RoZXIgbGF5ZXJzLgorICAgICAgICBFeHBlY3RlZDogMS4gRmlsZSAiZXh0ZXJuYWwtbGF5ZXIucHkiIG11c3QgYmUgaW4KKyAgICAgICAgb2VxYS5zZWxmdGVzdC5fX3BhdGhfXworICAgICAgICAgICAgICAgICAgMi4gdGVzdF91bmNvbmRpdGlvbmFsX3BhcyBtZXRob2QgbXVzdCBleGlzdHMKKyAgICAgICAgICAgICAgICAgICAgIGluIEltcG9ydGVkVGVzdHMgY2xhc3MKKyAgICAgICAgUHJvZHVjdDogb2UtY29yZQorICAgICAgICBBdXRob3I6IE1hcmlhbm8gTG9wZXogPG1hcmlhbm8ubG9wZXpAaW50ZWwuY29tPgorICAgICAgICAiIiIKKworICAgICAgICB0ZXN0X2ZpbGUgPSAiZXh0ZXJuYWwtbGF5ZXIucHkiCisgICAgICAgIHRlc3RfbW9kdWxlID0gIm9lcWEuc2VsZnRlc3QuY2FzZXMuZXh0ZXJuYWwtbGF5ZXIiCisgICAgICAgIG1ldGhvZF9uYW1lID0gInRlc3RfdW5jb25kaXRpb25hbF9wYXNzIgorCisgICAgICAgICMgQ2hlY2sgaWYgImV4dGVybmFsLWxheWVyLnB5IiBpcyBpbiBvZXFhIHBhdGgKKyAgICAgICAgZm91bmRfZmlsZSA9IHNlYXJjaF90ZXN0X2ZpbGUodGVzdF9maWxlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm91bmRfZmlsZSwgbXNnPSJDYW4ndCBmaW5kICVzIGluIHRoZSBvZXFhIHBhdGgiICUgdGVzdF9maWxlKQorCisgICAgICAgICMgSW1wb3J0IG9lcWEuc2VsZnRlc3QuZXh0ZXJuYWwtbGF5ZXIgbW9kdWxlIGFuZCBzZWFyY2ggZm9yCisgICAgICAgICMgdGVzdF91bmNvbmRpdGlvbmFsX3Bhc3MgbWV0aG9kIG9mIEltcG9ydGVkVGVzdHMgY2xhc3MKKyAgICAgICAgZm91bmRfbWV0aG9kID0gc2VhcmNoX21ldGhvZCh0ZXN0X21vZHVsZSwgbWV0aG9kX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXRob2RfbmFtZSwgbXNnPSJDYW4ndCBmaW5kICVzIG1ldGhvZCIgJSBtZXRob2RfbmFtZSkKKworZGVmIHNlYXJjaF90ZXN0X2ZpbGUoZmlsZV9uYW1lKToKKyAgICBmb3IgbGF5ZXJfcGF0aCBpbiBvZXFhLnNlbGZ0ZXN0Ll9fcGF0aF9fOgorICAgICAgICBmb3IgXywgXywgZmlsZXMgaW4gb3Mud2FsayhsYXllcl9wYXRoKToKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGlmIGYgPT0gZmlsZV9uYW1lOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQorCitkZWYgc2VhcmNoX21ldGhvZChtb2R1bGUsIG1ldGhvZCk6CisgICAgbW9kbGliID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobW9kdWxlKQorICAgIGZvciB2YXIgaW4gdmFycyhtb2RsaWIpOgorICAgICAgICBrbGFzcyA9IHZhcnMobW9kbGliKVt2YXJdCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2xhc3MsIHR5cGUoT0VTZWxmdGVzdFRlc3RDYXNlKSkgYW5kIGlzc3ViY2xhc3Moa2xhc3MsIE9FU2VsZnRlc3RUZXN0Q2FzZSk6CisgICAgICAgICAgICBmb3IgbSBpbiBkaXIoa2xhc3MpOgorICAgICAgICAgICAgICAgIGlmIG0gPT0gbWV0aG9kOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9zaWduaW5nLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvc2lnbmluZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2QxYTgyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvc2lnbmluZy5weQpAQCAtMCwwICsxLDE4NyBAQAorZnJvbSBvZXFhLnNlbGZ0ZXN0LmNhc2UgaW1wb3J0IE9FU2VsZnRlc3RUZXN0Q2FzZQorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIGdldF9iYl92YXJzCitpbXBvcnQgb3MKK2ltcG9ydCBnbG9iCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB0ZW1wZmlsZQorZnJvbSBvZXFhLmNvcmUuZGVjb3JhdG9yLm9laWQgaW1wb3J0IE9FVGVzdElECitmcm9tIG9lcWEudXRpbHMuZnRvb2xzIGltcG9ydCB3cml0ZV9maWxlCisKKworY2xhc3MgU2lnbmluZyhPRVNlbGZ0ZXN0VGVzdENhc2UpOgorCisgICAgZ3BnX2RpciA9ICIiCisgICAgcHViX2tleV9wYXRoID0gIiIKKyAgICBzZWNyZXRfa2V5X3BhdGggPSAiIgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgc3VwZXIoU2lnbmluZywgY2xzKS5zZXRVcENsYXNzKCkKKyAgICAgICAgIyBDaGVjayB0aGF0IHdlIGNhbiBmaW5kIHRoZSBncGcgYmluYXJ5IGFuZCBmYWlsIGVhcmx5IGlmIHdlIGNhbid0CisgICAgICAgIGlmIG5vdCBzaHV0aWwud2hpY2goImdwZyIpOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlRoaXMgdGVzdCBuZWVkcyBHbnVQRyIpCisKKyAgICAgICAgY2xzLmdwZ19kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0ib2VxYS1zaWduaW5nLSIpCisKKyAgICAgICAgY2xzLnB1Yl9rZXlfcGF0aCA9IG9zLnBhdGguam9pbihjbHMudGVzdGxheWVyX3BhdGgsICdmaWxlcycsICdzaWduaW5nJywgImtleS5wdWIiKQorICAgICAgICBjbHMuc2VjcmV0X2tleV9wYXRoID0gb3MucGF0aC5qb2luKGNscy50ZXN0bGF5ZXJfcGF0aCwgJ2ZpbGVzJywgJ3NpZ25pbmcnLCAia2V5LnNlY3JldCIpCisKKyAgICAgICAgcnVuQ21kKCdncGcgLS1iYXRjaCAtLWhvbWVkaXIgJXMgLS1pbXBvcnQgJXMgJXMnICUgKGNscy5ncGdfZGlyLCBjbHMucHViX2tleV9wYXRoLCBjbHMuc2VjcmV0X2tleV9wYXRoKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgIHNodXRpbC5ybXRyZWUoY2xzLmdwZ19kaXIsIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKworICAgIEBPRVRlc3RJRCgxMzYyKQorICAgIGRlZiB0ZXN0X3NpZ25pbmdfcGFja2FnZXMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgVGVzdCB0aGF0IHBhY2thZ2VzIGNhbiBiZSBzaWduZWQgaW4gdGhlIHBhY2thZ2UgZmVlZAorICAgICAgICBFeHBlY3RlZDogICAgUGFja2FnZSBzaG91bGQgYmUgc2lnbmVkIHdpdGggdGhlIGNvcnJlY3Qga2V5CisgICAgICAgIEV4cGVjdGVkOiAgICBJbWFnZXMgY2FuIGJlIGNyZWF0ZWQgZnJvbSBzaWduZWQgcGFja2FnZXMKKyAgICAgICAgUHJvZHVjdDogICAgIG9lLWNvcmUKKyAgICAgICAgQXV0aG9yOiAgICAgIERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgQXV0aG9yOiAgICAgIEFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+CisgICAgICAgIEF1dG9tYXRlZEJ5OiBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+CisgICAgICAgICIiIgorICAgICAgICBpbXBvcnQgb2UucGFja2FnZWRhdGEKKworICAgICAgICBwYWNrYWdlX2NsYXNzZXMgPSBnZXRfYmJfdmFyKCdQQUNLQUdFX0NMQVNTRVMnKQorICAgICAgICBpZiAncGFja2FnZV9ycG0nIG5vdCBpbiBwYWNrYWdlX2NsYXNzZXM6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdUaGlzIHRlc3QgcmVxdWlyZXMgUlBNIFBhY2thZ2luZy4nKQorCisgICAgICAgIHRlc3RfcmVjaXBlID0gJ2VkJworCisgICAgICAgIGZlYXR1cmUgPSAnSU5IRVJJVCArPSAic2lnbl9ycG0iXG4nCisgICAgICAgIGZlYXR1cmUgKz0gJ1JQTV9HUEdfUEFTU1BIUkFTRSA9ICJ0ZXN0MTIzIlxuJworICAgICAgICBmZWF0dXJlICs9ICdSUE1fR1BHX05BTUUgPSAidGVzdHVzZXIiXG4nCisgICAgICAgIGZlYXR1cmUgKz0gJ0dQR19QQVRIID0gIiVzIlxuJyAlIHNlbGYuZ3BnX2RpcgorCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKGZlYXR1cmUpCisKKyAgICAgICAgYml0YmFrZSgnLWMgY2xlYW4gJXMnICUgdGVzdF9yZWNpcGUpCisgICAgICAgIGJpdGJha2UoJy1mIC1jIHBhY2thZ2Vfd3JpdGVfcnBtICVzJyAlIHRlc3RfcmVjaXBlKQorCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4gJXMnICUgdGVzdF9yZWNpcGUpCisKKyAgICAgICAgbmVlZGVkX3ZhcnMgPSBbJ1BLR0RBVEFfRElSJywgJ0RFUExPWV9ESVJfUlBNJywgJ1BBQ0tBR0VfQVJDSCcsICdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnXQorICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMobmVlZGVkX3ZhcnMsIHRlc3RfcmVjaXBlKQorICAgICAgICBwa2dkYXRhZGlyID0gYmJfdmFyc1snUEtHREFUQV9ESVInXQorICAgICAgICBwa2dkYXRhID0gb2UucGFja2FnZWRhdGEucmVhZF9wa2dkYXRhZmlsZShwa2dkYXRhZGlyICsgIi9ydW50aW1lL2VkIikKKyAgICAgICAgaWYgJ1BLR0UnIGluIHBrZ2RhdGE6CisgICAgICAgICAgICBwZiA9IHBrZ2RhdGFbJ1BOJ10gKyAiLSIgKyBwa2dkYXRhWydQS0dFJ10gKyBwa2dkYXRhWydQS0dWJ10gKyAnLScgKyBwa2dkYXRhWydQS0dSJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBmID0gcGtnZGF0YVsnUE4nXSArICItIiArIHBrZ2RhdGFbJ1BLR1YnXSArICctJyArIHBrZ2RhdGFbJ1BLR1InXQorICAgICAgICBkZXBsb3lfZGlyX3JwbSA9IGJiX3ZhcnNbJ0RFUExPWV9ESVJfUlBNJ10KKyAgICAgICAgcGFja2FnZV9hcmNoID0gYmJfdmFyc1snUEFDS0FHRV9BUkNIJ10ucmVwbGFjZSgnLScsICdfJykKKyAgICAgICAgc3RhZ2luZ19iaW5kaXJfbmF0aXZlID0gYmJfdmFyc1snU1RBR0lOR19CSU5ESVJfTkFUSVZFJ10KKworICAgICAgICBwa2dfZGVwbG95ID0gb3MucGF0aC5qb2luKGRlcGxveV9kaXJfcnBtLCBwYWNrYWdlX2FyY2gsICcuJy5qb2luKChwZiwgcGFja2FnZV9hcmNoLCAncnBtJykpKQorCisgICAgICAgICMgVXNlIGEgdGVtcG9yYXJ5IHJwbWRiCisgICAgICAgIHJwbWRiID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J29lcWEtcnBtZGInKQorCisgICAgICAgIHJ1bkNtZCgnJXMvcnBta2V5cyAtLWRlZmluZSAiX2RicGF0aCAlcyIgLS1pbXBvcnQgJXMnICUKKyAgICAgICAgICAgICAgIChzdGFnaW5nX2JpbmRpcl9uYXRpdmUsIHJwbWRiLCBzZWxmLnB1Yl9rZXlfcGF0aCkpCisKKyAgICAgICAgcmV0ID0gcnVuQ21kKCclcy9ycG1rZXlzIC0tZGVmaW5lICJfZGJwYXRoICVzIiAtLWNoZWNrc2lnICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAoc3RhZ2luZ19iaW5kaXJfbmF0aXZlLCBycG1kYiwgcGtnX2RlcGxveSkpCisgICAgICAgICMgdG1wL2RlcGxveS9ycG0vaTU4Ni9lZC0xLjktcjAuaTU4Ni5ycG06IHJzYSBzaGExIG1kNSBPSworICAgICAgICBzZWxmLmFzc2VydEluKCdyc2Egc2hhMSAobWQ1KSBwZ3AgbWQ1IE9LJywgcmV0Lm91dHB1dCwgJ1BhY2thZ2Ugc2lnbmVkIGluY29ycmVjdGx5LicpCisgICAgICAgIHNodXRpbC5ybXRyZWUocnBtZGIpCisKKyAgICAgICAgI0NoZWNrIHRoYXQgYW4gaW1hZ2UgY2FuIGJlIGJ1aWx0IGZyb20gc2lnbmVkIHBhY2thZ2VzCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4gY29yZS1pbWFnZS1taW5pbWFsJykKKyAgICAgICAgYml0YmFrZSgnLWMgY2xlYW4gY29yZS1pbWFnZS1taW5pbWFsJykKKyAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS1taW5pbWFsJykKKworCisgICAgQE9FVGVzdElEKDEzODIpCisgICAgZGVmIHRlc3Rfc2lnbmluZ19zc3RhdGVfYXJjaGl2ZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6ICAgICBUZXN0IHRoYXQgc3N0YXRlIGFyY2hpdmVzIGNhbiBiZSBzaWduZWQKKyAgICAgICAgRXhwZWN0ZWQ6ICAgIFBhY2thZ2Ugc2hvdWxkIGJlIHNpZ25lZCB3aXRoIHRoZSBjb3JyZWN0IGtleQorICAgICAgICBQcm9kdWN0OiAgICAgb2UtY29yZQorICAgICAgICBBdXRob3I6ICAgICAgRGFuaWVsIElzdHJhdGUgPGRhbmllbC5hbGV4YW5kcnV4LmlzdHJhdGVAaW50ZWwuY29tPgorICAgICAgICBBdXRvbWF0ZWRCeTogRGFuaWVsIElzdHJhdGUgPGRhbmllbC5hbGV4YW5kcnV4LmlzdHJhdGVAaW50ZWwuY29tPgorICAgICAgICAiIiIKKworICAgICAgICB0ZXN0X3JlY2lwZSA9ICdlZCcKKworICAgICAgICBidWlsZGRpciA9IG9zLmVudmlyb24uZ2V0KCdCVUlMRERJUicpCisgICAgICAgIHNzdGF0ZWRpciA9IG9zLnBhdGguam9pbihidWlsZGRpciwgJ3Rlc3Qtc3N0YXRlJykKKworICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuICVzJyAlIHRlc3RfcmVjaXBlKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdybSAtcmYgJXMnICUgc3N0YXRlZGlyKQorCisgICAgICAgIGZlYXR1cmUgPSAnU1NUQVRFX1NJR19LRVkgPz0gInRlc3R1c2VyIlxuJworICAgICAgICBmZWF0dXJlICs9ICdTU1RBVEVfU0lHX1BBU1NQSFJBU0UgPz0gInRlc3QxMjMiXG4nCisgICAgICAgIGZlYXR1cmUgKz0gJ1NTVEFURV9WRVJJRllfU0lHID89ICIxIlxuJworICAgICAgICBmZWF0dXJlICs9ICdHUEdfUEFUSCA9ICIlcyJcbicgJSBzZWxmLmdwZ19kaXIKKyAgICAgICAgZmVhdHVyZSArPSAnU1NUQVRFX0RJUiA9ICIlcyJcbicgJSBzc3RhdGVkaXIKKyAgICAgICAgIyBBbnkgbWlycm9yIG1pZ2h0IGhhdmUgcGFydGlhbCBzc3RhdGUgd2l0aG91dCAuc2lnIGZpbGVzLCB0cmlnZ2VyaW5nIGZhaWx1cmVzCisgICAgICAgIGZlYXR1cmUgKz0gJ1NTVEFURV9NSVJST1JTX2ZvcmNldmFyaWFibGUgPSAiIlxuJworCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKGZlYXR1cmUpCisKKyAgICAgICAgYml0YmFrZSgnLWMgY2xlYW4gJXMnICUgdGVzdF9yZWNpcGUpCisgICAgICAgIGJpdGJha2UodGVzdF9yZWNpcGUpCisKKyAgICAgICAgcmVjaXBlX3NpZyA9IGdsb2IuZ2xvYihzc3RhdGVkaXIgKyAnLyovKjplZDoqX3BhY2thZ2UudGd6LnNpZycpCisgICAgICAgIHJlY2lwZV90Z3ogPSBnbG9iLmdsb2Ioc3N0YXRlZGlyICsgJy8qLyo6ZWQ6Kl9wYWNrYWdlLnRneicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVjaXBlX3NpZyksIDEsICdGYWlsZWQgdG8gZmluZCAuc2lnIGZpbGUuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVjaXBlX3RneiksIDEsICdGYWlsZWQgdG8gZmluZCAudGd6IGZpbGUuJykKKworICAgICAgICByZXQgPSBydW5DbWQoJ2dwZyAtLWhvbWVkaXIgJXMgLS12ZXJpZnkgJXMgJXMnICUgKHNlbGYuZ3BnX2RpciwgcmVjaXBlX3NpZ1swXSwgcmVjaXBlX3RnelswXSkpCisgICAgICAgICMgZ3BnOiBTaWduYXR1cmUgbWFkZSBUaHUgMjIgT2N0IDIwMTUgMDE6NDU6MDkgUE0gRUVTVCB1c2luZyBSU0Ega2V5IElEIDYxRUVGQjMwCisgICAgICAgICMgZ3BnOiBHb29kIHNpZ25hdHVyZSBmcm9tICJ0ZXN0dXNlciAobm9jb21tZW50KSA8dGVzdHVzZXJAZW1haWwuY29tPiIKKyAgICAgICAgc2VsZi5hc3NlcnRJbignZ3BnOiBHb29kIHNpZ25hdHVyZSBmcm9tJywgcmV0Lm91dHB1dCwgJ1BhY2thZ2Ugc2lnbmVkIGluY29ycmVjdGx5LicpCisKKworY2xhc3MgTG9ja2VkU2lnbmF0dXJlcyhPRVNlbGZ0ZXN0VGVzdENhc2UpOgorCisgICAgQE9FVGVzdElEKDE0MjApCisgICAgZGVmIHRlc3RfbG9ja2VkX3NpZ25hdHVyZXMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgVGVzdCBsb2NrZWQgc2lnbmF0dXJlIG1lY2hhbmlzbQorICAgICAgICBFeHBlY3RlZDogICAgTG9ja2VkIHNpZ25hdHVyZXMgd2lsbCBwcmV2ZW50IHRhc2sgdG8gcnVuCisgICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogICAgICBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+CisgICAgICAgIEF1dG9tYXRlZEJ5OiBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+CisgICAgICAgICIiIgorCisgICAgICAgIHRlc3RfcmVjaXBlID0gJ2VkJworICAgICAgICBsb2NrZWRfc2lnc19maWxlID0gJ2xvY2tlZC1zaWdzLmluYycKKworICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdybSAtZiAlcycgJSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgbG9ja2VkX3NpZ3NfZmlsZSkpCisKKyAgICAgICAgYml0YmFrZSh0ZXN0X3JlY2lwZSkKKyAgICAgICAgIyBHZW5lcmF0ZSBsb2NrZWQgc2lncyBpbmNsdWRlIGZpbGUKKyAgICAgICAgYml0YmFrZSgnLVMgbm9uZSAlcycgJSB0ZXN0X3JlY2lwZSkKKworICAgICAgICBmZWF0dXJlID0gJ3JlcXVpcmUgJXNcbicgJSBsb2NrZWRfc2lnc19maWxlCisgICAgICAgIGZlYXR1cmUgKz0gJ1NJR0dFTl9MT0NLRURTSUdTX1RBU0tTSUdfQ0hFQ0sgPSAid2FybiJcbicKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoZmVhdHVyZSkKKworICAgICAgICAjIEJ1aWxkIGEgbG9ja2VkIHJlY2lwZQorICAgICAgICBiaXRiYWtlKHRlc3RfcmVjaXBlKQorCisgICAgICAgICMgTWFrZSBhIGNoYW5nZSB0aGF0IHNob3VsZCBjYXVzZSB0aGUgbG9ja2VkIHRhc2sgc2lnbmF0dXJlIHRvIGNoYW5nZQorICAgICAgICByZWNpcGVfYXBwZW5kX2ZpbGUgPSB0ZXN0X3JlY2lwZSArICdfJyArIGdldF9iYl92YXIoJ1BWJywgdGVzdF9yZWNpcGUpICsgJy5iYmFwcGVuZCcKKyAgICAgICAgcmVjaXBlX2FwcGVuZF9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGxheWVyX3BhdGgsICdyZWNpcGVzLXRlc3QnLCB0ZXN0X3JlY2lwZSwgcmVjaXBlX2FwcGVuZF9maWxlKQorICAgICAgICBmZWF0dXJlID0gJ1NVTU1BUlkgKz0gInRlc3QgbG9ja2VkIHNpZ25hdHVyZSJcbicKKworICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oc2VsZi50ZXN0bGF5ZXJfcGF0aCwgJ3JlY2lwZXMtdGVzdCcsIHRlc3RfcmVjaXBlKSkKKyAgICAgICAgd3JpdGVfZmlsZShyZWNpcGVfYXBwZW5kX3BhdGgsIGZlYXR1cmUpCisKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bigncm0gLXJmICVzJyAlIG9zLnBhdGguam9pbihzZWxmLnRlc3RsYXllcl9wYXRoLCAncmVjaXBlcy10ZXN0JywgdGVzdF9yZWNpcGUpKQorCisgICAgICAgICMgQnVpbGQgdGhlIHJlY2lwZSBhZ2FpbgorICAgICAgICByZXQgPSBiaXRiYWtlKHRlc3RfcmVjaXBlKQorCisgICAgICAgICMgVmVyaWZ5IHlvdSBnZXQgdGhlIHdhcm5pbmcgYW5kIHRoYXQgdGhlIHJlYWwgdGFzayAqaXNuJ3QqIHJ1biAoaS5lLiB0aGUgbG9ja2VkIHNpZ25hdHVyZSBoYXMgd29ya2VkKQorICAgICAgICBwYXR0ID0gcidXQVJOSU5HOiBUaGUgJXM6ZG9fcGFja2FnZSBzaWcgaXMgY29tcHV0ZWQgdG8gYmUgXFMrLCBidXQgdGhlIHNpZyBpcyBsb2NrZWQgdG8gXFMrIGluIFNJR0dFTl9MT0NLRURTSUdTXFMrJyAlIHRlc3RfcmVjaXBlCisgICAgICAgIGZvdW5kX3dhcm4gPSByZS5zZWFyY2gocGF0dCwgcmV0Lm91dHB1dCkKKworICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShmb3VuZF93YXJuLCAiRGlkbid0IGZpbmQgdGhlIGV4cGVjdGVkIHdhcm5pbmcgbWVzc2FnZS4gT3V0cHV0OiAlcyIgJSByZXQub3V0cHV0KQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvc3N0YXRlLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvc3N0YXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMmZkYmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9zc3RhdGUucHkKQEAgLTAsMCArMSw2MyBAQAoraW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCisKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS5zZWxmdGVzdC5jYXNlIGltcG9ydCBPRVNlbGZ0ZXN0VGVzdENhc2UKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFycywgZ2V0X3Rlc3RfbGF5ZXIKKworCitjbGFzcyBTU3RhdGVCYXNlKE9FU2VsZnRlc3RUZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXBMb2NhbChzZWxmKToKKyAgICAgICAgc3VwZXIoU1N0YXRlQmFzZSwgc2VsZikuc2V0VXBMb2NhbCgpCisgICAgICAgIHNlbGYudGVtcF9zc3RhdGVfbG9jYXRpb24gPSBOb25lCisgICAgICAgIG5lZWRlZF92YXJzID0gWydTU1RBVEVfRElSJywgJ05BVElWRUxTQlNUUklORycsICdUQ0xJQkMnLCAnVFVORV9BUkNIJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ1RPUERJUicsICdUQVJHRVRfVkVORE9SJywgJ1RBUkdFVF9PUyddCisgICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhuZWVkZWRfdmFycykKKyAgICAgICAgc2VsZi5zc3RhdGVfcGF0aCA9IGJiX3ZhcnNbJ1NTVEFURV9ESVInXQorICAgICAgICBzZWxmLmhvc3RkaXN0cm8gPSBiYl92YXJzWydOQVRJVkVMU0JTVFJJTkcnXQorICAgICAgICBzZWxmLnRjbGliYyA9IGJiX3ZhcnNbJ1RDTElCQyddCisgICAgICAgIHNlbGYudHVuZV9hcmNoID0gYmJfdmFyc1snVFVORV9BUkNIJ10KKyAgICAgICAgc2VsZi50b3BkaXIgPSBiYl92YXJzWydUT1BESVInXQorICAgICAgICBzZWxmLnRhcmdldF92ZW5kb3IgPSBiYl92YXJzWydUQVJHRVRfVkVORE9SJ10KKyAgICAgICAgc2VsZi50YXJnZXRfb3MgPSBiYl92YXJzWydUQVJHRVRfT1MnXQorICAgICAgICBzZWxmLmRpc3Ryb19zcGVjaWZpY19zc3RhdGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5zc3RhdGVfcGF0aCwgc2VsZi5ob3N0ZGlzdHJvKQorCisgICAgIyBDcmVhdGVzIGEgc3BlY2lhbCBzc3RhdGUgY29uZmlndXJhdGlvbiB3aXRoIHRoZSBvcHRpb24gdG8gYWRkIHNzdGF0ZSBtaXJyb3JzCisgICAgZGVmIGNvbmZpZ19zc3RhdGUoc2VsZiwgdGVtcF9zc3RhdGVfbG9jYXRpb249RmFsc2UsIGFkZF9sb2NhbF9taXJyb3JzPVtdKToKKyAgICAgICAgc2VsZi50ZW1wX3NzdGF0ZV9sb2NhdGlvbiA9IHRlbXBfc3N0YXRlX2xvY2F0aW9uCisKKyAgICAgICAgaWYgc2VsZi50ZW1wX3NzdGF0ZV9sb2NhdGlvbjoKKyAgICAgICAgICAgIHRlbXBfc3N0YXRlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgInRlbXBfc3N0YXRlXyVzIiAlIGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCclWSVtJWQlSCVNJVMnKSkKKyAgICAgICAgICAgIGNvbmZpZ190ZW1wX3NzdGF0ZSA9ICJTU1RBVEVfRElSID0gXCIlc1wiIiAlIHRlbXBfc3N0YXRlX3BhdGgKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhjb25maWdfdGVtcF9zc3RhdGUpCisgICAgICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBfc3N0YXRlX3BhdGgpCisgICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhbJ1NTVEFURV9ESVInLCAnTkFUSVZFTFNCU1RSSU5HJ10pCisgICAgICAgIHNlbGYuc3N0YXRlX3BhdGggPSBiYl92YXJzWydTU1RBVEVfRElSJ10KKyAgICAgICAgc2VsZi5ob3N0ZGlzdHJvID0gYmJfdmFyc1snTkFUSVZFTFNCU1RSSU5HJ10KKyAgICAgICAgc2VsZi5kaXN0cm9fc3BlY2lmaWNfc3N0YXRlID0gb3MucGF0aC5qb2luKHNlbGYuc3N0YXRlX3BhdGgsIHNlbGYuaG9zdGRpc3RybykKKworICAgICAgICBpZiBhZGRfbG9jYWxfbWlycm9yczoKKyAgICAgICAgICAgIGNvbmZpZ19zZXRfc3N0YXRlX2lmX25vdF9zZXQgPSAnU1NUQVRFX01JUlJPUlMgPz0gIiInCisgICAgICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoY29uZmlnX3NldF9zc3RhdGVfaWZfbm90X3NldCkKKyAgICAgICAgICAgIGZvciBsb2NhbF9taXJyb3IgaW4gYWRkX2xvY2FsX21pcnJvcnM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmpvaW4obG9jYWxfbWlycm9yKSA9PSBvcy5wYXRoLmpvaW4oc2VsZi5zc3RhdGVfcGF0aCksIG1zZz0nQ2Fubm90IGFkZCB0aGUgY3VycmVudCBzc3RhdGUgcGF0aCBhcyBhIHNzdGF0ZSBtaXJyb3InKQorICAgICAgICAgICAgICAgIGNvbmZpZ19zc3RhdGVfbWlycm9yID0gIlNTVEFURV9NSVJST1JTICs9IFwiZmlsZTovLy4qIGZpbGU6Ly8vJXMvUEFUSFwiIiAlIGxvY2FsX21pcnJvcgorICAgICAgICAgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhjb25maWdfc3N0YXRlX21pcnJvcikKKworICAgICMgUmV0dXJucyBhIGxpc3QgY29udGFpbmluZyBzc3RhdGUgZmlsZXMKKyAgICBkZWYgc2VhcmNoX3NzdGF0ZShzZWxmLCBmaWxlbmFtZV9yZWdleCwgZGlzdHJvX3NwZWNpZmljPVRydWUsIGRpc3Ryb19ub25zcGVjaWZpYz1UcnVlKToKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc2VsZi5zc3RhdGVfcGF0aCk6CisgICAgICAgICAgICBpZiBkaXN0cm9fc3BlY2lmaWMgYW5kIHJlLnNlYXJjaCgiJXMvW2EtejAtOV17Mn0kIiAlIHNlbGYuaG9zdGRpc3Rybywgcm9vdCk6CisgICAgICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIHJlLnNlYXJjaChmaWxlbmFtZV9yZWdleCwgZik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGYpCisgICAgICAgICAgICBpZiBkaXN0cm9fbm9uc3BlY2lmaWMgYW5kIHJlLnNlYXJjaCgiJXMvW2EtejAtOV17Mn0kIiAlIHNlbGYuc3N0YXRlX3BhdGgsIHJvb3QpOgorICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICBpZiByZS5zZWFyY2goZmlsZW5hbWVfcmVnZXgsIGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChmKQorICAgICAgICByZXR1cm4gcmVzdWx0CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9zc3RhdGV0ZXN0cy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL3NzdGF0ZXRlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3OTAwODgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy9zc3RhdGV0ZXN0cy5weQpAQCAtMCwwICsxLDQ5NiBAQAoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgZ2xvYgoraW1wb3J0IHN1YnByb2Nlc3MKKworZnJvbSBvZXFhLnNlbGZ0ZXN0LmNhc2UgaW1wb3J0IE9FU2VsZnRlc3RUZXN0Q2FzZQorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIGdldF90ZXN0X2xheWVyCitmcm9tIG9lcWEuc2VsZnRlc3QuY2FzZXMuc3N0YXRlIGltcG9ydCBTU3RhdGVCYXNlCitmcm9tIG9lcWEuY29yZS5kZWNvcmF0b3Iub2VpZCBpbXBvcnQgT0VUZXN0SUQKKworaW1wb3J0IGJiLnNpZ2dlbgorCitjbGFzcyBTU3RhdGVUZXN0cyhTU3RhdGVCYXNlKToKKworICAgICMgVGVzdCBzc3RhdGUgZmlsZXMgY3JlYXRpb24gYW5kIHRoZWlyIGxvY2F0aW9uCisgICAgZGVmIHJ1bl90ZXN0X3NzdGF0ZV9jcmVhdGlvbihzZWxmLCB0YXJnZXRzLCBkaXN0cm9fc3BlY2lmaWM9VHJ1ZSwgZGlzdHJvX25vbnNwZWNpZmljPVRydWUsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUsIHNob3VsZF9wYXNzPVRydWUpOgorICAgICAgICBzZWxmLmNvbmZpZ19zc3RhdGUodGVtcF9zc3RhdGVfbG9jYXRpb24sIFtzZWxmLnNzdGF0ZV9wYXRoXSkKKworICAgICAgICBpZiAgc2VsZi50ZW1wX3NzdGF0ZV9sb2NhdGlvbjoKKyAgICAgICAgICAgIGJpdGJha2UoWyctY2NsZWFuJ10gKyB0YXJnZXRzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYml0YmFrZShbJy1jY2xlYW5zc3RhdGUnXSArIHRhcmdldHMpCisKKyAgICAgICAgYml0YmFrZSh0YXJnZXRzKQorICAgICAgICBmaWxlX3RyYWNrZXIgPSBbXQorICAgICAgICByZXN1bHRzID0gc2VsZi5zZWFyY2hfc3N0YXRlKCd8Jy5qb2luKG1hcChzdHIsIHRhcmdldHMpKSwgZGlzdHJvX3NwZWNpZmljLCBkaXN0cm9fbm9uc3BlY2lmaWMpCisgICAgICAgIGlmIGRpc3Ryb19ub25zcGVjaWZpYzoKKyAgICAgICAgICAgIGZvciByIGluIHJlc3VsdHM6CisgICAgICAgICAgICAgICAgaWYgci5lbmRzd2l0aCgoIl9wb3B1bGF0ZV9saWMudGd6IiwgIl9wb3B1bGF0ZV9saWMudGd6LnNpZ2luZm8iLCAiX2ZldGNoLnRnei5zaWdpbmZvIiwgIl91bnBhY2sudGd6LnNpZ2luZm8iLCAiX3BhdGNoLnRnei5zaWdpbmZvIikpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGZpbGVfdHJhY2tlci5hcHBlbmQocikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpbGVfdHJhY2tlciA9IHJlc3VsdHMKKworICAgICAgICBpZiBzaG91bGRfcGFzczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlX3RyYWNrZXIgLCBtc2c9IkNvdWxkIG5vdCBmaW5kIHNzdGF0ZSBmaWxlcyBmb3I6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGZpbGVfdHJhY2tlciAsIG1zZz0iRm91bmQgc3N0YXRlIGZpbGVzIGluIHRoZSB3cm9uZyBwbGFjZSBmb3I6ICVzIChmb3VuZCAlcykiICUgKCcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSksIHN0cihmaWxlX3RyYWNrZXIpKSkKKworICAgIEBPRVRlc3RJRCg5NzUpCisgICAgZGVmIHRlc3Rfc3N0YXRlX2NyZWF0aW9uX2Rpc3Ryb19zcGVjaWZpY19wYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3NzdGF0ZV9jcmVhdGlvbihbJ2JpbnV0aWxzLWNyb3NzLScrIHNlbGYudHVuZV9hcmNoLCAnYmludXRpbHMtbmF0aXZlJ10sIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9RmFsc2UsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpCisKKyAgICBAT0VUZXN0SUQoMTM3NCkKKyAgICBkZWYgdGVzdF9zc3RhdGVfY3JlYXRpb25fZGlzdHJvX3NwZWNpZmljX2ZhaWwoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NyZWF0aW9uKFsnYmludXRpbHMtY3Jvc3MtJysgc2VsZi50dW5lX2FyY2gsICdiaW51dGlscy1uYXRpdmUnXSwgZGlzdHJvX3NwZWNpZmljPUZhbHNlLCBkaXN0cm9fbm9uc3BlY2lmaWM9VHJ1ZSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSwgc2hvdWxkX3Bhc3M9RmFsc2UpCisKKyAgICBAT0VUZXN0SUQoOTc2KQorICAgIGRlZiB0ZXN0X3NzdGF0ZV9jcmVhdGlvbl9kaXN0cm9fbm9uc3BlY2lmaWNfcGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfY3JlYXRpb24oWydsaW51eC1saWJjLWhlYWRlcnMnXSwgZGlzdHJvX3NwZWNpZmljPUZhbHNlLCBkaXN0cm9fbm9uc3BlY2lmaWM9VHJ1ZSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSkKKworICAgIEBPRVRlc3RJRCgxMzc1KQorICAgIGRlZiB0ZXN0X3NzdGF0ZV9jcmVhdGlvbl9kaXN0cm9fbm9uc3BlY2lmaWNfZmFpbChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfY3JlYXRpb24oWydsaW51eC1saWJjLWhlYWRlcnMnXSwgZGlzdHJvX3NwZWNpZmljPVRydWUsIGRpc3Ryb19ub25zcGVjaWZpYz1GYWxzZSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSwgc2hvdWxkX3Bhc3M9RmFsc2UpCisKKyAgICAjIFRlc3QgdGhlIHNzdGF0ZSBmaWxlcyBkZWxldGlvbiBwYXJ0IG9mIHRoZSBkb19jbGVhbnNzdGF0ZSB0YXNrCisgICAgZGVmIHJ1bl90ZXN0X2NsZWFuc3N0YXRlX3Rhc2soc2VsZiwgdGFyZ2V0cywgZGlzdHJvX3NwZWNpZmljPVRydWUsIGRpc3Ryb19ub25zcGVjaWZpYz1UcnVlLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKToKKyAgICAgICAgc2VsZi5jb25maWdfc3N0YXRlKHRlbXBfc3N0YXRlX2xvY2F0aW9uLCBbc2VsZi5zc3RhdGVfcGF0aF0pCisKKyAgICAgICAgYml0YmFrZShbJy1jY2xlYW5zc3RhdGUnXSArIHRhcmdldHMpCisKKyAgICAgICAgYml0YmFrZSh0YXJnZXRzKQorICAgICAgICB0Z3pfY3JlYXRlZCA9IHNlbGYuc2VhcmNoX3NzdGF0ZSgnfCcuam9pbihtYXAoc3RyLCBbcyArICcuKj9cLnRneiQnIGZvciBzIGluIHRhcmdldHNdKSksIGRpc3Ryb19zcGVjaWZpYywgZGlzdHJvX25vbnNwZWNpZmljKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGd6X2NyZWF0ZWQsIG1zZz0iQ291bGQgbm90IGZpbmQgc3N0YXRlIC50Z3ogZmlsZXMgZm9yOiAlcyAoJXMpIiAlICgnLCAnLmpvaW4obWFwKHN0ciwgdGFyZ2V0cykpLCBzdHIodGd6X2NyZWF0ZWQpKSkKKworICAgICAgICBzaWdpbmZvX2NyZWF0ZWQgPSBzZWxmLnNlYXJjaF9zc3RhdGUoJ3wnLmpvaW4obWFwKHN0ciwgW3MgKyAnLio/XC5zaWdpbmZvJCcgZm9yIHMgaW4gdGFyZ2V0c10pKSwgZGlzdHJvX3NwZWNpZmljLCBkaXN0cm9fbm9uc3BlY2lmaWMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzaWdpbmZvX2NyZWF0ZWQsIG1zZz0iQ291bGQgbm90IGZpbmQgc3N0YXRlIC5zaWdpbmZvIGZpbGVzIGZvcjogJXMgKCVzKSIgJSAoJywgJy5qb2luKG1hcChzdHIsIHRhcmdldHMpKSwgc3RyKHNpZ2luZm9fY3JlYXRlZCkpKQorCisgICAgICAgIGJpdGJha2UoWyctY2NsZWFuc3N0YXRlJ10gKyB0YXJnZXRzKQorICAgICAgICB0Z3pfcmVtb3ZlZCA9IHNlbGYuc2VhcmNoX3NzdGF0ZSgnfCcuam9pbihtYXAoc3RyLCBbcyArICcuKj9cLnRneiQnIGZvciBzIGluIHRhcmdldHNdKSksIGRpc3Ryb19zcGVjaWZpYywgZGlzdHJvX25vbnNwZWNpZmljKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHRnel9yZW1vdmVkLCBtc2c9ImRvX2NsZWFuc3N0YXRlIGRpZG4ndCByZW1vdmUgLnRneiBzc3RhdGUgZmlsZXMgZm9yOiAlcyAoJXMpIiAlICgnLCAnLmpvaW4obWFwKHN0ciwgdGFyZ2V0cykpLCBzdHIodGd6X3JlbW92ZWQpKSkKKworICAgIEBPRVRlc3RJRCg5NzcpCisgICAgZGVmIHRlc3RfY2xlYW5zc3RhdGVfdGFza19kaXN0cm9fc3BlY2lmaWNfbm9uc3BlY2lmaWMoc2VsZik6CisgICAgICAgIHRhcmdldHMgPSBbJ2JpbnV0aWxzLWNyb3NzLScrIHNlbGYudHVuZV9hcmNoLCAnYmludXRpbHMtbmF0aXZlJ10KKyAgICAgICAgdGFyZ2V0cy5hcHBlbmQoJ2xpbnV4LWxpYmMtaGVhZGVycycpCisgICAgICAgIHNlbGYucnVuX3Rlc3RfY2xlYW5zc3RhdGVfdGFzayh0YXJnZXRzLCBkaXN0cm9fc3BlY2lmaWM9VHJ1ZSwgZGlzdHJvX25vbnNwZWNpZmljPVRydWUsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpCisKKyAgICBAT0VUZXN0SUQoMTM3NikKKyAgICBkZWYgdGVzdF9jbGVhbnNzdGF0ZV90YXNrX2Rpc3Ryb19ub25zcGVjaWZpYyhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9jbGVhbnNzdGF0ZV90YXNrKFsnbGludXgtbGliYy1oZWFkZXJzJ10sIGRpc3Ryb19zcGVjaWZpYz1GYWxzZSwgZGlzdHJvX25vbnNwZWNpZmljPVRydWUsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpCisKKyAgICBAT0VUZXN0SUQoMTM3NykKKyAgICBkZWYgdGVzdF9jbGVhbnNzdGF0ZV90YXNrX2Rpc3Ryb19zcGVjaWZpYyhzZWxmKToKKyAgICAgICAgdGFyZ2V0cyA9IFsnYmludXRpbHMtY3Jvc3MtJysgc2VsZi50dW5lX2FyY2gsICdiaW51dGlscy1uYXRpdmUnXQorICAgICAgICB0YXJnZXRzLmFwcGVuZCgnbGludXgtbGliYy1oZWFkZXJzJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9jbGVhbnNzdGF0ZV90YXNrKHRhcmdldHMsIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9RmFsc2UsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpCisKKworICAgICMgVGVzdCByZWJ1aWxkaW5nIG9mIGRpc3Ryby1zcGVjaWZpYyBzc3RhdGUgZmlsZXMKKyAgICBkZWYgcnVuX3Rlc3RfcmVidWlsZF9kaXN0cm9fc3BlY2lmaWNfc3N0YXRlKHNlbGYsIHRhcmdldHMsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpOgorICAgICAgICBzZWxmLmNvbmZpZ19zc3RhdGUodGVtcF9zc3RhdGVfbG9jYXRpb24sIFtzZWxmLnNzdGF0ZV9wYXRoXSkKKworICAgICAgICBiaXRiYWtlKFsnLWNjbGVhbnNzdGF0ZSddICsgdGFyZ2V0cykKKworICAgICAgICBiaXRiYWtlKHRhcmdldHMpCisgICAgICAgIHJlc3VsdHMgPSBzZWxmLnNlYXJjaF9zc3RhdGUoJ3wnLmpvaW4obWFwKHN0ciwgW3MgKyAnLio/XC50Z3okJyBmb3IgcyBpbiB0YXJnZXRzXSkpLCBkaXN0cm9fc3BlY2lmaWM9RmFsc2UsIGRpc3Ryb19ub25zcGVjaWZpYz1UcnVlKQorICAgICAgICBmaWx0ZXJlZF9yZXN1bHRzID0gW10KKyAgICAgICAgZm9yIHIgaW4gcmVzdWx0czoKKyAgICAgICAgICAgIGlmIHIuZW5kc3dpdGgoKCJfcG9wdWxhdGVfbGljLnRneiIsICJfcG9wdWxhdGVfbGljLnRnei5zaWdpbmZvIikpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmaWx0ZXJlZF9yZXN1bHRzLmFwcGVuZChyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsdGVyZWRfcmVzdWx0cyA9PSBbXSwgbXNnPSJGb3VuZCBkaXN0cm8gbm9uLXNwZWNpZmljIHNzdGF0ZSBmb3I6ICVzICglcykiICUgKCcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSksIHN0cihmaWx0ZXJlZF9yZXN1bHRzKSkpCisgICAgICAgIGZpbGVfdHJhY2tlcl8xID0gc2VsZi5zZWFyY2hfc3N0YXRlKCd8Jy5qb2luKG1hcChzdHIsIFtzICsgJy4qP1wudGd6JCcgZm9yIHMgaW4gdGFyZ2V0c10pKSwgZGlzdHJvX3NwZWNpZmljPVRydWUsIGRpc3Ryb19ub25zcGVjaWZpYz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihmaWxlX3RyYWNrZXJfMSkgPj0gbGVuKHRhcmdldHMpLCBtc2cgPSAiTm90IGFsbCBzc3RhdGUgZmlsZXMgd2FyZSBjcmVhdGVkIGZvcjogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIHRhcmdldHMpKSkKKworICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYuZGlzdHJvX3NwZWNpZmljX3NzdGF0ZSArICJfb2xkIikKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNlbGYuZGlzdHJvX3NwZWNpZmljX3NzdGF0ZSwgc2VsZi5kaXN0cm9fc3BlY2lmaWNfc3N0YXRlICsgIl9vbGQiKQorICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZGlzdHJvX3NwZWNpZmljX3NzdGF0ZSkKKworICAgICAgICBiaXRiYWtlKFsnLWNjbGVhbiddICsgdGFyZ2V0cykKKyAgICAgICAgYml0YmFrZSh0YXJnZXRzKQorICAgICAgICBmaWxlX3RyYWNrZXJfMiA9IHNlbGYuc2VhcmNoX3NzdGF0ZSgnfCcuam9pbihtYXAoc3RyLCBbcyArICcuKj9cLnRneiQnIGZvciBzIGluIHRhcmdldHNdKSksIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZmlsZV90cmFja2VyXzIpID49IGxlbih0YXJnZXRzKSwgbXNnID0gIk5vdCBhbGwgc3N0YXRlIGZpbGVzIHdhcmUgY3JlYXRlZCBmb3I6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSkpCisKKyAgICAgICAgbm90X3JlY3JlYXRlZCA9IFt4IGZvciB4IGluIGZpbGVfdHJhY2tlcl8xIGlmIHggbm90IGluIGZpbGVfdHJhY2tlcl8yXQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90X3JlY3JlYXRlZCA9PSBbXSwgbXNnPSJUaGUgZm9sbG93aW5nIHNzdGF0ZSBmaWxlcyB3YXJlIG5vdCByZWNyZWF0ZWQ6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCBub3RfcmVjcmVhdGVkKSkpCisKKyAgICAgICAgY3JlYXRlZF9vbmNlID0gW3ggZm9yIHggaW4gZmlsZV90cmFja2VyXzIgaWYgeCBub3QgaW4gZmlsZV90cmFja2VyXzFdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmVhdGVkX29uY2UgPT0gW10sIG1zZz0iVGhlIGZvbGxvd2luZyBzc3RhdGUgZmlsZXMgd2FyZSBjcmVhdGVkIG9ubHkgaW4gdGhlIHNlY29uZCBydW46ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCBjcmVhdGVkX29uY2UpKSkKKworICAgIEBPRVRlc3RJRCgxNzUpCisgICAgZGVmIHRlc3RfcmVidWlsZF9kaXN0cm9fc3BlY2lmaWNfc3N0YXRlX2Nyb3NzX25hdGl2ZV90YXJnZXRzKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3JlYnVpbGRfZGlzdHJvX3NwZWNpZmljX3NzdGF0ZShbJ2JpbnV0aWxzLWNyb3NzLScgKyBzZWxmLnR1bmVfYXJjaCwgJ2JpbnV0aWxzLW5hdGl2ZSddLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKQorCisgICAgQE9FVGVzdElEKDEzNzIpCisgICAgZGVmIHRlc3RfcmVidWlsZF9kaXN0cm9fc3BlY2lmaWNfc3N0YXRlX2Nyb3NzX3RhcmdldChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9yZWJ1aWxkX2Rpc3Ryb19zcGVjaWZpY19zc3RhdGUoWydiaW51dGlscy1jcm9zcy0nICsgc2VsZi50dW5lX2FyY2hdLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKQorCisgICAgQE9FVGVzdElEKDEzNzMpCisgICAgZGVmIHRlc3RfcmVidWlsZF9kaXN0cm9fc3BlY2lmaWNfc3N0YXRlX25hdGl2ZV90YXJnZXQoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfcmVidWlsZF9kaXN0cm9fc3BlY2lmaWNfc3N0YXRlKFsnYmludXRpbHMtbmF0aXZlJ10sIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpCisKKworICAgICMgVGVzdCB0aGUgc3N0YXRlLWNhY2hlLW1hbmFnZW1lbnQgc2NyaXB0LiBFYWNoIGVsZW1lbnQgaW4gdGhlIGdsb2JhbF9jb25maWcgbGlzdCBpcyB1c2VkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBpbiB0aGUgdGFyZ2V0X2NvbmZpZyBsaXN0CisgICAgIyBnbG9iYWxfY29uZmlnIGVsZW1lbnRzIGFyZSBleHBlY3RlZCB0byBub3QgZ2VuZXJhdGUgYW55IHNzdGF0ZSBmaWxlcyB0aGF0IHdvdWxkIGJlIHJlbW92ZWQgYnkgc3N0YXRlLWNhY2hlLW1hbmFnZW1lbnQuc2ggKHN1Y2ggYXMgY2hhbmdpbmcgdGhlIHZhbHVlIG9mIE1BQ0hJTkUpCisgICAgZGVmIHJ1bl90ZXN0X3NzdGF0ZV9jYWNoZV9tYW5hZ2VtZW50X3NjcmlwdChzZWxmLCB0YXJnZXQsIGdsb2JhbF9jb25maWc9WycnXSwgdGFyZ2V0X2NvbmZpZz1bJyddLCBpZ25vcmVfcGF0dGVybnM9W10pOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2xvYmFsX2NvbmZpZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhcmdldF9jb25maWcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZ2xvYmFsX2NvbmZpZykgPT0gbGVuKHRhcmdldF9jb25maWcpLCBtc2c9J0xpc3RzIGdsb2JhbF9jb25maWcgYW5kIHRhcmdldF9jb25maWcgc2hvdWxkIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGVsZW1lbnRzJykKKyAgICAgICAgc2VsZi5jb25maWdfc3N0YXRlKHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUsIGFkZF9sb2NhbF9taXJyb3JzPVtzZWxmLnNzdGF0ZV9wYXRoXSkKKworICAgICAgICAjIElmIGJ1aWxkaGlzdG9yeSBpcyBlbmFibGVkLCB3ZSBuZWVkIHRvIGRpc2FibGUgdmVyc2lvbi1nb2luZy1iYWNrd2FyZHMKKyAgICAgICAgIyBRQSBjaGVja3MgZm9yIHRoaXMgdGVzdC4gSXQgbWF5IHJlcG9ydCBlcnJvcnMgb3RoZXJ3aXNlLgorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoJ0VSUk9SX1FBX3JlbW92ZSA9ICJ2ZXJzaW9uLWdvaW5nLWJhY2t3YXJkcyInKQorCisgICAgICAgICMgRm9yIG5vdCB0aGlzIG9ubHkgY2hlY2tzIGlmIHJhbmRvbSBzc3RhdGUgdGFza3MgYXJlIGhhbmRsZWQgY29ycmVjdGx5IGFzIGEgZ3JvdXAuCisgICAgICAgICMgSW4gdGhlIGZ1dHVyZSB3ZSBzaG91bGQgYWRkIGNvbnRyb2wgb3ZlciB3aGF0IHRhc2tzIHdlIGNoZWNrIGZvci4KKworICAgICAgICBzc3RhdGVfYXJjaHNfbGlzdCA9IFtdCisgICAgICAgIGV4cGVjdGVkX3JlbWFpbmluZ19zc3RhdGUgPSBbXQorICAgICAgICBmb3IgaWR4IGluIHJhbmdlKGxlbih0YXJnZXRfY29uZmlnKSk6CisgICAgICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZ2xvYmFsX2NvbmZpZ1tpZHhdKQorICAgICAgICAgICAgc2VsZi5hcHBlbmRfcmVjaXBlaW5jKHRhcmdldCwgdGFyZ2V0X2NvbmZpZ1tpZHhdKQorICAgICAgICAgICAgc3N0YXRlX2FyY2ggPSBnZXRfYmJfdmFyKCdTU1RBVEVfUEtHQVJDSCcsIHRhcmdldCkKKyAgICAgICAgICAgIGlmIG5vdCBzc3RhdGVfYXJjaCBpbiBzc3RhdGVfYXJjaHNfbGlzdDoKKyAgICAgICAgICAgICAgICBzc3RhdGVfYXJjaHNfbGlzdC5hcHBlbmQoc3N0YXRlX2FyY2gpCisgICAgICAgICAgICBpZiB0YXJnZXRfY29uZmlnW2lkeF0gPT0gdGFyZ2V0X2NvbmZpZ1stMV06CisgICAgICAgICAgICAgICAgdGFyZ2V0X3NzdGF0ZV9iZWZvcmVfYnVpbGQgPSBzZWxmLnNlYXJjaF9zc3RhdGUodGFyZ2V0ICsgJy4qP1wudGd6JCcpCisgICAgICAgICAgICBiaXRiYWtlKCItY2NsZWFuICVzIiAlIHRhcmdldCkKKyAgICAgICAgICAgIHJlc3VsdCA9IGJpdGJha2UodGFyZ2V0LCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgICAgICBpZiB0YXJnZXRfY29uZmlnW2lkeF0gPT0gdGFyZ2V0X2NvbmZpZ1stMV06CisgICAgICAgICAgICAgICAgdGFyZ2V0X3NzdGF0ZV9hZnRlcl9idWlsZCA9IHNlbGYuc2VhcmNoX3NzdGF0ZSh0YXJnZXQgKyAnLio/XC50Z3okJykKKyAgICAgICAgICAgICAgICBleHBlY3RlZF9yZW1haW5pbmdfc3N0YXRlICs9IFt4IGZvciB4IGluIHRhcmdldF9zc3RhdGVfYWZ0ZXJfYnVpbGQgaWYgeCBub3QgaW4gdGFyZ2V0X3NzdGF0ZV9iZWZvcmVfYnVpbGQgaWYgbm90IGFueShwYXR0ZXJuIGluIHggZm9yIHBhdHRlcm4gaW4gaWdub3JlX3BhdHRlcm5zKV0KKyAgICAgICAgICAgIHNlbGYucmVtb3ZlX2NvbmZpZyhnbG9iYWxfY29uZmlnW2lkeF0pCisgICAgICAgICAgICBzZWxmLnJlbW92ZV9yZWNpcGVpbmModGFyZ2V0LCB0YXJnZXRfY29uZmlnW2lkeF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsIG1zZyA9ICJidWlsZCBvZiAlcyBmYWlsZWQgd2l0aCAlcyIgJSAodGFyZ2V0LCByZXN1bHQub3V0cHV0KSkKKworICAgICAgICBydW5DbWQoInNzdGF0ZS1jYWNoZS1tYW5hZ2VtZW50LnNoIC15IC0tY2FjaGUtZGlyPSVzIC0tcmVtb3ZlLWR1cGxpY2F0ZWQgLS1leHRyYS1hcmNocz0lcyIgJSAoc2VsZi5zc3RhdGVfcGF0aCwgJywnLmpvaW4obWFwKHN0ciwgc3N0YXRlX2FyY2hzX2xpc3QpKSkpCisgICAgICAgIGFjdHVhbF9yZW1haW5pbmdfc3N0YXRlID0gW3ggZm9yIHggaW4gc2VsZi5zZWFyY2hfc3N0YXRlKHRhcmdldCArICcuKj9cLnRneiQnKSBpZiBub3QgYW55KHBhdHRlcm4gaW4geCBmb3IgcGF0dGVybiBpbiBpZ25vcmVfcGF0dGVybnMpXQorCisgICAgICAgIGFjdHVhbF9ub3RfZXhwZWN0ZWQgPSBbeCBmb3IgeCBpbiBhY3R1YWxfcmVtYWluaW5nX3NzdGF0ZSBpZiB4IG5vdCBpbiBleHBlY3RlZF9yZW1haW5pbmdfc3N0YXRlXQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFjdHVhbF9ub3RfZXhwZWN0ZWQsIG1zZz0iRmlsZXMgc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkIGJ1dCB3YXJlIG5vdDogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIGFjdHVhbF9ub3RfZXhwZWN0ZWQpKSkKKyAgICAgICAgZXhwZWN0ZWRfbm90X2FjdHVhbCA9IFt4IGZvciB4IGluIGV4cGVjdGVkX3JlbWFpbmluZ19zc3RhdGUgaWYgeCBub3QgaW4gYWN0dWFsX3JlbWFpbmluZ19zc3RhdGVdCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXhwZWN0ZWRfbm90X2FjdHVhbCwgbXNnPSJFeHRyYSBmaWxlcyB3YXJlIHJlbW92ZWQ6ICVzIiAnLCAnLmpvaW4obWFwKHN0ciwgZXhwZWN0ZWRfbm90X2FjdHVhbCkpKQorCisgICAgQE9FVGVzdElEKDk3MykKKyAgICBkZWYgdGVzdF9zc3RhdGVfY2FjaGVfbWFuYWdlbWVudF9zY3JpcHRfdXNpbmdfcHJfMShzZWxmKToKKyAgICAgICAgZ2xvYmFsX2NvbmZpZyA9IFtdCisgICAgICAgIHRhcmdldF9jb25maWcgPSBbXQorICAgICAgICBnbG9iYWxfY29uZmlnLmFwcGVuZCgnJykKKyAgICAgICAgdGFyZ2V0X2NvbmZpZy5hcHBlbmQoJ1BSID0gIjAiJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfY2FjaGVfbWFuYWdlbWVudF9zY3JpcHQoJ200JywgZ2xvYmFsX2NvbmZpZywgIHRhcmdldF9jb25maWcsIGlnbm9yZV9wYXR0ZXJucz1bJ3BvcHVsYXRlX2xpYyddKQorCisgICAgQE9FVGVzdElEKDk3OCkKKyAgICBkZWYgdGVzdF9zc3RhdGVfY2FjaGVfbWFuYWdlbWVudF9zY3JpcHRfdXNpbmdfcHJfMihzZWxmKToKKyAgICAgICAgZ2xvYmFsX2NvbmZpZyA9IFtdCisgICAgICAgIHRhcmdldF9jb25maWcgPSBbXQorICAgICAgICBnbG9iYWxfY29uZmlnLmFwcGVuZCgnJykKKyAgICAgICAgdGFyZ2V0X2NvbmZpZy5hcHBlbmQoJ1BSID0gIjAiJykKKyAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJycpCisgICAgICAgIHRhcmdldF9jb25maWcuYXBwZW5kKCdQUiA9ICIxIicpCisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0KCdtNCcsIGdsb2JhbF9jb25maWcsICB0YXJnZXRfY29uZmlnLCBpZ25vcmVfcGF0dGVybnM9Wydwb3B1bGF0ZV9saWMnXSkKKworICAgIEBPRVRlc3RJRCg5NzkpCisgICAgZGVmIHRlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0X3VzaW5nX3ByXzMoc2VsZik6CisgICAgICAgIGdsb2JhbF9jb25maWcgPSBbXQorICAgICAgICB0YXJnZXRfY29uZmlnID0gW10KKyAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJ01BQ0hJTkUgPSAicWVtdXg4Ni02NCInKQorICAgICAgICB0YXJnZXRfY29uZmlnLmFwcGVuZCgnUFIgPSAiMCInKQorICAgICAgICBnbG9iYWxfY29uZmlnLmFwcGVuZChnbG9iYWxfY29uZmlnWzBdKQorICAgICAgICB0YXJnZXRfY29uZmlnLmFwcGVuZCgnUFIgPSAiMSInKQorICAgICAgICBnbG9iYWxfY29uZmlnLmFwcGVuZCgnTUFDSElORSA9ICJxZW11eDg2IicpCisgICAgICAgIHRhcmdldF9jb25maWcuYXBwZW5kKCdQUiA9ICIxIicpCisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0KCdtNCcsIGdsb2JhbF9jb25maWcsICB0YXJnZXRfY29uZmlnLCBpZ25vcmVfcGF0dGVybnM9Wydwb3B1bGF0ZV9saWMnXSkKKworICAgIEBPRVRlc3RJRCg5NzQpCisgICAgZGVmIHRlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0X3VzaW5nX21hY2hpbmUoc2VsZik6CisgICAgICAgIGdsb2JhbF9jb25maWcgPSBbXQorICAgICAgICB0YXJnZXRfY29uZmlnID0gW10KKyAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJ01BQ0hJTkUgPSAicWVtdXg4Ni02NCInKQorICAgICAgICB0YXJnZXRfY29uZmlnLmFwcGVuZCgnJykKKyAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJ01BQ0hJTkUgPSAicWVtdXg4NiInKQorICAgICAgICB0YXJnZXRfY29uZmlnLmFwcGVuZCgnJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfY2FjaGVfbWFuYWdlbWVudF9zY3JpcHQoJ200JywgZ2xvYmFsX2NvbmZpZywgIHRhcmdldF9jb25maWcsIGlnbm9yZV9wYXR0ZXJucz1bJ3BvcHVsYXRlX2xpYyddKQorCisgICAgQE9FVGVzdElEKDEyNzApCisgICAgZGVmIHRlc3Rfc3N0YXRlXzMyXzY0X3NhbWVfaGFzaChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBzc3RhdGUgY2hlY2tzdW1zIGZvciBib3RoIG5hdGl2ZSBhbmQgdGFyZ2V0IHNob3VsZCBub3QgdmFyeSB3aGV0aGVyCisgICAgICAgIHRoZXkncmUgYnVpbHQgb24gYSAzMiBvciA2NCBiaXQgc3lzdGVtLiBSYXRoZXIgdGhhbiByZXF1aXJpbmcgdHdvIGRpZmZlcmVudAorICAgICAgICBidWlsZCBtYWNoaW5lcyBhbmQgcnVubmluZyBhIGJ1aWxkcywgb3ZlcnJpZGUgdGhlIHZhcmlhYmxlcyBjYWxsaW5nIHVuYW1lKCkKKyAgICAgICAgbWFudWFsbHkgYW5kIGNoZWNrIHVzaW5nIGJpdGJha2UgLVMuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIgorTUFDSElORSA9ICJxZW11eDg2IgorVE1QRElSID0gIiR7VE9QRElSfS90bXAtc3N0YXRlc2FtZWhhc2giCitCVUlMRF9BUkNIID0gIng4Nl82NCIKK0JVSUxEX09TID0gImxpbnV4IgorU0RLTUFDSElORSA9ICJ4ODZfNjQiCitQQUNLQUdFX0NMQVNTRVMgPSAicGFja2FnZV9ycG0gcGFja2FnZV9pcGsgcGFja2FnZV9kZWIiCisiIiIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi50b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaCIpCisgICAgICAgIGJpdGJha2UoImNvcmUtaW1hZ2Utc2F0byAtUyBub25lIikKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiCitNQUNISU5FID0gInFlbXV4ODYiCitUTVBESVIgPSAiJHtUT1BESVJ9L3RtcC1zc3RhdGVzYW1laGFzaDIiCitCVUlMRF9BUkNIID0gImk2ODYiCitCVUlMRF9PUyA9ICJsaW51eCIKK1NES01BQ0hJTkUgPSAiaTY4NiIKK1BBQ0tBR0VfQ0xBU1NFUyA9ICJwYWNrYWdlX3JwbSBwYWNrYWdlX2lwayBwYWNrYWdlX2RlYiIKKyIiIikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLnRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMiIpCisgICAgICAgIGJpdGJha2UoImNvcmUtaW1hZ2Utc2F0byAtUyBub25lIikKKworICAgICAgICBkZWYgZ2V0X2ZpbGVzKGQpOgorICAgICAgICAgICAgZiA9IFtdCisgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkKToKKyAgICAgICAgICAgICAgICBpZiAiY29yZS1pbWFnZS1zYXRvIiBpbiByb290OgorICAgICAgICAgICAgICAgICAgICAjIFNES01BQ0hJTkUgY2hhbmdpbmcgd2lsbCBjaGFuZ2UKKyAgICAgICAgICAgICAgICAgICAgIyBkb19yb290ZnMvZG9fdGVzdGltYWdlL2RvX2J1aWxkIHN0YW1wcyBvZiBpbWFnZXMgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgIyBpcyBzYWZlIHRvIGlnbm9yZS4KKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBmLmV4dGVuZChvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkgZm9yIG5hbWUgaW4gZmlsZXMpCisgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICBmaWxlczEgPSBnZXRfZmlsZXMoc2VsZi50b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaC9zdGFtcHMvIikKKyAgICAgICAgZmlsZXMyID0gZ2V0X2ZpbGVzKHNlbGYudG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gyL3N0YW1wcy8iKQorICAgICAgICBmaWxlczIgPSBbeC5yZXBsYWNlKCJ0bXAtc3N0YXRlc2FtZWhhc2gyIiwgInRtcC1zc3RhdGVzYW1laGFzaCIpLnJlcGxhY2UoImk2ODYtbGludXgiLCAieDg2XzY0LWxpbnV4IikucmVwbGFjZSgiaTY4NiIgKyBzZWxmLnRhcmdldF92ZW5kb3IgKyAiLWxpbnV4IiwgIng4Nl82NCIgKyBzZWxmLnRhcmdldF92ZW5kb3IgKyAiLWxpbnV4IiwgKSBmb3IgeCBpbiBmaWxlczJdCisgICAgICAgIHNlbGYubWF4RGlmZiA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRDb3VudEVxdWFsKGZpbGVzMSwgZmlsZXMyKQorCisKKyAgICBAT0VUZXN0SUQoMTI3MSkKKyAgICBkZWYgdGVzdF9zc3RhdGVfbmF0aXZlbHNic3RyaW5nX3NhbWVfaGFzaChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBzc3RhdGUgY2hlY2tzdW1zIHNob3VsZCBiZSBpbmRlcGVuZGVudCBvZiB3aGljaGV2ZXIgTkFUSVZFTFNCU1RSSU5HIGlzCisgICAgICAgIGRldGVjdGVkLiBSYXRoZXIgdGhhbiByZXF1aXJpbmcgdHdvIGRpZmZlcmVudCBidWlsZCBtYWNoaW5lcyBhbmQgcnVubmluZworICAgICAgICBidWlsZHMsIG92ZXJyaWRlIHRoZSB2YXJpYWJsZXMgbWFudWFsbHkgYW5kIGNoZWNrIHVzaW5nIGJpdGJha2UgLVMuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIgorVE1QRElSID0gXCIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoXCIKK05BVElWRUxTQlNUUklORyA9IFwiRGlzdHJvQVwiCisiIiIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi50b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaCIpCisgICAgICAgIGJpdGJha2UoImNvcmUtaW1hZ2Utc2F0byAtUyBub25lIikKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiCitUTVBESVIgPSBcIiR7VE9QRElSfS90bXAtc3N0YXRlc2FtZWhhc2gyXCIKK05BVElWRUxTQlNUUklORyA9IFwiRGlzdHJvQlwiCisiIiIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi50b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaDIiKQorICAgICAgICBiaXRiYWtlKCJjb3JlLWltYWdlLXNhdG8gLVMgbm9uZSIpCisKKyAgICAgICAgZGVmIGdldF9maWxlcyhkKToKKyAgICAgICAgICAgIGYgPSBbXQorICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoZCk6CisgICAgICAgICAgICAgICAgZi5leHRlbmQob3MucGF0aC5qb2luKHJvb3QsIG5hbWUpIGZvciBuYW1lIGluIGZpbGVzKQorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgZmlsZXMxID0gZ2V0X2ZpbGVzKHNlbGYudG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gvc3RhbXBzLyIpCisgICAgICAgIGZpbGVzMiA9IGdldF9maWxlcyhzZWxmLnRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMi9zdGFtcHMvIikKKyAgICAgICAgZmlsZXMyID0gW3gucmVwbGFjZSgidG1wLXNzdGF0ZXNhbWVoYXNoMiIsICJ0bXAtc3N0YXRlc2FtZWhhc2giKSBmb3IgeCBpbiBmaWxlczJdCisgICAgICAgIHNlbGYubWF4RGlmZiA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRDb3VudEVxdWFsKGZpbGVzMSwgZmlsZXMyKQorCisgICAgQE9FVGVzdElEKDEzNjgpCisgICAgZGVmIHRlc3Rfc3N0YXRlX2FsbGFyY2hfc2FtZXNpZ3Moc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgc3N0YXRlIGNoZWNrc3VtcyBvZiBhbGxhcmNoIHBhY2thZ2VzIHNob3VsZCBiZSBpbmRlcGVuZGVudCBvZiB3aGljaGV2ZXIKKyAgICAgICAgTUFDSElORSBpcyBzZXQuIENoZWNrIHRoaXMgdXNpbmcgYml0YmFrZSAtUy4KKyAgICAgICAgQWxzbywgcmF0aGVyIHRoYW4gZHVwbGljYXRlIHRoZSB0ZXN0LCBjaGVjayBuYXRpdmVzZGsgc3RhbXBzIGFyZSB0aGUgc2FtZSBiZXR3ZWVuCisgICAgICAgIHRoZSB0d28gTUFDSElORSB2YWx1ZXMuCisgICAgICAgICIiIgorCisgICAgICAgIGNvbmZpZ0EgPSAiIiIKK1RNUERJUiA9IFwiJHtUT1BESVJ9L3RtcC1zc3RhdGVzYW1laGFzaFwiCitNQUNISU5FID0gXCJxZW11eDg2LTY0XCIKKyIiIgorICAgICAgICBjb25maWdCID0gIiIiCitUTVBESVIgPSBcIiR7VE9QRElSfS90bXAtc3N0YXRlc2FtZWhhc2gyXCIKK01BQ0hJTkUgPSBcInFlbXVhcm1cIgorIiIiCisgICAgICAgIHNlbGYuc3N0YXRlX2FsbGFyY2hfc2FtZXNpZ3MoY29uZmlnQSwgY29uZmlnQikKKworICAgIEBPRVRlc3RJRCgxNjQ1KQorICAgIGRlZiB0ZXN0X3NzdGF0ZV9hbGxhcmNoX3NhbWVzaWdzX211bHRpbGliKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIHNzdGF0ZSBjaGVja3N1bXMgb2YgYWxsYXJjaCBtdWx0aWxpYiBwYWNrYWdlcyBzaG91bGQgYmUgaW5kZXBlbmRlbnQgb2Ygd2hpY2hldmVyCisgICAgICAgIE1BQ0hJTkUgaXMgc2V0LiBDaGVjayB0aGlzIHVzaW5nIGJpdGJha2UgLVMuCisgICAgICAgIEFsc28sIHJhdGhlciB0aGFuIGR1cGxpY2F0ZSB0aGUgdGVzdCwgY2hlY2sgbmF0aXZlc2RrIHN0YW1wcyBhcmUgdGhlIHNhbWUgYmV0d2VlbgorICAgICAgICB0aGUgdHdvIE1BQ0hJTkUgdmFsdWVzLgorICAgICAgICAiIiIKKworICAgICAgICBjb25maWdBID0gIiIiCitUTVBESVIgPSBcIiR7VE9QRElSfS90bXAtc3N0YXRlc2FtZWhhc2hcIgorTUFDSElORSA9IFwicWVtdXg4Ni02NFwiCityZXF1aXJlIGNvbmYvbXVsdGlsaWIuY29uZgorTVVMVElMSUJTID0gXCJtdWx0aWxpYjpsaWIzMlwiCitERUZBVUxUVFVORV92aXJ0Y2xhc3MtbXVsdGlsaWItbGliMzIgPSBcIng4NlwiCisiIiIKKyAgICAgICAgY29uZmlnQiA9ICIiIgorVE1QRElSID0gXCIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoMlwiCitNQUNISU5FID0gXCJxZW11YXJtXCIKK3JlcXVpcmUgY29uZi9tdWx0aWxpYi5jb25mCitNVUxUSUxJQlMgPSBcIlwiCisiIiIKKyAgICAgICAgc2VsZi5zc3RhdGVfYWxsYXJjaF9zYW1lc2lncyhjb25maWdBLCBjb25maWdCKQorCisgICAgZGVmIHNzdGF0ZV9hbGxhcmNoX3NhbWVzaWdzKHNlbGYsIGNvbmZpZ0EsIGNvbmZpZ0IpOgorCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKGNvbmZpZ0EpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi50b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaCIpCisgICAgICAgIGJpdGJha2UoIndvcmxkIG1ldGEtdG9vbGNoYWluIC1TIG5vbmUiKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhjb25maWdCKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYudG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gyIikKKyAgICAgICAgYml0YmFrZSgid29ybGQgbWV0YS10b29sY2hhaW4gLVMgbm9uZSIpCisKKyAgICAgICAgZGVmIGdldF9maWxlcyhkKToKKyAgICAgICAgICAgIGYgPSB7fQorICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoZCk6CisgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGlmICJtZXRhLWVudmlyb25tZW50IiBpbiByb290IG9yICJjcm9zcy1jYW5hZGlhbiIgaW4gcm9vdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGlmICJkb19idWlsZCIgbm90IGluIG5hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICAjIDEuNC4xK2dpdEFVVE9JTkMrMzAyZmNhOWY0Yy1yMC5kb19wYWNrYWdlX3dyaXRlX2lway5zaWdkYXRhLmYzYTJhMzg2OTdkYTc0M2YwZGJlZDhiNTZhYWZjZjc5CisgICAgICAgICAgICAgICAgICAgICAgICAoXywgdGFzaywgXywgc2hhc2gpID0gbmFtZS5yc3BsaXQoIi4iLCAzKQorICAgICAgICAgICAgICAgICAgICAgICAgZltvcy5wYXRoLmpvaW4ob3MucGF0aC5iYXNlbmFtZShyb290KSwgdGFzayldID0gc2hhc2gKKyAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgIGZpbGVzMSA9IGdldF9maWxlcyhzZWxmLnRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoL3N0YW1wcy9hbGwiICsgc2VsZi50YXJnZXRfdmVuZG9yICsgIi0iICsgc2VsZi50YXJnZXRfb3MpCisgICAgICAgIGZpbGVzMiA9IGdldF9maWxlcyhzZWxmLnRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMi9zdGFtcHMvYWxsIiArIHNlbGYudGFyZ2V0X3ZlbmRvciArICItIiArIHNlbGYudGFyZ2V0X29zKQorICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZXMxLCBmaWxlczIpCisKKyAgICAgICAgbmF0aXZlc2RrZGlyID0gb3MucGF0aC5iYXNlbmFtZShnbG9iLmdsb2Ioc2VsZi50b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaC9zdGFtcHMvKi1uYXRpdmVzZGsqLWxpbnV4IilbMF0pCisKKyAgICAgICAgZmlsZXMxID0gZ2V0X2ZpbGVzKHNlbGYudG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gvc3RhbXBzLyIgKyBuYXRpdmVzZGtkaXIpCisgICAgICAgIGZpbGVzMiA9IGdldF9maWxlcyhzZWxmLnRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMi9zdGFtcHMvIiArIG5hdGl2ZXNka2RpcikKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzMSwgZmlsZXMyKQorCisgICAgQE9FVGVzdElEKDEzNjkpCisgICAgZGVmIHRlc3Rfc3N0YXRlX3NhbWV0dW5lX3NhbWVzaWdzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIHNzdGF0ZSBjaGVja3N1bXMgb2YgdHdvIGlkZW50aWNhbCBtYWNoaW5lcyAodXNpbmcgdGhlIHNhbWUgdHVuZSkgc2hvdWxkIGJlIHRoZQorICAgICAgICBzYW1lLCBhcGFydCBmcm9tIGNoYW5nZXMgd2l0aGluIHRoZSBtYWNoaW5lIHNwZWNpZmljIHN0YW1wcyBkaXJlY3RvcnkuIFdlIHVzZSB0aGUKKyAgICAgICAgcWVtdXg4NmNvcHkgbWFjaGluZSB0byB0ZXN0IHRoaXMuIEFsc28gaW5jbHVkZSBtdWx0aWxpYnMgaW4gdGhlIHRlc3QuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIgorVE1QRElSID0gXCIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoXCIKK01BQ0hJTkUgPSBcInFlbXV4ODZcIgorcmVxdWlyZSBjb25mL211bHRpbGliLmNvbmYKK01VTFRJTElCUyA9ICJtdWx0aWxpYjpsaWIzMiIKK0RFRkFVTFRUVU5FX3ZpcnRjbGFzcy1tdWx0aWxpYi1saWIzMiA9ICJ4ODYiCisiIiIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi50b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaCIpCisgICAgICAgIGJpdGJha2UoIndvcmxkIG1ldGEtdG9vbGNoYWluIC1TIG5vbmUiKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiIKK1RNUERJUiA9IFwiJHtUT1BESVJ9L3RtcC1zc3RhdGVzYW1laGFzaDJcIgorTUFDSElORSA9IFwicWVtdXg4NmNvcHlcIgorcmVxdWlyZSBjb25mL211bHRpbGliLmNvbmYKK01VTFRJTElCUyA9ICJtdWx0aWxpYjpsaWIzMiIKK0RFRkFVTFRUVU5FX3ZpcnRjbGFzcy1tdWx0aWxpYi1saWIzMiA9ICJ4ODYiCisiIiIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi50b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaDIiKQorICAgICAgICBiaXRiYWtlKCJ3b3JsZCBtZXRhLXRvb2xjaGFpbiAtUyBub25lIikKKworICAgICAgICBkZWYgZ2V0X2ZpbGVzKGQpOgorICAgICAgICAgICAgZiA9IFtdCisgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkKToKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgIm1ldGEtZW52aXJvbm1lbnQiIGluIHJvb3Qgb3IgImNyb3NzLWNhbmFkaWFuIiBpbiByb290OgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgaWYgInFlbXV4ODZjb3B5LSIgaW4gcm9vdCBvciAicWVtdXg4Ni0iIGluIHJvb3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBpZiAiZG9fYnVpbGQiIG5vdCBpbiBuYW1lIGFuZCAiZG9fcG9wdWxhdGVfc2RrIiBub3QgaW4gbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGYuYXBwZW5kKG9zLnBhdGguam9pbihyb290LCBuYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgIGZpbGVzMSA9IGdldF9maWxlcyhzZWxmLnRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoL3N0YW1wcyIpCisgICAgICAgIGZpbGVzMiA9IGdldF9maWxlcyhzZWxmLnRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMi9zdGFtcHMiKQorICAgICAgICBmaWxlczIgPSBbeC5yZXBsYWNlKCJ0bXAtc3N0YXRlc2FtZWhhc2gyIiwgInRtcC1zc3RhdGVzYW1laGFzaCIpIGZvciB4IGluIGZpbGVzMl0KKyAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoZmlsZXMxLCBmaWxlczIpCisKKworICAgIEBPRVRlc3RJRCgxNDk4KQorICAgIGRlZiB0ZXN0X3NzdGF0ZV9ub29wX3NhbWVzaWdzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIHNzdGF0ZSBjaGVja3N1bXMgb2YgdHdvIGJ1aWxkcyB3aXRoIHRoZXNlIHZhcmlhYmxlcyBjaGFuZ2VkIG9yCisgICAgICAgIGNsYXNzZXMgaW5oZXJpdHMgc2hvdWxkIGJlIHRoZSBzYW1lLgorICAgICAgICAiIiIKKworICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiIKK1RNUERJUiA9ICIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoIgorQkJfTlVNQkVSX1RIUkVBRFMgPSAiJHtAb2UudXRpbHMuY3B1X2NvdW50KCl9IgorUEFSQUxMRUxfTUFLRSA9ICItaiAxIgorRExfRElSID0gIiR7VE9QRElSfS9kb3dubG9hZDEiCitUSU1FID0gIjExMTExMSIKK0RBVEUgPSAiMjAxNjExMTEiCitJTkhFUklUX3JlbW92ZSA9ICJidWlsZHN0YXRzLXN1bW1hcnkgYnVpbGRoaXN0b3J5IHVuaW5hdGl2ZSIKK2h0dHBfcHJveHkgPSAiIgorIiIiKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYudG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2giKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYudG9wZGlyICsgIi9kb3dubG9hZDEiKQorICAgICAgICBiaXRiYWtlKCJ3b3JsZCBtZXRhLXRvb2xjaGFpbiAtUyBub25lIikKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiCitUTVBESVIgPSAiJHtUT1BESVJ9L3RtcC1zc3RhdGVzYW1laGFzaDIiCitCQl9OVU1CRVJfVEhSRUFEUyA9ICIke0BvZS51dGlscy5jcHVfY291bnQoKSsxfSIKK1BBUkFMTEVMX01BS0UgPSAiLWogMiIKK0RMX0RJUiA9ICIke1RPUERJUn0vZG93bmxvYWQyIgorVElNRSA9ICIyMjIyMjIiCitEQVRFID0gIjIwMTYxMjEyIgorIyBBbHdheXMgcmVtb3ZlIHVuaW5hdGl2ZSBhcyB3ZSdyZSBjaGFuZ2luZyBwcm94aWVzCitJTkhFUklUX3JlbW92ZSA9ICJ1bmluYXRpdmUiCitJTkhFUklUICs9ICJidWlsZHN0YXRzLXN1bW1hcnkgYnVpbGRoaXN0b3J5IgoraHR0cF9wcm94eSA9ICJodHRwOi8vZXhhbXBsZS5jb20vIgorIiIiKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYudG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gyIikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLnRvcGRpciArICIvZG93bmxvYWQyIikKKyAgICAgICAgYml0YmFrZSgid29ybGQgbWV0YS10b29sY2hhaW4gLVMgbm9uZSIpCisKKyAgICAgICAgZGVmIGdldF9maWxlcyhkKToKKyAgICAgICAgICAgIGYgPSB7fQorICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoZCk6CisgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIG5hbWUsIHNoYXNoID0gbmFtZS5yc3BsaXQoJy4nLCAxKQorICAgICAgICAgICAgICAgICAgICAjIEV4dHJhY3QganVzdCB0aGUgbWFjaGluZSBhbmQgcmVjaXBlIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgYmFzZSA9IG9zLnNlcC5qb2luKHJvb3QucnNwbGl0KG9zLnNlcCwgMilbLTI6XSArIFtuYW1lXSkKKyAgICAgICAgICAgICAgICAgICAgZltiYXNlXSA9IHNoYXNoCisgICAgICAgICAgICByZXR1cm4gZgorCisgICAgICAgIGRlZiBjb21wYXJlX3NpZ2ZpbGVzKGZpbGVzLCBmaWxlczEsIGZpbGVzMiwgY29tcGFyZT1GYWxzZSk6CisgICAgICAgICAgICBmb3IgayBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBpZiBrIGluIGZpbGVzMSBhbmQgayBpbiBmaWxlczI6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCIlcyBkaWZmZXJzOiIgJSBrKQorICAgICAgICAgICAgICAgICAgICBpZiBjb21wYXJlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2lnZGF0YWZpbGUxID0gc2VsZi50b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaC9zdGFtcHMvIiArIGsgKyAiLiIgKyBmaWxlczFba10KKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZ2RhdGFmaWxlMiA9IHNlbGYudG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gyL3N0YW1wcy8iICsgayArICIuIiArIGZpbGVzMltrXQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gYmIuc2lnZ2VuLmNvbXBhcmVfc2lnZmlsZXMoc2lnZGF0YWZpbGUxLCBzaWdkYXRhZmlsZTIpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvdXRwdXQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ1xuJy5qb2luKG91dHB1dCkpCisgICAgICAgICAgICAgICAgZWxpZiBrIGluIGZpbGVzMSBhbmQgayBub3QgaW4gZmlsZXMyOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiJXMgaW4gZmlsZXMxIiAlIGspCisgICAgICAgICAgICAgICAgZWxpZiBrIG5vdCBpbiBmaWxlczEgYW5kIGsgaW4gZmlsZXMyOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiJXMgaW4gZmlsZXMyIiAlIGspCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0ICJzaG91bGRuJ3QgcmVhY2ggaGVyZSIKKworICAgICAgICBmaWxlczEgPSBnZXRfZmlsZXMoc2VsZi50b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaC9zdGFtcHMvIikKKyAgICAgICAgZmlsZXMyID0gZ2V0X2ZpbGVzKHNlbGYudG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gyL3N0YW1wcy8iKQorICAgICAgICAjIFJlbW92ZSBpdGVtcyB0aGF0IGFyZSBpZGVudGljYWwgaW4gYm90aCBzZXRzCisgICAgICAgIGZvciBrLHYgaW4gZmlsZXMxLml0ZW1zKCkgJiBmaWxlczIuaXRlbXMoKToKKyAgICAgICAgICAgIGRlbCBmaWxlczFba10KKyAgICAgICAgICAgIGRlbCBmaWxlczJba10KKyAgICAgICAgaWYgbm90IGZpbGVzMSBhbmQgbm90IGZpbGVzMjoKKyAgICAgICAgICAgICMgTm8gY2hhbmdlcywgc28gd2UncmUgZG9uZQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZmlsZXMgPSBsaXN0KGZpbGVzMS5rZXlzKCkgfCBmaWxlczIua2V5cygpKQorICAgICAgICAjIHRoaXMgaXMgYW4gZXhwZW5zaXZlIGNvbXB1dGF0aW9uLCB0aHVzIGp1c3QgY29tcGFyZSB0aGUgZmlyc3QgJ21heF9zaWdmaWxlc190b19jb21wYXJlJyBrIGZpbGVzCisgICAgICAgIG1heF9zaWdmaWxlc190b19jb21wYXJlID0gMjAKKyAgICAgICAgZmlyc3QsIHJlc3QgPSBmaWxlc1s6bWF4X3NpZ2ZpbGVzX3RvX2NvbXBhcmVdLCBmaWxlc1ttYXhfc2lnZmlsZXNfdG9fY29tcGFyZTpdCisgICAgICAgIGNvbXBhcmVfc2lnZmlsZXMoZmlyc3QsIGZpbGVzMS5rZXlzKCksIGZpbGVzMi5rZXlzKCksIGNvbXBhcmU9VHJ1ZSkKKyAgICAgICAgY29tcGFyZV9zaWdmaWxlcyhyZXN0LCBmaWxlczEua2V5cygpLCBmaWxlczIua2V5cygpLCBjb21wYXJlPUZhbHNlKQorCisgICAgICAgIHNlbGYuZmFpbCgic3N0YXRlIGhhc2hlcyBub3QgaWRlbnRpY2FsLiIpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jYXNlcy90aW5mb2lsLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvdGluZm9pbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODg5YTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvdGluZm9pbC5weQpAQCAtMCwwICsxLDIzMSBAQAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCB0aW1lCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGJiLnRpbmZvaWwKKworZnJvbSBvZXFhLnNlbGZ0ZXN0LmNhc2UgaW1wb3J0IE9FU2VsZnRlc3RUZXN0Q2FzZQorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQKK2Zyb20gb2VxYS5jb3JlLmRlY29yYXRvci5vZWlkIGltcG9ydCBPRVRlc3RJRAorCitjbGFzcyBUaW5mb2lsVGVzdHMoT0VTZWxmdGVzdFRlc3RDYXNlKToKKyAgICAiIiIgQmFzaWMgdGVzdHMgZm9yIHRoZSB0aW5mb2lsIEFQSSAiIiIKKworICAgIEBPRVRlc3RJRCgxNTY4KQorICAgIGRlZiB0ZXN0X2dldHZhcihzZWxmKToKKyAgICAgICAgd2l0aCBiYi50aW5mb2lsLlRpbmZvaWwoKSBhcyB0aW5mb2lsOgorICAgICAgICAgICAgdGluZm9pbC5wcmVwYXJlKFRydWUpCisgICAgICAgICAgICBtYWNoaW5lID0gdGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ01BQ0hJTkUnKQorICAgICAgICAgICAgaWYgbm90IG1hY2hpbmU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmFibGUgdG8gZ2V0IE1BQ0hJTkUgdmFsdWUgLSByZXR1cm5lZCAlcycgJSBtYWNoaW5lKQorCisgICAgQE9FVGVzdElEKDE1NjkpCisgICAgZGVmIHRlc3RfZXhwYW5kKHNlbGYpOgorICAgICAgICB3aXRoIGJiLnRpbmZvaWwuVGluZm9pbCgpIGFzIHRpbmZvaWw6CisgICAgICAgICAgICB0aW5mb2lsLnByZXBhcmUoVHJ1ZSkKKyAgICAgICAgICAgIGV4cHIgPSAnJHtAb3MuZ2V0cGlkKCl9JworICAgICAgICAgICAgcGlkID0gdGluZm9pbC5jb25maWdfZGF0YS5leHBhbmQoZXhwcikKKyAgICAgICAgICAgIGlmIG5vdCBwaWQ6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmFibGUgdG8gZXhwYW5kICIlcyIgLSByZXR1cm5lZCAlcycgJSAoZXhwciwgcGlkKSkKKworICAgIEBPRVRlc3RJRCgxNTcwKQorICAgIGRlZiB0ZXN0X2dldHZhcl9iYl9vcmlnZW52KHNlbGYpOgorICAgICAgICB3aXRoIGJiLnRpbmZvaWwuVGluZm9pbCgpIGFzIHRpbmZvaWw6CisgICAgICAgICAgICB0aW5mb2lsLnByZXBhcmUoVHJ1ZSkKKyAgICAgICAgICAgIG9yaWdlbnYgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignQkJfT1JJR0VOVicsIEZhbHNlKQorICAgICAgICAgICAgaWYgbm90IG9yaWdlbnY6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmFibGUgdG8gZ2V0IEJCX09SSUdFTlYgdmFsdWUgLSByZXR1cm5lZCAlcycgJSBvcmlnZW52KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnZW52LmdldFZhcignSE9NRScsIEZhbHNlKSwgb3MuZW52aXJvblsnSE9NRSddKQorCisgICAgQE9FVGVzdElEKDE1NzEpCisgICAgZGVmIHRlc3RfcGFyc2VfcmVjaXBlKHNlbGYpOgorICAgICAgICB3aXRoIGJiLnRpbmZvaWwuVGluZm9pbCgpIGFzIHRpbmZvaWw6CisgICAgICAgICAgICB0aW5mb2lsLnByZXBhcmUoY29uZmlnX29ubHk9RmFsc2UsIHF1aWV0PTIpCisgICAgICAgICAgICB0ZXN0cmVjaXBlID0gJ21kYWRtJworICAgICAgICAgICAgYmVzdCA9IHRpbmZvaWwuZmluZF9iZXN0X3Byb3ZpZGVyKHRlc3RyZWNpcGUpCisgICAgICAgICAgICBpZiBub3QgYmVzdDoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1VuYWJsZSB0byBmaW5kIHJlY2lwZSBwcm92aWRpbmcgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgICAgIHJkID0gdGluZm9pbC5wYXJzZV9yZWNpcGVfZmlsZShiZXN0WzNdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0cmVjaXBlLCByZC5nZXRWYXIoJ1BOJykpCisKKyAgICBAT0VUZXN0SUQoMTU3MikKKyAgICBkZWYgdGVzdF9wYXJzZV9yZWNpcGVfY29weV9leHBhbmQoc2VsZik6CisgICAgICAgIHdpdGggYmIudGluZm9pbC5UaW5mb2lsKCkgYXMgdGluZm9pbDoKKyAgICAgICAgICAgIHRpbmZvaWwucHJlcGFyZShjb25maWdfb25seT1GYWxzZSwgcXVpZXQ9MikKKyAgICAgICAgICAgIHRlc3RyZWNpcGUgPSAnbWRhZG0nCisgICAgICAgICAgICBiZXN0ID0gdGluZm9pbC5maW5kX2Jlc3RfcHJvdmlkZXIodGVzdHJlY2lwZSkKKyAgICAgICAgICAgIGlmIG5vdCBiZXN0OgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5hYmxlIHRvIGZpbmQgcmVjaXBlIHByb3ZpZGluZyAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICAgICAgcmQgPSB0aW5mb2lsLnBhcnNlX3JlY2lwZV9maWxlKGJlc3RbM10pCisgICAgICAgICAgICAjIENoZWNrIHdlIGNhbiBnZXQgdmFyaWFibGUgdmFsdWVzCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RyZWNpcGUsIHJkLmdldFZhcignUE4nKSkKKyAgICAgICAgICAgICMgQ2hlY2sgdGhhdCBleHBhbmRpbmcgYSB2YWx1ZSB0aGF0IGluY2x1ZGVzIGEgdmFyaWFibGUgcmVmZXJlbmNlIHdvcmtzCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RyZWNpcGUsIHJkLmdldFZhcignQlBOJykpCisgICAgICAgICAgICAjIE5vdyBjaGVjayB0aGF0IGNoYW5naW5nIHRoZSByZWZlcmVuY2VkIHZhcmlhYmxlJ3MgdmFsdWUgaW4gYSBjb3B5IGdpdmVzIHRoYXQKKyAgICAgICAgICAgICMgdmFsdWUgd2hlbiBleHBhbmRpbmcKKyAgICAgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShyZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BOJywgJ2hlbGxvJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2hlbGxvJywgbG9jYWxkYXRhLmdldFZhcignQlBOJykpCisKKyAgICBAT0VUZXN0SUQoMTU3MykKKyAgICBkZWYgdGVzdF9wYXJzZV9yZWNpcGVfaW5pdGlhbF9kYXRhc3RvcmUoc2VsZik6CisgICAgICAgIHdpdGggYmIudGluZm9pbC5UaW5mb2lsKCkgYXMgdGluZm9pbDoKKyAgICAgICAgICAgIHRpbmZvaWwucHJlcGFyZShjb25maWdfb25seT1GYWxzZSwgcXVpZXQ9MikKKyAgICAgICAgICAgIHRlc3RyZWNpcGUgPSAnbWRhZG0nCisgICAgICAgICAgICBiZXN0ID0gdGluZm9pbC5maW5kX2Jlc3RfcHJvdmlkZXIodGVzdHJlY2lwZSkKKyAgICAgICAgICAgIGlmIG5vdCBiZXN0OgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5hYmxlIHRvIGZpbmQgcmVjaXBlIHByb3ZpZGluZyAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICAgICAgZGNvcHkgPSBiYi5kYXRhLmNyZWF0ZUNvcHkodGluZm9pbC5jb25maWdfZGF0YSkKKyAgICAgICAgICAgIGRjb3B5LnNldFZhcignTVlWQVJJQUJMRScsICdzb21ldmFsdWUnKQorICAgICAgICAgICAgcmQgPSB0aW5mb2lsLnBhcnNlX3JlY2lwZV9maWxlKGJlc3RbM10sIGNvbmZpZ19kYXRhPWRjb3B5KQorICAgICAgICAgICAgIyBDaGVjayB3ZSBjYW4gZ2V0IHZhcmlhYmxlIHZhbHVlcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnc29tZXZhbHVlJywgcmQuZ2V0VmFyKCdNWVZBUklBQkxFJykpCisKKyAgICBAT0VUZXN0SUQoMTU3NCkKKyAgICBkZWYgdGVzdF9saXN0X3JlY2lwZXMoc2VsZik6CisgICAgICAgIHdpdGggYmIudGluZm9pbC5UaW5mb2lsKCkgYXMgdGluZm9pbDoKKyAgICAgICAgICAgIHRpbmZvaWwucHJlcGFyZShjb25maWdfb25seT1GYWxzZSwgcXVpZXQ9MikKKyAgICAgICAgICAgICMgQ2hlY2sgcGtnX3BuCisgICAgICAgICAgICBjaGVja3BucyA9IFsndGFyJywgJ2F1dG9tYWtlJywgJ2NvcmV1dGlscycsICdtNC1uYXRpdmUnLCAnbmF0aXZlc2RrLWdjYyddCisgICAgICAgICAgICBwa2dfcG4gPSB0aW5mb2lsLmNvb2tlci5yZWNpcGVjYWNoZXNbJyddLnBrZ19wbgorICAgICAgICAgICAgZm9yIHBuIGluIGNoZWNrcG5zOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocG4sIHBrZ19wbikKKyAgICAgICAgICAgICMgQ2hlY2sgcGtnX2ZuCisgICAgICAgICAgICBjaGVja2ZucyA9IHsnbmF0aXZlc2RrLWdjYyc6ICdedmlydHVhbDpuYXRpdmVzZGs6LionLCAnY29yZXV0aWxzJzogJy4qL2NvcmV1dGlsc18uKi5iYid9CisgICAgICAgICAgICBmb3IgZm4sIHBuIGluIHRpbmZvaWwuY29va2VyLnJlY2lwZWNhY2hlc1snJ10ucGtnX2ZuLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgcG4gaW4gY2hlY2twbnM6CisgICAgICAgICAgICAgICAgICAgIGlmIHBuIGluIGNoZWNrZm5zOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGNoZWNrZm5zW3BuXSwgZm4pLCAnRW50cnkgZm9yICVzOiAlcyBkaWQgbm90IG1hdGNoICVzJyAlIChwbiwgZm4sIGNoZWNrZm5zW3BuXSkpCisgICAgICAgICAgICAgICAgICAgIGNoZWNrcG5zLnJlbW92ZShwbikKKyAgICAgICAgICAgIGlmIGNoZWNrcG5zOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5hYmxlIHRvIGZpbmQgcGtnX2ZuIGVudHJpZXMgZm9yOiAlcycgJSAnLCAnLmpvaW4oY2hlY2twbnMpKQorCisgICAgQE9FVGVzdElEKDE1NzUpCisgICAgZGVmIHRlc3Rfd2FpdF9ldmVudChzZWxmKToKKyAgICAgICAgd2l0aCBiYi50aW5mb2lsLlRpbmZvaWwoKSBhcyB0aW5mb2lsOgorICAgICAgICAgICAgdGluZm9pbC5wcmVwYXJlKGNvbmZpZ19vbmx5PVRydWUpCisKKyAgICAgICAgICAgIHRpbmZvaWwuc2V0X2V2ZW50X21hc2soWydiYi5ldmVudC5GaWxlc01hdGNoaW5nRm91bmQnLCAnYmIuY29tbWFuZC5Db21tYW5kQ29tcGxldGVkJ10pCisKKyAgICAgICAgICAgICMgTmVlZCB0byBkcmFpbiBldmVudHMgb3RoZXJ3aXNlIGV2ZW50cyB0aGF0IHdlcmUgbWFza2VkIG1heSBzdGlsbCBiZSBpbiB0aGUgcXVldWUKKyAgICAgICAgICAgIHdoaWxlIHRpbmZvaWwud2FpdF9ldmVudCgpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgcGF0dGVybiA9ICdjb25mJworICAgICAgICAgICAgcmVzID0gdGluZm9pbC5ydW5fY29tbWFuZCgnZmluZEZpbGVzTWF0Y2hpbmdJbkRpcicsIHBhdHRlcm4sICdjb25mL21hY2hpbmUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcykKKworICAgICAgICAgICAgZXZlbnRyZWNlaXZlZCA9IEZhbHNlCisgICAgICAgICAgICBjb21tYW5kY29tcGxldGUgPSBGYWxzZQorICAgICAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgIyBXYWl0IGZvciA1cyBpbiB0b3RhbCBzbyB3ZSdkIGRldGVjdCBzcHVyaW91cyBoZWFydGJlYXQgZXZlbnRzIGZvciBleGFtcGxlCisgICAgICAgICAgICB3aGlsZSB0aW1lLnRpbWUoKSAtIHN0YXJ0IDwgNToKKyAgICAgICAgICAgICAgICBldmVudCA9IHRpbmZvaWwud2FpdF9ldmVudCgxKQorICAgICAgICAgICAgICAgIGlmIGV2ZW50OgorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb21tYW5kLkNvbW1hbmRDb21wbGV0ZWQpOgorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZGNvbXBsZXRlID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkZpbGVzTWF0Y2hpbmdGb3VuZCk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdHRlcm4sIGV2ZW50Ll9wYXR0ZXJuKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigncWVtdWFybS5jb25mJywgZXZlbnQuX21hdGNoZXMpCisgICAgICAgICAgICAgICAgICAgICAgICBldmVudHJlY2VpdmVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGxvZ2dpbmcuTG9nUmVjb3JkKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1VuZXhwZWN0ZWQgZXZlbnQ6ICVzJyAlIGV2ZW50KQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29tbWFuZGNvbXBsZXRlLCAnVGltZWQgb3V0IHdhaXRpbmcgZm9yIENvbW1hbmRDb21wbGV0ZWQgZXZlbnQgZnJvbSBiaXRiYWtlIHNlcnZlcicpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXZlbnRyZWNlaXZlZCwgJ0RpZCBub3QgcmVjZWl2ZSBGaWxlc01hdGNoaW5nRm91bmQgZXZlbnQgZnJvbSBiaXRiYWtlIHNlcnZlcicpCisKKyAgICBAT0VUZXN0SUQoMTU3NikKKyAgICBkZWYgdGVzdF9zZXR2YXJpYWJsZV9jbGVhbihzZWxmKToKKyAgICAgICAgIyBGaXJzdCBjaGVjayB0aGF0IHNldFZhcmlhYmxlIGFmZmVjdHMgdGhlIGRhdGFzdG9yZQorICAgICAgICB3aXRoIGJiLnRpbmZvaWwuVGluZm9pbCgpIGFzIHRpbmZvaWw6CisgICAgICAgICAgICB0aW5mb2lsLnByZXBhcmUoY29uZmlnX29ubHk9VHJ1ZSkKKyAgICAgICAgICAgIHRpbmZvaWwucnVuX2NvbW1hbmQoJ3NldFZhcmlhYmxlJywgJ1RFU1RWQVInLCAnc3BlY2lhbHZhbHVlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ1RFU1RWQVInKSwgJ3NwZWNpYWx2YWx1ZScsICdWYWx1ZSBzZXQgdXNpbmcgc2V0VmFyaWFibGUgaXMgbm90IHJlZmxlY3RlZCBpbiBjbGllbnQtc2lkZSBnZXRWYXIoKScpCisKKyAgICAgICAgIyBOb3cgY2hlY2sgdGhhdCB0aGUgc2V0VmFyaWFibGUncyBlZmZlY3RzIGFyZSBubyBsb25nZXIgcHJlc2VudAorICAgICAgICAjICh0aGlzIG1heSBsZWdpdGltYXRlbHkgYnJlYWsgaW4gZnV0dXJlIGlmIHdlIHN0b3AgcmVpbml0aWFsaXNpbmcKKyAgICAgICAgIyB0aGUgZGF0YXN0b3JlLCBpbiB3aGljaCBjYXNlIHdlJ2xsIGhhdmUgdG8gcmVjb25zaWRlciB1c2Ugb2YKKyAgICAgICAgIyBzZXRWYXJpYWJsZSBlbnRpcmVseSkKKyAgICAgICAgd2l0aCBiYi50aW5mb2lsLlRpbmZvaWwoKSBhcyB0aW5mb2lsOgorICAgICAgICAgICAgdGluZm9pbC5wcmVwYXJlKGNvbmZpZ19vbmx5PVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdURVNUVkFSJyksICdzcGVjaWFsdmFsdWUnLCAnVmFsdWUgc2V0IHVzaW5nIHNldFZhcmlhYmxlIGlzIHN0aWxsIHByZXNlbnQhJykKKworICAgICAgICAjIE5vdyBjaGVjayB0aGF0IHNldFZhciBvbiB0aGUgbWFpbiBkYXRhc3RvcmUgd29ya3MgKHVzZXMgc2V0VmFyaWFibGUgaW50ZXJuYWxseSkKKyAgICAgICAgd2l0aCBiYi50aW5mb2lsLlRpbmZvaWwoKSBhcyB0aW5mb2lsOgorICAgICAgICAgICAgdGluZm9pbC5wcmVwYXJlKGNvbmZpZ19vbmx5PVRydWUpCisgICAgICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhLnNldFZhcignVEVTVFZBUicsICdzcGVjaWFsdmFsdWUnKQorICAgICAgICAgICAgdmFsdWUgPSB0aW5mb2lsLnJ1bl9jb21tYW5kKCdnZXRWYXJpYWJsZScsICdURVNUVkFSJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsICdzcGVjaWFsdmFsdWUnLCAnVmFsdWUgc2V0IHVzaW5nIGNvbmZpZ19kYXRhLnNldFZhcigpIGlzIG5vdCByZWZsZWN0ZWQgaW4gY29uZmlnX2RhdGEuZ2V0VmFyKCknKQorCisgICAgQE9FVGVzdElEKDE4ODQpCisgICAgZGVmIHRlc3RfZGF0YXN0b3JlX29wZXJhdGlvbnMoc2VsZik6CisgICAgICAgIHdpdGggYmIudGluZm9pbC5UaW5mb2lsKCkgYXMgdGluZm9pbDoKKyAgICAgICAgICAgIHRpbmZvaWwucHJlcGFyZShjb25maWdfb25seT1UcnVlKQorICAgICAgICAgICAgIyBUZXN0IHNldFZhckZsYWcoKSAvIGdldFZhckZsYWcoKQorICAgICAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YS5zZXRWYXJGbGFnKCdURVNUVkFSJywgJ2ZsYWduYW1lJywgJ2ZsYWd2YWwnKQorICAgICAgICAgICAgdmFsdWUgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhckZsYWcoJ1RFU1RWQVInLCAnZmxhZ25hbWUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgJ2ZsYWd2YWwnLCAnVmFsdWUgc2V0IHVzaW5nIGNvbmZpZ19kYXRhLnNldFZhckZsYWcoKSBpcyBub3QgcmVmbGVjdGVkIGluIGNvbmZpZ19kYXRhLmdldFZhckZsYWcoKScpCisgICAgICAgICAgICAjIFRlc3QgZGVsVmFyRmxhZygpCisgICAgICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhLnNldFZhckZsYWcoJ1RFU1RWQVInLCAnb3RoZXJmbGFnJywgJ290aGVydmFsdWUnKQorICAgICAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YS5kZWxWYXJGbGFnKCdURVNUVkFSJywgJ2ZsYWduYW1lJykKKyAgICAgICAgICAgIHZhbHVlID0gdGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXJGbGFnKCdURVNUVkFSJywgJ2ZsYWduYW1lJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsIE5vbmUsICdWYXJmbGFnIGRlbGV0ZWQgdXNpbmcgY29uZmlnX2RhdGEuZGVsVmFyRmxhZygpIGlzIG5vdCByZWZsZWN0ZWQgaW4gY29uZmlnX2RhdGEuZ2V0VmFyRmxhZygpJykKKyAgICAgICAgICAgIHZhbHVlID0gdGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXJGbGFnKCdURVNUVkFSJywgJ290aGVyZmxhZycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCAnb3RoZXJ2YWx1ZScsICdWYXJmbGFnIGRlbGV0ZWQgdXNpbmcgY29uZmlnX2RhdGEuZGVsVmFyRmxhZygpIGNhdXNlZCB1bnJlbGF0ZWQgZmxhZyB0byBiZSByZW1vdmVkJykKKyAgICAgICAgICAgICMgVGVzdCBkZWxWYXIoKQorICAgICAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YS5zZXRWYXIoJ1RFU1RWQVInLCAndmFydmFsdWUnKQorICAgICAgICAgICAgdmFsdWUgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignVEVTVFZBUicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCAndmFydmFsdWUnLCAnVmFsdWUgc2V0IHVzaW5nIGNvbmZpZ19kYXRhLnNldFZhcigpIGlzIG5vdCByZWZsZWN0ZWQgaW4gY29uZmlnX2RhdGEuZ2V0VmFyKCknKQorICAgICAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YS5kZWxWYXIoJ1RFU1RWQVInKQorICAgICAgICAgICAgdmFsdWUgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignVEVTVFZBUicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCBOb25lLCAnVmFyaWFibGUgZGVsZXRlZCB1c2luZyBjb25maWdfZGF0YS5kZWxWYXIoKSBhcHBlYXJzIHRvIHN0aWxsIGhhdmUgYSB2YWx1ZScpCisgICAgICAgICAgICAjIFRlc3QgcmVuYW1lVmFyKCkKKyAgICAgICAgICAgIHRpbmZvaWwuY29uZmlnX2RhdGEuc2V0VmFyKCdURVNUVkFST0xEJywgJ29yaWd2YWx1ZScpCisgICAgICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhLnJlbmFtZVZhcignVEVTVFZBUk9MRCcsICdURVNUVkFSTkVXJykKKyAgICAgICAgICAgIHZhbHVlID0gdGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ1RFU1RWQVJPTEQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgTm9uZSwgJ1ZhcmlhYmxlIHJlbmFtZWQgdXNpbmcgY29uZmlnX2RhdGEucmVuYW1lVmFyKCkgc3RpbGwgc2VlbXMgdG8gZXhpc3QnKQorICAgICAgICAgICAgdmFsdWUgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignVEVTVFZBUk5FVycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCAnb3JpZ3ZhbHVlJywgJ1ZhcmlhYmxlIHJlbmFtZWQgdXNpbmcgY29uZmlnX2RhdGEucmVuYW1lVmFyKCkgZG9lcyBub3QgYXBwZWFyIHdpdGggbmV3IG5hbWUnKQorICAgICAgICAgICAgIyBUZXN0IG92ZXJyaWRlcworICAgICAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YS5zZXRWYXIoJ1RFU1RWQVInLCAnb3JpZ2luYWwnKQorICAgICAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YS5zZXRWYXIoJ1RFU1RWQVJfb3ZlcnJpZGVvbmUnLCAnb25lJykKKyAgICAgICAgICAgIHRpbmZvaWwuY29uZmlnX2RhdGEuc2V0VmFyKCdURVNUVkFSX292ZXJyaWRldHdvJywgJ3R3bycpCisgICAgICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhLmFwcGVuZFZhcignT1ZFUlJJREVTJywgJzpvdmVycmlkZW9uZScpCisgICAgICAgICAgICB2YWx1ZSA9IHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdURVNUVkFSJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsICdvbmUnLCAnVmFyaWFibGUgb3ZlcnJpZGVzIG5vdCBmdW5jdGlvbmluZyBjb3JyZWN0bHknKQorCisgICAgZGVmIHRlc3RfdmFyaWFibGVfaGlzdG9yeShzZWxmKToKKyAgICAgICAgIyBCYXNpYyB0ZXN0IHRvIGVuc3VyZSB0aGF0IHZhcmlhYmxlIGhpc3Rvcnkgd29ya3Mgd2hlbiB0cmFja2luZz1UcnVlCisgICAgICAgIHdpdGggYmIudGluZm9pbC5UaW5mb2lsKHRyYWNraW5nPVRydWUpIGFzIHRpbmZvaWw6CisgICAgICAgICAgICB0aW5mb2lsLnByZXBhcmUoY29uZmlnX29ubHk9RmFsc2UsIHF1aWV0PTIpCisgICAgICAgICAgICAjIE5vdGUgdGhhdCBfdHJhY2tpbmcgZm9yIGFueSBkYXRhc3RvcmUgd2UgZ2V0IHdpbGwgYmUKKyAgICAgICAgICAgICMgZmFsc2UgaGVyZSwgdGhhdCdzIGN1cnJlbnRseSBleHBlY3RlZCAtIHNvIHdlIGNhbid0IGNoZWNrCisgICAgICAgICAgICAjIGZvciB0aGF0CisgICAgICAgICAgICBoaXN0b3J5ID0gdGluZm9pbC5jb25maWdfZGF0YS52YXJoaXN0b3J5LnZhcmlhYmxlKCdETF9ESVInKQorICAgICAgICAgICAgZm9yIGVudHJ5IGluIGhpc3Rvcnk6CisgICAgICAgICAgICAgICAgaWYgZW50cnlbJ2ZpbGUnXS5lbmRzd2l0aCgnL2JpdGJha2UuY29uZicpOgorICAgICAgICAgICAgICAgICAgICBpZiBlbnRyeVsnb3AnXSBpbiBbJ3NldCcsICdzZXQ/J106CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ0RpZCBub3QgZmluZCBoaXN0b3J5IGVudHJ5IHNldHRpbmcgRExfRElSIGluIGJpdGJha2UuY29uZi4gSGlzdG9yeTogJXMnICUgaGlzdG9yeSkKKyAgICAgICAgICAgICMgQ2hlY2sgaXQgd29ya3MgZm9yIHJlY2lwZXMgYXMgd2VsbAorICAgICAgICAgICAgdGVzdHJlY2lwZSA9ICd6bGliJworICAgICAgICAgICAgcmQgPSB0aW5mb2lsLnBhcnNlX3JlY2lwZSh0ZXN0cmVjaXBlKQorICAgICAgICAgICAgaGlzdG9yeSA9IHJkLnZhcmhpc3RvcnkudmFyaWFibGUoJ0xJQ0VOU0UnKQorICAgICAgICAgICAgYmJmb3VuZCA9IC0xCisgICAgICAgICAgICByZWNpcGVmb3VuZCA9IC0xCisgICAgICAgICAgICBmb3IgaSwgZW50cnkgaW4gZW51bWVyYXRlKGhpc3RvcnkpOgorICAgICAgICAgICAgICAgIGlmIGVudHJ5WydmaWxlJ10uZW5kc3dpdGgoJy9iaXRiYWtlLmNvbmYnKToKKyAgICAgICAgICAgICAgICAgICAgaWYgZW50cnlbJ2RldGFpbCddID09ICdJTlZBTElEJyBhbmQgZW50cnlbJ29wJ10gaW4gWydzZXQnLCAnc2V0PyddOgorICAgICAgICAgICAgICAgICAgICAgICAgYmJmb3VuZCA9IGkKKyAgICAgICAgICAgICAgICBlbGlmIGVudHJ5WydmaWxlJ10uZW5kc3dpdGgoJy5iYicpOgorICAgICAgICAgICAgICAgICAgICBpZiBlbnRyeVsnb3AnXSA9PSAnc2V0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZWZvdW5kID0gaQorICAgICAgICAgICAgaWYgYmJmb3VuZCA9PSAtMToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ0RpZCBub3QgZmluZCBoaXN0b3J5IGVudHJ5IHNldHRpbmcgTElDRU5TRSBpbiBiaXRiYWtlLmNvbmYgcGFyc2luZyAlcyByZWNpcGUuIEhpc3Rvcnk6ICVzJyAlICh0ZXN0cmVjaXBlLCBoaXN0b3J5KSkKKyAgICAgICAgICAgIGlmIHJlY2lwZWZvdW5kID09IC0xOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnRGlkIG5vdCBmaW5kIGhpc3RvcnkgZW50cnkgc2V0dGluZyBMSUNFTlNFIGluICVzIHJlY2lwZS4gSGlzdG9yeTogJXMnICUgKHRlc3RyZWNpcGUsIGhpc3RvcnkpKQorICAgICAgICAgICAgaWYgYmJmb3VuZCA+IHJlY2lwZWZvdW5kOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnSGlzdG9yeSBlbnRyeSBzZXR0aW5nIExJQ0VOU0UgaW4gJXMgcmVjaXBlIGFuZCBpbiBiaXRiYWtlLmNvbmYgaW4gd3Jvbmcgb3JkZXIuIEhpc3Rvcnk6ICVzJyAlICh0ZXN0cmVjaXBlLCBoaXN0b3J5KSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL3dpYy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Nhc2VzL3dpYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTFkNTc1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY2FzZXMvd2ljLnB5CkBAIC0wLDAgKzEsMTA2MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTUsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgQVVUSE9SUworIyBFZCBCYXJ0b3NoIDxlZC5iYXJ0b3NoQGxpbnV4LmludGVsLmNvbT4KKworIiIiVGVzdCBjYXNlcyBmb3Igd2ljLiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGdsb2IgaW1wb3J0IGdsb2IKK2Zyb20gc2h1dGlsIGltcG9ydCBybXRyZWUsIGNvcHkKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcywgbHJ1X2NhY2hlCitmcm9tIHRlbXBmaWxlIGltcG9ydCBOYW1lZFRlbXBvcmFyeUZpbGUKKworZnJvbSBvZXFhLnNlbGZ0ZXN0LmNhc2UgaW1wb3J0IE9FU2VsZnRlc3RUZXN0Q2FzZQorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIGdldF9iYl92YXJzLCBydW5xZW11Citmcm9tIG9lcWEuY29yZS5kZWNvcmF0b3Iub2VpZCBpbXBvcnQgT0VUZXN0SUQKKworCitAbHJ1X2NhY2hlKG1heHNpemU9MzIpCitkZWYgZ2V0X2hvc3RfYXJjaChyZWNpcGUpOgorICAgICIiIkEgY2FjaGVkIGNhbGwgdG8gZ2V0X2JiX3ZhcignSE9TVF9BUkNIJywgPHJlY2lwZT4pIiIiCisgICAgcmV0dXJuIGdldF9iYl92YXIoJ0hPU1RfQVJDSCcsIHJlY2lwZSkKKworCitkZWYgb25seV9mb3JfYXJjaChhcmNocywgaW1hZ2U9J2NvcmUtaW1hZ2UtbWluaW1hbCcpOgorICAgICIiIkRlY29yYXRvciBmb3Igd3JhcHBpbmcgdGVzdCBjYXNlcyB0aGF0IGNhbiBiZSBydW4gb25seSBmb3Igc3BlY2lmaWMgdGFyZ2V0CisgICAgYXJjaGl0ZWN0dXJlcy4gQSBsaXN0IG9mIGNvbXBhdGlibGUgYXJjaGl0ZWN0dXJlcyBpcyBwYXNzZWQgaW4gYGFyY2hzYC4KKyAgICBDdXJyZW50IGFyY2hpdGVjdHVyZSB3aWxsIGJlIGRldGVybWluZWQgYnkgcGFyc2luZyBiaXRiYWtlIG91dHB1dCBmb3IKKyAgICBgaW1hZ2VgIHJlY2lwZS4KKyAgICAiIiIKKyAgICBkZWYgd3JhcHBlcihmdW5jKToKKyAgICAgICAgQHdyYXBzKGZ1bmMpCisgICAgICAgIGRlZiB3cmFwcGVkX2YoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIGFyY2ggPSBnZXRfaG9zdF9hcmNoKGltYWdlKQorICAgICAgICAgICAgaWYgYXJjaHMgYW5kIGFyY2ggbm90IGluIGFyY2hzOgorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJUZXN0Y2FzZSBhcmNoIGRlcGVuZGVuY3kgbm90IG1ldDogJXMiICUgYXJjaCkKKyAgICAgICAgICAgIHJldHVybiBmdW5jKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgd3JhcHBlZF9mLl9fbmFtZV9fID0gZnVuYy5fX25hbWVfXworICAgICAgICByZXR1cm4gd3JhcHBlZF9mCisgICAgcmV0dXJuIHdyYXBwZXIKKworCitjbGFzcyBXaWMoT0VTZWxmdGVzdFRlc3RDYXNlKToKKyAgICAiIiJXaWMgdGVzdCBjbGFzcy4iIiIKKworICAgIHJlc3VsdGRpciA9ICIvdmFyL3RtcC93aWMub2Utc2VsZnRlc3QvIgorICAgIGltYWdlX2lzX3JlYWR5ID0gRmFsc2UKKyAgICBuYXRpdmVfc3lzcm9vdCA9IE5vbmUKKyAgICB3aWNlbnZfY2FjaGUgPSB7fQorCisgICAgZGVmIHNldFVwTG9jYWwoc2VsZik6CisgICAgICAgICIiIlRoaXMgY29kZSBpcyBleGVjdXRlZCBiZWZvcmUgZWFjaCB0ZXN0IG1ldGhvZC4iIiIKKyAgICAgICAgc3VwZXIoV2ljLCBzZWxmKS5zZXRVcExvY2FsKCkKKyAgICAgICAgaWYgbm90IHNlbGYubmF0aXZlX3N5c3Jvb3Q6CisgICAgICAgICAgICBXaWMubmF0aXZlX3N5c3Jvb3QgPSBnZXRfYmJfdmFyKCdTVEFHSU5HX0RJUl9OQVRJVkUnLCAnd2ljLXRvb2xzJykKKworICAgICAgICAjIERvIHRoaXMgaGVyZSBpbnN0ZWFkIG9mIGluIHNldFVwQ2xhc3MgYXMgdGhlIGJhc2Ugc2V0VXAgZG9lcyBzb21lCisgICAgICAgICMgY2xlYW4gdXAgd2hpY2ggY2FuIHJlc3VsdCBpbiB0aGUgbmF0aXZlIHRvb2xzIGJ1aWx0IGVhcmxpZXIgaW4KKyAgICAgICAgIyBzZXRVcENsYXNzIGJlaW5nIHVuYXZhaWxhYmxlLgorICAgICAgICBpZiBub3QgV2ljLmltYWdlX2lzX3JlYWR5OgorICAgICAgICAgICAgaWYgZ2V0X2JiX3ZhcignVVNFX05MUycpID09ICd5ZXMnOgorICAgICAgICAgICAgICAgIGJpdGJha2UoJ3dpYy10b29scycpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ3dpYy10b29scyBjYW5ub3QgYmUgYnVpbHQgZHVlIGl0cyAoaW50bHRvb2x8Z2V0dGV4dCktbmF0aXZlIGRlcGVuZGVuY3kgYW5kIE5MUyBkaXNhYmxlJykKKworICAgICAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS1taW5pbWFsJykKKyAgICAgICAgICAgIFdpYy5pbWFnZV9pc19yZWFkeSA9IFRydWUKKworICAgICAgICBybXRyZWUoc2VsZi5yZXN1bHRkaXIsIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKworICAgIGRlZiB0ZWFyRG93bkxvY2FsKHNlbGYpOgorICAgICAgICAiIiJSZW1vdmUgcmVzdWx0ZGlyIGFzIGl0IG1heSBjb250YWluIGltYWdlcy4iIiIKKyAgICAgICAgcm10cmVlKHNlbGYucmVzdWx0ZGlyLCBpZ25vcmVfZXJyb3JzPVRydWUpCisgICAgICAgIHN1cGVyKFdpYywgc2VsZikudGVhckRvd25Mb2NhbCgpCisKKyAgICBAT0VUZXN0SUQoMTU1MikKKyAgICBkZWYgdGVzdF92ZXJzaW9uKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdpYyAtLXZlcnNpb24iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoJ3dpYyAtLXZlcnNpb24nKS5zdGF0dXMpCisKKyAgICBAT0VUZXN0SUQoMTIwOCkKKyAgICBkZWYgdGVzdF9oZWxwKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdpYyAtLWhlbHAgYW5kIHdpYyAtaCIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgnd2ljIC0taGVscCcpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoJ3dpYyAtaCcpLnN0YXR1cykKKworICAgIEBPRVRlc3RJRCgxMjA5KQorICAgIGRlZiB0ZXN0X2NyZWF0ZWhlbHAoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2ljIGNyZWF0ZSAtLWhlbHAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoJ3dpYyBjcmVhdGUgLS1oZWxwJykuc3RhdHVzKQorCisgICAgQE9FVGVzdElEKDEyMTApCisgICAgZGVmIHRlc3RfbGlzdGhlbHAoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2ljIGxpc3QgLS1oZWxwIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgbGlzdCAtLWhlbHAnKS5zdGF0dXMpCisKKyAgICBAT0VUZXN0SUQoMTU1MykKKyAgICBkZWYgdGVzdF9oZWxwX2NyZWF0ZShzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgaGVscCBjcmVhdGUiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoJ3dpYyBoZWxwIGNyZWF0ZScpLnN0YXR1cykKKworICAgIEBPRVRlc3RJRCgxNTU0KQorICAgIGRlZiB0ZXN0X2hlbHBfbGlzdChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgaGVscCBsaXN0IiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgaGVscCBsaXN0Jykuc3RhdHVzKQorCisgICAgQE9FVGVzdElEKDEyMTUpCisgICAgZGVmIHRlc3RfaGVscF9vdmVydmlldyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgaGVscCBvdmVydmlldyIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgnd2ljIGhlbHAgb3ZlcnZpZXcnKS5zdGF0dXMpCisKKyAgICBAT0VUZXN0SUQoMTIxNikKKyAgICBkZWYgdGVzdF9oZWxwX3BsdWdpbnMoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2ljIGhlbHAgcGx1Z2lucyIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgnd2ljIGhlbHAgcGx1Z2lucycpLnN0YXR1cykKKworICAgIEBPRVRlc3RJRCgxMjE3KQorICAgIGRlZiB0ZXN0X2hlbHBfa2lja3N0YXJ0KHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdpYyBoZWxwIGtpY2tzdGFydCIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgnd2ljIGhlbHAga2lja3N0YXJ0Jykuc3RhdHVzKQorCisgICAgQE9FVGVzdElEKDE1NTUpCisgICAgZGVmIHRlc3RfbGlzdF9pbWFnZXMoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2ljIGxpc3QgaW1hZ2VzIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgbGlzdCBpbWFnZXMnKS5zdGF0dXMpCisKKyAgICBAT0VUZXN0SUQoMTU1NikKKyAgICBkZWYgdGVzdF9saXN0X3NvdXJjZV9wbHVnaW5zKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdpYyBsaXN0IHNvdXJjZS1wbHVnaW5zIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgbGlzdCBzb3VyY2UtcGx1Z2lucycpLnN0YXR1cykKKworICAgIEBPRVRlc3RJRCgxNTU3KQorICAgIGRlZiB0ZXN0X2xpc3RlZF9pbWFnZXNfaGVscChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgbGlzdGVkIGltYWdlcyBoZWxwIiIiCisgICAgICAgIG91dHB1dCA9IHJ1bkNtZCgnd2ljIGxpc3QgaW1hZ2VzJykub3V0cHV0CisgICAgICAgIGltYWdlbGlzdCA9IFtsaW5lLnNwbGl0KClbMF0gZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKV0KKyAgICAgICAgZm9yIGltYWdlIGluIGltYWdlbGlzdDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgbGlzdCAlcyBoZWxwJyAlIGltYWdlKS5zdGF0dXMpCisKKyAgICBAT0VUZXN0SUQoMTIxMykKKyAgICBkZWYgdGVzdF91bnN1cHBvcnRlZF9zdWJjb21tYW5kKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHVuc3VwcG9ydGVkIHN1YmNvbW1hbmQiIiIKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCgwLCBydW5DbWQoJ3dpYyB1bnN1cHBvcnRlZCcsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkuc3RhdHVzKQorCisgICAgQE9FVGVzdElEKDEyMTQpCisgICAgZGVmIHRlc3Rfbm9fY29tbWFuZChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgd2l0aG91dCBjb21tYW5kIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcnVuQ21kKCd3aWMnLCBpZ25vcmVfc3RhdHVzPVRydWUpLnN0YXR1cykKKworICAgIEBPRVRlc3RJRCgxMjExKQorICAgIGRlZiB0ZXN0X2J1aWxkX2ltYWdlX25hbWUoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2ljIGNyZWF0ZSB3aWN0ZXN0ZGlzayAtLWltYWdlLW5hbWU9Y29yZS1pbWFnZS1taW5pbWFsIiIiCisgICAgICAgIGNtZCA9ICJ3aWMgY3JlYXRlIHdpY3Rlc3RkaXNrIC0taW1hZ2UtbmFtZT1jb3JlLWltYWdlLW1pbmltYWwgLW8gJXMiICUgc2VsZi5yZXN1bHRkaXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoY21kKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAid2ljdGVzdGRpc2stKi5kaXJlY3QiKSkpCisKKyAgICBAT0VUZXN0SUQoMTE1NykKKyAgICBAb25seV9mb3JfYXJjaChbJ2k1ODYnLCAnaTY4NicsICd4ODZfNjQnXSkKKyAgICBkZWYgdGVzdF9ncHRfaW1hZ2Uoc2VsZik6CisgICAgICAgICIiIlRlc3QgY3JlYXRpb24gb2YgY29yZS1pbWFnZS1taW5pbWFsIHdpdGggZ3B0IHRhYmxlIGFuZCBVVUlEIGJvb3QiIiIKKyAgICAgICAgY21kID0gIndpYyBjcmVhdGUgZGlyZWN0ZGlzay1ncHQgLS1pbWFnZS1uYW1lIGNvcmUtaW1hZ2UtbWluaW1hbCAtbyAlcyIgJSBzZWxmLnJlc3VsdGRpcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZChjbWQpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJkaXJlY3RkaXNrLSouZGlyZWN0IikpKQorCisgICAgQE9FVGVzdElEKDEzNDYpCisgICAgQG9ubHlfZm9yX2FyY2goWydpNTg2JywgJ2k2ODYnLCAneDg2XzY0J10pCisgICAgZGVmIHRlc3RfaXNvX2ltYWdlKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGNyZWF0aW9uIG9mIGh5YnJpZCBpc28gaW1hZ2Ugd2l0aCBsZWdhY3kgYW5kIEVGSSBib290IiIiCisgICAgICAgIGNvbmZpZyA9ICdJTklUUkFNRlNfSU1BR0UgPSAiY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcyJcbidcCisgICAgICAgICAgICAgICAgICdNQUNISU5FX0ZFQVRVUkVTX2FwcGVuZCA9ICIgZWZpIlxuJ1wKKyAgICAgICAgICAgICAgICAgJ0RFUEVORFNfcG4tY29yZS1pbWFnZS1taW5pbWFsICs9ICJzeXNsaW51eCJcbicKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGNvbmZpZykKKyAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS1taW5pbWFsJykKKyAgICAgICAgc2VsZi5yZW1vdmVfY29uZmlnKGNvbmZpZykKKyAgICAgICAgY21kID0gIndpYyBjcmVhdGUgbWtoeWJyaWRpc28gLS1pbWFnZS1uYW1lIGNvcmUtaW1hZ2UtbWluaW1hbCAtbyAlcyIgJSBzZWxmLnJlc3VsdGRpcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZChjbWQpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJIWUJSSURfSVNPX0lNRy0qLmRpcmVjdCIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJIWUJSSURfSVNPX0lNRy0qLmlzbyIpKSkKKworICAgIEBPRVRlc3RJRCgxMzQ4KQorICAgIEBvbmx5X2Zvcl9hcmNoKFsnaTU4NicsICdpNjg2JywgJ3g4Nl82NCddKQorICAgIGRlZiB0ZXN0X3FlbXV4ODZfZGlyZWN0ZGlzayhzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjcmVhdGlvbiBvZiBxZW11eC04Ni1kaXJlY3RkaXNrIGltYWdlIiIiCisgICAgICAgIGNtZCA9ICJ3aWMgY3JlYXRlIHFlbXV4ODYtZGlyZWN0ZGlzayAtZSBjb3JlLWltYWdlLW1pbmltYWwgLW8gJXMiICUgc2VsZi5yZXN1bHRkaXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoY21kKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAicWVtdXg4Ni1kaXJlY3RkaXNrLSpkaXJlY3QiKSkpCisKKyAgICBAT0VUZXN0SUQoMTM1MCkKKyAgICBAb25seV9mb3JfYXJjaChbJ2k1ODYnLCAnaTY4NicsICd4ODZfNjQnXSkKKyAgICBkZWYgdGVzdF9ta2VmaWRpc2soc2VsZik6CisgICAgICAgICIiIlRlc3QgY3JlYXRpb24gb2YgbWtlZmlkaXNrIGltYWdlIiIiCisgICAgICAgIGNtZCA9ICJ3aWMgY3JlYXRlIG1rZWZpZGlzayAtZSBjb3JlLWltYWdlLW1pbmltYWwgLW8gJXMiICUgc2VsZi5yZXN1bHRkaXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoY21kKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAibWtlZmlkaXNrLSpkaXJlY3QiKSkpCisKKyAgICBAT0VUZXN0SUQoMTM4NSkKKyAgICBAb25seV9mb3JfYXJjaChbJ2k1ODYnLCAnaTY4NicsICd4ODZfNjQnXSkKKyAgICBkZWYgdGVzdF9ib290bG9hZGVyX2NvbmZpZyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjcmVhdGlvbiBvZiBkaXJlY3RkaXNrLWJvb3Rsb2FkZXItY29uZmlnIGltYWdlIiIiCisgICAgICAgIGNvbmZpZyA9ICdERVBFTkRTX3BuLWNvcmUtaW1hZ2UtbWluaW1hbCArPSAic3lzbGludXgiXG4nCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhjb25maWcpCisgICAgICAgIGJpdGJha2UoJ2NvcmUtaW1hZ2UtbWluaW1hbCcpCisgICAgICAgIHNlbGYucmVtb3ZlX2NvbmZpZyhjb25maWcpCisgICAgICAgIGNtZCA9ICJ3aWMgY3JlYXRlIGRpcmVjdGRpc2stYm9vdGxvYWRlci1jb25maWcgLWUgY29yZS1pbWFnZS1taW5pbWFsIC1vICVzIiAlIHNlbGYucmVzdWx0ZGlyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKGNtZCkuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgImRpcmVjdGRpc2stYm9vdGxvYWRlci1jb25maWctKmRpcmVjdCIpKSkKKworICAgIEBPRVRlc3RJRCgxNTYwKQorICAgIEBvbmx5X2Zvcl9hcmNoKFsnaTU4NicsICdpNjg2JywgJ3g4Nl82NCddKQorICAgIGRlZiB0ZXN0X3N5c3RlbWRfYm9vdGRpc2soc2VsZik6CisgICAgICAgICIiIlRlc3QgY3JlYXRpb24gb2Ygc3lzdGVtZC1ib290ZGlzayBpbWFnZSIiIgorICAgICAgICBjb25maWcgPSAnTUFDSElORV9GRUFUVVJFU19hcHBlbmQgPSAiIGVmaSJcbicKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGNvbmZpZykKKyAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS1taW5pbWFsJykKKyAgICAgICAgc2VsZi5yZW1vdmVfY29uZmlnKGNvbmZpZykKKyAgICAgICAgY21kID0gIndpYyBjcmVhdGUgc3lzdGVtZC1ib290ZGlzayAtZSBjb3JlLWltYWdlLW1pbmltYWwgLW8gJXMiICUgc2VsZi5yZXN1bHRkaXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoY21kKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAic3lzdGVtZC1ib290ZGlzay0qZGlyZWN0IikpKQorCisgICAgQE9FVGVzdElEKDE1NjEpCisgICAgZGVmIHRlc3Rfc2RpbWFnZV9ib290cGFydChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjcmVhdGlvbiBvZiBzZGltYWdlLWJvb3RwYXJ0IGltYWdlIiIiCisgICAgICAgIGNtZCA9ICJ3aWMgY3JlYXRlIHNkaW1hZ2UtYm9vdHBhcnQgLWUgY29yZS1pbWFnZS1taW5pbWFsIC1vICVzIiAlIHNlbGYucmVzdWx0ZGlyCisgICAgICAgIGtpbWd0eXBlID0gZ2V0X2JiX3ZhcignS0VSTkVMX0lNQUdFVFlQRScsICdjb3JlLWltYWdlLW1pbmltYWwnKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygnSU1BR0VfQk9PVF9GSUxFUyA9ICIlcyJcbicgJSBraW1ndHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoY21kKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAic2RpbWFnZS1ib290cGFydC0qZGlyZWN0IikpKQorCisgICAgQE9FVGVzdElEKDE1NjIpCisgICAgQG9ubHlfZm9yX2FyY2goWydpNTg2JywgJ2k2ODYnLCAneDg2XzY0J10pCisgICAgZGVmIHRlc3RfZGVmYXVsdF9vdXRwdXRfZGlyKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGRlZmF1bHQgb3V0cHV0IGxvY2F0aW9uIiIiCisgICAgICAgIGZvciBmbmFtZSBpbiBnbG9iKCJkaXJlY3RkaXNrLSouZGlyZWN0Iik6CisgICAgICAgICAgICBvcy5yZW1vdmUoZm5hbWUpCisgICAgICAgIGNvbmZpZyA9ICdERVBFTkRTX3BuLWNvcmUtaW1hZ2UtbWluaW1hbCArPSAic3lzbGludXgiXG4nCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhjb25maWcpCisgICAgICAgIGJpdGJha2UoJ2NvcmUtaW1hZ2UtbWluaW1hbCcpCisgICAgICAgIHNlbGYucmVtb3ZlX2NvbmZpZyhjb25maWcpCisgICAgICAgIGNtZCA9ICJ3aWMgY3JlYXRlIGRpcmVjdGRpc2sgLWUgY29yZS1pbWFnZS1taW5pbWFsIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZChjbWQpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYigiZGlyZWN0ZGlzay0qLmRpcmVjdCIpKSkKKworICAgIEBPRVRlc3RJRCgxMjEyKQorICAgIEBvbmx5X2Zvcl9hcmNoKFsnaTU4NicsICdpNjg2JywgJ3g4Nl82NCddKQorICAgIGRlZiB0ZXN0X2J1aWxkX2FydGlmYWN0cyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgY3JlYXRlIGRpcmVjdGRpc2sgcHJvdmlkaW5nIGFsbCBhcnRpZmFjdHMuIiIiCisgICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhbJ1NUQUdJTkdfREFUQURJUicsICdSRUNJUEVfU1lTUk9PVF9OQVRJVkUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWMtdG9vbHMnKQorICAgICAgICBiYl92YXJzLnVwZGF0ZShnZXRfYmJfdmFycyhbJ0RFUExPWV9ESVJfSU1BR0UnLCAnSU1BR0VfUk9PVEZTJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3JlLWltYWdlLW1pbmltYWwnKSkKKyAgICAgICAgYmJ2YXJzID0ge2tleS5sb3dlcigpOiB2YWx1ZSBmb3Iga2V5LCB2YWx1ZSBpbiBiYl92YXJzLml0ZW1zKCl9CisgICAgICAgIGJidmFyc1sncmVzdWx0ZGlyJ10gPSBzZWxmLnJlc3VsdGRpcgorICAgICAgICBzdGF0dXMgPSBydW5DbWQoIndpYyBjcmVhdGUgZGlyZWN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLWIgJShzdGFnaW5nX2RhdGFkaXIpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLWsgJShkZXBsb3lfZGlyX2ltYWdlKXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgIi1uICUocmVjaXBlX3N5c3Jvb3RfbmF0aXZlKXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgIi1yICUoaW1hZ2Vfcm9vdGZzKXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgIi1vICUocmVzdWx0ZGlyKXMiICUgYmJ2YXJzKS5zdGF0dXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiZGlyZWN0ZGlzay0qLmRpcmVjdCIpKSkKKworICAgIEBPRVRlc3RJRCgxMjY0KQorICAgIGRlZiB0ZXN0X2NvbXByZXNzX2d6aXAoc2VsZik6CisgICAgICAgICIiIlRlc3QgY29tcHJlc3NpbmcgYW4gaW1hZ2Ugd2l0aCBnemlwIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlIHdpY3Rlc3RkaXNrICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZSBjb3JlLWltYWdlLW1pbmltYWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMgZ3ppcCAtbyAlcyIgJSBzZWxmLnJlc3VsdGRpcikuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIndpY3Rlc3RkaXNrLSouZGlyZWN0Lmd6IikpKQorCisgICAgQE9FVGVzdElEKDEyNjUpCisgICAgZGVmIHRlc3RfY29tcHJlc3NfYnppcDIoc2VsZik6CisgICAgICAgICIiIlRlc3QgY29tcHJlc3NpbmcgYW4gaW1hZ2Ugd2l0aCBiemlwMiIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSB3aWN0ZXN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWU9Y29yZS1pbWFnZS1taW5pbWFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jIGJ6aXAyIC1vICVzIiAlIHNlbGYucmVzdWx0ZGlyKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAid2ljdGVzdGRpc2stKi5kaXJlY3QuYnoyIikpKQorCisgICAgQE9FVGVzdElEKDEyNjYpCisgICAgZGVmIHRlc3RfY29tcHJlc3NfeHooc2VsZik6CisgICAgICAgICIiIlRlc3QgY29tcHJlc3NpbmcgYW4gaW1hZ2Ugd2l0aCB4eiIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSB3aWN0ZXN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWU9Y29yZS1pbWFnZS1taW5pbWFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tY29tcHJlc3Mtd2l0aD14eiAtbyAlcyIgJSBzZWxmLnJlc3VsdGRpcikuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIndpY3Rlc3RkaXNrLSouZGlyZWN0Lnh6IikpKQorCisgICAgQE9FVGVzdElEKDEyNjcpCisgICAgZGVmIHRlc3Rfd3JvbmdfY29tcHJlc3NvcihzZWxmKToKKyAgICAgICAgIiIiVGVzdCBob3cgd2ljIGJyZWFrcyBpZiB3cm9uZyBjb21wcmVzc29yIGlzIHByb3ZpZGVkIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgcnVuQ21kKCJ3aWMgY3JlYXRlIHdpY3Rlc3RkaXNrICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZT1jb3JlLWltYWdlLW1pbmltYWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMgd3JvbmcgLW8gJXMiICUgc2VsZi5yZXN1bHRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZV9zdGF0dXM9VHJ1ZSkuc3RhdHVzKQorCisgICAgQE9FVGVzdElEKDE1NTgpCisgICAgZGVmIHRlc3RfZGVidWdfc2hvcnQoc2VsZik6CisgICAgICAgICIiIlRlc3QgLUQgb3B0aW9uIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlIHdpY3Rlc3RkaXNrICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZT1jb3JlLWltYWdlLW1pbmltYWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLUQgLW8gJXMiICUgc2VsZi5yZXN1bHRkaXIpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJ3aWN0ZXN0ZGlzay0qLmRpcmVjdCIpKSkKKworICAgIEBPRVRlc3RJRCgxNjU4KQorICAgIGRlZiB0ZXN0X2RlYnVnX2xvbmcoc2VsZik6CisgICAgICAgICIiIlRlc3QgLS1kZWJ1ZyBvcHRpb24iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgd2ljdGVzdGRpc2sgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1pbWFnZS1uYW1lPWNvcmUtaW1hZ2UtbWluaW1hbCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWRlYnVnIC1vICVzIiAlIHNlbGYucmVzdWx0ZGlyKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAid2ljdGVzdGRpc2stKi5kaXJlY3QiKSkpCisKKyAgICBAT0VUZXN0SUQoMTU2MykKKyAgICBkZWYgdGVzdF9za2lwX2J1aWxkX2NoZWNrX3Nob3J0KHNlbGYpOgorICAgICAgICAiIiJUZXN0IC1zIG9wdGlvbiIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSB3aWN0ZXN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWU9Y29yZS1pbWFnZS1taW5pbWFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1zIC1vICVzIiAlIHNlbGYucmVzdWx0ZGlyKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAid2ljdGVzdGRpc2stKi5kaXJlY3QiKSkpCisKKyAgICBAT0VUZXN0SUQoMTY3MSkKKyAgICBkZWYgdGVzdF9za2lwX2J1aWxkX2NoZWNrX2xvbmcoc2VsZik6CisgICAgICAgICIiIlRlc3QgLS1za2lwLWJ1aWxkLWNoZWNrIG9wdGlvbiIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSB3aWN0ZXN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWU9Y29yZS1pbWFnZS1taW5pbWFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tc2tpcC1idWlsZC1jaGVjayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLW91dGRpciAlcyIgJSBzZWxmLnJlc3VsdGRpcikuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIndpY3Rlc3RkaXNrLSouZGlyZWN0IikpKQorCisgICAgQE9FVGVzdElEKDE1NjQpCisgICAgZGVmIHRlc3RfYnVpbGRfcm9vdGZzX3Nob3J0KHNlbGYpOgorICAgICAgICAiIiJUZXN0IC1mIG9wdGlvbiIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSB3aWN0ZXN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWU9Y29yZS1pbWFnZS1taW5pbWFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1mIC1vICVzIiAlIHNlbGYucmVzdWx0ZGlyKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAid2ljdGVzdGRpc2stKi5kaXJlY3QiKSkpCisKKyAgICBAT0VUZXN0SUQoMTY1NikKKyAgICBkZWYgdGVzdF9idWlsZF9yb290ZnNfbG9uZyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCAtLWJ1aWxkLXJvb3RmcyBvcHRpb24iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgd2ljdGVzdGRpc2sgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1pbWFnZS1uYW1lPWNvcmUtaW1hZ2UtbWluaW1hbCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWJ1aWxkLXJvb3RmcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLW91dGRpciAlcyIgJSBzZWxmLnJlc3VsdGRpcikuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIndpY3Rlc3RkaXNrLSouZGlyZWN0IikpKQorCisgICAgQE9FVGVzdElEKDEyNjgpCisgICAgQG9ubHlfZm9yX2FyY2goWydpNTg2JywgJ2k2ODYnLCAneDg2XzY0J10pCisgICAgZGVmIHRlc3Rfcm9vdGZzX2luZGlyZWN0X3JlY2lwZXMoc2VsZik6CisgICAgICAgICIiIlRlc3QgdXNhZ2Ugb2Ygcm9vdGZzIHBsdWdpbiB3aXRoIHJvb3RmcyByZWNpcGVzIiIiCisgICAgICAgIHN0YXR1cyA9IHJ1bkNtZCgid2ljIGNyZWF0ZSBkaXJlY3RkaXNrLW11bHRpLXJvb3RmcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLS1pbWFnZS1uYW1lPWNvcmUtaW1hZ2UtbWluaW1hbCAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLS1yb290ZnMgcm9vdGZzMT1jb3JlLWltYWdlLW1pbmltYWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgIi0tcm9vdGZzIHJvb3RmczI9Y29yZS1pbWFnZS1taW5pbWFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICItLW91dGRpciAlcyIgJSBzZWxmLnJlc3VsdGRpcikuc3RhdHVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgImRpcmVjdGRpc2stbXVsdGktcm9vdGZzKi5kaXJlY3QiKSkpCisKKyAgICBAT0VUZXN0SUQoMTI2OSkKKyAgICBAb25seV9mb3JfYXJjaChbJ2k1ODYnLCAnaTY4NicsICd4ODZfNjQnXSkKKyAgICBkZWYgdGVzdF9yb290ZnNfYXJ0aWZhY3RzKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHVzYWdlIG9mIHJvb3RmcyBwbHVnaW4gd2l0aCByb290ZnMgcGF0aHMiIiIKKyAgICAgICAgYmJfdmFycyA9IGdldF9iYl92YXJzKFsnU1RBR0lOR19EQVRBRElSJywgJ1JFQ0lQRV9TWVNST09UX05BVElWRSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpYy10b29scycpCisgICAgICAgIGJiX3ZhcnMudXBkYXRlKGdldF9iYl92YXJzKFsnREVQTE9ZX0RJUl9JTUFHRScsICdJTUFHRV9ST09URlMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvcmUtaW1hZ2UtbWluaW1hbCcpKQorICAgICAgICBiYnZhcnMgPSB7a2V5Lmxvd2VyKCk6IHZhbHVlIGZvciBrZXksIHZhbHVlIGluIGJiX3ZhcnMuaXRlbXMoKX0KKyAgICAgICAgYmJ2YXJzWyd3a3MnXSA9ICJkaXJlY3RkaXNrLW11bHRpLXJvb3RmcyIKKyAgICAgICAgYmJ2YXJzWydyZXN1bHRkaXInXSA9IHNlbGYucmVzdWx0ZGlyCisgICAgICAgIHN0YXR1cyA9IHJ1bkNtZCgid2ljIGNyZWF0ZSAlKHdrcylzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICItLWJvb3RpbWctZGlyPSUoc3RhZ2luZ19kYXRhZGlyKXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgIi0ta2VybmVsLWRpcj0lKGRlcGxveV9kaXJfaW1hZ2UpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLS1uYXRpdmUtc3lzcm9vdD0lKHJlY2lwZV9zeXNyb290X25hdGl2ZSlzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICItLXJvb3Rmcy1kaXIgcm9vdGZzMT0lKGltYWdlX3Jvb3RmcylzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICItLXJvb3Rmcy1kaXIgcm9vdGZzMj0lKGltYWdlX3Jvb3RmcylzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICItLW91dGRpciAlKHJlc3VsdGRpcilzIiAlIGJidmFycykuc3RhdHVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIiUod2tzKXMtKi5kaXJlY3QiICUgYmJ2YXJzKSkpCisKKyAgICBAT0VUZXN0SUQoMTY2MSkKKyAgICBkZWYgdGVzdF9leGNsdWRlX3BhdGgoc2VsZik6CisgICAgICAgICIiIlRlc3QgLS1leGNsdWRlLXBhdGggd2tzIG9wdGlvbi4iIiIKKworICAgICAgICBvbGRwYXRoID0gb3MuZW52aXJvblsnUEFUSCddCisgICAgICAgIG9zLmVudmlyb25bJ1BBVEgnXSA9IGdldF9iYl92YXIoIlBBVEgiLCAid2ljLXRvb2xzIikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB3a3NfZmlsZSA9ICd0ZW1wLndrcycKKyAgICAgICAgICAgIHdpdGggb3Blbih3a3NfZmlsZSwgJ3cnKSBhcyB3a3M6CisgICAgICAgICAgICAgICAgcm9vdGZzX2RpciA9IGdldF9iYl92YXIoJ0lNQUdFX1JPT1RGUycsICdjb3JlLWltYWdlLW1pbmltYWwnKQorICAgICAgICAgICAgICAgIHdrcy53cml0ZSgiIiIKK3BhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgbW1jYmxrMCAtLWZzdHlwZT1leHQ0IC0tZXhjbHVkZS1wYXRoIHVzcgorcGFydCAvdXNyIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBtbWNibGswIC0tZnN0eXBlPWV4dDQgLS1yb290ZnMtZGlyICVzL3VzcgorcGFydCAvZXRjIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBtbWNibGswIC0tZnN0eXBlPWV4dDQgLS1leGNsdWRlLXBhdGggYmluLyAtLXJvb3Rmcy1kaXIgJXMvdXNyIiIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHJvb3Rmc19kaXIsIHJvb3Rmc19kaXIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgJXMgLWUgY29yZS1pbWFnZS1taW5pbWFsIC1vICVzIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICh3a3NfZmlsZSwgc2VsZi5yZXN1bHRkaXIpKS5zdGF0dXMpCisKKyAgICAgICAgICAgIG9zLnJlbW92ZSh3a3NfZmlsZSkKKyAgICAgICAgICAgIHdpY291dCA9IGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiJXMtKmRpcmVjdCIgJSAndGVtcCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbih3aWNvdXQpKQorCisgICAgICAgICAgICB3aWNpbWcgPSB3aWNvdXRbMF0KKworICAgICAgICAgICAgIyB2ZXJpZnkgcGFydGl0aW9uIHNpemUgd2l0aCB3aWMKKyAgICAgICAgICAgIHJlcyA9IHJ1bkNtZCgicGFydGVkIC1tICVzIHVuaXQgYiBwIDI+L2Rldi9udWxsIiAlIHdpY2ltZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzLnN0YXR1cykKKworICAgICAgICAgICAgIyBwYXJzZSBwYXJ0ZWQgb3V0cHV0IHdoaWNoIGxvb2tzIGxpa2UgdGhpczoKKyAgICAgICAgICAgICMgQllUO1xuCisgICAgICAgICAgICAjIC92YXIvdG1wL3dpYy9idWlsZC90bXBmd3ZqamtmXy0yMDE2MTExMDEyMjItaGRhLmRpcmVjdDoyMDBNaUI6ZmlsZTo1MTI6NTEyOm1zZG9zOjo7XG4KKyAgICAgICAgICAgICMgMTowLjAwTWlCOjIwME1pQjoyMDBNaUI6ZXh0NDo6O1xuCisgICAgICAgICAgICBwYXJ0bG5zID0gcmVzLm91dHB1dC5zcGxpdGxpbmVzKClbMjpdCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgbGVuKHBhcnRsbnMpKQorCisgICAgICAgICAgICBmb3IgcGFydCBpbiBbMSwgMiwgM106CisgICAgICAgICAgICAgICAgcGFydF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYucmVzdWx0ZGlyLCAic2VsZnRlc3RfaW1nLnBhcnQlZCIgJSBwYXJ0KQorICAgICAgICAgICAgICAgIHBhcnRsbiA9IHBhcnRsbnNbcGFydC0xXS5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg3LCBsZW4ocGFydGxuKSkKKyAgICAgICAgICAgICAgICBzdGFydCA9IGludChwYXJ0bG5bMV0ucnN0cmlwKCJCIikpIC8gNTEyCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gaW50KHBhcnRsblszXS5yc3RyaXAoIkIiKSkgLyA1MTIKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgiZGQgaWY9JXMgb2Y9JXMgc2tpcD0lZCBjb3VudD0lZCIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3aWNpbWcsIHBhcnRfZmlsZSwgc3RhcnQsIGxlbmd0aCkpLnN0YXR1cykKKworICAgICAgICAgICAgZGVmIGV4dHJhY3RfZmlsZXMoZGVidWdmc19vdXRwdXQpOgorICAgICAgICAgICAgICAgICIiIgorICAgICAgICAgICAgICAgIGV4dHJhY3QgZmlsZSBuYW1lcyBmcm9tIHRoZSBvdXRwdXQgb2YgZGVidWdmcyAtUiAnbHMgLXAnLAorICAgICAgICAgICAgICAgIHdoaWNoIGxvb2tzIGxpa2UgdGhpczoKKworICAgICAgICAgICAgICAgICAvMi8wNDA3NTUvMC8wLy4vL1xuCisgICAgICAgICAgICAgICAgIC8yLzA0MDc1NS8wLzAvLi4vL1xuCisgICAgICAgICAgICAgICAgIC8xMS8wNDA3MDAvMC8wL2xvc3QrZm91bmReTS8vXG4KKyAgICAgICAgICAgICAgICAgLzEyLzA0MDc1NS8xMDAyLzEwMDIvcnVuLy9cbgorICAgICAgICAgICAgICAgICAvMTMvMDQwNzU1LzEwMDIvMTAwMi9zeXMvL1xuCisgICAgICAgICAgICAgICAgIC8xNC8wNDA3NTUvMTAwMi8xMDAyL2Jpbi8vXG4KKyAgICAgICAgICAgICAgICAgLzgwLzA0MDc1NS8xMDAyLzEwMDIvdmFyLy9cbgorICAgICAgICAgICAgICAgICAvOTIvMDQwNzU1LzEwMDIvMTAwMi90bXAvL1xuCisgICAgICAgICAgICAgICAgIiIiCisgICAgICAgICAgICAgICAgIyBOT1RFIHRoZSBvY2Nhc2lvbmFsIF5NIGluIGZpbGUgbmFtZXMKKyAgICAgICAgICAgICAgICByZXR1cm4gW2xpbmUuc3BsaXQoJy8nKVs1XS5zdHJpcCgpIGZvciBsaW5lIGluIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnZnNfb3V0cHV0LnN0cmlwKCkuc3BsaXQoJy9cbicpXQorCisgICAgICAgICAgICAjIFRlc3QgcGFydGl0aW9uIDEsIHNob3VsZCBjb250YWluIHRoZSBub3JtYWwgcm9vdCBkaXJlY3RvcmllcywgZXhjZXB0CisgICAgICAgICAgICAjIC91c3IuCisgICAgICAgICAgICByZXMgPSBydW5DbWQoImRlYnVnZnMgLVIgJ2xzIC1wJyAlcyAyPi9kZXYvbnVsbCIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLnJlc3VsdGRpciwgInNlbGZ0ZXN0X2ltZy5wYXJ0MSIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCByZXMuc3RhdHVzKQorICAgICAgICAgICAgZmlsZXMgPSBleHRyYWN0X2ZpbGVzKHJlcy5vdXRwdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJldGMiLCBmaWxlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oInVzciIsIGZpbGVzKQorCisgICAgICAgICAgICAjIFBhcnRpdGlvbiAyLCBzaG91bGQgY29udGFpbiBjb21tb24gZGlyZWN0b3JpZXMgZm9yIC91c3IsIG5vdCByb290CisgICAgICAgICAgICAjIGRpcmVjdG9yaWVzLgorICAgICAgICAgICAgcmVzID0gcnVuQ21kKCJkZWJ1Z2ZzIC1SICdscyAtcCcgJXMgMj4vZGV2L251bGwiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5yZXN1bHRkaXIsICJzZWxmdGVzdF9pbWcucGFydDIiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzLnN0YXR1cykKKyAgICAgICAgICAgIGZpbGVzID0gZXh0cmFjdF9maWxlcyhyZXMub3V0cHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiZXRjIiwgZmlsZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJ1c3IiLCBmaWxlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInNoYXJlIiwgZmlsZXMpCisKKyAgICAgICAgICAgICMgUGFydGl0aW9uIDMsIHNob3VsZCBjb250YWluIHRoZSBzYW1lIGFzIHBhcnRpdGlvbiAyLCBpbmNsdWRpbmcgdGhlIGJpbgorICAgICAgICAgICAgIyBkaXJlY3RvcnksIGJ1dCBub3QgdGhlIGZpbGVzIGluc2lkZSBpdC4KKyAgICAgICAgICAgIHJlcyA9IHJ1bkNtZCgiZGVidWdmcyAtUiAnbHMgLXAnICVzIDI+L2Rldi9udWxsIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYucmVzdWx0ZGlyLCAic2VsZnRlc3RfaW1nLnBhcnQzIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJlcy5zdGF0dXMpCisgICAgICAgICAgICBmaWxlcyA9IGV4dHJhY3RfZmlsZXMocmVzLm91dHB1dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oImV0YyIsIGZpbGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigidXNyIiwgZmlsZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJzaGFyZSIsIGZpbGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiYmluIiwgZmlsZXMpCisgICAgICAgICAgICByZXMgPSBydW5DbWQoImRlYnVnZnMgLVIgJ2xzIC1wIGJpbicgJXMgMj4vZGV2L251bGwiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5yZXN1bHRkaXIsICJzZWxmdGVzdF9pbWcucGFydDMiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzLnN0YXR1cykKKyAgICAgICAgICAgIGZpbGVzID0gZXh0cmFjdF9maWxlcyhyZXMub3V0cHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiLiIsIGZpbGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiLi4iLCBmaWxlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbGVuKGZpbGVzKSkKKworICAgICAgICAgICAgZm9yIHBhcnQgaW4gWzEsIDIsIDNdOgorICAgICAgICAgICAgICAgIHBhcnRfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnJlc3VsdGRpciwgInNlbGZ0ZXN0X2ltZy5wYXJ0JWQiICUgcGFydCkKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUocGFydF9maWxlKQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5lbnZpcm9uWydQQVRIJ10gPSBvbGRwYXRoCisKKyAgICBAT0VUZXN0SUQoMTY2MikKKyAgICBkZWYgdGVzdF9leGNsdWRlX3BhdGhfZXJyb3JzKHNlbGYpOgorICAgICAgICAiIiJUZXN0IC0tZXhjbHVkZS1wYXRoIHdrcyBvcHRpb24gZXJyb3IgaGFuZGxpbmcuIiIiCisgICAgICAgIHdrc19maWxlID0gJ3RlbXAud2tzJworCisgICAgICAgICMgQWJzb2x1dGUgYXJndW1lbnQuCisgICAgICAgIHdpdGggb3Blbih3a3NfZmlsZSwgJ3cnKSBhcyB3a3M6CisgICAgICAgICAgICB3a3Mud3JpdGUoInBhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgbW1jYmxrMCAtLWZzdHlwZT1leHQ0IC0tZXhjbHVkZS1wYXRoIC91c3IiKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSAlcyAtZSBjb3JlLWltYWdlLW1pbmltYWwgLW8gJXMiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAod2tzX2ZpbGUsIHNlbGYucmVzdWx0ZGlyKSwgaWdub3JlX3N0YXR1cz1UcnVlKS5zdGF0dXMpCisgICAgICAgIG9zLnJlbW92ZSh3a3NfZmlsZSkKKworICAgICAgICAjIEFyZ3VtZW50IHBvaW50aW5nIHRvIHBhcmVudCBkaXJlY3RvcnkuCisgICAgICAgIHdpdGggb3Blbih3a3NfZmlsZSwgJ3cnKSBhcyB3a3M6CisgICAgICAgICAgICB3a3Mud3JpdGUoInBhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgbW1jYmxrMCAtLWZzdHlwZT1leHQ0IC0tZXhjbHVkZS1wYXRoIC4vLi8uLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlICVzIC1lIGNvcmUtaW1hZ2UtbWluaW1hbCAtbyAlcyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICh3a3NfZmlsZSwgc2VsZi5yZXN1bHRkaXIpLCBpZ25vcmVfc3RhdHVzPVRydWUpLnN0YXR1cykKKyAgICAgICAgb3MucmVtb3ZlKHdrc19maWxlKQorCisgICAgQE9FVGVzdElEKDE0OTYpCisgICAgZGVmIHRlc3RfYm1hcF9zaG9ydChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBnZW5lcmF0aW9uIG9mIC5ibWFwIGZpbGUgLW0gb3B0aW9uIiIiCisgICAgICAgIGNtZCA9ICJ3aWMgY3JlYXRlIHdpY3Rlc3RkaXNrIC1lIGNvcmUtaW1hZ2UtbWluaW1hbCAtbSAtbyAlcyIgJSBzZWxmLnJlc3VsdGRpcgorICAgICAgICBzdGF0dXMgPSBydW5DbWQoY21kKS5zdGF0dXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAid2ljdGVzdGRpc2stKmRpcmVjdCIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJ3aWN0ZXN0ZGlzay0qZGlyZWN0LmJtYXAiKSkpCisKKyAgICBAT0VUZXN0SUQoMTY1NSkKKyAgICBkZWYgdGVzdF9ibWFwX2xvbmcoc2VsZik6CisgICAgICAgICIiIlRlc3QgZ2VuZXJhdGlvbiBvZiAuYm1hcCBmaWxlIC0tYm1hcCBvcHRpb24iIiIKKyAgICAgICAgY21kID0gIndpYyBjcmVhdGUgd2ljdGVzdGRpc2sgLWUgY29yZS1pbWFnZS1taW5pbWFsIC0tYm1hcCAtbyAlcyIgJSBzZWxmLnJlc3VsdGRpcgorICAgICAgICBzdGF0dXMgPSBydW5DbWQoY21kKS5zdGF0dXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAid2ljdGVzdGRpc2stKmRpcmVjdCIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJ3aWN0ZXN0ZGlzay0qZGlyZWN0LmJtYXAiKSkpCisKKyAgICBkZWYgX2dldF9pbWFnZV9lbnZfcGF0aChzZWxmLCBpbWFnZSk6CisgICAgICAgICIiIkdlbmVyYXRlIGFuZCBvYnRhaW4gdGhlIHBhdGggdG8gPGltYWdlPi5lbnYiIiIKKyAgICAgICAgaWYgaW1hZ2Ugbm90IGluIHNlbGYud2ljZW52X2NhY2hlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBiaXRiYWtlKCclcyAtYyBkb19yb290ZnNfd2ljZW52JyAlIGltYWdlKS5zdGF0dXMpCisgICAgICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWydTVEFHSU5HX0RJUicsICdNQUNISU5FJ10sIGltYWdlKQorICAgICAgICAgICAgc3RkaXIgPSBiYl92YXJzWydTVEFHSU5HX0RJUiddCisgICAgICAgICAgICBtYWNoaW5lID0gYmJfdmFyc1snTUFDSElORSddCisgICAgICAgICAgICBzZWxmLndpY2Vudl9jYWNoZVtpbWFnZV0gPSBvcy5wYXRoLmpvaW4oc3RkaXIsIG1hY2hpbmUsICdpbWdkYXRhJykKKyAgICAgICAgcmV0dXJuIHNlbGYud2ljZW52X2NhY2hlW2ltYWdlXQorCisgICAgQE9FVGVzdElEKDEzNDcpCisgICAgZGVmIHRlc3RfaW1hZ2VfZW52KHNlbGYpOgorICAgICAgICAiIiJUZXN0IGdlbmVyYXRpb24gb2YgPGltYWdlPi5lbnYgZmlsZXMuIiIiCisgICAgICAgIGltYWdlID0gJ2NvcmUtaW1hZ2UtbWluaW1hbCcKKyAgICAgICAgaW1nZGF0YWRpciA9IHNlbGYuX2dldF9pbWFnZV9lbnZfcGF0aChpbWFnZSkKKworICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWydJTUFHRV9CQVNFTkFNRScsICdXSUNWQVJTJ10sIGltYWdlKQorICAgICAgICBiYXNlbmFtZSA9IGJiX3ZhcnNbJ0lNQUdFX0JBU0VOQU1FJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlbmFtZSwgaW1hZ2UpCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oaW1nZGF0YWRpciwgYmFzZW5hbWUpICsgJy5lbnYnCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShwYXRoKSkKKworICAgICAgICB3aWN2YXJzID0gc2V0KGJiX3ZhcnNbJ1dJQ1ZBUlMnXS5zcGxpdCgpKQorICAgICAgICAjIGZpbHRlciBvdXQgb3B0aW9uYWwgdmFyaWFibGVzCisgICAgICAgIHdpY3ZhcnMgPSB3aWN2YXJzLmRpZmZlcmVuY2UoKCdERVBMT1lfRElSX0lNQUdFJywgJ0lNQUdFX0JPT1RfRklMRVMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSU5JVFJEJywgJ0lOSVRSRF9MSVZFJywgJ0lTT0RJUicpKQorICAgICAgICB3aXRoIG9wZW4ocGF0aCkgYXMgZW52ZmlsZToKKyAgICAgICAgICAgIGNvbnRlbnQgPSBkaWN0KGxpbmUuc3BsaXQoIj0iLCAxKSBmb3IgbGluZSBpbiBlbnZmaWxlKQorICAgICAgICAgICAgIyB0ZXN0IGlmIHZhcmlhYmxlcyB1c2VkIGJ5IHdpYyBwcmVzZW50IGluIHRoZSAuZW52IGZpbGUKKyAgICAgICAgICAgIGZvciB2YXIgaW4gd2ljdmFyczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodmFyIGluIGNvbnRlbnQsICIlcyBpcyBub3QgaW4gLmVudiBmaWxlIiAlIHZhcikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29udGVudFt2YXJdKQorCisgICAgQE9FVGVzdElEKDE1NTkpCisgICAgZGVmIHRlc3RfaW1hZ2VfdmFyc19kaXJfc2hvcnQoc2VsZik6CisgICAgICAgICIiIlRlc3QgaW1hZ2UgdmFycyBkaXJlY3Rvcnkgc2VsZWN0aW9uIC12IG9wdGlvbiIiIgorICAgICAgICBpbWFnZSA9ICdjb3JlLWltYWdlLW1pbmltYWwnCisgICAgICAgIGltZ2VudmRpciA9IHNlbGYuX2dldF9pbWFnZV9lbnZfcGF0aChpbWFnZSkKKyAgICAgICAgbmF0aXZlX3N5c3Jvb3QgPSBnZXRfYmJfdmFyKCJSRUNJUEVfU1lTUk9PVF9OQVRJVkUiLCAid2ljLXRvb2xzIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSB3aWN0ZXN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWU9JXMgLXYgJXMgLW4gJXMgLW8gJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGltYWdlLCBpbWdlbnZkaXIsIG5hdGl2ZV9zeXNyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdGRpcikpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJ3aWN0ZXN0ZGlzay0qZGlyZWN0IikpKQorCisgICAgQE9FVGVzdElEKDE2NjUpCisgICAgZGVmIHRlc3RfaW1hZ2VfdmFyc19kaXJfbG9uZyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCBpbWFnZSB2YXJzIGRpcmVjdG9yeSBzZWxlY3Rpb24gLS12YXJzIG9wdGlvbiIiIgorICAgICAgICBpbWFnZSA9ICdjb3JlLWltYWdlLW1pbmltYWwnCisgICAgICAgIGltZ2VudmRpciA9IHNlbGYuX2dldF9pbWFnZV9lbnZfcGF0aChpbWFnZSkKKyAgICAgICAgbmF0aXZlX3N5c3Jvb3QgPSBnZXRfYmJfdmFyKCJSRUNJUEVfU1lTUk9PVF9OQVRJVkUiLCAid2ljLXRvb2xzIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSB3aWN0ZXN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWU9JXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS12YXJzICVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tbmF0aXZlLXN5c3Jvb3QgJXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1vdXRkaXIgJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGltYWdlLCBpbWdlbnZkaXIsIG5hdGl2ZV9zeXNyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdGRpcikpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJ3aWN0ZXN0ZGlzay0qZGlyZWN0IikpKQorCisgICAgQE9FVGVzdElEKDEzNTEpCisgICAgQG9ubHlfZm9yX2FyY2goWydpNTg2JywgJ2k2ODYnLCAneDg2XzY0J10pCisgICAgZGVmIHRlc3Rfd2ljX2ltYWdlX3R5cGUoc2VsZik6CisgICAgICAgICIiIlRlc3QgYnVpbGRpbmcgd2ljIGltYWdlcyBieSBiaXRiYWtlIiIiCisgICAgICAgIGNvbmZpZyA9ICdJTUFHRV9GU1RZUEVTICs9ICJ3aWMiXG5XS1NfRklMRSA9ICJ3aWMtaW1hZ2UtbWluaW1hbCJcbidcCisgICAgICAgICAgICAgICAgICdNQUNISU5FX0ZFQVRVUkVTX2FwcGVuZCA9ICIgZWZpIlxuJworICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoY29uZmlnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGJpdGJha2UoJ3dpYy1pbWFnZS1taW5pbWFsJykuc3RhdHVzKQorICAgICAgICBzZWxmLnJlbW92ZV9jb25maWcoY29uZmlnKQorCisgICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhbJ0RFUExPWV9ESVJfSU1BR0UnLCAnTUFDSElORSddKQorICAgICAgICBkZXBsb3lfZGlyID0gYmJfdmFyc1snREVQTE9ZX0RJUl9JTUFHRSddCisgICAgICAgIG1hY2hpbmUgPSBiYl92YXJzWydNQUNISU5FJ10KKyAgICAgICAgcHJlZml4ID0gb3MucGF0aC5qb2luKGRlcGxveV9kaXIsICd3aWMtaW1hZ2UtbWluaW1hbC0lcy4nICUgbWFjaGluZSkKKyAgICAgICAgIyBjaGVjayBpZiB3ZSBoYXZlIHJlc3VsdCBpbWFnZSBhbmQgbWFuaWZlc3RzIHN5bWxpbmtzCisgICAgICAgICMgcG9pbnRpbmcgdG8gZXhpc3RpbmcgZmlsZXMKKyAgICAgICAgZm9yIHN1ZmZpeCBpbiAoJ3dpYycsICdtYW5pZmVzdCcpOgorICAgICAgICAgICAgcGF0aCA9IHByZWZpeCArIHN1ZmZpeAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNsaW5rKHBhdGgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGgucmVhbHBhdGgocGF0aCkpKQorCisgICAgQE9FVGVzdElEKDE0MjIpCisgICAgQG9ubHlfZm9yX2FyY2goWydpNTg2JywgJ2k2ODYnLCAneDg2XzY0J10pCisgICAgZGVmIHRlc3RfcWVtdShzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMtaW1hZ2UtbWluaW1hbCB1bmRlciBxZW11IiIiCisgICAgICAgIGNvbmZpZyA9ICdJTUFHRV9GU1RZUEVTICs9ICJ3aWMiXG5XS1NfRklMRSA9ICJ3aWMtaW1hZ2UtbWluaW1hbCJcbidcCisgICAgICAgICAgICAgICAgICdNQUNISU5FX0ZFQVRVUkVTX2FwcGVuZCA9ICIgZWZpIlxuJworICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoY29uZmlnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGJpdGJha2UoJ3dpYy1pbWFnZS1taW5pbWFsJykuc3RhdHVzKQorICAgICAgICBzZWxmLnJlbW92ZV9jb25maWcoY29uZmlnKQorCisgICAgICAgIHdpdGggcnVucWVtdSgnd2ljLWltYWdlLW1pbmltYWwnLCBzc2g9RmFsc2UpIGFzIHFlbXU6CisgICAgICAgICAgICBjbWQgPSAibW91bnQgfGdyZXAgJ14vZGV2LycgfCBjdXQgLWYxLDMgLWQgJyAnIgorICAgICAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBxZW11LnJ1bl9zZXJpYWwoY21kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzdGF0dXMsICdGYWlsZWQgdG8gcnVuIGNvbW1hbmQgIiVzIjogJXMnICUgKGNtZCwgb3V0cHV0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCAnL2Rldi9yb290IC9cclxuL2Rldi9zZGExIC9ib290XHJcbi9kZXYvc2RhMyAvbW50JykKKworICAgIEBvbmx5X2Zvcl9hcmNoKFsnaTU4NicsICdpNjg2JywgJ3g4Nl82NCddKQorICAgIEBPRVRlc3RJRCgxODUyKQorICAgIGRlZiB0ZXN0X3FlbXVfZWZpKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGNvcmUtaW1hZ2UtbWluaW1hbCBlZmkgaW1hZ2UgdW5kZXIgcWVtdSIiIgorICAgICAgICBjb25maWcgPSAnSU1BR0VfRlNUWVBFUyA9ICJ3aWMiXG5XS1NfRklMRSA9ICJta2VmaWRpc2sud2tzIlxuJworICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoY29uZmlnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGJpdGJha2UoJ2NvcmUtaW1hZ2UtbWluaW1hbCBvdm1mJykuc3RhdHVzKQorICAgICAgICBzZWxmLnJlbW92ZV9jb25maWcoY29uZmlnKQorCisgICAgICAgIHdpdGggcnVucWVtdSgnY29yZS1pbWFnZS1taW5pbWFsJywgc3NoPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgcnVucWVtdXBhcmFtcz0nb3ZtZicsIGltYWdlX2ZzdHlwZT0nd2ljJykgYXMgcWVtdToKKyAgICAgICAgICAgIGNtZCA9ICJncmVwIHNkYS4gL3Byb2MvcGFydGl0aW9ucyAgfHdjIC1sIgorICAgICAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBxZW11LnJ1bl9zZXJpYWwoY21kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzdGF0dXMsICdGYWlsZWQgdG8gcnVuIGNvbW1hbmQgIiVzIjogJXMnICUgKGNtZCwgb3V0cHV0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCAnMycpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9tYWtlX2ZpeGVkX3NpemVfd2tzKHNpemUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGEgd2tzIG9mIGFuIGltYWdlIHdpdGggYSBzaW5nbGUgcGFydGl0aW9uLiBTaXplIG9mIHRoZSBwYXJ0aXRpb24gaXMgc2V0CisgICAgICAgIHVzaW5nIC0tZml4ZWQtc2l6ZSBmbGFnLiBSZXR1cm5zIGEgdHVwbGU6IChwYXRoIHRvIHdrcyBmaWxlLCB3a3MgaW1hZ2UgbmFtZSkKKyAgICAgICAgIiIiCisgICAgICAgIHdpdGggTmFtZWRUZW1wb3JhcnlGaWxlKCJ3Iiwgc3VmZml4PSIud2tzIiwgZGVsZXRlPUZhbHNlKSBhcyB0ZW1wZjoKKyAgICAgICAgICAgIHdrc3BhdGggPSB0ZW1wZi5uYW1lCisgICAgICAgICAgICB0ZW1wZi53cml0ZSgicGFydCAiIFwKKyAgICAgICAgICAgICAgICAgICAgICItLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgaGRhIC0tYWxpZ24gNCAtLWZpeGVkLXNpemUgJWQgIgorICAgICAgICAgICAgICAgICAgICAgIi0tZnN0eXBlPWV4dDRcbiIgJSBzaXplKQorICAgICAgICB3a3NuYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKHdrc3BhdGgpKVswXQorCisgICAgICAgIHJldHVybiB3a3NwYXRoLCB3a3NuYW1lCisKKyAgICBAT0VUZXN0SUQoMTg0NykKKyAgICBkZWYgdGVzdF9maXhlZF9zaXplKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdCBjcmVhdGlvbiBvZiBhIHNpbXBsZSBpbWFnZSB3aXRoIHBhcnRpdGlvbiBzaXplIGNvbnRyb2xsZWQgdGhyb3VnaAorICAgICAgICAtLWZpeGVkLXNpemUgZmxhZworICAgICAgICAiIiIKKyAgICAgICAgd2tzcGF0aCwgd2tzbmFtZSA9IFdpYy5fbWFrZV9maXhlZF9zaXplX3drcygyMDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgJXMgLWUgY29yZS1pbWFnZS1taW5pbWFsIC1vICVzIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHdrc3BhdGgsIHNlbGYucmVzdWx0ZGlyKSkuc3RhdHVzKQorICAgICAgICBvcy5yZW1vdmUod2tzcGF0aCkKKyAgICAgICAgd2ljb3V0ID0gZ2xvYihzZWxmLnJlc3VsdGRpciArICIlcy0qZGlyZWN0IiAlIHdrc25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKHdpY291dCkpCisKKyAgICAgICAgd2ljaW1nID0gd2ljb3V0WzBdCisKKyAgICAgICAgIyB2ZXJpZnkgcGFydGl0aW9uIHNpemUgd2l0aCB3aWMKKyAgICAgICAgcmVzID0gcnVuQ21kKCJwYXJ0ZWQgLW0gJXMgdW5pdCBtaWIgcCAyPi9kZXYvbnVsbCIgJSB3aWNpbWcsCisgICAgICAgICAgICAgICAgICAgICBpZ25vcmVfc3RhdHVzPVRydWUsCisgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdD1zZWxmLm5hdGl2ZV9zeXNyb290KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJlcy5zdGF0dXMpCisKKyAgICAgICAgIyBwYXJzZSBwYXJ0ZWQgb3V0cHV0IHdoaWNoIGxvb2tzIGxpa2UgdGhpczoKKyAgICAgICAgIyBCWVQ7XG4KKyAgICAgICAgIyAvdmFyL3RtcC93aWMvYnVpbGQvdG1wZnd2amprZl8tMjAxNjExMTAxMjIyLWhkYS5kaXJlY3Q6MjAwTWlCOmZpbGU6NTEyOjUxMjptc2Rvczo6O1xuCisgICAgICAgICMgMTowLjAwTWlCOjIwME1pQjoyMDBNaUI6ZXh0NDo6O1xuCisgICAgICAgIHBhcnRsbnMgPSByZXMub3V0cHV0LnNwbGl0bGluZXMoKVsyOl0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihwYXJ0bG5zKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTowLjAwTWlCOjIwME1pQjoyMDBNaUI6ZXh0NDo6OyIsIHBhcnRsbnNbMF0pCisKKyAgICBAT0VUZXN0SUQoMTg0OCkKKyAgICBkZWYgdGVzdF9maXhlZF9zaXplX2Vycm9yKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdCBjcmVhdGlvbiBvZiBhIHNpbXBsZSBpbWFnZSB3aXRoIHBhcnRpdGlvbiBzaXplIGNvbnRyb2xsZWQgdGhyb3VnaAorICAgICAgICAtLWZpeGVkLXNpemUgZmxhZy4gVGhlIHNpemUgb2YgcGFydGl0aW9uIGlzIGludGVudGlvbmFsbHkgc2V0IHRvIDFNaUIKKyAgICAgICAgaW4gb3JkZXIgdG8gdHJpZ2dlciBhbiBlcnJvciBpbiB3aWMuCisgICAgICAgICIiIgorICAgICAgICB3a3NwYXRoLCB3a3NuYW1lID0gV2ljLl9tYWtlX2ZpeGVkX3NpemVfd2tzKDEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBydW5DbWQoIndpYyBjcmVhdGUgJXMgLWUgY29yZS1pbWFnZS1taW5pbWFsIC1vICVzIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHdrc3BhdGgsIHNlbGYucmVzdWx0ZGlyKSwgaWdub3JlX3N0YXR1cz1UcnVlKS5zdGF0dXMpCisgICAgICAgIG9zLnJlbW92ZSh3a3NwYXRoKQorICAgICAgICB3aWNvdXQgPSBnbG9iKHNlbGYucmVzdWx0ZGlyICsgIiVzLSpkaXJlY3QiICUgd2tzbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4od2ljb3V0KSkKKworICAgIEBvbmx5X2Zvcl9hcmNoKFsnaTU4NicsICdpNjg2JywgJ3g4Nl82NCddKQorICAgIEBPRVRlc3RJRCgxODU0KQorICAgIGRlZiB0ZXN0X3Jhd2NvcHlfcGx1Z2luX3FlbXUoc2VsZik6CisgICAgICAgICIiIlRlc3QgcmF3Y29weSBwbHVnaW4gaW4gcWVtdSIiIgorICAgICAgICAjIGJ1aWxkIGV4dDQgYW5kIHdpYyBpbWFnZXMKKyAgICAgICAgZm9yIGZzdHlwZSBpbiAoImV4dDQiLCAid2ljIik6CisgICAgICAgICAgICBjb25maWcgPSAnSU1BR0VfRlNUWVBFUyA9ICIlcyJcbldLU19GSUxFID0gInRlc3RfcmF3Y29weV9wbHVnaW4ud2tzLmluIlxuJyAlIGZzdHlwZQorICAgICAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGNvbmZpZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgYml0YmFrZSgnY29yZS1pbWFnZS1taW5pbWFsJykuc3RhdHVzKQorICAgICAgICAgICAgc2VsZi5yZW1vdmVfY29uZmlnKGNvbmZpZykKKworICAgICAgICB3aXRoIHJ1bnFlbXUoJ2NvcmUtaW1hZ2UtbWluaW1hbCcsIHNzaD1GYWxzZSwgaW1hZ2VfZnN0eXBlPSd3aWMnKSBhcyBxZW11OgorICAgICAgICAgICAgY21kID0gImdyZXAgc2RhLiAvcHJvYy9wYXJ0aXRpb25zICB8d2MgLWwiCisgICAgICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHFlbXUucnVuX3NlcmlhbChjbWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHN0YXR1cywgJ0ZhaWxlZCB0byBydW4gY29tbWFuZCAiJXMiOiAlcycgJSAoY21kLCBvdXRwdXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsICcyJykKKworICAgIEBPRVRlc3RJRCgxODUzKQorICAgIGRlZiB0ZXN0X3Jhd2NvcHlfcGx1Z2luKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHJhd2NvcHkgcGx1Z2luIiIiCisgICAgICAgIGltZyA9ICdjb3JlLWltYWdlLW1pbmltYWwnCisgICAgICAgIG1hY2hpbmUgPSBnZXRfYmJfdmFyKCdNQUNISU5FJywgaW1nKQorICAgICAgICB3aXRoIE5hbWVkVGVtcG9yYXJ5RmlsZSgidyIsIHN1ZmZpeD0iLndrcyIpIGFzIHdrczoKKyAgICAgICAgICAgIHdrcy53cml0ZWxpbmVzKFsncGFydCAvYm9vdCAtLWFjdGl2ZSAtLXNvdXJjZSBib290aW1nLXBjYmlvc1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFydCAvIC0tc291cmNlIHJhd2NvcHkgLS1zb3VyY2VwYXJhbXM9ImZpbGU9JXMtJXMuZXh0NCIgLS11c2UtdXVpZFxuJ1wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoaW1nLCBtYWNoaW5lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9vdGxvYWRlciAtLXRpbWVvdXQ9MCAtLWFwcGVuZD0iY29uc29sZT10dHlTMCwxMTUyMDBuOCJcbiddKQorICAgICAgICAgICAgd2tzLmZsdXNoKCkKKyAgICAgICAgICAgIGNtZCA9ICJ3aWMgY3JlYXRlICVzIC1lICVzIC1vICVzIiAlICh3a3MubmFtZSwgaW1nLCBzZWxmLnJlc3VsdGRpcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKGNtZCkuc3RhdHVzKQorICAgICAgICAgICAgd2tzbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZSh3a3MubmFtZSkpWzBdCisgICAgICAgICAgICBvdXQgPSBnbG9iKHNlbGYucmVzdWx0ZGlyICsgIiVzLSpkaXJlY3QiICUgd2tzbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKG91dCkpCisKKyAgICBAT0VUZXN0SUQoMTg0OSkKKyAgICBkZWYgdGVzdF9mc190eXBlcyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCBmaWxlc3lzdGVtIHR5cGVzIGZvciBlbXB0eSBhbmQgbm90IGVtcHR5IHBhcnRpdGlvbnMiIiIKKyAgICAgICAgaW1nID0gJ2NvcmUtaW1hZ2UtbWluaW1hbCcKKyAgICAgICAgd2l0aCBOYW1lZFRlbXBvcmFyeUZpbGUoInciLCBzdWZmaXg9Ii53a3MiKSBhcyB3a3M6CisgICAgICAgICAgICB3a3Mud3JpdGVsaW5lcyhbJ3BhcnQgZXh0MiAgIC0tZnN0eXBlIGV4dDIgICAgIC0tc291cmNlIHJvb3Rmc1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFydCBidHJmcyAgLS1mc3R5cGUgYnRyZnMgICAgLS1zb3VyY2Ugcm9vdGZzIC0tc2l6ZSA0ME1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhcnQgc3F1YXNoIC0tZnN0eXBlIHNxdWFzaGZzIC0tc291cmNlIHJvb3Rmc1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFydCBzd2FwICAgLS1mc3R5cGUgc3dhcCAtLXNpemUgMU1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhcnQgZW1wdHl2ZmF0ICAgLS1mc3R5cGUgdmZhdCAgIC0tc2l6ZSAxTVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFydCBlbXB0eW1zZG9zICAtLWZzdHlwZSBtc2RvcyAgLS1zaXplIDFNXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXJ0IGVtcHR5ZXh0MiAgIC0tZnN0eXBlIGV4dDIgICAtLXNpemUgMU1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhcnQgZW1wdHlidHJmcyAgLS1mc3R5cGUgYnRyZnMgIC0tc2l6ZSAxMDBNXG4nXSkKKyAgICAgICAgICAgIHdrcy5mbHVzaCgpCisgICAgICAgICAgICBjbWQgPSAid2ljIGNyZWF0ZSAlcyAtZSAlcyAtbyAlcyIgJSAod2tzLm5hbWUsIGltZywgc2VsZi5yZXN1bHRkaXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZChjbWQpLnN0YXR1cykKKyAgICAgICAgICAgIHdrc25hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUod2tzLm5hbWUpKVswXQorICAgICAgICAgICAgb3V0ID0gZ2xvYihzZWxmLnJlc3VsdGRpciArICIlcy0qZGlyZWN0IiAlIHdrc25hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihvdXQpKQorCisgICAgQE9FVGVzdElEKDE4NTEpCisgICAgZGVmIHRlc3Rfa2lja3N0YXJ0X3BhcnNlcihzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3a3MgcGFyc2VyIG9wdGlvbnMiIiIKKyAgICAgICAgd2l0aCBOYW1lZFRlbXBvcmFyeUZpbGUoInciLCBzdWZmaXg9Ii53a3MiKSBhcyB3a3M6CisgICAgICAgICAgICB3a3Mud3JpdGVsaW5lcyhbJ3BhcnQgLyAtLWZzdHlwZSBleHQzIC0tc291cmNlIHJvb3RmcyAtLXN5c3RlbS1pZCAweEZGICdcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tb3ZlcmhlYWQtZmFjdG9yIDEuMiAtLXNpemUgMTAwa1xuJ10pCisgICAgICAgICAgICB3a3MuZmx1c2goKQorICAgICAgICAgICAgY21kID0gIndpYyBjcmVhdGUgJXMgLWUgY29yZS1pbWFnZS1taW5pbWFsIC1vICVzIiAlICh3a3MubmFtZSwgc2VsZi5yZXN1bHRkaXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZChjbWQpLnN0YXR1cykKKyAgICAgICAgICAgIHdrc25hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUod2tzLm5hbWUpKVswXQorICAgICAgICAgICAgb3V0ID0gZ2xvYihzZWxmLnJlc3VsdGRpciArICIlcy0qZGlyZWN0IiAlIHdrc25hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihvdXQpKQorCisgICAgQE9FVGVzdElEKDE4NTApCisgICAgZGVmIHRlc3RfaW1hZ2VfYm9vdHBhcnRfZ2xvYmJlZChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBnbG9iYmVkIHNvdXJjZXMgd2l0aCBpbWFnZS1ib290cGFydCBwbHVnaW4iIiIKKyAgICAgICAgaW1nID0gImNvcmUtaW1hZ2UtbWluaW1hbCIKKyAgICAgICAgY21kID0gIndpYyBjcmVhdGUgc2RpbWFnZS1ib290cGFydCAtZSAlcyAtbyAlcyIgJSAoaW1nLCBzZWxmLnJlc3VsdGRpcikKKyAgICAgICAgY29uZmlnID0gJ0lNQUdFX0JPT1RfRklMRVMgPSAiJXMqIicgJSBnZXRfYmJfdmFyKCdLRVJORUxfSU1BR0VUWVBFJywgaW1nKQorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoY29uZmlnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZChjbWQpLnN0YXR1cykKKyAgICAgICAgc2VsZi5yZW1vdmVfY29uZmlnKGNvbmZpZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJzZGltYWdlLWJvb3RwYXJ0LSpkaXJlY3QiKSkpCisKKyAgICBAT0VUZXN0SUQoMTg1NSkKKyAgICBkZWYgdGVzdF9zcGFyc2VfY29weShzZWxmKToKKyAgICAgICAgIiIiVGVzdCBzcGFyc2VfY29weSB3aXRoIEZJRU1BUCBhbmQgU0VFS19IT0xFIGZpbGVtYXAgQVBJcyIiIgorICAgICAgICBsaWJwYXRoID0gb3MucGF0aC5qb2luKGdldF9iYl92YXIoJ0NPUkVCQVNFJyksICdzY3JpcHRzJywgJ2xpYicsICd3aWMnKQorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgbGlicGF0aCkKKyAgICAgICAgZnJvbSAgZmlsZW1hcCBpbXBvcnQgRmlsZW1hcEZpZW1hcCwgRmlsZW1hcFNlZWssIHNwYXJzZV9jb3B5LCBFcnJvck5vdFN1cHAKKyAgICAgICAgd2l0aCBOYW1lZFRlbXBvcmFyeUZpbGUoInciLCBzdWZmaXg9Ii53aWMtc3BhcnNlIikgYXMgc3BhcnNlOgorICAgICAgICAgICAgc3JjX25hbWUgPSBzcGFyc2UubmFtZQorICAgICAgICAgICAgc3JjX3NpemUgPSAxMDI0ICogMTAKKyAgICAgICAgICAgIHNwYXJzZS50cnVuY2F0ZShzcmNfc2l6ZSkKKyAgICAgICAgICAgICMgd3JpdGUgb25lIGJ5dGUgdG8gdGhlIGZpbGUKKyAgICAgICAgICAgIHdpdGggb3BlbihzcmNfbmFtZSwgJ3IrYicpIGFzIHNmaWxlOgorICAgICAgICAgICAgICAgIHNmaWxlLnNlZWsoMTAyNCAqIDQpCisgICAgICAgICAgICAgICAgc2ZpbGUud3JpdGUoYidceDAwJykKKyAgICAgICAgICAgIGRlc3QgPSBzcGFyc2UubmFtZSArICcub3V0JworICAgICAgICAgICAgIyBjb3B5IHNyYyBmaWxlIHRvIGRlc3QgdXNpbmcgZGlmZmVyZW50IGZpbGVtYXAgQVBJcworICAgICAgICAgICAgZm9yIGFwaSBpbiAoRmlsZW1hcEZpZW1hcCwgRmlsZW1hcFNlZWssIE5vbmUpOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRlc3QpOgorICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZGVzdCkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNwYXJzZV9jb3B5KHNwYXJzZS5uYW1lLCBkZXN0LCBhcGk9YXBpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFcnJvck5vdFN1cHA6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlICMgc2tpcCB1bnN1cHBvcnRlZCBBUEkKKyAgICAgICAgICAgICAgICBkZXN0X3N0YXQgPSBvcy5zdGF0KGRlc3QpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXN0X3N0YXQuc3Rfc2l6ZSwgc3JjX3NpemUpCisgICAgICAgICAgICAgICAgIyA4IGJsb2NrcyBpcyA0SyAocGh5c2ljYWwgc2VjdG9yIHNpemUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXN0X3N0YXQuc3RfYmxvY2tzLCA4KQorICAgICAgICAgICAgb3MudW5saW5rKGRlc3QpCisKKyAgICBAT0VUZXN0SUQoMTg1NykKKyAgICBkZWYgdGVzdF93aWNfbHMoc2VsZik6CisgICAgICAgICIiIlRlc3QgbGlzdGluZyBpbWFnZSBjb250ZW50IHVzaW5nICd3aWMgbHMnIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlIHdpY3Rlc3RkaXNrICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZT1jb3JlLWltYWdlLW1pbmltYWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLUQgLW8gJXMiICUgc2VsZi5yZXN1bHRkaXIpLnN0YXR1cykKKyAgICAgICAgaW1hZ2VzID0gZ2xvYihzZWxmLnJlc3VsdGRpciArICJ3aWN0ZXN0ZGlzay0qLmRpcmVjdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGltYWdlcykpCisKKyAgICAgICAgc3lzcm9vdCA9IGdldF9iYl92YXIoJ1JFQ0lQRV9TWVNST09UX05BVElWRScsICd3aWMtdG9vbHMnKQorCisgICAgICAgICMgbGlzdCBwYXJ0aXRpb25zCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgid2ljIGxzICVzIC1uICVzIiAlIChpbWFnZXNbMF0sIHN5c3Jvb3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJlc3VsdC5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgbGVuKHJlc3VsdC5vdXRwdXQuc3BsaXQoJ1xuJykpKQorCisgICAgICAgICMgbGlzdCBkaXJlY3RvcnkgY29udGVudCBvZiB0aGUgZmlyc3QgcGFydGl0aW9uCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgid2ljIGxzICVzOjEvIC1uICVzIiAlIChpbWFnZXNbMF0sIHN5c3Jvb3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJlc3VsdC5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNiwgbGVuKHJlc3VsdC5vdXRwdXQuc3BsaXQoJ1xuJykpKQorCisgICAgQE9FVGVzdElEKDE4NTYpCisgICAgZGVmIHRlc3Rfd2ljX2NwKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGNvcHkgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIHRoZSB0aGUgd2ljIGltYWdlLiIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSB3aWN0ZXN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWU9Y29yZS1pbWFnZS1taW5pbWFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1EIC1vICVzIiAlIHNlbGYucmVzdWx0ZGlyKS5zdGF0dXMpCisgICAgICAgIGltYWdlcyA9IGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAid2ljdGVzdGRpc2stKi5kaXJlY3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihpbWFnZXMpKQorCisgICAgICAgIHN5c3Jvb3QgPSBnZXRfYmJfdmFyKCdSRUNJUEVfU1lTUk9PVF9OQVRJVkUnLCAnd2ljLXRvb2xzJykKKworICAgICAgICAjIGxpc3QgZGlyZWN0b3J5IGNvbnRlbnQgb2YgdGhlIGZpcnN0IHBhcnRpdGlvbgorICAgICAgICByZXN1bHQgPSBydW5DbWQoIndpYyBscyAlczoxLyAtbiAlcyIgJSAoaW1hZ2VzWzBdLCBzeXNyb290KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCByZXN1bHQuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDYsIGxlbihyZXN1bHQub3V0cHV0LnNwbGl0KCdcbicpKSkKKworICAgICAgICB3aXRoIE5hbWVkVGVtcG9yYXJ5RmlsZSgidyIsIHN1ZmZpeD0iLndpYy1jcCIpIGFzIHRlc3RmaWxlOgorICAgICAgICAgICAgdGVzdGZpbGUud3JpdGUoInRlc3QiKQorCisgICAgICAgICAgICAjIGNvcHkgZmlsZSB0byB0aGUgcGFydGl0aW9uCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoIndpYyBjcCAlcyAlczoxLyAtbiAlcyIgJSAodGVzdGZpbGUubmFtZSwgaW1hZ2VzWzBdLCBzeXNyb290KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzdWx0LnN0YXR1cykKKworICAgICAgICAgICAgIyBjaGVjayBpZiBmaWxlIGlzIHRoZXJlCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoIndpYyBscyAlczoxLyAtbiAlcyIgJSAoaW1hZ2VzWzBdLCBzeXNyb290KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzdWx0LnN0YXR1cykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgbGVuKHJlc3VsdC5vdXRwdXQuc3BsaXQoJ1xuJykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguYmFzZW5hbWUodGVzdGZpbGUubmFtZSkgaW4gcmVzdWx0Lm91dHB1dCkKKworICAgICAgICAgICAgIyBwcmVwYXJlIGRpcmVjdG9yeQorICAgICAgICAgICAgdGVzdGRpciA9IG9zLnBhdGguam9pbihzZWxmLnJlc3VsdGRpciwgJ3dpYy10ZXN0LWNwLWRpcicpCisgICAgICAgICAgICB0ZXN0c3ViZGlyID0gb3MucGF0aC5qb2luKHRlc3RkaXIsICdzdWJkaXInKQorICAgICAgICAgICAgb3MubWFrZWRpcnMob3MucGF0aC5qb2luKHRlc3RzdWJkaXIpKQorICAgICAgICAgICAgY29weSh0ZXN0ZmlsZS5uYW1lLCB0ZXN0ZGlyKQorCisgICAgICAgICAgICAjIGNvcHkgZGlyZWN0b3J5IHRvIHRoZSBwYXJ0aXRpb24KKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgid2ljIGNwICVzICVzOjEvIC1uICVzIiAlICh0ZXN0ZGlyLCBpbWFnZXNbMF0sIHN5c3Jvb3QpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCByZXN1bHQuc3RhdHVzKQorCisgICAgICAgICAgICAjIGNoZWNrIGlmIGRpcmVjdG9yeSBpcyB0aGVyZQorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJ3aWMgbHMgJXM6MS8gLW4gJXMiICUgKGltYWdlc1swXSwgc3lzcm9vdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJlc3VsdC5zdGF0dXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDgsIGxlbihyZXN1bHQub3V0cHV0LnNwbGl0KCdcbicpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmJhc2VuYW1lKHRlc3RkaXIpIGluIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAT0VUZXN0SUQoMTg1OCkKKyAgICBkZWYgdGVzdF93aWNfcm0oc2VsZik6CisgICAgICAgICIiIlRlc3QgcmVtb3ZpbmcgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGZyb20gdGhlIHRoZSB3aWMgaW1hZ2UuIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlIG1rZWZpZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWU9Y29yZS1pbWFnZS1taW5pbWFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1EIC1vICVzIiAlIHNlbGYucmVzdWx0ZGlyKS5zdGF0dXMpCisgICAgICAgIGltYWdlcyA9IGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAibWtlZmlkaXNrLSouZGlyZWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oaW1hZ2VzKSkKKworICAgICAgICBzeXNyb290ID0gZ2V0X2JiX3ZhcignUkVDSVBFX1NZU1JPT1RfTkFUSVZFJywgJ3dpYy10b29scycpCisKKyAgICAgICAgIyBsaXN0IGRpcmVjdG9yeSBjb250ZW50IG9mIHRoZSBmaXJzdCBwYXJ0aXRpb24KKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJ3aWMgbHMgJXM6MSAtbiAlcyIgJSAoaW1hZ2VzWzBdLCBzeXNyb290KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCByZXN1bHQuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEluKCdcbkJaSU1BR0UgICAgICAgICcsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1xuRUZJICAgICAgICAgIDxESVI+ICAgICAnLCByZXN1bHQub3V0cHV0KQorCisgICAgICAgICMgcmVtb3ZlIGZpbGUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJ3aWMgcm0gJXM6MS9iemltYWdlIC1uICVzIiAlIChpbWFnZXNbMF0sIHN5c3Jvb3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJlc3VsdC5zdGF0dXMpCisKKyAgICAgICAgIyByZW1vdmUgZGlyZWN0b3J5CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgid2ljIHJtICVzOjEvZWZpIC1uICVzIiAlIChpbWFnZXNbMF0sIHN5c3Jvb3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJlc3VsdC5zdGF0dXMpCisKKyAgICAgICAgIyBjaGVjayBpZiB0aGV5J3JlIHJlbW92ZWQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJ3aWMgbHMgJXM6MSAtbiAlcyIgJSAoaW1hZ2VzWzBdLCBzeXNyb290KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCByZXN1bHQuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdcbkJaSU1BR0UgICAgICAgICcsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1xuRUZJICAgICAgICAgIDxESVI+ICAgICAnLCByZXN1bHQub3V0cHV0KQorCisgICAgQE9FVGVzdElEKDE5MjIpCisgICAgZGVmIHRlc3RfbWtmc19leHRyYW9wdHMoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2tzIG9wdGlvbiAtLW1rZnMtZXh0cmFvcHRzIGZvciBlbXB0eSBhbmQgbm90IGVtcHR5IHBhcnRpdGlvbnMiIiIKKyAgICAgICAgaW1nID0gJ2NvcmUtaW1hZ2UtbWluaW1hbCcKKyAgICAgICAgd2l0aCBOYW1lZFRlbXBvcmFyeUZpbGUoInciLCBzdWZmaXg9Ii53a3MiKSBhcyB3a3M6CisgICAgICAgICAgICB3a3Mud3JpdGVsaW5lcygKKyAgICAgICAgICAgICAgICBbJ3BhcnQgZXh0MiAgIC0tZnN0eXBlIGV4dDIgICAgIC0tc291cmNlIHJvb3RmcyAtLW1rZnMtZXh0cmFvcHRzICItRCAtRiAtaSA4MTkyIlxuJywKKyAgICAgICAgICAgICAgICAgInBhcnQgYnRyZnMgIC0tZnN0eXBlIGJ0cmZzICAgIC0tc291cmNlIHJvb3RmcyAtLXNpemUgNDBNIC0tbWtmcy1leHRyYW9wdHM9Jy0tcXVpZXQnXG4iLAorICAgICAgICAgICAgICAgICAncGFydCBzcXVhc2ggLS1mc3R5cGUgc3F1YXNoZnMgLS1zb3VyY2Ugcm9vdGZzIC0tbWtmcy1leHRyYW9wdHMgIi1uby1zcGFyc2UgLWIgNDA5NiJcbicsCisgICAgICAgICAgICAgICAgICdwYXJ0IGVtcHR5dmZhdCAgIC0tZnN0eXBlIHZmYXQgICAtLXNpemUgMU0gLS1ta2ZzLWV4dHJhb3B0cyAiLVMgMTAyNCAtcyA2NCJcbicsCisgICAgICAgICAgICAgICAgICdwYXJ0IGVtcHR5bXNkb3MgIC0tZnN0eXBlIG1zZG9zICAtLXNpemUgMU0gLS1ta2ZzLWV4dHJhb3B0cyAiLVMgMTAyNCAtcyA2NCJcbicsCisgICAgICAgICAgICAgICAgICdwYXJ0IGVtcHR5ZXh0MiAgIC0tZnN0eXBlIGV4dDIgICAtLXNpemUgMU0gLS1ta2ZzLWV4dHJhb3B0cyAiLUQgLUYgLWkgODE5MiJcbicsCisgICAgICAgICAgICAgICAgICdwYXJ0IGVtcHR5YnRyZnMgIC0tZnN0eXBlIGJ0cmZzICAtLXNpemUgMTAwTSAtLW1rZnMtZXh0cmFvcHRzICItLW1peGVkIC1LIlxuJ10pCisgICAgICAgICAgICB3a3MuZmx1c2goKQorICAgICAgICAgICAgY21kID0gIndpYyBjcmVhdGUgJXMgLWUgJXMgLW8gJXMiICUgKHdrcy5uYW1lLCBpbWcsIHNlbGYucmVzdWx0ZGlyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoY21kKS5zdGF0dXMpCisgICAgICAgICAgICB3a3NuYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKHdrcy5uYW1lKSlbMF0KKyAgICAgICAgICAgIG91dCA9IGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiJXMtKmRpcmVjdCIgJSB3a3NuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4ob3V0KSkKKworICAgIGRlZiB0ZXN0X2V4cGFuZF9tYnJfaW1hZ2Uoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2ljIHdyaXRlIC0tZXhwYW5kIGNvbW1hbmQgZm9yIG1iciBpbWFnZSIiIgorICAgICAgICAjIGJ1aWxkIGFuIGltYWdlCisgICAgICAgIGNvbmZpZyA9ICdJTUFHRV9GU1RZUEVTID0gIndpYyJcbldLU19GSUxFID0gImRpcmVjdGRpc2sud2tzIlxuJworICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoY29uZmlnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGJpdGJha2UoJ2NvcmUtaW1hZ2UtbWluaW1hbCcpLnN0YXR1cykKKworICAgICAgICAjIGdldCBwYXRoIHRvIHRoZSBpbWFnZQorICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWydERVBMT1lfRElSX0lNQUdFJywgJ01BQ0hJTkUnXSkKKyAgICAgICAgZGVwbG95X2RpciA9IGJiX3ZhcnNbJ0RFUExPWV9ESVJfSU1BR0UnXQorICAgICAgICBtYWNoaW5lID0gYmJfdmFyc1snTUFDSElORSddCisgICAgICAgIGltYWdlX3BhdGggPSBvcy5wYXRoLmpvaW4oZGVwbG95X2RpciwgJ2NvcmUtaW1hZ2UtbWluaW1hbC0lcy53aWMnICUgbWFjaGluZSkKKworICAgICAgICBzZWxmLnJlbW92ZV9jb25maWcoY29uZmlnKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgZXhwYW5kIGltYWdlIHRvIDFHCisgICAgICAgICAgICBuZXdfaW1hZ2VfcGF0aCA9IE5vbmUKKyAgICAgICAgICAgIHdpdGggTmFtZWRUZW1wb3JhcnlGaWxlKG1vZGU9J3diJywgc3VmZml4PScud2ljLmV4cCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXI9ZGVwbG95X2RpciwgZGVsZXRlPUZhbHNlKSBhcyBzcGFyc2U6CisgICAgICAgICAgICAgICAgc3BhcnNlLnRydW5jYXRlKDEwMjQgKiogMykKKyAgICAgICAgICAgICAgICBuZXdfaW1hZ2VfcGF0aCA9IHNwYXJzZS5uYW1lCisKKyAgICAgICAgICAgIHN5c3Jvb3QgPSBnZXRfYmJfdmFyKCdSRUNJUEVfU1lTUk9PVF9OQVRJVkUnLCAnd2ljLXRvb2xzJykKKyAgICAgICAgICAgIGNtZCA9ICJ3aWMgd3JpdGUgLW4gJXMgLS1leHBhbmQgMTowICVzICVzIiAlIChzeXNyb290LCBpbWFnZV9wYXRoLCBuZXdfaW1hZ2VfcGF0aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKGNtZCkuc3RhdHVzKQorCisgICAgICAgICAgICAjIGNoZWNrIGlmIHBhcnRpdGlvbnMgYXJlIGV4cGFuZGVkCisgICAgICAgICAgICBvcmlnID0gcnVuQ21kKCJ3aWMgbHMgJXMgLW4gJXMiICUgKGltYWdlX3BhdGgsIHN5c3Jvb3QpKQorICAgICAgICAgICAgZXhwID0gcnVuQ21kKCJ3aWMgbHMgJXMgLW4gJXMiICUgKG5ld19pbWFnZV9wYXRoLCBzeXNyb290KSkKKyAgICAgICAgICAgIG9yaWdfc2l6ZXMgPSBbaW50KGxpbmUuc3BsaXQoKVszXSkgZm9yIGxpbmUgaW4gb3JpZy5vdXRwdXQuc3BsaXQoJ1xuJylbMTpdXQorICAgICAgICAgICAgZXhwX3NpemVzID0gW2ludChsaW5lLnNwbGl0KClbM10pIGZvciBsaW5lIGluIGV4cC5vdXRwdXQuc3BsaXQoJ1xuJylbMTpdXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnX3NpemVzWzBdLCBleHBfc2l6ZXNbMF0pICMgZmlyc3QgcGFydGl0aW9uIGlzIG5vdCByZXNpemVkCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3JpZ19zaXplc1sxXSA8IGV4cF9zaXplc1sxXSkKKworICAgICAgICAgICAgIyBDaGVjayBpZiBhbGwgZnJlZSBzcGFjZSBpcyBwYXJ0aXRpb25lZAorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCIlcy91c3Ivc2Jpbi9zZmRpc2sgLUYgJXMiICUgKHN5c3Jvb3QsIG5ld19pbWFnZV9wYXRoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiMCBCLCAwIGJ5dGVzLCAwIHNlY3RvcnMiIGluIHJlc3VsdC5vdXRwdXQpCisKKyAgICAgICAgICAgIG9zLnJlbmFtZShpbWFnZV9wYXRoLCBpbWFnZV9wYXRoICsgJy5iYWsnKQorICAgICAgICAgICAgb3MucmVuYW1lKG5ld19pbWFnZV9wYXRoLCBpbWFnZV9wYXRoKQorCisgICAgICAgICAgICAjIENoZWNrIGlmIGl0IGJvb3RzIGluIHFlbXUKKyAgICAgICAgICAgIHdpdGggcnVucWVtdSgnY29yZS1pbWFnZS1taW5pbWFsJywgc3NoPUZhbHNlKSBhcyBxZW11OgorICAgICAgICAgICAgICAgIGNtZCA9ICJscyAvZXRjLyIKKyAgICAgICAgICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHFlbXUucnVuX3NlcmlhbCgndHJ1ZScpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzdGF0dXMsICdGYWlsZWQgdG8gcnVuIGNvbW1hbmQgIiVzIjogJXMnICUgKGNtZCwgb3V0cHV0KSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG5ld19pbWFnZV9wYXRoKToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsobmV3X2ltYWdlX3BhdGgpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhpbWFnZV9wYXRoICsgJy5iYWsnKToKKyAgICAgICAgICAgICAgICBvcy5yZW5hbWUoaW1hZ2VfcGF0aCArICcuYmFrJywgaW1hZ2VfcGF0aCkKKworICAgIGRlZiB0ZXN0X3dpY19sc19leHQoc2VsZik6CisgICAgICAgICIiIlRlc3QgbGlzdGluZyBjb250ZW50IG9mIHRoZSBleHQgcGFydGl0aW9uIHVzaW5nICd3aWMgbHMnIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlIHdpY3Rlc3RkaXNrICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZT1jb3JlLWltYWdlLW1pbmltYWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLUQgLW8gJXMiICUgc2VsZi5yZXN1bHRkaXIpLnN0YXR1cykKKyAgICAgICAgaW1hZ2VzID0gZ2xvYihzZWxmLnJlc3VsdGRpciArICJ3aWN0ZXN0ZGlzay0qLmRpcmVjdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGltYWdlcykpCisKKyAgICAgICAgc3lzcm9vdCA9IGdldF9iYl92YXIoJ1JFQ0lQRV9TWVNST09UX05BVElWRScsICd3aWMtdG9vbHMnKQorCisgICAgICAgICMgbGlzdCBkaXJlY3RvcnkgY29udGVudCBvZiB0aGUgc2Vjb25kIGV4dDQgcGFydGl0aW9uCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgid2ljIGxzICVzOjIvIC1uICVzIiAlIChpbWFnZXNbMF0sIHN5c3Jvb3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJlc3VsdC5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXQoWydiaW4nLCAnaG9tZScsICdwcm9jJywgJ3VzcicsICd2YXInLCAnZGV2JywgJ2xpYicsICdzYmluJ10pLmlzc3Vic2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldChsaW5lLnNwbGl0KClbLTFdIGZvciBsaW5lIGluIHJlc3VsdC5vdXRwdXQuc3BsaXQoJ1xuJykgaWYgbGluZSkpKQorCisgICAgZGVmIHRlc3Rfd2ljX2NwX2V4dChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjb3B5IGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byB0aGUgZXh0IHBhcnRpdGlvbi4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgd2ljdGVzdGRpc2sgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1pbWFnZS1uYW1lPWNvcmUtaW1hZ2UtbWluaW1hbCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItRCAtbyAlcyIgJSBzZWxmLnJlc3VsdGRpcikuc3RhdHVzKQorICAgICAgICBpbWFnZXMgPSBnbG9iKHNlbGYucmVzdWx0ZGlyICsgIndpY3Rlc3RkaXNrLSouZGlyZWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oaW1hZ2VzKSkKKworICAgICAgICBzeXNyb290ID0gZ2V0X2JiX3ZhcignUkVDSVBFX1NZU1JPT1RfTkFUSVZFJywgJ3dpYy10b29scycpCisKKyAgICAgICAgIyBsaXN0IGRpcmVjdG9yeSBjb250ZW50IG9mIHRoZSBleHQ0IHBhcnRpdGlvbgorICAgICAgICByZXN1bHQgPSBydW5DbWQoIndpYyBscyAlczoyLyAtbiAlcyIgJSAoaW1hZ2VzWzBdLCBzeXNyb290KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCByZXN1bHQuc3RhdHVzKQorICAgICAgICBkaXJzID0gc2V0KGxpbmUuc3BsaXQoKVstMV0gZm9yIGxpbmUgaW4gcmVzdWx0Lm91dHB1dC5zcGxpdCgnXG4nKSBpZiBsaW5lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2V0KFsnYmluJywgJ2hvbWUnLCAncHJvYycsICd1c3InLCAndmFyJywgJ2RldicsICdsaWInLCAnc2JpbiddKS5pc3N1YnNldChkaXJzKSkKKworICAgICAgICB3aXRoIE5hbWVkVGVtcG9yYXJ5RmlsZSgidyIsIHN1ZmZpeD0iLndpYy1jcCIpIGFzIHRlc3RmaWxlOgorICAgICAgICAgICAgdGVzdGZpbGUud3JpdGUoInRlc3QiKQorCisgICAgICAgICAgICAjIGNvcHkgZmlsZSB0byB0aGUgcGFydGl0aW9uCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoIndpYyBjcCAlcyAlczoyLyAtbiAlcyIgJSAodGVzdGZpbGUubmFtZSwgaW1hZ2VzWzBdLCBzeXNyb290KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzdWx0LnN0YXR1cykKKworICAgICAgICAgICAgIyBjaGVjayBpZiBmaWxlIGlzIHRoZXJlCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoIndpYyBscyAlczoyLyAtbiAlcyIgJSAoaW1hZ2VzWzBdLCBzeXNyb290KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzdWx0LnN0YXR1cykKKyAgICAgICAgICAgIG5ld2RpcnMgPSBzZXQobGluZS5zcGxpdCgpWy0xXSBmb3IgbGluZSBpbiByZXN1bHQub3V0cHV0LnNwbGl0KCdcbicpIGlmIGxpbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2RpcnMuZGlmZmVyZW5jZShkaXJzKSwgc2V0KFtvcy5wYXRoLmJhc2VuYW1lKHRlc3RmaWxlLm5hbWUpXSkpCisKKyAgICBkZWYgdGVzdF93aWNfcm1fZXh0KHNlbGYpOgorICAgICAgICAiIiJUZXN0IHJlbW92aW5nIGZpbGVzIGZyb20gdGhlIGV4dCBwYXJ0aXRpb24uIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlIG1rZWZpZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWU9Y29yZS1pbWFnZS1taW5pbWFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1EIC1vICVzIiAlIHNlbGYucmVzdWx0ZGlyKS5zdGF0dXMpCisgICAgICAgIGltYWdlcyA9IGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAibWtlZmlkaXNrLSouZGlyZWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oaW1hZ2VzKSkKKworICAgICAgICBzeXNyb290ID0gZ2V0X2JiX3ZhcignUkVDSVBFX1NZU1JPT1RfTkFUSVZFJywgJ3dpYy10b29scycpCisKKyAgICAgICAgIyBsaXN0IGRpcmVjdG9yeSBjb250ZW50IG9mIHRoZSAvZXRjIGRpcmVjdG9yeSBvbiBleHQ0IHBhcnRpdGlvbgorICAgICAgICByZXN1bHQgPSBydW5DbWQoIndpYyBscyAlczoyL2V0Yy8gLW4gJXMiICUgKGltYWdlc1swXSwgc3lzcm9vdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzdWx0LnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdmc3RhYicgaW4gW2xpbmUuc3BsaXQoKVstMV0gZm9yIGxpbmUgaW4gcmVzdWx0Lm91dHB1dC5zcGxpdCgnXG4nKSBpZiBsaW5lXSkKKworICAgICAgICAjIHJlbW92ZSBmaWxlCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgid2ljIHJtICVzOjIvZXRjL2ZzdGFiIC1uICVzIiAlIChpbWFnZXNbMF0sIHN5c3Jvb3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJlc3VsdC5zdGF0dXMpCisKKyAgICAgICAgIyBjaGVjayBpZiBpdCdzIHJlbW92ZWQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJ3aWMgbHMgJXM6Mi9ldGMvIC1uICVzIiAlIChpbWFnZXNbMF0sIHN5c3Jvb3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJlc3VsdC5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnZnN0YWInIG5vdCBpbiBbbGluZS5zcGxpdCgpWy0xXSBmb3IgbGluZSBpbiByZXN1bHQub3V0cHV0LnNwbGl0KCdcbicpIGlmIGxpbmVdKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvY29udGFpbmVyaW1hZ2UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jb250YWluZXJpbWFnZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVmNDgxZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jb250YWluZXJpbWFnZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLWltcG9ydCBvcwotCi1mcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAotZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBiaXRiYWtlLCBnZXRfYmJfdmFycywgcnVuQ21kCi0KLSMgVGhpcyB0ZXN0IGJ1aWxkcyBhbiBpbWFnZSB3aXRoIHVzaW5nIHRoZSAiY29udGFpbmVyIiBJTUFHRV9GU1RZUEUsIGFuZAotIyBlbnN1cmVzIHRoYXQgdGhlbiBmaWxlcyBpbiB0aGUgaW1hZ2UgYXJlIG9ubHkgdGhlIG9uZXMgZXhwZWN0ZWQuCi0jCi0jIFRoZSBvbmx5IHBhY2thZ2UgYWRkZWQgdG8gdGhlIGltYWdlIGlzIGNvbnRhaW5lcl9pbWFnZV90ZXN0cGtnLCB3aGljaAotIyBjb250YWlucyBvbmUgZmlsZS4gSG93ZXZlciwgZHVlIHRvIHNvbWUgb3RoZXIgdGhpbmdzIG5vdCBjbGVhbmluZyB1cCBkdXJpbmcKLSMgcm9vdGZzIGNyZWF0aW9uLCB0aGVyZSBpcyBzb21lIGNydWZ0LiBJZGVhbGx5IGJ1Z3Mgd2lsbCBiZSBmaWxlZCBhbmQgdGhlCi0jIGNydWZ0IHJlbW92ZWQsIGJ1dCBmb3Igbm93IHdlIHdoaXRlbGlzdCBzb21lIGtub3duIHNldC4KLSMKLSMgQWxzbyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyB3ZSdyZSBvbmx5IGNoZWNraW5nIHRoZSBjcnVmdCB3aGVuIHVzaW5nIGlway4KLSMgV2hlbiB1c2luZyBkZWIsIGFuZCBycG0gaXQgaXMgYSBiaXQgZGlmZmVyZW50IGFuZCB3ZSBjb3VsZCB0ZXN0IGFsbAotIyBvZiB0aGVtLCBidXQgdGhpcyB0ZXN0IGlzIG1vcmUgdG8gY2F0Y2ggaWYgb3RoZXIgcGFja2FnZXMgZ2V0IGFkZGVkIGJ5Ci0jIGRlZmF1bHQgb3RoZXIgdGhhbiB3aGF0IGlzIGluIFJPT1RGU19CT09UU1RSQVBfSU5TVEFMTC4KLSMKLWNsYXNzIENvbnRhaW5lckltYWdlVGVzdHMob2VTZWxmVGVzdCk6Ci0KLSAgICAjIFZlcmlmeSB0aGF0IHdoZW4gc3BlY2lmeWluZyBhIElNQUdFX1RZUEVERVBfIG9mIHRoZSBmb3JtICJmb28uYmFyIiB0aGF0Ci0gICAgIyB0aGUgY29udmVyc2lvbiB0eXBlIGJhciBnZXRzIGFkZGVkIGFzIGEgZGVwIGFzIHdlbGwKLSAgICBkZWYgdGVzdF9leHBlY3RlZF9maWxlcyhzZWxmKToKLQotICAgICAgICBkZWYgZ2V0X2VhY2hfcGF0aF9wYXJ0KHBhdGgpOgotICAgICAgICAgICAgaWYgcGF0aDoKLSAgICAgICAgICAgICAgICBwYXJ0ID0gWyAnLicgKyBwYXRoICsgJy8nIF0KLSAgICAgICAgICAgICAgICByZXN1bHQgPSBnZXRfZWFjaF9wYXRoX3BhcnQocGF0aC5yc3BsaXQoJy8nLCAxKVswXSkKLSAgICAgICAgICAgICAgICBpZiByZXN1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0ICsgcmVzdWx0Ci0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnQKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiJQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPSAibGludXgtZHVtbXkiCi1JTUFHRV9GU1RZUEVTID0gImNvbnRhaW5lciIKLVBBQ0tBR0VfQ0xBU1NFUyA9ICJwYWNrYWdlX2lwayIKLUlNQUdFX0ZFQVRVUkVTID0gIiIKLSIiIikKLQotICAgICAgICBiYnZhcnMgPSBnZXRfYmJfdmFycyhbJ2JpbmRpcicsICdzeXNjb25mZGlyJywgJ2xvY2Fsc3RhdGVkaXInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0RFUExPWV9ESVJfSU1BR0UnLCAnSU1BR0VfTElOS19OQU1FJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9J2NvbnRhaW5lci10ZXN0LWltYWdlJykKLSAgICAgICAgZXhwZWN0ZWRfZmlsZXMgPSBbCi0gICAgICAgICAgICAgICAgICAgICcuLycsCi0gICAgICAgICAgICAgICAgICAgICcue2JpbmRpcn0vdGhlYXBwJywKLSAgICAgICAgICAgICAgICAgICAgJy57c3lzY29uZmRpcn0vZGVmYXVsdC8nLAotICAgICAgICAgICAgICAgICAgICAnLntzeXNjb25mZGlyfS9kZWZhdWx0L3Bvc3RpbnN0JywKLSAgICAgICAgICAgICAgICAgICAgJy57c3lzY29uZmRpcn0vbGQuc28uY2FjaGUnLAotICAgICAgICAgICAgICAgICAgICAnLntzeXNjb25mZGlyfS90aW1lc3RhbXAnLAotICAgICAgICAgICAgICAgICAgICAnLntzeXNjb25mZGlyfS92ZXJzaW9uJywKLSAgICAgICAgICAgICAgICAgICAgJy4vcnVuLycsCi0gICAgICAgICAgICAgICAgICAgICcue2xvY2Fsc3RhdGVkaXJ9L2NhY2hlLycsCi0gICAgICAgICAgICAgICAgICAgICcue2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL2xkY29uZmlnLycsCi0gICAgICAgICAgICAgICAgICAgICcue2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL2xkY29uZmlnL2F1eC1jYWNoZScsCi0gICAgICAgICAgICAgICAgICAgICcue2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL29wa2cvJywKLSAgICAgICAgICAgICAgICAgICAgJy57bG9jYWxzdGF0ZWRpcn0vbGliLycsCi0gICAgICAgICAgICAgICAgICAgICcue2xvY2Fsc3RhdGVkaXJ9L2xpYi9vcGtnLycKLSAgICAgICAgICAgICAgICBdCi0KLSAgICAgICAgZXhwZWN0ZWRfZmlsZXMgPSBbIHguZm9ybWF0KGJpbmRpcj1iYnZhcnNbJ2JpbmRpciddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmRpcj1iYnZhcnNbJ3N5c2NvbmZkaXInXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2Fsc3RhdGVkaXI9YmJ2YXJzWydsb2NhbHN0YXRlZGlyJ10pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiBleHBlY3RlZF9maWxlcyBdCi0KLSAgICAgICAgIyBTaW5jZSB0YXIgbGlzdHMgYWxsIGRpcmVjdG9yaWVzIGluZGl2aWR1YWxseSwgbWFrZSBzdXJlIGVhY2ggZWxlbWVudAotICAgICAgICAjIGZyb20gYmluZGlyLCBzeXNjb25mZGlyLCBldGMgaXMgYWRkZWQKLSAgICAgICAgZXhwZWN0ZWRfZmlsZXMgKz0gZ2V0X2VhY2hfcGF0aF9wYXJ0KGJidmFyc1snYmluZGlyJ10pCi0gICAgICAgIGV4cGVjdGVkX2ZpbGVzICs9IGdldF9lYWNoX3BhdGhfcGFydChiYnZhcnNbJ3N5c2NvbmZkaXInXSkKLSAgICAgICAgZXhwZWN0ZWRfZmlsZXMgKz0gZ2V0X2VhY2hfcGF0aF9wYXJ0KGJidmFyc1snbG9jYWxzdGF0ZWRpciddKQotCi0gICAgICAgIGV4cGVjdGVkX2ZpbGVzID0gc29ydGVkKGV4cGVjdGVkX2ZpbGVzKQotCi0gICAgICAgICMgQnVpbGQgdGhlIGltYWdlIG9mIGNvdXJzZQotICAgICAgICBiaXRiYWtlKCdjb250YWluZXItdGVzdC1pbWFnZScpCi0KLSAgICAgICAgaW1hZ2UgPSBvcy5wYXRoLmpvaW4oYmJ2YXJzWydERVBMT1lfRElSX0lNQUdFJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJidmFyc1snSU1BR0VfTElOS19OQU1FJ10gKyAnLnRhci5iejInKQotCi0gICAgICAgICMgRW5zdXJlIHRoZSBmaWxlcyBpbiB0aGUgaW1hZ2UgYXJlIHdoYXQgd2UgZXhwZWN0Ci0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgidGFyIHRmIHt9IHwgc29ydCIuZm9ybWF0KGltYWdlKSwgc2hlbGw9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnNwbGl0KCdcbicpLCBleHBlY3RlZF9maWxlcykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2NvbnRleHQucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jb250ZXh0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllOTBkM2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9jb250ZXh0LnB5CkBAIC0wLDAgKzEsMjc5IEBACisjIENvcHlyaWdodCAoQykgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworaW1wb3J0IG9zCitpbXBvcnQgdGltZQoraW1wb3J0IGdsb2IKK2ltcG9ydCBzeXMKK2ltcG9ydCBpbXAKK2ltcG9ydCBzaWduYWwKK2Zyb20gc2h1dGlsIGltcG9ydCBjb3B5ZmlsZQorZnJvbSByYW5kb20gaW1wb3J0IGNob2ljZQorCitpbXBvcnQgb2VxYQorCitmcm9tIG9lcWEuY29yZS5jb250ZXh0IGltcG9ydCBPRVRlc3RDb250ZXh0LCBPRVRlc3RDb250ZXh0RXhlY3V0b3IKK2Zyb20gb2VxYS5jb3JlLmV4Y2VwdGlvbiBpbXBvcnQgT0VRQVByZVJ1biwgT0VRQVRlc3ROb3RGb3VuZAorCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgZ2V0X2JiX3ZhcnMsIGdldF90ZXN0X2xheWVyCisKK2NsYXNzIE9FU2VsZnRlc3RUZXN0Q29udGV4dChPRVRlc3RDb250ZXh0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGQ9Tm9uZSwgbG9nZ2VyPU5vbmUsIG1hY2hpbmVzPU5vbmUsIGNvbmZpZ19wYXRocz1Ob25lKToKKyAgICAgICAgc3VwZXIoT0VTZWxmdGVzdFRlc3RDb250ZXh0LCBzZWxmKS5fX2luaXRfXyh0ZCwgbG9nZ2VyKQorCisgICAgICAgIHNlbGYubWFjaGluZXMgPSBtYWNoaW5lcworICAgICAgICBzZWxmLmN1c3RvbW1hY2hpbmUgPSBOb25lCisgICAgICAgIHNlbGYuY29uZmlnX3BhdGhzID0gY29uZmlnX3BhdGhzCisKKyAgICBkZWYgcnVuVGVzdHMoc2VsZiwgbWFjaGluZT1Ob25lLCBza2lwcz1bXSk6CisgICAgICAgIGlmIG1hY2hpbmU6CisgICAgICAgICAgICBzZWxmLmN1c3RvbW1hY2hpbmUgPSBtYWNoaW5lCisgICAgICAgICAgICBpZiBtYWNoaW5lID09ICdyYW5kb20nOgorICAgICAgICAgICAgICAgIHNlbGYuY3VzdG9tbWFjaGluZSA9IGNob2ljZShzZWxmLm1hY2hpbmVzKQorICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygnUnVuIHRlc3RzIHdpdGggY3VzdG9tIE1BQ0hJTkUgc2V0IHRvOiAlcycgJSBcCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY3VzdG9tbWFjaGluZSkKKyAgICAgICAgcmV0dXJuIHN1cGVyKE9FU2VsZnRlc3RUZXN0Q29udGV4dCwgc2VsZikucnVuVGVzdHMoc2tpcHMpCisKKyAgICBkZWYgbGlzdFRlc3RzKHNlbGYsIGRpc3BsYXlfdHlwZSwgbWFjaGluZT1Ob25lKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKE9FU2VsZnRlc3RUZXN0Q29udGV4dCwgc2VsZikubGlzdFRlc3RzKGRpc3BsYXlfdHlwZSkKKworY2xhc3MgT0VTZWxmdGVzdFRlc3RDb250ZXh0RXhlY3V0b3IoT0VUZXN0Q29udGV4dEV4ZWN1dG9yKToKKyAgICBfY29udGV4dF9jbGFzcyA9IE9FU2VsZnRlc3RUZXN0Q29udGV4dAorICAgIF9zY3JpcHRfZXhlY3V0b3IgPSAnb2Utc2VsZnRlc3QnCisKKyAgICBuYW1lID0gJ29lLXNlbGZ0ZXN0JworICAgIGhlbHAgPSAnb2Utc2VsZnRlc3QgdGVzdCBjb21wb25lbnQnCisgICAgZGVzY3JpcHRpb24gPSAnRXhlY3V0ZXMgc2VsZnRlc3QgdGVzdHMnCisKKyAgICBkZWYgcmVnaXN0ZXJfY29tbWFuZHMoc2VsZiwgbG9nZ2VyLCBwYXJzZXIpOgorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKHJlcXVpcmVkPVRydWUpCisKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctYScsICctLXJ1bi1hbGwtdGVzdHMnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InJ1bl9hbGxfdGVzdHMiLAorICAgICAgICAgICAgICAgIGhlbHA9J1J1biBhbGwgKHVuaGlkZGVuKSB0ZXN0cycpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLVInLCAnLS1za2lwLXRlc3RzJywgcmVxdWlyZWQ9RmFsc2UsIGFjdGlvbj0nc3RvcmUnLAorICAgICAgICAgICAgICAgIG5hcmdzPScrJywgZGVzdD0ic2tpcHMiLCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgaGVscD0nUnVuIGFsbCAodW5oaWRkZW4pIHRlc3RzIGV4Y2VwdCB0aGUgb25lcyBzcGVjaWZpZWQuIEZvcm1hdCBzaG91bGQgYmUgPG1vZHVsZT5bLjxjbGFzcz5bLjx0ZXN0X21ldGhvZD5dXScpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXInLCAnLS1ydW4tdGVzdHMnLCByZXF1aXJlZD1GYWxzZSwgYWN0aW9uPSdzdG9yZScsCisgICAgICAgICAgICAgICAgbmFyZ3M9JysnLCBkZXN0PSJydW5fdGVzdHMiLCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgaGVscD0nU2VsZWN0IHdoYXQgdGVzdHMgdG8gcnVuIChtb2R1bGVzLCBjbGFzc2VzIG9yIHRlc3QgbWV0aG9kcykuIEZvcm1hdCBzaG91bGQgYmU6IDxtb2R1bGU+LjxjbGFzcz4uPHRlc3RfbWV0aG9kPicpCisKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctbScsICctLWxpc3QtbW9kdWxlcycsIHJlcXVpcmVkPUZhbHNlLAorICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgaGVscD0nTGlzdCBhbGwgYXZhaWxhYmxlIHRlc3QgbW9kdWxlcy4nKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tbGlzdC1jbGFzc2VzJywgcmVxdWlyZWQ9RmFsc2UsCisgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICBoZWxwPSdMaXN0IGFsbCBhdmFpbGFibGUgdGVzdCBjbGFzc2VzLicpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWwnLCAnLS1saXN0LXRlc3RzJywgcmVxdWlyZWQ9RmFsc2UsCisgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICBoZWxwPSdMaXN0IGFsbCBhdmFpbGFibGUgdGVzdHMuJykKKworICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW1hY2hpbmUnLCByZXF1aXJlZD1GYWxzZSwgY2hvaWNlcz1bJ3JhbmRvbScsICdhbGwnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdSdW4gdGVzdHMgb24gZGlmZmVyZW50IG1hY2hpbmVzIChyYW5kb20vYWxsKS4nKQorICAgICAgICAKKyAgICAgICAgcGFyc2VyLnNldF9kZWZhdWx0cyhmdW5jPXNlbGYucnVuKQorCisgICAgZGVmIF9nZXRfYXZhaWxhYmxlX21hY2hpbmVzKHNlbGYpOgorICAgICAgICBtYWNoaW5lcyA9IFtdCisKKyAgICAgICAgYmJwYXRoID0gc2VsZi50Y19rd2FyZ3NbJ2luaXQnXVsndGQnXVsnQkJQQVRIJ10uc3BsaXQoJzonKQorICAgIAorICAgICAgICBmb3IgcGF0aCBpbiBiYnBhdGg6CisgICAgICAgICAgICBmb3VuZF9tYWNoaW5lcyA9IGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4ocGF0aCwgJ2NvbmYnLCAnbWFjaGluZScsICcqLmNvbmYnKSkKKyAgICAgICAgICAgIGlmIGZvdW5kX21hY2hpbmVzOgorICAgICAgICAgICAgICAgIGZvciBpIGluIGZvdW5kX21hY2hpbmVzOgorICAgICAgICAgICAgICAgICAgICAjIGVnOiAnL2hvbWUvPHVzZXI+L3Bva3kvbWV0YS1pbnRlbC9jb25mL21hY2hpbmUvaW50ZWwtY29yZTItMzIuY29uZicKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZXMuYXBwZW5kKG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShpKSlbMF0pCisgICAgCisgICAgICAgIHJldHVybiBtYWNoaW5lcworCisgICAgZGVmIF9nZXRfY2FzZXNfcGF0aHMoc2VsZiwgYmJwYXRoKToKKyAgICAgICAgY2FzZXNfcGF0aHMgPSBbXQorICAgICAgICBmb3IgbGF5ZXIgaW4gYmJwYXRoOgorICAgICAgICAgICAgY2FzZXNfZGlyID0gb3MucGF0aC5qb2luKGxheWVyLCAnbGliJywgJ29lcWEnLCAnc2VsZnRlc3QnLCAnY2FzZXMnKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihjYXNlc19kaXIpOgorICAgICAgICAgICAgICAgIGNhc2VzX3BhdGhzLmFwcGVuZChjYXNlc19kaXIpCisgICAgICAgIHJldHVybiBjYXNlc19wYXRocworCisgICAgZGVmIF9wcm9jZXNzX2FyZ3Moc2VsZiwgbG9nZ2VyLCBhcmdzKToKKyAgICAgICAgYXJncy5vdXRwdXRfbG9nID0gJyVzLXJlc3VsdHMtJXMubG9nJyAlIChzZWxmLm5hbWUsCisgICAgICAgICAgICAgICAgdGltZS5zdHJmdGltZSgiJVklbSVkJUglTSVTIikpCisgICAgICAgIGFyZ3MudGVzdF9kYXRhX2ZpbGUgPSBOb25lCisgICAgICAgIGFyZ3MuQ0FTRVNfUEFUSFMgPSBOb25lCisKKyAgICAgICAgc3VwZXIoT0VTZWxmdGVzdFRlc3RDb250ZXh0RXhlY3V0b3IsIHNlbGYpLl9wcm9jZXNzX2FyZ3MobG9nZ2VyLCBhcmdzKQorCisgICAgICAgIGlmIGFyZ3MubGlzdF9tb2R1bGVzOgorICAgICAgICAgICAgYXJncy5saXN0X3Rlc3RzID0gJ21vZHVsZScKKyAgICAgICAgZWxpZiBhcmdzLmxpc3RfY2xhc3NlczoKKyAgICAgICAgICAgIGFyZ3MubGlzdF90ZXN0cyA9ICdjbGFzcycKKyAgICAgICAgZWxpZiBhcmdzLmxpc3RfdGVzdHM6CisgICAgICAgICAgICBhcmdzLmxpc3RfdGVzdHMgPSAnbmFtZScKKworICAgICAgICBzZWxmLnRjX2t3YXJnc1snaW5pdCddWyd0ZCddID0gZ2V0X2JiX3ZhcnMoKQorICAgICAgICBzZWxmLnRjX2t3YXJnc1snaW5pdCddWydtYWNoaW5lcyddID0gc2VsZi5fZ2V0X2F2YWlsYWJsZV9tYWNoaW5lcygpCisKKyAgICAgICAgYnVpbGRkaXIgPSBvcy5lbnZpcm9uLmdldCgiQlVJTERESVIiKQorICAgICAgICBzZWxmLnRjX2t3YXJnc1snaW5pdCddWydjb25maWdfcGF0aHMnXSA9IHt9CisgICAgICAgIHNlbGYudGNfa3dhcmdzWydpbml0J11bJ2NvbmZpZ19wYXRocyddWyd0ZXN0bGF5ZXJfcGF0aCddID0gXAorICAgICAgICAgICAgICAgIGdldF90ZXN0X2xheWVyKCkKKyAgICAgICAgc2VsZi50Y19rd2FyZ3NbJ2luaXQnXVsnY29uZmlnX3BhdGhzJ11bJ2J1aWxkZGlyJ10gPSBidWlsZGRpcgorICAgICAgICBzZWxmLnRjX2t3YXJnc1snaW5pdCddWydjb25maWdfcGF0aHMnXVsnbG9jYWxjb25mJ10gPSBcCisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGJ1aWxkZGlyLCAiY29uZi9sb2NhbC5jb25mIikKKyAgICAgICAgc2VsZi50Y19rd2FyZ3NbJ2luaXQnXVsnY29uZmlnX3BhdGhzJ11bJ2xvY2FsY29uZl9iYWNrdXAnXSA9IFwKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICJjb25mL2xvY2FsLmNvbmYub3JpZyIpCisgICAgICAgIHNlbGYudGNfa3dhcmdzWydpbml0J11bJ2NvbmZpZ19wYXRocyddWydsb2NhbGNvbmZfY2xhc3NfYmFja3VwJ10gPSBcCisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGJ1aWxkZGlyLCAiY29uZi9sb2NhbC5jb25mLmJrIikKKyAgICAgICAgc2VsZi50Y19rd2FyZ3NbJ2luaXQnXVsnY29uZmlnX3BhdGhzJ11bJ2JibGF5ZXJzJ10gPSBcCisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGJ1aWxkZGlyLCAiY29uZi9iYmxheWVycy5jb25mIikKKyAgICAgICAgc2VsZi50Y19rd2FyZ3NbJ2luaXQnXVsnY29uZmlnX3BhdGhzJ11bJ2JibGF5ZXJzX2JhY2t1cCddID0gXAorICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihidWlsZGRpciwgImNvbmYvYmJsYXllcnMuY29uZi5vcmlnIikKKyAgICAgICAgc2VsZi50Y19rd2FyZ3NbJ2luaXQnXVsnY29uZmlnX3BhdGhzJ11bJ2JibGF5ZXJzX2NsYXNzX2JhY2t1cCddID0gXAorICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihidWlsZGRpciwgImNvbmYvYmJsYXllcnMuY29uZi5iayIpCisKKyAgICAgICAgY29weWZpbGUoc2VsZi50Y19rd2FyZ3NbJ2luaXQnXVsnY29uZmlnX3BhdGhzJ11bJ2xvY2FsY29uZiddLAorICAgICAgICAgICAgICAgIHNlbGYudGNfa3dhcmdzWydpbml0J11bJ2NvbmZpZ19wYXRocyddWydsb2NhbGNvbmZfYmFja3VwJ10pCisgICAgICAgIGNvcHlmaWxlKHNlbGYudGNfa3dhcmdzWydpbml0J11bJ2NvbmZpZ19wYXRocyddWydiYmxheWVycyddLCAKKyAgICAgICAgICAgICAgICBzZWxmLnRjX2t3YXJnc1snaW5pdCddWydjb25maWdfcGF0aHMnXVsnYmJsYXllcnNfYmFja3VwJ10pCisKKyAgICAgICAgc2VsZi50Y19rd2FyZ3NbJ3J1biddWydza2lwcyddID0gYXJncy5za2lwcworCisgICAgZGVmIF9wcmVfcnVuKHNlbGYpOgorICAgICAgICBkZWYgX2NoZWNrX3JlcXVpcmVkX2Vudl92YXJpYWJsZXModmFycyk6CisgICAgICAgICAgICBmb3IgdmFyIGluIHZhcnM6CisgICAgICAgICAgICAgICAgaWYgbm90IG9zLmVudmlyb24uZ2V0KHZhcik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYudGMubG9nZ2VyLmVycm9yKCIlcyBpcyBub3Qgc2V0LiBEaWQgeW91IGZvcmdldCB0byBzb3VyY2UgeW91ciBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQ/IiAlIHZhcikKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT0VRQVByZVJ1bgorCisgICAgICAgIGRlZiBfY2hlY2tfcHJlc2VuY2VfbWV0YV9zZWxmdGVzdCgpOgorICAgICAgICAgICAgYnVpbGRkaXIgPSBvcy5lbnZpcm9uLmdldCgiQlVJTERESVIiKQorICAgICAgICAgICAgaWYgb3MuZ2V0Y3dkKCkgIT0gYnVpbGRkaXI6CisgICAgICAgICAgICAgICAgc2VsZi50Yy5sb2dnZXIuaW5mbygiQ2hhbmdpbmcgY3dkIHRvICVzIiAlIGJ1aWxkZGlyKQorICAgICAgICAgICAgICAgIG9zLmNoZGlyKGJ1aWxkZGlyKQorCisgICAgICAgICAgICBpZiBub3QgIm1ldGEtc2VsZnRlc3QiIGluIHNlbGYudGMudGRbIkJCTEFZRVJTIl06CisgICAgICAgICAgICAgICAgc2VsZi50Yy5sb2dnZXIud2FybigibWV0YS1zZWxmdGVzdCBsYXllciBub3QgZm91bmQgaW4gQkJMQVlFUlMsIGFkZGluZyBpdCIpCisgICAgICAgICAgICAgICAgbWV0YV9zZWxmdGVzdGRpciA9IG9zLnBhdGguam9pbigKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50Yy50ZFsiQkJMQVlFUlNfRkVUQ0hfRElSIl0sICdtZXRhLXNlbGZ0ZXN0JykKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKG1ldGFfc2VsZnRlc3RkaXIpOgorICAgICAgICAgICAgICAgICAgICBydW5DbWQoImJpdGJha2UtbGF5ZXJzIGFkZC1sYXllciAlcyIgJW1ldGFfc2VsZnRlc3RkaXIpCisgICAgICAgICAgICAgICAgICAgICMgcmVsb2FkIGRhdGEgaXMgbmVlZGVkIGJlY2F1c2UgYSBtZXRhLXNlbGZ0ZXN0IGxheWVyIHdhcyBhZGQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50Yy50ZCA9IGdldF9iYl92YXJzKCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50Yy5jb25maWdfcGF0aHNbJ3Rlc3RsYXllcl9wYXRoJ10gPSBnZXRfdGVzdF9sYXllcigpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50Yy5sb2dnZXIuZXJyb3IoImNvdWxkIG5vdCBsb2NhdGUgbWV0YS1zZWxmdGVzdCBpbjpcbiVzIiAlIG1ldGFfc2VsZnRlc3RkaXIpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9FUUFQcmVSdW4KKworICAgICAgICBkZWYgX2FkZF9sYXllcl9saWJzKCk6CisgICAgICAgICAgICBiYnBhdGggPSBzZWxmLnRjLnRkWydCQlBBVEgnXS5zcGxpdCgnOicpCisgICAgICAgICAgICBsYXllcl9saWJkaXJzID0gW3AgZm9yIHAgaW4gKG9zLnBhdGguam9pbihsLCAnbGliJykgXAorICAgICAgICAgICAgICAgICAgICBmb3IgbCBpbiBiYnBhdGgpIGlmIG9zLnBhdGguZXhpc3RzKHApXQorICAgICAgICAgICAgaWYgbGF5ZXJfbGliZGlyczoKKyAgICAgICAgICAgICAgICBzZWxmLnRjLmxvZ2dlci5pbmZvKCJBZGRpbmcgbGF5ZXIgbGlicmFyaWVzOiIpCisgICAgICAgICAgICAgICAgZm9yIGwgaW4gbGF5ZXJfbGliZGlyczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50Yy5sb2dnZXIuaW5mbygiXHQlcyIgJSBsKQorCisgICAgICAgICAgICAgICAgc3lzLnBhdGguZXh0ZW5kKGxheWVyX2xpYmRpcnMpCisgICAgICAgICAgICAgICAgaW1wLnJlbG9hZChvZXFhLnNlbGZ0ZXN0KQorCisgICAgICAgIF9jaGVja19yZXF1aXJlZF9lbnZfdmFyaWFibGVzKFsiQlVJTERESVIiXSkKKyAgICAgICAgX2NoZWNrX3ByZXNlbmNlX21ldGFfc2VsZnRlc3QoKQorCisgICAgICAgIGlmICJidWlsZGhpc3RvcnkuYmJjbGFzcyIgaW4gc2VsZi50Yy50ZFsiQkJJTkNMVURFRCJdOgorICAgICAgICAgICAgc2VsZi50Yy5sb2dnZXIuZXJyb3IoIllvdSBoYXZlIGJ1aWxkaGlzdG9yeSBlbmFibGVkIGFscmVhZHkgYW5kIHRoaXMgaXNuJ3QgcmVjb21tZW5kZWQgZm9yIHNlbGZ0ZXN0LCBwbGVhc2UgZGlzYWJsZSBpdCBmaXJzdC4iKQorICAgICAgICAgICAgcmFpc2UgT0VRQVByZVJ1bgorCisgICAgICAgIGlmICJQUlNFUlZfSE9TVCIgaW4gc2VsZi50Yy50ZDoKKyAgICAgICAgICAgIHNlbGYudGMubG9nZ2VyLmVycm9yKCJQbGVhc2UgdW5zZXQgUFJTRVJWX0hPU1QgaW4gb3JkZXIgdG8gcnVuIG9lLXNlbGZ0ZXN0IikKKyAgICAgICAgICAgIHJhaXNlIE9FUUFQcmVSdW4KKworICAgICAgICBpZiAiU0FOSVRZX1RFU1RFRF9ESVNUUk9TIiBpbiBzZWxmLnRjLnRkOgorICAgICAgICAgICAgc2VsZi50Yy5sb2dnZXIuZXJyb3IoIlBsZWFzZSB1bnNldCBTQU5JVFlfVEVTVEVEX0RJU1RST1MgaW4gb3JkZXIgdG8gcnVuIG9lLXNlbGZ0ZXN0IikKKyAgICAgICAgICAgIHJhaXNlIE9FUUFQcmVSdW4KKworICAgICAgICBfYWRkX2xheWVyX2xpYnMoKQorCisgICAgICAgIHNlbGYudGMubG9nZ2VyLmluZm8oIlJ1bm5pbmcgYml0YmFrZSAtcCIpCisgICAgICAgIHJ1bkNtZCgiYml0YmFrZSAtcCIpCisKKyAgICBkZWYgX2ludGVybmFsX3J1bihzZWxmLCBsb2dnZXIsIGFyZ3MpOgorICAgICAgICBzZWxmLm1vZHVsZV9wYXRocyA9IHNlbGYuX2dldF9jYXNlc19wYXRocygKKyAgICAgICAgICAgICAgICBzZWxmLnRjX2t3YXJnc1snaW5pdCddWyd0ZCddWydCQlBBVEgnXS5zcGxpdCgnOicpKQorCisgICAgICAgIHNlbGYudGMgPSBzZWxmLl9jb250ZXh0X2NsYXNzKCoqc2VsZi50Y19rd2FyZ3NbJ2luaXQnXSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi50Yy5sb2FkVGVzdHMoc2VsZi5tb2R1bGVfcGF0aHMsICoqc2VsZi50Y19rd2FyZ3NbJ2xvYWQnXSkKKyAgICAgICAgZXhjZXB0IE9FUUFUZXN0Tm90Rm91bmQgYXMgZXg6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoZXgpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIGlmIGFyZ3MubGlzdF90ZXN0czoKKyAgICAgICAgICAgIHJjID0gc2VsZi50Yy5saXN0VGVzdHMoYXJncy5saXN0X3Rlc3RzLCAqKnNlbGYudGNfa3dhcmdzWydsaXN0J10pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9wcmVfcnVuKCkKKyAgICAgICAgICAgIHJjID0gc2VsZi50Yy5ydW5UZXN0cygqKnNlbGYudGNfa3dhcmdzWydydW4nXSkKKyAgICAgICAgICAgIHJjLmxvZ0RldGFpbHMoKQorICAgICAgICAgICAgcmMubG9nU3VtbWFyeShzZWxmLm5hbWUpCisKKyAgICAgICAgcmV0dXJuIHJjCisKKyAgICBkZWYgX3NpZ25hbF9jbGVhbl9oYW5kbGVyKHNlbGYsIHNpZ251bSwgZnJhbWUpOgorICAgICAgICBzeXMuZXhpdCgxKQorICAgIAorICAgIGRlZiBydW4oc2VsZiwgbG9nZ2VyLCBhcmdzKToKKyAgICAgICAgc2VsZi5fcHJvY2Vzc19hcmdzKGxvZ2dlciwgYXJncykKKworICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCBzZWxmLl9zaWduYWxfY2xlYW5faGFuZGxlcikKKworICAgICAgICByYyA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgYXJncy5tYWNoaW5lOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdDdXN0b20gbWFjaGluZSBtb2RlIGVuYWJsZWQuIE1BQ0hJTkUgc2V0IHRvICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLm1hY2hpbmUpCisKKyAgICAgICAgICAgICAgICBpZiBhcmdzLm1hY2hpbmUgPT0gJ2FsbCc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBbXQorICAgICAgICAgICAgICAgICAgICBmb3IgbSBpbiBzZWxmLnRjX2t3YXJnc1snaW5pdCddWydtYWNoaW5lcyddOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50Y19rd2FyZ3NbJ3J1biddWydtYWNoaW5lJ10gPSBtCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChzZWxmLl9pbnRlcm5hbF9ydW4obG9nZ2VyLCBhcmdzKSkKKworICAgICAgICAgICAgICAgICAgICAgICAgIyBYWFg6IHRoZSBvZS1zZWxmdGVzdCBzY3JpcHQgb25seSBuZWVkcyB0byBrbm93IGlmIG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBtYWNoaW5lIHJ1biBmYWlscworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHIgaW4gcmVzdWx0czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYyA9IHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgci53YXNTdWNjZXNzZnVsKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnRjX2t3YXJnc1sncnVuJ11bJ21hY2hpbmUnXSA9IGFyZ3MubWFjaGluZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5faW50ZXJuYWxfcnVuKGxvZ2dlciwgYXJncykKKworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnRjX2t3YXJnc1sncnVuJ11bJ21hY2hpbmUnXSA9IGFyZ3MubWFjaGluZQorICAgICAgICAgICAgICAgIHJjID0gc2VsZi5faW50ZXJuYWxfcnVuKGxvZ2dlciwgYXJncykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbmZpZ19wYXRocyA9IHNlbGYudGNfa3dhcmdzWydpbml0J11bJ2NvbmZpZ19wYXRocyddCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb25maWdfcGF0aHNbJ2xvY2FsY29uZl9iYWNrdXAnXSk6CisgICAgICAgICAgICAgICAgY29weWZpbGUoY29uZmlnX3BhdGhzWydsb2NhbGNvbmZfYmFja3VwJ10sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfcGF0aHNbJ2xvY2FsY29uZiddKQorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShjb25maWdfcGF0aHNbJ2xvY2FsY29uZl9iYWNrdXAnXSkKKworICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29uZmlnX3BhdGhzWydiYmxheWVyc19iYWNrdXAnXSk6CisgICAgICAgICAgICAgICAgY29weWZpbGUoY29uZmlnX3BhdGhzWydiYmxheWVyc19iYWNrdXAnXSwgCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfcGF0aHNbJ2JibGF5ZXJzJ10pCisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGNvbmZpZ19wYXRoc1snYmJsYXllcnNfYmFja3VwJ10pCisKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNvbmZpZ19wYXRoc1snbG9jYWxjb25mX2NsYXNzX2JhY2t1cCddKToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoY29uZmlnX3BhdGhzWydsb2NhbGNvbmZfY2xhc3NfYmFja3VwJ10pCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb25maWdfcGF0aHNbJ2JibGF5ZXJzX2NsYXNzX2JhY2t1cCddKToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoY29uZmlnX3BhdGhzWydiYmxheWVyc19jbGFzc19iYWNrdXAnXSkKKworICAgICAgICAgICAgb3V0cHV0X2xpbmsgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGFyZ3Mub3V0cHV0X2xvZyksCisgICAgICAgICAgICAgICAgICAgICIlcy1yZXN1bHRzLmxvZyIgJSBzZWxmLm5hbWUpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvdXRwdXRfbGluayk6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKG91dHB1dF9saW5rKQorICAgICAgICAgICAgb3Muc3ltbGluayhhcmdzLm91dHB1dF9sb2csIG91dHB1dF9saW5rKQorCisgICAgICAgIHJldHVybiByYworCitfZXhlY3V0b3JfY2xhc3MgPSBPRVNlbGZ0ZXN0VGVzdENvbnRleHRFeGVjdXRvcgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvZGV2dG9vbC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2RldnRvb2wucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MDQ4NjYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvZGV2dG9vbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE2OTYgKzAsMCBAQAotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgb3MKLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgcmUKLWltcG9ydCBzaHV0aWwKLWltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IGdsb2IKLWltcG9ydCBmbm1hdGNoCi0KLWltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKLWZyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Ci1mcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgY3JlYXRlX3RlbXBfbGF5ZXIKLWZyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgZ2V0X2JiX3ZhcnMsIHJ1bnFlbXUsIGdldF90ZXN0X2xheWVyCi1mcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKLQotY2xhc3MgRGV2dG9vbEJhc2Uob2VTZWxmVGVzdCk6Ci0KLSAgICBkZWYgX3Rlc3RfcmVjaXBlX2NvbnRlbnRzKHNlbGYsIHJlY2lwZWZpbGUsIGNoZWNrdmFycywgY2hlY2tpbmhlcml0cyk6Ci0gICAgICAgIHdpdGggb3BlbihyZWNpcGVmaWxlLCAncicpIGFzIGY6Ci0gICAgICAgICAgICBpbnZhciA9IE5vbmUKLSAgICAgICAgICAgIGludmFsdWUgPSBOb25lCi0gICAgICAgICAgICBmb3IgbGluZSBpbiBmOgotICAgICAgICAgICAgICAgIHZhciA9IE5vbmUKLSAgICAgICAgICAgICAgICBpZiBpbnZhcjoKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBsaW5lLnN0cmlwKCkuc3RyaXAoJyInKQotICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZS5lbmRzd2l0aCgnXFwnKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGludmFsdWUgKz0gJyAnICsgdmFsdWVbOi0xXS5zdHJpcCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgaW52YWx1ZSArPSAnICcgKyB2YWx1ZS5zdHJpcCgpCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgPSBpbnZhcgotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnZhciA9IE5vbmUKLSAgICAgICAgICAgICAgICBlbGlmICc9JyBpbiBsaW5lOgotICAgICAgICAgICAgICAgICAgICBzcGxpdGxpbmUgPSBsaW5lLnNwbGl0KCc9JywgMSkKLSAgICAgICAgICAgICAgICAgICAgdmFyID0gc3BsaXRsaW5lWzBdLnJzdHJpcCgpCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc3BsaXRsaW5lWzFdLnN0cmlwKCkuc3RyaXAoJyInKQotICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZS5lbmRzd2l0aCgnXFwnKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGludmFsdWUgPSB2YWx1ZVs6LTFdLnN0cmlwKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGludmFyID0gdmFyCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCdpbmhlcml0ICcpOgotICAgICAgICAgICAgICAgICAgICBpbmhlcml0cyA9IGxpbmUuc3BsaXQoKVsxOl0KLQotICAgICAgICAgICAgICAgIGlmIHZhciBhbmQgdmFyIGluIGNoZWNrdmFyczoKLSAgICAgICAgICAgICAgICAgICAgbmVlZHZhbHVlID0gY2hlY2t2YXJzLnBvcCh2YXIpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5lZWR2YWx1ZSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdWYXJpYWJsZSAlcyBzaG91bGQgbm90IGFwcGVhciBpbiByZWNpcGUsIGJ1dCB2YWx1ZSBpcyBiZWluZyBzZXQgdG8gIiVzIicgJSAodmFyLCB2YWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobmVlZHZhbHVlLCBzZXQpOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdmFyID09ICdMSUNFTlNFJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNldCh2YWx1ZS5zcGxpdCgnICYgJykpCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc2V0KHZhbHVlLnNwbGl0KCkpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsIG5lZWR2YWx1ZSwgJ3ZhbHVlcyBmb3IgJXMgZG8gbm90IG1hdGNoJyAlIHZhcikKLQotCi0gICAgICAgIG1pc3Npbmd2YXJzID0ge30KLSAgICAgICAgZm9yIHZhciwgdmFsdWUgaW4gY2hlY2t2YXJzLml0ZW1zKCk6Ci0gICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBtaXNzaW5ndmFyc1t2YXJdID0gdmFsdWUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaXNzaW5ndmFycywge30sICdTb21lIGV4cGVjdGVkIHZhcmlhYmxlcyBub3QgZm91bmQgaW4gcmVjaXBlOiAlcycgJSBjaGVja3ZhcnMpCi0KLSAgICAgICAgZm9yIGluaGVyaXQgaW4gY2hlY2tpbmhlcml0czoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaW5oZXJpdCwgaW5oZXJpdHMsICdNaXNzaW5nIGluaGVyaXQgb2YgJXMnICUgaW5oZXJpdCkKLQotICAgIGRlZiBfY2hlY2tfYmJhcHBlbmQoc2VsZiwgdGVzdHJlY2lwZSwgcmVjaXBlZmlsZSwgYXBwZW5kZGlyKToKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LWFwcGVuZHMnLCBjd2Q9c2VsZi5idWlsZGRpcikKLSAgICAgICAgcmVzdWx0bGluZXMgPSByZXN1bHQub3V0cHV0LnNwbGl0bGluZXMoKQotICAgICAgICBpbnJlY2lwZSA9IEZhbHNlCi0gICAgICAgIGJiYXBwZW5kcyA9IFtdCi0gICAgICAgIGJiYXBwZW5kZmlsZSA9IE5vbmUKLSAgICAgICAgZm9yIGxpbmUgaW4gcmVzdWx0bGluZXM6Ci0gICAgICAgICAgICBpZiBpbnJlY2lwZToKLSAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyAnKToKLSAgICAgICAgICAgICAgICAgICAgYmJhcHBlbmRzLmFwcGVuZChsaW5lLnN0cmlwKCkpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGVsaWYgbGluZSA9PSAnJXM6JyAlIG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSk6Ci0gICAgICAgICAgICAgICAgaW5yZWNpcGUgPSBUcnVlCi0gICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGxlbihiYmFwcGVuZHMpLCAyLCAnJXMgcmVjaXBlIGlzIGJlaW5nIGJiYXBwZW5kZWQgYnkgYW5vdGhlciBsYXllciAtIGJiYXBwZW5kcyBmb3VuZDpcbiAgJXMnICUgKHRlc3RyZWNpcGUsICdcbiAgJy5qb2luKGJiYXBwZW5kcykpKQotICAgICAgICBmb3IgYmJhcHBlbmQgaW4gYmJhcHBlbmRzOgotICAgICAgICAgICAgaWYgYmJhcHBlbmQuc3RhcnRzd2l0aChhcHBlbmRkaXIpOgotICAgICAgICAgICAgICAgIGJiYXBwZW5kZmlsZSA9IGJiYXBwZW5kCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgnYmJhcHBlbmQgZm9yIHJlY2lwZSAlcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGNyZWF0ZWQgaW4gdGVzdCBsYXllcicgJSB0ZXN0cmVjaXBlKQotICAgICAgICByZXR1cm4gYmJhcHBlbmRmaWxlCi0KLSAgICBkZWYgX2NyZWF0ZV90ZW1wX2xheWVyKHNlbGYsIHRlbXBsYXllcmRpciwgYWRkbGF5ZXIsIHRlbXBsYXllcm5hbWUsIHByaW9yaXR5PTk5OSwgcmVjaXBlcGF0aHNwZWM9J3JlY2lwZXMtKi8qJyk6Ci0gICAgICAgIGNyZWF0ZV90ZW1wX2xheWVyKHRlbXBsYXllcmRpciwgdGVtcGxheWVybmFtZSwgcHJpb3JpdHksIHJlY2lwZXBhdGhzcGVjKQotICAgICAgICBpZiBhZGRsYXllcjoKLSAgICAgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAlcyB8fCB0cnVlJyAlIHRlbXBsYXllcmRpcikKLSAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgYWRkLWxheWVyICVzJyAlIHRlbXBsYXllcmRpciwgY3dkPXNlbGYuYnVpbGRkaXIpCi0KLSAgICBkZWYgX3Byb2Nlc3NfbHNfb3V0cHV0KHNlbGYsIG91dHB1dCk6Ci0gICAgICAgICIiIgotICAgICAgICBDb252ZXJ0IGxzIC1sIG91dHB1dCB0byBhIGZvcm1hdCB3ZSBjYW4gcmVhc29uYWJseSBjb21wYXJlIGZyb20gb25lIGNvbnRleHQKLSAgICAgICAgdG8gYW5vdGhlciAoZS5nLiBmcm9tIGhvc3QgdG8gdGFyZ2V0KQotICAgICAgICAiIiIKLSAgICAgICAgZmlsZWxpc3QgPSBbXQotICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXRsaW5lcygpOgotICAgICAgICAgICAgc3BsaXRsaW5lID0gbGluZS5zcGxpdCgpCi0gICAgICAgICAgICBpZiBsZW4oc3BsaXRsaW5lKSA8IDg6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdfcHJvY2Vzc19sc19vdXRwdXQ6IGludmFsaWQgb3V0cHV0IGxpbmU6ICVzJyAlIGxpbmUpCi0gICAgICAgICAgICAjIFJlbW92ZSB0cmFpbGluZyAuIG9uIHBlcm1zCi0gICAgICAgICAgICBzcGxpdGxpbmVbMF0gPSBzcGxpdGxpbmVbMF0ucnN0cmlwKCcuJykKLSAgICAgICAgICAgICMgUmVtb3ZlIGxlYWRpbmcgLiBvbiBwYXRocwotICAgICAgICAgICAgc3BsaXRsaW5lWy0xXSA9IHNwbGl0bGluZVstMV0ubHN0cmlwKCcuJykKLSAgICAgICAgICAgICMgRHJvcCBmaWVsZHMgd2UgZG9uJ3Qgd2FudCB0byBjb21wYXJlCi0gICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzddCi0gICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzZdCi0gICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzVdCi0gICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzRdCi0gICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzFdCi0gICAgICAgICAgICBmaWxlbGlzdC5hcHBlbmQoJyAnLmpvaW4oc3BsaXRsaW5lKSkKLSAgICAgICAgcmV0dXJuIGZpbGVsaXN0Ci0KLQotY2xhc3MgRGV2dG9vbFRlc3RzKERldnRvb2xCYXNlKToKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBzZXRVcENsYXNzKGNscyk6Ci0gICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhbJ1RPUERJUicsICdTU1RBVEVfRElSJ10pCi0gICAgICAgIGNscy5vcmlnaW5hbF9zc3RhdGUgPSBiYl92YXJzWydTU1RBVEVfRElSJ10KLSAgICAgICAgY2xzLmRldnRvb2xfc3N0YXRlID0gb3MucGF0aC5qb2luKGJiX3ZhcnNbJ1RPUERJUiddLCAnc3N0YXRlX2RldnRvb2wnKQotICAgICAgICBjbHMuc3N0YXRlX2NvbmYgID0gJ1NTVEFURV9ESVIgPSAiJXMiXG4nICUgY2xzLmRldnRvb2xfc3N0YXRlCi0gICAgICAgIGNscy5zc3RhdGVfY29uZiArPSAoJ1NTVEFURV9NSVJST1JTICs9ICJmaWxlOi8vLiogZmlsZTovLy8lcy9QQVRIIlxuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgY2xzLm9yaWdpbmFsX3NzdGF0ZSkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6Ci0gICAgICAgIGNscy5sb2cuZGVidWcoJ0RlbGV0aW5nIGRldnRvb2wgc3N0YXRlIGNhY2hlIG9uICVzJyAlIGNscy5kZXZ0b29sX3NzdGF0ZSkKLSAgICAgICAgcnVuQ21kKCdybSAtcmYgJXMnICUgY2xzLmRldnRvb2xfc3N0YXRlKQotCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICAiIiJUZXN0IGNhc2Ugc2V0dXAgZnVuY3Rpb24iIiIKLSAgICAgICAgc3VwZXIoRGV2dG9vbFRlc3RzLCBzZWxmKS5zZXRVcCgpCi0gICAgICAgIHNlbGYud29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHNlbGYud29ya3NwYWNlZGlyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAndW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCi0gICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhzZWxmLnNzdGF0ZV9jb25mKQotCi0gICAgZGVmIF9jaGVja19zcmNfcmVwbyhzZWxmLCByZXBvX2Rpcik6Ci0gICAgICAgICIiIkNoZWNrIHNyY3RyZWUgZ2l0IHJlcG9zaXRvcnkiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHJlcG9fZGlyLCAnLmdpdCcpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICdnaXQgcmVwb3NpdG9yeSBmb3IgZXh0ZXJuYWwgc291cmNlIHRyZWUgbm90IGZvdW5kJykKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluJywgY3dkPXJlcG9fZGlyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ0NyZWF0ZWQgZ2l0IHJlcG8gaXMgbm90IGNsZWFuJykKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3ltYm9saWMtcmVmIEhFQUQnLCBjd2Q9cmVwb19kaXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAicmVmcy9oZWFkcy9kZXZ0b29sIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAnV3JvbmcgYnJhbmNoIGluIGdpdCByZXBvJykKLQotICAgIGRlZiBfY2hlY2tfcmVwb19zdGF0dXMoc2VsZiwgcmVwb19kaXIsIGV4cGVjdGVkX3N0YXR1cyk6Ci0gICAgICAgICIiIkNoZWNrIHRoZSB3b3JrdHJlZSBzdGF0dXMgb2YgYSByZXBvc2l0b3J5IiIiCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAuIC0tcG9yY2VsYWluJywKLSAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD1yZXBvX2RpcikKLSAgICAgICAgZm9yIGxpbmUgaW4gcmVzdWx0Lm91dHB1dC5zcGxpdGxpbmVzKCk6Ci0gICAgICAgICAgICBmb3IgaW5kLCAoZl9zdGF0dXMsIGZuX3JlKSBpbiBlbnVtZXJhdGUoZXhwZWN0ZWRfc3RhdHVzKToKLSAgICAgICAgICAgICAgICBpZiByZS5tYXRjaChmbl9yZSwgbGluZVszOl0pOgotICAgICAgICAgICAgICAgICAgICBpZiBmX3N0YXR1cyAhPSBsaW5lWzoyXToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5leHBlY3RlZCBzdGF0dXMgaW4gbGluZTogJXMnICUgbGluZSkKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfc3RhdHVzLnBvcChpbmQpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5leHBlY3RlZCBtb2RpZmllZCBmaWxlIGluIGxpbmU6ICVzJyAlIGxpbmUpCi0gICAgICAgIGlmIGV4cGVjdGVkX3N0YXR1czoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgnTWlzc2luZyBmaWxlIGNoYW5nZXM6ICVzJyAlIGV4cGVjdGVkX3N0YXR1cykKLQotICAgIEB0ZXN0Y2FzZSgxMTU4KQotICAgIGRlZiB0ZXN0X2NyZWF0ZV93b3Jrc3BhY2Uoc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucwotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCcvd29ya3NwYWNlJyBub3QgaW4gcmVzdWx0Lm91dHB1dCwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgbGF5ZXIgaW4gYmJsYXllcnMuY29uZicpCi0gICAgICAgICMgVHJ5IGNyZWF0aW5nIGEgd29ya3NwYWNlIGxheWVyIHdpdGggYSBzcGVjaWZpYyBwYXRoCi0gICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgY3JlYXRlLXdvcmtzcGFjZSAlcycgJSB0ZW1wZGlyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHRlbXBkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksIG1zZyA9ICJObyB3b3Jrc3BhY2UgY3JlYXRlZC4gZGV2dG9vbCBvdXRwdXQ6ICVzICIgJSByZXN1bHQub3V0cHV0KQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbih0ZW1wZGlyLCByZXN1bHQub3V0cHV0KQotICAgICAgICAjIFRyeSBjcmVhdGluZyBhIHdvcmtzcGFjZSBsYXllciB3aXRoIHRoZSBkZWZhdWx0IHBhdGgKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLndvcmtzcGFjZWRpcikKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGNyZWF0ZS13b3Jrc3BhY2UnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCBtc2cgPSAiTm8gd29ya3NwYWNlIGNyZWF0ZWQuIGRldnRvb2wgb3V0cHV0OiAlcyAiICUgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LWxheWVycycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odGVtcGRpciwgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLndvcmtzcGFjZWRpciwgcmVzdWx0Lm91dHB1dCkKLQotICAgIEB0ZXN0Y2FzZSgxMTU5KQotICAgIGRlZiB0ZXN0X2RldnRvb2xfYWRkKHNlbGYpOgotICAgICAgICAjIEZldGNoIHNvdXJjZQotICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKLSAgICAgICAgdXJsID0gJ2h0dHA6Ly93d3cuaXZhcmNoLmNvbS9wcm9ncmFtcy9zb3VyY2VzL3B2LTEuNS4zLnRhci5iejInCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnd2dldCAlcycgJSB1cmwsIGN3ZD10ZW1wZGlyKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3RhciB4ZnYgcHYtMS41LjMudGFyLmJ6MicsIGN3ZD10ZW1wZGlyKQotICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ3B2LTEuNS4zJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzcmNkaXIsICdjb25maWd1cmUnKSksICdVbmFibGUgdG8gZmluZCBjb25maWd1cmUgc2NyaXB0IGluIHNvdXJjZSBkaXJlY3RvcnknKQotICAgICAgICAjIFRlc3QgZGV2dG9vbCBhZGQKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLndvcmtzcGFjZWRpcikKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbnNzdGF0ZSBwdicpCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBhZGQgcHYgJXMnICUgc3JjZGlyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZCcpCi0gICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cwotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbigncHYnLCByZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKHNyY2RpciwgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgIyBDbGVhbiB1cCBhbnl0aGluZyBpbiB0aGUgd29ya2Rpci9zeXNyb290L3NzdGF0ZSBjYWNoZSAoaGF2ZSB0byBkbyB0aGlzICphZnRlciogZGV2dG9vbCBhZGQgc2luY2UgdGhlIHJlY2lwZSBvbmx5IGV4aXN0cyB0aGVuKQotICAgICAgICBiaXRiYWtlKCdwdiAtYyBjbGVhbnNzdGF0ZScpCi0gICAgICAgICMgVGVzdCBkZXZ0b29sIGJ1aWxkCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBidWlsZCBwdicpCi0gICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhbJ0QnLCAnYmluZGlyJ10sICdwdicpCi0gICAgICAgIGluc3RhbGxkaXIgPSBiYl92YXJzWydEJ10KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3RhbGxkaXIsICdDb3VsZCBub3QgcXVlcnkgaW5zdGFsbGRpciB2YXJpYWJsZScpCi0gICAgICAgIGJpbmRpciA9IGJiX3ZhcnNbJ2JpbmRpciddCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiaW5kaXIsICdDb3VsZCBub3QgcXVlcnkgYmluZGlyIHZhcmlhYmxlJykKLSAgICAgICAgaWYgYmluZGlyWzBdID09ICcvJzoKLSAgICAgICAgICAgIGJpbmRpciA9IGJpbmRpclsxOl0KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihpbnN0YWxsZGlyLCBiaW5kaXIsICdwdicpKSwgJ3B2IGJpbmFyeSBub3QgZm91bmQgaW4gRCcpCi0KLSAgICBAdGVzdGNhc2UoMTQyMykKLSAgICBkZWYgdGVzdF9kZXZ0b29sX2FkZF9naXRfbG9jYWwoc2VsZik6Ci0gICAgICAgICMgRmV0Y2ggc291cmNlIGZyb20gYSByZW1vdGUgVVJMLCBidXQgZG8gaXQgb3V0c2lkZSBvZiBkZXZ0b29sCi0gICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQotICAgICAgICBwbiA9ICdkYnVzLXdhaXQnCi0gICAgICAgIHNyY3JldiA9ICc2Y2M2MDc3YTM2ZmUyNjQ4YTVmOTkzZmU3YzE2Yzk2MzJmOTQ2NTE3JwotICAgICAgICAjIFdlIGNob29zZSBhbiBodHRwczovLyBnaXQgVVJMIGhlcmUgdG8gY2hlY2sgcmV3cml0aW5nIHRoZSBVUkwgd29ya3MKLSAgICAgICAgdXJsID0gJ2h0dHBzOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvZ2l0L2RidXMtd2FpdCcKLSAgICAgICAgIyBGb3JjZSBmZXRjaGluZyB0byAibm9uYW1lIiBzdWJkaXIgc28gd2UgdmVyaWZ5IHdlJ3JlIHBpY2tpbmcgdXAgdGhlIG5hbWUgZnJvbSBhdXRvY29uZgotICAgICAgICAjIGluc3RlYWQgb2YgdGhlIGRpcmVjdG9yeSBuYW1lCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNsb25lICVzIG5vbmFtZScgJSB1cmwsIGN3ZD10ZW1wZGlyKQotICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ25vbmFtZScpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHJlc2V0IC0taGFyZCAlcycgJSBzcmNyZXYsIGN3ZD1zcmNkaXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc3JjZGlyLCAnY29uZmlndXJlLmFjJykpLCAnVW5hYmxlIHRvIGZpbmQgY29uZmlndXJlIHNjcmlwdCBpbiBzb3VyY2UgZGlyZWN0b3J5JykKLSAgICAgICAgIyBUZXN0IGRldnRvb2wgYWRkCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCi0gICAgICAgICMgRG9uJ3Qgc3BlY2lmeSBhIG5hbWUgc2luY2Ugd2Ugc2hvdWxkIGJlIGFibGUgdG8gYXV0by1kZXRlY3QgaXQKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGFkZCAlcycgJSBzcmNkaXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksICdXb3Jrc3BhY2UgZGlyZWN0b3J5IG5vdCBjcmVhdGVkJykKLSAgICAgICAgIyBDaGVjayB0aGUgcmVjaXBlIG5hbWUgaXMgY29ycmVjdAotICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHBuKQotICAgICAgICBzZWxmLmFzc2VydEluKCclc19naXQuYmInICUgcG4sIHJlY2lwZWZpbGUsICdSZWNpcGUgZmlsZSBpbmNvcnJlY3RseSBuYW1lZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4ocmVjaXBlZmlsZSwgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQotICAgICAgICBzZWxmLmFzc2VydEluKHBuLCByZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKHNyY2RpciwgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbihyZWNpcGVmaWxlLCByZXN1bHQub3V0cHV0KQotICAgICAgICBjaGVja3ZhcnMgPSB7fQotICAgICAgICBjaGVja3ZhcnNbJ0xJQ0VOU0UnXSA9ICdHUEx2MicKLSAgICAgICAgY2hlY2t2YXJzWydMSUNfRklMRVNfQ0hLU1VNJ10gPSAnZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzJwotICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9ICcke1dPUktESVJ9L2dpdCcKLSAgICAgICAgY2hlY2t2YXJzWydQViddID0gJzAuMStnaXQke1NSQ1BWfScKLSAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSAnZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvZ2l0L2RidXMtd2FpdDtwcm90b2NvbD1odHRwcycKLSAgICAgICAgY2hlY2t2YXJzWydTUkNSRVYnXSA9IHNyY3JldgotICAgICAgICBjaGVja3ZhcnNbJ0RFUEVORFMnXSA9IHNldChbJ2RidXMnXSkKLSAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBbXSkKLQotICAgIEB0ZXN0Y2FzZSgxMTYyKQotICAgIGRlZiB0ZXN0X2RldnRvb2xfYWRkX2xpYnJhcnkoc2VsZik6Ci0gICAgICAgICMgRmV0Y2ggc291cmNlCi0gICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQotICAgICAgICB2ZXJzaW9uID0gJzEuMScKLSAgICAgICAgdXJsID0gJ2h0dHBzOi8vd3d3LmludHJhMm5ldC5jb20vZW4vZGV2ZWxvcGVyL2xpYmZ0ZGkvZG93bmxvYWQvbGliZnRkaTEtJXMudGFyLmJ6MicgJSB2ZXJzaW9uCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnd2dldCAlcycgJSB1cmwsIGN3ZD10ZW1wZGlyKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3RhciB4ZnYgbGliZnRkaTEtJXMudGFyLmJ6MicgJSB2ZXJzaW9uLCBjd2Q9dGVtcGRpcikKLSAgICAgICAgc3JjZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdsaWJmdGRpMS0lcycgJSB2ZXJzaW9uKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNyY2RpciwgJ0NNYWtlTGlzdHMudHh0JykpLCAnVW5hYmxlIHRvIGZpbmQgQ01ha2VMaXN0cy50eHQgaW4gc291cmNlIGRpcmVjdG9yeScpCi0gICAgICAgICMgVGVzdCBkZXZ0b29sIGFkZCAoYW5kIHVzZSAtViBzbyB3ZSB0ZXN0IHRoYXQgdG9vKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQotICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYWRkIGxpYmZ0ZGkgJXMgLVYgJXMnICUgKHNyY2RpciwgdmVyc2lvbikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksICdXb3Jrc3BhY2UgZGlyZWN0b3J5IG5vdCBjcmVhdGVkJykKLSAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQotICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJmdGRpJywgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbihzcmNkaXIsIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgICMgQ2xlYW4gdXAgYW55dGhpbmcgaW4gdGhlIHdvcmtkaXIvc3lzcm9vdC9zc3RhdGUgY2FjaGUgKGhhdmUgdG8gZG8gdGhpcyAqYWZ0ZXIqIGRldnRvb2wgYWRkIHNpbmNlIHRoZSByZWNpcGUgb25seSBleGlzdHMgdGhlbikKLSAgICAgICAgYml0YmFrZSgnbGliZnRkaSAtYyBjbGVhbnNzdGF0ZScpCi0gICAgICAgICMgbGliZnRkaSdzIHB5dGhvbi9DTWFrZUxpc3RzLnR4dCBpcyBhIGJpdCBicm9rZW4sIHNvIGxldCdzIGp1c3QgZGlzYWJsZSBpdAotICAgICAgICAjIFRoZXJlJ3MgYWxzbyB0aGUgbWF0dGVyIG9mIGl0IGluc3RhbGxpbmcgY21ha2UgZmlsZXMgdG8gYSBwYXRoIHdlIGRvbid0Ci0gICAgICAgICMgbm9ybWFsbHkgY292ZXIsIHdoaWNoIHRyaWdnZXJzIHRoZSBpbnN0YWxsZWQtdnMtc2hpcHBlZCBRQSB0ZXN0IHdlIGhhdmUKLSAgICAgICAgIyB3aXRoaW4gZG9fcGFja2FnZQotICAgICAgICByZWNpcGVmaWxlID0gJyVzL3JlY2lwZXMvbGliZnRkaS9saWJmdGRpXyVzLmJiJyAlIChzZWxmLndvcmtzcGFjZWRpciwgdmVyc2lvbikKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdyZWNpcGV0b29sIHNldHZhciAlcyBFWFRSQV9PRUNNQUtFIC0tIFwnLURQWVRIT05fQklORElOR1M9T0ZGIC1ETElCRlRESV9DTUFLRV9DT05GSUdfRElSPSR7ZGF0YWRpcn0vY21ha2UvTW9kdWxlc1wnJyAlIHJlY2lwZWZpbGUpCi0gICAgICAgIHdpdGggb3BlbihyZWNpcGVmaWxlLCAnYScpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKCdcbkZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS9jbWFrZS9Nb2R1bGVzIlxuJykKLSAgICAgICAgICAgICMgV2UgZG9uJ3QgaGF2ZSB0aGUgYWJpbGl0eSB0byBwaWNrIHVwIHRoaXMgZGVwZW5kZW5jeSBhdXRvbWF0aWNhbGx5IHlldC4uLgotICAgICAgICAgICAgZi53cml0ZSgnXG5ERVBFTkRTICs9ICJsaWJ1c2IxIlxuJykKLSAgICAgICAgICAgIGYud3JpdGUoJ1xuVEVTVExJQk9VVFBVVCA9ICIke0NPTVBPTkVOVFNfRElSfS8ke1RVTkVfUEtHQVJDSH0vJHtQTn0vJHtsaWJkaXJ9IlxuJykKLSAgICAgICAgIyBUZXN0IGRldnRvb2wgYnVpbGQKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGJ1aWxkIGxpYmZ0ZGknKQotICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWydURVNUTElCT1VUUFVUJywgJ1NUQU1QJ10sICdsaWJmdGRpJykKLSAgICAgICAgc3RhZ2luZ19saWJkaXIgPSBiYl92YXJzWydURVNUTElCT1VUUFVUJ10KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YWdpbmdfbGliZGlyLCAnQ291bGQgbm90IHF1ZXJ5IFRFU1RMSUJPVVRQVVQgdmFyaWFibGUnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHN0YWdpbmdfbGliZGlyLCAnbGliZnRkaTEuc28uMi4xLjAnKSksICJsaWJmdGRpIGJpbmFyeSBub3QgZm91bmQgaW4gU1RBR0lOR19MSUJESVIuIE91dHB1dCBvZiBkZXZ0b29sIGJ1aWxkIGxpYmZ0ZGkgJXMiICUgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgIyBUZXN0IGRldnRvb2wgcmVzZXQKLSAgICAgICAgc3RhbXBwcmVmaXggPSBiYl92YXJzWydTVEFNUCddCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCBsaWJmdGRpJykKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2xpYmZ0ZGknLCByZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhbXBwcmVmaXgsICdVbmFibGUgdG8gZ2V0IFNUQU1QIHZhbHVlIGZvciByZWNpcGUgbGliZnRkaScpCi0gICAgICAgIG1hdGNoZXMgPSBnbG9iLmdsb2Ioc3RhbXBwcmVmaXggKyAnKicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0Y2hlcywgJ1N0YW1wIGZpbGVzIGV4aXN0IGZvciByZWNpcGUgbGliZnRkaSB0aGF0IHNob3VsZCBoYXZlIGJlZW4gY2xlYW5lZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHN0YWdpbmdfbGliZGlyLCAnbGliZnRkaTEuc28uMi4xLjAnKSksICdsaWJmdGRpIGJpbmFyeSBzdGlsbCBmb3VuZCBpbiBTVEFHSU5HX0xJQkRJUiBhZnRlciBjbGVhbmluZycpCi0KLSAgICBAdGVzdGNhc2UoMTE2MCkKLSAgICBkZWYgdGVzdF9kZXZ0b29sX2FkZF9mZXRjaChzZWxmKToKLSAgICAgICAgIyBGZXRjaCBzb3VyY2UKLSAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCi0gICAgICAgIHRlc3R2ZXIgPSAnMC4yMycKLSAgICAgICAgdXJsID0gJ2h0dHBzOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9NL01hcmt1cFNhZmUvTWFya3VwU2FmZS0lcy50YXIuZ3onICUgdGVzdHZlcgotICAgICAgICB0ZXN0cmVjaXBlID0gJ3B5dGhvbi1tYXJrdXBzYWZlJwotICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZSkKLSAgICAgICAgIyBUZXN0IGRldnRvb2wgYWRkCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW5zc3RhdGUgJXMnICUgdGVzdHJlY2lwZSkKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGFkZCAlcyAlcyAtZiAlcycgJSAodGVzdHJlY2lwZSwgc3JjZGlyLCB1cmwpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZC4gJXMnICUgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzcmNkaXIsICdzZXR1cC5weScpKSwgJ1VuYWJsZSB0byBmaW5kIHNldHVwLnB5IGluIHNvdXJjZSBkaXJlY3RvcnknKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc3JjZGlyLCAnLmdpdCcpKSwgJ2dpdCByZXBvc2l0b3J5IGZvciBleHRlcm5hbCBzb3VyY2UgdHJlZSB3YXMgbm90IGNyZWF0ZWQnKQotICAgICAgICAjIFRlc3QgZGV2dG9vbCBzdGF0dXMKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbihzcmNkaXIsIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgICMgQ2hlY2sgcmVjaXBlCi0gICAgICAgIHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgdGVzdHJlY2lwZSkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignJXNfJXMuYmInICUgKHRlc3RyZWNpcGUsIHRlc3R2ZXIpLCByZWNpcGVmaWxlLCAnUmVjaXBlIGZpbGUgaW5jb3JyZWN0bHkgbmFtZWQnKQotICAgICAgICBjaGVja3ZhcnMgPSB7fQotICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9ICcke1dPUktESVJ9L01hcmt1cFNhZmUtJHtQVn0nCi0gICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSSddID0gdXJsLnJlcGxhY2UodGVzdHZlciwgJyR7UFZ9JykKLSAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBbXSkKLSAgICAgICAgIyBUcnkgd2l0aCB2ZXJzaW9uIHNwZWNpZmllZAotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgcmVzZXQgLW4gJXMnICUgdGVzdHJlY2lwZSkKLSAgICAgICAgc2h1dGlsLnJtdHJlZShzcmNkaXIpCi0gICAgICAgIGZha2V2ZXIgPSAnMS45JwotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYWRkICVzICVzIC1mICVzIC1WICVzJyAlICh0ZXN0cmVjaXBlLCBzcmNkaXIsIHVybCwgZmFrZXZlcikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc3JjZGlyLCAnc2V0dXAucHknKSksICdVbmFibGUgdG8gZmluZCBzZXR1cC5weSBpbiBzb3VyY2UgZGlyZWN0b3J5JykKLSAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQotICAgICAgICBzZWxmLmFzc2VydEluKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oc3JjZGlyLCByZXN1bHQub3V0cHV0KQotICAgICAgICAjIENoZWNrIHJlY2lwZQotICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJyVzXyVzLmJiJyAlICh0ZXN0cmVjaXBlLCBmYWtldmVyKSwgcmVjaXBlZmlsZSwgJ1JlY2lwZSBmaWxlIGluY29ycmVjdGx5IG5hbWVkJykKLSAgICAgICAgY2hlY2t2YXJzID0ge30KLSAgICAgICAgY2hlY2t2YXJzWydTJ10gPSAnJHtXT1JLRElSfS9NYXJrdXBTYWZlLSVzJyAlIHRlc3R2ZXIKLSAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSB1cmwKLSAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBbXSkKLQotICAgIEB0ZXN0Y2FzZSgxMTYxKQotICAgIGRlZiB0ZXN0X2RldnRvb2xfYWRkX2ZldGNoX2dpdChzZWxmKToKLSAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCi0gICAgICAgIHVybCA9ICdnaXRzbTovL2dpdC55b2N0b3Byb2plY3Qub3JnL21yYWEnCi0gICAgICAgIGNoZWNrcmV2ID0gJ2FlMTI3YjE5YTUwYWE1NDI1NWU0MzMwY2NmZGQ5YTVkMDU4ZTU4MWQnCi0gICAgICAgIHRlc3RyZWNpcGUgPSAnbXJhYScKLSAgICAgICAgc3JjZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsIHRlc3RyZWNpcGUpCi0gICAgICAgICMgVGVzdCBkZXZ0b29sIGFkZAotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQotICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuc3N0YXRlICVzJyAlIHRlc3RyZWNpcGUpCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBhZGQgJXMgJXMgLWEgLWYgJXMnICUgKHRlc3RyZWNpcGUsIHNyY2RpciwgdXJsKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpKSwgJ1dvcmtzcGFjZSBkaXJlY3Rvcnkgbm90IGNyZWF0ZWQ6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc3JjZGlyLCAnaW1yYWEnLCAnaW1yYWEuYycpKSwgJ1VuYWJsZSB0byBmaW5kIGltcmFhL2ltcmFhLmMgaW4gc291cmNlIGRpcmVjdG9yeScpCi0gICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cwotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbih0ZXN0cmVjaXBlLCByZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKHNyY2RpciwgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgIyBDaGVjayByZWNpcGUKLSAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQotICAgICAgICBzZWxmLmFzc2VydEluKCdfZ2l0LmJiJywgcmVjaXBlZmlsZSwgJ1JlY2lwZSBmaWxlIGluY29ycmVjdGx5IG5hbWVkJykKLSAgICAgICAgY2hlY2t2YXJzID0ge30KLSAgICAgICAgY2hlY2t2YXJzWydTJ10gPSAnJHtXT1JLRElSfS9naXQnCi0gICAgICAgIGNoZWNrdmFyc1snUFYnXSA9ICcxLjArZ2l0JHtTUkNQVn0nCi0gICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSSddID0gdXJsCi0gICAgICAgIGNoZWNrdmFyc1snU1JDUkVWJ10gPSAnJHtBVVRPUkVWfScKLSAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBbXSkKLSAgICAgICAgIyBUcnkgd2l0aCByZXZpc2lvbiBhbmQgdmVyc2lvbiBzcGVjaWZpZWQKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHJlc2V0IC1uICVzJyAlIHRlc3RyZWNpcGUpCi0gICAgICAgIHNodXRpbC5ybXRyZWUoc3JjZGlyKQotICAgICAgICB1cmxfcmV2ID0gJyVzO3Jldj0lcycgJSAodXJsLCBjaGVja3JldikKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGFkZCAlcyAlcyAtZiAiJXMiIC1WIDEuNScgJSAodGVzdHJlY2lwZSwgc3JjZGlyLCB1cmxfcmV2KSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzcmNkaXIsICdpbXJhYScsICdpbXJhYS5jJykpLCAnVW5hYmxlIHRvIGZpbmQgaW1yYWEvaW1yYWEuYyBpbiBzb3VyY2UgZGlyZWN0b3J5JykKLSAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQotICAgICAgICBzZWxmLmFzc2VydEluKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oc3JjZGlyLCByZXN1bHQub3V0cHV0KQotICAgICAgICAjIENoZWNrIHJlY2lwZQotICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ19naXQuYmInLCByZWNpcGVmaWxlLCAnUmVjaXBlIGZpbGUgaW5jb3JyZWN0bHkgbmFtZWQnKQotICAgICAgICBjaGVja3ZhcnMgPSB7fQotICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9ICcke1dPUktESVJ9L2dpdCcKLSAgICAgICAgY2hlY2t2YXJzWydQViddID0gJzEuNStnaXQke1NSQ1BWfScKLSAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSB1cmwKLSAgICAgICAgY2hlY2t2YXJzWydTUkNSRVYnXSA9IGNoZWNrcmV2Ci0gICAgICAgIHNlbGYuX3Rlc3RfcmVjaXBlX2NvbnRlbnRzKHJlY2lwZWZpbGUsIGNoZWNrdmFycywgW10pCi0KLSAgICBAdGVzdGNhc2UoMTM5MSkKLSAgICBkZWYgdGVzdF9kZXZ0b29sX2FkZF9mZXRjaF9zaW1wbGUoc2VsZik6Ci0gICAgICAgICMgRmV0Y2ggc291cmNlIGZyb20gYSByZW1vdGUgVVJMLCBhdXRvLWRldGVjdGluZyBuYW1lCi0gICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQotICAgICAgICB0ZXN0dmVyID0gJzEuNi4wJwotICAgICAgICB1cmwgPSAnaHR0cDovL3d3dy5pdmFyY2guY29tL3Byb2dyYW1zL3NvdXJjZXMvcHYtJXMudGFyLmJ6MicgJSB0ZXN0dmVyCi0gICAgICAgIHRlc3RyZWNpcGUgPSAncHYnCi0gICAgICAgIHNyY2RpciA9IG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ3NvdXJjZXMnLCB0ZXN0cmVjaXBlKQotICAgICAgICAjIFRlc3QgZGV2dG9vbCBhZGQKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLndvcmtzcGFjZWRpcikKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGFkZCAlcycgJSB1cmwpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksICdXb3Jrc3BhY2UgZGlyZWN0b3J5IG5vdCBjcmVhdGVkLiAlcycgJSByZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNyY2RpciwgJ2NvbmZpZ3VyZScpKSwgJ1VuYWJsZSB0byBmaW5kIGNvbmZpZ3VyZSBzY3JpcHQgaW4gc291cmNlIGRpcmVjdG9yeScpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihzcmNkaXIsICcuZ2l0JykpLCAnZ2l0IHJlcG9zaXRvcnkgZm9yIGV4dGVybmFsIHNvdXJjZSB0cmVlIHdhcyBub3QgY3JlYXRlZCcpCi0gICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cwotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbih0ZXN0cmVjaXBlLCByZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKHNyY2RpciwgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgIyBDaGVjayByZWNpcGUKLSAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQotICAgICAgICBzZWxmLmFzc2VydEluKCclc18lcy5iYicgJSAodGVzdHJlY2lwZSwgdGVzdHZlciksIHJlY2lwZWZpbGUsICdSZWNpcGUgZmlsZSBpbmNvcnJlY3RseSBuYW1lZCcpCi0gICAgICAgIGNoZWNrdmFycyA9IHt9Ci0gICAgICAgIGNoZWNrdmFyc1snUyddID0gTm9uZQotICAgICAgICBjaGVja3ZhcnNbJ1NSQ19VUkknXSA9IHVybC5yZXBsYWNlKHRlc3R2ZXIsICcke1BWfScpCi0gICAgICAgIHNlbGYuX3Rlc3RfcmVjaXBlX2NvbnRlbnRzKHJlY2lwZWZpbGUsIGNoZWNrdmFycywgW10pCi0KLSAgICBAdGVzdGNhc2UoMTE2NCkKLSAgICBkZWYgdGVzdF9kZXZ0b29sX21vZGlmeShzZWxmKToKLSAgICAgICAgaW1wb3J0IG9lLnBhdGgKLQotICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLndvcmtzcGFjZWRpcikKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiBtZGFkbScpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgbWRhZG0gLXggJXMnICUgdGVtcGRpcikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnTWFrZWZpbGUnKSksICdFeHRyYWN0ZWQgc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksICdXb3Jrc3BhY2UgZGlyZWN0b3J5IG5vdCBjcmVhdGVkJykKLSAgICAgICAgbWF0Y2hlcyA9IGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdhcHBlbmRzJywgJ21kYWRtXyouYmJhcHBlbmQnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGNoZXMsICdiYmFwcGVuZCBub3QgY3JlYXRlZCAlcycgJSByZXN1bHQub3V0cHV0KQotCi0gICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cwotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbignbWRhZG0nLCByZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKHRlbXBkaXIsIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuX2NoZWNrX3NyY19yZXBvKHRlbXBkaXIpCi0KLSAgICAgICAgYml0YmFrZSgnbWRhZG0gLUMgdW5wYWNrJykKLQotICAgICAgICBkZWYgY2hlY2tfbGluZShjaGVja2ZpbGUsIGV4cGVjdGVkLCBtZXNzYWdlLCBwcmVzZW50PVRydWUpOgotICAgICAgICAgICAgIyBDaGVjayBmb3IgJGV4cGVjdGVkLCBvbiBhIGxpbmUgb24gaXRzIG93biwgaW4gY2hlY2tmaWxlLgotICAgICAgICAgICAgd2l0aCBvcGVuKGNoZWNrZmlsZSwgJ3InKSBhcyBmOgotICAgICAgICAgICAgICAgIGlmIHByZXNlbnQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhwZWN0ZWQgKyAnXG4nLCBmLCBtZXNzYWdlKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZXhwZWN0ZWQgKyAnXG4nLCBmLCBtZXNzYWdlKQotCi0gICAgICAgIG1vZGZpbGUgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ21kYWRtLjguaW4nKQotICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWydQS0dEJywgJ21hbmRpciddLCAnbWRhZG0nKQotICAgICAgICBwa2dkID0gYmJfdmFyc1snUEtHRCddCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwa2dkLCAnQ291bGQgbm90IHF1ZXJ5IFBLR0QgdmFyaWFibGUnKQotICAgICAgICBtYW5kaXIgPSBiYl92YXJzWydtYW5kaXInXQotICAgICAgICBzZWxmLmFzc2VydFRydWUobWFuZGlyLCAnQ291bGQgbm90IHF1ZXJ5IG1hbmRpciB2YXJpYWJsZScpCi0gICAgICAgIG1hbmZpbGUgPSBvZS5wYXRoLmpvaW4ocGtnZCwgbWFuZGlyLCAnbWFuOCcsICdtZGFkbS44JykKLQotICAgICAgICBjaGVja19saW5lKG1vZGZpbGUsICdMaW51eCBTb2Z0d2FyZSBSQUlEJywgJ0NvdWxkIG5vdCBmaW5kIGluaXRpYWwgc3RyaW5nJykKLSAgICAgICAgY2hlY2tfbGluZShtb2RmaWxlLCAnYW50aXF1ZSBwaW4gc2FyZGluZScsICdVbmV4cGVjdGVkbHkgZm91bmQgcmVwbGFjZW1lbnQgc3RyaW5nJywgcHJlc2VudD1GYWxzZSkKLQotICAgICAgICByZXN1bHQgPSBydW5DbWQoInNlZCAtaSAncyFeTGludXggU29mdHdhcmUgUkFJRCQhYW50aXF1ZSBwaW4gc2FyZGluZSEnICVzIiAlIG1vZGZpbGUpCi0gICAgICAgIGNoZWNrX2xpbmUobW9kZmlsZSwgJ2FudGlxdWUgcGluIHNhcmRpbmUnLCAnbWRhZG0uOC5pbiBmaWxlIG5vdCBtb2RpZmllZCAoc2VkIGZhaWxlZCknKQotCi0gICAgICAgIGJpdGJha2UoJ21kYWRtIC1jIHBhY2thZ2UnKQotICAgICAgICBjaGVja19saW5lKG1hbmZpbGUsICdhbnRpcXVlIHBpbiBzYXJkaW5lJywgJ21hbiBmaWxlIG5vdCBtb2RpZmllZC4gbWFuIHNlYXJjaGVkIGZpbGUgcGF0aDogJXMnICUgbWFuZmlsZSkKLQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjaGVja291dCAtLSAlcycgJSBtb2RmaWxlLCBjd2Q9dGVtcGRpcikKLSAgICAgICAgY2hlY2tfbGluZShtb2RmaWxlLCAnTGludXggU29mdHdhcmUgUkFJRCcsICdtYW4gLmluIGZpbGUgbm90IHJlc3RvcmVkIChnaXQgZmFpbGVkKScpCi0KLSAgICAgICAgYml0YmFrZSgnbWRhZG0gLWMgcGFja2FnZScpCi0gICAgICAgIGNoZWNrX2xpbmUobWFuZmlsZSwgJ0xpbnV4IFNvZnR3YXJlIFJBSUQnLCAnbWFuIGZpbGUgbm90IHVwZGF0ZWQuIG1hbiBzZWFyY2hlZCBmaWxlIHBhdGg6ICVzJyAlIG1hbmZpbGUpCi0KLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHJlc2V0IG1kYWRtJykKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ21kYWRtJywgcmVzdWx0Lm91dHB1dCkKLQotICAgIGRlZiB0ZXN0X2RldnRvb2xfYnVpbGRjbGVhbihzZWxmKToKLSAgICAgICAgZGVmIGFzc2VydEZpbGUocGF0aCwgKnBhdGhzKToKLSAgICAgICAgICAgIGYgPSBvcy5wYXRoLmpvaW4ocGF0aCwgKnBhdGhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGYpLCAiJXIgZG9lcyBub3QgZXhpc3QiICUgZikKLSAgICAgICAgZGVmIGFzc2VydE5vRmlsZShwYXRoLCAqcGF0aHMpOgotICAgICAgICAgICAgZiA9IG9zLnBhdGguam9pbihwYXRoLCAqcGF0aHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihmKSksICIlciBleGlzdHMiICUgZikKLQotICAgICAgICAjIENsZWFuIHVwIGFueXRoaW5nIGluIHRoZSB3b3JrZGlyL3N5c3Jvb3Qvc3N0YXRlIGNhY2hlCi0gICAgICAgIGJpdGJha2UoJ21kYWRtIG00IC1jIGNsZWFuc3N0YXRlJykKLSAgICAgICAgIyBUcnkgbW9kaWZ5aW5nIGEgcmVjaXBlCi0gICAgICAgIHRlbXBkaXJfbWRhZG0gPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKLSAgICAgICAgdGVtcGRpcl9tNCA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQotICAgICAgICBidWlsZGRpcl9tNCA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXJfbWRhZG0pCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcl9tNCkKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChidWlsZGRpcl9tNCkKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLndvcmtzcGFjZWRpcikKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiBtZGFkbSBtNCcpCi0gICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCdtNCcsICdFWFRFUk5BTFNSQ19CVUlMRCA9ICIlcyJcbmRvX2NsZWFuKCkge1xuXHQ6XG59XG4nICUgYnVpbGRkaXJfbTQpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgbWRhZG0gLXggJXMnICUgdGVtcGRpcl9tZGFkbSkKLSAgICAgICAgICAgIHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgbTQgLXggJXMnICUgdGVtcGRpcl9tNCkKLSAgICAgICAgICAgIGFzc2VydE5vRmlsZSh0ZW1wZGlyX21kYWRtLCAnbWRhZG0nKQotICAgICAgICAgICAgYXNzZXJ0Tm9GaWxlKGJ1aWxkZGlyX200LCAnc3JjL200JykKLSAgICAgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJ200IC1lJykKLSAgICAgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJ21kYWRtIG00IC1jIGNvbXBpbGUnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc3RhdHVzLCAwKQotICAgICAgICAgICAgYXNzZXJ0RmlsZSh0ZW1wZGlyX21kYWRtLCAnbWRhZG0nKQotICAgICAgICAgICAgYXNzZXJ0RmlsZShidWlsZGRpcl9tNCwgJ3NyYy9tNCcpCi0gICAgICAgICAgICAjIENoZWNrIHRoYXQgYnVpbGRjbGVhbiB0YXNrIGV4aXN0cyBhbmQgZG9lcyBjYWxsIG1ha2UgY2xlYW4KLSAgICAgICAgICAgIGJpdGJha2UoJ21kYWRtIG00IC1jIGJ1aWxkY2xlYW4nKQotICAgICAgICAgICAgYXNzZXJ0Tm9GaWxlKHRlbXBkaXJfbWRhZG0sICdtZGFkbScpCi0gICAgICAgICAgICBhc3NlcnROb0ZpbGUoYnVpbGRkaXJfbTQsICdzcmMvbTQnKQotICAgICAgICAgICAgYml0YmFrZSgnbWRhZG0gbTQgLWMgY29tcGlsZScpCi0gICAgICAgICAgICBhc3NlcnRGaWxlKHRlbXBkaXJfbWRhZG0sICdtZGFkbScpCi0gICAgICAgICAgICBhc3NlcnRGaWxlKGJ1aWxkZGlyX200LCAnc3JjL200JykKLSAgICAgICAgICAgIGJpdGJha2UoJ21kYWRtIG00IC1jIGNsZWFuJykKLSAgICAgICAgICAgICMgQ2hlY2sgdGhhdCBidWlsZGNsZWFuIHRhc2sgaXMgcnVuIGJlZm9yZSBjbGVhbiBmb3IgQiA9PSBTCi0gICAgICAgICAgICBhc3NlcnROb0ZpbGUodGVtcGRpcl9tZGFkbSwgJ21kYWRtJykKLSAgICAgICAgICAgICMgQ2hlY2sgdGhhdCBidWlsZGNsZWFuIHRhc2sgaXMgbm90IHJ1biBiZWZvcmUgY2xlYW4gZm9yIEIgIT0gUwotICAgICAgICAgICAgYXNzZXJ0RmlsZShidWlsZGRpcl9tNCwgJ3NyYy9tNCcpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzZWxmLmRlbGV0ZV9yZWNpcGVpbmMoJ200JykKLQotICAgIEB0ZXN0Y2FzZSgxMTY2KQotICAgIGRlZiB0ZXN0X2RldnRvb2xfbW9kaWZ5X2ludmFsaWQoc2VsZik6Ci0gICAgICAgICMgVHJ5IG1vZGlmeWluZyBzb21lIHJlY2lwZXMKLSAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCi0KLSAgICAgICAgdGVzdHJlY2lwZXMgPSAncGVyZiBrZXJuZWwtZGV2c3JjIHBhY2thZ2UtaW5kZXggY29yZS1pbWFnZS1taW5pbWFsIG1ldGEtdG9vbGNoYWluIHBhY2thZ2Vncm91cC1jb3JlLXNkayBtZXRhLWlkZS1zdXBwb3J0Jy5zcGxpdCgpCi0gICAgICAgICMgRmluZCBhY3R1YWwgbmFtZSBvZiBnY2Mtc291cmNlIHNpbmNlIGl0IG5vdyBpbmNsdWRlcyB0aGUgdmVyc2lvbiAtIGNydWRlLCBidXQgZ29vZCBlbm91Z2ggZm9yIHRoaXMgcHVycG9zZQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctcmVjaXBlcyBnY2Mtc291cmNlKicpCi0gICAgICAgIGZvciBsaW5lIGluIHJlc3VsdC5vdXRwdXQuc3BsaXRsaW5lcygpOgotICAgICAgICAgICAgIyBqdXN0IG1hdGNoIHRob3NlIGxpbmVzIHRoYXQgY29udGFpbiBhIHJlYWwgdGFyZ2V0Ci0gICAgICAgICAgICBtID0gcmUubWF0Y2goJyg/UDxyZWNpcGU+XlthLXpBLVowLTkuLV0rKSg/UDxjb2xvbj46JCknLCBsaW5lKQotICAgICAgICAgICAgaWYgbToKLSAgICAgICAgICAgICAgICB0ZXN0cmVjaXBlcy5hcHBlbmQobS5ncm91cCgncmVjaXBlJykpCi0gICAgICAgIGZvciB0ZXN0cmVjaXBlIGluIHRlc3RyZWNpcGVzOgotICAgICAgICAgICAgIyBDaGVjayBpdCdzIGEgdmFsaWQgcmVjaXBlCi0gICAgICAgICAgICBiaXRiYWtlKCclcyAtZScgJSB0ZXN0cmVjaXBlKQotICAgICAgICAgICAgIyBkZXZ0b29sIGV4dHJhY3Qgc2hvdWxkIGZhaWwKLSAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBleHRyYWN0ICVzICVzJyAlICh0ZXN0cmVjaXBlLCBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZSkpLCBpZ25vcmVfc3RhdHVzPVRydWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsICdkZXZ0b29sIGV4dHJhY3Qgb24gJXMgc2hvdWxkIGhhdmUgZmFpbGVkLiBkZXZ0b29sIG91dHB1dDogJXMnICUgKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignRmV0Y2hpbmcgJywgcmVzdWx0Lm91dHB1dCwgJ2RldnRvb2wgZXh0cmFjdCBvbiAlcyBzaG91bGQgaGF2ZSBlcnJvcmVkIG91dCBiZWZvcmUgdHJ5aW5nIHRvIGZldGNoJyAlIHRlc3RyZWNpcGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKCdFUlJPUjogJywgcmVzdWx0Lm91dHB1dCwgJ2RldnRvb2wgZXh0cmFjdCBvbiAlcyBzaG91bGQgaGF2ZSBnaXZlbiBhbiBFUlJPUicgJSB0ZXN0cmVjaXBlKQotICAgICAgICAgICAgIyBkZXZ0b29sIG1vZGlmeSBzaG91bGQgZmFpbAotICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgb3MucGF0aC5qb2luKHRlbXBkaXIsIHRlc3RyZWNpcGUpKSwgaWdub3JlX3N0YXR1cz1UcnVlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQuc3RhdHVzLCAwLCAnZGV2dG9vbCBtb2RpZnkgb24gJXMgc2hvdWxkIGhhdmUgZmFpbGVkLiBkZXZ0b29sIG91dHB1dDogJXMnICUgICh0ZXN0cmVjaXBlLCByZXN1bHQub3V0cHV0KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0VSUk9SOiAnLCByZXN1bHQub3V0cHV0LCAnZGV2dG9vbCBtb2RpZnkgb24gJXMgc2hvdWxkIGhhdmUgZ2l2ZW4gYW4gRVJST1InICUgdGVzdHJlY2lwZSkKLQotICAgIEB0ZXN0Y2FzZSgxMzY1KQotICAgIGRlZiB0ZXN0X2RldnRvb2xfbW9kaWZ5X25hdGl2ZShzZWxmKToKLSAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMoc2VsZi53b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCi0gICAgICAgICMgVHJ5IG1vZGlmeWluZyBzb21lIHJlY2lwZXMKLSAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCi0KLSAgICAgICAgYmJjbGFzc2V4dGVuZGVkID0gRmFsc2UKLSAgICAgICAgaW5oZXJpdG5hdGl2ZSA9IEZhbHNlCi0gICAgICAgIHRlc3RyZWNpcGVzID0gJ210b29scy1uYXRpdmUgYXB0LW5hdGl2ZSBkZXNrdG9wLWZpbGUtdXRpbHMtbmF0aXZlJy5zcGxpdCgpCi0gICAgICAgIGZvciB0ZXN0cmVjaXBlIGluIHRlc3RyZWNpcGVzOgotICAgICAgICAgICAgY2hlY2tleHRlbmQgPSAnbmF0aXZlJyBpbiAoZ2V0X2JiX3ZhcignQkJDTEFTU0VYVEVORCcsIHRlc3RyZWNpcGUpIG9yICcnKS5zcGxpdCgpCi0gICAgICAgICAgICBpZiBub3QgYmJjbGFzc2V4dGVuZGVkOgotICAgICAgICAgICAgICAgIGJiY2xhc3NleHRlbmRlZCA9IGNoZWNrZXh0ZW5kCi0gICAgICAgICAgICBpZiBub3QgaW5oZXJpdG5hdGl2ZToKLSAgICAgICAgICAgICAgICBpbmhlcml0bmF0aXZlID0gbm90IGNoZWNrZXh0ZW5kCi0gICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZSkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignRVJST1I6ICcsIHJlc3VsdC5vdXRwdXQsICdFUlJPUiBpbiBkZXZ0b29sIG1vZGlmeSBvdXRwdXQ6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYnVpbGQgJXMnICUgdGVzdHJlY2lwZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0VSUk9SOiAnLCByZXN1bHQub3V0cHV0LCAnRVJST1IgaW4gZGV2dG9vbCBidWlsZCBvdXRwdXQ6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgcmVzZXQgJXMnICUgdGVzdHJlY2lwZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0VSUk9SOiAnLCByZXN1bHQub3V0cHV0LCAnRVJST1IgaW4gZGV2dG9vbCByZXNldCBvdXRwdXQ6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiY2xhc3NleHRlbmRlZCwgJ05vbmUgb2YgdGhlc2UgcmVjaXBlcyBhcmUgQkJDTEFTU0VYVEVORGVkIHRvIG5hdGl2ZSAtIG5lZWQgdG8gYWRqdXN0IHRlc3RyZWNpcGVzIGxpc3Q6ICVzJyAlICcsICcuam9pbih0ZXN0cmVjaXBlcykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmhlcml0bmF0aXZlLCAnTm9uZSBvZiB0aGVzZSByZWNpcGVzIGRvICJpbmhlcml0IG5hdGl2ZSIgLSBuZWVkIHRvIGFkanVzdCB0ZXN0cmVjaXBlcyBsaXN0OiAlcycgJSAnLCAnLmpvaW4odGVzdHJlY2lwZXMpKQotCi0KLSAgICBAdGVzdGNhc2UoMTE2NSkKLSAgICBkZWYgdGVzdF9kZXZ0b29sX21vZGlmeV9naXQoc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucwotICAgICAgICB0ZXN0cmVjaXBlID0gJ21rZWxmaW1hZ2UnCi0gICAgICAgIHNyY191cmkgPSBnZXRfYmJfdmFyKCdTUkNfVVJJJywgdGVzdHJlY2lwZSkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignZ2l0Oi8vJywgc3JjX3VyaSwgJ1RoaXMgdGVzdCBleHBlY3RzIHRoZSAlcyByZWNpcGUgdG8gYmUgYSBnaXQgcmVjaXBlJyAlIHRlc3RyZWNpcGUpCi0gICAgICAgICMgQ2xlYW4gdXAgYW55dGhpbmcgaW4gdGhlIHdvcmtkaXIvc3lzcm9vdC9zc3RhdGUgY2FjaGUKLSAgICAgICAgYml0YmFrZSgnJXMgLWMgY2xlYW5zc3RhdGUnICUgdGVzdHJlY2lwZSkKLSAgICAgICAgIyBUcnkgbW9kaWZ5aW5nIGEgcmVjaXBlCi0gICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQotICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQotICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuICVzJyAlIHRlc3RyZWNpcGUpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgLXggJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBkaXIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHRlbXBkaXIsICdNYWtlZmlsZScpKSwgJ0V4dHJhY3RlZCBzb3VyY2UgY291bGQgbm90IGJlIGZvdW5kJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpKSwgJ1dvcmtzcGFjZSBkaXJlY3Rvcnkgbm90IGNyZWF0ZWQuIGRldnRvb2wgb3V0cHV0OiAlcycgJSByZXN1bHQub3V0cHV0KQotICAgICAgICBtYXRjaGVzID0gZ2xvYi5nbG9iKG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ2FwcGVuZHMnLCAnbWtlbGZpbWFnZV8qLmJiYXBwZW5kJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRjaGVzLCAnYmJhcHBlbmQgbm90IGNyZWF0ZWQnKQotICAgICAgICAjIFRlc3QgZGV2dG9vbCBzdGF0dXMKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbih0ZW1wZGlyLCByZXN1bHQub3V0cHV0KQotICAgICAgICAjIENoZWNrIGdpdCByZXBvCi0gICAgICAgIHNlbGYuX2NoZWNrX3NyY19yZXBvKHRlbXBkaXIpCi0gICAgICAgICMgVHJ5IGJ1aWxkaW5nCi0gICAgICAgIGJpdGJha2UodGVzdHJlY2lwZSkKLQotICAgIEB0ZXN0Y2FzZSgxMTY3KQotICAgIGRlZiB0ZXN0X2RldnRvb2xfbW9kaWZ5X2xvY2FsZmlsZXMoc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucwotICAgICAgICB0ZXN0cmVjaXBlID0gJ2xpZ2h0dHBkJwotICAgICAgICBzcmNfdXJpID0gKGdldF9iYl92YXIoJ1NSQ19VUkknLCB0ZXN0cmVjaXBlKSBvciAnJykuc3BsaXQoKQotICAgICAgICBmb3VuZGxvY2FsID0gRmFsc2UKLSAgICAgICAgZm9yIGl0ZW0gaW4gc3JjX3VyaToKLSAgICAgICAgICAgIGlmIGl0ZW0uc3RhcnRzd2l0aCgnZmlsZTovLycpIGFuZCAnLnBhdGNoJyBub3QgaW4gaXRlbToKLSAgICAgICAgICAgICAgICBmb3VuZGxvY2FsID0gVHJ1ZQotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZGxvY2FsLCAnVGhpcyB0ZXN0IGV4cGVjdHMgdGhlICVzIHJlY2lwZSB0byBmZXRjaCBsb2NhbCBmaWxlcyBhbmQgaXQgc2VlbXMgdGhhdCBpdCBubyBsb25nZXIgZG9lcycgJSB0ZXN0cmVjaXBlKQotICAgICAgICAjIENsZWFuIHVwIGFueXRoaW5nIGluIHRoZSB3b3JrZGlyL3N5c3Jvb3Qvc3N0YXRlIGNhY2hlCi0gICAgICAgIGJpdGJha2UoJyVzIC1jIGNsZWFuc3N0YXRlJyAlIHRlc3RyZWNpcGUpCi0gICAgICAgICMgVHJ5IG1vZGlmeWluZyBhIHJlY2lwZQotICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLndvcmtzcGFjZWRpcikKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiAlcycgJSB0ZXN0cmVjaXBlKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wZGlyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnY29uZmlndXJlLmFjJykpLCAnRXh0cmFjdGVkIHNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZCcpCi0gICAgICAgIG1hdGNoZXMgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAnYXBwZW5kcycsICclc18qLmJiYXBwZW5kJyAlIHRlc3RyZWNpcGUpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2hlcywgJ2JiYXBwZW5kIG5vdCBjcmVhdGVkJykKLSAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQotICAgICAgICBzZWxmLmFzc2VydEluKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4odGVtcGRpciwgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgIyBUcnkgYnVpbGRpbmcKLSAgICAgICAgYml0YmFrZSh0ZXN0cmVjaXBlKQotCi0gICAgQHRlc3RjYXNlKDEzNzgpCi0gICAgZGVmIHRlc3RfZGV2dG9vbF9tb2RpZnlfdmlydHVhbChzZWxmKToKLSAgICAgICAgIyBUcnkgbW9kaWZ5aW5nIGEgdmlydHVhbCByZWNpcGUKLSAgICAgICAgdmlydHJlY2lwZSA9ICd2aXJ0dWFsL21ha2UnCi0gICAgICAgIHJlYWxyZWNpcGUgPSAnbWFrZScKLSAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgLXggJXMnICUgKHZpcnRyZWNpcGUsIHRlbXBkaXIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHRlbXBkaXIsICdNYWtlZmlsZS5hbScpKSwgJ0V4dHJhY3RlZCBzb3VyY2UgY291bGQgbm90IGJlIGZvdW5kJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpKSwgJ1dvcmtzcGFjZSBkaXJlY3Rvcnkgbm90IGNyZWF0ZWQnKQotICAgICAgICBtYXRjaGVzID0gZ2xvYi5nbG9iKG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ2FwcGVuZHMnLCAnJXNfKi5iYmFwcGVuZCcgJSByZWFscmVjaXBlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGNoZXMsICdiYmFwcGVuZCBub3QgY3JlYXRlZCAlcycgJSByZXN1bHQub3V0cHV0KQotICAgICAgICAjIFRlc3QgZGV2dG9vbCBzdGF0dXMKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odmlydHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbihyZWFscmVjaXBlLCByZXN1bHQub3V0cHV0KQotICAgICAgICAjIENoZWNrIGdpdCByZXBvCi0gICAgICAgIHNlbGYuX2NoZWNrX3NyY19yZXBvKHRlbXBkaXIpCi0gICAgICAgICMgVGhpcyBpcyBwcm9iYWJseSBzdWZmaWNpZW50Ci0KLQotICAgIEB0ZXN0Y2FzZSgxMTY5KQotICAgIGRlZiB0ZXN0X2RldnRvb2xfdXBkYXRlX3JlY2lwZShzZWxmKToKLSAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCi0gICAgICAgIHRlc3RyZWNpcGUgPSAnbWluaWNvbScKLSAgICAgICAgYmJfdmFycyA9IGdldF9iYl92YXJzKFsnRklMRScsICdTUkNfVVJJJ10sIHRlc3RyZWNpcGUpCi0gICAgICAgIHJlY2lwZWZpbGUgPSBiYl92YXJzWydGSUxFJ10KLSAgICAgICAgc3JjX3VyaSA9IGJiX3ZhcnNbJ1NSQ19VUkknXQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdnaXQ6Ly8nLCBzcmNfdXJpLCAnVGhpcyB0ZXN0IGV4cGVjdHMgdGhlICVzIHJlY2lwZSB0byBOT1QgYmUgYSBnaXQgcmVjaXBlJyAlIHRlc3RyZWNpcGUpCi0gICAgICAgIHNlbGYuX2NoZWNrX3JlcG9fc3RhdHVzKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgW10pCi0gICAgICAgICMgRmlyc3QsIG1vZGlmeSBhIHJlY2lwZQotICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLndvcmtzcGFjZWRpcikKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKLSAgICAgICAgIyAoZG9uJ3QgYm90aGVyIHdpdGggY2xlYW5pbmcgdGhlIHJlY2lwZSBvbiB0ZWFyZG93biwgd2Ugd29uJ3QgYmUgYnVpbGRpbmcgaXQpCi0gICAgICAgICMgV2UgZG9uJ3QgdXNlIC14IGhlcmUgc28gdGhhdCB3ZSB0ZXN0IHRoZSBiZWhhdmlvdXIgb2YgZGV2dG9vbCBtb2RpZnkgd2l0aG91dCBpdAotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wZGlyKSkKLSAgICAgICAgIyBDaGVjayBnaXQgcmVwbwotICAgICAgICBzZWxmLl9jaGVja19zcmNfcmVwbyh0ZW1wZGlyKQotICAgICAgICAjIEFkZCBhIGNvdXBsZSBvZiBjb21taXRzCi0gICAgICAgICMgRklYTUU6IHRoaXMgb25seSB0ZXN0cyBhZGRpbmcsIG5lZWQgdG8gYWxzbyB0ZXN0IHVwZGF0ZSBhbmQgcmVtb3ZlCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZWNobyAiQWRkaXRpb25hbCBsaW5lIiA+PiBSRUFETUUnLCBjd2Q9dGVtcGRpcikKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgY29tbWl0IC1hIC1tICJDaGFuZ2UgdGhlIFJFQURNRSInLCBjd2Q9dGVtcGRpcikKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdlY2hvICJBIG5ldyBmaWxlIiA+IGRldnRvb2wtbmV3LWZpbGUnLCBjd2Q9dGVtcGRpcikKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgYWRkIGRldnRvb2wtbmV3LWZpbGUnLCBjd2Q9dGVtcGRpcikKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgY29tbWl0IC1tICJBZGQgYSBuZXcgZmlsZSInLCBjd2Q9dGVtcGRpcikKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignY2QgJXM7IHJtICVzLyoucGF0Y2g7IGdpdCBjaGVja291dCAlcyAlcycgJSAob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCB0ZXN0cmVjaXBlLCB0ZXN0cmVjaXBlLCBvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpKSkKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgJXMnICUgdGVzdHJlY2lwZSkKLSAgICAgICAgZXhwZWN0ZWRfc3RhdHVzID0gWygnIE0nLCAnLiovJXMkJyAlIG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKCc/PycsICcuKi8wMDAxLUNoYW5nZS10aGUtUkVBRE1FLnBhdGNoJCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKCc/PycsICcuKi8wMDAyLUFkZC1hLW5ldy1maWxlLnBhdGNoJCcpXQotICAgICAgICBzZWxmLl9jaGVja19yZXBvX3N0YXR1cyhvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIGV4cGVjdGVkX3N0YXR1cykKLQotICAgIEB0ZXN0Y2FzZSgxMTcyKQotICAgIGRlZiB0ZXN0X2RldnRvb2xfdXBkYXRlX3JlY2lwZV9naXQoc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucwotICAgICAgICB0ZXN0cmVjaXBlID0gJ210ZC11dGlscycKLSAgICAgICAgYmJfdmFycyA9IGdldF9iYl92YXJzKFsnRklMRScsICdTUkNfVVJJJ10sIHRlc3RyZWNpcGUpCi0gICAgICAgIHJlY2lwZWZpbGUgPSBiYl92YXJzWydGSUxFJ10KLSAgICAgICAgc3JjX3VyaSA9IGJiX3ZhcnNbJ1NSQ19VUkknXQotICAgICAgICBzZWxmLmFzc2VydEluKCdnaXQ6Ly8nLCBzcmNfdXJpLCAnVGhpcyB0ZXN0IGV4cGVjdHMgdGhlICVzIHJlY2lwZSB0byBiZSBhIGdpdCByZWNpcGUnICUgdGVzdHJlY2lwZSkKLSAgICAgICAgcGF0Y2hlcyA9IFtdCi0gICAgICAgIGZvciBlbnRyeSBpbiBzcmNfdXJpLnNwbGl0KCk6Ci0gICAgICAgICAgICBpZiBlbnRyeS5zdGFydHN3aXRoKCdmaWxlOi8vJykgYW5kIGVudHJ5LmVuZHN3aXRoKCcucGF0Y2gnKToKLSAgICAgICAgICAgICAgICBwYXRjaGVzLmFwcGVuZChlbnRyeVs3Ol0uc3BsaXQoJzsnKVswXSkKLSAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihwYXRjaGVzKSwgMCwgJ1RoZSAlcyByZWNpcGUgZG9lcyBub3QgYXBwZWFyIHRvIGNvbnRhaW4gYW55IHBhdGNoZXMsIHNvIHRoaXMgdGVzdCB3aWxsIG5vdCBiZSBlZmZlY3RpdmUnICUgdGVzdHJlY2lwZSkKLSAgICAgICAgc2VsZi5fY2hlY2tfcmVwb19zdGF0dXMob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCBbXSkKLSAgICAgICAgIyBGaXJzdCwgbW9kaWZ5IGEgcmVjaXBlCi0gICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQotICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQotICAgICAgICAjIChkb24ndCBib3RoZXIgd2l0aCBjbGVhbmluZyB0aGUgcmVjaXBlIG9uIHRlYXJkb3duLCB3ZSB3b24ndCBiZSBidWlsZGluZyBpdCkKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGRpcikpCi0gICAgICAgICMgQ2hlY2sgZ2l0IHJlcG8KLSAgICAgICAgc2VsZi5fY2hlY2tfc3JjX3JlcG8odGVtcGRpcikKLSAgICAgICAgIyBBZGQgYSBjb3VwbGUgb2YgY29tbWl0cwotICAgICAgICAjIEZJWE1FOiB0aGlzIG9ubHkgdGVzdHMgYWRkaW5nLCBuZWVkIHRvIGFsc28gdGVzdCB1cGRhdGUgYW5kIHJlbW92ZQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2VjaG8gIiMgQWRkaXRpb25hbCBsaW5lIiA+PiBNYWtlZmlsZS5hbScsIGN3ZD10ZW1wZGlyKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjb21taXQgLWEgLW0gIkNoYW5nZSB0aGUgTWFrZWZpbGUiJywgY3dkPXRlbXBkaXIpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZWNobyAiQSBuZXcgZmlsZSIgPiBkZXZ0b29sLW5ldy1maWxlJywgY3dkPXRlbXBkaXIpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGFkZCBkZXZ0b29sLW5ldy1maWxlJywgY3dkPXRlbXBkaXIpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCAtbSAiQWRkIGEgbmV3IGZpbGUiJywgY3dkPXRlbXBkaXIpCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2NkICVzOyBybSAtcmYgJXM7IGdpdCBjaGVja291dCAlcyAlcycgJSAob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCB0ZXN0cmVjaXBlLCB0ZXN0cmVjaXBlLCBvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpKSkKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgLW0gc3JjcmV2ICVzJyAlIHRlc3RyZWNpcGUpCi0gICAgICAgIGV4cGVjdGVkX3N0YXR1cyA9IFsoJyBNJywgJy4qLyVzJCcgJSBvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpKV0gKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFsoJyBEJywgJy4qLyVzJCcgJSBwYXRjaCkgZm9yIHBhdGNoIGluIHBhdGNoZXNdCi0gICAgICAgIHNlbGYuX2NoZWNrX3JlcG9fc3RhdHVzKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgZXhwZWN0ZWRfc3RhdHVzKQotCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGRpZmYgJXMnICUgb3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSwgY3dkPW9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSkKLSAgICAgICAgYWRkbGluZXMgPSBbJ1NSQ1JFViA9ICIuKiInLCAnU1JDX1VSSSA9ICJnaXQ6Ly9naXQuaW5mcmFkZWFkLm9yZy9tdGQtdXRpbHMuZ2l0IiddCi0gICAgICAgIHNyY3VyaWxpbmVzID0gc3JjX3VyaS5zcGxpdCgpCi0gICAgICAgIHNyY3VyaWxpbmVzWzBdID0gJ1NSQ19VUkkgPSAiJyArIHNyY3VyaWxpbmVzWzBdCi0gICAgICAgIHNyY3VyaWxpbmVzLmFwcGVuZCgnIicpCi0gICAgICAgIHJlbW92ZWxpbmVzID0gWydTUkNSRVYgPSAiLioiJ10gKyBzcmN1cmlsaW5lcwotICAgICAgICBmb3IgbGluZSBpbiByZXN1bHQub3V0cHV0LnNwbGl0bGluZXMoKToKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnKysrJykgb3IgbGluZS5zdGFydHN3aXRoKCctLS0nKToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJysnKToKLSAgICAgICAgICAgICAgICBtYXRjaGVkID0gRmFsc2UKLSAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiBhZGRsaW5lczoKLSAgICAgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2goaXRlbSwgbGluZVsxOl0uc3RyaXAoKSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2hlZCwgJ1VuZXhwZWN0ZWQgZGlmZiBhZGQgbGluZTogJXMnICUgbGluZSkKLSAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCctJyk6Ci0gICAgICAgICAgICAgICAgbWF0Y2hlZCA9IEZhbHNlCi0gICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gcmVtb3ZlbGluZXM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHJlLm1hdGNoKGl0ZW0sIGxpbmVbMTpdLnN0cmlwKCkpOgotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGNoZWQsICdVbmV4cGVjdGVkIGRpZmYgcmVtb3ZlIGxpbmU6ICVzJyAlIGxpbmUpCi0gICAgICAgICMgTm93IHRyeSB3aXRoIGF1dG8gbW9kZQotICAgICAgICBydW5DbWQoJ2NkICVzOyBnaXQgY2hlY2tvdXQgJXMgJXMnICUgKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgdGVzdHJlY2lwZSwgb3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSkpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlICVzJyAlIHRlc3RyZWNpcGUpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwnLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQotICAgICAgICB0b3BsZXZlbGRpciA9IHJlc3VsdC5vdXRwdXQuc3RyaXAoKQotICAgICAgICByZWxwYXRjaHBhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5yZWxwYXRoKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgdG9wbGV2ZWxkaXIpLCB0ZXN0cmVjaXBlKQotICAgICAgICBleHBlY3RlZF9zdGF0dXMgPSBbKCcgTScsIG9zLnBhdGgucmVscGF0aChyZWNpcGVmaWxlLCB0b3BsZXZlbGRpcikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKCc/PycsICclcy8wMDAxLUNoYW5nZS10aGUtTWFrZWZpbGUucGF0Y2gnICUgcmVscGF0Y2hwYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICgnPz8nLCAnJXMvMDAwMi1BZGQtYS1uZXctZmlsZS5wYXRjaCcgJSByZWxwYXRjaHBhdGgpXQotICAgICAgICBzZWxmLl9jaGVja19yZXBvX3N0YXR1cyhvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIGV4cGVjdGVkX3N0YXR1cykKLQotICAgIEB0ZXN0Y2FzZSgxMTcwKQotICAgIGRlZiB0ZXN0X2RldnRvb2xfdXBkYXRlX3JlY2lwZV9hcHBlbmQoc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucwotICAgICAgICB0ZXN0cmVjaXBlID0gJ21kYWRtJwotICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWydGSUxFJywgJ1NSQ19VUkknXSwgdGVzdHJlY2lwZSkKLSAgICAgICAgcmVjaXBlZmlsZSA9IGJiX3ZhcnNbJ0ZJTEUnXQotICAgICAgICBzcmNfdXJpID0gYmJfdmFyc1snU1JDX1VSSSddCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2dpdDovLycsIHNyY191cmksICdUaGlzIHRlc3QgZXhwZWN0cyB0aGUgJXMgcmVjaXBlIHRvIE5PVCBiZSBhIGdpdCByZWNpcGUnICUgdGVzdHJlY2lwZSkKLSAgICAgICAgc2VsZi5fY2hlY2tfcmVwb19zdGF0dXMob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCBbXSkKLSAgICAgICAgIyBGaXJzdCwgbW9kaWZ5IGEgcmVjaXBlCi0gICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKLSAgICAgICAgdGVtcHNyY2RpciA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAnc291cmNlJykKLSAgICAgICAgdGVtcGxheWVyZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdsYXllcicpCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLndvcmtzcGFjZWRpcikKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKLSAgICAgICAgIyAoZG9uJ3QgYm90aGVyIHdpdGggY2xlYW5pbmcgdGhlIHJlY2lwZSBvbiB0ZWFyZG93biwgd2Ugd29uJ3QgYmUgYnVpbGRpbmcgaXQpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgLXggJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBzcmNkaXIpKQotICAgICAgICAjIENoZWNrIGdpdCByZXBvCi0gICAgICAgIHNlbGYuX2NoZWNrX3NyY19yZXBvKHRlbXBzcmNkaXIpCi0gICAgICAgICMgQWRkIGEgY29tbWl0Ci0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgic2VkICdzIVxcKCNkZWZpbmUgVkVSU0lPTlxcVypcIlteXCJdKlxcKVwiIVxcMS1jdXN0b21cIiEnIC1pIFJlYWRNZS5jIiwgY3dkPXRlbXBzcmNkaXIpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCAtYSAtbSAiQWRkIG91ciBjdXN0b20gdmVyc2lvbiInLCBjd2Q9dGVtcHNyY2RpcikKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignY2QgJXM7IHJtIC1mICVzLyoucGF0Y2g7IGdpdCBjaGVja291dCAuJyAlIChvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIHRlc3RyZWNpcGUpKQotICAgICAgICAjIENyZWF0ZSBhIHRlbXBvcmFyeSBsYXllciBhbmQgYWRkIGl0IHRvIGJibGF5ZXJzLmNvbmYKLSAgICAgICAgc2VsZi5fY3JlYXRlX3RlbXBfbGF5ZXIodGVtcGxheWVyZGlyLCBUcnVlLCAnc2VsZnRlc3R1cGRhdGVyZWNpcGUnKQotICAgICAgICAjIENyZWF0ZSB0aGUgYmJhcHBlbmQKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgJXMgLWEgJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBsYXllcmRpcikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6JywgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgIyBDaGVjayByZWNpcGUgaXMgc3RpbGwgY2xlYW4KLSAgICAgICAgc2VsZi5fY2hlY2tfcmVwb19zdGF0dXMob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCBbXSkKLSAgICAgICAgIyBDaGVjayBiYmFwcGVuZCB3YXMgY3JlYXRlZAotICAgICAgICBzcGxpdHBhdGggPSBvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkuc3BsaXQob3Muc2VwKQotICAgICAgICBhcHBlbmRkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGxheWVyZGlyLCBzcGxpdHBhdGhbLTJdLCBzcGxpdHBhdGhbLTFdKQotICAgICAgICBiYmFwcGVuZGZpbGUgPSBzZWxmLl9jaGVja19iYmFwcGVuZCh0ZXN0cmVjaXBlLCByZWNpcGVmaWxlLCBhcHBlbmRkaXIpCi0gICAgICAgIHBhdGNoZmlsZSA9IG9zLnBhdGguam9pbihhcHBlbmRkaXIsIHRlc3RyZWNpcGUsICcwMDAxLUFkZC1vdXItY3VzdG9tLXZlcnNpb24ucGF0Y2gnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocGF0Y2hmaWxlKSwgJ1BhdGNoIGZpbGUgbm90IGNyZWF0ZWQnKQotCi0gICAgICAgICMgQ2hlY2sgYmJhcHBlbmQgY29udGVudHMKLSAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1BZGQtb3VyLWN1c3RvbS12ZXJzaW9uLnBhdGNoIlxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQotICAgICAgICB3aXRoIG9wZW4oYmJhcHBlbmRmaWxlLCAncicpIGFzIGY6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkbGluZXMsIGYucmVhZGxpbmVzKCkpCi0KLSAgICAgICAgIyBDaGVjayB3ZSBjYW4gcnVuIGl0IGFnYWluIGFuZCBiYmFwcGVuZCBpc24ndCBtb2RpZmllZAotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAlcyAtYSAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGxheWVyZGlyKSkKLSAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQotICAgICAgICAjIERyb3AgbmV3IGNvbW1pdCBhbmQgY2hlY2sgcGF0Y2ggZ2V0cyBkZWxldGVkCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHJlc2V0IEhFQUReJywgY3dkPXRlbXBzcmNkaXIpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHBhdGNoZmlsZSksICdQYXRjaCBmaWxlIG5vdCBkZWxldGVkJykKLSAgICAgICAgZXhwZWN0ZWRsaW5lczIgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KLSAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzMiwgZi5yZWFkbGluZXMoKSkKLSAgICAgICAgIyBQdXQgY29tbWl0IGJhY2sgYW5kIGNoZWNrIHdlIGNhbiBydW4gaXQgaWYgbGF5ZXIgaXNuJ3QgaW4gYmJsYXllcnMuY29uZgotICAgICAgICBvcy5yZW1vdmUoYmJhcHBlbmRmaWxlKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjb21taXQgLWEgLW0gIkFkZCBvdXIgY3VzdG9tIHZlcnNpb24iJywgY3dkPXRlbXBzcmNkaXIpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICVzJyAlIHRlbXBsYXllcmRpciwgY3dkPXNlbGYuYnVpbGRkaXIpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQotICAgICAgICBzZWxmLmFzc2VydEluKCdXQVJOSU5HOiBTcGVjaWZpZWQgbGF5ZXIgaXMgbm90IGN1cnJlbnRseSBlbmFibGVkIGluIGJibGF5ZXJzLmNvbmYnLCByZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocGF0Y2hmaWxlKSwgJ1BhdGNoIGZpbGUgbm90IGNyZWF0ZWQgKHdpdGggZGlzYWJsZWQgbGF5ZXIpJykKLSAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQotICAgICAgICAjIERlbGV0aW5nIGlzbid0IGV4cGVjdGVkIHRvIHdvcmsgdW5kZXIgdGhlc2UgY2lyY3Vtc3RhbmNlcwotCi0gICAgQHRlc3RjYXNlKDExNzEpCi0gICAgZGVmIHRlc3RfZGV2dG9vbF91cGRhdGVfcmVjaXBlX2FwcGVuZF9naXQoc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucwotICAgICAgICB0ZXN0cmVjaXBlID0gJ210ZC11dGlscycKLSAgICAgICAgYmJfdmFycyA9IGdldF9iYl92YXJzKFsnRklMRScsICdTUkNfVVJJJ10sIHRlc3RyZWNpcGUpCi0gICAgICAgIHJlY2lwZWZpbGUgPSBiYl92YXJzWydGSUxFJ10KLSAgICAgICAgc3JjX3VyaSA9IGJiX3ZhcnNbJ1NSQ19VUkknXQotICAgICAgICBzZWxmLmFzc2VydEluKCdnaXQ6Ly8nLCBzcmNfdXJpLCAnVGhpcyB0ZXN0IGV4cGVjdHMgdGhlICVzIHJlY2lwZSB0byBiZSBhIGdpdCByZWNpcGUnICUgdGVzdHJlY2lwZSkKLSAgICAgICAgZm9yIGVudHJ5IGluIHNyY191cmkuc3BsaXQoKToKLSAgICAgICAgICAgIGlmIGVudHJ5LnN0YXJ0c3dpdGgoJ2dpdDovLycpOgotICAgICAgICAgICAgICAgIGdpdF91cmkgPSBlbnRyeQotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHNlbGYuX2NoZWNrX3JlcG9fc3RhdHVzKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgW10pCi0gICAgICAgICMgRmlyc3QsIG1vZGlmeSBhIHJlY2lwZQotICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCi0gICAgICAgIHRlbXBzcmNkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ3NvdXJjZScpCi0gICAgICAgIHRlbXBsYXllcmRpciA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAnbGF5ZXInKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCi0gICAgICAgICMgKGRvbid0IGJvdGhlciB3aXRoIGNsZWFuaW5nIHRoZSByZWNpcGUgb24gdGVhcmRvd24sIHdlIHdvbid0IGJlIGJ1aWxkaW5nIGl0KQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wc3JjZGlyKSkKLSAgICAgICAgIyBDaGVjayBnaXQgcmVwbwotICAgICAgICBzZWxmLl9jaGVja19zcmNfcmVwbyh0ZW1wc3JjZGlyKQotICAgICAgICAjIEFkZCBhIGNvbW1pdAotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2VjaG8gIiMgQWRkaXRpb25hbCBsaW5lIiA+PiBNYWtlZmlsZS5hbScsIGN3ZD10ZW1wc3JjZGlyKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjb21taXQgLWEgLW0gIkNoYW5nZSB0aGUgTWFrZWZpbGUiJywgY3dkPXRlbXBzcmNkaXIpCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2NkICVzOyBybSAtZiAlcy8qLnBhdGNoOyBnaXQgY2hlY2tvdXQgLicgJSAob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCB0ZXN0cmVjaXBlKSkKLSAgICAgICAgIyBDcmVhdGUgYSB0ZW1wb3JhcnkgbGF5ZXIKLSAgICAgICAgb3MubWFrZWRpcnMob3MucGF0aC5qb2luKHRlbXBsYXllcmRpciwgJ2NvbmYnKSkKLSAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbih0ZW1wbGF5ZXJkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSwgJ3cnKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZSgnQkJQQVRIIC49ICI6JHtMQVlFUkRJUn0iXG4nKQotICAgICAgICAgICAgZi53cml0ZSgnQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYmFwcGVuZCJcbicpCi0gICAgICAgICAgICBmLndyaXRlKCdCQkZJTEVfQ09MTEVDVElPTlMgKz0gIm9lc2VsZnRlc3R0ZW1wbGF5ZXIiXG4nKQotICAgICAgICAgICAgZi53cml0ZSgnQkJGSUxFX1BBVFRFUk5fb2VzZWxmdGVzdHRlbXBsYXllciA9ICJeJHtMQVlFUkRJUn0vIlxuJykKLSAgICAgICAgICAgIGYud3JpdGUoJ0JCRklMRV9QUklPUklUWV9vZXNlbGZ0ZXN0dGVtcGxheWVyID0gIjk5OSJcbicpCi0gICAgICAgICAgICBmLndyaXRlKCdCQkZJTEVfUEFUVEVSTl9JR05PUkVfRU1QVFlfb2VzZWxmdGVzdHRlbXBsYXllciA9ICIxIlxuJykKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICVzIHx8IHRydWUnICUgdGVtcGxheWVyZGlyKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIGFkZC1sYXllciAlcycgJSB0ZW1wbGF5ZXJkaXIsIGN3ZD1zZWxmLmJ1aWxkZGlyKQotICAgICAgICAjIENyZWF0ZSB0aGUgYmJhcHBlbmQKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgLW0gc3JjcmV2ICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOicsIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgICMgQ2hlY2sgcmVjaXBlIGlzIHN0aWxsIGNsZWFuCi0gICAgICAgIHNlbGYuX2NoZWNrX3JlcG9fc3RhdHVzKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgW10pCi0gICAgICAgICMgQ2hlY2sgYmJhcHBlbmQgd2FzIGNyZWF0ZWQKLSAgICAgICAgc3BsaXRwYXRoID0gb3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLnNwbGl0KG9zLnNlcCkKLSAgICAgICAgYXBwZW5kZGlyID0gb3MucGF0aC5qb2luKHRlbXBsYXllcmRpciwgc3BsaXRwYXRoWy0yXSwgc3BsaXRwYXRoWy0xXSkKLSAgICAgICAgYmJhcHBlbmRmaWxlID0gc2VsZi5fY2hlY2tfYmJhcHBlbmQodGVzdHJlY2lwZSwgcmVjaXBlZmlsZSwgYXBwZW5kZGlyKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihhcHBlbmRkaXIsIHRlc3RyZWNpcGUpKSwgJ1BhdGNoIGRpcmVjdG9yeSBzaG91bGQgbm90IGJlIGNyZWF0ZWQnKQotCi0gICAgICAgICMgQ2hlY2sgYmJhcHBlbmQgY29udGVudHMKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCBjd2Q9dGVtcHNyY2RpcikKLSAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IHNldChbJ1NSQ1JFViA9ICIlcyJcbicgJSByZXN1bHQub3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSA9ICIlcyJcbicgJSBnaXRfdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXSkKLSAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBzZXQoZi5yZWFkbGluZXMoKSkpCi0KLSAgICAgICAgIyBDaGVjayB3ZSBjYW4gcnVuIGl0IGFnYWluIGFuZCBiYmFwcGVuZCBpc24ndCBtb2RpZmllZAotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAtbSBzcmNyZXYgJXMgLWEgJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBsYXllcmRpcikpCi0gICAgICAgIHdpdGggb3BlbihiYmFwcGVuZGZpbGUsICdyJykgYXMgZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRsaW5lcywgc2V0KGYucmVhZGxpbmVzKCkpKQotICAgICAgICAjIERyb3AgbmV3IGNvbW1pdCBhbmQgY2hlY2sgU1JDUkVWIGNoYW5nZXMKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgcmVzZXQgSEVBRF4nLCBjd2Q9dGVtcHNyY2RpcikKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgLW0gc3JjcmV2ICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihhcHBlbmRkaXIsIHRlc3RyZWNpcGUpKSwgJ1BhdGNoIGRpcmVjdG9yeSBzaG91bGQgbm90IGJlIGNyZWF0ZWQnKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCByZXYtcGFyc2UgSEVBRCcsIGN3ZD10ZW1wc3JjZGlyKQotICAgICAgICBleHBlY3RlZGxpbmVzID0gc2V0KFsnU1JDUkVWID0gIiVzIlxuJyAlIHJlc3VsdC5vdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJID0gIiVzIlxuJyAlIGdpdF91cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddKQotICAgICAgICB3aXRoIG9wZW4oYmJhcHBlbmRmaWxlLCAncicpIGFzIGY6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkbGluZXMsIHNldChmLnJlYWRsaW5lcygpKSkKLSAgICAgICAgIyBQdXQgY29tbWl0IGJhY2sgYW5kIGNoZWNrIHdlIGNhbiBydW4gaXQgaWYgbGF5ZXIgaXNuJ3QgaW4gYmJsYXllcnMuY29uZgotICAgICAgICBvcy5yZW1vdmUoYmJhcHBlbmRmaWxlKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjb21taXQgLWEgLW0gIkNoYW5nZSB0aGUgTWFrZWZpbGUiJywgY3dkPXRlbXBzcmNkaXIpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICVzJyAlIHRlbXBsYXllcmRpciwgY3dkPXNlbGYuYnVpbGRkaXIpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlIC1tIHNyY3JldiAlcyAtYSAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGxheWVyZGlyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignV0FSTklORzogU3BlY2lmaWVkIGxheWVyIGlzIG5vdCBjdXJyZW50bHkgZW5hYmxlZCBpbiBiYmxheWVycy5jb25mJywgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oYXBwZW5kZGlyLCB0ZXN0cmVjaXBlKSksICdQYXRjaCBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBiZSBjcmVhdGVkJykKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCBjd2Q9dGVtcHNyY2RpcikKLSAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IHNldChbJ1NSQ1JFViA9ICIlcyJcbicgJSByZXN1bHQub3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSA9ICIlcyJcbicgJSBnaXRfdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXSkKLSAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBzZXQoZi5yZWFkbGluZXMoKSkpCi0gICAgICAgICMgRGVsZXRpbmcgaXNuJ3QgZXhwZWN0ZWQgdG8gd29yayB1bmRlciB0aGVzZSBjaXJjdW1zdGFuY2VzCi0KLSAgICBAdGVzdGNhc2UoMTM3MCkKLSAgICBkZWYgdGVzdF9kZXZ0b29sX3VwZGF0ZV9yZWNpcGVfbG9jYWxfZmlsZXMoc2VsZik6Ci0gICAgICAgICIiIkNoZWNrIHRoYXQgbG9jYWwgc291cmNlIGZpbGVzIGFyZSBjb3BpZWQgb3ZlciBpbnN0ZWFkIG9mIHBhdGNoZWQiIiIKLSAgICAgICAgdGVzdHJlY2lwZSA9ICdtYWtlZGV2cycKLSAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQotICAgICAgICAjIFNldHVwIHNyY3RyZWUgZm9yIG1vZGlmeWluZyB0aGUgcmVjaXBlCi0gICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQotICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQotICAgICAgICAjIChkb24ndCBib3RoZXIgd2l0aCBjbGVhbmluZyB0aGUgcmVjaXBlIG9uIHRlYXJkb3duLCB3ZSB3b24ndCBiZQotICAgICAgICAjIGJ1aWxkaW5nIGl0KQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wZGlyKSkKLSAgICAgICAgIyBDaGVjayBnaXQgcmVwbwotICAgICAgICBzZWxmLl9jaGVja19zcmNfcmVwbyh0ZW1wZGlyKQotICAgICAgICAjIFRyeSBidWlsZGluZyBqdXN0IHRvIGVuc3VyZSB3ZSBoYXZlbid0IGJyb2tlbiB0aGF0Ci0gICAgICAgIGJpdGJha2UoIiVzIiAlIHRlc3RyZWNpcGUpCi0gICAgICAgICMgRWRpdCAvIGNvbW1pdCBsb2NhbCBzb3VyY2UKLSAgICAgICAgcnVuQ21kKCdlY2hvICIvKiBGb29iYXIgKi8iID4+IG9lLWxvY2FsLWZpbGVzL21ha2VkZXZzLmMnLCBjd2Q9dGVtcGRpcikKLSAgICAgICAgcnVuQ21kKCdlY2hvICJGb28iID4gb2UtbG9jYWwtZmlsZXMvbmV3LWxvY2FsJywgY3dkPXRlbXBkaXIpCi0gICAgICAgIHJ1bkNtZCgnZWNobyAiQmFyIiA+IG5ldy1maWxlJywgY3dkPXRlbXBkaXIpCi0gICAgICAgIHJ1bkNtZCgnZ2l0IGFkZCBuZXctZmlsZScsIGN3ZD10ZW1wZGlyKQotICAgICAgICBydW5DbWQoJ2dpdCBjb21taXQgLW0gIkFkZCBuZXcgZmlsZSInLCBjd2Q9dGVtcGRpcikKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignY2QgJXM7IGdpdCBjbGVhbiAtZmQgLjsgZ2l0IGNoZWNrb3V0IC4nICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkpCi0gICAgICAgIHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlICVzJyAlIHRlc3RyZWNpcGUpCi0gICAgICAgIGV4cGVjdGVkX3N0YXR1cyA9IFsoJyBNJywgJy4qLyVzJCcgJSBvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICgnIE0nLCAnLiovbWFrZWRldnMvbWFrZWRldnMuYyQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICgnPz8nLCAnLiovbWFrZWRldnMvbmV3LWxvY2FsJCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKCc/PycsICcuKi9tYWtlZGV2cy8wMDAxLUFkZC1uZXctZmlsZS5wYXRjaCQnKV0KLSAgICAgICAgc2VsZi5fY2hlY2tfcmVwb19zdGF0dXMob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCBleHBlY3RlZF9zdGF0dXMpCi0KLSAgICBAdGVzdGNhc2UoMTM3MSkKLSAgICBkZWYgdGVzdF9kZXZ0b29sX3VwZGF0ZV9yZWNpcGVfbG9jYWxfZmlsZXNfMihzZWxmKToKLSAgICAgICAgIiIiQ2hlY2sgbG9jYWwgc291cmNlIGZpbGVzIHN1cHBvcnQgd2hlbiBvZS1sb2NhbC1maWxlcyBpcyBpbiBHaXQiIiIKLSAgICAgICAgdGVzdHJlY2lwZSA9ICdsem8nCi0gICAgICAgIHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgdGVzdHJlY2lwZSkKLSAgICAgICAgIyBTZXR1cCBzcmN0cmVlIGZvciBtb2RpZnlpbmcgdGhlIHJlY2lwZQotICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLndvcmtzcGFjZWRpcikKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGRpcikpCi0gICAgICAgICMgQ2hlY2sgZ2l0IHJlcG8KLSAgICAgICAgc2VsZi5fY2hlY2tfc3JjX3JlcG8odGVtcGRpcikKLSAgICAgICAgIyBBZGQgb2UtbG9jYWwtZmlsZXMgdG8gR2l0Ci0gICAgICAgIHJ1bkNtZCgncm0gb2UtbG9jYWwtZmlsZXMvLmdpdGlnbm9yZScsIGN3ZD10ZW1wZGlyKQotICAgICAgICBydW5DbWQoJ2dpdCBhZGQgb2UtbG9jYWwtZmlsZXMnLCBjd2Q9dGVtcGRpcikKLSAgICAgICAgcnVuQ21kKCdnaXQgY29tbWl0IC1tICJBZGQgbG9jYWwgc291cmNlcyInLCBjd2Q9dGVtcGRpcikKLSAgICAgICAgIyBFZGl0IC8gY29tbWl0IGxvY2FsIHNvdXJjZXMKLSAgICAgICAgcnVuQ21kKCdlY2hvICIjIEZvb2JhciIgPj4gb2UtbG9jYWwtZmlsZXMvYWNpbmNsdWRlLm00JywgY3dkPXRlbXBkaXIpCi0gICAgICAgIHJ1bkNtZCgnZ2l0IGNvbW1pdCAtYW0gIkVkaXQgZXhpc3RpbmcgZmlsZSInLCBjd2Q9dGVtcGRpcikKLSAgICAgICAgcnVuQ21kKCdnaXQgcm0gb2UtbG9jYWwtZmlsZXMvcnVuLXB0ZXN0JywgY3dkPXRlbXBkaXIpCi0gICAgICAgIHJ1bkNtZCgnZ2l0IGNvbW1pdCAtbSJSZW1vdmUgZmlsZSInLCBjd2Q9dGVtcGRpcikKLSAgICAgICAgcnVuQ21kKCdlY2hvICJGb28iID4gb2UtbG9jYWwtZmlsZXMvbmV3LWxvY2FsJywgY3dkPXRlbXBkaXIpCi0gICAgICAgIHJ1bkNtZCgnZ2l0IGFkZCBvZS1sb2NhbC1maWxlcy9uZXctbG9jYWwnLCBjd2Q9dGVtcGRpcikKLSAgICAgICAgcnVuQ21kKCdnaXQgY29tbWl0IC1tICJBZGQgbmV3IGxvY2FsIGZpbGUiJywgY3dkPXRlbXBkaXIpCi0gICAgICAgIHJ1bkNtZCgnZWNobyAiR2FyIiA+IG5ldy1maWxlJywgY3dkPXRlbXBkaXIpCi0gICAgICAgIHJ1bkNtZCgnZ2l0IGFkZCBuZXctZmlsZScsIGN3ZD10ZW1wZGlyKQotICAgICAgICBydW5DbWQoJ2dpdCBjb21taXQgLW0gIkFkZCBuZXcgZmlsZSInLCBjd2Q9dGVtcGRpcikKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignY2QgJXM7IGdpdCBjbGVhbiAtZmQgLjsgZ2l0IGNoZWNrb3V0IC4nICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkpCi0gICAgICAgICMgQ2hlY2tvdXQgdW5tb2RpZmllZCBmaWxlIHRvIHdvcmtpbmcgY29weSAtPiBkZXZ0b29sIHNob3VsZCBzdGlsbCBwaWNrCi0gICAgICAgICMgdGhlIG1vZGlmaWVkIHZlcnNpb24gZnJvbSBIRUFECi0gICAgICAgIHJ1bkNtZCgnZ2l0IGNoZWNrb3V0IEhFQUReIC0tIG9lLWxvY2FsLWZpbGVzL2FjaW5jbHVkZS5tNCcsIGN3ZD10ZW1wZGlyKQotICAgICAgICBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAlcycgJSB0ZXN0cmVjaXBlKQotICAgICAgICBleHBlY3RlZF9zdGF0dXMgPSBbKCcgTScsICcuKi8lcyQnICUgb3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoJyBNJywgJy4qL2FjaW5jbHVkZS5tNCQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICgnIEQnLCAnLiovcnVuLXB0ZXN0JCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKCc/PycsICcuKi9uZXctbG9jYWwkJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoJz8/JywgJy4qLzAwMDEtQWRkLW5ldy1maWxlLnBhdGNoJCcpXQotICAgICAgICBzZWxmLl9jaGVja19yZXBvX3N0YXR1cyhvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIGV4cGVjdGVkX3N0YXR1cykKLQotICAgIGRlZiB0ZXN0X2RldnRvb2xfdXBkYXRlX3JlY2lwZV9sb2NhbF9maWxlc18zKHNlbGYpOgotICAgICAgICAjIEZpcnN0LCBtb2RpZnkgdGhlIHJlY2lwZQotICAgICAgICB0ZXN0cmVjaXBlID0gJ2RldnRvb2wtdGVzdC1sb2NhbG9ubHknCi0gICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhbJ0ZJTEUnLCAnU1JDX1VSSSddLCB0ZXN0cmVjaXBlKQotICAgICAgICByZWNpcGVmaWxlID0gYmJfdmFyc1snRklMRSddCi0gICAgICAgIHNyY191cmkgPSBiYl92YXJzWydTUkNfVVJJJ10KLSAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCi0gICAgICAgICMgKGRvbid0IGJvdGhlciB3aXRoIGNsZWFuaW5nIHRoZSByZWNpcGUgb24gdGVhcmRvd24sIHdlIHdvbid0IGJlIGJ1aWxkaW5nIGl0KQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzJyAlIHRlc3RyZWNpcGUpCi0gICAgICAgICMgTW9kaWZ5IG9uZSBmaWxlCi0gICAgICAgIHJ1bkNtZCgnZWNobyAiQW5vdGhlciBsaW5lIiA+PiBmaWxlMicsIGN3ZD1vcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdzb3VyY2VzJywgdGVzdHJlY2lwZSwgJ29lLWxvY2FsLWZpbGVzJykpCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2NkICVzOyBybSAlcy8qOyBnaXQgY2hlY2tvdXQgJXMgJXMnICUgKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgdGVzdHJlY2lwZSwgdGVzdHJlY2lwZSwgb3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSkpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlICVzJyAlIHRlc3RyZWNpcGUpCi0gICAgICAgIGV4cGVjdGVkX3N0YXR1cyA9IFsoJyBNJywgJy4qLyVzL2ZpbGUyJCcgJSB0ZXN0cmVjaXBlKV0KLSAgICAgICAgc2VsZi5fY2hlY2tfcmVwb19zdGF0dXMob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCBleHBlY3RlZF9zdGF0dXMpCi0KLSAgICBkZWYgdGVzdF9kZXZ0b29sX3VwZGF0ZV9yZWNpcGVfbG9jYWxfcGF0Y2hfZ3ooc2VsZik6Ci0gICAgICAgICMgRmlyc3QsIG1vZGlmeSB0aGUgcmVjaXBlCi0gICAgICAgIHRlc3RyZWNpcGUgPSAnZGV2dG9vbC10ZXN0LXBhdGNoLWd6JwotICAgICAgICBpZiBnZXRfYmJfdmFyKCdESVNUUk8nKSA9PSAncG9reS10aW55JzoKLSAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIlRoZSBESVNUUk8gJ3Bva3ktdGlueScgZG9lcyBub3QgcHJvdmlkZSB0aGUgZGVwZW5kZW5jaWVzIG5lZWRlZCBieSAlcyIgJSB0ZXN0cmVjaXBlKQotICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWydGSUxFJywgJ1NSQ19VUkknXSwgdGVzdHJlY2lwZSkKLSAgICAgICAgcmVjaXBlZmlsZSA9IGJiX3ZhcnNbJ0ZJTEUnXQotICAgICAgICBzcmNfdXJpID0gYmJfdmFyc1snU1JDX1VSSSddCi0gICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQotICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQotICAgICAgICAjIChkb24ndCBib3RoZXIgd2l0aCBjbGVhbmluZyB0aGUgcmVjaXBlIG9uIHRlYXJkb3duLCB3ZSB3b24ndCBiZSBidWlsZGluZyBpdCkKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcycgJSB0ZXN0cmVjaXBlKQotICAgICAgICAjIE1vZGlmeSBvbmUgZmlsZQotICAgICAgICBzcmN0cmVlID0gb3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAnc291cmNlcycsIHRlc3RyZWNpcGUpCi0gICAgICAgIHJ1bkNtZCgnZWNobyAiQW5vdGhlciBsaW5lIiA+PiBSRUFETUUnLCBjd2Q9c3JjdHJlZSkKLSAgICAgICAgcnVuQ21kKCdnaXQgY29tbWl0IC1hIC0tYW1lbmQgLS1uby1lZGl0JywgY3dkPXNyY3RyZWUpCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2NkICVzOyBybSAlcy8qOyBnaXQgY2hlY2tvdXQgJXMgJXMnICUgKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgdGVzdHJlY2lwZSwgdGVzdHJlY2lwZSwgb3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSkpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlICVzJyAlIHRlc3RyZWNpcGUpCi0gICAgICAgIGV4cGVjdGVkX3N0YXR1cyA9IFsoJyBNJywgJy4qLyVzL3JlYWRtZS5wYXRjaC5neiQnICUgdGVzdHJlY2lwZSldCi0gICAgICAgIHNlbGYuX2NoZWNrX3JlcG9fc3RhdHVzKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgZXhwZWN0ZWRfc3RhdHVzKQotICAgICAgICBwYXRjaF9neiA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIHRlc3RyZWNpcGUsICdyZWFkbWUucGF0Y2guZ3onKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2ZpbGUgJXMnICUgcGF0Y2hfZ3opCi0gICAgICAgIGlmICdnemlwIGNvbXByZXNzZWQgZGF0YScgbm90IGluIHJlc3VsdC5vdXRwdXQ6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoJ05ldyBwYXRjaCBmaWxlIGlzIG5vdCBnemlwcGVkIC0gZmlsZSByZXBvcnRzOlxuJXMnICUgcmVzdWx0Lm91dHB1dCkKLQotICAgIGRlZiB0ZXN0X2RldnRvb2xfdXBkYXRlX3JlY2lwZV9sb2NhbF9maWxlc19zdWJkaXIoc2VsZik6Ci0gICAgICAgICMgVHJ5IGRldnRvb2wgZXh0cmFjdCBvbiBhIHJlY2lwZSB0aGF0IGhhcyBhIGZpbGUgd2l0aCBzdWJkaXI9IHNldCBpbgotICAgICAgICAjIFNSQ19VUkkgc3VjaCB0aGF0IGl0IG92ZXJ3cml0ZXMgYSBmaWxlIHRoYXQgd2FzIGluIGFuIGFyY2hpdmUgdGhhdAotICAgICAgICAjIHdhcyBhbHNvIGluIFNSQ19VUkkKLSAgICAgICAgIyBGaXJzdCwgbW9kaWZ5IHRoZSByZWNpcGUKLSAgICAgICAgdGVzdHJlY2lwZSA9ICdkZXZ0b29sLXRlc3Qtc3ViZGlyJwotICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWydGSUxFJywgJ1NSQ19VUkknXSwgdGVzdHJlY2lwZSkKLSAgICAgICAgcmVjaXBlZmlsZSA9IGJiX3ZhcnNbJ0ZJTEUnXQotICAgICAgICBzcmNfdXJpID0gYmJfdmFyc1snU1JDX1VSSSddCi0gICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQotICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQotICAgICAgICAjIChkb24ndCBib3RoZXIgd2l0aCBjbGVhbmluZyB0aGUgcmVjaXBlIG9uIHRlYXJkb3duLCB3ZSB3b24ndCBiZSBidWlsZGluZyBpdCkKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcycgJSB0ZXN0cmVjaXBlKQotICAgICAgICB0ZXN0ZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ3NvdXJjZXMnLCB0ZXN0cmVjaXBlLCAndGVzdGZpbGUnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGVzdGZpbGUpLCAnRXh0cmFjdGVkIHNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQnKQotICAgICAgICB3aXRoIG9wZW4odGVzdGZpbGUsICdyJykgYXMgZjoKLSAgICAgICAgICAgIGNvbnRlbnRzID0gZi5yZWFkKCkucnN0cmlwKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50cywgJ01vZGlmaWVkIHZlcnNpb24nLCAnRmlsZSBoYXMgYXBwYXJlbnRseSBub3QgYmVlbiBvdmVyd3JpdHRlbiBhcyBpdCBzaG91bGQgaGF2ZSBiZWVuJykKLSAgICAgICAgIyBUZXN0IGRldnRvb2wgdXBkYXRlLXJlY2lwZSB3aXRob3V0IG1vZGlmeWluZyBhbnkgZmlsZXMKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignY2QgJXM7IHJtICVzLyo7IGdpdCBjaGVja291dCAlcyAlcycgJSAob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCB0ZXN0cmVjaXBlLCB0ZXN0cmVjaXBlLCBvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpKSkKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgJXMnICUgdGVzdHJlY2lwZSkKLSAgICAgICAgZXhwZWN0ZWRfc3RhdHVzID0gW10KLSAgICAgICAgc2VsZi5fY2hlY2tfcmVwb19zdGF0dXMob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCBleHBlY3RlZF9zdGF0dXMpCi0KLSAgICBAdGVzdGNhc2UoMTE2MykKLSAgICBkZWYgdGVzdF9kZXZ0b29sX2V4dHJhY3Qoc2VsZik6Ci0gICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKLSAgICAgICAgIyBUcnkgZGV2dG9vbCBleHRyYWN0Ci0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKLSAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKCdQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9tYWtlID0gInJlbWFrZSInKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgZXh0cmFjdCByZW1ha2UgJXMnICUgdGVtcGRpcikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnTWFrZWZpbGUuYW0nKSksICdFeHRyYWN0ZWQgc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCcpCi0gICAgICAgICMgZGV2dG9vbCBleHRyYWN0IHNob3VsZG4ndCBjcmVhdGUgdGhlIHdvcmtzcGFjZQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHNlbGYud29ya3NwYWNlZGlyKSkKLSAgICAgICAgc2VsZi5fY2hlY2tfc3JjX3JlcG8odGVtcGRpcikKLQotICAgIEB0ZXN0Y2FzZSgxMzc5KQotICAgIGRlZiB0ZXN0X2RldnRvb2xfZXh0cmFjdF92aXJ0dWFsKHNlbGYpOgotICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCi0gICAgICAgICMgVHJ5IGRldnRvb2wgZXh0cmFjdAotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBleHRyYWN0IHZpcnR1YWwvbWFrZSAlcycgJSB0ZW1wZGlyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHRlbXBkaXIsICdNYWtlZmlsZS5hbScpKSwgJ0V4dHJhY3RlZCBzb3VyY2UgY291bGQgbm90IGJlIGZvdW5kJykKLSAgICAgICAgIyBkZXZ0b29sIGV4dHJhY3Qgc2hvdWxkbid0IGNyZWF0ZSB0aGUgd29ya3NwYWNlCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoc2VsZi53b3Jrc3BhY2VkaXIpKQotICAgICAgICBzZWxmLl9jaGVja19zcmNfcmVwbyh0ZW1wZGlyKQotCi0gICAgQHRlc3RjYXNlKDExNjgpCi0gICAgZGVmIHRlc3RfZGV2dG9vbF9yZXNldF9hbGwoc2VsZik6Ci0gICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQotICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQotICAgICAgICB0ZXN0cmVjaXBlMSA9ICdtZGFkbScKLSAgICAgICAgdGVzdHJlY2lwZTIgPSAnY3JvbmllJwotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5IC14ICVzICVzJyAlICh0ZXN0cmVjaXBlMSwgb3MucGF0aC5qb2luKHRlbXBkaXIsIHRlc3RyZWNpcGUxKSkpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgLXggJXMgJXMnICUgKHRlc3RyZWNpcGUyLCBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZTIpKSkKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGJ1aWxkICVzJyAlIHRlc3RyZWNpcGUxKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYnVpbGQgJXMnICUgdGVzdHJlY2lwZTIpCi0gICAgICAgIHN0YW1wcHJlZml4MSA9IGdldF9iYl92YXIoJ1NUQU1QJywgdGVzdHJlY2lwZTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGFtcHByZWZpeDEsICdVbmFibGUgdG8gZ2V0IFNUQU1QIHZhbHVlIGZvciByZWNpcGUgJXMnICUgdGVzdHJlY2lwZTEpCi0gICAgICAgIHN0YW1wcHJlZml4MiA9IGdldF9iYl92YXIoJ1NUQU1QJywgdGVzdHJlY2lwZTIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGFtcHByZWZpeDIsICdVbmFibGUgdG8gZ2V0IFNUQU1QIHZhbHVlIGZvciByZWNpcGUgJXMnICUgdGVzdHJlY2lwZTIpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCAtYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZTEsIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZTIsIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKHRlc3RyZWNpcGUxLCByZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKHRlc3RyZWNpcGUyLCByZXN1bHQub3V0cHV0KQotICAgICAgICBtYXRjaGVzMSA9IGdsb2IuZ2xvYihzdGFtcHByZWZpeDEgKyAnKicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0Y2hlczEsICdTdGFtcCBmaWxlcyBleGlzdCBmb3IgcmVjaXBlICVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBjbGVhbmVkJyAlIHRlc3RyZWNpcGUxKQotICAgICAgICBtYXRjaGVzMiA9IGdsb2IuZ2xvYihzdGFtcHByZWZpeDIgKyAnKicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0Y2hlczIsICdTdGFtcCBmaWxlcyBleGlzdCBmb3IgcmVjaXBlICVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBjbGVhbmVkJyAlIHRlc3RyZWNpcGUyKQotCi0gICAgQHRlc3RjYXNlKDEyNzIpCi0gICAgZGVmIHRlc3RfZGV2dG9vbF9kZXBsb3lfdGFyZ2V0KHNlbGYpOgotICAgICAgICAjIE5PVEU6IFdoaWxzdCB0aGlzIHRlc3Qgd291bGQgc2VlbWluZ2x5IGJlIGJldHRlciBwbGFjZWQgYXMgYSBydW50aW1lIHRlc3QsCi0gICAgICAgICMgdW5mb3J0dW5hdGVseSB0aGUgcnVudGltZSB0ZXN0cyBydW4gdW5kZXIgYml0YmFrZSBhbmQgeW91IGNhbid0IHJ1bgotICAgICAgICAjIGRldnRvb2wgd2l0aGluIGJpdGJha2UgKHNpbmNlIGRldnRvb2wgbmVlZHMgdG8gcnVuIGJpdGJha2UgaXRzZWxmKS4KLSAgICAgICAgIyBBZGRpdGlvbmFsbHkgd2UgYXJlIHRlc3RpbmcgYnVpbGQtdGltZSBmdW5jdGlvbmFsaXR5IGFzIHdlbGwsIHNvCi0gICAgICAgICMgcmVhbGx5IHRoaXMgaGFzIHRvIGJlIGRvbmUgYXMgYW4gb2Utc2VsZnRlc3QgdGVzdC4KLSAgICAgICAgIwotICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKLSAgICAgICAgbWFjaGluZSA9IGdldF9iYl92YXIoJ01BQ0hJTkUnKQotICAgICAgICBpZiBub3QgbWFjaGluZS5zdGFydHN3aXRoKCdxZW11Jyk6Ci0gICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdUaGlzIHRlc3Qgb25seSB3b3JrcyB3aXRoIHFlbXUgbWFjaGluZXMnKQotICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoJy9ldGMvcnVucWVtdS1ub3N1ZG8nKToKLSAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ1lvdSBtdXN0IHNldCB1cCB0YXAgZGV2aWNlcyB3aXRoIHNjcmlwdHMvcnVucWVtdS1nZW4tdGFwZGV2cyBiZWZvcmUgcnVubmluZyB0aGlzIHRlc3QnKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ1BBVEg9IiRQQVRIOi9zYmluOi91c3Ivc2JpbiIgaXAgdHVudGFwIHNob3cnLCBpZ25vcmVfc3RhdHVzPVRydWUpCi0gICAgICAgIGlmIHJlc3VsdC5zdGF0dXMgIT0gMDoKLSAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnUEFUSD0iJFBBVEg6L3NiaW46L3Vzci9zYmluIiBpZmNvbmZpZyAtYScsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKLSAgICAgICAgICAgIGlmIHJlc3VsdC5zdGF0dXMgIT0gMDoKLSAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdGYWlsZWQgdG8gZGV0ZXJtaW5lIGlmIHRhcCBkZXZpY2VzIGV4aXN0IHdpdGggaWZjb25maWcgb3IgaXA6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgIGZvciBsaW5lIGluIHJlc3VsdC5vdXRwdXQuc3BsaXRsaW5lcygpOgotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCd0YXAnKToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnTm8gdGFwIGRldmljZXMgZm91bmQgLSB5b3UgbXVzdCBzZXQgdXAgdGFwIGRldmljZXMgd2l0aCBzY3JpcHRzL3J1bnFlbXUtZ2VuLXRhcGRldnMgYmVmb3JlIHJ1bm5pbmcgdGhpcyB0ZXN0JykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLndvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKLSAgICAgICAgIyBEZWZpbml0aW9ucwotICAgICAgICB0ZXN0cmVjaXBlID0gJ21kYWRtJwotICAgICAgICB0ZXN0ZmlsZSA9ICcvc2Jpbi9tZGFkbScKLSAgICAgICAgdGVzdGltYWdlID0gJ29lLXNlbGZ0ZXN0LWltYWdlJwotICAgICAgICB0ZXN0Y29tbWFuZCA9ICcvc2Jpbi9tZGFkbSAtLWhlbHAnCi0gICAgICAgICMgQnVpbGQgYW4gaW1hZ2UgdG8gcnVuCi0gICAgICAgIGJpdGJha2UoIiVzIHFlbXUtbmF0aXZlIHFlbXUtaGVscGVyLW5hdGl2ZSIgJSB0ZXN0aW1hZ2UpCi0gICAgICAgIGRlcGxveV9kaXJfaW1hZ2UgPSBnZXRfYmJfdmFyKCdERVBMT1lfRElSX0lNQUdFJykKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiAlcycgJSB0ZXN0aW1hZ2UpCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ3JtIC1mICVzLyVzKicgJSAoZGVwbG95X2Rpcl9pbWFnZSwgdGVzdGltYWdlKSkKLSAgICAgICAgIyBDbGVhbiByZWNpcGUgc28gdGhlIGZpcnN0IGRlcGxveSB3aWxsIGZhaWwKLSAgICAgICAgYml0YmFrZSgiJXMgLWMgY2xlYW4iICUgdGVzdHJlY2lwZSkKLSAgICAgICAgIyBUcnkgZGV2dG9vbCBtb2RpZnkKLSAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4gJXMnICUgdGVzdHJlY2lwZSkKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGRpcikpCi0gICAgICAgICMgVGVzdCB0aGF0IGRlcGxveS10YXJnZXQgYXQgdGhpcyBwb2ludCBmYWlscyAocHJvcGVybHkpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBkZXBsb3ktdGFyZ2V0IC1uICVzIHJvb3RAbG9jYWxob3N0JyAlIHRlc3RyZWNpcGUsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQub3V0cHV0LCAwLCAnZGV2dG9vbCBkZXBsb3ktdGFyZ2V0IHNob3VsZCBoYXZlIGZhaWxlZCwgb3V0cHV0OiAlcycgJSByZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKHJlc3VsdC5vdXRwdXQsICdUcmFjZWJhY2snLCAnZGV2dG9vbCBkZXBsb3ktdGFyZ2V0IHNob3VsZCBoYXZlIGZhaWxlZCB3aXRoIGEgcHJvcGVyIGVycm9yIG5vdCBhIHRyYWNlYmFjaywgb3V0cHV0OiAlcycgJSByZXN1bHQub3V0cHV0KQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYnVpbGQgJXMnICUgdGVzdHJlY2lwZSkKLSAgICAgICAgIyBGaXJzdCB0cnkgYSBkcnktcnVuIG9mIGRlcGxveS10YXJnZXQKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGRlcGxveS10YXJnZXQgLW4gJXMgcm9vdEBsb2NhbGhvc3QnICUgdGVzdHJlY2lwZSkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignICAlcycgJSB0ZXN0ZmlsZSwgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgIyBCb290IHRoZSBpbWFnZQotICAgICAgICB3aXRoIHJ1bnFlbXUodGVzdGltYWdlKSBhcyBxZW11OgotICAgICAgICAgICAgIyBOb3cgcmVhbGx5IHRlc3QgZGVwbG95LXRhcmdldAotICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGRlcGxveS10YXJnZXQgLWMgJXMgcm9vdEAlcycgJSAodGVzdHJlY2lwZSwgcWVtdS5pcCkpCi0gICAgICAgICAgICAjIFJ1biBhIHRlc3QgY29tbWFuZCB0byBzZWUgaWYgaXQgd2FzIGluc3RhbGxlZCBwcm9wZXJseQotICAgICAgICAgICAgc3NoYXJncyA9ICctbyBVc2VyS25vd25Ib3N0c0ZpbGU9L2Rldi9udWxsIC1vIFN0cmljdEhvc3RLZXlDaGVja2luZz1ubycKLSAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnc3NoICVzIHJvb3RAJXMgJXMnICUgKHNzaGFyZ3MsIHFlbXUuaXAsIHRlc3Rjb21tYW5kKSkKLSAgICAgICAgICAgICMgQ2hlY2sgaWYgaXQgZGVwbG95ZWQgYWxsIG9mIHRoZSBmaWxlcyB3aXRoIHRoZSByaWdodCBvd25lcnNoaXAvcGVybXMKLSAgICAgICAgICAgICMgRmlyc3QgbG9vayBvbiB0aGUgaG9zdCAtIG5lZWQgdG8gZG8gdGhpcyB1bmRlciBwc2V1ZG8gdG8gZ2V0IHRoZSBjb3JyZWN0IG93bmVyc2hpcC9wZXJtcwotICAgICAgICAgICAgYmJfdmFycyA9IGdldF9iYl92YXJzKFsnRCcsICdGQUtFUk9PVEVOVicsICdGQUtFUk9PVENNRCddLCB0ZXN0cmVjaXBlKQotICAgICAgICAgICAgaW5zdGFsbGRpciA9IGJiX3ZhcnNbJ0QnXQotICAgICAgICAgICAgZmFrZXJvb3RlbnYgPSBiYl92YXJzWydGQUtFUk9PVEVOViddCi0gICAgICAgICAgICBmYWtlcm9vdGNtZCA9IGJiX3ZhcnNbJ0ZBS0VST09UQ01EJ10KLSAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnJXMgJXMgZmluZCAuIC10eXBlIGYgLWV4ZWMgbHMgLWwge30gXDsnICUgKGZha2Vyb290ZW52LCBmYWtlcm9vdGNtZCksIGN3ZD1pbnN0YWxsZGlyKQotICAgICAgICAgICAgZmlsZWxpc3QxID0gc2VsZi5fcHJvY2Vzc19sc19vdXRwdXQocmVzdWx0Lm91dHB1dCkKLQotICAgICAgICAgICAgIyBOb3cgbG9vayBvbiB0aGUgdGFyZ2V0Ci0gICAgICAgICAgICB0ZW1wZGlyMiA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQotICAgICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyMikKLSAgICAgICAgICAgIHRtcGZpbGVsaXN0ID0gb3MucGF0aC5qb2luKHRlbXBkaXIyLCAnZmlsZXMudHh0JykKLSAgICAgICAgICAgIHdpdGggb3Blbih0bXBmaWxlbGlzdCwgJ3cnKSBhcyBmOgotICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGZpbGVsaXN0MToKLSAgICAgICAgICAgICAgICAgICAgc3BsaXRsaW5lID0gbGluZS5zcGxpdCgpCi0gICAgICAgICAgICAgICAgICAgIGYud3JpdGUoc3BsaXRsaW5lWy0xXSArICdcbicpCi0gICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2NhdCAlcyB8IHNzaCAtcSAlcyByb290QCVzIFwneGFyZ3MgbHMgLWxcJycgJSAodG1wZmlsZWxpc3QsIHNzaGFyZ3MsIHFlbXUuaXApKQotICAgICAgICAgICAgZmlsZWxpc3QyID0gc2VsZi5fcHJvY2Vzc19sc19vdXRwdXQocmVzdWx0Lm91dHB1dCkKLSAgICAgICAgICAgIGZpbGVsaXN0MS5zb3J0KGtleT1sYW1iZGEgaXRlbTogaXRlbS5zcGxpdCgpWy0xXSkKLSAgICAgICAgICAgIGZpbGVsaXN0Mi5zb3J0KGtleT1sYW1iZGEgaXRlbTogaXRlbS5zcGxpdCgpWy0xXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZWxpc3QxLCBmaWxlbGlzdDIpCi0gICAgICAgICAgICAjIFRlc3QgdW5kZXBsb3ktdGFyZ2V0Ci0gICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdW5kZXBsb3ktdGFyZ2V0IC1jICVzIHJvb3RAJXMnICUgKHRlc3RyZWNpcGUsIHFlbXUuaXApKQotICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdzc2ggJXMgcm9vdEAlcyAlcycgJSAoc3NoYXJncywgcWVtdS5pcCwgdGVzdGNvbW1hbmQpLCBpZ25vcmVfc3RhdHVzPVRydWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdCwgMCwgJ3VuZGVwbG95LXRhcmdldCBkaWQgbm90IHJlbW92ZSBjb21tYW5kIGFzIGl0IHNob3VsZCBoYXZlJykKLQotICAgIEB0ZXN0Y2FzZSgxMzY2KQotICAgIGRlZiB0ZXN0X2RldnRvb2xfYnVpbGRfaW1hZ2Uoc2VsZik6Ci0gICAgICAgICIiIlRlc3QgZGV2dG9vbCBidWlsZC1pbWFnZSBwbHVnaW4iIiIKLSAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMoc2VsZi53b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCi0gICAgICAgIGltYWdlID0gJ2NvcmUtaW1hZ2UtbWluaW1hbCcKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLndvcmtzcGFjZWRpcikKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiAlcycgJSBpbWFnZSkKLSAgICAgICAgYml0YmFrZSgnJXMgLWMgY2xlYW4nICUgaW1hZ2UpCi0gICAgICAgICMgQWRkIHRhcmdldCBhbmQgbmF0aXZlIHJlY2lwZXMgdG8gd29ya3NwYWNlCi0gICAgICAgIHJlY2lwZXMgPSBbJ21kYWRtJywgJ3BhcnRlZC1uYXRpdmUnXQotICAgICAgICBmb3IgcmVjaXBlIGluIHJlY2lwZXM6Ci0gICAgICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCi0gICAgICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCi0gICAgICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuICVzJyAlIHJlY2lwZSkKLSAgICAgICAgICAgIHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgLXggJXMnICUgKHJlY2lwZSwgdGVtcGRpcikpCi0gICAgICAgICMgVHJ5IHRvIGJ1aWxkIGltYWdlCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBidWlsZC1pbWFnZSAlcycgJSBpbWFnZSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQsIDAsICdkZXZ0b29sIGJ1aWxkLWltYWdlIGZhaWxlZCcpCi0gICAgICAgICMgQ2hlY2sgaWYgaW1hZ2UgY29udGFpbnMgZXhwZWN0ZWQgcGFja2FnZXMKLSAgICAgICAgZGVwbG95X2Rpcl9pbWFnZSA9IGdldF9iYl92YXIoJ0RFUExPWV9ESVJfSU1BR0UnKQotICAgICAgICBpbWFnZV9saW5rX25hbWUgPSBnZXRfYmJfdmFyKCdJTUFHRV9MSU5LX05BTUUnLCBpbWFnZSkKLSAgICAgICAgcmVxcGtncyA9IFtpdGVtIGZvciBpdGVtIGluIHJlY2lwZXMgaWYgbm90IGl0ZW0uZW5kc3dpdGgoJy1uYXRpdmUnKV0KLSAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihkZXBsb3lfZGlyX2ltYWdlLCBpbWFnZV9saW5rX25hbWUgKyAnLm1hbmlmZXN0JyksICdyJykgYXMgZjoKLSAgICAgICAgICAgIGZvciBsaW5lIGluIGY6Ci0gICAgICAgICAgICAgICAgc3BsaXR2YWwgPSBsaW5lLnNwbGl0KCkKLSAgICAgICAgICAgICAgICBpZiBzcGxpdHZhbDoKLSAgICAgICAgICAgICAgICAgICAgcGtnID0gc3BsaXR2YWxbMF0KLSAgICAgICAgICAgICAgICAgICAgaWYgcGtnIGluIHJlcXBrZ3M6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXFwa2dzLnJlbW92ZShwa2cpCi0gICAgICAgIGlmIHJlcXBrZ3M6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoJ1RoZSBmb2xsb3dpbmcgcGFja2FnZXMgd2VyZSBub3QgcHJlc2VudCBpbiB0aGUgaW1hZ2UgYXMgZXhwZWN0ZWQ6ICVzJyAlICcsICcuam9pbihyZXFwa2dzKSkKLQotICAgIEB0ZXN0Y2FzZSgxMzY3KQotICAgIGRlZiB0ZXN0X2RldnRvb2xfdXBncmFkZShzZWxmKToKLSAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMoc2VsZi53b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCi0gICAgICAgICMgQ2hlY2sgcGFyYW1ldGVycwotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBncmFkZSAtaCcpCi0gICAgICAgIGZvciBwYXJhbSBpbiAncmVjaXBlbmFtZSBzcmN0cmVlIC0tdmVyc2lvbiAtViAtLWJyYW5jaCAtYiAtLWtlZXAtdGVtcCAtLW5vLXBhdGNoJy5zcGxpdCgpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihwYXJhbSwgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgIyBGb3IgdGhlIG1vbWVudCwgd2UgYXJlIHVzaW5nIGEgcmVhbCByZWNpcGUuCi0gICAgICAgIHJlY2lwZSA9ICdkZXZ0b29sLXVwZ3JhZGUtdGVzdDEnCi0gICAgICAgIHZlcnNpb24gPSAnMS42LjAnCi0gICAgICAgIG9sZHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgcmVjaXBlKQotICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKLSAgICAgICAgIyBDaGVjayB0aGF0IHJlY2lwZSBpcyBub3QgYWxyZWFkeSB1bmRlciBkZXZ0b29sIGNvbnRyb2wKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocmVjaXBlLCByZXN1bHQub3V0cHV0KQotICAgICAgICAjIENoZWNrIHVwZ3JhZGUuIENvZGUgZG9lcyBub3QgY2hlY2sgaWYgbmV3IFBWIGlzIG9sZGVyIG9yIG5ld2VyIHRoYXQgY3VycmVudCBQViwgc28sIGl0IG1heSBiZSB0aGF0Ci0gICAgICAgICMgd2UgYXJlIGRvd25ncmFkaW5nIGluc3RlYWQgb2YgdXBncmFkaW5nLgotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBncmFkZSAlcyAlcyAtViAlcycgJSAocmVjaXBlLCB0ZW1wZGlyLCB2ZXJzaW9uKSkKLSAgICAgICAgIyBDaGVjayBpZiBzcmN0cmVlIGF0IGxlYXN0IGlzIHBvcHVsYXRlZAotICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKG9zLmxpc3RkaXIodGVtcGRpcikpID4gMCwgJ3NyY3RyZWUgKCVzKSBzaG91bGQgYmUgcG9wdWxhdGVkIHdpdGggbmV3ICglcykgc291cmNlIGNvZGUnICUgKHRlbXBkaXIsIHZlcnNpb24pKQotICAgICAgICAjIENoZWNrIG5ldyByZWNpcGUgc3ViZGlyZWN0b3J5IGlzIHByZXNlbnQKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ3JlY2lwZXMnLCByZWNpcGUsICclcy0lcycgJSAocmVjaXBlLCB2ZXJzaW9uKSkpLCAnUmVjaXBlIGZvbGRlciBzaG91bGQgZXhpc3QnKQotICAgICAgICAjIENoZWNrIG5ldyByZWNpcGUgZmlsZSBpcyBwcmVzZW50Ci0gICAgICAgIG5ld3JlY2lwZWZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdyZWNpcGVzJywgcmVjaXBlLCAnJXNfJXMuYmInICUgKHJlY2lwZSwgdmVyc2lvbikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhuZXdyZWNpcGVmaWxlKSwgJ1JlY2lwZSBmaWxlIHNob3VsZCBleGlzdCBhZnRlciB1cGdyYWRlJykKLSAgICAgICAgIyBDaGVjayBkZXZ0b29sIHN0YXR1cyBhbmQgbWFrZSBzdXJlIHJlY2lwZSBpcyBwcmVzZW50Ci0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQotICAgICAgICBzZWxmLmFzc2VydEluKHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbih0ZW1wZGlyLCByZXN1bHQub3V0cHV0KQotICAgICAgICAjIENoZWNrIHJlY2lwZSBnb3QgY2hhbmdlZCBhcyBleHBlY3RlZAotICAgICAgICB3aXRoIG9wZW4ob2xkcmVjaXBlZmlsZSArICcudXBncmFkZWQnLCAncicpIGFzIGY6Ci0gICAgICAgICAgICBkZXNpcmVkbGluZXMgPSBmLnJlYWRsaW5lcygpCi0gICAgICAgIHdpdGggb3BlbihuZXdyZWNpcGVmaWxlLCAncicpIGFzIGY6Ci0gICAgICAgICAgICBuZXdsaW5lcyA9IGYucmVhZGxpbmVzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXNpcmVkbGluZXMsIG5ld2xpbmVzKQotICAgICAgICAjIENoZWNrIGRldnRvb2wgcmVzZXQgcmVjaXBlCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCAlcyAtbicgJSByZWNpcGUpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdyZWNpcGVzJywgcmVjaXBlKSksICdSZWNpcGUgZGlyZWN0b3J5IHNob3VsZCBub3QgZXhpc3QgYWZ0ZXIgcmVzZXR0aW5nJykKLQotICAgIEB0ZXN0Y2FzZSgxNDMzKQotICAgIGRlZiB0ZXN0X2RldnRvb2xfdXBncmFkZV9naXQoc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucwotICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHNlbGYud29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYud29ya3NwYWNlZGlyKQotICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQotICAgICAgICByZWNpcGUgPSAnZGV2dG9vbC11cGdyYWRlLXRlc3QyJwotICAgICAgICBjb21taXQgPSAnNmNjNjA3N2EzNmZlMjY0OGE1Zjk5M2ZlN2MxNmM5NjMyZjk0NjUxNycKLSAgICAgICAgb2xkcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCByZWNpcGUpCi0gICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQotICAgICAgICAjIENoZWNrIHRoYXQgcmVjaXBlIGlzIG5vdCBhbHJlYWR5IHVuZGVyIGRldnRvb2wgY29udHJvbAotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbihyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgICMgQ2hlY2sgdXBncmFkZQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBncmFkZSAlcyAlcyAtUyAlcycgJSAocmVjaXBlLCB0ZW1wZGlyLCBjb21taXQpKQotICAgICAgICAjIENoZWNrIGlmIHNyY3RyZWUgYXQgbGVhc3QgaXMgcG9wdWxhdGVkCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4ob3MubGlzdGRpcih0ZW1wZGlyKSkgPiAwLCAnc3JjdHJlZSAoJXMpIHNob3VsZCBiZSBwb3B1bGF0ZWQgd2l0aCBuZXcgKCVzKSBzb3VyY2UgY29kZScgJSAodGVtcGRpciwgY29tbWl0KSkKLSAgICAgICAgIyBDaGVjayBuZXcgcmVjaXBlIGZpbGUgaXMgcHJlc2VudAotICAgICAgICBuZXdyZWNpcGVmaWxlID0gb3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAncmVjaXBlcycsIHJlY2lwZSwgb3MucGF0aC5iYXNlbmFtZShvbGRyZWNpcGVmaWxlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG5ld3JlY2lwZWZpbGUpLCAnUmVjaXBlIGZpbGUgc2hvdWxkIGV4aXN0IGFmdGVyIHVwZ3JhZGUnKQotICAgICAgICAjIENoZWNrIGRldnRvb2wgc3RhdHVzIGFuZCBtYWtlIHN1cmUgcmVjaXBlIGlzIHByZXNlbnQKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4ocmVjaXBlLCByZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKHRlbXBkaXIsIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgICMgQ2hlY2sgcmVjaXBlIGdvdCBjaGFuZ2VkIGFzIGV4cGVjdGVkCi0gICAgICAgIHdpdGggb3BlbihvbGRyZWNpcGVmaWxlICsgJy51cGdyYWRlZCcsICdyJykgYXMgZjoKLSAgICAgICAgICAgIGRlc2lyZWRsaW5lcyA9IGYucmVhZGxpbmVzKCkKLSAgICAgICAgd2l0aCBvcGVuKG5ld3JlY2lwZWZpbGUsICdyJykgYXMgZjoKLSAgICAgICAgICAgIG5ld2xpbmVzID0gZi5yZWFkbGluZXMoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlc2lyZWRsaW5lcywgbmV3bGluZXMpCi0gICAgICAgICMgQ2hlY2sgZGV2dG9vbCByZXNldCByZWNpcGUKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHJlc2V0ICVzIC1uJyAlIHJlY2lwZSkKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocmVjaXBlLCByZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ3JlY2lwZXMnLCByZWNpcGUpKSwgJ1JlY2lwZSBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBleGlzdCBhZnRlciByZXNldHRpbmcnKQotCi0gICAgQHRlc3RjYXNlKDEzNTIpCi0gICAgZGVmIHRlc3RfZGV2dG9vbF9sYXllcl9wbHVnaW5zKHNlbGYpOgotICAgICAgICAiIiJUZXN0IHRoYXQgZGV2dG9vbCBjYW4gdXNlIHBsdWdpbnMgZnJvbSBvdGhlciBsYXllcnMuCi0KLSAgICAgICAgVGhpcyB0ZXN0IGV4ZWN1dGVzIHRoZSBzZWxmdGVzdC1yZXZlcnNlIGNvbW1hbmQgZnJvbSBtZXRhLXNlbGZ0ZXN0LiIiIgotCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCi0KLSAgICAgICAgcyA9ICJNaWNyb3NvZnQgTWFkZSBObyBQcm9maXQgRnJvbSBBbnlvbmUncyBadW5lcyBZbyIKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJkZXZ0b29sIC0tcXVpZXQgc2VsZnRlc3QtcmV2ZXJzZSBcIiVzXCIiICUgcykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCBzWzo6LTFdKQotCi0gICAgZGVmIF9jb3B5X2ZpbGVfd2l0aF9jbGVhbnVwKHNlbGYsIHNyY2ZpbGUsIGJhc2Vkc3RkaXIsICpwYXRocyk6Ci0gICAgICAgIGRzdGRpciA9IGJhc2Vkc3RkaXIKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGRzdGRpcikpCi0gICAgICAgIGZvciBwIGluIHBhdGhzOgotICAgICAgICAgICAgZHN0ZGlyID0gb3MucGF0aC5qb2luKGRzdGRpciwgcCkKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkc3RkaXIpOgotICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKGRzdGRpcikKLSAgICAgICAgICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKGRzdGRpcikKLSAgICAgICAgZHN0ZmlsZSA9IG9zLnBhdGguam9pbihkc3RkaXIsIG9zLnBhdGguYmFzZW5hbWUoc3JjZmlsZSkpCi0gICAgICAgIGlmIHNyY2ZpbGUgIT0gZHN0ZmlsZToKLSAgICAgICAgICAgIHNodXRpbC5jb3B5KHNyY2ZpbGUsIGRzdGZpbGUpCi0gICAgICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKGRzdGZpbGUpCi0KLSAgICBkZWYgdGVzdF9kZXZ0b29sX2xvYWRfcGx1Z2luKHNlbGYpOgotICAgICAgICAiIiJUZXN0IHRoYXQgZGV2dG9vbCBsb2FkcyBvbmx5IHRoZSBmaXJzdCBmb3VuZCBwbHVnaW4gaW4gQkJQQVRILiIiIgotCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCi0KLSAgICAgICAgZGV2dG9vbCA9IHJ1bkNtZCgid2hpY2ggZGV2dG9vbCIpCi0gICAgICAgIGZyb21uYW1lID0gcnVuQ21kKCJkZXZ0b29sIC0tcXVpZXQgcGx1Z2luZmlsZSIpCi0gICAgICAgIHNyY2ZpbGUgPSBmcm9tbmFtZS5vdXRwdXQKLSAgICAgICAgYmJwYXRoID0gZ2V0X2JiX3ZhcignQkJQQVRIJykKLSAgICAgICAgc2VhcmNocGF0aCA9IGJicGF0aC5zcGxpdCgnOicpICsgW29zLnBhdGguZGlybmFtZShkZXZ0b29sLm91dHB1dCldCi0gICAgICAgIHBsdWdpbmNvbnRlbnQgPSBbXQotICAgICAgICB3aXRoIG9wZW4oc3JjZmlsZSkgYXMgZmg6Ci0gICAgICAgICAgICBwbHVnaW5jb250ZW50ID0gZmgucmVhZGxpbmVzKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignbWV0YS1zZWxmdGVzdCcsIHNyY2ZpbGUsICd3cm9uZyBiYnBhdGggcGx1Z2luIGZvdW5kJykKLSAgICAgICAgICAgIGZvciBwYXRoIGluIHNlYXJjaHBhdGg6Ci0gICAgICAgICAgICAgICAgc2VsZi5fY29weV9maWxlX3dpdGhfY2xlYW51cChzcmNmaWxlLCBwYXRoLCAnbGliJywgJ2RldnRvb2wnKQotICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJkZXZ0b29sIC0tcXVpZXQgY291bnQiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnMScpCi0gICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoImRldnRvb2wgLS1xdWlldCBtdWx0aWxvYWRlZCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICJubyIpCi0gICAgICAgICAgICBmb3IgcGF0aCBpbiBzZWFyY2hwYXRoOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgiZGV2dG9vbCAtLXF1aWV0IGJiZGlyIikKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsIHBhdGgpCi0gICAgICAgICAgICAgICAgb3MudW5saW5rKG9zLnBhdGguam9pbihyZXN1bHQub3V0cHV0LCAnbGliJywgJ2RldnRvb2wnLCAnYmJwYXRoLnB5JykpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICB3aXRoIG9wZW4oc3JjZmlsZSwgJ3cnKSBhcyBmaDoKLSAgICAgICAgICAgICAgICBmaC53cml0ZWxpbmVzKHBsdWdpbmNvbnRlbnQpCi0KLSAgICBkZWYgX3NldHVwX3Rlc3RfZGV2dG9vbF9maW5pc2hfdXBncmFkZShzZWxmKToKLSAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMoc2VsZi53b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi53b3Jrc3BhY2VkaXIpCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCi0gICAgICAgICMgVXNlIGEgInJlYWwiIHJlY2lwZSBmcm9tIG1ldGEtc2VsZnRlc3QKLSAgICAgICAgcmVjaXBlID0gJ2RldnRvb2wtdXBncmFkZS10ZXN0MScKLSAgICAgICAgb2xkdmVyc2lvbiA9ICcxLjUuMycKLSAgICAgICAgbmV3dmVyc2lvbiA9ICcxLjYuMCcKLSAgICAgICAgb2xkcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCByZWNpcGUpCi0gICAgICAgIHJlY2lwZWRpciA9IG9zLnBhdGguZGlybmFtZShvbGRyZWNpcGVmaWxlKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLicsIGN3ZD1yZWNpcGVkaXIpCi0gICAgICAgIGlmIHJlc3VsdC5vdXRwdXQuc3RyaXAoKToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgnUmVjaXBlIGRpcmVjdG9yeSBmb3IgJXMgY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcycgJSByZWNpcGUpCi0gICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQotICAgICAgICAjIENoZWNrIHRoYXQgcmVjaXBlIGlzIG5vdCBhbHJlYWR5IHVuZGVyIGRldnRvb2wgY29udHJvbAotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbihyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgICMgRG8gdGhlIHVwZ3JhZGUKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZ3JhZGUgJXMgJXMgLVYgJXMnICUgKHJlY2lwZSwgdGVtcGRpciwgbmV3dmVyc2lvbikpCi0gICAgICAgICMgQ2hlY2sgZGV2dG9vbCBzdGF0dXMgYW5kIG1ha2Ugc3VyZSByZWNpcGUgaXMgcHJlc2VudAotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbihyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4odGVtcGRpciwgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgIyBNYWtlIGEgY2hhbmdlIHRvIHRoZSBzb3VyY2UKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdzZWQgLWkgXCcvXiNpbmNsdWRlICJwdi5oIi9hIFxcLyogSGVyZSBpcyBhIG5ldyBjb21tZW50ICpcXC9cJyBzcmMvcHYvbnVtYmVyLmMnLCBjd2Q9dGVtcGRpcikKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluJywgY3dkPXRlbXBkaXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ00gc3JjL3B2L251bWJlci5jJywgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgY29tbWl0IHNyYy9wdi9udW1iZXIuYyAtbSAiQWRkIGEgY29tbWVudCB0byB0aGUgY29kZSInLCBjd2Q9dGVtcGRpcikKLSAgICAgICAgIyBDaGVjayBpZiBwYXRjaCBpcyB0aGVyZQotICAgICAgICByZWNpcGVkaXIgPSBvcy5wYXRoLmRpcm5hbWUob2xkcmVjaXBlZmlsZSkKLSAgICAgICAgb2xkZGlyID0gb3MucGF0aC5qb2luKHJlY2lwZWRpciwgcmVjaXBlICsgJy0nICsgb2xkdmVyc2lvbikKLSAgICAgICAgcGF0Y2hmbiA9ICcwMDAxLUFkZC1hLW5vdGUtbGluZS10by10aGUtcXVpY2stcmVmZXJlbmNlLnBhdGNoJwotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKG9sZGRpciwgcGF0Y2hmbikpLCAnT3JpZ2luYWwgcGF0Y2ggZmlsZSBkb2VzIG5vdCBleGlzdCcpCi0gICAgICAgIHJldHVybiByZWNpcGUsIG9sZHJlY2lwZWZpbGUsIHJlY2lwZWRpciwgb2xkZGlyLCBuZXd2ZXJzaW9uLCBwYXRjaGZuCi0KLSAgICBkZWYgdGVzdF9kZXZ0b29sX2ZpbmlzaF91cGdyYWRlX29yaWdsYXllcihzZWxmKToKLSAgICAgICAgcmVjaXBlLCBvbGRyZWNpcGVmaWxlLCByZWNpcGVkaXIsIG9sZGRpciwgbmV3dmVyc2lvbiwgcGF0Y2hmbiA9IHNlbGYuX3NldHVwX3Rlc3RfZGV2dG9vbF9maW5pc2hfdXBncmFkZSgpCi0gICAgICAgICMgRW5zdXJlIHRoZSByZWNpcGUgaXMgd2hlcmUgd2UgdGhpbmsgaXQgc2hvdWxkIGJlIChzbyB0aGF0IGNsZWFudXAgZG9lc24ndCB0cmFzaCB0aGluZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJy9tZXRhLXNlbGZ0ZXN0LycsIHJlY2lwZWRpcikKLSAgICAgICAgIyBUcnkgZmluaXNoIHRvIHRoZSBvcmlnaW5hbCBsYXllcgotICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdybSAtcmYgJXMgOyBjZCAlcyA7IGdpdCBjaGVja291dCAlcycgJSAocmVjaXBlZGlyLCBvcy5wYXRoLmRpcm5hbWUocmVjaXBlZGlyKSwgcmVjaXBlZGlyKSkKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGZpbmlzaCAlcyBtZXRhLXNlbGZ0ZXN0JyAlIHJlY2lwZSkKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocmVjaXBlLCByZXN1bHQub3V0cHV0LCAnUmVjaXBlIHNob3VsZCBoYXZlIGJlZW4gcmVzZXQgYnkgZmluaXNoIGJ1dCB3YXNuXCd0JykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdyZWNpcGVzJywgcmVjaXBlKSksICdSZWNpcGUgZGlyZWN0b3J5IHNob3VsZCBub3QgZXhpc3QgYWZ0ZXIgZmluaXNoJykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhvbGRyZWNpcGVmaWxlKSwgJ09sZCByZWNpcGUgZmlsZSBzaG91bGQgaGF2ZSBiZWVuIGRlbGV0ZWQgYnV0IHdhc25cJ3QnKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihvbGRkaXIsIHBhdGNoZm4pKSwgJ09sZCBwYXRjaCBmaWxlIHNob3VsZCBoYXZlIGJlZW4gZGVsZXRlZCBidXQgd2FzblwndCcpCi0gICAgICAgIG5ld3JlY2lwZWZpbGUgPSBvcy5wYXRoLmpvaW4ocmVjaXBlZGlyLCAnJXNfJXMuYmInICUgKHJlY2lwZSwgbmV3dmVyc2lvbikpCi0gICAgICAgIG5ld2RpciA9IG9zLnBhdGguam9pbihyZWNpcGVkaXIsIHJlY2lwZSArICctJyArIG5ld3ZlcnNpb24pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhuZXdyZWNpcGVmaWxlKSwgJ05ldyByZWNpcGUgZmlsZSBzaG91bGQgaGF2ZSBiZWVuIGNvcGllZCBpbnRvIGV4aXN0aW5nIGxheWVyIGJ1dCB3YXNuXCd0JykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihuZXdkaXIsIHBhdGNoZm4pKSwgJ1BhdGNoIGZpbGUgc2hvdWxkIGhhdmUgYmVlbiBjb3BpZWQgaW50byBuZXcgZGlyZWN0b3J5IGJ1dCB3YXNuXCd0JykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihuZXdkaXIsICcwMDAyLUFkZC1hLWNvbW1lbnQtdG8tdGhlLWNvZGUucGF0Y2gnKSksICdOZXcgcGF0Y2ggZmlsZSBzaG91bGQgaGF2ZSBiZWVuIGNyZWF0ZWQgYnV0IHdhc25cJ3QnKQotCi0gICAgZGVmIHRlc3RfZGV2dG9vbF9maW5pc2hfdXBncmFkZV9vdGhlcmxheWVyKHNlbGYpOgotICAgICAgICByZWNpcGUsIG9sZHJlY2lwZWZpbGUsIHJlY2lwZWRpciwgb2xkZGlyLCBuZXd2ZXJzaW9uLCBwYXRjaGZuID0gc2VsZi5fc2V0dXBfdGVzdF9kZXZ0b29sX2ZpbmlzaF91cGdyYWRlKCkKLSAgICAgICAgIyBFbnN1cmUgdGhlIHJlY2lwZSBpcyB3aGVyZSB3ZSB0aGluayBpdCBzaG91bGQgYmUgKHNvIHRoYXQgY2xlYW51cCBkb2Vzbid0IHRyYXNoIHRoaW5ncykKLSAgICAgICAgc2VsZi5hc3NlcnRJbignL21ldGEtc2VsZnRlc3QvJywgcmVjaXBlZGlyKQotICAgICAgICAjIFRyeSBmaW5pc2ggdG8gYSBkaWZmZXJlbnQgbGF5ZXIgLSBzaG91bGQgY3JlYXRlIGEgYmJhcHBlbmQKLSAgICAgICAgIyBUaGlzIGNsZWFudXAgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGJ1dCBkbyBpdCBhbnl3YXkganVzdCBpbiBjYXNlIGl0IGdvZXMgd3JvbmcgYW5kIHdyaXRlcyB0byBoZXJlCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ3JtIC1yZiAlcyA7IGNkICVzIDsgZ2l0IGNoZWNrb3V0ICVzJyAlIChyZWNpcGVkaXIsIG9zLnBhdGguZGlybmFtZShyZWNpcGVkaXIpLCByZWNpcGVkaXIpKQotICAgICAgICBvZV9jb3JlX2RpciA9IG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCdDT1JFQkFTRScpLCAnbWV0YScpCi0gICAgICAgIG5ld3JlY2lwZWRpciA9IG9zLnBhdGguam9pbihvZV9jb3JlX2RpciwgJ3JlY2lwZXMtdGVzdCcsICdkZXZ0b29sJykKLSAgICAgICAgbmV3cmVjaXBlZmlsZSA9IG9zLnBhdGguam9pbihuZXdyZWNpcGVkaXIsICclc18lcy5iYicgJSAocmVjaXBlLCBuZXd2ZXJzaW9uKSkKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChuZXdyZWNpcGVkaXIpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBmaW5pc2ggJXMgb2UtY29yZScgJSByZWNpcGUpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKHJlY2lwZSwgcmVzdWx0Lm91dHB1dCwgJ1JlY2lwZSBzaG91bGQgaGF2ZSBiZWVuIHJlc2V0IGJ5IGZpbmlzaCBidXQgd2FzblwndCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAncmVjaXBlcycsIHJlY2lwZSkpLCAnUmVjaXBlIGRpcmVjdG9yeSBzaG91bGQgbm90IGV4aXN0IGFmdGVyIGZpbmlzaCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvbGRyZWNpcGVmaWxlKSwgJ09sZCByZWNpcGUgZmlsZSBzaG91bGQgbm90IGhhdmUgYmVlbiBkZWxldGVkJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihvbGRkaXIsIHBhdGNoZm4pKSwgJ09sZCBwYXRjaCBmaWxlIHNob3VsZCBub3QgaGF2ZSBiZWVuIGRlbGV0ZWQnKQotICAgICAgICBuZXdkaXIgPSBvcy5wYXRoLmpvaW4obmV3cmVjaXBlZGlyLCByZWNpcGUgKyAnLScgKyBuZXd2ZXJzaW9uKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMobmV3cmVjaXBlZmlsZSksICdOZXcgcmVjaXBlIGZpbGUgc2hvdWxkIGhhdmUgYmVlbiBjb3BpZWQgaW50byBleGlzdGluZyBsYXllciBidXQgd2FzblwndCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4obmV3ZGlyLCBwYXRjaGZuKSksICdQYXRjaCBmaWxlIHNob3VsZCBoYXZlIGJlZW4gY29waWVkIGludG8gbmV3IGRpcmVjdG9yeSBidXQgd2FzblwndCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4obmV3ZGlyLCAnMDAwMi1BZGQtYS1jb21tZW50LXRvLXRoZS1jb2RlLnBhdGNoJykpLCAnTmV3IHBhdGNoIGZpbGUgc2hvdWxkIGhhdmUgYmVlbiBjcmVhdGVkIGJ1dCB3YXNuXCd0JykKLQotICAgIGRlZiBfc2V0dXBfdGVzdF9kZXZ0b29sX2ZpbmlzaF9tb2RpZnkoc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucwotICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHNlbGYud29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQotICAgICAgICAjIFRyeSBtb2RpZnlpbmcgYSByZWNpcGUKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLndvcmtzcGFjZWRpcikKLSAgICAgICAgcmVjaXBlID0gJ21kYWRtJwotICAgICAgICBvbGRyZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHJlY2lwZSkKLSAgICAgICAgcmVjaXBlZGlyID0gb3MucGF0aC5kaXJuYW1lKG9sZHJlY2lwZWZpbGUpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAuJywgY3dkPXJlY2lwZWRpcikKLSAgICAgICAgaWYgcmVzdWx0Lm91dHB1dC5zdHJpcCgpOgotICAgICAgICAgICAgc2VsZi5mYWlsKCdSZWNpcGUgZGlyZWN0b3J5IGZvciAlcyBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzJyAlIHJlY2lwZSkKLSAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgJXMnICUgKHJlY2lwZSwgdGVtcGRpcikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4odGVtcGRpciwgJ01ha2VmaWxlJykpLCAnRXh0cmFjdGVkIHNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQnKQotICAgICAgICAjIFRlc3QgZGV2dG9vbCBzdGF0dXMKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4ocmVjaXBlLCByZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKHRlbXBkaXIsIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgICMgTWFrZSBhIGNoYW5nZSB0byB0aGUgc291cmNlCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnc2VkIC1pIFwnL14jaW5jbHVkZSAibWRhZG0uaCIvYSBcXC8qIEhlcmUgaXMgYSBuZXcgY29tbWVudCAqXFwvXCcgbWFwcy5jJywgY3dkPXRlbXBkaXIpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbicsIGN3ZD10ZW1wZGlyKQotICAgICAgICBzZWxmLmFzc2VydEluKCdNIG1hcHMuYycsIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCBtYXBzLmMgLW0gIkFkZCBhIGNvbW1lbnQgdG8gdGhlIGNvZGUiJywgY3dkPXRlbXBkaXIpCi0gICAgICAgIGZvciBlbnRyeSBpbiBvcy5saXN0ZGlyKHJlY2lwZWRpcik6Ci0gICAgICAgICAgICBmaWxlc2RpciA9IG9zLnBhdGguam9pbihyZWNpcGVkaXIsIGVudHJ5KQotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmaWxlc2Rpcik6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5hYmxlIHRvIGZpbmQgcmVjaXBlIGZpbGVzIGRpcmVjdG9yeSBmb3IgJXMnICUgcmVjaXBlKQotICAgICAgICByZXR1cm4gcmVjaXBlLCBvbGRyZWNpcGVmaWxlLCByZWNpcGVkaXIsIGZpbGVzZGlyCi0KLSAgICBkZWYgdGVzdF9kZXZ0b29sX2ZpbmlzaF9tb2RpZnlfb3JpZ2xheWVyKHNlbGYpOgotICAgICAgICByZWNpcGUsIG9sZHJlY2lwZWZpbGUsIHJlY2lwZWRpciwgZmlsZXNkaXIgPSBzZWxmLl9zZXR1cF90ZXN0X2RldnRvb2xfZmluaXNoX21vZGlmeSgpCi0gICAgICAgICMgRW5zdXJlIHRoZSByZWNpcGUgaXMgd2hlcmUgd2UgdGhpbmsgaXQgc2hvdWxkIGJlIChzbyB0aGF0IGNsZWFudXAgZG9lc24ndCB0cmFzaCB0aGluZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJy9tZXRhLycsIHJlY2lwZWRpcikKLSAgICAgICAgIyBUcnkgZmluaXNoIHRvIHRoZSBvcmlnaW5hbCBsYXllcgotICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdybSAtcmYgJXMgOyBjZCAlcyA7IGdpdCBjaGVja291dCAlcycgJSAocmVjaXBlZGlyLCBvcy5wYXRoLmRpcm5hbWUocmVjaXBlZGlyKSwgcmVjaXBlZGlyKSkKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGZpbmlzaCAlcyBtZXRhJyAlIHJlY2lwZSkKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocmVjaXBlLCByZXN1bHQub3V0cHV0LCAnUmVjaXBlIHNob3VsZCBoYXZlIGJlZW4gcmVzZXQgYnkgZmluaXNoIGJ1dCB3YXNuXCd0JykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdyZWNpcGVzJywgcmVjaXBlKSksICdSZWNpcGUgZGlyZWN0b3J5IHNob3VsZCBub3QgZXhpc3QgYWZ0ZXIgZmluaXNoJykKLSAgICAgICAgZXhwZWN0ZWRfc3RhdHVzID0gWygnIE0nLCAnLiovJXMkJyAlIG9zLnBhdGguYmFzZW5hbWUob2xkcmVjaXBlZmlsZSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKCc/PycsICcuKi8uKi1BZGQtYS1jb21tZW50LXRvLXRoZS1jb2RlLnBhdGNoJCcpXQotICAgICAgICBzZWxmLl9jaGVja19yZXBvX3N0YXR1cyhyZWNpcGVkaXIsIGV4cGVjdGVkX3N0YXR1cykKLQotICAgIGRlZiB0ZXN0X2RldnRvb2xfZmluaXNoX21vZGlmeV9vdGhlcmxheWVyKHNlbGYpOgotICAgICAgICByZWNpcGUsIG9sZHJlY2lwZWZpbGUsIHJlY2lwZWRpciwgZmlsZXNkaXIgPSBzZWxmLl9zZXR1cF90ZXN0X2RldnRvb2xfZmluaXNoX21vZGlmeSgpCi0gICAgICAgICMgRW5zdXJlIHRoZSByZWNpcGUgaXMgd2hlcmUgd2UgdGhpbmsgaXQgc2hvdWxkIGJlIChzbyB0aGF0IGNsZWFudXAgZG9lc24ndCB0cmFzaCB0aGluZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJy9tZXRhLycsIHJlY2lwZWRpcikKLSAgICAgICAgcmVscHRoID0gb3MucGF0aC5yZWxwYXRoKHJlY2lwZWRpciwgb3MucGF0aC5qb2luKGdldF9iYl92YXIoJ0NPUkVCQVNFJyksICdtZXRhJykpCi0gICAgICAgIGFwcGVuZGRpciA9IG9zLnBhdGguam9pbihnZXRfdGVzdF9sYXllcigpLCByZWxwdGgpCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoYXBwZW5kZGlyKQotICAgICAgICAjIFRyeSBmaW5pc2ggdG8gdGhlIG9yaWdpbmFsIGxheWVyCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ3JtIC1yZiAlcyA7IGNkICVzIDsgZ2l0IGNoZWNrb3V0ICVzJyAlIChyZWNpcGVkaXIsIG9zLnBhdGguZGlybmFtZShyZWNpcGVkaXIpLCByZWNpcGVkaXIpKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgZmluaXNoICVzIG1ldGEtc2VsZnRlc3QnICUgcmVjaXBlKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbihyZWNpcGUsIHJlc3VsdC5vdXRwdXQsICdSZWNpcGUgc2hvdWxkIGhhdmUgYmVlbiByZXNldCBieSBmaW5pc2ggYnV0IHdhc25cJ3QnKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ3JlY2lwZXMnLCByZWNpcGUpKSwgJ1JlY2lwZSBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBleGlzdCBhZnRlciBmaW5pc2gnKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLicsIGN3ZD1yZWNpcGVkaXIpCi0gICAgICAgIGlmIHJlc3VsdC5vdXRwdXQuc3RyaXAoKToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgnUmVjaXBlIGRpcmVjdG9yeSBmb3IgJXMgY29udGFpbnMgdGhlIGZvbGxvd2luZyB1bmV4cGVjdGVkIGNoYW5nZXMgYWZ0ZXIgZmluaXNoOlxuJXMnICUgKHJlY2lwZSwgcmVzdWx0Lm91dHB1dC5zdHJpcCgpKSkKLSAgICAgICAgcmVjaXBlZm4gPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUob2xkcmVjaXBlZmlsZSkpWzBdCi0gICAgICAgIHJlY2lwZWZuID0gcmVjaXBlZm4uc3BsaXQoJ18nKVswXSArICdfJScKLSAgICAgICAgYXBwZW5kZmlsZSA9IG9zLnBhdGguam9pbihhcHBlbmRkaXIsIHJlY2lwZWZuICsgJy5iYmFwcGVuZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhhcHBlbmRmaWxlKSwgJ2JiYXBwZW5kICVzIHNob3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBidXQgd2FzblwndCcgJSBhcHBlbmRmaWxlKQotICAgICAgICBuZXdkaXIgPSBvcy5wYXRoLmpvaW4oYXBwZW5kZGlyLCByZWNpcGUpCi0gICAgICAgIGZpbGVzID0gb3MubGlzdGRpcihuZXdkaXIpCi0gICAgICAgIGZvdW5kcGF0Y2ggPSBOb25lCi0gICAgICAgIGZvciBmbiBpbiBmaWxlczoKLSAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaChmbiwgJyotQWRkLWEtY29tbWVudC10by10aGUtY29kZS5wYXRjaCcpOgotICAgICAgICAgICAgICAgIGZvdW5kcGF0Y2ggPSBmbgotICAgICAgICBpZiBub3QgZm91bmRwYXRjaDoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgnTm8gcGF0Y2ggZmlsZSBjcmVhdGVkIG5leHQgdG8gYmJhcHBlbmQnKQotICAgICAgICBmaWxlcy5yZW1vdmUoZm91bmRwYXRjaCkKLSAgICAgICAgaWYgZmlsZXM6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoJ1VuZXhwZWN0ZWQgZmlsZShzKSBjb3BpZWQgbmV4dCB0byBiYmFwcGVuZDogJXMnICUgJywgJy5qb2luKGZpbGVzKSkKLQotICAgIGRlZiB0ZXN0X2RldnRvb2xfcmVuYW1lKHNlbGYpOgotICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLndvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLndvcmtzcGFjZWRpcikKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKLQotICAgICAgICAjIEZpcnN0IHJ1biBkZXZ0b29sIGFkZAotICAgICAgICAjIFdlIGFscmVhZHkgaGF2ZSB0aGlzIHJlY2lwZSBpbiBPRS1Db3JlLCBidXQgdGhhdCBkb2Vzbid0IG1hdHRlcgotICAgICAgICByZWNpcGVuYW1lID0gJ2kyYy10b29scycKLSAgICAgICAgcmVjaXBldmVyID0gJzMuMS4yJwotICAgICAgICByZWNpcGVmaWxlID0gb3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAncmVjaXBlcycsIHJlY2lwZW5hbWUsICclc18lcy5iYicgJSAocmVjaXBlbmFtZSwgcmVjaXBldmVyKSkKLSAgICAgICAgdXJsID0gJ2h0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9pMmMtdG9vbHMtJXMudGFyLmJ6MicgJSByZWNpcGV2ZXIKLSAgICAgICAgZGVmIGFkZF9yZWNpcGUoKToKLSAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBhZGQgJXMnICUgdXJsKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlY2lwZWZpbGUpLCAnRXhwZWN0ZWQgcmVjaXBlIGZpbGUgbm90IGNyZWF0ZWQnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ3NvdXJjZXMnLCByZWNpcGVuYW1lKSksICdTb3VyY2UgZGlyZWN0b3J5IG5vdCBjcmVhdGVkJykKLSAgICAgICAgICAgIGNoZWNrdmFycyA9IHt9Ci0gICAgICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9IE5vbmUKLSAgICAgICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSSddID0gdXJsLnJlcGxhY2UocmVjaXBldmVyLCAnJHtQVn0nKQotICAgICAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBbXSkKLSAgICAgICAgYWRkX3JlY2lwZSgpCi0gICAgICAgICMgTm93IHJlbmFtZSBpdCAtIGNoYW5nZSBib3RoIG5hbWUgYW5kIHZlcnNpb24KLSAgICAgICAgbmV3cmVjaXBlbmFtZSA9ICdteW5ld3JlY2lwZScKLSAgICAgICAgbmV3cmVjaXBldmVyID0gJzQ1NicKLSAgICAgICAgbmV3cmVjaXBlZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ3JlY2lwZXMnLCBuZXdyZWNpcGVuYW1lLCAnJXNfJXMuYmInICUgKG5ld3JlY2lwZW5hbWUsIG5ld3JlY2lwZXZlcikpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZW5hbWUgJXMgJXMgLVYgJXMnICUgKHJlY2lwZW5hbWUsIG5ld3JlY2lwZW5hbWUsIG5ld3JlY2lwZXZlcikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhuZXdyZWNpcGVmaWxlKSwgJ1JlY2lwZSBmaWxlIG5vdCByZW5hbWVkJykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdyZWNpcGVzJywgcmVjaXBlbmFtZSkpLCAnT2xkIHJlY2lwZSBkaXJlY3Rvcnkgc3RpbGwgZXhpc3RzJykKLSAgICAgICAgbmV3c3JjdHJlZSA9IG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ3NvdXJjZXMnLCBuZXdyZWNpcGVuYW1lKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMobmV3c3JjdHJlZSksICdTb3VyY2UgZGlyZWN0b3J5IG5vdCByZW5hbWVkJykKLSAgICAgICAgY2hlY2t2YXJzID0ge30KLSAgICAgICAgY2hlY2t2YXJzWydTJ10gPSAnJHtXT1JLRElSfS8lcy0lcycgJSAocmVjaXBlbmFtZSwgcmVjaXBldmVyKQotICAgICAgICBjaGVja3ZhcnNbJ1NSQ19VUkknXSA9IHVybAotICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhuZXdyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIFtdKQotICAgICAgICAjIFRyeSBhZ2FpbiAtIGNoYW5nZSBqdXN0IG5hbWUgdGhpcyB0aW1lCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCAtbiAlcycgJSBuZXdyZWNpcGVuYW1lKQotICAgICAgICBzaHV0aWwucm10cmVlKG5ld3NyY3RyZWUpCi0gICAgICAgIGFkZF9yZWNpcGUoKQotICAgICAgICBuZXdyZWNpcGVmaWxlID0gb3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAncmVjaXBlcycsIG5ld3JlY2lwZW5hbWUsICclc18lcy5iYicgJSAobmV3cmVjaXBlbmFtZSwgcmVjaXBldmVyKSkKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHJlbmFtZSAlcyAlcycgJSAocmVjaXBlbmFtZSwgbmV3cmVjaXBlbmFtZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhuZXdyZWNpcGVmaWxlKSwgJ1JlY2lwZSBmaWxlIG5vdCByZW5hbWVkJykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi53b3Jrc3BhY2VkaXIsICdyZWNpcGVzJywgcmVjaXBlbmFtZSkpLCAnT2xkIHJlY2lwZSBkaXJlY3Rvcnkgc3RpbGwgZXhpc3RzJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLndvcmtzcGFjZWRpciwgJ3NvdXJjZXMnLCBuZXdyZWNpcGVuYW1lKSksICdTb3VyY2UgZGlyZWN0b3J5IG5vdCByZW5hbWVkJykKLSAgICAgICAgY2hlY2t2YXJzID0ge30KLSAgICAgICAgY2hlY2t2YXJzWydTJ10gPSAnJHtXT1JLRElSfS8lcy0ke1BWfScgJSByZWNpcGVuYW1lCi0gICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSSddID0gdXJsLnJlcGxhY2UocmVjaXBldmVyLCAnJHtQVn0nKQotICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhuZXdyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIFtdKQotICAgICAgICAjIFRyeSBhZ2FpbiAtIGNoYW5nZSBqdXN0IHZlcnNpb24gdGhpcyB0aW1lCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCAtbiAlcycgJSBuZXdyZWNpcGVuYW1lKQotICAgICAgICBzaHV0aWwucm10cmVlKG5ld3NyY3RyZWUpCi0gICAgICAgIGFkZF9yZWNpcGUoKQotICAgICAgICBuZXdyZWNpcGVmaWxlID0gb3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAncmVjaXBlcycsIHJlY2lwZW5hbWUsICclc18lcy5iYicgJSAocmVjaXBlbmFtZSwgbmV3cmVjaXBldmVyKSkKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHJlbmFtZSAlcyAtViAlcycgJSAocmVjaXBlbmFtZSwgbmV3cmVjaXBldmVyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG5ld3JlY2lwZWZpbGUpLCAnUmVjaXBlIGZpbGUgbm90IHJlbmFtZWQnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYud29ya3NwYWNlZGlyLCAnc291cmNlcycsIHJlY2lwZW5hbWUpKSwgJ1NvdXJjZSBkaXJlY3Rvcnkgbm8gbG9uZ2VyIGV4aXN0cycpCi0gICAgICAgIGNoZWNrdmFycyA9IHt9Ci0gICAgICAgIGNoZWNrdmFyc1snUyddID0gJyR7V09SS0RJUn0vJHtCUE59LSVzJyAlIHJlY2lwZXZlcgotICAgICAgICBjaGVja3ZhcnNbJ1NSQ19VUkknXSA9IHVybAotICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhuZXdyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIFtdKQotCi0gICAgQHRlc3RjYXNlKDE1NzcpCi0gICAgZGVmIHRlc3RfZGV2dG9vbF92aXJ0dWFsX2tlcm5lbF9tb2RpZnkoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBTdW1tYXJ5OiAgICAgICAgVGhlIHB1cnBvc2Ugb2YgdGhpcyB0ZXN0IGNhc2UgaXMgdG8gdmVyaWZ5IHRoYXQKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldnRvb2wgbW9kaWZ5IHdvcmtzIGNvcnJlY3RseSB3aGVuIGJ1aWxkaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGUga2VybmVsLgotICAgICAgICBEZXBlbmRlbmNpZXM6ICAgTkEKLSAgICAgICAgU3RlcHM6ICAgICAgICAgIDEuIEJ1aWxkIGtlcm5lbCB3aXRoIGJpdGJha2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAyLiBTYXZlIHRoZSBjb25maWcgZmlsZSBnZW5lcmF0ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAzLiBDbGVhbiB0aGUgZW52aXJvbm1lbnQuCi0gICAgICAgICAgICAgICAgICAgICAgICA0LiBVc2UgYGRldnRvb2wgbW9kaWZ5IHZpcnR1YWwva2VybmVsYCB0byB2YWxpZGF0ZSBmb2xsb3dpbmc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICA0LjEgVGhlIHNvdXJjZSBpcyBjaGVja2VkIG91dCBjb3JyZWN0bHkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA0LjIgVGhlIHJlc3VsdGluZyBjb25maWd1cmF0aW9uIGlzIHRoZSBzYW1lIGFzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hhdCB3YXMgZ2V0IG9uIHN0ZXAgMi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuMyBUaGUgS2VybmVsIGNhbiBiZSBidWlsZCBjb3JyZWN0bHkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA0LjQgQ2hhbmdlcyBtYWRlIG9uIHRoZSBzb3VyY2UgYXJlIHJlZmxlY3RlZCBvbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzZXF1ZW50IGJ1aWxkcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuNSBDaGFuZ2VzIG9uIHRoZSBjb25maWd1cmF0aW9uIGFyZSByZWZsZWN0ZWQgb24gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2VxdWVudCBidWlsZHMKLSAgICAgICAgIEV4cGVjdGVkOiAgICAgICBkZXZ0b29sIG1vZGlmeSBpcyBhYmxlIHRvIGNoZWNrb3V0IHRoZSBzb3VyY2Ugb2YgdGhlIGtlcm5lbAotICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBtb2RpZmljYXRpb24gdG8gdGhlIHNvdXJjZSBhbmQgY29uZmlndXJhdGlvbnMgYXJlIHJlZmxlY3RlZAotICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgdGhlIGtlcm5lbC4KLSAgICAgICAgICIiIgotICAgICAgICAjU2V0IG1hY2hpbmUgdG8gcWVteHU4NiB0byBiZSBhYmxlIHRvIG1vZGlmeSB0aGUga2VybmVsIGFuZAotICAgICAgICAjdmVyaWZ5IHRoZSBtb2RpZmljYXRpb24uCi0gICAgICAgIGZlYXR1cmVzID0gJ01BQ0hJTkUgPSAicWVtdXg4NiJcbicKLSAgICAgICAgc2VsZi53cml0ZV9jb25maWcoZmVhdHVyZXMpCi0gICAgICAgIGtlcm5lbF9wcm92aWRlciA9IGdldF9iYl92YXIoJ1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCcpCi0gICAgICAgICMgQ2xlYW4gdXAgdGhlIGVudmlyb21lbnQKLSAgICAgICAgYml0YmFrZSgnJXMgLWMgY2xlYW4nICUga2VybmVsX3Byb3ZpZGVyKQotICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLndvcmtzcGFjZWRpcikKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiAlcycgJSBrZXJuZWxfcHJvdmlkZXIpCi0gICAgICAgICNTdGVwIDEKLSAgICAgICAgI0hlcmUgaXMganVzdCBnZW5lcmF0ZWQgdGhlIGNvbmZpZyBmaWxlIGluc3RlYWQgb2YgYWxsIHRoZSBrZXJuZWwgdG8gb3B0aW1pemUgdGhlCi0gICAgICAgICN0aW1lIG9mIGV4ZWN1dGluZyB0aGlzIHRlc3QgY2FzZS4KLSAgICAgICAgYml0YmFrZSgnJXMgLWMgY29uZmlndXJlJyAlIGtlcm5lbF9wcm92aWRlcikKLSAgICAgICAgYmJjb25maWcgPSBvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcignQicsIGtlcm5lbF9wcm92aWRlciksJy5jb25maWcnKQotICAgICAgICBidWlsZGlyPSBnZXRfYmJfdmFyKCdUT1BESVInKQotICAgICAgICAjU3RlcCAyCi0gICAgICAgIHJ1bkNtZCgnY3AgJXMgJXMnICUgKGJiY29uZmlnLCBidWlsZGlyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihidWlsZGlyLCAnLmNvbmZpZycpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICdDb3VsZCBub3QgY29weSAuY29uZmlnIGZpbGUgZnJvbSBrZXJuZWwnKQotCi0gICAgICAgIHRtcGNvbmZpZyA9IG9zLnBhdGguam9pbihidWlsZGlyLCAnLmNvbmZpZycpCi0gICAgICAgICNTdGVwIDMKLSAgICAgICAgYml0YmFrZSgnJXMgLWMgY2xlYW4nICUga2VybmVsX3Byb3ZpZGVyKQotICAgICAgICAjU3RlcCA0LjEKLSAgICAgICAgcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSB2aXJ0dWFsL2tlcm5lbCAteCAlcycgJSB0ZW1wZGlyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHRlbXBkaXIsICdNYWtlZmlsZScpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICdFeHRyYWN0ZWQgc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCcpCi0gICAgICAgICNTdGVwIDQuMgotICAgICAgICBjb25maWdmaWxlID0gb3MucGF0aC5qb2luKHRlbXBkaXIsJy5jb25maWcnKQotICAgICAgICBkaWZmID0gcnVuQ21kKCdkaWZmICVzICVzJyAlICh0bXBjb25maWcsIGNvbmZpZ2ZpbGUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsZGlmZi5zdGF0dXMsJ0tlcm5lbCAuY29uZmlnIGZpbGUgaXMgbm90IHRoZSBzYW1lIHVzaW5nIGJpdGJha2UgYW5kIGRldnRvb2wnKQotICAgICAgICAjU3RlcCA0LjMKLSAgICAgICAgI05PVEU6IHZpcnR1YWwva2VybmVsIGlzIG1hcHBlZCB0byBrZXJuZWxfcHJvdmlkZXIKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGJ1aWxkICVzJyAlIGtlcm5lbF9wcm92aWRlcikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLHJlc3VsdC5zdGF0dXMsJ0Nhbm5vdCBidWlsZCBrZXJuZWwgdXNpbmcgYGRldnRvb2wgYnVpbGRgJykKLSAgICAgICAga2VybmVsZmlsZSA9IG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCdLQlVJTERfT1VUUFVUJywga2VybmVsX3Byb3ZpZGVyKSwgJ3ZtbGludXgnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoa2VybmVsZmlsZSksJ0tlcm5lbCB3YXMgbm90IGJ1aWxkIGNvcnJlY3RseScpCi0KLSAgICAgICAgI01vZGlmeSB0aGUga2VybmVsIHNvdXJjZSwgdGhpcyBpcyBzcGVjaWZpYyBmb3IgcWVtdXg4NgotICAgICAgICBtb2RmaWxlID0gb3MucGF0aC5qb2luKHRlbXBkaXIsJ2FyY2gveDg2L2Jvb3QvaGVhZGVyLlMnKQotICAgICAgICBtb2RzdHJpbmcgPSAidXNlIGEgYm9vdCBsb2FkZXIgLSBEZXZ0b29sIGtlcm5lbCB0ZXN0aW5nIgotICAgICAgICBtb2RhcHBsaWVkID0gcnVuQ21kKCJzZWQgLWkgJ3MvYm9vdCBsb2FkZXIvJXMvJyAlcyIgJSAobW9kc3RyaW5nLCBtb2RmaWxlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLG1vZGFwcGxpZWQuc3RhdHVzLCdNb2RpZmljYXRpb24gdG8gJXMgb24ga2VybmVsIHNvdXJjZSBmYWlsZWQnICUgbW9kZmlsZSkKLSAgICAgICAgI01vZGlmeSB0aGUgY29uZmlndXJhdGlvbgotICAgICAgICBjb2RlY29uZmlnZmlsZSA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCcuY29uZmlnLm5ldycpCi0gICAgICAgIG1vZGNvbmZvcHQgPSAiQ09ORklHX1NHX1BPT0w9biIKLSAgICAgICAgbW9kY29uZiA9IHJ1bkNtZCgic2VkIC1pICdzL0NPTkZJR19TR19QT09MPXkvJXMvJyAlcyIgJSAobW9kY29uZm9wdCwgY29kZWNvbmZpZ2ZpbGUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsbW9kY29uZi5zdGF0dXMsJ01vZGlmaWNhdGlvbiB0byAlcyBmYWlsZWQnICUgY29kZWNvbmZpZ2ZpbGUpCi0gICAgICAgICNCdWlsZCBhZ2FpbiBrZXJuZWwgd2l0aCBkZXZ0b29sCi0gICAgICAgIHJlYnVpbGQgPSBydW5DbWQoJ2RldnRvb2wgYnVpbGQgJXMnICUga2VybmVsX3Byb3ZpZGVyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAscmVidWlsZC5zdGF0dXMsJ0ZhaWwgdG8gYnVpbGQga2VybmVsIGFmdGVyIG1vZGlmaWNhdGlvbiBvZiBzb3VyY2UgYW5kIGNvbmZpZycpCi0gICAgICAgICNTdGVwIDQuNAotICAgICAgICBiemltYWdlbmFtZSA9ICdiekltYWdlLScgKyBnZXRfYmJfdmFyKCdLRVJORUxfVkVSU0lPTl9OQU1FJywga2VybmVsX3Byb3ZpZGVyKQotICAgICAgICBiemltYWdlZmlsZSA9IG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCdEJywga2VybmVsX3Byb3ZpZGVyKSwnYm9vdCcsIGJ6aW1hZ2VuYW1lKQotICAgICAgICBjaGVja21vZGNvZGUgPSBydW5DbWQoImdyZXAgJyVzJyAlcyIgJSAobW9kc3RyaW5nLCBiemltYWdlZmlsZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCxjaGVja21vZGNvZGUuc3RhdHVzLCdNb2RpZmljYXRpb24gb24ga2VybmVsIHNvdXJjZSBmYWlsZWQnKQotICAgICAgICAjU3RlcCA0LjUKLSAgICAgICAgY2hlY2ttb2Rjb25mZyA9IHJ1bkNtZCgiZ3JlcCAlcyAlcyIgJSAobW9kY29uZm9wdCwgY29kZWNvbmZpZ2ZpbGUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsY2hlY2ttb2Rjb25mZy5zdGF0dXMsJ01vZGlmaWNhdGlvbiB0byBjb25maWd1cmF0aW9uIGZpbGUgZmFpbGVkJykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2VTREsucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9lU0RLLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTk2YzZlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2VTREsucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgdGVtcGZpbGUKLWltcG9ydCBzaHV0aWwKLWltcG9ydCBvcwotaW1wb3J0IGdsb2IKLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scwotZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCi1mcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAotZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIGdldF9iYl92YXJzCi0KLWNsYXNzIG9lU0RLRXh0U2VsZlRlc3Qob2VTZWxmVGVzdCk6Ci0gICAgIiIiCi0gICAgIyBCdWd6aWxsYSBUZXN0IFBsYW46IDYwMzMKLSAgICAjIFRoaXMgY29kZSBpcyBwbGFubmVkIHRvIGJlIHBhcnQgb2YgdGhlIGF1dG9tYXRpb24gZm9yIGVTREsgY29udGFpbmlnCi0gICAgIyBJbnN0YWxsIGxpYnJhcmllcyBhbmQgaGVhZGVycywgaW1hZ2UgZ2VuZXJhdGlvbiBiaW5hcnkgZmVlZHMsIHNkay11cGRhdGUuCi0gICAgIiIiCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGdldF9lc2RrX2Vudmlyb25tZW50KGVudl9lU0RLLCB0bXBkaXJfZVNES1FBKToKLSAgICAgICAgIyBYWFg6IGF0IHRoaXMgdGltZSB1c2UgdGhlIGZpcnN0IGVudiBuZWVkIHRvIGludmVzdGlnYXRlCi0gICAgICAgICMgd2hhdCBlbnZpcm9ubWVudCBsb2FkIG9lLXNlbGZ0ZXN0LCBpNTg2LCB4ODZfNjQKLSAgICAgICAgcGF0dGVybiA9IG9zLnBhdGguam9pbih0bXBkaXJfZVNES1FBLCAnZW52aXJvbm1lbnQtc2V0dXAtKicpCi0gICAgICAgIHJldHVybiBnbG9iLmdsb2IocGF0dGVybilbMF0KLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgcnVuX2VzZGtfY21kKGVudl9lU0RLLCB0bXBkaXJfZVNES1FBLCBjbWQsIHBvc3Rjb25maWc9Tm9uZSwgKipvcHRpb25zKToKLSAgICAgICAgaWYgcG9zdGNvbmZpZzoKLSAgICAgICAgICAgIGVzZGtfY29uZl9maWxlID0gb3MucGF0aC5qb2luKHRtcGRpcl9lU0RLUUEsICdjb25mJywgJ2xvY2FsLmNvbmYnKQotICAgICAgICAgICAgd2l0aCBvcGVuKGVzZGtfY29uZl9maWxlLCAnYSsnKSBhcyBmOgotICAgICAgICAgICAgICAgIGYud3JpdGUocG9zdGNvbmZpZykKLSAgICAgICAgaWYgbm90IG9wdGlvbnM6Ci0gICAgICAgICAgICBvcHRpb25zID0ge30KLSAgICAgICAgaWYgbm90ICdzaGVsbCcgaW4gb3B0aW9uczoKLSAgICAgICAgICAgIG9wdGlvbnNbJ3NoZWxsJ10gPSBUcnVlCi0KLSAgICAgICAgcnVuQ21kKCJjZCAlczsgLiAlczsgJXMiICUgKHRtcGRpcl9lU0RLUUEsIGVudl9lU0RLLCBjbWQpLCAqKm9wdGlvbnMpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGdlbmVyYXRlX2VTREsoaW1hZ2UpOgotICAgICAgICBwbl90YXNrID0gJyVzIC1jIHBvcHVsYXRlX3Nka19leHQnICUgaW1hZ2UKLSAgICAgICAgYml0YmFrZShwbl90YXNrKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBnZXRfZVNES190b29sY2hhaW4oaW1hZ2UpOgotICAgICAgICBwbl90YXNrID0gJyVzIC1jIHBvcHVsYXRlX3Nka19leHQnICUgaW1hZ2UKLQotICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWydTREtfREVQTE9ZJywgJ1RPT0xDSEFJTkVYVF9PVVRQVVROQU1FJ10sIHBuX3Rhc2spCi0gICAgICAgIHNka19kZXBsb3kgPSBiYl92YXJzWydTREtfREVQTE9ZJ10KLSAgICAgICAgdG9vbGNoYWluX25hbWUgPSBiYl92YXJzWydUT09MQ0hBSU5FWFRfT1VUUFVUTkFNRSddCi0gICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2RrX2RlcGxveSwgdG9vbGNoYWluX25hbWUgKyAnLnNoJykKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgdXBkYXRlX2NvbmZpZ3VyYXRpb24oY2xzLCBpbWFnZSwgdG1wZGlyX2VTREtRQSwgZW52X2VTREssIGV4dF9zZGtfcGF0aCk6Ci0gICAgICAgIHNzdGF0ZV9kaXIgPSBvcy5wYXRoLmpvaW4ob3MuZW52aXJvblsnQlVJTERESVInXSwgJ3NzdGF0ZS1jYWNoZScpCi0KLSAgICAgICAgb2VTREtFeHRTZWxmVGVzdC5nZW5lcmF0ZV9lU0RLKGNscy5pbWFnZSkKLQotICAgICAgICBjbHMuZXh0X3Nka19wYXRoID0gb2VTREtFeHRTZWxmVGVzdC5nZXRfZVNES190b29sY2hhaW4oY2xzLmltYWdlKQotICAgICAgICBydW5DbWQoIiVzIC15IC1kIFwiJXNcIiIgJSAoY2xzLmV4dF9zZGtfcGF0aCwgY2xzLnRtcGRpcl9lU0RLUUEpKQotCi0gICAgICAgIGNscy5lbnZfZVNESyA9IG9lU0RLRXh0U2VsZlRlc3QuZ2V0X2VzZGtfZW52aXJvbm1lbnQoJycsIGNscy50bXBkaXJfZVNES1FBKQotCi0gICAgICAgIHNzdGF0ZV9jb25maWc9IiIiCi1TREtfTE9DQUxfQ09ORl9XSElURUxJU1QgPSAiU1NUQVRFX01JUlJPUlMiCi1TU1RBVEVfTUlSUk9SUyA9ICAiZmlsZTovLy4qIGZpbGU6Ly8lcy9QQVRIIgotQ09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMID0gInBlcmwiCi0gICAgICAgICIiIiAlIHNzdGF0ZV9kaXIKLQotICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGNscy50bXBkaXJfZVNES1FBLCAnY29uZicsICdsb2NhbC5jb25mJyksICdhKycpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKHNzdGF0ZV9jb25maWcpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgotICAgICAgICBjbHMudG1wZGlyX2VTREtRQSA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdlU0RLUUEnKQotCi0gICAgICAgIHNzdGF0ZV9kaXIgPSBnZXRfYmJfdmFyKCdTU1RBVEVfRElSJykKLQotICAgICAgICBjbHMuaW1hZ2UgPSAnY29yZS1pbWFnZS1taW5pbWFsJwotICAgICAgICBvZVNES0V4dFNlbGZUZXN0LmdlbmVyYXRlX2VTREsoY2xzLmltYWdlKQotCi0gICAgICAgICMgSW5zdGFsbCBlU0RLCi0gICAgICAgIGNscy5leHRfc2RrX3BhdGggPSBvZVNES0V4dFNlbGZUZXN0LmdldF9lU0RLX3Rvb2xjaGFpbihjbHMuaW1hZ2UpCi0gICAgICAgIHJ1bkNtZCgiJXMgLXkgLWQgXCIlc1wiIiAlIChjbHMuZXh0X3Nka19wYXRoLCBjbHMudG1wZGlyX2VTREtRQSkpCi0KLSAgICAgICAgY2xzLmVudl9lU0RLID0gb2VTREtFeHRTZWxmVGVzdC5nZXRfZXNka19lbnZpcm9ubWVudCgnJywgY2xzLnRtcGRpcl9lU0RLUUEpCi0KLSAgICAgICAgIyBDb25maWd1cmUgZVNESyB0byB1c2Ugc3N0YXRlIG1pcnJvciBmcm9tIHBva3kKLSAgICAgICAgc3N0YXRlX2NvbmZpZz0iIiIKLVNES19MT0NBTF9DT05GX1dISVRFTElTVCA9ICJTU1RBVEVfTUlSUk9SUyIKLVNTVEFURV9NSVJST1JTID0gICJmaWxlOi8vLiogZmlsZTovLyVzL1BBVEgiCi0gICAgICAgICAgICAiIiIgJSBzc3RhdGVfZGlyCi0gICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oY2xzLnRtcGRpcl9lU0RLUUEsICdjb25mJywgJ2xvY2FsLmNvbmYnKSwgJ2ErJykgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUoc3N0YXRlX2NvbmZpZykKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6Ci0gICAgICAgIHNodXRpbC5ybXRyZWUoY2xzLnRtcGRpcl9lU0RLUUEpCi0KLSAgICBAdGVzdGNhc2UgKDE2MDIpCi0gICAgZGVmIHRlc3RfaW5zdGFsbF9saWJyYXJpZXNfaGVhZGVycyhzZWxmKToKLSAgICAgICAgcG5fc3N0YXRlID0gJ2JjJwotICAgICAgICBiaXRiYWtlKHBuX3NzdGF0ZSkKLSAgICAgICAgY21kID0gImRldnRvb2wgc2RrLWluc3RhbGwgJXMgIiAlIHBuX3NzdGF0ZQotICAgICAgICBvZVNES0V4dFNlbGZUZXN0LnJ1bl9lc2RrX2NtZChzZWxmLmVudl9lU0RLLCBzZWxmLnRtcGRpcl9lU0RLUUEsIGNtZCkKLQotICAgIEB0ZXN0Y2FzZSgxNjAzKQotICAgIGRlZiB0ZXN0X2ltYWdlX2dlbmVyYXRpb25fYmluYXJ5X2ZlZWRzKHNlbGYpOgotICAgICAgICBpbWFnZSA9ICdjb3JlLWltYWdlLW1pbmltYWwnCi0gICAgICAgIGNtZCA9ICJkZXZ0b29sIGJ1aWxkLWltYWdlICVzIiAlIGltYWdlCi0gICAgICAgIG9lU0RLRXh0U2VsZlRlc3QucnVuX2VzZGtfY21kKHNlbGYuZW52X2VTREssIHNlbGYudG1wZGlyX2VTREtRQSwgY21kKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvaW1hZ2VfdHlwZWRlcC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2ltYWdlX3R5cGVkZXAucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NjE0MmQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvaW1hZ2VfdHlwZWRlcC5weQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLWltcG9ydCBvcwotCi1mcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAotZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBiaXRiYWtlCi0KLWNsYXNzIEltYWdlVHlwZURlcFRlc3RzKG9lU2VsZlRlc3QpOgotCi0gICAgIyBWZXJpZnkgdGhhdCB3aGVuIHNwZWNpZnlpbmcgYSBJTUFHRV9UWVBFREVQXyBvZiB0aGUgZm9ybSAiZm9vLmJhciIgdGhhdAotICAgICMgdGhlIGNvbnZlcnNpb24gdHlwZSBiYXIgZ2V0cyBhZGRlZCBhcyBhIGRlcCBhcyB3ZWxsCi0gICAgZGVmIHRlc3RfY29udmVyc2lvbl90eXBlZGVwX2FkZGVkKHNlbGYpOgotCi0gICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCdlbXB0eXRlc3QnLCAiIiIKLSMgVHJ5IHRvIGVtcHR5IG91dCB0aGUgZGVmYXVsdCBkZXBlbmRlbmN5IGxpc3QKLVBBQ0tBR0VfSU5TVEFMTCA9ICIiCi1ESVNUUk9fRVhUUkFfUkRFUEVORFM9IiIKLQotTElDRU5TRSA9ICJNSVQiCi1JTUFHRV9GU1RZUEVTID0gInRlc3Rmc3R5cGUiCi0KLUlNQUdFX1RZUEVTX01BU0tFRCArPSAidGVzdGZzdHlwZSIKLUlNQUdFX1RZUEVERVBfdGVzdGZzdHlwZSA9ICJ0YXIuYnoyIgotCi1pbmhlcml0IGltYWdlCi0KLSIiIikKLSAgICAgICAgIyBGaXJzdCBnZXQgdGhlIGRlcGVuZGVuY3kgdGhhdCBzaG91bGQgZXhpc3QgZm9yIGJ6MiwgaXQgd2lsbCBsb29rCi0gICAgICAgICMgbGlrZSBDT05WRVJTSU9OX0RFUEVORFNfYnoyPSJzb21lZGVwIgotICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCctZSBlbXB0eXRlc3QnKQotCi0gICAgICAgIGZvciBsaW5lIGluIHJlc3VsdC5vdXRwdXQuc3BsaXQoJ1xuJyk6Ci0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0NPTlZFUlNJT05fREVQRU5EU19iejInKToKLSAgICAgICAgICAgICAgICBkZXAgPSBsaW5lLnNwbGl0KCc9JylbMV0uc3RyaXAoJyInKQotICAgICAgICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgIyBOb3cgZ2V0IHRoZSBkZXBlbmRlbmN5IHRhc2sgbGlzdCBhbmQgY2hlY2sgZm9yIHRoZSBleHBlY3RlZCB0YXNrCi0gICAgICAgICMgZGVwZW5kZW5jeQotICAgICAgICBiaXRiYWtlKCctZyBlbXB0eXRlc3QnKQotCi0gICAgICAgIHRhc2tkZXBlbmRzZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAndGFzay1kZXBlbmRzLmRvdCcpCi0gICAgICAgIGRlcCA9ICBkZXAgKyAiLmRvX3BvcHVsYXRlX3N5c3Jvb3QiCi0gICAgICAgIGRlcGZvdW5kID0gRmFsc2UKLSAgICAgICAgZXhwZWN0ZWRsaW5lID0gJyJlbXB0eXRlc3QuZG9fcm9vdGZzIiAtPiAie30iJy5mb3JtYXQoZGVwKQotCi0gICAgICAgIHdpdGggb3Blbih0YXNrZGVwZW5kc2ZpbGUsICJyIikgYXMgZjoKLSAgICAgICAgICAgIGZvciBsaW5lIGluIGY6Ci0gICAgICAgICAgICAgICAgaWYgbGluZS5zdHJpcCgpID09IGV4cGVjdGVkbGluZToKLSAgICAgICAgICAgICAgICAgICAgZGVwZm91bmQgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgaWYgbm90IGRlcGZvdW5kOgotICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlwie31cIiBub3QgZm91bmQiLmZvcm1hdChleHBlY3RlZGxpbmUpKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvaW1hZ2VmZWF0dXJlcy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2ltYWdlZmVhdHVyZXMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2ODk2YzcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvaW1hZ2VmZWF0dXJlcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi1mcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAotZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIHJ1bnFlbXUKLWZyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQotZnJvbSBvZXFhLnV0aWxzLnNzaGNvbnRyb2wgaW1wb3J0IFNTSENvbnRyb2wKLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IGxvZ2dpbmcKLQotY2xhc3MgSW1hZ2VGZWF0dXJlcyhvZVNlbGZUZXN0KToKLQotICAgIHRlc3RfdXNlciA9ICd0ZXN0ZXInCi0gICAgcm9vdF91c2VyID0gJ3Jvb3QnCi0KLSAgICBAdGVzdGNhc2UoMTEwNykKLSAgICBkZWYgdGVzdF9ub25fcm9vdF91c2VyX2Nhbl9jb25uZWN0X3ZpYV9zc2hfd2l0aG91dF9wYXNzd29yZChzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFN1bW1hcnk6IENoZWNrIGlmIG5vbiByb290IHVzZXIgY2FuIGNvbm5lY3QgdmlhIHNzaCB3aXRob3V0IHBhc3N3b3JkCi0gICAgICAgIEV4cGVjdGVkOiAxLiBDb25uZWN0aW9uIHRvIHRoZSBpbWFnZSB2aWEgc3NoIHVzaW5nIHJvb3QgdXNlciB3aXRob3V0IHByb3ZpZGluZyBhIHBhc3N3b3JkIHNob3VsZCBiZSBhbGxvd2VkLgotICAgICAgICAgICAgICAgICAgMi4gQ29ubmVjdGlvbiB0byB0aGUgaW1hZ2UgdmlhIHNzaCB1c2luZyB0ZXN0ZXIgdXNlciB3aXRob3V0IHByb3ZpZGluZyBhIHBhc3N3b3JkIHNob3VsZCBiZSBhbGxvd2VkLgotICAgICAgICBQcm9kdWN0OiBvZS1jb3JlCi0gICAgICAgIEF1dGhvcjogSW9udXQgQ2hpc2Fub3ZpY2kgPGlvbnV0eC5jaGlzYW5vdmljaUBpbnRlbC5jb20+Ci0gICAgICAgIEF1dG9tYXRlZEJ5OiBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+Ci0gICAgICAgICIiIgotCi0gICAgICAgIGZlYXR1cmVzID0gJ0VYVFJBX0lNQUdFX0ZFQVRVUkVTID0gInNzaC1zZXJ2ZXItb3BlbnNzaCBlbXB0eS1yb290LXBhc3N3b3JkIGFsbG93LWVtcHR5LXBhc3N3b3JkIlxuJwotICAgICAgICBmZWF0dXJlcyArPSAnSU5IRVJJVCArPSAiZXh0cmF1c2VycyJcbicKLSAgICAgICAgZmVhdHVyZXMgKz0gJ0VYVFJBX1VTRVJTX1BBUkFNUyA9ICJ1c2VyYWRkIC1wIFwnXCcge307IHVzZXJtb2QgLXMgL2Jpbi9zaCB7fTsiJy5mb3JtYXQoc2VsZi50ZXN0X3VzZXIsIHNlbGYudGVzdF91c2VyKQotICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhmZWF0dXJlcykKLQotICAgICAgICAjIEJ1aWxkIGEgY29yZS1pbWFnZS1taW5pbWFsCi0gICAgICAgIGJpdGJha2UoJ2NvcmUtaW1hZ2UtbWluaW1hbCcpCi0KLSAgICAgICAgd2l0aCBydW5xZW11KCJjb3JlLWltYWdlLW1pbmltYWwiKSBhcyBxZW11OgotICAgICAgICAgICAgIyBBdHRlbXB0IHRvIHNzaCB3aXRoIGVhY2ggdXNlciBpbnRvIHFlbXUgd2l0aCBlbXB0eSBwYXNzd29yZAotICAgICAgICAgICAgZm9yIHVzZXIgaW4gW3NlbGYucm9vdF91c2VyLCBzZWxmLnRlc3RfdXNlcl06Ci0gICAgICAgICAgICAgICAgc3NoID0gU1NIQ29udHJvbChpcD1xZW11LmlwLCBsb2dmaWxlPXFlbXUuc3NobG9nLCB1c2VyPXVzZXIpCi0gICAgICAgICAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBzc2gucnVuKCJ0cnVlIikKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgJ3NzaCB0byB1c2VyICVzIGZhaWxlZCB3aXRoICVzJyAlICh1c2VyLCBvdXRwdXQpKQotCi0gICAgQHRlc3RjYXNlKDExMTUpCi0gICAgZGVmIHRlc3RfYWxsX3VzZXJzX2Nhbl9jb25uZWN0X3ZpYV9zc2hfd2l0aG91dF9wYXNzd29yZChzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFN1bW1hcnk6ICAgICBDaGVjayBpZiBhbGwgdXNlcnMgY2FuIGNvbm5lY3QgdmlhIHNzaCB3aXRob3V0IHBhc3N3b3JkCi0gICAgICAgIEV4cGVjdGVkOiAxLiBDb25uZWN0aW9uIHRvIHRoZSBpbWFnZSB2aWEgc3NoIHVzaW5nIHJvb3QgdXNlciB3aXRob3V0IHByb3ZpZGluZyBhIHBhc3N3b3JkIHNob3VsZCBOT1QgYmUgYWxsb3dlZC4KLSAgICAgICAgICAgICAgICAgIDIuIENvbm5lY3Rpb24gdG8gdGhlIGltYWdlIHZpYSBzc2ggdXNpbmcgdGVzdGVyIHVzZXIgd2l0aG91dCBwcm92aWRpbmcgYSBwYXNzd29yZCBzaG91bGQgYmUgYWxsb3dlZC4KLSAgICAgICAgUHJvZHVjdDogICAgIG9lLWNvcmUKLSAgICAgICAgQXV0aG9yOiAgICAgIElvbnV0IENoaXNhbm92aWNpIDxpb251dHguY2hpc2Fub3ZpY2lAaW50ZWwuY29tPgotICAgICAgICBBdXRvbWF0ZWRCeTogRGFuaWVsIElzdHJhdGUgPGRhbmllbC5hbGV4YW5kcnV4LmlzdHJhdGVAaW50ZWwuY29tPgotICAgICAgICAiIiIKLQotICAgICAgICBmZWF0dXJlcyA9ICdFWFRSQV9JTUFHRV9GRUFUVVJFUyA9ICJzc2gtc2VydmVyLW9wZW5zc2ggYWxsb3ctZW1wdHktcGFzc3dvcmQiXG4nCi0gICAgICAgIGZlYXR1cmVzICs9ICdJTkhFUklUICs9ICJleHRyYXVzZXJzIlxuJwotICAgICAgICBmZWF0dXJlcyArPSAnRVhUUkFfVVNFUlNfUEFSQU1TID0gInVzZXJhZGQgLXAgXCdcJyB7fTsgdXNlcm1vZCAtcyAvYmluL3NoIHt9OyInLmZvcm1hdChzZWxmLnRlc3RfdXNlciwgc2VsZi50ZXN0X3VzZXIpCi0gICAgICAgIHNlbGYud3JpdGVfY29uZmlnKGZlYXR1cmVzKQotCi0gICAgICAgICMgQnVpbGQgYSBjb3JlLWltYWdlLW1pbmltYWwKLSAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS1taW5pbWFsJykKLQotICAgICAgICB3aXRoIHJ1bnFlbXUoImNvcmUtaW1hZ2UtbWluaW1hbCIpIGFzIHFlbXU6Ci0gICAgICAgICAgICAjIEF0dGVtcHQgdG8gc3NoIHdpdGggZWFjaCB1c2VyIGludG8gcWVtdSB3aXRoIGVtcHR5IHBhc3N3b3JkCi0gICAgICAgICAgICBmb3IgdXNlciBpbiBbc2VsZi5yb290X3VzZXIsIHNlbGYudGVzdF91c2VyXToKLSAgICAgICAgICAgICAgICBzc2ggPSBTU0hDb250cm9sKGlwPXFlbXUuaXAsIGxvZ2ZpbGU9cWVtdS5zc2hsb2csIHVzZXI9dXNlcikKLSAgICAgICAgICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHNzaC5ydW4oInRydWUiKQotICAgICAgICAgICAgICAgIGlmIHVzZXIgPT0gJ3Jvb3QnOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHN0YXR1cywgMCwgJ3NzaCB0byB1c2VyIHJvb3Qgd2FzIGFsbG93ZWQgd2hlbiBpdCBzaG91bGQgbm90IGhhdmUgYmVlbicpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsICdzc2ggdG8gdXNlciB0ZXN0ZXIgZmFpbGVkIHdpdGggJXMnICUgb3V0cHV0KQotCi0KLSAgICBAdGVzdGNhc2UoMTExNikKLSAgICBkZWYgdGVzdF9jbHV0dGVyX2ltYWdlX2Nhbl9iZV9idWlsdChzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFN1bW1hcnk6ICAgICBDaGVjayBpZiBjbHV0dGVyIGltYWdlIGNhbiBiZSBidWlsdAotICAgICAgICBFeHBlY3RlZDogICAgMS4gY29yZS1pbWFnZS1jbHV0dGVyIGNhbiBiZSBidWlsdAotICAgICAgICBQcm9kdWN0OiAgICAgb2UtY29yZQotICAgICAgICBBdXRob3I6ICAgICAgSW9udXQgQ2hpc2Fub3ZpY2kgPGlvbnV0eC5jaGlzYW5vdmljaUBpbnRlbC5jb20+Ci0gICAgICAgIEF1dG9tYXRlZEJ5OiBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+Ci0gICAgICAgICIiIgotCi0gICAgICAgICMgQnVpbGQgYSBjb3JlLWltYWdlLWNsdXR0ZXIKLSAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS1jbHV0dGVyJykKLQotICAgIEB0ZXN0Y2FzZSgxMTE3KQotICAgIGRlZiB0ZXN0X3dheWxhbmRfc3VwcG9ydF9pbl9pbWFnZShzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFN1bW1hcnk6ICAgICBDaGVjayBXYXlsYW5kIHN1cHBvcnQgaW4gaW1hZ2UKLSAgICAgICAgRXhwZWN0ZWQ6ICAgIDEuIFdheWxhbmQgaW1hZ2UgY2FuIGJlIGJ1aWxkCi0gICAgICAgICAgICAgICAgICAgICAyLiBXYXlsYW5kIGZlYXR1cmUgY2FuIGJlIGluc3RhbGxlZAotICAgICAgICBQcm9kdWN0OiAgICAgb2UtY29yZQotICAgICAgICBBdXRob3I6ICAgICAgSW9udXQgQ2hpc2Fub3ZpY2kgPGlvbnV0eC5jaGlzYW5vdmljaUBpbnRlbC5jb20+Ci0gICAgICAgIEF1dG9tYXRlZEJ5OiBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+Ci0gICAgICAgICIiIgotCi0gICAgICAgIGRpc3Ryb19mZWF0dXJlcyA9IGdldF9iYl92YXIoJ0RJU1RST19GRUFUVVJFUycpCi0gICAgICAgIGlmIG5vdCAoJ29wZW5nbCcgaW4gZGlzdHJvX2ZlYXR1cmVzIGFuZCAnd2F5bGFuZCcgaW4gZGlzdHJvX2ZlYXR1cmVzKToKLSAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ25laXRoZXIgb3BlbmdsIG5vciB3YXlsYW5kIHByZXNlbnQgb24gRElTVFJPX0ZFQVRVUkVTIHNvIGNvcmUtaW1hZ2Utd2VzdG9uIGNhbm5vdCBiZSBidWlsdCcpCi0KLSAgICAgICAgIyBCdWlsZCBhIGNvcmUtaW1hZ2Utd2VzdG9uCi0gICAgICAgIGJpdGJha2UoJ2NvcmUtaW1hZ2Utd2VzdG9uJykKLQotICAgIGRlZiB0ZXN0X2JtYXAoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBTdW1tYXJ5OiAgICAgQ2hlY2sgYm1hcCBzdXBwb3J0Ci0gICAgICAgIEV4cGVjdGVkOiAgICAxLiBjb3JlLWltYWdlLW1pbmltYWwgY2FuIGJlIGJ1aWxkIHdpdGggYm1hcCBzdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAyLiBjb3JlLWltYWdlLW1pbmltYWwgaXMgc3BhcnNlCi0gICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCi0gICAgICAgIEF1dGhvcjogICAgICBFZCBCYXJ0b3NoIDxlZC5iYXJ0b3NoQGxpbnV4LmludGVsLmNvbT4KLSAgICAgICAgIiIiCi0KLSAgICAgICAgZmVhdHVyZXMgPSAnSU1BR0VfRlNUWVBFUyArPSAiIGV4dDQgZXh0NC5ibWFwIicKLSAgICAgICAgc2VsZi53cml0ZV9jb25maWcoZmVhdHVyZXMpCi0KLSAgICAgICAgaW1hZ2VfbmFtZSA9ICdjb3JlLWltYWdlLW1pbmltYWwnCi0gICAgICAgIGJpdGJha2UoaW1hZ2VfbmFtZSkKLQotICAgICAgICBkZXBsb3lfZGlyX2ltYWdlID0gZ2V0X2JiX3ZhcignREVQTE9ZX0RJUl9JTUFHRScpCi0gICAgICAgIGxpbmtfbmFtZSA9IGdldF9iYl92YXIoJ0lNQUdFX0xJTktfTkFNRScsIGltYWdlX25hbWUpCi0gICAgICAgIGltYWdlX3BhdGggPSBvcy5wYXRoLmpvaW4oZGVwbG95X2Rpcl9pbWFnZSwgIiVzLmV4dDQiICUgbGlua19uYW1lKQotICAgICAgICBibWFwX3BhdGggPSAiJXMuYm1hcCIgJSBpbWFnZV9wYXRoCi0KLSAgICAgICAgIyBjaGVjayBpZiByZXN1bHQgaW1hZ2UgYW5kIGJtYXAgZmlsZSBhcmUgaW4gZGVwbG95IGRpcmVjdG9yeQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoaW1hZ2VfcGF0aCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhibWFwX3BhdGgpKQotCi0gICAgICAgICMgY2hlY2sgaWYgcmVzdWx0IGltYWdlIGlzIHNwYXJzZQotICAgICAgICBpbWFnZV9zdGF0ID0gb3Muc3RhdChpbWFnZV9wYXRoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaW1hZ2Vfc3RhdC5zdF9zaXplID4gaW1hZ2Vfc3RhdC5zdF9ibG9ja3MgKiA1MTIpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9sYXllcmFwcGVuZC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2xheWVyYXBwZW5kLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2JiMzJjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2xheWVyYXBwZW5kLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IG9zCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHJlCi0KLWZyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Ci1mcm9tIG9lcWEuc2VsZnRlc3QuYnVpbGRoaXN0b3J5IGltcG9ydCBCdWlsZGhpc3RvcnlCYXNlCi1mcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhcgotaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scwotZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCi0KLWNsYXNzIExheWVyQXBwZW5kVGVzdHMob2VTZWxmVGVzdCk6Ci0gICAgbGF5ZXJjb25mID0gIiIiCi0jIFdlIGhhdmUgYSBjb25mIGFuZCBjbGFzc2VzIGRpcmVjdG9yeSwgYXBwZW5kIHRvIEJCUEFUSAotQkJQQVRIIC49ICI6JHtMQVlFUkRJUn0iCi0KLSMgV2UgaGF2ZSBhIHJlY2lwZXMgZGlyZWN0b3J5LCBhZGQgdG8gQkJGSUxFUwotQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcyovKi5iYiAke0xBWUVSRElSfS9yZWNpcGVzKi8qLmJiYXBwZW5kIgotCi1CQkZJTEVfQ09MTEVDVElPTlMgKz0gIm1ldGEtbGF5ZXJJTlQiCi1CQkZJTEVfUEFUVEVSTl9tZXRhLWxheWVySU5UIDo9ICJeJHtMQVlFUkRJUn0vIgotQkJGSUxFX1BSSU9SSVRZX21ldGEtbGF5ZXJJTlQgPSAiNiIKLSIiIgotICAgIHJlY2lwZSA9ICIiIgotTElDRU5TRT0iQ0xPU0VEIgotSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKLQotcHl0aG9uIGRvX2J1aWxkKCkgewotICAgIGJiLnBsYWluKCdCdWlsZGluZyAuLi4nKQotfQotYWRkdGFzayBidWlsZAotIiIiCi0gICAgYXBwZW5kID0gIiIiCi1GSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCi0KLVNSQ19VUklfYXBwZW5kID0gIiBmaWxlOi8vYXBwZW5kdGVzdC50eHQiCi0KLXN5c3Jvb3Rfc3RhZ2VfYWxsX2FwcGVuZCgpIHsKLQlpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L2FwcGVuZHRlc3QudHh0ICR7U1lTUk9PVF9ERVNURElSfS8KLX0KLQotIiIiCi0KLSAgICBhcHBlbmQyID0gIiIiCi1GSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCi0KLVNSQ19VUklfYXBwZW5kICs9ICJmaWxlOi8vYXBwZW5kdGVzdC50eHQiCi0iIiIKLSAgICBsYXllcmFwcGVuZCA9ICcnCi0KLSAgICBkZWYgdGVhckRvd25Mb2NhbChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5sYXllcmFwcGVuZDoKLSAgICAgICAgICAgIGZ0b29scy5yZW1vdmVfZnJvbV9maWxlKHNlbGYuYnVpbGRkaXIgKyAiL2NvbmYvYmJsYXllcnMuY29uZiIsIHNlbGYubGF5ZXJhcHBlbmQpCi0KLSAgICBAdGVzdGNhc2UoMTE5NikKLSAgICBkZWYgdGVzdF9sYXllcl9hcHBlbmRzKHNlbGYpOgotICAgICAgICBjb3JlYmFzZSA9IGdldF9iYl92YXIoIkNPUkVCQVNFIikKLQotICAgICAgICBmb3IgbCBpbiBbIjAiLCAiMSIsICIyIl06Ci0gICAgICAgICAgICBsYXllciA9IG9zLnBhdGguam9pbihjb3JlYmFzZSwgIm1ldGEtbGF5ZXJ0ZXN0IiArIGwpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGxheWVyKSkKLSAgICAgICAgICAgIG9zLm1rZGlyKGxheWVyKQotICAgICAgICAgICAgb3MubWtkaXIobGF5ZXIgKyAiL2NvbmYiKQotICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyICsgIi9jb25mL2xheWVyLmNvbmYiLCAidyIpIGFzIGY6Ci0gICAgICAgICAgICAgICAgZi53cml0ZShzZWxmLmxheWVyY29uZi5yZXBsYWNlKCJJTlQiLCBsKSkKLSAgICAgICAgICAgIG9zLm1rZGlyKGxheWVyICsgIi9yZWNpcGVzLXRlc3QiKQotICAgICAgICAgICAgaWYgbCA9PSAiMCI6Ci0gICAgICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyICsgIi9yZWNpcGVzLXRlc3QvbGF5ZXJhcHBlbmR0ZXN0LmJiIiwgInciKSBhcyBmOgotICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHNlbGYucmVjaXBlKQotICAgICAgICAgICAgZWxpZiBsID09ICIxIjoKLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4obGF5ZXIgKyAiL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QuYmJhcHBlbmQiLCAidyIpIGFzIGY6Ci0gICAgICAgICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5hcHBlbmQpCi0gICAgICAgICAgICAgICAgb3MubWtkaXIobGF5ZXIgKyAiL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QiKQotICAgICAgICAgICAgICAgIHdpdGggb3BlbihsYXllciArICIvcmVjaXBlcy10ZXN0L2xheWVyYXBwZW5kdGVzdC9hcHBlbmR0ZXN0LnR4dCIsICJ3IikgYXMgZjoKLSAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiTGF5ZXIgMSB0ZXN0IikKLSAgICAgICAgICAgIGVsaWYgbCA9PSAiMiI6Ci0gICAgICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyICsgIi9yZWNpcGVzLXRlc3QvbGF5ZXJhcHBlbmR0ZXN0LmJiYXBwZW5kIiwgInciKSBhcyBmOgotICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHNlbGYuYXBwZW5kMikKLSAgICAgICAgICAgICAgICBvcy5ta2RpcihsYXllciArICIvcmVjaXBlcy10ZXN0L2xheWVyYXBwZW5kdGVzdCIpCi0gICAgICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyICsgIi9yZWNpcGVzLXRlc3QvbGF5ZXJhcHBlbmR0ZXN0L2FwcGVuZHRlc3QudHh0IiwgInciKSBhcyBmOgotICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJMYXllciAyIHRlc3QiKQotICAgICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChsYXllcikKLQotICAgICAgICBzZWxmLmxheWVyYXBwZW5kID0gIkJCTEFZRVJTICs9IFwiezB9L21ldGEtbGF5ZXJ0ZXN0MCB7MH0vbWV0YS1sYXllcnRlc3QxIHswfS9tZXRhLWxheWVydGVzdDJcIiIuZm9ybWF0KGNvcmViYXNlKQotICAgICAgICBmdG9vbHMuYXBwZW5kX2ZpbGUoc2VsZi5idWlsZGRpciArICIvY29uZi9iYmxheWVycy5jb25mIiwgc2VsZi5sYXllcmFwcGVuZCkKLSAgICAgICAgc3RhZ2luZ2RpciA9IGdldF9iYl92YXIoIlNZU1JPT1RfREVTVERJUiIsICJsYXllcmFwcGVuZHRlc3QiKQotICAgICAgICBiaXRiYWtlKCJsYXllcmFwcGVuZHRlc3QiKQotICAgICAgICBkYXRhID0gZnRvb2xzLnJlYWRfZmlsZShzdGFnaW5nZGlyICsgIi9hcHBlbmR0ZXN0LnR4dCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgIkxheWVyIDIgdGVzdCIpCi0gICAgICAgIG9zLnJlbW92ZShjb3JlYmFzZSArICIvbWV0YS1sYXllcnRlc3QyL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QvYXBwZW5kdGVzdC50eHQiKQotICAgICAgICBiaXRiYWtlKCJsYXllcmFwcGVuZHRlc3QiKQotICAgICAgICBkYXRhID0gZnRvb2xzLnJlYWRfZmlsZShzdGFnaW5nZGlyICsgIi9hcHBlbmR0ZXN0LnR4dCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgIkxheWVyIDEgdGVzdCIpCi0gICAgICAgIHdpdGggb3Blbihjb3JlYmFzZSArICIvbWV0YS1sYXllcnRlc3QyL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QvYXBwZW5kdGVzdC50eHQiLCAidyIpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKCJMYXllciAyIHRlc3QiKQotICAgICAgICBiaXRiYWtlKCJsYXllcmFwcGVuZHRlc3QiKQotICAgICAgICBkYXRhID0gZnRvb2xzLnJlYWRfZmlsZShzdGFnaW5nZGlyICsgIi9hcHBlbmR0ZXN0LnR4dCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgIkxheWVyIDIgdGVzdCIpCi0KLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvbGlib2UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9saWJvZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIwMzAxZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9saWJvZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLWZyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Ci1mcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IGdldF9iYl92YXIsIGdldF9iYl92YXJzLCBiaXRiYWtlLCBydW5DbWQKLWltcG9ydCBvZS5wYXRoCi1pbXBvcnQgZ2xvYgotaW1wb3J0IG9zCi1pbXBvcnQgb3MucGF0aAotCi1jbGFzcyBMaWJPRShvZVNlbGZUZXN0KToKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBzZXRVcENsYXNzKGNscyk6Ci0gICAgICAgIGNscy50bXBfZGlyID0gZ2V0X2JiX3ZhcignVE1QRElSJykKLQotICAgIGRlZiB0ZXN0X2NvcHlfdHJlZV9zcGVjaWFsKHNlbGYpOgotICAgICAgICAiIiIKLSAgICAgICAgU3VtbWFyeTogICAgb2UucGF0aC5jb3B5dHJlZSgpIHNob3VsZCBjb3B5IGZpbGVzIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXIKLSAgICAgICAgRXhwZWN0ZWQ6ICAgJ3Rlc3QgZmlsZSB3aXRoIHNwwqNjIWFsIEBuZCBzcGFjZXMnIHNob3VsZCBleGlzdCBpbgotICAgICAgICAgICAgICAgICAgICBjb3B5IGRlc3RpbmF0aW9uCi0gICAgICAgIFByb2R1Y3Q6ICAgIE9FLUNvcmUKLSAgICAgICAgQXV0aG9yOiAgICAgSm9zaHVhIExvY2sgPGpvc2h1YS5nLmxvY2tAaW50ZWwuY29tPgotICAgICAgICAiIiIKLSAgICAgICAgdGVzdGxvYyA9IG9lLnBhdGguam9pbihzZWxmLnRtcF9kaXIsICdsaWJvZXRlc3RzJykKLSAgICAgICAgc3JjID0gb2UucGF0aC5qb2luKHRlc3Rsb2MsICdzcmMnKQotICAgICAgICBkc3QgPSBvZS5wYXRoLmpvaW4odGVzdGxvYywgJ2RzdCcpCi0gICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih0ZXN0bG9jKQotICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc3JjKQotICAgICAgICB0ZXN0ZmlsZW5hbWUgPSAndGVzdCBmaWxlIHdpdGggc3DCo2MhYWwgQG5kIHNwYWNlcycKLQotICAgICAgICAjIGNyZWF0ZSB0aGUgdGVzdCBmaWxlIGFuZCBjb3B5IGl0Ci0gICAgICAgIG9wZW4ob2UucGF0aC5qb2luKHNyYywgdGVzdGZpbGVuYW1lKSwgJ3crYicpLmNsb3NlKCkKLSAgICAgICAgb2UucGF0aC5jb3B5dHJlZShzcmMsIGRzdCkKLQotICAgICAgICAjIGVuc3VyZSBwYXRoIGV4aXN0cyBpbiBkZXN0Ci0gICAgICAgIGZpbGVpbmRzdCA9IG9zLnBhdGguaXNmaWxlKG9lLnBhdGguam9pbihkc3QsIHRlc3RmaWxlbmFtZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlaW5kc3QsICJGaWxlIHdpdGggc3BhY2VzIGRvZXNuJ3QgZXhpc3QgaW4gZHN0IikKLQotICAgICAgICBvZS5wYXRoLnJlbW92ZSh0ZXN0bG9jKQotCi0gICAgZGVmIHRlc3RfY29weV90cmVlX3hhdHRyKHNlbGYpOgotICAgICAgICAiIiIKLSAgICAgICAgU3VtbWFyeTogICAgb2UucGF0aC5jb3B5dHJlZSgpIHNob3VsZCBwcmVzZXJ2ZSB4YXR0ciBvbiBjb3BpZWQgZmlsZXMKLSAgICAgICAgRXhwZWN0ZWQ6ICAgdGVzdHhhdHRyIGZpbGUgaW4gZGVzdGluYXRpb24gc2hvdWxkIGhhdmUgdXNlci5vZXRlc3QKLSAgICAgICAgICAgICAgICAgICAgZXh0ZW5kZWQgYXR0cmlidXRlCi0gICAgICAgIFByb2R1Y3Q6ICAgIE9FLUNvcmUKLSAgICAgICAgQXV0aG9yOiAgICAgSm9zaHVhIExvY2sgPGpvc2h1YS5nLmxvY2tAaW50ZWwuY29tPgotICAgICAgICAiIiIKLSAgICAgICAgdGVzdGxvYyA9IG9lLnBhdGguam9pbihzZWxmLnRtcF9kaXIsICdsaWJvZXRlc3RzJykKLSAgICAgICAgc3JjID0gb2UucGF0aC5qb2luKHRlc3Rsb2MsICdzcmMnKQotICAgICAgICBkc3QgPSBvZS5wYXRoLmpvaW4odGVzdGxvYywgJ2RzdCcpCi0gICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih0ZXN0bG9jKQotICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc3JjKQotICAgICAgICB0ZXN0ZmlsZW5hbWUgPSAndGVzdHhhdHRyJwotCi0gICAgICAgICMgZW5zdXJlIHdlIGhhdmUgc2V0ZmF0dHIgYXZhaWxhYmxlCi0gICAgICAgIGJpdGJha2UoImF0dHItbmF0aXZlIikKLQotICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWydTWVNST09UX0RFU1RESVInLCAnYmluZGlyJ10sICdhdHRyLW5hdGl2ZScpCi0gICAgICAgIGRlc3RkaXIgPSBiYl92YXJzWydTWVNST09UX0RFU1RESVInXQotICAgICAgICBiaW5kaXIgPSBiYl92YXJzWydiaW5kaXInXQotICAgICAgICBiaW5kaXIgPSBkZXN0ZGlyICsgYmluZGlyCi0KLSAgICAgICAgIyBjcmVhdGUgYSBmaWxlIHdpdGggeGF0dHIgYW5kIGNvcHkgaXQKLSAgICAgICAgb3BlbihvZS5wYXRoLmpvaW4oc3JjLCB0ZXN0ZmlsZW5hbWUpLCAndytiJykuY2xvc2UoKQotICAgICAgICBydW5DbWQoJyVzL3NldGZhdHRyIC1uIHVzZXIub2V0ZXN0IC12ICJ0ZXN0aW5nIGxpYm9lIiAlcycgJSAoYmluZGlyLCBvZS5wYXRoLmpvaW4oc3JjLCB0ZXN0ZmlsZW5hbWUpKSkKLSAgICAgICAgb2UucGF0aC5jb3B5dHJlZShzcmMsIGRzdCkKLQotICAgICAgICAjIGVuc3VyZSBmaWxlIGluIGRlc3QgaGFzIHVzZXIub2V0ZXN0IHhhdHRyCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnJXMvZ2V0ZmF0dHIgLW4gdXNlci5vZXRlc3QgJXMnICUgKGJpbmRpciwgb2UucGF0aC5qb2luKGRzdCwgdGVzdGZpbGVuYW1lKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3VzZXIub2V0ZXN0PSJ0ZXN0aW5nIGxpYm9lIicsIHJlc3VsdC5vdXRwdXQsICdFeHRlbmRlZCBhdHRyaWJ1dGUgbm90IHNlcnQgaW4gZHN0JykKLQotICAgICAgICBvZS5wYXRoLnJlbW92ZSh0ZXN0bG9jKQotCi0gICAgZGVmIHRlc3RfY29weV9oYXJkbGlua190cmVlX2NvdW50KHNlbGYpOgotICAgICAgICAiIiIKLSAgICAgICAgU3VtbWFyeTogICAgb2UucGF0aC5jb3B5aGFyZGxpbmt0cmVlKCkgc2hvdWxkbid0IG1pc3Mgb3V0IGZpbGVzCi0gICAgICAgIEV4cGVjdGVkOiAgIHNyYyBhbmQgZHN0IHNob3VsZCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBmaWxlcwotICAgICAgICBQcm9kdWN0OiAgICBPRS1Db3JlCi0gICAgICAgIEF1dGhvcjogICAgIEpvc2h1YSBMb2NrIDxqb3NodWEuZy5sb2NrQGludGVsLmNvbT4KLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3Rsb2MgPSBvZS5wYXRoLmpvaW4oc2VsZi50bXBfZGlyLCAnbGlib2V0ZXN0cycpCi0gICAgICAgIHNyYyA9IG9lLnBhdGguam9pbih0ZXN0bG9jLCAnc3JjJykKLSAgICAgICAgZHN0ID0gb2UucGF0aC5qb2luKHRlc3Rsb2MsICdkc3QnKQotICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodGVzdGxvYykKLSAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNyYykKLSAgICAgICAgdGVzdGZpbGVzID0gWydmb28nLCAnYmFyJywgJy5iYXonLCAncXV1eCddCi0KLSAgICAgICAgZGVmIHRvdWNoZmlsZSh0Zik6Ci0gICAgICAgICAgICBvcGVuKG9lLnBhdGguam9pbihzcmMsIHRmKSwgJ3crYicpLmNsb3NlKCkKLQotICAgICAgICBmb3IgZiBpbiB0ZXN0ZmlsZXM6Ci0gICAgICAgICAgICB0b3VjaGZpbGUoZikKLQotICAgICAgICBvZS5wYXRoLmNvcHloYXJkbGlua3RyZWUoc3JjLCBkc3QpCi0KLSAgICAgICAgZHN0Y250ID0gbGVuKG9zLmxpc3RkaXIoZHN0KSkKLSAgICAgICAgc3JjY250ID0gbGVuKG9zLmxpc3RkaXIoc3JjKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZHN0Y250LCBsZW4odGVzdGZpbGVzKSwgIk51bWJlciBvZiBmaWxlcyBpbiBkc3QgKCVzKSBkaWZmZXJzIGZyb20gbnVtYmVyIG9mIGZpbGVzIGluIHNyYyglcykuIiAlIChkc3RjbnQsIHNyY2NudCkpCi0KLSAgICAgICAgb2UucGF0aC5yZW1vdmUodGVzdGxvYykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2xpYy1jaGVja3N1bS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2xpYy1jaGVja3N1bS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU4MTM3My4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9saWMtY2hlY2tzdW0ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1pbXBvcnQgb3MKLWltcG9ydCB0ZW1wZmlsZQotCi1mcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAotZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBiaXRiYWtlCi1mcm9tIG9lcWEudXRpbHMgaW1wb3J0IENvbW1hbmRFcnJvcgotZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCi0KLWNsYXNzIExpY2Vuc2VUZXN0cyhvZVNlbGZUZXN0KToKLQotICAgICMgVmVyaWZ5IHRoYXQgY2hhbmdpbmcgYSBsaWNlbnNlIGZpbGUgdGhhdCBoYXMgYW4gYWJzb2x1dGUgcGF0aCBjYXVzZXMKLSAgICAjIHRoZSBsaWNlbnNlIHFhIHRvIGZhaWwgZHVlIHRvIGEgbWlzbWF0Y2hlZCBtZDVzdW0uCi0gICAgQHRlc3RjYXNlKDExOTcpCi0gICAgZGVmIHRlc3Rfbm9ubWF0Y2hpbmdfY2hlY2tzdW0oc2VsZik6Ci0gICAgICAgIGJpdGJha2VfY21kID0gJy1jIHBvcHVsYXRlX2xpYyBlbXB0eXRlc3QnCi0gICAgICAgIGVycm9yX21zZyA9ICdlbXB0eXRlc3Q6IFRoZSBuZXcgbWQ1IGNoZWNrc3VtIGlzIDhkNzc3ZjM4NWQzZGZlYzg4MTVkMjBmNzQ5NjAyNmRjJwotCi0gICAgICAgIGxpY19maWxlLCBsaWNfcGF0aCA9IHRlbXBmaWxlLm1rc3RlbXAoKQotICAgICAgICBvcy5jbG9zZShsaWNfZmlsZSkKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChsaWNfcGF0aCkKLQotICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYygnZW1wdHl0ZXN0JywgIiIiCi1JTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJXM7bWQ1PWQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlIgotU1JDX1VSSSA9ICJmaWxlOi8vJXM7bWQ1PWQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlIgotIiIiICUgKGxpY19wYXRoLCBsaWNfcGF0aCkpCi0gICAgICAgIHJlc3VsdCA9IGJpdGJha2UoYml0YmFrZV9jbWQpCi0KLSAgICAgICAgd2l0aCBvcGVuKGxpY19wYXRoLCAidyIpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKCJkYXRhIikKLQotICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiSU5IRVJJVF9yZW1vdmUgPSBcInJlcG9ydC1lcnJvclwiIikKLSAgICAgICAgcmVzdWx0ID0gYml0YmFrZShiaXRiYWtlX2NtZCwgaWdub3JlX3N0YXR1cz1UcnVlKQotICAgICAgICBpZiBlcnJvcl9tc2cgbm90IGluIHJlc3VsdC5vdXRwdXQ6Ci0gICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcihyZXN1bHQub3V0cHV0KQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvbWFuaWZlc3QucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9tYW5pZmVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU2Zjk0OS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9tYW5pZmVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi1pbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBvcwotCi1mcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAotZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBnZXRfYmJfdmFyLCBnZXRfYmJfdmFycywgYml0YmFrZQotZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCi0KLWNsYXNzIE1hbmlmZXN0RW50cnk6Ci0gICAgJycnQSBtYW5pZmVzdCBpdGVtIG9mIGEgY29sbGVjdGlvbiBhYmxlIHRvIGxpc3QgbWlzc2luZyBwYWNrYWdlcycnJwotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbnRyeSk6Ci0gICAgICAgIHNlbGYuZmlsZSA9IGVudHJ5Ci0gICAgICAgIHNlbGYubWlzc2luZyA9IFtdCi0KLWNsYXNzIFZlcmlmeU1hbmlmZXN0KG9lU2VsZlRlc3QpOgotICAgICcnJ1Rlc3RzIGZvciB0aGUgbWFuaWZlc3QgZmlsZXMgYW5kIGNvbnRlbnRzIG9mIGFuIGltYWdlJycnCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgY2hlY2tfbWFuaWZlc3RfZW50cmllcyhzZWxmLCBtYW5pZmVzdCwgcGF0aCk6Ci0gICAgICAgIG1hbmlmZXN0X2Vycm9ycyA9IFtdCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggb3BlbihtYW5pZmVzdCwgInIiKSBhcyBtZmlsZToKLSAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBtZmlsZToKLSAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3RfZW50cnkgPSBvcy5wYXRoLmpvaW4ocGF0aCwgbGluZS5zcGxpdCgpWzBdKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5kZWJ1Zygie306IGxvb2tpbmcgZm9yIHt9IlwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2VsZi5jbGFzc25hbWUsIG1hbmlmZXN0X2VudHJ5KSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG1hbmlmZXN0X2VudHJ5KToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0X2Vycm9ycy5hcHBlbmQobWFuaWZlc3RfZW50cnkpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5kZWJ1Zygie306IHt9IG5vdCBmb3VuZCJcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYuY2xhc3NuYW1lLCBtYW5pZmVzdF9lbnRyeSkpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmxvZy5kZWJ1Zygie306IGNoZWNraW5nIG9mIHt9IGZhaWxlZCJcCi0gICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2VsZi5jbGFzc25hbWUsIG1hbmlmZXN0KSkKLSAgICAgICAgICAgIHJhaXNlIGUKLQotICAgICAgICByZXR1cm4gbWFuaWZlc3RfZXJyb3JzCi0KLSAgICAjdGhpcyB3aWxsIHBvc3NpYmx5IG1vdmUgZnJvbSBoZXJlCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGdldF9kaXJfZnJvbV9iYl92YXIoc2VsZiwgYmJfdmFyLCB0YXJnZXQgPSBOb25lKToKLSAgICAgICAgdGFyZ2V0ID09IHNlbGYuYnVpbGR0YXJnZXQgaWYgdGFyZ2V0ID09IE5vbmUgZWxzZSB0YXJnZXQKLSAgICAgICAgZGlyZWN0b3J5ID0gZ2V0X2JiX3ZhcihiYl92YXIsIHRhcmdldCk7Ci0gICAgICAgIGlmIG5vdCBkaXJlY3Rvcnkgb3Igbm90IG9zLnBhdGguaXNkaXIoZGlyZWN0b3J5KToKLSAgICAgICAgICAgIHNlbGYubG9nLmRlYnVnKCJ7fToge30gcG9pbnRzIHRvIHt9IHdoZW4gdGFyZ2V0ID0ge30iXAotICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYuY2xhc3NuYW1lLCBiYl92YXIsIGRpcmVjdG9yeSwgdGFyZ2V0KSkKLSAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKLSAgICAgICAgcmV0dXJuIGRpcmVjdG9yeQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6Ci0KLSAgICAgICAgc2VsZi5idWlsZHRhcmdldCA9ICdjb3JlLWltYWdlLW1pbmltYWwnCi0gICAgICAgIHNlbGYuY2xhc3NuYW1lID0gJ1ZlcmlmeU1hbmlmZXN0JwotCi0gICAgICAgIHNlbGYubG9nLmluZm8oInt9OiBkb2luZyBiaXRiYWtlIHt9IGFzIGEgcHJlcmVxdWlzaXRlIG9mIHRoZSB0ZXN0IlwKLSAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYuY2xhc3NuYW1lLCBzZWxmLmJ1aWxkdGFyZ2V0KSkKLSAgICAgICAgaWYgYml0YmFrZShzZWxmLmJ1aWxkdGFyZ2V0KS5zdGF0dXM6Ci0gICAgICAgICAgICBzZWxmLmxvZy5kZWJ1Zygie30gRmFpbGVkIHRvIHNldHVwIHt9IlwKLSAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZWxmLmNsYXNzbmFtZSwgc2VsZi5idWlsZHRhcmdldCkpCi0gICAgICAgICAgICB1bml0dGVzdC5Ta2lwVGVzdCgie306IENhbm5vdCBzZXR1cCB0ZXN0aW5nIHNjZW5hcmlvIlwKLSAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZWxmLmNsYXNzbmFtZSkpCi0KLSAgICBAdGVzdGNhc2UoMTM4MCkKLSAgICBkZWYgdGVzdF9TREtfbWFuaWZlc3RfZW50cmllcyhzZWxmKToKLSAgICAgICAgJycnVmVyaWZ5aW5nIHRoZSBTREsgbWFuaWZlc3QgZW50cmllcyBleGlzdCwgdGhpcyBtYXkgdGFrZSBhIGJ1aWxkJycnCi0KLSAgICAgICAgIyB0aGUgc2V0dXAgc2hvdWxkIGJpdGJha2UgY29yZS1pbWFnZS1taW5pbWFsIGFuZCBoZXJlIGl0IGlzIHJlcXVpcmVkCi0gICAgICAgICMgdG8gZG8gYW4gYWRkaXRpb25hbCBzZXR1cCBmb3IgdGhlIHNkawotICAgICAgICBzZGt0YXNrID0gJy1jIHBvcHVsYXRlX3NkaycKLSAgICAgICAgYmJhcmdzID0gc2RrdGFzayArICcgJyArIHNlbGYuYnVpbGR0YXJnZXQKLSAgICAgICAgc2VsZi5sb2cuZGVidWcoInt9OiBkb2luZyBiaXRiYWtlIHt9IGFzIGEgcHJlcmVxdWlzaXRlIG9mIHRoZSB0ZXN0IlwKLSAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYuY2xhc3NuYW1lLCBiYmFyZ3MpKQotICAgICAgICBpZiBiaXRiYWtlKGJiYXJncykuc3RhdHVzOgotICAgICAgICAgICAgc2VsZi5sb2cuZGVidWcoInt9IEZhaWxlZCB0byBiaXRiYWtlIHt9IlwKLSAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZWxmLmNsYXNzbmFtZSwgYmJhcmdzKSkKLSAgICAgICAgICAgIHVuaXR0ZXN0LlNraXBUZXN0KCJ7fTogQ2Fubm90IHNldHVwIHRlc3Rpbmcgc2NlbmFyaW8iXAotICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYuY2xhc3NuYW1lKSkKLQotCi0gICAgICAgIHBrZ2RhdGFfZGlyID0gcmV2ZXJzZV9kaXIgPSB7fQotICAgICAgICBtZmlsZW5hbWUgPSBtcGF0aCA9IG1fZW50cnkgPSB7fQotICAgICAgICAjIGdldCBtYW5pZmVzdCBsb2NhdGlvbiBiYXNlZCBvbiB0YXJnZXQgdG8gcXVlcnkgYWJvdXQKLSAgICAgICAgZF90YXJnZXQ9IGRpY3QodGFyZ2V0ID0gc2VsZi5idWlsZHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBob3N0ID0gJ25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtc2RrLWhvc3QnKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtZGlyID0gc2VsZi5nZXRfZGlyX2Zyb21fYmJfdmFyKCdTREtfREVQTE9ZJywgc2VsZi5idWlsZHRhcmdldCkKLSAgICAgICAgICAgIGZvciBrIGluIGRfdGFyZ2V0LmtleXMoKToKLSAgICAgICAgICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWydTREtfTkFNRScsICdTREtfVkVSU0lPTiddLCBzZWxmLmJ1aWxkdGFyZ2V0KQotICAgICAgICAgICAgICAgIG1maWxlbmFtZVtrXSA9ICJ7fS10b29sY2hhaW4te30ue30ubWFuaWZlc3QiLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGJiX3ZhcnNbJ1NES19OQU1FJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICBiYl92YXJzWydTREtfVkVSU0lPTiddLAotICAgICAgICAgICAgICAgICAgICAgICAgaykKLSAgICAgICAgICAgICAgICBtcGF0aFtrXSA9IG9zLnBhdGguam9pbihtZGlyLCBtZmlsZW5hbWVba10pCi0gICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG1wYXRoW2tdKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZGVidWcoInt9OiB7fSBkb2VzIG5vdCBleGlzdCIuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGFzc25hbWUsIG1wYXRoW2tdKSkKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotICAgICAgICAgICAgICAgIG1fZW50cnlba10gPSBNYW5pZmVzdEVudHJ5KG1wYXRoW2tdKQotCi0gICAgICAgICAgICAgICAgcGtnZGF0YV9kaXJba10gPSBzZWxmLmdldF9kaXJfZnJvbV9iYl92YXIoJ1BLR0RBVEFfRElSJywKLSAgICAgICAgICAgICAgICAgICAgICAgIGRfdGFyZ2V0W2tdKQotICAgICAgICAgICAgICAgIHJldmVyc2VfZGlyW2tdID0gb3MucGF0aC5qb2luKHBrZ2RhdGFfZGlyW2tdLAotICAgICAgICAgICAgICAgICAgICAgICAgJ3J1bnRpbWUtcmV2ZXJzZScpCi0gICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHJldmVyc2VfZGlyW2tdKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZGVidWcoInt9OiB7fSBkb2VzIG5vdCBleGlzdCIuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGFzc25hbWUsIHJldmVyc2VfZGlyW2tdKSkKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJ7fTogRXJyb3IgaW4gb2J0YWluaW5nIG1hbmlmZXN0IGRpcnMiXAotICAgICAgICAgICAgICAgIC5mb3JtYXQoc2VsZi5jbGFzc25hbWUpKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgIG1zZyA9ICJ7fTogRXJyb3IgY2Fubm90IGZpbmQgbWFuaWZlc3RzIGluIHRoZSBzcGVjaWZpZWQgZGlyOlxue30iXAotICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYuY2xhc3NuYW1lLCBtZGlyKQotICAgICAgICAgICAgc2VsZi5mYWlsKG1zZykKLQotICAgICAgICBmb3IgayBpbiBkX3RhcmdldC5rZXlzKCk6Ci0gICAgICAgICAgICBzZWxmLmxvZy5kZWJ1Zygie306IENoZWNrIG1hbmlmZXN0IHt9Ii5mb3JtYXQoCi0gICAgICAgICAgICAgICAgc2VsZi5jbGFzc25hbWUsIG1fZW50cnlba10uZmlsZSkpCi0KLSAgICAgICAgICAgIG1fZW50cnlba10ubWlzc2luZyA9IHNlbGYuY2hlY2tfbWFuaWZlc3RfZW50cmllcyhcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZW50cnlba10uZmlsZSxyZXZlcnNlX2RpcltrXSkKLSAgICAgICAgICAgIGlmIG1fZW50cnlba10ubWlzc2luZzoKLSAgICAgICAgICAgICAgICBtc2cgPSAne306IHt9IEVycm9yIGhhcyB0aGUgZm9sbG93aW5nIG1pc3NpbmcgZW50cmllcydcCi0gICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYuY2xhc3NuYW1lLCBtX2VudHJ5W2tdLmZpbGUpCi0gICAgICAgICAgICAgICAgbG9nbXNnID0gbXNnKyc6XG4nKydcbicuam9pbihtX2VudHJ5W2tdLm1pc3NpbmcpCi0gICAgICAgICAgICAgICAgc2VsZi5sb2cuZGVidWcobG9nbXNnKQotICAgICAgICAgICAgICAgIHNlbGYubG9nLmluZm8obXNnKQotICAgICAgICAgICAgICAgIHNlbGYuZmFpbChsb2dtc2cpCi0KLSAgICBAdGVzdGNhc2UoMTM4MSkKLSAgICBkZWYgdGVzdF9pbWFnZV9tYW5pZmVzdF9lbnRyaWVzKHNlbGYpOgotICAgICAgICAnJydWZXJpZnlpbmcgdGhlIGltYWdlIG1hbmlmZXN0IGVudHJpZXMgZXhpc3QnJycKLQotICAgICAgICAjIGdldCBtYW5pZmVzdCBsb2NhdGlvbiBiYXNlZCBvbiB0YXJnZXQgdG8gcXVlcnkgYWJvdXQKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbWRpciA9IHNlbGYuZ2V0X2Rpcl9mcm9tX2JiX3ZhcignREVQTE9ZX0RJUl9JTUFHRScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkdGFyZ2V0KQotICAgICAgICAgICAgbWZpbGVuYW1lID0gZ2V0X2JiX3ZhcigiSU1BR0VfTElOS19OQU1FIiwgc2VsZi5idWlsZHRhcmdldClcCi0gICAgICAgICAgICAgICAgICAgICsgIi5tYW5pZmVzdCIKLSAgICAgICAgICAgIG1wYXRoID0gb3MucGF0aC5qb2luKG1kaXIsIG1maWxlbmFtZSkKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShtcGF0aCk6IHJhaXNlIElPRXJyb3IKLSAgICAgICAgICAgIG1fZW50cnkgPSBNYW5pZmVzdEVudHJ5KG1wYXRoKQotCi0gICAgICAgICAgICBwa2dkYXRhX2RpciA9IHt9Ci0gICAgICAgICAgICBwa2dkYXRhX2RpciA9IHNlbGYuZ2V0X2Rpcl9mcm9tX2JiX3ZhcignUEtHREFUQV9ESVInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5idWlsZHRhcmdldCkKLSAgICAgICAgICAgIHJldmRpciA9IG9zLnBhdGguam9pbihwa2dkYXRhX2RpciwgJ3J1bnRpbWUtcmV2ZXJzZScpCi0gICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocmV2ZGlyKTogcmFpc2UgSU9FcnJvcgotICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJ7fTogRXJyb3IgaW4gb2J0YWluaW5nIG1hbmlmZXN0IGRpcnMiXAotICAgICAgICAgICAgICAgIC5mb3JtYXQoc2VsZi5jbGFzc25hbWUpKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgIG1zZyA9ICJ7fTogRXJyb3IgY2Fubm90IGZpbmQgbWFuaWZlc3RzIGluIGRpcjpcbnt9IlwKLSAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZWxmLmNsYXNzbmFtZSwgbWRpcikKLSAgICAgICAgICAgIHNlbGYuZmFpbChtc2cpCi0KLSAgICAgICAgc2VsZi5sb2cuZGVidWcoInt9OiBDaGVjayBtYW5pZmVzdCB7fSJcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZWxmLmNsYXNzbmFtZSwgbV9lbnRyeS5maWxlKSkKLSAgICAgICAgbV9lbnRyeS5taXNzaW5nID0gc2VsZi5jaGVja19tYW5pZmVzdF9lbnRyaWVzKFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2VudHJ5LmZpbGUsIHJldmRpcikKLSAgICAgICAgaWYgbV9lbnRyeS5taXNzaW5nOgotICAgICAgICAgICAgbXNnID0gJ3t9OiB7fSBFcnJvciBoYXMgdGhlIGZvbGxvd2luZyBtaXNzaW5nIGVudHJpZXMnXAotICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYuY2xhc3NuYW1lLCBtX2VudHJ5LmZpbGUpCi0gICAgICAgICAgICBsb2dtc2cgPSBtc2crJzpcbicrJ1xuJy5qb2luKG1fZW50cnkubWlzc2luZykKLSAgICAgICAgICAgIHNlbGYubG9nLmRlYnVnKGxvZ21zZykKLSAgICAgICAgICAgIHNlbGYubG9nLmluZm8obXNnKQotICAgICAgICAgICAgc2VsZi5mYWlsKGxvZ21zZykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L29lbGliL2J1aWxkaGlzdG9yeS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L29lbGliL2J1aWxkaGlzdG9yeS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVkNGIwMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9vZWxpYi9idWlsZGhpc3RvcnkucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi1pbXBvcnQgb3MKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IHRlbXBmaWxlCi1mcm9tIGdpdCBpbXBvcnQgUmVwbwotZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBnZXRfYmJfdmFyCi1mcm9tIG9lLmJ1aWxkaGlzdG9yeV9hbmFseXNpcyBpbXBvcnQgYmxvYl90b19kaWN0LCBjb21wYXJlX2RpY3RfYmxvYnMKLQotY2xhc3MgVGVzdEJsb2JQYXJzaW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgaW1wb3J0IHRpbWUKLSAgICAgICAgc2VsZi5yZXBvX3BhdGggPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nc2VsZnRlc3QtYnVpbGRoaXN0b3J5JywKLSAgICAgICAgICAgIGRpcj1nZXRfYmJfdmFyKCdUT1BESVInKSkKLQotICAgICAgICBzZWxmLnJlcG8gPSBSZXBvLmluaXQoc2VsZi5yZXBvX3BhdGgpCi0gICAgICAgIHNlbGYudGVzdF9maWxlID0gInRlc3QiCi0gICAgICAgIHNlbGYudmFyX21hcCA9IHt9Ci0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIGltcG9ydCBzaHV0aWwKLSAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLnJlcG9fcGF0aCkKLQotICAgIGRlZiBjb21taXRfdmFycyhzZWxmLCB0b19hZGQ9e30sIHRvX3JlbW92ZSA9IFtdLCBtc2c9IkEgY29tbWl0IG1lc3NhZ2UiKToKLSAgICAgICAgaWYgbGVuKHRvX2FkZCkgPT0gMCBhbmQgbGVuKHRvX3JlbW92ZSkgPT0gMDoKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGZvciBrIGluIHRvX3JlbW92ZToKLSAgICAgICAgICAgIHNlbGYudmFyX21hcC5wb3AoeCxOb25lKQotICAgICAgICBmb3IgayBpbiB0b19hZGQ6Ci0gICAgICAgICAgICBzZWxmLnZhcl9tYXBba10gPSB0b19hZGRba10KLQotICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYucmVwb19wYXRoLCBzZWxmLnRlc3RfZmlsZSksICd3JykgYXMgcmVwb19maWxlOgotICAgICAgICAgICAgZm9yIGsgaW4gc2VsZi52YXJfbWFwOgotICAgICAgICAgICAgICAgIHJlcG9fZmlsZS53cml0ZSgiJXMgPSAlc1xuIiAlIChrLCBzZWxmLnZhcl9tYXBba10pKQotCi0gICAgICAgIHNlbGYucmVwby5naXQuYWRkKCItLWFsbCIpCi0gICAgICAgIHNlbGYucmVwby5naXQuY29tbWl0KG1lc3NhZ2U9bXNnKQotCi0gICAgZGVmIHRlc3RfYmxvYl90b19kaWN0KHNlbGYpOgotICAgICAgICAiIiIKLSAgICAgICAgVGVzdCBjb252ZXJ0aW9uIG9mIGdpdCBibG9icyB0byBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICB2YWx1ZXNtYXAgPSB7ICJmb28iIDogIjEiLCAiYmFyIiA6ICIyIiB9Ci0gICAgICAgIHNlbGYuY29tbWl0X3ZhcnModG9fYWRkID0gdmFsdWVzbWFwKQotCi0gICAgICAgIGJsb2IgPSBzZWxmLnJlcG8uaGVhZC5jb21taXQudHJlZS5ibG9ic1swXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc21hcCwgYmxvYl90b19kaWN0KGJsb2IpLAotICAgICAgICAgICAgImNvbW1pdCB3YXMgbm90IHRyYW5zbGF0ZWQgY29ycmVjdGx5IHRvIGRpY3Rpb25hcnkiKQotCi0gICAgZGVmIHRlc3RfY29tcGFyZV9kaWN0X2Jsb2JzKHNlbGYpOgotICAgICAgICAiIiIKLSAgICAgICAgVGVzdCBjb21wYXJpc3NvbiBvZiBkaWN0aW9uYXJpZXMgZXh0cmFjdGVkIGZyb20gZ2l0IGJsb2JzCi0gICAgICAgICIiIgotICAgICAgICBjaGFuZ2VzbWFwID0geyAiZm9vLTIiIDogKCIyIiwgIjgiKSwgImJhciIgOiAoIiIsIjQiKSwgImJhci0yIiA6ICgiIiwiNSIpfQotCi0gICAgICAgIHNlbGYuY29tbWl0X3ZhcnModG9fYWRkID0geyAiZm9vIiA6ICIxIiwgImZvby0yIiA6ICIyIiwgImZvby0zIiA6ICIzIiB9KQotICAgICAgICBibG9iMSA9IHNlbGYucmVwby5oZWFkcy5tYXN0ZXIuY29tbWl0LnRyZWUuYmxvYnNbMF0KLQotICAgICAgICBzZWxmLmNvbW1pdF92YXJzKHRvX2FkZCA9IHsgImZvby0yIiA6ICI4IiwgImJhciIgOiAiNCIsICJiYXItMiIgOiAiNSIgfSkKLSAgICAgICAgYmxvYjIgPSBzZWxmLnJlcG8uaGVhZHMubWFzdGVyLmNvbW1pdC50cmVlLmJsb2JzWzBdCi0KLSAgICAgICAgY2hhbmdlX3JlY29yZHMgPSBjb21wYXJlX2RpY3RfYmxvYnMob3MucGF0aC5qb2luKHNlbGYucmVwb19wYXRoLCBzZWxmLnRlc3RfZmlsZSksCi0gICAgICAgICAgICBibG9iMSwgYmxvYjIsIEZhbHNlLCBGYWxzZSkKLQotICAgICAgICB2YXJfY2hhbmdlcyA9IHsgeC5maWVsZG5hbWUgOiAoeC5vbGR2YWx1ZSwgeC5uZXd2YWx1ZSkgZm9yIHggaW4gY2hhbmdlX3JlY29yZHN9Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hhbmdlc21hcCwgdmFyX2NoYW5nZXMsICJDaGFuZ2VzIG5vdCByZXBvcnRlZCBjb3JyZWN0bHkiKQotCi0gICAgZGVmIHRlc3RfY29tcGFyZV9kaWN0X2Jsb2JzX2RlZmF1bHQoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBUZXN0IGRlZmF1bHQgdmFsdWVzIGZvciBjb21wYXJpc3NvbiBvZiBnaXQgYmxvYiBkaWN0aW9uYXJpZXMKLSAgICAgICAgIiIiCi0gICAgICAgIGRlZmF1bHRtYXAgPSB7IHggOiAoImRlZmF1bHQiLCAiMSIpICBmb3IgeCBpbiBbIlBLRyIsICJQS0dFIiwgIlBLR1YiLCAiUEtHUiJdfQotCi0gICAgICAgIHNlbGYuY29tbWl0X3ZhcnModG9fYWRkID0geyAiZm9vIiA6ICIxIiB9KQotICAgICAgICBibG9iMSA9IHNlbGYucmVwby5oZWFkcy5tYXN0ZXIuY29tbWl0LnRyZWUuYmxvYnNbMF0KLQotICAgICAgICBzZWxmLmNvbW1pdF92YXJzKHRvX2FkZCA9IHsgIlBLRyIgOiAiMSIsICJQS0dFIiA6ICIxIiwgIlBLR1YiIDogIjEiLCAiUEtHUiIgOiAiMSIgfSkKLSAgICAgICAgYmxvYjIgPSBzZWxmLnJlcG8uaGVhZHMubWFzdGVyLmNvbW1pdC50cmVlLmJsb2JzWzBdCi0KLSAgICAgICAgY2hhbmdlX3JlY29yZHMgPSBjb21wYXJlX2RpY3RfYmxvYnMob3MucGF0aC5qb2luKHNlbGYucmVwb19wYXRoLCBzZWxmLnRlc3RfZmlsZSksCi0gICAgICAgICAgICBibG9iMSwgYmxvYjIsIEZhbHNlLCBGYWxzZSkKLQotICAgICAgICB2YXJfY2hhbmdlcyA9IHt9Ci0gICAgICAgIGZvciB4IGluIGNoYW5nZV9yZWNvcmRzOgotICAgICAgICAgICAgb2xkdmFsdWUgPSAiZGVmYXVsdCIgaWYgKCJkZWZhdWx0IiBpbiB4Lm9sZHZhbHVlKSBlbHNlIHgub2xkdmFsdWUKLSAgICAgICAgICAgIHZhcl9jaGFuZ2VzW3guZmllbGRuYW1lXSA9IChvbGR2YWx1ZSwgeC5uZXd2YWx1ZSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlZmF1bHRtYXAsIHZhcl9jaGFuZ2VzLCAiRGVmYXVsdHMgbm90IHNldCBwcm9wZXJseSIpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9vZWxpYi9lbGYucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9vZWxpYi9lbGYucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNTkwMzcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvb2VsaWIvZWxmLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgb2UucWEKLQotY2xhc3MgVGVzdEVsZih1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RfbWFjaGluZV9uYW1lKHNlbGYpOgotICAgICAgICAiIiIKLSAgICAgICAgVGVzdCBlbGZfbWFjaGluZV90b19zdHJpbmcoKQotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZS5xYS5lbGZfbWFjaGluZV90b19zdHJpbmcoMHgwMiksICJTUEFSQyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2UucWEuZWxmX21hY2hpbmVfdG9fc3RyaW5nKDB4MDMpLCAieDg2IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZS5xYS5lbGZfbWFjaGluZV90b19zdHJpbmcoMHgwOCksICJNSVBTIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZS5xYS5lbGZfbWFjaGluZV90b19zdHJpbmcoMHgxNCksICJQb3dlclBDIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZS5xYS5lbGZfbWFjaGluZV90b19zdHJpbmcoMHgyOCksICJBUk0iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9lLnFhLmVsZl9tYWNoaW5lX3RvX3N0cmluZygweDJBKSwgIlN1cGVySCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2UucWEuZWxmX21hY2hpbmVfdG9fc3RyaW5nKDB4MzIpLCAiSUEtNjQiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9lLnFhLmVsZl9tYWNoaW5lX3RvX3N0cmluZygweDNFKSwgIng4Ni02NCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2UucWEuZWxmX21hY2hpbmVfdG9fc3RyaW5nKDB4QjcpLCAiQUFyY2g2NCIpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZS5xYS5lbGZfbWFjaGluZV90b19zdHJpbmcoMHgwMCksICJVbmtub3duICgwKSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2UucWEuZWxmX21hY2hpbmVfdG9fc3RyaW5nKDB4REVBREJFRUYpLCAiVW5rbm93biAoMzczNTkyODU1OSkiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9lLnFhLmVsZl9tYWNoaW5lX3RvX3N0cmluZygiZm9vYmFyIiksICJVbmtub3duICgnZm9vYmFyJykiKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvb2VsaWIvbGljZW5zZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L29lbGliL2xpY2Vuc2UucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzODg4ODYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvb2VsaWIvbGljZW5zZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IG9lLmxpY2Vuc2UKLQotY2xhc3MgU2VlblZpc2l0b3Iob2UubGljZW5zZS5MaWNlbnNlVmlzaXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLnNlZW4gPSBbXQotICAgICAgICBvZS5saWNlbnNlLkxpY2Vuc2VWaXNpdG9yLl9faW5pdF9fKHNlbGYpCi0KLSAgICBkZWYgdmlzaXRfU3RyKHNlbGYsIG5vZGUpOgotICAgICAgICBzZWxmLnNlZW4uYXBwZW5kKG5vZGUucykKLQotY2xhc3MgVGVzdFNpbmdsZUxpY2Vuc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGxpY2Vuc2VzID0gWwotICAgICAgICAiR1BMdjIiLAotICAgICAgICAiTEdQTC0yLjAiLAotICAgICAgICAiQXJ0aXN0aWMiLAotICAgICAgICAiTUlUIiwKLSAgICAgICAgIkdQTHYzKyIsCi0gICAgICAgICJGT09fQkFSIiwKLSAgICBdCi0gICAgaW52YWxpZF9saWNlbnNlcyA9IFsiR1BML0JTRCJdCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHBhcnNlKGxpY2Vuc2VzdHIpOgotICAgICAgICB2aXNpdG9yID0gU2VlblZpc2l0b3IoKQotICAgICAgICB2aXNpdG9yLnZpc2l0X3N0cmluZyhsaWNlbnNlc3RyKQotICAgICAgICByZXR1cm4gdmlzaXRvci5zZWVuCi0KLSAgICBkZWYgdGVzdF9zaW5nbGVfbGljZW5zZXMoc2VsZik6Ci0gICAgICAgIGZvciBsaWNlbnNlIGluIHNlbGYubGljZW5zZXM6Ci0gICAgICAgICAgICBsaWNlbnNlcyA9IHNlbGYucGFyc2UobGljZW5zZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKGxpY2Vuc2VzLCBbbGljZW5zZV0pCi0KLSAgICBkZWYgdGVzdF9pbnZhbGlkX2xpY2Vuc2VzKHNlbGYpOgotICAgICAgICBmb3IgbGljZW5zZSBpbiBzZWxmLmludmFsaWRfbGljZW5zZXM6Ci0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKG9lLmxpY2Vuc2UuSW52YWxpZExpY2Vuc2UpIGFzIGNtOgotICAgICAgICAgICAgICAgIHNlbGYucGFyc2UobGljZW5zZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmxpY2Vuc2UsIGxpY2Vuc2UpCi0KLWNsYXNzIFRlc3RTaW1wbGVDb21iaW5hdGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgotICAgIHRlc3RzID0gewotICAgICAgICAiRk9PJkJBUiI6IFsiRk9PIiwgIkJBUiJdLAotICAgICAgICAiQkFaICYgTU9PIjogWyJCQVoiLCAiTU9PIl0sCi0gICAgICAgICJBTFBIQXxCRVRBIjogWyJBTFBIQSJdLAotICAgICAgICAiQkFaJk1PT3xGT08iOiBbIkZPTyJdLAotICAgICAgICAiRk9PJkJBUnxCQVoiOiBbIkZPTyIsICJCQVIiXSwKLSAgICB9Ci0gICAgcHJlZmVycmVkID0gWyJBTFBIQSIsICJGT08iLCAiQkFSIl0KLQotICAgIGRlZiB0ZXN0X3Rlc3RzKHNlbGYpOgotICAgICAgICBkZWYgY2hvb3NlKGEsIGIpOgotICAgICAgICAgICAgaWYgYWxsKGxpYyBpbiBzZWxmLnByZWZlcnJlZCBmb3IgbGljIGluIGIpOgotICAgICAgICAgICAgICAgIHJldHVybiBiCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBhCi0KLSAgICAgICAgZm9yIGxpY2Vuc2UsIGV4cGVjdGVkIGluIHNlbGYudGVzdHMuaXRlbXMoKToKLSAgICAgICAgICAgIGxpY2Vuc2VzID0gb2UubGljZW5zZS5mbGF0dGVuZWRfbGljZW5zZXMobGljZW5zZSwgY2hvb3NlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwobGljZW5zZXMsIGV4cGVjdGVkKQotCi1jbGFzcyBUZXN0Q29tcGxleENvbWJpbmF0aW9ucyhUZXN0U2ltcGxlQ29tYmluYXRpb25zKToKLSAgICB0ZXN0cyA9IHsKLSAgICAgICAgIkZPTyAmIChCQVIgfCBCQVopJk1PTyI6IFsiRk9PIiwgIkJBUiIsICJNT08iXSwKLSAgICAgICAgIihBTFBIQXwoQkVUQSZUSEVUQSl8T01FR0EpJkRFTFRBIjogWyJPTUVHQSIsICJERUxUQSJdLAotICAgICAgICAiKChBTFBIQXxCRVRBKSZGT08pfEJBWiI6IFsiQkVUQSIsICJGT08iXSwKLSAgICAgICAgIihHUEwtMi4wfFByb3ByaWV0YXJ5KSZCU0QtNC1jbGF1c2UmTUlUIjogWyJHUEwtMi4wIiwgIkJTRC00LWNsYXVzZSIsICJNSVQiXSwKLSAgICB9Ci0gICAgcHJlZmVycmVkID0gWyJCQVIiLCAiT01FR0EiLCAiQkVUQSIsICJHUEwtMi4wIl0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L29lbGliL3BhdGgucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9vZWxpYi9wYXRoLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGQwNjgxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L29lbGliL3BhdGgucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi1pbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBvZSwgb2UucGF0aAotaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgb3MKLWltcG9ydCBlcnJubwotaW1wb3J0IHNodXRpbAotCi1jbGFzcyBUZXN0UmVhbFBhdGgodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIERJUlMgPSBbICJhIiwgImIiLCAiZXRjIiwgInNiaW4iLCAidXNyIiwgInVzci9iaW4iLCAidXNyL2JpblgiLCAidXNyL3NiaW4iLCAidXNyL2luY2x1ZGUiLCAidXNyL2luY2x1ZGUvZ2RibSIgXQotICAgIEZJTEVTID0gWyAiZXRjL3Bhc3N3ZCIsICJiL2ZpbGUiIF0KLSAgICBMSU5LUyA9IFsKLSAgICAgICAgKCAiYmluIiwgICAgICAgICAgICAgIi91c3IvYmluIiwgICAgICAgICAgICAgIi91c3IvYmluIiApLAotICAgICAgICAoICJiaW5YIiwgICAgICAgICAgICAidXNyL2JpblgiLCAgICAgICAgICAgICAiL3Vzci9iaW5YIiApLAotICAgICAgICAoICJjIiwgICAgICAgICAgICAgICAiYnJva2VuIiwgICAgICAgICAgICAgICAiL2Jyb2tlbiIgKSwKLSAgICAgICAgKCAiZXRjL3Bhc3N3ZC0xIiwgICAgInBhc3N3ZCIsICAgICAgICAgICAgICAgIi9ldGMvcGFzc3dkIiApLAotICAgICAgICAoICJldGMvcGFzc3dkLTIiLCAgICAicGFzc3dkLTEiLCAgICAgICAgICAgICAiL2V0Yy9wYXNzd2QiICksCi0gICAgICAgICggImV0Yy9wYXNzd2QtMyIsICAgICIvZXRjL3Bhc3N3ZC0xIiwgICAgICAgICIvZXRjL3Bhc3N3ZCIgKSwKLSAgICAgICAgKCAiZXRjL3NoYWRvdy0xIiwgICAgIi9ldGMvc2hhZG93IiwgICAgICAgICAgIi9ldGMvc2hhZG93IiApLAotICAgICAgICAoICJldGMvc2hhZG93LTIiLCAgICAiL2V0Yy9zaGFkb3ctMSIsICAgICAgICAiL2V0Yy9zaGFkb3ciICksCi0gICAgICAgICggInByb2ctQSIsICAgICAgICAgICJiaW4vcHJvZy1BIiwgICAgICAgICAgICIvdXNyL2Jpbi9wcm9nLUEiICksCi0gICAgICAgICggInByb2ctQiIsICAgICAgICAgICIvYmluL3Byb2ctQiIsICAgICAgICAgICIvdXNyL2Jpbi9wcm9nLUIiICksCi0gICAgICAgICggInVzci9iaW4vcHJvZy1DIiwgICIuLi8uLi9zYmluL3Byb2ctQyIsICAgICIvc2Jpbi9wcm9nLUMiICksCi0gICAgICAgICggInVzci9iaW4vcHJvZy1EIiwgICIvc2Jpbi9wcm9nLUQiLCAgICAgICAgICIvc2Jpbi9wcm9nLUQiICksCi0gICAgICAgICggInVzci9iaW5YL3Byb2ctRSIsICIuLi9zYmluL3Byb2ctRSIsICAgICAgIE5vbmUgKSwKLSAgICAgICAgKCAidXNyL2Jpbi9wcm9nLUYiLCAgIi4uLy4uLy4uL3NiaW4vcHJvZy1GIiwgIi9zYmluL3Byb2ctRiIgKSwKLSAgICAgICAgKCAibG9vcCIsICAgICAgICAgICAgImEvbG9vcCIsICAgICAgICAgICAgICAgTm9uZSApLAotICAgICAgICAoICJhL2xvb3AiLCAgICAgICAgICAiLi4vbG9vcCIsICAgICAgICAgICAgICBOb25lICksCi0gICAgICAgICggImIvdGVzdCIsICAgICAgICAgICJmaWxlL2ZvbyIsICAgICAgICAgICAgICIvYi9maWxlL2ZvbyIgKSwKLSAgICBdCi0KLSAgICBMSU5LU19QSFlTID0gWwotICAgICAgICAoICIuLyIsICAgICAgICAgICIvIiwgICAgICAgICAgICAgICAgIiIgKSwKLSAgICAgICAgKCAiYmluWC9wcm9nLUUiLCAiL3Vzci9zYmluL3Byb2ctRSIsICIvc2Jpbi9wcm9nLUUiICksCi0gICAgXQotCi0gICAgRVhDRVBUSU9OUyA9IFsKLSAgICAgICAgKCAibG9vcCIsICAgZXJybm8uRUxPT1AgKSwKLSAgICAgICAgKCAiYi90ZXN0IiwgZXJybm8uRU5PRU5UICksCi0gICAgXQotCi0gICAgZGVmIF9fZGVsX18oc2VsZik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgICNvcy5zeXN0ZW0oInRyZWUgLUYgJXMiICUgc2VsZi50bXBkaXIpCi0gICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYudG1wZGlyKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYudG1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXggPSAib2UtdGVzdF9wYXRoIikKLSAgICAgICAgc2VsZi5yb290ID0gb3MucGF0aC5qb2luKHNlbGYudG1wZGlyLCAiUiIpCi0KLSAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKHNlbGYudG1wZGlyLCAiX3JlYWwiKSkKLSAgICAgICAgb3Muc3ltbGluaygiX3JlYWwiLCBzZWxmLnJvb3QpCi0KLSAgICAgICAgZm9yIGQgaW4gc2VsZi5ESVJTOgotICAgICAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKHNlbGYucm9vdCwgZCkpCi0gICAgICAgIGZvciBmIGluIHNlbGYuRklMRVM6Ci0gICAgICAgICAgICBvcGVuKG9zLnBhdGguam9pbihzZWxmLnJvb3QsIGYpLCAidyIpCi0gICAgICAgIGZvciBsIGluIHNlbGYuTElOS1M6Ci0gICAgICAgICAgICBvcy5zeW1saW5rKGxbMV0sIG9zLnBhdGguam9pbihzZWxmLnJvb3QsIGxbMF0pKQotCi0gICAgZGVmIF9fcmVhbHBhdGgoc2VsZiwgZmlsZSwgdXNlX3BoeXNkaXIsIGFzc3VtZV9kaXIgPSBUcnVlKToKLSAgICAgICAgcmV0dXJuIG9lLnBhdGgucmVhbHBhdGgob3MucGF0aC5qb2luKHNlbGYucm9vdCwgZmlsZSksIHNlbGYucm9vdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlX3BoeXNkaXIsIGFzc3VtZV9kaXIgPSBhc3N1bWVfZGlyKQotCi0gICAgZGVmIHRlc3Rfbm9ybShzZWxmKToKLSAgICAgICAgZm9yIGwgaW4gc2VsZi5MSU5LUzoKLSAgICAgICAgICAgIGlmIGxbMl0gPT0gTm9uZToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICB0YXJnZXRfcCA9IHNlbGYuX19yZWFscGF0aChsWzBdLCBUcnVlKQotICAgICAgICAgICAgdGFyZ2V0X2wgPSBzZWxmLl9fcmVhbHBhdGgobFswXSwgRmFsc2UpCi0KLSAgICAgICAgICAgIGlmIGxbMl0gIT0gRmFsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJnZXRfcCwgdGFyZ2V0X2wpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzJdLCB0YXJnZXRfcFtsZW4oc2VsZi5yb290KTpdKQotCi0gICAgZGVmIHRlc3RfcGh5cyhzZWxmKToKLSAgICAgICAgZm9yIGwgaW4gc2VsZi5MSU5LU19QSFlTOgotICAgICAgICAgICAgdGFyZ2V0X3AgPSBzZWxmLl9fcmVhbHBhdGgobFswXSwgVHJ1ZSkKLSAgICAgICAgICAgIHRhcmdldF9sID0gc2VsZi5fX3JlYWxwYXRoKGxbMF0sIEZhbHNlKQotCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbMV0sIHRhcmdldF9wW2xlbihzZWxmLnJvb3QpOl0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbMl0sIHRhcmdldF9sW2xlbihzZWxmLnJvb3QpOl0pCi0KLSAgICBkZWYgdGVzdF9sb29wKHNlbGYpOgotICAgICAgICBmb3IgZSBpbiBzZWxmLkVYQ0VQVElPTlM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KE9TRXJyb3IsIHInXFtFcnJubyAldVxdJyAlIGVbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fcmVhbHBhdGgsIGVbMF0sIEZhbHNlLCBGYWxzZSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L29lbGliL3R5cGVzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvb2VsaWIvdHlwZXMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmZTI3NDYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvb2VsaWIvdHlwZXMucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi1pbXBvcnQgdW5pdHRlc3QKLWZyb20gb2UubWFrZXR5cGUgaW1wb3J0IGNyZWF0ZQotCi1jbGFzcyBUZXN0Qm9vbGVhblR5cGUodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X2ludmFsaWQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNyZWF0ZSwgJycsICdib29sZWFuJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY3JlYXRlLCAnZm9vJywgJ2Jvb2xlYW4nKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNyZWF0ZSwgb2JqZWN0KCksICdib29sZWFuJykKLQotICAgIGRlZiB0ZXN0X3RydWUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmVhdGUoJ3knLCAnYm9vbGVhbicpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoY3JlYXRlKCd5ZXMnLCAnYm9vbGVhbicpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoY3JlYXRlKCcxJywgJ2Jvb2xlYW4nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNyZWF0ZSgndCcsICdib29sZWFuJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmVhdGUoJ3RydWUnLCAnYm9vbGVhbicpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoY3JlYXRlKCdUUlVFJywgJ2Jvb2xlYW4nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNyZWF0ZSgndHJ1RScsICdib29sZWFuJykpCi0KLSAgICBkZWYgdGVzdF9mYWxzZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjcmVhdGUoJ24nLCAnYm9vbGVhbicpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNyZWF0ZSgnbm8nLCAnYm9vbGVhbicpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNyZWF0ZSgnMCcsICdib29sZWFuJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3JlYXRlKCdmJywgJ2Jvb2xlYW4nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjcmVhdGUoJ2ZhbHNlJywgJ2Jvb2xlYW4nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjcmVhdGUoJ0ZBTFNFJywgJ2Jvb2xlYW4nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjcmVhdGUoJ2ZhTHNlJywgJ2Jvb2xlYW4nKSkKLQotICAgIGRlZiB0ZXN0X2Jvb2xfZXF1YWxpdHkoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JlYXRlKCduJywgJ2Jvb2xlYW4nKSwgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY3JlYXRlKCduJywgJ2Jvb2xlYW4nKSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGUoJ3knLCAnYm9vbGVhbicpLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGNyZWF0ZSgneScsICdib29sZWFuJyksIEZhbHNlKQotCi1jbGFzcyBUZXN0TGlzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIGFzc2VydExpc3RFcXVhbChzZWxmLCB2YWx1ZSwgdmFsaWQsIHNlcD1Ob25lKToKLSAgICAgICAgb2JqID0gY3JlYXRlKHZhbHVlLCAnbGlzdCcsIHNlcGFyYXRvcj1zZXApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLCB2YWxpZCkKLSAgICAgICAgaWYgc2VwIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouc2VwYXJhdG9yLCBzZXApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG9iaiksIG9iai5zZXBhcmF0b3Iuam9pbihvYmopKQotCi0gICAgZGVmIHRlc3RfbGlzdF9ub3NlcChzZWxmKToKLSAgICAgICAgdGVzdGxpc3QgPSBbJ2FscGhhJywgJ2JldGEnLCAndGhldGEnXQotICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbCgnYWxwaGEgYmV0YSB0aGV0YScsIHRlc3RsaXN0KQotICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbCgnYWxwaGEgIGJldGFcdHRoZXRhJywgdGVzdGxpc3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKCdhbHBoYScsIFsnYWxwaGEnXSkKLQotICAgIGRlZiB0ZXN0X2xpc3RfdXNlcnNlcChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoJ2ZvbzpiYXInLCBbJ2ZvbycsICdiYXInXSwgJzonKQotICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbCgnZm9vOmJhcjpiYXonLCBbJ2ZvbycsICdiYXInLCAnYmF6J10sICc6JykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L29lbGliL3V0aWxzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvb2VsaWIvdXRpbHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkZWIxMGYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvb2VsaWIvdXRpbHMucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi1pbXBvcnQgdW5pdHRlc3QKLWZyb20gb2UudXRpbHMgaW1wb3J0IHBhY2thZ2VzX2ZpbHRlcl9vdXRfc3lzdGVtLCB0cmltX3ZlcnNpb24KLQotY2xhc3MgVGVzdFBhY2thZ2VzRmlsdGVyT3V0U3lzdGVtKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9maWx0ZXIoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBUZXN0IHRoYXQgb2UudXRpbHMucGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0gd29ya3MuCi0gICAgICAgICIiIgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpbXBvcnQgYmIKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiQ2Fubm90IGltcG9ydCBiYiIpCi0KLSAgICAgICAgZCA9IGJiLmRhdGFfc21hcnQuRGF0YVNtYXJ0KCkKLSAgICAgICAgZC5zZXRWYXIoIlBOIiwgImZvbyIpCi0KLSAgICAgICAgZC5zZXRWYXIoIlBBQ0tBR0VTIiwgImZvbyBmb28tZG9jIGZvby1kZXYiKQotICAgICAgICBwa2dzID0gcGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0oZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2dzLCBbXSkKLQotICAgICAgICBkLnNldFZhcigiUEFDS0FHRVMiLCAiZm9vIGZvby1kb2MgZm9vLWRhdGEgZm9vLWRldiIpCi0gICAgICAgIHBrZ3MgPSBwYWNrYWdlc19maWx0ZXJfb3V0X3N5c3RlbShkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBrZ3MsIFsiZm9vLWRhdGEiXSkKLQotICAgICAgICBkLnNldFZhcigiUEFDS0FHRVMiLCAiZm9vIGZvby1sb2NhbGUtZW4tZ2IiKQotICAgICAgICBwa2dzID0gcGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0oZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2dzLCBbXSkKLQotICAgICAgICBkLnNldFZhcigiUEFDS0FHRVMiLCAiZm9vIGZvby1kYXRhIGZvby1sb2NhbGUtZW4tZ2IiKQotICAgICAgICBwa2dzID0gcGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0oZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2dzLCBbImZvby1kYXRhIl0pCi0KLQotY2xhc3MgVGVzdFRyaW1WZXJzaW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF92ZXJzaW9uX2V4Y2VwdGlvbihzZWxmKToKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgICAgICAgdHJpbV92ZXJzaW9uKE5vbmUsIDIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIHRyaW1fdmVyc2lvbigoMSwgMiwgMyksIDIpCi0KLSAgICBkZWYgdGVzdF9udW1fZXhjZXB0aW9uKHNlbGYpOgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgdHJpbV92ZXJzaW9uKCIxLjIuMyIsIDApCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICB0cmltX3ZlcnNpb24oIjEuMi4zIiwgLTEpCi0KLSAgICBkZWYgdGVzdF92YWxpZChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmltX3ZlcnNpb24oIjEuMi4zIiwgMSksICIxIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmltX3ZlcnNpb24oIjEuMi4zIiwgMiksICIxLjIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyaW1fdmVyc2lvbigiMS4yLjMiLCAzKSwgIjEuMi4zIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmltX3ZlcnNpb24oIjEuMi4zIiwgNCksICIxLjIuMyIpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9vZXNjcmlwdHMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9vZXNjcmlwdHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5NTQ3ZjUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvb2VzY3JpcHRzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotaW1wb3J0IGRhdGV0aW1lCi1pbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBvcwotaW1wb3J0IHJlCi1pbXBvcnQgc2h1dGlsCi0KLWltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKLWZyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Ci1mcm9tIG9lcWEuc2VsZnRlc3QuYnVpbGRoaXN0b3J5IGltcG9ydCBCdWlsZGhpc3RvcnlCYXNlCi1mcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IENvbW1hbmQsIHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgZ2V0X3Rlc3RfbGF5ZXIKLWZyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQotCi1jbGFzcyBCdWlsZGhpc3RvcnlEaWZmVGVzdHMoQnVpbGRoaXN0b3J5QmFzZSk6Ci0KLSAgICBAdGVzdGNhc2UoMjk1KQotICAgIGRlZiB0ZXN0X2J1aWxkaGlzdG9yeV9kaWZmKHNlbGYpOgotICAgICAgICB0YXJnZXQgPSAneGN1cnNvci10cmFuc3BhcmVudC10aGVtZScKLSAgICAgICAgc2VsZi5ydW5fYnVpbGRoaXN0b3J5X29wZXJhdGlvbih0YXJnZXQsIHRhcmdldF9jb25maWc9IlBSID0gXCJyMVwiIiwgY2hhbmdlX2JoX2xvY2F0aW9uPVRydWUpCi0gICAgICAgIHNlbGYucnVuX2J1aWxkaGlzdG9yeV9vcGVyYXRpb24odGFyZ2V0LCB0YXJnZXRfY29uZmlnPSJQUiA9IFwicjBcIiIsIGNoYW5nZV9iaF9sb2NhdGlvbj1GYWxzZSwgZXhwZWN0X2Vycm9yPVRydWUpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgiYnVpbGRoaXN0b3J5LWRpZmYgLXAgJXMiICUgZ2V0X2JiX3ZhcignQlVJTERISVNUT1JZX0RJUicpKQotICAgICAgICBleHBlY3RlZF9vdXRwdXQgPSAnUFIgY2hhbmdlZCBmcm9tICJyMSIgdG8gInIwIicKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkX291dHB1dCBpbiByZXN1bHQub3V0cHV0LCBtc2c9IkRpZCBub3QgZmluZCBleHBlY3RlZCBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9wa2dkYXRhLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvcGtnZGF0YS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY5YzNjOC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9wa2dkYXRhLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjI3ICswLDAgQEAKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IG9zCi1pbXBvcnQgdGVtcGZpbGUKLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgZm5tYXRjaAotCi1pbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCi1mcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAotZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIGdldF9iYl92YXJzCi1mcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKLQotY2xhc3MgT2VQa2dkYXRhVXRpbFRlc3RzKG9lU2VsZlRlc3QpOgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKLSAgICAgICAgIyBFbnN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgZGF0YSBpbiBwa2dkYXRhCi0gICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJzZWxmdGVzdCIpCi0gICAgICAgIGxvZ2dlci5pbmZvKCdSdW5uaW5nIGJpdGJha2UgdG8gZ2VuZXJhdGUgcGtnZGF0YScpCi0gICAgICAgIGJpdGJha2UoJ2J1c3lib3ggemxpYiBtNCcpCi0KLSAgICBAdGVzdGNhc2UoMTIwMykKLSAgICBkZWYgdGVzdF9sb29rdXBfcGtnKHNlbGYpOgotICAgICAgICAjIEZvcndhcmQgdGVzdHMKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbG9va3VwLXBrZyAiemxpYiBidXN5Ym94IicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ2xpYnoxXG5idXN5Ym94JykKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbG9va3VwLXBrZyB6bGliLWRldicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ2xpYnotZGV2JykKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbG9va3VwLXBrZyBub25leGlzdGVudHBrZycsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc3RhdHVzLCAxLCAiU3RhdHVzIGRpZmZlcmVudCB0aGFuIDEuIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnRVJST1I6IFRoZSBmb2xsb3dpbmcgcGFja2FnZXMgY291bGQgbm90IGJlIGZvdW5kOiBub25leGlzdGVudHBrZycpCi0gICAgICAgICMgUmV2ZXJzZSB0ZXN0cwotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsb29rdXAtcGtnIC1yICJsaWJ6MSBidXN5Ym94IicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ3psaWJcbmJ1c3lib3gnKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsb29rdXAtcGtnIC1yIGxpYnotZGV2JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnemxpYi1kZXYnKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsb29rdXAtcGtnIC1yIG5vbmV4aXN0ZW50cGtnJywgaWdub3JlX3N0YXR1cz1UcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDEsICJTdGF0dXMgZGlmZmVyZW50IHRoYW4gMS4gb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdFUlJPUjogVGhlIGZvbGxvd2luZyBwYWNrYWdlcyBjb3VsZCBub3QgYmUgZm91bmQ6IG5vbmV4aXN0ZW50cGtnJykKLQotICAgIEB0ZXN0Y2FzZSgxMjA1KQotICAgIGRlZiB0ZXN0X3JlYWRfdmFsdWUoc2VsZik6Ci0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIHJlYWQtdmFsdWUgUE4gbGliejEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICd6bGliJykKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgcmVhZC12YWx1ZSBQS0cgbGliejEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdsaWJ6MScpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIHJlYWQtdmFsdWUgUEtHU0laRSBtNCcpCi0gICAgICAgIHBrZ3NpemUgPSBpbnQocmVzdWx0Lm91dHB1dC5zdHJpcCgpKQotICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIocGtnc2l6ZSwgMSwgIlNpemUgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAxLiAlcyIgJSByZXN1bHQub3V0cHV0KQotCi0gICAgQHRlc3RjYXNlKDExOTgpCi0gICAgZGVmIHRlc3RfZmluZF9wYXRoKHNlbGYpOgotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBmaW5kLXBhdGggL2xpYi9saWJ6LnNvLjEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICd6bGliOiAvbGliL2xpYnouc28uMScpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGZpbmQtcGF0aCAvdXNyL2Jpbi9tNCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ200OiAvdXNyL2Jpbi9tNCcpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGZpbmQtcGF0aCAvbm90L2V4aXN0JywgaWdub3JlX3N0YXR1cz1UcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDEsICJTdGF0dXMgZGlmZmVyZW50IHRoYW4gMS4gb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdFUlJPUjogVW5hYmxlIHRvIGZpbmQgYW55IHBhY2thZ2UgcHJvZHVjaW5nIHBhdGggL25vdC9leGlzdCcpCi0KLSAgICBAdGVzdGNhc2UoMTIwNCkKLSAgICBkZWYgdGVzdF9sb29rdXBfcmVjaXBlKHNlbGYpOgotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsb29rdXAtcmVjaXBlICJsaWJ6LXN0YXRpY2RldiBidXN5Ym94IicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ3psaWJcbmJ1c3lib3gnKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsb29rdXAtcmVjaXBlIGxpYnotZGJnJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnemxpYicpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1yZWNpcGUgbm9uZXhpc3RlbnRwa2cnLCBpZ25vcmVfc3RhdHVzPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgIlN0YXR1cyBkaWZmZXJlbnQgdGhhbiAxLiBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ0VSUk9SOiBUaGUgZm9sbG93aW5nIHBhY2thZ2VzIGNvdWxkIG5vdCBiZSBmb3VuZDogbm9uZXhpc3RlbnRwa2cnKQotCi0gICAgQHRlc3RjYXNlKDEyMDIpCi0gICAgZGVmIHRlc3RfbGlzdF9wa2dzKHNlbGYpOgotICAgICAgICAjIE5vIGFyZ3VtZW50cwotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZ3MnKQotICAgICAgICBwa2dsaXN0ID0gcmVzdWx0Lm91dHB1dC5zcGxpdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWInLCBwa2dsaXN0LCAiTGlzdGVkIHBhY2thZ2VzOiAlcyIgJSByZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWRldicsIHBrZ2xpc3QsICJMaXN0ZWQgcGFja2FnZXM6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgICMgTm8gcGtnc3BlYywgcnVudGltZQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZ3MgLXInKQotICAgICAgICBwa2dsaXN0ID0gcmVzdWx0Lm91dHB1dC5zcGxpdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZGV2JywgcGtnbGlzdCwgIkxpc3RlZCBwYWNrYWdlczogJXMiICUgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgIyBXaXRoIHJlY2lwZSBzcGVjaWZpZWQKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2dzIC1wIHpsaWInKQotICAgICAgICBwa2dsaXN0ID0gc29ydGVkKHJlc3VsdC5vdXRwdXQuc3BsaXQoKSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcGtnbGlzdC5yZW1vdmUoJ3psaWItcHRlc3QnKSAjIGluIGNhc2UgcHRlc3QgaXMgZGlzYWJsZWQKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGtnbGlzdCwgWyd6bGliJywgJ3psaWItZGJnJywgJ3psaWItZGV2JywgJ3psaWItZG9jJywgJ3psaWItc3RhdGljZGV2J10sICJQYWNrYWdlcyBsaXN0ZWQgYWZ0ZXIgcmVtb3ZlOiAlcyIgJSByZXN1bHQub3V0cHV0KQotICAgICAgICAjIFdpdGggcmVjaXBlIHNwZWNpZmllZCwgcnVudGltZQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZ3MgLXAgemxpYiAtcicpCi0gICAgICAgIHBrZ2xpc3QgPSBzb3J0ZWQocmVzdWx0Lm91dHB1dC5zcGxpdCgpKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwa2dsaXN0LnJlbW92ZSgnbGliei1wdGVzdCcpICMgaW4gY2FzZSBwdGVzdCBpcyBkaXNhYmxlZAotICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2dsaXN0LCBbJ2xpYnotZGJnJywgJ2xpYnotZGV2JywgJ2xpYnotZG9jJywgJ2xpYnotc3RhdGljZGV2JywgJ2xpYnoxJ10sICJQYWNrYWdlcyBsaXN0ZWQgYWZ0ZXIgcmVtb3ZlOiAlcyIgJSByZXN1bHQub3V0cHV0KQotICAgICAgICAjIFdpdGggcmVjaXBlIHNwZWNpZmllZCBhbmQgdW5wYWNrYWdlZAotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZ3MgLXAgemxpYiAtdScpCi0gICAgICAgIHBrZ2xpc3QgPSBzb3J0ZWQocmVzdWx0Lm91dHB1dC5zcGxpdCgpKQotICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWxvY2FsZScsIHBrZ2xpc3QsICJMaXN0ZWQgcGFja2FnZXM6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgICMgV2l0aCByZWNpcGUgc3BlY2lmaWVkIGFuZCB1bnBhY2thZ2VkLCBydW50aW1lCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtncyAtcCB6bGliIC11IC1yJykKLSAgICAgICAgcGtnbGlzdCA9IHNvcnRlZChyZXN1bHQub3V0cHV0LnNwbGl0KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotbG9jYWxlJywgcGtnbGlzdCwgIkxpc3RlZCBwYWNrYWdlczogJXMiICUgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgIyBXaXRoIHJlY2lwZSBzcGVjaWZpZWQgYW5kIHBrZ3NwZWMKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2dzIC1wIHpsaWIgIiotZCoiJykKLSAgICAgICAgcGtnbGlzdCA9IHNvcnRlZChyZXN1bHQub3V0cHV0LnNwbGl0KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGtnbGlzdCwgWyd6bGliLWRiZycsICd6bGliLWRldicsICd6bGliLWRvYyddLCAiUGFja2FnZXMgbGlzdGVkOiAlcyIgJSByZXN1bHQub3V0cHV0KQotICAgICAgICAjIFdpdGggcmVjaXBlIHNwZWNpZmllZCBhbmQgcGtnc3BlYywgcnVudGltZQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZ3MgLXAgemxpYiAtciAiKi1kKiInKQotICAgICAgICBwa2dsaXN0ID0gc29ydGVkKHJlc3VsdC5vdXRwdXQuc3BsaXQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2dsaXN0LCBbJ2xpYnotZGJnJywgJ2xpYnotZGV2JywgJ2xpYnotZG9jJ10sICJQYWNrYWdlcyBsaXN0ZWQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCi0KLSAgICBAdGVzdGNhc2UoMTIwMSkKLSAgICBkZWYgdGVzdF9saXN0X3BrZ19maWxlcyhzZWxmKToKLSAgICAgICAgZGVmIHNwbGl0b3V0cHV0KG91dHB1dCk6Ci0gICAgICAgICAgICBmaWxlcyA9IHt9Ci0gICAgICAgICAgICBjdXJwa2cgPSBOb25lCi0gICAgICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXRsaW5lcygpOgotICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnXHQnKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGN1cnBrZywgJ1VuZXhwZWN0ZWQgbm9uLXBhY2thZ2UgbGluZTpcbiVzJyAlIGxpbmUpCi0gICAgICAgICAgICAgICAgICAgIGZpbGVzW2N1cnBrZ10uYXBwZW5kKGxpbmUuc3RyaXAoKSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobGluZS5yc3RyaXAoKS5lbmRzd2l0aCgnOicpLCAnSW52YWxpZCBwYWNrYWdlIGxpbmUgaW4gb3V0cHV0OlxuJXMnICUgbGluZSkKLSAgICAgICAgICAgICAgICAgICAgY3VycGtnID0gbGluZS5zcGxpdCgnOicpWzBdCi0gICAgICAgICAgICAgICAgICAgIGZpbGVzW2N1cnBrZ10gPSBbXQotICAgICAgICAgICAgcmV0dXJuIGZpbGVzCi0gICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhbJ2Jhc2VfbGliZGlyJywgJ2xpYmRpcicsICdpbmNsdWRlZGlyJywgJ21hbmRpciddKQotICAgICAgICBiYXNlX2xpYmRpciA9IGJiX3ZhcnNbJ2Jhc2VfbGliZGlyJ10KLSAgICAgICAgbGliZGlyID0gYmJfdmFyc1snbGliZGlyJ10KLSAgICAgICAgaW5jbHVkZWRpciA9IGJiX3ZhcnNbJ2luY2x1ZGVkaXInXQotICAgICAgICBtYW5kaXIgPSBiYl92YXJzWydtYW5kaXInXQotICAgICAgICAjIFRlc3QgcmVjaXBlLXNwYWNlIHBhY2thZ2UgbmFtZQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZy1maWxlcyB6bGliLWRldiB6bGliLWRvYycpCi0gICAgICAgIGZpbGVzID0gc3BsaXRvdXRwdXQocmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kZXYnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kb2MnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4oaW5jbHVkZWRpciwgJ3psaWIuaCcpLCBmaWxlc1snemxpYi1kZXYnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obWFuZGlyLCAnbWFuMy96bGliLjMnKSwgZmlsZXNbJ3psaWItZG9jJ10pCi0gICAgICAgICMgVGVzdCBydW50aW1lIHBhY2thZ2UgbmFtZQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZy1maWxlcyAtciBsaWJ6MSBsaWJ6LWRldicpCi0gICAgICAgIGZpbGVzID0gc3BsaXRvdXRwdXQocmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignbGliejEnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1kZXYnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihmaWxlc1snbGliejEnXSksIDEpCi0gICAgICAgIGxpYnNwZWMgPSBvcy5wYXRoLmpvaW4oYmFzZV9saWJkaXIsICdsaWJ6LnNvLjEuKicpCi0gICAgICAgIGZvdW5kID0gRmFsc2UKLSAgICAgICAgZm9yIGZpbGVpdGVtIGluIGZpbGVzWydsaWJ6MSddOgotICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoY2FzZShmaWxlaXRlbSwgbGlic3BlYyk6Ci0gICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvdW5kLCAnQ291bGQgbm90IGZpbmQgemxpYiBsaWJyYXJ5IGZpbGUgJXMgaW4gbGliejEgcGFja2FnZSBmaWxlIGxpc3Q6ICVzJyAlIChsaWJzcGVjLCBmaWxlc1snbGliejEnXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGluY2x1ZGVkaXIsICd6bGliLmgnKSwgZmlsZXNbJ2xpYnotZGV2J10pCi0gICAgICAgICMgVGVzdCByZWNpcGUKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2ctZmlsZXMgLXAgemxpYicpCi0gICAgICAgIGZpbGVzID0gc3BsaXRvdXRwdXQocmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kYmcnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kb2MnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kZXYnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1zdGF0aWNkZXYnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYicsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCd6bGliLWxvY2FsZScsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQotICAgICAgICAjIChpZ25vcmUgcHRlc3QsIG1pZ2h0IG5vdCBiZSB0aGVyZSBkZXBlbmRpbmcgb24gY29uZmlnKQotICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihpbmNsdWRlZGlyLCAnemxpYi5oJyksIGZpbGVzWyd6bGliLWRldiddKQotICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihtYW5kaXIsICdtYW4zL3psaWIuMycpLCBmaWxlc1snemxpYi1kb2MnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obGliZGlyLCAnbGliei5hJyksIGZpbGVzWyd6bGliLXN0YXRpY2RldiddKQotICAgICAgICAjIFRlc3QgcmVjaXBlLCBydW50aW1lCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtnLWZpbGVzIC1wIHpsaWIgLXInKQotICAgICAgICBmaWxlcyA9IHNwbGl0b3V0cHV0KHJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZGJnJywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZG9jJywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZGV2JywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotc3RhdGljZGV2JywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnoxJywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2xpYnotbG9jYWxlJywgbGlzdChmaWxlcy5rZXlzKCkpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGluY2x1ZGVkaXIsICd6bGliLmgnKSwgZmlsZXNbJ2xpYnotZGV2J10pCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKG1hbmRpciwgJ21hbjMvemxpYi4zJyksIGZpbGVzWydsaWJ6LWRvYyddKQotICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihsaWJkaXIsICdsaWJ6LmEnKSwgZmlsZXNbJ2xpYnotc3RhdGljZGV2J10pCi0gICAgICAgICMgVGVzdCByZWNpcGUsIHVucGFja2FnZWQKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2ctZmlsZXMgLXAgemxpYiAtdScpCi0gICAgICAgIGZpbGVzID0gc3BsaXRvdXRwdXQocmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kYmcnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kb2MnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kZXYnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1zdGF0aWNkZXYnLCBsaXN0KGZpbGVzLmtleXMoKSksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYicsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWxvY2FsZScsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KSAjIHRoaXMgaXMgdGhlIGtleSBvbmUKLSAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4oaW5jbHVkZWRpciwgJ3psaWIuaCcpLCBmaWxlc1snemxpYi1kZXYnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obWFuZGlyLCAnbWFuMy96bGliLjMnKSwgZmlsZXNbJ3psaWItZG9jJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGxpYmRpciwgJ2xpYnouYScpLCBmaWxlc1snemxpYi1zdGF0aWNkZXYnXSkKLSAgICAgICAgIyBUZXN0IHJlY2lwZSwgcnVudGltZSwgdW5wYWNrYWdlZAotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZy1maWxlcyAtcCB6bGliIC1yIC11JykKLSAgICAgICAgZmlsZXMgPSBzcGxpdG91dHB1dChyZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRiZycsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRvYycsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRldicsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LXN0YXRpY2RldicsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6MScsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWxvY2FsZScsIGxpc3QoZmlsZXMua2V5cygpKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KSAjIHRoaXMgaXMgdGhlIGtleSBvbmUKLSAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4oaW5jbHVkZWRpciwgJ3psaWIuaCcpLCBmaWxlc1snbGliei1kZXYnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obWFuZGlyLCAnbWFuMy96bGliLjMnKSwgZmlsZXNbJ2xpYnotZG9jJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGxpYmRpciwgJ2xpYnouYScpLCBmaWxlc1snbGliei1zdGF0aWNkZXYnXSkKLQotICAgIEB0ZXN0Y2FzZSgxMjAwKQotICAgIGRlZiB0ZXN0X2dsb2Ioc2VsZik6Ci0gICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0ncGtnZGF0YXFhJykKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQotICAgICAgICBwa2dsaXN0ZmlsZSA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAncGtnbGlzdCcpCi0gICAgICAgIHdpdGggb3Blbihwa2dsaXN0ZmlsZSwgJ3cnKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZSgnbGliejFcbicpCi0gICAgICAgICAgICBmLndyaXRlKCdidXN5Ym94XG4nKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBnbG9iICVzICIqLWRldiInICUgcGtnbGlzdGZpbGUpCi0gICAgICAgIGRlc2lyZWRyZXN1bHQgPSBbJ2xpYnotZGV2JywgJ2J1c3lib3gtZGV2J10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQocmVzdWx0Lm91dHB1dC5zcGxpdCgpKSwgc29ydGVkKGRlc2lyZWRyZXN1bHQpKQotICAgICAgICAjIFRoZSBmb2xsb3dpbmcgc2hvdWxkIG5vdCBlcnJvciAoYmVjYXVzZSB3aGVuIHdlIHVzZSB0aGlzIGR1cmluZyByb290ZnMgY29uc3RydWN0aW9uLCBzb21ldGltZXMgdGhlIGNvbXBsZW1lbnRhcnkgcGFja2FnZSB3b24ndCBleGlzdCkKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgZ2xvYiAlcyAiKi1ub25leGlzdGVudCInICUgcGtnbGlzdGZpbGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJycpCi0gICAgICAgICMgVGVzdCBleGNsdWRlIG9wdGlvbgotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBnbG9iICVzICIqLWRldiAqLWRiZyIgLXggIl5saWJ6IicgJSBwa2dsaXN0ZmlsZSkKLSAgICAgICAgcmVzdWx0bGlzdCA9IHJlc3VsdC5vdXRwdXQuc3BsaXQoKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdsaWJ6LWRldicsIHJlc3VsdGxpc3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2xpYnotZGJnJywgcmVzdWx0bGlzdCkKLQotICAgIEB0ZXN0Y2FzZSgxMjA2KQotICAgIGRlZiB0ZXN0X3NwZWNpZnlfcGtnZGF0YWRpcihzZWxmKToKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgLXAgJXMgbG9va3VwLXBrZyB6bGliJyAlIGdldF9iYl92YXIoJ1BLR0RBVEFfRElSJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ2xpYnoxJykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3Byc2VydmljZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3Byc2VydmljZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRkNDE5Ny4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9wcnNlcnZpY2UucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgb3MKLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgcmUKLWltcG9ydCBzaHV0aWwKLWltcG9ydCBkYXRldGltZQotCi1pbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCi1mcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAotZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIKLWZyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQotZnJvbSBvZXFhLnV0aWxzLm5ldHdvcmsgaW1wb3J0IGdldF9mcmVlX3BvcnQKLQotY2xhc3MgQml0YmFrZVByVGVzdHMob2VTZWxmVGVzdCk6Ci0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgotICAgICAgICBjbHMucGtnZGF0YV9kaXIgPSBnZXRfYmJfdmFyKCdQS0dEQVRBX0RJUicpCi0KLSAgICBkZWYgZ2V0X3ByX3ZlcnNpb24oc2VsZiwgcGFja2FnZV9uYW1lKToKLSAgICAgICAgcGFja2FnZV9kYXRhX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5wa2dkYXRhX2RpciwgJ3J1bnRpbWUnLCBwYWNrYWdlX25hbWUpCi0gICAgICAgIHBhY2thZ2VfZGF0YSA9IGZ0b29scy5yZWFkX2ZpbGUocGFja2FnZV9kYXRhX2ZpbGUpCi0gICAgICAgIGZpbmRfcHIgPSByZS5zZWFyY2goIlBLR1I6IHJbMC05XStcLihbMC05XSspIiwgcGFja2FnZV9kYXRhKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluZF9wciwgIk5vIFBLRyByZXZpc2lvbiBmb3VuZCBpbiAlcyIgJSBwYWNrYWdlX2RhdGFfZmlsZSkKLSAgICAgICAgcmV0dXJuIGludChmaW5kX3ByLmdyb3VwKDEpKQotCi0gICAgZGVmIGdldF90YXNrX3N0YW1wKHNlbGYsIHBhY2thZ2VfbmFtZSwgcmVjaXBlX3Rhc2spOgotICAgICAgICBzdGFtcGRhdGEgPSBnZXRfYmJfdmFyKCdTVEFNUCcsIHRhcmdldD1wYWNrYWdlX25hbWUpLnNwbGl0KCcvJykKLSAgICAgICAgcHJlZml4ID0gc3RhbXBkYXRhWy0xXQotICAgICAgICBwYWNrYWdlX3N0YW1wc19wYXRoID0gIi8iLmpvaW4oc3RhbXBkYXRhWzotMV0pCi0gICAgICAgIHN0YW1wcyA9IFtdCi0gICAgICAgIGZvciBzdGFtcCBpbiBvcy5saXN0ZGlyKHBhY2thZ2Vfc3RhbXBzX3BhdGgpOgotICAgICAgICAgICAgZmluZF9zdGFtcCA9IHJlLm1hdGNoKCIlc1wuJXNcLihbYS16MC05XXszMn0pIiAlIChyZS5lc2NhcGUocHJlZml4KSwgcmVjaXBlX3Rhc2spLCBzdGFtcCkKLSAgICAgICAgICAgIGlmIGZpbmRfc3RhbXA6Ci0gICAgICAgICAgICAgICAgc3RhbXBzLmFwcGVuZChmaW5kX3N0YW1wLmdyb3VwKDEpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxlbihzdGFtcHMpID09IDAsIG1zZz0iQ291bmQgbm90IGZpbmQgc3RhbXAgZm9yIHRhc2sgJXMgZm9yIHJlY2lwZSAlcyIgJSAocmVjaXBlX3Rhc2ssIHBhY2thZ2VfbmFtZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGVuKHN0YW1wcykgPiAxLCBtc2c9IkZvdW5kIG11bHRpcGxlICVzIHN0YW1wcyBmb3IgdGhlICVzIHJlY2lwZSBpbiB0aGUgJXMgZGlyZWN0b3J5LiIgJSAocmVjaXBlX3Rhc2ssIHBhY2thZ2VfbmFtZSwgcGFja2FnZV9zdGFtcHNfcGF0aCkpCi0gICAgICAgIHJldHVybiBzdHIoc3RhbXBzWzBdKQotCi0gICAgZGVmIGluY3JlbWVudF9wYWNrYWdlX3ByKHNlbGYsIHBhY2thZ2VfbmFtZSk6Ci0gICAgICAgIGluY19kYXRhID0gImRvX3BhY2thZ2VfYXBwZW5kKCkge1xuICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9fdGVzdF9wcnNlcnYnLCBkKVxufVxuZG9fdGVzdF9wcnNlcnYoKSB7XG5lY2hvIFwiVGhlIGN1cnJlbnQgZGF0ZSBpczogJXNcIlxufSIgJSBkYXRldGltZS5kYXRldGltZS5ub3coKQotICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYyhwYWNrYWdlX25hbWUsIGluY19kYXRhKQotICAgICAgICByZXMgPSBiaXRiYWtlKHBhY2thZ2VfbmFtZSwgaWdub3JlX3N0YXR1cz1UcnVlKQotICAgICAgICBzZWxmLmRlbGV0ZV9yZWNpcGVpbmMocGFja2FnZV9uYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDAsIG1zZz1yZXMub3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoIk5PVEU6IFN0YXJ0ZWQgUFJTZXJ2ZXIgd2l0aCBEQmZpbGUiIGluIHJlcy5vdXRwdXQsIG1zZz1yZXMub3V0cHV0KQotCi0gICAgZGVmIGNvbmZpZ19wcl90ZXN0cyhzZWxmLCBwYWNrYWdlX25hbWUsIHBhY2thZ2VfdHlwZT0ncnBtJywgcHJfc29ja2V0PSdsb2NhbGhvc3Q6MCcpOgotICAgICAgICBjb25maWdfcGFja2FnZV9kYXRhID0gJ1BBQ0tBR0VfQ0xBU1NFUyA9ICJwYWNrYWdlXyVzIicgJSBwYWNrYWdlX3R5cGUKLSAgICAgICAgc2VsZi53cml0ZV9jb25maWcoY29uZmlnX3BhY2thZ2VfZGF0YSkKLSAgICAgICAgY29uZmlnX3NlcnZlcl9kYXRhID0gJ1BSU0VSVl9IT1NUID0gIiVzIicgJSBwcl9zb2NrZXQKLSAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGNvbmZpZ19zZXJ2ZXJfZGF0YSkKLQotICAgIGRlZiBydW5fdGVzdF9wcl9zZXJ2aWNlKHNlbGYsIHBhY2thZ2VfbmFtZSwgcGFja2FnZV90eXBlPSdycG0nLCB0cmFja190YXNrPSdkb19wYWNrYWdlJywgcHJfc29ja2V0PSdsb2NhbGhvc3Q6MCcpOgotICAgICAgICBzZWxmLmNvbmZpZ19wcl90ZXN0cyhwYWNrYWdlX25hbWUsIHBhY2thZ2VfdHlwZSwgcHJfc29ja2V0KQotCi0gICAgICAgIHNlbGYuaW5jcmVtZW50X3BhY2thZ2VfcHIocGFja2FnZV9uYW1lKQotICAgICAgICBwcl8xID0gc2VsZi5nZXRfcHJfdmVyc2lvbihwYWNrYWdlX25hbWUpCi0gICAgICAgIHN0YW1wXzEgPSBzZWxmLmdldF90YXNrX3N0YW1wKHBhY2thZ2VfbmFtZSwgdHJhY2tfdGFzaykKLQotICAgICAgICBzZWxmLmluY3JlbWVudF9wYWNrYWdlX3ByKHBhY2thZ2VfbmFtZSkKLSAgICAgICAgcHJfMiA9IHNlbGYuZ2V0X3ByX3ZlcnNpb24ocGFja2FnZV9uYW1lKQotICAgICAgICBzdGFtcF8yID0gc2VsZi5nZXRfdGFza19zdGFtcChwYWNrYWdlX25hbWUsIHRyYWNrX3Rhc2spCi0KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByXzIgLSBwcl8xID09IDEsICJTdGVwIGJldHdlZW4gc2FtZSBwa2cuIHJldmlzaW9uIGlzIGdyZWF0ZXIgdGhhbiAxIikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YW1wXzEgIT0gc3RhbXBfMiwgIkRpZmZlcmVudCBwa2cgcmV2LiBidXQgc2FtZSBzdGFtcDogJXMiICUgc3RhbXBfMSkKLQotICAgIGRlZiBydW5fdGVzdF9wcl9leHBvcnRfaW1wb3J0KHNlbGYsIHBhY2thZ2VfbmFtZSwgcmVwbGFjZV9jdXJyZW50X2RiPVRydWUpOgotICAgICAgICBzZWxmLmNvbmZpZ19wcl90ZXN0cyhwYWNrYWdlX25hbWUpCi0KLSAgICAgICAgc2VsZi5pbmNyZW1lbnRfcGFja2FnZV9wcihwYWNrYWdlX25hbWUpCi0gICAgICAgIHByXzEgPSBzZWxmLmdldF9wcl92ZXJzaW9uKHBhY2thZ2VfbmFtZSkKLQotICAgICAgICBleHBvcnRlZF9kYl9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdleHBvcnQuaW5jJykKLSAgICAgICAgZXhwb3J0X3Jlc3VsdCA9IHJ1bkNtZCgiYml0YmFrZS1wcnNlcnYtdG9vbCBleHBvcnQgJXMiICUgZXhwb3J0ZWRfZGJfcGF0aCwgaWdub3JlX3N0YXR1cz1UcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cG9ydF9yZXN1bHQuc3RhdHVzLCAwLCBtc2c9IlBSIFNlcnZpY2UgZGF0YWJhc2UgZXhwb3J0IGZhaWxlZDogJXMiICUgZXhwb3J0X3Jlc3VsdC5vdXRwdXQpCi0KLSAgICAgICAgaWYgcmVwbGFjZV9jdXJyZW50X2RiOgotICAgICAgICAgICAgY3VycmVudF9kYl9wYXRoID0gb3MucGF0aC5qb2luKGdldF9iYl92YXIoJ1BFUlNJU1RFTlRfRElSJyksICdwcnNlcnYuc3FsaXRlMycpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoY3VycmVudF9kYl9wYXRoKSwgbXNnPSJQYXRoIHRvIGN1cnJlbnQgUFIgU2VydmljZSBkYXRhYmFzZSBpcyBpbnZhbGlkOiAlcyIgJSBjdXJyZW50X2RiX3BhdGgpCi0gICAgICAgICAgICBvcy5yZW1vdmUoY3VycmVudF9kYl9wYXRoKQotCi0gICAgICAgIGltcG9ydF9yZXN1bHQgPSBydW5DbWQoImJpdGJha2UtcHJzZXJ2LXRvb2wgaW1wb3J0ICVzIiAlIGV4cG9ydGVkX2RiX3BhdGgsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKLSAgICAgICAgb3MucmVtb3ZlKGV4cG9ydGVkX2RiX3BhdGgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1wb3J0X3Jlc3VsdC5zdGF0dXMsIDAsIG1zZz0iUFIgU2VydmljZSBkYXRhYmFzZSBpbXBvcnQgZmFpbGVkOiAlcyIgJSBpbXBvcnRfcmVzdWx0Lm91dHB1dCkKLQotICAgICAgICBzZWxmLmluY3JlbWVudF9wYWNrYWdlX3ByKHBhY2thZ2VfbmFtZSkKLSAgICAgICAgcHJfMiA9IHNlbGYuZ2V0X3ByX3ZlcnNpb24ocGFja2FnZV9uYW1lKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcl8yIC0gcHJfMSA9PSAxLCAiU3RlcCBiZXR3ZWVuIHNhbWUgcGtnLiByZXZpc2lvbiBpcyBncmVhdGVyIHRoYW4gMSIpCi0KLSAgICBAdGVzdGNhc2UoOTMwKQotICAgIGRlZiB0ZXN0X2ltcG9ydF9leHBvcnRfcmVwbGFjZV9kYihzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdF9wcl9leHBvcnRfaW1wb3J0KCdtNCcpCi0KLSAgICBAdGVzdGNhc2UoOTMxKQotICAgIGRlZiB0ZXN0X2ltcG9ydF9leHBvcnRfb3ZlcnJpZGVfZGIoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3RfcHJfZXhwb3J0X2ltcG9ydCgnbTQnLCByZXBsYWNlX2N1cnJlbnRfZGI9RmFsc2UpCi0KLSAgICBAdGVzdGNhc2UoOTMyKQotICAgIGRlZiB0ZXN0X3ByX3NlcnZpY2VfcnBtX2FyY2hfZGVwKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX3NlcnZpY2UoJ200JywgJ3JwbScsICdkb19wYWNrYWdlJykKLQotICAgIEB0ZXN0Y2FzZSg5MzQpCi0gICAgZGVmIHRlc3RfcHJfc2VydmljZV9kZWJfYXJjaF9kZXAoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3RfcHJfc2VydmljZSgnbTQnLCAnZGViJywgJ2RvX3BhY2thZ2UnKQotCi0gICAgQHRlc3RjYXNlKDkzMykKLSAgICBkZWYgdGVzdF9wcl9zZXJ2aWNlX2lwa19hcmNoX2RlcChzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdF9wcl9zZXJ2aWNlKCdtNCcsICdpcGsnLCAnZG9fcGFja2FnZScpCi0KLSAgICBAdGVzdGNhc2UoOTM1KQotICAgIGRlZiB0ZXN0X3ByX3NlcnZpY2VfcnBtX2FyY2hfaW5kZXAoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3RfcHJfc2VydmljZSgneGN1cnNvci10cmFuc3BhcmVudC10aGVtZScsICdycG0nLCAnZG9fcGFja2FnZScpCi0KLSAgICBAdGVzdGNhc2UoOTM3KQotICAgIGRlZiB0ZXN0X3ByX3NlcnZpY2VfZGViX2FyY2hfaW5kZXAoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3RfcHJfc2VydmljZSgneGN1cnNvci10cmFuc3BhcmVudC10aGVtZScsICdkZWInLCAnZG9fcGFja2FnZScpCi0KLSAgICBAdGVzdGNhc2UoOTM2KQotICAgIGRlZiB0ZXN0X3ByX3NlcnZpY2VfaXBrX2FyY2hfaW5kZXAoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3RfcHJfc2VydmljZSgneGN1cnNvci10cmFuc3BhcmVudC10aGVtZScsICdpcGsnLCAnZG9fcGFja2FnZScpCi0KLSAgICBAdGVzdGNhc2UoMTQxOSkKLSAgICBkZWYgdGVzdF9zdG9wcGluZ19wcnNlcnZpY2VfbWVzc2FnZShzZWxmKToKLSAgICAgICAgcG9ydCA9IGdldF9mcmVlX3BvcnQoKQotCi0gICAgICAgIHJ1bkNtZCgnYml0YmFrZS1wcnNlcnYgLS1ob3N0IGxvY2FsaG9zdCAtLXBvcnQgJXMgLS1sb2dsZXZlbD1ERUJVRyAtLXN0YXJ0JyAlIHBvcnQpCi0gICAgICAgIHJldCA9IHJ1bkNtZCgnYml0YmFrZS1wcnNlcnYgLS1ob3N0IGxvY2FsaG9zdCAtLXBvcnQgJXMgLS1sb2dsZXZlbD1ERUJVRyAtLXN0b3AnICUgcG9ydCkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldC5zdGF0dXMsIDApCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3JlY2lwZXRvb2wucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9yZWNpcGV0b29sLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzU1YTVlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3JlY2lwZXRvb2wucHkKKysrIC9kZXYvbnVsbApAQCAtMSw2OTUgKzAsMCBAQAotaW1wb3J0IG9zCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHNodXRpbAotaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgdXJsbGliLnBhcnNlCi0KLWZyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyCi1mcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IGdldF9iYl92YXJzLCBjcmVhdGVfdGVtcF9sYXllcgotZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCi1mcm9tIG9lcWEuc2VsZnRlc3QgaW1wb3J0IGRldnRvb2wKLQotCi10ZW1wbGF5ZXJkaXIgPSBOb25lCi0KLQotZGVmIHNldFVwTW9kdWxlKCk6Ci0gICAgZ2xvYmFsIHRlbXBsYXllcmRpcgotICAgIHRlbXBsYXllcmRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdyZWNpcGV0b29scWEnKQotICAgIGNyZWF0ZV90ZW1wX2xheWVyKHRlbXBsYXllcmRpciwgJ3NlbGZ0ZXN0cmVjaXBldG9vbCcpCi0gICAgcnVuQ21kKCdiaXRiYWtlLWxheWVycyBhZGQtbGF5ZXIgJXMnICUgdGVtcGxheWVyZGlyKQotCi0KLWRlZiB0ZWFyRG93bk1vZHVsZSgpOgotICAgIHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICVzJyAlIHRlbXBsYXllcmRpciwgaWdub3JlX3N0YXR1cz1UcnVlKQotICAgIHJ1bkNtZCgncm0gLXJmICVzJyAlIHRlbXBsYXllcmRpcikKLQotCi1jbGFzcyBSZWNpcGV0b29sQmFzZShkZXZ0b29sLkRldnRvb2xCYXNlKToKLQotICAgIGRlZiBzZXRVcExvY2FsKHNlbGYpOgotICAgICAgICBzZWxmLnRlbXBsYXllcmRpciA9IHRlbXBsYXllcmRpcgotICAgICAgICBzZWxmLnRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0ncmVjaXBldG9vbHFhJykKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLnRlbXBkaXIpCi0gICAgICAgIHNlbGYudGVzdGZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAndGVzdGZpbGUnKQotICAgICAgICB3aXRoIG9wZW4oc2VsZi50ZXN0ZmlsZSwgJ3cnKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZSgnVGVzdCBmaWxlXG4nKQotCi0gICAgZGVmIHRlYXJEb3duTG9jYWwoc2VsZik6Ci0gICAgICAgIHJ1bkNtZCgncm0gLXJmICVzL3JlY2lwZXMtKicgJSBzZWxmLnRlbXBsYXllcmRpcikKLQotICAgIGRlZiBfdHJ5X3JlY2lwZXRvb2xfYXBwZW5kY21kKHNlbGYsIGNtZCwgdGVzdHJlY2lwZSwgZXhwZWN0ZWRmaWxlcywgZXhwZWN0ZWRsaW5lcz1Ob25lKToKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKGNtZCkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignVHJhY2ViYWNrJywgcmVzdWx0Lm91dHB1dCkKLQotICAgICAgICAjIENoZWNrIHRoZSBiYmFwcGVuZCB3YXMgY3JlYXRlZCBhbmQgYXBwbGllcyBwcm9wZXJseQotICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCi0gICAgICAgIGJiYXBwZW5kZmlsZSA9IHNlbGYuX2NoZWNrX2JiYXBwZW5kKHRlc3RyZWNpcGUsIHJlY2lwZWZpbGUsIHNlbGYudGVtcGxheWVyZGlyKQotCi0gICAgICAgICMgQ2hlY2sgdGhlIGJiYXBwZW5kIGNvbnRlbnRzCi0gICAgICAgIGlmIGV4cGVjdGVkbGluZXMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB3aXRoIG9wZW4oYmJhcHBlbmRmaWxlLCAncicpIGFzIGY6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpLCAiRXhwZWN0ZWQgbGluZXMgYXJlIG5vdCBwcmVzZW50IGluICVzIiAlIGJiYXBwZW5kZmlsZSkKLQotICAgICAgICAjIENoZWNrIGZpbGUgd2FzIGNvcGllZAotICAgICAgICBmaWxlc2RpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoYmJhcHBlbmRmaWxlKSwgdGVzdHJlY2lwZSkKLSAgICAgICAgZm9yIGV4cGVjdGVkZmlsZSBpbiBleHBlY3RlZGZpbGVzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihmaWxlc2RpciwgZXhwZWN0ZWRmaWxlKSksICdFeHBlY3RlZCBmaWxlICVzIHRvIGJlIGNvcGllZCBuZXh0IHRvIGJiYXBwZW5kLCBidXQgaXQgd2FzblwndCcgJSBleHBlY3RlZGZpbGUpCi0KLSAgICAgICAgIyBDaGVjayBubyBvdGhlciBmaWxlcyBjcmVhdGVkCi0gICAgICAgIGNyZWF0ZWRmaWxlcyA9IFtdCi0gICAgICAgIGZvciByb290LCBfLCBmaWxlcyBpbiBvcy53YWxrKGZpbGVzZGlyKToKLSAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgotICAgICAgICAgICAgICAgIGNyZWF0ZWRmaWxlcy5hcHBlbmQob3MucGF0aC5yZWxwYXRoKG9zLnBhdGguam9pbihyb290LCBmKSwgZmlsZXNkaXIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ydGVkKGNyZWF0ZWRmaWxlcyksIHNvcnRlZChleHBlY3RlZGZpbGVzKSkKLQotICAgICAgICByZXR1cm4gYmJhcHBlbmRmaWxlLCByZXN1bHQub3V0cHV0Ci0KLQotY2xhc3MgUmVjaXBldG9vbFRlc3RzKFJlY2lwZXRvb2xCYXNlKToKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBzZXRVcENsYXNzKGNscyk6Ci0gICAgICAgICMgRW5zdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGRhdGEgaW4gc2hsaWJzL3BrZ2RhdGEKLSAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInNlbGZ0ZXN0IikKLSAgICAgICAgbG9nZ2VyLmluZm8oJ1J1bm5pbmcgYml0YmFrZSB0byBnZW5lcmF0ZSBwa2dkYXRhJykKLSAgICAgICAgYml0YmFrZSgnLWMgcGFja2FnZWRhdGEgYmFzZS1maWxlcyBjb3JldXRpbHMgYnVzeWJveCBzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnKQotICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWydDT1JFQkFTRScsICdCQlBBVEgnXSkKLSAgICAgICAgY2xzLmNvcmViYXNlID0gYmJfdmFyc1snQ09SRUJBU0UnXQotICAgICAgICBjbHMuYmJwYXRoID0gYmJfdmFyc1snQkJQQVRIJ10KLQotICAgIGRlZiBfdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZShzZWxmLCB0ZXN0cmVjaXBlLCBkZXN0ZmlsZSwgbmV3ZmlsZSwgb3B0aW9ucywgZXhwZWN0ZWRsaW5lcywgZXhwZWN0ZWRmaWxlcyk6Ci0gICAgICAgIGNtZCA9ICdyZWNpcGV0b29sIGFwcGVuZGZpbGUgJXMgJXMgJXMgJXMnICUgKHNlbGYudGVtcGxheWVyZGlyLCBkZXN0ZmlsZSwgbmV3ZmlsZSwgb3B0aW9ucykKLSAgICAgICAgcmV0dXJuIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGNtZChjbWQsIHRlc3RyZWNpcGUsIGV4cGVjdGVkZmlsZXMsIGV4cGVjdGVkbGluZXMpCi0KLSAgICBkZWYgX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGVfZmFpbChzZWxmLCBkZXN0ZmlsZSwgbmV3ZmlsZSwgY2hlY2tlcnJvcik6Ci0gICAgICAgIGNtZCA9ICdyZWNpcGV0b29sIGFwcGVuZGZpbGUgJXMgJXMgJXMnICUgKHNlbGYudGVtcGxheWVyZGlyLCBkZXN0ZmlsZSwgbmV3ZmlsZSkKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKGNtZCwgaWdub3JlX3N0YXR1cz1UcnVlKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsICdDb21tYW5kICIlcyIgc2hvdWxkIGhhdmUgZmFpbGVkIGJ1dCBkaWRuXCd0JyAlIGNtZCkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignVHJhY2ViYWNrJywgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgZm9yIGVycm9yc3RyIGluIGNoZWNrZXJyb3I6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVycm9yc3RyLCByZXN1bHQub3V0cHV0KQotCi0gICAgQHRlc3RjYXNlKDExNzcpCi0gICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2Jhc2ljKHNlbGYpOgotICAgICAgICAjIEJhc2ljIHRlc3QKLSAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCi0gICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ2Jhc2UtZmlsZXMnLCAnL2V0Yy9tb3RkJywgc2VsZi50ZXN0ZmlsZSwgJycsIGV4cGVjdGVkbGluZXMsIFsnbW90ZCddKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCi0KLSAgICBAdGVzdGNhc2UoMTE4MykKLSAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfaW52YWxpZChzZWxmKToKLSAgICAgICAgIyBUZXN0IHNvbWUgY29tbWFuZHMgdGhhdCBzaG91bGQgZXJyb3IKLSAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9mYWlsKCcvZXRjL3Bhc3N3ZCcsIHNlbGYudGVzdGZpbGUsIFsnRVJST1I6IC9ldGMvcGFzc3dkIGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoaXMgdG9vbCcsICd1c2VyYWRkJywgJ2V4dHJhdXNlcnMnXSkKLSAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9mYWlsKCcvZXRjL3RpbWVzdGFtcCcsIHNlbGYudGVzdGZpbGUsIFsnRVJST1I6IC9ldGMvdGltZXN0YW1wIGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoaXMgdG9vbCddKQotICAgICAgICBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2ZhaWwoJy9kZXYvY29uc29sZScsIHNlbGYudGVzdGZpbGUsIFsnRVJST1I6IC9kZXYvY29uc29sZSBjYW5ub3QgYmUgaGFuZGxlZCBieSB0aGlzIHRvb2wnXSkKLQotICAgIEB0ZXN0Y2FzZSgxMTc2KQotICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9hbHRlcm5hdGl2ZXMoc2VsZik6Ci0gICAgICAgICMgTm93IHRyeSB3aXRoIGEgZmlsZSB3ZSBrbm93IHNob3VsZCBiZSBhbiBhbHRlcm5hdGl2ZQotICAgICAgICAjICh0aGlzIGlzIHZlcnkgbXVjaCBhIGZha2UgZXhhbXBsZSwgYnV0IG9uZSB3ZSBrbm93IGlzIHJlbGlhYmx5IGFuIGFsdGVybmF0aXZlKQotICAgICAgICBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2ZhaWwoJy9iaW4vbHMnLCBzZWxmLnRlc3RmaWxlLCBbJ0VSUk9SOiBGaWxlIC9iaW4vbHMgaXMgYW4gYWx0ZXJuYXRpdmUgcG9zc2libHkgcHJvdmlkZWQgYnkgdGhlIGZvbGxvd2luZyByZWNpcGVzOicsICdjb3JldXRpbHMnLCAnYnVzeWJveCddKQotICAgICAgICAjIE5lZWQgYSB0ZXN0IGZpbGUgLSBzaG91bGQgYmUgZXhlY3V0YWJsZQotICAgICAgICB0ZXN0ZmlsZTIgPSBvcy5wYXRoLmpvaW4oc2VsZi5jb3JlYmFzZSwgJ29lLWluaXQtYnVpbGQtZW52JykKLSAgICAgICAgdGVzdGZpbGUybmFtZSA9IG9zLnBhdGguYmFzZW5hbWUodGVzdGZpbGUyKQotICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly8lcyJcbicgJSB0ZXN0ZmlsZTJuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9XG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vJXMgJHtEfSR7YmFzZV9iaW5kaXJ9L2xzXG4nICUgdGVzdGZpbGUybmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KLSAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnY29yZXV0aWxzJywgJy9iaW4vbHMnLCB0ZXN0ZmlsZTIsICctciBjb3JldXRpbHMnLCBleHBlY3RlZGxpbmVzLCBbdGVzdGZpbGUybmFtZV0pCi0gICAgICAgICMgTm93IHRyeSBiYmFwcGVuZGluZyB0aGUgc2FtZSBmaWxlIGFnYWluLCBjb250ZW50cyBzaG91bGQgbm90IGNoYW5nZQotICAgICAgICBiYmFwcGVuZGZpbGUsIF8gPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdjb3JldXRpbHMnLCAnL2Jpbi9scycsIHNlbGYudGVzdGZpbGUsICctciBjb3JldXRpbHMnLCBleHBlY3RlZGxpbmVzLCBbdGVzdGZpbGUybmFtZV0pCi0gICAgICAgICMgQnV0IGZpbGUgc2hvdWxkIGhhdmUKLSAgICAgICAgY29waWVkZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoYmJhcHBlbmRmaWxlKSwgJ2NvcmV1dGlscycsIHRlc3RmaWxlMm5hbWUpCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGlmZiAtcSAlcyAlcycgJSAodGVzdGZpbGUyLCBjb3BpZWRmaWxlKSwgaWdub3JlX3N0YXR1cz1UcnVlKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsICdOZXcgZmlsZSBzaG91bGQgaGF2ZSBiZWVuIGNvcGllZCBidXQgd2FzIG5vdCAlcycgJSByZXN1bHQub3V0cHV0KQotCi0gICAgQHRlc3RjYXNlKDExNzgpCi0gICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2JpbmFyeShzZWxmKToKLSAgICAgICAgIyBUcnkgYXBwZW5kaW5nIGEgYmluYXJ5IGZpbGUKLSAgICAgICAgIyAvYmluL2xzIGNhbiBiZSBhIHN5bWxpbmsgdG8gL3Vzci9iaW4vbHMKLSAgICAgICAgbHMgPSBvcy5wYXRoLnJlYWxwYXRoKCIvYmluL2xzIikKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdyZWNpcGV0b29sIGFwcGVuZGZpbGUgJXMgL2Jpbi9scyAlcyAtciBjb3JldXRpbHMnICUgKHNlbGYudGVtcGxheWVyZGlyLCBscykpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1dBUk5JTkc6ICcsIHJlc3VsdC5vdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2lzIGEgYmluYXJ5JywgcmVzdWx0Lm91dHB1dCkKLQotICAgIEB0ZXN0Y2FzZSgxMTczKQotICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9hZGQoc2VsZik6Ci0gICAgICAgICMgVHJ5IGFyYml0cmFyeSBmaWxlIGFkZCB0byBhIHJlY2lwZQotICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly90ZXN0ZmlsZSJcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmQoKSB7XG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfVxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2RhdGFkaXJ9L3NvbWV0aGluZ1xuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KLSAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnbmV0YmFzZScsICcvdXNyL3NoYXJlL3NvbWV0aGluZycsIHNlbGYudGVzdGZpbGUsICctciBuZXRiYXNlJywgZXhwZWN0ZWRsaW5lcywgWyd0ZXN0ZmlsZSddKQotICAgICAgICAjIFRyeSBhZGRpbmcgYW5vdGhlciBmaWxlLCB0aGlzIHRpbWUgd2hlcmUgdGhlIHNvdXJjZSBmaWxlIGlzIGV4ZWN1dGFibGUKLSAgICAgICAgIyAoc28gd2UncmUgdGVzdGluZyB0aGF0LCBwbHVzIG1vZGlmeWluZyBhbiBleGlzdGluZyBiYmFwcGVuZCkKLSAgICAgICAgdGVzdGZpbGUyID0gb3MucGF0aC5qb2luKHNlbGYuY29yZWJhc2UsICdvZS1pbml0LWJ1aWxkLWVudicpCi0gICAgICAgIHRlc3RmaWxlMm5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHRlc3RmaWxlMikKLSAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUgXFxcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIGZpbGU6Ly8lcyBcXFxuJyAlIHRlc3RmaWxlMm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICJcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmQoKSB7XG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfVxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2RhdGFkaXJ9L3NvbWV0aGluZ1xuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9LyVzICR7RH0ke2RhdGFkaXJ9L3NjcmlwdG5hbWVcbicgJSB0ZXN0ZmlsZTJuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nXQotICAgICAgICBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCduZXRiYXNlJywgJy91c3Ivc2hhcmUvc2NyaXB0bmFtZScsIHRlc3RmaWxlMiwgJy1yIG5ldGJhc2UnLCBleHBlY3RlZGxpbmVzLCBbJ3Rlc3RmaWxlJywgdGVzdGZpbGUybmFtZV0pCi0KLSAgICBAdGVzdGNhc2UoMTE3NCkKLSAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfYWRkX2JpbmRpcihzZWxmKToKLSAgICAgICAgIyBUcnkgYXJiaXRyYXJ5IGZpbGUgYWRkIHRvIGEgcmVjaXBlLCB0aGlzIHRpbWUgdG8gYSBsb2NhdGlvbiBzdWNoIHRoYXQgc2hvdWxkIGJlIGluc3RhbGxlZCBhcyBleGVjdXRhYmxlCi0gICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSArPSAiZmlsZTovL3Rlc3RmaWxlIlxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdkb19pbnN0YWxsX2FwcGVuZCgpIHtcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn1cbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtiaW5kaXJ9L3NlbGZ0ZXN0LXJlY2lwZXRvb2wtdGVzdGJpblxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KLSAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnbmV0YmFzZScsICcvdXNyL2Jpbi9zZWxmdGVzdC1yZWNpcGV0b29sLXRlc3RiaW4nLCBzZWxmLnRlc3RmaWxlLCAnLXIgbmV0YmFzZScsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnXSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQotCi0gICAgQHRlc3RjYXNlKDExNzUpCi0gICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2FkZF9tYWNoaW5lKHNlbGYpOgotICAgICAgICAjIFRyeSBhcmJpdHJhcnkgZmlsZSBhZGQgdG8gYSByZWNpcGUsIHRoaXMgdGltZSB0byBhIGxvY2F0aW9uIHN1Y2ggdGhhdCBzaG91bGQgYmUgaW5zdGFsbGVkIGFzIGV4ZWN1dGFibGUKLSAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IlxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJX2FwcGVuZF9teW1hY2hpbmUgPSAiIGZpbGU6Ly90ZXN0ZmlsZSJcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmRfbXltYWNoaW5lKCkge1xuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn1cbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtkYXRhZGlyfS9zb21ldGhpbmdcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCi0gICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ25ldGJhc2UnLCAnL3Vzci9zaGFyZS9zb21ldGhpbmcnLCBzZWxmLnRlc3RmaWxlLCAnLXIgbmV0YmFzZSAtbSBteW1hY2hpbmUnLCBleHBlY3RlZGxpbmVzLCBbJ215bWFjaGluZS90ZXN0ZmlsZSddKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCi0KLSAgICBAdGVzdGNhc2UoMTE4NCkKLSAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfb3JpZyhzZWxmKToKLSAgICAgICAgIyBBIGZpbGUgdGhhdCdzIGluIFNSQ19VUkkgYW5kIGluIGRvX2luc3RhbGwgd2l0aCB0aGUgc2FtZSBuYW1lCi0gICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KLSAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLW9yaWcnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWydzZWxmdGVzdC1yZXBsYWNlbWUtb3JpZyddKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCi0KLSAgICBAdGVzdGNhc2UoMTE5MSkKLSAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfdG9kaXIoc2VsZik6Ci0gICAgICAgICMgQSBmaWxlIHRoYXQncyBpbiBTUkNfVVJJIGFuZCBpbiBkb19pbnN0YWxsIHdpdGggZGVzdGluYXRpb24gZGlyZWN0b3J5IHJhdGhlciB0aGFuIGZpbGUKLSAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQotICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtdG9kaXInLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWydzZWxmdGVzdC1yZXBsYWNlbWUtdG9kaXInXSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQotCi0gICAgQHRlc3RjYXNlKDExODcpCi0gICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX3JlbmFtZWQoc2VsZik6Ci0gICAgICAgICMgQSBmaWxlIHRoYXQncyBpbiBTUkNfVVJJIHdpdGggYSBkaWZmZXJlbnQgbmFtZSB0byB0aGUgZGVzdGluYXRpb24gZmlsZQotICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCi0gICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1yZW5hbWVkJywgc2VsZi50ZXN0ZmlsZSwgJycsIGV4cGVjdGVkbGluZXMsIFsnZmlsZTEnXSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQotCi0gICAgQHRlc3RjYXNlKDExOTApCi0gICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX3N1YmRpcihzZWxmKToKLSAgICAgICAgIyBBIGZpbGUgdGhhdCdzIGluIFNSQ19VUkkgaW4gYSBzdWJkaXIKLSAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn1cbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtc3ViZGlyXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nXQotICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtc3ViZGlyJywgc2VsZi50ZXN0ZmlsZSwgJycsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnXSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQotCi0gICAgQHRlc3RjYXNlKDExODkpCi0gICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX3NyY19nbG9iKHNlbGYpOgotICAgICAgICAjIEEgZmlsZSB0aGF0J3MgaW4gU1JDX1VSSSBhcyBhIGdsb2IKLSAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn1cbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtc3JjLWdsb2JmaWxlXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nXQotICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtc3JjLWdsb2JmaWxlJywgc2VsZi50ZXN0ZmlsZSwgJycsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnXSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQotCi0gICAgQHRlc3RjYXNlKDExODEpCi0gICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2luc3RfZ2xvYihzZWxmKToKLSAgICAgICAgIyBBIGZpbGUgdGhhdCdzIGluIGRvX2luc3RhbGwgYXMgYSBnbG9iCi0gICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KLSAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZ2xvYmZpbGUnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWydzZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1nbG9iZmlsZSddKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCi0KLSAgICBAdGVzdGNhc2UoMTE4MikKLSAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfaW5zdF90b2Rpcl9nbG9iKHNlbGYpOgotICAgICAgICAjIEEgZmlsZSB0aGF0J3MgaW4gZG9faW5zdGFsbCBhcyBhIGdsb2Igd2l0aCBkZXN0aW5hdGlvbiBhcyBhIGRpcmVjdG9yeQotICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCi0gICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LXRvZGlyLWdsb2JmaWxlJywgc2VsZi50ZXN0ZmlsZSwgJycsIGV4cGVjdGVkbGluZXMsIFsnc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtdG9kaXItZ2xvYmZpbGUnXSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQotCi0gICAgQHRlc3RjYXNlKDExODUpCi0gICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX3BhdGNoKHNlbGYpOgotICAgICAgICAjIEEgZmlsZSB0aGF0J3MgYWRkZWQgYnkgYSBwYXRjaCBpbiBTUkNfVVJJCi0gICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSArPSAiZmlsZTovL3Rlc3RmaWxlIlxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdkb19pbnN0YWxsX2FwcGVuZCgpIHtcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9XG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdGVzdGZpbGUgJHtEfSR7c3lzY29uZmRpcn0vc2VsZnRlc3QtcmVwbGFjZW1lLXBhdGNoZWRcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCi0gICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvZXRjL3NlbGZ0ZXN0LXJlcGxhY2VtZS1wYXRjaGVkJywgc2VsZi50ZXN0ZmlsZSwgJycsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnXSkKLSAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKToKLSAgICAgICAgICAgIGlmICdXQVJOSU5HOiAnIGluIGxpbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignYWRkLWZpbGUucGF0Y2gnLCBsaW5lLCAnVW5leHBlY3RlZCB3YXJuaW5nIGZvdW5kIGluIG91dHB1dDpcbiVzJyAlIGxpbmUpCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgnUGF0Y2ggd2FybmluZyBub3QgZm91bmQgaW4gb3V0cHV0OlxuJXMnICUgb3V0cHV0KQotCi0gICAgQHRlc3RjYXNlKDExODgpCi0gICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX3NjcmlwdChzZWxmKToKLSAgICAgICAgIyBOb3csIGEgZmlsZSB0aGF0J3MgaW4gU1JDX1VSSSBidXQgaW5zdGFsbGVkIGJ5IGEgc2NyaXB0IChzbyBubyBtZW50aW9uIGluIGRvX2luc3RhbGwpCi0gICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSArPSAiZmlsZTovL3Rlc3RmaWxlIlxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdkb19pbnN0YWxsX2FwcGVuZCgpIHtcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9XG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdGVzdGZpbGUgJHtEfSR7ZGF0YWRpcn0vc2VsZnRlc3QtcmVwbGFjZW1lLXNjcmlwdGVkXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nXQotICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtc2NyaXB0ZWQnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWyd0ZXN0ZmlsZSddKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCi0KLSAgICBAdGVzdGNhc2UoMTE4MCkKLSAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfaW5zdF9mdW5jKHNlbGYpOgotICAgICAgICAjIEEgZmlsZSB0aGF0J3MgaW5zdGFsbGVkIGZyb20gYSBmdW5jdGlvbiBjYWxsZWQgYnkgZG9faW5zdGFsbAotICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCi0gICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LWZ1bmMnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWydzZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1mdW5jJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKLQotICAgIEB0ZXN0Y2FzZSgxMTg2KQotICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9wb3N0aW5zdGFsbChzZWxmKToKLSAgICAgICAgIyBBIGZpbGUgdGhhdCdzIGNyZWF0ZWQgYnkgYSBwb3N0aW5zdGFsbCBzY3JpcHQgKGFuZCBleHBsaWNpdGx5IG1lbnRpb25lZCBpbiBpdCkKLSAgICAgICAgIyBGaXJzdCB0cnkgd2l0aG91dCBzcGVjaWZ5aW5nIHJlY2lwZQotICAgICAgICBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2ZhaWwoJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLXBvc3RpbnN0Jywgc2VsZi50ZXN0ZmlsZSwgWydGaWxlIC91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLXBvc3RpbnN0IG1heSBiZSB3cml0dGVuIG91dCBpbiBhIHByZS9wb3N0aW5zdGFsbCBzY3JpcHQgb2YgdGhlIGZvbGxvd2luZyByZWNpcGVzOicsICdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnXSkKLSAgICAgICAgIyBOb3cgc3BlY2lmeSByZWNpcGUKLSAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn1cbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtcG9zdGluc3RcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCi0gICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1wb3N0aW5zdCcsIHNlbGYudGVzdGZpbGUsICctciBzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCBleHBlY3RlZGxpbmVzLCBbJ3Rlc3RmaWxlJ10pCi0KLSAgICBAdGVzdGNhc2UoMTE3OSkKLSAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfZXh0bGF5ZXIoc2VsZik6Ci0gICAgICAgICMgVHJ5IGNyZWF0aW5nIGEgYmJhcHBlbmQgaW4gYSBsYXllciB0aGF0J3Mgbm90IGluIGJibGF5ZXJzLmNvbmYgYW5kIGhhcyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUKLSAgICAgICAgZXh0dGVtcGxheWVyZGlyID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ2V4dGxheWVyJykKLSAgICAgICAgc2VsZi5fY3JlYXRlX3RlbXBfbGF5ZXIoZXh0dGVtcGxheWVyZGlyLCBGYWxzZSwgJ29lc2VsZnRlc3RleHRsYXllcicsIHJlY2lwZXBhdGhzcGVjPSdtZXRhZGF0YS9yZWNpcGVzL3JlY2lwZXMtKi8qJykKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdyZWNpcGV0b29sIGFwcGVuZGZpbGUgJXMgL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtb3JpZyAlcycgJSAoZXh0dGVtcGxheWVyZGlyLCBzZWxmLnRlc3RmaWxlKSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignVHJhY2ViYWNrJywgcmVzdWx0Lm91dHB1dCkKLSAgICAgICAgY3JlYXRlZGZpbGVzID0gW10KLSAgICAgICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsoZXh0dGVtcGxheWVyZGlyKToKLSAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgotICAgICAgICAgICAgICAgIGNyZWF0ZWRmaWxlcy5hcHBlbmQob3MucGF0aC5yZWxwYXRoKG9zLnBhdGguam9pbihyb290LCBmKSwgZXh0dGVtcGxheWVyZGlyKSkKLSAgICAgICAgY3JlYXRlZGZpbGVzLnJlbW92ZSgnY29uZi9sYXllci5jb25mJykKLSAgICAgICAgZXhwZWN0ZWRmaWxlcyA9IFsnbWV0YWRhdGEvcmVjaXBlcy9yZWNpcGVzLXRlc3Qvc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlL3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZS5iYmFwcGVuZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ21ldGFkYXRhL3JlY2lwZXMvcmVjaXBlcy10ZXN0L3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZS9zZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUvc2VsZnRlc3QtcmVwbGFjZW1lLW9yaWcnXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChjcmVhdGVkZmlsZXMpLCBzb3J0ZWQoZXhwZWN0ZWRmaWxlcykpCi0KLSAgICBAdGVzdGNhc2UoMTE5MikKLSAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfd2lsZGNhcmQoc2VsZik6Ci0KLSAgICAgICAgZGVmIHRyeV9hcHBlbmRmaWxlX3djKG9wdGlvbnMpOgotICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdyZWNpcGV0b29sIGFwcGVuZGZpbGUgJXMgL2V0Yy9wcm9maWxlICVzICVzJyAlIChzZWxmLnRlbXBsYXllcmRpciwgc2VsZi50ZXN0ZmlsZSwgb3B0aW9ucykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdUcmFjZWJhY2snLCByZXN1bHQub3V0cHV0KQotICAgICAgICAgICAgYmJhcHBlbmRmaWxlID0gTm9uZQotICAgICAgICAgICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsoc2VsZi50ZW1wbGF5ZXJkaXIpOgotICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgotICAgICAgICAgICAgICAgICAgICBpZiBmLmVuZHN3aXRoKCcuYmJhcHBlbmQnKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGJiYXBwZW5kZmlsZSA9IGYKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBpZiBub3QgYmJhcHBlbmRmaWxlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnTm8gYmJhcHBlbmQgZmlsZSBjcmVhdGVkJykKLSAgICAgICAgICAgIHJ1bkNtZCgncm0gLXJmICVzL3JlY2lwZXMtKicgJSBzZWxmLnRlbXBsYXllcmRpcikKLSAgICAgICAgICAgIHJldHVybiBiYmFwcGVuZGZpbGUKLQotICAgICAgICAjIENoZWNrIHdpdGhvdXQgd2lsZGNhcmQgb3B0aW9uCi0gICAgICAgIHJlY2lwZWZuID0gb3MucGF0aC5iYXNlbmFtZShnZXRfYmJfdmFyKCdGSUxFJywgJ2Jhc2UtZmlsZXMnKSkKLSAgICAgICAgZmlsZW5hbWUgPSB0cnlfYXBwZW5kZmlsZV93YygnJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlbmFtZSwgcmVjaXBlZm4ucmVwbGFjZSgnLmJiJywgJy5iYmFwcGVuZCcpKQotICAgICAgICAjIE5vdyBjaGVjayB3aXRoIHdpbGRjYXJkIG9wdGlvbgotICAgICAgICBmaWxlbmFtZSA9IHRyeV9hcHBlbmRmaWxlX3djKCctdycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZW5hbWUsIHJlY2lwZWZuLnNwbGl0KCdfJylbMF0gKyAnXyUuYmJhcHBlbmQnKQotCi0gICAgQHRlc3RjYXNlKDExOTMpCi0gICAgZGVmIHRlc3RfcmVjaXBldG9vbF9jcmVhdGUoc2VsZik6Ci0gICAgICAgICMgVHJ5IGFkZGluZyBhIHJlY2lwZQotICAgICAgICB0ZW1wc3JjID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ3NyY3RyZWUnKQotICAgICAgICBvcy5tYWtlZGlycyh0ZW1wc3JjKQotICAgICAgICByZWNpcGVmaWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ2xvZ3JvdGF0ZV8zLjEyLjMuYmInKQotICAgICAgICBzcmN1cmkgPSAnaHR0cHM6Ly9naXRodWIuY29tL2xvZ3JvdGF0ZS9sb2dyb3RhdGUvcmVsZWFzZXMvZG93bmxvYWQvMy4xMi4zL2xvZ3JvdGF0ZS0zLjEyLjMudGFyLnh6JwotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3JlY2lwZXRvb2wgY3JlYXRlIC1vICVzICVzIC14ICVzJyAlIChyZWNpcGVmaWxlLCBzcmN1cmksIHRlbXBzcmMpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUocmVjaXBlZmlsZSkpCi0gICAgICAgIGNoZWNrdmFycyA9IHt9Ci0gICAgICAgIGNoZWNrdmFyc1snTElDRU5TRSddID0gJ0dQTHYyJwotICAgICAgICBjaGVja3ZhcnNbJ0xJQ19GSUxFU19DSEtTVU0nXSA9ICdmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMnCi0gICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSSddID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9sb2dyb3RhdGUvbG9ncm90YXRlL3JlbGVhc2VzL2Rvd25sb2FkLyR7UFZ9L2xvZ3JvdGF0ZS0ke1BWfS50YXIueHonCi0gICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSVttZDVzdW1dJ10gPSAnYTU2MGM1N2ZhYzg3YzQ1YjJmYzE3NDA2Y2RmNzkyODgnCi0gICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSVtzaGEyNTZzdW1dJ10gPSAnMmU2YTQwMWNhYzkwMjRkYjIyODgyOTdlM2JlMWE4YWI2MGU3NDAxYmE4ZTkxMjI1MjE4YWFmNGEyN2U4MmEwNycKLSAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBbXSkKLQotICAgIEB0ZXN0Y2FzZSgxMTk0KQotICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfY3JlYXRlX2dpdChzZWxmKToKLSAgICAgICAgaWYgJ3gxMScgbm90IGluIGdldF9iYl92YXIoJ0RJU1RST19GRUFUVVJFUycpOgotICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnVGVzdCByZXF1aXJlcyB4MTEgYXMgZGlzdHJvIGZlYXR1cmUnKQotICAgICAgICAjIEVuc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBkYXRhIGluIHNobGlicy9wa2dkYXRhCi0gICAgICAgIGJpdGJha2UoJ2xpYnBuZyBwYW5nbyBsaWJ4MTEgbGlieGV4dCBqcGVnIGxpYmNoZWNrJykKLSAgICAgICAgIyBUcnkgYWRkaW5nIGEgcmVjaXBlCi0gICAgICAgIHRlbXBzcmMgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAnc3JjdHJlZScpCi0gICAgICAgIG9zLm1ha2VkaXJzKHRlbXBzcmMpCi0gICAgICAgIHJlY2lwZWZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAnbGlibWF0Y2hib3guYmInKQotICAgICAgICBzcmN1cmkgPSAnZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGlibWF0Y2hib3gnCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZChbJ3JlY2lwZXRvb2wnLCAnY3JlYXRlJywgJy1vJywgcmVjaXBlZmlsZSwgc3JjdXJpICsgIjtyZXY9OWY3Y2Y4ODk1YWUyZDM5YzQ2NWMwNGNjNzhlOTE4YzE1NzQyMDI2OSIsICcteCcsIHRlbXBzcmNdKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUocmVjaXBlZmlsZSksICdyZWNpcGV0b29sIGRpZCBub3QgY3JlYXRlIHJlY2lwZSBmaWxlOyBvdXRwdXQ6XG4lcycgJSByZXN1bHQub3V0cHV0KQotICAgICAgICBjaGVja3ZhcnMgPSB7fQotICAgICAgICBjaGVja3ZhcnNbJ0xJQ0VOU0UnXSA9ICdMR1BMdjIuMScKLSAgICAgICAgY2hlY2t2YXJzWydMSUNfRklMRVNfQ0hLU1VNJ10gPSAnZmlsZTovL0NPUFlJTkc7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0JwotICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9ICcke1dPUktESVJ9L2dpdCcKLSAgICAgICAgY2hlY2t2YXJzWydQViddID0gJzEuMTErZ2l0JHtTUkNQVn0nCi0gICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSSddID0gc3JjdXJpCi0gICAgICAgIGNoZWNrdmFyc1snREVQRU5EUyddID0gc2V0KFsnbGliY2hlY2snLCAnbGlianBlZy10dXJibycsICdsaWJwbmcnLCAnbGlieDExJywgJ2xpYnhleHQnLCAncGFuZ28nXSkKLSAgICAgICAgaW5oZXJpdHMgPSBbJ2F1dG90b29scycsICdwa2djb25maWcnXQotICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIGluaGVyaXRzKQotCi0gICAgQHRlc3RjYXNlKDEzOTIpCi0gICAgZGVmIHRlc3RfcmVjaXBldG9vbF9jcmVhdGVfc2ltcGxlKHNlbGYpOgotICAgICAgICAjIFRyeSBhZGRpbmcgYSByZWNpcGUKLSAgICAgICAgdGVtcHJlY2lwZSA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICdyZWNpcGUnKQotICAgICAgICBvcy5tYWtlZGlycyh0ZW1wcmVjaXBlKQotICAgICAgICBwdiA9ICcxLjcuMy4wJwotICAgICAgICBzcmN1cmkgPSAnaHR0cDovL3d3dy5kZXN0LXVucmVhY2gub3JnL3NvY2F0L2Rvd25sb2FkL3NvY2F0LSVzLnRhci5iejInICUgcHYKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdyZWNpcGV0b29sIGNyZWF0ZSAlcyAtbyAlcycgJSAoc3JjdXJpLCB0ZW1wcmVjaXBlKSkKLSAgICAgICAgZGlybGlzdCA9IG9zLmxpc3RkaXIodGVtcHJlY2lwZSkKLSAgICAgICAgaWYgbGVuKGRpcmxpc3QpID4gMToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgncmVjaXBldG9vbCBjcmVhdGVkIG1vcmUgdGhhbiBqdXN0IG9uZSBmaWxlOyBvdXRwdXQ6XG4lc1xuZGlybGlzdDpcbiVzJyAlIChyZXN1bHQub3V0cHV0LCBzdHIoZGlybGlzdCkpKQotICAgICAgICBpZiBsZW4oZGlybGlzdCkgPCAxIG9yIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4odGVtcHJlY2lwZSwgZGlybGlzdFswXSkpOgotICAgICAgICAgICAgc2VsZi5mYWlsKCdyZWNpcGV0b29sIGRpZCBub3QgY3JlYXRlIHJlY2lwZSBmaWxlOyBvdXRwdXQ6XG4lc1xuZGlybGlzdDpcbiVzJyAlIChyZXN1bHQub3V0cHV0LCBzdHIoZGlybGlzdCkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcmxpc3RbMF0sICdzb2NhdF8lcy5iYicgJSBwdiwgJ1JlY2lwZSBmaWxlIGluY29ycmVjdGx5IG5hbWVkJykKLSAgICAgICAgY2hlY2t2YXJzID0ge30KLSAgICAgICAgY2hlY2t2YXJzWydMSUNFTlNFJ10gPSBzZXQoWydVbmtub3duJywgJ0dQTHYyJ10pCi0gICAgICAgIGNoZWNrdmFyc1snTElDX0ZJTEVTX0NIS1NVTSddID0gc2V0KFsnZmlsZTovL0NPUFlJTkcuT3BlblNTTDttZDU9NWM5YmNjYzc3ZjY3YTgzMjhlZjRlYmFmNDY4MTE2ZjQnLCAnZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzJ10pCi0gICAgICAgICMgV2UgZG9uJ3QgY2hlY2sgREVQRU5EUyBzaW5jZSB0aGV5IGFyZSB2YXJpYWJsZSBmb3IgdGhpcyByZWNpcGUgZGVwZW5kaW5nIG9uIHdoYXQncyBpbiB0aGUgc3lzcm9vdAotICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9IE5vbmUKLSAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSBzcmN1cmkucmVwbGFjZShwdiwgJyR7UFZ9JykKLSAgICAgICAgaW5oZXJpdHMgPSBbJ2F1dG90b29scyddCi0gICAgICAgIHNlbGYuX3Rlc3RfcmVjaXBlX2NvbnRlbnRzKG9zLnBhdGguam9pbih0ZW1wcmVjaXBlLCBkaXJsaXN0WzBdKSwgY2hlY2t2YXJzLCBpbmhlcml0cykKLQotICAgIEB0ZXN0Y2FzZSgxNDE4KQotICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfY3JlYXRlX2NtYWtlKHNlbGYpOgotICAgICAgICAjIFRyeSBhZGRpbmcgYSByZWNpcGUKLSAgICAgICAgdGVtcHJlY2lwZSA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICdyZWNpcGUnKQotICAgICAgICBvcy5tYWtlZGlycyh0ZW1wcmVjaXBlKQotICAgICAgICByZWNpcGVmaWxlID0gb3MucGF0aC5qb2luKHRlbXByZWNpcGUsICduYXZpdF8wLjUuMC5iYicpCi0gICAgICAgIHNyY3VyaSA9ICdodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L25hdml0L3YwLjUuMC9uYXZpdC0wLjUuMC50YXIuZ3onCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgncmVjaXBldG9vbCBjcmVhdGUgLW8gJXMgJXMnICUgKHRlbXByZWNpcGUsIHNyY3VyaSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShyZWNpcGVmaWxlKSkKLSAgICAgICAgY2hlY2t2YXJzID0ge30KLSAgICAgICAgY2hlY2t2YXJzWydMSUNFTlNFJ10gPSBzZXQoWydVbmtub3duJywgJ0dQTHYyJywgJ0xHUEx2MiddKQotICAgICAgICBjaGVja3ZhcnNbJ1NSQ19VUkknXSA9ICdodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L25hdml0L3Yke1BWfS9uYXZpdC0ke1BWfS50YXIuZ3onCi0gICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSVttZDVzdW1dJ10gPSAnMjQyZjM5OGU5NzlhNmI4YzBmM2M4MDJiNjM0MzViNjgnCi0gICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSVtzaGEyNTZzdW1dJ10gPSAnMTMzNTM0ODFkN2ZjMDFhNGY2NGUzODVkZGE0NjBiNTE0OTYzNjZiYmEwZmQyY2M4NWE4OWEwNzQ3OTEwZTk0ZCcKLSAgICAgICAgY2hlY2t2YXJzWydERVBFTkRTJ10gPSBzZXQoWydmcmVldHlwZScsICd6bGliJywgJ29wZW5zc2wnLCAnZ2xpYi0yLjAnLCAndmlydHVhbC9saWJnbCcsICd2aXJ0dWFsL2VnbCcsICdndGsrJywgJ2xpYnBuZycsICdsaWJzZGwnLCAnZnJlZWdsdXQnLCAnZGJ1cy1nbGliJ10pCi0gICAgICAgIGluaGVyaXRzID0gWydjbWFrZScsICdweXRob24tZGlyJywgJ2dldHRleHQnLCAncGtnY29uZmlnJ10KLSAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBpbmhlcml0cykKLQotICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfY3JlYXRlX2dpdGh1YihzZWxmKToKLSAgICAgICAgIyBCYXNpYyB0ZXN0IHRvIHNlZSBpZiBnaXRodWIgVVJMIG1hbmdsaW5nIHdvcmtzCi0gICAgICAgIHRlbXByZWNpcGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAncmVjaXBlJykKLSAgICAgICAgb3MubWFrZWRpcnModGVtcHJlY2lwZSkKLSAgICAgICAgcmVjaXBlZmlsZSA9IG9zLnBhdGguam9pbih0ZW1wcmVjaXBlLCAnbWVzb25fZ2l0LmJiJykKLSAgICAgICAgc3JjdXJpID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9tZXNvbmJ1aWxkL21lc29uO3Jldj0wLjMyLjAnCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZChbJ3JlY2lwZXRvb2wnLCAnY3JlYXRlJywgJy1vJywgdGVtcHJlY2lwZSwgc3JjdXJpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHJlY2lwZWZpbGUpKQotICAgICAgICBjaGVja3ZhcnMgPSB7fQotICAgICAgICBjaGVja3ZhcnNbJ0xJQ0VOU0UnXSA9IHNldChbJ0FwYWNoZS0yLjAnXSkKLSAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSAnZ2l0Oi8vZ2l0aHViLmNvbS9tZXNvbmJ1aWxkL21lc29uO3Byb3RvY29sPWh0dHBzJwotICAgICAgICBpbmhlcml0cyA9IFsnc2V0dXB0b29scyddCi0gICAgICAgIHNlbGYuX3Rlc3RfcmVjaXBlX2NvbnRlbnRzKHJlY2lwZWZpbGUsIGNoZWNrdmFycywgaW5oZXJpdHMpCi0KLSAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2NyZWF0ZV9naXRodWJfdGFyYmFsbChzZWxmKToKLSAgICAgICAgIyBCYXNpYyB0ZXN0IHRvIGVuc3VyZSBnaXRodWIgVVJMIG1hbmdsaW5nIGRvZXNuJ3QgYXBwbHkgdG8gcmVsZWFzZSB0YXJiYWxscwotICAgICAgICB0ZW1wcmVjaXBlID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ3JlY2lwZScpCi0gICAgICAgIG9zLm1ha2VkaXJzKHRlbXByZWNpcGUpCi0gICAgICAgIHB2ID0gJzAuMzIuMCcKLSAgICAgICAgcmVjaXBlZmlsZSA9IG9zLnBhdGguam9pbih0ZW1wcmVjaXBlLCAnbWVzb25fJXMuYmInICUgcHYpCi0gICAgICAgIHNyY3VyaSA9ICdodHRwczovL2dpdGh1Yi5jb20vbWVzb25idWlsZC9tZXNvbi9yZWxlYXNlcy9kb3dubG9hZC8lcy9tZXNvbi0lcy50YXIuZ3onICUgKHB2LCBwdikKLSAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdyZWNpcGV0b29sIGNyZWF0ZSAtbyAlcyAlcycgJSAodGVtcHJlY2lwZSwgc3JjdXJpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHJlY2lwZWZpbGUpKQotICAgICAgICBjaGVja3ZhcnMgPSB7fQotICAgICAgICBjaGVja3ZhcnNbJ0xJQ0VOU0UnXSA9IHNldChbJ0FwYWNoZS0yLjAnXSkKLSAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSAnaHR0cHM6Ly9naXRodWIuY29tL21lc29uYnVpbGQvbWVzb24vcmVsZWFzZXMvZG93bmxvYWQvJHtQVn0vbWVzb24tJHtQVn0udGFyLmd6JwotICAgICAgICBpbmhlcml0cyA9IFsnc2V0dXB0b29scyddCi0gICAgICAgIHNlbGYuX3Rlc3RfcmVjaXBlX2NvbnRlbnRzKHJlY2lwZWZpbGUsIGNoZWNrdmFycywgaW5oZXJpdHMpCi0KLSAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2NyZWF0ZV9naXRfaHR0cChzZWxmKToKLSAgICAgICAgIyBCYXNpYyB0ZXN0IHRvIGNoZWNrIGh0dHAgZ2l0IFVSTCBtYW5nbGluZyB3b3JrcwotICAgICAgICB0ZW1wcmVjaXBlID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ3JlY2lwZScpCi0gICAgICAgIG9zLm1ha2VkaXJzKHRlbXByZWNpcGUpCi0gICAgICAgIHJlY2lwZWZpbGUgPSBvcy5wYXRoLmpvaW4odGVtcHJlY2lwZSwgJ21hdGNoYm94LXRlcm1pbmFsX2dpdC5iYicpCi0gICAgICAgIHNyY3VyaSA9ICdodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvZ2l0L21hdGNoYm94LXRlcm1pbmFsJwotICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3JlY2lwZXRvb2wgY3JlYXRlIC1vICVzICVzJyAlICh0ZW1wcmVjaXBlLCBzcmN1cmkpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUocmVjaXBlZmlsZSkpCi0gICAgICAgIGNoZWNrdmFycyA9IHt9Ci0gICAgICAgIGNoZWNrdmFyc1snTElDRU5TRSddID0gc2V0KFsnR1BMdjInXSkKLSAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSAnZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvZ2l0L21hdGNoYm94LXRlcm1pbmFsO3Byb3RvY29sPWh0dHAnCi0gICAgICAgIGluaGVyaXRzID0gWydwa2djb25maWcnLCAnYXV0b3Rvb2xzJ10KLSAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBpbmhlcml0cykKLQotICAgIGRlZiBfY29weV9maWxlX3dpdGhfY2xlYW51cChzZWxmLCBzcmNmaWxlLCBiYXNlZHN0ZGlyLCAqcGF0aHMpOgotICAgICAgICBkc3RkaXIgPSBiYXNlZHN0ZGlyCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhkc3RkaXIpKQotICAgICAgICBmb3IgcCBpbiBwYXRoczoKLSAgICAgICAgICAgIGRzdGRpciA9IG9zLnBhdGguam9pbihkc3RkaXIsIHApCi0gICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZHN0ZGlyKToKLSAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhkc3RkaXIpCi0gICAgICAgICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChkc3RkaXIpCi0gICAgICAgIGRzdGZpbGUgPSBvcy5wYXRoLmpvaW4oZHN0ZGlyLCBvcy5wYXRoLmJhc2VuYW1lKHNyY2ZpbGUpKQotICAgICAgICBpZiBzcmNmaWxlICE9IGRzdGZpbGU6Ci0gICAgICAgICAgICBzaHV0aWwuY29weShzcmNmaWxlLCBkc3RmaWxlKQotICAgICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChkc3RmaWxlKQotCi0gICAgZGVmIHRlc3RfcmVjaXBldG9vbF9sb2FkX3BsdWdpbihzZWxmKToKLSAgICAgICAgIiIiVGVzdCB0aGF0IHJlY2lwZXRvb2wgbG9hZHMgb25seSB0aGUgZmlyc3QgZm91bmQgcGx1Z2luIGluIEJCUEFUSC4iIiIKLQotICAgICAgICByZWNpcGV0b29sID0gcnVuQ21kKCJ3aGljaCByZWNpcGV0b29sIikKLSAgICAgICAgZnJvbW5hbWUgPSBydW5DbWQoInJlY2lwZXRvb2wgLS1xdWlldCBwbHVnaW5maWxlIikKLSAgICAgICAgc3JjZmlsZSA9IGZyb21uYW1lLm91dHB1dAotICAgICAgICBzZWFyY2hwYXRoID0gc2VsZi5iYnBhdGguc3BsaXQoJzonKSArIFtvcy5wYXRoLmRpcm5hbWUocmVjaXBldG9vbC5vdXRwdXQpXQotICAgICAgICBwbHVnaW5jb250ZW50ID0gW10KLSAgICAgICAgd2l0aCBvcGVuKHNyY2ZpbGUpIGFzIGZoOgotICAgICAgICAgICAgcGx1Z2luY29udGVudCA9IGZoLnJlYWRsaW5lcygpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ21ldGEtc2VsZnRlc3QnLCBzcmNmaWxlLCAnd3JvbmcgYmJwYXRoIHBsdWdpbiBmb3VuZCcpCi0gICAgICAgICAgICBmb3IgcGF0aCBpbiBzZWFyY2hwYXRoOgotICAgICAgICAgICAgICAgIHNlbGYuX2NvcHlfZmlsZV93aXRoX2NsZWFudXAoc3JjZmlsZSwgcGF0aCwgJ2xpYicsICdyZWNpcGV0b29sJykKLSAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgicmVjaXBldG9vbCAtLXF1aWV0IGNvdW50IikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJzEnKQotICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJyZWNpcGV0b29sIC0tcXVpZXQgbXVsdGlsb2FkZWQiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAibm8iKQotICAgICAgICAgICAgZm9yIHBhdGggaW4gc2VhcmNocGF0aDoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoInJlY2lwZXRvb2wgLS1xdWlldCBiYmRpciIpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCBwYXRoKQotICAgICAgICAgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4ocmVzdWx0Lm91dHB1dCwgJ2xpYicsICdyZWNpcGV0b29sJywgJ2JicGF0aC5weScpKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgd2l0aCBvcGVuKHNyY2ZpbGUsICd3JykgYXMgZmg6Ci0gICAgICAgICAgICAgICAgZmgud3JpdGVsaW5lcyhwbHVnaW5jb250ZW50KQotCi0KLWNsYXNzIFJlY2lwZXRvb2xBcHBlbmRzcmNCYXNlKFJlY2lwZXRvb2xCYXNlKToKLSAgICBkZWYgX3RyeV9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGUoc2VsZiwgdGVzdHJlY2lwZSwgbmV3ZmlsZSwgZGVzdGZpbGUsIG9wdGlvbnMsIGV4cGVjdGVkbGluZXMsIGV4cGVjdGVkZmlsZXMpOgotICAgICAgICBjbWQgPSAncmVjaXBldG9vbCBhcHBlbmRzcmNmaWxlICVzICVzICVzICVzICVzJyAlIChvcHRpb25zLCBzZWxmLnRlbXBsYXllcmRpciwgdGVzdHJlY2lwZSwgbmV3ZmlsZSwgZGVzdGZpbGUpCi0gICAgICAgIHJldHVybiBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRjbWQoY21kLCB0ZXN0cmVjaXBlLCBleHBlY3RlZGZpbGVzLCBleHBlY3RlZGxpbmVzKQotCi0gICAgZGVmIF90cnlfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlcyhzZWxmLCB0ZXN0cmVjaXBlLCBuZXdmaWxlcywgZXhwZWN0ZWRsaW5lcz1Ob25lLCBleHBlY3RlZGZpbGVzPU5vbmUsIGRlc3RkaXI9Tm9uZSwgb3B0aW9ucz0nJyk6Ci0KLSAgICAgICAgaWYgZGVzdGRpcjoKLSAgICAgICAgICAgIG9wdGlvbnMgKz0gJyAtRCAlcycgJSBkZXN0ZGlyCi0KLSAgICAgICAgaWYgZXhwZWN0ZWRmaWxlcyBpcyBOb25lOgotICAgICAgICAgICAgZXhwZWN0ZWRmaWxlcyA9IFtvcy5wYXRoLmJhc2VuYW1lKGYpIGZvciBmIGluIG5ld2ZpbGVzXQotCi0gICAgICAgIGNtZCA9ICdyZWNpcGV0b29sIGFwcGVuZHNyY2ZpbGVzICVzICVzICVzICVzJyAlIChvcHRpb25zLCBzZWxmLnRlbXBsYXllcmRpciwgdGVzdHJlY2lwZSwgJyAnLmpvaW4obmV3ZmlsZXMpKQotICAgICAgICByZXR1cm4gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kY21kKGNtZCwgdGVzdHJlY2lwZSwgZXhwZWN0ZWRmaWxlcywgZXhwZWN0ZWRsaW5lcykKLQotICAgIGRlZiBfdHJ5X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZV9mYWlsKHNlbGYsIHRlc3RyZWNpcGUsIG5ld2ZpbGUsIGRlc3RmaWxlLCBjaGVja2Vycm9yKToKLSAgICAgICAgY21kID0gJ3JlY2lwZXRvb2wgYXBwZW5kc3JjZmlsZSAlcyAlcyAlcyAlcycgJSAoc2VsZi50ZW1wbGF5ZXJkaXIsIHRlc3RyZWNpcGUsIG5ld2ZpbGUsIGRlc3RmaWxlIG9yICcnKQotICAgICAgICByZXN1bHQgPSBydW5DbWQoY21kLCBpZ25vcmVfc3RhdHVzPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0LnN0YXR1cywgMCwgJ0NvbW1hbmQgIiVzIiBzaG91bGQgaGF2ZSBmYWlsZWQgYnV0IGRpZG5cJ3QnICUgY21kKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdUcmFjZWJhY2snLCByZXN1bHQub3V0cHV0KQotICAgICAgICBmb3IgZXJyb3JzdHIgaW4gY2hlY2tlcnJvcjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXJyb3JzdHIsIHJlc3VsdC5vdXRwdXQpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9nZXRfZmlyc3RfZmlsZV91cmkocmVjaXBlKToKLSAgICAgICAgJycnUmV0dXJuIHRoZSBmaXJzdCBmaWxlOi8vIGluIFNSQ19VUkkgZm9yIHRoZSBzcGVjaWZpZWQgcmVjaXBlLicnJwotICAgICAgICBzcmNfdXJpID0gZ2V0X2JiX3ZhcignU1JDX1VSSScsIHJlY2lwZSkuc3BsaXQoKQotICAgICAgICBmb3IgdXJpIGluIHNyY191cmk6Ci0gICAgICAgICAgICBwID0gdXJsbGliLnBhcnNlLnVybHBhcnNlKHVyaSkKLSAgICAgICAgICAgIGlmIHAuc2NoZW1lID09ICdmaWxlJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gcC5uZXRsb2MgKyBwLnBhdGgKLQotICAgIGRlZiBfdGVzdF9hcHBlbmRzcmNmaWxlKHNlbGYsIHRlc3RyZWNpcGUsIGZpbGVuYW1lPU5vbmUsIGRlc3RkaXI9Tm9uZSwgaGFzX3NyY191cmk9VHJ1ZSwgc3JjZGlyPU5vbmUsIG5ld2ZpbGU9Tm9uZSwgb3B0aW9ucz0nJyk6Ci0gICAgICAgIGlmIG5ld2ZpbGUgaXMgTm9uZToKLSAgICAgICAgICAgIG5ld2ZpbGUgPSBzZWxmLnRlc3RmaWxlCi0KLSAgICAgICAgaWYgc3JjZGlyOgotICAgICAgICAgICAgaWYgZGVzdGRpcjoKLSAgICAgICAgICAgICAgICBleHBlY3RlZF9zdWJkaXIgPSBvcy5wYXRoLmpvaW4oc3JjZGlyLCBkZXN0ZGlyKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBleHBlY3RlZF9zdWJkaXIgPSBzcmNkaXIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG9wdGlvbnMgKz0gIiAtVyIKLSAgICAgICAgICAgIGV4cGVjdGVkX3N1YmRpciA9IGRlc3RkaXIKLQotICAgICAgICBpZiBmaWxlbmFtZToKLSAgICAgICAgICAgIGlmIGRlc3RkaXI6Ci0gICAgICAgICAgICAgICAgZGVzdHBhdGggPSBvcy5wYXRoLmpvaW4oZGVzdGRpciwgZmlsZW5hbWUpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGRlc3RwYXRoID0gZmlsZW5hbWUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShuZXdmaWxlKQotICAgICAgICAgICAgaWYgZGVzdGRpcjoKLSAgICAgICAgICAgICAgICBkZXN0cGF0aCA9IGRlc3RkaXIgKyBvcy5zZXAKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZGVzdHBhdGggPSAnLicgKyBvcy5zZXAKLQotICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCi0gICAgICAgIGlmIGhhc19zcmNfdXJpOgotICAgICAgICAgICAgdXJpID0gJ2ZpbGU6Ly8lcycgJSBmaWxlbmFtZQotICAgICAgICAgICAgaWYgZXhwZWN0ZWRfc3ViZGlyOgotICAgICAgICAgICAgICAgIHVyaSArPSAnO3N1YmRpcj0lcycgJSBleHBlY3RlZF9zdWJkaXIKLSAgICAgICAgICAgIGV4cGVjdGVkbGluZXNbMDowXSA9IFsnU1JDX1VSSSArPSAiJXMiXG4nICUgdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCi0KLSAgICAgICAgcmV0dXJuIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGUodGVzdHJlY2lwZSwgbmV3ZmlsZSwgZGVzdHBhdGgsIG9wdGlvbnMsIGV4cGVjdGVkbGluZXMsIFtmaWxlbmFtZV0pCi0KLSAgICBkZWYgX3Rlc3RfYXBwZW5kc3JjZmlsZXMoc2VsZiwgdGVzdHJlY2lwZSwgbmV3ZmlsZXMsIGV4cGVjdGVkZmlsZXM9Tm9uZSwgZGVzdGRpcj1Ob25lLCBvcHRpb25zPScnKToKLSAgICAgICAgaWYgZXhwZWN0ZWRmaWxlcyBpcyBOb25lOgotICAgICAgICAgICAgZXhwZWN0ZWRmaWxlcyA9IFtvcy5wYXRoLmJhc2VuYW1lKG4pIGZvciBuIGluIG5ld2ZpbGVzXQotCi0gICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVzKHRlc3RyZWNpcGUsIG5ld2ZpbGVzLCBleHBlY3RlZGZpbGVzPWV4cGVjdGVkZmlsZXMsIGRlc3RkaXI9ZGVzdGRpciwgb3B0aW9ucz1vcHRpb25zKQotCi0gICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhbJ1NSQ19VUkknLCAnRklMRScsICdGSUxFU0VYVFJBUEFUSFMnXSwgdGVzdHJlY2lwZSkKLSAgICAgICAgc3JjX3VyaSA9IGJiX3ZhcnNbJ1NSQ19VUkknXS5zcGxpdCgpCi0gICAgICAgIGZvciBmIGluIGV4cGVjdGVkZmlsZXM6Ci0gICAgICAgICAgICBpZiBkZXN0ZGlyOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ZpbGU6Ly8lcztzdWJkaXI9JXMnICUgKGYsIGRlc3RkaXIpLCBzcmNfdXJpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdmaWxlOi8vJXMnICUgZiwgc3JjX3VyaSkKLQotICAgICAgICByZWNpcGVmaWxlID0gYmJfdmFyc1snRklMRSddCi0gICAgICAgIGJiYXBwZW5kZmlsZSA9IHNlbGYuX2NoZWNrX2JiYXBwZW5kKHRlc3RyZWNpcGUsIHJlY2lwZWZpbGUsIHNlbGYudGVtcGxheWVyZGlyKQotICAgICAgICBmaWxlc2RpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoYmJhcHBlbmRmaWxlKSwgdGVzdHJlY2lwZSkKLSAgICAgICAgZmlsZXNleHRyYXBhdGhzID0gYmJfdmFyc1snRklMRVNFWFRSQVBBVEhTJ10uc3BsaXQoJzonKQotICAgICAgICBzZWxmLmFzc2VydEluKGZpbGVzZGlyLCBmaWxlc2V4dHJhcGF0aHMpCi0KLQotCi0KLWNsYXNzIFJlY2lwZXRvb2xBcHBlbmRzcmNUZXN0cyhSZWNpcGV0b29sQXBwZW5kc3JjQmFzZSk6Ci0KLSAgICBAdGVzdGNhc2UoMTI3MykKLSAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfYmFzaWMoc2VsZik6Ci0gICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSgnYmFzZS1maWxlcycsICdhLWZpbGUnKQotCi0gICAgQHRlc3RjYXNlKDEyNzQpCi0gICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlX2Jhc2ljX3dpbGRjYXJkKHNlbGYpOgotICAgICAgICB0ZXN0cmVjaXBlID0gJ2Jhc2UtZmlsZXMnCi0gICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSh0ZXN0cmVjaXBlLCAnYS1maWxlJywgb3B0aW9ucz0nLXcnKQotICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCi0gICAgICAgIGJiYXBwZW5kZmlsZSA9IHNlbGYuX2NoZWNrX2JiYXBwZW5kKHRlc3RyZWNpcGUsIHJlY2lwZWZpbGUsIHNlbGYudGVtcGxheWVyZGlyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYmFzZW5hbWUoYmJhcHBlbmRmaWxlKSwgJyVzXyUlLmJiYXBwZW5kJyAlIHRlc3RyZWNpcGUpCi0KLSAgICBAdGVzdGNhc2UoMTI4MSkKLSAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfc3ViZGlyX2Jhc2ljKHNlbGYpOgotICAgICAgICBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGUoJ2Jhc2UtZmlsZXMnLCAnYS1maWxlJywgJ3RtcCcpCi0KLSAgICBAdGVzdGNhc2UoMTI4MikKLSAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfc3ViZGlyX2Jhc2ljX2RpcmRlc3Qoc2VsZik6Ci0gICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSgnYmFzZS1maWxlcycsIGRlc3RkaXI9J3RtcCcpCi0KLSAgICBAdGVzdGNhc2UoMTI4MCkKLSAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfc3JjZGlyX2Jhc2ljKHNlbGYpOgotICAgICAgICB0ZXN0cmVjaXBlID0gJ2Jhc2gnCi0gICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhbJ1MnLCAnV09SS0RJUiddLCB0ZXN0cmVjaXBlKQotICAgICAgICBzcmNkaXIgPSBiYl92YXJzWydTJ10KLSAgICAgICAgd29ya2RpciA9IGJiX3ZhcnNbJ1dPUktESVInXQotICAgICAgICBzdWJkaXIgPSBvcy5wYXRoLnJlbHBhdGgoc3JjZGlyLCB3b3JrZGlyKQotICAgICAgICBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGUodGVzdHJlY2lwZSwgJ2EtZmlsZScsIHNyY2Rpcj1zdWJkaXIpCi0KLSAgICBAdGVzdGNhc2UoMTI3NSkKLSAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfZXhpc3RpbmdfaW5fc3JjX3VyaShzZWxmKToKLSAgICAgICAgdGVzdHJlY2lwZSA9ICdiYXNlLWZpbGVzJwotICAgICAgICBmaWxlcGF0aCA9IHNlbGYuX2dldF9maXJzdF9maWxlX3VyaSh0ZXN0cmVjaXBlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZXBhdGgsICdVbmFibGUgdG8gdGVzdCwgbm8gZmlsZTovLyB1cmkgZm91bmQgaW4gU1JDX1VSSSBmb3IgJXMnICUgdGVzdHJlY2lwZSkKLSAgICAgICAgc2VsZi5fdGVzdF9hcHBlbmRzcmNmaWxlKHRlc3RyZWNpcGUsIGZpbGVwYXRoLCBoYXNfc3JjX3VyaT1GYWxzZSkKLQotICAgIEB0ZXN0Y2FzZSgxMjc2KQotICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZV9leGlzdGluZ19pbl9zcmNfdXJpX2RpZmZfcGFyYW1zKHNlbGYpOgotICAgICAgICB0ZXN0cmVjaXBlID0gJ2Jhc2UtZmlsZXMnCi0gICAgICAgIHN1YmRpciA9ICd0bXAnCi0gICAgICAgIGZpbGVwYXRoID0gc2VsZi5fZ2V0X2ZpcnN0X2ZpbGVfdXJpKHRlc3RyZWNpcGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlcGF0aCwgJ1VuYWJsZSB0byB0ZXN0LCBubyBmaWxlOi8vIHVyaSBmb3VuZCBpbiBTUkNfVVJJIGZvciAlcycgJSB0ZXN0cmVjaXBlKQotCi0gICAgICAgIG91dHB1dCA9IHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSh0ZXN0cmVjaXBlLCBmaWxlcGF0aCwgc3ViZGlyLCBoYXNfc3JjX3VyaT1GYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueSgnd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVycycgaW4gbCBmb3IgbCBpbiBvdXRwdXQpKQotCi0gICAgQHRlc3RjYXNlKDEyNzcpCi0gICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlX3JlcGxhY2VfZmlsZV9zcmNkaXIoc2VsZik6Ci0gICAgICAgIHRlc3RyZWNpcGUgPSAnYmFzaCcKLSAgICAgICAgZmlsZXBhdGggPSAnTWFrZWZpbGUuaW4nCi0gICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhbJ1MnLCAnV09SS0RJUiddLCB0ZXN0cmVjaXBlKQotICAgICAgICBzcmNkaXIgPSBiYl92YXJzWydTJ10KLSAgICAgICAgd29ya2RpciA9IGJiX3ZhcnNbJ1dPUktESVInXQotICAgICAgICBzdWJkaXIgPSBvcy5wYXRoLnJlbHBhdGgoc3JjZGlyLCB3b3JrZGlyKQotCi0gICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSh0ZXN0cmVjaXBlLCBmaWxlcGF0aCwgc3JjZGlyPXN1YmRpcikKLSAgICAgICAgYml0YmFrZSgnJXM6ZG9fdW5wYWNrJyAlIHRlc3RyZWNpcGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlbihzZWxmLnRlc3RmaWxlLCAncicpLnJlYWQoKSwgb3Blbihvcy5wYXRoLmpvaW4oc3JjZGlyLCBmaWxlcGF0aCksICdyJykucmVhZCgpKQotCi0gICAgQHRlc3RjYXNlKDEyNzgpCi0gICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlc19iYXNpYyhzZWxmLCBkZXN0ZGlyPU5vbmUpOgotICAgICAgICBuZXdmaWxlcyA9IFtzZWxmLnRlc3RmaWxlXQotICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCA1KToKLSAgICAgICAgICAgIHRlc3RmaWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ3Rlc3RmaWxlJWQnICUgaSkKLSAgICAgICAgICAgIHdpdGggb3Blbih0ZXN0ZmlsZSwgJ3cnKSBhcyBmOgotICAgICAgICAgICAgICAgIGYud3JpdGUoJ1Rlc3QgZmlsZSAlZFxuJyAlIGkpCi0gICAgICAgICAgICBuZXdmaWxlcy5hcHBlbmQodGVzdGZpbGUpCi0gICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZXMoJ2djYycsIG5ld2ZpbGVzLCBkZXN0ZGlyPWRlc3RkaXIsIG9wdGlvbnM9Jy1XJykKLQotICAgIEB0ZXN0Y2FzZSgxMjc5KQotICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZXNfYmFzaWNfc3ViZGlyKHNlbGYpOgotICAgICAgICBzZWxmLnRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlc19iYXNpYyhkZXN0ZGlyPSd0ZXN0ZGlyJykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3J1bnFlbXUucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9ydW5xZW11LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGM2Zjk2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3J1bnFlbXUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotIwotIyBDb3B5cmlnaHQgKGMpIDIwMTcgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCi0jCi0KLWltcG9ydCByZQotaW1wb3J0IGxvZ2dpbmcKLQotZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKLWZyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgYml0YmFrZSwgcnVucWVtdSwgZ2V0X2JiX3ZhcgotZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCi0KLWNsYXNzIFJ1bnFlbXVUZXN0cyhvZVNlbGZUZXN0KToKLSAgICAiIiJSdW5xZW11IHRlc3QgY2xhc3MiIiIKLQotICAgIGltYWdlX2lzX3JlYWR5ID0gRmFsc2UKLSAgICBkZXBsb3lfZGlyX2ltYWdlID0gJycKLQotICAgIGRlZiBzZXRVcExvY2FsKHNlbGYpOgotICAgICAgICBzZWxmLnJlY2lwZSA9ICdjb3JlLWltYWdlLW1pbmltYWwnCi0gICAgICAgIHNlbGYubWFjaGluZSA9ICAncWVtdXg4Ni02NCcKLSAgICAgICAgc2VsZi5mc3R5cGVzID0gImV4dDQgaXNvIGhkZGltZyB2bWRrIHFjb3cyIHZkaSIKLSAgICAgICAgc2VsZi5jbWRfY29tbW9uID0gInJ1bnFlbXUgbm9ncmFwaGljIgotCi0gICAgICAgICMgQXZvaWQgZW1pdCB0aGUgc2FtZSByZWNvcmQgbXVsdGlwbGUgdGltZXMuCi0gICAgICAgIG1haW5sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5NYWluIikKLSAgICAgICAgbWFpbmxvZ2dlci5wcm9wYWdhdGUgPSBGYWxzZQotCi0gICAgICAgIHNlbGYud3JpdGVfY29uZmlnKAotIiIiCi1NQUNISU5FID0gIiVzIgotSU1BR0VfRlNUWVBFUyA9ICIlcyIKLSMgMTAgbWVhbnMgMSBzZWNvbmQKLVNZU0xJTlVYX1RJTUVPVVQgPSAiMTAiCi0iIiIKLSUgKHNlbGYubWFjaGluZSwgc2VsZi5mc3R5cGVzKQotICAgICAgICApCi0KLSAgICAgICAgaWYgbm90IFJ1bnFlbXVUZXN0cy5pbWFnZV9pc19yZWFkeToKLSAgICAgICAgICAgIFJ1bnFlbXVUZXN0cy5kZXBsb3lfZGlyX2ltYWdlID0gZ2V0X2JiX3ZhcignREVQTE9ZX0RJUl9JTUFHRScpCi0gICAgICAgICAgICBiaXRiYWtlKHNlbGYucmVjaXBlKQotICAgICAgICAgICAgUnVucWVtdVRlc3RzLmltYWdlX2lzX3JlYWR5ID0gVHJ1ZQotCi0gICAgQHRlc3RjYXNlKDIwMDEpCi0gICAgZGVmIHRlc3RfYm9vdF9tYWNoaW5lKHNlbGYpOgotICAgICAgICAiIiJUZXN0IHJ1bnFlbXUgbWFjaGluZSIiIgotICAgICAgICBjbWQgPSAiJXMgJXMiICUgKHNlbGYuY21kX2NvbW1vbiwgc2VsZi5tYWNoaW5lKQotICAgICAgICB3aXRoIHJ1bnFlbXUoc2VsZi5yZWNpcGUsIHNzaD1GYWxzZSwgbGF1bmNoX2NtZD1jbWQpIGFzIHFlbXU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocWVtdS5ydW5uZXIubG9nZ2VkLCAiRmFpbGVkOiAlcyIgJSBjbWQpCi0KLSAgICBAdGVzdGNhc2UoMjAwMikKLSAgICBkZWYgdGVzdF9ib290X21hY2hpbmVfZXh0NChzZWxmKToKLSAgICAgICAgIiIiVGVzdCBydW5xZW11IG1hY2hpbmUgZXh0NCIiIgotICAgICAgICBjbWQgPSAiJXMgJXMgZXh0NCIgJSAoc2VsZi5jbWRfY29tbW9uLCBzZWxmLm1hY2hpbmUpCi0gICAgICAgIHdpdGggcnVucWVtdShzZWxmLnJlY2lwZSwgc3NoPUZhbHNlLCBsYXVuY2hfY21kPWNtZCkgYXMgcWVtdToKLSAgICAgICAgICAgIHdpdGggb3BlbihxZW11LnFlbXVydW5uZXJsb2cpIGFzIGY6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdyb290ZnMuZXh0NCcgaW4gZi5yZWFkKCksICJGYWlsZWQ6ICVzIiAlIGNtZCkKLQotICAgIEB0ZXN0Y2FzZSgyMDAzKQotICAgIGRlZiB0ZXN0X2Jvb3RfbWFjaGluZV9pc28oc2VsZik6Ci0gICAgICAgICIiIlRlc3QgcnVucWVtdSBtYWNoaW5lIGlzbyIiIgotICAgICAgICBjbWQgPSAiJXMgJXMgaXNvIiAlIChzZWxmLmNtZF9jb21tb24sIHNlbGYubWFjaGluZSkKLSAgICAgICAgd2l0aCBydW5xZW11KHNlbGYucmVjaXBlLCBzc2g9RmFsc2UsIGxhdW5jaF9jbWQ9Y21kKSBhcyBxZW11OgotICAgICAgICAgICAgd2l0aCBvcGVuKHFlbXUucWVtdXJ1bm5lcmxvZykgYXMgZjoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJyAtY2Ryb20gJyBpbiBmLnJlYWQoKSwgIkZhaWxlZDogJXMiICUgY21kKQotCi0gICAgQHRlc3RjYXNlKDIwMDQpCi0gICAgZGVmIHRlc3RfYm9vdF9yZWNpcGVfaW1hZ2Uoc2VsZik6Ci0gICAgICAgICIiIlRlc3QgcnVucWVtdSByZWNpcGUtaW1hZ2UiIiIKLSAgICAgICAgY21kID0gIiVzICVzIiAlIChzZWxmLmNtZF9jb21tb24sIHNlbGYucmVjaXBlKQotICAgICAgICB3aXRoIHJ1bnFlbXUoc2VsZi5yZWNpcGUsIHNzaD1GYWxzZSwgbGF1bmNoX2NtZD1jbWQpIGFzIHFlbXU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocWVtdS5ydW5uZXIubG9nZ2VkLCAiRmFpbGVkOiAlcyIgJSBjbWQpCi0KLSAgICBAdGVzdGNhc2UoMjAwNSkKLSAgICBkZWYgdGVzdF9ib290X3JlY2lwZV9pbWFnZV92bWRrKHNlbGYpOgotICAgICAgICAiIiJUZXN0IHJ1bnFlbXUgcmVjaXBlLWltYWdlIHZtZGsiIiIKLSAgICAgICAgY21kID0gIiVzICVzIHZtZGsiICUgKHNlbGYuY21kX2NvbW1vbiwgc2VsZi5yZWNpcGUpCi0gICAgICAgIHdpdGggcnVucWVtdShzZWxmLnJlY2lwZSwgc3NoPUZhbHNlLCBsYXVuY2hfY21kPWNtZCkgYXMgcWVtdToKLSAgICAgICAgICAgIHdpdGggb3BlbihxZW11LnFlbXVydW5uZXJsb2cpIGFzIGY6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdmb3JtYXQ9dm1kaycgaW4gZi5yZWFkKCksICJGYWlsZWQ6ICVzIiAlIGNtZCkKLQotICAgIEB0ZXN0Y2FzZSgyMDA2KQotICAgIGRlZiB0ZXN0X2Jvb3RfcmVjaXBlX2ltYWdlX3ZkaShzZWxmKToKLSAgICAgICAgIiIiVGVzdCBydW5xZW11IHJlY2lwZS1pbWFnZSB2ZGkiIiIKLSAgICAgICAgY21kID0gIiVzICVzIHZkaSIgJSAoc2VsZi5jbWRfY29tbW9uLCBzZWxmLnJlY2lwZSkKLSAgICAgICAgd2l0aCBydW5xZW11KHNlbGYucmVjaXBlLCBzc2g9RmFsc2UsIGxhdW5jaF9jbWQ9Y21kKSBhcyBxZW11OgotICAgICAgICAgICAgd2l0aCBvcGVuKHFlbXUucWVtdXJ1bm5lcmxvZykgYXMgZjoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2Zvcm1hdD12ZGknIGluIGYucmVhZCgpLCAiRmFpbGVkOiAlcyIgJSBjbWQpCi0KLSAgICBAdGVzdGNhc2UoMjAwNykKLSAgICBkZWYgdGVzdF9ib290X2RlcGxveShzZWxmKToKLSAgICAgICAgIiIiVGVzdCBydW5xZW11IGRlcGxveV9kaXJfaW1hZ2UiIiIKLSAgICAgICAgY21kID0gIiVzICVzIiAlIChzZWxmLmNtZF9jb21tb24sIHNlbGYuZGVwbG95X2Rpcl9pbWFnZSkKLSAgICAgICAgd2l0aCBydW5xZW11KHNlbGYucmVjaXBlLCBzc2g9RmFsc2UsIGxhdW5jaF9jbWQ9Y21kKSBhcyBxZW11OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHFlbXUucnVubmVyLmxvZ2dlZCwgIkZhaWxlZDogJXMiICUgY21kKQotCi0gICAgQHRlc3RjYXNlKDIwMDgpCi0gICAgZGVmIHRlc3RfYm9vdF9kZXBsb3lfaGRkaW1nKHNlbGYpOgotICAgICAgICAiIiJUZXN0IHJ1bnFlbXUgZGVwbG95X2Rpcl9pbWFnZSBoZGRpbWciIiIKLSAgICAgICAgY21kID0gIiVzICVzIGhkZGltZyIgJSAoc2VsZi5jbWRfY29tbW9uLCBzZWxmLmRlcGxveV9kaXJfaW1hZ2UpCi0gICAgICAgIHdpdGggcnVucWVtdShzZWxmLnJlY2lwZSwgc3NoPUZhbHNlLCBsYXVuY2hfY21kPWNtZCkgYXMgcWVtdToKLSAgICAgICAgICAgIHdpdGggb3BlbihxZW11LnFlbXVydW5uZXJsb2cpIGFzIGY6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLnNlYXJjaCgnZmlsZT0uKi5oZGRpbWcnLCBmLnJlYWQoKSksICJGYWlsZWQ6ICVzIiAlIGNtZCkKLQotICAgIEB0ZXN0Y2FzZSgyMDA5KQotICAgIGRlZiB0ZXN0X2Jvb3RfbWFjaGluZV9zbGlycChzZWxmKToKLSAgICAgICAgIiIiVGVzdCBydW5xZW11IG1hY2hpbmUgc2xpcnAiIiIKLSAgICAgICAgY21kID0gIiVzIHNsaXJwICVzIiAlIChzZWxmLmNtZF9jb21tb24sIHNlbGYubWFjaGluZSkKLSAgICAgICAgd2l0aCBydW5xZW11KHNlbGYucmVjaXBlLCBzc2g9RmFsc2UsIGxhdW5jaF9jbWQ9Y21kKSBhcyBxZW11OgotICAgICAgICAgICAgd2l0aCBvcGVuKHFlbXUucWVtdXJ1bm5lcmxvZykgYXMgZjoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJyAtbmV0ZGV2IHVzZXInIGluIGYucmVhZCgpLCAiRmFpbGVkOiAlcyIgJSBjbWQpCi0KLSAgICBAdGVzdGNhc2UoMjAwOSkKLSAgICBkZWYgdGVzdF9ib290X21hY2hpbmVfc2xpcnBfcWNvdzIoc2VsZik6Ci0gICAgICAgICIiIlRlc3QgcnVucWVtdSBtYWNoaW5lIHNsaXJwIHFjb3cyIiIiCi0gICAgICAgIGNtZCA9ICIlcyBzbGlycCBxY293MiAlcyIgJSAoc2VsZi5jbWRfY29tbW9uLCBzZWxmLm1hY2hpbmUpCi0gICAgICAgIHdpdGggcnVucWVtdShzZWxmLnJlY2lwZSwgc3NoPUZhbHNlLCBsYXVuY2hfY21kPWNtZCkgYXMgcWVtdToKLSAgICAgICAgICAgIHdpdGggb3BlbihxZW11LnFlbXVydW5uZXJsb2cpIGFzIGY6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdmb3JtYXQ9cWNvdzInIGluIGYucmVhZCgpLCAiRmFpbGVkOiAlcyIgJSBjbWQpCi0KLSAgICBAdGVzdGNhc2UoMjAxMCkKLSAgICBkZWYgdGVzdF9ib290X3FlbXVfYm9vdChzZWxmKToKLSAgICAgICAgIiIiVGVzdCBydW5xZW11IC9wYXRoL3RvL2ltYWdlLnFlbXVib290LmNvbmYiIiIKLSAgICAgICAgcWVtdWJvb3RfY29uZiA9ICIlcy0lcy5xZW11Ym9vdC5jb25mIiAlIChzZWxmLnJlY2lwZSwgc2VsZi5tYWNoaW5lKQotICAgICAgICBxZW11Ym9vdF9jb25mID0gb3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2Rpcl9pbWFnZSwgcWVtdWJvb3RfY29uZikKLSAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHFlbXVib290X2NvbmYpOgotICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiJXMgbm90IGZvdW5kIiAlIHFlbXVib290X2NvbmYpCi0gICAgICAgIGNtZCA9ICIlcyAlcyIgJSAoc2VsZi5jbWRfY29tbW9uLCBxZW11Ym9vdF9jb25mKQotICAgICAgICB3aXRoIHJ1bnFlbXUoc2VsZi5yZWNpcGUsIHNzaD1GYWxzZSwgbGF1bmNoX2NtZD1jbWQpIGFzIHFlbXU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocWVtdS5ydW5uZXIubG9nZ2VkLCAiRmFpbGVkOiAlcyIgJSBjbWQpCi0KLSAgICBAdGVzdGNhc2UoMjAxMSkKLSAgICBkZWYgdGVzdF9ib290X3Jvb3RmcyhzZWxmKToKLSAgICAgICAgIiIiVGVzdCBydW5xZW11IC9wYXRoL3RvL3Jvb3Rmcy5leHQ0IiIiCi0gICAgICAgIHJvb3RmcyA9ICIlcy0lcy5leHQ0IiAlIChzZWxmLnJlY2lwZSwgc2VsZi5tYWNoaW5lKQotICAgICAgICByb290ZnMgPSBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyX2ltYWdlLCByb290ZnMpCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhyb290ZnMpOgotICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiJXMgbm90IGZvdW5kIiAlIHJvb3RmcykKLSAgICAgICAgY21kID0gIiVzICVzIiAlIChzZWxmLmNtZF9jb21tb24sIHJvb3RmcykKLSAgICAgICAgd2l0aCBydW5xZW11KHNlbGYucmVjaXBlLCBzc2g9RmFsc2UsIGxhdW5jaF9jbWQ9Y21kKSBhcyBxZW11OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHFlbXUucnVubmVyLmxvZ2dlZCwgIkZhaWxlZDogJXMiICUgY21kKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvcnVudGltZS10ZXN0LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvcnVudGltZS10ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDk4ZDA0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3J1bnRpbWUtdGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDIzNyArMCwwIEBACi1mcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAotZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIGdldF9iYl92YXJzLCBydW5xZW11Ci1mcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKLWltcG9ydCBvcwotaW1wb3J0IHJlCi0KLWNsYXNzIFRlc3RFeHBvcnQob2VTZWxmVGVzdCk6Ci0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgotICAgICAgICBydW5DbWQoInJtIC1yZiAvdG1wL3NkayIpCi0KLSAgICBkZWYgdGVzdF90ZXN0ZXhwb3J0X2Jhc2ljKHNlbGYpOgotICAgICAgICAiIiIKLSAgICAgICAgU3VtbWFyeTogQ2hlY2sgYmFzaWMgdGVzdGV4cG9ydCBmdW5jdGlvbmFsaXR5IHdpdGggb25seSBwaW5nIHRlc3QgZW5hYmxlZC4KLSAgICAgICAgRXhwZWN0ZWQ6IDEuIHRlc3RleHBvcnQgZGlyZWN0b3J5IG11c3QgYmUgY3JlYXRlZC4KLSAgICAgICAgICAgICAgICAgIDIuIHJ1bmV4cG9ydGVkLnB5IG11c3QgcnVuIHdpdGhvdXQgYW55IGVycm9yL2V4Y2VwdGlvbi4KLSAgICAgICAgICAgICAgICAgIDMuIHBpbmcgdGVzdCBtdXN0IHN1Y2NlZWQuCi0gICAgICAgIFByb2R1Y3Q6IG9lLWNvcmUKLSAgICAgICAgQXV0aG9yOiBNYXJpYW5vIExvcGV6IDxtYXJpYW5vLmxvcGV6QGludGVsLmNvbT4KLSAgICAgICAgIiIiCi0KLSAgICAgICAgZmVhdHVyZXMgPSAnSU5IRVJJVCArPSAidGVzdGV4cG9ydCJcbicKLSAgICAgICAgIyBUaGVzZSBhcmVuJ3QgdGhlIGFjdHVhbCBJUCBhZGRyZXNzZXMgYnV0IHRlc3RleHBvcnQgY2xhc3MgbmVlZHMgc29tZXRoaW5nIGRlZmluZWQKLSAgICAgICAgZmVhdHVyZXMgKz0gJ1RFU1RfU0VSVkVSX0lQID0gIjE5Mi4xNjguNy4xIlxuJwotICAgICAgICBmZWF0dXJlcyArPSAnVEVTVF9UQVJHRVRfSVAgPSAiMTkyLjE2OC43LjEiXG4nCi0gICAgICAgIGZlYXR1cmVzICs9ICdURVNUX1NVSVRFUyA9ICJwaW5nIlxuJwotICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhmZWF0dXJlcykKLQotICAgICAgICAjIEJ1aWxkIHRlc2V4cG9ydCBmb3IgY29yZS1pbWFnZS1taW5pbWFsCi0gICAgICAgIGJpdGJha2UoJ2NvcmUtaW1hZ2UtbWluaW1hbCcpCi0gICAgICAgIGJpdGJha2UoJy1jIHRlc3RleHBvcnQgY29yZS1pbWFnZS1taW5pbWFsJykKLQotICAgICAgICB0ZXN0ZXhwb3J0X2RpciA9IGdldF9iYl92YXIoJ1RFU1RfRVhQT1JUX0RJUicsICdjb3JlLWltYWdlLW1pbmltYWwnKQotCi0gICAgICAgICMgVmVyaWZ5IGlmIFRFU1RfRVhQT1JUX0RJUiB3YXMgY3JlYXRlZAotICAgICAgICBpc2RpciA9IG9zLnBhdGguaXNkaXIodGVzdGV4cG9ydF9kaXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXNkaXIsICdGYWlsZWQgdG8gY3JlYXRlIHRlc3RleHBvcnQgZGlyOiAlcycgJSB0ZXN0ZXhwb3J0X2RpcikKLQotICAgICAgICB3aXRoIHJ1bnFlbXUoJ2NvcmUtaW1hZ2UtbWluaW1hbCcpIGFzIHFlbXU6Ci0gICAgICAgICAgICAjIEF0dGVtcHQgdG8gcnVuIHJ1bmV4cG9ydGVkLnB5IHRvIHBlcmZvcm0gcGluZyB0ZXN0Ci0gICAgICAgICAgICB0ZXN0X3BhdGggPSBvcy5wYXRoLmpvaW4odGVzdGV4cG9ydF9kaXIsICJvZS10ZXN0IikKLSAgICAgICAgICAgIGRhdGFfZmlsZSA9IG9zLnBhdGguam9pbih0ZXN0ZXhwb3J0X2RpciwgJ2RhdGEnLCAndGVzdGRhdGEuanNvbicpCi0gICAgICAgICAgICBtYW5pZmVzdCA9IG9zLnBhdGguam9pbih0ZXN0ZXhwb3J0X2RpciwgJ2RhdGEnLCAnbWFuaWZlc3QnKQotICAgICAgICAgICAgY21kID0gKCIlcyBydW50aW1lIC0tdGVzdC1kYXRhLWZpbGUgJXMgLS1wYWNrYWdlcy1tYW5pZmVzdCAlcyAiCi0gICAgICAgICAgICAgICAgICAgIi0tdGFyZ2V0LWlwICVzIC0tc2VydmVyLWlwICVzIC0tcXVpZXQiCi0gICAgICAgICAgICAgICAgICAlICh0ZXN0X3BhdGgsIGRhdGFfZmlsZSwgbWFuaWZlc3QsIHFlbXUuaXAsIHFlbXUuc2VydmVyX2lwKSkKLSAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZChjbWQpCi0gICAgICAgICAgICAjIFZlcmlmeSBwaW5nIHRlc3Qgd2FzIHN1Y2Nlc2Z1bAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCByZXN1bHQuc3RhdHVzLCAnb2UtdGVzdCBydW50aW1lIHJldHVybmVkIGEgbm9uIDAgc3RhdHVzJykKLQotICAgIGRlZiB0ZXN0X3Rlc3RleHBvcnRfc2RrKHNlbGYpOgotICAgICAgICAiIiIKLSAgICAgICAgU3VtbWFyeTogQ2hlY2sgc2RrIGZ1bmN0aW9uYWxpdHkgZm9yIHRlc3RleHBvcnQuCi0gICAgICAgIEV4cGVjdGVkOiAxLiB0ZXN0ZXhwb3J0IGRpcmVjdG9yeSBtdXN0IGJlIGNyZWF0ZWQuCi0gICAgICAgICAgICAgICAgICAyLiBTREsgdGFyYmFsbCBtdXN0IGV4aXN0cy4KLSAgICAgICAgICAgICAgICAgIDMuIFVuY29tcHJlc3Npbmcgb2YgdGFyYmFsbCBtdXN0IHN1Y2NlZWQuCi0gICAgICAgICAgICAgICAgICA0LiBDaGVjayBpZiB0aGUgU0RLIGRpcmVjdG9yeSBpcyBhZGRlZCB0byBQQVRILgotICAgICAgICAgICAgICAgICAgNS4gUnVuIHRhciBmcm9tIHRoZSBTREsgZGlyZWN0b3J5LgotICAgICAgICBQcm9kdWN0OiBvZS1jb3JlCi0gICAgICAgIEF1dGhvcjogTWFyaWFubyBMb3BleiA8bWFyaWFuby5sb3BlekBpbnRlbC5jb20+Ci0gICAgICAgICIiIgotCi0gICAgICAgIGZlYXR1cmVzID0gJ0lOSEVSSVQgKz0gInRlc3RleHBvcnQiXG4nCi0gICAgICAgICMgVGhlc2UgYXJlbid0IHRoZSBhY3R1YWwgSVAgYWRkcmVzc2VzIGJ1dCB0ZXN0ZXhwb3J0IGNsYXNzIG5lZWRzIHNvbWV0aGluZyBkZWZpbmVkCi0gICAgICAgIGZlYXR1cmVzICs9ICdURVNUX1NFUlZFUl9JUCA9ICIxOTIuMTY4LjcuMSJcbicKLSAgICAgICAgZmVhdHVyZXMgKz0gJ1RFU1RfVEFSR0VUX0lQID0gIjE5Mi4xNjguNy4xIlxuJwotICAgICAgICBmZWF0dXJlcyArPSAnVEVTVF9TVUlURVMgPSAicGluZyJcbicKLSAgICAgICAgZmVhdHVyZXMgKz0gJ1RFU1RfRVhQT1JUX1NES19FTkFCTEVEID0gIjEiXG4nCi0gICAgICAgIGZlYXR1cmVzICs9ICdURVNUX0VYUE9SVF9TREtfUEFDS0FHRVMgPSAibmF0aXZlc2RrLXRhciJcbicKLSAgICAgICAgc2VsZi53cml0ZV9jb25maWcoZmVhdHVyZXMpCi0KLSAgICAgICAgIyBCdWlsZCB0ZXNleHBvcnQgZm9yIGNvcmUtaW1hZ2UtbWluaW1hbAotICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwnKQotICAgICAgICBiaXRiYWtlKCctYyB0ZXN0ZXhwb3J0IGNvcmUtaW1hZ2UtbWluaW1hbCcpCi0KLSAgICAgICAgbmVlZGVkX3ZhcnMgPSBbJ1RFU1RfRVhQT1JUX0RJUicsICdURVNUX0VYUE9SVF9TREtfRElSJywgJ1RFU1RfRVhQT1JUX1NES19OQU1FJ10KLSAgICAgICAgYmJfdmFycyA9IGdldF9iYl92YXJzKG5lZWRlZF92YXJzLCAnY29yZS1pbWFnZS1taW5pbWFsJykKLSAgICAgICAgdGVzdGV4cG9ydF9kaXIgPSBiYl92YXJzWydURVNUX0VYUE9SVF9ESVInXQotICAgICAgICBzZGtfZGlyID0gYmJfdmFyc1snVEVTVF9FWFBPUlRfU0RLX0RJUiddCi0gICAgICAgIHNka19uYW1lID0gYmJfdmFyc1snVEVTVF9FWFBPUlRfU0RLX05BTUUnXQotCi0gICAgICAgICMgQ2hlY2sgZm9yIFNESwotICAgICAgICB0YXJiYWxsX25hbWUgPSAiJXMuc2giICUgc2RrX25hbWUKLSAgICAgICAgdGFyYmFsbF9wYXRoID0gb3MucGF0aC5qb2luKHRlc3RleHBvcnRfZGlyLCBzZGtfZGlyLCB0YXJiYWxsX25hbWUpCi0gICAgICAgIG1zZyA9ICJDb3VsZG4ndCBmaW5kIFNESyB0YXJiYWxsOiAlcyIgJSB0YXJiYWxsX3BhdGgKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmlzZmlsZSh0YXJiYWxsX3BhdGgpLCBUcnVlLCBtc2cpCi0KLSAgICAgICAgIyBFeHRyYWN0IFNESyBhbmQgcnVuIHRhciBmcm9tIFNESwotICAgICAgICByZXN1bHQgPSBydW5DbWQoIiVzIC15IC1kIC90bXAvc2RrIiAlIHRhcmJhbGxfcGF0aCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCByZXN1bHQuc3RhdHVzLCAiQ291bGRuJ3QgZXh0cmFjdCBTREsiKQotCi0gICAgICAgIGVudl9zY3JpcHQgPSByZXN1bHQub3V0cHV0LnNwbGl0KClbLTFdCi0gICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgiLiAlczsgd2hpY2ggdGFyIiAlIGVudl9zY3JpcHQsIHNoZWxsPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzdWx0LnN0YXR1cywgIkNvdWxkbid0IHNldHVwIFNESyBlbnZpcm9ubWVudCIpCi0gICAgICAgIGlzX3Nka190YXIgPSBUcnVlIGlmICIvdG1wL3NkayIgaW4gcmVzdWx0Lm91dHB1dCBlbHNlIEZhbHNlCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc19zZGtfdGFyLCAiQ291bGRuJ3Qgc2V0dXAgU0RLIGVudmlyb25tZW50IikKLQotICAgICAgICB0YXJfc2RrID0gcmVzdWx0Lm91dHB1dAotICAgICAgICByZXN1bHQgPSBydW5DbWQoIiVzIC0tdmVyc2lvbiIgJSB0YXJfc2RrKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJlc3VsdC5zdGF0dXMsICJDb3VsZG4ndCBydW4gdGFyIGZyb20gU0RLIikKLQotCi1jbGFzcyBUZXN0SW1hZ2Uob2VTZWxmVGVzdCk6Ci0KLSAgICBkZWYgdGVzdF90ZXN0aW1hZ2VfaW5zdGFsbChzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFN1bW1hcnk6IENoZWNrIGluc3RhbGwgcGFja2FnZXMgZnVuY3Rpb25hbGl0eSBmb3IgdGVzdGltYWdlL3Rlc3RleHBvcnQuCi0gICAgICAgIEV4cGVjdGVkOiAxLiBJbXBvcnQgdGVzdHMgZnJvbSBhIGRpcmVjdG9yeSBvdGhlciB0aGFuIG1ldGEuCi0gICAgICAgICAgICAgICAgICAyLiBDaGVjayBpbnN0YWxsL3VuaW5zdGFsbCBvZiBzb2NhdC4KLSAgICAgICAgICAgICAgICAgIDMuIENoZWNrIHRoYXQgcmVtb3RlIHBhY2thZ2UgZmVlZHMgY2FuIGJlIGFjY2Vzc2VkCi0gICAgICAgIFByb2R1Y3Q6IG9lLWNvcmUKLSAgICAgICAgQXV0aG9yOiBNYXJpYW5vIExvcGV6IDxtYXJpYW5vLmxvcGV6QGludGVsLmNvbT4KLSAgICAgICAgQXV0aG9yOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPgotICAgICAgICAiIiIKLSAgICAgICAgaWYgZ2V0X2JiX3ZhcignRElTVFJPJykgPT0gJ3Bva3ktdGlueSc6Ci0gICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdjb3JlLWltYWdlLWZ1bGwtY21kbGluZSBub3QgYnVpbGRhYmxlIGZvciBwb2t5LXRpbnknKQotCi0gICAgICAgIGZlYXR1cmVzID0gJ0lOSEVSSVQgKz0gInRlc3RpbWFnZSJcbicKLSAgICAgICAgZmVhdHVyZXMgKz0gJ1RFU1RfU1VJVEVTID0gInBpbmcgc3NoIHNlbGZ0ZXN0IlxuJwotICAgICAgICAjIFdlIGRvbid0IHlldCBrbm93IHdoYXQgdGhlIHNlcnZlciBpcCBhbmQgcG9ydCB3aWxsIGJlIC0gdGhleSB3aWxsIGJlIHBhdGNoZWQKLSAgICAgICAgIyBpbiBhdCB0aGUgc3RhcnQgb2YgdGhlIG9uLWltYWdlIHRlc3QKLSAgICAgICAgZmVhdHVyZXMgKz0gJ1BBQ0tBR0VfRkVFRF9VUklTID0gImh0dHA6Ly9ib2d1c19pcDpib2d1c19wb3J0IlxuJwotICAgICAgICBmZWF0dXJlcyArPSAnRVhUUkFfSU1BR0VfRkVBVFVSRVMgKz0gInBhY2thZ2UtbWFuYWdlbWVudCJcbicKLSAgICAgICAgZmVhdHVyZXMgKz0gJ1BBQ0tBR0VfQ0xBU1NFUyA9ICJwYWNrYWdlX3JwbSInCi0gICAgICAgIHNlbGYud3JpdGVfY29uZmlnKGZlYXR1cmVzKQotCi0gICAgICAgICMgQnVpbGQgY29yZS1pbWFnZS1zYXRvIGFuZCB0ZXN0aW1hZ2UKLSAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS1mdWxsLWNtZGxpbmUgc29jYXQnKQotICAgICAgICBiaXRiYWtlKCctYyB0ZXN0aW1hZ2UgY29yZS1pbWFnZS1mdWxsLWNtZGxpbmUnKQotCi1jbGFzcyBQb3N0aW5zdChvZVNlbGZUZXN0KToKLSAgICBAdGVzdGNhc2UoMTU0MCkKLSAgICBkZWYgdGVzdF92ZXJpZnlfcG9zdGluc3Qoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBTdW1tYXJ5OiBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoZSBleGVjdXRpb24gb3JkZXIgb2YgcG9zdGluc3QgQnVnemlsbGEgSUQ6IFs1MzE5XQotICAgICAgICBFeHBlY3RlZCA6Ci0gICAgICAgIDEuIENvbXBpbGUgYSBtaW5pbWFsIGltYWdlLgotICAgICAgICAyLiBUaGUgY29tcGlsZWQgaW1hZ2Ugd2lsbCBhZGQgdGhlIGNyZWF0ZWQgbGF5ZXIgd2l0aCB0aGUgcmVjaXBlcyBwb3N0aW5zdFsgYWJkcHRdCi0gICAgICAgIDMuIFJ1biBxZW11eDg2Ci0gICAgICAgIDQuIFZhbGlkYXRlIHRoZSB0YXNrIGV4ZWN1dGlvbiBvcmRlcgotICAgICAgICBBdXRob3I6IEZyYW5jaXNjbyBQZWRyYXphIDxmcmFuY2lzY28uai5wZWRyYXphLmdvbnphbGV6QGludGVsLmNvbT4KLSAgICAgICAgIiIiCi0gICAgICAgIGZlYXR1cmVzID0gJ0lOSEVSSVQgKz0gInRlc3RpbWFnZSJcbicKLSAgICAgICAgZmVhdHVyZXMgKz0gJ0NPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTCArPSAicG9zdGluc3QtYXQtcm9vdGZzIFwKLXBvc3RpbnN0LWRlbGF5ZWQtYSBcCi1wb3N0aW5zdC1kZWxheWVkLWIgXAotcG9zdGluc3QtZGVsYXllZC1kIFwKLXBvc3RpbnN0LWRlbGF5ZWQtcCBcCi1wb3N0aW5zdC1kZWxheWVkLXQgXAotIlxuJwotICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhmZWF0dXJlcykKLQotICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwgLWYgJykKLQotICAgICAgICBwb3N0aW5zdF9saXN0ID0gWycxMDAtcG9zdGluc3QtYXQtcm9vdGZzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnMTAxLXBvc3RpbnN0LWRlbGF5ZWQtYScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJzEwMi1wb3N0aW5zdC1kZWxheWVkLWInLAotICAgICAgICAgICAgICAgICAgICAgICAgICcxMDMtcG9zdGluc3QtZGVsYXllZC1kJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnMTA0LXBvc3RpbnN0LWRlbGF5ZWQtcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJzEwNS1wb3N0aW5zdC1kZWxheWVkLXQnXQotICAgICAgICBwYXRoX3dvcmtkaXIgPSBnZXRfYmJfdmFyKCdXT1JLRElSJywnY29yZS1pbWFnZS1taW5pbWFsJykKLSAgICAgICAgd29ya3NwYWNlZGlyID0gJ3Rlc3RpbWFnZS9xZW11X2Jvb3RfbG9nJwotICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4ocGF0aF93b3JrZGlyLCB3b3Jrc3BhY2VkaXIpCi0gICAgICAgIHJleHAgPSByZS5jb21waWxlKCJeUnVubmluZyBwb3N0aW5zdCAuKi8oP1A8cG9zdGluc3Q+LiopXC5cLlwuJCIpCi0gICAgICAgIHdpdGggcnVucWVtdSgnY29yZS1pbWFnZS1taW5pbWFsJykgYXMgcWVtdToKLSAgICAgICAgICAgIHdpdGggb3Blbih3b3Jrc3BhY2VkaXIpIGFzIGY6Ci0gICAgICAgICAgICAgICAgZm91bmQgPSBGYWxzZQotICAgICAgICAgICAgICAgIGlkeCA9IDAKLSAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgotICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpLnJlcGxhY2UoIl5NIiwiIikKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6ICMgVG8gYXZvaWQgZW1wdHkgbGluZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIG0gPSByZXhwLnNlYXJjaChsaW5lKQotICAgICAgICAgICAgICAgICAgICBpZiBtOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3N0aW5zdF9saXN0W2lkeF0sIG0uZ3JvdXAoJ3Bvc3RpbnN0JyksICJGYWlsIikKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkeCA9IGlkeCsxCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBmb3VuZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWR4LCBsZW4ocG9zdGluc3RfbGlzdCksICJOb3QgZm91bmQgYWxsIHBvc3RpbnN0cyIpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotCi0gICAgQHRlc3RjYXNlKDE1NDUpCi0gICAgZGVmIHRlc3RfcG9zdGluc3Rfcm9vdGZzX2FuZF9ib290KHNlbGYpOgotICAgICAgICAiIiIKLSAgICAgICAgU3VtbWFyeTogICAgICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgdGVzdCBjYXNlIGlzIHRvIHZlcmlmeSBQb3N0LWluc3RhbGxhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0cyBhcmUgY2FsbGVkIHdoZW4gcm9vdGZzIGlzIGNyZWF0ZWQgYW5kIGFsc28gdGVzdAotICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBzY3JpcHQgY2FuIGJlIGRlbGF5ZWQgdG8gcnVuIGF0IGZpcnN0IGJvb3QuCi0gICAgICAgIERlcGVuZGVuY2llczogICBOQQotICAgICAgICBTdGVwczogICAgICAgICAgMS4gQWRkIHByb3BlciBjb25maWd1cmF0aW9uIHRvIGxvY2FsLmNvbmYgZmlsZQotICAgICAgICAgICAgICAgICAgICAgICAgMi4gQnVpbGQgYSAiY29yZS1pbWFnZS1taW5pbWFsIiBpbWFnZQotICAgICAgICAgICAgICAgICAgICAgICAgMy4gVmVyaWZ5IHRoYXQgZmlsZSBjcmVhdGVkIGJ5IHBvc3RpbnN0X3Jvb3RmcyByZWNpcGUgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnQgb24gcm9vdGZzIGRpci4KLSAgICAgICAgICAgICAgICAgICAgICAgIDQuIEJvb3QgdGhlIGltYWdlIGNyZWF0ZWQgb24gcWVtdSBhbmQgdmVyaWZ5IHRoYXQgdGhlIGZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQgYnkgcG9zdGluc3RfYm9vdCByZWNpcGUgaXMgcHJlc2VudCBvbiBpbWFnZS4KLSAgICAgICAgRXhwZWN0ZWQ6ICAgICAgIFRoZSBmaWxlcyBhcmUgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgZHVyaW5nIHJvb3RmcyBhbmQgYm9vdAotICAgICAgICAgICAgICAgICAgICAgICAgdGltZSBmb3IgMyBkaWZmZXJlbnQgcGFja2FnZSBtYW5hZ2VyczogcnBtLGlwayxkZWIgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgaW5pdGlhbGl6YXRpb24gbWFuYWdlcnM6IHN5c3Zpbml0IGFuZCBzeXN0ZW1kLgotCi0gICAgICAgICIiIgotICAgICAgICBmaWxlX3Jvb3Rmc19uYW1lID0gInRoaXMtd2FzLWNyZWF0ZWQtYXQtcm9vdGZzdGltZSIKLSAgICAgICAgZmlsZWJvb3RfbmFtZSA9ICJ0aGlzLXdhcy1jcmVhdGVkLWF0LWZpcnN0LWJvb3QiCi0gICAgICAgIHJvb3Rmc19wa2cgPSAncG9zdGluc3QtYXQtcm9vdGZzJwotICAgICAgICBib290X3BrZyA9ICdwb3N0aW5zdC1kZWxheWVkLWEnCi0gICAgICAgICNTdGVwIDEKLSAgICAgICAgZmVhdHVyZXMgPSAnTUFDSElORSA9ICJxZW11eDg2IlxuJwotICAgICAgICBmZWF0dXJlcyArPSAnQ09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMICs9ICIlcyAlcyAiXG4nJSAocm9vdGZzX3BrZywgYm9vdF9wa2cpCi0gICAgICAgIGZlYXR1cmVzICs9ICdJTUFHRV9GRUFUVVJFUyArPSAic3NoLXNlcnZlci1vcGVuc3NoIlxuJwotICAgICAgICBmb3IgaW5pdF9tYW5hZ2VyIGluICgic3lzdmluaXQiLCAic3lzdGVtZCIpOgotICAgICAgICAgICAgI2ZvciBzeXN2aW5pdCBubyBleHRyYSBjb25maWd1cmF0aW9uIGlzIG5lZWRlZCwKLSAgICAgICAgICAgIGlmIChpbml0X21hbmFnZXIgaXMgInN5c3RlbWQiKToKLSAgICAgICAgICAgICAgICBmZWF0dXJlcyArPSAnRElTVFJPX0ZFQVRVUkVTX2FwcGVuZCA9ICIgc3lzdGVtZCJcbicKLSAgICAgICAgICAgICAgICBmZWF0dXJlcyArPSAnVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciA9ICJzeXN0ZW1kIlxuJwotICAgICAgICAgICAgICAgIGZlYXR1cmVzICs9ICdESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRCA9ICJzeXN2aW5pdCJcbicKLSAgICAgICAgICAgICAgICBmZWF0dXJlcyArPSAnVklSVFVBTC1SVU5USU1FX2luaXRzY3JpcHRzID0gIiJcbicKLSAgICAgICAgICAgIGZvciBjbGFzc2VzIGluICgicGFja2FnZV9ycG0gcGFja2FnZV9kZWIgcGFja2FnZV9pcGsiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlX2RlYiBwYWNrYWdlX3JwbSBwYWNrYWdlX2lwayIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhY2thZ2VfaXBrIHBhY2thZ2VfZGViIHBhY2thZ2VfcnBtIik6Ci0gICAgICAgICAgICAgICAgZmVhdHVyZXMgKz0gJ1BBQ0tBR0VfQ0xBU1NFUyA9ICIlcyJcbicgJSBjbGFzc2VzCi0gICAgICAgICAgICAgICAgc2VsZi53cml0ZV9jb25maWcoZmVhdHVyZXMpCi0KLSAgICAgICAgICAgICAgICAjU3RlcCAyCi0gICAgICAgICAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS1taW5pbWFsJykKLQotICAgICAgICAgICAgICAgICNTdGVwIDMKLSAgICAgICAgICAgICAgICBmaWxlX3Jvb3Rmc19jcmVhdGVkID0gb3MucGF0aC5qb2luKGdldF9iYl92YXIoJ0lNQUdFX1JPT1RGUycsImNvcmUtaW1hZ2UtbWluaW1hbCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9yb290ZnNfbmFtZSkKLSAgICAgICAgICAgICAgICBmb3VuZCA9IG9zLnBhdGguaXNmaWxlKGZpbGVfcm9vdGZzX2NyZWF0ZWQpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvdW5kLCAiRmlsZSAlcyB3YXMgbm90IGNyZWF0ZWQgYXQgcm9vdGZzIHRpbWUgYnkgJXMiICUgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZV9yb290ZnNfbmFtZSwgcm9vdGZzX3BrZykpCi0KLSAgICAgICAgICAgICAgICAjU3RlcCA0Ci0gICAgICAgICAgICAgICAgdGVzdGNvbW1hbmQgPSAnbHMgL2V0Yy8nK2ZpbGVib290X25hbWUKLSAgICAgICAgICAgICAgICB3aXRoIHJ1bnFlbXUoJ2NvcmUtaW1hZ2UtbWluaW1hbCcpIGFzIHFlbXU6Ci0gICAgICAgICAgICAgICAgICAgIHNzaGFyZ3MgPSAnLW8gVXNlcktub3duSG9zdHNGaWxlPS9kZXYvbnVsbCAtbyBTdHJpY3RIb3N0S2V5Q2hlY2tpbmc9bm8nCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnc3NoICVzIHJvb3RAJXMgJXMnICUgKHNzaGFyZ3MsIHFlbXUuaXAsIHRlc3Rjb21tYW5kKSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc3RhdHVzLCAwLCAnRmlsZSAlcyB3YXMgbm90IGNyZWF0ZWQgYXQgZmlydHMgYm9vdCclIGZpbGVib290X25hbWUpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9zaWduaW5nLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvc2lnbmluZy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFjM2QxZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9zaWduaW5nLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLWZyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Ci1mcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgZ2V0X2JiX3ZhcnMKLWltcG9ydCBvcwotaW1wb3J0IGdsb2IKLWltcG9ydCByZQotaW1wb3J0IHNodXRpbAotaW1wb3J0IHRlbXBmaWxlCi1mcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKLWZyb20gb2VxYS51dGlscy5mdG9vbHMgaW1wb3J0IHdyaXRlX2ZpbGUKLQotCi1jbGFzcyBTaWduaW5nKG9lU2VsZlRlc3QpOgotCi0gICAgZ3BnX2RpciA9ICIiCi0gICAgcHViX2tleV9wYXRoID0gIiIKLSAgICBzZWNyZXRfa2V5X3BhdGggPSAiIgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKLSAgICAgICAgIyBDaGVjayB0aGF0IHdlIGNhbiBmaW5kIHRoZSBncGcgYmluYXJ5IGFuZCBmYWlsIGVhcmx5IGlmIHdlIGNhbid0Ci0gICAgICAgIGlmIG5vdCBzaHV0aWwud2hpY2goImdwZyIpOgotICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlRoaXMgdGVzdCBuZWVkcyBHbnVQRyIpCi0KLSAgICAgICAgY2xzLmdwZ19ob21lX2RpciA9IHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeShwcmVmaXg9Im9lcWEtc2lnbmluZy0iKQotICAgICAgICBjbHMuZ3BnX2RpciA9IGNscy5ncGdfaG9tZV9kaXIubmFtZQotCi0gICAgICAgIGNscy5wdWJfa2V5X3BhdGggPSBvcy5wYXRoLmpvaW4oY2xzLnRlc3RsYXllcl9wYXRoLCAnZmlsZXMnLCAnc2lnbmluZycsICJrZXkucHViIikKLSAgICAgICAgY2xzLnNlY3JldF9rZXlfcGF0aCA9IG9zLnBhdGguam9pbihjbHMudGVzdGxheWVyX3BhdGgsICdmaWxlcycsICdzaWduaW5nJywgImtleS5zZWNyZXQiKQotCi0gICAgICAgIHJ1bkNtZCgnZ3BnIC0tYmF0Y2ggLS1ob21lZGlyICVzIC0taW1wb3J0ICVzICVzJyAlIChjbHMuZ3BnX2RpciwgY2xzLnB1Yl9rZXlfcGF0aCwgY2xzLnNlY3JldF9rZXlfcGF0aCkpCi0KLSAgICBAdGVzdGNhc2UoMTM2MikKLSAgICBkZWYgdGVzdF9zaWduaW5nX3BhY2thZ2VzKHNlbGYpOgotICAgICAgICAiIiIKLSAgICAgICAgU3VtbWFyeTogICAgIFRlc3QgdGhhdCBwYWNrYWdlcyBjYW4gYmUgc2lnbmVkIGluIHRoZSBwYWNrYWdlIGZlZWQKLSAgICAgICAgRXhwZWN0ZWQ6ICAgIFBhY2thZ2Ugc2hvdWxkIGJlIHNpZ25lZCB3aXRoIHRoZSBjb3JyZWN0IGtleQotICAgICAgICBFeHBlY3RlZDogICAgSW1hZ2VzIGNhbiBiZSBjcmVhdGVkIGZyb20gc2lnbmVkIHBhY2thZ2VzCi0gICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCi0gICAgICAgIEF1dGhvcjogICAgICBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+Ci0gICAgICAgIEF1dGhvcjogICAgICBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPgotICAgICAgICBBdXRvbWF0ZWRCeTogRGFuaWVsIElzdHJhdGUgPGRhbmllbC5hbGV4YW5kcnV4LmlzdHJhdGVAaW50ZWwuY29tPgotICAgICAgICAiIiIKLSAgICAgICAgaW1wb3J0IG9lLnBhY2thZ2VkYXRhCi0KLSAgICAgICAgcGFja2FnZV9jbGFzc2VzID0gZ2V0X2JiX3ZhcignUEFDS0FHRV9DTEFTU0VTJykKLSAgICAgICAgaWYgJ3BhY2thZ2VfcnBtJyBub3QgaW4gcGFja2FnZV9jbGFzc2VzOgotICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnVGhpcyB0ZXN0IHJlcXVpcmVzIFJQTSBQYWNrYWdpbmcuJykKLQotICAgICAgICB0ZXN0X3JlY2lwZSA9ICdlZCcKLQotICAgICAgICBmZWF0dXJlID0gJ0lOSEVSSVQgKz0gInNpZ25fcnBtIlxuJwotICAgICAgICBmZWF0dXJlICs9ICdSUE1fR1BHX1BBU1NQSFJBU0UgPSAidGVzdDEyMyJcbicKLSAgICAgICAgZmVhdHVyZSArPSAnUlBNX0dQR19OQU1FID0gInRlc3R1c2VyIlxuJwotICAgICAgICBmZWF0dXJlICs9ICdHUEdfUEFUSCA9ICIlcyJcbicgJSBzZWxmLmdwZ19kaXIKLQotICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhmZWF0dXJlKQotCi0gICAgICAgIGJpdGJha2UoJy1jIGNsZWFuICVzJyAlIHRlc3RfcmVjaXBlKQotICAgICAgICBiaXRiYWtlKCctZiAtYyBwYWNrYWdlX3dyaXRlX3JwbSAlcycgJSB0ZXN0X3JlY2lwZSkKLQotICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuICVzJyAlIHRlc3RfcmVjaXBlKQotCi0gICAgICAgIG5lZWRlZF92YXJzID0gWydQS0dEQVRBX0RJUicsICdERVBMT1lfRElSX1JQTScsICdQQUNLQUdFX0FSQ0gnLCAnU1RBR0lOR19CSU5ESVJfTkFUSVZFJ10KLSAgICAgICAgYmJfdmFycyA9IGdldF9iYl92YXJzKG5lZWRlZF92YXJzLCB0ZXN0X3JlY2lwZSkKLSAgICAgICAgcGtnZGF0YWRpciA9IGJiX3ZhcnNbJ1BLR0RBVEFfRElSJ10KLSAgICAgICAgcGtnZGF0YSA9IG9lLnBhY2thZ2VkYXRhLnJlYWRfcGtnZGF0YWZpbGUocGtnZGF0YWRpciArICIvcnVudGltZS9lZCIpCi0gICAgICAgIGlmICdQS0dFJyBpbiBwa2dkYXRhOgotICAgICAgICAgICAgcGYgPSBwa2dkYXRhWydQTiddICsgIi0iICsgcGtnZGF0YVsnUEtHRSddICsgcGtnZGF0YVsnUEtHViddICsgJy0nICsgcGtnZGF0YVsnUEtHUiddCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwZiA9IHBrZ2RhdGFbJ1BOJ10gKyAiLSIgKyBwa2dkYXRhWydQS0dWJ10gKyAnLScgKyBwa2dkYXRhWydQS0dSJ10KLSAgICAgICAgZGVwbG95X2Rpcl9ycG0gPSBiYl92YXJzWydERVBMT1lfRElSX1JQTSddCi0gICAgICAgIHBhY2thZ2VfYXJjaCA9IGJiX3ZhcnNbJ1BBQ0tBR0VfQVJDSCddLnJlcGxhY2UoJy0nLCAnXycpCi0gICAgICAgIHN0YWdpbmdfYmluZGlyX25hdGl2ZSA9IGJiX3ZhcnNbJ1NUQUdJTkdfQklORElSX05BVElWRSddCi0KLSAgICAgICAgcGtnX2RlcGxveSA9IG9zLnBhdGguam9pbihkZXBsb3lfZGlyX3JwbSwgcGFja2FnZV9hcmNoLCAnLicuam9pbigocGYsIHBhY2thZ2VfYXJjaCwgJ3JwbScpKSkKLQotICAgICAgICAjIFVzZSBhIHRlbXBvcmFyeSBycG1kYgotICAgICAgICBycG1kYiA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdvZXFhLXJwbWRiJykKLQotICAgICAgICBydW5DbWQoJyVzL3JwbWtleXMgLS1kZWZpbmUgIl9kYnBhdGggJXMiIC0taW1wb3J0ICVzJyAlCi0gICAgICAgICAgICAgICAoc3RhZ2luZ19iaW5kaXJfbmF0aXZlLCBycG1kYiwgc2VsZi5wdWJfa2V5X3BhdGgpKQotCi0gICAgICAgIHJldCA9IHJ1bkNtZCgnJXMvcnBta2V5cyAtLWRlZmluZSAiX2RicGF0aCAlcyIgLS1jaGVja3NpZyAlcycgJQotICAgICAgICAgICAgICAgICAgICAgKHN0YWdpbmdfYmluZGlyX25hdGl2ZSwgcnBtZGIsIHBrZ19kZXBsb3kpKQotICAgICAgICAjIHRtcC9kZXBsb3kvcnBtL2k1ODYvZWQtMS45LXIwLmk1ODYucnBtOiByc2Egc2hhMSBtZDUgT0sKLSAgICAgICAgc2VsZi5hc3NlcnRJbigncnNhIHNoYTEgKG1kNSkgcGdwIG1kNSBPSycsIHJldC5vdXRwdXQsICdQYWNrYWdlIHNpZ25lZCBpbmNvcnJlY3RseS4nKQotICAgICAgICBzaHV0aWwucm10cmVlKHJwbWRiKQotCi0gICAgICAgICNDaGVjayB0aGF0IGFuIGltYWdlIGNhbiBiZSBidWlsdCBmcm9tIHNpZ25lZCBwYWNrYWdlcwotICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuIGNvcmUtaW1hZ2UtbWluaW1hbCcpCi0gICAgICAgIGJpdGJha2UoJy1jIGNsZWFuIGNvcmUtaW1hZ2UtbWluaW1hbCcpCi0gICAgICAgIGJpdGJha2UoJ2NvcmUtaW1hZ2UtbWluaW1hbCcpCi0KLQotICAgIEB0ZXN0Y2FzZSgxMzgyKQotICAgIGRlZiB0ZXN0X3NpZ25pbmdfc3N0YXRlX2FyY2hpdmUoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBTdW1tYXJ5OiAgICAgVGVzdCB0aGF0IHNzdGF0ZSBhcmNoaXZlcyBjYW4gYmUgc2lnbmVkCi0gICAgICAgIEV4cGVjdGVkOiAgICBQYWNrYWdlIHNob3VsZCBiZSBzaWduZWQgd2l0aCB0aGUgY29ycmVjdCBrZXkKLSAgICAgICAgUHJvZHVjdDogICAgIG9lLWNvcmUKLSAgICAgICAgQXV0aG9yOiAgICAgIERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KLSAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KLSAgICAgICAgIiIiCi0KLSAgICAgICAgdGVzdF9yZWNpcGUgPSAnZWQnCi0KLSAgICAgICAgYnVpbGRkaXIgPSBvcy5lbnZpcm9uLmdldCgnQlVJTERESVInKQotICAgICAgICBzc3RhdGVkaXIgPSBvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICd0ZXN0LXNzdGF0ZScpCi0KLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiAlcycgJSB0ZXN0X3JlY2lwZSkKLSAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bigncm0gLXJmICVzJyAlIHNzdGF0ZWRpcikKLQotICAgICAgICBmZWF0dXJlID0gJ1NTVEFURV9TSUdfS0VZID89ICJ0ZXN0dXNlciJcbicKLSAgICAgICAgZmVhdHVyZSArPSAnU1NUQVRFX1NJR19QQVNTUEhSQVNFID89ICJ0ZXN0MTIzIlxuJwotICAgICAgICBmZWF0dXJlICs9ICdTU1RBVEVfVkVSSUZZX1NJRyA/PSAiMSJcbicKLSAgICAgICAgZmVhdHVyZSArPSAnR1BHX1BBVEggPSAiJXMiXG4nICUgc2VsZi5ncGdfZGlyCi0gICAgICAgIGZlYXR1cmUgKz0gJ1NTVEFURV9ESVIgPSAiJXMiXG4nICUgc3N0YXRlZGlyCi0gICAgICAgICMgQW55IG1pcnJvciBtaWdodCBoYXZlIHBhcnRpYWwgc3N0YXRlIHdpdGhvdXQgLnNpZyBmaWxlcywgdHJpZ2dlcmluZyBmYWlsdXJlcwotICAgICAgICBmZWF0dXJlICs9ICdTU1RBVEVfTUlSUk9SU19mb3JjZXZhcmlhYmxlID0gIiJcbicKLQotICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhmZWF0dXJlKQotCi0gICAgICAgIGJpdGJha2UoJy1jIGNsZWFuICVzJyAlIHRlc3RfcmVjaXBlKQotICAgICAgICBiaXRiYWtlKHRlc3RfcmVjaXBlKQotCi0gICAgICAgIHJlY2lwZV9zaWcgPSBnbG9iLmdsb2Ioc3N0YXRlZGlyICsgJy8qLyo6ZWQ6Kl9wYWNrYWdlLnRnei5zaWcnKQotICAgICAgICByZWNpcGVfdGd6ID0gZ2xvYi5nbG9iKHNzdGF0ZWRpciArICcvKi8qOmVkOipfcGFja2FnZS50Z3onKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlY2lwZV9zaWcpLCAxLCAnRmFpbGVkIHRvIGZpbmQgLnNpZyBmaWxlLicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlY2lwZV90Z3opLCAxLCAnRmFpbGVkIHRvIGZpbmQgLnRneiBmaWxlLicpCi0KLSAgICAgICAgcmV0ID0gcnVuQ21kKCdncGcgLS1ob21lZGlyICVzIC0tdmVyaWZ5ICVzICVzJyAlIChzZWxmLmdwZ19kaXIsIHJlY2lwZV9zaWdbMF0sIHJlY2lwZV90Z3pbMF0pKQotICAgICAgICAjIGdwZzogU2lnbmF0dXJlIG1hZGUgVGh1IDIyIE9jdCAyMDE1IDAxOjQ1OjA5IFBNIEVFU1QgdXNpbmcgUlNBIGtleSBJRCA2MUVFRkIzMAotICAgICAgICAjIGdwZzogR29vZCBzaWduYXR1cmUgZnJvbSAidGVzdHVzZXIgKG5vY29tbWVudCkgPHRlc3R1c2VyQGVtYWlsLmNvbT4iCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2dwZzogR29vZCBzaWduYXR1cmUgZnJvbScsIHJldC5vdXRwdXQsICdQYWNrYWdlIHNpZ25lZCBpbmNvcnJlY3RseS4nKQotCi0KLWNsYXNzIExvY2tlZFNpZ25hdHVyZXMob2VTZWxmVGVzdCk6Ci0KLSAgICBAdGVzdGNhc2UoMTQyMCkKLSAgICBkZWYgdGVzdF9sb2NrZWRfc2lnbmF0dXJlcyhzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFN1bW1hcnk6ICAgICBUZXN0IGxvY2tlZCBzaWduYXR1cmUgbWVjaGFuaXNtCi0gICAgICAgIEV4cGVjdGVkOiAgICBMb2NrZWQgc2lnbmF0dXJlcyB3aWxsIHByZXZlbnQgdGFzayB0byBydW4KLSAgICAgICAgUHJvZHVjdDogICAgIG9lLWNvcmUKLSAgICAgICAgQXV0aG9yOiAgICAgIERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KLSAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KLSAgICAgICAgIiIiCi0KLSAgICAgICAgdGVzdF9yZWNpcGUgPSAnZWQnCi0gICAgICAgIGxvY2tlZF9zaWdzX2ZpbGUgPSAnbG9ja2VkLXNpZ3MuaW5jJwotCi0gICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ3JtIC1mICVzJyAlIG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCBsb2NrZWRfc2lnc19maWxlKSkKLQotICAgICAgICBiaXRiYWtlKHRlc3RfcmVjaXBlKQotICAgICAgICAjIEdlbmVyYXRlIGxvY2tlZCBzaWdzIGluY2x1ZGUgZmlsZQotICAgICAgICBiaXRiYWtlKCctUyBub25lICVzJyAlIHRlc3RfcmVjaXBlKQotCi0gICAgICAgIGZlYXR1cmUgPSAncmVxdWlyZSAlc1xuJyAlIGxvY2tlZF9zaWdzX2ZpbGUKLSAgICAgICAgZmVhdHVyZSArPSAnU0lHR0VOX0xPQ0tFRFNJR1NfVEFTS1NJR19DSEVDSyA9ICJ3YXJuIlxuJwotICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhmZWF0dXJlKQotCi0gICAgICAgICMgQnVpbGQgYSBsb2NrZWQgcmVjaXBlCi0gICAgICAgIGJpdGJha2UodGVzdF9yZWNpcGUpCi0KLSAgICAgICAgIyBNYWtlIGEgY2hhbmdlIHRoYXQgc2hvdWxkIGNhdXNlIHRoZSBsb2NrZWQgdGFzayBzaWduYXR1cmUgdG8gY2hhbmdlCi0gICAgICAgIHJlY2lwZV9hcHBlbmRfZmlsZSA9IHRlc3RfcmVjaXBlICsgJ18nICsgZ2V0X2JiX3ZhcignUFYnLCB0ZXN0X3JlY2lwZSkgKyAnLmJiYXBwZW5kJwotICAgICAgICByZWNpcGVfYXBwZW5kX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0bGF5ZXJfcGF0aCwgJ3JlY2lwZXMtdGVzdCcsIHRlc3RfcmVjaXBlLCByZWNpcGVfYXBwZW5kX2ZpbGUpCi0gICAgICAgIGZlYXR1cmUgPSAnU1VNTUFSWSArPSAidGVzdCBsb2NrZWQgc2lnbmF0dXJlIlxuJwotCi0gICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihzZWxmLnRlc3RsYXllcl9wYXRoLCAncmVjaXBlcy10ZXN0JywgdGVzdF9yZWNpcGUpKQotICAgICAgICB3cml0ZV9maWxlKHJlY2lwZV9hcHBlbmRfcGF0aCwgZmVhdHVyZSkKLQotICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdybSAtcmYgJXMnICUgb3MucGF0aC5qb2luKHNlbGYudGVzdGxheWVyX3BhdGgsICdyZWNpcGVzLXRlc3QnLCB0ZXN0X3JlY2lwZSkpCi0KLSAgICAgICAgIyBCdWlsZCB0aGUgcmVjaXBlIGFnYWluCi0gICAgICAgIHJldCA9IGJpdGJha2UodGVzdF9yZWNpcGUpCi0KLSAgICAgICAgIyBWZXJpZnkgeW91IGdldCB0aGUgd2FybmluZyBhbmQgdGhhdCB0aGUgcmVhbCB0YXNrICppc24ndCogcnVuIChpLmUuIHRoZSBsb2NrZWQgc2lnbmF0dXJlIGhhcyB3b3JrZWQpCi0gICAgICAgIHBhdHQgPSByJ1dBUk5JTkc6IFRoZSAlczpkb19wYWNrYWdlIHNpZyBpcyBjb21wdXRlZCB0byBiZSBcUyssIGJ1dCB0aGUgc2lnIGlzIGxvY2tlZCB0byBcUysgaW4gU0lHR0VOX0xPQ0tFRFNJR1NcUysnICUgdGVzdF9yZWNpcGUKLSAgICAgICAgZm91bmRfd2FybiA9IHJlLnNlYXJjaChwYXR0LCByZXQub3V0cHV0KQotCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGZvdW5kX3dhcm4sICJEaWRuJ3QgZmluZCB0aGUgZXhwZWN0ZWQgd2FybmluZyBtZXNzYWdlLiBPdXRwdXQ6ICVzIiAlIHJldC5vdXRwdXQpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9zc3RhdGUucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9zc3RhdGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NGJjNDEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvc3N0YXRlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotaW1wb3J0IGRhdGV0aW1lCi1pbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBvcwotaW1wb3J0IHJlCi1pbXBvcnQgc2h1dGlsCi0KLWltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKLWZyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Ci1mcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhcnMsIGdldF90ZXN0X2xheWVyCi0KLQotY2xhc3MgU1N0YXRlQmFzZShvZVNlbGZUZXN0KToKLQotICAgIGRlZiBzZXRVcExvY2FsKHNlbGYpOgotICAgICAgICBzZWxmLnRlbXBfc3N0YXRlX2xvY2F0aW9uID0gTm9uZQotICAgICAgICBuZWVkZWRfdmFycyA9IFsnU1NUQVRFX0RJUicsICdOQVRJVkVMU0JTVFJJTkcnLCAnVENMSUJDJywgJ1RVTkVfQVJDSCcsCi0gICAgICAgICAgICAgICAgICAgICAgICdUT1BESVInLCAnVEFSR0VUX1ZFTkRPUicsICdUQVJHRVRfT1MnXQotICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMobmVlZGVkX3ZhcnMpCi0gICAgICAgIHNlbGYuc3N0YXRlX3BhdGggPSBiYl92YXJzWydTU1RBVEVfRElSJ10KLSAgICAgICAgc2VsZi5ob3N0ZGlzdHJvID0gYmJfdmFyc1snTkFUSVZFTFNCU1RSSU5HJ10KLSAgICAgICAgc2VsZi50Y2xpYmMgPSBiYl92YXJzWydUQ0xJQkMnXQotICAgICAgICBzZWxmLnR1bmVfYXJjaCA9IGJiX3ZhcnNbJ1RVTkVfQVJDSCddCi0gICAgICAgIHNlbGYudG9wZGlyID0gYmJfdmFyc1snVE9QRElSJ10KLSAgICAgICAgc2VsZi50YXJnZXRfdmVuZG9yID0gYmJfdmFyc1snVEFSR0VUX1ZFTkRPUiddCi0gICAgICAgIHNlbGYudGFyZ2V0X29zID0gYmJfdmFyc1snVEFSR0VUX09TJ10KLSAgICAgICAgc2VsZi5kaXN0cm9fc3BlY2lmaWNfc3N0YXRlID0gb3MucGF0aC5qb2luKHNlbGYuc3N0YXRlX3BhdGgsIHNlbGYuaG9zdGRpc3RybykKLQotICAgICMgQ3JlYXRlcyBhIHNwZWNpYWwgc3N0YXRlIGNvbmZpZ3VyYXRpb24gd2l0aCB0aGUgb3B0aW9uIHRvIGFkZCBzc3RhdGUgbWlycm9ycwotICAgIGRlZiBjb25maWdfc3N0YXRlKHNlbGYsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPUZhbHNlLCBhZGRfbG9jYWxfbWlycm9ycz1bXSk6Ci0gICAgICAgIHNlbGYudGVtcF9zc3RhdGVfbG9jYXRpb24gPSB0ZW1wX3NzdGF0ZV9sb2NhdGlvbgotCi0gICAgICAgIGlmIHNlbGYudGVtcF9zc3RhdGVfbG9jYXRpb246Ci0gICAgICAgICAgICB0ZW1wX3NzdGF0ZV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICJ0ZW1wX3NzdGF0ZV8lcyIgJSBkYXRldGltZS5kYXRldGltZS5ub3coKS5zdHJmdGltZSgnJVklbSVkJUglTSVTJykpCi0gICAgICAgICAgICBjb25maWdfdGVtcF9zc3RhdGUgPSAiU1NUQVRFX0RJUiA9IFwiJXNcIiIgJSB0ZW1wX3NzdGF0ZV9wYXRoCi0gICAgICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoY29uZmlnX3RlbXBfc3N0YXRlKQotICAgICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wX3NzdGF0ZV9wYXRoKQotICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWydTU1RBVEVfRElSJywgJ05BVElWRUxTQlNUUklORyddKQotICAgICAgICBzZWxmLnNzdGF0ZV9wYXRoID0gYmJfdmFyc1snU1NUQVRFX0RJUiddCi0gICAgICAgIHNlbGYuaG9zdGRpc3RybyA9IGJiX3ZhcnNbJ05BVElWRUxTQlNUUklORyddCi0gICAgICAgIHNlbGYuZGlzdHJvX3NwZWNpZmljX3NzdGF0ZSA9IG9zLnBhdGguam9pbihzZWxmLnNzdGF0ZV9wYXRoLCBzZWxmLmhvc3RkaXN0cm8pCi0KLSAgICAgICAgaWYgYWRkX2xvY2FsX21pcnJvcnM6Ci0gICAgICAgICAgICBjb25maWdfc2V0X3NzdGF0ZV9pZl9ub3Rfc2V0ID0gJ1NTVEFURV9NSVJST1JTID89ICIiJwotICAgICAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGNvbmZpZ19zZXRfc3N0YXRlX2lmX25vdF9zZXQpCi0gICAgICAgICAgICBmb3IgbG9jYWxfbWlycm9yIGluIGFkZF9sb2NhbF9taXJyb3JzOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5qb2luKGxvY2FsX21pcnJvcikgPT0gb3MucGF0aC5qb2luKHNlbGYuc3N0YXRlX3BhdGgpLCBtc2c9J0Nhbm5vdCBhZGQgdGhlIGN1cnJlbnQgc3N0YXRlIHBhdGggYXMgYSBzc3RhdGUgbWlycm9yJykKLSAgICAgICAgICAgICAgICBjb25maWdfc3N0YXRlX21pcnJvciA9ICJTU1RBVEVfTUlSUk9SUyArPSBcImZpbGU6Ly8uKiBmaWxlOi8vLyVzL1BBVEhcIiIgJSBsb2NhbF9taXJyb3IKLSAgICAgICAgICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoY29uZmlnX3NzdGF0ZV9taXJyb3IpCi0KLSAgICAjIFJldHVybnMgYSBsaXN0IGNvbnRhaW5pbmcgc3N0YXRlIGZpbGVzCi0gICAgZGVmIHNlYXJjaF9zc3RhdGUoc2VsZiwgZmlsZW5hbWVfcmVnZXgsIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9VHJ1ZSk6Ci0gICAgICAgIHJlc3VsdCA9IFtdCi0gICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNlbGYuc3N0YXRlX3BhdGgpOgotICAgICAgICAgICAgaWYgZGlzdHJvX3NwZWNpZmljIGFuZCByZS5zZWFyY2goIiVzL1thLXowLTldezJ9JCIgJSBzZWxmLmhvc3RkaXN0cm8sIHJvb3QpOgotICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgotICAgICAgICAgICAgICAgICAgICBpZiByZS5zZWFyY2goZmlsZW5hbWVfcmVnZXgsIGYpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChmKQotICAgICAgICAgICAgaWYgZGlzdHJvX25vbnNwZWNpZmljIGFuZCByZS5zZWFyY2goIiVzL1thLXowLTldezJ9JCIgJSBzZWxmLnNzdGF0ZV9wYXRoLCByb290KToKLSAgICAgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKLSAgICAgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKGZpbGVuYW1lX3JlZ2V4LCBmKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZikKLSAgICAgICAgcmV0dXJuIHJlc3VsdApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvc3N0YXRldGVzdHMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9zc3RhdGV0ZXN0cy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM1ZGRmZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9zc3RhdGV0ZXN0cy5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ4MyArMCwwIEBACi1pbXBvcnQgZGF0ZXRpbWUKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IG9zCi1pbXBvcnQgcmUKLWltcG9ydCBzaHV0aWwKLWltcG9ydCBnbG9iCi1pbXBvcnQgc3VicHJvY2VzcwotCi1pbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCi1mcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAotZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIGdldF90ZXN0X2xheWVyCi1mcm9tIG9lcWEuc2VsZnRlc3Quc3N0YXRlIGltcG9ydCBTU3RhdGVCYXNlCi1mcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKLQotY2xhc3MgU1N0YXRlVGVzdHMoU1N0YXRlQmFzZSk6Ci0KLSAgICAjIFRlc3Qgc3N0YXRlIGZpbGVzIGNyZWF0aW9uIGFuZCB0aGVpciBsb2NhdGlvbgotICAgIGRlZiBydW5fdGVzdF9zc3RhdGVfY3JlYXRpb24oc2VsZiwgdGFyZ2V0cywgZGlzdHJvX3NwZWNpZmljPVRydWUsIGRpc3Ryb19ub25zcGVjaWZpYz1UcnVlLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlLCBzaG91bGRfcGFzcz1UcnVlKToKLSAgICAgICAgc2VsZi5jb25maWdfc3N0YXRlKHRlbXBfc3N0YXRlX2xvY2F0aW9uLCBbc2VsZi5zc3RhdGVfcGF0aF0pCi0KLSAgICAgICAgaWYgIHNlbGYudGVtcF9zc3RhdGVfbG9jYXRpb246Ci0gICAgICAgICAgICBiaXRiYWtlKFsnLWNjbGVhbiddICsgdGFyZ2V0cykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGJpdGJha2UoWyctY2NsZWFuc3N0YXRlJ10gKyB0YXJnZXRzKQotCi0gICAgICAgIGJpdGJha2UodGFyZ2V0cykKLSAgICAgICAgZmlsZV90cmFja2VyID0gW10KLSAgICAgICAgcmVzdWx0cyA9IHNlbGYuc2VhcmNoX3NzdGF0ZSgnfCcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSksIGRpc3Ryb19zcGVjaWZpYywgZGlzdHJvX25vbnNwZWNpZmljKQotICAgICAgICBpZiBkaXN0cm9fbm9uc3BlY2lmaWM6Ci0gICAgICAgICAgICBmb3IgciBpbiByZXN1bHRzOgotICAgICAgICAgICAgICAgIGlmIHIuZW5kc3dpdGgoKCJfcG9wdWxhdGVfbGljLnRneiIsICJfcG9wdWxhdGVfbGljLnRnei5zaWdpbmZvIiwgIl9mZXRjaC50Z3ouc2lnaW5mbyIsICJfdW5wYWNrLnRnei5zaWdpbmZvIiwgIl9wYXRjaC50Z3ouc2lnaW5mbyIpKToKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICBmaWxlX3RyYWNrZXIuYXBwZW5kKHIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmaWxlX3RyYWNrZXIgPSByZXN1bHRzCi0KLSAgICAgICAgaWYgc2hvdWxkX3Bhc3M6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZV90cmFja2VyICwgbXNnPSJDb3VsZCBub3QgZmluZCBzc3RhdGUgZmlsZXMgZm9yOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgdGFyZ2V0cykpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmaWxlX3RyYWNrZXIgLCBtc2c9IkZvdW5kIHNzdGF0ZSBmaWxlcyBpbiB0aGUgd3JvbmcgcGxhY2UgZm9yOiAlcyAoZm91bmQgJXMpIiAlICgnLCAnLmpvaW4obWFwKHN0ciwgdGFyZ2V0cykpLCBzdHIoZmlsZV90cmFja2VyKSkpCi0KLSAgICBAdGVzdGNhc2UoOTc1KQotICAgIGRlZiB0ZXN0X3NzdGF0ZV9jcmVhdGlvbl9kaXN0cm9fc3BlY2lmaWNfcGFzcyhzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfY3JlYXRpb24oWydiaW51dGlscy1jcm9zcy0nKyBzZWxmLnR1bmVfYXJjaCwgJ2JpbnV0aWxzLW5hdGl2ZSddLCBkaXN0cm9fc3BlY2lmaWM9VHJ1ZSwgZGlzdHJvX25vbnNwZWNpZmljPUZhbHNlLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKQotCi0gICAgQHRlc3RjYXNlKDEzNzQpCi0gICAgZGVmIHRlc3Rfc3N0YXRlX2NyZWF0aW9uX2Rpc3Ryb19zcGVjaWZpY19mYWlsKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0X3NzdGF0ZV9jcmVhdGlvbihbJ2JpbnV0aWxzLWNyb3NzLScrIHNlbGYudHVuZV9hcmNoLCAnYmludXRpbHMtbmF0aXZlJ10sIGRpc3Ryb19zcGVjaWZpYz1GYWxzZSwgZGlzdHJvX25vbnNwZWNpZmljPVRydWUsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUsIHNob3VsZF9wYXNzPUZhbHNlKQotCi0gICAgQHRlc3RjYXNlKDk3NikKLSAgICBkZWYgdGVzdF9zc3RhdGVfY3JlYXRpb25fZGlzdHJvX25vbnNwZWNpZmljX3Bhc3Moc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NyZWF0aW9uKFsnbGludXgtbGliYy1oZWFkZXJzJ10sIGRpc3Ryb19zcGVjaWZpYz1GYWxzZSwgZGlzdHJvX25vbnNwZWNpZmljPVRydWUsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpCi0KLSAgICBAdGVzdGNhc2UoMTM3NSkKLSAgICBkZWYgdGVzdF9zc3RhdGVfY3JlYXRpb25fZGlzdHJvX25vbnNwZWNpZmljX2ZhaWwoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NyZWF0aW9uKFsnbGludXgtbGliYy1oZWFkZXJzJ10sIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9RmFsc2UsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUsIHNob3VsZF9wYXNzPUZhbHNlKQotCi0gICAgIyBUZXN0IHRoZSBzc3RhdGUgZmlsZXMgZGVsZXRpb24gcGFydCBvZiB0aGUgZG9fY2xlYW5zc3RhdGUgdGFzawotICAgIGRlZiBydW5fdGVzdF9jbGVhbnNzdGF0ZV90YXNrKHNlbGYsIHRhcmdldHMsIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9VHJ1ZSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSk6Ci0gICAgICAgIHNlbGYuY29uZmlnX3NzdGF0ZSh0ZW1wX3NzdGF0ZV9sb2NhdGlvbiwgW3NlbGYuc3N0YXRlX3BhdGhdKQotCi0gICAgICAgIGJpdGJha2UoWyctY2NsZWFuc3N0YXRlJ10gKyB0YXJnZXRzKQotCi0gICAgICAgIGJpdGJha2UodGFyZ2V0cykKLSAgICAgICAgdGd6X2NyZWF0ZWQgPSBzZWxmLnNlYXJjaF9zc3RhdGUoJ3wnLmpvaW4obWFwKHN0ciwgW3MgKyAnLio/XC50Z3okJyBmb3IgcyBpbiB0YXJnZXRzXSkpLCBkaXN0cm9fc3BlY2lmaWMsIGRpc3Ryb19ub25zcGVjaWZpYykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRnel9jcmVhdGVkLCBtc2c9IkNvdWxkIG5vdCBmaW5kIHNzdGF0ZSAudGd6IGZpbGVzIGZvcjogJXMgKCVzKSIgJSAoJywgJy5qb2luKG1hcChzdHIsIHRhcmdldHMpKSwgc3RyKHRnel9jcmVhdGVkKSkpCi0KLSAgICAgICAgc2lnaW5mb19jcmVhdGVkID0gc2VsZi5zZWFyY2hfc3N0YXRlKCd8Jy5qb2luKG1hcChzdHIsIFtzICsgJy4qP1wuc2lnaW5mbyQnIGZvciBzIGluIHRhcmdldHNdKSksIGRpc3Ryb19zcGVjaWZpYywgZGlzdHJvX25vbnNwZWNpZmljKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2lnaW5mb19jcmVhdGVkLCBtc2c9IkNvdWxkIG5vdCBmaW5kIHNzdGF0ZSAuc2lnaW5mbyBmaWxlcyBmb3I6ICVzICglcykiICUgKCcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSksIHN0cihzaWdpbmZvX2NyZWF0ZWQpKSkKLQotICAgICAgICBiaXRiYWtlKFsnLWNjbGVhbnNzdGF0ZSddICsgdGFyZ2V0cykKLSAgICAgICAgdGd6X3JlbW92ZWQgPSBzZWxmLnNlYXJjaF9zc3RhdGUoJ3wnLmpvaW4obWFwKHN0ciwgW3MgKyAnLio/XC50Z3okJyBmb3IgcyBpbiB0YXJnZXRzXSkpLCBkaXN0cm9fc3BlY2lmaWMsIGRpc3Ryb19ub25zcGVjaWZpYykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0Z3pfcmVtb3ZlZCwgbXNnPSJkb19jbGVhbnNzdGF0ZSBkaWRuJ3QgcmVtb3ZlIC50Z3ogc3N0YXRlIGZpbGVzIGZvcjogJXMgKCVzKSIgJSAoJywgJy5qb2luKG1hcChzdHIsIHRhcmdldHMpKSwgc3RyKHRnel9yZW1vdmVkKSkpCi0KLSAgICBAdGVzdGNhc2UoOTc3KQotICAgIGRlZiB0ZXN0X2NsZWFuc3N0YXRlX3Rhc2tfZGlzdHJvX3NwZWNpZmljX25vbnNwZWNpZmljKHNlbGYpOgotICAgICAgICB0YXJnZXRzID0gWydiaW51dGlscy1jcm9zcy0nKyBzZWxmLnR1bmVfYXJjaCwgJ2JpbnV0aWxzLW5hdGl2ZSddCi0gICAgICAgIHRhcmdldHMuYXBwZW5kKCdsaW51eC1saWJjLWhlYWRlcnMnKQotICAgICAgICBzZWxmLnJ1bl90ZXN0X2NsZWFuc3N0YXRlX3Rhc2sodGFyZ2V0cywgZGlzdHJvX3NwZWNpZmljPVRydWUsIGRpc3Ryb19ub25zcGVjaWZpYz1UcnVlLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKQotCi0gICAgQHRlc3RjYXNlKDEzNzYpCi0gICAgZGVmIHRlc3RfY2xlYW5zc3RhdGVfdGFza19kaXN0cm9fbm9uc3BlY2lmaWMoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3RfY2xlYW5zc3RhdGVfdGFzayhbJ2xpbnV4LWxpYmMtaGVhZGVycyddLCBkaXN0cm9fc3BlY2lmaWM9RmFsc2UsIGRpc3Ryb19ub25zcGVjaWZpYz1UcnVlLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKQotCi0gICAgQHRlc3RjYXNlKDEzNzcpCi0gICAgZGVmIHRlc3RfY2xlYW5zc3RhdGVfdGFza19kaXN0cm9fc3BlY2lmaWMoc2VsZik6Ci0gICAgICAgIHRhcmdldHMgPSBbJ2JpbnV0aWxzLWNyb3NzLScrIHNlbGYudHVuZV9hcmNoLCAnYmludXRpbHMtbmF0aXZlJ10KLSAgICAgICAgdGFyZ2V0cy5hcHBlbmQoJ2xpbnV4LWxpYmMtaGVhZGVycycpCi0gICAgICAgIHNlbGYucnVuX3Rlc3RfY2xlYW5zc3RhdGVfdGFzayh0YXJnZXRzLCBkaXN0cm9fc3BlY2lmaWM9VHJ1ZSwgZGlzdHJvX25vbnNwZWNpZmljPUZhbHNlLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKQotCi0KLSAgICAjIFRlc3QgcmVidWlsZGluZyBvZiBkaXN0cm8tc3BlY2lmaWMgc3N0YXRlIGZpbGVzCi0gICAgZGVmIHJ1bl90ZXN0X3JlYnVpbGRfZGlzdHJvX3NwZWNpZmljX3NzdGF0ZShzZWxmLCB0YXJnZXRzLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKToKLSAgICAgICAgc2VsZi5jb25maWdfc3N0YXRlKHRlbXBfc3N0YXRlX2xvY2F0aW9uLCBbc2VsZi5zc3RhdGVfcGF0aF0pCi0KLSAgICAgICAgYml0YmFrZShbJy1jY2xlYW5zc3RhdGUnXSArIHRhcmdldHMpCi0KLSAgICAgICAgYml0YmFrZSh0YXJnZXRzKQotICAgICAgICByZXN1bHRzID0gc2VsZi5zZWFyY2hfc3N0YXRlKCd8Jy5qb2luKG1hcChzdHIsIFtzICsgJy4qP1wudGd6JCcgZm9yIHMgaW4gdGFyZ2V0c10pKSwgZGlzdHJvX3NwZWNpZmljPUZhbHNlLCBkaXN0cm9fbm9uc3BlY2lmaWM9VHJ1ZSkKLSAgICAgICAgZmlsdGVyZWRfcmVzdWx0cyA9IFtdCi0gICAgICAgIGZvciByIGluIHJlc3VsdHM6Ci0gICAgICAgICAgICBpZiByLmVuZHN3aXRoKCgiX3BvcHVsYXRlX2xpYy50Z3oiLCAiX3BvcHVsYXRlX2xpYy50Z3ouc2lnaW5mbyIpKToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZmlsdGVyZWRfcmVzdWx0cy5hcHBlbmQocikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbHRlcmVkX3Jlc3VsdHMgPT0gW10sIG1zZz0iRm91bmQgZGlzdHJvIG5vbi1zcGVjaWZpYyBzc3RhdGUgZm9yOiAlcyAoJXMpIiAlICgnLCAnLmpvaW4obWFwKHN0ciwgdGFyZ2V0cykpLCBzdHIoZmlsdGVyZWRfcmVzdWx0cykpKQotICAgICAgICBmaWxlX3RyYWNrZXJfMSA9IHNlbGYuc2VhcmNoX3NzdGF0ZSgnfCcuam9pbihtYXAoc3RyLCBbcyArICcuKj9cLnRneiQnIGZvciBzIGluIHRhcmdldHNdKSksIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9RmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZmlsZV90cmFja2VyXzEpID49IGxlbih0YXJnZXRzKSwgbXNnID0gIk5vdCBhbGwgc3N0YXRlIGZpbGVzIHdhcmUgY3JlYXRlZCBmb3I6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSkpCi0KLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLmRpc3Ryb19zcGVjaWZpY19zc3RhdGUgKyAiX29sZCIpCi0gICAgICAgIHNodXRpbC5jb3B5dHJlZShzZWxmLmRpc3Ryb19zcGVjaWZpY19zc3RhdGUsIHNlbGYuZGlzdHJvX3NwZWNpZmljX3NzdGF0ZSArICJfb2xkIikKLSAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmRpc3Ryb19zcGVjaWZpY19zc3RhdGUpCi0KLSAgICAgICAgYml0YmFrZShbJy1jY2xlYW4nXSArIHRhcmdldHMpCi0gICAgICAgIGJpdGJha2UodGFyZ2V0cykKLSAgICAgICAgZmlsZV90cmFja2VyXzIgPSBzZWxmLnNlYXJjaF9zc3RhdGUoJ3wnLmpvaW4obWFwKHN0ciwgW3MgKyAnLio/XC50Z3okJyBmb3IgcyBpbiB0YXJnZXRzXSkpLCBkaXN0cm9fc3BlY2lmaWM9VHJ1ZSwgZGlzdHJvX25vbnNwZWNpZmljPUZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGZpbGVfdHJhY2tlcl8yKSA+PSBsZW4odGFyZ2V0cyksIG1zZyA9ICJOb3QgYWxsIHNzdGF0ZSBmaWxlcyB3YXJlIGNyZWF0ZWQgZm9yOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgdGFyZ2V0cykpKQotCi0gICAgICAgIG5vdF9yZWNyZWF0ZWQgPSBbeCBmb3IgeCBpbiBmaWxlX3RyYWNrZXJfMSBpZiB4IG5vdCBpbiBmaWxlX3RyYWNrZXJfMl0KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdF9yZWNyZWF0ZWQgPT0gW10sIG1zZz0iVGhlIGZvbGxvd2luZyBzc3RhdGUgZmlsZXMgd2FyZSBub3QgcmVjcmVhdGVkOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgbm90X3JlY3JlYXRlZCkpKQotCi0gICAgICAgIGNyZWF0ZWRfb25jZSA9IFt4IGZvciB4IGluIGZpbGVfdHJhY2tlcl8yIGlmIHggbm90IGluIGZpbGVfdHJhY2tlcl8xXQotICAgICAgICBzZWxmLmFzc2VydFRydWUoY3JlYXRlZF9vbmNlID09IFtdLCBtc2c9IlRoZSBmb2xsb3dpbmcgc3N0YXRlIGZpbGVzIHdhcmUgY3JlYXRlZCBvbmx5IGluIHRoZSBzZWNvbmQgcnVuOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgY3JlYXRlZF9vbmNlKSkpCi0KLSAgICBAdGVzdGNhc2UoMTc1KQotICAgIGRlZiB0ZXN0X3JlYnVpbGRfZGlzdHJvX3NwZWNpZmljX3NzdGF0ZV9jcm9zc19uYXRpdmVfdGFyZ2V0cyhzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdF9yZWJ1aWxkX2Rpc3Ryb19zcGVjaWZpY19zc3RhdGUoWydiaW51dGlscy1jcm9zcy0nICsgc2VsZi50dW5lX2FyY2gsICdiaW51dGlscy1uYXRpdmUnXSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSkKLQotICAgIEB0ZXN0Y2FzZSgxMzcyKQotICAgIGRlZiB0ZXN0X3JlYnVpbGRfZGlzdHJvX3NwZWNpZmljX3NzdGF0ZV9jcm9zc190YXJnZXQoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3RfcmVidWlsZF9kaXN0cm9fc3BlY2lmaWNfc3N0YXRlKFsnYmludXRpbHMtY3Jvc3MtJyArIHNlbGYudHVuZV9hcmNoXSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSkKLQotICAgIEB0ZXN0Y2FzZSgxMzczKQotICAgIGRlZiB0ZXN0X3JlYnVpbGRfZGlzdHJvX3NwZWNpZmljX3NzdGF0ZV9uYXRpdmVfdGFyZ2V0KHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0X3JlYnVpbGRfZGlzdHJvX3NwZWNpZmljX3NzdGF0ZShbJ2JpbnV0aWxzLW5hdGl2ZSddLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKQotCi0KLSAgICAjIFRlc3QgdGhlIHNzdGF0ZS1jYWNoZS1tYW5hZ2VtZW50IHNjcmlwdC4gRWFjaCBlbGVtZW50IGluIHRoZSBnbG9iYWxfY29uZmlnIGxpc3QgaXMgdXNlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgaW4gdGhlIHRhcmdldF9jb25maWcgbGlzdAotICAgICMgZ2xvYmFsX2NvbmZpZyBlbGVtZW50cyBhcmUgZXhwZWN0ZWQgdG8gbm90IGdlbmVyYXRlIGFueSBzc3RhdGUgZmlsZXMgdGhhdCB3b3VsZCBiZSByZW1vdmVkIGJ5IHNzdGF0ZS1jYWNoZS1tYW5hZ2VtZW50LnNoIChzdWNoIGFzIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBNQUNISU5FKQotICAgIGRlZiBydW5fdGVzdF9zc3RhdGVfY2FjaGVfbWFuYWdlbWVudF9zY3JpcHQoc2VsZiwgdGFyZ2V0LCBnbG9iYWxfY29uZmlnPVsnJ10sIHRhcmdldF9jb25maWc9WycnXSwgaWdub3JlX3BhdHRlcm5zPVtdKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdsb2JhbF9jb25maWcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXJnZXRfY29uZmlnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGdsb2JhbF9jb25maWcpID09IGxlbih0YXJnZXRfY29uZmlnKSwgbXNnPSdMaXN0cyBnbG9iYWxfY29uZmlnIGFuZCB0YXJnZXRfY29uZmlnIHNob3VsZCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBlbGVtZW50cycpCi0gICAgICAgIHNlbGYuY29uZmlnX3NzdGF0ZSh0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlLCBhZGRfbG9jYWxfbWlycm9ycz1bc2VsZi5zc3RhdGVfcGF0aF0pCi0KLSAgICAgICAgIyBJZiBidWlsZGhpc3RvcnkgaXMgZW5hYmxlZCwgd2UgbmVlZCB0byBkaXNhYmxlIHZlcnNpb24tZ29pbmctYmFja3dhcmRzCi0gICAgICAgICMgUUEgY2hlY2tzIGZvciB0aGlzIHRlc3QuIEl0IG1heSByZXBvcnQgZXJyb3JzIG90aGVyd2lzZS4KLSAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKCdFUlJPUl9RQV9yZW1vdmUgPSAidmVyc2lvbi1nb2luZy1iYWNrd2FyZHMiJykKLQotICAgICAgICAjIEZvciBub3QgdGhpcyBvbmx5IGNoZWNrcyBpZiByYW5kb20gc3N0YXRlIHRhc2tzIGFyZSBoYW5kbGVkIGNvcnJlY3RseSBhcyBhIGdyb3VwLgotICAgICAgICAjIEluIHRoZSBmdXR1cmUgd2Ugc2hvdWxkIGFkZCBjb250cm9sIG92ZXIgd2hhdCB0YXNrcyB3ZSBjaGVjayBmb3IuCi0KLSAgICAgICAgc3N0YXRlX2FyY2hzX2xpc3QgPSBbXQotICAgICAgICBleHBlY3RlZF9yZW1haW5pbmdfc3N0YXRlID0gW10KLSAgICAgICAgZm9yIGlkeCBpbiByYW5nZShsZW4odGFyZ2V0X2NvbmZpZykpOgotICAgICAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGdsb2JhbF9jb25maWdbaWR4XSkKLSAgICAgICAgICAgIHNlbGYuYXBwZW5kX3JlY2lwZWluYyh0YXJnZXQsIHRhcmdldF9jb25maWdbaWR4XSkKLSAgICAgICAgICAgIHNzdGF0ZV9hcmNoID0gZ2V0X2JiX3ZhcignU1NUQVRFX1BLR0FSQ0gnLCB0YXJnZXQpCi0gICAgICAgICAgICBpZiBub3Qgc3N0YXRlX2FyY2ggaW4gc3N0YXRlX2FyY2hzX2xpc3Q6Ci0gICAgICAgICAgICAgICAgc3N0YXRlX2FyY2hzX2xpc3QuYXBwZW5kKHNzdGF0ZV9hcmNoKQotICAgICAgICAgICAgaWYgdGFyZ2V0X2NvbmZpZ1tpZHhdID09IHRhcmdldF9jb25maWdbLTFdOgotICAgICAgICAgICAgICAgIHRhcmdldF9zc3RhdGVfYmVmb3JlX2J1aWxkID0gc2VsZi5zZWFyY2hfc3N0YXRlKHRhcmdldCArICcuKj9cLnRneiQnKQotICAgICAgICAgICAgYml0YmFrZSgiLWNjbGVhbiAlcyIgJSB0YXJnZXQpCi0gICAgICAgICAgICByZXN1bHQgPSBiaXRiYWtlKHRhcmdldCwgaWdub3JlX3N0YXR1cz1UcnVlKQotICAgICAgICAgICAgaWYgdGFyZ2V0X2NvbmZpZ1tpZHhdID09IHRhcmdldF9jb25maWdbLTFdOgotICAgICAgICAgICAgICAgIHRhcmdldF9zc3RhdGVfYWZ0ZXJfYnVpbGQgPSBzZWxmLnNlYXJjaF9zc3RhdGUodGFyZ2V0ICsgJy4qP1wudGd6JCcpCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWRfcmVtYWluaW5nX3NzdGF0ZSArPSBbeCBmb3IgeCBpbiB0YXJnZXRfc3N0YXRlX2FmdGVyX2J1aWxkIGlmIHggbm90IGluIHRhcmdldF9zc3RhdGVfYmVmb3JlX2J1aWxkIGlmIG5vdCBhbnkocGF0dGVybiBpbiB4IGZvciBwYXR0ZXJuIGluIGlnbm9yZV9wYXR0ZXJucyldCi0gICAgICAgICAgICBzZWxmLnJlbW92ZV9jb25maWcoZ2xvYmFsX2NvbmZpZ1tpZHhdKQotICAgICAgICAgICAgc2VsZi5yZW1vdmVfcmVjaXBlaW5jKHRhcmdldCwgdGFyZ2V0X2NvbmZpZ1tpZHhdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc3RhdHVzLCAwLCBtc2cgPSAiYnVpbGQgb2YgJXMgZmFpbGVkIHdpdGggJXMiICUgKHRhcmdldCwgcmVzdWx0Lm91dHB1dCkpCi0KLSAgICAgICAgcnVuQ21kKCJzc3RhdGUtY2FjaGUtbWFuYWdlbWVudC5zaCAteSAtLWNhY2hlLWRpcj0lcyAtLXJlbW92ZS1kdXBsaWNhdGVkIC0tZXh0cmEtYXJjaHM9JXMiICUgKHNlbGYuc3N0YXRlX3BhdGgsICcsJy5qb2luKG1hcChzdHIsIHNzdGF0ZV9hcmNoc19saXN0KSkpKQotICAgICAgICBhY3R1YWxfcmVtYWluaW5nX3NzdGF0ZSA9IFt4IGZvciB4IGluIHNlbGYuc2VhcmNoX3NzdGF0ZSh0YXJnZXQgKyAnLio/XC50Z3okJykgaWYgbm90IGFueShwYXR0ZXJuIGluIHggZm9yIHBhdHRlcm4gaW4gaWdub3JlX3BhdHRlcm5zKV0KLQotICAgICAgICBhY3R1YWxfbm90X2V4cGVjdGVkID0gW3ggZm9yIHggaW4gYWN0dWFsX3JlbWFpbmluZ19zc3RhdGUgaWYgeCBub3QgaW4gZXhwZWN0ZWRfcmVtYWluaW5nX3NzdGF0ZV0KLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhY3R1YWxfbm90X2V4cGVjdGVkLCBtc2c9IkZpbGVzIHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCBidXQgd2FyZSBub3Q6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCBhY3R1YWxfbm90X2V4cGVjdGVkKSkpCi0gICAgICAgIGV4cGVjdGVkX25vdF9hY3R1YWwgPSBbeCBmb3IgeCBpbiBleHBlY3RlZF9yZW1haW5pbmdfc3N0YXRlIGlmIHggbm90IGluIGFjdHVhbF9yZW1haW5pbmdfc3N0YXRlXQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV4cGVjdGVkX25vdF9hY3R1YWwsIG1zZz0iRXh0cmEgZmlsZXMgd2FyZSByZW1vdmVkOiAlcyIgJywgJy5qb2luKG1hcChzdHIsIGV4cGVjdGVkX25vdF9hY3R1YWwpKSkKLQotICAgIEB0ZXN0Y2FzZSg5NzMpCi0gICAgZGVmIHRlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0X3VzaW5nX3ByXzEoc2VsZik6Ci0gICAgICAgIGdsb2JhbF9jb25maWcgPSBbXQotICAgICAgICB0YXJnZXRfY29uZmlnID0gW10KLSAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJycpCi0gICAgICAgIHRhcmdldF9jb25maWcuYXBwZW5kKCdQUiA9ICIwIicpCi0gICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0KCdtNCcsIGdsb2JhbF9jb25maWcsICB0YXJnZXRfY29uZmlnLCBpZ25vcmVfcGF0dGVybnM9Wydwb3B1bGF0ZV9saWMnXSkKLQotICAgIEB0ZXN0Y2FzZSg5NzgpCi0gICAgZGVmIHRlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0X3VzaW5nX3ByXzIoc2VsZik6Ci0gICAgICAgIGdsb2JhbF9jb25maWcgPSBbXQotICAgICAgICB0YXJnZXRfY29uZmlnID0gW10KLSAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJycpCi0gICAgICAgIHRhcmdldF9jb25maWcuYXBwZW5kKCdQUiA9ICIwIicpCi0gICAgICAgIGdsb2JhbF9jb25maWcuYXBwZW5kKCcnKQotICAgICAgICB0YXJnZXRfY29uZmlnLmFwcGVuZCgnUFIgPSAiMSInKQotICAgICAgICBzZWxmLnJ1bl90ZXN0X3NzdGF0ZV9jYWNoZV9tYW5hZ2VtZW50X3NjcmlwdCgnbTQnLCBnbG9iYWxfY29uZmlnLCAgdGFyZ2V0X2NvbmZpZywgaWdub3JlX3BhdHRlcm5zPVsncG9wdWxhdGVfbGljJ10pCi0KLSAgICBAdGVzdGNhc2UoOTc5KQotICAgIGRlZiB0ZXN0X3NzdGF0ZV9jYWNoZV9tYW5hZ2VtZW50X3NjcmlwdF91c2luZ19wcl8zKHNlbGYpOgotICAgICAgICBnbG9iYWxfY29uZmlnID0gW10KLSAgICAgICAgdGFyZ2V0X2NvbmZpZyA9IFtdCi0gICAgICAgIGdsb2JhbF9jb25maWcuYXBwZW5kKCdNQUNISU5FID0gInFlbXV4ODYtNjQiJykKLSAgICAgICAgdGFyZ2V0X2NvbmZpZy5hcHBlbmQoJ1BSID0gIjAiJykKLSAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoZ2xvYmFsX2NvbmZpZ1swXSkKLSAgICAgICAgdGFyZ2V0X2NvbmZpZy5hcHBlbmQoJ1BSID0gIjEiJykKLSAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJ01BQ0hJTkUgPSAicWVtdXg4NiInKQotICAgICAgICB0YXJnZXRfY29uZmlnLmFwcGVuZCgnUFIgPSAiMSInKQotICAgICAgICBzZWxmLnJ1bl90ZXN0X3NzdGF0ZV9jYWNoZV9tYW5hZ2VtZW50X3NjcmlwdCgnbTQnLCBnbG9iYWxfY29uZmlnLCAgdGFyZ2V0X2NvbmZpZywgaWdub3JlX3BhdHRlcm5zPVsncG9wdWxhdGVfbGljJ10pCi0KLSAgICBAdGVzdGNhc2UoOTc0KQotICAgIGRlZiB0ZXN0X3NzdGF0ZV9jYWNoZV9tYW5hZ2VtZW50X3NjcmlwdF91c2luZ19tYWNoaW5lKHNlbGYpOgotICAgICAgICBnbG9iYWxfY29uZmlnID0gW10KLSAgICAgICAgdGFyZ2V0X2NvbmZpZyA9IFtdCi0gICAgICAgIGdsb2JhbF9jb25maWcuYXBwZW5kKCdNQUNISU5FID0gInFlbXV4ODYtNjQiJykKLSAgICAgICAgdGFyZ2V0X2NvbmZpZy5hcHBlbmQoJycpCi0gICAgICAgIGdsb2JhbF9jb25maWcuYXBwZW5kKCdNQUNISU5FID0gInFlbXV4ODYiJykKLSAgICAgICAgdGFyZ2V0X2NvbmZpZy5hcHBlbmQoJycpCi0gICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0KCdtNCcsIGdsb2JhbF9jb25maWcsICB0YXJnZXRfY29uZmlnLCBpZ25vcmVfcGF0dGVybnM9Wydwb3B1bGF0ZV9saWMnXSkKLQotICAgIEB0ZXN0Y2FzZSgxMjcwKQotICAgIGRlZiB0ZXN0X3NzdGF0ZV8zMl82NF9zYW1lX2hhc2goc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBUaGUgc3N0YXRlIGNoZWNrc3VtcyBmb3IgYm90aCBuYXRpdmUgYW5kIHRhcmdldCBzaG91bGQgbm90IHZhcnkgd2hldGhlcgotICAgICAgICB0aGV5J3JlIGJ1aWx0IG9uIGEgMzIgb3IgNjQgYml0IHN5c3RlbS4gUmF0aGVyIHRoYW4gcmVxdWlyaW5nIHR3byBkaWZmZXJlbnQKLSAgICAgICAgYnVpbGQgbWFjaGluZXMgYW5kIHJ1bm5pbmcgYSBidWlsZHMsIG92ZXJyaWRlIHRoZSB2YXJpYWJsZXMgY2FsbGluZyB1bmFtZSgpCi0gICAgICAgIG1hbnVhbGx5IGFuZCBjaGVjayB1c2luZyBiaXRiYWtlIC1TLgotICAgICAgICAiIiIKLQotICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiIKLU1BQ0hJTkUgPSAicWVtdXg4NiIKLVRNUERJUiA9ICIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoIgotQlVJTERfQVJDSCA9ICJ4ODZfNjQiCi1CVUlMRF9PUyA9ICJsaW51eCIKLVNES01BQ0hJTkUgPSAieDg2XzY0IgotUEFDS0FHRV9DTEFTU0VTID0gInBhY2thZ2VfcnBtIHBhY2thZ2VfaXBrIHBhY2thZ2VfZGViIgotIiIiKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYudG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2giKQotICAgICAgICBiaXRiYWtlKCJjb3JlLWltYWdlLXNhdG8gLVMgbm9uZSIpCi0gICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIgotTUFDSElORSA9ICJxZW11eDg2IgotVE1QRElSID0gIiR7VE9QRElSfS90bXAtc3N0YXRlc2FtZWhhc2gyIgotQlVJTERfQVJDSCA9ICJpNjg2IgotQlVJTERfT1MgPSAibGludXgiCi1TREtNQUNISU5FID0gImk2ODYiCi1QQUNLQUdFX0NMQVNTRVMgPSAicGFja2FnZV9ycG0gcGFja2FnZV9pcGsgcGFja2FnZV9kZWIiCi0iIiIpCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi50b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaDIiKQotICAgICAgICBiaXRiYWtlKCJjb3JlLWltYWdlLXNhdG8gLVMgbm9uZSIpCi0KLSAgICAgICAgZGVmIGdldF9maWxlcyhkKToKLSAgICAgICAgICAgIGYgPSBbXQotICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoZCk6Ci0gICAgICAgICAgICAgICAgaWYgImNvcmUtaW1hZ2Utc2F0byIgaW4gcm9vdDoKLSAgICAgICAgICAgICAgICAgICAgIyBTREtNQUNISU5FIGNoYW5naW5nIHdpbGwgY2hhbmdlCi0gICAgICAgICAgICAgICAgICAgICMgZG9fcm9vdGZzL2RvX3Rlc3RpbWFnZS9kb19idWlsZCBzdGFtcHMgb2YgaW1hZ2VzIHdoaWNoCi0gICAgICAgICAgICAgICAgICAgICMgaXMgc2FmZSB0byBpZ25vcmUuCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgZi5leHRlbmQob3MucGF0aC5qb2luKHJvb3QsIG5hbWUpIGZvciBuYW1lIGluIGZpbGVzKQotICAgICAgICAgICAgcmV0dXJuIGYKLSAgICAgICAgZmlsZXMxID0gZ2V0X2ZpbGVzKHNlbGYudG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gvc3RhbXBzLyIpCi0gICAgICAgIGZpbGVzMiA9IGdldF9maWxlcyhzZWxmLnRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMi9zdGFtcHMvIikKLSAgICAgICAgZmlsZXMyID0gW3gucmVwbGFjZSgidG1wLXNzdGF0ZXNhbWVoYXNoMiIsICJ0bXAtc3N0YXRlc2FtZWhhc2giKS5yZXBsYWNlKCJpNjg2LWxpbnV4IiwgIng4Nl82NC1saW51eCIpLnJlcGxhY2UoImk2ODYiICsgc2VsZi50YXJnZXRfdmVuZG9yICsgIi1saW51eCIsICJ4ODZfNjQiICsgc2VsZi50YXJnZXRfdmVuZG9yICsgIi1saW51eCIsICkgZm9yIHggaW4gZmlsZXMyXQotICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCi0gICAgICAgIHNlbGYuYXNzZXJ0Q291bnRFcXVhbChmaWxlczEsIGZpbGVzMikKLQotCi0gICAgQHRlc3RjYXNlKDEyNzEpCi0gICAgZGVmIHRlc3Rfc3N0YXRlX25hdGl2ZWxzYnN0cmluZ19zYW1lX2hhc2goc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBUaGUgc3N0YXRlIGNoZWNrc3VtcyBzaG91bGQgYmUgaW5kZXBlbmRlbnQgb2Ygd2hpY2hldmVyIE5BVElWRUxTQlNUUklORyBpcwotICAgICAgICBkZXRlY3RlZC4gUmF0aGVyIHRoYW4gcmVxdWlyaW5nIHR3byBkaWZmZXJlbnQgYnVpbGQgbWFjaGluZXMgYW5kIHJ1bm5pbmcKLSAgICAgICAgYnVpbGRzLCBvdmVycmlkZSB0aGUgdmFyaWFibGVzIG1hbnVhbGx5IGFuZCBjaGVjayB1c2luZyBiaXRiYWtlIC1TLgotICAgICAgICAiIiIKLQotICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiIKLVRNUERJUiA9IFwiJHtUT1BESVJ9L3RtcC1zc3RhdGVzYW1laGFzaFwiCi1OQVRJVkVMU0JTVFJJTkcgPSBcIkRpc3Ryb0FcIgotIiIiKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYudG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2giKQotICAgICAgICBiaXRiYWtlKCJjb3JlLWltYWdlLXNhdG8gLVMgbm9uZSIpCi0gICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIgotVE1QRElSID0gXCIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoMlwiCi1OQVRJVkVMU0JTVFJJTkcgPSBcIkRpc3Ryb0JcIgotIiIiKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYudG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gyIikKLSAgICAgICAgYml0YmFrZSgiY29yZS1pbWFnZS1zYXRvIC1TIG5vbmUiKQotCi0gICAgICAgIGRlZiBnZXRfZmlsZXMoZCk6Ci0gICAgICAgICAgICBmID0gW10KLSAgICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGQpOgotICAgICAgICAgICAgICAgIGYuZXh0ZW5kKG9zLnBhdGguam9pbihyb290LCBuYW1lKSBmb3IgbmFtZSBpbiBmaWxlcykKLSAgICAgICAgICAgIHJldHVybiBmCi0gICAgICAgIGZpbGVzMSA9IGdldF9maWxlcyhzZWxmLnRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoL3N0YW1wcy8iKQotICAgICAgICBmaWxlczIgPSBnZXRfZmlsZXMoc2VsZi50b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaDIvc3RhbXBzLyIpCi0gICAgICAgIGZpbGVzMiA9IFt4LnJlcGxhY2UoInRtcC1zc3RhdGVzYW1laGFzaDIiLCAidG1wLXNzdGF0ZXNhbWVoYXNoIikgZm9yIHggaW4gZmlsZXMyXQotICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCi0gICAgICAgIHNlbGYuYXNzZXJ0Q291bnRFcXVhbChmaWxlczEsIGZpbGVzMikKLQotICAgIEB0ZXN0Y2FzZSgxMzY4KQotICAgIGRlZiB0ZXN0X3NzdGF0ZV9hbGxhcmNoX3NhbWVzaWdzKHNlbGYpOgotICAgICAgICAiIiIKLSAgICAgICAgVGhlIHNzdGF0ZSBjaGVja3N1bXMgb2YgYWxsYXJjaCBwYWNrYWdlcyBzaG91bGQgYmUgaW5kZXBlbmRlbnQgb2Ygd2hpY2hldmVyCi0gICAgICAgIE1BQ0hJTkUgaXMgc2V0LiBDaGVjayB0aGlzIHVzaW5nIGJpdGJha2UgLVMuCi0gICAgICAgIEFsc28sIHJhdGhlciB0aGFuIGR1cGxpY2F0ZSB0aGUgdGVzdCwgY2hlY2sgbmF0aXZlc2RrIHN0YW1wcyBhcmUgdGhlIHNhbWUgYmV0d2VlbgotICAgICAgICB0aGUgdHdvIE1BQ0hJTkUgdmFsdWVzLgotICAgICAgICAiIiIKLQotICAgICAgICBjb25maWdBID0gIiIiCi1UTVBESVIgPSBcIiR7VE9QRElSfS90bXAtc3N0YXRlc2FtZWhhc2hcIgotTUFDSElORSA9IFwicWVtdXg4Ni02NFwiCi0iIiIKLSAgICAgICAgY29uZmlnQiA9ICIiIgotVE1QRElSID0gXCIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoMlwiCi1NQUNISU5FID0gXCJxZW11YXJtXCIKLSIiIgotICAgICAgICBzZWxmLnNzdGF0ZV9hbGxhcmNoX3NhbWVzaWdzKGNvbmZpZ0EsIGNvbmZpZ0IpCi0KLSAgICBkZWYgdGVzdF9zc3RhdGVfYWxsYXJjaF9zYW1lc2lnc19tdWx0aWxpYihzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFRoZSBzc3RhdGUgY2hlY2tzdW1zIG9mIGFsbGFyY2ggbXVsdGlsaWIgcGFja2FnZXMgc2hvdWxkIGJlIGluZGVwZW5kZW50IG9mIHdoaWNoZXZlcgotICAgICAgICBNQUNISU5FIGlzIHNldC4gQ2hlY2sgdGhpcyB1c2luZyBiaXRiYWtlIC1TLgotICAgICAgICBBbHNvLCByYXRoZXIgdGhhbiBkdXBsaWNhdGUgdGhlIHRlc3QsIGNoZWNrIG5hdGl2ZXNkayBzdGFtcHMgYXJlIHRoZSBzYW1lIGJldHdlZW4KLSAgICAgICAgdGhlIHR3byBNQUNISU5FIHZhbHVlcy4KLSAgICAgICAgIiIiCi0KLSAgICAgICAgY29uZmlnQSA9ICIiIgotVE1QRElSID0gXCIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoXCIKLU1BQ0hJTkUgPSBcInFlbXV4ODYtNjRcIgotcmVxdWlyZSBjb25mL211bHRpbGliLmNvbmYKLU1VTFRJTElCUyA9IFwibXVsdGlsaWI6bGliMzJcIgotREVGQVVMVFRVTkVfdmlydGNsYXNzLW11bHRpbGliLWxpYjMyID0gXCJ4ODZcIgotIiIiCi0gICAgICAgIGNvbmZpZ0IgPSAiIiIKLVRNUERJUiA9IFwiJHtUT1BESVJ9L3RtcC1zc3RhdGVzYW1laGFzaDJcIgotTUFDSElORSA9IFwicWVtdWFybVwiCi1yZXF1aXJlIGNvbmYvbXVsdGlsaWIuY29uZgotTVVMVElMSUJTID0gXCJcIgotIiIiCi0gICAgICAgIHNlbGYuc3N0YXRlX2FsbGFyY2hfc2FtZXNpZ3MoY29uZmlnQSwgY29uZmlnQikKLQotICAgIGRlZiBzc3RhdGVfYWxsYXJjaF9zYW1lc2lncyhzZWxmLCBjb25maWdBLCBjb25maWdCKToKLQotICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhjb25maWdBKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYudG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2giKQotICAgICAgICBiaXRiYWtlKCJ3b3JsZCBtZXRhLXRvb2xjaGFpbiAtUyBub25lIikKLSAgICAgICAgc2VsZi53cml0ZV9jb25maWcoY29uZmlnQikKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLnRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMiIpCi0gICAgICAgIGJpdGJha2UoIndvcmxkIG1ldGEtdG9vbGNoYWluIC1TIG5vbmUiKQotCi0gICAgICAgIGRlZiBnZXRfZmlsZXMoZCk6Ci0gICAgICAgICAgICBmID0ge30KLSAgICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGQpOgotICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgotICAgICAgICAgICAgICAgICAgICBpZiAibWV0YS1lbnZpcm9ubWVudCIgaW4gcm9vdCBvciAiY3Jvc3MtY2FuYWRpYW4iIGluIHJvb3Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICBpZiAiZG9fYnVpbGQiIG5vdCBpbiBuYW1lOgotICAgICAgICAgICAgICAgICAgICAgICAgIyAxLjQuMStnaXRBVVRPSU5DKzMwMmZjYTlmNGMtcjAuZG9fcGFja2FnZV93cml0ZV9pcGsuc2lnZGF0YS5mM2EyYTM4Njk3ZGE3NDNmMGRiZWQ4YjU2YWFmY2Y3OQotICAgICAgICAgICAgICAgICAgICAgICAgKF8sIHRhc2ssIF8sIHNoYXNoKSA9IG5hbWUucnNwbGl0KCIuIiwgMykKLSAgICAgICAgICAgICAgICAgICAgICAgIGZbb3MucGF0aC5qb2luKG9zLnBhdGguYmFzZW5hbWUocm9vdCksIHRhc2spXSA9IHNoYXNoCi0gICAgICAgICAgICByZXR1cm4gZgotICAgICAgICBmaWxlczEgPSBnZXRfZmlsZXMoc2VsZi50b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaC9zdGFtcHMvYWxsIiArIHNlbGYudGFyZ2V0X3ZlbmRvciArICItIiArIHNlbGYudGFyZ2V0X29zKQotICAgICAgICBmaWxlczIgPSBnZXRfZmlsZXMoc2VsZi50b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaDIvc3RhbXBzL2FsbCIgKyBzZWxmLnRhcmdldF92ZW5kb3IgKyAiLSIgKyBzZWxmLnRhcmdldF9vcykKLSAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzMSwgZmlsZXMyKQotCi0gICAgICAgIG5hdGl2ZXNka2RpciA9IG9zLnBhdGguYmFzZW5hbWUoZ2xvYi5nbG9iKHNlbGYudG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gvc3RhbXBzLyotbmF0aXZlc2RrKi1saW51eCIpWzBdKQotCi0gICAgICAgIGZpbGVzMSA9IGdldF9maWxlcyhzZWxmLnRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoL3N0YW1wcy8iICsgbmF0aXZlc2RrZGlyKQotICAgICAgICBmaWxlczIgPSBnZXRfZmlsZXMoc2VsZi50b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaDIvc3RhbXBzLyIgKyBuYXRpdmVzZGtkaXIpCi0gICAgICAgIHNlbGYubWF4RGlmZiA9IE5vbmUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlczEsIGZpbGVzMikKLQotICAgIEB0ZXN0Y2FzZSgxMzY5KQotICAgIGRlZiB0ZXN0X3NzdGF0ZV9zYW1ldHVuZV9zYW1lc2lncyhzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFRoZSBzc3RhdGUgY2hlY2tzdW1zIG9mIHR3byBpZGVudGljYWwgbWFjaGluZXMgKHVzaW5nIHRoZSBzYW1lIHR1bmUpIHNob3VsZCBiZSB0aGUKLSAgICAgICAgc2FtZSwgYXBhcnQgZnJvbSBjaGFuZ2VzIHdpdGhpbiB0aGUgbWFjaGluZSBzcGVjaWZpYyBzdGFtcHMgZGlyZWN0b3J5LiBXZSB1c2UgdGhlCi0gICAgICAgIHFlbXV4ODZjb3B5IG1hY2hpbmUgdG8gdGVzdCB0aGlzLiBBbHNvIGluY2x1ZGUgbXVsdGlsaWJzIGluIHRoZSB0ZXN0LgotICAgICAgICAiIiIKLQotICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiIKLVRNUERJUiA9IFwiJHtUT1BESVJ9L3RtcC1zc3RhdGVzYW1laGFzaFwiCi1NQUNISU5FID0gXCJxZW11eDg2XCIKLXJlcXVpcmUgY29uZi9tdWx0aWxpYi5jb25mCi1NVUxUSUxJQlMgPSAibXVsdGlsaWI6bGliMzIiCi1ERUZBVUxUVFVORV92aXJ0Y2xhc3MtbXVsdGlsaWItbGliMzIgPSAieDg2IgotIiIiKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYudG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2giKQotICAgICAgICBiaXRiYWtlKCJ3b3JsZCBtZXRhLXRvb2xjaGFpbiAtUyBub25lIikKLSAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiCi1UTVBESVIgPSBcIiR7VE9QRElSfS90bXAtc3N0YXRlc2FtZWhhc2gyXCIKLU1BQ0hJTkUgPSBcInFlbXV4ODZjb3B5XCIKLXJlcXVpcmUgY29uZi9tdWx0aWxpYi5jb25mCi1NVUxUSUxJQlMgPSAibXVsdGlsaWI6bGliMzIiCi1ERUZBVUxUVFVORV92aXJ0Y2xhc3MtbXVsdGlsaWItbGliMzIgPSAieDg2IgotIiIiKQotICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYudG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gyIikKLSAgICAgICAgYml0YmFrZSgid29ybGQgbWV0YS10b29sY2hhaW4gLVMgbm9uZSIpCi0KLSAgICAgICAgZGVmIGdldF9maWxlcyhkKToKLSAgICAgICAgICAgIGYgPSBbXQotICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoZCk6Ci0gICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6Ci0gICAgICAgICAgICAgICAgICAgIGlmICJtZXRhLWVudmlyb25tZW50IiBpbiByb290IG9yICJjcm9zcy1jYW5hZGlhbiIgaW4gcm9vdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIGlmICJxZW11eDg2Y29weS0iIGluIHJvb3Qgb3IgInFlbXV4ODYtIiBpbiByb290OgotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgaWYgImRvX2J1aWxkIiBub3QgaW4gbmFtZSBhbmQgImRvX3BvcHVsYXRlX3NkayIgbm90IGluIG5hbWU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmLmFwcGVuZChvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gZgotICAgICAgICBmaWxlczEgPSBnZXRfZmlsZXMoc2VsZi50b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaC9zdGFtcHMiKQotICAgICAgICBmaWxlczIgPSBnZXRfZmlsZXMoc2VsZi50b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaDIvc3RhbXBzIikKLSAgICAgICAgZmlsZXMyID0gW3gucmVwbGFjZSgidG1wLXNzdGF0ZXNhbWVoYXNoMiIsICJ0bXAtc3N0YXRlc2FtZWhhc2giKSBmb3IgeCBpbiBmaWxlczJdCi0gICAgICAgIHNlbGYubWF4RGlmZiA9IE5vbmUKLSAgICAgICAgc2VsZi5hc3NlcnRDb3VudEVxdWFsKGZpbGVzMSwgZmlsZXMyKQotCi0KLSAgICBkZWYgdGVzdF9zc3RhdGVfbm9vcF9zYW1lc2lncyhzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFRoZSBzc3RhdGUgY2hlY2tzdW1zIG9mIHR3byBidWlsZHMgd2l0aCB0aGVzZSB2YXJpYWJsZXMgY2hhbmdlZCBvcgotICAgICAgICBjbGFzc2VzIGluaGVyaXRzIHNob3VsZCBiZSB0aGUgc2FtZS4KLSAgICAgICAgIiIiCi0KLSAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiCi1UTVBESVIgPSAiJHtUT1BESVJ9L3RtcC1zc3RhdGVzYW1laGFzaCIKLUJCX05VTUJFUl9USFJFQURTID0gIjEiCi1QQVJBTExFTF9NQUtFID0gIi1qIDEiCi1ETF9ESVIgPSAiJHtUT1BESVJ9L2Rvd25sb2FkMSIKLVRJTUUgPSAiMTExMTExIgotREFURSA9ICIyMDE2MTExMSIKLUlOSEVSSVRfcmVtb3ZlID0gImJ1aWxkc3RhdHMtc3VtbWFyeSBidWlsZGhpc3RvcnkgdW5pbmF0aXZlIgotaHR0cF9wcm94eSA9ICIiCi0iIiIpCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi50b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaCIpCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi50b3BkaXIgKyAiL2Rvd25sb2FkMSIpCi0gICAgICAgIGJpdGJha2UoIndvcmxkIG1ldGEtdG9vbGNoYWluIC1TIG5vbmUiKQotICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiIKLVRNUERJUiA9ICIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoMiIKLUJCX05VTUJFUl9USFJFQURTID0gIjIiCi1QQVJBTExFTF9NQUtFID0gIi1qIDIiCi1ETF9ESVIgPSAiJHtUT1BESVJ9L2Rvd25sb2FkMiIKLVRJTUUgPSAiMjIyMjIyIgotREFURSA9ICIyMDE2MTIxMiIKLSMgQWx3YXlzIHJlbW92ZSB1bmluYXRpdmUgYXMgd2UncmUgY2hhbmdpbmcgcHJveGllcwotSU5IRVJJVF9yZW1vdmUgPSAidW5pbmF0aXZlIgotSU5IRVJJVCArPSAiYnVpbGRzdGF0cy1zdW1tYXJ5IGJ1aWxkaGlzdG9yeSIKLWh0dHBfcHJveHkgPSAiaHR0cDovL2V4YW1wbGUuY29tLyIKLSIiIikKLSAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLnRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMiIpCi0gICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi50b3BkaXIgKyAiL2Rvd25sb2FkMiIpCi0gICAgICAgIGJpdGJha2UoIndvcmxkIG1ldGEtdG9vbGNoYWluIC1TIG5vbmUiKQotCi0gICAgICAgIGRlZiBnZXRfZmlsZXMoZCk6Ci0gICAgICAgICAgICBmID0ge30KLSAgICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGQpOgotICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgotICAgICAgICAgICAgICAgICAgICBuYW1lLCBzaGFzaCA9IG5hbWUucnNwbGl0KCcuJywgMSkKLSAgICAgICAgICAgICAgICAgICAgIyBFeHRyYWN0IGp1c3QgdGhlIG1hY2hpbmUgYW5kIHJlY2lwZSBuYW1lCi0gICAgICAgICAgICAgICAgICAgIGJhc2UgPSBvcy5zZXAuam9pbihyb290LnJzcGxpdChvcy5zZXAsIDIpWy0yOl0gKyBbbmFtZV0pCi0gICAgICAgICAgICAgICAgICAgIGZbYmFzZV0gPSBzaGFzaAotICAgICAgICAgICAgcmV0dXJuIGYKLSAgICAgICAgZmlsZXMxID0gZ2V0X2ZpbGVzKHNlbGYudG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gvc3RhbXBzLyIpCi0gICAgICAgIGZpbGVzMiA9IGdldF9maWxlcyhzZWxmLnRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMi9zdGFtcHMvIikKLSAgICAgICAgIyBSZW1vdmUgaXRlbXMgdGhhdCBhcmUgaWRlbnRpY2FsIGluIGJvdGggc2V0cwotICAgICAgICBmb3Igayx2IGluIGZpbGVzMS5pdGVtcygpICYgZmlsZXMyLml0ZW1zKCk6Ci0gICAgICAgICAgICBkZWwgZmlsZXMxW2tdCi0gICAgICAgICAgICBkZWwgZmlsZXMyW2tdCi0gICAgICAgIGlmIG5vdCBmaWxlczEgYW5kIG5vdCBmaWxlczI6Ci0gICAgICAgICAgICAjIE5vIGNoYW5nZXMsIHNvIHdlJ3JlIGRvbmUKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGZvciBrIGluIGZpbGVzMS5rZXlzKCkgfCBmaWxlczIua2V5cygpOgotICAgICAgICAgICAgaWYgayBpbiBmaWxlczEgYW5kIGsgaW4gZmlsZXMyOgotICAgICAgICAgICAgICAgIHByaW50KCIlcyBkaWZmZXJzOiIgJSBrKQotICAgICAgICAgICAgICAgIHByaW50KHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCgiYml0YmFrZS1kaWZmc2lncyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gvc3RhbXBzLyIgKyBrICsgIi4iICsgZmlsZXMxW2tdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMi9zdGFtcHMvIiArIGsgKyAiLiIgKyBmaWxlczJba10pKSkKLSAgICAgICAgICAgIGVsaWYgayBpbiBmaWxlczEgYW5kIGsgbm90IGluIGZpbGVzMjoKLSAgICAgICAgICAgICAgICBwcmludCgiJXMgaW4gZmlsZXMxIiAlIGspCi0gICAgICAgICAgICBlbGlmIGsgbm90IGluIGZpbGVzMSBhbmQgayBpbiBmaWxlczI6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIiVzIGluIGZpbGVzMiIgJSBrKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBhc3NlcnQgInNob3VsZG4ndCByZWFjaCBoZXJlIgotICAgICAgICBzZWxmLmZhaWwoInNzdGF0ZSBoYXNoZXMgbm90IGlkZW50aWNhbC4iKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvdGluZm9pbC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3RpbmZvaWwucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczYTBjM2IuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvdGluZm9pbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi1pbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBvcwotaW1wb3J0IHJlCi1pbXBvcnQgYmIudGluZm9pbAotCi1mcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAotZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQKLWZyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQotCi1jbGFzcyBUaW5mb2lsVGVzdHMob2VTZWxmVGVzdCk6Ci0gICAgIiIiIEJhc2ljIHRlc3RzIGZvciB0aGUgdGluZm9pbCBBUEkgIiIiCi0KLSAgICBAdGVzdGNhc2UoMTU2OCkKLSAgICBkZWYgdGVzdF9nZXR2YXIoc2VsZik6Ci0gICAgICAgIHdpdGggYmIudGluZm9pbC5UaW5mb2lsKCkgYXMgdGluZm9pbDoKLSAgICAgICAgICAgIHRpbmZvaWwucHJlcGFyZShUcnVlKQotICAgICAgICAgICAgbWFjaGluZSA9IHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdNQUNISU5FJykKLSAgICAgICAgICAgIGlmIG5vdCBtYWNoaW5lOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5hYmxlIHRvIGdldCBNQUNISU5FIHZhbHVlIC0gcmV0dXJuZWQgJXMnICUgbWFjaGluZSkKLQotICAgIEB0ZXN0Y2FzZSgxNTY5KQotICAgIGRlZiB0ZXN0X2V4cGFuZChzZWxmKToKLSAgICAgICAgd2l0aCBiYi50aW5mb2lsLlRpbmZvaWwoKSBhcyB0aW5mb2lsOgotICAgICAgICAgICAgdGluZm9pbC5wcmVwYXJlKFRydWUpCi0gICAgICAgICAgICBleHByID0gJyR7QG9zLmdldHBpZCgpfScKLSAgICAgICAgICAgIHBpZCA9IHRpbmZvaWwuY29uZmlnX2RhdGEuZXhwYW5kKGV4cHIpCi0gICAgICAgICAgICBpZiBub3QgcGlkOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5hYmxlIHRvIGV4cGFuZCAiJXMiIC0gcmV0dXJuZWQgJXMnICUgKGV4cHIsIHBpZCkpCi0KLSAgICBAdGVzdGNhc2UoMTU3MCkKLSAgICBkZWYgdGVzdF9nZXR2YXJfYmJfb3JpZ2VudihzZWxmKToKLSAgICAgICAgd2l0aCBiYi50aW5mb2lsLlRpbmZvaWwoKSBhcyB0aW5mb2lsOgotICAgICAgICAgICAgdGluZm9pbC5wcmVwYXJlKFRydWUpCi0gICAgICAgICAgICBvcmlnZW52ID0gdGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ0JCX09SSUdFTlYnLCBGYWxzZSkKLSAgICAgICAgICAgIGlmIG5vdCBvcmlnZW52OgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5hYmxlIHRvIGdldCBCQl9PUklHRU5WIHZhbHVlIC0gcmV0dXJuZWQgJXMnICUgb3JpZ2VudikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZ2Vudi5nZXRWYXIoJ0hPTUUnLCBGYWxzZSksIG9zLmVudmlyb25bJ0hPTUUnXSkKLQotICAgIEB0ZXN0Y2FzZSgxNTcxKQotICAgIGRlZiB0ZXN0X3BhcnNlX3JlY2lwZShzZWxmKToKLSAgICAgICAgd2l0aCBiYi50aW5mb2lsLlRpbmZvaWwoKSBhcyB0aW5mb2lsOgotICAgICAgICAgICAgdGluZm9pbC5wcmVwYXJlKGNvbmZpZ19vbmx5PUZhbHNlLCBxdWlldD0yKQotICAgICAgICAgICAgdGVzdHJlY2lwZSA9ICdtZGFkbScKLSAgICAgICAgICAgIGJlc3QgPSB0aW5mb2lsLmZpbmRfYmVzdF9wcm92aWRlcih0ZXN0cmVjaXBlKQotICAgICAgICAgICAgaWYgbm90IGJlc3Q6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmFibGUgdG8gZmluZCByZWNpcGUgcHJvdmlkaW5nICVzJyAlIHRlc3RyZWNpcGUpCi0gICAgICAgICAgICByZCA9IHRpbmZvaWwucGFyc2VfcmVjaXBlX2ZpbGUoYmVzdFszXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdHJlY2lwZSwgcmQuZ2V0VmFyKCdQTicpKQotCi0gICAgQHRlc3RjYXNlKDE1NzIpCi0gICAgZGVmIHRlc3RfcGFyc2VfcmVjaXBlX2NvcHlfZXhwYW5kKHNlbGYpOgotICAgICAgICB3aXRoIGJiLnRpbmZvaWwuVGluZm9pbCgpIGFzIHRpbmZvaWw6Ci0gICAgICAgICAgICB0aW5mb2lsLnByZXBhcmUoY29uZmlnX29ubHk9RmFsc2UsIHF1aWV0PTIpCi0gICAgICAgICAgICB0ZXN0cmVjaXBlID0gJ21kYWRtJwotICAgICAgICAgICAgYmVzdCA9IHRpbmZvaWwuZmluZF9iZXN0X3Byb3ZpZGVyKHRlc3RyZWNpcGUpCi0gICAgICAgICAgICBpZiBub3QgYmVzdDoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1VuYWJsZSB0byBmaW5kIHJlY2lwZSBwcm92aWRpbmcgJXMnICUgdGVzdHJlY2lwZSkKLSAgICAgICAgICAgIHJkID0gdGluZm9pbC5wYXJzZV9yZWNpcGVfZmlsZShiZXN0WzNdKQotICAgICAgICAgICAgIyBDaGVjayB3ZSBjYW4gZ2V0IHZhcmlhYmxlIHZhbHVlcwotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0cmVjaXBlLCByZC5nZXRWYXIoJ1BOJykpCi0gICAgICAgICAgICAjIENoZWNrIHRoYXQgZXhwYW5kaW5nIGEgdmFsdWUgdGhhdCBpbmNsdWRlcyBhIHZhcmlhYmxlIHJlZmVyZW5jZSB3b3JrcwotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0cmVjaXBlLCByZC5nZXRWYXIoJ0JQTicpKQotICAgICAgICAgICAgIyBOb3cgY2hlY2sgdGhhdCBjaGFuZ2luZyB0aGUgcmVmZXJlbmNlZCB2YXJpYWJsZSdzIHZhbHVlIGluIGEgY29weSBnaXZlcyB0aGF0Ci0gICAgICAgICAgICAjIHZhbHVlIHdoZW4gZXhwYW5kaW5nCi0gICAgICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkocmQpCi0gICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdQTicsICdoZWxsbycpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdoZWxsbycsIGxvY2FsZGF0YS5nZXRWYXIoJ0JQTicpKQotCi0gICAgQHRlc3RjYXNlKDE1NzMpCi0gICAgZGVmIHRlc3RfcGFyc2VfcmVjaXBlX2luaXRpYWxfZGF0YXN0b3JlKHNlbGYpOgotICAgICAgICB3aXRoIGJiLnRpbmZvaWwuVGluZm9pbCgpIGFzIHRpbmZvaWw6Ci0gICAgICAgICAgICB0aW5mb2lsLnByZXBhcmUoY29uZmlnX29ubHk9RmFsc2UsIHF1aWV0PTIpCi0gICAgICAgICAgICB0ZXN0cmVjaXBlID0gJ21kYWRtJwotICAgICAgICAgICAgYmVzdCA9IHRpbmZvaWwuZmluZF9iZXN0X3Byb3ZpZGVyKHRlc3RyZWNpcGUpCi0gICAgICAgICAgICBpZiBub3QgYmVzdDoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1VuYWJsZSB0byBmaW5kIHJlY2lwZSBwcm92aWRpbmcgJXMnICUgdGVzdHJlY2lwZSkKLSAgICAgICAgICAgIGRjb3B5ID0gYmIuZGF0YS5jcmVhdGVDb3B5KHRpbmZvaWwuY29uZmlnX2RhdGEpCi0gICAgICAgICAgICBkY29weS5zZXRWYXIoJ01ZVkFSSUFCTEUnLCAnc29tZXZhbHVlJykKLSAgICAgICAgICAgIHJkID0gdGluZm9pbC5wYXJzZV9yZWNpcGVfZmlsZShiZXN0WzNdLCBjb25maWdfZGF0YT1kY29weSkKLSAgICAgICAgICAgICMgQ2hlY2sgd2UgY2FuIGdldCB2YXJpYWJsZSB2YWx1ZXMKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3NvbWV2YWx1ZScsIHJkLmdldFZhcignTVlWQVJJQUJMRScpKQotCi0gICAgQHRlc3RjYXNlKDE1NzQpCi0gICAgZGVmIHRlc3RfbGlzdF9yZWNpcGVzKHNlbGYpOgotICAgICAgICB3aXRoIGJiLnRpbmZvaWwuVGluZm9pbCgpIGFzIHRpbmZvaWw6Ci0gICAgICAgICAgICB0aW5mb2lsLnByZXBhcmUoY29uZmlnX29ubHk9RmFsc2UsIHF1aWV0PTIpCi0gICAgICAgICAgICAjIENoZWNrIHBrZ19wbgotICAgICAgICAgICAgY2hlY2twbnMgPSBbJ3RhcicsICdhdXRvbWFrZScsICdjb3JldXRpbHMnLCAnbTQtbmF0aXZlJywgJ25hdGl2ZXNkay1nY2MnXQotICAgICAgICAgICAgcGtnX3BuID0gdGluZm9pbC5jb29rZXIucmVjaXBlY2FjaGVzWycnXS5wa2dfcG4KLSAgICAgICAgICAgIGZvciBwbiBpbiBjaGVja3BuczoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHBuLCBwa2dfcG4pCi0gICAgICAgICAgICAjIENoZWNrIHBrZ19mbgotICAgICAgICAgICAgY2hlY2tmbnMgPSB7J25hdGl2ZXNkay1nY2MnOiAnXnZpcnR1YWw6bmF0aXZlc2RrOi4qJywgJ2NvcmV1dGlscyc6ICcuKi9jb3JldXRpbHNfLiouYmInfQotICAgICAgICAgICAgZm9yIGZuLCBwbiBpbiB0aW5mb2lsLmNvb2tlci5yZWNpcGVjYWNoZXNbJyddLnBrZ19mbi5pdGVtcygpOgotICAgICAgICAgICAgICAgIGlmIHBuIGluIGNoZWNrcG5zOgotICAgICAgICAgICAgICAgICAgICBpZiBwbiBpbiBjaGVja2ZuczoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChjaGVja2Zuc1twbl0sIGZuKSwgJ0VudHJ5IGZvciAlczogJXMgZGlkIG5vdCBtYXRjaCAlcycgJSAocG4sIGZuLCBjaGVja2Zuc1twbl0pKQotICAgICAgICAgICAgICAgICAgICBjaGVja3Bucy5yZW1vdmUocG4pCi0gICAgICAgICAgICBpZiBjaGVja3BuczoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1VuYWJsZSB0byBmaW5kIHBrZ19mbiBlbnRyaWVzIGZvcjogJXMnICUgJywgJy5qb2luKGNoZWNrcG5zKSkKLQotICAgIEB0ZXN0Y2FzZSgxNTc1KQotICAgIGRlZiB0ZXN0X3dhaXRfZXZlbnQoc2VsZik6Ci0gICAgICAgIHdpdGggYmIudGluZm9pbC5UaW5mb2lsKCkgYXMgdGluZm9pbDoKLSAgICAgICAgICAgIHRpbmZvaWwucHJlcGFyZShjb25maWdfb25seT1UcnVlKQotICAgICAgICAgICAgIyBOZWVkIHRvIGRyYWluIGV2ZW50cyBvdGhlcndpc2UgZXZlbnRzIHRoYXQgd2lsbCBiZSBtYXNrZWQgd2lsbCBzdGlsbCBiZSBpbiB0aGUgcXVldWUKLSAgICAgICAgICAgIHdoaWxlIHRpbmZvaWwud2FpdF9ldmVudCgwLjI1KToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICB0aW5mb2lsLnNldF9ldmVudF9tYXNrKFsnYmIuZXZlbnQuRmlsZXNNYXRjaGluZ0ZvdW5kJywgJ2JiLmNvbW1hbmQuQ29tbWFuZENvbXBsZXRlZCddKQotICAgICAgICAgICAgcGF0dGVybiA9ICdjb25mJwotICAgICAgICAgICAgcmVzID0gdGluZm9pbC5ydW5fY29tbWFuZCgnZmluZEZpbGVzTWF0Y2hpbmdJbkRpcicsIHBhdHRlcm4sICdjb25mL21hY2hpbmUnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcykKLQotICAgICAgICAgICAgZXZlbnRyZWNlaXZlZCA9IEZhbHNlCi0gICAgICAgICAgICB3YWl0Y291bnQgPSA1Ci0gICAgICAgICAgICB3aGlsZSB3YWl0Y291bnQgPiAwOgotICAgICAgICAgICAgICAgIGV2ZW50ID0gdGluZm9pbC53YWl0X2V2ZW50KDEpCi0gICAgICAgICAgICAgICAgaWYgZXZlbnQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZENvbXBsZXRlZCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkZpbGVzTWF0Y2hpbmdGb3VuZCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdHRlcm4sIGV2ZW50Ll9wYXR0ZXJuKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigncWVtdWFybS5jb25mJywgZXZlbnQuX21hdGNoZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICBldmVudHJlY2VpdmVkID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmV4cGVjdGVkIGV2ZW50OiAlcycgJSBldmVudCkKLQotICAgICAgICAgICAgICAgIHdhaXRjb3VudCA9IHdhaXRjb3VudCAtIDEKLQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh3YWl0Y291bnQsIDAsICdUaW1lZCBvdXQgd2FpdGluZyBmb3IgQ29tbWFuZENvbXBsZXRlZCBldmVudCBmcm9tIGJpdGJha2Ugc2VydmVyJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShldmVudHJlY2VpdmVkLCAnRGlkIG5vdCByZWNlaXZlIEZpbGVzTWF0Y2hpbmdGb3VuZCBldmVudCBmcm9tIGJpdGJha2Ugc2VydmVyJykKLQotICAgIEB0ZXN0Y2FzZSgxNTc2KQotICAgIGRlZiB0ZXN0X3NldHZhcmlhYmxlX2NsZWFuKHNlbGYpOgotICAgICAgICAjIEZpcnN0IGNoZWNrIHRoYXQgc2V0VmFyaWFibGUgYWZmZWN0cyB0aGUgZGF0YXN0b3JlCi0gICAgICAgIHdpdGggYmIudGluZm9pbC5UaW5mb2lsKCkgYXMgdGluZm9pbDoKLSAgICAgICAgICAgIHRpbmZvaWwucHJlcGFyZShjb25maWdfb25seT1UcnVlKQotICAgICAgICAgICAgdGluZm9pbC5ydW5fY29tbWFuZCgnc2V0VmFyaWFibGUnLCAnVEVTVFZBUicsICdzcGVjaWFsdmFsdWUnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignVEVTVFZBUicpLCAnc3BlY2lhbHZhbHVlJywgJ1ZhbHVlIHNldCB1c2luZyBzZXRWYXJpYWJsZSBpcyBub3QgcmVmbGVjdGVkIGluIGNsaWVudC1zaWRlIGdldFZhcigpJykKLQotICAgICAgICAjIE5vdyBjaGVjayB0aGF0IHRoZSBzZXRWYXJpYWJsZSdzIGVmZmVjdHMgYXJlIG5vIGxvbmdlciBwcmVzZW50Ci0gICAgICAgICMgKHRoaXMgbWF5IGxlZ2l0aW1hdGVseSBicmVhayBpbiBmdXR1cmUgaWYgd2Ugc3RvcCByZWluaXRpYWxpc2luZwotICAgICAgICAjIHRoZSBkYXRhc3RvcmUsIGluIHdoaWNoIGNhc2Ugd2UnbGwgaGF2ZSB0byByZWNvbnNpZGVyIHVzZSBvZgotICAgICAgICAjIHNldFZhcmlhYmxlIGVudGlyZWx5KQotICAgICAgICB3aXRoIGJiLnRpbmZvaWwuVGluZm9pbCgpIGFzIHRpbmZvaWw6Ci0gICAgICAgICAgICB0aW5mb2lsLnByZXBhcmUoY29uZmlnX29ubHk9VHJ1ZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ1RFU1RWQVInKSwgJ3NwZWNpYWx2YWx1ZScsICdWYWx1ZSBzZXQgdXNpbmcgc2V0VmFyaWFibGUgaXMgc3RpbGwgcHJlc2VudCEnKQotCi0gICAgICAgICMgTm93IGNoZWNrIHRoYXQgc2V0VmFyIG9uIHRoZSBtYWluIGRhdGFzdG9yZSB3b3JrcyAodXNlcyBzZXRWYXJpYWJsZSBpbnRlcm5hbGx5KQotICAgICAgICB3aXRoIGJiLnRpbmZvaWwuVGluZm9pbCgpIGFzIHRpbmZvaWw6Ci0gICAgICAgICAgICB0aW5mb2lsLnByZXBhcmUoY29uZmlnX29ubHk9VHJ1ZSkKLSAgICAgICAgICAgIHRpbmZvaWwuY29uZmlnX2RhdGEuc2V0VmFyKCdURVNUVkFSJywgJ3NwZWNpYWx2YWx1ZScpCi0gICAgICAgICAgICB2YWx1ZSA9IHRpbmZvaWwucnVuX2NvbW1hbmQoJ2dldFZhcmlhYmxlJywgJ1RFU1RWQVInKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgJ3NwZWNpYWx2YWx1ZScsICdWYWx1ZSBzZXQgdXNpbmcgY29uZmlnX2RhdGEuc2V0VmFyKCkgaXMgbm90IHJlZmxlY3RlZCBpbiBjb25maWdfZGF0YS5nZXRWYXIoKScpCi0KLSAgICBkZWYgdGVzdF9kYXRhc3RvcmVfb3BlcmF0aW9ucyhzZWxmKToKLSAgICAgICAgd2l0aCBiYi50aW5mb2lsLlRpbmZvaWwoKSBhcyB0aW5mb2lsOgotICAgICAgICAgICAgdGluZm9pbC5wcmVwYXJlKGNvbmZpZ19vbmx5PVRydWUpCi0gICAgICAgICAgICAjIFRlc3Qgc2V0VmFyRmxhZygpIC8gZ2V0VmFyRmxhZygpCi0gICAgICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhLnNldFZhckZsYWcoJ1RFU1RWQVInLCAnZmxhZ25hbWUnLCAnZmxhZ3ZhbCcpCi0gICAgICAgICAgICB2YWx1ZSA9IHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyRmxhZygnVEVTVFZBUicsICdmbGFnbmFtZScpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCAnZmxhZ3ZhbCcsICdWYWx1ZSBzZXQgdXNpbmcgY29uZmlnX2RhdGEuc2V0VmFyRmxhZygpIGlzIG5vdCByZWZsZWN0ZWQgaW4gY29uZmlnX2RhdGEuZ2V0VmFyRmxhZygpJykKLSAgICAgICAgICAgICMgVGVzdCBkZWxWYXJGbGFnKCkKLSAgICAgICAgICAgIHRpbmZvaWwuY29uZmlnX2RhdGEuc2V0VmFyRmxhZygnVEVTVFZBUicsICdvdGhlcmZsYWcnLCAnb3RoZXJ2YWx1ZScpCi0gICAgICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhLmRlbFZhckZsYWcoJ1RFU1RWQVInLCAnZmxhZ25hbWUnKQotICAgICAgICAgICAgdmFsdWUgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhckZsYWcoJ1RFU1RWQVInLCAnZmxhZ25hbWUnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgTm9uZSwgJ1ZhcmZsYWcgZGVsZXRlZCB1c2luZyBjb25maWdfZGF0YS5kZWxWYXJGbGFnKCkgaXMgbm90IHJlZmxlY3RlZCBpbiBjb25maWdfZGF0YS5nZXRWYXJGbGFnKCknKQotICAgICAgICAgICAgdmFsdWUgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhckZsYWcoJ1RFU1RWQVInLCAnb3RoZXJmbGFnJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsICdvdGhlcnZhbHVlJywgJ1ZhcmZsYWcgZGVsZXRlZCB1c2luZyBjb25maWdfZGF0YS5kZWxWYXJGbGFnKCkgY2F1c2VkIHVucmVsYXRlZCBmbGFnIHRvIGJlIHJlbW92ZWQnKQotICAgICAgICAgICAgIyBUZXN0IGRlbFZhcigpCi0gICAgICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhLnNldFZhcignVEVTVFZBUicsICd2YXJ2YWx1ZScpCi0gICAgICAgICAgICB2YWx1ZSA9IHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdURVNUVkFSJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsICd2YXJ2YWx1ZScsICdWYWx1ZSBzZXQgdXNpbmcgY29uZmlnX2RhdGEuc2V0VmFyKCkgaXMgbm90IHJlZmxlY3RlZCBpbiBjb25maWdfZGF0YS5nZXRWYXIoKScpCi0gICAgICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhLmRlbFZhcignVEVTVFZBUicpCi0gICAgICAgICAgICB2YWx1ZSA9IHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdURVNUVkFSJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsIE5vbmUsICdWYXJpYWJsZSBkZWxldGVkIHVzaW5nIGNvbmZpZ19kYXRhLmRlbFZhcigpIGFwcGVhcnMgdG8gc3RpbGwgaGF2ZSBhIHZhbHVlJykKLSAgICAgICAgICAgICMgVGVzdCByZW5hbWVWYXIoKQotICAgICAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YS5zZXRWYXIoJ1RFU1RWQVJPTEQnLCAnb3JpZ3ZhbHVlJykKLSAgICAgICAgICAgIHRpbmZvaWwuY29uZmlnX2RhdGEucmVuYW1lVmFyKCdURVNUVkFST0xEJywgJ1RFU1RWQVJORVcnKQotICAgICAgICAgICAgdmFsdWUgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignVEVTVFZBUk9MRCcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCBOb25lLCAnVmFyaWFibGUgcmVuYW1lZCB1c2luZyBjb25maWdfZGF0YS5yZW5hbWVWYXIoKSBzdGlsbCBzZWVtcyB0byBleGlzdCcpCi0gICAgICAgICAgICB2YWx1ZSA9IHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdURVNUVkFSTkVXJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsICdvcmlndmFsdWUnLCAnVmFyaWFibGUgcmVuYW1lZCB1c2luZyBjb25maWdfZGF0YS5yZW5hbWVWYXIoKSBkb2VzIG5vdCBhcHBlYXIgd2l0aCBuZXcgbmFtZScpCi0gICAgICAgICAgICAjIFRlc3Qgb3ZlcnJpZGVzCi0gICAgICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhLnNldFZhcignVEVTVFZBUicsICdvcmlnaW5hbCcpCi0gICAgICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhLnNldFZhcignVEVTVFZBUl9vdmVycmlkZW9uZScsICdvbmUnKQotICAgICAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YS5zZXRWYXIoJ1RFU1RWQVJfb3ZlcnJpZGV0d28nLCAndHdvJykKLSAgICAgICAgICAgIHRpbmZvaWwuY29uZmlnX2RhdGEuYXBwZW5kVmFyKCdPVkVSUklERVMnLCAnOm92ZXJyaWRlb25lJykKLSAgICAgICAgICAgIHZhbHVlID0gdGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ1RFU1RWQVInKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgJ29uZScsICdWYXJpYWJsZSBvdmVycmlkZXMgbm90IGZ1bmN0aW9uaW5nIGNvcnJlY3RseScpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC93aWMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC93aWMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNmFmMTkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvd2ljLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzkyICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKLSMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDE1LCBJbnRlbCBDb3Jwb3JhdGlvbi4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0jIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0jIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0jCi0jIEFVVEhPUlMKLSMgRWQgQmFydG9zaCA8ZWQuYmFydG9zaEBsaW51eC5pbnRlbC5jb20+Ci0KLSIiIlRlc3QgY2FzZXMgZm9yIHdpYy4iIiIKLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSBnbG9iIGltcG9ydCBnbG9iCi1mcm9tIHNodXRpbCBpbXBvcnQgcm10cmVlCi1mcm9tIGZ1bmN0b29scyBpbXBvcnQgd3JhcHMsIGxydV9jYWNoZQotZnJvbSB0ZW1wZmlsZSBpbXBvcnQgTmFtZWRUZW1wb3JhcnlGaWxlCi0KLWZyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Ci1mcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgZ2V0X2JiX3ZhcnMsIHJ1bnFlbXUKLWZyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQotCi0KLUBscnVfY2FjaGUobWF4c2l6ZT0zMikKLWRlZiBnZXRfaG9zdF9hcmNoKHJlY2lwZSk6Ci0gICAgIiIiQSBjYWNoZWQgY2FsbCB0byBnZXRfYmJfdmFyKCdIT1NUX0FSQ0gnLCA8cmVjaXBlPikiIiIKLSAgICByZXR1cm4gZ2V0X2JiX3ZhcignSE9TVF9BUkNIJywgcmVjaXBlKQotCi0KLWRlZiBvbmx5X2Zvcl9hcmNoKGFyY2hzLCBpbWFnZT0nY29yZS1pbWFnZS1taW5pbWFsJyk6Ci0gICAgIiIiRGVjb3JhdG9yIGZvciB3cmFwcGluZyB0ZXN0IGNhc2VzIHRoYXQgY2FuIGJlIHJ1biBvbmx5IGZvciBzcGVjaWZpYyB0YXJnZXQKLSAgICBhcmNoaXRlY3R1cmVzLiBBIGxpc3Qgb2YgY29tcGF0aWJsZSBhcmNoaXRlY3R1cmVzIGlzIHBhc3NlZCBpbiBgYXJjaHNgLgotICAgIEN1cnJlbnQgYXJjaGl0ZWN0dXJlIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSBwYXJzaW5nIGJpdGJha2Ugb3V0cHV0IGZvcgotICAgIGBpbWFnZWAgcmVjaXBlLgotICAgICIiIgotICAgIGRlZiB3cmFwcGVyKGZ1bmMpOgotICAgICAgICBAd3JhcHMoZnVuYykKLSAgICAgICAgZGVmIHdyYXBwZWRfZigqYXJncywgKiprd2FyZ3MpOgotICAgICAgICAgICAgYXJjaCA9IGdldF9ob3N0X2FyY2goaW1hZ2UpCi0gICAgICAgICAgICBpZiBhcmNocyBhbmQgYXJjaCBub3QgaW4gYXJjaHM6Ci0gICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlRlc3RjYXNlIGFyY2ggZGVwZW5kZW5jeSBub3QgbWV0OiAlcyIgJSBhcmNoKQotICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICB3cmFwcGVkX2YuX19uYW1lX18gPSBmdW5jLl9fbmFtZV9fCi0gICAgICAgIHJldHVybiB3cmFwcGVkX2YKLSAgICByZXR1cm4gd3JhcHBlcgotCi0KLWNsYXNzIFdpYyhvZVNlbGZUZXN0KToKLSAgICAiIiJXaWMgdGVzdCBjbGFzcy4iIiIKLQotICAgIHJlc3VsdGRpciA9ICIvdmFyL3RtcC93aWMub2Utc2VsZnRlc3QvIgotICAgIGltYWdlX2lzX3JlYWR5ID0gRmFsc2UKLSAgICBuYXRpdmVfc3lzcm9vdCA9IE5vbmUKLSAgICB3aWNlbnZfY2FjaGUgPSB7fQotCi0gICAgZGVmIHNldFVwTG9jYWwoc2VsZik6Ci0gICAgICAgICIiIlRoaXMgY29kZSBpcyBleGVjdXRlZCBiZWZvcmUgZWFjaCB0ZXN0IG1ldGhvZC4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYubmF0aXZlX3N5c3Jvb3Q6Ci0gICAgICAgICAgICBXaWMubmF0aXZlX3N5c3Jvb3QgPSBnZXRfYmJfdmFyKCdTVEFHSU5HX0RJUl9OQVRJVkUnLCAnd2ljLXRvb2xzJykKLQotICAgICAgICAjIERvIHRoaXMgaGVyZSBpbnN0ZWFkIG9mIGluIHNldFVwQ2xhc3MgYXMgdGhlIGJhc2Ugc2V0VXAgZG9lcyBzb21lCi0gICAgICAgICMgY2xlYW4gdXAgd2hpY2ggY2FuIHJlc3VsdCBpbiB0aGUgbmF0aXZlIHRvb2xzIGJ1aWx0IGVhcmxpZXIgaW4KLSAgICAgICAgIyBzZXRVcENsYXNzIGJlaW5nIHVuYXZhaWxhYmxlLgotICAgICAgICBpZiBub3QgV2ljLmltYWdlX2lzX3JlYWR5OgotICAgICAgICAgICAgaWYgZ2V0X2JiX3ZhcignVVNFX05MUycpID09ICd5ZXMnOgotICAgICAgICAgICAgICAgIGJpdGJha2UoJ3dpYy10b29scycpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ3dpYy10b29scyBjYW5ub3QgYmUgYnVpbHQgZHVlIGl0cyAoaW50bHRvb2x8Z2V0dGV4dCktbmF0aXZlIGRlcGVuZGVuY3kgYW5kIE5MUyBkaXNhYmxlJykKLQotICAgICAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS1taW5pbWFsJykKLSAgICAgICAgICAgIFdpYy5pbWFnZV9pc19yZWFkeSA9IFRydWUKLQotICAgICAgICBybXRyZWUoc2VsZi5yZXN1bHRkaXIsIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKLQotICAgIGRlZiB0ZWFyRG93bkxvY2FsKHNlbGYpOgotICAgICAgICAiIiJSZW1vdmUgcmVzdWx0ZGlyIGFzIGl0IG1heSBjb250YWluIGltYWdlcy4iIiIKLSAgICAgICAgcm10cmVlKHNlbGYucmVzdWx0ZGlyLCBpZ25vcmVfZXJyb3JzPVRydWUpCi0KLSAgICBAdGVzdGNhc2UoMTU1MikKLSAgICBkZWYgdGVzdF92ZXJzaW9uKHNlbGYpOgotICAgICAgICAiIiJUZXN0IHdpYyAtLXZlcnNpb24iIiIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoJ3dpYyAtLXZlcnNpb24nKS5zdGF0dXMpCi0KLSAgICBAdGVzdGNhc2UoMTIwOCkKLSAgICBkZWYgdGVzdF9oZWxwKHNlbGYpOgotICAgICAgICAiIiJUZXN0IHdpYyAtLWhlbHAgYW5kIHdpYyAtaCIiIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgnd2ljIC0taGVscCcpLnN0YXR1cykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoJ3dpYyAtaCcpLnN0YXR1cykKLQotICAgIEB0ZXN0Y2FzZSgxMjA5KQotICAgIGRlZiB0ZXN0X2NyZWF0ZWhlbHAoc2VsZik6Ci0gICAgICAgICIiIlRlc3Qgd2ljIGNyZWF0ZSAtLWhlbHAiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoJ3dpYyBjcmVhdGUgLS1oZWxwJykuc3RhdHVzKQotCi0gICAgQHRlc3RjYXNlKDEyMTApCi0gICAgZGVmIHRlc3RfbGlzdGhlbHAoc2VsZik6Ci0gICAgICAgICIiIlRlc3Qgd2ljIGxpc3QgLS1oZWxwIiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgbGlzdCAtLWhlbHAnKS5zdGF0dXMpCi0KLSAgICBAdGVzdGNhc2UoMTU1MykKLSAgICBkZWYgdGVzdF9oZWxwX2NyZWF0ZShzZWxmKToKLSAgICAgICAgIiIiVGVzdCB3aWMgaGVscCBjcmVhdGUiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoJ3dpYyBoZWxwIGNyZWF0ZScpLnN0YXR1cykKLQotICAgIEB0ZXN0Y2FzZSgxNTU0KQotICAgIGRlZiB0ZXN0X2hlbHBfbGlzdChzZWxmKToKLSAgICAgICAgIiIiVGVzdCB3aWMgaGVscCBsaXN0IiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgaGVscCBsaXN0Jykuc3RhdHVzKQotCi0gICAgQHRlc3RjYXNlKDEyMTUpCi0gICAgZGVmIHRlc3RfaGVscF9vdmVydmlldyhzZWxmKToKLSAgICAgICAgIiIiVGVzdCB3aWMgaGVscCBvdmVydmlldyIiIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgnd2ljIGhlbHAgb3ZlcnZpZXcnKS5zdGF0dXMpCi0KLSAgICBAdGVzdGNhc2UoMTIxNikKLSAgICBkZWYgdGVzdF9oZWxwX3BsdWdpbnMoc2VsZik6Ci0gICAgICAgICIiIlRlc3Qgd2ljIGhlbHAgcGx1Z2lucyIiIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgnd2ljIGhlbHAgcGx1Z2lucycpLnN0YXR1cykKLQotICAgIEB0ZXN0Y2FzZSgxMjE3KQotICAgIGRlZiB0ZXN0X2hlbHBfa2lja3N0YXJ0KHNlbGYpOgotICAgICAgICAiIiJUZXN0IHdpYyBoZWxwIGtpY2tzdGFydCIiIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgnd2ljIGhlbHAga2lja3N0YXJ0Jykuc3RhdHVzKQotCi0gICAgQHRlc3RjYXNlKDE1NTUpCi0gICAgZGVmIHRlc3RfbGlzdF9pbWFnZXMoc2VsZik6Ci0gICAgICAgICIiIlRlc3Qgd2ljIGxpc3QgaW1hZ2VzIiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgbGlzdCBpbWFnZXMnKS5zdGF0dXMpCi0KLSAgICBAdGVzdGNhc2UoMTU1NikKLSAgICBkZWYgdGVzdF9saXN0X3NvdXJjZV9wbHVnaW5zKHNlbGYpOgotICAgICAgICAiIiJUZXN0IHdpYyBsaXN0IHNvdXJjZS1wbHVnaW5zIiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgbGlzdCBzb3VyY2UtcGx1Z2lucycpLnN0YXR1cykKLQotICAgIEB0ZXN0Y2FzZSgxNTU3KQotICAgIGRlZiB0ZXN0X2xpc3RlZF9pbWFnZXNfaGVscChzZWxmKToKLSAgICAgICAgIiIiVGVzdCB3aWMgbGlzdGVkIGltYWdlcyBoZWxwIiIiCi0gICAgICAgIG91dHB1dCA9IHJ1bkNtZCgnd2ljIGxpc3QgaW1hZ2VzJykub3V0cHV0Ci0gICAgICAgIGltYWdlbGlzdCA9IFtsaW5lLnNwbGl0KClbMF0gZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKV0KLSAgICAgICAgZm9yIGltYWdlIGluIGltYWdlbGlzdDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgbGlzdCAlcyBoZWxwJyAlIGltYWdlKS5zdGF0dXMpCi0KLSAgICBAdGVzdGNhc2UoMTIxMykKLSAgICBkZWYgdGVzdF91bnN1cHBvcnRlZF9zdWJjb21tYW5kKHNlbGYpOgotICAgICAgICAiIiJUZXN0IHVuc3VwcG9ydGVkIHN1YmNvbW1hbmQiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBydW5DbWQoJ3dpYyB1bnN1cHBvcnRlZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZV9zdGF0dXM9VHJ1ZSkuc3RhdHVzKQotCi0gICAgQHRlc3RjYXNlKDEyMTQpCi0gICAgZGVmIHRlc3Rfbm9fY29tbWFuZChzZWxmKToKLSAgICAgICAgIiIiVGVzdCB3aWMgd2l0aG91dCBjb21tYW5kIiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcnVuQ21kKCd3aWMnLCBpZ25vcmVfc3RhdHVzPVRydWUpLnN0YXR1cykKLQotICAgIEB0ZXN0Y2FzZSgxMjExKQotICAgIGRlZiB0ZXN0X2J1aWxkX2ltYWdlX25hbWUoc2VsZik6Ci0gICAgICAgICIiIlRlc3Qgd2ljIGNyZWF0ZSB3aWN0ZXN0ZGlzayAtLWltYWdlLW5hbWU9Y29yZS1pbWFnZS1taW5pbWFsIiIiCi0gICAgICAgIGNtZCA9ICJ3aWMgY3JlYXRlIHdpY3Rlc3RkaXNrIC0taW1hZ2UtbmFtZT1jb3JlLWltYWdlLW1pbmltYWwgLW8gJXMiICUgc2VsZi5yZXN1bHRkaXIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoY21kKS5zdGF0dXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAid2ljdGVzdGRpc2stKi5kaXJlY3QiKSkpCi0KLSAgICBAdGVzdGNhc2UoMTE1NykKLSAgICBAb25seV9mb3JfYXJjaChbJ2k1ODYnLCAnaTY4NicsICd4ODZfNjQnXSkKLSAgICBkZWYgdGVzdF9ncHRfaW1hZ2Uoc2VsZik6Ci0gICAgICAgICIiIlRlc3QgY3JlYXRpb24gb2YgY29yZS1pbWFnZS1taW5pbWFsIHdpdGggZ3B0IHRhYmxlIGFuZCBVVUlEIGJvb3QiIiIKLSAgICAgICAgY21kID0gIndpYyBjcmVhdGUgZGlyZWN0ZGlzay1ncHQgLS1pbWFnZS1uYW1lIGNvcmUtaW1hZ2UtbWluaW1hbCAtbyAlcyIgJSBzZWxmLnJlc3VsdGRpcgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZChjbWQpLnN0YXR1cykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJkaXJlY3RkaXNrLSouZGlyZWN0IikpKQotCi0gICAgQHRlc3RjYXNlKDEzNDYpCi0gICAgQG9ubHlfZm9yX2FyY2goWydpNTg2JywgJ2k2ODYnLCAneDg2XzY0J10pCi0gICAgZGVmIHRlc3RfaXNvX2ltYWdlKHNlbGYpOgotICAgICAgICAiIiJUZXN0IGNyZWF0aW9uIG9mIGh5YnJpZCBpc28gaW1hZ2Ugd2l0aCBsZWdhY3kgYW5kIEVGSSBib290IiIiCi0gICAgICAgIGNvbmZpZyA9ICdJTklUUkFNRlNfSU1BR0UgPSAiY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcyJcbidcCi0gICAgICAgICAgICAgICAgICdNQUNISU5FX0ZFQVRVUkVTX2FwcGVuZCA9ICIgZWZpIlxuJwotICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoY29uZmlnKQotICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwnKQotICAgICAgICBzZWxmLnJlbW92ZV9jb25maWcoY29uZmlnKQotICAgICAgICBjbWQgPSAid2ljIGNyZWF0ZSBta2h5YnJpZGlzbyAtLWltYWdlLW5hbWUgY29yZS1pbWFnZS1taW5pbWFsIC1vICVzIiAlIHNlbGYucmVzdWx0ZGlyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKGNtZCkuc3RhdHVzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIkhZQlJJRF9JU09fSU1HLSouZGlyZWN0IikpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIkhZQlJJRF9JU09fSU1HLSouaXNvIikpKQotCi0gICAgQHRlc3RjYXNlKDEzNDgpCi0gICAgQG9ubHlfZm9yX2FyY2goWydpNTg2JywgJ2k2ODYnLCAneDg2XzY0J10pCi0gICAgZGVmIHRlc3RfcWVtdXg4Nl9kaXJlY3RkaXNrKHNlbGYpOgotICAgICAgICAiIiJUZXN0IGNyZWF0aW9uIG9mIHFlbXV4LTg2LWRpcmVjdGRpc2sgaW1hZ2UiIiIKLSAgICAgICAgY21kID0gIndpYyBjcmVhdGUgcWVtdXg4Ni1kaXJlY3RkaXNrIC1lIGNvcmUtaW1hZ2UtbWluaW1hbCAtbyAlcyIgJSBzZWxmLnJlc3VsdGRpcgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZChjbWQpLnN0YXR1cykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJxZW11eDg2LWRpcmVjdGRpc2stKmRpcmVjdCIpKSkKLQotICAgIEB0ZXN0Y2FzZSgxMzUwKQotICAgIEBvbmx5X2Zvcl9hcmNoKFsnaTU4NicsICdpNjg2JywgJ3g4Nl82NCddKQotICAgIGRlZiB0ZXN0X21rZWZpZGlzayhzZWxmKToKLSAgICAgICAgIiIiVGVzdCBjcmVhdGlvbiBvZiBta2VmaWRpc2sgaW1hZ2UiIiIKLSAgICAgICAgY21kID0gIndpYyBjcmVhdGUgbWtlZmlkaXNrIC1lIGNvcmUtaW1hZ2UtbWluaW1hbCAtbyAlcyIgJSBzZWxmLnJlc3VsdGRpcgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZChjbWQpLnN0YXR1cykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJta2VmaWRpc2stKmRpcmVjdCIpKSkKLQotICAgIEB0ZXN0Y2FzZSgxMzg1KQotICAgIEBvbmx5X2Zvcl9hcmNoKFsnaTU4NicsICdpNjg2JywgJ3g4Nl82NCddKQotICAgIGRlZiB0ZXN0X2Jvb3Rsb2FkZXJfY29uZmlnKHNlbGYpOgotICAgICAgICAiIiJUZXN0IGNyZWF0aW9uIG9mIGRpcmVjdGRpc2stYm9vdGxvYWRlci1jb25maWcgaW1hZ2UiIiIKLSAgICAgICAgY21kID0gIndpYyBjcmVhdGUgZGlyZWN0ZGlzay1ib290bG9hZGVyLWNvbmZpZyAtZSBjb3JlLWltYWdlLW1pbmltYWwgLW8gJXMiICUgc2VsZi5yZXN1bHRkaXIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoY21kKS5zdGF0dXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiZGlyZWN0ZGlzay1ib290bG9hZGVyLWNvbmZpZy0qZGlyZWN0IikpKQotCi0gICAgQHRlc3RjYXNlKDE1NjApCi0gICAgQG9ubHlfZm9yX2FyY2goWydpNTg2JywgJ2k2ODYnLCAneDg2XzY0J10pCi0gICAgZGVmIHRlc3Rfc3lzdGVtZF9ib290ZGlzayhzZWxmKToKLSAgICAgICAgIiIiVGVzdCBjcmVhdGlvbiBvZiBzeXN0ZW1kLWJvb3RkaXNrIGltYWdlIiIiCi0gICAgICAgIGNvbmZpZyA9ICdNQUNISU5FX0ZFQVRVUkVTX2FwcGVuZCA9ICIgZWZpIlxuJwotICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoY29uZmlnKQotICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwnKQotICAgICAgICBzZWxmLnJlbW92ZV9jb25maWcoY29uZmlnKQotICAgICAgICBjbWQgPSAid2ljIGNyZWF0ZSBzeXN0ZW1kLWJvb3RkaXNrIC1lIGNvcmUtaW1hZ2UtbWluaW1hbCAtbyAlcyIgJSBzZWxmLnJlc3VsdGRpcgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZChjbWQpLnN0YXR1cykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJzeXN0ZW1kLWJvb3RkaXNrLSpkaXJlY3QiKSkpCi0KLSAgICBAdGVzdGNhc2UoMTU2MSkKLSAgICBkZWYgdGVzdF9zZGltYWdlX2Jvb3RwYXJ0KHNlbGYpOgotICAgICAgICAiIiJUZXN0IGNyZWF0aW9uIG9mIHNkaW1hZ2UtYm9vdHBhcnQgaW1hZ2UiIiIKLSAgICAgICAgY21kID0gIndpYyBjcmVhdGUgc2RpbWFnZS1ib290cGFydCAtZSBjb3JlLWltYWdlLW1pbmltYWwgLW8gJXMiICUgc2VsZi5yZXN1bHRkaXIKLSAgICAgICAga2ltZ3R5cGUgPSBnZXRfYmJfdmFyKCdLRVJORUxfSU1BR0VUWVBFJywgJ2NvcmUtaW1hZ2UtbWluaW1hbCcpCi0gICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCdJTUFHRV9CT09UX0ZJTEVTID0gIiVzIlxuJyAlIGtpbWd0eXBlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZChjbWQpLnN0YXR1cykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJzZGltYWdlLWJvb3RwYXJ0LSpkaXJlY3QiKSkpCi0KLSAgICBAdGVzdGNhc2UoMTU2MikKLSAgICBAb25seV9mb3JfYXJjaChbJ2k1ODYnLCAnaTY4NicsICd4ODZfNjQnXSkKLSAgICBkZWYgdGVzdF9kZWZhdWx0X291dHB1dF9kaXIoc2VsZik6Ci0gICAgICAgICIiIlRlc3QgZGVmYXVsdCBvdXRwdXQgbG9jYXRpb24iIiIKLSAgICAgICAgZm9yIGZuYW1lIGluIGdsb2IoImRpcmVjdGRpc2stKi5kaXJlY3QiKToKLSAgICAgICAgICAgIG9zLnJlbW92ZShmbmFtZSkKLSAgICAgICAgY21kID0gIndpYyBjcmVhdGUgZGlyZWN0ZGlzayAtZSBjb3JlLWltYWdlLW1pbmltYWwiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKGNtZCkuc3RhdHVzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKCJkaXJlY3RkaXNrLSouZGlyZWN0IikpKQotCi0gICAgQHRlc3RjYXNlKDEyMTIpCi0gICAgQG9ubHlfZm9yX2FyY2goWydpNTg2JywgJ2k2ODYnLCAneDg2XzY0J10pCi0gICAgZGVmIHRlc3RfYnVpbGRfYXJ0aWZhY3RzKHNlbGYpOgotICAgICAgICAiIiJUZXN0IHdpYyBjcmVhdGUgZGlyZWN0ZGlzayBwcm92aWRpbmcgYWxsIGFydGlmYWN0cy4iIiIKLSAgICAgICAgYmJfdmFycyA9IGdldF9iYl92YXJzKFsnU1RBR0lOR19EQVRBRElSJywgJ1JFQ0lQRV9TWVNST09UX05BVElWRSddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpYy10b29scycpCi0gICAgICAgIGJiX3ZhcnMudXBkYXRlKGdldF9iYl92YXJzKFsnREVQTE9ZX0RJUl9JTUFHRScsICdJTUFHRV9ST09URlMnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvcmUtaW1hZ2UtbWluaW1hbCcpKQotICAgICAgICBiYnZhcnMgPSB7a2V5Lmxvd2VyKCk6IHZhbHVlIGZvciBrZXksIHZhbHVlIGluIGJiX3ZhcnMuaXRlbXMoKX0KLSAgICAgICAgYmJ2YXJzWydyZXN1bHRkaXInXSA9IHNlbGYucmVzdWx0ZGlyCi0gICAgICAgIHN0YXR1cyA9IHJ1bkNtZCgid2ljIGNyZWF0ZSBkaXJlY3RkaXNrICIKLSAgICAgICAgICAgICAgICAgICAgICAgICItYiAlKHN0YWdpbmdfZGF0YWRpcilzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICItayAlKGRlcGxveV9kaXJfaW1hZ2UpcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiLW4gJShyZWNpcGVfc3lzcm9vdF9uYXRpdmUpcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiLXIgJShpbWFnZV9yb290ZnMpcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiLW8gJShyZXN1bHRkaXIpcyIgJSBiYnZhcnMpLnN0YXR1cwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJkaXJlY3RkaXNrLSouZGlyZWN0IikpKQotCi0gICAgQHRlc3RjYXNlKDEyNjQpCi0gICAgZGVmIHRlc3RfY29tcHJlc3NfZ3ppcChzZWxmKToKLSAgICAgICAgIiIiVGVzdCBjb21wcmVzc2luZyBhbiBpbWFnZSB3aXRoIGd6aXAiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgd2ljdGVzdGRpc2sgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1pbWFnZS1uYW1lIGNvcmUtaW1hZ2UtbWluaW1hbCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYyBnemlwIC1vICVzIiAlIHNlbGYucmVzdWx0ZGlyKS5zdGF0dXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAid2ljdGVzdGRpc2stKi5kaXJlY3QuZ3oiKSkpCi0KLSAgICBAdGVzdGNhc2UoMTI2NSkKLSAgICBkZWYgdGVzdF9jb21wcmVzc19iemlwMihzZWxmKToKLSAgICAgICAgIiIiVGVzdCBjb21wcmVzc2luZyBhbiBpbWFnZSB3aXRoIGJ6aXAyIiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlIHdpY3Rlc3RkaXNrICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZT1jb3JlLWltYWdlLW1pbmltYWwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMgYnppcDIgLW8gJXMiICUgc2VsZi5yZXN1bHRkaXIpLnN0YXR1cykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJ3aWN0ZXN0ZGlzay0qLmRpcmVjdC5iejIiKSkpCi0KLSAgICBAdGVzdGNhc2UoMTI2NikKLSAgICBkZWYgdGVzdF9jb21wcmVzc194eihzZWxmKToKLSAgICAgICAgIiIiVGVzdCBjb21wcmVzc2luZyBhbiBpbWFnZSB3aXRoIHh6IiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlIHdpY3Rlc3RkaXNrICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZT1jb3JlLWltYWdlLW1pbmltYWwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1jb21wcmVzcy13aXRoPXh6IC1vICVzIiAlIHNlbGYucmVzdWx0ZGlyKS5zdGF0dXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAid2ljdGVzdGRpc2stKi5kaXJlY3QueHoiKSkpCi0KLSAgICBAdGVzdGNhc2UoMTI2NykKLSAgICBkZWYgdGVzdF93cm9uZ19jb21wcmVzc29yKHNlbGYpOgotICAgICAgICAiIiJUZXN0IGhvdyB3aWMgYnJlYWtzIGlmIHdyb25nIGNvbXByZXNzb3IgaXMgcHJvdmlkZWQiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBydW5DbWQoIndpYyBjcmVhdGUgd2ljdGVzdGRpc2sgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1pbWFnZS1uYW1lPWNvcmUtaW1hZ2UtbWluaW1hbCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYyB3cm9uZyAtbyAlcyIgJSBzZWxmLnJlc3VsdGRpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlX3N0YXR1cz1UcnVlKS5zdGF0dXMpCi0KLSAgICBAdGVzdGNhc2UoMTU1OCkKLSAgICBkZWYgdGVzdF9kZWJ1Z19zaG9ydChzZWxmKToKLSAgICAgICAgIiIiVGVzdCAtRCBvcHRpb24iIiIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgd2ljdGVzdGRpc2sgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1pbWFnZS1uYW1lPWNvcmUtaW1hZ2UtbWluaW1hbCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItRCAtbyAlcyIgJSBzZWxmLnJlc3VsdGRpcikuc3RhdHVzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIndpY3Rlc3RkaXNrLSouZGlyZWN0IikpKQotCi0gICAgZGVmIHRlc3RfZGVidWdfbG9uZyhzZWxmKToKLSAgICAgICAgIiIiVGVzdCAtLWRlYnVnIG9wdGlvbiIiIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSB3aWN0ZXN0ZGlzayAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWU9Y29yZS1pbWFnZS1taW5pbWFsICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tZGVidWcgLW8gJXMiICUgc2VsZi5yZXN1bHRkaXIpLnN0YXR1cykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJ3aWN0ZXN0ZGlzay0qLmRpcmVjdCIpKSkKLQotICAgIEB0ZXN0Y2FzZSgxNTYzKQotICAgIGRlZiB0ZXN0X3NraXBfYnVpbGRfY2hlY2tfc2hvcnQoc2VsZik6Ci0gICAgICAgICIiIlRlc3QgLXMgb3B0aW9uIiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlIHdpY3Rlc3RkaXNrICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZT1jb3JlLWltYWdlLW1pbmltYWwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLXMgLW8gJXMiICUgc2VsZi5yZXN1bHRkaXIpLnN0YXR1cykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJ3aWN0ZXN0ZGlzay0qLmRpcmVjdCIpKSkKLQotICAgIGRlZiB0ZXN0X3NraXBfYnVpbGRfY2hlY2tfbG9uZyhzZWxmKToKLSAgICAgICAgIiIiVGVzdCAtLXNraXAtYnVpbGQtY2hlY2sgb3B0aW9uIiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlIHdpY3Rlc3RkaXNrICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZT1jb3JlLWltYWdlLW1pbmltYWwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1za2lwLWJ1aWxkLWNoZWNrICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tb3V0ZGlyICVzIiAlIHNlbGYucmVzdWx0ZGlyKS5zdGF0dXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAid2ljdGVzdGRpc2stKi5kaXJlY3QiKSkpCi0KLSAgICBAdGVzdGNhc2UoMTU2NCkKLSAgICBkZWYgdGVzdF9idWlsZF9yb290ZnNfc2hvcnQoc2VsZik6Ci0gICAgICAgICIiIlRlc3QgLWYgb3B0aW9uIiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlIHdpY3Rlc3RkaXNrICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZT1jb3JlLWltYWdlLW1pbmltYWwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWYgLW8gJXMiICUgc2VsZi5yZXN1bHRkaXIpLnN0YXR1cykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJ3aWN0ZXN0ZGlzay0qLmRpcmVjdCIpKSkKLQotICAgIGRlZiB0ZXN0X2J1aWxkX3Jvb3Rmc19sb25nKHNlbGYpOgotICAgICAgICAiIiJUZXN0IC0tYnVpbGQtcm9vdGZzIG9wdGlvbiIiIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSB3aWN0ZXN0ZGlzayAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWU9Y29yZS1pbWFnZS1taW5pbWFsICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tYnVpbGQtcm9vdGZzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tb3V0ZGlyICVzIiAlIHNlbGYucmVzdWx0ZGlyKS5zdGF0dXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAid2ljdGVzdGRpc2stKi5kaXJlY3QiKSkpCi0KLSAgICBAdGVzdGNhc2UoMTI2OCkKLSAgICBAb25seV9mb3JfYXJjaChbJ2k1ODYnLCAnaTY4NicsICd4ODZfNjQnXSkKLSAgICBkZWYgdGVzdF9yb290ZnNfaW5kaXJlY3RfcmVjaXBlcyhzZWxmKToKLSAgICAgICAgIiIiVGVzdCB1c2FnZSBvZiByb290ZnMgcGx1Z2luIHdpdGggcm9vdGZzIHJlY2lwZXMiIiIKLSAgICAgICAgc3RhdHVzID0gcnVuQ21kKCJ3aWMgY3JlYXRlIGRpcmVjdGRpc2stbXVsdGktcm9vdGZzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWU9Y29yZS1pbWFnZS1taW5pbWFsICIKLSAgICAgICAgICAgICAgICAgICAgICAgICItLXJvb3RmcyByb290ZnMxPWNvcmUtaW1hZ2UtbWluaW1hbCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiLS1yb290ZnMgcm9vdGZzMj1jb3JlLWltYWdlLW1pbmltYWwgIgotICAgICAgICAgICAgICAgICAgICAgICAgIi0tb3V0ZGlyICVzIiAlIHNlbGYucmVzdWx0ZGlyKS5zdGF0dXMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiZGlyZWN0ZGlzay1tdWx0aS1yb290ZnMqLmRpcmVjdCIpKSkKLQotICAgIEB0ZXN0Y2FzZSgxMjY5KQotICAgIEBvbmx5X2Zvcl9hcmNoKFsnaTU4NicsICdpNjg2JywgJ3g4Nl82NCddKQotICAgIGRlZiB0ZXN0X3Jvb3Rmc19hcnRpZmFjdHMoc2VsZik6Ci0gICAgICAgICIiIlRlc3QgdXNhZ2Ugb2Ygcm9vdGZzIHBsdWdpbiB3aXRoIHJvb3RmcyBwYXRocyIiIgotICAgICAgICBiYl92YXJzID0gZ2V0X2JiX3ZhcnMoWydTVEFHSU5HX0RBVEFESVInLCAnUkVDSVBFX1NZU1JPT1RfTkFUSVZFJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2ljLXRvb2xzJykKLSAgICAgICAgYmJfdmFycy51cGRhdGUoZ2V0X2JiX3ZhcnMoWydERVBMT1lfRElSX0lNQUdFJywgJ0lNQUdFX1JPT1RGUyddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29yZS1pbWFnZS1taW5pbWFsJykpCi0gICAgICAgIGJidmFycyA9IHtrZXkubG93ZXIoKTogdmFsdWUgZm9yIGtleSwgdmFsdWUgaW4gYmJfdmFycy5pdGVtcygpfQotICAgICAgICBiYnZhcnNbJ3drcyddID0gImRpcmVjdGRpc2stbXVsdGktcm9vdGZzIgotICAgICAgICBiYnZhcnNbJ3Jlc3VsdGRpciddID0gc2VsZi5yZXN1bHRkaXIKLSAgICAgICAgc3RhdHVzID0gcnVuQ21kKCJ3aWMgY3JlYXRlICUod2tzKXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgIi0tYm9vdGltZy1kaXI9JShzdGFnaW5nX2RhdGFkaXIpcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiLS1rZXJuZWwtZGlyPSUoZGVwbG95X2Rpcl9pbWFnZSlzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICItLW5hdGl2ZS1zeXNyb290PSUocmVjaXBlX3N5c3Jvb3RfbmF0aXZlKXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgIi0tcm9vdGZzLWRpciByb290ZnMxPSUoaW1hZ2Vfcm9vdGZzKXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgIi0tcm9vdGZzLWRpciByb290ZnMyPSUoaW1hZ2Vfcm9vdGZzKXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgIi0tb3V0ZGlyICUocmVzdWx0ZGlyKXMiICUgYmJ2YXJzKS5zdGF0dXMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiJSh3a3Mpcy0qLmRpcmVjdCIgJSBiYnZhcnMpKSkKLQotICAgIGRlZiB0ZXN0X2V4Y2x1ZGVfcGF0aChzZWxmKToKLSAgICAgICAgIiIiVGVzdCAtLWV4Y2x1ZGUtcGF0aCB3a3Mgb3B0aW9uLiIiIgotCi0gICAgICAgIG9sZHBhdGggPSBvcy5lbnZpcm9uWydQQVRIJ10KLSAgICAgICAgb3MuZW52aXJvblsnUEFUSCddID0gZ2V0X2JiX3ZhcigiUEFUSCIsICJ3aWMtdG9vbHMiKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdrc19maWxlID0gJ3RlbXAud2tzJwotICAgICAgICAgICAgd2l0aCBvcGVuKHdrc19maWxlLCAndycpIGFzIHdrczoKLSAgICAgICAgICAgICAgICByb290ZnNfZGlyID0gZ2V0X2JiX3ZhcignSU1BR0VfUk9PVEZTJywgJ2NvcmUtaW1hZ2UtbWluaW1hbCcpCi0gICAgICAgICAgICAgICAgd2tzLndyaXRlKCIiIgotcGFydCAvIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBtbWNibGswIC0tZnN0eXBlPWV4dDQgLS1leGNsdWRlLXBhdGggdXNyCi1wYXJ0IC91c3IgLS1zb3VyY2Ugcm9vdGZzIC0tb25kaXNrIG1tY2JsazAgLS1mc3R5cGU9ZXh0NCAtLXJvb3Rmcy1kaXIgJXMvdXNyCi1wYXJ0IC9ldGMgLS1zb3VyY2Ugcm9vdGZzIC0tb25kaXNrIG1tY2JsazAgLS1mc3R5cGU9ZXh0NCAtLWV4Y2x1ZGUtcGF0aCBiaW4vIC0tcm9vdGZzLWRpciAlcy91c3IiIiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocm9vdGZzX2Rpciwgcm9vdGZzX2RpcikpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSAlcyAtZSBjb3JlLWltYWdlLW1pbmltYWwgLW8gJXMiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHdrc19maWxlLCBzZWxmLnJlc3VsdGRpcikpLnN0YXR1cykKLQotICAgICAgICAgICAgb3MucmVtb3ZlKHdrc19maWxlKQotICAgICAgICAgICAgd2ljb3V0ID0gZ2xvYihzZWxmLnJlc3VsdGRpciArICIlcy0qZGlyZWN0IiAlICd0ZW1wJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKHdpY291dCkpCi0KLSAgICAgICAgICAgIHdpY2ltZyA9IHdpY291dFswXQotCi0gICAgICAgICAgICAjIHZlcmlmeSBwYXJ0aXRpb24gc2l6ZSB3aXRoIHdpYwotICAgICAgICAgICAgcmVzID0gcnVuQ21kKCJwYXJ0ZWQgLW0gJXMgdW5pdCBiIHAgMj4vZGV2L251bGwiICUgd2ljaW1nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCByZXMuc3RhdHVzKQotCi0gICAgICAgICAgICAjIHBhcnNlIHBhcnRlZCBvdXRwdXQgd2hpY2ggbG9va3MgbGlrZSB0aGlzOgotICAgICAgICAgICAgIyBCWVQ7XG4KLSAgICAgICAgICAgICMgL3Zhci90bXAvd2ljL2J1aWxkL3RtcGZ3dmpqa2ZfLTIwMTYxMTEwMTIyMi1oZGEuZGlyZWN0OjIwME1pQjpmaWxlOjUxMjo1MTI6bXNkb3M6OjtcbgotICAgICAgICAgICAgIyAxOjAuMDBNaUI6MjAwTWlCOjIwME1pQjpleHQ0Ojo7XG4KLSAgICAgICAgICAgIHBhcnRsbnMgPSByZXMub3V0cHV0LnNwbGl0bGluZXMoKVsyOl0KLQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBsZW4ocGFydGxucykpCi0KLSAgICAgICAgICAgIGZvciBwYXJ0IGluIFsxLCAyLCAzXToKLSAgICAgICAgICAgICAgICBwYXJ0X2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5yZXN1bHRkaXIsICJzZWxmdGVzdF9pbWcucGFydCVkIiAlIHBhcnQpCi0gICAgICAgICAgICAgICAgcGFydGxuID0gcGFydGxuc1twYXJ0LTFdLnNwbGl0KCI6IikKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDcsIGxlbihwYXJ0bG4pKQotICAgICAgICAgICAgICAgIHN0YXJ0ID0gaW50KHBhcnRsblsxXS5yc3RyaXAoIkIiKSkgLyA1MTIKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBpbnQocGFydGxuWzNdLnJzdHJpcCgiQiIpKSAvIDUxMgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJkZCBpZj0lcyBvZj0lcyBza2lwPSVkIGNvdW50PSVkIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdpY2ltZywgcGFydF9maWxlLCBzdGFydCwgbGVuZ3RoKSkuc3RhdHVzKQotCi0gICAgICAgICAgICBkZWYgZXh0cmFjdF9maWxlcyhkZWJ1Z2ZzX291dHB1dCk6Ci0gICAgICAgICAgICAgICAgIiIiCi0gICAgICAgICAgICAgICAgZXh0cmFjdCBmaWxlIG5hbWVzIGZyb20gdGhlIG91dHB1dCBvZiBkZWJ1Z2ZzIC1SICdscyAtcCcsCi0gICAgICAgICAgICAgICAgd2hpY2ggbG9va3MgbGlrZSB0aGlzOgotCi0gICAgICAgICAgICAgICAgIC8yLzA0MDc1NS8wLzAvLi8vXG4KLSAgICAgICAgICAgICAgICAgLzIvMDQwNzU1LzAvMC8uLi8vXG4KLSAgICAgICAgICAgICAgICAgLzExLzA0MDcwMC8wLzAvbG9zdCtmb3VuZF5NLy9cbgotICAgICAgICAgICAgICAgICAvMTIvMDQwNzU1LzEwMDIvMTAwMi9ydW4vL1xuCi0gICAgICAgICAgICAgICAgIC8xMy8wNDA3NTUvMTAwMi8xMDAyL3N5cy8vXG4KLSAgICAgICAgICAgICAgICAgLzE0LzA0MDc1NS8xMDAyLzEwMDIvYmluLy9cbgotICAgICAgICAgICAgICAgICAvODAvMDQwNzU1LzEwMDIvMTAwMi92YXIvL1xuCi0gICAgICAgICAgICAgICAgIC85Mi8wNDA3NTUvMTAwMi8xMDAyL3RtcC8vXG4KLSAgICAgICAgICAgICAgICAiIiIKLSAgICAgICAgICAgICAgICAjIE5PVEUgdGhlIG9jY2FzaW9uYWwgXk0gaW4gZmlsZSBuYW1lcwotICAgICAgICAgICAgICAgIHJldHVybiBbbGluZS5zcGxpdCgnLycpWzVdLnN0cmlwKCkgZm9yIGxpbmUgaW4gXAotICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdmc19vdXRwdXQuc3RyaXAoKS5zcGxpdCgnL1xuJyldCi0KLSAgICAgICAgICAgICMgVGVzdCBwYXJ0aXRpb24gMSwgc2hvdWxkIGNvbnRhaW4gdGhlIG5vcm1hbCByb290IGRpcmVjdG9yaWVzLCBleGNlcHQKLSAgICAgICAgICAgICMgL3Vzci4KLSAgICAgICAgICAgIHJlcyA9IHJ1bkNtZCgiZGVidWdmcyAtUiAnbHMgLXAnICVzIDI+L2Rldi9udWxsIiAlIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYucmVzdWx0ZGlyLCAic2VsZnRlc3RfaW1nLnBhcnQxIikpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJlcy5zdGF0dXMpCi0gICAgICAgICAgICBmaWxlcyA9IGV4dHJhY3RfZmlsZXMocmVzLm91dHB1dCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oImV0YyIsIGZpbGVzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigidXNyIiwgZmlsZXMpCi0KLSAgICAgICAgICAgICMgUGFydGl0aW9uIDIsIHNob3VsZCBjb250YWluIGNvbW1vbiBkaXJlY3RvcmllcyBmb3IgL3Vzciwgbm90IHJvb3QKLSAgICAgICAgICAgICMgZGlyZWN0b3JpZXMuCi0gICAgICAgICAgICByZXMgPSBydW5DbWQoImRlYnVnZnMgLVIgJ2xzIC1wJyAlcyAyPi9kZXYvbnVsbCIgJSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLnJlc3VsdGRpciwgInNlbGZ0ZXN0X2ltZy5wYXJ0MiIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCByZXMuc3RhdHVzKQotICAgICAgICAgICAgZmlsZXMgPSBleHRyYWN0X2ZpbGVzKHJlcy5vdXRwdXQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJldGMiLCBmaWxlcykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oInVzciIsIGZpbGVzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigic2hhcmUiLCBmaWxlcykKLQotICAgICAgICAgICAgIyBQYXJ0aXRpb24gMywgc2hvdWxkIGNvbnRhaW4gdGhlIHNhbWUgYXMgcGFydGl0aW9uIDIsIGluY2x1ZGluZyB0aGUgYmluCi0gICAgICAgICAgICAjIGRpcmVjdG9yeSwgYnV0IG5vdCB0aGUgZmlsZXMgaW5zaWRlIGl0LgotICAgICAgICAgICAgcmVzID0gcnVuQ21kKCJkZWJ1Z2ZzIC1SICdscyAtcCcgJXMgMj4vZGV2L251bGwiICUgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5yZXN1bHRkaXIsICJzZWxmdGVzdF9pbWcucGFydDMiKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzLnN0YXR1cykKLSAgICAgICAgICAgIGZpbGVzID0gZXh0cmFjdF9maWxlcyhyZXMub3V0cHV0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiZXRjIiwgZmlsZXMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJ1c3IiLCBmaWxlcykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInNoYXJlIiwgZmlsZXMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKCJiaW4iLCBmaWxlcykKLSAgICAgICAgICAgIHJlcyA9IHJ1bkNtZCgiZGVidWdmcyAtUiAnbHMgLXAgYmluJyAlcyAyPi9kZXYvbnVsbCIgJSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLnJlc3VsdGRpciwgInNlbGZ0ZXN0X2ltZy5wYXJ0MyIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCByZXMuc3RhdHVzKQotICAgICAgICAgICAgZmlsZXMgPSBleHRyYWN0X2ZpbGVzKHJlcy5vdXRwdXQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKCIuIiwgZmlsZXMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKCIuLiIsIGZpbGVzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4oZmlsZXMpKQotCi0gICAgICAgICAgICBmb3IgcGFydCBpbiBbMSwgMiwgM106Ci0gICAgICAgICAgICAgICAgcGFydF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYucmVzdWx0ZGlyLCAic2VsZnRlc3RfaW1nLnBhcnQlZCIgJSBwYXJ0KQotICAgICAgICAgICAgICAgIG9zLnJlbW92ZShwYXJ0X2ZpbGUpCi0KLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLmVudmlyb25bJ1BBVEgnXSA9IG9sZHBhdGgKLQotICAgIGRlZiB0ZXN0X2V4Y2x1ZGVfcGF0aF9lcnJvcnMoc2VsZik6Ci0gICAgICAgICIiIlRlc3QgLS1leGNsdWRlLXBhdGggd2tzIG9wdGlvbiBlcnJvciBoYW5kbGluZy4iIiIKLSAgICAgICAgd2tzX2ZpbGUgPSAndGVtcC53a3MnCi0KLSAgICAgICAgIyBBYnNvbHV0ZSBhcmd1bWVudC4KLSAgICAgICAgd2l0aCBvcGVuKHdrc19maWxlLCAndycpIGFzIHdrczoKLSAgICAgICAgICAgIHdrcy53cml0ZSgicGFydCAvIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBtbWNibGswIC0tZnN0eXBlPWV4dDQgLS1leGNsdWRlLXBhdGggL3VzciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlICVzIC1lIGNvcmUtaW1hZ2UtbWluaW1hbCAtbyAlcyIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICh3a3NfZmlsZSwgc2VsZi5yZXN1bHRkaXIpLCBpZ25vcmVfc3RhdHVzPVRydWUpLnN0YXR1cykKLSAgICAgICAgb3MucmVtb3ZlKHdrc19maWxlKQotCi0gICAgICAgICMgQXJndW1lbnQgcG9pbnRpbmcgdG8gcGFyZW50IGRpcmVjdG9yeS4KLSAgICAgICAgd2l0aCBvcGVuKHdrc19maWxlLCAndycpIGFzIHdrczoKLSAgICAgICAgICAgIHdrcy53cml0ZSgicGFydCAvIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBtbWNibGswIC0tZnN0eXBlPWV4dDQgLS1leGNsdWRlLXBhdGggLi8uLy4uIikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgJXMgLWUgY29yZS1pbWFnZS1taW5pbWFsIC1vICVzIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHdrc19maWxlLCBzZWxmLnJlc3VsdGRpciksIGlnbm9yZV9zdGF0dXM9VHJ1ZSkuc3RhdHVzKQotICAgICAgICBvcy5yZW1vdmUod2tzX2ZpbGUpCi0KLSAgICBAdGVzdGNhc2UoMTQ5NikKLSAgICBkZWYgdGVzdF9ibWFwX3Nob3J0KHNlbGYpOgotICAgICAgICAiIiJUZXN0IGdlbmVyYXRpb24gb2YgLmJtYXAgZmlsZSAtbSBvcHRpb24iIiIKLSAgICAgICAgY21kID0gIndpYyBjcmVhdGUgd2ljdGVzdGRpc2sgLWUgY29yZS1pbWFnZS1taW5pbWFsIC1tIC1vICVzIiAlIHNlbGYucmVzdWx0ZGlyCi0gICAgICAgIHN0YXR1cyA9IHJ1bkNtZChjbWQpLnN0YXR1cwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJ3aWN0ZXN0ZGlzay0qZGlyZWN0IikpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIndpY3Rlc3RkaXNrLSpkaXJlY3QuYm1hcCIpKSkKLQotICAgIGRlZiB0ZXN0X2JtYXBfbG9uZyhzZWxmKToKLSAgICAgICAgIiIiVGVzdCBnZW5lcmF0aW9uIG9mIC5ibWFwIGZpbGUgLS1ibWFwIG9wdGlvbiIiIgotICAgICAgICBjbWQgPSAid2ljIGNyZWF0ZSB3aWN0ZXN0ZGlzayAtZSBjb3JlLWltYWdlLW1pbmltYWwgLS1ibWFwIC1vICVzIiAlIHNlbGYucmVzdWx0ZGlyCi0gICAgICAgIHN0YXR1cyA9IHJ1bkNtZChjbWQpLnN0YXR1cwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJ3aWN0ZXN0ZGlzay0qZGlyZWN0IikpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIndpY3Rlc3RkaXNrLSpkaXJlY3QuYm1hcCIpKSkKLQotICAgIGRlZiBfZ2V0X2ltYWdlX2Vudl9wYXRoKHNlbGYsIGltYWdlKToKLSAgICAgICAgIiIiR2VuZXJhdGUgYW5kIG9idGFpbiB0aGUgcGF0aCB0byA8aW1hZ2U+LmVudiIiIgotICAgICAgICBpZiBpbWFnZSBub3QgaW4gc2VsZi53aWNlbnZfY2FjaGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGJpdGJha2UoJyVzIC1jIGRvX3Jvb3Rmc193aWNlbnYnICUgaW1hZ2UpLnN0YXR1cykKLSAgICAgICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhbJ1NUQUdJTkdfRElSJywgJ01BQ0hJTkUnXSwgaW1hZ2UpCi0gICAgICAgICAgICBzdGRpciA9IGJiX3ZhcnNbJ1NUQUdJTkdfRElSJ10KLSAgICAgICAgICAgIG1hY2hpbmUgPSBiYl92YXJzWydNQUNISU5FJ10KLSAgICAgICAgICAgIHNlbGYud2ljZW52X2NhY2hlW2ltYWdlXSA9IG9zLnBhdGguam9pbihzdGRpciwgbWFjaGluZSwgJ2ltZ2RhdGEnKQotICAgICAgICByZXR1cm4gc2VsZi53aWNlbnZfY2FjaGVbaW1hZ2VdCi0KLSAgICBAdGVzdGNhc2UoMTM0NykKLSAgICBkZWYgdGVzdF9pbWFnZV9lbnYoc2VsZik6Ci0gICAgICAgICIiIlRlc3QgZ2VuZXJhdGlvbiBvZiA8aW1hZ2U+LmVudiBmaWxlcy4iIiIKLSAgICAgICAgaW1hZ2UgPSAnY29yZS1pbWFnZS1taW5pbWFsJwotICAgICAgICBpbWdkYXRhZGlyID0gc2VsZi5fZ2V0X2ltYWdlX2Vudl9wYXRoKGltYWdlKQotCi0gICAgICAgIGJiX3ZhcnMgPSBnZXRfYmJfdmFycyhbJ0lNQUdFX0JBU0VOQU1FJywgJ1dJQ1ZBUlMnXSwgaW1hZ2UpCi0gICAgICAgIGJhc2VuYW1lID0gYmJfdmFyc1snSU1BR0VfQkFTRU5BTUUnXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2VuYW1lLCBpbWFnZSkKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihpbWdkYXRhZGlyLCBiYXNlbmFtZSkgKyAnLmVudicKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHBhdGgpKQotCi0gICAgICAgIHdpY3ZhcnMgPSBzZXQoYmJfdmFyc1snV0lDVkFSUyddLnNwbGl0KCkpCi0gICAgICAgICMgZmlsdGVyIG91dCBvcHRpb25hbCB2YXJpYWJsZXMKLSAgICAgICAgd2ljdmFycyA9IHdpY3ZhcnMuZGlmZmVyZW5jZSgoJ0RFUExPWV9ESVJfSU1BR0UnLCAnSU1BR0VfQk9PVF9GSUxFUycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJTklUUkQnLCAnSU5JVFJEX0xJVkUnLCAnSVNPRElSJykpCi0gICAgICAgIHdpdGggb3BlbihwYXRoKSBhcyBlbnZmaWxlOgotICAgICAgICAgICAgY29udGVudCA9IGRpY3QobGluZS5zcGxpdCgiPSIsIDEpIGZvciBsaW5lIGluIGVudmZpbGUpCi0gICAgICAgICAgICAjIHRlc3QgaWYgdmFyaWFibGVzIHVzZWQgYnkgd2ljIHByZXNlbnQgaW4gdGhlIC5lbnYgZmlsZQotICAgICAgICAgICAgZm9yIHZhciBpbiB3aWN2YXJzOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2YXIgaW4gY29udGVudCwgIiVzIGlzIG5vdCBpbiAuZW52IGZpbGUiICUgdmFyKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb250ZW50W3Zhcl0pCi0KLSAgICBAdGVzdGNhc2UoMTU1OSkKLSAgICBkZWYgdGVzdF9pbWFnZV92YXJzX2Rpcl9zaG9ydChzZWxmKToKLSAgICAgICAgIiIiVGVzdCBpbWFnZSB2YXJzIGRpcmVjdG9yeSBzZWxlY3Rpb24gLXYgb3B0aW9uIiIiCi0gICAgICAgIGltYWdlID0gJ2NvcmUtaW1hZ2UtbWluaW1hbCcKLSAgICAgICAgaW1nZW52ZGlyID0gc2VsZi5fZ2V0X2ltYWdlX2Vudl9wYXRoKGltYWdlKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlIHdpY3Rlc3RkaXNrICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZT0lcyAtdiAlcyAtbyAlcyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoaW1hZ2UsIGltZ2VudmRpciwgc2VsZi5yZXN1bHRkaXIpKS5zdGF0dXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAid2ljdGVzdGRpc2stKmRpcmVjdCIpKSkKLQotICAgIGRlZiB0ZXN0X2ltYWdlX3ZhcnNfZGlyX2xvbmcoc2VsZik6Ci0gICAgICAgICIiIlRlc3QgaW1hZ2UgdmFycyBkaXJlY3Rvcnkgc2VsZWN0aW9uIC0tdmFycyBvcHRpb24iIiIKLSAgICAgICAgaW1hZ2UgPSAnY29yZS1pbWFnZS1taW5pbWFsJwotICAgICAgICBpbWdlbnZkaXIgPSBzZWxmLl9nZXRfaW1hZ2VfZW52X3BhdGgoaW1hZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlIHdpY3Rlc3RkaXNrICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZT0lcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLXZhcnMgJXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1vdXRkaXIgJXMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGltYWdlLCBpbWdlbnZkaXIsIHNlbGYucmVzdWx0ZGlyKSkuc3RhdHVzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIndpY3Rlc3RkaXNrLSpkaXJlY3QiKSkpCi0KLSAgICBAdGVzdGNhc2UoMTM1MSkKLSAgICBAb25seV9mb3JfYXJjaChbJ2k1ODYnLCAnaTY4NicsICd4ODZfNjQnXSkKLSAgICBkZWYgdGVzdF93aWNfaW1hZ2VfdHlwZShzZWxmKToKLSAgICAgICAgIiIiVGVzdCBidWlsZGluZyB3aWMgaW1hZ2VzIGJ5IGJpdGJha2UiIiIKLSAgICAgICAgY29uZmlnID0gJ0lNQUdFX0ZTVFlQRVMgKz0gIndpYyJcbldLU19GSUxFID0gIndpYy1pbWFnZS1taW5pbWFsIlxuJ1wKLSAgICAgICAgICAgICAgICAgJ01BQ0hJTkVfRkVBVFVSRVNfYXBwZW5kID0gIiBlZmkiXG4nCi0gICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhjb25maWcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgYml0YmFrZSgnd2ljLWltYWdlLW1pbmltYWwnKS5zdGF0dXMpCi0gICAgICAgIHNlbGYucmVtb3ZlX2NvbmZpZyhjb25maWcpCi0KLSAgICAgICAgYmJfdmFycyA9IGdldF9iYl92YXJzKFsnREVQTE9ZX0RJUl9JTUFHRScsICdNQUNISU5FJ10pCi0gICAgICAgIGRlcGxveV9kaXIgPSBiYl92YXJzWydERVBMT1lfRElSX0lNQUdFJ10KLSAgICAgICAgbWFjaGluZSA9IGJiX3ZhcnNbJ01BQ0hJTkUnXQotICAgICAgICBwcmVmaXggPSBvcy5wYXRoLmpvaW4oZGVwbG95X2RpciwgJ3dpYy1pbWFnZS1taW5pbWFsLSVzLicgJSBtYWNoaW5lKQotICAgICAgICAjIGNoZWNrIGlmIHdlIGhhdmUgcmVzdWx0IGltYWdlIGFuZCBtYW5pZmVzdHMgc3ltbGlua3MKLSAgICAgICAgIyBwb2ludGluZyB0byBleGlzdGluZyBmaWxlcwotICAgICAgICBmb3Igc3VmZml4IGluICgnd2ljJywgJ21hbmlmZXN0Jyk6Ci0gICAgICAgICAgICBwYXRoID0gcHJlZml4ICsgc3VmZml4Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2xpbmsocGF0aCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5yZWFscGF0aChwYXRoKSkpCi0KLSAgICBAdGVzdGNhc2UoMTQyMikKLSAgICBAb25seV9mb3JfYXJjaChbJ2k1ODYnLCAnaTY4NicsICd4ODZfNjQnXSkKLSAgICBkZWYgdGVzdF9xZW11KHNlbGYpOgotICAgICAgICAiIiJUZXN0IHdpYy1pbWFnZS1taW5pbWFsIHVuZGVyIHFlbXUiIiIKLSAgICAgICAgY29uZmlnID0gJ0lNQUdFX0ZTVFlQRVMgKz0gIndpYyJcbldLU19GSUxFID0gIndpYy1pbWFnZS1taW5pbWFsIlxuJ1wKLSAgICAgICAgICAgICAgICAgJ01BQ0hJTkVfRkVBVFVSRVNfYXBwZW5kID0gIiBlZmkiXG4nCi0gICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhjb25maWcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgYml0YmFrZSgnd2ljLWltYWdlLW1pbmltYWwnKS5zdGF0dXMpCi0gICAgICAgIHNlbGYucmVtb3ZlX2NvbmZpZyhjb25maWcpCi0KLSAgICAgICAgd2l0aCBydW5xZW11KCd3aWMtaW1hZ2UtbWluaW1hbCcsIHNzaD1GYWxzZSkgYXMgcWVtdToKLSAgICAgICAgICAgIGNtZCA9ICJtb3VudCB8Z3JlcCAnXi9kZXYvJyB8IGN1dCAtZjEsMyAtZCAnICciCi0gICAgICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHFlbXUucnVuX3NlcmlhbChjbWQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHN0YXR1cywgJ0ZhaWxlZCB0byBydW4gY29tbWFuZCAiJXMiOiAlcycgJSAoY21kLCBvdXRwdXQpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsICcvZGV2L3Jvb3QgL1xyXG4vZGV2L3NkYTMgL21udCcpCi0KLSAgICBAb25seV9mb3JfYXJjaChbJ2k1ODYnLCAnaTY4NicsICd4ODZfNjQnXSkKLSAgICBkZWYgdGVzdF9xZW11X2VmaShzZWxmKToKLSAgICAgICAgIiIiVGVzdCBjb3JlLWltYWdlLW1pbmltYWwgZWZpIGltYWdlIHVuZGVyIHFlbXUiIiIKLSAgICAgICAgY29uZmlnID0gJ0lNQUdFX0ZTVFlQRVMgPSAid2ljIlxuV0tTX0ZJTEUgPSAibWtlZmlkaXNrLndrcyJcbicKLSAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGNvbmZpZykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwgb3ZtZicpLnN0YXR1cykKLSAgICAgICAgc2VsZi5yZW1vdmVfY29uZmlnKGNvbmZpZykKLQotICAgICAgICB3aXRoIHJ1bnFlbXUoJ2NvcmUtaW1hZ2UtbWluaW1hbCcsIHNzaD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgIHJ1bnFlbXVwYXJhbXM9J292bWYnLCBpbWFnZV9mc3R5cGU9J3dpYycpIGFzIHFlbXU6Ci0gICAgICAgICAgICBjbWQgPSAiZ3JlcCBzZGEuIC9wcm9jL3BhcnRpdGlvbnMgIHx3YyAtbCIKLSAgICAgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gcWVtdS5ydW5fc2VyaWFsKGNtZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc3RhdHVzLCAnRmFpbGVkIHRvIHJ1biBjb21tYW5kICIlcyI6ICVzJyAlIChjbWQsIG91dHB1dCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgJzMnKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfbWFrZV9maXhlZF9zaXplX3drcyhzaXplKToKLSAgICAgICAgIiIiCi0gICAgICAgIENyZWF0ZSBhIHdrcyBvZiBhbiBpbWFnZSB3aXRoIGEgc2luZ2xlIHBhcnRpdGlvbi4gU2l6ZSBvZiB0aGUgcGFydGl0aW9uIGlzIHNldAotICAgICAgICB1c2luZyAtLWZpeGVkLXNpemUgZmxhZy4gUmV0dXJucyBhIHR1cGxlOiAocGF0aCB0byB3a3MgZmlsZSwgd2tzIGltYWdlIG5hbWUpCi0gICAgICAgICIiIgotICAgICAgICB3aXRoIE5hbWVkVGVtcG9yYXJ5RmlsZSgidyIsIHN1ZmZpeD0iLndrcyIsIGRlbGV0ZT1GYWxzZSkgYXMgdGVtcGY6Ci0gICAgICAgICAgICB3a3NwYXRoID0gdGVtcGYubmFtZQotICAgICAgICAgICAgdGVtcGYud3JpdGUoInBhcnQgIiBcCi0gICAgICAgICAgICAgICAgICAgICAiLS1zb3VyY2Ugcm9vdGZzIC0tb25kaXNrIGhkYSAtLWFsaWduIDQgLS1maXhlZC1zaXplICVkICIKLSAgICAgICAgICAgICAgICAgICAgICItLWZzdHlwZT1leHQ0XG4iICUgc2l6ZSkKLSAgICAgICAgd2tzbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZSh3a3NwYXRoKSlbMF0KLQotICAgICAgICByZXR1cm4gd2tzcGF0aCwgd2tzbmFtZQotCi0gICAgZGVmIHRlc3RfZml4ZWRfc2l6ZShzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFRlc3QgY3JlYXRpb24gb2YgYSBzaW1wbGUgaW1hZ2Ugd2l0aCBwYXJ0aXRpb24gc2l6ZSBjb250cm9sbGVkIHRocm91Z2gKLSAgICAgICAgLS1maXhlZC1zaXplIGZsYWcKLSAgICAgICAgIiIiCi0gICAgICAgIHdrc3BhdGgsIHdrc25hbWUgPSBXaWMuX21ha2VfZml4ZWRfc2l6ZV93a3MoMjAwKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlICVzIC1lIGNvcmUtaW1hZ2UtbWluaW1hbCAtbyAlcyIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICh3a3NwYXRoLCBzZWxmLnJlc3VsdGRpcikpLnN0YXR1cykKLSAgICAgICAgb3MucmVtb3ZlKHdrc3BhdGgpCi0gICAgICAgIHdpY291dCA9IGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiJXMtKmRpcmVjdCIgJSB3a3NuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbih3aWNvdXQpKQotCi0gICAgICAgIHdpY2ltZyA9IHdpY291dFswXQotCi0gICAgICAgICMgdmVyaWZ5IHBhcnRpdGlvbiBzaXplIHdpdGggd2ljCi0gICAgICAgIHJlcyA9IHJ1bkNtZCgicGFydGVkIC1tICVzIHVuaXQgbWliIHAgMj4vZGV2L251bGwiICUgd2ljaW1nLAotICAgICAgICAgICAgICAgICAgICAgaWdub3JlX3N0YXR1cz1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3Q9c2VsZi5uYXRpdmVfc3lzcm9vdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCByZXMuc3RhdHVzKQotCi0gICAgICAgICMgcGFyc2UgcGFydGVkIG91dHB1dCB3aGljaCBsb29rcyBsaWtlIHRoaXM6Ci0gICAgICAgICMgQllUO1xuCi0gICAgICAgICMgL3Zhci90bXAvd2ljL2J1aWxkL3RtcGZ3dmpqa2ZfLTIwMTYxMTEwMTIyMi1oZGEuZGlyZWN0OjIwME1pQjpmaWxlOjUxMjo1MTI6bXNkb3M6OjtcbgotICAgICAgICAjIDE6MC4wME1pQjoyMDBNaUI6MjAwTWlCOmV4dDQ6OjtcbgotICAgICAgICBwYXJ0bG5zID0gcmVzLm91dHB1dC5zcGxpdGxpbmVzKClbMjpdCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4ocGFydGxucykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjE6MC4wME1pQjoyMDBNaUI6MjAwTWlCOmV4dDQ6OjsiLCBwYXJ0bG5zWzBdKQotCi0gICAgZGVmIHRlc3RfZml4ZWRfc2l6ZV9lcnJvcihzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFRlc3QgY3JlYXRpb24gb2YgYSBzaW1wbGUgaW1hZ2Ugd2l0aCBwYXJ0aXRpb24gc2l6ZSBjb250cm9sbGVkIHRocm91Z2gKLSAgICAgICAgLS1maXhlZC1zaXplIGZsYWcuIFRoZSBzaXplIG9mIHBhcnRpdGlvbiBpcyBpbnRlbnRpb25hbGx5IHNldCB0byAxTWlCCi0gICAgICAgIGluIG9yZGVyIHRvIHRyaWdnZXIgYW4gZXJyb3IgaW4gd2ljLgotICAgICAgICAiIiIKLSAgICAgICAgd2tzcGF0aCwgd2tzbmFtZSA9IFdpYy5fbWFrZV9maXhlZF9zaXplX3drcygxKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcnVuQ21kKCJ3aWMgY3JlYXRlICVzIC1lIGNvcmUtaW1hZ2UtbWluaW1hbCAtbyAlcyIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICh3a3NwYXRoLCBzZWxmLnJlc3VsdGRpciksIGlnbm9yZV9zdGF0dXM9VHJ1ZSkuc3RhdHVzKQotICAgICAgICBvcy5yZW1vdmUod2tzcGF0aCkKLSAgICAgICAgd2ljb3V0ID0gZ2xvYihzZWxmLnJlc3VsdGRpciArICIlcy0qZGlyZWN0IiAlIHdrc25hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKHdpY291dCkpCi0KLSAgICBAb25seV9mb3JfYXJjaChbJ2k1ODYnLCAnaTY4NicsICd4ODZfNjQnXSkKLSAgICBkZWYgdGVzdF9yYXdjb3B5X3BsdWdpbl9xZW11KHNlbGYpOgotICAgICAgICAiIiJUZXN0IHJhd2NvcHkgcGx1Z2luIGluIHFlbXUiIiIKLSAgICAgICAgIyBidWlsZCBleHQ0IGFuZCB3aWMgaW1hZ2VzCi0gICAgICAgIGZvciBmc3R5cGUgaW4gKCJleHQ0IiwgIndpYyIpOgotICAgICAgICAgICAgY29uZmlnID0gJ0lNQUdFX0ZTVFlQRVMgPSAiJXMiXG5XS1NfRklMRSA9ICJ0ZXN0X3Jhd2NvcHlfcGx1Z2luLndrcy5pbiJcbicgJSBmc3R5cGUKLSAgICAgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhjb25maWcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGJpdGJha2UoJ2NvcmUtaW1hZ2UtbWluaW1hbCcpLnN0YXR1cykKLSAgICAgICAgICAgIHNlbGYucmVtb3ZlX2NvbmZpZyhjb25maWcpCi0KLSAgICAgICAgd2l0aCBydW5xZW11KCdjb3JlLWltYWdlLW1pbmltYWwnLCBzc2g9RmFsc2UsIGltYWdlX2ZzdHlwZT0nd2ljJykgYXMgcWVtdToKLSAgICAgICAgICAgIGNtZCA9ICJncmVwIHNkYS4gL3Byb2MvcGFydGl0aW9ucyAgfHdjIC1sIgotICAgICAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBxZW11LnJ1bl9zZXJpYWwoY21kKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzdGF0dXMsICdGYWlsZWQgdG8gcnVuIGNvbW1hbmQgIiVzIjogJXMnICUgKGNtZCwgb3V0cHV0KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCAnMicpCi0KLSAgICBkZWYgdGVzdF9yYXdjb3B5X3BsdWdpbihzZWxmKToKLSAgICAgICAgIiIiVGVzdCByYXdjb3B5IHBsdWdpbiIiIgotICAgICAgICBpbWcgPSAnY29yZS1pbWFnZS1taW5pbWFsJwotICAgICAgICBtYWNoaW5lID0gZ2V0X2JiX3ZhcignTUFDSElORScsIGltZykKLSAgICAgICAgd2l0aCBOYW1lZFRlbXBvcmFyeUZpbGUoInciLCBzdWZmaXg9Ii53a3MiKSBhcyB3a3M6Ci0gICAgICAgICAgICB3a3Mud3JpdGVsaW5lcyhbJ3BhcnQgL2Jvb3QgLS1hY3RpdmUgLS1zb3VyY2UgYm9vdGltZy1wY2Jpb3NcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhcnQgLyAtLXNvdXJjZSByYXdjb3B5IC0tc291cmNlcGFyYW1zPSJmaWxlPSVzLSVzLmV4dDQiIC0tdXNlLXV1aWRcbidcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGltZywgbWFjaGluZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Jvb3Rsb2FkZXIgLS10aW1lb3V0PTAgLS1hcHBlbmQ9ImNvbnNvbGU9dHR5UzAsMTE1MjAwbjgiXG4nXSkKLSAgICAgICAgICAgIHdrcy5mbHVzaCgpCi0gICAgICAgICAgICBjbWQgPSAid2ljIGNyZWF0ZSAlcyAtZSAlcyAtbyAlcyIgJSAod2tzLm5hbWUsIGltZywgc2VsZi5yZXN1bHRkaXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZChjbWQpLnN0YXR1cykKLSAgICAgICAgICAgIHdrc25hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUod2tzLm5hbWUpKVswXQotICAgICAgICAgICAgb3V0ID0gZ2xvYihzZWxmLnJlc3VsdGRpciArICIlcy0qZGlyZWN0IiAlIHdrc25hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihvdXQpKQotCi0gICAgZGVmIHRlc3RfZnNfdHlwZXMoc2VsZik6Ci0gICAgICAgICIiIlRlc3QgZmlsZXN5c3RlbSB0eXBlcyBmb3IgZW1wdHkgYW5kIG5vdCBlbXB0eSBwYXJ0aXRpb25zIiIiCi0gICAgICAgIGltZyA9ICdjb3JlLWltYWdlLW1pbmltYWwnCi0gICAgICAgIHdpdGggTmFtZWRUZW1wb3JhcnlGaWxlKCJ3Iiwgc3VmZml4PSIud2tzIikgYXMgd2tzOgotICAgICAgICAgICAgd2tzLndyaXRlbGluZXMoWydwYXJ0IGV4dDIgICAtLWZzdHlwZSBleHQyICAgICAtLXNvdXJjZSByb290ZnNcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhcnQgYnRyZnMgIC0tZnN0eXBlIGJ0cmZzICAgIC0tc291cmNlIHJvb3RmcyAtLXNpemUgNDBNXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXJ0IHNxdWFzaCAtLWZzdHlwZSBzcXVhc2hmcyAtLXNvdXJjZSByb290ZnNcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhcnQgc3dhcCAgIC0tZnN0eXBlIHN3YXAgLS1zaXplIDFNXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXJ0IGVtcHR5dmZhdCAgIC0tZnN0eXBlIHZmYXQgICAtLXNpemUgMU1cbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhcnQgZW1wdHltc2RvcyAgLS1mc3R5cGUgbXNkb3MgIC0tc2l6ZSAxTVxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFydCBlbXB0eWV4dDIgICAtLWZzdHlwZSBleHQyICAgLS1zaXplIDFNXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXJ0IGVtcHR5YnRyZnMgIC0tZnN0eXBlIGJ0cmZzICAtLXNpemUgMTAwTVxuJ10pCi0gICAgICAgICAgICB3a3MuZmx1c2goKQotICAgICAgICAgICAgY21kID0gIndpYyBjcmVhdGUgJXMgLWUgJXMgLW8gJXMiICUgKHdrcy5uYW1lLCBpbWcsIHNlbGYucmVzdWx0ZGlyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoY21kKS5zdGF0dXMpCi0gICAgICAgICAgICB3a3NuYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKHdrcy5uYW1lKSlbMF0KLSAgICAgICAgICAgIG91dCA9IGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiJXMtKmRpcmVjdCIgJSB3a3NuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4ob3V0KSkKLQotICAgIGRlZiB0ZXN0X2tpY2tzdGFydF9wYXJzZXIoc2VsZik6Ci0gICAgICAgICIiIlRlc3Qgd2tzIHBhcnNlciBvcHRpb25zIiIiCi0gICAgICAgIHdpdGggTmFtZWRUZW1wb3JhcnlGaWxlKCJ3Iiwgc3VmZml4PSIud2tzIikgYXMgd2tzOgotICAgICAgICAgICAgd2tzLndyaXRlbGluZXMoWydwYXJ0IC8gLS1mc3R5cGUgZXh0MyAtLXNvdXJjZSByb290ZnMgLS1zeXN0ZW0taWQgMHhGRiAnXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLW92ZXJoZWFkLWZhY3RvciAxLjIgLS1zaXplIDEwMGtcbiddKQotICAgICAgICAgICAgd2tzLmZsdXNoKCkKLSAgICAgICAgICAgIGNtZCA9ICJ3aWMgY3JlYXRlICVzIC1lIGNvcmUtaW1hZ2UtbWluaW1hbCAtbyAlcyIgJSAod2tzLm5hbWUsIHNlbGYucmVzdWx0ZGlyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoY21kKS5zdGF0dXMpCi0gICAgICAgICAgICB3a3NuYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKHdrcy5uYW1lKSlbMF0KLSAgICAgICAgICAgIG91dCA9IGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiJXMtKmRpcmVjdCIgJSB3a3NuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4ob3V0KSkKLQotICAgIGRlZiB0ZXN0X2ltYWdlX2Jvb3RwYXJ0X2dsb2JiZWQoc2VsZik6Ci0gICAgICAgICIiIlRlc3QgZ2xvYmJlZCBzb3VyY2VzIHdpdGggaW1hZ2UtYm9vdHBhcnQgcGx1Z2luIiIiCi0gICAgICAgIGltZyA9ICJjb3JlLWltYWdlLW1pbmltYWwiCi0gICAgICAgIGNtZCA9ICJ3aWMgY3JlYXRlIHNkaW1hZ2UtYm9vdHBhcnQgLWUgJXMgLW8gJXMiICUgKGltZywgc2VsZi5yZXN1bHRkaXIpCi0gICAgICAgIGNvbmZpZyA9ICdJTUFHRV9CT09UX0ZJTEVTID0gIiVzKiInICUgZ2V0X2JiX3ZhcignS0VSTkVMX0lNQUdFVFlQRScsIGltZykKLSAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGNvbmZpZykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoY21kKS5zdGF0dXMpCi0gICAgICAgIHNlbGYucmVtb3ZlX2NvbmZpZyhjb25maWcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAic2RpbWFnZS1ib290cGFydC0qZGlyZWN0IikpKQotCi0gICAgZGVmIHRlc3Rfc3BhcnNlX2NvcHkoc2VsZik6Ci0gICAgICAgICIiIlRlc3Qgc3BhcnNlX2NvcHkgd2l0aCBGSUVNQVAgYW5kIFNFRUtfSE9MRSBmaWxlbWFwIEFQSXMiIiIKLSAgICAgICAgbGlicGF0aCA9IG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCdDT1JFQkFTRScpLCAnc2NyaXB0cycsICdsaWInLCAnd2ljJykKLSAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIGxpYnBhdGgpCi0gICAgICAgIGZyb20gIGZpbGVtYXAgaW1wb3J0IEZpbGVtYXBGaWVtYXAsIEZpbGVtYXBTZWVrLCBzcGFyc2VfY29weSwgRXJyb3JOb3RTdXBwCi0gICAgICAgIHdpdGggTmFtZWRUZW1wb3JhcnlGaWxlKCJ3Iiwgc3VmZml4PSIud2ljLXNwYXJzZSIpIGFzIHNwYXJzZToKLSAgICAgICAgICAgIHNyY19uYW1lID0gc3BhcnNlLm5hbWUKLSAgICAgICAgICAgIHNyY19zaXplID0gMTAyNCAqIDEwCi0gICAgICAgICAgICBzcGFyc2UudHJ1bmNhdGUoc3JjX3NpemUpCi0gICAgICAgICAgICAjIHdyaXRlIG9uZSBieXRlIHRvIHRoZSBmaWxlCi0gICAgICAgICAgICB3aXRoIG9wZW4oc3JjX25hbWUsICdyK2InKSBhcyBzZmlsZToKLSAgICAgICAgICAgICAgICBzZmlsZS5zZWVrKDEwMjQgKiA0KQotICAgICAgICAgICAgICAgIHNmaWxlLndyaXRlKGInXHgwMCcpCi0gICAgICAgICAgICBkZXN0ID0gc3BhcnNlLm5hbWUgKyAnLm91dCcKLSAgICAgICAgICAgICMgY29weSBzcmMgZmlsZSB0byBkZXN0IHVzaW5nIGRpZmZlcmVudCBmaWxlbWFwIEFQSXMKLSAgICAgICAgICAgIGZvciBhcGkgaW4gKEZpbGVtYXBGaWVtYXAsIEZpbGVtYXBTZWVrLCBOb25lKToKLSAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkZXN0KToKLSAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKGRlc3QpCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBzcGFyc2VfY29weShzcGFyc2UubmFtZSwgZGVzdCwgYXBpPWFwaSkKLSAgICAgICAgICAgICAgICBleGNlcHQgRXJyb3JOb3RTdXBwOgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZSAjIHNraXAgdW5zdXBwb3J0ZWQgQVBJCi0gICAgICAgICAgICAgICAgZGVzdF9zdGF0ID0gb3Muc3RhdChkZXN0KQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVzdF9zdGF0LnN0X3NpemUsIHNyY19zaXplKQotICAgICAgICAgICAgICAgICMgOCBibG9ja3MgaXMgNEsgKHBoeXNpY2FsIHNlY3RvciBzaXplKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVzdF9zdGF0LnN0X2Jsb2NrcywgOCkKLSAgICAgICAgICAgIG9zLnVubGluayhkZXN0KQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdGFyZ2V0Y29udHJvbC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3RhcmdldGNvbnRyb2wucHkKaW5kZXggMzI1NWUzYS4uZjYzOTM2YyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdGFyZ2V0Y29udHJvbC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS90YXJnZXRjb250cm9sLnB5CkBAIC0xOCw0NCArMTgsMTggQEAKIGZyb20gb2VxYS5jb250cm9sbGVycy50ZXN0dGFyZ2V0bG9hZGVyIGltcG9ydCBUZXN0VGFyZ2V0TG9hZGVyCiBmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3RtZXRob2QKIAotbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ0JpdEJha2UuUWVtdVJ1bm5lcicpCi0KLWRlZiBnZXRfdGFyZ2V0X2NvbnRyb2xsZXIoZCk6Ci0gICAgdGVzdHRhcmdldCA9IGQuZ2V0VmFyKCJURVNUX1RBUkdFVCIpCi0gICAgIyBvbGQsIHNpbXBsZSBuYW1lcwotICAgIGlmIHRlc3R0YXJnZXQgPT0gInFlbXUiOgotICAgICAgICByZXR1cm4gUWVtdVRhcmdldChkKQotICAgIGVsaWYgdGVzdHRhcmdldCA9PSAic2ltcGxlcmVtb3RlIjoKLSAgICAgICAgcmV0dXJuIFNpbXBsZVJlbW90ZVRhcmdldChkKQotICAgIGVsc2U6Ci0gICAgICAgICMgdXNlIHRoZSBjbGFzcyBuYW1lCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgaXMgaXQgYSBjb3JlIGNsYXNzIGRlZmluZWQgaGVyZT8KLSAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBnZXRhdHRyKHN5cy5tb2R1bGVzW19fbmFtZV9fXSwgdGVzdHRhcmdldCkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgIyBub3BlLCBwZXJoYXBzIGEgbGF5ZXIgZGVmaW5lZCBvbmUKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBiYnBhdGggPSBkLmdldFZhcigiQkJQQVRIIikuc3BsaXQoJzonKQotICAgICAgICAgICAgICAgIHRlc3R0YXJnZXRsb2FkZXIgPSBUZXN0VGFyZ2V0TG9hZGVyKCkKLSAgICAgICAgICAgICAgICBjb250cm9sbGVyID0gdGVzdHRhcmdldGxvYWRlci5nZXRfY29udHJvbGxlcl9tb2R1bGUodGVzdHRhcmdldCwgYmJwYXRoKQotICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgYmIuZmF0YWwoIkZhaWxlZCB0byBpbXBvcnQgezB9IGZyb20gYXZhaWxhYmxlIGNvbnRyb2xsZXIgbW9kdWxlczpcbnsxfSIuZm9ybWF0KHRlc3R0YXJnZXQsdHJhY2ViYWNrLmZvcm1hdF9leGMoKSkpCi0gICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBiYi5mYXRhbCgiSW52YWxpZCBURVNUX1RBUkdFVCAtICIgKyBzdHIoZSkpCi0gICAgICAgIHJldHVybiBjb250cm9sbGVyKGQpCi0KLQogY2xhc3MgQmFzZVRhcmdldChvYmplY3QsIG1ldGFjbGFzcz1BQkNNZXRhKToKIAogICAgIHN1cHBvcnRlZF9pbWFnZV9mc3R5cGVzID0gW10KIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgbG9nZ2VyKToKICAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gTm9uZQogICAgICAgICBzZWxmLmlwID0gTm9uZQogICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IE5vbmUKICAgICAgICAgc2VsZi5kYXRldGltZSA9IGQuZ2V0VmFyKCdEQVRFVElNRScpCiAgICAgICAgIHNlbGYudGVzdGRpciA9IGQuZ2V0VmFyKCJURVNUX0xPR19ESVIiKQogICAgICAgICBzZWxmLnBuID0gZC5nZXRWYXIoIlBOIikKKyAgICAgICAgc2VsZi5sb2dnZXIgPSBsb2dnZXIKIAogICAgIEBhYnN0cmFjdG1ldGhvZAogICAgIGRlZiBkZXBsb3koc2VsZik6CkBAIC02NSw3ICszOSw3IEBACiAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKHNzaGxvZ2xpbmspOgogICAgICAgICAgICAgb3MudW5saW5rKHNzaGxvZ2xpbmspCiAgICAgICAgIG9zLnN5bWxpbmsoc2VsZi5zc2hsb2csIHNzaGxvZ2xpbmspCi0gICAgICAgIGxvZ2dlci5pbmZvKCJTU0ggbG9nIGZpbGU6ICVzIiAlICBzZWxmLnNzaGxvZykKKyAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiU1NIIGxvZyBmaWxlOiAlcyIgJSAgc2VsZi5zc2hsb2cpCiAKICAgICBAYWJzdHJhY3RtZXRob2QKICAgICBkZWYgc3RhcnQoc2VsZiwgcGFyYW1zPU5vbmUsIHNzaD1UcnVlLCBleHRyYV9ib290cGFyYW1zPU5vbmUpOgpAQCAtMTE1LDkgKzg5LDkgQEAKIAogICAgIHN1cHBvcnRlZF9pbWFnZV9mc3R5cGVzID0gWydleHQzJywgJ2V4dDQnLCAnY3Bpby5neicsICd3aWMnXQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIGltYWdlX2ZzdHlwZT1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgbG9nZ2VyLCBpbWFnZV9mc3R5cGU9Tm9uZSk6CiAKLSAgICAgICAgc3VwZXIoUWVtdVRhcmdldCwgc2VsZikuX19pbml0X18oZCkKKyAgICAgICAgc3VwZXIoUWVtdVRhcmdldCwgc2VsZikuX19pbml0X18oZCwgbG9nZ2VyKQogCiAgICAgICAgIHNlbGYucm9vdGZzID0gJycKICAgICAgICAgc2VsZi5rZXJuZWwgPSAnJwpAQCAtMTQ1LDcgKzExOSw3IEBACiAgICAgICAgIHNlbGYucWVtdXJ1bm5lcmxvZyA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkaXIsICdxZW11cnVubmVyX2xvZy4lcycgJSBzZWxmLmRhdGV0aW1lKQogICAgICAgICBsb2dnZXJoYW5kbGVyID0gbG9nZ2luZy5GaWxlSGFuZGxlcihzZWxmLnFlbXVydW5uZXJsb2cpCiAgICAgICAgIGxvZ2dlcmhhbmRsZXIuc2V0Rm9ybWF0dGVyKGxvZ2dpbmcuRm9ybWF0dGVyKCIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpKQotICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihsb2dnZXJoYW5kbGVyKQorICAgICAgICBzZWxmLmxvZ2dlci5hZGRIYW5kbGVyKGxvZ2dlcmhhbmRsZXIpCiAgICAgICAgIG9lLnBhdGguc3ltbGluayhvcy5wYXRoLmJhc2VuYW1lKHNlbGYucWVtdXJ1bm5lcmxvZyksIG9zLnBhdGguam9pbihzZWxmLnRlc3RkaXIsICdxZW11cnVubmVyX2xvZycpLCBmb3JjZT1UcnVlKQogCiAgICAgICAgIGlmIGQuZ2V0VmFyKCJESVNUUk8iKSA9PSAicG9reS10aW55IjoKQEAgLTE1Niw3ICsxMzAsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgPSBkLmdldFZhcigiQkJfT1JJR0VOViIsIEZhbHNlKS5nZXRWYXIoIkRJU1BMQVkiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dmaWxlID0gc2VsZi5xZW11bG9nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbCA9IHNlbGYua2VybmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3R0aW1lID0gaW50KGQuZ2V0VmFyKCJURVNUX1FFTVVCT09UX1RJTUVPVVQiKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdHRpbWUgPSBpbnQoZC5nZXRWYXIoIlRFU1RfUUVNVUJPT1RfVElNRU9VVCIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIgPSBsb2dnZXIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLnJ1bm5lciA9IFFlbXVSdW5uZXIobWFjaGluZT1kLmdldFZhcigiTUFDSElORSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Rmcz1zZWxmLnJvb3RmcywKQEAgLTE2Nyw3ICsxNDIsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3R0aW1lID0gaW50KGQuZ2V0VmFyKCJURVNUX1FFTVVCT09UX1RJTUVPVVQiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlX2t2bSA9IHVzZV9rdm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcF9kaXIgPSBkdW1wX2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wX2hvc3RfY21kcyA9IGQuZ2V0VmFyKCJ0ZXN0aW1hZ2VfZHVtcF9ob3N0IikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcF9ob3N0X2NtZHMgPSBkLmdldFZhcigidGVzdGltYWdlX2R1bXBfaG9zdCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dlcikKIAogICAgICAgICBzZWxmLnRhcmdldF9kdW1wZXIgPSBUYXJnZXREdW1wZXIoZHVtcF90YXJnZXRfY21kcywgZHVtcF9kaXIsIHNlbGYucnVubmVyKQogCkBAIC0xNzksOCArMTU1LDggQEAKICAgICAgICAgICAgIG9zLnVubGluayhxZW11bG9nbGluaykKICAgICAgICAgb3Muc3ltbGluayhzZWxmLnFlbXVsb2csIHFlbXVsb2dsaW5rKQogCi0gICAgICAgIGxvZ2dlci5pbmZvKCJyb290ZnMgZmlsZTogJXMiICUgIHNlbGYucm9vdGZzKQotICAgICAgICBsb2dnZXIuaW5mbygiUWVtdSBsb2cgZmlsZTogJXMiICUgc2VsZi5xZW11bG9nKQorICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJyb290ZnMgZmlsZTogJXMiICUgIHNlbGYucm9vdGZzKQorICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJRZW11IGxvZyBmaWxlOiAlcyIgJSBzZWxmLnFlbXVsb2cpCiAgICAgICAgIHN1cGVyKFFlbXVUYXJnZXQsIHNlbGYpLmRlcGxveSgpCiAKICAgICBkZWYgc3RhcnQoc2VsZiwgcGFyYW1zPU5vbmUsIHNzaD1UcnVlLCBleHRyYV9ib290cGFyYW1zPScnLCBydW5xZW11cGFyYW1zPScnLCBsYXVuY2hfY21kPScnLCBkaXNjYXJkX3dyaXRlcz1UcnVlKToKQEAgLTIzMiwxNCArMjA4LDE0IEBACiAgICAgICAgICAgICBzZWxmLnBvcnQgPSBhZGRyLnNwbGl0KCI6IilbMV0KICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CiAgICAgICAgICAgICBzZWxmLnBvcnQgPSBOb25lCi0gICAgICAgIGxvZ2dlci5pbmZvKCJUYXJnZXQgSVA6ICVzIiAlIHNlbGYuaXApCisgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlRhcmdldCBJUDogJXMiICUgc2VsZi5pcCkKICAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBkLmdldFZhcigiVEVTVF9TRVJWRVJfSVAiKQogICAgICAgICBpZiBub3Qgc2VsZi5zZXJ2ZXJfaXA6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2lwJywgJ3JvdXRlJywgJ2dldCcsIHNlbGYuaXAgXSkuc3BsaXQoIlxuIilbMF0uc3BsaXQoKVstMV0KICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiRmFpbGVkIHRvIGRldGVybWluZSB0aGUgaG9zdCBJUCBhZGRyZXNzIChhbHRlcm5hdGl2ZWx5IHlvdSBjYW4gc2V0IFRFU1RfU0VSVkVSX0lQIHdpdGggdGhlIElQIGFkZHJlc3Mgb2YgdGhpcyBtYWNoaW5lKTogJXMiICUgZSkKLSAgICAgICAgbG9nZ2VyLmluZm8oIlNlcnZlciBJUDogJXMiICUgc2VsZi5zZXJ2ZXJfaXApCisgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlNlcnZlciBJUDogJXMiICUgc2VsZi5zZXJ2ZXJfaXApCiAKICAgICBkZWYgZGVwbG95KHNlbGYpOgogICAgICAgICBzdXBlcihTaW1wbGVSZW1vdGVUYXJnZXQsIHNlbGYpLmRlcGxveSgpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9fX2luaXRfXy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL19faW5pdF9fLnB5CmluZGV4IDQ4NWRlMDMuLmQzOGEzMjMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL19faW5pdF9fLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL19faW5pdF9fLnB5CkBAIC0yLDcgKzIsNiBAQAogZnJvbSBwa2d1dGlsIGltcG9ydCBleHRlbmRfcGF0aAogX19wYXRoX18gPSBleHRlbmRfcGF0aChfX3BhdGhfXywgX19uYW1lX18pCiAKLQogIyBCb3Jyb3dlZCBmcm9tIENhbGxlZFByb2Nlc3NFcnJvcgogCiBjbGFzcyBDb21tYW5kRXJyb3IoRXhjZXB0aW9uKToKQEAgLTY2LDMgKzY1LDM5IEBACiAgICAgbG9nZ2VyLmluZm8gPSBfYml0YmFrZV9sb2dfaW5mbwogCiAgICAgcmV0dXJuIGxvZ2dlcgorCitkZWYgbG9hZF90ZXN0X2NvbXBvbmVudHMobG9nZ2VyLCBleGVjdXRvcik6CisgICAgaW1wb3J0IHN5cworICAgIGltcG9ydCBvcworICAgIGltcG9ydCBpbXBvcnRsaWIKKworICAgIGZyb20gb2VxYS5jb3JlLmNvbnRleHQgaW1wb3J0IE9FVGVzdENvbnRleHRFeGVjdXRvcgorCisgICAgY29tcG9uZW50cyA9IHt9CisKKyAgICBmb3IgcGF0aCBpbiBzeXMucGF0aDoKKyAgICAgICAgYmFzZV9kaXIgPSBvcy5wYXRoLmpvaW4ocGF0aCwgJ29lcWEnKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhiYXNlX2RpcikgYW5kIG9zLnBhdGguaXNkaXIoYmFzZV9kaXIpOgorICAgICAgICAgICAgZm9yIGZpbGUgaW4gb3MubGlzdGRpcihiYXNlX2Rpcik6CisgICAgICAgICAgICAgICAgY29tcF9uYW1lID0gZmlsZQorICAgICAgICAgICAgICAgIGNvbXBfY29udGV4dCA9IG9zLnBhdGguam9pbihiYXNlX2RpciwgZmlsZSwgJ2NvbnRleHQucHknKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNvbXBfY29udGV4dCk6CisgICAgICAgICAgICAgICAgICAgIGNvbXBfcGx1Z2luID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ29lcWEuJXMuJXMnICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21wX25hbWUsICdjb250ZXh0JykpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc3N1YmNsYXNzKGNvbXBfcGx1Z2luLl9leGVjdXRvcl9jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0VUZXN0Q29udGV4dEV4ZWN1dG9yKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkNvbXBvbmVudCAlcyBpbiAlcywgX2V4ZWN1dG9yX2NsYXNzICJcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpc24ndCBkZXJpdmVkIGZyb20gT0VUZXN0Q29udGV4dEV4ZWN1dG9yLiJcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGNvbXBfbmFtZSwgY29tcF9jb250ZXh0KSkKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29tcF9wbHVnaW4uX2V4ZWN1dG9yX2NsYXNzLl9zY3JpcHRfZXhlY3V0b3IgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBleGVjdXRvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzW2NvbXBfbmFtZV0gPSBjb21wX3BsdWdpbi5fZXhlY3V0b3JfY2xhc3MoKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiQ29tcG9uZW50ICVzIGluICVzIGRvbid0IGhhdmUgIlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9leGVjdXRvcl9jbGFzcyBkZWZpbmVkLiIgJSAoY29tcF9uYW1lLCBjb21wX2NvbnRleHQpKQorCisgICAgcmV0dXJuIGNvbXBvbmVudHMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2J1aWxkcHJvamVjdC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2J1aWxkcHJvamVjdC5weQppbmRleCA0ODdmMDhiLi43MjFmMzVkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9idWlsZHByb2plY3QucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvYnVpbGRwcm9qZWN0LnB5CkBAIC01Miw0ICs1Miw0IEBACiAKICAgICBkZWYgY2xlYW4oc2VsZik6CiAgICAgICAgIHNlbGYuX3J1bigncm0gLXJmICVzJyAlIHNlbGYudGFyZ2V0ZGlyKQotICAgICAgICBzdWJwcm9jZXNzLmNhbGwoJ3JtIC1mICVzJyAlIHNlbGYubG9jYWxhcmNoaXZlLCBzaGVsbD1UcnVlKQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoJ3JtIC1mICVzJyAlIHNlbGYubG9jYWxhcmNoaXZlLCBzaGVsbD1UcnVlKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvY29tbWFuZHMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9jb21tYW5kcy5weQppbmRleCA1NzI4NmZjLi4wYmI5MDAyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9jb21tYW5kcy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9jb21tYW5kcy5weQpAQCAtMTMsNiArMTMsNyBAQAogaW1wb3J0IHNpZ25hbAogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1lCiBpbXBvcnQgbG9nZ2luZwogZnJvbSBvZXFhLnV0aWxzIGltcG9ydCBDb21tYW5kRXJyb3IKIGZyb20gb2VxYS51dGlscyBpbXBvcnQgZnRvb2xzCkBAIC0yNSw3ICsyNiw3IEBACiAgICAgcGFzcwogCiBjbGFzcyBDb21tYW5kKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmQsIGJnPUZhbHNlLCB0aW1lb3V0PU5vbmUsIGRhdGE9Tm9uZSwgKipvcHRpb25zKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZCwgYmc9RmFsc2UsIHRpbWVvdXQ9Tm9uZSwgZGF0YT1Ob25lLCBvdXRwdXRfbG9nPU5vbmUsICoqb3B0aW9ucyk6CiAKICAgICAgICAgc2VsZi5kZWZhdWx0b3B0cyA9IHsKICAgICAgICAgICAgICJzdGRvdXQiOiBzdWJwcm9jZXNzLlBJUEUsCkBAIC00OCw0MSArNDksMTAzIEBACiAgICAgICAgIHNlbGYub3B0aW9ucy51cGRhdGUob3B0aW9ucykKIAogICAgICAgICBzZWxmLnN0YXR1cyA9IE5vbmUKKyAgICAgICAgIyBXZSBjb2xsZWN0IGNodW5rcyBvZiBvdXRwdXQgYmVmb3JlIGpvaW5pbmcgdGhlbSBhdCB0aGUgZW5kLgorICAgICAgICBzZWxmLl9vdXRwdXRfY2h1bmtzID0gW10KKyAgICAgICAgc2VsZi5fZXJyb3JfY2h1bmtzID0gW10KICAgICAgICAgc2VsZi5vdXRwdXQgPSBOb25lCiAgICAgICAgIHNlbGYuZXJyb3IgPSBOb25lCi0gICAgICAgIHNlbGYudGhyZWFkID0gTm9uZQorICAgICAgICBzZWxmLnRocmVhZHMgPSBbXQogCisgICAgICAgIHNlbGYub3V0cHV0X2xvZyA9IG91dHB1dF9sb2cKICAgICAgICAgc2VsZi5sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigidXRpbHMuY29tbWFuZHMiKQogCiAgICAgZGVmIHJ1bihzZWxmKToKICAgICAgICAgc2VsZi5wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihzZWxmLmNtZCwgKipzZWxmLm9wdGlvbnMpCiAKLSAgICAgICAgZGVmIGNvbW1UaHJlYWQoKToKLSAgICAgICAgICAgIHNlbGYub3V0cHV0LCBzZWxmLmVycm9yID0gc2VsZi5wcm9jZXNzLmNvbW11bmljYXRlKHNlbGYuZGF0YSkKKyAgICAgICAgZGVmIHJlYWRUaHJlYWQob3V0cHV0LCBzdHJlYW0sIGxvZ2Z1bmMpOgorICAgICAgICAgICAgaWYgbG9nZnVuYzoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzdHJlYW06CisgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQobGluZSkKKyAgICAgICAgICAgICAgICAgICAgbG9nZnVuYyhsaW5lLmRlY29kZSgidXRmLTgiLCBlcnJvcnM9J3JlcGxhY2UnKS5yc3RyaXAoKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzdHJlYW0ucmVhZCgpKQogCi0gICAgICAgIHNlbGYudGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9Y29tbVRocmVhZCkKLSAgICAgICAgc2VsZi50aHJlYWQuc3RhcnQoKQorICAgICAgICBkZWYgcmVhZFN0ZGVyclRocmVhZCgpOgorICAgICAgICAgICAgcmVhZFRocmVhZChzZWxmLl9lcnJvcl9jaHVua3MsIHNlbGYucHJvY2Vzcy5zdGRlcnIsIHNlbGYub3V0cHV0X2xvZy5lcnJvciBpZiBzZWxmLm91dHB1dF9sb2cgZWxzZSBOb25lKQorCisgICAgICAgIGRlZiByZWFkU3Rkb3V0VGhyZWFkKCk6CisgICAgICAgICAgICByZWFkVGhyZWFkKHNlbGYuX291dHB1dF9jaHVua3MsIHNlbGYucHJvY2Vzcy5zdGRvdXQsIHNlbGYub3V0cHV0X2xvZy5pbmZvIGlmIHNlbGYub3V0cHV0X2xvZyBlbHNlIE5vbmUpCisKKyAgICAgICAgZGVmIHdyaXRlVGhyZWFkKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzLnN0ZGluLndyaXRlKHNlbGYuZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3Muc3RkaW4uY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXg6CisgICAgICAgICAgICAgICAgIyBJdCdzIG5vdCBhbiBlcnJvciB3aGVuIHRoZSBjb21tYW5kIGRvZXMgbm90IGNvbnN1bWUgYWxsCisgICAgICAgICAgICAgICAgIyBvZiBvdXIgZGF0YS4gc3VicHJvY2Vzcy5jb21tdW5pY2F0ZSgpIGFsc28gaWdub3JlcyB0aGF0LgorICAgICAgICAgICAgICAgIGlmIGV4LmVycm5vICE9IEVQSVBFOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgICMgV2Ugd3JpdGUgaW4gYSBzZXBhcmF0ZSB0aHJlYWQgYmVjYXVzZSB0aGVuIHdlIGNhbiByZWFkCisgICAgICAgICMgd2l0aG91dCB3b3JyeWluZyBhYm91dCBkZWFkbG9ja3MuIFRoZSBhZGRpdGlvbmFsIHRocmVhZCBpcworICAgICAgICAjIGV4cGVjdGVkIHRvIHRlcm1pbmF0ZSBieSBpdHNlbGYgYW5kIHdlIG1hcmsgaXQgYXMgYSBkYWVtb24sCisgICAgICAgICMgc28gZXZlbiBpdCBzaG91bGQgaGFwcGVuIHRvIG5vdCB0ZXJtaW5hdGUgZm9yIHdoYXRldmVyCisgICAgICAgICMgcmVhc29uLCB0aGUgbWFpbiBwcm9jZXNzIHdpbGwgc3RpbGwgZXhpdCwgd2hpY2ggd2lsbCB0aGVuCisgICAgICAgICMga2lsbCB0aGUgd3JpdGUgdGhyZWFkLgorICAgICAgICBpZiBzZWxmLmRhdGE6CisgICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD13cml0ZVRocmVhZCwgZGFlbW9uPVRydWUpLnN0YXJ0KCkKKyAgICAgICAgaWYgc2VsZi5wcm9jZXNzLnN0ZGVycjoKKyAgICAgICAgICAgIHRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXJlYWRTdGRlcnJUaHJlYWQpCisgICAgICAgICAgICB0aHJlYWQuc3RhcnQoKQorICAgICAgICAgICAgc2VsZi50aHJlYWRzLmFwcGVuZCh0aHJlYWQpCisgICAgICAgIGlmIHNlbGYub3V0cHV0X2xvZzoKKyAgICAgICAgICAgIHNlbGYub3V0cHV0X2xvZy5pbmZvKCdSdW5uaW5nOiAlcycgJSBzZWxmLmNtZCkKKyAgICAgICAgdGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9cmVhZFN0ZG91dFRocmVhZCkKKyAgICAgICAgdGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgc2VsZi50aHJlYWRzLmFwcGVuZCh0aHJlYWQpCiAKICAgICAgICAgc2VsZi5sb2cuZGVidWcoIlJ1bm5pbmcgY29tbWFuZCAnJXMnIiAlIHNlbGYuY21kKQogCiAgICAgICAgIGlmIG5vdCBzZWxmLmJnOgotICAgICAgICAgICAgc2VsZi50aHJlYWQuam9pbihzZWxmLnRpbWVvdXQpCisgICAgICAgICAgICBpZiBzZWxmLnRpbWVvdXQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBmb3IgdGhyZWFkIGluIHNlbGYudGhyZWFkczoKKyAgICAgICAgICAgICAgICAgICAgdGhyZWFkLmpvaW4oKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgc2VsZi50aW1lb3V0CisgICAgICAgICAgICAgICAgZm9yIHRocmVhZCBpbiBzZWxmLnRocmVhZHM6CisgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIHRpbWUudGltZSgpIAorICAgICAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IDwgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSAwCisgICAgICAgICAgICAgICAgICAgIHRocmVhZC5qb2luKHRpbWVvdXQpCiAgICAgICAgICAgICBzZWxmLnN0b3AoKQogCiAgICAgZGVmIHN0b3Aoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYudGhyZWFkLmlzQWxpdmUoKToKLSAgICAgICAgICAgIHNlbGYucHJvY2Vzcy50ZXJtaW5hdGUoKQorICAgICAgICBmb3IgdGhyZWFkIGluIHNlbGYudGhyZWFkczoKKyAgICAgICAgICAgIGlmIHRocmVhZC5pc0FsaXZlKCk6CisgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzLnRlcm1pbmF0ZSgpCiAgICAgICAgICAgICAjIGxldCdzIGdpdmUgaXQgbW9yZSB0aW1lIHRvIHRlcm1pbmF0ZSBncmFjZWZ1bGx5IGJlZm9yZSBraWxsaW5nIGl0Ci0gICAgICAgICAgICBzZWxmLnRocmVhZC5qb2luKDUpCi0gICAgICAgICAgICBpZiBzZWxmLnRocmVhZC5pc0FsaXZlKCk6CisgICAgICAgICAgICB0aHJlYWQuam9pbig1KQorICAgICAgICAgICAgaWYgdGhyZWFkLmlzQWxpdmUoKToKICAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3Mua2lsbCgpCi0gICAgICAgICAgICAgICAgc2VsZi50aHJlYWQuam9pbigpCisgICAgICAgICAgICAgICAgdGhyZWFkLmpvaW4oKQogCi0gICAgICAgIGlmIG5vdCBzZWxmLm91dHB1dDoKLSAgICAgICAgICAgIHNlbGYub3V0cHV0ID0gIiIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYub3V0cHV0ID0gc2VsZi5vdXRwdXQuZGVjb2RlKCJ1dGYtOCIsIGVycm9ycz0ncmVwbGFjZScpLnJzdHJpcCgpCi0gICAgICAgIHNlbGYuc3RhdHVzID0gc2VsZi5wcm9jZXNzLnBvbGwoKQorICAgICAgICBkZWYgZmluYWxpemVfb3V0cHV0KGRhdGEpOgorICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgZGF0YSA9ICIiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRhdGEgPSBiIiIuam9pbihkYXRhKQorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLmRlY29kZSgidXRmLTgiLCBlcnJvcnM9J3JlcGxhY2UnKS5yc3RyaXAoKQorICAgICAgICAgICAgcmV0dXJuIGRhdGEKKworICAgICAgICBzZWxmLm91dHB1dCA9IGZpbmFsaXplX291dHB1dChzZWxmLl9vdXRwdXRfY2h1bmtzKQorICAgICAgICBzZWxmLl9vdXRwdXRfY2h1bmtzID0gTm9uZQorICAgICAgICAjIHNlbGYuZXJyb3IgdXNlZCB0byBiZSBhIGJ5dGUgc3RyaW5nIGVhcmxpZXIsIHByb2JhYmx5IHVuaW50ZW50aW9uYWxseS4KKyAgICAgICAgIyBOb3cgaXQgaXMgYSBub3JtYWwgc3RyaW5nLCBqdXN0IGxpa2Ugc2VsZi5vdXRwdXQuCisgICAgICAgIHNlbGYuZXJyb3IgPSBmaW5hbGl6ZV9vdXRwdXQoc2VsZi5fZXJyb3JfY2h1bmtzKQorICAgICAgICBzZWxmLl9lcnJvcl9jaHVua3MgPSBOb25lCisgICAgICAgICMgQXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoYXQgdGhlIHByb2Nlc3MgaGFzIGNsb3NlZCBzdGRvdXQvc3RkZXJyLCBzbworICAgICAgICAjIGl0IGlzIHNhZmUgYW5kIG5lY2Vzc2FyeSB0byB3YWl0IGZvciB0aGUgYWN0dWFsIHByb2Nlc3MgY29tcGxldGlvbi4KKyAgICAgICAgc2VsZi5zdGF0dXMgPSBzZWxmLnByb2Nlc3Mud2FpdCgpCiAKICAgICAgICAgc2VsZi5sb2cuZGVidWcoIkNvbW1hbmQgJyVzJyByZXR1cm5lZCAlZCBhcyBleGl0IGNvZGUuIiAlIChzZWxmLmNtZCwgc2VsZi5zdGF0dXMpKQogICAgICAgICAjIGxvZ2dpbmcgdGhlIGNvbXBsZXRlIG91dHB1dCBpcyBpbnNhbmUKQEAgLTk4LDcgKzE2MSw3IEBACiAKIAogZGVmIHJ1bkNtZChjb21tYW5kLCBpZ25vcmVfc3RhdHVzPUZhbHNlLCB0aW1lb3V0PU5vbmUsIGFzc2VydF9lcnJvcj1UcnVlLAotICAgICAgICAgIG5hdGl2ZV9zeXNyb290PU5vbmUsIGxpbWl0X2V4Y19vdXRwdXQ9MCwgKipvcHRpb25zKToKKyAgICAgICAgICBuYXRpdmVfc3lzcm9vdD1Ob25lLCBsaW1pdF9leGNfb3V0cHV0PTAsIG91dHB1dF9sb2c9Tm9uZSwgKipvcHRpb25zKToKICAgICByZXN1bHQgPSBSZXN1bHQoKQogCiAgICAgaWYgbmF0aXZlX3N5c3Jvb3Q6CkBAIC0xMDgsNyArMTcxLDcgQEAKICAgICAgICAgbmVudlsnUEFUSCddID0gZXh0cmFfcGF0aHMgKyAnOicgKyBuZW52LmdldCgnUEFUSCcsICcnKQogICAgICAgICBvcHRpb25zWydlbnYnXSA9IG5lbnYKIAotICAgIGNtZCA9IENvbW1hbmQoY29tbWFuZCwgdGltZW91dD10aW1lb3V0LCAqKm9wdGlvbnMpCisgICAgY21kID0gQ29tbWFuZChjb21tYW5kLCB0aW1lb3V0PXRpbWVvdXQsIG91dHB1dF9sb2c9b3V0cHV0X2xvZywgKipvcHRpb25zKQogICAgIGNtZC5ydW4oKQogCiAgICAgcmVzdWx0LmNvbW1hbmQgPSBjb21tYW5kCkBAIC0xMzIsNyArMTk1LDcgQEAKICAgICByZXR1cm4gcmVzdWx0CiAKIAotZGVmIGJpdGJha2UoY29tbWFuZCwgaWdub3JlX3N0YXR1cz1GYWxzZSwgdGltZW91dD1Ob25lLCBwb3N0Y29uZmlnPU5vbmUsICoqb3B0aW9ucyk6CitkZWYgYml0YmFrZShjb21tYW5kLCBpZ25vcmVfc3RhdHVzPUZhbHNlLCB0aW1lb3V0PU5vbmUsIHBvc3Rjb25maWc9Tm9uZSwgb3V0cHV0X2xvZz1Ob25lLCAqKm9wdGlvbnMpOgogCiAgICAgaWYgcG9zdGNvbmZpZzoKICAgICAgICAgcG9zdGNvbmZpZ19maWxlID0gb3MucGF0aC5qb2luKG9zLmVudmlyb24uZ2V0KCdCVUlMRERJUicpLCAnb2VxYS1wb3N0LmNvbmYnKQpAQCAtMTQ3LDcgKzIxMCw3IEBACiAgICAgICAgIGNtZCA9IFsgImJpdGJha2UiIF0gKyBbYSBmb3IgYSBpbiAoY29tbWFuZCArIGV4dHJhX2FyZ3Muc3BsaXQoIiAiKSkgaWYgYSBub3QgaW4gWyIiXV0KIAogICAgIHRyeToKLSAgICAgICAgcmV0dXJuIHJ1bkNtZChjbWQsIGlnbm9yZV9zdGF0dXMsIHRpbWVvdXQsICoqb3B0aW9ucykKKyAgICAgICAgcmV0dXJuIHJ1bkNtZChjbWQsIGlnbm9yZV9zdGF0dXMsIHRpbWVvdXQsIG91dHB1dF9sb2c9b3V0cHV0X2xvZywgKipvcHRpb25zKQogICAgIGZpbmFsbHk6CiAgICAgICAgIGlmIHBvc3Rjb25maWc6CiAgICAgICAgICAgICBvcy5yZW1vdmUocG9zdGNvbmZpZ19maWxlKQpAQCAtMjMzLDYgKzI5NiwxMiBAQAogICAgIGltcG9ydCBiYi50aW5mb2lsCiAgICAgaW1wb3J0IGJiLmJ1aWxkCiAKKyAgICAjIE5lZWQgYSBub24tJ0JpdEJha2UnIGxvZ2dlciB0byBjYXB0dXJlIHRoZSBydW5uZXIgb3V0cHV0CisgICAgdGFyZ2V0bG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ1RhcmdldFJ1bm5lcicpCisgICAgdGFyZ2V0bG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisgICAgaGFuZGxlciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3Rkb3V0KQorICAgIHRhcmdldGxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCisKICAgICB0aW5mb2lsID0gYmIudGluZm9pbC5UaW5mb2lsKCkKICAgICB0aW5mb2lsLnByZXBhcmUoY29uZmlnX29ubHk9RmFsc2UsIHF1aWV0PVRydWUpCiAgICAgdHJ5OgpAQCAtMjUwLDMxICszMTksMTUgQEAKICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gb3ZlcnJpZGVzLml0ZW1zKCk6CiAgICAgICAgICAgICByZWNpcGVkYXRhLnNldFZhcihrZXksIHZhbHVlKQogCi0gICAgICAgICMgVGhlIFFlbXVSdW5uZXIgbG9nIGlzIHNhdmVkIG91dCwgYnV0IHdlIG5lZWQgdG8gZW5zdXJlIGl0IGlzIGF0IHRoZSByaWdodAotICAgICAgICAjIGxvZyBsZXZlbCAoYW5kIHRoZW4gZW5zdXJlIHRoYXQgc2luY2UgaXQncyBhIGNoaWxkIG9mIHRoZSBCaXRCYWtlIGxvZ2dlciwKLSAgICAgICAgIyB3ZSBkaXNhYmxlIHByb3BhZ2F0aW9uIHNvIHdlIGRvbid0IHRoZW4gc2VlIHRoZSBsb2cgZXZlbnRzIG9uIHRoZSBjb25zb2xlKQotICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZS5RZW11UnVubmVyJykKLSAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCi0gICAgICAgIGxvZ2dlci5wcm9wYWdhdGUgPSBGYWxzZQogICAgICAgICBsb2dkaXIgPSByZWNpcGVkYXRhLmdldFZhcigiVEVTVF9MT0dfRElSIikKIAotICAgICAgICBxZW11ID0gb2VxYS50YXJnZXRjb250cm9sLlFlbXVUYXJnZXQocmVjaXBlZGF0YSwgaW1hZ2VfZnN0eXBlKQorICAgICAgICBxZW11ID0gb2VxYS50YXJnZXRjb250cm9sLlFlbXVUYXJnZXQocmVjaXBlZGF0YSwgdGFyZ2V0bG9nZ2VyLCBpbWFnZV9mc3R5cGUpCiAgICAgZmluYWxseToKICAgICAgICAgIyBXZSBuZWVkIHRvIHNodXQgZG93biB0aW5mb2lsIGVhcmx5IGhlcmUgaW4gY2FzZSB3ZSBhY3R1YWxseSB3YW50CiAgICAgICAgICMgdG8gcnVuIHRpbmZvaWwtdXNpbmcgdXRpbGl0aWVzIHdpdGggdGhlIHJ1bm5pbmcgUUVNVSBpbnN0YW5jZS4KICAgICAgICAgIyBMdWNraWx5IFFlbXVUYXJnZXQgZG9lc24ndCBuZWVkIGl0IGFmdGVyIHRoZSBjb25zdHJ1Y3Rvci4KICAgICAgICAgdGluZm9pbC5zaHV0ZG93bigpCiAKLSAgICAjIFNldHVwIGJpdGJha2UgbG9nZ2VyIGFzIGNvbnNvbGUgaGFuZGxlciBpcyByZW1vdmVkIGJ5IHRpbmZvaWwuc2h1dGRvd24KLSAgICBiYmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdCaXRCYWtlJykKLSAgICBiYmxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCi0gICAgY29uc29sZSA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3Rkb3V0KQotICAgIGJiZm9ybWF0ID0gYmIubXNnLkJCTG9nRm9ybWF0dGVyKCIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpCi0gICAgaWYgc3lzLnN0ZG91dC5pc2F0dHkoKToKLSAgICAgICAgYmJmb3JtYXQuZW5hYmxlX2NvbG9yKCkKLSAgICBjb25zb2xlLnNldEZvcm1hdHRlcihiYmZvcm1hdCkKLSAgICBiYmxvZ2dlci5hZGRIYW5kbGVyKGNvbnNvbGUpCi0KICAgICB0cnk6CiAgICAgICAgIHFlbXUuZGVwbG95KCkKICAgICAgICAgdHJ5OgpAQCAtMjg5LDYgKzM0Miw3IEBACiAgICAgICAgICAgICBxZW11LnN0b3AoKQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBwYXNzCisgICAgdGFyZ2V0bG9nZ2VyLnJlbW92ZUhhbmRsZXIoaGFuZGxlcikKIAogZGVmIHVwZGF0ZUVudihlbnZfZmlsZSk6CiAgICAgIiIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9naXQucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9naXQucHkKaW5kZXggZTBjYjNmMC4uNzU3ZTNmMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvZ2l0LnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2dpdC5weQpAQCAtNjQsNyArNjQsNyBAQAogICAgIGRlZiByZXZfcGFyc2Uoc2VsZiwgcmV2aXNpb24pOgogICAgICAgICAiIiJEbyBnaXQgcmV2LXBhcnNlIiIiCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnJ1bl9jbWQoWydyZXYtcGFyc2UnLCByZXZpc2lvbl0pCisgICAgICAgICAgICByZXR1cm4gc2VsZi5ydW5fY21kKFsncmV2LXBhcnNlJywgJy0tdmVyaWZ5JywgcmV2aXNpb25dKQogICAgICAgICBleGNlcHQgR2l0RXJyb3I6CiAgICAgICAgICAgICAjIFJldmlzaW9uIGRvZXMgbm90IGV4aXN0CiAgICAgICAgICAgICByZXR1cm4gTm9uZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvbG9ncGFyc2VyLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvbG9ncGFyc2VyLnB5CmluZGV4IGIzNzdkY2QuLjA2NzA2MjcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2xvZ3BhcnNlci5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9sb2dwYXJzZXIucHkKQEAgLTksNyArOSw3IEBACiAjIEEgcGFyc2VyIHRoYXQgY2FuIGJlIHVzZWQgdG8gaWRlbnRpZnkgd2VhdGhlciBhIGxpbmUgaXMgYSB0ZXN0IHJlc3VsdCBvciBhIHNlY3Rpb24gc3RhdGVtZW50LgogY2xhc3MgTHBhcnNlcihvYmplY3QpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfMF9wYXNzX3JlZ2V4LCB0ZXN0XzBfZmFpbF9yZWdleCwgc2VjdGlvbl8wX2JlZ2luX3JlZ2V4PU5vbmUsIHNlY3Rpb25fMF9lbmRfcmVnZXg9Tm9uZSwgKiprd2FyZ3MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0XzBfcGFzc19yZWdleCwgdGVzdF8wX2ZhaWxfcmVnZXgsIHRlc3RfMF9za2lwX3JlZ2V4LCBzZWN0aW9uXzBfYmVnaW5fcmVnZXg9Tm9uZSwgc2VjdGlvbl8wX2VuZF9yZWdleD1Ob25lLCAqKmt3YXJncyk6CiAgICAgICAgICMgSW5pdGlhbGl6ZSB0aGUgYXJndW1lbnRzIGRpY3Rpb25hcnkKICAgICAgICAgaWYga3dhcmdzOgogICAgICAgICAgICAgc2VsZi5hcmdzID0ga3dhcmdzCkBAIC0xOSwxMiArMTksMTMgQEAKICAgICAgICAgIyBBZGQgdGhlIGRlZmF1bHQgYXJncyB0byB0aGUgZGljdGlvbmFyeQogICAgICAgICBzZWxmLmFyZ3NbJ3Rlc3RfMF9wYXNzX3JlZ2V4J10gPSB0ZXN0XzBfcGFzc19yZWdleAogICAgICAgICBzZWxmLmFyZ3NbJ3Rlc3RfMF9mYWlsX3JlZ2V4J10gPSB0ZXN0XzBfZmFpbF9yZWdleAorICAgICAgICBzZWxmLmFyZ3NbJ3Rlc3RfMF9za2lwX3JlZ2V4J10gPSB0ZXN0XzBfc2tpcF9yZWdleAogICAgICAgICBpZiBzZWN0aW9uXzBfYmVnaW5fcmVnZXg6CiAgICAgICAgICAgICBzZWxmLmFyZ3NbJ3NlY3Rpb25fMF9iZWdpbl9yZWdleCddID0gc2VjdGlvbl8wX2JlZ2luX3JlZ2V4CiAgICAgICAgIGlmIHNlY3Rpb25fMF9lbmRfcmVnZXg6CiAgICAgICAgICAgICBzZWxmLmFyZ3NbJ3NlY3Rpb25fMF9lbmRfcmVnZXgnXSA9IHNlY3Rpb25fMF9lbmRfcmVnZXgKIAotICAgICAgICBzZWxmLnRlc3RfcG9zc2libGVfc3RhdHVzID0gWydwYXNzJywgJ2ZhaWwnLCAnZXJyb3InXQorICAgICAgICBzZWxmLnRlc3RfcG9zc2libGVfc3RhdHVzID0gWydwYXNzJywgJ2ZhaWwnLCAnZXJyb3InLCAnc2tpcCddCiAgICAgICAgIHNlbGYuc2VjdGlvbl9wb3NzaWJsZV9zdGF0dXMgPSBbJ2JlZ2luJywgJ2VuZCddCiAKICAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IEZhbHNlCkBAIC0xMDgsNyArMTA5LDcgQEAKICAgICAgICAgICAgIHByZWZpeCA9ICcnCiAgICAgICAgICAgICBmb3IgeCBpbiB0ZXN0X3N0YXR1czoKICAgICAgICAgICAgICAgICBwcmVmaXggKz14KycuJwotICAgICAgICAgICAgaWYgKHNlY3Rpb24gIT0gJycpOgorICAgICAgICAgICAgaWYgc2VjdGlvbjoKICAgICAgICAgICAgICAgICBwcmVmaXggKz0gc2VjdGlvbgogICAgICAgICAgICAgc2VjdGlvbl9maWxlID0gb3MucGF0aC5qb2luKHRhcmdldF9kaXIsIHByZWZpeCkKICAgICAgICAgICAgICMgcHVyZ2UgdGhlIGZpbGUgY29udGVudHMgaWYgaXQgZXhpc3RzCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9tZXRhZGF0YS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL21ldGFkYXRhLnB5CmluZGV4IGNiODExNTUuLjY1YmJkYzYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL21ldGFkYXRhLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL21ldGFkYXRhLnB5CkBAIC0xMCwxOSArMTAsOSBAQAogZnJvbSB4bWwuZG9tLm1pbmlkb20gaW1wb3J0IHBhcnNlU3RyaW5nCiBmcm9tIHhtbC5ldHJlZS5FbGVtZW50VHJlZSBpbXBvcnQgRWxlbWVudCwgdG9zdHJpbmcKIAorZnJvbSBvZS5sc2IgaW1wb3J0IGdldF9vc19yZWxlYXNlCiBmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgZ2V0X2JiX3ZhcnMKIAotZGVmIGdldF9vc19yZWxlYXNlKCk6Ci0gICAgIiIiR2V0IGluZm8gZnJvbSAvZXRjL29zLXJlbGVhc2UgYXMgYSBkaWN0IiIiCi0gICAgZGF0YSA9IE9yZGVyZWREaWN0KCkKLSAgICBvc19yZWxlYXNlX2ZpbGUgPSAnL2V0Yy9vcy1yZWxlYXNlJwotICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvc19yZWxlYXNlX2ZpbGUpOgotICAgICAgICByZXR1cm4gTm9uZQotICAgIHdpdGggb3Blbihvc19yZWxlYXNlX2ZpbGUpIGFzIGZvYmo6Ci0gICAgICAgIGZvciBsaW5lIGluIGZvYmo6Ci0gICAgICAgICAgICBrZXksIHZhbHVlID0gbGluZS5zcGxpdCgnPScsIDEpCi0gICAgICAgICAgICBkYXRhW2tleS5zdHJpcCgpLmxvd2VyKCldID0gdmFsdWUuc3RyaXAoKS5zdHJpcCgnIicpCi0gICAgcmV0dXJuIGRhdGEKIAogZGVmIG1ldGFkYXRhX2Zyb21fYmIoKToKICAgICAiIiIgUmV0dXJucyB0ZXN0J3MgbWV0YWRhdGEgYXMgT3JkZXJlZERpY3QuCkBAIC00NSw5ICszNSw5IEBACiAgICAgb3NfcmVsZWFzZSA9IGdldF9vc19yZWxlYXNlKCkKICAgICBpZiBvc19yZWxlYXNlOgogICAgICAgICBpbmZvX2RpY3RbJ2hvc3RfZGlzdHJvJ10gPSBPcmRlcmVkRGljdCgpCi0gICAgICAgIGZvciBrZXkgaW4gKCdpZCcsICd2ZXJzaW9uX2lkJywgJ3ByZXR0eV9uYW1lJyk6CisgICAgICAgIGZvciBrZXkgaW4gKCdJRCcsICdWRVJTSU9OX0lEJywgJ1BSRVRUWV9OQU1FJyk6CiAgICAgICAgICAgICBpZiBrZXkgaW4gb3NfcmVsZWFzZToKLSAgICAgICAgICAgICAgICBpbmZvX2RpY3RbJ2hvc3RfZGlzdHJvJ11ba2V5XSA9IG9zX3JlbGVhc2Vba2V5XQorICAgICAgICAgICAgICAgIGluZm9fZGljdFsnaG9zdF9kaXN0cm8nXVtrZXkubG93ZXIoKV0gPSBvc19yZWxlYXNlW2tleV0KIAogICAgIGluZm9fZGljdFsnbGF5ZXJzJ10gPSBnZXRfbGF5ZXJzKGRhdGFfZGljdFsnQkJMQVlFUlMnXSkKICAgICBpbmZvX2RpY3RbJ2JpdGJha2UnXSA9IGdpdF9yZXZfaW5mbyhvcy5wYXRoLmRpcm5hbWUoYmIuX19maWxlX18pKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvcWVtdXJ1bm5lci5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL3FlbXVydW5uZXIucHkKaW5kZXggYmE0NGI5Ni4uMDYzMWQ0MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvcWVtdXJ1bm5lci5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9xZW11cnVubmVyLnB5CkBAIC0xNywxMSArMTcsOCBAQAogaW1wb3J0IHN0cmluZwogaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IGNvZGVjcwotZnJvbSBvZXFhLnV0aWxzLmR1bXAgaW1wb3J0IEhvc3REdW1wZXIKLQogaW1wb3J0IGxvZ2dpbmcKLWxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlLlFlbXVSdW5uZXIiKQotbG9nZ2VyLmFkZEhhbmRsZXIobG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkpCitmcm9tIG9lcWEudXRpbHMuZHVtcCBpbXBvcnQgSG9zdER1bXBlcgogCiAjIEdldCBVbmljb2RlIG5vbiBwcmludGFibGUgY29udHJvbCBjaGFycwogY29udHJvbF9yYW5nZSA9IGxpc3QocmFuZ2UoMCwzMikpK2xpc3QocmFuZ2UoMTI3LDE2MCkpCkBAIC0zMSw3ICsyOCw3IEBACiAKIGNsYXNzIFFlbXVSdW5uZXI6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWFjaGluZSwgcm9vdGZzLCBkaXNwbGF5LCB0bXBkaXIsIGRlcGxveV9kaXJfaW1hZ2UsIGxvZ2ZpbGUsIGJvb3R0aW1lLCBkdW1wX2RpciwgZHVtcF9ob3N0X2NtZHMsIHVzZV9rdm0pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYWNoaW5lLCByb290ZnMsIGRpc3BsYXksIHRtcGRpciwgZGVwbG95X2Rpcl9pbWFnZSwgbG9nZmlsZSwgYm9vdHRpbWUsIGR1bXBfZGlyLCBkdW1wX2hvc3RfY21kcywgdXNlX2t2bSwgbG9nZ2VyKToKIAogICAgICAgICAjIFBvcGVuIG9iamVjdCBmb3IgcnVucWVtdQogICAgICAgICBzZWxmLnJ1bnFlbXUgPSBOb25lCkBAIC01NCwxMCArNTEsMTQgQEAKICAgICAgICAgc2VsZi5sb2dnZWQgPSBGYWxzZQogICAgICAgICBzZWxmLnRocmVhZCA9IE5vbmUKICAgICAgICAgc2VsZi51c2Vfa3ZtID0gdXNlX2t2bQorICAgICAgICBzZWxmLm1zZyA9ICcnCiAKLSAgICAgICAgc2VsZi5ydW5xZW11dGltZSA9IDYwCisgICAgICAgIHNlbGYucnVucWVtdXRpbWUgPSAxMjAKKyAgICAgICAgc2VsZi5xZW11X3BpZGZpbGUgPSAncGlkZmlsZV8nK3N0cihvcy5nZXRwaWQoKSkKICAgICAgICAgc2VsZi5ob3N0X2R1bXBlciA9IEhvc3REdW1wZXIoZHVtcF9ob3N0X2NtZHMsIGR1bXBfZGlyKQogCisgICAgICAgIHNlbGYubG9nZ2VyID0gbG9nZ2VyCisKICAgICBkZWYgY3JlYXRlX3NvY2tldChzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKQEAgLTY1LDcgKzY2LDcgQEAKICAgICAgICAgICAgIHNvY2suYmluZCgoIjEyNy4wLjAuMSIsMCkpCiAgICAgICAgICAgICBzb2NrLmxpc3RlbigyKQogICAgICAgICAgICAgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKVsxXQotICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkNyZWF0ZWQgbGlzdGVuaW5nIHNvY2tldCBmb3IgcWVtdSBzZXJpYWwgY29uc29sZSBvbjogMTI3LjAuMC4xOiVzIiAlIHBvcnQpCisgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiQ3JlYXRlZCBsaXN0ZW5pbmcgc29ja2V0IGZvciBxZW11IHNlcmlhbCBjb25zb2xlIG9uOiAxMjcuMC4wLjE6JXMiICUgcG9ydCkKICAgICAgICAgICAgIHJldHVybiAoc29jaywgcG9ydCkKIAogICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgpAQCAtNzgsNiArNzksNyBAQAogICAgICAgICAgICAgIyBiZWNhdXNlIGlzIHBvc3NpYmxlIHRvIGhhdmUgY29udHJvbCBjaGFyYWN0ZXJzCiAgICAgICAgICAgICBtc2cgPSBtc2cuZGVjb2RlKCJ1dGYtOCIsIGVycm9ycz0naWdub3JlJykKICAgICAgICAgICAgIG1zZyA9IHJlX2NvbnRyb2xfY2hhci5zdWIoJycsIG1zZykKKyAgICAgICAgICAgIHNlbGYubXNnICs9IG1zZwogICAgICAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihzZWxmLmxvZ2ZpbGUsICJhIiwgZW5jb2Rpbmc9InV0Zi04IikgYXMgZjoKICAgICAgICAgICAgICAgICBmLndyaXRlKCIlcyIgJSBtc2cpCiAKQEAgLTkxLDU4ICs5Myw2MyBAQAogICAgIGRlZiBoYW5kbGVTSUdDSExEKHNlbGYsIHNpZ251bSwgZnJhbWUpOgogICAgICAgICBpZiBzZWxmLnJ1bnFlbXUgYW5kIHNlbGYucnVucWVtdS5wb2xsKCk6CiAgICAgICAgICAgICBpZiBzZWxmLnJ1bnFlbXUucmV0dXJuY29kZToKLSAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygncnVucWVtdSBleGl0ZWQgd2l0aCBjb2RlICVkJyAlIHNlbGYucnVucWVtdS5yZXR1cm5jb2RlKQotICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJPdXRwdXQgZnJvbSBydW5xZW11OlxuJXMiICUgc2VsZi5nZXRPdXRwdXQoc2VsZi5ydW5xZW11LnN0ZG91dCkpCisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoJ3J1bnFlbXUgZXhpdGVkIHdpdGggY29kZSAlZCcgJSBzZWxmLnJ1bnFlbXUucmV0dXJuY29kZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiT3V0cHV0IGZyb20gcnVucWVtdTpcbiVzIiAlIHNlbGYuZ2V0T3V0cHV0KHNlbGYucnVucWVtdS5zdGRvdXQpKQogICAgICAgICAgICAgICAgIHNlbGYuc3RvcCgpCiAgICAgICAgICAgICAgICAgc2VsZi5fZHVtcF9ob3N0KCkKICAgICAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0CiAKICAgICBkZWYgc3RhcnQoc2VsZiwgcWVtdXBhcmFtcyA9IE5vbmUsIGdldF9pcCA9IFRydWUsIGV4dHJhX2Jvb3RwYXJhbXMgPSBOb25lLCBydW5xZW11cGFyYW1zPScnLCBsYXVuY2hfY21kPU5vbmUsIGRpc2NhcmRfd3JpdGVzPVRydWUpOgorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQogICAgICAgICBpZiBzZWxmLmRpc3BsYXk6Ci0gICAgICAgICAgICBvcy5lbnZpcm9uWyJESVNQTEFZIl0gPSBzZWxmLmRpc3BsYXkKKyAgICAgICAgICAgIGVudlsiRElTUExBWSJdID0gc2VsZi5kaXNwbGF5CiAgICAgICAgICAgICAjIFNldCB0aGlzIGZsYWcgc28gdGhhdCBRZW11IGRvZXNuJ3QgZG8gYW55IGdyYWJzIGFzIFNETCBncmFicwogICAgICAgICAgICAgIyBpbnRlcmFjdCBiYWRseSB3aXRoIHNjcmVlbnNhdmVycy4KLSAgICAgICAgICAgIG9zLmVudmlyb25bIlFFTVVfRE9OVF9HUkFCIl0gPSAiMSIKKyAgICAgICAgICAgIGVudlsiUUVNVV9ET05UX0dSQUIiXSA9ICIxIgogICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5yb290ZnMpOgotICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJJbnZhbGlkIHJvb3RmcyAlcyIgJSBzZWxmLnJvb3RmcykKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKCJJbnZhbGlkIHJvb3RmcyAlcyIgJSBzZWxmLnJvb3RmcykKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi50bXBkaXIpOgotICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJJbnZhbGlkIFRNUERJUiBwYXRoICVzIiAlIHNlbGYudG1wZGlyKQorICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IoIkludmFsaWQgVE1QRElSIHBhdGggJXMiICUgc2VsZi50bXBkaXIpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG9zLmVudmlyb25bIk9FX1RNUERJUiJdID0gc2VsZi50bXBkaXIKKyAgICAgICAgICAgIGVudlsiT0VfVE1QRElSIl0gPSBzZWxmLnRtcGRpcgogICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5kZXBsb3lfZGlyX2ltYWdlKToKLSAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiSW52YWxpZCBERVBMT1lfRElSX0lNQUdFIHBhdGggJXMiICUgc2VsZi5kZXBsb3lfZGlyX2ltYWdlKQorICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IoIkludmFsaWQgREVQTE9ZX0RJUl9JTUFHRSBwYXRoICVzIiAlIHNlbGYuZGVwbG95X2Rpcl9pbWFnZSkKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgb3MuZW52aXJvblsiREVQTE9ZX0RJUl9JTUFHRSJdID0gc2VsZi5kZXBsb3lfZGlyX2ltYWdlCisgICAgICAgICAgICBlbnZbIkRFUExPWV9ESVJfSU1BR0UiXSA9IHNlbGYuZGVwbG95X2Rpcl9pbWFnZQogCiAgICAgICAgIGlmIG5vdCBsYXVuY2hfY21kOgogICAgICAgICAgICAgbGF1bmNoX2NtZCA9ICdydW5xZW11ICVzICVzICcgJSAoJ3NuYXBzaG90JyBpZiBkaXNjYXJkX3dyaXRlcyBlbHNlICcnLCBydW5xZW11cGFyYW1zKQogICAgICAgICAgICAgaWYgc2VsZi51c2Vfa3ZtOgotICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdVc2luZyBrdm0gZm9yIHJ1bnFlbXUnKQorICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCdVc2luZyBrdm0gZm9yIHJ1bnFlbXUnKQogICAgICAgICAgICAgICAgIGxhdW5jaF9jbWQgKz0gJyBrdm0nCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdOb3QgdXNpbmcga3ZtIGZvciBydW5xZW11JykKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygnTm90IHVzaW5nIGt2bSBmb3IgcnVucWVtdScpCiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5kaXNwbGF5OgogICAgICAgICAgICAgICAgIGxhdW5jaF9jbWQgKz0gJyBub2dyYXBoaWMnCiAgICAgICAgICAgICBsYXVuY2hfY21kICs9ICcgJXMgJXMnICUgKHNlbGYubWFjaGluZSwgc2VsZi5yb290ZnMpCiAKLSAgICAgICAgcmV0dXJuIHNlbGYubGF1bmNoKGxhdW5jaF9jbWQsIHFlbXVwYXJhbXM9cWVtdXBhcmFtcywgZ2V0X2lwPWdldF9pcCwgZXh0cmFfYm9vdHBhcmFtcz1leHRyYV9ib290cGFyYW1zKQorICAgICAgICByZXR1cm4gc2VsZi5sYXVuY2gobGF1bmNoX2NtZCwgcWVtdXBhcmFtcz1xZW11cGFyYW1zLCBnZXRfaXA9Z2V0X2lwLCBleHRyYV9ib290cGFyYW1zPWV4dHJhX2Jvb3RwYXJhbXMsIGVudj1lbnYpCiAKLSAgICBkZWYgbGF1bmNoKHNlbGYsIGxhdW5jaF9jbWQsIGdldF9pcCA9IFRydWUsIHFlbXVwYXJhbXMgPSBOb25lLCBleHRyYV9ib290cGFyYW1zID0gTm9uZSk6CisgICAgZGVmIGxhdW5jaChzZWxmLCBsYXVuY2hfY21kLCBnZXRfaXAgPSBUcnVlLCBxZW11cGFyYW1zID0gTm9uZSwgZXh0cmFfYm9vdHBhcmFtcyA9IE5vbmUsIGVudiA9IE5vbmUpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0aHJlYWRzb2NrLCB0aHJlYWRwb3J0ID0gc2VsZi5jcmVhdGVfc29ja2V0KCkKICAgICAgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldCwgc2VsZi5zZXJ2ZXJwb3J0ID0gc2VsZi5jcmVhdGVfc29ja2V0KCkKICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgbGlzdGVuaW5nIHNvY2tldDogJXMiICUgbXNnWzFdKQorICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgbGlzdGVuaW5nIHNvY2tldDogJXMiICUgbXNnWzFdKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAgICAgYm9vdHBhcmFtcyA9ICdjb25zb2xlPXR0eTEgY29uc29sZT10dHlTMCwxMTUyMDBuOCBwcmludGsudGltZT0xJwogICAgICAgICBpZiBleHRyYV9ib290cGFyYW1zOgogICAgICAgICAgICAgYm9vdHBhcmFtcyA9IGJvb3RwYXJhbXMgKyAnICcgKyBleHRyYV9ib290cGFyYW1zCiAKLSAgICAgICAgc2VsZi5xZW11cGFyYW1zID0gJ2Jvb3RwYXJhbXM9InswfSIgcWVtdXBhcmFtcz0iLXNlcmlhbCB0Y3A6MTI3LjAuMC4xOnsxfSInLmZvcm1hdChib290cGFyYW1zLCB0aHJlYWRwb3J0KQorICAgICAgICAjIEFzayBRRU1VIHRvIHN0b3JlIHRoZSBRRU1VIHByb2Nlc3MgUElEIGluIGZpbGUsIHRoaXMgd2F5IHdlIGRvbid0IGhhdmUgdG8gcGFyc2UgcnVubmluZyBwcm9jZXNzZXMKKyAgICAgICAgIyBhbmQgYW5hbHl6ZSBkZXNjZW5kZW50cyBpbiBvcmRlciB0byBkZXRlcm1pbmUgaXQuCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYucWVtdV9waWRmaWxlKToKKyAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLnFlbXVfcGlkZmlsZSkKKyAgICAgICAgc2VsZi5xZW11cGFyYW1zID0gJ2Jvb3RwYXJhbXM9InswfSIgcWVtdXBhcmFtcz0iLXNlcmlhbCB0Y3A6MTI3LjAuMC4xOnsxfSAtcGlkZmlsZSB7Mn0iJy5mb3JtYXQoYm9vdHBhcmFtcywgdGhyZWFkcG9ydCwgc2VsZi5xZW11X3BpZGZpbGUpCiAgICAgICAgIGlmIHFlbXVwYXJhbXM6CiAgICAgICAgICAgICBzZWxmLnFlbXVwYXJhbXMgPSBzZWxmLnFlbXVwYXJhbXNbOi0xXSArICIgIiArIHFlbXVwYXJhbXMgKyAiICIgKyAnXCInCiAKQEAgLTE1MSwxMyArMTU4LDEzIEBACiAgICAgICAgIHNlbGYub3JpZ2NobGRoYW5kbGVyID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHQ0hMRCkKICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQ0hMRCwgc2VsZi5oYW5kbGVTSUdDSExEKQogCi0gICAgICAgIGxvZ2dlci5pbmZvKCdsYXVuY2hjbWQ9JXMnJShsYXVuY2hfY21kKSkKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoJ2xhdW5jaGNtZD0lcyclKGxhdW5jaF9jbWQpKQogCiAgICAgICAgICMgRklYTUU6IFdlIHBhc3MgaW4gc3RkaW49c3VicHJvY2Vzcy5QSVBFIGhlcmUgdG8gd29yayBhcm91bmQgc3R0eQogICAgICAgICAjIGJsb2NraW5nIGF0IHRoZSBlbmQgb2YgdGhlIHJ1bnFlbXUgc2NyaXB0IHdoZW4gdXNpbmcgdGhpcyB3aXRoaW4KICAgICAgICAgIyBvZS1zZWxmdGVzdCAodGhpcyBtYWtlcyBzdHR5IGVycm9yIG91dCBpbW1lZGlhdGVseSkuIFRoZXJlIG91Z2h0CiAgICAgICAgICMgdG8gYmUgYSBwcm9wZXIgZml4IGJ1dCB0aGlzIHdpbGwgc3VmZmljZSBmb3Igbm93LgotICAgICAgICBzZWxmLnJ1bnFlbXUgPSBzdWJwcm9jZXNzLlBvcGVuKGxhdW5jaF9jbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBwcmVleGVjX2ZuPW9zLnNldHBncnApCisgICAgICAgIHNlbGYucnVucWVtdSA9IHN1YnByb2Nlc3MuUG9wZW4obGF1bmNoX2NtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHByZWV4ZWNfZm49b3Muc2V0cGdycCwgZW52PWVudikKICAgICAgICAgb3V0cHV0ID0gc2VsZi5ydW5xZW11LnN0ZG91dAogCiAgICAgICAgICMKQEAgLTE4NiwxNDMgKzE5MywxNDkgQEAKICAgICAgICAgICAgIG9zLmtpbGxwZyhvcy5nZXRwZ2lkKHNlbGYucnVucWVtdS5waWQpLCBzaWduYWwuU0lHVEVSTSkKICAgICAgICAgICAgIHN5cy5leGl0KDApCiAKLSAgICAgICAgbG9nZ2VyLmluZm8oInJ1bnFlbXUgc3RhcnRlZCwgcGlkIGlzICVzIiAlIHNlbGYucnVucWVtdS5waWQpCi0gICAgICAgIGxvZ2dlci5pbmZvKCJ3YWl0aW5nIGF0IG1vc3QgJXMgc2Vjb25kcyBmb3IgcWVtdSBwaWQiICUgc2VsZi5ydW5xZW11dGltZSkKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoInJ1bnFlbXUgc3RhcnRlZCwgcGlkIGlzICVzIiAlIHNlbGYucnVucWVtdS5waWQpCisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJ3YWl0aW5nIGF0IG1vc3QgJXMgc2Vjb25kcyBmb3IgcWVtdSBwaWQiICUgc2VsZi5ydW5xZW11dGltZSkKICAgICAgICAgZW5kdGltZSA9IHRpbWUudGltZSgpICsgc2VsZi5ydW5xZW11dGltZQogICAgICAgICB3aGlsZSBub3Qgc2VsZi5pc19hbGl2ZSgpIGFuZCB0aW1lLnRpbWUoKSA8IGVuZHRpbWU6CiAgICAgICAgICAgICBpZiBzZWxmLnJ1bnFlbXUucG9sbCgpOgogICAgICAgICAgICAgICAgIGlmIHNlbGYucnVucWVtdS5yZXR1cm5jb2RlOgogICAgICAgICAgICAgICAgICAgICAjIE5vIHBvaW50IHdhaXRpbmcgYW55IGxvbmdlcgotICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygncnVucWVtdSBleGl0ZWQgd2l0aCBjb2RlICVkJyAlIHNlbGYucnVucWVtdS5yZXR1cm5jb2RlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygncnVucWVtdSBleGl0ZWQgd2l0aCBjb2RlICVkJyAlIHNlbGYucnVucWVtdS5yZXR1cm5jb2RlKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9kdW1wX2hvc3QoKQogICAgICAgICAgICAgICAgICAgICBzZWxmLnN0b3AoKQotICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiT3V0cHV0IGZyb20gcnVucWVtdTpcbiVzIiAlIHNlbGYuZ2V0T3V0cHV0KG91dHB1dCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJPdXRwdXQgZnJvbSBydW5xZW11OlxuJXMiICUgc2VsZi5nZXRPdXRwdXQob3V0cHV0KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuNSkKIAotICAgICAgICBvdXQgPSBzZWxmLmdldE91dHB1dChvdXRwdXQpCi0gICAgICAgIG5ldGNvbmYgPSBGYWxzZSAjIG5ldHdvcmsgY29uZmlndXJhdGlvbiBpcyBub3QgcmVxdWlyZWQgYnkgZGVmYXVsdAotICAgICAgICBpZiBzZWxmLmlzX2FsaXZlKCk6Ci0gICAgICAgICAgICBsb2dnZXIuaW5mbygicWVtdSBzdGFydGVkIC0gcWVtdSBwcm9jY2VzIHBpZCBpcyAlcyIgJSBzZWxmLnFlbXVwaWQpCi0gICAgICAgICAgICBpZiBnZXRfaXA6Ci0gICAgICAgICAgICAgICAgY21kbGluZSA9ICcnCi0gICAgICAgICAgICAgICAgd2l0aCBvcGVuKCcvcHJvYy8lcy9jbWRsaW5lJyAlIHNlbGYucWVtdXBpZCkgYXMgcDoKLSAgICAgICAgICAgICAgICAgICAgY21kbGluZSA9IHAucmVhZCgpCi0gICAgICAgICAgICAgICAgICAgICMgSXQgaXMgbmVlZGVkIHRvIHNhbml0aXplIHRoZSBkYXRhIHJlY2VpdmVkCi0gICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpcyBwb3NzaWJsZSB0byBoYXZlIGNvbnRyb2wgY2hhcmFjdGVycwotICAgICAgICAgICAgICAgICAgICBjbWRsaW5lID0gcmVfY29udHJvbF9jaGFyLnN1YignJywgY21kbGluZSkKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGlwcyA9IHJlLmZpbmRhbGwoIigoPzpbMC05XXsxLDN9XC4pezN9WzAtOV17MSwzfSkiLCBjbWRsaW5lLnNwbGl0KCJpcD0iKVsxXSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5pcCA9IGlwc1swXQotICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IGlwc1sxXQotICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygicWVtdSBjbWRsaW5lIHVzZWQ6XG57fSIuZm9ybWF0KGNtZGxpbmUpKQotICAgICAgICAgICAgICAgIGV4Y2VwdCAoSW5kZXhFcnJvciwgVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICAgICAgICAgICMgVHJ5IHRvIGdldCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZnJvbSBydW5xZW11IG91dHB1dAotICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IHJlLm1hdGNoKCcuKk5ldHdvcmsgY29uZmlndXJhdGlvbjogKFswLTkuXSspOjooWzAtOS5dKyk6KFswLTkuXSspJC4qJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQsIHJlLk1VTFRJTElORXxyZS5ET1RBTEwpCi0gICAgICAgICAgICAgICAgICAgIGlmIG1hdGNoOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pcCwgc2VsZi5zZXJ2ZXJfaXAsIHNlbGYubmV0bWFzayA9IG1hdGNoLmdyb3VwcygpCi0gICAgICAgICAgICAgICAgICAgICAgICAjIG5ldHdvcmsgY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZCBhcyB3ZSBjb3VsZG4ndCBnZXQgaXQKLSAgICAgICAgICAgICAgICAgICAgICAgICMgZnJvbSB0aGUgcnVucWVtdSBjb21tYW5kIGxpbmUsIHNvIHFlbXUgZG9lc24ndCBydW4ga2VybmVsCi0gICAgICAgICAgICAgICAgICAgICAgICAjIGFuZCBndWVzdCBuZXR3b3JraW5nIGlzIG5vdCBjb25maWd1cmVkCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXRjb25mID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJDb3VsZG4ndCBnZXQgaXAgZnJvbSBxZW11IGNvbW1hbmQgbGluZSBhbmQgcnVucWVtdSBvdXRwdXQhICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVyZSBpcyB0aGUgcWVtdSBjb21tYW5kIGxpbmUgdXNlZDpcbiVzXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuZCBvdXRwdXQgZnJvbSBydW5xZW11OlxuJXMiICUgKGNtZGxpbmUsIG91dCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kdW1wX2hvc3QoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdG9wKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlRhcmdldCBJUDogJXMiICUgc2VsZi5pcCkKLSAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiU2VydmVyIElQOiAlcyIgJSBzZWxmLnNlcnZlcl9pcCkKLQotICAgICAgICAgICAgc2VsZi50aHJlYWQgPSBMb2dnaW5nVGhyZWFkKHNlbGYubG9nLCB0aHJlYWRzb2NrLCBsb2dnZXIpCi0gICAgICAgICAgICBzZWxmLnRocmVhZC5zdGFydCgpCi0gICAgICAgICAgICBpZiBub3Qgc2VsZi50aHJlYWQuY29ubmVjdGlvbl9lc3RhYmxpc2hlZC53YWl0KHNlbGYuYm9vdHRpbWUpOgotICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiRGlkbid0IHJlY2VpdmUgYSBjb25zb2xlIGNvbm5lY3Rpb24gZnJvbSBxZW11LiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZXJlIGlzIHRoZSBxZW11IGNvbW1hbmQgbGluZSB1c2VkOlxuJXNcbmFuZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXRwdXQgZnJvbSBydW5xZW11OlxuJXMiICUgKGNtZGxpbmUsIG91dCkpCi0gICAgICAgICAgICAgICAgc2VsZi5zdG9wX3RocmVhZCgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJPdXRwdXQgZnJvbSBydW5xZW11OlxuJXMiLCBvdXQpCi0gICAgICAgICAgICBsb2dnZXIuaW5mbygiV2FpdGluZyBhdCBtb3N0ICVkIHNlY29uZHMgZm9yIGxvZ2luIGJhbm5lciIgJSBzZWxmLmJvb3R0aW1lKQotICAgICAgICAgICAgZW5kdGltZSA9IHRpbWUudGltZSgpICsgc2VsZi5ib290dGltZQotICAgICAgICAgICAgc29ja2xpc3QgPSBbc2VsZi5zZXJ2ZXJfc29ja2V0XQotICAgICAgICAgICAgcmVhY2hlZGxvZ2luID0gRmFsc2UKLSAgICAgICAgICAgIHN0b3ByZWFkID0gRmFsc2UKLSAgICAgICAgICAgIHFlbXVzb2NrID0gTm9uZQotICAgICAgICAgICAgYm9vdGxvZyA9ICcnCi0gICAgICAgICAgICBkYXRhID0gYicnCi0gICAgICAgICAgICB3aGlsZSB0aW1lLnRpbWUoKSA8IGVuZHRpbWUgYW5kIG5vdCBzdG9wcmVhZDoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHNyZWFkLCBzd3JpdGUsIHNlcnJvciA9IHNlbGVjdC5zZWxlY3Qoc29ja2xpc3QsIFtdLCBbXSwgNSkKLSAgICAgICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICBmb3Igc29jayBpbiBzcmVhZDoKLSAgICAgICAgICAgICAgICAgICAgaWYgc29jayBpcyBzZWxmLnNlcnZlcl9zb2NrZXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBxZW11c29jaywgYWRkciA9IHNlbGYuc2VydmVyX3NvY2tldC5hY2NlcHQoKQotICAgICAgICAgICAgICAgICAgICAgICAgcWVtdXNvY2suc2V0YmxvY2tpbmcoMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsaXN0LmFwcGVuZChxZW11c29jaykKLSAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsaXN0LnJlbW92ZShzZWxmLnNlcnZlcl9zb2NrZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiQ29ubmVjdGlvbiBmcm9tICVzOiVzIiAlIGFkZHIpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YSArIHNvY2sucmVjdigxMDI0KQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGF0YToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLmRlY29kZSgidXRmLTgiLCBlcnJvcnM9InN1cnJvZ2F0ZWVzY2FwZSIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3Rsb2cgKz0gZGF0YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gYicnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlLnNlYXJjaCgiLiogbG9naW46IiwgYm9vdGxvZyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9zb2NrZXQgPSBxZW11c29jawotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcHJlYWQgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFjaGVkbG9naW4gPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiUmVhY2hlZCBsb2dpbiBiYW5uZXIiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsaXN0LnJlbW92ZShzb2NrKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3ByZWFkID0gVHJ1ZQotCi0gICAgICAgICAgICBpZiBub3QgcmVhY2hlZGxvZ2luOgotICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJUYXJnZXQgZGlkbid0IHJlYWNoZWQgbG9naW4gYm9vdCBpbiAlZCBzZWNvbmRzIiAlIHNlbGYuYm9vdHRpbWUpCi0gICAgICAgICAgICAgICAgbGluZXMgPSAiXG4iLmpvaW4oYm9vdGxvZy5zcGxpdGxpbmVzKClbLTI1Ol0pCi0gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkxhc3QgMjUgbGluZXMgb2YgdGV4dDpcbiVzIiAlIGxpbmVzKQotICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDaGVjayBmdWxsIGJvb3QgbG9nOiAlcyIgJSBzZWxmLmxvZ2ZpbGUpCi0gICAgICAgICAgICAgICAgc2VsZi5fZHVtcF9ob3N0KCkKLSAgICAgICAgICAgICAgICBzZWxmLnN0b3AoKQotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgICAgICAjIElmIHdlIGFyZSBub3QgYWJsZSB0byBsb2dpbiB0aGUgdGVzdHMgY2FuIGNvbnRpbnVlCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYucnVuX3NlcmlhbCgicm9vdFxuIiwgcmF3PVRydWUpCi0gICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCJyb290QFthLXpBLVowLTlcLV0rOn4jIiwgb3V0cHV0KToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZWQgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJMb2dnZWQgYXMgcm9vdCBpbiBzZXJpYWwgY29uc29sZSIpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5ldGNvbmY6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIGNvbmZpZ3VyZSBndWVzdCBuZXR3b3JraW5nCi0gICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSAiaWZjb25maWcgZXRoMCAlcyBuZXRtYXNrICVzIHVwXG4iICUgKHNlbGYuaXAsIHNlbGYubmV0bWFzaykKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IHNlbGYucnVuX3NlcmlhbChjbWQsIHJhdz1UcnVlKVsxXQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCJyb290QFthLXpBLVowLTlcLV0rOn4jIiwgb3V0cHV0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiY29uZmlndXJlZCBpcCBhZGRyZXNzICVzIiwgc2VsZi5pcCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkNvdWxkbid0IGNvbmZpZ3VyZSBndWVzdCBuZXR3b3JraW5nIikKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiQ291bGRuJ3QgbG9naW4gaW50byBzZXJpYWwgY29uc29sZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGFzIHJvb3QgdXNpbmcgYmxhbmsgcGFzc3dvcmQiKQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJTZXJpYWwgY29uc29sZSBmYWlsZWQgd2hpbGUgdHJ5aW5nIHRvIGxvZ2luIikKLQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlFlbXUgcGlkIGRpZG4ndCBhcHBlYXJlZCBpbiAlcyBzZWNvbmRzIiAlIHNlbGYucnVucWVtdXRpbWUpCisgICAgICAgIGlmIG5vdCBzZWxmLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcigiUWVtdSBwaWQgZGlkbid0IGFwcGVhciBpbiAlcyBzZWNvbmRzIiAlIHNlbGYucnVucWVtdXRpbWUpCisgICAgICAgICAgICAjIER1bXAgYWxsIHByb2Nlc3NlcyB0byBoZWxwIHVzIHRvIGZpZ3VyZSBvdXQgd2hhdCBpcyBnb2luZyBvbi4uLgorICAgICAgICAgICAgcHMgPSBzdWJwcm9jZXNzLlBvcGVuKFsncHMnLCAnYXh3dycsICctbycsICdwaWQscHBpZCxjb21tYW5kICddLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgICAgICBwcm9jZXNzZXMgPSBwcy5kZWNvZGUoInV0Zi04IikKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJSdW5uaW5nIHByb2Nlc3NlczpcbiVzIiAlIHByb2Nlc3NlcykKICAgICAgICAgICAgIHNlbGYuX2R1bXBfaG9zdCgpCiAgICAgICAgICAgICBzZWxmLnN0b3AoKQotICAgICAgICAgICAgbG9nZ2VyLmluZm8oIk91dHB1dCBmcm9tIHJ1bnFlbXU6XG4lcyIgJSBzZWxmLmdldE91dHB1dChvdXRwdXQpKQorICAgICAgICAgICAgb3AgPSBzZWxmLmdldE91dHB1dChvdXRwdXQpCisgICAgICAgICAgICBpZiBvcDoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcigiT3V0cHV0IGZyb20gcnVucWVtdTpcbiVzIiAlIG9wKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcigiTm8gb3V0cHV0IGZyb20gcnVucWVtdS5cbiIpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgICAgICByZXR1cm4gc2VsZi5pc19hbGl2ZSgpCisgICAgICAgICMgV2UgYXJlIGFsaXZlOiBxZW11IGlzIHJ1bm5pbmcKKyAgICAgICAgb3V0ID0gc2VsZi5nZXRPdXRwdXQob3V0cHV0KQorICAgICAgICBuZXRjb25mID0gRmFsc2UgIyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gaXMgbm90IHJlcXVpcmVkIGJ5IGRlZmF1bHQKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoInFlbXUgc3RhcnRlZCBpbiAlcyBzZWNvbmRzIC0gcWVtdSBwcm9jY2VzIHBpZCBpcyAlcyIgJSAodGltZS50aW1lKCkgLSAoZW5kdGltZSAtIHNlbGYucnVucWVtdXRpbWUpLCBzZWxmLnFlbXVwaWQpKQorICAgICAgICBpZiBnZXRfaXA6CisgICAgICAgICAgICBjbWRsaW5lID0gJycKKyAgICAgICAgICAgIHdpdGggb3BlbignL3Byb2MvJXMvY21kbGluZScgJSBzZWxmLnFlbXVwaWQpIGFzIHA6CisgICAgICAgICAgICAgICAgY21kbGluZSA9IHAucmVhZCgpCisgICAgICAgICAgICAgICAgIyBJdCBpcyBuZWVkZWQgdG8gc2FuaXRpemUgdGhlIGRhdGEgcmVjZWl2ZWQKKyAgICAgICAgICAgICAgICAjIGJlY2F1c2UgaXMgcG9zc2libGUgdG8gaGF2ZSBjb250cm9sIGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICBjbWRsaW5lID0gcmVfY29udHJvbF9jaGFyLnN1YignICcsIGNtZGxpbmUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaXBzID0gcmUuZmluZGFsbCgiKCg/OlswLTldezEsM31cLil7M31bMC05XXsxLDN9KSIsIGNtZGxpbmUuc3BsaXQoImlwPSIpWzFdKQorICAgICAgICAgICAgICAgIHNlbGYuaXAgPSBpcHNbMF0KKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IGlwc1sxXQorICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJxZW11IGNtZGxpbmUgdXNlZDpcbnt9Ii5mb3JtYXQoY21kbGluZSkpCisgICAgICAgICAgICBleGNlcHQgKEluZGV4RXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgICMgVHJ5IHRvIGdldCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZnJvbSBydW5xZW11IG91dHB1dAorICAgICAgICAgICAgICAgIG1hdGNoID0gcmUubWF0Y2goJy4qTmV0d29yayBjb25maWd1cmF0aW9uOiAoWzAtOS5dKyk6OihbMC05Ll0rKTooWzAtOS5dKykkLionLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LCByZS5NVUxUSUxJTkV8cmUuRE9UQUxMKQorICAgICAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmlwLCBzZWxmLnNlcnZlcl9pcCwgc2VsZi5uZXRtYXNrID0gbWF0Y2guZ3JvdXBzKCkKKyAgICAgICAgICAgICAgICAgICAgIyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWQgYXMgd2UgY291bGRuJ3QgZ2V0IGl0CisgICAgICAgICAgICAgICAgICAgICMgZnJvbSB0aGUgcnVucWVtdSBjb21tYW5kIGxpbmUsIHNvIHFlbXUgZG9lc24ndCBydW4ga2VybmVsCisgICAgICAgICAgICAgICAgICAgICMgYW5kIGd1ZXN0IG5ldHdvcmtpbmcgaXMgbm90IGNvbmZpZ3VyZWQKKyAgICAgICAgICAgICAgICAgICAgbmV0Y29uZiA9IFRydWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcigiQ291bGRuJ3QgZ2V0IGlwIGZyb20gcWVtdSBjb21tYW5kIGxpbmUgYW5kIHJ1bnFlbXUgb3V0cHV0ISAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVyZSBpcyB0aGUgcWVtdSBjb21tYW5kIGxpbmUgdXNlZDpcbiVzXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW5kIG91dHB1dCBmcm9tIHJ1bnFlbXU6XG4lcyIgJSAoY21kbGluZSwgb3V0KSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZHVtcF9ob3N0KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zdG9wKCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIlRhcmdldCBJUDogJXMiICUgc2VsZi5pcCkKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIlNlcnZlciBJUDogJXMiICUgc2VsZi5zZXJ2ZXJfaXApCisKKyAgICAgICAgc2VsZi50aHJlYWQgPSBMb2dnaW5nVGhyZWFkKHNlbGYubG9nLCB0aHJlYWRzb2NrLCBzZWxmLmxvZ2dlcikKKyAgICAgICAgc2VsZi50aHJlYWQuc3RhcnQoKQorICAgICAgICBpZiBub3Qgc2VsZi50aHJlYWQuY29ubmVjdGlvbl9lc3RhYmxpc2hlZC53YWl0KHNlbGYuYm9vdHRpbWUpOgorICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IoIkRpZG4ndCByZWNlaXZlIGEgY29uc29sZSBjb25uZWN0aW9uIGZyb20gcWVtdS4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICJIZXJlIGlzIHRoZSBxZW11IGNvbW1hbmQgbGluZSB1c2VkOlxuJXNcbmFuZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIm91dHB1dCBmcm9tIHJ1bnFlbXU6XG4lcyIgJSAoY21kbGluZSwgb3V0KSkKKyAgICAgICAgICAgIHNlbGYuc3RvcF90aHJlYWQoKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIk91dHB1dCBmcm9tIHJ1bnFlbXU6XG4lcyIsIG91dCkKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIldhaXRpbmcgYXQgbW9zdCAlZCBzZWNvbmRzIGZvciBsb2dpbiBiYW5uZXIiICUgc2VsZi5ib290dGltZSkKKyAgICAgICAgZW5kdGltZSA9IHRpbWUudGltZSgpICsgc2VsZi5ib290dGltZQorICAgICAgICBzb2NrbGlzdCA9IFtzZWxmLnNlcnZlcl9zb2NrZXRdCisgICAgICAgIHJlYWNoZWRsb2dpbiA9IEZhbHNlCisgICAgICAgIHN0b3ByZWFkID0gRmFsc2UKKyAgICAgICAgcWVtdXNvY2sgPSBOb25lCisgICAgICAgIGJvb3Rsb2cgPSBiJycKKyAgICAgICAgZGF0YSA9IGInJworICAgICAgICB3aGlsZSB0aW1lLnRpbWUoKSA8IGVuZHRpbWUgYW5kIG5vdCBzdG9wcmVhZDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzcmVhZCwgc3dyaXRlLCBzZXJyb3IgPSBzZWxlY3Quc2VsZWN0KHNvY2tsaXN0LCBbXSwgW10sIDUpCisgICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZm9yIHNvY2sgaW4gc3JlYWQ6CisgICAgICAgICAgICAgICAgaWYgc29jayBpcyBzZWxmLnNlcnZlcl9zb2NrZXQ6CisgICAgICAgICAgICAgICAgICAgIHFlbXVzb2NrLCBhZGRyID0gc2VsZi5zZXJ2ZXJfc29ja2V0LmFjY2VwdCgpCisgICAgICAgICAgICAgICAgICAgIHFlbXVzb2NrLnNldGJsb2NraW5nKDApCisgICAgICAgICAgICAgICAgICAgIHNvY2tsaXN0LmFwcGVuZChxZW11c29jaykKKyAgICAgICAgICAgICAgICAgICAgc29ja2xpc3QucmVtb3ZlKHNlbGYuc2VydmVyX3NvY2tldCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIkNvbm5lY3Rpb24gZnJvbSAlczolcyIgJSBhZGRyKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhICsgc29jay5yZWN2KDEwMjQpCisgICAgICAgICAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICBib290bG9nICs9IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBiJycKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGInIGxvZ2luOicgaW4gYm9vdGxvZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9zb2NrZXQgPSBxZW11c29jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3ByZWFkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWNoZWRsb2dpbiA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiUmVhY2hlZCBsb2dpbiBiYW5uZXIiKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xpc3QucmVtb3ZlKHNvY2spCisgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3ByZWFkID0gVHJ1ZQorCisKKyAgICAgICAgaWYgbm90IHJlYWNoZWRsb2dpbjoKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJUYXJnZXQgZGlkbid0IHJlYWNoZWQgbG9naW4gYm9vdCBpbiAlZCBzZWNvbmRzIiAlIHNlbGYuYm9vdHRpbWUpCisgICAgICAgICAgICB0YWlsID0gbGFtYmRhIGw6ICJcbiIuam9pbihsLnNwbGl0bGluZXMoKVstMjU6XSkKKyAgICAgICAgICAgICMgaW4gY2FzZSBib290bG9nIGlzIGVtcHR5LCB1c2UgdGFpbCBxZW11IGxvZyBzdG9yZSBhdCBzZWxmLm1zZworICAgICAgICAgICAgbGluZXMgPSB0YWlsKGJvb3Rsb2cgaWYgYm9vdGxvZyBlbHNlIHNlbGYubXNnKQorICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIkxhc3QgMjUgbGluZXMgb2YgdGV4dDpcbiVzIiAlIGxpbmVzKQorICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIkNoZWNrIGZ1bGwgYm9vdCBsb2c6ICVzIiAlIHNlbGYubG9nZmlsZSkKKyAgICAgICAgICAgIHNlbGYuX2R1bXBfaG9zdCgpCisgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgIyBJZiB3ZSBhcmUgbm90IGFibGUgdG8gbG9naW4gdGhlIHRlc3RzIGNhbiBjb250aW51ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi5ydW5fc2VyaWFsKCJyb290XG4iLCByYXc9VHJ1ZSkKKyAgICAgICAgICAgIGlmIHJlLnNlYXJjaCgicm9vdEBbYS16QS1aMC05XC1dKzp+IyIsIG91dHB1dCk6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIkxvZ2dlZCBhcyByb290IGluIHNlcmlhbCBjb25zb2xlIikKKyAgICAgICAgICAgICAgICBpZiBuZXRjb25mOgorICAgICAgICAgICAgICAgICAgICAjIGNvbmZpZ3VyZSBndWVzdCBuZXR3b3JraW5nCisgICAgICAgICAgICAgICAgICAgIGNtZCA9ICJpZmNvbmZpZyBldGgwICVzIG5ldG1hc2sgJXMgdXBcbiIgJSAoc2VsZi5pcCwgc2VsZi5uZXRtYXNrKQorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBzZWxmLnJ1bl9zZXJpYWwoY21kLCByYXc9VHJ1ZSlbMV0KKyAgICAgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCJyb290QFthLXpBLVowLTlcLV0rOn4jIiwgb3V0cHV0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJjb25maWd1cmVkIGlwIGFkZHJlc3MgJXMiLCBzZWxmLmlwKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIkNvdWxkbid0IGNvbmZpZ3VyZSBndWVzdCBuZXR3b3JraW5nIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIkNvdWxkbid0IGxvZ2luIGludG8gc2VyaWFsIGNvbnNvbGUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBhcyByb290IHVzaW5nIGJsYW5rIHBhc3N3b3JkIikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIlNlcmlhbCBjb25zb2xlIGZhaWxlZCB3aGlsZSB0cnlpbmcgdG8gbG9naW4iKQorICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIHN0b3Aoc2VsZik6CiAgICAgICAgIHNlbGYuc3RvcF90aHJlYWQoKQpAQCAtMzMyLDcgKzM0NSw3IEBACiAgICAgICAgIGlmIHNlbGYucnVucWVtdToKICAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgIm1vbml0b3JwaWQiKToKICAgICAgICAgICAgICAgICBvcy5raWxsKHNlbGYubW9uaXRvcnBpZCwgc2lnbmFsLlNJR0tJTEwpCi0gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlNlbmRpbmcgU0lHVEVSTSB0byBydW5xZW11IikKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiU2VuZGluZyBTSUdURVJNIHRvIHJ1bnFlbXUiKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgb3Mua2lsbHBnKG9zLmdldHBnaWQoc2VsZi5ydW5xZW11LnBpZCksIHNpZ25hbC5TSUdURVJNKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CkBAIC0zNDIsNyArMzU1LDcgQEAKICAgICAgICAgICAgIHdoaWxlIHNlbGYucnVucWVtdS5wb2xsKCkgaXMgTm9uZSBhbmQgdGltZS50aW1lKCkgPCBlbmR0aW1lOgogICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKICAgICAgICAgICAgIGlmIHNlbGYucnVucWVtdS5wb2xsKCkgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiU2VuZGluZyBTSUdLSUxMIHRvIHJ1bnFlbXUiKQorICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJTZW5kaW5nIFNJR0tJTEwgdG8gcnVucWVtdSIpCiAgICAgICAgICAgICAgICAgb3Mua2lsbHBnKG9zLmdldHBnaWQoc2VsZi5ydW5xZW11LnBpZCksIHNpZ25hbC5TSUdLSUxMKQogICAgICAgICAgICAgc2VsZi5ydW5xZW11ID0gTm9uZQogICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdzZXJ2ZXJfc29ja2V0JykgYW5kIHNlbGYuc2VydmVyX3NvY2tldDoKQEAgLTM1MCw2ICszNjMsOCBAQAogICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfc29ja2V0ID0gTm9uZQogICAgICAgICBzZWxmLnFlbXVwaWQgPSBOb25lCiAgICAgICAgIHNlbGYuaXAgPSBOb25lCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYucWVtdV9waWRmaWxlKToKKyAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLnFlbXVfcGlkZmlsZSkKIAogICAgIGRlZiBzdG9wX3FlbXVfc3lzdGVtKHNlbGYpOgogICAgICAgICBpZiBzZWxmLnFlbXVwaWQ6CkBAIC0zNTcsNyArMzcyLDcgQEAKICAgICAgICAgICAgICAgICAjIHFlbXUtc3lzdGVtIGJlaGF2ZXMgd2VsbCBhbmQgYSBTSUdURVJNIGlzIGVub3VnaAogICAgICAgICAgICAgICAgIG9zLmtpbGwoc2VsZi5xZW11cGlkLCBzaWduYWwuU0lHVEVSTSkKICAgICAgICAgICAgIGV4Y2VwdCBQcm9jZXNzTG9va3VwRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBsb2dnZXIud2FybigncWVtdS1zeXN0ZW0gZW5kZWQgdW5leHBlY3RlZGx5JykKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci53YXJuKCdxZW11LXN5c3RlbSBlbmRlZCB1bmV4cGVjdGVkbHknKQogCiAgICAgZGVmIHN0b3BfdGhyZWFkKHNlbGYpOgogICAgICAgICBpZiBzZWxmLnRocmVhZCBhbmQgc2VsZi50aHJlYWQuaXNfYWxpdmUoKToKQEAgLTM2NSw3ICszODAsNyBAQAogICAgICAgICAgICAgc2VsZi50aHJlYWQuam9pbigpCiAKICAgICBkZWYgcmVzdGFydChzZWxmLCBxZW11cGFyYW1zID0gTm9uZSk6Ci0gICAgICAgIGxvZ2dlci5pbmZvKCJSZXN0YXJ0aW5nIHFlbXUgcHJvY2VzcyIpCisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJSZXN0YXJ0aW5nIHFlbXUgcHJvY2VzcyIpCiAgICAgICAgIGlmIHNlbGYucnVucWVtdS5wb2xsKCkgaXMgTm9uZToKICAgICAgICAgICAgIHNlbGYuc3RvcCgpCiAgICAgICAgIGlmIHNlbGYuc3RhcnQocWVtdXBhcmFtcyk6CkBAIC0zNzUsNTYgKzM5MCwxNiBAQAogICAgIGRlZiBpc19hbGl2ZShzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYucnVucWVtdToKICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBxZW11X2NoaWxkID0gc2VsZi5maW5kX2NoaWxkKHN0cihzZWxmLnJ1bnFlbXUucGlkKSkKLSAgICAgICAgaWYgcWVtdV9jaGlsZDoKLSAgICAgICAgICAgIHNlbGYucWVtdXBpZCA9IHFlbXVfY2hpbGRbMF0KLSAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCIvcHJvYy8iICsgc3RyKHNlbGYucWVtdXBpZCkpOgorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShzZWxmLnFlbXVfcGlkZmlsZSk6CisgICAgICAgICAgICBmID0gb3BlbihzZWxmLnFlbXVfcGlkZmlsZSwgJ3InKQorICAgICAgICAgICAgcWVtdV9waWQgPSBmLnJlYWQoKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBxZW11cGlkID0gaW50KHFlbXVfcGlkKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoIi9wcm9jLyIgKyBzdHIocWVtdXBpZCkpOgorICAgICAgICAgICAgICAgIHNlbGYucWVtdXBpZCA9IHFlbXVwaWQKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgIGRlZiBmaW5kX2NoaWxkKHNlbGYscGFyZW50X3BpZCk6Ci0gICAgICAgICMKLSAgICAgICAgIyBXYWxrIHRoZSBwcm9jZXNzIHRyZWUgZnJvbSB0aGUgcHJvY2VzcyBzcGVjaWZpZWQgbG9va2luZyBmb3IgYSBxZW11LXN5c3RlbS4gUmV0dXJuIGl0cyBbcGlkJ2NtZF0KLSAgICAgICAgIwotICAgICAgICBwcyA9IHN1YnByb2Nlc3MuUG9wZW4oWydwcycsICdheHd3JywgJy1vJywgJ3BpZCxwcGlkLGNvbW1hbmQnXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQotICAgICAgICBwcm9jZXNzZXMgPSBwcy5kZWNvZGUoInV0Zi04Iikuc3BsaXQoJ1xuJykKLSAgICAgICAgbmZpZWxkcyA9IGxlbihwcm9jZXNzZXNbMF0uc3BsaXQoKSkgLSAxCi0gICAgICAgIHBpZHMgPSB7fQotICAgICAgICBjb21tYW5kcyA9IHt9Ci0gICAgICAgIGZvciByb3cgaW4gcHJvY2Vzc2VzWzE6XToKLSAgICAgICAgICAgIGRhdGEgPSByb3cuc3BsaXQoTm9uZSwgbmZpZWxkcykKLSAgICAgICAgICAgIGlmIGxlbihkYXRhKSAhPSAzOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBkYXRhWzFdIG5vdCBpbiBwaWRzOgotICAgICAgICAgICAgICAgIHBpZHNbZGF0YVsxXV0gPSBbXQotCi0gICAgICAgICAgICBwaWRzW2RhdGFbMV1dLmFwcGVuZChkYXRhWzBdKQotICAgICAgICAgICAgY29tbWFuZHNbZGF0YVswXV0gPSBkYXRhWzJdCi0KLSAgICAgICAgaWYgcGFyZW50X3BpZCBub3QgaW4gcGlkczoKLSAgICAgICAgICAgIHJldHVybiBbXQotCi0gICAgICAgIHBhcmVudHMgPSBbXQotICAgICAgICBuZXdwYXJlbnRzID0gcGlkc1twYXJlbnRfcGlkXQotICAgICAgICB3aGlsZSBuZXdwYXJlbnRzOgotICAgICAgICAgICAgbmV4dCA9IFtdCi0gICAgICAgICAgICBmb3IgcCBpbiBuZXdwYXJlbnRzOgotICAgICAgICAgICAgICAgIGlmIHAgaW4gcGlkczoKLSAgICAgICAgICAgICAgICAgICAgZm9yIG4gaW4gcGlkc1twXToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIG4gbm90IGluIHBhcmVudHMgYW5kIG4gbm90IGluIG5leHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5hcHBlbmQobikKLSAgICAgICAgICAgICAgICBpZiBwIG5vdCBpbiBwYXJlbnRzOgotICAgICAgICAgICAgICAgICAgICBwYXJlbnRzLmFwcGVuZChwKQotICAgICAgICAgICAgICAgICAgICBuZXdwYXJlbnRzID0gbmV4dAotICAgICAgICAjcHJpbnQoIkNoaWxkcmVuIG1hdGNoaW5nICVzOiIgJSBzdHIocGFyZW50cykpCi0gICAgICAgIGZvciBwIGluIHBhcmVudHM6Ci0gICAgICAgICAgICAjIE5lZWQgdG8gYmUgY2FyZWZ1bCBoZXJlIHNpbmNlIHJ1bnFlbXUgcnVucyAibGRkIHFlbXUtc3lzdGVtLXh4eHgiCi0gICAgICAgICAgICAjIEFsc28sIG9sZCB2ZXJzaW9ucyBvZiBsZGQgKDIuMTEpIHJ1biAiTERfWFhYWCBxZW11LXN5c3RlbS14eHh4IgotICAgICAgICAgICAgYmFzZWNtZCA9IGNvbW1hbmRzW3BdLnNwbGl0KClbMF0KLSAgICAgICAgICAgIGJhc2VjbWQgPSBvcy5wYXRoLmJhc2VuYW1lKGJhc2VjbWQpCi0gICAgICAgICAgICBpZiAicWVtdS1zeXN0ZW0iIGluIGJhc2VjbWQgYW5kICItc2VyaWFsIHRjcCIgaW4gY29tbWFuZHNbcF06Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFtpbnQocCksY29tbWFuZHNbcF1dCi0KICAgICBkZWYgcnVuX3NlcmlhbChzZWxmLCBjb21tYW5kLCByYXc9RmFsc2UsIHRpbWVvdXQ9NSk6CiAgICAgICAgICMgV2UgYXNzdW1lIHRhcmdldCBzeXN0ZW0gaGF2ZSBlY2hvIHRvIGdldCBjb21tYW5kIHN0YXR1cwogICAgICAgICBpZiBub3QgcmF3OgpAQCAtNDc0LDcgKzQ0OSw3IEBACiAKICAgICBkZWYgX2R1bXBfaG9zdChzZWxmKToKICAgICAgICAgc2VsZi5ob3N0X2R1bXBlci5jcmVhdGVfZGlyKCJxZW11IikKLSAgICAgICAgbG9nZ2VyLndhcm4oIlFlbXUgZW5kZWQgdW5leHBlY3RlZGx5LCBkdW1wIGRhdGEgZnJvbSBob3N0IgorICAgICAgICBzZWxmLmxvZ2dlci53YXJuKCJRZW11IGVuZGVkIHVuZXhwZWN0ZWRseSwgZHVtcCBkYXRhIGZyb20gaG9zdCIKICAgICAgICAgICAgICAgICAiIGlzIGluICVzIiAlIHNlbGYuaG9zdF9kdW1wZXIuZHVtcF9kaXIpCiAgICAgICAgIHNlbGYuaG9zdF9kdW1wZXIuZHVtcF9ob3N0KCkKIApAQCAtNTAzLDE3ICs0NzgsMTcgQEAKICAgICAgICAgICAgIHNlbGYudGVhcmRvd24oKQogCiAgICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiU3RhcnRpbmcgbG9nZ2luZyB0aHJlYWQiKQorICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiU3RhcnRpbmcgbG9nZ2luZyB0aHJlYWQiKQogICAgICAgICBzZWxmLnJlYWRwaXBlLCBzZWxmLndyaXRlcGlwZSA9IG9zLnBpcGUoKQogICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLnJ1bihzZWxmKQogCiAgICAgZGVmIHN0b3Aoc2VsZik6Ci0gICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlN0b3BwaW5nIGxvZ2dpbmcgdGhyZWFkIikKKyAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcoIlN0b3BwaW5nIGxvZ2dpbmcgdGhyZWFkIikKICAgICAgICAgaWYgc2VsZi5ydW5uaW5nOgogICAgICAgICAgICAgb3Mud3JpdGUoc2VsZi53cml0ZXBpcGUsIGJ5dGVzKCJzdG9wIiwgInV0Zi04IikpCiAKICAgICBkZWYgdGVhcmRvd24oc2VsZik6Ci0gICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlRlYXJpbmcgZG93biBsb2dnaW5nIHRocmVhZCIpCisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJUZWFyaW5nIGRvd24gbG9nZ2luZyB0aHJlYWQiKQogICAgICAgICBzZWxmLmNsb3NlX3NvY2tldChzZWxmLnNlcnZlcnNvY2spCiAKICAgICAgICAgaWYgc2VsZi5yZWFkc29jayBpcyBub3QgTm9uZToKQEAgLTUzMSw3ICs1MDYsNyBAQAogCiAgICAgICAgIGJyZWFrb3V0ID0gRmFsc2UKICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQotICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJTdGFydGluZyB0aHJlYWQgZXZlbnQgbG9vcCIpCisgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJTdGFydGluZyB0aHJlYWQgZXZlbnQgbG9vcCIpCiAgICAgICAgIHdoaWxlIG5vdCBicmVha291dDoKICAgICAgICAgICAgIGV2ZW50cyA9IHBvbGwucG9sbCgpCiAgICAgICAgICAgICBmb3IgZXZlbnQgaW4gZXZlbnRzOgpAQCAtNTQxLDE5ICs1MTYsMTkgQEAKIAogICAgICAgICAgICAgICAgICMgRXZlbnQgdG8gc3RvcCB0aGUgdGhyZWFkCiAgICAgICAgICAgICAgICAgaWYgc2VsZi5yZWFkcGlwZSA9PSBldmVudFswXToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiU3RvcCBldmVudCByZWNlaXZlZCIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJTdG9wIGV2ZW50IHJlY2VpdmVkIikKICAgICAgICAgICAgICAgICAgICAgYnJlYWtvdXQgPSBUcnVlCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAKICAgICAgICAgICAgICAgICAjIEEgY29ubmVjdGlvbiByZXF1ZXN0IHdhcyByZWNlaXZlZAogICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5zZXJ2ZXJzb2NrLmZpbGVubygpID09IGV2ZW50WzBdOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJDb25uZWN0aW9uIHJlcXVlc3QgcmVjZWl2ZWQiKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygiQ29ubmVjdGlvbiByZXF1ZXN0IHJlY2VpdmVkIikKICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWFkc29jaywgXyA9IHNlbGYuc2VydmVyc29jay5hY2NlcHQoKQogICAgICAgICAgICAgICAgICAgICBzZWxmLnJlYWRzb2NrLnNldGJsb2NraW5nKDApCiAgICAgICAgICAgICAgICAgICAgIHBvbGwudW5yZWdpc3RlcihzZWxmLnNlcnZlcnNvY2suZmlsZW5vKCkpCiAgICAgICAgICAgICAgICAgICAgIHBvbGwucmVnaXN0ZXIoc2VsZi5yZWFkc29jay5maWxlbm8oKSwgZXZlbnRfcmVhZF9tYXNrKQogCi0gICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlNldHRpbmcgY29ubmVjdGlvbiBlc3RhYmxpc2hlZCBldmVudCIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCJTZXR0aW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQgZXZlbnQiKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb25fZXN0YWJsaXNoZWQuc2V0KCkKIAogICAgICAgICAgICAgICAgICMgQWN0dWFsIGRhdGEgdG8gYmUgbG9nZ2VkCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9xZW11dGlueXJ1bm5lci5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL3FlbXV0aW55cnVubmVyLnB5CmluZGV4IDFiZjU5MDAuLjYzYjVkMTYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL3FlbXV0aW55cnVubmVyLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL3FlbXV0aW55cnVubmVyLnB5CkBAIC0xNyw3ICsxNyw3IEBACiAKIGNsYXNzIFFlbXVUaW55UnVubmVyKFFlbXVSdW5uZXIpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hY2hpbmUsIHJvb3RmcywgZGlzcGxheSwgdG1wZGlyLCBkZXBsb3lfZGlyX2ltYWdlLCBsb2dmaWxlLCBrZXJuZWwsIGJvb3R0aW1lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFjaGluZSwgcm9vdGZzLCBkaXNwbGF5LCB0bXBkaXIsIGRlcGxveV9kaXJfaW1hZ2UsIGxvZ2ZpbGUsIGtlcm5lbCwgYm9vdHRpbWUsIGxvZ2dlcik6CiAKICAgICAgICAgIyBQb3BlbiBvYmplY3QgZm9yIHJ1bnFlbXUKICAgICAgICAgc2VsZi5ydW5xZW11ID0gTm9uZQpAQCAtNDAsNiArNDAsNyBAQAogICAgICAgICBzZWxmLnNvY2tldGZpbGUgPSAiY29uc29sZS5zb2NrIgogICAgICAgICBzZWxmLnNlcnZlcl9zb2NrZXQgPSBOb25lCiAgICAgICAgIHNlbGYua2VybmVsID0ga2VybmVsCisgICAgICAgIHNlbGYubG9nZ2VyID0gbG9nZ2VyCiAKIAogICAgIGRlZiBjcmVhdGVfc29ja2V0KHNlbGYpOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvc3NoY29udHJvbC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL3NzaGNvbnRyb2wucHkKaW5kZXggMDVkNjUwMi4uZDI5Mjg5MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvc3NoY29udHJvbC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9zc2hjb250cm9sLnB5CkBAIC0xNTAsMTIgKzE1MCw5IEBACiAKICAgICBkZWYgY29weV90byhzZWxmLCBsb2NhbHBhdGgsIHJlbW90ZXBhdGgpOgogICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhsb2NhbHBhdGgpOgotICAgICAgICAgICAgbGluayA9IG9zLnJlYWRsaW5rKGxvY2FscGF0aCkKLSAgICAgICAgICAgIGRzdF9kaXIsIGRzdF9iYXNlID0gb3MucGF0aC5zcGxpdChyZW1vdGVwYXRoKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYucnVuKCJjZCAlczsgbG4gLXMgJXMgJXMiICUgKGRzdF9kaXIsIGxpbmssIGRzdF9iYXNlKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNvbW1hbmQgPSBzZWxmLnNjcCArIFtsb2NhbHBhdGgsICclc0AlczolcycgJSAoc2VsZi51c2VyLCBzZWxmLmlwLCByZW1vdGVwYXRoKV0KLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbnRlcm5hbF9ydW4oY29tbWFuZCwgaWdub3JlX3N0YXR1cz1GYWxzZSkKKyAgICAgICAgICAgIGxvY2FscGF0aCA9IG9zLnBhdGguZGlybmFtZShsb2NhbHBhdGgpICsgIi8iICsgb3MucmVhZGxpbmsobG9jYWxwYXRoKQorICAgICAgICBjb21tYW5kID0gc2VsZi5zY3AgKyBbbG9jYWxwYXRoLCAnJXNAJXM6JXMnICUgKHNlbGYudXNlciwgc2VsZi5pcCwgcmVtb3RlcGF0aCldCisgICAgICAgIHJldHVybiBzZWxmLl9pbnRlcm5hbF9ydW4oY29tbWFuZCwgaWdub3JlX3N0YXR1cz1GYWxzZSkKIAogICAgIGRlZiBjb3B5X2Zyb20oc2VsZiwgcmVtb3RlcGF0aCwgbG9jYWxwYXRoKToKICAgICAgICAgY29tbWFuZCA9IHNlbGYuc2NwICsgWyclc0AlczolcycgJSAoc2VsZi51c2VyLCBzZWxmLmlwLCByZW1vdGVwYXRoKSwgbG9jYWxwYXRoXQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvdGFyZ2V0YnVpbGQucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy90YXJnZXRidWlsZC5weQppbmRleCA5MjQ5ZmEyLi4xMjAyZDU3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy90YXJnZXRidWlsZC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy90YXJnZXRidWlsZC5weQpAQCAtNjksNyArNjksNyBAQAogCiAgICAgZGVmIGNsZWFuKHNlbGYpOgogICAgICAgICBzZWxmLl9ydW4oJ3JtIC1yZiAlcycgJSBzZWxmLnRhcmdldGRpcikKLSAgICAgICAgc3VicHJvY2Vzcy5jYWxsKCdybSAtZiAlcycgJSBzZWxmLmxvY2FsYXJjaGl2ZSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKCdybSAtZiAlcycgJSBzZWxmLmxvY2FsYXJjaGl2ZSwgc2hlbGw9VHJ1ZSkKICAgICAgICAgcGFzcwogCiBjbGFzcyBUYXJnZXRCdWlsZFByb2plY3QoQnVpbGRQcm9qZWN0KToKQEAgLTEzNiw0ICsxMzYsNCBAQAogCiAgICAgZGVmIF9ydW4oc2VsZiwgY21kKToKICAgICAgICAgc2VsZi5sb2coIlJ1bm5pbmcgLiAlczsgIiAlIHNlbGYuc2RrZW52ICsgY21kKQotICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5jYWxsKCIuICVzOyAiICUgc2VsZi5zZGtlbnYgKyBjbWQsIHNoZWxsPVRydWUpCisgICAgICAgIHJldHVybiBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoIi4gJXM7ICIgJSBzZWxmLnNka2VudiArIGNtZCwgc2hlbGw9VHJ1ZSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS5iYgppbmRleCBkMGY3YmIzLi4wNjcwNTU2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlLmJiCkBAIC01LDYgKzUsNyBAQAogIyBGaWxlbmFtZTogYWxzYS1zdGF0ZS5iYgogCiBTVU1NQVJZID0gIkFsc2Egc2NlbmFyaW8gZmlsZXMgdG8gZW5hYmxlIGFsc2Egc3RhdGUgcmVzdG9yYXRpb24iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmFsc2EtcHJvamVjdC5vcmcvIgogREVTQ1JJUFRJT04gPSAiQWxzYSBTY2VuYXJpbyBGaWxlcyAtIGFuIGluaXQgc2NyaXB0IGFuZCBzdGF0ZSBmaWxlcyB0byByZXN0b3JlIFwKIHNvdW5kIHN0YXRlIGF0IHN5c3RlbSBib290IGFuZCBzYXZlIGl0IGF0IHN5c3RlbSBzaHV0IGRvd24uIgogTElDRU5TRSA9ICJNSVQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvMDAwMS1NYXJrLW91ci1leHBsaWNpdC1mYWxsLXRocm91Z2gtc28tV2V4dHJhLXdpbGwtd29yay1pLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpLzAwMDEtTWFyay1vdXItZXhwbGljaXQtZmFsbC10aHJvdWdoLXNvLVdleHRyYS13aWxsLXdvcmstaS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBhZWIyZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvMDAwMS1NYXJrLW91ci1leHBsaWNpdC1mYWxsLXRocm91Z2gtc28tV2V4dHJhLXdpbGwtd29yay1pLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotRnJvbSA2NzZhOGE5MDAxZjA2ODA4YjRkYmUwYTU0NWQ3NmI1ZDlhOGViZjQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogUGV0ZXIgSm9uZXMgPHBqb25lc0ByZWRoYXQuY29tPgotRGF0ZTogVGh1LCAyIEZlYiAyMDE3IDEzOjUxOjI3IC0wNTAwCi1TdWJqZWN0OiBbUEFUQ0hdIE1hcmsgb3VyIGV4cGxpY2l0IGZhbGwgdGhyb3VnaCBzbyAtV2V4dHJhIHdpbGwgd29yayBpbiBnY2MgNwotCi1nY2MgNyBpbnRyb2R1Y2VzIGRldGVjdGlvbiBvZiBmYWxsLXRocm91Z2ggYmVoYXZpb3IgaW4gc3dpdGNoL2Nhc2UKLXN0YXRlbWVudHMsIGFuZCB3aWxsIHdhcm4gaWYgLVdpbXBsaWNpdC1mYWxsdGhyb3VnaCBpcyBwcmVzZW50IGFuZCB0aGVyZQotaXMgbm8gY29tbWVudCBzdGF0aW5nIHRoYXQgdGhlIGZhbGwtdGhyb3VnaCBpcyBpbnRlbnRpb25hbC4gIFRoaXMgaXMKLWFsc28gdHJpZ2dlcmVkIGJ5IC1XZXh0cmEsIGFzIGl0IGVuYWJsZXMgLVdpbXBsaWNpdC1mYWxsdGhyb3VnaD0xLgotCi1UaGlzIHBhdGNoIGFkZHMgdGhlIGNvbW1lbnQgaW4gdGhlIG9uZSBwbGFjZSB3ZSB1c2UgZmFsbC10aHJvdWdoLgotCi1TaWduZWQtb2ZmLWJ5OiBQZXRlciBKb25lcyA8cGpvbmVzQHJlZGhhdC5jb20+Ci0tLS0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi0gbGliL3ByaW50LmMgfCAxICsKLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKLQotZGlmZiAtLWdpdCBhL2xpYi9wcmludC5jIGIvbGliL3ByaW50LmMKLWluZGV4IGI4YTlkMzguLmNiNzMyZjAgMTAwNjQ0Ci0tLS0gYS9saWIvcHJpbnQuYwotKysrIGIvbGliL3ByaW50LmMKLUBAIC0xMTMxLDYgKzExMzEsNyBAQCBSZXR1cm5zOgotICAgICAgICAgICAgIGNhc2UgJ1gnOgotICAgICAgICAgICAgICAgICBJdGVtLldpZHRoID0gSXRlbS5Mb25nID8gMTYgOiA4OwotICAgICAgICAgICAgICAgICBJdGVtLlBhZCA9ICcwJzsKLSsJCS8qIGZhbGxzIHRocm91Z2ggKi8KLSAgICAgICAgICAgICBjYXNlICd4JzoKLSAgICAgICAgICAgICAgICAgVmFsdWVUb0hleCAoCi0gICAgICAgICAgICAgICAgICAgICBJdGVtLlNjcmF0Y2gsCi0tLSAKLTIuMTIuMgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvZ2NjNDYtY29tcGF0aWJpbGl0eS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaS9nY2M0Ni1jb21wYXRpYmlsaXR5LnBhdGNoCmluZGV4IDBjZTZkN2IuLjY5ZWZkMzQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaS9nY2M0Ni1jb21wYXRpYmlsaXR5LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaS9nY2M0Ni1jb21wYXRpYmlsaXR5LnBhdGNoCkBAIC0xLDMgKzEsOCBAQAorRnJvbSA4ZDE2YWUzNzRjNWQ0ZDlmYWM0NWMwMDI2MDVhNjZjZmI4YzA4YmU1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU3RldmUgTGFuZ2FzZWsgPHN0ZXZlLmxhbmdhc2VrQHVidW50dS5jb20+CitEYXRlOiBXZWQsIDkgU2VwIDIwMTUgMDg6MjY6MDYgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzNdIGdudS1lZmksIHN5c2xpbnV4OiBTdXBwb3J0IGdjYyA8IDQuNworCiBkb24ndCBicmVhayB3aXRoIG9sZCBjb21waWxlcnMgYW5kIC1ER05VX0VGSV9VU0VfTVNfQUJJCiBJdCdzIGVudGlyZWx5IGxlZ2l0aW1hdGUgdG8gcmVxdWVzdCBHTlVfRUZJX1VTRV9NU19BQkkgZXZlbiBpZiB0aGUgY3VycmVudAogY29tcGlsZXIgZG9lc24ndCBzdXBwb3J0IGl0LCBhbmQgZ251LWVmaSBzaG91bGQgdHJhbnNwYXJlbnRseSBmYWxsIGJhY2sgdG8KQEAgLTYsMTYgKzExLDI1IEBACiAKIEF1dGhvcjogU3RldmUgTGFuZ2FzZWsgPHN0ZXZlLmxhbmdhc2VrQHVidW50dS5jb20+CiBVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLUluZGV4OiBnbnUtZWZpLTMuMC4zL2luYy94ODZfNjQvZWZpYmluZC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ251LWVmaS0zLjAuMy5vcmlnL2luYy94ODZfNjQvZWZpYmluZC5oCi0rKysgZ251LWVmaS0zLjAuMy9pbmMveDg2XzY0L2VmaWJpbmQuaAorW1JlYmFzZWQgZm9yIDMuMC42XQorU2lnbmVkLW9mZi1ieTogQ2FsaWZvcm5pYSBTdWxsaXZhbiA8Y2FsaWZvcm5pYS5sLnN1bGxpdmFuQGludGVsLmNvbT4KKy0tLQorIGluYy94ODZfNjQvZWZpYmluZC5oIHwgMiAtLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvaW5jL3g4Nl82NC9lZmliaW5kLmggYi9pbmMveDg2XzY0L2VmaWJpbmQuaAoraW5kZXggNDMwOWY5Zi4uMDJjMGFmMSAxMDA2NDQKKy0tLSBhL2luYy94ODZfNjQvZWZpYmluZC5oCisrKysgYi9pbmMveDg2XzY0L2VmaWJpbmQuaAogQEAgLTI1LDggKzI1LDYgQEAgUmV2aXNpb24gSGlzdG9yeQogICNpZiBkZWZpbmVkKEdOVV9FRklfVVNFX01TX0FCSSkKLSAgICAgI2lmIGRlZmluZWQoX19HTlVDX18pICYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNykpCisgICAgICNpZiAoZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA3KSkpfHwoZGVmaW5lZChfX2NsYW5nX18pICYmIChfX2NsYW5nX21ham9yX18gPiAzIHx8IChfX2NsYW5nX21ham9yX18gPT0gMyAmJiBfX2NsYW5nX21pbm9yX18gPj0gMikpKQogICAgICAgICAgI2RlZmluZSBIQVZFX1VTRV9NU19BQkkgMQogLSAgICAjZWxzZQogLSAgICAgICAgI2Vycm9yIENvbXBpbGVyIGlzIHRvbyBvbGQgZm9yIEdOVV9FRklfVVNFX01TX0FCSQogICAgICAjZW5kaWYKICAjZW5kaWYKICAKKy0tIAorMi45LjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpL3BhcmFsbGVsLW1ha2UtYXJjaGl2ZXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvcGFyYWxsZWwtbWFrZS1hcmNoaXZlcy5wYXRjaAppbmRleCBlNWI0N2MxLi4wMTEwMjYwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvcGFyYWxsZWwtbWFrZS1hcmNoaXZlcy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvcGFyYWxsZWwtbWFrZS1hcmNoaXZlcy5wYXRjaApAQCAtMSw0ICsxLDcgQEAKLUZpeCBwYXJhbGxlbCBtYWtlIGZhaWx1cmUgZm9yIGFyY2hpdmVzCitGcm9tIDE2ODY1ZGU2NmRiMzNjYTcwODcyMTk5ZTcwZDkzZWZjY2VjYzg1NzUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitEYXRlOiBTdW4sIDkgTWFyIDIwMTQgMTU6MjI6MTUgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzNdIEZpeCBwYXJhbGxlbCBtYWtlIGZhaWx1cmUgZm9yIGFyY2hpdmVzCiAKIFVwc3RyZWFtLVN0YXR1czogUGVuZGluZwogCkBAIC0xMiwzMSArMTUsMTggQEAKIAogU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgogU2lnbmVkLW9mZi1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CitbUmViYXNlZCBmb3IgMy4wLjZdCitTaWduZWQtb2ZmLWJ5OiBDYWxpZm9ybmlhIFN1bGxpdmFuIDxjYWxpZm9ybmlhLmwuc3VsbGl2YW5AaW50ZWwuY29tPgogLS0tCi0tLS0KLSBnbnVlZmkvTWFrZWZpbGUgfCAgICAzICsrLQotIGxpYi9NYWtlZmlsZSAgICB8ICAgIDMgKystCi0gMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisgZ251ZWZpL01ha2VmaWxlIHwgMyArKy0KKyBsaWIvTWFrZWZpbGUgICAgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCiAKLUluZGV4OiBnbnUtZWZpLTMuMC9saWIvTWFrZWZpbGUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnbnUtZWZpLTMuMC5vcmlnL2xpYi9NYWtlZmlsZQotKysrIGdudS1lZmktMy4wL2xpYi9NYWtlZmlsZQotQEAgLTY2LDcgKzY2LDggQEAgYWxsOiBsaWJzdWJkaXJzIGxpYmVmaS5hCi0gbGlic3ViZGlyczoKLSAJZm9yIHNkaXIgaW4gJChTVUJESVJTKTsgZG8gbWtkaXIgLXAgJCRzZGlyOyBkb25lCi0gCi0tbGliZWZpLmE6ICQocGF0c3Vic3QgJSxsaWJlZmkuYSglKSwkKE9CSlMpKQotK2xpYmVmaS5hOiAkKE9CSlMpCi0rCSQoQVIpIHJ2ICRAICQoT0JKUykKLSAKLSBjbGVhbjoKLSAJcm0gLWYgbGliZWZpLmEgKn4gJChPQkpTKSAqLyoubwotSW5kZXg6IGdudS1lZmktMy4wL2dudWVmaS9NYWtlZmlsZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdudS1lZmktMy4wLm9yaWcvZ251ZWZpL01ha2VmaWxlCi0rKysgZ251LWVmaS0zLjAvZ251ZWZpL01ha2VmaWxlCi1AQCAtNTEsNyArNTEsOCBAQCBUQVJHRVRTCT0gY3J0MC1lZmktJChBUkNIKS5vIGxpYmdudWVmaS5hCitkaWZmIC0tZ2l0IGEvZ251ZWZpL01ha2VmaWxlIGIvZ251ZWZpL01ha2VmaWxlCitpbmRleCAyYTYxNjk5Li4xNDgxMDZlIDEwMDY0NAorLS0tIGEvZ251ZWZpL01ha2VmaWxlCisrKysgYi9nbnVlZmkvTWFrZWZpbGUKK0BAIC01NCw3ICs1NCw4IEBAIFRBUkdFVFMJPSBjcnQwLWVmaS0kKEFSQ0gpLm8gbGliZ251ZWZpLmEKICAKICBhbGw6CSQoVEFSR0VUUykKICAKQEAgLTQ2LDMgKzM2LDE5IEBACiAgCiAgY2xlYW46CiAgCXJtIC1mICQoVEFSR0VUUykgKn4gKi5vICQoT0JKUykKK2RpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGUKK2luZGV4IGI4ZDFjZTcuLjZlZjgxMDcgMTAwNjQ0CistLS0gYS9saWIvTWFrZWZpbGUKKysrKyBiL2xpYi9NYWtlZmlsZQorQEAgLTc1LDcgKzc1LDcgQEAgbGlic3ViZGlyczoKKyAJZm9yIHNkaXIgaW4gJChTVUJESVJTKTsgZG8gbWtkaXIgLXAgJCRzZGlyOyBkb25lCisgCisgbGliZWZpLmE6ICQoT0JKUykKKy0JJChBUikgcnYgLVUgJEAgJF4KKysJJChBUikgcnYgJEAgJChPQkpTKQorIAorIGNsZWFuOgorIAlybSAtZiBsaWJlZmkuYSAqfiAkKE9CSlMpICovKi5vCistLSAKKzIuOS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaV8zLjAuNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaV8zLjAuNS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZmOWY1My4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmlfMy4wLjUuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi1TVU1NQVJZID0gIkxpYnJhcmllcyBmb3IgcHJvZHVjaW5nIEVGSSBiaW5hcmllcyIKLUhPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ251LWVmaS8iCi1TRUNUSU9OID0gImRldmVsIgotTElDRU5TRSA9ICJHUEx2MisgfCBCU0QtMi1DbGF1c2UiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9nbnVlZmkvY3J0MC1lZmktYXJtLlM7YmVnaW5saW5lPTQ7ZW5kbGluZT0xNjttZDU9ZTU4Mjc2NGE0Nzc2ZTYwYzk1YmY5YWI2MTczNDNkMzYgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ251ZWZpL2NydDAtZWZpLWFhcmNoNjQuUztiZWdpbmxpbmU9NDtlbmRsaW5lPTE2O21kNT1lNTgyNzY0YTQ3NzZlNjBjOTViZjlhYjYxNzM0M2QzNiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmMvZWZpc2hlbGxpbnRmLmg7YmVnaW5saW5lPTEzO2VuZGxpbmU9MjA7bWQ1PTIwMjc2NmI3OWQ3MDhlZmYzY2M3MGZjZTE1ZmI4MGM3IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luYy9lZmlzaGVsbHBhcm0uaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTExO21kNT00NjhiMTIzMWIwNWJiYzg0YmFlM2EwZDU3NzRlM2JiNSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvYXJtL21hdGguYztiZWdpbmxpbmU9MjtlbmRsaW5lPTE1O21kNT04ZWQ3NzI1MDFkYTc3YjJiMzM0NWFhNmRmODc0NGM5ZSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvYXJtL2luaXRwbGF0LmM7YmVnaW5saW5lPTI7ZW5kbGluZT0xNTttZDU9OGVkNzcyNTAxZGE3N2IyYjMzNDVhYTZkZjg3NDRjOWUgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2FhcmNoNjQvbWF0aC5jO2JlZ2lubGluZT0yO2VuZGxpbmU9MTU7bWQ1PThlZDc3MjUwMWRhNzdiMmIzMzQ1YWE2ZGY4NzQ0YzllIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9hYXJjaDY0L2luaXRwbGF0LmM7YmVnaW5saW5lPTI7ZW5kbGluZT0xNTttZDU9OGVkNzcyNTAxZGE3N2IyYjMzNDVhYTZkZjg3NDRjOWUgXAotICAgICAgICAgICAgICAgICAgICIKLQotU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vJHtCUE59LyR7QlB9LnRhci5iejIgXAotICAgICAgICAgICBmaWxlOi8vcGFyYWxsZWwtbWFrZS1hcmNoaXZlcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9saWItTWFrZWZpbGUtZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2djYzQ2LWNvbXBhdGliaWxpdHkucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1NYXJrLW91ci1leHBsaWNpdC1mYWxsLXRocm91Z2gtc28tV2V4dHJhLXdpbGwtd29yay1pLnBhdGNoIFwKLSAgICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiMWY3MTljOWMxMzU3NzhhYTZiMDg3Yjg5YTFjYzI0MjMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmQ4ZmNkNTkxNGYxOGZjMGU0YmE5NDhhYjAzYjAwMDEzZTUyODUwNGY1MjljNjA3MzliNzQ4ZjZlZjEzMGIyMiIKLQotQ09NUEFUSUJMRV9IT1NUID0gIih4ODZfNjQuKnxpLjg2Lip8YWFyY2g2NC4qfGFybS4qKS1saW51eCIKLUNPTVBBVElCTEVfSE9TVF9hcm12NCA9ICdudWxsJwotCi1kb19jb25maWd1cmVfbGludXgtZ251eDMyX3ByZXBlbmQoKSB7Ci0JY3AgJHtTVEFHSU5HX0lOQ0RJUn0vZ251L3N0dWJzLXgzMi5oICR7U1RBR0lOR19JTkNESVJ9L2dudS9zdHVicy02NC5oCi0JY3AgJHtTVEFHSU5HX0lOQ0RJUn0vYml0cy9sb25nLWRvdWJsZS0zMi5oICR7U1RBR0lOR19JTkNESVJ9L2JpdHMvbG9uZy1kb3VibGUtNjQuaAotfQotCi1kZWYgZ251X2VmaV9hcmNoKGQpOgotICAgIGltcG9ydCByZQotICAgIHRhcmNoID0gZC5nZXRWYXIoIlRBUkdFVF9BUkNIIikKLSAgICBpZiByZS5tYXRjaCgiaVszNDU2Nzg5XTg2IiwgdGFyY2gpOgotICAgICAgICByZXR1cm4gImlhMzIiCi0gICAgcmV0dXJuIHRhcmNoCi0KLUVYVFJBX09FTUFLRSA9ICInQVJDSD0ke0BnbnVfZWZpX2FyY2goZCl9JyAnQ0M9JHtDQ30nICdBUz0ke0FTfScgJ0xEPSR7TER9JyAnQVI9JHtBUn0nIFwKLSAgICAgICAgICAgICAgICAnUkFOTElCPSR7UkFOTElCfScgJ09CSkNPUFk9JHtPQkpDT1BZfScgJ1BSRUZJWD0ke3ByZWZpeH0nICdMSUJESVI9JHtsaWJkaXJ9JyBcCi0gICAgICAgICAgICAgICAgIgotCi0jIGdudS1lZmkncyBNYWtlZmlsZSB0cmVhdHMgcHJlZml4IGFzIHRvb2xjaGFpbiBwcmVmaXgsIHNvIGRvbid0Ci0jIGV4cG9ydCBpdC4KLXByZWZpeFt1bmV4cG9ydF0gPSAiMSIKLQotZG9faW5zdGFsbCgpIHsKLSAgICAgICAgb2VfcnVubWFrZSBpbnN0YWxsIElOU1RBTExST09UPSIke0R9IgotfQotCi1GSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyoubGRzIgotCi0jIDY0LWJpdCBiaW5hcmllcyBhcmUgZXhwZWN0ZWQgZm9yIEVGSSB3aGVuIHRhcmdldGluZyBYMzIKLUlOU0FORV9TS0lQXyR7UE59LWRldl9hcHBlbmRfbGludXgtZ251eDMyID0gIiBhcmNoIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKLQotIyBJdCBkb2Vzbid0IHN1cHBvcnQgc3NlLCBpdHMgbWFrZS5kZWZhdWx0cyBzZXRzOgotIyBDRkxBR1MgKz0gLW1uby1tbXggLW1uby1zc2UKLSMgU28gYWxzbyByZW1vdmUgLW1mcG1hdGg9c3NlIGZyb20gVFVORV9DQ0FSR1MKLVRVTkVfQ0NBUkdTX3JlbW92ZSA9ICItbWZwbWF0aD1zc2UiCi0KLXB5dGhvbiAoKSB7Ci0gICAgY2NhcmdzID0gZC5nZXRWYXIoJ1RVTkVfQ0NBUkdTJykuc3BsaXQoKQotICAgIGlmICctbXgzMicgaW4gY2NhcmdzOgotICAgICAgICAjIHVzZSB4ODZfNjQgRUZJIEFCSQotICAgICAgICBjY2FyZ3MucmVtb3ZlKCctbXgzMicpCi0gICAgICAgIGNjYXJncy5hcHBlbmQoJy1tNjQnKQotICAgICAgICBkLnNldFZhcignVFVORV9DQ0FSR1MnLCAnICcuam9pbihjY2FyZ3MpKQotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpXzMuMC42LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpXzMuMC42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNjA3MTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmlfMy4wLjYuYmIKQEAgLTAsMCArMSw3MSBAQAorU1VNTUFSWSA9ICJMaWJyYXJpZXMgZm9yIHByb2R1Y2luZyBFRkkgYmluYXJpZXMiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dudS1lZmkvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIrIHwgQlNELTItQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZ251ZWZpL2NydDAtZWZpLWFybS5TO2JlZ2lubGluZT00O2VuZGxpbmU9MTY7bWQ1PWU1ODI3NjRhNDc3NmU2MGM5NWJmOWFiNjE3MzQzZDM2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dudWVmaS9jcnQwLWVmaS1hYXJjaDY0LlM7YmVnaW5saW5lPTQ7ZW5kbGluZT0xNjttZDU9ZTU4Mjc2NGE0Nzc2ZTYwYzk1YmY5YWI2MTczNDNkMzYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jL2VmaXNoZWxsaW50Zi5oO2JlZ2lubGluZT0xMztlbmRsaW5lPTIwO21kNT0yMDI3NjZiNzlkNzA4ZWZmM2NjNzBmY2UxNWZiODBjNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmMvZWZpc2hlbGxwYXJtLmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0xMTttZDU9NDY4YjEyMzFiMDViYmM4NGJhZTNhMGQ1Nzc0ZTNiYjUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2FybS9tYXRoLmM7YmVnaW5saW5lPTI7ZW5kbGluZT0xNTttZDU9OGVkNzcyNTAxZGE3N2IyYjMzNDVhYTZkZjg3NDRjOWUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2FybS9pbml0cGxhdC5jO2JlZ2lubGluZT0yO2VuZGxpbmU9MTU7bWQ1PThlZDc3MjUwMWRhNzdiMmIzMzQ1YWE2ZGY4NzQ0YzllIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9hYXJjaDY0L21hdGguYztiZWdpbmxpbmU9MjtlbmRsaW5lPTE1O21kNT04ZWQ3NzI1MDFkYTc3YjJiMzM0NWFhNmRmODc0NGM5ZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvYWFyY2g2NC9pbml0cGxhdC5jO2JlZ2lubGluZT0yO2VuZGxpbmU9MTU7bWQ1PThlZDc3MjUwMWRhNzdiMmIzMzQ1YWE2ZGY4NzQ0YzllIFwKKyAgICAgICAgICAgICAgICAgICAiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9LyR7QlBOfS8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3BhcmFsbGVsLW1ha2UtYXJjaGl2ZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGliLU1ha2VmaWxlLWZpeC1wYXJhbGxlbC1pc3N1ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nY2M0Ni1jb21wYXRpYmlsaXR5LnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDZmNjMzNzU4YThhMzdkYjlmZDY5MDlmZTI3MGMyNmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjE1MTU5MDJkODBmYmVhMjMzMjhhNjFkNzBkM2Q1MWE0NzIwNGFiZDE1MDdlYmZhMjc1NTBhN2I5YmYyMmM5MSIKKworQ09NUEFUSUJMRV9IT1NUID0gIih4ODZfNjQuKnxpLjg2Lip8YWFyY2g2NC4qfGFybS4qKS1saW51eCIKK0NPTVBBVElCTEVfSE9TVF9hcm12NCA9ICdudWxsJworCitkb19jb25maWd1cmVfbGludXgtZ251eDMyX3ByZXBlbmQoKSB7CisJY3AgJHtTVEFHSU5HX0lOQ0RJUn0vZ251L3N0dWJzLXgzMi5oICR7U1RBR0lOR19JTkNESVJ9L2dudS9zdHVicy02NC5oCisJY3AgJHtTVEFHSU5HX0lOQ0RJUn0vYml0cy9sb25nLWRvdWJsZS0zMi5oICR7U1RBR0lOR19JTkNESVJ9L2JpdHMvbG9uZy1kb3VibGUtNjQuaAorfQorCitkZWYgZ251X2VmaV9hcmNoKGQpOgorICAgIGltcG9ydCByZQorICAgIHRhcmNoID0gZC5nZXRWYXIoIlRBUkdFVF9BUkNIIikKKyAgICBpZiByZS5tYXRjaCgiaVszNDU2Nzg5XTg2IiwgdGFyY2gpOgorICAgICAgICByZXR1cm4gImlhMzIiCisgICAgcmV0dXJuIHRhcmNoCisKK0VYVFJBX09FTUFLRSA9ICInQVJDSD0ke0BnbnVfZWZpX2FyY2goZCl9JyAnQ0M9JHtDQ30nICdBUz0ke0FTfScgJ0xEPSR7TER9JyAnQVI9JHtBUn0nIFwKKyAgICAgICAgICAgICAgICAnUkFOTElCPSR7UkFOTElCfScgJ09CSkNPUFk9JHtPQkpDT1BZfScgJ1BSRUZJWD0ke3ByZWZpeH0nICdMSUJESVI9JHtsaWJkaXJ9JyBcCisgICAgICAgICAgICAgICAgIgorCisjIGdudS1lZmkncyBNYWtlZmlsZSB0cmVhdHMgcHJlZml4IGFzIHRvb2xjaGFpbiBwcmVmaXgsIHNvIGRvbid0CisjIGV4cG9ydCBpdC4KK3ByZWZpeFt1bmV4cG9ydF0gPSAiMSIKKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgb2VfcnVubWFrZSBpbnN0YWxsIElOU1RBTExST09UPSIke0R9IgorfQorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyoubGRzIgorCisjIDY0LWJpdCBiaW5hcmllcyBhcmUgZXhwZWN0ZWQgZm9yIEVGSSB3aGVuIHRhcmdldGluZyBYMzIKK0lOU0FORV9TS0lQXyR7UE59LWRldl9hcHBlbmRfbGludXgtZ251eDMyID0gIiBhcmNoIgorSU5TQU5FX1NLSVBfJHtQTn0tZGV2X2FwcGVuZF9saW51eC1tdXNseDMyID0gIiBhcmNoIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworIyBJdCBkb2Vzbid0IHN1cHBvcnQgc3NlLCBpdHMgbWFrZS5kZWZhdWx0cyBzZXRzOgorIyBDRkxBR1MgKz0gLW1uby1tbXggLW1uby1zc2UKKyMgU28gYWxzbyByZW1vdmUgLW1mcG1hdGg9c3NlIGZyb20gVFVORV9DQ0FSR1MKK1RVTkVfQ0NBUkdTX3JlbW92ZSA9ICItbWZwbWF0aD1zc2UiCisKK3B5dGhvbiAoKSB7CisgICAgY2NhcmdzID0gZC5nZXRWYXIoJ1RVTkVfQ0NBUkdTJykuc3BsaXQoKQorICAgIGlmICctbXgzMicgaW4gY2NhcmdzOgorICAgICAgICAjIHVzZSB4ODZfNjQgRUZJIEFCSQorICAgICAgICBjY2FyZ3MucmVtb3ZlKCctbXgzMicpCisgICAgICAgIGNjYXJncy5hcHBlbmQoJy1tNjQnKQorICAgICAgICBkLnNldFZhcignVFVORV9DQ0FSR1MnLCAnICcuam9pbihjY2FyZ3MpKQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLWdpdC8wMDAxLURpc2FibGUtbWZwbWF0aC1zc2UtYXMtd2VsbC13aGVuLVNTRS1pcy1kaXNhYmxlZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1EaXNhYmxlLW1mcG1hdGgtc3NlLWFzLXdlbGwtd2hlbi1TU0UtaXMtZGlzYWJsZWQucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi1naXQvMDAwMS1EaXNhYmxlLW1mcG1hdGgtc3NlLWFzLXdlbGwtd2hlbi1TU0UtaXMtZGlzYWJsZWQucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1EaXNhYmxlLW1mcG1hdGgtc3NlLWFzLXdlbGwtd2hlbi1TU0UtaXMtZGlzYWJsZWQucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1FbmZvcmNlLW5vLXBpZS1pZi10aGUtY29tcGlsZXItc3VwcG9ydHMtaXQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtRW5mb3JjZS1uby1waWUtaWYtdGhlLWNvbXBpbGVyLXN1cHBvcnRzLWl0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2RiZWUyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1FbmZvcmNlLW5vLXBpZS1pZi10aGUtY29tcGlsZXItc3VwcG9ydHMtaXQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi1Gcm9tIDYxODZiY2YxYmNhYWEwZjE2ZTc5MzM5ZTA3YzY0Yzg0MWQ0ZDk1N2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMiBEZWMgMjAxNiAyMDo1Mjo0MCArMDIwMAotU3ViamVjdDogW1BBVENIXSBFbmZvcmNlIC1uby1waWUsIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyBpdC4KLQotQWRkIGEgLW5vLXBpZSBhcyByZWNlbnQgKDIgRGVjIDIwMTYpIERlYmlhbiB0ZXN0aW5nIGNvbXBpbGVyCi1zZWVtcyB0byBkZWZhdWx0IHRvIGVuYWJsaW5nIFBJRSB3aGVuIGxpbmtpbmcuIFNlZQotaHR0cHM6Ly93aWtpLnVidW50dS5jb20vU2VjdXJpdHlUZWFtL1BJRQotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLVNpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgotLS0tCi0gYWNpbmNsdWRlLm00IHwgMiArLQotIGNvbmZpZ3VyZS5hYyB8IDIgKy0KLSAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2FjaW5jbHVkZS5tNCBiL2FjaW5jbHVkZS5tNAotaW5kZXggMTkyMDBiMC4uYTcxMzkyMyAxMDA2NDQKLS0tLSBhL2FjaW5jbHVkZS5tNAotKysrIGIvYWNpbmNsdWRlLm00Ci1AQCAtNDE2LDcgKzQxNiw3IEBAIGludCBtYWluKCkgewotIAotIFsjIGAkQ0MgLWMgLW8gLi4uJyBtaWdodCBub3QgYmUgcG9ydGFibGUuICBCdXQsIG9oLCB3ZWxsLi4uICBJcyBjYWxsaW5nCi0gIyBgYWNfY29tcGlsZScgbGlrZSB0aGlzIGNvcnJlY3QsIGFmdGVyIGFsbD8KLS1pZiBldmFsICIkYWNfY29tcGlsZSAtUyAtbyBjb25mdGVzdC5zIiAyPiAvZGV2L251bGw7IHRoZW5dCi0raWYgZXZhbCAiJGFjX2NvbXBpbGUgLVMgLW8gY29uZnRlc3QucyIgMj4gL2Rldi9udWxsICYmIGV2YWwgIiRDQyAtZHVtcHNwZWNzIDI+L2Rldi9udWxsIHwgZ3JlcCAtZSBuby1waWUiIDsgdGhlbl0KLSAgIEFDX01TR19SRVNVTFQoW3llc10pCi0gICBbIyBTaG91bGQgd2UgY2xlYXIgdXAgb3RoZXIgZmlsZXMgYXMgd2VsbCwgaGF2aW5nIGNhbGxlZCBgQUNfTEFOR19DT05GVEVTVCc/Ci0gICBybSAtZiBjb25mdGVzdC5zCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCBkZjIwOTkxLi41MDZjNmI0IDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC02MDMsNyArNjAzLDcgQEAgZ3J1Yl9DSEVDS19QSUUKLSBbIyBOZWVkIHRoYXQsIGJlY2F1c2Ugc29tZSBkaXN0cmlidXRpb25zIHNoaXAgY29tcGlsZXJzIHRoYXQgaW5jbHVkZQotICMgYC1mUElFJyBpbiB0aGUgZGVmYXVsdCBzcGVjcy4KLSBpZiBbIHgiJHBpZV9wb3NzaWJsZSIgPSB4eWVzIF07IHRoZW4KLS0gIFRBUkdFVF9DRkxBR1M9IiRUQVJHRVRfQ0ZMQUdTIC1mbm8tUElFIgotKyAgVEFSR0VUX0NGTEFHUz0iJFRBUkdFVF9DRkxBR1MgLWZuby1QSUUgLW5vLXBpZSIKLSBmaV0KLSAKLSAjIFBvc2l0aW9uIGluZGVwZW5kZW50IGV4ZWN1dGFibGUuCi0tLSAKLTIuMTAuMgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtRml4LUNWRS0yMDE1LTgzNzAtR3J1YjItdXNlci1wYXNzLXZ1bG5lcmFiaWxpdHkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtRml4LUNWRS0yMDE1LTgzNzAtR3J1YjItdXNlci1wYXNzLXZ1bG5lcmFiaWxpdHkucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZGRjYWYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDAxLUZpeC1DVkUtMjAxNS04MzcwLUdydWIyLXVzZXItcGFzcy12dWxuZXJhYmlsaXR5LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZAotQ1ZFOiBDVkUtMjAxNS04MzcwCi1TaWduZWQtb2ZmLWJ5OiBBd2FpcyBCZWxhbCA8YXdhaXNfYmVsYWxAbWVudG9yLmNvbT4KLQotRnJvbSA0NTFkODBlNTJkODUxNDMyZTEwOTc3MWJiOGZlYmFmY2E3YTVmMWYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogSGVjdG9yIE1hcmNvLUdpc2JlcnQgPGhlY21hcmdpQHVwdi5lcz4KLURhdGU6IFdlZCwgMTYgRGVjIDIwMTUgMDQ6NTc6MTggKzAwMDAKLVN1YmplY3Q6IEZpeCBzZWN1cml0eSBpc3N1ZSB3aGVuIHJlYWRpbmcgdXNlcm5hbWUgYW5kIHBhc3N3b3JkCi0KLVRoaXMgcGF0Y2ggZml4ZXMgdHdvIGludGVnZXIgdW5kZXJmbG93cyBhdDoKLSAgKiBncnViLWNvcmUvbGliL2NyeXB0by5jCi0gICogZ3J1Yi1jb3JlL25vcm1hbC9hdXRoLmMKLQotQ1ZFLTIwMTUtODM3MAotCi1TaWduZWQtb2ZmLWJ5OiBIZWN0b3IgTWFyY28tR2lzYmVydCA8aGVjbWFyZ2lAdXB2LmVzPgotU2lnbmVkLW9mZi1ieTogSXNtYWVsIFJpcG9sbC1SaXBvbGwgPGlyaXBvbGxAZGlzY2EudXB2LmVzPgotQWxzby1CeTogQW5kcmV5IEJvcnplbmtvdiA8YXJ2aWRqYWFyQGdtYWlsLmNvbT4KLS0tLQotZGlmZiAtLWdpdCBhL2dydWItY29yZS9saWIvY3J5cHRvLmMgYi9ncnViLWNvcmUvbGliL2NyeXB0by5jCi1pbmRleCAwMTBlNTUwLi42ODNhOGFhIDEwMDY0NAotLS0tIGEvZ3J1Yi1jb3JlL2xpYi9jcnlwdG8uYwotKysrIGIvZ3J1Yi1jb3JlL2xpYi9jcnlwdG8uYwotQEAgLTQ3MCw3ICs0NzAsOCBAQCBncnViX3Bhc3N3b3JkX2dldCAoY2hhciBidWZbXSwgdW5zaWduZWQgYnVmX3NpemUpCi0gCi0gICAgICAgaWYgKGtleSA9PSAnXGInKQotIAl7Ci0tCSAgY3VyX2xlbi0tOwotKwkgIGlmIChjdXJfbGVuKQotKwkgICAgY3VyX2xlbi0tOwotIAkgIGNvbnRpbnVlOwotIAl9Ci0gCi1kaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL25vcm1hbC9hdXRoLmMgYi9ncnViLWNvcmUvbm9ybWFsL2F1dGguYwotaW5kZXggYzZiZDk2ZS4uODYxNWM0OCAxMDA2NDQKLS0tLSBhL2dydWItY29yZS9ub3JtYWwvYXV0aC5jCi0rKysgYi9ncnViLWNvcmUvbm9ybWFsL2F1dGguYwotQEAgLTE3NCw4ICsxNzQsMTEgQEAgZ3J1Yl91c2VybmFtZV9nZXQgKGNoYXIgYnVmW10sIHVuc2lnbmVkIGJ1Zl9zaXplKQotIAotICAgICAgIGlmIChrZXkgPT0gJ1xiJykKLSAJewotLQkgIGN1cl9sZW4tLTsKLS0JICBncnViX3ByaW50ZiAoIlxiIik7Ci0rCSAgaWYgKGN1cl9sZW4pCi0rCSAgICB7Ci0rCSAgICAgIGN1cl9sZW4tLTsKLSsJICAgICAgZ3J1Yl9wcmludGYgKCJcYiIpOwotKwkgICAgfQotIAkgIGNvbnRpbnVlOwotIAl9Ci0gCi0tLQotY2dpdCB2MC45LjAuMgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDAxLVJlbW92ZS1kaXJlY3QtX2xsc2Vlay1jb2RlLWFuZC1yZXF1aXJlLWxvbmctZmlsZXN5c3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtUmVtb3ZlLWRpcmVjdC1fbGxzZWVrLWNvZGUtYW5kLXJlcXVpcmUtbG9uZy1maWxlc3lzdC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVhYmNlOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtUmVtb3ZlLWRpcmVjdC1fbGxzZWVrLWNvZGUtYW5kLXJlcXVpcmUtbG9uZy1maWxlc3lzdC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLUZyb20gM2JhYzRjYWEyYmM2NGRiMzEzYWFlZTU0ZmZmYjkwMzgzZTExODUxNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEZlbGl4IEphbmRhIDxmZWxpeC5qYW5kYUBwb3N0ZW8uZGU+Ci1EYXRlOiBUaHUsIDIyIEphbiAyMDE1IDE5OjU0OjM2ICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIFJlbW92ZSBkaXJlY3QgX2xsc2VlayBjb2RlIGFuZCByZXF1aXJlIGxvbmcgZmlsZXN5c3RlbSBsaWJjLgotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0gY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICB8ICA4ICsrKysrKysrCi0gZ3J1Yi1jb3JlL29zZGVwL3VuaXgvaG9zdGRpc2suYyB8IDI0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIDQgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCi0KLUluZGV4OiBncnViLTIuMDAvY29uZmlndXJlLmFjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ3J1Yi0yLjAwLm9yaWcvY29uZmlndXJlLmFjCi0rKysgZ3J1Yi0yLjAwL2NvbmZpZ3VyZS5hYwotQEAgLTMwNiw2ICszMDYsMTQgQEAgaWYgdGVzdCB4JGdydWJfY3ZfYXBwbGVfY2MgPSB4eWVzIDsgdGhlbgotICAgSE9TVF9MREZMQUdTPSIkSE9TVF9MREZMQUdTIC1XbCwtYWxsb3dfc3RhY2tfZXhlY3V0ZSIKLSBmaQotIAotK2Nhc2UgIiRob3N0X29zIiBpbgotKyAgY3lnd2luIHwgd2luZG93cyogfCBtaW5ndzMyKiB8IGFyb3MqKQotKyAgICAgOzsKLSsgICopCi0rICAgICBBQ19DSEVDS19TSVpFT0Yob2ZmX3QpCi0rICAgICB0ZXN0IHgiJGFjX2N2X3NpemVvZl9vZmZfdCIgPSB4OCB8fCBBQ19NU0dfRVJST1IoW0xhcmdlIGZpbGUgc3VwcG9ydCBpcyByZXF1aXJlZF0pOzsKLStlc2FjCi0rCi0gaWYgdGVzdCB4JFVTRV9OTFMgPSB4bm87IHRoZW4KLSAgIEhPU1RfQ0ZMQUdTPSIkSE9TVF9DRkxBR1MgLWZuby1idWlsdGluLWdldHRleHQiCi0gZmkKLUluZGV4OiBncnViLTIuMDAvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3RkaXNrLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBncnViLTIuMDAub3JpZy9ncnViLWNvcmUva2Vybi9lbXUvaG9zdGRpc2suYwotKysrIGdydWItMi4wMC9ncnViLWNvcmUva2Vybi9lbXUvaG9zdGRpc2suYwotQEAgLTQ0LDExICs0NCw2IEBACi0gI2lmZGVmIF9fbGludXhfXwotICMgaW5jbHVkZSA8c3lzL2lvY3RsLmg+ICAgICAgICAgLyogaW9jdGwgKi8KLSAjIGluY2x1ZGUgPHN5cy9tb3VudC5oPgotLSMgaWYgIWRlZmluZWQoX19HTElCQ19fKSB8fCBcCi0tICAgICAgICAoKF9fR0xJQkNfXyA8IDIpIHx8ICgoX19HTElCQ19fID09IDIpICYmIChfX0dMSUJDX01JTk9SX18gPCAxKSkpCi0tLyogTWF5YmUgbGliYyBkb2Vzbid0IGhhdmUgbGFyZ2UgZmlsZSBzdXBwb3J0LiAgKi8KLS0jICBpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4gICAgIC8qIF9sbHNlZWsgKi8KLS0jIGVuZGlmIC8qIChHTElCQyA8IDIpIHx8ICgoX19HTElCQ19fID09IDIpICYmIChfX0dMSUJDX01JTk9SIDwgMSkpICovCi0gIyBpZm5kZWYgQkxLRkxTQlVGCi0gIyAgZGVmaW5lIEJMS0ZMU0JVRiAgICAgX0lPICgweDEyLDk3KSAgIC8qIGZsdXNoIGJ1ZmZlciBjYWNoZSAqLwotICMgZW5kaWYgLyogISBCTEtGTFNCVUYgKi8KLUBAIC03NjEsMjUgKzc1Niw2IEBAIGxpbnV4X2ZpbmRfcGFydGl0aW9uIChjaGFyICpkZXYsIGdydWJfZGkKLSB9Ci0gI2VuZGlmIC8qIF9fbGludXhfXyAqLwotIAotLSNpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgKCFkZWZpbmVkKF9fR0xJQkNfXykgfHwgXAotLSAgICAgICAgKChfX0dMSUJDX18gPCAyKSB8fCAoKF9fR0xJQkNfXyA9PSAyKSAmJiAoX19HTElCQ19NSU5PUl9fIDwgMSkpKSkKLS0gIC8qIE1heWJlIGxpYmMgZG9lc24ndCBoYXZlIGxhcmdlIGZpbGUgc3VwcG9ydC4gICovCi0tZ3J1Yl9lcnJfdAotLWdydWJfdXRpbF9mZF9zZWVrIChpbnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUsIGdydWJfdWludDY0X3Qgb2ZmKQotLXsKLS0gIGxvZmZfdCBvZmZzZXQsIHJlc3VsdDsKLS0gIHN0YXRpYyBpbnQgX2xsc2VlayAodWludCBmaWxlZGVzLCB1bG9uZyBoaSwgdWxvbmcgbG8sCi0tCQkgICAgICBsb2ZmX3QgKnJlcywgdWludCB3aCk7Ci0tICBfc3lzY2FsbDUgKGludCwgX2xsc2VlaywgdWludCwgZmlsZWRlcywgdWxvbmcsIGhpLCB1bG9uZywgbG8sCi0tCSAgICAgbG9mZl90ICosIHJlcywgdWludCwgd2gpOwotLQotLSAgb2Zmc2V0ID0gKGxvZmZfdCkgb2ZmOwotLSAgaWYgKF9sbHNlZWsgKGZkLCBvZmZzZXQgPj4gMzIsIG9mZnNldCAmIDB4ZmZmZmZmZmYsICZyZXN1bHQsIFNFRUtfU0VUKSkKLS0gICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9ERVZJQ0UsIE5fKCJjYW5ub3Qgc2VlayBgJXMnOiAlcyIpLAotLQkJICAgICAgIG5hbWUsIHN0cmVycm9yIChlcnJubykpOwotLSAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Ci0tfQotLSNlbHNlCi0gZ3J1Yl9lcnJfdAotIGdydWJfdXRpbF9mZF9zZWVrIChpbnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUsIGdydWJfdWludDY0X3Qgb2ZmKQotIHsKLUBAIC03OTAsNyArNzY2LDYgQEAgZ3J1Yl91dGlsX2ZkX3NlZWsgKGludCBmZCwgY29uc3QgY2hhciAqbgotIAkJICAgICAgIG5hbWUsIHN0cmVycm9yIChlcnJubykpOwotICAgcmV0dXJuIDA7Ci0gfQotLSNlbmRpZgotIAotIHN0YXRpYyB2b2lkCi0gZmx1c2hfaW5pdGlhbF9idWZmZXIgKGNvbnN0IGNoYXIgKm9zX2RldiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtYnRyZnMtYXZvaWQtdXNlZC11bmluaXRpYWxpemVkLWVycm9yLXdpdGgtR0NDNy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1idHJmcy1hdm9pZC11c2VkLXVuaW5pdGlhbGl6ZWQtZXJyb3Itd2l0aC1HQ0M3LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTdhNzc1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1idHJmcy1hdm9pZC11c2VkLXVuaW5pdGlhbGl6ZWQtZXJyb3Itd2l0aC1HQ0M3LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotRnJvbSA2Y2VmN2Y2MDc5NTUwYWYzYmY5MWRiZmY4MjQzOThlYWVmMDhjM2M1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQW5kcmVpIEJvcnplbmtvdiA8YXJ2aWRqYWFyQGdtYWlsLmNvbT4KLURhdGU6IFR1ZSwgNCBBcHIgMjAxNyAxOToyMjozMiArMDMwMAotU3ViamVjdDogW1BBVENIIDEvNF0gYnRyZnM6IGF2b2lkICJ1c2VkIHVuaW5pdGlhbGl6ZWQiIGVycm9yIHdpdGggR0NDNwotCi1zYmxvY2sgd2FzIGxvY2FsIGFuZCBzbyBjb25zaWRlcmVkIG5ldyB2YXJpYWJsZSBvbiBldmVyeSBsb29wCi1pdGVyYXRpb24uCi0KLUNsb3NlczogNTA1OTcKLS0tLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotIGdydWItY29yZS9mcy9idHJmcy5jIHwgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2ZzL2J0cmZzLmMgYi9ncnViLWNvcmUvZnMvYnRyZnMuYwotaW5kZXggOWNmZmE5MS4uNDg0OWMxYyAxMDA2NDQKLS0tLSBhL2dydWItY29yZS9mcy9idHJmcy5jCi0rKysgYi9ncnViLWNvcmUvZnMvYnRyZnMuYwotQEAgLTIyNywxMSArMjI3LDExIEBAIGdydWJfYnRyZnNfcmVhZF9sb2dpY2FsIChzdHJ1Y3QgZ3J1Yl9idHJmc19kYXRhICpkYXRhLAotIHN0YXRpYyBncnViX2Vycl90Ci0gcmVhZF9zYmxvY2sgKGdydWJfZGlza190IGRpc2ssIHN0cnVjdCBncnViX2J0cmZzX3N1cGVyYmxvY2sgKnNiKQotIHsKLSsgIHN0cnVjdCBncnViX2J0cmZzX3N1cGVyYmxvY2sgc2Jsb2NrOwotICAgdW5zaWduZWQgaTsKLSAgIGdydWJfZXJyX3QgZXJyID0gR1JVQl9FUlJfTk9ORTsKLSAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFIChzdXBlcmJsb2NrX3NlY3RvcnMpOyBpKyspCi0gICAgIHsKLS0gICAgICBzdHJ1Y3QgZ3J1Yl9idHJmc19zdXBlcmJsb2NrIHNibG9jazsKLSAgICAgICAvKiBEb24ndCB0cnkgYWRkaXRpb25hbCBzdXBlcmJsb2NrcyBiZXlvbmQgZGV2aWNlIHNpemUuICAqLwotICAgICAgIGlmIChpICYmIChncnViX2xlX3RvX2NwdTY0IChzYmxvY2sudGhpc19kZXZpY2Uuc2l6ZSkKLSAJCT4+IEdSVUJfRElTS19TRUNUT1JfQklUUykgPD0gc3VwZXJibG9ja19zZWN0b3JzW2ldKQotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtYnVpbGQtVXNlLUFDX0hFQURFUl9NQUpPUi10by1maW5kLWRldmljZS1tYWNyb3MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtYnVpbGQtVXNlLUFDX0hFQURFUl9NQUpPUi10by1maW5kLWRldmljZS1tYWNyb3MucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NWI5ZWYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDAxLWJ1aWxkLVVzZS1BQ19IRUFERVJfTUFKT1ItdG8tZmluZC1kZXZpY2UtbWFjcm9zLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotRnJvbSA3YTViMzAxZTNhZGI4ZTA1NDI4ODUxOGEzMjUxMzVhMTg4M2MxYzZjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTWlrZSBHaWxiZXJ0IDxmbG9wcHltQGdlbnRvby5vcmc+Ci1EYXRlOiBUdWUsIDE5IEFwciAyMDE2IDE0OjI3OjIyIC0wNDAwCi1TdWJqZWN0OiBbUEFUQ0hdIGJ1aWxkOiBVc2UgQUNfSEVBREVSX01BSk9SIHRvIGZpbmQgZGV2aWNlIG1hY3JvcwotCi1EZXBlbmRpbmcgb24gdGhlIE9TL2xpYmMsIGRldmljZSBtYWNyb3MgYXJlIGRlZmluZWQgaW4gZGlmZmVyZW50Ci1oZWFkZXJzLiBUaGlzIGNoYW5nZSBlbnN1cmVzIHdlIGluY2x1ZGUgdGhlIHJpZ2h0IG9uZS4KLQotc3lzL3R5cGVzLmggLSBCU0QKLXN5cy9ta2Rldi5oIC0gU3VuCi1zeXMvc3lzbWFjcm9zLmggLSBnbGliYyAoTGludXgpCi0KLWdsaWJjIGN1cnJlbnRseSBwdWxscyBzeXMvc3lzbWFjcm9zLmggaW50byBzeXMvdHlwZXMuaCwgYnV0IHRoaXMgbWF5Ci1jaGFuZ2UgaW4gYSBmdXR1cmUgcmVsZWFzZS4KLQotaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9tbC9saWJjLWFscGhhLzIwMTUtMTEvbXNnMDAyNTMuaHRtbAotLS0tCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0KLSBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICsrLQotIGdydWItY29yZS9vc2RlcC9kZXZtYXBwZXIvZ2V0cm9vdC5jICB8IDYgKysrKysrCi0gZ3J1Yi1jb3JlL29zZGVwL2Rldm1hcHBlci9ob3N0ZGlzay5jIHwgNSArKysrKwotIGdydWItY29yZS9vc2RlcC9saW51eC9nZXRyb290LmMgICAgICB8IDYgKysrKysrCi0gZ3J1Yi1jb3JlL29zZGVwL3VuaXgvZ2V0cm9vdC5jICAgICAgIHwgNCArKystCi0gNSBmaWxlcyBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQotCi1JbmRleDogZ3J1Yi0yLjAwL2NvbmZpZ3VyZS5hYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdydWItMi4wMC5vcmlnL2NvbmZpZ3VyZS5hYwotKysrIGdydWItMi4wMC9jb25maWd1cmUuYWMKLUBAIC0zMjYsNyArMzI2LDggQEAgZmkKLSAKLSAjIENoZWNrIGZvciBmdW5jdGlvbnMgYW5kIGhlYWRlcnMuCi0gQUNfQ0hFQ0tfRlVOQ1MocG9zaXhfbWVtYWxpZ24gbWVtYWxpZ24gYXNwcmludGYgdmFzcHJpbnRmIGdldGV4dG1udGVudCkKLS1BQ19DSEVDS19IRUFERVJTKHN5cy9wYXJhbS5oIHN5cy9tb3VudC5oIHN5cy9tbnR0YWIuaCBzeXMvbWtkZXYuaCBsaW1pdHMuaCkKLStBQ19DSEVDS19IRUFERVJTKHN5cy9wYXJhbS5oIHN5cy9tb3VudC5oIHN5cy9tbnR0YWIuaCBsaW1pdHMuaCkKLStBQ19IRUFERVJfTUFKT1IKLSAKLSBBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3Qgc3RhdGZzLmZfZnN0eXBlbmFtZV0sLCxbJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci1JbmRleDogZ3J1Yi0yLjAwL2dydWItY29yZS9rZXJuL2VtdS9ob3N0ZGlzay5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ3J1Yi0yLjAwLm9yaWcvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3RkaXNrLmMKLSsrKyBncnViLTIuMDAvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3RkaXNrLmMKLUBAIC00MSw2ICs0MSwxMiBAQAotICNpbmNsdWRlIDxlcnJuby5oPgotICNpbmNsdWRlIDxsaW1pdHMuaD4KLSAKLSsjaWYgZGVmaW5lZChNQUpPUl9JTl9NS0RFVikKLSsjaW5jbHVkZSA8c3lzL21rZGV2Lmg+Ci0rI2VsaWYgZGVmaW5lZChNQUpPUl9JTl9TWVNNQUNST1MpCi0rI2luY2x1ZGUgPHN5cy9zeXNtYWNyb3MuaD4KLSsjZW5kaWYKLSsKLSAjaWZkZWYgX19saW51eF9fCi0gIyBpbmNsdWRlIDxzeXMvaW9jdGwuaD4gICAgICAgICAvKiBpb2N0bCAqLwotICMgaW5jbHVkZSA8c3lzL21vdW50Lmg+Ci1JbmRleDogZ3J1Yi0yLjAwL3V0aWwvZ2V0cm9vdC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ3J1Yi0yLjAwLm9yaWcvdXRpbC9nZXRyb290LmMKLSsrKyBncnViLTIuMDAvdXRpbC9nZXRyb290LmMKLUBAIC0zNSw2ICszNSwxMyBAQAotICNpZmRlZiBIQVZFX0xJTUlUU19ICi0gI2luY2x1ZGUgPGxpbWl0cy5oPgotICNlbmRpZgotKwotKyNpZiBkZWZpbmVkKE1BSk9SX0lOX01LREVWKQotKyNpbmNsdWRlIDxzeXMvbWtkZXYuaD4KLSsjZWxpZiBkZWZpbmVkKE1BSk9SX0lOX1NZU01BQ1JPUykKLSsjaW5jbHVkZSA8c3lzL3N5c21hY3Jvcy5oPgotKyNlbmRpZgotKwotICNpbmNsdWRlIDxncnViL3V0aWwvbWlzYy5oPgotICNpbmNsdWRlIDxncnViL3V0aWwvbHZtLmg+Ci0gI2luY2x1ZGUgPGdydWIvY3J5cHRvZGlzay5oPgotSW5kZXg6IGdydWItMi4wMC91dGlsL3JhaWQuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdydWItMi4wMC5vcmlnL3V0aWwvcmFpZC5jCi0rKysgZ3J1Yi0yLjAwL3V0aWwvcmFpZC5jCi1AQCAtMjksNiArMjksMTIgQEAKLSAjaW5jbHVkZSA8ZXJybm8uaD4KLSAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0gCi0rI2lmIGRlZmluZWQoTUFKT1JfSU5fTUtERVYpCi0rI2luY2x1ZGUgPHN5cy9ta2Rldi5oPgotKyNlbGlmIGRlZmluZWQoTUFKT1JfSU5fU1lTTUFDUk9TKQotKyNpbmNsdWRlIDxzeXMvc3lzbWFjcm9zLmg+Ci0rI2VuZGlmCi0rCi0gI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0gI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0gI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWRfcC5oPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDAxLWdydWItY29yZS1nZXR0ZXh0LWdldHRleHQuYy1tYWluX2NvbnRleHQtc2Vjb25kYXJ5X2MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtZ3J1Yi1jb3JlLWdldHRleHQtZ2V0dGV4dC5jLW1haW5fY29udGV4dC1zZWNvbmRhcnlfYy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVjMjM2My4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtZ3J1Yi1jb3JlLWdldHRleHQtZ2V0dGV4dC5jLW1haW5fY29udGV4dC1zZWNvbmRhcnlfYy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLUZyb20gZjMwYzY5MmMxZjllZjBlOTNiZWUyYjQwOGEyNGJhYTAxN2YxY2E5ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFZsYWRpbWlyIFNlcmJpbmVua28gPHBoY29kZXJAZ21haWwuY29tPgotRGF0ZTogVGh1LCA3IE5vdiAyMDEzIDAxOjAxOjQ3ICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIAkqIGdydWItY29yZS9nZXR0ZXh0L2dldHRleHQuYyAobWFpbl9jb250ZXh0KSwKLSAoc2Vjb25kYXJ5X2NvbnRleHQpOiAJRGVmaW5lIGFmdGVyIGRlZmluaW5nIHR5cGUgYW5kIG5vdCBiZWZvcmUuCi0KLS0tLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotIENoYW5nZUxvZyAgICAgICAgICAgICAgICAgICB8IDUgKysrKysKLSBncnViLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LmMgfCA0ICsrLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2dydWItY29yZS9nZXR0ZXh0L2dldHRleHQuYyBiL2dydWItY29yZS9nZXR0ZXh0L2dldHRleHQuYwotaW5kZXggZGY3MzU3MC4uNDg4MGNlZiAxMDA2NDQKLS0tLSBhL2dydWItY29yZS9nZXR0ZXh0L2dldHRleHQuYwotKysrIGIvZ3J1Yi1jb3JlL2dldHRleHQvZ2V0dGV4dC5jCi1AQCAtMzQsOCArMzQsNiBAQCBHUlVCX01PRF9MSUNFTlNFICgiR1BMdjMrIik7Ci0gICAgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9jb25mL21hbnVhbC9nZXR0ZXh0L01PLUZpbGVzLmh0bWwgLgotICovCi0gCi0tc3RhdGljIHN0cnVjdCBncnViX2dldHRleHRfY29udGV4dCBtYWluX2NvbnRleHQsIHNlY29uZGFyeV9jb250ZXh0OwotLQotIHN0YXRpYyBjb25zdCBjaGFyICooKmdydWJfZ2V0dGV4dF9vcmlnaW5hbCkgKGNvbnN0IGNoYXIgKnMpOwotIAotIHN0cnVjdCBncnViX2dldHRleHRfbXNnCi1AQCAtNjksNiArNjcsOCBAQCBzdHJ1Y3QgZ3J1Yl9nZXR0ZXh0X2NvbnRleHQKLSAgIHN0cnVjdCBncnViX2dldHRleHRfbXNnICpncnViX2dldHRleHRfbXNnX2xpc3Q7Ci0gfTsKLSAKLStzdGF0aWMgc3RydWN0IGdydWJfZ2V0dGV4dF9jb250ZXh0IG1haW5fY29udGV4dCwgc2Vjb25kYXJ5X2NvbnRleHQ7Ci0rCi0gI2RlZmluZSBNT19NQUdJQ19OVU1CRVIgCQkweDk1MDQxMmRlCi0gCi0gc3RhdGljIGdydWJfZXJyX3QKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDAxLWdydWItY29yZS1rZXJuLWVmaS1tbS5jLWdydWJfZWZpX2ZpbmlzaF9ib290X3NlcnZpY2UucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtZ3J1Yi1jb3JlLWtlcm4tZWZpLW1tLmMtZ3J1Yl9lZmlfZmluaXNoX2Jvb3Rfc2VydmljZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJmMDhlMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtZ3J1Yi1jb3JlLWtlcm4tZWZpLW1tLmMtZ3J1Yl9lZmlfZmluaXNoX2Jvb3Rfc2VydmljZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLUZyb20gYjI1ODc2MWQxMTk0NmIyOGE4NDdkZmYwNzY4YzNmMjcxZTEzZDYwYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEF3YWlzIEJlbGFsIDxhd2Fpc19iZWxhbEBtZW50b3IuY29tPgotRGF0ZTogVGh1LCA4IERlYyAyMDE2IDE4OjIxOjEyICswNTAwCi1TdWJqZWN0OiBbUEFUQ0ggMS8yXSAqIGdydWItY29yZS9rZXJuL2VmaS9tbS5jCi0gKGdydWJfZWZpX2ZpbmlzaF9ib290X3NlcnZpY2VzKTogIFRyeSB0ZXJtaW5hdGluZyBFRkkgc2VydmljZXMgc2V2ZXJhbCB0aW1lcwotIGR1ZSB0byBxdWlya3MgaW4gc29tZSAgaW1wbGVtZW50YXRpb25zLgotCi1VcHN0cmVhbS1zdGF0dXM6IEJhY2twb3J0IFsgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvZ3J1Yi5naXQvcGF0Y2gvP2lkPWU3NWZkZWU0MjBhN2FkOTVlOWE0NjVjOTY5OWFkYzJlMmU5NzA0NDAgXQotCi1TaWduZWQtb2ZmLWJ5OiBBd2FpcyBCZWxhbCA8YXdhaXNfYmVsYWxAbWVudG9yLmNvbT4KLS0tLQotIGdydWItY29yZS9rZXJuL2VmaS9tbS5jIHwgNDYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspLCAxNiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2dydWItY29yZS9rZXJuL2VmaS9tbS5jIGIvZ3J1Yi1jb3JlL2tlcm4vZWZpL21tLmMKLWluZGV4IDQ2MWRlYjAuLmIwMGUwYmMgMTAwNjQ0Ci0tLS0gYS9ncnViLWNvcmUva2Vybi9lZmkvbW0uYwotKysrIGIvZ3J1Yi1jb3JlL2tlcm4vZWZpL21tLmMKLUBAIC0xNjcsMjcgKzE2Nyw0MSBAQCBncnViX2VmaV9maW5pc2hfYm9vdF9zZXJ2aWNlcyAoZ3J1Yl9lZmlfdWludG5fdCAqb3V0YnVmX3NpemUsIHZvaWQgKm91dGJ1ZiwKLSAJCQkgICBhcHBsZSwgc2l6ZW9mIChhcHBsZSkpID09IDApOwotICNlbmRpZgotIAotLSAgaWYgKGdydWJfZWZpX2dldF9tZW1vcnlfbWFwICgmZmluaXNoX21tYXBfc2l6ZSwgZmluaXNoX21tYXBfYnVmLCAmZmluaXNoX2tleSwKLS0JCQkgICAgICAgJmZpbmlzaF9kZXNjX3NpemUsICZmaW5pc2hfZGVzY192ZXJzaW9uKSA8IDApCi0tICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9JTywgImNvdWxkbid0IHJldHJpZXZlIG1lbW9yeSBtYXAiKTsKLSsgIHdoaWxlICgxKQotKyAgICB7Ci0rICAgICAgaWYgKGdydWJfZWZpX2dldF9tZW1vcnlfbWFwICgmZmluaXNoX21tYXBfc2l6ZSwgZmluaXNoX21tYXBfYnVmLCAmZmluaXNoX2tleSwKLSsJCQkJICAgJmZpbmlzaF9kZXNjX3NpemUsICZmaW5pc2hfZGVzY192ZXJzaW9uKSA8IDApCi0rCXJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9JTywgImNvdWxkbid0IHJldHJpZXZlIG1lbW9yeSBtYXAiKTsKLSAKLS0gIGlmIChvdXRidWYgJiYgKm91dGJ1Zl9zaXplIDwgZmluaXNoX21tYXBfc2l6ZSkKLS0gICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0lPLCAibWVtb3J5IG1hcCBidWZmZXIgaXMgdG9vIHNtYWxsIik7Ci0rICAgICAgaWYgKG91dGJ1ZiAmJiAqb3V0YnVmX3NpemUgPCBmaW5pc2hfbW1hcF9zaXplKQotKwlyZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfSU8sICJtZW1vcnkgbWFwIGJ1ZmZlciBpcyB0b28gc21hbGwiKTsKLSAKLS0gIGZpbmlzaF9tbWFwX2J1ZiA9IGdydWJfbWFsbG9jIChmaW5pc2hfbW1hcF9zaXplKTsKLS0gIGlmICghZmluaXNoX21tYXBfYnVmKQotLSAgICByZXR1cm4gZ3J1Yl9lcnJubzsKLSsgICAgICBmaW5pc2hfbW1hcF9idWYgPSBncnViX21hbGxvYyAoZmluaXNoX21tYXBfc2l6ZSk7Ci0rICAgICAgaWYgKCFmaW5pc2hfbW1hcF9idWYpCi0rCXJldHVybiBncnViX2Vycm5vOwotIAotLSAgaWYgKGdydWJfZWZpX2dldF9tZW1vcnlfbWFwICgmZmluaXNoX21tYXBfc2l6ZSwgZmluaXNoX21tYXBfYnVmLCAmZmluaXNoX2tleSwKLS0JCQkgICAgICAgJmZpbmlzaF9kZXNjX3NpemUsICZmaW5pc2hfZGVzY192ZXJzaW9uKSA8PSAwKQotLSAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfSU8sICJjb3VsZG4ndCByZXRyaWV2ZSBtZW1vcnkgbWFwIik7Ci0rICAgICAgaWYgKGdydWJfZWZpX2dldF9tZW1vcnlfbWFwICgmZmluaXNoX21tYXBfc2l6ZSwgZmluaXNoX21tYXBfYnVmLCAmZmluaXNoX2tleSwKLSsJCQkJICAgJmZpbmlzaF9kZXNjX3NpemUsICZmaW5pc2hfZGVzY192ZXJzaW9uKSA8PSAwKQotKwl7Ci0rCSAgZ3J1Yl9mcmVlIChmaW5pc2hfbW1hcF9idWYpOwotKwkgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9JTywgImNvdWxkbid0IHJldHJpZXZlIG1lbW9yeSBtYXAiKTsKLSsJfQotIAotLSAgYiA9IGdydWJfZWZpX3N5c3RlbV90YWJsZS0+Ym9vdF9zZXJ2aWNlczsKLS0gIHN0YXR1cyA9IGVmaV9jYWxsXzIgKGItPmV4aXRfYm9vdF9zZXJ2aWNlcywgZ3J1Yl9lZmlfaW1hZ2VfaGFuZGxlLAotLQkJICAgICAgIGZpbmlzaF9rZXkpOwotLSAgaWYgKHN0YXR1cyAhPSBHUlVCX0VGSV9TVUNDRVNTKQotLSAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfSU8sICJjb3VsZG4ndCB0ZXJtaW5hdGUgRUZJIHNlcnZpY2VzIik7Ci0rICAgICAgYiA9IGdydWJfZWZpX3N5c3RlbV90YWJsZS0+Ym9vdF9zZXJ2aWNlczsKLSsgICAgICBzdGF0dXMgPSBlZmlfY2FsbF8yIChiLT5leGl0X2Jvb3Rfc2VydmljZXMsIGdydWJfZWZpX2ltYWdlX2hhbmRsZSwKLSsJCQkgICBmaW5pc2hfa2V5KTsKLSsgICAgICBpZiAoc3RhdHVzID09IEdSVUJfRUZJX1NVQ0NFU1MpCi0rCWJyZWFrOwotIAotKyAgICAgIGlmIChzdGF0dXMgIT0gR1JVQl9FRklfSU5WQUxJRF9QQVJBTUVURVIpCi0rCXsKLSsJICBncnViX2ZyZWUgKGZpbmlzaF9tbWFwX2J1Zik7Ci0rCSAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0lPLCAiY291bGRuJ3QgdGVybWluYXRlIEVGSSBzZXJ2aWNlcyIpOwotKwl9Ci0rCi0rICAgICAgZ3J1Yl9mcmVlIChmaW5pc2hfbW1hcF9idWYpOwotKyAgICAgIGdydWJfcHJpbnRmICgiVHJ5aW5nIHRvIHRlcm1pbmF0ZSBFRkkgc2VydmljZXMgYWdhaW5cbiIpOwotKyAgICB9Ci0gICBncnViX2VmaV9pc19maW5pc2hlZCA9IDE7Ci0gICBpZiAob3V0YnVmX3NpemUpCi0gICAgICpvdXRidWZfc2l6ZSA9IGZpbmlzaF9tbWFwX3NpemU7Ci0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi1naXQvMDAwMS1ncnViLmQtMTBfbGludXguaW4tYWRkLW9lLXMta2VybmVsLW5hbWUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtZ3J1Yi5kLTEwX2xpbnV4LmluLWFkZC1vZS1zLWtlcm5lbC1uYW1lLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItZ2l0LzAwMDEtZ3J1Yi5kLTEwX2xpbnV4LmluLWFkZC1vZS1zLWtlcm5lbC1uYW1lLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtZ3J1Yi5kLTEwX2xpbnV4LmluLWFkZC1vZS1zLWtlcm5lbC1uYW1lLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtcGFyc2VfZGhjcF92ZW5kb3ItQWRkLW1pc3NpbmctY29uc3QtcXVhbGlmaWVycy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1wYXJzZV9kaGNwX3ZlbmRvci1BZGQtbWlzc2luZy1jb25zdC1xdWFsaWZpZXJzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTVlM2ViLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1wYXJzZV9kaGNwX3ZlbmRvci1BZGQtbWlzc2luZy1jb25zdC1xdWFsaWZpZXJzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi1PcmlnaW5hbCBjb21taXQ6IGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L2dydWIuZ2l0L2NvbW1pdC9ncnViLWNvcmUvbmV0L2Jvb3RwLmM/aWQ9ZjA2YzIxNzJjMGIzMjA1MmYyMmUzNzUyMzQ0NWNmOGU3YWZmYWVhMwotCi1Gcm9tIDE0OWQyYTE0ZjQ3MjM3NzhjZWQyM2Y0Mzk0ODcyMDFjY2JmMWEyYzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogVGh1LCAyMyBBcHIgMjAxNSAwNzowMzozNCArMDAwMAotU3ViamVjdDogW1BBVENIXSBwYXJzZV9kaGNwX3ZlbmRvcjogQWRkIG1pc3NpbmcgY29uc3QgcXVhbGlmaWVycy4KLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotIGdydWItY29yZS9uZXQvYm9vdHAuYyB8IDQgKystLQotIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9ncnViLWNvcmUvbmV0L2Jvb3RwLmMgYi9ncnViLWNvcmUvbmV0L2Jvb3RwLmMKLWluZGV4IGJjMDdkNTMuLjQ0MTMxZWQgMTAwNjQ0Ci0tLS0gYS9ncnViLWNvcmUvbmV0L2Jvb3RwLmMKLSsrKyBiL2dydWItY29yZS9uZXQvYm9vdHAuYwotQEAgLTUyLDkgKzUyLDkgQEAgc2V0X2Vudl9saW1uX3JvIChjb25zdCBjaGFyICppbnRlcm5hbWUsIGNvbnN0IGNoYXIgKnN1ZmZpeCwKLSB9Ci0gCi0gc3RhdGljIHZvaWQKLS1wYXJzZV9kaGNwX3ZlbmRvciAoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqdmVuZCwgaW50IGxpbWl0LCBpbnQgKm1hc2spCi0rcGFyc2VfZGhjcF92ZW5kb3IgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZlbmQsIGludCBsaW1pdCwgaW50ICptYXNrKQotIHsKLS0gIGdydWJfdWludDhfdCAqcHRyLCAqcHRyMDsKLSsgIGNvbnN0IGdydWJfdWludDhfdCAqcHRyLCAqcHRyMDsKLSAKLSAgIHB0ciA9IHB0cjAgPSB2ZW5kOwotIAotLS0gCi0yLjEuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDItZ3J1Yi1jb3JlLWtlcm4tZWZpLW1tLmMtZ3J1Yl9lZmlfZ2V0X21lbW9yeV9tYXAtTmV2ZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMi1ncnViLWNvcmUta2Vybi1lZmktbW0uYy1ncnViX2VmaV9nZXRfbWVtb3J5X21hcC1OZXZlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTczNWZmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMi1ncnViLWNvcmUta2Vybi1lZmktbW0uYy1ncnViX2VmaV9nZXRfbWVtb3J5X21hcC1OZXZlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotRnJvbSA2MzBkZTQ1ZjNkNWY5YTJkZGE3ZmFkOTlhY2QyMTQ0OWI4YzQxMTFkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQXdhaXMgQmVsYWwgPGF3YWlzX2JlbGFsQG1lbnRvci5jb20+Ci1EYXRlOiBUaHUsIDggRGVjIDIwMTYgMTg6Mjc6MDEgKzA1MDAKLVN1YmplY3Q6IFtQQVRDSCAyLzJdICogZ3J1Yi1jb3JlL2tlcm4vZWZpL21tLmMgKGdydWJfZWZpX2dldF9tZW1vcnlfbWFwKToKLSBOZXZlciAgcmV0dXJuIGEgZGVzY3JpcHRvcl9zaXplPT0wIHRvIGF2b2lkIHBvdGVudGlhbCBkaXZpc2lvbnMgYnkgemVyby4KLQotVXBzdHJlYW0tc3RhdHVzOiBCYWNrcG9ydCBbIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L2dydWIuZ2l0L2NvbW1pdC8/aWQ9NjlhZWU0M2ZhNjQ2MDFjYWJmNmVmYTkyNzljMTBkNjliNDY2NjYyZSBdCi0KLVNpZ25lZC1vZmYtYnk6IEF3YWlzIEJlbGFsIDxhd2Fpc19iZWxhbEBtZW50b3IuY29tPgotLS0tCi0gZ3J1Yi1jb3JlL2tlcm4vZWZpL21tLmMgfCA1ICsrKysrCi0gMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2tlcm4vZWZpL21tLmMgYi9ncnViLWNvcmUva2Vybi9lZmkvbW0uYwotaW5kZXggYjAwZTBiYy4uOWYxZDE5NCAxMDA2NDQKLS0tLSBhL2dydWItY29yZS9rZXJuL2VmaS9tbS5jCi0rKysgYi9ncnViLWNvcmUva2Vybi9lZmkvbW0uYwotQEAgLTIzNSw2ICsyMzUsNyBAQCBncnViX2VmaV9nZXRfbWVtb3J5X21hcCAoZ3J1Yl9lZmlfdWludG5fdCAqbWVtb3J5X21hcF9zaXplLAotICAgZ3J1Yl9lZmlfYm9vdF9zZXJ2aWNlc190ICpiOwotICAgZ3J1Yl9lZmlfdWludG5fdCBrZXk7Ci0gICBncnViX2VmaV91aW50MzJfdCB2ZXJzaW9uOwotKyAgZ3J1Yl9lZmlfdWludG5fdCBzaXplOwotIAotICAgaWYgKGdydWJfZWZpX2lzX2ZpbmlzaGVkKQotICAgICB7Ci1AQCAtMjY0LDEwICsyNjUsMTQgQEAgZ3J1Yl9lZmlfZ2V0X21lbW9yeV9tYXAgKGdydWJfZWZpX3VpbnRuX3QgKm1lbW9yeV9tYXBfc2l6ZSwKLSAgICAgbWFwX2tleSA9ICZrZXk7Ci0gICBpZiAoISBkZXNjcmlwdG9yX3ZlcnNpb24pCi0gICAgIGRlc2NyaXB0b3JfdmVyc2lvbiA9ICZ2ZXJzaW9uOwotKyAgaWYgKCEgZGVzY3JpcHRvcl9zaXplKQotKyAgICBkZXNjcmlwdG9yX3NpemUgPSAmc2l6ZTsKLSAKLSAgIGIgPSBncnViX2VmaV9zeXN0ZW1fdGFibGUtPmJvb3Rfc2VydmljZXM7Ci0gICBzdGF0dXMgPSBlZmlfY2FsbF81IChiLT5nZXRfbWVtb3J5X21hcCwgbWVtb3J5X21hcF9zaXplLCBtZW1vcnlfbWFwLCBtYXBfa2V5LAotIAkJCSAgICAgIGRlc2NyaXB0b3Jfc2l6ZSwgZGVzY3JpcHRvcl92ZXJzaW9uKTsKLSsgIGlmICgqZGVzY3JpcHRvcl9zaXplID09IDApCi0rICAgICpkZXNjcmlwdG9yX3NpemUgPSBzaXplb2YgKGdydWJfZWZpX21lbW9yeV9kZXNjcmlwdG9yX3QpOwotICAgaWYgKHN0YXR1cyA9PSBHUlVCX0VGSV9TVUNDRVNTKQotICAgICByZXR1cm4gMTsKLSAgIGVsc2UgaWYgKHN0YXR1cyA9PSBHUlVCX0VGSV9CVUZGRVJfVE9PX1NNQUxMKQotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDItaTM4Ni14ODZfNjQtcHBjLWZpeC1zd2l0Y2gtZmFsbHRocm91Z2gtY2FzZXMtd2l0aC1HQy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMi1pMzg2LXg4Nl82NC1wcGMtZml4LXN3aXRjaC1mYWxsdGhyb3VnaC1jYXNlcy13aXRoLUdDLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGYwNDhjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMi1pMzg2LXg4Nl82NC1wcGMtZml4LXN3aXRjaC1mYWxsdGhyb3VnaC1jYXNlcy13aXRoLUdDLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjQ4ICswLDAgQEAKLUZyb20gNGJkNGE4ODcyNTYwNDQ3MWZkYmQ4NjMxNmM5MTk2N2E3ZjRkYmE1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEFuZHJlaSBCb3J6ZW5rb3YgPGFydmlkamFhckBnbWFpbC5jb20+Ci1EYXRlOiBUdWUsIDQgQXByIDIwMTcgMTk6MjM6NTUgKzAzMDAKLVN1YmplY3Q6IFtQQVRDSCAyLzRdIGkzODYsIHg4Nl82NCwgcHBjOiBmaXggc3dpdGNoIGZhbGx0aHJvdWdoIGNhc2VzIHdpdGggR0NDNwotCi1JbiB1dGlsL2dldHJvb3QgYW5kIGVmaWRpc2sgc2xpZ2h0bHkgbW9kaWZ5IGV4aXRzaW5nIGNvbW1lbnQgdG8gbW9zdGx5Ci1yZXRhaW4gaXQgYnV0IHN0aWxsIG1ha2UgR0NDNyBjb21wbGlhbnQgd2l0aCByZXNwZWN0IHRvIGZhbGwgdGhyb3VnaAotYW5ub3RhdGlvbi4KLQotSW4gZ3J1Yi1jb3JlL2xpYi94emVtYmVkL3h6X2RlY19sem1hMi5jIGl0IGFkZHMgc2FtZSBjb21tZW50cyBhcwotdXBzdHJlYW0uCi0KLUluIGdydWItY29yZS90ZXN0cy9zZXRqbXBfdGV0cy5jIGRlY2xhcmUgZnVuY3Rpb25zIGFzICJub3JldHVybiIgdG8KLXN1cHByZXNzIEdDQzcgd2FybmluZy4KLQotSW4gZ3J1Yi1jb3JlL2dudWxpYi9yZWdleGVjLmMgdXNlIG5ldyBfX2F0dHJpYnV0ZV9fLCBiZWNhdXNlIGV4aXN0aW5nCi1hbm5vdGF0aW9uIGlzIG5vdCByZWNvZ25pemVkIGJ5IEdDQzcgcGFyc2VyICh3aGljaCByZXF1aXJlcyB0aGF0IGNvbW1lbnQKLWltbWVkaWF0ZWx5IHByZWNlZGVzIGNhc2Ugc3RhdGVtZW50KS4KLQotT3RoZXJ3aXNlIGFkZCBGQUxMVEhST1VHSCBjb21tZW50LgotCi1DbG9zZXM6IDUwNTk4Ci0tLS0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLSBncnViLWNvcmUvY29tbWFuZHMvaGRwYXJtLmMgICAgICAgICAgIHwgMSArCi0gZ3J1Yi1jb3JlL2NvbW1hbmRzL25hdGl2ZWRpc2suYyAgICAgICB8IDEgKwotIGdydWItY29yZS9kaXNrL2NyeXB0b2Rpc2suYyAgICAgICAgICAgfCAxICsKLSBncnViLWNvcmUvZGlzay9lZmkvZWZpZGlzay5jICAgICAgICAgIHwgMiArLQotIGdydWItY29yZS9lZmllbXUvbW0uYyAgICAgICAgICAgICAgICAgfCAxICsKLSBncnViLWNvcmUvZ2RiL2NzdHViLmMgICAgICAgICAgICAgICAgIHwgMSArCi0gZ3J1Yi1jb3JlL2dudWxpYi9yZWdleGVjLmMgICAgICAgICAgICB8IDMgKysrCi0gZ3J1Yi1jb3JlL2xpYi94emVtYmVkL3h6X2RlY19sem1hMi5jICB8IDQgKysrKwotIGdydWItY29yZS9saWIveHplbWJlZC94el9kZWNfc3RyZWFtLmMgfCA2ICsrKysrKwotIGdydWItY29yZS9sb2FkZXIvaTM4Ni9saW51eC5jICAgICAgICAgfCAzICsrKwotIGdydWItY29yZS90ZXN0cy9zZXRqbXBfdGVzdC5jICAgICAgICAgfCA1ICsrKystCi0gZ3J1Yi1jb3JlL3ZpZGVvL2llZWUxMjc1LmMgICAgICAgICAgICB8IDEgKwotIGdydWItY29yZS92aWRlby9yZWFkZXJzL2pwZWcuYyAgICAgICAgfCAxICsKLSB1dGlsL2dldHJvb3QuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgMiArLQotIHV0aWwvZ3J1Yi1pbnN0YWxsLmMgICAgICAgICAgICAgICAgICAgfCAxICsKLSB1dGlsL2dydWItbWtpbWFnZXh4LmMgICAgICAgICAgICAgICAgIHwgMSArCi0gdXRpbC9ncnViLW1vdW50LmMgICAgICAgICAgICAgICAgICAgICB8IDEgKwotIDE3IGZpbGVzIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCi0KLUluZGV4OiBncnViLTIuMDAvZ3J1Yi1jb3JlL2NvbW1hbmRzL2hkcGFybS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ3J1Yi0yLjAwLm9yaWcvZ3J1Yi1jb3JlL2NvbW1hbmRzL2hkcGFybS5jCi0rKysgZ3J1Yi0yLjAwL2dydWItY29yZS9jb21tYW5kcy9oZHBhcm0uYwotQEAgLTMyOCw2ICszMjgsNyBAQCBncnViX2NtZF9oZHBhcm0gKGdydWJfZXh0Y21kX2NvbnRleHRfdCBjCi0gCSAgYXRhID0gKChzdHJ1Y3QgZ3J1Yl9zY3NpICopIGRpc2stPmRhdGEpLT5kYXRhOwotIAkgIGJyZWFrOwotIAl9Ci0rICAgICAgLyogRkFMTFRIUk9VR0ggKi8KLSAgICAgZGVmYXVsdDoKLSAgICAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfSU8sICJub3QgYW4gQVRBIGRldmljZSIpOwotICAgICB9Ci1JbmRleDogZ3J1Yi0yLjAwL2dydWItY29yZS9kaXNrL2NyeXB0b2Rpc2suYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdydWItMi4wMC5vcmlnL2dydWItY29yZS9kaXNrL2NyeXB0b2Rpc2suYwotKysrIGdydWItMi4wMC9ncnViLWNvcmUvZGlzay9jcnlwdG9kaXNrLmMKLUBAIC0yNjgsNiArMjY4LDcgQEAgZ3J1Yl9jcnlwdG9kaXNrX2VuZGVjcnlwdCAoc3RydWN0IGdydWJfYwotIAkgIGJyZWFrOwotIAljYXNlIEdSVUJfQ1JZUFRPRElTS19NT0RFX0lWX1BMQUlONjQ6Ci0gCSAgaXZbMV0gPSBncnViX2NwdV90b19sZTMyIChzZWN0b3IgPj4gMzIpOwotKwkgIC8qIEZBTExUSFJPVUdIICovCi0gCWNhc2UgR1JVQl9DUllQVE9ESVNLX01PREVfSVZfUExBSU46Ci0gCSAgaXZbMF0gPSBncnViX2NwdV90b19sZTMyIChzZWN0b3IgJiAweEZGRkZGRkZGKTsKLSAJICBicmVhazsKLUluZGV4OiBncnViLTIuMDAvZ3J1Yi1jb3JlL2Rpc2svZWZpL2VmaWRpc2suYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdydWItMi4wMC5vcmlnL2dydWItY29yZS9kaXNrL2VmaS9lZmlkaXNrLmMKLSsrKyBncnViLTIuMDAvZ3J1Yi1jb3JlL2Rpc2svZWZpL2VmaWRpc2suYwotQEAgLTI2Miw3ICsyNjIsNyBAQCBuYW1lX2RldmljZXMgKHN0cnVjdCBncnViX2VmaWRpc2tfZGF0YSAqCi0gCSAgICB7Ci0gCSAgICBjYXNlIEdSVUJfRUZJX0hBUkRfRFJJVkVfREVWSUNFX1BBVEhfU1VCVFlQRToKLSAJICAgICAgaXNfaGFyZF9kcml2ZSA9IDE7Ci0tCSAgICAgIC8qIEZhbGwgdGhyb3VnaCBieSBpbnRlbnRpb24uICAqLwotKwkgICAgICAvKiBJbnRlbnRpb25hbGx5IGZhbGwgdGhyb3VnaC4gICovCi0gCSAgICBjYXNlIEdSVUJfRUZJX0NEUk9NX0RFVklDRV9QQVRIX1NVQlRZUEU6Ci0gCSAgICAgIHsKLSAJCXN0cnVjdCBncnViX2VmaWRpc2tfZGF0YSAqcGFyZW50LCAqcGFyZW50MjsKLUluZGV4OiBncnViLTIuMDAvZ3J1Yi1jb3JlL2VmaWVtdS9tbS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ3J1Yi0yLjAwLm9yaWcvZ3J1Yi1jb3JlL2VmaWVtdS9tbS5jCi0rKysgZ3J1Yi0yLjAwL2dydWItY29yZS9lZmllbXUvbW0uYwotQEAgLTQxMCw2ICs0MTAsNyBAQCBncnViX2VmaWVtdV9tbWFwX2ZpbGwgKHZvaWQpCi0gCWRlZmF1bHQ6Ci0gCSAgZ3J1Yl9kcHJpbnRmICgiZWZpZW11IiwKLSAJCQkiVW5rbm93biBtZW1vcnkgdHlwZSAlZC4gQXNzdW1pbmcgdW51c2FibGVcbiIsIHR5cGUpOwotKwkvKiBGQUxMVEhST1VHSCAqLwotIAljYXNlIEdSVUJfTUVNT1JZX1JFU0VSVkVEOgotIAkgIHJldHVybiBncnViX2VmaWVtdV9hZGRfdG9fbW1hcCAoYWRkciwgc2l6ZSwKLSAJCQkJCSAgR1JVQl9FRklfVU5VU0FCTEVfTUVNT1JZKTsKLUluZGV4OiBncnViLTIuMDAvZ3J1Yi1jb3JlL2dkYi9jc3R1Yi5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ3J1Yi0yLjAwLm9yaWcvZ3J1Yi1jb3JlL2dkYi9jc3R1Yi5jCi0rKysgZ3J1Yi0yLjAwL2dydWItY29yZS9nZGIvY3N0dWIuYwotQEAgLTMzNiw2ICszMzYsNyBAQCBncnViX2dkYl90cmFwIChpbnQgdHJhcF9ubykKLSAJLyogc0FBLi5BQTogU3RlcCBvbmUgaW5zdHJ1Y3Rpb24gZnJvbSBBQS4uQUEob3B0aW9uYWwpLiAgKi8KLSAJY2FzZSAncyc6Ci0gCSAgc3RlcHBpbmcgPSAxOwotKwkgIC8qIEZBTExUSFJPVUdIICovCi0gCi0gCS8qIGNBQS4uQUE6IENvbnRpbnVlIGF0IGFkZHJlc3MgQUEuLkFBKG9wdGlvbmFsKS4gICovCi0gCWNhc2UgJ2MnOgotSW5kZXg6IGdydWItMi4wMC9ncnViLWNvcmUvZ251bGliL3JlZ2V4ZWMuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdydWItMi4wMC5vcmlnL2dydWItY29yZS9nbnVsaWIvcmVnZXhlYy5jCi0rKysgZ3J1Yi0yLjAwL2dydWItY29yZS9nbnVsaWIvcmVnZXhlYy5jCi1AQCAtNDEwNCw2ICs0MTA0LDkgQEAgY2hlY2tfbm9kZV9hY2NlcHQgKGNvbnN0IHJlX21hdGNoX2NvbnRleAotICAgICBjYXNlIE9QX1VURjhfUEVSSU9EOgotICAgICAgIGlmIChjaCA+PSBBU0NJSV9DSEFSUykKLSAgICAgICAgIHJldHVybiBmYWxzZTsKLSsjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiBfX0dOVUNfXyA+PSA3Ci0rICAgICAgX19hdHRyaWJ1dGVfXyAoKGZhbGx0aHJvdWdoKSk7Ci0rI2VuZGlmCi0gICAgICAgLyogRkFMTFRIUk9VR0ggKi8KLSAjZW5kaWYKLSAgICAgY2FzZSBPUF9QRVJJT0Q6Ci1JbmRleDogZ3J1Yi0yLjAwL2dydWItY29yZS9saWIveHplbWJlZC94el9kZWNfbHptYTIuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdydWItMi4wMC5vcmlnL2dydWItY29yZS9saWIveHplbWJlZC94el9kZWNfbHptYTIuYwotKysrIGdydWItMi4wMC9ncnViLWNvcmUvbGliL3h6ZW1iZWQveHpfZGVjX2x6bWEyLmMKLUBAIC0xMDQyLDYgKzEwNDIsOCBAQCBlbnVtIHh6X3JldCB4el9kZWNfbHptYTJfcnVuKAotIAotIAkJCXMtPmx6bWEyLnNlcXVlbmNlID0gU0VRX0xaTUFfUFJFUEFSRTsKLSAKLSsJCS8qIEZhbGwgdGhyb3VnaCAqLwotKwotIAkJY2FzZSBTRVFfTFpNQV9QUkVQQVJFOgotIAkJCWlmIChzLT5sem1hMi5jb21wcmVzc2VkIDwgUkNfSU5JVF9CWVRFUykKLSAJCQkJcmV0dXJuIFhaX0RBVEFfRVJST1I7Ci1AQCAtMTA1Miw2ICsxMDU0LDggQEAgZW51bSB4el9yZXQgeHpfZGVjX2x6bWEyX3J1bigKLSAJCQlzLT5sem1hMi5jb21wcmVzc2VkIC09IFJDX0lOSVRfQllURVM7Ci0gCQkJcy0+bHptYTIuc2VxdWVuY2UgPSBTRVFfTFpNQV9SVU47Ci0gCi0rCQkvKiBGYWxsIHRocm91Z2ggKi8KLSsKLSAJCWNhc2UgU0VRX0xaTUFfUlVOOgotIAkJCS8qCi0gCQkJICogU2V0IGRpY3Rpb25hcnkgbGltaXQgdG8gaW5kaWNhdGUgaG93IG11Y2ggd2Ugd2FudAotSW5kZXg6IGdydWItMi4wMC9ncnViLWNvcmUvbGliL3h6ZW1iZWQveHpfZGVjX3N0cmVhbS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ3J1Yi0yLjAwLm9yaWcvZ3J1Yi1jb3JlL2xpYi94emVtYmVkL3h6X2RlY19zdHJlYW0uYwotKysrIGdydWItMi4wMC9ncnViLWNvcmUvbGliL3h6ZW1iZWQveHpfZGVjX3N0cmVhbS5jCi1AQCAtNzQ5LDYgKzc0OSw3IEBAIHN0YXRpYyBlbnVtIHh6X3JldCBkZWNfbWFpbihzdHJ1Y3QgeHpfZGUKLSAKLSAJCQlzLT5zZXF1ZW5jZSA9IFNFUV9CTE9DS19TVEFSVDsKLSAKLSsJCQkvKiBGQUxMVEhST1VHSCAqLwotIAkJY2FzZSBTRVFfQkxPQ0tfU1RBUlQ6Ci0gCQkJLyogV2UgbmVlZCBvbmUgYnl0ZSBvZiBpbnB1dCB0byBjb250aW51ZS4gKi8KLSAJCQlpZiAoYi0+aW5fcG9zID09IGItPmluX3NpemUpCi1AQCAtNzcyLDYgKzc3Myw3IEBAIHN0YXRpYyBlbnVtIHh6X3JldCBkZWNfbWFpbihzdHJ1Y3QgeHpfZGUKLSAJCQlzLT50ZW1wLnBvcyA9IDA7Ci0gCQkJcy0+c2VxdWVuY2UgPSBTRVFfQkxPQ0tfSEVBREVSOwotIAotKwkJCS8qIEZBTExUSFJPVUdIICovCi0gCQljYXNlIFNFUV9CTE9DS19IRUFERVI6Ci0gCQkJaWYgKCFmaWxsX3RlbXAocywgYikpCi0gCQkJCXJldHVybiBYWl9PSzsKLUBAIC03ODIsNiArNzg0LDcgQEAgc3RhdGljIGVudW0geHpfcmV0IGRlY19tYWluKHN0cnVjdCB4el9kZQotIAotIAkJCXMtPnNlcXVlbmNlID0gU0VRX0JMT0NLX1VOQ09NUFJFU1M7Ci0gCi0rCQkJLyogRkFMTFRIUk9VR0ggKi8KLSAJCWNhc2UgU0VRX0JMT0NLX1VOQ09NUFJFU1M6Ci0gCQkJcmV0ID0gZGVjX2Jsb2NrKHMsIGIpOwotIAkJCWlmIChyZXQgIT0gWFpfU1RSRUFNX0VORCkKLUBAIC04MDksNiArODEyLDcgQEAgc3RhdGljIGVudW0geHpfcmV0IGRlY19tYWluKHN0cnVjdCB4el9kZQotIAotIAkJCXMtPnNlcXVlbmNlID0gU0VRX0JMT0NLX0NIRUNLOwotIAotKwkJCS8qIEZBTExUSFJPVUdIICovCi0gCQljYXNlIFNFUV9CTE9DS19DSEVDSzoKLSAJCQlyZXQgPSBoYXNoX3ZhbGlkYXRlKHMsIGIsIDApOwotIAkJCWlmIChyZXQgIT0gWFpfU1RSRUFNX0VORCkKLUBAIC04NjMsNiArODY3LDcgQEAgc3RhdGljIGVudW0geHpfcmV0IGRlY19tYWluKHN0cnVjdCB4el9kZQotIAotIAkJCXMtPnNlcXVlbmNlID0gU0VRX0lOREVYX0NSQzMyOwotIAotKwkJCS8qIEZBTExUSFJPVUdIICovCi0gCQljYXNlIFNFUV9JTkRFWF9DUkMzMjoKLSAJCQlyZXQgPSBoYXNoX3ZhbGlkYXRlKHMsIGIsIDEpOwotIAkJCWlmIChyZXQgIT0gWFpfU1RSRUFNX0VORCkKLUBAIC04NzEsNiArODc2LDcgQEAgc3RhdGljIGVudW0geHpfcmV0IGRlY19tYWluKHN0cnVjdCB4el9kZQotIAkJCXMtPnRlbXAuc2l6ZSA9IFNUUkVBTV9IRUFERVJfU0laRTsKLSAJCQlzLT5zZXF1ZW5jZSA9IFNFUV9TVFJFQU1fRk9PVEVSOwotIAotKwkJCS8qIEZBTExUSFJPVUdIICovCi0gCQljYXNlIFNFUV9TVFJFQU1fRk9PVEVSOgotIAkJCWlmICghZmlsbF90ZW1wKHMsIGIpKQotIAkJCQlyZXR1cm4gWFpfT0s7Ci1JbmRleDogZ3J1Yi0yLjAwL2dydWItY29yZS9sb2FkZXIvaTM4Ni9saW51eC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ3J1Yi0yLjAwLm9yaWcvZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L2xpbnV4LmMKLSsrKyBncnViLTIuMDAvZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L2xpbnV4LmMKLUBAIC05NzcsMTAgKzk3NywxMyBAQCBncnViX2NtZF9saW51eCAoZ3J1Yl9jb21tYW5kX3QgY21kIF9fYXR0Ci0gCSAgICAgIHsKLSAJICAgICAgY2FzZSAnZyc6Ci0gCQlzaGlmdCArPSAxMDsKLSsJCS8qIEZBTExUSFJPVUdIICovCi0gCSAgICAgIGNhc2UgJ20nOgotIAkJc2hpZnQgKz0gMTA7Ci0rCQkvKiBGQUxMVEhST1VHSCAqLwotIAkgICAgICBjYXNlICdrJzoKLSAJCXNoaWZ0ICs9IDEwOwotKwkJLyogRkFMTFRIUk9VR0ggKi8KLSAJICAgICAgZGVmYXVsdDoKLSAJCWJyZWFrOwotIAkgICAgICB9Ci1JbmRleDogZ3J1Yi0yLjAwL2dydWItY29yZS92aWRlby9yZWFkZXJzL2pwZWcuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdydWItMi4wMC5vcmlnL2dydWItY29yZS92aWRlby9yZWFkZXJzL2pwZWcuYwotKysrIGdydWItMi4wMC9ncnViLWNvcmUvdmlkZW8vcmVhZGVycy9qcGVnLmMKLUBAIC03MDEsNiArNzAxLDcgQEAgZ3J1Yl9qcGVnX2RlY29kZV9qcGVnIChzdHJ1Y3QgZ3J1Yl9qcGVnXwotIAljYXNlIEpQRUdfTUFSS0VSX1NPUzoJLyogU3RhcnQgT2YgU2Nhbi4gICovCi0gCSAgaWYgKGdydWJfanBlZ19kZWNvZGVfc29zIChkYXRhKSkKLSAJICAgIGJyZWFrOwotKwkgIC8qIEZBTExUSFJPVUdIICovCi0gCWNhc2UgSlBFR19NQVJLRVJfUlNUMDoJLyogUmVzdGFydC4gICovCi0gCWNhc2UgSlBFR19NQVJLRVJfUlNUMToKLSAJY2FzZSBKUEVHX01BUktFUl9SU1QyOgotSW5kZXg6IGdydWItMi4wMC91dGlsL2dydWItbWtpbWFnZXh4LmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBncnViLTIuMDAub3JpZy91dGlsL2dydWItbWtpbWFnZXh4LmMKLSsrKyBncnViLTIuMDAvdXRpbC9ncnViLW1raW1hZ2V4eC5jCi1AQCAtNDg1LDYgKzQ4NSw3IEBAIFNVRkZJWCAocmVsb2NhdGVfYWRkcmVzc2VzKSAoRWxmX0VoZHIgKmUKLSAJCQkJCQkJCQkgICAgKyBzeW0tPnN0X3ZhbHVlCi0gCQkJCQkJCQkJICAgIC0gaW1hZ2VfdGFyZ2V0LT52YWRkcl9vZmZzZXQpKTsKLSAJCSAgfQotKwkJLyogRkFMTFRIUk9VR0ggKi8KLSAJCWNhc2UgUl9JQTY0X0xUT0ZGX0ZQVFIyMjoKLSAJCSAgKmdwcHRyID0gZ3J1Yl9ob3N0X3RvX3RhcmdldDY0IChhZGRlbmQgKyBzeW1fYWRkcik7Ci0gCQkgIGFkZF92YWx1ZV90b19zbG90XzIxICgoZ3J1Yl9hZGRyX3QpIHRhcmdldCwKLUluZGV4OiBncnViLTIuMDAvdXRpbC9ncnViLW1vdW50LmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBncnViLTIuMDAub3JpZy91dGlsL2dydWItbW91bnQuYwotKysrIGdydWItMi4wMC91dGlsL2dydWItbW91bnQuYwotQEAgLTQ4Nyw2ICs0ODcsNyBAQCBhcmdwX3BhcnNlciAoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QKLSAgICAgICBpZiAoYXJnWzBdICE9ICctJykKLSAJYnJlYWs7Ci0gCi0rICAgIC8qIEZBTExUSFJPVUdIICovCi0gICAgIGRlZmF1bHQ6Ci0gICAgICAgaWYgKCFhcmcpCi0gCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDAzLUFkZC1nbnVsaWItZml4LWdjYzctZmFsbHRocm91Z2guZGlmZi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMy1BZGQtZ251bGliLWZpeC1nY2M3LWZhbGx0aHJvdWdoLmRpZmYucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZmJmNWMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDAzLUFkZC1nbnVsaWItZml4LWdjYzctZmFsbHRocm91Z2guZGlmZi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLUZyb20gMDA3ZjBiNDA3ZjcyMzE0ZWM4MzJkNzdlMTViODNlYTQwYjE2MDAzNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEFuZHJlaSBCb3J6ZW5rb3YgPGFydmlkamFhckBnbWFpbC5jb20+Ci1EYXRlOiBUdWUsIDQgQXByIDIwMTcgMTk6Mzc6NDcgKzAzMDAKLVN1YmplY3Q6IFtQQVRDSCAzLzRdIEFkZCBnbnVsaWItZml4LWdjYzctZmFsbHRocm91Z2guZGlmZgotCi1BcyBsb25nIGFzIHRoZSBjb2RlIGlzIG5vdCB1cHN0cmVhbSwgYWRkIGl0IGFzIGV4cGxpY2l0IHBhdGNoIGZvciB0aGUKLWNhc2Ugb2YgZ251bGliIHJlZnJlc2guCi0tLS0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLSBncnViLWNvcmUvZ251bGliLWZpeC1nY2M3LWZhbGx0aHJvdWdoLmRpZmYgfCAxNCArKysrKysrKysrKysrKwotIDEgZmlsZSBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGdydWItY29yZS9nbnVsaWItZml4LWdjYzctZmFsbHRocm91Z2guZGlmZgotCi1kaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2dudWxpYi1maXgtZ2NjNy1mYWxsdGhyb3VnaC5kaWZmIGIvZ3J1Yi1jb3JlL2dudWxpYi1maXgtZ2NjNy1mYWxsdGhyb3VnaC5kaWZmCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uOTgwMmUyZAotLS0tIC9kZXYvbnVsbAotKysrIGIvZ3J1Yi1jb3JlL2dudWxpYi1maXgtZ2NjNy1mYWxsdGhyb3VnaC5kaWZmCi1AQCAtMCwwICsxLDE0IEBACi0rZGlmZiAtLWdpdCBncnViLWNvcmUvZ251bGliL3JlZ2V4ZWMuYyBncnViLWNvcmUvZ251bGliL3JlZ2V4ZWMuYwotK2luZGV4IGY2MzJjZDQuLmE3Nzc2ZjAgMTAwNjQ0Ci0rLS0tIGdydWItY29yZS9nbnVsaWIvcmVnZXhlYy5jCi0rKysrIGdydWItY29yZS9nbnVsaWIvcmVnZXhlYy5jCi0rQEAgLTQwOTksNiArNDA5OSw5IEBAIGNoZWNrX25vZGVfYWNjZXB0IChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGNvbnN0IHJlX3Rva2VuX3QgKm5vZGUsCi0rICAgICBjYXNlIE9QX1VURjhfUEVSSU9EOgotKyAgICAgICBpZiAoY2ggPj0gQVNDSUlfQ0hBUlMpCi0rICAgICAgICAgcmV0dXJuIGZhbHNlOwotKysjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiBfX0dOVUNfXyA+PSA3Ci0rKyAgICAgIF9fYXR0cmlidXRlX18gKChmYWxsdGhyb3VnaCkpOwotKysjZW5kaWYKLSsgICAgICAgLyogRkFMTFRIUk9VR0ggKi8KLSsgI2VuZGlmCi0rICAgICBjYXNlIE9QX1BFUklPRDoKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDA0LUZpeC1yZW1haW5pbmctY2FzZXMtb2YtZ2NjLTctZmFsbHRocm91Z2gtd2FybmluZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwNC1GaXgtcmVtYWluaW5nLWNhc2VzLW9mLWdjYy03LWZhbGx0aHJvdWdoLXdhcm5pbmcucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4YTcwYTIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDA0LUZpeC1yZW1haW5pbmctY2FzZXMtb2YtZ2NjLTctZmFsbHRocm91Z2gtd2FybmluZy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE3NSArMCwwIEBACi1Gcm9tIGQ0NTQ1MDliYjg2NmQ0ZWFlZmJiNTU4ZDk0ZGQwZWYwMjI4ODMwZWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBWbGFkaW1pciBTZXJiaW5lbmtvIDxwaGNvZGVyQGdtYWlsLmNvbT4KLURhdGU6IFdlZCwgMTIgQXByIDIwMTcgMDE6NDI6MzggKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCA0LzRdIEZpeCByZW1haW5pbmcgY2FzZXMgb2YgZ2NjIDcgZmFsbHRocm91Z2ggd2FybmluZy4KLQotVGhleSBhcmUgYWxsIGludGVuZGVkLCBzbyBqdXN0IGFkZCB0aGUgcmVsZXZhbnQgY29tbWVudC4KLS0tLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotIGdydWItY29yZS9rZXJuL2lhNjQvZGwuYyAgICAgICAgICAgICAgICAgICAgIHwgMSArCi0gZ3J1Yi1jb3JlL2tlcm4vbWlwcy9kbC5jICAgICAgICAgICAgICAgICAgICAgfCAxICsKLSBncnViLWNvcmUva2Vybi9zcGFyYzY0L2RsLmMgICAgICAgICAgICAgICAgICB8IDEgKwotIGdydWItY29yZS9sb2FkZXIvaTM4Ni9jb3JlYm9vdC9jaGFpbmxvYWRlci5jIHwgMSArCi0gNCBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKLQotSW5kZXg6IGdydWItMi4wMC9ncnViLWNvcmUva2Vybi9pYTY0L2RsLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBncnViLTIuMDAub3JpZy9ncnViLWNvcmUva2Vybi9pYTY0L2RsLmMKLSsrKyBncnViLTIuMDAvZ3J1Yi1jb3JlL2tlcm4vaWE2NC9kbC5jCi1AQCAtMjU3LDYgKzI1Nyw3IEBAIGdydWJfYXJjaF9kbF9yZWxvY2F0ZV9zeW1ib2xzIChncnViX2RsX3QKLSAJCSAgY2FzZSBSX0lBNjRfTFRPRkYyMjoKLSAJCSAgICBpZiAoRUxGX1NUX1RZUEUgKHN5bS0+c3RfaW5mbykgPT0gU1RUX0ZVTkMpCi0gCQkgICAgICB2YWx1ZSA9ICooZ3J1Yl91aW50NjRfdCAqKSBzeW0tPnN0X3ZhbHVlICsgcmVsLT5yX2FkZGVuZDsKLSsJCSAgLyogRmFsbHRocm91Z2guICAqLwotIAkJICBjYXNlIFJfSUE2NF9MVE9GRl9GUFRSMjI6Ci0gCQkgICAgKmdwcHRyID0gdmFsdWU7Ci0gCQkgICAgYWRkX3ZhbHVlX3RvX3Nsb3RfMjEgKGFkZHIsIChncnViX2FkZHJfdCkgZ3BwdHIgLSAoZ3J1Yl9hZGRyX3QpIGdwKTsKLUluZGV4OiBncnViLTIuMDAvZ3J1Yi1jb3JlL2Rpc2svZGlza2ZpbHRlci5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ3J1Yi0yLjAwLm9yaWcvZ3J1Yi1jb3JlL2Rpc2svZGlza2ZpbHRlci5jCi0rKysgZ3J1Yi0yLjAwL2dydWItY29yZS9kaXNrL2Rpc2tmaWx0ZXIuYwotQEAgLTcxLDEwICs3MSwxMiBAQCBpc19sdl9yZWFkYWJsZSAoc3RydWN0IGdydWJfZGlza2ZpbHRlcl9sCi0gCWNhc2UgR1JVQl9ESVNLRklMVEVSX1JBSUQ2OgotIAkgIGlmICghZWFzaWx5KQotIAkgICAgbmVlZC0tOwotKwkgIC8qIEZhbGx0aHJvdWdoLiAgKi8KLSAJY2FzZSBHUlVCX0RJU0tGSUxURVJfUkFJRDQ6Ci0gCWNhc2UgR1JVQl9ESVNLRklMVEVSX1JBSUQ1OgotIAkgIGlmICghZWFzaWx5KQotIAkgICAgbmVlZC0tOwotKwkgIC8qIEZhbGx0aHJvdWdoLiAgKi8KLSAJY2FzZSBHUlVCX0RJU0tGSUxURVJfU1RSSVBFRDoKLSAJICBicmVhazsKLSAKLUBAIC01MDcsNiArNTA5LDcgQEAgcmVhZF9zZWdtZW50IChzdHJ1Y3QgZ3J1Yl9kaXNrZmlsdGVyX3NlZwotICAgICAgIGlmIChzZWctPm5vZGVfY291bnQgPT0gMSkKLSAJcmV0dXJuIGdydWJfZGlza2ZpbHRlcl9yZWFkX25vZGUgKCZzZWctPm5vZGVzWzBdLAotIAkJCQkJICBzZWN0b3IsIHNpemUsIGJ1Zik7Ci0rICAgIC8qIEZhbGx0aHJvdWdoLiAgKi8KLSAgICAgY2FzZSBHUlVCX0RJU0tGSUxURVJfTUlSUk9SOgotICAgICBjYXNlIEdSVUJfRElTS0ZJTFRFUl9SQUlEMTA6Ci0gICAgICAgewotSW5kZXg6IGdydWItMi4wMC9ncnViLWNvcmUvZm9udC9mb250LmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBncnViLTIuMDAub3JpZy9ncnViLWNvcmUvZm9udC9mb250LmMKLSsrKyBncnViLTIuMDAvZ3J1Yi1jb3JlL2ZvbnQvZm9udC5jCi1AQCAtMTI5Nyw2ICsxMjk3LDcgQEAgYmxpdF9jb21iIChjb25zdCBzdHJ1Y3QgZ3J1Yl91bmljb2RlX2dseQotIAkgICAgLSBncnViX2ZvbnRfZ2V0X3hoZWlnaHQgKGNvbWJpbmluZ19nbHlwaHNbaV0tPmZvbnQpIC0gMTsKLSAJICBpZiAoc3BhY2UgPD0gMCkKLSAJICAgIHNwYWNlID0gMSArIChncnViX2ZvbnRfZ2V0X3hoZWlnaHQgKG1haW5fZ2x5cGgtPmZvbnQpKSAvIDg7Ci0rICAgICAgICAvKiBGYWxsdGhyb3VnaC4gICovCi0gCi0gCWNhc2UgR1JVQl9VTklDT0RFX1NUQUNLX0FUVEFDSEVEX0FCT1ZFOgotIAkgIGRvX2JsaXQgKGNvbWJpbmluZ19nbHlwaHNbaV0sIHRhcmdldHgsCi1AQCAtMTMzOCw2ICsxMzM5LDcgQEAgYmxpdF9jb21iIChjb25zdCBzdHJ1Y3QgZ3J1Yl91bmljb2RlX2dseQotIAkJICAgICsgY29tYmluaW5nX2dseXBoc1tpXS0+aGVpZ2h0KTsKLSAJICBpZiAoc3BhY2UgPD0gMCkKLSAJICAgIHNwYWNlID0gMSArIChncnViX2ZvbnRfZ2V0X3hoZWlnaHQgKG1haW5fZ2x5cGgtPmZvbnQpKSAvIDg7Ci0rICAgICAgICAvKiBGYWxsdGhyb3VnaC4gICovCi0gCi0gCWNhc2UgR1JVQl9VTklDT0RFX1NUQUNLX0FUVEFDSEVEX0JFTE9XOgotIAkgIGRvX2JsaXQgKGNvbWJpbmluZ19nbHlwaHNbaV0sIHRhcmdldHgsIC0oYm91bmRzLnkgLSBzcGFjZSkpOwotSW5kZXg6IGdydWItMi4wMC9ncnViLWNvcmUvZnMvdWRmLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBncnViLTIuMDAub3JpZy9ncnViLWNvcmUvZnMvdWRmLmMKLSsrKyBncnViLTIuMDAvZ3J1Yi1jb3JlL2ZzL3VkZi5jCi1AQCAtOTcwLDYgKzk3MCw3IEBAIGdydWJfdWRmX3JlYWRfc3ltbGluayAoZ3J1Yl9mc2hlbHBfbm9kZV8KLSAJY2FzZSAxOgotIAkgIGlmIChwdHJbMV0pCi0gCSAgICBnb3RvIGZhaWw7Ci0rCSAgYnJlYWs7Ci0gCWNhc2UgMjoKLSAJICAvKiBpbiA0IGJ5dGVzLiBvdXQ6IDEgYnl0ZS4gICovCi0gCSAgb3B0ciA9IG91dDsKLUluZGV4OiBncnViLTIuMDAvZ3J1Yi1jb3JlL2xpYi9sZWdhY3lfcGFyc2UuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdydWItMi4wMC5vcmlnL2dydWItY29yZS9saWIvbGVnYWN5X3BhcnNlLmMKLSsrKyBncnViLTIuMDAvZ3J1Yi1jb3JlL2xpYi9sZWdhY3lfcGFyc2UuYwotQEAgLTYyNiw2ICs2MjYsNyBAQCBncnViX2xlZ2FjeV9wYXJzZSAoY29uc3QgY2hhciAqYnVmLCBjaGFyCi0gCSAgewotIAkgIGNhc2UgVFlQRV9GSUxFX05PX0NPTlNVTUU6Ci0gCSAgICBob2xkX2FyZyA9IDE7Ci0rCSAgLyogRmFsbHRocm91Z2guICAqLwotIAkgIGNhc2UgVFlQRV9QQVJUSVRJT046Ci0gCSAgY2FzZSBUWVBFX0ZJTEU6Ci0gCSAgICBhcmdzW2ldID0gYWRqdXN0X2ZpbGUgKGN1cmFyZywgY3VyYXJnbGVuKTsKLUluZGV4OiBncnViLTIuMDAvZ3J1Yi1jb3JlL2xpYi9saWJnY3J5cHQtZ3J1Yi9jaXBoZXIvcmlqbmRhZWwuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdydWItMi4wMC5vcmlnL2dydWItY29yZS9saWIvbGliZ2NyeXB0LWdydWIvY2lwaGVyL3Jpam5kYWVsLmMKLSsrKyBncnViLTIuMDAvZ3J1Yi1jb3JlL2xpYi9saWJnY3J5cHQtZ3J1Yi9jaXBoZXIvcmlqbmRhZWwuYwotQEAgLTk2LDcgKzk2LDggQEAgZG9fc2V0a2V5IChSSUpOREFFTF9jb250ZXh0ICpjdHgsIGNvbnN0Ci0gICBzdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKLSAgIHN0YXRpYyBjb25zdCBjaGFyICpzZWxmdGVzdF9mYWlsZWQ9MDsKLSAgIGludCBST1VORFM7Ci0tICBpbnQgaSxqLCByLCB0LCByY29ucG9pbnRlciA9IDA7Ci0rICB1bnNpZ25lZCBpbnQgaSwgdCwgcmNvbnBvaW50ZXIgPSAwOwotKyAgaW50IGosIHI7Ci0gICBpbnQgS0M7Ci0gICB1bmlvbgotICAgewotSW5kZXg6IGdydWItMi4wMC9ncnViLWNvcmUvbW1hcC9lZmkvbW1hcC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ3J1Yi0yLjAwLm9yaWcvZ3J1Yi1jb3JlL21tYXAvZWZpL21tYXAuYwotKysrIGdydWItMi4wMC9ncnViLWNvcmUvbW1hcC9lZmkvbW1hcC5jCi1AQCAtNzIsNiArNzIsNyBAQCBncnViX2VmaV9tbWFwX2l0ZXJhdGUgKGdydWJfbWVtb3J5X2hvb2tfCi0gCQkgICAgR1JVQl9NRU1PUllfQVZBSUxBQkxFKTsKLSAJICAgICAgYnJlYWs7Ci0gCSAgICB9Ci0rCSAgLyogRmFsbHRocm91Z2guICAqLwotIAljYXNlIEdSVUJfRUZJX1JVTlRJTUVfU0VSVklDRVNfQ09ERToKLSAJICBob29rIChkZXNjLT5waHlzaWNhbF9zdGFydCwgZGVzYy0+bnVtX3BhZ2VzICogNDA5NiwKLSAJCUdSVUJfTUVNT1JZX0NPREUpOwotQEAgLTg2LDYgKzg3LDcgQEAgZ3J1Yl9lZmlfbW1hcF9pdGVyYXRlIChncnViX21lbW9yeV9ob29rXwotIAkgIGdydWJfcHJpbnRmICgiVW5rbm93biBtZW1vcnkgdHlwZSAlZCwgY29uc2lkZXJpbmcgcmVzZXJ2ZWRcbiIsCi0gCQkgICAgICAgZGVzYy0+dHlwZSk7Ci0gCi0rCSAgLyogRmFsbHRocm91Z2guICAqLwotIAljYXNlIEdSVUJfRUZJX0JPT1RfU0VSVklDRVNfREFUQToKLSAJICBpZiAoIWF2b2lkX2VmaV9ib290X3NlcnZpY2VzKQotIAkgICAgewotQEAgLTkzLDYgKzk1LDcgQEAgZ3J1Yl9lZmlfbW1hcF9pdGVyYXRlIChncnViX21lbW9yeV9ob29rXwotIAkJICAgIEdSVUJfTUVNT1JZX0FWQUlMQUJMRSk7Ci0gCSAgICAgIGJyZWFrOwotIAkgICAgfQotKwkgIC8qIEZhbGx0aHJvdWdoLiAgKi8KLSAJY2FzZSBHUlVCX0VGSV9SRVNFUlZFRF9NRU1PUllfVFlQRToKLSAJY2FzZSBHUlVCX0VGSV9SVU5USU1FX1NFUlZJQ0VTX0RBVEE6Ci0gCWNhc2UgR1JVQl9FRklfTUVNT1JZX01BUFBFRF9JTzoKLUluZGV4OiBncnViLTIuMDAvZ3J1Yi1jb3JlL25vcm1hbC9jaGFyc2V0LmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBncnViLTIuMDAub3JpZy9ncnViLWNvcmUvbm9ybWFsL2NoYXJzZXQuYwotKysrIGdydWItMi4wMC9ncnViLWNvcmUvbm9ybWFsL2NoYXJzZXQuYwotQEAgLTg1OCw2ICs4NTgsNyBAQCBncnViX2JpZGlfbGluZV9sb2dpY2FsX3RvX3Zpc3VhbCAoY29uc3QKLSAJICBjYXNlIEdSVUJfQklESV9UWVBFX1I6Ci0gCSAgY2FzZSBHUlVCX0JJRElfVFlQRV9BTDoKLSAJICAgIGJpZGlfbmVlZGVkID0gMTsKLSsJICAvKiBGYWxsdGhyb3VnaC4gICovCi0gCSAgZGVmYXVsdDoKLSAJICAgIHsKLSAJICAgICAgaWYgKGpvaW5fc3RhdGUgPT0gSk9JTl9GT1JDRSkKLUluZGV4OiBncnViLTIuMDAvZ3J1Yi1jb3JlL3ZpZGVvL2JvY2hzLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBncnViLTIuMDAub3JpZy9ncnViLWNvcmUvdmlkZW8vYm9jaHMuYwotKysrIGdydWItMi4wMC9ncnViLWNvcmUvdmlkZW8vYm9jaHMuYwotQEAgLTM1MSw2ICszNTEsNyBAQCBncnViX3ZpZGVvX2JvY2hzX3NldHVwICh1bnNpZ25lZCBpbnQgd2lkCi0gICAgIGNhc2UgMzI6Ci0gICAgICAgZnJhbWVidWZmZXIubW9kZV9pbmZvLnJlc2VydmVkX21hc2tfc2l6ZSA9IDg7Ci0gICAgICAgZnJhbWVidWZmZXIubW9kZV9pbmZvLnJlc2VydmVkX2ZpZWxkX3BvcyA9IDI0OwotKyAgICAgIC8qIEZhbGx0aHJvdWdoLiAgKi8KLSAKLSAgICAgY2FzZSAyNDoKLSAgICAgICBmcmFtZWJ1ZmZlci5tb2RlX2luZm8ucmVkX21hc2tfc2l6ZSA9IDg7Ci1JbmRleDogZ3J1Yi0yLjAwL2dydWItY29yZS92aWRlby9jaXJydXMuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdydWItMi4wMC5vcmlnL2dydWItY29yZS92aWRlby9jaXJydXMuYwotKysrIGdydWItMi4wMC9ncnViLWNvcmUvdmlkZW8vY2lycnVzLmMKLUBAIC00MzEsNiArNDMxLDcgQEAgZ3J1Yl92aWRlb19jaXJydXNfc2V0dXAgKHVuc2lnbmVkIGludCB3aQotICAgICBjYXNlIDMyOgotICAgICAgIGZyYW1lYnVmZmVyLm1vZGVfaW5mby5yZXNlcnZlZF9tYXNrX3NpemUgPSA4OwotICAgICAgIGZyYW1lYnVmZmVyLm1vZGVfaW5mby5yZXNlcnZlZF9maWVsZF9wb3MgPSAyNDsKLSsgICAgICAvKiBGYWxsdGhyb3VnaC4gICovCi0gCi0gICAgIGNhc2UgMjQ6Ci0gICAgICAgZnJhbWVidWZmZXIubW9kZV9pbmZvLnJlZF9tYXNrX3NpemUgPSA4OwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViL2F1dG9nZW4uc2gtZXhjbHVkZS1wYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvYXV0b2dlbi5zaC1leGNsdWRlLXBjLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWIvYXV0b2dlbi5zaC1leGNsdWRlLXBjLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2F1dG9nZW4uc2gtZXhjbHVkZS1wYy5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9jaGVjay1pZi1saWJsem1hLWlzLWRpc2FibGVkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9jaGVjay1pZi1saWJsem1hLWlzLWRpc2FibGVkLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWVjZTA4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvY2hlY2staWYtbGlibHptYS1pcy1kaXNhYmxlZC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLURpc2FibGUgbGlibHptYSBpZiAtLWVuYWJsZS1saWJsem1hPW5vCi0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KLQotU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgotCi0tLS0gYS9jb25maWd1cmUuYWMKLSsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTEwMjksMTAgKzEwMjksMjAgQEAgZmkKLSAKLSBBQ19TVUJTVChbTElCR0VPTV0pCi0gCi0tQUNfQ0hFQ0tfTElCKFtsem1hXSwgW2x6bWFfY29kZV0sCi0tICAgICAgICAgICAgIFtMSUJMWk1BPSItbGx6bWEiCi0tICAgICAgICAgICAgICBBQ19ERUZJTkUoW0hBVkVfTElCTFpNQV0sIFsxXSwKLS0gICAgICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIExaTUEgbGlicmFyeS5dKV0sKQotK0FDX0FSR19FTkFCTEUoW2xpYmx6bWFdLAotKyAgICAgICAgICAgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1saWJsem1hXSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW5hYmxlIGxpYmx6bWEgaW50ZWdyYXRpb24gKGRlZmF1bHQ9Z3Vlc3NlZCldKV0pCi0raWYgdGVzdCB4IiRlbmFibGVfbGlibHptYSIgPSB4bm8gOyB0aGVuCi0rICBsaWJsem1hX2V4Y3VzZT0iZXhwbGljaXRseSBkaXNhYmxlZCIKLStmaQotKwotK2lmIHRlc3QgeCIkbGlibHptYV9leGN1c2UiID0geCA7IHRoZW4KLSsgIEFDX0NIRUNLX0xJQihbbHptYV0sIFtsem1hX2NvZGVdLAotKyAgICAgICAgICAgICAgIFtMSUJMWk1BPSItbGx6bWEiCi0rICAgICAgICAgICAgICAgIEFDX0RFRklORShbSEFWRV9MSUJMWk1BXSwgWzFdLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBMWk1BIGxpYnJhcnkuXSldLCkKLStmaQotKwotIEFDX1NVQlNUKFtMSUJMWk1BXSkKLSAKLSBBQ19BUkdfRU5BQkxFKFtsaWJ6ZnNdLApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9maXgtZW5kaWFubmVzcy1wcm9ibGVtLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9maXgtZW5kaWFubmVzcy1wcm9ibGVtLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzk5OTJhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZml4LWVuZGlhbm5lc3MtcHJvYmxlbS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLWdydWItY29yZS9uZXQvdGZ0cC5jOiBmaXggZW5kaWFubmVzcyBwcm9ibGVtLgotCi0JKiBncnViLWNvcmUvbmV0L3RmdHAuYyAoYWNrKTogRml4IGVuZGlhbm5lc3MgcHJvYmxlbS4KLQkodGZ0cF9yZWNlaXZlKTogTGlrZXdpc2UuCi0JUmVwb3J0ZWQgYnk6IE1pY2hhZWwgRGF2aWRzYXZlci4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi1kaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCi1pbmRleCA4MWJkYWU5Li5jMmY0MmQ1IDEwMDY0NAotLS0tIGEvQ2hhbmdlTG9nCi0rKysgYi9DaGFuZ2VMb2cKLUBAIC0xLDMgKzEsOSBAQAotKzIwMTItMDctMDIgIFZsYWRpbWlyIFNlcmJpbmVua28gIDxwaGNvZGVyQGdtYWlsLmNvbT4KLSsKLSsJKiBncnViLWNvcmUvbmV0L3RmdHAuYyAoYWNrKTogRml4IGVuZGlhbm5lc3MgcHJvYmxlbS4KLSsJKHRmdHBfcmVjZWl2ZSk6IExpa2V3aXNlLgotKwlSZXBvcnRlZCBieTogTWljaGFlbCBEYXZpZHNhdmVyLgotKwotIDIwMTItMDYtMjcgIFZsYWRpbWlyIFNlcmJpbmVua28gIDxwaGNvZGVyQGdtYWlsLmNvbT4KLSAKLSAJKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAyLjAwLgotZGlmZiAtLWdpdCBhL2dydWItY29yZS9uZXQvdGZ0cC5jIGIvZ3J1Yi1jb3JlL25ldC90ZnRwLmMKLWluZGV4IDljNzBlZmIuLmQwZjM5ZWEgMTAwNjQ0Ci0tLS0gYS9ncnViLWNvcmUvbmV0L3RmdHAuYwotKysrIGIvZ3J1Yi1jb3JlL25ldC90ZnRwLmMKLUBAIC0xNDMsNyArMTQzLDcgQEAgYWNrICh0ZnRwX2RhdGFfdCBkYXRhLCBncnViX3VpbnQxNl90IGJsb2NrKQotIAotICAgdGZ0cGhfYWNrID0gKHN0cnVjdCB0ZnRwaGRyICopIG5iX2Fjay5kYXRhOwotICAgdGZ0cGhfYWNrLT5vcGNvZGUgPSBncnViX2NwdV90b19iZTE2IChURlRQX0FDSyk7Ci0tICB0ZnRwaF9hY2stPnUuYWNrLmJsb2NrID0gYmxvY2s7Ci0rICB0ZnRwaF9hY2stPnUuYWNrLmJsb2NrID0gZ3J1Yl9jcHVfdG9fYmUxNiAoYmxvY2spOwotIAotICAgZXJyID0gZ3J1Yl9uZXRfc2VuZF91ZHBfcGFja2V0IChkYXRhLT5zb2NrLCAmbmJfYWNrKTsKLSAgIGlmIChlcnIpCi1AQCAtMjI1LDcgKzIyNSw3IEBAIHRmdHBfcmVjZWl2ZSAoZ3J1Yl9uZXRfdWRwX3NvY2tldF90IHNvY2sgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAotIAkgICAgZ3J1Yl9wcmlvcml0eV9xdWV1ZV9wb3AgKGRhdGEtPnBxKTsKLSAKLSAJICAgIGlmIChmaWxlLT5kZXZpY2UtPm5ldC0+cGFja3MuY291bnQgPCA1MCkKLS0JICAgICAgZXJyID0gYWNrIChkYXRhLCB0ZnRwaC0+dS5kYXRhLmJsb2NrKTsKLSsJICAgICAgZXJyID0gYWNrIChkYXRhLCBkYXRhLT5ibG9jayArIDEpOwotIAkgICAgZWxzZQotIAkgICAgICB7Ci0gCQlmaWxlLT5kZXZpY2UtPm5ldC0+c3RhbGwgPSAxOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9maXgtaXNzdWUtd2l0aC1mbGV4LTIuNS4zNy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZml4LWlzc3VlLXdpdGgtZmxleC0yLjUuMzcucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxYWUyZjUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9maXgtaXNzdWUtd2l0aC1mbGV4LTIuNS4zNy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotVGhpcyBmaXhlcyBjb21waWxhdGlvbiBpc3N1ZXMgd2hlbiB1c2luZyBmbGV4LTIuNS4zNy4gSXQgd2FzIHRha2VuIGZyb20gdXBzdHJlYW0uCi0KLU9yaWdpbmFsIGF1dGhvciBpczogVmxhZGltaXIgU2VyYmluZW5rbyAgPHBoY29kZXJAZ21haWwuY29tPgotCi1TaWduZWQtb2ZmLWJ5OiBMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+Ci0KLUluZGV4OiBncnViLTIuMDAvZ3J1Yi1jb3JlL3NjcmlwdC95eWxleC5sCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ3J1Yi0yLjAwLm9yaWcvZ3J1Yi1jb3JlL3NjcmlwdC95eWxleC5sCTIwMTItMDYtMDggMjM6MjQ6MTUuMDAwMDAwMDAwICswMzAwCi0rKysgZ3J1Yi0yLjAwL2dydWItY29yZS9zY3JpcHQveXlsZXgubAkyMDEzLTA3LTMxIDE0OjM0OjQwLjcwODEwMDk4MiArMDMwMAotQEAgLTI5LDYgKzI5LDggQEAKLSAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1wcm90b3R5cGVzIgotICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyIKLSAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5zYWZlLWxvb3Atb3B0aW1pemF0aW9ucyIKLSsjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgotKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdzaWduLWNvbXBhcmUiCi0gCi0gI2RlZmluZSB5eWZyZWUgICAgZ3J1Yl9sZXhlcl95eWZyZWUKLSAjZGVmaW5lIHl5YWxsb2MgICBncnViX2xleGVyX3l5YWxsb2MKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZml4LXRleGluZm8ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2ZpeC10ZXhpbmZvLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTExZDczLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZml4LXRleGluZm8ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi1UaGUgdGFyYmFsbCBoYXMgYSB0ZXhpIGZpbGUgdGhhdCBkb2Vzbid0IHBhcnNlIHdpdGggY3VycmVudCB0ZXhpbmZvLCBzbyBpZiBpdCdzCi1iZWluZyByZS1nZW5lcmF0ZWQgdGhlIGJ1aWxkIHdpbGwgZmFpbC4gIFRha2UgYSBwYXRjaCBmcm9tIHVwc3RyZWFtIHRvIGZpeCB0aGUKLXRleGkuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLVNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+Ci0KLUZyb20gZDRjNGI4ZTFhMDg1ZjkyYWZjZWMzNmY2ZTU5MGM2ZGZjNTFkMGExYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEJyeWFuIEh1bmR2ZW4gPGJyeWFuaHVuZHZlbkBnbWFpbC5jb20+Ci1EYXRlOiBNb24sIDA4IEFwciAyMDEzIDEzOjIzOjA3ICswMDAwCi1TdWJqZWN0OiAJKiBkb2NzL2dydWItZGV2LnRleGk6IE1vdmUgQGl0ZW1pemUgYWZ0ZXIgQHN1YnNlY3Rpb24gdG8gc2F0aXNmeQotCi0JdGV4aW5mby01LjEuCi0tLS0KLShsaW1pdGVkIHRvICdkb2NzL2dydWItZGV2LnRleGknKQotCi1kaWZmIC0tZ2l0IGEvZG9jcy9ncnViLWRldi50ZXhpIGIvZG9jcy9ncnViLWRldi50ZXhpCi1pbmRleCBhNGEzODIwLi5mNzRjOTY2IDEwMDY0NAotLS0tIGEvZG9jcy9ncnViLWRldi50ZXhpCi0rKysgYi9kb2NzL2dydWItZGV2LnRleGkKLUBAIC0xMzk0LDggKzEzOTQsOCBAQCBncnViX3ZpZGVvX2JsaXRfZ2x5cGggKCZnbHlwaCwgY29sb3IsIDAsIDApOwotIAotIEBub2RlIEJpdG1hcCBBUEkKLSBAc2VjdGlvbiBCaXRtYXAgQVBJCi0tQGl0ZW1pemUKLSBAc3Vic2VjdGlvbiBncnViX3ZpZGVvX2JpdG1hcF9jcmVhdGUKLStAaXRlbWl6ZQotIEBpdGVtIFByb3RvdHlwZToKLSBAZXhhbXBsZQotIGdydWJfZXJyX3QgZ3J1Yl92aWRlb19iaXRtYXBfY3JlYXRlIChzdHJ1Y3QgZ3J1Yl92aWRlb19iaXRtYXAgKipiaXRtYXAsIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCwgZW51bSBncnViX3ZpZGVvX2JsaXRfZm9ybWF0IGJsaXRfZm9ybWF0KQotLS0KLWNnaXQgdjAuOS4wLjIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZml4LmJ1aWxkLndpdGguZ2NjLTcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2ZpeC5idWlsZC53aXRoLmdjYy03LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNWRmOTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2ZpeC5idWlsZC53aXRoLmdjYy03LnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKKyogZS5nLiB3aXRoIGdlbnRvbyBnY2MtNy4xIHRoZXkgZGVmaW5lIF9GT1JUSUZZX1NPVVJDRSBieSBkZWZhdWx0IHdpdGg6CisgIGh0dHBzOi8vc291cmNlcy5nZW50b28ub3JnL2NnaS1iaW4vdmlld3ZjLmNnaS9nZW50b28vc3JjL3BhdGNoc2V0cy9nY2MvNy4xLjAvZ2VudG9vLzEwX2FsbF9kZWZhdWx0LWZvcnRpZnktc291cmNlLnBhdGNoP3ZpZXc9bWFya3VwCisgIHdoaWNoIHJlc3VsdHMgaW4gZm9sbG93aW5nIGVycm9yIHdoaWxlIGJ1aWxkaW5nIGdydWItZWZpLW5hdGl2ZToKKyAgLi9jb25maWctdXRpbC5oOjE1MDQ6NDg6IGVycm9yOiB0aGlzIHVzZSBvZiAiZGVmaW5lZCIgbWF5IG5vdCBiZSBwb3J0YWJsZSBbLVdlcnJvcj1leHBhbnNpb24tdG8tZGVmaW5lZF0KKyAgICAgICAgICAgICAgIHx8IChkZWZpbmVkIF9GT1JUSUZZX1NPVVJDRSAmJiAwIDwgX0ZPUlRJRllfU09VUkNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXn5+fn5+fn5+fn5+fn5+CisgIHRoaXMgcGFydCBjb21lcyBmcm9tIGdudWxpYiBhbmQgaXQncyB1c2VkIG9ubHkgZm9yIEFwcGxlIGFuZCBCU0QsCisgIHNvIHdlIGNhbiBpZ25vcmUgaXQsIGJ1dCB3ZSBjYW5ub3QgYWRkIC1Xbm8tZXJyb3I9ZXhwYW5zaW9uLXRvLWRlZmluZWQKKyAgYmVjYXVzZSB0aGlzIHdhcm5pbmcgd2FzIGludHJvZHVjZWQgb25seSBpbiBnY2MtNyBhbmQgb2xkZXIgZ2NjCisgIHdpbGwgZmFpbCB3aXRoOgorICBjYzE6IGVycm9yOiAtV2Vycm9yPWV4cGFuc2lvbi10by1kZWZpbmVkOiBubyBvcHRpb24gLVdleHBhbnNpb24tdG8tZGVmaW5lZAorICB1c2UgI3ByYWdtYSB0byB3b3JrIGFyb3VuZCB0aGlzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyAoc2hvdWxkIGJlIGZpeGVkIGluIGdudWxpYiB3aGljaCBpcyB0aGVuIHJhcmVseSB1cGRhdGVkIGluIGdydWIpCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworZGlmZiAtdU5yIGdydWItMi4wMi5vbGQvbTQvZXh0ZXJuLWlubGluZS5tNCBncnViLTIuMDIvbTQvZXh0ZXJuLWlubGluZS5tNAorLS0tIGdydWItMi4wMi5vbGQvbTQvZXh0ZXJuLWlubGluZS5tNAkyMDE2LTAyLTI4IDE1OjIyOjIxLjAwMDAwMDAwMCArMDEwMAorKysrIGdydWItMi4wMi9tNC9leHRlcm4taW5saW5lLm00CTIwMTctMDgtMjIgMTk6MjY6NDUuMjEzNjM3Mjc2ICswMjAwCitAQCAtMzksNiArMzksMTAgQEAKKyAgICBPUyBYIDEwLjkgaGFzIGEgbWFjcm8gX19oZWFkZXJfaW5saW5lIGluZGljYXRpbmcgdGhlIGJ1ZyBpcyBmaXhlZCBmb3IgQyBhbmQKKyAgICBmb3IgY2xhbmcgYnV0IHJlbWFpbnMgZm9yIGcrKzsgc2VlIDxodHRwOi8vdHJhYy5tYWNwb3J0cy5vcmcvdGlja2V0LzQxMDMzPi4KKyAgICBBc3N1bWUgRHJhZ29uRmx5IGFuZCBGcmVlQlNEIHdpbGwgYmUgc2ltaWxhci4gICovCisrI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisrI2lmIF9fR05VQ19fID49IDcKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZXhwYW5zaW9uLXRvLWRlZmluZWQiCisrI2VuZGlmCisgI2lmICgoKGRlZmluZWQgX19BUFBMRV9fICYmIGRlZmluZWQgX19NQUNIX18pIFwKKyAgICAgICB8fCBkZWZpbmVkIF9fRHJhZ29uRmx5X18gfHwgZGVmaW5lZCBfX0ZyZWVCU0RfXykgXAorICAgICAgJiYgKGRlZmluZWQgX19oZWFkZXJfaW5saW5lIFwKK0BAIC01MCw2ICs1Miw3IEBACisgICAgICAgICAgICAgICAgICYmIGRlZmluZWQgX19HTlVDX18gJiYgISBkZWZpbmVkIF9fY3BsdXNwbHVzKSkpKQorICMgZGVmaW5lIF9HTF9FWFRFUk5fSU5MSU5FX1NUREhFQURFUl9CVUcKKyAjZW5kaWYKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorICNpZiAoKF9fR05VQ19fIFwKKyAgICAgICA/IGRlZmluZWQgX19HTlVDX1NURENfSU5MSU5FX18gJiYgX19HTlVDX1NURENfSU5MSU5FX18gXAorICAgICAgIDogKDE5OTkwMUwgPD0gX19TVERDX1ZFUlNJT05fXyBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1hZGQtb2Uta2VybmVsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtYWRkLW9lLWtlcm5lbC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI4OTE2Yy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1hZGQtb2Uta2VybmVsLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotRnJvbSA3YWI1NzZhN2M2MTQwNmI3ZTYzNzM5ZDFiMTEwMTdhZTMzNmI5MDA4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+Ci1EYXRlOiBNb24sIDMgTWFyIDIwMTQgMDM6MzQ6NDggLTA1MDAKLVN1YmplY3Q6IFtQQVRDSF0gZ3J1Yi5kLzEwX2xpbnV4LmluOiBhZGQgb2UncyBrZXJuZWwgbmFtZQotCi1PdXIga2VybmVsJ3MgbmFtZSBpcyBiekltYWdlLCB3ZSBuZWVkIGFkZCBpdCB0byBncnViLmQvMTBfbGludXguaW4gc28KLXRoYXQgdGhlIGdydWItbWtjb25maWcgYW5kIGdydWItaW5zdGFsbCBjYW4gd29yayBjb3JyZWN0bHkuCi0KLVdlIG9ubHkgbmVlZCBhZGQgdGhlIGJ6SW1hZ2UgdG8gdXRpbC9ncnViLmQvMTBfbGludXguaW4sIGJ1dCBhbHNvIGFkZCBpdAotdG8gdXRpbC9ncnViLmQvMjBfbGludXhfeGVuLmluIHRvIGtlZXAgY29tcGF0aWJpbGl0eS4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KLQotU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+Ci0tLS0KLSB1dGlsL2dydWIuZC8xMF9saW51eC5pbiAgICAgfCAgICA0ICsrLS0KLSB1dGlsL2dydWIuZC8yMF9saW51eF94ZW4uaW4gfCAgICAyICstCi0gMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS91dGlsL2dydWIuZC8xMF9saW51eC5pbiBiL3V0aWwvZ3J1Yi5kLzEwX2xpbnV4LmluCi1pbmRleCAxNDQwMmU4Li5jNThmNDE3IDEwMDY0NAotLS0tIGEvdXRpbC9ncnViLmQvMTBfbGludXguaW4KLSsrKyBiL3V0aWwvZ3J1Yi5kLzEwX2xpbnV4LmluCi1AQCAtMTUzLDExICsxNTMsMTEgQEAgRU9GCi0gbWFjaGluZT1gdW5hbWUgLW1gCi0gY2FzZSAieCRtYWNoaW5lIiBpbgotICAgICB4aT84NiB8IHh4ODZfNjQpCi0tCWxpc3Q9YGZvciBpIGluIC9ib290L3ZtbGludXotKiAvdm1saW51ei0qIC9ib290L2tlcm5lbC0qIDsgZG8KLSsJbGlzdD1gZm9yIGkgaW4gL2Jvb3QvYnpJbWFnZS0qIC9iekltYWdlLSogL2Jvb3Qvdm1saW51ei0qIC92bWxpbnV6LSogL2Jvb3Qva2VybmVsLSogOyBkbwotICAgICAgICAgICAgICAgICAgIGlmIGdydWJfZmlsZV9pc19ub3RfZ2FyYmFnZSAiJGkiIDsgdGhlbiBlY2hvIC1uICIkaSAiIDsgZmkKLSAgICAgICAgICAgICAgIGRvbmVgIDs7Ci0gICAgICopIAotLQlsaXN0PWBmb3IgaSBpbiAvYm9vdC92bWxpbnV6LSogL2Jvb3Qvdm1saW51eC0qIC92bWxpbnV6LSogL3ZtbGludXgtKiAvYm9vdC9rZXJuZWwtKiA7IGRvCi0rCWxpc3Q9YGZvciBpIGluIC9ib290L2J6SW1hZ2UtKiAvYm9vdC92bWxpbnV6LSogL2Jvb3Qvdm1saW51eC0qIC9iekltYWdlLSogL3ZtbGludXotKiAvdm1saW51eC0qIC9ib290L2tlcm5lbC0qIDsgZG8KLSAgICAgICAgICAgICAgICAgICBpZiBncnViX2ZpbGVfaXNfbm90X2dhcmJhZ2UgIiRpIiA7IHRoZW4gZWNobyAtbiAiJGkgIiA7IGZpCi0gCSAgICAgZG9uZWAgOzsKLSBlc2FjCi1kaWZmIC0tZ2l0IGEvdXRpbC9ncnViLmQvMjBfbGludXhfeGVuLmluIGIvdXRpbC9ncnViLmQvMjBfbGludXhfeGVuLmluCi1pbmRleCAxZDk0NTAyLi5iMmRlY2YzIDEwMDY0NAotLS0tIGEvdXRpbC9ncnViLmQvMjBfbGludXhfeGVuLmluCi0rKysgYi91dGlsL2dydWIuZC8yMF9saW51eF94ZW4uaW4KLUBAIC0xMzgsNyArMTM4LDcgQEAgRU9GCi0gRU9GCi0gfQotIAotLWxpbnV4X2xpc3Q9YGZvciBpIGluIC9ib290L3ZtbGludVt4el0tKiAvdm1saW51W3h6XS0qIC9ib290L2tlcm5lbC0qOyBkbwotK2xpbnV4X2xpc3Q9YGZvciBpIGluIC9ib290L2J6SW1hZ2VbeHpdLSogL2J6SW1hZ2VbeHpdLSogL2Jvb3Qvdm1saW51W3h6XS0qIC92bWxpbnVbeHpdLSogL2Jvb3Qva2VybmVsLSo7IGRvCi0gICAgIGlmIGdydWJfZmlsZV9pc19ub3RfZ2FyYmFnZSAiJGkiOyB0aGVuCi0gICAgIAliYXNlbmFtZT0kKGJhc2VuYW1lICRpKQotIAl2ZXJzaW9uPSQoZWNobyAkYmFzZW5hbWUgfCBzZWQgLWUgInMsXlteMC05XSotLCxnIikKLS0tIAotMS43LjEwLjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtZml4LWVuYWJsZV9leGVjdXRlX3N0YWNrLWNoZWNrLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtZml4LWVuYWJsZV9leGVjdXRlX3N0YWNrLWNoZWNrLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmYzYzFjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi0yLjAwLWZpeC1lbmFibGVfZXhlY3V0ZV9zdGFjay1jaGVjay5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi0KLVRoaXMgcGF0Y2ggYXZvaWRzIHRoaXMgY29uZmlndXJlIGZhaWx1cmUKLQotY29uZmlndXJlOjIwMzA2OiBjaGVja2luZyB3aGV0aGVyIGBjY2FjaGUgaTU4Ni1wb2t5LWxpbnV4LWdjYyAgLW0zMiAgICAtbWFyY2g9Y29yZTIgLW1zc2UzIC1tdHVuZT1nZW5lcmljIC1tZnBtYXRoPXNzZSAtLXN5c3Jvb3Q9L2J1aWxkZGlzay9idWlsZC9idWlsZDAvdG1wL3N5c3Jvb3RzL2VtZW5sb3cnIGdlbmVyYXRlcyBjYWxscyB0byBgX19lbmFibGVfZXhlY3V0ZV9zdGFjaygpJwotY29uZmlndXJlOjIwMzIwOiBjY2FjaGUgaTU4Ni1wb2t5LWxpbnV4LWdjYyAgLW0zMiAgICAtbWFyY2g9Y29yZTIgLW1zc2UzIC1tdHVuZT1nZW5lcmljIC1tZnBtYXRoPXNzZSAtLXN5c3Jvb3Q9L2J1aWxkZGlzay9idWlsZC9idWlsZDAvdG1wL3N5c3Jvb3RzL2VtZW5sb3cgLU8yIC1waXBlIC1nIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAtV2FsbCAtVyAtV3NoYWRvdyAtV3BvaW50ZXItYXJpdGggLVdtaXNzaW5nLXByb3RvdHlwZXMgLVd1bmRlZiAtV3N0cmljdC1wcm90b3R5cGVzIC1nIC1mYWxpZ24tanVtcHM9MSAtZmFsaWduLWxvb3BzPTEgLWZhbGlnbi1mdW5jdGlvbnM9MSAtbW5vLW1teCAtbW5vLXNzZSAtbW5vLXNzZTIgLW1uby0zZG5vdyAtbWZwbWF0aD0zODcgLWZuby1kd2FyZjItY2ZpLWFzbSAtbTMyIC1mbm8tc3RhY2stcHJvdGVjdG9yIC1tbm8tc3RhY2stYXJnLXByb2JlIC1XZXJyb3IgLVduby10cmFtcG9saW5lcyAtZmFsaWduLWxvb3BzPTEgLVMgY29uZnRlc3QuYwotY29uZnRlc3QuYzozMDg6NjogZXJyb3I6IG5vIHByZXZpb3VzIHByb3RvdHlwZSBmb3IgJ2cnIFstV2Vycm9yPW1pc3NpbmctcHJvdG90eXBlc10KLWNjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCi1jb25maWd1cmU6MjAzMjM6ICQ/ID0gMQotY29uZmlndXJlOjIwMzI3OiBlcnJvcjogY2NhY2hlIGk1ODYtcG9reS1saW51eC1nY2MgIC1tMzIgICAgLW1hcmNoPWNvcmUyIC1tc3NlMyAtbXR1bmU9Z2VuZXJpYyAtbWZwbWF0aD1zc2UgLS1zeXNyb290PS9idWlsZGRpc2svYnVpbGQvYnVpbGQwL3RtcC9zeXNyb290cy9lbWVubG93IGZhaWxlZCB0byBwcm9kdWNlIGFzc2VtYmx5IGNvZGUKLQotU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KLTIwMTIvMDQvMTMKLQotSW5kZXg6IGdydWItMi4wMC9hY2luY2x1ZGUubTQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBncnViLTIuMDAub3JpZy9hY2luY2x1ZGUubTQKLSsrKyBncnViLTIuMDAvYWNpbmNsdWRlLm00Ci1AQCAtMzE3LDYgKzMxNyw3IEBAIGRubCBDaGVjayBpZiB0aGUgQyBjb21waWxlciBnZW5lcmF0ZXMgY2EKLSBBQ19ERUZVTihbZ3J1Yl9DSEVDS19FTkFCTEVfRVhFQ1VURV9TVEFDS10sWwotIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBgJENDJyBnZW5lcmF0ZXMgY2FsbHMgdG8gYF9fZW5hYmxlX2V4ZWN1dGVfc3RhY2soKSddKQotIEFDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfU09VUkNFKFtbCi0rdm9pZCBnIChpbnQpOwotIHZvaWQgZiAoaW50ICgqcCkgKHZvaWQpKTsKLSB2b2lkIGcgKGludCBpKQotIHsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi0yLjAwLWZwbWF0aC1zc2UtMzg3LWZpeC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi0yLjAwLWZwbWF0aC1zc2UtMzg3LWZpeC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQzMGQ5NC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1mcG1hdGgtc3NlLTM4Ny1maXgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IHBlbmRpbmcKLQotVGhpcyBwYXRjaCBmaXhlcyB0aGlzIGNvbmZpZ3VyZSBpc3N1ZSBmb3IgZ3J1YiB3aGVuIC1tZnBtYXRoPXNzZSBpcyBpbiB0aGUgZ2NjIHBhcmFtZXRlcnMuCi0KLWNvbmZpZ3VyZToyMDU3NDogaTU4Ni1wb2t5LWxpbnV4LWdjYyAgLW0zMiAgICAtbWFyY2g9Y29yZTIgLW1zc2UzIC1tdHVuZT1nZW5lcmljIC1tZnBtYXRoPXNzZSAtLXN5c3Jvb3Q9L3Vzci9sb2NhbC9kZXYveW9jdG8vZ3J1YnRlc3QyL2J1aWxkL3RtcC9zeXNyb290cy9lbWVubG93IC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtZyAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgLVdhbGwgLVcgLVdzaGFkb3cgLVdwb2ludGVyLWFyaXRoIC1XbWlzc2luZy1wcm90b3R5cGVzIC1XdW5kZWYgLVdzdHJpY3QtcHJvdG90eXBlcyAtZyAtZmFsaWduLWp1bXBzPTEgLWZhbGlnbi1sb29wcz0xIC1mYWxpZ24tZnVuY3Rpb25zPTEgLW1uby1tbXggLW1uby1zc2UgLW1uby1zc2UyIC1tbm8tM2Rub3cgLWZuby1kd2FyZjItY2ZpLWFzbSAtbTMyIC1mbm8tc3RhY2stcHJvdGVjdG9yIC1tbm8tc3RhY2stYXJnLXByb2JlIC1XZXJyb3IgLW5vc3RkbGliIC1XbCwtLWRlZnN5bSxfX19tYWluPTB4ODEwMCAgLVdhbGwgLVcgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZSAgLURHUlVCX01BQ0hJTkVfUENCSU9TPTEgLURHUlVCX01BQ0hJTkU9STM4Nl9QQyAtV2wsLU8xIC1XbCwtLWhhc2gtc3R5bGU9Z251IC1XbCwtLWFzLW5lZWRlZCBjb25mdGVzdC5jICA+JjUKLWNvbmZ0ZXN0LmM6MTowOiBlcnJvcjogU1NFIGluc3RydWN0aW9uIHNldCBkaXNhYmxlZCwgdXNpbmcgMzg3IGFyaXRobWV0aWNzIFstV2Vycm9yXQotY2MxOiBhbGwgd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMKLQotU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KLTIwMTIvMDQvMTMKLQotSW5kZXg6IGdydWItMS45OS9jb25maWd1cmUuYWMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBncnViLTEuOTkub3JpZy9jb25maWd1cmUuYWMKLSsrKyBncnViLTEuOTkvY29uZmlndXJlLmFjCi1AQCAtMzc4LDcgKzM3OCw3IEBAIGlmIHRlc3QgIngkdGFyZ2V0X2NwdSIgPSB4aTM4NjsgdGhlbgotIAotICAgIyBTb21lIHRvb2xjaGFpbnMgZW5hYmxlIHRoZXNlIGZlYXR1cmVzIGJ5IGRlZmF1bHQsIGJ1dCB0aGV5IG5lZWQKLSAgICMgcmVnaXN0ZXJzIHRoYXQgYXJlbid0IHNldCB1cCBwcm9wZXJseSBpbiBHUlVCLgotLSAgVEFSR0VUX0NGTEFHUz0iJFRBUkdFVF9DRkxBR1MgLW1uby1tbXggLW1uby1zc2UgLW1uby1zc2UyIC1tbm8tM2Rub3ciCi0rICBUQVJHRVRfQ0ZMQUdTPSIkVEFSR0VUX0NGTEFHUyAtbW5vLW1teCAtbW5vLXNzZSAtbW5vLXNzZTIgLW1uby0zZG5vdyAtbWZwbWF0aD0zODciCi0gZmkKLSAKLSAjIEJ5IGRlZmF1bHQsIEdDQyA0LjQgZ2VuZXJhdGVzIC5laF9mcmFtZSBzZWN0aW9ucyBjb250YWluaW5nIHVud2luZApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWVmaS1hbGxvdy1hLWNvbXBpbGF0aW9uLXdpdGhvdXQtbWNtb2RlbC1sYXJnZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1lZmktYWxsb3ctYS1jb21waWxhdGlvbi13aXRob3V0LW1jbW9kZWwtbGFyZ2UucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ODhmY2EuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWVmaS1hbGxvdy1hLWNvbXBpbGF0aW9uLXdpdGhvdXQtbWNtb2RlbC1sYXJnZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi1BbGxvdyBhIGNvbXBpbGF0aW9uIHdpdGhvdXQgLW1jbW9kZWw9bGFyZ2UKLQotSXQncyBwcm92aWRlZCBieSBWbGFkaW1pciBTZXJiaW5lbmtvLCBhbmQgaGUgd2lsbCBjb21taXQKLWl0IHVwc3RyZWFtIHNvIGl0IHNob3VsZCBiZSBiYWNrcG9ydCBwYXRjaC4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi1TaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgotCi0tLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggOWY4ZmI4YS4uMmM1ZTZlZCAxMDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFjCi1AQCAtNzIzLDkgKzcyMyw3IEBAIGlmIHRlc3QgIiR0YXJnZXRfY3B1IiA9IHg4Nl82NDsgdGhlbgotIAkJICAgICAgW2dydWJfY3ZfY2NfbWNtb2RlbD15ZXNdLAotIAkJICAgICAgW2dydWJfY3ZfY2NfbWNtb2RlbD1ub10pCi0gICBdKQotLSAgaWYgdGVzdCAieCRncnViX2N2X2NjX21jbW9kZWwiID0geG5vOyB0aGVuCi0tICAgIEFDX01TR19FUlJPUihbLW1jbW9kZWw9bGFyZ2Ugbm90IHN1cHBvcnRlZC4gVXBncmFkZSB5b3VyIGdjYy5dKQotLSAgZWxzZQotKyAgaWYgdGVzdCAieCRncnViX2N2X2NjX21jbW9kZWwiID0geHllczsgdGhlbgotICAgICBUQVJHRVRfQ0ZMQUdTPSIkVEFSR0VUX0NGTEFHUyAtbWNtb2RlbD1sYXJnZSIKLSAgIGZpCi0gZmkKLWRpZmYgLS1naXQgYS9ncnViLWNvcmUva2Vybi9lZmkvbW0uYyBiL2dydWItY29yZS9rZXJuL2VmaS9tbS5jCi1pbmRleCAxNDA5YjVkLi42ZTlkYWNlIDEwMDY0NAotLS0tIGEvZ3J1Yi1jb3JlL2tlcm4vZWZpL21tLmMKLSsrKyBiL2dydWItY29yZS9rZXJuL2VmaS9tbS5jCi1AQCAtMzIsNiArMzIsMTIgQEAKLSAjZGVmaW5lIEJZVEVTX1RPX1BBR0VTKGJ5dGVzKQkoKChieXRlcykgKyAweGZmZikgPj4gMTIpCi0gI2RlZmluZSBQQUdFU19UT19CWVRFUyhwYWdlcykJKChwYWdlcykgPDwgMTIpCi0KLSsjaWYgZGVmaW5lZCAoX19jb2RlX21vZGVsX2xhcmdlX18pIHx8ICFkZWZpbmVkIChfX3g4Nl82NF9fKQotKyNkZWZpbmUgTUFYX1VTQUJMRV9BRERSRVNTIDB4ZmZmZmZmZmYKLSsjZWxzZQotKyNkZWZpbmUgTUFYX1VTQUJMRV9BRERSRVNTIDB4N2ZmZmZmZmYKLSsjZW5kaWYKLSsKLSAvKiBUaGUgc2l6ZSBvZiBhIG1lbW9yeSBtYXAgb2J0YWluZWQgZnJvbSB0aGUgZmlybXdhcmUuIFRoaXMgbXVzdCBiZQotICAgIGEgbXVsdGlwbGllciBvZiA0S0IuICAqLwotICNkZWZpbmUgTUVNT1JZX01BUF9TSVpFCTB4MzAwMAotQEAgLTU4LDcgKzY0LDcgQEAgZ3J1Yl9lZmlfYWxsb2NhdGVfcGFnZXMgKGdydWJfZWZpX3BoeXNpY2FsX2FkZHJlc3NfdCBhZGRyZXNzLAotCi0gI2lmIDEKLSAgIC8qIExpbWl0IHRoZSBtZW1vcnkgYWNjZXNzIHRvIGxlc3MgdGhhbiA0R0IgZm9yIDMyLWJpdCBwbGF0Zm9ybXMuICAqLwotLSAgaWYgKGFkZHJlc3MgPiAweGZmZmZmZmZmKQotKyAgaWYgKGFkZHJlc3MgPiBNQVhfVVNBQkxFX0FERFJFU1MpCi0gICAgIHJldHVybiAwOwotICNlbmRpZgotCi1AQCAtNjYsNyArNzIsNyBAQCBncnViX2VmaV9hbGxvY2F0ZV9wYWdlcyAoZ3J1Yl9lZmlfcGh5c2ljYWxfYWRkcmVzc190IGFkZHJlc3MsCi0gICBpZiAoYWRkcmVzcyA9PSAwKQotICAgICB7Ci0gICAgICAgdHlwZSA9IEdSVUJfRUZJX0FMTE9DQVRFX01BWF9BRERSRVNTOwotLSAgICAgIGFkZHJlc3MgPSAweGZmZmZmZmZmOwotKyAgICAgIGFkZHJlc3MgPSBNQVhfVVNBQkxFX0FERFJFU1M7Ci0gICAgIH0KLSAgIGVsc2UKLSAgICAgdHlwZSA9IEdSVUJfRUZJX0FMTE9DQVRFX0FERFJFU1M7Ci1AQCAtODYsNyArOTIsNyBAQCBncnViX2VmaV9hbGxvY2F0ZV9wYWdlcyAoZ3J1Yl9lZmlfcGh5c2ljYWxfYWRkcmVzc190IGFkZHJlc3MsCi0gICAgIHsKLSAgICAgICAvKiBVZ2doLCB0aGUgYWRkcmVzcyAwIHdhcyBhbGxvY2F0ZWQuLi4gVGhpcyBpcyB0b28gYW5ub3lpbmcsCi0gCSBzbyByZWFsbG9jYXRlIGFub3RoZXIgb25lLiAgKi8KLS0gICAgICBhZGRyZXNzID0gMHhmZmZmZmZmZjsKLSsgICAgICBhZGRyZXNzID0gTUFYX1VTQUJMRV9BRERSRVNTOwotICAgICAgIHN0YXR1cyA9IGVmaV9jYWxsXzQgKGItPmFsbG9jYXRlX3BhZ2VzLCB0eXBlLCBHUlVCX0VGSV9MT0FERVJfREFUQSwgcGFnZXMsICZhZGRyZXNzKTsKLSAgICAgICBncnViX2VmaV9mcmVlX3BhZ2VzICgwLCBwYWdlcyk7Ci0gICAgICAgaWYgKHN0YXR1cyAhPSBHUlVCX0VGSV9TVUNDRVNTKQotQEAgLTMxOSw3ICszMjUsNyBAQCBmaWx0ZXJfbWVtb3J5X21hcCAoZ3J1Yl9lZmlfbWVtb3J5X2Rlc2NyaXB0b3JfdCAqbWVtb3J5X21hcCwKLSAgICAgewotICAgICAgIGlmIChkZXNjLT50eXBlID09IEdSVUJfRUZJX0NPTlZFTlRJT05BTF9NRU1PUlkKLSAjaWYgMQotLQkgICYmIGRlc2MtPnBoeXNpY2FsX3N0YXJ0IDw9IDB4ZmZmZmZmZmYKLSsJICAmJiBkZXNjLT5waHlzaWNhbF9zdGFydCA8PSBNQVhfVVNBQkxFX0FERFJFU1MKLSAjZW5kaWYKLSAJICAmJiBkZXNjLT5waHlzaWNhbF9zdGFydCArIFBBR0VTX1RPX0JZVEVTIChkZXNjLT5udW1fcGFnZXMpID4gMHgxMDAwMDAKLSAJICAmJiBkZXNjLT5udW1fcGFnZXMgIT0gMCkKLUBAIC0zMzcsOSArMzQzLDkgQEAgZmlsdGVyX21lbW9yeV9tYXAgKGdydWJfZWZpX21lbW9yeV9kZXNjcmlwdG9yX3QgKm1lbW9yeV9tYXAsCi0gI2lmIDEKLSAJICBpZiAoQllURVNfVE9fUEFHRVMgKGZpbHRlcmVkX2Rlc2MtPnBoeXNpY2FsX3N0YXJ0KQotIAkgICAgICArIGZpbHRlcmVkX2Rlc2MtPm51bV9wYWdlcwotLQkgICAgICA+IEJZVEVTX1RPX1BBR0VTICgweDEwMDAwMDAwMExMKSkKLSsJICAgICAgPiBCWVRFU19UT19QQUdFUyAoTUFYX1VTQUJMRV9BRERSRVNTKzFMTCkpCi0gCSAgICBmaWx0ZXJlZF9kZXNjLT5udW1fcGFnZXMKLS0JICAgICAgPSAoQllURVNfVE9fUEFHRVMgKDB4MTAwMDAwMDAwTEwpCi0rCSAgICAgID0gKEJZVEVTX1RPX1BBR0VTIChNQVhfVVNBQkxFX0FERFJFU1MrMUxMKQotIAkJIC0gQllURVNfVE9fUEFHRVMgKGZpbHRlcmVkX2Rlc2MtPnBoeXNpY2FsX3N0YXJ0KSk7Ci0gI2VuZGlmCi0KLWRpZmYgLS1naXQgYS9ncnViLWNvcmUva2Vybi94ODZfNjQvZGwuYyBiL2dydWItY29yZS9rZXJuL3g4Nl82NC9kbC5jCi1pbmRleCA2NWYwOWVmLi4xN2MxMjE1IDEwMDY0NAotLS0tIGEvZ3J1Yi1jb3JlL2tlcm4veDg2XzY0L2RsLmMKLSsrKyBiL2dydWItY29yZS9rZXJuL3g4Nl82NC9kbC5jCi1AQCAtMTAwLDE0ICsxMDAsMzIgQEAgZ3J1Yl9hcmNoX2RsX3JlbG9jYXRlX3N5bWJvbHMgKGdydWJfZGxfdCBtb2QsIHZvaWQgKmVoZHIpCi0gCQkgICAgYnJlYWs7Ci0KLSAJCSAgY2FzZSBSX1g4Nl82NF9QQzMyOgotLQkJICAgICphZGRyMzIgKz0gcmVsLT5yX2FkZGVuZCArIHN5bS0+c3RfdmFsdWUgLQotLQkJICAgICAgICAgICAgICAoRWxmNjRfWHdvcmQpIHNlZy0+YWRkciAtIHJlbC0+cl9vZmZzZXQ7Ci0rCQkgICAgewotKwkJICAgICAgZ3J1Yl9pbnQ2NF90IHZhbHVlOwotKwkJICAgICAgdmFsdWUgPSAoKGdydWJfaW50MzJfdCkgKmFkZHIzMikgKyByZWwtPnJfYWRkZW5kICsgc3ltLT5zdF92YWx1ZSAtCi0rCQkJKEVsZjY0X1h3b3JkKSBzZWctPmFkZHIgLSByZWwtPnJfb2Zmc2V0OwotKwkJICAgICAgaWYgKHZhbHVlICE9IChncnViX2ludDMyX3QpIHZhbHVlKQotKwkJCXJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfTU9EVUxFLCAicmVsb2NhdGlvbiBvdXQgb2YgcmFuZ2UiKTsKLSsJCSAgICAgICphZGRyMzIgPSB2YWx1ZTsKLSsJCSAgICB9Ci0gCQkgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICBjYXNlIFJfWDg2XzY0XzMyOgotKwkJICAgIHsKLSsJCSAgICAgIGdydWJfdWludDY0X3QgdmFsdWUgPSAqYWRkcjMyICsgcmVsLT5yX2FkZGVuZCArIHN5bS0+c3RfdmFsdWU7Ci0rCQkgICAgICBpZiAodmFsdWUgIT0gKGdydWJfdWludDMyX3QpIHZhbHVlKQotKwkJCXJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfTU9EVUxFLCAicmVsb2NhdGlvbiBvdXQgb2YgcmFuZ2UiKTsKLSsJCSAgICAgICphZGRyMzIgPSB2YWx1ZTsKLSsJCSAgICB9Ci0rCQkgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgY2FzZSBSX1g4Nl82NF8zMlM6Ci0tICAgICAgICAgICAgICAgICAgICAqYWRkcjMyICs9IHJlbC0+cl9hZGRlbmQgKyBzeW0tPnN0X3ZhbHVlOwotLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0rCQkgICAgewotKwkJICAgICAgZ3J1Yl9pbnQ2NF90IHZhbHVlID0gKChncnViX2ludDMyX3QpICphZGRyMzIpICsgcmVsLT5yX2FkZGVuZCArIHN5bS0+c3RfdmFsdWU7Ci0rCQkgICAgICBpZiAodmFsdWUgIT0gKGdydWJfaW50MzJfdCkgdmFsdWUpCi0rCQkJcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9NT0RVTEUsICJyZWxvY2F0aW9uIG91dCBvZiByYW5nZSIpOwotKwkJICAgICAgKmFkZHIzMiA9IHZhbHVlOwotKwkJICAgIH0KLSsJCSAgICBicmVhazsKLQotIAkJICBkZWZhdWx0OgotIAkJICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9OT1RfSU1QTEVNRU5URURfWUVULApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWVmaS1maXgtd2l0aC1nbGliYy0yLjIwLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWVmaS1maXgtd2l0aC1nbGliYy0yLjIwLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjEyNjI4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1lZmktZml4LXdpdGgtZ2xpYmMtMi4yMC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLUZyb20gZWI2MzY4ZTY1ZjY5ODhlZWJhZDI2Y2ViZGVjMDU3Zjc5N2JjZWI0MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgotRGF0ZTogVHVlLCA5IFNlcCAyMDE0IDAwOjAyOjMwIC0wNzAwCi1TdWJqZWN0OiBbUEFUQ0hdIEZpeCBidWlsZCB3aXRoIGdsaWJjIDIuMjAKLQotKiBncnViLWNvcmUva2Vybi9lbXUvaG9zdGZzLmM6IHNxdWFoZXMgYmVsb3cgd2FybmluZwotICB3YXJuaW5nOiAjd2FybmluZyAiX0JTRF9TT1VSQ0UgYW5kIF9TVklEX1NPVVJDRSBhcmUgZGVwcmVjYXRlZCwgdXNlIF9ERUZBVUxUX1NPVVJDRSIKLQotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLVNpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgotLS0tCi0gZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jIHwgICAgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jIGIvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jCi1pbmRleCAzY2IwODljLi5hNTFlZTMyIDEwMDY0NAotLS0tIGEvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jCi0rKysgYi9ncnViLWNvcmUva2Vybi9lbXUvaG9zdGZzLmMKLUBAIC0xNiw3ICsxNiw3IEBACi0gICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICogIGFsb25nIHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSAgKi8KLS0jZGVmaW5lIF9CU0RfU09VUkNFCi0rI2RlZmluZSBfREVGQVVMVF9TT1VSQ0UKLSAjaW5jbHVkZSA8Z3J1Yi9mcy5oPgotICNpbmNsdWRlIDxncnViL2ZpbGUuaD4KLSAjaW5jbHVkZSA8Z3J1Yi9kaXNrLmg+Ci0tLSAKLTEuNy45LjUKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWluc3RhbGwuaW4ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItaW5zdGFsbC5pbi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI2OTUxZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItaW5zdGFsbC5pbi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCi0KLU91ciB1c2Ugb2YgZ3J1Yi1pbnN0YWxsIGRvZXNuJ3QgcmVxdWlyZSB0aGUgLXggb3B0aW9uLCBzbyB3ZSBzaG91bGQgYmUKLWJlIGFibGUgbWFrZSB1c2Ugb2YgZ3JlcCB2ZXJzaW9ucyB0aGF0IGRvbid0IHN1cHBvcnQgaXQuCi0KLVNpZ25lZC1vZmYtYnk6IFRvbSBaYW51c3NpIDx0b20uemFudXNzaUBpbnRlbC5jb20+Ci0KLUluZGV4OiBncnViLTEuOTkvdXRpbC9ncnViLWluc3RhbGwuaW4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBncnViLTEuOTkub3JpZy91dGlsL2dydWItaW5zdGFsbC5pbgkyMDExLTA5LTA5IDIyOjM3OjIwLjA5MzkwNjY3OSAtMDUwMAotKysrIGdydWItMS45OS91dGlsL2dydWItaW5zdGFsbC5pbgkyMDExLTA5LTA5IDIyOjM3OjMwLjg1NDczNzg4MiAtMDUwMAotQEAgLTUxMCw3ICs1MTAsNyBAQAotIAotIGlmIFsgIngke2RldmFic3RyYWN0aW9uX21vZHVsZX0iID0gIngiIF0gOyB0aGVuCi0gICAgIGlmIFsgeCIke2luc3RhbGxfZGV2aWNlfSIgIT0geCBdOyB0aGVuCi0tICAgICAgaWYgZWNobyAiJHtpbnN0YWxsX2RldmljZX0iIHwgZ3JlcCAtcXggIiguKikiIDsgdGhlbgotKyAgICAgIGlmIGVjaG8gIiR7aW5zdGFsbF9kZXZpY2V9IiB8IGdyZXAgLXEgIiguKikiIDsgdGhlbgotICAgICAgICAgaW5zdGFsbF9kcml2ZT0iJHtpbnN0YWxsX2RldmljZX0iCi0gICAgICAgZWxzZQotICAgICAgICAgaW5zdGFsbF9kcml2ZT0iYCIkZ3J1Yl9wcm9iZSIgLS1kZXZpY2UtbWFwPSIke2RldmljZV9tYXB9IiAtLXRhcmdldD1kcml2ZSAtLWRldmljZSAiJHtpbnN0YWxsX2RldmljZX0iYCIgfHwgZXhpdCAxCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItbm8tdW51c2VkLXJlc3VsdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1uby11bnVzZWQtcmVzdWx0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2JkMDgzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1uby11bnVzZWQtcmVzdWx0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotU2lnbmVkLW9mZi1ieTogUmFkdSBNb2lzYW4gPHJhZHUubW9pc2FuQGludGVsLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1JIGhhZCBhbiBlcnJvciBiZWNhdXNlIG9mIGFuIHVudXNlZCByZXR1cm4gdmFsdWUgZm9yIHJlYWQoKS4KLUkgYWRkZWQgLVduby11bnVzZWQtcmVzdWx0LgotCi1JbmRleDogZ3J1Yi0yLjAwL2NvbmZpZ3VyZS5hYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdydWItMi4wMC5vcmlnL2NvbmZpZ3VyZS5hYwkyMDEyLTA4LTEzIDE2OjMyOjMzLjAwMDAwMDAwMCArMDMwMAotKysrIGdydWItMi4wMC9jb25maWd1cmUuYWMJMjAxMi0wOC0xMyAxNjozODoyMi4wMDAwMDAwMDAgKzAzMDAKLUBAIC0zOTQsNyArMzk0LDcgQEAKLSBMSUJTPSIiCi0gCi0gIyBkZWJ1ZyBmbGFncy4KLS1XQVJOX0ZMQUdTPSItV2FsbCAtVyAtV3NoYWRvdyAtV29sZC1zdHlsZS1kZWZpbml0aW9uIC1XcG9pbnRlci1hcml0aCAtV3VuZGVmIC1XZXh0cmEgLVdhZGRyZXNzIC1XYXR0cmlidXRlcyAtV2Nhc3QtYWxpZ24gLVdjaGFyLXN1YnNjcmlwdHMgLVdjb21tZW50IC1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMgLVdkaXNhYmxlZC1vcHRpbWl6YXRpb24gLVdkaXYtYnktemVybyAtV2VtcHR5LWJvZHkgLVdlbmRpZi1sYWJlbHMgLVdmbG9hdC1lcXVhbCAtV2Zvcm1hdC1leHRyYS1hcmdzIC1XZm9ybWF0LXNlY3VyaXR5IC1XZm9ybWF0LXkyayAtV2ltcGxpY2l0IC1XaW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb24gLVdpbXBsaWNpdC1pbnQgLVdpbml0LXNlbGYgLVdpbnQtdG8tcG9pbnRlci1jYXN0IC1XaW52YWxpZC1wY2ggLVdtYWluIC1XbWlzc2luZy1icmFjZXMgLVdtaXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyAtV21pc3NpbmctZm9ybWF0LWF0dHJpYnV0ZSAtV21pc3Npbmctbm9yZXR1cm4gLVdtdWx0aWNoYXIgLVdub25udWxsIC1Xb3ZlcmZsb3cgLVdwYXJlbnRoZXNlcyAtV3BvaW50ZXItYXJpdGggLVdwb2ludGVyLXRvLWludC1jYXN0IC1XcmV0dXJuLXR5cGUgLVdzZXF1ZW5jZS1wb2ludCAtV3NoYWRvdyAtV3NpZ24tY29tcGFyZSAtV3N0cmljdC1hbGlhc2luZyAtV3N3aXRjaCAtV3RyaWdyYXBocyAtV3VuZGVmIC1XdW5rbm93bi1wcmFnbWFzIC1XdW51c2VkIC1XdW51c2VkLWZ1bmN0aW9uIC1XdW51c2VkLWxhYmVsIC1XdW51c2VkLXBhcmFtZXRlciAtV3VudXNlZC12YWx1ZSAgLVd1bnVzZWQtdmFyaWFibGUgLVd2YXJpYWRpYy1tYWNyb3MgLVd2b2xhdGlsZS1yZWdpc3Rlci12YXIgLVd3cml0ZS1zdHJpbmdzIC1XbmVzdGVkLWV4dGVybnMgLVdzdHJpY3QtcHJvdG90eXBlcyAtV3BvaW50ZXItc2lnbiIKLStXQVJOX0ZMQUdTPSItV2FsbCAtVyAtV3NoYWRvdyAtV29sZC1zdHlsZS1kZWZpbml0aW9uIC1XcG9pbnRlci1hcml0aCAtV3VuZGVmIC1XZXh0cmEgLVdhZGRyZXNzIC1XYXR0cmlidXRlcyAtV2Nhc3QtYWxpZ24gLVdjaGFyLXN1YnNjcmlwdHMgLVdjb21tZW50IC1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMgLVdkaXNhYmxlZC1vcHRpbWl6YXRpb24gLVdkaXYtYnktemVybyAtV2VtcHR5LWJvZHkgLVdlbmRpZi1sYWJlbHMgLVdmbG9hdC1lcXVhbCAtV2Zvcm1hdC1leHRyYS1hcmdzIC1XZm9ybWF0LXNlY3VyaXR5IC1XZm9ybWF0LXkyayAtV2ltcGxpY2l0IC1XaW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb24gLVdpbXBsaWNpdC1pbnQgLVdpbml0LXNlbGYgLVdpbnQtdG8tcG9pbnRlci1jYXN0IC1XaW52YWxpZC1wY2ggLVdtYWluIC1XbWlzc2luZy1icmFjZXMgLVdtaXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyAtV21pc3NpbmctZm9ybWF0LWF0dHJpYnV0ZSAtV21pc3Npbmctbm9yZXR1cm4gLVdtdWx0aWNoYXIgLVdub25udWxsIC1Xb3ZlcmZsb3cgLVdwYXJlbnRoZXNlcyAtV3BvaW50ZXItYXJpdGggLVdwb2ludGVyLXRvLWludC1jYXN0IC1XcmV0dXJuLXR5cGUgLVdzZXF1ZW5jZS1wb2ludCAtV3NoYWRvdyAtV3NpZ24tY29tcGFyZSAtV3N0cmljdC1hbGlhc2luZyAtV3N3aXRjaCAtV3RyaWdyYXBocyAtV3VuZGVmIC1XdW5rbm93bi1wcmFnbWFzIC1XdW51c2VkIC1XdW51c2VkLWZ1bmN0aW9uIC1XdW51c2VkLWxhYmVsIC1XdW51c2VkLXBhcmFtZXRlciAtV3VudXNlZC12YWx1ZSAgLVd1bnVzZWQtdmFyaWFibGUgLVduby11bnVzZWQtcmVzdWx0IC1XdmFyaWFkaWMtbWFjcm9zIC1Xdm9sYXRpbGUtcmVnaXN0ZXItdmFyIC1Xd3JpdGUtc3RyaW5ncyAtV25lc3RlZC1leHRlcm5zIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdwb2ludGVyLXNpZ24iCi0gSE9TVF9DRkxBR1M9IiRIT1NUX0NGTEFHUyAkV0FSTl9GTEFHUyIKLSBUQVJHRVRfQ0ZMQUdTPSIkVEFSR0VUX0NGTEFHUyAkV0FSTl9GTEFHUyAtZyAtV3JlZHVuZGFudC1kZWNscyAtV21pc3NpbmctcHJvdG90eXBlcyAtV21pc3NpbmctZGVjbGFyYXRpb25zIgotIFRBUkdFVF9DQ0FTRkxBR1M9IiRUQVJHRVRfQ0NBU0ZMQUdTIC1nIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViMi1maXgtaW5pdHJkLXNpemUtYnVnLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViMi1maXgtaW5pdHJkLXNpemUtYnVnLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTE0ZjQ4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1YjItZml4LWluaXRyZC1zaXplLWJ1Zy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLUZyb20gOGZiYjE1MGE1Njk2NmVkZGU0ZGMwN2I4ZDAxYmU1ZWIxNDliNjVhYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IENvbGluIFdhdHNvbiA8Y2p3YXRzb25AdWJ1bnR1LmNvbT4KLURhdGU6IFN1biwgMjAgSmFuIDIwMTMgMjM6MDM6MzUgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAxLzFdICogZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L2xpbnV4LmMgKGdydWJfY21kX2luaXRyZCk6IERvbid0Ci0gYWRkIHRoZSBpbml0cmQgc2l6ZSB0byBhZGRyX21pbiwgc2luY2UgdGhlIGluaXRyZCB3aWxsIGJlIGFsbG9jYXRlZCBhZnRlcgotIHRoaXMgYWRkcmVzcy4KLQotY29tbWl0IDZhMGRlYmJkOTE2N2U4Zjc5Y2RlZjU0OTdhNzNkMjNlNTgwYzBjZDQgdXBzdHJlYW0KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi1TaWduZWQtb2ZmLWJ5OiBTaGFuIEhhaSA8c2hhbi5oYWlAd2luZHJpdmVyLmNvbT4KLS0tLQotIENoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgIHwgNiArKysrKysKLSBncnViLWNvcmUvbG9hZGVyL2kzODYvbGludXguYyB8IDMgKy0tCi0gMiBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKLWluZGV4IGMyZjQyZDUuLjQwY2I1MDggMTAwNjQ0Ci0tLS0gYS9DaGFuZ2VMb2cKLSsrKyBiL0NoYW5nZUxvZwotQEAgLTEsMyArMSw5IEBACi0rMjAxMy0wMS0yMCAgQ29saW4gV2F0c29uICA8Y2p3YXRzb25AdWJ1bnR1LmNvbT4KLSsKLSsJKiBncnViLWNvcmUvbG9hZGVyL2kzODYvbGludXguYyAoZ3J1Yl9jbWRfaW5pdHJkKTogRG9uJ3QgYWRkIHRoZQotKwlpbml0cmQgc2l6ZSB0byBhZGRyX21pbiwgc2luY2UgdGhlIGluaXRyZCB3aWxsIGJlIGFsbG9jYXRlZCBhZnRlcgotKwl0aGlzIGFkZHJlc3MuCi0rCi0gMjAxMi0wNy0wMiAgVmxhZGltaXIgU2VyYmluZW5rbyAgPHBoY29kZXJAZ21haWwuY29tPgotIAotIAkqIGdydWItY29yZS9uZXQvdGZ0cC5jIChhY2spOiBGaXggZW5kaWFubmVzcyBwcm9ibGVtLgotZGlmZiAtLWdpdCBhL2dydWItY29yZS9sb2FkZXIvaTM4Ni9saW51eC5jIGIvZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L2xpbnV4LmMKLWluZGV4IDYyMDg3Y2YuLmUyNDI1YzggMTAwNjQ0Ci0tLS0gYS9ncnViLWNvcmUvbG9hZGVyL2kzODYvbGludXguYwotKysrIGIvZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L2xpbnV4LmMKLUBAIC0xMDk4LDggKzEwOTgsNyBAQCBncnViX2NtZF9pbml0cmQgKGdydWJfY29tbWFuZF90IGNtZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCi0gICAgICB3b3JzZSB0aGFuIHRoYXQgb2YgTGludXggMi4zLnh4LCBzbyBhdm9pZCB0aGUgbGFzdCA2NGtiLiAgKi8KLSAgIGFkZHJfbWF4IC09IDB4MTAwMDA7Ci0gCi0tICBhZGRyX21pbiA9IChncnViX2FkZHJfdCkgcHJvdF9tb2RlX3RhcmdldCArIHByb3RfaW5pdF9zcGFjZQotLSAgICAgICAgICAgICArIHBhZ2VfYWxpZ24gKHNpemUpOwotKyAgYWRkcl9taW4gPSAoZ3J1Yl9hZGRyX3QpIHByb3RfbW9kZV90YXJnZXQgKyBwcm90X2luaXRfc3BhY2U7Ci0gCi0gICAvKiBQdXQgdGhlIGluaXRyZCBhcyBoaWdoIGFzIHBvc3NpYmxlLCA0S2lCIGFsaWduZWQuICAqLwotICAgYWRkciA9IChhZGRyX21heCAtIHNpemUpICYgfjB4RkZGOwotLS0gCi0xLjguNS4yLjIzMy5nOTMyZjdlNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWIyLXJlbW92ZS1zcGFyYzY0LXNldHVwLWZyb20teDg2LWJ1aWxkcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1YjItcmVtb3ZlLXNwYXJjNjQtc2V0dXAtZnJvbS14ODYtYnVpbGRzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTY4ZDNjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1YjItcmVtb3ZlLXNwYXJjNjQtc2V0dXAtZnJvbS14ODYtYnVpbGRzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotU3ViamVjdDogW1BBVENIXSBncnViMjogcmVtb3ZlIGdydWItc3BhcmM2NC1zZXR1cCBmcm9tIHg4NiBidWlsZHMKLQotKiByZW1vdmUgdGhlIGdydWItc3BhcmM2NC1zZXR1cCBmaWxlcyBmcm9tIHRoZSB4ODYgYnVpbGRzLgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQotCi1TaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgotU2lnbmVkLW9mZi1ieTogTWluZ2xpIFl1IDxtaW5nbGkueXVAd2luZHJpdmVyLmNvbT4KLS0tLQotIE1ha2VmaWxlLnV0aWwuZGVmIHwgMTggLS0tLS0tLS0tLS0tLS0tLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDE4IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvTWFrZWZpbGUudXRpbC5kZWYgYi9NYWtlZmlsZS51dGlsLmRlZgotaW5kZXggYjgwMTg3Yy4uYTY3MGNmMiAxMDA2NDQKLS0tLSBhL01ha2VmaWxlLnV0aWwuZGVmCi0rKysgYi9NYWtlZmlsZS51dGlsLmRlZgotQEAgLTMyMSwyNCArMzIxLDYgQEAgcHJvZ3JhbSA9IHsKLSB9OwotIAotIHByb2dyYW0gPSB7Ci0tICBuYW1lID0gZ3J1Yi1zcGFyYzY0LXNldHVwOwotLSAgaW5zdGFsbGRpciA9IHNiaW47Ci0tICBtYW5zZWN0aW9uID0gODsKLS0gIGNvbW1vbiA9IHV0aWwvZ3J1Yi1zZXR1cC5jOwotLSAgY29tbW9uID0gdXRpbC9sdm0uYzsKLS0gIGNvbW1vbiA9IGdydWItY29yZS9rZXJuL2VtdS9hcmdwX2NvbW1vbi5jOwotLSAgY29tbW9uID0gZ3J1Yi1jb3JlL2xpYi9yZWVkX3NvbG9tb24uYzsKLS0gIGNvbW1vbiA9IHV0aWwvaWVlZTEyNzUvb2ZwYXRoLmM7Ci0tCi0tICBsZGFkZCA9IGxpYmdydWJtb2RzLmE7Ci0tICBsZGFkZCA9IGxpYmdydWJrZXJuLmE7Ci0tICBsZGFkZCA9IGxpYmdydWJnY3J5LmE7Ci0tICBsZGFkZCA9IGdydWItY29yZS9nbnVsaWIvbGliZ251LmE7Ci0tICBsZGFkZCA9ICckKExJQklOVEwpICQoTElCREVWTUFQUEVSKSAkKExJQlVUSUwpICQoTElCWkZTKSAkKExJQk5WUEFJUikgJChMSUJHRU9NKSc7Ci0tICBjcHBmbGFncyA9ICctREdSVUJfU0VUVVBfU1BBUkM2ND0xJzsKLS19OwotLQotLXByb2dyYW0gPSB7Ci0gICBuYW1lID0gZ3J1Yi1vZnBhdGhuYW1lOwotICAgaW5zdGFsbGRpciA9IHNiaW47Ci0gICBtYW5zZWN0aW9uID0gODsKLS0tIAotMi44LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9yZW1vdmUtZ2V0cy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvcmVtb3ZlLWdldHMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2M2Y3ODQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9yZW1vdmUtZ2V0cy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLUlTTyBDMTEgcmVtb3ZlcyB0aGUgc3BlY2lmaWNhdGlvbiBvZiBnZXRzKCkgZnJvbSB0aGUgQyBsYW5ndWFnZSwgZWdsaWJjIDIuMTYrIHJlbW92ZWQgaXQKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi1JbmRleDogZ3J1Yi0xLjk5L2dydWItY29yZS9nbnVsaWIvc3RkaW8uaW4uaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdydWItMS45OS5vcmlnL2dydWItY29yZS9nbnVsaWIvc3RkaW8uaW4uaAkyMDEwLTEyLTAxIDA2OjQ1OjQzLjAwMDAwMDAwMCAtMDgwMAotKysrIGdydWItMS45OS9ncnViLWNvcmUvZ251bGliL3N0ZGlvLmluLmgJMjAxMi0wNy0wNCAxMjoyNTowMi4wNTcwOTkxMDcgLTA3MDAKLUBAIC0xNDAsOCArMTQwLDEwIEBACi0gLyogSXQgaXMgdmVyeSByYXJlIHRoYXQgdGhlIGRldmVsb3BlciBldmVyIGhhcyBmdWxsIGNvbnRyb2wgb2Ygc3RkaW4sCi0gICAgc28gYW55IHVzZSBvZiBnZXRzIHdhcnJhbnRzIGFuIHVuY29uZGl0aW9uYWwgd2FybmluZy4gIEFzc3VtZSBpdCBpcwotICAgIGFsd2F5cyBkZWNsYXJlZCwgc2luY2UgaXQgaXMgcmVxdWlyZWQgYnkgQzg5LiAgKi8KLSsjaWYgZGVmaW5lZCBnZXRzCi0gI3VuZGVmIGdldHMKLSBfR0xfV0FSTl9PTl9VU0UgKGdldHMsICJnZXRzIGlzIGEgc2VjdXJpdHkgaG9sZSAtIHVzZSBmZ2V0cyBpbnN0ZWFkIik7Ci0rI2VuZGlmCi0gCi0gI2lmIEBHTlVMSUJfRk9QRU5ACi0gIyBpZiBAUkVQTEFDRV9GT1BFTkAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi1lZmlfMi4wMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi1lZmlfMi4wMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEyZjFkNy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItZWZpXzIuMDAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi1yZXF1aXJlIGdydWIyLmluYwotCi1ERVBFTkRTX2NsYXNzLXRhcmdldCA9ICJncnViLWVmaS1uYXRpdmUiCi1SREVQRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgPSAiZGlmZnV0aWxzIGZyZWV0eXBlIgotUFIgPSAicjMiCi0KLVNSQ19VUkkgKz0gIiBcCi0gICAgICAgICAgIGZpbGU6Ly9jZmcgXAotICAgICAgICAgICIKLQotUyA9ICIke1dPUktESVJ9L2dydWItJHtQVn0iCi0KLSMgRGV0ZXJtaW5lIHRoZSB0YXJnZXQgYXJjaCBmb3IgdGhlIGdydWIgbW9kdWxlcwotcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKLSAgICBpbXBvcnQgcmUKLSAgICB0YXJnZXQgPSBkLmdldFZhcignVEFSR0VUX0FSQ0gnKQotICAgIGlmIHRhcmdldCA9PSAieDg2XzY0IjoKLSAgICAgICAgZ3J1YnRhcmdldCA9ICd4ODZfNjQnCi0gICAgICAgIGdydWJpbWFnZSA9ICJncnViLWVmaS1ib290eDY0LmVmaSIKLSAgICBlbGlmIHJlLm1hdGNoKCdpLjg2JywgdGFyZ2V0KToKLSAgICAgICAgZ3J1YnRhcmdldCA9ICdpMzg2JwotICAgICAgICBncnViaW1hZ2UgPSAiZ3J1Yi1lZmktYm9vdGlhMzIuZWZpIgotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJncnViLWVmaSBpcyBpbmNvbXBhdGlibGUgd2l0aCB0YXJnZXQgJXMiICUgdGFyZ2V0KQotICAgIGQuc2V0VmFyKCJHUlVCX1RBUkdFVCIsIGdydWJ0YXJnZXQpCi0gICAgZC5zZXRWYXIoIkdSVUJfSU1BR0UiLCBncnViaW1hZ2UpCi19Ci0KLWluaGVyaXQgZGVwbG95Ci0KLUNBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX0hFTFAyTUFOPSIKLUVYVFJBX09FQ09ORiA9ICItLXdpdGgtcGxhdGZvcm09ZWZpIC0tZGlzYWJsZS1ncnViLW1rZm9udCBcCi0gICAgICAgICAgICAgICAgLS1lbmFibGUtZWZpZW11PW5vIC0tcHJvZ3JhbS1wcmVmaXg9JycgXAotICAgICAgICAgICAgICAgIC0tZW5hYmxlLWxpYmx6bWE9bm8gLS1lbmFibGUtZGV2aWNlLW1hcHBlcj1ubyAtLWVuYWJsZS1saWJ6ZnM9bm8gXAotICAgICAgICAgICAgICAgIC0tZW5hYmxlLWxhcmdlZmlsZSBcCi0iCi0KLSMgbGRtLmM6MTE0Ojc6IGVycm9yOiB0cmFtcG9saW5lIGdlbmVyYXRlZCBmb3IgbmVzdGVkIGZ1bmN0aW9uICdob29rJyBbLVdlcnJvcj10cmFtcG9saW5lc10KLSMgYW5kIG1hbnkgb3RoZXIgcGxhY2VzIGluIHRoZSBncnViIGNvZGUgd2hlbiBjb21waWxlZCB3aXRoIHNvbWUgbmF0aXZlIGdjYyBjb21waWxlcnMgKHNwZWNpZmljYWxseSwgZ2VudG9vKQotQ0ZMQUdTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC1Xbm8tZXJyb3I9dHJhbXBvbGluZXMiCi0KLWRvX2luc3RhbGxfY2xhc3MtbmF0aXZlKCkgewotCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQotCWluc3RhbGwgLW0gNzU1IGdydWItbWtpbWFnZSAke0R9JHtiaW5kaXJ9Ci19Ci0KLUdSVUJfQlVJTERJTiA/PSAiYm9vdCBsaW51eCBleHQyIGZhdCBzZXJpYWwgcGFydF9tc2RvcyBwYXJ0X2dwdCBub3JtYWwgZWZpX2dvcCBpc285NjYwIHNlYXJjaCIKLQotZG9fZGVwbG95KCkgewotCSMgU2VhcmNoIGZvciB0aGUgZ3J1Yi5jZmcgb24gdGhlIGxvY2FsIGJvb3QgbWVkaWEgYnkgdXNpbmcgdGhlCi0JIyBidWlsdCBpbiBjZmcgZmlsZSBwcm92aWRlZCB2aWEgdGhpcyByZWNpcGUKLQlncnViLW1raW1hZ2UgLWMgLi4vY2ZnIC1wIC9FRkkvQk9PVCAtZCAuL2dydWItY29yZS8gXAotCSAgICAgICAgICAgICAgIC1PICR7R1JVQl9UQVJHRVR9LWVmaSAtbyAuLyR7R1JVQl9JTUFHRX0gXAotCSAgICAgICAgICAgICAgICR7R1JVQl9CVUlMRElOfQotCWluc3RhbGwgLW0gNjQ0ICR7Qn0vJHtHUlVCX0lNQUdFfSAke0RFUExPWURJUn0KLX0KLQotZG9fZGVwbG95X2NsYXNzLW5hdGl2ZSgpIHsKLQk6Ci19Ci0KLWFkZHRhc2sgZGVwbG95IGFmdGVyIGRvX2luc3RhbGwgYmVmb3JlIGRvX2J1aWxkCi0KLUZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vZ3J1Yi8ke0dSVUJfVEFSR0VUfS1lZmkgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ3J1YiBcCi0gICAgICAgICAgICAgICAgIgotCi0jIDY0LWJpdCBiaW5hcmllcyBhcmUgZXhwZWN0ZWQgZm9yIHRoZSBib290bG9hZGVyIHdpdGggYW4geDMyIHVzZXJsYW5kCi1JTlNBTkVfU0tJUF8ke1BOfV9hcHBlbmRfbGludXgtZ251eDMyID0gIiBhcmNoIgotSU5TQU5FX1NLSVBfJHtQTn0tZGJnX2FwcGVuZF9saW51eC1nbnV4MzIgPSAiIGFyY2giCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLWVmaV8yLjAyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLWVmaV8yLjAyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyOGRhMTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItZWZpXzIuMDIuYmIKQEAgLTAsMCArMSw4MiBAQAorcmVxdWlyZSBncnViMi5pbmMKKworR1JVQlBMQVRGT1JNID0gImVmaSIKKworREVQRU5EU19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBncnViLWVmaS1uYXRpdmUiCitSREVQRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgPSAiZGlmZnV0aWxzIGZyZWV0eXBlIgorCitTUkNfVVJJICs9ICIgXAorICAgICAgICAgICBmaWxlOi8vY2ZnIFwKKyAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9ncnViLSR7UFZ9IgorCisjIERldGVybWluZSB0aGUgdGFyZ2V0IGFyY2ggZm9yIHRoZSBncnViIG1vZHVsZXMKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgaW1wb3J0IHJlCisgICAgdGFyZ2V0ID0gZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJykKKyAgICBpZiB0YXJnZXQgPT0gIng4Nl82NCI6CisgICAgICAgIGdydWJ0YXJnZXQgPSAneDg2XzY0JworICAgICAgICBncnViaW1hZ2UgPSAiZ3J1Yi1lZmktYm9vdHg2NC5lZmkiCisgICAgZWxpZiByZS5tYXRjaCgnaS44NicsIHRhcmdldCk6CisgICAgICAgIGdydWJ0YXJnZXQgPSAnaTM4NicKKyAgICAgICAgZ3J1YmltYWdlID0gImdydWItZWZpLWJvb3RpYTMyLmVmaSIKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiZ3J1Yi1lZmkgaXMgaW5jb21wYXRpYmxlIHdpdGggdGFyZ2V0ICVzIiAlIHRhcmdldCkKKyAgICBkLnNldFZhcigiR1JVQl9UQVJHRVQiLCBncnVidGFyZ2V0KQorICAgIGQuc2V0VmFyKCJHUlVCX0lNQUdFIiwgZ3J1YmltYWdlKQorfQorCitpbmhlcml0IGRlcGxveQorCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9IRUxQMk1BTj0iCitFWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLWVmaWVtdT1ubyIKKworIyBsZG0uYzoxMTQ6NzogZXJyb3I6IHRyYW1wb2xpbmUgZ2VuZXJhdGVkIGZvciBuZXN0ZWQgZnVuY3Rpb24gJ2hvb2snIFstV2Vycm9yPXRyYW1wb2xpbmVzXQorIyBhbmQgbWFueSBvdGhlciBwbGFjZXMgaW4gdGhlIGdydWIgY29kZSB3aGVuIGNvbXBpbGVkIHdpdGggc29tZSBuYXRpdmUgZ2NjIGNvbXBpbGVycyAoc3BlY2lmaWNhbGx5LCBnZW50b28pCitDRkxBR1NfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgLVduby1lcnJvcj10cmFtcG9saW5lcyIKKworZG9faW5zdGFsbF9jbGFzcy1uYXRpdmUoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSA3NTUgZ3J1Yi1ta2ltYWdlICR7RH0ke2JpbmRpcn0KK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgeworICAgICMgUmVtb3ZlIGJ1aWxkIGhvc3QgcmVmZXJlbmNlcy4uLgorICAgIGZpbmQgIiR7RH0iIC1uYW1lIG1vZGluZm8uc2ggLXR5cGUgZiAtZXhlYyBcCisgICAgICAgIHNlZCAtaSBcCisgICAgICAgIC1lICdzLC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0sLGcnIFwKKyAgICAgICAgLWUgJ3N8JHtERUJVR19QUkVGSVhfTUFQfXx8ZycgXAorICAgICAgICAtZSAnczoke1JFQ0lQRV9TWVNST09UX05BVElWRX06OmcnIFwKKyAgICAgICAge30gKworfQorCitHUlVCX0JVSUxESU4gPz0gImJvb3QgbGludXggZXh0MiBmYXQgc2VyaWFsIHBhcnRfbXNkb3MgcGFydF9ncHQgbm9ybWFsIFwKKyAgICAgICAgICAgICAgICAgZWZpX2dvcCBpc285NjYwIHNlYXJjaCBsb2FkZW52IHRlc3QiCisKK2RvX2RlcGxveSgpIHsKKwkjIFNlYXJjaCBmb3IgdGhlIGdydWIuY2ZnIG9uIHRoZSBsb2NhbCBib290IG1lZGlhIGJ5IHVzaW5nIHRoZQorCSMgYnVpbHQgaW4gY2ZnIGZpbGUgcHJvdmlkZWQgdmlhIHRoaXMgcmVjaXBlCisJZ3J1Yi1ta2ltYWdlIC1jIC4uL2NmZyAtcCAvRUZJL0JPT1QgLWQgLi9ncnViLWNvcmUvIFwKKwkgICAgICAgICAgICAgICAtTyAke0dSVUJfVEFSR0VUfS1lZmkgLW8gLi8ke0dSVUJfSU1BR0V9IFwKKwkgICAgICAgICAgICAgICAke0dSVUJfQlVJTERJTn0KKwlpbnN0YWxsIC1tIDY0NCAke0J9LyR7R1JVQl9JTUFHRX0gJHtERVBMT1lESVJ9Cit9CisKK2RvX2RlcGxveV9jbGFzcy1uYXRpdmUoKSB7CisJOgorfQorCithZGR0YXNrIGRlcGxveSBhZnRlciBkb19pbnN0YWxsIGJlZm9yZSBkb19idWlsZAorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2dydWIvJHtHUlVCX1RBUkdFVH0tZWZpIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dydWIgXAorICAgICAgICAgICAgICAgICIKKworIyA2NC1iaXQgYmluYXJpZXMgYXJlIGV4cGVjdGVkIGZvciB0aGUgYm9vdGxvYWRlciB3aXRoIGFuIHgzMiB1c2VybGFuZAorSU5TQU5FX1NLSVBfJHtQTn1fYXBwZW5kX2xpbnV4LWdudXgzMiA9ICIgYXJjaCIKK0lOU0FORV9TS0lQXyR7UE59LWRiZ19hcHBlbmRfbGludXgtZ251eDMyID0gIiBhcmNoIgorSU5TQU5FX1NLSVBfJHtQTn1fYXBwZW5kX2xpbnV4LW11c2x4MzIgPSAiIGFyY2giCitJTlNBTkVfU0tJUF8ke1BOfS1kYmdfYXBwZW5kX2xpbnV4LW11c2x4MzIgPSAiIGFyY2giCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViMi5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWIyLmluYwppbmRleCBhOTNjOTllLi4yOGY5NmJiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWIyLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWIyLmluYwpAQCAtMTEsNDYgKzExLDQwIEBACiBMSUNFTlNFID0gIkdQTHYzIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCiAKLVNSQ19VUkkgPSAiZnRwOi8vZnRwLmdudS5vcmcvZ251L2dydWIvZ3J1Yi0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vZ3J1Yi1tb2R1bGUtZXhwbGljaXRseS1rZWVwcy1zeW1ib2xlLS5tb2R1bGVfbGljZW5zZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9ncnViLTIuMDAtZnBtYXRoLXNzZS0zODctZml4LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2NoZWNrLWlmLWxpYmx6bWEtaXMtZGlzYWJsZWQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZml4LWlzc3VlLXdpdGgtZmxleC0yLjUuMzcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZ3J1Yi0yLjAwLWFkZC1vZS1rZXJuZWwucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZ3J1Yi1pbnN0YWxsLmluLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3JlbW92ZS1nZXRzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2ZpeC1lbmRpYW5uZXNzLXByb2JsZW0ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZ3J1YjItcmVtb3ZlLXNwYXJjNjQtc2V0dXAtZnJvbS14ODYtYnVpbGRzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2dydWItMi4wMC1maXgtZW5hYmxlX2V4ZWN1dGVfc3RhY2stY2hlY2sucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZ3J1Yi1uby11bnVzZWQtcmVzdWx0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2dydWItZWZpLWFsbG93LWEtY29tcGlsYXRpb24td2l0aG91dC1tY21vZGVsLWxhcmdlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2dydWItZWZpLWZpeC13aXRoLWdsaWJjLTIuMjAucGF0Y2ggXAorU1JDX1VSSSA9ICJodHRwczovL2Z0cC5nbnUub3JnL2dudS9ncnViL2dydWItJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRGlzYWJsZS1tZnBtYXRoLXNzZS1hcy13ZWxsLXdoZW4tU1NFLWlzLWRpc2FibGVkLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1wYXJzZV9kaGNwX3ZlbmRvci1BZGQtbWlzc2luZy1jb25zdC1xdWFsaWZpZXJzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2dydWIyLWZpeC1pbml0cmQtc2l6ZS1idWcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtQ1ZFLTIwMTUtODM3MC1HcnViMi11c2VyLXBhc3MtdnVsbmVyYWJpbGl0eS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLVJlbW92ZS1kaXJlY3QtX2xsc2Vlay1jb2RlLWFuZC1yZXF1aXJlLWxvbmctZmlsZXN5c3QucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZml4LXRleGluZm8ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1ncnViLWNvcmUtZ2V0dGV4dC1nZXR0ZXh0LmMtbWFpbl9jb250ZXh0LXNlY29uZGFyeV9jLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtRW5mb3JjZS1uby1waWUtaWYtdGhlLWNvbXBpbGVyLXN1cHBvcnRzLWl0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtZ3J1Yi1jb3JlLWtlcm4tZWZpLW1tLmMtZ3J1Yl9lZmlfZmluaXNoX2Jvb3Rfc2VydmljZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAyLWdydWItY29yZS1rZXJuLWVmaS1tbS5jLWdydWJfZWZpX2dldF9tZW1vcnlfbWFwLU5ldmUucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1idWlsZC1Vc2UtQUNfSEVBREVSX01BSk9SLXRvLWZpbmQtZGV2aWNlLW1hY3Jvcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWJ0cmZzLWF2b2lkLXVzZWQtdW5pbml0aWFsaXplZC1lcnJvci13aXRoLUdDQzcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMi1pMzg2LXg4Nl82NC1wcGMtZml4LXN3aXRjaC1mYWxsdGhyb3VnaC1jYXNlcy13aXRoLUdDLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDMtQWRkLWdudWxpYi1maXgtZ2NjNy1mYWxsdGhyb3VnaC5kaWZmLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDQtRml4LXJlbWFpbmluZy1jYXNlcy1vZi1nY2MtNy1mYWxsdGhyb3VnaC13YXJuaW5nLnBhdGNoIFwKLSAgICAgICAgICAgICIKKyAgICAgICAgICAgZmlsZTovL2F1dG9nZW4uc2gtZXhjbHVkZS1wYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViLW1vZHVsZS1leHBsaWNpdGx5LWtlZXBzLXN5bWJvbGUtLm1vZHVsZV9saWNlbnNlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZ3J1Yi5kLTEwX2xpbnV4LmluLWFkZC1vZS1zLWtlcm5lbC1uYW1lLnBhdGNoIFwKKwkgICBmaWxlOi8vZml4LmJ1aWxkLndpdGguZ2NjLTcucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjExMTZkMWY2MGM4NDBlNmRiZDY3YWJiYzk5YWNiNDVkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY2MGVlMTM2ZmJjZWUwODg1ODUxNmVkNGRlMmFkODcwNjhiZmUxYjZiOGIzNzg5NmNlMzUyOWZmMDU0YTcyNmQiCiAKLURFUEVORFMgPSAiZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIGF1dG9nZW4tbmF0aXZlIgorREVQRU5EUyA9ICJmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUiCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICJlOTI3NTQwYjZlZGE4YjAyNGZiMDM5MWVlYWE0MDkxYyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI2NWIzOWEwNTU4ZjhjODAyMjA5YzU3NGY0ZDAyY2EyNjNhODA0ZThhNTY0YmM2Y2FmMWNkMGZkM2IzY2MxMWUzIgorQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjQuKnxpLjg2Lip8YXJtLip8YWFyY2g2NC4qKS0obGludXguKnxmcmVlYnNkLiopJworQ09NUEFUSUJMRV9IT1NUX2FybXY3YSA9ICdudWxsJworQ09NUEFUSUJMRV9IT1NUX2FybXY3dmUgPSAnbnVsbCcKIAotQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjQuKnxpLjg2LiopLShsaW51eHxmcmVlYnNkLiopJworIyBjb25maWd1cmUuYWMgaGFzIGNvZGUgdG8gc2V0IHRoaXMgYXV0b21hZ2ljYWxseSBmcm9tIHRoZSB0YXJnZXQgdHVwbGUKKyMgYnV0IHRoZSBPRSBmcmVlZm9ybSBvbmUgKGNvcmUyLWZvby1iYXItbGludXgpIGRvbid0IHdvcmsgd2l0aCB0aGF0LgorCitHUlVCUExBVEZPUk1fYXJtID0gInVib290IgorR1JVQlBMQVRGT1JNX2FhcmNoNjQgPSAiZWZpIgorR1JVQlBMQVRGT1JNID8/PSAicGMiCiAKIGluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbwogCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXBsYXRmb3JtPSR7R1JVQlBMQVRGT1JNfSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWdydWItbWtmb250IFwKKyAgICAgICAgICAgICAgICAtLXByb2dyYW0tcHJlZml4PSIiIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1saWJsem1hPW5vIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1saWJ6ZnM9bm8gXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWxhcmdlZmlsZSBcCisiCisKIFBBQ0tBR0VDT05GSUcgPz89ICIiCiBQQUNLQUdFQ09ORklHW2dydWItbW91bnRdID0gIi0tZW5hYmxlLWdydWItbW91bnQsLS1kaXNhYmxlLWdydWItbW91bnQsZnVzZSIKIFBBQ0tBR0VDT05GSUdbZGV2aWNlLW1hcHBlcl0gPSAiLS1lbmFibGUtZGV2aWNlLW1hcHBlciwtLWRpc2FibGUtZGV2aWNlLW1hcHBlcixsdm0yIgpAQCAtNzYsMyArNzAsOSBAQAogIyBncnViIGFuZCBncnViLWVmaSdzIHN5c3Jvb3QvJHtkYXRhZGlyfS9ncnViL2dydWItbWtjb25maWdfbGliIGFyZQogIyBjb25mbGljdGVkLCByZW1vdmUgaXQgc2luY2Ugbm8gb25lIHVzZXMgaXQuCiBTWVNST09UX0RJUlNfQkxBQ0tMSVNUICs9ICIke2RhdGFkaXJ9L2dydWIvZ3J1Yi1ta2NvbmZpZ19saWIiCisKK1BBQ0tBR0VTID0rICIke1BOfS1lZGl0ZW52IgorCitGSUxFU18ke1BOfS1lZGl0ZW52ID0gIiR7YmluZGlyfS9ncnViLWVkaXRlbnYiCitSREVQRU5EU18ke1BOfSArPSAiJHtQTn0tZWRpdGVudiIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWJfMi4wMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl8yLjAwLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzgyOTM4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl8yLjAwLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotcmVxdWlyZSBncnViMi5pbmMKLQotUkRFUEVORFNfJHtQTn0gPSAiZGlmZnV0aWxzIGZyZWV0eXBlIGdydWItZWRpdGVudiIKLVBSID0gInIxIgotCi1FWFRSQV9PRUNPTkYgPSAiLS13aXRoLXBsYXRmb3JtPXBjIC0tZGlzYWJsZS1ncnViLW1rZm9udCAtLXByb2dyYW0tcHJlZml4PSIiIFwKLSAgICAgICAgICAgICAgICAtLWVuYWJsZS1saWJsem1hPW5vIC0tZW5hYmxlLWRldmljZS1tYXBwZXI9bm8gLS1lbmFibGUtbGliemZzPW5vIFwKLSAgICAgICAgICAgICAgICAtLWVuYWJsZS1sYXJnZWZpbGUgXAotIgotCi1QQUNLQUdFUyA9KyAiZ3J1Yi1lZGl0ZW52IgotCi1GSUxFU19ncnViLWVkaXRlbnYgPSAiJHtiaW5kaXJ9L2dydWItZWRpdGVudiIKLQotZG9faW5zdGFsbF9hcHBlbmQgKCkgewotICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZ3J1Yi5kCi19Ci0KLUlOU0FORV9TS0lQXyR7UE59ID0gImFyY2giCi1JTlNBTkVfU0tJUF8ke1BOfS1kYmcgPSAiYXJjaCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl8yLjAyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViXzIuMDIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U2MWY2YQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl8yLjAyLmJiCkBAIC0wLDAgKzEsMTcgQEAKK3JlcXVpcmUgZ3J1YjIuaW5jCisKK1JERVBFTkRTXyR7UE59ICs9ICJkaWZmdXRpbHMgZnJlZXR5cGUiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2dydWIuZAorICAgICMgUmVtb3ZlIGJ1aWxkIGhvc3QgcmVmZXJlbmNlcy4uLgorICAgIGZpbmQgIiR7RH0iIC1uYW1lIG1vZGluZm8uc2ggLXR5cGUgZiAtZXhlYyBcCisgICAgICAgIHNlZCAtaSBcCisgICAgICAgIC1lICdzLC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0sLGcnIFwKKyAgICAgICAgLWUgJ3N8JHtERUJVR19QUkVGSVhfTUFQfXx8ZycgXAorICAgICAgICAtZSAnczoke1JFQ0lQRV9TWVNST09UX05BVElWRX06OmcnIFwKKyAgICAgICAge30gKworfQorCitJTlNBTkVfU0tJUF8ke1BOfSA9ICJhcmNoIgorSU5TQU5FX1NLSVBfJHtQTn0tZGJnID0gImFyY2giCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWJfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViX2dpdC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE4MWU1My4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWJfZ2l0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotcmVxdWlyZSBncnViMi5pbmMKLQotREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgotREVGQVVMVF9QUkVGRVJFTkNFX2FybSA9ICIxIgotCi1GSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9ncnViLWdpdDoiCi0KLVBWID0gIjIuMDArJHtTUkNQVn0iCi1TUkNSRVYgPSAiY2U5NTU0OWNjNTRiNWQ2ZjQ5NDYwOGE3YzM5MGRiYTNhYWI0ZmJhNyIKLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ3J1Yi5naXQgXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1EaXNhYmxlLW1mcG1hdGgtc3NlLWFzLXdlbGwtd2hlbi1TU0UtaXMtZGlzYWJsZWQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vYXV0b2dlbi5zaC1leGNsdWRlLXBjLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtZ3J1Yi5kLTEwX2xpbnV4LmluLWFkZC1vZS1zLWtlcm5lbC1uYW1lLnBhdGNoIFwKLSAgICAgICAgICAiCi0KLVMgPSAiJHtXT1JLRElSfS9naXQiCi0KLUNPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0Lip8aS44Ni4qfGFybS4qfGFhcmNoNjQuKiktKGxpbnV4Lip8ZnJlZWJzZC4qKScKLUNPTVBBVElCTEVfSE9TVF9hcm12N2EgPSAnbnVsbCcKLUNPTVBBVElCTEVfSE9TVF9hcm12N3ZlID0gJ251bGwnCi0KLSMgY29uZmlndXJlLmFjIGhhcyBjb2RlIHRvIHNldCB0aGlzIGF1dG9tYWdpY2FsbHkgZnJvbSB0aGUgdGFyZ2V0IHR1cGxlCi0jIGJ1dCB0aGUgT0UgZnJlZWZvcm0gb25lIChjb3JlMi1mb28tYmFyLWxpbnV4KSBkb24ndCB3b3JrIHdpdGggdGhhdC4KLQotR1JVQlBMQVRGT1JNX2FybSA9ICJ1Ym9vdCIKLUdSVUJQTEFURk9STV9hYXJjaDY0ID0gImVmaSIKLUdSVUJQTEFURk9STSA/Pz0gInBjIgotCi1FWFRSQV9PRUNPTkYgPSAiLS13aXRoLXBsYXRmb3JtPSR7R1JVQlBMQVRGT1JNfSAtLWRpc2FibGUtZ3J1Yi1ta2ZvbnQgLS1wcm9ncmFtLXByZWZpeD0iIiBcCi0gICAgICAgICAgICAgICAgLS1lbmFibGUtbGlibHptYT1ubyAtLWVuYWJsZS1kZXZpY2UtbWFwcGVyPW5vIC0tZW5hYmxlLWxpYnpmcz1ubyBcCi0gICAgICAgICAgICAgICAgLS1lbmFibGUtbGFyZ2VmaWxlIFwKLSIKLQotZG9faW5zdGFsbF9hcHBlbmQgKCkgewotICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZ3J1Yi5kCi0gICAgcm0gLXJmICR7RH0ke2xpYmRpcn0vY2hhcnNldC5hbGlhcwotfQotCi0jIGRlYnVnZWRpdCBjaG9rZXMgb24gYmFyZSBtZXRhbCBiaW5hcmllcwotSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUID0gIjEiCi0KLVJERVBFTkRTXyR7UE59ID0gImRpZmZ1dGlscyBmcmVldHlwZSIKLQotSU5TQU5FX1NLSVBfJHtQTn0gPSAiYXJjaCIKLUlOU0FORV9TS0lQXyR7UE59LWRiZyA9ICJhcmNoIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2hvc3RhcC11dGlscy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLXV0aWxzLmluYwppbmRleCAxNDAzMjFkLi42ZDk4ZTNhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLXV0aWxzLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLXV0aWxzLmluYwpAQCAtMSwxNSArMSwxNCBAQAogU1VNTUFSWSA9ICJVc2VyIG1vZGUgaGVscGVycyBmb3IgdGhlIGhvc3RhcCBkcml2ZXIiCiBERVNDUklQVElPTiA9ICJUaGUgaG9zdGFwIGRyaXZlciBzdXBwb3J0cyBIb3N0IEFQIG1vZGUsIGl0IGFsbG93cyBmb3IgSUVFRSA4MDIuMTEgXAogbWFuYWdlbWVudCBmdW5jdGlvbnMgb24gdGhlIGhvc3QgY29tcHV0ZXIgYW5kIGFsbG93cyB0aGUgc3lzdGVtIHRvIGFjdCBhcyBhbiBhY2Nlc3MgcG9pbnQuIgotSE9NRVBBR0UgPSAiaHR0cDovL2hvc3RhcC5lcGl0ZXN0LmZpIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vaG9zdGFwLmVwaXRlc3QuZmkvYnVnei8iCitIT01FUEFHRSA9ICJodHRwczovL3cxLmZpIgogTElDRU5TRSA9ICJHUEx2MiIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIFwKIAkJCWZpbGU6Ly91dGlsLmM7YmVnaW5saW5lPTE7ZW5kbGluZT05O21kNT1kM2I5MjgwODUxMzAyZTViYTM0ZTVmYjcxNzQ4OWI2ZCIKIFNFQ1RJT04gPSAia2VybmVsL3VzZXJsYW5kIgogUFIgPSAicjQiCiAKLVNSQ19VUkkgPSAiaHR0cDovL2hvc3RhcC5lcGl0ZXN0LmZpL3JlbGVhc2VzL2hvc3RhcC11dGlscy0ke1BWfS50YXIuZ3ogXAorU1JDX1VSSSA9ICJodHRwczovL3cxLmZpL3JlbGVhc2VzL2hvc3RhcC11dGlscy0ke1BWfS50YXIuZ3ogXAogICAgICAgICAgICBmaWxlOi8vaG9zdGFwLWZ3LWxvYWQucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1EZWZpbmUtX3UzMi1fX3MzMi1fX3UxNi1fX3MxNi1fX3U4LWluLXRlcm1zLW9mLWM5OS10LnBhdGNoIFwKICIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL2NvbmZpZ3VyZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL2NvbmZpZ3VyZS5wYXRjaAppbmRleCA2NmM5ZjkxLi41NWVkZmVhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlscy9jb25maWd1cmUucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHMvY29uZmlndXJlLnBhdGNoCkBAIC0xLDQ2ICsxLDM2IEBACitUaGlzIHBhdGNoOgorKiBlbnN1cmVzIHdlIGxpbmsgY29ycmVjdGx5CisqIGFsbG93cyB1cyB0byBvcHRpb25hbGx5IHBhc3MgdGFyZ2V0IGluZm9ybWF0aW9uIHRvIGNvbmZpZ3VyZSByYXRoZXIgdGhhbiB1c2luZyB1bmFtZQorKiBzZWxlY3QgbGludXggYXMgdGhlIHBsYXRmb3JtIGluIG1vc3QgY2FzZXMgd2UgY2FyZSBhYm91dAorCitUaGlzIGlzIGEgbWVyZ2Ugb2YgdmFyaW91cyB0d2Vha3MgdG8gYWxsb3cgdXMgdG8gYnVpbGQgcGNpdXRpbHMgaW5jbHVkaW5nIAord29yayBmcm9tOgorCis3LzMwLzIwMTAgLSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKzEvMjIvMjAxMiAtIFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorSW9udXQgUmFkdSA8aW9udXR4LnJhZHVAaW50ZWwuY29tPgorMjAxNy82LzE1IC0gUlAgLSBDbGVhbnVwcyBhbmQgbWVyZ2luZyBwYXRjaGVzCisKIFVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCiAKLSMKLSMgUGF0Y2ggbWFuYWdlZCBieSBodHRwOi8vd3d3Lm1uLWxvZ2lzdGlrLmRlL3Vuc3VwcG9ydGVkL3B4YTI1MC9wYXRjaGVyCi0jCi0tLS0KLQotNy8zMC8yMDEwIC0gcmViYXNlZCB0byAzLjEuNSBieSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KLTEvMjIvMjAxMiAtIHJlYmFzZWQgdG8gMy4xLjkgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+Ci0KLWRpZmYgLXIgYWYyYjEwY2MzYzE0IE1ha2VmaWxlCi0tLS0gYS9NYWtlZmlsZQlTdW4gSmFuIDIyIDE4OjM2OjM0IDIwMTIgKzA4MDAKLSsrKyBiL01ha2VmaWxlCVN1biBKYW4gMjIgMTg6Mzg6NTQgMjAxMiArMDgwMAotQEAgLTM3LDcgKzM3LDYgQEAKLSAjIENvbW1hbmRzCi0gSU5TVEFMTD1pbnN0YWxsCi0gRElSSU5TVEFMTD1pbnN0YWxsIC1kCi0tU1RSSVA9LXMKLSBDQz0kKENST1NTX0NPTVBJTEUpZ2NjCi0gQVI9JChDUk9TU19DT01QSUxFKWFyCi0gUkFOTElCPSQoQ1JPU1NfQ09NUElMRSlyYW5saWIKLUBAIC04Niw3ICs4NSw3IEBACitJbmRleDogcGNpdXRpbHMtMy41LjQvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwY2l1dGlscy0zLjUuNC5vcmlnL01ha2VmaWxlCisrKysgcGNpdXRpbHMtMy41LjQvTWFrZWZpbGUKK0BAIC05Niw3ICs5NSw3IEBAIGV4YW1wbGU6IGV4YW1wbGUubyBsaWIvJChQQ0lMSUIpCiAgZXhhbXBsZS5vOiBleGFtcGxlLmMgJChQQ0lJTkMpCiAgCiAgJTogJS5vCiAtCSQoQ0MpICQoTERGTEFHUykgJChUQVJHRVRfQVJDSCkgJF4gJChMRExJQlMpIC1vICRACi0rCSQoQ0MpICQoTERGTEFHUykgJChUQVJHRVRfQVJDSCkgJF4gJChMSUJfTERMSUJTKSAtbyAkQAorKwkkKENDKSAkKExERkxBR1MpICQoVEFSR0VUX0FSQ0gpICReICQoTElCX0xETElCUykgJChMRExJQlMpIC1vICRACiAgCiAgJS44ICUuNzogJS5tYW4KICAJTT1gZWNobyAkKERBVEUpIHwgc2VkICdzLy0wMS0vLUphbnVhcnktLztzLy0wMi0vLUZlYnJ1YXJ5LS87cy8tMDMtLy1NYXJjaC0vO3MvLTA0LS8tQXByaWwtLztzLy0wNS0vLU1heS0vO3MvLTA2LS8tSnVuZS0vO3MvLTA3LS8tSnVseS0vO3MvLTA4LS8tQXVndXN0LS87cy8tMDktLy1TZXB0ZW1iZXItLztzLy0xMC0vLU9jdG9iZXItLztzLy0xMS0vLU5vdmVtYmVyLS87cy8tMTItLy1EZWNlbWJlci0vO3MvXCguKlwpLVwoLipcKS1cKC4qXCkvXDMgXDIgXDEvJ2AgOyBzZWQgPCQ8ID4kQCAicy9AVE9EQVlALyQkTS87cy9AVkVSU0lPTkAvcGNpdXRpbHMtJChWRVJTSU9OKS87cyNASURTRElSQCMkKElEU0RJUikjIgotQEAgLTEwMSw3ICsxMDAsNyBAQAotIGluc3RhbGw6IGFsbAotICMgLWMgaXMgaWdub3JlZCBvbiBMaW51eCwgYnV0IHJlcXVpcmVkIG9uIEZyZWVCU0QKLSAJJChESVJJTlNUQUxMKSAtbSA3NTUgJChERVNURElSKSQoU0JJTkRJUikgJChERVNURElSKSQoSURTRElSKSAkKERFU1RESVIpJChNQU5ESVIpL21hbjggJChERVNURElSKSQoTUFORElSKS9tYW43Ci0tCSQoSU5TVEFMTCkgLWMgLW0gNzU1ICQoU1RSSVApIGxzcGNpIHNldHBjaSAkKERFU1RESVIpJChTQklORElSKQotKwkkKElOU1RBTEwpIC1jIC1tIDc1NSBsc3BjaSBzZXRwY2kgJChERVNURElSKSQoU0JJTkRJUikKLSAJJChJTlNUQUxMKSAtYyAtbSA3NTUgdXBkYXRlLXBjaWlkcyAkKERFU1RESVIpJChTQklORElSKQotIAkkKElOU1RBTEwpIC1jIC1tIDY0NCAkKFBDSV9JRFMpICQoREVTVERJUikkKElEU0RJUikKLSAJJChJTlNUQUxMKSAtYyAtbSA2NDQgbHNwY2kuOCBzZXRwY2kuOCB1cGRhdGUtcGNpaWRzLjggJChERVNURElSKSQoTUFORElSKS9tYW44Ci1kaWZmIC1yIGFmMmIxMGNjM2MxNCBsaWIvY29uZmlndXJlCi0tLS0gYS9saWIvY29uZmlndXJlCVN1biBKYW4gMjIgMTg6MzY6MzQgMjAxMiArMDgwMAotKysrIGIvbGliL2NvbmZpZ3VyZQlTdW4gSmFuIDIyIDE4OjM4OjU0IDIwMTIgKzA4MDAKLUBAIC0xNCw2ICsxNCwxMCBAQAorSW5kZXg6IHBjaXV0aWxzLTMuNS40L2xpYi9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwY2l1dGlscy0zLjUuNC5vcmlnL2xpYi9jb25maWd1cmUKKysrKyBwY2l1dGlscy0zLjUuNC9saWIvY29uZmlndXJlCitAQCAtMTQsNiArMTQsMTAgQEAgZWNob19uKCkgewogIAlmaQogIH0KICAKQEAgLTUxLDcgKzQxLDcgQEAKICBpZiBbIC16ICIkVkVSU0lPTiIgLW8gLXogIiRJRFNESVIiIF0gOyB0aGVuCiAgCWVjaG8gPiYyICJQbGVhc2UgcnVuIHRoZSBjb25maWd1cmUgc2NyaXB0IGZyb20gdGhlIHRvcC1sZXZlbCBNYWtlZmlsZSIKICAJZXhpdCAxCi1AQCAtMjEsOCArMjUsOCBAQAorQEAgLTIxLDggKzI1LDggQEAgZmkKICAKICBlY2hvX24gIkNvbmZpZ3VyaW5nIGxpYnBjaSBmb3IgeW91ciBzeXN0ZW0uLi4iCiAgaWYgWyAteiAiJEhPU1QiIF0gOyB0aGVuCkBAIC02Miw3ICs1Miw3IEBACiAgCXJlYWxzeXM9IiRzeXMiCiAgCWlmIFsgIiRzeXMiID0gIkFJWCIgLWEgLXggL3Vzci9iaW4vb3NsZXZlbCAtYSAteCAvdXNyL3NiaW4vbHNhdHRyIF0KICAJdGhlbgotQEAgLTMwLDcgKzM0LDcgQEAKK0BAIC0zMCw3ICszNCw3IEBAIGlmIFsgLXogIiRIT1NUIiBdIDsgdGhlbgogIAkJcHJvYz1gL3Vzci9zYmluL2xzZGV2IC1DIC1jIHByb2Nlc3NvciAtUyBhdmFpbGFibGUgLUYgbmFtZSB8IGhlYWQgLTFgCiAgCQljcHU9YC91c3Ivc2Jpbi9sc2F0dHIgLUYgdmFsdWUgLWwgJHByb2MgLWEgdHlwZSB8IHNlZCAncy9fLiovLydgCiAgCWVsc2UKQEAgLTcxLDcgKzYxLDcgQEAKICAJZmkKICAJaWYgWyAiJHN5cyIgPSAiR05VL2tGcmVlQlNEIiAtbyAiJHN5cyIgPSAiRHJhZ29uRmx5IiBdCiAgCXRoZW4KLUBAIC00MCw3ICs0NCw3IEBACitAQCAtNDAsNyArNDQsNyBAQCBpZiBbIC16ICIkSE9TVCIgXSA7IHRoZW4KICAJdGhlbgogIAkJc3lzPWN5Z3dpbgogIAlmaQpAQCAtODAsMjQgKzcwLDExIEBACiAgZmkKICBbIC1uICIkUkVMRUFTRSIgXSAmJiByZWw9IiR7UkVMRUFTRX0iCiAgIyBDQVZFQVQ6IHRyIG9uIFNvbGFyaXMgaXMgYSBiaXQgd2VpcmQgYW5kIHRoZSBleHRyYSBbXSBpcyBvdGhlcndpc2UgaGFybWxlc3MuCi1AQCAtNDksNiArNTMsMjEgQEAKK0BAIC00OSw2ICs1Myw4IEBAIGNwdT1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14KICBzeXM9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAogIGVjaG8gIiAkaG9zdCAkcmVsICRjcHUgJHN5cyIKICAKLStpZiBbICIkaG9zdCIgPSAibGludXgtLWdudWVhYmkiIF0KLSt0aGVuCi0rCXN5cz1saW51eAotK2ZpCi0rCi0raWYgWyAiJGhvc3QiID0gImxpbnV4LS11Y2xpYmMiIF0KLSt0aGVuCi0rCXN5cz1saW51eAotK2ZpCi0rCi0raWYgWyAiJGhvc3QiID0gImxpbnV4LS11Y2xpYmNlYWJpIiBdCi0rdGhlbgotKwlzeXM9bGludXgKLStmaQorK3sgZWNobyAiJGhvc3QiIHwgZ3JlcCBsaW51eDsgfSAmJiBzeXM9bGludXgKICsKICBjPWNvbmZpZy5oCiAgbT1jb25maWcubWsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL2d1ZXNzLWZpeC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL2d1ZXNzLWZpeC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQwYjRhMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlscy9ndWVzcy1maXgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi10aGUgb3JpZ2luYWwgZ3Vlc3MgYWxnb3JpdGhtIGlzIGJyb2tlbiBmb3IgbWFueSBhcmNocwotZm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgdHdvIHdvdWxkIGJyZWFrOgotCWFybS1saW51eC1nbnVlYWJpICAtLT4gc3lzPWdudWVhYmkKLQl4ODZfNjQtdW5rbm93bi1wYy1saW51eC1nbnUgIC0tPiBzeXMgPSBwYy1saW51eC1nbnUKLQotdXNlIGEgc2ltcGxlciBzY2hlbWUgaGVyZSBhbmQgaG9wZSBpdCB3b3JrcyBmb3IgYWxsIHRoZSBjYXNlcwotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotNy8zMC8yMDEwIC0gY3JlYXRlZCBieSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KLQotZGlmZiAtLWdpdCBhL2xpYi9jb25maWd1cmUgYi9saWIvY29uZmlndXJlCi1pbmRleCA0MzE4YjA1Li44NGY2YWNiIDEwMDc1NQotLS0tIGEvbGliL2NvbmZpZ3VyZQotKysrIGIvbGliL2NvbmZpZ3VyZQotQEAgLTUzLDIwICs1Myw3IEBAIGNwdT1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCi0gc3lzPWBlY2hvICRob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKLSBlY2hvICIgJGhvc3QgJHJlbCAkY3B1ICRzeXMiCi0gCi0taWYgWyAiJGhvc3QiID0gImxpbnV4LS1nbnVlYWJpIiBdCi0tdGhlbgotLQlzeXM9bGludXgKLS1maQotLQotLWlmIFsgIiRob3N0IiA9ICJsaW51eC0tdWNsaWJjIiBdCi0tdGhlbgotLQlzeXM9bGludXgKLS1maQotLQotLWlmIFsgIiRob3N0IiA9ICJsaW51eC0tdWNsaWJjZWFiaSIgXQotLXRoZW4KLS0Jc3lzPWxpbnV4Ci0tZmkKLSt7IGVjaG8gIiRob3N0IiB8IGdyZXAgbGludXg7IH0gJiYgc3lzPWxpbnV4Ci0gCi0gYz1jb25maWcuaAotIG09Y29uZmlnLm1rCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlscy9tYWtlZmlsZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL21ha2VmaWxlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2ZiYzZmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL21ha2VmaWxlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQotCi1TaWduZWQtb2ZmLWJ5OiBJb251dCBSYWR1IDxpb251dHgucmFkdUBpbnRlbC5jb20+Ci0KLUluZGV4OiBwY2l1dGlscy0zLjIuMC9NYWtlZmlsZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHBjaXV0aWxzLTMuMi4wLm9yaWcvTWFrZWZpbGUKLSsrKyBwY2l1dGlscy0zLjIuMC9NYWtlZmlsZQotQEAgLTM1LDcgKzM1LDcgQEAgU0hBUkVESVI9JChQUkVGSVgpL3NoYXJlCi0gSURTRElSPSQoU0hBUkVESVIpCi0gTUFORElSOj0kKHNoZWxsIGlmIFsgLWQgJChQUkVGSVgpL3NoYXJlL21hbiBdIDsgdGhlbiBlY2hvICQoUFJFRklYKS9zaGFyZS9tYW4gOyBlbHNlIGVjaG8gJChQUkVGSVgpL21hbiA7IGZpKQotIElOQ0RJUj0kKFBSRUZJWCkvaW5jbHVkZQotLUxJQkRJUj0kKFBSRUZJWCkvbGliCi0rTElCRElSPSQobGliZGlyKQotIFBLR0NGRElSPSQoTElCRElSKS9wa2djb25maWcKLSAKLSAjIENvbW1hbmRzCi1AQCAtOTQsNyArOTQsNyBAQCBleGFtcGxlOiBleGFtcGxlLm8gbGliLyQoUENJTElCX0RFVikKLSBleGFtcGxlLm86IGV4YW1wbGUuYyAkKFBDSUlOQykKLSAKLSAlOiAlLm8KLS0JJChDQykgJChMREZMQUdTKSAkKFRBUkdFVF9BUkNIKSAkXiAkKExJQl9MRExJQlMpIC1vICRACi0rCSQoQ0MpICQoTERGTEFHUykgJChUQVJHRVRfQVJDSCkgJF4gJChMSUJfTERMSUJTKSAkKExETElCUykgLW8gJEAKLSAKLSAlLjggJS43OiAlLm1hbgotIAlNPWBlY2hvICQoREFURSkgfCBzZWQgJ3MvLTAxLS8tSmFudWFyeS0vO3MvLTAyLS8tRmVicnVhcnktLztzLy0wMy0vLU1hcmNoLS87cy8tMDQtLy1BcHJpbC0vO3MvLTA1LS8tTWF5LS87cy8tMDYtLy1KdW5lLS87cy8tMDctLy1KdWx5LS87cy8tMDgtLy1BdWd1c3QtLztzLy0wOS0vLVNlcHRlbWJlci0vO3MvLTEwLS8tT2N0b2Jlci0vO3MvLTExLS8tTm92ZW1iZXItLztzLy0xMi0vLURlY2VtYmVyLS87cy9cKC4qXCktXCguKlwpLVwoLipcKS9cMyBcMiBcMS8nYCA7IHNlZCA8JDwgPiRAICJzL0BUT0RBWUAvJCRNLztzL0BWRVJTSU9OQC9wY2l1dGlscy0kKFZFUlNJT04pLztzI0BJRFNESVJAIyQoSURTRElSKSMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlsc18zLjUuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzXzMuNS4yLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTcyOTdlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzXzMuNS4yLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotU1VNTUFSWSA9ICJQQ0kgdXRpbGl0aWVzIgotREVTQ1JJUFRJT04gPSAnVGhlIFBDSSBVdGlsaXRpZXMgcGFja2FnZSBjb250YWlucyBhIGxpYnJhcnkgZm9yIHBvcnRhYmxlIGFjY2VzcyBcCi10byBQQ0kgYnVzIGNvbmZpZ3VyYXRpb24gc3BhY2UgYW5kIHNldmVyYWwgdXRpbGl0aWVzIGJhc2VkIG9uIHRoaXMgbGlicmFyeS4nCi1IT01FUEFHRSA9ICJodHRwOi8vYXRyZXkua2FybGluLm1mZi5jdW5pLmN6L35tai9wY2l1dGlscy5zaHRtbCIKLVNFQ1RJT04gPSAiY29uc29sZS91dGlscyIKLQotTElDRU5TRSA9ICJHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKLURFUEVORFMgPSAiemxpYiBrbW9kIgotCi1TUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vc29mdHdhcmUvdXRpbHMvcGNpdXRpbHMvcGNpdXRpbHMtJHtQVn0udGFyLnh6IFwKLSAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9ndWVzcy1maXgucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vbWFrZWZpbGUucGF0Y2giCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIxYmY1YjA2OGJkOWY3NTEyZThjNjhiMDYwYjI1YTFiMiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIzYTk5MTQxYTlmNDA1MjhkMGEwMDM1NjY1YTA2ZGMzN2RkYjFhZTM0MTY1OGU1MWI1MGE3NmVjZjg2MjM1ZWZjIgotCi1pbmhlcml0IG11bHRpbGliX2hlYWRlcgotCi1QQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ2h3ZGInLCAnJywgZCl9IgotUEFDS0FHRUNPTkZJR1tod2RiXSA9ICJIV0RCPXllcyxIV0RCPW5vLHVkZXYiCi0KLVBDSV9DT05GX0ZMQUcgPSAiWkxJQj15ZXMgRE5TPXllcyBTSEFSRUQ9eWVzIgotCi0jIHNlZSBjb25maWd1cmUucGF0Y2gKLWRvX2NvbmZpZ3VyZSAoKSB7Ci0JKAotCSAgY2QgbGliICYmIFwKLQkgICMgUEFDS0FHRUNPTkZJR19DT05GQVJHUyBmb3IgdGhpcyByZWNpcGUgY291bGQgb25seSBwb3NzaWJseSBjb250YWluICdIV0RCPXllcy9ubycsCi0JICAjIHNvIHdlIHB1dCBpdCBiZWZvcmUgLi9jb25maWd1cmUKLQkgICR7UENJX0NPTkZfRkxBR30gJHtQQUNLQUdFQ09ORklHX0NPTkZBUkdTfSAuL2NvbmZpZ3VyZSAke1BWfSAke2RhdGFkaXJ9ICR7VEFSR0VUX09TfSAke1RBUkdFVF9BUkNIfQotCSkKLX0KLQotZXhwb3J0IFBSRUZJWCA9ICIke3ByZWZpeH0iCi1leHBvcnQgU0JJTkRJUiA9ICIke3NiaW5kaXJ9IgotZXhwb3J0IFNIQVJFRElSID0gIiR7ZGF0YWRpcn0iCi1leHBvcnQgTUFORElSID0gIiR7bWFuZGlyfSIKLQotRVhUUkFfT0VNQUtFID0gIi1lIE1BS0VGTEFHUz0gJHtQQ0lfQ09ORl9GTEFHfSIKLQotIyBUaGUgY29uZmlndXJlIHNjcmlwdCBicmVha3MgaWYgdGhlIEhPU1QgdmFyaWFibGUgaXMgc2V0Ci1IT1NUW3VuZXhwb3J0XSA9ICIxIgotCi1kb19pbnN0YWxsICgpIHsKLQlvZV9ydW5tYWtlIERFU1RESVI9JHtEfSBpbnN0YWxsIGluc3RhbGwtbGliCi0KLQlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KLQlsbiAtcyAuLi9zYmluL2xzcGNpICR7RH0ke2JpbmRpcn0vbHNwY2kKLQotCW9lX211bHRpbGliX2hlYWRlciBwY2kvY29uZmlnLmgKLX0KLQotUEFDS0FHRVMgPSsgIiR7UE59LWlkcyBsaWJwY2kiCi1GSUxFU18ke1BOfS1pZHMgPSAiJHtkYXRhZGlyfS9wY2kuaWRzKiIKLUZJTEVTX2xpYnBjaSA9ICIke2xpYmRpcn0vbGlicGNpLnNvLioiCi1TVU1NQVJZXyR7UE59LWlkcyA9ICJQQ0kgdXRpbGl0aWVzIC0gZGV2aWNlIElEIGRhdGFiYXNlIgotREVTQ1JJUFRJT05fJHtQTn0taWRzID0gIlBhY2thZ2UgcHJvdmlkaW5nIHRoZSBQQ0kgZGV2aWNlIElEIGRhdGFiYXNlIGZvciBwY2l1dGlscy4iCi1SREVQRU5EU18ke1BOfSArPSAiJHtQTn0taWRzIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHNfMy41LjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlsc18zLjUuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDUxZmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHNfMy41LjUuYmIKQEAgLTAsMCArMSw1OCBAQAorU1VNTUFSWSA9ICJQQ0kgdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAnVGhlIFBDSSBVdGlsaXRpZXMgcGFja2FnZSBjb250YWlucyBhIGxpYnJhcnkgZm9yIHBvcnRhYmxlIGFjY2VzcyBcCit0byBQQ0kgYnVzIGNvbmZpZ3VyYXRpb24gc3BhY2UgYW5kIHNldmVyYWwgdXRpbGl0aWVzIGJhc2VkIG9uIHRoaXMgbGlicmFyeS4nCitIT01FUEFHRSA9ICJodHRwOi8vYXRyZXkua2FybGluLm1mZi5jdW5pLmN6L35tai9wY2l1dGlscy5zaHRtbCIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKK0RFUEVORFMgPSAiemxpYiBrbW9kIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vc29mdHdhcmUvdXRpbHMvcGNpdXRpbHMvcGNpdXRpbHMtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjIzOGQ5OTY5Y2MwZGU4YjkxMDVkOTcyMDA3ZDlkNTQ2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFkNjJmOGZhMTkyZjkwZTYxYzM1YTZmYzE1ZmYzY2I5YTdhNzkyZjc4MjQwN2FjYzQyZWY2NzgxN2M1OTM5ZjUiCisKK2luaGVyaXQgbXVsdGlsaWJfaGVhZGVyIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ2h3ZGInLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1tod2RiXSA9ICJIV0RCPXllcyxIV0RCPW5vLHVkZXYiCisKK1BDSV9DT05GX0ZMQUcgPSAiWkxJQj15ZXMgRE5TPXllcyBTSEFSRUQ9eWVzIFNUUklQPSBMSUJESVI9JHtsaWJkaXJ9IgorCisjIHNlZSBjb25maWd1cmUucGF0Y2gKK2RvX2NvbmZpZ3VyZSAoKSB7CisJKAorCSAgY2QgbGliICYmIFwKKwkgICMgUEFDS0FHRUNPTkZJR19DT05GQVJHUyBmb3IgdGhpcyByZWNpcGUgY291bGQgb25seSBwb3NzaWJseSBjb250YWluICdIV0RCPXllcy9ubycsCisJICAjIHNvIHdlIHB1dCBpdCBiZWZvcmUgLi9jb25maWd1cmUKKwkgICR7UENJX0NPTkZfRkxBR30gJHtQQUNLQUdFQ09ORklHX0NPTkZBUkdTfSAuL2NvbmZpZ3VyZSAke1BWfSAke2RhdGFkaXJ9ICR7VEFSR0VUX09TfSAke1RBUkdFVF9BUkNIfQorCSkKK30KKworZXhwb3J0IFBSRUZJWCA9ICIke3ByZWZpeH0iCitleHBvcnQgU0JJTkRJUiA9ICIke3NiaW5kaXJ9IgorZXhwb3J0IFNIQVJFRElSID0gIiR7ZGF0YWRpcn0iCitleHBvcnQgTUFORElSID0gIiR7bWFuZGlyfSIKKworRVhUUkFfT0VNQUtFID0gIi1lIE1BS0VGTEFHUz0gJHtQQ0lfQ09ORl9GTEFHfSIKKworIyBUaGUgY29uZmlndXJlIHNjcmlwdCBicmVha3MgaWYgdGhlIEhPU1QgdmFyaWFibGUgaXMgc2V0CitIT1NUW3VuZXhwb3J0XSA9ICIxIgorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlIERFU1RESVI9JHtEfSBpbnN0YWxsIGluc3RhbGwtbGliCisKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlsbiAtcyAuLi9zYmluL2xzcGNpICR7RH0ke2JpbmRpcn0vbHNwY2kKKworCW9lX211bHRpbGliX2hlYWRlciBwY2kvY29uZmlnLmgKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LWlkcyBsaWJwY2kiCitGSUxFU18ke1BOfS1pZHMgPSAiJHtkYXRhZGlyfS9wY2kuaWRzKiIKK0ZJTEVTX2xpYnBjaSA9ICIke2xpYmRpcn0vbGlicGNpLnNvLioiCitTVU1NQVJZXyR7UE59LWlkcyA9ICJQQ0kgdXRpbGl0aWVzIC0gZGV2aWNlIElEIGRhdGFiYXNlIgorREVTQ1JJUFRJT05fJHtQTn0taWRzID0gIlBhY2thZ2UgcHJvdmlkaW5nIHRoZSBQQ0kgZGV2aWNlIElEIGRhdGFiYXNlIGZvciBwY2l1dGlscy4iCitSREVQRU5EU18ke1BOfSArPSAiJHtQTn0taWRzIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avc3lzdGVtZC1ib290L2ZpbGVzLzAwMDEtdXNlLWxuci13cmFwcGVyLWluc3RlYWQtb2YtbG9va2luZy1mb3ItcmVsYXRpdmUtb3B0aS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3N5c3RlbWQtYm9vdC9maWxlcy8wMDAxLXVzZS1sbnItd3JhcHBlci1pbnN0ZWFkLW9mLWxvb2tpbmctZm9yLXJlbGF0aXZlLW9wdGkucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjOTJkYjcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avc3lzdGVtZC1ib290L2ZpbGVzLzAwMDEtdXNlLWxuci13cmFwcGVyLWluc3RlYWQtb2YtbG9va2luZy1mb3ItcmVsYXRpdmUtb3B0aS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLUZyb20gYTM0ODJjOTE2NDJjZjU2OGIzYWMyN2ZhNmMwY2IzYzZiMzA2NjliNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBXZWQsIDkgTm92IDIwMTYgMTk6MzI6MTQgLTA4MDAKLVN1YmplY3Q6IFtQQVRDSCAwNy8xOV0gdXNlIGxuciB3cmFwcGVyIGluc3RlYWQgb2YgbG9va2luZyBmb3IgLS1yZWxhdGl2ZQotIG9wdGlvbiBmb3IgbG4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1TcGVjaWZpY10KLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotIE1ha2VmaWxlLmFtICB8IDIgKy0KLSBjb25maWd1cmUuYWMgfCAyIC0tCi0gMiBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMyBkZWxldGlvbnMoLSkKLQotSW5kZXg6IGdpdC9NYWtlZmlsZS5hbQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL01ha2VmaWxlLmFtCi0rKysgZ2l0L01ha2VmaWxlLmFtCi1AQCAtMzIwLDcgKzMyMCw3IEBAIGRlZmluZSBpbnN0YWxsLXJlbGF0aXZlLWFsaWFzZXMKLSAJd2hpbGUgWyAtbiAiJCQxIiBdOyBkbyBcCi0gCQkkKE1LRElSX1ApIGBkaXJuYW1lICQoREVTVERJUikkJGRpci8kJDJgICYmIFwKLSAJCXJtIC1mICQoREVTVERJUikkJGRpci8kJDIgJiYgXAotLQkJJChMTl9TKSAtLXJlbGF0aXZlICQoREVTVERJUikkJDEgJChERVNURElSKSQkZGlyLyQkMiAmJiBcCi0rCQlsbnIgJChERVNURElSKSQkMSAkKERFU1RESVIpJCRkaXIvJCQyICYmIFwKLSAJCXNoaWZ0IDIgfHwgZXhpdCAkJD87IFwKLSAJZG9uZQotIGVuZGVmCi1JbmRleDogZ2l0L2NvbmZpZ3VyZS5hYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL2NvbmZpZ3VyZS5hYwotKysrIGdpdC9jb25maWd1cmUuYWMKLUBAIC0xMTAsOCArMTEwLDYgQEAgQUNfUEFUSF9QUk9HKFtTVUxPR0lOXSwgW3N1bG9naW5dLCBbL3VzcgotIEFDX1BBVEhfUFJPRyhbTU9VTlRfUEFUSF0sIFttb3VudF0sIFsvdXNyL2Jpbi9tb3VudF0sIFskUEFUSDovdXNyL3NiaW46L3NiaW5dKQotIEFDX1BBVEhfUFJPRyhbVU1PVU5UX1BBVEhdLCBbdW1vdW50XSwgWy91c3IvYmluL3Vtb3VudF0sIFskUEFUSDovdXNyL3NiaW46L3NiaW5dKQotIAotLUFTX0lGKFshIGxuIC0tcmVsYXRpdmUgLS1oZWxwID4gL2Rldi9udWxsIDI+JjFdLCBbQUNfTVNHX0VSUk9SKFsqKiogbG4gZG9lc24ndCBzdXBwb3J0IC0tcmVsYXRpdmUgKioqXSldKQotLQotIE00X0RFRklORVM9Ci0gCi0gQUNfQ0hFQ0tfVE9PTChPQkpDT1BZLCBvYmpjb3B5KQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avc3lzdGVtZC1ib290L3N5c3RlbWQtYm9vdF8yMzIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9zeXN0ZW1kLWJvb3Qvc3lzdGVtZC1ib290XzIzMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ3MWNlMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9zeXN0ZW1kLWJvb3Qvc3lzdGVtZC1ib290XzIzMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLXJlcXVpcmUgcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC5pbmMKLQotREVQRU5EUyA9ICJpbnRsdG9vbC1uYXRpdmUgbGliY2FwIHV0aWwtbGludXggZ251LWVmaSBncGVyZi1uYXRpdmUiCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLXVzZS1sbnItd3JhcHBlci1pbnN0ZWFkLW9mLWxvb2tpbmctZm9yLXJlbGF0aXZlLW9wdGkucGF0Y2giCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0Ci1pbmhlcml0IGRlcGxveQotCi0jIE1hbiBwYWdlcyBhcmUgcGFja2FnZWQgdGhyb3VnaCB0aGUgbWFpbiBzeXN0ZW1kIHJlY2lwZQotRVhUUkFfT0VDT05GID0gIiAtLWVuYWJsZS1nbnVlZmkgXAotICAgICAgICAgICAgICAgICAtLXdpdGgtZWZpLWluY2x1ZGVkaXI9JHtTVEFHSU5HX0lOQ0RJUn0gXAotICAgICAgICAgICAgICAgICAtLXdpdGgtZWZpLWxkc2Rpcj0ke1NUQUdJTkdfTElCRElSfSBcCi0gICAgICAgICAgICAgICAgIC0td2l0aC1lZmktbGliZGlyPSR7U1RBR0lOR19MSUJESVJ9IFwKLSAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLW1hbnBhZ2VzIFwKLSAgICAgICAgICAgICAgICIKLQotIyBJbXBvcnRlZCBmcm9tIHRoZSBvbGQgZ3VtbWlib290IHJlY2lwZQotVFVORV9DQ0FSR1NfcmVtb3ZlID0gIi1tZnBtYXRoPXNzZSIKLUNPTVBBVElCTEVfSE9TVCA9ICIoeDg2XzY0Lip8aS44Ni4qKS1saW51eCIKLQotZG9fY29tcGlsZSgpIHsKLQlTWVNURU1EX0JPT1RfRUZJX0FSQ0g9ImlhMzIiCi0JaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIng4Nl82NCIgXTsgdGhlbgotCQlTWVNURU1EX0JPT1RfRUZJX0FSQ0g9Ing2NCIKLQlmaQotCi0Jb2VfcnVubWFrZSBzeXN0ZW1kLWJvb3Qke1NZU1RFTURfQk9PVF9FRklfQVJDSH0uZWZpCi19Ci0KLWRvX2luc3RhbGwoKSB7Ci0JIyBCeXBhc3Mgc3lzdGVtZCBpbnN0YWxsYXRpb24gd2l0aCBhIE5PUAotCToKLX0KLQotZG9fZGVwbG95ICgpIHsKLQlpbnN0YWxsICR7Qn0vc3lzdGVtZC1ib290Ki5lZmkgJHtERVBMT1lESVJ9Ci19Ci1hZGR0YXNrIGRlcGxveSBiZWZvcmUgZG9fYnVpbGQgYWZ0ZXIgZG9fY29tcGlsZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L2ZpbGVzLzEwbTUwLXVwZGF0ZS1kZXZpY2UtdHJlZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC9maWxlcy8xMG01MC11cGRhdGUtZGV2aWNlLXRyZWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQxOTUzYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC9maWxlcy8xMG01MC11cGRhdGUtZGV2aWNlLXRyZWUucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorTmlvcyBJSSBmb3IgTUFYMTAgMTBtNTAgYm9hcmQgcmVxdWlyZXMgdXBkYXRlIHRvIAoraXRzIGRldmljZSB0cmVlIHRvIGVuYWJsZSBDUFUgZHJpdmVyIGR1cmluZwordS1ib290IHByZS1yZWxvY2F0aW9uLiBUaGlzIHBhdGNoIHRhZyB0aGUgQ1BVIAord2l0aCBkbS1wcmUtcmVsb2MgZmxhZy4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogR2FuLCBZYXUgV2FpIDx5YXUud2FpLmdhbkBpbnRlbC5jb20+CisKKy0tLQorIGFyY2gvbmlvczIvZHRzLzEwbTUwX2RldmJvYXJkLmR0cyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9kdHMvMTBtNTBfZGV2Ym9hcmQuZHRzIGIvYXJjaC9uaW9zMi9kdHMvMTBtNTBfZGV2Ym9hcmQuZHRzCitpbmRleCAwNWVhYzMwLi40NjFhZTY4IDEwMDY0NAorLS0tIGEvYXJjaC9uaW9zMi9kdHMvMTBtNTBfZGV2Ym9hcmQuZHRzCisrKysgYi9hcmNoL25pb3MyL2R0cy8xMG01MF9kZXZib2FyZC5kdHMKK0BAIC0xOSw2ICsxOSw3IEBACisgCQkjc2l6ZS1jZWxscyA9IDwwPjsKKyAKKyAJCWNwdTogY3B1QDAgeworKwkJCXUtYm9vdCxkbS1wcmUtcmVsb2M7CisgCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKyAJCQljb21wYXRpYmxlID0gImFsdHIsbmlvczItMS4xIjsKKyAJCQlyZWcgPSA8MHgwMDAwMDAwMD47CistLSAKKzIuNy40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC9maWxlcy9NUEM4MzE1RVJEQi1lbmFibGUtREhDUC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC9maWxlcy9NUEM4MzE1RVJEQi1lbmFibGUtREhDUC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWE1MmI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L2ZpbGVzL01QQzgzMTVFUkRCLWVuYWJsZS1ESENQLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK0VuYWJsZWQgZGhjcCBjbGllbnQgZnVuY3Rpb25hbGl0eSBmb3IgWW9jdG8gcmVmZXJlbmNlCitoYXJkd2FyZSBNUEM4MzE1RS1SREIuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBFZCBCYXJ0b3NoIDxlZC5iYXJ0b3NoQGxpbnV4LmludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3MvTVBDODMxNUVSREJfZGVmY29uZmlnIGIvY29uZmlncy9NUEM4MzE1RVJEQl9kZWZjb25maWcKK2luZGV4IDRlMmI3MDUuLmIwMmFiMWYgMTAwNjQ0CistLS0gYS9jb25maWdzL01QQzgzMTVFUkRCX2RlZmNvbmZpZworKysrIGIvY29uZmlncy9NUEM4MzE1RVJEQl9kZWZjb25maWcKK0BAIC05LDYgKzksNyBAQCBDT05GSUdfSFVTSF9QQVJTRVI9eQorIENPTkZJR19DTURfSTJDPXkKKyBDT05GSUdfQ01EX1VTQj15CisgIyBDT05GSUdfQ01EX1NFVEVYUFIgaXMgbm90IHNldAorK0NPTkZJR19DTURfREhDUD15CisgQ09ORklHX0NNRF9NSUk9eQorIENPTkZJR19DTURfUElORz15CisgQ09ORklHX0NNRF9FWFQyPXkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC9maWxlcy9kZWZhdWx0LWdjYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC9maWxlcy9kZWZhdWx0LWdjYy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQxODRkZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvZmlsZXMvZGVmYXVsdC1nY2MucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi1PRSBuZWVkcyB0byBiZSBhYmxlIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBjb21waWxlci4gSWYgd2UgcGFzcyBpbiBIT1NUQ0MKLXRocm91Z2ggdGhlIG1ha2UgY29tbWFuZCwgaXQgb3ZlcndyaXRlcyBub3Qgb25seSB0aGlzIHNldHRpbmcgYnV0IGFsc28gdGhlIAotc2V0dGluZyBpbiB0b29scy9NYWtlZmlsZSB3cmFwcGVkIGluIGlmbmVxICgkKENST1NTX0JVSUxEX1RPT0xTKSwpIHdoaWNoIAotYnJlYWtzIHRoZSBidWlsZC4KLQotV2UgdGhlcmVmb3JlIHVzZSBvdmVycmlkZSB0byBlbnN1cmUgdGhlIHZhbHVlIG9mIEhPU1RDQyBpcyBvdmVyd3JpdHRlbiB3aGVuCi1uZWVkZWQuCi0KLVJQOiBVcGRhdGVkIHRoZSBwYXRjaCB0byB0aGUgdmVyc2lvbiBiZWluZyBzdWJtaXR0ZWQgdG8gdXBzdHJlYW0gdS1ib290Ci0KLVVwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtlbWFpbGVkIHRvIE1hc2FoaXJvIFlhbWFkYSBmb3IgZGlzY3Vzc2lvbl0KLVJQIDIwMTcvMy8xMQotCi1JbmRleDogZ2l0L3Rvb2xzL01ha2VmaWxlCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvdG9vbHMvTWFrZWZpbGUKLSsrKyBnaXQvdG9vbHMvTWFrZWZpbGUKLUBAIC0yNjIsNyArMjYyLDcgQEAgJChMSUNFTlNFX0gpOiAkKG9iaikvYmluMmhlYWRlciAkKHNyY3RyZQotIHN1YmRpci0gKz0gZW52Ci0gCi0gaWZuZXEgKCQoQ1JPU1NfQlVJTERfVE9PTFMpLCkKLS1IT1NUQ0MgPSAkKENDKQotK292ZXJyaWRlIEhPU1RDQyA9ICQoQ0MpCi0gCi0gcXVpZXRfY21kX2Nyb3NzdG9vbHNfc3RyaXAgPSBTVFJJUCAgICReCi0gICAgICAgY21kX2Nyb3NzdG9vbHNfc3RyaXAgPSAkKFNUUklQKSAkXjsgdG91Y2ggJEAKLUluZGV4OiBnaXQvdG9vbHMvZW52L01ha2VmaWxlCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvdG9vbHMvZW52L01ha2VmaWxlCi0rKysgZ2l0L3Rvb2xzL2Vudi9NYWtlZmlsZQotQEAgLTgsNyArOCw3IEBACi0gIyBmd19wcmludGVudiBpcyBzdXBwb3NlZCB0byBydW4gb24gdGhlIHRhcmdldCBzeXN0ZW0sIHdoaWNoIG1lYW5zIGl0IHNob3VsZCBiZQotICMgYnVpbHQgd2l0aCBjcm9zcyB0b29scy4gQWx0aG91Z2ggaXQgbWF5IGxvb2sgd2VpcmQsIHdlIG9ubHkgcmVwbGFjZSAiSE9TVENDIgotICMgd2l0aCAiQ0MiIGhlcmUgZm9yIHRoZSBtYXhpbXVtIGNvZGUgcmV1c2Ugb2Ygc2NyaXB0cy9NYWtlZmlsZS5ob3N0LgotLUhPU1RDQyA9ICQoQ0MpCi0rb3ZlcnJpZGUgSE9TVENDID0gJChDQykKLSAKLSAjIENvbXBpbGUgZm9yIGEgaG9zdGVkIGVudmlyb25tZW50IG9uIHRoZSB0YXJnZXQKLSBIT1NUX0VYVFJBQ0ZMQUdTICA9ICQocGF0c3Vic3QgLUklLC1pZGlyYWZ0ZXIlLCAkKGZpbHRlciAtSSUsICQoVUJPT1RJTkNMVURFKSkpIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QtY29tbW9uXzIwMTcuMDEuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC1jb21tb25fMjAxNy4wMS5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmMjRjODUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC1jb21tb25fMjAxNy4wMS5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmRlbnguZGUvd2lraS9VLUJvb3QvV2ViSG9tZSIKLVNFQ1RJT04gPSAiYm9vdGxvYWRlcnMiCi0KLUxJQ0VOU0UgPSAiR1BMdjIrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTGljZW5zZXMvUkVBRE1FO21kNT1hMmM2NzhjZmQ0YTRkOTcxMzU1ODVjYWQ5MDg1NDFjNiIKLVBFID0gIjEiCi0KLSMgV2UgdXNlIHRoZSByZXZpc2lvbiBpbiBvcmRlciB0byBhdm9pZCBoYXZpbmcgdG8gZmV0Y2ggaXQgZnJvbSB0aGUKLSMgcmVwbyBkdXJpbmcgcGFyc2UKLVNSQ1JFViA9ICJhNzA1ZWJjODFiN2Y5MWJiZDBlZjdjNjM0Mjg0MjA4MzQyOTAxMTQ5IgotCi1TUkNfVVJJID0gImdpdDovL2dpdC5kZW54LmRlL3UtYm9vdC5naXQiCi0KLVMgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LWNvbW1vbl8yMDE3LjA5LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QtY29tbW9uXzIwMTcuMDkuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZTUxMjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LWNvbW1vbl8yMDE3LjA5LmluYwpAQCAtMCwwICsxLDE3IEBACitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmRlbnguZGUvd2lraS9VLUJvb3QvV2ViSG9tZSIKK1NFQ1RJT04gPSAiYm9vdGxvYWRlcnMiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTGljZW5zZXMvUkVBRE1FO21kNT1hMmM2NzhjZmQ0YTRkOTcxMzU1ODVjYWQ5MDg1NDFjNiIKK1BFID0gIjEiCisKKyMgV2UgdXNlIHRoZSByZXZpc2lvbiBpbiBvcmRlciB0byBhdm9pZCBoYXZpbmcgdG8gZmV0Y2ggaXQgZnJvbSB0aGUKKyMgcmVwbyBkdXJpbmcgcGFyc2UKK1NSQ1JFViA9ICJjOThhYzM0ODdlNDEzYzcxZTVkMzYzMjJlZjMzMjRiMjFjNmY2MGY5IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5kZW54LmRlL3UtYm9vdC5naXQgXAorICAgIGZpbGU6Ly9NUEM4MzE1RVJEQi1lbmFibGUtREhDUC5wYXRjaCBcCisgICAgZmlsZTovLzEwbTUwLXVwZGF0ZS1kZXZpY2UtdHJlZS5wYXRjaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LWZ3LXV0aWxzXzIwMTcuMDEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LWZ3LXV0aWxzXzIwMTcuMDEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MzE0OTkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC1mdy11dGlsc18yMDE3LjAxLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotcmVxdWlyZSB1LWJvb3QtY29tbW9uXyR7UFZ9LmluYwotCi1TUkNfVVJJICs9ICJmaWxlOi8vZGVmYXVsdC1nY2MucGF0Y2giCi0KLVNVTU1BUlkgPSAiVS1Cb290IGJvb3Rsb2FkZXIgZndfcHJpbnRlbnYvc2V0ZW52IHV0aWxpdGllcyIKLURFUEVORFMgPSAibXRkLXV0aWxzIgotCi1JTlNBTkVfU0tJUF8ke1BOfSA9ICJhbHJlYWR5LXN0cmlwcGVkIgotRVhUUkFfT0VNQUtFX2NsYXNzLXRhcmdldCA9ICdDUk9TU19DT01QSUxFPSR7VEFSR0VUX1BSRUZJWH0gQ0M9IiR7Q0N9ICR7Q0ZMQUdTfSAke0xERkxBR1N9IiBIT1NUQ0M9IiR7QlVJTERfQ0N9ICR7QlVJTERfQ0ZMQUdTfSAke0JVSUxEX0xERkxBR1N9IiBWPTEnCi1FWFRSQV9PRU1BS0VfY2xhc3MtY3Jvc3MgPSAnQVJDSD0ke1RBUkdFVF9BUkNIfSBDQz0iJHtDQ30gJHtDRkxBR1N9ICR7TERGTEFHU30iIFY9MScKLQotaW5oZXJpdCB1Ym9vdC1jb25maWcKLQotZG9fY29tcGlsZSAoKSB7Ci0Jb2VfcnVubWFrZSAke1VCT09UX01BQ0hJTkV9Ci0Jb2VfcnVubWFrZSBlbnYKLX0KLQotZG9faW5zdGFsbCAoKSB7Ci0JaW5zdGFsbCAtZCAke0R9JHtiYXNlX3NiaW5kaXJ9Ci0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQotCWluc3RhbGwgLW0gNzU1ICR7U30vdG9vbHMvZW52L2Z3X3ByaW50ZW52ICR7RH0ke2Jhc2Vfc2JpbmRpcn0vZndfcHJpbnRlbnYKLQlpbnN0YWxsIC1tIDc1NSAke1N9L3Rvb2xzL2Vudi9md19wcmludGVudiAke0R9JHtiYXNlX3NiaW5kaXJ9L2Z3X3NldGVudgotCWluc3RhbGwgLW0gMDY0NCAke1N9L3Rvb2xzL2Vudi9md19lbnYuY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L2Z3X2Vudi5jb25maWcKLX0KLQotZG9faW5zdGFsbF9jbGFzcy1jcm9zcyAoKSB7Ci0JaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJfY3Jvc3N9Ci0JaW5zdGFsbCAtbSA3NTUgJHtTfS90b29scy9lbnYvZndfcHJpbnRlbnYgJHtEfSR7YmluZGlyX2Nyb3NzfS9md19wcmludGVudgotCWluc3RhbGwgLW0gNzU1ICR7U30vdG9vbHMvZW52L2Z3X3ByaW50ZW52ICR7RH0ke2JpbmRpcl9jcm9zc30vZndfc2V0ZW52Ci19Ci0KLVNZU1JPT1RfRElSU19hcHBlbmRfY2xhc3MtY3Jvc3MgPSAiICR7YmluZGlyX2Nyb3NzfSIKLQotUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKLUJCQ0xBU1NFWFRFTkQgPSAiY3Jvc3MiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LWZ3LXV0aWxzXzIwMTcuMDkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LWZ3LXV0aWxzXzIwMTcuMDkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI4ODdhMQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QtZnctdXRpbHNfMjAxNy4wOS5iYgpAQCAtMCwwICsxLDM0IEBACityZXF1aXJlIHUtYm9vdC1jb21tb25fJHtQVn0uaW5jCisKK1NVTU1BUlkgPSAiVS1Cb290IGJvb3Rsb2FkZXIgZndfcHJpbnRlbnYvc2V0ZW52IHV0aWxpdGllcyIKK0RFUEVORFMgPSAibXRkLXV0aWxzIgorCitJTlNBTkVfU0tJUF8ke1BOfSA9ICJhbHJlYWR5LXN0cmlwcGVkIgorRVhUUkFfT0VNQUtFX2NsYXNzLXRhcmdldCA9ICdDUk9TU19DT01QSUxFPSR7VEFSR0VUX1BSRUZJWH0gQ0M9IiR7Q0N9ICR7Q0ZMQUdTfSAke0xERkxBR1N9IiBIT1NUQ0M9IiR7QlVJTERfQ0N9ICR7QlVJTERfQ0ZMQUdTfSAke0JVSUxEX0xERkxBR1N9IiBWPTEnCitFWFRSQV9PRU1BS0VfY2xhc3MtY3Jvc3MgPSAnSE9TVENDPSIke0NDfSAke0NGTEFHU30gJHtMREZMQUdTfSIgVj0xJworCitpbmhlcml0IHVib290LWNvbmZpZworCitkb19jb21waWxlICgpIHsKKwlvZV9ydW5tYWtlICR7VUJPT1RfTUFDSElORX0KKwlvZV9ydW5tYWtlIGVudnRvb2xzCit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9zYmluZGlyfQorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDc1NSAke1N9L3Rvb2xzL2Vudi9md19wcmludGVudiAke0R9JHtiYXNlX3NiaW5kaXJ9L2Z3X3ByaW50ZW52CisJaW5zdGFsbCAtbSA3NTUgJHtTfS90b29scy9lbnYvZndfcHJpbnRlbnYgJHtEfSR7YmFzZV9zYmluZGlyfS9md19zZXRlbnYKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS90b29scy9lbnYvZndfZW52LmNvbmZpZyAke0R9JHtzeXNjb25mZGlyfS9md19lbnYuY29uZmlnCit9CisKK2RvX2luc3RhbGxfY2xhc3MtY3Jvc3MgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyX2Nyb3NzfQorCWluc3RhbGwgLW0gNzU1ICR7U30vdG9vbHMvZW52L2Z3X3ByaW50ZW52ICR7RH0ke2JpbmRpcl9jcm9zc30vZndfcHJpbnRlbnYKKwlpbnN0YWxsIC1tIDc1NSAke1N9L3Rvb2xzL2Vudi9md19wcmludGVudiAke0R9JHtiaW5kaXJfY3Jvc3N9L2Z3X3NldGVudgorfQorCitTWVNST09UX0RJUlNfYXBwZW5kX2NsYXNzLWNyb3NzID0gIiAke2JpbmRpcl9jcm9zc30iCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCitCQkNMQVNTRVhURU5EID0gImNyb3NzIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC1ta2ltYWdlXzIwMTcuMDEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LW1raW1hZ2VfMjAxNy4wMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU5OTllNy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LW1raW1hZ2VfMjAxNy4wMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLXJlcXVpcmUgdS1ib290LWNvbW1vbl8ke1BWfS5pbmMKLQotU1JDX1VSSSArPSAiZmlsZTovL2RlZmF1bHQtZ2NjLnBhdGNoIgotCi1TVU1NQVJZID0gIlUtQm9vdCBib290bG9hZGVyIGltYWdlIGNyZWF0aW9uIHRvb2wiCi1ERVBFTkRTID0gIm9wZW5zc2wiCi0KLUVYVFJBX09FTUFLRV9jbGFzcy10YXJnZXQgPSAnQ1JPU1NfQ09NUElMRT0iJHtUQVJHRVRfUFJFRklYfSIgQ0M9IiR7Q0N9ICR7Q0ZMQUdTfSAke0xERkxBR1N9IiBIT1NUQ0M9IiR7QlVJTERfQ0N9ICR7QlVJTERfQ0ZMQUdTfSAke0JVSUxEX0xERkxBR1N9IiBTVFJJUD10cnVlIFY9MScKLUVYVFJBX09FTUFLRV9jbGFzcy1uYXRpdmUgPSAnQ0M9IiR7QlVJTERfQ0N9ICR7QlVJTERfQ0ZMQUdTfSAke0JVSUxEX0xERkxBR1N9IiBIT1NUQ0M9IiR7QlVJTERfQ0N9ICR7QlVJTERfQ0ZMQUdTfSAke0JVSUxEX0xERkxBR1N9IiBTVFJJUD10cnVlIFY9MScKLUVYVFJBX09FTUFLRV9jbGFzcy1uYXRpdmVzZGsgPSAnQ1JPU1NfQ09NUElMRT0iJHtIT1NUX1BSRUZJWH0iIENDPSIke0NDfSAke0NGTEFHU30gJHtMREZMQUdTfSIgSE9TVENDPSIke0JVSUxEX0NDfSAke0JVSUxEX0NGTEFHU30gJHtCVUlMRF9MREZMQUdTfSIgU1RSSVA9dHJ1ZSBWPTEnCi0KLWRvX2NvbXBpbGUgKCkgewotCW9lX3J1bm1ha2Ugc2FuZGJveF9kZWZjb25maWcKLQotCSMgRGlzYWJsZSBDT05GSUdfQ01EX0xJQ0VOU0UsIGxpY2Vuc2UuaCBpcyBub3QgdXNlZCBieSB0b29scyBhbmQKLQkjIGdlbmVyYXRpbmcgaXQgcmVxdWlyZXMgYmluMmhlYWRlciB0b29sLCB3aGljaCBmb3IgdGFyZ2V0IGJ1aWxkCi0JIyBpcyBidWlsdCB3aXRoIHRhcmdldCB0b29scyBhbmQgdGh1cyBjYW5ub3QgYmUgZXhlY3V0ZWQgb24gaG9zdC4KLQlzZWQgLWkgInMvQ09ORklHX0NNRF9MSUNFTlNFPS4qLyMgQ09ORklHX0NNRF9MSUNFTlNFIGlzIG5vdCBzZXQvIiAuY29uZmlnCi0KLQlvZV9ydW5tYWtlIGNyb3NzX3Rvb2xzIE5PX1NETD0xCi19Ci0KLWRvX2luc3RhbGwgKCkgewotCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQotCWluc3RhbGwgLW0gMDc1NSB0b29scy9ta2ltYWdlICR7RH0ke2JpbmRpcn0vdWJvb3QtbWtpbWFnZQotCWxuIC1zZiB1Ym9vdC1ta2ltYWdlICR7RH0ke2JpbmRpcn0vbWtpbWFnZQotfQotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LW1raW1hZ2VfMjAxNy4wOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QtbWtpbWFnZV8yMDE3LjA5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZmM1NjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LW1raW1hZ2VfMjAxNy4wOS5iYgpAQCAtMCwwICsxLDI3IEBACityZXF1aXJlIHUtYm9vdC1jb21tb25fJHtQVn0uaW5jCisKK1NVTU1BUlkgPSAiVS1Cb290IGJvb3Rsb2FkZXIgaW1hZ2UgY3JlYXRpb24gdG9vbCIKK0RFUEVORFMgPSAib3BlbnNzbCIKKworRVhUUkFfT0VNQUtFX2NsYXNzLXRhcmdldCA9ICdDUk9TU19DT01QSUxFPSIke1RBUkdFVF9QUkVGSVh9IiBDQz0iJHtDQ30gJHtDRkxBR1N9ICR7TERGTEFHU30iIEhPU1RDQz0iJHtCVUlMRF9DQ30gJHtCVUlMRF9DRkxBR1N9ICR7QlVJTERfTERGTEFHU30iIFNUUklQPXRydWUgVj0xJworRVhUUkFfT0VNQUtFX2NsYXNzLW5hdGl2ZSA9ICdDQz0iJHtCVUlMRF9DQ30gJHtCVUlMRF9DRkxBR1N9ICR7QlVJTERfTERGTEFHU30iIEhPU1RDQz0iJHtCVUlMRF9DQ30gJHtCVUlMRF9DRkxBR1N9ICR7QlVJTERfTERGTEFHU30iIFNUUklQPXRydWUgVj0xJworRVhUUkFfT0VNQUtFX2NsYXNzLW5hdGl2ZXNkayA9ICdDUk9TU19DT01QSUxFPSIke0hPU1RfUFJFRklYfSIgQ0M9IiR7Q0N9ICR7Q0ZMQUdTfSAke0xERkxBR1N9IiBIT1NUQ0M9IiR7QlVJTERfQ0N9ICR7QlVJTERfQ0ZMQUdTfSAke0JVSUxEX0xERkxBR1N9IiBTVFJJUD10cnVlIFY9MScKKworZG9fY29tcGlsZSAoKSB7CisJb2VfcnVubWFrZSBzYW5kYm94X2RlZmNvbmZpZworCisJIyBEaXNhYmxlIENPTkZJR19DTURfTElDRU5TRSwgbGljZW5zZS5oIGlzIG5vdCB1c2VkIGJ5IHRvb2xzIGFuZAorCSMgZ2VuZXJhdGluZyBpdCByZXF1aXJlcyBiaW4yaGVhZGVyIHRvb2wsIHdoaWNoIGZvciB0YXJnZXQgYnVpbGQKKwkjIGlzIGJ1aWx0IHdpdGggdGFyZ2V0IHRvb2xzIGFuZCB0aHVzIGNhbm5vdCBiZSBleGVjdXRlZCBvbiBob3N0LgorCXNlZCAtaSAicy9DT05GSUdfQ01EX0xJQ0VOU0U9LiovIyBDT05GSUdfQ01EX0xJQ0VOU0UgaXMgbm90IHNldC8iIC5jb25maWcKKworCW9lX3J1bm1ha2UgY3Jvc3NfdG9vbHMgTk9fU0RMPTEKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1IHRvb2xzL21raW1hZ2UgJHtEfSR7YmluZGlyfS91Ym9vdC1ta2ltYWdlCisJbG4gLXNmIHVib290LW1raW1hZ2UgJHtEfSR7YmluZGlyfS9ta2ltYWdlCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC5pbmMKaW5kZXggYWEyMWMwZS4uYzJiY2Y5OSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC5pbmMKQEAgLTMwNCw0ICszMDQsNCBAQAogICAgIGZpCiB9CiAKLWFkZHRhc2sgZGVwbG95IGJlZm9yZSBkb19idWlsZCBhZnRlciBkb19pbnN0YWxsCithZGR0YXNrIGRlcGxveSBiZWZvcmUgZG9fYnVpbGQgYWZ0ZXIgZG9fY29tcGlsZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdF8yMDE3LjAxLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdF8yMDE3LjA5LmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290XzIwMTcuMDEuYmIKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3RfMjAxNy4wOS5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvYXZhaGkuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvYXZhaGkuaW5jCmluZGV4IGZhYTg3NDEuLjc4MTQ0NjQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2F2YWhpLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaS5pbmMKQEAgLTYzLDEwICs2Myw2IEBACiBFWFRSQV9PRUNPTkZfU1lTVklOSVQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywnLS13aXRoLWRpc3Rybz1kZWJpYW4nLCctLXdpdGgtZGlzdHJvPW5vbmUnLGQpfSIKIEVYVFJBX09FQ09ORl9TWVNURU1EID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywnLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vJywnLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyJyxkKX0iCiAKLQotTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1saW50bCIKLUxERkxBR1NfYXBwZW5kX3VjbGludXgtdWNsaWJjID0gIiAtbGludGwiCi0KIGRvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgewogICAgIHNlZCAnczpBTV9DSEVDS19QWU1PRDplY2hvICJubyBweW1vZCIgI0FNX0NIRUNLX1BZTU9EOmcnIC1pICR7U30vY29uZmlndXJlLmFjCiAKQEAgLTExMSw3ICsxMDcsNiBAQAogCiBSREVQRU5EU18ke1BOfS1kZXYgPSAiYXZhaGktZGFlbW9uICg9ICR7RVhURU5EUEtHVn0pIGxpYmF2YWhpLWNvcmUgKD0gJHtFWFRFTkRQS0dWfSkgbGliYXZhaGktY2xpZW50ICg9ICR7RVhURU5EUEtHVn0pIgogCi0jIHVjbGliYyBoYXMgbm8gbnNzCiBSUkVDT01NRU5EU19hdmFoaS1kYWVtb25fYXBwZW5kX2xpYmMtZ2xpYmMgPSAiIGxpYm5zcy1tZG5zIgogUlJFQ09NTUVORFNfJHtQTn1fYXBwZW5kX2xpYmMtZ2xpYmMgPSAiIGxpYm5zcy1tZG5zIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy8wMDAxLWNvbmZpZ3VyZS5hYy1pbnN0YWxsLUd0a0J1aWxkZXItaW50ZXJmYWNlLWZpbGVzLWZvci0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy8wMDAxLWNvbmZpZ3VyZS5hYy1pbnN0YWxsLUd0a0J1aWxkZXItaW50ZXJmYWNlLWZpbGVzLWZvci0ucGF0Y2gKaW5kZXggOGNjZWYwOC4uOTQyNjA3YSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvMDAwMS1jb25maWd1cmUuYWMtaW5zdGFsbC1HdGtCdWlsZGVyLWludGVyZmFjZS1maWxlcy1mb3ItLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzLzAwMDEtY29uZmlndXJlLmFjLWluc3RhbGwtR3RrQnVpbGRlci1pbnRlcmZhY2UtZmlsZXMtZm9yLS5wYXRjaApAQCAtMSwxNyArMSwxOCBAQAotRnJvbSBhNTlmMTNmYWIzMWE2ZTI1YmIwM2IyYzJiYzNhZWE1NzZmODU3YjZjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSA2ZmYyNTVlZmY0ZmVhNjM1MGI1ZTA0NjJmZWUxNzZmYWRjMjZmYzFjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KIERhdGU6IFN1biwgMTIgSnVuIDIwMTYgMTg6MzI6NDkgKzAzMDAKIFN1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlLmFjOiBpbnN0YWxsIEd0a0J1aWxkZXIgaW50ZXJmYWNlIGZpbGVzIGZvciBHVEsrMwogIHRvbwogCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vbGF0aGlhdC9hdmFoaS9wdWxsLzEzMF0KIFNpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPgogLS0tCiAgY29uZmlndXJlLmFjIHwgMiArLQogIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQogCiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCBhZWJiNzE2Li40OGJkZjYzIDEwMDY0NAoraW5kZXggODdhOWExNy4uOTg2MGRjYyAxMDA2NDQKIC0tLSBhL2NvbmZpZ3VyZS5hYwogKysrIGIvY29uZmlndXJlLmFjCiBAQCAtOTY1LDcgKzk2NSw3IEBAIEFDX1NVQlNUKGF2YWhpX3NvY2tldCkKQEAgLTI0LDUgKzI1LDUgQEAKICAJQUNfU1VCU1QoaW50ZXJmYWNlc2RpcikKICBmaQogLS0gCi0yLjEuNAorMi44LjEKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kLzAwMDEtYnVpbGQtdXNlLXBrZy1jb25maWctdG8tZmluZC1saWJ4bWwyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kLzAwMDEtYnVpbGQtdXNlLXBrZy1jb25maWctdG8tZmluZC1saWJ4bWwyLnBhdGNoCmluZGV4IDgwNWNiYjMuLjFlMjNjMGYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC8wMDAxLWJ1aWxkLXVzZS1wa2ctY29uZmlnLXRvLWZpbmQtbGlieG1sMi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvMDAwMS1idWlsZC11c2UtcGtnLWNvbmZpZy10by1maW5kLWxpYnhtbDIucGF0Y2gKQEAgLTcsMTUgKzcsMTkgQEAKIFVwZGF0ZSBjb250ZXh0IGZvciB2ZXJzaW9uIDkuMTAuMy1QMi4KIAogU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKK1VwZGF0ZSBjb250ZXh0IGZvciB2ZXJzaW9uIDkuMTAuNS1QMy4KKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CiAtLS0KICBjb25maWd1cmUuaW4gfCAyMyArKystLS0tLS0tLS0tLS0tLS0tLS0tLQogIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIwIGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCi1pbmRleCAwZGI4MjZkLi43NTgxOWViIDEwMDY0NAoraW5kZXggNGRhNzNhNC4uNmYyYTc1NCAxMDA2NDQKIC0tLSBhL2NvbmZpZ3VyZS5pbgogKysrIGIvY29uZmlndXJlLmluCi1AQCAtMjEwNywyNiArMjEwNyw5IEBAIGNhc2UgIiR1c2VfbGlieG1sMiIgaW4KK0BAIC0yMjgyLDI2ICsyMjgyLDkgQEAgY2FzZSAiJHVzZV9saWJ4bWwyIiBpbgogIAkJRFNUX0xJQlhNTDJfSU5DPSIiCiAgCQk7OwogIAlhdXRvfHllcykKQEAgLTI1LDcgKzI5LDcgQEAKIC0JCQlsaWJ4bWwyX2NmbGFncz1geG1sMi1jb25maWcgLS1jZmxhZ3NgCiAtCQkJOzsKIC0JCSopCi0tCQkJaWYgdGVzdCAiJHVzZV9saWJ4bWwyIiA9ICJ5ZXMiIDsgdGhlbgorLQkJCWlmIHRlc3QgInllcyIgPSAiJHVzZV9saWJ4bWwyIiA7IHRoZW4KIC0JCQkJQUNfTVNHX1JFU1VMVChubykKIC0JCQkJQUNfTVNHX0VSUk9SKHJlcXVpcmVkIGxpYnhtbDIgdmVyc2lvbiBub3QgYXZhaWxhYmxlKQogLQkJCWVsc2UKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9DVkUtMjAxNi0xMjg1LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL0NWRS0yMDE2LTEyODUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxNDliZDEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL0NWRS0yMDE2LTEyODUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotRnJvbSA3MDAzN2UwNDBlNTg3MzI5Y2VjODIxMjNlMTJiOWY0ZjdjOTQ1ZjY3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTWFyayBBbmRyZXdzIDxtYXJrYUBpc2Mub3JnPgotRGF0ZTogVGh1LCAxOCBGZWIgMjAxNiAxMjoxMToyNyArMTEwMAotU3ViamVjdDogW1BBVENIXSA0MzE4LiAgIFtzZWN1cml0eV0gICAgICBNYWxmb3JtZWQgY29udHJvbCBtZXNzYWdlcyBjYW4KLSB0cmlnZ2VyIGFzc2VydGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgaW4gbmFtZWQgYW5kIHJuZGMuIChDVkUtMjAxNi0xMjg1KQotIFtSVCAjNDE2NjZdCi0KLShjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IGEyYjE1YjMzMDVhY2Q1MjE3OWU2ZjNkYzdkMDczYjA3ZmJjNDBiOGUpCi0KLUNWRTogQ1ZFLTIwMTYtMTI4NQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotW1JlbW92ZWQgZG9jL2FybS9ub3Rlcy54bWwgY2hhbmdlcyBmcm9tIHVwc3RyZWFtIHBhdGNoXQotCi1TaWduZWQtb2ZmLWJ5OiBTb25hIFNhcm1hZGkgPHNvbmEuc2FybWFkaUBlbmVhLmNvbT4KLS0tLQotIENIQU5HRVMgICAgICAgICAgICAgICAgIHwgIDMgKysrCi0gYmluL25hbWVkL2NvbnRyb2wuYyAgICAgfCAgMiArLQotIGJpbi9uYW1lZC9jb250cm9sY29uZi5jIHwgIDIgKy0KLSBiaW4vcm5kYy9ybmRjLmMgICAgICAgICB8ICA4ICsrKystLS0tCi0gZG9jL2FybS9ub3Rlcy54bWwgICAgICAgfCAxMSArKysrKysrKysrKwotIGxpYi9pc2NjYy9jYy5jICAgICAgICAgIHwgMTQgKysrKysrKy0tLS0tLS0KLSA2IGZpbGVzIGNoYW5nZWQsIDI3IGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvQ0hBTkdFUyBiL0NIQU5HRVMKLWluZGV4IGI5YmQ5ZWYuLjJjNzI3ZDUgMTAwNjQ0Ci0tLS0gYS9DSEFOR0VTCi0rKysgYi9DSEFOR0VTCi1AQCAtMSwzICsxLDYgQEAKLSs0MzE4Lglbc2VjdXJpdHldCU1hbGZvcm1lZCBjb250cm9sIG1lc3NhZ2VzIGNhbiB0cmlnZ2VyIGFzc2VydGlvbnMKLSsJCQlpbiBuYW1lZCBhbmQgcm5kYy4gKENWRS0yMDE2LTEyODUpIFtSVCAjNDE2NjZdCi0rCi0gCS0tLSA5LjEwLjMtUDMgcmVsZWFzZWQgLS0tCi0gCi0gNDI4OC4JW2J1Z10JCUZpeGVkIGEgcmVncmVzc2lvbiBpbiByZXNvbHZlci5jOnBvc3NpYmx5X21hcmsoKQotZGlmZiAtLWdpdCBhL2Jpbi9uYW1lZC9jb250cm9sLmMgYi9iaW4vbmFtZWQvY29udHJvbC5jCi1pbmRleCA4NTU0MzM1Li44MTM0MGNhIDEwMDY0NAotLS0tIGEvYmluL25hbWVkL2NvbnRyb2wuYwotKysrIGIvYmluL25hbWVkL2NvbnRyb2wuYwotQEAgLTY5LDcgKzY5LDcgQEAgbnNfY29udHJvbF9kb2NvbW1hbmQoaXNjY2Nfc2V4cHJfdCAqbWVzc2FnZSwgaXNjX2J1ZmZlcl90ICp0ZXh0KSB7Ci0gI2VuZGlmCi0gCi0gCWRhdGEgPSBpc2NjY19hbGlzdF9sb29rdXAobWVzc2FnZSwgIl9kYXRhIik7Ci0tCWlmIChkYXRhID09IE5VTEwpIHsKLSsJaWYgKCFpc2NjY19hbGlzdF9hbGlzdHAoZGF0YSkpIHsKLSAJCS8qCi0gCQkgKiBObyBkYXRhIHNlY3Rpb24uCi0gCQkgKi8KLWRpZmYgLS1naXQgYS9iaW4vbmFtZWQvY29udHJvbGNvbmYuYyBiL2Jpbi9uYW1lZC9jb250cm9sY29uZi5jCi1pbmRleCA3NjVhZmRkLi5hMzlhYjhiIDEwMDY0NAotLS0tIGEvYmluL25hbWVkL2NvbnRyb2xjb25mLmMKLSsrKyBiL2Jpbi9uYW1lZC9jb250cm9sY29uZi5jCi1AQCAtNDAyLDcgKzQwMiw3IEBAIGNvbnRyb2xfcmVjdm1lc3NhZ2UoaXNjX3Rhc2tfdCAqdGFzaywgaXNjX2V2ZW50X3QgKmV2ZW50KSB7Ci0gCSAqIExpbWl0IGV4cG9zdXJlIHRvIHJlcGxheSBhdHRhY2tzLgotIAkgKi8KLSAJX2N0cmwgPSBpc2NjY19hbGlzdF9sb29rdXAocmVxdWVzdCwgIl9jdHJsIik7Ci0tCWlmIChfY3RybCA9PSBOVUxMKSB7Ci0rCWlmICghaXNjY2NfYWxpc3RfYWxpc3RwKF9jdHJsKSkgewotIAkJbG9nX2ludmFsaWQoJmNvbm4tPmNjbXNnLCBJU0NfUl9GQUlMVVJFKTsKLSAJCWdvdG8gY2xlYW51cF9yZXF1ZXN0OwotIAl9Ci1kaWZmIC0tZ2l0IGEvYmluL3JuZGMvcm5kYy5jIGIvYmluL3JuZGMvcm5kYy5jCi1pbmRleCBjYjE3MDUwLi5iNmUwNWM4IDEwMDY0NAotLS0tIGEvYmluL3JuZGMvcm5kYy5jCi0rKysgYi9iaW4vcm5kYy9ybmRjLmMKLUBAIC0yNTUsOCArMjU1LDggQEAgcm5kY19yZWN2ZG9uZShpc2NfdGFza190ICp0YXNrLCBpc2NfZXZlbnRfdCAqZXZlbnQpIHsKLSAJICAgaXNjY2NfY2NfZnJvbXdpcmUoJnNvdXJjZSwgJnJlc3BvbnNlLCBhbGdvcml0aG0sICZzZWNyZXQpKTsKLSAKLSAJZGF0YSA9IGlzY2NjX2FsaXN0X2xvb2t1cChyZXNwb25zZSwgIl9kYXRhIik7Ci0tCWlmIChkYXRhID09IE5VTEwpCi0tCQlmYXRhbCgibm8gZGF0YSBzZWN0aW9uIGluIHJlc3BvbnNlIik7Ci0rCWlmICghaXNjY2NfYWxpc3RfYWxpc3RwKGRhdGEpKQotKwkJZmF0YWwoImJhZCBvciBtaXNzaW5nIGRhdGEgc2VjdGlvbiBpbiByZXNwb25zZSIpOwotIAlyZXN1bHQgPSBpc2NjY19jY19sb29rdXBzdHJpbmcoZGF0YSwgImVyciIsICZlcnJvcm1zZyk7Ci0gCWlmIChyZXN1bHQgPT0gSVNDX1JfU1VDQ0VTUykgewotIAkJZmFpbGVkID0gSVNDX1RSVUU7Ci1AQCAtMzIxLDggKzMyMSw4IEBAIHJuZGNfcmVjdm5vbmNlKGlzY190YXNrX3QgKnRhc2ssIGlzY19ldmVudF90ICpldmVudCkgewotIAkgICBpc2NjY19jY19mcm9td2lyZSgmc291cmNlLCAmcmVzcG9uc2UsIGFsZ29yaXRobSwgJnNlY3JldCkpOwotIAotIAlfY3RybCA9IGlzY2NjX2FsaXN0X2xvb2t1cChyZXNwb25zZSwgIl9jdHJsIik7Ci0tCWlmIChfY3RybCA9PSBOVUxMKQotLQkJZmF0YWwoIl9jdHJsIHNlY3Rpb24gbWlzc2luZyIpOwotKwlpZiAoIWlzY2NjX2FsaXN0X2FsaXN0cChfY3RybCkpCi0rCQlmYXRhbCgiYmFkIG9yIG1pc3NpbmcgY3RybCBzZWN0aW9uIGluIHJlc3BvbnNlIik7Ci0gCW5vbmNlID0gMDsKLSAJaWYgKGlzY2NjX2NjX2xvb2t1cHVpbnQzMihfY3RybCwgIl9ub25jZSIsICZub25jZSkgIT0gSVNDX1JfU1VDQ0VTUykKLSAJCW5vbmNlID0gMDsKLWRpZmYgLS1naXQgYS9saWIvaXNjY2MvY2MuYyBiL2xpYi9pc2NjYy9jYy5jCi1pbmRleCA0N2EzYjc0Li4yYmI5NjFlIDEwMDY0NAotLS0tIGEvbGliL2lzY2NjL2NjLmMKLSsrKyBiL2xpYi9pc2NjYy9jYy5jCi1AQCAtNDAzLDEzICs0MDMsMTMgQEAgdmVyaWZ5KGlzY2NjX3NleHByX3QgKmFsaXN0LCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLAotIAkgKiBFeHRyYWN0IGRpZ2VzdC4KLSAJICovCi0gCV9hdXRoID0gaXNjY2NfYWxpc3RfbG9va3VwKGFsaXN0LCAiX2F1dGgiKTsKLS0JaWYgKF9hdXRoID09IE5VTEwpCi0rCWlmICghaXNjY2NfYWxpc3RfYWxpc3RwKF9hdXRoKSkKLSAJCXJldHVybiAoSVNDX1JfRkFJTFVSRSk7Ci0gCWlmIChhbGdvcml0aG0gPT0gSVNDQ0NfQUxHX0hNQUNNRDUpCi0gCQlobWFjID0gaXNjY2NfYWxpc3RfbG9va3VwKF9hdXRoLCAiaG1kNSIpOwotIAllbHNlCi0gCQlobWFjID0gaXNjY2NfYWxpc3RfbG9va3VwKF9hdXRoLCAiaHNoYSIpOwotLQlpZiAoaG1hYyA9PSBOVUxMKQotKwlpZiAoIWlzY2NjX3NleHByX2JpbmFyeXAoaG1hYykpCi0gCQlyZXR1cm4gKElTQ19SX0ZBSUxVUkUpOwotIAkvKgotIAkgKiBDb21wdXRlIGRpZ2VzdC4KLUBAIC03MjgsNyArNzI4LDcgQEAgaXNjY2NfY2NfY3JlYXRlYWNrKGlzY2NjX3NleHByX3QgKm1lc3NhZ2UsIGlzY19ib29sZWFuX3Qgb2ssCi0gCVJFUVVJUkUoYWNrcCAhPSBOVUxMICYmICphY2twID09IE5VTEwpOwotIAotIAlfY3RybCA9IGlzY2NjX2FsaXN0X2xvb2t1cChtZXNzYWdlLCAiX2N0cmwiKTsKLS0JaWYgKF9jdHJsID09IE5VTEwgfHwKLSsJaWYgKCFpc2NjY19hbGlzdF9hbGlzdHAoX2N0cmwpIHx8Ci0gCSAgICBpc2NjY19jY19sb29rdXB1aW50MzIoX2N0cmwsICJfc2VyIiwgJnNlcmlhbCkgIT0gSVNDX1JfU1VDQ0VTUyB8fAotIAkgICAgaXNjY2NfY2NfbG9va3VwdWludDMyKF9jdHJsLCAiX3RpbSIsICZ0KSAhPSBJU0NfUl9TVUNDRVNTKQotIAkJcmV0dXJuIChJU0NfUl9GQUlMVVJFKTsKLUBAIC03NzMsNyArNzczLDcgQEAgaXNjY2NfY2NfaXNhY2soaXNjY2Nfc2V4cHJfdCAqbWVzc2FnZSkKLSAJaXNjY2Nfc2V4cHJfdCAqX2N0cmw7Ci0gCi0gCV9jdHJsID0gaXNjY2NfYWxpc3RfbG9va3VwKG1lc3NhZ2UsICJfY3RybCIpOwotLQlpZiAoX2N0cmwgPT0gTlVMTCkKLSsJaWYgKCFpc2NjY19hbGlzdF9hbGlzdHAoX2N0cmwpKQotIAkJcmV0dXJuIChJU0NfRkFMU0UpOwotIAlpZiAoaXNjY2NfY2NfbG9va3Vwc3RyaW5nKF9jdHJsLCAiX2FjayIsIE5VTEwpID09IElTQ19SX1NVQ0NFU1MpCi0gCQlyZXR1cm4gKElTQ19UUlVFKTsKLUBAIC03ODYsNyArNzg2LDcgQEAgaXNjY2NfY2NfaXNyZXBseShpc2NjY19zZXhwcl90ICptZXNzYWdlKQotIAlpc2NjY19zZXhwcl90ICpfY3RybDsKLSAKLSAJX2N0cmwgPSBpc2NjY19hbGlzdF9sb29rdXAobWVzc2FnZSwgIl9jdHJsIik7Ci0tCWlmIChfY3RybCA9PSBOVUxMKQotKwlpZiAoIWlzY2NjX2FsaXN0X2FsaXN0cChfY3RybCkpCi0gCQlyZXR1cm4gKElTQ19GQUxTRSk7Ci0gCWlmIChpc2NjY19jY19sb29rdXBzdHJpbmcoX2N0cmwsICJfcnBsIiwgTlVMTCkgPT0gSVNDX1JfU1VDQ0VTUykKLSAJCXJldHVybiAoSVNDX1RSVUUpOwotQEAgLTgwNiw3ICs4MDYsNyBAQCBpc2NjY19jY19jcmVhdGVyZXNwb25zZShpc2NjY19zZXhwcl90ICptZXNzYWdlLCBpc2NjY190aW1lX3Qgbm93LAotIAotIAlfY3RybCA9IGlzY2NjX2FsaXN0X2xvb2t1cChtZXNzYWdlLCAiX2N0cmwiKTsKLSAJX2RhdGEgPSBpc2NjY19hbGlzdF9sb29rdXAobWVzc2FnZSwgIl9kYXRhIik7Ci0tCWlmIChfY3RybCA9PSBOVUxMIHx8IF9kYXRhID09IE5VTEwgfHwKLSsJaWYgKCFpc2NjY19hbGlzdF9hbGlzdHAoX2N0cmwpIHx8ICFpc2NjY19hbGlzdF9hbGlzdHAoX2RhdGEpIHx8Ci0gCSAgICBpc2NjY19jY19sb29rdXB1aW50MzIoX2N0cmwsICJfc2VyIiwgJnNlcmlhbCkgIT0gSVNDX1JfU1VDQ0VTUyB8fAotIAkgICAgaXNjY2NfY2NfbG9va3Vwc3RyaW5nKF9kYXRhLCAidHlwZSIsICZ0eXBlKSAhPSBJU0NfUl9TVUNDRVNTKQotIAkJcmV0dXJuIChJU0NfUl9GQUlMVVJFKTsKLUBAIC05OTUsNyArOTk1LDcgQEAgaXNjY2NfY2NfY2hlY2tkdXAoaXNjY2Nfc3ltdGFiX3QgKnN5bXRhYiwgaXNjY2Nfc2V4cHJfdCAqbWVzc2FnZSwKLSAJaXNjY2Nfc2V4cHJfdCAqX2N0cmw7Ci0gCi0gCV9jdHJsID0gaXNjY2NfYWxpc3RfbG9va3VwKG1lc3NhZ2UsICJfY3RybCIpOwotLQlpZiAoX2N0cmwgPT0gTlVMTCB8fAotKwlpZiAoIWlzY2NjX2FsaXN0X2FsaXN0cChfY3RybCkgfHwKLSAJICAgIGlzY2NjX2NjX2xvb2t1cHN0cmluZyhfY3RybCwgIl9zZXIiLCAmX3NlcikgIT0gSVNDX1JfU1VDQ0VTUyB8fAotIAkgICAgaXNjY2NfY2NfbG9va3Vwc3RyaW5nKF9jdHJsLCAiX3RpbSIsICZfdGltKSAhPSBJU0NfUl9TVUNDRVNTKQotIAkJcmV0dXJuIChJU0NfUl9GQUlMVVJFKTsKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL0NWRS0yMDE2LTEyODZfMS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9DVkUtMjAxNi0xMjg2XzEucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlNWNjNDguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL0NWRS0yMDE2LTEyODZfMS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLUZyb20gYTNkMzI3YmYxY2VhYWVhYmIyMDIyM2Q4ZGU4NTE2NmU5NDBiOWYxMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IE11a3VuZCBTaXZhcmFtYW4gPG11a3NAaXNjLm9yZz4KLURhdGU6IE1vbiwgMjIgRmViIDIwMTYgMTI6MjI6NDMgKzA1MzAKLVN1YmplY3Q6IFtQQVRDSF0gRml4IHJlc29sdmVyIGFzc2VydGlvbiBmYWlsdXJlIGR1ZSB0byBpbXByb3BlciBETkFNRSBoYW5kbGluZwotIChDVkUtMjAxNi0xMjg2KSAoIzQxNzUzKQotCi0oY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCA1OTk1ZmVjNTFjYzhiYjdlNTM4MDRlNDkzNmU2MGFhMTUzN2YzNjczKQotCi1DVkU6IENWRS0yMDE2LTEyODYKLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotW1JlbW92ZWQgZG9jL2FybS9ub3Rlcy54bWwgY2hhbmdlcyBmcm9tIHVwc3RyZWFtIHBhdGNoLl0KLQotU2lnbmVkLW9mZi1ieTogU29uYSBTYXJtYWRpIDxzb25hLnNhcm1hZGlAZW5lYS5jb20+Ci0tLS0KLWRpZmYgLXJ1TiBhL0NIQU5HRVMgYi9DSEFOR0VTCi0tLS0gYS9DSEFOR0VTCTIwMTYtMDQtMTMgMDc6Mjg6NDQuOTQwODczNjI5ICswMjAwCi0rKysgYi9DSEFOR0VTCTIwMTYtMDQtMTMgMDc6Mzg6MzguOTIzMTY3ODUxICswMjAwCi1AQCAtMSwzICsxLDcgQEAKLSs0MzE5LiAgW3NlY3VyaXR5XSAgICAgIEZpeCByZXNvbHZlciBhc3NlcnRpb24gZmFpbHVyZSBkdWUgdG8gaW1wcm9wZXIKLSsgICAgICAgICAgICAgICAgICAgICAgIEROQU1FIGhhbmRsaW5nIHdoZW4gcGFyc2luZyBmZXRjaCByZXBseSBtZXNzYWdlcy4KLSsgICAgICAgICAgICAgICAgICAgICAgIChDVkUtMjAxNi0xMjg2KSBbUlQgIzQxNzUzXQotKwotIDQzMTguCVtzZWN1cml0eV0JTWFsZm9ybWVkIGNvbnRyb2wgbWVzc2FnZXMgY2FuIHRyaWdnZXIgYXNzZXJ0aW9ucwotIAkJCWluIG5hbWVkIGFuZCBybmRjLiAoQ1ZFLTIwMTYtMTI4NSkgW1JUICM0MTY2Nl0KLSAKLWRpZmYgLXJ1TiBhL2xpYi9kbnMvcmVzb2x2ZXIuYyBiL2xpYi9kbnMvcmVzb2x2ZXIuYwotLS0tIGEvbGliL2Rucy9yZXNvbHZlci5jCTIwMTYtMDQtMTMgMDc6Mjg6NDMuMDg4OTUzNzkwICswMjAwCi0rKysgYi9saWIvZG5zL3Jlc29sdmVyLmMJMjAxNi0wNC0xMyAwNzozODoyMC40MTE5Njg5MjUgKzAyMDAKLUBAIC02OTY3LDIxICs2OTY3LDI2IEBACi0gCQkJCWlzY19ib29sZWFuX3QgZm91bmRfZG5hbWUgPSBJU0NfRkFMU0U7Ci0gCQkJCWRuc19uYW1lX3QgKmRuYW1lX25hbWU7Ci0gCi0rCQkJCS8qCi0rCQkJCSAqIE9ubHkgcGFzcyBETkFNRSBvciBSUlNJRyhETkFNRSkuCi0rCQkJCSAqLwotKwkJCQlpZiAocmRhdGFzZXQtPnR5cGUgIT0gZG5zX3JkYXRhdHlwZV9kbmFtZSAmJgotKwkJCQkgICAgKHJkYXRhc2V0LT50eXBlICE9IGRuc19yZGF0YXR5cGVfcnJzaWcgfHwKLSsJCQkJICAgICByZGF0YXNldC0+Y292ZXJzICE9IGRuc19yZGF0YXR5cGVfZG5hbWUpKQotKwkJCQkJY29udGludWU7Ci0rCi0rCQkJCS8qCi0rCQkJCSAqIElmIHdlJ3JlIG5vdCBjaGFpbmluZywgdGhlbiB0aGUgRE5BTUUgYW5kCi0rCQkJCSAqIGl0cyBzaWduYXR1cmUgc2hvdWxkIG5vdCBiZSBleHRlcm5hbC4KLSsJCQkJICovCi0rCQkJCWlmICghY2hhaW5pbmcgJiYgZXh0ZXJuYWwpIHsKLSsJCQkJCWxvZ19mb3JtZXJyKGZjdHgsICJleHRlcm5hbCBETkFNRSIpOwotKwkJCQkJcmV0dXJuIChETlNfUl9GT1JNRVJSKTsKLSsJCQkJfQotKwotIAkJCQlmb3VuZCA9IElTQ19GQUxTRTsKLSAJCQkJYWZsYWcgPSAwOwotIAkJCQlpZiAocmRhdGFzZXQtPnR5cGUgPT0gZG5zX3JkYXRhdHlwZV9kbmFtZSkgewotLQkJCQkJLyoKLS0JCQkJCSAqIFdlJ3JlIGxvb2tpbmcgZm9yIHNvbWV0aGluZyBlbHNlLAotLQkJCQkJICogYnV0IHdlIGZvdW5kIGEgRE5BTUUuCi0tCQkJCQkgKgotLQkJCQkJICogSWYgd2UncmUgbm90IGNoYWluaW5nLCB0aGVuIHRoZQotLQkJCQkJICogRE5BTUUgc2hvdWxkIG5vdCBiZSBleHRlcm5hbC4KLS0JCQkJCSAqLwotLQkJCQkJaWYgKCFjaGFpbmluZyAmJiBleHRlcm5hbCkgewotLQkJCQkJCWxvZ19mb3JtZXJyKGZjdHgsCi0tCQkJCQkJCSAgICAiZXh0ZXJuYWwgRE5BTUUiKTsKLS0JCQkJCQlyZXR1cm4gKEROU19SX0ZPUk1FUlIpOwotLQkJCQkJfQotIAkJCQkJZm91bmQgPSBJU0NfVFJVRTsKLSAJCQkJCXdhbnRfY2hhaW5pbmcgPSBJU0NfVFJVRTsKLSAJCQkJCVBPU1Qod2FudF9jaGFpbmluZyk7Ci1AQCAtNzAxMCw5ICs3MDE1LDcgQEAKLSAJCQkJCQkJJmZjdHgtPmRvbWFpbikpIHsKLSAJCQkJCQlyZXR1cm4gKEROU19SX1NFUlZGQUlMKTsKLSAJCQkJCX0KLS0JCQkJfSBlbHNlIGlmIChyZGF0YXNldC0+dHlwZSA9PSBkbnNfcmRhdGF0eXBlX3Jyc2lnCi0tCQkJCQkgICAmJiByZGF0YXNldC0+Y292ZXJzID09Ci0tCQkJCQkgICBkbnNfcmRhdGF0eXBlX2RuYW1lKSB7Ci0rCQkJCX0gZWxzZSB7Ci0gCQkJCQkvKgotIAkJCQkJICogV2UndmUgZm91bmQgYSBzaWduYXR1cmUgdGhhdAotIAkJCQkJICogY292ZXJzIHRoZSBETkFNRS4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9DVkUtMjAxNi0xMjg2XzIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvQ1ZFLTIwMTYtMTI4Nl8yLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjVjYjBkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9DVkUtMjAxNi0xMjg2XzIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMTcgKzAsMCBAQAotRnJvbSA3NjAyYmUyNzZhNzNhNmViNTQzMWM1YWNkOTcxOGU2OGE1NWU4YjYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTWFyayBBbmRyZXdzIDxtYXJrYUBpc2Mub3JnPgotRGF0ZTogTW9uLCAyOSBGZWIgMjAxNiAwNzoxNjo0OCArMTEwMAotU3ViamVjdDogW1BBVENIXSBQYXJ0IDIgb2Y6IDQzMTkuICAgW3NlY3VyaXR5XSAgICAgIEZpeCByZXNvbHZlciBhc3NlcnRpb24KLSBmYWlsdXJlIGR1ZSB0byBpbXByb3BlciAgICAgICAgICAgICAgICAgICAgICAgICBETkFNRSBoYW5kbGluZyB3aGVuIHBhcnNpbmcKLSBmZXRjaCByZXBseSBtZXNzYWdlcy4gICAgICAgICAgICAgICAgICAgICAgICAgKENWRS0yMDE2LTEyODYpIFtSVCAjNDE3NTNdCi0KLUNWRTogQ1ZFLTIwMTYtMTI4NgotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi0oY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCAyZGU4OWVlOWRlOGM4ZGE5ZGMxNTNhNzU0YjAyZGNkYmI3ZmUyMzc0KQotU2lnbmVkLW9mZi1ieTogU29uYSBTYXJtYWRpIDxzb25hLnNhcm1hZGlAZW5lYS5jb20+Ci0tLS0KLSBsaWIvZG5zL3Jlc29sdmVyLmMgfCAxOTIgKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgOTMgaW5zZXJ0aW9ucygrKSwgOTkgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9saWIvZG5zL3Jlc29sdmVyLmMgYi9saWIvZG5zL3Jlc29sdmVyLmMKLWluZGV4IDcwYWJhODcuLjQxZTlkZjQgMTAwNjQ0Ci0tLS0gYS9saWIvZG5zL3Jlc29sdmVyLmMKLSsrKyBiL2xpYi9kbnMvcmVzb2x2ZXIuYwotQEAgLTYwNzQsMTQgKzYwNzQsMTEgQEAgY25hbWVfdGFyZ2V0KGRuc19yZGF0YXNldF90ICpyZGF0YXNldCwgZG5zX25hbWVfdCAqdG5hbWUpIHsKLSB9Ci0gCi0gc3RhdGljIGlubGluZSBpc2NfcmVzdWx0X3QKLS1kbmFtZV90YXJnZXQoZmV0Y2hjdHhfdCAqZmN0eCwgZG5zX3JkYXRhc2V0X3QgKnJkYXRhc2V0LCBkbnNfbmFtZV90ICpxbmFtZSwKLS0JICAgICBkbnNfbmFtZV90ICpvbmFtZSwgZG5zX2ZpeGVkbmFtZV90ICpmaXhlZGRuYW1lKQotK2RuYW1lX3RhcmdldChkbnNfcmRhdGFzZXRfdCAqcmRhdGFzZXQsIGRuc19uYW1lX3QgKnFuYW1lLAotKwkgICAgIHVuc2lnbmVkIGludCBubGFiZWxzLCBkbnNfZml4ZWRuYW1lX3QgKmZpeGVkZG5hbWUpCi0gewotIAlpc2NfcmVzdWx0X3QgcmVzdWx0OwotIAlkbnNfcmRhdGFfdCByZGF0YSA9IEROU19SREFUQV9JTklUOwotLQl1bnNpZ25lZCBpbnQgbmxhYmVsczsKLS0JaW50IG9yZGVyOwotLQlkbnNfbmFtZXJlbG5fdCBuYW1lcmVsbjsKLSAJZG5zX3JkYXRhX2RuYW1lX3QgZG5hbWU7Ci0gCWRuc19maXhlZG5hbWVfdCBwcmVmaXg7Ci0gCi1AQCAtNjA5NiwyMSArNjA5Myw2IEBAIGRuYW1lX3RhcmdldChmZXRjaGN0eF90ICpmY3R4LCBkbnNfcmRhdGFzZXRfdCAqcmRhdGFzZXQsIGRuc19uYW1lX3QgKnFuYW1lLAotIAlpZiAocmVzdWx0ICE9IElTQ19SX1NVQ0NFU1MpCi0gCQlyZXR1cm4gKHJlc3VsdCk7Ci0gCi0tCS8qCi0tCSAqIEdldCB0aGUgcHJlZml4IG9mIHFuYW1lLgotLQkgKi8KLS0JbmFtZXJlbG4gPSBkbnNfbmFtZV9mdWxsY29tcGFyZShxbmFtZSwgb25hbWUsICZvcmRlciwgJm5sYWJlbHMpOwotLQlpZiAobmFtZXJlbG4gIT0gZG5zX25hbWVyZWxuX3N1YmRvbWFpbikgewotLQkJY2hhciBxYnVmW0ROU19OQU1FX0ZPUk1BVFNJWkVdOwotLQkJY2hhciBvYnVmW0ROU19OQU1FX0ZPUk1BVFNJWkVdOwotLQotLQkJZG5zX3JkYXRhX2ZyZWVzdHJ1Y3QoJmRuYW1lKTsKLS0JCWRuc19uYW1lX2Zvcm1hdChxbmFtZSwgcWJ1Ziwgc2l6ZW9mKHFidWYpKTsKLS0JCWRuc19uYW1lX2Zvcm1hdChvbmFtZSwgb2J1Ziwgc2l6ZW9mKG9idWYpKTsKLS0JCWxvZ19mb3JtZXJyKGZjdHgsICJ1bnJlbGF0ZWQgRE5BTUUgaW4gYW5zd2VyOiAiCi0tCQkJCSAgICIlcyBpcyBub3QgaW4gJXMiLCBxYnVmLCBvYnVmKTsKLS0JCXJldHVybiAoRE5TX1JfRk9STUVSUik7Ci0tCX0KLSAJZG5zX2ZpeGVkbmFtZV9pbml0KCZwcmVmaXgpOwotIAlkbnNfbmFtZV9zcGxpdChxbmFtZSwgbmxhYmVscywgZG5zX2ZpeGVkbmFtZV9uYW1lKCZwcmVmaXgpLCBOVUxMKTsKLSAJZG5zX2ZpeGVkbmFtZV9pbml0KGZpeGVkZG5hbWUpOwotQEAgLTY3MzYsMTMgKzY3MTgsMTMgQEAgc3RhdGljIGlzY19yZXN1bHRfdAotIGFuc3dlcl9yZXNwb25zZShmZXRjaGN0eF90ICpmY3R4KSB7Ci0gCWlzY19yZXN1bHRfdCByZXN1bHQ7Ci0gCWRuc19tZXNzYWdlX3QgKm1lc3NhZ2U7Ci0tCWRuc19uYW1lX3QgKm5hbWUsICpxbmFtZSwgdG5hbWUsICpuc19uYW1lOwotKwlkbnNfbmFtZV90ICpuYW1lLCAqZG5hbWUsICpxbmFtZSwgdG5hbWUsICpuc19uYW1lOwotIAlkbnNfcmRhdGFzZXRfdCAqcmRhdGFzZXQsICpuc19yZGF0YXNldDsKLSAJaXNjX2Jvb2xlYW5fdCBkb25lLCBleHRlcm5hbCwgY2hhaW5pbmcsIGFhLCBmb3VuZCwgd2FudF9jaGFpbmluZzsKLSAJaXNjX2Jvb2xlYW5fdCBoYXZlX2Fuc3dlciwgZm91bmRfY25hbWUsIGZvdW5kX3R5cGUsIHdhbnRlZF9jaGFpbmluZzsKLSAJdW5zaWduZWQgaW50IGFmbGFnOwotIAlkbnNfcmRhdGF0eXBlX3QgdHlwZTsKLS0JZG5zX2ZpeGVkbmFtZV90IGRuYW1lLCBmcW5hbWU7Ci0rCWRuc19maXhlZG5hbWVfdCBmZG5hbWUsIGZxbmFtZTsKLSAJZG5zX3ZpZXdfdCAqdmlldzsKLSAKLSAJRkNUWFRSQUNFKCJhbnN3ZXJfcmVzcG9uc2UiKTsKLUBAIC02NzcwLDEwICs2NzUyLDE1IEBAIGFuc3dlcl9yZXNwb25zZShmZXRjaGN0eF90ICpmY3R4KSB7Ci0gCXZpZXcgPSBmY3R4LT5yZXMtPnZpZXc7Ci0gCXJlc3VsdCA9IGRuc19tZXNzYWdlX2ZpcnN0bmFtZShtZXNzYWdlLCBETlNfU0VDVElPTl9BTlNXRVIpOwotIAl3aGlsZSAoIWRvbmUgJiYgcmVzdWx0ID09IElTQ19SX1NVQ0NFU1MpIHsKLSsJCWRuc19uYW1lcmVsbl90IG5hbWVyZWxuOwotKwkJaW50IG9yZGVyOwotKwkJdW5zaWduZWQgaW50IG5sYWJlbHM7Ci0rCi0gCQluYW1lID0gTlVMTDsKLSAJCWRuc19tZXNzYWdlX2N1cnJlbnRuYW1lKG1lc3NhZ2UsIEROU19TRUNUSU9OX0FOU1dFUiwgJm5hbWUpOwotIAkJZXh0ZXJuYWwgPSBJU0NfVEYoIWRuc19uYW1lX2lzc3ViZG9tYWluKG5hbWUsICZmY3R4LT5kb21haW4pKTsKLS0JCWlmIChkbnNfbmFtZV9lcXVhbChuYW1lLCBxbmFtZSkpIHsKLSsJCW5hbWVyZWxuID0gZG5zX25hbWVfZnVsbGNvbXBhcmUocW5hbWUsIG5hbWUsICZvcmRlciwgJm5sYWJlbHMpOwotKwkJaWYgKG5hbWVyZWxuID09IGRuc19uYW1lcmVsbl9lcXVhbCkgewotIAkJCXdhbnRlZF9jaGFpbmluZyA9IElTQ19GQUxTRTsKLSAJCQlmb3IgKHJkYXRhc2V0ID0gSVNDX0xJU1RfSEVBRChuYW1lLT5saXN0KTsKLSAJCQkgICAgIHJkYXRhc2V0ICE9IE5VTEw7Ci1AQCAtNjg5OCwxMCArNjg4NSwxMSBAQCBhbnN3ZXJfcmVzcG9uc2UoZmV0Y2hjdHhfdCAqZmN0eCkgewotIAkJCQkJCSAqLwotIAkJCQkJCUlOU0lTVCghZXh0ZXJuYWwpOwotIAkJCQkJCWlmIChhZmxhZyA9PQotLQkJCQkJCSAgICBETlNfUkRBVEFTRVRBVFRSX0FOU1dFUikKLSsJCQkJCQkgICAgRE5TX1JEQVRBU0VUQVRUUl9BTlNXRVIpIHsKLSAJCQkJCQkJaGF2ZV9hbnN3ZXIgPSBJU0NfVFJVRTsKLS0JCQkJCQluYW1lLT5hdHRyaWJ1dGVzIHw9Ci0tCQkJCQkJCUROU19OQU1FQVRUUl9BTlNXRVI7Ci0rCQkJCQkJCW5hbWUtPmF0dHJpYnV0ZXMgfD0KLSsJCQkJCQkJCUROU19OQU1FQVRUUl9BTlNXRVI7Ci0rCQkJCQkJfQotIAkJCQkJCXJkYXRhc2V0LT5hdHRyaWJ1dGVzIHw9IGFmbGFnOwotIAkJCQkJCWlmIChhYSkKLSAJCQkJCQkJcmRhdGFzZXQtPnRydXN0ID0KLUBAIC02OTU2LDYgKzY5NDQsOCBAQCBhbnN3ZXJfcmVzcG9uc2UoZmV0Y2hjdHhfdCAqZmN0eCkgewotIAkJCWlmICh3YW50ZWRfY2hhaW5pbmcpCi0gCQkJCWNoYWluaW5nID0gSVNDX1RSVUU7Ci0gCQl9IGVsc2UgewotKwkJCWRuc19yZGF0YXNldF90ICpkbmFtZXNldCA9IE5VTEw7Ci0rCi0gCQkJLyoKLSAJCQkgKiBMb29rIGZvciBhIEROQU1FIChvciBpdHMgU0lHKS4gIEFueXRoaW5nIGVsc2UgaXMKLSAJCQkgKiBpZ25vcmVkLgotQEAgLTY5NjMsMTAgKzY5NTMsOCBAQCBhbnN3ZXJfcmVzcG9uc2UoZmV0Y2hjdHhfdCAqZmN0eCkgewotIAkJCXdhbnRlZF9jaGFpbmluZyA9IElTQ19GQUxTRTsKLSAJCQlmb3IgKHJkYXRhc2V0ID0gSVNDX0xJU1RfSEVBRChuYW1lLT5saXN0KTsKLSAJCQkgICAgIHJkYXRhc2V0ICE9IE5VTEw7Ci0tCQkJICAgICByZGF0YXNldCA9IElTQ19MSVNUX05FWFQocmRhdGFzZXQsIGxpbmspKSB7Ci0tCQkJCWlzY19ib29sZWFuX3QgZm91bmRfZG5hbWUgPSBJU0NfRkFMU0U7Ci0tCQkJCWRuc19uYW1lX3QgKmRuYW1lX25hbWU7Ci0tCi0rCQkJICAgICByZGF0YXNldCA9IElTQ19MSVNUX05FWFQocmRhdGFzZXQsIGxpbmspKQotKwkJCXsKLSAJCQkJLyoKLSAJCQkJICogT25seSBwYXNzIEROQU1FIG9yIFJSU0lHKEROQU1FKS4KLSAJCQkJICovCi1AQCAtNjk4MCwyMCArNjk2OCw0MSBAQCBhbnN3ZXJfcmVzcG9uc2UoZmV0Y2hjdHhfdCAqZmN0eCkgewotIAkJCQkgKiBpdHMgc2lnbmF0dXJlIHNob3VsZCBub3QgYmUgZXh0ZXJuYWwuCi0gCQkJCSAqLwotIAkJCQlpZiAoIWNoYWluaW5nICYmIGV4dGVybmFsKSB7Ci0tCQkJCQlsb2dfZm9ybWVycihmY3R4LCAiZXh0ZXJuYWwgRE5BTUUiKTsKLSsJCQkJCWNoYXIgcWJ1ZltETlNfTkFNRV9GT1JNQVRTSVpFXTsKLSsJCQkJCWNoYXIgb2J1ZltETlNfTkFNRV9GT1JNQVRTSVpFXTsKLSsKLSsJCQkJCWRuc19uYW1lX2Zvcm1hdChuYW1lLCBxYnVmLAotKwkJCQkJCQlzaXplb2YocWJ1ZikpOwotKwkJCQkJZG5zX25hbWVfZm9ybWF0KCZmY3R4LT5kb21haW4sIG9idWYsCi0rCQkJCQkJCXNpemVvZihvYnVmKSk7Ci0rCQkJCQlsb2dfZm9ybWVycihmY3R4LCAiZXh0ZXJuYWwgRE5BTUUgb3IgIgotKwkJCQkJCSAgICAiUlJTSUcgY292ZXJpbmcgRE5BTUUgIgotKwkJCQkJCSAgICAiaW4gYW5zd2VyOiAlcyBpcyAiCi0rCQkJCQkJICAgICJub3QgaW4gJXMiLCBxYnVmLCBvYnVmKTsKLSsJCQkJCXJldHVybiAoRE5TX1JfRk9STUVSUik7Ci0rCQkJCX0KLSsKLSsJCQkJaWYgKG5hbWVyZWxuICE9IGRuc19uYW1lcmVsbl9zdWJkb21haW4pIHsKLSsJCQkJCWNoYXIgcWJ1ZltETlNfTkFNRV9GT1JNQVRTSVpFXTsKLSsJCQkJCWNoYXIgb2J1ZltETlNfTkFNRV9GT1JNQVRTSVpFXTsKLSsKLSsJCQkJCWRuc19uYW1lX2Zvcm1hdChxbmFtZSwgcWJ1ZiwKLSsJCQkJCQkJc2l6ZW9mKHFidWYpKTsKLSsJCQkJCWRuc19uYW1lX2Zvcm1hdChuYW1lLCBvYnVmLAotKwkJCQkJCQlzaXplb2Yob2J1ZikpOwotKwkJCQkJbG9nX2Zvcm1lcnIoZmN0eCwgInVucmVsYXRlZCBETkFNRSAiCi0rCQkJCQkJICAgICJpbiBhbnN3ZXI6ICVzIGlzICIKLSsJCQkJCQkgICAgIm5vdCBpbiAlcyIsIHFidWYsIG9idWYpOwotIAkJCQkJcmV0dXJuIChETlNfUl9GT1JNRVJSKTsKLSAJCQkJfQotIAotLQkJCQlmb3VuZCA9IElTQ19GQUxTRTsKLSAJCQkJYWZsYWcgPSAwOwotIAkJCQlpZiAocmRhdGFzZXQtPnR5cGUgPT0gZG5zX3JkYXRhdHlwZV9kbmFtZSkgewotLQkJCQkJZm91bmQgPSBJU0NfVFJVRTsKLSAJCQkJCXdhbnRfY2hhaW5pbmcgPSBJU0NfVFJVRTsKLSAJCQkJCVBPU1Qod2FudF9jaGFpbmluZyk7Ci0gCQkJCQlhZmxhZyA9IEROU19SREFUQVNFVEFUVFJfQU5TV0VSOwotLQkJCQkJcmVzdWx0ID0gZG5hbWVfdGFyZ2V0KGZjdHgsIHJkYXRhc2V0LAotLQkJCQkJCQkgICAgICBxbmFtZSwgbmFtZSwKLS0JCQkJCQkJICAgICAgJmRuYW1lKTsKLSsJCQkJCXJlc3VsdCA9IGRuYW1lX3RhcmdldChyZGF0YXNldCwgcW5hbWUsCi0rCQkJCQkJCSAgICAgIG5sYWJlbHMsICZmZG5hbWUpOwotIAkJCQkJaWYgKHJlc3VsdCA9PSBJU0NfUl9OT1NQQUNFKSB7Ci0gCQkJCQkJLyoKLSAJCQkJCQkgKiBXZSBjYW4ndCBjb25zdHJ1Y3QgdGhlCi1AQCAtNzAwNSwxNCArNzAxNCwxMiBAQCBhbnN3ZXJfcmVzcG9uc2UoZmV0Y2hjdHhfdCAqZmN0eCkgewotIAkJCQkJfSBlbHNlIGlmIChyZXN1bHQgIT0gSVNDX1JfU1VDQ0VTUykKLSAJCQkJCQlyZXR1cm4gKHJlc3VsdCk7Ci0gCQkJCQllbHNlCi0tCQkJCQkJZm91bmRfZG5hbWUgPSBJU0NfVFJVRTsKLSsJCQkJCQlkbmFtZXNldCA9IHJkYXRhc2V0OwotIAotLQkJCQkJZG5hbWVfbmFtZSA9IGRuc19maXhlZG5hbWVfbmFtZSgmZG5hbWUpOwotKwkJCQkJZG5hbWUgPSBkbnNfZml4ZWRuYW1lX25hbWUoJmZkbmFtZSk7Ci0gCQkJCQlpZiAoIWlzX2Fuc3dlcnRhcmdldF9hbGxvd2VkKHZpZXcsCi0tCQkJCQkJCXFuYW1lLAotLQkJCQkJCQlyZGF0YXNldC0+dHlwZSwKLS0JCQkJCQkJZG5hbWVfbmFtZSwKLS0JCQkJCQkJJmZjdHgtPmRvbWFpbikpIHsKLSsJCQkJCQkJcW5hbWUsIHJkYXRhc2V0LT50eXBlLAotKwkJCQkJCQlkbmFtZSwgJmZjdHgtPmRvbWFpbikpIHsKLSAJCQkJCQlyZXR1cm4gKEROU19SX1NFUlZGQUlMKTsKLSAJCQkJCX0KLSAJCQkJfSBlbHNlIHsKLUBAIC03MDIwLDczICs3MDI3LDYwIEBAIGFuc3dlcl9yZXNwb25zZShmZXRjaGN0eF90ICpmY3R4KSB7Ci0gCQkJCQkgKiBXZSd2ZSBmb3VuZCBhIHNpZ25hdHVyZSB0aGF0Ci0gCQkJCQkgKiBjb3ZlcnMgdGhlIEROQU1FLgotIAkJCQkJICovCi0tCQkJCQlmb3VuZCA9IElTQ19UUlVFOwotIAkJCQkJYWZsYWcgPSBETlNfUkRBVEFTRVRBVFRSX0FOU1dFUlNJRzsKLSAJCQkJfQotIAotLQkJCQlpZiAoZm91bmQpIHsKLSsJCQkJLyoKLSsJCQkJICogV2UndmUgZm91bmQgYW4gYW5zd2VyIHRvIG91cgotKwkJCQkgKiBxdWVzdGlvbi4KLSsJCQkJICovCi0rCQkJCW5hbWUtPmF0dHJpYnV0ZXMgfD0gRE5TX05BTUVBVFRSX0NBQ0hFOwotKwkJCQlyZGF0YXNldC0+YXR0cmlidXRlcyB8PSBETlNfUkRBVEFTRVRBVFRSX0NBQ0hFOwotKwkJCQlyZGF0YXNldC0+dHJ1c3QgPSBkbnNfdHJ1c3RfYW5zd2VyOwotKwkJCQlpZiAoIWNoYWluaW5nKSB7Ci0gCQkJCQkvKgotLQkJCQkJICogV2UndmUgZm91bmQgYW4gYW5zd2VyIHRvIG91cgotLQkJCQkJICogcXVlc3Rpb24uCi0rCQkJCQkgKiBUaGlzIGRhdGEgaXMgInRoZSIgYW5zd2VyIHRvCi0rCQkJCQkgKiBvdXIgcXVlc3Rpb24gb25seSBpZiB3ZSdyZQotKwkJCQkJICogbm90IGNoYWluaW5nLgotIAkJCQkJICovCi0tCQkJCQluYW1lLT5hdHRyaWJ1dGVzIHw9Ci0tCQkJCQkJRE5TX05BTUVBVFRSX0NBQ0hFOwotLQkJCQkJcmRhdGFzZXQtPmF0dHJpYnV0ZXMgfD0KLS0JCQkJCQlETlNfUkRBVEFTRVRBVFRSX0NBQ0hFOwotLQkJCQkJcmRhdGFzZXQtPnRydXN0ID0gZG5zX3RydXN0X2Fuc3dlcjsKLS0JCQkJCWlmICghY2hhaW5pbmcpIHsKLS0JCQkJCQkvKgotLQkJCQkJCSAqIFRoaXMgZGF0YSBpcyAidGhlIiBhbnN3ZXIKLS0JCQkJCQkgKiB0byBvdXIgcXVlc3Rpb24gb25seSBpZgotLQkJCQkJCSAqIHdlJ3JlIG5vdCBjaGFpbmluZy4KLS0JCQkJCQkgKi8KLS0JCQkJCQlJTlNJU1QoIWV4dGVybmFsKTsKLS0JCQkJCQlpZiAoYWZsYWcgPT0KLS0JCQkJCQkgICAgRE5TX1JEQVRBU0VUQVRUUl9BTlNXRVIpCi0tCQkJCQkJCWhhdmVfYW5zd2VyID0gSVNDX1RSVUU7Ci0rCQkJCQlJTlNJU1QoIWV4dGVybmFsKTsKLSsJCQkJCWlmIChhZmxhZyA9PSBETlNfUkRBVEFTRVRBVFRSX0FOU1dFUikgewotKwkJCQkJCWhhdmVfYW5zd2VyID0gSVNDX1RSVUU7Ci0gCQkJCQkJbmFtZS0+YXR0cmlidXRlcyB8PQotIAkJCQkJCQlETlNfTkFNRUFUVFJfQU5TV0VSOwotLQkJCQkJCXJkYXRhc2V0LT5hdHRyaWJ1dGVzIHw9IGFmbGFnOwotLQkJCQkJCWlmIChhYSkKLS0JCQkJCQkJcmRhdGFzZXQtPnRydXN0ID0KLS0JCQkJCQkJICBkbnNfdHJ1c3RfYXV0aGFuc3dlcjsKLS0JCQkJCX0gZWxzZSBpZiAoZXh0ZXJuYWwpIHsKLS0JCQkJCQlyZGF0YXNldC0+YXR0cmlidXRlcyB8PQotLQkJCQkJCSAgICBETlNfUkRBVEFTRVRBVFRSX0VYVEVSTkFMOwotLQkJCQkJfQotLQotLQkJCQkJLyoKLS0JCQkJCSAqIEROQU1FIGNoYWluaW5nLgotLQkJCQkJICovCi0tCQkJCQlpZiAoZm91bmRfZG5hbWUpIHsKLS0JCQkJCQkvKgotLQkJCQkJCSAqIENvcHkgdGhlIGRuYW1lIGludG8gdGhlCi0tCQkJCQkJICogcW5hbWUgZml4ZWQgbmFtZS4KLS0JCQkJCQkgKgotLQkJCQkJCSAqIEFsdGhvdWdoIHdlIGNoZWNrIGZvcgotLQkJCQkJCSAqIGZhaWx1cmUgb2YgdGhlIGNvcHkKLS0JCQkJCQkgKiBvcGVyYXRpb24sIGluIHByYWN0aWNlIGl0Ci0tCQkJCQkJICogc2hvdWxkIG5ldmVyIGZhaWwgc2luY2UKLS0JCQkJCQkgKiB3ZSBhbHJlYWR5IGtub3cgdGhhdCB0aGUKLS0JCQkJCQkgKiByZXN1bHQgZml0cyBpbiBhIGZpeGVkbmFtZS4KLS0JCQkJCQkgKi8KLS0JCQkJCQlkbnNfZml4ZWRuYW1lX2luaXQoJmZxbmFtZSk7Ci0tCQkJCQkJcmVzdWx0ID0gZG5zX25hbWVfY29weSgKLS0JCQkJCQkgIGRuc19maXhlZG5hbWVfbmFtZSgmZG5hbWUpLAotLQkJCQkJCSAgZG5zX2ZpeGVkbmFtZV9uYW1lKCZmcW5hbWUpLAotLQkJCQkJCSAgTlVMTCk7Ci0tCQkJCQkJaWYgKHJlc3VsdCAhPSBJU0NfUl9TVUNDRVNTKQotLQkJCQkJCQlyZXR1cm4gKHJlc3VsdCk7Ci0tCQkJCQkJd2FudGVkX2NoYWluaW5nID0gSVNDX1RSVUU7Ci0tCQkJCQkJbmFtZS0+YXR0cmlidXRlcyB8PQotLQkJCQkJCQlETlNfTkFNRUFUVFJfQ0hBSU5JTkc7Ci0tCQkJCQkJcmRhdGFzZXQtPmF0dHJpYnV0ZXMgfD0KLS0JCQkJCQkgICAgRE5TX1JEQVRBU0VUQVRUUl9DSEFJTklORzsKLS0JCQkJCQlxbmFtZSA9IGRuc19maXhlZG5hbWVfbmFtZSgKLS0JCQkJCQkJCSAgICZmcW5hbWUpOwotIAkJCQkJfQotKwkJCQkJcmRhdGFzZXQtPmF0dHJpYnV0ZXMgfD0gYWZsYWc7Ci0rCQkJCQlpZiAoYWEpCi0rCQkJCQkJcmRhdGFzZXQtPnRydXN0ID0KLSsJCQkJCQkgIGRuc190cnVzdF9hdXRoYW5zd2VyOwotKwkJCQl9IGVsc2UgaWYgKGV4dGVybmFsKSB7Ci0rCQkJCQlyZGF0YXNldC0+YXR0cmlidXRlcyB8PQotKwkJCQkJICAgIEROU19SREFUQVNFVEFUVFJfRVhURVJOQUw7Ci0gCQkJCX0KLSAJCQl9Ci0rCi0rCQkJLyoKLSsJCQkgKiBETkFNRSBjaGFpbmluZy4KLSsJCQkgKi8KLSsJCQlpZiAoZG5hbWVzZXQgIT0gTlVMTCkgewotKwkJCQkvKgotKwkJCQkgKiBDb3B5IHRoZSBkbmFtZSBpbnRvIHRoZSBxbmFtZSBmaXhlZCBuYW1lLgotKwkJCQkgKgotKwkJCQkgKiBBbHRob3VnaCB3ZSBjaGVjayBmb3IgZmFpbHVyZSBvZiB0aGUgY29weQotKwkJCQkgKiBvcGVyYXRpb24sIGluIHByYWN0aWNlIGl0IHNob3VsZCBuZXZlciBmYWlsCi0rCQkJCSAqIHNpbmNlIHdlIGFscmVhZHkga25vdyB0aGF0IHRoZSAgcmVzdWx0IGZpdHMKLSsJCQkJICogaW4gYSBmaXhlZG5hbWUuCi0rCQkJCSAqLwotKwkJCQlkbnNfZml4ZWRuYW1lX2luaXQoJmZxbmFtZSk7Ci0rCQkJCXFuYW1lID0gZG5zX2ZpeGVkbmFtZV9uYW1lKCZmcW5hbWUpOwotKwkJCQlyZXN1bHQgPSBkbnNfbmFtZV9jb3B5KGRuYW1lLCBxbmFtZSwgTlVMTCk7Ci0rCQkJCWlmIChyZXN1bHQgIT0gSVNDX1JfU1VDQ0VTUykKLSsJCQkJCXJldHVybiAocmVzdWx0KTsKLSsJCQkJd2FudGVkX2NoYWluaW5nID0gSVNDX1RSVUU7Ci0rCQkJCW5hbWUtPmF0dHJpYnV0ZXMgfD0gRE5TX05BTUVBVFRSX0NIQUlOSU5HOwotKwkJCQlkbmFtZXNldC0+YXR0cmlidXRlcyB8PQotKwkJCQkJICAgIEROU19SREFUQVNFVEFUVFJfQ0hBSU5JTkc7Ci0rCQkJfQotIAkJCWlmICh3YW50ZWRfY2hhaW5pbmcpCi0gCQkJCWNoYWluaW5nID0gSVNDX1RSVUU7Ci0gCQl9Ci0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9DVkUtMjAxNi0yMDg4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL0NWRS0yMDE2LTIwODgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiODRkNDYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL0NWRS0yMDE2LTIwODgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNDcgKzAsMCBAQAotQ1ZFLTIwMTYtMjA4OAotCi1CYWNrcG9ydCBjb21taXQgZDdmZjlhMWM0MWJmMGJhOTc3M2NiM2FkYjA4YjQ4YjlmZDU3Yzk1NiBmcm9tIHRoZQotdjlfMTBfM19wYXRjaCBicmFuY2guCi0KLWh0dHBzOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZW5hbWUuY2dpP25hbWU9Q1ZFLTIwMTYtMjA4OAotaHR0cHM6Ly9rYi5pc2Mub3JnL2FydGljbGUvQUEtMDEzNTEKLQotQ1ZFOiBDVkUtMjAxNi0yMDg4Ci1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1TaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgotCi0KLU9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gTWFyayBBbmRyZXdzIDxtYXJrYUBpc2Mub3JnPiBiZWxvdzoKLQotNDMyMi4gICBbc2VjdXJpdHldICAgICAgRHVwbGljYXRlIEVETlMgQ09PS0lFIG9wdGlvbnMgaW4gYSByZXNwb25zZSBjb3VsZAotICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlciBhbiBhc3NlcnRpb24gZmFpbHVyZS4gKENWRS0yMDE2LTIwODgpCi0gICAgICAgICAgICAgICAgICAgICAgICBbUlQgIzQxODA5XQotCi0oY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCA0NTVjMDg0OGY4MGE4YWNkYTI3YWFkMTQ2NmM3Mjk4N2NhZmFhMDI5KQotKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgN2NkMzAwYWJkNmVlOGI4ZWU4NzMwNTkzZGFmNzQyYmE1M2Y5MGJjMykKLS0tLQotIENIQU5HRVMgICAgICAgICAgICB8ICA0ICsrKysKLSBiaW4vZGlnL2RpZ2hvc3QuYyAgfCAgOSArKysrKysrKysKLSBiaW4vbmFtZWQvY2xpZW50LmMgfCAzMyArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KLSBkb2MvYXJtL25vdGVzLnhtbCAgfCAgNyArKysrKysrCi0gbGliL2Rucy9yZXNvbHZlci5jIHwgMTQgKysrKysrKysrKysrKy0KLSA1IGZpbGVzIGNoYW5nZWQsIDU2IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvQ0hBTkdFUyBiL0NIQU5HRVMKLWluZGV4IGM1YjVkMmIuLmQyZTMzNjAgMTAwNjQ0Ci0tLS0gYS9DSEFOR0VTCi0rKysgYi9DSEFOR0VTCi1AQCAtMSwzICsxLDcgQEAKLSs0MzIyLiAgW3NlY3VyaXR5XSAgICAgIER1cGxpY2F0ZSBFRE5TIENPT0tJRSBvcHRpb25zIGluIGEgcmVzcG9uc2UgY291bGQKLSsgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIgYW4gYXNzZXJ0aW9uIGZhaWx1cmUuIChDVkUtMjAxNi0yMDg4KQotKyAgICAgICAgICAgICAgICAgICAgICAgW1JUICM0MTgwOV0KLSsKLSA0MzE5LiAgW3NlY3VyaXR5XSAgICAgIEZpeCByZXNvbHZlciBhc3NlcnRpb24gZmFpbHVyZSBkdWUgdG8gaW1wcm9wZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIEROQU1FIGhhbmRsaW5nIHdoZW4gcGFyc2luZyBmZXRjaCByZXBseSBtZXNzYWdlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIChDVkUtMjAxNi0xMjg2KSBbUlQgIzQxNzUzXQotZGlmZiAtLWdpdCBhL2Jpbi9kaWcvZGlnaG9zdC5jIGIvYmluL2RpZy9kaWdob3N0LmMKLWluZGV4IGNhODJmOGUuLjM0MDkwNGYgMTAwNjQ0Ci0tLS0gYS9iaW4vZGlnL2RpZ2hvc3QuYwotKysrIGIvYmluL2RpZy9kaWdob3N0LmMKLUBAIC0zNDU4LDYgKzM0NTgsNyBAQCBwcm9jZXNzX29wdChkaWdfbG9va3VwX3QgKmwsIGRuc19tZXNzYWdlX3QgKm1zZykgewotIAlpc2NfYnVmZmVyX3Qgb3B0YnVmOwotIAlpc2NfdWludDE2X3Qgb3B0Y29kZSwgb3B0bGVuOwotIAlkbnNfcmRhdGFzZXRfdCAqb3B0ID0gbXNnLT5vcHQ7Ci0rCWlzY19ib29sZWFuX3Qgc2Vlbl9jb29raWUgPSBJU0NfRkFMU0U7Ci0gCi0gCXJlc3VsdCA9IGRuc19yZGF0YXNldF9maXJzdChvcHQpOwotIAlpZiAocmVzdWx0ID09IElTQ19SX1NVQ0NFU1MpIHsKLUBAIC0zNDcwLDcgKzM0NzEsMTUgQEAgcHJvY2Vzc19vcHQoZGlnX2xvb2t1cF90ICpsLCBkbnNfbWVzc2FnZV90ICptc2cpIHsKLSAJCQlvcHRsZW4gPSBpc2NfYnVmZmVyX2dldHVpbnQxNigmb3B0YnVmKTsKLSAJCQlzd2l0Y2ggKG9wdGNvZGUpIHsKLSAJCQljYXNlIEROU19PUFRfQ09PS0lFOgotKwkJCQkvKgotKwkJCQkgKiBPbmx5IHByb2Nlc3MgdGhlIGZpcnN0IGNvb2tpZSBvcHRpb24uCi0rCQkJCSAqLwotKwkJCQlpZiAoc2Vlbl9jb29raWUpIHsKLSsJCQkJCWlzY19idWZmZXJfZm9yd2FyZCgmb3B0YnVmLCBvcHRsZW4pOwotKwkJCQkJYnJlYWs7Ci0rCQkJCX0KLSAJCQkJcHJvY2Vzc19zaXQobCwgbXNnLCAmb3B0YnVmLCBvcHRsZW4pOwotKwkJCQlzZWVuX2Nvb2tpZSA9IElTQ19UUlVFOwotIAkJCQlicmVhazsKLSAJCQlkZWZhdWx0OgotIAkJCQlpc2NfYnVmZmVyX2ZvcndhcmQoJm9wdGJ1Ziwgb3B0bGVuKTsKLWRpZmYgLS1naXQgYS9iaW4vbmFtZWQvY2xpZW50LmMgYi9iaW4vbmFtZWQvY2xpZW50LmMKLWluZGV4IDY4MzMwNWMuLjBkNzMzMWEgMTAwNjQ0Ci0tLS0gYS9iaW4vbmFtZWQvY2xpZW50LmMKLSsrKyBiL2Jpbi9uYW1lZC9jbGllbnQuYwotQEAgLTEyMCw3ICsxMjAsMTAgQEAKLSAgKi8KLSAjZW5kaWYKLSAKLS0jZGVmaW5lIFNJVF9TSVpFIDI0VSAvKiA4ICsgNCArIDQgKyA4ICovCi0rI2RlZmluZSBDT09LSUVfU0laRSAyNFUgLyogOCArIDQgKyA0ICsgOCAqLwotKwotKyNkZWZpbmUgV0FOVE5TSUQoeCkgKCgoeCktPmF0dHJpYnV0ZXMgJiBOU19DTElFTlRBVFRSX1dBTlROU0lEKSAhPSAwKQotKyNkZWZpbmUgV0FOVEVYUElSRSh4KSAoKCh4KS0+YXR0cmlidXRlcyAmIE5TX0NMSUVOVEFUVFJfV0FOVEVYUElSRSkgIT0gMCkKLSAKLSAvKiUgbmFtZXNlcnZlciBjbGllbnQgbWFuYWdlciBzdHJ1Y3R1cmUgKi8KLSBzdHJ1Y3QgbnNfY2xpZW50bWdyIHsKLUBAIC0xMzk1LDcgKzEzOTgsNyBAQCBuc19jbGllbnRfYWRkb3B0KG5zX2NsaWVudF90ICpjbGllbnQsIGRuc19tZXNzYWdlX3QgKm1lc3NhZ2UsCi0gewotIAljaGFyIG5zaWRbQlVGU0laXSwgKm5zaWRwOwotICNpZmRlZiBJU0NfUExBVEZPUk1fVVNFU0lUCi0tCXVuc2lnbmVkIGNoYXIgc2l0W1NJVF9TSVpFXTsKLSsJdW5zaWduZWQgY2hhciBzaXRbQ09PS0lFX1NJWkVdOwotICNlbmRpZgotIAlpc2NfcmVzdWx0X3QgcmVzdWx0OwotIAlkbnNfdmlld190ICp2aWV3OwotQEAgLTE0MjAsNyArMTQyMyw3IEBAIG5zX2NsaWVudF9hZGRvcHQobnNfY2xpZW50X3QgKmNsaWVudCwgZG5zX21lc3NhZ2VfdCAqbWVzc2FnZSwKLSAJZmxhZ3MgPSBjbGllbnQtPmV4dGZsYWdzICYgRE5TX01FU1NBR0VFWFRGTEFHX1JFUExZUFJFU0VSVkU7Ci0gCi0gCS8qIFNldCBFRE5TIG9wdGlvbnMgaWYgYXBwbGljYWJsZSAqLwotLQlpZiAoKGNsaWVudC0+YXR0cmlidXRlcyAmIE5TX0NMSUVOVEFUVFJfV0FOVE5TSUQpICE9IDAgJiYKLSsJaWYgKFdBTlROU0lEKGNsaWVudCkgJiYKLSAJICAgIChuc19nX3NlcnZlci0+c2VydmVyX2lkICE9IE5VTEwgfHwKLSAJICAgICBuc19nX3NlcnZlci0+c2VydmVyX3VzZWhvc3RuYW1lKSkgewotIAkJaWYgKG5zX2dfc2VydmVyLT5zZXJ2ZXJfdXNlaG9zdG5hbWUpIHsKLUBAIC0xNDUzLDcgKzE0NTYsNyBAQCBuc19jbGllbnRfYWRkb3B0KG5zX2NsaWVudF90ICpjbGllbnQsIGRuc19tZXNzYWdlX3QgKm1lc3NhZ2UsCi0gCi0gCQlJTlNJU1QoY291bnQgPCBETlNfRUROU09QVElPTlMpOwotIAkJZWRuc29wdHNbY291bnRdLmNvZGUgPSBETlNfT1BUX0NPT0tJRTsKLS0JCWVkbnNvcHRzW2NvdW50XS5sZW5ndGggPSBTSVRfU0laRTsKLSsJCWVkbnNvcHRzW2NvdW50XS5sZW5ndGggPSBDT09LSUVfU0laRTsKLSAJCWVkbnNvcHRzW2NvdW50XS52YWx1ZSA9IHNpdDsKLSAJCWNvdW50Kys7Ci0gCX0KLUBAIC0xNjYxLDE5ICsxNjY0LDI2IEBAIGNvbXB1dGVfc2l0KG5zX2NsaWVudF90ICpjbGllbnQsIGlzY191aW50MzJfdCB3aGVuLCBpc2NfdWludDMyX3Qgbm9uY2UsCi0gCi0gc3RhdGljIHZvaWQKLSBwcm9jZXNzX3NpdChuc19jbGllbnRfdCAqY2xpZW50LCBpc2NfYnVmZmVyX3QgKmJ1Ziwgc2l6ZV90IG9wdGxlbikgewotLQl1bnNpZ25lZCBjaGFyIGRidWZbU0lUX1NJWkVdOwotKwl1bnNpZ25lZCBjaGFyIGRidWZbQ09PS0lFX1NJWkVdOwotIAl1bnNpZ25lZCBjaGFyICpvbGQ7Ci0gCWlzY19zdGR0aW1lX3Qgbm93OwotIAlpc2NfdWludDMyX3Qgd2hlbjsKLSAJaXNjX3VpbnQzMl90IG5vbmNlOwotIAlpc2NfYnVmZmVyX3QgZGI7Ci0gCi0rCS8qCi0rCSAqIElmIHdlIGhhdmUgYWxyZWFkeSBzZWVuIGEgRUNTIG9wdGlvbiBza2lwIHRoaXMgRUNTIG9wdGlvbi4KLSsJICovCi0rCWlmICgoY2xpZW50LT5hdHRyaWJ1dGVzICYgTlNfQ0xJRU5UQVRUUl9XQU5UU0lUKSAhPSAwKSB7Ci0rCQlpc2NfYnVmZmVyX2ZvcndhcmQoYnVmLCBvcHRsZW4pOwotKwkJcmV0dXJuOwotKwl9Ci0gCWNsaWVudC0+YXR0cmlidXRlcyB8PSBOU19DTElFTlRBVFRSX1dBTlRTSVQ7Ci0gCi0gCWlzY19zdGF0c19pbmNyZW1lbnQobnNfZ19zZXJ2ZXItPm5zc3RhdHMsCi0gCQkJICAgIGRuc19uc3N0YXRzY291bnRlcl9zaXRvcHQpOwotIAotLQlpZiAob3B0bGVuICE9IFNJVF9TSVpFKSB7Ci0rCWlmIChvcHRsZW4gIT0gQ09PS0lFX1NJWkUpIHsKLSAJCS8qCi0gCQkgKiBOb3Qgb3VyIHRva2VuLgotIAkJICovCi1AQCAtMTcxNywxNCArMTcyNywxMyBAQCBwcm9jZXNzX3NpdChuc19jbGllbnRfdCAqY2xpZW50LCBpc2NfYnVmZmVyX3QgKmJ1Ziwgc2l6ZV90IG9wdGxlbikgewotIAlpc2NfYnVmZmVyX2luaXQoJmRiLCBkYnVmLCBzaXplb2YoZGJ1ZikpOwotIAljb21wdXRlX3NpdChjbGllbnQsIHdoZW4sIG5vbmNlLCAmZGIpOwotIAotLQlpZiAoIWlzY19zYWZlX21lbWVxdWFsKG9sZCwgZGJ1ZiwgU0lUX1NJWkUpKSB7Ci0rCWlmICghaXNjX3NhZmVfbWVtZXF1YWwob2xkLCBkYnVmLCBDT09LSUVfU0laRSkpIHsKLSAJCWlzY19zdGF0c19pbmNyZW1lbnQobnNfZ19zZXJ2ZXItPm5zc3RhdHMsCi0gCQkJCSAgICBkbnNfbnNzdGF0c2NvdW50ZXJfc2l0bm9tYXRjaCk7Ci0gCQlyZXR1cm47Ci0gCX0KLSAJaXNjX3N0YXRzX2luY3JlbWVudChuc19nX3NlcnZlci0+bnNzdGF0cywKLSAJCQkgICAgZG5zX25zc3RhdHNjb3VudGVyX3NpdG1hdGNoKTsKLS0KLSAJY2xpZW50LT5hdHRyaWJ1dGVzIHw9IE5TX0NMSUVOVEFUVFJfSEFWRVNJVDsKLSB9Ci0gI2VuZGlmCi1AQCAtMTc4Myw3ICsxNzkyLDkgQEAgcHJvY2Vzc19vcHQobnNfY2xpZW50X3QgKmNsaWVudCwgZG5zX3JkYXRhc2V0X3QgKm9wdCkgewotIAkJCW9wdGxlbiA9IGlzY19idWZmZXJfZ2V0dWludDE2KCZvcHRidWYpOwotIAkJCXN3aXRjaCAob3B0Y29kZSkgewotIAkJCWNhc2UgRE5TX09QVF9OU0lEOgotLQkJCQlpc2Nfc3RhdHNfaW5jcmVtZW50KG5zX2dfc2VydmVyLT5uc3N0YXRzLAotKwkJCQlpZiAoIVdBTlROU0lEKGNsaWVudCkpCi0rCQkJCQlpc2Nfc3RhdHNfaW5jcmVtZW50KAotKwkJCQkJCSAgICBuc19nX3NlcnZlci0+bnNzdGF0cywKLSAJCQkJCQkgICAgZG5zX25zc3RhdHNjb3VudGVyX25zaWRvcHQpOwotIAkJCQljbGllbnQtPmF0dHJpYnV0ZXMgfD0gTlNfQ0xJRU5UQVRUUl9XQU5UTlNJRDsKLSAJCQkJaXNjX2J1ZmZlcl9mb3J3YXJkKCZvcHRidWYsIG9wdGxlbik7Ci1AQCAtMTc5NCw3ICsxODA1LDkgQEAgcHJvY2Vzc19vcHQobnNfY2xpZW50X3QgKmNsaWVudCwgZG5zX3JkYXRhc2V0X3QgKm9wdCkgewotIAkJCQlicmVhazsKLSAjZW5kaWYKLSAJCQljYXNlIEROU19PUFRfRVhQSVJFOgotLQkJCQlpc2Nfc3RhdHNfaW5jcmVtZW50KG5zX2dfc2VydmVyLT5uc3N0YXRzLAotKwkJCQlpZiAoIVdBTlRFWFBJUkUoY2xpZW50KSkKLSsJCQkJCWlzY19zdGF0c19pbmNyZW1lbnQoCi0rCQkJCQkJICBuc19nX3NlcnZlci0+bnNzdGF0cywKLSAJCQkJCQkgIGRuc19uc3N0YXRzY291bnRlcl9leHBpcmVvcHQpOwotIAkJCQljbGllbnQtPmF0dHJpYnV0ZXMgfD0gTlNfQ0xJRU5UQVRUUl9XQU5URVhQSVJFOwotIAkJCQlpc2NfYnVmZmVyX2ZvcndhcmQoJm9wdGJ1Ziwgb3B0bGVuKTsKLWRpZmYgLS1naXQgYS9kb2MvYXJtL25vdGVzLnhtbCBiL2RvYy9hcm0vbm90ZXMueG1sCi1pbmRleCBlYmY0ZjU1Li4wOTVlYjViIDEwMDY0NAotLS0tIGEvZG9jL2FybS9ub3Rlcy54bWwKLSsrKyBiL2RvYy9hcm0vbm90ZXMueG1sCi1AQCAtNTEsNiArNTEsMTMgQEAKLSAgICAgPHRpdGxlPlNlY3VyaXR5IEZpeGVzPC90aXRsZT4KLSAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICA8bGlzdGl0ZW0+Ci0rICAgICAgIDxwYXJhPgotKyAgICAgICAgIER1cGxpY2F0ZSBFRE5TIENPT0tJRSBvcHRpb25zIGluIGEgcmVzcG9uc2UgY291bGQgdHJpZ2dlcgotKyAgICAgICAgIGFuIGFzc2VydGlvbiBmYWlsdXJlLiBUaGlzIGZsYXcgaXMgZGlzY2xvc2VkIGluIENWRS0yMDE2LTIwODguCi0rICAgICAgICAgW1JUICM0MTgwOV0KLSsgICAgICAgPC9wYXJhPgotKyAgICAgIDwvbGlzdGl0ZW0+Ci0rICAgICAgPGxpc3RpdGVtPgotIAk8cGFyYT4KLSAJICBTcGVjaWZpYyBBUEwgZGF0YSBjb3VsZCB0cmlnZ2VyIGFuIElOU0lTVC4gIFRoaXMgZmxhdwotIAkgIHdhcyBkaXNjb3ZlcmVkIGJ5IEJyaWFuIE1pdGNoZWxsIGFuZCBpcyBkaXNjbG9zZWQgaW4KLWRpZmYgLS1naXQgYS9saWIvZG5zL3Jlc29sdmVyLmMgYi9saWIvZG5zL3Jlc29sdmVyLmMKLWluZGV4IGE3OTdlM2YuLmJhMWFlMjMgMTAwNjQ0Ci0tLS0gYS9saWIvZG5zL3Jlc29sdmVyLmMKLSsrKyBiL2xpYi9kbnMvcmVzb2x2ZXIuYwotQEAgLTc1MDIsNyArNzUwMiw5IEBAIHByb2Nlc3Nfb3B0KHJlc3F1ZXJ5X3QgKnF1ZXJ5LCBkbnNfcmRhdGFzZXRfdCAqb3B0KSB7Ci0gCXVuc2lnbmVkIGNoYXIgKnNpdDsKLSAJZG5zX2FkYmFkZHJpbmZvX3QgKmFkZHJpbmZvOwotIAl1bnNpZ25lZCBjaGFyIGNvb2tpZVs4XTsKLSsJaXNjX2Jvb2xlYW5fdCBzZWVuX2Nvb2tpZSA9IElTQ19GQUxTRTsKLSAjZW5kaWYKLSsJaXNjX2Jvb2xlYW5fdCBzZWVuX25zaWQgPSBJU0NfRkFMU0U7Ci0gCi0gCXJlc3VsdCA9IGRuc19yZGF0YXNldF9maXJzdChvcHQpOwotIAlpZiAocmVzdWx0ID09IElTQ19SX1NVQ0NFU1MpIHsKLUBAIC03NTE2LDE0ICs3NTE4LDIzIEBAIHByb2Nlc3Nfb3B0KHJlc3F1ZXJ5X3QgKnF1ZXJ5LCBkbnNfcmRhdGFzZXRfdCAqb3B0KSB7Ci0gCQkJSU5TSVNUKG9wdGxlbiA8PSBpc2NfYnVmZmVyX3JlbWFpbmluZ2xlbmd0aCgmb3B0YnVmKSk7Ci0gCQkJc3dpdGNoIChvcHRjb2RlKSB7Ci0gCQkJY2FzZSBETlNfT1BUX05TSUQ6Ci0tCQkJCWlmIChxdWVyeS0+b3B0aW9ucyAmIEROU19GRVRDSE9QVF9XQU5UTlNJRCkKLSsJCQkJaWYgKCFzZWVuX25zaWQgJiYKLSsJCQkJICAgIHF1ZXJ5LT5vcHRpb25zICYgRE5TX0ZFVENIT1BUX1dBTlROU0lEKQotIAkJCQkJbG9nX25zaWQoJm9wdGJ1Ziwgb3B0bGVuLCBxdWVyeSwKLSAJCQkJCQkgSVNDX0xPR19ERUJVRygzKSwKLSAJCQkJCQkgcXVlcnktPmZjdHgtPnJlcy0+bWN0eCk7Ci0gCQkJCWlzY19idWZmZXJfZm9yd2FyZCgmb3B0YnVmLCBvcHRsZW4pOwotKwkJCQlzZWVuX25zaWQgPSBJU0NfVFJVRTsKLSAJCQkJYnJlYWs7Ci0gI2lmZGVmIElTQ19QTEFURk9STV9VU0VTSVQKLSAJCQljYXNlIEROU19PUFRfQ09PS0lFOgotKwkJCQkvKgotKwkJCQkgKiBPbmx5IHByb2Nlc3MgdGhlIGZpcnN0IGNvb2tpZSBvcHRpb24uCi0rCQkJCSAqLwotKwkJCQlpZiAoc2Vlbl9jb29raWUpIHsKLSsJCQkJCWlzY19idWZmZXJfZm9yd2FyZCgmb3B0YnVmLCBvcHRsZW4pOwotKwkJCQkJYnJlYWs7Ci0rCQkJCX0KLSAJCQkJc2l0ID0gaXNjX2J1ZmZlcl9jdXJyZW50KCZvcHRidWYpOwotIAkJCQljb21wdXRlX2NjKHF1ZXJ5LCBjb29raWUsIHNpemVvZihjb29raWUpKTsKLSAJCQkJSU5TSVNUKHF1ZXJ5LT5mY3R4LT5ybWVzc2FnZS0+c2l0YmFkID09IDAgJiYKLUBAIC03NTQxLDYgKzc1NTIsNyBAQCBwcm9jZXNzX29wdChyZXNxdWVyeV90ICpxdWVyeSwgZG5zX3JkYXRhc2V0X3QgKm9wdCkgewotIAkJCQlpc2NfYnVmZmVyX2ZvcndhcmQoJm9wdGJ1Ziwgb3B0bGVuKTsKLSAJCQkJaW5jX3N0YXRzKHF1ZXJ5LT5mY3R4LT5yZXMsCi0gCQkJCQkgIGRuc19yZXNzdGF0c2NvdW50ZXJfc2l0aW4pOwotKwkJCQlzZWVuX2Nvb2tpZSA9IElTQ19UUlVFOwotIAkJCQlicmVhazsKLSAjZW5kaWYKLSAJCQlkZWZhdWx0OgotLS0gCi0yLjEuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvQ1ZFLTIwMTYtMjc3NS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9DVkUtMjAxNi0yNzc1LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzkzMDYzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9DVkUtMjAxNi0yNzc1LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotRnJvbSA5ZDhhYmE4YTc3Nzg3MjFhZTJjZWU2ZTQ2NzBhOGU2YmU2NTkwYjA1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTWFyayBBbmRyZXdzIDxtYXJrYUBpc2Mub3JnPgotRGF0ZTogV2VkLCAxMiBPY3QgMjAxNiAxOTo1Mjo1OSArMDkwMAotU3ViamVjdDogW1BBVENIXQotNDQwNi4gICBbc2VjdXJpdHldICAgICAgZ2V0cnJzZXRieW5hbWUgd2l0aCBhIG5vbiBhYnNvbHV0ZSBuYW1lIGNvdWxkCi0gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyIGFuIGluZmluaXRlIHJlY3Vyc2lvbiBidWcgaW4gbHdyZXNkCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmQgbmFtZWQgd2l0aCBsd3JlcyBjb25maWd1cmVkIGlmIHdoZW4gY29tYmluZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYSBzZWFyY2ggbGlzdCBlbnRyeSB0aGUgcmVzdWx0aW5nIG5hbWUgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvbyBsb25nLiAoQ1ZFLTIwMTYtMjc3NSkgW1JUICM0MjY5NF0KLQotQmFja3BvcnQgY29tbWl0IDM4Y2MyZDE0ZTIxOGU1MzZlMDEwMmZhNzBkZWVmOTk0NjEzNTQyMzIgZnJvbSB0aGUKLXY5LjExLjBfcGF0Y2ggYnJhbmNoLgotCi1DVkU6IENWRS0yMDE2LTI3NzUKLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotU2lnbmVkLW9mZi1ieTogemhlbmdydW9xaW4gPHpoZW5ncnEuZm5zdEBjbi5mdWppdHN1LmNvbT4KLQotLS0tCi0gQ0hBTkdFUyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNiArKysrKysKLSBiaW4vbmFtZWQvbHdkZ3Jibi5jICAgICAgICAgICAgICB8IDE2ICsrKysrKysrKystLS0tLS0KLSBiaW4vdGVzdHMvc3lzdGVtL2x3cmVzZC9sd3Rlc3QuYyB8ICA5ICsrKysrKysrLQotIDMgZmlsZXMgY2hhbmdlZCwgMjQgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL0NIQU5HRVMgYi9DSEFOR0VTCi1pbmRleCBkMmUzMzYwLi5kMGE5ZDEyIDEwMDY0NAotLS0tIGEvQ0hBTkdFUwotKysrIGIvQ0hBTkdFUwotQEAgLTEsMyArMSw5IEBACi0rNDQwNi4gICBbc2VjdXJpdHldICAgICAgZ2V0cnJzZXRieW5hbWUgd2l0aCBhIG5vbiBhYnNvbHV0ZSBuYW1lIGNvdWxkCi0rICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlciBhbiBpbmZpbml0ZSByZWN1cnNpb24gYnVnIGluIGx3cmVzZAotKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBuYW1lZCB3aXRoIGx3cmVzIGNvbmZpZ3VyZWQgaWYgd2hlbiBjb21iaW5lZAotKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYSBzZWFyY2ggbGlzdCBlbnRyeSB0aGUgcmVzdWx0aW5nIG5hbWUgaXMKLSsgICAgICAgICAgICAgICAgICAgICAgICB0b28gbG9uZy4gKENWRS0yMDE2LTI3NzUpIFtSVCAjNDI2OTRdCi0rCi0gNDMyMi4gIFtzZWN1cml0eV0gICAgICBEdXBsaWNhdGUgRUROUyBDT09LSUUgb3B0aW9ucyBpbiBhIHJlc3BvbnNlIGNvdWxkCi0gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyIGFuIGFzc2VydGlvbiBmYWlsdXJlLiAoQ1ZFLTIwMTYtMjA4OCkKLSAgICAgICAgICAgICAgICAgICAgICAgIFtSVCAjNDE4MDldCi1kaWZmIC0tZ2l0IGEvYmluL25hbWVkL2x3ZGdyYm4uYyBiL2Jpbi9uYW1lZC9sd2RncmJuLmMKLWluZGV4IDNlN2IxNWIuLmUxZTlhZGMgMTAwNjQ0Ci0tLS0gYS9iaW4vbmFtZWQvbHdkZ3Jibi5jCi0rKysgYi9iaW4vbmFtZWQvbHdkZ3Jibi5jCi1AQCAtNDAzLDE0ICs0MDMsMTggQEAgc3RhcnRfbG9va3VwKG5zX2x3ZGNsaWVudF90ICpjbGllbnQpIHsKLSAJSU5TSVNUKGNsaWVudC0+bG9va3VwID09IE5VTEwpOwotIAotIAlkbnNfZml4ZWRuYW1lX2luaXQoJmFic25hbWUpOwotLQlyZXN1bHQgPSBuc19sd3NlYXJjaGN0eF9jdXJyZW50KCZjbGllbnQtPnNlYXJjaGN0eCwKLS0JCQkJCWRuc19maXhlZG5hbWVfbmFtZSgmYWJzbmFtZSkpOwotKwotIAkvKgotLQkgKiBUaGlzIHdpbGwgcmV0dXJuIGZhaWx1cmUgaWYgcmVsYXRpdmUgbmFtZSArIHN1ZmZpeCBpcyB0b28gbG9uZy4KLS0JICogSW4gdGhpcyBjYXNlLCBqdXN0IGdvIG9uIHRvIHRoZSBuZXh0IGVudHJ5IGluIHRoZSBzZWFyY2ggcGF0aC4KLSsgICAgICAgICAqIFBlcmZvcm0gc2VhcmNoIGFjcm9zcyBhbGwgc2VhcmNoIGRvbWFpbnMgdW50aWwgc3VjY2VzcwotKyAgICAgICAgICogaXMgcmV0dXJuZWQuIFJldHVybiBpbiBjYXNlIG9mIGZhaWx1cmUuCi0gCSAqLwotLQlpZiAocmVzdWx0ICE9IElTQ19SX1NVQ0NFU1MpCi0tCQlzdGFydF9sb29rdXAoY2xpZW50KTsKLSsgICAgICAgIHdoaWxlIChuc19sd3NlYXJjaGN0eF9jdXJyZW50KCZjbGllbnQtPnNlYXJjaGN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICBkbnNfZml4ZWRuYW1lX25hbWUoJmFic25hbWUpKSAhPSBJU0NfUl9TVUNDRVNTKSB7Ci0rICAgICAgICAgICAgICAgIGlmIChuc19sd3NlYXJjaGN0eF9uZXh0KCZjbGllbnQtPnNlYXJjaGN0eCkgIT0gSVNDX1JfU1VDQ0VTUykgewotKyAgICAgICAgICAgICAgICAgICAgICAgIG5zX2x3ZGNsaWVudF9lcnJvcnBrdHNlbmQoY2xpZW50LCBMV1JFU19SX0ZBSUxVUkUpOwotKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSsgICAgICAgICAgICAgICAgfQotKyAgICAgICAgfQotIAotIAlyZXN1bHQgPSBkbnNfbG9va3VwX2NyZWF0ZShjbS0+bWN0eCwKLSAJCQkJICAgZG5zX2ZpeGVkbmFtZV9uYW1lKCZhYnNuYW1lKSwKLWRpZmYgLS1naXQgYS9iaW4vdGVzdHMvc3lzdGVtL2x3cmVzZC9sd3Rlc3QuYyBiL2Jpbi90ZXN0cy9zeXN0ZW0vbHdyZXNkL2x3dGVzdC5jCi1pbmRleCBhZDliNTUxLi4zZWI0YTY2IDEwMDY0NAotLS0tIGEvYmluL3Rlc3RzL3N5c3RlbS9sd3Jlc2QvbHd0ZXN0LmMKLSsrKyBiL2Jpbi90ZXN0cy9zeXN0ZW0vbHdyZXNkL2x3dGVzdC5jCi1AQCAtNzY4LDcgKzc2OCwxNCBAQCBtYWluKHZvaWQpIHsKLSAJdGVzdF9nZXRycnNldGJ5bmFtZSgiZS5leGFtcGxlMS4iLCAxLCAyLCAxLCAxLCAxKTsKLSAJdGVzdF9nZXRycnNldGJ5bmFtZSgiZS5leGFtcGxlMS4iLCAxLCA0NiwgMiwgMCwgMSk7Ci0gCXRlc3RfZ2V0cnJzZXRieW5hbWUoIiIsIDEsIDEsIDAsIDAsIDApOwotLQotKyAgICAgICAgdGVzdF9nZXRycnNldGJ5bmFtZSgiMTIzNDU2Nzg5LjEyMzQ1Njc4OS4xMjM0NTY3ODkuMTIzNDU2Nzg5LiIKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEyMzQ1Njc4OS4xMjM0NTY3ODkuMTIzNDU2Nzg5LjEyMzQ1Njc4OS4iCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMjM0NTY3ODkuMTIzNDU2Nzg5LjEyMzQ1Njc4OS4xMjM0NTY3ODkuIgotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTIzNDU2Nzg5LjEyMzQ1Njc4OS4xMjM0NTY3ODkuMTIzNDU2Nzg5LiIKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEyMzQ1Njc4OS4xMjM0NTY3ODkuMTIzNDU2Nzg5LjEyMzQ1Njc4OS4iCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMjM0NTY3ODkuMTIzNDU2Nzg5LjEyMzQ1Njc4OS4xMjM0NTY3ODkuIgotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTIzNDU2Nzg5IiwgMSwgMSwgMCwgMCwgMCk7Ci0rIAotIAlpZiAoZmFpbHMgPT0gMCkKLSAJCXByaW50ZigiSTpva1xuIik7Ci0gCXJldHVybiAoZmFpbHMpOwotLS0gCi0yLjcuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvQ1ZFLTIwMTYtMjc3Ni5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9DVkUtMjAxNi0yNzc2LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzhiZjYwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9DVkUtMjAxNi0yNzc2LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLUZyb20gMTE3MTExMTY1NzA4MTk3MDU4NWY5ZjBlMDNiNDc2MzU4YzMzYTZjMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IE1hcmsgQW5kcmV3cyA8bWFya2FAaXNjLm9yZz4KLURhdGU6IFdlZCwgMTIgT2N0IDIwMTYgMjA6MzY6NTIgKzA5MDAKLVN1YmplY3Q6IFtQQVRDSF0gCi00NDY3LiAgIFtzZWN1cml0eV0gICAgICBJdCB3YXMgcG9zc2libGUgdG8gdHJpZ2dlciBhbiBhc3NlcnRpb24gd2hlbiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmluZyBhIG1lc3NhZ2UuIChDVkUtMjAxNi0yNzc2KSBbUlQgIzQzMTM5XQotCi1CYWNrcG9ydCBjb21taXQgMmJkMDkyMmNmOTk1YjlhYzIwNWZjODNiYWY3ZTIyMGI5NWM2YmYxMiBmcm9tIHRoZQotdjkuMTEuMF9wYXRjaCBicmFuY2guCi0KLUNWRTogQ1ZFLTIwMTYtMjc3NgotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi1TaWduZWQtb2ZmLWJ5OiB6aGVuZ3J1b3FpbiA8emhlbmdycS5mbnN0QGNuLmZ1aml0c3UuY29tPgotCi0tLS0KLSBDSEFOR0VTICAgICAgICAgICB8ICAzICsrKwotIGxpYi9kbnMvbWVzc2FnZS5jIHwgNDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCi0gMiBmaWxlcyBjaGFuZ2VkLCAzNCBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL0NIQU5HRVMgYi9DSEFOR0VTCi1pbmRleCBkMGE5ZDEyLi41YzhjNjFhIDEwMDY0NAotLS0tIGEvQ0hBTkdFUwotKysrIGIvQ0hBTkdFUwotQEAgLTEsMyArMSw2IEBACi0rNDQ2Ny4gICBbc2VjdXJpdHldICAgICAgSXQgd2FzIHBvc3NpYmxlIHRvIHRyaWdnZXIgYW4gYXNzZXJ0aW9uIHdoZW4KLSsgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJpbmcgYSBtZXNzYWdlLiAoQ1ZFLTIwMTYtMjc3NikgW1JUICM0MzEzOV0KLSsKLSA0NDA2LiAgIFtzZWN1cml0eV0gICAgICBnZXRycnNldGJ5bmFtZSB3aXRoIGEgbm9uIGFic29sdXRlIG5hbWUgY291bGQKLSAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyIGFuIGluZmluaXRlIHJlY3Vyc2lvbiBidWcgaW4gbHdyZXNkCi0gICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5hbWVkIHdpdGggbHdyZXMgY29uZmlndXJlZCBpZiB3aGVuIGNvbWJpbmVkCi1kaWZmIC0tZ2l0IGEvbGliL2Rucy9tZXNzYWdlLmMgYi9saWIvZG5zL21lc3NhZ2UuYwotaW5kZXggNmI1YjRiYi4uYjc0ZGM4MSAxMDA2NDQKLS0tLSBhL2xpYi9kbnMvbWVzc2FnZS5jCi0rKysgYi9saWIvZG5zL21lc3NhZ2UuYwotQEAgLTE3NTQsNyArMTc1NCw3IEBAIGRuc19tZXNzYWdlX3JlbmRlcmJlZ2luKGRuc19tZXNzYWdlX3QgKm1zZywgZG5zX2NvbXByZXNzX3QgKmNjdHgsCi0gCWlmIChyLmxlbmd0aCA8IEROU19NRVNTQUdFX0hFQURFUkxFTikKLSAJCXJldHVybiAoSVNDX1JfTk9TUEFDRSk7Ci0gCi0tCWlmIChyLmxlbmd0aCA8IG1zZy0+cmVzZXJ2ZWQpCi0rICAgICAgICBpZiAoci5sZW5ndGggLSBETlNfTUVTU0FHRV9IRUFERVJMRU4gPCBtc2ctPnJlc2VydmVkKQotIAkJcmV0dXJuIChJU0NfUl9OT1NQQUNFKTsKLSAKLSAJLyoKLUBAIC0xODk1LDggKzE4OTUsMjkgQEAgbm9yZW5kZXJfcmRhdGFzZXQoY29uc3QgZG5zX3JkYXRhc2V0X3QgKnJkYXRhc2V0LCB1bnNpZ25lZCBpbnQgb3B0aW9ucywKLSAKLSAJcmV0dXJuIChJU0NfVFJVRSk7Ci0gfQotLQotICNlbmRpZgotKwotK3N0YXRpYyBpc2NfcmVzdWx0X3QKLStyZW5kZXJzZXQoZG5zX3JkYXRhc2V0X3QgKnJkYXRhc2V0LCBkbnNfbmFtZV90ICpvd25lcl9uYW1lLAotKyAgICAgICAgIGRuc19jb21wcmVzc190ICpjY3R4LCBpc2NfYnVmZmVyX3QgKnRhcmdldCwKLSsgICAgICAgICB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQsIHVuc2lnbmVkIGludCBvcHRpb25zLCB1bnNpZ25lZCBpbnQgKmNvdW50cCkKLSt7Ci0rICAgICAgIGlzY19yZXN1bHRfdCByZXN1bHQ7Ci0rCi0rICAgICAgIC8qCi0rICAgICAgICAqIFNocmluayB0aGUgc3BhY2UgaW4gdGhlIGJ1ZmZlciBieSB0aGUgcmVzZXJ2ZWQgYW1vdW50LgotKyAgICAgICAgKi8KLSsgICAgICAgaWYgKHRhcmdldC0+bGVuZ3RoIC0gdGFyZ2V0LT51c2VkIDwgcmVzZXJ2ZWQpCi0rICAgICAgICAgICAgICAgcmV0dXJuIChJU0NfUl9OT1NQQUNFKTsKLSsKLSsgICAgICAgdGFyZ2V0LT5sZW5ndGggLT0gcmVzZXJ2ZWQ7Ci0rICAgICAgIHJlc3VsdCA9IGRuc19yZGF0YXNldF90b3dpcmUocmRhdGFzZXQsIG93bmVyX25hbWUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2N0eCwgdGFyZ2V0LCBvcHRpb25zLCBjb3VudHApOwotKyAgICAgICB0YXJnZXQtPmxlbmd0aCArPSByZXNlcnZlZDsKLSsKLSsgICAgICAgcmV0dXJuIChyZXN1bHQpOwotK30KLSsKLSBpc2NfcmVzdWx0X3QKLSBkbnNfbWVzc2FnZV9yZW5kZXJzZWN0aW9uKGRuc19tZXNzYWdlX3QgKm1zZywgZG5zX3NlY3Rpb25fdCBzZWN0aW9uaWQsCi0gCQkJICB1bnNpZ25lZCBpbnQgb3B0aW9ucykKLUBAIC0xOTM5LDYgKzE5NjAsOCBAQCBkbnNfbWVzc2FnZV9yZW5kZXJzZWN0aW9uKGRuc19tZXNzYWdlX3QgKm1zZywgZG5zX3NlY3Rpb25fdCBzZWN0aW9uaWQsCi0gCS8qCi0gCSAqIFNocmluayB0aGUgc3BhY2UgaW4gdGhlIGJ1ZmZlciBieSB0aGUgcmVzZXJ2ZWQgYW1vdW50LgotIAkgKi8KLSsgICAgICAgIGlmIChtc2ctPmJ1ZmZlci0+bGVuZ3RoIC0gbXNnLT5idWZmZXItPnVzZWQgPCBtc2ctPnJlc2VydmVkKQotKyAgICAgICAgICAgICAgICByZXR1cm4gKElTQ19SX05PU1BBQ0UpOwotIAltc2ctPmJ1ZmZlci0+bGVuZ3RoIC09IG1zZy0+cmVzZXJ2ZWQ7Ci0gCi0gCXRvdGFsID0gMDsKLUBAIC0yMjE0LDkgKzIyMzcsOCBAQCBkbnNfbWVzc2FnZV9yZW5kZXJlbmQoZG5zX21lc3NhZ2VfdCAqbXNnKSB7Ci0gCQkgKiBSZW5kZXIuCi0gCQkgKi8KLSAJCWNvdW50ID0gMDsKLS0JCXJlc3VsdCA9IGRuc19yZGF0YXNldF90b3dpcmUobXNnLT5vcHQsIGRuc19yb290bmFtZSwKLS0JCQkJCSAgICAgbXNnLT5jY3R4LCBtc2ctPmJ1ZmZlciwgMCwKLS0JCQkJCSAgICAgJmNvdW50KTsKLSsgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVuZGVyc2V0KG1zZy0+b3B0LCBkbnNfcm9vdG5hbWUsIG1zZy0+Y2N0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy0+YnVmZmVyLCBtc2ctPnJlc2VydmVkLCAwLCAmY291bnQpOwotIAkJbXNnLT5jb3VudHNbRE5TX1NFQ1RJT05fQURESVRJT05BTF0gKz0gY291bnQ7Ci0gCQlpZiAocmVzdWx0ICE9IElTQ19SX1NVQ0NFU1MpCi0gCQkJcmV0dXJuIChyZXN1bHQpOwotQEAgLTIyMzIsOSArMjI1NCw4IEBAIGRuc19tZXNzYWdlX3JlbmRlcmVuZChkbnNfbWVzc2FnZV90ICptc2cpIHsKLSAJCWlmIChyZXN1bHQgIT0gSVNDX1JfU1VDQ0VTUykKLSAJCQlyZXR1cm4gKHJlc3VsdCk7Ci0gCQljb3VudCA9IDA7Ci0tCQlyZXN1bHQgPSBkbnNfcmRhdGFzZXRfdG93aXJlKG1zZy0+dHNpZywgbXNnLT50c2lnbmFtZSwKLS0JCQkJCSAgICAgbXNnLT5jY3R4LCBtc2ctPmJ1ZmZlciwgMCwKLS0JCQkJCSAgICAgJmNvdW50KTsKLSsgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVuZGVyc2V0KG1zZy0+dHNpZywgbXNnLT50c2lnbmFtZSwgbXNnLT5jY3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLT5idWZmZXIsIG1zZy0+cmVzZXJ2ZWQsIDAsICZjb3VudCk7Ci0gCQltc2ctPmNvdW50c1tETlNfU0VDVElPTl9BRERJVElPTkFMXSArPSBjb3VudDsKLSAJCWlmIChyZXN1bHQgIT0gSVNDX1JfU1VDQ0VTUykKLSAJCQlyZXR1cm4gKHJlc3VsdCk7Ci1AQCAtMjI1NSw5ICsyMjc2LDggQEAgZG5zX21lc3NhZ2VfcmVuZGVyZW5kKGRuc19tZXNzYWdlX3QgKm1zZykgewotIAkJICogdGhlIG93bmVyIG5hbWUgb2YgYSBTSUcoMCkgaXMgaXJyZWxldmFudCwgYW5kIHdpbGwgbm90Ci0gCQkgKiBiZSBzZXQgaW4gYSBtZXNzYWdlIGJlaW5nIHJlbmRlcmVkLgotIAkJICovCi0tCQlyZXN1bHQgPSBkbnNfcmRhdGFzZXRfdG93aXJlKG1zZy0+c2lnMCwgZG5zX3Jvb3RuYW1lLAotLQkJCQkJICAgICBtc2ctPmNjdHgsIG1zZy0+YnVmZmVyLCAwLAotLQkJCQkJICAgICAmY291bnQpOwotKyAgICAgICAgICAgICAgICByZXN1bHQgPSByZW5kZXJzZXQobXNnLT5zaWcwLCBkbnNfcm9vdG5hbWUsIG1zZy0+Y2N0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy0+YnVmZmVyLCBtc2ctPnJlc2VydmVkLCAwLCAmY291bnQpOwotIAkJbXNnLT5jb3VudHNbRE5TX1NFQ1RJT05fQURESVRJT05BTF0gKz0gY291bnQ7Ci0gCQlpZiAocmVzdWx0ICE9IElTQ19SX1NVQ0NFU1MpCi0gCQkJcmV0dXJuIChyZXN1bHQpOwotLS0gCi0yLjcuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvQ1ZFLTIwMTYtNjE3MC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9DVkUtMjAxNi02MTcwLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWJjMjExLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9DVkUtMjAxNi02MTcwLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTA5MCArMCwwIEBACi1Gcm9tIDFiYmNmZTJmYzg0ZjU3YjFlNGUwNzVmYjNiYzJhMWRkMGEzYTg1MWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBNYXJrIEFuZHJld3MgPG1hcmthQGlzYy5vcmc+Ci1EYXRlOiBXZWQsIDIgTm92IDIwMTYgMTc6MzE6MjcgKzExMDAKLVN1YmplY3Q6IFtQQVRDSF0gNDUwNC4gW3NlY3VyaXR5XSBBbGxvdyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVjb3JkcyBpbiBhCi0gem9uZSB0byBiZSBzcGVjaWZpZWQuIFRoaXMgcHJvdmlkZXMgYSBjb250cm9sIGZvciBpc3N1ZXMgcmFpc2VkIGluCi0gQ1ZFLTIwMTYtNjE3MC4gW1JUICM0MjE0M10KLQotKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgNWY4NDEyYTRjYjVlZTE0YTBlOGNkZGQ0MTA3ODU0YjQwZWUzMjkxZSkKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotW2h0dHBzOi8vc291cmNlLmlzYy5vcmcvY2dpLWJpbi9naXR3ZWIuY2dpP3A9YmluZDkuZ2l0O2E9Y29tbWl0O2g9MWJiY2ZlMmZjODRmNTdiMWU0ZTA3NWZiM2JjMmExZGQwYTNhODUxZl0KLQotQ1ZFOiBDVkUtMjAxNi02MTcwCi0KLVNpZ25lZC1vZmYtYnk6IFlpIFpoYW8gPHlpLnpoYW9Ad2luZHJpdmVyLmNvbT4KLS0tLQotIENIQU5HRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCArCi0gYmluL25hbWVkL2NvbmZpZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKLSBiaW4vbmFtZWQvbmFtZWQuY29uZi5kb2Nib29rICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKwotIGJpbi9uYW1lZC91cGRhdGUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNiArKysKLSBiaW4vbmFtZWQvem9uZWNvbmYuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDcgKysKLSBiaW4vdGVzdHMvc3lzdGVtL25zdXBkYXRlL2NsZWFuLnNoICAgICAgICAgICAgICAgfCAgIDEgKwotIGJpbi90ZXN0cy9zeXN0ZW0vbnN1cGRhdGUvbnMzL25hbWVkLmNvbmYgICAgICAgICB8ICAgNyArKwotIGJpbi90ZXN0cy9zeXN0ZW0vbnN1cGRhdGUvbnMzL3Rvby1iaWcudGVzdC5kYi5pbiB8ICAxMCArKwotIGJpbi90ZXN0cy9zeXN0ZW0vbnN1cGRhdGUvc2V0dXAuc2ggICAgICAgICAgICAgICB8ICAgMiArCi0gYmluL3Rlc3RzL3N5c3RlbS9uc3VwZGF0ZS90ZXN0cy5zaCAgICAgICAgICAgICAgIHwgIDE1ICsrKwotIGJpbi90ZXN0cy9zeXN0ZW0veGZlci9jbGVhbi5zaCAgICAgICAgICAgICAgICAgICB8ICAgMSArCi0gYmluL3Rlc3RzL3N5c3RlbS94ZmVyL25zMS9heGZyLXRvby1iaWcuZGIgICAgICAgIHwgIDEwICsrCi0gYmluL3Rlc3RzL3N5c3RlbS94ZmVyL25zMS9peGZyLXRvby1iaWcuZGIuaW4gICAgIHwgIDEzICsrKwotIGJpbi90ZXN0cy9zeXN0ZW0veGZlci9uczEvbmFtZWQuY29uZiAgICAgICAgICAgICB8ICAxMSArKwotIGJpbi90ZXN0cy9zeXN0ZW0veGZlci9uczYvbmFtZWQuY29uZiAgICAgICAgICAgICB8ICAxNCArKysKLSBiaW4vdGVzdHMvc3lzdGVtL3hmZXIvc2V0dXAuc2ggICAgICAgICAgICAgICAgICAgfCAgIDIgKwotIGJpbi90ZXN0cy9zeXN0ZW0veGZlci90ZXN0cy5zaCAgICAgICAgICAgICAgICAgICB8ICAyNiArKysrKwotIGRvYy9hcm0vQnY5QVJNLWJvb2sueG1sICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyMSArKysrCi0gZG9jL2FybS9ub3Rlcy54bWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA5ICsrCi0gbGliL2JpbmQ5L2NoZWNrLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKLSBsaWIvZG5zL2RiLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTMgKysrCi0gbGliL2Rucy9lY2RiLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzICstCi0gbGliL2Rucy9pbmNsdWRlL2Rucy9kYi5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIwICsrKysKLSBsaWIvZG5zL2luY2x1ZGUvZG5zL3JkYXRhc2xhYi5oICAgICAgICAgICAgICAgICAgfCAgMTMgKysrCi0gbGliL2Rucy9pbmNsdWRlL2Rucy9yZXN1bHQuaCAgICAgICAgICAgICAgICAgICAgIHwgICA2ICstCi0gbGliL2Rucy9pbmNsdWRlL2Rucy96b25lLmggICAgICAgICAgICAgICAgICAgICAgIHwgIDI4ICsrKystCi0gbGliL2Rucy9yYnRkYi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTI3ICsrKysrKysrKysrKysrKysrKysrKy0tCi0gbGliL2Rucy9yZGF0YXNsYWIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEzICsrKwotIGxpYi9kbnMvcmVzdWx0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOSArLQotIGxpYi9kbnMvc2RiLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMyArLQotIGxpYi9kbnMvc2Rsei5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMyArLQotIGxpYi9kbnMveGZyaW4uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyMiArKystCi0gbGliL2Rucy96b25lLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIzICsrKy0KLSBsaWIvaXNjY2ZnL25hbWVkY29uZi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwotIDM0IGZpbGVzIGNoYW5nZWQsIDQ0NCBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKLSBjcmVhdGUgbW9kZSAxMDA2NDQgYmluL3Rlc3RzL3N5c3RlbS9uc3VwZGF0ZS9uczMvdG9vLWJpZy50ZXN0LmRiLmluCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGJpbi90ZXN0cy9zeXN0ZW0veGZlci9uczEvYXhmci10b28tYmlnLmRiCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGJpbi90ZXN0cy9zeXN0ZW0veGZlci9uczEvaXhmci10b28tYmlnLmRiLmluCi0KLWRpZmYgLS1naXQgYS9DSEFOR0VTIGIvQ0hBTkdFUwotaW5kZXggNDFjZmNlNS4uOTdkMmU2MCAxMDA2NDQKLS0tLSBhL0NIQU5HRVMKLSsrKyBiL0NIQU5HRVMKLUBAIC0xLDMgKzEsNyBAQAotKzQ1MDQuCVtzZWN1cml0eV0JQWxsb3cgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlY29yZHMgaW4gYSB6b25lIHRvCi0rCQkJYmUgc3BlY2lmaWVkLiAgVGhpcyBwcm92aWRlcyBhIGNvbnRyb2wgZm9yIGlzc3VlcwotKwkJCXJhaXNlZCBpbiBDVkUtMjAxNi02MTcwLiBbUlQgIzQyMTQzXQotKwotIDQ0ODkuCVtzZWN1cml0eV0JSXQgd2FzIHBvc3NpYmxlIHRvIHRyaWdnZXIgYXNzZXJ0aW9ucyB3aGVuIHByb2Nlc3NpbmcKLSAJCQlhIHJlc3BvbnNlLiAoQ1ZFLTIwMTYtODg2NCkgW1JUICM0MzQ2NV0KLSAKLWRpZmYgLS1naXQgYS9iaW4vbmFtZWQvY29uZmlnLmMgYi9iaW4vbmFtZWQvY29uZmlnLmMKLWluZGV4IGYwNjM0OGMuLmMyNGUzMzQgMTAwNjQ0Ci0tLS0gYS9iaW4vbmFtZWQvY29uZmlnLmMKLSsrKyBiL2Jpbi9uYW1lZC9jb25maWcuYwotQEAgLTIwOSw2ICsyMDksNyBAQCBvcHRpb25zIHtcblwKLSAJbWF4LXRyYW5zZmVyLXRpbWUtb3V0IDEyMDtcblwKLSAJbWF4LXRyYW5zZmVyLWlkbGUtaW4gNjA7XG5cCi0gCW1heC10cmFuc2Zlci1pZGxlLW91dCA2MDtcblwKLSsJbWF4LXJlY29yZHMgMDtcblwKLSAJbWF4LXJldHJ5LXRpbWUgMTIwOTYwMDsgLyogMiB3ZWVrcyAqL1xuXAotIAltaW4tcmV0cnktdGltZSA1MDA7XG5cCi0gCW1heC1yZWZyZXNoLXRpbWUgMjQxOTIwMDsgLyogNCB3ZWVrcyAqL1xuXAotZGlmZiAtLWdpdCBhL2Jpbi9uYW1lZC9uYW1lZC5jb25mLmRvY2Jvb2sgYi9iaW4vbmFtZWQvbmFtZWQuY29uZi5kb2Nib29rCi1pbmRleCA0Yzk5YTYxLi5jMmQxNzNhIDEwMDY0NAotLS0tIGEvYmluL25hbWVkL25hbWVkLmNvbmYuZG9jYm9vawotKysrIGIvYmluL25hbWVkL25hbWVkLmNvbmYuZG9jYm9vawotQEAgLTMzOCw2ICszMzgsNyBAQCBvcHRpb25zIHsKLSAJfTsKLSAKLSAJbWF4LWpvdXJuYWwtc2l6ZSA8cmVwbGFjZWFibGU+c2l6ZV9ub19kZWZhdWx0PC9yZXBsYWNlYWJsZT47Ci0rCW1heC1yZWNvcmRzIDxyZXBsYWNlYWJsZT5pbnRlZ2VyPC9yZXBsYWNlYWJsZT47Ci0gCW1heC10cmFuc2Zlci10aW1lLWluIDxyZXBsYWNlYWJsZT5pbnRlZ2VyPC9yZXBsYWNlYWJsZT47Ci0gCW1heC10cmFuc2Zlci10aW1lLW91dCA8cmVwbGFjZWFibGU+aW50ZWdlcjwvcmVwbGFjZWFibGU+OwotIAltYXgtdHJhbnNmZXItaWRsZS1pbiA8cmVwbGFjZWFibGU+aW50ZWdlcjwvcmVwbGFjZWFibGU+OwotQEAgLTUyNyw2ICs1MjgsNyBAQCB2aWV3IDxyZXBsYWNlYWJsZT5zdHJpbmc8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+b3B0aW9uYWxfY2xhc3M8L3JlcGxhY2VhYmxlPgotIAl9OwotIAotIAltYXgtam91cm5hbC1zaXplIDxyZXBsYWNlYWJsZT5zaXplX25vX2RlZmF1bHQ8L3JlcGxhY2VhYmxlPjsKLSsJbWF4LXJlY29yZHMgPHJlcGxhY2VhYmxlPmludGVnZXI8L3JlcGxhY2VhYmxlPjsKLSAJbWF4LXRyYW5zZmVyLXRpbWUtaW4gPHJlcGxhY2VhYmxlPmludGVnZXI8L3JlcGxhY2VhYmxlPjsKLSAJbWF4LXRyYW5zZmVyLXRpbWUtb3V0IDxyZXBsYWNlYWJsZT5pbnRlZ2VyPC9yZXBsYWNlYWJsZT47Ci0gCW1heC10cmFuc2Zlci1pZGxlLWluIDxyZXBsYWNlYWJsZT5pbnRlZ2VyPC9yZXBsYWNlYWJsZT47Ci1AQCAtNjI0LDYgKzYyNiw3IEBAIHpvbmUgPHJlcGxhY2VhYmxlPnN0cmluZzwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5vcHRpb25hbF9jbGFzczwvcmVwbGFjZWFibGU+Ci0gCX07Ci0gCi0gCW1heC1qb3VybmFsLXNpemUgPHJlcGxhY2VhYmxlPnNpemVfbm9fZGVmYXVsdDwvcmVwbGFjZWFibGU+OwotKwltYXgtcmVjb3JkcyA8cmVwbGFjZWFibGU+aW50ZWdlcjwvcmVwbGFjZWFibGU+OwotIAltYXgtdHJhbnNmZXItdGltZS1pbiA8cmVwbGFjZWFibGU+aW50ZWdlcjwvcmVwbGFjZWFibGU+OwotIAltYXgtdHJhbnNmZXItdGltZS1vdXQgPHJlcGxhY2VhYmxlPmludGVnZXI8L3JlcGxhY2VhYmxlPjsKLSAJbWF4LXRyYW5zZmVyLWlkbGUtaW4gPHJlcGxhY2VhYmxlPmludGVnZXI8L3JlcGxhY2VhYmxlPjsKLWRpZmYgLS1naXQgYS9iaW4vbmFtZWQvdXBkYXRlLmMgYi9iaW4vbmFtZWQvdXBkYXRlLmMKLWluZGV4IDgzYjFhMDUuLmNjMmE2MTEgMTAwNjQ0Ci0tLS0gYS9iaW4vbmFtZWQvdXBkYXRlLmMKLSsrKyBiL2Jpbi9uYW1lZC91cGRhdGUuYwotQEAgLTI0NTUsNiArMjQ1NSw4IEBAIHVwZGF0ZV9hY3Rpb24oaXNjX3Rhc2tfdCAqdGFzaywgaXNjX2V2ZW50X3QgKmV2ZW50KSB7Ci0gCWlzY19ib29sZWFuX3QgaGFkX2Ruc2tleTsKLSAJZG5zX3JkYXRhdHlwZV90IHByaXZhdGV0eXBlID0gZG5zX3pvbmVfZ2V0cHJpdmF0ZXR5cGUoem9uZSk7Ci0gCWRuc190dGxfdCBtYXh0dGwgPSAwOwotKwlpc2NfdWludDMyX3QgbWF4cmVjb3JkczsKLSsJaXNjX3VpbnQ2NF90IHJlY29yZHM7Ci0gCi0gCUlOU0lTVChldmVudC0+ZXZfdHlwZSA9PSBETlNfRVZFTlRfVVBEQVRFKTsKLSAKLUBAIC0zMTM4LDYgKzMxNDAsMjAgQEAgdXBkYXRlX2FjdGlvbihpc2NfdGFza190ICp0YXNrLCBpc2NfZXZlbnRfdCAqZXZlbnQpIHsKLSAJCQl9Ci0gCQl9Ci0gCi0rCQltYXhyZWNvcmRzID0gZG5zX3pvbmVfZ2V0bWF4cmVjb3Jkcyh6b25lKTsKLSsJCWlmIChtYXhyZWNvcmRzICE9IDBVKSB7Ci0rCQkJcmVzdWx0ID0gZG5zX2RiX2dldHNpemUoZGIsIHZlciwgJnJlY29yZHMsIE5VTEwpOwotKwkJCWlmIChyZXN1bHQgPT0gSVNDX1JfU1VDQ0VTUyAmJiByZWNvcmRzID4gbWF4cmVjb3JkcykgewotKwkJCQl1cGRhdGVfbG9nKGNsaWVudCwgem9uZSwgSVNDX0xPR19FUlJPUiwKLSsJCQkJCSAgICJyZWNvcmRzIGluIHpvbmUgKCUiCi0rCQkJCQkgICBJU0NfUFJJTlRfUVVBREZPUk1BVAotKwkJCQkJICAgInUpIGV4Y2VlZHMgbWF4LXJlY29yZHMgKCV1KSIsCi0rCQkJCQkgICByZWNvcmRzLCBtYXhyZWNvcmRzKTsKLSsJCQkJcmVzdWx0ID0gRE5TX1JfVE9PTUFOWVJFQ09SRFM7Ci0rCQkJCWdvdG8gZmFpbHVyZTsKLSsJCQl9Ci0rCQl9Ci0rCi0gCQlqb3VybmFsZmlsZSA9IGRuc196b25lX2dldGpvdXJuYWwoem9uZSk7Ci0gCQlpZiAoam91cm5hbGZpbGUgIT0gTlVMTCkgewotIAkJCXVwZGF0ZV9sb2coY2xpZW50LCB6b25lLCBMT0dMRVZFTF9ERUJVRywKLWRpZmYgLS1naXQgYS9iaW4vbmFtZWQvem9uZWNvbmYuYyBiL2Jpbi9uYW1lZC96b25lY29uZi5jCi1pbmRleCA0ZWUzZGZlLi4xNGRkOGNlIDEwMDY0NAotLS0tIGEvYmluL25hbWVkL3pvbmVjb25mLmMKLSsrKyBiL2Jpbi9uYW1lZC96b25lY29uZi5jCi1AQCAtOTc4LDYgKzk3OCwxMyBAQCBuc196b25lX2NvbmZpZ3VyZShjb25zdCBjZmdfb2JqX3QgKmNvbmZpZywgY29uc3QgY2ZnX29ial90ICp2Y29uZmlnLAotIAkJCWRuc196b25lX3NldG1heHR0bChyYXcsIG1heHR0bCk7Ci0gCX0KLSAKLSsJb2JqID0gTlVMTDsKLSsJcmVzdWx0ID0gbnNfY29uZmlnX2dldChtYXBzLCAibWF4LXJlY29yZHMiLCAmb2JqKTsKLSsJSU5TSVNUKHJlc3VsdCA9PSBJU0NfUl9TVUNDRVNTICYmIG9iaiAhPSBOVUxMKTsKLSsJZG5zX3pvbmVfc2V0bWF4cmVjb3JkcyhtYXliZXJhdywgY2ZnX29ial9hc3VpbnQzMihvYmopKTsKLSsJaWYgKHpvbmUgIT0gbWF5YmVyYXcpCi0rCQlkbnNfem9uZV9zZXRtYXhyZWNvcmRzKHpvbmUsIDApOwotKwotIAlpZiAocmF3ICE9IE5VTEwgJiYgZmlsZW5hbWUgIT0gTlVMTCkgewotICNkZWZpbmUgU0lHTkVEICIuc2lnbmVkIgotIAkJc2l6ZV90IHNpZ25lZGxlbiA9IHN0cmxlbihmaWxlbmFtZSkgKyBzaXplb2YoU0lHTkVEKTsKLWRpZmYgLS1naXQgYS9iaW4vdGVzdHMvc3lzdGVtL25zdXBkYXRlL2NsZWFuLnNoIGIvYmluL3Rlc3RzL3N5c3RlbS9uc3VwZGF0ZS9jbGVhbi5zaAotaW5kZXggYWFlZmMwMi4uZWEyNTU0NSAxMDA2NDQKLS0tLSBhL2Jpbi90ZXN0cy9zeXN0ZW0vbnN1cGRhdGUvY2xlYW4uc2gKLSsrKyBiL2Jpbi90ZXN0cy9zeXN0ZW0vbnN1cGRhdGUvY2xlYW4uc2gKLUBAIC0zMiw2ICszMiw3IEBAIHJtIC1mIG5zMy9leGFtcGxlLmRiLmpubCBuczMvZXhhbXBsZS5kYgotIHJtIC1mIG5zMy9uc2VjM3BhcmFtLnRlc3QuZGIuc2lnbmVkLmpubCBuczMvbnNlYzNwYXJhbS50ZXN0LmRiIG5zMy9uc2VjM3BhcmFtLnRlc3QuZGIuc2lnbmVkIG5zMy9kc3NldC1uc2VjM3BhcmFtLnRlc3QuCi0gcm0gLWYgbnMzL2Ruc2tleS50ZXN0LmRiLnNpZ25lZC5qbmwgbnMzL2Ruc2tleS50ZXN0LmRiIG5zMy9kbnNrZXkudGVzdC5kYi5zaWduZWQgbnMzL2Rzc2V0LWRuc2tleS50ZXN0LgotIHJtIC1mIG5zMy9LKgotK3JtIC1mIG5zMy90b28tYmlnLnRlc3QuZGIKLSBybSAtZiBkaWcub3V0LioKLSBybSAtZiBqcC5vdXQubnMzLioKLSBybSAtZiBLeHh4LioKLWRpZmYgLS1naXQgYS9iaW4vdGVzdHMvc3lzdGVtL25zdXBkYXRlL25zMy9uYW1lZC5jb25mIGIvYmluL3Rlc3RzL3N5c3RlbS9uc3VwZGF0ZS9uczMvbmFtZWQuY29uZgotaW5kZXggMmFiZDUyMi4uNjhmZjI3YSAxMDA2NDQKLS0tLSBhL2Jpbi90ZXN0cy9zeXN0ZW0vbnN1cGRhdGUvbnMzL25hbWVkLmNvbmYKLSsrKyBiL2Jpbi90ZXN0cy9zeXN0ZW0vbnN1cGRhdGUvbnMzL25hbWVkLmNvbmYKLUBAIC02MCwzICs2MCwxMCBAQCB6b25lICJkbnNrZXkudGVzdCIgewotIAlhbGxvdy11cGRhdGUgeyBhbnk7IH07Ci0gCWZpbGUgImRuc2tleS50ZXN0LmRiLnNpZ25lZCI7Ci0gfTsKLSsKLSt6b25lICJ0b28tYmlnLnRlc3QiIHsKLSsJdHlwZSBtYXN0ZXI7Ci0rCWFsbG93LXVwZGF0ZSB7IGFueTsgfTsKLSsJbWF4LXJlY29yZHMgMzsKLSsJZmlsZSAidG9vLWJpZy50ZXN0LmRiIjsKLSt9OwotZGlmZiAtLWdpdCBhL2Jpbi90ZXN0cy9zeXN0ZW0vbnN1cGRhdGUvbnMzL3Rvby1iaWcudGVzdC5kYi5pbiBiL2Jpbi90ZXN0cy9zeXN0ZW0vbnN1cGRhdGUvbnMzL3Rvby1iaWcudGVzdC5kYi5pbgotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjdmZjFlNGEKLS0tLSAvZGV2L251bGwKLSsrKyBiL2Jpbi90ZXN0cy9zeXN0ZW0vbnN1cGRhdGUvbnMzL3Rvby1iaWcudGVzdC5kYi5pbgotQEAgLTAsMCArMSwxMCBAQAotKzsgQ29weXJpZ2h0IChDKSAyMDE2ICBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQotKzsKLSs7IFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKLSs7IExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKLSs7IGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uCi0rCi0rJFRUTCAxMAotK3Rvby1iaWcudGVzdC4gSU4gU09BIHRvby1iaWcudGVzdC4gaG9zdG1hc3Rlci50b28tYmlnLnRlc3QuIDEgMzYwMCA5MDAgMjQxOTIwMCAzNjAwCi0rdG9vLWJpZy50ZXN0LiBJTiBOUyB0b28tYmlnLnRlc3QuCi0rdG9vLWJpZy50ZXN0LiBJTiBBIDEwLjUzLjAuMwotZGlmZiAtLWdpdCBhL2Jpbi90ZXN0cy9zeXN0ZW0vbnN1cGRhdGUvc2V0dXAuc2ggYi9iaW4vdGVzdHMvc3lzdGVtL25zdXBkYXRlL3NldHVwLnNoCi1pbmRleCA4MjgyNTVlLi40M2M0MDk0IDEwMDY0NAotLS0tIGEvYmluL3Rlc3RzL3N5c3RlbS9uc3VwZGF0ZS9zZXR1cC5zaAotKysrIGIvYmluL3Rlc3RzL3N5c3RlbS9uc3VwZGF0ZS9zZXR1cC5zaAotQEAgLTI3LDEyICsyNywxNCBAQCB0ZXN0IC1yICRSQU5ERklMRSB8fCAkR0VOUkFORE9NIDQwMCAkUkFOREZJTEUKLSBybSAtZiBuczEvKi5qbmwgbnMxL2V4YW1wbGUuZGIgbnMyLyouam5sIG5zMi9leGFtcGxlLmJrCi0gcm0gLWYgbnMyL3VwZGF0ZS5iayBuczIvdXBkYXRlLmFsdC5iawotIHJtIC1mIG5zMy9leGFtcGxlLmRiLmpubAotK3JtIC1mIG5zMy90b28tYmlnLnRlc3QuZGIuam5sCi0gCi0gY3AgLWYgbnMxL2V4YW1wbGUxLmRiIG5zMS9leGFtcGxlLmRiCi0gc2VkICdzL2V4YW1wbGUubmlsL290aGVyLm5pbC9nJyBuczEvZXhhbXBsZTEuZGIgPiBuczEvb3RoZXIuZGIKLSBzZWQgJ3MvZXhhbXBsZS5uaWwvdW5peHRpbWUubmlsL2cnIG5zMS9leGFtcGxlMS5kYiA+IG5zMS91bml4dGltZS5kYgotIHNlZCAncy9leGFtcGxlLm5pbC9rZXl0ZXN0cy5uaWwvZycgbnMxL2V4YW1wbGUxLmRiID4gbnMxL2tleXRlc3RzLmRiCi0gY3AgLWYgbnMzL2V4YW1wbGUuZGIuaW4gbnMzL2V4YW1wbGUuZGIKLStjcCAtZiBuczMvdG9vLWJpZy50ZXN0LmRiLmluIG5zMy90b28tYmlnLnRlc3QuZGIKLSAKLSAjIHVwZGF0ZV90ZXN0LnBsIGhhcyBpdHMgb3duIHpvbmUgZmlsZSBiZWNhdXNlIGl0Ci0gIyByZXF1aXJlcyBhIHNwZWNpZmljIE5TIHJlY29yZCBzZXQuCi1kaWZmIC0tZ2l0IGEvYmluL3Rlc3RzL3N5c3RlbS9uc3VwZGF0ZS90ZXN0cy5zaCBiL2Jpbi90ZXN0cy9zeXN0ZW0vbnN1cGRhdGUvdGVzdHMuc2gKLWluZGV4IDc4ZDUwMWUuLjBhNmJiZDMgMTAwNzU1Ci0tLS0gYS9iaW4vdGVzdHMvc3lzdGVtL25zdXBkYXRlL3Rlc3RzLnNoCi0rKysgYi9iaW4vdGVzdHMvc3lzdGVtL25zdXBkYXRlL3Rlc3RzLnNoCi1AQCAtNTgxLDUgKzU4MSwyMCBAQCBpZiBbICRyZXQgLW5lIDAgXTsgdGhlbgotICAgICBzdGF0dXM9MQotIGZpCi0gCi0rbj1gZXhwciAkbiArIDFgCi0rZWNobyAiSTpjaGVjayB0aGF0IGFkZGluZyB0b28gbWFueSByZWNvcmRzIGlzIGJsb2NrZWQgKCRuKSIKLStyZXQ9MAotKyROU1VQREFURSAtdiA8PCBFT0YgPiBuc3VwZGF0ZS5vdXQtJG4gMj4mMSAmJiByZXQ9MQotK3NlcnZlciAxMC41My4wLjMgNTMwMAotK3pvbmUgdG9vLWJpZy50ZXN0LgotK3VwZGF0ZSBhZGQgcjEudG9vLWJpZy50ZXN0IDM2MDAgSU4gVFhUIHIxLnRvby1iaWcudGVzdAotK3NlbmQKLStFT0YKLStncmVwICJ1cGRhdGUgZmFpbGVkOiBTRVJWRkFJTCIgbnN1cGRhdGUub3V0LSRuID4gL2Rldi9udWxsIHx8IHJldD0xCi0rRElHICt0Y3AgQDEwLjUzLjAuMyAtcCA1MzAwIHIxLnRvby1iaWcudGVzdCBUWFQgPiBkaWcub3V0Lm5zMy50ZXN0JG4KLStncmVwICJzdGF0dXM6IE5YRE9NQUlOIiBkaWcub3V0Lm5zMy50ZXN0JG4gPiAvZGV2L251bGwgfHwgcmV0PTEKLStncmVwICJyZWNvcmRzIGluIHpvbmUgKDQpIGV4Y2VlZHMgbWF4LXJlY29yZHMgKDMpIiBuczMvbmFtZWQucnVuID4gL2Rldi9udWxsIHx8IHJldD0xCi0rWyAkcmV0ID0gMCBdIHx8IHsgZWNobyBJOmZhaWxlZDsgc3RhdHVzPTE7IH0KLSsKLSBlY2hvICJJOmV4aXQgc3RhdHVzOiAkc3RhdHVzIgotIGV4aXQgJHN0YXR1cwotZGlmZiAtLWdpdCBhL2Jpbi90ZXN0cy9zeXN0ZW0veGZlci9jbGVhbi5zaCBiL2Jpbi90ZXN0cy9zeXN0ZW0veGZlci9jbGVhbi5zaAotaW5kZXggNDhhYTE1OS4uZGE2MmEzMyAxMDA2NDQKLS0tLSBhL2Jpbi90ZXN0cy9zeXN0ZW0veGZlci9jbGVhbi5zaAotKysrIGIvYmluL3Rlc3RzL3N5c3RlbS94ZmVyL2NsZWFuLnNoCi1AQCAtMzYsMyArMzYsNCBAQCBybSAtZiBuczcvKi5kYiBuczcvKi5iayBuczcvKi5qbmwKLSBybSAtZiAqL25hbWVkLm1lbXN0YXRzCi0gcm0gLWYgKi9uYW1lZC5ydW4KLSBybSAtZiAqL2Fucy5ydW4KLStybSAtZiBuczEvaXhmci10b28tYmlnLmRiIG5zMS9peGZyLXRvby1iaWcuZGIuam5sCi1kaWZmIC0tZ2l0IGEvYmluL3Rlc3RzL3N5c3RlbS94ZmVyL25zMS9heGZyLXRvby1iaWcuZGIgYi9iaW4vdGVzdHMvc3lzdGVtL3hmZXIvbnMxL2F4ZnItdG9vLWJpZy5kYgotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLmQ0Mzc2MGQKLS0tLSAvZGV2L251bGwKLSsrKyBiL2Jpbi90ZXN0cy9zeXN0ZW0veGZlci9uczEvYXhmci10b28tYmlnLmRiCi1AQCAtMCwwICsxLDEwIEBACi0rOyBDb3B5cmlnaHQgKEMpIDIwMTYgIEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCi0rOwotKzsgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYwotKzsgTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwotKzsgZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4KLSsKLSskVFRMCTM2MDAKLStACUlOCVNPQQkuIC4gMCAwIDAgMCAwCi0rQAlJTglOUwkuCi0rJEdFTkVSQVRFIDEtMjkJaG9zdCQJQQkxLjIuMy4kCi1kaWZmIC0tZ2l0IGEvYmluL3Rlc3RzL3N5c3RlbS94ZmVyL25zMS9peGZyLXRvby1iaWcuZGIuaW4gYi9iaW4vdGVzdHMvc3lzdGVtL3hmZXIvbnMxL2l4ZnItdG9vLWJpZy5kYi5pbgotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjMxOGJiNzcKLS0tLSAvZGV2L251bGwKLSsrKyBiL2Jpbi90ZXN0cy9zeXN0ZW0veGZlci9uczEvaXhmci10b28tYmlnLmRiLmluCi1AQCAtMCwwICsxLDEzIEBACi0rOyBDb3B5cmlnaHQgKEMpIDIwMTYgIEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCi0rOwotKzsgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYwotKzsgTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwotKzsgZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4KLSsKLSskVFRMCTM2MDAKLStACUlOCVNPQQkuIC4gMCAwIDAgMCAwCi0rQAlJTglOUwluczEKLStACUlOCU5TCW5zNgotK25zMQlJTglBCTEwLjUzLjAuMQotK25zNglJTglBCTEwLjUzLjAuNgotKyRHRU5FUkFURSAxLTI1CWhvc3QkCUEJMS4yLjMuJAotZGlmZiAtLWdpdCBhL2Jpbi90ZXN0cy9zeXN0ZW0veGZlci9uczEvbmFtZWQuY29uZiBiL2Jpbi90ZXN0cy9zeXN0ZW0veGZlci9uczEvbmFtZWQuY29uZgotaW5kZXggMDdkYWQ4NS4uMWQyOTI5MiAxMDA2NDQKLS0tLSBhL2Jpbi90ZXN0cy9zeXN0ZW0veGZlci9uczEvbmFtZWQuY29uZgotKysrIGIvYmluL3Rlc3RzL3N5c3RlbS94ZmVyL25zMS9uYW1lZC5jb25mCi1AQCAtNDQsMyArNDQsMTQgQEAgem9uZSAic2xhdmUiIHsKLSAJdHlwZSBtYXN0ZXI7Ci0gCWZpbGUgInNsYXZlLmRiIjsKLSB9OwotKwotK3pvbmUgImF4ZnItdG9vLWJpZyIgewotKyAgICAgICAgdHlwZSBtYXN0ZXI7Ci0rICAgICAgICBmaWxlICJheGZyLXRvby1iaWcuZGIiOwotK307Ci0rCi0rem9uZSAiaXhmci10b28tYmlnIiB7Ci0rICAgICAgICB0eXBlIG1hc3RlcjsKLSsJYWxsb3ctdXBkYXRlIHsgYW55OyB9OwotKyAgICAgICAgZmlsZSAiaXhmci10b28tYmlnLmRiIjsKLSt9OwotZGlmZiAtLWdpdCBhL2Jpbi90ZXN0cy9zeXN0ZW0veGZlci9uczYvbmFtZWQuY29uZiBiL2Jpbi90ZXN0cy9zeXN0ZW0veGZlci9uczYvbmFtZWQuY29uZgotaW5kZXggYzk0MjFiMS4uYTEyYTkyYyAxMDA2NDQKLS0tLSBhL2Jpbi90ZXN0cy9zeXN0ZW0veGZlci9uczYvbmFtZWQuY29uZgotKysrIGIvYmluL3Rlc3RzL3N5c3RlbS94ZmVyL25zNi9uYW1lZC5jb25mCi1AQCAtNTIsMyArNTIsMTcgQEAgem9uZSAic2xhdmUiIHsKLSAJbWFzdGVycyB7IDEwLjUzLjAuMTsgfTsKLSAJZmlsZSAic2xhdmUuYmsiOwotIH07Ci0rCi0rem9uZSAiYXhmci10b28tYmlnIiB7Ci0rCXR5cGUgc2xhdmU7Ci0rCW1heC1yZWNvcmRzIDMwOwotKwltYXN0ZXJzIHsgMTAuNTMuMC4xOyB9OwotKwlmaWxlICJheGZyLXRvby1iaWcuYmsiOwotK307Ci0rCi0rem9uZSAiaXhmci10b28tYmlnIiB7Ci0rCXR5cGUgc2xhdmU7Ci0rCW1heC1yZWNvcmRzIDMwOwotKwltYXN0ZXJzIHsgMTAuNTMuMC4xOyB9OwotKwlmaWxlICJpeGZyLXRvby1iaWcuYmsiOwotK307Ci1kaWZmIC0tZ2l0IGEvYmluL3Rlc3RzL3N5c3RlbS94ZmVyL3NldHVwLnNoIGIvYmluL3Rlc3RzL3N5c3RlbS94ZmVyL3NldHVwLnNoCi1pbmRleCA1NmNhOTAxLi5jNTVhYmY4IDEwMDY0NAotLS0tIGEvYmluL3Rlc3RzL3N5c3RlbS94ZmVyL3NldHVwLnNoCi0rKysgYi9iaW4vdGVzdHMvc3lzdGVtL3hmZXIvc2V0dXAuc2gKLUBAIC0zMywzICszMyw1IEBAIGNwIC1mIG5zNC9uYW1lZC5jb25mLmJhc2UgbnM0L25hbWVkLmNvbmYKLSAKLSBjcCBuczIvc2xhdmUuZGIuaW4gbnMyL3NsYXZlLmRiCi0gdG91Y2ggLXQgMjAwMTAxMDEwMDAwIG5zMi9zbGF2ZS5kYgotKwotK2NwIC1mIG5zMS9peGZyLXRvby1iaWcuZGIuaW4gbnMxL2l4ZnItdG9vLWJpZy5kYgotZGlmZiAtLWdpdCBhL2Jpbi90ZXN0cy9zeXN0ZW0veGZlci90ZXN0cy5zaCBiL2Jpbi90ZXN0cy9zeXN0ZW0veGZlci90ZXN0cy5zaAotaW5kZXggNjdiMmExYS4uZmUzM2YwYSAxMDA2NDQKLS0tLSBhL2Jpbi90ZXN0cy9zeXN0ZW0veGZlci90ZXN0cy5zaAotKysrIGIvYmluL3Rlc3RzL3N5c3RlbS94ZmVyL3Rlc3RzLnNoCi1AQCAtMzY4LDUgKzM2OCwzMSBAQCAkRElHQ01EIG5pbC4gVFhUIHwgZ3JlcCAnaW5jb3JyZWN0IGtleSBBWEZSJyA+L2Rldi9udWxsICYmIHsKLSAgICAgc3RhdHVzPTEKLSB9Ci0gCi0rbj1gZXhwciAkbiArIDFgCi0rZWNobyAiSTp0ZXN0IHRoYXQgYSB6b25lIHdpdGggdG9vIG1hbnkgcmVjb3JkcyBpcyByZWplY3RlZCAoQVhGUikgKCRuKSIKLSt0bXA9MAotK2dyZXAgIidheGZyLXRvby1iaWcvSU4nLio6IHRvbyBtYW55IHJlY29yZHMiIG5zNi9uYW1lZC5ydW4gPi9kZXYvbnVsbCB8fCB0bXA9MQotK2lmIHRlc3QgJHRtcCAhPSAwIDsgdGhlbiBlY2hvICJJOmZhaWxlZCI7IGZpCi0rc3RhdHVzPWBleHByICRzdGF0dXMgKyAkdG1wYAotKwotK249YGV4cHIgJG4gKyAxYAotK2VjaG8gIkk6dGVzdCB0aGF0IGEgem9uZSB3aXRoIHRvbyBtYW55IHJlY29yZHMgaXMgcmVqZWN0ZWQgKElYRlIpICgkbikiCi0rdG1wPTAKLStncmVwICInaXhmci10b28tYmlnLi9JTi4qOiB0b28gbWFueSByZWNvcmRzIiBuczYvbmFtZWQucnVuID4vZGV2L251bGwgJiYgdG1wPTEKLSskTlNVUERBVEUgPDwgRU9GCi0rem9uZSBpeGZyLXRvby1iaWcKLStzZXJ2ZXIgMTAuNTMuMC4xIDUzMDAKLSt1cGRhdGUgYWRkIHRoZS0zMXN0LXJlY29yZC5peGZyLXRvby1iaWcgMCBUWFQgdGhpcyBpcyBpdAotK3NlbmQKLStFT0YKLStmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDgKLStkbwotKyAgICBncmVwICInaXhmci10b28tYmlnL0lOJy4qOiB0b28gbWFueSByZWNvcmRzIiBuczYvbmFtZWQucnVuID4vZGV2L251bGwgJiYgYnJlYWsKLSsgICAgc2xlZXAgMQotK2RvbmUKLStncmVwICInaXhmci10b28tYmlnL0lOJy4qOiB0b28gbWFueSByZWNvcmRzIiBuczYvbmFtZWQucnVuID4vZGV2L251bGwgfHwgdG1wPTEKLStpZiB0ZXN0ICR0bXAgIT0gMCA7IHRoZW4gZWNobyAiSTpmYWlsZWQiOyBmaQotK3N0YXR1cz1gZXhwciAkc3RhdHVzICsgJHRtcGAKLSsKLSBlY2hvICJJOmV4aXQgc3RhdHVzOiAkc3RhdHVzIgotIGV4aXQgJHN0YXR1cwotZGlmZiAtLWdpdCBhL2RvYy9hcm0vQnY5QVJNLWJvb2sueG1sIGIvZG9jL2FybS9CdjlBUk0tYm9vay54bWwKLWluZGV4IDg0OGI1ODIuLjAzNjk1MDUgMTAwNjQ0Ci0tLS0gYS9kb2MvYXJtL0J2OUFSTS1ib29rLnhtbAotKysrIGIvZG9jL2FybS9CdjlBUk0tYm9vay54bWwKLUBAIC00ODU4LDYgKzQ4NTgsNyBAQCBiYWRyZXNwOjEsYWRiZXJyOjAsZmluZGZhaWw6MCx2YWxmYWlsOjBdCi0gICAgIDxvcHRpb25hbD4gdXNlLXF1ZXJ5cG9ydC1wb29sIDxyZXBsYWNlYWJsZT55ZXNfb3Jfbm88L3JlcGxhY2VhYmxlPjsgPC9vcHRpb25hbD4KLSAgICAgPG9wdGlvbmFsPiBxdWVyeXBvcnQtcG9vbC1wb3J0cyA8cmVwbGFjZWFibGU+bnVtYmVyPC9yZXBsYWNlYWJsZT47IDwvb3B0aW9uYWw+Ci0gICAgIDxvcHRpb25hbD4gcXVlcnlwb3J0LXBvb2wtdXBkYXRlaW50ZXJ2YWwgPHJlcGxhY2VhYmxlPm51bWJlcjwvcmVwbGFjZWFibGU+OyA8L29wdGlvbmFsPgotKyAgICA8b3B0aW9uYWw+IG1heC1yZWNvcmRzIDxyZXBsYWNlYWJsZT5udW1iZXI8L3JlcGxhY2VhYmxlPjsgPC9vcHRpb25hbD4KLSAgICAgPG9wdGlvbmFsPiBtYXgtdHJhbnNmZXItdGltZS1pbiA8cmVwbGFjZWFibGU+bnVtYmVyPC9yZXBsYWNlYWJsZT47IDwvb3B0aW9uYWw+Ci0gICAgIDxvcHRpb25hbD4gbWF4LXRyYW5zZmVyLXRpbWUtb3V0IDxyZXBsYWNlYWJsZT5udW1iZXI8L3JlcGxhY2VhYmxlPjsgPC9vcHRpb25hbD4KLSAgICAgPG9wdGlvbmFsPiBtYXgtdHJhbnNmZXItaWRsZS1pbiA8cmVwbGFjZWFibGU+bnVtYmVyPC9yZXBsYWNlYWJsZT47IDwvb3B0aW9uYWw+Ci1AQCAtODE2NCw2ICs4MTY1LDE2IEBAIGF2b2lkLXY2LXVkcC1wb3J0cyB7IDQwMDAwOyByYW5nZSA1MDAwMCA2MDAwMDsgfTsKLSAJICAgIDwvdmFybGlzdGVudHJ5PgotIAotIAkgICAgPHZhcmxpc3RlbnRyeT4KLSsJICAgICAgPHRlcm0+PGNvbW1hbmQ+bWF4LXJlY29yZHM8L2NvbW1hbmQ+PC90ZXJtPgotKwkgICAgICA8bGlzdGl0ZW0+Ci0rCQk8cGFyYT4KLSsJCSAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHJlY29yZHMgcGVybWl0dGVkIGluIGEgem9uZS4KLSsJCSAgVGhlIGRlZmF1bHQgaXMgemVybyB3aGljaCBtZWFucyB1bmxpbWl0ZWQuCi0rCSAJPC9wYXJhPgotKwkgICAgICA8L2xpc3RpdGVtPgotKwkgICAgPC92YXJsaXN0ZW50cnk+Ci0rCi0rCSAgICA8dmFybGlzdGVudHJ5PgotIAkgICAgICA8dGVybT48Y29tbWFuZD5ob3N0LXN0YXRpc3RpY3MtbWF4PC9jb21tYW5kPjwvdGVybT4KLSAJICAgICAgPGxpc3RpdGVtPgotIAkJPHBhcmE+Ci1AQCAtMTIwNTYsNiArMTIwNjcsMTYgQEAgem9uZSA8cmVwbGFjZWFibGU+em9uZV9uYW1lPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPjxyZXBsYWNlYWJsZT5jbGFzczwvcmVwbGFjZWEKLSAJICAgICAgPC92YXJsaXN0ZW50cnk+Ci0gCi0gCSAgICAgIDx2YXJsaXN0ZW50cnk+Ci0rCQk8dGVybT48Y29tbWFuZD5tYXgtcmVjb3JkczwvY29tbWFuZD48L3Rlcm0+Ci0rCQk8bGlzdGl0ZW0+Ci0rCQkgIDxwYXJhPgotKwkJICAgIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YKLSsJCSAgICA8Y29tbWFuZD5tYXgtcmVjb3JkczwvY29tbWFuZD4gaW4gPHhyZWYgbGlua2VuZD0ic2VydmVyX3Jlc291cmNlX2xpbWl0cyIvPi4KLSsJCSAgPC9wYXJhPgotKwkJPC9saXN0aXRlbT4KLSsJICAgICAgPC92YXJsaXN0ZW50cnk+Ci0rCi0rCSAgICAgIDx2YXJsaXN0ZW50cnk+Ci0gCQk8dGVybT48Y29tbWFuZD5tYXgtdHJhbnNmZXItdGltZS1pbjwvY29tbWFuZD48L3Rlcm0+Ci0gCQk8bGlzdGl0ZW0+Ci0gCQkgIDxwYXJhPgotZGlmZiAtLWdpdCBhL2RvYy9hcm0vbm90ZXMueG1sIGIvZG9jL2FybS9ub3Rlcy54bWwKLWluZGV4IDA5NWViNWIuLjM2NDk1ZTcgMTAwNjQ0Ci0tLS0gYS9kb2MvYXJtL25vdGVzLnhtbAotKysrIGIvZG9jL2FybS9ub3Rlcy54bWwKLUBAIC01Miw2ICs1MiwxNSBAQAotICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0rCSAgQWRkZWQgdGhlIGFiaWxpdHkgdG8gc3BlY2lmeSB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVjb3JkcwotKwkgIHBlcm1pdHRlZCBpbiBhIHpvbmUgKG1heC1yZWNvcmRzICM7KS4gIFRoaXMgcHJvdmlkZXMgYSBtZWNoYW5pc20KLSsJICB0byBibG9jayBvdmVybHkgbGFyZ2Ugem9uZSB0cmFuc2ZlcnMsIHdoaWNoIGlzIGEgcG90ZW50aWFsIHJpc2sKLSsJICB3aXRoIHNsYXZlIHpvbmVzIGZyb20gb3RoZXIgcGFydGllcywgYXMgZGVzY3JpYmVkIGluIENWRS0yMDE2LTYxNzAuCi0rCSAgW1JUICM0MjE0M10KLSsJPC9wYXJhPgotKyAgICAgIDwvbGlzdGl0ZW0+Ci0rICAgICAgPGxpc3RpdGVtPgotKwk8cGFyYT4KLSAgICAgICAgICBEdXBsaWNhdGUgRUROUyBDT09LSUUgb3B0aW9ucyBpbiBhIHJlc3BvbnNlIGNvdWxkIHRyaWdnZXIKLSAgICAgICAgICBhbiBhc3NlcnRpb24gZmFpbHVyZS4gVGhpcyBmbGF3IGlzIGRpc2Nsb3NlZCBpbiBDVkUtMjAxNi0yMDg4LgotICAgICAgICAgIFtSVCAjNDE4MDldCi1kaWZmIC0tZ2l0IGEvbGliL2JpbmQ5L2NoZWNrLmMgYi9saWIvYmluZDkvY2hlY2suYwotaW5kZXggYjhjMDVkZC4uZWRiNzUzNCAxMDA2NDQKLS0tLSBhL2xpYi9iaW5kOS9jaGVjay5jCi0rKysgYi9saWIvYmluZDkvY2hlY2suYwotQEAgLTE1MTAsNiArMTUxMCw4IEBAIGNoZWNrX3pvbmVjb25mKGNvbnN0IGNmZ19vYmpfdCAqemNvbmZpZywgY29uc3QgY2ZnX29ial90ICp2b3B0aW9ucywKLSAJICBSRURJUkVDVFpPTkUgfSwKLSAJeyAibWFzdGVycyIsIFNMQVZFWk9ORSB8IFNUVUJaT05FIHwgUkVESVJFQ1RaT05FIH0sCi0gCXsgIm1heC1peGZyLWxvZy1zaXplIiwgTUFTVEVSWk9ORSB8IFNMQVZFWk9ORSB8IFNUUkVESVJFQ1RaT05FIH0sCi0rCXsgIm1heC1yZWNvcmRzIiwgTUFTVEVSWk9ORSB8IFNMQVZFWk9ORSB8IFNUVUJaT05FIHwgU1RSRURJUkVDVFpPTkUgfAotKyAgICAgICAgICBTVEFUSUNTVFVCWk9ORSB8IFJFRElSRUNUWk9ORSB9LAotIAl7ICJtYXgtcmVmcmVzaC10aW1lIiwgU0xBVkVaT05FIHwgU1RVQlpPTkUgfCBTVFJFRElSRUNUWk9ORSB9LAotIAl7ICJtYXgtcmV0cnktdGltZSIsIFNMQVZFWk9ORSB8IFNUVUJaT05FIHwgU1RSRURJUkVDVFpPTkUgfSwKLSAJeyAibWF4LXRyYW5zZmVyLWlkbGUtaW4iLCBTTEFWRVpPTkUgfCBTVFVCWk9ORSB8IFNUUkVESVJFQ1RaT05FIH0sCi1kaWZmIC0tZ2l0IGEvbGliL2Rucy9kYi5jIGIvbGliL2Rucy9kYi5jCi1pbmRleCA3ZTRmMzU3Li5jZWQ5NGE1IDEwMDY0NAotLS0tIGEvbGliL2Rucy9kYi5jCi0rKysgYi9saWIvZG5zL2RiLmMKLUBAIC05OTksNiArOTk5LDE5IEBAIGRuc19kYl9nZXRuc2VjM3BhcmFtZXRlcnMoZG5zX2RiX3QgKmRiLCBkbnNfZGJ2ZXJzaW9uX3QgKnZlcnNpb24sCi0gfQotIAotIGlzY19yZXN1bHRfdAotK2Ruc19kYl9nZXRzaXplKGRuc19kYl90ICpkYiwgZG5zX2RidmVyc2lvbl90ICp2ZXJzaW9uLCBpc2NfdWludDY0X3QgKnJlY29yZHMsCi0rCSAgICAgICBpc2NfdWludDY0X3QgKmJ5dGVzKQotK3sKLSsJUkVRVUlSRShETlNfREJfVkFMSUQoZGIpKTsKLSsJUkVRVUlSRShkbnNfZGJfaXN6b25lKGRiKSA9PSBJU0NfVFJVRSk7Ci0rCi0rCWlmIChkYi0+bWV0aG9kcy0+Z2V0c2l6ZSAhPSBOVUxMKQotKwkJcmV0dXJuICgoZGItPm1ldGhvZHMtPmdldHNpemUpKGRiLCB2ZXJzaW9uLCByZWNvcmRzLCBieXRlcykpOwotKwotKwlyZXR1cm4gKElTQ19SX05PVEZPVU5EKTsKLSt9Ci0rCi0raXNjX3Jlc3VsdF90Ci0gZG5zX2RiX3NldHNpZ25pbmd0aW1lKGRuc19kYl90ICpkYiwgZG5zX3JkYXRhc2V0X3QgKnJkYXRhc2V0LAotIAkJICAgICAgaXNjX3N0ZHRpbWVfdCByZXNpZ24pCi0gewotZGlmZiAtLWdpdCBhL2xpYi9kbnMvZWNkYi5jIGIvbGliL2Rucy9lY2RiLmMKLWluZGV4IDU1M2EzMzkuLmI1ZDA0ZDIgMTAwNjQ0Ci0tLS0gYS9saWIvZG5zL2VjZGIuYwotKysrIGIvbGliL2Rucy9lY2RiLmMKLUBAIC01ODcsNyArNTg3LDggQEAgc3RhdGljIGRuc19kYm1ldGhvZHNfdCBlY2RiX21ldGhvZHMgPSB7Ci0gCU5VTEwsCQkJLyogZmluZG5vZGVleHQgKi8KLSAJTlVMTCwJCQkvKiBmaW5kZXh0ICovCi0gCU5VTEwsCQkJLyogc2V0Y2FjaGVzdGF0cyAqLwotLQlOVUxMCQkJLyogaGFzaHNpemUgKi8KLSsJTlVMTCwJCQkvKiBoYXNoc2l6ZSAqLwotKwlOVUxMCQkJLyogZ2V0c2l6ZSAqLwotIH07Ci0gCi0gc3RhdGljIGlzY19yZXN1bHRfdAotZGlmZiAtLWdpdCBhL2xpYi9kbnMvaW5jbHVkZS9kbnMvZGIuaCBiL2xpYi9kbnMvaW5jbHVkZS9kbnMvZGIuaAotaW5kZXggYTRhNDQ4Mi4uYWZmNDJkNiAxMDA2NDQKLS0tLSBhL2xpYi9kbnMvaW5jbHVkZS9kbnMvZGIuaAotKysrIGIvbGliL2Rucy9pbmNsdWRlL2Rucy9kYi5oCi1AQCAtMTk1LDYgKzE5NSw4IEBAIHR5cGVkZWYgc3RydWN0IGRuc19kYm1ldGhvZHMgewotIAkJCQkgICBkbnNfcmRhdGFzZXRfdCAqc2lncmRhdGFzZXQpOwotIAlpc2NfcmVzdWx0X3QJKCpzZXRjYWNoZXN0YXRzKShkbnNfZGJfdCAqZGIsIGlzY19zdGF0c190ICpzdGF0cyk7Ci0gCXVuc2lnbmVkIGludAkoKmhhc2hzaXplKShkbnNfZGJfdCAqZGIpOwotKwlpc2NfcmVzdWx0X3QJKCpnZXRzaXplKShkbnNfZGJfdCAqZGIsIGRuc19kYnZlcnNpb25fdCAqdmVyc2lvbiwKLSsJCQkJICAgaXNjX3VpbnQ2NF90ICpyZWNvcmRzLCBpc2NfdWludDY0X3QgKmJ5dGVzKTsKLSB9IGRuc19kYm1ldGhvZHNfdDsKLSAKLSB0eXBlZGVmIGlzY19yZXN1bHRfdAotQEAgLTE0ODUsNiArMTQ4NywyNCBAQCBkbnNfZGJfZ2V0bnNlYzNwYXJhbWV0ZXJzKGRuc19kYl90ICpkYiwgZG5zX2RidmVyc2lvbl90ICp2ZXJzaW9uLAotICAqLwotIAotIGlzY19yZXN1bHRfdAotK2Ruc19kYl9nZXRzaXplKGRuc19kYl90ICpkYiwgZG5zX2RidmVyc2lvbl90ICp2ZXJzaW9uLCBpc2NfdWludDY0X3QgKnJlY29yZHMsCi0rICAgICAgICAgICAgICAgaXNjX3VpbnQ2NF90ICpieXRlcyk7Ci0rLyolPAotKyAqIEdldCB0aGUgbnVtYmVyIG9mIHJlY29yZHMgaW4gdGhlIGdpdmVuIHZlcnNpb24gb2YgdGhlIGRhdGFiYXNlIGFzIHdlbGwKLSsgKiBhcyB0aGUgbnVtYmVyIGJ5dGVzIHVzZWQgdG8gc3RvcmUgdGhvc2UgcmVjb3Jkcy4KLSsgKgotKyAqIFJlcXVpcmVzOgotKyAqIFxsaQknZGInIGlzIGEgdmFsaWQgem9uZSBkYXRhYmFzZS4KLSsgKiBcbGkJJ3ZlcnNpb24nIGlzIE5VTEwgb3IgYSB2YWxpZCB2ZXJzaW9uLgotKyAqIFxsaQkncmVjb3JkcycgaXMgTlVMTCBvciBhIHBvaW50ZXIgdG8gcmV0dXJuIHRoZSByZWNvcmQgY291bnQgaW4uCi0rICogXGxpCSdieXRlcycgaXMgTlVMTCBvciBhIHBvaW50ZXIgdG8gcmV0dXJuIHRoZSBieXRlIGNvdW50IGluLgotKyAqCi0rICogUmV0dXJuczoKLSsgKiBcbGkJI0lTQ19SX1NVQ0NFU1MKLSsgKiBcbGkJI0lTQ19SX05PVElNUExFTUVOVEVECi0rICovCi0rCi0raXNjX3Jlc3VsdF90Ci0gZG5zX2RiX2ZpbmRuc2VjM25vZGUoZG5zX2RiX3QgKmRiLCBkbnNfbmFtZV90ICpuYW1lLAotIAkJICAgICBpc2NfYm9vbGVhbl90IGNyZWF0ZSwgZG5zX2Ribm9kZV90ICoqbm9kZXApOwotIC8qJTwKLWRpZmYgLS1naXQgYS9saWIvZG5zL2luY2x1ZGUvZG5zL3JkYXRhc2xhYi5oIGIvbGliL2Rucy9pbmNsdWRlL2Rucy9yZGF0YXNsYWIuaAotaW5kZXggM2FjNDRiOC4uMmUxZTc1OSAxMDA2NDQKLS0tLSBhL2xpYi9kbnMvaW5jbHVkZS9kbnMvcmRhdGFzbGFiLmgKLSsrKyBiL2xpYi9kbnMvaW5jbHVkZS9kbnMvcmRhdGFzbGFiLmgKLUBAIC0xMDQsNiArMTA0LDcgQEAgZG5zX3JkYXRhc2xhYl90b3JkYXRhc2V0KHVuc2lnbmVkIGNoYXIgKnNsYWIsIHVuc2lnbmVkIGludCByZXNlcnZlbGVuLAotICAqIEVuc3VyZXM6Ci0gICpcbGkJJ3JkYXRhc2V0JyBpcyBhc3NvY2lhdGVkIGFuZCBwb2ludHMgdG8gYSB2YWxpZCByZGF0YWVzdC4KLSAgKi8KLSsKLSB1bnNpZ25lZCBpbnQKLSBkbnNfcmRhdGFzbGFiX3NpemUodW5zaWduZWQgY2hhciAqc2xhYiwgdW5zaWduZWQgaW50IHJlc2VydmVsZW4pOwotIC8qJTwKLUBAIC0xMTYsNiArMTE3LDE4IEBAIGRuc19yZGF0YXNsYWJfc2l6ZSh1bnNpZ25lZCBjaGFyICpzbGFiLCB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWxlbik7Ci0gICpcbGkJVGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgc2xhYiwgaW5jbHVkaW5nIHRoZSByZXNlcnZlbGVuLgotICAqLwotIAotK3Vuc2lnbmVkIGludAotK2Ruc19yZGF0YXNsYWJfY291bnQodW5zaWduZWQgY2hhciAqc2xhYiwgdW5zaWduZWQgaW50IHJlc2VydmVsZW4pOwotKy8qJTwKLSsgKiBSZXR1cm4gdGhlIG51bWJlciBvZiByZWNvcmRzIGluIHRoZSByZGF0YXNsYWIKLSsgKgotKyAqIFJlcXVpcmVzOgotKyAqXGxpCSdzbGFiJyBwb2ludHMgdG8gYSBzbGFiLgotKyAqCi0rICogUmV0dXJuczoKLSsgKlxsaQlUaGUgbnVtYmVyIG9mIHJlY29yZHMgaW4gdGhlIHNsYWIuCi0rICovCi0rCi0gaXNjX3Jlc3VsdF90Ci0gZG5zX3JkYXRhc2xhYl9tZXJnZSh1bnNpZ25lZCBjaGFyICpvc2xhYiwgdW5zaWduZWQgY2hhciAqbnNsYWIsCi0gCQkgICAgdW5zaWduZWQgaW50IHJlc2VydmVsZW4sIGlzY19tZW1fdCAqbWN0eCwKLWRpZmYgLS1naXQgYS9saWIvZG5zL2luY2x1ZGUvZG5zL3Jlc3VsdC5oIGIvbGliL2Rucy9pbmNsdWRlL2Rucy9yZXN1bHQuaAotaW5kZXggN2QxMWMyYi4uOTNkMWZkNSAxMDA2NDQKLS0tLSBhL2xpYi9kbnMvaW5jbHVkZS9kbnMvcmVzdWx0LmgKLSsrKyBiL2xpYi9kbnMvaW5jbHVkZS9kbnMvcmVzdWx0LmgKLUBAIC0xNTcsOCArMTU3LDEyIEBACi0gI2RlZmluZSBETlNfUl9CQURDRFMJCQkoSVNDX1JFU1VMVENMQVNTX0ROUyArIDExMSkKLSAjZGVmaW5lIEROU19SX0JBRENETlNLRVkJCShJU0NfUkVTVUxUQ0xBU1NfRE5TICsgMTEyKQotICNkZWZpbmUgRE5TX1JfT1BURVJSCQkJKElTQ19SRVNVTFRDTEFTU19ETlMgKyAxMTMpCi0rI2RlZmluZSBETlNfUl9CQURETlNUQVAJCQkoSVNDX1JFU1VMVENMQVNTX0ROUyArIDExNCkKLSsjZGVmaW5lIEROU19SX0JBRFRTSUcJCQkoSVNDX1JFU1VMVENMQVNTX0ROUyArIDExNSkKLSsjZGVmaW5lIEROU19SX0JBRFNJRzAJCQkoSVNDX1JFU1VMVENMQVNTX0ROUyArIDExNikKLSsjZGVmaW5lIEROU19SX1RPT01BTllSRUNPUkRTCQkoSVNDX1JFU1VMVENMQVNTX0ROUyArIDExNykKLSAKLS0jZGVmaW5lIEROU19SX05SRVNVTFRTCQkJMTE0CS8qJTwgTnVtYmVyIG9mIHJlc3VsdHMgKi8KLSsjZGVmaW5lIEROU19SX05SRVNVTFRTCQkJMTE4CS8qJTwgTnVtYmVyIG9mIHJlc3VsdHMgKi8KLSAKLSAvKgotICAqIEROUyB3aXJlIGZvcm1hdCByY29kZXMuCi1kaWZmIC0tZ2l0IGEvbGliL2Rucy9pbmNsdWRlL2Rucy96b25lLmggYi9saWIvZG5zL2luY2x1ZGUvZG5zL3pvbmUuaAotaW5kZXggYTkzNjdmMS4uMjI3NTQwYiAxMDA2NDQKLS0tLSBhL2xpYi9kbnMvaW5jbHVkZS9kbnMvem9uZS5oCi0rKysgYi9saWIvZG5zL2luY2x1ZGUvZG5zL3pvbmUuaAotQEAgLTI5Niw2ICsyOTYsMzIgQEAgZG5zX3pvbmVfZ2V0ZmlsZShkbnNfem9uZV90ICp6b25lKTsKLSAgKi8KLSAKLSB2b2lkCi0rZG5zX3pvbmVfc2V0bWF4cmVjb3JkcyhkbnNfem9uZV90ICp6b25lLCBpc2NfdWludDMyX3QgcmVjb3Jkcyk7Ci0rLyolPAotKyAqIAlTZXRzIHRoZSBtYXhpbWltIG51bWJlciBvZiByZWNvcmRzIHBlcm1pdHRlZCBpbiBhIHpvbmUuCi0rICoJMCBpbXBsaWVzIHVubGltaXRlZC4KLSsgKgotKyAqIFJlcXVpcmVzOgotKyAqXGxpCSd6b25lJyB0byBiZSB2YWxpZCBpbml0aWFsaXNlZCB6b25lLgotKyAqCi0rICogUmV0dXJuczoKLSsgKlxsaQl2b2lkCi0rICovCi0rCi0raXNjX3VpbnQzMl90Ci0rZG5zX3pvbmVfZ2V0bWF4cmVjb3JkcyhkbnNfem9uZV90ICp6b25lKTsKLSsvKiU8Ci0rICogCUdldHMgdGhlIG1heGltaW0gbnVtYmVyIG9mIHJlY29yZHMgcGVybWl0dGVkIGluIGEgem9uZS4KLSsgKgkwIGltcGxpZXMgdW5saW1pdGVkLgotKyAqCi0rICogUmVxdWlyZXM6Ci0rICpcbGkJJ3pvbmUnIHRvIGJlIHZhbGlkIGluaXRpYWxpc2VkIHpvbmUuCi0rICoKLSsgKiBSZXR1cm5zOgotKyAqXGxpCWlzY191aW50MzJfdCBtYXhyZWNvcmRzLgotKyAqLwotKwotK3ZvaWQKLSBkbnNfem9uZV9zZXRtYXh0dGwoZG5zX3pvbmVfdCAqem9uZSwgaXNjX3VpbnQzMl90IG1heHR0bCk7Ci0gLyolPAotICAqIAlTZXRzIHRoZSBtYXggdHRsIG9mIHRoZSB6b25lLgotQEAgLTMxNiw3ICszNDIsNyBAQCBkbnNfem9uZV9nZXRtYXh0dGwoZG5zX3pvbmVfdCAqem9uZSk7Ci0gICpcbGkJJ3pvbmUnIHRvIGJlIHZhbGlkIGluaXRpYWxpc2VkIHpvbmUuCi0gICoKLSAgKiBSZXR1cm5zOgotLSAqXGxpCWlzY191aW50MzJfdCBtYXh0dGwuCi0rICpcbGkJZG5zX3R0bF90IG1heHR0bC4KLSAgKi8KLSAKLSBpc2NfcmVzdWx0X3QKLWRpZmYgLS1naXQgYS9saWIvZG5zL3JidGRiLmMgYi9saWIvZG5zL3JidGRiLmMKLWluZGV4IDYyYmVjZmMuLjcyZDcyMmYgMTAwNjQ0Ci0tLS0gYS9saWIvZG5zL3JidGRiLmMKLSsrKyBiL2xpYi9kbnMvcmJ0ZGIuYwotQEAgLTIwOSw2ICsyMDksNyBAQCB0eXBlZGVmIGlzY191aW50NjRfdCAgICAgICAgICAgICAgICAgICAgcmJ0ZGJfc2VyaWFsX3Q7Ci0gI2RlZmluZSBmcmVlX3JidGRiX2NhbGxiYWNrIGZyZWVfcmJ0ZGJfY2FsbGJhY2s2NAotICNkZWZpbmUgZnJlZV9yZGF0YXNldCBmcmVlX3JkYXRhc2V0NjQKLSAjZGVmaW5lIGdldG5zZWMzcGFyYW1ldGVycyBnZXRuc2VjM3BhcmFtZXRlcnM2NAotKyNkZWZpbmUgZ2V0c2l6ZSBnZXRzaXplNjQKLSAjZGVmaW5lIGdldG9yaWdpbm5vZGUgZ2V0b3JpZ2lubm9kZTY0Ci0gI2RlZmluZSBnZXRycnNldHN0YXRzIGdldHJyc2V0c3RhdHM2NAotICNkZWZpbmUgZ2V0c2lnbmluZ3RpbWUgZ2V0c2lnbmluZ3RpbWU2NAotQEAgLTU4OSw2ICs1OTAsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgcmJ0ZGJfdmVyc2lvbiB7Ci0gCWlzY191aW50MTZfdAkJCWl0ZXJhdGlvbnM7Ci0gCWlzY191aW50OF90CQkJc2FsdF9sZW5ndGg7Ci0gCXVuc2lnbmVkIGNoYXIJCQlzYWx0W0ROU19OU0VDM19TQUxUU0laRV07Ci0rCi0rCS8qCi0rCSAqIHJlY29yZHMgYW5kIGJ5dGVzIGFyZSBjb3ZlcmVkIGJ5IHJ3bG9jay4KLSsJICovCi0rCWlzY19yd2xvY2tfdCAgICAgICAgICAgICAgICAgICAgcndsb2NrOwotKwlpc2NfdWludDY0X3QJCQlyZWNvcmRzOwotKwlpc2NfdWludDY0X3QJCQlieXRlczsKLSB9IHJidGRiX3ZlcnNpb25fdDsKLSAKLSB0eXBlZGVmIElTQ19MSVNUKHJidGRiX3ZlcnNpb25fdCkgICAgICAgcmJ0ZGJfdmVyc2lvbmxpc3RfdDsKLUBAIC0xMTMwLDYgKzExMzgsNyBAQCBmcmVlX3JidGRiKGRuc19yYnRkYl90ICpyYnRkYiwgaXNjX2Jvb2xlYW5fdCBsb2csIGlzY19ldmVudF90ICpldmVudCkgewotIAkJSU5TSVNUKHJlZnMgPT0gMCk7Ci0gCQlVTkxJTksocmJ0ZGItPm9wZW5fdmVyc2lvbnMsIHJidGRiLT5jdXJyZW50X3ZlcnNpb24sIGxpbmspOwotIAkJaXNjX3JlZmNvdW50X2Rlc3Ryb3koJnJidGRiLT5jdXJyZW50X3ZlcnNpb24tPnJlZmVyZW5jZXMpOwotKwkJaXNjX3J3bG9ja19kZXN0cm95KCZyYnRkYi0+Y3VycmVudF92ZXJzaW9uLT5yd2xvY2spOwotIAkJaXNjX21lbV9wdXQocmJ0ZGItPmNvbW1vbi5tY3R4LCByYnRkYi0+Y3VycmVudF92ZXJzaW9uLAotIAkJCSAgICBzaXplb2YocmJ0ZGJfdmVyc2lvbl90KSk7Ci0gCX0KLUBAIC0xMzgzLDYgKzEzOTIsNyBAQCBhbGxvY2F0ZV92ZXJzaW9uKGlzY19tZW1fdCAqbWN0eCwgcmJ0ZGJfc2VyaWFsX3Qgc2VyaWFsLAotIAotIHN0YXRpYyBpc2NfcmVzdWx0X3QKLSBuZXd2ZXJzaW9uKGRuc19kYl90ICpkYiwgZG5zX2RidmVyc2lvbl90ICoqdmVyc2lvbnApIHsKLSsJaXNjX3Jlc3VsdF90IHJlc3VsdDsKLSAJZG5zX3JidGRiX3QgKnJidGRiID0gKGRuc19yYnRkYl90ICopZGI7Ci0gCXJidGRiX3ZlcnNpb25fdCAqdmVyc2lvbjsKLSAKLUBAIC0xNDE1LDEzICsxNDI1LDI4IEBAIG5ld3ZlcnNpb24oZG5zX2RiX3QgKmRiLCBkbnNfZGJ2ZXJzaW9uX3QgKip2ZXJzaW9ucCkgewotIAkJCXZlcnNpb24tPnNhbHRfbGVuZ3RoID0gMDsKLSAJCQltZW1zZXQodmVyc2lvbi0+c2FsdCwgMCwgc2l6ZW9mKHZlcnNpb24tPnNhbHQpKTsKLSAJCX0KLS0JCXJidGRiLT5uZXh0X3NlcmlhbCsrOwotLQkJcmJ0ZGItPmZ1dHVyZV92ZXJzaW9uID0gdmVyc2lvbjsKLS0JfQotKwkJcmVzdWx0ID0gaXNjX3J3bG9ja19pbml0KCZ2ZXJzaW9uLT5yd2xvY2ssIDAsIDApOwotKwkJaWYgKHJlc3VsdCAhPSBJU0NfUl9TVUNDRVNTKSB7Ci0rCQkJaXNjX3JlZmNvdW50X2Rlc3Ryb3koJnZlcnNpb24tPnJlZmVyZW5jZXMpOwotKwkJCWlzY19tZW1fcHV0KHJidGRiLT5jb21tb24ubWN0eCwgdmVyc2lvbiwKLSsJCQkJICAgIHNpemVvZigqdmVyc2lvbikpOwotKwkJCXZlcnNpb24gPSBOVUxMOwotKwkJfSBlbHNlIHsKLSsJCQlSV0xPQ0soJnJidGRiLT5jdXJyZW50X3ZlcnNpb24tPnJ3bG9jaywKLSsJCQkgICAgICAgaXNjX3J3bG9ja3R5cGVfcmVhZCk7Ci0rCQkJdmVyc2lvbi0+cmVjb3JkcyA9IHJidGRiLT5jdXJyZW50X3ZlcnNpb24tPnJlY29yZHM7Ci0rCQkJdmVyc2lvbi0+Ynl0ZXMgPSByYnRkYi0+Y3VycmVudF92ZXJzaW9uLT5ieXRlczsKLSsJCQlSV1VOTE9DSygmcmJ0ZGItPmN1cnJlbnRfdmVyc2lvbi0+cndsb2NrLAotKwkJCQkgaXNjX3J3bG9ja3R5cGVfcmVhZCk7Ci0rCQkJcmJ0ZGItPm5leHRfc2VyaWFsKys7Ci0rCQkJcmJ0ZGItPmZ1dHVyZV92ZXJzaW9uID0gdmVyc2lvbjsKLSsJCX0KLSsJfSBlbHNlCi0rCQlyZXN1bHQgPSBJU0NfUl9OT01FTU9SWTsKLSAJUkJUREJfVU5MT0NLKCZyYnRkYi0+bG9jaywgaXNjX3J3bG9ja3R5cGVfd3JpdGUpOwotIAotIAlpZiAodmVyc2lvbiA9PSBOVUxMKQotLQkJcmV0dXJuIChJU0NfUl9OT01FTU9SWSk7Ci0rCQlyZXR1cm4gKHJlc3VsdCk7Ci0gCi0gCSp2ZXJzaW9ucCA9IHZlcnNpb247Ci0gCi1AQCAtMjY4MSw2ICsyNzA2LDcgQEAgY2xvc2V2ZXJzaW9uKGRuc19kYl90ICpkYiwgZG5zX2RidmVyc2lvbl90ICoqdmVyc2lvbnAsIGlzY19ib29sZWFuX3QgY29tbWl0KSB7Ci0gCi0gCWlmIChjbGVhbnVwX3ZlcnNpb24gIT0gTlVMTCkgewotIAkJSU5TSVNUKEVNUFRZKGNsZWFudXBfdmVyc2lvbi0+Y2hhbmdlZF9saXN0KSk7Ci0rCQlpc2Nfcndsb2NrX2Rlc3Ryb3koJmNsZWFudXBfdmVyc2lvbi0+cndsb2NrKTsKLSAJCWlzY19tZW1fcHV0KHJidGRiLT5jb21tb24ubWN0eCwgY2xlYW51cF92ZXJzaW9uLAotIAkJCSAgICBzaXplb2YoKmNsZWFudXBfdmVyc2lvbikpOwotIAl9Ci1AQCAtNjI1NCw2ICs2MjgwLDI2IEBAIGFkZDMyKGRuc19yYnRkYl90ICpyYnRkYiwgZG5zX3JidG5vZGVfdCAqcmJ0bm9kZSwgcmJ0ZGJfdmVyc2lvbl90ICpyYnR2ZXJzaW9uLAotIAkJZWxzZQotIAkJCXJidG5vZGUtPmRhdGEgPSBuZXdoZWFkZXI7Ci0gCQluZXdoZWFkZXItPm5leHQgPSB0b3BoZWFkZXItPm5leHQ7Ci0rCQlpZiAocmJ0dmVyc2lvbiAhPSBOVUxMKQotKwkJCVJXTE9DSygmcmJ0dmVyc2lvbi0+cndsb2NrLCBpc2Nfcndsb2NrdHlwZV93cml0ZSk7Ci0rCQlpZiAocmJ0dmVyc2lvbiAhPSBOVUxMICYmICFoZWFkZXJfbngpIHsKLSsJCQlyYnR2ZXJzaW9uLT5yZWNvcmRzIC09Ci0rCQkJCWRuc19yZGF0YXNsYWJfY291bnQoKHVuc2lnbmVkIGNoYXIgKiloZWFkZXIsCi0rCQkJCQkJICAgIHNpemVvZigqaGVhZGVyKSk7Ci0rCQkJcmJ0dmVyc2lvbi0+Ynl0ZXMgLT0KLSsJCQkJZG5zX3JkYXRhc2xhYl9zaXplKCh1bnNpZ25lZCBjaGFyICopaGVhZGVyLAotKwkJCQkJCSAgIHNpemVvZigqaGVhZGVyKSk7Ci0rCQl9Ci0rCQlpZiAocmJ0dmVyc2lvbiAhPSBOVUxMICYmICFuZXdoZWFkZXJfbngpIHsKLSsJCQlyYnR2ZXJzaW9uLT5yZWNvcmRzICs9Ci0rCQkJCWRuc19yZGF0YXNsYWJfY291bnQoKHVuc2lnbmVkIGNoYXIgKiluZXdoZWFkZXIsCi0rCQkJCQkJICAgIHNpemVvZigqbmV3aGVhZGVyKSk7Ci0rCQkJcmJ0dmVyc2lvbi0+Ynl0ZXMgKz0KLSsJCQkJZG5zX3JkYXRhc2xhYl9zaXplKCh1bnNpZ25lZCBjaGFyICopbmV3aGVhZGVyLAotKwkJCQkJCSAgIHNpemVvZigqbmV3aGVhZGVyKSk7Ci0rCQl9Ci0rCQlpZiAocmJ0dmVyc2lvbiAhPSBOVUxMKQotKwkJCVJXVU5MT0NLKCZyYnR2ZXJzaW9uLT5yd2xvY2ssIGlzY19yd2xvY2t0eXBlX3dyaXRlKTsKLSAJCWlmIChsb2FkaW5nKSB7Ci0gCQkJLyoKLSAJCQkgKiBUaGVyZSBhcmUgbm8gb3RoZXIgcmVmZXJlbmNlcyB0byAnaGVhZGVyJyB3aGVuCi1AQCAtNjM1NSw2ICs2NDAxLDE2IEBAIGFkZDMyKGRuc19yYnRkYl90ICpyYnRkYiwgZG5zX3JidG5vZGVfdCAqcmJ0bm9kZSwgcmJ0ZGJfdmVyc2lvbl90ICpyYnR2ZXJzaW9uLAotIAkJCW5ld2hlYWRlci0+ZG93biA9IE5VTEw7Ci0gCQkJcmJ0bm9kZS0+ZGF0YSA9IG5ld2hlYWRlcjsKLSAJCX0KLSsJCWlmIChyYnR2ZXJzaW9uICE9IE5VTEwgJiYgIW5ld2hlYWRlcl9ueCkgewotKwkJCVJXTE9DSygmcmJ0dmVyc2lvbi0+cndsb2NrLCBpc2Nfcndsb2NrdHlwZV93cml0ZSk7Ci0rCQkJcmJ0dmVyc2lvbi0+cmVjb3JkcyArPQotKwkJCQlkbnNfcmRhdGFzbGFiX2NvdW50KCh1bnNpZ25lZCBjaGFyICopbmV3aGVhZGVyLAotKwkJCQkJCSAgICBzaXplb2YoKm5ld2hlYWRlcikpOwotKwkJCXJidHZlcnNpb24tPmJ5dGVzICs9Ci0rCQkJCWRuc19yZGF0YXNsYWJfc2l6ZSgodW5zaWduZWQgY2hhciAqKW5ld2hlYWRlciwKLSsJCQkJCQkgICBzaXplb2YoKm5ld2hlYWRlcikpOwotKwkJCVJXVU5MT0NLKCZyYnR2ZXJzaW9uLT5yd2xvY2ssIGlzY19yd2xvY2t0eXBlX3dyaXRlKTsKLSsJCX0KLSAJCWlkeCA9IG5ld2hlYWRlci0+bm9kZS0+bG9ja251bTsKLSAJCWlmIChJU19DQUNIRShyYnRkYikpIHsKLSAJCQlJU0NfTElTVF9QUkVQRU5EKHJidGRiLT5yZGF0YXNldHNbaWR4XSwKLUBAIC02ODExLDYgKzY4NjcsMTIgQEAgc3VidHJhY3RyZGF0YXNldChkbnNfZGJfdCAqZGIsIGRuc19kYm5vZGVfdCAqbm9kZSwgZG5zX2RidmVyc2lvbl90ICp2ZXJzaW9uLAotIAkJCSAqLwotIAkJCW5ld2hlYWRlci0+YWRkaXRpb25hbF9hdXRoID0gTlVMTDsKLSAJCQluZXdoZWFkZXItPmFkZGl0aW9uYWxfZ2x1ZSA9IE5VTEw7Ci0rCQkJcmJ0dmVyc2lvbi0+cmVjb3JkcyArPQotKwkJCQlkbnNfcmRhdGFzbGFiX2NvdW50KCh1bnNpZ25lZCBjaGFyICopbmV3aGVhZGVyLAotKwkJCQkJCSAgICBzaXplb2YoKm5ld2hlYWRlcikpOwotKwkJCXJidHZlcnNpb24tPmJ5dGVzICs9Ci0rCQkJCWRuc19yZGF0YXNsYWJfc2l6ZSgodW5zaWduZWQgY2hhciAqKW5ld2hlYWRlciwKLSsJCQkJCQkgICBzaXplb2YoKm5ld2hlYWRlcikpOwotIAkJfSBlbHNlIGlmIChyZXN1bHQgPT0gRE5TX1JfTlhSUlNFVCkgewotIAkJCS8qCi0gCQkJICogVGhpcyBzdWJ0cmFjdGlvbiB3b3VsZCByZW1vdmUgYWxsIG9mIHRoZSByZGF0YTsKLUBAIC02ODQ2LDYgKzY5MDgsMTIgQEAgc3VidHJhY3RyZGF0YXNldChkbnNfZGJfdCAqZGIsIGRuc19kYm5vZGVfdCAqbm9kZSwgZG5zX2RidmVyc2lvbl90ICp2ZXJzaW9uLAotIAkJICogdG9waGVhZGVyLgotIAkJICovCi0gCQlJTlNJU1QocmJ0dmVyc2lvbi0+c2VyaWFsID49IHRvcGhlYWRlci0+c2VyaWFsKTsKLSsJCXJidHZlcnNpb24tPnJlY29yZHMgLT0KLSsJCQkJZG5zX3JkYXRhc2xhYl9jb3VudCgodW5zaWduZWQgY2hhciAqKWhlYWRlciwKLSsJCQkJCQkgICAgc2l6ZW9mKCpoZWFkZXIpKTsKLSsJCXJidHZlcnNpb24tPmJ5dGVzIC09Ci0rCQkJCWRuc19yZGF0YXNsYWJfc2l6ZSgodW5zaWduZWQgY2hhciAqKWhlYWRlciwKLSsJCQkJCQkgICBzaXplb2YoKmhlYWRlcikpOwotIAkJaWYgKHRvcGhlYWRlcl9wcmV2ICE9IE5VTEwpCi0gCQkJdG9waGVhZGVyX3ByZXYtPm5leHQgPSBuZXdoZWFkZXI7Ci0gCQllbHNlCi1AQCAtNzE3Miw2ICs3MjQwLDcgQEAgcmJ0X2RhdGFmaXhlcihkbnNfcmJ0bm9kZV90ICpyYnRub2RlLCB2b2lkICpiYXNlLCBzaXplX3QgZmlsZXNpemUsCi0gCXVuc2lnbmVkIGNoYXIgKmxpbWl0ID0gKCh1bnNpZ25lZCBjaGFyICopIGJhc2UpICsgZmlsZXNpemU7Ci0gCXVuc2lnbmVkIGNoYXIgKnA7Ci0gCXNpemVfdCBzaXplOwotKwl1bnNpZ25lZCBpbnQgY291bnQ7Ci0gCi0gCVJFUVVJUkUocmJ0bm9kZSAhPSBOVUxMKTsKLSAKLUBAIC03MTc5LDYgKzcyNDgsOSBAQCByYnRfZGF0YWZpeGVyKGRuc19yYnRub2RlX3QgKnJidG5vZGUsIHZvaWQgKmJhc2UsIHNpemVfdCBmaWxlc2l6ZSwKLSAJCXAgPSAodW5zaWduZWQgY2hhciAqKSBoZWFkZXI7Ci0gCi0gCQlzaXplID0gZG5zX3JkYXRhc2xhYl9zaXplKHAsIHNpemVvZigqaGVhZGVyKSk7Ci0rCQljb3VudCA9IGRuc19yZGF0YXNsYWJfY291bnQocCwgc2l6ZW9mKCpoZWFkZXIpKTs7Ci0rCQlyYnRkYi0+Y3VycmVudF92ZXJzaW9uLT5yZWNvcmRzICs9IGNvdW50OwotKwkJcmJ0ZGItPmN1cnJlbnRfdmVyc2lvbi0+Ynl0ZXMgKz0gc2l6ZTsKLSAJCWlzY19jcmM2NF91cGRhdGUoY3JjLCBwLCBzaXplKTsKLSAjaWZkZWYgREVCVUcKLSAJCWhleGR1bXAoImhhc2hpbmcgaGVhZGVyIiwgcCwgc2l6ZW9mKHJkYXRhc2V0aGVhZGVyX3QpKTsKLUBAIC03Nzc3LDYgKzc4NDksMzMgQEAgZ2V0bnNlYzNwYXJhbWV0ZXJzKGRuc19kYl90ICpkYiwgZG5zX2RidmVyc2lvbl90ICp2ZXJzaW9uLCBkbnNfaGFzaF90ICpoYXNoLAotIH0KLSAKLSBzdGF0aWMgaXNjX3Jlc3VsdF90Ci0rZ2V0c2l6ZShkbnNfZGJfdCAqZGIsIGRuc19kYnZlcnNpb25fdCAqdmVyc2lvbiwgaXNjX3VpbnQ2NF90ICpyZWNvcmRzLAotKyAgICAgICAgaXNjX3VpbnQ2NF90ICpieXRlcykKLSt7Ci0rCWRuc19yYnRkYl90ICpyYnRkYjsKLSsJaXNjX3Jlc3VsdF90IHJlc3VsdCA9IElTQ19SX1NVQ0NFU1M7Ci0rCXJidGRiX3ZlcnNpb25fdCAqcmJ0dmVyc2lvbiA9IHZlcnNpb247Ci0rCi0rCXJidGRiID0gKGRuc19yYnRkYl90ICopZGI7Ci0rCi0rCVJFUVVJUkUoVkFMSURfUkJUREIocmJ0ZGIpKTsKLSsJSU5TSVNUKHJidHZlcnNpb24gPT0gTlVMTCB8fCByYnR2ZXJzaW9uLT5yYnRkYiA9PSByYnRkYik7Ci0rCi0rCWlmIChyYnR2ZXJzaW9uID09IE5VTEwpCi0rCQlyYnR2ZXJzaW9uID0gcmJ0ZGItPmN1cnJlbnRfdmVyc2lvbjsKLSsKLSsJUldMT0NLKCZyYnR2ZXJzaW9uLT5yd2xvY2ssIGlzY19yd2xvY2t0eXBlX3JlYWQpOwotKwlpZiAocmVjb3JkcyAhPSBOVUxMKQotKwkJKnJlY29yZHMgPSByYnR2ZXJzaW9uLT5yZWNvcmRzOwotKwotKwlpZiAoYnl0ZXMgIT0gTlVMTCkKLSsJCSpieXRlcyA9IHJidHZlcnNpb24tPmJ5dGVzOwotKwlSV1VOTE9DSygmcmJ0dmVyc2lvbi0+cndsb2NrLCBpc2Nfcndsb2NrdHlwZV9yZWFkKTsKLSsKLSsJcmV0dXJuIChyZXN1bHQpOwotK30KLSsKLStzdGF0aWMgaXNjX3Jlc3VsdF90Ci0gc2V0c2lnbmluZ3RpbWUoZG5zX2RiX3QgKmRiLCBkbnNfcmRhdGFzZXRfdCAqcmRhdGFzZXQsIGlzY19zdGR0aW1lX3QgcmVzaWduKSB7Ci0gCWRuc19yYnRkYl90ICpyYnRkYiA9IChkbnNfcmJ0ZGJfdCAqKWRiOwotIAlpc2Nfc3RkdGltZV90IG9sZHJlc2lnbjsKLUBAIC03OTcyLDcgKzgwNzEsOCBAQCBzdGF0aWMgZG5zX2RibWV0aG9kc190IHpvbmVfbWV0aG9kcyA9IHsKLSAJTlVMTCwKLSAJTlVMTCwKLSAJTlVMTCwKLS0JaGFzaHNpemUKLSsJaGFzaHNpemUsCi0rCWdldHNpemUKLSB9OwotIAotIHN0YXRpYyBkbnNfZGJtZXRob2RzX3QgY2FjaGVfbWV0aG9kcyA9IHsKLUBAIC04MDE4LDcgKzgxMTgsOCBAQCBzdGF0aWMgZG5zX2RibWV0aG9kc190IGNhY2hlX21ldGhvZHMgPSB7Ci0gCU5VTEwsCi0gCU5VTEwsCi0gCXNldGNhY2hlc3RhdHMsCi0tCWhhc2hzaXplCi0rCWhhc2hzaXplLAotKwlOVUxMCi0gfTsKLSAKLSBpc2NfcmVzdWx0X3QKLUBAIC04MzEwLDYgKzg0MTEsMjAgQEAgZG5zX3JidGRiX2NyZWF0ZQotIAlyYnRkYi0+Y3VycmVudF92ZXJzaW9uLT5zYWx0X2xlbmd0aCA9IDA7Ci0gCW1lbXNldChyYnRkYi0+Y3VycmVudF92ZXJzaW9uLT5zYWx0LCAwLAotIAkgICAgICAgc2l6ZW9mKHJidGRiLT5jdXJyZW50X3ZlcnNpb24tPnNhbHQpKTsKLSsJcmVzdWx0ID0gaXNjX3J3bG9ja19pbml0KCZyYnRkYi0+Y3VycmVudF92ZXJzaW9uLT5yd2xvY2ssIDAsIDApOwotKwlpZiAocmVzdWx0ICE9IElTQ19SX1NVQ0NFU1MpIHsKLSsJCWlzY19yZWZjb3VudF9kZXN0cm95KCZyYnRkYi0+Y3VycmVudF92ZXJzaW9uLT5yZWZlcmVuY2VzKTsKLSsJCWlzY19tZW1fcHV0KG1jdHgsIHJidGRiLT5jdXJyZW50X3ZlcnNpb24sCi0rCQkJICAgIHNpemVvZigqcmJ0ZGItPmN1cnJlbnRfdmVyc2lvbikpOwotKwkJcmJ0ZGItPmN1cnJlbnRfdmVyc2lvbiA9IE5VTEw7Ci0rCQlpc2NfcmVmY291bnRfZGVjcmVtZW50KCZyYnRkYi0+cmVmZXJlbmNlcywgTlVMTCk7Ci0rCQlpc2NfcmVmY291bnRfZGVzdHJveSgmcmJ0ZGItPnJlZmVyZW5jZXMpOwotKwkJZnJlZV9yYnRkYihyYnRkYiwgSVNDX0ZBTFNFLCBOVUxMKTsKLSsJCXJldHVybiAocmVzdWx0KTsKLSsJfQotKwotKwlyYnRkYi0+Y3VycmVudF92ZXJzaW9uLT5yZWNvcmRzID0gMDsKLSsJcmJ0ZGItPmN1cnJlbnRfdmVyc2lvbi0+Ynl0ZXMgPSAwOwotIAlyYnRkYi0+ZnV0dXJlX3ZlcnNpb24gPSBOVUxMOwotIAlJU0NfTElTVF9JTklUKHJidGRiLT5vcGVuX3ZlcnNpb25zKTsKLSAJLyoKLWRpZmYgLS1naXQgYS9saWIvZG5zL3JkYXRhc2xhYi5jIGIvbGliL2Rucy9yZGF0YXNsYWIuYwotaW5kZXggZTI5ZGM4NC4uNjNlMzcyOCAxMDA2NDQKLS0tLSBhL2xpYi9kbnMvcmRhdGFzbGFiLmMKLSsrKyBiL2xpYi9kbnMvcmRhdGFzbGFiLmMKLUBAIC01MjMsNiArNTIzLDE5IEBAIGRuc19yZGF0YXNsYWJfc2l6ZSh1bnNpZ25lZCBjaGFyICpzbGFiLCB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWxlbikgewotIAlyZXR1cm4gKCh1bnNpZ25lZCBpbnQpKGN1cnJlbnQgLSBzbGFiKSk7Ci0gfQotIAotK3Vuc2lnbmVkIGludAotK2Ruc19yZGF0YXNsYWJfY291bnQodW5zaWduZWQgY2hhciAqc2xhYiwgdW5zaWduZWQgaW50IHJlc2VydmVsZW4pIHsKLSsJdW5zaWduZWQgaW50IGNvdW50OwotKwl1bnNpZ25lZCBjaGFyICpjdXJyZW50OwotKwotKwlSRVFVSVJFKHNsYWIgIT0gTlVMTCk7Ci0rCi0rCWN1cnJlbnQgPSBzbGFiICsgcmVzZXJ2ZWxlbjsKLSsJY291bnQgPSAqY3VycmVudCsrICogMjU2OwotKwljb3VudCArPSAqY3VycmVudCsrOwotKwlyZXR1cm4gKGNvdW50KTsKLSt9Ci0rCi0gLyoKLSAgKiBNYWtlIHRoZSBkbnNfcmRhdGFfdCAncmRhdGEnIHJlZmVyIHRvIHRoZSBzbGFiIGl0ZW0KLSAgKiBiZWdpbm5pbmcgYXQgJypjdXJyZW50Jywgd2hpY2ggaXMgcGFydCBvZiBhIHNsYWIgb2YgdHlwZQotZGlmZiAtLWdpdCBhL2xpYi9kbnMvcmVzdWx0LmMgYi9saWIvZG5zL3Jlc3VsdC5jCi1pbmRleCA3YmU0ZjU3Li5hNjIxOTA5IDEwMDY0NAotLS0tIGEvbGliL2Rucy9yZXN1bHQuYwotKysrIGIvbGliL2Rucy9yZXN1bHQuYwotQEAgLTE2NywxMSArMTY3LDE2IEBAIHN0YXRpYyBjb25zdCBjaGFyICp0ZXh0W0ROU19SX05SRVNVTFRTXSA9IHsKLSAJImNvdmVyZWQgYnkgbmVnYXRpdmUgdHJ1c3QgYW5jaG9yIiwgICAgLyolPCAxMTAgRE5TX1JfTlRBQ09WRVJFRCAqLwotIAkiYmFkIENEUyIsCQkJICAgICAgIC8qJTwgMTExIEROU19SX0JBRENTRCAqLwotIAkiYmFkIENETlNLRVkiLAkJCSAgICAgICAvKiU8IDExMiBETlNfUl9CQURDRE5TS0VZICovCi0tCSJtYWxmb3JtZWQgT1BUIG9wdGlvbiIJCSAgICAgICAvKiU8IDExMyBETlNfUl9PUFRFUlIgKi8KLSsJIm1hbGZvcm1lZCBPUFQgb3B0aW9uIiwJCSAgICAgICAvKiU8IDExMyBETlNfUl9PUFRFUlIgKi8KLSsJIm1hbGZvcm1lZCBETlNUQVAgZGF0YSIsCSAgICAgICAvKiU8IDExNCBETlNfUl9CQURETlNUQVAgKi8KLSsKLSsJIlRTSUcgaW4gd3JvbmcgbG9jYXRpb24iLAkgICAgICAgLyolPCAxMTUgRE5TX1JfQkFEVFNJRyAqLwotKwkiU0lHKDApIGluIHdyb25nIGxvY2F0aW9uIiwJICAgICAgIC8qJTwgMTE2IEROU19SX0JBRFNJRzAgKi8KLSsJInRvbyBtYW55IHJlY29yZHMiLAkgICAgICAgICAgICAgICAvKiU8IDExNyBETlNfUl9UT09NQU5ZUkVDT1JEUyAqLwotIH07Ci0gCi0gc3RhdGljIGNvbnN0IGNoYXIgKnJjb2RlX3RleHRbRE5TX1JfTlJDT0RFUkVTVUxUU10gPSB7Ci0tCSJOT0VSUk9SIiwJCQkJLyolPCAwIEROU19SX05PRVJPUiAqLwotKwkiTk9FUlJPUiIsCQkJCS8qJTwgMCBETlNfUl9OT0VSUk9SICovCi0gCSJGT1JNRVJSIiwJCQkJLyolPCAxIEROU19SX0ZPUk1FUlIgKi8KLSAJIlNFUlZGQUlMIiwJCQkJLyolPCAyIEROU19SX1NFUlZGQUlMICovCi0gCSJOWERPTUFJTiIsCQkJCS8qJTwgMyBETlNfUl9OWERPTUFJTiAqLwotZGlmZiAtLWdpdCBhL2xpYi9kbnMvc2RiLmMgYi9saWIvZG5zL3NkYi5jCi1pbmRleCBhYmZlZWIwLi4xOTM5N2UwIDEwMDY0NAotLS0tIGEvbGliL2Rucy9zZGIuYwotKysrIGIvbGliL2Rucy9zZGIuYwotQEAgLTEyOTgsNyArMTI5OCw4IEBAIHN0YXRpYyBkbnNfZGJtZXRob2RzX3Qgc2RiX21ldGhvZHMgPSB7Ci0gCWZpbmRub2RlZXh0LAotIAlmaW5kZXh0LAotIAlOVUxMLAkJCS8qIHNldGNhY2hlc3RhdHMgKi8KLS0JTlVMTAkJCS8qIGhhc2hzaXplICovCi0rCU5VTEwsCQkJLyogaGFzaHNpemUgKi8KLSsJTlVMTAkJCS8qIGdldHNpemUgKi8KLSB9OwotIAotIHN0YXRpYyBpc2NfcmVzdWx0X3QKLWRpZmYgLS1naXQgYS9saWIvZG5zL3NkbHouYyBiL2xpYi9kbnMvc2Rsei5jCi1pbmRleCBiMTE5OGE0Li4wZTMxNjNkIDEwMDY0NAotLS0tIGEvbGliL2Rucy9zZGx6LmMKLSsrKyBiL2xpYi9kbnMvc2Rsei5jCi1AQCAtMTI2OSw3ICsxMjY5LDggQEAgc3RhdGljIGRuc19kYm1ldGhvZHNfdCBzZGx6ZGJfbWV0aG9kcyA9IHsKLSAJZmluZG5vZGVleHQsCi0gCWZpbmRleHQsCi0gCU5VTEwsCQkJLyogc2V0Y2FjaGVzdGF0cyAqLwotLQlOVUxMCQkJLyogaGFzaHNpemUgKi8KLSsJTlVMTCwJCQkvKiBoYXNoc2l6ZSAqLwotKwlOVUxMCQkJLyogZ2V0c2l6ZSAqLwotIH07Ci0gCi0gLyoKLWRpZmYgLS1naXQgYS9saWIvZG5zL3hmcmluLmMgYi9saWIvZG5zL3hmcmluLmMKLWluZGV4IDJhNmMxYjQuLmFjNTY2ZTEgMTAwNjQ0Ci0tLS0gYS9saWIvZG5zL3hmcmluLmMKLSsrKyBiL2xpYi9kbnMveGZyaW4uYwotQEAgLTE0OSw2ICsxNDksOSBAQCBzdHJ1Y3QgZG5zX3hmcmluX2N0eCB7Ci0gCXVuc2lnbmVkIGludAkJbnJlY3M7CQkvKiU8IE51bWJlciBvZiByZWNvcmRzIHJlY3ZkICovCi0gCWlzY191aW50NjRfdAkJbmJ5dGVzOwkJLyolPCBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgKi8KLSAKLSsJdW5zaWduZWQgaW50CQltYXhyZWNvcmRzOwkvKiU8IFRoZSBtYXhpbXVtIG51bWJlciBvZgotKwkJCQkJCSAgICAgcmVjb3JkcyBzZXQgZm9yIHRoZSB6b25lICovCi0rCi0gCWlzY190aW1lX3QJCXN0YXJ0OwkJLyolPCBTdGFydCB0aW1lIG9mIHRoZSB0cmFuc2ZlciAqLwotIAlpc2NfdGltZV90CQllbmQ7CQkvKiU8IEVuZCB0aW1lIG9mIHRoZSB0cmFuc2ZlciAqLwotIAotQEAgLTMwOSwxMCArMzEyLDE4IEBAIGF4ZnJfcHV0ZGF0YShkbnNfeGZyaW5fY3R4X3QgKnhmciwgZG5zX2RpZmZvcF90IG9wLAotIHN0YXRpYyBpc2NfcmVzdWx0X3QKLSBheGZyX2FwcGx5KGRuc194ZnJpbl9jdHhfdCAqeGZyKSB7Ci0gCWlzY19yZXN1bHRfdCByZXN1bHQ7Ci0rCWlzY191aW50NjRfdCByZWNvcmRzOwotIAotIAlDSEVDSyhkbnNfZGlmZl9sb2FkKCZ4ZnItPmRpZmYsIHhmci0+YXhmci5hZGQsIHhmci0+YXhmci5hZGRfcHJpdmF0ZSkpOwotIAl4ZnItPmRpZmZsZW4gPSAwOwotIAlkbnNfZGlmZl9jbGVhcigmeGZyLT5kaWZmKTsKLSsJaWYgKHhmci0+bWF4cmVjb3JkcyAhPSAwVSkgewotKwkJcmVzdWx0ID0gZG5zX2RiX2dldHNpemUoeGZyLT5kYiwgeGZyLT52ZXIsICZyZWNvcmRzLCBOVUxMKTsKLSsJCWlmIChyZXN1bHQgPT0gSVNDX1JfU1VDQ0VTUyAmJiByZWNvcmRzID4geGZyLT5tYXhyZWNvcmRzKSB7Ci0rCQkJcmVzdWx0ID0gRE5TX1JfVE9PTUFOWVJFQ09SRFM7Ci0rCQkJZ290byBmYWlsdXJlOwotKwkJfQotKwl9Ci0gCXJlc3VsdCA9IElTQ19SX1NVQ0NFU1M7Ci0gIGZhaWx1cmU6Ci0gCXJldHVybiAocmVzdWx0KTsKLUBAIC0zOTYsNiArNDA3LDcgQEAgaXhmcl9wdXRkYXRhKGRuc194ZnJpbl9jdHhfdCAqeGZyLCBkbnNfZGlmZm9wX3Qgb3AsCi0gc3RhdGljIGlzY19yZXN1bHRfdAotIGl4ZnJfYXBwbHkoZG5zX3hmcmluX2N0eF90ICp4ZnIpIHsKLSAJaXNjX3Jlc3VsdF90IHJlc3VsdDsKLSsJaXNjX3VpbnQ2NF90IHJlY29yZHM7Ci0gCi0gCWlmICh4ZnItPnZlciA9PSBOVUxMKSB7Ci0gCQlDSEVDSyhkbnNfZGJfbmV3dmVyc2lvbih4ZnItPmRiLCAmeGZyLT52ZXIpKTsKLUBAIC00MDMsNiArNDE1LDEzIEBAIGl4ZnJfYXBwbHkoZG5zX3hmcmluX2N0eF90ICp4ZnIpIHsKLSAJCQlDSEVDSyhkbnNfam91cm5hbF9iZWdpbl90cmFuc2FjdGlvbih4ZnItPml4ZnIuam91cm5hbCkpOwotIAl9Ci0gCUNIRUNLKGRuc19kaWZmX2FwcGx5KCZ4ZnItPmRpZmYsIHhmci0+ZGIsIHhmci0+dmVyKSk7Ci0rCWlmICh4ZnItPm1heHJlY29yZHMgIT0gMFUpIHsKLSsJCXJlc3VsdCA9IGRuc19kYl9nZXRzaXplKHhmci0+ZGIsIHhmci0+dmVyLCAmcmVjb3JkcywgTlVMTCk7Ci0rCQlpZiAocmVzdWx0ID09IElTQ19SX1NVQ0NFU1MgJiYgcmVjb3JkcyA+IHhmci0+bWF4cmVjb3JkcykgewotKwkJCXJlc3VsdCA9IEROU19SX1RPT01BTllSRUNPUkRTOwotKwkJCWdvdG8gZmFpbHVyZTsKLSsJCX0KLSsJfQotIAlpZiAoeGZyLT5peGZyLmpvdXJuYWwgIT0gTlVMTCkgewotIAkJcmVzdWx0ID0gZG5zX2pvdXJuYWxfd3JpdGVkaWZmKHhmci0+aXhmci5qb3VybmFsLCAmeGZyLT5kaWZmKTsKLSAJCWlmIChyZXN1bHQgIT0gSVNDX1JfU1VDQ0VTUykKLUBAIC03NTksNyArNzc4LDcgQEAgeGZyaW5fcmVzZXQoZG5zX3hmcmluX2N0eF90ICp4ZnIpIHsKLSAKLSBzdGF0aWMgdm9pZAotIHhmcmluX2ZhaWwoZG5zX3hmcmluX2N0eF90ICp4ZnIsIGlzY19yZXN1bHRfdCByZXN1bHQsIGNvbnN0IGNoYXIgKm1zZykgewotLQlpZiAocmVzdWx0ICE9IEROU19SX1VQVE9EQVRFKSB7Ci0rCWlmIChyZXN1bHQgIT0gRE5TX1JfVVBUT0RBVEUgJiYgcmVzdWx0ICE9IEROU19SX1RPT01BTllSRUNPUkRTKSB7Ci0gCQl4ZnJpbl9sb2coeGZyLCBJU0NfTE9HX0VSUk9SLCAiJXM6ICVzIiwKLSAJCQkgIG1zZywgaXNjX3Jlc3VsdF90b3RleHQocmVzdWx0KSk7Ci0gCQlpZiAoeGZyLT5pc19peGZyKQotQEAgLTg1Miw2ICs4NzEsNyBAQCB4ZnJpbl9jcmVhdGUoaXNjX21lbV90ICptY3R4LAotIAl4ZnItPm5tc2cgPSAwOwotIAl4ZnItPm5yZWNzID0gMDsKLSAJeGZyLT5uYnl0ZXMgPSAwOwotKwl4ZnItPm1heHJlY29yZHMgPSBkbnNfem9uZV9nZXRtYXhyZWNvcmRzKHpvbmUpOwotIAlpc2NfdGltZV9ub3coJnhmci0+c3RhcnQpOwotIAotIAl4ZnItPnRzaWdrZXkgPSBOVUxMOwotZGlmZiAtLWdpdCBhL2xpYi9kbnMvem9uZS5jIGIvbGliL2Rucy96b25lLmMKLWluZGV4IDkwZTU1OGQuLjJiMGQ4ZTQgMTAwNjQ0Ci0tLS0gYS9saWIvZG5zL3pvbmUuYwotKysrIGIvbGliL2Rucy96b25lLmMKLUBAIC0yNTMsNiArMjUzLDggQEAgc3RydWN0IGRuc196b25lIHsKLSAJaXNjX3VpbnQzMl90CQltYXhyZXRyeTsKLSAJaXNjX3VpbnQzMl90CQltaW5yZXRyeTsKLSAKLSsJaXNjX3VpbnQzMl90CQltYXhyZWNvcmRzOwotKwotIAlpc2Nfc29ja2FkZHJfdAkJKm1hc3RlcnM7Ci0gCWlzY19kc2NwX3QJCSptYXN0ZXJkc2NwczsKLSAJZG5zX25hbWVfdAkJKiptYXN0ZXJrZXluYW1lczsKLUBAIC0xMDA4OCw2ICsxMDA5MCwyMCBAQCBkbnNfem9uZV9zZXRtYXhyZXRyeXRpbWUoZG5zX3pvbmVfdCAqem9uZSwgaXNjX3VpbnQzMl90IHZhbCkgewotIAl6b25lLT5tYXhyZXRyeSA9IHZhbDsKLSB9Ci0gCi0raXNjX3VpbnQzMl90Ci0rZG5zX3pvbmVfZ2V0bWF4cmVjb3JkcyhkbnNfem9uZV90ICp6b25lKSB7Ci0rICAgICAgICBSRVFVSVJFKEROU19aT05FX1ZBTElEKHpvbmUpKTsKLSsKLSsJcmV0dXJuICh6b25lLT5tYXhyZWNvcmRzKTsKLSt9Ci0rCi0rdm9pZAotK2Ruc196b25lX3NldG1heHJlY29yZHMoZG5zX3pvbmVfdCAqem9uZSwgaXNjX3VpbnQzMl90IHZhbCkgewotKyAgICAgICAgUkVRVUlSRShETlNfWk9ORV9WQUxJRCh6b25lKSk7Ci0rCi0rCXpvbmUtPm1heHJlY29yZHMgPSB2YWw7Ci0rfQotKwotIHN0YXRpYyBpc2NfYm9vbGVhbl90Ci0gbm90aWZ5X2lzcXVldWVkKGRuc196b25lX3QgKnpvbmUsIHVuc2lnbmVkIGludCBmbGFncywgZG5zX25hbWVfdCAqbmFtZSwKLSAJCWlzY19zb2NrYWRkcl90ICphZGRyLCBkbnNfdHNpZ2tleV90ICprZXkpCi1AQCAtMTQ0MzEsNyArMTQ0NDcsNyBAQCB6b25lX3hmcmRvbmUoZG5zX3pvbmVfdCAqem9uZSwgaXNjX3Jlc3VsdF90IHJlc3VsdCkgewotIAlETlNfWk9ORV9DTFJGTEFHKHpvbmUsIEROU19aT05FRkxHX1NPQUJFRk9SRUFYRlIpOwotIAotIAlUSU1FX05PVygmbm93KTsKLS0Jc3dpdGNoIChyZXN1bHQpIHsKLSsJc3dpdGNoICh4ZnJyZXN1bHQpIHsKLSAJY2FzZSBJU0NfUl9TVUNDRVNTOgotIAkJRE5TX1pPTkVfU0VURkxBRyh6b25lLCBETlNfWk9ORUZMR19ORUVETk9USUZZKTsKLSAJCS8qRkFMTFRIUk9VR0gqLwotQEAgLTE0NTU4LDYgKzE0NTc0LDExIEBAIHpvbmVfeGZyZG9uZShkbnNfem9uZV90ICp6b25lLCBpc2NfcmVzdWx0X3QgcmVzdWx0KSB7Ci0gCQlETlNfWk9ORV9TRVRGTEFHKHpvbmUsIEROU19aT05FRkxBR19OT0lYRlIpOwotIAkJZ290byBzYW1lX21hc3RlcjsKLSAKLSsJY2FzZSBETlNfUl9UT09NQU5ZUkVDT1JEUzoKLSsJCUROU19aT05FX0pJVFRFUl9BREQoJm5vdywgem9uZS0+cmVmcmVzaCwgJnpvbmUtPnJlZnJlc2h0aW1lKTsKLSsJCWluY19zdGF0cyh6b25lLCBkbnNfem9uZXN0YXRzY291bnRlcl94ZnJmYWlsKTsKLSsJCWJyZWFrOwotKwotIAlkZWZhdWx0OgotIAluZXh0X21hc3RlcjoKLSAJCS8qCi1kaWZmIC0tZ2l0IGEvbGliL2lzY2NmZy9uYW1lZGNvbmYuYyBiL2xpYi9pc2NjZmcvbmFtZWRjb25mLmMKLWluZGV4IDc4MGFiNDYuLmU3ZmYxY2MgMTAwNjQ0Ci0tLS0gYS9saWIvaXNjY2ZnL25hbWVkY29uZi5jCi0rKysgYi9saWIvaXNjY2ZnL25hbWVkY29uZi5jCi1AQCAtMTY3OSw2ICsxNjc5LDcgQEAgem9uZV9jbGF1c2VzW10gPSB7Ci0gCXsgIm1hc3RlcmZpbGUtZm9ybWF0IiwgJmNmZ190eXBlX21hc3RlcmZvcm1hdCwgMCB9LAotIAl7ICJtYXgtaXhmci1sb2ctc2l6ZSIsICZjZmdfdHlwZV9zaXplLCBDRkdfQ0xBVVNFRkxBR19PQlNPTEVURSB9LAotIAl7ICJtYXgtam91cm5hbC1zaXplIiwgJmNmZ190eXBlX3NpemVub2RlZmF1bHQsIDAgfSwKLSsJeyAibWF4LXJlY29yZHMiLCAmY2ZnX3R5cGVfdWludDMyLCAwIH0sCi0gCXsgIm1heC1yZWZyZXNoLXRpbWUiLCAmY2ZnX3R5cGVfdWludDMyLCAwIH0sCi0gCXsgIm1heC1yZXRyeS10aW1lIiwgJmNmZ190eXBlX3VpbnQzMiwgMCB9LAotIAl7ICJtYXgtdHJhbnNmZXItaWRsZS1pbiIsICZjZmdfdHlwZV91aW50MzIsIDAgfSwKLS0tIAotMi43LjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL0NWRS0yMDE2LTg4NjQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvQ1ZFLTIwMTYtODg2NC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUyZDY4MC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvQ1ZFLTIwMTYtODg2NC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIxOSArMCwwIEBACi1Gcm9tIGMxZDA1OTlhMjQ2ZjY0NmQxYzIyMDE4ZjhmYTA5NDU5MjcwYTQ0YjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBNYXJrIEFuZHJld3MgPG1hcmthQGlzYy5vcmc+Ci1EYXRlOiBGcmksIDIxIE9jdCAyMDE2IDE0OjU1OjEwICsxMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIDQ0ODkuIFtzZWN1cml0eV0gSXQgd2FzIHBvc3NpYmxlIHRvIHRyaWdnZXIgYXNzZXJ0aW9ucyB3aGVuCi0gcHJvY2Vzc2luZyBhIHJlc3BvbnNlLiAoQ1ZFLTIwMTYtODg2NCkgW1JUICM0MzQ2NV0KLQotKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgYmQ2ZjI3ZjVjMzUzMTMzYjU2M2ZlNjkxMDBiMmYxNjhjMTI5ZjNjYSkKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotW2h0dHBzOi8vc291cmNlLmlzYy5vcmcvY2dpLWJpbi9naXR3ZWIuY2dpP3A9YmluZDkuZ2l0O2E9Y29tbWl0O2g9YzFkMDU5OWEyNDZmNjQ2ZDFjMjIwMThmOGZhMDk0NTkyNzBhNDRiOF0KLQotQ1ZFOiBDVkUtMjAxNi04ODY0Ci0KLVNpZ25lZC1vZmYtYnk6IFlpIFpoYW8gPHlpLnpoYW9Ad2luZHJpdmVyLmNvbT4KLS0tLQotIENIQU5HRVMgICAgICAgICAgICB8ICAzICsrKwotIGxpYi9kbnMvcmVzb2x2ZXIuYyB8IDY5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQotIDIgZmlsZXMgY2hhbmdlZCwgNTAgaW5zZXJ0aW9ucygrKSwgMjIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9DSEFOR0VTIGIvQ0hBTkdFUwotaW5kZXggNWM4YzYxYS4uNDFjZmNlNSAxMDA2NDQKLS0tLSBhL0NIQU5HRVMKLSsrKyBiL0NIQU5HRVMKLUBAIC0xLDMgKzEsNiBAQAotKzQ0ODkuCVtzZWN1cml0eV0JSXQgd2FzIHBvc3NpYmxlIHRvIHRyaWdnZXIgYXNzZXJ0aW9ucyB3aGVuIHByb2Nlc3NpbmcKLSsJCQlhIHJlc3BvbnNlLiAoQ1ZFLTIwMTYtODg2NCkgW1JUICM0MzQ2NV0KLSsKLSA0NDY3LiAgIFtzZWN1cml0eV0gICAgICBJdCB3YXMgcG9zc2libGUgdG8gdHJpZ2dlciBhbiBhc3NlcnRpb24gd2hlbgotICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmluZyBhIG1lc3NhZ2UuIChDVkUtMjAxNi0yNzc2KSBbUlQgIzQzMTM5XQotIAotZGlmZiAtLWdpdCBhL2xpYi9kbnMvcmVzb2x2ZXIuYyBiL2xpYi9kbnMvcmVzb2x2ZXIuYwotaW5kZXggYmExYWUyMy4uMTNjOGI0NCAxMDA2NDQKLS0tLSBhL2xpYi9kbnMvcmVzb2x2ZXIuYwotKysrIGIvbGliL2Rucy9yZXNvbHZlci5jCi1AQCAtNjEyLDcgKzYxMiw5IEBAIHZhbGNyZWF0ZShmZXRjaGN0eF90ICpmY3R4LCBkbnNfYWRiYWRkcmluZm9fdCAqYWRkcmluZm8sIGRuc19uYW1lX3QgKm5hbWUsCi0gCXZhbGFyZy0+YWRkcmluZm8gPSBhZGRyaW5mbzsKLSAKLSAJaWYgKCFJU0NfTElTVF9FTVBUWShmY3R4LT52YWxpZGF0b3JzKSkKLS0JCUlOU0lTVCgodmFsb3B0aW9ucyAmIEROU19WQUxJREFUT1JfREVGRVIpICE9IDApOwotKwkJdmFsb3B0aW9ucyB8PSBETlNfVkFMSURBVE9SX0RFRkVSOwotKwllbHNlCi0rCQl2YWxvcHRpb25zICY9IH5ETlNfVkFMSURBVE9SX0RFRkVSOwotIAotIAlyZXN1bHQgPSBkbnNfdmFsaWRhdG9yX2NyZWF0ZShmY3R4LT5yZXMtPnZpZXcsIG5hbWUsIHR5cGUsIHJkYXRhc2V0LAotIAkJCQkgICAgICBzaWdyZGF0YXNldCwgZmN0eC0+cm1lc3NhZ2UsCi1AQCAtNTUyNiwxMyArNTUyOCw2IEBAIGNhY2hlX25hbWUoZmV0Y2hjdHhfdCAqZmN0eCwgZG5zX25hbWVfdCAqbmFtZSwgZG5zX2FkYmFkZHJpbmZvX3QgKmFkZHJpbmZvLAotIAkJCQkJCQkgICByZGF0YXNldCwKLSAJCQkJCQkJICAgc2lncmRhdGFzZXQsCi0gCQkJCQkJCSAgIHZhbG9wdGlvbnMsIHRhc2spOwotLQkJCQkJLyoKLS0JCQkJCSAqIERlZmVyIGFueSBmdXJ0aGVyIHZhbGlkYXRpb25zLgotLQkJCQkJICogVGhpcyBwcmV2ZW50cyBtdWx0aXBsZSB2YWxpZGF0b3JzCi0tCQkJCQkgKiBmcm9tIG1hbmlwdWxhdGluZyBmY3R4LT5ybWVzc2FnZQotLQkJCQkJICogc2ltdWx0YW5lb3VzbHkuCi0tCQkJCQkgKi8KLS0JCQkJCXZhbG9wdGlvbnMgfD0gRE5TX1ZBTElEQVRPUl9ERUZFUjsKLSAJCQkJfQotIAkJCX0gZWxzZSBpZiAoQ0hBSU5JTkcocmRhdGFzZXQpKSB7Ci0gCQkJCWlmIChyZGF0YXNldC0+dHlwZSA9PSBkbnNfcmRhdGF0eXBlX2NuYW1lKQotQEAgLTU2NDcsNiArNTY0MiwxMSBAQCBjYWNoZV9uYW1lKGZldGNoY3R4X3QgKmZjdHgsIGRuc19uYW1lX3QgKm5hbWUsIGRuc19hZGJhZGRyaW5mb190ICphZGRyaW5mbywKLSAJCQkJICAgICAgIGVyZXN1bHQgPT0gRE5TX1JfTkNBQ0hFTlhSUlNFVCk7Ci0gCQkJfQotIAkJCWV2ZW50LT5yZXN1bHQgPSBlcmVzdWx0OwotKwkJCWlmIChhZGJwICE9IE5VTEwgJiYgKmFkYnAgIT0gTlVMTCkgewotKwkJCQlpZiAoYW5vZGVwICE9IE5VTEwgJiYgKmFub2RlcCAhPSBOVUxMKQotKwkJCQkJZG5zX2RiX2RldGFjaG5vZGUoKmFkYnAsIGFub2RlcCk7Ci0rCQkJCWRuc19kYl9kZXRhY2goYWRicCk7Ci0rCQkJfQotIAkJCWRuc19kYl9hdHRhY2goZmN0eC0+Y2FjaGUsIGFkYnApOwotIAkJCWRuc19kYl90cmFuc2Zlcm5vZGUoZmN0eC0+Y2FjaGUsICZub2RlLCBhbm9kZXApOwotIAkJCWNsb25lX3Jlc3VsdHMoZmN0eCk7Ci1AQCAtNTg5Nyw2ICs1ODk3LDExIEBAIG5jYWNoZV9tZXNzYWdlKGZldGNoY3R4X3QgKmZjdHgsIGRuc19hZGJhZGRyaW5mb190ICphZGRyaW5mbywKLSAJCWZjdHgtPmF0dHJpYnV0ZXMgfD0gRkNUWF9BVFRSX0hBVkVBTlNXRVI7Ci0gCQlpZiAoZXZlbnQgIT0gTlVMTCkgewotIAkJCWV2ZW50LT5yZXN1bHQgPSBlcmVzdWx0OwotKwkJCWlmIChhZGJwICE9IE5VTEwgJiYgKmFkYnAgIT0gTlVMTCkgewotKwkJCQlpZiAoYW5vZGVwICE9IE5VTEwgJiYgKmFub2RlcCAhPSBOVUxMKQotKwkJCQkJZG5zX2RiX2RldGFjaG5vZGUoKmFkYnAsIGFub2RlcCk7Ci0rCQkJCWRuc19kYl9kZXRhY2goYWRicCk7Ci0rCQkJfQotIAkJCWRuc19kYl9hdHRhY2goZmN0eC0+Y2FjaGUsIGFkYnApOwotIAkJCWRuc19kYl90cmFuc2Zlcm5vZGUoZmN0eC0+Y2FjaGUsICZub2RlLCBhbm9kZXApOwotIAkJCWNsb25lX3Jlc3VsdHMoZmN0eCk7Ci1AQCAtNjcxOCwxMyArNjcyMywxNSBAQCBzdGF0aWMgaXNjX3Jlc3VsdF90Ci0gYW5zd2VyX3Jlc3BvbnNlKGZldGNoY3R4X3QgKmZjdHgpIHsKLSAJaXNjX3Jlc3VsdF90IHJlc3VsdDsKLSAJZG5zX21lc3NhZ2VfdCAqbWVzc2FnZTsKLS0JZG5zX25hbWVfdCAqbmFtZSwgKmRuYW1lLCAqcW5hbWUsIHRuYW1lLCAqbnNfbmFtZTsKLSsJZG5zX25hbWVfdCAqbmFtZSwgKmRuYW1lID0gTlVMTCwgKnFuYW1lLCAqZHFuYW1lLCB0bmFtZSwgKm5zX25hbWU7Ci0rCWRuc19uYW1lX3QgKmNuYW1lID0gTlVMTDsKLSAJZG5zX3JkYXRhc2V0X3QgKnJkYXRhc2V0LCAqbnNfcmRhdGFzZXQ7Ci0gCWlzY19ib29sZWFuX3QgZG9uZSwgZXh0ZXJuYWwsIGNoYWluaW5nLCBhYSwgZm91bmQsIHdhbnRfY2hhaW5pbmc7Ci0tCWlzY19ib29sZWFuX3QgaGF2ZV9hbnN3ZXIsIGZvdW5kX2NuYW1lLCBmb3VuZF90eXBlLCB3YW50ZWRfY2hhaW5pbmc7Ci0rCWlzY19ib29sZWFuX3QgaGF2ZV9hbnN3ZXIsIGZvdW5kX2NuYW1lLCBmb3VuZF9kbmFtZSwgZm91bmRfdHlwZTsKLSsJaXNjX2Jvb2xlYW5fdCB3YW50ZWRfY2hhaW5pbmc7Ci0gCXVuc2lnbmVkIGludCBhZmxhZzsKLSAJZG5zX3JkYXRhdHlwZV90IHR5cGU7Ci0tCWRuc19maXhlZG5hbWVfdCBmZG5hbWUsIGZxbmFtZTsKLSsJZG5zX2ZpeGVkbmFtZV90IGZkbmFtZSwgZnFuYW1lLCBmcWRuYW1lOwotIAlkbnNfdmlld190ICp2aWV3OwotIAotIAlGQ1RYVFJBQ0UoImFuc3dlcl9yZXNwb25zZSIpOwotQEAgLTY3MzgsNiArNjc0NSw3IEBAIGFuc3dlcl9yZXNwb25zZShmZXRjaGN0eF90ICpmY3R4KSB7Ci0gCi0gCWRvbmUgPSBJU0NfRkFMU0U7Ci0gCWZvdW5kX2NuYW1lID0gSVNDX0ZBTFNFOwotKwlmb3VuZF9kbmFtZSA9IElTQ19GQUxTRTsKLSAJZm91bmRfdHlwZSA9IElTQ19GQUxTRTsKLSAJY2hhaW5pbmcgPSBJU0NfRkFMU0U7Ci0gCWhhdmVfYW5zd2VyID0gSVNDX0ZBTFNFOwotQEAgLTY3NDcsMTIgKzY3NTUsMTMgQEAgYW5zd2VyX3Jlc3BvbnNlKGZldGNoY3R4X3QgKmZjdHgpIHsKLSAJCWFhID0gSVNDX1RSVUU7Ci0gCWVsc2UKLSAJCWFhID0gSVNDX0ZBTFNFOwotLQlxbmFtZSA9ICZmY3R4LT5uYW1lOwotKwlkcW5hbWUgPSBxbmFtZSA9ICZmY3R4LT5uYW1lOwotIAl0eXBlID0gZmN0eC0+dHlwZTsKLSAJdmlldyA9IGZjdHgtPnJlcy0+dmlldzsKLSsJZG5zX2ZpeGVkbmFtZV9pbml0KCZmcWRuYW1lKTsKLSAJcmVzdWx0ID0gZG5zX21lc3NhZ2VfZmlyc3RuYW1lKG1lc3NhZ2UsIEROU19TRUNUSU9OX0FOU1dFUik7Ci0gCXdoaWxlICghZG9uZSAmJiByZXN1bHQgPT0gSVNDX1JfU1VDQ0VTUykgewotLQkJZG5zX25hbWVyZWxuX3QgbmFtZXJlbG47Ci0rCQlkbnNfbmFtZXJlbG5fdCBuYW1lcmVsbiwgZG5hbWVyZWxuOwotIAkJaW50IG9yZGVyOwotIAkJdW5zaWduZWQgaW50IG5sYWJlbHM7Ci0gCi1AQCAtNjc2MCw2ICs2NzY5LDggQEAgYW5zd2VyX3Jlc3BvbnNlKGZldGNoY3R4X3QgKmZjdHgpIHsKLSAJCWRuc19tZXNzYWdlX2N1cnJlbnRuYW1lKG1lc3NhZ2UsIEROU19TRUNUSU9OX0FOU1dFUiwgJm5hbWUpOwotIAkJZXh0ZXJuYWwgPSBJU0NfVEYoIWRuc19uYW1lX2lzc3ViZG9tYWluKG5hbWUsICZmY3R4LT5kb21haW4pKTsKLSAJCW5hbWVyZWxuID0gZG5zX25hbWVfZnVsbGNvbXBhcmUocW5hbWUsIG5hbWUsICZvcmRlciwgJm5sYWJlbHMpOwotKwkJZG5hbWVyZWxuID0gZG5zX25hbWVfZnVsbGNvbXBhcmUoZHFuYW1lLCBuYW1lLCAmb3JkZXIsCi0rCQkJCQkJICZubGFiZWxzKTsKLSAJCWlmIChuYW1lcmVsbiA9PSBkbnNfbmFtZXJlbG5fZXF1YWwpIHsKLSAJCQl3YW50ZWRfY2hhaW5pbmcgPSBJU0NfRkFMU0U7Ci0gCQkJZm9yIChyZGF0YXNldCA9IElTQ19MSVNUX0hFQUQobmFtZS0+bGlzdCk7Ci1AQCAtNjg1NCw3ICs2ODY1LDcgQEAgYW5zd2VyX3Jlc3BvbnNlKGZldGNoY3R4X3QgKmZjdHgpIHsKLSAJCQkJCX0KLSAJCQkJfSBlbHNlIGlmIChyZGF0YXNldC0+dHlwZSA9PSBkbnNfcmRhdGF0eXBlX3Jyc2lnCi0gCQkJCQkgICAmJiByZGF0YXNldC0+Y292ZXJzID09Ci0tCQkJCQkgICBkbnNfcmRhdGF0eXBlX2NuYW1lCi0rCQkJCQkgICAgICBkbnNfcmRhdGF0eXBlX2NuYW1lCi0gCQkJCQkgICAmJiAhZm91bmRfdHlwZSkgewotIAkJCQkJLyoKLSAJCQkJCSAqIFdlJ3JlIGxvb2tpbmcgZm9yIHNvbWV0aGluZyBlbHNlLAotQEAgLTY4ODQsMTEgKzY4OTUsMTggQEAgYW5zd2VyX3Jlc3BvbnNlKGZldGNoY3R4X3QgKmZjdHgpIHsKLSAJCQkJCQkgKiBhIENOQU1FIG9yIEROQU1FKS4KLSAJCQkJCQkgKi8KLSAJCQkJCQlJTlNJU1QoIWV4dGVybmFsKTsKLS0JCQkJCQlpZiAoYWZsYWcgPT0KLS0JCQkJCQkgICAgRE5TX1JEQVRBU0VUQVRUUl9BTlNXRVIpIHsKLSsJCQkJCQlpZiAoKHJkYXRhc2V0LT50eXBlICE9Ci0rCQkJCQkJICAgICBkbnNfcmRhdGF0eXBlX2NuYW1lKSB8fAotKwkJCQkJCSAgICAhZm91bmRfZG5hbWUgfHwKLSsJCQkJCQkgICAgKGFmbGFnID09Ci0rCQkJCQkJICAgICBETlNfUkRBVEFTRVRBVFRSX0FOU1dFUikpCi0rCQkJCQkJewotIAkJCQkJCQloYXZlX2Fuc3dlciA9IElTQ19UUlVFOwotKwkJCQkJCQlpZiAocmRhdGFzZXQtPnR5cGUgPT0KLSsJCQkJCQkJICAgIGRuc19yZGF0YXR5cGVfY25hbWUpCi0rCQkJCQkJCQljbmFtZSA9IG5hbWU7Ci0gCQkJCQkJCW5hbWUtPmF0dHJpYnV0ZXMgfD0KLS0JCQkJCQkJCUROU19OQU1FQVRUUl9BTlNXRVI7Ci0rCQkJCQkJCSAgICBETlNfTkFNRUFUVFJfQU5TV0VSOwotIAkJCQkJCX0KLSAJCQkJCQlyZGF0YXNldC0+YXR0cmlidXRlcyB8PSBhZmxhZzsKLSAJCQkJCQlpZiAoYWEpCi1AQCAtNjk4MiwxMSArNzAwMCwxMSBAQCBhbnN3ZXJfcmVzcG9uc2UoZmV0Y2hjdHhfdCAqZmN0eCkgewotIAkJCQkJcmV0dXJuIChETlNfUl9GT1JNRVJSKTsKLSAJCQkJfQotIAotLQkJCQlpZiAobmFtZXJlbG4gIT0gZG5zX25hbWVyZWxuX3N1YmRvbWFpbikgewotKwkJCQlpZiAoZG5hbWVyZWxuICE9IGRuc19uYW1lcmVsbl9zdWJkb21haW4pIHsKLSAJCQkJCWNoYXIgcWJ1ZltETlNfTkFNRV9GT1JNQVRTSVpFXTsKLSAJCQkJCWNoYXIgb2J1ZltETlNfTkFNRV9GT1JNQVRTSVpFXTsKLSAKLS0JCQkJCWRuc19uYW1lX2Zvcm1hdChxbmFtZSwgcWJ1ZiwKLSsJCQkJCWRuc19uYW1lX2Zvcm1hdChkcW5hbWUsIHFidWYsCi0gCQkJCQkJCXNpemVvZihxYnVmKSk7Ci0gCQkJCQlkbnNfbmFtZV9mb3JtYXQobmFtZSwgb2J1ZiwKLSAJCQkJCQkJc2l6ZW9mKG9idWYpKTsKLUBAIC03MDAxLDcgKzcwMTksNyBAQCBhbnN3ZXJfcmVzcG9uc2UoZmV0Y2hjdHhfdCAqZmN0eCkgewotIAkJCQkJd2FudF9jaGFpbmluZyA9IElTQ19UUlVFOwotIAkJCQkJUE9TVCh3YW50X2NoYWluaW5nKTsKLSAJCQkJCWFmbGFnID0gRE5TX1JEQVRBU0VUQVRUUl9BTlNXRVI7Ci0tCQkJCQlyZXN1bHQgPSBkbmFtZV90YXJnZXQocmRhdGFzZXQsIHFuYW1lLAotKwkJCQkJcmVzdWx0ID0gZG5hbWVfdGFyZ2V0KHJkYXRhc2V0LCBkcW5hbWUsCi0gCQkJCQkJCSAgICAgIG5sYWJlbHMsICZmZG5hbWUpOwotIAkJCQkJaWYgKHJlc3VsdCA9PSBJU0NfUl9OT1NQQUNFKSB7Ci0gCQkJCQkJLyoKLUBAIC03MDE4LDEwICs3MDM2LDEzIEBAIGFuc3dlcl9yZXNwb25zZShmZXRjaGN0eF90ICpmY3R4KSB7Ci0gCi0gCQkJCQlkbmFtZSA9IGRuc19maXhlZG5hbWVfbmFtZSgmZmRuYW1lKTsKLSAJCQkJCWlmICghaXNfYW5zd2VydGFyZ2V0X2FsbG93ZWQodmlldywKLS0JCQkJCQkJcW5hbWUsIHJkYXRhc2V0LT50eXBlLAotLQkJCQkJCQlkbmFtZSwgJmZjdHgtPmRvbWFpbikpIHsKLSsJCQkJCQkgICAgIGRxbmFtZSwgcmRhdGFzZXQtPnR5cGUsCi0rCQkJCQkJICAgICBkbmFtZSwgJmZjdHgtPmRvbWFpbikpCi0rCQkJCQl7Ci0gCQkJCQkJcmV0dXJuIChETlNfUl9TRVJWRkFJTCk7Ci0gCQkJCQl9Ci0rCQkJCQlkcW5hbWUgPSBkbnNfZml4ZWRuYW1lX25hbWUoJmZxZG5hbWUpOwotKwkJCQkJZG5zX25hbWVfY29weShkbmFtZSwgZHFuYW1lLCBOVUxMKTsKLSAJCQkJfSBlbHNlIHsKLSAJCQkJCS8qCi0gCQkJCQkgKiBXZSd2ZSBmb3VuZCBhIHNpZ25hdHVyZSB0aGF0Ci1AQCAtNzA0Niw2ICs3MDY3LDEwIEBAIGFuc3dlcl9yZXNwb25zZShmZXRjaGN0eF90ICpmY3R4KSB7Ci0gCQkJCQlJTlNJU1QoIWV4dGVybmFsKTsKLSAJCQkJCWlmIChhZmxhZyA9PSBETlNfUkRBVEFTRVRBVFRSX0FOU1dFUikgewotIAkJCQkJCWhhdmVfYW5zd2VyID0gSVNDX1RSVUU7Ci0rCQkJCQkJZm91bmRfZG5hbWUgPSBJU0NfVFJVRTsKLSsJCQkJCQlpZiAoY25hbWUgIT0gTlVMTCkKLSsJCQkJCQkJY25hbWUtPmF0dHJpYnV0ZXMgJj0KLSsJCQkJCQkJICAgfkROU19OQU1FQVRUUl9BTlNXRVI7Ci0gCQkJCQkJbmFtZS0+YXR0cmlidXRlcyB8PQotIAkJCQkJCQlETlNfTkFNRUFUVFJfQU5TV0VSOwotIAkJCQkJfQotLS0gCi0yLjcuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvYmluZC1jb25mZ2VuLWJ1aWxkLXVuaXguby1vbmNlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2JpbmQtY29uZmdlbi1idWlsZC11bml4Lm8tb25jZS5wYXRjaAppbmRleCAwOTZkNWQ4Li44YmM0ZWEzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvYmluZC1jb25mZ2VuLWJ1aWxkLXVuaXguby1vbmNlLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9iaW5kLWNvbmZnZW4tYnVpbGQtdW5peC5vLW9uY2UucGF0Y2gKQEAgLTE3LDI0ICsxNywyOCBAQAogVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAKIFNpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitVcGRhdGUgY29udGV4dCh0cmFpbGluZyB3aGl0ZXNwYWNlKSBmb3IgdmVyc2lvbiA5LjEwLjUtUDMuCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgogLS0tCiAgYmluL2NvbmZnZW4vTWFrZWZpbGUuaW4gfCAgICA0ICsrLS0KICAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvYmluL2NvbmZnZW4vTWFrZWZpbGUuaW4gYi9iaW4vY29uZmdlbi9NYWtlZmlsZS5pbgotaW5kZXggOGIzZTVhYS4uNDg2OGEyNCAxMDA2NDQKK2luZGV4IGRjYTI3MmYuLjAyYmVjY2UgMTAwNjQ0CiAtLS0gYS9iaW4vY29uZmdlbi9NYWtlZmlsZS5pbgogKysrIGIvYmluL2NvbmZnZW4vTWFrZWZpbGUuaW4KIEBAIC03NCwxMSArNzQsMTEgQEAgcm5kYy1jb25mZ2VuLkBPQDogcm5kYy1jb25mZ2VuLmMKICBkZG5zLWNvbmZnZW4uQE9AOiBkZG5zLWNvbmZnZW4uYwogIAkke0xJQlRPT0xfTU9ERV9DT01QSUxFfSAke0NDfSAke0FMTF9DRkxBR1N9IC1jICR7c3JjZGlyfS9kZG5zLWNvbmZnZW4uYwogIAotLXJuZGMtY29uZmdlbkBFWEVFWFRAOiBybmRjLWNvbmZnZW4uQE9AIHV0aWwuQE9AIGtleWdlbi5AT0AgJHtVT0JKU30gJHtDT05GREVQTElCU30gCistcm5kYy1jb25mZ2VuQEVYRUVYVEA6IHJuZGMtY29uZmdlbi5AT0AgdXRpbC5AT0Aga2V5Z2VuLkBPQCAke1VPQkpTfSAke0NPTkZERVBMSUJTfQogK3JuZGMtY29uZmdlbkBFWEVFWFRAOiBybmRjLWNvbmZnZW4uQE9AIHV0aWwuQE9AIGtleWdlbi5AT0AgJHtDT05GREVQTElCU30gJChTVUJESVJTKQogIAlleHBvcnQgQkFTRU9CSlM9InJuZGMtY29uZmdlbi5AT0AgdXRpbC5AT0Aga2V5Z2VuLkBPQCAke1VPQkpTfSI7IFwKICAJJHtGSU5BTEJVSUxEQ01EfQogIAotLWRkbnMtY29uZmdlbkBFWEVFWFRAOiBkZG5zLWNvbmZnZW4uQE9AIHV0aWwuQE9AIGtleWdlbi5AT0AgJHtVT0JKU30gJHtDT05GREVQTElCU30gCistZGRucy1jb25mZ2VuQEVYRUVYVEA6IGRkbnMtY29uZmdlbi5AT0AgdXRpbC5AT0Aga2V5Z2VuLkBPQCAke1VPQkpTfSAke0NPTkZERVBMSUJTfQogK2RkbnMtY29uZmdlbkBFWEVFWFRAOiBkZG5zLWNvbmZnZW4uQE9AIHV0aWwuQE9AIGtleWdlbi5AT0AgJHtDT05GREVQTElCU30gJChTVUJESVJTKQogIAlleHBvcnQgQkFTRU9CSlM9ImRkbnMtY29uZmdlbi5AT0AgdXRpbC5AT0Aga2V5Z2VuLkBPQCAke1VPQkpTfSI7IFwKICAJJHtGSU5BTEJVSUxEQ01EfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2dlbmVyYXRlLXJuZGMta2V5LnNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2dlbmVyYXRlLXJuZGMta2V5LnNoCmluZGV4IGRiMjAxMjcuLmVmOTE1YzAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9nZW5lcmF0ZS1ybmRjLWtleS5zaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvZ2VuZXJhdGUtcm5kYy1rZXkuc2gKQEAgLTMsNSArMyw2IEBACiBpZiBbICEgLXMgL2V0Yy9iaW5kL3JuZGMua2V5IF07IHRoZW4KICAgICBlY2hvIC1uICJHZW5lcmF0aW5nIC9ldGMvYmluZC9ybmRjLmtleToiCiAgICAgL3Vzci9zYmluL3JuZGMtY29uZmdlbiAtYSAtYiA1MTIgLXIgL2Rldi91cmFuZG9tCisgICAgY2hvd24gcm9vdDpiaW5kIC9ldGMvYmluZC9ybmRjLmtleQogICAgIGNobW9kIDA2NDAgL2V0Yy9iaW5kL3JuZGMua2V5CiBmaQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL21pcHMxLW5vdC1zdXBwb3J0LW9wY29kZS5kaWZmIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL21pcHMxLW5vdC1zdXBwb3J0LW9wY29kZS5kaWZmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTMwNzk2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9taXBzMS1ub3Qtc3VwcG9ydC1vcGNvZGUuZGlmZgorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi1iaW5kOiBwb3J0IGEgcGF0Y2ggdG8gZml4IGEgYnVpbGQgZmFpbHVyZQotCi1taXBzMSBkb2VzIG5vdCBzdXBwb3J0IGxsIGFuZCBzYyBpbnN0cnVjdGlvbnMsIGFuZCBsZWFkIHRvIGJlbG93IGVycm9yLCBub3cKLXdlIHBvcnQgYSBwYXRjaCBmcm9tIGRlYmlhbiB0byBmaXggaXQKLVtodHRwOi8vc2VjdXJpdHkuZGViaWFuLm9yZy9kZWJpYW4tc2VjdXJpdHkvcG9vbC91cGRhdGVzL21haW4vYi9iaW5kOS9iaW5kOV85LjguNC5kZnNnLlAxLTYrbm11MitkZWI3dTEuZGlmZi5nel0KLQotfCB7c3RhbmRhcmQgaW5wdXR9OiBBc3NlbWJsZXIgbWVzc2FnZXM6Ci18IHtzdGFuZGFyZCBpbnB1dH06NDc6IEVycm9yOiBPcGNvZGUgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHByb2Nlc3NvcjogbWlwczEgKG1pcHMxKSBgbGwgJDMsMCgkNiknCi18IHtzdGFuZGFyZCBpbnB1dH06NTA6IEVycm9yOiBPcGNvZGUgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHByb2Nlc3NvcjogbWlwczEgKG1pcHMxKSBgc2MgJDMsMCgkNiknCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+Ci0KLS0tLSBiaW5kOS05LjguNC5kZnNnLlAxLm9yaWcvbGliL2lzYy9taXBzL2luY2x1ZGUvaXNjL2F0b21pYy5oCi0rKysgYmluZDktOS44LjQuZGZzZy5QMS9saWIvaXNjL21pcHMvaW5jbHVkZS9pc2MvYXRvbWljLmgKLUBAIC0zMSwxOCArMzEsMjAgQEAKLSBpc2NfYXRvbWljX3hhZGQoaXNjX2ludDMyX3QgKnAsIGludCB2YWwpIHsKLSAJaXNjX2ludDMyX3Qgb3JpZzsKLSAKLS0JLyogYWRkIGlzIGEgY2hlYXQsIHNpbmNlIE1JUFMgaGFzIG5vIG1vdiBpbnN0cnVjdGlvbiAqLwotLQlfX2FzbV9fIHZvbGF0aWxlICgKLS0JICAgICIxOiIKLS0JICAgICJsbCAkMywgJTFcbiIKLS0JICAgICJhZGQgJTAsICQwLCAkM1xuIgotLQkgICAgImFkZCAkMywgJDMsICUyXG4iCi0tCSAgICAic2MgJDMsICUxXG4iCi0tCSAgICAiYmVxICQzLCAwLCAxYiIKLS0JICAgIDogIj0mciIob3JpZykKLS0JICAgIDogIm0iKCpwKSwgInIiKHZhbCkKLS0JICAgIDogIm1lbW9yeSIsICIkMyIKLS0JCSk7Ci0rCV9fYXNtX18gX192b2xhdGlsZV9fICgKLSsJIgkuc2V0CXB1c2gJCVxuIgotKwkiCS5zZXQJbWlwczIJCVxuIgotKwkiCS5zZXQJbm9yZW9yZGVyCVxuIgotKwkiCS5zZXQJbm9hdAkJXG4iCi0rCSIxOglsbAkkMSwgJTEJCVxuIgotKwkiCWFkZHUJJTAsICQxLCAlMglcbiIKLSsJIglzYwklMCwgJTEJCVxuIgotKwkiCWJlcXoJJTAsIDFiCQlcbiIKLSsJIgltb3ZlCSUwLCAkMQkJXG4iCi0rCSIJLnNldAlwb3AJCVxuIgotKwk6ICI9JnIiIChvcmlnKSwgIitSIiAoKnApCi0rCTogInIiICh2YWwpCi0rCTogIm1lbW9yeSIpOwotIAotIAlyZXR1cm4gKG9yaWcpOwotIH0KLUBAIC01MiwxNiArNTQsNyBAQAotICAqLwotIHN0YXRpYyBpbmxpbmUgdm9pZAotIGlzY19hdG9taWNfc3RvcmUoaXNjX2ludDMyX3QgKnAsIGlzY19pbnQzMl90IHZhbCkgewotLQlfX2FzbV9fIHZvbGF0aWxlICgKLS0JICAgICIxOiIKLS0JICAgICJsbCAkMywgJTBcbiIKLS0JICAgICJhZGQgJDMsICQwLCAlMVxuIgotLQkgICAgInNjICQzLCAlMFxuIgotLQkgICAgImJlcSAkMywgMCwgMWIiCi0tCSAgICA6Ci0tCSAgICA6ICJtIigqcCksICJyIih2YWwpCi0tCSAgICA6ICJtZW1vcnkiLCAiJDMiCi0tCQkpOwotKwkqcCA9IHZhbDsKLSB9Ci0gCi0gLyoKLUBAIC03MiwyMCArNjUsMjMgQEAKLSBzdGF0aWMgaW5saW5lIGlzY19pbnQzMl90Ci0gaXNjX2F0b21pY19jbXB4Y2hnKGlzY19pbnQzMl90ICpwLCBpbnQgY21wdmFsLCBpbnQgdmFsKSB7Ci0gCWlzY19pbnQzMl90IG9yaWc7Ci0rCWlzY19pbnQzMl90IHRtcDsKLSAKLS0JX19hc21fXyB2b2xhdGlsZSgKLS0JICAgICIxOiIKLS0JICAgICJsbCAkMywgJTFcbiIKLS0JICAgICJhZGQgJTAsICQwLCAkM1xuIgotLQkgICAgImJuZSAkMywgJTIsIDJmXG4iCi0tCSAgICAiYWRkICQzLCAkMCwgJTNcbiIKLS0JICAgICJzYyAkMywgJTFcbiIKLS0JICAgICJiZXEgJDMsIDAsIDFiXG4iCi0tCSAgICAiMjoiCi0tCSAgICA6ICI9JnIiKG9yaWcpCi0tCSAgICA6ICJtIigqcCksICJyIihjbXB2YWwpLCAiciIodmFsKQotLQkgICAgOiAibWVtb3J5IiwgIiQzIgotLQkJKTsKLSsJX19hc21fXyBfX3ZvbGF0aWxlX18gKAotKwkiCS5zZXQJcHVzaAkJXG4iCi0rCSIJLnNldAltaXBzMgkJXG4iCi0rCSIJLnNldAlub3Jlb3JkZXIJXG4iCi0rCSIJLnNldAlub2F0CQlcbiIKLSsJIjE6CWxsCSQxLCAlMQkJXG4iCi0rCSIJYm5lCSQxLCAlMywgMmYJXG4iCi0rCSIJbW92ZQklMiwgJTQJCVxuIgotKwkiCXNjCSUyLCAlMQkJXG4iCi0rCSIJYmVxegklMiwgMWIJCVxuIgotKwkiMjoJbW92ZQklMCwgJDEJCVxuIgotKwkiCS5zZXQJcG9wCQlcbiIKLSsJOiAiPSZyIihvcmlnKSwgIitSIiAoKnApLCAiPXIiICh0bXApCi0rCTogInIiKGNtcHZhbCksICJyIih2YWwpCi0rCTogIm1lbW9yeSIpOwotIAotIAlyZXR1cm4gKG9yaWcpOwotIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC91c2UtcHl0aG9uMy1hbmQtZml4LWluc3RhbGwtbGliLXBhdGgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvdXNlLXB5dGhvbjMtYW5kLWZpeC1pbnN0YWxsLWxpYi1wYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MjlmMTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvdXNlLXB5dGhvbjMtYW5kLWZpeC1pbnN0YWxsLWxpYi1wYXRoLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK1VzZSBweXRob24zIHJhdGhlciBkZWZhdWx0IHB5dGhvbiB3aGljaCBtYXliZSBsaW5rcyB0byBweXRob24yIGZvciBvZS4gQW5kIGFkZAorb3B0aW9uIGZvciBzZXR1cC5weSB0byBpbnN0YWxsIGZpbGVzIHRvIHJpZ2h0IGRpcmVjdG9yeS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KK2RpZmYgLS1naXQgYS9iaW4vcHl0aG9uL01ha2VmaWxlLmluIGIvYmluL3B5dGhvbi9NYWtlZmlsZS5pbgoraW5kZXggYTQzYTNjMS4uMmU3MjdmMiAxMDA2NDQKKy0tLSBhL2Jpbi9weXRob24vTWFrZWZpbGUuaW4KKysrKyBiL2Jpbi9weXRob24vTWFrZWZpbGUuaW4KK0BAIC01NSw5ICs1NSw5IEBAIGluc3RhbGw6OiAke1RBUkdFVFN9IGluc3RhbGxkaXJzCisgCSR7SU5TVEFMTF9EQVRBfSAke3NyY2Rpcn0vZG5zc2VjLWNvdmVyYWdlLjggJHtERVNURElSfSR7bWFuZGlyfS9tYW44CisgCWlmIHRlc3QgLW4gIiR7UFlUSE9OfSIgOyB0aGVuIFwKKyAJCWlmIHRlc3QgLW4gIiR7REVTVERJUn0iIDsgdGhlbiBcCistCQkJJHtQWVRIT059ICR7c3JjZGlyfS9zZXR1cC5weSBpbnN0YWxsIC0tcm9vdD0ke0RFU1RESVJ9IC0tcHJlZml4PSR7cHJlZml4fSA7IFwKKysJCQkke1BZVEhPTn0gJHtzcmNkaXJ9L3NldHVwLnB5IGluc3RhbGwgLS1yb290PSR7REVTVERJUn0gLS1wcmVmaXg9JHtwcmVmaXh9IC0taW5zdGFsbC1saWI9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gOyBcCisgCQllbHNlIFwKKy0JCQkke1BZVEhPTn0gJHtzcmNkaXJ9L3NldHVwLnB5IGluc3RhbGwgLS1wcmVmaXg9JHtwcmVmaXh9IDsgXAorKwkJCSR7UFlUSE9OfSAke3NyY2Rpcn0vc2V0dXAucHkgaW5zdGFsbCAtLXByZWZpeD0ke3ByZWZpeH0gLS1pbnN0YWxsLWxpYj0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSA7IFwKKyAJCWZpIFwKKyAJZmkKKyAKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IDMxNGJiOTAuLjg2NzkyM2UgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTIyNyw3ICsyMjcsNyBAQCBBQ19BUkdfV0lUSChweXRob24sCisgWyAgLS13aXRoLXB5dGhvbj1QQVRIICAgICAgc3BlY2lmeSBwYXRoIHRvIHB5dGhvbiBpbnRlcnByZXRlcl0sCisgICAgIHVzZV9weXRob249IiR3aXRodmFsIiwgdXNlX3B5dGhvbj0idW5zcGVjIikKKyAKKy1weXRob249InB5dGhvbiBweXRob24zIHB5dGhvbjMuNSBweXRob24zLjQgcHl0aG9uMy4zIHB5dGhvbjMuMiBweXRob24yIHB5dGhvbjIuNyIKKytweXRob249InB5dGhvbjMgcHl0aG9uMy41IHB5dGhvbjMuNCBweXRob24zLjMgcHl0aG9uMy4yIHB5dGhvbjIgcHl0aG9uMi43IgorIAorIHRlc3RhcmdwYXJzZT0ndHJ5OiBpbXBvcnQgYXJncGFyc2UKKyBleGNlcHQ6IGV4aXQoMSknCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmRfOS4xMC4zLVAzLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kXzkuMTAuMy1QMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgwMjI3NC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmRfOS4xMC4zLVAzLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLVNVTU1BUlkgPSAiSVNDIEludGVybmV0IERvbWFpbiBOYW1lIFNlcnZlciIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuaXNjLm9yZy9zdy9iaW5kLyIKLVNFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgotCi1MSUNFTlNFID0gIklTQyAmIEJTRCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlSSUdIVDttZDU9MGE5NWY1MmEwYWI2YzVmNTJkZWRjOWE0NWU3YWJiM2YiCi0KLURFUEVORFMgPSAib3BlbnNzbCBsaWJjYXAiCi0KLVNSQ19VUkkgPSAiZnRwOi8vZnRwLmlzYy5vcmcvaXNjL2JpbmQ5LyR7UFZ9LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vY29uZi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9tYWtlLWV0Yy1pbml0ZC1iaW5kLXN0b3Atd29yay5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9taXBzMS1ub3Qtc3VwcG9ydC1vcGNvZGUuZGlmZiBcCi0gICAgICAgICAgIGZpbGU6Ly9kb250LXRlc3Qtb24taG9zdC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9nZW5lcmF0ZS1ybmRjLWtleS5zaCBcCi0gICAgICAgICAgIGZpbGU6Ly9uYW1lZC5zZXJ2aWNlIFwKLSAgICAgICAgICAgZmlsZTovL2JpbmQ5IFwKLSAgICAgICAgICAgZmlsZTovL2luaXQuZC1hZGQtc3VwcG9ydC1mb3ItcmVhZC1vbmx5LXJvb3Rmcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9iaW5kLWNvbmZnZW4tYnVpbGQtdW5peC5vLW9uY2UucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1idWlsZC11c2UtcGtnLWNvbmZpZy10by1maW5kLWxpYnhtbDIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vYmluZC1lbnN1cmUtc2VhcmNoaW5nLWZvci1qc29uLWhlYWRlcnMtc2VhcmNoZXMtc3lzci5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWdlbi5jLWV4dGVuZC1ESVJOQU1FU0laRS1mcm9tLTI1Ni10by01MTIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1saWItZG5zLWdlbi5jLWZpeC10b28tbG9uZy1lcnJvci5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi0xMjg1LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL0NWRS0yMDE2LTEyODZfMS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi0xMjg2XzIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTYtMjA4OC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi0yNzc1LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL0NWRS0yMDE2LTI3NzYucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTYtODg2NC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi02MTcwLnBhdGNoIFwKLSAgICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiYmNmN2U3NzJiNjE2ZjcyNTk0MjBhM2VkYzVkZjM1MGEiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjkwODEwZDFmYmI3MmFmYTYyOWU3NDYzOGQxOWNkNDRlMjhkMmIyZTVlYjYzZjU1YzcwNWFkODVkMWE0Y2I4MyIKLQotRU5BQkxFX0lQVjYgPSAiLS1lbmFibGUtaXB2Nj0ke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAneWVzJywgJ25vJywgZCl9IgotRVhUUkFfT0VDT05GID0gIiAke0VOQUJMRV9JUFY2fSAtLXdpdGgtcmFuZG9tZGV2PS9kZXYvcmFuZG9tIC0tZGlzYWJsZS10aHJlYWRzIFwKLSAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWRldnBvbGwgLS1kaXNhYmxlLWVwb2xsIC0td2l0aC1nb3N0PW5vIFwKLSAgICAgICAgICAgICAgICAgLS13aXRoLWdzc2FwaT1ubyAtLXdpdGgtZWNkc2E9eWVzIFwKLSAgICAgICAgICAgICAgICAgLS1zeXNjb25mZGlyPSR7c3lzY29uZmRpcn0vYmluZCBcCi0gICAgICAgICAgICAgICAgIC0td2l0aC1vcGVuc3NsPSR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKLSAgICAgICAgICAgICAgICIKLWluaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1yYy5kIHN5c3RlbWQgdXNlcmFkZCBwa2djb25maWcKLQotIyBQQUNLQUdFQ09ORklHcyByZWFkbGluZSBhbmQgbGliZWRpdCBzaG91bGQgTk9UIGJlIHNldCBhdCBzYW1lIHRpbWUKLVBBQ0tBR0VDT05GSUcgPz0gInJlYWRsaW5lIgotUEFDS0FHRUNPTkZJR1todHRwc3RhdHNdID0gIi0td2l0aC1saWJ4bWwyLC0td2l0aG91dC1saWJ4bWwyLGxpYnhtbDIiCi1QQUNLQUdFQ09ORklHW3JlYWRsaW5lXSA9ICItLXdpdGgtcmVhZGxpbmU9LWxyZWFkbGluZSwscmVhZGxpbmUiCi1QQUNLQUdFQ09ORklHW2xpYmVkaXRdID0gIi0td2l0aC1yZWFkbGluZT0tbGVkaXQsLGxpYmVkaXQiCi0KLVVTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCi1VU0VSQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIC0taG9tZSAke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL2JpbmQgLS1uby1jcmVhdGUtaG9tZSBcCi0gICAgICAgICAgICAgICAgICAgICAgIC0tdXNlci1ncm91cCBiaW5kIgotCi1JTklUU0NSSVBUX05BTUUgPSAiYmluZCIKLUlOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIgotCi1TWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAibmFtZWQuc2VydmljZSIKLQotUEFSQUxMRUxfTUFLRSA9ICIiCi0KLVJERVBFTkRTXyR7UE59ID0gInB5dGhvbjMtY29yZSIKLVJERVBFTkRTXyR7UE59LWRldiA9ICIiCi0KLVBBQ0tBR0VfQkVGT1JFX1BOICs9ICIke1BOfS11dGlscyIKLUZJTEVTXyR7UE59LXV0aWxzID0gIiR7YmluZGlyfS9ob3N0ICR7YmluZGlyfS9kaWciCi1GSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9pc2MtY29uZmlnLmgiCi1GSUxFU18ke1BOfSArPSAiJHtzYmluZGlyfS9nZW5lcmF0ZS1ybmRjLWtleS5zaCIKLQotZG9faW5zdGFsbF9wcmVwZW5kKCkgewotCSMgY2xlYW4gaG9zdCBwYXRoIGluIGlzYy1jb25maWcuc2ggYmVmb3JlIHRoZSBoYXJkbGluayBjcmVhdGVkCi0JIyBieSAibWFrZSBpbnN0YWxsIjoKLQkjICAgYmluZDktY29uZmlnIC0+IGlzYy1jb25maWcuc2gKLQlzZWQgLWkgLWUgInMsJHtTVEFHSU5HX0xJQkRJUn0sJHtsaWJkaXJ9LCIgJHtCfS9pc2MtY29uZmlnLnNoCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCXJtICIke0R9JHtiaW5kaXJ9L25zbG9va3VwIgotCXJtICIke0R9JHttYW5kaXJ9L21hbjEvbnNsb29rdXAuMSIKLQlybWRpciAiJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuIgotCXJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICIke0R9JHtsb2NhbHN0YXRlZGlyfSIKLQlpbnN0YWxsIC1kIC1vIGJpbmQgIiR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL2JpbmQiCi0JaW5zdGFsbCAtZCAiJHtEfSR7c3lzY29uZmRpcn0vYmluZCIKLQlpbnN0YWxsIC1kICIke0R9JHtzeXNjb25mZGlyfS9pbml0LmQiCi0JaW5zdGFsbCAtbSA2NDQgJHtTfS9jb25mLyogIiR7RH0ke3N5c2NvbmZkaXJ9L2JpbmQvIgotCWluc3RhbGwgLW0gNzU1ICIke1N9L2luaXQuZCIgIiR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9iaW5kIgotCXNlZCAtaSAtZSAnMXMsIyEuKnB5dGhvbjMsIyEgL3Vzci9iaW4vcHl0aG9uMywnICR7RH0ke3NiaW5kaXJ9L2Ruc3NlYy1jb3ZlcmFnZSAke0R9JHtzYmluZGlyfS9kbnNzZWMtY2hlY2tkcwotCi0JIyBJbnN0YWxsIHN5c3RlbWQgcmVsYXRlZCBmaWxlcwotCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KLQlpbnN0YWxsIC1tIDc1NSAke1dPUktESVJ9L2dlbmVyYXRlLXJuZGMta2V5LnNoICR7RH0ke3NiaW5kaXJ9Ci0JaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQotCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L25hbWVkLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KLQlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCi0JICAgICAgIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKLQkgICAgICAgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbmFtZWQuc2VydmljZQotCi0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0Ci0JaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vYmluZDkgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdAotfQotCi1DT05GRklMRVNfJHtQTn0gPSAiIFwKLQkke3N5c2NvbmZkaXJ9L2JpbmQvbmFtZWQuY29uZiBcCi0JJHtzeXNjb25mZGlyfS9iaW5kL25hbWVkLmNvbmYubG9jYWwgXAotCSR7c3lzY29uZmRpcn0vYmluZC9uYW1lZC5jb25mLm9wdGlvbnMgXAotCSR7c3lzY29uZmRpcn0vYmluZC9kYi4wIFwKLQkke3N5c2NvbmZkaXJ9L2JpbmQvZGIuMTI3IFwKLQkke3N5c2NvbmZkaXJ9L2JpbmQvZGIuZW1wdHkgXAotCSR7c3lzY29uZmRpcn0vYmluZC9kYi5sb2NhbCBcCi0JJHtzeXNjb25mZGlyfS9iaW5kL2RiLnJvb3QgXAotCSIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kXzkuMTAuNS1QMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZF85LjEwLjUtUDMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM3MjRhOAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZF85LjEwLjUtUDMuYmIKQEAgLTAsMCArMSwxMTkgQEAKK1NVTU1BUlkgPSAiSVNDIEludGVybmV0IERvbWFpbiBOYW1lIFNlcnZlciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaXNjLm9yZy9zdy9iaW5kLyIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorCitMSUNFTlNFID0gIklTQyAmIEJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlSSUdIVDttZDU9ZGJhNDY1MDc0NDYxOTgxMTliY2RlMzJhNGZlYWFiNDMiCisKK0RFUEVORFMgPSAib3BlbnNzbCBsaWJjYXAiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9mdHAuaXNjLm9yZy9pc2MvYmluZDkvJHtQVn0vJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25mLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21ha2UtZXRjLWluaXRkLWJpbmQtc3RvcC13b3JrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RvbnQtdGVzdC1vbi1ob3N0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dlbmVyYXRlLXJuZGMta2V5LnNoIFwKKyAgICAgICAgICAgZmlsZTovL25hbWVkLnNlcnZpY2UgXAorICAgICAgICAgICBmaWxlOi8vYmluZDkgXAorICAgICAgICAgICBmaWxlOi8vaW5pdC5kLWFkZC1zdXBwb3J0LWZvci1yZWFkLW9ubHktcm9vdGZzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2JpbmQtY29uZmdlbi1idWlsZC11bml4Lm8tb25jZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWJ1aWxkLXVzZS1wa2ctY29uZmlnLXRvLWZpbmQtbGlieG1sMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9iaW5kLWVuc3VyZS1zZWFyY2hpbmctZm9yLWpzb24taGVhZGVycy1zZWFyY2hlcy1zeXNyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZ2VuLmMtZXh0ZW5kLURJUk5BTUVTSVpFLWZyb20tMjU2LXRvLTUxMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWxpYi1kbnMtZ2VuLmMtZml4LXRvby1sb25nLWVycm9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VzZS1weXRob24zLWFuZC1maXgtaW5zdGFsbC1saWItcGF0aC5wYXRjaCBcCisgICAgICAgICAgICIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vZnRwLmlzYy5vcmcvaXNjL2JpbmQ5LyIKK1VQU1RSRUFNX0NIRUNLX1JFR0VYID0gIig/UDxwdmVyPjkoXC5cZCspKygtUFxkKykqKS8iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkNzljYWZiZDlhYzc2MjM5ZWU1MzJkZDg5ZDA1Y2M4MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZDdlOTZiNWIwYmJhYzdiOTAwZDRjNGJiYjgyZTA5NTZiNGU1MDk0MzNjNWZhMzkyYmI3MmE5MjliOTY2MDZhIgorCitFTkFCTEVfSVBWNiA9ICItLWVuYWJsZS1pcHY2PSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICd5ZXMnLCAnbm8nLCBkKX0iCitFWFRSQV9PRUNPTkYgPSAiICR7RU5BQkxFX0lQVjZ9IC0td2l0aC1saWJ0b29sIC0tZW5hYmxlLXRocmVhZHMgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtZGV2cG9sbCAtLWVuYWJsZS1lcG9sbCAtLXdpdGgtZ29zdD1ubyBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1nc3NhcGk9bm8gLS13aXRoLWVjZHNhPXllcyBcCisgICAgICAgICAgICAgICAgIC0tc3lzY29uZmRpcj0ke3N5c2NvbmZkaXJ9L2JpbmQgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtb3BlbnNzbD0ke1NUQUdJTkdfTElCRElSfS8uLiBcCisgICAgICAgICAgICAgICAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1yYy5kIHN5c3RlbWQgdXNlcmFkZCBwa2djb25maWcgcHl0aG9uMy1kaXIKKworZXhwb3J0IFBZVEhPTl9TSVRFUEFDS0FHRVNfRElSCisKKyMgUEFDS0FHRUNPTkZJR3MgcmVhZGxpbmUgYW5kIGxpYmVkaXQgc2hvdWxkIE5PVCBiZSBzZXQgYXQgc2FtZSB0aW1lCitQQUNLQUdFQ09ORklHID89ICJyZWFkbGluZSIKK1BBQ0tBR0VDT05GSUdbaHR0cHN0YXRzXSA9ICItLXdpdGgtbGlieG1sMiwtLXdpdGhvdXQtbGlieG1sMixsaWJ4bWwyIgorUEFDS0FHRUNPTkZJR1tyZWFkbGluZV0gPSAiLS13aXRoLXJlYWRsaW5lPS1scmVhZGxpbmUsLHJlYWRsaW5lIgorUEFDS0FHRUNPTkZJR1tsaWJlZGl0XSA9ICItLXdpdGgtcmVhZGxpbmU9LWxlZGl0LCxsaWJlZGl0IgorUEFDS0FHRUNPTkZJR1t1cmFuZG9tXSA9ICItLXdpdGgtcmFuZG9tZGV2PS9kZXYvdXJhbmRvbSwtLXdpdGgtcmFuZG9tZGV2PS9kZXYvcmFuZG9tLCwiCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitVU0VSQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIC0taG9tZSAke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL2JpbmQgLS1uby1jcmVhdGUtaG9tZSBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tdXNlci1ncm91cCBiaW5kIgorCitJTklUU0NSSVBUX05BTUUgPSAiYmluZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAibmFtZWQuc2VydmljZSIKKworUEFSQUxMRUxfTUFLRSA9ICIiCisKK1JERVBFTkRTXyR7UE59ID0gInB5dGhvbjMtY29yZSIKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCisKK1BBQ0tBR0VfQkVGT1JFX1BOICs9ICIke1BOfS11dGlscyIKK0ZJTEVTXyR7UE59LXV0aWxzID0gIiR7YmluZGlyfS9ob3N0ICR7YmluZGlyfS9kaWciCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9pc2MtY29uZmlnLmgiCitGSUxFU18ke1BOfSArPSAiJHtzYmluZGlyfS9nZW5lcmF0ZS1ybmRjLWtleS5zaCAke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSIKKworZG9faW5zdGFsbF9wcmVwZW5kKCkgeworCSMgY2xlYW4gaG9zdCBwYXRoIGluIGlzYy1jb25maWcuc2ggYmVmb3JlIHRoZSBoYXJkbGluayBjcmVhdGVkCisJIyBieSAibWFrZSBpbnN0YWxsIjoKKwkjICAgYmluZDktY29uZmlnIC0+IGlzYy1jb25maWcuc2gKKwlzZWQgLWkgLWUgInMsJHtTVEFHSU5HX0xJQkRJUn0sJHtsaWJkaXJ9LCIgJHtCfS9pc2MtY29uZmlnLnNoCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtICIke0R9JHtiaW5kaXJ9L25zbG9va3VwIgorCXJtICIke0R9JHttYW5kaXJ9L21hbjEvbnNsb29rdXAuMSIKKwlybWRpciAiJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuIgorCXJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICIke0R9JHtsb2NhbHN0YXRlZGlyfSIKKwlpbnN0YWxsIC1kIC1vIGJpbmQgIiR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL2JpbmQiCisJaW5zdGFsbCAtZCAiJHtEfSR7c3lzY29uZmRpcn0vYmluZCIKKwlpbnN0YWxsIC1kICIke0R9JHtzeXNjb25mZGlyfS9pbml0LmQiCisJaW5zdGFsbCAtbSA2NDQgJHtTfS9jb25mLyogIiR7RH0ke3N5c2NvbmZkaXJ9L2JpbmQvIgorCWluc3RhbGwgLW0gNzU1ICIke1N9L2luaXQuZCIgIiR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9iaW5kIgorCXNlZCAtaSAtZSAnMXMsIyEuKnB5dGhvbjMsIyEgL3Vzci9iaW4vcHl0aG9uMywnICR7RH0ke3NiaW5kaXJ9L2Ruc3NlYy1jb3ZlcmFnZSAke0R9JHtzYmluZGlyfS9kbnNzZWMtY2hlY2tkcworCisJIyBJbnN0YWxsIHN5c3RlbWQgcmVsYXRlZCBmaWxlcworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDc1NSAke1dPUktESVJ9L2dlbmVyYXRlLXJuZGMta2V5LnNoICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L25hbWVkLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJICAgICAgIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkgICAgICAgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbmFtZWQuc2VydmljZQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0CisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vYmluZDkgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdAorCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kCisJCWVjaG8gImQgL3J1bi9uYW1lZCAwNzU1IGJpbmQgYmluZCAtIC0iID4gJHtEfSR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZC9iaW5kLmNvbmYKKwlmaQorCisgICAgcm0gLWYgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2lzYy8qLnB5YworfQorCitDT05GRklMRVNfJHtQTn0gPSAiIFwKKwkke3N5c2NvbmZkaXJ9L2JpbmQvbmFtZWQuY29uZiBcCisJJHtzeXNjb25mZGlyfS9iaW5kL25hbWVkLmNvbmYubG9jYWwgXAorCSR7c3lzY29uZmRpcn0vYmluZC9uYW1lZC5jb25mLm9wdGlvbnMgXAorCSR7c3lzY29uZmRpcn0vYmluZC9kYi4wIFwKKwkke3N5c2NvbmZkaXJ9L2JpbmQvZGIuMTI3IFwKKwkke3N5c2NvbmZkaXJ9L2JpbmQvZGIuZW1wdHkgXAorCSR7c3lzY29uZmRpcn0vYmluZC9kYi5sb2NhbCBcCisJJHtzeXNjb25mZGlyfS9iaW5kL2RiLnJvb3QgXAorCSIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NS5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1LmluYwppbmRleCA4ODI4NzNhLi4xODA3YWE3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1LmluYwpAQCAtNiwxNiArNiw0MSBAQAogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTJmODg0ZDJhZTFmZjg3YzA5ZTViN2NjYzJjNGNhN2UgXAogICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWZiNTA0YjY3YzUwMzMxZmM3ODczNGZlZDkwZmIwZTA5IFwKICAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9tYWluLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yNDttZDU9OWJjNTRiOTNjZDdlMTdiZjAzZjUyNTEzZjM5ZjkyNmUiCi1ERVBFTkRTID0gInVkZXYgbGlidXNiIGRidXMtZ2xpYiBnbGliLTIuMCBsaWJjaGVjayIKK0RFUEVORFMgPSAidWRldiBkYnVzLWdsaWIgZ2xpYi0yLjAgbGliY2hlY2siCiBQUk9WSURFUyArPSAiYmx1ZXotaGNpZHVtcCIKIFJQUk9WSURFU18ke1BOfSArPSAiYmx1ZXotaGNpZHVtcCIKIAogUkNPTkZMSUNUU18ke1BOfSA9ICJibHVlejQiCiAKLVBBQ0tBR0VDT05GSUcgPz89ICJvYmV4LXByb2ZpbGVzIHJlYWRsaW5lIgorUEFDS0FHRUNPTkZJRyA/Pz0gIm9iZXgtcHJvZmlsZXMgXAorICAgIHJlYWRsaW5lIFwKKyAgICAke0BiYi51dGlscy5maWx0ZXIoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgZCl9IFwKKyAgICBhMmRwLXByb2ZpbGVzIFwKKyAgICBhdnJjcC1wcm9maWxlcyBcCisgICAgbmV0d29yay1wcm9maWxlcyBcCisgICAgaGlkLXByb2ZpbGVzIFwKKyAgICBob2ctcHJvZmlsZXMgXAorICAgIHRvb2xzIFwKKyAgICBkZXByZWNhdGVkIFwKKyIKIFBBQ0tBR0VDT05GSUdbb2JleC1wcm9maWxlc10gPSAiLS1lbmFibGUtb2JleCwtLWRpc2FibGUtb2JleCxsaWJpY2FsIgotUEFDS0FHRUNPTkZJR1tleHBlcmltZW50YWxdID0gIi0tZW5hYmxlLWV4cGVyaW1lbnRhbCwtLWRpc2FibGUtZXhwZXJpbWVudGFsLCIKIFBBQ0tBR0VDT05GSUdbcmVhZGxpbmVdID0gIi0tZW5hYmxlLWNsaWVudCwtLWRpc2FibGUtY2xpZW50LHJlYWRsaW5lLCIKK1BBQ0tBR0VDT05GSUdbdGVzdGluZ10gPSAiLS1lbmFibGUtdGVzdGluZywtLWRpc2FibGUtdGVzdGluZyIKK1BBQ0tBR0VDT05GSUdbbWlkaV0gPSAiLS1lbmFibGUtbWlkaSwtLWRpc2FibGUtbWlkaSxhbHNhLWxpYiIKK1BBQ0tBR0VDT05GSUdbc3lzdGVtZF0gPSAiLS1lbmFibGUtc3lzdGVtZCwtLWRpc2FibGUtc3lzdGVtZCIKK1BBQ0tBR0VDT05GSUdbY3Vwc10gPSAiLS1lbmFibGUtY3VwcywtLWRpc2FibGUtY3VwcywsY3VwcyIKK1BBQ0tBR0VDT05GSUdbbmZjXSA9ICItLWVuYWJsZS1uZmMsLS1kaXNhYmxlLW5mYyIKK1BBQ0tBR0VDT05GSUdbc2FwLXByb2ZpbGVzXSA9ICItLWVuYWJsZS1zYXAsLS1kaXNhYmxlLXNhcCIKK1BBQ0tBR0VDT05GSUdbYTJkcC1wcm9maWxlc10gPSAiLS1lbmFibGUtYTJkcCwtLWRpc2FibGUtYTJkcCIKK1BBQ0tBR0VDT05GSUdbYXZyY3AtcHJvZmlsZXNdID0gIi0tZW5hYmxlLWF2cmNwLC0tZGlzYWJsZS1hdnJjcCIKK1BBQ0tBR0VDT05GSUdbbmV0d29yay1wcm9maWxlc10gPSAiLS1lbmFibGUtbmV0d29yaywtLWRpc2FibGUtbmV0d29yayIKK1BBQ0tBR0VDT05GSUdbaGlkLXByb2ZpbGVzXSA9ICItLWVuYWJsZS1oaWQsLS1kaXNhYmxlLWhpZCIKK1BBQ0tBR0VDT05GSUdbaG9nLXByb2ZpbGVzXSA9ICItLWVuYWJsZS1ob2csLS1kaXNhYmxlLWhvZyIKK1BBQ0tBR0VDT05GSUdbaGVhbHRoLXByb2ZpbGVzXSA9ICItLWVuYWJsZS1oZWFsdGgsLS1kaXNhYmxlLWhlYWx0aCIKK1BBQ0tBR0VDT05GSUdbc2l4YXhpc10gPSAiLS1lbmFibGUtc2l4YXhpcywtLWRpc2FibGUtc2l4YXhpcyIKK1BBQ0tBR0VDT05GSUdbdG9vbHNdID0gIi0tZW5hYmxlLXRvb2xzLC0tZGlzYWJsZS10b29scyIKK1BBQ0tBR0VDT05GSUdbdGhyZWFkc10gPSAiLS1lbmFibGUtdGhyZWFkcywtLWRpc2FibGUtdGhyZWFkcyIKK1BBQ0tBR0VDT05GSUdbZGVwcmVjYXRlZF0gPSAiLS1lbmFibGUtZGVwcmVjYXRlZCwtLWRpc2FibGUtZGVwcmVjYXRlZCIKIAogU1JDX1VSSSA9ICJcCiAgICAgJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC9ibHVldG9vdGgvYmx1ZXotJHtQVn0udGFyLnh6IFwKQEAgLTI0LDYgKzQ5LDcgQEAKICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnJywgJ2ZpbGU6Ly8wMDAxLUFsbG93LXVzaW5nLW9iZXhkLXdpdGhvdXQtc3lzdGVtZC1pbi10aGUtdXNlci1zZXNzaW8ucGF0Y2gnLCBkKX0gXAogICAgIGZpbGU6Ly8wMDAxLXRlc3RzLWFkZC1hLXRhcmdldC1mb3ItYnVpbGRpbmctdGVzdHMtd2l0aG91dC1ydW5uaW4ucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAxLWhjaWF0dGFjaC1iY200M3h4LWZpeC10aGUtZGVsYXktdGltZXItZm9yLWZpcm13YXJlLWQucGF0Y2ggXAogICAgIGZpbGU6Ly9jdmUtMjAxNy0xMDAwMjUwLnBhdGNoIFwKICIKIFMgPSAiJHtXT1JLRElSfS9ibHVlei0ke1BWfSIKQEAgLTMzLDIxICs1OSwyMCBAQAogaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHN5c3RlbWQgdXBkYXRlLXJjLmQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIHB0ZXN0CiAKIEVYVFJBX09FQ09ORiA9ICJcCi0gIC0tZW5hYmxlLXRvb2xzIFwKLSAgLS1kaXNhYmxlLWN1cHMgXAogICAtLWVuYWJsZS10ZXN0IFwKICAgLS1lbmFibGUtZGF0YWZpbGVzIFwKLSAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJy0tZW5hYmxlLXN5c3RlbWQnLCAnLS1kaXNhYmxlLXN5c3RlbWQnLCBkKX0gXAogICAtLWVuYWJsZS1saWJyYXJ5IFwKICIKIAogIyBibHVlejUgYnVpbGRzIGEgbGFyZ2UgbnVtYmVyIG9mIHVzZWZ1bCB1dGlsaXRpZXMgYnV0IGRvZXMgbm90CiAjIGluc3RhbGwgdGhlbS4gIFNwZWNpZnkgd2hpY2ggb25lcyB3ZSB3YW50IHB1dCBpbnRvICR7UE59LW5vaW5zdC10b29scy4KIE5PSU5TVF9UT09MU19SRUFETElORSA/Pz0gIiIKLU5PSU5TVF9UT09MU19FWFBFUklNRU5UQUwgPz89ICIiCitOT0lOU1RfVE9PTFNfVEVTVElORyA/Pz0gIiIKK05PSU5TVF9UT09MU19CVCA/Pz0gIiIKIE5PSU5TVF9UT09MUyA9ICIgXAogICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3JlYWRsaW5lJywgJyR7Tk9JTlNUX1RPT0xTX1JFQURMSU5FfScsICcnLCBkKX0gXAotICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2V4cGVyaW1lbnRhbCcsICcke05PSU5TVF9UT09MU19FWFBFUklNRU5UQUx9JywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAndGVzdGluZycsICcke05PSU5TVF9UT09MU19URVNUSU5HfScsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3Rvb2xzJywgJyR7Tk9JTlNUX1RPT0xTX0JUfScsICcnLCBkKX0gXAogIgogCiBkb19pbnN0YWxsX2FwcGVuZCgpIHsKQEAgLTU1LDM4ICs4MCwzNiBAQAogCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQgJHtEfSR7SU5JVF9EX0RJUn0vYmx1ZXRvb3RoCiAKIAlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2JsdWV0b290aC8KLQlpZiBbIC1mICR7U30vcHJvZmlsZXMvYXVkaW8vYXVkaW8uY29uZiBdOyB0aGVuCi0JICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L3Byb2ZpbGVzL2F1ZGlvL2F1ZGlvLmNvbmYgJHtEfS8ke3N5c2NvbmZkaXJ9L2JsdWV0b290aC8KLQlmaQogCWlmIFsgLWYgJHtTfS9wcm9maWxlcy9uZXR3b3JrL25ldHdvcmsuY29uZiBdOyB0aGVuCi0JICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L3Byb2ZpbGVzL25ldHdvcmsvbmV0d29yay5jb25mICR7RH0vJHtzeXNjb25mZGlyfS9ibHVldG9vdGgvCisJCWluc3RhbGwgLW0gMDY0NCAke1N9L3Byb2ZpbGVzL25ldHdvcmsvbmV0d29yay5jb25mICR7RH0vJHtzeXNjb25mZGlyfS9ibHVldG9vdGgvCiAJZmkKIAlpZiBbIC1mICR7U30vcHJvZmlsZXMvaW5wdXQvaW5wdXQuY29uZiBdOyB0aGVuCi0JICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L3Byb2ZpbGVzL2lucHV0L2lucHV0LmNvbmYgJHtEfS8ke3N5c2NvbmZkaXJ9L2JsdWV0b290aC8KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7U30vcHJvZmlsZXMvaW5wdXQvaW5wdXQuY29uZiAke0R9LyR7c3lzY29uZmRpcn0vYmx1ZXRvb3RoLwogCWZpCiAKLSAgaWYgWyAtZiAke0R9LyR7c3lzY29uZmRpcn0vaW5pdC5kL2JsdWV0b290aCBdOyB0aGVuCi0gICAgc2VkIC1pIC1lICdzI0BMSUJFWEVDRElSQCMke2xpYmV4ZWNkaXJ9I2cnICR7RH0vJHtzeXNjb25mZGlyfS9pbml0LmQvYmx1ZXRvb3RoCi0gIGZpCisJaWYgWyAtZiAke0R9LyR7c3lzY29uZmRpcn0vaW5pdC5kL2JsdWV0b290aCBdOyB0aGVuCisJCXNlZCAtaSAtZSAncyNATElCRVhFQ0RJUkAjJHtsaWJleGVjZGlyfSNnJyAke0R9LyR7c3lzY29uZmRpcn0vaW5pdC5kL2JsdWV0b290aAorCWZpCiAKIAkjIEluc3RhbGwgZGVzaXJlZCB0b29scyB0aGF0IHVwc3RyZWFtIGxlYXZlcyBpbiBidWlsZCBhcmVhCi0gICAgICAgIGZvciBmIGluICR7Tk9JTlNUX1RPT0xTfSA7IGRvCi0JICAgIGluc3RhbGwgLW0gNzU1ICR7Qn0vJGYgJHtEfS8ke2JpbmRpcn0KKwlmb3IgZiBpbiAke05PSU5TVF9UT09MU30gOyBkbworCQlpbnN0YWxsIC1tIDc1NSAke0J9LyRmICR7RH0vJHtiaW5kaXJ9CiAJZG9uZQogCi0gICAgICAgICMgUGF0Y2ggcHl0aG9uIHRvb2xzIHRvIHVzZSBQeXRob24gMzsgdGhleSBzaG91bGQgYmUgc291cmNlIGNvbXBhdGlibGUsIGJ1dAotICAgICAgICAjIHN0aWxsIHJlZmVyIHRvIFB5dGhvbiAyIGluIHRoZSBzaGViYW5nCi0gICAgICAgIHNlZCAtaSAtZSAnMXMsIyEuKnB5dGhvbi4qLCMhJHtiaW5kaXJ9L3B5dGhvbjMsJyAke0R9JHtsaWJkaXJ9L2JsdWV6L3Rlc3QvKgorCSMgUGF0Y2ggcHl0aG9uIHRvb2xzIHRvIHVzZSBQeXRob24gMzsgdGhleSBzaG91bGQgYmUgc291cmNlIGNvbXBhdGlibGUsIGJ1dAorCSMgc3RpbGwgcmVmZXIgdG8gUHl0aG9uIDIgaW4gdGhlIHNoZWJhbmcKKwlzZWQgLWkgLWUgJzFzLCMhLipweXRob24uKiwjISR7YmluZGlyfS9weXRob24zLCcgJHtEfSR7bGliZGlyfS9ibHVlei90ZXN0LyoKIH0KIAotQUxMT1dfRU1QVFlfbGliYXNvdW5kLW1vZHVsZS1ibHVleiA9ICIxIgotUEFDS0FHRVMgPSsgImxpYmFzb3VuZC1tb2R1bGUtYmx1ZXogJHtQTn0tdGVzdHRvb2xzICR7UE59LW9iZXggJHtQTn0tbm9pbnN0LXRvb2xzIgorUEFDS0FHRVMgPSsgIiR7UE59LXRlc3R0b29scyAke1BOfS1vYmV4ICR7UE59LW5vaW5zdC10b29scyIKIAotRklMRVNfbGliYXNvdW5kLW1vZHVsZS1ibHVleiA9ICIke2xpYmRpcn0vYWxzYS1saWIvbGliKi5zbyAke2RhdGFkaXJ9L2Fsc2EiCi1GSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2JsdWV0b290aC9wbHVnaW5zLyouc28gJHtzeXN0ZW1kX3VuaXRkaXJ9LyAke2RhdGFkaXJ9L2RidXMtMSIKLUZJTEVTXyR7UE59LWRldiArPSAiXAotICAke2xpYmRpcn0vYmx1ZXRvb3RoL3BsdWdpbnMvKi5sYSBcCi0gICR7bGliZGlyfS9hbHNhLWxpYi8qLmxhIFwKK0ZJTEVTXyR7UE59ICs9ICIgXAorICAgICR7bGliZGlyfS9ibHVldG9vdGgvcGx1Z2lucy8qLnNvIFwKKyAgICAke3N5c3RlbWRfdW5pdGRpcn0vICR7ZGF0YWRpcn0vZGJ1cy0xIFwKKyAgICAke2xpYmRpcn0vY3VwcyBcCisiCitGSUxFU18ke1BOfS1kZXYgKz0gIiBcCisgICAgJHtsaWJkaXJ9L2JsdWV0b290aC9wbHVnaW5zLyoubGEgXAogIgogCiBGSUxFU18ke1BOfS1vYmV4ID0gIiR7bGliZXhlY2Rpcn0vYmx1ZXRvb3RoL29iZXhkIFwKQEAgLTEwOSwxNyArMTMyLDE3IEBACiAKIFJERVBFTkRTXyR7UE59LXRlc3R0b29scyArPSAicHl0aG9uMyBweXRob24zLWRidXMgcHl0aG9uMy1weWdvYmplY3QiCiAKLVNZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJibHVldG9vdGguc2VydmljZSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdzeXN0ZW1kJywgJ2JsdWV0b290aC5zZXJ2aWNlJywgJycsIGQpfSIKIElOSVRTQ1JJUFRfUEFDS0FHRVMgPSAiJHtQTn0iCiBJTklUU0NSSVBUX05BTUVfJHtQTn0gPSAiYmx1ZXRvb3RoIgogCiBFWENMVURFX0ZST01fV09STEQgPSAiMSIKIAogZG9fY29tcGlsZV9wdGVzdCgpIHsKLSAgICAgICAgb2VfcnVubWFrZSBidWlsZHRlc3RzCisJb2VfcnVubWFrZSBidWlsZHRlc3RzCiB9CiAKIGRvX2luc3RhbGxfcHRlc3QoKSB7Ci0gICAgICAgIGNwIC1yICR7Qn0vdW5pdC8gJHtEfSR7UFRFU1RfUEFUSH0KLSAgICAgICAgcm0gLWYgJHtEfSR7UFRFU1RfUEFUSH0vdW5pdC8qLm8KKwljcCAtciAke0J9L3VuaXQvICR7RH0ke1BURVNUX1BBVEh9CisJcm0gLWYgJHtEfSR7UFRFU1RfUEFUSH0vdW5pdC8qLm8KIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejUvMDAwMS1oY2lhdHRhY2gtYmNtNDN4eC1maXgtdGhlLWRlbGF5LXRpbWVyLWZvci1maXJtd2FyZS1kLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NS8wMDAxLWhjaWF0dGFjaC1iY200M3h4LWZpeC10aGUtZGVsYXktdGltZXItZm9yLWZpcm13YXJlLWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY3OTQzOAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejUvMDAwMS1oY2lhdHRhY2gtYmNtNDN4eC1maXgtdGhlLWRlbGF5LXRpbWVyLWZvci1maXJtd2FyZS1kLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0Zyb20gM2IzNDFmYjQyMWVmNjFkYjc3ODJiZjEzMTRlYzY5MzgyODQ2N2RlOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZHkgRHVhbiA8ZnVnYW5nLmR1YW5AbnhwLmNvbT4KK0RhdGU6IFdlZCwgMjMgTm92IDIwMTYgMTc6MTI6MTIgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gaGNpYXR0YWNoOiBiY200M3h4OiBmaXggdGhlIGRlbGF5IHRpbWVyIGZvciBmaXJtd2FyZSBkb3dubG9hZAorCitGcm9tIHRoZSBsb2cgaW4gLmJjbTQzeHhfbG9hZF9maXJtd2FyZSgpOgorICAgICAgICAvKiBXYWl0IDUwbXMgdG8gbGV0IHRoZSBmaXJtd2FyZSBwbGFjZWQgaW4gZG93bmxvYWQgbW9kZSAqLworICAgICAgICBuYW5vc2xlZXAoJnRtX21vZGUsIE5VTEwpOworCitCdXQgdGltZXNwZWMgdG1fbW9kZSBpcyByZWFsIGlzIDUwdXMuIENvcnJlY3QgdGhlIGRlbGF5ZWQgdGltZXIgY291bnQuCisKK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQgW2h0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9ibHVldG9vdGgvYmx1ZXouZ2l0L2NvbW1pdC8/aWQ9NzYyNTVmNzMyZDY4YWVmMmI5MGQzNmQ5YzdiZTUxYTllMTczOWNlN10KKworU2lnbmVkLW9mZi1ieTogRnVnYW5nIER1YW4gPGZ1Z2FuZy5kdWFuQG54cC5jb20+CistLS0KKyB0b29scy9oY2lhdHRhY2hfYmNtNDN4eC5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3Rvb2xzL2hjaWF0dGFjaF9iY200M3h4LmMgYi90b29scy9oY2lhdHRhY2hfYmNtNDN4eC5jCitpbmRleCA4MWYzOGNiLi5hYzFiM2MxIDEwMDY0NAorLS0tIGEvdG9vbHMvaGNpYXR0YWNoX2JjbTQzeHguYworKysrIGIvdG9vbHMvaGNpYXR0YWNoX2JjbTQzeHguYworQEAgLTIyOCw4ICsyMjgsOCBAQCBzdGF0aWMgaW50IGJjbTQzeHhfc2V0X3NwZWVkKGludCBmZCwgc3RydWN0IHRlcm1pb3MgKnRpLCB1aW50MzJfdCBzcGVlZCkKKyBzdGF0aWMgaW50IGJjbTQzeHhfbG9hZF9maXJtd2FyZShpbnQgZmQsIGNvbnN0IGNoYXIgKmZ3KQorIHsKKyAJdW5zaWduZWQgY2hhciBjbWRbXSA9IHsgSENJX0NPTU1BTkRfUEtULCAweDJlLCAweGZjLCAweDAwIH07CistCXN0cnVjdCB0aW1lc3BlYyB0bV9tb2RlID0geyAwLCA1MDAwMCB9OworLQlzdHJ1Y3QgdGltZXNwZWMgdG1fcmVhZHkgPSB7IDAsIDIwMDAwMDAgfTsKKysJc3RydWN0IHRpbWVzcGVjIHRtX21vZGUgPSB7IDAsIDUwMDAwMDAwIH07CisrCXN0cnVjdCB0aW1lc3BlYyB0bV9yZWFkeSA9IHsgMCwgMjAwMDAwMDAwIH07CisgCXVuc2lnbmVkIGNoYXIgcmVzcFtDQ19NSU5fU0laRV07CisgCXVuc2lnbmVkIGNoYXIgdHhfYnVmWzEwMjRdOworIAlpbnQgbGVuLCBmZF9mdywgbjsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NS9pbml0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NS9pbml0CmluZGV4IDQ4OWU5YjkuLmQ3OTcyZjIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejUvaW5pdAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1L2luaXQKQEAgLTIxLDI1ICsyMSwyMiBAQAogCiBjYXNlICQxIGluCiAgIHN0YXJ0KQotCWVjaG8gIlN0YXJ0aW5nICRERVNDIgotCisJZWNobyAtbiAiU3RhcnRpbmcgJERFU0M6ICIKIAlpZiB0ZXN0ICIkQkxVRVRPT1RIX0VOQUJMRUQiID0gMDsgdGhlbgotCQllY2hvICJkaXNhYmxlZC4gc2VlIC9ldGMvZGVmYXVsdC9ibHVldG9vdGgiCisJCWVjaG8gImRpc2FibGVkIChzZWUgL2V0Yy9kZWZhdWx0L2JsdWV0b290aCkuIgogCQlleGl0IDAKIAlmaQotCiAJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLWJhY2tncm91bmQgJFNTRF9PUFRJT05TCi0JZWNobyAiJHtEQUVNT04jIyovfSIKLQorCWVjaG8gIiR7REFFTU9OIyMqL30uIgogICA7OwogICBzdG9wKQotCWVjaG8gIlN0b3BwaW5nICRERVNDIgorCWVjaG8gLW4gIlN0b3BwaW5nICRERVNDOiAiCiAJaWYgdGVzdCAiJEJMVUVUT09USF9FTkFCTEVEIiA9IDA7IHRoZW4KLQkJZWNobyAiZGlzYWJsZWQuIgorCQllY2hvICJkaXNhYmxlZCAoc2VlIC9ldGMvZGVmYXVsdC9ibHVldG9vdGgpLiIKIAkJZXhpdCAwCiAJZmkKIAlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgJFNTRF9PUFRJT05TCi0JZWNobyAiJHtEQUVNT059IgorCWVjaG8gIiR7REFFTU9OIyMqL30uIgogICA7OwogICByZXN0YXJ0fGZvcmNlLXJlbG9hZCkKIAkkMCBzdG9wCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1XzUuNDMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1XzUuNDMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMGI4MmQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NV81LjQzLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotcmVxdWlyZSBibHVlejUuaW5jCi0KLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJibHVlejUiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI2OThkZWY4OGRmOTY4NDBkZmJiMDg1OGJiNmQ3MzM1MCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIxNmM5YzA1ZDJhMWRhNjQ0Y2UzNTcwZDk3NWFkYTM2NDNkMmU2MGMwMDdhOTU1YmFjMDljMGEwZWZlYjU4ZDE1IgotCi0jIG5vaW5zdCBwcm9ncmFtcyBpbiBNYWtlZmlsZS50b29scyB0aGF0IGFyZSBjb25kaXRpb25hbCBvbiBSRUFETElORQotIyBzdXBwb3J0Ci1OT0lOU1RfVE9PTFNfUkVBRExJTkUgPz0gIiBcCi0gICAgYXR0cmliL2dhdHR0b29sIFwKLSAgICB0b29scy9vYmV4LWNsaWVudC10b29sIFwKLSAgICB0b29scy9vYmV4LXNlcnZlci10b29sIFwKLSAgICB0b29scy9ibHVldG9vdGgtcGxheWVyIFwKLSAgICB0b29scy9vYmV4Y3RsIFwKLSAgICB0b29scy9idG1nbXQgXAotIgotCi0jIG5vaW5zdCBwcm9ncmFtcyBpbiBNYWtlZmlsZS50b29scyB0aGF0IGFyZSBjb25kaXRpb25hbCBvbiBFWFBFUklNRU5UQUwKLSMgc3VwcG9ydAotTk9JTlNUX1RPT0xTX0VYUEVSSU1FTlRBTCA/PSAiIFwKLSAgICBlbXVsYXRvci9idHZpcnQgXAotICAgIGVtdWxhdG9yL2IxZWUgXAotICAgIGVtdWxhdG9yL2hmcCBcCi0gICAgdG9vbHMvM2RzcCBcCi0gICAgdG9vbHMvbWdtdC10ZXN0ZXIgXAotICAgIHRvb2xzL2dhcC10ZXN0ZXIgXAotICAgIHRvb2xzL2wyY2FwLXRlc3RlciBcCi0gICAgdG9vbHMvc2NvLXRlc3RlciBcCi0gICAgdG9vbHMvc21wLXRlc3RlciBcCi0gICAgdG9vbHMvaGNpLXRlc3RlciBcCi0gICAgdG9vbHMvcmZjb21tLXRlc3RlciBcCi0gICAgdG9vbHMvYmRhZGRyIFwKLSAgICB0b29scy9hdmluZm8gXAotICAgIHRvb2xzL2F2dGVzdCBcCi0gICAgdG9vbHMvc2NvdGVzdCBcCi0gICAgdG9vbHMvYW1wdGVzdCBcCi0gICAgdG9vbHMvaHdkYiBcCi0gICAgdG9vbHMvaGNpZXZlbnRtYXNrIFwKLSAgICB0b29scy9oY2lzZWNmaWx0ZXIgXAotICAgIHRvb2xzL2J0aW5mbyBcCi0gICAgdG9vbHMvYnRhdHRhY2ggXAotICAgIHRvb2xzL2J0c25vb3AgXAotICAgIHRvb2xzL2J0cHJveHkgXAotICAgIHRvb2xzL2J0aW90ZXN0IFwKLSAgICB0b29scy9tY2FwdGVzdCBcCi0gICAgdG9vbHMvY2x0ZXN0IFwKLSAgICB0b29scy9vb2J0ZXN0IFwKLSAgICB0b29scy9zZXEyYnNlcSBcCi0gICAgdG9vbHMvaWJlYWNvbiBcCi0gICAgdG9vbHMvYnRnYXR0LWNsaWVudCBcCi0gICAgdG9vbHMvYnRnYXR0LXNlcnZlciBcCi0gICAgdG9vbHMvZ2F0dC1zZXJ2aWNlIFwKLSAgICBwcm9maWxlcy9pYXAvaWFwZCBcCi0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1XzUuNDYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1XzUuNDYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFmODU4NwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejVfNS40Ni5iYgpAQCAtMCwwICsxLDY5IEBACityZXF1aXJlIGJsdWV6NS5pbmMKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gImJsdWV6NSIKKworU1JDX1VSSVttZDVzdW1dID0gIjkxM2YzNWQ2ZmE0Y2E1NzcyYzUzYWRiOTM2YmYxOTQ3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImRkYWIzZDM4MzdjMWFmYjhhZTIyOGE5NGJhMTc3MDlhNDY1MGJkNGRiMjQyMTFiNjc3MWFiNzM1Yzg5MDhlMjgiCisKKyMgbm9pbnN0IHByb2dyYW1zIGluIE1ha2VmaWxlLnRvb2xzIHRoYXQgYXJlIGNvbmRpdGlvbmFsIG9uIFJFQURMSU5FCisjIHN1cHBvcnQKK05PSU5TVF9UT09MU19SRUFETElORSA/PSAiIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdkZXByZWNhdGVkJywgJ2F0dHJpYi9nYXR0dG9vbCcsICcnLCBkKX0gXAorICAgIHRvb2xzL29iZXgtY2xpZW50LXRvb2wgXAorICAgIHRvb2xzL29iZXgtc2VydmVyLXRvb2wgXAorICAgIHRvb2xzL2JsdWV0b290aC1wbGF5ZXIgXAorICAgIHRvb2xzL29iZXhjdGwgXAorICAgIHRvb2xzL2J0bWdtdCBcCisiCisKKyMgbm9pbnN0IHByb2dyYW1zIGluIE1ha2VmaWxlLnRvb2xzIHRoYXQgYXJlIGNvbmRpdGlvbmFsIG9uIFRFU1RJTkcKKyMgc3VwcG9ydAorTk9JTlNUX1RPT0xTX1RFU1RJTkcgPz0gIiBcCisgICAgZW11bGF0b3IvYnR2aXJ0IFwKKyAgICBlbXVsYXRvci9iMWVlIFwKKyAgICBlbXVsYXRvci9oZnAgXAorICAgIHBlcmlwaGVyYWwvYnRzZW5zb3IgXAorICAgIHRvb2xzLzNkc3AgXAorICAgIHRvb2xzL21nbXQtdGVzdGVyIFwKKyAgICB0b29scy9nYXAtdGVzdGVyIFwKKyAgICB0b29scy9sMmNhcC10ZXN0ZXIgXAorICAgIHRvb2xzL3Njby10ZXN0ZXIgXAorICAgIHRvb2xzL3NtcC10ZXN0ZXIgXAorICAgIHRvb2xzL2hjaS10ZXN0ZXIgXAorICAgIHRvb2xzL3JmY29tbS10ZXN0ZXIgXAorICAgIHRvb2xzL2JuZXAtdGVzdGVyIFwKKyAgICB0b29scy91c2VyY2hhbi10ZXN0ZXIgXAorIgorCisjIG5vaW5zdCBwcm9ncmFtcyBpbiBNYWtlZmlsZS50b29scyB0aGF0IGFyZSBjb25kaXRpb25hbCBvbiBUT09MUworIyBzdXBwb3J0CitOT0lOU1RfVE9PTFNfQlQgPz0gIiBcCisgICAgdG9vbHMvYmRhZGRyIFwKKyAgICB0b29scy9hdmluZm8gXAorICAgIHRvb2xzL2F2dGVzdCBcCisgICAgdG9vbHMvc2NvdGVzdCBcCisgICAgdG9vbHMvYW1wdGVzdCBcCisgICAgdG9vbHMvaHdkYiBcCisgICAgdG9vbHMvaGNpZXZlbnRtYXNrIFwKKyAgICB0b29scy9oY2lzZWNmaWx0ZXIgXAorICAgIHRvb2xzL2J0aW5mbyBcCisgICAgdG9vbHMvYnRzbm9vcCBcCisgICAgdG9vbHMvYnRwcm94eSBcCisgICAgdG9vbHMvYnRpb3Rlc3QgXAorICAgIHRvb2xzL2JuZXB0ZXN0IFwKKyAgICB0b29scy9tY2FwdGVzdCBcCisgICAgdG9vbHMvY2x0ZXN0IFwKKyAgICB0b29scy9vb2J0ZXN0IFwKKyAgICB0b29scy9hZHZ0ZXN0IFwKKyAgICB0b29scy9zZXEyYnNlcSBcCisgICAgdG9vbHMvbm9rZncgXAorICAgIHRvb2xzL2NyZWF0ZS1pbWFnZSBcCisgICAgdG9vbHMvZWRkeXN0b25lIFwKKyAgICB0b29scy9pYmVhY29uIFwKKyAgICB0b29scy9idGdhdHQtY2xpZW50IFwKKyAgICB0b29scy9idGdhdHQtc2VydmVyIFwKKyAgICB0b29scy90ZXN0LXJ1bm5lciBcCisgICAgdG9vbHMvY2hlY2stc2VsZnRlc3QgXAorICAgIHRvb2xzL2dhdHQtc2VydmljZSBcCisgICAgcHJvZmlsZXMvaWFwL2lhcGQgXAorIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi5pbmMKaW5kZXggNjRhNTQxOC4uMmIwM2Y5YyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4uaW5jCkBAIC0xMyw5ICsxMyw5IEBACiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xMmY4ODRkMmFlMWZmODdjMDllNWI3Y2NjMmM0Y2E3ZSBcCiAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWFpbi5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTQ4NmEyNzlhNmFiMGM4ZDE1MmJjZGEzYTViNWVkYzM2IgogCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgc3lzdGVtZCB1cGRhdGUtcmMuZCBibHVldG9vdGgKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBzeXN0ZW1kIHVwZGF0ZS1yYy5kIGJsdWV0b290aCB1cGRhdGUtYWx0ZXJuYXRpdmVzCiAKLURFUEVORFMgID0gImRidXMgZ2xpYi0yLjAgcHBwIGlwdGFibGVzIHJlYWRsaW5lIgorREVQRU5EUyAgPSAiZGJ1cyBnbGliLTIuMCBwcHAgcmVhZGxpbmUiCiAKIElOQ19QUiA9ICJyMjAiCiAKQEAgLTMzLDYgKzMzLDcgQEAKIFBBQ0tBR0VDT05GSUcgPz89ICJ3aXNwciBcCiAgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuZmlsdGVyKCdESVNUUk9fRkVBVFVSRVMnLCAnM2cgc3lzdGVtZCB3aWZpJywgZCl9IFwKICAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsICdibHVleicsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgIGlwdGFibGVzIFwKICIKIAogIyBJZiB5b3Ugd2FudCBDb25uTWFuIHRvIHN1cHBvcnQgVlBOLCBhZGQgZm9sbG93aW5nIHN0YXRlbWVudCBpbnRvCkBAIC01MCw2ICs1MSw4IEBACiBQQUNLQUdFQ09ORklHW3BwdHBdID0gIi0tZW5hYmxlLXBwdHAgLS13aXRoLXBwdHA9JHtzYmluZGlyfS9wcHRwLC0tZGlzYWJsZS1wcHRwLCxwcHRwLWxpbnV4IgogIyBXSVNQciBzdXBwb3J0IGZvciBsb2dnaW5nIGludG8gaG90c3BvdHMsIHJlcXVpcmVzIFRMUwogUEFDS0FHRUNPTkZJR1t3aXNwcl0gPSAiLS1lbmFibGUtd2lzcHIsLS1kaXNhYmxlLXdpc3ByLGdudXRscywiCitQQUNLQUdFQ09ORklHW25mdGFibGVzXSA9ICItLXdpdGgtZmlyZXdhbGw9bmZ0YWJsZXMgLCxsaWJtbmwgbGlibmZ0bmwsLGtlcm5lbC1tb2R1bGUtbmYtdGFibGVzLWlwdjQga2VybmVsLW1vZHVsZS1uZnQtY2hhaW4tbmF0LWlwdjQga2VybmVsLW1vZHVsZS1uZnQtY2hhaW4tcm91dGUtaXB2NCBrZXJuZWwtbW9kdWxlLW5mdC1tZXRhIGtlcm5lbC1tb2R1bGUtbmZ0LW1hc3EtaXB2NCBrZXJuZWwtbW9kdWxlLW5mdC1uYXQiCitQQUNLQUdFQ09ORklHW2lwdGFibGVzXSA9ICItLXdpdGgtZmlyZXdhbGw9aXB0YWJsZXMgLCxpcHRhYmxlcyxpcHRhYmxlcyIKIAogSU5JVFNDUklQVF9OQU1FID0gImNvbm5tYW4iCiBJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAwNSA1IDIgMyAuIHN0b3AgMjIgMCAxIDYgLiIKQEAgLTY2LDYgKzY5LDExIEBACiBTWVNURU1EX1NFUlZJQ0VfJHtQTn0tdnBuID0gImNvbm5tYW4tdnBuLnNlcnZpY2UiCiBTWVNURU1EX1NFUlZJQ0VfJHtQTn0td2FpdC1vbmxpbmUgPSAiY29ubm1hbi13YWl0LW9ubGluZS5zZXJ2aWNlIgogCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCitBTFRFUk5BVElWRV8ke1BOfSA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3Jlc29sdi1jb25mJywnJyxkKX0iCitBTFRFUk5BVElWRV9UQVJHRVRbcmVzb2x2LWNvbmZdID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywnJHtzeXNjb25mZGlyfS9yZXNvbHYtY29uZi5jb25ubWFuJywnJyxkKX0iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcmVzb2x2LWNvbmZdID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywnJHtzeXNjb25mZGlyfS9yZXNvbHYuY29uZicsJycsZCl9IgorCiBkb19pbnN0YWxsX2FwcGVuZCgpIHsKIAlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdmluaXQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgogCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZApAQCAtODYsNiArOTQsMTEgQEAKIAkjIEF1dG9tYWtlIDEuMTIgd29uJ3QgaW5zdGFsbCBlbXB0eSBkaXJlY3RvcmllcywgYnV0IHdlIG5lZWQgdGhlCiAJIyBwbHVnaW5zIGRpcmVjdG9yeSB0byBiZSBwcmVzZW50IGZvciBvd25lcnNoaXAKIAlta2RpciAtcCAke0R9JHtsaWJkaXJ9L2Nvbm5tYW4vcGx1Z2lucworCisgICAgIyBGb3IgcmVhZC1vbmx5IGZpbGVzeXN0ZW0sIGRvIG5vdCBjcmVhdGUgbGlua3MgZHVyaW5nIGJvb3R1cAorICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKyAgICAgICAgbG4gLXNmIC4uL3J1bi9jb25ubWFuL3Jlc29sdi5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3Jlc29sdi1jb25mLmNvbm5tYW4KKyAgICBmaQogfQogCiAjIFRoZXNlIHVzZWQgdG8gYmUgcGx1Z2lucywgYnV0IG5vdyB0aGV5IGFyZSBjb3JlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vMDAwMS1GaXgtY29tcGlsZS1vbi1tdXNsLXdpdGgta2VybmVsLTQuOS1oZWFkZXJzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLzAwMDEtRml4LWNvbXBpbGUtb24tbXVzbC13aXRoLWtlcm5lbC00LjktaGVhZGVycy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzYjg2ZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vMDAwMS1GaXgtY29tcGlsZS1vbi1tdXNsLXdpdGgta2VybmVsLTQuOS1oZWFkZXJzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotRnJvbSBjOGJmYWQ0ZWU5ZDJjNTA1YzAwY2NiYjhiMjEzOTU0M2I1YWQ2ZmNiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KLURhdGU6IE1vbiwgMjMgSmFuIDIwMTcgMTc6NDE6MzkgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSF0gRml4IGNvbXBpbGUgb24gbXVzbCB3aXRoIGtlcm5lbCA0LjkgaGVhZGVycwotCi1LZXJuZWwgaGVhZGVycyBicmVhayB3aGVuIG11c2wgZGVmaW5lcyBJRkZfTE9XRVJfVVAuIFdoaWxlCi13YWl0aW5nIGZvciBtb3JlIHByb3BlciBmaXggaW4gbXVzbCwgYWRkIGEgaGFjayB0byBjb25ubWFuLgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW1dvcmthcm91bmRdCi1TaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgotLS0tCi0gc3JjLzZ0bzQuYyAgICAgfCA0ICsrKysKLSBzcmMvZmlyZXdhbGwuYyB8IDQgKysrKwotIHNyYy9pcHRhYmxlcy5jIHwgNCArKysrCi0gMyBmaWxlcyBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9zcmMvNnRvNC5jIGIvc3JjLzZ0bzQuYwotaW5kZXggNzFhMjg4Mi4uMTkzOGFmYiAxMDA2NDQKLS0tLSBhL3NyYy82dG80LmMKLSsrKyBiL3NyYy82dG80LmMKLUBAIC0yNCw2ICsyNCwxMCBAQAotICNpbmNsdWRlIDxjb25maWcuaD4KLSAjZW5kaWYKLSAKLSsvKiBoYWNrIHRvIG1ha2Ugc3VyZSBrZXJuZWwgaGVhZGVycyB1bmRlcnN0YW5kIHRoYXQgbGliYyAobXVzbCkKLSsgICBkb2VzIGRlZmluZSBJRkZfTE9XRVJfVVAgZXQgYWwuICovCi0rI2RlZmluZSBfX1VBUElfREVGX0lGX05FVF9ERVZJQ0VfRkxBR1NfTE9XRVJfVVBfRE9STUFOVF9FQ0hPIDAKLSsKLSAjaW5jbHVkZSA8ZXJybm8uaD4KLSAjaW5jbHVkZSA8c3RkaW8uaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci1kaWZmIC0tZ2l0IGEvc3JjL2ZpcmV3YWxsLmMgYi9zcmMvZmlyZXdhbGwuYwotaW5kZXggYzQ0MGRmNi4uYzgzZGVmOSAxMDA2NDQKLS0tLSBhL3NyYy9maXJld2FsbC5jCi0rKysgYi9zcmMvZmlyZXdhbGwuYwotQEAgLTIzLDYgKzIzLDEwIEBACi0gI2luY2x1ZGUgPGNvbmZpZy5oPgotICNlbmRpZgotIAotKy8qIGhhY2sgdG8gbWFrZSBzdXJlIGtlcm5lbCBoZWFkZXJzIHVuZGVyc3RhbmQgdGhhdCBsaWJjIChtdXNsKQotKyAgIGRvZXMgZGVmaW5lIElGRl9MT1dFUl9VUCBldCBhbC4gKi8KLSsjZGVmaW5lIF9fVUFQSV9ERUZfSUZfTkVUX0RFVklDRV9GTEFHU19MT1dFUl9VUF9ET1JNQU5UX0VDSE8gMAotKwotICNpbmNsdWRlIDxlcnJuby5oPgotIAotICNpbmNsdWRlIDx4dGFibGVzLmg+Ci1kaWZmIC0tZ2l0IGEvc3JjL2lwdGFibGVzLmMgYi9zcmMvaXB0YWJsZXMuYwotaW5kZXggODJlM2FjNC4uNDZhZDllMiAxMDA2NDQKLS0tLSBhL3NyYy9pcHRhYmxlcy5jCi0rKysgYi9zcmMvaXB0YWJsZXMuYwotQEAgLTIzLDYgKzIzLDEwIEBACi0gI2luY2x1ZGUgPGNvbmZpZy5oPgotICNlbmRpZgotIAotKy8qIGhhY2sgdG8gbWFrZSBzdXJlIGtlcm5lbCBoZWFkZXJzIHVuZGVyc3RhbmQgdGhhdCBsaWJjIChtdXNsKQotKyAgIGRvZXMgZGVmaW5lIElGRl9MT1dFUl9VUCBldCBhbC4gKi8KLSsjZGVmaW5lIF9fVUFQSV9ERUZfSUZfTkVUX0RFVklDRV9GTEFHU19MT1dFUl9VUF9ET1JNQU5UX0VDSE8gMAotKwotICNpbmNsdWRlIDxnZXRvcHQuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0tLSAKLTIuMS40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi8wMDAxLWNvbm5tYW4uc2VydmljZS1zdG9wLXN5c3RlbWQtcmVzb2x2ZWQtd2hlbi13ZS11c2UtY28ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vMDAwMS1jb25ubWFuLnNlcnZpY2Utc3RvcC1zeXN0ZW1kLXJlc29sdmVkLXdoZW4td2UtdXNlLWNvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMmUwYmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vMDAwMS1jb25ubWFuLnNlcnZpY2Utc3RvcC1zeXN0ZW1kLXJlc29sdmVkLXdoZW4td2UtdXNlLWNvLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gOWY3MGI5NGViZjE4ZjUyYzExNTYzNDY0MjY1MjgzMGZhNzdmMjdhMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJNYXhpbiBCLiBKb2huIiA8bWF4aW4uam9obkBpbnRlbC5jb20+CitEYXRlOiBNb24sIDEyIEp1biAyMDE3IDE2OjUyOjM5ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbm5tYW4uc2VydmljZTogc3RvcCBzeXN0ZW1kLXJlc29sdmVkIHdoZW4gd2UgdXNlIGNvbm5tYW4KKworU3RvcCBzeXN0ZW1kLXJlc29sdmVkIHNlcnZpY2Ugd2hlbiB3ZSB1c2UgY29ubm1hbiBhcyBuZXR3b3JrIG1hbmFnZXIuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+CistLS0KKyBzcmMvY29ubm1hbi5zZXJ2aWNlLmluIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9zcmMvY29ubm1hbi5zZXJ2aWNlLmluIGIvc3JjL2Nvbm5tYW4uc2VydmljZS5pbgoraW5kZXggOWY1YzEwZi4uZGFiNDhiYyAxMDA2NDQKKy0tLSBhL3NyYy9jb25ubWFuLnNlcnZpY2UuaW4KKysrKyBiL3NyYy9jb25ubWFuLnNlcnZpY2UuaW4KK0BAIC02LDYgKzYsNyBAQCBSZXF1aXJlc01vdW50c0Zvcj1AbG9jYWxzdGF0ZWRpckAvbGliL2Nvbm5tYW4KKyBBZnRlcj1kYnVzLnNlcnZpY2UgbmV0d29yay1wcmUudGFyZ2V0IHN5c3RlbWQtc3lzdXNlcnMuc2VydmljZQorIEJlZm9yZT1uZXR3b3JrLnRhcmdldCBtdWx0aS11c2VyLnRhcmdldCBzaHV0ZG93bi50YXJnZXQKKyBXYW50cz1uZXR3b3JrLnRhcmdldAorK0NvbmZsaWN0cz1zeXN0ZW1kLXJlc29sdmVkLnNlcnZpY2UKKyAKKyBbU2VydmljZV0KKyBUeXBlPWRidXMKKy0tIAorMi40LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLzAwMDEtZmlyZXdhbGwtbmZ0YWJsZXMtZml4LWJ1aWxkLXdpdGgtbGlibmZ0bmwtMS4wLjcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vMDAwMS1maXJld2FsbC1uZnRhYmxlcy1maXgtYnVpbGQtd2l0aC1saWJuZnRubC0xLjAuNy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmFmYmQxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLzAwMDEtZmlyZXdhbGwtbmZ0YWJsZXMtZml4LWJ1aWxkLXdpdGgtbGlibmZ0bmwtMS4wLjcucGF0Y2gKQEAgLTAsMCArMSw3MiBAQAorRnJvbSA0MDU4Y2UzMTg2YTk5ZmQ1ZjAzMzUwZmMxMWE3ZmM4ZDM4YjZhMzgxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIk1heGluIEIuIEpvaG4iIDxtYXhpbi5qb2huQGludGVsLmNvbT4KK0RhdGU6IE1vbiwgOCBNYXkgMjAxNyAxMDo1MzoxOCArMDMwMAorU3ViamVjdDogW1BBVENIXSBmaXJld2FsbC1uZnRhYmxlczogZml4IGJ1aWxkIHdpdGggbGlibmZ0bmwtMS4wLjcKKworV2UgbmVlZCB0aGVzZSB1cGRhdGVzIHRvIGFjY29tbW9kYXRlIHRoZSBjaGFuZ2VzIGNhdXNlZCBieSB0aGUgZm9sbG93aW5nCitjb21taXQgaW4gbGlibmZ0bmwtMS4wLjcKKworY29tbWl0IDkwN2E5ZjhlNWE5M2Y1YmNkNDQ5NjQzZWIzOTE2YTY1NmQ2MzQ3NTgKK0F1dGhvcjogUGFibG8gTmVpcmEgQXl1c28gPHBhYmxvQG5ldGZpbHRlci5vcmc+CitEYXRlOiAgIFR1ZSBEZWMgMjAgMTM6NDc6MTEgMjAxNiArMDEwMAorCitzcmM6IGdldCByaWQgb2YgYWxpYXNlcyBhbmQgY29tcGF0CisKK1RoaXMgbWFjaGluZXJ5IHdhcyBpbnRyb2R1Y2VkIHRvIGF2b2lkIHN1ZGRlbiBjb21waWxhdGlvbiBicmVha2FnZSBvZgorb2xkIG5mdGFibGVzIHJlbGVhc2VzLiBXaXRoIHRoZSB1cGNvbWluZyByZWxlYXNlIG9mIDAuNyAoYW5kIDAuNiB3aGljaAoraXMgbm93IDYgbW9udGhzIG9sZCkgdGhpcyBpcyBub3QgcmVxdWlyZWQgYW55bW9yZS4KKworTW9yZW92ZXIsIHVzZXJzIGdhaW4gbm90aGluZyBmcm9tIG9sZGVyIHJlbGVhc2VzIHNpbmNlIHRoZXkgYXJlCitoYWxmLWJvaWxlZCBhbmQgYnVnZ3kuCisKK1NvIGxldCdzIGdldCByaWQgb2YgYWxpYXNlcyBub3cuIEJ1bXAgTElCVkVSU0lPTiBhbmQgdXBkYXRlIG1hcCBmaWxlLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4KKy0tLQorIHNyYy9maXJld2FsbC1uZnRhYmxlcy5jIHwgMTQgKysrKysrKy0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2ZpcmV3YWxsLW5mdGFibGVzLmMgYi9zcmMvZmlyZXdhbGwtbmZ0YWJsZXMuYworaW5kZXggNTgzZDFjNC4uODNiMTM3YiAxMDA2NDQKKy0tLSBhL3NyYy9maXJld2FsbC1uZnRhYmxlcy5jCisrKysgYi9zcmMvZmlyZXdhbGwtbmZ0YWJsZXMuYworQEAgLTM4Nyw5ICszODcsOSBAQCBzdGF0aWMgaW50IGFkZF9jbXAoc3RydWN0IG5mdG5sX3J1bGUgKnJ1bGUsIHVpbnQzMl90IHNyZWcsIHVpbnQzMl90IG9wLAorICAgICAgICAgaWYgKCFleHByKQorICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAKKy0gICAgICAgIG5mdG5sX2V4cHJfc2V0X3UzMihleHByLCBORlRfRVhQUl9DTVBfU1JFRywgc3JlZyk7CistICAgICAgICBuZnRubF9leHByX3NldF91MzIoZXhwciwgTkZUX0VYUFJfQ01QX09QLCBvcCk7CistICAgICAgICBuZnRubF9leHByX3NldChleHByLCBORlRfRVhQUl9DTVBfREFUQSwgZGF0YSwgZGF0YV9sZW4pOworKyAgICAgICAgbmZ0bmxfZXhwcl9zZXRfdTMyKGV4cHIsIE5GVE5MX0VYUFJfQ01QX1NSRUcsIHNyZWcpOworKyAgICAgICAgbmZ0bmxfZXhwcl9zZXRfdTMyKGV4cHIsIE5GVE5MX0VYUFJfQ01QX09QLCBvcCk7CisrICAgICAgICBuZnRubF9leHByX3NldChleHByLCBORlROTF9FWFBSX0NNUF9EQVRBLCBkYXRhLCBkYXRhX2xlbik7CisgCisgICAgICAgICBuZnRubF9ydWxlX2FkZF9leHByKHJ1bGUsIGV4cHIpOworIAorQEAgLTU3NSw4ICs1NzUsOCBAQCBzdGF0aWMgaW50IGJ1aWxkX3J1bGVfbmF0KGNvbnN0IGNoYXIgKmFkZHJlc3MsIHVuc2lnbmVkIGNoYXIgcHJlZml4bGVuLAorIAlleHByID0gbmZ0bmxfZXhwcl9hbGxvYygibWV0YSIpOworIAlpZiAoIWV4cHIpCisgCQlnb3RvIGVycjsKKy0JbmZ0bmxfZXhwcl9zZXRfdTMyKGV4cHIsIE5GVF9FWFBSX01FVEFfS0VZLCBORlRfTUVUQV9PSUZOQU1FKTsKKy0JbmZ0bmxfZXhwcl9zZXRfdTMyKGV4cHIsIE5GVF9FWFBSX01FVEFfRFJFRywgTkZUX1JFR18xKTsKKysJbmZ0bmxfZXhwcl9zZXRfdTMyKGV4cHIsIE5GVE5MX0VYUFJfTUVUQV9LRVksIE5GVF9NRVRBX09JRk5BTUUpOworKwluZnRubF9leHByX3NldF91MzIoZXhwciwgTkZUTkxfRVhQUl9NRVRBX0RSRUcsIE5GVF9SRUdfMSk7CisgCW5mdG5sX3J1bGVfYWRkX2V4cHIocnVsZSwgZXhwcik7CisgCWVyciA9IGFkZF9jbXAocnVsZSwgTkZUX1JFR18xLCBORlRfQ01QX0VRLCBpbnRlcmZhY2UsCisgCQkJc3RybGVuKGludGVyZmFjZSkgKyAxKTsKK0BAIC02NzcsOCArNjc3LDggQEAgc3RhdGljIGludCBidWlsZF9ydWxlX3NuYXQoaW50IGluZGV4LCBjb25zdCBjaGFyICphZGRyZXNzLAorIAlleHByID0gbmZ0bmxfZXhwcl9hbGxvYygibWV0YSIpOworIAlpZiAoIWV4cHIpCisgCQlnb3RvIGVycjsKKy0JbmZ0bmxfZXhwcl9zZXRfdTMyKGV4cHIsIE5GVF9FWFBSX01FVEFfS0VZLCBORlRfTUVUQV9PSUYpOworLQluZnRubF9leHByX3NldF91MzIoZXhwciwgTkZUX0VYUFJfTUVUQV9EUkVHLCBORlRfUkVHXzEpOworKwluZnRubF9leHByX3NldF91MzIoZXhwciwgTkZUTkxfRVhQUl9NRVRBX0tFWSwgTkZUX01FVEFfT0lGKTsKKysJbmZ0bmxfZXhwcl9zZXRfdTMyKGV4cHIsIE5GVE5MX0VYUFJfTUVUQV9EUkVHLCBORlRfUkVHXzEpOworIAluZnRubF9ydWxlX2FkZF9leHByKHJ1bGUsIGV4cHIpOworIAllcnIgPSBhZGRfY21wKHJ1bGUsIE5GVF9SRUdfMSwgTkZUX0NNUF9FUSwgJmluZGV4LCBzaXplb2YoaW5kZXgpKTsKKyAJaWYgKGVyciA8IDApCistLSAKKzIuNC4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi8wMDAzLXN0YXRzLUZpeC1iYWQtZmlsZS1kZXNjcmlwdG9yLWluaXRpYWxpc2F0aW9uLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLzAwMDMtc3RhdHMtRml4LWJhZC1maWxlLWRlc2NyaXB0b3ItaW5pdGlhbGlzYXRpb24ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NDU4MTEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLzAwMDMtc3RhdHMtRml4LWJhZC1maWxlLWRlc2NyaXB0b3ItaW5pdGlhbGlzYXRpb24ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotRnJvbSBjN2Y0MTUxZmIwNTNiMGQwNjkxZDhmMTBkN2UzNjkwMjY1ZDI4ODg5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTHVrYXN6IE5vd2FrIDxsbm93YWtAdHljb2ludC5jb20+Ci1EYXRlOiBXZWQsIDI2IE9jdCAyMDE2IDE4OjEzOjAyICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIHN0YXRzOiBGaXggYmFkIGZpbGUgZGVzY3JpcHRvciBpbml0aWFsaXNhdGlvbgotCi1TdGF0cyBmaWxlIGNvZGUgaW5pdGlhbGlzZXMgaXRzIGZpbGUgZGVzY3JpcHRvciBmaWVsZCB0byAwLiAgQnV0IDAgaXMKLWEgdmFsaWQgZmQgdmFsdWUuIC0xIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuICBUaGlzIGNhdXNlcyBwcm9ibGVtcwotd2hlbiBhbiBlcnJvciBoYXBwZW5zIGJlZm9yZSBhIHN0YXRzIGZpbGUgaXMgb3BlbiAoZS5nLiBta2RpcgotZmFpbHMpLiBUaGUgY2xlYW4tdXAgcHJvY2VkdXJlLCBzdGF0c19mcmVlKCkgY2FsbHMgY2xvc2UoZmQpLiAgV2hlbiBmZAotaXMgMCwgdGhpcyBmaXJzdCBjbG9zZXMgc3RkaW4sIGFuZCB0aGVuIGFueSBmaWxlcy9zb2NrZXRzIHdoaWNoCi1yZWNlaXZlZCBmZD0wLCByZS11c2VkIGJ5IHRoZSBPUy4KLQotRml4ZWQgc2V2ZXJhbCBpbnN0YW5jZXMgb2YgYmFkIGZpbGUgZGVzY3JpcHRvciBmaWVsZCBoYW5kbGluZywgaW4gY2FzZQotb2YgZXJyb3JzLgotCi1UaGUgYnVnIHJlc3VsdHMgd2l0aCBjb25ubWFuIGZyZWV6aW5nIGlmIHRoZXJlIGlzIG5vIHJlYWQvd3JpdGUgc3RvcmFnZQotZGlyZWN0b3J5IGF2YWlsYWJsZSwgYW5kIHRoZXJlIGFyZSBtdWx0aXBsZSBhY3RpdmUgaW50ZXJmYWNlcwotKGZkPTAgZ2V0cyByZS11c2VkIGZvciBzb2NrZXRzIGluIHRoYXQgY2FzZSkuCi0KLVRoZSBwYXRjaCB3YXMgaW1wb3J0ZWQgZnJvbSB0aGUgQ29ubm1hbiBnaXQgcmVwb3NpdG9yeQotKGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbmV0d29yay9jb25ubWFuKSBhcyBvZiBjb21taXQgaWQKLWM3ZjQxNTFmYjA1M2IwZDA2OTFkOGYxMGQ3ZTM2OTAyNjVkMjg4ODkuIAotCi1VcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkCi1TaWduZWQtb2ZmLWJ5OiBMdWthc3ogTm93YWsgPGxub3dha0B0eWNvaW50LmNvbT4KLS0tLQotIHNyYy9zdGF0cy5jIHwgMTUgKysrKysrKysrKysrKysrCi0gc3JjL3V0aWwuYyAgfCAgNCArKy0tCi0gMiBmaWxlcyBjaGFuZ2VkLCAxNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvc3JjL3N0YXRzLmMgYi9zcmMvc3RhdHMuYwotaW5kZXggMjYzNDNiMS4uYzNjYTczOCAxMDA2NDQKLS0tLSBhL3NyYy9zdGF0cy5jCi0rKysgYi9zcmMvc3RhdHMuYwotQEAgLTM3OCw2ICszNzgsNyBAQCBzdGF0aWMgaW50IHN0YXRzX2ZpbGVfc2V0dXAoc3RydWN0IHN0YXRzX2ZpbGUgKmZpbGUpCi0gCQkJc3RyZXJyb3IoZXJybm8pLCBmaWxlLT5uYW1lKTsKLSAKLSAJCVRGUihjbG9zZShmaWxlLT5mZCkpOwotKwkJZmlsZS0+ZmQgPSAtMTsKLSAJCWdfZnJlZShmaWxlLT5uYW1lKTsKLSAJCWZpbGUtPm5hbWUgPSBOVUxMOwotIAotQEAgLTM5Myw2ICszOTQsNyBAQCBzdGF0aWMgaW50IHN0YXRzX2ZpbGVfc2V0dXAoc3RydWN0IHN0YXRzX2ZpbGUgKmZpbGUpCi0gCWVyciA9IHN0YXRzX2ZpbGVfcmVtYXAoZmlsZSwgc2l6ZSk7Ci0gCWlmIChlcnIgPCAwKSB7Ci0gCQlURlIoY2xvc2UoZmlsZS0+ZmQpKTsKLSsJCWZpbGUtPmZkID0gLTE7Ci0gCQlnX2ZyZWUoZmlsZS0+bmFtZSk7Ci0gCQlmaWxlLT5uYW1lID0gTlVMTDsKLSAKLUBAIC02NDksNiArNjUxLDEzIEBAIHN0YXRpYyBpbnQgc3RhdHNfZmlsZV9oaXN0b3J5X3VwZGF0ZShzdHJ1Y3Qgc3RhdHNfZmlsZSAqZGF0YV9maWxlKQotIAliemVybyhoaXN0b3J5X2ZpbGUsIHNpemVvZihzdHJ1Y3Qgc3RhdHNfZmlsZSkpOwotIAliemVybyh0ZW1wX2ZpbGUsIHNpemVvZihzdHJ1Y3Qgc3RhdHNfZmlsZSkpOwotIAotKwkvKgotKwkgKiAwIGlzIGEgdmFsaWQgZmlsZSBkZXNjcmlwdG9yIC0gZmQgbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQKLSsJICogdG8gLTEgdG8gaGFuZGxlIGVycm9ycyBjb3JyZWN0bHkKLSsJICovCi0rCWhpc3RvcnlfZmlsZS0+ZmQgPSAtMTsKLSsJdGVtcF9maWxlLT5mZCA9IC0xOwotKwotIAllcnIgPSBzdGF0c19vcGVuKGhpc3RvcnlfZmlsZSwgZGF0YV9maWxlLT5oaXN0b3J5X25hbWUpOwotIAlpZiAoZXJyIDwgMCkKLSAJCXJldHVybiBlcnI7Ci1AQCAtNjgyLDYgKzY5MSwxMiBAQCBpbnQgX19jb25ubWFuX3N0YXRzX3NlcnZpY2VfcmVnaXN0ZXIoc3RydWN0IGNvbm5tYW5fc2VydmljZSAqc2VydmljZSkKLSAJCWlmICghZmlsZSkKLSAJCQlyZXR1cm4gLUVOT01FTTsKLSAKLSsJCS8qCi0rCQkgKiAwIGlzIGEgdmFsaWQgZmlsZSBkZXNjcmlwdG9yIC0gZmQgbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQKLSsJCSAqIHRvIC0xIHRvIGhhbmRsZSBlcnJvcnMgY29ycmVjdGx5Ci0rCQkgKi8KLSsJCWZpbGUtPmZkID0gLTE7Ci0rCi0gCQlnX2hhc2hfdGFibGVfaW5zZXJ0KHN0YXRzX2hhc2gsIHNlcnZpY2UsIGZpbGUpOwotIAl9IGVsc2UgewotIAkJcmV0dXJuIC1FQUxSRUFEWTsKLWRpZmYgLS1naXQgYS9zcmMvdXRpbC5jIGIvc3JjL3V0aWwuYwotaW5kZXggZTY1MzJjOC4uNzMyZDQ1MSAxMDA2NDQKLS0tLSBhL3NyYy91dGlsLmMKLSsrKyBiL3NyYy91dGlsLmMKLUBAIC02Myw3ICs2Myw3IEBAIGludCBfX2Nvbm5tYW5fdXRpbF9pbml0KHZvaWQpCi0gewotIAlpbnQgciA9IDA7Ci0gCi0tCWlmIChmID4gMCkKLSsJaWYgKGYgPj0gMCkKLSAJCXJldHVybiAwOwotIAotIAlmID0gb3BlbihVUkFORE9NLCBPX1JET05MWSk7Ci1AQCAtODYsNyArODYsNyBAQCBpbnQgX19jb25ubWFuX3V0aWxfaW5pdCh2b2lkKQotIAotIHZvaWQgX19jb25ubWFuX3V0aWxfY2xlYW51cCh2b2lkKQotIHsKLS0JaWYgKGYgPiAwKQotKwlpZiAoZiA+PSAwKQotIAkJY2xvc2UoZik7Ci0gCi0gCWYgPSAtMTsKLS0tIAotMi43LjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuXzEuMzMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW5fMS4zMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWUwNGQ5Yi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW5fMS4zMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLXJlcXVpcmUgY29ubm1hbi5pbmMKLQotU1JDX1VSSSAgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC9uZXR3b3JrLyR7QlBOfS8ke0JQfS50YXIueHogXAotICAgICAgICAgICAgZmlsZTovLzAwMDEtcGx1Z2luLmgtQ2hhbmdlLXZpc2liaWxpdHktdG8tZGVmYXVsdC1mb3ItZGVidWctc3ltYi5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vY29ubm1hbiBcCi0gICAgICAgICAgICBmaWxlOi8vbm8tdmVyc2lvbi1zY3JpcHRzLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlcy5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vMDAwMy1zdGF0cy1GaXgtYmFkLWZpbGUtZGVzY3JpcHRvci1pbml0aWFsaXNhdGlvbi5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTI4NjUucGF0Y2ggXAotICAgICAgICAgICAgIgotU1JDX1VSSV9hcHBlbmRfbGliYy1tdXNsID0gIiBmaWxlOi8vMDAwMi1yZXNvbHZlLW11c2wtZG9lcy1ub3QtaW1wbGVtZW50LXJlc19uaW5pdC5wYXRjaCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1jb21waWxlLW9uLW11c2wtd2l0aC1rZXJuZWwtNC45LWhlYWRlcnMucGF0Y2giCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJjNTE5MDNmZDNlN2E2YTM3MWQxMmFjNWQ3MmExZmEwMSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJiYzg5NDYwMzZmYTcwMTI0ZDY2MzEzNmY5ZjZiNjIzOGQ4OTdjYTQ4Mjc4MmRmOTA3YjA3YTQyOGIwOWRmNWEwIgotCi1SUkVDT01NRU5EU18ke1BOfSA9ICJjb25ubWFuLWNvbmYiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW5fMS4zNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbl8xLjM0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMmM2ODgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW5fMS4zNC5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIGNvbm5tYW4uaW5jCisKK1NSQ19VUkkgID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvbmV0d29yay8ke0JQTn0vJHtCUH0udGFyLnh6IFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBsdWdpbi5oLUNoYW5nZS12aXNpYmlsaXR5LXRvLWRlZmF1bHQtZm9yLWRlYnVnLXN5bWIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtZmlyZXdhbGwtbmZ0YWJsZXMtZml4LWJ1aWxkLXdpdGgtbGlibmZ0bmwtMS4wLjcucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtY29ubm1hbi5zZXJ2aWNlLXN0b3Atc3lzdGVtZC1yZXNvbHZlZC13aGVuLXdlLXVzZS1jby5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vY29ubm1hbiBcCisgICAgICAgICAgICBmaWxlOi8vbm8tdmVyc2lvbi1zY3JpcHRzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTI4NjUucGF0Y2ggXAorICAgICAgICAgICAgIgorU1JDX1VSSV9hcHBlbmRfbGliYy1tdXNsID0gIiBmaWxlOi8vMDAwMi1yZXNvbHZlLW11c2wtZG9lcy1ub3QtaW1wbGVtZW50LXJlc19uaW5pdC5wYXRjaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImUyMDAwMjg3MDJjODMxZDVmNTM1ZDIwZDYxZTYwOGVmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImE5YTA4MDhjNzI5YzFmMzQ4ZmMzNmQ4Y2VjYjUyZDE5YjcyYmMzNGNiNDExYzUwMjYwOGNiMGUwMTkwZmM3MWUiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gImNvbm5tYW4tY29uZiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AuaW5jCmluZGV4IGFhZmRkMGEuLmU5NDM3MDcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwLmluYwpAQCAtMTIsMzAgKzEyLDMzIEBACiAKIERFUEVORFMgPSAib3BlbnNzbCBiaW5kIgogCi1TUkNfVVJJID0gImZ0cDovL2Z0cC5pc2Mub3JnL2lzYy9kaGNwLyR7UFZ9L2RoY3AtJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovL2RlZmluZS1tYWNyby1fUEFUSF9ESENQRF9DT05GLWFuZC1fUEFUSF9ESENMSUVOVF9DT04ucGF0Y2ggXAorU1JDX1VSSSA9ICJodHRwOi8vZnRwLmlzYy5vcmcvaXNjL2RoY3AvJHtQVn0vZGhjcC0ke1BWfS50YXIuZ3ogXAogICAgICAgICAgICBmaWxlOi8vaW5pdC1yZWxheSBmaWxlOi8vZGVmYXVsdC1yZWxheSBcCiAgICAgICAgICAgIGZpbGU6Ly9pbml0LXNlcnZlciBmaWxlOi8vZGVmYXVsdC1zZXJ2ZXIgXAogICAgICAgICAgICBmaWxlOi8vZGhjbGllbnQuY29uZiBmaWxlOi8vZGhjcGQuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9kaGNsaWVudC1zeXN0ZW1kLXdyYXBwZXIgXAorICAgICAgICAgICBmaWxlOi8vZGhjbGllbnQuc2VydmljZSBcCiAgICAgICAgICAgIGZpbGU6Ly9kaGNwZC5zZXJ2aWNlIGZpbGU6Ly9kaGNyZWxheS5zZXJ2aWNlIFwKICAgICAgICAgICAgZmlsZTovL2RoY3BkNi5zZXJ2aWNlIFwKLSAgICAgICAgICAgZmlsZTovL3NlYXJjaC1mb3ItbGlieG1sMi5wYXRjaCAiCi0KKyAgICAgICAgICAgIgogVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImZ0cDovL2Z0cC5pc2Mub3JnL2lzYy9kaGNwLyIKIFVQU1RSRUFNX0NIRUNLX1JFR0VYID0gIig/UDxwdmVyPlxkK1wuXGQrXC4oXGQrPykpLyIKIAogaW5oZXJpdCBhdXRvdG9vbHMgc3lzdGVtZCB1c2VyYWRkIHVwZGF0ZS1yYy5kCiAKIFVTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0tc2VydmVyIgotVVNFUkFERF9QQVJBTV8ke1BOfS1zZXJ2ZXIgPSAiLS1zeXN0ZW0gLS1uby1jcmVhdGUtaG9tZSAtLWhvbWUtZGlyIC92YXIvcnVuLyR7UE59IC0tc2hlbGwgL2Jpbi9mYWxzZSAtLXVzZXItZ3JvdXAgJHtQTn0iCitVU0VSQUREX1BBUkFNXyR7UE59LXNlcnZlciA9ICItLXN5c3RlbSAtLW5vLWNyZWF0ZS1ob21lIC0taG9tZS1kaXIgL3Zhci9ydW4vJHtCUE59IC0tc2hlbGwgL2Jpbi9mYWxzZSAtLXVzZXItZ3JvdXAgJHtCUE59IgogCi1TWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59LXNlcnZlciAke1BOfS1yZWxheSIKK1NZU1RFTURfUEFDS0FHRVMgPSAiJHtQTn0tc2VydmVyICR7UE59LXJlbGF5ICR7UE59LWNsaWVudCIKIFNZU1RFTURfU0VSVklDRV8ke1BOfS1zZXJ2ZXIgPSAiZGhjcGQuc2VydmljZSBkaGNwZDYuc2VydmljZSIKIFNZU1RFTURfQVVUT19FTkFCTEVfJHtQTn0tc2VydmVyID0gImRpc2FibGUiCiAKIFNZU1RFTURfU0VSVklDRV8ke1BOfS1yZWxheSA9ICJkaGNyZWxheS5zZXJ2aWNlIgogU1lTVEVNRF9BVVRPX0VOQUJMRV8ke1BOfS1yZWxheSA9ICJkaXNhYmxlIgogCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tY2xpZW50ID0gImRoY2xpZW50LnNlcnZpY2UiCitTWVNURU1EX0FVVE9fRU5BQkxFXyR7UE59LWNsaWVudCA9ICJkaXNhYmxlIgorCiBJTklUU0NSSVBUX1BBQ0tBR0VTID0gImRoY3Atc2VydmVyIgogSU5JVFNDUklQVF9OQU1FX2RoY3Atc2VydmVyID0gImRoY3Atc2VydmVyIgogSU5JVFNDUklQVF9QQVJBTVNfZGhjcC1zZXJ2ZXIgPSAiZGVmYXVsdHMiCkBAIC00Niw3ICs0OSw3IEBACiAgICAgICAgICAgICAgICAgLS13aXRoLWNsaS1sZWFzZS1maWxlPSR7bG9jYWxzdGF0ZWRpcn0vbGliL2RoY3AvZGhjbGllbnQubGVhc2VzIFwKICAgICAgICAgICAgICAgICAtLXdpdGgtY2xpNi1sZWFzZS1maWxlPSR7bG9jYWxzdGF0ZWRpcn0vbGliL2RoY3AvZGhjbGllbnQ2LmxlYXNlcyBcCiAgICAgICAgICAgICAgICAgLS13aXRoLWxpYmJpbmQ9JHtTVEFHSU5HX0xJQkRJUn0vIFwKLSAgICAgICAgICAgICAgICAtLWVuYWJsZS1wYXJhbm9pYSBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtcGFyYW5vaWEgLS1kaXNhYmxlLXN0YXRpYyBcCiAgICAgICAgICAgICAgICAgLS13aXRoLXJhbmRvbWRldj0vZGV2L3JhbmRvbSBcCiAgICAgICAgICAgICAgICAiCiAKQEAgLTc5LDE1ICs4MiwyMyBAQAogCXNlZCAtaSAtZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kaGNwZCouc2VydmljZQogCXNlZCAtaSAtZSAncyxAYmFzZV9iaW5kaXJALCR7YmFzZV9iaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2RoY3BkKi5zZXJ2aWNlCiAJc2VkIC1pIC1lICdzLEBsb2NhbHN0YXRlZGlyQCwke2xvY2Fsc3RhdGVkaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2RoY3BkKi5zZXJ2aWNlCi0gICAgICAgc2VkIC1pIC1lICdzLEBTWVNDT05GRElSQCwke3N5c2NvbmZkaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2RoY3JlbGF5LnNlcnZpY2UKKwlzZWQgLWkgLWUgJ3MsQFNZU0NPTkZESVJALCR7c3lzY29uZmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZGhjcmVsYXkuc2VydmljZQorCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX3NiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vZGhjbGllbnQtc3lzdGVtZC13cmFwcGVyICR7RH0ke2Jhc2Vfc2JpbmRpcn0vZGhjbGllbnQtc3lzdGVtZC13cmFwcGVyCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZGhjbGllbnQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kaGNsaWVudC5zZXJ2aWNlCisJc2VkIC1pIC1lICdzLEBCQVNFX1NCSU5ESVJALCR7YmFzZV9zYmluZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kaGNsaWVudC5zZXJ2aWNlCiB9CiAKLVBBQ0tBR0VTICs9ICJkaGNwLXNlcnZlciBkaGNwLXNlcnZlci1jb25maWcgZGhjcC1jbGllbnQgZGhjcC1yZWxheSBkaGNwLW9tc2hlbGwiCitQQUNLQUdFUyArPSAiZGhjcC1saWJzIGRoY3Atc2VydmVyIGRoY3Atc2VydmVyLWNvbmZpZyBkaGNwLWNsaWVudCBkaGNwLXJlbGF5IGRoY3Atb21zaGVsbCIKIAotRklMRVNfJHtQTn0gPSAiIgorUEFDS0FHRVNfcmVtb3ZlID0gIiR7UE59IgogUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKIFJERVBFTkRTXyR7UE59LXN0YXRpY2RldiA9ICIiCiAKK0ZJTEVTXyR7UE59LWxpYnMgPSAiJHtsaWJkaXJ9L2xpYmRoY3BjdGwuc28uMCogJHtsaWJkaXJ9L2xpYm9tYXBpLnNvLjAqIgorCiBGSUxFU18ke1BOfS1zZXJ2ZXIgPSAiJHtzYmluZGlyfS9kaGNwZCAke3N5c2NvbmZkaXJ9L2luaXQuZC9kaGNwLXNlcnZlciIKIFJSRUNPTU1FTkRTXyR7UE59LXNlcnZlciA9ICJkaGNwLXNlcnZlci1jb25maWciCiAKQEAgLTk1LDcgKzEwNiwxMSBAQAogCiBGSUxFU18ke1BOfS1yZWxheSA9ICIke3NiaW5kaXJ9L2RoY3JlbGF5ICR7c3lzY29uZmRpcn0vaW5pdC5kL2RoY3AtcmVsYXkgJHtzeXNjb25mZGlyfS9kZWZhdWx0L2RoY3AtcmVsYXkiCiAKLUZJTEVTXyR7UE59LWNsaWVudCA9ICIke2Jhc2Vfc2JpbmRpcn0vZGhjbGllbnQgJHtiYXNlX3NiaW5kaXJ9L2RoY2xpZW50LXNjcmlwdCAke3N5c2NvbmZkaXJ9L2RoY3AvZGhjbGllbnQuY29uZiIKK0ZJTEVTXyR7UE59LWNsaWVudCA9ICIke2Jhc2Vfc2JpbmRpcn0vZGhjbGllbnQgXAorICAgICAgICAgICAgICAgICAgICAgICR7YmFzZV9zYmluZGlyfS9kaGNsaWVudC1zY3JpcHQgXAorICAgICAgICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vZGhjcC9kaGNsaWVudC5jb25mIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2Jhc2Vfc2JpbmRpcn0vZGhjbGllbnQtc3lzdGVtZC13cmFwcGVyIFwKKyAgICAgICAgICAgICAgICAgICAgICIKIAogRklMRVNfJHtQTn0tb21zaGVsbCA9ICIke2JpbmRpcn0vb21zaGVsbCIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwLzAwMDEtZGVmaW5lLW1hY3JvLV9QQVRIX0RIQ1BEX0NPTkYtYW5kLV9QQVRIX0RIQ0xJRU5UX0NPTi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC8wMDAxLWRlZmluZS1tYWNyby1fUEFUSF9ESENQRF9DT05GLWFuZC1fUEFUSF9ESENMSUVOVF9DT04ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTViM2NmOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC8wMDAxLWRlZmluZS1tYWNyby1fUEFUSF9ESENQRF9DT05GLWFuZC1fUEFUSF9ESENMSUVOVF9DT04ucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSA3Y2MyOTE0NDUzNWE2MjJmYzY3MWRjODZlYjFkYTY1YjA0NzNhN2M0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAxNSBBdWcgMjAxNyAxNjoxNDoyMiArMDgwMAorU3ViamVjdDogW1BBVENIIDAxLzExXSBkZWZpbmUgbWFjcm8gX1BBVEhfREhDUERfQ09ORiBhbmQgX1BBVEhfREhDTElFTlRfQ09ORgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitSZWJhc2UgdG8gNC4zLjYKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGluY2x1ZGVzL3NpdGUuaCB8IDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvaW5jbHVkZXMvc2l0ZS5oIGIvaW5jbHVkZXMvc2l0ZS5oCitpbmRleCBiMmY3ZmQ3Li4yODBmYmI5IDEwMDY0NAorLS0tIGEvaW5jbHVkZXMvc2l0ZS5oCisrKysgYi9pbmNsdWRlcy9zaXRlLmgKK0BAIC0xNDksNyArMTQ5LDggQEAKKyAvKiBEZWZpbmUgdGhpcyBpZiB5b3Ugd2FudCB0aGUgZGhjcGQuY29uZiBmaWxlIHRvIGdvIHNvbWV3aGVyZSBvdGhlciB0aGFuCisgICAgdGhlIGRlZmF1bHQgbG9jYXRpb24uICAgQnkgZGVmYXVsdCwgaXQgZ29lcyBpbiAvZXRjL2RoY3BkLmNvbmYuICovCisgCistLyogI2RlZmluZSBfUEFUSF9ESENQRF9DT05GCSIvZXRjL2RoY3BkLmNvbmYiICovCisrI2RlZmluZSBfUEFUSF9ESENQRF9DT05GCSIvZXRjL2RoY3AvZGhjcGQuY29uZiIKKysjZGVmaW5lIF9QQVRIX0RIQ0xJRU5UX0NPTkYJIi9ldGMvZGhjcC9kaGNsaWVudC5jb25mIgorIAorIC8qIE5ldHdvcmsgQVBJIGRlZmluaXRpb25zLiAgIFlvdSBkbyBub3QgbmVlZCB0byBjaG9vc2Ugb25lIG9mIHRoZXNlIC0gaWYKKyAgICB5b3UgZG9uJ3QgY2hvb3NlLCBvbmUgd2lsbCBiZSBjaG9zZW4gZm9yIHlvdSBpbiB5b3VyIHN5c3RlbSdzIGNvbmZpZworLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC8wMDAxLXNpdGUuaC1lbmFibGUtZ2VudGxlLXNodXRkb3duLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwLzAwMDEtc2l0ZS5oLWVuYWJsZS1nZW50bGUtc2h1dGRvd24ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3NDQzYTUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwLzAwMDEtc2l0ZS5oLWVuYWJsZS1nZW50bGUtc2h1dGRvd24ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCi0KLVN1YmplY3Q6IFtQQVRDSF0gc2l0ZS5oOiBlbmFibGUgZ2VudGxlIHNodXRkb3duCi0KLVNpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KLS0tLQotIGluY2x1ZGVzL3NpdGUuaCB8IDIgKy0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2luY2x1ZGVzL3NpdGUuaCBiL2luY2x1ZGVzL3NpdGUuaAotaW5kZXggMWRkMTI1MS4uYWJiNjZlNCAxMDA2NDQKLS0tLSBhL2luY2x1ZGVzL3NpdGUuaAotKysrIGIvaW5jbHVkZXMvc2l0ZS5oCi1AQCAtMjg5LDcgKzI4OSw3IEBACi0gICAgc2l0dWF0aW9ucy4gIFdlIHBsYW4gdG8gcmV2aXNpdCB0aGlzIGZlYXR1cmUgYW5kIG1heQotICAgIG1ha2Ugbm9uLWJhY2t3YXJkcyBjb21wYXRpYmxlIGNoYW5nZXMgaW5jbHVkaW5nIHRoZQotICAgIHJlbW92YWwgb2YgdGhpcyBkZWZpbmUuICBVc2UgYXQgeW91ciBvd24gcmlzay4gICovCi0tLyogI2RlZmluZSBFTkFCTEVfR0VOVExFX1NIVVRET1dOICovCi0rI2RlZmluZSBFTkFCTEVfR0VOVExFX1NIVVRET1dOCi0gCi0gLyogSW5jbHVkZSBvbGQgZXJyb3IgY29kZXMuICBUaGlzIGlzIHByb3ZpZGVkIGluIGNhc2UgeW91Ci0gICAgYXJlIGJ1aWxkaW5nIGFuIGV4dGVybmFsIHByb2dyYW0gc2ltaWxhciB0byBvbXNoZWxsIGZvcgotLS0gCi0yLjguMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvMDAwMi1kaGNsaWVudC1kYnVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwLzAwMDItZGhjbGllbnQtZGJ1cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDU5ZGMwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwLzAwMDItZGhjbGllbnQtZGJ1cy5wYXRjaApAQCAtMCwwICsxLDExNyBAQAorRnJvbSBiZTc1NDBkMzFjMzU2ZTgwZWUwMmU5MGU4YmYxNjJiN2FjNmU1YmE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAxNSBBdWcgMjAxNyAxNDo1Njo1NiArMDgwMAorU3ViamVjdDogW1BBVENIIDAyLzExXSBkaGNsaWVudCBkYnVzCisKK3Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uXQorCitSZWJhc2UgdG8gNC4zLjYKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNsaWVudC9zY3JpcHRzL2JzZG9zICAgfCA1ICsrKysrCisgY2xpZW50L3NjcmlwdHMvZnJlZWJzZCB8IDUgKysrKysKKyBjbGllbnQvc2NyaXB0cy9saW51eCAgIHwgNSArKysrKworIGNsaWVudC9zY3JpcHRzL25ldGJzZCAgfCA1ICsrKysrCisgY2xpZW50L3NjcmlwdHMvb3BlbmJzZCB8IDUgKysrKysKKyBjbGllbnQvc2NyaXB0cy9zb2xhcmlzIHwgNSArKysrKworIDYgZmlsZXMgY2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY2xpZW50L3NjcmlwdHMvYnNkb3MgYi9jbGllbnQvc2NyaXB0cy9ic2RvcworaW5kZXggZDY5ZDBkOC4uMDk1YjE0MyAxMDA3NTUKKy0tLSBhL2NsaWVudC9zY3JpcHRzL2JzZG9zCisrKysgYi9jbGllbnQvc2NyaXB0cy9ic2RvcworQEAgLTQ1LDYgKzQ1LDExIEBAIGV4aXRfd2l0aF9ob29rcygpIHsKKyAgICAgLiAvZXRjL2RoY2xpZW50LWV4aXQtaG9va3MKKyAgIGZpCisgIyBwcm9iYWJseSBzaG91bGQgZG8gc29tZXRoaW5nIHdpdGggZXhpdCBzdGF0dXMgb2YgdGhlIGxvY2FsIHNjcmlwdAorKyAgaWYgWyB4JGRoY19kYnVzICE9IHggLWEgJGV4aXRfc3RhdHVzIC1lcSAwIF07IHRoZW4KKysgICAgZGJ1cy1zZW5kIC0tc3lzdGVtIC0tZGVzdD1jb20ucmVkaGF0LmRoY3AgXAorKyAgICAgIC0tdHlwZT1tZXRob2RfY2FsbCAvY29tL3JlZGhhdC9kaGNwLyRpbnRlcmZhY2UgY29tLnJlZGhhdC5kaGNwLnNldCBcCisrICAgICAgJ3N0cmluZzonImBlbnYgfCBncmVwIC1FdiAnXihQQVRIfFNITFZMfF98UFdEfGRoY19kYnVzKVw9J2AiCisrICBmaQorICAgZXhpdCAkZXhpdF9zdGF0dXMKKyB9CisgCitkaWZmIC0tZ2l0IGEvY2xpZW50L3NjcmlwdHMvZnJlZWJzZCBiL2NsaWVudC9zY3JpcHRzL2ZyZWVic2QKK2luZGV4IDhmM2UyYTIuLmFkN2ZiNDQgMTAwNzU1CistLS0gYS9jbGllbnQvc2NyaXB0cy9mcmVlYnNkCisrKysgYi9jbGllbnQvc2NyaXB0cy9mcmVlYnNkCitAQCAtODksNiArODksMTEgQEAgZXhpdF93aXRoX2hvb2tzKCkgeworICAgICAuIC9ldGMvZGhjbGllbnQtZXhpdC1ob29rcworICAgZmkKKyAjIHByb2JhYmx5IHNob3VsZCBkbyBzb21ldGhpbmcgd2l0aCBleGl0IHN0YXR1cyBvZiB0aGUgbG9jYWwgc2NyaXB0CisrICBpZiBbIHgkZGhjX2RidXMgIT0geCAtYSAkZXhpdF9zdGF0dXMgLWVxIDAgXTsgdGhlbgorKyAgICBkYnVzLXNlbmQgLS1zeXN0ZW0gLS1kZXN0PWNvbS5yZWRoYXQuZGhjcCBcCisrICAgICAgLS10eXBlPW1ldGhvZF9jYWxsIC9jb20vcmVkaGF0L2RoY3AvJGludGVyZmFjZSBjb20ucmVkaGF0LmRoY3Auc2V0IFwKKysgICAgICAnc3RyaW5nOiciYGVudiB8IGdyZXAgLUV2ICdeKFBBVEh8U0hMVkx8X3xQV0R8ZGhjX2RidXMpXD0nYCIKKysgIGZpCisgICBleGl0ICRleGl0X3N0YXR1cworIH0KKyAKK2RpZmYgLS1naXQgYS9jbGllbnQvc2NyaXB0cy9saW51eCBiL2NsaWVudC9zY3JpcHRzL2xpbnV4CitpbmRleCA1ZmIxNjEyLi4zZDQ0N2I2IDEwMDc1NQorLS0tIGEvY2xpZW50L3NjcmlwdHMvbGludXgKKysrKyBiL2NsaWVudC9zY3JpcHRzL2xpbnV4CitAQCAtMTc0LDYgKzE3NCwxMSBAQCBleGl0X3dpdGhfaG9va3MoKSB7CisgICAgICAgICBleGl0X3N0YXR1cz0kPworICAgICBmaQorIAorKyAgICBpZiBbIHgkZGhjX2RidXMgIT0geCAtYSAkZXhpdF9zdGF0dXMgLWVxIDAgXTsgdGhlbgorKyAgICAgICAgZGJ1cy1zZW5kIC0tc3lzdGVtIC0tZGVzdD1jb20ucmVkaGF0LmRoY3AgXAorKyAgICAgICAgICAgLS10eXBlPW1ldGhvZF9jYWxsIC9jb20vcmVkaGF0L2RoY3AvJGludGVyZmFjZSBjb20ucmVkaGF0LmRoY3Auc2V0IFwKKysgICAgICAgICAgICdzdHJpbmc6JyJgZW52IHwgZ3JlcCAtRXYgJ14oUEFUSHxTSExWTHxffFBXRHxkaGNfZGJ1cylcPSdgIgorKyAgICBmaQorICAgICBleGl0ICRleGl0X3N0YXR1cworIH0KKyAKK2RpZmYgLS1naXQgYS9jbGllbnQvc2NyaXB0cy9uZXRic2QgYi9jbGllbnQvc2NyaXB0cy9uZXRic2QKK2luZGV4IDA3MzgzYjcuLmFhYmE4ZTggMTAwNzU1CistLS0gYS9jbGllbnQvc2NyaXB0cy9uZXRic2QKKysrKyBiL2NsaWVudC9zY3JpcHRzL25ldGJzZAorQEAgLTQ1LDYgKzQ1LDExIEBAIGV4aXRfd2l0aF9ob29rcygpIHsKKyAgICAgLiAvZXRjL2RoY2xpZW50LWV4aXQtaG9va3MKKyAgIGZpCisgIyBwcm9iYWJseSBzaG91bGQgZG8gc29tZXRoaW5nIHdpdGggZXhpdCBzdGF0dXMgb2YgdGhlIGxvY2FsIHNjcmlwdAorKyAgaWYgWyB4JGRoY19kYnVzICE9IHggLWEgJGV4aXRfc3RhdHVzIC1lcSAwIF07IHRoZW4KKysgICAgZGJ1cy1zZW5kIC0tc3lzdGVtIC0tZGVzdD1jb20ucmVkaGF0LmRoY3AgXAorKyAgICAgIC0tdHlwZT1tZXRob2RfY2FsbCAvY29tL3JlZGhhdC9kaGNwLyRpbnRlcmZhY2UgY29tLnJlZGhhdC5kaGNwLnNldCBcCisrICAgICAgJ3N0cmluZzonImBlbnYgfCBncmVwIC1FdiAnXihQQVRIfFNITFZMfF98UFdEfGRoY19kYnVzKVw9J2AiCisrICBmaQorICAgZXhpdCAkZXhpdF9zdGF0dXMKKyB9CisgCitkaWZmIC0tZ2l0IGEvY2xpZW50L3NjcmlwdHMvb3BlbmJzZCBiL2NsaWVudC9zY3JpcHRzL29wZW5ic2QKK2luZGV4IGU3ZjQ3NDYuLjU2Yjk4MGMgMTAwNjQ0CistLS0gYS9jbGllbnQvc2NyaXB0cy9vcGVuYnNkCisrKysgYi9jbGllbnQvc2NyaXB0cy9vcGVuYnNkCitAQCAtNDUsNiArNDUsMTEgQEAgZXhpdF93aXRoX2hvb2tzKCkgeworICAgICAuIC9ldGMvZGhjbGllbnQtZXhpdC1ob29rcworICAgZmkKKyAjIHByb2JhYmx5IHNob3VsZCBkbyBzb21ldGhpbmcgd2l0aCBleGl0IHN0YXR1cyBvZiB0aGUgbG9jYWwgc2NyaXB0CisrICBpZiBbIHgkZGhjX2RidXMgIT0geCAtYSAkZXhpdF9zdGF0dXMgLWVxIDAgXTsgdGhlbgorKyAgICBkYnVzLXNlbmQgLS1zeXN0ZW0gLS1kZXN0PWNvbS5yZWRoYXQuZGhjcCBcCisrICAgICAgLS10eXBlPW1ldGhvZF9jYWxsIC9jb20vcmVkaGF0L2RoY3AvJGludGVyZmFjZSBjb20ucmVkaGF0LmRoY3Auc2V0IFwKKysgICAgICAnc3RyaW5nOiciYGVudiB8IGdyZXAgLUV2ICdeKFBBVEh8U0hMVkx8X3xQV0R8ZGhjX2RidXMpXD0nYCIKKysgIGZpCisgICBleGl0ICRleGl0X3N0YXR1cworIH0KKyAKK2RpZmYgLS1naXQgYS9jbGllbnQvc2NyaXB0cy9zb2xhcmlzIGIvY2xpZW50L3NjcmlwdHMvc29sYXJpcworaW5kZXggYWY1NTNiOS4uNGEyYWE2OSAxMDA3NTUKKy0tLSBhL2NsaWVudC9zY3JpcHRzL3NvbGFyaXMKKysrKyBiL2NsaWVudC9zY3JpcHRzL3NvbGFyaXMKK0BAIC0yNiw2ICsyNiwxMSBAQCBleGl0X3dpdGhfaG9va3MoKSB7CisgICAgIC4gL2V0Yy9kaGNsaWVudC1leGl0LWhvb2tzCisgICBmaQorICMgcHJvYmFibHkgc2hvdWxkIGRvIHNvbWV0aGluZyB3aXRoIGV4aXQgc3RhdHVzIG9mIHRoZSBsb2NhbCBzY3JpcHQKKysgIGlmIFsgeCRkaGNfZGJ1cyAhPSB4IC1hICRleGl0X3N0YXR1cyAtZXEgMCBdOyB0aGVuCisrICAgIGRidXMtc2VuZCAtLXN5c3RlbSAtLWRlc3Q9Y29tLnJlZGhhdC5kaGNwIFwKKysgICAgICAtLXR5cGU9bWV0aG9kX2NhbGwgL2NvbS9yZWRoYXQvZGhjcC8kaW50ZXJmYWNlIGNvbS5yZWRoYXQuZGhjcC5zZXQgXAorKyAgICAgICdzdHJpbmc6JyJgZW52IHwgZ3JlcCAtRXYgJ14oUEFUSHxTSExWTHxffFBXRHxkaGNfZGJ1cylcPSdgIgorKyAgZmkKKyAgIGV4aXQgJGV4aXRfc3RhdHVzCisgfQorIAorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC8wMDAzLWxpbmstd2l0aC1sY3J5cHRvLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwLzAwMDMtbGluay13aXRoLWxjcnlwdG8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEwYzdiNgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC8wMDAzLWxpbmstd2l0aC1sY3J5cHRvLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gZDgwYmQ3OTIzMjNkYmQ1NjI2OTMwOWY4NWI0NTA2ZWI2YjFiNjBlOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KK0RhdGU6IFR1ZSwgMTUgQXVnIDIwMTcgMTU6MDU6NDcgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAwMy8xMV0gbGluayB3aXRoIGxjcnlwdG8KKworRnJvbSA0LjIuMCBmaW5hbCByZWxlYXNlLCAtbGNyeXB0byBjaGVjayB3YXMgcmVtb3ZlZCBhbmQgd2UgY29tcGlsZQorc3RhdGljIGxpYnJhcmllcworZnJvbSBiaW5kIHRoYXQgYXJlIGxpbmtlZCB0byBsaWJjcnlwdG8uIFRoaXMgaXMgd2h5IGkgYWRkZWQgYSBwYXRjaCBpbgorb3JkZXIgdG8gYWRkCistbGNyeXB0byB0byBMSUJTLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KKworUmViYXNlIHRvIDQuMy42CitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGNkZmEzNTIuLjQ0ZmI1N2UgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTU5MSw2ICs1OTEsMTAgQEAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbW3ZvaWQgZm9vKCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKKyAjIExvb2sgZm9yIG9wdGlvbmFsIGhlYWRlcnMuCisgQUNfQ0hFQ0tfSEVBREVSUyhzeXMvc29ja2V0LmggbmV0L2lmX2RsLmggbmV0L2lmNi5oIHJlZ2V4LmgpCisgCisrIyBmaW5kIGFuIE1ENSBsaWJyYXJ5CisrQUNfU0VBUkNIX0xJQlMoTUQ1X0luaXQsIFtjcnlwdG9dKQorK0FDX1NFQVJDSF9MSUJTKE1ENUluaXQsIFtjcnlwdG9dKQorKworICMgU29sYXJpcyBuZWVkcyBzb21lIGxpYnJhcmllcyBmb3IgZnVuY3Rpb25zCisgQUNfU0VBUkNIX0xJQlMoc29ja2V0LCBbc29ja2V0XSkKKyBBQ19TRUFSQ0hfTElCUyhpbmV0X250b2EsIFtuc2xdKQorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC8wMDA0LUZpeC1vdXQtb2YtdHJlZS1idWlsZHMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvMDAwNC1GaXgtb3V0LW9mLXRyZWUtYnVpbGRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMWQ4NjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvMDAwNC1GaXgtb3V0LW9mLXRyZWUtYnVpbGRzLnBhdGNoCkBAIC0wLDAgKzEsMTAwIEBACitGcm9tIGNjY2VjMDM0NGQ2OGRhYzQxMDBiNmYyNjBlZTI0ZTdjMmRhOWRmZGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDE1IEF1ZyAyMDE3IDE1OjA4OjIyICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMTFdIEZpeCBvdXQgb2YgdHJlZSBidWlsZHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JQIDIwMTMvMDMvMjEKKworUmViYXNlIHRvIDQuMy42CisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNsaWVudC9NYWtlZmlsZS5hbSAgfCA0ICsrLS0KKyBjb21tb24vTWFrZWZpbGUuYW0gIHwgMyArKy0KKyBkaGNwY3RsL01ha2VmaWxlLmFtIHwgMiArKworIG9tYXBpcC9NYWtlZmlsZS5hbSAgfCAxICsKKyByZWxheS9NYWtlZmlsZS5hbSAgIHwgMiArLQorIHNlcnZlci9NYWtlZmlsZS5hbSAgfCAyICstCisgNiBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jbGllbnQvTWFrZWZpbGUuYW0gYi9jbGllbnQvTWFrZWZpbGUuYW0KK2luZGV4IDJjYjgzZDguLjQ3MzBiYjMgMTAwNjQ0CistLS0gYS9jbGllbnQvTWFrZWZpbGUuYW0KKysrKyBiL2NsaWVudC9NYWtlZmlsZS5hbQorQEAgLTcsMTEgKzcsMTEgQEAgU1VCRElSUyA9IC4gdGVzdHMKKyBCSU5ETElCRElSID0gQEJJTkRESVJAL2xpYgorIAorIEFNX0NQUEZMQUdTID0gLURDTElFTlRfUEFUSD0nIlBBVEg9JChzYmluZGlyKTovc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbiInIFwKKy0JICAgICAgLURMT0NBTFNUQVRFRElSPSciJChsb2NhbHN0YXRlZGlyKSInCisrCSAgICAgIC1ETE9DQUxTVEFURURJUj0nIiQobG9jYWxzdGF0ZWRpcikiJyAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKKyAKKyBkaXN0X3N5c2NvbmZfREFUQSA9IGRoY2xpZW50LmNvbmYuZXhhbXBsZQorIHNiaW5fUFJPR1JBTVMgPSBkaGNsaWVudAorLWRoY2xpZW50X1NPVVJDRVMgPSBjbHBhcnNlLmMgZGhjbGllbnQuYyBkaGM2LmMgXAorK2RoY2xpZW50X1NPVVJDRVMgPSAkKHNyY2RpcikvY2xwYXJzZS5jICQoc3JjZGlyKS9kaGNsaWVudC5jICQoc3JjZGlyKS9kaGM2LmMgXAorIAkJICAgc2NyaXB0cy9ic2RvcyBzY3JpcHRzL2ZyZWVic2Qgc2NyaXB0cy9saW51eCBzY3JpcHRzL21hY29zIFwKKyAJCSAgIHNjcmlwdHMvbmV0YnNkIHNjcmlwdHMvbmV4dHN0ZXAgc2NyaXB0cy9vcGVuYnNkIFwKKyAJCSAgIHNjcmlwdHMvc29sYXJpcyBzY3JpcHRzL29wZW53cnQKK2RpZmYgLS1naXQgYS9jb21tb24vTWFrZWZpbGUuYW0gYi9jb21tb24vTWFrZWZpbGUuYW0KK2luZGV4IDExM2FlZTguLjBmMjRmYmIgMTAwNjQ0CistLS0gYS9jb21tb24vTWFrZWZpbGUuYW0KKysrKyBiL2NvbW1vbi9NYWtlZmlsZS5hbQorQEAgLTEsNCArMSw1IEBACistQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikgLURMT0NBTFNUQVRFRElSPSciQGxvY2Fsc3RhdGVkaXJAIicKKytBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcyAtSSQodG9wX3NyY2RpcikgLURMT0NBTFNUQVRFRElSPSciQGxvY2Fsc3RhdGVkaXJAIicKKysKKyBBTV9DRkxBR1MgPSAkKExEQVBfQ0ZMQUdTKQorIAorIG5vaW5zdF9MSUJSQVJJRVMgPSBsaWJkaGNwLmEKK2RpZmYgLS1naXQgYS9kaGNwY3RsL01ha2VmaWxlLmFtIGIvZGhjcGN0bC9NYWtlZmlsZS5hbQoraW5kZXggY2ViMGRlMS4uYmE4ZGQ4YiAxMDA2NDQKKy0tLSBhL2RoY3BjdGwvTWFrZWZpbGUuYW0KKysrKyBiL2RoY3BjdGwvTWFrZWZpbGUuYW0KK0BAIC0xLDUgKzEsNyBAQAorIEJJTkRMSUJESVIgPSBAQklORERJUkAvbGliCisgCisrQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMgLUkkKHRvcF9zcmNkaXIpCisrCisgYmluX1BST0dSQU1TID0gb21zaGVsbAorIGxpYl9MSUJSQVJJRVMgPSBsaWJkaGNwY3RsLmEKKyBub2luc3RfUFJPR1JBTVMgPSBjbHRlc3QKK2RpZmYgLS1naXQgYS9vbWFwaXAvTWFrZWZpbGUuYW0gYi9vbWFwaXAvTWFrZWZpbGUuYW0KK2luZGV4IDQ0NmE1OTQuLmRkMWFmYTAgMTAwNjQ0CistLS0gYS9vbWFwaXAvTWFrZWZpbGUuYW0KKysrKyBiL29tYXBpcC9NYWtlZmlsZS5hbQorQEAgLTEsNCArMSw1IEBACisgQklORExJQkRJUiA9IEBCSU5ERElSQC9saWIKKytBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcworIAorIGxpYl9MSUJSQVJJRVMgPSBsaWJvbWFwaS5hCisgbm9pbnN0X1BST0dSQU1TID0gc3Z0ZXN0CitkaWZmIC0tZ2l0IGEvcmVsYXkvTWFrZWZpbGUuYW0gYi9yZWxheS9NYWtlZmlsZS5hbQoraW5kZXggMzA2MGVjYS4uNmQ2NTJmNiAxMDA2NDQKKy0tLSBhL3JlbGF5L01ha2VmaWxlLmFtCisrKysgYi9yZWxheS9NYWtlZmlsZS5hbQorQEAgLTEsNiArMSw2IEBACisgQklORExJQkRJUiA9IEBCSU5ERElSQC9saWIKKyAKKy1BTV9DUFBGTEFHUyA9IC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInCisrQU1fQ1BQRkxBR1MgPSAtRExPQ0FMU1RBVEVESVI9JyJAbG9jYWxzdGF0ZWRpckAiJyAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKKyAKKyBzYmluX1BST0dSQU1TID0gZGhjcmVsYXkKKyBkaGNyZWxheV9TT1VSQ0VTID0gZGhjcmVsYXkuYworZGlmZiAtLWdpdCBhL3NlcnZlci9NYWtlZmlsZS5hbSBiL3NlcnZlci9NYWtlZmlsZS5hbQoraW5kZXggNTRmZWVkZi4uMzk5MGI5YyAxMDA2NDQKKy0tLSBhL3NlcnZlci9NYWtlZmlsZS5hbQorKysrIGIvc2VydmVyL01ha2VmaWxlLmFtCitAQCAtNiw3ICs2LDcgQEAgU1VCRElSUyA9IC4gdGVzdHMKKyAKKyBCSU5ETElCRElSID0gQEJJTkRESVJAL2xpYgorIAorLUFNX0NQUEZMQUdTID0gLUkuLiAtRExPQ0FMU1RBVEVESVI9JyJAbG9jYWxzdGF0ZWRpckAiJworK0FNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpIC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcworIAorIGRpc3Rfc3lzY29uZl9EQVRBID0gZGhjcGQuY29uZi5leGFtcGxlCisgc2Jpbl9QUk9HUkFNUyA9IGRoY3BkCistLSAKKzEuOC4zLjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwLzAwMDUtZGhjcC1jbGllbnQtZml4LWludm9rZS1kaGNsaWVudC1zY3JpcHQtZmFpbGVkLW9uLVJlYS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC8wMDA1LWRoY3AtY2xpZW50LWZpeC1pbnZva2UtZGhjbGllbnQtc2NyaXB0LWZhaWxlZC1vbi1SZWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ1NjM4MQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC8wMDA1LWRoY3AtY2xpZW50LWZpeC1pbnZva2UtZGhjbGllbnQtc2NyaXB0LWZhaWxlZC1vbi1SZWEucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRnJvbSAyZThmZjBlNGY2ZDM5ZTM0NmVhODZiOGM1MTRhYjRjY2M3OGZhMzU5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAxNSBBdWcgMjAxNyAxNToyNDoxNCArMDgwMAorU3ViamVjdDogW1BBVENIIDA1LzExXSBkaGNwLWNsaWVudDogZml4IGludm9rZSBkaGNsaWVudC1zY3JpcHQgZmFpbGVkIG9uCisgUmVhZC1vbmx5IGZpbGUgc3lzdGVtCisKK0luIHJlYWQtb25seSBmaWxlIHN5c3RlbSwgJy9ldGMnIGlzIG9uIHRoZSByZWFkb25seSBwYXJ0aXRpb24sCithbmQgJy9ldGMvcmVzb2x2LmNvbmYnIGlzIHN5bWxpbmtlZCB0byBhIHNlcGFyYXRlIHdyaXRhYmxlCitwYXJ0aXRpb24uCisKK0luIHRoaXMgc2l0dWF0aW9uLCB3ZSBjcmVhdGUgdGVtcCBmaWxlcyAncmVzb2x2LmNvbmYuZGhjbGllbnQtbmV3JworaW4gL3RtcCBkaXIuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBjbGllbnQvc2NyaXB0cy9saW51eCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NsaWVudC9zY3JpcHRzL2xpbnV4IGIvY2xpZW50L3NjcmlwdHMvbGludXgKK2luZGV4IDNkNDQ3YjYuLjMxMjJhNzUgMTAwNzU1CistLS0gYS9jbGllbnQvc2NyaXB0cy9saW51eAorKysrIGIvY2xpZW50L3NjcmlwdHMvbGludXgKK0BAIC00MCw3ICs0MCw3IEBAIG1ha2VfcmVzb2x2X2NvbmYoKSB7CisgICAgICMgREhDUHY0CisgICAgIGlmIFsgLW4gIiRuZXdfZG9tYWluX3NlYXJjaCIgXSB8fCBbIC1uICIkbmV3X2RvbWFpbl9uYW1lIiBdIHx8CisgICAgICAgIFsgLW4gIiRuZXdfZG9tYWluX25hbWVfc2VydmVycyIgXTsgdGhlbgorLSAgICAgICAgbmV3X3Jlc29sdl9jb25mPS9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQtbmV3CisrICAgICAgICBuZXdfcmVzb2x2X2NvbmY9L3RtcC9yZXNvbHYuY29uZi5kaGNsaWVudC1uZXcKKyAgICAgICAgIHJtIC1mICRuZXdfcmVzb2x2X2NvbmYKKyAKKyAgICAgICAgIGlmIFsgLW4gIiRuZXdfZG9tYWluX25hbWUiIF07IHRoZW4KKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvMDAwNi1zaXRlLmgtZW5hYmxlLWdlbnRsZS1zaHV0ZG93bi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC8wMDA2LXNpdGUuaC1lbmFibGUtZ2VudGxlLXNodXRkb3duLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MmIyODMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvMDAwNi1zaXRlLmgtZW5hYmxlLWdlbnRsZS1zaHV0ZG93bi5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDAxNjQxZDE0NmU0ZTZiZWE5NTRlNGE0ZWUxZjYyMzBiODIyNjY1YjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDE1IEF1ZyAyMDE3IDE1OjM3OjQ5ICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMDYvMTFdIHNpdGUuaDogZW5hYmxlIGdlbnRsZSBzaHV0ZG93bgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CisKK1JlYmFzZSB0byA0LjMuNgorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgaW5jbHVkZXMvc2l0ZS5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvaW5jbHVkZXMvc2l0ZS5oIGIvaW5jbHVkZXMvc2l0ZS5oCitpbmRleCAyODBmYmI5Li5lNmMyOTcyIDEwMDY0NAorLS0tIGEvaW5jbHVkZXMvc2l0ZS5oCisrKysgYi9pbmNsdWRlcy9zaXRlLmgKK0BAIC0yOTYsNyArMjk2LDcgQEAKKyAgICBzaXR1YXRpb25zLiAgV2UgcGxhbiB0byByZXZpc2l0IHRoaXMgZmVhdHVyZSBhbmQgbWF5CisgICAgbWFrZSBub24tYmFja3dhcmRzIGNvbXBhdGlibGUgY2hhbmdlcyBpbmNsdWRpbmcgdGhlCisgICAgcmVtb3ZhbCBvZiB0aGlzIGRlZmluZS4gIFVzZSBhdCB5b3VyIG93biByaXNrLiAgKi8KKy0vKiAjZGVmaW5lIEVOQUJMRV9HRU5UTEVfU0hVVERPV04gKi8KKysjZGVmaW5lIEVOQUJMRV9HRU5UTEVfU0hVVERPV04KKyAKKyAvKiBJbmNsdWRlIG9sZCBlcnJvciBjb2Rlcy4gIFRoaXMgaXMgcHJvdmlkZWQgaW4gY2FzZSB5b3UKKyAgICBhcmUgYnVpbGRpbmcgYW4gZXh0ZXJuYWwgcHJvZ3JhbSBzaW1pbGFyIHRvIG9tc2hlbGwgZm9yCistLSAKKzEuOC4zLjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwLzAwMDctQWRkLWNvbmZpZ3VyZS1hcmd1bWVudC10by1tYWtlLXRoZS1saWJ4bWwyLWRlcGVuZGVuYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC8wMDA3LUFkZC1jb25maWd1cmUtYXJndW1lbnQtdG8tbWFrZS10aGUtbGlieG1sMi1kZXBlbmRlbmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNjMjZlYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC8wMDA3LUFkZC1jb25maWd1cmUtYXJndW1lbnQtdG8tbWFrZS10aGUtbGlieG1sMi1kZXBlbmRlbmMucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSA3MTA3NTExZmQyMDlmMDhmOWE5NmY4OTM4MDQxYWU0OGYzMjk1ODk1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hyaXN0b3BoZXIgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KK0RhdGU6IFR1ZSwgMTUgQXVnIDIwMTcgMTY6MTc6NDkgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAwNy8xMV0gQWRkIGNvbmZpZ3VyZSBhcmd1bWVudCB0byBtYWtlIHRoZSBsaWJ4bWwyIGRlcGVuZGVuY3kKKyBleHBsaWNpdCBhbmQgZGV0ZXJtaW5pc2l0aWMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorCitSZWJhc2UgdG8gNC4zLjYKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMTEgKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA0NGZiNTdlLi44ZTlmNTA5IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02MTEsNiArNjExLDE3IEBAIEFDX0NIRUNLX0ZVTkNTKHN0cmxjYXQpCisgIyBGb3IgSFAvVVggd2UgbmVlZCAtbGlwdjYgZm9yIGlmX25hbWV0b2luZGV4LCBwZXJoYXBzIG90aGVycy4KKyBBQ19TRUFSQ0hfTElCUyhpZl9uYW1ldG9pbmRleCwgW2lwdjZdKQorIAorK0FDX0FSR19XSVRIKGxpYnhtbDIsCisrCUFTX0hFTFBfU1RSSU5HKFstLXdpdGgtbGlieG1sMl0sIFtsaW5rIGFnYWluc3QgbGlieG1sMi4gdGhpcyBpcyBuZWVkZWQgaWYgYmluZCB3YXMgYnVpbHQgd2l0aCB4bWwyIHN1cHBvcnQgZW5hYmxlZF0pLAorKwl3aXRoX2xpYnhtbDI9IiR3aXRodmFsIiwgd2l0aF9saWJ4bWwyPSJubyIpCisrCisraWYgdGVzdCB4JHdpdGhfbGlieG1sMiAhPSB4bm87IHRoZW4KKysJQUNfU0VBUkNIX0xJQlMoeG1sVGV4dFdyaXRlclN0YXJ0RWxlbWVudCwgW3htbDJdLAorKwkJW2lmIHRlc3QgeCR3aXRoX2xpYnhtbDIgIT0geGF1dG87IHRoZW4KKysJCQlBQ19NU0dfRkFJTFVSRShbKioqIENhbm5vdCBmaW5kIHhtbFRleHRXcml0ZXJTdGFydEVsZW1lbnQgd2l0aCAtbHhtbDIgYW5kIGxpYnhtbDIgd2FzIHJlcXVlc3RlZF0pCisrCQlmaV0pCisrZmkKKysKKyAjIGNoZWNrIGZvciAvZGV2L3JhbmRvbSAoZGVjbGFyZXMgSEFWRV9ERVZfUkFORE9NKQorIEFDX01TR19DSEVDS0lORyhmb3IgcmFuZG9tIGRldmljZSkKKyBBQ19BUkdfV0lUSChyYW5kb21kZXYsCistLSAKKzEuOC4zLjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwLzAwMDgtdHdlYWstdG8tc3VwcG9ydC1leHRlcm5hbC1iaW5kLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwLzAwMDgtdHdlYWstdG8tc3VwcG9ydC1leHRlcm5hbC1iaW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNmQxOGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvMDAwOC10d2Vhay10by1zdXBwb3J0LWV4dGVybmFsLWJpbmQucGF0Y2gKQEAgLTAsMCArMSwxMTcgQEAKK0Zyb20gOTI4NzVmNWNjNDQ5MTQ1MTVlNTBjMTFjNTAzYTA5Y2VjOTA0OTdiMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFNhdCwgMTEgSnVuIDIwMTYgMjI6NTE6NDQgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwOC8xMV0gdHdlYWsgdG8gc3VwcG9ydCBleHRlcm5hbCBiaW5kCisKK1R3ZWFrIHRoZSBleHRlcm5hbCBiaW5kIHRvIG9lLWNvcmUncyBzeXNyb290IHJhdGhlciB0aGFuCitleHRlcm5hbCBiaW5kIHNvdXJjZSBidWlsZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIDxvZS1jb3JlIHNwZWNpZmljPgorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBjbGllbnQvTWFrZWZpbGUuYW0gICAgICAgfCAyICstCisgY2xpZW50L3Rlc3RzL01ha2VmaWxlLmFtIHwgMiArLQorIGNvbW1vbi90ZXN0cy9NYWtlZmlsZS5hbSB8IDIgKy0KKyBkaGNwY3RsL01ha2VmaWxlLmFtICAgICAgfCAyICstCisgb21hcGlwL01ha2VmaWxlLmFtICAgICAgIHwgMiArLQorIHJlbGF5L01ha2VmaWxlLmFtICAgICAgICB8IDIgKy0KKyBzZXJ2ZXIvTWFrZWZpbGUuYW0gICAgICAgfCAyICstCisgc2VydmVyL3Rlc3RzL01ha2VmaWxlLmFtIHwgMiArLQorIDggZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY2xpZW50L01ha2VmaWxlLmFtIGIvY2xpZW50L01ha2VmaWxlLmFtCitpbmRleCA0NzMwYmIzLi44NGQ4MTMxIDEwMDY0NAorLS0tIGEvY2xpZW50L01ha2VmaWxlLmFtCisrKysgYi9jbGllbnQvTWFrZWZpbGUuYW0KK0BAIC00LDcgKzQsNyBAQAorICMgcHJvZHVjdGlvbiBjb2RlLiBTYWRseSwgd2UgYXJlIG5vdCB0aGVyZSB5ZXQuCisgU1VCRElSUyA9IC4gdGVzdHMKKyAKKy1CSU5ETElCRElSID0gQEJJTkRESVJAL2xpYgorK0JJTkRMSUJESVIgPSBAQklORERJUkAKKyAKKyBBTV9DUFBGTEFHUyA9IC1EQ0xJRU5UX1BBVEg9JyJQQVRIPSQoc2JpbmRpcik6L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4iJyBcCisgCSAgICAgIC1ETE9DQUxTVEFURURJUj0nIiQobG9jYWxzdGF0ZWRpcikiJyAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKK2RpZmYgLS1naXQgYS9jbGllbnQvdGVzdHMvTWFrZWZpbGUuYW0gYi9jbGllbnQvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IDUwMzFkMGMuLmE4ZGZkMjYgMTAwNjQ0CistLS0gYS9jbGllbnQvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL2NsaWVudC90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTEsNiArMSw2IEBACisgU1VCRElSUyA9IC4KKyAKKy1CSU5ETElCRElSID0gQEJJTkRESVJAL2xpYgorK0JJTkRMSUJESVIgPSBAQklORERJUkAKKyAKKyBBTV9DUFBGTEFHUyA9ICQoQVRGX0NGTEFHUykgLURVTklUX1RFU1QgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGVzCisgQU1fQ1BQRkxBR1MgKz0gLUlAQklORERJUkAvaW5jbHVkZSAtSSQodG9wX3NyY2RpcikKK2RpZmYgLS1naXQgYS9jb21tb24vdGVzdHMvTWFrZWZpbGUuYW0gYi9jb21tb24vdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IGY2YTQzZTQuLjJmOThkMjIgMTAwNjQ0CistLS0gYS9jb21tb24vdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL2NvbW1vbi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTEsNiArMSw2IEBACisgU1VCRElSUyA9IC4KKyAKKy1CSU5ETElCRElSID0gQEJJTkRESVJAL2xpYgorK0JJTkRMSUJESVIgPSBAQklORERJUkAKKyAKKyBBTV9DUFBGTEFHUyA9ICQoQVRGX0NGTEFHUykgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGVzCisgCitkaWZmIC0tZ2l0IGEvZGhjcGN0bC9NYWtlZmlsZS5hbSBiL2RoY3BjdGwvTWFrZWZpbGUuYW0KK2luZGV4IGJhOGRkOGIuLjliMjQ4NmUgMTAwNjQ0CistLS0gYS9kaGNwY3RsL01ha2VmaWxlLmFtCisrKysgYi9kaGNwY3RsL01ha2VmaWxlLmFtCitAQCAtMSw0ICsxLDQgQEAKKy1CSU5ETElCRElSID0gQEJJTkRESVJAL2xpYgorK0JJTkRMSUJESVIgPSBAQklORERJUkAKKyAKKyBBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcyAtSSQodG9wX3NyY2RpcikKKyAKK2RpZmYgLS1naXQgYS9vbWFwaXAvTWFrZWZpbGUuYW0gYi9vbWFwaXAvTWFrZWZpbGUuYW0KK2luZGV4IGRkMWFmYTAuLmU0YTg1OTkgMTAwNjQ0CistLS0gYS9vbWFwaXAvTWFrZWZpbGUuYW0KKysrKyBiL29tYXBpcC9NYWtlZmlsZS5hbQorQEAgLTEsNCArMSw0IEBACistQklORExJQkRJUiA9IEBCSU5ERElSQC9saWIKKytCSU5ETElCRElSID0gQEJJTkRESVJACisgQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKKyAKKyBsaWJfTElCUkFSSUVTID0gbGlib21hcGkuYQorZGlmZiAtLWdpdCBhL3JlbGF5L01ha2VmaWxlLmFtIGIvcmVsYXkvTWFrZWZpbGUuYW0KK2luZGV4IDZkNjUyZjYuLmIzYmY1NzggMTAwNjQ0CistLS0gYS9yZWxheS9NYWtlZmlsZS5hbQorKysrIGIvcmVsYXkvTWFrZWZpbGUuYW0KK0BAIC0xLDQgKzEsNCBAQAorLUJJTkRMSUJESVIgPSBAQklORERJUkAvbGliCisrQklORExJQkRJUiA9IEBCSU5ERElSQAorIAorIEFNX0NQUEZMQUdTID0gLURMT0NBTFNUQVRFRElSPSciQGxvY2Fsc3RhdGVkaXJAIicgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGVzCisgCitkaWZmIC0tZ2l0IGEvc2VydmVyL01ha2VmaWxlLmFtIGIvc2VydmVyL01ha2VmaWxlLmFtCitpbmRleCAzOTkwYjljLi5iNWQ4YzJkIDEwMDY0NAorLS0tIGEvc2VydmVyL01ha2VmaWxlLmFtCisrKysgYi9zZXJ2ZXIvTWFrZWZpbGUuYW0KK0BAIC00LDcgKzQsNyBAQAorICMgcHJvZHVjdGlvbiBjb2RlLiBTYWRseSwgd2UgYXJlIG5vdCB0aGVyZSB5ZXQuCisgU1VCRElSUyA9IC4gdGVzdHMKKyAKKy1CSU5ETElCRElSID0gQEJJTkRESVJAL2xpYgorK0JJTkRMSUJESVIgPSBAQklORERJUkAKKyAKKyBBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKSAtRExPQ0FMU1RBVEVESVI9JyJAbG9jYWxzdGF0ZWRpckAiJyAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKKyAKK2RpZmYgLS1naXQgYS9zZXJ2ZXIvdGVzdHMvTWFrZWZpbGUuYW0gYi9zZXJ2ZXIvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IGE4N2M1ZTcuLjk4MjEwODEgMTAwNjQ0CistLS0gYS9zZXJ2ZXIvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL3NlcnZlci90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTEsNiArMSw2IEBACisgU1VCRElSUyA9IC4KKyAKKy1CSU5ETElCRElSID0gQEJJTkRESVJAL2xpYgorK0JJTkRMSUJESVIgPSBAQklORERJUkAKKyAKKyBBTV9DUFBGTEFHUyA9ICQoQVRGX0NGTEFHUykgLURVTklUX1RFU1QgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGVzCisgQU1fQ1BQRkxBR1MgKz0gLUlAQklORERJUkAvaW5jbHVkZSAtSSQodG9wX3NyY2RpcikKKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvMDAwOS1yZW1vdmUtZGhjbGllbnQtc2NyaXB0LWJhc2gtZGVwZW5kZW5jeS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC8wMDA5LXJlbW92ZS1kaGNsaWVudC1zY3JpcHQtYmFzaC1kZXBlbmRlbmN5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMmI2ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvMDAwOS1yZW1vdmUtZGhjbGllbnQtc2NyaXB0LWJhc2gtZGVwZW5kZW5jeS5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIGYzZjhiNzcyNmU1MGUyNGVmM2VkZjVmYTVhMTdlMzFkMzkxMThkN2UgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgorRGF0ZTogVHVlLCAxNSBBdWcgMjAxNyAxNTo0OTozMSArMDgwMAorU3ViamVjdDogW1BBVENIIDA5LzExXSByZW1vdmUgZGhjbGllbnQtc2NyaXB0IGJhc2ggZGVwZW5kZW5jeQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgorCitSZWJhc2UgdG8gNC4zLjYKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNsaWVudC9zY3JpcHRzL2xpbnV4IHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY2xpZW50L3NjcmlwdHMvbGludXggYi9jbGllbnQvc2NyaXB0cy9saW51eAoraW5kZXggMzEyMmE3NS4uMTcxMmQ3ZCAxMDA3NTUKKy0tLSBhL2NsaWVudC9zY3JpcHRzL2xpbnV4CisrKysgYi9jbGllbnQvc2NyaXB0cy9saW51eAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAjIGRoY2xpZW50LXNjcmlwdCBmb3IgTGludXguIERhbiBIYWxiZXJ0LCBNYXJjaCwgMTk5Ny4KKyAjIFVwZGF0ZWQgZm9yIExpbnV4IDIuWzEyXSBieSBCcmlhbiBKLiBNdXJyZWxsLCBKYW51YXJ5IDE5OTkuCisgIyBObyBndWFyYW50ZWVzIGFib3V0IHRoaXMuIEknbSBhIG5vdmljZSBhdCB0aGUgZGV0YWlscyBvZiBMaW51eAorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC8wMDEwLWJ1aWxkLXNoYXJlZC1saWJzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwLzAwMTAtYnVpbGQtc2hhcmVkLWxpYnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEyODczMQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC8wMDEwLWJ1aWxkLXNoYXJlZC1saWJzLnBhdGNoCkBAIC0wLDAgKzEsMjA4IEBACitGcm9tIDc2YzM3MGE5MjllNWFiNWRiYzgxYzJmYmNmNGU1MGY0ZmJjMDhjZTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTUgQXVnIDIwMTcgMTU6NTM6MzcgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAxMC8xMV0gYnVpbGQgc2hhcmVkIGxpYnMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1BvcnQgcGF0Y2hlcyBmcm9tIEZlZG9yYSB0byBidWlsZCBzaGFyZWQgbGlicyByYXRoZXIgdGhhbiBzdGF0aWMgbGlicy4KKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKK1JlYmFzZSB0byA0LjMuNgorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBjbGllbnQvTWFrZWZpbGUuYW0gICAgICAgfCAgNCArKy0tCisgY29tbW9uL3Rlc3RzL01ha2VmaWxlLmFtIHwgMTMgKysrKystLS0tLS0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICB8IDEyICsrLS0tLS0tLS0tLQorIGRoY3BjdGwvTWFrZWZpbGUuYW0gICAgICB8IDE0ICsrKysrKy0tLS0tLS0tCisgb21hcGlwL01ha2VmaWxlLmFtICAgICAgIHwgIDcgKysrLS0tLQorIHJlbGF5L01ha2VmaWxlLmFtICAgICAgICB8ICA1ICsrLS0tCisgc2VydmVyL01ha2VmaWxlLmFtICAgICAgIHwgIDcgKysrLS0tLQorIHNlcnZlci90ZXN0cy9NYWtlZmlsZS5hbSB8ICA3ICsrKy0tLS0KKyA4IGZpbGVzIGNoYW5nZWQsIDI2IGluc2VydGlvbnMoKyksIDQzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY2xpZW50L01ha2VmaWxlLmFtIGIvY2xpZW50L01ha2VmaWxlLmFtCitpbmRleCA4NGQ4MTMxLi5lNzc2YmYwIDEwMDY0NAorLS0tIGEvY2xpZW50L01ha2VmaWxlLmFtCisrKysgYi9jbGllbnQvTWFrZWZpbGUuYW0KK0BAIC0xNSw3ICsxNSw3IEBAIGRoY2xpZW50X1NPVVJDRVMgPSAkKHNyY2RpcikvY2xwYXJzZS5jICQoc3JjZGlyKS9kaGNsaWVudC5jICQoc3JjZGlyKS9kaGM2LmMgXAorIAkJICAgc2NyaXB0cy9ic2RvcyBzY3JpcHRzL2ZyZWVic2Qgc2NyaXB0cy9saW51eCBzY3JpcHRzL21hY29zIFwKKyAJCSAgIHNjcmlwdHMvbmV0YnNkIHNjcmlwdHMvbmV4dHN0ZXAgc2NyaXB0cy9vcGVuYnNkIFwKKyAJCSAgIHNjcmlwdHMvc29sYXJpcyBzY3JpcHRzL29wZW53cnQKKy1kaGNsaWVudF9MREFERCA9IC4uL2NvbW1vbi9saWJkaGNwLmEgLi4vb21hcGlwL2xpYm9tYXBpLmEgJChCSU5ETElCRElSKS9saWJpcnMuYSBcCistCQkgJChCSU5ETElCRElSKS9saWJkbnMuYSAkKEJJTkRMSUJESVIpL2xpYmlzY2NmZy5hICQoQklORExJQkRJUikvbGliaXNjLmEKKytkaGNsaWVudF9MREFERCA9IC4uL2NvbW1vbi9saWJkaGNwLmEgLi4vb21hcGlwL2xpYm9tYXBpLmxhIFwKKysJCSAgLUwkKEJJTkRMSUJESVIpIC1saXJzIC1sZG5zIC1saXNjY2ZnIC1saXNjCisgbWFuX01BTlMgPSBkaGNsaWVudC44IGRoY2xpZW50LXNjcmlwdC44IGRoY2xpZW50LmNvbmYuNSBkaGNsaWVudC5sZWFzZXMuNQorIEVYVFJBX0RJU1QgPSAkKG1hbl9NQU5TKQorZGlmZiAtLWdpdCBhL2NvbW1vbi90ZXN0cy9NYWtlZmlsZS5hbSBiL2NvbW1vbi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggMmY5OGQyMi4uODc0NWU4OCAxMDA2NDQKKy0tLSBhL2NvbW1vbi90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvY29tbW9uL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMTUsMjYgKzE1LDIzIEBAIEFURl9URVNUUyArPSBhbGxvY191bml0dGVzdCBkbnNfdW5pdHRlc3QgbWlzY191bml0dGVzdCBuc19uYW1lX3VuaXR0ZXN0CisgYWxsb2NfdW5pdHRlc3RfU09VUkNFUyA9IHRlc3RfYWxsb2MuYyAkKHRvcF9zcmNkaXIpL3Rlc3RzL3RfYXBpX2RoY3AuYworIGFsbG9jX3VuaXR0ZXN0X0xEQUREID0gJChBVEZfTERGTEFHUykKKyBhbGxvY191bml0dGVzdF9MREFERCArPSAuLi9saWJkaGNwLmEgIFwKKy0JLi4vLi4vb21hcGlwL2xpYm9tYXBpLmEgJChCSU5ETElCRElSKS9saWJpcnMuYSBcCistCSQoQklORExJQkRJUikvbGliZG5zLmEgJChCSU5ETElCRElSKS9saWJpc2NjZmcuYSAgJChCSU5ETElCRElSKS9saWJpc2MuYQorKwkuLi8uLi9vbWFwaXAvbGlib21hcGkubGEgLUwkKEJJTkRMSUJESVIpIC1sZG5zIC1saXNjY2ZnIC1saXNjCisgCisgZG5zX3VuaXR0ZXN0X1NPVVJDRVMgPSBkbnNfdW5pdHRlc3QuYyAkKHRvcF9zcmNkaXIpL3Rlc3RzL3RfYXBpX2RoY3AuYworIGRuc191bml0dGVzdF9MREFERCA9ICQoQVRGX0xERkxBR1MpCisgZG5zX3VuaXR0ZXN0X0xEQUREICs9IC4uL2xpYmRoY3AuYSAgXAorLQkuLi8uLi9vbWFwaXAvbGlib21hcGkuYSAkKEJJTkRMSUJESVIpL2xpYmlycy5hIFwKKy0JJChCSU5ETElCRElSKS9saWJkbnMuYSAkKEJJTkRMSUJESVIpL2xpYmlzY2NmZy5hICAkKEJJTkRMSUJESVIpL2xpYmlzYy5hCisrCS4uLy4uL29tYXBpcC9saWJvbWFwaS5sYSAtTCQoQklORExJQkRJUikgLWxkbnMgLWxpc2NjZmcgLWxpc2MKKyAKKyBtaXNjX3VuaXR0ZXN0X1NPVVJDRVMgPSBtaXNjX3VuaXR0ZXN0LmMgJCh0b3Bfc3JjZGlyKS90ZXN0cy90X2FwaV9kaGNwLmMKKyBtaXNjX3VuaXR0ZXN0X0xEQUREID0gJChBVEZfTERGTEFHUykKKyBtaXNjX3VuaXR0ZXN0X0xEQUREICs9IC4uL2xpYmRoY3AuYSAgXAorLQkuLi8uLi9vbWFwaXAvbGlib21hcGkuYSAkKEJJTkRMSUJESVIpL2xpYmlycy5hIFwKKy0JJChCSU5ETElCRElSKS9saWJkbnMuYSAkKEJJTkRMSUJESVIpL2xpYmlzY2NmZy5hICAkKEJJTkRMSUJESVIpL2xpYmlzYy5hCisrCS4uLy4uL29tYXBpcC9saWJvbWFwaS5sYSAtTCQoQklORExJQkRJUikgLWxkbnMgLWxpc2NjZmcgLWxpc2MKKyAKKyBuc19uYW1lX3VuaXR0ZXN0X1NPVVJDRVMgPSBuc19uYW1lX3Rlc3QuYyAkKHRvcF9zcmNkaXIpL3Rlc3RzL3RfYXBpX2RoY3AuYworIG5zX25hbWVfdW5pdHRlc3RfTERBREQgPSAkKEFURl9MREZMQUdTKQorIG5zX25hbWVfdW5pdHRlc3RfTERBREQgKz0gLi4vbGliZGhjcC5hICBcCistCS4uLy4uL29tYXBpcC9saWJvbWFwaS5hICQoQklORExJQkRJUikvbGliaXJzLmEgXAorLQkkKEJJTkRMSUJESVIpL2xpYmRucy5hICQoQklORExJQkRJUikvbGliaXNjY2ZnLmEgICQoQklORExJQkRJUikvbGliaXNjLmEKKysJLi4vLi4vb21hcGlwL2xpYm9tYXBpLmEgLUwkKEJJTkRMSUJESVIpIFwKKysJLWxkbnMgLWxpc2NjZmcgLWxpc2MKKyAKKyBjaGVjazogJChBVEZfVEVTVFMpCisgCUBpZiB0ZXN0ICQodG9wX3NyY2RpcikgIT0gJHt0b3BfYnVpbGRkaXJ9OyB0aGVuIFwKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDhlOWY1MDkuLmJmZTk4OGEgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTQ3LDE2ICs0Nyw4IEBAIEFNX0NPTkRJVElPTkFMKENST1NTX0NPTVBJTElORywgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSAieWVzIikKKyAjIFVzZSB0aGlzIHRvIGRlZmluZSBfR05VX1NPVVJDRSB0byBwdWxsIGluIHRoZSBJUHY2IEFkdmFuY2VkIFNvY2tldCBBUEkuCisgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgCistQUNfUFJPR19SQU5MSUIKKy0KKy1BQ19QQVRIX1BST0coQVIsIGFyKQorLUFDX1NVQlNUKEFSKQorLQorLWlmIHRlc3QgIlgkQVIiID0gIlgiOyB0aGVuCistCUFDX01TR19FUlJPUihbCistYXIgcHJvZ3JhbSBub3QgZm91bmQuICBQbGVhc2UgZml4IHlvdXIgUEFUSCB0byBpbmNsdWRlIHRoZSBkaXJlY3RvcnkgaW4KKy13aGljaCBhciByZXNpZGVzLCBvciBzZXQgQVIgaW4gdGhlIGVudmlyb25tZW50IHdpdGggdGhlIGZ1bGwgcGF0aCB0byBhci5dKQorLWZpCisrIyBVc2UgbGlidG9vbCB0byBzaW1wbGlmeSBidWlsZGluZyBvZiBzaGFyZWQgbGlicmFyaWVzCisrQUNfUFJPR19MSUJUT09MCisgCisgQUNfQ09ORklHX0hFQURFUlMoW2luY2x1ZGVzL2NvbmZpZy5oXSkKKyAKK2RpZmYgLS1naXQgYS9kaGNwY3RsL01ha2VmaWxlLmFtIGIvZGhjcGN0bC9NYWtlZmlsZS5hbQoraW5kZXggOWIyNDg2ZS4uNzg0Y2RmNyAxMDA2NDQKKy0tLSBhL2RoY3BjdGwvTWFrZWZpbGUuYW0KKysrKyBiL2RoY3BjdGwvTWFrZWZpbGUuYW0KK0BAIC0zLDE5ICszLDE3IEBAIEJJTkRMSUJESVIgPSBAQklORERJUkAKKyBBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcyAtSSQodG9wX3NyY2RpcikKKyAKKyBiaW5fUFJPR1JBTVMgPSBvbXNoZWxsCistbGliX0xJQlJBUklFUyA9IGxpYmRoY3BjdGwuYQorK2xpYl9MVExJQlJBUklFUyA9IGxpYmRoY3BjdGwubGEKKyBub2luc3RfUFJPR1JBTVMgPSBjbHRlc3QKKyBtYW5fTUFOUyA9IG9tc2hlbGwuMSBkaGNwY3RsLjMKKyBFWFRSQV9ESVNUID0gJChtYW5fTUFOUykKKyAKKyBvbXNoZWxsX1NPVVJDRVMgPSBvbXNoZWxsLmMKKy1vbXNoZWxsX0xEQUREID0gbGliZGhjcGN0bC5hIC4uL2NvbW1vbi9saWJkaGNwLmEgLi4vb21hcGlwL2xpYm9tYXBpLmEgXAorLQkgICAgICAgICQoQklORExJQkRJUikvbGliaXJzLmEgJChCSU5ETElCRElSKS9saWJkbnMuYSBcCistCSAgICAgICAgJChCSU5ETElCRElSKS9saWJpc2NjZmcuYSAkKEJJTkRMSUJESVIpL2xpYmlzYy5hCisrb21zaGVsbF9MREFERCA9IGxpYmRoY3BjdGwubGEgLi4vY29tbW9uL2xpYmRoY3AuYSAuLi9vbWFwaXAvbGlib21hcGkubGEgXAorKwkgICAgICAgIC1MJChCSU5ETElCRElSKSAtbGlycyAtbGRucyAtbGlzY2NmZyAtbGlzYworIAorLWxpYmRoY3BjdGxfYV9TT1VSQ0VTID0gZGhjcGN0bC5jIGNhbGxiYWNrLmMgcmVtb3RlLmMKKytsaWJkaGNwY3RsX2xhX1NPVVJDRVMgPSBkaGNwY3RsLmMgY2FsbGJhY2suYyByZW1vdGUuYworIAorIGNsdGVzdF9TT1VSQ0VTID0gY2x0ZXN0LmMKKy1jbHRlc3RfTERBREQgPSBsaWJkaGNwY3RsLmEgLi4vY29tbW9uL2xpYmRoY3AuYSAuLi9vbWFwaXAvbGlib21hcGkuYSBcCistCSAgICAgICAkKEJJTkRMSUJESVIpL2xpYmlycy5hICQoQklORExJQkRJUikvbGliZG5zLmEgXAorLSAgICAgICAgICAgICAgICQoQklORExJQkRJUikvbGliaXNjY2ZnLmEgJChCSU5ETElCRElSKS9saWJpc2MuYQorK2NsdGVzdF9MREFERCA9IGxpYmRoY3BjdGwubGEgLi4vY29tbW9uL2xpYmRoY3AuYSAuLi9vbWFwaXAvbGlib21hcGkubGEgXAorKwkgICAgICAgLUwkKEJJTkRMSUJESVIpIC1saXJzIC1sZG5zIC1saXNjY2ZnIC1saXNjCitkaWZmIC0tZ2l0IGEvb21hcGlwL01ha2VmaWxlLmFtIGIvb21hcGlwL01ha2VmaWxlLmFtCitpbmRleCBlNGE4NTk5Li5jMGM3YTFlIDEwMDY0NAorLS0tIGEvb21hcGlwL01ha2VmaWxlLmFtCisrKysgYi9vbWFwaXAvTWFrZWZpbGUuYW0KK0BAIC0xLDEwICsxLDEwIEBACisgQklORExJQkRJUiA9IEBCSU5ERElSQAorIEFNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGVzCisgCistbGliX0xJQlJBUklFUyA9IGxpYm9tYXBpLmEKKytsaWJfTFRMSUJSQVJJRVMgPSBsaWJvbWFwaS5sYQorIG5vaW5zdF9QUk9HUkFNUyA9IHN2dGVzdAorIAorLWxpYm9tYXBpX2FfU09VUkNFUyA9IHByb3RvY29sLmMgYnVmZmVyLmMgYWxsb2MuYyByZXN1bHQuYyBjb25uZWN0aW9uLmMgXAorK2xpYm9tYXBpX2xhX1NPVVJDRVMgPSBwcm90b2NvbC5jIGJ1ZmZlci5jIGFsbG9jLmMgcmVzdWx0LmMgY29ubmVjdGlvbi5jIFwKKyAJCSAgICAgZXJyd2Fybi5jIGxpc3RlbmVyLmMgZGlzcGF0Y2guYyBnZW5lcmljLmMgc3VwcG9ydC5jIFwKKyAJCSAgICAgaGFuZGxlLmMgbWVzc2FnZS5jIGNvbnZlcnQuYyBoYXNoLmMgYXV0aC5jIGluZXRfYWRkci5jIFwKKyAJCSAgICAgYXJyYXkuYyB0cmFjZS5jIHRvaXNjLmMgaXNjcHJpbnQuYyBpc2NsaWIuYworQEAgLTEzLDYgKzEzLDUgQEAgbWFuX01BTlMgPSBvbWFwaS4zCisgRVhUUkFfRElTVCA9ICQobWFuX01BTlMpCisgCisgc3Z0ZXN0X1NPVVJDRVMgPSB0ZXN0LmMKKy1zdnRlc3RfTERBREQgPSBsaWJvbWFwaS5hICQoQklORExJQkRJUikvbGliaXJzLmEgJChCSU5ETElCRElSKS9saWJkbnMuYSBcCistCQkkKEJJTkRMSUJESVIpL2xpYmlzY2NmZy5hICQoQklORExJQkRJUikvbGliaXNjLmEKKytzdnRlc3RfTERBREQgPSBsaWJvbWFwaS5sYSAtTCQoQklORExJQkRJUikgLWxpcnMgLWxkbnMgLWxpc2NjZmcgLWxpc2MKKyAKK2RpZmYgLS1naXQgYS9yZWxheS9NYWtlZmlsZS5hbSBiL3JlbGF5L01ha2VmaWxlLmFtCitpbmRleCBiM2JmNTc4Li5mNDcwMDlmIDEwMDY0NAorLS0tIGEvcmVsYXkvTWFrZWZpbGUuYW0KKysrKyBiL3JlbGF5L01ha2VmaWxlLmFtCitAQCAtNCw5ICs0LDggQEAgQU1fQ1BQRkxBR1MgPSAtRExPQ0FMU1RBVEVESVI9JyJAbG9jYWxzdGF0ZWRpckAiJyAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKKyAKKyBzYmluX1BST0dSQU1TID0gZGhjcmVsYXkKKyBkaGNyZWxheV9TT1VSQ0VTID0gZGhjcmVsYXkuYworLWRoY3JlbGF5X0xEQUREID0gLi4vY29tbW9uL2xpYmRoY3AuYSAuLi9vbWFwaXAvbGlib21hcGkuYSBcCistCQkgJChCSU5ETElCRElSKS9saWJpcnMuYSAkKEJJTkRMSUJESVIpL2xpYmRucy5hIFwKKy0JCSAkKEJJTkRMSUJESVIpL2xpYmlzY2NmZy5hICQoQklORExJQkRJUikvbGliaXNjLmEKKytkaGNyZWxheV9MREFERCA9IC4uL2NvbW1vbi9saWJkaGNwLmEgLi4vb21hcGlwL2xpYm9tYXBpLmxhIFwKKysJCSAtTCQoQklORExJQkRJUikgLWxpcnMgLWxkbnMgLWxpc2NjZmcgLWxpc2MKKyBtYW5fTUFOUyA9IGRoY3JlbGF5LjgKKyBFWFRSQV9ESVNUID0gJChtYW5fTUFOUykKKyAKK2RpZmYgLS1naXQgYS9zZXJ2ZXIvTWFrZWZpbGUuYW0gYi9zZXJ2ZXIvTWFrZWZpbGUuYW0KK2luZGV4IGI1ZDhjMmQuLmQ3Zjg3NmQgMTAwNjQ0CistLS0gYS9zZXJ2ZXIvTWFrZWZpbGUuYW0KKysrKyBiL3NlcnZlci9NYWtlZmlsZS5hbQorQEAgLTE1LDEwICsxNSw5IEBAIGRoY3BkX1NPVVJDRVMgPSBkaGNwZC5jIGRoY3AuYyBib290cC5jIGNvbmZwYXJzLmMgZGIuYyBjbGFzcy5jIGZhaWxvdmVyLmMgXAorIAkJZGhjcHY2LmMgbWRiNi5jIGxkYXAuYyBsZGFwX2Nhc2EuYyBsZWFzZWNoYWluLmMgbGRhcF9rcmJfaGVscGVyLmMKKyAKKyBkaGNwZF9DRkxBR1MgPSAkKExEQVBfQ0ZMQUdTKQorLWRoY3BkX0xEQUREID0gLi4vY29tbW9uL2xpYmRoY3AuYSAuLi9vbWFwaXAvbGlib21hcGkuYSBcCistCSAgICAgIC4uL2RoY3BjdGwvbGliZGhjcGN0bC5hICQoQklORExJQkRJUikvbGliaXJzLmEgXAorLQkgICAgICAkKEJJTkRMSUJESVIpL2xpYmRucy5hICQoQklORExJQkRJUikvbGliaXNjY2ZnLmEgXAorLQkgICAgICAkKEJJTkRMSUJESVIpL2xpYmlzYy5hICQoTERBUF9MSUJTKQorK2RoY3BkX0xEQUREID0gLi4vY29tbW9uL2xpYmRoY3AuYSAuLi9vbWFwaXAvbGlib21hcGkubGEgXAorKwkgICAgICAuLi9kaGNwY3RsL2xpYmRoY3BjdGwubGEgLUwkKEJJTkRMSUJESVIpIFwKKysJICAgICAgLWxpcnMgLWxkbnMgLWxpc2NjZmcgLWxpc2MgJChMREFQX0xJQlMpCisgCisgbWFuX01BTlMgPSBkaGNwZC44IGRoY3BkLmNvbmYuNSBkaGNwZC5sZWFzZXMuNQorIEVYVFJBX0RJU1QgPSAkKG1hbl9NQU5TKQorZGlmZiAtLWdpdCBhL3NlcnZlci90ZXN0cy9NYWtlZmlsZS5hbSBiL3NlcnZlci90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggOTgyMTA4MS4uZGU5NTg3MiAxMDA2NDQKKy0tLSBhL3NlcnZlci90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvc2VydmVyL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMTksMTAgKzE5LDkgQEAgREhDUFNSQyA9IC4uL2RoY3AuYyAuLi9ib290cC5jIC4uL2NvbmZwYXJzLmMgLi4vZGIuYyAuLi9jbGFzcy5jICAgICAgXAorICAgICAgICAgICAuLi9kZG5zLmMgLi4vZGhjcGxlYXNlcXVlcnkuYyAuLi9kaGNwdjYuYyAuLi9tZGI2LmMgICAgICAgIFwKKyAgICAgICAgICAgLi4vbGRhcC5jIC4uL2xkYXBfY2FzYS5jIC4uL2RoY3BkLmMgLi4vbGVhc2VjaGFpbi5jCisgCistREhDUExJQlMgPSAkKHRvcF9idWlsZGRpcikvY29tbW9uL2xpYmRoY3AuYSAkKHRvcF9idWlsZGRpcikvb21hcGlwL2xpYm9tYXBpLmEgXAorLSAgICAgICAgICAkKHRvcF9idWlsZGRpcikvZGhjcGN0bC9saWJkaGNwY3RsLmEgJChCSU5ETElCRElSKS9saWJpcnMuYSBcCistCSAgJChCSU5ETElCRElSKS9saWJkbnMuYSAkKEJJTkRMSUJESVIpL2xpYmlzY2NmZy5hIFwKKy0JICAkKEJJTkRMSUJESVIpL2xpYmlzYy5hCisrREhDUExJQlMgPSAkKHRvcF9idWlsZGRpcikvY29tbW9uL2xpYmRoY3AuYSAkKHRvcF9idWlsZGRpcikvb21hcGlwL2xpYm9tYXBpLmxhIFwKKysgICAgICAgICAgJCh0b3BfYnVpbGRkaXIpL2RoY3BjdGwvbGliZGhjcGN0bC5sYSBcCisrICAgICAgICAgIC1MJChCSU5ETElCRElSKSAtbGlycyAtbGRucyAtbGlzY2NmZyAtbGlzYworIAorIEFURl9URVNUUyA9CisgaWYgSEFWRV9BVEYKKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvMDAxMS1Nb3ZlZC10aGUtY2FsbC10by1pc2NfYXBwX2N0eHN0YXJ0LXRvLW5vdC1nZXQtc2lnbmFsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwLzAwMTEtTW92ZWQtdGhlLWNhbGwtdG8taXNjX2FwcF9jdHhzdGFydC10by1ub3QtZ2V0LXNpZ25hbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2JiNDYzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwLzAwMTEtTW92ZWQtdGhlLWNhbGwtdG8taXNjX2FwcF9jdHhzdGFydC10by1ub3QtZ2V0LXNpZ25hbC5wYXRjaApAQCAtMCwwICsxLDgxIEBACitGcm9tIDM3NzI1ZjNlMjJlZGI1MGUwY2EyZDFmZmY5NzEzMjFhNWE0ZDUxMTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDEyIEp1bCAyMDE3IDAzOjA1OjEzIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTEvMTFdIE1vdmVkIHRoZSBjYWxsIHRvIGlzY19hcHBfY3R4c3RhcnQoKSB0byBub3QgZ2V0IHNpZ25hbAorIGJsb2NrIGJ5IGFsbCB0aHJlYWRzCisKK1NpZ25lZC1vZmYtYnk6IEZyYW5jaXMgRHVwb250IDxmZHVwb250QGlzYy5vcmc+CisKK0luIGh0dHBzOi8vc291cmNlLmlzYy5vcmcvZ2l0L2JpbmQ5LmdpdCwgc2luY2UgdGhlIGZvbGxvd2luZworY29tbWl0IGFwcGxpZWQ6CisuLi4KK2NvbW1pdCBiOTliZmExODRiYzkzNzU0MjFiNWRmOTE1ZWVhN2RmYWM2YTY4YTk5CitBdXRob3I6IEV2YW4gSHVudCA8ZWFjaEBpc2Mub3JnPgorRGF0ZTogICBXZWQgQXByIDEwIDEzOjQ5OjU3IDIwMTMgLTA3MDAKKworICAgIFttYXN0ZXJdIHVuaWZ5IGludGVybmFsIGFuZCBleHBvcnQgbGlicmFyaWVzCisKKyAgICAzNTUwLiAgICAgICBbZnVuY10gICAgICAgICAgVW5pZmllZCB0aGUgaW50ZXJuYWwgYW5kIGV4cG9ydCB2ZXJzaW9ucyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIEJJTkQgbGlicmFyaWVzLCBhbGxvd2luZyBleHRlcm5hbCBjbGllbnRzIHRvIHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNhbWUgbGlicmFyaWVzIGFzIEJJTkQuIFtSVCAjMzMxMzFdCisuLi4KKyhnaXQgc2hvdyBiOTliZmExODRiYzkzNzU0MjFiNWRmOTE1ZWVhN2RmYWM2YTY4YTk5IC0tIC4vbGliL2lzYy91bml4L2FwcC5jKQorCitJbiB0aGlzIGNvbW1pdCwgaWYgYmluZDkgZW5hYmxlIHRocmVhZHMoSVNDX1BMQVRGT1JNX1VTRVRIUkVBRFMpLAoraXQgYmxvY2tzIHNpZ25hbCBTSUdIVVAsIFNJR0lOVCBhbmQgU0lHVEVSTSBpbiBpc2NfX2FwcF9jdHhzdGFydC4KK1doaWNoIGNhdXNlZCBkaGNsaWVudC9kaGNwZCBjb3VsZCBub3QgYmUgc3RvcHBlZCBieSBTSUdURVJNLgorCitJdCBjYXVzZWQgc3lzdGVtZCdzIHJlYm9vdCBodW5nIHdoaWNoIHNlbmQgU0lHVEVSTSBieSBkZWZhdWx0LgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtodHRwczovL3NvdXJjZS5pc2Mub3JnL2dpdC9kaGNwLmdpdF0KK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIG9tYXBpcC9pc2NsaWIuYyB8IDI1ICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9vbWFwaXAvaXNjbGliLmMgYi9vbWFwaXAvaXNjbGliLmMKK2luZGV4IGNlODY0OTAuLjZhMDQzNDUgMTAwNjQ0CistLS0gYS9vbWFwaXAvaXNjbGliLmMKKysrKyBiL29tYXBpcC9pc2NsaWIuYworQEAgLTE4NSwxNiArMTg1LDYgQEAgZGhjcF9jb250ZXh0X2NyZWF0ZShpbnQgZmxhZ3MsCisgCQlpZiAocmVzdWx0ICE9IElTQ19SX1NVQ0NFU1MpCisgCQkJZ290byBjbGVhbnVwOworIAorLQkJcmVzdWx0ID0gaXNjX2FwcF9jdHhzdGFydChkaGNwX2dibF9jdHguYWN0eCk7CistCQlpZiAocmVzdWx0ICE9IElTQ19SX1NVQ0NFU1MpCistCQkJcmV0dXJuIChyZXN1bHQpOworLQkJZGhjcF9nYmxfY3R4LmFjdHhfc3RhcnRlZCA9IElTQ19UUlVFOworLQorLQkJLyogTm90IGFsbCBPU3Mgc3VwcG9ydCBzdXBwcmVzc2luZyBTSUdQSVBFIHRocm91Z2ggc29ja2V0CistCQkgKiBvcHRpb25zLCBzbyBzZXQgdGhlIHNpZ2FsIGFjdGlvbiB0byBiZSBpZ25vcmUuICBUaGlzIGFsbG93cworLQkJICogYnJva2VuIGNvbm5lY3Rpb25zIHRvIGZhaWwgZ3JhY2VmdWxseSB3aXRoIEVQSVBFIG9uIHdyaXRlcyAqLworLQkJaGFuZGxlX3NpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsKKy0KKyAJCXJlc3VsdCA9IGlzY190YXNrbWdyX2NyZWF0ZWluY3R4KGRoY3BfZ2JsX2N0eC5tY3R4LAorIAkJCQkJCSBkaGNwX2dibF9jdHguYWN0eCwKKyAJCQkJCQkgMSwgMCwKK0BAIC0yMTcsNiArMjA3LDIxIEBAIGRoY3BfY29udGV4dF9jcmVhdGUoaW50IGZsYWdzLAorIAkJcmVzdWx0ID0gaXNjX3Rhc2tfY3JlYXRlKGRoY3BfZ2JsX2N0eC50YXNrbWdyLCAwLCAmZGhjcF9nYmxfY3R4LnRhc2spOworIAkJaWYgKHJlc3VsdCAhPSBJU0NfUl9TVUNDRVNTKQorIAkJCWdvdG8gY2xlYW51cDsKKysKKysJCXJlc3VsdCA9IGlzY19hcHBfY3R4c3RhcnQoZGhjcF9nYmxfY3R4LmFjdHgpOworKwkJaWYgKHJlc3VsdCAhPSBJU0NfUl9TVUNDRVNTKQorKwkJCXJldHVybiAocmVzdWx0KTsKKysJCWRoY3BfZ2JsX2N0eC5hY3R4X3N0YXJ0ZWQgPSBJU0NfVFJVRTsKKysKKysJCS8qIE5vdCBhbGwgT1NzIHN1cHBvcnQgc3VwcHJlc3NpbmcgU0lHUElQRSB0aHJvdWdoIHNvY2tldAorKwkJICogb3B0aW9ucywgc28gc2V0IHRoZSBzaWdhbCBhY3Rpb24gdG8gYmUgaWdub3JlLiAgVGhpcyBhbGxvd3MKKysJCSAqIGJyb2tlbiBjb25uZWN0aW9ucyB0byBmYWlsIGdyYWNlZnVsbHkgd2l0aCBFUElQRSBvbiB3cml0ZXMgKi8KKysJCWhhbmRsZV9zaWduYWwoU0lHUElQRSwgU0lHX0lHTik7CisrCisrCQkvKiBSZXNldCBoYW5kbGVycyBpbnN0YWxsZWQgYnkgaXNjX2FwcF9jdHhzdGFydCgpCisrCQkgKiB0byBkZWZhdWx0IGZvciBjb250cm9sLWMgYW5kIGtpbGwgKi8KKysJCWhhbmRsZV9zaWduYWwoU0lHSU5ULCBTSUdfREZMKTsKKysJCWhhbmRsZV9zaWduYWwoU0lHVEVSTSwgU0lHX0RGTCk7CisgCX0KKyAKKyAjaWYgZGVmaW5lZCAoTlNVUERBVEUpCistLSAKKzEuOC4zLjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwLzAwMTItZGhjcC1jb3JyZWN0LXRoZS1pbnRlbnRpb24tZm9yLXhtbDItbGliLXNlYXJjaC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC8wMDEyLWRoY3AtY29ycmVjdC10aGUtaW50ZW50aW9uLWZvci14bWwyLWxpYi1zZWFyY2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQzYWY5ZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC8wMDEyLWRoY3AtY29ycmVjdC10aGUtaW50ZW50aW9uLWZvci14bWwyLWxpYi1zZWFyY2gucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRnJvbSA1MDE1NDNiM2VmNzE1NDg4YTE0MmUzZDMwMWZmMjczM2FhMzNlZWM3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQXdhaXMgQmVsYWwgPGF3YWlzX2JlbGFsQG1lbnRvci5jb20+CitEYXRlOiBXZWQsIDI1IE9jdCAyMDE3IDIxOjAwOjA1ICswNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGRoY3A6IGNvcnJlY3QgdGhlIGludGVudGlvbiBmb3IgeG1sMiBsaWIgc2VhcmNoCisKK0EgbWlzc2luZyBjYXNlIGJyZWFrcyB0aGUgYnVpbGQgd2hlbiBsaWJ4bWwyIGlzCityZXF1aXJlZCBhbmQgZm91bmQgYXBwcm9wcmlhdGVseS4gVGhlIHRoaXJkIGFyZ3VtZW50Cit0byB0aGUgZnVuY3Rpb24gQUNfU0VBUkNIX0xJQiBpcyBhY3Rpb24taWYtZm91bmQgd2hpY2gKK3dhcyBtaXN0YWtlbmx5IGJlZW4gdXNlZCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIGxpYnJhcnkKK2lzIG5vdCBmb3VuZCBhbmQgaGVuY2UgYnJlYWtzIHRoZSBjb25maWd1cmUgcGhhc2UKK3doZXJlIGl0IHNob3VkIGFjdHVhbGx5IHBhc3MuCitXZSBub3cgcGFzcyBvbiBzaWxlbnRseSB3aGVuIGFjdGlvbi1pZi1mb3VuZCBpcworZXhlY3V0ZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBBd2FpcyBCZWxhbCA8YXdhaXNfYmVsYWxAbWVudG9yLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYmZlOTg4YS4uZjA0NTllNiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjA4LDcgKzYwOCw3IEBAIEFDX0FSR19XSVRIKGxpYnhtbDIsCisgCXdpdGhfbGlieG1sMj0iJHdpdGh2YWwiLCB3aXRoX2xpYnhtbDI9Im5vIikKKyAKKyBpZiB0ZXN0IHgkd2l0aF9saWJ4bWwyICE9IHhubzsgdGhlbgorLQlBQ19TRUFSQ0hfTElCUyh4bWxUZXh0V3JpdGVyU3RhcnRFbGVtZW50LCBbeG1sMl0sCisrCUFDX1NFQVJDSF9MSUJTKHhtbFRleHRXcml0ZXJTdGFydEVsZW1lbnQsIFt4bWwyXSwsCisgCQlbaWYgdGVzdCB4JHdpdGhfbGlieG1sMiAhPSB4YXV0bzsgdGhlbgorIAkJCUFDX01TR19GQUlMVVJFKFsqKiogQ2Fubm90IGZpbmQgeG1sVGV4dFdyaXRlclN0YXJ0RWxlbWVudCB3aXRoIC1seG1sMiBhbmQgbGlieG1sMiB3YXMgcmVxdWVzdGVkXSkKKyAJCWZpXSkKKy0tIAorMi4xMS4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9kZWZpbmUtbWFjcm8tX1BBVEhfREhDUERfQ09ORi1hbmQtX1BBVEhfREhDTElFTlRfQ09OLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2RlZmluZS1tYWNyby1fUEFUSF9ESENQRF9DT05GLWFuZC1fUEFUSF9ESENMSUVOVF9DT04ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyYmRhZjAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2RlZmluZS1tYWNyby1fUEFUSF9ESENQRF9DT05GLWFuZC1fUEFUSF9ESENMSUVOVF9DT04ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi1kZWZpbmUgbWFjcm8gX1BBVEhfREhDUERfQ09ORiBhbmQgX1BBVEhfREhDTElFTlRfQ09ORgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQotCi1TaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+Ci0tLS0KLSBpbmNsdWRlcy9zaXRlLmggfCAzICsrLQotIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2luY2x1ZGVzL3NpdGUuaCBiL2luY2x1ZGVzL3NpdGUuaAotaW5kZXggZDg3YjMwOS4uMTdiYzQwZCAxMDA2NDQKLS0tLSBhL2luY2x1ZGVzL3NpdGUuaAotKysrIGIvaW5jbHVkZXMvc2l0ZS5oCi1AQCAtMTM5LDcgKzEzOSw4IEBACi0gLyogRGVmaW5lIHRoaXMgaWYgeW91IHdhbnQgdGhlIGRoY3BkLmNvbmYgZmlsZSB0byBnbyBzb21ld2hlcmUgb3RoZXIgdGhhbgotICAgIHRoZSBkZWZhdWx0IGxvY2F0aW9uLiAgIEJ5IGRlZmF1bHQsIGl0IGdvZXMgaW4gL2V0Yy9kaGNwZC5jb25mLiAqLwotIAotLS8qICNkZWZpbmUgX1BBVEhfREhDUERfQ09ORgkiL2V0Yy9kaGNwZC5jb25mIiAqLwotKyNkZWZpbmUgX1BBVEhfREhDUERfQ09ORgkiL2V0Yy9kaGNwL2RoY3BkLmNvbmYiCi0rI2RlZmluZSBfUEFUSF9ESENMSUVOVF9DT05GCSIvZXRjL2RoY3AvZGhjbGllbnQuY29uZiIKLSAKLSAvKiBOZXR3b3JrIEFQSSBkZWZpbml0aW9ucy4gICBZb3UgZG8gbm90IG5lZWQgdG8gY2hvb3NlIG9uZSBvZiB0aGVzZSAtIGlmCi0gICAgeW91IGRvbid0IGNob29zZSwgb25lIHdpbGwgYmUgY2hvc2VuIGZvciB5b3UgaW4geW91ciBzeXN0ZW0ncyBjb25maWcKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2RoY2xpZW50LXNjcmlwdC1kcm9wLXJlc29sdi5jb25mLmRoY2xpZW50LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2RoY2xpZW50LXNjcmlwdC1kcm9wLXJlc29sdi5jb25mLmRoY2xpZW50LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjA5NWE1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9kaGNsaWVudC1zY3JpcHQtZHJvcC1yZXNvbHYuY29uZi5kaGNsaWVudC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLWRoY3AtY2xpZW50OiBmaXggaW52b2tlIGRoY2xpZW50LXNjcmlwdCBmYWlsZWQgb24gUmVhZC1vbmx5IGZpbGUgc3lzdGVtCi0KLUluIHJlYWQtb25seSBmaWxlIHN5c3RlbSwgJy9ldGMnIGlzIG9uIHRoZSByZWFkb25seSBwYXJ0aXRpb24sCi1hbmQgJy9ldGMvcmVzb2x2LmNvbmYnIGlzIHN5bWxpbmtlZCB0byBhIHNlcGFyYXRlIHdyaXRhYmxlCi1wYXJ0aXRpb24uCi0KLUluIHRoaXMgc2l0dWF0aW9uLCB3ZSBzaG91bGQgdXNlIHNoZWxsIHZhcmlhYmxlIHRvIGluc3RlYWQgb2YKLXRlbXAgZmlsZXMgJy9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQnIGFuZCAnL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudDYnLgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLVNpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KLS0tLQotIGNsaWVudC9zY3JpcHRzL2xpbnV4IHwgMjAgKysrKysrKysrLS0tLS0tLS0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2NsaWVudC9zY3JpcHRzL2xpbnV4IGIvY2xpZW50L3NjcmlwdHMvbGludXgKLS0tLSBhL2NsaWVudC9zY3JpcHRzL2xpbnV4Ci0rKysgYi9jbGllbnQvc2NyaXB0cy9saW51eAotQEAgLTI3LDI3ICsyNywyNSBAQCBpcD0vc2Jpbi9pcAotIAotIG1ha2VfcmVzb2x2X2NvbmYoKSB7Ci0gICBpZiBbIHgiJG5ld19kb21haW5fbmFtZV9zZXJ2ZXJzIiAhPSB4IF07IHRoZW4KLS0gICAgY2F0IC9kZXYvbnVsbCA+IC9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQKLS0gICAgY2htb2QgNjQ0IC9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQKLSsgICAgcmVzb2x2X2NvbmY9IiIKLSAgICAgaWYgWyB4IiRuZXdfZG9tYWluX3NlYXJjaCIgIT0geCBdOyB0aGVuCi0tICAgICAgZWNobyBzZWFyY2ggJG5ld19kb21haW5fc2VhcmNoID4+IC9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQKLSsgICAgICByZXNvbHZfY29uZj0ic2VhcmNoICR7bmV3X2RvbWFpbl9zZWFyY2h9XG4iCi0gICAgIGVsaWYgWyB4IiRuZXdfZG9tYWluX25hbWUiICE9IHggXTsgdGhlbgotICAgICAgICMgTm90ZSB0aGF0IHRoZSBESENQICdEb21haW4gTmFtZSBPcHRpb24nIGlzIHJlYWxseSBqdXN0IGEgZG9tYWluCi0gICAgICAgIyBuYW1lLCBhbmQgdGhhdCB0aGlzIHByYWN0aWNlIG9mIHVzaW5nIHRoZSBkb21haW4gbmFtZSBvcHRpb24gYXMKLSAgICAgICAjIGEgc2VhcmNoIHBhdGggaXMgYm90aCBub25zdGFuZGFyZCBhbmQgZGVwcmVjYXRlZC4KLS0gICAgICBlY2hvIHNlYXJjaCAkbmV3X2RvbWFpbl9uYW1lID4+IC9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQKLSsgICAgICByZXNvbHZfY29uZj0ic2VhcmNoICR7bmV3X2RvbWFpbl9uYW1lfVxuIgotICAgICBmaQotICAgICBmb3IgbmFtZXNlcnZlciBpbiAkbmV3X2RvbWFpbl9uYW1lX3NlcnZlcnM7IGRvCi0tICAgICAgZWNobyBuYW1lc2VydmVyICRuYW1lc2VydmVyID4+L2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudAotKyAgICAgIHJlc29sdl9jb25mPSIke3Jlc29sdl9jb25mfW5hbWVzZXJ2ZXIgJHtuYW1lc2VydmVyfVxuIgotICAgICBkb25lCi0gCi0tICAgIG12IC9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQgL2V0Yy9yZXNvbHYuY29uZgotKyAgICBlY2hvIC1lICIke3Jlc29sdl9jb25mfSIgPiAvZXRjL3Jlc29sdi5jb25mCi0gICBlbGlmIFsgIngke25ld19kaGNwNl9uYW1lX3NlcnZlcnN9IiAhPSB4IF0gOyB0aGVuCi0tICAgIGNhdCAvZGV2L251bGwgPiAvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50NgotLSAgICBjaG1vZCA2NDQgL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudDYKLSsgICAgcmVzb2x2X2NvbmY9IiIKLSAKLSAgICAgaWYgWyAieCR7bmV3X2RoY3A2X2RvbWFpbl9zZWFyY2h9IiAhPSB4IF0gOyB0aGVuCi0tICAgICAgZWNobyBzZWFyY2ggJHtuZXdfZGhjcDZfZG9tYWluX3NlYXJjaH0gPj4gL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudDYKLSsgICAgICByZXNvbHZfY29uZj0ic2VhcmNoICR7bmV3X2RoY3A2X2RvbWFpbl9zZWFyY2h9XG4iCi0gICAgIGZpCi0gICAgIHNob3B0IC1zIG5vY2FzZW1hdGNoIAotICAgICBmb3IgbmFtZXNlcnZlciBpbiAke25ld19kaGNwNl9uYW1lX3NlcnZlcnN9IDsgZG8KLUBAIC01OSwxMSArNTcsMTEgQEAgbWFrZV9yZXNvbHZfY29uZigpIHsKLSAgICAgICBlbHNlCi0gCXpvbmVfaWQ9Ci0gICAgICAgZmkKLS0gICAgICBlY2hvIG5hbWVzZXJ2ZXIgJHtuYW1lc2VydmVyfSR6b25lX2lkID4+IC9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQ2Ci0rICAgICAgcmVzb2x2X2NvbmY9IiR7cmVzb2x2X2NvbmZ9bmFtZXNlcnZlciAke25hbWVzZXJ2ZXJ9JHpvbmVfaWRcbiIKLSAgICAgZG9uZQotICAgICBzaG9wdCAtdSBub2Nhc2VtYXRjaCAKLSAKLS0gICAgbXYgL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudDYgL2V0Yy9yZXNvbHYuY29uZgotKyAgICBlY2hvIC1lICIke3Jlc29sdl9jb25mfSIgPiAvZXRjL3Jlc29sdi5jb25mCi0gICBmaQotIH0KLSAKLS0tIAotMi44LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2RoY3AtMy4wLjMtZGhjbGllbnQtZGJ1cy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9kaGNwLTMuMC4zLWRoY2xpZW50LWRidXMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0YTY2NmQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2RoY3AtMy4wLjMtZGhjbGllbnQtZGJ1cy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uXQotCi0tLS0gY2xpZW50L3NjcmlwdHMvYnNkb3MKLSsrKyBjbGllbnQvc2NyaXB0cy9ic2RvcwotQEAgLTQ3LDYgKzQ3LDExIEBACi0gICAgIC4gL2V0Yy9kaGNwL2RoY2xpZW50LWV4aXQtaG9va3MKLSAgIGZpCi0gIyBwcm9iYWJseSBzaG91bGQgZG8gc29tZXRoaW5nIHdpdGggZXhpdCBzdGF0dXMgb2YgdGhlIGxvY2FsIHNjcmlwdAotKyAgaWYgWyB4JGRoY19kYnVzICE9IHggLWEgJGV4aXRfc3RhdHVzIC1lcSAwIF07IHRoZW4KLSsgICAgZGJ1cy1zZW5kIC0tc3lzdGVtIC0tZGVzdD1jb20ucmVkaGF0LmRoY3AgXAotKyAgICAgIC0tdHlwZT1tZXRob2RfY2FsbCAvY29tL3JlZGhhdC9kaGNwLyRpbnRlcmZhY2UgY29tLnJlZGhhdC5kaGNwLnNldCBcCi0rICAgICAgJ3N0cmluZzonImBlbnYgfCBncmVwIC1FdiAnXihQQVRIfFNITFZMfF98UFdEfGRoY19kYnVzKVw9J2AiCi0rICBmaQotICAgZXhpdCAkZXhpdF9zdGF0dXMKLSB9Ci0gCi0tLS0gY2xpZW50L3NjcmlwdHMvZnJlZWJzZAotKysrIGNsaWVudC9zY3JpcHRzL2ZyZWVic2QKLUBAIC01Nyw2ICs1NywxMSBAQAotICAgICAuIC9ldGMvZGhjcC9kaGNsaWVudC1leGl0LWhvb2tzCi0gICBmaQotICMgcHJvYmFibHkgc2hvdWxkIGRvIHNvbWV0aGluZyB3aXRoIGV4aXQgc3RhdHVzIG9mIHRoZSBsb2NhbCBzY3JpcHQKLSsgIGlmIFsgeCRkaGNfZGJ1cyAhPSB4IC1hICRleGl0X3N0YXR1cyAtZXEgMCBdOyB0aGVuCi0rICAgIGRidXMtc2VuZCAtLXN5c3RlbSAtLWRlc3Q9Y29tLnJlZGhhdC5kaGNwIFwKLSsgICAgICAtLXR5cGU9bWV0aG9kX2NhbGwgL2NvbS9yZWRoYXQvZGhjcC8kaW50ZXJmYWNlIGNvbS5yZWRoYXQuZGhjcC5zZXQgXAotKyAgICAgICdzdHJpbmc6JyJgZW52IHwgZ3JlcCAtRXYgJ14oUEFUSHxTSExWTHxffFBXRHxkaGNfZGJ1cylcPSdgIgotKyAgZmkKLSAgIGV4aXQgJGV4aXRfc3RhdHVzCi0gfQotIAotLS0tIGNsaWVudC9zY3JpcHRzL2xpbnV4Ci0rKysgY2xpZW50L3NjcmlwdHMvbGludXgKLUBAIC02OSw2ICs2OSwxMSBAQAotICAgICAuIC9ldGMvZGhjcC9kaGNsaWVudC1leGl0LWhvb2tzCi0gICBmaQotICMgcHJvYmFibHkgc2hvdWxkIGRvIHNvbWV0aGluZyB3aXRoIGV4aXQgc3RhdHVzIG9mIHRoZSBsb2NhbCBzY3JpcHQKLSsgIGlmIFsgeCRkaGNfZGJ1cyAhPSB4IC1hICRleGl0X3N0YXR1cyAtZXEgMCBdOyB0aGVuCi0rICAgIGRidXMtc2VuZCAtLXN5c3RlbSAtLWRlc3Q9Y29tLnJlZGhhdC5kaGNwIFwKLSsgICAgICAtLXR5cGU9bWV0aG9kX2NhbGwgL2NvbS9yZWRoYXQvZGhjcC8kaW50ZXJmYWNlIGNvbS5yZWRoYXQuZGhjcC5zZXQgXAotKyAgICAgICdzdHJpbmc6JyJgZW52IHwgZ3JlcCAtRXYgJ14oUEFUSHxTSExWTHxffFBXRHxkaGNfZGJ1cylcPSdgIgotKyAgZmkKLSAgIGV4aXQgJGV4aXRfc3RhdHVzCi0gfQotIAotLS0tIGNsaWVudC9zY3JpcHRzL25ldGJzZAotKysrIGNsaWVudC9zY3JpcHRzL25ldGJzZAotQEAgLTQ3LDYgKzQ3LDExIEBACi0gICAgIC4gL2V0Yy9kaGNwL2RoY2xpZW50LWV4aXQtaG9va3MKLSAgIGZpCi0gIyBwcm9iYWJseSBzaG91bGQgZG8gc29tZXRoaW5nIHdpdGggZXhpdCBzdGF0dXMgb2YgdGhlIGxvY2FsIHNjcmlwdAotKyAgaWYgWyB4JGRoY19kYnVzICE9IHggLWEgJGV4aXRfc3RhdHVzIC1lcSAwIF07IHRoZW4KLSsgICAgZGJ1cy1zZW5kIC0tc3lzdGVtIC0tZGVzdD1jb20ucmVkaGF0LmRoY3AgXAotKyAgICAgIC0tdHlwZT1tZXRob2RfY2FsbCAvY29tL3JlZGhhdC9kaGNwLyRpbnRlcmZhY2UgY29tLnJlZGhhdC5kaGNwLnNldCBcCi0rICAgICAgJ3N0cmluZzonImBlbnYgfCBncmVwIC1FdiAnXihQQVRIfFNITFZMfF98UFdEfGRoY19kYnVzKVw9J2AiCi0rICBmaQotICAgZXhpdCAkZXhpdF9zdGF0dXMKLSB9Ci0gCi0tLS0gY2xpZW50L3NjcmlwdHMvb3BlbmJzZAotKysrIGNsaWVudC9zY3JpcHRzL29wZW5ic2QKLUBAIC00Nyw2ICs0NywxMSBAQAotICAgICAuIC9ldGMvZGhjcC9kaGNsaWVudC1leGl0LWhvb2tzCi0gICBmaQotICMgcHJvYmFibHkgc2hvdWxkIGRvIHNvbWV0aGluZyB3aXRoIGV4aXQgc3RhdHVzIG9mIHRoZSBsb2NhbCBzY3JpcHQKLSsgIGlmIFsgeCRkaGNfZGJ1cyAhPSB4IC1hICRleGl0X3N0YXR1cyAtZXEgMCBdOyB0aGVuCi0rICAgIGRidXMtc2VuZCAtLXN5c3RlbSAtLWRlc3Q9Y29tLnJlZGhhdC5kaGNwIFwKLSsgICAgICAtLXR5cGU9bWV0aG9kX2NhbGwgL2NvbS9yZWRoYXQvZGhjcC8kaW50ZXJmYWNlIGNvbS5yZWRoYXQuZGhjcC5zZXQgXAotKyAgICAgICdzdHJpbmc6JyJgZW52IHwgZ3JlcCAtRXYgJ14oUEFUSHxTSExWTHxffFBXRHxkaGNfZGJ1cylcPSdgIgotKyAgZmkKLSAgIGV4aXQgJGV4aXRfc3RhdHVzCi0gfQotIAotLS0tIGNsaWVudC9zY3JpcHRzL3NvbGFyaXMKLSsrKyBjbGllbnQvc2NyaXB0cy9zb2xhcmlzCi1AQCAtNDcsNiArNDcsMTEgQEAKLSAgICAgLiAvZXRjL2RoY3AvZGhjbGllbnQtZXhpdC1ob29rcwotICAgZmkKLSAjIHByb2JhYmx5IHNob3VsZCBkbyBzb21ldGhpbmcgd2l0aCBleGl0IHN0YXR1cyBvZiB0aGUgbG9jYWwgc2NyaXB0Ci0rICBpZiBbIHgkZGhjX2RidXMgIT0geCAtYSAkZXhpdF9zdGF0dXMgLWVxIDAgXTsgdGhlbgotKyAgICBkYnVzLXNlbmQgLS1zeXN0ZW0gLS1kZXN0PWNvbS5yZWRoYXQuZGhjcCBcCi0rICAgICAgLS10eXBlPW1ldGhvZF9jYWxsIC9jb20vcmVkaGF0L2RoY3AvJGludGVyZmFjZSBjb20ucmVkaGF0LmRoY3Auc2V0IFwKLSsgICAgICAnc3RyaW5nOiciYGVudiB8IGdyZXAgLUV2ICdeKFBBVEh8U0hMVkx8X3xQV0R8ZGhjX2RidXMpXD0nYCIKLSsgIGZpCi0gICBleGl0ICRleGl0X3N0YXR1cwotIH0KLSAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9maXhzZXBidWlsZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9maXhzZXBidWlsZC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY0NDE0Ny4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZml4c2VwYnVpbGQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi1GaXggb3V0IG9mIHRyZWUgYnVpbGRzCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1SUCAyMDEzLzAzLzIxCi0KLVJlYmFzZSB0byA0LjMuNAotCi1TaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+Ci0tLS0KLSBjbGllbnQvTWFrZWZpbGUuYW0gIHwgNCArKy0tCi0gY29tbW9uL01ha2VmaWxlLmFtICB8IDMgKystCi0gZGhjcGN0bC9NYWtlZmlsZS5hbSB8IDIgKysKLSBvbWFwaXAvTWFrZWZpbGUuYW0gIHwgMSArCi0gcmVsYXkvTWFrZWZpbGUuYW0gICB8IDIgKy0KLSBzZXJ2ZXIvTWFrZWZpbGUuYW0gIHwgMiArLQotIDYgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvY2xpZW50L01ha2VmaWxlLmFtIGIvY2xpZW50L01ha2VmaWxlLmFtCi1pbmRleCAyY2I4M2Q4Li40NzMwYmIzIDEwMDY0NAotLS0tIGEvY2xpZW50L01ha2VmaWxlLmFtCi0rKysgYi9jbGllbnQvTWFrZWZpbGUuYW0KLUBAIC03LDExICs3LDExIEBAIFNVQkRJUlMgPSAuIHRlc3RzCi0gQklORExJQkRJUiA9IEBCSU5ERElSQC9saWIKLSAKLSBBTV9DUFBGTEFHUyA9IC1EQ0xJRU5UX1BBVEg9JyJQQVRIPSQoc2JpbmRpcik6L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4iJyBcCi0tCSAgICAgIC1ETE9DQUxTVEFURURJUj0nIiQobG9jYWxzdGF0ZWRpcikiJwotKwkgICAgICAtRExPQ0FMU1RBVEVESVI9JyIkKGxvY2Fsc3RhdGVkaXIpIicgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGVzCi0gCi0gZGlzdF9zeXNjb25mX0RBVEEgPSBkaGNsaWVudC5jb25mLmV4YW1wbGUKLSBzYmluX1BST0dSQU1TID0gZGhjbGllbnQKLS1kaGNsaWVudF9TT1VSQ0VTID0gY2xwYXJzZS5jIGRoY2xpZW50LmMgZGhjNi5jIFwKLStkaGNsaWVudF9TT1VSQ0VTID0gJChzcmNkaXIpL2NscGFyc2UuYyAkKHNyY2RpcikvZGhjbGllbnQuYyAkKHNyY2RpcikvZGhjNi5jIFwKLSAJCSAgIHNjcmlwdHMvYnNkb3Mgc2NyaXB0cy9mcmVlYnNkIHNjcmlwdHMvbGludXggc2NyaXB0cy9tYWNvcyBcCi0gCQkgICBzY3JpcHRzL25ldGJzZCBzY3JpcHRzL25leHRzdGVwIHNjcmlwdHMvb3BlbmJzZCBcCi0gCQkgICBzY3JpcHRzL3NvbGFyaXMgc2NyaXB0cy9vcGVud3J0Ci1kaWZmIC0tZ2l0IGEvY29tbW9uL01ha2VmaWxlLmFtIGIvY29tbW9uL01ha2VmaWxlLmFtCi1pbmRleCAxMTNhZWU4Li4wZjI0ZmJiIDEwMDY0NAotLS0tIGEvY29tbW9uL01ha2VmaWxlLmFtCi0rKysgYi9jb21tb24vTWFrZWZpbGUuYW0KLUBAIC0xLDQgKzEsNSBAQAotLUFNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpIC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInCi0rQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMgLUkkKHRvcF9zcmNkaXIpIC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInCi0rCi0gQU1fQ0ZMQUdTID0gJChMREFQX0NGTEFHUykKLSAKLSBub2luc3RfTElCUkFSSUVTID0gbGliZGhjcC5hCi1kaWZmIC0tZ2l0IGEvZGhjcGN0bC9NYWtlZmlsZS5hbSBiL2RoY3BjdGwvTWFrZWZpbGUuYW0KLWluZGV4IGNlYjBkZTEuLmJhOGRkOGIgMTAwNjQ0Ci0tLS0gYS9kaGNwY3RsL01ha2VmaWxlLmFtCi0rKysgYi9kaGNwY3RsL01ha2VmaWxlLmFtCi1AQCAtMSw1ICsxLDcgQEAKLSBCSU5ETElCRElSID0gQEJJTkRESVJAL2xpYgotIAotK0FNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGVzIC1JJCh0b3Bfc3JjZGlyKQotKwotIGJpbl9QUk9HUkFNUyA9IG9tc2hlbGwKLSBsaWJfTElCUkFSSUVTID0gbGliZGhjcGN0bC5hCi0gbm9pbnN0X1BST0dSQU1TID0gY2x0ZXN0Ci1kaWZmIC0tZ2l0IGEvb21hcGlwL01ha2VmaWxlLmFtIGIvb21hcGlwL01ha2VmaWxlLmFtCi1pbmRleCA0NDZhNTk0Li5kZDFhZmEwIDEwMDY0NAotLS0tIGEvb21hcGlwL01ha2VmaWxlLmFtCi0rKysgYi9vbWFwaXAvTWFrZWZpbGUuYW0KLUBAIC0xLDQgKzEsNSBAQAotIEJJTkRMSUJESVIgPSBAQklORERJUkAvbGliCi0rQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKLSAKLSBsaWJfTElCUkFSSUVTID0gbGlib21hcGkuYQotIG5vaW5zdF9QUk9HUkFNUyA9IHN2dGVzdAotZGlmZiAtLWdpdCBhL3JlbGF5L01ha2VmaWxlLmFtIGIvcmVsYXkvTWFrZWZpbGUuYW0KLWluZGV4IDMwNjBlY2EuLjZkNjUyZjYgMTAwNjQ0Ci0tLS0gYS9yZWxheS9NYWtlZmlsZS5hbQotKysrIGIvcmVsYXkvTWFrZWZpbGUuYW0KLUBAIC0xLDYgKzEsNiBAQAotIEJJTkRMSUJESVIgPSBAQklORERJUkAvbGliCi0gCi0tQU1fQ1BQRkxBR1MgPSAtRExPQ0FMU1RBVEVESVI9JyJAbG9jYWxzdGF0ZWRpckAiJwotK0FNX0NQUEZMQUdTID0gLURMT0NBTFNUQVRFRElSPSciQGxvY2Fsc3RhdGVkaXJAIicgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGVzCi0gCi0gc2Jpbl9QUk9HUkFNUyA9IGRoY3JlbGF5Ci0gZGhjcmVsYXlfU09VUkNFUyA9IGRoY3JlbGF5LmMKLWRpZmYgLS1naXQgYS9zZXJ2ZXIvTWFrZWZpbGUuYW0gYi9zZXJ2ZXIvTWFrZWZpbGUuYW0KLWluZGV4IDU0ZmVlZGYuLjM5OTBiOWMgMTAwNjQ0Ci0tLS0gYS9zZXJ2ZXIvTWFrZWZpbGUuYW0KLSsrKyBiL3NlcnZlci9NYWtlZmlsZS5hbQotQEAgLTYsNyArNiw3IEBAIFNVQkRJUlMgPSAuIHRlc3RzCi0gCi0gQklORExJQkRJUiA9IEBCSU5ERElSQC9saWIKLSAKLS1BTV9DUFBGTEFHUyA9IC1JLi4gLURMT0NBTFNUQVRFRElSPSciQGxvY2Fsc3RhdGVkaXJAIicKLStBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKSAtRExPQ0FMU1RBVEVESVI9JyJAbG9jYWxzdGF0ZWRpckAiJyAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKLSAKLSBkaXN0X3N5c2NvbmZfREFUQSA9IGRoY3BkLmNvbmYuZXhhbXBsZQotIHNiaW5fUFJPR1JBTVMgPSBkaGNwZAotLS0gCi0yLjguMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvbGlieG1sMi1jb25maWd1cmUtYXJndW1lbnQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvbGlieG1sMi1jb25maWd1cmUtYXJndW1lbnQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MzU2NjIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2xpYnhtbDItY29uZmlndXJlLWFyZ3VtZW50LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotQWRkIGNvbmZpZ3VyZSBhcmd1bWVudCB0byBtYWtlIHRoZSBsaWJ4bWwyIGRlcGVuZGVuY3kgZXhwbGljaXQgYW5kCi1kZXRlcm1pbmlzaXRpYy4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+Ci0KLVJlYmFzZSB0byA0LjMuNAotU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotLS0tCi0gY29uZmlndXJlLmFjIHwgMTEgKysrKysrKysrKy0KLSAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCA3MjZjODhlLi4xNjg0ZGYxIDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC03MTgsNyArNzE4LDE2IEBAIEFDX1NVQlNUKEJJTkRTUkNESVIpCi0gCi0gIyBXZSBuZWVkIHRvIGZpbmQgbGlieG1sMiBpZiBiaW5kIHdhcyBidWlsdCB3aXRoIHN1cHBvcnQgZW5hYmxlZAotICMgb3RoZXJ3aXNlIHdlJ2xsIGZhaWwgdG8gYnVpbGQgb21hcGlwL3Rlc3QuYwotLUFDX1NFQVJDSF9MSUJTKHhtbFRleHRXcml0ZXJTdGFydEVsZW1lbnQsIFt4bWwyXSwpCi0rQUNfQVJHX1dJVEgobGlieG1sMiwKLSsJQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1saWJ4bWwyXSwgW2xpbmsgYWdhaW5zdCBsaWJ4bWwyLiB0aGlzIGlzIG5lZWRlZCBpZiBiaW5kIHdhcyBidWlsdCB3aXRoIHhtbDIgc3VwcG9ydCBlbmFibGVkXSksCi0rCXdpdGhfbGlieG1sMj0iJHdpdGh2YWwiLCB3aXRoX2xpYnhtbDI9Im5vIikKLSsKLStpZiB0ZXN0IHgkd2l0aF9saWJ4bWwyICE9IHhubzsgdGhlbgotKyAgICBBQ19TRUFSQ0hfTElCUyh4bWxUZXh0V3JpdGVyU3RhcnRFbGVtZW50LCBbeG1sMl0sCi0rICAgICAgICAgICAgICAgICAgIFtpZiB0ZXN0IHgkd2l0aF9saWJ4bWwyICE9IHhhdXRvOyB0aGVuCi0rICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX0ZBSUxVUkUoWyoqKiBDYW5ub3QgZmluZCB4bWxUZXh0V3JpdGVyU3RhcnRFbGVtZW50IHdpdGggLWx4bWwyIGFuZCBsaWJ4bWwyIHdhcyByZXF1ZXN0ZWRdKQotKyAgICAgICAgICAgICAgICAgICAgZmldKQotK2ZpCi0gCi0gIyBPcGVuTERBUCBzdXBwb3J0LgotIEFDX0FSR19XSVRIKGxkYXAsCi0tLSAKLTIuOC4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9saW5rLXdpdGgtbGNyeXB0by5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9saW5rLXdpdGgtbGNyeXB0by5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQwZTBkZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvbGluay13aXRoLWxjcnlwdG8ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi1BdXRob3I6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KLURhdGU6ICAgVGh1IEZlYiAyIDIzOjU5OjExIDIwMTIgKzAyMDAKLQotRnJvbSA0LjIuMCBmaW5hbCByZWxlYXNlLCAtbGNyeXB0byBjaGVjayB3YXMgcmVtb3ZlZCBhbmQgd2UgY29tcGlsZSBzdGF0aWMgbGlicmFyaWVzCi1mcm9tIGJpbmQgdGhhdCBhcmUgbGlua2VkIHRvIGxpYmNyeXB0by4gVGhpcyBpcyB3aHkgaSBhZGRlZCBhIHBhdGNoIGluIG9yZGVyIHRvIGFkZAotLWxjcnlwdG8gdG8gTElCUy4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi1TaWduZWQtb2ZmLWJ5OiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+Ci0KLVJlYmFzZSB0byA0LjMuNAotU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotLS0tCi0gY29uZmlndXJlLmFjIHwgNCArKysrCi0gMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCAwOTdiMGMzLi43MjZjODhlIDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC01ODQsNiArNTg0LDEwIEBAIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1t2b2lkIGZvbygpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7Ci0gIyBMb29rIGZvciBvcHRpb25hbCBoZWFkZXJzLgotIEFDX0NIRUNLX0hFQURFUlMoc3lzL3NvY2tldC5oIG5ldC9pZl9kbC5oIG5ldC9pZjYuaCByZWdleC5oKQotIAotKyMgZmluZCBhbiBNRDUgbGlicmFyeQotK0FDX1NFQVJDSF9MSUJTKE1ENV9Jbml0LCBbY3J5cHRvXSkKLStBQ19TRUFSQ0hfTElCUyhNRDVJbml0LCBbY3J5cHRvXSkKLSsKLSAjIFNvbGFyaXMgbmVlZHMgc29tZSBsaWJyYXJpZXMgZm9yIGZ1bmN0aW9ucwotIEFDX1NFQVJDSF9MSUJTKHNvY2tldCwgW3NvY2tldF0pCi0gQUNfU0VBUkNIX0xJQlMoaW5ldF9udG9hLCBbbnNsXSkKLS0tIAotMi44LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL3JlbW92ZS1kaGNsaWVudC1zY3JpcHQtYmFzaC1kZXBlbmRlbmN5LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL3JlbW92ZS1kaGNsaWVudC1zY3JpcHQtYmFzaC1kZXBlbmRlbmN5LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTdiOWY2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9yZW1vdmUtZGhjbGllbnQtc2NyaXB0LWJhc2gtZGVwZW5kZW5jeS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLUZyb20gOGFlZDJhOWZmMDljYjBkNTg0YWQwYTczNDBmZTNhNTk2ODc5ZDliMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEFuZHJlIE1jQ3VyZHkgPGFybWNjdXJkeUBnbWFpbC5jb20+Ci1EYXRlOiBUaHUsIDIxIEp1bCAyMDE2IDE5OjA3OjAyIC0wNzAwCi1TdWJqZWN0OiBbUEFUQ0hdIHJlbW92ZSBkaGNsaWVudC1zY3JpcHQgYmFzaCBkZXBlbmRlbmN5Ci0KLVRha2UgdGhlIGRhc2ggY29tcGF0aWJsZSBJUHY2IGxpbmstbG9jYWwgYWRkcmVzcyB0ZXN0IGZyb20gdGhlIERlYmlhbgotdmVyc2lvbiBvZiBkaGNsaWVudC1zY3JpcHQuCi0KLU5vdGUgdGhhdCBhbHRob3VnaCAiZWNobyAtZSIgaW4gdGhlIE9FIHZlcnNpb24gb2YgZGhjbGllbnQtc2NyaXB0IGlzCi10ZWNobmljYWxseSBiYXNoIHNwZWNpZmljIHRvbywgaXQgaXMgc3VwcG9ydGVkIGJ5IEJ1c3lib3ggZWNobyB3aGVuCi1CdXN5Ym94IGlzIGNvbmZpZ3VyZWQgd2l0aCBDT05GSUdfRkVBVFVSRV9GQU5DWV9FQ0hPIGVuYWJsZWQgKHdoaWNoCi1pcyB0aGUgZGVmYXVsdCBpbiB0aGUgT0UgQnVzeWJveCBkZWZjb25maWcpIHRoZXJlZm9yZSBsZWF2ZSBhcy1pcy4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KLQotU2lnbmVkLW9mZi1ieTogQW5kcmUgTWNDdXJkeSA8YXJtY2N1cmR5QGdtYWlsLmNvbT4KLS0tLQotIGNsaWVudC9zY3JpcHRzL2xpbnV4IHwgNyArKystLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2NsaWVudC9zY3JpcHRzL2xpbnV4IGIvY2xpZW50L3NjcmlwdHMvbGludXgKLWluZGV4IDIzMmEwYWEuLjEzODNmNDYgMTAwNzU1Ci0tLS0gYS9jbGllbnQvc2NyaXB0cy9saW51eAotKysrIGIvY2xpZW50L3NjcmlwdHMvbGludXgKLUBAIC0xLDQgKzEsNCBAQAotLSMhL2Jpbi9iYXNoCi0rIyEvYmluL3NoCi0gIyBkaGNsaWVudC1zY3JpcHQgZm9yIExpbnV4LiBEYW4gSGFsYmVydCwgTWFyY2gsIDE5OTcuCi0gIyBVcGRhdGVkIGZvciBMaW51eCAyLlsxMl0gYnkgQnJpYW4gSi4gTXVycmVsbCwgSmFudWFyeSAxOTk5LgotICMgTm8gZ3VhcmFudGVlcyBhYm91dCB0aGlzLiBJJ20gYSBub3ZpY2UgYXQgdGhlIGRldGFpbHMgb2YgTGludXgKLUBAIC00NywxMSArNDcsMTEgQEAgbWFrZV9yZXNvbHZfY29uZigpIHsKLSAgICAgaWYgWyAieCR7bmV3X2RoY3A2X2RvbWFpbl9zZWFyY2h9IiAhPSB4IF0gOyB0aGVuCi0gICAgICAgcmVzb2x2X2NvbmY9InNlYXJjaCAke25ld19kaGNwNl9kb21haW5fc2VhcmNofVxuIgotICAgICBmaQotLSAgICBzaG9wdCAtcyBub2Nhc2VtYXRjaCAKLSAgICAgZm9yIG5hbWVzZXJ2ZXIgaW4gJHtuZXdfZGhjcDZfbmFtZV9zZXJ2ZXJzfSA7IGRvCi0gICAgICAgIyBJZiB0aGUgbmFtZXNlcnZlciBoYXMgYSBsaW5rLWxvY2FsIGFkZHJlc3MKLSAgICAgICAjIGFkZCBhIDx6b25lX2lkPiAoaW50ZXJmYWNlIG5hbWUpIHRvIGl0LgotLSAgICAgIGlmICBbWyAiJG5hbWVzZXJ2ZXIiID1+IF5mZTgwOjogXV0KLSsgICAgICBpZiBbICIke25hbWVzZXJ2ZXIjI2ZlODA6On0iICE9ICIkbmFtZXNlcnZlciIgXSB8fAotKyAgICAgICAgIFsgIiR7bmFtZXNlcnZlciMjRkU4MDo6fSIgIT0gIiRuYW1lc2VydmVyIiBdCi0gICAgICAgdGhlbgotIAl6b25lX2lkPSIlJGludGVyZmFjZSIKLSAgICAgICBlbHNlCi1AQCAtNTksNyArNTksNiBAQCBtYWtlX3Jlc29sdl9jb25mKCkgewotICAgICAgIGZpCi0gICAgICAgcmVzb2x2X2NvbmY9IiR7cmVzb2x2X2NvbmZ9bmFtZXNlcnZlciAke25hbWVzZXJ2ZXJ9JHpvbmVfaWRcbiIKLSAgICAgZG9uZQotLSAgICBzaG9wdCAtdSBub2Nhc2VtYXRjaCAKLSAKLSAgICAgZWNobyAtZSAiJHtyZXNvbHZfY29uZn0iID4gL2V0Yy9yZXNvbHYuY29uZgotICAgZmkKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL3JlcGxhY2UtaWZjb25maWctcm91dGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvcmVwbGFjZS1pZmNvbmZpZy1yb3V0ZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg0ZGY1Yy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvcmVwbGFjZS1pZmNvbmZpZy1yb3V0ZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE4OCArMCwwIEBACi1Gb3VuZCB0aGlzIHBhdGNoIGhlcmU6Ci1odHRwczovL2xpc3RzLmlzYy5vcmcvcGlwZXJtYWlsL2RoY3AtdXNlcnMvMjAxMS1KYW51YXJ5LzAxMjkxMC5odG1sCi0KLWFuZCBtYWRlIHNvbWUgYWRqdXN0bWVudHMvdXBkYXRlcyB0byBtYWtlIGl0IHdvcmsgd2l0aCB0aGlzIHZlcnNpb24uCi1XYXNuJ3QgYWJsZSB0byBmaW5kIHRoYXQgd2h5IHRoaXMgcGF0Y2ggd2FzIG5vdCBhY2NlcHRlZCBieSBJU0MgREhDUCBkZXZlbG9wZXJzLgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotU2lnbmVkLW9mZi1ieTogTXVoYW1tYWQgU2hha2VlbCA8bXVoYW1tYWRfc2hha2VlbEBtZW50b3IuY29tPgotCi1SZWJhc2UgdG8gNC4zLjQKLQotU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotLS0tCi0gY2xpZW50L3NjcmlwdHMvbGludXggfCA4MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDQ1IGluc2VydGlvbnMoKyksIDM3IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvY2xpZW50L3NjcmlwdHMvbGludXggYi9jbGllbnQvc2NyaXB0cy9saW51eAotaW5kZXggYTAyY2ZkOS4uMjMyYTBhYSAxMDA3NTUKLS0tLSBhL2NsaWVudC9zY3JpcHRzL2xpbnV4Ci0rKysgYi9jbGllbnQvc2NyaXB0cy9saW51eAotQEAgLTEwMSwxNyArMTAxLDExIEBAIGZpCi0gaWYgWyB4JG9sZF9icm9hZGNhc3RfYWRkcmVzcyAhPSB4IF07IHRoZW4KLSAgIG9sZF9icm9hZGNhc3RfYXJnPSJicm9hZGNhc3QgJG9sZF9icm9hZGNhc3RfYWRkcmVzcyIKLSBmaQotLWlmIFsgeCRuZXdfc3VibmV0X21hc2sgIT0geCBdOyB0aGVuCi0tICBuZXdfc3VibmV0X2FyZz0ibmV0bWFzayAkbmV3X3N1Ym5ldF9tYXNrIgotK2lmIFsgLW4gIiRuZXdfc3VibmV0X21hc2siIF07IHRoZW4KLSsgICAgbmV3X21hc2s9Ii8kbmV3X3N1Ym5ldF9tYXNrIgotIGZpCi0taWYgWyB4JG9sZF9zdWJuZXRfbWFzayAhPSB4IF07IHRoZW4KLS0gIG9sZF9zdWJuZXRfYXJnPSJuZXRtYXNrICRvbGRfc3VibmV0X21hc2siCi0tZmkKLS1pZiBbIHgkYWxpYXNfc3VibmV0X21hc2sgIT0geCBdOyB0aGVuCi0tICBhbGlhc19zdWJuZXRfYXJnPSJuZXRtYXNrICRhbGlhc19zdWJuZXRfbWFzayIKLS1maQotLWlmIFsgeCRuZXdfaW50ZXJmYWNlX210dSAhPSB4IF07IHRoZW4KLS0gIG10dV9hcmc9Im10dSAkbmV3X2ludGVyZmFjZV9tdHUiCi0raWYgWyAtbiAiJGFsaWFzX3N1Ym5ldF9tYXNrIiBdOyB0aGVuCi0rICAgIGFsaWFzX21hc2s9Ii8kYWxpYXNfc3VibmV0X21hc2siCi0gZmkKLSBpZiBbIHgkSUZfTUVUUklDICE9IHggXTsgdGhlbgotICAgbWV0cmljX2FyZz0ibWV0cmljICRJRl9NRVRSSUMiCi1AQCAtMTI1LDkgKzExOSw5IEBAIGZpCi0gaWYgWyB4JHJlYXNvbiA9IHhQUkVJTklUIF07IHRoZW4KLSAgIGlmIFsgeCRhbGlhc19pcF9hZGRyZXNzICE9IHggXTsgdGhlbgotICAgICAjIEJyaW5nIGRvd24gYWxpYXMgaW50ZXJmYWNlLiBJdHMgcm91dGVzIHdpbGwgZGlzYXBwZWFyIHRvby4KLS0gICAgaWZjb25maWcgJGludGVyZmFjZTowLSBpbmV0IDAKLSsgICAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfTowCi0gICBmaQotLSAgaWZjb25maWcgJGludGVyZmFjZSAwIHVwCi0rICAke2lwfSBsaW5rIHNldCBkZXYgJHtpbnRlcmZhY2V9IHVwCi0gCi0gICAjIFdlIG5lZWQgdG8gZ2l2ZSB0aGUga2VybmVsIHNvbWUgdGltZSB0byBnZXQgdGhlIGludGVyZmFjZSB1cC4KLSAgIHNsZWVwIDEKLUBAIC0xNTQsMjUgKzE0OCwzMCBAQCBpZiBbIHgkcmVhc29uID0geEJPVU5EIF0gfHwgWyB4JHJlYXNvbiA9IHhSRU5FVyBdIHx8IFwKLSAgIGlmIFsgeCRvbGRfaXBfYWRkcmVzcyAhPSB4IF0gJiYgWyB4JGFsaWFzX2lwX2FkZHJlc3MgIT0geCBdICYmIFwKLSAJCVsgeCRhbGlhc19pcF9hZGRyZXNzICE9IHgkb2xkX2lwX2FkZHJlc3MgXTsgdGhlbgotICAgICAjIFBvc3NpYmxlIG5ldyBhbGlhcy4gUmVtb3ZlIG9sZCBhbGlhcy4KLS0gICAgaWZjb25maWcgJGludGVyZmFjZTowLSBpbmV0IDAKLSsgICAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfTowCi0gICBmaQotICAgaWYgWyB4JG9sZF9pcF9hZGRyZXNzICE9IHggXSAmJiBbIHgkb2xkX2lwX2FkZHJlc3MgIT0geCRuZXdfaXBfYWRkcmVzcyBdOyB0aGVuCi0gICAgICMgSVAgYWRkcmVzcyBjaGFuZ2VkLiBCcmluZ2luZyBkb3duIHRoZSBpbnRlcmZhY2Ugd2lsbCBkZWxldGUgYWxsIHJvdXRlcywKLSAgICAgIyBhbmQgY2xlYXIgdGhlIEFSUCBjYWNoZS4KLS0gICAgaWZjb25maWcgJGludGVyZmFjZSBpbmV0IDAgZG93bgotKyAgICAke2lwfSAtNCBhZGRyIGZsdXNoIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9Ci0gCi0gICBmaQotICAgaWYgWyB4JG9sZF9pcF9hZGRyZXNzID0geCBdIHx8IFsgeCRvbGRfaXBfYWRkcmVzcyAhPSB4JG5ld19pcF9hZGRyZXNzIF0gfHwgXAotICAgICAgWyB4JHJlYXNvbiA9IHhCT1VORCBdIHx8IFsgeCRyZWFzb24gPSB4UkVCT09UIF07IHRoZW4KLSAKLS0gICAgaWZjb25maWcgJGludGVyZmFjZSBpbmV0ICRuZXdfaXBfYWRkcmVzcyAkbmV3X3N1Ym5ldF9hcmcgXAotLQkJCQkJJG5ld19icm9hZGNhc3RfYXJnICRtdHVfYXJnCi0rICAgICR7aXB9IC00IGFkZHIgYWRkICR7bmV3X2lwX2FkZHJlc3N9JHtuZXdfbWFza30gJHtuZXdfYnJvYWRjYXN0X2FyZ30gXAotKyAgICAgICAgICAgICAgICBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfQotKyAgICBpZiBbIC1uICIkbmV3X2ludGVyZmFjZV9tdHUiIF07IHRoZW4KLSsgICAgICAjIHNldCBNVFUKLSsgICAgICAke2lwfSBsaW5rIHNldCBkZXYgJHtpbnRlcmZhY2V9IG10dSAke25ld19pbnRlcmZhY2VfbXR1fQotKyAgICBmaQotICAgICAjIEFkZCBhIG5ldHdvcmsgcm91dGUgdG8gdGhlIGNvbXB1dGVkIG5ldHdvcmsgYWRkcmVzcy4KLSAgICAgZm9yIHJvdXRlciBpbiAkbmV3X3JvdXRlcnM7IGRvCi0gICAgICAgaWYgWyAieCRuZXdfc3VibmV0X21hc2siID0gIngyNTUuMjU1LjI1NS4yNTUiIF0gOyB0aGVuCi0tCXJvdXRlIGFkZCAtaG9zdCAkcm91dGVyIGRldiAkaW50ZXJmYWNlCi0rICAgICAgICAke2lwfSAtNCByb3V0ZSBhZGQgJHtyb3V0ZXJ9IGRldiAkaW50ZXJmYWNlID4vZGV2L251bGwgMj4mMQotICAgICAgIGZpCi0tICAgICAgcm91dGUgYWRkIGRlZmF1bHQgZ3cgJHJvdXRlciAkbWV0cmljX2FyZyBkZXYgJGludGVyZmFjZQotKyAgICAgICR7aXB9IC00IHJvdXRlIGFkZCBkZWZhdWx0IHZpYSAke3JvdXRlcn0gZGV2ICR7aW50ZXJmYWNlfSBcCi0rICAgICAgICAke21ldHJpY19hcmd9ID4vZGV2L251bGwgMj4mMQotICAgICBkb25lCi0gICBlbHNlCi0gICAgICMgd2UgaGF2ZW4ndCBjaGFuZ2VkIHRoZSBhZGRyZXNzLCBoYXZlIHdlIGNoYW5nZWQgb3RoZXIgb3B0aW9ucyAgICAgICAgICAgCi1AQCAtMTgwLDIxICsxNzksMjMgQEAgaWYgWyB4JHJlYXNvbiA9IHhCT1VORCBdIHx8IFsgeCRyZWFzb24gPSB4UkVORVcgXSB8fCBcCi0gICAgIGlmIFsgeCRuZXdfcm91dGVycyAhPSB4IF0gJiYgWyB4JG5ld19yb3V0ZXJzICE9IHgkb2xkX3JvdXRlcnMgXSA7IHRoZW4KLSAgICAgICAjIGlmIHdlJ3ZlIGNoYW5nZWQgcm91dGVycyBkZWxldGUgdGhlIG9sZCBhbmQgYWRkIHRoZSBuZXcuCi0gICAgICAgZm9yIHJvdXRlciBpbiAkb2xkX3JvdXRlcnM7IGRvCi0tICAgICAgICByb3V0ZSBkZWwgZGVmYXVsdCBndyAkcm91dGVyCi0rICAgICAgICAke2lwfSAtNCByb3V0ZSBkZWxldGUgZGVmYXVsdCB2aWEgJHtyb3V0ZXJ9Ci0gICAgICAgZG9uZQotICAgICAgIGZvciByb3V0ZXIgaW4gJG5ld19yb3V0ZXJzOyBkbwotICAgICAgICAgaWYgWyAieCRuZXdfc3VibmV0X21hc2siID0gIngyNTUuMjU1LjI1NS4yNTUiIF0gOyB0aGVuCi0tCSAgcm91dGUgYWRkIC1ob3N0ICRyb3V0ZXIgZGV2ICRpbnRlcmZhY2UKLS0JZmkKLS0Jcm91dGUgYWRkIGRlZmF1bHQgZ3cgJHJvdXRlciAkbWV0cmljX2FyZyBkZXYgJGludGVyZmFjZQotKwkgICAgICAke2lwfSAtNCByb3V0ZSBhZGQgJHtyb3V0ZXJ9IGRldiAkaW50ZXJmYWNlID4vZGV2L251bGwgMj4mMQotKwkgICAgZmkKLSsgICAgICAgICR7aXB9IC00IHJvdXRlIGFkZCBkZWZhdWx0IHZpYSAke3JvdXRlcn0gZGV2ICR7aW50ZXJmYWNlfSBcCi0rICAgICAgICAgICR7bWV0cmljX2FyZ30gPi9kZXYvbnVsbCAyPiYxCi0gICAgICAgZG9uZQotICAgICBmaQotICAgZmkKLSAgIGlmIFsgeCRuZXdfaXBfYWRkcmVzcyAhPSB4JGFsaWFzX2lwX2FkZHJlc3MgXSAmJiBbIHgkYWxpYXNfaXBfYWRkcmVzcyAhPSB4IF07Ci0gICAgdGhlbgotLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlOjAtIGluZXQgMAotLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlOjAgaW5ldCAkYWxpYXNfaXBfYWRkcmVzcyAkYWxpYXNfc3VibmV0X2FyZwotLSAgICByb3V0ZSBhZGQgLWhvc3QgJGFsaWFzX2lwX2FkZHJlc3MgJGludGVyZmFjZTowCi0rICAgICR7aXB9IC00IGFkZHIgZmx1c2ggZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX06MAotKyAgICAke2lwfSAtNCBhZGRyIGFkZCAke2FsaWFzX2lwX2FkZHJlc3N9JHthbGlhc19tYXNrfSBcCi0rICAgICAgICBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfTowCi0rICAgICR7aXB9IC00IHJvdXRlIGFkZCAke2FsaWFzX2lwX2FkZHJlc3N9IGRldiAke2ludGVyZmFjZX0gPi9kZXYvbnVsbCAyPiYxCi0gICBmaQotICAgbWFrZV9yZXNvbHZfY29uZgotICAgZXhpdF93aXRoX2hvb2tzIDAKLUBAIC0yMDQsNDIgKzIwNSw0OSBAQCBpZiBbIHgkcmVhc29uID0geEVYUElSRSBdIHx8IFsgeCRyZWFzb24gPSB4RkFJTCBdIHx8IFsgeCRyZWFzb24gPSB4UkVMRUFTRSBdIFwKLSAgICB8fCBbIHgkcmVhc29uID0geFNUT1AgXTsgdGhlbgotICAgaWYgWyB4JGFsaWFzX2lwX2FkZHJlc3MgIT0geCBdOyB0aGVuCi0gICAgICMgVHVybiBvZmYgYWxpYXMgaW50ZXJmYWNlLgotLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlOjAtIGluZXQgMAotKyAgICAke2lwfSAtNCBhZGRyIGZsdXNoIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9OjAKLSAgIGZpCi0gICBpZiBbIHgkb2xkX2lwX2FkZHJlc3MgIT0geCBdOyB0aGVuCi0gICAgICMgU2h1dCBkb3duIGludGVyZmFjZSwgd2hpY2ggd2lsbCBkZWxldGUgcm91dGVzIGFuZCBjbGVhciBhcnAgY2FjaGUuCi0tICAgIGlmY29uZmlnICRpbnRlcmZhY2UgaW5ldCAwIGRvd24KLSsgICAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfQotICAgZmkKLSAgIGlmIFsgeCRhbGlhc19pcF9hZGRyZXNzICE9IHggXTsgdGhlbgotLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlOjAgaW5ldCAkYWxpYXNfaXBfYWRkcmVzcyAkYWxpYXNfc3VibmV0X2FyZwotLSAgICByb3V0ZSBhZGQgLWhvc3QgJGFsaWFzX2lwX2FkZHJlc3MgJGludGVyZmFjZTowCi0rICAgICR7aXB9IC00IGFkZHIgYWRkICR7YWxpYXNfaXBfYWRkcmVzc30ke2FsaWFzX25ldHdvcmtfYXJnfSBcCi0rICAgICAgICBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfTowCi0rICAgICR7aXB9IC00IHJvdXRlIGFkZCAke2FsaWFzX2lwX2FkZHJlc3N9IGRldiAke2ludGVyZmFjZX0gPi9kZXYvbnVsbCAyPiYxCi0gICBmaQotICAgZXhpdF93aXRoX2hvb2tzIDAKLSBmaQotIAotIGlmIFsgeCRyZWFzb24gPSB4VElNRU9VVCBdOyB0aGVuCi0gICBpZiBbIHgkYWxpYXNfaXBfYWRkcmVzcyAhPSB4IF07IHRoZW4KLS0gICAgaWZjb25maWcgJGludGVyZmFjZTowLSBpbmV0IDAKLSsgICAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfTowCi0rICBmaQotKyAgJHtpcH0gLTQgYWRkciBhZGQgJHtuZXdfaXBfYWRkcmVzc30ke25ld19tYXNrfSAke25ld19icm9hZGNhc3RfYXJnfSBcCi0rICAgICAgICAgICAgZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX0KLSsgIGlmIFsgLW4gIiRuZXdfaW50ZXJmYWNlX210dSIgXTsgdGhlbgotKyAgICAjIHNldCBNVFUKLSsgICAgaXAgbGluayBzZXQgZGV2ICR7aW50ZXJmYWNlfSBtdHUgJHtuZXdfaW50ZXJmYWNlX210dX0KLSAgIGZpCi0tICBpZmNvbmZpZyAkaW50ZXJmYWNlIGluZXQgJG5ld19pcF9hZGRyZXNzICRuZXdfc3VibmV0X2FyZyBcCi0tCQkJCQkkbmV3X2Jyb2FkY2FzdF9hcmcgJG10dV9hcmcKLSAgIHNldCAkbmV3X3JvdXRlcnMKLSAgIGlmIHBpbmcgLXEgLWMgMSAkMTsgdGhlbgotICAgICBpZiBbIHgkbmV3X2lwX2FkZHJlc3MgIT0geCRhbGlhc19pcF9hZGRyZXNzIF0gJiYgXAotIAkJCVsgeCRhbGlhc19pcF9hZGRyZXNzICE9IHggXTsgdGhlbgotLSAgICAgIGlmY29uZmlnICRpbnRlcmZhY2U6MCBpbmV0ICRhbGlhc19pcF9hZGRyZXNzICRhbGlhc19zdWJuZXRfYXJnCi0tICAgICAgcm91dGUgYWRkIC1ob3N0ICRhbGlhc19pcF9hZGRyZXNzIGRldiAkaW50ZXJmYWNlOjAKLSsgICAgICAke2lwfSAtNCBhZGRyIGFkZCAke2FsaWFzX2lwX2FkZHJlc3N9JHthbGlhc19tYXNrfSBcCi0rICAgICAgICAgICAgZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX06MAotKyAgICAgICR7aXB9IC00IHJvdXRlIGFkZCAke2FsaWFzX2lwX2FkZHJlc3N9IGRldiAke2ludGVyZmFjZX0gPi9kZXYvbnVsbCAyPiYxCi0gICAgIGZpCi0gICAgIGZvciByb3V0ZXIgaW4gJG5ld19yb3V0ZXJzOyBkbwotICAgICAgIGlmIFsgIngkbmV3X3N1Ym5ldF9tYXNrIiA9ICJ4MjU1LjI1NS4yNTUuMjU1IiBdIDsgdGhlbgotLQlyb3V0ZSBhZGQgLWhvc3QgJHJvdXRlciBkZXYgJGludGVyZmFjZQotKwkgICAgJHtpcH0gLTQgcm91dGUgYWRkICR7cm91dGVyfSBkZXYgJGludGVyZmFjZSA+L2Rldi9udWxsIDI+JjEKLSAgICAgICBmaQotLSAgICAgIHJvdXRlIGFkZCBkZWZhdWx0IGd3ICRyb3V0ZXIgJG1ldHJpY19hcmcgZGV2ICRpbnRlcmZhY2UKLSsgICAgICAke2lwfSAtNCByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgJHtyb3V0ZXJ9IGRldiAke2ludGVyZmFjZX0gXAotKyAgICAgICAgJHttZXRyaWNfYXJnfSA+L2Rldi9udWxsIDI+JjEKLSAgICAgZG9uZQotICAgICBtYWtlX3Jlc29sdl9jb25mCi0gICAgIGV4aXRfd2l0aF9ob29rcyAwCi0gICBmaQotLSAgaWZjb25maWcgJGludGVyZmFjZSBpbmV0IDAgZG93bgotKyAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9Ci0gICBleGl0X3dpdGhfaG9va3MgMQotIGZpCi0gCi0tLSAKLTIuOC4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9zZWFyY2gtZm9yLWxpYnhtbDIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3Avc2VhcmNoLWZvci1saWJ4bWwyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDhhNWI3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9zZWFyY2gtZm9yLWxpYnhtbDIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1saWJkbnMgcmVxdWlyZXMgbGlieG1sMiBpZiBiaW5kIHdhcyBidWlsdCB3aXRoIGxpYnhtbDIgc3VwcG9ydAotZW5hYmxlZC4gQ29tcGlsYXRpb24gd2lsbCBmYWlsIGZvciBvbWFwaXAvdGVzdC5jIGluIGNhc2UKLWx4bWwyIGlzbid0IHVzZWQgZHVyaW5nIHRoZSBidWlsZC4gU28sIHdlIGFkZCBsb3NlbHkgY291cGxlZAotc2VhcmNoIHBhdGggd2hpY2ggd2lsbCBwaWNrIHVwIHRoZSBsaWIgaWYgaXQgaXMgcHJlc2VudC4KLQotU2lnbmVkLW9mZi1ieTogQXdhaXMgQmVsYWwgPGF3YWlzX2JlbGFsQG1lbnRvci5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggYzlkYzhiNS4uODVmNTliZSAxMDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFjCi1AQCAtNjAyLDYgKzYwMiwxMCBAQCBubykKLSBlc2FjCi0gQUNfU1VCU1QoW2xpYmJpbmRdKQotIAotKyMgV2UgbmVlZCB0byBmaW5kIGxpYnhtbDIgaWYgYmluZCB3YXMgYnVpbHQgd2l0aCBzdXBwb3J0IGVuYWJsZWQKLSsjIG90aGVyd2lzZSB3ZSdsbCBmYWlsIHRvIGJ1aWxkIG9tYXBpcC90ZXN0LmMKLStBQ19TRUFSQ0hfTElCUyh4bWxUZXh0V3JpdGVyU3RhcnRFbGVtZW50LCBbeG1sMl0sKQotKwotICMgT3BlbkxEQVAgc3VwcG9ydC4KLSBBQ19BUkdfV0lUSChsZGFwLAotICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWxkYXBdLFtlbmFibGUgT3BlbkxEQVAgc3VwcG9ydCBpbiBkaGNwZCAoZGVmYXVsdCBpcyBubyldKSwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC90d2Vhay10by1zdXBwb3J0LWV4dGVybmFsLWJpbmQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvdHdlYWstdG8tc3VwcG9ydC1leHRlcm5hbC1iaW5kLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2M2YWJiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC90d2Vhay10by1zdXBwb3J0LWV4dGVybmFsLWJpbmQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotRnJvbSBhZDdiYjQwMWY0NzcxNGZjMzBjNDA4ODUzYjc5NmNlMGYxYzdlNjVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotRGF0ZTogU2F0LCAxMSBKdW4gMjAxNiAyMjo1MTo0NCAtMDQwMAotU3ViamVjdDogW1BBVENIXSB0d2VhayB0byBzdXBwb3J0IGV4dGVybmFsIGJpbmQKLQotVHdlYWsgdGhlIGV4dGVybmFsIGJpbmQgdG8gb2UtY29yZSdzIHN5c3Jvb3QgcmF0aGVyIHRoYW4KLWV4dGVybmFsIGJpbmQgc291cmNlIGJ1aWxkLgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgPG9lLWNvcmUgc3BlY2lmaWM+Ci0KLVNpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KLS0tLQotIGNsaWVudC9NYWtlZmlsZS5hbSAgICAgICB8IDIgKy0KLSBjbGllbnQvdGVzdHMvTWFrZWZpbGUuYW0gfCAyICstCi0gY29tbW9uL3Rlc3RzL01ha2VmaWxlLmFtIHwgMiArLQotIGRoY3BjdGwvTWFrZWZpbGUuYW0gICAgICB8IDIgKy0KLSBvbWFwaXAvTWFrZWZpbGUuYW0gICAgICAgfCAyICstCi0gcmVsYXkvTWFrZWZpbGUuYW0gICAgICAgIHwgMiArLQotIHNlcnZlci9NYWtlZmlsZS5hbSAgICAgICB8IDIgKy0KLSBzZXJ2ZXIvdGVzdHMvTWFrZWZpbGUuYW0gfCAyICstCi0gOCBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9jbGllbnQvTWFrZWZpbGUuYW0gYi9jbGllbnQvTWFrZWZpbGUuYW0KLWluZGV4IDQ3MzBiYjMuLjg0ZDgxMzEgMTAwNjQ0Ci0tLS0gYS9jbGllbnQvTWFrZWZpbGUuYW0KLSsrKyBiL2NsaWVudC9NYWtlZmlsZS5hbQotQEAgLTQsNyArNCw3IEBACi0gIyBwcm9kdWN0aW9uIGNvZGUuIFNhZGx5LCB3ZSBhcmUgbm90IHRoZXJlIHlldC4KLSBTVUJESVJTID0gLiB0ZXN0cwotIAotLUJJTkRMSUJESVIgPSBAQklORERJUkAvbGliCi0rQklORExJQkRJUiA9IEBCSU5ERElSQAotIAotIEFNX0NQUEZMQUdTID0gLURDTElFTlRfUEFUSD0nIlBBVEg9JChzYmluZGlyKTovc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbiInIFwKLSAJICAgICAgLURMT0NBTFNUQVRFRElSPSciJChsb2NhbHN0YXRlZGlyKSInIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcwotZGlmZiAtLWdpdCBhL2NsaWVudC90ZXN0cy9NYWtlZmlsZS5hbSBiL2NsaWVudC90ZXN0cy9NYWtlZmlsZS5hbQotaW5kZXggZGE2OWVhOS4uZmUzNWU1NyAxMDA2NDQKLS0tLSBhL2NsaWVudC90ZXN0cy9NYWtlZmlsZS5hbQotKysrIGIvY2xpZW50L3Rlc3RzL01ha2VmaWxlLmFtCi1AQCAtMSw2ICsxLDYgQEAKLSBTVUJESVJTID0gLgotIAotLUJJTkRMSUJESVIgPSBAQklORERJUkAvbGliCi0rQklORExJQkRJUiA9IEBCSU5ERElSQAotIAotIEFNX0NQUEZMQUdTID0gJChBVEZfQ0ZMQUdTKSAtRFVOSVRfVEVTVCAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKLSBBTV9DUFBGTEFHUyArPSAtSUBCSU5ERElSQC9pbmNsdWRlIC1JJCh0b3Bfc3JjZGlyKQotZGlmZiAtLWdpdCBhL2NvbW1vbi90ZXN0cy9NYWtlZmlsZS5hbSBiL2NvbW1vbi90ZXN0cy9NYWtlZmlsZS5hbQotaW5kZXggZjhkNmIwZS4uMDVjZDljMSAxMDA2NDQKLS0tLSBhL2NvbW1vbi90ZXN0cy9NYWtlZmlsZS5hbQotKysrIGIvY29tbW9uL3Rlc3RzL01ha2VmaWxlLmFtCi1AQCAtMSw2ICsxLDYgQEAKLSBTVUJESVJTID0gLgotIAotLUJJTkRMSUJESVIgPSBAQklORERJUkAvbGliCi0rQklORExJQkRJUiA9IEBCSU5ERElSQAotIAotIEFNX0NQUEZMQUdTID0gJChBVEZfQ0ZMQUdTKSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKLSAKLWRpZmYgLS1naXQgYS9kaGNwY3RsL01ha2VmaWxlLmFtIGIvZGhjcGN0bC9NYWtlZmlsZS5hbQotaW5kZXggYmE4ZGQ4Yi4uOWIyNDg2ZSAxMDA2NDQKLS0tLSBhL2RoY3BjdGwvTWFrZWZpbGUuYW0KLSsrKyBiL2RoY3BjdGwvTWFrZWZpbGUuYW0KLUBAIC0xLDQgKzEsNCBAQAotLUJJTkRMSUJESVIgPSBAQklORERJUkAvbGliCi0rQklORExJQkRJUiA9IEBCSU5ERElSQAotIAotIEFNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGVzIC1JJCh0b3Bfc3JjZGlyKQotIAotZGlmZiAtLWdpdCBhL29tYXBpcC9NYWtlZmlsZS5hbSBiL29tYXBpcC9NYWtlZmlsZS5hbQotaW5kZXggZGQxYWZhMC4uZTRhODU5OSAxMDA2NDQKLS0tLSBhL29tYXBpcC9NYWtlZmlsZS5hbQotKysrIGIvb21hcGlwL01ha2VmaWxlLmFtCi1AQCAtMSw0ICsxLDQgQEAKLS1CSU5ETElCRElSID0gQEJJTkRESVJAL2xpYgotK0JJTkRMSUJESVIgPSBAQklORERJUkAKLSBBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcwotIAotIGxpYl9MSUJSQVJJRVMgPSBsaWJvbWFwaS5hCi1kaWZmIC0tZ2l0IGEvcmVsYXkvTWFrZWZpbGUuYW0gYi9yZWxheS9NYWtlZmlsZS5hbQotaW5kZXggNmQ2NTJmNi4uYjNiZjU3OCAxMDA2NDQKLS0tLSBhL3JlbGF5L01ha2VmaWxlLmFtCi0rKysgYi9yZWxheS9NYWtlZmlsZS5hbQotQEAgLTEsNCArMSw0IEBACi0tQklORExJQkRJUiA9IEBCSU5ERElSQC9saWIKLStCSU5ETElCRElSID0gQEJJTkRESVJACi0gCi0gQU1fQ1BQRkxBR1MgPSAtRExPQ0FMU1RBVEVESVI9JyJAbG9jYWxzdGF0ZWRpckAiJyAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKLSAKLWRpZmYgLS1naXQgYS9zZXJ2ZXIvTWFrZWZpbGUuYW0gYi9zZXJ2ZXIvTWFrZWZpbGUuYW0KLWluZGV4IDM5OTBiOWMuLmI1ZDhjMmQgMTAwNjQ0Ci0tLS0gYS9zZXJ2ZXIvTWFrZWZpbGUuYW0KLSsrKyBiL3NlcnZlci9NYWtlZmlsZS5hbQotQEAgLTQsNyArNCw3IEBACi0gIyBwcm9kdWN0aW9uIGNvZGUuIFNhZGx5LCB3ZSBhcmUgbm90IHRoZXJlIHlldC4KLSBTVUJESVJTID0gLiB0ZXN0cwotIAotLUJJTkRMSUJESVIgPSBAQklORERJUkAvbGliCi0rQklORExJQkRJUiA9IEBCSU5ERElSQAotIAotIEFNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpIC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcwotIAotZGlmZiAtLWdpdCBhL3NlcnZlci90ZXN0cy9NYWtlZmlsZS5hbSBiL3NlcnZlci90ZXN0cy9NYWtlZmlsZS5hbQotaW5kZXggNjVhOWY3NC4uMjg5MjMwOSAxMDA2NDQKLS0tLSBhL3NlcnZlci90ZXN0cy9NYWtlZmlsZS5hbQotKysrIGIvc2VydmVyL3Rlc3RzL01ha2VmaWxlLmFtCi1AQCAtMSw2ICsxLDYgQEAKLSBTVUJESVJTID0gLgotIAotLUJJTkRMSUJESVIgPSBAQklORERJUkAvbGliCi0rQklORExJQkRJUiA9IEBCSU5ERElSQAotIAotIEFNX0NQUEZMQUdTID0gJChBVEZfQ0ZMQUdTKSAtRFVOSVRfVEVTVCAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKLSBBTV9DUFBGTEFHUyArPSAtSUBCSU5ERElSQC9pbmNsdWRlIC1JJCh0b3Bfc3JjZGlyKQotLS0gCi0yLjguMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3BfNC4zLjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3BfNC4zLjUuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3OGMyOWEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwXzQuMy41LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotcmVxdWlyZSBkaGNwLmluYwotCi1TUkNfVVJJICs9ICJmaWxlOi8vZGhjcC0zLjAuMy1kaGNsaWVudC1kYnVzLnBhdGNoO3N0cmlwbGV2ZWw9MCBcCi0gICAgICAgICAgICBmaWxlOi8vbGluay13aXRoLWxjcnlwdG8ucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2ZpeHNlcGJ1aWxkLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9kaGNsaWVudC1zY3JpcHQtZHJvcC1yZXNvbHYuY29uZi5kaGNsaWVudC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vcmVwbGFjZS1pZmNvbmZpZy1yb3V0ZS5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vMDAwMS1zaXRlLmgtZW5hYmxlLWdlbnRsZS1zaHV0ZG93bi5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vbGlieG1sMi1jb25maWd1cmUtYXJndW1lbnQucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3R3ZWFrLXRvLXN1cHBvcnQtZXh0ZXJuYWwtYmluZC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLWRoY2xpZW50LXNjcmlwdC1iYXNoLWRlcGVuZGVuY3kucGF0Y2ggXAotICAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIyYjVlNWIyZmEzMWMyZTI3ZTQ4NzAzOWQ4NmY4M2QzZiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJlYjk1OTM2YmYxNWQyMzkzYzU1ZGQ1MDViYzUyN2QxZDQ0MDgyODljZWM1YTlmYThhYmI5OWY3NTc3ZTdmOTU0IgotCi1QQUNLQUdFQ09ORklHID89ICIiCi1QQUNLQUdFQ09ORklHW2JpbmQtaHR0cHN0YXRzXSA9ICItLXdpdGgtbGlieG1sMiwtLXdpdGhvdXQtbGlieG1sMixsaWJ4bWwyIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwXzQuMy42LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwXzQuMy42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MTVhZTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3BfNC4zLjYuYmIKQEAgLTAsMCArMSwyMSBAQAorcmVxdWlyZSBkaGNwLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1kZWZpbmUtbWFjcm8tX1BBVEhfREhDUERfQ09ORi1hbmQtX1BBVEhfREhDTElFTlRfQ09OLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAyLWRoY2xpZW50LWRidXMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDMtbGluay13aXRoLWxjcnlwdG8ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDQtRml4LW91dC1vZi10cmVlLWJ1aWxkcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwNS1kaGNwLWNsaWVudC1maXgtaW52b2tlLWRoY2xpZW50LXNjcmlwdC1mYWlsZWQtb24tUmVhLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDA2LXNpdGUuaC1lbmFibGUtZ2VudGxlLXNodXRkb3duLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDA3LUFkZC1jb25maWd1cmUtYXJndW1lbnQtdG8tbWFrZS10aGUtbGlieG1sMi1kZXBlbmRlbmMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDgtdHdlYWstdG8tc3VwcG9ydC1leHRlcm5hbC1iaW5kLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDA5LXJlbW92ZS1kaGNsaWVudC1zY3JpcHQtYmFzaC1kZXBlbmRlbmN5LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDEwLWJ1aWxkLXNoYXJlZC1saWJzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDExLU1vdmVkLXRoZS1jYWxsLXRvLWlzY19hcHBfY3R4c3RhcnQtdG8tbm90LWdldC1zaWduYWwucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMTItZGhjcC1jb3JyZWN0LXRoZS1pbnRlbnRpb24tZm9yLXhtbDItbGliLXNlYXJjaC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImFmYTZlOWIzZWI3NTM5ZWEwNDg0MjFhODJjNjY4YWRjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImE0MWVhZjYzNjRmMTM3N2ZlMDY1ZDM1NjcxZDljZjgyYmJiYzhmMjEyMDc4MTliMmI5ZjMzZjY1MmFlYzZmMWIiCisKK1BBQ0tBR0VDT05GSUcgPz0gIiIKK1BBQ0tBR0VDT05GSUdbYmluZC1odHRwc3RhdHNdID0gIi0td2l0aC1saWJ4bWwyLC0td2l0aG91dC1saWJ4bWwyLGxpYnhtbDIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY2xpZW50LXN5c3RlbWQtd3JhcHBlciBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjbGllbnQtc3lzdGVtZC13cmFwcGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMGUyMjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY2xpZW50LXN5c3RlbWQtd3JhcHBlcgpAQCAtMCwwICsxLDM5IEBACisjIS9iaW4vc2gKKworIyBJbiBjYXNlIHRoZSBpbnRlcmZhY2UgaXMgdXNlZCBmb3IgbmZzLCBza2lwIGl0LgorbmZzcm9vdD0wCitpbnRlcmZhY2VzPSIiCitleGVjIDk8JjAgPCAvcHJvYy9tb3VudHMKK3doaWxlIHJlYWQgZGV2IG10cHQgZnN0eXBlIHJlc3Q7IGRvCisgICAgaWYgdGVzdCAkbXRwdCA9ICIvIiA7IHRoZW4KKyAgICAgICAgY2FzZSAkZnN0eXBlIGluCisgICAgICAgICAgICBuZnMgfCBuZnM0KQorICAgICAgICAgICAgICAgIG5mc3Jvb3Q9MQorICAgICAgICAgICAgICAgIG5mc19hZGRyPWBlY2hvICRyZXN0IHwgc2VkIC1lICdzL14uKmFkZHI9XChbMC05Ll0qXCkuKiQvXDEvJ2AKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBmaQorZG9uZQorZXhlYyAwPCY5IDk8Ji0KKworaWYgWyAkbmZzcm9vdCAtZXEgMCBdOyB0aGVuCisgICAgaW50ZXJmYWNlcz0iJElOVEVSRkFDRVMiCitlbHNlCisgICAgaWYgWyAteCAvYmluL2lwIC1vIC14IC9zYmluL2lwIF0gOyB0aGVuCisJbmZzX2lmYWNlPWBpcCByb3V0ZSBnZXQgJG5mc19hZGRyIHwgZ3JlcCBkZXYgfCBzZWQgLWUgJ3MvXi4qZGV2IFwoWy1hLXowLTkuXSpcKS4qJC9cMS8nYAorICAgIGZpCisgICAgZm9yIGkgaW4gJElOVEVSRkFDRVM7IGRvCisJaWYgdGVzdCAieCRpIiA9ICJ4JG5mc19pZmFjZSI7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gImRoY2xpZW50IHNraXBwaW5nIG5mc3Jvb3QgaW50ZXJmYWNlICRpIgorCWVsc2UKKwkgICAgaW50ZXJmYWNlcz0iJGludGVyZmFjZXMgJGkiCisJZmkKKyAgICBkb25lCitmaQorCitpZiB0ZXN0ICJ4JGludGVyZmFjZXMiICE9ICJ4IjsgdGhlbgorICAgIC9zYmluL2RoY2xpZW50IC1kIC1jZiAvZXRjL2RoY3AvZGhjbGllbnQuY29uZiAtcSAtbGYgL3Zhci9saWIvZGhjcC9kaGNsaWVudC5sZWFzZXMgJGludGVyZmFjZXMKK2ZpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY2xpZW50LnNlcnZpY2UgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY2xpZW50LnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRkYjRkMQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjbGllbnQuc2VydmljZQpAQCAtMCwwICsxLDEzIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPUR5bmFtaWMgSG9zdCBDb25maWd1cmF0aW9uIFByb3RvY29sIChESENQKQorV2FudHM9bmV0d29yay50YXJnZXQKK0JlZm9yZT1uZXR3b3JrLnRhcmdldAorQWZ0ZXI9c3lzdGVtZC11ZGV2ZC5zZXJ2aWNlCisKK1tTZXJ2aWNlXQorRW52aXJvbm1lbnRGaWxlPS1AU1lTQ09ORkRJUkAvZGVmYXVsdC9kaGNwLWNsaWVudAorRXhlY1N0YXJ0PUBCQVNFX1NCSU5ESVJAL2RoY2xpZW50LXN5c3RlbWQtd3JhcHBlcgorUmVtYWluQWZ0ZXJFeGl0PXllcworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMi5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMi5pbmMKaW5kZXggY2U2NDg4OC4uYTU3OGViMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyLmluYwpAQCAtMTMsNyArMTMsMTAgQEAKIAogaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzIGJhc2gtY29tcGxldGlvbiBwa2djb25maWcKIAotRVhUUkFfT0VNQUtFID0gIkNDPScke0NDfScgS0VSTkVMX0lOQ0xVREU9JHtTVEFHSU5HX0lOQ0RJUn0gRE9DRElSPSR7ZG9jZGlyfS9pcHJvdXRlMiBTVUJESVJTPSdsaWIgdGMgaXAgYnJpZGdlIG1pc2MgZ2VubCcgU0JJTkRJUj0nJHtiYXNlX3NiaW5kaXJ9JyBMSUJESVI9JyR7bGliZGlyfSciCitQQUNLQUdFQ09ORklHID8/PSAidGlwYyIKK1BBQ0tBR0VDT05GSUdbdGlwY10gPSAiLCxsaWJtbmwsIgorCitFWFRSQV9PRU1BS0UgPSAiQ0M9JyR7Q0N9JyBLRVJORUxfSU5DTFVERT0ke1NUQUdJTkdfSU5DRElSfSBET0NESVI9JHtkb2NkaXJ9L2lwcm91dGUyIFNVQkRJUlM9J2xpYiB0YyBpcCBicmlkZ2UgbWlzYyBnZW5sICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3RpcGMnLCAndGlwYycsICcnLCBkKX0nIFNCSU5ESVI9JyR7YmFzZV9zYmluZGlyfScgTElCRElSPScke2xpYmRpcn0nIgogCiBkb19jb25maWd1cmVfYXBwZW5kICgpIHsKICAgICBzaCBjb25maWd1cmUgJHtTVEFHSU5HX0lOQ0RJUn0KQEAgLTMyLDcgKzM1LDcgQEAKICMgVGhlIC5zbyBmaWxlcyBpbiBpcHJvdXRlMi10YyBhcmUgbW9kdWxlcywgbm90IHRyYWRpdGlvbmFsIGxpYnJhcmllcwogSU5TQU5FX1NLSVBfJHtQTn0tdGMgPSAiZGV2LXNvIgogCi1QQUNLQUdFUyA9KyAiJHtQTn0tdGMgJHtQTn0tbG5zdGF0ICR7UE59LWlmc3RhdCAke1BOfS1nZW5sICR7UE59LXJ0YWNjdCAke1BOfS1uc3RhdCAke1BOfS1zcyIKK1BBQ0tBR0VTID0rICIke1BOfS10YyAke1BOfS1sbnN0YXQgJHtQTn0taWZzdGF0ICR7UE59LWdlbmwgJHtQTn0tcnRhY2N0ICR7UE59LW5zdGF0ICR7UE59LXNzICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3RpcGMnLCAnJHtQTn0tdGlwYycsICcnLCBkKX0iCiBGSUxFU18ke1BOfS10YyA9ICIke2Jhc2Vfc2JpbmRpcn0vdGMqIFwKICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS90Yy8qLnNvIgogRklMRVNfJHtQTn0tbG5zdGF0ID0gIiR7YmFzZV9zYmluZGlyfS9sbnN0YXQgJHtiYXNlX3NiaW5kaXJ9L2N0c3RhdCAke2Jhc2Vfc2JpbmRpcn0vcnRzdGF0IgpAQCAtNDEsNiArNDQsNyBAQAogRklMRVNfJHtQTn0tcnRhY2N0ID0gIiR7YmFzZV9zYmluZGlyfS9ydGFjY3QiCiBGSUxFU18ke1BOfS1uc3RhdCA9ICIke2Jhc2Vfc2JpbmRpcn0vbnN0YXQiCiBGSUxFU18ke1BOfS1zcyA9ICIke2Jhc2Vfc2JpbmRpcn0vc3MiCitGSUxFU18ke1BOfS10aXBjID0gIiR7YmFzZV9zYmluZGlyfS90aXBjIgogCiBBTFRFUk5BVElWRV8ke1BOfSA9ICJpcCIKIEFMVEVSTkFUSVZFX1RBUkdFVFtpcF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2lwLiR7QlBOfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyLzAwMDEtaW5jbHVkZS1zdGRpbnQuaC1leHBsaWNpdGx5LWZvci1VSU5UMTZfTUFYLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIvMDAwMS1pbmNsdWRlLXN0ZGludC5oLWV4cGxpY2l0bHktZm9yLVVJTlQxNl9NQVgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIwYzBhYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyLzAwMDEtaW5jbHVkZS1zdGRpbnQuaC1leHBsaWNpdGx5LWZvci1VSU5UMTZfTUFYLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gM2M4ODVkODdiZWZjNzA2YmI5MjM5MzNiOTgxOWRlNmZlMmRlODk3ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDIwIE1heSAyMDE3IDE0OjAzOjE5IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGluY2x1ZGUgc3RkaW50LmggZXhwbGljaXRseSBmb3IgVUlOVDE2X01BWCkKKworRml4ZXMKK3wgdGNfY29yZS5jOjE5MDoyOTogZXJyb3I6ICdVSU5UMTZfTUFYJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbik7IGRpZCB5b3UgbWVhbiAnX19JTlQxNl9NQVhfXyc/Cit8ICAgIGlmICgoc3ogPj4gcy0+c2l6ZV9sb2cpID4gVUlOVDE2X01BWCkgeworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5+fn5+fn5+fn4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyB0Yy90Y19jb3JlLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3RjL3RjX2NvcmUuYyBiL3RjL3RjX2NvcmUuYworaW5kZXggN2JiZTBkNy4uODIxYjc0MSAxMDA2NDQKKy0tLSBhL3RjL3RjX2NvcmUuYworKysrIGIvdGMvdGNfY29yZS5jCitAQCAtMTIsNiArMTIsNyBAQAorIAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzeXNsb2cuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKy0tIAorMi4xMy4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyLzAwMDEtaXAtUmVtb3ZlLXVubmVlZC1oZWFkZXIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMi8wMDAxLWlwLVJlbW92ZS11bm5lZWQtaGVhZGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZjhkYjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMi8wMDAxLWlwLVJlbW92ZS11bm5lZWQtaGVhZGVyLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gZjU4ZmM5OWM4OGE1NDEzNWU1NWE2ZTA5NTZjZThhZTcxMDc4ZDFjYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENoYW5naHllb2sgQmFlIDxjaGFuZ2h5ZW9rLmJhZUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEyIEp1biAyMDE3IDA0OjI5OjA3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGlwOiBSZW1vdmUgdW5uZWVkIGhlYWRlcgorCitGaXggcmVkZWZpbml0aW9uIG9mIHN0cnVjdCBldGhoZHIgd2l0aCBhIHN1aXRhYmx5IHBhdGNoZWQgbXVzbCBsaWJjCit0aGF0IHN1cHByZXNzZXMgdGhlIGtlcm5lbCBpZl9ldGhlci5oLgorCitTaWduZWQtb2ZmLWJ5OiBDaGFuZ2h5ZW9rIEJhZSA8Y2hhbmdoeWVvay5iYWVAZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbbmV0ZGV2QHZnZXIua2VybmVsLm9yZ10KKy0tLQorIGlwL2lwbGlua19icmlkZ2UuYyB8IDEgLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9pcC9pcGxpbmtfYnJpZGdlLmMgYi9pcC9pcGxpbmtfYnJpZGdlLmMKK2luZGV4IDgxOGI0M2MuLmYwNjViMjIgMTAwNjQ0CistLS0gYS9pcC9pcGxpbmtfYnJpZGdlLmMKKysrKyBiL2lwL2lwbGlua19icmlkZ2UuYworQEAgLTE1LDcgKzE1LDYgQEAKKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxsaW51eC9pZl9saW5rLmg+CisgI2luY2x1ZGUgPGxpbnV4L2lmX2JyaWRnZS5oPgorLSNpbmNsdWRlIDxuZXRpbmV0L2V0aGVyLmg+CisgI2luY2x1ZGUgPG5ldC9pZi5oPgorIAorICNpbmNsdWRlICJydF9uYW1lcy5oIgorLS0gCisyLjcuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMl80LjEwLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMl80LjEwLjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwNTBlODcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTJfNC4xMC4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotcmVxdWlyZSBpcHJvdXRlMi5pbmMKLQotU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL25ldC8ke0JQTn0vJHtCUH0udGFyLnh6IFwKLSAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS1jcm9zcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWlwcm91dGUyLWRlLWJhc2gtc2NyaXB0cy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWxpYmMtY29tcGF0LmgtYWRkLW11c2wtd29ya2Fyb3VuZC5wYXRjaCBcCi0gICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiYjk0YTJiMGVkZWZhZWFjMTI0ZGM4ZjVkMDA2OTMxYjkiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjJiMWUxYzFmYzcwNGFkMzU4MzdlNWE2NjEwMzczOTcyN2I4YjQ4YWM5MGI0OGMxM2Y3OWI3MzY3ZmYwYTlhOCIKLQotIyBDRkxBR1MgYXJlIGNvbXB1dGVkIGluIE1ha2VmaWxlIGFuZCByZWZlcmVuY2UgQ0NPUFRTCi0jCi1FWFRSQV9PRU1BS0VfYXBwZW5kID0gIiBDQ09QVFM9JyR7Q0ZMQUdTfSciCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMl80LjExLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMl80LjExLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJkMDU0NQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyXzQuMTEuMC5iYgpAQCAtMCwwICsxLDE2IEBACityZXF1aXJlIGlwcm91dGUyLmluYworCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvdXRpbHMvbmV0LyR7QlBOfS8ke0JQfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLWNyb3NzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaXByb3V0ZTItZGUtYmFzaC1zY3JpcHRzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbGliYy1jb21wYXQuaC1hZGQtbXVzbC13b3JrYXJvdW5kLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaW5jbHVkZS1zdGRpbnQuaC1leHBsaWNpdGx5LWZvci1VSU5UMTZfTUFYLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaXAtUmVtb3ZlLXVubmVlZC1oZWFkZXIucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjdhOTQ5OGRlODhiY2NhOTVjMzA1ZGY2MTA4YWUxOTdlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcyNjcxMDI4YmRhNjk2ZDBjYjhmNDhlYzhlNzAyNTgxYzNhNTAxY2FlZWQzM2VlYzNhODFkNzA0MWNiYzgwMjYiCisKKyMgQ0ZMQUdTIGFyZSBjb21wdXRlZCBpbiBNYWtlZmlsZSBhbmQgcmVmZXJlbmNlIENDT1BUUworIworRVhUUkFfT0VNQUtFX2FwcGVuZCA9ICIgQ0NPUFRTPScke0NGTEFHU30nIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcC5pbmMKaW5kZXggNjYzNTc3OS4uZTU3ZWE4NyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJwY2FwL2xpYnBjYXAuaW5jCkBAIC0zOCwzICszOCw1IEBACiBkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CiAgICAgc2VkIC1pIC1lJ3MsXlZfUlBBVEhfT1BUPS4qJCxWX1JQQVRIX09QVD0sJyAke1N9L3BjYXAtY29uZmlnLmluCiB9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbW9iaWxlLWJyb2FkYmFuZC1wcm92aWRlci1pbmZvL21vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mb19naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9tb2JpbGUtYnJvYWRiYW5kLXByb3ZpZGVyLWluZm8vbW9iaWxlLWJyb2FkYmFuZC1wcm92aWRlci1pbmZvX2dpdC5iYgppbmRleCBiZDQ4OGViLi5kYmM1NzhlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9tb2JpbGUtYnJvYWRiYW5kLXByb3ZpZGVyLWluZm8vbW9iaWxlLWJyb2FkYmFuZC1wcm92aWRlci1pbmZvX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9tb2JpbGUtYnJvYWRiYW5kLXByb3ZpZGVyLWluZm8vbW9iaWxlLWJyb2FkYmFuZC1wcm92aWRlci1pbmZvX2dpdC5iYgpAQCAtMSw5ICsxLDEwIEBACiBTVU1NQVJZID0gIk1vYmlsZSBCcm9hZGJhbmQgU2VydmljZSBQcm92aWRlciBEYXRhYmFzZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9saXZlLmdub21lLm9yZy9OZXR3b3JrTWFuYWdlci9Nb2JpbGVCcm9hZGJhbmQvU2VydmljZVByb3ZpZGVycyIKIFNFQ1RJT04gPSAibmV0d29yayIKIExJQ0VOU0UgPSAiUEQiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04Nzk2NDU3OWIyYThlY2U0YmM2NzQ0ZDJkYzlhOGIwNCIKLVNSQ1JFViA9ICI1MTk0NjU3NjZmYWJjODViOWZkZWE1ZjJiNWVlM2QwOGMyYjFmNzBkIgotUFYgPSAiMjAxNTEyMTQiCitTUkNSRVYgPSAiYmVmY2JiYzk4NjdlNzQyYWMxNjQxNTY2MGIwYjc1MjEyMThhNTMwYyIKK1BWID0gIjIwMTcwMzEwIgogUEUgPSAiMSIKIAogU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZ25vbWUub3JnL21vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mbyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvMDAwMS1pbmNsdWRlLXN0ZGludC5oLWZvci1VSU5UMTZfTUFYLWRlZmluaXRpb24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzLzAwMDEtaW5jbHVkZS1zdGRpbnQuaC1mb3ItVUlOVDE2X01BWC1kZWZpbml0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNWEyYzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzLzAwMDEtaW5jbHVkZS1zdGRpbnQuaC1mb3ItVUlOVDE2X01BWC1kZWZpbml0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK0Zyb20gMzZiNDgwNTdiY2U3NmRjZWQzMzVkNjdhMjg5NGE0MjA5Njc4MTFjOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDIwIE1heSAyMDE3IDE0OjA3OjUzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGluY2x1ZGUgc3RkaW50LmggZm9yIFVJTlQxNl9NQVggZGVmaW5pdGlvbgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIHN1cHBvcnQvbnNtL3JwYy5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9zdXBwb3J0L25zbS9ycGMuYyBiL3N1cHBvcnQvbnNtL3JwYy5jCitpbmRleCA0ZTVmNDBlLi5kOTFjNmVhIDEwMDY0NAorLS0tIGEvc3VwcG9ydC9uc20vcnBjLmMKKysrKyBiL3N1cHBvcnQvbnNtL3JwYy5jCitAQCAtNDAsNiArNDAsNyBAQAorIAorICNpbmNsdWRlIDx0aW1lLmg+CisgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKy0tIAorMi4xMy4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHNfMS4zLjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzXzEuMy40LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2E5YWIyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHNfMS4zLjQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotU1VNTUFSWSA9ICJ1c2Vyc3BhY2UgdXRpbGl0aWVzIGZvciBrZXJuZWwgbmZzIgotREVTQ1JJUFRJT04gPSAiVGhlIG5mcy11dGlscyBwYWNrYWdlIHByb3ZpZGVzIGEgZGFlbW9uIGZvciB0aGUga2VybmVsIFwKLU5GUyBzZXJ2ZXIgYW5kIHJlbGF0ZWQgdG9vbHMuIgotSE9NRVBBR0UgPSAiaHR0cDovL25mcy5zb3VyY2Vmb3JnZS5uZXQvIgotU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCi0KLUxJQ0VOU0UgPSAiTUlUICYgR1BMdjIrICYgQlNEIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTVmM2E5M2E1YzNjNzg4OGRlNjIzYjQ2ZWEwODVhODQiCi0KLSMgdXRpbC1saW51eCBmb3IgbGliYmxraWQKLURFUEVORFMgPSAibGliY2FwIGxpYm5mc2lkbWFwIGxpYmV2ZW50IHV0aWwtbGludXggc3FsaXRlMyBsaWJ0aXJwYyIKLVJERVBFTkRTXyR7UE59ID0gIiR7UE59LWNsaWVudCBiYXNoIgotUlJFQ09NTUVORFNfJHtQTn0gPSAia2VybmVsLW1vZHVsZS1uZnNkIgotCi1pbmhlcml0IHVzZXJhZGQKLQotVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfS1jbGllbnQiCi1VU0VSQUREX1BBUkFNXyR7UE59LWNsaWVudCA9ICItLXN5c3RlbSAgLS1ob21lLWRpciAvdmFyL2xpYi9uZnMgXAotCQkJICAgICAgLS1zaGVsbCAvYmluL2ZhbHNlIC0tdXNlci1ncm91cCBycGN1c2VyIgotCi1TUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvdXRpbHMvbmZzLXV0aWxzLyR7UFZ9L25mcy11dGlscy0ke1BWfS50YXIueHogXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUtQWxsb3ctdG8tZXhwbGljaXRseS1kaXNhYmxlLW5mc2lkbWFwLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL25mcy11dGlscy0xLjIuMy1zbS1ub3RpZnktcmVzX2luaXQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vbmZzc2VydmVyIFwKLSAgICAgICAgICAgZmlsZTovL25mc2NvbW1vbiBcCi0gICAgICAgICAgIGZpbGU6Ly9uZnMtdXRpbHMuY29uZiBcCi0gICAgICAgICAgIGZpbGU6Ly9uZnMtc2VydmVyLnNlcnZpY2UgXAotICAgICAgICAgICBmaWxlOi8vbmZzLW1vdW50ZC5zZXJ2aWNlIFwKLSAgICAgICAgICAgZmlsZTovL25mcy1zdGF0ZC5zZXJ2aWNlIFwKLSAgICAgICAgICAgZmlsZTovL3Byb2MtZnMtbmZzZC5tb3VudCBcCi0gICAgICAgICAgIGZpbGU6Ly9uZnMtdXRpbHMtRG8tbm90LXBhc3MtQ0ZMQUdTLXRvLWdjYy13aGlsZS1idWlsZGluZy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9uZnMtdXRpbHMtZGViaWFuaXplLXN0YXJ0LXN0YXRkLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2J1Z2ZpeC1hZGp1c3Qtc3RhdGQtc2VydmljZS1uYW1lLnBhdGNoIFwKLSIKLQotU1JDX1VSSVttZDVzdW1dID0gIjU0ZTQxMTkwNDNlYzg1MDdhMmEwZTA1NGNmMjg4OWE0IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImI0MmE1YmMwYThkODBkMDQ2NTAwMzBjZWI5YTExZjA4ZjRhY2ZiY2IxZWUyOTdmNjU3ZmI5NGUzMzljNDU5NzUiCi0KLSMgT25seSBrZXJuZWwtbW9kdWxlLW5mc2QgaXMgcmVxdWlyZWQgaGVyZSAoYnV0IGNhbiBiZSBidWlsdC1pbikgIC0gdGhlIG5mc2QgbW9kdWxlIHdpbGwKLSMgcHVsbCBpbiB0aGUgcmVtYWluZGVyIG9mIHRoZSBkZXBlbmRlbmNpZXMuCi0KLUlOSVRTQ1JJUFRfUEFDS0FHRVMgPSAiJHtQTn0gJHtQTn0tY2xpZW50IgotSU5JVFNDUklQVF9OQU1FID0gIm5mc3NlcnZlciIKLUlOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIgotSU5JVFNDUklQVF9OQU1FXyR7UE59LWNsaWVudCA9ICJuZnNjb21tb24iCi1JTklUU0NSSVBUX1BBUkFNU18ke1BOfS1jbGllbnQgPSAiZGVmYXVsdHMgMTkgMjEiCi0KLWluaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCB1cGRhdGUtcmMuZCBzeXN0ZW1kIHBrZ2NvbmZpZwotCi1TWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59ICR7UE59LWNsaWVudCIKLVNZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJuZnMtc2VydmVyLnNlcnZpY2UgbmZzLW1vdW50ZC5zZXJ2aWNlIgotU1lTVEVNRF9TRVJWSUNFXyR7UE59LWNsaWVudCA9ICJuZnMtc3RhdGQuc2VydmljZSIKLQotIyAtLWVuYWJsZS11dWlkIGlzIG5lZWQgZm9yIGNyb3NzLWNvbXBpbGluZwotRVhUUkFfT0VDT05GID0gIi0td2l0aC1zdGF0ZHVzZXI9cnBjdXNlciBcCi0gICAgICAgICAgICAgICAgLS1lbmFibGUtbW91bnRjb25maWcgXAotICAgICAgICAgICAgICAgIC0tZW5hYmxlLWxpYm1vdW50LW1vdW50IFwKLSAgICAgICAgICAgICAgICAtLWRpc2FibGUtbmZzdjQxIFwKLSAgICAgICAgICAgICAgICAtLWVuYWJsZS11dWlkIFwKLSAgICAgICAgICAgICAgICAtLWRpc2FibGUtZ3NzIFwKLSAgICAgICAgICAgICAgICAtLWRpc2FibGUtbmZzZGNsdHJhY2sgXAotICAgICAgICAgICAgICAgIC0td2l0aC1zdGF0ZHBhdGg9L3Zhci9saWIvbmZzL3N0YXRkIFwKLSAgICAgICAgICAgICAgICIKLQotUEFDS0FHRUNPTkZJRyA/Pz0gInRjcC13cmFwcGVycyBcCi0gICAgJHtAYmIudXRpbHMuZmlsdGVyKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsIGQpfSBcCi0iCi1QQUNLQUdFQ09ORklHX3JlbW92ZV9saWJjLW11c2wgPSAidGNwLXdyYXBwZXJzIgotUEFDS0FHRUNPTkZJR1t0Y3Atd3JhcHBlcnNdID0gIi0td2l0aC10Y3Atd3JhcHBlcnMsLS13aXRob3V0LXRjcC13cmFwcGVycyx0Y3Atd3JhcHBlcnMiCi1QQUNLQUdFQ09ORklHW25mc2lkbWFwXSA9ICItLWVuYWJsZS1uZnNpZG1hcCwtLWRpc2FibGUtbmZzaWRtYXAsa2V5dXRpbHMiCi1QQUNLQUdFQ09ORklHW2lwdjZdID0gIi0tZW5hYmxlLWlwdjYsLS1kaXNhYmxlLWlwdjYsIgotCi1QQUNLQUdFUyA9KyAiJHtQTn0tY2xpZW50ICR7UE59LW1vdW50ICR7UE59LXN0YXRzIgotCi1DT05GRklMRVNfJHtQTn0tY2xpZW50ICs9ICIke2xvY2Fsc3RhdGVkaXJ9L2xpYi9uZnMvZXRhYiBcCi0JCQkgICAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9uZnMvcm10YWIgXAotCQkJICAgJHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzL3h0YWIgXAotCQkJICAgJHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzL3N0YXRkL3N0YXRlIFwKLQkJCSAgICR7c3lzY29uZmRpcn0vbmZzbW91bnQuY29uZiIKLQotRklMRVNfJHtQTn0tY2xpZW50ID0gIiR7c2JpbmRpcn0vKnN0YXRkIFwKLQkJICAgICAgJHtzYmluZGlyfS9ycGMuaWRtYXBkICR7c2JpbmRpcn0vc20tbm90aWZ5IFwKLQkJICAgICAgJHtzYmluZGlyfS9zaG93bW91bnQgJHtzYmluZGlyfS9uZnNzdGF0IFwKLQkJICAgICAgJHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzIFwKLQkJICAgICAgJHtzeXNjb25mZGlyfS9uZnMtdXRpbHMuY29uZiBcCi0JCSAgICAgICR7c3lzY29uZmRpcn0vbmZzbW91bnQuY29uZiBcCi0JCSAgICAgICR7c3lzY29uZmRpcn0vaW5pdC5kL25mc2NvbW1vbiBcCi0JCSAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbmZzLXN0YXRkLnNlcnZpY2UiCi1SREVQRU5EU18ke1BOfS1jbGllbnQgPSAiJHtQTn0tbW91bnQgcnBjYmluZCIKLQotRklMRVNfJHtQTn0tbW91bnQgPSAiJHtiYXNlX3NiaW5kaXJ9Lyptb3VudC5uZnMqIgotCi1GSUxFU18ke1BOfS1zdGF0cyA9ICIke3NiaW5kaXJ9L21vdW50c3RhdHMgJHtzYmluZGlyfS9uZnNpb3N0YXQiCi1SREVQRU5EU18ke1BOfS1zdGF0cyA9ICJweXRob24zLWNvcmUiCi0KLUZJTEVTXyR7UE59ICs9ICIke3N5c3RlbWRfdW5pdGRpcn0iCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgewotICAgICAgICBzZWQgLWkgLWUgJ3Msc2JpbmRpciA9IC9zYmluLHNiaW5kaXIgPSAke2Jhc2Vfc2JpbmRpcn0sZycgXAotICAgICAgICAgICAgJHtTfS91dGlscy9tb3VudC9NYWtlZmlsZS5hbQotCi0gICAgICAgIHNlZCAtaSAtZSAncyxzYmluZGlyID0gL3NiaW4sc2JpbmRpciA9ICR7YmFzZV9zYmluZGlyfSxnJyBcCi0gICAgICAgICAgICAke1N9L3V0aWxzL29zZF9sb2dpbi9NYWtlZmlsZS5hbQotfQotCi0jIE1ha2UgY2xlYW4gbmVlZGVkIGJlY2F1c2UgdGhlIHBhY2thZ2UgY29tZXMgd2l0aAotIyBwcmVjb21waWxlZCA2NC1iaXQgb2JqZWN0cyB0aGF0IGJyZWFrIHRoZSBidWlsZAotZG9fY29tcGlsZV9wcmVwZW5kKCkgewotCW1ha2UgY2xlYW4KLX0KLQotZG9faW5zdGFsbF9hcHBlbmQgKCkgewotCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCi0JaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vbmZzc2VydmVyICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9uZnNzZXJ2ZXIKLQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9uZnNjb21tb24gJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL25mc2NvbW1vbgotCi0JaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vbmZzLXV0aWxzLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0KLQlpbnN0YWxsIC1tIDA3NTUgJHtTfS91dGlscy9tb3VudC9uZnNtb3VudC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9Ci0KLQlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCi0JaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbmZzLXNlcnZlci5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLwotCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L25mcy1tb3VudGQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KLQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9uZnMtc3RhdGQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KLQlzZWQgLWkgLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgXAotCQktZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyBcCi0JCSR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyouc2VydmljZQotCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KLQkgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcHJvYy1mcy1uZnNkLm1vdW50ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLwotCSAgICBpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c2luaXQudGFyZ2V0LndhbnRzLwotCSAgICBsbiAtc2YgLi4vcHJvYy1mcy1uZnNkLm1vdW50ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c2luaXQudGFyZ2V0LndhbnRzL3Byb2MtZnMtbmZzZC5tb3VudAotCWZpCi0KLQkjIGtlcm5lbCBjb2RlIGFzIG9mIDMuOCBoYXJkLWNvZGVzIHRoaXMgcGF0aCBhcyBhIGRlZmF1bHQKLQlpbnN0YWxsIC1kICR7RH0vdmFyL2xpYi9uZnMvdjRyZWNvdmVyeQotCi0JIyBjaG93biB0aGUgZGlyZWN0b3JpZXMgYW5kIGZpbGVzCi0JY2hvd24gLVIgcnBjdXNlcjpycGN1c2VyICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9uZnMvc3RhdGQKLQljaG1vZCAwNjQ0ICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9uZnMvc3RhdGQvc3RhdGUKLQotCSMgdGhlIGZvbGxvd2luZyBhcmUgYnVpbHQgYnkgQ0NfRk9SX0JVSUxECi0Jcm0gLWYgJHtEfSR7c2JpbmRpcn0vcnBjZGVidWcKLQlybSAtZiAke0R9JHtzYmluZGlyfS9ycGNnZW4KLQlybSAtZiAke0R9JHtzYmluZGlyfS9sb2NrdGVzdAotCi0gICAgICAgICMgTWFrZSBweXRob24gdG9vbHMgdXNlIHB5dGhvbiAzCi0gICAgICAgIHNlZCAtaSAtZSAnMXMsIyEuKnB5dGhvbi4qLCMhJHtiaW5kaXJ9L3B5dGhvbjMsJyAke0R9JHtzYmluZGlyfS9tb3VudHN0YXRzICR7RH0ke3NiaW5kaXJ9L25mc2lvc3RhdAotCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzXzIuMS4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlsc18yLjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTE3YzRkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlsc18yLjEuMS5iYgpAQCAtMCwwICsxLDE0OSBAQAorU1VNTUFSWSA9ICJ1c2Vyc3BhY2UgdXRpbGl0aWVzIGZvciBrZXJuZWwgbmZzIgorREVTQ1JJUFRJT04gPSAiVGhlIG5mcy11dGlscyBwYWNrYWdlIHByb3ZpZGVzIGEgZGFlbW9uIGZvciB0aGUga2VybmVsIFwKK05GUyBzZXJ2ZXIgYW5kIHJlbGF0ZWQgdG9vbHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL25mcy5zb3VyY2Vmb3JnZS5uZXQvIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCisKK0xJQ0VOU0UgPSAiTUlUICYgR1BMdjIrICYgQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTVmM2E5M2E1YzNjNzg4OGRlNjIzYjQ2ZWEwODVhODQiCisKKyMgdXRpbC1saW51eCBmb3IgbGliYmxraWQKK0RFUEVORFMgPSAibGliY2FwIGxpYm5mc2lkbWFwIGxpYmV2ZW50IHV0aWwtbGludXggc3FsaXRlMyBsaWJ0aXJwYyIKK1JERVBFTkRTXyR7UE59ID0gIiR7UE59LWNsaWVudCBiYXNoIgorUlJFQ09NTUVORFNfJHtQTn0gPSAia2VybmVsLW1vZHVsZS1uZnNkIgorCitpbmhlcml0IHVzZXJhZGQKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfS1jbGllbnQiCitVU0VSQUREX1BBUkFNXyR7UE59LWNsaWVudCA9ICItLXN5c3RlbSAgLS1ob21lLWRpciAvdmFyL2xpYi9uZnMgXAorCQkJICAgICAgLS1zaGVsbCAvYmluL2ZhbHNlIC0tdXNlci1ncm91cCBycGN1c2VyIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvdXRpbHMvbmZzLXV0aWxzLyR7UFZ9L25mcy11dGlscy0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUtQWxsb3ctdG8tZXhwbGljaXRseS1kaXNhYmxlLW5mc2lkbWFwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25mcy11dGlscy0xLjIuMy1zbS1ub3RpZnktcmVzX2luaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbmZzc2VydmVyIFwKKyAgICAgICAgICAgZmlsZTovL25mc2NvbW1vbiBcCisgICAgICAgICAgIGZpbGU6Ly9uZnMtdXRpbHMuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9uZnMtc2VydmVyLnNlcnZpY2UgXAorICAgICAgICAgICBmaWxlOi8vbmZzLW1vdW50ZC5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL25mcy1zdGF0ZC5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL3Byb2MtZnMtbmZzZC5tb3VudCBcCisgICAgICAgICAgIGZpbGU6Ly9uZnMtdXRpbHMtRG8tbm90LXBhc3MtQ0ZMQUdTLXRvLWdjYy13aGlsZS1idWlsZGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9uZnMtdXRpbHMtZGViaWFuaXplLXN0YXJ0LXN0YXRkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2J1Z2ZpeC1hZGp1c3Qtc3RhdGQtc2VydmljZS1uYW1lLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaW5jbHVkZS1zdGRpbnQuaC1mb3ItVUlOVDE2X01BWC1kZWZpbml0aW9uLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjU5ZGZjYjJlNjI1NGIxMjlmOTAxZjQwYzg2MDg2YjEzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBmYWViNTRjNzBiODRlNmJkM2I5YjY5MDE1NDRiMWY2YWRkOGQyNDZmMzVjMTY4M2U0MDJkYWY0ZTBjNzE5ZWYiCisKKyMgT25seSBrZXJuZWwtbW9kdWxlLW5mc2QgaXMgcmVxdWlyZWQgaGVyZSAoYnV0IGNhbiBiZSBidWlsdC1pbikgIC0gdGhlIG5mc2QgbW9kdWxlIHdpbGwKKyMgcHVsbCBpbiB0aGUgcmVtYWluZGVyIG9mIHRoZSBkZXBlbmRlbmNpZXMuCisKK0lOSVRTQ1JJUFRfUEFDS0FHRVMgPSAiJHtQTn0gJHtQTn0tY2xpZW50IgorSU5JVFNDUklQVF9OQU1FID0gIm5mc3NlcnZlciIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIgorSU5JVFNDUklQVF9OQU1FXyR7UE59LWNsaWVudCA9ICJuZnNjb21tb24iCitJTklUU0NSSVBUX1BBUkFNU18ke1BOfS1jbGllbnQgPSAiZGVmYXVsdHMgMTkgMjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCB1cGRhdGUtcmMuZCBzeXN0ZW1kIHBrZ2NvbmZpZworCitTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59ICR7UE59LWNsaWVudCIKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJuZnMtc2VydmVyLnNlcnZpY2UgbmZzLW1vdW50ZC5zZXJ2aWNlIgorU1lTVEVNRF9TRVJWSUNFXyR7UE59LWNsaWVudCA9ICJuZnMtc3RhdGQuc2VydmljZSIKKworIyAtLWVuYWJsZS11dWlkIGlzIG5lZWQgZm9yIGNyb3NzLWNvbXBpbGluZworRVhUUkFfT0VDT05GID0gIi0td2l0aC1zdGF0ZHVzZXI9cnBjdXNlciBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtbW91bnRjb25maWcgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWxpYm1vdW50LW1vdW50IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtbmZzdjQxIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS11dWlkIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtZ3NzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtbmZzZGNsdHJhY2sgXAorICAgICAgICAgICAgICAgIC0td2l0aC1zdGF0ZHBhdGg9L3Zhci9saWIvbmZzL3N0YXRkIFwKKyAgICAgICAgICAgICAgICIKKworUEFDS0FHRUNPTkZJRyA/Pz0gInRjcC13cmFwcGVycyBcCisgICAgJHtAYmIudXRpbHMuZmlsdGVyKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsIGQpfSBcCisiCitQQUNLQUdFQ09ORklHX3JlbW92ZV9saWJjLW11c2wgPSAidGNwLXdyYXBwZXJzIgorUEFDS0FHRUNPTkZJR1t0Y3Atd3JhcHBlcnNdID0gIi0td2l0aC10Y3Atd3JhcHBlcnMsLS13aXRob3V0LXRjcC13cmFwcGVycyx0Y3Atd3JhcHBlcnMiCitQQUNLQUdFQ09ORklHW25mc2lkbWFwXSA9ICItLWVuYWJsZS1uZnNpZG1hcCwtLWRpc2FibGUtbmZzaWRtYXAsa2V5dXRpbHMiCitQQUNLQUdFQ09ORklHW2lwdjZdID0gIi0tZW5hYmxlLWlwdjYsLS1kaXNhYmxlLWlwdjYsIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tY2xpZW50ICR7UE59LW1vdW50ICR7UE59LXN0YXRzIgorCitDT05GRklMRVNfJHtQTn0tY2xpZW50ICs9ICIke2xvY2Fsc3RhdGVkaXJ9L2xpYi9uZnMvZXRhYiBcCisJCQkgICAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9uZnMvcm10YWIgXAorCQkJICAgJHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzL3h0YWIgXAorCQkJICAgJHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzL3N0YXRkL3N0YXRlIFwKKwkJCSAgICR7c3lzY29uZmRpcn0vbmZzbW91bnQuY29uZiIKKworRklMRVNfJHtQTn0tY2xpZW50ID0gIiR7c2JpbmRpcn0vKnN0YXRkIFwKKwkJICAgICAgJHtzYmluZGlyfS9ycGMuaWRtYXBkICR7c2JpbmRpcn0vc20tbm90aWZ5IFwKKwkJICAgICAgJHtzYmluZGlyfS9zaG93bW91bnQgJHtzYmluZGlyfS9uZnNzdGF0IFwKKwkJICAgICAgJHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzIFwKKwkJICAgICAgJHtzeXNjb25mZGlyfS9uZnMtdXRpbHMuY29uZiBcCisJCSAgICAgICR7c3lzY29uZmRpcn0vbmZzbW91bnQuY29uZiBcCisJCSAgICAgICR7c3lzY29uZmRpcn0vaW5pdC5kL25mc2NvbW1vbiBcCisJCSAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbmZzLXN0YXRkLnNlcnZpY2UiCitSREVQRU5EU18ke1BOfS1jbGllbnQgPSAiJHtQTn0tbW91bnQgcnBjYmluZCIKKworRklMRVNfJHtQTn0tbW91bnQgPSAiJHtiYXNlX3NiaW5kaXJ9Lyptb3VudC5uZnMqIgorCitGSUxFU18ke1BOfS1zdGF0cyA9ICIke3NiaW5kaXJ9L21vdW50c3RhdHMgJHtzYmluZGlyfS9uZnNpb3N0YXQiCitSREVQRU5EU18ke1BOfS1zdGF0cyA9ICJweXRob24zLWNvcmUiCisKK0ZJTEVTXyR7UE59ICs9ICIke3N5c3RlbWRfdW5pdGRpcn0iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICAgICBzZWQgLWkgLWUgJ3Msc2JpbmRpciA9IC9zYmluLHNiaW5kaXIgPSAke2Jhc2Vfc2JpbmRpcn0sZycgXAorICAgICAgICAgICAgJHtTfS91dGlscy9tb3VudC9NYWtlZmlsZS5hbQorCisgICAgICAgIHNlZCAtaSAtZSAncyxzYmluZGlyID0gL3NiaW4sc2JpbmRpciA9ICR7YmFzZV9zYmluZGlyfSxnJyBcCisgICAgICAgICAgICAke1N9L3V0aWxzL29zZF9sb2dpbi9NYWtlZmlsZS5hbQorfQorCisjIE1ha2UgY2xlYW4gbmVlZGVkIGJlY2F1c2UgdGhlIHBhY2thZ2UgY29tZXMgd2l0aAorIyBwcmVjb21waWxlZCA2NC1iaXQgb2JqZWN0cyB0aGF0IGJyZWFrIHRoZSBidWlsZAorZG9fY29tcGlsZV9wcmVwZW5kKCkgeworCW1ha2UgY2xlYW4KK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vbmZzc2VydmVyICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9uZnNzZXJ2ZXIKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9uZnNjb21tb24gJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL25mc2NvbW1vbgorCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vbmZzLXV0aWxzLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS91dGlscy9tb3VudC9uZnNtb3VudC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9CisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbmZzLXNlcnZlci5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L25mcy1tb3VudGQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9uZnMtc3RhdGQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKwlzZWQgLWkgLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgXAorCQktZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyBcCisJCSR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyouc2VydmljZQorCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcHJvYy1mcy1uZnNkLm1vdW50ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCSAgICBpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c2luaXQudGFyZ2V0LndhbnRzLworCSAgICBsbiAtc2YgLi4vcHJvYy1mcy1uZnNkLm1vdW50ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c2luaXQudGFyZ2V0LndhbnRzL3Byb2MtZnMtbmZzZC5tb3VudAorCWZpCisKKwkjIGtlcm5lbCBjb2RlIGFzIG9mIDMuOCBoYXJkLWNvZGVzIHRoaXMgcGF0aCBhcyBhIGRlZmF1bHQKKwlpbnN0YWxsIC1kICR7RH0vdmFyL2xpYi9uZnMvdjRyZWNvdmVyeQorCisJIyBjaG93biB0aGUgZGlyZWN0b3JpZXMgYW5kIGZpbGVzCisJY2hvd24gLVIgcnBjdXNlcjpycGN1c2VyICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9uZnMvc3RhdGQKKwljaG1vZCAwNjQ0ICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9uZnMvc3RhdGQvc3RhdGUKKworCSMgdGhlIGZvbGxvd2luZyBhcmUgYnVpbHQgYnkgQ0NfRk9SX0JVSUxECisJcm0gLWYgJHtEfSR7c2JpbmRpcn0vcnBjZGVidWcKKwlybSAtZiAke0R9JHtzYmluZGlyfS9ycGNnZW4KKwlybSAtZiAke0R9JHtzYmluZGlyfS9sb2NrdGVzdAorCisgICAgICAgICMgTWFrZSBweXRob24gdG9vbHMgdXNlIHB5dGhvbiAzCisgICAgICAgIHNlZCAtaSAtZSAnMXMsIyEuKnB5dGhvbi4qLCMhJHtiaW5kaXJ9L3B5dGhvbjMsJyAke0R9JHtzYmluZGlyfS9tb3VudHN0YXRzICR7RH0ke3NiaW5kaXJ9L25mc2lvc3RhdAorCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9ub18xLjE5LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm9fMS4xOS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRlYmQ3MS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9ub18xLjE5LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotcmVxdWlyZSBvZm9uby5pbmMKLQotU1JDX1VSSSAgPSAiXAotICAke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L25ldHdvcmsvJHtCUE59LyR7QlB9LnRhci54eiBcCi0gIGZpbGU6Ly9vZm9ubyBcCi0iCi1TUkNfVVJJW21kNXN1bV0gPSAiYTVmODgwM2FjZTExMDUxMWI2ZmY1YTJiMzk3ODJlOGIiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTBlMDliZGQ4YjUzYjhkMmU0YjU0ZjE4NjNlY2Q5YWViZTQ3ODY0NzdhNmNiZjhmNjU1NDk2ZThlZGIzMWM4MSIKLQotQ0ZMQUdTX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLURfR05VX1NPVVJDRSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vXzEuMjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9ub18xLjIwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4Zjk4M2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9ub18xLjIwLmJiCkBAIC0wLDAgKzEsOCBAQAorcmVxdWlyZSBvZm9uby5pbmMKKworU1JDX1VSSSAgPSAiXAorICAke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L25ldHdvcmsvJHtCUE59LyR7QlB9LnRhci54eiBcCisgIGZpbGU6Ly9vZm9ubyBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiZmFkMDYzMGZjZTZhOWFlY2RiN2RiMzdiYzFmMWRiN2QiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWQ3YmE4ZjQ4MWE3NzE1ZDAxM2E3OWY4ZDY0NzdlYjg5ZDhhYWFlMzk5Mzk1ZDVkMDA4YTEzMTdjMzRhMzFkNSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vX2dpdC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVhZmI3Ny4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9ub19naXQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1yZXF1aXJlIG9mb25vLmluYwotCi1TCSA9ICIke1dPUktESVJ9L2dpdCIKLVNSQ1JFViA9ICIxNDU0NGQ1OTk2ODM2ZjYyODYxM2MyY2U1NDQzODBlZTZmYzhmNTE0IgotUFYJID0gIjAuMTItZ2l0JHtTUkNQVn0iCi1QUiA9ICJyNSIKLQotU1JDX1VSSSAgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9uZXR3b3JrL29mb25vL29mb25vLmdpdCBcCi0JICAgIGZpbGU6Ly9vZm9ubyIKLQotZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewotICAke1N9L2Jvb3RzdHJhcAotfQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvMDAwMS1vcGVuc3NoLUZpeC1zeW50YXgtZXJyb3Itb24teDMyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoLzAwMDEtb3BlbnNzaC1GaXgtc3ludGF4LWVycm9yLW9uLXgzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTllMjAwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoLzAwMDEtb3BlbnNzaC1GaXgtc3ludGF4LWVycm9yLW9uLXgzMi5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGE3ZTM1OWQ0YmEzNDVhYTJhMTNjMDdmMTA1NzE4NGU5YjRlNTk4YTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBzd2VlYXVuIDxzd2VlLmF1bi5raG9yQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMjIgQXVnIDIwMTcgMTE6MTk6NDggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gb3BlbnNzaDogRml4IHN5bnRheCBlcnJvciBvbiB4MzIKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorVGhpcyBidWcgaGFzIGJlZW4gZml4ZWQgaW4gdl83LjUgYnJhbmNoIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuc3NoLworb3BlbnNzaC1wb3J0YWJsZS90cmVlL1ZfN181IGFuZCBtYXN0ZXIgYnJhbmNoIGh0dHBzOi8vZ2l0aHViLmNvbS8KK29wZW5zc2gvb3BlbnNzaC1wb3J0YWJsZS90cmVlL21hc3Rlci4KKworRml4IGNvbXBpbGF0aW9uIGVycm9yIGR1cmluZyBvcGVuc3NoIHgzMiBidWlsZCBkdWUgdG8gc3ludGF4IGVycm9yLgorCitTaWduZWQtb2ZmLWJ5OiBzd2VlYXVuIDxzd2VlLmF1bi5raG9yQGludGVsLmNvbT4KKy0tLQorIHNhbmRib3gtc2VjY29tcC1maWx0ZXIuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NhbmRib3gtc2VjY29tcC1maWx0ZXIuYyBiL3NhbmRib3gtc2VjY29tcC1maWx0ZXIuYworaW5kZXggM2ExYWVkYy4uYThkNDcyYSAxMDA2NDQKKy0tLSBhL3NhbmRib3gtc2VjY29tcC1maWx0ZXIuYworKysrIGIvc2FuZGJveC1zZWNjb21wLWZpbHRlci5jCitAQCAtMjM1LDcgKzIzNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29ja19maWx0ZXIgcHJlYXV0aF9pbnNuc1tdID0geworIAkgKiB4ODYtNjQgc3lzY2FsbCB1bmRlciBzb21lIGNpcmN1bXN0YW5jZXMsIGUuZy4KKyAJICogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvODQ5OTIzCisgCSAqLworLQlTQ19BTExPVyhfX05SX2Nsb2NrX2dldHRpbWUgJiB+X19YMzJfU1lTQ0FMTF9CSVQpOworKwlTQ19BTExPVyhfX05SX2Nsb2NrX2dldHRpbWUgJiB+X19YMzJfU1lTQ0FMTF9CSVQpLAorICNlbmRpZgorIAorIAkvKiBEZWZhdWx0IGRlbnkgKi8KKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL2ZpeC1wb3RlbnRpYWwtc2lnbmVkLW92ZXJmbG93LWluLXBvaW50ZXItYXJpdGhtYXRpYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9maXgtcG90ZW50aWFsLXNpZ25lZC1vdmVyZmxvdy1pbi1wb2ludGVyLWFyaXRobWF0aWMucGF0Y2gKaW5kZXggZGY2NGExNC4uN2UwNDNhMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL2ZpeC1wb3RlbnRpYWwtc2lnbmVkLW92ZXJmbG93LWluLXBvaW50ZXItYXJpdGhtYXRpYy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvZml4LXBvdGVudGlhbC1zaWduZWQtb3ZlcmZsb3ctaW4tcG9pbnRlci1hcml0aG1hdGljLnBhdGNoCkBAIC04LDcgKzgsNyBAQAogSW4gY2FzZSBvZiBjb21waWxhdGlvbiBieSBnY2Mgb3IgY2xhbmcgd2l0aCAtZnRyYXB2IG9wdGlvbiwgdGhlIG92ZXJmbG93CiB3b3VsZCBsZWFkIHRvIHByb2dyYW0gYWJvcnQuCiAKLVVwc3RyZWFtLXN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vYnVnemlsbGEubWluZHJvdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2MDhdCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cDovL2J1Z3ppbGxhLm1pbmRyb3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjA4XQogCiBTaWduZWQtb2ZmLWJ5OiBZdWFuamllIEh1YW5nIDx5dWFuamllLmh1YW5nQHdpbmRyaXZlci5jb20+CiAtLS0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkX2NoZWNrX2tleXMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZF9jaGVja19rZXlzCmluZGV4IGY1YmJhNTMuLjU0NjNiMWEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkX2NoZWNrX2tleXMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGRfY2hlY2tfa2V5cwpAQCAtMSw1ICsxLDM1IEBACiAjISAvYmluL3NoCiAKK2dlbmVyYXRlX2tleSgpIHsKKyAgICBsb2NhbCBGSUxFPSQxCisgICAgbG9jYWwgVFlQRT0kMgorICAgIGxvY2FsIERJUj0iJChkaXJuYW1lICIkRklMRSIpIgorCisgICAgbWtkaXIgLXAgIiRESVIiCisgICAgc3NoLWtleWdlbiAtcSAtZiAiJHtGSUxFfS50bXAiIC1OICcnIC10ICRUWVBFCisKKyAgICAjIEF0b21pY2FsbHkgcmVuYW1lIGZpbGUgcHVibGljIGtleQorICAgIG12IC1mICIke0ZJTEV9LnRtcC5wdWIiICIke0ZJTEV9LnB1YiIKKworICAgICMgVGhpcyBzeW5jIGRvZXMgZG91YmxlIGR1dHk6IEVuc3VyaW5nIHRoYXQgdGhlIGRhdGEgaW4gdGhlIHRlbXBvcmFyeQorICAgICMgcHJpdmF0ZSBrZXkgZmlsZSBpcyBvbiBkaXNrIGJlZm9yZSB0aGUgcmVuYW1lLCBhbmQgZW5zdXJpbmcgdGhhdCB0aGUKKyAgICAjIHB1YmxpYyBrZXkgcmVuYW1lIGlzIGNvbXBsZXRlZCBiZWZvcmUgdGhlIHByaXZhdGUga2V5IHJlbmFtZSwgc2luY2Ugd2UKKyAgICAjIHN3aXRjaCBvbiB0aGUgZXhpc3RlbmNlIG9mIHRoZSBwcml2YXRlIGtleSB0byB0cmlnZ2VyIGtleSBnZW5lcmF0aW9uLgorICAgICMgVGhpcyBkb2VzIG1lYW4gaXQgaXMgcG9zc2libGUgZm9yIHRoZSBwdWJsaWMga2V5IHRvIGV4aXN0LCBidXQgYmUgZ2FyYmFnZQorICAgICMgYnV0IHRoaXMgaXMgT0sgYmVjYXVzZSBpbiB0aGF0IGNhc2UgdGhlIHByaXZhdGUga2V5IHdvbid0IGV4aXN0IGFuZCB0aGUKKyAgICAjIGtleXMgd2lsbCBiZSByZWdlbmVyYXRlZC4KKyAgICAjCisgICAgIyBJbiB0aGUgZXZlbnQgdGhhdCBzeW5jIHVuZGVyc3RhbmRzIGFyZ3VtZW50cyB0aGF0IGxpbWl0IHdoYXQgaXQgdHJpZXMgdG8KKyAgICAjIGZzeW5jKCksIHdlIHByb3ZpZGVkIHRoZW0uIElmIGl0IGRvZXMgbm90LCBpdCB3aWxsIHNpbXBseSBjYWxsIHN5bmMoKQorICAgICMgd2hpY2ggaXMganVzdCBhcyB3ZWxsCisgICAgc3luYyAiJHtGSUxFfS5wdWIiICIkRElSIiAiJHtGSUxFfS50bXAiCisKKyAgICBtdiAiJHtGSUxFfS50bXAiICIkRklMRSIKKworICAgICMgc3luYyB0byBlbnN1cmUgdGhlIGF0b21pYyByZW5hbWUgaXMgY29tbWl0dGVkCisgICAgc3luYyAiJERJUiIKK30KKwogIyAvZXRjL2RlZmF1bHQvc3NoIG1heSBzZXQgU1lTQ09ORkRJUiBhbmQgU1NIRF9PUFRTCiBpZiB0ZXN0IC1mIC9ldGMvZGVmYXVsdC9zc2g7IHRoZW4KICAgICAuIC9ldGMvZGVmYXVsdC9zc2gKQEAgLTQzLDIyICs3MywxOCBAQAogIyBjcmVhdGUga2V5cyBpZiBuZWNlc3NhcnkKIGlmIFsgISAtZiAkSE9TVF9LRVlfUlNBIF07IHRoZW4KICAgICBlY2hvICIgIGdlbmVyYXRpbmcgc3NoIFJTQSBrZXkuLi4iCi0gICAgbWtkaXIgLXAgJChkaXJuYW1lICRIT1NUX0tFWV9SU0EpCi0gICAgc3NoLWtleWdlbiAtcSAtZiAkSE9TVF9LRVlfUlNBIC1OICcnIC10IHJzYQorICAgIGdlbmVyYXRlX2tleSAkSE9TVF9LRVlfUlNBIHJzYQogZmkKIGlmIFsgISAtZiAkSE9TVF9LRVlfRUNEU0EgXTsgdGhlbgogICAgIGVjaG8gIiAgZ2VuZXJhdGluZyBzc2ggRUNEU0Ega2V5Li4uIgotICAgIG1rZGlyIC1wICQoZGlybmFtZSAkSE9TVF9LRVlfRUNEU0EpCi0gICAgc3NoLWtleWdlbiAtcSAtZiAkSE9TVF9LRVlfRUNEU0EgLU4gJycgLXQgZWNkc2EKKyAgICBnZW5lcmF0ZV9rZXkgJEhPU1RfS0VZX0VDRFNBIGVjZHNhCiBmaQogaWYgWyAhIC1mICRIT1NUX0tFWV9EU0EgXTsgdGhlbgogICAgIGVjaG8gIiAgZ2VuZXJhdGluZyBzc2ggRFNBIGtleS4uLiIKLSAgICBta2RpciAtcCAkKGRpcm5hbWUgJEhPU1RfS0VZX0RTQSkKLSAgICBzc2gta2V5Z2VuIC1xIC1mICRIT1NUX0tFWV9EU0EgLU4gJycgLXQgZHNhCisgICAgZ2VuZXJhdGVfa2V5ICRIT1NUX0tFWV9EU0EgZHNhCiBmaQogaWYgWyAhIC1mICRIT1NUX0tFWV9FRDI1NTE5IF07IHRoZW4KICAgICBlY2hvICIgIGdlbmVyYXRpbmcgc3NoIEVEMjU1MTkga2V5Li4uIgotICAgIG1rZGlyIC1wICQoZGlybmFtZSAkSE9TVF9LRVlfRUQyNTUxOSkKLSAgICBzc2gta2V5Z2VuIC1xIC1mICRIT1NUX0tFWV9FRDI1NTE5IC1OICcnIC10IGVkMjU1MTkKKyAgICBnZW5lcmF0ZV9rZXkgJEhPU1RfS0VZX0VEMjU1MTkgZWQyNTUxOQogZmkKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGRfY29uZmlnIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGRfY29uZmlnCmluZGV4IGQ0OGJkMmIuLjMxZmU1ZDkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkX2NvbmZpZworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZF9jb25maWcKQEAgLTEwNyw3ICsxMDcsNiBAQAogI1ByaW50TGFzdExvZyB5ZXMKICNUQ1BLZWVwQWxpdmUgeWVzCiAjVXNlTG9naW4gbm8KLVVzZVByaXZpbGVnZVNlcGFyYXRpb24gc2FuZGJveCAjIERlZmF1bHQgZm9yIG5ldyBpbnN0YWxsYXRpb25zLgogI1Blcm1pdFVzZXJFbnZpcm9ubWVudCBubwogQ29tcHJlc3Npb24gbm8KIENsaWVudEFsaXZlSW50ZXJ2YWwgMTUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaF83LjRwMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaF83LjRwMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUwMWVhZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2hfNy40cDEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAotU1VNTUFSWSA9ICJBIHN1aXRlIG9mIHNlY3VyaXR5LXJlbGF0ZWQgbmV0d29yayB1dGlsaXRpZXMgYmFzZWQgb24gXAotdGhlIFNTSCBwcm90b2NvbCBpbmNsdWRpbmcgdGhlIHNzaCBjbGllbnQgYW5kIHNzaGQgc2VydmVyIgotREVTQ1JJUFRJT04gPSAiU2VjdXJlIHJsb2dpbi9yc2gvcmNwL3RlbG5ldCByZXBsYWNlbWVudCAoT3BlblNTSCkgXAotU3NoIChTZWN1cmUgU2hlbGwpIGlzIGEgcHJvZ3JhbSBmb3IgbG9nZ2luZyBpbnRvIGEgcmVtb3RlIG1hY2hpbmUgXAotYW5kIGZvciBleGVjdXRpbmcgY29tbWFuZHMgb24gYSByZW1vdGUgbWFjaGluZS4iCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3Lm9wZW5zc2guY29tLyIKLVNFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgotTElDRU5TRSA9ICJCU0QiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTkNFO21kNT1lMzI2MDQ1NjU3ZTg0MjU0MWQzZjM1YWFkYTQ0MjUwNyIKLQotREVQRU5EUyA9ICJ6bGliIG9wZW5zc2wiCi1ERVBFTkRTICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdsaWJwYW0nLCAnJywgZCl9IgotCi1TUkNfVVJJID0gImh0dHA6Ly9mdHAub3BlbmJzZC5vcmcvcHViL09wZW5CU0QvT3BlblNTSC9wb3J0YWJsZS9vcGVuc3NoLSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9zc2hkX2NvbmZpZyBcCi0gICAgICAgICAgIGZpbGU6Ly9zc2hfY29uZmlnIFwKLSAgICAgICAgICAgZmlsZTovL2luaXQgXAotICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9TUkNfVVJJfScsICcnLCBkKX0gXAotICAgICAgICAgICBmaWxlOi8vc3NoZC5zb2NrZXQgXAotICAgICAgICAgICBmaWxlOi8vc3NoZEAuc2VydmljZSBcCi0gICAgICAgICAgIGZpbGU6Ly9zc2hkZ2Vua2V5cy5zZXJ2aWNlIFwKLSAgICAgICAgICAgZmlsZTovL3ZvbGF0aWxlcy45OV9zc2hkIFwKLSAgICAgICAgICAgZmlsZTovL2FkZC10ZXN0LXN1cHBvcnQtZm9yLWJ1c3lib3gucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKLSAgICAgICAgICAgZmlsZTovL29wZW5zc2gtNy4xcDEtY29uZGl0aW9uYWwtY29tcGlsZS1kZXMtaW4tY2lwaGVyLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL29wZW5zc2gtNy4xcDEtY29uZGl0aW9uYWwtY29tcGlsZS1kZXMtaW4tcGtjczExLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2ZpeC1wb3RlbnRpYWwtc2lnbmVkLW92ZXJmbG93LWluLXBvaW50ZXItYXJpdGhtYXRpYy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9zc2hkX2NoZWNrX2tleXMgXAotICAgICAgICAgICAiCi0KLVBBTV9TUkNfVVJJID0gImZpbGU6Ly9zc2hkIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiYjJkYjJhODNjYWY2NmEyMDhiYjc4ZDZkMjg3Y2RhYTMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWIxZmM0YTE0ZTIwMjQyOTMxODE5MjRlZDI0ODcyZTZmMmUwNjI5M2YzZTg5MjZhMzc2YjhhZWM0ODFmMTlkMSIKLQotaW5oZXJpdCB1c2VyYWRkIHVwZGF0ZS1yYy5kIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgc3lzdGVtZAotCi1VU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59LXNzaGQiCi1VU0VSQUREX1BBUkFNXyR7UE59LXNzaGQgPSAiLS1zeXN0ZW0gLS1uby1jcmVhdGUtaG9tZSAtLWhvbWUtZGlyIC92YXIvcnVuL3NzaGQgLS1zaGVsbCAvYmluL2ZhbHNlIC0tdXNlci1ncm91cCBzc2hkIgotSU5JVFNDUklQVF9QQUNLQUdFUyA9ICIke1BOfS1zc2hkIgotSU5JVFNDUklQVF9OQU1FXyR7UE59LXNzaGQgPSAic3NoZCIKLUlOSVRTQ1JJUFRfUEFSQU1TXyR7UE59LXNzaGQgPSAiZGVmYXVsdHMgOSIKLQotU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfS1zc2hkIgotU1lTVEVNRF9TRVJWSUNFXyR7UE59LXNzaGQgPSAic3NoZC5zb2NrZXQiCi0KLWluaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwdGVzdAotCi0jIExGUyBzdXBwb3J0OgotQ0ZMQUdTICs9ICItRF9fRklMRV9PRkZTRVRfQklUUz02NCIKLQotIyBsb2dpbiBwYXRoIGlzIGhhcmRjb2RlZCBpbiBzc2hkCi1FWFRSQV9PRUNPTkYgPSAiJ0xPR0lOX1BST0dSQU09JHtiYXNlX2JpbmRpcn0vbG9naW4nIFwKLSAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICctLXdpdGgtcGFtJywgJy0td2l0aG91dC1wYW0nLCBkKX0gXAotICAgICAgICAgICAgICAgIC0td2l0aG91dC16bGliLXZlcnNpb24tY2hlY2sgXAotICAgICAgICAgICAgICAgIC0td2l0aC1wcml2c2VwLXBhdGg9L3Zhci9ydW4vc3NoZCBcCi0gICAgICAgICAgICAgICAgLS1zeXNjb25mZGlyPSR7c3lzY29uZmRpcn0vc3NoIFwKLSAgICAgICAgICAgICAgICAtLXdpdGgteGF1dGg9L3Vzci9iaW4veGF1dGggXAotICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1zdHJpcCBcCi0gICAgICAgICAgICAgICAgIgotCi0jIFNpbmNlIHdlIGRvIG5vdCBkZXBlbmQgb24gbGliYnNkLCB3ZSBkbyBub3Qgd2FudCBjb25maWd1cmUgdG8gdXNlIGl0Ci0jIGp1c3QgYmVjYXVzZSBpdCBmaW5kcyBsaWJ1dGlsLmguICBCdXQsIHNwZWNpZnlpbmcgLS1kaXNhYmxlLWxpYnV0aWwKLSMgY2F1c2VzIGNvbXBpbGUgZXJyb3JzLCBzby4uLgotQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X2hlYWRlcl9ic2RfbGlidXRpbF9oPW5vIGFjX2N2X2hlYWRlcl9saWJ1dGlsX2g9bm8iCi0KLSMgcGFzc3dkIHBhdGggaXMgaGFyZGNvZGVkIGluIHNzaGQKLUNBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX1BBVEhfUEFTU1dEX1BST0c9JHtiaW5kaXJ9L3Bhc3N3ZCIKLQotIyBXZSBkb24ndCB3YW50IHRvIGRlcGVuZCBvbiBsaWJibG9ja2ZpbGUKLUNBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9oZWFkZXJfbWFpbGxvY2tfaD1ubyIKLQotIyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgdWNsaWJjIGJlY2F1c2UgaW5jbHVkaW5nIHN0ZGlvLmgKLSMgcHVsbHMgaW4gcHRocmVhZHMuaCBhbmQgY2F1c2VzIGNvbmZsaWN0cyBpbiBmdW5jdGlvbiBwcm90b3R5cGVzLgotIyBUaGlzIHJlc3VsdHMgaW4gY29tcGlsYXRpb24gZmFpbHVyZSwgc28gdW5sZXNzIHRoaXMgaXMgZml4ZWQsCi0jIGRpc2FibGUgcGFtIGZvciB1Y2xpYmMuCi1FWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjPSIgLS13aXRob3V0LXBhbSIKLQotZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewotCWV4cG9ydCBMRD0iJHtDQ30iCi0JaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc3NoZF9jb25maWcgJHtCfS8KLQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zc2hfY29uZmlnICR7Qn0vCi0JaWYgWyAhIC1lIGFjaW5jbHVkZS5tNCAtYSAtZSBhY2xvY2FsLm00IF07IHRoZW4KLQkJY3AgYWNsb2NhbC5tNCBhY2luY2x1ZGUubTQKLQlmaQotfQotCi1kb19jb21waWxlX3B0ZXN0KCkgewotICAgICAgICAjIHNraXAgcmVncmVzcy91bml0dGVzdHMvIGJpbmFyaWVzOiB0aGlzIHdpbGwgc2lsZW50bHkgc2tpcAotICAgICAgICAjIHVuaXR0ZXN0cyBpbiBydW4tcHRlc3RzIHdoaWNoIGlzIGdvb2QgYmVjYXVzZSB0aGV5IGFyZSBzbyBzbG93LgotICAgICAgICBvZV9ydW5tYWtlIHJlZ3Jlc3MvbW9kcGlwZSByZWdyZXNzL3NldHVpZC1hbGxvd2VkIHJlZ3Jlc3MvbmV0Y2F0Ci19Ci0KLWRvX2luc3RhbGxfYXBwZW5kICgpIHsKLQlpZiBbICIke0BiYi51dGlscy5maWx0ZXIoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCBkKX0iIF07IHRoZW4KLQkJaW5zdGFsbCAtRCAtbSAwNjQ0ICR7V09SS0RJUn0vc3NoZCAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC9zc2hkCi0JCXNlZCAtaSAtZSAnczojVXNlUEFNIG5vOlVzZVBBTSB5ZXM6JyAke0R9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWcKLQlmaQotCi0JaWYgWyAiJHtAYmIudXRpbHMuZmlsdGVyKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgZCl9IiBdOyB0aGVuCi0JCXNlZCAtaSAtZSAnczojWDExRm9yd2FyZGluZyBubzpYMTFGb3J3YXJkaW5nIHllczonICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZwotCWZpCi0KLQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAotCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3NzaGQKLQlybSAtZiAke0R9JHtiaW5kaXJ9L3Nsb2dpbiAke0R9JHtkYXRhZGlyfS9Tc2guYmluCi0Jcm1kaXIgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuL3NzaGQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuICR7RH0ke2xvY2Fsc3RhdGVkaXJ9Ci0JaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKLQlpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L3ZvbGF0aWxlcy45OV9zc2hkICR7RH0vJHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcy85OV9zc2hkCi0JaW5zdGFsbCAtbSAwNzU1ICR7U30vY29udHJpYi9zc2gtY29weS1pZCAke0R9JHtiaW5kaXJ9Ci0KLQkjIENyZWF0ZSBjb25maWcgZmlsZXMgZm9yIHJlYWQtb25seSByb290ZnMKLQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3NzaAotCWluc3RhbGwgLW0gNjQ0ICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZyAke0R9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWdfcmVhZG9ubHkKLQlzZWQgLWkgJy9Ib3N0S2V5L2QnICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQotCWVjaG8gIkhvc3RLZXkgL3Zhci9ydW4vc3NoL3NzaF9ob3N0X3JzYV9rZXkiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQotCWVjaG8gIkhvc3RLZXkgL3Zhci9ydW4vc3NoL3NzaF9ob3N0X2RzYV9rZXkiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQotCWVjaG8gIkhvc3RLZXkgL3Zhci9ydW4vc3NoL3NzaF9ob3N0X2VjZHNhX2tleSIgPj4gJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnX3JlYWRvbmx5Ci0JZWNobyAiSG9zdEtleSAvdmFyL3J1bi9zc2gvc3NoX2hvc3RfZWQyNTUxOV9rZXkiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQotCi0JaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQotCWluc3RhbGwgLWMgLW0gMDY0NCAke1dPUktESVJ9L3NzaGQuc29ja2V0ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCi0JaW5zdGFsbCAtYyAtbSAwNjQ0ICR7V09SS0RJUn0vc3NoZEAuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQotCWluc3RhbGwgLWMgLW0gMDY0NCAke1dPUktESVJ9L3NzaGRnZW5rZXlzLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KLQlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCi0JCS1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKLQkJLWUgJ3MsQEJJTkRJUkAsJHtiaW5kaXJ9LGcnIFwKLQkJLWUgJ3MsQExJQkVYRUNESVJALCR7bGliZXhlY2Rpcn0vJHtCUE59LGcnIFwKLQkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3NoZC5zb2NrZXQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vKi5zZXJ2aWNlCi0KLQlzZWQgLWkgLWUgJ3MsQExJQkVYRUNESVJALCR7bGliZXhlY2Rpcn0vJHtCUE59LGcnIFwKLQkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3NzaGQKLQotCWluc3RhbGwgLUQgLW0gMDc1NSAke1dPUktESVJ9L3NzaGRfY2hlY2tfa2V5cyAke0R9JHtsaWJleGVjZGlyfS8ke0JQTn0vc3NoZF9jaGVja19rZXlzCi19Ci0KLWRvX2luc3RhbGxfcHRlc3QgKCkgewotCXNlZCAtaSAtZSAic3xeU0ZUUFNFUlZFUj0uKnxTRlRQU0VSVkVSPSR7bGliZXhlY2Rpcn0vc2Z0cC1zZXJ2ZXJ8IiByZWdyZXNzL3Rlc3QtZXhlYy5zaAotCWNwIC1yIHJlZ3Jlc3MgJHtEfSR7UFRFU1RfUEFUSH0KLX0KLQotQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKLQotUEFDS0FHRVMgPSsgIiR7UE59LWtleWdlbiAke1BOfS1zY3AgJHtQTn0tc3NoICR7UE59LXNzaGQgJHtQTn0tc2Z0cCAke1BOfS1taXNjICR7UE59LXNmdHAtc2VydmVyIgotRklMRVNfJHtQTn0tc2NwID0gIiR7YmluZGlyfS9zY3AuJHtCUE59IgotRklMRVNfJHtQTn0tc3NoID0gIiR7YmluZGlyfS9zc2guJHtCUE59ICR7c3lzY29uZmRpcn0vc3NoL3NzaF9jb25maWciCi1GSUxFU18ke1BOfS1zc2hkID0gIiR7c2JpbmRpcn0vc3NoZCAke3N5c2NvbmZkaXJ9L2luaXQuZC9zc2hkICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0iCi1GSUxFU18ke1BOfS1zc2hkICs9ICIke3N5c2NvbmZkaXJ9L3NzaC9tb2R1bGkgJHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWcgJHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWdfcmVhZG9ubHkgJHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcy85OV9zc2hkICR7c3lzY29uZmRpcn0vcGFtLmQvc3NoZCIKLUZJTEVTXyR7UE59LXNzaGQgKz0gIiR7bGliZXhlY2Rpcn0vJHtCUE59L3NzaGRfY2hlY2tfa2V5cyIKLUZJTEVTXyR7UE59LXNmdHAgPSAiJHtiaW5kaXJ9L3NmdHAiCi1GSUxFU18ke1BOfS1zZnRwLXNlcnZlciA9ICIke2xpYmV4ZWNkaXJ9L3NmdHAtc2VydmVyIgotRklMRVNfJHtQTn0tbWlzYyA9ICIke2JpbmRpcn0vc3NoKiAke2xpYmV4ZWNkaXJ9L3NzaCoiCi1GSUxFU18ke1BOfS1rZXlnZW4gPSAiJHtiaW5kaXJ9L3NzaC1rZXlnZW4iCi0KLVJERVBFTkRTXyR7UE59ICs9ICIke1BOfS1zY3AgJHtQTn0tc3NoICR7UE59LXNzaGQgJHtQTn0ta2V5Z2VuIgotUkRFUEVORFNfJHtQTn0tc3NoZCArPSAiJHtQTn0ta2V5Z2VuICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbS1wbHVnaW4ta2V5aW5pdCBwYW0tcGx1Z2luLWxvZ2ludWlkJywgJycsIGQpfSIKLVJERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICIke1BOfS1zZnRwICR7UE59LW1pc2MgJHtQTn0tc2Z0cC1zZXJ2ZXIgbWFrZSIKLQotUlBST1ZJREVTXyR7UE59LXNzaCA9ICJzc2giCi1SUFJPVklERVNfJHtQTn0tc3NoZCA9ICJzc2hkIgotCi1SQ09ORkxJQ1RTXyR7UE59ID0gImRyb3BiZWFyIgotUkNPTkZMSUNUU18ke1BOfS1zc2hkID0gImRyb3BiZWFyIgotUkNPTkZMSUNUU18ke1BOfS1rZXlnZW4gPSAic3NoLWtleWdlbiIKLQotQ09ORkZJTEVTXyR7UE59LXNzaGQgPSAiJHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWciCi1DT05GRklMRVNfJHtQTn0tc3NoID0gIiR7c3lzY29uZmRpcn0vc3NoL3NzaF9jb25maWciCi0KLUFMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjkwIgotQUxURVJOQVRJVkVfJHtQTn0tc2NwID0gInNjcCIKLUFMVEVSTkFUSVZFXyR7UE59LXNzaCA9ICJzc2giCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaF83LjVwMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaF83LjVwMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmNhNmZmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoXzcuNXAxLmJiCkBAIC0wLDAgKzEsMTY4IEBACitTVU1NQVJZID0gIkEgc3VpdGUgb2Ygc2VjdXJpdHktcmVsYXRlZCBuZXR3b3JrIHV0aWxpdGllcyBiYXNlZCBvbiBcCit0aGUgU1NIIHByb3RvY29sIGluY2x1ZGluZyB0aGUgc3NoIGNsaWVudCBhbmQgc3NoZCBzZXJ2ZXIiCitERVNDUklQVElPTiA9ICJTZWN1cmUgcmxvZ2luL3JzaC9yY3AvdGVsbmV0IHJlcGxhY2VtZW50IChPcGVuU1NIKSBcCitTc2ggKFNlY3VyZSBTaGVsbCkgaXMgYSBwcm9ncmFtIGZvciBsb2dnaW5nIGludG8gYSByZW1vdGUgbWFjaGluZSBcCithbmQgZm9yIGV4ZWN1dGluZyBjb21tYW5kcyBvbiBhIHJlbW90ZSBtYWNoaW5lLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cub3BlbnNzaC5jb20vIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOQ0U7bWQ1PWUzMjYwNDU2NTdlODQyNTQxZDNmMzVhYWRhNDQyNTA3IgorCisjIG9wZW5zc2wgMS4xIHBhdGNoZXMgYXJlIHByb3Bvc2VkIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuc3NoL29wZW5zc2gtcG9ydGFibGUvcHVsbC80OAorREVQRU5EUyA9ICJ6bGliIG9wZW5zc2wxMCIKK0RFUEVORFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2xpYnBhbScsICcnLCBkKX0iCisKK1NSQ19VUkkgPSAiaHR0cDovL2Z0cC5vcGVuYnNkLm9yZy9wdWIvT3BlbkJTRC9PcGVuU1NIL3BvcnRhYmxlL29wZW5zc2gtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3NzaGRfY29uZmlnIFwKKyAgICAgICAgICAgZmlsZTovL3NzaF9jb25maWcgXAorICAgICAgICAgICBmaWxlOi8vaW5pdCBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJyR7UEFNX1NSQ19VUkl9JywgJycsIGQpfSBcCisgICAgICAgICAgIGZpbGU6Ly9zc2hkLnNvY2tldCBcCisgICAgICAgICAgIGZpbGU6Ly9zc2hkQC5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL3NzaGRnZW5rZXlzLnNlcnZpY2UgXAorICAgICAgICAgICBmaWxlOi8vdm9sYXRpbGVzLjk5X3NzaGQgXAorICAgICAgICAgICBmaWxlOi8vYWRkLXRlc3Qtc3VwcG9ydC1mb3ItYnVzeWJveC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vb3BlbnNzaC03LjFwMS1jb25kaXRpb25hbC1jb21waWxlLWRlcy1pbi1jaXBoZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb3BlbnNzaC03LjFwMS1jb25kaXRpb25hbC1jb21waWxlLWRlcy1pbi1wa2NzMTEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LXBvdGVudGlhbC1zaWduZWQtb3ZlcmZsb3ctaW4tcG9pbnRlci1hcml0aG1hdGljLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtb3BlbnNzaC1GaXgtc3ludGF4LWVycm9yLW9uLXgzMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zc2hkX2NoZWNrX2tleXMgXAorICAgICAgICAgICAiCisKK1BBTV9TUkNfVVJJID0gImZpbGU6Ly9zc2hkIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjUyZmRjN2Q4MzkyZjExMmJlZjExY2FjZjdlNjllMjMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTg0NmUzYzVmYWI5ZjA1NDc0MDBiNGQyYzAxNzk5MmY5MTQyMjJiM2ZkMWY4ZWVlNmM3ZGM2YmM1ZTU5ZjlmMCIKKworaW5oZXJpdCB1c2VyYWRkIHVwZGF0ZS1yYy5kIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgc3lzdGVtZAorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59LXNzaGQiCitVU0VSQUREX1BBUkFNXyR7UE59LXNzaGQgPSAiLS1zeXN0ZW0gLS1uby1jcmVhdGUtaG9tZSAtLWhvbWUtZGlyIC92YXIvcnVuL3NzaGQgLS1zaGVsbCAvYmluL2ZhbHNlIC0tdXNlci1ncm91cCBzc2hkIgorSU5JVFNDUklQVF9QQUNLQUdFUyA9ICIke1BOfS1zc2hkIgorSU5JVFNDUklQVF9OQU1FXyR7UE59LXNzaGQgPSAic3NoZCIKK0lOSVRTQ1JJUFRfUEFSQU1TXyR7UE59LXNzaGQgPSAiZGVmYXVsdHMgOSIKKworU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfS1zc2hkIgorU1lTVEVNRF9TRVJWSUNFXyR7UE59LXNzaGQgPSAic3NoZC5zb2NrZXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwdGVzdAorCisjIExGUyBzdXBwb3J0OgorQ0ZMQUdTICs9ICItRF9fRklMRV9PRkZTRVRfQklUUz02NCIKKworIyBsb2dpbiBwYXRoIGlzIGhhcmRjb2RlZCBpbiBzc2hkCitFWFRSQV9PRUNPTkYgPSAiJ0xPR0lOX1BST0dSQU09JHtiYXNlX2JpbmRpcn0vbG9naW4nIFwKKyAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICctLXdpdGgtcGFtJywgJy0td2l0aG91dC1wYW0nLCBkKX0gXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC16bGliLXZlcnNpb24tY2hlY2sgXAorICAgICAgICAgICAgICAgIC0td2l0aC1wcml2c2VwLXBhdGg9L3Zhci9ydW4vc3NoZCBcCisgICAgICAgICAgICAgICAgLS1zeXNjb25mZGlyPSR7c3lzY29uZmRpcn0vc3NoIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgteGF1dGg9L3Vzci9iaW4veGF1dGggXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1zdHJpcCBcCisgICAgICAgICAgICAgICAgIgorCisjIFNpbmNlIHdlIGRvIG5vdCBkZXBlbmQgb24gbGliYnNkLCB3ZSBkbyBub3Qgd2FudCBjb25maWd1cmUgdG8gdXNlIGl0CisjIGp1c3QgYmVjYXVzZSBpdCBmaW5kcyBsaWJ1dGlsLmguICBCdXQsIHNwZWNpZnlpbmcgLS1kaXNhYmxlLWxpYnV0aWwKKyMgY2F1c2VzIGNvbXBpbGUgZXJyb3JzLCBzby4uLgorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X2hlYWRlcl9ic2RfbGlidXRpbF9oPW5vIGFjX2N2X2hlYWRlcl9saWJ1dGlsX2g9bm8iCisKKyMgcGFzc3dkIHBhdGggaXMgaGFyZGNvZGVkIGluIHNzaGQKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX1BBVEhfUEFTU1dEX1BST0c9JHtiaW5kaXJ9L3Bhc3N3ZCIKKworIyBXZSBkb24ndCB3YW50IHRvIGRlcGVuZCBvbiBsaWJibG9ja2ZpbGUKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9oZWFkZXJfbWFpbGxvY2tfaD1ubyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCWV4cG9ydCBMRD0iJHtDQ30iCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc3NoZF9jb25maWcgJHtCfS8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zc2hfY29uZmlnICR7Qn0vCisJaWYgWyAhIC1lIGFjaW5jbHVkZS5tNCAtYSAtZSBhY2xvY2FsLm00IF07IHRoZW4KKwkJY3AgYWNsb2NhbC5tNCBhY2luY2x1ZGUubTQKKwlmaQorfQorCitkb19jb21waWxlX3B0ZXN0KCkgeworICAgICAgICAjIHNraXAgcmVncmVzcy91bml0dGVzdHMvIGJpbmFyaWVzOiB0aGlzIHdpbGwgc2lsZW50bHkgc2tpcAorICAgICAgICAjIHVuaXR0ZXN0cyBpbiBydW4tcHRlc3RzIHdoaWNoIGlzIGdvb2QgYmVjYXVzZSB0aGV5IGFyZSBzbyBzbG93LgorICAgICAgICBvZV9ydW5tYWtlIHJlZ3Jlc3MvbW9kcGlwZSByZWdyZXNzL3NldHVpZC1hbGxvd2VkIHJlZ3Jlc3MvbmV0Y2F0Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpZiBbICIke0BiYi51dGlscy5maWx0ZXIoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCBkKX0iIF07IHRoZW4KKwkJaW5zdGFsbCAtRCAtbSAwNjQ0ICR7V09SS0RJUn0vc3NoZCAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC9zc2hkCisJCXNlZCAtaSAtZSAnczojVXNlUEFNIG5vOlVzZVBBTSB5ZXM6JyAke0R9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWcKKwlmaQorCisJaWYgWyAiJHtAYmIudXRpbHMuZmlsdGVyKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgZCl9IiBdOyB0aGVuCisJCXNlZCAtaSAtZSAnczojWDExRm9yd2FyZGluZyBubzpYMTFGb3J3YXJkaW5nIHllczonICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZworCWZpCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3NzaGQKKwlybSAtZiAke0R9JHtiaW5kaXJ9L3Nsb2dpbiAke0R9JHtkYXRhZGlyfS9Tc2guYmluCisJcm1kaXIgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuL3NzaGQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuICR7RH0ke2xvY2Fsc3RhdGVkaXJ9CisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKKwlpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L3ZvbGF0aWxlcy45OV9zc2hkICR7RH0vJHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcy85OV9zc2hkCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vY29udHJpYi9zc2gtY29weS1pZCAke0R9JHtiaW5kaXJ9CisKKwkjIENyZWF0ZSBjb25maWcgZmlsZXMgZm9yIHJlYWQtb25seSByb290ZnMKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3NzaAorCWluc3RhbGwgLW0gNjQ0ICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZyAke0R9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWdfcmVhZG9ubHkKKwlzZWQgLWkgJy9Ib3N0S2V5L2QnICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQorCWVjaG8gIkhvc3RLZXkgL3Zhci9ydW4vc3NoL3NzaF9ob3N0X3JzYV9rZXkiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQorCWVjaG8gIkhvc3RLZXkgL3Zhci9ydW4vc3NoL3NzaF9ob3N0X2RzYV9rZXkiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQorCWVjaG8gIkhvc3RLZXkgL3Zhci9ydW4vc3NoL3NzaF9ob3N0X2VjZHNhX2tleSIgPj4gJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnX3JlYWRvbmx5CisJZWNobyAiSG9zdEtleSAvdmFyL3J1bi9zc2gvc3NoX2hvc3RfZWQyNTUxOV9rZXkiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLWMgLW0gMDY0NCAke1dPUktESVJ9L3NzaGQuc29ja2V0ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtYyAtbSAwNjQ0ICR7V09SS0RJUn0vc3NoZEAuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLWMgLW0gMDY0NCAke1dPUktESVJ9L3NzaGRnZW5rZXlzLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJCS1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkJLWUgJ3MsQEJJTkRJUkAsJHtiaW5kaXJ9LGcnIFwKKwkJLWUgJ3MsQExJQkVYRUNESVJALCR7bGliZXhlY2Rpcn0vJHtCUE59LGcnIFwKKwkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3NoZC5zb2NrZXQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vKi5zZXJ2aWNlCisKKwlzZWQgLWkgLWUgJ3MsQExJQkVYRUNESVJALCR7bGliZXhlY2Rpcn0vJHtCUE59LGcnIFwKKwkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3NzaGQKKworCWluc3RhbGwgLUQgLW0gMDc1NSAke1dPUktESVJ9L3NzaGRfY2hlY2tfa2V5cyAke0R9JHtsaWJleGVjZGlyfS8ke0JQTn0vc3NoZF9jaGVja19rZXlzCit9CisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworCXNlZCAtaSAtZSAic3xeU0ZUUFNFUlZFUj0uKnxTRlRQU0VSVkVSPSR7bGliZXhlY2Rpcn0vc2Z0cC1zZXJ2ZXJ8IiByZWdyZXNzL3Rlc3QtZXhlYy5zaAorCWNwIC1yIHJlZ3Jlc3MgJHtEfSR7UFRFU1RfUEFUSH0KK30KKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworUEFDS0FHRVMgPSsgIiR7UE59LWtleWdlbiAke1BOfS1zY3AgJHtQTn0tc3NoICR7UE59LXNzaGQgJHtQTn0tc2Z0cCAke1BOfS1taXNjICR7UE59LXNmdHAtc2VydmVyIgorRklMRVNfJHtQTn0tc2NwID0gIiR7YmluZGlyfS9zY3AuJHtCUE59IgorRklMRVNfJHtQTn0tc3NoID0gIiR7YmluZGlyfS9zc2guJHtCUE59ICR7c3lzY29uZmRpcn0vc3NoL3NzaF9jb25maWciCitGSUxFU18ke1BOfS1zc2hkID0gIiR7c2JpbmRpcn0vc3NoZCAke3N5c2NvbmZkaXJ9L2luaXQuZC9zc2hkICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0iCitGSUxFU18ke1BOfS1zc2hkICs9ICIke3N5c2NvbmZkaXJ9L3NzaC9tb2R1bGkgJHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWcgJHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWdfcmVhZG9ubHkgJHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcy85OV9zc2hkICR7c3lzY29uZmRpcn0vcGFtLmQvc3NoZCIKK0ZJTEVTXyR7UE59LXNzaGQgKz0gIiR7bGliZXhlY2Rpcn0vJHtCUE59L3NzaGRfY2hlY2tfa2V5cyIKK0ZJTEVTXyR7UE59LXNmdHAgPSAiJHtiaW5kaXJ9L3NmdHAiCitGSUxFU18ke1BOfS1zZnRwLXNlcnZlciA9ICIke2xpYmV4ZWNkaXJ9L3NmdHAtc2VydmVyIgorRklMRVNfJHtQTn0tbWlzYyA9ICIke2JpbmRpcn0vc3NoKiAke2xpYmV4ZWNkaXJ9L3NzaCoiCitGSUxFU18ke1BOfS1rZXlnZW4gPSAiJHtiaW5kaXJ9L3NzaC1rZXlnZW4iCisKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1zY3AgJHtQTn0tc3NoICR7UE59LXNzaGQgJHtQTn0ta2V5Z2VuIgorUkRFUEVORFNfJHtQTn0tc3NoZCArPSAiJHtQTn0ta2V5Z2VuICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbS1wbHVnaW4ta2V5aW5pdCBwYW0tcGx1Z2luLWxvZ2ludWlkJywgJycsIGQpfSIKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICIke1BOfS1zZnRwICR7UE59LW1pc2MgJHtQTn0tc2Z0cC1zZXJ2ZXIgbWFrZSIKKworUlBST1ZJREVTXyR7UE59LXNzaCA9ICJzc2giCitSUFJPVklERVNfJHtQTn0tc3NoZCA9ICJzc2hkIgorCitSQ09ORkxJQ1RTXyR7UE59ID0gImRyb3BiZWFyIgorUkNPTkZMSUNUU18ke1BOfS1zc2hkID0gImRyb3BiZWFyIgorUkNPTkZMSUNUU18ke1BOfS1rZXlnZW4gPSAic3NoLWtleWdlbiIKKworQ09ORkZJTEVTXyR7UE59LXNzaGQgPSAiJHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWciCitDT05GRklMRVNfJHtQTn0tc3NoID0gIiR7c3lzY29uZmRpcn0vc3NoL3NzaF9jb25maWciCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjkwIgorQUxURVJOQVRJVkVfJHtQTn0tc2NwID0gInNjcCIKK0FMVEVSTkFUSVZFXyR7UE59LXNzaCA9ICJzc2giCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm0vZGViaWFuL3ZlcnNpb24tc2NyaXB0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLTEuMC4ybS9kZWJpYW4vdmVyc2lvbi1zY3JpcHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU3NDM0ZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm0vZGViaWFuL3ZlcnNpb24tc2NyaXB0LnBhdGNoCkBAIC0wLDAgKzEsNDY2NiBAQAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworSW5kZXg6IG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L0NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1Lm9yaWcvQ29uZmlndXJlCTIwMTQtMDItMjQgMjE6MDI6MzAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvQ29uZmlndXJlCTIwMTQtMDItMjQgMjE6MDI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMTY1MSw2ICsxNjUxLDggQEAKKyAJCX0KKyAJfQorIAorKyRzaGFyZWRfbGRmbGFnIC49ICIgLVdsLC0tdmVyc2lvbi1zY3JpcHQ9b3BlbnNzbC5sZCI7CisrCisgb3BlbihJTiwnPE1ha2VmaWxlLm9yZycpIHx8IGRpZSAidW5hYmxlIHRvIHJlYWQgTWFrZWZpbGUub3JnOiQhXG4iOworIHVubGluaygiJE1ha2VmaWxlLm5ldyIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbW92ZSBvbGQgJE1ha2VmaWxlLm5ldzokIVxuIiBpZiAtZSAiJE1ha2VmaWxlLm5ldyI7Cisgb3BlbihPVVQsIj4kTWFrZWZpbGUubmV3IikgfHwgZGllICJ1bmFibGUgdG8gY3JlYXRlICRNYWtlZmlsZS5uZXc6JCFcbiI7CitJbmRleDogb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvb3BlbnNzbC5sZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L29wZW5zc2wubGQJMjAxNC0wMi0yNCAyMjoxOTowOC42MDE4MjcyNjYgKzAxMDAKK0BAIC0wLDAgKzEsNDYxNSBAQAorK09QRU5TU0xfMS4wLjAgeworKwlnbG9iYWw6CisrCQlCSU9fZl9zc2w7CisrCQlCSU9fbmV3X2J1ZmZlcl9zc2xfY29ubmVjdDsKKysJCUJJT19uZXdfc3NsOworKwkJQklPX25ld19zc2xfY29ubmVjdDsKKysJCUJJT19wcm94eV9zc2xfY29weV9zZXNzaW9uX2lkOworKwkJQklPX3NzbF9jb3B5X3Nlc3Npb25faWQ7CisrCQlCSU9fc3NsX3NodXRkb3duOworKwkJZDJpX1NTTF9TRVNTSU9OOworKwkJRFRMU3YxX2NsaWVudF9tZXRob2Q7CisrCQlEVExTdjFfbWV0aG9kOworKwkJRFRMU3YxX3NlcnZlcl9tZXRob2Q7CisrCQlFUlJfbG9hZF9TU0xfc3RyaW5nczsKKysJCWkyZF9TU0xfU0VTU0lPTjsKKysJCWtzc2xfYnVpbGRfcHJpbmNpcGFsXzI7CisrCQlrc3NsX2NnZXRfdGt0OworKwkJa3NzbF9jaGVja19hdXRoZW50OworKwkJa3NzbF9jdHhfZnJlZTsKKysJCWtzc2xfY3R4X25ldzsKKysJCWtzc2xfY3R4X3NldGtleTsKKysJCWtzc2xfY3R4X3NldHByaW5jOworKwkJa3NzbF9jdHhfc2V0c3RyaW5nOworKwkJa3NzbF9jdHhfc2hvdzsKKysJCWtzc2xfZXJyX3NldDsKKysJCWtzc2xfa3JiNV9mcmVlX2RhdGFfY29udGVudHM7CisrCQlrc3NsX3NnZXRfdGt0OworKwkJa3NzbF9za2lwX2NvbmZvdW5kOworKwkJa3NzbF92YWxpZGF0ZV90aW1lczsKKysJCVBFTV9yZWFkX2Jpb19TU0xfU0VTU0lPTjsKKysJCVBFTV9yZWFkX1NTTF9TRVNTSU9OOworKwkJUEVNX3dyaXRlX2Jpb19TU0xfU0VTU0lPTjsKKysJCVBFTV93cml0ZV9TU0xfU0VTU0lPTjsKKysJCVNTTF9hY2NlcHQ7CisrCQlTU0xfYWRkX2NsaWVudF9DQTsKKysJCVNTTF9hZGRfZGlyX2NlcnRfc3ViamVjdHNfdG9fc3RhY2s7CisrCQlTU0xfYWRkX2Rpcl9jZXJ0X3N1YmpzX3RvX3N0azsKKysJCVNTTF9hZGRfZmlsZV9jZXJ0X3N1YmplY3RzX3RvX3N0YWNrOworKwkJU1NMX2FkZF9maWxlX2NlcnRfc3VianNfdG9fc3RrOworKwkJU1NMX2FsZXJ0X2Rlc2Nfc3RyaW5nOworKwkJU1NMX2FsZXJ0X2Rlc2Nfc3RyaW5nX2xvbmc7CisrCQlTU0xfYWxlcnRfdHlwZV9zdHJpbmc7CisrCQlTU0xfYWxlcnRfdHlwZV9zdHJpbmdfbG9uZzsKKysJCVNTTF9jYWxsYmFja19jdHJsOworKwkJU1NMX2NoZWNrX3ByaXZhdGVfa2V5OworKwkJU1NMX0NJUEhFUl9kZXNjcmlwdGlvbjsKKysJCVNTTF9DSVBIRVJfZ2V0X2JpdHM7CisrCQlTU0xfQ0lQSEVSX2dldF9uYW1lOworKwkJU1NMX0NJUEhFUl9nZXRfdmVyc2lvbjsKKysJCVNTTF9jbGVhcjsKKysJCVNTTF9DT01QX2FkZF9jb21wcmVzc2lvbl9tZXRob2Q7CisrCQlTU0xfQ09NUF9nZXRfY29tcHJlc3Npb25fbWV0aG9kczsKKysJCVNTTF9DT01QX2dldF9jb21wcmVzc19tZXRob2RzOworKwkJU1NMX0NPTVBfZ2V0X25hbWU7CisrCQlTU0xfY29ubmVjdDsKKysJCVNTTF9jb3B5X3Nlc3Npb25faWQ7CisrCQlTU0xfY3RybDsKKysJCVNTTF9DVFhfYWRkX2NsaWVudF9DQTsKKysJCVNTTF9DVFhfYWRkX3Nlc3Npb247CisrCQlTU0xfQ1RYX2NhbGxiYWNrX2N0cmw7CisrCQlTU0xfQ1RYX2NoZWNrX3ByaXZhdGVfa2V5OworKwkJU1NMX0NUWF9jdHJsOworKwkJU1NMX0NUWF9mbHVzaF9zZXNzaW9uczsKKysJCVNTTF9DVFhfZnJlZTsKKysJCVNTTF9DVFhfZ2V0X2NlcnRfc3RvcmU7CisrCQlTU0xfQ1RYX2dldF9jbGllbnRfQ0FfbGlzdDsKKysJCVNTTF9DVFhfZ2V0X2NsaWVudF9jZXJ0X2NiOworKwkJU1NMX0NUWF9nZXRfZXhfZGF0YTsKKysJCVNTTF9DVFhfZ2V0X2V4X25ld19pbmRleDsKKysJCVNTTF9DVFhfZ2V0X2luZm9fY2FsbGJhY2s7CisrCQlTU0xfQ1RYX2dldF9xdWlldF9zaHV0ZG93bjsKKysJCVNTTF9DVFhfZ2V0X3RpbWVvdXQ7CisrCQlTU0xfQ1RYX2dldF92ZXJpZnlfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX2dldF92ZXJpZnlfZGVwdGg7CisrCQlTU0xfQ1RYX2dldF92ZXJpZnlfbW9kZTsKKysJCVNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zOworKwkJU1NMX0NUWF9uZXc7CisrCQlTU0xfQ1RYX3JlbW92ZV9zZXNzaW9uOworKwkJU1NMX0NUWF9zZXNzX2dldF9nZXRfY2I7CisrCQlTU0xfQ1RYX3Nlc3NfZ2V0X25ld19jYjsKKysJCVNTTF9DVFhfc2Vzc19nZXRfcmVtb3ZlX2NiOworKwkJU1NMX0NUWF9zZXNzaW9uczsKKysJCVNTTF9DVFhfc2Vzc19zZXRfZ2V0X2NiOworKwkJU1NMX0NUWF9zZXNzX3NldF9uZXdfY2I7CisrCQlTU0xfQ1RYX3Nlc3Nfc2V0X3JlbW92ZV9jYjsKKysJCVNTTF9DVFhfc2V0MV9wYXJhbTsKKysJCVNTTF9DVFhfc2V0X2NlcnRfc3RvcmU7CisrCQlTU0xfQ1RYX3NldF9jZXJ0X3ZlcmlmeV9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X2NlcnRfdmVyaWZ5X2NiOworKwkJU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3Q7CisrCQlTU0xfQ1RYX3NldF9jbGllbnRfQ0FfbGlzdDsKKysJCVNTTF9DVFhfc2V0X2NsaWVudF9jZXJ0X2NiOworKwkJU1NMX0NUWF9zZXRfY2xpZW50X2NlcnRfZW5naW5lOworKwkJU1NMX0NUWF9zZXRfY29va2llX2dlbmVyYXRlX2NiOworKwkJU1NMX0NUWF9zZXRfY29va2llX3ZlcmlmeV9jYjsKKysJCVNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiOworKwkJU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2JfdXNlcmRhdGE7CisrCQlTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRoczsKKysJCVNTTF9DVFhfc2V0X2RlZl9wYXNzd2RfY2JfdWQ7CisrCQlTU0xfQ1RYX3NldF9kZWZfdmVyaWZ5X3BhdGhzOworKwkJU1NMX0NUWF9zZXRfZXhfZGF0YTsKKysJCVNTTF9DVFhfc2V0X2dlbmVyYXRlX3Nlc3Npb25faWQ7CisrCQlTU0xfQ1RYX3NldF9pbmZvX2NhbGxiYWNrOworKwkJU1NMX0NUWF9zZXRfbXNnX2NhbGxiYWNrOworKwkJU1NMX0NUWF9zZXRfcHNrX2NsaWVudF9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3Bza19zZXJ2ZXJfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF9wdXJwb3NlOworKwkJU1NMX0NUWF9zZXRfcXVpZXRfc2h1dGRvd247CisrCQlTU0xfQ1RYX3NldF9zZXNzaW9uX2lkX2NvbnRleHQ7CisrCQlTU0xfQ1RYX3NldF9zc2xfdmVyc2lvbjsKKysJCVNTTF9DVFhfc2V0X3RpbWVvdXQ7CisrCQlTU0xfQ1RYX3NldF90bXBfZGhfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF90bXBfZWNkaF9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3RtcF9yc2FfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF90cnVzdDsKKysJCVNTTF9DVFhfc2V0X3ZlcmlmeTsKKysJCVNTTF9DVFhfc2V0X3ZlcmlmeV9kZXB0aDsKKysJCVNTTF9DVFhfdXNlX2NlcnRfY2hhaW5fZmlsZTsKKysJCVNTTF9DVFhfdXNlX2NlcnRpZmljYXRlOworKwkJU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfQVNOMTsKKysJCVNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGU7CisrCQlTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9maWxlOworKwkJU1NMX0NUWF91c2VfUHJpdmF0ZUtleTsKKysJCVNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfQVNOMTsKKysJCVNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfZmlsZTsKKysJCVNTTF9DVFhfdXNlX3Bza19pZGVudGl0eV9oaW50OworKwkJU1NMX0NUWF91c2VfUlNBUHJpdmF0ZUtleTsKKysJCVNTTF9DVFhfdXNlX1JTQVByaXZhdGVLZXlfQVNOMTsKKysJCVNTTF9DVFhfdXNlX1JTQVByaXZhdGVLZXlfZmlsZTsKKysJCVNTTF9kb19oYW5kc2hha2U7CisrCQlTU0xfZHVwOworKwkJU1NMX2R1cF9DQV9saXN0OworKwkJU1NMZWF5X2FkZF9zc2xfYWxnb3JpdGhtczsKKysJCVNTTF9mcmVlOworKwkJU1NMX2dldDFfc2Vzc2lvbjsKKysJCVNTTF9nZXRfY2VydGlmaWNhdGU7CisrCQlTU0xfZ2V0X2NpcGhlcl9saXN0OworKwkJU1NMX2dldF9jaXBoZXJzOworKwkJU1NMX2dldF9jbGllbnRfQ0FfbGlzdDsKKysJCVNTTF9nZXRfY3VycmVudF9jaXBoZXI7CisrCQlTU0xfZ2V0X2N1cnJlbnRfY29tcHJlc3Npb247CisrCQlTU0xfZ2V0X2N1cnJlbnRfZXhwYW5zaW9uOworKwkJU1NMX2dldF9kZWZhdWx0X3RpbWVvdXQ7CisrCQlTU0xfZ2V0X2Vycm9yOworKwkJU1NMX2dldF9leF9kYXRhOworKwkJU1NMX2dldF9leF9kYXRhX1g1MDlfU1RPUkVfQ1RYX2lkeDsKKysJCVNTTF9nZXRfZXhfZF9YNTA5X1NUT1JFX0NUWF9pZHg7CisrCQlTU0xfZ2V0X2V4X25ld19pbmRleDsKKysJCVNTTF9nZXRfZmQ7CisrCQlTU0xfZ2V0X2ZpbmlzaGVkOworKwkJU1NMX2dldF9pbmZvX2NhbGxiYWNrOworKwkJU1NMX2dldF9wZWVyX2NlcnRfY2hhaW47CisrCQlTU0xfZ2V0X3BlZXJfY2VydGlmaWNhdGU7CisrCQlTU0xfZ2V0X3BlZXJfZmluaXNoZWQ7CisrCQlTU0xfZ2V0X3ByaXZhdGVrZXk7CisrCQlTU0xfZ2V0X3Bza19pZGVudGl0eTsKKysJCVNTTF9nZXRfcHNrX2lkZW50aXR5X2hpbnQ7CisrCQlTU0xfZ2V0X3F1aWV0X3NodXRkb3duOworKwkJU1NMX2dldF9yYmlvOworKwkJU1NMX2dldF9yZWFkX2FoZWFkOworKwkJU1NMX2dldF9yZmQ7CisrCQlTU0xfZ2V0X3NlcnZlcm5hbWU7CisrCQlTU0xfZ2V0X3NlcnZlcm5hbWVfdHlwZTsKKysJCVNTTF9nZXRfc2Vzc2lvbjsKKysJCVNTTF9nZXRfc2hhcmVkX2NpcGhlcnM7CisrCQlTU0xfZ2V0X3NodXRkb3duOworKwkJU1NMX2dldF9TU0xfQ1RYOworKwkJU1NMX2dldF9zc2xfbWV0aG9kOworKwkJU1NMX2dldF92ZXJpZnlfY2FsbGJhY2s7CisrCQlTU0xfZ2V0X3ZlcmlmeV9kZXB0aDsKKysJCVNTTF9nZXRfdmVyaWZ5X21vZGU7CisrCQlTU0xfZ2V0X3ZlcmlmeV9yZXN1bHQ7CisrCQlTU0xfZ2V0X3ZlcnNpb247CisrCQlTU0xfZ2V0X3diaW87CisrCQlTU0xfZ2V0X3dmZDsKKysJCVNTTF9oYXNfbWF0Y2hpbmdfc2Vzc2lvbl9pZDsKKysJCVNTTF9saWJyYXJ5X2luaXQ7CisrCQlTU0xfbG9hZF9jbGllbnRfQ0FfZmlsZTsKKysJCVNTTF9sb2FkX2Vycm9yX3N0cmluZ3M7CisrCQlTU0xfbmV3OworKwkJU1NMX3BlZWs7CisrCQlTU0xfcGVuZGluZzsKKysJCVNTTF9yZWFkOworKwkJU1NMX3JlbmVnb3RpYXRlOworKwkJU1NMX3JlbmVnb3RpYXRlX3BlbmRpbmc7CisrCQlTU0xfcnN0YXRlX3N0cmluZzsKKysJCVNTTF9yc3RhdGVfc3RyaW5nX2xvbmc7CisrCQlTU0xfU0VTU0lPTl9jbXA7CisrCQlTU0xfU0VTU0lPTl9mcmVlOworKwkJU1NMX1NFU1NJT05fZ2V0X2V4X2RhdGE7CisrCQlTU0xfU0VTU0lPTl9nZXRfZXhfbmV3X2luZGV4OworKwkJU1NMX1NFU1NJT05fZ2V0X2lkOworKwkJU1NMX1NFU1NJT05fZ2V0X3RpbWU7CisrCQlTU0xfU0VTU0lPTl9nZXRfdGltZW91dDsKKysJCVNTTF9TRVNTSU9OX2hhc2g7CisrCQlTU0xfU0VTU0lPTl9uZXc7CisrCQlTU0xfU0VTU0lPTl9wcmludDsKKysJCVNTTF9TRVNTSU9OX3ByaW50X2ZwOworKwkJU1NMX1NFU1NJT05fc2V0X2V4X2RhdGE7CisrCQlTU0xfU0VTU0lPTl9zZXRfdGltZTsKKysJCVNTTF9TRVNTSU9OX3NldF90aW1lb3V0OworKwkJU1NMX3NldDFfcGFyYW07CisrCQlTU0xfc2V0X2FjY2VwdF9zdGF0ZTsKKysJCVNTTF9zZXRfYmlvOworKwkJU1NMX3NldF9jaXBoZXJfbGlzdDsKKysJCVNTTF9zZXRfY2xpZW50X0NBX2xpc3Q7CisrCQlTU0xfc2V0X2Nvbm5lY3Rfc3RhdGU7CisrCQlTU0xfc2V0X2V4X2RhdGE7CisrCQlTU0xfc2V0X2ZkOworKwkJU1NMX3NldF9nZW5lcmF0ZV9zZXNzaW9uX2lkOworKwkJU1NMX3NldF9pbmZvX2NhbGxiYWNrOworKwkJU1NMX3NldF9tc2dfY2FsbGJhY2s7CisrCQlTU0xfc2V0X3Bza19jbGllbnRfY2FsbGJhY2s7CisrCQlTU0xfc2V0X3Bza19zZXJ2ZXJfY2FsbGJhY2s7CisrCQlTU0xfc2V0X3B1cnBvc2U7CisrCQlTU0xfc2V0X3F1aWV0X3NodXRkb3duOworKwkJU1NMX3NldF9yZWFkX2FoZWFkOworKwkJU1NMX3NldF9yZmQ7CisrCQlTU0xfc2V0X3Nlc3Npb247CisrCQlTU0xfc2V0X3Nlc3Npb25faWRfY29udGV4dDsKKysJCVNTTF9zZXRfc2Vzc2lvbl9zZWNyZXRfY2I7CisrCQlTU0xfc2V0X3Nlc3Npb25fdGlja2V0X2V4dDsKKysJCVNTTF9zZXRfc2Vzc2lvbl90aWNrZXRfZXh0X2NiOworKwkJU1NMX3NldF9zaHV0ZG93bjsKKysJCVNTTF9zZXRfU1NMX0NUWDsKKysJCVNTTF9zZXRfc3NsX21ldGhvZDsKKysJCVNTTF9zZXRfdG1wX2RoX2NhbGxiYWNrOworKwkJU1NMX3NldF90bXBfZWNkaF9jYWxsYmFjazsKKysJCVNTTF9zZXRfdG1wX3JzYV9jYWxsYmFjazsKKysJCVNTTF9zZXRfdHJ1c3Q7CisrCQlTU0xfc2V0X3ZlcmlmeTsKKysJCVNTTF9zZXRfdmVyaWZ5X2RlcHRoOworKwkJU1NMX3NldF92ZXJpZnlfcmVzdWx0OworKwkJU1NMX3NldF93ZmQ7CisrCQlTU0xfc2h1dGRvd247CisrCQlTU0xfc3RhdGU7CisrCQlTU0xfc3RhdGVfc3RyaW5nOworKwkJU1NMX3N0YXRlX3N0cmluZ19sb25nOworKwkJU1NMX3VzZV9jZXJ0aWZpY2F0ZTsKKysJCVNTTF91c2VfY2VydGlmaWNhdGVfQVNOMTsKKysJCVNTTF91c2VfY2VydGlmaWNhdGVfZmlsZTsKKysJCVNTTF91c2VfUHJpdmF0ZUtleTsKKysJCVNTTF91c2VfUHJpdmF0ZUtleV9BU04xOworKwkJU1NMX3VzZV9Qcml2YXRlS2V5X2ZpbGU7CisrCQlTU0xfdXNlX3Bza19pZGVudGl0eV9oaW50OworKwkJU1NMX3VzZV9SU0FQcml2YXRlS2V5OworKwkJU1NMX3VzZV9SU0FQcml2YXRlS2V5X0FTTjE7CisrCQlTU0xfdXNlX1JTQVByaXZhdGVLZXlfZmlsZTsKKysJCVNTTHYyM19jbGllbnRfbWV0aG9kOworKwkJU1NMdjIzX21ldGhvZDsKKysJCVNTTHYyM19zZXJ2ZXJfbWV0aG9kOworKwkJU1NMdjJfY2xpZW50X21ldGhvZDsKKysJCVNTTHYyX21ldGhvZDsKKysJCVNTTHYyX3NlcnZlcl9tZXRob2Q7CisrCQlTU0x2M19jbGllbnRfbWV0aG9kOworKwkJU1NMdjNfbWV0aG9kOworKwkJU1NMdjNfc2VydmVyX21ldGhvZDsKKysJCVNTTF92ZXJzaW9uOworKwkJU1NMX3dhbnQ7CisrCQlTU0xfd3JpdGU7CisrCQlUTFN2MV9jbGllbnRfbWV0aG9kOworKwkJVExTdjFfbWV0aG9kOworKwkJVExTdjFfc2VydmVyX21ldGhvZDsKKysKKysKKysJCVNTTGVheTsKKysJCVNTTGVheV92ZXJzaW9uOworKwkJQVNOMV9CSVRfU1RSSU5HX2FzbjFfbWV0aDsKKysJCUFTTjFfSEVBREVSX2ZyZWU7CisrCQlBU04xX0hFQURFUl9uZXc7CisrCQlBU04xX0lBNVNUUklOR19hc24xX21ldGg7CisrCQlBU04xX0lOVEVHRVJfZ2V0OworKwkJQVNOMV9JTlRFR0VSX3NldDsKKysJCUFTTjFfSU5URUdFUl90b19CTjsKKysJCUFTTjFfT0JKRUNUX2NyZWF0ZTsKKysJCUFTTjFfT0JKRUNUX2ZyZWU7CisrCQlBU04xX09CSkVDVF9uZXc7CisrCQlBU04xX1BSSU5UQUJMRV90eXBlOworKwkJQVNOMV9TVFJJTkdfY21wOworKwkJQVNOMV9TVFJJTkdfZHVwOworKwkJQVNOMV9TVFJJTkdfZnJlZTsKKysJCUFTTjFfU1RSSU5HX25ldzsKKysJCUFTTjFfU1RSSU5HX3ByaW50OworKwkJQVNOMV9TVFJJTkdfc2V0OworKwkJQVNOMV9TVFJJTkdfdHlwZV9uZXc7CisrCQlBU04xX1RZUEVfZnJlZTsKKysJCUFTTjFfVFlQRV9uZXc7CisrCQlBU04xX1VOSVZFUlNBTFNUUklOR190b19zdHJpbmc7CisrCQlBU04xX1VUQ1RJTUVfY2hlY2s7CisrCQlBU04xX1VUQ1RJTUVfcHJpbnQ7CisrCQlBU04xX1VUQ1RJTUVfc2V0OworKwkJQVNOMV9jaGVja19pbmZpbml0ZV9lbmQ7CisrCQlBU04xX2QyaV9iaW87CisrCQlBU04xX2QyaV9mcDsKKysJCUFTTjFfZGlnZXN0OworKwkJQVNOMV9kdXA7CisrCQlBU04xX2dldF9vYmplY3Q7CisrCQlBU04xX2kyZF9iaW87CisrCQlBU04xX2kyZF9mcDsKKysJCUFTTjFfb2JqZWN0X3NpemU7CisrCQlBU04xX3BhcnNlOworKwkJQVNOMV9wdXRfb2JqZWN0OworKwkJQVNOMV9zaWduOworKwkJQVNOMV92ZXJpZnk7CisrCQlCRl9jYmNfZW5jcnlwdDsKKysJCUJGX2NmYjY0X2VuY3J5cHQ7CisrCQlCRl9lY2JfZW5jcnlwdDsKKysJCUJGX2VuY3J5cHQ7CisrCQlCRl9vZmI2NF9lbmNyeXB0OworKwkJQkZfb3B0aW9uczsKKysJCUJGX3NldF9rZXk7CisrCQlCSU9fQ09OTkVDVF9mcmVlOworKwkJQklPX0NPTk5FQ1RfbmV3OworKwkJQklPX2FjY2VwdDsKKysJCUJJT19jdHJsOworKwkJQklPX2ludF9jdHJsOworKwkJQklPX2RlYnVnX2NhbGxiYWNrOworKwkJQklPX2R1bXA7CisrCQlCSU9fZHVwX2NoYWluOworKwkJQklPX2ZfYmFzZTY0OworKwkJQklPX2ZfYnVmZmVyOworKwkJQklPX2ZfY2lwaGVyOworKwkJQklPX2ZfbWQ7CisrCQlCSU9fZl9udWxsOworKwkJQklPX2ZfcHJveHlfc2VydmVyOworKwkJQklPX2ZkX25vbl9mYXRhbF9lcnJvcjsKKysJCUJJT19mZF9zaG91bGRfcmV0cnk7CisrCQlCSU9fZmluZF90eXBlOworKwkJQklPX2ZyZWU7CisrCQlCSU9fZnJlZV9hbGw7CisrCQlCSU9fZ2V0X2FjY2VwdF9zb2NrZXQ7CisrCQlCSU9fZ2V0X2ZpbHRlcl9iaW87CisrCQlCSU9fZ2V0X2hvc3RfaXA7CisrCQlCSU9fZ2V0X3BvcnQ7CisrCQlCSU9fZ2V0X3JldHJ5X0JJTzsKKysJCUJJT19nZXRfcmV0cnlfcmVhc29uOworKwkJQklPX2dldGhvc3RieW5hbWU7CisrCQlCSU9fZ2V0czsKKysJCUJJT19uZXc7CisrCQlCSU9fbmV3X2FjY2VwdDsKKysJCUJJT19uZXdfY29ubmVjdDsKKysJCUJJT19uZXdfZmQ7CisrCQlCSU9fbmV3X2ZpbGU7CisrCQlCSU9fbmV3X2ZwOworKwkJQklPX25ld19zb2NrZXQ7CisrCQlCSU9fcG9wOworKwkJQklPX3ByaW50ZjsKKysJCUJJT19wdXNoOworKwkJQklPX3B1dHM7CisrCQlCSU9fcmVhZDsKKysJCUJJT19zX2FjY2VwdDsKKysJCUJJT19zX2Nvbm5lY3Q7CisrCQlCSU9fc19mZDsKKysJCUJJT19zX2ZpbGU7CisrCQlCSU9fc19tZW07CisrCQlCSU9fc19udWxsOworKwkJQklPX3NfcHJveHlfY2xpZW50OworKwkJQklPX3Nfc29ja2V0OworKwkJQklPX3NldDsKKysJCUJJT19zZXRfY2lwaGVyOworKwkJQklPX3NldF90Y3BfbmRlbGF5OworKwkJQklPX3NvY2tfY2xlYW51cDsKKysJCUJJT19zb2NrX2Vycm9yOworKwkJQklPX3NvY2tfaW5pdDsKKysJCUJJT19zb2NrX25vbl9mYXRhbF9lcnJvcjsKKysJCUJJT19zb2NrX3Nob3VsZF9yZXRyeTsKKysJCUJJT19zb2NrZXRfaW9jdGw7CisrCQlCSU9fd3JpdGU7CisrCQlCTl9DVFhfZnJlZTsKKysJCUJOX0NUWF9uZXc7CisrCQlCTl9NT05UX0NUWF9mcmVlOworKwkJQk5fTU9OVF9DVFhfbmV3OworKwkJQk5fTU9OVF9DVFhfc2V0OworKwkJQk5fYWRkOworKwkJQk5fYWRkX3dvcmQ7CisrCQlCTl9oZXgyYm47CisrCQlCTl9iaW4yYm47CisrCQlCTl9ibjJoZXg7CisrCQlCTl9ibjJiaW47CisrCQlCTl9jbGVhcjsKKysJCUJOX2NsZWFyX2JpdDsKKysJCUJOX2NsZWFyX2ZyZWU7CisrCQlCTl9jbXA7CisrCQlCTl9jb3B5OworKwkJQk5fZGl2OworKwkJQk5fZGl2X3dvcmQ7CisrCQlCTl9kdXA7CisrCQlCTl9mcmVlOworKwkJQk5fZnJvbV9tb250Z29tZXJ5OworKwkJQk5fZ2NkOworKwkJQk5fZ2VuZXJhdGVfcHJpbWU7CisrCQlCTl9nZXRfd29yZDsKKysJCUJOX2lzX2JpdF9zZXQ7CisrCQlCTl9pc19wcmltZTsKKysJCUJOX2xzaGlmdDsKKysJCUJOX2xzaGlmdDE7CisrCQlCTl9tYXNrX2JpdHM7CisrCQlCTl9tb2Q7CisrCQlCTl9tb2RfZXhwOworKwkJQk5fbW9kX2V4cF9tb250OworKwkJQk5fbW9kX2V4cF9zaW1wbGU7CisrCQlCTl9tb2RfaW52ZXJzZTsKKysJCUJOX21vZF9tdWw7CisrCQlCTl9tb2RfbXVsX21vbnRnb21lcnk7CisrCQlCTl9tb2Rfd29yZDsKKysJCUJOX211bDsKKysJCUJOX25ldzsKKysJCUJOX251bV9iaXRzOworKwkJQk5fbnVtX2JpdHNfd29yZDsKKysJCUJOX29wdGlvbnM7CisrCQlCTl9wcmludDsKKysJCUJOX3ByaW50X2ZwOworKwkJQk5fcmFuZDsKKysJCUJOX3JlY2lwcm9jYWw7CisrCQlCTl9yc2hpZnQ7CisrCQlCTl9yc2hpZnQxOworKwkJQk5fc2V0X2JpdDsKKysJCUJOX3NldF93b3JkOworKwkJQk5fc3FyOworKwkJQk5fc3ViOworKwkJQk5fdG9fQVNOMV9JTlRFR0VSOworKwkJQk5fdWNtcDsKKysJCUJOX3ZhbHVlX29uZTsKKysJCUJVRl9NRU1fZnJlZTsKKysJCUJVRl9NRU1fZ3JvdzsKKysJCUJVRl9NRU1fbmV3OworKwkJQlVGX3N0cmR1cDsKKysJCUNPTkZfZnJlZTsKKysJCUNPTkZfZ2V0X251bWJlcjsKKysJCUNPTkZfZ2V0X3NlY3Rpb247CisrCQlDT05GX2dldF9zdHJpbmc7CisrCQlDT05GX2xvYWQ7CisrCQlDUllQVE9fYWRkX2xvY2s7CisrCQlDUllQVE9fZGJnX2ZyZWU7CisrCQlDUllQVE9fZGJnX21hbGxvYzsKKysJCUNSWVBUT19kYmdfcmVhbGxvYzsKKysJCUNSWVBUT19kYmdfcmVtYWxsb2M7CisrCQlDUllQVE9fZnJlZTsKKysJCUNSWVBUT19nZXRfYWRkX2xvY2tfY2FsbGJhY2s7CisrCQlDUllQVE9fZ2V0X2lkX2NhbGxiYWNrOworKwkJQ1JZUFRPX2dldF9sb2NrX25hbWU7CisrCQlDUllQVE9fZ2V0X2xvY2tpbmdfY2FsbGJhY2s7CisrCQlDUllQVE9fZ2V0X21lbV9mdW5jdGlvbnM7CisrCQlDUllQVE9fbG9jazsKKysJCUNSWVBUT19tYWxsb2M7CisrCQlDUllQVE9fbWVtX2N0cmw7CisrCQlDUllQVE9fbWVtX2xlYWtzOworKwkJQ1JZUFRPX21lbV9sZWFrc19jYjsKKysJCUNSWVBUT19tZW1fbGVha3NfZnA7CisrCQlDUllQVE9fcmVhbGxvYzsKKysJCUNSWVBUT19yZW1hbGxvYzsKKysJCUNSWVBUT19zZXRfYWRkX2xvY2tfY2FsbGJhY2s7CisrCQlDUllQVE9fc2V0X2lkX2NhbGxiYWNrOworKwkJQ1JZUFRPX3NldF9sb2NraW5nX2NhbGxiYWNrOworKwkJQ1JZUFRPX3NldF9tZW1fZnVuY3Rpb25zOworKwkJQ1JZUFRPX3RocmVhZF9pZDsKKysJCURIX2NoZWNrOworKwkJREhfY29tcHV0ZV9rZXk7CisrCQlESF9mcmVlOworKwkJREhfZ2VuZXJhdGVfa2V5OworKwkJREhfZ2VuZXJhdGVfcGFyYW1ldGVyczsKKysJCURIX25ldzsKKysJCURIX3NpemU7CisrCQlESHBhcmFtc19wcmludDsKKysJCURIcGFyYW1zX3ByaW50X2ZwOworKwkJRFNBX2ZyZWU7CisrCQlEU0FfZ2VuZXJhdGVfa2V5OworKwkJRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnM7CisrCQlEU0FfaXNfcHJpbWU7CisrCQlEU0FfbmV3OworKwkJRFNBX3ByaW50OworKwkJRFNBX3ByaW50X2ZwOworKwkJRFNBX3NpZ247CisrCQlEU0Ffc2lnbl9zZXR1cDsKKysJCURTQV9zaXplOworKwkJRFNBX3ZlcmlmeTsKKysJCURTQXBhcmFtc19wcmludDsKKysJCURTQXBhcmFtc19wcmludF9mcDsKKysJCUVSUl9jbGVhcl9lcnJvcjsKKysJCUVSUl9lcnJvcl9zdHJpbmc7CisrCQlFUlJfZnJlZV9zdHJpbmdzOworKwkJRVJSX2Z1bmNfZXJyb3Jfc3RyaW5nOworKwkJRVJSX2dldF9lcnJfc3RhdGVfdGFibGU7CisrCQlFUlJfZ2V0X2Vycm9yOworKwkJRVJSX2dldF9lcnJvcl9saW5lOworKwkJRVJSX2dldF9zdGF0ZTsKKysJCUVSUl9nZXRfc3RyaW5nX3RhYmxlOworKwkJRVJSX2xpYl9lcnJvcl9zdHJpbmc7CisrCQlFUlJfbG9hZF9BU04xX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9CSU9fc3RyaW5nczsKKysJCUVSUl9sb2FkX0JOX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9CVUZfc3RyaW5nczsKKysJCUVSUl9sb2FkX0NPTkZfc3RyaW5nczsKKysJCUVSUl9sb2FkX0RIX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9EU0Ffc3RyaW5nczsKKysJCUVSUl9sb2FkX0VSUl9zdHJpbmdzOworKwkJRVJSX2xvYWRfRVZQX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9PQkpfc3RyaW5nczsKKysJCUVSUl9sb2FkX1BFTV9zdHJpbmdzOworKwkJRVJSX2xvYWRfUFJPWFlfc3RyaW5nczsKKysJCUVSUl9sb2FkX1JTQV9zdHJpbmdzOworKwkJRVJSX2xvYWRfWDUwOV9zdHJpbmdzOworKwkJRVJSX2xvYWRfY3J5cHRvX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9zdHJpbmdzOworKwkJRVJSX3BlZWtfZXJyb3I7CisrCQlFUlJfcGVla19lcnJvcl9saW5lOworKwkJRVJSX3ByaW50X2Vycm9yczsKKysJCUVSUl9wcmludF9lcnJvcnNfZnA7CisrCQlFUlJfcHV0X2Vycm9yOworKwkJRVJSX3JlYXNvbl9lcnJvcl9zdHJpbmc7CisrCQlFUlJfcmVtb3ZlX3N0YXRlOworKwkJRVZQX0J5dGVzVG9LZXk7CisrCQlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwOworKwkJRVZQX0NpcGhlckZpbmFsOworKwkJRVZQX0NpcGhlckluaXQ7CisrCQlFVlBfQ2lwaGVyVXBkYXRlOworKwkJRVZQX0RlY29kZUJsb2NrOworKwkJRVZQX0RlY29kZUZpbmFsOworKwkJRVZQX0RlY29kZUluaXQ7CisrCQlFVlBfRGVjb2RlVXBkYXRlOworKwkJRVZQX0RlY3J5cHRGaW5hbDsKKysJCUVWUF9EZWNyeXB0SW5pdDsKKysJCUVWUF9EZWNyeXB0VXBkYXRlOworKwkJRVZQX0RpZ2VzdEZpbmFsOworKwkJRVZQX0RpZ2VzdEluaXQ7CisrCQlFVlBfRGlnZXN0VXBkYXRlOworKwkJRVZQX0VuY29kZUJsb2NrOworKwkJRVZQX0VuY29kZUZpbmFsOworKwkJRVZQX0VuY29kZUluaXQ7CisrCQlFVlBfRW5jb2RlVXBkYXRlOworKwkJRVZQX0VuY3J5cHRGaW5hbDsKKysJCUVWUF9FbmNyeXB0SW5pdDsKKysJCUVWUF9FbmNyeXB0VXBkYXRlOworKwkJRVZQX09wZW5GaW5hbDsKKysJCUVWUF9PcGVuSW5pdDsKKysJCUVWUF9QS0VZX2Fzc2lnbjsKKysJCUVWUF9QS0VZX2NvcHlfcGFyYW1ldGVyczsKKysJCUVWUF9QS0VZX2ZyZWU7CisrCQlFVlBfUEtFWV9taXNzaW5nX3BhcmFtZXRlcnM7CisrCQlFVlBfUEtFWV9uZXc7CisrCQlFVlBfUEtFWV9zYXZlX3BhcmFtZXRlcnM7CisrCQlFVlBfUEtFWV9zaXplOworKwkJRVZQX1BLRVlfdHlwZTsKKysJCUVWUF9TZWFsRmluYWw7CisrCQlFVlBfU2VhbEluaXQ7CisrCQlFVlBfU2lnbkZpbmFsOworKwkJRVZQX1ZlcmlmeUZpbmFsOworKwkJRVZQX2FkZF9hbGlhczsKKysJCUVWUF9hZGRfY2lwaGVyOworKwkJRVZQX2FkZF9kaWdlc3Q7CisrCQlFVlBfYmZfY2JjOworKwkJRVZQX2JmX2NmYjY0OworKwkJRVZQX2JmX2VjYjsKKysJCUVWUF9iZl9vZmI7CisrCQlFVlBfY2xlYW51cDsKKysJCUVWUF9kZXNfY2JjOworKwkJRVZQX2Rlc19jZmI2NDsKKysJCUVWUF9kZXNfZWNiOworKwkJRVZQX2Rlc19lZGU7CisrCQlFVlBfZGVzX2VkZTM7CisrCQlFVlBfZGVzX2VkZTNfY2JjOworKwkJRVZQX2Rlc19lZGUzX2NmYjY0OworKwkJRVZQX2Rlc19lZGUzX29mYjsKKysJCUVWUF9kZXNfZWRlX2NiYzsKKysJCUVWUF9kZXNfZWRlX2NmYjY0OworKwkJRVZQX2Rlc19lZGVfb2ZiOworKwkJRVZQX2Rlc19vZmI7CisrCQlFVlBfZGVzeF9jYmM7CisrCQlFVlBfZHNzOworKwkJRVZQX2RzczE7CisrCQlFVlBfZW5jX251bGw7CisrCQlFVlBfZ2V0X2NpcGhlcmJ5bmFtZTsKKysJCUVWUF9nZXRfZGlnZXN0YnluYW1lOworKwkJRVZQX2dldF9wd19wcm9tcHQ7CisrCQlFVlBfaWRlYV9jYmM7CisrCQlFVlBfaWRlYV9jZmI2NDsKKysJCUVWUF9pZGVhX2VjYjsKKysJCUVWUF9pZGVhX29mYjsKKysJCUVWUF9tZDI7CisrCQlFVlBfbWQ1OworKwkJRVZQX21kX251bGw7CisrCQlFVlBfcmMyX2NiYzsKKysJCUVWUF9yYzJfY2ZiNjQ7CisrCQlFVlBfcmMyX2VjYjsKKysJCUVWUF9yYzJfb2ZiOworKwkJRVZQX3JjNDsKKysJCUVWUF9yZWFkX3B3X3N0cmluZzsKKysJCUVWUF9zZXRfcHdfcHJvbXB0OworKwkJRVZQX3NoYTsKKysJCUVWUF9zaGExOworKwkJTUQyOworKwkJTUQyX0ZpbmFsOworKwkJTUQyX0luaXQ7CisrCQlNRDJfVXBkYXRlOworKwkJTUQyX29wdGlvbnM7CisrCQlNRDU7CisrCQlNRDVfRmluYWw7CisrCQlNRDVfSW5pdDsKKysJCU1ENV9VcGRhdGU7CisrCQlNREMyOworKwkJTURDMl9GaW5hbDsKKysJCU1EQzJfSW5pdDsKKysJCU1EQzJfVXBkYXRlOworKwkJTkVUU0NBUEVfU1BLQUNfZnJlZTsKKysJCU5FVFNDQVBFX1NQS0FDX25ldzsKKysJCU5FVFNDQVBFX1NQS0lfZnJlZTsKKysJCU5FVFNDQVBFX1NQS0lfbmV3OworKwkJTkVUU0NBUEVfU1BLSV9zaWduOworKwkJTkVUU0NBUEVfU1BLSV92ZXJpZnk7CisrCQlPQkpfYWRkX29iamVjdDsKKysJCU9CSl9ic2VhcmNoOworKwkJT0JKX2NsZWFudXA7CisrCQlPQkpfY21wOworKwkJT0JKX2NyZWF0ZTsKKysJCU9CSl9kdXA7CisrCQlPQkpfbG4ybmlkOworKwkJT0JKX25ld19uaWQ7CisrCQlPQkpfbmlkMmxuOworKwkJT0JKX25pZDJvYmo7CisrCQlPQkpfbmlkMnNuOworKwkJT0JKX29iajJuaWQ7CisrCQlPQkpfc24ybmlkOworKwkJT0JKX3R4dDJuaWQ7CisrCQlQRU1fQVNOMV9yZWFkOworKwkJUEVNX0FTTjFfcmVhZF9iaW87CisrCQlQRU1fQVNOMV93cml0ZTsKKysJCVBFTV9BU04xX3dyaXRlX2JpbzsKKysJCVBFTV9TZWFsRmluYWw7CisrCQlQRU1fU2VhbEluaXQ7CisrCQlQRU1fU2VhbFVwZGF0ZTsKKysJCVBFTV9TaWduRmluYWw7CisrCQlQRU1fU2lnbkluaXQ7CisrCQlQRU1fU2lnblVwZGF0ZTsKKysJCVBFTV9YNTA5X0lORk9fcmVhZDsKKysJCVBFTV9YNTA5X0lORk9fcmVhZF9iaW87CisrCQlQRU1fWDUwOV9JTkZPX3dyaXRlX2JpbzsKKysJCVBFTV9kZWtfaW5mbzsKKysJCVBFTV9kb19oZWFkZXI7CisrCQlQRU1fZ2V0X0VWUF9DSVBIRVJfSU5GTzsKKysJCVBFTV9wcm9jX3R5cGU7CisrCQlQRU1fcmVhZDsKKysJCVBFTV9yZWFkX0RIcGFyYW1zOworKwkJUEVNX3JlYWRfRFNBUHJpdmF0ZUtleTsKKysJCVBFTV9yZWFkX0RTQXBhcmFtczsKKysJCVBFTV9yZWFkX1BLQ1M3OworKwkJUEVNX3JlYWRfUHJpdmF0ZUtleTsKKysJCVBFTV9yZWFkX1JTQVByaXZhdGVLZXk7CisrCQlQRU1fcmVhZF9YNTA5OworKwkJUEVNX3JlYWRfWDUwOV9DUkw7CisrCQlQRU1fcmVhZF9YNTA5X1JFUTsKKysJCVBFTV9yZWFkX2JpbzsKKysJCVBFTV9yZWFkX2Jpb19ESHBhcmFtczsKKysJCVBFTV9yZWFkX2Jpb19EU0FQcml2YXRlS2V5OworKwkJUEVNX3JlYWRfYmlvX0RTQXBhcmFtczsKKysJCVBFTV9yZWFkX2Jpb19QS0NTNzsKKysJCVBFTV9yZWFkX2Jpb19Qcml2YXRlS2V5OworKwkJUEVNX3JlYWRfYmlvX1JTQVByaXZhdGVLZXk7CisrCQlQRU1fcmVhZF9iaW9fWDUwOTsKKysJCVBFTV9yZWFkX2Jpb19YNTA5X0NSTDsKKysJCVBFTV9yZWFkX2Jpb19YNTA5X1JFUTsKKysJCVBFTV93cml0ZTsKKysJCVBFTV93cml0ZV9ESHBhcmFtczsKKysJCVBFTV93cml0ZV9EU0FQcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX0RTQXBhcmFtczsKKysJCVBFTV93cml0ZV9QS0NTNzsKKysJCVBFTV93cml0ZV9Qcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX1JTQVByaXZhdGVLZXk7CisrCQlQRU1fd3JpdGVfWDUwOTsKKysJCVBFTV93cml0ZV9YNTA5X0NSTDsKKysJCVBFTV93cml0ZV9YNTA5X1JFUTsKKysJCVBFTV93cml0ZV9iaW87CisrCQlQRU1fd3JpdGVfYmlvX0RIcGFyYW1zOworKwkJUEVNX3dyaXRlX2Jpb19EU0FQcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX2Jpb19EU0FwYXJhbXM7CisrCQlQRU1fd3JpdGVfYmlvX1BLQ1M3OworKwkJUEVNX3dyaXRlX2Jpb19Qcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX2Jpb19SU0FQcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX2Jpb19YNTA5OworKwkJUEVNX3dyaXRlX2Jpb19YNTA5X0NSTDsKKysJCVBFTV93cml0ZV9iaW9fWDUwOV9SRVE7CisrCQlQS0NTN19ESUdFU1RfZnJlZTsKKysJCVBLQ1M3X0RJR0VTVF9uZXc7CisrCQlQS0NTN19FTkNSWVBUX2ZyZWU7CisrCQlQS0NTN19FTkNSWVBUX25ldzsKKysJCVBLQ1M3X0VOQ19DT05URU5UX2ZyZWU7CisrCQlQS0NTN19FTkNfQ09OVEVOVF9uZXc7CisrCQlQS0NTN19FTlZFTE9QRV9mcmVlOworKwkJUEtDUzdfRU5WRUxPUEVfbmV3OworKwkJUEtDUzdfSVNTVUVSX0FORF9TRVJJQUxfZGlnZXN0OworKwkJUEtDUzdfSVNTVUVSX0FORF9TRVJJQUxfZnJlZTsKKysJCVBLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMX25ldzsKKysJCVBLQ1M3X1JFQ0lQX0lORk9fZnJlZTsKKysJCVBLQ1M3X1JFQ0lQX0lORk9fbmV3OworKwkJUEtDUzdfU0lHTkVEX2ZyZWU7CisrCQlQS0NTN19TSUdORURfbmV3OworKwkJUEtDUzdfU0lHTkVSX0lORk9fZnJlZTsKKysJCVBLQ1M3X1NJR05FUl9JTkZPX25ldzsKKysJCVBLQ1M3X1NJR05fRU5WRUxPUEVfZnJlZTsKKysJCVBLQ1M3X1NJR05fRU5WRUxPUEVfbmV3OworKwkJUEtDUzdfZHVwOworKwkJUEtDUzdfZnJlZTsKKysJCVBLQ1M3X25ldzsKKysJCVBST1hZX0VOVFJZX2FkZF9ub3Byb3h5OworKwkJUFJPWFlfRU5UUllfY2xlYXJfbm9wcm94eTsKKysJCVBST1hZX0VOVFJZX2ZyZWU7CisrCQlQUk9YWV9FTlRSWV9nZXRfbm9wcm94eTsKKysJCVBST1hZX0VOVFJZX25ldzsKKysJCVBST1hZX0VOVFJZX3NldF9zZXJ2ZXI7CisrCQlQUk9YWV9hZGRfbm9wcm94eTsKKysJCVBST1hZX2FkZF9zZXJ2ZXI7CisrCQlQUk9YWV9jaGVja19ieV9ob3N0OworKwkJUFJPWFlfY2hlY2tfdXJsOworKwkJUFJPWFlfY2xlYXJfbm9wcm94eTsKKysJCVBST1hZX2ZyZWU7CisrCQlQUk9YWV9nZXRfbm9wcm94eTsKKysJCVBST1hZX2dldF9wcm94aWVzOworKwkJUFJPWFlfZ2V0X3Byb3h5X2VudHJ5OworKwkJUFJPWFlfbG9hZF9jb25mOworKwkJUFJPWFlfbmV3OworKwkJUFJPWFlfcHJpbnQ7CisrCQlSQU5EX2J5dGVzOworKwkJUkFORF9jbGVhbnVwOworKwkJUkFORF9maWxlX25hbWU7CisrCQlSQU5EX2xvYWRfZmlsZTsKKysJCVJBTkRfc2NyZWVuOworKwkJUkFORF9zZWVkOworKwkJUkFORF93cml0ZV9maWxlOworKwkJUkMyX2NiY19lbmNyeXB0OworKwkJUkMyX2NmYjY0X2VuY3J5cHQ7CisrCQlSQzJfZWNiX2VuY3J5cHQ7CisrCQlSQzJfZW5jcnlwdDsKKysJCVJDMl9vZmI2NF9lbmNyeXB0OworKwkJUkMyX3NldF9rZXk7CisrCQlSQzQ7CisrCQlSQzRfb3B0aW9uczsKKysJCVJDNF9zZXRfa2V5OworKwkJUlNBUHJpdmF0ZUtleV9hc24xX21ldGg7CisrCQlSU0FQcml2YXRlS2V5X2R1cDsKKysJCVJTQVB1YmxpY0tleV9kdXA7CisrCQlSU0FfUEtDUzFfU1NMZWF5OworKwkJUlNBX2ZyZWU7CisrCQlSU0FfZ2VuZXJhdGVfa2V5OworKwkJUlNBX25ldzsKKysJCVJTQV9uZXdfbWV0aG9kOworKwkJUlNBX3ByaW50OworKwkJUlNBX3ByaW50X2ZwOworKwkJUlNBX3ByaXZhdGVfZGVjcnlwdDsKKysJCVJTQV9wcml2YXRlX2VuY3J5cHQ7CisrCQlSU0FfcHVibGljX2RlY3J5cHQ7CisrCQlSU0FfcHVibGljX2VuY3J5cHQ7CisrCQlSU0Ffc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJUlNBX3NpZ247CisrCQlSU0Ffc2lnbl9BU04xX09DVEVUX1NUUklORzsKKysJCVJTQV9zaXplOworKwkJUlNBX3ZlcmlmeTsKKysJCVJTQV92ZXJpZnlfQVNOMV9PQ1RFVF9TVFJJTkc7CisrCQlTSEE7CisrCQlTSEExOworKwkJU0hBMV9GaW5hbDsKKysJCVNIQTFfSW5pdDsKKysJCVNIQTFfVXBkYXRlOworKwkJU0hBX0ZpbmFsOworKwkJU0hBX0luaXQ7CisrCQlTSEFfVXBkYXRlOworKwkJT3BlblNTTF9hZGRfYWxsX2FsZ29yaXRobXM7CisrCQlPcGVuU1NMX2FkZF9hbGxfY2lwaGVyczsKKysJCU9wZW5TU0xfYWRkX2FsbF9kaWdlc3RzOworKwkJVFhUX0RCX2NyZWF0ZV9pbmRleDsKKysJCVRYVF9EQl9mcmVlOworKwkJVFhUX0RCX2dldF9ieV9pbmRleDsKKysJCVRYVF9EQl9pbnNlcnQ7CisrCQlUWFRfREJfcmVhZDsKKysJCVRYVF9EQl93cml0ZTsKKysJCVg1MDlfQUxHT1JfZnJlZTsKKysJCVg1MDlfQUxHT1JfbmV3OworKwkJWDUwOV9BVFRSSUJVVEVfZnJlZTsKKysJCVg1MDlfQVRUUklCVVRFX25ldzsKKysJCVg1MDlfQ0lORl9mcmVlOworKwkJWDUwOV9DSU5GX25ldzsKKysJCVg1MDlfQ1JMX0lORk9fZnJlZTsKKysJCVg1MDlfQ1JMX0lORk9fbmV3OworKwkJWDUwOV9DUkxfYWRkX2V4dDsKKysJCVg1MDlfQ1JMX2NtcDsKKysJCVg1MDlfQ1JMX2RlbGV0ZV9leHQ7CisrCQlYNTA5X0NSTF9kdXA7CisrCQlYNTA5X0NSTF9mcmVlOworKwkJWDUwOV9DUkxfZ2V0X2V4dDsKKysJCVg1MDlfQ1JMX2dldF9leHRfYnlfTklEOworKwkJWDUwOV9DUkxfZ2V0X2V4dF9ieV9PQko7CisrCQlYNTA5X0NSTF9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJWDUwOV9DUkxfZ2V0X2V4dF9jb3VudDsKKysJCVg1MDlfQ1JMX25ldzsKKysJCVg1MDlfQ1JMX3NpZ247CisrCQlYNTA5X0NSTF92ZXJpZnk7CisrCQlYNTA5X0VYVEVOU0lPTl9jcmVhdGVfYnlfTklEOworKwkJWDUwOV9FWFRFTlNJT05fY3JlYXRlX2J5X09CSjsKKysJCVg1MDlfRVhURU5TSU9OX2R1cDsKKysJCVg1MDlfRVhURU5TSU9OX2ZyZWU7CisrCQlYNTA5X0VYVEVOU0lPTl9nZXRfY3JpdGljYWw7CisrCQlYNTA5X0VYVEVOU0lPTl9nZXRfZGF0YTsKKysJCVg1MDlfRVhURU5TSU9OX2dldF9vYmplY3Q7CisrCQlYNTA5X0VYVEVOU0lPTl9uZXc7CisrCQlYNTA5X0VYVEVOU0lPTl9zZXRfY3JpdGljYWw7CisrCQlYNTA5X0VYVEVOU0lPTl9zZXRfZGF0YTsKKysJCVg1MDlfRVhURU5TSU9OX3NldF9vYmplY3Q7CisrCQlYNTA5X0lORk9fZnJlZTsKKysJCVg1MDlfSU5GT19uZXc7CisrCQlYNTA5X0xPT0tVUF9ieV9hbGlhczsKKysJCVg1MDlfTE9PS1VQX2J5X2ZpbmdlcnByaW50OworKwkJWDUwOV9MT09LVVBfYnlfaXNzdWVyX3NlcmlhbDsKKysJCVg1MDlfTE9PS1VQX2J5X3N1YmplY3Q7CisrCQlYNTA5X0xPT0tVUF9jdHJsOworKwkJWDUwOV9MT09LVVBfZmlsZTsKKysJCVg1MDlfTE9PS1VQX2ZyZWU7CisrCQlYNTA5X0xPT0tVUF9oYXNoX2RpcjsKKysJCVg1MDlfTE9PS1VQX2luaXQ7CisrCQlYNTA5X0xPT0tVUF9uZXc7CisrCQlYNTA5X0xPT0tVUF9zaHV0ZG93bjsKKysJCVg1MDlfTkFNRV9FTlRSWV9jcmVhdGVfYnlfTklEOworKwkJWDUwOV9OQU1FX0VOVFJZX2NyZWF0ZV9ieV9PQko7CisrCQlYNTA5X05BTUVfRU5UUllfZHVwOworKwkJWDUwOV9OQU1FX0VOVFJZX2ZyZWU7CisrCQlYNTA5X05BTUVfRU5UUllfZ2V0X2RhdGE7CisrCQlYNTA5X05BTUVfRU5UUllfZ2V0X29iamVjdDsKKysJCVg1MDlfTkFNRV9FTlRSWV9uZXc7CisrCQlYNTA5X05BTUVfRU5UUllfc2V0X2RhdGE7CisrCQlYNTA5X05BTUVfRU5UUllfc2V0X29iamVjdDsKKysJCVg1MDlfTkFNRV9hZGRfZW50cnk7CisrCQlYNTA5X05BTUVfY21wOworKwkJWDUwOV9OQU1FX2RlbGV0ZV9lbnRyeTsKKysJCVg1MDlfTkFNRV9kaWdlc3Q7CisrCQlYNTA5X05BTUVfZHVwOworKwkJWDUwOV9OQU1FX2VudHJ5X2NvdW50OworKwkJWDUwOV9OQU1FX2ZyZWU7CisrCQlYNTA5X05BTUVfZ2V0X2VudHJ5OworKwkJWDUwOV9OQU1FX2dldF9pbmRleF9ieV9OSUQ7CisrCQlYNTA5X05BTUVfZ2V0X2luZGV4X2J5X09CSjsKKysJCVg1MDlfTkFNRV9nZXRfdGV4dF9ieV9OSUQ7CisrCQlYNTA5X05BTUVfZ2V0X3RleHRfYnlfT0JKOworKwkJWDUwOV9OQU1FX2hhc2g7CisrCQlYNTA5X05BTUVfbmV3OworKwkJWDUwOV9OQU1FX29uZWxpbmU7CisrCQlYNTA5X05BTUVfcHJpbnQ7CisrCQlYNTA5X05BTUVfc2V0OworKwkJWDUwOV9PQkpFQ1RfZnJlZV9jb250ZW50czsKKysJCVg1MDlfT0JKRUNUX3JldHJpZXZlX2J5X3N1YmplY3Q7CisrCQlYNTA5X09CSkVDVF91cF9yZWZfY291bnQ7CisrCQlYNTA5X1BLRVlfZnJlZTsKKysJCVg1MDlfUEtFWV9uZXc7CisrCQlYNTA5X1BVQktFWV9mcmVlOworKwkJWDUwOV9QVUJLRVlfZ2V0OworKwkJWDUwOV9QVUJLRVlfbmV3OworKwkJWDUwOV9QVUJLRVlfc2V0OworKwkJWDUwOV9SRVFfSU5GT19mcmVlOworKwkJWDUwOV9SRVFfSU5GT19uZXc7CisrCQlYNTA5X1JFUV9kdXA7CisrCQlYNTA5X1JFUV9mcmVlOworKwkJWDUwOV9SRVFfZ2V0X3B1YmtleTsKKysJCVg1MDlfUkVRX25ldzsKKysJCVg1MDlfUkVRX3ByaW50OworKwkJWDUwOV9SRVFfcHJpbnRfZnA7CisrCQlYNTA5X1JFUV9zZXRfcHVia2V5OworKwkJWDUwOV9SRVFfc2V0X3N1YmplY3RfbmFtZTsKKysJCVg1MDlfUkVRX3NldF92ZXJzaW9uOworKwkJWDUwOV9SRVFfc2lnbjsKKysJCVg1MDlfUkVRX3RvX1g1MDk7CisrCQlYNTA5X1JFUV92ZXJpZnk7CisrCQlYNTA5X1JFVk9LRURfYWRkX2V4dDsKKysJCVg1MDlfUkVWT0tFRF9kZWxldGVfZXh0OworKwkJWDUwOV9SRVZPS0VEX2ZyZWU7CisrCQlYNTA5X1JFVk9LRURfZ2V0X2V4dDsKKysJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2J5X05JRDsKKysJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2J5X09CSjsKKysJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJWDUwOV9SRVZPS0VEX2dldF9leHRfYnlfY3JpdGljOworKwkJWDUwOV9SRVZPS0VEX2dldF9leHRfY291bnQ7CisrCQlYNTA5X1JFVk9LRURfbmV3OworKwkJWDUwOV9TSUdfZnJlZTsKKysJCVg1MDlfU0lHX25ldzsKKysJCVg1MDlfU1RPUkVfQ1RYX2NsZWFudXA7CisrCQlYNTA5X1NUT1JFX0NUWF9pbml0OworKwkJWDUwOV9TVE9SRV9hZGRfY2VydDsKKysJCVg1MDlfU1RPUkVfYWRkX2xvb2t1cDsKKysJCVg1MDlfU1RPUkVfZnJlZTsKKysJCVg1MDlfU1RPUkVfZ2V0X2J5X3N1YmplY3Q7CisrCQlYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25zOworKwkJWDUwOV9TVE9SRV9uZXc7CisrCQlYNTA5X1NUT1JFX3NldF9kZWZhdWx0X3BhdGhzOworKwkJWDUwOV9WQUxfZnJlZTsKKysJCVg1MDlfVkFMX25ldzsKKysJCVg1MDlfYWRkX2V4dDsKKysJCVg1MDlfYXNuMV9tZXRoOworKwkJWDUwOV9jZXJ0aWZpY2F0ZV90eXBlOworKwkJWDUwOV9jaGVja19wcml2YXRlX2tleTsKKysJCVg1MDlfY21wX2N1cnJlbnRfdGltZTsKKysJCVg1MDlfZGVsZXRlX2V4dDsKKysJCVg1MDlfZGlnZXN0OworKwkJWDUwOV9kdXA7CisrCQlYNTA5X2ZyZWU7CisrCQlYNTA5X2dldF9kZWZhdWx0X2NlcnRfYXJlYTsKKysJCVg1MDlfZ2V0X2RlZmF1bHRfY2VydF9kaXI7CisrCQlYNTA5X2dldF9kZWZhdWx0X2NlcnRfZGlyX2VudjsKKysJCVg1MDlfZ2V0X2RlZmF1bHRfY2VydF9maWxlOworKwkJWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2ZpbGVfZW52OworKwkJWDUwOV9nZXRfZGVmYXVsdF9wcml2YXRlX2RpcjsKKysJCVg1MDlfZ2V0X2V4dDsKKysJCVg1MDlfZ2V0X2V4dF9ieV9OSUQ7CisrCQlYNTA5X2dldF9leHRfYnlfT0JKOworKwkJWDUwOV9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJWDUwOV9nZXRfZXh0X2NvdW50OworKwkJWDUwOV9nZXRfaXNzdWVyX25hbWU7CisrCQlYNTA5X2dldF9wdWJrZXk7CisrCQlYNTA5X2dldF9wdWJrZXlfcGFyYW1ldGVyczsKKysJCVg1MDlfZ2V0X3NlcmlhbE51bWJlcjsKKysJCVg1MDlfZ2V0X3N1YmplY3RfbmFtZTsKKysJCVg1MDlfZ210aW1lX2FkajsKKysJCVg1MDlfaXNzdWVyX2FuZF9zZXJpYWxfY21wOworKwkJWDUwOV9pc3N1ZXJfYW5kX3NlcmlhbF9oYXNoOworKwkJWDUwOV9pc3N1ZXJfbmFtZV9jbXA7CisrCQlYNTA5X2lzc3Vlcl9uYW1lX2hhc2g7CisrCQlYNTA5X2xvYWRfY2VydF9maWxlOworKwkJWDUwOV9uZXc7CisrCQlYNTA5X3ByaW50OworKwkJWDUwOV9wcmludF9mcDsKKysJCVg1MDlfc2V0X2lzc3Vlcl9uYW1lOworKwkJWDUwOV9zZXRfbm90QWZ0ZXI7CisrCQlYNTA5X3NldF9ub3RCZWZvcmU7CisrCQlYNTA5X3NldF9wdWJrZXk7CisrCQlYNTA5X3NldF9zZXJpYWxOdW1iZXI7CisrCQlYNTA5X3NldF9zdWJqZWN0X25hbWU7CisrCQlYNTA5X3NldF92ZXJzaW9uOworKwkJWDUwOV9zaWduOworKwkJWDUwOV9zdWJqZWN0X25hbWVfY21wOworKwkJWDUwOV9zdWJqZWN0X25hbWVfaGFzaDsKKysJCVg1MDlfdG9fWDUwOV9SRVE7CisrCQlYNTA5X3ZlcmlmeTsKKysJCVg1MDlfdmVyaWZ5X2NlcnQ7CisrCQlYNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZzsKKysJCVg1MDl2M19hZGRfZXh0OworKwkJWDUwOXYzX2FkZF9leHRlbnNpb247CisrCQlYNTA5djNfYWRkX25ldHNjYXBlX2V4dGVuc2lvbnM7CisrCQlYNTA5djNfYWRkX3N0YW5kYXJkX2V4dGVuc2lvbnM7CisrCQlYNTA5djNfY2xlYW51cF9leHRlbnNpb25zOworKwkJWDUwOXYzX2RhdGFfdHlwZV9ieV9OSUQ7CisrCQlYNTA5djNfZGF0YV90eXBlX2J5X09CSjsKKysJCVg1MDl2M19kZWxldGVfZXh0OworKwkJWDUwOXYzX2dldF9leHQ7CisrCQlYNTA5djNfZ2V0X2V4dF9ieV9OSUQ7CisrCQlYNTA5djNfZ2V0X2V4dF9ieV9PQko7CisrCQlYNTA5djNfZ2V0X2V4dF9ieV9jcml0aWNhbDsKKysJCVg1MDl2M19nZXRfZXh0X2NvdW50OworKwkJWDUwOXYzX3BhY2tfc3RyaW5nOworKwkJWDUwOXYzX3BhY2tfdHlwZV9ieV9OSUQ7CisrCQlYNTA5djNfcGFja190eXBlX2J5X09CSjsKKysJCVg1MDl2M191bnBhY2tfc3RyaW5nOworKwkJX2Rlc19jcnlwdDsKKysJCWEyZF9BU04xX09CSkVDVDsKKysJCWEyaV9BU04xX0lOVEVHRVI7CisrCQlhMmlfQVNOMV9TVFJJTkc7CisrCQlhc24xX0ZpbmlzaDsKKysJCWFzbjFfR2V0U2VxdWVuY2U7CisrCQlibl9kaXZfd29yZHM7CisrCQlibl9leHBhbmQyOworKwkJYm5fbXVsX2FkZF93b3JkczsKKysJCWJuX211bF93b3JkczsKKysJCUJOX3VhZGQ7CisrCQlCTl91c3ViOworKwkJYm5fc3FyX3dvcmRzOworKwkJX29zc2xfb2xkX2NyeXB0OworKwkJZDJpX0FTTjFfQklUX1NUUklORzsKKysJCWQyaV9BU04xX0JPT0xFQU47CisrCQlkMmlfQVNOMV9IRUFERVI7CisrCQlkMmlfQVNOMV9JQTVTVFJJTkc7CisrCQlkMmlfQVNOMV9JTlRFR0VSOworKwkJZDJpX0FTTjFfT0JKRUNUOworKwkJZDJpX0FTTjFfT0NURVRfU1RSSU5HOworKwkJZDJpX0FTTjFfUFJJTlRBQkxFOworKwkJZDJpX0FTTjFfUFJJTlRBQkxFU1RSSU5HOworKwkJZDJpX0FTTjFfU0VUOworKwkJZDJpX0FTTjFfVDYxU1RSSU5HOworKwkJZDJpX0FTTjFfVFlQRTsKKysJCWQyaV9BU04xX1VUQ1RJTUU7CisrCQlkMmlfQVNOMV9ieXRlczsKKysJCWQyaV9BU04xX3R5cGVfYnl0ZXM7CisrCQlkMmlfREhwYXJhbXM7CisrCQlkMmlfRFNBUHJpdmF0ZUtleTsKKysJCWQyaV9EU0FQcml2YXRlS2V5X2JpbzsKKysJCWQyaV9EU0FQcml2YXRlS2V5X2ZwOworKwkJZDJpX0RTQVB1YmxpY0tleTsKKysJCWQyaV9EU0FwYXJhbXM7CisrCQlkMmlfTkVUU0NBUEVfU1BLQUM7CisrCQlkMmlfTkVUU0NBUEVfU1BLSTsKKysJCWQyaV9OZXRzY2FwZV9SU0E7CisrCQlkMmlfUEtDUzc7CisrCQlkMmlfUEtDUzdfRElHRVNUOworKwkJZDJpX1BLQ1M3X0VOQ1JZUFQ7CisrCQlkMmlfUEtDUzdfRU5DX0NPTlRFTlQ7CisrCQlkMmlfUEtDUzdfRU5WRUxPUEU7CisrCQlkMmlfUEtDUzdfSVNTVUVSX0FORF9TRVJJQUw7CisrCQlkMmlfUEtDUzdfUkVDSVBfSU5GTzsKKysJCWQyaV9QS0NTN19TSUdORUQ7CisrCQlkMmlfUEtDUzdfU0lHTkVSX0lORk87CisrCQlkMmlfUEtDUzdfU0lHTl9FTlZFTE9QRTsKKysJCWQyaV9QS0NTN19iaW87CisrCQlkMmlfUEtDUzdfZnA7CisrCQlkMmlfUHJpdmF0ZUtleTsKKysJCWQyaV9QdWJsaWNLZXk7CisrCQlkMmlfUlNBUHJpdmF0ZUtleTsKKysJCWQyaV9SU0FQcml2YXRlS2V5X2JpbzsKKysJCWQyaV9SU0FQcml2YXRlS2V5X2ZwOworKwkJZDJpX1JTQVB1YmxpY0tleTsKKysJCWQyaV9YNTA5OworKwkJZDJpX1g1MDlfQUxHT1I7CisrCQlkMmlfWDUwOV9BVFRSSUJVVEU7CisrCQlkMmlfWDUwOV9DSU5GOworKwkJZDJpX1g1MDlfQ1JMOworKwkJZDJpX1g1MDlfQ1JMX0lORk87CisrCQlkMmlfWDUwOV9DUkxfYmlvOworKwkJZDJpX1g1MDlfQ1JMX2ZwOworKwkJZDJpX1g1MDlfRVhURU5TSU9OOworKwkJZDJpX1g1MDlfTkFNRTsKKysJCWQyaV9YNTA5X05BTUVfRU5UUlk7CisrCQlkMmlfWDUwOV9QS0VZOworKwkJZDJpX1g1MDlfUFVCS0VZOworKwkJZDJpX1g1MDlfUkVROworKwkJZDJpX1g1MDlfUkVRX0lORk87CisrCQlkMmlfWDUwOV9SRVFfYmlvOworKwkJZDJpX1g1MDlfUkVRX2ZwOworKwkJZDJpX1g1MDlfUkVWT0tFRDsKKysJCWQyaV9YNTA5X1NJRzsKKysJCWQyaV9YNTA5X1ZBTDsKKysJCWQyaV9YNTA5X2JpbzsKKysJCWQyaV9YNTA5X2ZwOworKwkJREVTX2NiY19ja3N1bTsKKysJCURFU19jYmNfZW5jcnlwdDsKKysJCURFU19jYmxvY2tfcHJpbnRfZmlsZTsKKysJCURFU19jZmI2NF9lbmNyeXB0OworKwkJREVTX2NmYl9lbmNyeXB0OworKwkJREVTX2RlY3J5cHQzOworKwkJREVTX2VjYjNfZW5jcnlwdDsKKysJCURFU19lY2JfZW5jcnlwdDsKKysJCURFU19lZGUzX2NiY19lbmNyeXB0OworKwkJREVTX2VkZTNfY2ZiNjRfZW5jcnlwdDsKKysJCURFU19lZGUzX29mYjY0X2VuY3J5cHQ7CisrCQlERVNfZW5jX3JlYWQ7CisrCQlERVNfZW5jX3dyaXRlOworKwkJREVTX2VuY3J5cHQxOworKwkJREVTX2VuY3J5cHQyOworKwkJREVTX2VuY3J5cHQzOworKwkJREVTX2ZjcnlwdDsKKysJCURFU19pc193ZWFrX2tleTsKKysJCURFU19rZXlfc2NoZWQ7CisrCQlERVNfbmNiY19lbmNyeXB0OworKwkJREVTX29mYjY0X2VuY3J5cHQ7CisrCQlERVNfb2ZiX2VuY3J5cHQ7CisrCQlERVNfb3B0aW9uczsKKysJCURFU19wY2JjX2VuY3J5cHQ7CisrCQlERVNfcXVhZF9ja3N1bTsKKysJCURFU19yYW5kb21fa2V5OworKwkJX29zc2xfb2xkX2Rlc19yYW5kb21fc2VlZDsKKysJCV9vc3NsX29sZF9kZXNfcmVhZF8ycGFzc3dvcmRzOworKwkJX29zc2xfb2xkX2Rlc19yZWFkX3Bhc3N3b3JkOworKwkJX29zc2xfb2xkX2Rlc19yZWFkX3B3OworKwkJX29zc2xfb2xkX2Rlc19yZWFkX3B3X3N0cmluZzsKKysJCURFU19zZXRfa2V5OworKwkJREVTX3NldF9vZGRfcGFyaXR5OworKwkJREVTX3N0cmluZ190b18ya2V5czsKKysJCURFU19zdHJpbmdfdG9fa2V5OworKwkJREVTX3hjYmNfZW5jcnlwdDsKKysJCURFU194d2hpdGVfaW4yb3V0OworKwkJZmNyeXB0X2JvZHk7CisrCQlpMmFfQVNOMV9JTlRFR0VSOworKwkJaTJhX0FTTjFfT0JKRUNUOworKwkJaTJhX0FTTjFfU1RSSU5HOworKwkJaTJkX0FTTjFfQklUX1NUUklORzsKKysJCWkyZF9BU04xX0JPT0xFQU47CisrCQlpMmRfQVNOMV9IRUFERVI7CisrCQlpMmRfQVNOMV9JQTVTVFJJTkc7CisrCQlpMmRfQVNOMV9JTlRFR0VSOworKwkJaTJkX0FTTjFfT0JKRUNUOworKwkJaTJkX0FTTjFfT0NURVRfU1RSSU5HOworKwkJaTJkX0FTTjFfUFJJTlRBQkxFOworKwkJaTJkX0FTTjFfU0VUOworKwkJaTJkX0FTTjFfVFlQRTsKKysJCWkyZF9BU04xX1VUQ1RJTUU7CisrCQlpMmRfQVNOMV9ieXRlczsKKysJCWkyZF9ESHBhcmFtczsKKysJCWkyZF9EU0FQcml2YXRlS2V5OworKwkJaTJkX0RTQVByaXZhdGVLZXlfYmlvOworKwkJaTJkX0RTQVByaXZhdGVLZXlfZnA7CisrCQlpMmRfRFNBUHVibGljS2V5OworKwkJaTJkX0RTQXBhcmFtczsKKysJCWkyZF9ORVRTQ0FQRV9TUEtBQzsKKysJCWkyZF9ORVRTQ0FQRV9TUEtJOworKwkJaTJkX05ldHNjYXBlX1JTQTsKKysJCWkyZF9QS0NTNzsKKysJCWkyZF9QS0NTN19ESUdFU1Q7CisrCQlpMmRfUEtDUzdfRU5DUllQVDsKKysJCWkyZF9QS0NTN19FTkNfQ09OVEVOVDsKKysJCWkyZF9QS0NTN19FTlZFTE9QRTsKKysJCWkyZF9QS0NTN19JU1NVRVJfQU5EX1NFUklBTDsKKysJCWkyZF9QS0NTN19SRUNJUF9JTkZPOworKwkJaTJkX1BLQ1M3X1NJR05FRDsKKysJCWkyZF9QS0NTN19TSUdORVJfSU5GTzsKKysJCWkyZF9QS0NTN19TSUdOX0VOVkVMT1BFOworKwkJaTJkX1BLQ1M3X2JpbzsKKysJCWkyZF9QS0NTN19mcDsKKysJCWkyZF9Qcml2YXRlS2V5OworKwkJaTJkX1B1YmxpY0tleTsKKysJCWkyZF9SU0FQcml2YXRlS2V5OworKwkJaTJkX1JTQVByaXZhdGVLZXlfYmlvOworKwkJaTJkX1JTQVByaXZhdGVLZXlfZnA7CisrCQlpMmRfUlNBUHVibGljS2V5OworKwkJaTJkX1g1MDk7CisrCQlpMmRfWDUwOV9BTEdPUjsKKysJCWkyZF9YNTA5X0FUVFJJQlVURTsKKysJCWkyZF9YNTA5X0NJTkY7CisrCQlpMmRfWDUwOV9DUkw7CisrCQlpMmRfWDUwOV9DUkxfSU5GTzsKKysJCWkyZF9YNTA5X0NSTF9iaW87CisrCQlpMmRfWDUwOV9DUkxfZnA7CisrCQlpMmRfWDUwOV9FWFRFTlNJT047CisrCQlpMmRfWDUwOV9OQU1FOworKwkJaTJkX1g1MDlfTkFNRV9FTlRSWTsKKysJCWkyZF9YNTA5X1BLRVk7CisrCQlpMmRfWDUwOV9QVUJLRVk7CisrCQlpMmRfWDUwOV9SRVE7CisrCQlpMmRfWDUwOV9SRVFfSU5GTzsKKysJCWkyZF9YNTA5X1JFUV9iaW87CisrCQlpMmRfWDUwOV9SRVFfZnA7CisrCQlpMmRfWDUwOV9SRVZPS0VEOworKwkJaTJkX1g1MDlfU0lHOworKwkJaTJkX1g1MDlfVkFMOworKwkJaTJkX1g1MDlfYmlvOworKwkJaTJkX1g1MDlfZnA7CisrCQlpZGVhX2NiY19lbmNyeXB0OworKwkJaWRlYV9jZmI2NF9lbmNyeXB0OworKwkJaWRlYV9lY2JfZW5jcnlwdDsKKysJCWlkZWFfZW5jcnlwdDsKKysJCWlkZWFfb2ZiNjRfZW5jcnlwdDsKKysJCWlkZWFfb3B0aW9uczsKKysJCWlkZWFfc2V0X2RlY3J5cHRfa2V5OworKwkJaWRlYV9zZXRfZW5jcnlwdF9rZXk7CisrCQlsaF9kZWxldGU7CisrCQlsaF9kb2FsbDsKKysJCWxoX2RvYWxsX2FyZzsKKysJCWxoX2ZyZWU7CisrCQlsaF9pbnNlcnQ7CisrCQlsaF9uZXc7CisrCQlsaF9ub2RlX3N0YXRzOworKwkJbGhfbm9kZV9zdGF0c19iaW87CisrCQlsaF9ub2RlX3VzYWdlX3N0YXRzOworKwkJbGhfbm9kZV91c2FnZV9zdGF0c19iaW87CisrCQlsaF9yZXRyaWV2ZTsKKysJCWxoX3N0YXRzOworKwkJbGhfc3RhdHNfYmlvOworKwkJbGhfc3RyaGFzaDsKKysJCXNrX2RlbGV0ZTsKKysJCXNrX2RlbGV0ZV9wdHI7CisrCQlza19kdXA7CisrCQlza19maW5kOworKwkJc2tfZnJlZTsKKysJCXNrX2luc2VydDsKKysJCXNrX25ldzsKKysJCXNrX3BvcDsKKysJCXNrX3BvcF9mcmVlOworKwkJc2tfcHVzaDsKKysJCXNrX3NldF9jbXBfZnVuYzsKKysJCXNrX3NoaWZ0OworKwkJc2tfdW5zaGlmdDsKKysJCXNrX3plcm87CisrCQlCSU9fZl9uYmlvX3Rlc3Q7CisrCQlBU04xX1RZUEVfZ2V0OworKwkJQVNOMV9UWVBFX3NldDsKKysJCVBLQ1M3X2NvbnRlbnRfZnJlZTsKKysJCUVSUl9sb2FkX1BLQ1M3X3N0cmluZ3M7CisrCQlYNTA5X2ZpbmRfYnlfaXNzdWVyX2FuZF9zZXJpYWw7CisrCQlYNTA5X2ZpbmRfYnlfc3ViamVjdDsKKysJCVBLQ1M3X2N0cmw7CisrCQlQS0NTN19zZXRfdHlwZTsKKysJCVBLQ1M3X3NldF9jb250ZW50OworKwkJUEtDUzdfU0lHTkVSX0lORk9fc2V0OworKwkJUEtDUzdfYWRkX3NpZ25lcjsKKysJCVBLQ1M3X2FkZF9jZXJ0aWZpY2F0ZTsKKysJCVBLQ1M3X2FkZF9jcmw7CisrCQlQS0NTN19jb250ZW50X25ldzsKKysJCVBLQ1M3X2RhdGFTaWduOworKwkJUEtDUzdfZGF0YVZlcmlmeTsKKysJCVBLQ1M3X2RhdGFJbml0OworKwkJUEtDUzdfYWRkX3NpZ25hdHVyZTsKKysJCVBLQ1M3X2NlcnRfZnJvbV9zaWduZXJfaW5mbzsKKysJCVBLQ1M3X2dldF9zaWduZXJfaW5mbzsKKysJCUVWUF9kZWxldGVfYWxpYXM7CisrCQlFVlBfbWRjMjsKKysJCVBFTV9yZWFkX2Jpb19SU0FQdWJsaWNLZXk7CisrCQlQRU1fd3JpdGVfYmlvX1JTQVB1YmxpY0tleTsKKysJCWQyaV9SU0FQdWJsaWNLZXlfYmlvOworKwkJaTJkX1JTQVB1YmxpY0tleV9iaW87CisrCQlQRU1fcmVhZF9SU0FQdWJsaWNLZXk7CisrCQlQRU1fd3JpdGVfUlNBUHVibGljS2V5OworKwkJZDJpX1JTQVB1YmxpY0tleV9mcDsKKysJCWkyZF9SU0FQdWJsaWNLZXlfZnA7CisrCQlCSU9fY29weV9uZXh0X3JldHJ5OworKwkJUlNBX2ZsYWdzOworKwkJWDUwOV9TVE9SRV9hZGRfY3JsOworKwkJWDUwOV9sb2FkX2NybF9maWxlOworKwkJRVZQX3JjMl80MF9jYmM7CisrCQlFVlBfcmM0XzQwOworKwkJRVZQX0NJUEhFUl9DVFhfaW5pdDsKKysJCUhNQUM7CisrCQlITUFDX0luaXQ7CisrCQlITUFDX1VwZGF0ZTsKKysJCUhNQUNfRmluYWw7CisrCQlFUlJfZ2V0X25leHRfZXJyb3JfbGlicmFyeTsKKysJCUVWUF9QS0VZX2NtcF9wYXJhbWV0ZXJzOworKwkJSE1BQ19jbGVhbnVwOworKwkJQklPX3B0cl9jdHJsOworKwkJQklPX25ld19maWxlX2ludGVybmFsOworKwkJQklPX25ld19mcF9pbnRlcm5hbDsKKysJCUJJT19zX2ZpbGVfaW50ZXJuYWw7CisrCQlCTl9CTElORElOR19jb252ZXJ0OworKwkJQk5fQkxJTkRJTkdfaW52ZXJ0OworKwkJQk5fQkxJTkRJTkdfdXBkYXRlOworKwkJUlNBX2JsaW5kaW5nX29uOworKwkJUlNBX2JsaW5kaW5nX29mZjsKKysJCWkydF9BU04xX09CSkVDVDsKKysJCUJOX0JMSU5ESU5HX25ldzsKKysJCUJOX0JMSU5ESU5HX2ZyZWU7CisrCQlFVlBfY2FzdDVfY2JjOworKwkJRVZQX2Nhc3Q1X2NmYjY0OworKwkJRVZQX2Nhc3Q1X2VjYjsKKysJCUVWUF9jYXN0NV9vZmI7CisrCQlCRl9kZWNyeXB0OworKwkJQ0FTVF9zZXRfa2V5OworKwkJQ0FTVF9lbmNyeXB0OworKwkJQ0FTVF9kZWNyeXB0OworKwkJQ0FTVF9lY2JfZW5jcnlwdDsKKysJCUNBU1RfY2JjX2VuY3J5cHQ7CisrCQlDQVNUX2NmYjY0X2VuY3J5cHQ7CisrCQlDQVNUX29mYjY0X2VuY3J5cHQ7CisrCQlSQzJfZGVjcnlwdDsKKysJCU9CSl9jcmVhdGVfb2JqZWN0czsKKysJCUJOX2V4cDsKKysJCUJOX211bF93b3JkOworKwkJQk5fc3ViX3dvcmQ7CisrCQlCTl9kZWMyYm47CisrCQlCTl9ibjJkZWM7CisrCQlCSU9fZ2hibl9jdHJsOworKwkJQ1JZUFRPX2ZyZWVfZXhfZGF0YTsKKysJCUNSWVBUT19nZXRfZXhfZGF0YTsKKysJCUNSWVBUT19zZXRfZXhfZGF0YTsKKysJCUVSUl9sb2FkX0NSWVBUT19zdHJpbmdzOworKwkJRVJSX2xvYWRfQ1JZUFRPbGliX3N0cmluZ3M7CisrCQlFVlBfUEtFWV9iaXRzOworKwkJTUQ1X1RyYW5zZm9ybTsKKysJCVNIQTFfVHJhbnNmb3JtOworKwkJU0hBX1RyYW5zZm9ybTsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldF9jaGFpbjsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldF9jdXJyZW50X2NlcnQ7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3I7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3JfZGVwdGg7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXRfZXhfZGF0YTsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF9jZXJ0OworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2NoYWluOworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2Vycm9yOworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2V4X2RhdGE7CisrCQlDUllQVE9fZHVwX2V4X2RhdGE7CisrCQlDUllQVE9fZ2V0X25ld19sb2NraWQ7CisrCQlDUllQVE9fbmV3X2V4X2RhdGE7CisrCQlSU0Ffc2V0X2V4X2RhdGE7CisrCQlSU0FfZ2V0X2V4X2RhdGE7CisrCQlSU0FfZ2V0X2V4X25ld19pbmRleDsKKysJCVJTQV9wYWRkaW5nX2FkZF9QS0NTMV90eXBlXzE7CisrCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfdHlwZV8yOworKwkJUlNBX3BhZGRpbmdfYWRkX1NTTHYyMzsKKysJCVJTQV9wYWRkaW5nX2FkZF9ub25lOworKwkJUlNBX3BhZGRpbmdfY2hlY2tfUEtDUzFfdHlwZV8xOworKwkJUlNBX3BhZGRpbmdfY2hlY2tfUEtDUzFfdHlwZV8yOworKwkJUlNBX3BhZGRpbmdfY2hlY2tfU1NMdjIzOworKwkJUlNBX3BhZGRpbmdfY2hlY2tfbm9uZTsKKysJCWJuX2FkZF93b3JkczsKKysJCWQyaV9OZXRzY2FwZV9SU0FfMjsKKysJCUNSWVBUT19nZXRfZXhfbmV3X2luZGV4OworKwkJUklQRU1EMTYwX0luaXQ7CisrCQlSSVBFTUQxNjBfVXBkYXRlOworKwkJUklQRU1EMTYwX0ZpbmFsOworKwkJUklQRU1EMTYwOworKwkJUklQRU1EMTYwX1RyYW5zZm9ybTsKKysJCVJDNV8zMl9zZXRfa2V5OworKwkJUkM1XzMyX2VjYl9lbmNyeXB0OworKwkJUkM1XzMyX2VuY3J5cHQ7CisrCQlSQzVfMzJfZGVjcnlwdDsKKysJCVJDNV8zMl9jYmNfZW5jcnlwdDsKKysJCVJDNV8zMl9jZmI2NF9lbmNyeXB0OworKwkJUkM1XzMyX29mYjY0X2VuY3J5cHQ7CisrCQlCTl9ibjJtcGk7CisrCQlCTl9tcGkyYm47CisrCQlBU04xX0JJVF9TVFJJTkdfZ2V0X2JpdDsKKysJCUFTTjFfQklUX1NUUklOR19zZXRfYml0OworKwkJQklPX2dldF9leF9kYXRhOworKwkJQklPX2dldF9leF9uZXdfaW5kZXg7CisrCQlCSU9fc2V0X2V4X2RhdGE7CisrCQlYNTA5djNfZ2V0X2tleV91c2FnZTsKKysJCVg1MDl2M19zZXRfa2V5X3VzYWdlOworKwkJYTJpX1g1MDl2M19rZXlfdXNhZ2U7CisrCQlpMmFfWDUwOXYzX2tleV91c2FnZTsKKysJCUVWUF9QS0VZX2RlY3J5cHQ7CisrCQlFVlBfUEtFWV9lbmNyeXB0OworKwkJUEtDUzdfUkVDSVBfSU5GT19zZXQ7CisrCQlQS0NTN19hZGRfcmVjaXBpZW50OworKwkJUEtDUzdfYWRkX3JlY2lwaWVudF9pbmZvOworKwkJUEtDUzdfc2V0X2NpcGhlcjsKKysJCUFTTjFfVFlQRV9nZXRfaW50X29jdGV0c3RyaW5nOworKwkJQVNOMV9UWVBFX2dldF9vY3RldHN0cmluZzsKKysJCUFTTjFfVFlQRV9zZXRfaW50X29jdGV0c3RyaW5nOworKwkJQVNOMV9UWVBFX3NldF9vY3RldHN0cmluZzsKKysJCUFTTjFfVVRDVElNRV9zZXRfc3RyaW5nOworKwkJRVJSX2FkZF9lcnJvcl9kYXRhOworKwkJRVJSX3NldF9lcnJvcl9kYXRhOworKwkJRVZQX0NJUEhFUl9hc24xX3RvX3BhcmFtOworKwkJRVZQX0NJUEhFUl9wYXJhbV90b19hc24xOworKwkJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdjsKKysJCUVWUF9DSVBIRVJfc2V0X2FzbjFfaXY7CisrCQlFVlBfcmM1XzMyXzEyXzE2X2NiYzsKKysJCUVWUF9yYzVfMzJfMTJfMTZfY2ZiNjQ7CisrCQlFVlBfcmM1XzMyXzEyXzE2X2VjYjsKKysJCUVWUF9yYzVfMzJfMTJfMTZfb2ZiOworKwkJYXNuMV9hZGRfZXJyb3I7CisrCQlkMmlfQVNOMV9CTVBTVFJJTkc7CisrCQlpMmRfQVNOMV9CTVBTVFJJTkc7CisrCQlCSU9fZl9iZXI7CisrCQlCTl9pbml0OworKwkJQ09NUF9DVFhfbmV3OworKwkJQ09NUF9DVFhfZnJlZTsKKysJCUNPTVBfQ1RYX2NvbXByZXNzX2Jsb2NrOworKwkJQ09NUF9DVFhfZXhwYW5kX2Jsb2NrOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0X2V4X25ld19pbmRleDsKKysJCU9CSl9OQU1FX2FkZDsKKysJCUJJT19zb2NrZXRfbmJpbzsKKysJCUVWUF9yYzJfNjRfY2JjOworKwkJT0JKX05BTUVfY2xlYW51cDsKKysJCU9CSl9OQU1FX2dldDsKKysJCU9CSl9OQU1FX2luaXQ7CisrCQlPQkpfTkFNRV9uZXdfaW5kZXg7CisrCQlPQkpfTkFNRV9yZW1vdmU7CisrCQlCTl9NT05UX0NUWF9jb3B5OworKwkJQklPX25ld19zb2NrczRhX2Nvbm5lY3Q7CisrCQlCSU9fc19zb2NrczRhX2Nvbm5lY3Q7CisrCQlQUk9YWV9zZXRfY29ubmVjdF9tb2RlOworKwkJUkFORF9TU0xlYXk7CisrCQlSQU5EX3NldF9yYW5kX21ldGhvZDsKKysJCVJTQV9tZW1vcnlfbG9jazsKKysJCWJuX3N1Yl93b3JkczsKKysJCWJuX211bF9ub3JtYWw7CisrCQlibl9tdWxfY29tYmE4OworKwkJYm5fbXVsX2NvbWJhNDsKKysJCWJuX3Nxcl9ub3JtYWw7CisrCQlibl9zcXJfY29tYmE4OworKwkJYm5fc3FyX2NvbWJhNDsKKysJCWJuX2NtcF93b3JkczsKKysJCWJuX211bF9yZWN1cnNpdmU7CisrCQlibl9tdWxfcGFydF9yZWN1cnNpdmU7CisrCQlibl9zcXJfcmVjdXJzaXZlOworKwkJYm5fbXVsX2xvd19ub3JtYWw7CisrCQlCTl9SRUNQX0NUWF9pbml0OworKwkJQk5fUkVDUF9DVFhfbmV3OworKwkJQk5fUkVDUF9DVFhfZnJlZTsKKysJCUJOX1JFQ1BfQ1RYX3NldDsKKysJCUJOX21vZF9tdWxfcmVjaXByb2NhbDsKKysJCUJOX21vZF9leHBfcmVjcDsKKysJCUJOX2Rpdl9yZWNwOworKwkJQk5fQ1RYX2luaXQ7CisrCQlCTl9NT05UX0NUWF9pbml0OworKwkJUkFORF9nZXRfcmFuZF9tZXRob2Q7CisrCQlQS0NTN19hZGRfYXR0cmlidXRlOworKwkJUEtDUzdfYWRkX3NpZ25lZF9hdHRyaWJ1dGU7CisrCQlQS0NTN19kaWdlc3RfZnJvbV9hdHRyaWJ1dGVzOworKwkJUEtDUzdfZ2V0X2F0dHJpYnV0ZTsKKysJCVBLQ1M3X2dldF9pc3N1ZXJfYW5kX3NlcmlhbDsKKysJCVBLQ1M3X2dldF9zaWduZWRfYXR0cmlidXRlOworKwkJQ09NUF9jb21wcmVzc19ibG9jazsKKysJCUNPTVBfZXhwYW5kX2Jsb2NrOworKwkJQ09NUF9ybGU7CisrCQlDT01QX3psaWI7CisrCQltc190aW1lX2RpZmY7CisrCQltc190aW1lX25ldzsKKysJCW1zX3RpbWVfZnJlZTsKKysJCW1zX3RpbWVfY21wOworKwkJbXNfdGltZV9nZXQ7CisrCQlQS0NTN19zZXRfYXR0cmlidXRlczsKKysJCVBLQ1M3X3NldF9zaWduZWRfYXR0cmlidXRlczsKKysJCVg1MDlfQVRUUklCVVRFX2NyZWF0ZTsKKysJCVg1MDlfQVRUUklCVVRFX2R1cDsKKysJCUFTTjFfR0VORVJBTElaRURUSU1FX2NoZWNrOworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfcHJpbnQ7CisrCQlBU04xX0dFTkVSQUxJWkVEVElNRV9zZXQ7CisrCQlBU04xX0dFTkVSQUxJWkVEVElNRV9zZXRfc3RyaW5nOworKwkJQVNOMV9USU1FX3ByaW50OworKwkJQkFTSUNfQ09OU1RSQUlOVFNfZnJlZTsKKysJCUJBU0lDX0NPTlNUUkFJTlRTX25ldzsKKysJCUVSUl9sb2FkX1g1MDlWM19zdHJpbmdzOworKwkJTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRV9mcmVlOworKwkJTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRV9uZXc7CisrCQlPQkpfdHh0Mm9iajsKKysJCVBFTV9yZWFkX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0U7CisrCQlQRU1fcmVhZF9OU19DRVJUX1NFUTsKKysJCVBFTV9yZWFkX2Jpb19ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFOworKwkJUEVNX3JlYWRfYmlvX05TX0NFUlRfU0VROworKwkJUEVNX3dyaXRlX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0U7CisrCQlQRU1fd3JpdGVfTlNfQ0VSVF9TRVE7CisrCQlQRU1fd3JpdGVfYmlvX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0U7CisrCQlQRU1fd3JpdGVfYmlvX05TX0NFUlRfU0VROworKwkJWDUwOVYzX0VYVF9hZGQ7CisrCQlYNTA5VjNfRVhUX2FkZF9hbGlhczsKKysJCVg1MDlWM19FWFRfYWRkX2NvbmY7CisrCQlYNTA5VjNfRVhUX2NsZWFudXA7CisrCQlYNTA5VjNfRVhUX2NvbmY7CisrCQlYNTA5VjNfRVhUX2NvbmZfbmlkOworKwkJWDUwOVYzX0VYVF9nZXQ7CisrCQlYNTA5VjNfRVhUX2dldF9uaWQ7CisrCQlYNTA5VjNfRVhUX3ByaW50OworKwkJWDUwOVYzX0VYVF9wcmludF9mcDsKKysJCVg1MDlWM19hZGRfc3RhbmRhcmRfZXh0ZW5zaW9uczsKKysJCVg1MDlWM19hZGRfdmFsdWU7CisrCQlYNTA5VjNfYWRkX3ZhbHVlX2Jvb2w7CisrCQlYNTA5VjNfYWRkX3ZhbHVlX2ludDsKKysJCVg1MDlWM19jb25mX2ZyZWU7CisrCQlYNTA5VjNfZ2V0X3ZhbHVlX2Jvb2w7CisrCQlYNTA5VjNfZ2V0X3ZhbHVlX2ludDsKKysJCVg1MDlWM19wYXJzZV9saXN0OworKwkJZDJpX0FTTjFfR0VORVJBTElaRURUSU1FOworKwkJZDJpX0FTTjFfVElNRTsKKysJCWQyaV9CQVNJQ19DT05TVFJBSU5UUzsKKysJCWQyaV9ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFOworKwkJZDJpX2V4dF9rdTsKKysJCWV4dF9rdV9mcmVlOworKwkJZXh0X2t1X25ldzsKKysJCWkyZF9BU04xX0dFTkVSQUxJWkVEVElNRTsKKysJCWkyZF9BU04xX1RJTUU7CisrCQlpMmRfQkFTSUNfQ09OU1RSQUlOVFM7CisrCQlpMmRfTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRTsKKysJCWkyZF9leHRfa3U7CisrCQlFVlBfTURfQ1RYX2NvcHk7CisrCQlpMmRfQVNOMV9FTlVNRVJBVEVEOworKwkJZDJpX0FTTjFfRU5VTUVSQVRFRDsKKysJCUFTTjFfRU5VTUVSQVRFRF9zZXQ7CisrCQlBU04xX0VOVU1FUkFURURfZ2V0OworKwkJQk5fdG9fQVNOMV9FTlVNRVJBVEVEOworKwkJQVNOMV9FTlVNRVJBVEVEX3RvX0JOOworKwkJaTJhX0FTTjFfRU5VTUVSQVRFRDsKKysJCWEyaV9BU04xX0VOVU1FUkFURUQ7CisrCQlpMmRfR0VORVJBTF9OQU1FOworKwkJZDJpX0dFTkVSQUxfTkFNRTsKKysJCUdFTkVSQUxfTkFNRV9uZXc7CisrCQlHRU5FUkFMX05BTUVfZnJlZTsKKysJCUdFTkVSQUxfTkFNRVNfbmV3OworKwkJR0VORVJBTF9OQU1FU19mcmVlOworKwkJZDJpX0dFTkVSQUxfTkFNRVM7CisrCQlpMmRfR0VORVJBTF9OQU1FUzsKKysJCWkydl9HRU5FUkFMX05BTUVTOworKwkJaTJzX0FTTjFfT0NURVRfU1RSSU5HOworKwkJczJpX0FTTjFfT0NURVRfU1RSSU5HOworKwkJWDUwOVYzX0VYVF9jaGVja19jb25mOworKwkJaGV4X3RvX3N0cmluZzsKKysJCXN0cmluZ190b19oZXg7CisrCQlERVNfZWRlM19jYmNtX2VuY3J5cHQ7CisrCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfT0FFUDsKKysJCVJTQV9wYWRkaW5nX2NoZWNrX1BLQ1MxX09BRVA7CisrCQlYNTA5X0NSTF9wcmludF9mcDsKKysJCVg1MDlfQ1JMX3ByaW50OworKwkJaTJ2X0dFTkVSQUxfTkFNRTsKKysJCXYyaV9HRU5FUkFMX05BTUU7CisrCQlpMmRfUEtFWV9VU0FHRV9QRVJJT0Q7CisrCQlkMmlfUEtFWV9VU0FHRV9QRVJJT0Q7CisrCQlQS0VZX1VTQUdFX1BFUklPRF9uZXc7CisrCQlQS0VZX1VTQUdFX1BFUklPRF9mcmVlOworKwkJdjJpX0dFTkVSQUxfTkFNRVM7CisrCQlpMnNfQVNOMV9JTlRFR0VSOworKwkJWDUwOVYzX0VYVF9kMmk7CisrCQluYW1lX2NtcDsKKysJCXN0cl9kdXA7CisrCQlpMnNfQVNOMV9FTlVNRVJBVEVEOworKwkJaTJzX0FTTjFfRU5VTUVSQVRFRF9UQUJMRTsKKysJCUJJT19zX2xvZzsKKysJCUJJT19mX3JlbGlhYmxlOworKwkJUEtDUzdfZGF0YUZpbmFsOworKwkJUEtDUzdfZGF0YURlY29kZTsKKysJCVg1MDlWM19FWFRfQ1JMX2FkZF9jb25mOworKwkJQk5fc2V0X3BhcmFtczsKKysJCUJOX2dldF9wYXJhbXM7CisrCQlCSU9fZ2V0X2V4X251bTsKKysJCUJJT19zZXRfZXhfZnJlZV9mdW5jOworKwkJRVZQX3JpcGVtZDE2MDsKKysJCUFTTjFfVElNRV9zZXQ7CisrCQlpMmRfQVVUSE9SSVRZX0tFWUlEOworKwkJZDJpX0FVVEhPUklUWV9LRVlJRDsKKysJCUFVVEhPUklUWV9LRVlJRF9uZXc7CisrCQlBVVRIT1JJVFlfS0VZSURfZnJlZTsKKysJCUFTTjFfc2VxX3VucGFjazsKKysJCUFTTjFfc2VxX3BhY2s7CisrCQlBU04xX3VucGFja19zdHJpbmc7CisrCQlBU04xX3BhY2tfc3RyaW5nOworKwkJUEtDUzEyX3BhY2tfc2FmZWJhZzsKKysJCVBLQ1MxMl9NQUtFX0tFWUJBRzsKKysJCVBLQ1M4X2VuY3J5cHQ7CisrCQlQS0NTMTJfTUFLRV9TSEtFWUJBRzsKKysJCVBLQ1MxMl9wYWNrX3A3ZGF0YTsKKysJCVBLQ1MxMl9wYWNrX3A3ZW5jZGF0YTsKKysJCVBLQ1MxMl9hZGRfbG9jYWxrZXlpZDsKKysJCVBLQ1MxMl9hZGRfZnJpZW5kbHluYW1lX2FzYzsKKysJCVBLQ1MxMl9hZGRfZnJpZW5kbHluYW1lX3VuaTsKKysJCVBLQ1MxMl9nZXRfZnJpZW5kbHluYW1lOworKwkJUEtDUzEyX3BiZV9jcnlwdDsKKysJCVBLQ1MxMl9kZWNyeXB0X2QyaTsKKysJCVBLQ1MxMl9pMmRfZW5jcnlwdDsKKysJCVBLQ1MxMl9pbml0OworKwkJUEtDUzEyX2tleV9nZW5fYXNjOworKwkJUEtDUzEyX2tleV9nZW5fdW5pOworKwkJUEtDUzEyX2dlbl9tYWM7CisrCQlQS0NTMTJfdmVyaWZ5X21hYzsKKysJCVBLQ1MxMl9zZXRfbWFjOworKwkJUEtDUzEyX3NldHVwX21hYzsKKysJCU9QRU5TU0xfYXNjMnVuaTsKKysJCU9QRU5TU0xfdW5pMmFzYzsKKysJCWkyZF9QS0NTMTJfQkFHUzsKKysJCVBLQ1MxMl9CQUdTX25ldzsKKysJCWQyaV9QS0NTMTJfQkFHUzsKKysJCVBLQ1MxMl9CQUdTX2ZyZWU7CisrCQlpMmRfUEtDUzEyOworKwkJZDJpX1BLQ1MxMjsKKysJCVBLQ1MxMl9uZXc7CisrCQlQS0NTMTJfZnJlZTsKKysJCWkyZF9QS0NTMTJfTUFDX0RBVEE7CisrCQlQS0NTMTJfTUFDX0RBVEFfbmV3OworKwkJZDJpX1BLQ1MxMl9NQUNfREFUQTsKKysJCVBLQ1MxMl9NQUNfREFUQV9mcmVlOworKwkJaTJkX1BLQ1MxMl9TQUZFQkFHOworKwkJUEtDUzEyX1NBRkVCQUdfbmV3OworKwkJZDJpX1BLQ1MxMl9TQUZFQkFHOworKwkJUEtDUzEyX1NBRkVCQUdfZnJlZTsKKysJCUVSUl9sb2FkX1BLQ1MxMl9zdHJpbmdzOworKwkJUEtDUzEyX1BCRV9hZGQ7CisrCQlQS0NTOF9hZGRfa2V5dXNhZ2U7CisrCQlQS0NTMTJfZ2V0X2F0dHJfZ2VuOworKwkJUEtDUzEyX3BhcnNlOworKwkJUEtDUzEyX2NyZWF0ZTsKKysJCWkyZF9QS0NTMTJfYmlvOworKwkJaTJkX1BLQ1MxMl9mcDsKKysJCWQyaV9QS0NTMTJfYmlvOworKwkJZDJpX1BLQ1MxMl9mcDsKKysJCWkyZF9QQkVQQVJBTTsKKysJCVBCRVBBUkFNX25ldzsKKysJCWQyaV9QQkVQQVJBTTsKKysJCVBCRVBBUkFNX2ZyZWU7CisrCQlpMmRfUEtDUzhfUFJJVl9LRVlfSU5GTzsKKysJCVBLQ1M4X1BSSVZfS0VZX0lORk9fbmV3OworKwkJZDJpX1BLQ1M4X1BSSVZfS0VZX0lORk87CisrCQlQS0NTOF9QUklWX0tFWV9JTkZPX2ZyZWU7CisrCQlFVlBfUEtDUzgyUEtFWTsKKysJCUVWUF9QS0VZMlBLQ1M4OworKwkJUEtDUzhfc2V0X2Jyb2tlbjsKKysJCUVWUF9QQkVfQUxHT1JfQ2lwaGVySW5pdDsKKysJCUVWUF9QQkVfYWxnX2FkZDsKKysJCVBLQ1M1X3BiZV9zZXQ7CisrCQlFVlBfUEJFX2NsZWFudXA7CisrCQlpMmRfU1hORVQ7CisrCQlkMmlfU1hORVQ7CisrCQlTWE5FVF9uZXc7CisrCQlTWE5FVF9mcmVlOworKwkJaTJkX1NYTkVUSUQ7CisrCQlkMmlfU1hORVRJRDsKKysJCVNYTkVUSURfbmV3OworKwkJU1hORVRJRF9mcmVlOworKwkJRFNBX1NJR19uZXc7CisrCQlEU0FfU0lHX2ZyZWU7CisrCQlEU0FfZG9fc2lnbjsKKysJCURTQV9kb192ZXJpZnk7CisrCQlkMmlfRFNBX1NJRzsKKysJCWkyZF9EU0FfU0lHOworKwkJaTJkX0FTTjFfVklTSUJMRVNUUklORzsKKysJCWQyaV9BU04xX1ZJU0lCTEVTVFJJTkc7CisrCQlpMmRfQVNOMV9VVEY4U1RSSU5HOworKwkJZDJpX0FTTjFfVVRGOFNUUklORzsKKysJCWkyZF9ESVJFQ1RPUllTVFJJTkc7CisrCQlkMmlfRElSRUNUT1JZU1RSSU5HOworKwkJaTJkX0RJU1BMQVlURVhUOworKwkJZDJpX0RJU1BMQVlURVhUOworKwkJZDJpX0FTTjFfU0VUX09GX1g1MDk7CisrCQlpMmRfQVNOMV9TRVRfT0ZfWDUwOTsKKysJCWkyZF9QQktERjJQQVJBTTsKKysJCVBCS0RGMlBBUkFNX25ldzsKKysJCWQyaV9QQktERjJQQVJBTTsKKysJCVBCS0RGMlBBUkFNX2ZyZWU7CisrCQlpMmRfUEJFMlBBUkFNOworKwkJUEJFMlBBUkFNX25ldzsKKysJCWQyaV9QQkUyUEFSQU07CisrCQlQQkUyUEFSQU1fZnJlZTsKKysJCWQyaV9BU04xX1NFVF9PRl9HRU5FUkFMX05BTUU7CisrCQlpMmRfQVNOMV9TRVRfT0ZfR0VORVJBTF9OQU1FOworKwkJZDJpX0FTTjFfU0VUX09GX1NYTkVUSUQ7CisrCQlpMmRfQVNOMV9TRVRfT0ZfU1hORVRJRDsKKysJCWQyaV9BU04xX1NFVF9PRl9QT0xJQ1lRVUFMSU5GTzsKKysJCWkyZF9BU04xX1NFVF9PRl9QT0xJQ1lRVUFMSU5GTzsKKysJCWQyaV9BU04xX1NFVF9PRl9QT0xJQ1lJTkZPOworKwkJaTJkX0FTTjFfU0VUX09GX1BPTElDWUlORk87CisrCQlTWE5FVF9hZGRfaWRfYXNjOworKwkJU1hORVRfYWRkX2lkX3Vsb25nOworKwkJU1hORVRfYWRkX2lkX0lOVEVHRVI7CisrCQlTWE5FVF9nZXRfaWRfYXNjOworKwkJU1hORVRfZ2V0X2lkX3Vsb25nOworKwkJU1hORVRfZ2V0X2lkX0lOVEVHRVI7CisrCQlYNTA5VjNfc2V0X2NvbmZfbGhhc2g7CisrCQlpMmRfQ0VSVElGSUNBVEVQT0xJQ0lFUzsKKysJCUNFUlRJRklDQVRFUE9MSUNJRVNfbmV3OworKwkJQ0VSVElGSUNBVEVQT0xJQ0lFU19mcmVlOworKwkJZDJpX0NFUlRJRklDQVRFUE9MSUNJRVM7CisrCQlpMmRfUE9MSUNZSU5GTzsKKysJCVBPTElDWUlORk9fbmV3OworKwkJZDJpX1BPTElDWUlORk87CisrCQlQT0xJQ1lJTkZPX2ZyZWU7CisrCQlpMmRfUE9MSUNZUVVBTElORk87CisrCQlQT0xJQ1lRVUFMSU5GT19uZXc7CisrCQlkMmlfUE9MSUNZUVVBTElORk87CisrCQlQT0xJQ1lRVUFMSU5GT19mcmVlOworKwkJaTJkX1VTRVJOT1RJQ0U7CisrCQlVU0VSTk9USUNFX25ldzsKKysJCWQyaV9VU0VSTk9USUNFOworKwkJVVNFUk5PVElDRV9mcmVlOworKwkJaTJkX05PVElDRVJFRjsKKysJCU5PVElDRVJFRl9uZXc7CisrCQlkMmlfTk9USUNFUkVGOworKwkJTk9USUNFUkVGX2ZyZWU7CisrCQlYNTA5VjNfZ2V0X3N0cmluZzsKKysJCVg1MDlWM19nZXRfc2VjdGlvbjsKKysJCVg1MDlWM19zdHJpbmdfZnJlZTsKKysJCVg1MDlWM19zZWN0aW9uX2ZyZWU7CisrCQlYNTA5VjNfc2V0X2N0eDsKKysJCXMyaV9BU04xX0lOVEVHRVI7CisrCQlDUllQVE9fc2V0X2xvY2tlZF9tZW1fZnVuY3Rpb25zOworKwkJQ1JZUFRPX2dldF9sb2NrZWRfbWVtX2Z1bmN0aW9uczsKKysJCUNSWVBUT19tYWxsb2NfbG9ja2VkOworKwkJQ1JZUFRPX2ZyZWVfbG9ja2VkOworKwkJQk5fbW9kX2V4cDJfbW9udDsKKysJCUVSUl9nZXRfZXJyb3JfbGluZV9kYXRhOworKwkJRVJSX3BlZWtfZXJyb3JfbGluZV9kYXRhOworKwkJUEtDUzEyX1BCRV9rZXlpdmdlbjsKKysJCVg1MDlfQUxHT1JfZHVwOworKwkJZDJpX0FTTjFfU0VUX09GX0RJU1RfUE9JTlQ7CisrCQlpMmRfQVNOMV9TRVRfT0ZfRElTVF9QT0lOVDsKKysJCWkyZF9DUkxfRElTVF9QT0lOVFM7CisrCQlDUkxfRElTVF9QT0lOVFNfbmV3OworKwkJQ1JMX0RJU1RfUE9JTlRTX2ZyZWU7CisrCQlkMmlfQ1JMX0RJU1RfUE9JTlRTOworKwkJaTJkX0RJU1RfUE9JTlQ7CisrCQlESVNUX1BPSU5UX25ldzsKKysJCWQyaV9ESVNUX1BPSU5UOworKwkJRElTVF9QT0lOVF9mcmVlOworKwkJaTJkX0RJU1RfUE9JTlRfTkFNRTsKKysJCURJU1RfUE9JTlRfTkFNRV9uZXc7CisrCQlESVNUX1BPSU5UX05BTUVfZnJlZTsKKysJCWQyaV9ESVNUX1BPSU5UX05BTUU7CisrCQlYNTA5VjNfYWRkX3ZhbHVlX3VjaGFyOworKwkJZDJpX0FTTjFfU0VUX09GX1g1MDlfQVRUUklCVVRFOworKwkJaTJkX0FTTjFfU0VUX09GX0FTTjFfVFlQRTsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5X0VYVEVOU0lPTjsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5X05BTUVfRU5UUlk7CisrCQlkMmlfQVNOMV9TRVRfT0ZfQVNOMV9UWVBFOworKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfQVRUUklCVVRFOworKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfRVhURU5TSU9OOworKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfTkFNRV9FTlRSWTsKKysJCVg1MDlWM19FWFRfaTJkOworKwkJWDUwOVYzX0VYVF92YWxfcHJuOworKwkJWDUwOVYzX0VYVF9hZGRfbGlzdDsKKysJCUVWUF9DSVBIRVJfdHlwZTsKKysJCUVWUF9QQkVfQ2lwaGVySW5pdDsKKysJCVg1MDlWM19hZGRfdmFsdWVfYm9vbF9uZjsKKysJCWQyaV9BU04xX1VJTlRFR0VSOworKwkJc2tfdmFsdWU7CisrCQlza19udW07CisrCQlza19zZXQ7CisrCQlpMmRfQVNOMV9TRVRfT0ZfWDUwOV9SRVZPS0VEOworKwkJc2tfc29ydDsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5X1JFVk9LRUQ7CisrCQlpMmRfQVNOMV9TRVRfT0ZfWDUwOV9BTEdPUjsKKysJCWkyZF9BU04xX1NFVF9PRl9YNTA5X0NSTDsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5X0FMR09SOworKwkJZDJpX0FTTjFfU0VUX09GX1g1MDlfQ1JMOworKwkJaTJkX0FTTjFfU0VUX09GX1BLQ1M3X1NJR05FUl9JTkZPOworKwkJaTJkX0FTTjFfU0VUX09GX1BLQ1M3X1JFQ0lQX0lORk87CisrCQlkMmlfQVNOMV9TRVRfT0ZfUEtDUzdfU0lHTkVSX0lORk87CisrCQlkMmlfQVNOMV9TRVRfT0ZfUEtDUzdfUkVDSVBfSU5GTzsKKysJCVBLQ1M1X1BCRV9hZGQ7CisrCQlQRU1fd3JpdGVfYmlvX1BLQ1M4OworKwkJaTJkX1BLQ1M4X2ZwOworKwkJUEVNX3JlYWRfYmlvX1BLQ1M4X1BSSVZfS0VZX0lORk87CisrCQlQRU1fcmVhZF9iaW9fUDhfUFJJVl9LRVlfSU5GTzsKKysJCWQyaV9QS0NTOF9iaW87CisrCQlkMmlfUEtDUzhfUFJJVl9LRVlfSU5GT19mcDsKKysJCVBFTV93cml0ZV9iaW9fUEtDUzhfUFJJVl9LRVlfSU5GTzsKKysJCVBFTV93cml0ZV9iaW9fUDhfUFJJVl9LRVlfSU5GTzsKKysJCVBFTV9yZWFkX1BLQ1M4OworKwkJZDJpX1BLQ1M4X1BSSVZfS0VZX0lORk9fYmlvOworKwkJZDJpX1BLQ1M4X2ZwOworKwkJUEVNX3dyaXRlX1BLQ1M4OworKwkJUEVNX3JlYWRfUEtDUzhfUFJJVl9LRVlfSU5GTzsKKysJCVBFTV9yZWFkX1A4X1BSSVZfS0VZX0lORk87CisrCQlQRU1fcmVhZF9iaW9fUEtDUzg7CisrCQlQRU1fd3JpdGVfUEtDUzhfUFJJVl9LRVlfSU5GTzsKKysJCVBFTV93cml0ZV9QOF9QUklWX0tFWV9JTkZPOworKwkJUEtDUzVfUEJFX2tleWl2Z2VuOworKwkJaTJkX1BLQ1M4X2JpbzsKKysJCWkyZF9QS0NTOF9QUklWX0tFWV9JTkZPX2ZwOworKwkJaTJkX1BLQ1M4X1BSSVZfS0VZX0lORk9fYmlvOworKwkJQklPX3NfYmlvOworKwkJUEtDUzVfcGJlMl9zZXQ7CisrCQlQS0NTNV9QQktERjJfSE1BQ19TSEExOworKwkJUEtDUzVfdjJfUEJFX2tleWl2Z2VuOworKwkJUEVNX3dyaXRlX2Jpb19QS0NTOFByaXZhdGVLZXk7CisrCQlQRU1fd3JpdGVfUEtDUzhQcml2YXRlS2V5OworKwkJQklPX2N0cmxfZ2V0X3JlYWRfcmVxdWVzdDsKKysJCUJJT19jdHJsX3BlbmRpbmc7CisrCQlCSU9fY3RybF93cGVuZGluZzsKKysJCUJJT19uZXdfYmlvX3BhaXI7CisrCQlCSU9fY3RybF9nZXRfd3JpdGVfZ3VhcmFudGVlOworKwkJQ1JZUFRPX251bV9sb2NrczsKKysJCUNPTkZfbG9hZF9iaW87CisrCQlDT05GX2xvYWRfZnA7CisrCQlpMmRfQVNOMV9TRVRfT0ZfQVNOMV9PQkpFQ1Q7CisrCQlkMmlfQVNOMV9TRVRfT0ZfQVNOMV9PQkpFQ1Q7CisrCQlQS0NTN19zaWduYXR1cmVWZXJpZnk7CisrCQlSU0Ffc2V0X21ldGhvZDsKKysJCVJTQV9nZXRfbWV0aG9kOworKwkJUlNBX2dldF9kZWZhdWx0X21ldGhvZDsKKysJCVJTQV9jaGVja19rZXk7CisrCQlPQkpfb2JqMnR4dDsKKysJCURTQV9kdXBfREg7CisrCQlYNTA5X1JFUV9nZXRfZXh0ZW5zaW9uczsKKysJCVg1MDlfUkVRX3NldF9leHRlbnNpb25fbmlkczsKKysJCUJJT19ud3JpdGU7CisrCQlYNTA5X1JFUV9leHRlbnNpb25fbmlkOworKwkJQklPX25yZWFkOworKwkJWDUwOV9SRVFfZ2V0X2V4dGVuc2lvbl9uaWRzOworKwkJQklPX253cml0ZTA7CisrCQlYNTA5X1JFUV9hZGRfZXh0ZW5zaW9uc19uaWQ7CisrCQlCSU9fbnJlYWQwOworKwkJWDUwOV9SRVFfYWRkX2V4dGVuc2lvbnM7CisrCQlCSU9fbmV3X21lbV9idWY7CisrCQlESF9zZXRfZXhfZGF0YTsKKysJCURIX3NldF9tZXRob2Q7CisrCQlEU0FfT3BlblNTTDsKKysJCURIX2dldF9leF9kYXRhOworKwkJREhfZ2V0X2V4X25ld19pbmRleDsKKysJCURTQV9uZXdfbWV0aG9kOworKwkJREhfbmV3X21ldGhvZDsKKysJCURIX09wZW5TU0w7CisrCQlEU0FfZ2V0X2V4X25ld19pbmRleDsKKysJCURIX2dldF9kZWZhdWx0X21ldGhvZDsKKysJCURTQV9zZXRfZXhfZGF0YTsKKysJCURIX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCURTQV9nZXRfZXhfZGF0YTsKKysJCVg1MDlWM19FWFRfUkVRX2FkZF9jb25mOworKwkJTkVUU0NBUEVfU1BLSV9wcmludDsKKysJCU5FVFNDQVBFX1NQS0lfc2V0X3B1YmtleTsKKysJCU5FVFNDQVBFX1NQS0lfYjY0X2VuY29kZTsKKysJCU5FVFNDQVBFX1NQS0lfZ2V0X3B1YmtleTsKKysJCU5FVFNDQVBFX1NQS0lfYjY0X2RlY29kZTsKKysJCVVURjhfcHV0YzsKKysJCVVURjhfZ2V0YzsKKysJCVJTQV9udWxsX21ldGhvZDsKKysJCUFTTjFfdGFnMnN0cjsKKysJCUJJT19jdHJsX3Jlc2V0X3JlYWRfcmVxdWVzdDsKKysJCURJU1BMQVlURVhUX25ldzsKKysJCUFTTjFfR0VORVJBTElaRURUSU1FX2ZyZWU7CisrCQlYNTA5X1JFVk9LRURfZ2V0X2V4dF9kMmk7CisrCQlYNTA5X3NldF9leF9kYXRhOworKwkJWDUwOV9yZWplY3Rfc2V0X2JpdF9hc2M7CisrCQlYNTA5X05BTUVfYWRkX2VudHJ5X2J5X3R4dDsKKysJCVg1MDlfTkFNRV9hZGRfZW50cnlfYnlfTklEOworKwkJWDUwOV9QVVJQT1NFX2dldDA7CisrCQlQRU1fcmVhZF9YNTA5X0FVWDsKKysJCWQyaV9BVVRIT1JJVFlfSU5GT19BQ0NFU1M7CisrCQlQRU1fd3JpdGVfUFVCS0VZOworKwkJQUNDRVNTX0RFU0NSSVBUSU9OX25ldzsKKysJCVg1MDlfQ0VSVF9BVVhfZnJlZTsKKysJCWQyaV9BQ0NFU1NfREVTQ1JJUFRJT047CisrCQlYNTA5X3RydXN0X2NsZWFyOworKwkJWDUwOV9UUlVTVF9hZGQ7CisrCQlBU04xX1ZJU0lCTEVTVFJJTkdfbmV3OworKwkJWDUwOV9hbGlhc19zZXQxOworKwkJQVNOMV9QUklOVEFCTEVTVFJJTkdfZnJlZTsKKysJCUVWUF9QS0VZX2dldDFfRFNBOworKwkJQVNOMV9CTVBTVFJJTkdfbmV3OworKwkJQVNOMV9tYnN0cmluZ19jb3B5OworKwkJQVNOMV9VVEY4U1RSSU5HX25ldzsKKysJCURTQV9nZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlpMmRfQVNOMV9TRVRfT0ZfQUNDRVNTX0RFU0NSSVBUSU9OOworKwkJQVNOMV9UNjFTVFJJTkdfZnJlZTsKKysJCURTQV9zZXRfbWV0aG9kOworKwkJWDUwOV9nZXRfZXhfZGF0YTsKKysJCUFTTjFfU1RSSU5HX3R5cGU7CisrCQlYNTA5X1BVUlBPU0VfZ2V0X2J5X3NuYW1lOworKwkJQVNOMV9USU1FX2ZyZWU7CisrCQlBU04xX09DVEVUX1NUUklOR19jbXA7CisrCQlBU04xX0JJVF9TVFJJTkdfbmV3OworKwkJWDUwOV9nZXRfZXh0X2QyaTsKKysJCVBFTV9yZWFkX2Jpb19YNTA5X0FVWDsKKysJCUFTTjFfU1RSSU5HX3NldF9kZWZhdWx0X21hc2tfYXNjOworKwkJQVNOMV9TVFJJTkdfc2V0X2RlZl9tYXNrX2FzYzsKKysJCVBFTV93cml0ZV9iaW9fUlNBX1BVQktFWTsKKysJCUFTTjFfSU5URUdFUl9jbXA7CisrCQlkMmlfUlNBX1BVQktFWV9mcDsKKysJCVg1MDlfdHJ1c3Rfc2V0X2JpdF9hc2M7CisrCQlQRU1fd3JpdGVfYmlvX0RTQV9QVUJLRVk7CisrCQlYNTA5X1NUT1JFX0NUWF9mcmVlOworKwkJRVZQX1BLRVlfc2V0MV9EU0E7CisrCQlpMmRfRFNBX1BVQktFWV9mcDsKKysJCVg1MDlfbG9hZF9jZXJ0X2NybF9maWxlOworKwkJQVNOMV9USU1FX25ldzsKKysJCWkyZF9SU0FfUFVCS0VZOworKwkJWDUwOV9TVE9SRV9DVFhfcHVycG9zZV9pbmhlcml0OworKwkJUEVNX3JlYWRfUlNBX1BVQktFWTsKKysJCWQyaV9YNTA5X0FVWDsKKysJCWkyZF9EU0FfUFVCS0VZOworKwkJWDUwOV9DRVJUX0FVWF9wcmludDsKKysJCVBFTV9yZWFkX0RTQV9QVUJLRVk7CisrCQlpMmRfUlNBX1BVQktFWV9iaW87CisrCQlBU04xX0JJVF9TVFJJTkdfbnVtX2FzYzsKKysJCWkyZF9QVUJLRVk7CisrCQlBU04xX1VUQ1RJTUVfZnJlZTsKKysJCURTQV9zZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlYNTA5X1BVUlBPU0VfZ2V0X2J5X2lkOworKwkJQUNDRVNTX0RFU0NSSVBUSU9OX2ZyZWU7CisrCQlQRU1fcmVhZF9iaW9fUFVCS0VZOworKwkJQVNOMV9TVFJJTkdfc2V0X2J5X05JRDsKKysJCVg1MDlfUFVSUE9TRV9nZXRfaWQ7CisrCQlESVNQTEFZVEVYVF9mcmVlOworKwkJT1RIRVJOQU1FX25ldzsKKysJCVg1MDlfQ0VSVF9BVVhfbmV3OworKwkJWDUwOV9UUlVTVF9jbGVhbnVwOworKwkJWDUwOV9OQU1FX2FkZF9lbnRyeV9ieV9PQko7CisrCQlYNTA5X0NSTF9nZXRfZXh0X2QyaTsKKysJCVg1MDlfUFVSUE9TRV9nZXQwX25hbWU7CisrCQlQRU1fcmVhZF9QVUJLRVk7CisrCQlpMmRfRFNBX1BVQktFWV9iaW87CisrCQlpMmRfT1RIRVJOQU1FOworKwkJQVNOMV9PQ1RFVF9TVFJJTkdfZnJlZTsKKysJCUFTTjFfQklUX1NUUklOR19zZXRfYXNjOworKwkJWDUwOV9nZXRfZXhfbmV3X2luZGV4OworKwkJQVNOMV9TVFJJTkdfVEFCTEVfY2xlYW51cDsKKysJCVg1MDlfVFJVU1RfZ2V0X2J5X2lkOworKwkJWDUwOV9QVVJQT1NFX2dldF90cnVzdDsKKysJCUFTTjFfU1RSSU5HX2xlbmd0aDsKKysJCWQyaV9BU04xX1NFVF9PRl9BQ0NFU1NfREVTQ1JJUFRJT047CisrCQlBU04xX1BSSU5UQUJMRVNUUklOR19uZXc7CisrCQlYNTA5VjNfZ2V0X2QyaTsKKysJCUFTTjFfRU5VTUVSQVRFRF9mcmVlOworKwkJaTJkX1g1MDlfQ0VSVF9BVVg7CisrCQlYNTA5X1NUT1JFX0NUWF9zZXRfdHJ1c3Q7CisrCQlBU04xX1NUUklOR19zZXRfZGVmYXVsdF9tYXNrOworKwkJWDUwOV9TVE9SRV9DVFhfbmV3OworKwkJRVZQX1BLRVlfZ2V0MV9SU0E7CisrCQlESVJFQ1RPUllTVFJJTkdfZnJlZTsKKysJCVBFTV93cml0ZV9YNTA5X0FVWDsKKysJCUFTTjFfT0NURVRfU1RSSU5HX3NldDsKKysJCWQyaV9EU0FfUFVCS0VZX2ZwOworKwkJZDJpX1JTQV9QVUJLRVk7CisrCQlYNTA5X1RSVVNUX2dldDBfbmFtZTsKKysJCVg1MDlfVFJVU1RfZ2V0MDsKKysJCUFVVEhPUklUWV9JTkZPX0FDQ0VTU19mcmVlOworKwkJQVNOMV9JQTVTVFJJTkdfbmV3OworKwkJZDJpX0RTQV9QVUJLRVk7CisrCQlYNTA5X2NoZWNrX3B1cnBvc2U7CisrCQlBU04xX0VOVU1FUkFURURfbmV3OworKwkJZDJpX1JTQV9QVUJLRVlfYmlvOworKwkJZDJpX1BVQktFWTsKKysJCVg1MDlfVFJVU1RfZ2V0X3RydXN0OworKwkJWDUwOV9UUlVTVF9nZXRfZmxhZ3M7CisrCQlBU04xX0JNUFNUUklOR19mcmVlOworKwkJQVNOMV9UNjFTVFJJTkdfbmV3OworKwkJQVNOMV9VVENUSU1FX25ldzsKKysJCWkyZF9BVVRIT1JJVFlfSU5GT19BQ0NFU1M7CisrCQlFVlBfUEtFWV9zZXQxX1JTQTsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF9wdXJwb3NlOworKwkJQVNOMV9JQTVTVFJJTkdfZnJlZTsKKysJCVBFTV93cml0ZV9iaW9fWDUwOV9BVVg7CisrCQlYNTA5X1BVUlBPU0VfZ2V0X2NvdW50OworKwkJQ1JZUFRPX2FkZF9pbmZvOworKwkJWDUwOV9OQU1FX0VOVFJZX2NyZWF0ZV9ieV90eHQ7CisrCQlBU04xX1NUUklOR19nZXRfZGVmYXVsdF9tYXNrOworKwkJWDUwOV9hbGlhc19nZXQwOworKwkJQVNOMV9TVFJJTkdfZGF0YTsKKysJCWkyZF9BQ0NFU1NfREVTQ1JJUFRJT047CisrCQlYNTA5X3RydXN0X3NldF9iaXQ7CisrCQlBU04xX0JJVF9TVFJJTkdfZnJlZTsKKysJCVBFTV9yZWFkX2Jpb19SU0FfUFVCS0VZOworKwkJWDUwOV9hZGQxX3JlamVjdF9vYmplY3Q7CisrCQlYNTA5X2NoZWNrX3RydXN0OworKwkJUEVNX3JlYWRfYmlvX0RTQV9QVUJLRVk7CisrCQlYNTA5X1BVUlBPU0VfYWRkOworKwkJQVNOMV9TVFJJTkdfVEFCTEVfZ2V0OworKwkJQVNOMV9VVEY4U1RSSU5HX2ZyZWU7CisrCQlkMmlfRFNBX1BVQktFWV9iaW87CisrCQlQRU1fd3JpdGVfUlNBX1BVQktFWTsKKysJCWQyaV9PVEhFUk5BTUU7CisrCQlYNTA5X3JlamVjdF9zZXRfYml0OworKwkJUEVNX3dyaXRlX0RTQV9QVUJLRVk7CisrCQlYNTA5X1BVUlBPU0VfZ2V0MF9zbmFtZTsKKysJCUVWUF9QS0VZX3NldDFfREg7CisrCQlBU04xX09DVEVUX1NUUklOR19kdXA7CisrCQlBU04xX0JJVF9TVFJJTkdfc2V0OworKwkJWDUwOV9UUlVTVF9nZXRfY291bnQ7CisrCQlBU04xX0lOVEVHRVJfZnJlZTsKKysJCU9USEVSTkFNRV9mcmVlOworKwkJaTJkX1JTQV9QVUJLRVlfZnA7CisrCQlBU04xX0lOVEVHRVJfZHVwOworKwkJZDJpX1g1MDlfQ0VSVF9BVVg7CisrCQlQRU1fd3JpdGVfYmlvX1BVQktFWTsKKysJCUFTTjFfVklTSUJMRVNUUklOR19mcmVlOworKwkJWDUwOV9QVVJQT1NFX2NsZWFudXA7CisrCQlBU04xX21ic3RyaW5nX25jb3B5OworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfbmV3OworKwkJRVZQX1BLRVlfZ2V0MV9ESDsKKysJCUFTTjFfT0NURVRfU1RSSU5HX25ldzsKKysJCUFTTjFfSU5URUdFUl9uZXc7CisrCQlpMmRfWDUwOV9BVVg7CisrCQlBU04xX0JJVF9TVFJJTkdfbmFtZV9wcmludDsKKysJCVg1MDlfY21wOworKwkJQVNOMV9TVFJJTkdfbGVuZ3RoX3NldDsKKysJCURJUkVDVE9SWVNUUklOR19uZXc7CisrCQlYNTA5X2FkZDFfdHJ1c3Rfb2JqZWN0OworKwkJUEtDUzEyX25ld3Bhc3M7CisrCQlTTUlNRV93cml0ZV9QS0NTNzsKKysJCVNNSU1FX3JlYWRfUEtDUzc7CisrCQlERVNfc2V0X2tleV9jaGVja2VkOworKwkJUEtDUzdfdmVyaWZ5OworKwkJUEtDUzdfZW5jcnlwdDsKKysJCURFU19zZXRfa2V5X3VuY2hlY2tlZDsKKysJCVNNSU1FX2NybGZfY29weTsKKysJCWkyZF9BU04xX1BSSU5UQUJMRVNUUklORzsKKysJCVBLQ1M3X2dldDBfc2lnbmVyczsKKysJCVBLQ1M3X2RlY3J5cHQ7CisrCQlTTUlNRV90ZXh0OworKwkJUEtDUzdfc2ltcGxlX3NtaW1lY2FwOworKwkJUEtDUzdfZ2V0X3NtaW1lY2FwOworKwkJUEtDUzdfc2lnbjsKKysJCVBLQ1M3X2FkZF9hdHRyaWJfc21pbWVjYXA7CisrCQlDUllQVE9fZGJnX3NldF9vcHRpb25zOworKwkJQ1JZUFRPX3JlbW92ZV9hbGxfaW5mbzsKKysJCUNSWVBUT19nZXRfbWVtX2RlYnVnX2Z1bmN0aW9uczsKKysJCUNSWVBUT19pc19tZW1fY2hlY2tfb247CisrCQlDUllQVE9fc2V0X21lbV9kZWJ1Z19mdW5jdGlvbnM7CisrCQlDUllQVE9fcG9wX2luZm87CisrCQlDUllQVE9fcHVzaF9pbmZvXzsKKysJCUNSWVBUT19zZXRfbWVtX2RlYnVnX29wdGlvbnM7CisrCQlQRU1fd3JpdGVfUEtDUzhQcml2YXRlS2V5X25pZDsKKysJCVBFTV93cml0ZV9iaW9fUEtDUzhQcml2YXRlS2V5X25pZDsKKysJCVBFTV93cml0ZV9iaW9fUEtDUzhQcml2S2V5X25pZDsKKysJCWQyaV9QS0NTOFByaXZhdGVLZXlfYmlvOworKwkJQVNOMV9OVUxMX2ZyZWU7CisrCQlkMmlfQVNOMV9OVUxMOworKwkJQVNOMV9OVUxMX25ldzsKKysJCWkyZF9QS0NTOFByaXZhdGVLZXlfYmlvOworKwkJaTJkX1BLQ1M4UHJpdmF0ZUtleV9mcDsKKysJCWkyZF9BU04xX05VTEw7CisrCQlpMmRfUEtDUzhQcml2YXRlS2V5X25pZF9mcDsKKysJCWQyaV9QS0NTOFByaXZhdGVLZXlfZnA7CisrCQlpMmRfUEtDUzhQcml2YXRlS2V5X25pZF9iaW87CisrCQlpMmRfUEtDUzhQcml2YXRlS2V5SW5mb19mcDsKKysJCWkyZF9QS0NTOFByaXZhdGVLZXlJbmZvX2JpbzsKKysJCVBFTV9jYjsKKysJCWkyZF9Qcml2YXRlS2V5X2ZwOworKwkJZDJpX1ByaXZhdGVLZXlfYmlvOworKwkJZDJpX1ByaXZhdGVLZXlfZnA7CisrCQlpMmRfUHJpdmF0ZUtleV9iaW87CisrCQlYNTA5X3JlamVjdF9jbGVhcjsKKysJCVg1MDlfVFJVU1Rfc2V0X2RlZmF1bHQ7CisrCQlkMmlfQXV0b1ByaXZhdGVLZXk7CisrCQlYNTA5X0FUVFJJQlVURV9nZXQwX3R5cGU7CisrCQlYNTA5X0FUVFJJQlVURV9zZXQxX2RhdGE7CisrCQlYNTA5YXRfZ2V0X2F0dHI7CisrCQlYNTA5YXRfZ2V0X2F0dHJfY291bnQ7CisrCQlYNTA5X0FUVFJJQlVURV9jcmVhdGVfYnlfTklEOworKwkJWDUwOV9BVFRSSUJVVEVfc2V0MV9vYmplY3Q7CisrCQlYNTA5X0FUVFJJQlVURV9jb3VudDsKKysJCVg1MDlfQVRUUklCVVRFX2NyZWF0ZV9ieV9PQko7CisrCQlYNTA5X0FUVFJJQlVURV9nZXQwX29iamVjdDsKKysJCVg1MDlhdF9nZXRfYXR0cl9ieV9OSUQ7CisrCQlYNTA5YXRfYWRkMV9hdHRyOworKwkJWDUwOV9BVFRSSUJVVEVfZ2V0MF9kYXRhOworKwkJWDUwOWF0X2RlbGV0ZV9hdHRyOworKwkJWDUwOWF0X2dldF9hdHRyX2J5X09CSjsKKysJCVJBTkRfYWRkOworKwkJQklPX251bWJlcl93cml0dGVuOworKwkJQklPX251bWJlcl9yZWFkOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MV9jaGFpbjsKKysJCUVSUl9sb2FkX1JBTkRfc3RyaW5nczsKKysJCVJBTkRfcHNldWRvX2J5dGVzOworKwkJWDUwOV9SRVFfZ2V0X2F0dHJfYnlfTklEOworKwkJWDUwOV9SRVFfZ2V0X2F0dHI7CisrCQlYNTA5X1JFUV9hZGQxX2F0dHJfYnlfTklEOworKwkJWDUwOV9SRVFfZ2V0X2F0dHJfYnlfT0JKOworKwkJWDUwOWF0X2FkZDFfYXR0cl9ieV9OSUQ7CisrCQlYNTA5X1JFUV9hZGQxX2F0dHJfYnlfT0JKOworKwkJWDUwOV9SRVFfZ2V0X2F0dHJfY291bnQ7CisrCQlYNTA5X1JFUV9hZGQxX2F0dHI7CisrCQlYNTA5X1JFUV9kZWxldGVfYXR0cjsKKysJCVg1MDlhdF9hZGQxX2F0dHJfYnlfT0JKOworKwkJWDUwOV9SRVFfYWRkMV9hdHRyX2J5X3R4dDsKKysJCVg1MDlfQVRUUklCVVRFX2NyZWF0ZV9ieV90eHQ7CisrCQlYNTA5YXRfYWRkMV9hdHRyX2J5X3R4dDsKKysJCUJOX3BzZXVkb19yYW5kOworKwkJQk5faXNfcHJpbWVfZmFzdHRlc3Q7CisrCQlCTl9DVFhfZW5kOworKwkJQk5fQ1RYX3N0YXJ0OworKwkJQk5fQ1RYX2dldDsKKysJCUVWUF9QS0VZMlBLQ1M4X2Jyb2tlbjsKKysJCUFTTjFfU1RSSU5HX1RBQkxFX2FkZDsKKysJCUNSWVBUT19kYmdfZ2V0X29wdGlvbnM7CisrCQlBVVRIT1JJVFlfSU5GT19BQ0NFU1NfbmV3OworKwkJQ1JZUFRPX2dldF9tZW1fZGVidWdfb3B0aW9uczsKKysJCURFU19jcnlwdDsKKysJCVBFTV93cml0ZV9iaW9fWDUwOV9SRVFfTkVXOworKwkJUEVNX3dyaXRlX1g1MDlfUkVRX05FVzsKKysJCUJJT19jYWxsYmFja19jdHJsOworKwkJUkFORF9lZ2Q7CisrCQlSQU5EX3N0YXR1czsKKysJCWJuX2R1bXAxOworKwkJREVTX2NoZWNrX2tleV9wYXJpdHk7CisrCQlsaF9udW1faXRlbXM7CisrCQlSQU5EX2V2ZW50OworKwkJRFNPX25ldzsKKysJCURTT19uZXdfbWV0aG9kOworKwkJRFNPX2ZyZWU7CisrCQlEU09fZmxhZ3M7CisrCQlEU09fdXA7CisrCQlEU09fc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJRFNPX2dldF9kZWZhdWx0X21ldGhvZDsKKysJCURTT19nZXRfbWV0aG9kOworKwkJRFNPX3NldF9tZXRob2Q7CisrCQlEU09fbG9hZDsKKysJCURTT19iaW5kX3ZhcjsKKysJCURTT19NRVRIT0RfbnVsbDsKKysJCURTT19NRVRIT0Rfb3BlbnNzbDsKKysJCURTT19NRVRIT0RfZGxmY247CisrCQlEU09fTUVUSE9EX3dpbjMyOworKwkJRVJSX2xvYWRfRFNPX3N0cmluZ3M7CisrCQlEU09fTUVUSE9EX2RsOworKwkJTkNPTkZfbG9hZDsKKysJCU5DT05GX2xvYWRfZnA7CisrCQlOQ09ORl9uZXc7CisrCQlOQ09ORl9nZXRfc3RyaW5nOworKwkJTkNPTkZfZnJlZTsKKysJCU5DT05GX2dldF9udW1iZXI7CisrCQlDT05GX2R1bXBfZnA7CisrCQlOQ09ORl9sb2FkX2JpbzsKKysJCU5DT05GX2R1bXBfZnA7CisrCQlOQ09ORl9nZXRfc2VjdGlvbjsKKysJCU5DT05GX2R1bXBfYmlvOworKwkJQ09ORl9kdW1wX2JpbzsKKysJCU5DT05GX2ZyZWVfZGF0YTsKKysJCUNPTkZfc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJRVJSX2Vycm9yX3N0cmluZ19uOworKwkJQklPX3NucHJpbnRmOworKwkJRFNPX2N0cmw7CisrCQlpMmRfQVNOMV9TRVRfT0ZfQVNOMV9JTlRFR0VSOworKwkJaTJkX0FTTjFfU0VUX09GX1BLQ1MxMl9TQUZFQkFHOworKwkJaTJkX0FTTjFfU0VUX09GX1BLQ1M3OworKwkJQklPX3ZmcmVlOworKwkJZDJpX0FTTjFfU0VUX09GX0FTTjFfSU5URUdFUjsKKysJCWQyaV9BU04xX1NFVF9PRl9QS0NTMTJfU0FGRUJBRzsKKysJCUFTTjFfVVRDVElNRV9nZXQ7CisrCQlYNTA5X1JFUV9kaWdlc3Q7CisrCQlYNTA5X0NSTF9kaWdlc3Q7CisrCQlkMmlfQVNOMV9TRVRfT0ZfUEtDUzc7CisrCQlFVlBfQ0lQSEVSX0NUWF9zZXRfa2V5X2xlbmd0aDsKKysJCUVWUF9DSVBIRVJfQ1RYX2N0cmw7CisrCQlCTl9tb2RfZXhwX21vbnRfd29yZDsKKysJCVJBTkRfZWdkX2J5dGVzOworKwkJWDUwOV9SRVFfZ2V0MV9lbWFpbDsKKysJCVg1MDlfZ2V0MV9lbWFpbDsKKysJCVg1MDlfZW1haWxfZnJlZTsKKysJCWkyZF9SU0FfTkVUOworKwkJZDJpX1JTQV9ORVRfMjsKKysJCWQyaV9SU0FfTkVUOworKwkJRFNPX2JpbmRfZnVuYzsKKysJCUNSWVBUT19nZXRfbmV3X2R5bmxvY2tpZDsKKysJCXNrX25ld19udWxsOworKwkJQ1JZUFRPX3NldF9keW5sb2NrX2Rlc3Ryb3lfY2FsbGJhY2s7CisrCQlDUllQVE9fc2V0X2R5bmxvY2tfZGVzdHJveV9jYjsKKysJCUNSWVBUT19kZXN0cm95X2R5bmxvY2tpZDsKKysJCUNSWVBUT19zZXRfZHlubG9ja19zaXplOworKwkJQ1JZUFRPX3NldF9keW5sb2NrX2NyZWF0ZV9jYWxsYmFjazsKKysJCUNSWVBUT19zZXRfZHlubG9ja19jcmVhdGVfY2I7CisrCQlDUllQVE9fc2V0X2R5bmxvY2tfbG9ja19jYWxsYmFjazsKKysJCUNSWVBUT19zZXRfZHlubG9ja19sb2NrX2NiOworKwkJQ1JZUFRPX2dldF9keW5sb2NrX2xvY2tfY2FsbGJhY2s7CisrCQlDUllQVE9fZ2V0X2R5bmxvY2tfbG9ja19jYjsKKysJCUNSWVBUT19nZXRfZHlubG9ja19kZXN0cm95X2NhbGxiYWNrOworKwkJQ1JZUFRPX2dldF9keW5sb2NrX2Rlc3Ryb3lfY2I7CisrCQlDUllQVE9fZ2V0X2R5bmxvY2tfdmFsdWU7CisrCQlDUllQVE9fZ2V0X2R5bmxvY2tfY3JlYXRlX2NhbGxiYWNrOworKwkJQ1JZUFRPX2dldF9keW5sb2NrX2NyZWF0ZV9jYjsKKysJCWMyaV9BU04xX0JJVF9TVFJJTkc7CisrCQlpMmNfQVNOMV9CSVRfU1RSSU5HOworKwkJUkFORF9wb2xsOworKwkJYzJpX0FTTjFfSU5URUdFUjsKKysJCWkyY19BU04xX0lOVEVHRVI7CisrCQlCSU9fZHVtcF9pbmRlbnQ7CisrCQlBU04xX3BhcnNlX2R1bXA7CisrCQljMmlfQVNOMV9PQkpFQ1Q7CisrCQlYNTA5X05BTUVfcHJpbnRfZXhfZnA7CisrCQlBU04xX1NUUklOR19wcmludF9leF9mcDsKKysJCVg1MDlfTkFNRV9wcmludF9leDsKKysJCUFTTjFfU1RSSU5HX3ByaW50X2V4OworKwkJTUQ0OworKwkJTUQ0X1RyYW5zZm9ybTsKKysJCU1ENF9GaW5hbDsKKysJCU1ENF9VcGRhdGU7CisrCQlNRDRfSW5pdDsKKysJCUVWUF9tZDQ7CisrCQlpMmRfUFVCS0VZX2JpbzsKKysJCWkyZF9QVUJLRVlfZnA7CisrCQlkMmlfUFVCS0VZX2JpbzsKKysJCUFTTjFfU1RSSU5HX3RvX1VURjg7CisrCQlCSU9fdnByaW50ZjsKKysJCUJJT192c25wcmludGY7CisrCQlkMmlfUFVCS0VZX2ZwOworKwkJWDUwOV9jbXBfdGltZTsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF90aW1lOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MV9pc3N1ZXI7CisrCQlYNTA5X09CSkVDVF9yZXRyaWV2ZV9tYXRjaDsKKysJCVg1MDlfT0JKRUNUX2lkeF9ieV9zdWJqZWN0OworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2ZsYWdzOworKwkJWDUwOV9TVE9SRV9DVFhfdHJ1c3RlZF9zdGFjazsKKysJCVg1MDlfdGltZV9hZGo7CisrCQlYNTA5X2NoZWNrX2lzc3VlZDsKKysJCUFTTjFfVVRDVElNRV9jbXBfdGltZV90OworKwkJREVTX3NldF93ZWFrX2tleV9mbGFnOworKwkJREVTX2NoZWNrX2tleTsKKysJCURFU19yd19tb2RlOworKwkJUlNBX1BLQ1MxX1JTQXJlZjsKKysJCVg1MDlfa2V5aWRfc2V0MTsKKysJCUJJT19uZXh0OworKwkJRFNPX01FVEhPRF92bXM7CisrCQlCSU9fZl9saW5lYnVmZmVyOworKwkJQk5fYm50ZXN0X3JhbmQ7CisrCQlPUEVOU1NMX2lzc2V0dWdpZDsKKysJCUJOX3JhbmRfcmFuZ2U7CisrCQlFUlJfbG9hZF9FTkdJTkVfc3RyaW5nczsKKysJCUVOR0lORV9zZXRfRFNBOworKwkJRU5HSU5FX2dldF9maW5pc2hfZnVuY3Rpb247CisrCQlFTkdJTkVfZ2V0X2RlZmF1bHRfUlNBOworKwkJRU5HSU5FX2dldF9CTl9tb2RfZXhwOworKwkJRFNBX2dldF9kZWZhdWx0X29wZW5zc2xfbWV0aG9kOworKwkJRU5HSU5FX3NldF9ESDsKKysJCUVOR0lORV9zZXRfZGVmX0JOX21vZF9leHBfY3J0OworKwkJRU5HSU5FX3NldF9kZWZhdWx0X0JOX21vZF9leHBfY3J0OworKwkJRU5HSU5FX2luaXQ7CisrCQlESF9nZXRfZGVmYXVsdF9vcGVuc3NsX21ldGhvZDsKKysJCVJTQV9zZXRfZGVmYXVsdF9vcGVuc3NsX21ldGhvZDsKKysJCUVOR0lORV9maW5pc2g7CisrCQlFTkdJTkVfbG9hZF9wdWJsaWNfa2V5OworKwkJRU5HSU5FX2dldF9ESDsKKysJCUVOR0lORV9jdHJsOworKwkJRU5HSU5FX2dldF9pbml0X2Z1bmN0aW9uOworKwkJRU5HSU5FX3NldF9pbml0X2Z1bmN0aW9uOworKwkJRU5HSU5FX3NldF9kZWZhdWx0X0RTQTsKKysJCUVOR0lORV9nZXRfbmFtZTsKKysJCUVOR0lORV9nZXRfbGFzdDsKKysJCUVOR0lORV9nZXRfcHJldjsKKysJCUVOR0lORV9nZXRfZGVmYXVsdF9ESDsKKysJCUVOR0lORV9nZXRfUlNBOworKwkJRU5HSU5FX3NldF9kZWZhdWx0OworKwkJRU5HSU5FX2dldF9SQU5EOworKwkJRU5HSU5FX2dldF9maXJzdDsKKysJCUVOR0lORV9ieV9pZDsKKysJCUVOR0lORV9zZXRfZmluaXNoX2Z1bmN0aW9uOworKwkJRU5HSU5FX2dldF9kZWZfQk5fbW9kX2V4cF9jcnQ7CisrCQlFTkdJTkVfZ2V0X2RlZmF1bHRfQk5fbW9kX2V4cF9jcnQ7CisrCQlSU0FfZ2V0X2RlZmF1bHRfb3BlbnNzbF9tZXRob2Q7CisrCQlFTkdJTkVfc2V0X1JTQTsKKysJCUVOR0lORV9sb2FkX3ByaXZhdGVfa2V5OworKwkJRU5HSU5FX3NldF9kZWZhdWx0X1JBTkQ7CisrCQlFTkdJTkVfc2V0X0JOX21vZF9leHA7CisrCQlFTkdJTkVfcmVtb3ZlOworKwkJRU5HSU5FX2ZyZWU7CisrCQlFTkdJTkVfZ2V0X0JOX21vZF9leHBfY3J0OworKwkJRU5HSU5FX2dldF9uZXh0OworKwkJRU5HSU5FX3NldF9uYW1lOworKwkJRU5HSU5FX2dldF9kZWZhdWx0X0RTQTsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9CTl9tb2RfZXhwOworKwkJRU5HSU5FX3NldF9kZWZhdWx0X1JTQTsKKysJCUVOR0lORV9nZXRfZGVmYXVsdF9SQU5EOworKwkJRU5HSU5FX2dldF9kZWZhdWx0X0JOX21vZF9leHA7CisrCQlFTkdJTkVfc2V0X1JBTkQ7CisrCQlFTkdJTkVfc2V0X2lkOworKwkJRU5HSU5FX3NldF9CTl9tb2RfZXhwX2NydDsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9ESDsKKysJCUVOR0lORV9uZXc7CisrCQlFTkdJTkVfZ2V0X2lkOworKwkJRFNBX3NldF9kZWZhdWx0X29wZW5zc2xfbWV0aG9kOworKwkJRU5HSU5FX2FkZDsKKysJCURIX3NldF9kZWZhdWx0X29wZW5zc2xfbWV0aG9kOworKwkJRU5HSU5FX2dldF9EU0E7CisrCQlFTkdJTkVfZ2V0X2N0cmxfZnVuY3Rpb247CisrCQlFTkdJTkVfc2V0X2N0cmxfZnVuY3Rpb247CisrCQlCTl9wc2V1ZG9fcmFuZF9yYW5nZTsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF92ZXJpZnlfY2I7CisrCQlFUlJfbG9hZF9DT01QX3N0cmluZ3M7CisrCQlQS0NTMTJfaXRlbV9kZWNyeXB0X2QyaTsKKysJCUFTTjFfVVRGOFNUUklOR19pdDsKKysJCUVOR0lORV91bnJlZ2lzdGVyX2NpcGhlcnM7CisrCQlFTkdJTkVfZ2V0X2NpcGhlcnM7CisrCQlkMmlfT0NTUF9CQVNJQ1JFU1A7CisrCQlLUkI1X0NIRUNLU1VNX2l0OworKwkJRUNfUE9JTlRfYWRkOworKwkJQVNOMV9pdGVtX2V4X2kyZDsKKysJCU9DU1BfQ0VSVElEX2l0OworKwkJZDJpX09DU1BfUkVTUEJZVEVTOworKwkJWDUwOVYzX2FkZDFfaTJkOworKwkJUEtDUzdfRU5WRUxPUEVfaXQ7CisrCQlVSV9hZGRfaW5wdXRfYm9vbGVhbjsKKysJCUVOR0lORV91bnJlZ2lzdGVyX1JTQTsKKysJCVg1MDlWM19FWFRfbmNvbmY7CisrCQlBU04xX0dFTkVSQUxTVFJJTkdfZnJlZTsKKysJCWQyaV9PQ1NQX0NFUlRTVEFUVVM7CisrCQlYNTA5X1JFVk9LRURfc2V0X3NlcmlhbE51bWJlcjsKKysJCVg1MDlfcHJpbnRfZXg7CisrCQlPQ1NQX09ORVJFUV9nZXQxX2V4dF9kMmk7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX1JBTkQ7CisrCQlFTkdJTkVfbG9hZF9keW5hbWljOworKwkJUEJLREYyUEFSQU1faXQ7CisrCQlFWFRFTkRFRF9LRVlfVVNBR0VfbmV3OworKwkJRUNfR1JPVVBfY2xlYXJfZnJlZTsKKysJCU9DU1Bfc2VuZHJlcV9iaW87CisrCQlBU04xX2l0ZW1fZGlnZXN0OworKwkJT0NTUF9CQVNJQ1JFU1BfZGVsZXRlX2V4dDsKKysJCU9DU1BfU0lHTkFUVVJFX2l0OworKwkJWDUwOV9DUkxfaXQ7CisrCQlPQ1NQX0JBU0lDUkVTUF9hZGRfZXh0OworKwkJS1JCNV9FTkNLRVlfaXQ7CisrCQlVSV9tZXRob2Rfc2V0X2Nsb3NlcjsKKysJCVg1MDlfU1RPUkVfc2V0X3B1cnBvc2U7CisrCQlpMmRfQVNOMV9HRU5FUkFMU1RSSU5HOworKwkJT0NTUF9yZXNwb25zZV9zdGF0dXM7CisrCQlpMmRfT0NTUF9TRVJWSUNFTE9DOworKwkJRU5HSU5FX2dldF9kaWdlc3RfZW5naW5lOworKwkJRUNfR1JPVVBfc2V0X2N1cnZlX0dGcDsKKysJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2J5X09CSjsKKysJCV9vc3NsX29sZF9kZXNfcmFuZG9tX2tleTsKKysJCUFTTjFfVDYxU1RSSU5HX2l0OworKwkJRUNfR1JPVVBfbWV0aG9kX29mOworKwkJaTJkX0tSQjVfQVBSRVE7CisrCQlfb3NzbF9vbGRfZGVzX2VuY3J5cHQ7CisrCQlBU04xX1BSSU5UQUJMRV9uZXc7CisrCQlITUFDX0luaXRfZXg7CisrCQlkMmlfS1JCNV9BVVRIRU5UOworKwkJT0NTUF9hcmNoaXZlX2N1dG9mZl9uZXc7CisrCQlFQ19QT0lOVF9zZXRfSnByb2plY3RpdmVfY29vcmRpbmF0ZXNfR0ZwOworKwkJRUNfUE9JTlRfc2V0X0pwcm9qX2Nvb3Jkc19HRnA7CisrCQlfb3NzbF9vbGRfZGVzX2lzX3dlYWtfa2V5OworKwkJT0NTUF9CQVNJQ1JFU1BfZ2V0X2V4dF9ieV9PQko7CisrCQlFQ19QT0lOVF9vY3QycG9pbnQ7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZ2V0X2V4dF9jb3VudDsKKysJCVVJX2N0cmw7CisrCQlfc2hhZG93X0RFU19yd19tb2RlOworKwkJYXNuMV9kb19hZGI7CisrCQlBU04xX3RlbXBsYXRlX2kyZDsKKysJCUVOR0lORV9yZWdpc3Rlcl9ESDsKKysJCVVJX2NvbnN0cnVjdF9wcm9tcHQ7CisrCQlYNTA5X1NUT1JFX3NldF90cnVzdDsKKysJCVVJX2R1cF9pbnB1dF9zdHJpbmc7CisrCQlkMmlfS1JCNV9BUFJFUTsKKysJCUVWUF9NRF9DVFhfY29weV9leDsKKysJCU9DU1BfcmVxdWVzdF9pc19zaWduZWQ7CisrCQlpMmRfT0NTUF9SRVFJTkZPOworKwkJS1JCNV9FTkNLRVlfZnJlZTsKKysJCU9DU1BfcmVzcF9nZXQwOworKwkJR0VORVJBTF9OQU1FX2l0OworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfaXQ7CisrCQlYNTA5X1NUT1JFX3NldF9mbGFnczsKKysJCUVDX1BPSU5UX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzX0dGcDsKKysJCUVDX1BPSU5UX3NldF9jb21wcl9jb29yZHNfR0ZwOworKwkJT0NTUF9yZXNwb25zZV9zdGF0dXNfc3RyOworKwkJZDJpX09DU1BfUkVWT0tFRElORk87CisrCQlPQ1NQX2Jhc2ljX2FkZDFfY2VydDsKKysJCUVSUl9nZXRfaW1wbGVtZW50YXRpb247CisrCQlFVlBfQ2lwaGVyRmluYWxfZXg7CisrCQlPQ1NQX0NFUlRTVEFUVVNfbmV3OworKwkJQ1JZUFRPX2NsZWFudXBfYWxsX2V4X2RhdGE7CisrCQlPQ1NQX3Jlc3BfZmluZDsKKysJCUJOX25ubW9kOworKwkJWDUwOV9DUkxfc29ydDsKKysJCVg1MDlfUkVWT0tFRF9zZXRfcmV2b2NhdGlvbkRhdGU7CisrCQlFTkdJTkVfcmVnaXN0ZXJfUkFORDsKKysJCU9DU1BfU0VSVklDRUxPQ19uZXc7CisrCQlFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGcDsKKysJCUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRzX0dGcDsKKysJCV9vc3NsX29sZF9kZXNfb3B0aW9uczsKKysJCVNYTkVUX2l0OworKwkJVUlfZHVwX2lucHV0X2Jvb2xlYW47CisrCQlQS0NTMTJfYWRkX0NTUE5hbWVfYXNjOworKwkJRUNfUE9JTlRfaXNfYXRfaW5maW5pdHk7CisrCQlFTkdJTkVfbG9hZF9jcnlwdG9kZXY7CisrCQlEU09fY29udmVydF9maWxlbmFtZTsKKysJCVBPTElDWVFVQUxJTkZPX2l0OworKwkJRU5HSU5FX3JlZ2lzdGVyX2NpcGhlcnM7CisrCQlCTl9tb2RfbHNoaWZ0X3F1aWNrOworKwkJRFNPX3NldF9maWxlbmFtZTsKKysJCUFTTjFfaXRlbV9mcmVlOworKwkJS1JCNV9US1RCT0RZX2ZyZWU7CisrCQlBVVRIT1JJVFlfS0VZSURfaXQ7CisrCQlLUkI1X0FQUkVRQk9EWV9uZXc7CisrCQlYNTA5VjNfRVhUX1JFUV9hZGRfbmNvbmY7CisrCQlFTkdJTkVfY3RybF9jbWRfc3RyaW5nOworKwkJaTJkX09DU1BfUkVTUERBVEE7CisrCQlFVlBfTURfQ1RYX2luaXQ7CisrCQlFWFRFTkRFRF9LRVlfVVNBR0VfZnJlZTsKKysJCVBLQ1M3X0FUVFJfU0lHTl9pdDsKKysJCVVJX2FkZF9lcnJvcl9zdHJpbmc7CisrCQlLUkI1X0NIRUNLU1VNX2ZyZWU7CisrCQlPQ1NQX1JFUVVFU1RfZ2V0X2V4dDsKKysJCUVOR0lORV9sb2FkX3Vic2VjOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9kaWdlc3RzOworKwkJUEtFWV9VU0FHRV9QRVJJT0RfaXQ7CisrCQlQS0NTMTJfdW5wYWNrX2F1dGhzYWZlczsKKysJCUFTTjFfaXRlbV91bnBhY2s7CisrCQlORVRTQ0FQRV9TUEtBQ19pdDsKKysJCVg1MDlfUkVWT0tFRF9pdDsKKysJCUFTTjFfU1RSSU5HX2VuY29kZTsKKysJCUVWUF9hZXNfMTI4X2VjYjsKKysJCUtSQjVfQVVUSEVOVF9mcmVlOworKwkJT0NTUF9CQVNJQ1JFU1BfZ2V0X2V4dF9ieV9jcml0aWNhbDsKKysJCU9DU1BfQkFTSUNSRVNQX2dldF9leHRfYnlfY3JpdDsKKysJCU9DU1BfY2VydF9zdGF0dXNfc3RyOworKwkJZDJpX09DU1BfUkVRVUVTVDsKKysJCVVJX2R1cF9pbmZvX3N0cmluZzsKKysJCV9vc3NsX29sZF9kZXNfeHdoaXRlX2luMm91dDsKKysJCVBLQ1MxMl9pdDsKKysJCU9DU1BfU0lOR0xFUkVTUF9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHRfYnlfY3JpdDsKKysJCU9DU1BfQ0VSVFNUQVRVU19mcmVlOworKwkJX29zc2xfb2xkX2Rlc19jcnlwdDsKKysJCUFTTjFfaXRlbV9pMmQ7CisrCQlFVlBfRGVjcnlwdEZpbmFsX2V4OworKwkJRU5HSU5FX2xvYWRfb3BlbnNzbDsKKysJCUVOR0lORV9nZXRfY21kX2RlZm5zOworKwkJRU5HSU5FX3NldF9sb2FkX3ByaXZrZXlfZnVuY3Rpb247CisrCQlFTkdJTkVfc2V0X2xvYWRfcHJpdmtleV9mbjsKKysJCUVWUF9FbmNyeXB0RmluYWxfZXg7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfZGlnZXN0czsKKysJCVg1MDlfZ2V0MF9wdWJrZXlfYml0c3RyOworKwkJYXNuMV9leF9pMmM7CisrCQlFTkdJTkVfcmVnaXN0ZXJfUlNBOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfRFNBOworKwkJX29zc2xfb2xkX2Rlc19rZXlfc2NoZWQ7CisrCQlYNTA5X0VYVEVOU0lPTl9pdDsKKysJCWkyZF9LUkI1X0FVVEhFTlQ7CisrCQlTWE5FVElEX2l0OworKwkJZDJpX09DU1BfU0lOR0xFUkVTUDsKKysJCUVESVBBUlRZTkFNRV9uZXc7CisrCQlQS0NTMTJfY2VydGJhZzJ4NTA5OworKwkJX29zc2xfb2xkX2Rlc19vZmI2NF9lbmNyeXB0OworKwkJZDJpX0VYVEVOREVEX0tFWV9VU0FHRTsKKysJCUVSUl9wcmludF9lcnJvcnNfY2I7CisrCQlFTkdJTkVfc2V0X2NpcGhlcnM7CisrCQlkMmlfS1JCNV9BUFJFUUJPRFk7CisrCQlVSV9tZXRob2RfZ2V0X2ZsdXNoZXI7CisrCQlYNTA5X1BVQktFWV9pdDsKKysJCV9vc3NsX29sZF9kZXNfZW5jX3JlYWQ7CisrCQlQS0NTN19FTkNSWVBUX2l0OworKwkJaTJkX09DU1BfUkVTUE9OU0U7CisrCQlFQ19HUk9VUF9nZXRfY29mYWN0b3I7CisrCQlQS0NTMTJfdW5wYWNrX3A3ZGF0YTsKKysJCWQyaV9LUkI1X0FVVEhEQVRBOworKwkJT0NTUF9jb3B5X25vbmNlOworKwkJS1JCNV9BVVRIREFUQV9uZXc7CisrCQlPQ1NQX1JFU1BEQVRBX25ldzsKKysJCUVDX0dGcF9tb250X21ldGhvZDsKKysJCU9DU1BfUkVWT0tFRElORk9fZnJlZTsKKysJCVVJX2dldF9leF9kYXRhOworKwkJS1JCNV9BUFJFUUJPRFlfZnJlZTsKKysJCUVDX0dST1VQX2dldDBfZ2VuZXJhdG9yOworKwkJVUlfZ2V0X2RlZmF1bHRfbWV0aG9kOworKwkJWDUwOVYzX3NldF9uY29uZjsKKysJCVBLQ1MxMl9pdGVtX2kyZF9lbmNyeXB0OworKwkJWDUwOV9hZGQxX2V4dF9pMmQ7CisrCQlQS0NTN19TSUdORVJfSU5GT19pdDsKKysJCUtSQjVfUFJJTkNOQU1FX25ldzsKKysJCVBLQ1MxMl9TQUZFQkFHX2l0OworKwkJRUNfR1JPVVBfZ2V0X29yZGVyOworKwkJZDJpX09DU1BfUkVTUElEOworKwkJT0NTUF9yZXF1ZXN0X3ZlcmlmeTsKKysJCU5DT05GX2dldF9udW1iZXJfZTsKKysJCV9vc3NsX29sZF9kZXNfZGVjcnlwdDM7CisrCQlYNTA5X3NpZ25hdHVyZV9wcmludDsKKysJCU9DU1BfU0lOR0xFUkVTUF9mcmVlOworKwkJRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzOworKwkJaTJkX09DU1BfT05FUkVROworKwkJT0NTUF9SRVFVRVNUX2FkZF9leHQ7CisrCQlPQ1NQX1JFU1BCWVRFU19uZXc7CisrCQlFVlBfTURfQ1RYX2NyZWF0ZTsKKysJCU9DU1BfcmVzcF9maW5kX3N0YXR1czsKKysJCVg1MDlfQUxHT1JfaXQ7CisrCQlBU04xX1RJTUVfaXQ7CisrCQlPQ1NQX3JlcXVlc3Rfc2V0MV9uYW1lOworKwkJT0NTUF9PTkVSRVFfZ2V0X2V4dF9jb3VudDsKKysJCVVJX2dldDBfcmVzdWx0OworKwkJUEtDUzEyX0FVVEhTQUZFU19pdDsKKysJCUVWUF9hZXNfMjU2X2VjYjsKKysJCVBLQ1MxMl9wYWNrX2F1dGhzYWZlczsKKysJCUFTTjFfSUE1U1RSSU5HX2l0OworKwkJVUlfZ2V0X2lucHV0X2ZsYWdzOworKwkJRUNfR1JPVVBfc2V0X2dlbmVyYXRvcjsKKysJCV9vc3NsX29sZF9kZXNfc3RyaW5nX3RvXzJrZXlzOworKwkJT0NTUF9DRVJUSURfZnJlZTsKKysJCVg1MDlfQ0VSVF9BVVhfaXQ7CisrCQlDRVJUSUZJQ0FURVBPTElDSUVTX2l0OworKwkJX29zc2xfb2xkX2Rlc19lZGUzX2NiY19lbmNyeXB0OworKwkJUkFORF9zZXRfcmFuZF9lbmdpbmU7CisrCQlEU09fZ2V0X2xvYWRlZF9maWxlbmFtZTsKKysJCVg1MDlfQVRUUklCVVRFX2l0OworKwkJT0NTUF9PTkVSRVFfZ2V0X2V4dF9ieV9OSUQ7CisrCQlQS0NTMTJfZGVjcnlwdF9za2V5OworKwkJS1JCNV9BVVRIRU5UX2l0OworKwkJVUlfZHVwX2Vycm9yX3N0cmluZzsKKysJCVJTQVB1YmxpY0tleV9pdDsKKysJCWkyZF9PQ1NQX1JFUVVFU1Q7CisrCQlQS0NTMTJfeDUwOWNybDJjZXJ0YmFnOworKwkJT0NTUF9TRVJWSUNFTE9DX2l0OworKwkJQVNOMV9pdGVtX3NpZ247CisrCQlYNTA5X0NSTF9zZXRfaXNzdWVyX25hbWU7CisrCQlPQkpfTkFNRV9kb19hbGxfc29ydGVkOworKwkJaTJkX09DU1BfQkFTSUNSRVNQOworKwkJaTJkX09DU1BfUkVTUEJZVEVTOworKwkJUEtDUzEyX3VucGFja19wN2VuY2RhdGE7CisrCQlITUFDX0NUWF9pbml0OworKwkJRU5HSU5FX2dldF9kaWdlc3Q7CisrCQlPQ1NQX1JFU1BPTlNFX3ByaW50OworKwkJS1JCNV9US1RCT0RZX2l0OworKwkJQUNDRVNTX0RFU0NSSVBUSU9OX2l0OworKwkJUEtDUzdfSVNTVUVSX0FORF9TRVJJQUxfaXQ7CisrCQlQQkUyUEFSQU1faXQ7CisrCQlQS0NTMTJfY2VydGJhZzJ4NTA5Y3JsOworKwkJUEtDUzdfU0lHTkVEX2l0OworKwkJRU5HSU5FX2dldF9jaXBoZXI7CisrCQlpMmRfT0NTUF9DUkxJRDsKKysJCU9DU1BfU0lOR0xFUkVTUF9uZXc7CisrCQlFTkdJTkVfY21kX2lzX2V4ZWN1dGFibGU7CisrCQlSU0FfdXBfcmVmOworKwkJQVNOMV9HRU5FUkFMU1RSSU5HX2l0OworKwkJRU5HSU5FX3JlZ2lzdGVyX0RTQTsKKysJCVg1MDlWM19FWFRfYWRkX25jb25mX3NrOworKwkJRU5HSU5FX3NldF9sb2FkX3B1YmtleV9mdW5jdGlvbjsKKysJCVBLQ1M4X2RlY3J5cHQ7CisrCQlQRU1fYnl0ZXNfcmVhZF9iaW87CisrCQlESVJFQ1RPUllTVFJJTkdfaXQ7CisrCQlkMmlfT0NTUF9DUkxJRDsKKysJCUVDX1BPSU5UX2lzX29uX2N1cnZlOworKwkJQ1JZUFRPX3NldF9sb2NrZWRfbWVtX2V4X2Z1bmN0aW9uczsKKysJCUNSWVBUT19zZXRfbG9ja2VkX21lbV9leF9mdW5jczsKKysJCWQyaV9LUkI1X0NIRUNLU1VNOworKwkJQVNOMV9pdGVtX2R1cDsKKysJCVg1MDlfaXQ7CisrCQlCTl9tb2RfYWRkOworKwkJS1JCNV9BVVRIREFUQV9mcmVlOworKwkJX29zc2xfb2xkX2Rlc19jYmNfY2tzdW07CisrCQlBU04xX2l0ZW1fdmVyaWZ5OworKwkJQ1JZUFRPX3NldF9tZW1fZXhfZnVuY3Rpb25zOworKwkJRUNfUE9JTlRfZ2V0X0pwcm9qZWN0aXZlX2Nvb3JkaW5hdGVzX0dGcDsKKysJCUVDX1BPSU5UX2dldF9KcHJval9jb29yZHNfR0ZwOworKwkJWkxPTkdfaXQ7CisrCQlDUllQVE9fZ2V0X2xvY2tlZF9tZW1fZXhfZnVuY3Rpb25zOworKwkJQ1JZUFRPX2dldF9sb2NrZWRfbWVtX2V4X2Z1bmNzOworKwkJQVNOMV9USU1FX2NoZWNrOworKwkJVUlfZ2V0MF91c2VyX2RhdGE7CisrCQlITUFDX0NUWF9jbGVhbnVwOworKwkJRFNBX3VwX3JlZjsKKysJCV9vc3NsX29sZF9kZXNfZWRlM19jZmI2NF9lbmNyeXB0OworKwkJX29zc2xfb2Rlc19lZGUzX2NmYjY0X2VuY3J5cHQ7CisrCQlBU04xX0JNUFNUUklOR19pdDsKKysJCUFTTjFfdGFnMmJpdDsKKysJCVVJX21ldGhvZF9zZXRfZmx1c2hlcjsKKysJCVg1MDlfb2NzcGlkX3ByaW50OworKwkJS1JCNV9FTkNEQVRBX2l0OworKwkJRU5HSU5FX2dldF9sb2FkX3B1YmtleV9mdW5jdGlvbjsKKysJCVVJX2FkZF91c2VyX2RhdGE7CisrCQlPQ1NQX1JFUVVFU1RfZGVsZXRlX2V4dDsKKysJCVVJX2dldF9tZXRob2Q7CisrCQlPQ1NQX09ORVJFUV9mcmVlOworKwkJQVNOMV9QUklOVEFCTEVTVFJJTkdfaXQ7CisrCQlYNTA5X0NSTF9zZXRfbmV4dFVwZGF0ZTsKKysJCU9DU1BfUkVRVUVTVF9pdDsKKysJCU9DU1BfQkFTSUNSRVNQX2l0OworKwkJQUVTX2VjYl9lbmNyeXB0OworKwkJQk5fbW9kX3NxcjsKKysJCU5FVFNDQVBFX0NFUlRfU0VRVUVOQ0VfaXQ7CisrCQlHRU5FUkFMX05BTUVTX2l0OworKwkJQVVUSE9SSVRZX0lORk9fQUNDRVNTX2l0OworKwkJQVNOMV9GQk9PTEVBTl9pdDsKKysJCVVJX3NldF9leF9kYXRhOworKwkJX29zc2xfb2xkX2Rlc19zdHJpbmdfdG9fa2V5OworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9SU0E7CisrCQlkMmlfS1JCNV9QUklOQ05BTUU7CisrCQlPQ1NQX1JFU1BCWVRFU19pdDsKKysJCVg1MDlfQ0lORl9pdDsKKysJCUVOR0lORV91bnJlZ2lzdGVyX2RpZ2VzdHM7CisrCQlkMmlfRURJUEFSVFlOQU1FOworKwkJZDJpX09DU1BfU0VSVklDRUxPQzsKKysJCUVOR0lORV9nZXRfZGlnZXN0czsKKysJCV9vc3NsX29sZF9kZXNfc2V0X29kZF9wYXJpdHk7CisrCQlPQ1NQX1JFU1BEQVRBX2ZyZWU7CisrCQlkMmlfS1JCNV9USUNLRVQ7CisrCQlPVEhFUk5BTUVfaXQ7CisrCQlFVlBfTURfQ1RYX2NsZWFudXA7CisrCQlkMmlfQVNOMV9HRU5FUkFMU1RSSU5HOworKwkJWDUwOV9DUkxfc2V0X3ZlcnNpb247CisrCQlCTl9tb2Rfc3ViOworKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHRfYnlfTklEOworKwkJRU5HSU5FX2dldF9leF9uZXdfaW5kZXg7CisrCQlPQ1NQX1JFUVVFU1RfZnJlZTsKKysJCU9DU1BfUkVRVUVTVF9hZGQxX2V4dF9pMmQ7CisrCQlYNTA5X1ZBTF9pdDsKKysJCUVDX1BPSU5Uc19tYWtlX2FmZmluZTsKKysJCUVDX1BPSU5UX211bDsKKysJCVg1MDlWM19FWFRfYWRkX25jb25mOworKwkJWDUwOV9UUlVTVF9zZXQ7CisrCQlYNTA5X0NSTF9hZGQxX2V4dF9pMmQ7CisrCQlfb3NzbF9vbGRfZGVzX2ZjcnlwdDsKKysJCURJU1BMQVlURVhUX2l0OworKwkJWDUwOV9DUkxfc2V0X2xhc3RVcGRhdGU7CisrCQlPQ1NQX0JBU0lDUkVTUF9mcmVlOworKwkJT0NTUF9CQVNJQ1JFU1BfYWRkMV9leHRfaTJkOworKwkJZDJpX0tSQjVfQVVUSEVOVEJPRFk7CisrCQlDUllQVE9fc2V0X2V4X2RhdGFfaW1wbGVtZW50YXRpb247CisrCQlDUllQVE9fc2V0X2V4X2RhdGFfaW1wbDsKKysJCUtSQjVfRU5DREFUQV9uZXc7CisrCQlEU09fdXBfcmVmOworKwkJT0NTUF9jcmxfcmVhc29uX3N0cjsKKysJCVVJX2dldDBfcmVzdWx0X3N0cmluZzsKKysJCUFTTjFfR0VORVJBTFNUUklOR19uZXc7CisrCQlYNTA5X1NJR19pdDsKKysJCUVSUl9zZXRfaW1wbGVtZW50YXRpb247CisrCQlFUlJfbG9hZF9FQ19zdHJpbmdzOworKwkJVUlfZ2V0MF9hY3Rpb25fc3RyaW5nOworKwkJT0NTUF9PTkVSRVFfZ2V0X2V4dDsKKysJCUVDX1BPSU5UX21ldGhvZF9vZjsKKysJCWkyZF9LUkI1X0FQUkVRQk9EWTsKKysJCV9vc3NsX29sZF9kZXNfZWNiM19lbmNyeXB0OworKwkJQ1JZUFRPX2dldF9tZW1fZXhfZnVuY3Rpb25zOworKwkJRU5HSU5FX2dldF9leF9kYXRhOworKwkJVUlfZGVzdHJveV9tZXRob2Q7CisrCQlBU04xX2l0ZW1faTJkX2JpbzsKKysJCU9DU1BfT05FUkVRX2dldF9leHRfYnlfT0JKOworKwkJQVNOMV9wcmltaXRpdmVfbmV3OworKwkJQVNOMV9QUklOVEFCTEVfaXQ7CisrCQlFVlBfYWVzXzE5Ml9lY2I7CisrCQlPQ1NQX1NJR05BVFVSRV9uZXc7CisrCQlMT05HX2l0OworKwkJQVNOMV9WSVNJQkxFU1RSSU5HX2l0OworKwkJT0NTUF9TSU5HTEVSRVNQX2FkZDFfZXh0X2kyZDsKKysJCWQyaV9PQ1NQX0NFUlRJRDsKKysJCUFTTjFfaXRlbV9kMmlfZnA7CisrCQlDUkxfRElTVF9QT0lOVFNfaXQ7CisrCQlHRU5FUkFMX05BTUVfcHJpbnQ7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZGVsZXRlX2V4dDsKKysJCVBLQ1MxMl9TQUZFQkFHU19pdDsKKysJCWQyaV9PQ1NQX1NJR05BVFVSRTsKKysJCU9DU1BfcmVxdWVzdF9hZGQxX25vbmNlOworKwkJRU5HSU5FX3NldF9jbWRfZGVmbnM7CisrCQlPQ1NQX1NFUlZJQ0VMT0NfZnJlZTsKKysJCUVDX0dST1VQX2ZyZWU7CisrCQlBU04xX0JJVF9TVFJJTkdfaXQ7CisrCQlYNTA5X1JFUV9pdDsKKysJCV9vc3NsX29sZF9kZXNfY2JjX2VuY3J5cHQ7CisrCQlFUlJfdW5sb2FkX3N0cmluZ3M7CisrCQlQS0NTN19TSUdOX0VOVkVMT1BFX2l0OworKwkJRURJUEFSVFlOQU1FX2ZyZWU7CisrCQlPQ1NQX1JFUUlORk9fZnJlZTsKKysJCUVDX0dST1VQX25ld19jdXJ2ZV9HRnA7CisrCQlPQ1NQX1JFUVVFU1RfZ2V0MV9leHRfZDJpOworKwkJUEtDUzEyX2l0ZW1fcGFja19zYWZlYmFnOworKwkJYXNuMV9leF9jMmk7CisrCQlFTkdJTkVfcmVnaXN0ZXJfZGlnZXN0czsKKysJCWkyZF9PQ1NQX1JFVk9LRURJTkZPOworKwkJYXNuMV9lbmNfcmVzdG9yZTsKKysJCVVJX2ZyZWU7CisrCQlVSV9uZXdfbWV0aG9kOworKwkJRVZQX0VuY3J5cHRJbml0X2V4OworKwkJWDUwOV9wdWJrZXlfZGlnZXN0OworKwkJRUNfUE9JTlRfaW52ZXJ0OworKwkJT0NTUF9iYXNpY19zaWduOworKwkJaTJkX09DU1BfUkVTUElEOworKwkJT0NTUF9jaGVja19ub25jZTsKKysJCUVOR0lORV9jdHJsX2NtZDsKKysJCWQyaV9LUkI1X0VOQ0tFWTsKKysJCU9DU1BfcGFyc2VfdXJsOworKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHQ7CisrCQlPQ1NQX0NSTElEX2ZyZWU7CisrCQlPQ1NQX0JBU0lDUkVTUF9nZXQxX2V4dF9kMmk7CisrCQlSU0FQcml2YXRlS2V5X2l0OworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9ESDsKKysJCWkyZF9FRElQQVJUWU5BTUU7CisrCQlFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGcDsKKysJCUVDX1BPSU5UX2dldF9hZmZpbmVfY29vcmRzX0dGcDsKKysJCU9DU1BfQ1JMSURfbmV3OworKwkJRU5HSU5FX2dldF9mbGFnczsKKysJCU9DU1BfT05FUkVRX2l0OworKwkJVUlfcHJvY2VzczsKKysJCUFTTjFfSU5URUdFUl9pdDsKKysJCUVWUF9DaXBoZXJJbml0X2V4OworKwkJVUlfZ2V0X3N0cmluZ190eXBlOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfREg7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX0RTQTsKKysJCU9DU1BfT05FUkVRX2dldF9leHRfYnlfY3JpdGljYWw7CisrCQlibl9kdXBfZXhwYW5kOworKwkJT0NTUF9jZXJ0X2lkX25ldzsKKysJCUJBU0lDX0NPTlNUUkFJTlRTX2l0OworKwkJQk5fbW9kX2FkZF9xdWljazsKKysJCUVDX1BPSU5UX25ldzsKKysJCUVWUF9NRF9DVFhfZGVzdHJveTsKKysJCU9DU1BfUkVTUEJZVEVTX2ZyZWU7CisrCQlFVlBfYWVzXzEyOF9jYmM7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZ2V0MV9leHRfZDJpOworKwkJRUNfUE9JTlRfZnJlZTsKKysJCURIX3VwX3JlZjsKKysJCVg1MDlfTkFNRV9FTlRSWV9pdDsKKysJCVVJX2dldF9leF9uZXdfaW5kZXg7CisrCQlCTl9tb2Rfc3ViX3F1aWNrOworKwkJT0NTUF9PTkVSRVFfYWRkX2V4dDsKKysJCU9DU1BfcmVxdWVzdF9zaWduOworKwkJRVZQX0RpZ2VzdEZpbmFsX2V4OworKwkJRU5HSU5FX3NldF9kaWdlc3RzOworKwkJT0NTUF9pZF9pc3N1ZXJfY21wOworKwkJT0JKX05BTUVfZG9fYWxsOworKwkJRUNfUE9JTlRzX211bDsKKysJCUVOR0lORV9yZWdpc3Rlcl9jb21wbGV0ZTsKKysJCVg1MDlWM19FWFRfbmNvbmZfbmlkOworKwkJQVNOMV9TRVFVRU5DRV9pdDsKKysJCVVJX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCVJBTkRfcXVlcnlfZWdkX2J5dGVzOworKwkJVUlfbWV0aG9kX2dldF93cml0ZXI7CisrCQlVSV9PcGVuU1NMOworKwkJUEVNX2RlZl9jYWxsYmFjazsKKysJCUVOR0lORV9jbGVhbnVwOworKwkJRElTVF9QT0lOVF9pdDsKKysJCU9DU1BfU0lOR0xFUkVTUF9pdDsKKysJCWQyaV9LUkI1X1RLVEJPRFk7CisrCQlFQ19QT0lOVF9jbXA7CisrCQlPQ1NQX1JFVk9LRURJTkZPX25ldzsKKysJCWkyZF9PQ1NQX0NFUlRTVEFUVVM7CisrCQlPQ1NQX2Jhc2ljX2FkZDFfbm9uY2U7CisrCQlBU04xX2l0ZW1fZXhfZDJpOworKwkJQk5fbW9kX2xzaGlmdDFfcXVpY2s7CisrCQlVSV9zZXRfbWV0aG9kOworKwkJT0NTUF9pZF9nZXQwX2luZm87CisrCQlCTl9tb2Rfc3FydDsKKysJCUVDX0dST1VQX2NvcHk7CisrCQlLUkI1X0VOQ0RBVEFfZnJlZTsKKysJCV9vc3NsX29sZF9kZXNfY2ZiX2VuY3J5cHQ7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZ2V0X2V4dF9ieV9PQko7CisrCQlPQ1NQX2NlcnRfdG9faWQ7CisrCQlPQ1NQX1JFU1BJRF9uZXc7CisrCQlPQ1NQX1JFU1BEQVRBX2l0OworKwkJZDJpX09DU1BfUkVTUERBVEE7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX2NvbXBsZXRlOworKwkJT0NTUF9jaGVja192YWxpZGl0eTsKKysJCVBLQ1MxMl9CQUdTX2l0OworKwkJT0NTUF91cmxfc3ZjbG9jX25ldzsKKysJCUFTTjFfdGVtcGxhdGVfZnJlZTsKKysJCU9DU1BfU0lOR0xFUkVTUF9hZGRfZXh0OworKwkJS1JCNV9BVVRIRU5UQk9EWV9pdDsKKysJCVg1MDlfc3VwcG9ydGVkX2V4dGVuc2lvbjsKKysJCWkyZF9LUkI1X0FVVEhEQVRBOworKwkJVUlfbWV0aG9kX2dldF9vcGVuZXI7CisrCQlFTkdJTkVfc2V0X2V4X2RhdGE7CisrCQlPQ1NQX1JFUVVFU1RfcHJpbnQ7CisrCQlDQklHTlVNX2l0OworKwkJS1JCNV9USUNLRVRfbmV3OworKwkJS1JCNV9BUFJFUV9uZXc7CisrCQlFQ19HUk9VUF9nZXRfY3VydmVfR0ZwOworKwkJS1JCNV9FTkNLRVlfbmV3OworKwkJQVNOMV90ZW1wbGF0ZV9kMmk7CisrCQlfb3NzbF9vbGRfZGVzX3F1YWRfY2tzdW07CisrCQlPQ1NQX3NpbmdsZV9nZXQwX3N0YXR1czsKKysJCUJOX3N3YXA7CisrCQlQT0xJQ1lJTkZPX2l0OworKwkJRU5HSU5FX3NldF9kZXN0cm95X2Z1bmN0aW9uOworKwkJYXNuMV9lbmNfZnJlZTsKKysJCU9DU1BfUkVTUElEX2l0OworKwkJRUNfR1JPVVBfbmV3OworKwkJRVZQX2Flc18yNTZfY2JjOworKwkJaTJkX0tSQjVfUFJJTkNOQU1FOworKwkJX29zc2xfb2xkX2Rlc19lbmNyeXB0MjsKKysJCV9vc3NsX29sZF9kZXNfZW5jcnlwdDM7CisrCQlQS0NTOF9QUklWX0tFWV9JTkZPX2l0OworKwkJT0NTUF9SRVFJTkZPX2l0OworKwkJUEJFUEFSQU1faXQ7CisrCQlLUkI1X0FVVEhFTlRCT0RZX25ldzsKKysJCVg1MDlfQ1JMX2FkZDBfcmV2b2tlZDsKKysJCUVESVBBUlRZTkFNRV9pdDsKKysJCU5FVFNDQVBFX1NQS0lfaXQ7CisrCQlVSV9nZXQwX3Rlc3Rfc3RyaW5nOworKwkJRU5HSU5FX2dldF9jaXBoZXJfZW5naW5lOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9jaXBoZXJzOworKwkJRUNfUE9JTlRfY29weTsKKysJCUJOX2tyb25lY2tlcjsKKysJCV9vc3NsX29sZF9kZXNfZWRlM19vZmI2NF9lbmNyeXB0OworKwkJX29zc2xfb2Rlc19lZGUzX29mYjY0X2VuY3J5cHQ7CisrCQlVSV9tZXRob2RfZ2V0X3JlYWRlcjsKKysJCU9DU1BfQkFTSUNSRVNQX2dldF9leHRfY291bnQ7CisrCQlBU04xX0VOVU1FUkFURURfaXQ7CisrCQlVSV9zZXRfcmVzdWx0OworKwkJaTJkX0tSQjVfVElDS0VUOworKwkJWDUwOV9wcmludF9leF9mcDsKKysJCUVWUF9DSVBIRVJfQ1RYX3NldF9wYWRkaW5nOworKwkJZDJpX09DU1BfUkVTUE9OU0U7CisrCQlBU04xX1VUQ1RJTUVfaXQ7CisrCQlfb3NzbF9vbGRfZGVzX2VuY193cml0ZTsKKysJCU9DU1BfUkVTUE9OU0VfbmV3OworKwkJQUVTX3NldF9lbmNyeXB0X2tleTsKKysJCU9DU1BfcmVzcF9jb3VudDsKKysJCUtSQjVfQ0hFQ0tTVU1fbmV3OworKwkJRU5HSU5FX2xvYWRfY3N3aWZ0OworKwkJT0NTUF9vbmVyZXFfZ2V0MF9pZDsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9jaXBoZXJzOworKwkJTk9USUNFUkVGX2l0OworKwkJWDUwOVYzX0VYVF9DUkxfYWRkX25jb25mOworKwkJT0NTUF9SRVZPS0VESU5GT19pdDsKKysJCUFFU19lbmNyeXB0OworKwkJT0NTUF9SRVFVRVNUX25ldzsKKysJCUFTTjFfQU5ZX2l0OworKwkJQ1JZUFRPX2V4X2RhdGFfbmV3X2NsYXNzOworKwkJX29zc2xfb2xkX2Rlc19uY2JjX2VuY3J5cHQ7CisrCQlpMmRfS1JCNV9US1RCT0RZOworKwkJRUNfUE9JTlRfY2xlYXJfZnJlZTsKKysJCUFFU19kZWNyeXB0OworKwkJYXNuMV9lbmNfaW5pdDsKKysJCVVJX2dldF9yZXN1bHRfbWF4c2l6ZTsKKysJCU9DU1BfQ0VSVElEX25ldzsKKysJCUVOR0lORV91bnJlZ2lzdGVyX1JBTkQ7CisrCQlVSV9tZXRob2RfZ2V0X2Nsb3NlcjsKKysJCWQyaV9LUkI1X0VOQ0RBVEE7CisrCQlPQ1NQX3JlcXVlc3Rfb25lcmVxX2NvdW50OworKwkJT0NTUF9iYXNpY192ZXJpZnk7CisrCQlLUkI1X0FVVEhFTlRCT0RZX2ZyZWU7CisrCQlBU04xX2l0ZW1fZDJpOworKwkJQVNOMV9wcmltaXRpdmVfZnJlZTsKKysJCWkyZF9FWFRFTkRFRF9LRVlfVVNBR0U7CisrCQlpMmRfT0NTUF9TSUdOQVRVUkU7CisrCQlhc24xX2VuY19zYXZlOworKwkJRU5HSU5FX2xvYWRfbnVyb247CisrCQlfb3NzbF9vbGRfZGVzX3BjYmNfZW5jcnlwdDsKKysJCVBLQ1MxMl9NQUNfREFUQV9pdDsKKysJCU9DU1BfYWNjZXB0X3Jlc3BvbnNlc19uZXc7CisrCQlhc24xX2RvX2xvY2s7CisrCQlQS0NTN19BVFRSX1ZFUklGWV9pdDsKKysJCUtSQjVfQVBSRVFCT0RZX2l0OworKwkJaTJkX09DU1BfU0lOR0xFUkVTUDsKKysJCUFTTjFfaXRlbV9leF9uZXc7CisrCQlVSV9hZGRfdmVyaWZ5X3N0cmluZzsKKysJCV9vc3NsX29sZF9kZXNfc2V0X2tleTsKKysJCUtSQjVfUFJJTkNOQU1FX2l0OworKwkJRVZQX0RlY3J5cHRJbml0X2V4OworKwkJaTJkX09DU1BfQ0VSVElEOworKwkJQVNOMV9pdGVtX2QyaV9iaW87CisrCQlFQ19QT0lOVF9kYmw7CisrCQlhc24xX2dldF9jaG9pY2Vfc2VsZWN0b3I7CisrCQlpMmRfS1JCNV9DSEVDS1NVTTsKKysJCUVOR0lORV9zZXRfdGFibGVfZmxhZ3M7CisrCQlBRVNfb3B0aW9uczsKKysJCUVOR0lORV9sb2FkX2NoaWw7CisrCQlPQ1NQX2lkX2NtcDsKKysJCU9DU1BfQkFTSUNSRVNQX25ldzsKKysJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2J5X05JRDsKKysJCUtSQjVfQVBSRVFfaXQ7CisrCQlFTkdJTkVfZ2V0X2Rlc3Ryb3lfZnVuY3Rpb247CisrCQlDT05GX3NldF9uY29uZjsKKysJCUFTTjFfUFJJTlRBQkxFX2ZyZWU7CisrCQlPQ1NQX0JBU0lDUkVTUF9nZXRfZXh0X2J5X05JRDsKKysJCURJU1RfUE9JTlRfTkFNRV9pdDsKKysJCVg1MDlWM19leHRlbnNpb25zX3ByaW50OworKwkJX29zc2xfb2xkX2Rlc19jZmI2NF9lbmNyeXB0OworKwkJWDUwOV9SRVZPS0VEX2FkZDFfZXh0X2kyZDsKKysJCV9vc3NsX29sZF9kZXNfb2ZiX2VuY3J5cHQ7CisrCQlLUkI1X1RLVEJPRFlfbmV3OworKwkJQVNOMV9PQ1RFVF9TVFJJTkdfaXQ7CisrCQlFUlJfbG9hZF9VSV9zdHJpbmdzOworKwkJaTJkX0tSQjVfRU5DS0VZOworKwkJQVNOMV90ZW1wbGF0ZV9uZXc7CisrCQlPQ1NQX1NJR05BVFVSRV9mcmVlOworKwkJQVNOMV9pdGVtX2kyZF9mcDsKKysJCUtSQjVfUFJJTkNOQU1FX2ZyZWU7CisrCQlQS0NTN19SRUNJUF9JTkZPX2l0OworKwkJRVhURU5ERURfS0VZX1VTQUdFX2l0OworKwkJRUNfR0ZwX3NpbXBsZV9tZXRob2Q7CisrCQlFQ19HUk9VUF9wcmVjb21wdXRlX211bHQ7CisrCQlPQ1NQX3JlcXVlc3Rfb25lcmVxX2dldDA7CisrCQlVSV9tZXRob2Rfc2V0X3dyaXRlcjsKKysJCUtSQjVfQVVUSEVOVF9uZXc7CisrCQlYNTA5X0NSTF9JTkZPX2l0OworKwkJRFNPX3NldF9uYW1lX2NvbnZlcnRlcjsKKysJCUFFU19zZXRfZGVjcnlwdF9rZXk7CisrCQlQS0NTN19ESUdFU1RfaXQ7CisrCQlQS0NTMTJfeDUwOTJjZXJ0YmFnOworKwkJRVZQX0RpZ2VzdEluaXRfZXg7CisrCQlpMmFfQUNDRVNTX0RFU0NSSVBUSU9OOworKwkJT0NTUF9SRVNQT05TRV9pdDsKKysJCVBLQ1M3X0VOQ19DT05URU5UX2l0OworKwkJT0NTUF9yZXF1ZXN0X2FkZDBfaWQ7CisrCQlFQ19QT0lOVF9tYWtlX2FmZmluZTsKKysJCURTT19nZXRfZmlsZW5hbWU7CisrCQlPQ1NQX0NFUlRTVEFUVVNfaXQ7CisrCQlPQ1NQX3JlcXVlc3RfYWRkMV9jZXJ0OworKwkJVUlfZ2V0MF9vdXRwdXRfc3RyaW5nOworKwkJVUlfZHVwX3ZlcmlmeV9zdHJpbmc7CisrCQlCTl9tb2RfbHNoaWZ0OworKwkJS1JCNV9BVVRIREFUQV9pdDsKKysJCWFzbjFfc2V0X2Nob2ljZV9zZWxlY3RvcjsKKysJCU9DU1BfYmFzaWNfYWRkMV9zdGF0dXM7CisrCQlPQ1NQX1JFU1BJRF9mcmVlOworKwkJYXNuMV9nZXRfZmllbGRfcHRyOworKwkJVUlfYWRkX2lucHV0X3N0cmluZzsKKysJCU9DU1BfQ1JMSURfaXQ7CisrCQlpMmRfS1JCNV9BVVRIRU5UQk9EWTsKKysJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2NvdW50OworKwkJRU5HSU5FX2xvYWRfYXRhbGxhOworKwkJWDUwOV9OQU1FX2l0OworKwkJVVNFUk5PVElDRV9pdDsKKysJCU9DU1BfUkVRSU5GT19uZXc7CisrCQlPQ1NQX0JBU0lDUkVTUF9nZXRfZXh0OworKwkJQ1JZUFRPX2dldF9leF9kYXRhX2ltcGxlbWVudGF0aW9uOworKwkJQ1JZUFRPX2dldF9leF9kYXRhX2ltcGw7CisrCQlBU04xX2l0ZW1fcGFjazsKKysJCWkyZF9LUkI1X0VOQ0RBVEE7CisrCQlYNTA5X1BVUlBPU0Vfc2V0OworKwkJWDUwOV9SRVFfSU5GT19pdDsKKysJCVVJX21ldGhvZF9zZXRfb3BlbmVyOworKwkJQVNOMV9pdGVtX2V4X2ZyZWU7CisrCQlBU04xX0JPT0xFQU5faXQ7CisrCQlFTkdJTkVfZ2V0X3RhYmxlX2ZsYWdzOworKwkJVUlfY3JlYXRlX21ldGhvZDsKKysJCU9DU1BfT05FUkVRX2FkZDFfZXh0X2kyZDsKKysJCV9zaGFkb3dfREVTX2NoZWNrX2tleTsKKysJCWQyaV9PQ1NQX1JFUUlORk87CisrCQlVSV9hZGRfaW5mb19zdHJpbmc7CisrCQlVSV9nZXRfcmVzdWx0X21pbnNpemU7CisrCQlBU04xX05VTExfaXQ7CisrCQlCTl9tb2RfbHNoaWZ0MTsKKysJCWQyaV9PQ1NQX09ORVJFUTsKKysJCU9DU1BfT05FUkVRX25ldzsKKysJCUtSQjVfVElDS0VUX2l0OworKwkJRVZQX2Flc18xOTJfY2JjOworKwkJS1JCNV9USUNLRVRfZnJlZTsKKysJCVVJX25ldzsKKysJCU9DU1BfcmVzcG9uc2VfY3JlYXRlOworKwkJX29zc2xfb2xkX2Rlc194Y2JjX2VuY3J5cHQ7CisrCQlQS0NTN19pdDsKKysJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJT0NTUF9SRVFVRVNUX2dldF9leHRfYnlfY3JpdDsKKysJCUVOR0lORV9zZXRfZmxhZ3M7CisrCQlfb3NzbF9vbGRfZGVzX2VjYl9lbmNyeXB0OworKwkJT0NTUF9yZXNwb25zZV9nZXQxX2Jhc2ljOworKwkJRVZQX0RpZ2VzdDsKKysJCU9DU1BfT05FUkVRX2RlbGV0ZV9leHQ7CisrCQlBU04xX1RCT09MRUFOX2l0OworKwkJQVNOMV9pdGVtX25ldzsKKysJCUFTTjFfVElNRV90b19nZW5lcmFsaXplZHRpbWU7CisrCQlCSUdOVU1faXQ7CisrCQlBRVNfY2JjX2VuY3J5cHQ7CisrCQlFTkdJTkVfZ2V0X2xvYWRfcHJpdmtleV9mdW5jdGlvbjsKKysJCUVOR0lORV9nZXRfbG9hZF9wcml2a2V5X2ZuOworKwkJT0NTUF9SRVNQT05TRV9mcmVlOworKwkJVUlfbWV0aG9kX3NldF9yZWFkZXI7CisrCQlpMmRfQVNOMV9UNjFTVFJJTkc7CisrCQlFQ19QT0lOVF9zZXRfdG9faW5maW5pdHk7CisrCQlFUlJfbG9hZF9PQ1NQX3N0cmluZ3M7CisrCQlFQ19QT0lOVF9wb2ludDJvY3Q7CisrCQlLUkI1X0FQUkVRX2ZyZWU7CisrCQlBU04xX09CSkVDVF9pdDsKKysJCU9DU1BfY3JsSURfbmV3OworKwkJT0NTUF9jcmxJRDJfbmV3OworKwkJQ09ORl9tb2R1bGVzX2xvYWRfZmlsZTsKKysJCUNPTkZfaW1vZHVsZV9zZXRfdXNyX2RhdGE7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfc3RyaW5nOworKwkJQ09ORl9tb2R1bGVfZ2V0X3Vzcl9kYXRhOworKwkJQVNOMV9hZGRfb2lkX21vZHVsZTsKKysJCUNPTkZfbW9kdWxlc19maW5pc2g7CisrCQlPUEVOU1NMX2NvbmZpZzsKKysJCUNPTkZfbW9kdWxlc191bmxvYWQ7CisrCQlDT05GX2ltb2R1bGVfZ2V0X3ZhbHVlOworKwkJQ09ORl9tb2R1bGVfc2V0X3Vzcl9kYXRhOworKwkJQ09ORl9wYXJzZV9saXN0OworKwkJQ09ORl9tb2R1bGVfYWRkOworKwkJQ09ORl9nZXQxX2RlZmF1bHRfY29uZmlnX2ZpbGU7CisrCQlDT05GX2ltb2R1bGVfZ2V0X2ZsYWdzOworKwkJQ09ORl9pbW9kdWxlX2dldF9tb2R1bGU7CisrCQlDT05GX21vZHVsZXNfbG9hZDsKKysJCUNPTkZfaW1vZHVsZV9nZXRfbmFtZTsKKysJCUVSUl9wZWVrX3RvcF9lcnJvcjsKKysJCUNPTkZfaW1vZHVsZV9nZXRfdXNyX2RhdGE7CisrCQlDT05GX2ltb2R1bGVfc2V0X2ZsYWdzOworKwkJRU5HSU5FX2FkZF9jb25mX21vZHVsZTsKKysJCUVSUl9wZWVrX2xhc3RfZXJyb3JfbGluZTsKKysJCUVSUl9wZWVrX2xhc3RfZXJyb3JfbGluZV9kYXRhOworKwkJRVJSX3BlZWtfbGFzdF9lcnJvcjsKKysJCURFU19yZWFkXzJwYXNzd29yZHM7CisrCQlERVNfcmVhZF9wYXNzd29yZDsKKysJCVVJX1VUSUxfcmVhZF9wdzsKKysJCVVJX1VUSUxfcmVhZF9wd19zdHJpbmc7CisrCQlFTkdJTkVfbG9hZF9hZXA7CisrCQlFTkdJTkVfbG9hZF9zdXJld2FyZTsKKysJCU9QRU5TU0xfYWRkX2FsbF9hbGdvcml0aG1zX25vY29uZjsKKysJCU9QRU5TU0xfYWRkX2FsbF9hbGdvX25vY29uZjsKKysJCU9QRU5TU0xfYWRkX2FsbF9hbGdvcml0aG1zX2NvbmY7CisrCQlPUEVOU1NMX2FkZF9hbGxfYWxnb19jb25mOworKwkJT1BFTlNTTF9sb2FkX2J1aWx0aW5fbW9kdWxlczsKKysJCUFFU19vZmIxMjhfZW5jcnlwdDsKKysJCUFFU19jdHIxMjhfZW5jcnlwdDsKKysJCUFFU19jZmIxMjhfZW5jcnlwdDsKKysJCUVOR0lORV9sb2FkXzQ3NThjY2E7CisrCQlfb3NzbF8wOTZfZGVzX3JhbmRvbV9zZWVkOworKwkJRVZQX2Flc18yNTZfb2ZiOworKwkJRVZQX2Flc18xOTJfb2ZiOworKwkJRVZQX2Flc18xMjhfY2ZiMTI4OworKwkJRVZQX2Flc18yNTZfY2ZiMTI4OworKwkJRVZQX2Flc18xMjhfb2ZiOworKwkJRVZQX2Flc18xOTJfY2ZiMTI4OworKwkJQ09ORl9tb2R1bGVzX2ZyZWU7CisrCQlOQ09ORl9kZWZhdWx0OworKwkJT1BFTlNTTF9ub19jb25maWc7CisrCQlOQ09ORl9XSU4zMjsKKysJCUFTTjFfVU5JVkVSU0FMU1RSSU5HX25ldzsKKysJCUVWUF9kZXNfZWRlX2VjYjsKKysJCWkyZF9BU04xX1VOSVZFUlNBTFNUUklORzsKKysJCUFTTjFfVU5JVkVSU0FMU1RSSU5HX2ZyZWU7CisrCQlBU04xX1VOSVZFUlNBTFNUUklOR19pdDsKKysJCWQyaV9BU04xX1VOSVZFUlNBTFNUUklORzsKKysJCUVWUF9kZXNfZWRlM19lY2I7CisrCQlYNTA5X1JFUV9wcmludF9leDsKKysJCUVOR0lORV91cF9yZWY7CisrCQlCVUZfTUVNX2dyb3dfY2xlYW47CisrCQlDUllQVE9fcmVhbGxvY19jbGVhbjsKKysJCUJVRl9zdHJsY2F0OworKwkJQklPX2luZGVudDsKKysJCUJVRl9zdHJsY3B5OworKwkJT3BlblNTTERpZTsKKysJCU9QRU5TU0xfY2xlYW5zZTsKKysJCUVOR0lORV9zZXR1cF9ic2RfY3J5cHRvZGV2OworKwkJRVJSX3JlbGVhc2VfZXJyX3N0YXRlX3RhYmxlOworKwkJRVZQX2Flc18xMjhfY2ZiODsKKysJCUZJUFNfY29ycnVwdF9yc2E7CisrCQlGSVBTX3NlbGZ0ZXN0X2RlczsKKysJCUVWUF9hZXNfMTI4X2NmYjE7CisrCQlFVlBfYWVzXzE5Ml9jZmI4OworKwkJRklQU19tb2RlX3NldDsKKysJCUZJUFNfc2VsZnRlc3RfZHNhOworKwkJRVZQX2Flc18yNTZfY2ZiODsKKysJCUZJUFNfYWxsb3dfbWQ1OworKwkJREVTX2VkZTNfY2ZiX2VuY3J5cHQ7CisrCQlFVlBfZGVzX2VkZTNfY2ZiODsKKysJCUZJUFNfcmFuZF9zZWVkZWQ7CisrCQlBRVNfY2Zicl9lbmNyeXB0X2Jsb2NrOworKwkJQUVTX2NmYjhfZW5jcnlwdDsKKysJCUZJUFNfcmFuZF9zZWVkOworKwkJRklQU19jb3JydXB0X2RlczsKKysJCUVWUF9hZXNfMTkyX2NmYjE7CisrCQlGSVBTX3NlbGZ0ZXN0X2FlczsKKysJCUZJUFNfc2V0X3Bybmdfa2V5OworKwkJRVZQX2Rlc19jZmI4OworKwkJRklQU19jb3JydXB0X2RzYTsKKysJCUZJUFNfdGVzdF9tb2RlOworKwkJRklQU19yYW5kX21ldGhvZDsKKysJCUVWUF9hZXNfMjU2X2NmYjE7CisrCQlFUlJfbG9hZF9GSVBTX3N0cmluZ3M7CisrCQlGSVBTX2NvcnJ1cHRfYWVzOworKwkJRklQU19zZWxmdGVzdF9zaGExOworKwkJRklQU19zZWxmdGVzdF9yc2E7CisrCQlGSVBTX2NvcnJ1cHRfc2hhMTsKKysJCUVWUF9kZXNfY2ZiMTsKKysJCUZJUFNfZHNhX2NoZWNrOworKwkJQUVTX2NmYjFfZW5jcnlwdDsKKysJCUVWUF9kZXNfZWRlM19jZmIxOworKwkJRklQU19yYW5kX2NoZWNrOworKwkJRklQU19tZDVfYWxsb3dlZDsKKysJCUZJUFNfbW9kZTsKKysJCUZJUFNfc2VsZnRlc3RfZmFpbGVkOworKwkJc2tfaXNfc29ydGVkOworKwkJWDUwOV9jaGVja19jYTsKKysJCUhNQUNfQ1RYX3NldF9mbGFnczsKKysJCWQyaV9QUk9YWV9DRVJUX0lORk9fRVhURU5TSU9OOworKwkJUFJPWFlfUE9MSUNZX2l0OworKwkJaTJkX1BST1hZX1BPTElDWTsKKysJCWkyZF9QUk9YWV9DRVJUX0lORk9fRVhURU5TSU9OOworKwkJZDJpX1BST1hZX1BPTElDWTsKKysJCVBST1hZX0NFUlRfSU5GT19FWFRFTlNJT05fbmV3OworKwkJUFJPWFlfQ0VSVF9JTkZPX0VYVEVOU0lPTl9mcmVlOworKwkJUFJPWFlfQ0VSVF9JTkZPX0VYVEVOU0lPTl9pdDsKKysJCVBST1hZX1BPTElDWV9mcmVlOworKwkJUFJPWFlfUE9MSUNZX25ldzsKKysJCUJOX01PTlRfQ1RYX3NldF9sb2NrZWQ7CisrCQlGSVBTX3NlbGZ0ZXN0X3JuZzsKKysJCUVWUF9zaGEzODQ7CisrCQlFVlBfc2hhNTEyOworKwkJRVZQX3NoYTIyNDsKKysJCUVWUF9zaGEyNTY7CisrCQlGSVBTX3NlbGZ0ZXN0X2htYWM7CisrCQlGSVBTX2NvcnJ1cHRfcm5nOworKwkJQk5fbW9kX2V4cF9tb250X2NvbnN0dGltZTsKKysJCVJTQV9YOTMxX2hhc2hfaWQ7CisrCQlSU0FfcGFkZGluZ19jaGVja19YOTMxOworKwkJUlNBX3ZlcmlmeV9QS0NTMV9QU1M7CisrCQlSU0FfcGFkZGluZ19hZGRfWDkzMTsKKysJCVJTQV9wYWRkaW5nX2FkZF9QS0NTMV9QU1M7CisrCQlQS0NTMV9NR0YxOworKwkJQk5fWDkzMV9nZW5lcmF0ZV9YcHE7CisrCQlSU0FfWDkzMV9nZW5lcmF0ZV9rZXk7CisrCQlCTl9YOTMxX2Rlcml2ZV9wcmltZTsKKysJCUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWU7CisrCQlSU0FfWDkzMV9kZXJpdmU7CisrCQlCSU9fbmV3X2RncmFtOworKwkJQk5fZ2V0MF9uaXN0X3ByaW1lXzM4NDsKKysJCUVSUl9zZXRfbWFyazsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldDBfY3JsczsKKysJCUVOR0lORV9zZXRfU1RPUkU7CisrCQlFTkdJTkVfcmVnaXN0ZXJfRUNEU0E7CisrCQlTVE9SRV9tZXRoX3NldF9saXN0X3N0YXJ0X2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9saXN0X3N0YXJ0X2Z1bmN0aW9uOworKwkJQk5fQkxJTkRJTkdfaW52ZXJ0X2V4OworKwkJTkFNRV9DT05TVFJBSU5UU19mcmVlOworKwkJU1RPUkVfQVRUUl9JTkZPX3NldF9udW1iZXI7CisrCQlCTl9CTElORElOR19nZXRfdGhyZWFkX2lkOworKwkJWDUwOV9TVE9SRV9DVFhfc2V0MF9wYXJhbTsKKysJCVBPTElDWV9NQVBQSU5HX2l0OworKwkJU1RPUkVfcGFyc2VfYXR0cnNfc3RhcnQ7CisrCQlQT0xJQ1lfQ09OU1RSQUlOVFNfZnJlZTsKKysJCUVWUF9QS0VZX2FkZDFfYXR0cl9ieV9OSUQ7CisrCQlCTl9uaXN0X21vZF8xOTI7CisrCQlFQ19HUk9VUF9nZXRfdHJpbm9taWFsX2Jhc2lzOworKwkJU1RPUkVfc2V0X21ldGhvZDsKKysJCUdFTkVSQUxfU1VCVFJFRV9mcmVlOworKwkJTkFNRV9DT05TVFJBSU5UU19pdDsKKysJCUVDREhfZ2V0X2RlZmF1bHRfbWV0aG9kOworKwkJUEtDUzEyX2FkZF9zYWZlOworKwkJRUNfS0VZX25ld19ieV9jdXJ2ZV9uYW1lOworKwkJU1RPUkVfbWV0aF9nZXRfdXBkYXRlX3N0b3JlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF91cGRhdGVfc3RvcmVfZnVuY3Rpb247CisrCQlFTkdJTkVfcmVnaXN0ZXJfRUNESDsKKysJCVNIQTUxMl9VcGRhdGU7CisrCQlpMmRfRUNQcml2YXRlS2V5OworKwkJQk5fZ2V0MF9uaXN0X3ByaW1lXzE5MjsKKysJCVNUT1JFX21vZGlmeV9jZXJ0aWZpY2F0ZTsKKysJCUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0YybTsKKysJCUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRzX0dGMm07CisrCQlCTl9HRjJtX21vZF9leHBfYXJyOworKwkJU1RPUkVfQVRUUl9JTkZPX21vZGlmeV9udW1iZXI7CisrCQlYNTA5X2tleWlkX2dldDA7CisrCQlFTkdJTkVfbG9hZF9nbXA7CisrCQlwaXRlbV9uZXc7CisrCQlCTl9HRjJtX21vZF9tdWxfYXJyOworKwkJU1RPUkVfbGlzdF9wdWJsaWNfa2V5X2VuZHA7CisrCQlvMmlfRUNQdWJsaWNLZXk7CisrCQlFQ19LRVlfY29weTsKKysJCUJJT19kdW1wX2ZwOworKwkJWDUwOV9wb2xpY3lfbm9kZV9nZXQwX3BhcmVudDsKKysJCUVDX0dST1VQX2NoZWNrX2Rpc2NyaW1pbmFudDsKKysJCWkyb19FQ1B1YmxpY0tleTsKKysJCUVDX0tFWV9wcmVjb21wdXRlX211bHQ7CisrCQlhMmlfSVBBRERSRVNTOworKwkJU1RPUkVfbWV0aF9zZXRfaW5pdGlhbGlzZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfaW5pdGlhbGlzZV9mdW5jdGlvbjsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF9kZXB0aDsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX2luaGVyaXQ7CisrCQlFQ19QT0lOVF9wb2ludDJibjsKKysJCVNUT1JFX0FUVFJfSU5GT19zZXRfZG47CisrCQlYNTA5X3BvbGljeV90cmVlX2dldDBfcG9saWNpZXM7CisrCQlFQ19HUk9VUF9uZXdfY3VydmVfR0YybTsKKysJCVNUT1JFX2Rlc3Ryb3lfbWV0aG9kOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfU1RPUkU7CisrCQlFVlBfUEtFWV9nZXQxX0VDX0tFWTsKKysJCVNUT1JFX0FUVFJfSU5GT19nZXQwX251bWJlcjsKKysJCUVOR0lORV9nZXRfZGVmYXVsdF9FQ0RIOworKwkJRUNfS0VZX2dldF9jb252X2Zvcm07CisrCQlBU04xX09DVEVUX1NUUklOR19OREVGX2l0OworKwkJU1RPUkVfZGVsZXRlX3B1YmxpY19rZXk7CisrCQlTVE9SRV9nZXRfcHVibGljX2tleTsKKysJCVNUT1JFX21vZGlmeV9hcmJpdHJhcnk7CisrCQlFTkdJTkVfZ2V0X3N0YXRpY19zdGF0ZTsKKysJCXBxdWV1ZV9pdGVyYXRvcjsKKysJCUVDRFNBX1NJR19uZXc7CisrCQlPUEVOU1NMX0RJUl9lbmQ7CisrCQlCTl9HRjJtX21vZF9zcXI7CisrCQlFQ19QT0lOVF9ibjJwb2ludDsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3NldF9kZXB0aDsKKysJCUVDX0tFWV9zZXRfYXNuMV9mbGFnOworKwkJU1RPUkVfZ2V0X21ldGhvZDsKKysJCUVDX0tFWV9nZXRfa2V5X21ldGhvZF9kYXRhOworKwkJRUNEU0Ffc2lnbl9leDsKKysJCVNUT1JFX3BhcnNlX2F0dHJzX2VuZDsKKysJCUVDX0dST1VQX2dldF9wb2ludF9jb252ZXJzaW9uX2Zvcm07CisrCQlFQ19HUk9VUF9nZXRfcG9pbnRfY29udl9mb3JtOworKwkJU1RPUkVfbWV0aG9kX3NldF9zdG9yZV9mdW5jdGlvbjsKKysJCVNUT1JFX0FUVFJfSU5GT19pbjsKKysJCVBFTV9yZWFkX2Jpb19FQ1BLUGFyYW1ldGVyczsKKysJCUVDX0dST1VQX2dldF9wZW50YW5vbWlhbF9iYXNpczsKKysJCUVWUF9QS0VZX2FkZDFfYXR0cl9ieV90eHQ7CisrCQlCTl9CTElORElOR19zZXRfZmxhZ3M7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX3BvbGljaWVzOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0MV9uYW1lOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0X3B1cnBvc2U7CisrCQlTVE9SRV9nZXRfbnVtYmVyOworKwkJRUNEU0Ffc2lnbl9zZXR1cDsKKysJCUJOX0dGMm1fbW9kX3NvbHZlX3F1YWRfYXJyOworKwkJRUNfS0VZX3VwX3JlZjsKKysJCVBPTElDWV9NQVBQSU5HX2ZyZWU7CisrCQlCTl9HRjJtX21vZF9kaXY7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfZmxhZ3M7CisrCQlFQ19LRVlfZnJlZTsKKysJCVNUT1JFX21ldGhfc2V0X2xpc3RfbmV4dF9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfbGlzdF9uZXh0X2Z1bmN0aW9uOworKwkJUEVNX3dyaXRlX2Jpb19FQ1ByaXZhdGVLZXk7CisrCQlkMmlfRUNfUFVCS0VZOworKwkJU1RPUkVfbWV0aF9nZXRfZ2VuZXJhdGVfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X2dlbmVyYXRlX2Z1bmN0aW9uOworKwkJU1RPUkVfbWV0aF9zZXRfbGlzdF9lbmRfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X2xpc3RfZW5kX2Z1bmN0aW9uOworKwkJcHF1ZXVlX3ByaW50OworKwkJRUNfR1JPVVBfaGF2ZV9wcmVjb21wdXRlX211bHQ7CisrCQlFQ19LRVlfcHJpbnRfZnA7CisrCQlCTl9HRjJtX21vZF9hcnI7CisrCQlQRU1fd3JpdGVfYmlvX1g1MDlfQ0VSVF9QQUlSOworKwkJRVZQX1BLRVlfY21wOworKwkJWDUwOV9wb2xpY3lfbGV2ZWxfbm9kZV9jb3VudDsKKysJCVNUT1JFX25ld19lbmdpbmU7CisrCQlTVE9SRV9saXN0X3B1YmxpY19rZXlfc3RhcnQ7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9uZXc7CisrCQlFQ0RIX2dldF9leF9kYXRhOworKwkJRVZQX1BLRVlfZ2V0X2F0dHI7CisrCQlFQ0RTQV9kb19zaWduOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfRUNESDsKKysJCUVDREhfT3BlblNTTDsKKysJCUVDX0tFWV9zZXRfY29udl9mb3JtOworKwkJRUNfUE9JTlRfZHVwOworKwkJR0VORVJBTF9TVUJUUkVFX25ldzsKKysJCVNUT1JFX2xpc3RfY3JsX2VuZHA7CisrCQlFQ19nZXRfYnVpbHRpbl9jdXJ2ZXM7CisrCQlYNTA5X3BvbGljeV9ub2RlX2dldDBfcXVhbGlmaWVyczsKKysJCVg1MDlfcGN5X25vZGVfZ2V0MF9xdWFsaWZpZXJzOworKwkJU1RPUkVfbGlzdF9jcmxfZW5kOworKwkJRVZQX1BLRVlfc2V0MV9FQ19LRVk7CisrCQlCTl9HRjJtX21vZF9zcXJ0X2FycjsKKysJCWkyZF9FQ1ByaXZhdGVLZXlfYmlvOworKwkJRUNQS1BhcmFtZXRlcnNfcHJpbnRfZnA7CisrCQlwcXVldWVfZmluZDsKKysJCUVDRFNBX1NJR19mcmVlOworKwkJUEVNX3dyaXRlX2Jpb19FQ1BLUGFyYW1ldGVyczsKKysJCVNUT1JFX21ldGhvZF9zZXRfY3RybF9mdW5jdGlvbjsKKysJCVNUT1JFX2xpc3RfcHVibGljX2tleV9lbmQ7CisrCQlFQ19LRVlfc2V0X3ByaXZhdGVfa2V5OworKwkJcHF1ZXVlX3BlZWs7CisrCQlTVE9SRV9nZXRfYXJiaXRyYXJ5OworKwkJU1RPUkVfc3RvcmVfY3JsOworKwkJWDUwOV9wb2xpY3lfbm9kZV9nZXQwX3BvbGljeTsKKysJCVBLQ1MxMl9hZGRfc2FmZXM7CisrCQlCTl9CTElORElOR19jb252ZXJ0X2V4OworKwkJWDUwOV9wb2xpY3lfdHJlZV9mcmVlOworKwkJT1BFTlNTTF9pYTMyY2FwX2xvYzsKKysJCUJOX0dGMm1fcG9seTJhcnI7CisrCQlTVE9SRV9jdHJsOworKwkJU1RPUkVfQVRUUl9JTkZPX2NvbXBhcmU7CisrCQlCTl9nZXQwX25pc3RfcHJpbWVfMjI0OworKwkJaTJkX0VDUGFyYW1ldGVyczsKKysJCWkyZF9FQ1BLUGFyYW1ldGVyczsKKysJCUJOX0dFTkNCX2NhbGw7CisrCQlkMmlfRUNQS1BhcmFtZXRlcnM7CisrCQlTVE9SRV9tZXRoX3NldF9nZW5lcmF0ZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfZ2VuZXJhdGVfZnVuY3Rpb247CisrCQlFTkdJTkVfc2V0X0VDREg7CisrCQlOQU1FX0NPTlNUUkFJTlRTX25ldzsKKysJCVNIQTI1Nl9Jbml0OworKwkJRUNfS0VZX2dldDBfcHVibGljX2tleTsKKysJCVBFTV93cml0ZV9iaW9fRUNfUFVCS0VZOworKwkJU1RPUkVfQVRUUl9JTkZPX3NldF9jc3RyOworKwkJU1RPUkVfbGlzdF9jcmxfbmV4dDsKKysJCVNUT1JFX0FUVFJfSU5GT19pbl9yYW5nZTsKKysJCUVDUGFyYW1ldGVyc19wcmludDsKKysJCVNUT1JFX21ldGhfc2V0X2RlbGV0ZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfZGVsZXRlX2Z1bmN0aW9uOworKwkJU1RPUkVfbGlzdF9jZXJ0aWZpY2F0ZV9uZXh0OworKwkJQVNOMV9nZW5lcmF0ZV9uY29uZjsKKysJCUJVRl9tZW1kdXA7CisrCQlCTl9HRjJtX21vZF9tdWw7CisrCQlTVE9SRV9tZXRoX2dldF9saXN0X25leHRfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X2xpc3RfbmV4dF9mdW5jdGlvbjsKKysJCVNUT1JFX0FUVFJfSU5GT19nZXQwX2RuOworKwkJU1RPUkVfbGlzdF9wcml2YXRlX2tleV9uZXh0OworKwkJRUNfR1JPVVBfc2V0X3NlZWQ7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfdHJ1c3Q7CisrCQlTVE9SRV9BVFRSX0lORk9fZnJlZTsKKysJCVNUT1JFX2dldF9wcml2YXRlX2tleTsKKysJCUVWUF9QS0VZX2dldF9hdHRyX2NvdW50OworKwkJU1RPUkVfQVRUUl9JTkZPX25ldzsKKysJCUVDX0dST1VQX2dldF9jdXJ2ZV9HRjJtOworKwkJU1RPUkVfbWV0aF9zZXRfcmV2b2tlX2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9yZXZva2VfZnVuY3Rpb247CisrCQlTVE9SRV9zdG9yZV9udW1iZXI7CisrCQlCTl9pc19wcmltZV9leDsKKysJCVNUT1JFX3Jldm9rZV9wdWJsaWNfa2V5OworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MF9wYXJhbTsKKysJCVNUT1JFX2RlbGV0ZV9hcmJpdHJhcnk7CisrCQlQRU1fcmVhZF9YNTA5X0NFUlRfUEFJUjsKKysJCVg1MDlfU1RPUkVfc2V0X2RlcHRoOworKwkJRUNEU0FfZ2V0X2V4X2RhdGE7CisrCQlTSEEyMjQ7CisrCQlCSU9fZHVtcF9pbmRlbnRfZnA7CisrCQlFQ19LRVlfc2V0X2dyb3VwOworKwkJQlVGX3N0cm5kdXA7CisrCQlTVE9SRV9saXN0X2NlcnRpZmljYXRlX3N0YXJ0OworKwkJQk5fR0YybV9tb2Q7CisrCQlYNTA5X1JFUV9jaGVja19wcml2YXRlX2tleTsKKysJCUVDX0dST1VQX2dldF9zZWVkX2xlbjsKKysJCUVSUl9sb2FkX1NUT1JFX3N0cmluZ3M7CisrCQlQRU1fcmVhZF9iaW9fRUNfUFVCS0VZOworKwkJU1RPUkVfbGlzdF9wcml2YXRlX2tleV9lbmQ7CisrCQlpMmRfRUNfUFVCS0VZOworKwkJRUNEU0FfZ2V0X2RlZmF1bHRfbWV0aG9kOworKwkJQVNOMV9wdXRfZW9jOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0X2V4cGxpY2l0X3BvbGljeTsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldF9leHBsX3BvbGljeTsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3RhYmxlX2NsZWFudXA7CisrCQlTVE9SRV9tb2RpZnlfcHJpdmF0ZV9rZXk7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9mcmVlOworKwkJRUNfTUVUSE9EX2dldF9maWVsZF90eXBlOworKwkJRUNfR0ZwX25pc3RfbWV0aG9kOworKwkJU1RPUkVfbWV0aF9zZXRfbW9kaWZ5X2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9tb2RpZnlfZnVuY3Rpb247CisrCQlTVE9SRV9wYXJzZV9hdHRyc19uZXh0OworKwkJRU5HSU5FX2xvYWRfcGFkbG9jazsKKysJCUVDX0dST1VQX3NldF9jdXJ2ZV9uYW1lOworKwkJWDUwOV9DRVJUX1BBSVJfaXQ7CisrCQlTVE9SRV9tZXRoX2dldF9yZXZva2VfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X3Jldm9rZV9mdW5jdGlvbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfZ2V0X2Z1bmN0aW9uOworKwkJU1RPUkVfbW9kaWZ5X251bWJlcjsKKysJCVNUT1JFX21ldGhvZF9nZXRfc3RvcmVfZnVuY3Rpb247CisrCQlTVE9SRV9zdG9yZV9wcml2YXRlX2tleTsKKysJCUJOX0dGMm1fbW9kX3Nxcl9hcnI7CisrCQlSU0Ffc2V0dXBfYmxpbmRpbmc7CisrCQlCSU9fc19kYXRhZ3JhbTsKKysJCVNUT1JFX01lbW9yeTsKKysJCXNrX2ZpbmRfZXg7CisrCQlFQ19HUk9VUF9zZXRfY3VydmVfR0YybTsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9FQ0RTQTsKKysJCVBPTElDWV9DT05TVFJBSU5UU19uZXc7CisrCQlCTl9HRjJtX21vZF9zcXJ0OworKwkJRUNESF9zZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlFQ19LRVlfZ2VuZXJhdGVfa2V5OworKwkJU0hBMzg0X1VwZGF0ZTsKKysJCUJOX0dGMm1fYXJyMnBvbHk7CisrCQlTVE9SRV9tZXRob2RfZ2V0X2dldF9mdW5jdGlvbjsKKysJCVNUT1JFX21ldGhfc2V0X2NsZWFudXBfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X2NsZWFudXBfZnVuY3Rpb247CisrCQlFQ19HUk9VUF9jaGVjazsKKysJCWQyaV9FQ1ByaXZhdGVLZXlfYmlvOworKwkJRUNfS0VZX2luc2VydF9rZXlfbWV0aG9kX2RhdGE7CisrCQlTVE9SRV9tZXRoX2dldF9sb2NrX3N0b3JlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9sb2NrX3N0b3JlX2Z1bmN0aW9uOworKwkJWDUwOV9WRVJJRllfUEFSQU1fZ2V0X2RlcHRoOworKwkJU0hBMjI0X0ZpbmFsOworKwkJU1RPUkVfbWV0aF9zZXRfdXBkYXRlX3N0b3JlX2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF91cGRhdGVfc3RvcmVfZnVuY3Rpb247CisrCQlTSEEyMjRfVXBkYXRlOworKwkJZDJpX0VDUHJpdmF0ZUtleTsKKysJCUFTTjFfaXRlbV9uZGVmX2kyZDsKKysJCVNUT1JFX2RlbGV0ZV9wcml2YXRlX2tleTsKKysJCUVSUl9wb3BfdG9fbWFyazsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfU1RPUkU7CisrCQlYNTA5X3BvbGljeV9sZXZlbF9nZXQwX25vZGU7CisrCQlpMmRfUEtDUzdfTkRFRjsKKysJCUVDX0dST1VQX2dldF9kZWdyZWU7CisrCQlBU04xX2dlbmVyYXRlX3YzOworKwkJU1RPUkVfQVRUUl9JTkZPX21vZGlmeV9jc3RyOworKwkJWDUwOV9wb2xpY3lfdHJlZV9sZXZlbF9jb3VudDsKKysJCUJOX0dGMm1fYWRkOworKwkJRUNfS0VZX2dldDBfZ3JvdXA7CisrCQlTVE9SRV9nZW5lcmF0ZV9jcmw7CisrCQlTVE9SRV9zdG9yZV9wdWJsaWNfa2V5OworKwkJWDUwOV9DRVJUX1BBSVJfZnJlZTsKKysJCVNUT1JFX3Jldm9rZV9wcml2YXRlX2tleTsKKysJCUJOX25pc3RfbW9kXzIyNDsKKysJCVNIQTUxMl9GaW5hbDsKKysJCVNUT1JFX0FUVFJfSU5GT19tb2RpZnlfZG47CisrCQlTVE9SRV9tZXRoX2dldF9pbml0aWFsaXNlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9pbml0aWFsaXNlX2Z1bmN0aW9uOworKwkJU1RPUkVfZGVsZXRlX251bWJlcjsKKysJCWkyZF9FQ19QVUJLRVlfYmlvOworKwkJQklPX2RncmFtX25vbl9mYXRhbF9lcnJvcjsKKysJCUVDX0dST1VQX2dldF9hc24xX2ZsYWc7CisrCQlTVE9SRV9BVFRSX0lORk9faW5fZXg7CisrCQlTVE9SRV9saXN0X2NybF9zdGFydDsKKysJCUVDREhfZ2V0X2V4X25ld19pbmRleDsKKysJCVNUT1JFX21ldGhfZ2V0X21vZGlmeV9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfbW9kaWZ5X2Z1bmN0aW9uOworKwkJdjJpX0FTTjFfQklUX1NUUklORzsKKysJCVNUT1JFX3N0b3JlX2NlcnRpZmljYXRlOworKwkJT0JKX2JzZWFyY2hfZXg7CisrCQlYNTA5X1NUT1JFX0NUWF9zZXRfZGVmYXVsdDsKKysJCVNUT1JFX0FUVFJfSU5GT19zZXRfc2hhMXN0cjsKKysJCUJOX0dGMm1fbW9kX2ludjsKKysJCUJOX0dGMm1fbW9kX2V4cDsKKysJCVNUT1JFX21vZGlmeV9wdWJsaWNfa2V5OworKwkJU1RPUkVfbWV0aF9nZXRfbGlzdF9zdGFydF9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfbGlzdF9zdGFydF9mdW5jdGlvbjsKKysJCUVDX0dST1VQX2dldDBfc2VlZDsKKysJCVNUT1JFX3N0b3JlX2FyYml0cmFyeTsKKysJCVNUT1JFX21ldGhfc2V0X3VubG9ja19zdG9yZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfdW5sb2NrX3N0b3JlX2Z1bmN0aW9uOworKwkJQk5fR0YybV9tb2RfZGl2X2FycjsKKysJCUVOR0lORV9zZXRfRUNEU0E7CisrCQlTVE9SRV9jcmVhdGVfbWV0aG9kOworKwkJRUNQS1BhcmFtZXRlcnNfcHJpbnQ7CisrCQlFQ19LRVlfZ2V0MF9wcml2YXRlX2tleTsKKysJCVBFTV93cml0ZV9FQ19QVUJLRVk7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxOworKwkJRUNESF9zZXRfbWV0aG9kOworKwkJdjJpX0dFTkVSQUxfTkFNRV9leDsKKysJCUVDREhfc2V0X2V4X2RhdGE7CisrCQlTVE9SRV9nZW5lcmF0ZV9rZXk7CisrCQlCTl9uaXN0X21vZF81MjE7CisrCQlYNTA5X3BvbGljeV90cmVlX2dldDBfbGV2ZWw7CisrCQlFQ19HUk9VUF9zZXRfcG9pbnRfY29udmVyc2lvbl9mb3JtOworKwkJRUNfR1JPVVBfc2V0X3BvaW50X2NvbnZfZm9ybTsKKysJCVBFTV9yZWFkX0VDX1BVQktFWTsKKysJCWkyZF9FQ0RTQV9TSUc7CisrCQlFQ0RTQV9PcGVuU1NMOworKwkJU1RPUkVfZGVsZXRlX2NybDsKKysJCUVDX0tFWV9nZXRfZW5jX2ZsYWdzOworKwkJQVNOMV9jb25zdF9jaGVja19pbmZpbml0ZV9lbmQ7CisrCQlFVlBfUEtFWV9kZWxldGVfYXR0cjsKKysJCUVDRFNBX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCUVDX1BPSU5UX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzX0dGMm07CisrCQlFQ19QT0lOVF9zZXRfY29tcHJfY29vcmRzX0dGMm07CisrCQlFQ19HUk9VUF9jbXA7CisrCQlTVE9SRV9yZXZva2VfY2VydGlmaWNhdGU7CisrCQlCTl9nZXQwX25pc3RfcHJpbWVfMjU2OworKwkJU1RPUkVfbWV0aF9nZXRfZGVsZXRlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9kZWxldGVfZnVuY3Rpb247CisrCQlTSEEyMjRfSW5pdDsKKysJCVBFTV9yZWFkX0VDUHJpdmF0ZUtleTsKKysJCVNIQTUxMl9Jbml0OworKwkJU1RPUkVfcGFyc2VfYXR0cnNfZW5kcDsKKysJCUJOX3NldF9uZWdhdGl2ZTsKKysJCUVSUl9sb2FkX0VDRFNBX3N0cmluZ3M7CisrCQlFQ19HUk9VUF9nZXRfYmFzaXNfdHlwZTsKKysJCVNUT1JFX2xpc3RfcHVibGljX2tleV9uZXh0OworKwkJaTJ2X0FTTjFfQklUX1NUUklORzsKKysJCVNUT1JFX09CSkVDVF9mcmVlOworKwkJQk5fbmlzdF9tb2RfMzg0OworKwkJaTJkX1g1MDlfQ0VSVF9QQUlSOworKwkJUEVNX3dyaXRlX0VDUEtQYXJhbWV0ZXJzOworKwkJRUNESF9jb21wdXRlX2tleTsKKysJCVNUT1JFX0FUVFJfSU5GT19nZXQwX3NoYTFzdHI7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX0VDREg7CisrCQlwcXVldWVfcG9wOworKwkJU1RPUkVfQVRUUl9JTkZPX2dldDBfY3N0cjsKKysJCVBPTElDWV9DT05TVFJBSU5UU19pdDsKKysJCVNUT1JFX2dldF9leF9uZXdfaW5kZXg7CisrCQlFVlBfUEtFWV9nZXRfYXR0cl9ieV9PQko7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9hZGQwX3BvbGljeTsKKysJCUJOX0dGMm1fbW9kX3NvbHZlX3F1YWQ7CisrCQlTSEEyNTY7CisrCQlpMmRfRUNQcml2YXRlS2V5X2ZwOworKwkJWDUwOV9wb2xpY3lfdHJlZV9nZXQwX3VzZXJfcG9saWNpZXM7CisrCQlYNTA5X3BjeV90cmVlX2dldDBfdXNyX3BvbGljaWVzOworKwkJT1BFTlNTTF9ESVJfcmVhZDsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfRUNEU0E7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9sb29rdXA7CisrCQlFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGMm07CisrCQlFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3Jkc19HRjJtOworKwkJRUNfR1JPVVBfZHVwOworKwkJRU5HSU5FX2dldF9kZWZhdWx0X0VDRFNBOworKwkJRUNfS0VZX25ldzsKKysJCVNIQTI1Nl9UcmFuc2Zvcm07CisrCQlFQ19LRVlfc2V0X2VuY19mbGFnczsKKysJCUVDRFNBX3ZlcmlmeTsKKysJCUVDX1BPSU5UX3BvaW50MmhleDsKKysJCUVOR0lORV9nZXRfU1RPUkU7CisrCQlTSEE1MTI7CisrCQlTVE9SRV9nZXRfY2VydGlmaWNhdGU7CisrCQlFQ0RTQV9kb19zaWduX2V4OworKwkJRUNEU0FfZG9fdmVyaWZ5OworKwkJZDJpX0VDUHJpdmF0ZUtleV9mcDsKKysJCVNUT1JFX2RlbGV0ZV9jZXJ0aWZpY2F0ZTsKKysJCVNIQTUxMl9UcmFuc2Zvcm07CisrCQlYNTA5X1NUT1JFX3NldDFfcGFyYW07CisrCQlTVE9SRV9tZXRob2RfZ2V0X2N0cmxfZnVuY3Rpb247CisrCQlTVE9SRV9mcmVlOworKwkJUEVNX3dyaXRlX0VDUHJpdmF0ZUtleTsKKysJCVNUT1JFX21ldGhfZ2V0X3VubG9ja19zdG9yZV9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfdW5sb2NrX3N0b3JlX2Z1bmN0aW9uOworKwkJU1RPUkVfZ2V0X2V4X2RhdGE7CisrCQlFQ19LRVlfc2V0X3B1YmxpY19rZXk7CisrCQlQRU1fcmVhZF9FQ1BLUGFyYW1ldGVyczsKKysJCVg1MDlfQ0VSVF9QQUlSX25ldzsKKysJCUVOR0lORV9yZWdpc3Rlcl9TVE9SRTsKKysJCVJTQV9nZW5lcmF0ZV9rZXlfZXg7CisrCQlEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leDsKKysJCUVDUGFyYW1ldGVyc19wcmludF9mcDsKKysJCVg1MDlWM19OQU1FX2Zyb21fc2VjdGlvbjsKKysJCUVWUF9QS0VZX2FkZDFfYXR0cjsKKysJCVNUT1JFX21vZGlmeV9jcmw7CisrCQlTVE9SRV9saXN0X3ByaXZhdGVfa2V5X3N0YXJ0OworKwkJUE9MSUNZX01BUFBJTkdTX2l0OworKwkJR0VORVJBTF9TVUJUUkVFX2l0OworKwkJRUNfR1JPVVBfZ2V0X2N1cnZlX25hbWU7CisrCQlQRU1fd3JpdGVfWDUwOV9DRVJUX1BBSVI7CisrCQlCSU9fZHVtcF9pbmRlbnRfY2I7CisrCQlkMmlfWDUwOV9DRVJUX1BBSVI7CisrCQlTVE9SRV9saXN0X3ByaXZhdGVfa2V5X2VuZHA7CisrCQlhc24xX2NvbnN0X0ZpbmlzaDsKKysJCWkyZF9FQ19QVUJLRVlfZnA7CisrCQlCTl9uaXN0X21vZF8yNTY7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9hZGQwX3RhYmxlOworKwkJcHF1ZXVlX2ZyZWU7CisrCQlCTl9CTElORElOR19jcmVhdGVfcGFyYW07CisrCQlFQ0RTQV9zaXplOworKwkJZDJpX0VDX1BVQktFWV9iaW87CisrCQlCTl9nZXQwX25pc3RfcHJpbWVfNTIxOworKwkJU1RPUkVfQVRUUl9JTkZPX21vZGlmeV9zaGExc3RyOworKwkJQk5fZ2VuZXJhdGVfcHJpbWVfZXg7CisrCQlFQ19HUk9VUF9uZXdfYnlfY3VydmVfbmFtZTsKKysJCVNIQTI1Nl9GaW5hbDsKKysJCURIX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXg7CisrCQlQRU1fcmVhZF9iaW9fRUNQcml2YXRlS2V5OworKwkJU1RPUkVfbWV0aF9nZXRfY2xlYW51cF9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfY2xlYW51cF9mdW5jdGlvbjsKKysJCUVOR0lORV9nZXRfRUNESDsKKysJCWQyaV9FQ0RTQV9TSUc7CisrCQlCTl9pc19wcmltZV9mYXN0dGVzdF9leDsKKysJCUVDRFNBX3NpZ247CisrCQlYNTA5X3BvbGljeV9jaGVjazsKKysJCUVWUF9QS0VZX2dldF9hdHRyX2J5X05JRDsKKysJCVNUT1JFX3NldF9leF9kYXRhOworKwkJRU5HSU5FX2dldF9FQ0RTQTsKKysJCUVWUF9lY2RzYTsKKysJCUJOX0JMSU5ESU5HX2dldF9mbGFnczsKKysJCVBLQ1MxMl9hZGRfY2VydDsKKysJCVNUT1JFX09CSkVDVF9uZXc7CisrCQlFUlJfbG9hZF9FQ0RIX3N0cmluZ3M7CisrCQlFQ19LRVlfZHVwOworKwkJRVZQX0NJUEhFUl9DVFhfcmFuZF9rZXk7CisrCQlFQ0RTQV9zZXRfbWV0aG9kOworKwkJYTJpX0lQQUREUkVTU19OQzsKKysJCWQyaV9FQ1BhcmFtZXRlcnM7CisrCQlTVE9SRV9saXN0X2NlcnRpZmljYXRlX2VuZDsKKysJCVNUT1JFX2dldF9jcmw7CisrCQlYNTA5X1BPTElDWV9OT0RFX3ByaW50OworKwkJU0hBMzg0X0luaXQ7CisrCQlFQ19HRjJtX3NpbXBsZV9tZXRob2Q7CisrCQlFQ0RTQV9zZXRfZXhfZGF0YTsKKysJCVNIQTM4NF9GaW5hbDsKKysJCVBLQ1M3X3NldF9kaWdlc3Q7CisrCQlFQ19LRVlfcHJpbnQ7CisrCQlTVE9SRV9tZXRoX3NldF9sb2NrX3N0b3JlX2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9sb2NrX3N0b3JlX2Z1bmN0aW9uOworKwkJRUNEU0FfZ2V0X2V4X25ld19pbmRleDsKKysJCVNIQTM4NDsKKysJCVBPTElDWV9NQVBQSU5HX25ldzsKKysJCVNUT1JFX2xpc3RfY2VydGlmaWNhdGVfZW5kcDsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDBfcG9saWN5X3RyZWU7CisrCQlFQ19HUk9VUF9zZXRfYXNuMV9mbGFnOworKwkJRUNfS0VZX2NoZWNrX2tleTsKKysJCWQyaV9FQ19QVUJLRVlfZnA7CisrCQlQS0NTN19zZXQwX3R5cGVfb3RoZXI7CisrCQlQRU1fcmVhZF9iaW9fWDUwOV9DRVJUX1BBSVI7CisrCQlwcXVldWVfbmV4dDsKKysJCVNUT1JFX21ldGhfZ2V0X2xpc3RfZW5kX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9saXN0X2VuZF9mdW5jdGlvbjsKKysJCUVWUF9QS0VZX2FkZDFfYXR0cl9ieV9PQko7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfdGltZTsKKysJCXBxdWV1ZV9uZXc7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfRUNESDsKKysJCVNUT1JFX25ld19tZXRob2Q7CisrCQlQS0NTMTJfYWRkX2tleTsKKysJCURTT19tZXJnZTsKKysJCUVDX1BPSU5UX2hleDJwb2ludDsKKysJCUJJT19kdW1wX2NiOworKwkJU0hBMjU2X1VwZGF0ZTsKKysJCXBxdWV1ZV9pbnNlcnQ7CisrCQlwaXRlbV9mcmVlOworKwkJQk5fR0YybV9tb2RfaW52X2FycjsKKysJCUVOR0lORV91bnJlZ2lzdGVyX0VDRFNBOworKwkJQk5fQkxJTkRJTkdfc2V0X3RocmVhZF9pZDsKKysJCWdldF9yZmMzNTI2X3ByaW1lXzgxOTI7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9jbGVhcl9mbGFnczsKKysJCWdldF9yZmMyNDA5X3ByaW1lXzEwMjQ7CisrCQlESF9jaGVja19wdWJfa2V5OworKwkJZ2V0X3JmYzM1MjZfcHJpbWVfMjA0ODsKKysJCWdldF9yZmMzNTI2X3ByaW1lXzYxNDQ7CisrCQlnZXRfcmZjMzUyNl9wcmltZV8xNTM2OworKwkJZ2V0X3JmYzM1MjZfcHJpbWVfMzA3MjsKKysJCWdldF9yZmMzNTI2X3ByaW1lXzQwOTY7CisrCQlnZXRfcmZjMjQwOV9wcmltZV83Njg7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXRfZmxhZ3M7CisrCQlFVlBfQ0lQSEVSX0NUWF9uZXc7CisrCQlFVlBfQ0lQSEVSX0NUWF9mcmVlOworKwkJQ2FtZWxsaWFfY2JjX2VuY3J5cHQ7CisrCQlDYW1lbGxpYV9jZmIxMjhfZW5jcnlwdDsKKysJCUNhbWVsbGlhX2NmYjFfZW5jcnlwdDsKKysJCUNhbWVsbGlhX2NmYjhfZW5jcnlwdDsKKysJCUNhbWVsbGlhX2N0cjEyOF9lbmNyeXB0OworKwkJQ2FtZWxsaWFfY2Zicl9lbmNyeXB0X2Jsb2NrOworKwkJQ2FtZWxsaWFfZGVjcnlwdDsKKysJCUNhbWVsbGlhX2VjYl9lbmNyeXB0OworKwkJQ2FtZWxsaWFfZW5jcnlwdDsKKysJCUNhbWVsbGlhX29mYjEyOF9lbmNyeXB0OworKwkJQ2FtZWxsaWFfc2V0X2tleTsKKysJCUVWUF9jYW1lbGxpYV8xMjhfY2JjOworKwkJRVZQX2NhbWVsbGlhXzEyOF9jZmIxMjg7CisrCQlFVlBfY2FtZWxsaWFfMTI4X2NmYjE7CisrCQlFVlBfY2FtZWxsaWFfMTI4X2NmYjg7CisrCQlFVlBfY2FtZWxsaWFfMTI4X2VjYjsKKysJCUVWUF9jYW1lbGxpYV8xMjhfb2ZiOworKwkJRVZQX2NhbWVsbGlhXzE5Ml9jYmM7CisrCQlFVlBfY2FtZWxsaWFfMTkyX2NmYjEyODsKKysJCUVWUF9jYW1lbGxpYV8xOTJfY2ZiMTsKKysJCUVWUF9jYW1lbGxpYV8xOTJfY2ZiODsKKysJCUVWUF9jYW1lbGxpYV8xOTJfZWNiOworKwkJRVZQX2NhbWVsbGlhXzE5Ml9vZmI7CisrCQlFVlBfY2FtZWxsaWFfMjU2X2NiYzsKKysJCUVWUF9jYW1lbGxpYV8yNTZfY2ZiMTI4OworKwkJRVZQX2NhbWVsbGlhXzI1Nl9jZmIxOworKwkJRVZQX2NhbWVsbGlhXzI1Nl9jZmI4OworKwkJRVZQX2NhbWVsbGlhXzI1Nl9lY2I7CisrCQlFVlBfY2FtZWxsaWFfMjU2X29mYjsKKysJCWEyaV9pcGFkZDsKKysJCUFTSWRlbnRpZmllcnNfZnJlZTsKKysJCWkyZF9BU0lkT3JSYW5nZTsKKysJCUVWUF9DSVBIRVJfYmxvY2tfc2l6ZTsKKysJCXYzX2FzaWRfaXNfY2Fub25pY2FsOworKwkJSVBBZGRyZXNzQ2hvaWNlX2ZyZWU7CisrCQlFVlBfQ0lQSEVSX0NUWF9zZXRfYXBwX2RhdGE7CisrCQlCSU9fc2V0X2NhbGxiYWNrX2FyZzsKKysJCXYzX2FkZHJfYWRkX3ByZWZpeDsKKysJCUlQQWRkcmVzc09yUmFuZ2VfaXQ7CisrCQlCSU9fc2V0X2ZsYWdzOworKwkJQVNJZGVudGlmaWVyc19pdDsKKysJCXYzX2FkZHJfZ2V0X3JhbmdlOworKwkJQklPX21ldGhvZF90eXBlOworKwkJdjNfYWRkcl9pbmhlcml0czsKKysJCUlQQWRkcmVzc0Nob2ljZV9pdDsKKysJCUFFU19pZ2VfZW5jcnlwdDsKKysJCXYzX2FkZHJfYWRkX3JhbmdlOworKwkJRVZQX0NJUEhFUl9DVFhfbmlkOworKwkJZDJpX0FTUmFuZ2U7CisrCQl2M19hZGRyX2FkZF9pbmhlcml0OworKwkJdjNfYXNpZF9hZGRfaWRfb3JfcmFuZ2U7CisrCQl2M19hZGRyX3ZhbGlkYXRlX3Jlc291cmNlX3NldDsKKysJCUVWUF9DSVBIRVJfaXZfbGVuZ3RoOworKwkJRVZQX01EX3R5cGU7CisrCQl2M19hc2lkX2Nhbm9uaXplOworKwkJSVBBZGRyZXNzUmFuZ2VfZnJlZTsKKysJCXYzX2FzaWRfYWRkX2luaGVyaXQ7CisrCQlFVlBfQ0lQSEVSX0NUWF9rZXlfbGVuZ3RoOworKwkJSVBBZGRyZXNzUmFuZ2VfbmV3OworKwkJQVNJZE9yUmFuZ2VfbmV3OworKwkJRVZQX01EX3NpemU7CisrCQlFVlBfTURfQ1RYX3Rlc3RfZmxhZ3M7CisrCQlCSU9fY2xlYXJfZmxhZ3M7CisrCQlpMmRfQVNSYW5nZTsKKysJCUlQQWRkcmVzc1JhbmdlX2l0OworKwkJSVBBZGRyZXNzQ2hvaWNlX25ldzsKKysJCUFTSWRlbnRpZmllckNob2ljZV9uZXc7CisrCQlBU1JhbmdlX2ZyZWU7CisrCQlFVlBfTURfcGtleV90eXBlOworKwkJRVZQX01EX0NUWF9jbGVhcl9mbGFnczsKKysJCUlQQWRkcmVzc0ZhbWlseV9mcmVlOworKwkJaTJkX0lQQWRkcmVzc0ZhbWlseTsKKysJCUlQQWRkcmVzc09yUmFuZ2VfbmV3OworKwkJRVZQX0NJUEhFUl9mbGFnczsKKysJCXYzX2FzaWRfdmFsaWRhdGVfcmVzb3VyY2Vfc2V0OworKwkJZDJpX0lQQWRkcmVzc1JhbmdlOworKwkJQUVTX2JpX2lnZV9lbmNyeXB0OworKwkJQklPX2dldF9jYWxsYmFjazsKKysJCUlQQWRkcmVzc09yUmFuZ2VfZnJlZTsKKysJCXYzX2FkZHJfc3Vic2V0OworKwkJZDJpX0lQQWRkcmVzc0ZhbWlseTsKKysJCXYzX2FzaWRfc3Vic2V0OworKwkJQklPX3Rlc3RfZmxhZ3M7CisrCQlpMmRfQVNJZGVudGlmaWVyQ2hvaWNlOworKwkJQVNSYW5nZV9pdDsKKysJCWQyaV9BU0lkZW50aWZpZXJzOworKwkJQVNSYW5nZV9uZXc7CisrCQlkMmlfSVBBZGRyZXNzQ2hvaWNlOworKwkJdjNfYWRkcl9nZXRfYWZpOworKwkJRVZQX0NJUEhFUl9rZXlfbGVuZ3RoOworKwkJRVZQX0NpcGhlcjsKKysJCWkyZF9JUEFkZHJlc3NPclJhbmdlOworKwkJQVNJZE9yUmFuZ2VfaXQ7CisrCQlFVlBfQ0lQSEVSX25pZDsKKysJCWkyZF9JUEFkZHJlc3NDaG9pY2U7CisrCQlFVlBfQ0lQSEVSX0NUWF9ibG9ja19zaXplOworKwkJQVNJZGVudGlmaWVyc19uZXc7CisrCQl2M19hZGRyX3ZhbGlkYXRlX3BhdGg7CisrCQlJUEFkZHJlc3NGYW1pbHlfbmV3OworKwkJRVZQX01EX0NUWF9zZXRfZmxhZ3M7CisrCQl2M19hZGRyX2lzX2Nhbm9uaWNhbDsKKysJCWkyZF9JUEFkZHJlc3NSYW5nZTsKKysJCUlQQWRkcmVzc0ZhbWlseV9pdDsKKysJCXYzX2FzaWRfaW5oZXJpdHM7CisrCQlFVlBfQ0lQSEVSX0NUWF9jaXBoZXI7CisrCQlFVlBfQ0lQSEVSX0NUWF9nZXRfYXBwX2RhdGE7CisrCQlFVlBfTURfYmxvY2tfc2l6ZTsKKysJCUVWUF9DSVBIRVJfQ1RYX2ZsYWdzOworKwkJdjNfYXNpZF92YWxpZGF0ZV9wYXRoOworKwkJZDJpX0lQQWRkcmVzc09yUmFuZ2U7CisrCQl2M19hZGRyX2Nhbm9uaXplOworKwkJQVNJZGVudGlmaWVyQ2hvaWNlX2l0OworKwkJRVZQX01EX0NUWF9tZDsKKysJCWQyaV9BU0lkZW50aWZpZXJDaG9pY2U7CisrCQlCSU9fbWV0aG9kX25hbWU7CisrCQlFVlBfQ0lQSEVSX0NUWF9pdl9sZW5ndGg7CisrCQlBU0lkT3JSYW5nZV9mcmVlOworKwkJQVNJZGVudGlmaWVyQ2hvaWNlX2ZyZWU7CisrCQlCSU9fZ2V0X2NhbGxiYWNrX2FyZzsKKysJCUJJT19zZXRfY2FsbGJhY2s7CisrCQlkMmlfQVNJZE9yUmFuZ2U7CisrCQlpMmRfQVNJZGVudGlmaWVyczsKKysJCVNFRURfZGVjcnlwdDsKKysJCVNFRURfZW5jcnlwdDsKKysJCVNFRURfY2JjX2VuY3J5cHQ7CisrCQlFVlBfc2VlZF9vZmI7CisrCQlTRUVEX2NmYjEyOF9lbmNyeXB0OworKwkJU0VFRF9vZmIxMjhfZW5jcnlwdDsKKysJCUVWUF9zZWVkX2NiYzsKKysJCVNFRURfZWNiX2VuY3J5cHQ7CisrCQlFVlBfc2VlZF9lY2I7CisrCQlTRUVEX3NldF9rZXk7CisrCQlFVlBfc2VlZF9jZmIxMjg7CisrCQlYNTA5X0VYVEVOU0lPTlNfaXQ7CisrCQlYNTA5X2dldDFfb2NzcDsKKysJCU9DU1BfUkVRX0NUWF9mcmVlOworKwkJaTJkX1g1MDlfRVhURU5TSU9OUzsKKysJCU9DU1Bfc2VuZHJlcV9uYmlvOworKwkJT0NTUF9zZW5kcmVxX25ldzsKKysJCWQyaV9YNTA5X0VYVEVOU0lPTlM7CisrCQlYNTA5X0FMR09SU19pdDsKKysJCVg1MDlfQUxHT1JfZ2V0MDsKKysJCVg1MDlfQUxHT1Jfc2V0MDsKKysJCUFFU191bndyYXBfa2V5OworKwkJQUVTX3dyYXBfa2V5OworKwkJWDUwOWF0X2dldDBfZGF0YV9ieV9PQko7CisrCQlBU04xX1RZUEVfc2V0MTsKKysJCUFTTjFfU1RSSU5HX3NldDA7CisrCQlpMmRfWDUwOV9BTEdPUlM7CisrCQlCSU9fZl96bGliOworKwkJQ09NUF96bGliX2NsZWFudXA7CisrCQlkMmlfWDUwOV9BTEdPUlM7CisrCQlDTVNfUmVjZWlwdFJlcXVlc3RfZnJlZTsKKysJCVBFTV93cml0ZV9DTVM7CisrCQlDTVNfYWRkMF9DZXJ0aWZpY2F0ZUNob2ljZXM7CisrCQlDTVNfdW5zaWduZWRfYWRkMV9hdHRyX2J5X09CSjsKKysJCUVSUl9sb2FkX0NNU19zdHJpbmdzOworKwkJQ01TX3NpZ25fcmVjZWlwdDsKKysJCWkyZF9DTVNfQ29udGVudEluZm87CisrCQlDTVNfc2lnbmVkX2RlbGV0ZV9hdHRyOworKwkJZDJpX0NNU19iaW87CisrCQlDTVNfdW5zaWduZWRfZ2V0X2F0dHJfYnlfTklEOworKwkJQ01TX3ZlcmlmeTsKKysJCVNNSU1FX3JlYWRfQ01TOworKwkJQ01TX2RlY3J5cHRfc2V0MV9rZXk7CisrCQlDTVNfU2lnbmVySW5mb19nZXQwX2FsZ3M7CisrCQlDTVNfYWRkMV9jZXJ0OworKwkJQ01TX3NldF9kZXRhY2hlZDsKKysJCUNNU19lbmNyeXB0OworKwkJQ01TX0VudmVsb3BlZERhdGFfY3JlYXRlOworKwkJQ01TX3VuY29tcHJlc3M7CisrCQlDTVNfYWRkMF9jcmw7CisrCQlDTVNfU2lnbmVySW5mb192ZXJpZnlfY29udGVudDsKKysJCUNNU191bnNpZ25lZF9nZXQwX2RhdGFfYnlfT0JKOworKwkJUEVNX3dyaXRlX2Jpb19DTVM7CisrCQlDTVNfdW5zaWduZWRfZ2V0X2F0dHI7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rdHJpX2NlcnRfY21wOworKwkJQ01TX1JlY2lwaWVudEluZm9fa3RyaV9nZXQwX2FsZ3M7CisrCQlDTVNfUmVjaXBJbmZvX2t0cmlfZ2V0MF9hbGdzOworKwkJQ01TX0NvbnRlbnRJbmZvX2ZyZWU7CisrCQlDTVNfZmluYWw7CisrCQlDTVNfYWRkX3NpbXBsZV9zbWltZWNhcDsKKysJCUNNU19TaWduZXJJbmZvX3ZlcmlmeTsKKysJCUNNU19kYXRhOworKwkJQ01TX0NvbnRlbnRJbmZvX2l0OworKwkJZDJpX0NNU19SZWNlaXB0UmVxdWVzdDsKKysJCUNNU19jb21wcmVzczsKKysJCUNNU19kaWdlc3RfY3JlYXRlOworKwkJQ01TX1NpZ25lckluZm9fY2VydF9jbXA7CisrCQlDTVNfU2lnbmVySW5mb19zaWduOworKwkJQ01TX2RhdGFfY3JlYXRlOworKwkJaTJkX0NNU19iaW87CisrCQlDTVNfRW5jcnlwdGVkRGF0YV9zZXQxX2tleTsKKysJCUNNU19kZWNyeXB0OworKwkJaW50X3NtaW1lX3dyaXRlX0FTTjE7CisrCQlDTVNfdW5zaWduZWRfZGVsZXRlX2F0dHI7CisrCQlDTVNfdW5zaWduZWRfZ2V0X2F0dHJfY291bnQ7CisrCQlDTVNfYWRkX3NtaW1lY2FwOworKwkJUEVNX3JlYWRfQ01TOworKwkJQ01TX3NpZ25lZF9nZXRfYXR0cl9ieV9PQko7CisrCQlkMmlfQ01TX0NvbnRlbnRJbmZvOworKwkJQ01TX2FkZF9zdGFuZGFyZF9zbWltZWNhcDsKKysJCUNNU19Db250ZW50SW5mb19uZXc7CisrCQlDTVNfUmVjaXBpZW50SW5mb190eXBlOworKwkJQ01TX2dldDBfdHlwZTsKKysJCUNNU19pc19kZXRhY2hlZDsKKysJCUNNU19zaWduOworKwkJQ01TX3NpZ25lZF9hZGQxX2F0dHI7CisrCQlDTVNfdW5zaWduZWRfZ2V0X2F0dHJfYnlfT0JKOworKwkJU01JTUVfd3JpdGVfQ01TOworKwkJQ01TX0VuY3J5cHRlZERhdGFfZGVjcnlwdDsKKysJCUNNU19nZXQwX1JlY2lwaWVudEluZm9zOworKwkJQ01TX2FkZDBfUmV2b2NhdGlvbkluZm9DaG9pY2U7CisrCQlDTVNfZGVjcnlwdF9zZXQxX3BrZXk7CisrCQlDTVNfU2lnbmVySW5mb19zZXQxX3NpZ25lcl9jZXJ0OworKwkJQ01TX2dldDBfc2lnbmVyczsKKysJCUNNU19SZWNlaXB0UmVxdWVzdF9nZXQwX3ZhbHVlczsKKysJCUNNU19zaWduZWRfZ2V0MF9kYXRhX2J5X09CSjsKKysJCUNNU19nZXQwX1NpZ25lckluZm9zOworKwkJQ01TX2FkZDBfY2VydDsKKysJCUNNU19FbmNyeXB0ZWREYXRhX2VuY3J5cHQ7CisrCQlDTVNfZGlnZXN0X3ZlcmlmeTsKKysJCUNNU19zZXQxX3NpZ25lcnNfY2VydHM7CisrCQlDTVNfc2lnbmVkX2dldF9hdHRyOworKwkJQ01TX1JlY2lwaWVudEluZm9fc2V0MF9rZXk7CisrCQlDTVNfU2lnbmVkRGF0YV9pbml0OworKwkJQ01TX1JlY2lwaWVudEluZm9fa2VrcmlfZ2V0MF9pZDsKKysJCUNNU192ZXJpZnlfcmVjZWlwdDsKKysJCUNNU19SZWNlaXB0UmVxdWVzdF9pdDsKKysJCVBFTV9yZWFkX2Jpb19DTVM7CisrCQlDTVNfZ2V0MV9jcmxzOworKwkJQ01TX2FkZDBfcmVjaXBpZW50X2tleTsKKysJCVNNSU1FX3JlYWRfQVNOMTsKKysJCUNNU19SZWNlaXB0UmVxdWVzdF9uZXc7CisrCQlDTVNfZ2V0MF9jb250ZW50OworKwkJQ01TX2dldDFfUmVjZWlwdFJlcXVlc3Q7CisrCQlDTVNfc2lnbmVkX2FkZDFfYXR0cl9ieV9PQko7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rZWtyaV9pZF9jbXA7CisrCQlDTVNfYWRkMV9SZWNlaXB0UmVxdWVzdDsKKysJCUNNU19TaWduZXJJbmZvX2dldDBfc2lnbmVyX2lkOworKwkJQ01TX3Vuc2lnbmVkX2FkZDFfYXR0cl9ieV9OSUQ7CisrCQlDTVNfdW5zaWduZWRfYWRkMV9hdHRyOworKwkJQ01TX3NpZ25lZF9nZXRfYXR0cl9ieV9OSUQ7CisrCQlDTVNfZ2V0MV9jZXJ0czsKKysJCUNNU19zaWduZWRfYWRkMV9hdHRyX2J5X05JRDsKKysJCUNNU191bnNpZ25lZF9hZGQxX2F0dHJfYnlfdHh0OworKwkJQ01TX2RhdGFGaW5hbDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2t0cmlfZ2V0MF9zaWduZXJfaWQ7CisrCQlDTVNfUmVjaXBJbmZvX2t0cmlfZ2V0MF9zaWdyX2lkOworKwkJaTJkX0NNU19SZWNlaXB0UmVxdWVzdDsKKysJCUNNU19hZGQxX3JlY2lwaWVudF9jZXJ0OworKwkJQ01TX2RhdGFJbml0OworKwkJQ01TX3NpZ25lZF9hZGQxX2F0dHJfYnlfdHh0OworKwkJQ01TX1JlY2lwaWVudEluZm9fZGVjcnlwdDsKKysJCUNNU19zaWduZWRfZ2V0X2F0dHJfY291bnQ7CisrCQlDTVNfZ2V0MF9lQ29udGVudFR5cGU7CisrCQlDTVNfc2V0MV9lQ29udGVudFR5cGU7CisrCQlDTVNfUmVjZWlwdFJlcXVlc3RfY3JlYXRlMDsKKysJCUNNU19hZGQxX3NpZ25lcjsKKysJCUNNU19SZWNpcGllbnRJbmZvX3NldDBfcGtleTsKKysJCUVOR0lORV9zZXRfbG9hZF9zc2xfY2xpZW50X2NlcnRfZnVuY3Rpb247CisrCQlFTkdJTkVfc2V0X2xkX3NzbF9jbG50X2NlcnRfZm47CisrCQlFTkdJTkVfZ2V0X3NzbF9jbGllbnRfY2VydF9mdW5jdGlvbjsKKysJCUVOR0lORV9nZXRfc3NsX2NsaWVudF9jZXJ0X2ZuOworKwkJRU5HSU5FX2xvYWRfc3NsX2NsaWVudF9jZXJ0OworKwkJRU5HSU5FX2xvYWRfY2FwaTsKKysJCU9QRU5TU0xfaXNzZXJ2aWNlOworKwkJRklQU19kc2Ffc2lnX2RlY29kZTsKKysJCUVWUF9DSVBIRVJfQ1RYX2NsZWFyX2ZsYWdzOworKwkJRklQU19yYW5kX3N0YXR1czsKKysJCUZJUFNfcmFuZF9zZXRfa2V5OworKwkJQ1JZUFRPX3NldF9tZW1faW5mb19mdW5jdGlvbnM7CisrCQlSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXg7CisrCQlpbnRfRVJSX3NldF9zdGF0ZV9mdW5jOworKwkJaW50X0VWUF9NRF9zZXRfZW5naW5lX2NhbGxiYWNrczsKKysJCWludF9DUllQVE9fc2V0X2RvX2R5bmxvY2tfY2FsbGJhY2s7CisrCQlGSVBTX3JuZ19zdGljazsKKysJCUVWUF9DSVBIRVJfQ1RYX3NldF9mbGFnczsKKysJCUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXg7CisrCQlGSVBTX3NlbGZ0ZXN0X2NoZWNrOworKwkJRklQU19yYW5kX3NldF9kdDsKKysJCUNSWVBUT19kYmdfcG9wX2luZm87CisrCQlGSVBTX2RzYV9mcmVlOworKwkJUlNBX1g5MzFfZGVyaXZlX2V4OworKwkJRklQU19yc2FfbmV3OworKwkJRklQU19yYW5kX2J5dGVzOworKwkJZmlwc19jaXBoZXJfdGVzdDsKKysJCUVWUF9DSVBIRVJfQ1RYX3Rlc3RfZmxhZ3M7CisrCQlDUllQVE9fbWFsbG9jX2RlYnVnX2luaXQ7CisrCQlDUllQVE9fZGJnX3B1c2hfaW5mbzsKKysJCUZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuOworKwkJRklQU19kaF9uZXc7CisrCQlGSVBTX2NvcnJ1cHRfZHNhX2tleWdlbjsKKysJCUZJUFNfZGhfZnJlZTsKKysJCWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdDsKKysJCUVWUF9hZGRfYWxnX21vZHVsZTsKKysJCWludF9SQU5EX2luaXRfZW5naW5lX2NhbGxiYWNrczsKKysJCWludF9FVlBfQ0lQSEVSX3NldF9lbmdpbmVfY2FsbGJhY2tzOworKwkJaW50X0VWUF9NRF9pbml0X2VuZ2luZV9jYWxsYmFja3M7CisrCQlGSVBTX3JhbmRfdGVzdF9tb2RlOworKwkJRklQU19yYW5kX3Jlc2V0OworKwkJRklQU19kc2FfbmV3OworKwkJaW50X1JBTkRfc2V0X2NhbGxiYWNrczsKKysJCUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4OworKwkJaW50X0VSUl9saWJfaW5pdDsKKysJCWludF9FVlBfQ0lQSEVSX2luaXRfZW5naW5lX2NhbGxiYWNrczsKKysJCUZJUFNfcnNhX2ZyZWU7CisrCQlGSVBTX2RzYV9zaWdfZW5jb2RlOworKwkJQ1JZUFRPX2RiZ19yZW1vdmVfYWxsX2luZm87CisrCQlPUEVOU1NMX2luaXQ7CisrCQlDUllQVE9fc3RyZHVwOworKwkJSlBBS0VfU1RFUDNBX3Byb2Nlc3M7CisrCQlKUEFLRV9TVEVQMV9yZWxlYXNlOworKwkJSlBBS0VfZ2V0X3NoYXJlZF9rZXk7CisrCQlKUEFLRV9TVEVQM0JfaW5pdDsKKysJCUpQQUtFX1NURVAxX2dlbmVyYXRlOworKwkJSlBBS0VfU1RFUDFfaW5pdDsKKysJCUpQQUtFX1NURVAzQl9wcm9jZXNzOworKwkJSlBBS0VfU1RFUDJfZ2VuZXJhdGU7CisrCQlKUEFLRV9DVFhfbmV3OworKwkJSlBBS0VfQ1RYX2ZyZWU7CisrCQlKUEFLRV9TVEVQM0JfcmVsZWFzZTsKKysJCUpQQUtFX1NURVAzQV9yZWxlYXNlOworKwkJSlBBS0VfU1RFUDJfcHJvY2VzczsKKysJCUpQQUtFX1NURVAzQl9nZW5lcmF0ZTsKKysJCUpQQUtFX1NURVAxX3Byb2Nlc3M7CisrCQlKUEFLRV9TVEVQM0FfZ2VuZXJhdGU7CisrCQlKUEFLRV9TVEVQMl9yZWxlYXNlOworKwkJSlBBS0VfU1RFUDNBX2luaXQ7CisrCQlFUlJfbG9hZF9KUEFLRV9zdHJpbmdzOworKwkJSlBBS0VfU1RFUDJfaW5pdDsKKysJCXBxdWV1ZV9zaXplOworKwkJaTJkX1RTX0FDQ1VSQUNZOworKwkJaTJkX1RTX01TR19JTVBSSU5UX2ZwOworKwkJaTJkX1RTX01TR19JTVBSSU5UOworKwkJRVZQX1BLRVlfcHJpbnRfcHVibGljOworKwkJRVZQX1BLRVlfQ1RYX25ldzsKKysJCWkyZF9UU19UU1RfSU5GTzsKKysJCUVWUF9QS0VZX2FzbjFfZmluZDsKKysJCURTT19NRVRIT0RfYmVvczsKKysJCVRTX0NPTkZfbG9hZF9jZXJ0OworKwkJVFNfUkVRX2dldF9leHQ7CisrCQlFVlBfUEtFWV9zaWduX2luaXQ7CisrCQlBU04xX2l0ZW1fcHJpbnQ7CisrCQlUU19UU1RfSU5GT19zZXRfbm9uY2U7CisrCQlUU19SRVNQX2R1cDsKKysJCUVOR0lORV9yZWdpc3Rlcl9wa2V5X21ldGhzOworKwkJRVZQX1BLRVlfYXNuMV9hZGQwOworKwkJUEtDUzdfYWRkMF9hdHRyaWJfc2lnbmluZ190aW1lOworKwkJaTJkX1RTX1RTVF9JTkZPX2ZwOworKwkJQklPX2FzbjFfZ2V0X3ByZWZpeDsKKysJCVRTX1RTVF9JTkZPX3NldF90aW1lOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfZGVjcnlwdDsKKysJCUVWUF9QS0VZX3NldF90eXBlX3N0cjsKKysJCUVWUF9QS0VZX0NUWF9nZXRfa2V5Z2VuX2luZm87CisrCQlUU19SRVFfc2V0X3BvbGljeV9pZDsKKysJCWQyaV9UU19SRVNQX2ZwOworKwkJRU5HSU5FX2dldF9wa2V5X2FzbjFfbWV0aF9lbmdpbmU7CisrCQlFTkdJTkVfZ2V0X3BrZXlfYXNuMV9tZXRoX2VuZzsKKysJCVdISVJMUE9PTF9Jbml0OworKwkJVFNfUkVTUF9zZXRfc3RhdHVzX2luZm87CisrCQlFVlBfUEtFWV9rZXlnZW47CisrCQlFVlBfRGlnZXN0U2lnbkluaXQ7CisrCQlUU19BQ0NVUkFDWV9zZXRfbWlsbGlzOworKwkJVFNfUkVRX2R1cDsKKysJCUdFTkVSQUxfTkFNRV9kdXA7CisrCQlBU04xX1NFUVVFTkNFX0FOWV9pdDsKKysJCVdISVJMUE9PTDsKKysJCVg1MDlfU1RPUkVfZ2V0MV9jcmxzOworKwkJRU5HSU5FX2dldF9wa2V5X2FzbjFfbWV0aDsKKysJCUVWUF9QS0VZX2FzbjFfbmV3OworKwkJQklPX25ld19OREVGOworKwkJRU5HSU5FX2dldF9wa2V5X21ldGg7CisrCQlUU19NU0dfSU1QUklOVF9zZXRfYWxnbzsKKysJCWkyZF9UU19UU1RfSU5GT19iaW87CisrCQlUU19UU1RfSU5GT19zZXRfb3JkZXJpbmc7CisrCQlUU19UU1RfSU5GT19nZXRfZXh0X2J5X09CSjsKKysJCUNSWVBUT19USFJFQURJRF9zZXRfcG9pbnRlcjsKKysJCVRTX0NPTkZfZ2V0X3RzYV9zZWN0aW9uOworKwkJU01JTUVfd3JpdGVfQVNOMTsKKysJCVRTX1JFU1BfQ1RYX3NldF9zaWduZXJfa2V5OworKwkJRVZQX1BLRVlfZW5jcnlwdF9vbGQ7CisrCQlFVlBfUEtFWV9lbmNyeXB0X2luaXQ7CisrCQlDUllQVE9fVEhSRUFESURfY3B5OworKwkJQVNOMV9QQ1RYX2dldF9jZXJ0X2ZsYWdzOworKwkJaTJkX0VTU19TSUdOSU5HX0NFUlQ7CisrCQlUU19DT05GX2xvYWRfa2V5OworKwkJaTJkX0FTTjFfU0VRVUVOQ0VfQU5ZOworKwkJZDJpX1RTX01TR19JTVBSSU5UX2JpbzsKKysJCUVWUF9QS0VZX2FzbjFfc2V0X3B1YmxpYzsKKysJCWIyaV9QdWJsaWNLZXlfYmlvOworKwkJQklPX2FzbjFfc2V0X3ByZWZpeDsKKysJCUVWUF9QS0VZX25ld19tYWNfa2V5OworKwkJQklPX25ld19DTVM7CisrCQlDUllQVE9fVEhSRUFESURfY21wOworKwkJVFNfUkVRX2V4dF9mcmVlOworKwkJRVZQX1BLRVlfYXNuMV9zZXRfZnJlZTsKKysJCUVWUF9QS0VZX2dldDBfYXNuMTsKKysJCWQyaV9ORVRTQ0FQRV9YNTA5OworKwkJRVZQX1BLRVlfdmVyaWZ5X3JlY292ZXJfaW5pdDsKKysJCUVWUF9QS0VZX0NUWF9zZXRfZGF0YTsKKysJCUVWUF9QS0VZX2tleWdlbl9pbml0OworKwkJVFNfUkVTUF9DVFhfc2V0X3N0YXR1c19pbmZvOworKwkJVFNfTVNHX0lNUFJJTlRfZ2V0X2FsZ287CisrCQlUU19SRVFfcHJpbnRfYmlvOworKwkJRVZQX1BLRVlfQ1RYX2N0cmxfc3RyOworKwkJRVZQX1BLRVlfZ2V0X2RlZmF1bHRfZGlnZXN0X25pZDsKKysJCVBFTV93cml0ZV9iaW9fUEtDUzdfc3RyZWFtOworKwkJVFNfTVNHX0lNUFJJTlRfcHJpbnRfYmlvOworKwkJQk5fYXNjMmJuOworKwkJVFNfUkVRX2dldF9wb2xpY3lfaWQ7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfcGtleV9hc24xX21ldGhzOworKwkJRU5HSU5FX3NldF9kZWZfcGtleV9hc24xX21ldGhzOworKwkJZDJpX1RTX0FDQ1VSQUNZOworKwkJRFNPX2dsb2JhbF9sb29rdXA7CisrCQlUU19DT05GX3NldF90c2FfbmFtZTsKKysJCWkyZF9BU04xX1NFVF9BTlk7CisrCQlFTkdJTkVfbG9hZF9nb3N0OworKwkJV0hJUkxQT09MX0JpdFVwZGF0ZTsKKysJCUFTTjFfUENUWF9nZXRfZmxhZ3M7CisrCQlUU19UU1RfSU5GT19nZXRfZXh0X2J5X05JRDsKKysJCVRTX1JFU1BfbmV3OworKwkJRVNTX0NFUlRfSURfZHVwOworKwkJVFNfU1RBVFVTX0lORk9fZHVwOworKwkJVFNfUkVRX2RlbGV0ZV9leHQ7CisrCQlFVlBfRGlnZXN0VmVyaWZ5RmluYWw7CisrCQlFVlBfUEtFWV9wcmludF9wYXJhbXM7CisrCQlpMmRfQ01TX2Jpb19zdHJlYW07CisrCQlUU19SRVFfZ2V0X21zZ19pbXByaW50OworKwkJT0JKX2ZpbmRfc2lnaWRfYnlfYWxnczsKKysJCVRTX1RTVF9JTkZPX2dldF9zZXJpYWw7CisrCQlUU19SRVFfZ2V0X25vbmNlOworKwkJWDUwOV9QVUJLRVlfc2V0MF9wYXJhbTsKKysJCUVWUF9QS0VZX0NUWF9zZXQwX2tleWdlbl9pbmZvOworKwkJRElTVF9QT0lOVF9zZXRfZHBuYW1lOworKwkJaTJkX0lTU1VJTkdfRElTVF9QT0lOVDsKKysJCUFTTjFfU0VUX0FOWV9pdDsKKysJCUVWUF9QS0VZX0NUWF9nZXRfZGF0YTsKKysJCVRTX1NUQVRVU19JTkZPX3ByaW50X2JpbzsKKysJCUVWUF9QS0VZX2Rlcml2ZV9pbml0OworKwkJZDJpX1RTX1RTVF9JTkZPOworKwkJRVZQX1BLRVlfYXNuMV9hZGRfYWxpYXM7CisrCQlkMmlfVFNfUkVTUF9iaW87CisrCQlPVEhFUk5BTUVfY21wOworKwkJR0VORVJBTF9OQU1FX3NldDBfdmFsdWU7CisrCQlQS0NTN19SRUNJUF9JTkZPX2dldDBfYWxnOworKwkJVFNfUkVTUF9DVFhfbmV3OworKwkJVFNfUkVTUF9zZXRfdHN0X2luZm87CisrCQlQS0NTN19maW5hbDsKKysJCUVWUF9QS0VZX2Jhc2VfaWQ7CisrCQlUU19SRVNQX0NUWF9zZXRfc2lnbmVyX2NlcnQ7CisrCQlUU19SRVFfc2V0X21zZ19pbXByaW50OworKwkJRVZQX1BLRVlfQ1RYX2N0cmw7CisrCQlUU19DT05GX3NldF9kaWdlc3RzOworKwkJZDJpX1RTX01TR19JTVBSSU5UOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfY3RybDsKKysJCVRTX1JFUV9nZXRfZXh0X2J5X05JRDsKKysJCVBLQ1M1X3BiZV9zZXQwX2FsZ29yOworKwkJQk5fQkxJTkRJTkdfdGhyZWFkX2lkOworKwkJVFNfQUNDVVJBQ1lfbmV3OworKwkJWDUwOV9DUkxfTUVUSE9EX2ZyZWU7CisrCQlBU04xX1BDVFhfZ2V0X25tX2ZsYWdzOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfc2lnbjsKKysJCUNSWVBUT19USFJFQURJRF9jdXJyZW50OworKwkJRVZQX1BLRVlfZGVjcnlwdF9pbml0OworKwkJTkVUU0NBUEVfWDUwOV9mcmVlOworKwkJaTJiX1BWS19iaW87CisrCQlFVlBfUEtFWV9wcmludF9wcml2YXRlOworKwkJR0VORVJBTF9OQU1FX2dldDBfdmFsdWU7CisrCQliMmlfUFZLX2JpbzsKKysJCUFTTjFfVVRDVElNRV9hZGo7CisrCQlUU19UU1RfSU5GT19uZXc7CisrCQlFVlBfTURfZG9fYWxsX3NvcnRlZDsKKysJCVRTX0NPTkZfc2V0X2RlZmF1bHRfZW5naW5lOworKwkJVFNfQUNDVVJBQ1lfc2V0X3NlY29uZHM7CisrCQlUU19UU1RfSU5GT19nZXRfdGltZTsKKysJCVBLQ1M4X3BrZXlfZ2V0MDsKKysJCUVWUF9QS0VZX2FzbjFfZ2V0MDsKKysJCU9CSl9hZGRfc2lnaWQ7CisrCQlQS0NTN19TSUdORVJfSU5GT19zaWduOworKwkJRVZQX1BLRVlfcGFyYW1nZW5faW5pdDsKKysJCUVWUF9QS0VZX3NpZ247CisrCQlPQkpfc2lnaWRfZnJlZTsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2luaXQ7CisrCQlkMmlfRVNTX0lTU1VFUl9TRVJJQUw7CisrCQlJU1NVSU5HX0RJU1RfUE9JTlRfbmV3OworKwkJQVNOMV9USU1FX2FkajsKKysJCVRTX09CSl9wcmludF9iaW87CisrCQlFVlBfUEtFWV9tZXRoX3NldF92ZXJpZnlfcmVjb3ZlcjsKKysJCUVWUF9QS0VZX21ldGhfc2V0X3ZyZnlfcmVjb3ZlcjsKKysJCVRTX1JFU1BfZ2V0X3N0YXR1c19pbmZvOworKwkJQ01TX3N0cmVhbTsKKysJCUVWUF9QS0VZX0NUWF9zZXRfY2I7CisrCQlQS0NTN190b19UU19UU1RfSU5GTzsKKysJCUFTTjFfUENUWF9nZXRfb2lkX2ZsYWdzOworKwkJVFNfVFNUX0lORk9fYWRkX2V4dDsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2Rlcml2ZTsKKysJCWkyZF9UU19SRVNQX2ZwOworKwkJaTJkX1RTX01TR19JTVBSSU5UX2JpbzsKKysJCVRTX1JFU1BfQ1RYX3NldF9hY2N1cmFjeTsKKysJCVRTX1JFUV9zZXRfbm9uY2U7CisrCQlFU1NfQ0VSVF9JRF9uZXc7CisrCQlFTkdJTkVfcGtleV9hc24xX2ZpbmRfc3RyOworKwkJVFNfUkVRX2dldF9leHRfY291bnQ7CisrCQlCVUZfcmV2ZXJzZTsKKysJCVRTX1RTVF9JTkZPX3ByaW50X2JpbzsKKysJCWQyaV9JU1NVSU5HX0RJU1RfUE9JTlQ7CisrCQlFTkdJTkVfZ2V0X3BrZXlfbWV0aHM7CisrCQlpMmJfUHJpdmF0ZUtleV9iaW87CisrCQlpMmRfVFNfUkVTUDsKKysJCWIyaV9QdWJsaWNLZXk7CisrCQlUU19WRVJJRllfQ1RYX2NsZWFudXA7CisrCQlUU19TVEFUVVNfSU5GT19mcmVlOworKwkJVFNfUkVTUF92ZXJpZnlfdG9rZW47CisrCQlPQkpfYnNlYXJjaF9leF87CisrCQlBU04xX2JuX3ByaW50OworKwkJRVZQX1BLRVlfYXNuMV9nZXRfY291bnQ7CisrCQlFTkdJTkVfcmVnaXN0ZXJfcGtleV9hc24xX21ldGhzOworKwkJQVNOMV9QQ1RYX3NldF9ubV9mbGFnczsKKysJCUVWUF9EaWdlc3RWZXJpZnlJbml0OworKwkJRU5HSU5FX3NldF9kZWZhdWx0X3BrZXlfbWV0aHM7CisrCQlUU19UU1RfSU5GT19nZXRfcG9saWN5X2lkOworKwkJVFNfUkVRX2dldF9jZXJ0X3JlcTsKKysJCVg1MDlfQ1JMX3NldF9tZXRoX2RhdGE7CisrCQlQS0NTOF9wa2V5X3NldDA7CisrCQlBU04xX1NUUklOR19jb3B5OworKwkJZDJpX1RTX1RTVF9JTkZPX2ZwOworKwkJWDUwOV9DUkxfbWF0Y2g7CisrCQlFVlBfUEtFWV9hc24xX3NldF9wcml2YXRlOworKwkJVFNfVFNUX0lORk9fZ2V0X2V4dF9kMmk7CisrCQlUU19SRVNQX0NUWF9hZGRfcG9saWN5OworKwkJZDJpX1RTX1JFU1A7CisrCQlUU19DT05GX2xvYWRfY2VydHM7CisrCQlUU19UU1RfSU5GT19nZXRfbXNnX2ltcHJpbnQ7CisrCQlFUlJfbG9hZF9UU19zdHJpbmdzOworKwkJVFNfVFNUX0lORk9fZ2V0X3ZlcnNpb247CisrCQlFVlBfUEtFWV9DVFhfZHVwOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfdmVyaWZ5OworKwkJaTJiX1B1YmxpY0tleV9iaW87CisrCQlUU19DT05GX3NldF9jZXJ0czsKKysJCUVWUF9QS0VZX2FzbjFfZ2V0MF9pbmZvOworKwkJVFNfVkVSSUZZX0NUWF9mcmVlOworKwkJVFNfUkVRX2dldF9leHRfYnlfY3JpdGljYWw7CisrCQlUU19SRVNQX0NUWF9zZXRfc2VyaWFsX2NiOworKwkJWDUwOV9DUkxfZ2V0X21ldGhfZGF0YTsKKysJCVRTX1JFU1BfQ1RYX3NldF90aW1lX2NiOworKwkJVFNfTVNHX0lNUFJJTlRfZ2V0X21zZzsKKysJCVRTX1RTVF9JTkZPX2V4dF9mcmVlOworKwkJVFNfUkVRX2dldF92ZXJzaW9uOworKwkJVFNfUkVRX2FkZF9leHQ7CisrCQlFVlBfUEtFWV9DVFhfc2V0X2FwcF9kYXRhOworKwkJT0JKX2JzZWFyY2hfOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfdmVyaWZ5Y3R4OworKwkJaTJkX1BLQ1M3X2Jpb19zdHJlYW07CisrCQlDUllQVE9fVEhSRUFESURfc2V0X251bWVyaWM7CisrCQlQS0NTN19zaWduX2FkZF9zaWduZXI7CisrCQlkMmlfVFNfVFNUX0lORk9fYmlvOworKwkJVFNfVFNUX0lORk9fZ2V0X29yZGVyaW5nOworKwkJVFNfUkVTUF9wcmludF9iaW87CisrCQlUU19UU1RfSU5GT19nZXRfZXh0czsKKysJCUhNQUNfQ1RYX2NvcHk7CisrCQlQS0NTNV9wYmUyX3NldF9pdjsKKysJCUVOR0lORV9nZXRfcGtleV9hc24xX21ldGhzOworKwkJYjJpX1ByaXZhdGVLZXk7CisrCQlFVlBfUEtFWV9DVFhfZ2V0X2FwcF9kYXRhOworKwkJVFNfUkVRX3NldF9jZXJ0X3JlcTsKKysJCUNSWVBUT19USFJFQURJRF9zZXRfY2FsbGJhY2s7CisrCQlUU19DT05GX3NldF9zZXJpYWw7CisrCQlUU19UU1RfSU5GT19mcmVlOworKwkJZDJpX1RTX1JFUV9mcDsKKysJCVRTX1JFU1BfdmVyaWZ5X3Jlc3BvbnNlOworKwkJaTJkX0VTU19JU1NVRVJfU0VSSUFMOworKwkJVFNfQUNDVVJBQ1lfZ2V0X3NlY29uZHM7CisrCQlFVlBfQ0lQSEVSX2RvX2FsbDsKKysJCWIyaV9Qcml2YXRlS2V5X2JpbzsKKysJCU9DU1BfQ0VSVElEX2R1cDsKKysJCVg1MDlfUFVCS0VZX2dldDBfcGFyYW07CisrCQlUU19NU0dfSU1QUklOVF9kdXA7CisrCQlQS0NTN19wcmludF9jdHg7CisrCQlpMmRfVFNfUkVRX2JpbzsKKysJCUVWUF93aGlybHBvb2w7CisrCQlFVlBfUEtFWV9hc24xX3NldF9wYXJhbTsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2VuY3J5cHQ7CisrCQlBU04xX1BDVFhfc2V0X2ZsYWdzOworKwkJaTJkX0VTU19DRVJUX0lEOworKwkJVFNfVkVSSUZZX0NUWF9uZXc7CisrCQlUU19SRVNQX0NUWF9zZXRfZXh0ZW5zaW9uX2NiOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9wa2V5X21ldGhzOworKwkJVFNfUkVTUF9DVFhfc2V0X3N0YXR1c19pbmZvX2NvbmQ7CisrCQlUU19SRVNQX0NUWF9zZXRfc3RhdF9pbmZvX2NvbmQ7CisrCQlFVlBfUEtFWV92ZXJpZnk7CisrCQlXSElSTFBPT0xfRmluYWw7CisrCQlYNTA5X0NSTF9NRVRIT0RfbmV3OworKwkJRVZQX0RpZ2VzdFNpZ25GaW5hbDsKKysJCVRTX1JFU1BfQ1RYX3NldF9kZWZfcG9saWN5OworKwkJTkVUU0NBUEVfWDUwOV9pdDsKKysJCVRTX1JFU1BfY3JlYXRlX3Jlc3BvbnNlOworKwkJUEtDUzdfU0lHTkVSX0lORk9fZ2V0MF9hbGdzOworKwkJVFNfVFNUX0lORk9fZ2V0X25vbmNlOworKwkJRVZQX1BLRVlfZGVjcnlwdF9vbGQ7CisrCQlUU19UU1RfSU5GT19zZXRfcG9saWN5X2lkOworKwkJVFNfQ09ORl9zZXRfZXNzX2NlcnRfaWRfY2hhaW47CisrCQlFVlBfUEtFWV9DVFhfZ2V0MF9wa2V5OworKwkJZDJpX1RTX1JFUTsKKysJCUVWUF9QS0VZX2FzbjFfZmluZF9zdHI7CisrCQlCSU9fZl9hc24xOworKwkJRVNTX1NJR05JTkdfQ0VSVF9uZXc7CisrCQlFVlBfUEJFX2ZpbmQ7CisrCQlYNTA5X0NSTF9nZXQwX2J5X2NlcnQ7CisrCQlFVlBfUEtFWV9kZXJpdmU7CisrCQlpMmRfVFNfUkVROworKwkJVFNfVFNUX0lORk9fZGVsZXRlX2V4dDsKKysJCUVTU19JU1NVRVJfU0VSSUFMX2ZyZWU7CisrCQlBU04xX1BDVFhfc2V0X3N0cl9mbGFnczsKKysJCUVOR0lORV9nZXRfcGtleV9hc24xX21ldGhfc3RyOworKwkJVFNfQ09ORl9zZXRfc2lnbmVyX2tleTsKKysJCVRTX0FDQ1VSQUNZX2dldF9taWxsaXM7CisrCQlUU19SRVNQX2dldF90b2tlbjsKKysJCVRTX0FDQ1VSQUNZX2R1cDsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfcGtleV9hc24xX21ldGhzOworKwkJRU5HSU5FX3JlZ19hbGxfcGtleV9hc24xX21ldGhzOworKwkJWDUwOV9DUkxfc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJQ1JZUFRPX1RIUkVBRElEX2hhc2g7CisrCQlDTVNfQ29udGVudEluZm9fcHJpbnRfY3R4OworKwkJVFNfUkVTUF9mcmVlOworKwkJSVNTVUlOR19ESVNUX1BPSU5UX2ZyZWU7CisrCQlFU1NfSVNTVUVSX1NFUklBTF9uZXc7CisrCQlDTVNfYWRkMV9jcmw7CisrCQlQS0NTN19hZGQxX2F0dHJpYl9kaWdlc3Q7CisrCQlUU19SRVNQX0NUWF9hZGRfbWQ7CisrCQlUU19UU1RfSU5GT19kdXA7CisrCQlFTkdJTkVfc2V0X3BrZXlfYXNuMV9tZXRoczsKKysJCVBFTV93cml0ZV9iaW9fUGFyYW1ldGVyczsKKysJCVRTX1RTVF9JTkZPX2dldF9hY2N1cmFjeTsKKysJCVg1MDlfQ1JMX2dldDBfYnlfc2VyaWFsOworKwkJVFNfVFNUX0lORk9fc2V0X3ZlcnNpb247CisrCQlUU19SRVNQX0NUWF9nZXRfdHN0X2luZm87CisrCQlUU19SRVNQX3ZlcmlmeV9zaWduYXR1cmU7CisrCQlDUllQVE9fVEhSRUFESURfZ2V0X2NhbGxiYWNrOworKwkJVFNfVFNUX0lORk9fZ2V0X3RzYTsKKysJCVRTX1NUQVRVU19JTkZPX25ldzsKKysJCUVWUF9QS0VZX0NUWF9nZXRfY2I7CisrCQlUU19SRVFfZ2V0X2V4dF9kMmk7CisrCQlHRU5FUkFMX05BTUVfc2V0MF9vdGhlcm5hbWU7CisrCQlUU19UU1RfSU5GT19nZXRfZXh0X2NvdW50OworKwkJVFNfUkVTUF9DVFhfZ2V0X3JlcXVlc3Q7CisrCQlpMmRfTkVUU0NBUEVfWDUwOTsKKysJCUVOR0lORV9nZXRfcGtleV9tZXRoX2VuZ2luZTsKKysJCUVWUF9QS0VZX21ldGhfc2V0X3NpZ25jdHg7CisrCQlFVlBfUEtFWV9hc24xX2NvcHk7CisrCQlBU04xX1RZUEVfY21wOworKwkJRVZQX0NJUEhFUl9kb19hbGxfc29ydGVkOworKwkJRVZQX1BLRVlfQ1RYX2ZyZWU7CisrCQlJU1NVSU5HX0RJU1RfUE9JTlRfaXQ7CisrCQlkMmlfVFNfTVNHX0lNUFJJTlRfZnA7CisrCQlYNTA5X1NUT1JFX2dldDFfY2VydHM7CisrCQlFVlBfUEtFWV9DVFhfZ2V0X29wZXJhdGlvbjsKKysJCWQyaV9FU1NfU0lHTklOR19DRVJUOworKwkJVFNfQ09ORl9zZXRfb3JkZXJpbmc7CisrCQlFVlBfUEJFX2FsZ19hZGRfdHlwZTsKKysJCVRTX1JFUV9zZXRfdmVyc2lvbjsKKysJCUVWUF9QS0VZX2dldDA7CisrCQlCSU9fYXNuMV9zZXRfc3VmZml4OworKwkJaTJkX1RTX1NUQVRVU19JTkZPOworKwkJRVZQX01EX2RvX2FsbDsKKysJCVRTX1RTVF9JTkZPX3NldF9hY2N1cmFjeTsKKysJCVBLQ1M3X2FkZF9hdHRyaWJfY29udGVudF90eXBlOworKwkJRVJSX3JlbW92ZV90aHJlYWRfc3RhdGU7CisrCQlFVlBfUEtFWV9tZXRoX2FkZDA7CisrCQlUU19UU1RfSU5GT19zZXRfdHNhOworKwkJRVZQX1BLRVlfbWV0aF9uZXc7CisrCQlXSElSTFBPT0xfVXBkYXRlOworKwkJVFNfQ09ORl9zZXRfYWNjdXJhY3k7CisrCQlBU04xX1BDVFhfc2V0X29pZF9mbGFnczsKKysJCUVTU19TSUdOSU5HX0NFUlRfZHVwOworKwkJZDJpX1RTX1JFUV9iaW87CisrCQlYNTA5X3RpbWVfYWRqX2V4OworKwkJVFNfUkVTUF9DVFhfYWRkX2ZsYWdzOworKwkJZDJpX1RTX1NUQVRVU19JTkZPOworKwkJVFNfTVNHX0lNUFJJTlRfc2V0X21zZzsKKysJCUJJT19hc24xX2dldF9zdWZmaXg7CisrCQlUU19SRVFfZnJlZTsKKysJCUVWUF9QS0VZX21ldGhfZnJlZTsKKysJCVRTX1JFUV9nZXRfZXh0czsKKysJCVRTX1JFU1BfQ1RYX3NldF9jbG9ja19wcmVjaXNpb25fZGlnaXRzOworKwkJVFNfUkVTUF9DVFhfc2V0X2Nsa19wcmVjX2RpZ2l0czsKKysJCVRTX1JFU1BfQ1RYX2FkZF9mYWlsdXJlX2luZm87CisrCQlpMmRfVFNfUkVTUF9iaW87CisrCQlFVlBfUEtFWV9DVFhfZ2V0MF9wZWVya2V5OworKwkJUEVNX3dyaXRlX2Jpb19DTVNfc3RyZWFtOworKwkJVFNfUkVRX25ldzsKKysJCVRTX01TR19JTVBSSU5UX25ldzsKKysJCUVWUF9QS0VZX21ldGhfZmluZDsKKysJCUVWUF9QS0VZX2lkOworKwkJVFNfVFNUX0lORk9fc2V0X3NlcmlhbDsKKysJCWEyaV9HRU5FUkFMX05BTUU7CisrCQlUU19DT05GX3NldF9jcnlwdG9fZGV2aWNlOworKwkJRVZQX1BLRVlfdmVyaWZ5X2luaXQ7CisrCQlUU19DT05GX3NldF9wb2xpY2llczsKKysJCUFTTjFfUENUWF9uZXc7CisrCQlFU1NfQ0VSVF9JRF9mcmVlOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfcGtleV9tZXRoczsKKysJCVRTX01TR19JTVBSSU5UX2ZyZWU7CisrCQlUU19WRVJJRllfQ1RYX2luaXQ7CisrCQlQS0NTN19zdHJlYW07CisrCQlUU19SRVNQX0NUWF9zZXRfY2VydHM7CisrCQlUU19DT05GX3NldF9kZWZfcG9saWN5OworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfYWRqOworKwkJTkVUU0NBUEVfWDUwOV9uZXc7CisrCQlUU19BQ0NVUkFDWV9mcmVlOworKwkJVFNfUkVTUF9nZXRfdHN0X2luZm87CisrCQlFVlBfUEtFWV9kZXJpdmVfc2V0X3BlZXI7CisrCQlQRU1fcmVhZF9iaW9fUGFyYW1ldGVyczsKKysJCVRTX0NPTkZfc2V0X2Nsb2NrX3ByZWNpc2lvbl9kaWdpdHM7CisrCQlUU19DT05GX3NldF9jbGtfcHJlY19kaWdpdHM7CisrCQlFU1NfSVNTVUVSX1NFUklBTF9kdXA7CisrCQlUU19BQ0NVUkFDWV9nZXRfbWljcm9zOworKwkJQVNOMV9QQ1RYX2dldF9zdHJfZmxhZ3M7CisrCQlOQU1FX0NPTlNUUkFJTlRTX2NoZWNrOworKwkJQVNOMV9CSVRfU1RSSU5HX2NoZWNrOworKwkJWDUwOV9jaGVja19ha2lkOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfcGtleV9hc24xX21ldGhzOworKwkJRU5HSU5FX3VucmVnX3BrZXlfYXNuMV9tZXRoczsKKysJCUFTTjFfUENUWF9mcmVlOworKwkJUEVNX3dyaXRlX2Jpb19BU04xX3N0cmVhbTsKKysJCWkyZF9BU04xX2Jpb19zdHJlYW07CisrCQlUU19YNTA5X0FMR09SX3ByaW50X2JpbzsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2NsZWFudXA7CisrCQlFVlBfUEtFWV9hc24xX2ZyZWU7CisrCQlFU1NfU0lHTklOR19DRVJUX2ZyZWU7CisrCQlUU19UU1RfSU5GT19zZXRfbXNnX2ltcHJpbnQ7CisrCQlHRU5FUkFMX05BTUVfY21wOworKwkJZDJpX0FTTjFfU0VUX0FOWTsKKysJCUVOR0lORV9zZXRfcGtleV9tZXRoczsKKysJCWkyZF9UU19SRVFfZnA7CisrCQlkMmlfQVNOMV9TRVFVRU5DRV9BTlk7CisrCQlHRU5FUkFMX05BTUVfZ2V0MF9vdGhlck5hbWU7CisrCQlkMmlfRVNTX0NFUlRfSUQ7CisrCQlPQkpfZmluZF9zaWdpZF9hbGdzOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfa2V5Z2VuOworKwkJUEtDUzVfUEJLREYyX0hNQUM7CisrCQlFVlBfUEtFWV9wYXJhbWdlbjsKKysJCUVWUF9QS0VZX21ldGhfc2V0X3BhcmFtZ2VuOworKwkJQklPX25ld19QS0NTNzsKKysJCUVWUF9QS0VZX3ZlcmlmeV9yZWNvdmVyOworKwkJVFNfZXh0X3ByaW50X2JpbzsKKysJCVRTX0FTTjFfSU5URUdFUl9wcmludF9iaW87CisrCQljaGVja19kZWZlcjsKKysJCURTT19wYXRoYnlhZGRyOworKwkJRVZQX1BLRVlfc2V0X3R5cGU7CisrCQlUU19BQ0NVUkFDWV9zZXRfbWljcm9zOworKwkJVFNfUkVRX3RvX1RTX1ZFUklGWV9DVFg7CisrCQlFVlBfUEtFWV9tZXRoX3NldF9jb3B5OworKwkJQVNOMV9QQ1RYX3NldF9jZXJ0X2ZsYWdzOworKwkJVFNfVFNUX0lORk9fZ2V0X2V4dDsKKysJCUVWUF9QS0VZX2FzbjFfc2V0X2N0cmw7CisrCQlUU19UU1RfSU5GT19nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJRVZQX1BLRVlfQ1RYX25ld19pZDsKKysJCVRTX1JFUV9nZXRfZXh0X2J5X09CSjsKKysJCVRTX0NPTkZfc2V0X3NpZ25lcl9jZXJ0OworKwkJWDUwOV9OQU1FX2hhc2hfb2xkOworKwkJQVNOMV9USU1FX3NldF9zdHJpbmc7CisrCQlFVlBfTURfZmxhZ3M7CisrCQlUU19SRVNQX0NUWF9mcmVlOworKwkJRFNBcGFyYW1zX2R1cDsKKysJCURIcGFyYW1zX2R1cDsKKysJCU9DU1BfUkVRX0NUWF9hZGQxX2hlYWRlcjsKKysJCU9DU1BfUkVRX0NUWF9zZXQxX3JlcTsKKysJCVg1MDlfU1RPUkVfc2V0X3ZlcmlmeV9jYjsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDBfY3VycmVudF9jcmw7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXQwX3BhcmVudF9jdHg7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXQwX2N1cnJlbnRfaXNzdWVyOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MF9jdXJfaXNzdWVyOworKwkJWDUwOV9pc3N1ZXJfbmFtZV9oYXNoX29sZDsKKysJCVg1MDlfc3ViamVjdF9uYW1lX2hhc2hfb2xkOworKwkJRVZQX0NJUEhFUl9DVFhfY29weTsKKysJCVVJX21ldGhvZF9nZXRfcHJvbXB0X2NvbnN0cnVjdG9yOworKwkJVUlfbWV0aG9kX2dldF9wcm9tcHRfY29uc3RydWN0cjsKKysJCVVJX21ldGhvZF9zZXRfcHJvbXB0X2NvbnN0cnVjdG9yOworKwkJVUlfbWV0aG9kX3NldF9wcm9tcHRfY29uc3RydWN0cjsKKysJCUVWUF9yZWFkX3B3X3N0cmluZ19taW47CisrCQlDUllQVE9fY3RzMTI4X2VuY3J5cHQ7CisrCQlDUllQVE9fY3RzMTI4X2RlY3J5cHRfYmxvY2s7CisrCQlDUllQVE9fY2ZiMTI4XzFfZW5jcnlwdDsKKysJCUNSWVBUT19jYmMxMjhfZW5jcnlwdDsKKysJCUNSWVBUT19jdHIxMjhfZW5jcnlwdDsKKysJCUNSWVBUT19vZmIxMjhfZW5jcnlwdDsKKysJCUNSWVBUT19jdHMxMjhfZGVjcnlwdDsKKysJCUNSWVBUT19jdHMxMjhfZW5jcnlwdF9ibG9jazsKKysJCUNSWVBUT19jYmMxMjhfZGVjcnlwdDsKKysJCUNSWVBUT19jZmIxMjhfZW5jcnlwdDsKKysJCUNSWVBUT19jZmIxMjhfOF9lbmNyeXB0OworKworKwlsb2NhbDoKKysJCSo7CisrfTsKKysKKysKKytPUEVOU1NMXzEuMC4xIHsKKysJZ2xvYmFsOgorKwkJU1NMX3JlbmVnb3RpYXRlX2FiYnJldmlhdGVkOworKwkJVExTdjFfMV9tZXRob2Q7CisrCQlUTFN2MV8xX2NsaWVudF9tZXRob2Q7CisrCQlUTFN2MV8xX3NlcnZlcl9tZXRob2Q7CisrCQlTU0xfQ1RYX3NldF9zcnBfY2xpZW50X3B3ZF9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3NycF9jbGllbnRfcHdkX2NiOworKwkJU1NMX2dldF9zcnBfZzsKKysJCVNTTF9DVFhfc2V0X3NycF91c2VybmFtZV9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3NycF91bl9jYjsKKysJCVNTTF9nZXRfc3JwX3VzZXJpbmZvOworKwkJU1NMX3NldF9zcnBfc2VydmVyX3BhcmFtOworKwkJU1NMX3NldF9zcnBfc2VydmVyX3BhcmFtX3B3OworKwkJU1NMX2dldF9zcnBfTjsKKysJCVNTTF9nZXRfc3JwX3VzZXJuYW1lOworKwkJU1NMX0NUWF9zZXRfc3JwX3Bhc3N3b3JkOworKwkJU1NMX0NUWF9zZXRfc3JwX3N0cmVuZ3RoOworKwkJU1NMX0NUWF9zZXRfc3JwX3ZlcmlmeV9wYXJhbV9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3NycF92ZnlfcGFyYW1fY2I7CisrCQlTU0xfQ1RYX3NldF9zcnBfY2JfYXJnOworKwkJU1NMX0NUWF9zZXRfc3JwX3VzZXJuYW1lOworKwkJU1NMX0NUWF9TUlBfQ1RYX2luaXQ7CisrCQlTU0xfU1JQX0NUWF9pbml0OworKwkJU1JQX0NhbGNfQV9wYXJhbTsKKysJCVNSUF9nZW5lcmF0ZV9zZXJ2ZXJfbWFzdGVyX3NlY3JldDsKKysJCVNSUF9nZW5fc2VydmVyX21hc3Rlcl9zZWNyZXQ7CisrCQlTU0xfQ1RYX1NSUF9DVFhfZnJlZTsKKysJCVNSUF9nZW5lcmF0ZV9jbGllbnRfbWFzdGVyX3NlY3JldDsKKysJCVNSUF9nZW5fY2xpZW50X21hc3Rlcl9zZWNyZXQ7CisrCQlTU0xfc3JwX3NlcnZlcl9wYXJhbV93aXRoX3VzZXJuYW1lOworKwkJU1NMX3NycF9zZXJ2ZXJfcGFyYW1fd2l0aF91bjsKKysJCVNTTF9TUlBfQ1RYX2ZyZWU7CisrCQlTU0xfc2V0X2RlYnVnOworKwkJU1NMX1NFU1NJT05fZ2V0MF9wZWVyOworKwkJVExTdjFfMl9jbGllbnRfbWV0aG9kOworKwkJU1NMX1NFU1NJT05fc2V0MV9pZF9jb250ZXh0OworKwkJVExTdjFfMl9zZXJ2ZXJfbWV0aG9kOworKwkJU1NMX2NhY2hlX2hpdDsKKysJCVNTTF9nZXQwX2tzc2xfY3R4OworKwkJU1NMX3NldDBfa3NzbF9jdHg7CisrCQlTU0xfc2V0X3N0YXRlOworKwkJU1NMX0NJUEhFUl9nZXRfaWQ7CisrCQlUTFN2MV8yX21ldGhvZDsKKysJCWtzc2xfY3R4X2dldDBfY2xpZW50X3ByaW5jOworKwkJU1NMX2V4cG9ydF9rZXlpbmdfbWF0ZXJpYWw7CisrCQlTU0xfc2V0X3Rsc2V4dF91c2Vfc3J0cDsKKysJCVNTTF9DVFhfc2V0X25leHRfcHJvdG9zX2FkdmVydGlzZWRfY2I7CisrCQlTU0xfQ1RYX3NldF9uZXh0X3Byb3Rvc19hZHZfY2I7CisrCQlTU0xfZ2V0MF9uZXh0X3Byb3RvX25lZ290aWF0ZWQ7CisrCQlTU0xfZ2V0X3NlbGVjdGVkX3NydHBfcHJvZmlsZTsKKysJCVNTTF9DVFhfc2V0X3Rsc2V4dF91c2Vfc3J0cDsKKysJCVNTTF9zZWxlY3RfbmV4dF9wcm90bzsKKysJCVNTTF9nZXRfc3J0cF9wcm9maWxlczsKKysJCVNTTF9DVFhfc2V0X25leHRfcHJvdG9fc2VsZWN0X2NiOworKwkJU1NMX0NUWF9zZXRfbmV4dF9wcm90b19zZWxfY2I7CisrCQlTU0xfU0VTU0lPTl9nZXRfY29tcHJlc3NfaWQ7CisrCisrCQlTUlBfVkJBU0VfZ2V0X2J5X3VzZXI7CisrCQlTUlBfQ2FsY19zZXJ2ZXJfa2V5OworKwkJU1JQX2NyZWF0ZV92ZXJpZmllcjsKKysJCVNSUF9jcmVhdGVfdmVyaWZpZXJfQk47CisrCQlTUlBfQ2FsY191OworKwkJU1JQX1ZCQVNFX2ZyZWU7CisrCQlTUlBfQ2FsY19jbGllbnRfa2V5OworKwkJU1JQX2dldF9kZWZhdWx0X2dOOworKwkJU1JQX0NhbGNfeDsKKysJCVNSUF9DYWxjX0I7CisrCQlTUlBfVkJBU0VfbmV3OworKwkJU1JQX2NoZWNrX2tub3duX2dOX3BhcmFtOworKwkJU1JQX0NhbGNfQTsKKysJCVNSUF9WZXJpZnlfQV9tb2RfTjsKKysJCVNSUF9WQkFTRV9pbml0OworKwkJU1JQX1ZlcmlmeV9CX21vZF9OOworKwkJRUNfS0VZX3NldF9wdWJsaWNfa2V5X2FmZmluZV9jb29yZGluYXRlczsKKysJCUVDX0tFWV9zZXRfcHViX2tleV9hZmZfY29vcmRzOworKwkJRVZQX2Flc18xOTJfY3RyOworKwkJRVZQX1BLRVlfbWV0aF9nZXQwX2luZm87CisrCQlFVlBfUEtFWV9tZXRoX2NvcHk7CisrCQlFUlJfYWRkX2Vycm9yX3ZkYXRhOworKwkJRVZQX2Flc18xMjhfY3RyOworKwkJRVZQX2Flc18yNTZfY3RyOworKwkJRUNfR0ZwX25pc3RwMjI0X21ldGhvZDsKKysJCUVDX0tFWV9nZXRfZmxhZ3M7CisrCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfUFNTX21nZjE7CisrCQlFVlBfYWVzXzEyOF94dHM7CisrCQlFVlBfYWVzXzI1Nl94dHM7CisrCQlFVlBfYWVzXzEyOF9nY207CisrCQlFQ19LRVlfY2xlYXJfZmxhZ3M7CisrCQlFQ19LRVlfc2V0X2ZsYWdzOworKwkJRVZQX2Flc18yNTZfY2NtOworKwkJUlNBX3ZlcmlmeV9QS0NTMV9QU1NfbWdmMTsKKysJCUVWUF9hZXNfMTI4X2NjbTsKKysJCUVWUF9hZXNfMTkyX2djbTsKKysJCVg1MDlfQUxHT1Jfc2V0X21kOworKwkJUkFORF9pbml0X2ZpcHM7CisrCQlFVlBfYWVzXzI1Nl9nY207CisrCQlFVlBfYWVzXzE5Ml9jY207CisrCQlDTUFDX0NUWF9jb3B5OworKwkJQ01BQ19DVFhfZnJlZTsKKysJCUNNQUNfQ1RYX2dldDBfY2lwaGVyX2N0eDsKKysJCUNNQUNfQ1RYX2NsZWFudXA7CisrCQlDTUFDX0luaXQ7CisrCQlDTUFDX1VwZGF0ZTsKKysJCUNNQUNfcmVzdW1lOworKwkJQ01BQ19DVFhfbmV3OworKwkJQ01BQ19GaW5hbDsKKysJCUNSWVBUT19jdHIxMjhfZW5jcnlwdF9jdHIzMjsKKysJCUNSWVBUT19nY20xMjhfcmVsZWFzZTsKKysJCUNSWVBUT19jY20xMjhfZGVjcnlwdF9jY202NDsKKysJCUNSWVBUT19jY20xMjhfZW5jcnlwdDsKKysJCUNSWVBUT19nY20xMjhfZW5jcnlwdDsKKysJCUNSWVBUT194dHMxMjhfZW5jcnlwdDsKKysJCUVWUF9yYzRfaG1hY19tZDU7CisrCQlDUllQVE9fbmlzdGN0czEyOF9kZWNyeXB0X2Jsb2NrOworKwkJQ1JZUFRPX2djbTEyOF9zZXRpdjsKKysJCUNSWVBUT19uaXN0Y3RzMTI4X2VuY3J5cHQ7CisrCQlFVlBfYWVzXzEyOF9jYmNfaG1hY19zaGExOworKwkJQ1JZUFRPX2djbTEyOF90YWc7CisrCQlDUllQVE9fY2NtMTI4X2VuY3J5cHRfY2NtNjQ7CisrCQlFTkdJTkVfbG9hZF9yZHJhbmQ7CisrCQlDUllQVE9fY2NtMTI4X3NldGl2OworKwkJQ1JZUFRPX25pc3RjdHMxMjhfZW5jcnlwdF9ibG9jazsKKysJCUNSWVBUT19nY20xMjhfYWFkOworKwkJQ1JZUFRPX2NjbTEyOF9pbml0OworKwkJQ1JZUFRPX25pc3RjdHMxMjhfZGVjcnlwdDsKKysJCUNSWVBUT19nY20xMjhfbmV3OworKwkJQ1JZUFRPX2NjbTEyOF90YWc7CisrCQlDUllQVE9fY2NtMTI4X2RlY3J5cHQ7CisrCQlDUllQVE9fY2NtMTI4X2FhZDsKKysJCUNSWVBUT19nY20xMjhfaW5pdDsKKysJCUNSWVBUT19nY20xMjhfZGVjcnlwdDsKKysJCUVOR0lORV9sb2FkX3JzYXg7CisrCQlDUllQVE9fZ2NtMTI4X2RlY3J5cHRfY3RyMzI7CisrCQlDUllQVE9fZ2NtMTI4X2VuY3J5cHRfY3RyMzI7CisrCQlDUllQVE9fZ2NtMTI4X2ZpbmlzaDsKKysJCUVWUF9hZXNfMjU2X2NiY19obWFjX3NoYTE7CisrCQlQS0NTNV9wYmtkZjJfc2V0OworKwkJQ01TX2FkZDBfcmVjaXBpZW50X3Bhc3N3b3JkOworKwkJQ01TX2RlY3J5cHRfc2V0MV9wYXNzd29yZDsKKysJCUNNU19SZWNpcGllbnRJbmZvX3NldDBfcGFzc3dvcmQ7CisrCQlSQU5EX3NldF9maXBzX2RyYmdfdHlwZTsKKysJCVg1MDlfUkVRX3NpZ25fY3R4OworKwkJUlNBX1BTU19QQVJBTVNfbmV3OworKwkJWDUwOV9DUkxfc2lnbl9jdHg7CisrCQlYNTA5X3NpZ25hdHVyZV9kdW1wOworKwkJZDJpX1JTQV9QU1NfUEFSQU1TOworKwkJUlNBX1BTU19QQVJBTVNfaXQ7CisrCQlSU0FfUFNTX1BBUkFNU19mcmVlOworKwkJWDUwOV9zaWduX2N0eDsKKysJCWkyZF9SU0FfUFNTX1BBUkFNUzsKKysJCUFTTjFfaXRlbV9zaWduX2N0eDsKKysJCUVDX0dGcF9uaXN0cDUyMV9tZXRob2Q7CisrCQlFQ19HRnBfbmlzdHAyNTZfbWV0aG9kOworKwkJT1BFTlNTTF9zdGRlcnI7CisrCQlPUEVOU1NMX2NwdWlkX3NldHVwOworKwkJT1BFTlNTTF9zaG93ZmF0YWw7CisrCQlCSU9fbmV3X2RncmFtX3NjdHA7CisrCQlCSU9fZGdyYW1fc2N0cF9tc2dfd2FpdGluZzsKKysJCUJJT19kZ3JhbV9zY3RwX3dhaXRfZm9yX2RyeTsKKysJCUJJT19zX2RhdGFncmFtX3NjdHA7CisrCQlCSU9fZGdyYW1faXNfc2N0cDsKKysJCUJJT19kZ3JhbV9zY3RwX25vdGlmaWNhdGlvbl9jYjsKKyt9IE9QRU5TU0xfMS4wLjA7CisrCisrT1BFTlNTTF8xLjAuMWQgeworKwlnbG9iYWw6CisrCQlDUllQVE9fbWVtY21wOworK30gT1BFTlNTTF8xLjAuMTsKKysKKytPUEVOU1NMXzEuMC4yIHsKKysJZ2xvYmFsOgorKwkJU1NMX0NUWF9zZXRfYWxwbl9wcm90b3M7CisrCQlTU0xfc2V0X2FscG5fcHJvdG9zOworKwkJU1NMX0NUWF9zZXRfYWxwbl9zZWxlY3RfY2I7CisrCQlTU0xfZ2V0MF9hbHBuX3NlbGVjdGVkOworKwkJU1NMX0NUWF9zZXRfY3VzdG9tX2NsaV9leHQ7CisrCQlTU0xfQ1RYX3NldF9jdXN0b21fc3J2X2V4dDsKKysJCVNTTF9DVFhfc2V0X3Nydl9zdXBwX2RhdGE7CisrCQlTU0xfQ1RYX3NldF9jbGlfc3VwcF9kYXRhOworKwkJU1NMX3NldF9jZXJ0X2NiOworKwkJU1NMX0NUWF91c2Vfc2VydmVyaW5mbzsKKysJCVNTTF9DVFhfdXNlX3NlcnZlcmluZm9fZmlsZTsKKysJCVNTTF9DVFhfc2V0X2NlcnRfY2I7CisrCQlTU0xfQ1RYX2dldDBfcGFyYW07CisrCQlTU0xfZ2V0MF9wYXJhbTsKKysJCVNTTF9jZXJ0c19jbGVhcjsKKysJCURUTFN2MV8yX21ldGhvZDsKKysJCURUTFN2MV8yX3NlcnZlcl9tZXRob2Q7CisrCQlEVExTdjFfMl9jbGllbnRfbWV0aG9kOworKwkJRFRMU19tZXRob2Q7CisrCQlEVExTX3NlcnZlcl9tZXRob2Q7CisrCQlEVExTX2NsaWVudF9tZXRob2Q7CisrCQlTU0xfQ1RYX2dldF9zc2xfbWV0aG9kOworKwkJU1NMX0NUWF9nZXQwX2NlcnRpZmljYXRlOworKwkJU1NMX0NUWF9nZXQwX3ByaXZhdGVrZXk7CisrCQlTU0xfQ09NUF9zZXQwX2NvbXByZXNzaW9uX21ldGhvZHM7CisrCQlTU0xfQ09NUF9mcmVlX2NvbXByZXNzaW9uX21ldGhvZHM7CisrCQlTU0xfQ0lQSEVSX2ZpbmQ7CisrCQlTU0xfaXNfc2VydmVyOworKwkJU1NMX0NPTkZfQ1RYX25ldzsKKysJCVNTTF9DT05GX0NUWF9maW5pc2g7CisrCQlTU0xfQ09ORl9DVFhfZnJlZTsKKysJCVNTTF9DT05GX0NUWF9zZXRfZmxhZ3M7CisrCQlTU0xfQ09ORl9DVFhfY2xlYXJfZmxhZ3M7CisrCQlTU0xfQ09ORl9DVFhfc2V0MV9wcmVmaXg7CisrCQlTU0xfQ09ORl9DVFhfc2V0X3NzbDsKKysJCVNTTF9DT05GX0NUWF9zZXRfc3NsX2N0eDsKKysJCVNTTF9DT05GX2NtZDsKKysJCVNTTF9DT05GX2NtZF9hcmd2OworKwkJU1NMX0NPTkZfY21kX3ZhbHVlX3R5cGU7CisrCQlTU0xfdHJhY2U7CisrCQlTU0xfQ0lQSEVSX3N0YW5kYXJkX25hbWU7CisrCQlTU0xfZ2V0X3Rsc2FfcmVjb3JkX2J5bmFtZTsKKysJCUFTTjFfVElNRV9kaWZmOworKwkJQklPX2hleF9zdHJpbmc7CisrCQlDTVNfUmVjaXBpZW50SW5mb19nZXQwX3BrZXlfY3R4OworKwkJQ01TX1JlY2lwaWVudEluZm9fZW5jcnlwdDsKKysJCUNNU19TaWduZXJJbmZvX2dldDBfcGtleV9jdHg7CisrCQlDTVNfU2lnbmVySW5mb19nZXQwX21kX2N0eDsKKysJCUNNU19TaWduZXJJbmZvX2dldDBfc2lnbmF0dXJlOworKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9nZXQwX2FsZzsKKysJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfZ2V0MF9yZWtzOworKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9nZXQwX29yaWdfaWQ7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rYXJpX29yaWdfaWRfY21wOworKwkJQ01TX1JlY2lwaWVudEVuY3J5cHRlZEtleV9nZXQwX2lkOworKwkJQ01TX1JlY2lwaWVudEVuY3J5cHRlZEtleV9jZXJ0X2NtcDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfc2V0MF9wa2V5OworKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9nZXQwX2N0eDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfZGVjcnlwdDsKKysJCUNNU19TaGFyZWRJbmZvX2VuY29kZTsKKysJCURIX2NvbXB1dGVfa2V5X3BhZGRlZDsKKysJCWQyaV9ESHhwYXJhbXM7CisrCQlpMmRfREh4cGFyYW1zOworKwkJREhfZ2V0XzEwMjRfMTYwOworKwkJREhfZ2V0XzIwNDhfMjI0OworKwkJREhfZ2V0XzIwNDhfMjU2OworKwkJREhfS0RGX1g5XzQyOworKwkJRUNESF9LREZfWDlfNjI7CisrCQlFQ0RTQV9NRVRIT0RfbmV3OworKwkJRUNEU0FfTUVUSE9EX2ZyZWU7CisrCQlFQ0RTQV9NRVRIT0Rfc2V0X2FwcF9kYXRhOworKwkJRUNEU0FfTUVUSE9EX2dldF9hcHBfZGF0YTsKKysJCUVDRFNBX01FVEhPRF9zZXRfc2lnbjsKKysJCUVDRFNBX01FVEhPRF9zZXRfc2lnbl9zZXR1cDsKKysJCUVDRFNBX01FVEhPRF9zZXRfdmVyaWZ5OworKwkJRUNEU0FfTUVUSE9EX3NldF9mbGFnczsKKysJCUVDRFNBX01FVEhPRF9zZXRfbmFtZTsKKysJCUVWUF9kZXNfZWRlM193cmFwOworKwkJRVZQX2Flc18xMjhfd3JhcDsKKysJCUVWUF9hZXNfMTkyX3dyYXA7CisrCQlFVlBfYWVzXzI1Nl93cmFwOworKwkJRVZQX2Flc18xMjhfY2JjX2htYWNfc2hhMjU2OworKwkJRVZQX2Flc18yNTZfY2JjX2htYWNfc2hhMjU2OworKwkJQ1JZUFRPXzEyOF93cmFwOworKwkJQ1JZUFRPXzEyOF91bndyYXA7CisrCQlPQ1NQX1JFUV9DVFhfbmJpbzsKKysJCU9DU1BfUkVRX0NUWF9uZXc7CisrCQlPQ1NQX3NldF9tYXhfcmVzcG9uc2VfbGVuZ3RoOworKwkJT0NTUF9SRVFfQ1RYX2kyZDsKKysJCU9DU1BfUkVRX0NUWF9uYmlvX2QyaTsKKysJCU9DU1BfUkVRX0NUWF9nZXQwX21lbV9iaW87CisrCQlPQ1NQX1JFUV9DVFhfaHR0cDsKKysJCVJTQV9wYWRkaW5nX2FkZF9QS0NTMV9PQUVQX21nZjE7CisrCQlSU0FfcGFkZGluZ19jaGVja19QS0NTMV9PQUVQX21nZjE7CisrCQlSU0FfT0FFUF9QQVJBTVNfZnJlZTsKKysJCVJTQV9PQUVQX1BBUkFNU19pdDsKKysJCVJTQV9PQUVQX1BBUkFNU19uZXc7CisrCQlTU0xfZ2V0X3NpZ2FsZ3M7CisrCQlTU0xfZ2V0X3NoYXJlZF9zaWdhbGdzOworKwkJU1NMX2NoZWNrX2NoYWluOworKwkJWDUwOV9jaGFpbl91cF9yZWY7CisrCQlYNTA5X2h0dHBfbmJpbzsKKysJCVg1MDlfQ1JMX2h0dHBfbmJpbzsKKysJCVg1MDlfUkVWT0tFRF9kdXA7CisrCQlpMmRfcmVfWDUwOV90YnM7CisrCQlYNTA5X2dldDBfc2lnbmF0dXJlOworKwkJWDUwOV9nZXRfc2lnbmF0dXJlX25pZDsKKysJCVg1MDlfQ1JMX2RpZmY7CisrCQlYNTA5X2NoYWluX2NoZWNrX3N1aXRlYjsKKysJCVg1MDlfQ1JMX2NoZWNrX3N1aXRlYjsKKysJCVg1MDlfY2hlY2tfaG9zdDsKKysJCVg1MDlfY2hlY2tfZW1haWw7CisrCQlYNTA5X2NoZWNrX2lwOworKwkJWDUwOV9jaGVja19pcF9hc2M7CisrCQlYNTA5X1NUT1JFX3NldF9sb29rdXBfY3Jsc19jYjsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDBfc3RvcmU7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX2hvc3Q7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9hZGQxX2hvc3Q7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfaG9zdGZsYWdzOworKwkJWDUwOV9WRVJJRllfUEFSQU1fZ2V0MF9wZWVybmFtZTsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3NldDFfZW1haWw7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX2lwOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0MV9pcF9hc2M7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXQwX25hbWU7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXRfY291bnQ7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXQwOworKwkJWDUwOVYzX0VYVF9mcmVlOworKwkJRUNfR1JPVVBfZ2V0X21vbnRfZGF0YTsKKysJCUVDX2N1cnZlX25pZDJuaXN0OworKwkJRUNfY3VydmVfbmlzdDJuaWQ7CisrCQlQRU1fd3JpdGVfYmlvX0RIeHBhcmFtczsKKysJCVBFTV93cml0ZV9ESHhwYXJhbXM7CisrCQlTU0xfQ1RYX2FkZF9jbGllbnRfY3VzdG9tX2V4dDsKKysJCVNTTF9DVFhfYWRkX3NlcnZlcl9jdXN0b21fZXh0OworKwkJU1NMX2V4dGVuc2lvbl9zdXBwb3J0ZWQ7CisrCQlCVUZfc3RybmxlbjsKKysJCXNrX2RlZXBfY29weTsKKysJCVNTTF90ZXN0X2Z1bmN0aW9uczsKKyt9IE9QRU5TU0xfMS4wLjFkOworKworSW5kZXg6IG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L2VuZ2luZXMvb3BlbnNzbC5sZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L2VuZ2luZXMvb3BlbnNzbC5sZAkyMDE0LTAyLTI0IDIxOjAyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwxMCBAQAorK09QRU5TU0xfMS4wLjAgeworKwlnbG9iYWw6CisrCQliaW5kX2VuZ2luZTsKKysJCXZfY2hlY2s7CisrCQlPUEVOU1NMX2luaXQ7CisrCQlPUEVOU1NMX2ZpbmlzaDsKKysJbG9jYWw6CisrCQkqOworK307CisrCitJbmRleDogb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvZW5naW5lcy9jY2dvc3Qvb3BlbnNzbC5sZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L2VuZ2luZXMvY2Nnb3N0L29wZW5zc2wubGQJMjAxNC0wMi0yNCAyMTowMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMTAgQEAKKytPUEVOU1NMXzEuMC4wIHsKKysJZ2xvYmFsOgorKwkJYmluZF9lbmdpbmU7CisrCQl2X2NoZWNrOworKwkJT1BFTlNTTF9pbml0OworKwkJT1BFTlNTTF9maW5pc2g7CisrCWxvY2FsOgorKwkJKjsKKyt9OworKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLzAwMDEtRml4LWJ1aWxkLXdpdGgtY2xhbmctdXNpbmctZXh0ZXJuYWwtYXNzZW1ibGVyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLTEuMC4ybi8wMDAxLUZpeC1idWlsZC13aXRoLWNsYW5nLXVzaW5nLWV4dGVybmFsLWFzc2VtYmxlci5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLzAwMDEtRml4LWJ1aWxkLXdpdGgtY2xhbmctdXNpbmctZXh0ZXJuYWwtYXNzZW1ibGVyLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuLzAwMDEtRml4LWJ1aWxkLXdpdGgtY2xhbmctdXNpbmctZXh0ZXJuYWwtYXNzZW1ibGVyLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuLzAwMDEtb3BlbnNzbC1mb3JjZS1zb2Z0LWxpbmstdG8tYXZvaWQtcmFyZS1yYWNlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLTEuMC4ybi8wMDAxLW9wZW5zc2wtZm9yY2Utc29mdC1saW5rLXRvLWF2b2lkLXJhcmUtcmFjZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDFhOWIxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLTEuMC4ybi8wMDAxLW9wZW5zc2wtZm9yY2Utc29mdC1saW5rLXRvLWF2b2lkLXJhcmUtcmFjZS5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIDNkOTE5OTQyM2Q0ODc2NjY0OWEyYjJlYmIzOTI0ZTg5MmVkMTZmYTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSYW5keSBNYWNMZW9kIDxSYW5keS5NYWNMZW9kQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDIwIEp1biAyMDE3IDE1OjMyOjA4IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIG9wZW5zc2w6IEZvcmNlIHNvZnQgbGluayB0byBhdm9pZCByYXJlIHJhY2UKKworVGhpcyBwYXRjaCB3b3JrcyBhcm91bmQgYSByYXJlIHBhcmFsbGVsIGJ1aWxkIHJhY2UgY29uZGl0aW9uLiAKK1RoZSBlcnJvciBzZWVuIGlzOgorCitsbjogZmFpbGVkIHRvIGNyZWF0ZSBzeW1ib2xpYyBsaW5rICdsaWJzc2wuc28nOiBGaWxlIGV4aXN0cworbWFrZVs0XTogKioqIFtNYWtlZmlsZS5zaGFyZWQ6MTcxOiBsaW5rX2EuZ251XSBFcnJvciAxCittYWtlWzRdOiBMZWF2aW5nIGRpcmVjdG9yeQorJy8uLi4vYnVpbGQvdG1wLWdsaWJjL3dvcmsveDg2XzY0LWxpbnV4L29wZW5zc2wtbmF0aXZlLzEuMC4yay1yMC9vcGVuc3NsLTEuMC4yaycKKworVGhlIG9wZW5zc2wgdGVhbSBpcyByZXdyaXRpbmcgdGhlaXIgYnVpbGQgZmlsZXMgc28gaXQncyBub3QKK2FwcHJvcHJpYXRlIGZvciBvcGVuc3NsIHVwc3RyZWFtIGFuZCBmaXhpbmcgdGhlIHJvb3QgY2F1c2Ugb2YKK3RoZSBNYWtlZmlsZSByYWNlIGNvbmRpdGlvbiB3YXMgYWxzbyBub3QgcHVyc3VlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtidWlsZCBydWxlcyByZXdyaXRlIGluIHByb2dyZXNzXQorU2lnbmVkLW9mZi1ieTogUmFuZHkgTWFjTGVvZCA8UmFuZHkuTWFjTGVvZEB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuc2hhcmVkIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLnNoYXJlZCBiL01ha2VmaWxlLnNoYXJlZAoraW5kZXggZThkMjIyYS4uMWJmZjkyZiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLnNoYXJlZAorKysrIGIvTWFrZWZpbGUuc2hhcmVkCitAQCAtMTE4LDE0ICsxMTgsMTQgQEAKKyAJCWlmIFsgLW4gIiQkU0hMSUJfQ09NUEFUIiBdOyB0aGVuIFwKKyAJCQlmb3IgeCBpbiAkJFNITElCX0NPTVBBVDsgZG8gXAorIAkJCQkoICQoU0VUX1gpOyBybSAtZiAkJFNITElCJCR4JCRTSExJQl9TVUZGSVg7IFwKKy0JCQkJICBsbiAtcyAkJHByZXYgJCRTSExJQiQkeCQkU0hMSUJfU1VGRklYICk7IFwKKysJCQkJICBsbiAtc2YgJCRwcmV2ICQkU0hMSUIkJHgkJFNITElCX1NVRkZJWCApOyBcCisgCQkJCXByZXY9JCRTSExJQiQkeCQkU0hMSUJfU1VGRklYOyBcCisgCQkJZG9uZTsgXAorIAkJZmk7IFwKKyAJCWlmIFsgLW4gIiQkU0hMSUJfU09WRVIiIF07IHRoZW4gXAorIAkJCVsgLWUgIiQkU0hMSUIkJFNITElCX1NVRkZJWCIgXSB8fCBcCisgCQkJKCAkKFNFVF9YKTsgcm0gLWYgJCRTSExJQiQkU0hMSUJfU1VGRklYOyBcCistCQkJICBsbiAtcyAkJHByZXYgJCRTSExJQiQkU0hMSUJfU1VGRklYICk7IFwKKysJCQkgIGxuIC1zZiAkJHByZXYgJCRTSExJQiQkU0hMSUJfU1VGRklYICk7IFwKKyAJCWZpOyBcCisgCWZpCisgCistLSAKKzIuOS4zCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuL01ha2VmaWxlcy1wdGVzdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vTWFrZWZpbGVzLXB0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMjJmYTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuL01ha2VmaWxlcy1wdGVzdC5wYXRjaApAQCAtMCwwICsxLDkzIEBACitGcm9tIGExNzZjNjlmNGZkZmJmYTdlNGNjYjc5ZDkxYzNiNjYwMmRhN2U2OWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRlcnMgUm94ZWxsIDxhbmRlcnMucm94ZWxsQGVuZWEuY29tPgorRGF0ZTogVGh1LCAyNCBBcHIgMjAxNCAxOToyODoyNSArMDIwMAorU3ViamVjdDogW1BBVENIIDE5LzI4XSBvcGVuc3NsOiBlbmFibGUgcHRlc3Qgc3VwcG9ydAorCitBZGQgJ2J1aWxkdGVzdCcgYW5kICdydW50ZXN0JyB0YXJnZXRzIHRvIE1ha2VmaWxlLCB0byBidWlsZCBhbmQgcnVuIHRlc3RzCitjcm9zcy1jb21waWxlZC4KKworU2lnbmVkLW9mZi1ieTogQW5kZXJzIFJveGVsbCA8YW5kZXJzLnJveGVsbEBlbmVhLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tCisgTWFrZWZpbGUub3JnICAgICAgIHwgIDEwICstCisgTWFrZWZpbGUub3JnLm9yaWcgIHwgICA3ICstCisgdGVzdC9NYWtlZmlsZSAgICAgIHwgIDEzICstCisgdGVzdC9NYWtlZmlsZS5vcmlnIHwgOTg3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgNCBmaWxlcyBjaGFuZ2VkLCAxMDA5IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3QvTWFrZWZpbGUub3JpZworCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUub3JnIGIvTWFrZWZpbGUub3JnCitpbmRleCAxMTFmYmJhLi44ZTc5MzZjIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUub3JnCisrKysgYi9NYWtlZmlsZS5vcmcKK0BAIC00NjgsOCArNDY4LDE2IEBAIHJlaGFzaC50aW1lOiBjZXJ0cyBhcHBzCisgdGVzdDogICB0ZXN0cworIAorIHRlc3RzOiByZWhhc2gKKysJJChNQUtFKSBidWlsZHRlc3QKKysJJChNQUtFKSBydW50ZXN0CisrCisrYnVpbGR0ZXN0OgorKwlAKGNkIHRlc3QgJiYgXAorKwkkKENMRUFSRU5WKSAmJiAkKE1BS0UpIC1lICQoQlVJTERFTlYpIFRPUD0uLiBURVNUUz0nJChURVNUUyknIE9QRU5TU0xfREVCVUdfTUVNT1JZPW9uIE9QRU5TU0xfQ09ORj0uLi9hcHBzL29wZW5zc2wuY25mIGV4ZSBhcHBzKTsKKysKKytydW50ZXN0OgorIAlAKGNkIHRlc3QgJiYgZWNobyAidGVzdGluZy4uLiIgJiYgXAorLQkkKENMRUFSRU5WKSAmJiAkKE1BS0UpIC1lICQoQlVJTERFTlYpIFRPUD0uLiBURVNUUz0nJChURVNUUyknIE9QRU5TU0xfREVCVUdfTUVNT1JZPW9uIE9QRU5TU0xfQ09ORj0uLi9hcHBzL29wZW5zc2wuY25mIHRlc3RzICk7CisrCSQoQ0xFQVJFTlYpICYmICQoTUFLRSkgLWUgJChCVUlMREVOVikgVE9QPS4uIFRFU1RTPSckKFRFU1RTKScgT1BFTlNTTF9ERUJVR19NRU1PUlk9b24gT1BFTlNTTF9DT05GPS4uL2FwcHMvb3BlbnNzbC5jbmYgYWxsdGVzdHMgKTsKKyAJT1BFTlNTTF9DT05GPWFwcHMvb3BlbnNzbC5jbmYgdXRpbC9vcGVuc3Nsd3JhcC5zaCB2ZXJzaW9uIC1hCisgCisgcmVwb3J0OgorZGlmZiAtLWdpdCBhL3Rlc3QvTWFrZWZpbGUgYi90ZXN0L01ha2VmaWxlCitpbmRleCBhMWY3ZWViLi5iMjk4NGM0IDEwMDY0NAorLS0tIGEvdGVzdC9NYWtlZmlsZQorKysrIGIvdGVzdC9NYWtlZmlsZQorQEAgLTE1MCw3ICsxNTAsNyBAQCB0ZXN0czoJZXhlIGFwcHMgJChURVNUUykKKyBhcHBzOgorIAlAKGNkIC4uOyAkKE1BS0UpIERJUlM9YXBwcyBhbGwpCisgCistYWxsdGVzdHM6IFwKKythbGwtdGVzdHM9IFwKKyAJdGVzdF9kZXMgdGVzdF9pZGVhIHRlc3Rfc2hhIHRlc3RfbWQ0IHRlc3RfbWQ1IHRlc3RfaG1hYyBcCisgCXRlc3RfbWQyIHRlc3RfbWRjMiB0ZXN0X3dwIFwKKyAJdGVzdF9ybWQgdGVzdF9yYzIgdGVzdF9yYzQgdGVzdF9yYzUgdGVzdF9iZiB0ZXN0X2Nhc3QgdGVzdF9hZXMgXAorQEAgLTE2Miw2ICsxNjIsMTEgQEAgYWxsdGVzdHM6IFwKKyAJdGVzdF9jb25zdGFudF90aW1lIHRlc3RfdmVyaWZ5X2V4dHJhIHRlc3RfY2xpZW50aGVsbG8gdGVzdF9zc2x2MmNvbmZ0ZXN0IFwKKyAJdGVzdF9kdGxzIHRlc3RfYmFkX2R0bHMgdGVzdF9mYXRhbGVycgorIAorK2FsbHRlc3RzOgorKwlAKGZvciBpIGluICQoYWxsLXRlc3RzKTsgZG8gXAorKwkoICQoTUFLRSkgJCRpICYmIGVjaG8gIlBBU1M6ICQkaSIgKSB8fCBlY2hvICJGQUlMOiAkJGkiOyBcCisrCWRvbmUpCisrCisgdGVzdF9ldnA6ICQoRVZQVEVTVCkkKEVYRV9FWFQpIGV2cHRlc3RzLnR4dAorIAkuLi91dGlsL3NobGliX3dyYXAuc2ggLi8kKEVWUFRFU1QpIGV2cHRlc3RzLnR4dAorIAorQEAgLTIzMCw3ICsyMzUsNyBAQCB0ZXN0X3g1MDk6IC4uL2FwcHMvb3BlbnNzbCQoRVhFX0VYVCkgdHg1MDkgdGVzdHg1MDkucGVtIHYzLWNlcnQxLnBlbSB2My1jZXJ0Mi5wZQorIAllY2hvIHRlc3Qgc2Vjb25kIHg1MDl2MyBjZXJ0aWZpY2F0ZQorIAlzaCAuL3R4NTA5IHYzLWNlcnQyLnBlbSAyPi9kZXYvbnVsbAorIAorLXRlc3RfcnNhOiAkKFJTQVRFU1QpJChFWEVfRVhUKSAuLi9hcHBzL29wZW5zc2wkKEVYRV9FWFQpIHRyc2EgdGVzdHJzYS5wZW0KKyt0ZXN0X3JzYTogLi4vYXBwcy9vcGVuc3NsJChFWEVfRVhUKSB0cnNhIHRlc3Ryc2EucGVtCisgCUBzaCAuL3Ryc2EgMj4vZGV2L251bGwKKyAJLi4vdXRpbC9zaGxpYl93cmFwLnNoIC4vJChSU0FURVNUKQorIAorQEAgLTMzMSwxMSArMzM2LDExIEBAIHRlc3RfdHNhOiAuLi9hcHBzL29wZW5zc2wkKEVYRV9FWFQpIHRlc3R0c2EgQ0F0c2EuY25mIC4uL3V0aWwvc2hsaWJfd3JhcC5zaAorIAkgIHNoIC4vdGVzdHRzYTsgXAorIAlmaQorIAorLXRlc3RfaWdlOiAkKElHRVRFU1QpJChFWEVfRVhUKQorK3Rlc3RfaWdlOgorIAlAZWNobyAiVGVzdCBJR0UgbW9kZSIKKyAJLi4vdXRpbC9zaGxpYl93cmFwLnNoIC4vJChJR0VURVNUKQorIAorLXRlc3RfanBha2U6ICQoSlBBS0VURVNUKSQoRVhFX0VYVCkKKyt0ZXN0X2pwYWtlOgorIAlAZWNobyAiVGVzdCBKUEFLRSIKKyAJLi4vdXRpbC9zaGxpYl93cmFwLnNoIC4vJChKUEFLRVRFU1QpCisgCistLSAKKzIuMTUuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvVXNlLVNIQTI1Ni1ub3QtTUQ1LWFzLWRlZmF1bHQtZGlnZXN0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLTEuMC4ybi9Vc2UtU0hBMjU2LW5vdC1NRDUtYXMtZGVmYXVsdC1kaWdlc3QucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9Vc2UtU0hBMjU2LW5vdC1NRDUtYXMtZGVmYXVsdC1kaWdlc3QucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vVXNlLVNIQTI1Ni1ub3QtTUQ1LWFzLWRlZmF1bHQtZGlnZXN0LnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuL2NvbmZpZ3VyZS1tdXNsLXRhcmdldC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vY29uZmlndXJlLW11c2wtdGFyZ2V0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNTdiM2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuL2NvbmZpZ3VyZS1tdXNsLXRhcmdldC5wYXRjaApAQCAtMCwwICsxLDI1IEBACitBZGQgbXVzbCB0cmlwbGV0IHN1cHBvcnQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogb3BlbnNzbC0xLjAuMmEvQ29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMmEub3JpZy9Db25maWd1cmUKKysrKyBvcGVuc3NsLTEuMC4yYS9Db25maWd1cmUKK0BAIC00MzEsNyArNDMxLDcgQEAgbXkgJXRhYmxlPSgKKyAjCisgIyAgICAgICAuL0NvbmZpZ3VyZSBsaW51eC1hcm12NCAtbWFyY2g9YXJtdjYgLURfX0FSTV9NQVhfQVJDSF9fPTgKKyAjCistImxpbnV4LWFybXY0IiwJImdjYzogLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHthcm12NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1hcm12NCIsICJnY2M6IC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7YXJtdjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKyAibGludXgtYWFyY2g2NCIsImdjYzogLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke2FhcmNoNjRfYXNtfTpsaW51eDY0OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorICMgQ29uZmlndXJlIHNjcmlwdCBhZGRzIG1pbmltYWxseSByZXF1aXJlZCAtbWFyY2ggZm9yIGFzc2VtYmx5IHN1cHBvcnQsCisgIyBpZiBubyAtbWFyY2ggd2FzIHNwZWNpZmllZCBhdCBjb21tYW5kIGxpbmUuIG1pcHMzMiBhbmQgbWlwczY0IGJlbG93CitAQCAtNTA0LDQgKzUwNCw2IEBAIG15ICV0YWJsZT0oCisgImxpbnV4LWdudWVhYmktYXJtZWIiLCIkRU5WeydDQyd9Oi1EQl9FTkRJQU4gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgREVTX1JJU0MxOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysibGludXgtbXVzbGVhYmktYXJtIiwiJEVOVnsnQ0MnfTotRExfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxpbnV4LW11c2xlYWJpLWFybWViIiwiJEVOVnsnQ0MnfTotREJfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisgCisgImxpbnV4LWF2cjMyIiwiJEVOVnsnQ0MnfTotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS4iLAorIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLTEuMC4ybi9jb25maWd1cmUtdGFyZ2V0cy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vY29uZmlndXJlLXRhcmdldHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUwMTU4OQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vY29uZmlndXJlLXRhcmdldHMucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworVGhlIG51bWJlciBvZiBjb2xvbnMgYXJlIGltcG9ydGFudCA6KQorCisKKy0tLQorIENvbmZpZ3VyZSB8ICAgMTYgKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspCisKK0luZGV4OiBvcGVuc3NsLTEuMC4yYS9Db25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yYS5vcmlnL0NvbmZpZ3VyZQorKysrIG9wZW5zc2wtMS4wLjJhL0NvbmZpZ3VyZQorQEAgLTQ0Myw2ICs0NDMsMjEgQEAgbXkgJXRhYmxlPSgKKyAibGludXgtYWxwaGEtY2NjIiwiY2NjOi1mYXN0IC1yZWFkb25seV9zdHJpbmdzIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX0iLAorICJsaW51eC1hbHBoYStid3gtY2NjIiwiY2NjOi1mYXN0IC1yZWFkb25seV9zdHJpbmdzIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX0iLAorIAorKyAKKysjIExpbnV4IG9uIEFSTQorKyJsaW51eC1lbGYtYXJtIiwiJEVOVnsnQ0MnfTotRExfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxpbnV4LWVsZi1hcm1lYiIsIiRFTlZ7J0NDJ306LURCX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1nbnVlYWJpLWFybSIsIiRFTlZ7J0NDJ306LURMX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1nbnVlYWJpLWFybWViIiwiJEVOVnsnQ0MnfTotREJfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrCisrImxpbnV4LWF2cjMyIiwiJEVOVnsnQ0MnfTotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS4iLAorKworKyMjIyMgTGludXggb24gTUlQUy9NSVBTNjQKKysibGludXgtbWlwcyIsIiRFTlZ7J0NDJ306LURCX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMIERFU19SSVNDMjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxpbnV4LW1pcHM2NCIsIiRFTlZ7J0NDJ306LURCX0VORElBTiAtbWFiaT02NCAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysibGludXgtbWlwczY0ZWwiLCIkRU5WeydDQyd9Oi1ETF9FTkRJQU4gLW1hYmk9NjQgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMIERFU19SSVNDMjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxpbnV4LW1pcHNlbCIsIiRFTlZ7J0NDJ306LURMX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMIERFU19SSVNDMjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrCisgIyBBbmRyb2lkOiBsaW51eC0qIGJ1dCB3aXRob3V0IHBvaW50ZXJzIHRvIGhlYWRlcnMgYW5kIGxpYnMuCisgImFuZHJvaWQiLCJnY2M6LW1hbmRyb2lkIC1JXCQoQU5EUk9JRF9ERVYpL2luY2x1ZGUgLUJcJChBTkRST0lEX0RFVikvbGliIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKyAiYW5kcm9pZC14ODYiLCJnY2M6LW1hbmRyb2lkIC1JXCQoQU5EUk9JRF9ERVYpL2luY2x1ZGUgLUJcJChBTkRST0lEX0RFVikvbGliIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToiLmV2YWx7bXkgJGFzbT0ke3g4Nl9lbGZfYXNtfTskYXNtPX5zLzplbGYvOmFuZHJvaWQvOyRhc219LiI6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2NfcmVoYXNoLWNvbXBhdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vZGViaWFuL2NfcmVoYXNoLWNvbXBhdC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9jX3JlaGFzaC1jb21wYXQucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vZGViaWFuL2NfcmVoYXNoLWNvbXBhdC5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9jYS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vZGViaWFuL2NhLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2NhLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuL2RlYmlhbi9jYS5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9kZWJpYW4tdGFyZ2V0cy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vZGViaWFuL2RlYmlhbi10YXJnZXRzLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2RlYmlhbi10YXJnZXRzLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuL2RlYmlhbi9kZWJpYW4tdGFyZ2V0cy5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9tYW4tZGlyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLTEuMC4ybi9kZWJpYW4vbWFuLWRpci5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9tYW4tZGlyLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuL2RlYmlhbi9tYW4tZGlyLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL21hbi1zZWN0aW9uLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLTEuMC4ybi9kZWJpYW4vbWFuLXNlY3Rpb24ucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vbWFuLXNlY3Rpb24ucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vZGViaWFuL21hbi1zZWN0aW9uLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL25vLXJwYXRoLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLTEuMC4ybi9kZWJpYW4vbm8tcnBhdGgucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vbm8tcnBhdGgucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vZGViaWFuL25vLXJwYXRoLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL25vLXN5bWJvbGljLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLTEuMC4ybi9kZWJpYW4vbm8tc3ltYm9saWMucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vbm8tc3ltYm9saWMucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vZGViaWFuL25vLXN5bWJvbGljLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL3BpYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vZGViaWFuL3BpYy5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9waWMucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vZGViaWFuL3BpYy5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbjEuMC4yL2Jsb2NrX2RpZ2ljZXJ0X21hbGF5c2lhLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLTEuMC4ybi9kZWJpYW4xLjAuMi9ibG9ja19kaWdpY2VydF9tYWxheXNpYS5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbjEuMC4yL2Jsb2NrX2RpZ2ljZXJ0X21hbGF5c2lhLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuL2RlYmlhbjEuMC4yL2Jsb2NrX2RpZ2ljZXJ0X21hbGF5c2lhLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuMS4wLjIvYmxvY2tfZGlnaW5vdGFyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLTEuMC4ybi9kZWJpYW4xLjAuMi9ibG9ja19kaWdpbm90YXIucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4xLjAuMi9ibG9ja19kaWdpbm90YXIucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vZGViaWFuMS4wLjIvYmxvY2tfZGlnaW5vdGFyLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuL2RlYmlhbjEuMC4yL3NvbmFtZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vZGViaWFuMS4wLjIvc29uYW1lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZGQ5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuL2RlYmlhbjEuMC4yL3NvbmFtZS5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworSW5kZXg6IG9wZW5zc2wtMS4wLjJkL2NyeXB0by9vcGVuc3Nsdi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMmQub3JpZy9jcnlwdG8vb3BlbnNzbHYuaAorKysrIG9wZW5zc2wtMS4wLjJkL2NyeXB0by9vcGVuc3Nsdi5oCitAQCAtODgsNyArODgsNyBAQCBleHRlcm4gIkMiIHsKKyAgKiBzaG91bGQgb25seSBrZWVwIHRoZSB2ZXJzaW9ucyB0aGF0IGFyZSBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50LgorICAqLworICMgZGVmaW5lIFNITElCX1ZFUlNJT05fSElTVE9SWSAiIgorLSMgZGVmaW5lIFNITElCX1ZFUlNJT05fTlVNQkVSICIxLjAuMCIKKysjIGRlZmluZSBTSExJQl9WRVJTSU9OX05VTUJFUiAiMS4wLjIiCisgCisgCisgI2lmZGVmICBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLTEuMC4ybi9kZWJpYW4xLjAuMi92ZXJzaW9uLXNjcmlwdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vZGViaWFuMS4wLjIvdmVyc2lvbi1zY3JpcHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQwNGVlMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vZGViaWFuMS4wLjIvdmVyc2lvbi1zY3JpcHQucGF0Y2gKQEAgLTAsMCArMSw0NjU4IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworSW5kZXg6IG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L0NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1Lm9yaWcvQ29uZmlndXJlCTIwMTQtMDItMjQgMjE6MDI6MzAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvQ29uZmlndXJlCTIwMTQtMDItMjQgMjE6MDI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMTY1MSw2ICsxNjUxLDggQEAKKyAJCX0KKyAJfQorIAorKyRzaGFyZWRfbGRmbGFnIC49ICIgLVdsLC0tdmVyc2lvbi1zY3JpcHQ9b3BlbnNzbC5sZCI7CisrCisgb3BlbihJTiwnPE1ha2VmaWxlLm9yZycpIHx8IGRpZSAidW5hYmxlIHRvIHJlYWQgTWFrZWZpbGUub3JnOiQhXG4iOworIHVubGluaygiJE1ha2VmaWxlLm5ldyIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbW92ZSBvbGQgJE1ha2VmaWxlLm5ldzokIVxuIiBpZiAtZSAiJE1ha2VmaWxlLm5ldyI7Cisgb3BlbihPVVQsIj4kTWFrZWZpbGUubmV3IikgfHwgZGllICJ1bmFibGUgdG8gY3JlYXRlICRNYWtlZmlsZS5uZXc6JCFcbiI7CitJbmRleDogb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvb3BlbnNzbC5sZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L29wZW5zc2wubGQJMjAxNC0wMi0yNCAyMjoxOTowOC42MDE4MjcyNjYgKzAxMDAKK0BAIC0wLDAgKzEsNDYwOCBAQAorK09QRU5TU0xfMS4wLjJkIHsKKysJZ2xvYmFsOgorKwkJQklPX2Zfc3NsOworKwkJQklPX25ld19idWZmZXJfc3NsX2Nvbm5lY3Q7CisrCQlCSU9fbmV3X3NzbDsKKysJCUJJT19uZXdfc3NsX2Nvbm5lY3Q7CisrCQlCSU9fcHJveHlfc3NsX2NvcHlfc2Vzc2lvbl9pZDsKKysJCUJJT19zc2xfY29weV9zZXNzaW9uX2lkOworKwkJQklPX3NzbF9zaHV0ZG93bjsKKysJCWQyaV9TU0xfU0VTU0lPTjsKKysJCURUTFN2MV9jbGllbnRfbWV0aG9kOworKwkJRFRMU3YxX21ldGhvZDsKKysJCURUTFN2MV9zZXJ2ZXJfbWV0aG9kOworKwkJRVJSX2xvYWRfU1NMX3N0cmluZ3M7CisrCQlpMmRfU1NMX1NFU1NJT047CisrCQlrc3NsX2J1aWxkX3ByaW5jaXBhbF8yOworKwkJa3NzbF9jZ2V0X3RrdDsKKysJCWtzc2xfY2hlY2tfYXV0aGVudDsKKysJCWtzc2xfY3R4X2ZyZWU7CisrCQlrc3NsX2N0eF9uZXc7CisrCQlrc3NsX2N0eF9zZXRrZXk7CisrCQlrc3NsX2N0eF9zZXRwcmluYzsKKysJCWtzc2xfY3R4X3NldHN0cmluZzsKKysJCWtzc2xfY3R4X3Nob3c7CisrCQlrc3NsX2Vycl9zZXQ7CisrCQlrc3NsX2tyYjVfZnJlZV9kYXRhX2NvbnRlbnRzOworKwkJa3NzbF9zZ2V0X3RrdDsKKysJCWtzc2xfc2tpcF9jb25mb3VuZDsKKysJCWtzc2xfdmFsaWRhdGVfdGltZXM7CisrCQlQRU1fcmVhZF9iaW9fU1NMX1NFU1NJT047CisrCQlQRU1fcmVhZF9TU0xfU0VTU0lPTjsKKysJCVBFTV93cml0ZV9iaW9fU1NMX1NFU1NJT047CisrCQlQRU1fd3JpdGVfU1NMX1NFU1NJT047CisrCQlTU0xfYWNjZXB0OworKwkJU1NMX2FkZF9jbGllbnRfQ0E7CisrCQlTU0xfYWRkX2Rpcl9jZXJ0X3N1YmplY3RzX3RvX3N0YWNrOworKwkJU1NMX2FkZF9kaXJfY2VydF9zdWJqc190b19zdGs7CisrCQlTU0xfYWRkX2ZpbGVfY2VydF9zdWJqZWN0c190b19zdGFjazsKKysJCVNTTF9hZGRfZmlsZV9jZXJ0X3N1YmpzX3RvX3N0azsKKysJCVNTTF9hbGVydF9kZXNjX3N0cmluZzsKKysJCVNTTF9hbGVydF9kZXNjX3N0cmluZ19sb25nOworKwkJU1NMX2FsZXJ0X3R5cGVfc3RyaW5nOworKwkJU1NMX2FsZXJ0X3R5cGVfc3RyaW5nX2xvbmc7CisrCQlTU0xfY2FsbGJhY2tfY3RybDsKKysJCVNTTF9jaGVja19wcml2YXRlX2tleTsKKysJCVNTTF9DSVBIRVJfZGVzY3JpcHRpb247CisrCQlTU0xfQ0lQSEVSX2dldF9iaXRzOworKwkJU1NMX0NJUEhFUl9nZXRfbmFtZTsKKysJCVNTTF9DSVBIRVJfZ2V0X3ZlcnNpb247CisrCQlTU0xfY2xlYXI7CisrCQlTU0xfQ09NUF9hZGRfY29tcHJlc3Npb25fbWV0aG9kOworKwkJU1NMX0NPTVBfZ2V0X2NvbXByZXNzaW9uX21ldGhvZHM7CisrCQlTU0xfQ09NUF9nZXRfY29tcHJlc3NfbWV0aG9kczsKKysJCVNTTF9DT01QX2dldF9uYW1lOworKwkJU1NMX2Nvbm5lY3Q7CisrCQlTU0xfY29weV9zZXNzaW9uX2lkOworKwkJU1NMX2N0cmw7CisrCQlTU0xfQ1RYX2FkZF9jbGllbnRfQ0E7CisrCQlTU0xfQ1RYX2FkZF9zZXNzaW9uOworKwkJU1NMX0NUWF9jYWxsYmFja19jdHJsOworKwkJU1NMX0NUWF9jaGVja19wcml2YXRlX2tleTsKKysJCVNTTF9DVFhfY3RybDsKKysJCVNTTF9DVFhfZmx1c2hfc2Vzc2lvbnM7CisrCQlTU0xfQ1RYX2ZyZWU7CisrCQlTU0xfQ1RYX2dldF9jZXJ0X3N0b3JlOworKwkJU1NMX0NUWF9nZXRfY2xpZW50X0NBX2xpc3Q7CisrCQlTU0xfQ1RYX2dldF9jbGllbnRfY2VydF9jYjsKKysJCVNTTF9DVFhfZ2V0X2V4X2RhdGE7CisrCQlTU0xfQ1RYX2dldF9leF9uZXdfaW5kZXg7CisrCQlTU0xfQ1RYX2dldF9pbmZvX2NhbGxiYWNrOworKwkJU1NMX0NUWF9nZXRfcXVpZXRfc2h1dGRvd247CisrCQlTU0xfQ1RYX2dldF90aW1lb3V0OworKwkJU1NMX0NUWF9nZXRfdmVyaWZ5X2NhbGxiYWNrOworKwkJU1NMX0NUWF9nZXRfdmVyaWZ5X2RlcHRoOworKwkJU1NMX0NUWF9nZXRfdmVyaWZ5X21vZGU7CisrCQlTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9uczsKKysJCVNTTF9DVFhfbmV3OworKwkJU1NMX0NUWF9yZW1vdmVfc2Vzc2lvbjsKKysJCVNTTF9DVFhfc2Vzc19nZXRfZ2V0X2NiOworKwkJU1NMX0NUWF9zZXNzX2dldF9uZXdfY2I7CisrCQlTU0xfQ1RYX3Nlc3NfZ2V0X3JlbW92ZV9jYjsKKysJCVNTTF9DVFhfc2Vzc2lvbnM7CisrCQlTU0xfQ1RYX3Nlc3Nfc2V0X2dldF9jYjsKKysJCVNTTF9DVFhfc2Vzc19zZXRfbmV3X2NiOworKwkJU1NMX0NUWF9zZXNzX3NldF9yZW1vdmVfY2I7CisrCQlTU0xfQ1RYX3NldDFfcGFyYW07CisrCQlTU0xfQ1RYX3NldF9jZXJ0X3N0b3JlOworKwkJU1NMX0NUWF9zZXRfY2VydF92ZXJpZnlfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF9jZXJ0X3ZlcmlmeV9jYjsKKysJCVNTTF9DVFhfc2V0X2NpcGhlcl9saXN0OworKwkJU1NMX0NUWF9zZXRfY2xpZW50X0NBX2xpc3Q7CisrCQlTU0xfQ1RYX3NldF9jbGllbnRfY2VydF9jYjsKKysJCVNTTF9DVFhfc2V0X2NsaWVudF9jZXJ0X2VuZ2luZTsKKysJCVNTTF9DVFhfc2V0X2Nvb2tpZV9nZW5lcmF0ZV9jYjsKKysJCVNTTF9DVFhfc2V0X2Nvb2tpZV92ZXJpZnlfY2I7CisrCQlTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYjsKKysJCVNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiX3VzZXJkYXRhOworKwkJU1NMX0NUWF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHM7CisrCQlTU0xfQ1RYX3NldF9kZWZfcGFzc3dkX2NiX3VkOworKwkJU1NMX0NUWF9zZXRfZGVmX3ZlcmlmeV9wYXRoczsKKysJCVNTTF9DVFhfc2V0X2V4X2RhdGE7CisrCQlTU0xfQ1RYX3NldF9nZW5lcmF0ZV9zZXNzaW9uX2lkOworKwkJU1NMX0NUWF9zZXRfaW5mb19jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X21zZ19jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3Bza19jbGllbnRfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF9wc2tfc2VydmVyX2NhbGxiYWNrOworKwkJU1NMX0NUWF9zZXRfcHVycG9zZTsKKysJCVNTTF9DVFhfc2V0X3F1aWV0X3NodXRkb3duOworKwkJU1NMX0NUWF9zZXRfc2Vzc2lvbl9pZF9jb250ZXh0OworKwkJU1NMX0NUWF9zZXRfc3NsX3ZlcnNpb247CisrCQlTU0xfQ1RYX3NldF90aW1lb3V0OworKwkJU1NMX0NUWF9zZXRfdG1wX2RoX2NhbGxiYWNrOworKwkJU1NMX0NUWF9zZXRfdG1wX2VjZGhfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF90bXBfcnNhX2NhbGxiYWNrOworKwkJU1NMX0NUWF9zZXRfdHJ1c3Q7CisrCQlTU0xfQ1RYX3NldF92ZXJpZnk7CisrCQlTU0xfQ1RYX3NldF92ZXJpZnlfZGVwdGg7CisrCQlTU0xfQ1RYX3VzZV9jZXJ0X2NoYWluX2ZpbGU7CisrCQlTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZTsKKysJCVNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX0FTTjE7CisrCQlTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlOworKwkJU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfZmlsZTsKKysJCVNTTF9DVFhfdXNlX1ByaXZhdGVLZXk7CisrCQlTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X0FTTjE7CisrCQlTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2ZpbGU7CisrCQlTU0xfQ1RYX3VzZV9wc2tfaWRlbnRpdHlfaGludDsKKysJCVNTTF9DVFhfdXNlX1JTQVByaXZhdGVLZXk7CisrCQlTU0xfQ1RYX3VzZV9SU0FQcml2YXRlS2V5X0FTTjE7CisrCQlTU0xfQ1RYX3VzZV9SU0FQcml2YXRlS2V5X2ZpbGU7CisrCQlTU0xfZG9faGFuZHNoYWtlOworKwkJU1NMX2R1cDsKKysJCVNTTF9kdXBfQ0FfbGlzdDsKKysJCVNTTGVheV9hZGRfc3NsX2FsZ29yaXRobXM7CisrCQlTU0xfZnJlZTsKKysJCVNTTF9nZXQxX3Nlc3Npb247CisrCQlTU0xfZ2V0X2NlcnRpZmljYXRlOworKwkJU1NMX2dldF9jaXBoZXJfbGlzdDsKKysJCVNTTF9nZXRfY2lwaGVyczsKKysJCVNTTF9nZXRfY2xpZW50X0NBX2xpc3Q7CisrCQlTU0xfZ2V0X2N1cnJlbnRfY2lwaGVyOworKwkJU1NMX2dldF9jdXJyZW50X2NvbXByZXNzaW9uOworKwkJU1NMX2dldF9jdXJyZW50X2V4cGFuc2lvbjsKKysJCVNTTF9nZXRfZGVmYXVsdF90aW1lb3V0OworKwkJU1NMX2dldF9lcnJvcjsKKysJCVNTTF9nZXRfZXhfZGF0YTsKKysJCVNTTF9nZXRfZXhfZGF0YV9YNTA5X1NUT1JFX0NUWF9pZHg7CisrCQlTU0xfZ2V0X2V4X2RfWDUwOV9TVE9SRV9DVFhfaWR4OworKwkJU1NMX2dldF9leF9uZXdfaW5kZXg7CisrCQlTU0xfZ2V0X2ZkOworKwkJU1NMX2dldF9maW5pc2hlZDsKKysJCVNTTF9nZXRfaW5mb19jYWxsYmFjazsKKysJCVNTTF9nZXRfcGVlcl9jZXJ0X2NoYWluOworKwkJU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlOworKwkJU1NMX2dldF9wZWVyX2ZpbmlzaGVkOworKwkJU1NMX2dldF9wcml2YXRla2V5OworKwkJU1NMX2dldF9wc2tfaWRlbnRpdHk7CisrCQlTU0xfZ2V0X3Bza19pZGVudGl0eV9oaW50OworKwkJU1NMX2dldF9xdWlldF9zaHV0ZG93bjsKKysJCVNTTF9nZXRfcmJpbzsKKysJCVNTTF9nZXRfcmVhZF9haGVhZDsKKysJCVNTTF9nZXRfcmZkOworKwkJU1NMX2dldF9zZXJ2ZXJuYW1lOworKwkJU1NMX2dldF9zZXJ2ZXJuYW1lX3R5cGU7CisrCQlTU0xfZ2V0X3Nlc3Npb247CisrCQlTU0xfZ2V0X3NoYXJlZF9jaXBoZXJzOworKwkJU1NMX2dldF9zaHV0ZG93bjsKKysJCVNTTF9nZXRfU1NMX0NUWDsKKysJCVNTTF9nZXRfc3NsX21ldGhvZDsKKysJCVNTTF9nZXRfdmVyaWZ5X2NhbGxiYWNrOworKwkJU1NMX2dldF92ZXJpZnlfZGVwdGg7CisrCQlTU0xfZ2V0X3ZlcmlmeV9tb2RlOworKwkJU1NMX2dldF92ZXJpZnlfcmVzdWx0OworKwkJU1NMX2dldF92ZXJzaW9uOworKwkJU1NMX2dldF93YmlvOworKwkJU1NMX2dldF93ZmQ7CisrCQlTU0xfaGFzX21hdGNoaW5nX3Nlc3Npb25faWQ7CisrCQlTU0xfbGlicmFyeV9pbml0OworKwkJU1NMX2xvYWRfY2xpZW50X0NBX2ZpbGU7CisrCQlTU0xfbG9hZF9lcnJvcl9zdHJpbmdzOworKwkJU1NMX25ldzsKKysJCVNTTF9wZWVrOworKwkJU1NMX3BlbmRpbmc7CisrCQlTU0xfcmVhZDsKKysJCVNTTF9yZW5lZ290aWF0ZTsKKysJCVNTTF9yZW5lZ290aWF0ZV9wZW5kaW5nOworKwkJU1NMX3JzdGF0ZV9zdHJpbmc7CisrCQlTU0xfcnN0YXRlX3N0cmluZ19sb25nOworKwkJU1NMX1NFU1NJT05fY21wOworKwkJU1NMX1NFU1NJT05fZnJlZTsKKysJCVNTTF9TRVNTSU9OX2dldF9leF9kYXRhOworKwkJU1NMX1NFU1NJT05fZ2V0X2V4X25ld19pbmRleDsKKysJCVNTTF9TRVNTSU9OX2dldF9pZDsKKysJCVNTTF9TRVNTSU9OX2dldF90aW1lOworKwkJU1NMX1NFU1NJT05fZ2V0X3RpbWVvdXQ7CisrCQlTU0xfU0VTU0lPTl9oYXNoOworKwkJU1NMX1NFU1NJT05fbmV3OworKwkJU1NMX1NFU1NJT05fcHJpbnQ7CisrCQlTU0xfU0VTU0lPTl9wcmludF9mcDsKKysJCVNTTF9TRVNTSU9OX3NldF9leF9kYXRhOworKwkJU1NMX1NFU1NJT05fc2V0X3RpbWU7CisrCQlTU0xfU0VTU0lPTl9zZXRfdGltZW91dDsKKysJCVNTTF9zZXQxX3BhcmFtOworKwkJU1NMX3NldF9hY2NlcHRfc3RhdGU7CisrCQlTU0xfc2V0X2JpbzsKKysJCVNTTF9zZXRfY2lwaGVyX2xpc3Q7CisrCQlTU0xfc2V0X2NsaWVudF9DQV9saXN0OworKwkJU1NMX3NldF9jb25uZWN0X3N0YXRlOworKwkJU1NMX3NldF9leF9kYXRhOworKwkJU1NMX3NldF9mZDsKKysJCVNTTF9zZXRfZ2VuZXJhdGVfc2Vzc2lvbl9pZDsKKysJCVNTTF9zZXRfaW5mb19jYWxsYmFjazsKKysJCVNTTF9zZXRfbXNnX2NhbGxiYWNrOworKwkJU1NMX3NldF9wc2tfY2xpZW50X2NhbGxiYWNrOworKwkJU1NMX3NldF9wc2tfc2VydmVyX2NhbGxiYWNrOworKwkJU1NMX3NldF9wdXJwb3NlOworKwkJU1NMX3NldF9xdWlldF9zaHV0ZG93bjsKKysJCVNTTF9zZXRfcmVhZF9haGVhZDsKKysJCVNTTF9zZXRfcmZkOworKwkJU1NMX3NldF9zZXNzaW9uOworKwkJU1NMX3NldF9zZXNzaW9uX2lkX2NvbnRleHQ7CisrCQlTU0xfc2V0X3Nlc3Npb25fc2VjcmV0X2NiOworKwkJU1NMX3NldF9zZXNzaW9uX3RpY2tldF9leHQ7CisrCQlTU0xfc2V0X3Nlc3Npb25fdGlja2V0X2V4dF9jYjsKKysJCVNTTF9zZXRfc2h1dGRvd247CisrCQlTU0xfc2V0X1NTTF9DVFg7CisrCQlTU0xfc2V0X3NzbF9tZXRob2Q7CisrCQlTU0xfc2V0X3RtcF9kaF9jYWxsYmFjazsKKysJCVNTTF9zZXRfdG1wX2VjZGhfY2FsbGJhY2s7CisrCQlTU0xfc2V0X3RtcF9yc2FfY2FsbGJhY2s7CisrCQlTU0xfc2V0X3RydXN0OworKwkJU1NMX3NldF92ZXJpZnk7CisrCQlTU0xfc2V0X3ZlcmlmeV9kZXB0aDsKKysJCVNTTF9zZXRfdmVyaWZ5X3Jlc3VsdDsKKysJCVNTTF9zZXRfd2ZkOworKwkJU1NMX3NodXRkb3duOworKwkJU1NMX3N0YXRlOworKwkJU1NMX3N0YXRlX3N0cmluZzsKKysJCVNTTF9zdGF0ZV9zdHJpbmdfbG9uZzsKKysJCVNTTF91c2VfY2VydGlmaWNhdGU7CisrCQlTU0xfdXNlX2NlcnRpZmljYXRlX0FTTjE7CisrCQlTU0xfdXNlX2NlcnRpZmljYXRlX2ZpbGU7CisrCQlTU0xfdXNlX1ByaXZhdGVLZXk7CisrCQlTU0xfdXNlX1ByaXZhdGVLZXlfQVNOMTsKKysJCVNTTF91c2VfUHJpdmF0ZUtleV9maWxlOworKwkJU1NMX3VzZV9wc2tfaWRlbnRpdHlfaGludDsKKysJCVNTTF91c2VfUlNBUHJpdmF0ZUtleTsKKysJCVNTTF91c2VfUlNBUHJpdmF0ZUtleV9BU04xOworKwkJU1NMX3VzZV9SU0FQcml2YXRlS2V5X2ZpbGU7CisrCQlTU0x2MjNfY2xpZW50X21ldGhvZDsKKysJCVNTTHYyM19tZXRob2Q7CisrCQlTU0x2MjNfc2VydmVyX21ldGhvZDsKKysJCVNTTHYyX2NsaWVudF9tZXRob2Q7CisrCQlTU0x2Ml9tZXRob2Q7CisrCQlTU0x2Ml9zZXJ2ZXJfbWV0aG9kOworKwkJU1NMdjNfY2xpZW50X21ldGhvZDsKKysJCVNTTHYzX21ldGhvZDsKKysJCVNTTHYzX3NlcnZlcl9tZXRob2Q7CisrCQlTU0xfdmVyc2lvbjsKKysJCVNTTF93YW50OworKwkJU1NMX3dyaXRlOworKwkJVExTdjFfY2xpZW50X21ldGhvZDsKKysJCVRMU3YxX21ldGhvZDsKKysJCVRMU3YxX3NlcnZlcl9tZXRob2Q7CisrCisrCisrCQlTU0xlYXk7CisrCQlTU0xlYXlfdmVyc2lvbjsKKysJCUFTTjFfQklUX1NUUklOR19hc24xX21ldGg7CisrCQlBU04xX0hFQURFUl9mcmVlOworKwkJQVNOMV9IRUFERVJfbmV3OworKwkJQVNOMV9JQTVTVFJJTkdfYXNuMV9tZXRoOworKwkJQVNOMV9JTlRFR0VSX2dldDsKKysJCUFTTjFfSU5URUdFUl9zZXQ7CisrCQlBU04xX0lOVEVHRVJfdG9fQk47CisrCQlBU04xX09CSkVDVF9jcmVhdGU7CisrCQlBU04xX09CSkVDVF9mcmVlOworKwkJQVNOMV9PQkpFQ1RfbmV3OworKwkJQVNOMV9QUklOVEFCTEVfdHlwZTsKKysJCUFTTjFfU1RSSU5HX2NtcDsKKysJCUFTTjFfU1RSSU5HX2R1cDsKKysJCUFTTjFfU1RSSU5HX2ZyZWU7CisrCQlBU04xX1NUUklOR19uZXc7CisrCQlBU04xX1NUUklOR19wcmludDsKKysJCUFTTjFfU1RSSU5HX3NldDsKKysJCUFTTjFfU1RSSU5HX3R5cGVfbmV3OworKwkJQVNOMV9UWVBFX2ZyZWU7CisrCQlBU04xX1RZUEVfbmV3OworKwkJQVNOMV9VTklWRVJTQUxTVFJJTkdfdG9fc3RyaW5nOworKwkJQVNOMV9VVENUSU1FX2NoZWNrOworKwkJQVNOMV9VVENUSU1FX3ByaW50OworKwkJQVNOMV9VVENUSU1FX3NldDsKKysJCUFTTjFfY2hlY2tfaW5maW5pdGVfZW5kOworKwkJQVNOMV9kMmlfYmlvOworKwkJQVNOMV9kMmlfZnA7CisrCQlBU04xX2RpZ2VzdDsKKysJCUFTTjFfZHVwOworKwkJQVNOMV9nZXRfb2JqZWN0OworKwkJQVNOMV9pMmRfYmlvOworKwkJQVNOMV9pMmRfZnA7CisrCQlBU04xX29iamVjdF9zaXplOworKwkJQVNOMV9wYXJzZTsKKysJCUFTTjFfcHV0X29iamVjdDsKKysJCUFTTjFfc2lnbjsKKysJCUFTTjFfdmVyaWZ5OworKwkJQkZfY2JjX2VuY3J5cHQ7CisrCQlCRl9jZmI2NF9lbmNyeXB0OworKwkJQkZfZWNiX2VuY3J5cHQ7CisrCQlCRl9lbmNyeXB0OworKwkJQkZfb2ZiNjRfZW5jcnlwdDsKKysJCUJGX29wdGlvbnM7CisrCQlCRl9zZXRfa2V5OworKwkJQklPX0NPTk5FQ1RfZnJlZTsKKysJCUJJT19DT05ORUNUX25ldzsKKysJCUJJT19hY2NlcHQ7CisrCQlCSU9fY3RybDsKKysJCUJJT19pbnRfY3RybDsKKysJCUJJT19kZWJ1Z19jYWxsYmFjazsKKysJCUJJT19kdW1wOworKwkJQklPX2R1cF9jaGFpbjsKKysJCUJJT19mX2Jhc2U2NDsKKysJCUJJT19mX2J1ZmZlcjsKKysJCUJJT19mX2NpcGhlcjsKKysJCUJJT19mX21kOworKwkJQklPX2ZfbnVsbDsKKysJCUJJT19mX3Byb3h5X3NlcnZlcjsKKysJCUJJT19mZF9ub25fZmF0YWxfZXJyb3I7CisrCQlCSU9fZmRfc2hvdWxkX3JldHJ5OworKwkJQklPX2ZpbmRfdHlwZTsKKysJCUJJT19mcmVlOworKwkJQklPX2ZyZWVfYWxsOworKwkJQklPX2dldF9hY2NlcHRfc29ja2V0OworKwkJQklPX2dldF9maWx0ZXJfYmlvOworKwkJQklPX2dldF9ob3N0X2lwOworKwkJQklPX2dldF9wb3J0OworKwkJQklPX2dldF9yZXRyeV9CSU87CisrCQlCSU9fZ2V0X3JldHJ5X3JlYXNvbjsKKysJCUJJT19nZXRob3N0YnluYW1lOworKwkJQklPX2dldHM7CisrCQlCSU9fbmV3OworKwkJQklPX25ld19hY2NlcHQ7CisrCQlCSU9fbmV3X2Nvbm5lY3Q7CisrCQlCSU9fbmV3X2ZkOworKwkJQklPX25ld19maWxlOworKwkJQklPX25ld19mcDsKKysJCUJJT19uZXdfc29ja2V0OworKwkJQklPX3BvcDsKKysJCUJJT19wcmludGY7CisrCQlCSU9fcHVzaDsKKysJCUJJT19wdXRzOworKwkJQklPX3JlYWQ7CisrCQlCSU9fc19hY2NlcHQ7CisrCQlCSU9fc19jb25uZWN0OworKwkJQklPX3NfZmQ7CisrCQlCSU9fc19maWxlOworKwkJQklPX3NfbWVtOworKwkJQklPX3NfbnVsbDsKKysJCUJJT19zX3Byb3h5X2NsaWVudDsKKysJCUJJT19zX3NvY2tldDsKKysJCUJJT19zZXQ7CisrCQlCSU9fc2V0X2NpcGhlcjsKKysJCUJJT19zZXRfdGNwX25kZWxheTsKKysJCUJJT19zb2NrX2NsZWFudXA7CisrCQlCSU9fc29ja19lcnJvcjsKKysJCUJJT19zb2NrX2luaXQ7CisrCQlCSU9fc29ja19ub25fZmF0YWxfZXJyb3I7CisrCQlCSU9fc29ja19zaG91bGRfcmV0cnk7CisrCQlCSU9fc29ja2V0X2lvY3RsOworKwkJQklPX3dyaXRlOworKwkJQk5fQ1RYX2ZyZWU7CisrCQlCTl9DVFhfbmV3OworKwkJQk5fTU9OVF9DVFhfZnJlZTsKKysJCUJOX01PTlRfQ1RYX25ldzsKKysJCUJOX01PTlRfQ1RYX3NldDsKKysJCUJOX2FkZDsKKysJCUJOX2FkZF93b3JkOworKwkJQk5faGV4MmJuOworKwkJQk5fYmluMmJuOworKwkJQk5fYm4yaGV4OworKwkJQk5fYm4yYmluOworKwkJQk5fY2xlYXI7CisrCQlCTl9jbGVhcl9iaXQ7CisrCQlCTl9jbGVhcl9mcmVlOworKwkJQk5fY21wOworKwkJQk5fY29weTsKKysJCUJOX2RpdjsKKysJCUJOX2Rpdl93b3JkOworKwkJQk5fZHVwOworKwkJQk5fZnJlZTsKKysJCUJOX2Zyb21fbW9udGdvbWVyeTsKKysJCUJOX2djZDsKKysJCUJOX2dlbmVyYXRlX3ByaW1lOworKwkJQk5fZ2V0X3dvcmQ7CisrCQlCTl9pc19iaXRfc2V0OworKwkJQk5faXNfcHJpbWU7CisrCQlCTl9sc2hpZnQ7CisrCQlCTl9sc2hpZnQxOworKwkJQk5fbWFza19iaXRzOworKwkJQk5fbW9kOworKwkJQk5fbW9kX2V4cDsKKysJCUJOX21vZF9leHBfbW9udDsKKysJCUJOX21vZF9leHBfc2ltcGxlOworKwkJQk5fbW9kX2ludmVyc2U7CisrCQlCTl9tb2RfbXVsOworKwkJQk5fbW9kX211bF9tb250Z29tZXJ5OworKwkJQk5fbW9kX3dvcmQ7CisrCQlCTl9tdWw7CisrCQlCTl9uZXc7CisrCQlCTl9udW1fYml0czsKKysJCUJOX251bV9iaXRzX3dvcmQ7CisrCQlCTl9vcHRpb25zOworKwkJQk5fcHJpbnQ7CisrCQlCTl9wcmludF9mcDsKKysJCUJOX3JhbmQ7CisrCQlCTl9yZWNpcHJvY2FsOworKwkJQk5fcnNoaWZ0OworKwkJQk5fcnNoaWZ0MTsKKysJCUJOX3NldF9iaXQ7CisrCQlCTl9zZXRfd29yZDsKKysJCUJOX3NxcjsKKysJCUJOX3N1YjsKKysJCUJOX3RvX0FTTjFfSU5URUdFUjsKKysJCUJOX3VjbXA7CisrCQlCTl92YWx1ZV9vbmU7CisrCQlCVUZfTUVNX2ZyZWU7CisrCQlCVUZfTUVNX2dyb3c7CisrCQlCVUZfTUVNX25ldzsKKysJCUJVRl9zdHJkdXA7CisrCQlDT05GX2ZyZWU7CisrCQlDT05GX2dldF9udW1iZXI7CisrCQlDT05GX2dldF9zZWN0aW9uOworKwkJQ09ORl9nZXRfc3RyaW5nOworKwkJQ09ORl9sb2FkOworKwkJQ1JZUFRPX2FkZF9sb2NrOworKwkJQ1JZUFRPX2RiZ19mcmVlOworKwkJQ1JZUFRPX2RiZ19tYWxsb2M7CisrCQlDUllQVE9fZGJnX3JlYWxsb2M7CisrCQlDUllQVE9fZGJnX3JlbWFsbG9jOworKwkJQ1JZUFRPX2ZyZWU7CisrCQlDUllQVE9fZ2V0X2FkZF9sb2NrX2NhbGxiYWNrOworKwkJQ1JZUFRPX2dldF9pZF9jYWxsYmFjazsKKysJCUNSWVBUT19nZXRfbG9ja19uYW1lOworKwkJQ1JZUFRPX2dldF9sb2NraW5nX2NhbGxiYWNrOworKwkJQ1JZUFRPX2dldF9tZW1fZnVuY3Rpb25zOworKwkJQ1JZUFRPX2xvY2s7CisrCQlDUllQVE9fbWFsbG9jOworKwkJQ1JZUFRPX21lbV9jdHJsOworKwkJQ1JZUFRPX21lbV9sZWFrczsKKysJCUNSWVBUT19tZW1fbGVha3NfY2I7CisrCQlDUllQVE9fbWVtX2xlYWtzX2ZwOworKwkJQ1JZUFRPX3JlYWxsb2M7CisrCQlDUllQVE9fcmVtYWxsb2M7CisrCQlDUllQVE9fc2V0X2FkZF9sb2NrX2NhbGxiYWNrOworKwkJQ1JZUFRPX3NldF9pZF9jYWxsYmFjazsKKysJCUNSWVBUT19zZXRfbG9ja2luZ19jYWxsYmFjazsKKysJCUNSWVBUT19zZXRfbWVtX2Z1bmN0aW9uczsKKysJCUNSWVBUT190aHJlYWRfaWQ7CisrCQlESF9jaGVjazsKKysJCURIX2NvbXB1dGVfa2V5OworKwkJREhfZnJlZTsKKysJCURIX2dlbmVyYXRlX2tleTsKKysJCURIX2dlbmVyYXRlX3BhcmFtZXRlcnM7CisrCQlESF9uZXc7CisrCQlESF9zaXplOworKwkJREhwYXJhbXNfcHJpbnQ7CisrCQlESHBhcmFtc19wcmludF9mcDsKKysJCURTQV9mcmVlOworKwkJRFNBX2dlbmVyYXRlX2tleTsKKysJCURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzOworKwkJRFNBX2lzX3ByaW1lOworKwkJRFNBX25ldzsKKysJCURTQV9wcmludDsKKysJCURTQV9wcmludF9mcDsKKysJCURTQV9zaWduOworKwkJRFNBX3NpZ25fc2V0dXA7CisrCQlEU0Ffc2l6ZTsKKysJCURTQV92ZXJpZnk7CisrCQlEU0FwYXJhbXNfcHJpbnQ7CisrCQlEU0FwYXJhbXNfcHJpbnRfZnA7CisrCQlFUlJfY2xlYXJfZXJyb3I7CisrCQlFUlJfZXJyb3Jfc3RyaW5nOworKwkJRVJSX2ZyZWVfc3RyaW5nczsKKysJCUVSUl9mdW5jX2Vycm9yX3N0cmluZzsKKysJCUVSUl9nZXRfZXJyX3N0YXRlX3RhYmxlOworKwkJRVJSX2dldF9lcnJvcjsKKysJCUVSUl9nZXRfZXJyb3JfbGluZTsKKysJCUVSUl9nZXRfc3RhdGU7CisrCQlFUlJfZ2V0X3N0cmluZ190YWJsZTsKKysJCUVSUl9saWJfZXJyb3Jfc3RyaW5nOworKwkJRVJSX2xvYWRfQVNOMV9zdHJpbmdzOworKwkJRVJSX2xvYWRfQklPX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9CTl9zdHJpbmdzOworKwkJRVJSX2xvYWRfQlVGX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9DT05GX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9ESF9zdHJpbmdzOworKwkJRVJSX2xvYWRfRFNBX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9FUlJfc3RyaW5nczsKKysJCUVSUl9sb2FkX0VWUF9zdHJpbmdzOworKwkJRVJSX2xvYWRfT0JKX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9QRU1fc3RyaW5nczsKKysJCUVSUl9sb2FkX1BST1hZX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9SU0Ffc3RyaW5nczsKKysJCUVSUl9sb2FkX1g1MDlfc3RyaW5nczsKKysJCUVSUl9sb2FkX2NyeXB0b19zdHJpbmdzOworKwkJRVJSX2xvYWRfc3RyaW5nczsKKysJCUVSUl9wZWVrX2Vycm9yOworKwkJRVJSX3BlZWtfZXJyb3JfbGluZTsKKysJCUVSUl9wcmludF9lcnJvcnM7CisrCQlFUlJfcHJpbnRfZXJyb3JzX2ZwOworKwkJRVJSX3B1dF9lcnJvcjsKKysJCUVSUl9yZWFzb25fZXJyb3Jfc3RyaW5nOworKwkJRVJSX3JlbW92ZV9zdGF0ZTsKKysJCUVWUF9CeXRlc1RvS2V5OworKwkJRVZQX0NJUEhFUl9DVFhfY2xlYW51cDsKKysJCUVWUF9DaXBoZXJGaW5hbDsKKysJCUVWUF9DaXBoZXJJbml0OworKwkJRVZQX0NpcGhlclVwZGF0ZTsKKysJCUVWUF9EZWNvZGVCbG9jazsKKysJCUVWUF9EZWNvZGVGaW5hbDsKKysJCUVWUF9EZWNvZGVJbml0OworKwkJRVZQX0RlY29kZVVwZGF0ZTsKKysJCUVWUF9EZWNyeXB0RmluYWw7CisrCQlFVlBfRGVjcnlwdEluaXQ7CisrCQlFVlBfRGVjcnlwdFVwZGF0ZTsKKysJCUVWUF9EaWdlc3RGaW5hbDsKKysJCUVWUF9EaWdlc3RJbml0OworKwkJRVZQX0RpZ2VzdFVwZGF0ZTsKKysJCUVWUF9FbmNvZGVCbG9jazsKKysJCUVWUF9FbmNvZGVGaW5hbDsKKysJCUVWUF9FbmNvZGVJbml0OworKwkJRVZQX0VuY29kZVVwZGF0ZTsKKysJCUVWUF9FbmNyeXB0RmluYWw7CisrCQlFVlBfRW5jcnlwdEluaXQ7CisrCQlFVlBfRW5jcnlwdFVwZGF0ZTsKKysJCUVWUF9PcGVuRmluYWw7CisrCQlFVlBfT3BlbkluaXQ7CisrCQlFVlBfUEtFWV9hc3NpZ247CisrCQlFVlBfUEtFWV9jb3B5X3BhcmFtZXRlcnM7CisrCQlFVlBfUEtFWV9mcmVlOworKwkJRVZQX1BLRVlfbWlzc2luZ19wYXJhbWV0ZXJzOworKwkJRVZQX1BLRVlfbmV3OworKwkJRVZQX1BLRVlfc2F2ZV9wYXJhbWV0ZXJzOworKwkJRVZQX1BLRVlfc2l6ZTsKKysJCUVWUF9QS0VZX3R5cGU7CisrCQlFVlBfU2VhbEZpbmFsOworKwkJRVZQX1NlYWxJbml0OworKwkJRVZQX1NpZ25GaW5hbDsKKysJCUVWUF9WZXJpZnlGaW5hbDsKKysJCUVWUF9hZGRfYWxpYXM7CisrCQlFVlBfYWRkX2NpcGhlcjsKKysJCUVWUF9hZGRfZGlnZXN0OworKwkJRVZQX2JmX2NiYzsKKysJCUVWUF9iZl9jZmI2NDsKKysJCUVWUF9iZl9lY2I7CisrCQlFVlBfYmZfb2ZiOworKwkJRVZQX2NsZWFudXA7CisrCQlFVlBfZGVzX2NiYzsKKysJCUVWUF9kZXNfY2ZiNjQ7CisrCQlFVlBfZGVzX2VjYjsKKysJCUVWUF9kZXNfZWRlOworKwkJRVZQX2Rlc19lZGUzOworKwkJRVZQX2Rlc19lZGUzX2NiYzsKKysJCUVWUF9kZXNfZWRlM19jZmI2NDsKKysJCUVWUF9kZXNfZWRlM19vZmI7CisrCQlFVlBfZGVzX2VkZV9jYmM7CisrCQlFVlBfZGVzX2VkZV9jZmI2NDsKKysJCUVWUF9kZXNfZWRlX29mYjsKKysJCUVWUF9kZXNfb2ZiOworKwkJRVZQX2Rlc3hfY2JjOworKwkJRVZQX2RzczsKKysJCUVWUF9kc3MxOworKwkJRVZQX2VuY19udWxsOworKwkJRVZQX2dldF9jaXBoZXJieW5hbWU7CisrCQlFVlBfZ2V0X2RpZ2VzdGJ5bmFtZTsKKysJCUVWUF9nZXRfcHdfcHJvbXB0OworKwkJRVZQX2lkZWFfY2JjOworKwkJRVZQX2lkZWFfY2ZiNjQ7CisrCQlFVlBfaWRlYV9lY2I7CisrCQlFVlBfaWRlYV9vZmI7CisrCQlFVlBfbWQyOworKwkJRVZQX21kNTsKKysJCUVWUF9tZF9udWxsOworKwkJRVZQX3JjMl9jYmM7CisrCQlFVlBfcmMyX2NmYjY0OworKwkJRVZQX3JjMl9lY2I7CisrCQlFVlBfcmMyX29mYjsKKysJCUVWUF9yYzQ7CisrCQlFVlBfcmVhZF9wd19zdHJpbmc7CisrCQlFVlBfc2V0X3B3X3Byb21wdDsKKysJCUVWUF9zaGE7CisrCQlFVlBfc2hhMTsKKysJCU1EMjsKKysJCU1EMl9GaW5hbDsKKysJCU1EMl9Jbml0OworKwkJTUQyX1VwZGF0ZTsKKysJCU1EMl9vcHRpb25zOworKwkJTUQ1OworKwkJTUQ1X0ZpbmFsOworKwkJTUQ1X0luaXQ7CisrCQlNRDVfVXBkYXRlOworKwkJTURDMjsKKysJCU1EQzJfRmluYWw7CisrCQlNREMyX0luaXQ7CisrCQlNREMyX1VwZGF0ZTsKKysJCU5FVFNDQVBFX1NQS0FDX2ZyZWU7CisrCQlORVRTQ0FQRV9TUEtBQ19uZXc7CisrCQlORVRTQ0FQRV9TUEtJX2ZyZWU7CisrCQlORVRTQ0FQRV9TUEtJX25ldzsKKysJCU5FVFNDQVBFX1NQS0lfc2lnbjsKKysJCU5FVFNDQVBFX1NQS0lfdmVyaWZ5OworKwkJT0JKX2FkZF9vYmplY3Q7CisrCQlPQkpfYnNlYXJjaDsKKysJCU9CSl9jbGVhbnVwOworKwkJT0JKX2NtcDsKKysJCU9CSl9jcmVhdGU7CisrCQlPQkpfZHVwOworKwkJT0JKX2xuMm5pZDsKKysJCU9CSl9uZXdfbmlkOworKwkJT0JKX25pZDJsbjsKKysJCU9CSl9uaWQyb2JqOworKwkJT0JKX25pZDJzbjsKKysJCU9CSl9vYmoybmlkOworKwkJT0JKX3NuMm5pZDsKKysJCU9CSl90eHQybmlkOworKwkJUEVNX0FTTjFfcmVhZDsKKysJCVBFTV9BU04xX3JlYWRfYmlvOworKwkJUEVNX0FTTjFfd3JpdGU7CisrCQlQRU1fQVNOMV93cml0ZV9iaW87CisrCQlQRU1fU2VhbEZpbmFsOworKwkJUEVNX1NlYWxJbml0OworKwkJUEVNX1NlYWxVcGRhdGU7CisrCQlQRU1fU2lnbkZpbmFsOworKwkJUEVNX1NpZ25Jbml0OworKwkJUEVNX1NpZ25VcGRhdGU7CisrCQlQRU1fWDUwOV9JTkZPX3JlYWQ7CisrCQlQRU1fWDUwOV9JTkZPX3JlYWRfYmlvOworKwkJUEVNX1g1MDlfSU5GT193cml0ZV9iaW87CisrCQlQRU1fZGVrX2luZm87CisrCQlQRU1fZG9faGVhZGVyOworKwkJUEVNX2dldF9FVlBfQ0lQSEVSX0lORk87CisrCQlQRU1fcHJvY190eXBlOworKwkJUEVNX3JlYWQ7CisrCQlQRU1fcmVhZF9ESHBhcmFtczsKKysJCVBFTV9yZWFkX0RTQVByaXZhdGVLZXk7CisrCQlQRU1fcmVhZF9EU0FwYXJhbXM7CisrCQlQRU1fcmVhZF9QS0NTNzsKKysJCVBFTV9yZWFkX1ByaXZhdGVLZXk7CisrCQlQRU1fcmVhZF9SU0FQcml2YXRlS2V5OworKwkJUEVNX3JlYWRfWDUwOTsKKysJCVBFTV9yZWFkX1g1MDlfQ1JMOworKwkJUEVNX3JlYWRfWDUwOV9SRVE7CisrCQlQRU1fcmVhZF9iaW87CisrCQlQRU1fcmVhZF9iaW9fREhwYXJhbXM7CisrCQlQRU1fcmVhZF9iaW9fRFNBUHJpdmF0ZUtleTsKKysJCVBFTV9yZWFkX2Jpb19EU0FwYXJhbXM7CisrCQlQRU1fcmVhZF9iaW9fUEtDUzc7CisrCQlQRU1fcmVhZF9iaW9fUHJpdmF0ZUtleTsKKysJCVBFTV9yZWFkX2Jpb19SU0FQcml2YXRlS2V5OworKwkJUEVNX3JlYWRfYmlvX1g1MDk7CisrCQlQRU1fcmVhZF9iaW9fWDUwOV9DUkw7CisrCQlQRU1fcmVhZF9iaW9fWDUwOV9SRVE7CisrCQlQRU1fd3JpdGU7CisrCQlQRU1fd3JpdGVfREhwYXJhbXM7CisrCQlQRU1fd3JpdGVfRFNBUHJpdmF0ZUtleTsKKysJCVBFTV93cml0ZV9EU0FwYXJhbXM7CisrCQlQRU1fd3JpdGVfUEtDUzc7CisrCQlQRU1fd3JpdGVfUHJpdmF0ZUtleTsKKysJCVBFTV93cml0ZV9SU0FQcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX1g1MDk7CisrCQlQRU1fd3JpdGVfWDUwOV9DUkw7CisrCQlQRU1fd3JpdGVfWDUwOV9SRVE7CisrCQlQRU1fd3JpdGVfYmlvOworKwkJUEVNX3dyaXRlX2Jpb19ESHBhcmFtczsKKysJCVBFTV93cml0ZV9iaW9fRFNBUHJpdmF0ZUtleTsKKysJCVBFTV93cml0ZV9iaW9fRFNBcGFyYW1zOworKwkJUEVNX3dyaXRlX2Jpb19QS0NTNzsKKysJCVBFTV93cml0ZV9iaW9fUHJpdmF0ZUtleTsKKysJCVBFTV93cml0ZV9iaW9fUlNBUHJpdmF0ZUtleTsKKysJCVBFTV93cml0ZV9iaW9fWDUwOTsKKysJCVBFTV93cml0ZV9iaW9fWDUwOV9DUkw7CisrCQlQRU1fd3JpdGVfYmlvX1g1MDlfUkVROworKwkJUEtDUzdfRElHRVNUX2ZyZWU7CisrCQlQS0NTN19ESUdFU1RfbmV3OworKwkJUEtDUzdfRU5DUllQVF9mcmVlOworKwkJUEtDUzdfRU5DUllQVF9uZXc7CisrCQlQS0NTN19FTkNfQ09OVEVOVF9mcmVlOworKwkJUEtDUzdfRU5DX0NPTlRFTlRfbmV3OworKwkJUEtDUzdfRU5WRUxPUEVfZnJlZTsKKysJCVBLQ1M3X0VOVkVMT1BFX25ldzsKKysJCVBLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMX2RpZ2VzdDsKKysJCVBLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMX2ZyZWU7CisrCQlQS0NTN19JU1NVRVJfQU5EX1NFUklBTF9uZXc7CisrCQlQS0NTN19SRUNJUF9JTkZPX2ZyZWU7CisrCQlQS0NTN19SRUNJUF9JTkZPX25ldzsKKysJCVBLQ1M3X1NJR05FRF9mcmVlOworKwkJUEtDUzdfU0lHTkVEX25ldzsKKysJCVBLQ1M3X1NJR05FUl9JTkZPX2ZyZWU7CisrCQlQS0NTN19TSUdORVJfSU5GT19uZXc7CisrCQlQS0NTN19TSUdOX0VOVkVMT1BFX2ZyZWU7CisrCQlQS0NTN19TSUdOX0VOVkVMT1BFX25ldzsKKysJCVBLQ1M3X2R1cDsKKysJCVBLQ1M3X2ZyZWU7CisrCQlQS0NTN19uZXc7CisrCQlQUk9YWV9FTlRSWV9hZGRfbm9wcm94eTsKKysJCVBST1hZX0VOVFJZX2NsZWFyX25vcHJveHk7CisrCQlQUk9YWV9FTlRSWV9mcmVlOworKwkJUFJPWFlfRU5UUllfZ2V0X25vcHJveHk7CisrCQlQUk9YWV9FTlRSWV9uZXc7CisrCQlQUk9YWV9FTlRSWV9zZXRfc2VydmVyOworKwkJUFJPWFlfYWRkX25vcHJveHk7CisrCQlQUk9YWV9hZGRfc2VydmVyOworKwkJUFJPWFlfY2hlY2tfYnlfaG9zdDsKKysJCVBST1hZX2NoZWNrX3VybDsKKysJCVBST1hZX2NsZWFyX25vcHJveHk7CisrCQlQUk9YWV9mcmVlOworKwkJUFJPWFlfZ2V0X25vcHJveHk7CisrCQlQUk9YWV9nZXRfcHJveGllczsKKysJCVBST1hZX2dldF9wcm94eV9lbnRyeTsKKysJCVBST1hZX2xvYWRfY29uZjsKKysJCVBST1hZX25ldzsKKysJCVBST1hZX3ByaW50OworKwkJUkFORF9ieXRlczsKKysJCVJBTkRfY2xlYW51cDsKKysJCVJBTkRfZmlsZV9uYW1lOworKwkJUkFORF9sb2FkX2ZpbGU7CisrCQlSQU5EX3NjcmVlbjsKKysJCVJBTkRfc2VlZDsKKysJCVJBTkRfd3JpdGVfZmlsZTsKKysJCVJDMl9jYmNfZW5jcnlwdDsKKysJCVJDMl9jZmI2NF9lbmNyeXB0OworKwkJUkMyX2VjYl9lbmNyeXB0OworKwkJUkMyX2VuY3J5cHQ7CisrCQlSQzJfb2ZiNjRfZW5jcnlwdDsKKysJCVJDMl9zZXRfa2V5OworKwkJUkM0OworKwkJUkM0X29wdGlvbnM7CisrCQlSQzRfc2V0X2tleTsKKysJCVJTQVByaXZhdGVLZXlfYXNuMV9tZXRoOworKwkJUlNBUHJpdmF0ZUtleV9kdXA7CisrCQlSU0FQdWJsaWNLZXlfZHVwOworKwkJUlNBX1BLQ1MxX1NTTGVheTsKKysJCVJTQV9mcmVlOworKwkJUlNBX2dlbmVyYXRlX2tleTsKKysJCVJTQV9uZXc7CisrCQlSU0FfbmV3X21ldGhvZDsKKysJCVJTQV9wcmludDsKKysJCVJTQV9wcmludF9mcDsKKysJCVJTQV9wcml2YXRlX2RlY3J5cHQ7CisrCQlSU0FfcHJpdmF0ZV9lbmNyeXB0OworKwkJUlNBX3B1YmxpY19kZWNyeXB0OworKwkJUlNBX3B1YmxpY19lbmNyeXB0OworKwkJUlNBX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCVJTQV9zaWduOworKwkJUlNBX3NpZ25fQVNOMV9PQ1RFVF9TVFJJTkc7CisrCQlSU0Ffc2l6ZTsKKysJCVJTQV92ZXJpZnk7CisrCQlSU0FfdmVyaWZ5X0FTTjFfT0NURVRfU1RSSU5HOworKwkJU0hBOworKwkJU0hBMTsKKysJCVNIQTFfRmluYWw7CisrCQlTSEExX0luaXQ7CisrCQlTSEExX1VwZGF0ZTsKKysJCVNIQV9GaW5hbDsKKysJCVNIQV9Jbml0OworKwkJU0hBX1VwZGF0ZTsKKysJCU9wZW5TU0xfYWRkX2FsbF9hbGdvcml0aG1zOworKwkJT3BlblNTTF9hZGRfYWxsX2NpcGhlcnM7CisrCQlPcGVuU1NMX2FkZF9hbGxfZGlnZXN0czsKKysJCVRYVF9EQl9jcmVhdGVfaW5kZXg7CisrCQlUWFRfREJfZnJlZTsKKysJCVRYVF9EQl9nZXRfYnlfaW5kZXg7CisrCQlUWFRfREJfaW5zZXJ0OworKwkJVFhUX0RCX3JlYWQ7CisrCQlUWFRfREJfd3JpdGU7CisrCQlYNTA5X0FMR09SX2ZyZWU7CisrCQlYNTA5X0FMR09SX25ldzsKKysJCVg1MDlfQVRUUklCVVRFX2ZyZWU7CisrCQlYNTA5X0FUVFJJQlVURV9uZXc7CisrCQlYNTA5X0NJTkZfZnJlZTsKKysJCVg1MDlfQ0lORl9uZXc7CisrCQlYNTA5X0NSTF9JTkZPX2ZyZWU7CisrCQlYNTA5X0NSTF9JTkZPX25ldzsKKysJCVg1MDlfQ1JMX2FkZF9leHQ7CisrCQlYNTA5X0NSTF9jbXA7CisrCQlYNTA5X0NSTF9kZWxldGVfZXh0OworKwkJWDUwOV9DUkxfZHVwOworKwkJWDUwOV9DUkxfZnJlZTsKKysJCVg1MDlfQ1JMX2dldF9leHQ7CisrCQlYNTA5X0NSTF9nZXRfZXh0X2J5X05JRDsKKysJCVg1MDlfQ1JMX2dldF9leHRfYnlfT0JKOworKwkJWDUwOV9DUkxfZ2V0X2V4dF9ieV9jcml0aWNhbDsKKysJCVg1MDlfQ1JMX2dldF9leHRfY291bnQ7CisrCQlYNTA5X0NSTF9uZXc7CisrCQlYNTA5X0NSTF9zaWduOworKwkJWDUwOV9DUkxfdmVyaWZ5OworKwkJWDUwOV9FWFRFTlNJT05fY3JlYXRlX2J5X05JRDsKKysJCVg1MDlfRVhURU5TSU9OX2NyZWF0ZV9ieV9PQko7CisrCQlYNTA5X0VYVEVOU0lPTl9kdXA7CisrCQlYNTA5X0VYVEVOU0lPTl9mcmVlOworKwkJWDUwOV9FWFRFTlNJT05fZ2V0X2NyaXRpY2FsOworKwkJWDUwOV9FWFRFTlNJT05fZ2V0X2RhdGE7CisrCQlYNTA5X0VYVEVOU0lPTl9nZXRfb2JqZWN0OworKwkJWDUwOV9FWFRFTlNJT05fbmV3OworKwkJWDUwOV9FWFRFTlNJT05fc2V0X2NyaXRpY2FsOworKwkJWDUwOV9FWFRFTlNJT05fc2V0X2RhdGE7CisrCQlYNTA5X0VYVEVOU0lPTl9zZXRfb2JqZWN0OworKwkJWDUwOV9JTkZPX2ZyZWU7CisrCQlYNTA5X0lORk9fbmV3OworKwkJWDUwOV9MT09LVVBfYnlfYWxpYXM7CisrCQlYNTA5X0xPT0tVUF9ieV9maW5nZXJwcmludDsKKysJCVg1MDlfTE9PS1VQX2J5X2lzc3Vlcl9zZXJpYWw7CisrCQlYNTA5X0xPT0tVUF9ieV9zdWJqZWN0OworKwkJWDUwOV9MT09LVVBfY3RybDsKKysJCVg1MDlfTE9PS1VQX2ZpbGU7CisrCQlYNTA5X0xPT0tVUF9mcmVlOworKwkJWDUwOV9MT09LVVBfaGFzaF9kaXI7CisrCQlYNTA5X0xPT0tVUF9pbml0OworKwkJWDUwOV9MT09LVVBfbmV3OworKwkJWDUwOV9MT09LVVBfc2h1dGRvd247CisrCQlYNTA5X05BTUVfRU5UUllfY3JlYXRlX2J5X05JRDsKKysJCVg1MDlfTkFNRV9FTlRSWV9jcmVhdGVfYnlfT0JKOworKwkJWDUwOV9OQU1FX0VOVFJZX2R1cDsKKysJCVg1MDlfTkFNRV9FTlRSWV9mcmVlOworKwkJWDUwOV9OQU1FX0VOVFJZX2dldF9kYXRhOworKwkJWDUwOV9OQU1FX0VOVFJZX2dldF9vYmplY3Q7CisrCQlYNTA5X05BTUVfRU5UUllfbmV3OworKwkJWDUwOV9OQU1FX0VOVFJZX3NldF9kYXRhOworKwkJWDUwOV9OQU1FX0VOVFJZX3NldF9vYmplY3Q7CisrCQlYNTA5X05BTUVfYWRkX2VudHJ5OworKwkJWDUwOV9OQU1FX2NtcDsKKysJCVg1MDlfTkFNRV9kZWxldGVfZW50cnk7CisrCQlYNTA5X05BTUVfZGlnZXN0OworKwkJWDUwOV9OQU1FX2R1cDsKKysJCVg1MDlfTkFNRV9lbnRyeV9jb3VudDsKKysJCVg1MDlfTkFNRV9mcmVlOworKwkJWDUwOV9OQU1FX2dldF9lbnRyeTsKKysJCVg1MDlfTkFNRV9nZXRfaW5kZXhfYnlfTklEOworKwkJWDUwOV9OQU1FX2dldF9pbmRleF9ieV9PQko7CisrCQlYNTA5X05BTUVfZ2V0X3RleHRfYnlfTklEOworKwkJWDUwOV9OQU1FX2dldF90ZXh0X2J5X09CSjsKKysJCVg1MDlfTkFNRV9oYXNoOworKwkJWDUwOV9OQU1FX25ldzsKKysJCVg1MDlfTkFNRV9vbmVsaW5lOworKwkJWDUwOV9OQU1FX3ByaW50OworKwkJWDUwOV9OQU1FX3NldDsKKysJCVg1MDlfT0JKRUNUX2ZyZWVfY29udGVudHM7CisrCQlYNTA5X09CSkVDVF9yZXRyaWV2ZV9ieV9zdWJqZWN0OworKwkJWDUwOV9PQkpFQ1RfdXBfcmVmX2NvdW50OworKwkJWDUwOV9QS0VZX2ZyZWU7CisrCQlYNTA5X1BLRVlfbmV3OworKwkJWDUwOV9QVUJLRVlfZnJlZTsKKysJCVg1MDlfUFVCS0VZX2dldDsKKysJCVg1MDlfUFVCS0VZX25ldzsKKysJCVg1MDlfUFVCS0VZX3NldDsKKysJCVg1MDlfUkVRX0lORk9fZnJlZTsKKysJCVg1MDlfUkVRX0lORk9fbmV3OworKwkJWDUwOV9SRVFfZHVwOworKwkJWDUwOV9SRVFfZnJlZTsKKysJCVg1MDlfUkVRX2dldF9wdWJrZXk7CisrCQlYNTA5X1JFUV9uZXc7CisrCQlYNTA5X1JFUV9wcmludDsKKysJCVg1MDlfUkVRX3ByaW50X2ZwOworKwkJWDUwOV9SRVFfc2V0X3B1YmtleTsKKysJCVg1MDlfUkVRX3NldF9zdWJqZWN0X25hbWU7CisrCQlYNTA5X1JFUV9zZXRfdmVyc2lvbjsKKysJCVg1MDlfUkVRX3NpZ247CisrCQlYNTA5X1JFUV90b19YNTA5OworKwkJWDUwOV9SRVFfdmVyaWZ5OworKwkJWDUwOV9SRVZPS0VEX2FkZF9leHQ7CisrCQlYNTA5X1JFVk9LRURfZGVsZXRlX2V4dDsKKysJCVg1MDlfUkVWT0tFRF9mcmVlOworKwkJWDUwOV9SRVZPS0VEX2dldF9leHQ7CisrCQlYNTA5X1JFVk9LRURfZ2V0X2V4dF9ieV9OSUQ7CisrCQlYNTA5X1JFVk9LRURfZ2V0X2V4dF9ieV9PQko7CisrCQlYNTA5X1JFVk9LRURfZ2V0X2V4dF9ieV9jcml0aWNhbDsKKysJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2J5X2NyaXRpYzsKKysJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2NvdW50OworKwkJWDUwOV9SRVZPS0VEX25ldzsKKysJCVg1MDlfU0lHX2ZyZWU7CisrCQlYNTA5X1NJR19uZXc7CisrCQlYNTA5X1NUT1JFX0NUWF9jbGVhbnVwOworKwkJWDUwOV9TVE9SRV9DVFhfaW5pdDsKKysJCVg1MDlfU1RPUkVfYWRkX2NlcnQ7CisrCQlYNTA5X1NUT1JFX2FkZF9sb29rdXA7CisrCQlYNTA5X1NUT1JFX2ZyZWU7CisrCQlYNTA5X1NUT1JFX2dldF9ieV9zdWJqZWN0OworKwkJWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9uczsKKysJCVg1MDlfU1RPUkVfbmV3OworKwkJWDUwOV9TVE9SRV9zZXRfZGVmYXVsdF9wYXRoczsKKysJCVg1MDlfVkFMX2ZyZWU7CisrCQlYNTA5X1ZBTF9uZXc7CisrCQlYNTA5X2FkZF9leHQ7CisrCQlYNTA5X2FzbjFfbWV0aDsKKysJCVg1MDlfY2VydGlmaWNhdGVfdHlwZTsKKysJCVg1MDlfY2hlY2tfcHJpdmF0ZV9rZXk7CisrCQlYNTA5X2NtcF9jdXJyZW50X3RpbWU7CisrCQlYNTA5X2RlbGV0ZV9leHQ7CisrCQlYNTA5X2RpZ2VzdDsKKysJCVg1MDlfZHVwOworKwkJWDUwOV9mcmVlOworKwkJWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2FyZWE7CisrCQlYNTA5X2dldF9kZWZhdWx0X2NlcnRfZGlyOworKwkJWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2Rpcl9lbnY7CisrCQlYNTA5X2dldF9kZWZhdWx0X2NlcnRfZmlsZTsKKysJCVg1MDlfZ2V0X2RlZmF1bHRfY2VydF9maWxlX2VudjsKKysJCVg1MDlfZ2V0X2RlZmF1bHRfcHJpdmF0ZV9kaXI7CisrCQlYNTA5X2dldF9leHQ7CisrCQlYNTA5X2dldF9leHRfYnlfTklEOworKwkJWDUwOV9nZXRfZXh0X2J5X09CSjsKKysJCVg1MDlfZ2V0X2V4dF9ieV9jcml0aWNhbDsKKysJCVg1MDlfZ2V0X2V4dF9jb3VudDsKKysJCVg1MDlfZ2V0X2lzc3Vlcl9uYW1lOworKwkJWDUwOV9nZXRfcHVia2V5OworKwkJWDUwOV9nZXRfcHVia2V5X3BhcmFtZXRlcnM7CisrCQlYNTA5X2dldF9zZXJpYWxOdW1iZXI7CisrCQlYNTA5X2dldF9zdWJqZWN0X25hbWU7CisrCQlYNTA5X2dtdGltZV9hZGo7CisrCQlYNTA5X2lzc3Vlcl9hbmRfc2VyaWFsX2NtcDsKKysJCVg1MDlfaXNzdWVyX2FuZF9zZXJpYWxfaGFzaDsKKysJCVg1MDlfaXNzdWVyX25hbWVfY21wOworKwkJWDUwOV9pc3N1ZXJfbmFtZV9oYXNoOworKwkJWDUwOV9sb2FkX2NlcnRfZmlsZTsKKysJCVg1MDlfbmV3OworKwkJWDUwOV9wcmludDsKKysJCVg1MDlfcHJpbnRfZnA7CisrCQlYNTA5X3NldF9pc3N1ZXJfbmFtZTsKKysJCVg1MDlfc2V0X25vdEFmdGVyOworKwkJWDUwOV9zZXRfbm90QmVmb3JlOworKwkJWDUwOV9zZXRfcHVia2V5OworKwkJWDUwOV9zZXRfc2VyaWFsTnVtYmVyOworKwkJWDUwOV9zZXRfc3ViamVjdF9uYW1lOworKwkJWDUwOV9zZXRfdmVyc2lvbjsKKysJCVg1MDlfc2lnbjsKKysJCVg1MDlfc3ViamVjdF9uYW1lX2NtcDsKKysJCVg1MDlfc3ViamVjdF9uYW1lX2hhc2g7CisrCQlYNTA5X3RvX1g1MDlfUkVROworKwkJWDUwOV92ZXJpZnk7CisrCQlYNTA5X3ZlcmlmeV9jZXJ0OworKwkJWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmc7CisrCQlYNTA5djNfYWRkX2V4dDsKKysJCVg1MDl2M19hZGRfZXh0ZW5zaW9uOworKwkJWDUwOXYzX2FkZF9uZXRzY2FwZV9leHRlbnNpb25zOworKwkJWDUwOXYzX2FkZF9zdGFuZGFyZF9leHRlbnNpb25zOworKwkJWDUwOXYzX2NsZWFudXBfZXh0ZW5zaW9uczsKKysJCVg1MDl2M19kYXRhX3R5cGVfYnlfTklEOworKwkJWDUwOXYzX2RhdGFfdHlwZV9ieV9PQko7CisrCQlYNTA5djNfZGVsZXRlX2V4dDsKKysJCVg1MDl2M19nZXRfZXh0OworKwkJWDUwOXYzX2dldF9leHRfYnlfTklEOworKwkJWDUwOXYzX2dldF9leHRfYnlfT0JKOworKwkJWDUwOXYzX2dldF9leHRfYnlfY3JpdGljYWw7CisrCQlYNTA5djNfZ2V0X2V4dF9jb3VudDsKKysJCVg1MDl2M19wYWNrX3N0cmluZzsKKysJCVg1MDl2M19wYWNrX3R5cGVfYnlfTklEOworKwkJWDUwOXYzX3BhY2tfdHlwZV9ieV9PQko7CisrCQlYNTA5djNfdW5wYWNrX3N0cmluZzsKKysJCV9kZXNfY3J5cHQ7CisrCQlhMmRfQVNOMV9PQkpFQ1Q7CisrCQlhMmlfQVNOMV9JTlRFR0VSOworKwkJYTJpX0FTTjFfU1RSSU5HOworKwkJYXNuMV9GaW5pc2g7CisrCQlhc24xX0dldFNlcXVlbmNlOworKwkJYm5fZGl2X3dvcmRzOworKwkJYm5fZXhwYW5kMjsKKysJCWJuX211bF9hZGRfd29yZHM7CisrCQlibl9tdWxfd29yZHM7CisrCQlCTl91YWRkOworKwkJQk5fdXN1YjsKKysJCWJuX3Nxcl93b3JkczsKKysJCV9vc3NsX29sZF9jcnlwdDsKKysJCWQyaV9BU04xX0JJVF9TVFJJTkc7CisrCQlkMmlfQVNOMV9CT09MRUFOOworKwkJZDJpX0FTTjFfSEVBREVSOworKwkJZDJpX0FTTjFfSUE1U1RSSU5HOworKwkJZDJpX0FTTjFfSU5URUdFUjsKKysJCWQyaV9BU04xX09CSkVDVDsKKysJCWQyaV9BU04xX09DVEVUX1NUUklORzsKKysJCWQyaV9BU04xX1BSSU5UQUJMRTsKKysJCWQyaV9BU04xX1BSSU5UQUJMRVNUUklORzsKKysJCWQyaV9BU04xX1NFVDsKKysJCWQyaV9BU04xX1Q2MVNUUklORzsKKysJCWQyaV9BU04xX1RZUEU7CisrCQlkMmlfQVNOMV9VVENUSU1FOworKwkJZDJpX0FTTjFfYnl0ZXM7CisrCQlkMmlfQVNOMV90eXBlX2J5dGVzOworKwkJZDJpX0RIcGFyYW1zOworKwkJZDJpX0RTQVByaXZhdGVLZXk7CisrCQlkMmlfRFNBUHJpdmF0ZUtleV9iaW87CisrCQlkMmlfRFNBUHJpdmF0ZUtleV9mcDsKKysJCWQyaV9EU0FQdWJsaWNLZXk7CisrCQlkMmlfRFNBcGFyYW1zOworKwkJZDJpX05FVFNDQVBFX1NQS0FDOworKwkJZDJpX05FVFNDQVBFX1NQS0k7CisrCQlkMmlfTmV0c2NhcGVfUlNBOworKwkJZDJpX1BLQ1M3OworKwkJZDJpX1BLQ1M3X0RJR0VTVDsKKysJCWQyaV9QS0NTN19FTkNSWVBUOworKwkJZDJpX1BLQ1M3X0VOQ19DT05URU5UOworKwkJZDJpX1BLQ1M3X0VOVkVMT1BFOworKwkJZDJpX1BLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMOworKwkJZDJpX1BLQ1M3X1JFQ0lQX0lORk87CisrCQlkMmlfUEtDUzdfU0lHTkVEOworKwkJZDJpX1BLQ1M3X1NJR05FUl9JTkZPOworKwkJZDJpX1BLQ1M3X1NJR05fRU5WRUxPUEU7CisrCQlkMmlfUEtDUzdfYmlvOworKwkJZDJpX1BLQ1M3X2ZwOworKwkJZDJpX1ByaXZhdGVLZXk7CisrCQlkMmlfUHVibGljS2V5OworKwkJZDJpX1JTQVByaXZhdGVLZXk7CisrCQlkMmlfUlNBUHJpdmF0ZUtleV9iaW87CisrCQlkMmlfUlNBUHJpdmF0ZUtleV9mcDsKKysJCWQyaV9SU0FQdWJsaWNLZXk7CisrCQlkMmlfWDUwOTsKKysJCWQyaV9YNTA5X0FMR09SOworKwkJZDJpX1g1MDlfQVRUUklCVVRFOworKwkJZDJpX1g1MDlfQ0lORjsKKysJCWQyaV9YNTA5X0NSTDsKKysJCWQyaV9YNTA5X0NSTF9JTkZPOworKwkJZDJpX1g1MDlfQ1JMX2JpbzsKKysJCWQyaV9YNTA5X0NSTF9mcDsKKysJCWQyaV9YNTA5X0VYVEVOU0lPTjsKKysJCWQyaV9YNTA5X05BTUU7CisrCQlkMmlfWDUwOV9OQU1FX0VOVFJZOworKwkJZDJpX1g1MDlfUEtFWTsKKysJCWQyaV9YNTA5X1BVQktFWTsKKysJCWQyaV9YNTA5X1JFUTsKKysJCWQyaV9YNTA5X1JFUV9JTkZPOworKwkJZDJpX1g1MDlfUkVRX2JpbzsKKysJCWQyaV9YNTA5X1JFUV9mcDsKKysJCWQyaV9YNTA5X1JFVk9LRUQ7CisrCQlkMmlfWDUwOV9TSUc7CisrCQlkMmlfWDUwOV9WQUw7CisrCQlkMmlfWDUwOV9iaW87CisrCQlkMmlfWDUwOV9mcDsKKysJCURFU19jYmNfY2tzdW07CisrCQlERVNfY2JjX2VuY3J5cHQ7CisrCQlERVNfY2Jsb2NrX3ByaW50X2ZpbGU7CisrCQlERVNfY2ZiNjRfZW5jcnlwdDsKKysJCURFU19jZmJfZW5jcnlwdDsKKysJCURFU19kZWNyeXB0MzsKKysJCURFU19lY2IzX2VuY3J5cHQ7CisrCQlERVNfZWNiX2VuY3J5cHQ7CisrCQlERVNfZWRlM19jYmNfZW5jcnlwdDsKKysJCURFU19lZGUzX2NmYjY0X2VuY3J5cHQ7CisrCQlERVNfZWRlM19vZmI2NF9lbmNyeXB0OworKwkJREVTX2VuY19yZWFkOworKwkJREVTX2VuY193cml0ZTsKKysJCURFU19lbmNyeXB0MTsKKysJCURFU19lbmNyeXB0MjsKKysJCURFU19lbmNyeXB0MzsKKysJCURFU19mY3J5cHQ7CisrCQlERVNfaXNfd2Vha19rZXk7CisrCQlERVNfa2V5X3NjaGVkOworKwkJREVTX25jYmNfZW5jcnlwdDsKKysJCURFU19vZmI2NF9lbmNyeXB0OworKwkJREVTX29mYl9lbmNyeXB0OworKwkJREVTX29wdGlvbnM7CisrCQlERVNfcGNiY19lbmNyeXB0OworKwkJREVTX3F1YWRfY2tzdW07CisrCQlERVNfcmFuZG9tX2tleTsKKysJCV9vc3NsX29sZF9kZXNfcmFuZG9tX3NlZWQ7CisrCQlfb3NzbF9vbGRfZGVzX3JlYWRfMnBhc3N3b3JkczsKKysJCV9vc3NsX29sZF9kZXNfcmVhZF9wYXNzd29yZDsKKysJCV9vc3NsX29sZF9kZXNfcmVhZF9wdzsKKysJCV9vc3NsX29sZF9kZXNfcmVhZF9wd19zdHJpbmc7CisrCQlERVNfc2V0X2tleTsKKysJCURFU19zZXRfb2RkX3Bhcml0eTsKKysJCURFU19zdHJpbmdfdG9fMmtleXM7CisrCQlERVNfc3RyaW5nX3RvX2tleTsKKysJCURFU194Y2JjX2VuY3J5cHQ7CisrCQlERVNfeHdoaXRlX2luMm91dDsKKysJCWZjcnlwdF9ib2R5OworKwkJaTJhX0FTTjFfSU5URUdFUjsKKysJCWkyYV9BU04xX09CSkVDVDsKKysJCWkyYV9BU04xX1NUUklORzsKKysJCWkyZF9BU04xX0JJVF9TVFJJTkc7CisrCQlpMmRfQVNOMV9CT09MRUFOOworKwkJaTJkX0FTTjFfSEVBREVSOworKwkJaTJkX0FTTjFfSUE1U1RSSU5HOworKwkJaTJkX0FTTjFfSU5URUdFUjsKKysJCWkyZF9BU04xX09CSkVDVDsKKysJCWkyZF9BU04xX09DVEVUX1NUUklORzsKKysJCWkyZF9BU04xX1BSSU5UQUJMRTsKKysJCWkyZF9BU04xX1NFVDsKKysJCWkyZF9BU04xX1RZUEU7CisrCQlpMmRfQVNOMV9VVENUSU1FOworKwkJaTJkX0FTTjFfYnl0ZXM7CisrCQlpMmRfREhwYXJhbXM7CisrCQlpMmRfRFNBUHJpdmF0ZUtleTsKKysJCWkyZF9EU0FQcml2YXRlS2V5X2JpbzsKKysJCWkyZF9EU0FQcml2YXRlS2V5X2ZwOworKwkJaTJkX0RTQVB1YmxpY0tleTsKKysJCWkyZF9EU0FwYXJhbXM7CisrCQlpMmRfTkVUU0NBUEVfU1BLQUM7CisrCQlpMmRfTkVUU0NBUEVfU1BLSTsKKysJCWkyZF9OZXRzY2FwZV9SU0E7CisrCQlpMmRfUEtDUzc7CisrCQlpMmRfUEtDUzdfRElHRVNUOworKwkJaTJkX1BLQ1M3X0VOQ1JZUFQ7CisrCQlpMmRfUEtDUzdfRU5DX0NPTlRFTlQ7CisrCQlpMmRfUEtDUzdfRU5WRUxPUEU7CisrCQlpMmRfUEtDUzdfSVNTVUVSX0FORF9TRVJJQUw7CisrCQlpMmRfUEtDUzdfUkVDSVBfSU5GTzsKKysJCWkyZF9QS0NTN19TSUdORUQ7CisrCQlpMmRfUEtDUzdfU0lHTkVSX0lORk87CisrCQlpMmRfUEtDUzdfU0lHTl9FTlZFTE9QRTsKKysJCWkyZF9QS0NTN19iaW87CisrCQlpMmRfUEtDUzdfZnA7CisrCQlpMmRfUHJpdmF0ZUtleTsKKysJCWkyZF9QdWJsaWNLZXk7CisrCQlpMmRfUlNBUHJpdmF0ZUtleTsKKysJCWkyZF9SU0FQcml2YXRlS2V5X2JpbzsKKysJCWkyZF9SU0FQcml2YXRlS2V5X2ZwOworKwkJaTJkX1JTQVB1YmxpY0tleTsKKysJCWkyZF9YNTA5OworKwkJaTJkX1g1MDlfQUxHT1I7CisrCQlpMmRfWDUwOV9BVFRSSUJVVEU7CisrCQlpMmRfWDUwOV9DSU5GOworKwkJaTJkX1g1MDlfQ1JMOworKwkJaTJkX1g1MDlfQ1JMX0lORk87CisrCQlpMmRfWDUwOV9DUkxfYmlvOworKwkJaTJkX1g1MDlfQ1JMX2ZwOworKwkJaTJkX1g1MDlfRVhURU5TSU9OOworKwkJaTJkX1g1MDlfTkFNRTsKKysJCWkyZF9YNTA5X05BTUVfRU5UUlk7CisrCQlpMmRfWDUwOV9QS0VZOworKwkJaTJkX1g1MDlfUFVCS0VZOworKwkJaTJkX1g1MDlfUkVROworKwkJaTJkX1g1MDlfUkVRX0lORk87CisrCQlpMmRfWDUwOV9SRVFfYmlvOworKwkJaTJkX1g1MDlfUkVRX2ZwOworKwkJaTJkX1g1MDlfUkVWT0tFRDsKKysJCWkyZF9YNTA5X1NJRzsKKysJCWkyZF9YNTA5X1ZBTDsKKysJCWkyZF9YNTA5X2JpbzsKKysJCWkyZF9YNTA5X2ZwOworKwkJaWRlYV9jYmNfZW5jcnlwdDsKKysJCWlkZWFfY2ZiNjRfZW5jcnlwdDsKKysJCWlkZWFfZWNiX2VuY3J5cHQ7CisrCQlpZGVhX2VuY3J5cHQ7CisrCQlpZGVhX29mYjY0X2VuY3J5cHQ7CisrCQlpZGVhX29wdGlvbnM7CisrCQlpZGVhX3NldF9kZWNyeXB0X2tleTsKKysJCWlkZWFfc2V0X2VuY3J5cHRfa2V5OworKwkJbGhfZGVsZXRlOworKwkJbGhfZG9hbGw7CisrCQlsaF9kb2FsbF9hcmc7CisrCQlsaF9mcmVlOworKwkJbGhfaW5zZXJ0OworKwkJbGhfbmV3OworKwkJbGhfbm9kZV9zdGF0czsKKysJCWxoX25vZGVfc3RhdHNfYmlvOworKwkJbGhfbm9kZV91c2FnZV9zdGF0czsKKysJCWxoX25vZGVfdXNhZ2Vfc3RhdHNfYmlvOworKwkJbGhfcmV0cmlldmU7CisrCQlsaF9zdGF0czsKKysJCWxoX3N0YXRzX2JpbzsKKysJCWxoX3N0cmhhc2g7CisrCQlza19kZWxldGU7CisrCQlza19kZWxldGVfcHRyOworKwkJc2tfZHVwOworKwkJc2tfZmluZDsKKysJCXNrX2ZyZWU7CisrCQlza19pbnNlcnQ7CisrCQlza19uZXc7CisrCQlza19wb3A7CisrCQlza19wb3BfZnJlZTsKKysJCXNrX3B1c2g7CisrCQlza19zZXRfY21wX2Z1bmM7CisrCQlza19zaGlmdDsKKysJCXNrX3Vuc2hpZnQ7CisrCQlza196ZXJvOworKwkJQklPX2ZfbmJpb190ZXN0OworKwkJQVNOMV9UWVBFX2dldDsKKysJCUFTTjFfVFlQRV9zZXQ7CisrCQlQS0NTN19jb250ZW50X2ZyZWU7CisrCQlFUlJfbG9hZF9QS0NTN19zdHJpbmdzOworKwkJWDUwOV9maW5kX2J5X2lzc3Vlcl9hbmRfc2VyaWFsOworKwkJWDUwOV9maW5kX2J5X3N1YmplY3Q7CisrCQlQS0NTN19jdHJsOworKwkJUEtDUzdfc2V0X3R5cGU7CisrCQlQS0NTN19zZXRfY29udGVudDsKKysJCVBLQ1M3X1NJR05FUl9JTkZPX3NldDsKKysJCVBLQ1M3X2FkZF9zaWduZXI7CisrCQlQS0NTN19hZGRfY2VydGlmaWNhdGU7CisrCQlQS0NTN19hZGRfY3JsOworKwkJUEtDUzdfY29udGVudF9uZXc7CisrCQlQS0NTN19kYXRhU2lnbjsKKysJCVBLQ1M3X2RhdGFWZXJpZnk7CisrCQlQS0NTN19kYXRhSW5pdDsKKysJCVBLQ1M3X2FkZF9zaWduYXR1cmU7CisrCQlQS0NTN19jZXJ0X2Zyb21fc2lnbmVyX2luZm87CisrCQlQS0NTN19nZXRfc2lnbmVyX2luZm87CisrCQlFVlBfZGVsZXRlX2FsaWFzOworKwkJRVZQX21kYzI7CisrCQlQRU1fcmVhZF9iaW9fUlNBUHVibGljS2V5OworKwkJUEVNX3dyaXRlX2Jpb19SU0FQdWJsaWNLZXk7CisrCQlkMmlfUlNBUHVibGljS2V5X2JpbzsKKysJCWkyZF9SU0FQdWJsaWNLZXlfYmlvOworKwkJUEVNX3JlYWRfUlNBUHVibGljS2V5OworKwkJUEVNX3dyaXRlX1JTQVB1YmxpY0tleTsKKysJCWQyaV9SU0FQdWJsaWNLZXlfZnA7CisrCQlpMmRfUlNBUHVibGljS2V5X2ZwOworKwkJQklPX2NvcHlfbmV4dF9yZXRyeTsKKysJCVJTQV9mbGFnczsKKysJCVg1MDlfU1RPUkVfYWRkX2NybDsKKysJCVg1MDlfbG9hZF9jcmxfZmlsZTsKKysJCUVWUF9yYzJfNDBfY2JjOworKwkJRVZQX3JjNF80MDsKKysJCUVWUF9DSVBIRVJfQ1RYX2luaXQ7CisrCQlITUFDOworKwkJSE1BQ19Jbml0OworKwkJSE1BQ19VcGRhdGU7CisrCQlITUFDX0ZpbmFsOworKwkJRVJSX2dldF9uZXh0X2Vycm9yX2xpYnJhcnk7CisrCQlFVlBfUEtFWV9jbXBfcGFyYW1ldGVyczsKKysJCUhNQUNfY2xlYW51cDsKKysJCUJJT19wdHJfY3RybDsKKysJCUJJT19uZXdfZmlsZV9pbnRlcm5hbDsKKysJCUJJT19uZXdfZnBfaW50ZXJuYWw7CisrCQlCSU9fc19maWxlX2ludGVybmFsOworKwkJQk5fQkxJTkRJTkdfY29udmVydDsKKysJCUJOX0JMSU5ESU5HX2ludmVydDsKKysJCUJOX0JMSU5ESU5HX3VwZGF0ZTsKKysJCVJTQV9ibGluZGluZ19vbjsKKysJCVJTQV9ibGluZGluZ19vZmY7CisrCQlpMnRfQVNOMV9PQkpFQ1Q7CisrCQlCTl9CTElORElOR19uZXc7CisrCQlCTl9CTElORElOR19mcmVlOworKwkJRVZQX2Nhc3Q1X2NiYzsKKysJCUVWUF9jYXN0NV9jZmI2NDsKKysJCUVWUF9jYXN0NV9lY2I7CisrCQlFVlBfY2FzdDVfb2ZiOworKwkJQkZfZGVjcnlwdDsKKysJCUNBU1Rfc2V0X2tleTsKKysJCUNBU1RfZW5jcnlwdDsKKysJCUNBU1RfZGVjcnlwdDsKKysJCUNBU1RfZWNiX2VuY3J5cHQ7CisrCQlDQVNUX2NiY19lbmNyeXB0OworKwkJQ0FTVF9jZmI2NF9lbmNyeXB0OworKwkJQ0FTVF9vZmI2NF9lbmNyeXB0OworKwkJUkMyX2RlY3J5cHQ7CisrCQlPQkpfY3JlYXRlX29iamVjdHM7CisrCQlCTl9leHA7CisrCQlCTl9tdWxfd29yZDsKKysJCUJOX3N1Yl93b3JkOworKwkJQk5fZGVjMmJuOworKwkJQk5fYm4yZGVjOworKwkJQklPX2doYm5fY3RybDsKKysJCUNSWVBUT19mcmVlX2V4X2RhdGE7CisrCQlDUllQVE9fZ2V0X2V4X2RhdGE7CisrCQlDUllQVE9fc2V0X2V4X2RhdGE7CisrCQlFUlJfbG9hZF9DUllQVE9fc3RyaW5nczsKKysJCUVSUl9sb2FkX0NSWVBUT2xpYl9zdHJpbmdzOworKwkJRVZQX1BLRVlfYml0czsKKysJCU1ENV9UcmFuc2Zvcm07CisrCQlTSEExX1RyYW5zZm9ybTsKKysJCVNIQV9UcmFuc2Zvcm07CisrCQlYNTA5X1NUT1JFX0NUWF9nZXRfY2hhaW47CisrCQlYNTA5X1NUT1JFX0NUWF9nZXRfY3VycmVudF9jZXJ0OworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9yOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9yX2RlcHRoOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0X2V4X2RhdGE7CisrCQlYNTA5X1NUT1JFX0NUWF9zZXRfY2VydDsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF9jaGFpbjsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF9lcnJvcjsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF9leF9kYXRhOworKwkJQ1JZUFRPX2R1cF9leF9kYXRhOworKwkJQ1JZUFRPX2dldF9uZXdfbG9ja2lkOworKwkJQ1JZUFRPX25ld19leF9kYXRhOworKwkJUlNBX3NldF9leF9kYXRhOworKwkJUlNBX2dldF9leF9kYXRhOworKwkJUlNBX2dldF9leF9uZXdfaW5kZXg7CisrCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfdHlwZV8xOworKwkJUlNBX3BhZGRpbmdfYWRkX1BLQ1MxX3R5cGVfMjsKKysJCVJTQV9wYWRkaW5nX2FkZF9TU0x2MjM7CisrCQlSU0FfcGFkZGluZ19hZGRfbm9uZTsKKysJCVJTQV9wYWRkaW5nX2NoZWNrX1BLQ1MxX3R5cGVfMTsKKysJCVJTQV9wYWRkaW5nX2NoZWNrX1BLQ1MxX3R5cGVfMjsKKysJCVJTQV9wYWRkaW5nX2NoZWNrX1NTTHYyMzsKKysJCVJTQV9wYWRkaW5nX2NoZWNrX25vbmU7CisrCQlibl9hZGRfd29yZHM7CisrCQlkMmlfTmV0c2NhcGVfUlNBXzI7CisrCQlDUllQVE9fZ2V0X2V4X25ld19pbmRleDsKKysJCVJJUEVNRDE2MF9Jbml0OworKwkJUklQRU1EMTYwX1VwZGF0ZTsKKysJCVJJUEVNRDE2MF9GaW5hbDsKKysJCVJJUEVNRDE2MDsKKysJCVJJUEVNRDE2MF9UcmFuc2Zvcm07CisrCQlSQzVfMzJfc2V0X2tleTsKKysJCVJDNV8zMl9lY2JfZW5jcnlwdDsKKysJCVJDNV8zMl9lbmNyeXB0OworKwkJUkM1XzMyX2RlY3J5cHQ7CisrCQlSQzVfMzJfY2JjX2VuY3J5cHQ7CisrCQlSQzVfMzJfY2ZiNjRfZW5jcnlwdDsKKysJCVJDNV8zMl9vZmI2NF9lbmNyeXB0OworKwkJQk5fYm4ybXBpOworKwkJQk5fbXBpMmJuOworKwkJQVNOMV9CSVRfU1RSSU5HX2dldF9iaXQ7CisrCQlBU04xX0JJVF9TVFJJTkdfc2V0X2JpdDsKKysJCUJJT19nZXRfZXhfZGF0YTsKKysJCUJJT19nZXRfZXhfbmV3X2luZGV4OworKwkJQklPX3NldF9leF9kYXRhOworKwkJWDUwOXYzX2dldF9rZXlfdXNhZ2U7CisrCQlYNTA5djNfc2V0X2tleV91c2FnZTsKKysJCWEyaV9YNTA5djNfa2V5X3VzYWdlOworKwkJaTJhX1g1MDl2M19rZXlfdXNhZ2U7CisrCQlFVlBfUEtFWV9kZWNyeXB0OworKwkJRVZQX1BLRVlfZW5jcnlwdDsKKysJCVBLQ1M3X1JFQ0lQX0lORk9fc2V0OworKwkJUEtDUzdfYWRkX3JlY2lwaWVudDsKKysJCVBLQ1M3X2FkZF9yZWNpcGllbnRfaW5mbzsKKysJCVBLQ1M3X3NldF9jaXBoZXI7CisrCQlBU04xX1RZUEVfZ2V0X2ludF9vY3RldHN0cmluZzsKKysJCUFTTjFfVFlQRV9nZXRfb2N0ZXRzdHJpbmc7CisrCQlBU04xX1RZUEVfc2V0X2ludF9vY3RldHN0cmluZzsKKysJCUFTTjFfVFlQRV9zZXRfb2N0ZXRzdHJpbmc7CisrCQlBU04xX1VUQ1RJTUVfc2V0X3N0cmluZzsKKysJCUVSUl9hZGRfZXJyb3JfZGF0YTsKKysJCUVSUl9zZXRfZXJyb3JfZGF0YTsKKysJCUVWUF9DSVBIRVJfYXNuMV90b19wYXJhbTsKKysJCUVWUF9DSVBIRVJfcGFyYW1fdG9fYXNuMTsKKysJCUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXY7CisrCQlFVlBfQ0lQSEVSX3NldF9hc24xX2l2OworKwkJRVZQX3JjNV8zMl8xMl8xNl9jYmM7CisrCQlFVlBfcmM1XzMyXzEyXzE2X2NmYjY0OworKwkJRVZQX3JjNV8zMl8xMl8xNl9lY2I7CisrCQlFVlBfcmM1XzMyXzEyXzE2X29mYjsKKysJCWFzbjFfYWRkX2Vycm9yOworKwkJZDJpX0FTTjFfQk1QU1RSSU5HOworKwkJaTJkX0FTTjFfQk1QU1RSSU5HOworKwkJQklPX2ZfYmVyOworKwkJQk5faW5pdDsKKysJCUNPTVBfQ1RYX25ldzsKKysJCUNPTVBfQ1RYX2ZyZWU7CisrCQlDT01QX0NUWF9jb21wcmVzc19ibG9jazsKKysJCUNPTVBfQ1RYX2V4cGFuZF9ibG9jazsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldF9leF9uZXdfaW5kZXg7CisrCQlPQkpfTkFNRV9hZGQ7CisrCQlCSU9fc29ja2V0X25iaW87CisrCQlFVlBfcmMyXzY0X2NiYzsKKysJCU9CSl9OQU1FX2NsZWFudXA7CisrCQlPQkpfTkFNRV9nZXQ7CisrCQlPQkpfTkFNRV9pbml0OworKwkJT0JKX05BTUVfbmV3X2luZGV4OworKwkJT0JKX05BTUVfcmVtb3ZlOworKwkJQk5fTU9OVF9DVFhfY29weTsKKysJCUJJT19uZXdfc29ja3M0YV9jb25uZWN0OworKwkJQklPX3Nfc29ja3M0YV9jb25uZWN0OworKwkJUFJPWFlfc2V0X2Nvbm5lY3RfbW9kZTsKKysJCVJBTkRfU1NMZWF5OworKwkJUkFORF9zZXRfcmFuZF9tZXRob2Q7CisrCQlSU0FfbWVtb3J5X2xvY2s7CisrCQlibl9zdWJfd29yZHM7CisrCQlibl9tdWxfbm9ybWFsOworKwkJYm5fbXVsX2NvbWJhODsKKysJCWJuX211bF9jb21iYTQ7CisrCQlibl9zcXJfbm9ybWFsOworKwkJYm5fc3FyX2NvbWJhODsKKysJCWJuX3Nxcl9jb21iYTQ7CisrCQlibl9jbXBfd29yZHM7CisrCQlibl9tdWxfcmVjdXJzaXZlOworKwkJYm5fbXVsX3BhcnRfcmVjdXJzaXZlOworKwkJYm5fc3FyX3JlY3Vyc2l2ZTsKKysJCWJuX211bF9sb3dfbm9ybWFsOworKwkJQk5fUkVDUF9DVFhfaW5pdDsKKysJCUJOX1JFQ1BfQ1RYX25ldzsKKysJCUJOX1JFQ1BfQ1RYX2ZyZWU7CisrCQlCTl9SRUNQX0NUWF9zZXQ7CisrCQlCTl9tb2RfbXVsX3JlY2lwcm9jYWw7CisrCQlCTl9tb2RfZXhwX3JlY3A7CisrCQlCTl9kaXZfcmVjcDsKKysJCUJOX0NUWF9pbml0OworKwkJQk5fTU9OVF9DVFhfaW5pdDsKKysJCVJBTkRfZ2V0X3JhbmRfbWV0aG9kOworKwkJUEtDUzdfYWRkX2F0dHJpYnV0ZTsKKysJCVBLQ1M3X2FkZF9zaWduZWRfYXR0cmlidXRlOworKwkJUEtDUzdfZGlnZXN0X2Zyb21fYXR0cmlidXRlczsKKysJCVBLQ1M3X2dldF9hdHRyaWJ1dGU7CisrCQlQS0NTN19nZXRfaXNzdWVyX2FuZF9zZXJpYWw7CisrCQlQS0NTN19nZXRfc2lnbmVkX2F0dHJpYnV0ZTsKKysJCUNPTVBfY29tcHJlc3NfYmxvY2s7CisrCQlDT01QX2V4cGFuZF9ibG9jazsKKysJCUNPTVBfcmxlOworKwkJQ09NUF96bGliOworKwkJbXNfdGltZV9kaWZmOworKwkJbXNfdGltZV9uZXc7CisrCQltc190aW1lX2ZyZWU7CisrCQltc190aW1lX2NtcDsKKysJCW1zX3RpbWVfZ2V0OworKwkJUEtDUzdfc2V0X2F0dHJpYnV0ZXM7CisrCQlQS0NTN19zZXRfc2lnbmVkX2F0dHJpYnV0ZXM7CisrCQlYNTA5X0FUVFJJQlVURV9jcmVhdGU7CisrCQlYNTA5X0FUVFJJQlVURV9kdXA7CisrCQlBU04xX0dFTkVSQUxJWkVEVElNRV9jaGVjazsKKysJCUFTTjFfR0VORVJBTElaRURUSU1FX3ByaW50OworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfc2V0OworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfc2V0X3N0cmluZzsKKysJCUFTTjFfVElNRV9wcmludDsKKysJCUJBU0lDX0NPTlNUUkFJTlRTX2ZyZWU7CisrCQlCQVNJQ19DT05TVFJBSU5UU19uZXc7CisrCQlFUlJfbG9hZF9YNTA5VjNfc3RyaW5nczsKKysJCU5FVFNDQVBFX0NFUlRfU0VRVUVOQ0VfZnJlZTsKKysJCU5FVFNDQVBFX0NFUlRfU0VRVUVOQ0VfbmV3OworKwkJT0JKX3R4dDJvYmo7CisrCQlQRU1fcmVhZF9ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFOworKwkJUEVNX3JlYWRfTlNfQ0VSVF9TRVE7CisrCQlQRU1fcmVhZF9iaW9fTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRTsKKysJCVBFTV9yZWFkX2Jpb19OU19DRVJUX1NFUTsKKysJCVBFTV93cml0ZV9ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFOworKwkJUEVNX3dyaXRlX05TX0NFUlRfU0VROworKwkJUEVNX3dyaXRlX2Jpb19ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFOworKwkJUEVNX3dyaXRlX2Jpb19OU19DRVJUX1NFUTsKKysJCVg1MDlWM19FWFRfYWRkOworKwkJWDUwOVYzX0VYVF9hZGRfYWxpYXM7CisrCQlYNTA5VjNfRVhUX2FkZF9jb25mOworKwkJWDUwOVYzX0VYVF9jbGVhbnVwOworKwkJWDUwOVYzX0VYVF9jb25mOworKwkJWDUwOVYzX0VYVF9jb25mX25pZDsKKysJCVg1MDlWM19FWFRfZ2V0OworKwkJWDUwOVYzX0VYVF9nZXRfbmlkOworKwkJWDUwOVYzX0VYVF9wcmludDsKKysJCVg1MDlWM19FWFRfcHJpbnRfZnA7CisrCQlYNTA5VjNfYWRkX3N0YW5kYXJkX2V4dGVuc2lvbnM7CisrCQlYNTA5VjNfYWRkX3ZhbHVlOworKwkJWDUwOVYzX2FkZF92YWx1ZV9ib29sOworKwkJWDUwOVYzX2FkZF92YWx1ZV9pbnQ7CisrCQlYNTA5VjNfY29uZl9mcmVlOworKwkJWDUwOVYzX2dldF92YWx1ZV9ib29sOworKwkJWDUwOVYzX2dldF92YWx1ZV9pbnQ7CisrCQlYNTA5VjNfcGFyc2VfbGlzdDsKKysJCWQyaV9BU04xX0dFTkVSQUxJWkVEVElNRTsKKysJCWQyaV9BU04xX1RJTUU7CisrCQlkMmlfQkFTSUNfQ09OU1RSQUlOVFM7CisrCQlkMmlfTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRTsKKysJCWQyaV9leHRfa3U7CisrCQlleHRfa3VfZnJlZTsKKysJCWV4dF9rdV9uZXc7CisrCQlpMmRfQVNOMV9HRU5FUkFMSVpFRFRJTUU7CisrCQlpMmRfQVNOMV9USU1FOworKwkJaTJkX0JBU0lDX0NPTlNUUkFJTlRTOworKwkJaTJkX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0U7CisrCQlpMmRfZXh0X2t1OworKwkJRVZQX01EX0NUWF9jb3B5OworKwkJaTJkX0FTTjFfRU5VTUVSQVRFRDsKKysJCWQyaV9BU04xX0VOVU1FUkFURUQ7CisrCQlBU04xX0VOVU1FUkFURURfc2V0OworKwkJQVNOMV9FTlVNRVJBVEVEX2dldDsKKysJCUJOX3RvX0FTTjFfRU5VTUVSQVRFRDsKKysJCUFTTjFfRU5VTUVSQVRFRF90b19CTjsKKysJCWkyYV9BU04xX0VOVU1FUkFURUQ7CisrCQlhMmlfQVNOMV9FTlVNRVJBVEVEOworKwkJaTJkX0dFTkVSQUxfTkFNRTsKKysJCWQyaV9HRU5FUkFMX05BTUU7CisrCQlHRU5FUkFMX05BTUVfbmV3OworKwkJR0VORVJBTF9OQU1FX2ZyZWU7CisrCQlHRU5FUkFMX05BTUVTX25ldzsKKysJCUdFTkVSQUxfTkFNRVNfZnJlZTsKKysJCWQyaV9HRU5FUkFMX05BTUVTOworKwkJaTJkX0dFTkVSQUxfTkFNRVM7CisrCQlpMnZfR0VORVJBTF9OQU1FUzsKKysJCWkyc19BU04xX09DVEVUX1NUUklORzsKKysJCXMyaV9BU04xX09DVEVUX1NUUklORzsKKysJCVg1MDlWM19FWFRfY2hlY2tfY29uZjsKKysJCWhleF90b19zdHJpbmc7CisrCQlzdHJpbmdfdG9faGV4OworKwkJREVTX2VkZTNfY2JjbV9lbmNyeXB0OworKwkJUlNBX3BhZGRpbmdfYWRkX1BLQ1MxX09BRVA7CisrCQlSU0FfcGFkZGluZ19jaGVja19QS0NTMV9PQUVQOworKwkJWDUwOV9DUkxfcHJpbnRfZnA7CisrCQlYNTA5X0NSTF9wcmludDsKKysJCWkydl9HRU5FUkFMX05BTUU7CisrCQl2MmlfR0VORVJBTF9OQU1FOworKwkJaTJkX1BLRVlfVVNBR0VfUEVSSU9EOworKwkJZDJpX1BLRVlfVVNBR0VfUEVSSU9EOworKwkJUEtFWV9VU0FHRV9QRVJJT0RfbmV3OworKwkJUEtFWV9VU0FHRV9QRVJJT0RfZnJlZTsKKysJCXYyaV9HRU5FUkFMX05BTUVTOworKwkJaTJzX0FTTjFfSU5URUdFUjsKKysJCVg1MDlWM19FWFRfZDJpOworKwkJbmFtZV9jbXA7CisrCQlzdHJfZHVwOworKwkJaTJzX0FTTjFfRU5VTUVSQVRFRDsKKysJCWkyc19BU04xX0VOVU1FUkFURURfVEFCTEU7CisrCQlCSU9fc19sb2c7CisrCQlCSU9fZl9yZWxpYWJsZTsKKysJCVBLQ1M3X2RhdGFGaW5hbDsKKysJCVBLQ1M3X2RhdGFEZWNvZGU7CisrCQlYNTA5VjNfRVhUX0NSTF9hZGRfY29uZjsKKysJCUJOX3NldF9wYXJhbXM7CisrCQlCTl9nZXRfcGFyYW1zOworKwkJQklPX2dldF9leF9udW07CisrCQlCSU9fc2V0X2V4X2ZyZWVfZnVuYzsKKysJCUVWUF9yaXBlbWQxNjA7CisrCQlBU04xX1RJTUVfc2V0OworKwkJaTJkX0FVVEhPUklUWV9LRVlJRDsKKysJCWQyaV9BVVRIT1JJVFlfS0VZSUQ7CisrCQlBVVRIT1JJVFlfS0VZSURfbmV3OworKwkJQVVUSE9SSVRZX0tFWUlEX2ZyZWU7CisrCQlBU04xX3NlcV91bnBhY2s7CisrCQlBU04xX3NlcV9wYWNrOworKwkJQVNOMV91bnBhY2tfc3RyaW5nOworKwkJQVNOMV9wYWNrX3N0cmluZzsKKysJCVBLQ1MxMl9wYWNrX3NhZmViYWc7CisrCQlQS0NTMTJfTUFLRV9LRVlCQUc7CisrCQlQS0NTOF9lbmNyeXB0OworKwkJUEtDUzEyX01BS0VfU0hLRVlCQUc7CisrCQlQS0NTMTJfcGFja19wN2RhdGE7CisrCQlQS0NTMTJfcGFja19wN2VuY2RhdGE7CisrCQlQS0NTMTJfYWRkX2xvY2Fsa2V5aWQ7CisrCQlQS0NTMTJfYWRkX2ZyaWVuZGx5bmFtZV9hc2M7CisrCQlQS0NTMTJfYWRkX2ZyaWVuZGx5bmFtZV91bmk7CisrCQlQS0NTMTJfZ2V0X2ZyaWVuZGx5bmFtZTsKKysJCVBLQ1MxMl9wYmVfY3J5cHQ7CisrCQlQS0NTMTJfZGVjcnlwdF9kMmk7CisrCQlQS0NTMTJfaTJkX2VuY3J5cHQ7CisrCQlQS0NTMTJfaW5pdDsKKysJCVBLQ1MxMl9rZXlfZ2VuX2FzYzsKKysJCVBLQ1MxMl9rZXlfZ2VuX3VuaTsKKysJCVBLQ1MxMl9nZW5fbWFjOworKwkJUEtDUzEyX3ZlcmlmeV9tYWM7CisrCQlQS0NTMTJfc2V0X21hYzsKKysJCVBLQ1MxMl9zZXR1cF9tYWM7CisrCQlPUEVOU1NMX2FzYzJ1bmk7CisrCQlPUEVOU1NMX3VuaTJhc2M7CisrCQlpMmRfUEtDUzEyX0JBR1M7CisrCQlQS0NTMTJfQkFHU19uZXc7CisrCQlkMmlfUEtDUzEyX0JBR1M7CisrCQlQS0NTMTJfQkFHU19mcmVlOworKwkJaTJkX1BLQ1MxMjsKKysJCWQyaV9QS0NTMTI7CisrCQlQS0NTMTJfbmV3OworKwkJUEtDUzEyX2ZyZWU7CisrCQlpMmRfUEtDUzEyX01BQ19EQVRBOworKwkJUEtDUzEyX01BQ19EQVRBX25ldzsKKysJCWQyaV9QS0NTMTJfTUFDX0RBVEE7CisrCQlQS0NTMTJfTUFDX0RBVEFfZnJlZTsKKysJCWkyZF9QS0NTMTJfU0FGRUJBRzsKKysJCVBLQ1MxMl9TQUZFQkFHX25ldzsKKysJCWQyaV9QS0NTMTJfU0FGRUJBRzsKKysJCVBLQ1MxMl9TQUZFQkFHX2ZyZWU7CisrCQlFUlJfbG9hZF9QS0NTMTJfc3RyaW5nczsKKysJCVBLQ1MxMl9QQkVfYWRkOworKwkJUEtDUzhfYWRkX2tleXVzYWdlOworKwkJUEtDUzEyX2dldF9hdHRyX2dlbjsKKysJCVBLQ1MxMl9wYXJzZTsKKysJCVBLQ1MxMl9jcmVhdGU7CisrCQlpMmRfUEtDUzEyX2JpbzsKKysJCWkyZF9QS0NTMTJfZnA7CisrCQlkMmlfUEtDUzEyX2JpbzsKKysJCWQyaV9QS0NTMTJfZnA7CisrCQlpMmRfUEJFUEFSQU07CisrCQlQQkVQQVJBTV9uZXc7CisrCQlkMmlfUEJFUEFSQU07CisrCQlQQkVQQVJBTV9mcmVlOworKwkJaTJkX1BLQ1M4X1BSSVZfS0VZX0lORk87CisrCQlQS0NTOF9QUklWX0tFWV9JTkZPX25ldzsKKysJCWQyaV9QS0NTOF9QUklWX0tFWV9JTkZPOworKwkJUEtDUzhfUFJJVl9LRVlfSU5GT19mcmVlOworKwkJRVZQX1BLQ1M4MlBLRVk7CisrCQlFVlBfUEtFWTJQS0NTODsKKysJCVBLQ1M4X3NldF9icm9rZW47CisrCQlFVlBfUEJFX0FMR09SX0NpcGhlckluaXQ7CisrCQlFVlBfUEJFX2FsZ19hZGQ7CisrCQlQS0NTNV9wYmVfc2V0OworKwkJRVZQX1BCRV9jbGVhbnVwOworKwkJaTJkX1NYTkVUOworKwkJZDJpX1NYTkVUOworKwkJU1hORVRfbmV3OworKwkJU1hORVRfZnJlZTsKKysJCWkyZF9TWE5FVElEOworKwkJZDJpX1NYTkVUSUQ7CisrCQlTWE5FVElEX25ldzsKKysJCVNYTkVUSURfZnJlZTsKKysJCURTQV9TSUdfbmV3OworKwkJRFNBX1NJR19mcmVlOworKwkJRFNBX2RvX3NpZ247CisrCQlEU0FfZG9fdmVyaWZ5OworKwkJZDJpX0RTQV9TSUc7CisrCQlpMmRfRFNBX1NJRzsKKysJCWkyZF9BU04xX1ZJU0lCTEVTVFJJTkc7CisrCQlkMmlfQVNOMV9WSVNJQkxFU1RSSU5HOworKwkJaTJkX0FTTjFfVVRGOFNUUklORzsKKysJCWQyaV9BU04xX1VURjhTVFJJTkc7CisrCQlpMmRfRElSRUNUT1JZU1RSSU5HOworKwkJZDJpX0RJUkVDVE9SWVNUUklORzsKKysJCWkyZF9ESVNQTEFZVEVYVDsKKysJCWQyaV9ESVNQTEFZVEVYVDsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5OworKwkJaTJkX0FTTjFfU0VUX09GX1g1MDk7CisrCQlpMmRfUEJLREYyUEFSQU07CisrCQlQQktERjJQQVJBTV9uZXc7CisrCQlkMmlfUEJLREYyUEFSQU07CisrCQlQQktERjJQQVJBTV9mcmVlOworKwkJaTJkX1BCRTJQQVJBTTsKKysJCVBCRTJQQVJBTV9uZXc7CisrCQlkMmlfUEJFMlBBUkFNOworKwkJUEJFMlBBUkFNX2ZyZWU7CisrCQlkMmlfQVNOMV9TRVRfT0ZfR0VORVJBTF9OQU1FOworKwkJaTJkX0FTTjFfU0VUX09GX0dFTkVSQUxfTkFNRTsKKysJCWQyaV9BU04xX1NFVF9PRl9TWE5FVElEOworKwkJaTJkX0FTTjFfU0VUX09GX1NYTkVUSUQ7CisrCQlkMmlfQVNOMV9TRVRfT0ZfUE9MSUNZUVVBTElORk87CisrCQlpMmRfQVNOMV9TRVRfT0ZfUE9MSUNZUVVBTElORk87CisrCQlkMmlfQVNOMV9TRVRfT0ZfUE9MSUNZSU5GTzsKKysJCWkyZF9BU04xX1NFVF9PRl9QT0xJQ1lJTkZPOworKwkJU1hORVRfYWRkX2lkX2FzYzsKKysJCVNYTkVUX2FkZF9pZF91bG9uZzsKKysJCVNYTkVUX2FkZF9pZF9JTlRFR0VSOworKwkJU1hORVRfZ2V0X2lkX2FzYzsKKysJCVNYTkVUX2dldF9pZF91bG9uZzsKKysJCVNYTkVUX2dldF9pZF9JTlRFR0VSOworKwkJWDUwOVYzX3NldF9jb25mX2xoYXNoOworKwkJaTJkX0NFUlRJRklDQVRFUE9MSUNJRVM7CisrCQlDRVJUSUZJQ0FURVBPTElDSUVTX25ldzsKKysJCUNFUlRJRklDQVRFUE9MSUNJRVNfZnJlZTsKKysJCWQyaV9DRVJUSUZJQ0FURVBPTElDSUVTOworKwkJaTJkX1BPTElDWUlORk87CisrCQlQT0xJQ1lJTkZPX25ldzsKKysJCWQyaV9QT0xJQ1lJTkZPOworKwkJUE9MSUNZSU5GT19mcmVlOworKwkJaTJkX1BPTElDWVFVQUxJTkZPOworKwkJUE9MSUNZUVVBTElORk9fbmV3OworKwkJZDJpX1BPTElDWVFVQUxJTkZPOworKwkJUE9MSUNZUVVBTElORk9fZnJlZTsKKysJCWkyZF9VU0VSTk9USUNFOworKwkJVVNFUk5PVElDRV9uZXc7CisrCQlkMmlfVVNFUk5PVElDRTsKKysJCVVTRVJOT1RJQ0VfZnJlZTsKKysJCWkyZF9OT1RJQ0VSRUY7CisrCQlOT1RJQ0VSRUZfbmV3OworKwkJZDJpX05PVElDRVJFRjsKKysJCU5PVElDRVJFRl9mcmVlOworKwkJWDUwOVYzX2dldF9zdHJpbmc7CisrCQlYNTA5VjNfZ2V0X3NlY3Rpb247CisrCQlYNTA5VjNfc3RyaW5nX2ZyZWU7CisrCQlYNTA5VjNfc2VjdGlvbl9mcmVlOworKwkJWDUwOVYzX3NldF9jdHg7CisrCQlzMmlfQVNOMV9JTlRFR0VSOworKwkJQ1JZUFRPX3NldF9sb2NrZWRfbWVtX2Z1bmN0aW9uczsKKysJCUNSWVBUT19nZXRfbG9ja2VkX21lbV9mdW5jdGlvbnM7CisrCQlDUllQVE9fbWFsbG9jX2xvY2tlZDsKKysJCUNSWVBUT19mcmVlX2xvY2tlZDsKKysJCUJOX21vZF9leHAyX21vbnQ7CisrCQlFUlJfZ2V0X2Vycm9yX2xpbmVfZGF0YTsKKysJCUVSUl9wZWVrX2Vycm9yX2xpbmVfZGF0YTsKKysJCVBLQ1MxMl9QQkVfa2V5aXZnZW47CisrCQlYNTA5X0FMR09SX2R1cDsKKysJCWQyaV9BU04xX1NFVF9PRl9ESVNUX1BPSU5UOworKwkJaTJkX0FTTjFfU0VUX09GX0RJU1RfUE9JTlQ7CisrCQlpMmRfQ1JMX0RJU1RfUE9JTlRTOworKwkJQ1JMX0RJU1RfUE9JTlRTX25ldzsKKysJCUNSTF9ESVNUX1BPSU5UU19mcmVlOworKwkJZDJpX0NSTF9ESVNUX1BPSU5UUzsKKysJCWkyZF9ESVNUX1BPSU5UOworKwkJRElTVF9QT0lOVF9uZXc7CisrCQlkMmlfRElTVF9QT0lOVDsKKysJCURJU1RfUE9JTlRfZnJlZTsKKysJCWkyZF9ESVNUX1BPSU5UX05BTUU7CisrCQlESVNUX1BPSU5UX05BTUVfbmV3OworKwkJRElTVF9QT0lOVF9OQU1FX2ZyZWU7CisrCQlkMmlfRElTVF9QT0lOVF9OQU1FOworKwkJWDUwOVYzX2FkZF92YWx1ZV91Y2hhcjsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5X0FUVFJJQlVURTsKKysJCWkyZF9BU04xX1NFVF9PRl9BU04xX1RZUEU7CisrCQlkMmlfQVNOMV9TRVRfT0ZfWDUwOV9FWFRFTlNJT047CisrCQlkMmlfQVNOMV9TRVRfT0ZfWDUwOV9OQU1FX0VOVFJZOworKwkJZDJpX0FTTjFfU0VUX09GX0FTTjFfVFlQRTsKKysJCWkyZF9BU04xX1NFVF9PRl9YNTA5X0FUVFJJQlVURTsKKysJCWkyZF9BU04xX1NFVF9PRl9YNTA5X0VYVEVOU0lPTjsKKysJCWkyZF9BU04xX1NFVF9PRl9YNTA5X05BTUVfRU5UUlk7CisrCQlYNTA5VjNfRVhUX2kyZDsKKysJCVg1MDlWM19FWFRfdmFsX3BybjsKKysJCVg1MDlWM19FWFRfYWRkX2xpc3Q7CisrCQlFVlBfQ0lQSEVSX3R5cGU7CisrCQlFVlBfUEJFX0NpcGhlckluaXQ7CisrCQlYNTA5VjNfYWRkX3ZhbHVlX2Jvb2xfbmY7CisrCQlkMmlfQVNOMV9VSU5URUdFUjsKKysJCXNrX3ZhbHVlOworKwkJc2tfbnVtOworKwkJc2tfc2V0OworKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfUkVWT0tFRDsKKysJCXNrX3NvcnQ7CisrCQlkMmlfQVNOMV9TRVRfT0ZfWDUwOV9SRVZPS0VEOworKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfQUxHT1I7CisrCQlpMmRfQVNOMV9TRVRfT0ZfWDUwOV9DUkw7CisrCQlkMmlfQVNOMV9TRVRfT0ZfWDUwOV9BTEdPUjsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5X0NSTDsKKysJCWkyZF9BU04xX1NFVF9PRl9QS0NTN19TSUdORVJfSU5GTzsKKysJCWkyZF9BU04xX1NFVF9PRl9QS0NTN19SRUNJUF9JTkZPOworKwkJZDJpX0FTTjFfU0VUX09GX1BLQ1M3X1NJR05FUl9JTkZPOworKwkJZDJpX0FTTjFfU0VUX09GX1BLQ1M3X1JFQ0lQX0lORk87CisrCQlQS0NTNV9QQkVfYWRkOworKwkJUEVNX3dyaXRlX2Jpb19QS0NTODsKKysJCWkyZF9QS0NTOF9mcDsKKysJCVBFTV9yZWFkX2Jpb19QS0NTOF9QUklWX0tFWV9JTkZPOworKwkJUEVNX3JlYWRfYmlvX1A4X1BSSVZfS0VZX0lORk87CisrCQlkMmlfUEtDUzhfYmlvOworKwkJZDJpX1BLQ1M4X1BSSVZfS0VZX0lORk9fZnA7CisrCQlQRU1fd3JpdGVfYmlvX1BLQ1M4X1BSSVZfS0VZX0lORk87CisrCQlQRU1fd3JpdGVfYmlvX1A4X1BSSVZfS0VZX0lORk87CisrCQlQRU1fcmVhZF9QS0NTODsKKysJCWQyaV9QS0NTOF9QUklWX0tFWV9JTkZPX2JpbzsKKysJCWQyaV9QS0NTOF9mcDsKKysJCVBFTV93cml0ZV9QS0NTODsKKysJCVBFTV9yZWFkX1BLQ1M4X1BSSVZfS0VZX0lORk87CisrCQlQRU1fcmVhZF9QOF9QUklWX0tFWV9JTkZPOworKwkJUEVNX3JlYWRfYmlvX1BLQ1M4OworKwkJUEVNX3dyaXRlX1BLQ1M4X1BSSVZfS0VZX0lORk87CisrCQlQRU1fd3JpdGVfUDhfUFJJVl9LRVlfSU5GTzsKKysJCVBLQ1M1X1BCRV9rZXlpdmdlbjsKKysJCWkyZF9QS0NTOF9iaW87CisrCQlpMmRfUEtDUzhfUFJJVl9LRVlfSU5GT19mcDsKKysJCWkyZF9QS0NTOF9QUklWX0tFWV9JTkZPX2JpbzsKKysJCUJJT19zX2JpbzsKKysJCVBLQ1M1X3BiZTJfc2V0OworKwkJUEtDUzVfUEJLREYyX0hNQUNfU0hBMTsKKysJCVBLQ1M1X3YyX1BCRV9rZXlpdmdlbjsKKysJCVBFTV93cml0ZV9iaW9fUEtDUzhQcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX1BLQ1M4UHJpdmF0ZUtleTsKKysJCUJJT19jdHJsX2dldF9yZWFkX3JlcXVlc3Q7CisrCQlCSU9fY3RybF9wZW5kaW5nOworKwkJQklPX2N0cmxfd3BlbmRpbmc7CisrCQlCSU9fbmV3X2Jpb19wYWlyOworKwkJQklPX2N0cmxfZ2V0X3dyaXRlX2d1YXJhbnRlZTsKKysJCUNSWVBUT19udW1fbG9ja3M7CisrCQlDT05GX2xvYWRfYmlvOworKwkJQ09ORl9sb2FkX2ZwOworKwkJaTJkX0FTTjFfU0VUX09GX0FTTjFfT0JKRUNUOworKwkJZDJpX0FTTjFfU0VUX09GX0FTTjFfT0JKRUNUOworKwkJUEtDUzdfc2lnbmF0dXJlVmVyaWZ5OworKwkJUlNBX3NldF9tZXRob2Q7CisrCQlSU0FfZ2V0X21ldGhvZDsKKysJCVJTQV9nZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlSU0FfY2hlY2tfa2V5OworKwkJT0JKX29iajJ0eHQ7CisrCQlEU0FfZHVwX0RIOworKwkJWDUwOV9SRVFfZ2V0X2V4dGVuc2lvbnM7CisrCQlYNTA5X1JFUV9zZXRfZXh0ZW5zaW9uX25pZHM7CisrCQlCSU9fbndyaXRlOworKwkJWDUwOV9SRVFfZXh0ZW5zaW9uX25pZDsKKysJCUJJT19ucmVhZDsKKysJCVg1MDlfUkVRX2dldF9leHRlbnNpb25fbmlkczsKKysJCUJJT19ud3JpdGUwOworKwkJWDUwOV9SRVFfYWRkX2V4dGVuc2lvbnNfbmlkOworKwkJQklPX25yZWFkMDsKKysJCVg1MDlfUkVRX2FkZF9leHRlbnNpb25zOworKwkJQklPX25ld19tZW1fYnVmOworKwkJREhfc2V0X2V4X2RhdGE7CisrCQlESF9zZXRfbWV0aG9kOworKwkJRFNBX09wZW5TU0w7CisrCQlESF9nZXRfZXhfZGF0YTsKKysJCURIX2dldF9leF9uZXdfaW5kZXg7CisrCQlEU0FfbmV3X21ldGhvZDsKKysJCURIX25ld19tZXRob2Q7CisrCQlESF9PcGVuU1NMOworKwkJRFNBX2dldF9leF9uZXdfaW5kZXg7CisrCQlESF9nZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlEU0Ffc2V0X2V4X2RhdGE7CisrCQlESF9zZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlEU0FfZ2V0X2V4X2RhdGE7CisrCQlYNTA5VjNfRVhUX1JFUV9hZGRfY29uZjsKKysJCU5FVFNDQVBFX1NQS0lfcHJpbnQ7CisrCQlORVRTQ0FQRV9TUEtJX3NldF9wdWJrZXk7CisrCQlORVRTQ0FQRV9TUEtJX2I2NF9lbmNvZGU7CisrCQlORVRTQ0FQRV9TUEtJX2dldF9wdWJrZXk7CisrCQlORVRTQ0FQRV9TUEtJX2I2NF9kZWNvZGU7CisrCQlVVEY4X3B1dGM7CisrCQlVVEY4X2dldGM7CisrCQlSU0FfbnVsbF9tZXRob2Q7CisrCQlBU04xX3RhZzJzdHI7CisrCQlCSU9fY3RybF9yZXNldF9yZWFkX3JlcXVlc3Q7CisrCQlESVNQTEFZVEVYVF9uZXc7CisrCQlBU04xX0dFTkVSQUxJWkVEVElNRV9mcmVlOworKwkJWDUwOV9SRVZPS0VEX2dldF9leHRfZDJpOworKwkJWDUwOV9zZXRfZXhfZGF0YTsKKysJCVg1MDlfcmVqZWN0X3NldF9iaXRfYXNjOworKwkJWDUwOV9OQU1FX2FkZF9lbnRyeV9ieV90eHQ7CisrCQlYNTA5X05BTUVfYWRkX2VudHJ5X2J5X05JRDsKKysJCVg1MDlfUFVSUE9TRV9nZXQwOworKwkJUEVNX3JlYWRfWDUwOV9BVVg7CisrCQlkMmlfQVVUSE9SSVRZX0lORk9fQUNDRVNTOworKwkJUEVNX3dyaXRlX1BVQktFWTsKKysJCUFDQ0VTU19ERVNDUklQVElPTl9uZXc7CisrCQlYNTA5X0NFUlRfQVVYX2ZyZWU7CisrCQlkMmlfQUNDRVNTX0RFU0NSSVBUSU9OOworKwkJWDUwOV90cnVzdF9jbGVhcjsKKysJCVg1MDlfVFJVU1RfYWRkOworKwkJQVNOMV9WSVNJQkxFU1RSSU5HX25ldzsKKysJCVg1MDlfYWxpYXNfc2V0MTsKKysJCUFTTjFfUFJJTlRBQkxFU1RSSU5HX2ZyZWU7CisrCQlFVlBfUEtFWV9nZXQxX0RTQTsKKysJCUFTTjFfQk1QU1RSSU5HX25ldzsKKysJCUFTTjFfbWJzdHJpbmdfY29weTsKKysJCUFTTjFfVVRGOFNUUklOR19uZXc7CisrCQlEU0FfZ2V0X2RlZmF1bHRfbWV0aG9kOworKwkJaTJkX0FTTjFfU0VUX09GX0FDQ0VTU19ERVNDUklQVElPTjsKKysJCUFTTjFfVDYxU1RSSU5HX2ZyZWU7CisrCQlEU0Ffc2V0X21ldGhvZDsKKysJCVg1MDlfZ2V0X2V4X2RhdGE7CisrCQlBU04xX1NUUklOR190eXBlOworKwkJWDUwOV9QVVJQT1NFX2dldF9ieV9zbmFtZTsKKysJCUFTTjFfVElNRV9mcmVlOworKwkJQVNOMV9PQ1RFVF9TVFJJTkdfY21wOworKwkJQVNOMV9CSVRfU1RSSU5HX25ldzsKKysJCVg1MDlfZ2V0X2V4dF9kMmk7CisrCQlQRU1fcmVhZF9iaW9fWDUwOV9BVVg7CisrCQlBU04xX1NUUklOR19zZXRfZGVmYXVsdF9tYXNrX2FzYzsKKysJCUFTTjFfU1RSSU5HX3NldF9kZWZfbWFza19hc2M7CisrCQlQRU1fd3JpdGVfYmlvX1JTQV9QVUJLRVk7CisrCQlBU04xX0lOVEVHRVJfY21wOworKwkJZDJpX1JTQV9QVUJLRVlfZnA7CisrCQlYNTA5X3RydXN0X3NldF9iaXRfYXNjOworKwkJUEVNX3dyaXRlX2Jpb19EU0FfUFVCS0VZOworKwkJWDUwOV9TVE9SRV9DVFhfZnJlZTsKKysJCUVWUF9QS0VZX3NldDFfRFNBOworKwkJaTJkX0RTQV9QVUJLRVlfZnA7CisrCQlYNTA5X2xvYWRfY2VydF9jcmxfZmlsZTsKKysJCUFTTjFfVElNRV9uZXc7CisrCQlpMmRfUlNBX1BVQktFWTsKKysJCVg1MDlfU1RPUkVfQ1RYX3B1cnBvc2VfaW5oZXJpdDsKKysJCVBFTV9yZWFkX1JTQV9QVUJLRVk7CisrCQlkMmlfWDUwOV9BVVg7CisrCQlpMmRfRFNBX1BVQktFWTsKKysJCVg1MDlfQ0VSVF9BVVhfcHJpbnQ7CisrCQlQRU1fcmVhZF9EU0FfUFVCS0VZOworKwkJaTJkX1JTQV9QVUJLRVlfYmlvOworKwkJQVNOMV9CSVRfU1RSSU5HX251bV9hc2M7CisrCQlpMmRfUFVCS0VZOworKwkJQVNOMV9VVENUSU1FX2ZyZWU7CisrCQlEU0Ffc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJWDUwOV9QVVJQT1NFX2dldF9ieV9pZDsKKysJCUFDQ0VTU19ERVNDUklQVElPTl9mcmVlOworKwkJUEVNX3JlYWRfYmlvX1BVQktFWTsKKysJCUFTTjFfU1RSSU5HX3NldF9ieV9OSUQ7CisrCQlYNTA5X1BVUlBPU0VfZ2V0X2lkOworKwkJRElTUExBWVRFWFRfZnJlZTsKKysJCU9USEVSTkFNRV9uZXc7CisrCQlYNTA5X0NFUlRfQVVYX25ldzsKKysJCVg1MDlfVFJVU1RfY2xlYW51cDsKKysJCVg1MDlfTkFNRV9hZGRfZW50cnlfYnlfT0JKOworKwkJWDUwOV9DUkxfZ2V0X2V4dF9kMmk7CisrCQlYNTA5X1BVUlBPU0VfZ2V0MF9uYW1lOworKwkJUEVNX3JlYWRfUFVCS0VZOworKwkJaTJkX0RTQV9QVUJLRVlfYmlvOworKwkJaTJkX09USEVSTkFNRTsKKysJCUFTTjFfT0NURVRfU1RSSU5HX2ZyZWU7CisrCQlBU04xX0JJVF9TVFJJTkdfc2V0X2FzYzsKKysJCVg1MDlfZ2V0X2V4X25ld19pbmRleDsKKysJCUFTTjFfU1RSSU5HX1RBQkxFX2NsZWFudXA7CisrCQlYNTA5X1RSVVNUX2dldF9ieV9pZDsKKysJCVg1MDlfUFVSUE9TRV9nZXRfdHJ1c3Q7CisrCQlBU04xX1NUUklOR19sZW5ndGg7CisrCQlkMmlfQVNOMV9TRVRfT0ZfQUNDRVNTX0RFU0NSSVBUSU9OOworKwkJQVNOMV9QUklOVEFCTEVTVFJJTkdfbmV3OworKwkJWDUwOVYzX2dldF9kMmk7CisrCQlBU04xX0VOVU1FUkFURURfZnJlZTsKKysJCWkyZF9YNTA5X0NFUlRfQVVYOworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X3RydXN0OworKwkJQVNOMV9TVFJJTkdfc2V0X2RlZmF1bHRfbWFzazsKKysJCVg1MDlfU1RPUkVfQ1RYX25ldzsKKysJCUVWUF9QS0VZX2dldDFfUlNBOworKwkJRElSRUNUT1JZU1RSSU5HX2ZyZWU7CisrCQlQRU1fd3JpdGVfWDUwOV9BVVg7CisrCQlBU04xX09DVEVUX1NUUklOR19zZXQ7CisrCQlkMmlfRFNBX1BVQktFWV9mcDsKKysJCWQyaV9SU0FfUFVCS0VZOworKwkJWDUwOV9UUlVTVF9nZXQwX25hbWU7CisrCQlYNTA5X1RSVVNUX2dldDA7CisrCQlBVVRIT1JJVFlfSU5GT19BQ0NFU1NfZnJlZTsKKysJCUFTTjFfSUE1U1RSSU5HX25ldzsKKysJCWQyaV9EU0FfUFVCS0VZOworKwkJWDUwOV9jaGVja19wdXJwb3NlOworKwkJQVNOMV9FTlVNRVJBVEVEX25ldzsKKysJCWQyaV9SU0FfUFVCS0VZX2JpbzsKKysJCWQyaV9QVUJLRVk7CisrCQlYNTA5X1RSVVNUX2dldF90cnVzdDsKKysJCVg1MDlfVFJVU1RfZ2V0X2ZsYWdzOworKwkJQVNOMV9CTVBTVFJJTkdfZnJlZTsKKysJCUFTTjFfVDYxU1RSSU5HX25ldzsKKysJCUFTTjFfVVRDVElNRV9uZXc7CisrCQlpMmRfQVVUSE9SSVRZX0lORk9fQUNDRVNTOworKwkJRVZQX1BLRVlfc2V0MV9SU0E7CisrCQlYNTA5X1NUT1JFX0NUWF9zZXRfcHVycG9zZTsKKysJCUFTTjFfSUE1U1RSSU5HX2ZyZWU7CisrCQlQRU1fd3JpdGVfYmlvX1g1MDlfQVVYOworKwkJWDUwOV9QVVJQT1NFX2dldF9jb3VudDsKKysJCUNSWVBUT19hZGRfaW5mbzsKKysJCVg1MDlfTkFNRV9FTlRSWV9jcmVhdGVfYnlfdHh0OworKwkJQVNOMV9TVFJJTkdfZ2V0X2RlZmF1bHRfbWFzazsKKysJCVg1MDlfYWxpYXNfZ2V0MDsKKysJCUFTTjFfU1RSSU5HX2RhdGE7CisrCQlpMmRfQUNDRVNTX0RFU0NSSVBUSU9OOworKwkJWDUwOV90cnVzdF9zZXRfYml0OworKwkJQVNOMV9CSVRfU1RSSU5HX2ZyZWU7CisrCQlQRU1fcmVhZF9iaW9fUlNBX1BVQktFWTsKKysJCVg1MDlfYWRkMV9yZWplY3Rfb2JqZWN0OworKwkJWDUwOV9jaGVja190cnVzdDsKKysJCVBFTV9yZWFkX2Jpb19EU0FfUFVCS0VZOworKwkJWDUwOV9QVVJQT1NFX2FkZDsKKysJCUFTTjFfU1RSSU5HX1RBQkxFX2dldDsKKysJCUFTTjFfVVRGOFNUUklOR19mcmVlOworKwkJZDJpX0RTQV9QVUJLRVlfYmlvOworKwkJUEVNX3dyaXRlX1JTQV9QVUJLRVk7CisrCQlkMmlfT1RIRVJOQU1FOworKwkJWDUwOV9yZWplY3Rfc2V0X2JpdDsKKysJCVBFTV93cml0ZV9EU0FfUFVCS0VZOworKwkJWDUwOV9QVVJQT1NFX2dldDBfc25hbWU7CisrCQlFVlBfUEtFWV9zZXQxX0RIOworKwkJQVNOMV9PQ1RFVF9TVFJJTkdfZHVwOworKwkJQVNOMV9CSVRfU1RSSU5HX3NldDsKKysJCVg1MDlfVFJVU1RfZ2V0X2NvdW50OworKwkJQVNOMV9JTlRFR0VSX2ZyZWU7CisrCQlPVEhFUk5BTUVfZnJlZTsKKysJCWkyZF9SU0FfUFVCS0VZX2ZwOworKwkJQVNOMV9JTlRFR0VSX2R1cDsKKysJCWQyaV9YNTA5X0NFUlRfQVVYOworKwkJUEVNX3dyaXRlX2Jpb19QVUJLRVk7CisrCQlBU04xX1ZJU0lCTEVTVFJJTkdfZnJlZTsKKysJCVg1MDlfUFVSUE9TRV9jbGVhbnVwOworKwkJQVNOMV9tYnN0cmluZ19uY29weTsKKysJCUFTTjFfR0VORVJBTElaRURUSU1FX25ldzsKKysJCUVWUF9QS0VZX2dldDFfREg7CisrCQlBU04xX09DVEVUX1NUUklOR19uZXc7CisrCQlBU04xX0lOVEVHRVJfbmV3OworKwkJaTJkX1g1MDlfQVVYOworKwkJQVNOMV9CSVRfU1RSSU5HX25hbWVfcHJpbnQ7CisrCQlYNTA5X2NtcDsKKysJCUFTTjFfU1RSSU5HX2xlbmd0aF9zZXQ7CisrCQlESVJFQ1RPUllTVFJJTkdfbmV3OworKwkJWDUwOV9hZGQxX3RydXN0X29iamVjdDsKKysJCVBLQ1MxMl9uZXdwYXNzOworKwkJU01JTUVfd3JpdGVfUEtDUzc7CisrCQlTTUlNRV9yZWFkX1BLQ1M3OworKwkJREVTX3NldF9rZXlfY2hlY2tlZDsKKysJCVBLQ1M3X3ZlcmlmeTsKKysJCVBLQ1M3X2VuY3J5cHQ7CisrCQlERVNfc2V0X2tleV91bmNoZWNrZWQ7CisrCQlTTUlNRV9jcmxmX2NvcHk7CisrCQlpMmRfQVNOMV9QUklOVEFCTEVTVFJJTkc7CisrCQlQS0NTN19nZXQwX3NpZ25lcnM7CisrCQlQS0NTN19kZWNyeXB0OworKwkJU01JTUVfdGV4dDsKKysJCVBLQ1M3X3NpbXBsZV9zbWltZWNhcDsKKysJCVBLQ1M3X2dldF9zbWltZWNhcDsKKysJCVBLQ1M3X3NpZ247CisrCQlQS0NTN19hZGRfYXR0cmliX3NtaW1lY2FwOworKwkJQ1JZUFRPX2RiZ19zZXRfb3B0aW9uczsKKysJCUNSWVBUT19yZW1vdmVfYWxsX2luZm87CisrCQlDUllQVE9fZ2V0X21lbV9kZWJ1Z19mdW5jdGlvbnM7CisrCQlDUllQVE9faXNfbWVtX2NoZWNrX29uOworKwkJQ1JZUFRPX3NldF9tZW1fZGVidWdfZnVuY3Rpb25zOworKwkJQ1JZUFRPX3BvcF9pbmZvOworKwkJQ1JZUFRPX3B1c2hfaW5mb187CisrCQlDUllQVE9fc2V0X21lbV9kZWJ1Z19vcHRpb25zOworKwkJUEVNX3dyaXRlX1BLQ1M4UHJpdmF0ZUtleV9uaWQ7CisrCQlQRU1fd3JpdGVfYmlvX1BLQ1M4UHJpdmF0ZUtleV9uaWQ7CisrCQlQRU1fd3JpdGVfYmlvX1BLQ1M4UHJpdktleV9uaWQ7CisrCQlkMmlfUEtDUzhQcml2YXRlS2V5X2JpbzsKKysJCUFTTjFfTlVMTF9mcmVlOworKwkJZDJpX0FTTjFfTlVMTDsKKysJCUFTTjFfTlVMTF9uZXc7CisrCQlpMmRfUEtDUzhQcml2YXRlS2V5X2JpbzsKKysJCWkyZF9QS0NTOFByaXZhdGVLZXlfZnA7CisrCQlpMmRfQVNOMV9OVUxMOworKwkJaTJkX1BLQ1M4UHJpdmF0ZUtleV9uaWRfZnA7CisrCQlkMmlfUEtDUzhQcml2YXRlS2V5X2ZwOworKwkJaTJkX1BLQ1M4UHJpdmF0ZUtleV9uaWRfYmlvOworKwkJaTJkX1BLQ1M4UHJpdmF0ZUtleUluZm9fZnA7CisrCQlpMmRfUEtDUzhQcml2YXRlS2V5SW5mb19iaW87CisrCQlQRU1fY2I7CisrCQlpMmRfUHJpdmF0ZUtleV9mcDsKKysJCWQyaV9Qcml2YXRlS2V5X2JpbzsKKysJCWQyaV9Qcml2YXRlS2V5X2ZwOworKwkJaTJkX1ByaXZhdGVLZXlfYmlvOworKwkJWDUwOV9yZWplY3RfY2xlYXI7CisrCQlYNTA5X1RSVVNUX3NldF9kZWZhdWx0OworKwkJZDJpX0F1dG9Qcml2YXRlS2V5OworKwkJWDUwOV9BVFRSSUJVVEVfZ2V0MF90eXBlOworKwkJWDUwOV9BVFRSSUJVVEVfc2V0MV9kYXRhOworKwkJWDUwOWF0X2dldF9hdHRyOworKwkJWDUwOWF0X2dldF9hdHRyX2NvdW50OworKwkJWDUwOV9BVFRSSUJVVEVfY3JlYXRlX2J5X05JRDsKKysJCVg1MDlfQVRUUklCVVRFX3NldDFfb2JqZWN0OworKwkJWDUwOV9BVFRSSUJVVEVfY291bnQ7CisrCQlYNTA5X0FUVFJJQlVURV9jcmVhdGVfYnlfT0JKOworKwkJWDUwOV9BVFRSSUJVVEVfZ2V0MF9vYmplY3Q7CisrCQlYNTA5YXRfZ2V0X2F0dHJfYnlfTklEOworKwkJWDUwOWF0X2FkZDFfYXR0cjsKKysJCVg1MDlfQVRUUklCVVRFX2dldDBfZGF0YTsKKysJCVg1MDlhdF9kZWxldGVfYXR0cjsKKysJCVg1MDlhdF9nZXRfYXR0cl9ieV9PQko7CisrCQlSQU5EX2FkZDsKKysJCUJJT19udW1iZXJfd3JpdHRlbjsKKysJCUJJT19udW1iZXJfcmVhZDsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDFfY2hhaW47CisrCQlFUlJfbG9hZF9SQU5EX3N0cmluZ3M7CisrCQlSQU5EX3BzZXVkb19ieXRlczsKKysJCVg1MDlfUkVRX2dldF9hdHRyX2J5X05JRDsKKysJCVg1MDlfUkVRX2dldF9hdHRyOworKwkJWDUwOV9SRVFfYWRkMV9hdHRyX2J5X05JRDsKKysJCVg1MDlfUkVRX2dldF9hdHRyX2J5X09CSjsKKysJCVg1MDlhdF9hZGQxX2F0dHJfYnlfTklEOworKwkJWDUwOV9SRVFfYWRkMV9hdHRyX2J5X09CSjsKKysJCVg1MDlfUkVRX2dldF9hdHRyX2NvdW50OworKwkJWDUwOV9SRVFfYWRkMV9hdHRyOworKwkJWDUwOV9SRVFfZGVsZXRlX2F0dHI7CisrCQlYNTA5YXRfYWRkMV9hdHRyX2J5X09CSjsKKysJCVg1MDlfUkVRX2FkZDFfYXR0cl9ieV90eHQ7CisrCQlYNTA5X0FUVFJJQlVURV9jcmVhdGVfYnlfdHh0OworKwkJWDUwOWF0X2FkZDFfYXR0cl9ieV90eHQ7CisrCQlCTl9wc2V1ZG9fcmFuZDsKKysJCUJOX2lzX3ByaW1lX2Zhc3R0ZXN0OworKwkJQk5fQ1RYX2VuZDsKKysJCUJOX0NUWF9zdGFydDsKKysJCUJOX0NUWF9nZXQ7CisrCQlFVlBfUEtFWTJQS0NTOF9icm9rZW47CisrCQlBU04xX1NUUklOR19UQUJMRV9hZGQ7CisrCQlDUllQVE9fZGJnX2dldF9vcHRpb25zOworKwkJQVVUSE9SSVRZX0lORk9fQUNDRVNTX25ldzsKKysJCUNSWVBUT19nZXRfbWVtX2RlYnVnX29wdGlvbnM7CisrCQlERVNfY3J5cHQ7CisrCQlQRU1fd3JpdGVfYmlvX1g1MDlfUkVRX05FVzsKKysJCVBFTV93cml0ZV9YNTA5X1JFUV9ORVc7CisrCQlCSU9fY2FsbGJhY2tfY3RybDsKKysJCVJBTkRfZWdkOworKwkJUkFORF9zdGF0dXM7CisrCQlibl9kdW1wMTsKKysJCURFU19jaGVja19rZXlfcGFyaXR5OworKwkJbGhfbnVtX2l0ZW1zOworKwkJUkFORF9ldmVudDsKKysJCURTT19uZXc7CisrCQlEU09fbmV3X21ldGhvZDsKKysJCURTT19mcmVlOworKwkJRFNPX2ZsYWdzOworKwkJRFNPX3VwOworKwkJRFNPX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCURTT19nZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlEU09fZ2V0X21ldGhvZDsKKysJCURTT19zZXRfbWV0aG9kOworKwkJRFNPX2xvYWQ7CisrCQlEU09fYmluZF92YXI7CisrCQlEU09fTUVUSE9EX251bGw7CisrCQlEU09fTUVUSE9EX29wZW5zc2w7CisrCQlEU09fTUVUSE9EX2RsZmNuOworKwkJRFNPX01FVEhPRF93aW4zMjsKKysJCUVSUl9sb2FkX0RTT19zdHJpbmdzOworKwkJRFNPX01FVEhPRF9kbDsKKysJCU5DT05GX2xvYWQ7CisrCQlOQ09ORl9sb2FkX2ZwOworKwkJTkNPTkZfbmV3OworKwkJTkNPTkZfZ2V0X3N0cmluZzsKKysJCU5DT05GX2ZyZWU7CisrCQlOQ09ORl9nZXRfbnVtYmVyOworKwkJQ09ORl9kdW1wX2ZwOworKwkJTkNPTkZfbG9hZF9iaW87CisrCQlOQ09ORl9kdW1wX2ZwOworKwkJTkNPTkZfZ2V0X3NlY3Rpb247CisrCQlOQ09ORl9kdW1wX2JpbzsKKysJCUNPTkZfZHVtcF9iaW87CisrCQlOQ09ORl9mcmVlX2RhdGE7CisrCQlDT05GX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCUVSUl9lcnJvcl9zdHJpbmdfbjsKKysJCUJJT19zbnByaW50ZjsKKysJCURTT19jdHJsOworKwkJaTJkX0FTTjFfU0VUX09GX0FTTjFfSU5URUdFUjsKKysJCWkyZF9BU04xX1NFVF9PRl9QS0NTMTJfU0FGRUJBRzsKKysJCWkyZF9BU04xX1NFVF9PRl9QS0NTNzsKKysJCUJJT192ZnJlZTsKKysJCWQyaV9BU04xX1NFVF9PRl9BU04xX0lOVEVHRVI7CisrCQlkMmlfQVNOMV9TRVRfT0ZfUEtDUzEyX1NBRkVCQUc7CisrCQlBU04xX1VUQ1RJTUVfZ2V0OworKwkJWDUwOV9SRVFfZGlnZXN0OworKwkJWDUwOV9DUkxfZGlnZXN0OworKwkJZDJpX0FTTjFfU0VUX09GX1BLQ1M3OworKwkJRVZQX0NJUEhFUl9DVFhfc2V0X2tleV9sZW5ndGg7CisrCQlFVlBfQ0lQSEVSX0NUWF9jdHJsOworKwkJQk5fbW9kX2V4cF9tb250X3dvcmQ7CisrCQlSQU5EX2VnZF9ieXRlczsKKysJCVg1MDlfUkVRX2dldDFfZW1haWw7CisrCQlYNTA5X2dldDFfZW1haWw7CisrCQlYNTA5X2VtYWlsX2ZyZWU7CisrCQlpMmRfUlNBX05FVDsKKysJCWQyaV9SU0FfTkVUXzI7CisrCQlkMmlfUlNBX05FVDsKKysJCURTT19iaW5kX2Z1bmM7CisrCQlDUllQVE9fZ2V0X25ld19keW5sb2NraWQ7CisrCQlza19uZXdfbnVsbDsKKysJCUNSWVBUT19zZXRfZHlubG9ja19kZXN0cm95X2NhbGxiYWNrOworKwkJQ1JZUFRPX3NldF9keW5sb2NrX2Rlc3Ryb3lfY2I7CisrCQlDUllQVE9fZGVzdHJveV9keW5sb2NraWQ7CisrCQlDUllQVE9fc2V0X2R5bmxvY2tfc2l6ZTsKKysJCUNSWVBUT19zZXRfZHlubG9ja19jcmVhdGVfY2FsbGJhY2s7CisrCQlDUllQVE9fc2V0X2R5bmxvY2tfY3JlYXRlX2NiOworKwkJQ1JZUFRPX3NldF9keW5sb2NrX2xvY2tfY2FsbGJhY2s7CisrCQlDUllQVE9fc2V0X2R5bmxvY2tfbG9ja19jYjsKKysJCUNSWVBUT19nZXRfZHlubG9ja19sb2NrX2NhbGxiYWNrOworKwkJQ1JZUFRPX2dldF9keW5sb2NrX2xvY2tfY2I7CisrCQlDUllQVE9fZ2V0X2R5bmxvY2tfZGVzdHJveV9jYWxsYmFjazsKKysJCUNSWVBUT19nZXRfZHlubG9ja19kZXN0cm95X2NiOworKwkJQ1JZUFRPX2dldF9keW5sb2NrX3ZhbHVlOworKwkJQ1JZUFRPX2dldF9keW5sb2NrX2NyZWF0ZV9jYWxsYmFjazsKKysJCUNSWVBUT19nZXRfZHlubG9ja19jcmVhdGVfY2I7CisrCQljMmlfQVNOMV9CSVRfU1RSSU5HOworKwkJaTJjX0FTTjFfQklUX1NUUklORzsKKysJCVJBTkRfcG9sbDsKKysJCWMyaV9BU04xX0lOVEVHRVI7CisrCQlpMmNfQVNOMV9JTlRFR0VSOworKwkJQklPX2R1bXBfaW5kZW50OworKwkJQVNOMV9wYXJzZV9kdW1wOworKwkJYzJpX0FTTjFfT0JKRUNUOworKwkJWDUwOV9OQU1FX3ByaW50X2V4X2ZwOworKwkJQVNOMV9TVFJJTkdfcHJpbnRfZXhfZnA7CisrCQlYNTA5X05BTUVfcHJpbnRfZXg7CisrCQlBU04xX1NUUklOR19wcmludF9leDsKKysJCU1ENDsKKysJCU1ENF9UcmFuc2Zvcm07CisrCQlNRDRfRmluYWw7CisrCQlNRDRfVXBkYXRlOworKwkJTUQ0X0luaXQ7CisrCQlFVlBfbWQ0OworKwkJaTJkX1BVQktFWV9iaW87CisrCQlpMmRfUFVCS0VZX2ZwOworKwkJZDJpX1BVQktFWV9iaW87CisrCQlBU04xX1NUUklOR190b19VVEY4OworKwkJQklPX3ZwcmludGY7CisrCQlCSU9fdnNucHJpbnRmOworKwkJZDJpX1BVQktFWV9mcDsKKysJCVg1MDlfY21wX3RpbWU7CisrCQlYNTA5X1NUT1JFX0NUWF9zZXRfdGltZTsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDFfaXNzdWVyOworKwkJWDUwOV9PQkpFQ1RfcmV0cmlldmVfbWF0Y2g7CisrCQlYNTA5X09CSkVDVF9pZHhfYnlfc3ViamVjdDsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF9mbGFnczsKKysJCVg1MDlfU1RPUkVfQ1RYX3RydXN0ZWRfc3RhY2s7CisrCQlYNTA5X3RpbWVfYWRqOworKwkJWDUwOV9jaGVja19pc3N1ZWQ7CisrCQlBU04xX1VUQ1RJTUVfY21wX3RpbWVfdDsKKysJCURFU19zZXRfd2Vha19rZXlfZmxhZzsKKysJCURFU19jaGVja19rZXk7CisrCQlERVNfcndfbW9kZTsKKysJCVJTQV9QS0NTMV9SU0FyZWY7CisrCQlYNTA5X2tleWlkX3NldDE7CisrCQlCSU9fbmV4dDsKKysJCURTT19NRVRIT0Rfdm1zOworKwkJQklPX2ZfbGluZWJ1ZmZlcjsKKysJCUJOX2JudGVzdF9yYW5kOworKwkJT1BFTlNTTF9pc3NldHVnaWQ7CisrCQlCTl9yYW5kX3JhbmdlOworKwkJRVJSX2xvYWRfRU5HSU5FX3N0cmluZ3M7CisrCQlFTkdJTkVfc2V0X0RTQTsKKysJCUVOR0lORV9nZXRfZmluaXNoX2Z1bmN0aW9uOworKwkJRU5HSU5FX2dldF9kZWZhdWx0X1JTQTsKKysJCUVOR0lORV9nZXRfQk5fbW9kX2V4cDsKKysJCURTQV9nZXRfZGVmYXVsdF9vcGVuc3NsX21ldGhvZDsKKysJCUVOR0lORV9zZXRfREg7CisrCQlFTkdJTkVfc2V0X2RlZl9CTl9tb2RfZXhwX2NydDsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9CTl9tb2RfZXhwX2NydDsKKysJCUVOR0lORV9pbml0OworKwkJREhfZ2V0X2RlZmF1bHRfb3BlbnNzbF9tZXRob2Q7CisrCQlSU0Ffc2V0X2RlZmF1bHRfb3BlbnNzbF9tZXRob2Q7CisrCQlFTkdJTkVfZmluaXNoOworKwkJRU5HSU5FX2xvYWRfcHVibGljX2tleTsKKysJCUVOR0lORV9nZXRfREg7CisrCQlFTkdJTkVfY3RybDsKKysJCUVOR0lORV9nZXRfaW5pdF9mdW5jdGlvbjsKKysJCUVOR0lORV9zZXRfaW5pdF9mdW5jdGlvbjsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9EU0E7CisrCQlFTkdJTkVfZ2V0X25hbWU7CisrCQlFTkdJTkVfZ2V0X2xhc3Q7CisrCQlFTkdJTkVfZ2V0X3ByZXY7CisrCQlFTkdJTkVfZ2V0X2RlZmF1bHRfREg7CisrCQlFTkdJTkVfZ2V0X1JTQTsKKysJCUVOR0lORV9zZXRfZGVmYXVsdDsKKysJCUVOR0lORV9nZXRfUkFORDsKKysJCUVOR0lORV9nZXRfZmlyc3Q7CisrCQlFTkdJTkVfYnlfaWQ7CisrCQlFTkdJTkVfc2V0X2ZpbmlzaF9mdW5jdGlvbjsKKysJCUVOR0lORV9nZXRfZGVmX0JOX21vZF9leHBfY3J0OworKwkJRU5HSU5FX2dldF9kZWZhdWx0X0JOX21vZF9leHBfY3J0OworKwkJUlNBX2dldF9kZWZhdWx0X29wZW5zc2xfbWV0aG9kOworKwkJRU5HSU5FX3NldF9SU0E7CisrCQlFTkdJTkVfbG9hZF9wcml2YXRlX2tleTsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9SQU5EOworKwkJRU5HSU5FX3NldF9CTl9tb2RfZXhwOworKwkJRU5HSU5FX3JlbW92ZTsKKysJCUVOR0lORV9mcmVlOworKwkJRU5HSU5FX2dldF9CTl9tb2RfZXhwX2NydDsKKysJCUVOR0lORV9nZXRfbmV4dDsKKysJCUVOR0lORV9zZXRfbmFtZTsKKysJCUVOR0lORV9nZXRfZGVmYXVsdF9EU0E7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfQk5fbW9kX2V4cDsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9SU0E7CisrCQlFTkdJTkVfZ2V0X2RlZmF1bHRfUkFORDsKKysJCUVOR0lORV9nZXRfZGVmYXVsdF9CTl9tb2RfZXhwOworKwkJRU5HSU5FX3NldF9SQU5EOworKwkJRU5HSU5FX3NldF9pZDsKKysJCUVOR0lORV9zZXRfQk5fbW9kX2V4cF9jcnQ7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfREg7CisrCQlFTkdJTkVfbmV3OworKwkJRU5HSU5FX2dldF9pZDsKKysJCURTQV9zZXRfZGVmYXVsdF9vcGVuc3NsX21ldGhvZDsKKysJCUVOR0lORV9hZGQ7CisrCQlESF9zZXRfZGVmYXVsdF9vcGVuc3NsX21ldGhvZDsKKysJCUVOR0lORV9nZXRfRFNBOworKwkJRU5HSU5FX2dldF9jdHJsX2Z1bmN0aW9uOworKwkJRU5HSU5FX3NldF9jdHJsX2Z1bmN0aW9uOworKwkJQk5fcHNldWRvX3JhbmRfcmFuZ2U7CisrCQlYNTA5X1NUT1JFX0NUWF9zZXRfdmVyaWZ5X2NiOworKwkJRVJSX2xvYWRfQ09NUF9zdHJpbmdzOworKwkJUEtDUzEyX2l0ZW1fZGVjcnlwdF9kMmk7CisrCQlBU04xX1VURjhTVFJJTkdfaXQ7CisrCQlFTkdJTkVfdW5yZWdpc3Rlcl9jaXBoZXJzOworKwkJRU5HSU5FX2dldF9jaXBoZXJzOworKwkJZDJpX09DU1BfQkFTSUNSRVNQOworKwkJS1JCNV9DSEVDS1NVTV9pdDsKKysJCUVDX1BPSU5UX2FkZDsKKysJCUFTTjFfaXRlbV9leF9pMmQ7CisrCQlPQ1NQX0NFUlRJRF9pdDsKKysJCWQyaV9PQ1NQX1JFU1BCWVRFUzsKKysJCVg1MDlWM19hZGQxX2kyZDsKKysJCVBLQ1M3X0VOVkVMT1BFX2l0OworKwkJVUlfYWRkX2lucHV0X2Jvb2xlYW47CisrCQlFTkdJTkVfdW5yZWdpc3Rlcl9SU0E7CisrCQlYNTA5VjNfRVhUX25jb25mOworKwkJQVNOMV9HRU5FUkFMU1RSSU5HX2ZyZWU7CisrCQlkMmlfT0NTUF9DRVJUU1RBVFVTOworKwkJWDUwOV9SRVZPS0VEX3NldF9zZXJpYWxOdW1iZXI7CisrCQlYNTA5X3ByaW50X2V4OworKwkJT0NTUF9PTkVSRVFfZ2V0MV9leHRfZDJpOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9SQU5EOworKwkJRU5HSU5FX2xvYWRfZHluYW1pYzsKKysJCVBCS0RGMlBBUkFNX2l0OworKwkJRVhURU5ERURfS0VZX1VTQUdFX25ldzsKKysJCUVDX0dST1VQX2NsZWFyX2ZyZWU7CisrCQlPQ1NQX3NlbmRyZXFfYmlvOworKwkJQVNOMV9pdGVtX2RpZ2VzdDsKKysJCU9DU1BfQkFTSUNSRVNQX2RlbGV0ZV9leHQ7CisrCQlPQ1NQX1NJR05BVFVSRV9pdDsKKysJCVg1MDlfQ1JMX2l0OworKwkJT0NTUF9CQVNJQ1JFU1BfYWRkX2V4dDsKKysJCUtSQjVfRU5DS0VZX2l0OworKwkJVUlfbWV0aG9kX3NldF9jbG9zZXI7CisrCQlYNTA5X1NUT1JFX3NldF9wdXJwb3NlOworKwkJaTJkX0FTTjFfR0VORVJBTFNUUklORzsKKysJCU9DU1BfcmVzcG9uc2Vfc3RhdHVzOworKwkJaTJkX09DU1BfU0VSVklDRUxPQzsKKysJCUVOR0lORV9nZXRfZGlnZXN0X2VuZ2luZTsKKysJCUVDX0dST1VQX3NldF9jdXJ2ZV9HRnA7CisrCQlPQ1NQX1JFUVVFU1RfZ2V0X2V4dF9ieV9PQko7CisrCQlfb3NzbF9vbGRfZGVzX3JhbmRvbV9rZXk7CisrCQlBU04xX1Q2MVNUUklOR19pdDsKKysJCUVDX0dST1VQX21ldGhvZF9vZjsKKysJCWkyZF9LUkI1X0FQUkVROworKwkJX29zc2xfb2xkX2Rlc19lbmNyeXB0OworKwkJQVNOMV9QUklOVEFCTEVfbmV3OworKwkJSE1BQ19Jbml0X2V4OworKwkJZDJpX0tSQjVfQVVUSEVOVDsKKysJCU9DU1BfYXJjaGl2ZV9jdXRvZmZfbmV3OworKwkJRUNfUE9JTlRfc2V0X0pwcm9qZWN0aXZlX2Nvb3JkaW5hdGVzX0dGcDsKKysJCUVDX1BPSU5UX3NldF9KcHJval9jb29yZHNfR0ZwOworKwkJX29zc2xfb2xkX2Rlc19pc193ZWFrX2tleTsKKysJCU9DU1BfQkFTSUNSRVNQX2dldF9leHRfYnlfT0JKOworKwkJRUNfUE9JTlRfb2N0MnBvaW50OworKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHRfY291bnQ7CisrCQlVSV9jdHJsOworKwkJX3NoYWRvd19ERVNfcndfbW9kZTsKKysJCWFzbjFfZG9fYWRiOworKwkJQVNOMV90ZW1wbGF0ZV9pMmQ7CisrCQlFTkdJTkVfcmVnaXN0ZXJfREg7CisrCQlVSV9jb25zdHJ1Y3RfcHJvbXB0OworKwkJWDUwOV9TVE9SRV9zZXRfdHJ1c3Q7CisrCQlVSV9kdXBfaW5wdXRfc3RyaW5nOworKwkJZDJpX0tSQjVfQVBSRVE7CisrCQlFVlBfTURfQ1RYX2NvcHlfZXg7CisrCQlPQ1NQX3JlcXVlc3RfaXNfc2lnbmVkOworKwkJaTJkX09DU1BfUkVRSU5GTzsKKysJCUtSQjVfRU5DS0VZX2ZyZWU7CisrCQlPQ1NQX3Jlc3BfZ2V0MDsKKysJCUdFTkVSQUxfTkFNRV9pdDsKKysJCUFTTjFfR0VORVJBTElaRURUSU1FX2l0OworKwkJWDUwOV9TVE9SRV9zZXRfZmxhZ3M7CisrCQlFQ19QT0lOVF9zZXRfY29tcHJlc3NlZF9jb29yZGluYXRlc19HRnA7CisrCQlFQ19QT0lOVF9zZXRfY29tcHJfY29vcmRzX0dGcDsKKysJCU9DU1BfcmVzcG9uc2Vfc3RhdHVzX3N0cjsKKysJCWQyaV9PQ1NQX1JFVk9LRURJTkZPOworKwkJT0NTUF9iYXNpY19hZGQxX2NlcnQ7CisrCQlFUlJfZ2V0X2ltcGxlbWVudGF0aW9uOworKwkJRVZQX0NpcGhlckZpbmFsX2V4OworKwkJT0NTUF9DRVJUU1RBVFVTX25ldzsKKysJCUNSWVBUT19jbGVhbnVwX2FsbF9leF9kYXRhOworKwkJT0NTUF9yZXNwX2ZpbmQ7CisrCQlCTl9ubm1vZDsKKysJCVg1MDlfQ1JMX3NvcnQ7CisrCQlYNTA5X1JFVk9LRURfc2V0X3Jldm9jYXRpb25EYXRlOworKwkJRU5HSU5FX3JlZ2lzdGVyX1JBTkQ7CisrCQlPQ1NQX1NFUlZJQ0VMT0NfbmV3OworKwkJRUNfUE9JTlRfc2V0X2FmZmluZV9jb29yZGluYXRlc19HRnA7CisrCQlFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3Jkc19HRnA7CisrCQlfb3NzbF9vbGRfZGVzX29wdGlvbnM7CisrCQlTWE5FVF9pdDsKKysJCVVJX2R1cF9pbnB1dF9ib29sZWFuOworKwkJUEtDUzEyX2FkZF9DU1BOYW1lX2FzYzsKKysJCUVDX1BPSU5UX2lzX2F0X2luZmluaXR5OworKwkJRU5HSU5FX2xvYWRfY3J5cHRvZGV2OworKwkJRFNPX2NvbnZlcnRfZmlsZW5hbWU7CisrCQlQT0xJQ1lRVUFMSU5GT19pdDsKKysJCUVOR0lORV9yZWdpc3Rlcl9jaXBoZXJzOworKwkJQk5fbW9kX2xzaGlmdF9xdWljazsKKysJCURTT19zZXRfZmlsZW5hbWU7CisrCQlBU04xX2l0ZW1fZnJlZTsKKysJCUtSQjVfVEtUQk9EWV9mcmVlOworKwkJQVVUSE9SSVRZX0tFWUlEX2l0OworKwkJS1JCNV9BUFJFUUJPRFlfbmV3OworKwkJWDUwOVYzX0VYVF9SRVFfYWRkX25jb25mOworKwkJRU5HSU5FX2N0cmxfY21kX3N0cmluZzsKKysJCWkyZF9PQ1NQX1JFU1BEQVRBOworKwkJRVZQX01EX0NUWF9pbml0OworKwkJRVhURU5ERURfS0VZX1VTQUdFX2ZyZWU7CisrCQlQS0NTN19BVFRSX1NJR05faXQ7CisrCQlVSV9hZGRfZXJyb3Jfc3RyaW5nOworKwkJS1JCNV9DSEVDS1NVTV9mcmVlOworKwkJT0NTUF9SRVFVRVNUX2dldF9leHQ7CisrCQlFTkdJTkVfbG9hZF91YnNlYzsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfZGlnZXN0czsKKysJCVBLRVlfVVNBR0VfUEVSSU9EX2l0OworKwkJUEtDUzEyX3VucGFja19hdXRoc2FmZXM7CisrCQlBU04xX2l0ZW1fdW5wYWNrOworKwkJTkVUU0NBUEVfU1BLQUNfaXQ7CisrCQlYNTA5X1JFVk9LRURfaXQ7CisrCQlBU04xX1NUUklOR19lbmNvZGU7CisrCQlFVlBfYWVzXzEyOF9lY2I7CisrCQlLUkI1X0FVVEhFTlRfZnJlZTsKKysJCU9DU1BfQkFTSUNSRVNQX2dldF9leHRfYnlfY3JpdGljYWw7CisrCQlPQ1NQX0JBU0lDUkVTUF9nZXRfZXh0X2J5X2NyaXQ7CisrCQlPQ1NQX2NlcnRfc3RhdHVzX3N0cjsKKysJCWQyaV9PQ1NQX1JFUVVFU1Q7CisrCQlVSV9kdXBfaW5mb19zdHJpbmc7CisrCQlfb3NzbF9vbGRfZGVzX3h3aGl0ZV9pbjJvdXQ7CisrCQlQS0NTMTJfaXQ7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZ2V0X2V4dF9ieV9jcml0aWNhbDsKKysJCU9DU1BfU0lOR0xFUkVTUF9nZXRfZXh0X2J5X2NyaXQ7CisrCQlPQ1NQX0NFUlRTVEFUVVNfZnJlZTsKKysJCV9vc3NsX29sZF9kZXNfY3J5cHQ7CisrCQlBU04xX2l0ZW1faTJkOworKwkJRVZQX0RlY3J5cHRGaW5hbF9leDsKKysJCUVOR0lORV9sb2FkX29wZW5zc2w7CisrCQlFTkdJTkVfZ2V0X2NtZF9kZWZuczsKKysJCUVOR0lORV9zZXRfbG9hZF9wcml2a2V5X2Z1bmN0aW9uOworKwkJRU5HSU5FX3NldF9sb2FkX3ByaXZrZXlfZm47CisrCQlFVlBfRW5jcnlwdEZpbmFsX2V4OworKwkJRU5HSU5FX3NldF9kZWZhdWx0X2RpZ2VzdHM7CisrCQlYNTA5X2dldDBfcHVia2V5X2JpdHN0cjsKKysJCWFzbjFfZXhfaTJjOworKwkJRU5HSU5FX3JlZ2lzdGVyX1JTQTsKKysJCUVOR0lORV91bnJlZ2lzdGVyX0RTQTsKKysJCV9vc3NsX29sZF9kZXNfa2V5X3NjaGVkOworKwkJWDUwOV9FWFRFTlNJT05faXQ7CisrCQlpMmRfS1JCNV9BVVRIRU5UOworKwkJU1hORVRJRF9pdDsKKysJCWQyaV9PQ1NQX1NJTkdMRVJFU1A7CisrCQlFRElQQVJUWU5BTUVfbmV3OworKwkJUEtDUzEyX2NlcnRiYWcyeDUwOTsKKysJCV9vc3NsX29sZF9kZXNfb2ZiNjRfZW5jcnlwdDsKKysJCWQyaV9FWFRFTkRFRF9LRVlfVVNBR0U7CisrCQlFUlJfcHJpbnRfZXJyb3JzX2NiOworKwkJRU5HSU5FX3NldF9jaXBoZXJzOworKwkJZDJpX0tSQjVfQVBSRVFCT0RZOworKwkJVUlfbWV0aG9kX2dldF9mbHVzaGVyOworKwkJWDUwOV9QVUJLRVlfaXQ7CisrCQlfb3NzbF9vbGRfZGVzX2VuY19yZWFkOworKwkJUEtDUzdfRU5DUllQVF9pdDsKKysJCWkyZF9PQ1NQX1JFU1BPTlNFOworKwkJRUNfR1JPVVBfZ2V0X2NvZmFjdG9yOworKwkJUEtDUzEyX3VucGFja19wN2RhdGE7CisrCQlkMmlfS1JCNV9BVVRIREFUQTsKKysJCU9DU1BfY29weV9ub25jZTsKKysJCUtSQjVfQVVUSERBVEFfbmV3OworKwkJT0NTUF9SRVNQREFUQV9uZXc7CisrCQlFQ19HRnBfbW9udF9tZXRob2Q7CisrCQlPQ1NQX1JFVk9LRURJTkZPX2ZyZWU7CisrCQlVSV9nZXRfZXhfZGF0YTsKKysJCUtSQjVfQVBSRVFCT0RZX2ZyZWU7CisrCQlFQ19HUk9VUF9nZXQwX2dlbmVyYXRvcjsKKysJCVVJX2dldF9kZWZhdWx0X21ldGhvZDsKKysJCVg1MDlWM19zZXRfbmNvbmY7CisrCQlQS0NTMTJfaXRlbV9pMmRfZW5jcnlwdDsKKysJCVg1MDlfYWRkMV9leHRfaTJkOworKwkJUEtDUzdfU0lHTkVSX0lORk9faXQ7CisrCQlLUkI1X1BSSU5DTkFNRV9uZXc7CisrCQlQS0NTMTJfU0FGRUJBR19pdDsKKysJCUVDX0dST1VQX2dldF9vcmRlcjsKKysJCWQyaV9PQ1NQX1JFU1BJRDsKKysJCU9DU1BfcmVxdWVzdF92ZXJpZnk7CisrCQlOQ09ORl9nZXRfbnVtYmVyX2U7CisrCQlfb3NzbF9vbGRfZGVzX2RlY3J5cHQzOworKwkJWDUwOV9zaWduYXR1cmVfcHJpbnQ7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZnJlZTsKKysJCUVOR0lORV9sb2FkX2J1aWx0aW5fZW5naW5lczsKKysJCWkyZF9PQ1NQX09ORVJFUTsKKysJCU9DU1BfUkVRVUVTVF9hZGRfZXh0OworKwkJT0NTUF9SRVNQQllURVNfbmV3OworKwkJRVZQX01EX0NUWF9jcmVhdGU7CisrCQlPQ1NQX3Jlc3BfZmluZF9zdGF0dXM7CisrCQlYNTA5X0FMR09SX2l0OworKwkJQVNOMV9USU1FX2l0OworKwkJT0NTUF9yZXF1ZXN0X3NldDFfbmFtZTsKKysJCU9DU1BfT05FUkVRX2dldF9leHRfY291bnQ7CisrCQlVSV9nZXQwX3Jlc3VsdDsKKysJCVBLQ1MxMl9BVVRIU0FGRVNfaXQ7CisrCQlFVlBfYWVzXzI1Nl9lY2I7CisrCQlQS0NTMTJfcGFja19hdXRoc2FmZXM7CisrCQlBU04xX0lBNVNUUklOR19pdDsKKysJCVVJX2dldF9pbnB1dF9mbGFnczsKKysJCUVDX0dST1VQX3NldF9nZW5lcmF0b3I7CisrCQlfb3NzbF9vbGRfZGVzX3N0cmluZ190b18ya2V5czsKKysJCU9DU1BfQ0VSVElEX2ZyZWU7CisrCQlYNTA5X0NFUlRfQVVYX2l0OworKwkJQ0VSVElGSUNBVEVQT0xJQ0lFU19pdDsKKysJCV9vc3NsX29sZF9kZXNfZWRlM19jYmNfZW5jcnlwdDsKKysJCVJBTkRfc2V0X3JhbmRfZW5naW5lOworKwkJRFNPX2dldF9sb2FkZWRfZmlsZW5hbWU7CisrCQlYNTA5X0FUVFJJQlVURV9pdDsKKysJCU9DU1BfT05FUkVRX2dldF9leHRfYnlfTklEOworKwkJUEtDUzEyX2RlY3J5cHRfc2tleTsKKysJCUtSQjVfQVVUSEVOVF9pdDsKKysJCVVJX2R1cF9lcnJvcl9zdHJpbmc7CisrCQlSU0FQdWJsaWNLZXlfaXQ7CisrCQlpMmRfT0NTUF9SRVFVRVNUOworKwkJUEtDUzEyX3g1MDljcmwyY2VydGJhZzsKKysJCU9DU1BfU0VSVklDRUxPQ19pdDsKKysJCUFTTjFfaXRlbV9zaWduOworKwkJWDUwOV9DUkxfc2V0X2lzc3Vlcl9uYW1lOworKwkJT0JKX05BTUVfZG9fYWxsX3NvcnRlZDsKKysJCWkyZF9PQ1NQX0JBU0lDUkVTUDsKKysJCWkyZF9PQ1NQX1JFU1BCWVRFUzsKKysJCVBLQ1MxMl91bnBhY2tfcDdlbmNkYXRhOworKwkJSE1BQ19DVFhfaW5pdDsKKysJCUVOR0lORV9nZXRfZGlnZXN0OworKwkJT0NTUF9SRVNQT05TRV9wcmludDsKKysJCUtSQjVfVEtUQk9EWV9pdDsKKysJCUFDQ0VTU19ERVNDUklQVElPTl9pdDsKKysJCVBLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMX2l0OworKwkJUEJFMlBBUkFNX2l0OworKwkJUEtDUzEyX2NlcnRiYWcyeDUwOWNybDsKKysJCVBLQ1M3X1NJR05FRF9pdDsKKysJCUVOR0lORV9nZXRfY2lwaGVyOworKwkJaTJkX09DU1BfQ1JMSUQ7CisrCQlPQ1NQX1NJTkdMRVJFU1BfbmV3OworKwkJRU5HSU5FX2NtZF9pc19leGVjdXRhYmxlOworKwkJUlNBX3VwX3JlZjsKKysJCUFTTjFfR0VORVJBTFNUUklOR19pdDsKKysJCUVOR0lORV9yZWdpc3Rlcl9EU0E7CisrCQlYNTA5VjNfRVhUX2FkZF9uY29uZl9zazsKKysJCUVOR0lORV9zZXRfbG9hZF9wdWJrZXlfZnVuY3Rpb247CisrCQlQS0NTOF9kZWNyeXB0OworKwkJUEVNX2J5dGVzX3JlYWRfYmlvOworKwkJRElSRUNUT1JZU1RSSU5HX2l0OworKwkJZDJpX09DU1BfQ1JMSUQ7CisrCQlFQ19QT0lOVF9pc19vbl9jdXJ2ZTsKKysJCUNSWVBUT19zZXRfbG9ja2VkX21lbV9leF9mdW5jdGlvbnM7CisrCQlDUllQVE9fc2V0X2xvY2tlZF9tZW1fZXhfZnVuY3M7CisrCQlkMmlfS1JCNV9DSEVDS1NVTTsKKysJCUFTTjFfaXRlbV9kdXA7CisrCQlYNTA5X2l0OworKwkJQk5fbW9kX2FkZDsKKysJCUtSQjVfQVVUSERBVEFfZnJlZTsKKysJCV9vc3NsX29sZF9kZXNfY2JjX2Nrc3VtOworKwkJQVNOMV9pdGVtX3ZlcmlmeTsKKysJCUNSWVBUT19zZXRfbWVtX2V4X2Z1bmN0aW9uczsKKysJCUVDX1BPSU5UX2dldF9KcHJvamVjdGl2ZV9jb29yZGluYXRlc19HRnA7CisrCQlFQ19QT0lOVF9nZXRfSnByb2pfY29vcmRzX0dGcDsKKysJCVpMT05HX2l0OworKwkJQ1JZUFRPX2dldF9sb2NrZWRfbWVtX2V4X2Z1bmN0aW9uczsKKysJCUNSWVBUT19nZXRfbG9ja2VkX21lbV9leF9mdW5jczsKKysJCUFTTjFfVElNRV9jaGVjazsKKysJCVVJX2dldDBfdXNlcl9kYXRhOworKwkJSE1BQ19DVFhfY2xlYW51cDsKKysJCURTQV91cF9yZWY7CisrCQlfb3NzbF9vbGRfZGVzX2VkZTNfY2ZiNjRfZW5jcnlwdDsKKysJCV9vc3NsX29kZXNfZWRlM19jZmI2NF9lbmNyeXB0OworKwkJQVNOMV9CTVBTVFJJTkdfaXQ7CisrCQlBU04xX3RhZzJiaXQ7CisrCQlVSV9tZXRob2Rfc2V0X2ZsdXNoZXI7CisrCQlYNTA5X29jc3BpZF9wcmludDsKKysJCUtSQjVfRU5DREFUQV9pdDsKKysJCUVOR0lORV9nZXRfbG9hZF9wdWJrZXlfZnVuY3Rpb247CisrCQlVSV9hZGRfdXNlcl9kYXRhOworKwkJT0NTUF9SRVFVRVNUX2RlbGV0ZV9leHQ7CisrCQlVSV9nZXRfbWV0aG9kOworKwkJT0NTUF9PTkVSRVFfZnJlZTsKKysJCUFTTjFfUFJJTlRBQkxFU1RSSU5HX2l0OworKwkJWDUwOV9DUkxfc2V0X25leHRVcGRhdGU7CisrCQlPQ1NQX1JFUVVFU1RfaXQ7CisrCQlPQ1NQX0JBU0lDUkVTUF9pdDsKKysJCUFFU19lY2JfZW5jcnlwdDsKKysJCUJOX21vZF9zcXI7CisrCQlORVRTQ0FQRV9DRVJUX1NFUVVFTkNFX2l0OworKwkJR0VORVJBTF9OQU1FU19pdDsKKysJCUFVVEhPUklUWV9JTkZPX0FDQ0VTU19pdDsKKysJCUFTTjFfRkJPT0xFQU5faXQ7CisrCQlVSV9zZXRfZXhfZGF0YTsKKysJCV9vc3NsX29sZF9kZXNfc3RyaW5nX3RvX2tleTsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfUlNBOworKwkJZDJpX0tSQjVfUFJJTkNOQU1FOworKwkJT0NTUF9SRVNQQllURVNfaXQ7CisrCQlYNTA5X0NJTkZfaXQ7CisrCQlFTkdJTkVfdW5yZWdpc3Rlcl9kaWdlc3RzOworKwkJZDJpX0VESVBBUlRZTkFNRTsKKysJCWQyaV9PQ1NQX1NFUlZJQ0VMT0M7CisrCQlFTkdJTkVfZ2V0X2RpZ2VzdHM7CisrCQlfb3NzbF9vbGRfZGVzX3NldF9vZGRfcGFyaXR5OworKwkJT0NTUF9SRVNQREFUQV9mcmVlOworKwkJZDJpX0tSQjVfVElDS0VUOworKwkJT1RIRVJOQU1FX2l0OworKwkJRVZQX01EX0NUWF9jbGVhbnVwOworKwkJZDJpX0FTTjFfR0VORVJBTFNUUklORzsKKysJCVg1MDlfQ1JMX3NldF92ZXJzaW9uOworKwkJQk5fbW9kX3N1YjsKKysJCU9DU1BfU0lOR0xFUkVTUF9nZXRfZXh0X2J5X05JRDsKKysJCUVOR0lORV9nZXRfZXhfbmV3X2luZGV4OworKwkJT0NTUF9SRVFVRVNUX2ZyZWU7CisrCQlPQ1NQX1JFUVVFU1RfYWRkMV9leHRfaTJkOworKwkJWDUwOV9WQUxfaXQ7CisrCQlFQ19QT0lOVHNfbWFrZV9hZmZpbmU7CisrCQlFQ19QT0lOVF9tdWw7CisrCQlYNTA5VjNfRVhUX2FkZF9uY29uZjsKKysJCVg1MDlfVFJVU1Rfc2V0OworKwkJWDUwOV9DUkxfYWRkMV9leHRfaTJkOworKwkJX29zc2xfb2xkX2Rlc19mY3J5cHQ7CisrCQlESVNQTEFZVEVYVF9pdDsKKysJCVg1MDlfQ1JMX3NldF9sYXN0VXBkYXRlOworKwkJT0NTUF9CQVNJQ1JFU1BfZnJlZTsKKysJCU9DU1BfQkFTSUNSRVNQX2FkZDFfZXh0X2kyZDsKKysJCWQyaV9LUkI1X0FVVEhFTlRCT0RZOworKwkJQ1JZUFRPX3NldF9leF9kYXRhX2ltcGxlbWVudGF0aW9uOworKwkJQ1JZUFRPX3NldF9leF9kYXRhX2ltcGw7CisrCQlLUkI1X0VOQ0RBVEFfbmV3OworKwkJRFNPX3VwX3JlZjsKKysJCU9DU1BfY3JsX3JlYXNvbl9zdHI7CisrCQlVSV9nZXQwX3Jlc3VsdF9zdHJpbmc7CisrCQlBU04xX0dFTkVSQUxTVFJJTkdfbmV3OworKwkJWDUwOV9TSUdfaXQ7CisrCQlFUlJfc2V0X2ltcGxlbWVudGF0aW9uOworKwkJRVJSX2xvYWRfRUNfc3RyaW5nczsKKysJCVVJX2dldDBfYWN0aW9uX3N0cmluZzsKKysJCU9DU1BfT05FUkVRX2dldF9leHQ7CisrCQlFQ19QT0lOVF9tZXRob2Rfb2Y7CisrCQlpMmRfS1JCNV9BUFJFUUJPRFk7CisrCQlfb3NzbF9vbGRfZGVzX2VjYjNfZW5jcnlwdDsKKysJCUNSWVBUT19nZXRfbWVtX2V4X2Z1bmN0aW9uczsKKysJCUVOR0lORV9nZXRfZXhfZGF0YTsKKysJCVVJX2Rlc3Ryb3lfbWV0aG9kOworKwkJQVNOMV9pdGVtX2kyZF9iaW87CisrCQlPQ1NQX09ORVJFUV9nZXRfZXh0X2J5X09CSjsKKysJCUFTTjFfcHJpbWl0aXZlX25ldzsKKysJCUFTTjFfUFJJTlRBQkxFX2l0OworKwkJRVZQX2Flc18xOTJfZWNiOworKwkJT0NTUF9TSUdOQVRVUkVfbmV3OworKwkJTE9OR19pdDsKKysJCUFTTjFfVklTSUJMRVNUUklOR19pdDsKKysJCU9DU1BfU0lOR0xFUkVTUF9hZGQxX2V4dF9pMmQ7CisrCQlkMmlfT0NTUF9DRVJUSUQ7CisrCQlBU04xX2l0ZW1fZDJpX2ZwOworKwkJQ1JMX0RJU1RfUE9JTlRTX2l0OworKwkJR0VORVJBTF9OQU1FX3ByaW50OworKwkJT0NTUF9TSU5HTEVSRVNQX2RlbGV0ZV9leHQ7CisrCQlQS0NTMTJfU0FGRUJBR1NfaXQ7CisrCQlkMmlfT0NTUF9TSUdOQVRVUkU7CisrCQlPQ1NQX3JlcXVlc3RfYWRkMV9ub25jZTsKKysJCUVOR0lORV9zZXRfY21kX2RlZm5zOworKwkJT0NTUF9TRVJWSUNFTE9DX2ZyZWU7CisrCQlFQ19HUk9VUF9mcmVlOworKwkJQVNOMV9CSVRfU1RSSU5HX2l0OworKwkJWDUwOV9SRVFfaXQ7CisrCQlfb3NzbF9vbGRfZGVzX2NiY19lbmNyeXB0OworKwkJRVJSX3VubG9hZF9zdHJpbmdzOworKwkJUEtDUzdfU0lHTl9FTlZFTE9QRV9pdDsKKysJCUVESVBBUlRZTkFNRV9mcmVlOworKwkJT0NTUF9SRVFJTkZPX2ZyZWU7CisrCQlFQ19HUk9VUF9uZXdfY3VydmVfR0ZwOworKwkJT0NTUF9SRVFVRVNUX2dldDFfZXh0X2QyaTsKKysJCVBLQ1MxMl9pdGVtX3BhY2tfc2FmZWJhZzsKKysJCWFzbjFfZXhfYzJpOworKwkJRU5HSU5FX3JlZ2lzdGVyX2RpZ2VzdHM7CisrCQlpMmRfT0NTUF9SRVZPS0VESU5GTzsKKysJCWFzbjFfZW5jX3Jlc3RvcmU7CisrCQlVSV9mcmVlOworKwkJVUlfbmV3X21ldGhvZDsKKysJCUVWUF9FbmNyeXB0SW5pdF9leDsKKysJCVg1MDlfcHVia2V5X2RpZ2VzdDsKKysJCUVDX1BPSU5UX2ludmVydDsKKysJCU9DU1BfYmFzaWNfc2lnbjsKKysJCWkyZF9PQ1NQX1JFU1BJRDsKKysJCU9DU1BfY2hlY2tfbm9uY2U7CisrCQlFTkdJTkVfY3RybF9jbWQ7CisrCQlkMmlfS1JCNV9FTkNLRVk7CisrCQlPQ1NQX3BhcnNlX3VybDsKKysJCU9DU1BfU0lOR0xFUkVTUF9nZXRfZXh0OworKwkJT0NTUF9DUkxJRF9mcmVlOworKwkJT0NTUF9CQVNJQ1JFU1BfZ2V0MV9leHRfZDJpOworKwkJUlNBUHJpdmF0ZUtleV9pdDsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfREg7CisrCQlpMmRfRURJUEFSVFlOQU1FOworKwkJRUNfUE9JTlRfZ2V0X2FmZmluZV9jb29yZGluYXRlc19HRnA7CisrCQlFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3Jkc19HRnA7CisrCQlPQ1NQX0NSTElEX25ldzsKKysJCUVOR0lORV9nZXRfZmxhZ3M7CisrCQlPQ1NQX09ORVJFUV9pdDsKKysJCVVJX3Byb2Nlc3M7CisrCQlBU04xX0lOVEVHRVJfaXQ7CisrCQlFVlBfQ2lwaGVySW5pdF9leDsKKysJCVVJX2dldF9zdHJpbmdfdHlwZTsKKysJCUVOR0lORV91bnJlZ2lzdGVyX0RIOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9EU0E7CisrCQlPQ1NQX09ORVJFUV9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJYm5fZHVwX2V4cGFuZDsKKysJCU9DU1BfY2VydF9pZF9uZXc7CisrCQlCQVNJQ19DT05TVFJBSU5UU19pdDsKKysJCUJOX21vZF9hZGRfcXVpY2s7CisrCQlFQ19QT0lOVF9uZXc7CisrCQlFVlBfTURfQ1RYX2Rlc3Ryb3k7CisrCQlPQ1NQX1JFU1BCWVRFU19mcmVlOworKwkJRVZQX2Flc18xMjhfY2JjOworKwkJT0NTUF9TSU5HTEVSRVNQX2dldDFfZXh0X2QyaTsKKysJCUVDX1BPSU5UX2ZyZWU7CisrCQlESF91cF9yZWY7CisrCQlYNTA5X05BTUVfRU5UUllfaXQ7CisrCQlVSV9nZXRfZXhfbmV3X2luZGV4OworKwkJQk5fbW9kX3N1Yl9xdWljazsKKysJCU9DU1BfT05FUkVRX2FkZF9leHQ7CisrCQlPQ1NQX3JlcXVlc3Rfc2lnbjsKKysJCUVWUF9EaWdlc3RGaW5hbF9leDsKKysJCUVOR0lORV9zZXRfZGlnZXN0czsKKysJCU9DU1BfaWRfaXNzdWVyX2NtcDsKKysJCU9CSl9OQU1FX2RvX2FsbDsKKysJCUVDX1BPSU5Uc19tdWw7CisrCQlFTkdJTkVfcmVnaXN0ZXJfY29tcGxldGU7CisrCQlYNTA5VjNfRVhUX25jb25mX25pZDsKKysJCUFTTjFfU0VRVUVOQ0VfaXQ7CisrCQlVSV9zZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlSQU5EX3F1ZXJ5X2VnZF9ieXRlczsKKysJCVVJX21ldGhvZF9nZXRfd3JpdGVyOworKwkJVUlfT3BlblNTTDsKKysJCVBFTV9kZWZfY2FsbGJhY2s7CisrCQlFTkdJTkVfY2xlYW51cDsKKysJCURJU1RfUE9JTlRfaXQ7CisrCQlPQ1NQX1NJTkdMRVJFU1BfaXQ7CisrCQlkMmlfS1JCNV9US1RCT0RZOworKwkJRUNfUE9JTlRfY21wOworKwkJT0NTUF9SRVZPS0VESU5GT19uZXc7CisrCQlpMmRfT0NTUF9DRVJUU1RBVFVTOworKwkJT0NTUF9iYXNpY19hZGQxX25vbmNlOworKwkJQVNOMV9pdGVtX2V4X2QyaTsKKysJCUJOX21vZF9sc2hpZnQxX3F1aWNrOworKwkJVUlfc2V0X21ldGhvZDsKKysJCU9DU1BfaWRfZ2V0MF9pbmZvOworKwkJQk5fbW9kX3NxcnQ7CisrCQlFQ19HUk9VUF9jb3B5OworKwkJS1JCNV9FTkNEQVRBX2ZyZWU7CisrCQlfb3NzbF9vbGRfZGVzX2NmYl9lbmNyeXB0OworKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHRfYnlfT0JKOworKwkJT0NTUF9jZXJ0X3RvX2lkOworKwkJT0NTUF9SRVNQSURfbmV3OworKwkJT0NTUF9SRVNQREFUQV9pdDsKKysJCWQyaV9PQ1NQX1JFU1BEQVRBOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9jb21wbGV0ZTsKKysJCU9DU1BfY2hlY2tfdmFsaWRpdHk7CisrCQlQS0NTMTJfQkFHU19pdDsKKysJCU9DU1BfdXJsX3N2Y2xvY19uZXc7CisrCQlBU04xX3RlbXBsYXRlX2ZyZWU7CisrCQlPQ1NQX1NJTkdMRVJFU1BfYWRkX2V4dDsKKysJCUtSQjVfQVVUSEVOVEJPRFlfaXQ7CisrCQlYNTA5X3N1cHBvcnRlZF9leHRlbnNpb247CisrCQlpMmRfS1JCNV9BVVRIREFUQTsKKysJCVVJX21ldGhvZF9nZXRfb3BlbmVyOworKwkJRU5HSU5FX3NldF9leF9kYXRhOworKwkJT0NTUF9SRVFVRVNUX3ByaW50OworKwkJQ0JJR05VTV9pdDsKKysJCUtSQjVfVElDS0VUX25ldzsKKysJCUtSQjVfQVBSRVFfbmV3OworKwkJRUNfR1JPVVBfZ2V0X2N1cnZlX0dGcDsKKysJCUtSQjVfRU5DS0VZX25ldzsKKysJCUFTTjFfdGVtcGxhdGVfZDJpOworKwkJX29zc2xfb2xkX2Rlc19xdWFkX2Nrc3VtOworKwkJT0NTUF9zaW5nbGVfZ2V0MF9zdGF0dXM7CisrCQlCTl9zd2FwOworKwkJUE9MSUNZSU5GT19pdDsKKysJCUVOR0lORV9zZXRfZGVzdHJveV9mdW5jdGlvbjsKKysJCWFzbjFfZW5jX2ZyZWU7CisrCQlPQ1NQX1JFU1BJRF9pdDsKKysJCUVDX0dST1VQX25ldzsKKysJCUVWUF9hZXNfMjU2X2NiYzsKKysJCWkyZF9LUkI1X1BSSU5DTkFNRTsKKysJCV9vc3NsX29sZF9kZXNfZW5jcnlwdDI7CisrCQlfb3NzbF9vbGRfZGVzX2VuY3J5cHQzOworKwkJUEtDUzhfUFJJVl9LRVlfSU5GT19pdDsKKysJCU9DU1BfUkVRSU5GT19pdDsKKysJCVBCRVBBUkFNX2l0OworKwkJS1JCNV9BVVRIRU5UQk9EWV9uZXc7CisrCQlYNTA5X0NSTF9hZGQwX3Jldm9rZWQ7CisrCQlFRElQQVJUWU5BTUVfaXQ7CisrCQlORVRTQ0FQRV9TUEtJX2l0OworKwkJVUlfZ2V0MF90ZXN0X3N0cmluZzsKKysJCUVOR0lORV9nZXRfY2lwaGVyX2VuZ2luZTsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfY2lwaGVyczsKKysJCUVDX1BPSU5UX2NvcHk7CisrCQlCTl9rcm9uZWNrZXI7CisrCQlfb3NzbF9vbGRfZGVzX2VkZTNfb2ZiNjRfZW5jcnlwdDsKKysJCV9vc3NsX29kZXNfZWRlM19vZmI2NF9lbmNyeXB0OworKwkJVUlfbWV0aG9kX2dldF9yZWFkZXI7CisrCQlPQ1NQX0JBU0lDUkVTUF9nZXRfZXh0X2NvdW50OworKwkJQVNOMV9FTlVNRVJBVEVEX2l0OworKwkJVUlfc2V0X3Jlc3VsdDsKKysJCWkyZF9LUkI1X1RJQ0tFVDsKKysJCVg1MDlfcHJpbnRfZXhfZnA7CisrCQlFVlBfQ0lQSEVSX0NUWF9zZXRfcGFkZGluZzsKKysJCWQyaV9PQ1NQX1JFU1BPTlNFOworKwkJQVNOMV9VVENUSU1FX2l0OworKwkJX29zc2xfb2xkX2Rlc19lbmNfd3JpdGU7CisrCQlPQ1NQX1JFU1BPTlNFX25ldzsKKysJCUFFU19zZXRfZW5jcnlwdF9rZXk7CisrCQlPQ1NQX3Jlc3BfY291bnQ7CisrCQlLUkI1X0NIRUNLU1VNX25ldzsKKysJCUVOR0lORV9sb2FkX2Nzd2lmdDsKKysJCU9DU1Bfb25lcmVxX2dldDBfaWQ7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfY2lwaGVyczsKKysJCU5PVElDRVJFRl9pdDsKKysJCVg1MDlWM19FWFRfQ1JMX2FkZF9uY29uZjsKKysJCU9DU1BfUkVWT0tFRElORk9faXQ7CisrCQlBRVNfZW5jcnlwdDsKKysJCU9DU1BfUkVRVUVTVF9uZXc7CisrCQlBU04xX0FOWV9pdDsKKysJCUNSWVBUT19leF9kYXRhX25ld19jbGFzczsKKysJCV9vc3NsX29sZF9kZXNfbmNiY19lbmNyeXB0OworKwkJaTJkX0tSQjVfVEtUQk9EWTsKKysJCUVDX1BPSU5UX2NsZWFyX2ZyZWU7CisrCQlBRVNfZGVjcnlwdDsKKysJCWFzbjFfZW5jX2luaXQ7CisrCQlVSV9nZXRfcmVzdWx0X21heHNpemU7CisrCQlPQ1NQX0NFUlRJRF9uZXc7CisrCQlFTkdJTkVfdW5yZWdpc3Rlcl9SQU5EOworKwkJVUlfbWV0aG9kX2dldF9jbG9zZXI7CisrCQlkMmlfS1JCNV9FTkNEQVRBOworKwkJT0NTUF9yZXF1ZXN0X29uZXJlcV9jb3VudDsKKysJCU9DU1BfYmFzaWNfdmVyaWZ5OworKwkJS1JCNV9BVVRIRU5UQk9EWV9mcmVlOworKwkJQVNOMV9pdGVtX2QyaTsKKysJCUFTTjFfcHJpbWl0aXZlX2ZyZWU7CisrCQlpMmRfRVhURU5ERURfS0VZX1VTQUdFOworKwkJaTJkX09DU1BfU0lHTkFUVVJFOworKwkJYXNuMV9lbmNfc2F2ZTsKKysJCUVOR0lORV9sb2FkX251cm9uOworKwkJX29zc2xfb2xkX2Rlc19wY2JjX2VuY3J5cHQ7CisrCQlQS0NTMTJfTUFDX0RBVEFfaXQ7CisrCQlPQ1NQX2FjY2VwdF9yZXNwb25zZXNfbmV3OworKwkJYXNuMV9kb19sb2NrOworKwkJUEtDUzdfQVRUUl9WRVJJRllfaXQ7CisrCQlLUkI1X0FQUkVRQk9EWV9pdDsKKysJCWkyZF9PQ1NQX1NJTkdMRVJFU1A7CisrCQlBU04xX2l0ZW1fZXhfbmV3OworKwkJVUlfYWRkX3ZlcmlmeV9zdHJpbmc7CisrCQlfb3NzbF9vbGRfZGVzX3NldF9rZXk7CisrCQlLUkI1X1BSSU5DTkFNRV9pdDsKKysJCUVWUF9EZWNyeXB0SW5pdF9leDsKKysJCWkyZF9PQ1NQX0NFUlRJRDsKKysJCUFTTjFfaXRlbV9kMmlfYmlvOworKwkJRUNfUE9JTlRfZGJsOworKwkJYXNuMV9nZXRfY2hvaWNlX3NlbGVjdG9yOworKwkJaTJkX0tSQjVfQ0hFQ0tTVU07CisrCQlFTkdJTkVfc2V0X3RhYmxlX2ZsYWdzOworKwkJQUVTX29wdGlvbnM7CisrCQlFTkdJTkVfbG9hZF9jaGlsOworKwkJT0NTUF9pZF9jbXA7CisrCQlPQ1NQX0JBU0lDUkVTUF9uZXc7CisrCQlPQ1NQX1JFUVVFU1RfZ2V0X2V4dF9ieV9OSUQ7CisrCQlLUkI1X0FQUkVRX2l0OworKwkJRU5HSU5FX2dldF9kZXN0cm95X2Z1bmN0aW9uOworKwkJQ09ORl9zZXRfbmNvbmY7CisrCQlBU04xX1BSSU5UQUJMRV9mcmVlOworKwkJT0NTUF9CQVNJQ1JFU1BfZ2V0X2V4dF9ieV9OSUQ7CisrCQlESVNUX1BPSU5UX05BTUVfaXQ7CisrCQlYNTA5VjNfZXh0ZW5zaW9uc19wcmludDsKKysJCV9vc3NsX29sZF9kZXNfY2ZiNjRfZW5jcnlwdDsKKysJCVg1MDlfUkVWT0tFRF9hZGQxX2V4dF9pMmQ7CisrCQlfb3NzbF9vbGRfZGVzX29mYl9lbmNyeXB0OworKwkJS1JCNV9US1RCT0RZX25ldzsKKysJCUFTTjFfT0NURVRfU1RSSU5HX2l0OworKwkJRVJSX2xvYWRfVUlfc3RyaW5nczsKKysJCWkyZF9LUkI1X0VOQ0tFWTsKKysJCUFTTjFfdGVtcGxhdGVfbmV3OworKwkJT0NTUF9TSUdOQVRVUkVfZnJlZTsKKysJCUFTTjFfaXRlbV9pMmRfZnA7CisrCQlLUkI1X1BSSU5DTkFNRV9mcmVlOworKwkJUEtDUzdfUkVDSVBfSU5GT19pdDsKKysJCUVYVEVOREVEX0tFWV9VU0FHRV9pdDsKKysJCUVDX0dGcF9zaW1wbGVfbWV0aG9kOworKwkJRUNfR1JPVVBfcHJlY29tcHV0ZV9tdWx0OworKwkJT0NTUF9yZXF1ZXN0X29uZXJlcV9nZXQwOworKwkJVUlfbWV0aG9kX3NldF93cml0ZXI7CisrCQlLUkI1X0FVVEhFTlRfbmV3OworKwkJWDUwOV9DUkxfSU5GT19pdDsKKysJCURTT19zZXRfbmFtZV9jb252ZXJ0ZXI7CisrCQlBRVNfc2V0X2RlY3J5cHRfa2V5OworKwkJUEtDUzdfRElHRVNUX2l0OworKwkJUEtDUzEyX3g1MDkyY2VydGJhZzsKKysJCUVWUF9EaWdlc3RJbml0X2V4OworKwkJaTJhX0FDQ0VTU19ERVNDUklQVElPTjsKKysJCU9DU1BfUkVTUE9OU0VfaXQ7CisrCQlQS0NTN19FTkNfQ09OVEVOVF9pdDsKKysJCU9DU1BfcmVxdWVzdF9hZGQwX2lkOworKwkJRUNfUE9JTlRfbWFrZV9hZmZpbmU7CisrCQlEU09fZ2V0X2ZpbGVuYW1lOworKwkJT0NTUF9DRVJUU1RBVFVTX2l0OworKwkJT0NTUF9yZXF1ZXN0X2FkZDFfY2VydDsKKysJCVVJX2dldDBfb3V0cHV0X3N0cmluZzsKKysJCVVJX2R1cF92ZXJpZnlfc3RyaW5nOworKwkJQk5fbW9kX2xzaGlmdDsKKysJCUtSQjVfQVVUSERBVEFfaXQ7CisrCQlhc24xX3NldF9jaG9pY2Vfc2VsZWN0b3I7CisrCQlPQ1NQX2Jhc2ljX2FkZDFfc3RhdHVzOworKwkJT0NTUF9SRVNQSURfZnJlZTsKKysJCWFzbjFfZ2V0X2ZpZWxkX3B0cjsKKysJCVVJX2FkZF9pbnB1dF9zdHJpbmc7CisrCQlPQ1NQX0NSTElEX2l0OworKwkJaTJkX0tSQjVfQVVUSEVOVEJPRFk7CisrCQlPQ1NQX1JFUVVFU1RfZ2V0X2V4dF9jb3VudDsKKysJCUVOR0lORV9sb2FkX2F0YWxsYTsKKysJCVg1MDlfTkFNRV9pdDsKKysJCVVTRVJOT1RJQ0VfaXQ7CisrCQlPQ1NQX1JFUUlORk9fbmV3OworKwkJT0NTUF9CQVNJQ1JFU1BfZ2V0X2V4dDsKKysJCUNSWVBUT19nZXRfZXhfZGF0YV9pbXBsZW1lbnRhdGlvbjsKKysJCUNSWVBUT19nZXRfZXhfZGF0YV9pbXBsOworKwkJQVNOMV9pdGVtX3BhY2s7CisrCQlpMmRfS1JCNV9FTkNEQVRBOworKwkJWDUwOV9QVVJQT1NFX3NldDsKKysJCVg1MDlfUkVRX0lORk9faXQ7CisrCQlVSV9tZXRob2Rfc2V0X29wZW5lcjsKKysJCUFTTjFfaXRlbV9leF9mcmVlOworKwkJQVNOMV9CT09MRUFOX2l0OworKwkJRU5HSU5FX2dldF90YWJsZV9mbGFnczsKKysJCVVJX2NyZWF0ZV9tZXRob2Q7CisrCQlPQ1NQX09ORVJFUV9hZGQxX2V4dF9pMmQ7CisrCQlfc2hhZG93X0RFU19jaGVja19rZXk7CisrCQlkMmlfT0NTUF9SRVFJTkZPOworKwkJVUlfYWRkX2luZm9fc3RyaW5nOworKwkJVUlfZ2V0X3Jlc3VsdF9taW5zaXplOworKwkJQVNOMV9OVUxMX2l0OworKwkJQk5fbW9kX2xzaGlmdDE7CisrCQlkMmlfT0NTUF9PTkVSRVE7CisrCQlPQ1NQX09ORVJFUV9uZXc7CisrCQlLUkI1X1RJQ0tFVF9pdDsKKysJCUVWUF9hZXNfMTkyX2NiYzsKKysJCUtSQjVfVElDS0VUX2ZyZWU7CisrCQlVSV9uZXc7CisrCQlPQ1NQX3Jlc3BvbnNlX2NyZWF0ZTsKKysJCV9vc3NsX29sZF9kZXNfeGNiY19lbmNyeXB0OworKwkJUEtDUzdfaXQ7CisrCQlPQ1NQX1JFUVVFU1RfZ2V0X2V4dF9ieV9jcml0aWNhbDsKKysJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2J5X2NyaXQ7CisrCQlFTkdJTkVfc2V0X2ZsYWdzOworKwkJX29zc2xfb2xkX2Rlc19lY2JfZW5jcnlwdDsKKysJCU9DU1BfcmVzcG9uc2VfZ2V0MV9iYXNpYzsKKysJCUVWUF9EaWdlc3Q7CisrCQlPQ1NQX09ORVJFUV9kZWxldGVfZXh0OworKwkJQVNOMV9UQk9PTEVBTl9pdDsKKysJCUFTTjFfaXRlbV9uZXc7CisrCQlBU04xX1RJTUVfdG9fZ2VuZXJhbGl6ZWR0aW1lOworKwkJQklHTlVNX2l0OworKwkJQUVTX2NiY19lbmNyeXB0OworKwkJRU5HSU5FX2dldF9sb2FkX3ByaXZrZXlfZnVuY3Rpb247CisrCQlFTkdJTkVfZ2V0X2xvYWRfcHJpdmtleV9mbjsKKysJCU9DU1BfUkVTUE9OU0VfZnJlZTsKKysJCVVJX21ldGhvZF9zZXRfcmVhZGVyOworKwkJaTJkX0FTTjFfVDYxU1RSSU5HOworKwkJRUNfUE9JTlRfc2V0X3RvX2luZmluaXR5OworKwkJRVJSX2xvYWRfT0NTUF9zdHJpbmdzOworKwkJRUNfUE9JTlRfcG9pbnQyb2N0OworKwkJS1JCNV9BUFJFUV9mcmVlOworKwkJQVNOMV9PQkpFQ1RfaXQ7CisrCQlPQ1NQX2NybElEX25ldzsKKysJCU9DU1BfY3JsSUQyX25ldzsKKysJCUNPTkZfbW9kdWxlc19sb2FkX2ZpbGU7CisrCQlDT05GX2ltb2R1bGVfc2V0X3Vzcl9kYXRhOworKwkJRU5HSU5FX3NldF9kZWZhdWx0X3N0cmluZzsKKysJCUNPTkZfbW9kdWxlX2dldF91c3JfZGF0YTsKKysJCUFTTjFfYWRkX29pZF9tb2R1bGU7CisrCQlDT05GX21vZHVsZXNfZmluaXNoOworKwkJT1BFTlNTTF9jb25maWc7CisrCQlDT05GX21vZHVsZXNfdW5sb2FkOworKwkJQ09ORl9pbW9kdWxlX2dldF92YWx1ZTsKKysJCUNPTkZfbW9kdWxlX3NldF91c3JfZGF0YTsKKysJCUNPTkZfcGFyc2VfbGlzdDsKKysJCUNPTkZfbW9kdWxlX2FkZDsKKysJCUNPTkZfZ2V0MV9kZWZhdWx0X2NvbmZpZ19maWxlOworKwkJQ09ORl9pbW9kdWxlX2dldF9mbGFnczsKKysJCUNPTkZfaW1vZHVsZV9nZXRfbW9kdWxlOworKwkJQ09ORl9tb2R1bGVzX2xvYWQ7CisrCQlDT05GX2ltb2R1bGVfZ2V0X25hbWU7CisrCQlFUlJfcGVla190b3BfZXJyb3I7CisrCQlDT05GX2ltb2R1bGVfZ2V0X3Vzcl9kYXRhOworKwkJQ09ORl9pbW9kdWxlX3NldF9mbGFnczsKKysJCUVOR0lORV9hZGRfY29uZl9tb2R1bGU7CisrCQlFUlJfcGVla19sYXN0X2Vycm9yX2xpbmU7CisrCQlFUlJfcGVla19sYXN0X2Vycm9yX2xpbmVfZGF0YTsKKysJCUVSUl9wZWVrX2xhc3RfZXJyb3I7CisrCQlERVNfcmVhZF8ycGFzc3dvcmRzOworKwkJREVTX3JlYWRfcGFzc3dvcmQ7CisrCQlVSV9VVElMX3JlYWRfcHc7CisrCQlVSV9VVElMX3JlYWRfcHdfc3RyaW5nOworKwkJRU5HSU5FX2xvYWRfYWVwOworKwkJRU5HSU5FX2xvYWRfc3VyZXdhcmU7CisrCQlPUEVOU1NMX2FkZF9hbGxfYWxnb3JpdGhtc19ub2NvbmY7CisrCQlPUEVOU1NMX2FkZF9hbGxfYWxnb19ub2NvbmY7CisrCQlPUEVOU1NMX2FkZF9hbGxfYWxnb3JpdGhtc19jb25mOworKwkJT1BFTlNTTF9hZGRfYWxsX2FsZ29fY29uZjsKKysJCU9QRU5TU0xfbG9hZF9idWlsdGluX21vZHVsZXM7CisrCQlBRVNfb2ZiMTI4X2VuY3J5cHQ7CisrCQlBRVNfY3RyMTI4X2VuY3J5cHQ7CisrCQlBRVNfY2ZiMTI4X2VuY3J5cHQ7CisrCQlFTkdJTkVfbG9hZF80NzU4Y2NhOworKwkJX29zc2xfMDk2X2Rlc19yYW5kb21fc2VlZDsKKysJCUVWUF9hZXNfMjU2X29mYjsKKysJCUVWUF9hZXNfMTkyX29mYjsKKysJCUVWUF9hZXNfMTI4X2NmYjEyODsKKysJCUVWUF9hZXNfMjU2X2NmYjEyODsKKysJCUVWUF9hZXNfMTI4X29mYjsKKysJCUVWUF9hZXNfMTkyX2NmYjEyODsKKysJCUNPTkZfbW9kdWxlc19mcmVlOworKwkJTkNPTkZfZGVmYXVsdDsKKysJCU9QRU5TU0xfbm9fY29uZmlnOworKwkJTkNPTkZfV0lOMzI7CisrCQlBU04xX1VOSVZFUlNBTFNUUklOR19uZXc7CisrCQlFVlBfZGVzX2VkZV9lY2I7CisrCQlpMmRfQVNOMV9VTklWRVJTQUxTVFJJTkc7CisrCQlBU04xX1VOSVZFUlNBTFNUUklOR19mcmVlOworKwkJQVNOMV9VTklWRVJTQUxTVFJJTkdfaXQ7CisrCQlkMmlfQVNOMV9VTklWRVJTQUxTVFJJTkc7CisrCQlFVlBfZGVzX2VkZTNfZWNiOworKwkJWDUwOV9SRVFfcHJpbnRfZXg7CisrCQlFTkdJTkVfdXBfcmVmOworKwkJQlVGX01FTV9ncm93X2NsZWFuOworKwkJQ1JZUFRPX3JlYWxsb2NfY2xlYW47CisrCQlCVUZfc3RybGNhdDsKKysJCUJJT19pbmRlbnQ7CisrCQlCVUZfc3RybGNweTsKKysJCU9wZW5TU0xEaWU7CisrCQlPUEVOU1NMX2NsZWFuc2U7CisrCQlFTkdJTkVfc2V0dXBfYnNkX2NyeXB0b2RldjsKKysJCUVSUl9yZWxlYXNlX2Vycl9zdGF0ZV90YWJsZTsKKysJCUVWUF9hZXNfMTI4X2NmYjg7CisrCQlGSVBTX2NvcnJ1cHRfcnNhOworKwkJRklQU19zZWxmdGVzdF9kZXM7CisrCQlFVlBfYWVzXzEyOF9jZmIxOworKwkJRVZQX2Flc18xOTJfY2ZiODsKKysJCUZJUFNfbW9kZV9zZXQ7CisrCQlGSVBTX3NlbGZ0ZXN0X2RzYTsKKysJCUVWUF9hZXNfMjU2X2NmYjg7CisrCQlGSVBTX2FsbG93X21kNTsKKysJCURFU19lZGUzX2NmYl9lbmNyeXB0OworKwkJRVZQX2Rlc19lZGUzX2NmYjg7CisrCQlGSVBTX3JhbmRfc2VlZGVkOworKwkJQUVTX2NmYnJfZW5jcnlwdF9ibG9jazsKKysJCUFFU19jZmI4X2VuY3J5cHQ7CisrCQlGSVBTX3JhbmRfc2VlZDsKKysJCUZJUFNfY29ycnVwdF9kZXM7CisrCQlFVlBfYWVzXzE5Ml9jZmIxOworKwkJRklQU19zZWxmdGVzdF9hZXM7CisrCQlGSVBTX3NldF9wcm5nX2tleTsKKysJCUVWUF9kZXNfY2ZiODsKKysJCUZJUFNfY29ycnVwdF9kc2E7CisrCQlGSVBTX3Rlc3RfbW9kZTsKKysJCUZJUFNfcmFuZF9tZXRob2Q7CisrCQlFVlBfYWVzXzI1Nl9jZmIxOworKwkJRVJSX2xvYWRfRklQU19zdHJpbmdzOworKwkJRklQU19jb3JydXB0X2FlczsKKysJCUZJUFNfc2VsZnRlc3Rfc2hhMTsKKysJCUZJUFNfc2VsZnRlc3RfcnNhOworKwkJRklQU19jb3JydXB0X3NoYTE7CisrCQlFVlBfZGVzX2NmYjE7CisrCQlGSVBTX2RzYV9jaGVjazsKKysJCUFFU19jZmIxX2VuY3J5cHQ7CisrCQlFVlBfZGVzX2VkZTNfY2ZiMTsKKysJCUZJUFNfcmFuZF9jaGVjazsKKysJCUZJUFNfbWQ1X2FsbG93ZWQ7CisrCQlGSVBTX21vZGU7CisrCQlGSVBTX3NlbGZ0ZXN0X2ZhaWxlZDsKKysJCXNrX2lzX3NvcnRlZDsKKysJCVg1MDlfY2hlY2tfY2E7CisrCQlITUFDX0NUWF9zZXRfZmxhZ3M7CisrCQlkMmlfUFJPWFlfQ0VSVF9JTkZPX0VYVEVOU0lPTjsKKysJCVBST1hZX1BPTElDWV9pdDsKKysJCWkyZF9QUk9YWV9QT0xJQ1k7CisrCQlpMmRfUFJPWFlfQ0VSVF9JTkZPX0VYVEVOU0lPTjsKKysJCWQyaV9QUk9YWV9QT0xJQ1k7CisrCQlQUk9YWV9DRVJUX0lORk9fRVhURU5TSU9OX25ldzsKKysJCVBST1hZX0NFUlRfSU5GT19FWFRFTlNJT05fZnJlZTsKKysJCVBST1hZX0NFUlRfSU5GT19FWFRFTlNJT05faXQ7CisrCQlQUk9YWV9QT0xJQ1lfZnJlZTsKKysJCVBST1hZX1BPTElDWV9uZXc7CisrCQlCTl9NT05UX0NUWF9zZXRfbG9ja2VkOworKwkJRklQU19zZWxmdGVzdF9ybmc7CisrCQlFVlBfc2hhMzg0OworKwkJRVZQX3NoYTUxMjsKKysJCUVWUF9zaGEyMjQ7CisrCQlFVlBfc2hhMjU2OworKwkJRklQU19zZWxmdGVzdF9obWFjOworKwkJRklQU19jb3JydXB0X3JuZzsKKysJCUJOX21vZF9leHBfbW9udF9jb25zdHRpbWU7CisrCQlSU0FfWDkzMV9oYXNoX2lkOworKwkJUlNBX3BhZGRpbmdfY2hlY2tfWDkzMTsKKysJCVJTQV92ZXJpZnlfUEtDUzFfUFNTOworKwkJUlNBX3BhZGRpbmdfYWRkX1g5MzE7CisrCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfUFNTOworKwkJUEtDUzFfTUdGMTsKKysJCUJOX1g5MzFfZ2VuZXJhdGVfWHBxOworKwkJUlNBX1g5MzFfZ2VuZXJhdGVfa2V5OworKwkJQk5fWDkzMV9kZXJpdmVfcHJpbWU7CisrCQlCTl9YOTMxX2dlbmVyYXRlX3ByaW1lOworKwkJUlNBX1g5MzFfZGVyaXZlOworKwkJQklPX25ld19kZ3JhbTsKKysJCUJOX2dldDBfbmlzdF9wcmltZV8zODQ7CisrCQlFUlJfc2V0X21hcms7CisrCQlYNTA5X1NUT1JFX0NUWF9zZXQwX2NybHM7CisrCQlFTkdJTkVfc2V0X1NUT1JFOworKwkJRU5HSU5FX3JlZ2lzdGVyX0VDRFNBOworKwkJU1RPUkVfbWV0aF9zZXRfbGlzdF9zdGFydF9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfbGlzdF9zdGFydF9mdW5jdGlvbjsKKysJCUJOX0JMSU5ESU5HX2ludmVydF9leDsKKysJCU5BTUVfQ09OU1RSQUlOVFNfZnJlZTsKKysJCVNUT1JFX0FUVFJfSU5GT19zZXRfbnVtYmVyOworKwkJQk5fQkxJTkRJTkdfZ2V0X3RocmVhZF9pZDsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldDBfcGFyYW07CisrCQlQT0xJQ1lfTUFQUElOR19pdDsKKysJCVNUT1JFX3BhcnNlX2F0dHJzX3N0YXJ0OworKwkJUE9MSUNZX0NPTlNUUkFJTlRTX2ZyZWU7CisrCQlFVlBfUEtFWV9hZGQxX2F0dHJfYnlfTklEOworKwkJQk5fbmlzdF9tb2RfMTkyOworKwkJRUNfR1JPVVBfZ2V0X3RyaW5vbWlhbF9iYXNpczsKKysJCVNUT1JFX3NldF9tZXRob2Q7CisrCQlHRU5FUkFMX1NVQlRSRUVfZnJlZTsKKysJCU5BTUVfQ09OU1RSQUlOVFNfaXQ7CisrCQlFQ0RIX2dldF9kZWZhdWx0X21ldGhvZDsKKysJCVBLQ1MxMl9hZGRfc2FmZTsKKysJCUVDX0tFWV9uZXdfYnlfY3VydmVfbmFtZTsKKysJCVNUT1JFX21ldGhfZ2V0X3VwZGF0ZV9zdG9yZV9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfdXBkYXRlX3N0b3JlX2Z1bmN0aW9uOworKwkJRU5HSU5FX3JlZ2lzdGVyX0VDREg7CisrCQlTSEE1MTJfVXBkYXRlOworKwkJaTJkX0VDUHJpdmF0ZUtleTsKKysJCUJOX2dldDBfbmlzdF9wcmltZV8xOTI7CisrCQlTVE9SRV9tb2RpZnlfY2VydGlmaWNhdGU7CisrCQlFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGMm07CisrCQlFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3Jkc19HRjJtOworKwkJQk5fR0YybV9tb2RfZXhwX2FycjsKKysJCVNUT1JFX0FUVFJfSU5GT19tb2RpZnlfbnVtYmVyOworKwkJWDUwOV9rZXlpZF9nZXQwOworKwkJRU5HSU5FX2xvYWRfZ21wOworKwkJcGl0ZW1fbmV3OworKwkJQk5fR0YybV9tb2RfbXVsX2FycjsKKysJCVNUT1JFX2xpc3RfcHVibGljX2tleV9lbmRwOworKwkJbzJpX0VDUHVibGljS2V5OworKwkJRUNfS0VZX2NvcHk7CisrCQlCSU9fZHVtcF9mcDsKKysJCVg1MDlfcG9saWN5X25vZGVfZ2V0MF9wYXJlbnQ7CisrCQlFQ19HUk9VUF9jaGVja19kaXNjcmltaW5hbnQ7CisrCQlpMm9fRUNQdWJsaWNLZXk7CisrCQlFQ19LRVlfcHJlY29tcHV0ZV9tdWx0OworKwkJYTJpX0lQQUREUkVTUzsKKysJCVNUT1JFX21ldGhfc2V0X2luaXRpYWxpc2VfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X2luaXRpYWxpc2VfZnVuY3Rpb247CisrCQlYNTA5X1NUT1JFX0NUWF9zZXRfZGVwdGg7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9pbmhlcml0OworKwkJRUNfUE9JTlRfcG9pbnQyYm47CisrCQlTVE9SRV9BVFRSX0lORk9fc2V0X2RuOworKwkJWDUwOV9wb2xpY3lfdHJlZV9nZXQwX3BvbGljaWVzOworKwkJRUNfR1JPVVBfbmV3X2N1cnZlX0dGMm07CisrCQlTVE9SRV9kZXN0cm95X21ldGhvZDsKKysJCUVOR0lORV91bnJlZ2lzdGVyX1NUT1JFOworKwkJRVZQX1BLRVlfZ2V0MV9FQ19LRVk7CisrCQlTVE9SRV9BVFRSX0lORk9fZ2V0MF9udW1iZXI7CisrCQlFTkdJTkVfZ2V0X2RlZmF1bHRfRUNESDsKKysJCUVDX0tFWV9nZXRfY29udl9mb3JtOworKwkJQVNOMV9PQ1RFVF9TVFJJTkdfTkRFRl9pdDsKKysJCVNUT1JFX2RlbGV0ZV9wdWJsaWNfa2V5OworKwkJU1RPUkVfZ2V0X3B1YmxpY19rZXk7CisrCQlTVE9SRV9tb2RpZnlfYXJiaXRyYXJ5OworKwkJRU5HSU5FX2dldF9zdGF0aWNfc3RhdGU7CisrCQlwcXVldWVfaXRlcmF0b3I7CisrCQlFQ0RTQV9TSUdfbmV3OworKwkJT1BFTlNTTF9ESVJfZW5kOworKwkJQk5fR0YybV9tb2Rfc3FyOworKwkJRUNfUE9JTlRfYm4ycG9pbnQ7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfZGVwdGg7CisrCQlFQ19LRVlfc2V0X2FzbjFfZmxhZzsKKysJCVNUT1JFX2dldF9tZXRob2Q7CisrCQlFQ19LRVlfZ2V0X2tleV9tZXRob2RfZGF0YTsKKysJCUVDRFNBX3NpZ25fZXg7CisrCQlTVE9SRV9wYXJzZV9hdHRyc19lbmQ7CisrCQlFQ19HUk9VUF9nZXRfcG9pbnRfY29udmVyc2lvbl9mb3JtOworKwkJRUNfR1JPVVBfZ2V0X3BvaW50X2NvbnZfZm9ybTsKKysJCVNUT1JFX21ldGhvZF9zZXRfc3RvcmVfZnVuY3Rpb247CisrCQlTVE9SRV9BVFRSX0lORk9faW47CisrCQlQRU1fcmVhZF9iaW9fRUNQS1BhcmFtZXRlcnM7CisrCQlFQ19HUk9VUF9nZXRfcGVudGFub21pYWxfYmFzaXM7CisrCQlFVlBfUEtFWV9hZGQxX2F0dHJfYnlfdHh0OworKwkJQk5fQkxJTkRJTkdfc2V0X2ZsYWdzOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0MV9wb2xpY2llczsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3NldDFfbmFtZTsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3NldF9wdXJwb3NlOworKwkJU1RPUkVfZ2V0X251bWJlcjsKKysJCUVDRFNBX3NpZ25fc2V0dXA7CisrCQlCTl9HRjJtX21vZF9zb2x2ZV9xdWFkX2FycjsKKysJCUVDX0tFWV91cF9yZWY7CisrCQlQT0xJQ1lfTUFQUElOR19mcmVlOworKwkJQk5fR0YybV9tb2RfZGl2OworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0X2ZsYWdzOworKwkJRUNfS0VZX2ZyZWU7CisrCQlTVE9SRV9tZXRoX3NldF9saXN0X25leHRfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X2xpc3RfbmV4dF9mdW5jdGlvbjsKKysJCVBFTV93cml0ZV9iaW9fRUNQcml2YXRlS2V5OworKwkJZDJpX0VDX1BVQktFWTsKKysJCVNUT1JFX21ldGhfZ2V0X2dlbmVyYXRlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9nZW5lcmF0ZV9mdW5jdGlvbjsKKysJCVNUT1JFX21ldGhfc2V0X2xpc3RfZW5kX2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9saXN0X2VuZF9mdW5jdGlvbjsKKysJCXBxdWV1ZV9wcmludDsKKysJCUVDX0dST1VQX2hhdmVfcHJlY29tcHV0ZV9tdWx0OworKwkJRUNfS0VZX3ByaW50X2ZwOworKwkJQk5fR0YybV9tb2RfYXJyOworKwkJUEVNX3dyaXRlX2Jpb19YNTA5X0NFUlRfUEFJUjsKKysJCUVWUF9QS0VZX2NtcDsKKysJCVg1MDlfcG9saWN5X2xldmVsX25vZGVfY291bnQ7CisrCQlTVE9SRV9uZXdfZW5naW5lOworKwkJU1RPUkVfbGlzdF9wdWJsaWNfa2V5X3N0YXJ0OworKwkJWDUwOV9WRVJJRllfUEFSQU1fbmV3OworKwkJRUNESF9nZXRfZXhfZGF0YTsKKysJCUVWUF9QS0VZX2dldF9hdHRyOworKwkJRUNEU0FfZG9fc2lnbjsKKysJCUVOR0lORV91bnJlZ2lzdGVyX0VDREg7CisrCQlFQ0RIX09wZW5TU0w7CisrCQlFQ19LRVlfc2V0X2NvbnZfZm9ybTsKKysJCUVDX1BPSU5UX2R1cDsKKysJCUdFTkVSQUxfU1VCVFJFRV9uZXc7CisrCQlTVE9SRV9saXN0X2NybF9lbmRwOworKwkJRUNfZ2V0X2J1aWx0aW5fY3VydmVzOworKwkJWDUwOV9wb2xpY3lfbm9kZV9nZXQwX3F1YWxpZmllcnM7CisrCQlYNTA5X3BjeV9ub2RlX2dldDBfcXVhbGlmaWVyczsKKysJCVNUT1JFX2xpc3RfY3JsX2VuZDsKKysJCUVWUF9QS0VZX3NldDFfRUNfS0VZOworKwkJQk5fR0YybV9tb2Rfc3FydF9hcnI7CisrCQlpMmRfRUNQcml2YXRlS2V5X2JpbzsKKysJCUVDUEtQYXJhbWV0ZXJzX3ByaW50X2ZwOworKwkJcHF1ZXVlX2ZpbmQ7CisrCQlFQ0RTQV9TSUdfZnJlZTsKKysJCVBFTV93cml0ZV9iaW9fRUNQS1BhcmFtZXRlcnM7CisrCQlTVE9SRV9tZXRob2Rfc2V0X2N0cmxfZnVuY3Rpb247CisrCQlTVE9SRV9saXN0X3B1YmxpY19rZXlfZW5kOworKwkJRUNfS0VZX3NldF9wcml2YXRlX2tleTsKKysJCXBxdWV1ZV9wZWVrOworKwkJU1RPUkVfZ2V0X2FyYml0cmFyeTsKKysJCVNUT1JFX3N0b3JlX2NybDsKKysJCVg1MDlfcG9saWN5X25vZGVfZ2V0MF9wb2xpY3k7CisrCQlQS0NTMTJfYWRkX3NhZmVzOworKwkJQk5fQkxJTkRJTkdfY29udmVydF9leDsKKysJCVg1MDlfcG9saWN5X3RyZWVfZnJlZTsKKysJCU9QRU5TU0xfaWEzMmNhcF9sb2M7CisrCQlCTl9HRjJtX3BvbHkyYXJyOworKwkJU1RPUkVfY3RybDsKKysJCVNUT1JFX0FUVFJfSU5GT19jb21wYXJlOworKwkJQk5fZ2V0MF9uaXN0X3ByaW1lXzIyNDsKKysJCWkyZF9FQ1BhcmFtZXRlcnM7CisrCQlpMmRfRUNQS1BhcmFtZXRlcnM7CisrCQlCTl9HRU5DQl9jYWxsOworKwkJZDJpX0VDUEtQYXJhbWV0ZXJzOworKwkJU1RPUkVfbWV0aF9zZXRfZ2VuZXJhdGVfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X2dlbmVyYXRlX2Z1bmN0aW9uOworKwkJRU5HSU5FX3NldF9FQ0RIOworKwkJTkFNRV9DT05TVFJBSU5UU19uZXc7CisrCQlTSEEyNTZfSW5pdDsKKysJCUVDX0tFWV9nZXQwX3B1YmxpY19rZXk7CisrCQlQRU1fd3JpdGVfYmlvX0VDX1BVQktFWTsKKysJCVNUT1JFX0FUVFJfSU5GT19zZXRfY3N0cjsKKysJCVNUT1JFX2xpc3RfY3JsX25leHQ7CisrCQlTVE9SRV9BVFRSX0lORk9faW5fcmFuZ2U7CisrCQlFQ1BhcmFtZXRlcnNfcHJpbnQ7CisrCQlTVE9SRV9tZXRoX3NldF9kZWxldGVfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X2RlbGV0ZV9mdW5jdGlvbjsKKysJCVNUT1JFX2xpc3RfY2VydGlmaWNhdGVfbmV4dDsKKysJCUFTTjFfZ2VuZXJhdGVfbmNvbmY7CisrCQlCVUZfbWVtZHVwOworKwkJQk5fR0YybV9tb2RfbXVsOworKwkJU1RPUkVfbWV0aF9nZXRfbGlzdF9uZXh0X2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9saXN0X25leHRfZnVuY3Rpb247CisrCQlTVE9SRV9BVFRSX0lORk9fZ2V0MF9kbjsKKysJCVNUT1JFX2xpc3RfcHJpdmF0ZV9rZXlfbmV4dDsKKysJCUVDX0dST1VQX3NldF9zZWVkOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0X3RydXN0OworKwkJU1RPUkVfQVRUUl9JTkZPX2ZyZWU7CisrCQlTVE9SRV9nZXRfcHJpdmF0ZV9rZXk7CisrCQlFVlBfUEtFWV9nZXRfYXR0cl9jb3VudDsKKysJCVNUT1JFX0FUVFJfSU5GT19uZXc7CisrCQlFQ19HUk9VUF9nZXRfY3VydmVfR0YybTsKKysJCVNUT1JFX21ldGhfc2V0X3Jldm9rZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfcmV2b2tlX2Z1bmN0aW9uOworKwkJU1RPUkVfc3RvcmVfbnVtYmVyOworKwkJQk5faXNfcHJpbWVfZXg7CisrCQlTVE9SRV9yZXZva2VfcHVibGljX2tleTsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDBfcGFyYW07CisrCQlTVE9SRV9kZWxldGVfYXJiaXRyYXJ5OworKwkJUEVNX3JlYWRfWDUwOV9DRVJUX1BBSVI7CisrCQlYNTA5X1NUT1JFX3NldF9kZXB0aDsKKysJCUVDRFNBX2dldF9leF9kYXRhOworKwkJU0hBMjI0OworKwkJQklPX2R1bXBfaW5kZW50X2ZwOworKwkJRUNfS0VZX3NldF9ncm91cDsKKysJCUJVRl9zdHJuZHVwOworKwkJU1RPUkVfbGlzdF9jZXJ0aWZpY2F0ZV9zdGFydDsKKysJCUJOX0dGMm1fbW9kOworKwkJWDUwOV9SRVFfY2hlY2tfcHJpdmF0ZV9rZXk7CisrCQlFQ19HUk9VUF9nZXRfc2VlZF9sZW47CisrCQlFUlJfbG9hZF9TVE9SRV9zdHJpbmdzOworKwkJUEVNX3JlYWRfYmlvX0VDX1BVQktFWTsKKysJCVNUT1JFX2xpc3RfcHJpdmF0ZV9rZXlfZW5kOworKwkJaTJkX0VDX1BVQktFWTsKKysJCUVDRFNBX2dldF9kZWZhdWx0X21ldGhvZDsKKysJCUFTTjFfcHV0X2VvYzsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldF9leHBsaWNpdF9wb2xpY3k7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXRfZXhwbF9wb2xpY3k7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV90YWJsZV9jbGVhbnVwOworKwkJU1RPUkVfbW9kaWZ5X3ByaXZhdGVfa2V5OworKwkJWDUwOV9WRVJJRllfUEFSQU1fZnJlZTsKKysJCUVDX01FVEhPRF9nZXRfZmllbGRfdHlwZTsKKysJCUVDX0dGcF9uaXN0X21ldGhvZDsKKysJCVNUT1JFX21ldGhfc2V0X21vZGlmeV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfbW9kaWZ5X2Z1bmN0aW9uOworKwkJU1RPUkVfcGFyc2VfYXR0cnNfbmV4dDsKKysJCUVOR0lORV9sb2FkX3BhZGxvY2s7CisrCQlFQ19HUk9VUF9zZXRfY3VydmVfbmFtZTsKKysJCVg1MDlfQ0VSVF9QQUlSX2l0OworKwkJU1RPUkVfbWV0aF9nZXRfcmV2b2tlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9yZXZva2VfZnVuY3Rpb247CisrCQlTVE9SRV9tZXRob2Rfc2V0X2dldF9mdW5jdGlvbjsKKysJCVNUT1JFX21vZGlmeV9udW1iZXI7CisrCQlTVE9SRV9tZXRob2RfZ2V0X3N0b3JlX2Z1bmN0aW9uOworKwkJU1RPUkVfc3RvcmVfcHJpdmF0ZV9rZXk7CisrCQlCTl9HRjJtX21vZF9zcXJfYXJyOworKwkJUlNBX3NldHVwX2JsaW5kaW5nOworKwkJQklPX3NfZGF0YWdyYW07CisrCQlTVE9SRV9NZW1vcnk7CisrCQlza19maW5kX2V4OworKwkJRUNfR1JPVVBfc2V0X2N1cnZlX0dGMm07CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfRUNEU0E7CisrCQlQT0xJQ1lfQ09OU1RSQUlOVFNfbmV3OworKwkJQk5fR0YybV9tb2Rfc3FydDsKKysJCUVDREhfc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJRUNfS0VZX2dlbmVyYXRlX2tleTsKKysJCVNIQTM4NF9VcGRhdGU7CisrCQlCTl9HRjJtX2FycjJwb2x5OworKwkJU1RPUkVfbWV0aG9kX2dldF9nZXRfZnVuY3Rpb247CisrCQlTVE9SRV9tZXRoX3NldF9jbGVhbnVwX2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9jbGVhbnVwX2Z1bmN0aW9uOworKwkJRUNfR1JPVVBfY2hlY2s7CisrCQlkMmlfRUNQcml2YXRlS2V5X2JpbzsKKysJCUVDX0tFWV9pbnNlcnRfa2V5X21ldGhvZF9kYXRhOworKwkJU1RPUkVfbWV0aF9nZXRfbG9ja19zdG9yZV9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfbG9ja19zdG9yZV9mdW5jdGlvbjsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX2dldF9kZXB0aDsKKysJCVNIQTIyNF9GaW5hbDsKKysJCVNUT1JFX21ldGhfc2V0X3VwZGF0ZV9zdG9yZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfdXBkYXRlX3N0b3JlX2Z1bmN0aW9uOworKwkJU0hBMjI0X1VwZGF0ZTsKKysJCWQyaV9FQ1ByaXZhdGVLZXk7CisrCQlBU04xX2l0ZW1fbmRlZl9pMmQ7CisrCQlTVE9SRV9kZWxldGVfcHJpdmF0ZV9rZXk7CisrCQlFUlJfcG9wX3RvX21hcms7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX1NUT1JFOworKwkJWDUwOV9wb2xpY3lfbGV2ZWxfZ2V0MF9ub2RlOworKwkJaTJkX1BLQ1M3X05ERUY7CisrCQlFQ19HUk9VUF9nZXRfZGVncmVlOworKwkJQVNOMV9nZW5lcmF0ZV92MzsKKysJCVNUT1JFX0FUVFJfSU5GT19tb2RpZnlfY3N0cjsKKysJCVg1MDlfcG9saWN5X3RyZWVfbGV2ZWxfY291bnQ7CisrCQlCTl9HRjJtX2FkZDsKKysJCUVDX0tFWV9nZXQwX2dyb3VwOworKwkJU1RPUkVfZ2VuZXJhdGVfY3JsOworKwkJU1RPUkVfc3RvcmVfcHVibGljX2tleTsKKysJCVg1MDlfQ0VSVF9QQUlSX2ZyZWU7CisrCQlTVE9SRV9yZXZva2VfcHJpdmF0ZV9rZXk7CisrCQlCTl9uaXN0X21vZF8yMjQ7CisrCQlTSEE1MTJfRmluYWw7CisrCQlTVE9SRV9BVFRSX0lORk9fbW9kaWZ5X2RuOworKwkJU1RPUkVfbWV0aF9nZXRfaW5pdGlhbGlzZV9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfaW5pdGlhbGlzZV9mdW5jdGlvbjsKKysJCVNUT1JFX2RlbGV0ZV9udW1iZXI7CisrCQlpMmRfRUNfUFVCS0VZX2JpbzsKKysJCUJJT19kZ3JhbV9ub25fZmF0YWxfZXJyb3I7CisrCQlFQ19HUk9VUF9nZXRfYXNuMV9mbGFnOworKwkJU1RPUkVfQVRUUl9JTkZPX2luX2V4OworKwkJU1RPUkVfbGlzdF9jcmxfc3RhcnQ7CisrCQlFQ0RIX2dldF9leF9uZXdfaW5kZXg7CisrCQlTVE9SRV9tZXRoX2dldF9tb2RpZnlfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X21vZGlmeV9mdW5jdGlvbjsKKysJCXYyaV9BU04xX0JJVF9TVFJJTkc7CisrCQlTVE9SRV9zdG9yZV9jZXJ0aWZpY2F0ZTsKKysJCU9CSl9ic2VhcmNoX2V4OworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2RlZmF1bHQ7CisrCQlTVE9SRV9BVFRSX0lORk9fc2V0X3NoYTFzdHI7CisrCQlCTl9HRjJtX21vZF9pbnY7CisrCQlCTl9HRjJtX21vZF9leHA7CisrCQlTVE9SRV9tb2RpZnlfcHVibGljX2tleTsKKysJCVNUT1JFX21ldGhfZ2V0X2xpc3Rfc3RhcnRfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X2xpc3Rfc3RhcnRfZnVuY3Rpb247CisrCQlFQ19HUk9VUF9nZXQwX3NlZWQ7CisrCQlTVE9SRV9zdG9yZV9hcmJpdHJhcnk7CisrCQlTVE9SRV9tZXRoX3NldF91bmxvY2tfc3RvcmVfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X3VubG9ja19zdG9yZV9mdW5jdGlvbjsKKysJCUJOX0dGMm1fbW9kX2Rpdl9hcnI7CisrCQlFTkdJTkVfc2V0X0VDRFNBOworKwkJU1RPUkVfY3JlYXRlX21ldGhvZDsKKysJCUVDUEtQYXJhbWV0ZXJzX3ByaW50OworKwkJRUNfS0VZX2dldDBfcHJpdmF0ZV9rZXk7CisrCQlQRU1fd3JpdGVfRUNfUFVCS0VZOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0MTsKKysJCUVDREhfc2V0X21ldGhvZDsKKysJCXYyaV9HRU5FUkFMX05BTUVfZXg7CisrCQlFQ0RIX3NldF9leF9kYXRhOworKwkJU1RPUkVfZ2VuZXJhdGVfa2V5OworKwkJQk5fbmlzdF9tb2RfNTIxOworKwkJWDUwOV9wb2xpY3lfdHJlZV9nZXQwX2xldmVsOworKwkJRUNfR1JPVVBfc2V0X3BvaW50X2NvbnZlcnNpb25fZm9ybTsKKysJCUVDX0dST1VQX3NldF9wb2ludF9jb252X2Zvcm07CisrCQlQRU1fcmVhZF9FQ19QVUJLRVk7CisrCQlpMmRfRUNEU0FfU0lHOworKwkJRUNEU0FfT3BlblNTTDsKKysJCVNUT1JFX2RlbGV0ZV9jcmw7CisrCQlFQ19LRVlfZ2V0X2VuY19mbGFnczsKKysJCUFTTjFfY29uc3RfY2hlY2tfaW5maW5pdGVfZW5kOworKwkJRVZQX1BLRVlfZGVsZXRlX2F0dHI7CisrCQlFQ0RTQV9zZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlFQ19QT0lOVF9zZXRfY29tcHJlc3NlZF9jb29yZGluYXRlc19HRjJtOworKwkJRUNfUE9JTlRfc2V0X2NvbXByX2Nvb3Jkc19HRjJtOworKwkJRUNfR1JPVVBfY21wOworKwkJU1RPUkVfcmV2b2tlX2NlcnRpZmljYXRlOworKwkJQk5fZ2V0MF9uaXN0X3ByaW1lXzI1NjsKKysJCVNUT1JFX21ldGhfZ2V0X2RlbGV0ZV9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfZGVsZXRlX2Z1bmN0aW9uOworKwkJU0hBMjI0X0luaXQ7CisrCQlQRU1fcmVhZF9FQ1ByaXZhdGVLZXk7CisrCQlTSEE1MTJfSW5pdDsKKysJCVNUT1JFX3BhcnNlX2F0dHJzX2VuZHA7CisrCQlCTl9zZXRfbmVnYXRpdmU7CisrCQlFUlJfbG9hZF9FQ0RTQV9zdHJpbmdzOworKwkJRUNfR1JPVVBfZ2V0X2Jhc2lzX3R5cGU7CisrCQlTVE9SRV9saXN0X3B1YmxpY19rZXlfbmV4dDsKKysJCWkydl9BU04xX0JJVF9TVFJJTkc7CisrCQlTVE9SRV9PQkpFQ1RfZnJlZTsKKysJCUJOX25pc3RfbW9kXzM4NDsKKysJCWkyZF9YNTA5X0NFUlRfUEFJUjsKKysJCVBFTV93cml0ZV9FQ1BLUGFyYW1ldGVyczsKKysJCUVDREhfY29tcHV0ZV9rZXk7CisrCQlTVE9SRV9BVFRSX0lORk9fZ2V0MF9zaGExc3RyOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9FQ0RIOworKwkJcHF1ZXVlX3BvcDsKKysJCVNUT1JFX0FUVFJfSU5GT19nZXQwX2NzdHI7CisrCQlQT0xJQ1lfQ09OU1RSQUlOVFNfaXQ7CisrCQlTVE9SRV9nZXRfZXhfbmV3X2luZGV4OworKwkJRVZQX1BLRVlfZ2V0X2F0dHJfYnlfT0JKOworKwkJWDUwOV9WRVJJRllfUEFSQU1fYWRkMF9wb2xpY3k7CisrCQlCTl9HRjJtX21vZF9zb2x2ZV9xdWFkOworKwkJU0hBMjU2OworKwkJaTJkX0VDUHJpdmF0ZUtleV9mcDsKKysJCVg1MDlfcG9saWN5X3RyZWVfZ2V0MF91c2VyX3BvbGljaWVzOworKwkJWDUwOV9wY3lfdHJlZV9nZXQwX3Vzcl9wb2xpY2llczsKKysJCU9QRU5TU0xfRElSX3JlYWQ7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX0VDRFNBOworKwkJWDUwOV9WRVJJRllfUEFSQU1fbG9va3VwOworKwkJRUNfUE9JTlRfZ2V0X2FmZmluZV9jb29yZGluYXRlc19HRjJtOworKwkJRUNfUE9JTlRfZ2V0X2FmZmluZV9jb29yZHNfR0YybTsKKysJCUVDX0dST1VQX2R1cDsKKysJCUVOR0lORV9nZXRfZGVmYXVsdF9FQ0RTQTsKKysJCUVDX0tFWV9uZXc7CisrCQlTSEEyNTZfVHJhbnNmb3JtOworKwkJRUNfS0VZX3NldF9lbmNfZmxhZ3M7CisrCQlFQ0RTQV92ZXJpZnk7CisrCQlFQ19QT0lOVF9wb2ludDJoZXg7CisrCQlFTkdJTkVfZ2V0X1NUT1JFOworKwkJU0hBNTEyOworKwkJU1RPUkVfZ2V0X2NlcnRpZmljYXRlOworKwkJRUNEU0FfZG9fc2lnbl9leDsKKysJCUVDRFNBX2RvX3ZlcmlmeTsKKysJCWQyaV9FQ1ByaXZhdGVLZXlfZnA7CisrCQlTVE9SRV9kZWxldGVfY2VydGlmaWNhdGU7CisrCQlTSEE1MTJfVHJhbnNmb3JtOworKwkJWDUwOV9TVE9SRV9zZXQxX3BhcmFtOworKwkJU1RPUkVfbWV0aG9kX2dldF9jdHJsX2Z1bmN0aW9uOworKwkJU1RPUkVfZnJlZTsKKysJCVBFTV93cml0ZV9FQ1ByaXZhdGVLZXk7CisrCQlTVE9SRV9tZXRoX2dldF91bmxvY2tfc3RvcmVfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X3VubG9ja19zdG9yZV9mdW5jdGlvbjsKKysJCVNUT1JFX2dldF9leF9kYXRhOworKwkJRUNfS0VZX3NldF9wdWJsaWNfa2V5OworKwkJUEVNX3JlYWRfRUNQS1BhcmFtZXRlcnM7CisrCQlYNTA5X0NFUlRfUEFJUl9uZXc7CisrCQlFTkdJTkVfcmVnaXN0ZXJfU1RPUkU7CisrCQlSU0FfZ2VuZXJhdGVfa2V5X2V4OworKwkJRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXg7CisrCQlFQ1BhcmFtZXRlcnNfcHJpbnRfZnA7CisrCQlYNTA5VjNfTkFNRV9mcm9tX3NlY3Rpb247CisrCQlFVlBfUEtFWV9hZGQxX2F0dHI7CisrCQlTVE9SRV9tb2RpZnlfY3JsOworKwkJU1RPUkVfbGlzdF9wcml2YXRlX2tleV9zdGFydDsKKysJCVBPTElDWV9NQVBQSU5HU19pdDsKKysJCUdFTkVSQUxfU1VCVFJFRV9pdDsKKysJCUVDX0dST1VQX2dldF9jdXJ2ZV9uYW1lOworKwkJUEVNX3dyaXRlX1g1MDlfQ0VSVF9QQUlSOworKwkJQklPX2R1bXBfaW5kZW50X2NiOworKwkJZDJpX1g1MDlfQ0VSVF9QQUlSOworKwkJU1RPUkVfbGlzdF9wcml2YXRlX2tleV9lbmRwOworKwkJYXNuMV9jb25zdF9GaW5pc2g7CisrCQlpMmRfRUNfUFVCS0VZX2ZwOworKwkJQk5fbmlzdF9tb2RfMjU2OworKwkJWDUwOV9WRVJJRllfUEFSQU1fYWRkMF90YWJsZTsKKysJCXBxdWV1ZV9mcmVlOworKwkJQk5fQkxJTkRJTkdfY3JlYXRlX3BhcmFtOworKwkJRUNEU0Ffc2l6ZTsKKysJCWQyaV9FQ19QVUJLRVlfYmlvOworKwkJQk5fZ2V0MF9uaXN0X3ByaW1lXzUyMTsKKysJCVNUT1JFX0FUVFJfSU5GT19tb2RpZnlfc2hhMXN0cjsKKysJCUJOX2dlbmVyYXRlX3ByaW1lX2V4OworKwkJRUNfR1JPVVBfbmV3X2J5X2N1cnZlX25hbWU7CisrCQlTSEEyNTZfRmluYWw7CisrCQlESF9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4OworKwkJUEVNX3JlYWRfYmlvX0VDUHJpdmF0ZUtleTsKKysJCVNUT1JFX21ldGhfZ2V0X2NsZWFudXBfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X2NsZWFudXBfZnVuY3Rpb247CisrCQlFTkdJTkVfZ2V0X0VDREg7CisrCQlkMmlfRUNEU0FfU0lHOworKwkJQk5faXNfcHJpbWVfZmFzdHRlc3RfZXg7CisrCQlFQ0RTQV9zaWduOworKwkJWDUwOV9wb2xpY3lfY2hlY2s7CisrCQlFVlBfUEtFWV9nZXRfYXR0cl9ieV9OSUQ7CisrCQlTVE9SRV9zZXRfZXhfZGF0YTsKKysJCUVOR0lORV9nZXRfRUNEU0E7CisrCQlFVlBfZWNkc2E7CisrCQlCTl9CTElORElOR19nZXRfZmxhZ3M7CisrCQlQS0NTMTJfYWRkX2NlcnQ7CisrCQlTVE9SRV9PQkpFQ1RfbmV3OworKwkJRVJSX2xvYWRfRUNESF9zdHJpbmdzOworKwkJRUNfS0VZX2R1cDsKKysJCUVWUF9DSVBIRVJfQ1RYX3JhbmRfa2V5OworKwkJRUNEU0Ffc2V0X21ldGhvZDsKKysJCWEyaV9JUEFERFJFU1NfTkM7CisrCQlkMmlfRUNQYXJhbWV0ZXJzOworKwkJU1RPUkVfbGlzdF9jZXJ0aWZpY2F0ZV9lbmQ7CisrCQlTVE9SRV9nZXRfY3JsOworKwkJWDUwOV9QT0xJQ1lfTk9ERV9wcmludDsKKysJCVNIQTM4NF9Jbml0OworKwkJRUNfR0YybV9zaW1wbGVfbWV0aG9kOworKwkJRUNEU0Ffc2V0X2V4X2RhdGE7CisrCQlTSEEzODRfRmluYWw7CisrCQlQS0NTN19zZXRfZGlnZXN0OworKwkJRUNfS0VZX3ByaW50OworKwkJU1RPUkVfbWV0aF9zZXRfbG9ja19zdG9yZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfbG9ja19zdG9yZV9mdW5jdGlvbjsKKysJCUVDRFNBX2dldF9leF9uZXdfaW5kZXg7CisrCQlTSEEzODQ7CisrCQlQT0xJQ1lfTUFQUElOR19uZXc7CisrCQlTVE9SRV9saXN0X2NlcnRpZmljYXRlX2VuZHA7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXQwX3BvbGljeV90cmVlOworKwkJRUNfR1JPVVBfc2V0X2FzbjFfZmxhZzsKKysJCUVDX0tFWV9jaGVja19rZXk7CisrCQlkMmlfRUNfUFVCS0VZX2ZwOworKwkJUEtDUzdfc2V0MF90eXBlX290aGVyOworKwkJUEVNX3JlYWRfYmlvX1g1MDlfQ0VSVF9QQUlSOworKwkJcHF1ZXVlX25leHQ7CisrCQlTVE9SRV9tZXRoX2dldF9saXN0X2VuZF9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfbGlzdF9lbmRfZnVuY3Rpb247CisrCQlFVlBfUEtFWV9hZGQxX2F0dHJfYnlfT0JKOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0X3RpbWU7CisrCQlwcXVldWVfbmV3OworKwkJRU5HSU5FX3NldF9kZWZhdWx0X0VDREg7CisrCQlTVE9SRV9uZXdfbWV0aG9kOworKwkJUEtDUzEyX2FkZF9rZXk7CisrCQlEU09fbWVyZ2U7CisrCQlFQ19QT0lOVF9oZXgycG9pbnQ7CisrCQlCSU9fZHVtcF9jYjsKKysJCVNIQTI1Nl9VcGRhdGU7CisrCQlwcXVldWVfaW5zZXJ0OworKwkJcGl0ZW1fZnJlZTsKKysJCUJOX0dGMm1fbW9kX2ludl9hcnI7CisrCQlFTkdJTkVfdW5yZWdpc3Rlcl9FQ0RTQTsKKysJCUJOX0JMSU5ESU5HX3NldF90aHJlYWRfaWQ7CisrCQlnZXRfcmZjMzUyNl9wcmltZV84MTkyOworKwkJWDUwOV9WRVJJRllfUEFSQU1fY2xlYXJfZmxhZ3M7CisrCQlnZXRfcmZjMjQwOV9wcmltZV8xMDI0OworKwkJREhfY2hlY2tfcHViX2tleTsKKysJCWdldF9yZmMzNTI2X3ByaW1lXzIwNDg7CisrCQlnZXRfcmZjMzUyNl9wcmltZV82MTQ0OworKwkJZ2V0X3JmYzM1MjZfcHJpbWVfMTUzNjsKKysJCWdldF9yZmMzNTI2X3ByaW1lXzMwNzI7CisrCQlnZXRfcmZjMzUyNl9wcmltZV80MDk2OworKwkJZ2V0X3JmYzI0MDlfcHJpbWVfNzY4OworKwkJWDUwOV9WRVJJRllfUEFSQU1fZ2V0X2ZsYWdzOworKwkJRVZQX0NJUEhFUl9DVFhfbmV3OworKwkJRVZQX0NJUEhFUl9DVFhfZnJlZTsKKysJCUNhbWVsbGlhX2NiY19lbmNyeXB0OworKwkJQ2FtZWxsaWFfY2ZiMTI4X2VuY3J5cHQ7CisrCQlDYW1lbGxpYV9jZmIxX2VuY3J5cHQ7CisrCQlDYW1lbGxpYV9jZmI4X2VuY3J5cHQ7CisrCQlDYW1lbGxpYV9jdHIxMjhfZW5jcnlwdDsKKysJCUNhbWVsbGlhX2NmYnJfZW5jcnlwdF9ibG9jazsKKysJCUNhbWVsbGlhX2RlY3J5cHQ7CisrCQlDYW1lbGxpYV9lY2JfZW5jcnlwdDsKKysJCUNhbWVsbGlhX2VuY3J5cHQ7CisrCQlDYW1lbGxpYV9vZmIxMjhfZW5jcnlwdDsKKysJCUNhbWVsbGlhX3NldF9rZXk7CisrCQlFVlBfY2FtZWxsaWFfMTI4X2NiYzsKKysJCUVWUF9jYW1lbGxpYV8xMjhfY2ZiMTI4OworKwkJRVZQX2NhbWVsbGlhXzEyOF9jZmIxOworKwkJRVZQX2NhbWVsbGlhXzEyOF9jZmI4OworKwkJRVZQX2NhbWVsbGlhXzEyOF9lY2I7CisrCQlFVlBfY2FtZWxsaWFfMTI4X29mYjsKKysJCUVWUF9jYW1lbGxpYV8xOTJfY2JjOworKwkJRVZQX2NhbWVsbGlhXzE5Ml9jZmIxMjg7CisrCQlFVlBfY2FtZWxsaWFfMTkyX2NmYjE7CisrCQlFVlBfY2FtZWxsaWFfMTkyX2NmYjg7CisrCQlFVlBfY2FtZWxsaWFfMTkyX2VjYjsKKysJCUVWUF9jYW1lbGxpYV8xOTJfb2ZiOworKwkJRVZQX2NhbWVsbGlhXzI1Nl9jYmM7CisrCQlFVlBfY2FtZWxsaWFfMjU2X2NmYjEyODsKKysJCUVWUF9jYW1lbGxpYV8yNTZfY2ZiMTsKKysJCUVWUF9jYW1lbGxpYV8yNTZfY2ZiODsKKysJCUVWUF9jYW1lbGxpYV8yNTZfZWNiOworKwkJRVZQX2NhbWVsbGlhXzI1Nl9vZmI7CisrCQlhMmlfaXBhZGQ7CisrCQlBU0lkZW50aWZpZXJzX2ZyZWU7CisrCQlpMmRfQVNJZE9yUmFuZ2U7CisrCQlFVlBfQ0lQSEVSX2Jsb2NrX3NpemU7CisrCQl2M19hc2lkX2lzX2Nhbm9uaWNhbDsKKysJCUlQQWRkcmVzc0Nob2ljZV9mcmVlOworKwkJRVZQX0NJUEhFUl9DVFhfc2V0X2FwcF9kYXRhOworKwkJQklPX3NldF9jYWxsYmFja19hcmc7CisrCQl2M19hZGRyX2FkZF9wcmVmaXg7CisrCQlJUEFkZHJlc3NPclJhbmdlX2l0OworKwkJQklPX3NldF9mbGFnczsKKysJCUFTSWRlbnRpZmllcnNfaXQ7CisrCQl2M19hZGRyX2dldF9yYW5nZTsKKysJCUJJT19tZXRob2RfdHlwZTsKKysJCXYzX2FkZHJfaW5oZXJpdHM7CisrCQlJUEFkZHJlc3NDaG9pY2VfaXQ7CisrCQlBRVNfaWdlX2VuY3J5cHQ7CisrCQl2M19hZGRyX2FkZF9yYW5nZTsKKysJCUVWUF9DSVBIRVJfQ1RYX25pZDsKKysJCWQyaV9BU1JhbmdlOworKwkJdjNfYWRkcl9hZGRfaW5oZXJpdDsKKysJCXYzX2FzaWRfYWRkX2lkX29yX3JhbmdlOworKwkJdjNfYWRkcl92YWxpZGF0ZV9yZXNvdXJjZV9zZXQ7CisrCQlFVlBfQ0lQSEVSX2l2X2xlbmd0aDsKKysJCUVWUF9NRF90eXBlOworKwkJdjNfYXNpZF9jYW5vbml6ZTsKKysJCUlQQWRkcmVzc1JhbmdlX2ZyZWU7CisrCQl2M19hc2lkX2FkZF9pbmhlcml0OworKwkJRVZQX0NJUEhFUl9DVFhfa2V5X2xlbmd0aDsKKysJCUlQQWRkcmVzc1JhbmdlX25ldzsKKysJCUFTSWRPclJhbmdlX25ldzsKKysJCUVWUF9NRF9zaXplOworKwkJRVZQX01EX0NUWF90ZXN0X2ZsYWdzOworKwkJQklPX2NsZWFyX2ZsYWdzOworKwkJaTJkX0FTUmFuZ2U7CisrCQlJUEFkZHJlc3NSYW5nZV9pdDsKKysJCUlQQWRkcmVzc0Nob2ljZV9uZXc7CisrCQlBU0lkZW50aWZpZXJDaG9pY2VfbmV3OworKwkJQVNSYW5nZV9mcmVlOworKwkJRVZQX01EX3BrZXlfdHlwZTsKKysJCUVWUF9NRF9DVFhfY2xlYXJfZmxhZ3M7CisrCQlJUEFkZHJlc3NGYW1pbHlfZnJlZTsKKysJCWkyZF9JUEFkZHJlc3NGYW1pbHk7CisrCQlJUEFkZHJlc3NPclJhbmdlX25ldzsKKysJCUVWUF9DSVBIRVJfZmxhZ3M7CisrCQl2M19hc2lkX3ZhbGlkYXRlX3Jlc291cmNlX3NldDsKKysJCWQyaV9JUEFkZHJlc3NSYW5nZTsKKysJCUFFU19iaV9pZ2VfZW5jcnlwdDsKKysJCUJJT19nZXRfY2FsbGJhY2s7CisrCQlJUEFkZHJlc3NPclJhbmdlX2ZyZWU7CisrCQl2M19hZGRyX3N1YnNldDsKKysJCWQyaV9JUEFkZHJlc3NGYW1pbHk7CisrCQl2M19hc2lkX3N1YnNldDsKKysJCUJJT190ZXN0X2ZsYWdzOworKwkJaTJkX0FTSWRlbnRpZmllckNob2ljZTsKKysJCUFTUmFuZ2VfaXQ7CisrCQlkMmlfQVNJZGVudGlmaWVyczsKKysJCUFTUmFuZ2VfbmV3OworKwkJZDJpX0lQQWRkcmVzc0Nob2ljZTsKKysJCXYzX2FkZHJfZ2V0X2FmaTsKKysJCUVWUF9DSVBIRVJfa2V5X2xlbmd0aDsKKysJCUVWUF9DaXBoZXI7CisrCQlpMmRfSVBBZGRyZXNzT3JSYW5nZTsKKysJCUFTSWRPclJhbmdlX2l0OworKwkJRVZQX0NJUEhFUl9uaWQ7CisrCQlpMmRfSVBBZGRyZXNzQ2hvaWNlOworKwkJRVZQX0NJUEhFUl9DVFhfYmxvY2tfc2l6ZTsKKysJCUFTSWRlbnRpZmllcnNfbmV3OworKwkJdjNfYWRkcl92YWxpZGF0ZV9wYXRoOworKwkJSVBBZGRyZXNzRmFtaWx5X25ldzsKKysJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzOworKwkJdjNfYWRkcl9pc19jYW5vbmljYWw7CisrCQlpMmRfSVBBZGRyZXNzUmFuZ2U7CisrCQlJUEFkZHJlc3NGYW1pbHlfaXQ7CisrCQl2M19hc2lkX2luaGVyaXRzOworKwkJRVZQX0NJUEhFUl9DVFhfY2lwaGVyOworKwkJRVZQX0NJUEhFUl9DVFhfZ2V0X2FwcF9kYXRhOworKwkJRVZQX01EX2Jsb2NrX3NpemU7CisrCQlFVlBfQ0lQSEVSX0NUWF9mbGFnczsKKysJCXYzX2FzaWRfdmFsaWRhdGVfcGF0aDsKKysJCWQyaV9JUEFkZHJlc3NPclJhbmdlOworKwkJdjNfYWRkcl9jYW5vbml6ZTsKKysJCUFTSWRlbnRpZmllckNob2ljZV9pdDsKKysJCUVWUF9NRF9DVFhfbWQ7CisrCQlkMmlfQVNJZGVudGlmaWVyQ2hvaWNlOworKwkJQklPX21ldGhvZF9uYW1lOworKwkJRVZQX0NJUEhFUl9DVFhfaXZfbGVuZ3RoOworKwkJQVNJZE9yUmFuZ2VfZnJlZTsKKysJCUFTSWRlbnRpZmllckNob2ljZV9mcmVlOworKwkJQklPX2dldF9jYWxsYmFja19hcmc7CisrCQlCSU9fc2V0X2NhbGxiYWNrOworKwkJZDJpX0FTSWRPclJhbmdlOworKwkJaTJkX0FTSWRlbnRpZmllcnM7CisrCQlTRUVEX2RlY3J5cHQ7CisrCQlTRUVEX2VuY3J5cHQ7CisrCQlTRUVEX2NiY19lbmNyeXB0OworKwkJRVZQX3NlZWRfb2ZiOworKwkJU0VFRF9jZmIxMjhfZW5jcnlwdDsKKysJCVNFRURfb2ZiMTI4X2VuY3J5cHQ7CisrCQlFVlBfc2VlZF9jYmM7CisrCQlTRUVEX2VjYl9lbmNyeXB0OworKwkJRVZQX3NlZWRfZWNiOworKwkJU0VFRF9zZXRfa2V5OworKwkJRVZQX3NlZWRfY2ZiMTI4OworKwkJWDUwOV9FWFRFTlNJT05TX2l0OworKwkJWDUwOV9nZXQxX29jc3A7CisrCQlPQ1NQX1JFUV9DVFhfZnJlZTsKKysJCWkyZF9YNTA5X0VYVEVOU0lPTlM7CisrCQlPQ1NQX3NlbmRyZXFfbmJpbzsKKysJCU9DU1Bfc2VuZHJlcV9uZXc7CisrCQlkMmlfWDUwOV9FWFRFTlNJT05TOworKwkJWDUwOV9BTEdPUlNfaXQ7CisrCQlYNTA5X0FMR09SX2dldDA7CisrCQlYNTA5X0FMR09SX3NldDA7CisrCQlBRVNfdW53cmFwX2tleTsKKysJCUFFU193cmFwX2tleTsKKysJCVg1MDlhdF9nZXQwX2RhdGFfYnlfT0JKOworKwkJQVNOMV9UWVBFX3NldDE7CisrCQlBU04xX1NUUklOR19zZXQwOworKwkJaTJkX1g1MDlfQUxHT1JTOworKwkJQklPX2ZfemxpYjsKKysJCUNPTVBfemxpYl9jbGVhbnVwOworKwkJZDJpX1g1MDlfQUxHT1JTOworKwkJQ01TX1JlY2VpcHRSZXF1ZXN0X2ZyZWU7CisrCQlQRU1fd3JpdGVfQ01TOworKwkJQ01TX2FkZDBfQ2VydGlmaWNhdGVDaG9pY2VzOworKwkJQ01TX3Vuc2lnbmVkX2FkZDFfYXR0cl9ieV9PQko7CisrCQlFUlJfbG9hZF9DTVNfc3RyaW5nczsKKysJCUNNU19zaWduX3JlY2VpcHQ7CisrCQlpMmRfQ01TX0NvbnRlbnRJbmZvOworKwkJQ01TX3NpZ25lZF9kZWxldGVfYXR0cjsKKysJCWQyaV9DTVNfYmlvOworKwkJQ01TX3Vuc2lnbmVkX2dldF9hdHRyX2J5X05JRDsKKysJCUNNU192ZXJpZnk7CisrCQlTTUlNRV9yZWFkX0NNUzsKKysJCUNNU19kZWNyeXB0X3NldDFfa2V5OworKwkJQ01TX1NpZ25lckluZm9fZ2V0MF9hbGdzOworKwkJQ01TX2FkZDFfY2VydDsKKysJCUNNU19zZXRfZGV0YWNoZWQ7CisrCQlDTVNfZW5jcnlwdDsKKysJCUNNU19FbnZlbG9wZWREYXRhX2NyZWF0ZTsKKysJCUNNU191bmNvbXByZXNzOworKwkJQ01TX2FkZDBfY3JsOworKwkJQ01TX1NpZ25lckluZm9fdmVyaWZ5X2NvbnRlbnQ7CisrCQlDTVNfdW5zaWduZWRfZ2V0MF9kYXRhX2J5X09CSjsKKysJCVBFTV93cml0ZV9iaW9fQ01TOworKwkJQ01TX3Vuc2lnbmVkX2dldF9hdHRyOworKwkJQ01TX1JlY2lwaWVudEluZm9fa3RyaV9jZXJ0X2NtcDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2t0cmlfZ2V0MF9hbGdzOworKwkJQ01TX1JlY2lwSW5mb19rdHJpX2dldDBfYWxnczsKKysJCUNNU19Db250ZW50SW5mb19mcmVlOworKwkJQ01TX2ZpbmFsOworKwkJQ01TX2FkZF9zaW1wbGVfc21pbWVjYXA7CisrCQlDTVNfU2lnbmVySW5mb192ZXJpZnk7CisrCQlDTVNfZGF0YTsKKysJCUNNU19Db250ZW50SW5mb19pdDsKKysJCWQyaV9DTVNfUmVjZWlwdFJlcXVlc3Q7CisrCQlDTVNfY29tcHJlc3M7CisrCQlDTVNfZGlnZXN0X2NyZWF0ZTsKKysJCUNNU19TaWduZXJJbmZvX2NlcnRfY21wOworKwkJQ01TX1NpZ25lckluZm9fc2lnbjsKKysJCUNNU19kYXRhX2NyZWF0ZTsKKysJCWkyZF9DTVNfYmlvOworKwkJQ01TX0VuY3J5cHRlZERhdGFfc2V0MV9rZXk7CisrCQlDTVNfZGVjcnlwdDsKKysJCWludF9zbWltZV93cml0ZV9BU04xOworKwkJQ01TX3Vuc2lnbmVkX2RlbGV0ZV9hdHRyOworKwkJQ01TX3Vuc2lnbmVkX2dldF9hdHRyX2NvdW50OworKwkJQ01TX2FkZF9zbWltZWNhcDsKKysJCVBFTV9yZWFkX0NNUzsKKysJCUNNU19zaWduZWRfZ2V0X2F0dHJfYnlfT0JKOworKwkJZDJpX0NNU19Db250ZW50SW5mbzsKKysJCUNNU19hZGRfc3RhbmRhcmRfc21pbWVjYXA7CisrCQlDTVNfQ29udGVudEluZm9fbmV3OworKwkJQ01TX1JlY2lwaWVudEluZm9fdHlwZTsKKysJCUNNU19nZXQwX3R5cGU7CisrCQlDTVNfaXNfZGV0YWNoZWQ7CisrCQlDTVNfc2lnbjsKKysJCUNNU19zaWduZWRfYWRkMV9hdHRyOworKwkJQ01TX3Vuc2lnbmVkX2dldF9hdHRyX2J5X09CSjsKKysJCVNNSU1FX3dyaXRlX0NNUzsKKysJCUNNU19FbmNyeXB0ZWREYXRhX2RlY3J5cHQ7CisrCQlDTVNfZ2V0MF9SZWNpcGllbnRJbmZvczsKKysJCUNNU19hZGQwX1Jldm9jYXRpb25JbmZvQ2hvaWNlOworKwkJQ01TX2RlY3J5cHRfc2V0MV9wa2V5OworKwkJQ01TX1NpZ25lckluZm9fc2V0MV9zaWduZXJfY2VydDsKKysJCUNNU19nZXQwX3NpZ25lcnM7CisrCQlDTVNfUmVjZWlwdFJlcXVlc3RfZ2V0MF92YWx1ZXM7CisrCQlDTVNfc2lnbmVkX2dldDBfZGF0YV9ieV9PQko7CisrCQlDTVNfZ2V0MF9TaWduZXJJbmZvczsKKysJCUNNU19hZGQwX2NlcnQ7CisrCQlDTVNfRW5jcnlwdGVkRGF0YV9lbmNyeXB0OworKwkJQ01TX2RpZ2VzdF92ZXJpZnk7CisrCQlDTVNfc2V0MV9zaWduZXJzX2NlcnRzOworKwkJQ01TX3NpZ25lZF9nZXRfYXR0cjsKKysJCUNNU19SZWNpcGllbnRJbmZvX3NldDBfa2V5OworKwkJQ01TX1NpZ25lZERhdGFfaW5pdDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2tla3JpX2dldDBfaWQ7CisrCQlDTVNfdmVyaWZ5X3JlY2VpcHQ7CisrCQlDTVNfUmVjZWlwdFJlcXVlc3RfaXQ7CisrCQlQRU1fcmVhZF9iaW9fQ01TOworKwkJQ01TX2dldDFfY3JsczsKKysJCUNNU19hZGQwX3JlY2lwaWVudF9rZXk7CisrCQlTTUlNRV9yZWFkX0FTTjE7CisrCQlDTVNfUmVjZWlwdFJlcXVlc3RfbmV3OworKwkJQ01TX2dldDBfY29udGVudDsKKysJCUNNU19nZXQxX1JlY2VpcHRSZXF1ZXN0OworKwkJQ01TX3NpZ25lZF9hZGQxX2F0dHJfYnlfT0JKOworKwkJQ01TX1JlY2lwaWVudEluZm9fa2VrcmlfaWRfY21wOworKwkJQ01TX2FkZDFfUmVjZWlwdFJlcXVlc3Q7CisrCQlDTVNfU2lnbmVySW5mb19nZXQwX3NpZ25lcl9pZDsKKysJCUNNU191bnNpZ25lZF9hZGQxX2F0dHJfYnlfTklEOworKwkJQ01TX3Vuc2lnbmVkX2FkZDFfYXR0cjsKKysJCUNNU19zaWduZWRfZ2V0X2F0dHJfYnlfTklEOworKwkJQ01TX2dldDFfY2VydHM7CisrCQlDTVNfc2lnbmVkX2FkZDFfYXR0cl9ieV9OSUQ7CisrCQlDTVNfdW5zaWduZWRfYWRkMV9hdHRyX2J5X3R4dDsKKysJCUNNU19kYXRhRmluYWw7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rdHJpX2dldDBfc2lnbmVyX2lkOworKwkJQ01TX1JlY2lwSW5mb19rdHJpX2dldDBfc2lncl9pZDsKKysJCWkyZF9DTVNfUmVjZWlwdFJlcXVlc3Q7CisrCQlDTVNfYWRkMV9yZWNpcGllbnRfY2VydDsKKysJCUNNU19kYXRhSW5pdDsKKysJCUNNU19zaWduZWRfYWRkMV9hdHRyX2J5X3R4dDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2RlY3J5cHQ7CisrCQlDTVNfc2lnbmVkX2dldF9hdHRyX2NvdW50OworKwkJQ01TX2dldDBfZUNvbnRlbnRUeXBlOworKwkJQ01TX3NldDFfZUNvbnRlbnRUeXBlOworKwkJQ01TX1JlY2VpcHRSZXF1ZXN0X2NyZWF0ZTA7CisrCQlDTVNfYWRkMV9zaWduZXI7CisrCQlDTVNfUmVjaXBpZW50SW5mb19zZXQwX3BrZXk7CisrCQlFTkdJTkVfc2V0X2xvYWRfc3NsX2NsaWVudF9jZXJ0X2Z1bmN0aW9uOworKwkJRU5HSU5FX3NldF9sZF9zc2xfY2xudF9jZXJ0X2ZuOworKwkJRU5HSU5FX2dldF9zc2xfY2xpZW50X2NlcnRfZnVuY3Rpb247CisrCQlFTkdJTkVfZ2V0X3NzbF9jbGllbnRfY2VydF9mbjsKKysJCUVOR0lORV9sb2FkX3NzbF9jbGllbnRfY2VydDsKKysJCUVOR0lORV9sb2FkX2NhcGk7CisrCQlPUEVOU1NMX2lzc2VydmljZTsKKysJCUZJUFNfZHNhX3NpZ19kZWNvZGU7CisrCQlFVlBfQ0lQSEVSX0NUWF9jbGVhcl9mbGFnczsKKysJCUZJUFNfcmFuZF9zdGF0dXM7CisrCQlGSVBTX3JhbmRfc2V0X2tleTsKKysJCUNSWVBUT19zZXRfbWVtX2luZm9fZnVuY3Rpb25zOworKwkJUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4OworKwkJaW50X0VSUl9zZXRfc3RhdGVfZnVuYzsKKysJCWludF9FVlBfTURfc2V0X2VuZ2luZV9jYWxsYmFja3M7CisrCQlpbnRfQ1JZUFRPX3NldF9kb19keW5sb2NrX2NhbGxiYWNrOworKwkJRklQU19ybmdfc3RpY2s7CisrCQlFVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3M7CisrCQlCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4OworKwkJRklQU19zZWxmdGVzdF9jaGVjazsKKysJCUZJUFNfcmFuZF9zZXRfZHQ7CisrCQlDUllQVE9fZGJnX3BvcF9pbmZvOworKwkJRklQU19kc2FfZnJlZTsKKysJCVJTQV9YOTMxX2Rlcml2ZV9leDsKKysJCUZJUFNfcnNhX25ldzsKKysJCUZJUFNfcmFuZF9ieXRlczsKKysJCWZpcHNfY2lwaGVyX3Rlc3Q7CisrCQlFVlBfQ0lQSEVSX0NUWF90ZXN0X2ZsYWdzOworKwkJQ1JZUFRPX21hbGxvY19kZWJ1Z19pbml0OworKwkJQ1JZUFRPX2RiZ19wdXNoX2luZm87CisrCQlGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbjsKKysJCUZJUFNfZGhfbmV3OworKwkJRklQU19jb3JydXB0X2RzYV9rZXlnZW47CisrCQlGSVBTX2RoX2ZyZWU7CisrCQlmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Q7CisrCQlFVlBfYWRkX2FsZ19tb2R1bGU7CisrCQlpbnRfUkFORF9pbml0X2VuZ2luZV9jYWxsYmFja3M7CisrCQlpbnRfRVZQX0NJUEhFUl9zZXRfZW5naW5lX2NhbGxiYWNrczsKKysJCWludF9FVlBfTURfaW5pdF9lbmdpbmVfY2FsbGJhY2tzOworKwkJRklQU19yYW5kX3Rlc3RfbW9kZTsKKysJCUZJUFNfcmFuZF9yZXNldDsKKysJCUZJUFNfZHNhX25ldzsKKysJCWludF9SQU5EX3NldF9jYWxsYmFja3M7CisrCQlCTl9YOTMxX2Rlcml2ZV9wcmltZV9leDsKKysJCWludF9FUlJfbGliX2luaXQ7CisrCQlpbnRfRVZQX0NJUEhFUl9pbml0X2VuZ2luZV9jYWxsYmFja3M7CisrCQlGSVBTX3JzYV9mcmVlOworKwkJRklQU19kc2Ffc2lnX2VuY29kZTsKKysJCUNSWVBUT19kYmdfcmVtb3ZlX2FsbF9pbmZvOworKwkJT1BFTlNTTF9pbml0OworKwkJQ1JZUFRPX3N0cmR1cDsKKysJCUpQQUtFX1NURVAzQV9wcm9jZXNzOworKwkJSlBBS0VfU1RFUDFfcmVsZWFzZTsKKysJCUpQQUtFX2dldF9zaGFyZWRfa2V5OworKwkJSlBBS0VfU1RFUDNCX2luaXQ7CisrCQlKUEFLRV9TVEVQMV9nZW5lcmF0ZTsKKysJCUpQQUtFX1NURVAxX2luaXQ7CisrCQlKUEFLRV9TVEVQM0JfcHJvY2VzczsKKysJCUpQQUtFX1NURVAyX2dlbmVyYXRlOworKwkJSlBBS0VfQ1RYX25ldzsKKysJCUpQQUtFX0NUWF9mcmVlOworKwkJSlBBS0VfU1RFUDNCX3JlbGVhc2U7CisrCQlKUEFLRV9TVEVQM0FfcmVsZWFzZTsKKysJCUpQQUtFX1NURVAyX3Byb2Nlc3M7CisrCQlKUEFLRV9TVEVQM0JfZ2VuZXJhdGU7CisrCQlKUEFLRV9TVEVQMV9wcm9jZXNzOworKwkJSlBBS0VfU1RFUDNBX2dlbmVyYXRlOworKwkJSlBBS0VfU1RFUDJfcmVsZWFzZTsKKysJCUpQQUtFX1NURVAzQV9pbml0OworKwkJRVJSX2xvYWRfSlBBS0Vfc3RyaW5nczsKKysJCUpQQUtFX1NURVAyX2luaXQ7CisrCQlwcXVldWVfc2l6ZTsKKysJCWkyZF9UU19BQ0NVUkFDWTsKKysJCWkyZF9UU19NU0dfSU1QUklOVF9mcDsKKysJCWkyZF9UU19NU0dfSU1QUklOVDsKKysJCUVWUF9QS0VZX3ByaW50X3B1YmxpYzsKKysJCUVWUF9QS0VZX0NUWF9uZXc7CisrCQlpMmRfVFNfVFNUX0lORk87CisrCQlFVlBfUEtFWV9hc24xX2ZpbmQ7CisrCQlEU09fTUVUSE9EX2Jlb3M7CisrCQlUU19DT05GX2xvYWRfY2VydDsKKysJCVRTX1JFUV9nZXRfZXh0OworKwkJRVZQX1BLRVlfc2lnbl9pbml0OworKwkJQVNOMV9pdGVtX3ByaW50OworKwkJVFNfVFNUX0lORk9fc2V0X25vbmNlOworKwkJVFNfUkVTUF9kdXA7CisrCQlFTkdJTkVfcmVnaXN0ZXJfcGtleV9tZXRoczsKKysJCUVWUF9QS0VZX2FzbjFfYWRkMDsKKysJCVBLQ1M3X2FkZDBfYXR0cmliX3NpZ25pbmdfdGltZTsKKysJCWkyZF9UU19UU1RfSU5GT19mcDsKKysJCUJJT19hc24xX2dldF9wcmVmaXg7CisrCQlUU19UU1RfSU5GT19zZXRfdGltZTsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2RlY3J5cHQ7CisrCQlFVlBfUEtFWV9zZXRfdHlwZV9zdHI7CisrCQlFVlBfUEtFWV9DVFhfZ2V0X2tleWdlbl9pbmZvOworKwkJVFNfUkVRX3NldF9wb2xpY3lfaWQ7CisrCQlkMmlfVFNfUkVTUF9mcDsKKysJCUVOR0lORV9nZXRfcGtleV9hc24xX21ldGhfZW5naW5lOworKwkJRU5HSU5FX2dldF9wa2V5X2FzbjFfbWV0aF9lbmc7CisrCQlXSElSTFBPT0xfSW5pdDsKKysJCVRTX1JFU1Bfc2V0X3N0YXR1c19pbmZvOworKwkJRVZQX1BLRVlfa2V5Z2VuOworKwkJRVZQX0RpZ2VzdFNpZ25Jbml0OworKwkJVFNfQUNDVVJBQ1lfc2V0X21pbGxpczsKKysJCVRTX1JFUV9kdXA7CisrCQlHRU5FUkFMX05BTUVfZHVwOworKwkJQVNOMV9TRVFVRU5DRV9BTllfaXQ7CisrCQlXSElSTFBPT0w7CisrCQlYNTA5X1NUT1JFX2dldDFfY3JsczsKKysJCUVOR0lORV9nZXRfcGtleV9hc24xX21ldGg7CisrCQlFVlBfUEtFWV9hc24xX25ldzsKKysJCUJJT19uZXdfTkRFRjsKKysJCUVOR0lORV9nZXRfcGtleV9tZXRoOworKwkJVFNfTVNHX0lNUFJJTlRfc2V0X2FsZ287CisrCQlpMmRfVFNfVFNUX0lORk9fYmlvOworKwkJVFNfVFNUX0lORk9fc2V0X29yZGVyaW5nOworKwkJVFNfVFNUX0lORk9fZ2V0X2V4dF9ieV9PQko7CisrCQlDUllQVE9fVEhSRUFESURfc2V0X3BvaW50ZXI7CisrCQlUU19DT05GX2dldF90c2Ffc2VjdGlvbjsKKysJCVNNSU1FX3dyaXRlX0FTTjE7CisrCQlUU19SRVNQX0NUWF9zZXRfc2lnbmVyX2tleTsKKysJCUVWUF9QS0VZX2VuY3J5cHRfb2xkOworKwkJRVZQX1BLRVlfZW5jcnlwdF9pbml0OworKwkJQ1JZUFRPX1RIUkVBRElEX2NweTsKKysJCUFTTjFfUENUWF9nZXRfY2VydF9mbGFnczsKKysJCWkyZF9FU1NfU0lHTklOR19DRVJUOworKwkJVFNfQ09ORl9sb2FkX2tleTsKKysJCWkyZF9BU04xX1NFUVVFTkNFX0FOWTsKKysJCWQyaV9UU19NU0dfSU1QUklOVF9iaW87CisrCQlFVlBfUEtFWV9hc24xX3NldF9wdWJsaWM7CisrCQliMmlfUHVibGljS2V5X2JpbzsKKysJCUJJT19hc24xX3NldF9wcmVmaXg7CisrCQlFVlBfUEtFWV9uZXdfbWFjX2tleTsKKysJCUJJT19uZXdfQ01TOworKwkJQ1JZUFRPX1RIUkVBRElEX2NtcDsKKysJCVRTX1JFUV9leHRfZnJlZTsKKysJCUVWUF9QS0VZX2FzbjFfc2V0X2ZyZWU7CisrCQlFVlBfUEtFWV9nZXQwX2FzbjE7CisrCQlkMmlfTkVUU0NBUEVfWDUwOTsKKysJCUVWUF9QS0VZX3ZlcmlmeV9yZWNvdmVyX2luaXQ7CisrCQlFVlBfUEtFWV9DVFhfc2V0X2RhdGE7CisrCQlFVlBfUEtFWV9rZXlnZW5faW5pdDsKKysJCVRTX1JFU1BfQ1RYX3NldF9zdGF0dXNfaW5mbzsKKysJCVRTX01TR19JTVBSSU5UX2dldF9hbGdvOworKwkJVFNfUkVRX3ByaW50X2JpbzsKKysJCUVWUF9QS0VZX0NUWF9jdHJsX3N0cjsKKysJCUVWUF9QS0VZX2dldF9kZWZhdWx0X2RpZ2VzdF9uaWQ7CisrCQlQRU1fd3JpdGVfYmlvX1BLQ1M3X3N0cmVhbTsKKysJCVRTX01TR19JTVBSSU5UX3ByaW50X2JpbzsKKysJCUJOX2FzYzJibjsKKysJCVRTX1JFUV9nZXRfcG9saWN5X2lkOworKwkJRU5HSU5FX3NldF9kZWZhdWx0X3BrZXlfYXNuMV9tZXRoczsKKysJCUVOR0lORV9zZXRfZGVmX3BrZXlfYXNuMV9tZXRoczsKKysJCWQyaV9UU19BQ0NVUkFDWTsKKysJCURTT19nbG9iYWxfbG9va3VwOworKwkJVFNfQ09ORl9zZXRfdHNhX25hbWU7CisrCQlpMmRfQVNOMV9TRVRfQU5ZOworKwkJRU5HSU5FX2xvYWRfZ29zdDsKKysJCVdISVJMUE9PTF9CaXRVcGRhdGU7CisrCQlBU04xX1BDVFhfZ2V0X2ZsYWdzOworKwkJVFNfVFNUX0lORk9fZ2V0X2V4dF9ieV9OSUQ7CisrCQlUU19SRVNQX25ldzsKKysJCUVTU19DRVJUX0lEX2R1cDsKKysJCVRTX1NUQVRVU19JTkZPX2R1cDsKKysJCVRTX1JFUV9kZWxldGVfZXh0OworKwkJRVZQX0RpZ2VzdFZlcmlmeUZpbmFsOworKwkJRVZQX1BLRVlfcHJpbnRfcGFyYW1zOworKwkJaTJkX0NNU19iaW9fc3RyZWFtOworKwkJVFNfUkVRX2dldF9tc2dfaW1wcmludDsKKysJCU9CSl9maW5kX3NpZ2lkX2J5X2FsZ3M7CisrCQlUU19UU1RfSU5GT19nZXRfc2VyaWFsOworKwkJVFNfUkVRX2dldF9ub25jZTsKKysJCVg1MDlfUFVCS0VZX3NldDBfcGFyYW07CisrCQlFVlBfUEtFWV9DVFhfc2V0MF9rZXlnZW5faW5mbzsKKysJCURJU1RfUE9JTlRfc2V0X2RwbmFtZTsKKysJCWkyZF9JU1NVSU5HX0RJU1RfUE9JTlQ7CisrCQlBU04xX1NFVF9BTllfaXQ7CisrCQlFVlBfUEtFWV9DVFhfZ2V0X2RhdGE7CisrCQlUU19TVEFUVVNfSU5GT19wcmludF9iaW87CisrCQlFVlBfUEtFWV9kZXJpdmVfaW5pdDsKKysJCWQyaV9UU19UU1RfSU5GTzsKKysJCUVWUF9QS0VZX2FzbjFfYWRkX2FsaWFzOworKwkJZDJpX1RTX1JFU1BfYmlvOworKwkJT1RIRVJOQU1FX2NtcDsKKysJCUdFTkVSQUxfTkFNRV9zZXQwX3ZhbHVlOworKwkJUEtDUzdfUkVDSVBfSU5GT19nZXQwX2FsZzsKKysJCVRTX1JFU1BfQ1RYX25ldzsKKysJCVRTX1JFU1Bfc2V0X3RzdF9pbmZvOworKwkJUEtDUzdfZmluYWw7CisrCQlFVlBfUEtFWV9iYXNlX2lkOworKwkJVFNfUkVTUF9DVFhfc2V0X3NpZ25lcl9jZXJ0OworKwkJVFNfUkVRX3NldF9tc2dfaW1wcmludDsKKysJCUVWUF9QS0VZX0NUWF9jdHJsOworKwkJVFNfQ09ORl9zZXRfZGlnZXN0czsKKysJCWQyaV9UU19NU0dfSU1QUklOVDsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2N0cmw7CisrCQlUU19SRVFfZ2V0X2V4dF9ieV9OSUQ7CisrCQlQS0NTNV9wYmVfc2V0MF9hbGdvcjsKKysJCUJOX0JMSU5ESU5HX3RocmVhZF9pZDsKKysJCVRTX0FDQ1VSQUNZX25ldzsKKysJCVg1MDlfQ1JMX01FVEhPRF9mcmVlOworKwkJQVNOMV9QQ1RYX2dldF9ubV9mbGFnczsKKysJCUVWUF9QS0VZX21ldGhfc2V0X3NpZ247CisrCQlDUllQVE9fVEhSRUFESURfY3VycmVudDsKKysJCUVWUF9QS0VZX2RlY3J5cHRfaW5pdDsKKysJCU5FVFNDQVBFX1g1MDlfZnJlZTsKKysJCWkyYl9QVktfYmlvOworKwkJRVZQX1BLRVlfcHJpbnRfcHJpdmF0ZTsKKysJCUdFTkVSQUxfTkFNRV9nZXQwX3ZhbHVlOworKwkJYjJpX1BWS19iaW87CisrCQlBU04xX1VUQ1RJTUVfYWRqOworKwkJVFNfVFNUX0lORk9fbmV3OworKwkJRVZQX01EX2RvX2FsbF9zb3J0ZWQ7CisrCQlUU19DT05GX3NldF9kZWZhdWx0X2VuZ2luZTsKKysJCVRTX0FDQ1VSQUNZX3NldF9zZWNvbmRzOworKwkJVFNfVFNUX0lORk9fZ2V0X3RpbWU7CisrCQlQS0NTOF9wa2V5X2dldDA7CisrCQlFVlBfUEtFWV9hc24xX2dldDA7CisrCQlPQkpfYWRkX3NpZ2lkOworKwkJUEtDUzdfU0lHTkVSX0lORk9fc2lnbjsKKysJCUVWUF9QS0VZX3BhcmFtZ2VuX2luaXQ7CisrCQlFVlBfUEtFWV9zaWduOworKwkJT0JKX3NpZ2lkX2ZyZWU7CisrCQlFVlBfUEtFWV9tZXRoX3NldF9pbml0OworKwkJZDJpX0VTU19JU1NVRVJfU0VSSUFMOworKwkJSVNTVUlOR19ESVNUX1BPSU5UX25ldzsKKysJCUFTTjFfVElNRV9hZGo7CisrCQlUU19PQkpfcHJpbnRfYmlvOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfdmVyaWZ5X3JlY292ZXI7CisrCQlFVlBfUEtFWV9tZXRoX3NldF92cmZ5X3JlY292ZXI7CisrCQlUU19SRVNQX2dldF9zdGF0dXNfaW5mbzsKKysJCUNNU19zdHJlYW07CisrCQlFVlBfUEtFWV9DVFhfc2V0X2NiOworKwkJUEtDUzdfdG9fVFNfVFNUX0lORk87CisrCQlBU04xX1BDVFhfZ2V0X29pZF9mbGFnczsKKysJCVRTX1RTVF9JTkZPX2FkZF9leHQ7CisrCQlFVlBfUEtFWV9tZXRoX3NldF9kZXJpdmU7CisrCQlpMmRfVFNfUkVTUF9mcDsKKysJCWkyZF9UU19NU0dfSU1QUklOVF9iaW87CisrCQlUU19SRVNQX0NUWF9zZXRfYWNjdXJhY3k7CisrCQlUU19SRVFfc2V0X25vbmNlOworKwkJRVNTX0NFUlRfSURfbmV3OworKwkJRU5HSU5FX3BrZXlfYXNuMV9maW5kX3N0cjsKKysJCVRTX1JFUV9nZXRfZXh0X2NvdW50OworKwkJQlVGX3JldmVyc2U7CisrCQlUU19UU1RfSU5GT19wcmludF9iaW87CisrCQlkMmlfSVNTVUlOR19ESVNUX1BPSU5UOworKwkJRU5HSU5FX2dldF9wa2V5X21ldGhzOworKwkJaTJiX1ByaXZhdGVLZXlfYmlvOworKwkJaTJkX1RTX1JFU1A7CisrCQliMmlfUHVibGljS2V5OworKwkJVFNfVkVSSUZZX0NUWF9jbGVhbnVwOworKwkJVFNfU1RBVFVTX0lORk9fZnJlZTsKKysJCVRTX1JFU1BfdmVyaWZ5X3Rva2VuOworKwkJT0JKX2JzZWFyY2hfZXhfOworKwkJQVNOMV9ibl9wcmludDsKKysJCUVWUF9QS0VZX2FzbjFfZ2V0X2NvdW50OworKwkJRU5HSU5FX3JlZ2lzdGVyX3BrZXlfYXNuMV9tZXRoczsKKysJCUFTTjFfUENUWF9zZXRfbm1fZmxhZ3M7CisrCQlFVlBfRGlnZXN0VmVyaWZ5SW5pdDsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9wa2V5X21ldGhzOworKwkJVFNfVFNUX0lORk9fZ2V0X3BvbGljeV9pZDsKKysJCVRTX1JFUV9nZXRfY2VydF9yZXE7CisrCQlYNTA5X0NSTF9zZXRfbWV0aF9kYXRhOworKwkJUEtDUzhfcGtleV9zZXQwOworKwkJQVNOMV9TVFJJTkdfY29weTsKKysJCWQyaV9UU19UU1RfSU5GT19mcDsKKysJCVg1MDlfQ1JMX21hdGNoOworKwkJRVZQX1BLRVlfYXNuMV9zZXRfcHJpdmF0ZTsKKysJCVRTX1RTVF9JTkZPX2dldF9leHRfZDJpOworKwkJVFNfUkVTUF9DVFhfYWRkX3BvbGljeTsKKysJCWQyaV9UU19SRVNQOworKwkJVFNfQ09ORl9sb2FkX2NlcnRzOworKwkJVFNfVFNUX0lORk9fZ2V0X21zZ19pbXByaW50OworKwkJRVJSX2xvYWRfVFNfc3RyaW5nczsKKysJCVRTX1RTVF9JTkZPX2dldF92ZXJzaW9uOworKwkJRVZQX1BLRVlfQ1RYX2R1cDsKKysJCUVWUF9QS0VZX21ldGhfc2V0X3ZlcmlmeTsKKysJCWkyYl9QdWJsaWNLZXlfYmlvOworKwkJVFNfQ09ORl9zZXRfY2VydHM7CisrCQlFVlBfUEtFWV9hc24xX2dldDBfaW5mbzsKKysJCVRTX1ZFUklGWV9DVFhfZnJlZTsKKysJCVRTX1JFUV9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJVFNfUkVTUF9DVFhfc2V0X3NlcmlhbF9jYjsKKysJCVg1MDlfQ1JMX2dldF9tZXRoX2RhdGE7CisrCQlUU19SRVNQX0NUWF9zZXRfdGltZV9jYjsKKysJCVRTX01TR19JTVBSSU5UX2dldF9tc2c7CisrCQlUU19UU1RfSU5GT19leHRfZnJlZTsKKysJCVRTX1JFUV9nZXRfdmVyc2lvbjsKKysJCVRTX1JFUV9hZGRfZXh0OworKwkJRVZQX1BLRVlfQ1RYX3NldF9hcHBfZGF0YTsKKysJCU9CSl9ic2VhcmNoXzsKKysJCUVWUF9QS0VZX21ldGhfc2V0X3ZlcmlmeWN0eDsKKysJCWkyZF9QS0NTN19iaW9fc3RyZWFtOworKwkJQ1JZUFRPX1RIUkVBRElEX3NldF9udW1lcmljOworKwkJUEtDUzdfc2lnbl9hZGRfc2lnbmVyOworKwkJZDJpX1RTX1RTVF9JTkZPX2JpbzsKKysJCVRTX1RTVF9JTkZPX2dldF9vcmRlcmluZzsKKysJCVRTX1JFU1BfcHJpbnRfYmlvOworKwkJVFNfVFNUX0lORk9fZ2V0X2V4dHM7CisrCQlITUFDX0NUWF9jb3B5OworKwkJUEtDUzVfcGJlMl9zZXRfaXY7CisrCQlFTkdJTkVfZ2V0X3BrZXlfYXNuMV9tZXRoczsKKysJCWIyaV9Qcml2YXRlS2V5OworKwkJRVZQX1BLRVlfQ1RYX2dldF9hcHBfZGF0YTsKKysJCVRTX1JFUV9zZXRfY2VydF9yZXE7CisrCQlDUllQVE9fVEhSRUFESURfc2V0X2NhbGxiYWNrOworKwkJVFNfQ09ORl9zZXRfc2VyaWFsOworKwkJVFNfVFNUX0lORk9fZnJlZTsKKysJCWQyaV9UU19SRVFfZnA7CisrCQlUU19SRVNQX3ZlcmlmeV9yZXNwb25zZTsKKysJCWkyZF9FU1NfSVNTVUVSX1NFUklBTDsKKysJCVRTX0FDQ1VSQUNZX2dldF9zZWNvbmRzOworKwkJRVZQX0NJUEhFUl9kb19hbGw7CisrCQliMmlfUHJpdmF0ZUtleV9iaW87CisrCQlPQ1NQX0NFUlRJRF9kdXA7CisrCQlYNTA5X1BVQktFWV9nZXQwX3BhcmFtOworKwkJVFNfTVNHX0lNUFJJTlRfZHVwOworKwkJUEtDUzdfcHJpbnRfY3R4OworKwkJaTJkX1RTX1JFUV9iaW87CisrCQlFVlBfd2hpcmxwb29sOworKwkJRVZQX1BLRVlfYXNuMV9zZXRfcGFyYW07CisrCQlFVlBfUEtFWV9tZXRoX3NldF9lbmNyeXB0OworKwkJQVNOMV9QQ1RYX3NldF9mbGFnczsKKysJCWkyZF9FU1NfQ0VSVF9JRDsKKysJCVRTX1ZFUklGWV9DVFhfbmV3OworKwkJVFNfUkVTUF9DVFhfc2V0X2V4dGVuc2lvbl9jYjsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfcGtleV9tZXRoczsKKysJCVRTX1JFU1BfQ1RYX3NldF9zdGF0dXNfaW5mb19jb25kOworKwkJVFNfUkVTUF9DVFhfc2V0X3N0YXRfaW5mb19jb25kOworKwkJRVZQX1BLRVlfdmVyaWZ5OworKwkJV0hJUkxQT09MX0ZpbmFsOworKwkJWDUwOV9DUkxfTUVUSE9EX25ldzsKKysJCUVWUF9EaWdlc3RTaWduRmluYWw7CisrCQlUU19SRVNQX0NUWF9zZXRfZGVmX3BvbGljeTsKKysJCU5FVFNDQVBFX1g1MDlfaXQ7CisrCQlUU19SRVNQX2NyZWF0ZV9yZXNwb25zZTsKKysJCVBLQ1M3X1NJR05FUl9JTkZPX2dldDBfYWxnczsKKysJCVRTX1RTVF9JTkZPX2dldF9ub25jZTsKKysJCUVWUF9QS0VZX2RlY3J5cHRfb2xkOworKwkJVFNfVFNUX0lORk9fc2V0X3BvbGljeV9pZDsKKysJCVRTX0NPTkZfc2V0X2Vzc19jZXJ0X2lkX2NoYWluOworKwkJRVZQX1BLRVlfQ1RYX2dldDBfcGtleTsKKysJCWQyaV9UU19SRVE7CisrCQlFVlBfUEtFWV9hc24xX2ZpbmRfc3RyOworKwkJQklPX2ZfYXNuMTsKKysJCUVTU19TSUdOSU5HX0NFUlRfbmV3OworKwkJRVZQX1BCRV9maW5kOworKwkJWDUwOV9DUkxfZ2V0MF9ieV9jZXJ0OworKwkJRVZQX1BLRVlfZGVyaXZlOworKwkJaTJkX1RTX1JFUTsKKysJCVRTX1RTVF9JTkZPX2RlbGV0ZV9leHQ7CisrCQlFU1NfSVNTVUVSX1NFUklBTF9mcmVlOworKwkJQVNOMV9QQ1RYX3NldF9zdHJfZmxhZ3M7CisrCQlFTkdJTkVfZ2V0X3BrZXlfYXNuMV9tZXRoX3N0cjsKKysJCVRTX0NPTkZfc2V0X3NpZ25lcl9rZXk7CisrCQlUU19BQ0NVUkFDWV9nZXRfbWlsbGlzOworKwkJVFNfUkVTUF9nZXRfdG9rZW47CisrCQlUU19BQ0NVUkFDWV9kdXA7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX3BrZXlfYXNuMV9tZXRoczsKKysJCUVOR0lORV9yZWdfYWxsX3BrZXlfYXNuMV9tZXRoczsKKysJCVg1MDlfQ1JMX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCUNSWVBUT19USFJFQURJRF9oYXNoOworKwkJQ01TX0NvbnRlbnRJbmZvX3ByaW50X2N0eDsKKysJCVRTX1JFU1BfZnJlZTsKKysJCUlTU1VJTkdfRElTVF9QT0lOVF9mcmVlOworKwkJRVNTX0lTU1VFUl9TRVJJQUxfbmV3OworKwkJQ01TX2FkZDFfY3JsOworKwkJUEtDUzdfYWRkMV9hdHRyaWJfZGlnZXN0OworKwkJVFNfUkVTUF9DVFhfYWRkX21kOworKwkJVFNfVFNUX0lORk9fZHVwOworKwkJRU5HSU5FX3NldF9wa2V5X2FzbjFfbWV0aHM7CisrCQlQRU1fd3JpdGVfYmlvX1BhcmFtZXRlcnM7CisrCQlUU19UU1RfSU5GT19nZXRfYWNjdXJhY3k7CisrCQlYNTA5X0NSTF9nZXQwX2J5X3NlcmlhbDsKKysJCVRTX1RTVF9JTkZPX3NldF92ZXJzaW9uOworKwkJVFNfUkVTUF9DVFhfZ2V0X3RzdF9pbmZvOworKwkJVFNfUkVTUF92ZXJpZnlfc2lnbmF0dXJlOworKwkJQ1JZUFRPX1RIUkVBRElEX2dldF9jYWxsYmFjazsKKysJCVRTX1RTVF9JTkZPX2dldF90c2E7CisrCQlUU19TVEFUVVNfSU5GT19uZXc7CisrCQlFVlBfUEtFWV9DVFhfZ2V0X2NiOworKwkJVFNfUkVRX2dldF9leHRfZDJpOworKwkJR0VORVJBTF9OQU1FX3NldDBfb3RoZXJuYW1lOworKwkJVFNfVFNUX0lORk9fZ2V0X2V4dF9jb3VudDsKKysJCVRTX1JFU1BfQ1RYX2dldF9yZXF1ZXN0OworKwkJaTJkX05FVFNDQVBFX1g1MDk7CisrCQlFTkdJTkVfZ2V0X3BrZXlfbWV0aF9lbmdpbmU7CisrCQlFVlBfUEtFWV9tZXRoX3NldF9zaWduY3R4OworKwkJRVZQX1BLRVlfYXNuMV9jb3B5OworKwkJQVNOMV9UWVBFX2NtcDsKKysJCUVWUF9DSVBIRVJfZG9fYWxsX3NvcnRlZDsKKysJCUVWUF9QS0VZX0NUWF9mcmVlOworKwkJSVNTVUlOR19ESVNUX1BPSU5UX2l0OworKwkJZDJpX1RTX01TR19JTVBSSU5UX2ZwOworKwkJWDUwOV9TVE9SRV9nZXQxX2NlcnRzOworKwkJRVZQX1BLRVlfQ1RYX2dldF9vcGVyYXRpb247CisrCQlkMmlfRVNTX1NJR05JTkdfQ0VSVDsKKysJCVRTX0NPTkZfc2V0X29yZGVyaW5nOworKwkJRVZQX1BCRV9hbGdfYWRkX3R5cGU7CisrCQlUU19SRVFfc2V0X3ZlcnNpb247CisrCQlFVlBfUEtFWV9nZXQwOworKwkJQklPX2FzbjFfc2V0X3N1ZmZpeDsKKysJCWkyZF9UU19TVEFUVVNfSU5GTzsKKysJCUVWUF9NRF9kb19hbGw7CisrCQlUU19UU1RfSU5GT19zZXRfYWNjdXJhY3k7CisrCQlQS0NTN19hZGRfYXR0cmliX2NvbnRlbnRfdHlwZTsKKysJCUVSUl9yZW1vdmVfdGhyZWFkX3N0YXRlOworKwkJRVZQX1BLRVlfbWV0aF9hZGQwOworKwkJVFNfVFNUX0lORk9fc2V0X3RzYTsKKysJCUVWUF9QS0VZX21ldGhfbmV3OworKwkJV0hJUkxQT09MX1VwZGF0ZTsKKysJCVRTX0NPTkZfc2V0X2FjY3VyYWN5OworKwkJQVNOMV9QQ1RYX3NldF9vaWRfZmxhZ3M7CisrCQlFU1NfU0lHTklOR19DRVJUX2R1cDsKKysJCWQyaV9UU19SRVFfYmlvOworKwkJWDUwOV90aW1lX2Fkal9leDsKKysJCVRTX1JFU1BfQ1RYX2FkZF9mbGFnczsKKysJCWQyaV9UU19TVEFUVVNfSU5GTzsKKysJCVRTX01TR19JTVBSSU5UX3NldF9tc2c7CisrCQlCSU9fYXNuMV9nZXRfc3VmZml4OworKwkJVFNfUkVRX2ZyZWU7CisrCQlFVlBfUEtFWV9tZXRoX2ZyZWU7CisrCQlUU19SRVFfZ2V0X2V4dHM7CisrCQlUU19SRVNQX0NUWF9zZXRfY2xvY2tfcHJlY2lzaW9uX2RpZ2l0czsKKysJCVRTX1JFU1BfQ1RYX3NldF9jbGtfcHJlY19kaWdpdHM7CisrCQlUU19SRVNQX0NUWF9hZGRfZmFpbHVyZV9pbmZvOworKwkJaTJkX1RTX1JFU1BfYmlvOworKwkJRVZQX1BLRVlfQ1RYX2dldDBfcGVlcmtleTsKKysJCVBFTV93cml0ZV9iaW9fQ01TX3N0cmVhbTsKKysJCVRTX1JFUV9uZXc7CisrCQlUU19NU0dfSU1QUklOVF9uZXc7CisrCQlFVlBfUEtFWV9tZXRoX2ZpbmQ7CisrCQlFVlBfUEtFWV9pZDsKKysJCVRTX1RTVF9JTkZPX3NldF9zZXJpYWw7CisrCQlhMmlfR0VORVJBTF9OQU1FOworKwkJVFNfQ09ORl9zZXRfY3J5cHRvX2RldmljZTsKKysJCUVWUF9QS0VZX3ZlcmlmeV9pbml0OworKwkJVFNfQ09ORl9zZXRfcG9saWNpZXM7CisrCQlBU04xX1BDVFhfbmV3OworKwkJRVNTX0NFUlRfSURfZnJlZTsKKysJCUVOR0lORV91bnJlZ2lzdGVyX3BrZXlfbWV0aHM7CisrCQlUU19NU0dfSU1QUklOVF9mcmVlOworKwkJVFNfVkVSSUZZX0NUWF9pbml0OworKwkJUEtDUzdfc3RyZWFtOworKwkJVFNfUkVTUF9DVFhfc2V0X2NlcnRzOworKwkJVFNfQ09ORl9zZXRfZGVmX3BvbGljeTsKKysJCUFTTjFfR0VORVJBTElaRURUSU1FX2FkajsKKysJCU5FVFNDQVBFX1g1MDlfbmV3OworKwkJVFNfQUNDVVJBQ1lfZnJlZTsKKysJCVRTX1JFU1BfZ2V0X3RzdF9pbmZvOworKwkJRVZQX1BLRVlfZGVyaXZlX3NldF9wZWVyOworKwkJUEVNX3JlYWRfYmlvX1BhcmFtZXRlcnM7CisrCQlUU19DT05GX3NldF9jbG9ja19wcmVjaXNpb25fZGlnaXRzOworKwkJVFNfQ09ORl9zZXRfY2xrX3ByZWNfZGlnaXRzOworKwkJRVNTX0lTU1VFUl9TRVJJQUxfZHVwOworKwkJVFNfQUNDVVJBQ1lfZ2V0X21pY3JvczsKKysJCUFTTjFfUENUWF9nZXRfc3RyX2ZsYWdzOworKwkJTkFNRV9DT05TVFJBSU5UU19jaGVjazsKKysJCUFTTjFfQklUX1NUUklOR19jaGVjazsKKysJCVg1MDlfY2hlY2tfYWtpZDsKKysJCUVOR0lORV91bnJlZ2lzdGVyX3BrZXlfYXNuMV9tZXRoczsKKysJCUVOR0lORV91bnJlZ19wa2V5X2FzbjFfbWV0aHM7CisrCQlBU04xX1BDVFhfZnJlZTsKKysJCVBFTV93cml0ZV9iaW9fQVNOMV9zdHJlYW07CisrCQlpMmRfQVNOMV9iaW9fc3RyZWFtOworKwkJVFNfWDUwOV9BTEdPUl9wcmludF9iaW87CisrCQlFVlBfUEtFWV9tZXRoX3NldF9jbGVhbnVwOworKwkJRVZQX1BLRVlfYXNuMV9mcmVlOworKwkJRVNTX1NJR05JTkdfQ0VSVF9mcmVlOworKwkJVFNfVFNUX0lORk9fc2V0X21zZ19pbXByaW50OworKwkJR0VORVJBTF9OQU1FX2NtcDsKKysJCWQyaV9BU04xX1NFVF9BTlk7CisrCQlFTkdJTkVfc2V0X3BrZXlfbWV0aHM7CisrCQlpMmRfVFNfUkVRX2ZwOworKwkJZDJpX0FTTjFfU0VRVUVOQ0VfQU5ZOworKwkJR0VORVJBTF9OQU1FX2dldDBfb3RoZXJOYW1lOworKwkJZDJpX0VTU19DRVJUX0lEOworKwkJT0JKX2ZpbmRfc2lnaWRfYWxnczsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2tleWdlbjsKKysJCVBLQ1M1X1BCS0RGMl9ITUFDOworKwkJRVZQX1BLRVlfcGFyYW1nZW47CisrCQlFVlBfUEtFWV9tZXRoX3NldF9wYXJhbWdlbjsKKysJCUJJT19uZXdfUEtDUzc7CisrCQlFVlBfUEtFWV92ZXJpZnlfcmVjb3ZlcjsKKysJCVRTX2V4dF9wcmludF9iaW87CisrCQlUU19BU04xX0lOVEVHRVJfcHJpbnRfYmlvOworKwkJY2hlY2tfZGVmZXI7CisrCQlEU09fcGF0aGJ5YWRkcjsKKysJCUVWUF9QS0VZX3NldF90eXBlOworKwkJVFNfQUNDVVJBQ1lfc2V0X21pY3JvczsKKysJCVRTX1JFUV90b19UU19WRVJJRllfQ1RYOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfY29weTsKKysJCUFTTjFfUENUWF9zZXRfY2VydF9mbGFnczsKKysJCVRTX1RTVF9JTkZPX2dldF9leHQ7CisrCQlFVlBfUEtFWV9hc24xX3NldF9jdHJsOworKwkJVFNfVFNUX0lORk9fZ2V0X2V4dF9ieV9jcml0aWNhbDsKKysJCUVWUF9QS0VZX0NUWF9uZXdfaWQ7CisrCQlUU19SRVFfZ2V0X2V4dF9ieV9PQko7CisrCQlUU19DT05GX3NldF9zaWduZXJfY2VydDsKKysJCVg1MDlfTkFNRV9oYXNoX29sZDsKKysJCUFTTjFfVElNRV9zZXRfc3RyaW5nOworKwkJRVZQX01EX2ZsYWdzOworKwkJVFNfUkVTUF9DVFhfZnJlZTsKKysJCURTQXBhcmFtc19kdXA7CisrCQlESHBhcmFtc19kdXA7CisrCQlPQ1NQX1JFUV9DVFhfYWRkMV9oZWFkZXI7CisrCQlPQ1NQX1JFUV9DVFhfc2V0MV9yZXE7CisrCQlYNTA5X1NUT1JFX3NldF92ZXJpZnlfY2I7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXQwX2N1cnJlbnRfY3JsOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MF9wYXJlbnRfY3R4OworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MF9jdXJyZW50X2lzc3VlcjsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDBfY3VyX2lzc3VlcjsKKysJCVg1MDlfaXNzdWVyX25hbWVfaGFzaF9vbGQ7CisrCQlYNTA5X3N1YmplY3RfbmFtZV9oYXNoX29sZDsKKysJCUVWUF9DSVBIRVJfQ1RYX2NvcHk7CisrCQlVSV9tZXRob2RfZ2V0X3Byb21wdF9jb25zdHJ1Y3RvcjsKKysJCVVJX21ldGhvZF9nZXRfcHJvbXB0X2NvbnN0cnVjdHI7CisrCQlVSV9tZXRob2Rfc2V0X3Byb21wdF9jb25zdHJ1Y3RvcjsKKysJCVVJX21ldGhvZF9zZXRfcHJvbXB0X2NvbnN0cnVjdHI7CisrCQlFVlBfcmVhZF9wd19zdHJpbmdfbWluOworKwkJQ1JZUFRPX2N0czEyOF9lbmNyeXB0OworKwkJQ1JZUFRPX2N0czEyOF9kZWNyeXB0X2Jsb2NrOworKwkJQ1JZUFRPX2NmYjEyOF8xX2VuY3J5cHQ7CisrCQlDUllQVE9fY2JjMTI4X2VuY3J5cHQ7CisrCQlDUllQVE9fY3RyMTI4X2VuY3J5cHQ7CisrCQlDUllQVE9fb2ZiMTI4X2VuY3J5cHQ7CisrCQlDUllQVE9fY3RzMTI4X2RlY3J5cHQ7CisrCQlDUllQVE9fY3RzMTI4X2VuY3J5cHRfYmxvY2s7CisrCQlDUllQVE9fY2JjMTI4X2RlY3J5cHQ7CisrCQlDUllQVE9fY2ZiMTI4X2VuY3J5cHQ7CisrCQlDUllQVE9fY2ZiMTI4XzhfZW5jcnlwdDsKKysJCVNTTF9yZW5lZ290aWF0ZV9hYmJyZXZpYXRlZDsKKysJCVRMU3YxXzFfbWV0aG9kOworKwkJVExTdjFfMV9jbGllbnRfbWV0aG9kOworKwkJVExTdjFfMV9zZXJ2ZXJfbWV0aG9kOworKwkJU1NMX0NUWF9zZXRfc3JwX2NsaWVudF9wd2RfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF9zcnBfY2xpZW50X3B3ZF9jYjsKKysJCVNTTF9nZXRfc3JwX2c7CisrCQlTU0xfQ1RYX3NldF9zcnBfdXNlcm5hbWVfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF9zcnBfdW5fY2I7CisrCQlTU0xfZ2V0X3NycF91c2VyaW5mbzsKKysJCVNTTF9zZXRfc3JwX3NlcnZlcl9wYXJhbTsKKysJCVNTTF9zZXRfc3JwX3NlcnZlcl9wYXJhbV9wdzsKKysJCVNTTF9nZXRfc3JwX047CisrCQlTU0xfZ2V0X3NycF91c2VybmFtZTsKKysJCVNTTF9DVFhfc2V0X3NycF9wYXNzd29yZDsKKysJCVNTTF9DVFhfc2V0X3NycF9zdHJlbmd0aDsKKysJCVNTTF9DVFhfc2V0X3NycF92ZXJpZnlfcGFyYW1fY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF9zcnBfdmZ5X3BhcmFtX2NiOworKwkJU1NMX0NUWF9zZXRfc3JwX2NiX2FyZzsKKysJCVNTTF9DVFhfc2V0X3NycF91c2VybmFtZTsKKysJCVNTTF9DVFhfU1JQX0NUWF9pbml0OworKwkJU1NMX1NSUF9DVFhfaW5pdDsKKysJCVNSUF9DYWxjX0FfcGFyYW07CisrCQlTUlBfZ2VuZXJhdGVfc2VydmVyX21hc3Rlcl9zZWNyZXQ7CisrCQlTUlBfZ2VuX3NlcnZlcl9tYXN0ZXJfc2VjcmV0OworKwkJU1NMX0NUWF9TUlBfQ1RYX2ZyZWU7CisrCQlTUlBfZ2VuZXJhdGVfY2xpZW50X21hc3Rlcl9zZWNyZXQ7CisrCQlTUlBfZ2VuX2NsaWVudF9tYXN0ZXJfc2VjcmV0OworKwkJU1NMX3NycF9zZXJ2ZXJfcGFyYW1fd2l0aF91c2VybmFtZTsKKysJCVNTTF9zcnBfc2VydmVyX3BhcmFtX3dpdGhfdW47CisrCQlTU0xfU1JQX0NUWF9mcmVlOworKwkJU1NMX3NldF9kZWJ1ZzsKKysJCVNTTF9TRVNTSU9OX2dldDBfcGVlcjsKKysJCVRMU3YxXzJfY2xpZW50X21ldGhvZDsKKysJCVNTTF9TRVNTSU9OX3NldDFfaWRfY29udGV4dDsKKysJCVRMU3YxXzJfc2VydmVyX21ldGhvZDsKKysJCVNTTF9jYWNoZV9oaXQ7CisrCQlTU0xfZ2V0MF9rc3NsX2N0eDsKKysJCVNTTF9zZXQwX2tzc2xfY3R4OworKwkJU1NMX3NldF9zdGF0ZTsKKysJCVNTTF9DSVBIRVJfZ2V0X2lkOworKwkJVExTdjFfMl9tZXRob2Q7CisrCQlrc3NsX2N0eF9nZXQwX2NsaWVudF9wcmluYzsKKysJCVNTTF9leHBvcnRfa2V5aW5nX21hdGVyaWFsOworKwkJU1NMX3NldF90bHNleHRfdXNlX3NydHA7CisrCQlTU0xfQ1RYX3NldF9uZXh0X3Byb3Rvc19hZHZlcnRpc2VkX2NiOworKwkJU1NMX0NUWF9zZXRfbmV4dF9wcm90b3NfYWR2X2NiOworKwkJU1NMX2dldDBfbmV4dF9wcm90b19uZWdvdGlhdGVkOworKwkJU1NMX2dldF9zZWxlY3RlZF9zcnRwX3Byb2ZpbGU7CisrCQlTU0xfQ1RYX3NldF90bHNleHRfdXNlX3NydHA7CisrCQlTU0xfc2VsZWN0X25leHRfcHJvdG87CisrCQlTU0xfZ2V0X3NydHBfcHJvZmlsZXM7CisrCQlTU0xfQ1RYX3NldF9uZXh0X3Byb3RvX3NlbGVjdF9jYjsKKysJCVNTTF9DVFhfc2V0X25leHRfcHJvdG9fc2VsX2NiOworKwkJU1NMX1NFU1NJT05fZ2V0X2NvbXByZXNzX2lkOworKworKwkJU1JQX1ZCQVNFX2dldF9ieV91c2VyOworKwkJU1JQX0NhbGNfc2VydmVyX2tleTsKKysJCVNSUF9jcmVhdGVfdmVyaWZpZXI7CisrCQlTUlBfY3JlYXRlX3ZlcmlmaWVyX0JOOworKwkJU1JQX0NhbGNfdTsKKysJCVNSUF9WQkFTRV9mcmVlOworKwkJU1JQX0NhbGNfY2xpZW50X2tleTsKKysJCVNSUF9nZXRfZGVmYXVsdF9nTjsKKysJCVNSUF9DYWxjX3g7CisrCQlTUlBfQ2FsY19COworKwkJU1JQX1ZCQVNFX25ldzsKKysJCVNSUF9jaGVja19rbm93bl9nTl9wYXJhbTsKKysJCVNSUF9DYWxjX0E7CisrCQlTUlBfVmVyaWZ5X0FfbW9kX047CisrCQlTUlBfVkJBU0VfaW5pdDsKKysJCVNSUF9WZXJpZnlfQl9tb2RfTjsKKysJCUVDX0tFWV9zZXRfcHVibGljX2tleV9hZmZpbmVfY29vcmRpbmF0ZXM7CisrCQlFQ19LRVlfc2V0X3B1Yl9rZXlfYWZmX2Nvb3JkczsKKysJCUVWUF9hZXNfMTkyX2N0cjsKKysJCUVWUF9QS0VZX21ldGhfZ2V0MF9pbmZvOworKwkJRVZQX1BLRVlfbWV0aF9jb3B5OworKwkJRVJSX2FkZF9lcnJvcl92ZGF0YTsKKysJCUVWUF9hZXNfMTI4X2N0cjsKKysJCUVWUF9hZXNfMjU2X2N0cjsKKysJCUVDX0dGcF9uaXN0cDIyNF9tZXRob2Q7CisrCQlFQ19LRVlfZ2V0X2ZsYWdzOworKwkJUlNBX3BhZGRpbmdfYWRkX1BLQ1MxX1BTU19tZ2YxOworKwkJRVZQX2Flc18xMjhfeHRzOworKwkJRVZQX2Flc18yNTZfeHRzOworKwkJRVZQX2Flc18xMjhfZ2NtOworKwkJRUNfS0VZX2NsZWFyX2ZsYWdzOworKwkJRUNfS0VZX3NldF9mbGFnczsKKysJCUVWUF9hZXNfMjU2X2NjbTsKKysJCVJTQV92ZXJpZnlfUEtDUzFfUFNTX21nZjE7CisrCQlFVlBfYWVzXzEyOF9jY207CisrCQlFVlBfYWVzXzE5Ml9nY207CisrCQlYNTA5X0FMR09SX3NldF9tZDsKKysJCVJBTkRfaW5pdF9maXBzOworKwkJRVZQX2Flc18yNTZfZ2NtOworKwkJRVZQX2Flc18xOTJfY2NtOworKwkJQ01BQ19DVFhfY29weTsKKysJCUNNQUNfQ1RYX2ZyZWU7CisrCQlDTUFDX0NUWF9nZXQwX2NpcGhlcl9jdHg7CisrCQlDTUFDX0NUWF9jbGVhbnVwOworKwkJQ01BQ19Jbml0OworKwkJQ01BQ19VcGRhdGU7CisrCQlDTUFDX3Jlc3VtZTsKKysJCUNNQUNfQ1RYX25ldzsKKysJCUNNQUNfRmluYWw7CisrCQlDUllQVE9fY3RyMTI4X2VuY3J5cHRfY3RyMzI7CisrCQlDUllQVE9fZ2NtMTI4X3JlbGVhc2U7CisrCQlDUllQVE9fY2NtMTI4X2RlY3J5cHRfY2NtNjQ7CisrCQlDUllQVE9fY2NtMTI4X2VuY3J5cHQ7CisrCQlDUllQVE9fZ2NtMTI4X2VuY3J5cHQ7CisrCQlDUllQVE9feHRzMTI4X2VuY3J5cHQ7CisrCQlFVlBfcmM0X2htYWNfbWQ1OworKwkJQ1JZUFRPX25pc3RjdHMxMjhfZGVjcnlwdF9ibG9jazsKKysJCUNSWVBUT19nY20xMjhfc2V0aXY7CisrCQlDUllQVE9fbmlzdGN0czEyOF9lbmNyeXB0OworKwkJRVZQX2Flc18xMjhfY2JjX2htYWNfc2hhMTsKKysJCUNSWVBUT19nY20xMjhfdGFnOworKwkJQ1JZUFRPX2NjbTEyOF9lbmNyeXB0X2NjbTY0OworKwkJRU5HSU5FX2xvYWRfcmRyYW5kOworKwkJQ1JZUFRPX2NjbTEyOF9zZXRpdjsKKysJCUNSWVBUT19uaXN0Y3RzMTI4X2VuY3J5cHRfYmxvY2s7CisrCQlDUllQVE9fZ2NtMTI4X2FhZDsKKysJCUNSWVBUT19jY20xMjhfaW5pdDsKKysJCUNSWVBUT19uaXN0Y3RzMTI4X2RlY3J5cHQ7CisrCQlDUllQVE9fZ2NtMTI4X25ldzsKKysJCUNSWVBUT19jY20xMjhfdGFnOworKwkJQ1JZUFRPX2NjbTEyOF9kZWNyeXB0OworKwkJQ1JZUFRPX2NjbTEyOF9hYWQ7CisrCQlDUllQVE9fZ2NtMTI4X2luaXQ7CisrCQlDUllQVE9fZ2NtMTI4X2RlY3J5cHQ7CisrCQlFTkdJTkVfbG9hZF9yc2F4OworKwkJQ1JZUFRPX2djbTEyOF9kZWNyeXB0X2N0cjMyOworKwkJQ1JZUFRPX2djbTEyOF9lbmNyeXB0X2N0cjMyOworKwkJQ1JZUFRPX2djbTEyOF9maW5pc2g7CisrCQlFVlBfYWVzXzI1Nl9jYmNfaG1hY19zaGExOworKwkJUEtDUzVfcGJrZGYyX3NldDsKKysJCUNNU19hZGQwX3JlY2lwaWVudF9wYXNzd29yZDsKKysJCUNNU19kZWNyeXB0X3NldDFfcGFzc3dvcmQ7CisrCQlDTVNfUmVjaXBpZW50SW5mb19zZXQwX3Bhc3N3b3JkOworKwkJUkFORF9zZXRfZmlwc19kcmJnX3R5cGU7CisrCQlYNTA5X1JFUV9zaWduX2N0eDsKKysJCVJTQV9QU1NfUEFSQU1TX25ldzsKKysJCVg1MDlfQ1JMX3NpZ25fY3R4OworKwkJWDUwOV9zaWduYXR1cmVfZHVtcDsKKysJCWQyaV9SU0FfUFNTX1BBUkFNUzsKKysJCVJTQV9QU1NfUEFSQU1TX2l0OworKwkJUlNBX1BTU19QQVJBTVNfZnJlZTsKKysJCVg1MDlfc2lnbl9jdHg7CisrCQlpMmRfUlNBX1BTU19QQVJBTVM7CisrCQlBU04xX2l0ZW1fc2lnbl9jdHg7CisrCQlFQ19HRnBfbmlzdHA1MjFfbWV0aG9kOworKwkJRUNfR0ZwX25pc3RwMjU2X21ldGhvZDsKKysJCU9QRU5TU0xfc3RkZXJyOworKwkJT1BFTlNTTF9jcHVpZF9zZXR1cDsKKysJCU9QRU5TU0xfc2hvd2ZhdGFsOworKwkJQklPX25ld19kZ3JhbV9zY3RwOworKwkJQklPX2RncmFtX3NjdHBfbXNnX3dhaXRpbmc7CisrCQlCSU9fZGdyYW1fc2N0cF93YWl0X2Zvcl9kcnk7CisrCQlCSU9fc19kYXRhZ3JhbV9zY3RwOworKwkJQklPX2RncmFtX2lzX3NjdHA7CisrCQlCSU9fZGdyYW1fc2N0cF9ub3RpZmljYXRpb25fY2I7CisrCQlDUllQVE9fbWVtY21wOworKwkJU1NMX0NUWF9zZXRfYWxwbl9wcm90b3M7CisrCQlTU0xfc2V0X2FscG5fcHJvdG9zOworKwkJU1NMX0NUWF9zZXRfYWxwbl9zZWxlY3RfY2I7CisrCQlTU0xfZ2V0MF9hbHBuX3NlbGVjdGVkOworKwkJU1NMX0NUWF9zZXRfY3VzdG9tX2NsaV9leHQ7CisrCQlTU0xfQ1RYX3NldF9jdXN0b21fc3J2X2V4dDsKKysJCVNTTF9DVFhfc2V0X3Nydl9zdXBwX2RhdGE7CisrCQlTU0xfQ1RYX3NldF9jbGlfc3VwcF9kYXRhOworKwkJU1NMX3NldF9jZXJ0X2NiOworKwkJU1NMX0NUWF91c2Vfc2VydmVyaW5mbzsKKysJCVNTTF9DVFhfdXNlX3NlcnZlcmluZm9fZmlsZTsKKysJCVNTTF9DVFhfc2V0X2NlcnRfY2I7CisrCQlTU0xfQ1RYX2dldDBfcGFyYW07CisrCQlTU0xfZ2V0MF9wYXJhbTsKKysJCVNTTF9jZXJ0c19jbGVhcjsKKysJCURUTFN2MV8yX21ldGhvZDsKKysJCURUTFN2MV8yX3NlcnZlcl9tZXRob2Q7CisrCQlEVExTdjFfMl9jbGllbnRfbWV0aG9kOworKwkJRFRMU19tZXRob2Q7CisrCQlEVExTX3NlcnZlcl9tZXRob2Q7CisrCQlEVExTX2NsaWVudF9tZXRob2Q7CisrCQlTU0xfQ1RYX2dldF9zc2xfbWV0aG9kOworKwkJU1NMX0NUWF9nZXQwX2NlcnRpZmljYXRlOworKwkJU1NMX0NUWF9nZXQwX3ByaXZhdGVrZXk7CisrCQlTU0xfQ09NUF9zZXQwX2NvbXByZXNzaW9uX21ldGhvZHM7CisrCQlTU0xfQ09NUF9mcmVlX2NvbXByZXNzaW9uX21ldGhvZHM7CisrCQlTU0xfQ0lQSEVSX2ZpbmQ7CisrCQlTU0xfaXNfc2VydmVyOworKwkJU1NMX0NPTkZfQ1RYX25ldzsKKysJCVNTTF9DT05GX0NUWF9maW5pc2g7CisrCQlTU0xfQ09ORl9DVFhfZnJlZTsKKysJCVNTTF9DT05GX0NUWF9zZXRfZmxhZ3M7CisrCQlTU0xfQ09ORl9DVFhfY2xlYXJfZmxhZ3M7CisrCQlTU0xfQ09ORl9DVFhfc2V0MV9wcmVmaXg7CisrCQlTU0xfQ09ORl9DVFhfc2V0X3NzbDsKKysJCVNTTF9DT05GX0NUWF9zZXRfc3NsX2N0eDsKKysJCVNTTF9DT05GX2NtZDsKKysJCVNTTF9DT05GX2NtZF9hcmd2OworKwkJU1NMX0NPTkZfY21kX3ZhbHVlX3R5cGU7CisrCQlTU0xfdHJhY2U7CisrCQlTU0xfQ0lQSEVSX3N0YW5kYXJkX25hbWU7CisrCQlTU0xfZ2V0X3Rsc2FfcmVjb3JkX2J5bmFtZTsKKysJCUFTTjFfVElNRV9kaWZmOworKwkJQklPX2hleF9zdHJpbmc7CisrCQlDTVNfUmVjaXBpZW50SW5mb19nZXQwX3BrZXlfY3R4OworKwkJQ01TX1JlY2lwaWVudEluZm9fZW5jcnlwdDsKKysJCUNNU19TaWduZXJJbmZvX2dldDBfcGtleV9jdHg7CisrCQlDTVNfU2lnbmVySW5mb19nZXQwX21kX2N0eDsKKysJCUNNU19TaWduZXJJbmZvX2dldDBfc2lnbmF0dXJlOworKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9nZXQwX2FsZzsKKysJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfZ2V0MF9yZWtzOworKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9nZXQwX29yaWdfaWQ7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rYXJpX29yaWdfaWRfY21wOworKwkJQ01TX1JlY2lwaWVudEVuY3J5cHRlZEtleV9nZXQwX2lkOworKwkJQ01TX1JlY2lwaWVudEVuY3J5cHRlZEtleV9jZXJ0X2NtcDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfc2V0MF9wa2V5OworKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9nZXQwX2N0eDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfZGVjcnlwdDsKKysJCUNNU19TaGFyZWRJbmZvX2VuY29kZTsKKysJCURIX2NvbXB1dGVfa2V5X3BhZGRlZDsKKysJCWQyaV9ESHhwYXJhbXM7CisrCQlpMmRfREh4cGFyYW1zOworKwkJREhfZ2V0XzEwMjRfMTYwOworKwkJREhfZ2V0XzIwNDhfMjI0OworKwkJREhfZ2V0XzIwNDhfMjU2OworKwkJREhfS0RGX1g5XzQyOworKwkJRUNESF9LREZfWDlfNjI7CisrCQlFQ0RTQV9NRVRIT0RfbmV3OworKwkJRUNEU0FfTUVUSE9EX2ZyZWU7CisrCQlFQ0RTQV9NRVRIT0Rfc2V0X2FwcF9kYXRhOworKwkJRUNEU0FfTUVUSE9EX2dldF9hcHBfZGF0YTsKKysJCUVDRFNBX01FVEhPRF9zZXRfc2lnbjsKKysJCUVDRFNBX01FVEhPRF9zZXRfc2lnbl9zZXR1cDsKKysJCUVDRFNBX01FVEhPRF9zZXRfdmVyaWZ5OworKwkJRUNEU0FfTUVUSE9EX3NldF9mbGFnczsKKysJCUVDRFNBX01FVEhPRF9zZXRfbmFtZTsKKysJCUVWUF9kZXNfZWRlM193cmFwOworKwkJRVZQX2Flc18xMjhfd3JhcDsKKysJCUVWUF9hZXNfMTkyX3dyYXA7CisrCQlFVlBfYWVzXzI1Nl93cmFwOworKwkJRVZQX2Flc18xMjhfY2JjX2htYWNfc2hhMjU2OworKwkJRVZQX2Flc18yNTZfY2JjX2htYWNfc2hhMjU2OworKwkJQ1JZUFRPXzEyOF93cmFwOworKwkJQ1JZUFRPXzEyOF91bndyYXA7CisrCQlPQ1NQX1JFUV9DVFhfbmJpbzsKKysJCU9DU1BfUkVRX0NUWF9uZXc7CisrCQlPQ1NQX3NldF9tYXhfcmVzcG9uc2VfbGVuZ3RoOworKwkJT0NTUF9SRVFfQ1RYX2kyZDsKKysJCU9DU1BfUkVRX0NUWF9uYmlvX2QyaTsKKysJCU9DU1BfUkVRX0NUWF9nZXQwX21lbV9iaW87CisrCQlPQ1NQX1JFUV9DVFhfaHR0cDsKKysJCVJTQV9wYWRkaW5nX2FkZF9QS0NTMV9PQUVQX21nZjE7CisrCQlSU0FfcGFkZGluZ19jaGVja19QS0NTMV9PQUVQX21nZjE7CisrCQlSU0FfT0FFUF9QQVJBTVNfZnJlZTsKKysJCVJTQV9PQUVQX1BBUkFNU19pdDsKKysJCVJTQV9PQUVQX1BBUkFNU19uZXc7CisrCQlTU0xfZ2V0X3NpZ2FsZ3M7CisrCQlTU0xfZ2V0X3NoYXJlZF9zaWdhbGdzOworKwkJU1NMX2NoZWNrX2NoYWluOworKwkJWDUwOV9jaGFpbl91cF9yZWY7CisrCQlYNTA5X2h0dHBfbmJpbzsKKysJCVg1MDlfQ1JMX2h0dHBfbmJpbzsKKysJCVg1MDlfUkVWT0tFRF9kdXA7CisrCQlpMmRfcmVfWDUwOV90YnM7CisrCQlYNTA5X2dldDBfc2lnbmF0dXJlOworKwkJWDUwOV9nZXRfc2lnbmF0dXJlX25pZDsKKysJCVg1MDlfQ1JMX2RpZmY7CisrCQlYNTA5X2NoYWluX2NoZWNrX3N1aXRlYjsKKysJCVg1MDlfQ1JMX2NoZWNrX3N1aXRlYjsKKysJCVg1MDlfY2hlY2tfaG9zdDsKKysJCVg1MDlfY2hlY2tfZW1haWw7CisrCQlYNTA5X2NoZWNrX2lwOworKwkJWDUwOV9jaGVja19pcF9hc2M7CisrCQlYNTA5X1NUT1JFX3NldF9sb29rdXBfY3Jsc19jYjsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDBfc3RvcmU7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX2hvc3Q7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9hZGQxX2hvc3Q7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfaG9zdGZsYWdzOworKwkJWDUwOV9WRVJJRllfUEFSQU1fZ2V0MF9wZWVybmFtZTsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3NldDFfZW1haWw7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX2lwOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0MV9pcF9hc2M7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXQwX25hbWU7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXRfY291bnQ7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXQwOworKwkJWDUwOVYzX0VYVF9mcmVlOworKwkJRUNfR1JPVVBfZ2V0X21vbnRfZGF0YTsKKysJCUVDX2N1cnZlX25pZDJuaXN0OworKwkJRUNfY3VydmVfbmlzdDJuaWQ7CisrCQlQRU1fd3JpdGVfYmlvX0RIeHBhcmFtczsKKysJCVBFTV93cml0ZV9ESHhwYXJhbXM7CisrCQlTU0xfQ1RYX2FkZF9jbGllbnRfY3VzdG9tX2V4dDsKKysJCVNTTF9DVFhfYWRkX3NlcnZlcl9jdXN0b21fZXh0OworKwkJU1NMX2V4dGVuc2lvbl9zdXBwb3J0ZWQ7CisrCQlCVUZfc3RybmxlbjsKKysJCXNrX2RlZXBfY29weTsKKysJCVNTTF90ZXN0X2Z1bmN0aW9uczsKKysKKysJbG9jYWw6CisrCQkqOworK307CisrCisrT1BFTlNTTF8xLjAuMmcgeworKyAgICAgICBnbG9iYWw6CisrICAgICAgICAgICAgICAgU1JQX1ZCQVNFX2dldDFfYnlfdXNlcjsKKysgICAgICAgICAgICAgICBTUlBfdXNlcl9wd2RfZnJlZTsKKyt9IE9QRU5TU0xfMS4wLjJkOworKworSW5kZXg6IG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L2VuZ2luZXMvb3BlbnNzbC5sZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L2VuZ2luZXMvb3BlbnNzbC5sZAkyMDE0LTAyLTI0IDIxOjAyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwxMCBAQAorK09QRU5TU0xfMS4wLjIgeworKwlnbG9iYWw6CisrCQliaW5kX2VuZ2luZTsKKysJCXZfY2hlY2s7CisrCQlPUEVOU1NMX2luaXQ7CisrCQlPUEVOU1NMX2ZpbmlzaDsKKysJbG9jYWw6CisrCQkqOworK307CisrCitJbmRleDogb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvZW5naW5lcy9jY2dvc3Qvb3BlbnNzbC5sZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L2VuZ2luZXMvY2Nnb3N0L29wZW5zc2wubGQJMjAxNC0wMi0yNCAyMTowMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMTAgQEAKKytPUEVOU1NMXzEuMC4yIHsKKysJZ2xvYmFsOgorKwkJYmluZF9lbmdpbmU7CisrCQl2X2NoZWNrOworKwkJT1BFTlNTTF9pbml0OworKwkJT1BFTlNTTF9maW5pc2g7CisrCWxvY2FsOgorKwkJKjsKKyt9OworKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2VuZ2luZXMtaW5zdGFsbC1pbi1saWJkaXItc3NsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLTEuMC4ybi9lbmdpbmVzLWluc3RhbGwtaW4tbGliZGlyLXNzbC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2VuZ2luZXMtaW5zdGFsbC1pbi1saWJkaXItc3NsLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuL2VuZ2luZXMtaW5zdGFsbC1pbi1saWJkaXItc3NsLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZmluZC5wbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vZmluZC5wbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2ZpbmQucGwKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vZmluZC5wbApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29lLWxkZmxhZ3MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuL29lLWxkZmxhZ3MucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vZS1sZGZsYWdzLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuL29lLWxkZmxhZ3MucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsLTEuMC4yYS14MzItYXNtLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLTEuMC4ybi9vcGVuc3NsLTEuMC4yYS14MzItYXNtLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC0xLjAuMmEteDMyLWFzbS5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLTEuMC4ybi9vcGVuc3NsLTEuMC4yYS14MzItYXNtLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuL29wZW5zc2wtY19yZWhhc2guc2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuL29wZW5zc2wtY19yZWhhc2guc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYyMGZkYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vb3BlbnNzbC1jX3JlaGFzaC5zaApAQCAtMCwwICsxLDIyMiBAQAorIyEvYmluL3NoCisjCisjIEJlbiBTZWNyZXN0IDxibHNlY3Jlc0BnbWFpbC5jb20+CisjCisjIHNoIGNfcmVoYXNoIHNjcmlwdCwgc2NhbiBhbGwgZmlsZXMgaW4gYSBkaXJlY3RvcnkKKyMgYW5kIGFkZCBzeW1ib2xpYyBsaW5rcyB0byB0aGVpciBoYXNoIHZhbHVlcy4KKyMKKyMgYmFzZWQgb24gdGhlIGNfcmVoYXNoIHBlcmwgc2NyaXB0IGRpc3RyaWJ1dGVkIHdpdGggb3BlbnNzbAorIworIyBMSUNFTlNFOiBTZWUgT3BlblNTTCBsaWNlbnNlCisjIF5eYWNjZXB0YWJsZT9eXgorIworCisjIGRlZmF1bHQgY2VydGlmaWNhdGUgbG9jYXRpb24KK0RJUj0vZXRjL29wZW5zc2wKKworIyBmb3IgZmlsZXR5cGUgYml0ZmllbGQKK0lTX0NFUlQ9JCgoIDEgPDwgMCApKQorSVNfQ1JMPSQoKCAxIDw8IDEgKSkKKworCisjIGNoZWNrIHRvIHNlZSBpZiBhIGZpbGUgaXMgYSBjZXJ0aWZpY2F0ZSBmaWxlIG9yIGEgQ1JMIGZpbGUKKyMgYXJndW1lbnRzOgorIyAgICAgICAxLiB0aGUgZmlsZW5hbWUgdG8gYmUgc2Nhbm5lZAorIyByZXR1cm5zOgorIyAgICAgICBiaXRmaWVsZCBvZiBmaWxlIHR5cGU7IHVzZXMgJHtJU19DRVJUfSBhbmQgJHtJU19DUkx9CisjCitjaGVja19maWxlKCkKK3sKKyAgICBsb2NhbCBJU19UWVBFPTAKKworICAgICMgbWFrZSBJRlMgYSBuZXdsaW5lIHNvIHdlIGNhbiBwcm9jZXNzIGdyZXAgb3V0cHV0IGxpbmUgYnkgbGluZQorICAgIGxvY2FsIE9MRElGUz0ke0lGU30KKyAgICBJRlM9JCggcHJpbnRmICJcbiIgKQorCisgICAgIyBYWFg6IGNvdWxkIGJlIG1vcmUgZWZmaWNpZW50IHRvIGhhdmUgdHdvICdncmVwIC1tJyBidXQgaXMgLW0gcG9ydGFibGU/CisgICAgZm9yIExJTkUgaW4gJCggZ3JlcCAnXi0tLS0tQkVHSU4gLiotLS0tLScgJHsxfSApCisgICAgZG8KKwlpZiBlY2hvICR7TElORX0gXAorCSAgICB8IGdyZXAgLXEgLUUgJ14tLS0tLUJFR0lOIChYNTA5IHxUUlVTVEVEICk/Q0VSVElGSUNBVEUtLS0tLScKKwl0aGVuCisJICAgIElTX1RZUEU9JCgoICR7SVNfVFlQRX0gfCAke0lTX0NFUlR9ICkpCisKKwkgICAgaWYgWyAkKCggJHtJU19UWVBFfSAmICR7SVNfQ1JMfSApKSAtbmUgMCBdCisJICAgIHRoZW4KKwkgICAgCWJyZWFrCisJICAgIGZpCisJZWxpZiBlY2hvICR7TElORX0gfCBncmVwIC1xICdeLS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tJworCXRoZW4KKwkgICAgSVNfVFlQRT0kKCggJHtJU19UWVBFfSB8ICR7SVNfQ1JMfSApKQorCisJICAgIGlmIFsgJCgoICR7SVNfVFlQRX0gJiAke0lTX0NFUlR9ICkpIC1uZSAwIF0KKwkgICAgdGhlbgorCSAgICAJYnJlYWsKKwkgICAgZmkKKwlmaQorICAgIGRvbmUKKworICAgICMgcmVzdG9yZSBJRlMKKyAgICBJRlM9JHtPTERJRlN9CisKKyAgICByZXR1cm4gJHtJU19UWVBFfQorfQorCisKKyMKKyMgdXNlIG9wZW5zc2wgdG8gZmluZ2VycHJpbnQgYSBmaWxlCisjICAgIGFyZ3VtZW50czoKKyMJMS4gdGhlIGZpbGVuYW1lIHRvIGZpbmdlcnByaW50CisjCTIuIHRoZSBtZXRob2QgdG8gdXNlICh4NTA5LCBjcmwpCisjICAgIHJldHVybnM6CisjCW5vbmUKKyMgICAgYXNzdW1wdGlvbnM6CisjCXVzZXIgd2lsbCBjYXB0dXJlIG91dHB1dCBmcm9tIGxhc3Qgc3RhZ2Ugb2YgcGlwZWxpbmUKKyMKK2ZpbmdlcnByaW50KCkKK3sKKyAgICAke1NTTF9DTUR9ICR7Mn0gLWZpbmdlcnByaW50IC1ub291dCAtaW4gJHsxfSB8IHNlZCAncy9eLio9Ly8nIHwgdHIgLWQgJzonCit9CisKKworIworIyBsaW5rX2hhc2ggLSBjcmVhdGUgbGlua3MgdG8gY2VydGlmaWNhdGUgZmlsZXMKKyMgICAgYXJndW1lbnRzOgorIyAgICAgICAxLiB0aGUgZmlsZW5hbWUgdG8gY3JlYXRlIGEgbGluayBmb3IKKyMJMi4gdGhlIHR5cGUgb2YgY2VydGlmaWNhdGUgYmVpbmcgbGlua2VkICh4NTA5LCBjcmwpCisjICAgIHJldHVybnM6CisjCTAgb24gc3VjY2VzcywgMSBvdGhlcndpc2UKKyMKK2xpbmtfaGFzaCgpCit7CisgICAgbG9jYWwgRklOR0VSUFJJTlQ9JCggZmluZ2VycHJpbnQgJHsxfSAkezJ9ICkKKyAgICBsb2NhbCBIQVNIPSQoICR7U1NMX0NNRH0gJHsyfSAtaGFzaCAtbm9vdXQgLWluICR7MX0gKQorICAgIGxvY2FsIFNVRkZJWD0wCisgICAgbG9jYWwgTElOS0ZJTEU9JycKKyAgICBsb2NhbCBUQUc9JycKKworICAgIGlmIFsgJHsyfSA9ICJjcmwiIF0KKyAgICB0aGVuCisgICAgCVRBRz0ncicKKyAgICBmaQorCisgICAgTElOS0ZJTEU9JHtIQVNIfS4ke1RBR30ke1NVRkZJWH0KKworICAgIHdoaWxlIFsgLWYgJHtMSU5LRklMRX0gXQorICAgIGRvCisJaWYgWyAke0ZJTkdFUlBSSU5UfSA9ICQoIGZpbmdlcnByaW50ICR7TElOS0ZJTEV9ICR7Mn0gKSBdCisJdGhlbgorCSAgICBlY2hvICJOT1RFOiBTa2lwcGluZyBkdXBsaWNhdGUgZmlsZSAkezF9IiA+JjIKKwkgICAgcmV0dXJuIDEKKwlmaQkKKworCVNVRkZJWD0kKCggJHtTVUZGSVh9ICsgMSApKQorCUxJTktGSUxFPSR7SEFTSH0uJHtUQUd9JHtTVUZGSVh9CisgICAgZG9uZQorCisgICAgZWNobyAiJHszfSA9PiAke0xJTktGSUxFfSIKKworICAgICMgYXNzdW1lIGFueSBzeXN0ZW0gd2l0aCBhIFBPU0lYIHNoZWxsIHdpbGwgZWl0aGVyIHN1cHBvcnQgc3ltbGlua3Mgb3IKKyAgICAjIGRvIHNvbWV0aGluZyB0byBoYW5kbGUgdGhpcyBncmFjZWZ1bGx5CisgICAgbG4gLXMgJHszfSAke0xJTktGSUxFfQorCisgICAgcmV0dXJuIDAKK30KKworCisjIGhhc2hfZGlyIGNyZWF0ZSBoYXNoIGxpbmtzIGluIGEgZ2l2ZW4gZGlyZWN0b3J5CitoYXNoX2RpcigpCit7CisgICAgZWNobyAiRG9pbmcgJHsxfSIKKworICAgIGNkICR7MX0KKworICAgIGxzIC0xICogMj4vZGV2L251bGwgfCB3aGlsZSByZWFkIEZJTEUKKyAgICBkbworICAgICAgICBpZiBlY2hvICR7RklMRX0gfCBncmVwIC1xIC1FICdeW1s6eGRpZ2l0Ol1dezh9XC5yP1tbOmRpZ2l0Ol1dKyQnIFwKKwkgICAgCSYmIFsgLWggIiR7RklMRX0iIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgcm0gJHtGSUxFfQorICAgICAgICBmaQorICAgIGRvbmUKKworICAgIGxzIC0xICoucGVtICouY2VyICouY3J0ICouY3JsIDI+L2Rldi9udWxsIHwgd2hpbGUgcmVhZCBGSUxFCisgICAgZG8KKwlSRUFMX0ZJTEU9JHtGSUxFfQorCSMgaWYgd2UgcnVuIG9uIGJ1aWxkIGhvc3QgdGhlbiBnZXQgdG8gdGhlIHJlYWwgZmlsZXMgaW4gcm9vdGZzCisJaWYgWyAtbiAiJHtTWVNST09UfSIgLWEgLWggJHtGSUxFfSBdCisJdGhlbgorCSAgICBGSUxFPSQoIHJlYWRsaW5rICR7RklMRX0gKQorCSAgICAjIGNoZWNrIHRoZSBzeW1saW5rIGlzIGFic29sdXRlIChvciBkYW5nbGluZyBpbiBvdGhlciB3b3JkKQorCSAgICBpZiBbICJ4LyIgPSAieCQoIGVjaG8gJHtGSUxFfSB8IGN1dCAtYzEgLSkiIF0KKwkgICAgdGhlbgorCQlSRUFMX0ZJTEU9JHtTWVNST09UfS8ke0ZJTEV9CisJICAgIGZpCisJZmkKKworCWNoZWNrX2ZpbGUgJHtSRUFMX0ZJTEV9CisgICAgICAgIGxvY2FsIEZJTEVfVFlQRT0kez99CisJbG9jYWwgVFlQRV9TVFI9JycKKworICAgICAgICBpZiBbICQoKCAke0ZJTEVfVFlQRX0gJiAke0lTX0NFUlR9ICkpIC1uZSAwIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgVFlQRV9TVFI9J3g1MDknCisgICAgICAgIGVsaWYgWyAkKCggJHtGSUxFX1RZUEV9ICYgJHtJU19DUkx9ICkpIC1uZSAwIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgVFlQRV9TVFI9J2NybCcKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZWNobyAiTk9URTogJHtGSUxFfSBkb2VzIG5vdCBjb250YWluIGEgY2VydGlmaWNhdGUgb3IgQ1JMOiBza2lwcGluZyIgPiYyCisJICAgIGNvbnRpbnVlCisgICAgICAgIGZpCisKKwlsaW5rX2hhc2ggJHtSRUFMX0ZJTEV9ICR7VFlQRV9TVFJ9ICR7RklMRX0KKyAgICBkb25lCit9CisKKworIyBjaG9vc2UgdGhlIG5hbWUgb2YgYW4gc3NsIGFwcGxpY2F0aW9uCitpZiBbIC1uICIke09QRU5TU0x9IiBdCit0aGVuCisgICAgU1NMX0NNRD0kKHdoaWNoICR7T1BFTlNTTH0gMj4vZGV2L251bGwpCitlbHNlCisgICAgU1NMX0NNRD0vdXNyL2Jpbi9vcGVuc3NsCisgICAgT1BFTlNTTD0ke1NTTF9DTUR9CisgICAgZXhwb3J0IE9QRU5TU0wKK2ZpCisKKyMgZml4IHBhdGhzCitQQVRIPSR7UEFUSH06JHtESVJ9L2JpbgorZXhwb3J0IFBBVEgKKworIyBjb25maXJtIGV4aXN0YW5jZS9leGVjdXRhYmlsaXR5IG9mIHNzbCBjb21tYW5kCitpZiAhIFsgLXggJHtTU0xfQ01EfSBdCit0aGVuCisgICAgZWNobyAiJHswfTogcmVoYXNoaW5nIHNraXBwZWQgKCdvcGVuc3NsJyBwcm9ncmFtIG5vdCBhdmFpbGFibGUpIiA+JjIKKyAgICBleGl0IDAKK2ZpCisKKyMgZGV0ZXJtaW5lIHdoaWNoIGRpcmVjdG9yaWVzIHRvIHByb2Nlc3MKK29sZF9JRlM9JElGUworaWYgWyAkeyN9IC1ndCAwIF0KK3RoZW4KKyAgICBJRlM9JzonCisgICAgRElSTElTVD0keyp9CitlbGlmIFsgLW4gIiR7U1NMX0NFUlRfRElSfSIgXQordGhlbgorICAgIERJUkxJU1Q9JFNTTF9DRVJUX0RJUgorZWxzZQorICAgIERJUkxJU1Q9JHtESVJ9L2NlcnRzCitmaQorCitJRlM9JzonCisKKyMgcHJvY2VzcyBkaXJlY3RvcmllcworZm9yIENFUlRfRElSIGluICR7RElSTElTVH0KK2RvCisgICAgaWYgWyAtZCAke0NFUlRfRElSfSAtYSAtdyAke0NFUlRfRElSfSBdCisgICAgdGhlbgorICAgICAgICBJRlM9JG9sZF9JRlMKKyAgICAgICAgaGFzaF9kaXIgJHtDRVJUX0RJUn0KKyAgICAgICAgSUZTPSc6JworICAgIGZpCitkb25lCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC1maXgtZGVzLnBvZC1lcnJvci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vb3BlbnNzbC1maXgtZGVzLnBvZC1lcnJvci5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2wtZml4LWRlcy5wb2QtZXJyb3IucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vb3BlbnNzbC1maXgtZGVzLnBvZC1lcnJvci5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2wtdXRpbC1wZXJscGF0aC5wbC1jd2QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuL29wZW5zc2wtdXRpbC1wZXJscGF0aC5wbC1jd2QucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsLXV0aWwtcGVybHBhdGgucGwtY3dkLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuL29wZW5zc2wtdXRpbC1wZXJscGF0aC5wbC1jd2QucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsX2ZpeF9mb3JfeDMyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLTEuMC4ybi9vcGVuc3NsX2ZpeF9mb3JfeDMyLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbF9maXhfZm9yX3gzMi5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLTEuMC4ybi9vcGVuc3NsX2ZpeF9mb3JfeDMyLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuL3BhcmFsbGVsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLTEuMC4ybi9wYXJhbGxlbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTQxM2JmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLTEuMC4ybi9wYXJhbGxlbC5wYXRjaApAQCAtMCwwICsxLDM3MCBAQAorRnJvbSA3ZmIxMTkyZjExMmMxOTIwYmZkMzlmNDE4NWYzNGU5YWZmZjNjZmYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK0RhdGU6IFNhdCwgNSBNYXIgMjAxNiAwMDoxMjowMiArMDAwMAorU3ViamVjdDogW1BBVENIIDI0LzI4XSBGaXggdGhlIHBhcmFsbGVsIHJhY2VzIGluIHRoZSBNYWtlZmlsZXMuCisKK1RoaXMgcGF0Y2ggd2FzIHRha2VuIGZyb20gdGhlIEdlbnRvbyBwYWNrYWdpbmc6CitodHRwczovL2dpdHdlYi5nZW50b28ub3JnL3JlcG8vZ2VudG9vLmdpdC9wbGFpbi9kZXYtbGlicy9vcGVuc3NsL2ZpbGVzL29wZW5zc2wtMS4wLjJnLXBhcmFsbGVsLWJ1aWxkLnBhdGNoCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworUmVmcmVzaGVkIGZvciAxLjAuMmkKK1NpZ25lZC1vZmYtYnk6IFBhdHJpY2sgT2hseSA8cGF0cmljay5vaGx5QGludGVsLmNvbT4KKworLS0tCisgTWFrZWZpbGUub3JnICAgICAgICAgIHwgIDE0ICstCisgTWFrZWZpbGUub3JnLm9yaWcgICAgIHwgIDEwICstCisgTWFrZWZpbGUuc2hhcmVkICAgICAgIHwgICAyICsKKyBNYWtlZmlsZS5zaGFyZWQub3JpZyAgfCA2NTUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBjcnlwdG8vTWFrZWZpbGUgICAgICAgfCAgMTAgKy0KKyBlbmdpbmVzL01ha2VmaWxlICAgICAgfCAgIDYgKy0KKyBlbmdpbmVzL01ha2VmaWxlLm9yaWcgfCAzMzggKysrKysrKysrKysrKysrKysrKysrKysrKysKKyB0ZXN0L01ha2VmaWxlICAgICAgICAgfCAgOTIgKysrLS0tLQorIHRlc3QvTWFrZWZpbGUub3JpZyAgICB8ICA4OCArKysrLS0tCisgOSBmaWxlcyBjaGFuZ2VkLCAxMTA4IGluc2VydGlvbnMoKyksIDEwNyBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgTWFrZWZpbGUuc2hhcmVkLm9yaWcKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZW5naW5lcy9NYWtlZmlsZS5vcmlnCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5vcmcgYi9NYWtlZmlsZS5vcmcKK2luZGV4IDhlNzkzNmMuLmVkOThkMmEgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5vcmcKKysrKyBiL01ha2VmaWxlLm9yZworQEAgLTI4MywxNyArMjgzLDE3IEBAIGJ1aWxkX2xpYmNyeXB0bzogYnVpbGRfY3J5cHRvIGJ1aWxkX2VuZ2luZXMgbGliY3J5cHRvLnBjCisgYnVpbGRfbGlic3NsOiBidWlsZF9zc2wgbGlic3NsLnBjCisgCisgYnVpbGRfY3J5cHRvOgorLQlAZGlyPWNyeXB0bzsgdGFyZ2V0PWFsbDsgJChCVUlMRF9PTkVfQ01EKQorKwkrQGRpcj1jcnlwdG87IHRhcmdldD1hbGw7ICQoQlVJTERfT05FX0NNRCkKKyBidWlsZF9zc2w6IGJ1aWxkX2NyeXB0bworLQlAZGlyPXNzbDsgdGFyZ2V0PWFsbDsgJChCVUlMRF9PTkVfQ01EKQorKwkrQGRpcj1zc2w7IHRhcmdldD1hbGw7ICQoQlVJTERfT05FX0NNRCkKKyBidWlsZF9lbmdpbmVzOiBidWlsZF9jcnlwdG8KKy0JQGRpcj1lbmdpbmVzOyB0YXJnZXQ9YWxsOyAkKEJVSUxEX09ORV9DTUQpCisrCStAZGlyPWVuZ2luZXM7IHRhcmdldD1hbGw7ICQoQlVJTERfT05FX0NNRCkKKyBidWlsZF9hcHBzOiBidWlsZF9saWJzCistCUBkaXI9YXBwczsgdGFyZ2V0PWFsbDsgJChCVUlMRF9PTkVfQ01EKQorKwkrQGRpcj1hcHBzOyB0YXJnZXQ9YWxsOyAkKEJVSUxEX09ORV9DTUQpCisgYnVpbGRfdGVzdHM6IGJ1aWxkX2xpYnMKKy0JQGRpcj10ZXN0OyB0YXJnZXQ9YWxsOyAkKEJVSUxEX09ORV9DTUQpCisrCStAZGlyPXRlc3Q7IHRhcmdldD1hbGw7ICQoQlVJTERfT05FX0NNRCkKKyBidWlsZF90b29sczogYnVpbGRfbGlicworLQlAZGlyPXRvb2xzOyB0YXJnZXQ9YWxsOyAkKEJVSUxEX09ORV9DTUQpCisrCStAZGlyPXRvb2xzOyB0YXJnZXQ9YWxsOyAkKEJVSUxEX09ORV9DTUQpCisgCisgYWxsX3Rlc3RhcHBzOiBidWlsZF9saWJzIGJ1aWxkX3Rlc3RhcHBzCisgYnVpbGRfdGVzdGFwcHM6CitAQCAtNTY1LDcgKzU2NSw3IEBAIGluc3RhbGxfc3c6CisgCShjcCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGk7IFwKKyAJY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKKyAJZG9uZTsKKy0JQHNldCAtZTsgdGFyZ2V0PWluc3RhbGw7ICQoUkVDVVJTSVZFX0JVSUxEX0NNRCkKKysJK0BzZXQgLWU7IHRhcmdldD1pbnN0YWxsOyAkKFJFQ1VSU0lWRV9CVUlMRF9DTUQpCisgCUBzZXQgLWU7IGxpYmxpc3Q9IiQoTElCUykiOyBmb3IgaSBpbiAkJGxpYmxpc3QgO1wKKyAJZG8gXAorIAkJaWYgWyAtZiAiJCRpIiBdOyB0aGVuIFwKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5zaGFyZWQgYi9NYWtlZmlsZS5zaGFyZWQKK2luZGV4IGY2ZjkyZTcuLjgxNjQxODYgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5zaGFyZWQKKysrKyBiL01ha2VmaWxlLnNoYXJlZAorQEAgLTEwNSw2ICsxMDUsNyBAQCBMSU5LX1NPPQlcCisgICAgIFNIQVJFREZMQUdTPSIkKE9FX0xERkxBR1MpICQke1NIQVJFREZMQUdTOi0kKENGTEFHUykgJChTSEFSRURfTERGTEFHUyl9IjsgXAorICAgICBMSUJQQVRIPWBmb3IgeCBpbiAkJExJQkRFUFM7IGRvIGVjaG8gJCR4OyBkb25lIHwgc2VkIC1lICdzL14gKi1MLy87dCcgLWUgZCB8IHVuaXFgOyBcCisgICAgIExJQlBBVEg9YGVjaG8gJCRMSUJQQVRIIHwgc2VkIC1lICdzLyAvOi9nJ2A7IFwKKysgICAgWyAtZSAkJFNITElCJCRTSExJQl9TT1ZFUiQkU0hMSUJfU1VGRklYIF0gJiYgZXhpdCAwOyBcCisgICAgIExEX0xJQlJBUllfUEFUSD0kJExJQlBBVEg6JCRMRF9MSUJSQVJZX1BBVEggXAorICAgICAkJHtTSEFSRURDTUR9ICQke1NIQVJFREZMQUdTfSBcCisgCS1vICQkU0hMSUIkJFNITElCX1NPVkVSJCRTSExJQl9TVUZGSVggXAorQEAgLTEyMiw2ICsxMjMsNyBAQCBTWU1MSU5LX1NPPQlcCisgCQkJZG9uZTsgXAorIAkJZmk7IFwKKyAJCWlmIFsgLW4gIiQkU0hMSUJfU09WRVIiIF07IHRoZW4gXAorKwkJCVsgLWUgIiQkU0hMSUIkJFNITElCX1NVRkZJWCIgXSB8fCBcCisgCQkJKCAkKFNFVF9YKTsgcm0gLWYgJCRTSExJQiQkU0hMSUJfU1VGRklYOyBcCisgCQkJICBsbiAtcyAkJHByZXYgJCRTSExJQiQkU0hMSUJfU1VGRklYICk7IFwKKyAJCWZpOyBcCitkaWZmIC0tZ2l0IGEvY3J5cHRvL01ha2VmaWxlIGIvY3J5cHRvL01ha2VmaWxlCitpbmRleCAxN2E4N2Y4Li4yOWMyZGNmIDEwMDY0NAorLS0tIGEvY3J5cHRvL01ha2VmaWxlCisrKysgYi9jcnlwdG8vTWFrZWZpbGUKK0BAIC04NSwxMSArODUsMTEgQEAgdGVzdGFwcHM6CisgCUBpZiBbIC16ICIkKFRISVMpIiBdOyB0aGVuICQoTUFLRSkgLWYgJChUT1ApL01ha2VmaWxlIHJlZmxlY3QgVEhJUz0kQDsgZmkKKyAKKyBzdWJkaXJzOgorLQlAdGFyZ2V0PWFsbDsgJChSRUNVUlNJVkVfTUFLRSkKKysJK0B0YXJnZXQ9YWxsOyAkKFJFQ1VSU0lWRV9NQUtFKQorIAorIGZpbGVzOgorIAkkKFBFUkwpICQoVE9QKS91dGlsL2ZpbGVzLnBsICJDUFVJRF9PQko9JChDUFVJRF9PQkopIiBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KKy0JQHRhcmdldD1maWxlczsgJChSRUNVUlNJVkVfTUFLRSkKKysJK0B0YXJnZXQ9ZmlsZXM7ICQoUkVDVVJTSVZFX01BS0UpCisgCisgbGlua3M6CisgCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikKK0BAIC0xMDAsNyArMTAwLDcgQEAgbGlua3M6CisgIyBsaWI6ICQoTElCKTogYXJlIHNwbGl0dGVkIHRvIGF2b2lkIGVuZC1sZXNzIGxvb3AKKyBsaWI6CSQoTElCKQorIAlAdG91Y2ggbGliCistJChMSUIpOgkkKExJQk9CSikKKyskKExJQik6CSQoTElCT0JKKSB8IHN1YmRpcnMKKyAJJChBUikgJChMSUIpICQoTElCT0JKKQorIAl0ZXN0IC16ICIkKEZJUFNMSUJESVIpIiB8fCAkKEFSKSAkKExJQikgJChGSVBTTElCRElSKWZpcHNjYW5pc3Rlci5vCisgCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZlciBtaW5kLgorQEAgLTExMSw3ICsxMTEsNyBAQCBzaGFyZWQ6IGJ1aWxkaW5mLmggbGliIHN1YmRpcnMKKyAJZmkKKyAKKyBsaWJzOgorLQlAdGFyZ2V0PWxpYjsgJChSRUNVUlNJVkVfTUFLRSkKKysJK0B0YXJnZXQ9bGliOyAkKFJFQ1VSU0lWRV9NQUtFKQorIAorIGluc3RhbGw6CisgCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KK0BAIC0xMjAsNyArMTIwLDcgQEAgaW5zdGFsbDoKKyAJKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAorIAljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAorIAlkb25lOworLQlAdGFyZ2V0PWluc3RhbGw7ICQoUkVDVVJTSVZFX01BS0UpCisrCStAdGFyZ2V0PWluc3RhbGw7ICQoUkVDVVJTSVZFX01BS0UpCisgCisgbGludDoKKyAJQHRhcmdldD1saW50OyAkKFJFQ1VSU0lWRV9NQUtFKQorZGlmZiAtLWdpdCBhL2VuZ2luZXMvTWFrZWZpbGUgYi9lbmdpbmVzL01ha2VmaWxlCitpbmRleCBmZThlOWNhLi5hNDNkMjFiIDEwMDY0NAorLS0tIGEvZW5naW5lcy9NYWtlZmlsZQorKysrIGIvZW5naW5lcy9NYWtlZmlsZQorQEAgLTcyLDcgKzcyLDcgQEAgdG9wOgorIAorIGFsbDoJbGliIHN1YmRpcnMKKyAKKy1saWI6CSQoTElCT0JKKQorK2xpYjoJJChMSUJPQkopIHwgc3ViZGlycworIAlAaWYgWyAtbiAiJChTSEFSRURfTElCUykiIF07IHRoZW4gXAorIAkJc2V0IC1lOyBcCisgCQlmb3IgbCBpbiAkKExJQk5BTUVTKTsgZG8gXAorQEAgLTg5LDcgKzg5LDcgQEAgbGliOgkkKExJQk9CSikKKyAKKyBzdWJkaXJzOgorIAllY2hvICQoRURJUlMpCistCUB0YXJnZXQ9YWxsOyAkKFJFQ1VSU0lWRV9NQUtFKQorKwkrQHRhcmdldD1hbGw7ICQoUkVDVVJTSVZFX01BS0UpCisgCisgZmlsZXM6CisgCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCitAQCAtMTI4LDcgKzEyOCw3IEBAIGluc3RhbGw6CisgCQkJICBtdiAtZiAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvc3NsL2VuZ2luZXMvJCRwZngkJGwkJHNmeCApOyBcCisgCQlkb25lOyBcCisgCWZpCistCUB0YXJnZXQ9aW5zdGFsbDsgJChSRUNVUlNJVkVfTUFLRSkKKysJK0B0YXJnZXQ9aW5zdGFsbDsgJChSRUNVUlNJVkVfTUFLRSkKKyAKKyB0YWdzOgorIAljdGFncyAkKFNSQykKK2RpZmYgLS1naXQgYS90ZXN0L01ha2VmaWxlIGIvdGVzdC9NYWtlZmlsZQoraW5kZXggNDBhYmQ2MC4uNzhkMzc4OCAxMDA2NDQKKy0tLSBhL3Rlc3QvTWFrZWZpbGUKKysrKyBiL3Rlc3QvTWFrZWZpbGUKK0BAIC0xNDUsNyArMTQ1LDcgQEAgaW5zdGFsbDoKKyB0YWdzOgorIAljdGFncyAkKFNSQykKKyAKKy10ZXN0czoJZXhlIGFwcHMgJChURVNUUykKKyt0ZXN0czoJZXhlICQoVEVTVFMpCisgCisgYXBwczoKKyAJQChjZCAuLjsgJChNQUtFKSBESVJTPWFwcHMgYWxsKQorQEAgLTQ0NCwxMzkgKzQ0NCwxMzkgQEAgQlVJTERfQ01EX1NUQVRJQz1zaGxpYl90YXJnZXQ9OyBcCisgCQlsaW5rX2FwcC4kJHtzaGxpYl90YXJnZXR9CisgCisgJChSU0FURVNUKSQoRVhFX0VYVCk6ICQoUlNBVEVTVCkubyAkKERMSUJDUllQVE8pCistCUB0YXJnZXQ9JChSU0FURVNUKTsgJChCVUlMRF9DTUQpCisrCStAdGFyZ2V0PSQoUlNBVEVTVCk7ICQoQlVJTERfQ01EKQorIAorICQoQk5URVNUKSQoRVhFX0VYVCk6ICQoQk5URVNUKS5vICQoRExJQkNSWVBUTykKKy0JQHRhcmdldD0kKEJOVEVTVCk7ICQoQlVJTERfQ01EKQorKwkrQHRhcmdldD0kKEJOVEVTVCk7ICQoQlVJTERfQ01EKQorIAorICQoRUNURVNUKSQoRVhFX0VYVCk6ICQoRUNURVNUKS5vICQoRExJQkNSWVBUTykKKy0JQHRhcmdldD0kKEVDVEVTVCk7ICQoQlVJTERfQ01EKQorKwkrQHRhcmdldD0kKEVDVEVTVCk7ICQoQlVJTERfQ01EKQorIAorICQoRVhQVEVTVCkkKEVYRV9FWFQpOiAkKEVYUFRFU1QpLm8gJChETElCQ1JZUFRPKQorLQlAdGFyZ2V0PSQoRVhQVEVTVCk7ICQoQlVJTERfQ01EKQorKwkrQHRhcmdldD0kKEVYUFRFU1QpOyAkKEJVSUxEX0NNRCkKKyAKKyAkKElERUFURVNUKSQoRVhFX0VYVCk6ICQoSURFQVRFU1QpLm8gJChETElCQ1JZUFRPKQorLQlAdGFyZ2V0PSQoSURFQVRFU1QpOyAkKEJVSUxEX0NNRCkKKysJK0B0YXJnZXQ9JChJREVBVEVTVCk7ICQoQlVJTERfQ01EKQorIAorICQoTUQyVEVTVCkkKEVYRV9FWFQpOiAkKE1EMlRFU1QpLm8gJChETElCQ1JZUFRPKQorLQlAdGFyZ2V0PSQoTUQyVEVTVCk7ICQoQlVJTERfQ01EKQorKwkrQHRhcmdldD0kKE1EMlRFU1QpOyAkKEJVSUxEX0NNRCkKKyAKKyAkKFNIQVRFU1QpJChFWEVfRVhUKTogJChTSEFURVNUKS5vICQoRExJQkNSWVBUTykKKy0JQHRhcmdldD0kKFNIQVRFU1QpOyAkKEJVSUxEX0NNRCkKKysJK0B0YXJnZXQ9JChTSEFURVNUKTsgJChCVUlMRF9DTUQpCisgCisgJChTSEExVEVTVCkkKEVYRV9FWFQpOiAkKFNIQTFURVNUKS5vICQoRExJQkNSWVBUTykKKy0JQHRhcmdldD0kKFNIQTFURVNUKTsgJChCVUlMRF9DTUQpCisrCStAdGFyZ2V0PSQoU0hBMVRFU1QpOyAkKEJVSUxEX0NNRCkKKyAKKyAkKFNIQTI1NlRFU1QpJChFWEVfRVhUKTogJChTSEEyNTZURVNUKS5vICQoRExJQkNSWVBUTykKKy0JQHRhcmdldD0kKFNIQTI1NlRFU1QpOyAkKEJVSUxEX0NNRCkKKysJK0B0YXJnZXQ9JChTSEEyNTZURVNUKTsgJChCVUlMRF9DTUQpCisgCisgJChTSEE1MTJURVNUKSQoRVhFX0VYVCk6ICQoU0hBNTEyVEVTVCkubyAkKERMSUJDUllQVE8pCistCUB0YXJnZXQ9JChTSEE1MTJURVNUKTsgJChCVUlMRF9DTUQpCisrCStAdGFyZ2V0PSQoU0hBNTEyVEVTVCk7ICQoQlVJTERfQ01EKQorIAorICQoUk1EVEVTVCkkKEVYRV9FWFQpOiAkKFJNRFRFU1QpLm8gJChETElCQ1JZUFRPKQorLQlAdGFyZ2V0PSQoUk1EVEVTVCk7ICQoQlVJTERfQ01EKQorKwkrQHRhcmdldD0kKFJNRFRFU1QpOyAkKEJVSUxEX0NNRCkKKyAKKyAkKE1EQzJURVNUKSQoRVhFX0VYVCk6ICQoTURDMlRFU1QpLm8gJChETElCQ1JZUFRPKQorLQlAdGFyZ2V0PSQoTURDMlRFU1QpOyAkKEJVSUxEX0NNRCkKKysJK0B0YXJnZXQ9JChNREMyVEVTVCk7ICQoQlVJTERfQ01EKQorIAorICQoTUQ0VEVTVCkkKEVYRV9FWFQpOiAkKE1ENFRFU1QpLm8gJChETElCQ1JZUFRPKQorLQlAdGFyZ2V0PSQoTUQ0VEVTVCk7ICQoQlVJTERfQ01EKQorKwkrQHRhcmdldD0kKE1ENFRFU1QpOyAkKEJVSUxEX0NNRCkKKyAKKyAkKE1ENVRFU1QpJChFWEVfRVhUKTogJChNRDVURVNUKS5vICQoRExJQkNSWVBUTykKKy0JQHRhcmdldD0kKE1ENVRFU1QpOyAkKEJVSUxEX0NNRCkKKysJK0B0YXJnZXQ9JChNRDVURVNUKTsgJChCVUlMRF9DTUQpCisgCisgJChITUFDVEVTVCkkKEVYRV9FWFQpOiAkKEhNQUNURVNUKS5vICQoRExJQkNSWVBUTykKKy0JQHRhcmdldD0kKEhNQUNURVNUKTsgJChCVUlMRF9DTUQpCisrCStAdGFyZ2V0PSQoSE1BQ1RFU1QpOyAkKEJVSUxEX0NNRCkKKyAKKyAkKFdQVEVTVCkkKEVYRV9FWFQpOiAkKFdQVEVTVCkubyAkKERMSUJDUllQVE8pCistCUB0YXJnZXQ9JChXUFRFU1QpOyAkKEJVSUxEX0NNRCkKKysJK0B0YXJnZXQ9JChXUFRFU1QpOyAkKEJVSUxEX0NNRCkKKyAKKyAkKFJDMlRFU1QpJChFWEVfRVhUKTogJChSQzJURVNUKS5vICQoRExJQkNSWVBUTykKKy0JQHRhcmdldD0kKFJDMlRFU1QpOyAkKEJVSUxEX0NNRCkKKysJK0B0YXJnZXQ9JChSQzJURVNUKTsgJChCVUlMRF9DTUQpCisgCisgJChCRlRFU1QpJChFWEVfRVhUKTogJChCRlRFU1QpLm8gJChETElCQ1JZUFRPKQorLQlAdGFyZ2V0PSQoQkZURVNUKTsgJChCVUlMRF9DTUQpCisrCStAdGFyZ2V0PSQoQkZURVNUKTsgJChCVUlMRF9DTUQpCisgCisgJChDQVNUVEVTVCkkKEVYRV9FWFQpOiAkKENBU1RURVNUKS5vICQoRExJQkNSWVBUTykKKy0JQHRhcmdldD0kKENBU1RURVNUKTsgJChCVUlMRF9DTUQpCisrCStAdGFyZ2V0PSQoQ0FTVFRFU1QpOyAkKEJVSUxEX0NNRCkKKyAKKyAkKFJDNFRFU1QpJChFWEVfRVhUKTogJChSQzRURVNUKS5vICQoRExJQkNSWVBUTykKKy0JQHRhcmdldD0kKFJDNFRFU1QpOyAkKEJVSUxEX0NNRCkKKysJK0B0YXJnZXQ9JChSQzRURVNUKTsgJChCVUlMRF9DTUQpCisgCisgJChSQzVURVNUKSQoRVhFX0VYVCk6ICQoUkM1VEVTVCkubyAkKERMSUJDUllQVE8pCistCUB0YXJnZXQ9JChSQzVURVNUKTsgJChCVUlMRF9DTUQpCisrCStAdGFyZ2V0PSQoUkM1VEVTVCk7ICQoQlVJTERfQ01EKQorIAorICQoREVTVEVTVCkkKEVYRV9FWFQpOiAkKERFU1RFU1QpLm8gJChETElCQ1JZUFRPKQorLQlAdGFyZ2V0PSQoREVTVEVTVCk7ICQoQlVJTERfQ01EKQorKwkrQHRhcmdldD0kKERFU1RFU1QpOyAkKEJVSUxEX0NNRCkKKyAKKyAkKFJBTkRURVNUKSQoRVhFX0VYVCk6ICQoUkFORFRFU1QpLm8gJChETElCQ1JZUFRPKQorLQlAdGFyZ2V0PSQoUkFORFRFU1QpOyAkKEJVSUxEX0NNRCkKKysJK0B0YXJnZXQ9JChSQU5EVEVTVCk7ICQoQlVJTERfQ01EKQorIAorICQoREhURVNUKSQoRVhFX0VYVCk6ICQoREhURVNUKS5vICQoRExJQkNSWVBUTykKKy0JQHRhcmdldD0kKERIVEVTVCk7ICQoQlVJTERfQ01EKQorKwkrQHRhcmdldD0kKERIVEVTVCk7ICQoQlVJTERfQ01EKQorIAorICQoRFNBVEVTVCkkKEVYRV9FWFQpOiAkKERTQVRFU1QpLm8gJChETElCQ1JZUFRPKQorLQlAdGFyZ2V0PSQoRFNBVEVTVCk7ICQoQlVJTERfQ01EKQorKwkrQHRhcmdldD0kKERTQVRFU1QpOyAkKEJVSUxEX0NNRCkKKyAKKyAkKE1FVEhURVNUKSQoRVhFX0VYVCk6ICQoTUVUSFRFU1QpLm8gJChETElCQ1JZUFRPKQorLQlAdGFyZ2V0PSQoTUVUSFRFU1QpOyAkKEJVSUxEX0NNRCkKKysJK0B0YXJnZXQ9JChNRVRIVEVTVCk7ICQoQlVJTERfQ01EKQorIAorICQoU1NMVEVTVCkkKEVYRV9FWFQpOiAkKFNTTFRFU1QpLm8gJChETElCU1NMKSAkKERMSUJDUllQVE8pCistCUB0YXJnZXQ9JChTU0xURVNUKTsgJChGSVBTX0JVSUxEX0NNRCkKKysJK0B0YXJnZXQ9JChTU0xURVNUKTsgJChGSVBTX0JVSUxEX0NNRCkKKyAKKyAkKEVOR0lORVRFU1QpJChFWEVfRVhUKTogJChFTkdJTkVURVNUKS5vICQoRExJQkNSWVBUTykKKy0JQHRhcmdldD0kKEVOR0lORVRFU1QpOyAkKEJVSUxEX0NNRCkKKysJK0B0YXJnZXQ9JChFTkdJTkVURVNUKTsgJChCVUlMRF9DTUQpCisgCisgJChFVlBURVNUKSQoRVhFX0VYVCk6ICQoRVZQVEVTVCkubyAkKERMSUJDUllQVE8pCistCUB0YXJnZXQ9JChFVlBURVNUKTsgJChCVUlMRF9DTUQpCisrCStAdGFyZ2V0PSQoRVZQVEVTVCk7ICQoQlVJTERfQ01EKQorIAorICQoRVZQRVhUUkFURVNUKSQoRVhFX0VYVCk6ICQoRVZQRVhUUkFURVNUKS5vICQoRExJQkNSWVBUTykKKy0JQHRhcmdldD0kKEVWUEVYVFJBVEVTVCk7ICQoQlVJTERfQ01EKQorKwkrQHRhcmdldD0kKEVWUEVYVFJBVEVTVCk7ICQoQlVJTERfQ01EKQorIAorICQoRUNEU0FURVNUKSQoRVhFX0VYVCk6ICQoRUNEU0FURVNUKS5vICQoRExJQkNSWVBUTykKKy0JQHRhcmdldD0kKEVDRFNBVEVTVCk7ICQoQlVJTERfQ01EKQorKwkrQHRhcmdldD0kKEVDRFNBVEVTVCk7ICQoQlVJTERfQ01EKQorIAorICQoRUNESFRFU1QpJChFWEVfRVhUKTogJChFQ0RIVEVTVCkubyAkKERMSUJDUllQVE8pCistCUB0YXJnZXQ9JChFQ0RIVEVTVCk7ICQoQlVJTERfQ01EKQorKwkrQHRhcmdldD0kKEVDREhURVNUKTsgJChCVUlMRF9DTUQpCisgCisgJChJR0VURVNUKSQoRVhFX0VYVCk6ICQoSUdFVEVTVCkubyAkKERMSUJDUllQVE8pCistCUB0YXJnZXQ9JChJR0VURVNUKTsgJChCVUlMRF9DTUQpCisrCStAdGFyZ2V0PSQoSUdFVEVTVCk7ICQoQlVJTERfQ01EKQorIAorICQoSlBBS0VURVNUKSQoRVhFX0VYVCk6ICQoSlBBS0VURVNUKS5vICQoRExJQkNSWVBUTykKKy0JQHRhcmdldD0kKEpQQUtFVEVTVCk7ICQoQlVJTERfQ01EKQorKwkrQHRhcmdldD0kKEpQQUtFVEVTVCk7ICQoQlVJTERfQ01EKQorIAorICQoQVNOMVRFU1QpJChFWEVfRVhUKTogJChBU04xVEVTVCkubyAkKERMSUJDUllQVE8pCistCUB0YXJnZXQ9JChBU04xVEVTVCk7ICQoQlVJTERfQ01EKQorKwkrQHRhcmdldD0kKEFTTjFURVNUKTsgJChCVUlMRF9DTUQpCisgCisgJChTUlBURVNUKSQoRVhFX0VYVCk6ICQoU1JQVEVTVCkubyAkKERMSUJDUllQVE8pCistCUB0YXJnZXQ9JChTUlBURVNUKTsgJChCVUlMRF9DTUQpCisrCStAdGFyZ2V0PSQoU1JQVEVTVCk7ICQoQlVJTERfQ01EKQorIAorICQoVjNOQU1FVEVTVCkkKEVYRV9FWFQpOiAkKFYzTkFNRVRFU1QpLm8gJChETElCQ1JZUFRPKQorLQlAdGFyZ2V0PSQoVjNOQU1FVEVTVCk7ICQoQlVJTERfQ01EKQorKwkrQHRhcmdldD0kKFYzTkFNRVRFU1QpOyAkKEJVSUxEX0NNRCkKKyAKKyAkKEhFQVJUQkVBVFRFU1QpJChFWEVfRVhUKTogJChIRUFSVEJFQVRURVNUKS5vICQoRExJQkNSWVBUTykKKy0JQHRhcmdldD0kKEhFQVJUQkVBVFRFU1QpOyAkKEJVSUxEX0NNRF9TVEFUSUMpCisrCStAdGFyZ2V0PSQoSEVBUlRCRUFUVEVTVCk7ICQoQlVJTERfQ01EX1NUQVRJQykKKyAKKyAkKENPTlNUVElNRVRFU1QpJChFWEVfRVhUKTogJChDT05TVFRJTUVURVNUKS5vCistCUB0YXJnZXQ9JChDT05TVFRJTUVURVNUKSAkKEJVSUxEX0NNRCkKKysJK0B0YXJnZXQ9JChDT05TVFRJTUVURVNUKSAkKEJVSUxEX0NNRCkKKyAKKyAkKFZFUklGWUVYVFJBVEVTVCkkKEVYRV9FWFQpOiAkKFZFUklGWUVYVFJBVEVTVCkubworLQlAdGFyZ2V0PSQoVkVSSUZZRVhUUkFURVNUKSAkKEJVSUxEX0NNRCkKKysJK0B0YXJnZXQ9JChWRVJJRllFWFRSQVRFU1QpICQoQlVJTERfQ01EKQorIAorICQoQ0xJRU5USEVMTE9URVNUKSQoRVhFX0VYVCk6ICQoQ0xJRU5USEVMTE9URVNUKS5vCistCUB0YXJnZXQ9JChDTElFTlRIRUxMT1RFU1QpICQoQlVJTERfQ01EKQorKwkrQHRhcmdldD0kKENMSUVOVEhFTExPVEVTVCkgJChCVUlMRF9DTUQpCisgCisgJChCQUREVExTVEVTVCkkKEVYRV9FWFQpOiAkKEJBRERUTFNURVNUKS5vCistCUB0YXJnZXQ9JChCQUREVExTVEVTVCkgJChCVUlMRF9DTUQpCisrCStAdGFyZ2V0PSQoQkFERFRMU1RFU1QpICQoQlVJTERfQ01EKQorIAorICQoRkFUQUxFUlJURVNUKSQoRVhFX0VYVCk6ICQoRkFUQUxFUlJURVNUKS5vIHNzbHRlc3RsaWIubyAkKERMSUJTU0wpICQoRExJQkNSWVBUTykKKyAJQHRhcmdldD0kKEZBVEFMRVJSVEVTVCk7IGV4b2JqPXNzbHRlc3RsaWIubzsgJChCVUlMRF9DTUQpCisgCisgJChTU0xWMkNPTkZURVNUKSQoRVhFX0VYVCk6ICQoU1NMVjJDT05GVEVTVCkubworLQlAdGFyZ2V0PSQoU1NMVjJDT05GVEVTVCkgJChCVUlMRF9DTUQpCisrCStAdGFyZ2V0PSQoU1NMVjJDT05GVEVTVCkgJChCVUlMRF9DTUQpCisgCisgJChEVExTVEVTVCkkKEVYRV9FWFQpOiAkKERUTFNURVNUKS5vIHNzbHRlc3RsaWIubyAkKERMSUJTU0wpICQoRExJQkNSWVBUTykKKy0JQHRhcmdldD0kKERUTFNURVNUKTsgZXhvYmo9c3NsdGVzdGxpYi5vOyAkKEJVSUxEX0NNRCkKKysJK0B0YXJnZXQ9JChEVExTVEVTVCk7IGV4b2JqPXNzbHRlc3RsaWIubzsgJChCVUlMRF9DTUQpCisgCisgIyQoQUVTVEVTVCkubzogJChBRVNURVNUKS5jCisgIwkkKENDKSAtYyAkKENGTEFHUykgLURJTlRFUk1FRElBVEVfVkFMVUVfS0FUIC1EVFJBQ0VfS0FUX01DVCAkKEFFU1RFU1QpLmMKK0BAIC01ODksNyArNTg5LDcgQEAgJChEVExTVEVTVCkkKEVYRV9FWFQpOiAkKERUTFNURVNUKS5vIHNzbHRlc3RsaWIubyAkKERMSUJTU0wpICQoRExJQkNSWVBUTykKKyAjCWZpCisgCisgZHVtbXl0ZXN0JChFWEVfRVhUKTogZHVtbXl0ZXN0Lm8gJChETElCQ1JZUFRPKQorLQlAdGFyZ2V0PWR1bW15dGVzdDsgJChCVUlMRF9DTUQpCisrCStAdGFyZ2V0PWR1bW15dGVzdDsgJChCVUlMRF9DTUQpCisgCisgIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgorIAorLS0gCisyLjE1LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL3B0ZXN0LWRlcHMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuL3B0ZXN0LWRlcHMucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9wdGVzdC1kZXBzLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuL3B0ZXN0LWRlcHMucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9wdGVzdF9tYWtlZmlsZV9kZXBzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLTEuMC4ybi9wdGVzdF9tYWtlZmlsZV9kZXBzLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvcHRlc3RfbWFrZWZpbGVfZGVwcy5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLTEuMC4ybi9wdGVzdF9tYWtlZmlsZV9kZXBzLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuL3J1bi1wdGVzdCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNiMjBmY2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuL3J1bi1wdGVzdApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9zaAorbWFrZSAtayBydW50ZXN0CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvc2hhcmVkLWxpYnMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wtMS4wLjJuL3NoYXJlZC1saWJzLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvc2hhcmVkLWxpYnMucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC0xLjAuMm4vc2hhcmVkLWxpYnMucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjJhNzk3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTIgKzAsMCBAQAotU1VNTUFSWSA9ICJTZWN1cmUgU29ja2V0IExheWVyIgotREVTQ1JJUFRJT04gPSAiU2VjdXJlIFNvY2tldCBMYXllciAoU1NMKSBiaW5hcnkgYW5kIHJlbGF0ZWQgY3J5cHRvZ3JhcGhpYyB0b29scy4iCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9uZXdzL3Z1bG5lcmFiaWxpdGllcy5odG1sIgotU0VDVElPTiA9ICJsaWJzL25ldHdvcmsiCi0KLSMgIm9wZW5zc2wgfCBTU0xlYXkiIGR1YWwgbGljZW5zZQotTElDRU5TRSA9ICJvcGVuc3NsIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZjlhOGY5NjgxMDczNDVlMGI3NWFhOGMyZWNhYTdlYzgiCi0KLURFUEVORFMgPSAibWFrZWRlcGVuZC1uYXRpdmUgaG9zdHBlcmwtcnVudGltZS1uYXRpdmUiCi1ERVBFTkRTX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIG9wZW5zc2wtbmF0aXZlIgotCi1TUkNfVVJJID0gImh0dHA6Ly93d3cub3BlbnNzbC5vcmcvc291cmNlL29wZW5zc2wtJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAiCi1TID0gIiR7V09SS0RJUn0vb3BlbnNzbC0ke1BWfSIKLQotUEFDS0FHRUNPTkZJR1twZXJsXSA9ICIsLCwiCi0KLVRFUk1JT19saWJjLW11c2wgPSAiLURURVJNSU9TIgotVEVSTUlPID89ICItRFRFUk1JTyIKLSMgQXZvaWQgYmluYXJpZXMgYmVpbmcgbWFya2VkIGFzIHJlcXVpcmluZyBhbiBleGVjdXRhYmxlIHN0YWNrIHNpbmNlIGl0IAotIyBkb2Vzbid0KHdoaWNoIGNhdXNlcyBhbmQgdGhpcyBjYXVzZXMgaXNzdWVzIHdpdGggU0VMaW51eAotQ0ZMQUcgPSAiJHtAYmFzZV9jb25kaXRpb25hbCgnU0lURUlORk9fRU5ESUFOTkVTUycsICdsZScsICctRExfRU5ESUFOJywgJy1EQl9FTkRJQU4nLCBkKX0gXAotCSAke1RFUk1JT30gJHtDRkxBR1N9IC1XYWxsIC1XYSwtLW5vZXhlY3N0YWNrIgotCi1leHBvcnQgRElSUyA9ICJjcnlwdG8gc3NsIGFwcHMiCi1leHBvcnQgRVhfTElCUyA9ICItbGdjYyAtbGRsIgotZXhwb3J0IEFTID0gIiR7Q0N9IC1jIgotCi1pbmhlcml0IHBrZ2NvbmZpZyBzaXRlaW5mbyBtdWx0aWxpYl9oZWFkZXIgcHRlc3QgcmVsYXRpdmVfc3ltbGlua3MKLQotUEFDS0FHRVMgPSsgImxpYmNyeXB0byBsaWJzc2wgJHtQTn0tbWlzYyBvcGVuc3NsLWNvbmYiCi1GSUxFU19saWJjcnlwdG8gPSAiJHtsaWJkaXJ9L2xpYmNyeXB0byR7U09MSUJTfSIKLUZJTEVTX2xpYnNzbCA9ICIke2xpYmRpcn0vbGlic3NsJHtTT0xJQlN9IgotRklMRVNfJHtQTn0gPSsgIiAke2xpYmRpcn0vc3NsLyoiCi1GSUxFU18ke1BOfS1taXNjID0gIiR7bGliZGlyfS9zc2wvbWlzYyIKLVJERVBFTkRTXyR7UE59LW1pc2MgPSAiJHtAYmIudXRpbHMuZmlsdGVyKCdQQUNLQUdFQ09ORklHJywgJ3BlcmwnLCBkKX0iCi0KLVBST1ZJREVTICs9ICJvcGVuc3NsMTAiCi0KLSMgQWRkIHRoZSBvcGVuc3NsLmNuZiBmaWxlIHRvIHRoZSBvcGVuc3NsLWNvbmYgcGFja2FnZS4gIE1ha2UgdGhlIGxpYmNyeXB0bwotIyBwYWNrYWdlIFJSRUNPTU1FTkRTIG9uIHRoaXMgcGFja2FnZS4gIFRoaXMgd2lsbCBlbmFibGUgdGhlIGNvbmZpZ3VyYXRpb24KLSMgZmlsZSB0byBiZSBpbnN0YWxsZWQgZm9yIGJvdGggdGhlIGJhc2Ugb3BlbnNzbCBwYWNrYWdlIGFuZCB0aGUgbGliY3J5cHRvCi0jIHBhY2thZ2Ugc2luY2UgdGhlIGJhc2Ugb3BlbnNzbCBwYWNrYWdlIGRlcGVuZHMgb24gdGhlIGxpYmNyeXB0byBwYWNrYWdlLgotRklMRVNfb3BlbnNzbC1jb25mID0gIiR7c3lzY29uZmRpcn0vc3NsL29wZW5zc2wuY25mIgotQ09ORkZJTEVTX29wZW5zc2wtY29uZiA9ICIke3N5c2NvbmZkaXJ9L3NzbC9vcGVuc3NsLmNuZiIKLVJSRUNPTU1FTkRTX2xpYmNyeXB0byArPSAib3BlbnNzbC1jb25mIgotUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIiR7UE59LW1pc2MgbWFrZSBwZXJsIHBlcmwtbW9kdWxlLWZpbGVoYW5kbGUgYmMiCi0KLSMgUmVtb3ZlIHRoaXMgdG8gZW5hYmxlIFNTTHYzLiBTU0x2MyBpcyBkZWZhdWx0ZWQgdG8gZGlzYWJsZWQgZHVlIHRvIHRoZSBQT09ETEUKLSMgdnVsbmVyYWJpbGl0eQotRVhUUkFfT0VDT05GID0gIiAtbm8tc3NsMyIKLQotZG9fY29uZmlndXJlX3ByZXBlbmRfZGFyd2luICgpIHsKLQlzZWQgLWkgLWUgJy92ZXJzaW9uLXNjcmlwdD1vcGVuc3NsXC5sZC9kJyBDb25maWd1cmUKLX0KLQotZG9fY29uZmlndXJlICgpIHsKLQljZCB1dGlsCi0JcGVybCBwZXJscGF0aC5wbCAke1NUQUdJTkdfQklORElSX05BVElWRX0KLQljZCAuLgotCWxuIC1zZiBhcHBzL29wZW5zc2wucG9kIGNyeXB0by9jcnlwdG8ucG9kIHNzbC9zc2wucG9kIGRvYy8KLQotCW9zPSR7SE9TVF9PU30KLQljYXNlICRvcyBpbgotCWxpbnV4LXVjbGliYyB8XAotCWxpbnV4LXVjbGliY2VhYmkgfFwKLQlsaW51eC1nbnVlYWJpIHxcCi0JbGludXgtdWNsaWJjc3BlIHxcCi0JbGludXgtZ251c3BlIHxcCi0JbGludXgtbXVzbCopCi0JCW9zPWxpbnV4Ci0JCTs7Ci0JCSopCi0JCTs7Ci0JZXNhYwotCXRhcmdldD0iJG9zLSR7SE9TVF9BUkNIfSIKLQljYXNlICR0YXJnZXQgaW4KLQlsaW51eC1hcm0pCi0JCXRhcmdldD1saW51eC1hcm12NAotCQk7OwotCWxpbnV4LWFybWViKQotCQl0YXJnZXQ9bGludXgtZWxmLWFybWViCi0JCTs7Ci0JbGludXgtYWFyY2g2NCopCi0JCXRhcmdldD1saW51eC1hYXJjaDY0Ci0JCTs7Ci0JbGludXgtc2gzKQotCQl0YXJnZXQ9ZGViaWFuLXNoMwotCQk7OwotCWxpbnV4LXNoNCkKLQkJdGFyZ2V0PWRlYmlhbi1zaDQKLQkJOzsKLQlsaW51eC1pNDg2KQotCQl0YXJnZXQ9ZGViaWFuLWkzODYtaTQ4NgotCQk7OwotCWxpbnV4LWk1ODYgfCBsaW51eC12aWFjMykKLQkJdGFyZ2V0PWRlYmlhbi1pMzg2LWk1ODYKLQkJOzsKLQlsaW51eC1pNjg2KQotCQl0YXJnZXQ9ZGViaWFuLWkzODYtaTY4Ni9jbW92Ci0JCTs7Ci0JbGludXgtZ251eDMyLXg4Nl82NCkKLQkJdGFyZ2V0PWxpbnV4LXgzMgotCQk7OwotCWxpbnV4LWdudTY0LXg4Nl82NCkKLQkJdGFyZ2V0PWxpbnV4LXg4Nl82NAotCQk7OwotCWxpbnV4LWdudW4zMi1taXBzKmVsKQotCQl0YXJnZXQ9ZGViaWFuLW1pcHNuMzJlbAotCQk7OwotCWxpbnV4LWdudW4zMi1taXBzKikKLQkJdGFyZ2V0PWRlYmlhbi1taXBzbjMyCi0JCTs7Ci0JbGludXgtbWlwcyo2NCplbCkKLQkJdGFyZ2V0PWRlYmlhbi1taXBzNjRlbAotCQk7OwotCWxpbnV4LW1pcHMqNjQqKQotCQl0YXJnZXQ9ZGViaWFuLW1pcHM2NAotCQk7OwotCWxpbnV4LW1pcHMqZWwpCi0JCXRhcmdldD1kZWJpYW4tbWlwc2VsCi0JCTs7Ci0JbGludXgtbWlwcyopCi0JCXRhcmdldD1kZWJpYW4tbWlwcwotCQk7OwotCWxpbnV4LW1pY3JvYmxhemUqfGxpbnV4LW5pb3MyKikKLQkJdGFyZ2V0PWxpbnV4LWdlbmVyaWMzMgotCQk7OwotCWxpbnV4LXBvd2VycGMpCi0JCXRhcmdldD1saW51eC1wcGMKLQkJOzsKLQlsaW51eC1wb3dlcnBjNjQpCi0JCXRhcmdldD1saW51eC1wcGM2NAotCQk7OwotCWxpbnV4LXN1cGVyc3BhcmMpCi0JCXRhcmdldD1saW51eC1zcGFyY3Y4Ci0JCTs7Ci0JbGludXgtc3BhcmMpCi0JCXRhcmdldD1saW51eC1zcGFyY3Y4Ci0JCTs7Ci0JZGFyd2luLWkzODYpCi0JCXRhcmdldD1kYXJ3aW4taTM4Ni1jYwotCQk7OwotCWVzYWMKLQkjIGluamVjdCBtYWNoaW5lLXNwZWNpZmljIGZsYWdzCi0Jc2VkIC1pIC1lICJzfF5cKFwiJHRhcmdldFwiLFxzKlwiW146XVwrXCk6XChbXjpdXCtcKXxcMToke0NGTEFHfXxnIiBDb25maWd1cmUKLSAgICAgICAgdXNlcHJlZml4PSR7cHJlZml4fQotICAgICAgICBpZiBbICJ4JHVzZXByZWZpeCIgPSAieCIgXTsgdGhlbgotICAgICAgICAgICAgICAgIHVzZXByZWZpeD0vCi0gICAgICAgIGZpICAgICAgICAKLQlwZXJsIC4vQ29uZmlndXJlICR7RVhUUkFfT0VDT05GfSBzaGFyZWQgLS1wcmVmaXg9JHVzZXByZWZpeCAtLW9wZW5zc2xkaXI9JHtsaWJkaXJ9L3NzbCAtLWxpYmRpcj1gYmFzZW5hbWUgJHtsaWJkaXJ9YCAkdGFyZ2V0Ci19Ci0KLWRvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy10YXJnZXQgKCkgewotICAgIHNlZCAtaSAncy9cKChPUEVOU1NMPVwpIi4qIi9cMSJvcGVuc3NsIi8nIE1ha2VmaWxlCi19Ci0KLWRvX2NvbXBpbGUgKCkgewotCW9lX3J1bm1ha2UgZGVwZW5kCi0Jb2VfcnVubWFrZQotfQotCi1kb19jb21waWxlX3B0ZXN0ICgpIHsKLQkjIGJ1aWxkIGRlcGVuZGVuY2llcyBmb3IgdGVzdCBkaXJlY3RvcnkgdG9vCi0JZXhwb3J0IERJUlM9IiRESVJTIHRlc3QiCi0Jb2VfcnVubWFrZSBkZXBlbmQKLQlvZV9ydW5tYWtlIGJ1aWxkdGVzdAotfQotCi1kb19pbnN0YWxsICgpIHsKLQkjIENyZWF0ZSAke0R9LyR7cHJlZml4fSB0byBmaXggcGFyYWxsZWwgaXNzdWVzCi0JbWtkaXIgLXAgJHtEfS8ke3ByZWZpeH0vCi0KLQlvZV9ydW5tYWtlIElOU1RBTExfUFJFRklYPSIke0R9IiBNQU5ESVI9IiR7bWFuZGlyfSIgaW5zdGFsbAotCi0Jb2VfbGliaW5zdGFsbCAtc28gbGliY3J5cHRvICR7RH0ke2xpYmRpcn0KLQlvZV9saWJpbnN0YWxsIC1zbyBsaWJzc2wgJHtEfSR7bGliZGlyfQotCi0JaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfQotCWNwIC0tZGVyZWZlcmVuY2UgLVIgaW5jbHVkZS9vcGVuc3NsICR7RH0ke2luY2x1ZGVkaXJ9Ci0KLQlpbnN0YWxsIC1EbSAwNzU1ICR7V09SS0RJUn0vb3BlbnNzbC1jX3JlaGFzaC5zaCAke0R9JHtiaW5kaXJ9L2NfcmVoYXNoCi0Jc2VkIC1pIC1lICdzLC9ldGMvb3BlbnNzbCwke3N5c2NvbmZkaXJ9L3NzbCxnJyAke0R9JHtiaW5kaXJ9L2NfcmVoYXNoCi0KLQlvZV9tdWx0aWxpYl9oZWFkZXIgb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0JaWYgWyAiJHtAYmIudXRpbHMuZmlsdGVyKCdQQUNLQUdFQ09ORklHJywgJ3BlcmwnLCBkKX0iIF07IHRoZW4KLQkJc2VkIC1pIC1lICcxcywuKiwjISR7YmluZGlyfS9lbnYgcGVybCwnICR7RH0ke2xpYmRpcn0vc3NsL21pc2MvQ0EucGwKLQkJc2VkIC1pIC1lICcxcywuKiwjISR7YmluZGlyfS9lbnYgcGVybCwnICR7RH0ke2xpYmRpcn0vc3NsL21pc2MvdHNnZXQKLQllbHNlCi0JCXJtIC1mICR7RH0ke2xpYmRpcn0vc3NsL21pc2MvQ0EucGwgJHtEfSR7bGliZGlyfS9zc2wvbWlzYy90c2dldAotCWZpCi0KLQkjIENyZWF0ZSBTU0wgc3RydWN0dXJlCi0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9zc2wvCi0JbXYgJHtEfSR7bGliZGlyfS9zc2wvb3BlbnNzbC5jbmYgXAotCSAgICR7RH0ke2xpYmRpcn0vc3NsL2NlcnRzIFwKLQkgICAke0R9JHtsaWJkaXJ9L3NzbC9wcml2YXRlIFwKLQkgICBcCi0JICAgJHtEfSR7c3lzY29uZmRpcn0vc3NsLwotCWxuIC1zZiAke3N5c2NvbmZkaXJ9L3NzbC9jZXJ0cyAke0R9JHtsaWJkaXJ9L3NzbC9jZXJ0cwotCWxuIC1zZiAke3N5c2NvbmZkaXJ9L3NzbC9wcml2YXRlICR7RH0ke2xpYmRpcn0vc3NsL3ByaXZhdGUKLQlsbiAtc2YgJHtzeXNjb25mZGlyfS9zc2wvb3BlbnNzbC5jbmYgJHtEfSR7bGliZGlyfS9zc2wvb3BlbnNzbC5jbmYKLX0KLQotZG9faW5zdGFsbF9wdGVzdCAoKSB7Ci0JY3AgLXIgLUwgTWFrZWZpbGUub3JnIE1ha2VmaWxlIHRlc3QgJHtEfSR7UFRFU1RfUEFUSH0KLQotICAgICAgICAjIFJlcGxhY2UgdGhlIHBhdGggdG8gbmF0aXZlIHBlcmwgd2l0aCB0aGUgcGF0aCB0byB0YXJnZXQgcGVybAotICAgICAgICBzZWQgLWkgJ3MsXlBFUkw9LiosUEVSTD0ke2JpbmRpcn0vcGVybCwnICR7RH0ke1BURVNUX1BBVEh9L01ha2VmaWxlCi0KLQljcCBDb25maWd1cmUgY29uZmlnIGVfb3MuaCAke0R9JHtQVEVTVF9QQVRIfQotCWNwIC1yIC1MIGluY2x1ZGUgJHtEfSR7UFRFU1RfUEFUSH0KLQlsbiAtc2YgJHtsaWJkaXJ9L2xpYmNyeXB0by5hICR7RH0ke1BURVNUX1BBVEh9Ci0JbG4gLXNmICR7bGliZGlyfS9saWJzc2wuYSAke0R9JHtQVEVTVF9QQVRIfQotCW1rZGlyIC1wICR7RH0ke1BURVNUX1BBVEh9L2NyeXB0bwotCWNwIGNyeXB0by9jb25zdGFudF90aW1lX2xvY2wuaCAke0R9JHtQVEVTVF9QQVRIfS9jcnlwdG8KLQljcCAtciBjZXJ0cyAke0R9JHtQVEVTVF9QQVRIfQotCW1rZGlyIC1wICR7RH0ke1BURVNUX1BBVEh9L2FwcHMKLQlsbiAtc2YgJHtsaWJkaXJ9L3NzbC9taXNjL0NBLnNoICAke0R9JHtQVEVTVF9QQVRIfS9hcHBzCi0JbG4gLXNmICR7c3lzY29uZmRpcn0vc3NsL29wZW5zc2wuY25mICR7RH0ke1BURVNUX1BBVEh9L2FwcHMKLQlsbiAtc2YgJHtiaW5kaXJ9L29wZW5zc2wgICAgICAgICAke0R9JHtQVEVTVF9QQVRIfS9hcHBzCi0JY3AgYXBwcy9zZXJ2ZXIucGVtICAgICAgICAgICAgICAke0R9JHtQVEVTVF9QQVRIfS9hcHBzCi0JY3AgYXBwcy9zZXJ2ZXIyLnBlbSAgICAgICAgICAgICAke0R9JHtQVEVTVF9QQVRIfS9hcHBzCi0JbWtkaXIgLXAgJHtEfSR7UFRFU1RfUEFUSH0vdXRpbAotCWluc3RhbGwgdXRpbC9vcGVuc3Nsd3JhcC5zaCAgICAke0R9JHtQVEVTVF9QQVRIfS91dGlsCi0JaW5zdGFsbCB1dGlsL3NobGliX3dyYXAuc2ggICAgICR7RH0ke1BURVNUX1BBVEh9L3V0aWwKLQkjIFRpbWUgc3RhbXBzIGFyZSByZWxldmFudCBmb3IgIm1ha2UgYWxsdGVzdHMiLCBvdGhlcndpc2UKLQkjIG1ha2UgbWF5IHRyeSB0byByZWNvbXBpbGUgYmluYXJpZXMuIE5vdCBvbmx5IG11c3QgdGhlCi0JIyBiaW5hcnkgZmlsZXMgYmUgbmV3ZXIgdGhhbiB0aGUgc291cmNlcywgdGhleSBhbHNvIG11c3QKLQkjIGJlIG1vcmUgcmVjZW50IHRoYW4gdGhlIGhlYWRlciBmaWxlcyBpbiAvdXNyL2luY2x1ZGUuCi0JIwotCSMgVXNpbmcgImNwIC1hIiBpcyBub3Qgc3VmZmljaWVudCwgYmVjYXVzZSBkb19pbnN0YWxsCi0JIyBkb2VzIG5vdCBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgdGltZSBzdGFtcHMuCi0JIwotCSMgU28gaW5zdGVhZCBvZiB1c2luZyB0aGUgb3JpZ2luYWwgZmlsZSBzdGFtcHMsIHdlIHNldAotCSMgdGhlIGN1cnJlbnQgdGltZSBmb3IgYWxsIGZpbGVzLiBCaW5hcmllcyB3aWxsIGdldAotCSMgbW9kaWZpZWQgYWdhaW4gbGF0ZXIgd2hlbiBzdHJpcHBpbmcgdGhlbSwgYnV0IHRoYXQncyBva2F5LgotCXRvdWNoICR7RH0ke1BURVNUX1BBVEh9Ci0JZmluZCAke0R9JHtQVEVTVF9QQVRIfSAtdHlwZSBmIC1wcmludDAgfCB4YXJncyAtLXZlcmJvc2UgLTAgdG91Y2ggLXIgJHtEfSR7UFRFU1RfUEFUSH0KLX0KLQotZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgewotCWNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vb3BlbnNzbCBcCi0JICAgIE9QRU5TU0xfQ09ORj0ke2xpYmRpcn0vc3NsL29wZW5zc2wuY25mIFwKLQkgICAgU1NMX0NFUlRfRElSPSR7bGliZGlyfS9zc2wvY2VydHMgXAotCSAgICBTU0xfQ0VSVF9GSUxFPSR7bGliZGlyfS9zc2wvY2VydC5wZW0gXAotCSAgICBPUEVOU1NMX0VOR0lORVM9JHtsaWJkaXJ9L3NzbC9lbmdpbmVzCi19Ci0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC8wMDAxLVJlbW92ZS10ZXN0LXRoYXQtcmVxdWlyZXMtcnVubmluZy1hcy1ub24tcm9vdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC8wMDAxLVJlbW92ZS10ZXN0LXRoYXQtcmVxdWlyZXMtcnVubmluZy1hcy1ub24tcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzZiYjM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLzAwMDEtUmVtb3ZlLXRlc3QtdGhhdC1yZXF1aXJlcy1ydW5uaW5nLWFzLW5vbi1yb290LnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK0Zyb20gM2ZkYjFlMmExNmVhNDA1YzY3MzE0NDdhODk5NGYyMjI4MDhlZjdlNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogRnJpLCA3IEFwciAyMDE3IDE4OjAxOjUyICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFJlbW92ZSB0ZXN0IHRoYXQgcmVxdWlyZXMgcnVubmluZyBhcyBub24tcm9vdAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lLWNvcmUgc3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKy0tLQorIHRlc3QvcmVjaXBlcy80MC10ZXN0X3JlaGFzaC50IHwgMTcgKy0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDE2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdGVzdC9yZWNpcGVzLzQwLXRlc3RfcmVoYXNoLnQgYi90ZXN0L3JlY2lwZXMvNDAtdGVzdF9yZWhhc2gudAoraW5kZXggZjkwMmMyMy4uYzc1NjdjMSAxMDA2NDQKKy0tLSBhL3Rlc3QvcmVjaXBlcy80MC10ZXN0X3JlaGFzaC50CisrKysgYi90ZXN0L3JlY2lwZXMvNDAtdGVzdF9yZWhhc2gudAorQEAgLTIzLDcgKzIzLDcgQEAgc2V0dXAoInRlc3RfcmVoYXNoIik7CisgcGxhbiBza2lwX2FsbCA9PiAidGVzdF9yZWhhc2ggaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIHBsYXRmb3JtIgorICAgICB1bmxlc3MgcnVuKGFwcChbIm9wZW5zc2wiLCAicmVoYXNoIiwgIi1oZWxwIl0pKTsKKyAKKy1wbGFuIHRlc3RzID0+IDU7CisrcGxhbiB0ZXN0cyA9PiAzOworIAorIGluZGlyICJyZWhhc2guJCQiID0+IHN1YiB7CisgICAgIHByZXBhcmUoKTsKK0BAIC00MiwyMSArNDIsNiBAQCBpbmRpciAicmVoYXNoLiQkIiA9PiBzdWIgeworICAgICAgICAnVGVzdGluZyByZWhhc2ggb3BlcmF0aW9ucyBvbiBlbXB0eSBkaXJlY3RvcnknKTsKKyB9LCBjcmVhdGUgPT4gMSwgY2xlYW51cCA9PiAxOworIAorLWluZGlyICJyZWhhc2guJCQiID0+IHN1YiB7CistICAgIHByZXBhcmUoKTsKKy0gICAgY2htb2QgMDUwMCwgY3VyZGlyKCk7CistICBTS0lQOiB7CistICAgICAgaWYgKCFvayghb3BlbihGT08sICI+dW53cml0YWJsZS50eHQiKSwKKy0gICAgICAgICAgICAgICJUZXN0aW5nIHRoYXQgd2UgYXJlbid0IHJ1bm5pbmcgYXMgYSBwcml2aWxlZ2VkIHVzZXIsIHN1Y2ggYXMgcm9vdCIpKSB7CistICAgICAgICAgIGNsb3NlIEZPTzsKKy0gICAgICAgICAgc2tpcCAiSXQncyBwb2ludGxlc3MgdG8gcnVuIHRoZSBuZXh0IHRlc3QgYXMgcm9vdCIsIDE7CistICAgICAgfQorLSAgICAgIGlzbnQocnVuKGFwcChbIm9wZW5zc2wiLCAicmVoYXNoIiwgY3VyZGlyKCldKSksIDEsCistICAgICAgICAgICAnVGVzdGluZyByZWhhc2ggb3BlcmF0aW9ucyBvbiByZWFkb25seSBkaXJlY3RvcnknKTsKKy0gICAgfQorLSAgICBjaG1vZCAwNzAwLCBjdXJkaXIoKTsgICAgICAgIyBtYWtlIGl0IHdyaXRhYmxlIGFnYWluLCBzbyBjbGVhbnVwIHdvcmtzCistfSwgY3JlYXRlID0+IDEsIGNsZWFudXAgPT4gMTsKKy0KKyBzdWIgcHJlcGFyZSB7CisgICAgIG15IEBwZW1zb3VyY2VmaWxlcyA9IHNvcnQgZ2xvYihzcmN0b3BfZmlsZSgndGVzdCcsICIqLnBlbSIpKTsKKyAgICAgbXkgQGRlc3RmaWxlcyA9ICgpOworLS0gCisyLjExLjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLzAwMDEtVGFrZS1saW5raW5nLWZsYWdzLWZyb20tTERGTEFHUy1lbnYtdmFyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLzAwMDEtVGFrZS1saW5raW5nLWZsYWdzLWZyb20tTERGTEFHUy1lbnYtdmFyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZTRlNDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvMDAwMS1UYWtlLWxpbmtpbmctZmxhZ3MtZnJvbS1MREZMQUdTLWVudi12YXIucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSAwOGZhY2U0MzUzZDgwMTExOTczYWJhOWMxMzA0YzkyMTU4Y2ZhZDBlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDI4IE1hciAyMDE3IDE2OjQwOjEyICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFRha2UgbGlua2luZyBmbGFncyBmcm9tIExERkxBR1MgZW52IHZhcgorCitUaGlzIGZpeGVzICJObyBHTlVfSEFTSCBpbiB0aGUgZWxmIGJpbmFyeSIgaXNzdWVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lLWNvcmUgc3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKy0tLQorIENvbmZpZ3VyYXRpb25zL3VuaXgtTWFrZWZpbGUudG1wbCB8IDIgKy0KKyBDb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9Db25maWd1cmF0aW9ucy91bml4LU1ha2VmaWxlLnRtcGwgYi9Db25maWd1cmF0aW9ucy91bml4LU1ha2VmaWxlLnRtcGwKK2luZGV4IGMwMjk4MTcuLjQzYjc2OWIgMTAwNjQ0CistLS0gYS9Db25maWd1cmF0aW9ucy91bml4LU1ha2VmaWxlLnRtcGwKKysrKyBiL0NvbmZpZ3VyYXRpb25zL3VuaXgtTWFrZWZpbGUudG1wbAorQEAgLTE3Myw3ICsxNzMsNyBAQCBDUk9TU19DT01QSUxFPSB7LSAkY29uZmlne2Nyb3NzX2NvbXBpbGVfcHJlZml4fSAtfQorIENDPSAkKENST1NTX0NPTVBJTEUpey0gJHRhcmdldHtjY30gLX0KKyBDRkxBR1M9ey0gb3VyICRjZmxhZ3MyID0gam9pbigiICIsKG1hcCB7ICItRCIuJF99IEB7JHRhcmdldHtkZWZpbmVzfX0sIEB7JGNvbmZpZ3tkZWZpbmVzfX0pLCItRE9QRU5TU0xESVI9XCJcXFwiXCQoT1BFTlNTTERJUilcXFwiXCIiLCItREVOR0lORVNESVI9XCJcXFwiXCQoRU5HSU5FU0RJUilcXFwiXCIiKSAtfSB7LSAkdGFyZ2V0e2NmbGFnc30gLX0gey0gJGNvbmZpZ3tjZmxhZ3N9IC19CisgQ0ZMQUdTX1E9ey0gJGNmbGFnczIgPX4gc3woW1xcIl0pfFxcJDF8ZzsgJGNmbGFnczIgLX0gey0gJGNvbmZpZ3tjZmxhZ3N9IC19CistTERGTEFHUz0gey0gJHRhcmdldHtsZmxhZ3N9IC19CisrTERGTEFHUz0gey0gJHRhcmdldHtsZmxhZ3N9LiIgIi4kRU5WeydMREZMQUdTJ30gLX0KKyBQTElCX0xERkxBR1M9IHstICR0YXJnZXR7cGxpYl9sZmxhZ3N9IC19CisgRVhfTElCUz0gey0gJHRhcmdldHtleF9saWJzfSAtfSB7LSAkY29uZmlne2V4X2xpYnN9IC19CisgTElCX0NGTEFHUz17LSAkdGFyZ2V0e3NoYXJlZF9jZmxhZ30gfHwgIiIgLX0KK2RpZmYgLS1naXQgYS9Db25maWd1cmUgYi9Db25maWd1cmUKK2luZGV4IGFlZTdjYzMuLjI3NGQyMzYgMTAwNzU1CistLS0gYS9Db25maWd1cmUKKysrKyBiL0NvbmZpZ3VyZQorQEAgLTk3OSw3ICs5NzksNyBAQCAkY29uZmlne2J1aWxkX2ZpbGV9ID0gJHRhcmdldHtidWlsZF9maWxlfTsKKyAkY29uZmlne2RlZmluZXN9ID0gW107CisgJGNvbmZpZ3tjZmxhZ3N9ID0gIiI7CisgJGNvbmZpZ3tleF9saWJzfSA9ICIiOworLSRjb25maWd7c2hhcmVkX2xkZmxhZ30gPSAiIjsKKyskY29uZmlne3NoYXJlZF9sZGZsYWd9ID0gJEVOVnsnTERGTEFHUyd9OworIAorICMgTWFrZSBzdXJlIGJ1aWxkX3NjaGVtZSBpcyBjb25zaXN0ZW50LgorICR0YXJnZXR7YnVpbGRfc2NoZW1lfSA9IFsgJHRhcmdldHtidWlsZF9zY2hlbWV9IF0KKy0tIAorMi4xMS4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC8wMDAxLWFlcy1hc20tYWVzLWFybXY0LWJzYWVzLWFybXY3LS5wbC1tYWtlLWl0LXdvcmstd2l0aC0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvMDAwMS1hZXMtYXNtLWFlcy1hcm12NC1ic2Flcy1hcm12Ny0ucGwtbWFrZS1pdC13b3JrLXdpdGgtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMGExNjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvMDAwMS1hZXMtYXNtLWFlcy1hcm12NC1ic2Flcy1hcm12Ny0ucGwtbWFrZS1pdC13b3JrLXdpdGgtLnBhdGNoCkBAIC0wLDAgKzEsODggQEAKK0Zyb20gYmNjMDk2YTUwODExYmYwZjBjNGZkMzRiMjk5M2ZlZDdhNzAxNTk3MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZHkgUG9seWFrb3YgPGFwcHJvQG9wZW5zc2wub3JnPgorRGF0ZTogRnJpLCAzIE5vdiAyMDE3IDIzOjMwOjAxICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGFlcy9hc20ve2Flcy1hcm12NHxic2Flcy1hcm12N30ucGw6IG1ha2UgaXQgd29yayB3aXRoCisgYmludXRpbHMtMi4yOS4KKworSXQncyBub3QgY2xlYXIgaWYgaXQncyBhIGZlYXR1cmUgb3IgYnVnLCBidXQgYmludXRpbHMtMi4yOVsuMV0KK2ludGVycHJldHMgJ2FkcicgaW5zdHJ1Y3Rpb24gd2l0aCBUaHVtYjIgY29kZSByZWZlcmVuY2UgZGlmZmVyZW50bHksCitpbiBhIHdheSB0aGF0IGFmZmVjdHMgY2FsY3VsYXRpb24gb2YgYWRkcmVzc2VzIG9mIGNvbnN0YW50cycgdGFibGVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1Jldmlld2VkLWJ5OiBUaW0gSHVkc29uIDx0amhAb3BlbnNzbC5vcmc+CitSZXZpZXdlZC1ieTogQmVybmQgRWRsaW5nZXIgPGJlcm5kLmVkbGluZ2VyQGhvdG1haWwuZGU+CitTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gQWduZXIgPHN0ZWZhbi5hZ25lckB0b3JhZGV4LmNvbT4KKyhNZXJnZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vb3BlbnNzbC9vcGVuc3NsL3B1bGwvNDY2OSkKKworKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgYjgyYWNjM2MxYTdmMzA0YzlkZjMxODQxNzUzYTBmYTc2YjViM2NkYSkKKy0tLQorIGNyeXB0by9hZXMvYXNtL2Flcy1hcm12NC5wbCAgIHwgNiArKystLS0KKyBjcnlwdG8vYWVzL2FzbS9ic2Flcy1hcm12Ny5wbCB8IDYgKysrLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcnlwdG8vYWVzL2FzbS9hZXMtYXJtdjQucGwgYi9jcnlwdG8vYWVzL2FzbS9hZXMtYXJtdjQucGwKK2luZGV4IDE2ZDc5YWFlNTMuLmM2NDc0YjhhYWQgMTAwNjQ0CistLS0gYS9jcnlwdG8vYWVzL2FzbS9hZXMtYXJtdjQucGwKKysrKyBiL2NyeXB0by9hZXMvYXNtL2Flcy1hcm12NC5wbAorQEAgLTIwMCw3ICsyMDAsNyBAQCBBRVNfZW5jcnlwdDoKKyAjaWZuZGVmCV9fdGh1bWIyX18KKyAJc3ViCXIzLHBjLCM4CQlAIEFFU19lbmNyeXB0CisgI2Vsc2UKKy0JYWRyCXIzLEFFU19lbmNyeXB0CisrCWFkcglyMywuCisgI2VuZGlmCisgCXN0bWRiICAgc3AhLHtyMSxyNC1yMTIsbHJ9CisgI2lmZGVmCV9fQVBQTEVfXworQEAgLTQ1MCw3ICs0NTAsNyBAQCBfYXJtdjRfQUVTX3NldF9lbmNyeXB0X2tleToKKyAjaWZuZGVmCV9fdGh1bWIyX18KKyAJc3ViCXIzLHBjLCM4CQlAIEFFU19zZXRfZW5jcnlwdF9rZXkKKyAjZWxzZQorLQlhZHIJcjMsQUVTX3NldF9lbmNyeXB0X2tleQorKwlhZHIJcjMsLgorICNlbmRpZgorIAl0ZXEJcjAsIzAKKyAjaWZkZWYJX190aHVtYjJfXworQEAgLTk3Niw3ICs5NzYsNyBAQCBBRVNfZGVjcnlwdDoKKyAjaWZuZGVmCV9fdGh1bWIyX18KKyAJc3ViCXIzLHBjLCM4CQlAIEFFU19kZWNyeXB0CisgI2Vsc2UKKy0JYWRyCXIzLEFFU19kZWNyeXB0CisrCWFkcglyMywuCisgI2VuZGlmCisgCXN0bWRiICAgc3AhLHtyMSxyNC1yMTIsbHJ9CisgI2lmZGVmCV9fQVBQTEVfXworZGlmZiAtLWdpdCBhL2NyeXB0by9hZXMvYXNtL2JzYWVzLWFybXY3LnBsIGIvY3J5cHRvL2Flcy9hc20vYnNhZXMtYXJtdjcucGwKK2luZGV4IDlmMjg4NjYwZWYuLmEyN2JiNGExNzkgMTAwNjQ0CistLS0gYS9jcnlwdG8vYWVzL2FzbS9ic2Flcy1hcm12Ny5wbAorKysrIGIvY3J5cHRvL2Flcy9hc20vYnNhZXMtYXJtdjcucGwKK0BAIC03NDQsNyArNzQ0LDcgQEAgJGNvZGUuPTw8X19fOworIC50eXBlCV9ic2Flc19kZWNyeXB0OCwlZnVuY3Rpb24KKyAuYWxpZ24JNAorIF9ic2Flc19kZWNyeXB0ODoKKy0JYWRyCSRjb25zdCxfYnNhZXNfZGVjcnlwdDgKKysJYWRyCSRjb25zdCwuCisgCXZsZG1pYQkka2V5ISwge0BYTU1bOV19CQlAIHJvdW5kIDAga2V5CisgI2lmZGVmCV9fQVBQTEVfXworIAlhZHIJJGNvbnN0LC5MTTBJU1IKK0BAIC04NDMsNyArODQzLDcgQEAgX2JzYWVzX2NvbnN0OgorIC50eXBlCV9ic2Flc19lbmNyeXB0OCwlZnVuY3Rpb24KKyAuYWxpZ24JNAorIF9ic2Flc19lbmNyeXB0ODoKKy0JYWRyCSRjb25zdCxfYnNhZXNfZW5jcnlwdDgKKysJYWRyCSRjb25zdCwuCisgCXZsZG1pYQkka2V5ISwge0BYTU1bOV19CQlAIHJvdW5kIDAga2V5CisgI2lmZGVmCV9fQVBQTEVfXworIAlhZHIJJGNvbnN0LC5MTTBTUgorQEAgLTk1MSw3ICs5NTEsNyBAQCAkY29kZS49PDxfX187CisgLnR5cGUJX2JzYWVzX2tleV9jb252ZXJ0LCVmdW5jdGlvbgorIC5hbGlnbgk0CisgX2JzYWVzX2tleV9jb252ZXJ0OgorLQlhZHIJJGNvbnN0LF9ic2Flc19rZXlfY29udmVydAorKwlhZHIJJGNvbnN0LC4KKyAJdmxkMS44CXtAWE1NWzddfSwgIFskaW5wXSEJCUAgbG9hZCByb3VuZCAwIGtleQorICNpZmRlZglfX0FQUExFX18KKyAJYWRyCSRjb25zdCwuTE0wCistLSAKKzIuMTUuMAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvTWFrZWZpbGVzLXB0ZXN0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL01ha2VmaWxlcy1wdGVzdC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ5NDQ2YS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvTWFrZWZpbGVzLXB0ZXN0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotQWRkICdidWlsZHRlc3QnIGFuZCAncnVudGVzdCcgdGFyZ2V0cyB0byBNYWtlZmlsZSwgdG8gYnVpbGQgYW5kIHJ1biB0ZXN0cwotY3Jvc3MtY29tcGlsZWQuCi0KLVNpZ25lZC1vZmYtYnk6IEFuZGVycyBSb3hlbGwgPGFuZGVycy5yb3hlbGxAZW5lYS5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGVuZWEuY29tPgotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLUluZGV4OiBvcGVuc3NsLTEuMC4yL01ha2VmaWxlLm9yZwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9NYWtlZmlsZS5vcmcKLSsrKyBvcGVuc3NsLTEuMC4yL01ha2VmaWxlLm9yZwotQEAgLTQ1MSw4ICs0NTEsMTYgQEAgcmVoYXNoLnRpbWU6IGNlcnRzIGFwcHMKLSB0ZXN0OiAgIHRlc3RzCi0gCi0gdGVzdHM6IHJlaGFzaAotKwkkKE1BS0UpIGJ1aWxkdGVzdAotKwkkKE1BS0UpIHJ1bnRlc3QKLSsKLStidWlsZHRlc3Q6Ci0rCUAoY2QgdGVzdCAmJiBcCi0rCSQoQ0xFQVJFTlYpICYmICQoTUFLRSkgLWUgJChCVUlMREVOVikgVE9QPS4uIFRFU1RTPSckKFRFU1RTKScgT1BFTlNTTF9ERUJVR19NRU1PUlk9b24gT1BFTlNTTF9DT05GPS4uL2FwcHMvb3BlbnNzbC5jbmYgZXhlIGFwcHMpOwotKwotK3J1bnRlc3Q6Ci0gCUAoY2QgdGVzdCAmJiBlY2hvICJ0ZXN0aW5nLi4uIiAmJiBcCi0tCSQoQ0xFQVJFTlYpICYmICQoTUFLRSkgLWUgJChCVUlMREVOVikgVE9QPS4uIFRFU1RTPSckKFRFU1RTKScgT1BFTlNTTF9ERUJVR19NRU1PUlk9b24gT1BFTlNTTF9DT05GPS4uL2FwcHMvb3BlbnNzbC5jbmYgdGVzdHMgKTsKLSsJJChDTEVBUkVOVikgJiYgJChNQUtFKSAtZSAkKEJVSUxERU5WKSBUT1A9Li4gVEVTVFM9JyQoVEVTVFMpJyBPUEVOU1NMX0RFQlVHX01FTU9SWT1vbiBPUEVOU1NMX0NPTkY9Li4vYXBwcy9vcGVuc3NsLmNuZiBhbGx0ZXN0cyApOwotIAlPUEVOU1NMX0NPTkY9YXBwcy9vcGVuc3NsLmNuZiB1dGlsL29wZW5zc2x3cmFwLnNoIHZlcnNpb24gLWEKLSAKLSByZXBvcnQ6Ci1JbmRleDogb3BlbnNzbC0xLjAuMi90ZXN0L01ha2VmaWxlCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gb3BlbnNzbC0xLjAuMi5vcmlnL3Rlc3QvTWFrZWZpbGUKLSsrKyBvcGVuc3NsLTEuMC4yL3Rlc3QvTWFrZWZpbGUKLUBAIC0xMzcsNyArMTM3LDcgQEAgdGVzdHM6CWV4ZSBhcHBzICQoVEVTVFMpCi0gYXBwczoKLSAJQChjZCAuLjsgJChNQUtFKSBESVJTPWFwcHMgYWxsKQotIAotLWFsbHRlc3RzOiBcCi0rYWxsLXRlc3RzPSBcCi0gCXRlc3RfZGVzIHRlc3RfaWRlYSB0ZXN0X3NoYSB0ZXN0X21kNCB0ZXN0X21kNSB0ZXN0X2htYWMgXAotIAl0ZXN0X21kMiB0ZXN0X21kYzIgdGVzdF93cCBcCi0gCXRlc3Rfcm1kIHRlc3RfcmMyIHRlc3RfcmM0IHRlc3RfcmM1IHRlc3RfYmYgdGVzdF9jYXN0IHRlc3RfYWVzIFwKLUBAIC0xNDgsNiArMTQ4LDExIEBAIGFsbHRlc3RzOiBcCi0gCXRlc3RfanBha2UgdGVzdF9zcnAgdGVzdF9jbXMgdGVzdF9vY3NwIHRlc3RfdjNuYW1lIHRlc3RfaGVhcnRiZWF0IFwKLSAJdGVzdF9jb25zdGFudF90aW1lCi0gCi0rYWxsdGVzdHM6Ci0rCUAoZm9yIGkgaW4gJChhbGwtdGVzdHMpOyBkbyBcCi0rCSggJChNQUtFKSAkJGkgJiYgZWNobyAiUEFTUzogJCRpIiApIHx8IGVjaG8gIkZBSUw6ICQkaSI7IFwKLSsJZG9uZSkKLSsKLSB0ZXN0X2V2cDogJChFVlBURVNUKSQoRVhFX0VYVCkgZXZwdGVzdHMudHh0Ci0gCS4uL3V0aWwvc2hsaWJfd3JhcC5zaCAuLyQoRVZQVEVTVCkgZXZwdGVzdHMudHh0Ci0gCi1AQCAtMjEzLDcgKzIxOCw3IEBAIHRlc3RfeDUwOTogLi4vYXBwcy9vcGVuc3NsJChFWEVfRVhUKSB0eDUKLSAJZWNobyB0ZXN0IHNlY29uZCB4NTA5djMgY2VydGlmaWNhdGUKLSAJc2ggLi90eDUwOSB2My1jZXJ0Mi5wZW0gMj4vZGV2L251bGwKLSAKLS10ZXN0X3JzYTogJChSU0FURVNUKSQoRVhFX0VYVCkgLi4vYXBwcy9vcGVuc3NsJChFWEVfRVhUKSB0cnNhIHRlc3Ryc2EucGVtCi0rdGVzdF9yc2E6IC4uL2FwcHMvb3BlbnNzbCQoRVhFX0VYVCkgdHJzYSB0ZXN0cnNhLnBlbQotIAlAc2ggLi90cnNhIDI+L2Rldi9udWxsCi0gCS4uL3V0aWwvc2hsaWJfd3JhcC5zaCAuLyQoUlNBVEVTVCkKLSAKLUBAIC0zMTMsMTEgKzMxOCwxMSBAQCB0ZXN0X3RzYTogLi4vYXBwcy9vcGVuc3NsJChFWEVfRVhUKSB0ZXN0Ci0gCSAgc2ggLi90ZXN0dHNhOyBcCi0gCWZpCi0gCi0tdGVzdF9pZ2U6ICQoSUdFVEVTVCkkKEVYRV9FWFQpCi0rdGVzdF9pZ2U6Ci0gCUBlY2hvICJUZXN0IElHRSBtb2RlIgotIAkuLi91dGlsL3NobGliX3dyYXAuc2ggLi8kKElHRVRFU1QpCi0gCi0tdGVzdF9qcGFrZTogJChKUEFLRVRFU1QpJChFWEVfRVhUKQotK3Rlc3RfanBha2U6Ci0gCUBlY2hvICJUZXN0IEpQQUtFIgotIAkuLi91dGlsL3NobGliX3dyYXAuc2ggLi8kKEpQQUtFVEVTVCkKLSAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9jb25maWd1cmUtbXVzbC10YXJnZXQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvY29uZmlndXJlLW11c2wtdGFyZ2V0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTNkYzdiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9jb25maWd1cmUtbXVzbC10YXJnZXQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1BZGQgbXVzbCB0cmlwbGV0IHN1cHBvcnQKLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1JbmRleDogb3BlbnNzbC0xLjAuMmEvQ29uZmlndXJlCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gb3BlbnNzbC0xLjAuMmEub3JpZy9Db25maWd1cmUKLSsrKyBvcGVuc3NsLTEuMC4yYS9Db25maWd1cmUKLUBAIC00MzEsNyArNDMxLDcgQEAgbXkgJXRhYmxlPSgKLSAjCi0gIyAgICAgICAuL0NvbmZpZ3VyZSBsaW51eC1hcm12NCAtbWFyY2g9YXJtdjYgLURfX0FSTV9NQVhfQVJDSF9fPTgKLSAjCi0tImxpbnV4LWFybXY0IiwJImdjYzogLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHthcm12NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAotKyJsaW51eC1hcm12NCIsICJnY2M6IC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7YXJtdjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKLSAibGludXgtYWFyY2g2NCIsImdjYzogLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke2FhcmNoNjRfYXNtfTpsaW51eDY0OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAotICMgQ29uZmlndXJlIHNjcmlwdCBhZGRzIG1pbmltYWxseSByZXF1aXJlZCAtbWFyY2ggZm9yIGFzc2VtYmx5IHN1cHBvcnQsCi0gIyBpZiBubyAtbWFyY2ggd2FzIHNwZWNpZmllZCBhdCBjb21tYW5kIGxpbmUuIG1pcHMzMiBhbmQgbWlwczY0IGJlbG93Ci1AQCAtNTA0LDYgKzUwNCw4IEBAIG15ICV0YWJsZT0oCi0gImxpbnV4LWdudWVhYmktYXJtZWIiLCIkRU5WeydDQyd9Oi1EQl9FTkRJQU4gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgREVTX1JJU0MxOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKLSAibGludXgtdWNsaWJjZWFiaS1hcm0iLCIkRU5WeydDQyd9Oi1ETF9FTkRJQU4gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgREVTX1JJU0MxOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKLSAibGludXgtdWNsaWJjZWFiaS1hcm1lYiIsIiRFTlZ7J0NDJ306LURCX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAotKyJsaW51eC1tdXNsZWFiaS1hcm0iLCIkRU5WeydDQyd9Oi1ETF9FTkRJQU4gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgREVTX1JJU0MxOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKLSsibGludXgtbXVzbGVhYmktYXJtZWIiLCIkRU5WeydDQyd9Oi1EQl9FTkRJQU4gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgREVTX1JJU0MxOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKLSAKLSAibGludXgtYXZyMzIiLCIkRU5WeydDQyd9Oi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLiIsCi0gCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvY29uZmlndXJlLXRhcmdldHMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvY29uZmlndXJlLXRhcmdldHMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MWU3NGEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2NvbmZpZ3VyZS10YXJnZXRzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KLQotVGhlIG51bWJlciBvZiBjb2xvbnMgYXJlIGltcG9ydGFudCA6KQotCi0KLS0tLQotIENvbmZpZ3VyZSB8ICAgMTYgKysrKysrKysrKysrKysrKwotIDEgZmlsZSBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspCi0KLUluZGV4OiBvcGVuc3NsLTEuMC4yYS9Db25maWd1cmUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBvcGVuc3NsLTEuMC4yYS5vcmlnL0NvbmZpZ3VyZQotKysrIG9wZW5zc2wtMS4wLjJhL0NvbmZpZ3VyZQotQEAgLTQ0Myw2ICs0NDMsMjMgQEAgbXkgJXRhYmxlPSgKLSAibGludXgtYWxwaGEtY2NjIiwiY2NjOi1mYXN0IC1yZWFkb25seV9zdHJpbmdzIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX0iLAotICJsaW51eC1hbHBoYStid3gtY2NjIiwiY2NjOi1mYXN0IC1yZWFkb25seV9zdHJpbmdzIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX0iLAotIAotKyAKLSsjIExpbnV4IG9uIEFSTQotKyJsaW51eC1lbGYtYXJtIiwiJEVOVnsnQ0MnfTotRExfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCi0rImxpbnV4LWVsZi1hcm1lYiIsIiRFTlZ7J0NDJ306LURCX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAotKyJsaW51eC1nbnVlYWJpLWFybSIsIiRFTlZ7J0NDJ306LURMX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAotKyJsaW51eC1nbnVlYWJpLWFybWViIiwiJEVOVnsnQ0MnfTotREJfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCi0rImxpbnV4LXVjbGliY2VhYmktYXJtIiwiJEVOVnsnQ0MnfTotRExfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCi0rImxpbnV4LXVjbGliY2VhYmktYXJtZWIiLCIkRU5WeydDQyd9Oi1EQl9FTkRJQU4gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgREVTX1JJU0MxOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKLSsKLSsibGludXgtYXZyMzIiLCIkRU5WeydDQyd9Oi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLiIsCi0rCi0rIyMjIyBMaW51eCBvbiBNSVBTL01JUFM2NAotKyJsaW51eC1taXBzIiwiJEVOVnsnQ0MnfTotREJfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKLSsibGludXgtbWlwczY0IiwiJEVOVnsnQ0MnfTotREJfRU5ESUFOIC1tYWJpPTY0IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTCBERVNfUklTQzI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAotKyJsaW51eC1taXBzNjRlbCIsIiRFTlZ7J0NDJ306LURMX0VORElBTiAtbWFiaT02NCAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKLSsibGludXgtbWlwc2VsIiwiJEVOVnsnQ0MnfTotRExfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKLSsKLSAjIEFuZHJvaWQ6IGxpbnV4LSogYnV0IHdpdGhvdXQgcG9pbnRlcnMgdG8gaGVhZGVycyBhbmQgbGlicy4KLSAiYW5kcm9pZCIsImdjYzotbWFuZHJvaWQgLUlcJChBTkRST0lEX0RFVikvaW5jbHVkZSAtQlwkKEFORFJPSURfREVWKS9saWIgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAotICJhbmRyb2lkLXg4NiIsImdjYzotbWFuZHJvaWQgLUlcJChBTkRST0lEX0RFVikvaW5jbHVkZSAtQlwkKEFORFJPSURfREVWKS9saWIgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiIuZXZhbHtteSAkYXNtPSR7eDg2X2VsZl9hc219OyRhc209fnMvOmVsZi86YW5kcm9pZC87JGFzbX0uIjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vdmVyc2lvbi1zY3JpcHQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL3ZlcnNpb24tc2NyaXB0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjQ5MTgwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vdmVyc2lvbi1zY3JpcHQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NjYzICswLDAgQEAKLUluZGV4OiBvcGVuc3NsLTEuMC4yfmJldGExLm9ic29sZXRlLjAuMDQ5ODQzNjUxNTQ5MDU3NS9Db25maWd1cmUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBvcGVuc3NsLTEuMC4yfmJldGExLm9ic29sZXRlLjAuMDQ5ODQzNjUxNTQ5MDU3NS5vcmlnL0NvbmZpZ3VyZQkyMDE0LTAyLTI0IDIxOjAyOjMwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L0NvbmZpZ3VyZQkyMDE0LTAyLTI0IDIxOjAyOjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTE2NTEsNiArMTY1MSw4IEBACi0gCQl9Ci0gCX0KLSAKLSskc2hhcmVkX2xkZmxhZyAuPSAiIC1XbCwtLXZlcnNpb24tc2NyaXB0PW9wZW5zc2wubGQiOwotKwotIG9wZW4oSU4sJzxNYWtlZmlsZS5vcmcnKSB8fCBkaWUgInVuYWJsZSB0byByZWFkIE1ha2VmaWxlLm9yZzokIVxuIjsKLSB1bmxpbmsoIiRNYWtlZmlsZS5uZXciKSB8fCBkaWUgInVuYWJsZSB0byByZW1vdmUgb2xkICRNYWtlZmlsZS5uZXc6JCFcbiIgaWYgLWUgIiRNYWtlZmlsZS5uZXciOwotIG9wZW4oT1VULCI+JE1ha2VmaWxlLm5ldyIpIHx8IGRpZSAidW5hYmxlIHRvIGNyZWF0ZSAkTWFrZWZpbGUubmV3OiQhXG4iOwotSW5kZXg6IG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L29wZW5zc2wubGQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKLSsrKyBvcGVuc3NsLTEuMC4yfmJldGExLm9ic29sZXRlLjAuMDQ5ODQzNjUxNTQ5MDU3NS9vcGVuc3NsLmxkCTIwMTQtMDItMjQgMjI6MTk6MDguNjAxODI3MjY2ICswMTAwCi1AQCAtMCwwICsxLDQ2MTUgQEAKLStPUEVOU1NMXzEuMC4wIHsKLSsJZ2xvYmFsOgotKwkJQklPX2Zfc3NsOwotKwkJQklPX25ld19idWZmZXJfc3NsX2Nvbm5lY3Q7Ci0rCQlCSU9fbmV3X3NzbDsKLSsJCUJJT19uZXdfc3NsX2Nvbm5lY3Q7Ci0rCQlCSU9fcHJveHlfc3NsX2NvcHlfc2Vzc2lvbl9pZDsKLSsJCUJJT19zc2xfY29weV9zZXNzaW9uX2lkOwotKwkJQklPX3NzbF9zaHV0ZG93bjsKLSsJCWQyaV9TU0xfU0VTU0lPTjsKLSsJCURUTFN2MV9jbGllbnRfbWV0aG9kOwotKwkJRFRMU3YxX21ldGhvZDsKLSsJCURUTFN2MV9zZXJ2ZXJfbWV0aG9kOwotKwkJRVJSX2xvYWRfU1NMX3N0cmluZ3M7Ci0rCQlpMmRfU1NMX1NFU1NJT047Ci0rCQlrc3NsX2J1aWxkX3ByaW5jaXBhbF8yOwotKwkJa3NzbF9jZ2V0X3RrdDsKLSsJCWtzc2xfY2hlY2tfYXV0aGVudDsKLSsJCWtzc2xfY3R4X2ZyZWU7Ci0rCQlrc3NsX2N0eF9uZXc7Ci0rCQlrc3NsX2N0eF9zZXRrZXk7Ci0rCQlrc3NsX2N0eF9zZXRwcmluYzsKLSsJCWtzc2xfY3R4X3NldHN0cmluZzsKLSsJCWtzc2xfY3R4X3Nob3c7Ci0rCQlrc3NsX2Vycl9zZXQ7Ci0rCQlrc3NsX2tyYjVfZnJlZV9kYXRhX2NvbnRlbnRzOwotKwkJa3NzbF9zZ2V0X3RrdDsKLSsJCWtzc2xfc2tpcF9jb25mb3VuZDsKLSsJCWtzc2xfdmFsaWRhdGVfdGltZXM7Ci0rCQlQRU1fcmVhZF9iaW9fU1NMX1NFU1NJT047Ci0rCQlQRU1fcmVhZF9TU0xfU0VTU0lPTjsKLSsJCVBFTV93cml0ZV9iaW9fU1NMX1NFU1NJT047Ci0rCQlQRU1fd3JpdGVfU1NMX1NFU1NJT047Ci0rCQlTU0xfYWNjZXB0OwotKwkJU1NMX2FkZF9jbGllbnRfQ0E7Ci0rCQlTU0xfYWRkX2Rpcl9jZXJ0X3N1YmplY3RzX3RvX3N0YWNrOwotKwkJU1NMX2FkZF9kaXJfY2VydF9zdWJqc190b19zdGs7Ci0rCQlTU0xfYWRkX2ZpbGVfY2VydF9zdWJqZWN0c190b19zdGFjazsKLSsJCVNTTF9hZGRfZmlsZV9jZXJ0X3N1YmpzX3RvX3N0azsKLSsJCVNTTF9hbGVydF9kZXNjX3N0cmluZzsKLSsJCVNTTF9hbGVydF9kZXNjX3N0cmluZ19sb25nOwotKwkJU1NMX2FsZXJ0X3R5cGVfc3RyaW5nOwotKwkJU1NMX2FsZXJ0X3R5cGVfc3RyaW5nX2xvbmc7Ci0rCQlTU0xfY2FsbGJhY2tfY3RybDsKLSsJCVNTTF9jaGVja19wcml2YXRlX2tleTsKLSsJCVNTTF9DSVBIRVJfZGVzY3JpcHRpb247Ci0rCQlTU0xfQ0lQSEVSX2dldF9iaXRzOwotKwkJU1NMX0NJUEhFUl9nZXRfbmFtZTsKLSsJCVNTTF9DSVBIRVJfZ2V0X3ZlcnNpb247Ci0rCQlTU0xfY2xlYXI7Ci0rCQlTU0xfQ09NUF9hZGRfY29tcHJlc3Npb25fbWV0aG9kOwotKwkJU1NMX0NPTVBfZ2V0X2NvbXByZXNzaW9uX21ldGhvZHM7Ci0rCQlTU0xfQ09NUF9nZXRfY29tcHJlc3NfbWV0aG9kczsKLSsJCVNTTF9DT01QX2dldF9uYW1lOwotKwkJU1NMX2Nvbm5lY3Q7Ci0rCQlTU0xfY29weV9zZXNzaW9uX2lkOwotKwkJU1NMX2N0cmw7Ci0rCQlTU0xfQ1RYX2FkZF9jbGllbnRfQ0E7Ci0rCQlTU0xfQ1RYX2FkZF9zZXNzaW9uOwotKwkJU1NMX0NUWF9jYWxsYmFja19jdHJsOwotKwkJU1NMX0NUWF9jaGVja19wcml2YXRlX2tleTsKLSsJCVNTTF9DVFhfY3RybDsKLSsJCVNTTF9DVFhfZmx1c2hfc2Vzc2lvbnM7Ci0rCQlTU0xfQ1RYX2ZyZWU7Ci0rCQlTU0xfQ1RYX2dldF9jZXJ0X3N0b3JlOwotKwkJU1NMX0NUWF9nZXRfY2xpZW50X0NBX2xpc3Q7Ci0rCQlTU0xfQ1RYX2dldF9jbGllbnRfY2VydF9jYjsKLSsJCVNTTF9DVFhfZ2V0X2V4X2RhdGE7Ci0rCQlTU0xfQ1RYX2dldF9leF9uZXdfaW5kZXg7Ci0rCQlTU0xfQ1RYX2dldF9pbmZvX2NhbGxiYWNrOwotKwkJU1NMX0NUWF9nZXRfcXVpZXRfc2h1dGRvd247Ci0rCQlTU0xfQ1RYX2dldF90aW1lb3V0OwotKwkJU1NMX0NUWF9nZXRfdmVyaWZ5X2NhbGxiYWNrOwotKwkJU1NMX0NUWF9nZXRfdmVyaWZ5X2RlcHRoOwotKwkJU1NMX0NUWF9nZXRfdmVyaWZ5X21vZGU7Ci0rCQlTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9uczsKLSsJCVNTTF9DVFhfbmV3OwotKwkJU1NMX0NUWF9yZW1vdmVfc2Vzc2lvbjsKLSsJCVNTTF9DVFhfc2Vzc19nZXRfZ2V0X2NiOwotKwkJU1NMX0NUWF9zZXNzX2dldF9uZXdfY2I7Ci0rCQlTU0xfQ1RYX3Nlc3NfZ2V0X3JlbW92ZV9jYjsKLSsJCVNTTF9DVFhfc2Vzc2lvbnM7Ci0rCQlTU0xfQ1RYX3Nlc3Nfc2V0X2dldF9jYjsKLSsJCVNTTF9DVFhfc2Vzc19zZXRfbmV3X2NiOwotKwkJU1NMX0NUWF9zZXNzX3NldF9yZW1vdmVfY2I7Ci0rCQlTU0xfQ1RYX3NldDFfcGFyYW07Ci0rCQlTU0xfQ1RYX3NldF9jZXJ0X3N0b3JlOwotKwkJU1NMX0NUWF9zZXRfY2VydF92ZXJpZnlfY2FsbGJhY2s7Ci0rCQlTU0xfQ1RYX3NldF9jZXJ0X3ZlcmlmeV9jYjsKLSsJCVNTTF9DVFhfc2V0X2NpcGhlcl9saXN0OwotKwkJU1NMX0NUWF9zZXRfY2xpZW50X0NBX2xpc3Q7Ci0rCQlTU0xfQ1RYX3NldF9jbGllbnRfY2VydF9jYjsKLSsJCVNTTF9DVFhfc2V0X2NsaWVudF9jZXJ0X2VuZ2luZTsKLSsJCVNTTF9DVFhfc2V0X2Nvb2tpZV9nZW5lcmF0ZV9jYjsKLSsJCVNTTF9DVFhfc2V0X2Nvb2tpZV92ZXJpZnlfY2I7Ci0rCQlTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYjsKLSsJCVNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiX3VzZXJkYXRhOwotKwkJU1NMX0NUWF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHM7Ci0rCQlTU0xfQ1RYX3NldF9kZWZfcGFzc3dkX2NiX3VkOwotKwkJU1NMX0NUWF9zZXRfZGVmX3ZlcmlmeV9wYXRoczsKLSsJCVNTTF9DVFhfc2V0X2V4X2RhdGE7Ci0rCQlTU0xfQ1RYX3NldF9nZW5lcmF0ZV9zZXNzaW9uX2lkOwotKwkJU1NMX0NUWF9zZXRfaW5mb19jYWxsYmFjazsKLSsJCVNTTF9DVFhfc2V0X21zZ19jYWxsYmFjazsKLSsJCVNTTF9DVFhfc2V0X3Bza19jbGllbnRfY2FsbGJhY2s7Ci0rCQlTU0xfQ1RYX3NldF9wc2tfc2VydmVyX2NhbGxiYWNrOwotKwkJU1NMX0NUWF9zZXRfcHVycG9zZTsKLSsJCVNTTF9DVFhfc2V0X3F1aWV0X3NodXRkb3duOwotKwkJU1NMX0NUWF9zZXRfc2Vzc2lvbl9pZF9jb250ZXh0OwotKwkJU1NMX0NUWF9zZXRfc3NsX3ZlcnNpb247Ci0rCQlTU0xfQ1RYX3NldF90aW1lb3V0OwotKwkJU1NMX0NUWF9zZXRfdG1wX2RoX2NhbGxiYWNrOwotKwkJU1NMX0NUWF9zZXRfdG1wX2VjZGhfY2FsbGJhY2s7Ci0rCQlTU0xfQ1RYX3NldF90bXBfcnNhX2NhbGxiYWNrOwotKwkJU1NMX0NUWF9zZXRfdHJ1c3Q7Ci0rCQlTU0xfQ1RYX3NldF92ZXJpZnk7Ci0rCQlTU0xfQ1RYX3NldF92ZXJpZnlfZGVwdGg7Ci0rCQlTU0xfQ1RYX3VzZV9jZXJ0X2NoYWluX2ZpbGU7Ci0rCQlTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZTsKLSsJCVNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX0FTTjE7Ci0rCQlTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlOwotKwkJU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfZmlsZTsKLSsJCVNTTF9DVFhfdXNlX1ByaXZhdGVLZXk7Ci0rCQlTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X0FTTjE7Ci0rCQlTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2ZpbGU7Ci0rCQlTU0xfQ1RYX3VzZV9wc2tfaWRlbnRpdHlfaGludDsKLSsJCVNTTF9DVFhfdXNlX1JTQVByaXZhdGVLZXk7Ci0rCQlTU0xfQ1RYX3VzZV9SU0FQcml2YXRlS2V5X0FTTjE7Ci0rCQlTU0xfQ1RYX3VzZV9SU0FQcml2YXRlS2V5X2ZpbGU7Ci0rCQlTU0xfZG9faGFuZHNoYWtlOwotKwkJU1NMX2R1cDsKLSsJCVNTTF9kdXBfQ0FfbGlzdDsKLSsJCVNTTGVheV9hZGRfc3NsX2FsZ29yaXRobXM7Ci0rCQlTU0xfZnJlZTsKLSsJCVNTTF9nZXQxX3Nlc3Npb247Ci0rCQlTU0xfZ2V0X2NlcnRpZmljYXRlOwotKwkJU1NMX2dldF9jaXBoZXJfbGlzdDsKLSsJCVNTTF9nZXRfY2lwaGVyczsKLSsJCVNTTF9nZXRfY2xpZW50X0NBX2xpc3Q7Ci0rCQlTU0xfZ2V0X2N1cnJlbnRfY2lwaGVyOwotKwkJU1NMX2dldF9jdXJyZW50X2NvbXByZXNzaW9uOwotKwkJU1NMX2dldF9jdXJyZW50X2V4cGFuc2lvbjsKLSsJCVNTTF9nZXRfZGVmYXVsdF90aW1lb3V0OwotKwkJU1NMX2dldF9lcnJvcjsKLSsJCVNTTF9nZXRfZXhfZGF0YTsKLSsJCVNTTF9nZXRfZXhfZGF0YV9YNTA5X1NUT1JFX0NUWF9pZHg7Ci0rCQlTU0xfZ2V0X2V4X2RfWDUwOV9TVE9SRV9DVFhfaWR4OwotKwkJU1NMX2dldF9leF9uZXdfaW5kZXg7Ci0rCQlTU0xfZ2V0X2ZkOwotKwkJU1NMX2dldF9maW5pc2hlZDsKLSsJCVNTTF9nZXRfaW5mb19jYWxsYmFjazsKLSsJCVNTTF9nZXRfcGVlcl9jZXJ0X2NoYWluOwotKwkJU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlOwotKwkJU1NMX2dldF9wZWVyX2ZpbmlzaGVkOwotKwkJU1NMX2dldF9wcml2YXRla2V5OwotKwkJU1NMX2dldF9wc2tfaWRlbnRpdHk7Ci0rCQlTU0xfZ2V0X3Bza19pZGVudGl0eV9oaW50OwotKwkJU1NMX2dldF9xdWlldF9zaHV0ZG93bjsKLSsJCVNTTF9nZXRfcmJpbzsKLSsJCVNTTF9nZXRfcmVhZF9haGVhZDsKLSsJCVNTTF9nZXRfcmZkOwotKwkJU1NMX2dldF9zZXJ2ZXJuYW1lOwotKwkJU1NMX2dldF9zZXJ2ZXJuYW1lX3R5cGU7Ci0rCQlTU0xfZ2V0X3Nlc3Npb247Ci0rCQlTU0xfZ2V0X3NoYXJlZF9jaXBoZXJzOwotKwkJU1NMX2dldF9zaHV0ZG93bjsKLSsJCVNTTF9nZXRfU1NMX0NUWDsKLSsJCVNTTF9nZXRfc3NsX21ldGhvZDsKLSsJCVNTTF9nZXRfdmVyaWZ5X2NhbGxiYWNrOwotKwkJU1NMX2dldF92ZXJpZnlfZGVwdGg7Ci0rCQlTU0xfZ2V0X3ZlcmlmeV9tb2RlOwotKwkJU1NMX2dldF92ZXJpZnlfcmVzdWx0OwotKwkJU1NMX2dldF92ZXJzaW9uOwotKwkJU1NMX2dldF93YmlvOwotKwkJU1NMX2dldF93ZmQ7Ci0rCQlTU0xfaGFzX21hdGNoaW5nX3Nlc3Npb25faWQ7Ci0rCQlTU0xfbGlicmFyeV9pbml0OwotKwkJU1NMX2xvYWRfY2xpZW50X0NBX2ZpbGU7Ci0rCQlTU0xfbG9hZF9lcnJvcl9zdHJpbmdzOwotKwkJU1NMX25ldzsKLSsJCVNTTF9wZWVrOwotKwkJU1NMX3BlbmRpbmc7Ci0rCQlTU0xfcmVhZDsKLSsJCVNTTF9yZW5lZ290aWF0ZTsKLSsJCVNTTF9yZW5lZ290aWF0ZV9wZW5kaW5nOwotKwkJU1NMX3JzdGF0ZV9zdHJpbmc7Ci0rCQlTU0xfcnN0YXRlX3N0cmluZ19sb25nOwotKwkJU1NMX1NFU1NJT05fY21wOwotKwkJU1NMX1NFU1NJT05fZnJlZTsKLSsJCVNTTF9TRVNTSU9OX2dldF9leF9kYXRhOwotKwkJU1NMX1NFU1NJT05fZ2V0X2V4X25ld19pbmRleDsKLSsJCVNTTF9TRVNTSU9OX2dldF9pZDsKLSsJCVNTTF9TRVNTSU9OX2dldF90aW1lOwotKwkJU1NMX1NFU1NJT05fZ2V0X3RpbWVvdXQ7Ci0rCQlTU0xfU0VTU0lPTl9oYXNoOwotKwkJU1NMX1NFU1NJT05fbmV3OwotKwkJU1NMX1NFU1NJT05fcHJpbnQ7Ci0rCQlTU0xfU0VTU0lPTl9wcmludF9mcDsKLSsJCVNTTF9TRVNTSU9OX3NldF9leF9kYXRhOwotKwkJU1NMX1NFU1NJT05fc2V0X3RpbWU7Ci0rCQlTU0xfU0VTU0lPTl9zZXRfdGltZW91dDsKLSsJCVNTTF9zZXQxX3BhcmFtOwotKwkJU1NMX3NldF9hY2NlcHRfc3RhdGU7Ci0rCQlTU0xfc2V0X2JpbzsKLSsJCVNTTF9zZXRfY2lwaGVyX2xpc3Q7Ci0rCQlTU0xfc2V0X2NsaWVudF9DQV9saXN0OwotKwkJU1NMX3NldF9jb25uZWN0X3N0YXRlOwotKwkJU1NMX3NldF9leF9kYXRhOwotKwkJU1NMX3NldF9mZDsKLSsJCVNTTF9zZXRfZ2VuZXJhdGVfc2Vzc2lvbl9pZDsKLSsJCVNTTF9zZXRfaW5mb19jYWxsYmFjazsKLSsJCVNTTF9zZXRfbXNnX2NhbGxiYWNrOwotKwkJU1NMX3NldF9wc2tfY2xpZW50X2NhbGxiYWNrOwotKwkJU1NMX3NldF9wc2tfc2VydmVyX2NhbGxiYWNrOwotKwkJU1NMX3NldF9wdXJwb3NlOwotKwkJU1NMX3NldF9xdWlldF9zaHV0ZG93bjsKLSsJCVNTTF9zZXRfcmVhZF9haGVhZDsKLSsJCVNTTF9zZXRfcmZkOwotKwkJU1NMX3NldF9zZXNzaW9uOwotKwkJU1NMX3NldF9zZXNzaW9uX2lkX2NvbnRleHQ7Ci0rCQlTU0xfc2V0X3Nlc3Npb25fc2VjcmV0X2NiOwotKwkJU1NMX3NldF9zZXNzaW9uX3RpY2tldF9leHQ7Ci0rCQlTU0xfc2V0X3Nlc3Npb25fdGlja2V0X2V4dF9jYjsKLSsJCVNTTF9zZXRfc2h1dGRvd247Ci0rCQlTU0xfc2V0X1NTTF9DVFg7Ci0rCQlTU0xfc2V0X3NzbF9tZXRob2Q7Ci0rCQlTU0xfc2V0X3RtcF9kaF9jYWxsYmFjazsKLSsJCVNTTF9zZXRfdG1wX2VjZGhfY2FsbGJhY2s7Ci0rCQlTU0xfc2V0X3RtcF9yc2FfY2FsbGJhY2s7Ci0rCQlTU0xfc2V0X3RydXN0OwotKwkJU1NMX3NldF92ZXJpZnk7Ci0rCQlTU0xfc2V0X3ZlcmlmeV9kZXB0aDsKLSsJCVNTTF9zZXRfdmVyaWZ5X3Jlc3VsdDsKLSsJCVNTTF9zZXRfd2ZkOwotKwkJU1NMX3NodXRkb3duOwotKwkJU1NMX3N0YXRlOwotKwkJU1NMX3N0YXRlX3N0cmluZzsKLSsJCVNTTF9zdGF0ZV9zdHJpbmdfbG9uZzsKLSsJCVNTTF91c2VfY2VydGlmaWNhdGU7Ci0rCQlTU0xfdXNlX2NlcnRpZmljYXRlX0FTTjE7Ci0rCQlTU0xfdXNlX2NlcnRpZmljYXRlX2ZpbGU7Ci0rCQlTU0xfdXNlX1ByaXZhdGVLZXk7Ci0rCQlTU0xfdXNlX1ByaXZhdGVLZXlfQVNOMTsKLSsJCVNTTF91c2VfUHJpdmF0ZUtleV9maWxlOwotKwkJU1NMX3VzZV9wc2tfaWRlbnRpdHlfaGludDsKLSsJCVNTTF91c2VfUlNBUHJpdmF0ZUtleTsKLSsJCVNTTF91c2VfUlNBUHJpdmF0ZUtleV9BU04xOwotKwkJU1NMX3VzZV9SU0FQcml2YXRlS2V5X2ZpbGU7Ci0rCQlTU0x2MjNfY2xpZW50X21ldGhvZDsKLSsJCVNTTHYyM19tZXRob2Q7Ci0rCQlTU0x2MjNfc2VydmVyX21ldGhvZDsKLSsJCVNTTHYyX2NsaWVudF9tZXRob2Q7Ci0rCQlTU0x2Ml9tZXRob2Q7Ci0rCQlTU0x2Ml9zZXJ2ZXJfbWV0aG9kOwotKwkJU1NMdjNfY2xpZW50X21ldGhvZDsKLSsJCVNTTHYzX21ldGhvZDsKLSsJCVNTTHYzX3NlcnZlcl9tZXRob2Q7Ci0rCQlTU0xfdmVyc2lvbjsKLSsJCVNTTF93YW50OwotKwkJU1NMX3dyaXRlOwotKwkJVExTdjFfY2xpZW50X21ldGhvZDsKLSsJCVRMU3YxX21ldGhvZDsKLSsJCVRMU3YxX3NlcnZlcl9tZXRob2Q7Ci0rCi0rCi0rCQlTU0xlYXk7Ci0rCQlTU0xlYXlfdmVyc2lvbjsKLSsJCUFTTjFfQklUX1NUUklOR19hc24xX21ldGg7Ci0rCQlBU04xX0hFQURFUl9mcmVlOwotKwkJQVNOMV9IRUFERVJfbmV3OwotKwkJQVNOMV9JQTVTVFJJTkdfYXNuMV9tZXRoOwotKwkJQVNOMV9JTlRFR0VSX2dldDsKLSsJCUFTTjFfSU5URUdFUl9zZXQ7Ci0rCQlBU04xX0lOVEVHRVJfdG9fQk47Ci0rCQlBU04xX09CSkVDVF9jcmVhdGU7Ci0rCQlBU04xX09CSkVDVF9mcmVlOwotKwkJQVNOMV9PQkpFQ1RfbmV3OwotKwkJQVNOMV9QUklOVEFCTEVfdHlwZTsKLSsJCUFTTjFfU1RSSU5HX2NtcDsKLSsJCUFTTjFfU1RSSU5HX2R1cDsKLSsJCUFTTjFfU1RSSU5HX2ZyZWU7Ci0rCQlBU04xX1NUUklOR19uZXc7Ci0rCQlBU04xX1NUUklOR19wcmludDsKLSsJCUFTTjFfU1RSSU5HX3NldDsKLSsJCUFTTjFfU1RSSU5HX3R5cGVfbmV3OwotKwkJQVNOMV9UWVBFX2ZyZWU7Ci0rCQlBU04xX1RZUEVfbmV3OwotKwkJQVNOMV9VTklWRVJTQUxTVFJJTkdfdG9fc3RyaW5nOwotKwkJQVNOMV9VVENUSU1FX2NoZWNrOwotKwkJQVNOMV9VVENUSU1FX3ByaW50OwotKwkJQVNOMV9VVENUSU1FX3NldDsKLSsJCUFTTjFfY2hlY2tfaW5maW5pdGVfZW5kOwotKwkJQVNOMV9kMmlfYmlvOwotKwkJQVNOMV9kMmlfZnA7Ci0rCQlBU04xX2RpZ2VzdDsKLSsJCUFTTjFfZHVwOwotKwkJQVNOMV9nZXRfb2JqZWN0OwotKwkJQVNOMV9pMmRfYmlvOwotKwkJQVNOMV9pMmRfZnA7Ci0rCQlBU04xX29iamVjdF9zaXplOwotKwkJQVNOMV9wYXJzZTsKLSsJCUFTTjFfcHV0X29iamVjdDsKLSsJCUFTTjFfc2lnbjsKLSsJCUFTTjFfdmVyaWZ5OwotKwkJQkZfY2JjX2VuY3J5cHQ7Ci0rCQlCRl9jZmI2NF9lbmNyeXB0OwotKwkJQkZfZWNiX2VuY3J5cHQ7Ci0rCQlCRl9lbmNyeXB0OwotKwkJQkZfb2ZiNjRfZW5jcnlwdDsKLSsJCUJGX29wdGlvbnM7Ci0rCQlCRl9zZXRfa2V5OwotKwkJQklPX0NPTk5FQ1RfZnJlZTsKLSsJCUJJT19DT05ORUNUX25ldzsKLSsJCUJJT19hY2NlcHQ7Ci0rCQlCSU9fY3RybDsKLSsJCUJJT19pbnRfY3RybDsKLSsJCUJJT19kZWJ1Z19jYWxsYmFjazsKLSsJCUJJT19kdW1wOwotKwkJQklPX2R1cF9jaGFpbjsKLSsJCUJJT19mX2Jhc2U2NDsKLSsJCUJJT19mX2J1ZmZlcjsKLSsJCUJJT19mX2NpcGhlcjsKLSsJCUJJT19mX21kOwotKwkJQklPX2ZfbnVsbDsKLSsJCUJJT19mX3Byb3h5X3NlcnZlcjsKLSsJCUJJT19mZF9ub25fZmF0YWxfZXJyb3I7Ci0rCQlCSU9fZmRfc2hvdWxkX3JldHJ5OwotKwkJQklPX2ZpbmRfdHlwZTsKLSsJCUJJT19mcmVlOwotKwkJQklPX2ZyZWVfYWxsOwotKwkJQklPX2dldF9hY2NlcHRfc29ja2V0OwotKwkJQklPX2dldF9maWx0ZXJfYmlvOwotKwkJQklPX2dldF9ob3N0X2lwOwotKwkJQklPX2dldF9wb3J0OwotKwkJQklPX2dldF9yZXRyeV9CSU87Ci0rCQlCSU9fZ2V0X3JldHJ5X3JlYXNvbjsKLSsJCUJJT19nZXRob3N0YnluYW1lOwotKwkJQklPX2dldHM7Ci0rCQlCSU9fbmV3OwotKwkJQklPX25ld19hY2NlcHQ7Ci0rCQlCSU9fbmV3X2Nvbm5lY3Q7Ci0rCQlCSU9fbmV3X2ZkOwotKwkJQklPX25ld19maWxlOwotKwkJQklPX25ld19mcDsKLSsJCUJJT19uZXdfc29ja2V0OwotKwkJQklPX3BvcDsKLSsJCUJJT19wcmludGY7Ci0rCQlCSU9fcHVzaDsKLSsJCUJJT19wdXRzOwotKwkJQklPX3JlYWQ7Ci0rCQlCSU9fc19hY2NlcHQ7Ci0rCQlCSU9fc19jb25uZWN0OwotKwkJQklPX3NfZmQ7Ci0rCQlCSU9fc19maWxlOwotKwkJQklPX3NfbWVtOwotKwkJQklPX3NfbnVsbDsKLSsJCUJJT19zX3Byb3h5X2NsaWVudDsKLSsJCUJJT19zX3NvY2tldDsKLSsJCUJJT19zZXQ7Ci0rCQlCSU9fc2V0X2NpcGhlcjsKLSsJCUJJT19zZXRfdGNwX25kZWxheTsKLSsJCUJJT19zb2NrX2NsZWFudXA7Ci0rCQlCSU9fc29ja19lcnJvcjsKLSsJCUJJT19zb2NrX2luaXQ7Ci0rCQlCSU9fc29ja19ub25fZmF0YWxfZXJyb3I7Ci0rCQlCSU9fc29ja19zaG91bGRfcmV0cnk7Ci0rCQlCSU9fc29ja2V0X2lvY3RsOwotKwkJQklPX3dyaXRlOwotKwkJQk5fQ1RYX2ZyZWU7Ci0rCQlCTl9DVFhfbmV3OwotKwkJQk5fTU9OVF9DVFhfZnJlZTsKLSsJCUJOX01PTlRfQ1RYX25ldzsKLSsJCUJOX01PTlRfQ1RYX3NldDsKLSsJCUJOX2FkZDsKLSsJCUJOX2FkZF93b3JkOwotKwkJQk5faGV4MmJuOwotKwkJQk5fYmluMmJuOwotKwkJQk5fYm4yaGV4OwotKwkJQk5fYm4yYmluOwotKwkJQk5fY2xlYXI7Ci0rCQlCTl9jbGVhcl9iaXQ7Ci0rCQlCTl9jbGVhcl9mcmVlOwotKwkJQk5fY21wOwotKwkJQk5fY29weTsKLSsJCUJOX2RpdjsKLSsJCUJOX2Rpdl93b3JkOwotKwkJQk5fZHVwOwotKwkJQk5fZnJlZTsKLSsJCUJOX2Zyb21fbW9udGdvbWVyeTsKLSsJCUJOX2djZDsKLSsJCUJOX2dlbmVyYXRlX3ByaW1lOwotKwkJQk5fZ2V0X3dvcmQ7Ci0rCQlCTl9pc19iaXRfc2V0OwotKwkJQk5faXNfcHJpbWU7Ci0rCQlCTl9sc2hpZnQ7Ci0rCQlCTl9sc2hpZnQxOwotKwkJQk5fbWFza19iaXRzOwotKwkJQk5fbW9kOwotKwkJQk5fbW9kX2V4cDsKLSsJCUJOX21vZF9leHBfbW9udDsKLSsJCUJOX21vZF9leHBfc2ltcGxlOwotKwkJQk5fbW9kX2ludmVyc2U7Ci0rCQlCTl9tb2RfbXVsOwotKwkJQk5fbW9kX211bF9tb250Z29tZXJ5OwotKwkJQk5fbW9kX3dvcmQ7Ci0rCQlCTl9tdWw7Ci0rCQlCTl9uZXc7Ci0rCQlCTl9udW1fYml0czsKLSsJCUJOX251bV9iaXRzX3dvcmQ7Ci0rCQlCTl9vcHRpb25zOwotKwkJQk5fcHJpbnQ7Ci0rCQlCTl9wcmludF9mcDsKLSsJCUJOX3JhbmQ7Ci0rCQlCTl9yZWNpcHJvY2FsOwotKwkJQk5fcnNoaWZ0OwotKwkJQk5fcnNoaWZ0MTsKLSsJCUJOX3NldF9iaXQ7Ci0rCQlCTl9zZXRfd29yZDsKLSsJCUJOX3NxcjsKLSsJCUJOX3N1YjsKLSsJCUJOX3RvX0FTTjFfSU5URUdFUjsKLSsJCUJOX3VjbXA7Ci0rCQlCTl92YWx1ZV9vbmU7Ci0rCQlCVUZfTUVNX2ZyZWU7Ci0rCQlCVUZfTUVNX2dyb3c7Ci0rCQlCVUZfTUVNX25ldzsKLSsJCUJVRl9zdHJkdXA7Ci0rCQlDT05GX2ZyZWU7Ci0rCQlDT05GX2dldF9udW1iZXI7Ci0rCQlDT05GX2dldF9zZWN0aW9uOwotKwkJQ09ORl9nZXRfc3RyaW5nOwotKwkJQ09ORl9sb2FkOwotKwkJQ1JZUFRPX2FkZF9sb2NrOwotKwkJQ1JZUFRPX2RiZ19mcmVlOwotKwkJQ1JZUFRPX2RiZ19tYWxsb2M7Ci0rCQlDUllQVE9fZGJnX3JlYWxsb2M7Ci0rCQlDUllQVE9fZGJnX3JlbWFsbG9jOwotKwkJQ1JZUFRPX2ZyZWU7Ci0rCQlDUllQVE9fZ2V0X2FkZF9sb2NrX2NhbGxiYWNrOwotKwkJQ1JZUFRPX2dldF9pZF9jYWxsYmFjazsKLSsJCUNSWVBUT19nZXRfbG9ja19uYW1lOwotKwkJQ1JZUFRPX2dldF9sb2NraW5nX2NhbGxiYWNrOwotKwkJQ1JZUFRPX2dldF9tZW1fZnVuY3Rpb25zOwotKwkJQ1JZUFRPX2xvY2s7Ci0rCQlDUllQVE9fbWFsbG9jOwotKwkJQ1JZUFRPX21lbV9jdHJsOwotKwkJQ1JZUFRPX21lbV9sZWFrczsKLSsJCUNSWVBUT19tZW1fbGVha3NfY2I7Ci0rCQlDUllQVE9fbWVtX2xlYWtzX2ZwOwotKwkJQ1JZUFRPX3JlYWxsb2M7Ci0rCQlDUllQVE9fcmVtYWxsb2M7Ci0rCQlDUllQVE9fc2V0X2FkZF9sb2NrX2NhbGxiYWNrOwotKwkJQ1JZUFRPX3NldF9pZF9jYWxsYmFjazsKLSsJCUNSWVBUT19zZXRfbG9ja2luZ19jYWxsYmFjazsKLSsJCUNSWVBUT19zZXRfbWVtX2Z1bmN0aW9uczsKLSsJCUNSWVBUT190aHJlYWRfaWQ7Ci0rCQlESF9jaGVjazsKLSsJCURIX2NvbXB1dGVfa2V5OwotKwkJREhfZnJlZTsKLSsJCURIX2dlbmVyYXRlX2tleTsKLSsJCURIX2dlbmVyYXRlX3BhcmFtZXRlcnM7Ci0rCQlESF9uZXc7Ci0rCQlESF9zaXplOwotKwkJREhwYXJhbXNfcHJpbnQ7Ci0rCQlESHBhcmFtc19wcmludF9mcDsKLSsJCURTQV9mcmVlOwotKwkJRFNBX2dlbmVyYXRlX2tleTsKLSsJCURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzOwotKwkJRFNBX2lzX3ByaW1lOwotKwkJRFNBX25ldzsKLSsJCURTQV9wcmludDsKLSsJCURTQV9wcmludF9mcDsKLSsJCURTQV9zaWduOwotKwkJRFNBX3NpZ25fc2V0dXA7Ci0rCQlEU0Ffc2l6ZTsKLSsJCURTQV92ZXJpZnk7Ci0rCQlEU0FwYXJhbXNfcHJpbnQ7Ci0rCQlEU0FwYXJhbXNfcHJpbnRfZnA7Ci0rCQlFUlJfY2xlYXJfZXJyb3I7Ci0rCQlFUlJfZXJyb3Jfc3RyaW5nOwotKwkJRVJSX2ZyZWVfc3RyaW5nczsKLSsJCUVSUl9mdW5jX2Vycm9yX3N0cmluZzsKLSsJCUVSUl9nZXRfZXJyX3N0YXRlX3RhYmxlOwotKwkJRVJSX2dldF9lcnJvcjsKLSsJCUVSUl9nZXRfZXJyb3JfbGluZTsKLSsJCUVSUl9nZXRfc3RhdGU7Ci0rCQlFUlJfZ2V0X3N0cmluZ190YWJsZTsKLSsJCUVSUl9saWJfZXJyb3Jfc3RyaW5nOwotKwkJRVJSX2xvYWRfQVNOMV9zdHJpbmdzOwotKwkJRVJSX2xvYWRfQklPX3N0cmluZ3M7Ci0rCQlFUlJfbG9hZF9CTl9zdHJpbmdzOwotKwkJRVJSX2xvYWRfQlVGX3N0cmluZ3M7Ci0rCQlFUlJfbG9hZF9DT05GX3N0cmluZ3M7Ci0rCQlFUlJfbG9hZF9ESF9zdHJpbmdzOwotKwkJRVJSX2xvYWRfRFNBX3N0cmluZ3M7Ci0rCQlFUlJfbG9hZF9FUlJfc3RyaW5nczsKLSsJCUVSUl9sb2FkX0VWUF9zdHJpbmdzOwotKwkJRVJSX2xvYWRfT0JKX3N0cmluZ3M7Ci0rCQlFUlJfbG9hZF9QRU1fc3RyaW5nczsKLSsJCUVSUl9sb2FkX1BST1hZX3N0cmluZ3M7Ci0rCQlFUlJfbG9hZF9SU0Ffc3RyaW5nczsKLSsJCUVSUl9sb2FkX1g1MDlfc3RyaW5nczsKLSsJCUVSUl9sb2FkX2NyeXB0b19zdHJpbmdzOwotKwkJRVJSX2xvYWRfc3RyaW5nczsKLSsJCUVSUl9wZWVrX2Vycm9yOwotKwkJRVJSX3BlZWtfZXJyb3JfbGluZTsKLSsJCUVSUl9wcmludF9lcnJvcnM7Ci0rCQlFUlJfcHJpbnRfZXJyb3JzX2ZwOwotKwkJRVJSX3B1dF9lcnJvcjsKLSsJCUVSUl9yZWFzb25fZXJyb3Jfc3RyaW5nOwotKwkJRVJSX3JlbW92ZV9zdGF0ZTsKLSsJCUVWUF9CeXRlc1RvS2V5OwotKwkJRVZQX0NJUEhFUl9DVFhfY2xlYW51cDsKLSsJCUVWUF9DaXBoZXJGaW5hbDsKLSsJCUVWUF9DaXBoZXJJbml0OwotKwkJRVZQX0NpcGhlclVwZGF0ZTsKLSsJCUVWUF9EZWNvZGVCbG9jazsKLSsJCUVWUF9EZWNvZGVGaW5hbDsKLSsJCUVWUF9EZWNvZGVJbml0OwotKwkJRVZQX0RlY29kZVVwZGF0ZTsKLSsJCUVWUF9EZWNyeXB0RmluYWw7Ci0rCQlFVlBfRGVjcnlwdEluaXQ7Ci0rCQlFVlBfRGVjcnlwdFVwZGF0ZTsKLSsJCUVWUF9EaWdlc3RGaW5hbDsKLSsJCUVWUF9EaWdlc3RJbml0OwotKwkJRVZQX0RpZ2VzdFVwZGF0ZTsKLSsJCUVWUF9FbmNvZGVCbG9jazsKLSsJCUVWUF9FbmNvZGVGaW5hbDsKLSsJCUVWUF9FbmNvZGVJbml0OwotKwkJRVZQX0VuY29kZVVwZGF0ZTsKLSsJCUVWUF9FbmNyeXB0RmluYWw7Ci0rCQlFVlBfRW5jcnlwdEluaXQ7Ci0rCQlFVlBfRW5jcnlwdFVwZGF0ZTsKLSsJCUVWUF9PcGVuRmluYWw7Ci0rCQlFVlBfT3BlbkluaXQ7Ci0rCQlFVlBfUEtFWV9hc3NpZ247Ci0rCQlFVlBfUEtFWV9jb3B5X3BhcmFtZXRlcnM7Ci0rCQlFVlBfUEtFWV9mcmVlOwotKwkJRVZQX1BLRVlfbWlzc2luZ19wYXJhbWV0ZXJzOwotKwkJRVZQX1BLRVlfbmV3OwotKwkJRVZQX1BLRVlfc2F2ZV9wYXJhbWV0ZXJzOwotKwkJRVZQX1BLRVlfc2l6ZTsKLSsJCUVWUF9QS0VZX3R5cGU7Ci0rCQlFVlBfU2VhbEZpbmFsOwotKwkJRVZQX1NlYWxJbml0OwotKwkJRVZQX1NpZ25GaW5hbDsKLSsJCUVWUF9WZXJpZnlGaW5hbDsKLSsJCUVWUF9hZGRfYWxpYXM7Ci0rCQlFVlBfYWRkX2NpcGhlcjsKLSsJCUVWUF9hZGRfZGlnZXN0OwotKwkJRVZQX2JmX2NiYzsKLSsJCUVWUF9iZl9jZmI2NDsKLSsJCUVWUF9iZl9lY2I7Ci0rCQlFVlBfYmZfb2ZiOwotKwkJRVZQX2NsZWFudXA7Ci0rCQlFVlBfZGVzX2NiYzsKLSsJCUVWUF9kZXNfY2ZiNjQ7Ci0rCQlFVlBfZGVzX2VjYjsKLSsJCUVWUF9kZXNfZWRlOwotKwkJRVZQX2Rlc19lZGUzOwotKwkJRVZQX2Rlc19lZGUzX2NiYzsKLSsJCUVWUF9kZXNfZWRlM19jZmI2NDsKLSsJCUVWUF9kZXNfZWRlM19vZmI7Ci0rCQlFVlBfZGVzX2VkZV9jYmM7Ci0rCQlFVlBfZGVzX2VkZV9jZmI2NDsKLSsJCUVWUF9kZXNfZWRlX29mYjsKLSsJCUVWUF9kZXNfb2ZiOwotKwkJRVZQX2Rlc3hfY2JjOwotKwkJRVZQX2RzczsKLSsJCUVWUF9kc3MxOwotKwkJRVZQX2VuY19udWxsOwotKwkJRVZQX2dldF9jaXBoZXJieW5hbWU7Ci0rCQlFVlBfZ2V0X2RpZ2VzdGJ5bmFtZTsKLSsJCUVWUF9nZXRfcHdfcHJvbXB0OwotKwkJRVZQX2lkZWFfY2JjOwotKwkJRVZQX2lkZWFfY2ZiNjQ7Ci0rCQlFVlBfaWRlYV9lY2I7Ci0rCQlFVlBfaWRlYV9vZmI7Ci0rCQlFVlBfbWQyOwotKwkJRVZQX21kNTsKLSsJCUVWUF9tZF9udWxsOwotKwkJRVZQX3JjMl9jYmM7Ci0rCQlFVlBfcmMyX2NmYjY0OwotKwkJRVZQX3JjMl9lY2I7Ci0rCQlFVlBfcmMyX29mYjsKLSsJCUVWUF9yYzQ7Ci0rCQlFVlBfcmVhZF9wd19zdHJpbmc7Ci0rCQlFVlBfc2V0X3B3X3Byb21wdDsKLSsJCUVWUF9zaGE7Ci0rCQlFVlBfc2hhMTsKLSsJCU1EMjsKLSsJCU1EMl9GaW5hbDsKLSsJCU1EMl9Jbml0OwotKwkJTUQyX1VwZGF0ZTsKLSsJCU1EMl9vcHRpb25zOwotKwkJTUQ1OwotKwkJTUQ1X0ZpbmFsOwotKwkJTUQ1X0luaXQ7Ci0rCQlNRDVfVXBkYXRlOwotKwkJTURDMjsKLSsJCU1EQzJfRmluYWw7Ci0rCQlNREMyX0luaXQ7Ci0rCQlNREMyX1VwZGF0ZTsKLSsJCU5FVFNDQVBFX1NQS0FDX2ZyZWU7Ci0rCQlORVRTQ0FQRV9TUEtBQ19uZXc7Ci0rCQlORVRTQ0FQRV9TUEtJX2ZyZWU7Ci0rCQlORVRTQ0FQRV9TUEtJX25ldzsKLSsJCU5FVFNDQVBFX1NQS0lfc2lnbjsKLSsJCU5FVFNDQVBFX1NQS0lfdmVyaWZ5OwotKwkJT0JKX2FkZF9vYmplY3Q7Ci0rCQlPQkpfYnNlYXJjaDsKLSsJCU9CSl9jbGVhbnVwOwotKwkJT0JKX2NtcDsKLSsJCU9CSl9jcmVhdGU7Ci0rCQlPQkpfZHVwOwotKwkJT0JKX2xuMm5pZDsKLSsJCU9CSl9uZXdfbmlkOwotKwkJT0JKX25pZDJsbjsKLSsJCU9CSl9uaWQyb2JqOwotKwkJT0JKX25pZDJzbjsKLSsJCU9CSl9vYmoybmlkOwotKwkJT0JKX3NuMm5pZDsKLSsJCU9CSl90eHQybmlkOwotKwkJUEVNX0FTTjFfcmVhZDsKLSsJCVBFTV9BU04xX3JlYWRfYmlvOwotKwkJUEVNX0FTTjFfd3JpdGU7Ci0rCQlQRU1fQVNOMV93cml0ZV9iaW87Ci0rCQlQRU1fU2VhbEZpbmFsOwotKwkJUEVNX1NlYWxJbml0OwotKwkJUEVNX1NlYWxVcGRhdGU7Ci0rCQlQRU1fU2lnbkZpbmFsOwotKwkJUEVNX1NpZ25Jbml0OwotKwkJUEVNX1NpZ25VcGRhdGU7Ci0rCQlQRU1fWDUwOV9JTkZPX3JlYWQ7Ci0rCQlQRU1fWDUwOV9JTkZPX3JlYWRfYmlvOwotKwkJUEVNX1g1MDlfSU5GT193cml0ZV9iaW87Ci0rCQlQRU1fZGVrX2luZm87Ci0rCQlQRU1fZG9faGVhZGVyOwotKwkJUEVNX2dldF9FVlBfQ0lQSEVSX0lORk87Ci0rCQlQRU1fcHJvY190eXBlOwotKwkJUEVNX3JlYWQ7Ci0rCQlQRU1fcmVhZF9ESHBhcmFtczsKLSsJCVBFTV9yZWFkX0RTQVByaXZhdGVLZXk7Ci0rCQlQRU1fcmVhZF9EU0FwYXJhbXM7Ci0rCQlQRU1fcmVhZF9QS0NTNzsKLSsJCVBFTV9yZWFkX1ByaXZhdGVLZXk7Ci0rCQlQRU1fcmVhZF9SU0FQcml2YXRlS2V5OwotKwkJUEVNX3JlYWRfWDUwOTsKLSsJCVBFTV9yZWFkX1g1MDlfQ1JMOwotKwkJUEVNX3JlYWRfWDUwOV9SRVE7Ci0rCQlQRU1fcmVhZF9iaW87Ci0rCQlQRU1fcmVhZF9iaW9fREhwYXJhbXM7Ci0rCQlQRU1fcmVhZF9iaW9fRFNBUHJpdmF0ZUtleTsKLSsJCVBFTV9yZWFkX2Jpb19EU0FwYXJhbXM7Ci0rCQlQRU1fcmVhZF9iaW9fUEtDUzc7Ci0rCQlQRU1fcmVhZF9iaW9fUHJpdmF0ZUtleTsKLSsJCVBFTV9yZWFkX2Jpb19SU0FQcml2YXRlS2V5OwotKwkJUEVNX3JlYWRfYmlvX1g1MDk7Ci0rCQlQRU1fcmVhZF9iaW9fWDUwOV9DUkw7Ci0rCQlQRU1fcmVhZF9iaW9fWDUwOV9SRVE7Ci0rCQlQRU1fd3JpdGU7Ci0rCQlQRU1fd3JpdGVfREhwYXJhbXM7Ci0rCQlQRU1fd3JpdGVfRFNBUHJpdmF0ZUtleTsKLSsJCVBFTV93cml0ZV9EU0FwYXJhbXM7Ci0rCQlQRU1fd3JpdGVfUEtDUzc7Ci0rCQlQRU1fd3JpdGVfUHJpdmF0ZUtleTsKLSsJCVBFTV93cml0ZV9SU0FQcml2YXRlS2V5OwotKwkJUEVNX3dyaXRlX1g1MDk7Ci0rCQlQRU1fd3JpdGVfWDUwOV9DUkw7Ci0rCQlQRU1fd3JpdGVfWDUwOV9SRVE7Ci0rCQlQRU1fd3JpdGVfYmlvOwotKwkJUEVNX3dyaXRlX2Jpb19ESHBhcmFtczsKLSsJCVBFTV93cml0ZV9iaW9fRFNBUHJpdmF0ZUtleTsKLSsJCVBFTV93cml0ZV9iaW9fRFNBcGFyYW1zOwotKwkJUEVNX3dyaXRlX2Jpb19QS0NTNzsKLSsJCVBFTV93cml0ZV9iaW9fUHJpdmF0ZUtleTsKLSsJCVBFTV93cml0ZV9iaW9fUlNBUHJpdmF0ZUtleTsKLSsJCVBFTV93cml0ZV9iaW9fWDUwOTsKLSsJCVBFTV93cml0ZV9iaW9fWDUwOV9DUkw7Ci0rCQlQRU1fd3JpdGVfYmlvX1g1MDlfUkVROwotKwkJUEtDUzdfRElHRVNUX2ZyZWU7Ci0rCQlQS0NTN19ESUdFU1RfbmV3OwotKwkJUEtDUzdfRU5DUllQVF9mcmVlOwotKwkJUEtDUzdfRU5DUllQVF9uZXc7Ci0rCQlQS0NTN19FTkNfQ09OVEVOVF9mcmVlOwotKwkJUEtDUzdfRU5DX0NPTlRFTlRfbmV3OwotKwkJUEtDUzdfRU5WRUxPUEVfZnJlZTsKLSsJCVBLQ1M3X0VOVkVMT1BFX25ldzsKLSsJCVBLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMX2RpZ2VzdDsKLSsJCVBLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMX2ZyZWU7Ci0rCQlQS0NTN19JU1NVRVJfQU5EX1NFUklBTF9uZXc7Ci0rCQlQS0NTN19SRUNJUF9JTkZPX2ZyZWU7Ci0rCQlQS0NTN19SRUNJUF9JTkZPX25ldzsKLSsJCVBLQ1M3X1NJR05FRF9mcmVlOwotKwkJUEtDUzdfU0lHTkVEX25ldzsKLSsJCVBLQ1M3X1NJR05FUl9JTkZPX2ZyZWU7Ci0rCQlQS0NTN19TSUdORVJfSU5GT19uZXc7Ci0rCQlQS0NTN19TSUdOX0VOVkVMT1BFX2ZyZWU7Ci0rCQlQS0NTN19TSUdOX0VOVkVMT1BFX25ldzsKLSsJCVBLQ1M3X2R1cDsKLSsJCVBLQ1M3X2ZyZWU7Ci0rCQlQS0NTN19uZXc7Ci0rCQlQUk9YWV9FTlRSWV9hZGRfbm9wcm94eTsKLSsJCVBST1hZX0VOVFJZX2NsZWFyX25vcHJveHk7Ci0rCQlQUk9YWV9FTlRSWV9mcmVlOwotKwkJUFJPWFlfRU5UUllfZ2V0X25vcHJveHk7Ci0rCQlQUk9YWV9FTlRSWV9uZXc7Ci0rCQlQUk9YWV9FTlRSWV9zZXRfc2VydmVyOwotKwkJUFJPWFlfYWRkX25vcHJveHk7Ci0rCQlQUk9YWV9hZGRfc2VydmVyOwotKwkJUFJPWFlfY2hlY2tfYnlfaG9zdDsKLSsJCVBST1hZX2NoZWNrX3VybDsKLSsJCVBST1hZX2NsZWFyX25vcHJveHk7Ci0rCQlQUk9YWV9mcmVlOwotKwkJUFJPWFlfZ2V0X25vcHJveHk7Ci0rCQlQUk9YWV9nZXRfcHJveGllczsKLSsJCVBST1hZX2dldF9wcm94eV9lbnRyeTsKLSsJCVBST1hZX2xvYWRfY29uZjsKLSsJCVBST1hZX25ldzsKLSsJCVBST1hZX3ByaW50OwotKwkJUkFORF9ieXRlczsKLSsJCVJBTkRfY2xlYW51cDsKLSsJCVJBTkRfZmlsZV9uYW1lOwotKwkJUkFORF9sb2FkX2ZpbGU7Ci0rCQlSQU5EX3NjcmVlbjsKLSsJCVJBTkRfc2VlZDsKLSsJCVJBTkRfd3JpdGVfZmlsZTsKLSsJCVJDMl9jYmNfZW5jcnlwdDsKLSsJCVJDMl9jZmI2NF9lbmNyeXB0OwotKwkJUkMyX2VjYl9lbmNyeXB0OwotKwkJUkMyX2VuY3J5cHQ7Ci0rCQlSQzJfb2ZiNjRfZW5jcnlwdDsKLSsJCVJDMl9zZXRfa2V5OwotKwkJUkM0OwotKwkJUkM0X29wdGlvbnM7Ci0rCQlSQzRfc2V0X2tleTsKLSsJCVJTQVByaXZhdGVLZXlfYXNuMV9tZXRoOwotKwkJUlNBUHJpdmF0ZUtleV9kdXA7Ci0rCQlSU0FQdWJsaWNLZXlfZHVwOwotKwkJUlNBX1BLQ1MxX1NTTGVheTsKLSsJCVJTQV9mcmVlOwotKwkJUlNBX2dlbmVyYXRlX2tleTsKLSsJCVJTQV9uZXc7Ci0rCQlSU0FfbmV3X21ldGhvZDsKLSsJCVJTQV9wcmludDsKLSsJCVJTQV9wcmludF9mcDsKLSsJCVJTQV9wcml2YXRlX2RlY3J5cHQ7Ci0rCQlSU0FfcHJpdmF0ZV9lbmNyeXB0OwotKwkJUlNBX3B1YmxpY19kZWNyeXB0OwotKwkJUlNBX3B1YmxpY19lbmNyeXB0OwotKwkJUlNBX3NldF9kZWZhdWx0X21ldGhvZDsKLSsJCVJTQV9zaWduOwotKwkJUlNBX3NpZ25fQVNOMV9PQ1RFVF9TVFJJTkc7Ci0rCQlSU0Ffc2l6ZTsKLSsJCVJTQV92ZXJpZnk7Ci0rCQlSU0FfdmVyaWZ5X0FTTjFfT0NURVRfU1RSSU5HOwotKwkJU0hBOwotKwkJU0hBMTsKLSsJCVNIQTFfRmluYWw7Ci0rCQlTSEExX0luaXQ7Ci0rCQlTSEExX1VwZGF0ZTsKLSsJCVNIQV9GaW5hbDsKLSsJCVNIQV9Jbml0OwotKwkJU0hBX1VwZGF0ZTsKLSsJCU9wZW5TU0xfYWRkX2FsbF9hbGdvcml0aG1zOwotKwkJT3BlblNTTF9hZGRfYWxsX2NpcGhlcnM7Ci0rCQlPcGVuU1NMX2FkZF9hbGxfZGlnZXN0czsKLSsJCVRYVF9EQl9jcmVhdGVfaW5kZXg7Ci0rCQlUWFRfREJfZnJlZTsKLSsJCVRYVF9EQl9nZXRfYnlfaW5kZXg7Ci0rCQlUWFRfREJfaW5zZXJ0OwotKwkJVFhUX0RCX3JlYWQ7Ci0rCQlUWFRfREJfd3JpdGU7Ci0rCQlYNTA5X0FMR09SX2ZyZWU7Ci0rCQlYNTA5X0FMR09SX25ldzsKLSsJCVg1MDlfQVRUUklCVVRFX2ZyZWU7Ci0rCQlYNTA5X0FUVFJJQlVURV9uZXc7Ci0rCQlYNTA5X0NJTkZfZnJlZTsKLSsJCVg1MDlfQ0lORl9uZXc7Ci0rCQlYNTA5X0NSTF9JTkZPX2ZyZWU7Ci0rCQlYNTA5X0NSTF9JTkZPX25ldzsKLSsJCVg1MDlfQ1JMX2FkZF9leHQ7Ci0rCQlYNTA5X0NSTF9jbXA7Ci0rCQlYNTA5X0NSTF9kZWxldGVfZXh0OwotKwkJWDUwOV9DUkxfZHVwOwotKwkJWDUwOV9DUkxfZnJlZTsKLSsJCVg1MDlfQ1JMX2dldF9leHQ7Ci0rCQlYNTA5X0NSTF9nZXRfZXh0X2J5X05JRDsKLSsJCVg1MDlfQ1JMX2dldF9leHRfYnlfT0JKOwotKwkJWDUwOV9DUkxfZ2V0X2V4dF9ieV9jcml0aWNhbDsKLSsJCVg1MDlfQ1JMX2dldF9leHRfY291bnQ7Ci0rCQlYNTA5X0NSTF9uZXc7Ci0rCQlYNTA5X0NSTF9zaWduOwotKwkJWDUwOV9DUkxfdmVyaWZ5OwotKwkJWDUwOV9FWFRFTlNJT05fY3JlYXRlX2J5X05JRDsKLSsJCVg1MDlfRVhURU5TSU9OX2NyZWF0ZV9ieV9PQko7Ci0rCQlYNTA5X0VYVEVOU0lPTl9kdXA7Ci0rCQlYNTA5X0VYVEVOU0lPTl9mcmVlOwotKwkJWDUwOV9FWFRFTlNJT05fZ2V0X2NyaXRpY2FsOwotKwkJWDUwOV9FWFRFTlNJT05fZ2V0X2RhdGE7Ci0rCQlYNTA5X0VYVEVOU0lPTl9nZXRfb2JqZWN0OwotKwkJWDUwOV9FWFRFTlNJT05fbmV3OwotKwkJWDUwOV9FWFRFTlNJT05fc2V0X2NyaXRpY2FsOwotKwkJWDUwOV9FWFRFTlNJT05fc2V0X2RhdGE7Ci0rCQlYNTA5X0VYVEVOU0lPTl9zZXRfb2JqZWN0OwotKwkJWDUwOV9JTkZPX2ZyZWU7Ci0rCQlYNTA5X0lORk9fbmV3OwotKwkJWDUwOV9MT09LVVBfYnlfYWxpYXM7Ci0rCQlYNTA5X0xPT0tVUF9ieV9maW5nZXJwcmludDsKLSsJCVg1MDlfTE9PS1VQX2J5X2lzc3Vlcl9zZXJpYWw7Ci0rCQlYNTA5X0xPT0tVUF9ieV9zdWJqZWN0OwotKwkJWDUwOV9MT09LVVBfY3RybDsKLSsJCVg1MDlfTE9PS1VQX2ZpbGU7Ci0rCQlYNTA5X0xPT0tVUF9mcmVlOwotKwkJWDUwOV9MT09LVVBfaGFzaF9kaXI7Ci0rCQlYNTA5X0xPT0tVUF9pbml0OwotKwkJWDUwOV9MT09LVVBfbmV3OwotKwkJWDUwOV9MT09LVVBfc2h1dGRvd247Ci0rCQlYNTA5X05BTUVfRU5UUllfY3JlYXRlX2J5X05JRDsKLSsJCVg1MDlfTkFNRV9FTlRSWV9jcmVhdGVfYnlfT0JKOwotKwkJWDUwOV9OQU1FX0VOVFJZX2R1cDsKLSsJCVg1MDlfTkFNRV9FTlRSWV9mcmVlOwotKwkJWDUwOV9OQU1FX0VOVFJZX2dldF9kYXRhOwotKwkJWDUwOV9OQU1FX0VOVFJZX2dldF9vYmplY3Q7Ci0rCQlYNTA5X05BTUVfRU5UUllfbmV3OwotKwkJWDUwOV9OQU1FX0VOVFJZX3NldF9kYXRhOwotKwkJWDUwOV9OQU1FX0VOVFJZX3NldF9vYmplY3Q7Ci0rCQlYNTA5X05BTUVfYWRkX2VudHJ5OwotKwkJWDUwOV9OQU1FX2NtcDsKLSsJCVg1MDlfTkFNRV9kZWxldGVfZW50cnk7Ci0rCQlYNTA5X05BTUVfZGlnZXN0OwotKwkJWDUwOV9OQU1FX2R1cDsKLSsJCVg1MDlfTkFNRV9lbnRyeV9jb3VudDsKLSsJCVg1MDlfTkFNRV9mcmVlOwotKwkJWDUwOV9OQU1FX2dldF9lbnRyeTsKLSsJCVg1MDlfTkFNRV9nZXRfaW5kZXhfYnlfTklEOwotKwkJWDUwOV9OQU1FX2dldF9pbmRleF9ieV9PQko7Ci0rCQlYNTA5X05BTUVfZ2V0X3RleHRfYnlfTklEOwotKwkJWDUwOV9OQU1FX2dldF90ZXh0X2J5X09CSjsKLSsJCVg1MDlfTkFNRV9oYXNoOwotKwkJWDUwOV9OQU1FX25ldzsKLSsJCVg1MDlfTkFNRV9vbmVsaW5lOwotKwkJWDUwOV9OQU1FX3ByaW50OwotKwkJWDUwOV9OQU1FX3NldDsKLSsJCVg1MDlfT0JKRUNUX2ZyZWVfY29udGVudHM7Ci0rCQlYNTA5X09CSkVDVF9yZXRyaWV2ZV9ieV9zdWJqZWN0OwotKwkJWDUwOV9PQkpFQ1RfdXBfcmVmX2NvdW50OwotKwkJWDUwOV9QS0VZX2ZyZWU7Ci0rCQlYNTA5X1BLRVlfbmV3OwotKwkJWDUwOV9QVUJLRVlfZnJlZTsKLSsJCVg1MDlfUFVCS0VZX2dldDsKLSsJCVg1MDlfUFVCS0VZX25ldzsKLSsJCVg1MDlfUFVCS0VZX3NldDsKLSsJCVg1MDlfUkVRX0lORk9fZnJlZTsKLSsJCVg1MDlfUkVRX0lORk9fbmV3OwotKwkJWDUwOV9SRVFfZHVwOwotKwkJWDUwOV9SRVFfZnJlZTsKLSsJCVg1MDlfUkVRX2dldF9wdWJrZXk7Ci0rCQlYNTA5X1JFUV9uZXc7Ci0rCQlYNTA5X1JFUV9wcmludDsKLSsJCVg1MDlfUkVRX3ByaW50X2ZwOwotKwkJWDUwOV9SRVFfc2V0X3B1YmtleTsKLSsJCVg1MDlfUkVRX3NldF9zdWJqZWN0X25hbWU7Ci0rCQlYNTA5X1JFUV9zZXRfdmVyc2lvbjsKLSsJCVg1MDlfUkVRX3NpZ247Ci0rCQlYNTA5X1JFUV90b19YNTA5OwotKwkJWDUwOV9SRVFfdmVyaWZ5OwotKwkJWDUwOV9SRVZPS0VEX2FkZF9leHQ7Ci0rCQlYNTA5X1JFVk9LRURfZGVsZXRlX2V4dDsKLSsJCVg1MDlfUkVWT0tFRF9mcmVlOwotKwkJWDUwOV9SRVZPS0VEX2dldF9leHQ7Ci0rCQlYNTA5X1JFVk9LRURfZ2V0X2V4dF9ieV9OSUQ7Ci0rCQlYNTA5X1JFVk9LRURfZ2V0X2V4dF9ieV9PQko7Ci0rCQlYNTA5X1JFVk9LRURfZ2V0X2V4dF9ieV9jcml0aWNhbDsKLSsJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2J5X2NyaXRpYzsKLSsJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2NvdW50OwotKwkJWDUwOV9SRVZPS0VEX25ldzsKLSsJCVg1MDlfU0lHX2ZyZWU7Ci0rCQlYNTA5X1NJR19uZXc7Ci0rCQlYNTA5X1NUT1JFX0NUWF9jbGVhbnVwOwotKwkJWDUwOV9TVE9SRV9DVFhfaW5pdDsKLSsJCVg1MDlfU1RPUkVfYWRkX2NlcnQ7Ci0rCQlYNTA5X1NUT1JFX2FkZF9sb29rdXA7Ci0rCQlYNTA5X1NUT1JFX2ZyZWU7Ci0rCQlYNTA5X1NUT1JFX2dldF9ieV9zdWJqZWN0OwotKwkJWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9uczsKLSsJCVg1MDlfU1RPUkVfbmV3OwotKwkJWDUwOV9TVE9SRV9zZXRfZGVmYXVsdF9wYXRoczsKLSsJCVg1MDlfVkFMX2ZyZWU7Ci0rCQlYNTA5X1ZBTF9uZXc7Ci0rCQlYNTA5X2FkZF9leHQ7Ci0rCQlYNTA5X2FzbjFfbWV0aDsKLSsJCVg1MDlfY2VydGlmaWNhdGVfdHlwZTsKLSsJCVg1MDlfY2hlY2tfcHJpdmF0ZV9rZXk7Ci0rCQlYNTA5X2NtcF9jdXJyZW50X3RpbWU7Ci0rCQlYNTA5X2RlbGV0ZV9leHQ7Ci0rCQlYNTA5X2RpZ2VzdDsKLSsJCVg1MDlfZHVwOwotKwkJWDUwOV9mcmVlOwotKwkJWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2FyZWE7Ci0rCQlYNTA5X2dldF9kZWZhdWx0X2NlcnRfZGlyOwotKwkJWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2Rpcl9lbnY7Ci0rCQlYNTA5X2dldF9kZWZhdWx0X2NlcnRfZmlsZTsKLSsJCVg1MDlfZ2V0X2RlZmF1bHRfY2VydF9maWxlX2VudjsKLSsJCVg1MDlfZ2V0X2RlZmF1bHRfcHJpdmF0ZV9kaXI7Ci0rCQlYNTA5X2dldF9leHQ7Ci0rCQlYNTA5X2dldF9leHRfYnlfTklEOwotKwkJWDUwOV9nZXRfZXh0X2J5X09CSjsKLSsJCVg1MDlfZ2V0X2V4dF9ieV9jcml0aWNhbDsKLSsJCVg1MDlfZ2V0X2V4dF9jb3VudDsKLSsJCVg1MDlfZ2V0X2lzc3Vlcl9uYW1lOwotKwkJWDUwOV9nZXRfcHVia2V5OwotKwkJWDUwOV9nZXRfcHVia2V5X3BhcmFtZXRlcnM7Ci0rCQlYNTA5X2dldF9zZXJpYWxOdW1iZXI7Ci0rCQlYNTA5X2dldF9zdWJqZWN0X25hbWU7Ci0rCQlYNTA5X2dtdGltZV9hZGo7Ci0rCQlYNTA5X2lzc3Vlcl9hbmRfc2VyaWFsX2NtcDsKLSsJCVg1MDlfaXNzdWVyX2FuZF9zZXJpYWxfaGFzaDsKLSsJCVg1MDlfaXNzdWVyX25hbWVfY21wOwotKwkJWDUwOV9pc3N1ZXJfbmFtZV9oYXNoOwotKwkJWDUwOV9sb2FkX2NlcnRfZmlsZTsKLSsJCVg1MDlfbmV3OwotKwkJWDUwOV9wcmludDsKLSsJCVg1MDlfcHJpbnRfZnA7Ci0rCQlYNTA5X3NldF9pc3N1ZXJfbmFtZTsKLSsJCVg1MDlfc2V0X25vdEFmdGVyOwotKwkJWDUwOV9zZXRfbm90QmVmb3JlOwotKwkJWDUwOV9zZXRfcHVia2V5OwotKwkJWDUwOV9zZXRfc2VyaWFsTnVtYmVyOwotKwkJWDUwOV9zZXRfc3ViamVjdF9uYW1lOwotKwkJWDUwOV9zZXRfdmVyc2lvbjsKLSsJCVg1MDlfc2lnbjsKLSsJCVg1MDlfc3ViamVjdF9uYW1lX2NtcDsKLSsJCVg1MDlfc3ViamVjdF9uYW1lX2hhc2g7Ci0rCQlYNTA5X3RvX1g1MDlfUkVROwotKwkJWDUwOV92ZXJpZnk7Ci0rCQlYNTA5X3ZlcmlmeV9jZXJ0OwotKwkJWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmc7Ci0rCQlYNTA5djNfYWRkX2V4dDsKLSsJCVg1MDl2M19hZGRfZXh0ZW5zaW9uOwotKwkJWDUwOXYzX2FkZF9uZXRzY2FwZV9leHRlbnNpb25zOwotKwkJWDUwOXYzX2FkZF9zdGFuZGFyZF9leHRlbnNpb25zOwotKwkJWDUwOXYzX2NsZWFudXBfZXh0ZW5zaW9uczsKLSsJCVg1MDl2M19kYXRhX3R5cGVfYnlfTklEOwotKwkJWDUwOXYzX2RhdGFfdHlwZV9ieV9PQko7Ci0rCQlYNTA5djNfZGVsZXRlX2V4dDsKLSsJCVg1MDl2M19nZXRfZXh0OwotKwkJWDUwOXYzX2dldF9leHRfYnlfTklEOwotKwkJWDUwOXYzX2dldF9leHRfYnlfT0JKOwotKwkJWDUwOXYzX2dldF9leHRfYnlfY3JpdGljYWw7Ci0rCQlYNTA5djNfZ2V0X2V4dF9jb3VudDsKLSsJCVg1MDl2M19wYWNrX3N0cmluZzsKLSsJCVg1MDl2M19wYWNrX3R5cGVfYnlfTklEOwotKwkJWDUwOXYzX3BhY2tfdHlwZV9ieV9PQko7Ci0rCQlYNTA5djNfdW5wYWNrX3N0cmluZzsKLSsJCV9kZXNfY3J5cHQ7Ci0rCQlhMmRfQVNOMV9PQkpFQ1Q7Ci0rCQlhMmlfQVNOMV9JTlRFR0VSOwotKwkJYTJpX0FTTjFfU1RSSU5HOwotKwkJYXNuMV9GaW5pc2g7Ci0rCQlhc24xX0dldFNlcXVlbmNlOwotKwkJYm5fZGl2X3dvcmRzOwotKwkJYm5fZXhwYW5kMjsKLSsJCWJuX211bF9hZGRfd29yZHM7Ci0rCQlibl9tdWxfd29yZHM7Ci0rCQlCTl91YWRkOwotKwkJQk5fdXN1YjsKLSsJCWJuX3Nxcl93b3JkczsKLSsJCV9vc3NsX29sZF9jcnlwdDsKLSsJCWQyaV9BU04xX0JJVF9TVFJJTkc7Ci0rCQlkMmlfQVNOMV9CT09MRUFOOwotKwkJZDJpX0FTTjFfSEVBREVSOwotKwkJZDJpX0FTTjFfSUE1U1RSSU5HOwotKwkJZDJpX0FTTjFfSU5URUdFUjsKLSsJCWQyaV9BU04xX09CSkVDVDsKLSsJCWQyaV9BU04xX09DVEVUX1NUUklORzsKLSsJCWQyaV9BU04xX1BSSU5UQUJMRTsKLSsJCWQyaV9BU04xX1BSSU5UQUJMRVNUUklORzsKLSsJCWQyaV9BU04xX1NFVDsKLSsJCWQyaV9BU04xX1Q2MVNUUklORzsKLSsJCWQyaV9BU04xX1RZUEU7Ci0rCQlkMmlfQVNOMV9VVENUSU1FOwotKwkJZDJpX0FTTjFfYnl0ZXM7Ci0rCQlkMmlfQVNOMV90eXBlX2J5dGVzOwotKwkJZDJpX0RIcGFyYW1zOwotKwkJZDJpX0RTQVByaXZhdGVLZXk7Ci0rCQlkMmlfRFNBUHJpdmF0ZUtleV9iaW87Ci0rCQlkMmlfRFNBUHJpdmF0ZUtleV9mcDsKLSsJCWQyaV9EU0FQdWJsaWNLZXk7Ci0rCQlkMmlfRFNBcGFyYW1zOwotKwkJZDJpX05FVFNDQVBFX1NQS0FDOwotKwkJZDJpX05FVFNDQVBFX1NQS0k7Ci0rCQlkMmlfTmV0c2NhcGVfUlNBOwotKwkJZDJpX1BLQ1M3OwotKwkJZDJpX1BLQ1M3X0RJR0VTVDsKLSsJCWQyaV9QS0NTN19FTkNSWVBUOwotKwkJZDJpX1BLQ1M3X0VOQ19DT05URU5UOwotKwkJZDJpX1BLQ1M3X0VOVkVMT1BFOwotKwkJZDJpX1BLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMOwotKwkJZDJpX1BLQ1M3X1JFQ0lQX0lORk87Ci0rCQlkMmlfUEtDUzdfU0lHTkVEOwotKwkJZDJpX1BLQ1M3X1NJR05FUl9JTkZPOwotKwkJZDJpX1BLQ1M3X1NJR05fRU5WRUxPUEU7Ci0rCQlkMmlfUEtDUzdfYmlvOwotKwkJZDJpX1BLQ1M3X2ZwOwotKwkJZDJpX1ByaXZhdGVLZXk7Ci0rCQlkMmlfUHVibGljS2V5OwotKwkJZDJpX1JTQVByaXZhdGVLZXk7Ci0rCQlkMmlfUlNBUHJpdmF0ZUtleV9iaW87Ci0rCQlkMmlfUlNBUHJpdmF0ZUtleV9mcDsKLSsJCWQyaV9SU0FQdWJsaWNLZXk7Ci0rCQlkMmlfWDUwOTsKLSsJCWQyaV9YNTA5X0FMR09SOwotKwkJZDJpX1g1MDlfQVRUUklCVVRFOwotKwkJZDJpX1g1MDlfQ0lORjsKLSsJCWQyaV9YNTA5X0NSTDsKLSsJCWQyaV9YNTA5X0NSTF9JTkZPOwotKwkJZDJpX1g1MDlfQ1JMX2JpbzsKLSsJCWQyaV9YNTA5X0NSTF9mcDsKLSsJCWQyaV9YNTA5X0VYVEVOU0lPTjsKLSsJCWQyaV9YNTA5X05BTUU7Ci0rCQlkMmlfWDUwOV9OQU1FX0VOVFJZOwotKwkJZDJpX1g1MDlfUEtFWTsKLSsJCWQyaV9YNTA5X1BVQktFWTsKLSsJCWQyaV9YNTA5X1JFUTsKLSsJCWQyaV9YNTA5X1JFUV9JTkZPOwotKwkJZDJpX1g1MDlfUkVRX2JpbzsKLSsJCWQyaV9YNTA5X1JFUV9mcDsKLSsJCWQyaV9YNTA5X1JFVk9LRUQ7Ci0rCQlkMmlfWDUwOV9TSUc7Ci0rCQlkMmlfWDUwOV9WQUw7Ci0rCQlkMmlfWDUwOV9iaW87Ci0rCQlkMmlfWDUwOV9mcDsKLSsJCURFU19jYmNfY2tzdW07Ci0rCQlERVNfY2JjX2VuY3J5cHQ7Ci0rCQlERVNfY2Jsb2NrX3ByaW50X2ZpbGU7Ci0rCQlERVNfY2ZiNjRfZW5jcnlwdDsKLSsJCURFU19jZmJfZW5jcnlwdDsKLSsJCURFU19kZWNyeXB0MzsKLSsJCURFU19lY2IzX2VuY3J5cHQ7Ci0rCQlERVNfZWNiX2VuY3J5cHQ7Ci0rCQlERVNfZWRlM19jYmNfZW5jcnlwdDsKLSsJCURFU19lZGUzX2NmYjY0X2VuY3J5cHQ7Ci0rCQlERVNfZWRlM19vZmI2NF9lbmNyeXB0OwotKwkJREVTX2VuY19yZWFkOwotKwkJREVTX2VuY193cml0ZTsKLSsJCURFU19lbmNyeXB0MTsKLSsJCURFU19lbmNyeXB0MjsKLSsJCURFU19lbmNyeXB0MzsKLSsJCURFU19mY3J5cHQ7Ci0rCQlERVNfaXNfd2Vha19rZXk7Ci0rCQlERVNfa2V5X3NjaGVkOwotKwkJREVTX25jYmNfZW5jcnlwdDsKLSsJCURFU19vZmI2NF9lbmNyeXB0OwotKwkJREVTX29mYl9lbmNyeXB0OwotKwkJREVTX29wdGlvbnM7Ci0rCQlERVNfcGNiY19lbmNyeXB0OwotKwkJREVTX3F1YWRfY2tzdW07Ci0rCQlERVNfcmFuZG9tX2tleTsKLSsJCV9vc3NsX29sZF9kZXNfcmFuZG9tX3NlZWQ7Ci0rCQlfb3NzbF9vbGRfZGVzX3JlYWRfMnBhc3N3b3JkczsKLSsJCV9vc3NsX29sZF9kZXNfcmVhZF9wYXNzd29yZDsKLSsJCV9vc3NsX29sZF9kZXNfcmVhZF9wdzsKLSsJCV9vc3NsX29sZF9kZXNfcmVhZF9wd19zdHJpbmc7Ci0rCQlERVNfc2V0X2tleTsKLSsJCURFU19zZXRfb2RkX3Bhcml0eTsKLSsJCURFU19zdHJpbmdfdG9fMmtleXM7Ci0rCQlERVNfc3RyaW5nX3RvX2tleTsKLSsJCURFU194Y2JjX2VuY3J5cHQ7Ci0rCQlERVNfeHdoaXRlX2luMm91dDsKLSsJCWZjcnlwdF9ib2R5OwotKwkJaTJhX0FTTjFfSU5URUdFUjsKLSsJCWkyYV9BU04xX09CSkVDVDsKLSsJCWkyYV9BU04xX1NUUklORzsKLSsJCWkyZF9BU04xX0JJVF9TVFJJTkc7Ci0rCQlpMmRfQVNOMV9CT09MRUFOOwotKwkJaTJkX0FTTjFfSEVBREVSOwotKwkJaTJkX0FTTjFfSUE1U1RSSU5HOwotKwkJaTJkX0FTTjFfSU5URUdFUjsKLSsJCWkyZF9BU04xX09CSkVDVDsKLSsJCWkyZF9BU04xX09DVEVUX1NUUklORzsKLSsJCWkyZF9BU04xX1BSSU5UQUJMRTsKLSsJCWkyZF9BU04xX1NFVDsKLSsJCWkyZF9BU04xX1RZUEU7Ci0rCQlpMmRfQVNOMV9VVENUSU1FOwotKwkJaTJkX0FTTjFfYnl0ZXM7Ci0rCQlpMmRfREhwYXJhbXM7Ci0rCQlpMmRfRFNBUHJpdmF0ZUtleTsKLSsJCWkyZF9EU0FQcml2YXRlS2V5X2JpbzsKLSsJCWkyZF9EU0FQcml2YXRlS2V5X2ZwOwotKwkJaTJkX0RTQVB1YmxpY0tleTsKLSsJCWkyZF9EU0FwYXJhbXM7Ci0rCQlpMmRfTkVUU0NBUEVfU1BLQUM7Ci0rCQlpMmRfTkVUU0NBUEVfU1BLSTsKLSsJCWkyZF9OZXRzY2FwZV9SU0E7Ci0rCQlpMmRfUEtDUzc7Ci0rCQlpMmRfUEtDUzdfRElHRVNUOwotKwkJaTJkX1BLQ1M3X0VOQ1JZUFQ7Ci0rCQlpMmRfUEtDUzdfRU5DX0NPTlRFTlQ7Ci0rCQlpMmRfUEtDUzdfRU5WRUxPUEU7Ci0rCQlpMmRfUEtDUzdfSVNTVUVSX0FORF9TRVJJQUw7Ci0rCQlpMmRfUEtDUzdfUkVDSVBfSU5GTzsKLSsJCWkyZF9QS0NTN19TSUdORUQ7Ci0rCQlpMmRfUEtDUzdfU0lHTkVSX0lORk87Ci0rCQlpMmRfUEtDUzdfU0lHTl9FTlZFTE9QRTsKLSsJCWkyZF9QS0NTN19iaW87Ci0rCQlpMmRfUEtDUzdfZnA7Ci0rCQlpMmRfUHJpdmF0ZUtleTsKLSsJCWkyZF9QdWJsaWNLZXk7Ci0rCQlpMmRfUlNBUHJpdmF0ZUtleTsKLSsJCWkyZF9SU0FQcml2YXRlS2V5X2JpbzsKLSsJCWkyZF9SU0FQcml2YXRlS2V5X2ZwOwotKwkJaTJkX1JTQVB1YmxpY0tleTsKLSsJCWkyZF9YNTA5OwotKwkJaTJkX1g1MDlfQUxHT1I7Ci0rCQlpMmRfWDUwOV9BVFRSSUJVVEU7Ci0rCQlpMmRfWDUwOV9DSU5GOwotKwkJaTJkX1g1MDlfQ1JMOwotKwkJaTJkX1g1MDlfQ1JMX0lORk87Ci0rCQlpMmRfWDUwOV9DUkxfYmlvOwotKwkJaTJkX1g1MDlfQ1JMX2ZwOwotKwkJaTJkX1g1MDlfRVhURU5TSU9OOwotKwkJaTJkX1g1MDlfTkFNRTsKLSsJCWkyZF9YNTA5X05BTUVfRU5UUlk7Ci0rCQlpMmRfWDUwOV9QS0VZOwotKwkJaTJkX1g1MDlfUFVCS0VZOwotKwkJaTJkX1g1MDlfUkVROwotKwkJaTJkX1g1MDlfUkVRX0lORk87Ci0rCQlpMmRfWDUwOV9SRVFfYmlvOwotKwkJaTJkX1g1MDlfUkVRX2ZwOwotKwkJaTJkX1g1MDlfUkVWT0tFRDsKLSsJCWkyZF9YNTA5X1NJRzsKLSsJCWkyZF9YNTA5X1ZBTDsKLSsJCWkyZF9YNTA5X2JpbzsKLSsJCWkyZF9YNTA5X2ZwOwotKwkJaWRlYV9jYmNfZW5jcnlwdDsKLSsJCWlkZWFfY2ZiNjRfZW5jcnlwdDsKLSsJCWlkZWFfZWNiX2VuY3J5cHQ7Ci0rCQlpZGVhX2VuY3J5cHQ7Ci0rCQlpZGVhX29mYjY0X2VuY3J5cHQ7Ci0rCQlpZGVhX29wdGlvbnM7Ci0rCQlpZGVhX3NldF9kZWNyeXB0X2tleTsKLSsJCWlkZWFfc2V0X2VuY3J5cHRfa2V5OwotKwkJbGhfZGVsZXRlOwotKwkJbGhfZG9hbGw7Ci0rCQlsaF9kb2FsbF9hcmc7Ci0rCQlsaF9mcmVlOwotKwkJbGhfaW5zZXJ0OwotKwkJbGhfbmV3OwotKwkJbGhfbm9kZV9zdGF0czsKLSsJCWxoX25vZGVfc3RhdHNfYmlvOwotKwkJbGhfbm9kZV91c2FnZV9zdGF0czsKLSsJCWxoX25vZGVfdXNhZ2Vfc3RhdHNfYmlvOwotKwkJbGhfcmV0cmlldmU7Ci0rCQlsaF9zdGF0czsKLSsJCWxoX3N0YXRzX2JpbzsKLSsJCWxoX3N0cmhhc2g7Ci0rCQlza19kZWxldGU7Ci0rCQlza19kZWxldGVfcHRyOwotKwkJc2tfZHVwOwotKwkJc2tfZmluZDsKLSsJCXNrX2ZyZWU7Ci0rCQlza19pbnNlcnQ7Ci0rCQlza19uZXc7Ci0rCQlza19wb3A7Ci0rCQlza19wb3BfZnJlZTsKLSsJCXNrX3B1c2g7Ci0rCQlza19zZXRfY21wX2Z1bmM7Ci0rCQlza19zaGlmdDsKLSsJCXNrX3Vuc2hpZnQ7Ci0rCQlza196ZXJvOwotKwkJQklPX2ZfbmJpb190ZXN0OwotKwkJQVNOMV9UWVBFX2dldDsKLSsJCUFTTjFfVFlQRV9zZXQ7Ci0rCQlQS0NTN19jb250ZW50X2ZyZWU7Ci0rCQlFUlJfbG9hZF9QS0NTN19zdHJpbmdzOwotKwkJWDUwOV9maW5kX2J5X2lzc3Vlcl9hbmRfc2VyaWFsOwotKwkJWDUwOV9maW5kX2J5X3N1YmplY3Q7Ci0rCQlQS0NTN19jdHJsOwotKwkJUEtDUzdfc2V0X3R5cGU7Ci0rCQlQS0NTN19zZXRfY29udGVudDsKLSsJCVBLQ1M3X1NJR05FUl9JTkZPX3NldDsKLSsJCVBLQ1M3X2FkZF9zaWduZXI7Ci0rCQlQS0NTN19hZGRfY2VydGlmaWNhdGU7Ci0rCQlQS0NTN19hZGRfY3JsOwotKwkJUEtDUzdfY29udGVudF9uZXc7Ci0rCQlQS0NTN19kYXRhU2lnbjsKLSsJCVBLQ1M3X2RhdGFWZXJpZnk7Ci0rCQlQS0NTN19kYXRhSW5pdDsKLSsJCVBLQ1M3X2FkZF9zaWduYXR1cmU7Ci0rCQlQS0NTN19jZXJ0X2Zyb21fc2lnbmVyX2luZm87Ci0rCQlQS0NTN19nZXRfc2lnbmVyX2luZm87Ci0rCQlFVlBfZGVsZXRlX2FsaWFzOwotKwkJRVZQX21kYzI7Ci0rCQlQRU1fcmVhZF9iaW9fUlNBUHVibGljS2V5OwotKwkJUEVNX3dyaXRlX2Jpb19SU0FQdWJsaWNLZXk7Ci0rCQlkMmlfUlNBUHVibGljS2V5X2JpbzsKLSsJCWkyZF9SU0FQdWJsaWNLZXlfYmlvOwotKwkJUEVNX3JlYWRfUlNBUHVibGljS2V5OwotKwkJUEVNX3dyaXRlX1JTQVB1YmxpY0tleTsKLSsJCWQyaV9SU0FQdWJsaWNLZXlfZnA7Ci0rCQlpMmRfUlNBUHVibGljS2V5X2ZwOwotKwkJQklPX2NvcHlfbmV4dF9yZXRyeTsKLSsJCVJTQV9mbGFnczsKLSsJCVg1MDlfU1RPUkVfYWRkX2NybDsKLSsJCVg1MDlfbG9hZF9jcmxfZmlsZTsKLSsJCUVWUF9yYzJfNDBfY2JjOwotKwkJRVZQX3JjNF80MDsKLSsJCUVWUF9DSVBIRVJfQ1RYX2luaXQ7Ci0rCQlITUFDOwotKwkJSE1BQ19Jbml0OwotKwkJSE1BQ19VcGRhdGU7Ci0rCQlITUFDX0ZpbmFsOwotKwkJRVJSX2dldF9uZXh0X2Vycm9yX2xpYnJhcnk7Ci0rCQlFVlBfUEtFWV9jbXBfcGFyYW1ldGVyczsKLSsJCUhNQUNfY2xlYW51cDsKLSsJCUJJT19wdHJfY3RybDsKLSsJCUJJT19uZXdfZmlsZV9pbnRlcm5hbDsKLSsJCUJJT19uZXdfZnBfaW50ZXJuYWw7Ci0rCQlCSU9fc19maWxlX2ludGVybmFsOwotKwkJQk5fQkxJTkRJTkdfY29udmVydDsKLSsJCUJOX0JMSU5ESU5HX2ludmVydDsKLSsJCUJOX0JMSU5ESU5HX3VwZGF0ZTsKLSsJCVJTQV9ibGluZGluZ19vbjsKLSsJCVJTQV9ibGluZGluZ19vZmY7Ci0rCQlpMnRfQVNOMV9PQkpFQ1Q7Ci0rCQlCTl9CTElORElOR19uZXc7Ci0rCQlCTl9CTElORElOR19mcmVlOwotKwkJRVZQX2Nhc3Q1X2NiYzsKLSsJCUVWUF9jYXN0NV9jZmI2NDsKLSsJCUVWUF9jYXN0NV9lY2I7Ci0rCQlFVlBfY2FzdDVfb2ZiOwotKwkJQkZfZGVjcnlwdDsKLSsJCUNBU1Rfc2V0X2tleTsKLSsJCUNBU1RfZW5jcnlwdDsKLSsJCUNBU1RfZGVjcnlwdDsKLSsJCUNBU1RfZWNiX2VuY3J5cHQ7Ci0rCQlDQVNUX2NiY19lbmNyeXB0OwotKwkJQ0FTVF9jZmI2NF9lbmNyeXB0OwotKwkJQ0FTVF9vZmI2NF9lbmNyeXB0OwotKwkJUkMyX2RlY3J5cHQ7Ci0rCQlPQkpfY3JlYXRlX29iamVjdHM7Ci0rCQlCTl9leHA7Ci0rCQlCTl9tdWxfd29yZDsKLSsJCUJOX3N1Yl93b3JkOwotKwkJQk5fZGVjMmJuOwotKwkJQk5fYm4yZGVjOwotKwkJQklPX2doYm5fY3RybDsKLSsJCUNSWVBUT19mcmVlX2V4X2RhdGE7Ci0rCQlDUllQVE9fZ2V0X2V4X2RhdGE7Ci0rCQlDUllQVE9fc2V0X2V4X2RhdGE7Ci0rCQlFUlJfbG9hZF9DUllQVE9fc3RyaW5nczsKLSsJCUVSUl9sb2FkX0NSWVBUT2xpYl9zdHJpbmdzOwotKwkJRVZQX1BLRVlfYml0czsKLSsJCU1ENV9UcmFuc2Zvcm07Ci0rCQlTSEExX1RyYW5zZm9ybTsKLSsJCVNIQV9UcmFuc2Zvcm07Ci0rCQlYNTA5X1NUT1JFX0NUWF9nZXRfY2hhaW47Ci0rCQlYNTA5X1NUT1JFX0NUWF9nZXRfY3VycmVudF9jZXJ0OwotKwkJWDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9yOwotKwkJWDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9yX2RlcHRoOwotKwkJWDUwOV9TVE9SRV9DVFhfZ2V0X2V4X2RhdGE7Ci0rCQlYNTA5X1NUT1JFX0NUWF9zZXRfY2VydDsKLSsJCVg1MDlfU1RPUkVfQ1RYX3NldF9jaGFpbjsKLSsJCVg1MDlfU1RPUkVfQ1RYX3NldF9lcnJvcjsKLSsJCVg1MDlfU1RPUkVfQ1RYX3NldF9leF9kYXRhOwotKwkJQ1JZUFRPX2R1cF9leF9kYXRhOwotKwkJQ1JZUFRPX2dldF9uZXdfbG9ja2lkOwotKwkJQ1JZUFRPX25ld19leF9kYXRhOwotKwkJUlNBX3NldF9leF9kYXRhOwotKwkJUlNBX2dldF9leF9kYXRhOwotKwkJUlNBX2dldF9leF9uZXdfaW5kZXg7Ci0rCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfdHlwZV8xOwotKwkJUlNBX3BhZGRpbmdfYWRkX1BLQ1MxX3R5cGVfMjsKLSsJCVJTQV9wYWRkaW5nX2FkZF9TU0x2MjM7Ci0rCQlSU0FfcGFkZGluZ19hZGRfbm9uZTsKLSsJCVJTQV9wYWRkaW5nX2NoZWNrX1BLQ1MxX3R5cGVfMTsKLSsJCVJTQV9wYWRkaW5nX2NoZWNrX1BLQ1MxX3R5cGVfMjsKLSsJCVJTQV9wYWRkaW5nX2NoZWNrX1NTTHYyMzsKLSsJCVJTQV9wYWRkaW5nX2NoZWNrX25vbmU7Ci0rCQlibl9hZGRfd29yZHM7Ci0rCQlkMmlfTmV0c2NhcGVfUlNBXzI7Ci0rCQlDUllQVE9fZ2V0X2V4X25ld19pbmRleDsKLSsJCVJJUEVNRDE2MF9Jbml0OwotKwkJUklQRU1EMTYwX1VwZGF0ZTsKLSsJCVJJUEVNRDE2MF9GaW5hbDsKLSsJCVJJUEVNRDE2MDsKLSsJCVJJUEVNRDE2MF9UcmFuc2Zvcm07Ci0rCQlSQzVfMzJfc2V0X2tleTsKLSsJCVJDNV8zMl9lY2JfZW5jcnlwdDsKLSsJCVJDNV8zMl9lbmNyeXB0OwotKwkJUkM1XzMyX2RlY3J5cHQ7Ci0rCQlSQzVfMzJfY2JjX2VuY3J5cHQ7Ci0rCQlSQzVfMzJfY2ZiNjRfZW5jcnlwdDsKLSsJCVJDNV8zMl9vZmI2NF9lbmNyeXB0OwotKwkJQk5fYm4ybXBpOwotKwkJQk5fbXBpMmJuOwotKwkJQVNOMV9CSVRfU1RSSU5HX2dldF9iaXQ7Ci0rCQlBU04xX0JJVF9TVFJJTkdfc2V0X2JpdDsKLSsJCUJJT19nZXRfZXhfZGF0YTsKLSsJCUJJT19nZXRfZXhfbmV3X2luZGV4OwotKwkJQklPX3NldF9leF9kYXRhOwotKwkJWDUwOXYzX2dldF9rZXlfdXNhZ2U7Ci0rCQlYNTA5djNfc2V0X2tleV91c2FnZTsKLSsJCWEyaV9YNTA5djNfa2V5X3VzYWdlOwotKwkJaTJhX1g1MDl2M19rZXlfdXNhZ2U7Ci0rCQlFVlBfUEtFWV9kZWNyeXB0OwotKwkJRVZQX1BLRVlfZW5jcnlwdDsKLSsJCVBLQ1M3X1JFQ0lQX0lORk9fc2V0OwotKwkJUEtDUzdfYWRkX3JlY2lwaWVudDsKLSsJCVBLQ1M3X2FkZF9yZWNpcGllbnRfaW5mbzsKLSsJCVBLQ1M3X3NldF9jaXBoZXI7Ci0rCQlBU04xX1RZUEVfZ2V0X2ludF9vY3RldHN0cmluZzsKLSsJCUFTTjFfVFlQRV9nZXRfb2N0ZXRzdHJpbmc7Ci0rCQlBU04xX1RZUEVfc2V0X2ludF9vY3RldHN0cmluZzsKLSsJCUFTTjFfVFlQRV9zZXRfb2N0ZXRzdHJpbmc7Ci0rCQlBU04xX1VUQ1RJTUVfc2V0X3N0cmluZzsKLSsJCUVSUl9hZGRfZXJyb3JfZGF0YTsKLSsJCUVSUl9zZXRfZXJyb3JfZGF0YTsKLSsJCUVWUF9DSVBIRVJfYXNuMV90b19wYXJhbTsKLSsJCUVWUF9DSVBIRVJfcGFyYW1fdG9fYXNuMTsKLSsJCUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXY7Ci0rCQlFVlBfQ0lQSEVSX3NldF9hc24xX2l2OwotKwkJRVZQX3JjNV8zMl8xMl8xNl9jYmM7Ci0rCQlFVlBfcmM1XzMyXzEyXzE2X2NmYjY0OwotKwkJRVZQX3JjNV8zMl8xMl8xNl9lY2I7Ci0rCQlFVlBfcmM1XzMyXzEyXzE2X29mYjsKLSsJCWFzbjFfYWRkX2Vycm9yOwotKwkJZDJpX0FTTjFfQk1QU1RSSU5HOwotKwkJaTJkX0FTTjFfQk1QU1RSSU5HOwotKwkJQklPX2ZfYmVyOwotKwkJQk5faW5pdDsKLSsJCUNPTVBfQ1RYX25ldzsKLSsJCUNPTVBfQ1RYX2ZyZWU7Ci0rCQlDT01QX0NUWF9jb21wcmVzc19ibG9jazsKLSsJCUNPTVBfQ1RYX2V4cGFuZF9ibG9jazsKLSsJCVg1MDlfU1RPUkVfQ1RYX2dldF9leF9uZXdfaW5kZXg7Ci0rCQlPQkpfTkFNRV9hZGQ7Ci0rCQlCSU9fc29ja2V0X25iaW87Ci0rCQlFVlBfcmMyXzY0X2NiYzsKLSsJCU9CSl9OQU1FX2NsZWFudXA7Ci0rCQlPQkpfTkFNRV9nZXQ7Ci0rCQlPQkpfTkFNRV9pbml0OwotKwkJT0JKX05BTUVfbmV3X2luZGV4OwotKwkJT0JKX05BTUVfcmVtb3ZlOwotKwkJQk5fTU9OVF9DVFhfY29weTsKLSsJCUJJT19uZXdfc29ja3M0YV9jb25uZWN0OwotKwkJQklPX3Nfc29ja3M0YV9jb25uZWN0OwotKwkJUFJPWFlfc2V0X2Nvbm5lY3RfbW9kZTsKLSsJCVJBTkRfU1NMZWF5OwotKwkJUkFORF9zZXRfcmFuZF9tZXRob2Q7Ci0rCQlSU0FfbWVtb3J5X2xvY2s7Ci0rCQlibl9zdWJfd29yZHM7Ci0rCQlibl9tdWxfbm9ybWFsOwotKwkJYm5fbXVsX2NvbWJhODsKLSsJCWJuX211bF9jb21iYTQ7Ci0rCQlibl9zcXJfbm9ybWFsOwotKwkJYm5fc3FyX2NvbWJhODsKLSsJCWJuX3Nxcl9jb21iYTQ7Ci0rCQlibl9jbXBfd29yZHM7Ci0rCQlibl9tdWxfcmVjdXJzaXZlOwotKwkJYm5fbXVsX3BhcnRfcmVjdXJzaXZlOwotKwkJYm5fc3FyX3JlY3Vyc2l2ZTsKLSsJCWJuX211bF9sb3dfbm9ybWFsOwotKwkJQk5fUkVDUF9DVFhfaW5pdDsKLSsJCUJOX1JFQ1BfQ1RYX25ldzsKLSsJCUJOX1JFQ1BfQ1RYX2ZyZWU7Ci0rCQlCTl9SRUNQX0NUWF9zZXQ7Ci0rCQlCTl9tb2RfbXVsX3JlY2lwcm9jYWw7Ci0rCQlCTl9tb2RfZXhwX3JlY3A7Ci0rCQlCTl9kaXZfcmVjcDsKLSsJCUJOX0NUWF9pbml0OwotKwkJQk5fTU9OVF9DVFhfaW5pdDsKLSsJCVJBTkRfZ2V0X3JhbmRfbWV0aG9kOwotKwkJUEtDUzdfYWRkX2F0dHJpYnV0ZTsKLSsJCVBLQ1M3X2FkZF9zaWduZWRfYXR0cmlidXRlOwotKwkJUEtDUzdfZGlnZXN0X2Zyb21fYXR0cmlidXRlczsKLSsJCVBLQ1M3X2dldF9hdHRyaWJ1dGU7Ci0rCQlQS0NTN19nZXRfaXNzdWVyX2FuZF9zZXJpYWw7Ci0rCQlQS0NTN19nZXRfc2lnbmVkX2F0dHJpYnV0ZTsKLSsJCUNPTVBfY29tcHJlc3NfYmxvY2s7Ci0rCQlDT01QX2V4cGFuZF9ibG9jazsKLSsJCUNPTVBfcmxlOwotKwkJQ09NUF96bGliOwotKwkJbXNfdGltZV9kaWZmOwotKwkJbXNfdGltZV9uZXc7Ci0rCQltc190aW1lX2ZyZWU7Ci0rCQltc190aW1lX2NtcDsKLSsJCW1zX3RpbWVfZ2V0OwotKwkJUEtDUzdfc2V0X2F0dHJpYnV0ZXM7Ci0rCQlQS0NTN19zZXRfc2lnbmVkX2F0dHJpYnV0ZXM7Ci0rCQlYNTA5X0FUVFJJQlVURV9jcmVhdGU7Ci0rCQlYNTA5X0FUVFJJQlVURV9kdXA7Ci0rCQlBU04xX0dFTkVSQUxJWkVEVElNRV9jaGVjazsKLSsJCUFTTjFfR0VORVJBTElaRURUSU1FX3ByaW50OwotKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfc2V0OwotKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfc2V0X3N0cmluZzsKLSsJCUFTTjFfVElNRV9wcmludDsKLSsJCUJBU0lDX0NPTlNUUkFJTlRTX2ZyZWU7Ci0rCQlCQVNJQ19DT05TVFJBSU5UU19uZXc7Ci0rCQlFUlJfbG9hZF9YNTA5VjNfc3RyaW5nczsKLSsJCU5FVFNDQVBFX0NFUlRfU0VRVUVOQ0VfZnJlZTsKLSsJCU5FVFNDQVBFX0NFUlRfU0VRVUVOQ0VfbmV3OwotKwkJT0JKX3R4dDJvYmo7Ci0rCQlQRU1fcmVhZF9ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFOwotKwkJUEVNX3JlYWRfTlNfQ0VSVF9TRVE7Ci0rCQlQRU1fcmVhZF9iaW9fTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRTsKLSsJCVBFTV9yZWFkX2Jpb19OU19DRVJUX1NFUTsKLSsJCVBFTV93cml0ZV9ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFOwotKwkJUEVNX3dyaXRlX05TX0NFUlRfU0VROwotKwkJUEVNX3dyaXRlX2Jpb19ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFOwotKwkJUEVNX3dyaXRlX2Jpb19OU19DRVJUX1NFUTsKLSsJCVg1MDlWM19FWFRfYWRkOwotKwkJWDUwOVYzX0VYVF9hZGRfYWxpYXM7Ci0rCQlYNTA5VjNfRVhUX2FkZF9jb25mOwotKwkJWDUwOVYzX0VYVF9jbGVhbnVwOwotKwkJWDUwOVYzX0VYVF9jb25mOwotKwkJWDUwOVYzX0VYVF9jb25mX25pZDsKLSsJCVg1MDlWM19FWFRfZ2V0OwotKwkJWDUwOVYzX0VYVF9nZXRfbmlkOwotKwkJWDUwOVYzX0VYVF9wcmludDsKLSsJCVg1MDlWM19FWFRfcHJpbnRfZnA7Ci0rCQlYNTA5VjNfYWRkX3N0YW5kYXJkX2V4dGVuc2lvbnM7Ci0rCQlYNTA5VjNfYWRkX3ZhbHVlOwotKwkJWDUwOVYzX2FkZF92YWx1ZV9ib29sOwotKwkJWDUwOVYzX2FkZF92YWx1ZV9pbnQ7Ci0rCQlYNTA5VjNfY29uZl9mcmVlOwotKwkJWDUwOVYzX2dldF92YWx1ZV9ib29sOwotKwkJWDUwOVYzX2dldF92YWx1ZV9pbnQ7Ci0rCQlYNTA5VjNfcGFyc2VfbGlzdDsKLSsJCWQyaV9BU04xX0dFTkVSQUxJWkVEVElNRTsKLSsJCWQyaV9BU04xX1RJTUU7Ci0rCQlkMmlfQkFTSUNfQ09OU1RSQUlOVFM7Ci0rCQlkMmlfTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRTsKLSsJCWQyaV9leHRfa3U7Ci0rCQlleHRfa3VfZnJlZTsKLSsJCWV4dF9rdV9uZXc7Ci0rCQlpMmRfQVNOMV9HRU5FUkFMSVpFRFRJTUU7Ci0rCQlpMmRfQVNOMV9USU1FOwotKwkJaTJkX0JBU0lDX0NPTlNUUkFJTlRTOwotKwkJaTJkX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0U7Ci0rCQlpMmRfZXh0X2t1OwotKwkJRVZQX01EX0NUWF9jb3B5OwotKwkJaTJkX0FTTjFfRU5VTUVSQVRFRDsKLSsJCWQyaV9BU04xX0VOVU1FUkFURUQ7Ci0rCQlBU04xX0VOVU1FUkFURURfc2V0OwotKwkJQVNOMV9FTlVNRVJBVEVEX2dldDsKLSsJCUJOX3RvX0FTTjFfRU5VTUVSQVRFRDsKLSsJCUFTTjFfRU5VTUVSQVRFRF90b19CTjsKLSsJCWkyYV9BU04xX0VOVU1FUkFURUQ7Ci0rCQlhMmlfQVNOMV9FTlVNRVJBVEVEOwotKwkJaTJkX0dFTkVSQUxfTkFNRTsKLSsJCWQyaV9HRU5FUkFMX05BTUU7Ci0rCQlHRU5FUkFMX05BTUVfbmV3OwotKwkJR0VORVJBTF9OQU1FX2ZyZWU7Ci0rCQlHRU5FUkFMX05BTUVTX25ldzsKLSsJCUdFTkVSQUxfTkFNRVNfZnJlZTsKLSsJCWQyaV9HRU5FUkFMX05BTUVTOwotKwkJaTJkX0dFTkVSQUxfTkFNRVM7Ci0rCQlpMnZfR0VORVJBTF9OQU1FUzsKLSsJCWkyc19BU04xX09DVEVUX1NUUklORzsKLSsJCXMyaV9BU04xX09DVEVUX1NUUklORzsKLSsJCVg1MDlWM19FWFRfY2hlY2tfY29uZjsKLSsJCWhleF90b19zdHJpbmc7Ci0rCQlzdHJpbmdfdG9faGV4OwotKwkJREVTX2VkZTNfY2JjbV9lbmNyeXB0OwotKwkJUlNBX3BhZGRpbmdfYWRkX1BLQ1MxX09BRVA7Ci0rCQlSU0FfcGFkZGluZ19jaGVja19QS0NTMV9PQUVQOwotKwkJWDUwOV9DUkxfcHJpbnRfZnA7Ci0rCQlYNTA5X0NSTF9wcmludDsKLSsJCWkydl9HRU5FUkFMX05BTUU7Ci0rCQl2MmlfR0VORVJBTF9OQU1FOwotKwkJaTJkX1BLRVlfVVNBR0VfUEVSSU9EOwotKwkJZDJpX1BLRVlfVVNBR0VfUEVSSU9EOwotKwkJUEtFWV9VU0FHRV9QRVJJT0RfbmV3OwotKwkJUEtFWV9VU0FHRV9QRVJJT0RfZnJlZTsKLSsJCXYyaV9HRU5FUkFMX05BTUVTOwotKwkJaTJzX0FTTjFfSU5URUdFUjsKLSsJCVg1MDlWM19FWFRfZDJpOwotKwkJbmFtZV9jbXA7Ci0rCQlzdHJfZHVwOwotKwkJaTJzX0FTTjFfRU5VTUVSQVRFRDsKLSsJCWkyc19BU04xX0VOVU1FUkFURURfVEFCTEU7Ci0rCQlCSU9fc19sb2c7Ci0rCQlCSU9fZl9yZWxpYWJsZTsKLSsJCVBLQ1M3X2RhdGFGaW5hbDsKLSsJCVBLQ1M3X2RhdGFEZWNvZGU7Ci0rCQlYNTA5VjNfRVhUX0NSTF9hZGRfY29uZjsKLSsJCUJOX3NldF9wYXJhbXM7Ci0rCQlCTl9nZXRfcGFyYW1zOwotKwkJQklPX2dldF9leF9udW07Ci0rCQlCSU9fc2V0X2V4X2ZyZWVfZnVuYzsKLSsJCUVWUF9yaXBlbWQxNjA7Ci0rCQlBU04xX1RJTUVfc2V0OwotKwkJaTJkX0FVVEhPUklUWV9LRVlJRDsKLSsJCWQyaV9BVVRIT1JJVFlfS0VZSUQ7Ci0rCQlBVVRIT1JJVFlfS0VZSURfbmV3OwotKwkJQVVUSE9SSVRZX0tFWUlEX2ZyZWU7Ci0rCQlBU04xX3NlcV91bnBhY2s7Ci0rCQlBU04xX3NlcV9wYWNrOwotKwkJQVNOMV91bnBhY2tfc3RyaW5nOwotKwkJQVNOMV9wYWNrX3N0cmluZzsKLSsJCVBLQ1MxMl9wYWNrX3NhZmViYWc7Ci0rCQlQS0NTMTJfTUFLRV9LRVlCQUc7Ci0rCQlQS0NTOF9lbmNyeXB0OwotKwkJUEtDUzEyX01BS0VfU0hLRVlCQUc7Ci0rCQlQS0NTMTJfcGFja19wN2RhdGE7Ci0rCQlQS0NTMTJfcGFja19wN2VuY2RhdGE7Ci0rCQlQS0NTMTJfYWRkX2xvY2Fsa2V5aWQ7Ci0rCQlQS0NTMTJfYWRkX2ZyaWVuZGx5bmFtZV9hc2M7Ci0rCQlQS0NTMTJfYWRkX2ZyaWVuZGx5bmFtZV91bmk7Ci0rCQlQS0NTMTJfZ2V0X2ZyaWVuZGx5bmFtZTsKLSsJCVBLQ1MxMl9wYmVfY3J5cHQ7Ci0rCQlQS0NTMTJfZGVjcnlwdF9kMmk7Ci0rCQlQS0NTMTJfaTJkX2VuY3J5cHQ7Ci0rCQlQS0NTMTJfaW5pdDsKLSsJCVBLQ1MxMl9rZXlfZ2VuX2FzYzsKLSsJCVBLQ1MxMl9rZXlfZ2VuX3VuaTsKLSsJCVBLQ1MxMl9nZW5fbWFjOwotKwkJUEtDUzEyX3ZlcmlmeV9tYWM7Ci0rCQlQS0NTMTJfc2V0X21hYzsKLSsJCVBLQ1MxMl9zZXR1cF9tYWM7Ci0rCQlPUEVOU1NMX2FzYzJ1bmk7Ci0rCQlPUEVOU1NMX3VuaTJhc2M7Ci0rCQlpMmRfUEtDUzEyX0JBR1M7Ci0rCQlQS0NTMTJfQkFHU19uZXc7Ci0rCQlkMmlfUEtDUzEyX0JBR1M7Ci0rCQlQS0NTMTJfQkFHU19mcmVlOwotKwkJaTJkX1BLQ1MxMjsKLSsJCWQyaV9QS0NTMTI7Ci0rCQlQS0NTMTJfbmV3OwotKwkJUEtDUzEyX2ZyZWU7Ci0rCQlpMmRfUEtDUzEyX01BQ19EQVRBOwotKwkJUEtDUzEyX01BQ19EQVRBX25ldzsKLSsJCWQyaV9QS0NTMTJfTUFDX0RBVEE7Ci0rCQlQS0NTMTJfTUFDX0RBVEFfZnJlZTsKLSsJCWkyZF9QS0NTMTJfU0FGRUJBRzsKLSsJCVBLQ1MxMl9TQUZFQkFHX25ldzsKLSsJCWQyaV9QS0NTMTJfU0FGRUJBRzsKLSsJCVBLQ1MxMl9TQUZFQkFHX2ZyZWU7Ci0rCQlFUlJfbG9hZF9QS0NTMTJfc3RyaW5nczsKLSsJCVBLQ1MxMl9QQkVfYWRkOwotKwkJUEtDUzhfYWRkX2tleXVzYWdlOwotKwkJUEtDUzEyX2dldF9hdHRyX2dlbjsKLSsJCVBLQ1MxMl9wYXJzZTsKLSsJCVBLQ1MxMl9jcmVhdGU7Ci0rCQlpMmRfUEtDUzEyX2JpbzsKLSsJCWkyZF9QS0NTMTJfZnA7Ci0rCQlkMmlfUEtDUzEyX2JpbzsKLSsJCWQyaV9QS0NTMTJfZnA7Ci0rCQlpMmRfUEJFUEFSQU07Ci0rCQlQQkVQQVJBTV9uZXc7Ci0rCQlkMmlfUEJFUEFSQU07Ci0rCQlQQkVQQVJBTV9mcmVlOwotKwkJaTJkX1BLQ1M4X1BSSVZfS0VZX0lORk87Ci0rCQlQS0NTOF9QUklWX0tFWV9JTkZPX25ldzsKLSsJCWQyaV9QS0NTOF9QUklWX0tFWV9JTkZPOwotKwkJUEtDUzhfUFJJVl9LRVlfSU5GT19mcmVlOwotKwkJRVZQX1BLQ1M4MlBLRVk7Ci0rCQlFVlBfUEtFWTJQS0NTODsKLSsJCVBLQ1M4X3NldF9icm9rZW47Ci0rCQlFVlBfUEJFX0FMR09SX0NpcGhlckluaXQ7Ci0rCQlFVlBfUEJFX2FsZ19hZGQ7Ci0rCQlQS0NTNV9wYmVfc2V0OwotKwkJRVZQX1BCRV9jbGVhbnVwOwotKwkJaTJkX1NYTkVUOwotKwkJZDJpX1NYTkVUOwotKwkJU1hORVRfbmV3OwotKwkJU1hORVRfZnJlZTsKLSsJCWkyZF9TWE5FVElEOwotKwkJZDJpX1NYTkVUSUQ7Ci0rCQlTWE5FVElEX25ldzsKLSsJCVNYTkVUSURfZnJlZTsKLSsJCURTQV9TSUdfbmV3OwotKwkJRFNBX1NJR19mcmVlOwotKwkJRFNBX2RvX3NpZ247Ci0rCQlEU0FfZG9fdmVyaWZ5OwotKwkJZDJpX0RTQV9TSUc7Ci0rCQlpMmRfRFNBX1NJRzsKLSsJCWkyZF9BU04xX1ZJU0lCTEVTVFJJTkc7Ci0rCQlkMmlfQVNOMV9WSVNJQkxFU1RSSU5HOwotKwkJaTJkX0FTTjFfVVRGOFNUUklORzsKLSsJCWQyaV9BU04xX1VURjhTVFJJTkc7Ci0rCQlpMmRfRElSRUNUT1JZU1RSSU5HOwotKwkJZDJpX0RJUkVDVE9SWVNUUklORzsKLSsJCWkyZF9ESVNQTEFZVEVYVDsKLSsJCWQyaV9ESVNQTEFZVEVYVDsKLSsJCWQyaV9BU04xX1NFVF9PRl9YNTA5OwotKwkJaTJkX0FTTjFfU0VUX09GX1g1MDk7Ci0rCQlpMmRfUEJLREYyUEFSQU07Ci0rCQlQQktERjJQQVJBTV9uZXc7Ci0rCQlkMmlfUEJLREYyUEFSQU07Ci0rCQlQQktERjJQQVJBTV9mcmVlOwotKwkJaTJkX1BCRTJQQVJBTTsKLSsJCVBCRTJQQVJBTV9uZXc7Ci0rCQlkMmlfUEJFMlBBUkFNOwotKwkJUEJFMlBBUkFNX2ZyZWU7Ci0rCQlkMmlfQVNOMV9TRVRfT0ZfR0VORVJBTF9OQU1FOwotKwkJaTJkX0FTTjFfU0VUX09GX0dFTkVSQUxfTkFNRTsKLSsJCWQyaV9BU04xX1NFVF9PRl9TWE5FVElEOwotKwkJaTJkX0FTTjFfU0VUX09GX1NYTkVUSUQ7Ci0rCQlkMmlfQVNOMV9TRVRfT0ZfUE9MSUNZUVVBTElORk87Ci0rCQlpMmRfQVNOMV9TRVRfT0ZfUE9MSUNZUVVBTElORk87Ci0rCQlkMmlfQVNOMV9TRVRfT0ZfUE9MSUNZSU5GTzsKLSsJCWkyZF9BU04xX1NFVF9PRl9QT0xJQ1lJTkZPOwotKwkJU1hORVRfYWRkX2lkX2FzYzsKLSsJCVNYTkVUX2FkZF9pZF91bG9uZzsKLSsJCVNYTkVUX2FkZF9pZF9JTlRFR0VSOwotKwkJU1hORVRfZ2V0X2lkX2FzYzsKLSsJCVNYTkVUX2dldF9pZF91bG9uZzsKLSsJCVNYTkVUX2dldF9pZF9JTlRFR0VSOwotKwkJWDUwOVYzX3NldF9jb25mX2xoYXNoOwotKwkJaTJkX0NFUlRJRklDQVRFUE9MSUNJRVM7Ci0rCQlDRVJUSUZJQ0FURVBPTElDSUVTX25ldzsKLSsJCUNFUlRJRklDQVRFUE9MSUNJRVNfZnJlZTsKLSsJCWQyaV9DRVJUSUZJQ0FURVBPTElDSUVTOwotKwkJaTJkX1BPTElDWUlORk87Ci0rCQlQT0xJQ1lJTkZPX25ldzsKLSsJCWQyaV9QT0xJQ1lJTkZPOwotKwkJUE9MSUNZSU5GT19mcmVlOwotKwkJaTJkX1BPTElDWVFVQUxJTkZPOwotKwkJUE9MSUNZUVVBTElORk9fbmV3OwotKwkJZDJpX1BPTElDWVFVQUxJTkZPOwotKwkJUE9MSUNZUVVBTElORk9fZnJlZTsKLSsJCWkyZF9VU0VSTk9USUNFOwotKwkJVVNFUk5PVElDRV9uZXc7Ci0rCQlkMmlfVVNFUk5PVElDRTsKLSsJCVVTRVJOT1RJQ0VfZnJlZTsKLSsJCWkyZF9OT1RJQ0VSRUY7Ci0rCQlOT1RJQ0VSRUZfbmV3OwotKwkJZDJpX05PVElDRVJFRjsKLSsJCU5PVElDRVJFRl9mcmVlOwotKwkJWDUwOVYzX2dldF9zdHJpbmc7Ci0rCQlYNTA5VjNfZ2V0X3NlY3Rpb247Ci0rCQlYNTA5VjNfc3RyaW5nX2ZyZWU7Ci0rCQlYNTA5VjNfc2VjdGlvbl9mcmVlOwotKwkJWDUwOVYzX3NldF9jdHg7Ci0rCQlzMmlfQVNOMV9JTlRFR0VSOwotKwkJQ1JZUFRPX3NldF9sb2NrZWRfbWVtX2Z1bmN0aW9uczsKLSsJCUNSWVBUT19nZXRfbG9ja2VkX21lbV9mdW5jdGlvbnM7Ci0rCQlDUllQVE9fbWFsbG9jX2xvY2tlZDsKLSsJCUNSWVBUT19mcmVlX2xvY2tlZDsKLSsJCUJOX21vZF9leHAyX21vbnQ7Ci0rCQlFUlJfZ2V0X2Vycm9yX2xpbmVfZGF0YTsKLSsJCUVSUl9wZWVrX2Vycm9yX2xpbmVfZGF0YTsKLSsJCVBLQ1MxMl9QQkVfa2V5aXZnZW47Ci0rCQlYNTA5X0FMR09SX2R1cDsKLSsJCWQyaV9BU04xX1NFVF9PRl9ESVNUX1BPSU5UOwotKwkJaTJkX0FTTjFfU0VUX09GX0RJU1RfUE9JTlQ7Ci0rCQlpMmRfQ1JMX0RJU1RfUE9JTlRTOwotKwkJQ1JMX0RJU1RfUE9JTlRTX25ldzsKLSsJCUNSTF9ESVNUX1BPSU5UU19mcmVlOwotKwkJZDJpX0NSTF9ESVNUX1BPSU5UUzsKLSsJCWkyZF9ESVNUX1BPSU5UOwotKwkJRElTVF9QT0lOVF9uZXc7Ci0rCQlkMmlfRElTVF9QT0lOVDsKLSsJCURJU1RfUE9JTlRfZnJlZTsKLSsJCWkyZF9ESVNUX1BPSU5UX05BTUU7Ci0rCQlESVNUX1BPSU5UX05BTUVfbmV3OwotKwkJRElTVF9QT0lOVF9OQU1FX2ZyZWU7Ci0rCQlkMmlfRElTVF9QT0lOVF9OQU1FOwotKwkJWDUwOVYzX2FkZF92YWx1ZV91Y2hhcjsKLSsJCWQyaV9BU04xX1NFVF9PRl9YNTA5X0FUVFJJQlVURTsKLSsJCWkyZF9BU04xX1NFVF9PRl9BU04xX1RZUEU7Ci0rCQlkMmlfQVNOMV9TRVRfT0ZfWDUwOV9FWFRFTlNJT047Ci0rCQlkMmlfQVNOMV9TRVRfT0ZfWDUwOV9OQU1FX0VOVFJZOwotKwkJZDJpX0FTTjFfU0VUX09GX0FTTjFfVFlQRTsKLSsJCWkyZF9BU04xX1NFVF9PRl9YNTA5X0FUVFJJQlVURTsKLSsJCWkyZF9BU04xX1NFVF9PRl9YNTA5X0VYVEVOU0lPTjsKLSsJCWkyZF9BU04xX1NFVF9PRl9YNTA5X05BTUVfRU5UUlk7Ci0rCQlYNTA5VjNfRVhUX2kyZDsKLSsJCVg1MDlWM19FWFRfdmFsX3BybjsKLSsJCVg1MDlWM19FWFRfYWRkX2xpc3Q7Ci0rCQlFVlBfQ0lQSEVSX3R5cGU7Ci0rCQlFVlBfUEJFX0NpcGhlckluaXQ7Ci0rCQlYNTA5VjNfYWRkX3ZhbHVlX2Jvb2xfbmY7Ci0rCQlkMmlfQVNOMV9VSU5URUdFUjsKLSsJCXNrX3ZhbHVlOwotKwkJc2tfbnVtOwotKwkJc2tfc2V0OwotKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfUkVWT0tFRDsKLSsJCXNrX3NvcnQ7Ci0rCQlkMmlfQVNOMV9TRVRfT0ZfWDUwOV9SRVZPS0VEOwotKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfQUxHT1I7Ci0rCQlpMmRfQVNOMV9TRVRfT0ZfWDUwOV9DUkw7Ci0rCQlkMmlfQVNOMV9TRVRfT0ZfWDUwOV9BTEdPUjsKLSsJCWQyaV9BU04xX1NFVF9PRl9YNTA5X0NSTDsKLSsJCWkyZF9BU04xX1NFVF9PRl9QS0NTN19TSUdORVJfSU5GTzsKLSsJCWkyZF9BU04xX1NFVF9PRl9QS0NTN19SRUNJUF9JTkZPOwotKwkJZDJpX0FTTjFfU0VUX09GX1BLQ1M3X1NJR05FUl9JTkZPOwotKwkJZDJpX0FTTjFfU0VUX09GX1BLQ1M3X1JFQ0lQX0lORk87Ci0rCQlQS0NTNV9QQkVfYWRkOwotKwkJUEVNX3dyaXRlX2Jpb19QS0NTODsKLSsJCWkyZF9QS0NTOF9mcDsKLSsJCVBFTV9yZWFkX2Jpb19QS0NTOF9QUklWX0tFWV9JTkZPOwotKwkJUEVNX3JlYWRfYmlvX1A4X1BSSVZfS0VZX0lORk87Ci0rCQlkMmlfUEtDUzhfYmlvOwotKwkJZDJpX1BLQ1M4X1BSSVZfS0VZX0lORk9fZnA7Ci0rCQlQRU1fd3JpdGVfYmlvX1BLQ1M4X1BSSVZfS0VZX0lORk87Ci0rCQlQRU1fd3JpdGVfYmlvX1A4X1BSSVZfS0VZX0lORk87Ci0rCQlQRU1fcmVhZF9QS0NTODsKLSsJCWQyaV9QS0NTOF9QUklWX0tFWV9JTkZPX2JpbzsKLSsJCWQyaV9QS0NTOF9mcDsKLSsJCVBFTV93cml0ZV9QS0NTODsKLSsJCVBFTV9yZWFkX1BLQ1M4X1BSSVZfS0VZX0lORk87Ci0rCQlQRU1fcmVhZF9QOF9QUklWX0tFWV9JTkZPOwotKwkJUEVNX3JlYWRfYmlvX1BLQ1M4OwotKwkJUEVNX3dyaXRlX1BLQ1M4X1BSSVZfS0VZX0lORk87Ci0rCQlQRU1fd3JpdGVfUDhfUFJJVl9LRVlfSU5GTzsKLSsJCVBLQ1M1X1BCRV9rZXlpdmdlbjsKLSsJCWkyZF9QS0NTOF9iaW87Ci0rCQlpMmRfUEtDUzhfUFJJVl9LRVlfSU5GT19mcDsKLSsJCWkyZF9QS0NTOF9QUklWX0tFWV9JTkZPX2JpbzsKLSsJCUJJT19zX2JpbzsKLSsJCVBLQ1M1X3BiZTJfc2V0OwotKwkJUEtDUzVfUEJLREYyX0hNQUNfU0hBMTsKLSsJCVBLQ1M1X3YyX1BCRV9rZXlpdmdlbjsKLSsJCVBFTV93cml0ZV9iaW9fUEtDUzhQcml2YXRlS2V5OwotKwkJUEVNX3dyaXRlX1BLQ1M4UHJpdmF0ZUtleTsKLSsJCUJJT19jdHJsX2dldF9yZWFkX3JlcXVlc3Q7Ci0rCQlCSU9fY3RybF9wZW5kaW5nOwotKwkJQklPX2N0cmxfd3BlbmRpbmc7Ci0rCQlCSU9fbmV3X2Jpb19wYWlyOwotKwkJQklPX2N0cmxfZ2V0X3dyaXRlX2d1YXJhbnRlZTsKLSsJCUNSWVBUT19udW1fbG9ja3M7Ci0rCQlDT05GX2xvYWRfYmlvOwotKwkJQ09ORl9sb2FkX2ZwOwotKwkJaTJkX0FTTjFfU0VUX09GX0FTTjFfT0JKRUNUOwotKwkJZDJpX0FTTjFfU0VUX09GX0FTTjFfT0JKRUNUOwotKwkJUEtDUzdfc2lnbmF0dXJlVmVyaWZ5OwotKwkJUlNBX3NldF9tZXRob2Q7Ci0rCQlSU0FfZ2V0X21ldGhvZDsKLSsJCVJTQV9nZXRfZGVmYXVsdF9tZXRob2Q7Ci0rCQlSU0FfY2hlY2tfa2V5OwotKwkJT0JKX29iajJ0eHQ7Ci0rCQlEU0FfZHVwX0RIOwotKwkJWDUwOV9SRVFfZ2V0X2V4dGVuc2lvbnM7Ci0rCQlYNTA5X1JFUV9zZXRfZXh0ZW5zaW9uX25pZHM7Ci0rCQlCSU9fbndyaXRlOwotKwkJWDUwOV9SRVFfZXh0ZW5zaW9uX25pZDsKLSsJCUJJT19ucmVhZDsKLSsJCVg1MDlfUkVRX2dldF9leHRlbnNpb25fbmlkczsKLSsJCUJJT19ud3JpdGUwOwotKwkJWDUwOV9SRVFfYWRkX2V4dGVuc2lvbnNfbmlkOwotKwkJQklPX25yZWFkMDsKLSsJCVg1MDlfUkVRX2FkZF9leHRlbnNpb25zOwotKwkJQklPX25ld19tZW1fYnVmOwotKwkJREhfc2V0X2V4X2RhdGE7Ci0rCQlESF9zZXRfbWV0aG9kOwotKwkJRFNBX09wZW5TU0w7Ci0rCQlESF9nZXRfZXhfZGF0YTsKLSsJCURIX2dldF9leF9uZXdfaW5kZXg7Ci0rCQlEU0FfbmV3X21ldGhvZDsKLSsJCURIX25ld19tZXRob2Q7Ci0rCQlESF9PcGVuU1NMOwotKwkJRFNBX2dldF9leF9uZXdfaW5kZXg7Ci0rCQlESF9nZXRfZGVmYXVsdF9tZXRob2Q7Ci0rCQlEU0Ffc2V0X2V4X2RhdGE7Ci0rCQlESF9zZXRfZGVmYXVsdF9tZXRob2Q7Ci0rCQlEU0FfZ2V0X2V4X2RhdGE7Ci0rCQlYNTA5VjNfRVhUX1JFUV9hZGRfY29uZjsKLSsJCU5FVFNDQVBFX1NQS0lfcHJpbnQ7Ci0rCQlORVRTQ0FQRV9TUEtJX3NldF9wdWJrZXk7Ci0rCQlORVRTQ0FQRV9TUEtJX2I2NF9lbmNvZGU7Ci0rCQlORVRTQ0FQRV9TUEtJX2dldF9wdWJrZXk7Ci0rCQlORVRTQ0FQRV9TUEtJX2I2NF9kZWNvZGU7Ci0rCQlVVEY4X3B1dGM7Ci0rCQlVVEY4X2dldGM7Ci0rCQlSU0FfbnVsbF9tZXRob2Q7Ci0rCQlBU04xX3RhZzJzdHI7Ci0rCQlCSU9fY3RybF9yZXNldF9yZWFkX3JlcXVlc3Q7Ci0rCQlESVNQTEFZVEVYVF9uZXc7Ci0rCQlBU04xX0dFTkVSQUxJWkVEVElNRV9mcmVlOwotKwkJWDUwOV9SRVZPS0VEX2dldF9leHRfZDJpOwotKwkJWDUwOV9zZXRfZXhfZGF0YTsKLSsJCVg1MDlfcmVqZWN0X3NldF9iaXRfYXNjOwotKwkJWDUwOV9OQU1FX2FkZF9lbnRyeV9ieV90eHQ7Ci0rCQlYNTA5X05BTUVfYWRkX2VudHJ5X2J5X05JRDsKLSsJCVg1MDlfUFVSUE9TRV9nZXQwOwotKwkJUEVNX3JlYWRfWDUwOV9BVVg7Ci0rCQlkMmlfQVVUSE9SSVRZX0lORk9fQUNDRVNTOwotKwkJUEVNX3dyaXRlX1BVQktFWTsKLSsJCUFDQ0VTU19ERVNDUklQVElPTl9uZXc7Ci0rCQlYNTA5X0NFUlRfQVVYX2ZyZWU7Ci0rCQlkMmlfQUNDRVNTX0RFU0NSSVBUSU9OOwotKwkJWDUwOV90cnVzdF9jbGVhcjsKLSsJCVg1MDlfVFJVU1RfYWRkOwotKwkJQVNOMV9WSVNJQkxFU1RSSU5HX25ldzsKLSsJCVg1MDlfYWxpYXNfc2V0MTsKLSsJCUFTTjFfUFJJTlRBQkxFU1RSSU5HX2ZyZWU7Ci0rCQlFVlBfUEtFWV9nZXQxX0RTQTsKLSsJCUFTTjFfQk1QU1RSSU5HX25ldzsKLSsJCUFTTjFfbWJzdHJpbmdfY29weTsKLSsJCUFTTjFfVVRGOFNUUklOR19uZXc7Ci0rCQlEU0FfZ2V0X2RlZmF1bHRfbWV0aG9kOwotKwkJaTJkX0FTTjFfU0VUX09GX0FDQ0VTU19ERVNDUklQVElPTjsKLSsJCUFTTjFfVDYxU1RSSU5HX2ZyZWU7Ci0rCQlEU0Ffc2V0X21ldGhvZDsKLSsJCVg1MDlfZ2V0X2V4X2RhdGE7Ci0rCQlBU04xX1NUUklOR190eXBlOwotKwkJWDUwOV9QVVJQT1NFX2dldF9ieV9zbmFtZTsKLSsJCUFTTjFfVElNRV9mcmVlOwotKwkJQVNOMV9PQ1RFVF9TVFJJTkdfY21wOwotKwkJQVNOMV9CSVRfU1RSSU5HX25ldzsKLSsJCVg1MDlfZ2V0X2V4dF9kMmk7Ci0rCQlQRU1fcmVhZF9iaW9fWDUwOV9BVVg7Ci0rCQlBU04xX1NUUklOR19zZXRfZGVmYXVsdF9tYXNrX2FzYzsKLSsJCUFTTjFfU1RSSU5HX3NldF9kZWZfbWFza19hc2M7Ci0rCQlQRU1fd3JpdGVfYmlvX1JTQV9QVUJLRVk7Ci0rCQlBU04xX0lOVEVHRVJfY21wOwotKwkJZDJpX1JTQV9QVUJLRVlfZnA7Ci0rCQlYNTA5X3RydXN0X3NldF9iaXRfYXNjOwotKwkJUEVNX3dyaXRlX2Jpb19EU0FfUFVCS0VZOwotKwkJWDUwOV9TVE9SRV9DVFhfZnJlZTsKLSsJCUVWUF9QS0VZX3NldDFfRFNBOwotKwkJaTJkX0RTQV9QVUJLRVlfZnA7Ci0rCQlYNTA5X2xvYWRfY2VydF9jcmxfZmlsZTsKLSsJCUFTTjFfVElNRV9uZXc7Ci0rCQlpMmRfUlNBX1BVQktFWTsKLSsJCVg1MDlfU1RPUkVfQ1RYX3B1cnBvc2VfaW5oZXJpdDsKLSsJCVBFTV9yZWFkX1JTQV9QVUJLRVk7Ci0rCQlkMmlfWDUwOV9BVVg7Ci0rCQlpMmRfRFNBX1BVQktFWTsKLSsJCVg1MDlfQ0VSVF9BVVhfcHJpbnQ7Ci0rCQlQRU1fcmVhZF9EU0FfUFVCS0VZOwotKwkJaTJkX1JTQV9QVUJLRVlfYmlvOwotKwkJQVNOMV9CSVRfU1RSSU5HX251bV9hc2M7Ci0rCQlpMmRfUFVCS0VZOwotKwkJQVNOMV9VVENUSU1FX2ZyZWU7Ci0rCQlEU0Ffc2V0X2RlZmF1bHRfbWV0aG9kOwotKwkJWDUwOV9QVVJQT1NFX2dldF9ieV9pZDsKLSsJCUFDQ0VTU19ERVNDUklQVElPTl9mcmVlOwotKwkJUEVNX3JlYWRfYmlvX1BVQktFWTsKLSsJCUFTTjFfU1RSSU5HX3NldF9ieV9OSUQ7Ci0rCQlYNTA5X1BVUlBPU0VfZ2V0X2lkOwotKwkJRElTUExBWVRFWFRfZnJlZTsKLSsJCU9USEVSTkFNRV9uZXc7Ci0rCQlYNTA5X0NFUlRfQVVYX25ldzsKLSsJCVg1MDlfVFJVU1RfY2xlYW51cDsKLSsJCVg1MDlfTkFNRV9hZGRfZW50cnlfYnlfT0JKOwotKwkJWDUwOV9DUkxfZ2V0X2V4dF9kMmk7Ci0rCQlYNTA5X1BVUlBPU0VfZ2V0MF9uYW1lOwotKwkJUEVNX3JlYWRfUFVCS0VZOwotKwkJaTJkX0RTQV9QVUJLRVlfYmlvOwotKwkJaTJkX09USEVSTkFNRTsKLSsJCUFTTjFfT0NURVRfU1RSSU5HX2ZyZWU7Ci0rCQlBU04xX0JJVF9TVFJJTkdfc2V0X2FzYzsKLSsJCVg1MDlfZ2V0X2V4X25ld19pbmRleDsKLSsJCUFTTjFfU1RSSU5HX1RBQkxFX2NsZWFudXA7Ci0rCQlYNTA5X1RSVVNUX2dldF9ieV9pZDsKLSsJCVg1MDlfUFVSUE9TRV9nZXRfdHJ1c3Q7Ci0rCQlBU04xX1NUUklOR19sZW5ndGg7Ci0rCQlkMmlfQVNOMV9TRVRfT0ZfQUNDRVNTX0RFU0NSSVBUSU9OOwotKwkJQVNOMV9QUklOVEFCTEVTVFJJTkdfbmV3OwotKwkJWDUwOVYzX2dldF9kMmk7Ci0rCQlBU04xX0VOVU1FUkFURURfZnJlZTsKLSsJCWkyZF9YNTA5X0NFUlRfQVVYOwotKwkJWDUwOV9TVE9SRV9DVFhfc2V0X3RydXN0OwotKwkJQVNOMV9TVFJJTkdfc2V0X2RlZmF1bHRfbWFzazsKLSsJCVg1MDlfU1RPUkVfQ1RYX25ldzsKLSsJCUVWUF9QS0VZX2dldDFfUlNBOwotKwkJRElSRUNUT1JZU1RSSU5HX2ZyZWU7Ci0rCQlQRU1fd3JpdGVfWDUwOV9BVVg7Ci0rCQlBU04xX09DVEVUX1NUUklOR19zZXQ7Ci0rCQlkMmlfRFNBX1BVQktFWV9mcDsKLSsJCWQyaV9SU0FfUFVCS0VZOwotKwkJWDUwOV9UUlVTVF9nZXQwX25hbWU7Ci0rCQlYNTA5X1RSVVNUX2dldDA7Ci0rCQlBVVRIT1JJVFlfSU5GT19BQ0NFU1NfZnJlZTsKLSsJCUFTTjFfSUE1U1RSSU5HX25ldzsKLSsJCWQyaV9EU0FfUFVCS0VZOwotKwkJWDUwOV9jaGVja19wdXJwb3NlOwotKwkJQVNOMV9FTlVNRVJBVEVEX25ldzsKLSsJCWQyaV9SU0FfUFVCS0VZX2JpbzsKLSsJCWQyaV9QVUJLRVk7Ci0rCQlYNTA5X1RSVVNUX2dldF90cnVzdDsKLSsJCVg1MDlfVFJVU1RfZ2V0X2ZsYWdzOwotKwkJQVNOMV9CTVBTVFJJTkdfZnJlZTsKLSsJCUFTTjFfVDYxU1RSSU5HX25ldzsKLSsJCUFTTjFfVVRDVElNRV9uZXc7Ci0rCQlpMmRfQVVUSE9SSVRZX0lORk9fQUNDRVNTOwotKwkJRVZQX1BLRVlfc2V0MV9SU0E7Ci0rCQlYNTA5X1NUT1JFX0NUWF9zZXRfcHVycG9zZTsKLSsJCUFTTjFfSUE1U1RSSU5HX2ZyZWU7Ci0rCQlQRU1fd3JpdGVfYmlvX1g1MDlfQVVYOwotKwkJWDUwOV9QVVJQT1NFX2dldF9jb3VudDsKLSsJCUNSWVBUT19hZGRfaW5mbzsKLSsJCVg1MDlfTkFNRV9FTlRSWV9jcmVhdGVfYnlfdHh0OwotKwkJQVNOMV9TVFJJTkdfZ2V0X2RlZmF1bHRfbWFzazsKLSsJCVg1MDlfYWxpYXNfZ2V0MDsKLSsJCUFTTjFfU1RSSU5HX2RhdGE7Ci0rCQlpMmRfQUNDRVNTX0RFU0NSSVBUSU9OOwotKwkJWDUwOV90cnVzdF9zZXRfYml0OwotKwkJQVNOMV9CSVRfU1RSSU5HX2ZyZWU7Ci0rCQlQRU1fcmVhZF9iaW9fUlNBX1BVQktFWTsKLSsJCVg1MDlfYWRkMV9yZWplY3Rfb2JqZWN0OwotKwkJWDUwOV9jaGVja190cnVzdDsKLSsJCVBFTV9yZWFkX2Jpb19EU0FfUFVCS0VZOwotKwkJWDUwOV9QVVJQT1NFX2FkZDsKLSsJCUFTTjFfU1RSSU5HX1RBQkxFX2dldDsKLSsJCUFTTjFfVVRGOFNUUklOR19mcmVlOwotKwkJZDJpX0RTQV9QVUJLRVlfYmlvOwotKwkJUEVNX3dyaXRlX1JTQV9QVUJLRVk7Ci0rCQlkMmlfT1RIRVJOQU1FOwotKwkJWDUwOV9yZWplY3Rfc2V0X2JpdDsKLSsJCVBFTV93cml0ZV9EU0FfUFVCS0VZOwotKwkJWDUwOV9QVVJQT1NFX2dldDBfc25hbWU7Ci0rCQlFVlBfUEtFWV9zZXQxX0RIOwotKwkJQVNOMV9PQ1RFVF9TVFJJTkdfZHVwOwotKwkJQVNOMV9CSVRfU1RSSU5HX3NldDsKLSsJCVg1MDlfVFJVU1RfZ2V0X2NvdW50OwotKwkJQVNOMV9JTlRFR0VSX2ZyZWU7Ci0rCQlPVEhFUk5BTUVfZnJlZTsKLSsJCWkyZF9SU0FfUFVCS0VZX2ZwOwotKwkJQVNOMV9JTlRFR0VSX2R1cDsKLSsJCWQyaV9YNTA5X0NFUlRfQVVYOwotKwkJUEVNX3dyaXRlX2Jpb19QVUJLRVk7Ci0rCQlBU04xX1ZJU0lCTEVTVFJJTkdfZnJlZTsKLSsJCVg1MDlfUFVSUE9TRV9jbGVhbnVwOwotKwkJQVNOMV9tYnN0cmluZ19uY29weTsKLSsJCUFTTjFfR0VORVJBTElaRURUSU1FX25ldzsKLSsJCUVWUF9QS0VZX2dldDFfREg7Ci0rCQlBU04xX09DVEVUX1NUUklOR19uZXc7Ci0rCQlBU04xX0lOVEVHRVJfbmV3OwotKwkJaTJkX1g1MDlfQVVYOwotKwkJQVNOMV9CSVRfU1RSSU5HX25hbWVfcHJpbnQ7Ci0rCQlYNTA5X2NtcDsKLSsJCUFTTjFfU1RSSU5HX2xlbmd0aF9zZXQ7Ci0rCQlESVJFQ1RPUllTVFJJTkdfbmV3OwotKwkJWDUwOV9hZGQxX3RydXN0X29iamVjdDsKLSsJCVBLQ1MxMl9uZXdwYXNzOwotKwkJU01JTUVfd3JpdGVfUEtDUzc7Ci0rCQlTTUlNRV9yZWFkX1BLQ1M3OwotKwkJREVTX3NldF9rZXlfY2hlY2tlZDsKLSsJCVBLQ1M3X3ZlcmlmeTsKLSsJCVBLQ1M3X2VuY3J5cHQ7Ci0rCQlERVNfc2V0X2tleV91bmNoZWNrZWQ7Ci0rCQlTTUlNRV9jcmxmX2NvcHk7Ci0rCQlpMmRfQVNOMV9QUklOVEFCTEVTVFJJTkc7Ci0rCQlQS0NTN19nZXQwX3NpZ25lcnM7Ci0rCQlQS0NTN19kZWNyeXB0OwotKwkJU01JTUVfdGV4dDsKLSsJCVBLQ1M3X3NpbXBsZV9zbWltZWNhcDsKLSsJCVBLQ1M3X2dldF9zbWltZWNhcDsKLSsJCVBLQ1M3X3NpZ247Ci0rCQlQS0NTN19hZGRfYXR0cmliX3NtaW1lY2FwOwotKwkJQ1JZUFRPX2RiZ19zZXRfb3B0aW9uczsKLSsJCUNSWVBUT19yZW1vdmVfYWxsX2luZm87Ci0rCQlDUllQVE9fZ2V0X21lbV9kZWJ1Z19mdW5jdGlvbnM7Ci0rCQlDUllQVE9faXNfbWVtX2NoZWNrX29uOwotKwkJQ1JZUFRPX3NldF9tZW1fZGVidWdfZnVuY3Rpb25zOwotKwkJQ1JZUFRPX3BvcF9pbmZvOwotKwkJQ1JZUFRPX3B1c2hfaW5mb187Ci0rCQlDUllQVE9fc2V0X21lbV9kZWJ1Z19vcHRpb25zOwotKwkJUEVNX3dyaXRlX1BLQ1M4UHJpdmF0ZUtleV9uaWQ7Ci0rCQlQRU1fd3JpdGVfYmlvX1BLQ1M4UHJpdmF0ZUtleV9uaWQ7Ci0rCQlQRU1fd3JpdGVfYmlvX1BLQ1M4UHJpdktleV9uaWQ7Ci0rCQlkMmlfUEtDUzhQcml2YXRlS2V5X2JpbzsKLSsJCUFTTjFfTlVMTF9mcmVlOwotKwkJZDJpX0FTTjFfTlVMTDsKLSsJCUFTTjFfTlVMTF9uZXc7Ci0rCQlpMmRfUEtDUzhQcml2YXRlS2V5X2JpbzsKLSsJCWkyZF9QS0NTOFByaXZhdGVLZXlfZnA7Ci0rCQlpMmRfQVNOMV9OVUxMOwotKwkJaTJkX1BLQ1M4UHJpdmF0ZUtleV9uaWRfZnA7Ci0rCQlkMmlfUEtDUzhQcml2YXRlS2V5X2ZwOwotKwkJaTJkX1BLQ1M4UHJpdmF0ZUtleV9uaWRfYmlvOwotKwkJaTJkX1BLQ1M4UHJpdmF0ZUtleUluZm9fZnA7Ci0rCQlpMmRfUEtDUzhQcml2YXRlS2V5SW5mb19iaW87Ci0rCQlQRU1fY2I7Ci0rCQlpMmRfUHJpdmF0ZUtleV9mcDsKLSsJCWQyaV9Qcml2YXRlS2V5X2JpbzsKLSsJCWQyaV9Qcml2YXRlS2V5X2ZwOwotKwkJaTJkX1ByaXZhdGVLZXlfYmlvOwotKwkJWDUwOV9yZWplY3RfY2xlYXI7Ci0rCQlYNTA5X1RSVVNUX3NldF9kZWZhdWx0OwotKwkJZDJpX0F1dG9Qcml2YXRlS2V5OwotKwkJWDUwOV9BVFRSSUJVVEVfZ2V0MF90eXBlOwotKwkJWDUwOV9BVFRSSUJVVEVfc2V0MV9kYXRhOwotKwkJWDUwOWF0X2dldF9hdHRyOwotKwkJWDUwOWF0X2dldF9hdHRyX2NvdW50OwotKwkJWDUwOV9BVFRSSUJVVEVfY3JlYXRlX2J5X05JRDsKLSsJCVg1MDlfQVRUUklCVVRFX3NldDFfb2JqZWN0OwotKwkJWDUwOV9BVFRSSUJVVEVfY291bnQ7Ci0rCQlYNTA5X0FUVFJJQlVURV9jcmVhdGVfYnlfT0JKOwotKwkJWDUwOV9BVFRSSUJVVEVfZ2V0MF9vYmplY3Q7Ci0rCQlYNTA5YXRfZ2V0X2F0dHJfYnlfTklEOwotKwkJWDUwOWF0X2FkZDFfYXR0cjsKLSsJCVg1MDlfQVRUUklCVVRFX2dldDBfZGF0YTsKLSsJCVg1MDlhdF9kZWxldGVfYXR0cjsKLSsJCVg1MDlhdF9nZXRfYXR0cl9ieV9PQko7Ci0rCQlSQU5EX2FkZDsKLSsJCUJJT19udW1iZXJfd3JpdHRlbjsKLSsJCUJJT19udW1iZXJfcmVhZDsKLSsJCVg1MDlfU1RPUkVfQ1RYX2dldDFfY2hhaW47Ci0rCQlFUlJfbG9hZF9SQU5EX3N0cmluZ3M7Ci0rCQlSQU5EX3BzZXVkb19ieXRlczsKLSsJCVg1MDlfUkVRX2dldF9hdHRyX2J5X05JRDsKLSsJCVg1MDlfUkVRX2dldF9hdHRyOwotKwkJWDUwOV9SRVFfYWRkMV9hdHRyX2J5X05JRDsKLSsJCVg1MDlfUkVRX2dldF9hdHRyX2J5X09CSjsKLSsJCVg1MDlhdF9hZGQxX2F0dHJfYnlfTklEOwotKwkJWDUwOV9SRVFfYWRkMV9hdHRyX2J5X09CSjsKLSsJCVg1MDlfUkVRX2dldF9hdHRyX2NvdW50OwotKwkJWDUwOV9SRVFfYWRkMV9hdHRyOwotKwkJWDUwOV9SRVFfZGVsZXRlX2F0dHI7Ci0rCQlYNTA5YXRfYWRkMV9hdHRyX2J5X09CSjsKLSsJCVg1MDlfUkVRX2FkZDFfYXR0cl9ieV90eHQ7Ci0rCQlYNTA5X0FUVFJJQlVURV9jcmVhdGVfYnlfdHh0OwotKwkJWDUwOWF0X2FkZDFfYXR0cl9ieV90eHQ7Ci0rCQlCTl9wc2V1ZG9fcmFuZDsKLSsJCUJOX2lzX3ByaW1lX2Zhc3R0ZXN0OwotKwkJQk5fQ1RYX2VuZDsKLSsJCUJOX0NUWF9zdGFydDsKLSsJCUJOX0NUWF9nZXQ7Ci0rCQlFVlBfUEtFWTJQS0NTOF9icm9rZW47Ci0rCQlBU04xX1NUUklOR19UQUJMRV9hZGQ7Ci0rCQlDUllQVE9fZGJnX2dldF9vcHRpb25zOwotKwkJQVVUSE9SSVRZX0lORk9fQUNDRVNTX25ldzsKLSsJCUNSWVBUT19nZXRfbWVtX2RlYnVnX29wdGlvbnM7Ci0rCQlERVNfY3J5cHQ7Ci0rCQlQRU1fd3JpdGVfYmlvX1g1MDlfUkVRX05FVzsKLSsJCVBFTV93cml0ZV9YNTA5X1JFUV9ORVc7Ci0rCQlCSU9fY2FsbGJhY2tfY3RybDsKLSsJCVJBTkRfZWdkOwotKwkJUkFORF9zdGF0dXM7Ci0rCQlibl9kdW1wMTsKLSsJCURFU19jaGVja19rZXlfcGFyaXR5OwotKwkJbGhfbnVtX2l0ZW1zOwotKwkJUkFORF9ldmVudDsKLSsJCURTT19uZXc7Ci0rCQlEU09fbmV3X21ldGhvZDsKLSsJCURTT19mcmVlOwotKwkJRFNPX2ZsYWdzOwotKwkJRFNPX3VwOwotKwkJRFNPX3NldF9kZWZhdWx0X21ldGhvZDsKLSsJCURTT19nZXRfZGVmYXVsdF9tZXRob2Q7Ci0rCQlEU09fZ2V0X21ldGhvZDsKLSsJCURTT19zZXRfbWV0aG9kOwotKwkJRFNPX2xvYWQ7Ci0rCQlEU09fYmluZF92YXI7Ci0rCQlEU09fTUVUSE9EX251bGw7Ci0rCQlEU09fTUVUSE9EX29wZW5zc2w7Ci0rCQlEU09fTUVUSE9EX2RsZmNuOwotKwkJRFNPX01FVEhPRF93aW4zMjsKLSsJCUVSUl9sb2FkX0RTT19zdHJpbmdzOwotKwkJRFNPX01FVEhPRF9kbDsKLSsJCU5DT05GX2xvYWQ7Ci0rCQlOQ09ORl9sb2FkX2ZwOwotKwkJTkNPTkZfbmV3OwotKwkJTkNPTkZfZ2V0X3N0cmluZzsKLSsJCU5DT05GX2ZyZWU7Ci0rCQlOQ09ORl9nZXRfbnVtYmVyOwotKwkJQ09ORl9kdW1wX2ZwOwotKwkJTkNPTkZfbG9hZF9iaW87Ci0rCQlOQ09ORl9kdW1wX2ZwOwotKwkJTkNPTkZfZ2V0X3NlY3Rpb247Ci0rCQlOQ09ORl9kdW1wX2JpbzsKLSsJCUNPTkZfZHVtcF9iaW87Ci0rCQlOQ09ORl9mcmVlX2RhdGE7Ci0rCQlDT05GX3NldF9kZWZhdWx0X21ldGhvZDsKLSsJCUVSUl9lcnJvcl9zdHJpbmdfbjsKLSsJCUJJT19zbnByaW50ZjsKLSsJCURTT19jdHJsOwotKwkJaTJkX0FTTjFfU0VUX09GX0FTTjFfSU5URUdFUjsKLSsJCWkyZF9BU04xX1NFVF9PRl9QS0NTMTJfU0FGRUJBRzsKLSsJCWkyZF9BU04xX1NFVF9PRl9QS0NTNzsKLSsJCUJJT192ZnJlZTsKLSsJCWQyaV9BU04xX1NFVF9PRl9BU04xX0lOVEVHRVI7Ci0rCQlkMmlfQVNOMV9TRVRfT0ZfUEtDUzEyX1NBRkVCQUc7Ci0rCQlBU04xX1VUQ1RJTUVfZ2V0OwotKwkJWDUwOV9SRVFfZGlnZXN0OwotKwkJWDUwOV9DUkxfZGlnZXN0OwotKwkJZDJpX0FTTjFfU0VUX09GX1BLQ1M3OwotKwkJRVZQX0NJUEhFUl9DVFhfc2V0X2tleV9sZW5ndGg7Ci0rCQlFVlBfQ0lQSEVSX0NUWF9jdHJsOwotKwkJQk5fbW9kX2V4cF9tb250X3dvcmQ7Ci0rCQlSQU5EX2VnZF9ieXRlczsKLSsJCVg1MDlfUkVRX2dldDFfZW1haWw7Ci0rCQlYNTA5X2dldDFfZW1haWw7Ci0rCQlYNTA5X2VtYWlsX2ZyZWU7Ci0rCQlpMmRfUlNBX05FVDsKLSsJCWQyaV9SU0FfTkVUXzI7Ci0rCQlkMmlfUlNBX05FVDsKLSsJCURTT19iaW5kX2Z1bmM7Ci0rCQlDUllQVE9fZ2V0X25ld19keW5sb2NraWQ7Ci0rCQlza19uZXdfbnVsbDsKLSsJCUNSWVBUT19zZXRfZHlubG9ja19kZXN0cm95X2NhbGxiYWNrOwotKwkJQ1JZUFRPX3NldF9keW5sb2NrX2Rlc3Ryb3lfY2I7Ci0rCQlDUllQVE9fZGVzdHJveV9keW5sb2NraWQ7Ci0rCQlDUllQVE9fc2V0X2R5bmxvY2tfc2l6ZTsKLSsJCUNSWVBUT19zZXRfZHlubG9ja19jcmVhdGVfY2FsbGJhY2s7Ci0rCQlDUllQVE9fc2V0X2R5bmxvY2tfY3JlYXRlX2NiOwotKwkJQ1JZUFRPX3NldF9keW5sb2NrX2xvY2tfY2FsbGJhY2s7Ci0rCQlDUllQVE9fc2V0X2R5bmxvY2tfbG9ja19jYjsKLSsJCUNSWVBUT19nZXRfZHlubG9ja19sb2NrX2NhbGxiYWNrOwotKwkJQ1JZUFRPX2dldF9keW5sb2NrX2xvY2tfY2I7Ci0rCQlDUllQVE9fZ2V0X2R5bmxvY2tfZGVzdHJveV9jYWxsYmFjazsKLSsJCUNSWVBUT19nZXRfZHlubG9ja19kZXN0cm95X2NiOwotKwkJQ1JZUFRPX2dldF9keW5sb2NrX3ZhbHVlOwotKwkJQ1JZUFRPX2dldF9keW5sb2NrX2NyZWF0ZV9jYWxsYmFjazsKLSsJCUNSWVBUT19nZXRfZHlubG9ja19jcmVhdGVfY2I7Ci0rCQljMmlfQVNOMV9CSVRfU1RSSU5HOwotKwkJaTJjX0FTTjFfQklUX1NUUklORzsKLSsJCVJBTkRfcG9sbDsKLSsJCWMyaV9BU04xX0lOVEVHRVI7Ci0rCQlpMmNfQVNOMV9JTlRFR0VSOwotKwkJQklPX2R1bXBfaW5kZW50OwotKwkJQVNOMV9wYXJzZV9kdW1wOwotKwkJYzJpX0FTTjFfT0JKRUNUOwotKwkJWDUwOV9OQU1FX3ByaW50X2V4X2ZwOwotKwkJQVNOMV9TVFJJTkdfcHJpbnRfZXhfZnA7Ci0rCQlYNTA5X05BTUVfcHJpbnRfZXg7Ci0rCQlBU04xX1NUUklOR19wcmludF9leDsKLSsJCU1ENDsKLSsJCU1ENF9UcmFuc2Zvcm07Ci0rCQlNRDRfRmluYWw7Ci0rCQlNRDRfVXBkYXRlOwotKwkJTUQ0X0luaXQ7Ci0rCQlFVlBfbWQ0OwotKwkJaTJkX1BVQktFWV9iaW87Ci0rCQlpMmRfUFVCS0VZX2ZwOwotKwkJZDJpX1BVQktFWV9iaW87Ci0rCQlBU04xX1NUUklOR190b19VVEY4OwotKwkJQklPX3ZwcmludGY7Ci0rCQlCSU9fdnNucHJpbnRmOwotKwkJZDJpX1BVQktFWV9mcDsKLSsJCVg1MDlfY21wX3RpbWU7Ci0rCQlYNTA5X1NUT1JFX0NUWF9zZXRfdGltZTsKLSsJCVg1MDlfU1RPUkVfQ1RYX2dldDFfaXNzdWVyOwotKwkJWDUwOV9PQkpFQ1RfcmV0cmlldmVfbWF0Y2g7Ci0rCQlYNTA5X09CSkVDVF9pZHhfYnlfc3ViamVjdDsKLSsJCVg1MDlfU1RPUkVfQ1RYX3NldF9mbGFnczsKLSsJCVg1MDlfU1RPUkVfQ1RYX3RydXN0ZWRfc3RhY2s7Ci0rCQlYNTA5X3RpbWVfYWRqOwotKwkJWDUwOV9jaGVja19pc3N1ZWQ7Ci0rCQlBU04xX1VUQ1RJTUVfY21wX3RpbWVfdDsKLSsJCURFU19zZXRfd2Vha19rZXlfZmxhZzsKLSsJCURFU19jaGVja19rZXk7Ci0rCQlERVNfcndfbW9kZTsKLSsJCVJTQV9QS0NTMV9SU0FyZWY7Ci0rCQlYNTA5X2tleWlkX3NldDE7Ci0rCQlCSU9fbmV4dDsKLSsJCURTT19NRVRIT0Rfdm1zOwotKwkJQklPX2ZfbGluZWJ1ZmZlcjsKLSsJCUJOX2JudGVzdF9yYW5kOwotKwkJT1BFTlNTTF9pc3NldHVnaWQ7Ci0rCQlCTl9yYW5kX3JhbmdlOwotKwkJRVJSX2xvYWRfRU5HSU5FX3N0cmluZ3M7Ci0rCQlFTkdJTkVfc2V0X0RTQTsKLSsJCUVOR0lORV9nZXRfZmluaXNoX2Z1bmN0aW9uOwotKwkJRU5HSU5FX2dldF9kZWZhdWx0X1JTQTsKLSsJCUVOR0lORV9nZXRfQk5fbW9kX2V4cDsKLSsJCURTQV9nZXRfZGVmYXVsdF9vcGVuc3NsX21ldGhvZDsKLSsJCUVOR0lORV9zZXRfREg7Ci0rCQlFTkdJTkVfc2V0X2RlZl9CTl9tb2RfZXhwX2NydDsKLSsJCUVOR0lORV9zZXRfZGVmYXVsdF9CTl9tb2RfZXhwX2NydDsKLSsJCUVOR0lORV9pbml0OwotKwkJREhfZ2V0X2RlZmF1bHRfb3BlbnNzbF9tZXRob2Q7Ci0rCQlSU0Ffc2V0X2RlZmF1bHRfb3BlbnNzbF9tZXRob2Q7Ci0rCQlFTkdJTkVfZmluaXNoOwotKwkJRU5HSU5FX2xvYWRfcHVibGljX2tleTsKLSsJCUVOR0lORV9nZXRfREg7Ci0rCQlFTkdJTkVfY3RybDsKLSsJCUVOR0lORV9nZXRfaW5pdF9mdW5jdGlvbjsKLSsJCUVOR0lORV9zZXRfaW5pdF9mdW5jdGlvbjsKLSsJCUVOR0lORV9zZXRfZGVmYXVsdF9EU0E7Ci0rCQlFTkdJTkVfZ2V0X25hbWU7Ci0rCQlFTkdJTkVfZ2V0X2xhc3Q7Ci0rCQlFTkdJTkVfZ2V0X3ByZXY7Ci0rCQlFTkdJTkVfZ2V0X2RlZmF1bHRfREg7Ci0rCQlFTkdJTkVfZ2V0X1JTQTsKLSsJCUVOR0lORV9zZXRfZGVmYXVsdDsKLSsJCUVOR0lORV9nZXRfUkFORDsKLSsJCUVOR0lORV9nZXRfZmlyc3Q7Ci0rCQlFTkdJTkVfYnlfaWQ7Ci0rCQlFTkdJTkVfc2V0X2ZpbmlzaF9mdW5jdGlvbjsKLSsJCUVOR0lORV9nZXRfZGVmX0JOX21vZF9leHBfY3J0OwotKwkJRU5HSU5FX2dldF9kZWZhdWx0X0JOX21vZF9leHBfY3J0OwotKwkJUlNBX2dldF9kZWZhdWx0X29wZW5zc2xfbWV0aG9kOwotKwkJRU5HSU5FX3NldF9SU0E7Ci0rCQlFTkdJTkVfbG9hZF9wcml2YXRlX2tleTsKLSsJCUVOR0lORV9zZXRfZGVmYXVsdF9SQU5EOwotKwkJRU5HSU5FX3NldF9CTl9tb2RfZXhwOwotKwkJRU5HSU5FX3JlbW92ZTsKLSsJCUVOR0lORV9mcmVlOwotKwkJRU5HSU5FX2dldF9CTl9tb2RfZXhwX2NydDsKLSsJCUVOR0lORV9nZXRfbmV4dDsKLSsJCUVOR0lORV9zZXRfbmFtZTsKLSsJCUVOR0lORV9nZXRfZGVmYXVsdF9EU0E7Ci0rCQlFTkdJTkVfc2V0X2RlZmF1bHRfQk5fbW9kX2V4cDsKLSsJCUVOR0lORV9zZXRfZGVmYXVsdF9SU0E7Ci0rCQlFTkdJTkVfZ2V0X2RlZmF1bHRfUkFORDsKLSsJCUVOR0lORV9nZXRfZGVmYXVsdF9CTl9tb2RfZXhwOwotKwkJRU5HSU5FX3NldF9SQU5EOwotKwkJRU5HSU5FX3NldF9pZDsKLSsJCUVOR0lORV9zZXRfQk5fbW9kX2V4cF9jcnQ7Ci0rCQlFTkdJTkVfc2V0X2RlZmF1bHRfREg7Ci0rCQlFTkdJTkVfbmV3OwotKwkJRU5HSU5FX2dldF9pZDsKLSsJCURTQV9zZXRfZGVmYXVsdF9vcGVuc3NsX21ldGhvZDsKLSsJCUVOR0lORV9hZGQ7Ci0rCQlESF9zZXRfZGVmYXVsdF9vcGVuc3NsX21ldGhvZDsKLSsJCUVOR0lORV9nZXRfRFNBOwotKwkJRU5HSU5FX2dldF9jdHJsX2Z1bmN0aW9uOwotKwkJRU5HSU5FX3NldF9jdHJsX2Z1bmN0aW9uOwotKwkJQk5fcHNldWRvX3JhbmRfcmFuZ2U7Ci0rCQlYNTA5X1NUT1JFX0NUWF9zZXRfdmVyaWZ5X2NiOwotKwkJRVJSX2xvYWRfQ09NUF9zdHJpbmdzOwotKwkJUEtDUzEyX2l0ZW1fZGVjcnlwdF9kMmk7Ci0rCQlBU04xX1VURjhTVFJJTkdfaXQ7Ci0rCQlFTkdJTkVfdW5yZWdpc3Rlcl9jaXBoZXJzOwotKwkJRU5HSU5FX2dldF9jaXBoZXJzOwotKwkJZDJpX09DU1BfQkFTSUNSRVNQOwotKwkJS1JCNV9DSEVDS1NVTV9pdDsKLSsJCUVDX1BPSU5UX2FkZDsKLSsJCUFTTjFfaXRlbV9leF9pMmQ7Ci0rCQlPQ1NQX0NFUlRJRF9pdDsKLSsJCWQyaV9PQ1NQX1JFU1BCWVRFUzsKLSsJCVg1MDlWM19hZGQxX2kyZDsKLSsJCVBLQ1M3X0VOVkVMT1BFX2l0OwotKwkJVUlfYWRkX2lucHV0X2Jvb2xlYW47Ci0rCQlFTkdJTkVfdW5yZWdpc3Rlcl9SU0E7Ci0rCQlYNTA5VjNfRVhUX25jb25mOwotKwkJQVNOMV9HRU5FUkFMU1RSSU5HX2ZyZWU7Ci0rCQlkMmlfT0NTUF9DRVJUU1RBVFVTOwotKwkJWDUwOV9SRVZPS0VEX3NldF9zZXJpYWxOdW1iZXI7Ci0rCQlYNTA5X3ByaW50X2V4OwotKwkJT0NTUF9PTkVSRVFfZ2V0MV9leHRfZDJpOwotKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9SQU5EOwotKwkJRU5HSU5FX2xvYWRfZHluYW1pYzsKLSsJCVBCS0RGMlBBUkFNX2l0OwotKwkJRVhURU5ERURfS0VZX1VTQUdFX25ldzsKLSsJCUVDX0dST1VQX2NsZWFyX2ZyZWU7Ci0rCQlPQ1NQX3NlbmRyZXFfYmlvOwotKwkJQVNOMV9pdGVtX2RpZ2VzdDsKLSsJCU9DU1BfQkFTSUNSRVNQX2RlbGV0ZV9leHQ7Ci0rCQlPQ1NQX1NJR05BVFVSRV9pdDsKLSsJCVg1MDlfQ1JMX2l0OwotKwkJT0NTUF9CQVNJQ1JFU1BfYWRkX2V4dDsKLSsJCUtSQjVfRU5DS0VZX2l0OwotKwkJVUlfbWV0aG9kX3NldF9jbG9zZXI7Ci0rCQlYNTA5X1NUT1JFX3NldF9wdXJwb3NlOwotKwkJaTJkX0FTTjFfR0VORVJBTFNUUklORzsKLSsJCU9DU1BfcmVzcG9uc2Vfc3RhdHVzOwotKwkJaTJkX09DU1BfU0VSVklDRUxPQzsKLSsJCUVOR0lORV9nZXRfZGlnZXN0X2VuZ2luZTsKLSsJCUVDX0dST1VQX3NldF9jdXJ2ZV9HRnA7Ci0rCQlPQ1NQX1JFUVVFU1RfZ2V0X2V4dF9ieV9PQko7Ci0rCQlfb3NzbF9vbGRfZGVzX3JhbmRvbV9rZXk7Ci0rCQlBU04xX1Q2MVNUUklOR19pdDsKLSsJCUVDX0dST1VQX21ldGhvZF9vZjsKLSsJCWkyZF9LUkI1X0FQUkVROwotKwkJX29zc2xfb2xkX2Rlc19lbmNyeXB0OwotKwkJQVNOMV9QUklOVEFCTEVfbmV3OwotKwkJSE1BQ19Jbml0X2V4OwotKwkJZDJpX0tSQjVfQVVUSEVOVDsKLSsJCU9DU1BfYXJjaGl2ZV9jdXRvZmZfbmV3OwotKwkJRUNfUE9JTlRfc2V0X0pwcm9qZWN0aXZlX2Nvb3JkaW5hdGVzX0dGcDsKLSsJCUVDX1BPSU5UX3NldF9KcHJval9jb29yZHNfR0ZwOwotKwkJX29zc2xfb2xkX2Rlc19pc193ZWFrX2tleTsKLSsJCU9DU1BfQkFTSUNSRVNQX2dldF9leHRfYnlfT0JKOwotKwkJRUNfUE9JTlRfb2N0MnBvaW50OwotKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHRfY291bnQ7Ci0rCQlVSV9jdHJsOwotKwkJX3NoYWRvd19ERVNfcndfbW9kZTsKLSsJCWFzbjFfZG9fYWRiOwotKwkJQVNOMV90ZW1wbGF0ZV9pMmQ7Ci0rCQlFTkdJTkVfcmVnaXN0ZXJfREg7Ci0rCQlVSV9jb25zdHJ1Y3RfcHJvbXB0OwotKwkJWDUwOV9TVE9SRV9zZXRfdHJ1c3Q7Ci0rCQlVSV9kdXBfaW5wdXRfc3RyaW5nOwotKwkJZDJpX0tSQjVfQVBSRVE7Ci0rCQlFVlBfTURfQ1RYX2NvcHlfZXg7Ci0rCQlPQ1NQX3JlcXVlc3RfaXNfc2lnbmVkOwotKwkJaTJkX09DU1BfUkVRSU5GTzsKLSsJCUtSQjVfRU5DS0VZX2ZyZWU7Ci0rCQlPQ1NQX3Jlc3BfZ2V0MDsKLSsJCUdFTkVSQUxfTkFNRV9pdDsKLSsJCUFTTjFfR0VORVJBTElaRURUSU1FX2l0OwotKwkJWDUwOV9TVE9SRV9zZXRfZmxhZ3M7Ci0rCQlFQ19QT0lOVF9zZXRfY29tcHJlc3NlZF9jb29yZGluYXRlc19HRnA7Ci0rCQlFQ19QT0lOVF9zZXRfY29tcHJfY29vcmRzX0dGcDsKLSsJCU9DU1BfcmVzcG9uc2Vfc3RhdHVzX3N0cjsKLSsJCWQyaV9PQ1NQX1JFVk9LRURJTkZPOwotKwkJT0NTUF9iYXNpY19hZGQxX2NlcnQ7Ci0rCQlFUlJfZ2V0X2ltcGxlbWVudGF0aW9uOwotKwkJRVZQX0NpcGhlckZpbmFsX2V4OwotKwkJT0NTUF9DRVJUU1RBVFVTX25ldzsKLSsJCUNSWVBUT19jbGVhbnVwX2FsbF9leF9kYXRhOwotKwkJT0NTUF9yZXNwX2ZpbmQ7Ci0rCQlCTl9ubm1vZDsKLSsJCVg1MDlfQ1JMX3NvcnQ7Ci0rCQlYNTA5X1JFVk9LRURfc2V0X3Jldm9jYXRpb25EYXRlOwotKwkJRU5HSU5FX3JlZ2lzdGVyX1JBTkQ7Ci0rCQlPQ1NQX1NFUlZJQ0VMT0NfbmV3OwotKwkJRUNfUE9JTlRfc2V0X2FmZmluZV9jb29yZGluYXRlc19HRnA7Ci0rCQlFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3Jkc19HRnA7Ci0rCQlfb3NzbF9vbGRfZGVzX29wdGlvbnM7Ci0rCQlTWE5FVF9pdDsKLSsJCVVJX2R1cF9pbnB1dF9ib29sZWFuOwotKwkJUEtDUzEyX2FkZF9DU1BOYW1lX2FzYzsKLSsJCUVDX1BPSU5UX2lzX2F0X2luZmluaXR5OwotKwkJRU5HSU5FX2xvYWRfY3J5cHRvZGV2OwotKwkJRFNPX2NvbnZlcnRfZmlsZW5hbWU7Ci0rCQlQT0xJQ1lRVUFMSU5GT19pdDsKLSsJCUVOR0lORV9yZWdpc3Rlcl9jaXBoZXJzOwotKwkJQk5fbW9kX2xzaGlmdF9xdWljazsKLSsJCURTT19zZXRfZmlsZW5hbWU7Ci0rCQlBU04xX2l0ZW1fZnJlZTsKLSsJCUtSQjVfVEtUQk9EWV9mcmVlOwotKwkJQVVUSE9SSVRZX0tFWUlEX2l0OwotKwkJS1JCNV9BUFJFUUJPRFlfbmV3OwotKwkJWDUwOVYzX0VYVF9SRVFfYWRkX25jb25mOwotKwkJRU5HSU5FX2N0cmxfY21kX3N0cmluZzsKLSsJCWkyZF9PQ1NQX1JFU1BEQVRBOwotKwkJRVZQX01EX0NUWF9pbml0OwotKwkJRVhURU5ERURfS0VZX1VTQUdFX2ZyZWU7Ci0rCQlQS0NTN19BVFRSX1NJR05faXQ7Ci0rCQlVSV9hZGRfZXJyb3Jfc3RyaW5nOwotKwkJS1JCNV9DSEVDS1NVTV9mcmVlOwotKwkJT0NTUF9SRVFVRVNUX2dldF9leHQ7Ci0rCQlFTkdJTkVfbG9hZF91YnNlYzsKLSsJCUVOR0lORV9yZWdpc3Rlcl9hbGxfZGlnZXN0czsKLSsJCVBLRVlfVVNBR0VfUEVSSU9EX2l0OwotKwkJUEtDUzEyX3VucGFja19hdXRoc2FmZXM7Ci0rCQlBU04xX2l0ZW1fdW5wYWNrOwotKwkJTkVUU0NBUEVfU1BLQUNfaXQ7Ci0rCQlYNTA5X1JFVk9LRURfaXQ7Ci0rCQlBU04xX1NUUklOR19lbmNvZGU7Ci0rCQlFVlBfYWVzXzEyOF9lY2I7Ci0rCQlLUkI1X0FVVEhFTlRfZnJlZTsKLSsJCU9DU1BfQkFTSUNSRVNQX2dldF9leHRfYnlfY3JpdGljYWw7Ci0rCQlPQ1NQX0JBU0lDUkVTUF9nZXRfZXh0X2J5X2NyaXQ7Ci0rCQlPQ1NQX2NlcnRfc3RhdHVzX3N0cjsKLSsJCWQyaV9PQ1NQX1JFUVVFU1Q7Ci0rCQlVSV9kdXBfaW5mb19zdHJpbmc7Ci0rCQlfb3NzbF9vbGRfZGVzX3h3aGl0ZV9pbjJvdXQ7Ci0rCQlQS0NTMTJfaXQ7Ci0rCQlPQ1NQX1NJTkdMRVJFU1BfZ2V0X2V4dF9ieV9jcml0aWNhbDsKLSsJCU9DU1BfU0lOR0xFUkVTUF9nZXRfZXh0X2J5X2NyaXQ7Ci0rCQlPQ1NQX0NFUlRTVEFUVVNfZnJlZTsKLSsJCV9vc3NsX29sZF9kZXNfY3J5cHQ7Ci0rCQlBU04xX2l0ZW1faTJkOwotKwkJRVZQX0RlY3J5cHRGaW5hbF9leDsKLSsJCUVOR0lORV9sb2FkX29wZW5zc2w7Ci0rCQlFTkdJTkVfZ2V0X2NtZF9kZWZuczsKLSsJCUVOR0lORV9zZXRfbG9hZF9wcml2a2V5X2Z1bmN0aW9uOwotKwkJRU5HSU5FX3NldF9sb2FkX3ByaXZrZXlfZm47Ci0rCQlFVlBfRW5jcnlwdEZpbmFsX2V4OwotKwkJRU5HSU5FX3NldF9kZWZhdWx0X2RpZ2VzdHM7Ci0rCQlYNTA5X2dldDBfcHVia2V5X2JpdHN0cjsKLSsJCWFzbjFfZXhfaTJjOwotKwkJRU5HSU5FX3JlZ2lzdGVyX1JTQTsKLSsJCUVOR0lORV91bnJlZ2lzdGVyX0RTQTsKLSsJCV9vc3NsX29sZF9kZXNfa2V5X3NjaGVkOwotKwkJWDUwOV9FWFRFTlNJT05faXQ7Ci0rCQlpMmRfS1JCNV9BVVRIRU5UOwotKwkJU1hORVRJRF9pdDsKLSsJCWQyaV9PQ1NQX1NJTkdMRVJFU1A7Ci0rCQlFRElQQVJUWU5BTUVfbmV3OwotKwkJUEtDUzEyX2NlcnRiYWcyeDUwOTsKLSsJCV9vc3NsX29sZF9kZXNfb2ZiNjRfZW5jcnlwdDsKLSsJCWQyaV9FWFRFTkRFRF9LRVlfVVNBR0U7Ci0rCQlFUlJfcHJpbnRfZXJyb3JzX2NiOwotKwkJRU5HSU5FX3NldF9jaXBoZXJzOwotKwkJZDJpX0tSQjVfQVBSRVFCT0RZOwotKwkJVUlfbWV0aG9kX2dldF9mbHVzaGVyOwotKwkJWDUwOV9QVUJLRVlfaXQ7Ci0rCQlfb3NzbF9vbGRfZGVzX2VuY19yZWFkOwotKwkJUEtDUzdfRU5DUllQVF9pdDsKLSsJCWkyZF9PQ1NQX1JFU1BPTlNFOwotKwkJRUNfR1JPVVBfZ2V0X2NvZmFjdG9yOwotKwkJUEtDUzEyX3VucGFja19wN2RhdGE7Ci0rCQlkMmlfS1JCNV9BVVRIREFUQTsKLSsJCU9DU1BfY29weV9ub25jZTsKLSsJCUtSQjVfQVVUSERBVEFfbmV3OwotKwkJT0NTUF9SRVNQREFUQV9uZXc7Ci0rCQlFQ19HRnBfbW9udF9tZXRob2Q7Ci0rCQlPQ1NQX1JFVk9LRURJTkZPX2ZyZWU7Ci0rCQlVSV9nZXRfZXhfZGF0YTsKLSsJCUtSQjVfQVBSRVFCT0RZX2ZyZWU7Ci0rCQlFQ19HUk9VUF9nZXQwX2dlbmVyYXRvcjsKLSsJCVVJX2dldF9kZWZhdWx0X21ldGhvZDsKLSsJCVg1MDlWM19zZXRfbmNvbmY7Ci0rCQlQS0NTMTJfaXRlbV9pMmRfZW5jcnlwdDsKLSsJCVg1MDlfYWRkMV9leHRfaTJkOwotKwkJUEtDUzdfU0lHTkVSX0lORk9faXQ7Ci0rCQlLUkI1X1BSSU5DTkFNRV9uZXc7Ci0rCQlQS0NTMTJfU0FGRUJBR19pdDsKLSsJCUVDX0dST1VQX2dldF9vcmRlcjsKLSsJCWQyaV9PQ1NQX1JFU1BJRDsKLSsJCU9DU1BfcmVxdWVzdF92ZXJpZnk7Ci0rCQlOQ09ORl9nZXRfbnVtYmVyX2U7Ci0rCQlfb3NzbF9vbGRfZGVzX2RlY3J5cHQzOwotKwkJWDUwOV9zaWduYXR1cmVfcHJpbnQ7Ci0rCQlPQ1NQX1NJTkdMRVJFU1BfZnJlZTsKLSsJCUVOR0lORV9sb2FkX2J1aWx0aW5fZW5naW5lczsKLSsJCWkyZF9PQ1NQX09ORVJFUTsKLSsJCU9DU1BfUkVRVUVTVF9hZGRfZXh0OwotKwkJT0NTUF9SRVNQQllURVNfbmV3OwotKwkJRVZQX01EX0NUWF9jcmVhdGU7Ci0rCQlPQ1NQX3Jlc3BfZmluZF9zdGF0dXM7Ci0rCQlYNTA5X0FMR09SX2l0OwotKwkJQVNOMV9USU1FX2l0OwotKwkJT0NTUF9yZXF1ZXN0X3NldDFfbmFtZTsKLSsJCU9DU1BfT05FUkVRX2dldF9leHRfY291bnQ7Ci0rCQlVSV9nZXQwX3Jlc3VsdDsKLSsJCVBLQ1MxMl9BVVRIU0FGRVNfaXQ7Ci0rCQlFVlBfYWVzXzI1Nl9lY2I7Ci0rCQlQS0NTMTJfcGFja19hdXRoc2FmZXM7Ci0rCQlBU04xX0lBNVNUUklOR19pdDsKLSsJCVVJX2dldF9pbnB1dF9mbGFnczsKLSsJCUVDX0dST1VQX3NldF9nZW5lcmF0b3I7Ci0rCQlfb3NzbF9vbGRfZGVzX3N0cmluZ190b18ya2V5czsKLSsJCU9DU1BfQ0VSVElEX2ZyZWU7Ci0rCQlYNTA5X0NFUlRfQVVYX2l0OwotKwkJQ0VSVElGSUNBVEVQT0xJQ0lFU19pdDsKLSsJCV9vc3NsX29sZF9kZXNfZWRlM19jYmNfZW5jcnlwdDsKLSsJCVJBTkRfc2V0X3JhbmRfZW5naW5lOwotKwkJRFNPX2dldF9sb2FkZWRfZmlsZW5hbWU7Ci0rCQlYNTA5X0FUVFJJQlVURV9pdDsKLSsJCU9DU1BfT05FUkVRX2dldF9leHRfYnlfTklEOwotKwkJUEtDUzEyX2RlY3J5cHRfc2tleTsKLSsJCUtSQjVfQVVUSEVOVF9pdDsKLSsJCVVJX2R1cF9lcnJvcl9zdHJpbmc7Ci0rCQlSU0FQdWJsaWNLZXlfaXQ7Ci0rCQlpMmRfT0NTUF9SRVFVRVNUOwotKwkJUEtDUzEyX3g1MDljcmwyY2VydGJhZzsKLSsJCU9DU1BfU0VSVklDRUxPQ19pdDsKLSsJCUFTTjFfaXRlbV9zaWduOwotKwkJWDUwOV9DUkxfc2V0X2lzc3Vlcl9uYW1lOwotKwkJT0JKX05BTUVfZG9fYWxsX3NvcnRlZDsKLSsJCWkyZF9PQ1NQX0JBU0lDUkVTUDsKLSsJCWkyZF9PQ1NQX1JFU1BCWVRFUzsKLSsJCVBLQ1MxMl91bnBhY2tfcDdlbmNkYXRhOwotKwkJSE1BQ19DVFhfaW5pdDsKLSsJCUVOR0lORV9nZXRfZGlnZXN0OwotKwkJT0NTUF9SRVNQT05TRV9wcmludDsKLSsJCUtSQjVfVEtUQk9EWV9pdDsKLSsJCUFDQ0VTU19ERVNDUklQVElPTl9pdDsKLSsJCVBLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMX2l0OwotKwkJUEJFMlBBUkFNX2l0OwotKwkJUEtDUzEyX2NlcnRiYWcyeDUwOWNybDsKLSsJCVBLQ1M3X1NJR05FRF9pdDsKLSsJCUVOR0lORV9nZXRfY2lwaGVyOwotKwkJaTJkX09DU1BfQ1JMSUQ7Ci0rCQlPQ1NQX1NJTkdMRVJFU1BfbmV3OwotKwkJRU5HSU5FX2NtZF9pc19leGVjdXRhYmxlOwotKwkJUlNBX3VwX3JlZjsKLSsJCUFTTjFfR0VORVJBTFNUUklOR19pdDsKLSsJCUVOR0lORV9yZWdpc3Rlcl9EU0E7Ci0rCQlYNTA5VjNfRVhUX2FkZF9uY29uZl9zazsKLSsJCUVOR0lORV9zZXRfbG9hZF9wdWJrZXlfZnVuY3Rpb247Ci0rCQlQS0NTOF9kZWNyeXB0OwotKwkJUEVNX2J5dGVzX3JlYWRfYmlvOwotKwkJRElSRUNUT1JZU1RSSU5HX2l0OwotKwkJZDJpX09DU1BfQ1JMSUQ7Ci0rCQlFQ19QT0lOVF9pc19vbl9jdXJ2ZTsKLSsJCUNSWVBUT19zZXRfbG9ja2VkX21lbV9leF9mdW5jdGlvbnM7Ci0rCQlDUllQVE9fc2V0X2xvY2tlZF9tZW1fZXhfZnVuY3M7Ci0rCQlkMmlfS1JCNV9DSEVDS1NVTTsKLSsJCUFTTjFfaXRlbV9kdXA7Ci0rCQlYNTA5X2l0OwotKwkJQk5fbW9kX2FkZDsKLSsJCUtSQjVfQVVUSERBVEFfZnJlZTsKLSsJCV9vc3NsX29sZF9kZXNfY2JjX2Nrc3VtOwotKwkJQVNOMV9pdGVtX3ZlcmlmeTsKLSsJCUNSWVBUT19zZXRfbWVtX2V4X2Z1bmN0aW9uczsKLSsJCUVDX1BPSU5UX2dldF9KcHJvamVjdGl2ZV9jb29yZGluYXRlc19HRnA7Ci0rCQlFQ19QT0lOVF9nZXRfSnByb2pfY29vcmRzX0dGcDsKLSsJCVpMT05HX2l0OwotKwkJQ1JZUFRPX2dldF9sb2NrZWRfbWVtX2V4X2Z1bmN0aW9uczsKLSsJCUNSWVBUT19nZXRfbG9ja2VkX21lbV9leF9mdW5jczsKLSsJCUFTTjFfVElNRV9jaGVjazsKLSsJCVVJX2dldDBfdXNlcl9kYXRhOwotKwkJSE1BQ19DVFhfY2xlYW51cDsKLSsJCURTQV91cF9yZWY7Ci0rCQlfb3NzbF9vbGRfZGVzX2VkZTNfY2ZiNjRfZW5jcnlwdDsKLSsJCV9vc3NsX29kZXNfZWRlM19jZmI2NF9lbmNyeXB0OwotKwkJQVNOMV9CTVBTVFJJTkdfaXQ7Ci0rCQlBU04xX3RhZzJiaXQ7Ci0rCQlVSV9tZXRob2Rfc2V0X2ZsdXNoZXI7Ci0rCQlYNTA5X29jc3BpZF9wcmludDsKLSsJCUtSQjVfRU5DREFUQV9pdDsKLSsJCUVOR0lORV9nZXRfbG9hZF9wdWJrZXlfZnVuY3Rpb247Ci0rCQlVSV9hZGRfdXNlcl9kYXRhOwotKwkJT0NTUF9SRVFVRVNUX2RlbGV0ZV9leHQ7Ci0rCQlVSV9nZXRfbWV0aG9kOwotKwkJT0NTUF9PTkVSRVFfZnJlZTsKLSsJCUFTTjFfUFJJTlRBQkxFU1RSSU5HX2l0OwotKwkJWDUwOV9DUkxfc2V0X25leHRVcGRhdGU7Ci0rCQlPQ1NQX1JFUVVFU1RfaXQ7Ci0rCQlPQ1NQX0JBU0lDUkVTUF9pdDsKLSsJCUFFU19lY2JfZW5jcnlwdDsKLSsJCUJOX21vZF9zcXI7Ci0rCQlORVRTQ0FQRV9DRVJUX1NFUVVFTkNFX2l0OwotKwkJR0VORVJBTF9OQU1FU19pdDsKLSsJCUFVVEhPUklUWV9JTkZPX0FDQ0VTU19pdDsKLSsJCUFTTjFfRkJPT0xFQU5faXQ7Ci0rCQlVSV9zZXRfZXhfZGF0YTsKLSsJCV9vc3NsX29sZF9kZXNfc3RyaW5nX3RvX2tleTsKLSsJCUVOR0lORV9yZWdpc3Rlcl9hbGxfUlNBOwotKwkJZDJpX0tSQjVfUFJJTkNOQU1FOwotKwkJT0NTUF9SRVNQQllURVNfaXQ7Ci0rCQlYNTA5X0NJTkZfaXQ7Ci0rCQlFTkdJTkVfdW5yZWdpc3Rlcl9kaWdlc3RzOwotKwkJZDJpX0VESVBBUlRZTkFNRTsKLSsJCWQyaV9PQ1NQX1NFUlZJQ0VMT0M7Ci0rCQlFTkdJTkVfZ2V0X2RpZ2VzdHM7Ci0rCQlfb3NzbF9vbGRfZGVzX3NldF9vZGRfcGFyaXR5OwotKwkJT0NTUF9SRVNQREFUQV9mcmVlOwotKwkJZDJpX0tSQjVfVElDS0VUOwotKwkJT1RIRVJOQU1FX2l0OwotKwkJRVZQX01EX0NUWF9jbGVhbnVwOwotKwkJZDJpX0FTTjFfR0VORVJBTFNUUklORzsKLSsJCVg1MDlfQ1JMX3NldF92ZXJzaW9uOwotKwkJQk5fbW9kX3N1YjsKLSsJCU9DU1BfU0lOR0xFUkVTUF9nZXRfZXh0X2J5X05JRDsKLSsJCUVOR0lORV9nZXRfZXhfbmV3X2luZGV4OwotKwkJT0NTUF9SRVFVRVNUX2ZyZWU7Ci0rCQlPQ1NQX1JFUVVFU1RfYWRkMV9leHRfaTJkOwotKwkJWDUwOV9WQUxfaXQ7Ci0rCQlFQ19QT0lOVHNfbWFrZV9hZmZpbmU7Ci0rCQlFQ19QT0lOVF9tdWw7Ci0rCQlYNTA5VjNfRVhUX2FkZF9uY29uZjsKLSsJCVg1MDlfVFJVU1Rfc2V0OwotKwkJWDUwOV9DUkxfYWRkMV9leHRfaTJkOwotKwkJX29zc2xfb2xkX2Rlc19mY3J5cHQ7Ci0rCQlESVNQTEFZVEVYVF9pdDsKLSsJCVg1MDlfQ1JMX3NldF9sYXN0VXBkYXRlOwotKwkJT0NTUF9CQVNJQ1JFU1BfZnJlZTsKLSsJCU9DU1BfQkFTSUNSRVNQX2FkZDFfZXh0X2kyZDsKLSsJCWQyaV9LUkI1X0FVVEhFTlRCT0RZOwotKwkJQ1JZUFRPX3NldF9leF9kYXRhX2ltcGxlbWVudGF0aW9uOwotKwkJQ1JZUFRPX3NldF9leF9kYXRhX2ltcGw7Ci0rCQlLUkI1X0VOQ0RBVEFfbmV3OwotKwkJRFNPX3VwX3JlZjsKLSsJCU9DU1BfY3JsX3JlYXNvbl9zdHI7Ci0rCQlVSV9nZXQwX3Jlc3VsdF9zdHJpbmc7Ci0rCQlBU04xX0dFTkVSQUxTVFJJTkdfbmV3OwotKwkJWDUwOV9TSUdfaXQ7Ci0rCQlFUlJfc2V0X2ltcGxlbWVudGF0aW9uOwotKwkJRVJSX2xvYWRfRUNfc3RyaW5nczsKLSsJCVVJX2dldDBfYWN0aW9uX3N0cmluZzsKLSsJCU9DU1BfT05FUkVRX2dldF9leHQ7Ci0rCQlFQ19QT0lOVF9tZXRob2Rfb2Y7Ci0rCQlpMmRfS1JCNV9BUFJFUUJPRFk7Ci0rCQlfb3NzbF9vbGRfZGVzX2VjYjNfZW5jcnlwdDsKLSsJCUNSWVBUT19nZXRfbWVtX2V4X2Z1bmN0aW9uczsKLSsJCUVOR0lORV9nZXRfZXhfZGF0YTsKLSsJCVVJX2Rlc3Ryb3lfbWV0aG9kOwotKwkJQVNOMV9pdGVtX2kyZF9iaW87Ci0rCQlPQ1NQX09ORVJFUV9nZXRfZXh0X2J5X09CSjsKLSsJCUFTTjFfcHJpbWl0aXZlX25ldzsKLSsJCUFTTjFfUFJJTlRBQkxFX2l0OwotKwkJRVZQX2Flc18xOTJfZWNiOwotKwkJT0NTUF9TSUdOQVRVUkVfbmV3OwotKwkJTE9OR19pdDsKLSsJCUFTTjFfVklTSUJMRVNUUklOR19pdDsKLSsJCU9DU1BfU0lOR0xFUkVTUF9hZGQxX2V4dF9pMmQ7Ci0rCQlkMmlfT0NTUF9DRVJUSUQ7Ci0rCQlBU04xX2l0ZW1fZDJpX2ZwOwotKwkJQ1JMX0RJU1RfUE9JTlRTX2l0OwotKwkJR0VORVJBTF9OQU1FX3ByaW50OwotKwkJT0NTUF9TSU5HTEVSRVNQX2RlbGV0ZV9leHQ7Ci0rCQlQS0NTMTJfU0FGRUJBR1NfaXQ7Ci0rCQlkMmlfT0NTUF9TSUdOQVRVUkU7Ci0rCQlPQ1NQX3JlcXVlc3RfYWRkMV9ub25jZTsKLSsJCUVOR0lORV9zZXRfY21kX2RlZm5zOwotKwkJT0NTUF9TRVJWSUNFTE9DX2ZyZWU7Ci0rCQlFQ19HUk9VUF9mcmVlOwotKwkJQVNOMV9CSVRfU1RSSU5HX2l0OwotKwkJWDUwOV9SRVFfaXQ7Ci0rCQlfb3NzbF9vbGRfZGVzX2NiY19lbmNyeXB0OwotKwkJRVJSX3VubG9hZF9zdHJpbmdzOwotKwkJUEtDUzdfU0lHTl9FTlZFTE9QRV9pdDsKLSsJCUVESVBBUlRZTkFNRV9mcmVlOwotKwkJT0NTUF9SRVFJTkZPX2ZyZWU7Ci0rCQlFQ19HUk9VUF9uZXdfY3VydmVfR0ZwOwotKwkJT0NTUF9SRVFVRVNUX2dldDFfZXh0X2QyaTsKLSsJCVBLQ1MxMl9pdGVtX3BhY2tfc2FmZWJhZzsKLSsJCWFzbjFfZXhfYzJpOwotKwkJRU5HSU5FX3JlZ2lzdGVyX2RpZ2VzdHM7Ci0rCQlpMmRfT0NTUF9SRVZPS0VESU5GTzsKLSsJCWFzbjFfZW5jX3Jlc3RvcmU7Ci0rCQlVSV9mcmVlOwotKwkJVUlfbmV3X21ldGhvZDsKLSsJCUVWUF9FbmNyeXB0SW5pdF9leDsKLSsJCVg1MDlfcHVia2V5X2RpZ2VzdDsKLSsJCUVDX1BPSU5UX2ludmVydDsKLSsJCU9DU1BfYmFzaWNfc2lnbjsKLSsJCWkyZF9PQ1NQX1JFU1BJRDsKLSsJCU9DU1BfY2hlY2tfbm9uY2U7Ci0rCQlFTkdJTkVfY3RybF9jbWQ7Ci0rCQlkMmlfS1JCNV9FTkNLRVk7Ci0rCQlPQ1NQX3BhcnNlX3VybDsKLSsJCU9DU1BfU0lOR0xFUkVTUF9nZXRfZXh0OwotKwkJT0NTUF9DUkxJRF9mcmVlOwotKwkJT0NTUF9CQVNJQ1JFU1BfZ2V0MV9leHRfZDJpOwotKwkJUlNBUHJpdmF0ZUtleV9pdDsKLSsJCUVOR0lORV9yZWdpc3Rlcl9hbGxfREg7Ci0rCQlpMmRfRURJUEFSVFlOQU1FOwotKwkJRUNfUE9JTlRfZ2V0X2FmZmluZV9jb29yZGluYXRlc19HRnA7Ci0rCQlFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3Jkc19HRnA7Ci0rCQlPQ1NQX0NSTElEX25ldzsKLSsJCUVOR0lORV9nZXRfZmxhZ3M7Ci0rCQlPQ1NQX09ORVJFUV9pdDsKLSsJCVVJX3Byb2Nlc3M7Ci0rCQlBU04xX0lOVEVHRVJfaXQ7Ci0rCQlFVlBfQ2lwaGVySW5pdF9leDsKLSsJCVVJX2dldF9zdHJpbmdfdHlwZTsKLSsJCUVOR0lORV91bnJlZ2lzdGVyX0RIOwotKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9EU0E7Ci0rCQlPQ1NQX09ORVJFUV9nZXRfZXh0X2J5X2NyaXRpY2FsOwotKwkJYm5fZHVwX2V4cGFuZDsKLSsJCU9DU1BfY2VydF9pZF9uZXc7Ci0rCQlCQVNJQ19DT05TVFJBSU5UU19pdDsKLSsJCUJOX21vZF9hZGRfcXVpY2s7Ci0rCQlFQ19QT0lOVF9uZXc7Ci0rCQlFVlBfTURfQ1RYX2Rlc3Ryb3k7Ci0rCQlPQ1NQX1JFU1BCWVRFU19mcmVlOwotKwkJRVZQX2Flc18xMjhfY2JjOwotKwkJT0NTUF9TSU5HTEVSRVNQX2dldDFfZXh0X2QyaTsKLSsJCUVDX1BPSU5UX2ZyZWU7Ci0rCQlESF91cF9yZWY7Ci0rCQlYNTA5X05BTUVfRU5UUllfaXQ7Ci0rCQlVSV9nZXRfZXhfbmV3X2luZGV4OwotKwkJQk5fbW9kX3N1Yl9xdWljazsKLSsJCU9DU1BfT05FUkVRX2FkZF9leHQ7Ci0rCQlPQ1NQX3JlcXVlc3Rfc2lnbjsKLSsJCUVWUF9EaWdlc3RGaW5hbF9leDsKLSsJCUVOR0lORV9zZXRfZGlnZXN0czsKLSsJCU9DU1BfaWRfaXNzdWVyX2NtcDsKLSsJCU9CSl9OQU1FX2RvX2FsbDsKLSsJCUVDX1BPSU5Uc19tdWw7Ci0rCQlFTkdJTkVfcmVnaXN0ZXJfY29tcGxldGU7Ci0rCQlYNTA5VjNfRVhUX25jb25mX25pZDsKLSsJCUFTTjFfU0VRVUVOQ0VfaXQ7Ci0rCQlVSV9zZXRfZGVmYXVsdF9tZXRob2Q7Ci0rCQlSQU5EX3F1ZXJ5X2VnZF9ieXRlczsKLSsJCVVJX21ldGhvZF9nZXRfd3JpdGVyOwotKwkJVUlfT3BlblNTTDsKLSsJCVBFTV9kZWZfY2FsbGJhY2s7Ci0rCQlFTkdJTkVfY2xlYW51cDsKLSsJCURJU1RfUE9JTlRfaXQ7Ci0rCQlPQ1NQX1NJTkdMRVJFU1BfaXQ7Ci0rCQlkMmlfS1JCNV9US1RCT0RZOwotKwkJRUNfUE9JTlRfY21wOwotKwkJT0NTUF9SRVZPS0VESU5GT19uZXc7Ci0rCQlpMmRfT0NTUF9DRVJUU1RBVFVTOwotKwkJT0NTUF9iYXNpY19hZGQxX25vbmNlOwotKwkJQVNOMV9pdGVtX2V4X2QyaTsKLSsJCUJOX21vZF9sc2hpZnQxX3F1aWNrOwotKwkJVUlfc2V0X21ldGhvZDsKLSsJCU9DU1BfaWRfZ2V0MF9pbmZvOwotKwkJQk5fbW9kX3NxcnQ7Ci0rCQlFQ19HUk9VUF9jb3B5OwotKwkJS1JCNV9FTkNEQVRBX2ZyZWU7Ci0rCQlfb3NzbF9vbGRfZGVzX2NmYl9lbmNyeXB0OwotKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHRfYnlfT0JKOwotKwkJT0NTUF9jZXJ0X3RvX2lkOwotKwkJT0NTUF9SRVNQSURfbmV3OwotKwkJT0NTUF9SRVNQREFUQV9pdDsKLSsJCWQyaV9PQ1NQX1JFU1BEQVRBOwotKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9jb21wbGV0ZTsKLSsJCU9DU1BfY2hlY2tfdmFsaWRpdHk7Ci0rCQlQS0NTMTJfQkFHU19pdDsKLSsJCU9DU1BfdXJsX3N2Y2xvY19uZXc7Ci0rCQlBU04xX3RlbXBsYXRlX2ZyZWU7Ci0rCQlPQ1NQX1NJTkdMRVJFU1BfYWRkX2V4dDsKLSsJCUtSQjVfQVVUSEVOVEJPRFlfaXQ7Ci0rCQlYNTA5X3N1cHBvcnRlZF9leHRlbnNpb247Ci0rCQlpMmRfS1JCNV9BVVRIREFUQTsKLSsJCVVJX21ldGhvZF9nZXRfb3BlbmVyOwotKwkJRU5HSU5FX3NldF9leF9kYXRhOwotKwkJT0NTUF9SRVFVRVNUX3ByaW50OwotKwkJQ0JJR05VTV9pdDsKLSsJCUtSQjVfVElDS0VUX25ldzsKLSsJCUtSQjVfQVBSRVFfbmV3OwotKwkJRUNfR1JPVVBfZ2V0X2N1cnZlX0dGcDsKLSsJCUtSQjVfRU5DS0VZX25ldzsKLSsJCUFTTjFfdGVtcGxhdGVfZDJpOwotKwkJX29zc2xfb2xkX2Rlc19xdWFkX2Nrc3VtOwotKwkJT0NTUF9zaW5nbGVfZ2V0MF9zdGF0dXM7Ci0rCQlCTl9zd2FwOwotKwkJUE9MSUNZSU5GT19pdDsKLSsJCUVOR0lORV9zZXRfZGVzdHJveV9mdW5jdGlvbjsKLSsJCWFzbjFfZW5jX2ZyZWU7Ci0rCQlPQ1NQX1JFU1BJRF9pdDsKLSsJCUVDX0dST1VQX25ldzsKLSsJCUVWUF9hZXNfMjU2X2NiYzsKLSsJCWkyZF9LUkI1X1BSSU5DTkFNRTsKLSsJCV9vc3NsX29sZF9kZXNfZW5jcnlwdDI7Ci0rCQlfb3NzbF9vbGRfZGVzX2VuY3J5cHQzOwotKwkJUEtDUzhfUFJJVl9LRVlfSU5GT19pdDsKLSsJCU9DU1BfUkVRSU5GT19pdDsKLSsJCVBCRVBBUkFNX2l0OwotKwkJS1JCNV9BVVRIRU5UQk9EWV9uZXc7Ci0rCQlYNTA5X0NSTF9hZGQwX3Jldm9rZWQ7Ci0rCQlFRElQQVJUWU5BTUVfaXQ7Ci0rCQlORVRTQ0FQRV9TUEtJX2l0OwotKwkJVUlfZ2V0MF90ZXN0X3N0cmluZzsKLSsJCUVOR0lORV9nZXRfY2lwaGVyX2VuZ2luZTsKLSsJCUVOR0lORV9yZWdpc3Rlcl9hbGxfY2lwaGVyczsKLSsJCUVDX1BPSU5UX2NvcHk7Ci0rCQlCTl9rcm9uZWNrZXI7Ci0rCQlfb3NzbF9vbGRfZGVzX2VkZTNfb2ZiNjRfZW5jcnlwdDsKLSsJCV9vc3NsX29kZXNfZWRlM19vZmI2NF9lbmNyeXB0OwotKwkJVUlfbWV0aG9kX2dldF9yZWFkZXI7Ci0rCQlPQ1NQX0JBU0lDUkVTUF9nZXRfZXh0X2NvdW50OwotKwkJQVNOMV9FTlVNRVJBVEVEX2l0OwotKwkJVUlfc2V0X3Jlc3VsdDsKLSsJCWkyZF9LUkI1X1RJQ0tFVDsKLSsJCVg1MDlfcHJpbnRfZXhfZnA7Ci0rCQlFVlBfQ0lQSEVSX0NUWF9zZXRfcGFkZGluZzsKLSsJCWQyaV9PQ1NQX1JFU1BPTlNFOwotKwkJQVNOMV9VVENUSU1FX2l0OwotKwkJX29zc2xfb2xkX2Rlc19lbmNfd3JpdGU7Ci0rCQlPQ1NQX1JFU1BPTlNFX25ldzsKLSsJCUFFU19zZXRfZW5jcnlwdF9rZXk7Ci0rCQlPQ1NQX3Jlc3BfY291bnQ7Ci0rCQlLUkI1X0NIRUNLU1VNX25ldzsKLSsJCUVOR0lORV9sb2FkX2Nzd2lmdDsKLSsJCU9DU1Bfb25lcmVxX2dldDBfaWQ7Ci0rCQlFTkdJTkVfc2V0X2RlZmF1bHRfY2lwaGVyczsKLSsJCU5PVElDRVJFRl9pdDsKLSsJCVg1MDlWM19FWFRfQ1JMX2FkZF9uY29uZjsKLSsJCU9DU1BfUkVWT0tFRElORk9faXQ7Ci0rCQlBRVNfZW5jcnlwdDsKLSsJCU9DU1BfUkVRVUVTVF9uZXc7Ci0rCQlBU04xX0FOWV9pdDsKLSsJCUNSWVBUT19leF9kYXRhX25ld19jbGFzczsKLSsJCV9vc3NsX29sZF9kZXNfbmNiY19lbmNyeXB0OwotKwkJaTJkX0tSQjVfVEtUQk9EWTsKLSsJCUVDX1BPSU5UX2NsZWFyX2ZyZWU7Ci0rCQlBRVNfZGVjcnlwdDsKLSsJCWFzbjFfZW5jX2luaXQ7Ci0rCQlVSV9nZXRfcmVzdWx0X21heHNpemU7Ci0rCQlPQ1NQX0NFUlRJRF9uZXc7Ci0rCQlFTkdJTkVfdW5yZWdpc3Rlcl9SQU5EOwotKwkJVUlfbWV0aG9kX2dldF9jbG9zZXI7Ci0rCQlkMmlfS1JCNV9FTkNEQVRBOwotKwkJT0NTUF9yZXF1ZXN0X29uZXJlcV9jb3VudDsKLSsJCU9DU1BfYmFzaWNfdmVyaWZ5OwotKwkJS1JCNV9BVVRIRU5UQk9EWV9mcmVlOwotKwkJQVNOMV9pdGVtX2QyaTsKLSsJCUFTTjFfcHJpbWl0aXZlX2ZyZWU7Ci0rCQlpMmRfRVhURU5ERURfS0VZX1VTQUdFOwotKwkJaTJkX09DU1BfU0lHTkFUVVJFOwotKwkJYXNuMV9lbmNfc2F2ZTsKLSsJCUVOR0lORV9sb2FkX251cm9uOwotKwkJX29zc2xfb2xkX2Rlc19wY2JjX2VuY3J5cHQ7Ci0rCQlQS0NTMTJfTUFDX0RBVEFfaXQ7Ci0rCQlPQ1NQX2FjY2VwdF9yZXNwb25zZXNfbmV3OwotKwkJYXNuMV9kb19sb2NrOwotKwkJUEtDUzdfQVRUUl9WRVJJRllfaXQ7Ci0rCQlLUkI1X0FQUkVRQk9EWV9pdDsKLSsJCWkyZF9PQ1NQX1NJTkdMRVJFU1A7Ci0rCQlBU04xX2l0ZW1fZXhfbmV3OwotKwkJVUlfYWRkX3ZlcmlmeV9zdHJpbmc7Ci0rCQlfb3NzbF9vbGRfZGVzX3NldF9rZXk7Ci0rCQlLUkI1X1BSSU5DTkFNRV9pdDsKLSsJCUVWUF9EZWNyeXB0SW5pdF9leDsKLSsJCWkyZF9PQ1NQX0NFUlRJRDsKLSsJCUFTTjFfaXRlbV9kMmlfYmlvOwotKwkJRUNfUE9JTlRfZGJsOwotKwkJYXNuMV9nZXRfY2hvaWNlX3NlbGVjdG9yOwotKwkJaTJkX0tSQjVfQ0hFQ0tTVU07Ci0rCQlFTkdJTkVfc2V0X3RhYmxlX2ZsYWdzOwotKwkJQUVTX29wdGlvbnM7Ci0rCQlFTkdJTkVfbG9hZF9jaGlsOwotKwkJT0NTUF9pZF9jbXA7Ci0rCQlPQ1NQX0JBU0lDUkVTUF9uZXc7Ci0rCQlPQ1NQX1JFUVVFU1RfZ2V0X2V4dF9ieV9OSUQ7Ci0rCQlLUkI1X0FQUkVRX2l0OwotKwkJRU5HSU5FX2dldF9kZXN0cm95X2Z1bmN0aW9uOwotKwkJQ09ORl9zZXRfbmNvbmY7Ci0rCQlBU04xX1BSSU5UQUJMRV9mcmVlOwotKwkJT0NTUF9CQVNJQ1JFU1BfZ2V0X2V4dF9ieV9OSUQ7Ci0rCQlESVNUX1BPSU5UX05BTUVfaXQ7Ci0rCQlYNTA5VjNfZXh0ZW5zaW9uc19wcmludDsKLSsJCV9vc3NsX29sZF9kZXNfY2ZiNjRfZW5jcnlwdDsKLSsJCVg1MDlfUkVWT0tFRF9hZGQxX2V4dF9pMmQ7Ci0rCQlfb3NzbF9vbGRfZGVzX29mYl9lbmNyeXB0OwotKwkJS1JCNV9US1RCT0RZX25ldzsKLSsJCUFTTjFfT0NURVRfU1RSSU5HX2l0OwotKwkJRVJSX2xvYWRfVUlfc3RyaW5nczsKLSsJCWkyZF9LUkI1X0VOQ0tFWTsKLSsJCUFTTjFfdGVtcGxhdGVfbmV3OwotKwkJT0NTUF9TSUdOQVRVUkVfZnJlZTsKLSsJCUFTTjFfaXRlbV9pMmRfZnA7Ci0rCQlLUkI1X1BSSU5DTkFNRV9mcmVlOwotKwkJUEtDUzdfUkVDSVBfSU5GT19pdDsKLSsJCUVYVEVOREVEX0tFWV9VU0FHRV9pdDsKLSsJCUVDX0dGcF9zaW1wbGVfbWV0aG9kOwotKwkJRUNfR1JPVVBfcHJlY29tcHV0ZV9tdWx0OwotKwkJT0NTUF9yZXF1ZXN0X29uZXJlcV9nZXQwOwotKwkJVUlfbWV0aG9kX3NldF93cml0ZXI7Ci0rCQlLUkI1X0FVVEhFTlRfbmV3OwotKwkJWDUwOV9DUkxfSU5GT19pdDsKLSsJCURTT19zZXRfbmFtZV9jb252ZXJ0ZXI7Ci0rCQlBRVNfc2V0X2RlY3J5cHRfa2V5OwotKwkJUEtDUzdfRElHRVNUX2l0OwotKwkJUEtDUzEyX3g1MDkyY2VydGJhZzsKLSsJCUVWUF9EaWdlc3RJbml0X2V4OwotKwkJaTJhX0FDQ0VTU19ERVNDUklQVElPTjsKLSsJCU9DU1BfUkVTUE9OU0VfaXQ7Ci0rCQlQS0NTN19FTkNfQ09OVEVOVF9pdDsKLSsJCU9DU1BfcmVxdWVzdF9hZGQwX2lkOwotKwkJRUNfUE9JTlRfbWFrZV9hZmZpbmU7Ci0rCQlEU09fZ2V0X2ZpbGVuYW1lOwotKwkJT0NTUF9DRVJUU1RBVFVTX2l0OwotKwkJT0NTUF9yZXF1ZXN0X2FkZDFfY2VydDsKLSsJCVVJX2dldDBfb3V0cHV0X3N0cmluZzsKLSsJCVVJX2R1cF92ZXJpZnlfc3RyaW5nOwotKwkJQk5fbW9kX2xzaGlmdDsKLSsJCUtSQjVfQVVUSERBVEFfaXQ7Ci0rCQlhc24xX3NldF9jaG9pY2Vfc2VsZWN0b3I7Ci0rCQlPQ1NQX2Jhc2ljX2FkZDFfc3RhdHVzOwotKwkJT0NTUF9SRVNQSURfZnJlZTsKLSsJCWFzbjFfZ2V0X2ZpZWxkX3B0cjsKLSsJCVVJX2FkZF9pbnB1dF9zdHJpbmc7Ci0rCQlPQ1NQX0NSTElEX2l0OwotKwkJaTJkX0tSQjVfQVVUSEVOVEJPRFk7Ci0rCQlPQ1NQX1JFUVVFU1RfZ2V0X2V4dF9jb3VudDsKLSsJCUVOR0lORV9sb2FkX2F0YWxsYTsKLSsJCVg1MDlfTkFNRV9pdDsKLSsJCVVTRVJOT1RJQ0VfaXQ7Ci0rCQlPQ1NQX1JFUUlORk9fbmV3OwotKwkJT0NTUF9CQVNJQ1JFU1BfZ2V0X2V4dDsKLSsJCUNSWVBUT19nZXRfZXhfZGF0YV9pbXBsZW1lbnRhdGlvbjsKLSsJCUNSWVBUT19nZXRfZXhfZGF0YV9pbXBsOwotKwkJQVNOMV9pdGVtX3BhY2s7Ci0rCQlpMmRfS1JCNV9FTkNEQVRBOwotKwkJWDUwOV9QVVJQT1NFX3NldDsKLSsJCVg1MDlfUkVRX0lORk9faXQ7Ci0rCQlVSV9tZXRob2Rfc2V0X29wZW5lcjsKLSsJCUFTTjFfaXRlbV9leF9mcmVlOwotKwkJQVNOMV9CT09MRUFOX2l0OwotKwkJRU5HSU5FX2dldF90YWJsZV9mbGFnczsKLSsJCVVJX2NyZWF0ZV9tZXRob2Q7Ci0rCQlPQ1NQX09ORVJFUV9hZGQxX2V4dF9pMmQ7Ci0rCQlfc2hhZG93X0RFU19jaGVja19rZXk7Ci0rCQlkMmlfT0NTUF9SRVFJTkZPOwotKwkJVUlfYWRkX2luZm9fc3RyaW5nOwotKwkJVUlfZ2V0X3Jlc3VsdF9taW5zaXplOwotKwkJQVNOMV9OVUxMX2l0OwotKwkJQk5fbW9kX2xzaGlmdDE7Ci0rCQlkMmlfT0NTUF9PTkVSRVE7Ci0rCQlPQ1NQX09ORVJFUV9uZXc7Ci0rCQlLUkI1X1RJQ0tFVF9pdDsKLSsJCUVWUF9hZXNfMTkyX2NiYzsKLSsJCUtSQjVfVElDS0VUX2ZyZWU7Ci0rCQlVSV9uZXc7Ci0rCQlPQ1NQX3Jlc3BvbnNlX2NyZWF0ZTsKLSsJCV9vc3NsX29sZF9kZXNfeGNiY19lbmNyeXB0OwotKwkJUEtDUzdfaXQ7Ci0rCQlPQ1NQX1JFUVVFU1RfZ2V0X2V4dF9ieV9jcml0aWNhbDsKLSsJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2J5X2NyaXQ7Ci0rCQlFTkdJTkVfc2V0X2ZsYWdzOwotKwkJX29zc2xfb2xkX2Rlc19lY2JfZW5jcnlwdDsKLSsJCU9DU1BfcmVzcG9uc2VfZ2V0MV9iYXNpYzsKLSsJCUVWUF9EaWdlc3Q7Ci0rCQlPQ1NQX09ORVJFUV9kZWxldGVfZXh0OwotKwkJQVNOMV9UQk9PTEVBTl9pdDsKLSsJCUFTTjFfaXRlbV9uZXc7Ci0rCQlBU04xX1RJTUVfdG9fZ2VuZXJhbGl6ZWR0aW1lOwotKwkJQklHTlVNX2l0OwotKwkJQUVTX2NiY19lbmNyeXB0OwotKwkJRU5HSU5FX2dldF9sb2FkX3ByaXZrZXlfZnVuY3Rpb247Ci0rCQlFTkdJTkVfZ2V0X2xvYWRfcHJpdmtleV9mbjsKLSsJCU9DU1BfUkVTUE9OU0VfZnJlZTsKLSsJCVVJX21ldGhvZF9zZXRfcmVhZGVyOwotKwkJaTJkX0FTTjFfVDYxU1RSSU5HOwotKwkJRUNfUE9JTlRfc2V0X3RvX2luZmluaXR5OwotKwkJRVJSX2xvYWRfT0NTUF9zdHJpbmdzOwotKwkJRUNfUE9JTlRfcG9pbnQyb2N0OwotKwkJS1JCNV9BUFJFUV9mcmVlOwotKwkJQVNOMV9PQkpFQ1RfaXQ7Ci0rCQlPQ1NQX2NybElEX25ldzsKLSsJCU9DU1BfY3JsSUQyX25ldzsKLSsJCUNPTkZfbW9kdWxlc19sb2FkX2ZpbGU7Ci0rCQlDT05GX2ltb2R1bGVfc2V0X3Vzcl9kYXRhOwotKwkJRU5HSU5FX3NldF9kZWZhdWx0X3N0cmluZzsKLSsJCUNPTkZfbW9kdWxlX2dldF91c3JfZGF0YTsKLSsJCUFTTjFfYWRkX29pZF9tb2R1bGU7Ci0rCQlDT05GX21vZHVsZXNfZmluaXNoOwotKwkJT1BFTlNTTF9jb25maWc7Ci0rCQlDT05GX21vZHVsZXNfdW5sb2FkOwotKwkJQ09ORl9pbW9kdWxlX2dldF92YWx1ZTsKLSsJCUNPTkZfbW9kdWxlX3NldF91c3JfZGF0YTsKLSsJCUNPTkZfcGFyc2VfbGlzdDsKLSsJCUNPTkZfbW9kdWxlX2FkZDsKLSsJCUNPTkZfZ2V0MV9kZWZhdWx0X2NvbmZpZ19maWxlOwotKwkJQ09ORl9pbW9kdWxlX2dldF9mbGFnczsKLSsJCUNPTkZfaW1vZHVsZV9nZXRfbW9kdWxlOwotKwkJQ09ORl9tb2R1bGVzX2xvYWQ7Ci0rCQlDT05GX2ltb2R1bGVfZ2V0X25hbWU7Ci0rCQlFUlJfcGVla190b3BfZXJyb3I7Ci0rCQlDT05GX2ltb2R1bGVfZ2V0X3Vzcl9kYXRhOwotKwkJQ09ORl9pbW9kdWxlX3NldF9mbGFnczsKLSsJCUVOR0lORV9hZGRfY29uZl9tb2R1bGU7Ci0rCQlFUlJfcGVla19sYXN0X2Vycm9yX2xpbmU7Ci0rCQlFUlJfcGVla19sYXN0X2Vycm9yX2xpbmVfZGF0YTsKLSsJCUVSUl9wZWVrX2xhc3RfZXJyb3I7Ci0rCQlERVNfcmVhZF8ycGFzc3dvcmRzOwotKwkJREVTX3JlYWRfcGFzc3dvcmQ7Ci0rCQlVSV9VVElMX3JlYWRfcHc7Ci0rCQlVSV9VVElMX3JlYWRfcHdfc3RyaW5nOwotKwkJRU5HSU5FX2xvYWRfYWVwOwotKwkJRU5HSU5FX2xvYWRfc3VyZXdhcmU7Ci0rCQlPUEVOU1NMX2FkZF9hbGxfYWxnb3JpdGhtc19ub2NvbmY7Ci0rCQlPUEVOU1NMX2FkZF9hbGxfYWxnb19ub2NvbmY7Ci0rCQlPUEVOU1NMX2FkZF9hbGxfYWxnb3JpdGhtc19jb25mOwotKwkJT1BFTlNTTF9hZGRfYWxsX2FsZ29fY29uZjsKLSsJCU9QRU5TU0xfbG9hZF9idWlsdGluX21vZHVsZXM7Ci0rCQlBRVNfb2ZiMTI4X2VuY3J5cHQ7Ci0rCQlBRVNfY3RyMTI4X2VuY3J5cHQ7Ci0rCQlBRVNfY2ZiMTI4X2VuY3J5cHQ7Ci0rCQlFTkdJTkVfbG9hZF80NzU4Y2NhOwotKwkJX29zc2xfMDk2X2Rlc19yYW5kb21fc2VlZDsKLSsJCUVWUF9hZXNfMjU2X29mYjsKLSsJCUVWUF9hZXNfMTkyX29mYjsKLSsJCUVWUF9hZXNfMTI4X2NmYjEyODsKLSsJCUVWUF9hZXNfMjU2X2NmYjEyODsKLSsJCUVWUF9hZXNfMTI4X29mYjsKLSsJCUVWUF9hZXNfMTkyX2NmYjEyODsKLSsJCUNPTkZfbW9kdWxlc19mcmVlOwotKwkJTkNPTkZfZGVmYXVsdDsKLSsJCU9QRU5TU0xfbm9fY29uZmlnOwotKwkJTkNPTkZfV0lOMzI7Ci0rCQlBU04xX1VOSVZFUlNBTFNUUklOR19uZXc7Ci0rCQlFVlBfZGVzX2VkZV9lY2I7Ci0rCQlpMmRfQVNOMV9VTklWRVJTQUxTVFJJTkc7Ci0rCQlBU04xX1VOSVZFUlNBTFNUUklOR19mcmVlOwotKwkJQVNOMV9VTklWRVJTQUxTVFJJTkdfaXQ7Ci0rCQlkMmlfQVNOMV9VTklWRVJTQUxTVFJJTkc7Ci0rCQlFVlBfZGVzX2VkZTNfZWNiOwotKwkJWDUwOV9SRVFfcHJpbnRfZXg7Ci0rCQlFTkdJTkVfdXBfcmVmOwotKwkJQlVGX01FTV9ncm93X2NsZWFuOwotKwkJQ1JZUFRPX3JlYWxsb2NfY2xlYW47Ci0rCQlCVUZfc3RybGNhdDsKLSsJCUJJT19pbmRlbnQ7Ci0rCQlCVUZfc3RybGNweTsKLSsJCU9wZW5TU0xEaWU7Ci0rCQlPUEVOU1NMX2NsZWFuc2U7Ci0rCQlFTkdJTkVfc2V0dXBfYnNkX2NyeXB0b2RldjsKLSsJCUVSUl9yZWxlYXNlX2Vycl9zdGF0ZV90YWJsZTsKLSsJCUVWUF9hZXNfMTI4X2NmYjg7Ci0rCQlGSVBTX2NvcnJ1cHRfcnNhOwotKwkJRklQU19zZWxmdGVzdF9kZXM7Ci0rCQlFVlBfYWVzXzEyOF9jZmIxOwotKwkJRVZQX2Flc18xOTJfY2ZiODsKLSsJCUZJUFNfbW9kZV9zZXQ7Ci0rCQlGSVBTX3NlbGZ0ZXN0X2RzYTsKLSsJCUVWUF9hZXNfMjU2X2NmYjg7Ci0rCQlGSVBTX2FsbG93X21kNTsKLSsJCURFU19lZGUzX2NmYl9lbmNyeXB0OwotKwkJRVZQX2Rlc19lZGUzX2NmYjg7Ci0rCQlGSVBTX3JhbmRfc2VlZGVkOwotKwkJQUVTX2NmYnJfZW5jcnlwdF9ibG9jazsKLSsJCUFFU19jZmI4X2VuY3J5cHQ7Ci0rCQlGSVBTX3JhbmRfc2VlZDsKLSsJCUZJUFNfY29ycnVwdF9kZXM7Ci0rCQlFVlBfYWVzXzE5Ml9jZmIxOwotKwkJRklQU19zZWxmdGVzdF9hZXM7Ci0rCQlGSVBTX3NldF9wcm5nX2tleTsKLSsJCUVWUF9kZXNfY2ZiODsKLSsJCUZJUFNfY29ycnVwdF9kc2E7Ci0rCQlGSVBTX3Rlc3RfbW9kZTsKLSsJCUZJUFNfcmFuZF9tZXRob2Q7Ci0rCQlFVlBfYWVzXzI1Nl9jZmIxOwotKwkJRVJSX2xvYWRfRklQU19zdHJpbmdzOwotKwkJRklQU19jb3JydXB0X2FlczsKLSsJCUZJUFNfc2VsZnRlc3Rfc2hhMTsKLSsJCUZJUFNfc2VsZnRlc3RfcnNhOwotKwkJRklQU19jb3JydXB0X3NoYTE7Ci0rCQlFVlBfZGVzX2NmYjE7Ci0rCQlGSVBTX2RzYV9jaGVjazsKLSsJCUFFU19jZmIxX2VuY3J5cHQ7Ci0rCQlFVlBfZGVzX2VkZTNfY2ZiMTsKLSsJCUZJUFNfcmFuZF9jaGVjazsKLSsJCUZJUFNfbWQ1X2FsbG93ZWQ7Ci0rCQlGSVBTX21vZGU7Ci0rCQlGSVBTX3NlbGZ0ZXN0X2ZhaWxlZDsKLSsJCXNrX2lzX3NvcnRlZDsKLSsJCVg1MDlfY2hlY2tfY2E7Ci0rCQlITUFDX0NUWF9zZXRfZmxhZ3M7Ci0rCQlkMmlfUFJPWFlfQ0VSVF9JTkZPX0VYVEVOU0lPTjsKLSsJCVBST1hZX1BPTElDWV9pdDsKLSsJCWkyZF9QUk9YWV9QT0xJQ1k7Ci0rCQlpMmRfUFJPWFlfQ0VSVF9JTkZPX0VYVEVOU0lPTjsKLSsJCWQyaV9QUk9YWV9QT0xJQ1k7Ci0rCQlQUk9YWV9DRVJUX0lORk9fRVhURU5TSU9OX25ldzsKLSsJCVBST1hZX0NFUlRfSU5GT19FWFRFTlNJT05fZnJlZTsKLSsJCVBST1hZX0NFUlRfSU5GT19FWFRFTlNJT05faXQ7Ci0rCQlQUk9YWV9QT0xJQ1lfZnJlZTsKLSsJCVBST1hZX1BPTElDWV9uZXc7Ci0rCQlCTl9NT05UX0NUWF9zZXRfbG9ja2VkOwotKwkJRklQU19zZWxmdGVzdF9ybmc7Ci0rCQlFVlBfc2hhMzg0OwotKwkJRVZQX3NoYTUxMjsKLSsJCUVWUF9zaGEyMjQ7Ci0rCQlFVlBfc2hhMjU2OwotKwkJRklQU19zZWxmdGVzdF9obWFjOwotKwkJRklQU19jb3JydXB0X3JuZzsKLSsJCUJOX21vZF9leHBfbW9udF9jb25zdHRpbWU7Ci0rCQlSU0FfWDkzMV9oYXNoX2lkOwotKwkJUlNBX3BhZGRpbmdfY2hlY2tfWDkzMTsKLSsJCVJTQV92ZXJpZnlfUEtDUzFfUFNTOwotKwkJUlNBX3BhZGRpbmdfYWRkX1g5MzE7Ci0rCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfUFNTOwotKwkJUEtDUzFfTUdGMTsKLSsJCUJOX1g5MzFfZ2VuZXJhdGVfWHBxOwotKwkJUlNBX1g5MzFfZ2VuZXJhdGVfa2V5OwotKwkJQk5fWDkzMV9kZXJpdmVfcHJpbWU7Ci0rCQlCTl9YOTMxX2dlbmVyYXRlX3ByaW1lOwotKwkJUlNBX1g5MzFfZGVyaXZlOwotKwkJQklPX25ld19kZ3JhbTsKLSsJCUJOX2dldDBfbmlzdF9wcmltZV8zODQ7Ci0rCQlFUlJfc2V0X21hcms7Ci0rCQlYNTA5X1NUT1JFX0NUWF9zZXQwX2NybHM7Ci0rCQlFTkdJTkVfc2V0X1NUT1JFOwotKwkJRU5HSU5FX3JlZ2lzdGVyX0VDRFNBOwotKwkJU1RPUkVfbWV0aF9zZXRfbGlzdF9zdGFydF9mbjsKLSsJCVNUT1JFX21ldGhvZF9zZXRfbGlzdF9zdGFydF9mdW5jdGlvbjsKLSsJCUJOX0JMSU5ESU5HX2ludmVydF9leDsKLSsJCU5BTUVfQ09OU1RSQUlOVFNfZnJlZTsKLSsJCVNUT1JFX0FUVFJfSU5GT19zZXRfbnVtYmVyOwotKwkJQk5fQkxJTkRJTkdfZ2V0X3RocmVhZF9pZDsKLSsJCVg1MDlfU1RPUkVfQ1RYX3NldDBfcGFyYW07Ci0rCQlQT0xJQ1lfTUFQUElOR19pdDsKLSsJCVNUT1JFX3BhcnNlX2F0dHJzX3N0YXJ0OwotKwkJUE9MSUNZX0NPTlNUUkFJTlRTX2ZyZWU7Ci0rCQlFVlBfUEtFWV9hZGQxX2F0dHJfYnlfTklEOwotKwkJQk5fbmlzdF9tb2RfMTkyOwotKwkJRUNfR1JPVVBfZ2V0X3RyaW5vbWlhbF9iYXNpczsKLSsJCVNUT1JFX3NldF9tZXRob2Q7Ci0rCQlHRU5FUkFMX1NVQlRSRUVfZnJlZTsKLSsJCU5BTUVfQ09OU1RSQUlOVFNfaXQ7Ci0rCQlFQ0RIX2dldF9kZWZhdWx0X21ldGhvZDsKLSsJCVBLQ1MxMl9hZGRfc2FmZTsKLSsJCUVDX0tFWV9uZXdfYnlfY3VydmVfbmFtZTsKLSsJCVNUT1JFX21ldGhfZ2V0X3VwZGF0ZV9zdG9yZV9mbjsKLSsJCVNUT1JFX21ldGhvZF9nZXRfdXBkYXRlX3N0b3JlX2Z1bmN0aW9uOwotKwkJRU5HSU5FX3JlZ2lzdGVyX0VDREg7Ci0rCQlTSEE1MTJfVXBkYXRlOwotKwkJaTJkX0VDUHJpdmF0ZUtleTsKLSsJCUJOX2dldDBfbmlzdF9wcmltZV8xOTI7Ci0rCQlTVE9SRV9tb2RpZnlfY2VydGlmaWNhdGU7Ci0rCQlFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGMm07Ci0rCQlFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3Jkc19HRjJtOwotKwkJQk5fR0YybV9tb2RfZXhwX2FycjsKLSsJCVNUT1JFX0FUVFJfSU5GT19tb2RpZnlfbnVtYmVyOwotKwkJWDUwOV9rZXlpZF9nZXQwOwotKwkJRU5HSU5FX2xvYWRfZ21wOwotKwkJcGl0ZW1fbmV3OwotKwkJQk5fR0YybV9tb2RfbXVsX2FycjsKLSsJCVNUT1JFX2xpc3RfcHVibGljX2tleV9lbmRwOwotKwkJbzJpX0VDUHVibGljS2V5OwotKwkJRUNfS0VZX2NvcHk7Ci0rCQlCSU9fZHVtcF9mcDsKLSsJCVg1MDlfcG9saWN5X25vZGVfZ2V0MF9wYXJlbnQ7Ci0rCQlFQ19HUk9VUF9jaGVja19kaXNjcmltaW5hbnQ7Ci0rCQlpMm9fRUNQdWJsaWNLZXk7Ci0rCQlFQ19LRVlfcHJlY29tcHV0ZV9tdWx0OwotKwkJYTJpX0lQQUREUkVTUzsKLSsJCVNUT1JFX21ldGhfc2V0X2luaXRpYWxpc2VfZm47Ci0rCQlTVE9SRV9tZXRob2Rfc2V0X2luaXRpYWxpc2VfZnVuY3Rpb247Ci0rCQlYNTA5X1NUT1JFX0NUWF9zZXRfZGVwdGg7Ci0rCQlYNTA5X1ZFUklGWV9QQVJBTV9pbmhlcml0OwotKwkJRUNfUE9JTlRfcG9pbnQyYm47Ci0rCQlTVE9SRV9BVFRSX0lORk9fc2V0X2RuOwotKwkJWDUwOV9wb2xpY3lfdHJlZV9nZXQwX3BvbGljaWVzOwotKwkJRUNfR1JPVVBfbmV3X2N1cnZlX0dGMm07Ci0rCQlTVE9SRV9kZXN0cm95X21ldGhvZDsKLSsJCUVOR0lORV91bnJlZ2lzdGVyX1NUT1JFOwotKwkJRVZQX1BLRVlfZ2V0MV9FQ19LRVk7Ci0rCQlTVE9SRV9BVFRSX0lORk9fZ2V0MF9udW1iZXI7Ci0rCQlFTkdJTkVfZ2V0X2RlZmF1bHRfRUNESDsKLSsJCUVDX0tFWV9nZXRfY29udl9mb3JtOwotKwkJQVNOMV9PQ1RFVF9TVFJJTkdfTkRFRl9pdDsKLSsJCVNUT1JFX2RlbGV0ZV9wdWJsaWNfa2V5OwotKwkJU1RPUkVfZ2V0X3B1YmxpY19rZXk7Ci0rCQlTVE9SRV9tb2RpZnlfYXJiaXRyYXJ5OwotKwkJRU5HSU5FX2dldF9zdGF0aWNfc3RhdGU7Ci0rCQlwcXVldWVfaXRlcmF0b3I7Ci0rCQlFQ0RTQV9TSUdfbmV3OwotKwkJT1BFTlNTTF9ESVJfZW5kOwotKwkJQk5fR0YybV9tb2Rfc3FyOwotKwkJRUNfUE9JTlRfYm4ycG9pbnQ7Ci0rCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfZGVwdGg7Ci0rCQlFQ19LRVlfc2V0X2FzbjFfZmxhZzsKLSsJCVNUT1JFX2dldF9tZXRob2Q7Ci0rCQlFQ19LRVlfZ2V0X2tleV9tZXRob2RfZGF0YTsKLSsJCUVDRFNBX3NpZ25fZXg7Ci0rCQlTVE9SRV9wYXJzZV9hdHRyc19lbmQ7Ci0rCQlFQ19HUk9VUF9nZXRfcG9pbnRfY29udmVyc2lvbl9mb3JtOwotKwkJRUNfR1JPVVBfZ2V0X3BvaW50X2NvbnZfZm9ybTsKLSsJCVNUT1JFX21ldGhvZF9zZXRfc3RvcmVfZnVuY3Rpb247Ci0rCQlTVE9SRV9BVFRSX0lORk9faW47Ci0rCQlQRU1fcmVhZF9iaW9fRUNQS1BhcmFtZXRlcnM7Ci0rCQlFQ19HUk9VUF9nZXRfcGVudGFub21pYWxfYmFzaXM7Ci0rCQlFVlBfUEtFWV9hZGQxX2F0dHJfYnlfdHh0OwotKwkJQk5fQkxJTkRJTkdfc2V0X2ZsYWdzOwotKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0MV9wb2xpY2llczsKLSsJCVg1MDlfVkVSSUZZX1BBUkFNX3NldDFfbmFtZTsKLSsJCVg1MDlfVkVSSUZZX1BBUkFNX3NldF9wdXJwb3NlOwotKwkJU1RPUkVfZ2V0X251bWJlcjsKLSsJCUVDRFNBX3NpZ25fc2V0dXA7Ci0rCQlCTl9HRjJtX21vZF9zb2x2ZV9xdWFkX2FycjsKLSsJCUVDX0tFWV91cF9yZWY7Ci0rCQlQT0xJQ1lfTUFQUElOR19mcmVlOwotKwkJQk5fR0YybV9tb2RfZGl2OwotKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0X2ZsYWdzOwotKwkJRUNfS0VZX2ZyZWU7Ci0rCQlTVE9SRV9tZXRoX3NldF9saXN0X25leHRfZm47Ci0rCQlTVE9SRV9tZXRob2Rfc2V0X2xpc3RfbmV4dF9mdW5jdGlvbjsKLSsJCVBFTV93cml0ZV9iaW9fRUNQcml2YXRlS2V5OwotKwkJZDJpX0VDX1BVQktFWTsKLSsJCVNUT1JFX21ldGhfZ2V0X2dlbmVyYXRlX2ZuOwotKwkJU1RPUkVfbWV0aG9kX2dldF9nZW5lcmF0ZV9mdW5jdGlvbjsKLSsJCVNUT1JFX21ldGhfc2V0X2xpc3RfZW5kX2ZuOwotKwkJU1RPUkVfbWV0aG9kX3NldF9saXN0X2VuZF9mdW5jdGlvbjsKLSsJCXBxdWV1ZV9wcmludDsKLSsJCUVDX0dST1VQX2hhdmVfcHJlY29tcHV0ZV9tdWx0OwotKwkJRUNfS0VZX3ByaW50X2ZwOwotKwkJQk5fR0YybV9tb2RfYXJyOwotKwkJUEVNX3dyaXRlX2Jpb19YNTA5X0NFUlRfUEFJUjsKLSsJCUVWUF9QS0VZX2NtcDsKLSsJCVg1MDlfcG9saWN5X2xldmVsX25vZGVfY291bnQ7Ci0rCQlTVE9SRV9uZXdfZW5naW5lOwotKwkJU1RPUkVfbGlzdF9wdWJsaWNfa2V5X3N0YXJ0OwotKwkJWDUwOV9WRVJJRllfUEFSQU1fbmV3OwotKwkJRUNESF9nZXRfZXhfZGF0YTsKLSsJCUVWUF9QS0VZX2dldF9hdHRyOwotKwkJRUNEU0FfZG9fc2lnbjsKLSsJCUVOR0lORV91bnJlZ2lzdGVyX0VDREg7Ci0rCQlFQ0RIX09wZW5TU0w7Ci0rCQlFQ19LRVlfc2V0X2NvbnZfZm9ybTsKLSsJCUVDX1BPSU5UX2R1cDsKLSsJCUdFTkVSQUxfU1VCVFJFRV9uZXc7Ci0rCQlTVE9SRV9saXN0X2NybF9lbmRwOwotKwkJRUNfZ2V0X2J1aWx0aW5fY3VydmVzOwotKwkJWDUwOV9wb2xpY3lfbm9kZV9nZXQwX3F1YWxpZmllcnM7Ci0rCQlYNTA5X3BjeV9ub2RlX2dldDBfcXVhbGlmaWVyczsKLSsJCVNUT1JFX2xpc3RfY3JsX2VuZDsKLSsJCUVWUF9QS0VZX3NldDFfRUNfS0VZOwotKwkJQk5fR0YybV9tb2Rfc3FydF9hcnI7Ci0rCQlpMmRfRUNQcml2YXRlS2V5X2JpbzsKLSsJCUVDUEtQYXJhbWV0ZXJzX3ByaW50X2ZwOwotKwkJcHF1ZXVlX2ZpbmQ7Ci0rCQlFQ0RTQV9TSUdfZnJlZTsKLSsJCVBFTV93cml0ZV9iaW9fRUNQS1BhcmFtZXRlcnM7Ci0rCQlTVE9SRV9tZXRob2Rfc2V0X2N0cmxfZnVuY3Rpb247Ci0rCQlTVE9SRV9saXN0X3B1YmxpY19rZXlfZW5kOwotKwkJRUNfS0VZX3NldF9wcml2YXRlX2tleTsKLSsJCXBxdWV1ZV9wZWVrOwotKwkJU1RPUkVfZ2V0X2FyYml0cmFyeTsKLSsJCVNUT1JFX3N0b3JlX2NybDsKLSsJCVg1MDlfcG9saWN5X25vZGVfZ2V0MF9wb2xpY3k7Ci0rCQlQS0NTMTJfYWRkX3NhZmVzOwotKwkJQk5fQkxJTkRJTkdfY29udmVydF9leDsKLSsJCVg1MDlfcG9saWN5X3RyZWVfZnJlZTsKLSsJCU9QRU5TU0xfaWEzMmNhcF9sb2M7Ci0rCQlCTl9HRjJtX3BvbHkyYXJyOwotKwkJU1RPUkVfY3RybDsKLSsJCVNUT1JFX0FUVFJfSU5GT19jb21wYXJlOwotKwkJQk5fZ2V0MF9uaXN0X3ByaW1lXzIyNDsKLSsJCWkyZF9FQ1BhcmFtZXRlcnM7Ci0rCQlpMmRfRUNQS1BhcmFtZXRlcnM7Ci0rCQlCTl9HRU5DQl9jYWxsOwotKwkJZDJpX0VDUEtQYXJhbWV0ZXJzOwotKwkJU1RPUkVfbWV0aF9zZXRfZ2VuZXJhdGVfZm47Ci0rCQlTVE9SRV9tZXRob2Rfc2V0X2dlbmVyYXRlX2Z1bmN0aW9uOwotKwkJRU5HSU5FX3NldF9FQ0RIOwotKwkJTkFNRV9DT05TVFJBSU5UU19uZXc7Ci0rCQlTSEEyNTZfSW5pdDsKLSsJCUVDX0tFWV9nZXQwX3B1YmxpY19rZXk7Ci0rCQlQRU1fd3JpdGVfYmlvX0VDX1BVQktFWTsKLSsJCVNUT1JFX0FUVFJfSU5GT19zZXRfY3N0cjsKLSsJCVNUT1JFX2xpc3RfY3JsX25leHQ7Ci0rCQlTVE9SRV9BVFRSX0lORk9faW5fcmFuZ2U7Ci0rCQlFQ1BhcmFtZXRlcnNfcHJpbnQ7Ci0rCQlTVE9SRV9tZXRoX3NldF9kZWxldGVfZm47Ci0rCQlTVE9SRV9tZXRob2Rfc2V0X2RlbGV0ZV9mdW5jdGlvbjsKLSsJCVNUT1JFX2xpc3RfY2VydGlmaWNhdGVfbmV4dDsKLSsJCUFTTjFfZ2VuZXJhdGVfbmNvbmY7Ci0rCQlCVUZfbWVtZHVwOwotKwkJQk5fR0YybV9tb2RfbXVsOwotKwkJU1RPUkVfbWV0aF9nZXRfbGlzdF9uZXh0X2ZuOwotKwkJU1RPUkVfbWV0aG9kX2dldF9saXN0X25leHRfZnVuY3Rpb247Ci0rCQlTVE9SRV9BVFRSX0lORk9fZ2V0MF9kbjsKLSsJCVNUT1JFX2xpc3RfcHJpdmF0ZV9rZXlfbmV4dDsKLSsJCUVDX0dST1VQX3NldF9zZWVkOwotKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0X3RydXN0OwotKwkJU1RPUkVfQVRUUl9JTkZPX2ZyZWU7Ci0rCQlTVE9SRV9nZXRfcHJpdmF0ZV9rZXk7Ci0rCQlFVlBfUEtFWV9nZXRfYXR0cl9jb3VudDsKLSsJCVNUT1JFX0FUVFJfSU5GT19uZXc7Ci0rCQlFQ19HUk9VUF9nZXRfY3VydmVfR0YybTsKLSsJCVNUT1JFX21ldGhfc2V0X3Jldm9rZV9mbjsKLSsJCVNUT1JFX21ldGhvZF9zZXRfcmV2b2tlX2Z1bmN0aW9uOwotKwkJU1RPUkVfc3RvcmVfbnVtYmVyOwotKwkJQk5faXNfcHJpbWVfZXg7Ci0rCQlTVE9SRV9yZXZva2VfcHVibGljX2tleTsKLSsJCVg1MDlfU1RPUkVfQ1RYX2dldDBfcGFyYW07Ci0rCQlTVE9SRV9kZWxldGVfYXJiaXRyYXJ5OwotKwkJUEVNX3JlYWRfWDUwOV9DRVJUX1BBSVI7Ci0rCQlYNTA5X1NUT1JFX3NldF9kZXB0aDsKLSsJCUVDRFNBX2dldF9leF9kYXRhOwotKwkJU0hBMjI0OwotKwkJQklPX2R1bXBfaW5kZW50X2ZwOwotKwkJRUNfS0VZX3NldF9ncm91cDsKLSsJCUJVRl9zdHJuZHVwOwotKwkJU1RPUkVfbGlzdF9jZXJ0aWZpY2F0ZV9zdGFydDsKLSsJCUJOX0dGMm1fbW9kOwotKwkJWDUwOV9SRVFfY2hlY2tfcHJpdmF0ZV9rZXk7Ci0rCQlFQ19HUk9VUF9nZXRfc2VlZF9sZW47Ci0rCQlFUlJfbG9hZF9TVE9SRV9zdHJpbmdzOwotKwkJUEVNX3JlYWRfYmlvX0VDX1BVQktFWTsKLSsJCVNUT1JFX2xpc3RfcHJpdmF0ZV9rZXlfZW5kOwotKwkJaTJkX0VDX1BVQktFWTsKLSsJCUVDRFNBX2dldF9kZWZhdWx0X21ldGhvZDsKLSsJCUFTTjFfcHV0X2VvYzsKLSsJCVg1MDlfU1RPUkVfQ1RYX2dldF9leHBsaWNpdF9wb2xpY3k7Ci0rCQlYNTA5X1NUT1JFX0NUWF9nZXRfZXhwbF9wb2xpY3k7Ci0rCQlYNTA5X1ZFUklGWV9QQVJBTV90YWJsZV9jbGVhbnVwOwotKwkJU1RPUkVfbW9kaWZ5X3ByaXZhdGVfa2V5OwotKwkJWDUwOV9WRVJJRllfUEFSQU1fZnJlZTsKLSsJCUVDX01FVEhPRF9nZXRfZmllbGRfdHlwZTsKLSsJCUVDX0dGcF9uaXN0X21ldGhvZDsKLSsJCVNUT1JFX21ldGhfc2V0X21vZGlmeV9mbjsKLSsJCVNUT1JFX21ldGhvZF9zZXRfbW9kaWZ5X2Z1bmN0aW9uOwotKwkJU1RPUkVfcGFyc2VfYXR0cnNfbmV4dDsKLSsJCUVOR0lORV9sb2FkX3BhZGxvY2s7Ci0rCQlFQ19HUk9VUF9zZXRfY3VydmVfbmFtZTsKLSsJCVg1MDlfQ0VSVF9QQUlSX2l0OwotKwkJU1RPUkVfbWV0aF9nZXRfcmV2b2tlX2ZuOwotKwkJU1RPUkVfbWV0aG9kX2dldF9yZXZva2VfZnVuY3Rpb247Ci0rCQlTVE9SRV9tZXRob2Rfc2V0X2dldF9mdW5jdGlvbjsKLSsJCVNUT1JFX21vZGlmeV9udW1iZXI7Ci0rCQlTVE9SRV9tZXRob2RfZ2V0X3N0b3JlX2Z1bmN0aW9uOwotKwkJU1RPUkVfc3RvcmVfcHJpdmF0ZV9rZXk7Ci0rCQlCTl9HRjJtX21vZF9zcXJfYXJyOwotKwkJUlNBX3NldHVwX2JsaW5kaW5nOwotKwkJQklPX3NfZGF0YWdyYW07Ci0rCQlTVE9SRV9NZW1vcnk7Ci0rCQlza19maW5kX2V4OwotKwkJRUNfR1JPVVBfc2V0X2N1cnZlX0dGMm07Ci0rCQlFTkdJTkVfc2V0X2RlZmF1bHRfRUNEU0E7Ci0rCQlQT0xJQ1lfQ09OU1RSQUlOVFNfbmV3OwotKwkJQk5fR0YybV9tb2Rfc3FydDsKLSsJCUVDREhfc2V0X2RlZmF1bHRfbWV0aG9kOwotKwkJRUNfS0VZX2dlbmVyYXRlX2tleTsKLSsJCVNIQTM4NF9VcGRhdGU7Ci0rCQlCTl9HRjJtX2FycjJwb2x5OwotKwkJU1RPUkVfbWV0aG9kX2dldF9nZXRfZnVuY3Rpb247Ci0rCQlTVE9SRV9tZXRoX3NldF9jbGVhbnVwX2ZuOwotKwkJU1RPUkVfbWV0aG9kX3NldF9jbGVhbnVwX2Z1bmN0aW9uOwotKwkJRUNfR1JPVVBfY2hlY2s7Ci0rCQlkMmlfRUNQcml2YXRlS2V5X2JpbzsKLSsJCUVDX0tFWV9pbnNlcnRfa2V5X21ldGhvZF9kYXRhOwotKwkJU1RPUkVfbWV0aF9nZXRfbG9ja19zdG9yZV9mbjsKLSsJCVNUT1JFX21ldGhvZF9nZXRfbG9ja19zdG9yZV9mdW5jdGlvbjsKLSsJCVg1MDlfVkVSSUZZX1BBUkFNX2dldF9kZXB0aDsKLSsJCVNIQTIyNF9GaW5hbDsKLSsJCVNUT1JFX21ldGhfc2V0X3VwZGF0ZV9zdG9yZV9mbjsKLSsJCVNUT1JFX21ldGhvZF9zZXRfdXBkYXRlX3N0b3JlX2Z1bmN0aW9uOwotKwkJU0hBMjI0X1VwZGF0ZTsKLSsJCWQyaV9FQ1ByaXZhdGVLZXk7Ci0rCQlBU04xX2l0ZW1fbmRlZl9pMmQ7Ci0rCQlTVE9SRV9kZWxldGVfcHJpdmF0ZV9rZXk7Ci0rCQlFUlJfcG9wX3RvX21hcms7Ci0rCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX1NUT1JFOwotKwkJWDUwOV9wb2xpY3lfbGV2ZWxfZ2V0MF9ub2RlOwotKwkJaTJkX1BLQ1M3X05ERUY7Ci0rCQlFQ19HUk9VUF9nZXRfZGVncmVlOwotKwkJQVNOMV9nZW5lcmF0ZV92MzsKLSsJCVNUT1JFX0FUVFJfSU5GT19tb2RpZnlfY3N0cjsKLSsJCVg1MDlfcG9saWN5X3RyZWVfbGV2ZWxfY291bnQ7Ci0rCQlCTl9HRjJtX2FkZDsKLSsJCUVDX0tFWV9nZXQwX2dyb3VwOwotKwkJU1RPUkVfZ2VuZXJhdGVfY3JsOwotKwkJU1RPUkVfc3RvcmVfcHVibGljX2tleTsKLSsJCVg1MDlfQ0VSVF9QQUlSX2ZyZWU7Ci0rCQlTVE9SRV9yZXZva2VfcHJpdmF0ZV9rZXk7Ci0rCQlCTl9uaXN0X21vZF8yMjQ7Ci0rCQlTSEE1MTJfRmluYWw7Ci0rCQlTVE9SRV9BVFRSX0lORk9fbW9kaWZ5X2RuOwotKwkJU1RPUkVfbWV0aF9nZXRfaW5pdGlhbGlzZV9mbjsKLSsJCVNUT1JFX21ldGhvZF9nZXRfaW5pdGlhbGlzZV9mdW5jdGlvbjsKLSsJCVNUT1JFX2RlbGV0ZV9udW1iZXI7Ci0rCQlpMmRfRUNfUFVCS0VZX2JpbzsKLSsJCUJJT19kZ3JhbV9ub25fZmF0YWxfZXJyb3I7Ci0rCQlFQ19HUk9VUF9nZXRfYXNuMV9mbGFnOwotKwkJU1RPUkVfQVRUUl9JTkZPX2luX2V4OwotKwkJU1RPUkVfbGlzdF9jcmxfc3RhcnQ7Ci0rCQlFQ0RIX2dldF9leF9uZXdfaW5kZXg7Ci0rCQlTVE9SRV9tZXRoX2dldF9tb2RpZnlfZm47Ci0rCQlTVE9SRV9tZXRob2RfZ2V0X21vZGlmeV9mdW5jdGlvbjsKLSsJCXYyaV9BU04xX0JJVF9TVFJJTkc7Ci0rCQlTVE9SRV9zdG9yZV9jZXJ0aWZpY2F0ZTsKLSsJCU9CSl9ic2VhcmNoX2V4OwotKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2RlZmF1bHQ7Ci0rCQlTVE9SRV9BVFRSX0lORk9fc2V0X3NoYTFzdHI7Ci0rCQlCTl9HRjJtX21vZF9pbnY7Ci0rCQlCTl9HRjJtX21vZF9leHA7Ci0rCQlTVE9SRV9tb2RpZnlfcHVibGljX2tleTsKLSsJCVNUT1JFX21ldGhfZ2V0X2xpc3Rfc3RhcnRfZm47Ci0rCQlTVE9SRV9tZXRob2RfZ2V0X2xpc3Rfc3RhcnRfZnVuY3Rpb247Ci0rCQlFQ19HUk9VUF9nZXQwX3NlZWQ7Ci0rCQlTVE9SRV9zdG9yZV9hcmJpdHJhcnk7Ci0rCQlTVE9SRV9tZXRoX3NldF91bmxvY2tfc3RvcmVfZm47Ci0rCQlTVE9SRV9tZXRob2Rfc2V0X3VubG9ja19zdG9yZV9mdW5jdGlvbjsKLSsJCUJOX0dGMm1fbW9kX2Rpdl9hcnI7Ci0rCQlFTkdJTkVfc2V0X0VDRFNBOwotKwkJU1RPUkVfY3JlYXRlX21ldGhvZDsKLSsJCUVDUEtQYXJhbWV0ZXJzX3ByaW50OwotKwkJRUNfS0VZX2dldDBfcHJpdmF0ZV9rZXk7Ci0rCQlQRU1fd3JpdGVfRUNfUFVCS0VZOwotKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0MTsKLSsJCUVDREhfc2V0X21ldGhvZDsKLSsJCXYyaV9HRU5FUkFMX05BTUVfZXg7Ci0rCQlFQ0RIX3NldF9leF9kYXRhOwotKwkJU1RPUkVfZ2VuZXJhdGVfa2V5OwotKwkJQk5fbmlzdF9tb2RfNTIxOwotKwkJWDUwOV9wb2xpY3lfdHJlZV9nZXQwX2xldmVsOwotKwkJRUNfR1JPVVBfc2V0X3BvaW50X2NvbnZlcnNpb25fZm9ybTsKLSsJCUVDX0dST1VQX3NldF9wb2ludF9jb252X2Zvcm07Ci0rCQlQRU1fcmVhZF9FQ19QVUJLRVk7Ci0rCQlpMmRfRUNEU0FfU0lHOwotKwkJRUNEU0FfT3BlblNTTDsKLSsJCVNUT1JFX2RlbGV0ZV9jcmw7Ci0rCQlFQ19LRVlfZ2V0X2VuY19mbGFnczsKLSsJCUFTTjFfY29uc3RfY2hlY2tfaW5maW5pdGVfZW5kOwotKwkJRVZQX1BLRVlfZGVsZXRlX2F0dHI7Ci0rCQlFQ0RTQV9zZXRfZGVmYXVsdF9tZXRob2Q7Ci0rCQlFQ19QT0lOVF9zZXRfY29tcHJlc3NlZF9jb29yZGluYXRlc19HRjJtOwotKwkJRUNfUE9JTlRfc2V0X2NvbXByX2Nvb3Jkc19HRjJtOwotKwkJRUNfR1JPVVBfY21wOwotKwkJU1RPUkVfcmV2b2tlX2NlcnRpZmljYXRlOwotKwkJQk5fZ2V0MF9uaXN0X3ByaW1lXzI1NjsKLSsJCVNUT1JFX21ldGhfZ2V0X2RlbGV0ZV9mbjsKLSsJCVNUT1JFX21ldGhvZF9nZXRfZGVsZXRlX2Z1bmN0aW9uOwotKwkJU0hBMjI0X0luaXQ7Ci0rCQlQRU1fcmVhZF9FQ1ByaXZhdGVLZXk7Ci0rCQlTSEE1MTJfSW5pdDsKLSsJCVNUT1JFX3BhcnNlX2F0dHJzX2VuZHA7Ci0rCQlCTl9zZXRfbmVnYXRpdmU7Ci0rCQlFUlJfbG9hZF9FQ0RTQV9zdHJpbmdzOwotKwkJRUNfR1JPVVBfZ2V0X2Jhc2lzX3R5cGU7Ci0rCQlTVE9SRV9saXN0X3B1YmxpY19rZXlfbmV4dDsKLSsJCWkydl9BU04xX0JJVF9TVFJJTkc7Ci0rCQlTVE9SRV9PQkpFQ1RfZnJlZTsKLSsJCUJOX25pc3RfbW9kXzM4NDsKLSsJCWkyZF9YNTA5X0NFUlRfUEFJUjsKLSsJCVBFTV93cml0ZV9FQ1BLUGFyYW1ldGVyczsKLSsJCUVDREhfY29tcHV0ZV9rZXk7Ci0rCQlTVE9SRV9BVFRSX0lORk9fZ2V0MF9zaGExc3RyOwotKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9FQ0RIOwotKwkJcHF1ZXVlX3BvcDsKLSsJCVNUT1JFX0FUVFJfSU5GT19nZXQwX2NzdHI7Ci0rCQlQT0xJQ1lfQ09OU1RSQUlOVFNfaXQ7Ci0rCQlTVE9SRV9nZXRfZXhfbmV3X2luZGV4OwotKwkJRVZQX1BLRVlfZ2V0X2F0dHJfYnlfT0JKOwotKwkJWDUwOV9WRVJJRllfUEFSQU1fYWRkMF9wb2xpY3k7Ci0rCQlCTl9HRjJtX21vZF9zb2x2ZV9xdWFkOwotKwkJU0hBMjU2OwotKwkJaTJkX0VDUHJpdmF0ZUtleV9mcDsKLSsJCVg1MDlfcG9saWN5X3RyZWVfZ2V0MF91c2VyX3BvbGljaWVzOwotKwkJWDUwOV9wY3lfdHJlZV9nZXQwX3Vzcl9wb2xpY2llczsKLSsJCU9QRU5TU0xfRElSX3JlYWQ7Ci0rCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX0VDRFNBOwotKwkJWDUwOV9WRVJJRllfUEFSQU1fbG9va3VwOwotKwkJRUNfUE9JTlRfZ2V0X2FmZmluZV9jb29yZGluYXRlc19HRjJtOwotKwkJRUNfUE9JTlRfZ2V0X2FmZmluZV9jb29yZHNfR0YybTsKLSsJCUVDX0dST1VQX2R1cDsKLSsJCUVOR0lORV9nZXRfZGVmYXVsdF9FQ0RTQTsKLSsJCUVDX0tFWV9uZXc7Ci0rCQlTSEEyNTZfVHJhbnNmb3JtOwotKwkJRUNfS0VZX3NldF9lbmNfZmxhZ3M7Ci0rCQlFQ0RTQV92ZXJpZnk7Ci0rCQlFQ19QT0lOVF9wb2ludDJoZXg7Ci0rCQlFTkdJTkVfZ2V0X1NUT1JFOwotKwkJU0hBNTEyOwotKwkJU1RPUkVfZ2V0X2NlcnRpZmljYXRlOwotKwkJRUNEU0FfZG9fc2lnbl9leDsKLSsJCUVDRFNBX2RvX3ZlcmlmeTsKLSsJCWQyaV9FQ1ByaXZhdGVLZXlfZnA7Ci0rCQlTVE9SRV9kZWxldGVfY2VydGlmaWNhdGU7Ci0rCQlTSEE1MTJfVHJhbnNmb3JtOwotKwkJWDUwOV9TVE9SRV9zZXQxX3BhcmFtOwotKwkJU1RPUkVfbWV0aG9kX2dldF9jdHJsX2Z1bmN0aW9uOwotKwkJU1RPUkVfZnJlZTsKLSsJCVBFTV93cml0ZV9FQ1ByaXZhdGVLZXk7Ci0rCQlTVE9SRV9tZXRoX2dldF91bmxvY2tfc3RvcmVfZm47Ci0rCQlTVE9SRV9tZXRob2RfZ2V0X3VubG9ja19zdG9yZV9mdW5jdGlvbjsKLSsJCVNUT1JFX2dldF9leF9kYXRhOwotKwkJRUNfS0VZX3NldF9wdWJsaWNfa2V5OwotKwkJUEVNX3JlYWRfRUNQS1BhcmFtZXRlcnM7Ci0rCQlYNTA5X0NFUlRfUEFJUl9uZXc7Ci0rCQlFTkdJTkVfcmVnaXN0ZXJfU1RPUkU7Ci0rCQlSU0FfZ2VuZXJhdGVfa2V5X2V4OwotKwkJRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXg7Ci0rCQlFQ1BhcmFtZXRlcnNfcHJpbnRfZnA7Ci0rCQlYNTA5VjNfTkFNRV9mcm9tX3NlY3Rpb247Ci0rCQlFVlBfUEtFWV9hZGQxX2F0dHI7Ci0rCQlTVE9SRV9tb2RpZnlfY3JsOwotKwkJU1RPUkVfbGlzdF9wcml2YXRlX2tleV9zdGFydDsKLSsJCVBPTElDWV9NQVBQSU5HU19pdDsKLSsJCUdFTkVSQUxfU1VCVFJFRV9pdDsKLSsJCUVDX0dST1VQX2dldF9jdXJ2ZV9uYW1lOwotKwkJUEVNX3dyaXRlX1g1MDlfQ0VSVF9QQUlSOwotKwkJQklPX2R1bXBfaW5kZW50X2NiOwotKwkJZDJpX1g1MDlfQ0VSVF9QQUlSOwotKwkJU1RPUkVfbGlzdF9wcml2YXRlX2tleV9lbmRwOwotKwkJYXNuMV9jb25zdF9GaW5pc2g7Ci0rCQlpMmRfRUNfUFVCS0VZX2ZwOwotKwkJQk5fbmlzdF9tb2RfMjU2OwotKwkJWDUwOV9WRVJJRllfUEFSQU1fYWRkMF90YWJsZTsKLSsJCXBxdWV1ZV9mcmVlOwotKwkJQk5fQkxJTkRJTkdfY3JlYXRlX3BhcmFtOwotKwkJRUNEU0Ffc2l6ZTsKLSsJCWQyaV9FQ19QVUJLRVlfYmlvOwotKwkJQk5fZ2V0MF9uaXN0X3ByaW1lXzUyMTsKLSsJCVNUT1JFX0FUVFJfSU5GT19tb2RpZnlfc2hhMXN0cjsKLSsJCUJOX2dlbmVyYXRlX3ByaW1lX2V4OwotKwkJRUNfR1JPVVBfbmV3X2J5X2N1cnZlX25hbWU7Ci0rCQlTSEEyNTZfRmluYWw7Ci0rCQlESF9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4OwotKwkJUEVNX3JlYWRfYmlvX0VDUHJpdmF0ZUtleTsKLSsJCVNUT1JFX21ldGhfZ2V0X2NsZWFudXBfZm47Ci0rCQlTVE9SRV9tZXRob2RfZ2V0X2NsZWFudXBfZnVuY3Rpb247Ci0rCQlFTkdJTkVfZ2V0X0VDREg7Ci0rCQlkMmlfRUNEU0FfU0lHOwotKwkJQk5faXNfcHJpbWVfZmFzdHRlc3RfZXg7Ci0rCQlFQ0RTQV9zaWduOwotKwkJWDUwOV9wb2xpY3lfY2hlY2s7Ci0rCQlFVlBfUEtFWV9nZXRfYXR0cl9ieV9OSUQ7Ci0rCQlTVE9SRV9zZXRfZXhfZGF0YTsKLSsJCUVOR0lORV9nZXRfRUNEU0E7Ci0rCQlFVlBfZWNkc2E7Ci0rCQlCTl9CTElORElOR19nZXRfZmxhZ3M7Ci0rCQlQS0NTMTJfYWRkX2NlcnQ7Ci0rCQlTVE9SRV9PQkpFQ1RfbmV3OwotKwkJRVJSX2xvYWRfRUNESF9zdHJpbmdzOwotKwkJRUNfS0VZX2R1cDsKLSsJCUVWUF9DSVBIRVJfQ1RYX3JhbmRfa2V5OwotKwkJRUNEU0Ffc2V0X21ldGhvZDsKLSsJCWEyaV9JUEFERFJFU1NfTkM7Ci0rCQlkMmlfRUNQYXJhbWV0ZXJzOwotKwkJU1RPUkVfbGlzdF9jZXJ0aWZpY2F0ZV9lbmQ7Ci0rCQlTVE9SRV9nZXRfY3JsOwotKwkJWDUwOV9QT0xJQ1lfTk9ERV9wcmludDsKLSsJCVNIQTM4NF9Jbml0OwotKwkJRUNfR0YybV9zaW1wbGVfbWV0aG9kOwotKwkJRUNEU0Ffc2V0X2V4X2RhdGE7Ci0rCQlTSEEzODRfRmluYWw7Ci0rCQlQS0NTN19zZXRfZGlnZXN0OwotKwkJRUNfS0VZX3ByaW50OwotKwkJU1RPUkVfbWV0aF9zZXRfbG9ja19zdG9yZV9mbjsKLSsJCVNUT1JFX21ldGhvZF9zZXRfbG9ja19zdG9yZV9mdW5jdGlvbjsKLSsJCUVDRFNBX2dldF9leF9uZXdfaW5kZXg7Ci0rCQlTSEEzODQ7Ci0rCQlQT0xJQ1lfTUFQUElOR19uZXc7Ci0rCQlTVE9SRV9saXN0X2NlcnRpZmljYXRlX2VuZHA7Ci0rCQlYNTA5X1NUT1JFX0NUWF9nZXQwX3BvbGljeV90cmVlOwotKwkJRUNfR1JPVVBfc2V0X2FzbjFfZmxhZzsKLSsJCUVDX0tFWV9jaGVja19rZXk7Ci0rCQlkMmlfRUNfUFVCS0VZX2ZwOwotKwkJUEtDUzdfc2V0MF90eXBlX290aGVyOwotKwkJUEVNX3JlYWRfYmlvX1g1MDlfQ0VSVF9QQUlSOwotKwkJcHF1ZXVlX25leHQ7Ci0rCQlTVE9SRV9tZXRoX2dldF9saXN0X2VuZF9mbjsKLSsJCVNUT1JFX21ldGhvZF9nZXRfbGlzdF9lbmRfZnVuY3Rpb247Ci0rCQlFVlBfUEtFWV9hZGQxX2F0dHJfYnlfT0JKOwotKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0X3RpbWU7Ci0rCQlwcXVldWVfbmV3OwotKwkJRU5HSU5FX3NldF9kZWZhdWx0X0VDREg7Ci0rCQlTVE9SRV9uZXdfbWV0aG9kOwotKwkJUEtDUzEyX2FkZF9rZXk7Ci0rCQlEU09fbWVyZ2U7Ci0rCQlFQ19QT0lOVF9oZXgycG9pbnQ7Ci0rCQlCSU9fZHVtcF9jYjsKLSsJCVNIQTI1Nl9VcGRhdGU7Ci0rCQlwcXVldWVfaW5zZXJ0OwotKwkJcGl0ZW1fZnJlZTsKLSsJCUJOX0dGMm1fbW9kX2ludl9hcnI7Ci0rCQlFTkdJTkVfdW5yZWdpc3Rlcl9FQ0RTQTsKLSsJCUJOX0JMSU5ESU5HX3NldF90aHJlYWRfaWQ7Ci0rCQlnZXRfcmZjMzUyNl9wcmltZV84MTkyOwotKwkJWDUwOV9WRVJJRllfUEFSQU1fY2xlYXJfZmxhZ3M7Ci0rCQlnZXRfcmZjMjQwOV9wcmltZV8xMDI0OwotKwkJREhfY2hlY2tfcHViX2tleTsKLSsJCWdldF9yZmMzNTI2X3ByaW1lXzIwNDg7Ci0rCQlnZXRfcmZjMzUyNl9wcmltZV82MTQ0OwotKwkJZ2V0X3JmYzM1MjZfcHJpbWVfMTUzNjsKLSsJCWdldF9yZmMzNTI2X3ByaW1lXzMwNzI7Ci0rCQlnZXRfcmZjMzUyNl9wcmltZV80MDk2OwotKwkJZ2V0X3JmYzI0MDlfcHJpbWVfNzY4OwotKwkJWDUwOV9WRVJJRllfUEFSQU1fZ2V0X2ZsYWdzOwotKwkJRVZQX0NJUEhFUl9DVFhfbmV3OwotKwkJRVZQX0NJUEhFUl9DVFhfZnJlZTsKLSsJCUNhbWVsbGlhX2NiY19lbmNyeXB0OwotKwkJQ2FtZWxsaWFfY2ZiMTI4X2VuY3J5cHQ7Ci0rCQlDYW1lbGxpYV9jZmIxX2VuY3J5cHQ7Ci0rCQlDYW1lbGxpYV9jZmI4X2VuY3J5cHQ7Ci0rCQlDYW1lbGxpYV9jdHIxMjhfZW5jcnlwdDsKLSsJCUNhbWVsbGlhX2NmYnJfZW5jcnlwdF9ibG9jazsKLSsJCUNhbWVsbGlhX2RlY3J5cHQ7Ci0rCQlDYW1lbGxpYV9lY2JfZW5jcnlwdDsKLSsJCUNhbWVsbGlhX2VuY3J5cHQ7Ci0rCQlDYW1lbGxpYV9vZmIxMjhfZW5jcnlwdDsKLSsJCUNhbWVsbGlhX3NldF9rZXk7Ci0rCQlFVlBfY2FtZWxsaWFfMTI4X2NiYzsKLSsJCUVWUF9jYW1lbGxpYV8xMjhfY2ZiMTI4OwotKwkJRVZQX2NhbWVsbGlhXzEyOF9jZmIxOwotKwkJRVZQX2NhbWVsbGlhXzEyOF9jZmI4OwotKwkJRVZQX2NhbWVsbGlhXzEyOF9lY2I7Ci0rCQlFVlBfY2FtZWxsaWFfMTI4X29mYjsKLSsJCUVWUF9jYW1lbGxpYV8xOTJfY2JjOwotKwkJRVZQX2NhbWVsbGlhXzE5Ml9jZmIxMjg7Ci0rCQlFVlBfY2FtZWxsaWFfMTkyX2NmYjE7Ci0rCQlFVlBfY2FtZWxsaWFfMTkyX2NmYjg7Ci0rCQlFVlBfY2FtZWxsaWFfMTkyX2VjYjsKLSsJCUVWUF9jYW1lbGxpYV8xOTJfb2ZiOwotKwkJRVZQX2NhbWVsbGlhXzI1Nl9jYmM7Ci0rCQlFVlBfY2FtZWxsaWFfMjU2X2NmYjEyODsKLSsJCUVWUF9jYW1lbGxpYV8yNTZfY2ZiMTsKLSsJCUVWUF9jYW1lbGxpYV8yNTZfY2ZiODsKLSsJCUVWUF9jYW1lbGxpYV8yNTZfZWNiOwotKwkJRVZQX2NhbWVsbGlhXzI1Nl9vZmI7Ci0rCQlhMmlfaXBhZGQ7Ci0rCQlBU0lkZW50aWZpZXJzX2ZyZWU7Ci0rCQlpMmRfQVNJZE9yUmFuZ2U7Ci0rCQlFVlBfQ0lQSEVSX2Jsb2NrX3NpemU7Ci0rCQl2M19hc2lkX2lzX2Nhbm9uaWNhbDsKLSsJCUlQQWRkcmVzc0Nob2ljZV9mcmVlOwotKwkJRVZQX0NJUEhFUl9DVFhfc2V0X2FwcF9kYXRhOwotKwkJQklPX3NldF9jYWxsYmFja19hcmc7Ci0rCQl2M19hZGRyX2FkZF9wcmVmaXg7Ci0rCQlJUEFkZHJlc3NPclJhbmdlX2l0OwotKwkJQklPX3NldF9mbGFnczsKLSsJCUFTSWRlbnRpZmllcnNfaXQ7Ci0rCQl2M19hZGRyX2dldF9yYW5nZTsKLSsJCUJJT19tZXRob2RfdHlwZTsKLSsJCXYzX2FkZHJfaW5oZXJpdHM7Ci0rCQlJUEFkZHJlc3NDaG9pY2VfaXQ7Ci0rCQlBRVNfaWdlX2VuY3J5cHQ7Ci0rCQl2M19hZGRyX2FkZF9yYW5nZTsKLSsJCUVWUF9DSVBIRVJfQ1RYX25pZDsKLSsJCWQyaV9BU1JhbmdlOwotKwkJdjNfYWRkcl9hZGRfaW5oZXJpdDsKLSsJCXYzX2FzaWRfYWRkX2lkX29yX3JhbmdlOwotKwkJdjNfYWRkcl92YWxpZGF0ZV9yZXNvdXJjZV9zZXQ7Ci0rCQlFVlBfQ0lQSEVSX2l2X2xlbmd0aDsKLSsJCUVWUF9NRF90eXBlOwotKwkJdjNfYXNpZF9jYW5vbml6ZTsKLSsJCUlQQWRkcmVzc1JhbmdlX2ZyZWU7Ci0rCQl2M19hc2lkX2FkZF9pbmhlcml0OwotKwkJRVZQX0NJUEhFUl9DVFhfa2V5X2xlbmd0aDsKLSsJCUlQQWRkcmVzc1JhbmdlX25ldzsKLSsJCUFTSWRPclJhbmdlX25ldzsKLSsJCUVWUF9NRF9zaXplOwotKwkJRVZQX01EX0NUWF90ZXN0X2ZsYWdzOwotKwkJQklPX2NsZWFyX2ZsYWdzOwotKwkJaTJkX0FTUmFuZ2U7Ci0rCQlJUEFkZHJlc3NSYW5nZV9pdDsKLSsJCUlQQWRkcmVzc0Nob2ljZV9uZXc7Ci0rCQlBU0lkZW50aWZpZXJDaG9pY2VfbmV3OwotKwkJQVNSYW5nZV9mcmVlOwotKwkJRVZQX01EX3BrZXlfdHlwZTsKLSsJCUVWUF9NRF9DVFhfY2xlYXJfZmxhZ3M7Ci0rCQlJUEFkZHJlc3NGYW1pbHlfZnJlZTsKLSsJCWkyZF9JUEFkZHJlc3NGYW1pbHk7Ci0rCQlJUEFkZHJlc3NPclJhbmdlX25ldzsKLSsJCUVWUF9DSVBIRVJfZmxhZ3M7Ci0rCQl2M19hc2lkX3ZhbGlkYXRlX3Jlc291cmNlX3NldDsKLSsJCWQyaV9JUEFkZHJlc3NSYW5nZTsKLSsJCUFFU19iaV9pZ2VfZW5jcnlwdDsKLSsJCUJJT19nZXRfY2FsbGJhY2s7Ci0rCQlJUEFkZHJlc3NPclJhbmdlX2ZyZWU7Ci0rCQl2M19hZGRyX3N1YnNldDsKLSsJCWQyaV9JUEFkZHJlc3NGYW1pbHk7Ci0rCQl2M19hc2lkX3N1YnNldDsKLSsJCUJJT190ZXN0X2ZsYWdzOwotKwkJaTJkX0FTSWRlbnRpZmllckNob2ljZTsKLSsJCUFTUmFuZ2VfaXQ7Ci0rCQlkMmlfQVNJZGVudGlmaWVyczsKLSsJCUFTUmFuZ2VfbmV3OwotKwkJZDJpX0lQQWRkcmVzc0Nob2ljZTsKLSsJCXYzX2FkZHJfZ2V0X2FmaTsKLSsJCUVWUF9DSVBIRVJfa2V5X2xlbmd0aDsKLSsJCUVWUF9DaXBoZXI7Ci0rCQlpMmRfSVBBZGRyZXNzT3JSYW5nZTsKLSsJCUFTSWRPclJhbmdlX2l0OwotKwkJRVZQX0NJUEhFUl9uaWQ7Ci0rCQlpMmRfSVBBZGRyZXNzQ2hvaWNlOwotKwkJRVZQX0NJUEhFUl9DVFhfYmxvY2tfc2l6ZTsKLSsJCUFTSWRlbnRpZmllcnNfbmV3OwotKwkJdjNfYWRkcl92YWxpZGF0ZV9wYXRoOwotKwkJSVBBZGRyZXNzRmFtaWx5X25ldzsKLSsJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzOwotKwkJdjNfYWRkcl9pc19jYW5vbmljYWw7Ci0rCQlpMmRfSVBBZGRyZXNzUmFuZ2U7Ci0rCQlJUEFkZHJlc3NGYW1pbHlfaXQ7Ci0rCQl2M19hc2lkX2luaGVyaXRzOwotKwkJRVZQX0NJUEhFUl9DVFhfY2lwaGVyOwotKwkJRVZQX0NJUEhFUl9DVFhfZ2V0X2FwcF9kYXRhOwotKwkJRVZQX01EX2Jsb2NrX3NpemU7Ci0rCQlFVlBfQ0lQSEVSX0NUWF9mbGFnczsKLSsJCXYzX2FzaWRfdmFsaWRhdGVfcGF0aDsKLSsJCWQyaV9JUEFkZHJlc3NPclJhbmdlOwotKwkJdjNfYWRkcl9jYW5vbml6ZTsKLSsJCUFTSWRlbnRpZmllckNob2ljZV9pdDsKLSsJCUVWUF9NRF9DVFhfbWQ7Ci0rCQlkMmlfQVNJZGVudGlmaWVyQ2hvaWNlOwotKwkJQklPX21ldGhvZF9uYW1lOwotKwkJRVZQX0NJUEhFUl9DVFhfaXZfbGVuZ3RoOwotKwkJQVNJZE9yUmFuZ2VfZnJlZTsKLSsJCUFTSWRlbnRpZmllckNob2ljZV9mcmVlOwotKwkJQklPX2dldF9jYWxsYmFja19hcmc7Ci0rCQlCSU9fc2V0X2NhbGxiYWNrOwotKwkJZDJpX0FTSWRPclJhbmdlOwotKwkJaTJkX0FTSWRlbnRpZmllcnM7Ci0rCQlTRUVEX2RlY3J5cHQ7Ci0rCQlTRUVEX2VuY3J5cHQ7Ci0rCQlTRUVEX2NiY19lbmNyeXB0OwotKwkJRVZQX3NlZWRfb2ZiOwotKwkJU0VFRF9jZmIxMjhfZW5jcnlwdDsKLSsJCVNFRURfb2ZiMTI4X2VuY3J5cHQ7Ci0rCQlFVlBfc2VlZF9jYmM7Ci0rCQlTRUVEX2VjYl9lbmNyeXB0OwotKwkJRVZQX3NlZWRfZWNiOwotKwkJU0VFRF9zZXRfa2V5OwotKwkJRVZQX3NlZWRfY2ZiMTI4OwotKwkJWDUwOV9FWFRFTlNJT05TX2l0OwotKwkJWDUwOV9nZXQxX29jc3A7Ci0rCQlPQ1NQX1JFUV9DVFhfZnJlZTsKLSsJCWkyZF9YNTA5X0VYVEVOU0lPTlM7Ci0rCQlPQ1NQX3NlbmRyZXFfbmJpbzsKLSsJCU9DU1Bfc2VuZHJlcV9uZXc7Ci0rCQlkMmlfWDUwOV9FWFRFTlNJT05TOwotKwkJWDUwOV9BTEdPUlNfaXQ7Ci0rCQlYNTA5X0FMR09SX2dldDA7Ci0rCQlYNTA5X0FMR09SX3NldDA7Ci0rCQlBRVNfdW53cmFwX2tleTsKLSsJCUFFU193cmFwX2tleTsKLSsJCVg1MDlhdF9nZXQwX2RhdGFfYnlfT0JKOwotKwkJQVNOMV9UWVBFX3NldDE7Ci0rCQlBU04xX1NUUklOR19zZXQwOwotKwkJaTJkX1g1MDlfQUxHT1JTOwotKwkJQklPX2ZfemxpYjsKLSsJCUNPTVBfemxpYl9jbGVhbnVwOwotKwkJZDJpX1g1MDlfQUxHT1JTOwotKwkJQ01TX1JlY2VpcHRSZXF1ZXN0X2ZyZWU7Ci0rCQlQRU1fd3JpdGVfQ01TOwotKwkJQ01TX2FkZDBfQ2VydGlmaWNhdGVDaG9pY2VzOwotKwkJQ01TX3Vuc2lnbmVkX2FkZDFfYXR0cl9ieV9PQko7Ci0rCQlFUlJfbG9hZF9DTVNfc3RyaW5nczsKLSsJCUNNU19zaWduX3JlY2VpcHQ7Ci0rCQlpMmRfQ01TX0NvbnRlbnRJbmZvOwotKwkJQ01TX3NpZ25lZF9kZWxldGVfYXR0cjsKLSsJCWQyaV9DTVNfYmlvOwotKwkJQ01TX3Vuc2lnbmVkX2dldF9hdHRyX2J5X05JRDsKLSsJCUNNU192ZXJpZnk7Ci0rCQlTTUlNRV9yZWFkX0NNUzsKLSsJCUNNU19kZWNyeXB0X3NldDFfa2V5OwotKwkJQ01TX1NpZ25lckluZm9fZ2V0MF9hbGdzOwotKwkJQ01TX2FkZDFfY2VydDsKLSsJCUNNU19zZXRfZGV0YWNoZWQ7Ci0rCQlDTVNfZW5jcnlwdDsKLSsJCUNNU19FbnZlbG9wZWREYXRhX2NyZWF0ZTsKLSsJCUNNU191bmNvbXByZXNzOwotKwkJQ01TX2FkZDBfY3JsOwotKwkJQ01TX1NpZ25lckluZm9fdmVyaWZ5X2NvbnRlbnQ7Ci0rCQlDTVNfdW5zaWduZWRfZ2V0MF9kYXRhX2J5X09CSjsKLSsJCVBFTV93cml0ZV9iaW9fQ01TOwotKwkJQ01TX3Vuc2lnbmVkX2dldF9hdHRyOwotKwkJQ01TX1JlY2lwaWVudEluZm9fa3RyaV9jZXJ0X2NtcDsKLSsJCUNNU19SZWNpcGllbnRJbmZvX2t0cmlfZ2V0MF9hbGdzOwotKwkJQ01TX1JlY2lwSW5mb19rdHJpX2dldDBfYWxnczsKLSsJCUNNU19Db250ZW50SW5mb19mcmVlOwotKwkJQ01TX2ZpbmFsOwotKwkJQ01TX2FkZF9zaW1wbGVfc21pbWVjYXA7Ci0rCQlDTVNfU2lnbmVySW5mb192ZXJpZnk7Ci0rCQlDTVNfZGF0YTsKLSsJCUNNU19Db250ZW50SW5mb19pdDsKLSsJCWQyaV9DTVNfUmVjZWlwdFJlcXVlc3Q7Ci0rCQlDTVNfY29tcHJlc3M7Ci0rCQlDTVNfZGlnZXN0X2NyZWF0ZTsKLSsJCUNNU19TaWduZXJJbmZvX2NlcnRfY21wOwotKwkJQ01TX1NpZ25lckluZm9fc2lnbjsKLSsJCUNNU19kYXRhX2NyZWF0ZTsKLSsJCWkyZF9DTVNfYmlvOwotKwkJQ01TX0VuY3J5cHRlZERhdGFfc2V0MV9rZXk7Ci0rCQlDTVNfZGVjcnlwdDsKLSsJCWludF9zbWltZV93cml0ZV9BU04xOwotKwkJQ01TX3Vuc2lnbmVkX2RlbGV0ZV9hdHRyOwotKwkJQ01TX3Vuc2lnbmVkX2dldF9hdHRyX2NvdW50OwotKwkJQ01TX2FkZF9zbWltZWNhcDsKLSsJCVBFTV9yZWFkX0NNUzsKLSsJCUNNU19zaWduZWRfZ2V0X2F0dHJfYnlfT0JKOwotKwkJZDJpX0NNU19Db250ZW50SW5mbzsKLSsJCUNNU19hZGRfc3RhbmRhcmRfc21pbWVjYXA7Ci0rCQlDTVNfQ29udGVudEluZm9fbmV3OwotKwkJQ01TX1JlY2lwaWVudEluZm9fdHlwZTsKLSsJCUNNU19nZXQwX3R5cGU7Ci0rCQlDTVNfaXNfZGV0YWNoZWQ7Ci0rCQlDTVNfc2lnbjsKLSsJCUNNU19zaWduZWRfYWRkMV9hdHRyOwotKwkJQ01TX3Vuc2lnbmVkX2dldF9hdHRyX2J5X09CSjsKLSsJCVNNSU1FX3dyaXRlX0NNUzsKLSsJCUNNU19FbmNyeXB0ZWREYXRhX2RlY3J5cHQ7Ci0rCQlDTVNfZ2V0MF9SZWNpcGllbnRJbmZvczsKLSsJCUNNU19hZGQwX1Jldm9jYXRpb25JbmZvQ2hvaWNlOwotKwkJQ01TX2RlY3J5cHRfc2V0MV9wa2V5OwotKwkJQ01TX1NpZ25lckluZm9fc2V0MV9zaWduZXJfY2VydDsKLSsJCUNNU19nZXQwX3NpZ25lcnM7Ci0rCQlDTVNfUmVjZWlwdFJlcXVlc3RfZ2V0MF92YWx1ZXM7Ci0rCQlDTVNfc2lnbmVkX2dldDBfZGF0YV9ieV9PQko7Ci0rCQlDTVNfZ2V0MF9TaWduZXJJbmZvczsKLSsJCUNNU19hZGQwX2NlcnQ7Ci0rCQlDTVNfRW5jcnlwdGVkRGF0YV9lbmNyeXB0OwotKwkJQ01TX2RpZ2VzdF92ZXJpZnk7Ci0rCQlDTVNfc2V0MV9zaWduZXJzX2NlcnRzOwotKwkJQ01TX3NpZ25lZF9nZXRfYXR0cjsKLSsJCUNNU19SZWNpcGllbnRJbmZvX3NldDBfa2V5OwotKwkJQ01TX1NpZ25lZERhdGFfaW5pdDsKLSsJCUNNU19SZWNpcGllbnRJbmZvX2tla3JpX2dldDBfaWQ7Ci0rCQlDTVNfdmVyaWZ5X3JlY2VpcHQ7Ci0rCQlDTVNfUmVjZWlwdFJlcXVlc3RfaXQ7Ci0rCQlQRU1fcmVhZF9iaW9fQ01TOwotKwkJQ01TX2dldDFfY3JsczsKLSsJCUNNU19hZGQwX3JlY2lwaWVudF9rZXk7Ci0rCQlTTUlNRV9yZWFkX0FTTjE7Ci0rCQlDTVNfUmVjZWlwdFJlcXVlc3RfbmV3OwotKwkJQ01TX2dldDBfY29udGVudDsKLSsJCUNNU19nZXQxX1JlY2VpcHRSZXF1ZXN0OwotKwkJQ01TX3NpZ25lZF9hZGQxX2F0dHJfYnlfT0JKOwotKwkJQ01TX1JlY2lwaWVudEluZm9fa2VrcmlfaWRfY21wOwotKwkJQ01TX2FkZDFfUmVjZWlwdFJlcXVlc3Q7Ci0rCQlDTVNfU2lnbmVySW5mb19nZXQwX3NpZ25lcl9pZDsKLSsJCUNNU191bnNpZ25lZF9hZGQxX2F0dHJfYnlfTklEOwotKwkJQ01TX3Vuc2lnbmVkX2FkZDFfYXR0cjsKLSsJCUNNU19zaWduZWRfZ2V0X2F0dHJfYnlfTklEOwotKwkJQ01TX2dldDFfY2VydHM7Ci0rCQlDTVNfc2lnbmVkX2FkZDFfYXR0cl9ieV9OSUQ7Ci0rCQlDTVNfdW5zaWduZWRfYWRkMV9hdHRyX2J5X3R4dDsKLSsJCUNNU19kYXRhRmluYWw7Ci0rCQlDTVNfUmVjaXBpZW50SW5mb19rdHJpX2dldDBfc2lnbmVyX2lkOwotKwkJQ01TX1JlY2lwSW5mb19rdHJpX2dldDBfc2lncl9pZDsKLSsJCWkyZF9DTVNfUmVjZWlwdFJlcXVlc3Q7Ci0rCQlDTVNfYWRkMV9yZWNpcGllbnRfY2VydDsKLSsJCUNNU19kYXRhSW5pdDsKLSsJCUNNU19zaWduZWRfYWRkMV9hdHRyX2J5X3R4dDsKLSsJCUNNU19SZWNpcGllbnRJbmZvX2RlY3J5cHQ7Ci0rCQlDTVNfc2lnbmVkX2dldF9hdHRyX2NvdW50OwotKwkJQ01TX2dldDBfZUNvbnRlbnRUeXBlOwotKwkJQ01TX3NldDFfZUNvbnRlbnRUeXBlOwotKwkJQ01TX1JlY2VpcHRSZXF1ZXN0X2NyZWF0ZTA7Ci0rCQlDTVNfYWRkMV9zaWduZXI7Ci0rCQlDTVNfUmVjaXBpZW50SW5mb19zZXQwX3BrZXk7Ci0rCQlFTkdJTkVfc2V0X2xvYWRfc3NsX2NsaWVudF9jZXJ0X2Z1bmN0aW9uOwotKwkJRU5HSU5FX3NldF9sZF9zc2xfY2xudF9jZXJ0X2ZuOwotKwkJRU5HSU5FX2dldF9zc2xfY2xpZW50X2NlcnRfZnVuY3Rpb247Ci0rCQlFTkdJTkVfZ2V0X3NzbF9jbGllbnRfY2VydF9mbjsKLSsJCUVOR0lORV9sb2FkX3NzbF9jbGllbnRfY2VydDsKLSsJCUVOR0lORV9sb2FkX2NhcGk7Ci0rCQlPUEVOU1NMX2lzc2VydmljZTsKLSsJCUZJUFNfZHNhX3NpZ19kZWNvZGU7Ci0rCQlFVlBfQ0lQSEVSX0NUWF9jbGVhcl9mbGFnczsKLSsJCUZJUFNfcmFuZF9zdGF0dXM7Ci0rCQlGSVBTX3JhbmRfc2V0X2tleTsKLSsJCUNSWVBUT19zZXRfbWVtX2luZm9fZnVuY3Rpb25zOwotKwkJUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4OwotKwkJaW50X0VSUl9zZXRfc3RhdGVfZnVuYzsKLSsJCWludF9FVlBfTURfc2V0X2VuZ2luZV9jYWxsYmFja3M7Ci0rCQlpbnRfQ1JZUFRPX3NldF9kb19keW5sb2NrX2NhbGxiYWNrOwotKwkJRklQU19ybmdfc3RpY2s7Ci0rCQlFVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3M7Ci0rCQlCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4OwotKwkJRklQU19zZWxmdGVzdF9jaGVjazsKLSsJCUZJUFNfcmFuZF9zZXRfZHQ7Ci0rCQlDUllQVE9fZGJnX3BvcF9pbmZvOwotKwkJRklQU19kc2FfZnJlZTsKLSsJCVJTQV9YOTMxX2Rlcml2ZV9leDsKLSsJCUZJUFNfcnNhX25ldzsKLSsJCUZJUFNfcmFuZF9ieXRlczsKLSsJCWZpcHNfY2lwaGVyX3Rlc3Q7Ci0rCQlFVlBfQ0lQSEVSX0NUWF90ZXN0X2ZsYWdzOwotKwkJQ1JZUFRPX21hbGxvY19kZWJ1Z19pbml0OwotKwkJQ1JZUFRPX2RiZ19wdXNoX2luZm87Ci0rCQlGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbjsKLSsJCUZJUFNfZGhfbmV3OwotKwkJRklQU19jb3JydXB0X2RzYV9rZXlnZW47Ci0rCQlGSVBTX2RoX2ZyZWU7Ci0rCQlmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Q7Ci0rCQlFVlBfYWRkX2FsZ19tb2R1bGU7Ci0rCQlpbnRfUkFORF9pbml0X2VuZ2luZV9jYWxsYmFja3M7Ci0rCQlpbnRfRVZQX0NJUEhFUl9zZXRfZW5naW5lX2NhbGxiYWNrczsKLSsJCWludF9FVlBfTURfaW5pdF9lbmdpbmVfY2FsbGJhY2tzOwotKwkJRklQU19yYW5kX3Rlc3RfbW9kZTsKLSsJCUZJUFNfcmFuZF9yZXNldDsKLSsJCUZJUFNfZHNhX25ldzsKLSsJCWludF9SQU5EX3NldF9jYWxsYmFja3M7Ci0rCQlCTl9YOTMxX2Rlcml2ZV9wcmltZV9leDsKLSsJCWludF9FUlJfbGliX2luaXQ7Ci0rCQlpbnRfRVZQX0NJUEhFUl9pbml0X2VuZ2luZV9jYWxsYmFja3M7Ci0rCQlGSVBTX3JzYV9mcmVlOwotKwkJRklQU19kc2Ffc2lnX2VuY29kZTsKLSsJCUNSWVBUT19kYmdfcmVtb3ZlX2FsbF9pbmZvOwotKwkJT1BFTlNTTF9pbml0OwotKwkJQ1JZUFRPX3N0cmR1cDsKLSsJCUpQQUtFX1NURVAzQV9wcm9jZXNzOwotKwkJSlBBS0VfU1RFUDFfcmVsZWFzZTsKLSsJCUpQQUtFX2dldF9zaGFyZWRfa2V5OwotKwkJSlBBS0VfU1RFUDNCX2luaXQ7Ci0rCQlKUEFLRV9TVEVQMV9nZW5lcmF0ZTsKLSsJCUpQQUtFX1NURVAxX2luaXQ7Ci0rCQlKUEFLRV9TVEVQM0JfcHJvY2VzczsKLSsJCUpQQUtFX1NURVAyX2dlbmVyYXRlOwotKwkJSlBBS0VfQ1RYX25ldzsKLSsJCUpQQUtFX0NUWF9mcmVlOwotKwkJSlBBS0VfU1RFUDNCX3JlbGVhc2U7Ci0rCQlKUEFLRV9TVEVQM0FfcmVsZWFzZTsKLSsJCUpQQUtFX1NURVAyX3Byb2Nlc3M7Ci0rCQlKUEFLRV9TVEVQM0JfZ2VuZXJhdGU7Ci0rCQlKUEFLRV9TVEVQMV9wcm9jZXNzOwotKwkJSlBBS0VfU1RFUDNBX2dlbmVyYXRlOwotKwkJSlBBS0VfU1RFUDJfcmVsZWFzZTsKLSsJCUpQQUtFX1NURVAzQV9pbml0OwotKwkJRVJSX2xvYWRfSlBBS0Vfc3RyaW5nczsKLSsJCUpQQUtFX1NURVAyX2luaXQ7Ci0rCQlwcXVldWVfc2l6ZTsKLSsJCWkyZF9UU19BQ0NVUkFDWTsKLSsJCWkyZF9UU19NU0dfSU1QUklOVF9mcDsKLSsJCWkyZF9UU19NU0dfSU1QUklOVDsKLSsJCUVWUF9QS0VZX3ByaW50X3B1YmxpYzsKLSsJCUVWUF9QS0VZX0NUWF9uZXc7Ci0rCQlpMmRfVFNfVFNUX0lORk87Ci0rCQlFVlBfUEtFWV9hc24xX2ZpbmQ7Ci0rCQlEU09fTUVUSE9EX2Jlb3M7Ci0rCQlUU19DT05GX2xvYWRfY2VydDsKLSsJCVRTX1JFUV9nZXRfZXh0OwotKwkJRVZQX1BLRVlfc2lnbl9pbml0OwotKwkJQVNOMV9pdGVtX3ByaW50OwotKwkJVFNfVFNUX0lORk9fc2V0X25vbmNlOwotKwkJVFNfUkVTUF9kdXA7Ci0rCQlFTkdJTkVfcmVnaXN0ZXJfcGtleV9tZXRoczsKLSsJCUVWUF9QS0VZX2FzbjFfYWRkMDsKLSsJCVBLQ1M3X2FkZDBfYXR0cmliX3NpZ25pbmdfdGltZTsKLSsJCWkyZF9UU19UU1RfSU5GT19mcDsKLSsJCUJJT19hc24xX2dldF9wcmVmaXg7Ci0rCQlUU19UU1RfSU5GT19zZXRfdGltZTsKLSsJCUVWUF9QS0VZX21ldGhfc2V0X2RlY3J5cHQ7Ci0rCQlFVlBfUEtFWV9zZXRfdHlwZV9zdHI7Ci0rCQlFVlBfUEtFWV9DVFhfZ2V0X2tleWdlbl9pbmZvOwotKwkJVFNfUkVRX3NldF9wb2xpY3lfaWQ7Ci0rCQlkMmlfVFNfUkVTUF9mcDsKLSsJCUVOR0lORV9nZXRfcGtleV9hc24xX21ldGhfZW5naW5lOwotKwkJRU5HSU5FX2dldF9wa2V5X2FzbjFfbWV0aF9lbmc7Ci0rCQlXSElSTFBPT0xfSW5pdDsKLSsJCVRTX1JFU1Bfc2V0X3N0YXR1c19pbmZvOwotKwkJRVZQX1BLRVlfa2V5Z2VuOwotKwkJRVZQX0RpZ2VzdFNpZ25Jbml0OwotKwkJVFNfQUNDVVJBQ1lfc2V0X21pbGxpczsKLSsJCVRTX1JFUV9kdXA7Ci0rCQlHRU5FUkFMX05BTUVfZHVwOwotKwkJQVNOMV9TRVFVRU5DRV9BTllfaXQ7Ci0rCQlXSElSTFBPT0w7Ci0rCQlYNTA5X1NUT1JFX2dldDFfY3JsczsKLSsJCUVOR0lORV9nZXRfcGtleV9hc24xX21ldGg7Ci0rCQlFVlBfUEtFWV9hc24xX25ldzsKLSsJCUJJT19uZXdfTkRFRjsKLSsJCUVOR0lORV9nZXRfcGtleV9tZXRoOwotKwkJVFNfTVNHX0lNUFJJTlRfc2V0X2FsZ287Ci0rCQlpMmRfVFNfVFNUX0lORk9fYmlvOwotKwkJVFNfVFNUX0lORk9fc2V0X29yZGVyaW5nOwotKwkJVFNfVFNUX0lORk9fZ2V0X2V4dF9ieV9PQko7Ci0rCQlDUllQVE9fVEhSRUFESURfc2V0X3BvaW50ZXI7Ci0rCQlUU19DT05GX2dldF90c2Ffc2VjdGlvbjsKLSsJCVNNSU1FX3dyaXRlX0FTTjE7Ci0rCQlUU19SRVNQX0NUWF9zZXRfc2lnbmVyX2tleTsKLSsJCUVWUF9QS0VZX2VuY3J5cHRfb2xkOwotKwkJRVZQX1BLRVlfZW5jcnlwdF9pbml0OwotKwkJQ1JZUFRPX1RIUkVBRElEX2NweTsKLSsJCUFTTjFfUENUWF9nZXRfY2VydF9mbGFnczsKLSsJCWkyZF9FU1NfU0lHTklOR19DRVJUOwotKwkJVFNfQ09ORl9sb2FkX2tleTsKLSsJCWkyZF9BU04xX1NFUVVFTkNFX0FOWTsKLSsJCWQyaV9UU19NU0dfSU1QUklOVF9iaW87Ci0rCQlFVlBfUEtFWV9hc24xX3NldF9wdWJsaWM7Ci0rCQliMmlfUHVibGljS2V5X2JpbzsKLSsJCUJJT19hc24xX3NldF9wcmVmaXg7Ci0rCQlFVlBfUEtFWV9uZXdfbWFjX2tleTsKLSsJCUJJT19uZXdfQ01TOwotKwkJQ1JZUFRPX1RIUkVBRElEX2NtcDsKLSsJCVRTX1JFUV9leHRfZnJlZTsKLSsJCUVWUF9QS0VZX2FzbjFfc2V0X2ZyZWU7Ci0rCQlFVlBfUEtFWV9nZXQwX2FzbjE7Ci0rCQlkMmlfTkVUU0NBUEVfWDUwOTsKLSsJCUVWUF9QS0VZX3ZlcmlmeV9yZWNvdmVyX2luaXQ7Ci0rCQlFVlBfUEtFWV9DVFhfc2V0X2RhdGE7Ci0rCQlFVlBfUEtFWV9rZXlnZW5faW5pdDsKLSsJCVRTX1JFU1BfQ1RYX3NldF9zdGF0dXNfaW5mbzsKLSsJCVRTX01TR19JTVBSSU5UX2dldF9hbGdvOwotKwkJVFNfUkVRX3ByaW50X2JpbzsKLSsJCUVWUF9QS0VZX0NUWF9jdHJsX3N0cjsKLSsJCUVWUF9QS0VZX2dldF9kZWZhdWx0X2RpZ2VzdF9uaWQ7Ci0rCQlQRU1fd3JpdGVfYmlvX1BLQ1M3X3N0cmVhbTsKLSsJCVRTX01TR19JTVBSSU5UX3ByaW50X2JpbzsKLSsJCUJOX2FzYzJibjsKLSsJCVRTX1JFUV9nZXRfcG9saWN5X2lkOwotKwkJRU5HSU5FX3NldF9kZWZhdWx0X3BrZXlfYXNuMV9tZXRoczsKLSsJCUVOR0lORV9zZXRfZGVmX3BrZXlfYXNuMV9tZXRoczsKLSsJCWQyaV9UU19BQ0NVUkFDWTsKLSsJCURTT19nbG9iYWxfbG9va3VwOwotKwkJVFNfQ09ORl9zZXRfdHNhX25hbWU7Ci0rCQlpMmRfQVNOMV9TRVRfQU5ZOwotKwkJRU5HSU5FX2xvYWRfZ29zdDsKLSsJCVdISVJMUE9PTF9CaXRVcGRhdGU7Ci0rCQlBU04xX1BDVFhfZ2V0X2ZsYWdzOwotKwkJVFNfVFNUX0lORk9fZ2V0X2V4dF9ieV9OSUQ7Ci0rCQlUU19SRVNQX25ldzsKLSsJCUVTU19DRVJUX0lEX2R1cDsKLSsJCVRTX1NUQVRVU19JTkZPX2R1cDsKLSsJCVRTX1JFUV9kZWxldGVfZXh0OwotKwkJRVZQX0RpZ2VzdFZlcmlmeUZpbmFsOwotKwkJRVZQX1BLRVlfcHJpbnRfcGFyYW1zOwotKwkJaTJkX0NNU19iaW9fc3RyZWFtOwotKwkJVFNfUkVRX2dldF9tc2dfaW1wcmludDsKLSsJCU9CSl9maW5kX3NpZ2lkX2J5X2FsZ3M7Ci0rCQlUU19UU1RfSU5GT19nZXRfc2VyaWFsOwotKwkJVFNfUkVRX2dldF9ub25jZTsKLSsJCVg1MDlfUFVCS0VZX3NldDBfcGFyYW07Ci0rCQlFVlBfUEtFWV9DVFhfc2V0MF9rZXlnZW5faW5mbzsKLSsJCURJU1RfUE9JTlRfc2V0X2RwbmFtZTsKLSsJCWkyZF9JU1NVSU5HX0RJU1RfUE9JTlQ7Ci0rCQlBU04xX1NFVF9BTllfaXQ7Ci0rCQlFVlBfUEtFWV9DVFhfZ2V0X2RhdGE7Ci0rCQlUU19TVEFUVVNfSU5GT19wcmludF9iaW87Ci0rCQlFVlBfUEtFWV9kZXJpdmVfaW5pdDsKLSsJCWQyaV9UU19UU1RfSU5GTzsKLSsJCUVWUF9QS0VZX2FzbjFfYWRkX2FsaWFzOwotKwkJZDJpX1RTX1JFU1BfYmlvOwotKwkJT1RIRVJOQU1FX2NtcDsKLSsJCUdFTkVSQUxfTkFNRV9zZXQwX3ZhbHVlOwotKwkJUEtDUzdfUkVDSVBfSU5GT19nZXQwX2FsZzsKLSsJCVRTX1JFU1BfQ1RYX25ldzsKLSsJCVRTX1JFU1Bfc2V0X3RzdF9pbmZvOwotKwkJUEtDUzdfZmluYWw7Ci0rCQlFVlBfUEtFWV9iYXNlX2lkOwotKwkJVFNfUkVTUF9DVFhfc2V0X3NpZ25lcl9jZXJ0OwotKwkJVFNfUkVRX3NldF9tc2dfaW1wcmludDsKLSsJCUVWUF9QS0VZX0NUWF9jdHJsOwotKwkJVFNfQ09ORl9zZXRfZGlnZXN0czsKLSsJCWQyaV9UU19NU0dfSU1QUklOVDsKLSsJCUVWUF9QS0VZX21ldGhfc2V0X2N0cmw7Ci0rCQlUU19SRVFfZ2V0X2V4dF9ieV9OSUQ7Ci0rCQlQS0NTNV9wYmVfc2V0MF9hbGdvcjsKLSsJCUJOX0JMSU5ESU5HX3RocmVhZF9pZDsKLSsJCVRTX0FDQ1VSQUNZX25ldzsKLSsJCVg1MDlfQ1JMX01FVEhPRF9mcmVlOwotKwkJQVNOMV9QQ1RYX2dldF9ubV9mbGFnczsKLSsJCUVWUF9QS0VZX21ldGhfc2V0X3NpZ247Ci0rCQlDUllQVE9fVEhSRUFESURfY3VycmVudDsKLSsJCUVWUF9QS0VZX2RlY3J5cHRfaW5pdDsKLSsJCU5FVFNDQVBFX1g1MDlfZnJlZTsKLSsJCWkyYl9QVktfYmlvOwotKwkJRVZQX1BLRVlfcHJpbnRfcHJpdmF0ZTsKLSsJCUdFTkVSQUxfTkFNRV9nZXQwX3ZhbHVlOwotKwkJYjJpX1BWS19iaW87Ci0rCQlBU04xX1VUQ1RJTUVfYWRqOwotKwkJVFNfVFNUX0lORk9fbmV3OwotKwkJRVZQX01EX2RvX2FsbF9zb3J0ZWQ7Ci0rCQlUU19DT05GX3NldF9kZWZhdWx0X2VuZ2luZTsKLSsJCVRTX0FDQ1VSQUNZX3NldF9zZWNvbmRzOwotKwkJVFNfVFNUX0lORk9fZ2V0X3RpbWU7Ci0rCQlQS0NTOF9wa2V5X2dldDA7Ci0rCQlFVlBfUEtFWV9hc24xX2dldDA7Ci0rCQlPQkpfYWRkX3NpZ2lkOwotKwkJUEtDUzdfU0lHTkVSX0lORk9fc2lnbjsKLSsJCUVWUF9QS0VZX3BhcmFtZ2VuX2luaXQ7Ci0rCQlFVlBfUEtFWV9zaWduOwotKwkJT0JKX3NpZ2lkX2ZyZWU7Ci0rCQlFVlBfUEtFWV9tZXRoX3NldF9pbml0OwotKwkJZDJpX0VTU19JU1NVRVJfU0VSSUFMOwotKwkJSVNTVUlOR19ESVNUX1BPSU5UX25ldzsKLSsJCUFTTjFfVElNRV9hZGo7Ci0rCQlUU19PQkpfcHJpbnRfYmlvOwotKwkJRVZQX1BLRVlfbWV0aF9zZXRfdmVyaWZ5X3JlY292ZXI7Ci0rCQlFVlBfUEtFWV9tZXRoX3NldF92cmZ5X3JlY292ZXI7Ci0rCQlUU19SRVNQX2dldF9zdGF0dXNfaW5mbzsKLSsJCUNNU19zdHJlYW07Ci0rCQlFVlBfUEtFWV9DVFhfc2V0X2NiOwotKwkJUEtDUzdfdG9fVFNfVFNUX0lORk87Ci0rCQlBU04xX1BDVFhfZ2V0X29pZF9mbGFnczsKLSsJCVRTX1RTVF9JTkZPX2FkZF9leHQ7Ci0rCQlFVlBfUEtFWV9tZXRoX3NldF9kZXJpdmU7Ci0rCQlpMmRfVFNfUkVTUF9mcDsKLSsJCWkyZF9UU19NU0dfSU1QUklOVF9iaW87Ci0rCQlUU19SRVNQX0NUWF9zZXRfYWNjdXJhY3k7Ci0rCQlUU19SRVFfc2V0X25vbmNlOwotKwkJRVNTX0NFUlRfSURfbmV3OwotKwkJRU5HSU5FX3BrZXlfYXNuMV9maW5kX3N0cjsKLSsJCVRTX1JFUV9nZXRfZXh0X2NvdW50OwotKwkJQlVGX3JldmVyc2U7Ci0rCQlUU19UU1RfSU5GT19wcmludF9iaW87Ci0rCQlkMmlfSVNTVUlOR19ESVNUX1BPSU5UOwotKwkJRU5HSU5FX2dldF9wa2V5X21ldGhzOwotKwkJaTJiX1ByaXZhdGVLZXlfYmlvOwotKwkJaTJkX1RTX1JFU1A7Ci0rCQliMmlfUHVibGljS2V5OwotKwkJVFNfVkVSSUZZX0NUWF9jbGVhbnVwOwotKwkJVFNfU1RBVFVTX0lORk9fZnJlZTsKLSsJCVRTX1JFU1BfdmVyaWZ5X3Rva2VuOwotKwkJT0JKX2JzZWFyY2hfZXhfOwotKwkJQVNOMV9ibl9wcmludDsKLSsJCUVWUF9QS0VZX2FzbjFfZ2V0X2NvdW50OwotKwkJRU5HSU5FX3JlZ2lzdGVyX3BrZXlfYXNuMV9tZXRoczsKLSsJCUFTTjFfUENUWF9zZXRfbm1fZmxhZ3M7Ci0rCQlFVlBfRGlnZXN0VmVyaWZ5SW5pdDsKLSsJCUVOR0lORV9zZXRfZGVmYXVsdF9wa2V5X21ldGhzOwotKwkJVFNfVFNUX0lORk9fZ2V0X3BvbGljeV9pZDsKLSsJCVRTX1JFUV9nZXRfY2VydF9yZXE7Ci0rCQlYNTA5X0NSTF9zZXRfbWV0aF9kYXRhOwotKwkJUEtDUzhfcGtleV9zZXQwOwotKwkJQVNOMV9TVFJJTkdfY29weTsKLSsJCWQyaV9UU19UU1RfSU5GT19mcDsKLSsJCVg1MDlfQ1JMX21hdGNoOwotKwkJRVZQX1BLRVlfYXNuMV9zZXRfcHJpdmF0ZTsKLSsJCVRTX1RTVF9JTkZPX2dldF9leHRfZDJpOwotKwkJVFNfUkVTUF9DVFhfYWRkX3BvbGljeTsKLSsJCWQyaV9UU19SRVNQOwotKwkJVFNfQ09ORl9sb2FkX2NlcnRzOwotKwkJVFNfVFNUX0lORk9fZ2V0X21zZ19pbXByaW50OwotKwkJRVJSX2xvYWRfVFNfc3RyaW5nczsKLSsJCVRTX1RTVF9JTkZPX2dldF92ZXJzaW9uOwotKwkJRVZQX1BLRVlfQ1RYX2R1cDsKLSsJCUVWUF9QS0VZX21ldGhfc2V0X3ZlcmlmeTsKLSsJCWkyYl9QdWJsaWNLZXlfYmlvOwotKwkJVFNfQ09ORl9zZXRfY2VydHM7Ci0rCQlFVlBfUEtFWV9hc24xX2dldDBfaW5mbzsKLSsJCVRTX1ZFUklGWV9DVFhfZnJlZTsKLSsJCVRTX1JFUV9nZXRfZXh0X2J5X2NyaXRpY2FsOwotKwkJVFNfUkVTUF9DVFhfc2V0X3NlcmlhbF9jYjsKLSsJCVg1MDlfQ1JMX2dldF9tZXRoX2RhdGE7Ci0rCQlUU19SRVNQX0NUWF9zZXRfdGltZV9jYjsKLSsJCVRTX01TR19JTVBSSU5UX2dldF9tc2c7Ci0rCQlUU19UU1RfSU5GT19leHRfZnJlZTsKLSsJCVRTX1JFUV9nZXRfdmVyc2lvbjsKLSsJCVRTX1JFUV9hZGRfZXh0OwotKwkJRVZQX1BLRVlfQ1RYX3NldF9hcHBfZGF0YTsKLSsJCU9CSl9ic2VhcmNoXzsKLSsJCUVWUF9QS0VZX21ldGhfc2V0X3ZlcmlmeWN0eDsKLSsJCWkyZF9QS0NTN19iaW9fc3RyZWFtOwotKwkJQ1JZUFRPX1RIUkVBRElEX3NldF9udW1lcmljOwotKwkJUEtDUzdfc2lnbl9hZGRfc2lnbmVyOwotKwkJZDJpX1RTX1RTVF9JTkZPX2JpbzsKLSsJCVRTX1RTVF9JTkZPX2dldF9vcmRlcmluZzsKLSsJCVRTX1JFU1BfcHJpbnRfYmlvOwotKwkJVFNfVFNUX0lORk9fZ2V0X2V4dHM7Ci0rCQlITUFDX0NUWF9jb3B5OwotKwkJUEtDUzVfcGJlMl9zZXRfaXY7Ci0rCQlFTkdJTkVfZ2V0X3BrZXlfYXNuMV9tZXRoczsKLSsJCWIyaV9Qcml2YXRlS2V5OwotKwkJRVZQX1BLRVlfQ1RYX2dldF9hcHBfZGF0YTsKLSsJCVRTX1JFUV9zZXRfY2VydF9yZXE7Ci0rCQlDUllQVE9fVEhSRUFESURfc2V0X2NhbGxiYWNrOwotKwkJVFNfQ09ORl9zZXRfc2VyaWFsOwotKwkJVFNfVFNUX0lORk9fZnJlZTsKLSsJCWQyaV9UU19SRVFfZnA7Ci0rCQlUU19SRVNQX3ZlcmlmeV9yZXNwb25zZTsKLSsJCWkyZF9FU1NfSVNTVUVSX1NFUklBTDsKLSsJCVRTX0FDQ1VSQUNZX2dldF9zZWNvbmRzOwotKwkJRVZQX0NJUEhFUl9kb19hbGw7Ci0rCQliMmlfUHJpdmF0ZUtleV9iaW87Ci0rCQlPQ1NQX0NFUlRJRF9kdXA7Ci0rCQlYNTA5X1BVQktFWV9nZXQwX3BhcmFtOwotKwkJVFNfTVNHX0lNUFJJTlRfZHVwOwotKwkJUEtDUzdfcHJpbnRfY3R4OwotKwkJaTJkX1RTX1JFUV9iaW87Ci0rCQlFVlBfd2hpcmxwb29sOwotKwkJRVZQX1BLRVlfYXNuMV9zZXRfcGFyYW07Ci0rCQlFVlBfUEtFWV9tZXRoX3NldF9lbmNyeXB0OwotKwkJQVNOMV9QQ1RYX3NldF9mbGFnczsKLSsJCWkyZF9FU1NfQ0VSVF9JRDsKLSsJCVRTX1ZFUklGWV9DVFhfbmV3OwotKwkJVFNfUkVTUF9DVFhfc2V0X2V4dGVuc2lvbl9jYjsKLSsJCUVOR0lORV9yZWdpc3Rlcl9hbGxfcGtleV9tZXRoczsKLSsJCVRTX1JFU1BfQ1RYX3NldF9zdGF0dXNfaW5mb19jb25kOwotKwkJVFNfUkVTUF9DVFhfc2V0X3N0YXRfaW5mb19jb25kOwotKwkJRVZQX1BLRVlfdmVyaWZ5OwotKwkJV0hJUkxQT09MX0ZpbmFsOwotKwkJWDUwOV9DUkxfTUVUSE9EX25ldzsKLSsJCUVWUF9EaWdlc3RTaWduRmluYWw7Ci0rCQlUU19SRVNQX0NUWF9zZXRfZGVmX3BvbGljeTsKLSsJCU5FVFNDQVBFX1g1MDlfaXQ7Ci0rCQlUU19SRVNQX2NyZWF0ZV9yZXNwb25zZTsKLSsJCVBLQ1M3X1NJR05FUl9JTkZPX2dldDBfYWxnczsKLSsJCVRTX1RTVF9JTkZPX2dldF9ub25jZTsKLSsJCUVWUF9QS0VZX2RlY3J5cHRfb2xkOwotKwkJVFNfVFNUX0lORk9fc2V0X3BvbGljeV9pZDsKLSsJCVRTX0NPTkZfc2V0X2Vzc19jZXJ0X2lkX2NoYWluOwotKwkJRVZQX1BLRVlfQ1RYX2dldDBfcGtleTsKLSsJCWQyaV9UU19SRVE7Ci0rCQlFVlBfUEtFWV9hc24xX2ZpbmRfc3RyOwotKwkJQklPX2ZfYXNuMTsKLSsJCUVTU19TSUdOSU5HX0NFUlRfbmV3OwotKwkJRVZQX1BCRV9maW5kOwotKwkJWDUwOV9DUkxfZ2V0MF9ieV9jZXJ0OwotKwkJRVZQX1BLRVlfZGVyaXZlOwotKwkJaTJkX1RTX1JFUTsKLSsJCVRTX1RTVF9JTkZPX2RlbGV0ZV9leHQ7Ci0rCQlFU1NfSVNTVUVSX1NFUklBTF9mcmVlOwotKwkJQVNOMV9QQ1RYX3NldF9zdHJfZmxhZ3M7Ci0rCQlFTkdJTkVfZ2V0X3BrZXlfYXNuMV9tZXRoX3N0cjsKLSsJCVRTX0NPTkZfc2V0X3NpZ25lcl9rZXk7Ci0rCQlUU19BQ0NVUkFDWV9nZXRfbWlsbGlzOwotKwkJVFNfUkVTUF9nZXRfdG9rZW47Ci0rCQlUU19BQ0NVUkFDWV9kdXA7Ci0rCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX3BrZXlfYXNuMV9tZXRoczsKLSsJCUVOR0lORV9yZWdfYWxsX3BrZXlfYXNuMV9tZXRoczsKLSsJCVg1MDlfQ1JMX3NldF9kZWZhdWx0X21ldGhvZDsKLSsJCUNSWVBUT19USFJFQURJRF9oYXNoOwotKwkJQ01TX0NvbnRlbnRJbmZvX3ByaW50X2N0eDsKLSsJCVRTX1JFU1BfZnJlZTsKLSsJCUlTU1VJTkdfRElTVF9QT0lOVF9mcmVlOwotKwkJRVNTX0lTU1VFUl9TRVJJQUxfbmV3OwotKwkJQ01TX2FkZDFfY3JsOwotKwkJUEtDUzdfYWRkMV9hdHRyaWJfZGlnZXN0OwotKwkJVFNfUkVTUF9DVFhfYWRkX21kOwotKwkJVFNfVFNUX0lORk9fZHVwOwotKwkJRU5HSU5FX3NldF9wa2V5X2FzbjFfbWV0aHM7Ci0rCQlQRU1fd3JpdGVfYmlvX1BhcmFtZXRlcnM7Ci0rCQlUU19UU1RfSU5GT19nZXRfYWNjdXJhY3k7Ci0rCQlYNTA5X0NSTF9nZXQwX2J5X3NlcmlhbDsKLSsJCVRTX1RTVF9JTkZPX3NldF92ZXJzaW9uOwotKwkJVFNfUkVTUF9DVFhfZ2V0X3RzdF9pbmZvOwotKwkJVFNfUkVTUF92ZXJpZnlfc2lnbmF0dXJlOwotKwkJQ1JZUFRPX1RIUkVBRElEX2dldF9jYWxsYmFjazsKLSsJCVRTX1RTVF9JTkZPX2dldF90c2E7Ci0rCQlUU19TVEFUVVNfSU5GT19uZXc7Ci0rCQlFVlBfUEtFWV9DVFhfZ2V0X2NiOwotKwkJVFNfUkVRX2dldF9leHRfZDJpOwotKwkJR0VORVJBTF9OQU1FX3NldDBfb3RoZXJuYW1lOwotKwkJVFNfVFNUX0lORk9fZ2V0X2V4dF9jb3VudDsKLSsJCVRTX1JFU1BfQ1RYX2dldF9yZXF1ZXN0OwotKwkJaTJkX05FVFNDQVBFX1g1MDk7Ci0rCQlFTkdJTkVfZ2V0X3BrZXlfbWV0aF9lbmdpbmU7Ci0rCQlFVlBfUEtFWV9tZXRoX3NldF9zaWduY3R4OwotKwkJRVZQX1BLRVlfYXNuMV9jb3B5OwotKwkJQVNOMV9UWVBFX2NtcDsKLSsJCUVWUF9DSVBIRVJfZG9fYWxsX3NvcnRlZDsKLSsJCUVWUF9QS0VZX0NUWF9mcmVlOwotKwkJSVNTVUlOR19ESVNUX1BPSU5UX2l0OwotKwkJZDJpX1RTX01TR19JTVBSSU5UX2ZwOwotKwkJWDUwOV9TVE9SRV9nZXQxX2NlcnRzOwotKwkJRVZQX1BLRVlfQ1RYX2dldF9vcGVyYXRpb247Ci0rCQlkMmlfRVNTX1NJR05JTkdfQ0VSVDsKLSsJCVRTX0NPTkZfc2V0X29yZGVyaW5nOwotKwkJRVZQX1BCRV9hbGdfYWRkX3R5cGU7Ci0rCQlUU19SRVFfc2V0X3ZlcnNpb247Ci0rCQlFVlBfUEtFWV9nZXQwOwotKwkJQklPX2FzbjFfc2V0X3N1ZmZpeDsKLSsJCWkyZF9UU19TVEFUVVNfSU5GTzsKLSsJCUVWUF9NRF9kb19hbGw7Ci0rCQlUU19UU1RfSU5GT19zZXRfYWNjdXJhY3k7Ci0rCQlQS0NTN19hZGRfYXR0cmliX2NvbnRlbnRfdHlwZTsKLSsJCUVSUl9yZW1vdmVfdGhyZWFkX3N0YXRlOwotKwkJRVZQX1BLRVlfbWV0aF9hZGQwOwotKwkJVFNfVFNUX0lORk9fc2V0X3RzYTsKLSsJCUVWUF9QS0VZX21ldGhfbmV3OwotKwkJV0hJUkxQT09MX1VwZGF0ZTsKLSsJCVRTX0NPTkZfc2V0X2FjY3VyYWN5OwotKwkJQVNOMV9QQ1RYX3NldF9vaWRfZmxhZ3M7Ci0rCQlFU1NfU0lHTklOR19DRVJUX2R1cDsKLSsJCWQyaV9UU19SRVFfYmlvOwotKwkJWDUwOV90aW1lX2Fkal9leDsKLSsJCVRTX1JFU1BfQ1RYX2FkZF9mbGFnczsKLSsJCWQyaV9UU19TVEFUVVNfSU5GTzsKLSsJCVRTX01TR19JTVBSSU5UX3NldF9tc2c7Ci0rCQlCSU9fYXNuMV9nZXRfc3VmZml4OwotKwkJVFNfUkVRX2ZyZWU7Ci0rCQlFVlBfUEtFWV9tZXRoX2ZyZWU7Ci0rCQlUU19SRVFfZ2V0X2V4dHM7Ci0rCQlUU19SRVNQX0NUWF9zZXRfY2xvY2tfcHJlY2lzaW9uX2RpZ2l0czsKLSsJCVRTX1JFU1BfQ1RYX3NldF9jbGtfcHJlY19kaWdpdHM7Ci0rCQlUU19SRVNQX0NUWF9hZGRfZmFpbHVyZV9pbmZvOwotKwkJaTJkX1RTX1JFU1BfYmlvOwotKwkJRVZQX1BLRVlfQ1RYX2dldDBfcGVlcmtleTsKLSsJCVBFTV93cml0ZV9iaW9fQ01TX3N0cmVhbTsKLSsJCVRTX1JFUV9uZXc7Ci0rCQlUU19NU0dfSU1QUklOVF9uZXc7Ci0rCQlFVlBfUEtFWV9tZXRoX2ZpbmQ7Ci0rCQlFVlBfUEtFWV9pZDsKLSsJCVRTX1RTVF9JTkZPX3NldF9zZXJpYWw7Ci0rCQlhMmlfR0VORVJBTF9OQU1FOwotKwkJVFNfQ09ORl9zZXRfY3J5cHRvX2RldmljZTsKLSsJCUVWUF9QS0VZX3ZlcmlmeV9pbml0OwotKwkJVFNfQ09ORl9zZXRfcG9saWNpZXM7Ci0rCQlBU04xX1BDVFhfbmV3OwotKwkJRVNTX0NFUlRfSURfZnJlZTsKLSsJCUVOR0lORV91bnJlZ2lzdGVyX3BrZXlfbWV0aHM7Ci0rCQlUU19NU0dfSU1QUklOVF9mcmVlOwotKwkJVFNfVkVSSUZZX0NUWF9pbml0OwotKwkJUEtDUzdfc3RyZWFtOwotKwkJVFNfUkVTUF9DVFhfc2V0X2NlcnRzOwotKwkJVFNfQ09ORl9zZXRfZGVmX3BvbGljeTsKLSsJCUFTTjFfR0VORVJBTElaRURUSU1FX2FkajsKLSsJCU5FVFNDQVBFX1g1MDlfbmV3OwotKwkJVFNfQUNDVVJBQ1lfZnJlZTsKLSsJCVRTX1JFU1BfZ2V0X3RzdF9pbmZvOwotKwkJRVZQX1BLRVlfZGVyaXZlX3NldF9wZWVyOwotKwkJUEVNX3JlYWRfYmlvX1BhcmFtZXRlcnM7Ci0rCQlUU19DT05GX3NldF9jbG9ja19wcmVjaXNpb25fZGlnaXRzOwotKwkJVFNfQ09ORl9zZXRfY2xrX3ByZWNfZGlnaXRzOwotKwkJRVNTX0lTU1VFUl9TRVJJQUxfZHVwOwotKwkJVFNfQUNDVVJBQ1lfZ2V0X21pY3JvczsKLSsJCUFTTjFfUENUWF9nZXRfc3RyX2ZsYWdzOwotKwkJTkFNRV9DT05TVFJBSU5UU19jaGVjazsKLSsJCUFTTjFfQklUX1NUUklOR19jaGVjazsKLSsJCVg1MDlfY2hlY2tfYWtpZDsKLSsJCUVOR0lORV91bnJlZ2lzdGVyX3BrZXlfYXNuMV9tZXRoczsKLSsJCUVOR0lORV91bnJlZ19wa2V5X2FzbjFfbWV0aHM7Ci0rCQlBU04xX1BDVFhfZnJlZTsKLSsJCVBFTV93cml0ZV9iaW9fQVNOMV9zdHJlYW07Ci0rCQlpMmRfQVNOMV9iaW9fc3RyZWFtOwotKwkJVFNfWDUwOV9BTEdPUl9wcmludF9iaW87Ci0rCQlFVlBfUEtFWV9tZXRoX3NldF9jbGVhbnVwOwotKwkJRVZQX1BLRVlfYXNuMV9mcmVlOwotKwkJRVNTX1NJR05JTkdfQ0VSVF9mcmVlOwotKwkJVFNfVFNUX0lORk9fc2V0X21zZ19pbXByaW50OwotKwkJR0VORVJBTF9OQU1FX2NtcDsKLSsJCWQyaV9BU04xX1NFVF9BTlk7Ci0rCQlFTkdJTkVfc2V0X3BrZXlfbWV0aHM7Ci0rCQlpMmRfVFNfUkVRX2ZwOwotKwkJZDJpX0FTTjFfU0VRVUVOQ0VfQU5ZOwotKwkJR0VORVJBTF9OQU1FX2dldDBfb3RoZXJOYW1lOwotKwkJZDJpX0VTU19DRVJUX0lEOwotKwkJT0JKX2ZpbmRfc2lnaWRfYWxnczsKLSsJCUVWUF9QS0VZX21ldGhfc2V0X2tleWdlbjsKLSsJCVBLQ1M1X1BCS0RGMl9ITUFDOwotKwkJRVZQX1BLRVlfcGFyYW1nZW47Ci0rCQlFVlBfUEtFWV9tZXRoX3NldF9wYXJhbWdlbjsKLSsJCUJJT19uZXdfUEtDUzc7Ci0rCQlFVlBfUEtFWV92ZXJpZnlfcmVjb3ZlcjsKLSsJCVRTX2V4dF9wcmludF9iaW87Ci0rCQlUU19BU04xX0lOVEVHRVJfcHJpbnRfYmlvOwotKwkJY2hlY2tfZGVmZXI7Ci0rCQlEU09fcGF0aGJ5YWRkcjsKLSsJCUVWUF9QS0VZX3NldF90eXBlOwotKwkJVFNfQUNDVVJBQ1lfc2V0X21pY3JvczsKLSsJCVRTX1JFUV90b19UU19WRVJJRllfQ1RYOwotKwkJRVZQX1BLRVlfbWV0aF9zZXRfY29weTsKLSsJCUFTTjFfUENUWF9zZXRfY2VydF9mbGFnczsKLSsJCVRTX1RTVF9JTkZPX2dldF9leHQ7Ci0rCQlFVlBfUEtFWV9hc24xX3NldF9jdHJsOwotKwkJVFNfVFNUX0lORk9fZ2V0X2V4dF9ieV9jcml0aWNhbDsKLSsJCUVWUF9QS0VZX0NUWF9uZXdfaWQ7Ci0rCQlUU19SRVFfZ2V0X2V4dF9ieV9PQko7Ci0rCQlUU19DT05GX3NldF9zaWduZXJfY2VydDsKLSsJCVg1MDlfTkFNRV9oYXNoX29sZDsKLSsJCUFTTjFfVElNRV9zZXRfc3RyaW5nOwotKwkJRVZQX01EX2ZsYWdzOwotKwkJVFNfUkVTUF9DVFhfZnJlZTsKLSsJCURTQXBhcmFtc19kdXA7Ci0rCQlESHBhcmFtc19kdXA7Ci0rCQlPQ1NQX1JFUV9DVFhfYWRkMV9oZWFkZXI7Ci0rCQlPQ1NQX1JFUV9DVFhfc2V0MV9yZXE7Ci0rCQlYNTA5X1NUT1JFX3NldF92ZXJpZnlfY2I7Ci0rCQlYNTA5X1NUT1JFX0NUWF9nZXQwX2N1cnJlbnRfY3JsOwotKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MF9wYXJlbnRfY3R4OwotKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MF9jdXJyZW50X2lzc3VlcjsKLSsJCVg1MDlfU1RPUkVfQ1RYX2dldDBfY3VyX2lzc3VlcjsKLSsJCVg1MDlfaXNzdWVyX25hbWVfaGFzaF9vbGQ7Ci0rCQlYNTA5X3N1YmplY3RfbmFtZV9oYXNoX29sZDsKLSsJCUVWUF9DSVBIRVJfQ1RYX2NvcHk7Ci0rCQlVSV9tZXRob2RfZ2V0X3Byb21wdF9jb25zdHJ1Y3RvcjsKLSsJCVVJX21ldGhvZF9nZXRfcHJvbXB0X2NvbnN0cnVjdHI7Ci0rCQlVSV9tZXRob2Rfc2V0X3Byb21wdF9jb25zdHJ1Y3RvcjsKLSsJCVVJX21ldGhvZF9zZXRfcHJvbXB0X2NvbnN0cnVjdHI7Ci0rCQlFVlBfcmVhZF9wd19zdHJpbmdfbWluOwotKwkJQ1JZUFRPX2N0czEyOF9lbmNyeXB0OwotKwkJQ1JZUFRPX2N0czEyOF9kZWNyeXB0X2Jsb2NrOwotKwkJQ1JZUFRPX2NmYjEyOF8xX2VuY3J5cHQ7Ci0rCQlDUllQVE9fY2JjMTI4X2VuY3J5cHQ7Ci0rCQlDUllQVE9fY3RyMTI4X2VuY3J5cHQ7Ci0rCQlDUllQVE9fb2ZiMTI4X2VuY3J5cHQ7Ci0rCQlDUllQVE9fY3RzMTI4X2RlY3J5cHQ7Ci0rCQlDUllQVE9fY3RzMTI4X2VuY3J5cHRfYmxvY2s7Ci0rCQlDUllQVE9fY2JjMTI4X2RlY3J5cHQ7Ci0rCQlDUllQVE9fY2ZiMTI4X2VuY3J5cHQ7Ci0rCQlDUllQVE9fY2ZiMTI4XzhfZW5jcnlwdDsKLSsKLSsJbG9jYWw6Ci0rCQkqOwotK307Ci0rCi0rCi0rT1BFTlNTTF8xLjAuMSB7Ci0rCWdsb2JhbDoKLSsJCVNTTF9yZW5lZ290aWF0ZV9hYmJyZXZpYXRlZDsKLSsJCVRMU3YxXzFfbWV0aG9kOwotKwkJVExTdjFfMV9jbGllbnRfbWV0aG9kOwotKwkJVExTdjFfMV9zZXJ2ZXJfbWV0aG9kOwotKwkJU1NMX0NUWF9zZXRfc3JwX2NsaWVudF9wd2RfY2FsbGJhY2s7Ci0rCQlTU0xfQ1RYX3NldF9zcnBfY2xpZW50X3B3ZF9jYjsKLSsJCVNTTF9nZXRfc3JwX2c7Ci0rCQlTU0xfQ1RYX3NldF9zcnBfdXNlcm5hbWVfY2FsbGJhY2s7Ci0rCQlTU0xfQ1RYX3NldF9zcnBfdW5fY2I7Ci0rCQlTU0xfZ2V0X3NycF91c2VyaW5mbzsKLSsJCVNTTF9zZXRfc3JwX3NlcnZlcl9wYXJhbTsKLSsJCVNTTF9zZXRfc3JwX3NlcnZlcl9wYXJhbV9wdzsKLSsJCVNTTF9nZXRfc3JwX047Ci0rCQlTU0xfZ2V0X3NycF91c2VybmFtZTsKLSsJCVNTTF9DVFhfc2V0X3NycF9wYXNzd29yZDsKLSsJCVNTTF9DVFhfc2V0X3NycF9zdHJlbmd0aDsKLSsJCVNTTF9DVFhfc2V0X3NycF92ZXJpZnlfcGFyYW1fY2FsbGJhY2s7Ci0rCQlTU0xfQ1RYX3NldF9zcnBfdmZ5X3BhcmFtX2NiOwotKwkJU1NMX0NUWF9zZXRfc3JwX2NiX2FyZzsKLSsJCVNTTF9DVFhfc2V0X3NycF91c2VybmFtZTsKLSsJCVNTTF9DVFhfU1JQX0NUWF9pbml0OwotKwkJU1NMX1NSUF9DVFhfaW5pdDsKLSsJCVNSUF9DYWxjX0FfcGFyYW07Ci0rCQlTUlBfZ2VuZXJhdGVfc2VydmVyX21hc3Rlcl9zZWNyZXQ7Ci0rCQlTUlBfZ2VuX3NlcnZlcl9tYXN0ZXJfc2VjcmV0OwotKwkJU1NMX0NUWF9TUlBfQ1RYX2ZyZWU7Ci0rCQlTUlBfZ2VuZXJhdGVfY2xpZW50X21hc3Rlcl9zZWNyZXQ7Ci0rCQlTUlBfZ2VuX2NsaWVudF9tYXN0ZXJfc2VjcmV0OwotKwkJU1NMX3NycF9zZXJ2ZXJfcGFyYW1fd2l0aF91c2VybmFtZTsKLSsJCVNTTF9zcnBfc2VydmVyX3BhcmFtX3dpdGhfdW47Ci0rCQlTU0xfU1JQX0NUWF9mcmVlOwotKwkJU1NMX3NldF9kZWJ1ZzsKLSsJCVNTTF9TRVNTSU9OX2dldDBfcGVlcjsKLSsJCVRMU3YxXzJfY2xpZW50X21ldGhvZDsKLSsJCVNTTF9TRVNTSU9OX3NldDFfaWRfY29udGV4dDsKLSsJCVRMU3YxXzJfc2VydmVyX21ldGhvZDsKLSsJCVNTTF9jYWNoZV9oaXQ7Ci0rCQlTU0xfZ2V0MF9rc3NsX2N0eDsKLSsJCVNTTF9zZXQwX2tzc2xfY3R4OwotKwkJU1NMX3NldF9zdGF0ZTsKLSsJCVNTTF9DSVBIRVJfZ2V0X2lkOwotKwkJVExTdjFfMl9tZXRob2Q7Ci0rCQlrc3NsX2N0eF9nZXQwX2NsaWVudF9wcmluYzsKLSsJCVNTTF9leHBvcnRfa2V5aW5nX21hdGVyaWFsOwotKwkJU1NMX3NldF90bHNleHRfdXNlX3NydHA7Ci0rCQlTU0xfQ1RYX3NldF9uZXh0X3Byb3Rvc19hZHZlcnRpc2VkX2NiOwotKwkJU1NMX0NUWF9zZXRfbmV4dF9wcm90b3NfYWR2X2NiOwotKwkJU1NMX2dldDBfbmV4dF9wcm90b19uZWdvdGlhdGVkOwotKwkJU1NMX2dldF9zZWxlY3RlZF9zcnRwX3Byb2ZpbGU7Ci0rCQlTU0xfQ1RYX3NldF90bHNleHRfdXNlX3NydHA7Ci0rCQlTU0xfc2VsZWN0X25leHRfcHJvdG87Ci0rCQlTU0xfZ2V0X3NydHBfcHJvZmlsZXM7Ci0rCQlTU0xfQ1RYX3NldF9uZXh0X3Byb3RvX3NlbGVjdF9jYjsKLSsJCVNTTF9DVFhfc2V0X25leHRfcHJvdG9fc2VsX2NiOwotKwkJU1NMX1NFU1NJT05fZ2V0X2NvbXByZXNzX2lkOwotKwotKwkJU1JQX1ZCQVNFX2dldF9ieV91c2VyOwotKwkJU1JQX0NhbGNfc2VydmVyX2tleTsKLSsJCVNSUF9jcmVhdGVfdmVyaWZpZXI7Ci0rCQlTUlBfY3JlYXRlX3ZlcmlmaWVyX0JOOwotKwkJU1JQX0NhbGNfdTsKLSsJCVNSUF9WQkFTRV9mcmVlOwotKwkJU1JQX0NhbGNfY2xpZW50X2tleTsKLSsJCVNSUF9nZXRfZGVmYXVsdF9nTjsKLSsJCVNSUF9DYWxjX3g7Ci0rCQlTUlBfQ2FsY19COwotKwkJU1JQX1ZCQVNFX25ldzsKLSsJCVNSUF9jaGVja19rbm93bl9nTl9wYXJhbTsKLSsJCVNSUF9DYWxjX0E7Ci0rCQlTUlBfVmVyaWZ5X0FfbW9kX047Ci0rCQlTUlBfVkJBU0VfaW5pdDsKLSsJCVNSUF9WZXJpZnlfQl9tb2RfTjsKLSsJCUVDX0tFWV9zZXRfcHVibGljX2tleV9hZmZpbmVfY29vcmRpbmF0ZXM7Ci0rCQlFQ19LRVlfc2V0X3B1Yl9rZXlfYWZmX2Nvb3JkczsKLSsJCUVWUF9hZXNfMTkyX2N0cjsKLSsJCUVWUF9QS0VZX21ldGhfZ2V0MF9pbmZvOwotKwkJRVZQX1BLRVlfbWV0aF9jb3B5OwotKwkJRVJSX2FkZF9lcnJvcl92ZGF0YTsKLSsJCUVWUF9hZXNfMTI4X2N0cjsKLSsJCUVWUF9hZXNfMjU2X2N0cjsKLSsJCUVDX0dGcF9uaXN0cDIyNF9tZXRob2Q7Ci0rCQlFQ19LRVlfZ2V0X2ZsYWdzOwotKwkJUlNBX3BhZGRpbmdfYWRkX1BLQ1MxX1BTU19tZ2YxOwotKwkJRVZQX2Flc18xMjhfeHRzOwotKwkJRVZQX2Flc18yNTZfeHRzOwotKwkJRVZQX2Flc18xMjhfZ2NtOwotKwkJRUNfS0VZX2NsZWFyX2ZsYWdzOwotKwkJRUNfS0VZX3NldF9mbGFnczsKLSsJCUVWUF9hZXNfMjU2X2NjbTsKLSsJCVJTQV92ZXJpZnlfUEtDUzFfUFNTX21nZjE7Ci0rCQlFVlBfYWVzXzEyOF9jY207Ci0rCQlFVlBfYWVzXzE5Ml9nY207Ci0rCQlYNTA5X0FMR09SX3NldF9tZDsKLSsJCVJBTkRfaW5pdF9maXBzOwotKwkJRVZQX2Flc18yNTZfZ2NtOwotKwkJRVZQX2Flc18xOTJfY2NtOwotKwkJQ01BQ19DVFhfY29weTsKLSsJCUNNQUNfQ1RYX2ZyZWU7Ci0rCQlDTUFDX0NUWF9nZXQwX2NpcGhlcl9jdHg7Ci0rCQlDTUFDX0NUWF9jbGVhbnVwOwotKwkJQ01BQ19Jbml0OwotKwkJQ01BQ19VcGRhdGU7Ci0rCQlDTUFDX3Jlc3VtZTsKLSsJCUNNQUNfQ1RYX25ldzsKLSsJCUNNQUNfRmluYWw7Ci0rCQlDUllQVE9fY3RyMTI4X2VuY3J5cHRfY3RyMzI7Ci0rCQlDUllQVE9fZ2NtMTI4X3JlbGVhc2U7Ci0rCQlDUllQVE9fY2NtMTI4X2RlY3J5cHRfY2NtNjQ7Ci0rCQlDUllQVE9fY2NtMTI4X2VuY3J5cHQ7Ci0rCQlDUllQVE9fZ2NtMTI4X2VuY3J5cHQ7Ci0rCQlDUllQVE9feHRzMTI4X2VuY3J5cHQ7Ci0rCQlFVlBfcmM0X2htYWNfbWQ1OwotKwkJQ1JZUFRPX25pc3RjdHMxMjhfZGVjcnlwdF9ibG9jazsKLSsJCUNSWVBUT19nY20xMjhfc2V0aXY7Ci0rCQlDUllQVE9fbmlzdGN0czEyOF9lbmNyeXB0OwotKwkJRVZQX2Flc18xMjhfY2JjX2htYWNfc2hhMTsKLSsJCUNSWVBUT19nY20xMjhfdGFnOwotKwkJQ1JZUFRPX2NjbTEyOF9lbmNyeXB0X2NjbTY0OwotKwkJRU5HSU5FX2xvYWRfcmRyYW5kOwotKwkJQ1JZUFRPX2NjbTEyOF9zZXRpdjsKLSsJCUNSWVBUT19uaXN0Y3RzMTI4X2VuY3J5cHRfYmxvY2s7Ci0rCQlDUllQVE9fZ2NtMTI4X2FhZDsKLSsJCUNSWVBUT19jY20xMjhfaW5pdDsKLSsJCUNSWVBUT19uaXN0Y3RzMTI4X2RlY3J5cHQ7Ci0rCQlDUllQVE9fZ2NtMTI4X25ldzsKLSsJCUNSWVBUT19jY20xMjhfdGFnOwotKwkJQ1JZUFRPX2NjbTEyOF9kZWNyeXB0OwotKwkJQ1JZUFRPX2NjbTEyOF9hYWQ7Ci0rCQlDUllQVE9fZ2NtMTI4X2luaXQ7Ci0rCQlDUllQVE9fZ2NtMTI4X2RlY3J5cHQ7Ci0rCQlFTkdJTkVfbG9hZF9yc2F4OwotKwkJQ1JZUFRPX2djbTEyOF9kZWNyeXB0X2N0cjMyOwotKwkJQ1JZUFRPX2djbTEyOF9lbmNyeXB0X2N0cjMyOwotKwkJQ1JZUFRPX2djbTEyOF9maW5pc2g7Ci0rCQlFVlBfYWVzXzI1Nl9jYmNfaG1hY19zaGExOwotKwkJUEtDUzVfcGJrZGYyX3NldDsKLSsJCUNNU19hZGQwX3JlY2lwaWVudF9wYXNzd29yZDsKLSsJCUNNU19kZWNyeXB0X3NldDFfcGFzc3dvcmQ7Ci0rCQlDTVNfUmVjaXBpZW50SW5mb19zZXQwX3Bhc3N3b3JkOwotKwkJUkFORF9zZXRfZmlwc19kcmJnX3R5cGU7Ci0rCQlYNTA5X1JFUV9zaWduX2N0eDsKLSsJCVJTQV9QU1NfUEFSQU1TX25ldzsKLSsJCVg1MDlfQ1JMX3NpZ25fY3R4OwotKwkJWDUwOV9zaWduYXR1cmVfZHVtcDsKLSsJCWQyaV9SU0FfUFNTX1BBUkFNUzsKLSsJCVJTQV9QU1NfUEFSQU1TX2l0OwotKwkJUlNBX1BTU19QQVJBTVNfZnJlZTsKLSsJCVg1MDlfc2lnbl9jdHg7Ci0rCQlpMmRfUlNBX1BTU19QQVJBTVM7Ci0rCQlBU04xX2l0ZW1fc2lnbl9jdHg7Ci0rCQlFQ19HRnBfbmlzdHA1MjFfbWV0aG9kOwotKwkJRUNfR0ZwX25pc3RwMjU2X21ldGhvZDsKLSsJCU9QRU5TU0xfc3RkZXJyOwotKwkJT1BFTlNTTF9jcHVpZF9zZXR1cDsKLSsJCU9QRU5TU0xfc2hvd2ZhdGFsOwotKwkJQklPX25ld19kZ3JhbV9zY3RwOwotKwkJQklPX2RncmFtX3NjdHBfbXNnX3dhaXRpbmc7Ci0rCQlCSU9fZGdyYW1fc2N0cF93YWl0X2Zvcl9kcnk7Ci0rCQlCSU9fc19kYXRhZ3JhbV9zY3RwOwotKwkJQklPX2RncmFtX2lzX3NjdHA7Ci0rCQlCSU9fZGdyYW1fc2N0cF9ub3RpZmljYXRpb25fY2I7Ci0rfSBPUEVOU1NMXzEuMC4wOwotKwotK09QRU5TU0xfMS4wLjFkIHsKLSsJZ2xvYmFsOgotKwkJQ1JZUFRPX21lbWNtcDsKLSt9IE9QRU5TU0xfMS4wLjE7Ci0rCi0rT1BFTlNTTF8xLjAuMiB7Ci0rCWdsb2JhbDoKLSsJCVNTTF9DVFhfc2V0X2FscG5fcHJvdG9zOwotKwkJU1NMX3NldF9hbHBuX3Byb3RvczsKLSsJCVNTTF9DVFhfc2V0X2FscG5fc2VsZWN0X2NiOwotKwkJU1NMX2dldDBfYWxwbl9zZWxlY3RlZDsKLSsJCVNTTF9DVFhfc2V0X2N1c3RvbV9jbGlfZXh0OwotKwkJU1NMX0NUWF9zZXRfY3VzdG9tX3Nydl9leHQ7Ci0rCQlTU0xfQ1RYX3NldF9zcnZfc3VwcF9kYXRhOwotKwkJU1NMX0NUWF9zZXRfY2xpX3N1cHBfZGF0YTsKLSsJCVNTTF9zZXRfY2VydF9jYjsKLSsJCVNTTF9DVFhfdXNlX3NlcnZlcmluZm87Ci0rCQlTU0xfQ1RYX3VzZV9zZXJ2ZXJpbmZvX2ZpbGU7Ci0rCQlTU0xfQ1RYX3NldF9jZXJ0X2NiOwotKwkJU1NMX0NUWF9nZXQwX3BhcmFtOwotKwkJU1NMX2dldDBfcGFyYW07Ci0rCQlTU0xfY2VydHNfY2xlYXI7Ci0rCQlEVExTdjFfMl9tZXRob2Q7Ci0rCQlEVExTdjFfMl9zZXJ2ZXJfbWV0aG9kOwotKwkJRFRMU3YxXzJfY2xpZW50X21ldGhvZDsKLSsJCURUTFNfbWV0aG9kOwotKwkJRFRMU19zZXJ2ZXJfbWV0aG9kOwotKwkJRFRMU19jbGllbnRfbWV0aG9kOwotKwkJU1NMX0NUWF9nZXRfc3NsX21ldGhvZDsKLSsJCVNTTF9DVFhfZ2V0MF9jZXJ0aWZpY2F0ZTsKLSsJCVNTTF9DVFhfZ2V0MF9wcml2YXRla2V5OwotKwkJU1NMX0NPTVBfc2V0MF9jb21wcmVzc2lvbl9tZXRob2RzOwotKwkJU1NMX0NPTVBfZnJlZV9jb21wcmVzc2lvbl9tZXRob2RzOwotKwkJU1NMX0NJUEhFUl9maW5kOwotKwkJU1NMX2lzX3NlcnZlcjsKLSsJCVNTTF9DT05GX0NUWF9uZXc7Ci0rCQlTU0xfQ09ORl9DVFhfZmluaXNoOwotKwkJU1NMX0NPTkZfQ1RYX2ZyZWU7Ci0rCQlTU0xfQ09ORl9DVFhfc2V0X2ZsYWdzOwotKwkJU1NMX0NPTkZfQ1RYX2NsZWFyX2ZsYWdzOwotKwkJU1NMX0NPTkZfQ1RYX3NldDFfcHJlZml4OwotKwkJU1NMX0NPTkZfQ1RYX3NldF9zc2w7Ci0rCQlTU0xfQ09ORl9DVFhfc2V0X3NzbF9jdHg7Ci0rCQlTU0xfQ09ORl9jbWQ7Ci0rCQlTU0xfQ09ORl9jbWRfYXJndjsKLSsJCVNTTF9DT05GX2NtZF92YWx1ZV90eXBlOwotKwkJU1NMX3RyYWNlOwotKwkJU1NMX0NJUEhFUl9zdGFuZGFyZF9uYW1lOwotKwkJU1NMX2dldF90bHNhX3JlY29yZF9ieW5hbWU7Ci0rCQlBU04xX1RJTUVfZGlmZjsKLSsJCUJJT19oZXhfc3RyaW5nOwotKwkJQ01TX1JlY2lwaWVudEluZm9fZ2V0MF9wa2V5X2N0eDsKLSsJCUNNU19SZWNpcGllbnRJbmZvX2VuY3J5cHQ7Ci0rCQlDTVNfU2lnbmVySW5mb19nZXQwX3BrZXlfY3R4OwotKwkJQ01TX1NpZ25lckluZm9fZ2V0MF9tZF9jdHg7Ci0rCQlDTVNfU2lnbmVySW5mb19nZXQwX3NpZ25hdHVyZTsKLSsJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfZ2V0MF9hbGc7Ci0rCQlDTVNfUmVjaXBpZW50SW5mb19rYXJpX2dldDBfcmVrczsKLSsJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfZ2V0MF9vcmlnX2lkOwotKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9vcmlnX2lkX2NtcDsKLSsJCUNNU19SZWNpcGllbnRFbmNyeXB0ZWRLZXlfZ2V0MF9pZDsKLSsJCUNNU19SZWNpcGllbnRFbmNyeXB0ZWRLZXlfY2VydF9jbXA7Ci0rCQlDTVNfUmVjaXBpZW50SW5mb19rYXJpX3NldDBfcGtleTsKLSsJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfZ2V0MF9jdHg7Ci0rCQlDTVNfUmVjaXBpZW50SW5mb19rYXJpX2RlY3J5cHQ7Ci0rCQlDTVNfU2hhcmVkSW5mb19lbmNvZGU7Ci0rCQlESF9jb21wdXRlX2tleV9wYWRkZWQ7Ci0rCQlkMmlfREh4cGFyYW1zOwotKwkJaTJkX0RIeHBhcmFtczsKLSsJCURIX2dldF8xMDI0XzE2MDsKLSsJCURIX2dldF8yMDQ4XzIyNDsKLSsJCURIX2dldF8yMDQ4XzI1NjsKLSsJCURIX0tERl9YOV80MjsKLSsJCUVDREhfS0RGX1g5XzYyOwotKwkJRUNEU0FfTUVUSE9EX25ldzsKLSsJCUVDRFNBX01FVEhPRF9mcmVlOwotKwkJRUNEU0FfTUVUSE9EX3NldF9hcHBfZGF0YTsKLSsJCUVDRFNBX01FVEhPRF9nZXRfYXBwX2RhdGE7Ci0rCQlFQ0RTQV9NRVRIT0Rfc2V0X3NpZ247Ci0rCQlFQ0RTQV9NRVRIT0Rfc2V0X3NpZ25fc2V0dXA7Ci0rCQlFQ0RTQV9NRVRIT0Rfc2V0X3ZlcmlmeTsKLSsJCUVDRFNBX01FVEhPRF9zZXRfZmxhZ3M7Ci0rCQlFQ0RTQV9NRVRIT0Rfc2V0X25hbWU7Ci0rCQlFVlBfZGVzX2VkZTNfd3JhcDsKLSsJCUVWUF9hZXNfMTI4X3dyYXA7Ci0rCQlFVlBfYWVzXzE5Ml93cmFwOwotKwkJRVZQX2Flc18yNTZfd3JhcDsKLSsJCUVWUF9hZXNfMTI4X2NiY19obWFjX3NoYTI1NjsKLSsJCUVWUF9hZXNfMjU2X2NiY19obWFjX3NoYTI1NjsKLSsJCUNSWVBUT18xMjhfd3JhcDsKLSsJCUNSWVBUT18xMjhfdW53cmFwOwotKwkJT0NTUF9SRVFfQ1RYX25iaW87Ci0rCQlPQ1NQX1JFUV9DVFhfbmV3OwotKwkJT0NTUF9zZXRfbWF4X3Jlc3BvbnNlX2xlbmd0aDsKLSsJCU9DU1BfUkVRX0NUWF9pMmQ7Ci0rCQlPQ1NQX1JFUV9DVFhfbmJpb19kMmk7Ci0rCQlPQ1NQX1JFUV9DVFhfZ2V0MF9tZW1fYmlvOwotKwkJT0NTUF9SRVFfQ1RYX2h0dHA7Ci0rCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfT0FFUF9tZ2YxOwotKwkJUlNBX3BhZGRpbmdfY2hlY2tfUEtDUzFfT0FFUF9tZ2YxOwotKwkJUlNBX09BRVBfUEFSQU1TX2ZyZWU7Ci0rCQlSU0FfT0FFUF9QQVJBTVNfaXQ7Ci0rCQlSU0FfT0FFUF9QQVJBTVNfbmV3OwotKwkJU1NMX2dldF9zaWdhbGdzOwotKwkJU1NMX2dldF9zaGFyZWRfc2lnYWxnczsKLSsJCVNTTF9jaGVja19jaGFpbjsKLSsJCVg1MDlfY2hhaW5fdXBfcmVmOwotKwkJWDUwOV9odHRwX25iaW87Ci0rCQlYNTA5X0NSTF9odHRwX25iaW87Ci0rCQlYNTA5X1JFVk9LRURfZHVwOwotKwkJaTJkX3JlX1g1MDlfdGJzOwotKwkJWDUwOV9nZXQwX3NpZ25hdHVyZTsKLSsJCVg1MDlfZ2V0X3NpZ25hdHVyZV9uaWQ7Ci0rCQlYNTA5X0NSTF9kaWZmOwotKwkJWDUwOV9jaGFpbl9jaGVja19zdWl0ZWI7Ci0rCQlYNTA5X0NSTF9jaGVja19zdWl0ZWI7Ci0rCQlYNTA5X2NoZWNrX2hvc3Q7Ci0rCQlYNTA5X2NoZWNrX2VtYWlsOwotKwkJWDUwOV9jaGVja19pcDsKLSsJCVg1MDlfY2hlY2tfaXBfYXNjOwotKwkJWDUwOV9TVE9SRV9zZXRfbG9va3VwX2NybHNfY2I7Ci0rCQlYNTA5X1NUT1JFX0NUWF9nZXQwX3N0b3JlOwotKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0MV9ob3N0OwotKwkJWDUwOV9WRVJJRllfUEFSQU1fYWRkMV9ob3N0OwotKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0X2hvc3RmbGFnczsKLSsJCVg1MDlfVkVSSUZZX1BBUkFNX2dldDBfcGVlcm5hbWU7Ci0rCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX2VtYWlsOwotKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0MV9pcDsKLSsJCVg1MDlfVkVSSUZZX1BBUkFNX3NldDFfaXBfYXNjOwotKwkJWDUwOV9WRVJJRllfUEFSQU1fZ2V0MF9uYW1lOwotKwkJWDUwOV9WRVJJRllfUEFSQU1fZ2V0X2NvdW50OwotKwkJWDUwOV9WRVJJRllfUEFSQU1fZ2V0MDsKLSsJCVg1MDlWM19FWFRfZnJlZTsKLSsJCUVDX0dST1VQX2dldF9tb250X2RhdGE7Ci0rCQlFQ19jdXJ2ZV9uaWQybmlzdDsKLSsJCUVDX2N1cnZlX25pc3QybmlkOwotKwkJUEVNX3dyaXRlX2Jpb19ESHhwYXJhbXM7Ci0rCQlQRU1fd3JpdGVfREh4cGFyYW1zOwotKwkJU1NMX0NUWF9hZGRfY2xpZW50X2N1c3RvbV9leHQ7Ci0rCQlTU0xfQ1RYX2FkZF9zZXJ2ZXJfY3VzdG9tX2V4dDsKLSsJCVNTTF9leHRlbnNpb25fc3VwcG9ydGVkOwotKwkJQlVGX3N0cm5sZW47Ci0rCQlza19kZWVwX2NvcHk7Ci0rCQlTU0xfdGVzdF9mdW5jdGlvbnM7Ci0rfSBPUEVOU1NMXzEuMC4xZDsKLSsKLUluZGV4OiBvcGVuc3NsLTEuMC4yfmJldGExLm9ic29sZXRlLjAuMDQ5ODQzNjUxNTQ5MDU3NS9lbmdpbmVzL29wZW5zc2wubGQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKLSsrKyBvcGVuc3NsLTEuMC4yfmJldGExLm9ic29sZXRlLjAuMDQ5ODQzNjUxNTQ5MDU3NS9lbmdpbmVzL29wZW5zc2wubGQJMjAxNC0wMi0yNCAyMTowMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsMTAgQEAKLStPUEVOU1NMXzEuMC4wIHsKLSsJZ2xvYmFsOgotKwkJYmluZF9lbmdpbmU7Ci0rCQl2X2NoZWNrOwotKwkJT1BFTlNTTF9pbml0OwotKwkJT1BFTlNTTF9maW5pc2g7Ci0rCWxvY2FsOgotKwkJKjsKLSt9OwotKwotSW5kZXg6IG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L2VuZ2luZXMvY2Nnb3N0L29wZW5zc2wubGQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKLSsrKyBvcGVuc3NsLTEuMC4yfmJldGExLm9ic29sZXRlLjAuMDQ5ODQzNjUxNTQ5MDU3NS9lbmdpbmVzL2NjZ29zdC9vcGVuc3NsLmxkCTIwMTQtMDItMjQgMjE6MDI6MzAuMDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDEwIEBACi0rT1BFTlNTTF8xLjAuMCB7Ci0rCWdsb2JhbDoKLSsJCWJpbmRfZW5naW5lOwotKwkJdl9jaGVjazsKLSsJCU9QRU5TU0xfaW5pdDsKLSsJCU9QRU5TU0xfZmluaXNoOwotKwlsb2NhbDoKLSsJCSo7Ci0rfTsKLSsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4xLjAuMi9zb25hbWUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuMS4wLjIvc29uYW1lLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWNkZmVjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4xLjAuMi9zb25hbWUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1JbmRleDogb3BlbnNzbC0xLjAuMmQvY3J5cHRvL29wZW5zc2x2LmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBvcGVuc3NsLTEuMC4yZC5vcmlnL2NyeXB0by9vcGVuc3Nsdi5oCi0rKysgb3BlbnNzbC0xLjAuMmQvY3J5cHRvL29wZW5zc2x2LmgKLUBAIC04OCw3ICs4OCw3IEBAIGV4dGVybiAiQyIgewotICAqIHNob3VsZCBvbmx5IGtlZXAgdGhlIHZlcnNpb25zIHRoYXQgYXJlIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggdGhlIGN1cnJlbnQuCi0gICovCi0gIyBkZWZpbmUgU0hMSUJfVkVSU0lPTl9ISVNUT1JZICIiCi0tIyBkZWZpbmUgU0hMSUJfVkVSU0lPTl9OVU1CRVIgIjEuMC4wIgotKyMgZGVmaW5lIFNITElCX1ZFUlNJT05fTlVNQkVSICIxLjAuMiIKLSAKLSAKLSAjaWZkZWYgIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuMS4wLjIvdmVyc2lvbi1zY3JpcHQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuMS4wLjIvdmVyc2lvbi1zY3JpcHQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5ZjExYTIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbjEuMC4yL3ZlcnNpb24tc2NyaXB0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDY1NiArMCwwIEBACi1JbmRleDogb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvQ29uZmlndXJlCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUub3JpZy9Db25maWd1cmUJMjAxNC0wMi0yNCAyMTowMjozMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yfmJldGExLm9ic29sZXRlLjAuMDQ5ODQzNjUxNTQ5MDU3NS9Db25maWd1cmUJMjAxNC0wMi0yNCAyMTowMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xNjUxLDYgKzE2NTEsOCBAQAotIAkJfQotIAl9Ci0gCi0rJHNoYXJlZF9sZGZsYWcgLj0gIiAtV2wsLS12ZXJzaW9uLXNjcmlwdD1vcGVuc3NsLmxkIjsKLSsKLSBvcGVuKElOLCc8TWFrZWZpbGUub3JnJykgfHwgZGllICJ1bmFibGUgdG8gcmVhZCBNYWtlZmlsZS5vcmc6JCFcbiI7Ci0gdW5saW5rKCIkTWFrZWZpbGUubmV3IikgfHwgZGllICJ1bmFibGUgdG8gcmVtb3ZlIG9sZCAkTWFrZWZpbGUubmV3OiQhXG4iIGlmIC1lICIkTWFrZWZpbGUubmV3IjsKLSBvcGVuKE9VVCwiPiRNYWtlZmlsZS5uZXciKSB8fCBkaWUgInVuYWJsZSB0byBjcmVhdGUgJE1ha2VmaWxlLm5ldzokIVxuIjsKLUluZGV4OiBvcGVuc3NsLTEuMC4yfmJldGExLm9ic29sZXRlLjAuMDQ5ODQzNjUxNTQ5MDU3NS9vcGVuc3NsLmxkCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCi0rKysgb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvb3BlbnNzbC5sZAkyMDE0LTAyLTI0IDIyOjE5OjA4LjYwMTgyNzI2NiArMDEwMAotQEAgLTAsMCArMSw0NjA4IEBACi0rT1BFTlNTTF8xLjAuMmQgewotKwlnbG9iYWw6Ci0rCQlCSU9fZl9zc2w7Ci0rCQlCSU9fbmV3X2J1ZmZlcl9zc2xfY29ubmVjdDsKLSsJCUJJT19uZXdfc3NsOwotKwkJQklPX25ld19zc2xfY29ubmVjdDsKLSsJCUJJT19wcm94eV9zc2xfY29weV9zZXNzaW9uX2lkOwotKwkJQklPX3NzbF9jb3B5X3Nlc3Npb25faWQ7Ci0rCQlCSU9fc3NsX3NodXRkb3duOwotKwkJZDJpX1NTTF9TRVNTSU9OOwotKwkJRFRMU3YxX2NsaWVudF9tZXRob2Q7Ci0rCQlEVExTdjFfbWV0aG9kOwotKwkJRFRMU3YxX3NlcnZlcl9tZXRob2Q7Ci0rCQlFUlJfbG9hZF9TU0xfc3RyaW5nczsKLSsJCWkyZF9TU0xfU0VTU0lPTjsKLSsJCWtzc2xfYnVpbGRfcHJpbmNpcGFsXzI7Ci0rCQlrc3NsX2NnZXRfdGt0OwotKwkJa3NzbF9jaGVja19hdXRoZW50OwotKwkJa3NzbF9jdHhfZnJlZTsKLSsJCWtzc2xfY3R4X25ldzsKLSsJCWtzc2xfY3R4X3NldGtleTsKLSsJCWtzc2xfY3R4X3NldHByaW5jOwotKwkJa3NzbF9jdHhfc2V0c3RyaW5nOwotKwkJa3NzbF9jdHhfc2hvdzsKLSsJCWtzc2xfZXJyX3NldDsKLSsJCWtzc2xfa3JiNV9mcmVlX2RhdGFfY29udGVudHM7Ci0rCQlrc3NsX3NnZXRfdGt0OwotKwkJa3NzbF9za2lwX2NvbmZvdW5kOwotKwkJa3NzbF92YWxpZGF0ZV90aW1lczsKLSsJCVBFTV9yZWFkX2Jpb19TU0xfU0VTU0lPTjsKLSsJCVBFTV9yZWFkX1NTTF9TRVNTSU9OOwotKwkJUEVNX3dyaXRlX2Jpb19TU0xfU0VTU0lPTjsKLSsJCVBFTV93cml0ZV9TU0xfU0VTU0lPTjsKLSsJCVNTTF9hY2NlcHQ7Ci0rCQlTU0xfYWRkX2NsaWVudF9DQTsKLSsJCVNTTF9hZGRfZGlyX2NlcnRfc3ViamVjdHNfdG9fc3RhY2s7Ci0rCQlTU0xfYWRkX2Rpcl9jZXJ0X3N1YmpzX3RvX3N0azsKLSsJCVNTTF9hZGRfZmlsZV9jZXJ0X3N1YmplY3RzX3RvX3N0YWNrOwotKwkJU1NMX2FkZF9maWxlX2NlcnRfc3VianNfdG9fc3RrOwotKwkJU1NMX2FsZXJ0X2Rlc2Nfc3RyaW5nOwotKwkJU1NMX2FsZXJ0X2Rlc2Nfc3RyaW5nX2xvbmc7Ci0rCQlTU0xfYWxlcnRfdHlwZV9zdHJpbmc7Ci0rCQlTU0xfYWxlcnRfdHlwZV9zdHJpbmdfbG9uZzsKLSsJCVNTTF9jYWxsYmFja19jdHJsOwotKwkJU1NMX2NoZWNrX3ByaXZhdGVfa2V5OwotKwkJU1NMX0NJUEhFUl9kZXNjcmlwdGlvbjsKLSsJCVNTTF9DSVBIRVJfZ2V0X2JpdHM7Ci0rCQlTU0xfQ0lQSEVSX2dldF9uYW1lOwotKwkJU1NMX0NJUEhFUl9nZXRfdmVyc2lvbjsKLSsJCVNTTF9jbGVhcjsKLSsJCVNTTF9DT01QX2FkZF9jb21wcmVzc2lvbl9tZXRob2Q7Ci0rCQlTU0xfQ09NUF9nZXRfY29tcHJlc3Npb25fbWV0aG9kczsKLSsJCVNTTF9DT01QX2dldF9jb21wcmVzc19tZXRob2RzOwotKwkJU1NMX0NPTVBfZ2V0X25hbWU7Ci0rCQlTU0xfY29ubmVjdDsKLSsJCVNTTF9jb3B5X3Nlc3Npb25faWQ7Ci0rCQlTU0xfY3RybDsKLSsJCVNTTF9DVFhfYWRkX2NsaWVudF9DQTsKLSsJCVNTTF9DVFhfYWRkX3Nlc3Npb247Ci0rCQlTU0xfQ1RYX2NhbGxiYWNrX2N0cmw7Ci0rCQlTU0xfQ1RYX2NoZWNrX3ByaXZhdGVfa2V5OwotKwkJU1NMX0NUWF9jdHJsOwotKwkJU1NMX0NUWF9mbHVzaF9zZXNzaW9uczsKLSsJCVNTTF9DVFhfZnJlZTsKLSsJCVNTTF9DVFhfZ2V0X2NlcnRfc3RvcmU7Ci0rCQlTU0xfQ1RYX2dldF9jbGllbnRfQ0FfbGlzdDsKLSsJCVNTTF9DVFhfZ2V0X2NsaWVudF9jZXJ0X2NiOwotKwkJU1NMX0NUWF9nZXRfZXhfZGF0YTsKLSsJCVNTTF9DVFhfZ2V0X2V4X25ld19pbmRleDsKLSsJCVNTTF9DVFhfZ2V0X2luZm9fY2FsbGJhY2s7Ci0rCQlTU0xfQ1RYX2dldF9xdWlldF9zaHV0ZG93bjsKLSsJCVNTTF9DVFhfZ2V0X3RpbWVvdXQ7Ci0rCQlTU0xfQ1RYX2dldF92ZXJpZnlfY2FsbGJhY2s7Ci0rCQlTU0xfQ1RYX2dldF92ZXJpZnlfZGVwdGg7Ci0rCQlTU0xfQ1RYX2dldF92ZXJpZnlfbW9kZTsKLSsJCVNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zOwotKwkJU1NMX0NUWF9uZXc7Ci0rCQlTU0xfQ1RYX3JlbW92ZV9zZXNzaW9uOwotKwkJU1NMX0NUWF9zZXNzX2dldF9nZXRfY2I7Ci0rCQlTU0xfQ1RYX3Nlc3NfZ2V0X25ld19jYjsKLSsJCVNTTF9DVFhfc2Vzc19nZXRfcmVtb3ZlX2NiOwotKwkJU1NMX0NUWF9zZXNzaW9uczsKLSsJCVNTTF9DVFhfc2Vzc19zZXRfZ2V0X2NiOwotKwkJU1NMX0NUWF9zZXNzX3NldF9uZXdfY2I7Ci0rCQlTU0xfQ1RYX3Nlc3Nfc2V0X3JlbW92ZV9jYjsKLSsJCVNTTF9DVFhfc2V0MV9wYXJhbTsKLSsJCVNTTF9DVFhfc2V0X2NlcnRfc3RvcmU7Ci0rCQlTU0xfQ1RYX3NldF9jZXJ0X3ZlcmlmeV9jYWxsYmFjazsKLSsJCVNTTF9DVFhfc2V0X2NlcnRfdmVyaWZ5X2NiOwotKwkJU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3Q7Ci0rCQlTU0xfQ1RYX3NldF9jbGllbnRfQ0FfbGlzdDsKLSsJCVNTTF9DVFhfc2V0X2NsaWVudF9jZXJ0X2NiOwotKwkJU1NMX0NUWF9zZXRfY2xpZW50X2NlcnRfZW5naW5lOwotKwkJU1NMX0NUWF9zZXRfY29va2llX2dlbmVyYXRlX2NiOwotKwkJU1NMX0NUWF9zZXRfY29va2llX3ZlcmlmeV9jYjsKLSsJCVNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiOwotKwkJU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2JfdXNlcmRhdGE7Ci0rCQlTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRoczsKLSsJCVNTTF9DVFhfc2V0X2RlZl9wYXNzd2RfY2JfdWQ7Ci0rCQlTU0xfQ1RYX3NldF9kZWZfdmVyaWZ5X3BhdGhzOwotKwkJU1NMX0NUWF9zZXRfZXhfZGF0YTsKLSsJCVNTTF9DVFhfc2V0X2dlbmVyYXRlX3Nlc3Npb25faWQ7Ci0rCQlTU0xfQ1RYX3NldF9pbmZvX2NhbGxiYWNrOwotKwkJU1NMX0NUWF9zZXRfbXNnX2NhbGxiYWNrOwotKwkJU1NMX0NUWF9zZXRfcHNrX2NsaWVudF9jYWxsYmFjazsKLSsJCVNTTF9DVFhfc2V0X3Bza19zZXJ2ZXJfY2FsbGJhY2s7Ci0rCQlTU0xfQ1RYX3NldF9wdXJwb3NlOwotKwkJU1NMX0NUWF9zZXRfcXVpZXRfc2h1dGRvd247Ci0rCQlTU0xfQ1RYX3NldF9zZXNzaW9uX2lkX2NvbnRleHQ7Ci0rCQlTU0xfQ1RYX3NldF9zc2xfdmVyc2lvbjsKLSsJCVNTTF9DVFhfc2V0X3RpbWVvdXQ7Ci0rCQlTU0xfQ1RYX3NldF90bXBfZGhfY2FsbGJhY2s7Ci0rCQlTU0xfQ1RYX3NldF90bXBfZWNkaF9jYWxsYmFjazsKLSsJCVNTTF9DVFhfc2V0X3RtcF9yc2FfY2FsbGJhY2s7Ci0rCQlTU0xfQ1RYX3NldF90cnVzdDsKLSsJCVNTTF9DVFhfc2V0X3ZlcmlmeTsKLSsJCVNTTF9DVFhfc2V0X3ZlcmlmeV9kZXB0aDsKLSsJCVNTTF9DVFhfdXNlX2NlcnRfY2hhaW5fZmlsZTsKLSsJCVNTTF9DVFhfdXNlX2NlcnRpZmljYXRlOwotKwkJU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfQVNOMTsKLSsJCVNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGU7Ci0rCQlTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9maWxlOwotKwkJU1NMX0NUWF91c2VfUHJpdmF0ZUtleTsKLSsJCVNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfQVNOMTsKLSsJCVNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfZmlsZTsKLSsJCVNTTF9DVFhfdXNlX3Bza19pZGVudGl0eV9oaW50OwotKwkJU1NMX0NUWF91c2VfUlNBUHJpdmF0ZUtleTsKLSsJCVNTTF9DVFhfdXNlX1JTQVByaXZhdGVLZXlfQVNOMTsKLSsJCVNTTF9DVFhfdXNlX1JTQVByaXZhdGVLZXlfZmlsZTsKLSsJCVNTTF9kb19oYW5kc2hha2U7Ci0rCQlTU0xfZHVwOwotKwkJU1NMX2R1cF9DQV9saXN0OwotKwkJU1NMZWF5X2FkZF9zc2xfYWxnb3JpdGhtczsKLSsJCVNTTF9mcmVlOwotKwkJU1NMX2dldDFfc2Vzc2lvbjsKLSsJCVNTTF9nZXRfY2VydGlmaWNhdGU7Ci0rCQlTU0xfZ2V0X2NpcGhlcl9saXN0OwotKwkJU1NMX2dldF9jaXBoZXJzOwotKwkJU1NMX2dldF9jbGllbnRfQ0FfbGlzdDsKLSsJCVNTTF9nZXRfY3VycmVudF9jaXBoZXI7Ci0rCQlTU0xfZ2V0X2N1cnJlbnRfY29tcHJlc3Npb247Ci0rCQlTU0xfZ2V0X2N1cnJlbnRfZXhwYW5zaW9uOwotKwkJU1NMX2dldF9kZWZhdWx0X3RpbWVvdXQ7Ci0rCQlTU0xfZ2V0X2Vycm9yOwotKwkJU1NMX2dldF9leF9kYXRhOwotKwkJU1NMX2dldF9leF9kYXRhX1g1MDlfU1RPUkVfQ1RYX2lkeDsKLSsJCVNTTF9nZXRfZXhfZF9YNTA5X1NUT1JFX0NUWF9pZHg7Ci0rCQlTU0xfZ2V0X2V4X25ld19pbmRleDsKLSsJCVNTTF9nZXRfZmQ7Ci0rCQlTU0xfZ2V0X2ZpbmlzaGVkOwotKwkJU1NMX2dldF9pbmZvX2NhbGxiYWNrOwotKwkJU1NMX2dldF9wZWVyX2NlcnRfY2hhaW47Ci0rCQlTU0xfZ2V0X3BlZXJfY2VydGlmaWNhdGU7Ci0rCQlTU0xfZ2V0X3BlZXJfZmluaXNoZWQ7Ci0rCQlTU0xfZ2V0X3ByaXZhdGVrZXk7Ci0rCQlTU0xfZ2V0X3Bza19pZGVudGl0eTsKLSsJCVNTTF9nZXRfcHNrX2lkZW50aXR5X2hpbnQ7Ci0rCQlTU0xfZ2V0X3F1aWV0X3NodXRkb3duOwotKwkJU1NMX2dldF9yYmlvOwotKwkJU1NMX2dldF9yZWFkX2FoZWFkOwotKwkJU1NMX2dldF9yZmQ7Ci0rCQlTU0xfZ2V0X3NlcnZlcm5hbWU7Ci0rCQlTU0xfZ2V0X3NlcnZlcm5hbWVfdHlwZTsKLSsJCVNTTF9nZXRfc2Vzc2lvbjsKLSsJCVNTTF9nZXRfc2hhcmVkX2NpcGhlcnM7Ci0rCQlTU0xfZ2V0X3NodXRkb3duOwotKwkJU1NMX2dldF9TU0xfQ1RYOwotKwkJU1NMX2dldF9zc2xfbWV0aG9kOwotKwkJU1NMX2dldF92ZXJpZnlfY2FsbGJhY2s7Ci0rCQlTU0xfZ2V0X3ZlcmlmeV9kZXB0aDsKLSsJCVNTTF9nZXRfdmVyaWZ5X21vZGU7Ci0rCQlTU0xfZ2V0X3ZlcmlmeV9yZXN1bHQ7Ci0rCQlTU0xfZ2V0X3ZlcnNpb247Ci0rCQlTU0xfZ2V0X3diaW87Ci0rCQlTU0xfZ2V0X3dmZDsKLSsJCVNTTF9oYXNfbWF0Y2hpbmdfc2Vzc2lvbl9pZDsKLSsJCVNTTF9saWJyYXJ5X2luaXQ7Ci0rCQlTU0xfbG9hZF9jbGllbnRfQ0FfZmlsZTsKLSsJCVNTTF9sb2FkX2Vycm9yX3N0cmluZ3M7Ci0rCQlTU0xfbmV3OwotKwkJU1NMX3BlZWs7Ci0rCQlTU0xfcGVuZGluZzsKLSsJCVNTTF9yZWFkOwotKwkJU1NMX3JlbmVnb3RpYXRlOwotKwkJU1NMX3JlbmVnb3RpYXRlX3BlbmRpbmc7Ci0rCQlTU0xfcnN0YXRlX3N0cmluZzsKLSsJCVNTTF9yc3RhdGVfc3RyaW5nX2xvbmc7Ci0rCQlTU0xfU0VTU0lPTl9jbXA7Ci0rCQlTU0xfU0VTU0lPTl9mcmVlOwotKwkJU1NMX1NFU1NJT05fZ2V0X2V4X2RhdGE7Ci0rCQlTU0xfU0VTU0lPTl9nZXRfZXhfbmV3X2luZGV4OwotKwkJU1NMX1NFU1NJT05fZ2V0X2lkOwotKwkJU1NMX1NFU1NJT05fZ2V0X3RpbWU7Ci0rCQlTU0xfU0VTU0lPTl9nZXRfdGltZW91dDsKLSsJCVNTTF9TRVNTSU9OX2hhc2g7Ci0rCQlTU0xfU0VTU0lPTl9uZXc7Ci0rCQlTU0xfU0VTU0lPTl9wcmludDsKLSsJCVNTTF9TRVNTSU9OX3ByaW50X2ZwOwotKwkJU1NMX1NFU1NJT05fc2V0X2V4X2RhdGE7Ci0rCQlTU0xfU0VTU0lPTl9zZXRfdGltZTsKLSsJCVNTTF9TRVNTSU9OX3NldF90aW1lb3V0OwotKwkJU1NMX3NldDFfcGFyYW07Ci0rCQlTU0xfc2V0X2FjY2VwdF9zdGF0ZTsKLSsJCVNTTF9zZXRfYmlvOwotKwkJU1NMX3NldF9jaXBoZXJfbGlzdDsKLSsJCVNTTF9zZXRfY2xpZW50X0NBX2xpc3Q7Ci0rCQlTU0xfc2V0X2Nvbm5lY3Rfc3RhdGU7Ci0rCQlTU0xfc2V0X2V4X2RhdGE7Ci0rCQlTU0xfc2V0X2ZkOwotKwkJU1NMX3NldF9nZW5lcmF0ZV9zZXNzaW9uX2lkOwotKwkJU1NMX3NldF9pbmZvX2NhbGxiYWNrOwotKwkJU1NMX3NldF9tc2dfY2FsbGJhY2s7Ci0rCQlTU0xfc2V0X3Bza19jbGllbnRfY2FsbGJhY2s7Ci0rCQlTU0xfc2V0X3Bza19zZXJ2ZXJfY2FsbGJhY2s7Ci0rCQlTU0xfc2V0X3B1cnBvc2U7Ci0rCQlTU0xfc2V0X3F1aWV0X3NodXRkb3duOwotKwkJU1NMX3NldF9yZWFkX2FoZWFkOwotKwkJU1NMX3NldF9yZmQ7Ci0rCQlTU0xfc2V0X3Nlc3Npb247Ci0rCQlTU0xfc2V0X3Nlc3Npb25faWRfY29udGV4dDsKLSsJCVNTTF9zZXRfc2Vzc2lvbl9zZWNyZXRfY2I7Ci0rCQlTU0xfc2V0X3Nlc3Npb25fdGlja2V0X2V4dDsKLSsJCVNTTF9zZXRfc2Vzc2lvbl90aWNrZXRfZXh0X2NiOwotKwkJU1NMX3NldF9zaHV0ZG93bjsKLSsJCVNTTF9zZXRfU1NMX0NUWDsKLSsJCVNTTF9zZXRfc3NsX21ldGhvZDsKLSsJCVNTTF9zZXRfdG1wX2RoX2NhbGxiYWNrOwotKwkJU1NMX3NldF90bXBfZWNkaF9jYWxsYmFjazsKLSsJCVNTTF9zZXRfdG1wX3JzYV9jYWxsYmFjazsKLSsJCVNTTF9zZXRfdHJ1c3Q7Ci0rCQlTU0xfc2V0X3ZlcmlmeTsKLSsJCVNTTF9zZXRfdmVyaWZ5X2RlcHRoOwotKwkJU1NMX3NldF92ZXJpZnlfcmVzdWx0OwotKwkJU1NMX3NldF93ZmQ7Ci0rCQlTU0xfc2h1dGRvd247Ci0rCQlTU0xfc3RhdGU7Ci0rCQlTU0xfc3RhdGVfc3RyaW5nOwotKwkJU1NMX3N0YXRlX3N0cmluZ19sb25nOwotKwkJU1NMX3VzZV9jZXJ0aWZpY2F0ZTsKLSsJCVNTTF91c2VfY2VydGlmaWNhdGVfQVNOMTsKLSsJCVNTTF91c2VfY2VydGlmaWNhdGVfZmlsZTsKLSsJCVNTTF91c2VfUHJpdmF0ZUtleTsKLSsJCVNTTF91c2VfUHJpdmF0ZUtleV9BU04xOwotKwkJU1NMX3VzZV9Qcml2YXRlS2V5X2ZpbGU7Ci0rCQlTU0xfdXNlX3Bza19pZGVudGl0eV9oaW50OwotKwkJU1NMX3VzZV9SU0FQcml2YXRlS2V5OwotKwkJU1NMX3VzZV9SU0FQcml2YXRlS2V5X0FTTjE7Ci0rCQlTU0xfdXNlX1JTQVByaXZhdGVLZXlfZmlsZTsKLSsJCVNTTHYyM19jbGllbnRfbWV0aG9kOwotKwkJU1NMdjIzX21ldGhvZDsKLSsJCVNTTHYyM19zZXJ2ZXJfbWV0aG9kOwotKwkJU1NMdjJfY2xpZW50X21ldGhvZDsKLSsJCVNTTHYyX21ldGhvZDsKLSsJCVNTTHYyX3NlcnZlcl9tZXRob2Q7Ci0rCQlTU0x2M19jbGllbnRfbWV0aG9kOwotKwkJU1NMdjNfbWV0aG9kOwotKwkJU1NMdjNfc2VydmVyX21ldGhvZDsKLSsJCVNTTF92ZXJzaW9uOwotKwkJU1NMX3dhbnQ7Ci0rCQlTU0xfd3JpdGU7Ci0rCQlUTFN2MV9jbGllbnRfbWV0aG9kOwotKwkJVExTdjFfbWV0aG9kOwotKwkJVExTdjFfc2VydmVyX21ldGhvZDsKLSsKLSsKLSsJCVNTTGVheTsKLSsJCVNTTGVheV92ZXJzaW9uOwotKwkJQVNOMV9CSVRfU1RSSU5HX2FzbjFfbWV0aDsKLSsJCUFTTjFfSEVBREVSX2ZyZWU7Ci0rCQlBU04xX0hFQURFUl9uZXc7Ci0rCQlBU04xX0lBNVNUUklOR19hc24xX21ldGg7Ci0rCQlBU04xX0lOVEVHRVJfZ2V0OwotKwkJQVNOMV9JTlRFR0VSX3NldDsKLSsJCUFTTjFfSU5URUdFUl90b19CTjsKLSsJCUFTTjFfT0JKRUNUX2NyZWF0ZTsKLSsJCUFTTjFfT0JKRUNUX2ZyZWU7Ci0rCQlBU04xX09CSkVDVF9uZXc7Ci0rCQlBU04xX1BSSU5UQUJMRV90eXBlOwotKwkJQVNOMV9TVFJJTkdfY21wOwotKwkJQVNOMV9TVFJJTkdfZHVwOwotKwkJQVNOMV9TVFJJTkdfZnJlZTsKLSsJCUFTTjFfU1RSSU5HX25ldzsKLSsJCUFTTjFfU1RSSU5HX3ByaW50OwotKwkJQVNOMV9TVFJJTkdfc2V0OwotKwkJQVNOMV9TVFJJTkdfdHlwZV9uZXc7Ci0rCQlBU04xX1RZUEVfZnJlZTsKLSsJCUFTTjFfVFlQRV9uZXc7Ci0rCQlBU04xX1VOSVZFUlNBTFNUUklOR190b19zdHJpbmc7Ci0rCQlBU04xX1VUQ1RJTUVfY2hlY2s7Ci0rCQlBU04xX1VUQ1RJTUVfcHJpbnQ7Ci0rCQlBU04xX1VUQ1RJTUVfc2V0OwotKwkJQVNOMV9jaGVja19pbmZpbml0ZV9lbmQ7Ci0rCQlBU04xX2QyaV9iaW87Ci0rCQlBU04xX2QyaV9mcDsKLSsJCUFTTjFfZGlnZXN0OwotKwkJQVNOMV9kdXA7Ci0rCQlBU04xX2dldF9vYmplY3Q7Ci0rCQlBU04xX2kyZF9iaW87Ci0rCQlBU04xX2kyZF9mcDsKLSsJCUFTTjFfb2JqZWN0X3NpemU7Ci0rCQlBU04xX3BhcnNlOwotKwkJQVNOMV9wdXRfb2JqZWN0OwotKwkJQVNOMV9zaWduOwotKwkJQVNOMV92ZXJpZnk7Ci0rCQlCRl9jYmNfZW5jcnlwdDsKLSsJCUJGX2NmYjY0X2VuY3J5cHQ7Ci0rCQlCRl9lY2JfZW5jcnlwdDsKLSsJCUJGX2VuY3J5cHQ7Ci0rCQlCRl9vZmI2NF9lbmNyeXB0OwotKwkJQkZfb3B0aW9uczsKLSsJCUJGX3NldF9rZXk7Ci0rCQlCSU9fQ09OTkVDVF9mcmVlOwotKwkJQklPX0NPTk5FQ1RfbmV3OwotKwkJQklPX2FjY2VwdDsKLSsJCUJJT19jdHJsOwotKwkJQklPX2ludF9jdHJsOwotKwkJQklPX2RlYnVnX2NhbGxiYWNrOwotKwkJQklPX2R1bXA7Ci0rCQlCSU9fZHVwX2NoYWluOwotKwkJQklPX2ZfYmFzZTY0OwotKwkJQklPX2ZfYnVmZmVyOwotKwkJQklPX2ZfY2lwaGVyOwotKwkJQklPX2ZfbWQ7Ci0rCQlCSU9fZl9udWxsOwotKwkJQklPX2ZfcHJveHlfc2VydmVyOwotKwkJQklPX2ZkX25vbl9mYXRhbF9lcnJvcjsKLSsJCUJJT19mZF9zaG91bGRfcmV0cnk7Ci0rCQlCSU9fZmluZF90eXBlOwotKwkJQklPX2ZyZWU7Ci0rCQlCSU9fZnJlZV9hbGw7Ci0rCQlCSU9fZ2V0X2FjY2VwdF9zb2NrZXQ7Ci0rCQlCSU9fZ2V0X2ZpbHRlcl9iaW87Ci0rCQlCSU9fZ2V0X2hvc3RfaXA7Ci0rCQlCSU9fZ2V0X3BvcnQ7Ci0rCQlCSU9fZ2V0X3JldHJ5X0JJTzsKLSsJCUJJT19nZXRfcmV0cnlfcmVhc29uOwotKwkJQklPX2dldGhvc3RieW5hbWU7Ci0rCQlCSU9fZ2V0czsKLSsJCUJJT19uZXc7Ci0rCQlCSU9fbmV3X2FjY2VwdDsKLSsJCUJJT19uZXdfY29ubmVjdDsKLSsJCUJJT19uZXdfZmQ7Ci0rCQlCSU9fbmV3X2ZpbGU7Ci0rCQlCSU9fbmV3X2ZwOwotKwkJQklPX25ld19zb2NrZXQ7Ci0rCQlCSU9fcG9wOwotKwkJQklPX3ByaW50ZjsKLSsJCUJJT19wdXNoOwotKwkJQklPX3B1dHM7Ci0rCQlCSU9fcmVhZDsKLSsJCUJJT19zX2FjY2VwdDsKLSsJCUJJT19zX2Nvbm5lY3Q7Ci0rCQlCSU9fc19mZDsKLSsJCUJJT19zX2ZpbGU7Ci0rCQlCSU9fc19tZW07Ci0rCQlCSU9fc19udWxsOwotKwkJQklPX3NfcHJveHlfY2xpZW50OwotKwkJQklPX3Nfc29ja2V0OwotKwkJQklPX3NldDsKLSsJCUJJT19zZXRfY2lwaGVyOwotKwkJQklPX3NldF90Y3BfbmRlbGF5OwotKwkJQklPX3NvY2tfY2xlYW51cDsKLSsJCUJJT19zb2NrX2Vycm9yOwotKwkJQklPX3NvY2tfaW5pdDsKLSsJCUJJT19zb2NrX25vbl9mYXRhbF9lcnJvcjsKLSsJCUJJT19zb2NrX3Nob3VsZF9yZXRyeTsKLSsJCUJJT19zb2NrZXRfaW9jdGw7Ci0rCQlCSU9fd3JpdGU7Ci0rCQlCTl9DVFhfZnJlZTsKLSsJCUJOX0NUWF9uZXc7Ci0rCQlCTl9NT05UX0NUWF9mcmVlOwotKwkJQk5fTU9OVF9DVFhfbmV3OwotKwkJQk5fTU9OVF9DVFhfc2V0OwotKwkJQk5fYWRkOwotKwkJQk5fYWRkX3dvcmQ7Ci0rCQlCTl9oZXgyYm47Ci0rCQlCTl9iaW4yYm47Ci0rCQlCTl9ibjJoZXg7Ci0rCQlCTl9ibjJiaW47Ci0rCQlCTl9jbGVhcjsKLSsJCUJOX2NsZWFyX2JpdDsKLSsJCUJOX2NsZWFyX2ZyZWU7Ci0rCQlCTl9jbXA7Ci0rCQlCTl9jb3B5OwotKwkJQk5fZGl2OwotKwkJQk5fZGl2X3dvcmQ7Ci0rCQlCTl9kdXA7Ci0rCQlCTl9mcmVlOwotKwkJQk5fZnJvbV9tb250Z29tZXJ5OwotKwkJQk5fZ2NkOwotKwkJQk5fZ2VuZXJhdGVfcHJpbWU7Ci0rCQlCTl9nZXRfd29yZDsKLSsJCUJOX2lzX2JpdF9zZXQ7Ci0rCQlCTl9pc19wcmltZTsKLSsJCUJOX2xzaGlmdDsKLSsJCUJOX2xzaGlmdDE7Ci0rCQlCTl9tYXNrX2JpdHM7Ci0rCQlCTl9tb2Q7Ci0rCQlCTl9tb2RfZXhwOwotKwkJQk5fbW9kX2V4cF9tb250OwotKwkJQk5fbW9kX2V4cF9zaW1wbGU7Ci0rCQlCTl9tb2RfaW52ZXJzZTsKLSsJCUJOX21vZF9tdWw7Ci0rCQlCTl9tb2RfbXVsX21vbnRnb21lcnk7Ci0rCQlCTl9tb2Rfd29yZDsKLSsJCUJOX211bDsKLSsJCUJOX25ldzsKLSsJCUJOX251bV9iaXRzOwotKwkJQk5fbnVtX2JpdHNfd29yZDsKLSsJCUJOX29wdGlvbnM7Ci0rCQlCTl9wcmludDsKLSsJCUJOX3ByaW50X2ZwOwotKwkJQk5fcmFuZDsKLSsJCUJOX3JlY2lwcm9jYWw7Ci0rCQlCTl9yc2hpZnQ7Ci0rCQlCTl9yc2hpZnQxOwotKwkJQk5fc2V0X2JpdDsKLSsJCUJOX3NldF93b3JkOwotKwkJQk5fc3FyOwotKwkJQk5fc3ViOwotKwkJQk5fdG9fQVNOMV9JTlRFR0VSOwotKwkJQk5fdWNtcDsKLSsJCUJOX3ZhbHVlX29uZTsKLSsJCUJVRl9NRU1fZnJlZTsKLSsJCUJVRl9NRU1fZ3JvdzsKLSsJCUJVRl9NRU1fbmV3OwotKwkJQlVGX3N0cmR1cDsKLSsJCUNPTkZfZnJlZTsKLSsJCUNPTkZfZ2V0X251bWJlcjsKLSsJCUNPTkZfZ2V0X3NlY3Rpb247Ci0rCQlDT05GX2dldF9zdHJpbmc7Ci0rCQlDT05GX2xvYWQ7Ci0rCQlDUllQVE9fYWRkX2xvY2s7Ci0rCQlDUllQVE9fZGJnX2ZyZWU7Ci0rCQlDUllQVE9fZGJnX21hbGxvYzsKLSsJCUNSWVBUT19kYmdfcmVhbGxvYzsKLSsJCUNSWVBUT19kYmdfcmVtYWxsb2M7Ci0rCQlDUllQVE9fZnJlZTsKLSsJCUNSWVBUT19nZXRfYWRkX2xvY2tfY2FsbGJhY2s7Ci0rCQlDUllQVE9fZ2V0X2lkX2NhbGxiYWNrOwotKwkJQ1JZUFRPX2dldF9sb2NrX25hbWU7Ci0rCQlDUllQVE9fZ2V0X2xvY2tpbmdfY2FsbGJhY2s7Ci0rCQlDUllQVE9fZ2V0X21lbV9mdW5jdGlvbnM7Ci0rCQlDUllQVE9fbG9jazsKLSsJCUNSWVBUT19tYWxsb2M7Ci0rCQlDUllQVE9fbWVtX2N0cmw7Ci0rCQlDUllQVE9fbWVtX2xlYWtzOwotKwkJQ1JZUFRPX21lbV9sZWFrc19jYjsKLSsJCUNSWVBUT19tZW1fbGVha3NfZnA7Ci0rCQlDUllQVE9fcmVhbGxvYzsKLSsJCUNSWVBUT19yZW1hbGxvYzsKLSsJCUNSWVBUT19zZXRfYWRkX2xvY2tfY2FsbGJhY2s7Ci0rCQlDUllQVE9fc2V0X2lkX2NhbGxiYWNrOwotKwkJQ1JZUFRPX3NldF9sb2NraW5nX2NhbGxiYWNrOwotKwkJQ1JZUFRPX3NldF9tZW1fZnVuY3Rpb25zOwotKwkJQ1JZUFRPX3RocmVhZF9pZDsKLSsJCURIX2NoZWNrOwotKwkJREhfY29tcHV0ZV9rZXk7Ci0rCQlESF9mcmVlOwotKwkJREhfZ2VuZXJhdGVfa2V5OwotKwkJREhfZ2VuZXJhdGVfcGFyYW1ldGVyczsKLSsJCURIX25ldzsKLSsJCURIX3NpemU7Ci0rCQlESHBhcmFtc19wcmludDsKLSsJCURIcGFyYW1zX3ByaW50X2ZwOwotKwkJRFNBX2ZyZWU7Ci0rCQlEU0FfZ2VuZXJhdGVfa2V5OwotKwkJRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnM7Ci0rCQlEU0FfaXNfcHJpbWU7Ci0rCQlEU0FfbmV3OwotKwkJRFNBX3ByaW50OwotKwkJRFNBX3ByaW50X2ZwOwotKwkJRFNBX3NpZ247Ci0rCQlEU0Ffc2lnbl9zZXR1cDsKLSsJCURTQV9zaXplOwotKwkJRFNBX3ZlcmlmeTsKLSsJCURTQXBhcmFtc19wcmludDsKLSsJCURTQXBhcmFtc19wcmludF9mcDsKLSsJCUVSUl9jbGVhcl9lcnJvcjsKLSsJCUVSUl9lcnJvcl9zdHJpbmc7Ci0rCQlFUlJfZnJlZV9zdHJpbmdzOwotKwkJRVJSX2Z1bmNfZXJyb3Jfc3RyaW5nOwotKwkJRVJSX2dldF9lcnJfc3RhdGVfdGFibGU7Ci0rCQlFUlJfZ2V0X2Vycm9yOwotKwkJRVJSX2dldF9lcnJvcl9saW5lOwotKwkJRVJSX2dldF9zdGF0ZTsKLSsJCUVSUl9nZXRfc3RyaW5nX3RhYmxlOwotKwkJRVJSX2xpYl9lcnJvcl9zdHJpbmc7Ci0rCQlFUlJfbG9hZF9BU04xX3N0cmluZ3M7Ci0rCQlFUlJfbG9hZF9CSU9fc3RyaW5nczsKLSsJCUVSUl9sb2FkX0JOX3N0cmluZ3M7Ci0rCQlFUlJfbG9hZF9CVUZfc3RyaW5nczsKLSsJCUVSUl9sb2FkX0NPTkZfc3RyaW5nczsKLSsJCUVSUl9sb2FkX0RIX3N0cmluZ3M7Ci0rCQlFUlJfbG9hZF9EU0Ffc3RyaW5nczsKLSsJCUVSUl9sb2FkX0VSUl9zdHJpbmdzOwotKwkJRVJSX2xvYWRfRVZQX3N0cmluZ3M7Ci0rCQlFUlJfbG9hZF9PQkpfc3RyaW5nczsKLSsJCUVSUl9sb2FkX1BFTV9zdHJpbmdzOwotKwkJRVJSX2xvYWRfUFJPWFlfc3RyaW5nczsKLSsJCUVSUl9sb2FkX1JTQV9zdHJpbmdzOwotKwkJRVJSX2xvYWRfWDUwOV9zdHJpbmdzOwotKwkJRVJSX2xvYWRfY3J5cHRvX3N0cmluZ3M7Ci0rCQlFUlJfbG9hZF9zdHJpbmdzOwotKwkJRVJSX3BlZWtfZXJyb3I7Ci0rCQlFUlJfcGVla19lcnJvcl9saW5lOwotKwkJRVJSX3ByaW50X2Vycm9yczsKLSsJCUVSUl9wcmludF9lcnJvcnNfZnA7Ci0rCQlFUlJfcHV0X2Vycm9yOwotKwkJRVJSX3JlYXNvbl9lcnJvcl9zdHJpbmc7Ci0rCQlFUlJfcmVtb3ZlX3N0YXRlOwotKwkJRVZQX0J5dGVzVG9LZXk7Ci0rCQlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwOwotKwkJRVZQX0NpcGhlckZpbmFsOwotKwkJRVZQX0NpcGhlckluaXQ7Ci0rCQlFVlBfQ2lwaGVyVXBkYXRlOwotKwkJRVZQX0RlY29kZUJsb2NrOwotKwkJRVZQX0RlY29kZUZpbmFsOwotKwkJRVZQX0RlY29kZUluaXQ7Ci0rCQlFVlBfRGVjb2RlVXBkYXRlOwotKwkJRVZQX0RlY3J5cHRGaW5hbDsKLSsJCUVWUF9EZWNyeXB0SW5pdDsKLSsJCUVWUF9EZWNyeXB0VXBkYXRlOwotKwkJRVZQX0RpZ2VzdEZpbmFsOwotKwkJRVZQX0RpZ2VzdEluaXQ7Ci0rCQlFVlBfRGlnZXN0VXBkYXRlOwotKwkJRVZQX0VuY29kZUJsb2NrOwotKwkJRVZQX0VuY29kZUZpbmFsOwotKwkJRVZQX0VuY29kZUluaXQ7Ci0rCQlFVlBfRW5jb2RlVXBkYXRlOwotKwkJRVZQX0VuY3J5cHRGaW5hbDsKLSsJCUVWUF9FbmNyeXB0SW5pdDsKLSsJCUVWUF9FbmNyeXB0VXBkYXRlOwotKwkJRVZQX09wZW5GaW5hbDsKLSsJCUVWUF9PcGVuSW5pdDsKLSsJCUVWUF9QS0VZX2Fzc2lnbjsKLSsJCUVWUF9QS0VZX2NvcHlfcGFyYW1ldGVyczsKLSsJCUVWUF9QS0VZX2ZyZWU7Ci0rCQlFVlBfUEtFWV9taXNzaW5nX3BhcmFtZXRlcnM7Ci0rCQlFVlBfUEtFWV9uZXc7Ci0rCQlFVlBfUEtFWV9zYXZlX3BhcmFtZXRlcnM7Ci0rCQlFVlBfUEtFWV9zaXplOwotKwkJRVZQX1BLRVlfdHlwZTsKLSsJCUVWUF9TZWFsRmluYWw7Ci0rCQlFVlBfU2VhbEluaXQ7Ci0rCQlFVlBfU2lnbkZpbmFsOwotKwkJRVZQX1ZlcmlmeUZpbmFsOwotKwkJRVZQX2FkZF9hbGlhczsKLSsJCUVWUF9hZGRfY2lwaGVyOwotKwkJRVZQX2FkZF9kaWdlc3Q7Ci0rCQlFVlBfYmZfY2JjOwotKwkJRVZQX2JmX2NmYjY0OwotKwkJRVZQX2JmX2VjYjsKLSsJCUVWUF9iZl9vZmI7Ci0rCQlFVlBfY2xlYW51cDsKLSsJCUVWUF9kZXNfY2JjOwotKwkJRVZQX2Rlc19jZmI2NDsKLSsJCUVWUF9kZXNfZWNiOwotKwkJRVZQX2Rlc19lZGU7Ci0rCQlFVlBfZGVzX2VkZTM7Ci0rCQlFVlBfZGVzX2VkZTNfY2JjOwotKwkJRVZQX2Rlc19lZGUzX2NmYjY0OwotKwkJRVZQX2Rlc19lZGUzX29mYjsKLSsJCUVWUF9kZXNfZWRlX2NiYzsKLSsJCUVWUF9kZXNfZWRlX2NmYjY0OwotKwkJRVZQX2Rlc19lZGVfb2ZiOwotKwkJRVZQX2Rlc19vZmI7Ci0rCQlFVlBfZGVzeF9jYmM7Ci0rCQlFVlBfZHNzOwotKwkJRVZQX2RzczE7Ci0rCQlFVlBfZW5jX251bGw7Ci0rCQlFVlBfZ2V0X2NpcGhlcmJ5bmFtZTsKLSsJCUVWUF9nZXRfZGlnZXN0YnluYW1lOwotKwkJRVZQX2dldF9wd19wcm9tcHQ7Ci0rCQlFVlBfaWRlYV9jYmM7Ci0rCQlFVlBfaWRlYV9jZmI2NDsKLSsJCUVWUF9pZGVhX2VjYjsKLSsJCUVWUF9pZGVhX29mYjsKLSsJCUVWUF9tZDI7Ci0rCQlFVlBfbWQ1OwotKwkJRVZQX21kX251bGw7Ci0rCQlFVlBfcmMyX2NiYzsKLSsJCUVWUF9yYzJfY2ZiNjQ7Ci0rCQlFVlBfcmMyX2VjYjsKLSsJCUVWUF9yYzJfb2ZiOwotKwkJRVZQX3JjNDsKLSsJCUVWUF9yZWFkX3B3X3N0cmluZzsKLSsJCUVWUF9zZXRfcHdfcHJvbXB0OwotKwkJRVZQX3NoYTsKLSsJCUVWUF9zaGExOwotKwkJTUQyOwotKwkJTUQyX0ZpbmFsOwotKwkJTUQyX0luaXQ7Ci0rCQlNRDJfVXBkYXRlOwotKwkJTUQyX29wdGlvbnM7Ci0rCQlNRDU7Ci0rCQlNRDVfRmluYWw7Ci0rCQlNRDVfSW5pdDsKLSsJCU1ENV9VcGRhdGU7Ci0rCQlNREMyOwotKwkJTURDMl9GaW5hbDsKLSsJCU1EQzJfSW5pdDsKLSsJCU1EQzJfVXBkYXRlOwotKwkJTkVUU0NBUEVfU1BLQUNfZnJlZTsKLSsJCU5FVFNDQVBFX1NQS0FDX25ldzsKLSsJCU5FVFNDQVBFX1NQS0lfZnJlZTsKLSsJCU5FVFNDQVBFX1NQS0lfbmV3OwotKwkJTkVUU0NBUEVfU1BLSV9zaWduOwotKwkJTkVUU0NBUEVfU1BLSV92ZXJpZnk7Ci0rCQlPQkpfYWRkX29iamVjdDsKLSsJCU9CSl9ic2VhcmNoOwotKwkJT0JKX2NsZWFudXA7Ci0rCQlPQkpfY21wOwotKwkJT0JKX2NyZWF0ZTsKLSsJCU9CSl9kdXA7Ci0rCQlPQkpfbG4ybmlkOwotKwkJT0JKX25ld19uaWQ7Ci0rCQlPQkpfbmlkMmxuOwotKwkJT0JKX25pZDJvYmo7Ci0rCQlPQkpfbmlkMnNuOwotKwkJT0JKX29iajJuaWQ7Ci0rCQlPQkpfc24ybmlkOwotKwkJT0JKX3R4dDJuaWQ7Ci0rCQlQRU1fQVNOMV9yZWFkOwotKwkJUEVNX0FTTjFfcmVhZF9iaW87Ci0rCQlQRU1fQVNOMV93cml0ZTsKLSsJCVBFTV9BU04xX3dyaXRlX2JpbzsKLSsJCVBFTV9TZWFsRmluYWw7Ci0rCQlQRU1fU2VhbEluaXQ7Ci0rCQlQRU1fU2VhbFVwZGF0ZTsKLSsJCVBFTV9TaWduRmluYWw7Ci0rCQlQRU1fU2lnbkluaXQ7Ci0rCQlQRU1fU2lnblVwZGF0ZTsKLSsJCVBFTV9YNTA5X0lORk9fcmVhZDsKLSsJCVBFTV9YNTA5X0lORk9fcmVhZF9iaW87Ci0rCQlQRU1fWDUwOV9JTkZPX3dyaXRlX2JpbzsKLSsJCVBFTV9kZWtfaW5mbzsKLSsJCVBFTV9kb19oZWFkZXI7Ci0rCQlQRU1fZ2V0X0VWUF9DSVBIRVJfSU5GTzsKLSsJCVBFTV9wcm9jX3R5cGU7Ci0rCQlQRU1fcmVhZDsKLSsJCVBFTV9yZWFkX0RIcGFyYW1zOwotKwkJUEVNX3JlYWRfRFNBUHJpdmF0ZUtleTsKLSsJCVBFTV9yZWFkX0RTQXBhcmFtczsKLSsJCVBFTV9yZWFkX1BLQ1M3OwotKwkJUEVNX3JlYWRfUHJpdmF0ZUtleTsKLSsJCVBFTV9yZWFkX1JTQVByaXZhdGVLZXk7Ci0rCQlQRU1fcmVhZF9YNTA5OwotKwkJUEVNX3JlYWRfWDUwOV9DUkw7Ci0rCQlQRU1fcmVhZF9YNTA5X1JFUTsKLSsJCVBFTV9yZWFkX2JpbzsKLSsJCVBFTV9yZWFkX2Jpb19ESHBhcmFtczsKLSsJCVBFTV9yZWFkX2Jpb19EU0FQcml2YXRlS2V5OwotKwkJUEVNX3JlYWRfYmlvX0RTQXBhcmFtczsKLSsJCVBFTV9yZWFkX2Jpb19QS0NTNzsKLSsJCVBFTV9yZWFkX2Jpb19Qcml2YXRlS2V5OwotKwkJUEVNX3JlYWRfYmlvX1JTQVByaXZhdGVLZXk7Ci0rCQlQRU1fcmVhZF9iaW9fWDUwOTsKLSsJCVBFTV9yZWFkX2Jpb19YNTA5X0NSTDsKLSsJCVBFTV9yZWFkX2Jpb19YNTA5X1JFUTsKLSsJCVBFTV93cml0ZTsKLSsJCVBFTV93cml0ZV9ESHBhcmFtczsKLSsJCVBFTV93cml0ZV9EU0FQcml2YXRlS2V5OwotKwkJUEVNX3dyaXRlX0RTQXBhcmFtczsKLSsJCVBFTV93cml0ZV9QS0NTNzsKLSsJCVBFTV93cml0ZV9Qcml2YXRlS2V5OwotKwkJUEVNX3dyaXRlX1JTQVByaXZhdGVLZXk7Ci0rCQlQRU1fd3JpdGVfWDUwOTsKLSsJCVBFTV93cml0ZV9YNTA5X0NSTDsKLSsJCVBFTV93cml0ZV9YNTA5X1JFUTsKLSsJCVBFTV93cml0ZV9iaW87Ci0rCQlQRU1fd3JpdGVfYmlvX0RIcGFyYW1zOwotKwkJUEVNX3dyaXRlX2Jpb19EU0FQcml2YXRlS2V5OwotKwkJUEVNX3dyaXRlX2Jpb19EU0FwYXJhbXM7Ci0rCQlQRU1fd3JpdGVfYmlvX1BLQ1M3OwotKwkJUEVNX3dyaXRlX2Jpb19Qcml2YXRlS2V5OwotKwkJUEVNX3dyaXRlX2Jpb19SU0FQcml2YXRlS2V5OwotKwkJUEVNX3dyaXRlX2Jpb19YNTA5OwotKwkJUEVNX3dyaXRlX2Jpb19YNTA5X0NSTDsKLSsJCVBFTV93cml0ZV9iaW9fWDUwOV9SRVE7Ci0rCQlQS0NTN19ESUdFU1RfZnJlZTsKLSsJCVBLQ1M3X0RJR0VTVF9uZXc7Ci0rCQlQS0NTN19FTkNSWVBUX2ZyZWU7Ci0rCQlQS0NTN19FTkNSWVBUX25ldzsKLSsJCVBLQ1M3X0VOQ19DT05URU5UX2ZyZWU7Ci0rCQlQS0NTN19FTkNfQ09OVEVOVF9uZXc7Ci0rCQlQS0NTN19FTlZFTE9QRV9mcmVlOwotKwkJUEtDUzdfRU5WRUxPUEVfbmV3OwotKwkJUEtDUzdfSVNTVUVSX0FORF9TRVJJQUxfZGlnZXN0OwotKwkJUEtDUzdfSVNTVUVSX0FORF9TRVJJQUxfZnJlZTsKLSsJCVBLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMX25ldzsKLSsJCVBLQ1M3X1JFQ0lQX0lORk9fZnJlZTsKLSsJCVBLQ1M3X1JFQ0lQX0lORk9fbmV3OwotKwkJUEtDUzdfU0lHTkVEX2ZyZWU7Ci0rCQlQS0NTN19TSUdORURfbmV3OwotKwkJUEtDUzdfU0lHTkVSX0lORk9fZnJlZTsKLSsJCVBLQ1M3X1NJR05FUl9JTkZPX25ldzsKLSsJCVBLQ1M3X1NJR05fRU5WRUxPUEVfZnJlZTsKLSsJCVBLQ1M3X1NJR05fRU5WRUxPUEVfbmV3OwotKwkJUEtDUzdfZHVwOwotKwkJUEtDUzdfZnJlZTsKLSsJCVBLQ1M3X25ldzsKLSsJCVBST1hZX0VOVFJZX2FkZF9ub3Byb3h5OwotKwkJUFJPWFlfRU5UUllfY2xlYXJfbm9wcm94eTsKLSsJCVBST1hZX0VOVFJZX2ZyZWU7Ci0rCQlQUk9YWV9FTlRSWV9nZXRfbm9wcm94eTsKLSsJCVBST1hZX0VOVFJZX25ldzsKLSsJCVBST1hZX0VOVFJZX3NldF9zZXJ2ZXI7Ci0rCQlQUk9YWV9hZGRfbm9wcm94eTsKLSsJCVBST1hZX2FkZF9zZXJ2ZXI7Ci0rCQlQUk9YWV9jaGVja19ieV9ob3N0OwotKwkJUFJPWFlfY2hlY2tfdXJsOwotKwkJUFJPWFlfY2xlYXJfbm9wcm94eTsKLSsJCVBST1hZX2ZyZWU7Ci0rCQlQUk9YWV9nZXRfbm9wcm94eTsKLSsJCVBST1hZX2dldF9wcm94aWVzOwotKwkJUFJPWFlfZ2V0X3Byb3h5X2VudHJ5OwotKwkJUFJPWFlfbG9hZF9jb25mOwotKwkJUFJPWFlfbmV3OwotKwkJUFJPWFlfcHJpbnQ7Ci0rCQlSQU5EX2J5dGVzOwotKwkJUkFORF9jbGVhbnVwOwotKwkJUkFORF9maWxlX25hbWU7Ci0rCQlSQU5EX2xvYWRfZmlsZTsKLSsJCVJBTkRfc2NyZWVuOwotKwkJUkFORF9zZWVkOwotKwkJUkFORF93cml0ZV9maWxlOwotKwkJUkMyX2NiY19lbmNyeXB0OwotKwkJUkMyX2NmYjY0X2VuY3J5cHQ7Ci0rCQlSQzJfZWNiX2VuY3J5cHQ7Ci0rCQlSQzJfZW5jcnlwdDsKLSsJCVJDMl9vZmI2NF9lbmNyeXB0OwotKwkJUkMyX3NldF9rZXk7Ci0rCQlSQzQ7Ci0rCQlSQzRfb3B0aW9uczsKLSsJCVJDNF9zZXRfa2V5OwotKwkJUlNBUHJpdmF0ZUtleV9hc24xX21ldGg7Ci0rCQlSU0FQcml2YXRlS2V5X2R1cDsKLSsJCVJTQVB1YmxpY0tleV9kdXA7Ci0rCQlSU0FfUEtDUzFfU1NMZWF5OwotKwkJUlNBX2ZyZWU7Ci0rCQlSU0FfZ2VuZXJhdGVfa2V5OwotKwkJUlNBX25ldzsKLSsJCVJTQV9uZXdfbWV0aG9kOwotKwkJUlNBX3ByaW50OwotKwkJUlNBX3ByaW50X2ZwOwotKwkJUlNBX3ByaXZhdGVfZGVjcnlwdDsKLSsJCVJTQV9wcml2YXRlX2VuY3J5cHQ7Ci0rCQlSU0FfcHVibGljX2RlY3J5cHQ7Ci0rCQlSU0FfcHVibGljX2VuY3J5cHQ7Ci0rCQlSU0Ffc2V0X2RlZmF1bHRfbWV0aG9kOwotKwkJUlNBX3NpZ247Ci0rCQlSU0Ffc2lnbl9BU04xX09DVEVUX1NUUklORzsKLSsJCVJTQV9zaXplOwotKwkJUlNBX3ZlcmlmeTsKLSsJCVJTQV92ZXJpZnlfQVNOMV9PQ1RFVF9TVFJJTkc7Ci0rCQlTSEE7Ci0rCQlTSEExOwotKwkJU0hBMV9GaW5hbDsKLSsJCVNIQTFfSW5pdDsKLSsJCVNIQTFfVXBkYXRlOwotKwkJU0hBX0ZpbmFsOwotKwkJU0hBX0luaXQ7Ci0rCQlTSEFfVXBkYXRlOwotKwkJT3BlblNTTF9hZGRfYWxsX2FsZ29yaXRobXM7Ci0rCQlPcGVuU1NMX2FkZF9hbGxfY2lwaGVyczsKLSsJCU9wZW5TU0xfYWRkX2FsbF9kaWdlc3RzOwotKwkJVFhUX0RCX2NyZWF0ZV9pbmRleDsKLSsJCVRYVF9EQl9mcmVlOwotKwkJVFhUX0RCX2dldF9ieV9pbmRleDsKLSsJCVRYVF9EQl9pbnNlcnQ7Ci0rCQlUWFRfREJfcmVhZDsKLSsJCVRYVF9EQl93cml0ZTsKLSsJCVg1MDlfQUxHT1JfZnJlZTsKLSsJCVg1MDlfQUxHT1JfbmV3OwotKwkJWDUwOV9BVFRSSUJVVEVfZnJlZTsKLSsJCVg1MDlfQVRUUklCVVRFX25ldzsKLSsJCVg1MDlfQ0lORl9mcmVlOwotKwkJWDUwOV9DSU5GX25ldzsKLSsJCVg1MDlfQ1JMX0lORk9fZnJlZTsKLSsJCVg1MDlfQ1JMX0lORk9fbmV3OwotKwkJWDUwOV9DUkxfYWRkX2V4dDsKLSsJCVg1MDlfQ1JMX2NtcDsKLSsJCVg1MDlfQ1JMX2RlbGV0ZV9leHQ7Ci0rCQlYNTA5X0NSTF9kdXA7Ci0rCQlYNTA5X0NSTF9mcmVlOwotKwkJWDUwOV9DUkxfZ2V0X2V4dDsKLSsJCVg1MDlfQ1JMX2dldF9leHRfYnlfTklEOwotKwkJWDUwOV9DUkxfZ2V0X2V4dF9ieV9PQko7Ci0rCQlYNTA5X0NSTF9nZXRfZXh0X2J5X2NyaXRpY2FsOwotKwkJWDUwOV9DUkxfZ2V0X2V4dF9jb3VudDsKLSsJCVg1MDlfQ1JMX25ldzsKLSsJCVg1MDlfQ1JMX3NpZ247Ci0rCQlYNTA5X0NSTF92ZXJpZnk7Ci0rCQlYNTA5X0VYVEVOU0lPTl9jcmVhdGVfYnlfTklEOwotKwkJWDUwOV9FWFRFTlNJT05fY3JlYXRlX2J5X09CSjsKLSsJCVg1MDlfRVhURU5TSU9OX2R1cDsKLSsJCVg1MDlfRVhURU5TSU9OX2ZyZWU7Ci0rCQlYNTA5X0VYVEVOU0lPTl9nZXRfY3JpdGljYWw7Ci0rCQlYNTA5X0VYVEVOU0lPTl9nZXRfZGF0YTsKLSsJCVg1MDlfRVhURU5TSU9OX2dldF9vYmplY3Q7Ci0rCQlYNTA5X0VYVEVOU0lPTl9uZXc7Ci0rCQlYNTA5X0VYVEVOU0lPTl9zZXRfY3JpdGljYWw7Ci0rCQlYNTA5X0VYVEVOU0lPTl9zZXRfZGF0YTsKLSsJCVg1MDlfRVhURU5TSU9OX3NldF9vYmplY3Q7Ci0rCQlYNTA5X0lORk9fZnJlZTsKLSsJCVg1MDlfSU5GT19uZXc7Ci0rCQlYNTA5X0xPT0tVUF9ieV9hbGlhczsKLSsJCVg1MDlfTE9PS1VQX2J5X2ZpbmdlcnByaW50OwotKwkJWDUwOV9MT09LVVBfYnlfaXNzdWVyX3NlcmlhbDsKLSsJCVg1MDlfTE9PS1VQX2J5X3N1YmplY3Q7Ci0rCQlYNTA5X0xPT0tVUF9jdHJsOwotKwkJWDUwOV9MT09LVVBfZmlsZTsKLSsJCVg1MDlfTE9PS1VQX2ZyZWU7Ci0rCQlYNTA5X0xPT0tVUF9oYXNoX2RpcjsKLSsJCVg1MDlfTE9PS1VQX2luaXQ7Ci0rCQlYNTA5X0xPT0tVUF9uZXc7Ci0rCQlYNTA5X0xPT0tVUF9zaHV0ZG93bjsKLSsJCVg1MDlfTkFNRV9FTlRSWV9jcmVhdGVfYnlfTklEOwotKwkJWDUwOV9OQU1FX0VOVFJZX2NyZWF0ZV9ieV9PQko7Ci0rCQlYNTA5X05BTUVfRU5UUllfZHVwOwotKwkJWDUwOV9OQU1FX0VOVFJZX2ZyZWU7Ci0rCQlYNTA5X05BTUVfRU5UUllfZ2V0X2RhdGE7Ci0rCQlYNTA5X05BTUVfRU5UUllfZ2V0X29iamVjdDsKLSsJCVg1MDlfTkFNRV9FTlRSWV9uZXc7Ci0rCQlYNTA5X05BTUVfRU5UUllfc2V0X2RhdGE7Ci0rCQlYNTA5X05BTUVfRU5UUllfc2V0X29iamVjdDsKLSsJCVg1MDlfTkFNRV9hZGRfZW50cnk7Ci0rCQlYNTA5X05BTUVfY21wOwotKwkJWDUwOV9OQU1FX2RlbGV0ZV9lbnRyeTsKLSsJCVg1MDlfTkFNRV9kaWdlc3Q7Ci0rCQlYNTA5X05BTUVfZHVwOwotKwkJWDUwOV9OQU1FX2VudHJ5X2NvdW50OwotKwkJWDUwOV9OQU1FX2ZyZWU7Ci0rCQlYNTA5X05BTUVfZ2V0X2VudHJ5OwotKwkJWDUwOV9OQU1FX2dldF9pbmRleF9ieV9OSUQ7Ci0rCQlYNTA5X05BTUVfZ2V0X2luZGV4X2J5X09CSjsKLSsJCVg1MDlfTkFNRV9nZXRfdGV4dF9ieV9OSUQ7Ci0rCQlYNTA5X05BTUVfZ2V0X3RleHRfYnlfT0JKOwotKwkJWDUwOV9OQU1FX2hhc2g7Ci0rCQlYNTA5X05BTUVfbmV3OwotKwkJWDUwOV9OQU1FX29uZWxpbmU7Ci0rCQlYNTA5X05BTUVfcHJpbnQ7Ci0rCQlYNTA5X05BTUVfc2V0OwotKwkJWDUwOV9PQkpFQ1RfZnJlZV9jb250ZW50czsKLSsJCVg1MDlfT0JKRUNUX3JldHJpZXZlX2J5X3N1YmplY3Q7Ci0rCQlYNTA5X09CSkVDVF91cF9yZWZfY291bnQ7Ci0rCQlYNTA5X1BLRVlfZnJlZTsKLSsJCVg1MDlfUEtFWV9uZXc7Ci0rCQlYNTA5X1BVQktFWV9mcmVlOwotKwkJWDUwOV9QVUJLRVlfZ2V0OwotKwkJWDUwOV9QVUJLRVlfbmV3OwotKwkJWDUwOV9QVUJLRVlfc2V0OwotKwkJWDUwOV9SRVFfSU5GT19mcmVlOwotKwkJWDUwOV9SRVFfSU5GT19uZXc7Ci0rCQlYNTA5X1JFUV9kdXA7Ci0rCQlYNTA5X1JFUV9mcmVlOwotKwkJWDUwOV9SRVFfZ2V0X3B1YmtleTsKLSsJCVg1MDlfUkVRX25ldzsKLSsJCVg1MDlfUkVRX3ByaW50OwotKwkJWDUwOV9SRVFfcHJpbnRfZnA7Ci0rCQlYNTA5X1JFUV9zZXRfcHVia2V5OwotKwkJWDUwOV9SRVFfc2V0X3N1YmplY3RfbmFtZTsKLSsJCVg1MDlfUkVRX3NldF92ZXJzaW9uOwotKwkJWDUwOV9SRVFfc2lnbjsKLSsJCVg1MDlfUkVRX3RvX1g1MDk7Ci0rCQlYNTA5X1JFUV92ZXJpZnk7Ci0rCQlYNTA5X1JFVk9LRURfYWRkX2V4dDsKLSsJCVg1MDlfUkVWT0tFRF9kZWxldGVfZXh0OwotKwkJWDUwOV9SRVZPS0VEX2ZyZWU7Ci0rCQlYNTA5X1JFVk9LRURfZ2V0X2V4dDsKLSsJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2J5X05JRDsKLSsJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2J5X09CSjsKLSsJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2J5X2NyaXRpY2FsOwotKwkJWDUwOV9SRVZPS0VEX2dldF9leHRfYnlfY3JpdGljOwotKwkJWDUwOV9SRVZPS0VEX2dldF9leHRfY291bnQ7Ci0rCQlYNTA5X1JFVk9LRURfbmV3OwotKwkJWDUwOV9TSUdfZnJlZTsKLSsJCVg1MDlfU0lHX25ldzsKLSsJCVg1MDlfU1RPUkVfQ1RYX2NsZWFudXA7Ci0rCQlYNTA5X1NUT1JFX0NUWF9pbml0OwotKwkJWDUwOV9TVE9SRV9hZGRfY2VydDsKLSsJCVg1MDlfU1RPUkVfYWRkX2xvb2t1cDsKLSsJCVg1MDlfU1RPUkVfZnJlZTsKLSsJCVg1MDlfU1RPUkVfZ2V0X2J5X3N1YmplY3Q7Ci0rCQlYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25zOwotKwkJWDUwOV9TVE9SRV9uZXc7Ci0rCQlYNTA5X1NUT1JFX3NldF9kZWZhdWx0X3BhdGhzOwotKwkJWDUwOV9WQUxfZnJlZTsKLSsJCVg1MDlfVkFMX25ldzsKLSsJCVg1MDlfYWRkX2V4dDsKLSsJCVg1MDlfYXNuMV9tZXRoOwotKwkJWDUwOV9jZXJ0aWZpY2F0ZV90eXBlOwotKwkJWDUwOV9jaGVja19wcml2YXRlX2tleTsKLSsJCVg1MDlfY21wX2N1cnJlbnRfdGltZTsKLSsJCVg1MDlfZGVsZXRlX2V4dDsKLSsJCVg1MDlfZGlnZXN0OwotKwkJWDUwOV9kdXA7Ci0rCQlYNTA5X2ZyZWU7Ci0rCQlYNTA5X2dldF9kZWZhdWx0X2NlcnRfYXJlYTsKLSsJCVg1MDlfZ2V0X2RlZmF1bHRfY2VydF9kaXI7Ci0rCQlYNTA5X2dldF9kZWZhdWx0X2NlcnRfZGlyX2VudjsKLSsJCVg1MDlfZ2V0X2RlZmF1bHRfY2VydF9maWxlOwotKwkJWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2ZpbGVfZW52OwotKwkJWDUwOV9nZXRfZGVmYXVsdF9wcml2YXRlX2RpcjsKLSsJCVg1MDlfZ2V0X2V4dDsKLSsJCVg1MDlfZ2V0X2V4dF9ieV9OSUQ7Ci0rCQlYNTA5X2dldF9leHRfYnlfT0JKOwotKwkJWDUwOV9nZXRfZXh0X2J5X2NyaXRpY2FsOwotKwkJWDUwOV9nZXRfZXh0X2NvdW50OwotKwkJWDUwOV9nZXRfaXNzdWVyX25hbWU7Ci0rCQlYNTA5X2dldF9wdWJrZXk7Ci0rCQlYNTA5X2dldF9wdWJrZXlfcGFyYW1ldGVyczsKLSsJCVg1MDlfZ2V0X3NlcmlhbE51bWJlcjsKLSsJCVg1MDlfZ2V0X3N1YmplY3RfbmFtZTsKLSsJCVg1MDlfZ210aW1lX2FkajsKLSsJCVg1MDlfaXNzdWVyX2FuZF9zZXJpYWxfY21wOwotKwkJWDUwOV9pc3N1ZXJfYW5kX3NlcmlhbF9oYXNoOwotKwkJWDUwOV9pc3N1ZXJfbmFtZV9jbXA7Ci0rCQlYNTA5X2lzc3Vlcl9uYW1lX2hhc2g7Ci0rCQlYNTA5X2xvYWRfY2VydF9maWxlOwotKwkJWDUwOV9uZXc7Ci0rCQlYNTA5X3ByaW50OwotKwkJWDUwOV9wcmludF9mcDsKLSsJCVg1MDlfc2V0X2lzc3Vlcl9uYW1lOwotKwkJWDUwOV9zZXRfbm90QWZ0ZXI7Ci0rCQlYNTA5X3NldF9ub3RCZWZvcmU7Ci0rCQlYNTA5X3NldF9wdWJrZXk7Ci0rCQlYNTA5X3NldF9zZXJpYWxOdW1iZXI7Ci0rCQlYNTA5X3NldF9zdWJqZWN0X25hbWU7Ci0rCQlYNTA5X3NldF92ZXJzaW9uOwotKwkJWDUwOV9zaWduOwotKwkJWDUwOV9zdWJqZWN0X25hbWVfY21wOwotKwkJWDUwOV9zdWJqZWN0X25hbWVfaGFzaDsKLSsJCVg1MDlfdG9fWDUwOV9SRVE7Ci0rCQlYNTA5X3ZlcmlmeTsKLSsJCVg1MDlfdmVyaWZ5X2NlcnQ7Ci0rCQlYNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZzsKLSsJCVg1MDl2M19hZGRfZXh0OwotKwkJWDUwOXYzX2FkZF9leHRlbnNpb247Ci0rCQlYNTA5djNfYWRkX25ldHNjYXBlX2V4dGVuc2lvbnM7Ci0rCQlYNTA5djNfYWRkX3N0YW5kYXJkX2V4dGVuc2lvbnM7Ci0rCQlYNTA5djNfY2xlYW51cF9leHRlbnNpb25zOwotKwkJWDUwOXYzX2RhdGFfdHlwZV9ieV9OSUQ7Ci0rCQlYNTA5djNfZGF0YV90eXBlX2J5X09CSjsKLSsJCVg1MDl2M19kZWxldGVfZXh0OwotKwkJWDUwOXYzX2dldF9leHQ7Ci0rCQlYNTA5djNfZ2V0X2V4dF9ieV9OSUQ7Ci0rCQlYNTA5djNfZ2V0X2V4dF9ieV9PQko7Ci0rCQlYNTA5djNfZ2V0X2V4dF9ieV9jcml0aWNhbDsKLSsJCVg1MDl2M19nZXRfZXh0X2NvdW50OwotKwkJWDUwOXYzX3BhY2tfc3RyaW5nOwotKwkJWDUwOXYzX3BhY2tfdHlwZV9ieV9OSUQ7Ci0rCQlYNTA5djNfcGFja190eXBlX2J5X09CSjsKLSsJCVg1MDl2M191bnBhY2tfc3RyaW5nOwotKwkJX2Rlc19jcnlwdDsKLSsJCWEyZF9BU04xX09CSkVDVDsKLSsJCWEyaV9BU04xX0lOVEVHRVI7Ci0rCQlhMmlfQVNOMV9TVFJJTkc7Ci0rCQlhc24xX0ZpbmlzaDsKLSsJCWFzbjFfR2V0U2VxdWVuY2U7Ci0rCQlibl9kaXZfd29yZHM7Ci0rCQlibl9leHBhbmQyOwotKwkJYm5fbXVsX2FkZF93b3JkczsKLSsJCWJuX211bF93b3JkczsKLSsJCUJOX3VhZGQ7Ci0rCQlCTl91c3ViOwotKwkJYm5fc3FyX3dvcmRzOwotKwkJX29zc2xfb2xkX2NyeXB0OwotKwkJZDJpX0FTTjFfQklUX1NUUklORzsKLSsJCWQyaV9BU04xX0JPT0xFQU47Ci0rCQlkMmlfQVNOMV9IRUFERVI7Ci0rCQlkMmlfQVNOMV9JQTVTVFJJTkc7Ci0rCQlkMmlfQVNOMV9JTlRFR0VSOwotKwkJZDJpX0FTTjFfT0JKRUNUOwotKwkJZDJpX0FTTjFfT0NURVRfU1RSSU5HOwotKwkJZDJpX0FTTjFfUFJJTlRBQkxFOwotKwkJZDJpX0FTTjFfUFJJTlRBQkxFU1RSSU5HOwotKwkJZDJpX0FTTjFfU0VUOwotKwkJZDJpX0FTTjFfVDYxU1RSSU5HOwotKwkJZDJpX0FTTjFfVFlQRTsKLSsJCWQyaV9BU04xX1VUQ1RJTUU7Ci0rCQlkMmlfQVNOMV9ieXRlczsKLSsJCWQyaV9BU04xX3R5cGVfYnl0ZXM7Ci0rCQlkMmlfREhwYXJhbXM7Ci0rCQlkMmlfRFNBUHJpdmF0ZUtleTsKLSsJCWQyaV9EU0FQcml2YXRlS2V5X2JpbzsKLSsJCWQyaV9EU0FQcml2YXRlS2V5X2ZwOwotKwkJZDJpX0RTQVB1YmxpY0tleTsKLSsJCWQyaV9EU0FwYXJhbXM7Ci0rCQlkMmlfTkVUU0NBUEVfU1BLQUM7Ci0rCQlkMmlfTkVUU0NBUEVfU1BLSTsKLSsJCWQyaV9OZXRzY2FwZV9SU0E7Ci0rCQlkMmlfUEtDUzc7Ci0rCQlkMmlfUEtDUzdfRElHRVNUOwotKwkJZDJpX1BLQ1M3X0VOQ1JZUFQ7Ci0rCQlkMmlfUEtDUzdfRU5DX0NPTlRFTlQ7Ci0rCQlkMmlfUEtDUzdfRU5WRUxPUEU7Ci0rCQlkMmlfUEtDUzdfSVNTVUVSX0FORF9TRVJJQUw7Ci0rCQlkMmlfUEtDUzdfUkVDSVBfSU5GTzsKLSsJCWQyaV9QS0NTN19TSUdORUQ7Ci0rCQlkMmlfUEtDUzdfU0lHTkVSX0lORk87Ci0rCQlkMmlfUEtDUzdfU0lHTl9FTlZFTE9QRTsKLSsJCWQyaV9QS0NTN19iaW87Ci0rCQlkMmlfUEtDUzdfZnA7Ci0rCQlkMmlfUHJpdmF0ZUtleTsKLSsJCWQyaV9QdWJsaWNLZXk7Ci0rCQlkMmlfUlNBUHJpdmF0ZUtleTsKLSsJCWQyaV9SU0FQcml2YXRlS2V5X2JpbzsKLSsJCWQyaV9SU0FQcml2YXRlS2V5X2ZwOwotKwkJZDJpX1JTQVB1YmxpY0tleTsKLSsJCWQyaV9YNTA5OwotKwkJZDJpX1g1MDlfQUxHT1I7Ci0rCQlkMmlfWDUwOV9BVFRSSUJVVEU7Ci0rCQlkMmlfWDUwOV9DSU5GOwotKwkJZDJpX1g1MDlfQ1JMOwotKwkJZDJpX1g1MDlfQ1JMX0lORk87Ci0rCQlkMmlfWDUwOV9DUkxfYmlvOwotKwkJZDJpX1g1MDlfQ1JMX2ZwOwotKwkJZDJpX1g1MDlfRVhURU5TSU9OOwotKwkJZDJpX1g1MDlfTkFNRTsKLSsJCWQyaV9YNTA5X05BTUVfRU5UUlk7Ci0rCQlkMmlfWDUwOV9QS0VZOwotKwkJZDJpX1g1MDlfUFVCS0VZOwotKwkJZDJpX1g1MDlfUkVROwotKwkJZDJpX1g1MDlfUkVRX0lORk87Ci0rCQlkMmlfWDUwOV9SRVFfYmlvOwotKwkJZDJpX1g1MDlfUkVRX2ZwOwotKwkJZDJpX1g1MDlfUkVWT0tFRDsKLSsJCWQyaV9YNTA5X1NJRzsKLSsJCWQyaV9YNTA5X1ZBTDsKLSsJCWQyaV9YNTA5X2JpbzsKLSsJCWQyaV9YNTA5X2ZwOwotKwkJREVTX2NiY19ja3N1bTsKLSsJCURFU19jYmNfZW5jcnlwdDsKLSsJCURFU19jYmxvY2tfcHJpbnRfZmlsZTsKLSsJCURFU19jZmI2NF9lbmNyeXB0OwotKwkJREVTX2NmYl9lbmNyeXB0OwotKwkJREVTX2RlY3J5cHQzOwotKwkJREVTX2VjYjNfZW5jcnlwdDsKLSsJCURFU19lY2JfZW5jcnlwdDsKLSsJCURFU19lZGUzX2NiY19lbmNyeXB0OwotKwkJREVTX2VkZTNfY2ZiNjRfZW5jcnlwdDsKLSsJCURFU19lZGUzX29mYjY0X2VuY3J5cHQ7Ci0rCQlERVNfZW5jX3JlYWQ7Ci0rCQlERVNfZW5jX3dyaXRlOwotKwkJREVTX2VuY3J5cHQxOwotKwkJREVTX2VuY3J5cHQyOwotKwkJREVTX2VuY3J5cHQzOwotKwkJREVTX2ZjcnlwdDsKLSsJCURFU19pc193ZWFrX2tleTsKLSsJCURFU19rZXlfc2NoZWQ7Ci0rCQlERVNfbmNiY19lbmNyeXB0OwotKwkJREVTX29mYjY0X2VuY3J5cHQ7Ci0rCQlERVNfb2ZiX2VuY3J5cHQ7Ci0rCQlERVNfb3B0aW9uczsKLSsJCURFU19wY2JjX2VuY3J5cHQ7Ci0rCQlERVNfcXVhZF9ja3N1bTsKLSsJCURFU19yYW5kb21fa2V5OwotKwkJX29zc2xfb2xkX2Rlc19yYW5kb21fc2VlZDsKLSsJCV9vc3NsX29sZF9kZXNfcmVhZF8ycGFzc3dvcmRzOwotKwkJX29zc2xfb2xkX2Rlc19yZWFkX3Bhc3N3b3JkOwotKwkJX29zc2xfb2xkX2Rlc19yZWFkX3B3OwotKwkJX29zc2xfb2xkX2Rlc19yZWFkX3B3X3N0cmluZzsKLSsJCURFU19zZXRfa2V5OwotKwkJREVTX3NldF9vZGRfcGFyaXR5OwotKwkJREVTX3N0cmluZ190b18ya2V5czsKLSsJCURFU19zdHJpbmdfdG9fa2V5OwotKwkJREVTX3hjYmNfZW5jcnlwdDsKLSsJCURFU194d2hpdGVfaW4yb3V0OwotKwkJZmNyeXB0X2JvZHk7Ci0rCQlpMmFfQVNOMV9JTlRFR0VSOwotKwkJaTJhX0FTTjFfT0JKRUNUOwotKwkJaTJhX0FTTjFfU1RSSU5HOwotKwkJaTJkX0FTTjFfQklUX1NUUklORzsKLSsJCWkyZF9BU04xX0JPT0xFQU47Ci0rCQlpMmRfQVNOMV9IRUFERVI7Ci0rCQlpMmRfQVNOMV9JQTVTVFJJTkc7Ci0rCQlpMmRfQVNOMV9JTlRFR0VSOwotKwkJaTJkX0FTTjFfT0JKRUNUOwotKwkJaTJkX0FTTjFfT0NURVRfU1RSSU5HOwotKwkJaTJkX0FTTjFfUFJJTlRBQkxFOwotKwkJaTJkX0FTTjFfU0VUOwotKwkJaTJkX0FTTjFfVFlQRTsKLSsJCWkyZF9BU04xX1VUQ1RJTUU7Ci0rCQlpMmRfQVNOMV9ieXRlczsKLSsJCWkyZF9ESHBhcmFtczsKLSsJCWkyZF9EU0FQcml2YXRlS2V5OwotKwkJaTJkX0RTQVByaXZhdGVLZXlfYmlvOwotKwkJaTJkX0RTQVByaXZhdGVLZXlfZnA7Ci0rCQlpMmRfRFNBUHVibGljS2V5OwotKwkJaTJkX0RTQXBhcmFtczsKLSsJCWkyZF9ORVRTQ0FQRV9TUEtBQzsKLSsJCWkyZF9ORVRTQ0FQRV9TUEtJOwotKwkJaTJkX05ldHNjYXBlX1JTQTsKLSsJCWkyZF9QS0NTNzsKLSsJCWkyZF9QS0NTN19ESUdFU1Q7Ci0rCQlpMmRfUEtDUzdfRU5DUllQVDsKLSsJCWkyZF9QS0NTN19FTkNfQ09OVEVOVDsKLSsJCWkyZF9QS0NTN19FTlZFTE9QRTsKLSsJCWkyZF9QS0NTN19JU1NVRVJfQU5EX1NFUklBTDsKLSsJCWkyZF9QS0NTN19SRUNJUF9JTkZPOwotKwkJaTJkX1BLQ1M3X1NJR05FRDsKLSsJCWkyZF9QS0NTN19TSUdORVJfSU5GTzsKLSsJCWkyZF9QS0NTN19TSUdOX0VOVkVMT1BFOwotKwkJaTJkX1BLQ1M3X2JpbzsKLSsJCWkyZF9QS0NTN19mcDsKLSsJCWkyZF9Qcml2YXRlS2V5OwotKwkJaTJkX1B1YmxpY0tleTsKLSsJCWkyZF9SU0FQcml2YXRlS2V5OwotKwkJaTJkX1JTQVByaXZhdGVLZXlfYmlvOwotKwkJaTJkX1JTQVByaXZhdGVLZXlfZnA7Ci0rCQlpMmRfUlNBUHVibGljS2V5OwotKwkJaTJkX1g1MDk7Ci0rCQlpMmRfWDUwOV9BTEdPUjsKLSsJCWkyZF9YNTA5X0FUVFJJQlVURTsKLSsJCWkyZF9YNTA5X0NJTkY7Ci0rCQlpMmRfWDUwOV9DUkw7Ci0rCQlpMmRfWDUwOV9DUkxfSU5GTzsKLSsJCWkyZF9YNTA5X0NSTF9iaW87Ci0rCQlpMmRfWDUwOV9DUkxfZnA7Ci0rCQlpMmRfWDUwOV9FWFRFTlNJT047Ci0rCQlpMmRfWDUwOV9OQU1FOwotKwkJaTJkX1g1MDlfTkFNRV9FTlRSWTsKLSsJCWkyZF9YNTA5X1BLRVk7Ci0rCQlpMmRfWDUwOV9QVUJLRVk7Ci0rCQlpMmRfWDUwOV9SRVE7Ci0rCQlpMmRfWDUwOV9SRVFfSU5GTzsKLSsJCWkyZF9YNTA5X1JFUV9iaW87Ci0rCQlpMmRfWDUwOV9SRVFfZnA7Ci0rCQlpMmRfWDUwOV9SRVZPS0VEOwotKwkJaTJkX1g1MDlfU0lHOwotKwkJaTJkX1g1MDlfVkFMOwotKwkJaTJkX1g1MDlfYmlvOwotKwkJaTJkX1g1MDlfZnA7Ci0rCQlpZGVhX2NiY19lbmNyeXB0OwotKwkJaWRlYV9jZmI2NF9lbmNyeXB0OwotKwkJaWRlYV9lY2JfZW5jcnlwdDsKLSsJCWlkZWFfZW5jcnlwdDsKLSsJCWlkZWFfb2ZiNjRfZW5jcnlwdDsKLSsJCWlkZWFfb3B0aW9uczsKLSsJCWlkZWFfc2V0X2RlY3J5cHRfa2V5OwotKwkJaWRlYV9zZXRfZW5jcnlwdF9rZXk7Ci0rCQlsaF9kZWxldGU7Ci0rCQlsaF9kb2FsbDsKLSsJCWxoX2RvYWxsX2FyZzsKLSsJCWxoX2ZyZWU7Ci0rCQlsaF9pbnNlcnQ7Ci0rCQlsaF9uZXc7Ci0rCQlsaF9ub2RlX3N0YXRzOwotKwkJbGhfbm9kZV9zdGF0c19iaW87Ci0rCQlsaF9ub2RlX3VzYWdlX3N0YXRzOwotKwkJbGhfbm9kZV91c2FnZV9zdGF0c19iaW87Ci0rCQlsaF9yZXRyaWV2ZTsKLSsJCWxoX3N0YXRzOwotKwkJbGhfc3RhdHNfYmlvOwotKwkJbGhfc3RyaGFzaDsKLSsJCXNrX2RlbGV0ZTsKLSsJCXNrX2RlbGV0ZV9wdHI7Ci0rCQlza19kdXA7Ci0rCQlza19maW5kOwotKwkJc2tfZnJlZTsKLSsJCXNrX2luc2VydDsKLSsJCXNrX25ldzsKLSsJCXNrX3BvcDsKLSsJCXNrX3BvcF9mcmVlOwotKwkJc2tfcHVzaDsKLSsJCXNrX3NldF9jbXBfZnVuYzsKLSsJCXNrX3NoaWZ0OwotKwkJc2tfdW5zaGlmdDsKLSsJCXNrX3plcm87Ci0rCQlCSU9fZl9uYmlvX3Rlc3Q7Ci0rCQlBU04xX1RZUEVfZ2V0OwotKwkJQVNOMV9UWVBFX3NldDsKLSsJCVBLQ1M3X2NvbnRlbnRfZnJlZTsKLSsJCUVSUl9sb2FkX1BLQ1M3X3N0cmluZ3M7Ci0rCQlYNTA5X2ZpbmRfYnlfaXNzdWVyX2FuZF9zZXJpYWw7Ci0rCQlYNTA5X2ZpbmRfYnlfc3ViamVjdDsKLSsJCVBLQ1M3X2N0cmw7Ci0rCQlQS0NTN19zZXRfdHlwZTsKLSsJCVBLQ1M3X3NldF9jb250ZW50OwotKwkJUEtDUzdfU0lHTkVSX0lORk9fc2V0OwotKwkJUEtDUzdfYWRkX3NpZ25lcjsKLSsJCVBLQ1M3X2FkZF9jZXJ0aWZpY2F0ZTsKLSsJCVBLQ1M3X2FkZF9jcmw7Ci0rCQlQS0NTN19jb250ZW50X25ldzsKLSsJCVBLQ1M3X2RhdGFTaWduOwotKwkJUEtDUzdfZGF0YVZlcmlmeTsKLSsJCVBLQ1M3X2RhdGFJbml0OwotKwkJUEtDUzdfYWRkX3NpZ25hdHVyZTsKLSsJCVBLQ1M3X2NlcnRfZnJvbV9zaWduZXJfaW5mbzsKLSsJCVBLQ1M3X2dldF9zaWduZXJfaW5mbzsKLSsJCUVWUF9kZWxldGVfYWxpYXM7Ci0rCQlFVlBfbWRjMjsKLSsJCVBFTV9yZWFkX2Jpb19SU0FQdWJsaWNLZXk7Ci0rCQlQRU1fd3JpdGVfYmlvX1JTQVB1YmxpY0tleTsKLSsJCWQyaV9SU0FQdWJsaWNLZXlfYmlvOwotKwkJaTJkX1JTQVB1YmxpY0tleV9iaW87Ci0rCQlQRU1fcmVhZF9SU0FQdWJsaWNLZXk7Ci0rCQlQRU1fd3JpdGVfUlNBUHVibGljS2V5OwotKwkJZDJpX1JTQVB1YmxpY0tleV9mcDsKLSsJCWkyZF9SU0FQdWJsaWNLZXlfZnA7Ci0rCQlCSU9fY29weV9uZXh0X3JldHJ5OwotKwkJUlNBX2ZsYWdzOwotKwkJWDUwOV9TVE9SRV9hZGRfY3JsOwotKwkJWDUwOV9sb2FkX2NybF9maWxlOwotKwkJRVZQX3JjMl80MF9jYmM7Ci0rCQlFVlBfcmM0XzQwOwotKwkJRVZQX0NJUEhFUl9DVFhfaW5pdDsKLSsJCUhNQUM7Ci0rCQlITUFDX0luaXQ7Ci0rCQlITUFDX1VwZGF0ZTsKLSsJCUhNQUNfRmluYWw7Ci0rCQlFUlJfZ2V0X25leHRfZXJyb3JfbGlicmFyeTsKLSsJCUVWUF9QS0VZX2NtcF9wYXJhbWV0ZXJzOwotKwkJSE1BQ19jbGVhbnVwOwotKwkJQklPX3B0cl9jdHJsOwotKwkJQklPX25ld19maWxlX2ludGVybmFsOwotKwkJQklPX25ld19mcF9pbnRlcm5hbDsKLSsJCUJJT19zX2ZpbGVfaW50ZXJuYWw7Ci0rCQlCTl9CTElORElOR19jb252ZXJ0OwotKwkJQk5fQkxJTkRJTkdfaW52ZXJ0OwotKwkJQk5fQkxJTkRJTkdfdXBkYXRlOwotKwkJUlNBX2JsaW5kaW5nX29uOwotKwkJUlNBX2JsaW5kaW5nX29mZjsKLSsJCWkydF9BU04xX09CSkVDVDsKLSsJCUJOX0JMSU5ESU5HX25ldzsKLSsJCUJOX0JMSU5ESU5HX2ZyZWU7Ci0rCQlFVlBfY2FzdDVfY2JjOwotKwkJRVZQX2Nhc3Q1X2NmYjY0OwotKwkJRVZQX2Nhc3Q1X2VjYjsKLSsJCUVWUF9jYXN0NV9vZmI7Ci0rCQlCRl9kZWNyeXB0OwotKwkJQ0FTVF9zZXRfa2V5OwotKwkJQ0FTVF9lbmNyeXB0OwotKwkJQ0FTVF9kZWNyeXB0OwotKwkJQ0FTVF9lY2JfZW5jcnlwdDsKLSsJCUNBU1RfY2JjX2VuY3J5cHQ7Ci0rCQlDQVNUX2NmYjY0X2VuY3J5cHQ7Ci0rCQlDQVNUX29mYjY0X2VuY3J5cHQ7Ci0rCQlSQzJfZGVjcnlwdDsKLSsJCU9CSl9jcmVhdGVfb2JqZWN0czsKLSsJCUJOX2V4cDsKLSsJCUJOX211bF93b3JkOwotKwkJQk5fc3ViX3dvcmQ7Ci0rCQlCTl9kZWMyYm47Ci0rCQlCTl9ibjJkZWM7Ci0rCQlCSU9fZ2hibl9jdHJsOwotKwkJQ1JZUFRPX2ZyZWVfZXhfZGF0YTsKLSsJCUNSWVBUT19nZXRfZXhfZGF0YTsKLSsJCUNSWVBUT19zZXRfZXhfZGF0YTsKLSsJCUVSUl9sb2FkX0NSWVBUT19zdHJpbmdzOwotKwkJRVJSX2xvYWRfQ1JZUFRPbGliX3N0cmluZ3M7Ci0rCQlFVlBfUEtFWV9iaXRzOwotKwkJTUQ1X1RyYW5zZm9ybTsKLSsJCVNIQTFfVHJhbnNmb3JtOwotKwkJU0hBX1RyYW5zZm9ybTsKLSsJCVg1MDlfU1RPUkVfQ1RYX2dldF9jaGFpbjsKLSsJCVg1MDlfU1RPUkVfQ1RYX2dldF9jdXJyZW50X2NlcnQ7Ci0rCQlYNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3I7Ci0rCQlYNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3JfZGVwdGg7Ci0rCQlYNTA5X1NUT1JFX0NUWF9nZXRfZXhfZGF0YTsKLSsJCVg1MDlfU1RPUkVfQ1RYX3NldF9jZXJ0OwotKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2NoYWluOwotKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2Vycm9yOwotKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2V4X2RhdGE7Ci0rCQlDUllQVE9fZHVwX2V4X2RhdGE7Ci0rCQlDUllQVE9fZ2V0X25ld19sb2NraWQ7Ci0rCQlDUllQVE9fbmV3X2V4X2RhdGE7Ci0rCQlSU0Ffc2V0X2V4X2RhdGE7Ci0rCQlSU0FfZ2V0X2V4X2RhdGE7Ci0rCQlSU0FfZ2V0X2V4X25ld19pbmRleDsKLSsJCVJTQV9wYWRkaW5nX2FkZF9QS0NTMV90eXBlXzE7Ci0rCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfdHlwZV8yOwotKwkJUlNBX3BhZGRpbmdfYWRkX1NTTHYyMzsKLSsJCVJTQV9wYWRkaW5nX2FkZF9ub25lOwotKwkJUlNBX3BhZGRpbmdfY2hlY2tfUEtDUzFfdHlwZV8xOwotKwkJUlNBX3BhZGRpbmdfY2hlY2tfUEtDUzFfdHlwZV8yOwotKwkJUlNBX3BhZGRpbmdfY2hlY2tfU1NMdjIzOwotKwkJUlNBX3BhZGRpbmdfY2hlY2tfbm9uZTsKLSsJCWJuX2FkZF93b3JkczsKLSsJCWQyaV9OZXRzY2FwZV9SU0FfMjsKLSsJCUNSWVBUT19nZXRfZXhfbmV3X2luZGV4OwotKwkJUklQRU1EMTYwX0luaXQ7Ci0rCQlSSVBFTUQxNjBfVXBkYXRlOwotKwkJUklQRU1EMTYwX0ZpbmFsOwotKwkJUklQRU1EMTYwOwotKwkJUklQRU1EMTYwX1RyYW5zZm9ybTsKLSsJCVJDNV8zMl9zZXRfa2V5OwotKwkJUkM1XzMyX2VjYl9lbmNyeXB0OwotKwkJUkM1XzMyX2VuY3J5cHQ7Ci0rCQlSQzVfMzJfZGVjcnlwdDsKLSsJCVJDNV8zMl9jYmNfZW5jcnlwdDsKLSsJCVJDNV8zMl9jZmI2NF9lbmNyeXB0OwotKwkJUkM1XzMyX29mYjY0X2VuY3J5cHQ7Ci0rCQlCTl9ibjJtcGk7Ci0rCQlCTl9tcGkyYm47Ci0rCQlBU04xX0JJVF9TVFJJTkdfZ2V0X2JpdDsKLSsJCUFTTjFfQklUX1NUUklOR19zZXRfYml0OwotKwkJQklPX2dldF9leF9kYXRhOwotKwkJQklPX2dldF9leF9uZXdfaW5kZXg7Ci0rCQlCSU9fc2V0X2V4X2RhdGE7Ci0rCQlYNTA5djNfZ2V0X2tleV91c2FnZTsKLSsJCVg1MDl2M19zZXRfa2V5X3VzYWdlOwotKwkJYTJpX1g1MDl2M19rZXlfdXNhZ2U7Ci0rCQlpMmFfWDUwOXYzX2tleV91c2FnZTsKLSsJCUVWUF9QS0VZX2RlY3J5cHQ7Ci0rCQlFVlBfUEtFWV9lbmNyeXB0OwotKwkJUEtDUzdfUkVDSVBfSU5GT19zZXQ7Ci0rCQlQS0NTN19hZGRfcmVjaXBpZW50OwotKwkJUEtDUzdfYWRkX3JlY2lwaWVudF9pbmZvOwotKwkJUEtDUzdfc2V0X2NpcGhlcjsKLSsJCUFTTjFfVFlQRV9nZXRfaW50X29jdGV0c3RyaW5nOwotKwkJQVNOMV9UWVBFX2dldF9vY3RldHN0cmluZzsKLSsJCUFTTjFfVFlQRV9zZXRfaW50X29jdGV0c3RyaW5nOwotKwkJQVNOMV9UWVBFX3NldF9vY3RldHN0cmluZzsKLSsJCUFTTjFfVVRDVElNRV9zZXRfc3RyaW5nOwotKwkJRVJSX2FkZF9lcnJvcl9kYXRhOwotKwkJRVJSX3NldF9lcnJvcl9kYXRhOwotKwkJRVZQX0NJUEhFUl9hc24xX3RvX3BhcmFtOwotKwkJRVZQX0NJUEhFUl9wYXJhbV90b19hc24xOwotKwkJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdjsKLSsJCUVWUF9DSVBIRVJfc2V0X2FzbjFfaXY7Ci0rCQlFVlBfcmM1XzMyXzEyXzE2X2NiYzsKLSsJCUVWUF9yYzVfMzJfMTJfMTZfY2ZiNjQ7Ci0rCQlFVlBfcmM1XzMyXzEyXzE2X2VjYjsKLSsJCUVWUF9yYzVfMzJfMTJfMTZfb2ZiOwotKwkJYXNuMV9hZGRfZXJyb3I7Ci0rCQlkMmlfQVNOMV9CTVBTVFJJTkc7Ci0rCQlpMmRfQVNOMV9CTVBTVFJJTkc7Ci0rCQlCSU9fZl9iZXI7Ci0rCQlCTl9pbml0OwotKwkJQ09NUF9DVFhfbmV3OwotKwkJQ09NUF9DVFhfZnJlZTsKLSsJCUNPTVBfQ1RYX2NvbXByZXNzX2Jsb2NrOwotKwkJQ09NUF9DVFhfZXhwYW5kX2Jsb2NrOwotKwkJWDUwOV9TVE9SRV9DVFhfZ2V0X2V4X25ld19pbmRleDsKLSsJCU9CSl9OQU1FX2FkZDsKLSsJCUJJT19zb2NrZXRfbmJpbzsKLSsJCUVWUF9yYzJfNjRfY2JjOwotKwkJT0JKX05BTUVfY2xlYW51cDsKLSsJCU9CSl9OQU1FX2dldDsKLSsJCU9CSl9OQU1FX2luaXQ7Ci0rCQlPQkpfTkFNRV9uZXdfaW5kZXg7Ci0rCQlPQkpfTkFNRV9yZW1vdmU7Ci0rCQlCTl9NT05UX0NUWF9jb3B5OwotKwkJQklPX25ld19zb2NrczRhX2Nvbm5lY3Q7Ci0rCQlCSU9fc19zb2NrczRhX2Nvbm5lY3Q7Ci0rCQlQUk9YWV9zZXRfY29ubmVjdF9tb2RlOwotKwkJUkFORF9TU0xlYXk7Ci0rCQlSQU5EX3NldF9yYW5kX21ldGhvZDsKLSsJCVJTQV9tZW1vcnlfbG9jazsKLSsJCWJuX3N1Yl93b3JkczsKLSsJCWJuX211bF9ub3JtYWw7Ci0rCQlibl9tdWxfY29tYmE4OwotKwkJYm5fbXVsX2NvbWJhNDsKLSsJCWJuX3Nxcl9ub3JtYWw7Ci0rCQlibl9zcXJfY29tYmE4OwotKwkJYm5fc3FyX2NvbWJhNDsKLSsJCWJuX2NtcF93b3JkczsKLSsJCWJuX211bF9yZWN1cnNpdmU7Ci0rCQlibl9tdWxfcGFydF9yZWN1cnNpdmU7Ci0rCQlibl9zcXJfcmVjdXJzaXZlOwotKwkJYm5fbXVsX2xvd19ub3JtYWw7Ci0rCQlCTl9SRUNQX0NUWF9pbml0OwotKwkJQk5fUkVDUF9DVFhfbmV3OwotKwkJQk5fUkVDUF9DVFhfZnJlZTsKLSsJCUJOX1JFQ1BfQ1RYX3NldDsKLSsJCUJOX21vZF9tdWxfcmVjaXByb2NhbDsKLSsJCUJOX21vZF9leHBfcmVjcDsKLSsJCUJOX2Rpdl9yZWNwOwotKwkJQk5fQ1RYX2luaXQ7Ci0rCQlCTl9NT05UX0NUWF9pbml0OwotKwkJUkFORF9nZXRfcmFuZF9tZXRob2Q7Ci0rCQlQS0NTN19hZGRfYXR0cmlidXRlOwotKwkJUEtDUzdfYWRkX3NpZ25lZF9hdHRyaWJ1dGU7Ci0rCQlQS0NTN19kaWdlc3RfZnJvbV9hdHRyaWJ1dGVzOwotKwkJUEtDUzdfZ2V0X2F0dHJpYnV0ZTsKLSsJCVBLQ1M3X2dldF9pc3N1ZXJfYW5kX3NlcmlhbDsKLSsJCVBLQ1M3X2dldF9zaWduZWRfYXR0cmlidXRlOwotKwkJQ09NUF9jb21wcmVzc19ibG9jazsKLSsJCUNPTVBfZXhwYW5kX2Jsb2NrOwotKwkJQ09NUF9ybGU7Ci0rCQlDT01QX3psaWI7Ci0rCQltc190aW1lX2RpZmY7Ci0rCQltc190aW1lX25ldzsKLSsJCW1zX3RpbWVfZnJlZTsKLSsJCW1zX3RpbWVfY21wOwotKwkJbXNfdGltZV9nZXQ7Ci0rCQlQS0NTN19zZXRfYXR0cmlidXRlczsKLSsJCVBLQ1M3X3NldF9zaWduZWRfYXR0cmlidXRlczsKLSsJCVg1MDlfQVRUUklCVVRFX2NyZWF0ZTsKLSsJCVg1MDlfQVRUUklCVVRFX2R1cDsKLSsJCUFTTjFfR0VORVJBTElaRURUSU1FX2NoZWNrOwotKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfcHJpbnQ7Ci0rCQlBU04xX0dFTkVSQUxJWkVEVElNRV9zZXQ7Ci0rCQlBU04xX0dFTkVSQUxJWkVEVElNRV9zZXRfc3RyaW5nOwotKwkJQVNOMV9USU1FX3ByaW50OwotKwkJQkFTSUNfQ09OU1RSQUlOVFNfZnJlZTsKLSsJCUJBU0lDX0NPTlNUUkFJTlRTX25ldzsKLSsJCUVSUl9sb2FkX1g1MDlWM19zdHJpbmdzOwotKwkJTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRV9mcmVlOwotKwkJTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRV9uZXc7Ci0rCQlPQkpfdHh0Mm9iajsKLSsJCVBFTV9yZWFkX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0U7Ci0rCQlQRU1fcmVhZF9OU19DRVJUX1NFUTsKLSsJCVBFTV9yZWFkX2Jpb19ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFOwotKwkJUEVNX3JlYWRfYmlvX05TX0NFUlRfU0VROwotKwkJUEVNX3dyaXRlX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0U7Ci0rCQlQRU1fd3JpdGVfTlNfQ0VSVF9TRVE7Ci0rCQlQRU1fd3JpdGVfYmlvX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0U7Ci0rCQlQRU1fd3JpdGVfYmlvX05TX0NFUlRfU0VROwotKwkJWDUwOVYzX0VYVF9hZGQ7Ci0rCQlYNTA5VjNfRVhUX2FkZF9hbGlhczsKLSsJCVg1MDlWM19FWFRfYWRkX2NvbmY7Ci0rCQlYNTA5VjNfRVhUX2NsZWFudXA7Ci0rCQlYNTA5VjNfRVhUX2NvbmY7Ci0rCQlYNTA5VjNfRVhUX2NvbmZfbmlkOwotKwkJWDUwOVYzX0VYVF9nZXQ7Ci0rCQlYNTA5VjNfRVhUX2dldF9uaWQ7Ci0rCQlYNTA5VjNfRVhUX3ByaW50OwotKwkJWDUwOVYzX0VYVF9wcmludF9mcDsKLSsJCVg1MDlWM19hZGRfc3RhbmRhcmRfZXh0ZW5zaW9uczsKLSsJCVg1MDlWM19hZGRfdmFsdWU7Ci0rCQlYNTA5VjNfYWRkX3ZhbHVlX2Jvb2w7Ci0rCQlYNTA5VjNfYWRkX3ZhbHVlX2ludDsKLSsJCVg1MDlWM19jb25mX2ZyZWU7Ci0rCQlYNTA5VjNfZ2V0X3ZhbHVlX2Jvb2w7Ci0rCQlYNTA5VjNfZ2V0X3ZhbHVlX2ludDsKLSsJCVg1MDlWM19wYXJzZV9saXN0OwotKwkJZDJpX0FTTjFfR0VORVJBTElaRURUSU1FOwotKwkJZDJpX0FTTjFfVElNRTsKLSsJCWQyaV9CQVNJQ19DT05TVFJBSU5UUzsKLSsJCWQyaV9ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFOwotKwkJZDJpX2V4dF9rdTsKLSsJCWV4dF9rdV9mcmVlOwotKwkJZXh0X2t1X25ldzsKLSsJCWkyZF9BU04xX0dFTkVSQUxJWkVEVElNRTsKLSsJCWkyZF9BU04xX1RJTUU7Ci0rCQlpMmRfQkFTSUNfQ09OU1RSQUlOVFM7Ci0rCQlpMmRfTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRTsKLSsJCWkyZF9leHRfa3U7Ci0rCQlFVlBfTURfQ1RYX2NvcHk7Ci0rCQlpMmRfQVNOMV9FTlVNRVJBVEVEOwotKwkJZDJpX0FTTjFfRU5VTUVSQVRFRDsKLSsJCUFTTjFfRU5VTUVSQVRFRF9zZXQ7Ci0rCQlBU04xX0VOVU1FUkFURURfZ2V0OwotKwkJQk5fdG9fQVNOMV9FTlVNRVJBVEVEOwotKwkJQVNOMV9FTlVNRVJBVEVEX3RvX0JOOwotKwkJaTJhX0FTTjFfRU5VTUVSQVRFRDsKLSsJCWEyaV9BU04xX0VOVU1FUkFURUQ7Ci0rCQlpMmRfR0VORVJBTF9OQU1FOwotKwkJZDJpX0dFTkVSQUxfTkFNRTsKLSsJCUdFTkVSQUxfTkFNRV9uZXc7Ci0rCQlHRU5FUkFMX05BTUVfZnJlZTsKLSsJCUdFTkVSQUxfTkFNRVNfbmV3OwotKwkJR0VORVJBTF9OQU1FU19mcmVlOwotKwkJZDJpX0dFTkVSQUxfTkFNRVM7Ci0rCQlpMmRfR0VORVJBTF9OQU1FUzsKLSsJCWkydl9HRU5FUkFMX05BTUVTOwotKwkJaTJzX0FTTjFfT0NURVRfU1RSSU5HOwotKwkJczJpX0FTTjFfT0NURVRfU1RSSU5HOwotKwkJWDUwOVYzX0VYVF9jaGVja19jb25mOwotKwkJaGV4X3RvX3N0cmluZzsKLSsJCXN0cmluZ190b19oZXg7Ci0rCQlERVNfZWRlM19jYmNtX2VuY3J5cHQ7Ci0rCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfT0FFUDsKLSsJCVJTQV9wYWRkaW5nX2NoZWNrX1BLQ1MxX09BRVA7Ci0rCQlYNTA5X0NSTF9wcmludF9mcDsKLSsJCVg1MDlfQ1JMX3ByaW50OwotKwkJaTJ2X0dFTkVSQUxfTkFNRTsKLSsJCXYyaV9HRU5FUkFMX05BTUU7Ci0rCQlpMmRfUEtFWV9VU0FHRV9QRVJJT0Q7Ci0rCQlkMmlfUEtFWV9VU0FHRV9QRVJJT0Q7Ci0rCQlQS0VZX1VTQUdFX1BFUklPRF9uZXc7Ci0rCQlQS0VZX1VTQUdFX1BFUklPRF9mcmVlOwotKwkJdjJpX0dFTkVSQUxfTkFNRVM7Ci0rCQlpMnNfQVNOMV9JTlRFR0VSOwotKwkJWDUwOVYzX0VYVF9kMmk7Ci0rCQluYW1lX2NtcDsKLSsJCXN0cl9kdXA7Ci0rCQlpMnNfQVNOMV9FTlVNRVJBVEVEOwotKwkJaTJzX0FTTjFfRU5VTUVSQVRFRF9UQUJMRTsKLSsJCUJJT19zX2xvZzsKLSsJCUJJT19mX3JlbGlhYmxlOwotKwkJUEtDUzdfZGF0YUZpbmFsOwotKwkJUEtDUzdfZGF0YURlY29kZTsKLSsJCVg1MDlWM19FWFRfQ1JMX2FkZF9jb25mOwotKwkJQk5fc2V0X3BhcmFtczsKLSsJCUJOX2dldF9wYXJhbXM7Ci0rCQlCSU9fZ2V0X2V4X251bTsKLSsJCUJJT19zZXRfZXhfZnJlZV9mdW5jOwotKwkJRVZQX3JpcGVtZDE2MDsKLSsJCUFTTjFfVElNRV9zZXQ7Ci0rCQlpMmRfQVVUSE9SSVRZX0tFWUlEOwotKwkJZDJpX0FVVEhPUklUWV9LRVlJRDsKLSsJCUFVVEhPUklUWV9LRVlJRF9uZXc7Ci0rCQlBVVRIT1JJVFlfS0VZSURfZnJlZTsKLSsJCUFTTjFfc2VxX3VucGFjazsKLSsJCUFTTjFfc2VxX3BhY2s7Ci0rCQlBU04xX3VucGFja19zdHJpbmc7Ci0rCQlBU04xX3BhY2tfc3RyaW5nOwotKwkJUEtDUzEyX3BhY2tfc2FmZWJhZzsKLSsJCVBLQ1MxMl9NQUtFX0tFWUJBRzsKLSsJCVBLQ1M4X2VuY3J5cHQ7Ci0rCQlQS0NTMTJfTUFLRV9TSEtFWUJBRzsKLSsJCVBLQ1MxMl9wYWNrX3A3ZGF0YTsKLSsJCVBLQ1MxMl9wYWNrX3A3ZW5jZGF0YTsKLSsJCVBLQ1MxMl9hZGRfbG9jYWxrZXlpZDsKLSsJCVBLQ1MxMl9hZGRfZnJpZW5kbHluYW1lX2FzYzsKLSsJCVBLQ1MxMl9hZGRfZnJpZW5kbHluYW1lX3VuaTsKLSsJCVBLQ1MxMl9nZXRfZnJpZW5kbHluYW1lOwotKwkJUEtDUzEyX3BiZV9jcnlwdDsKLSsJCVBLQ1MxMl9kZWNyeXB0X2QyaTsKLSsJCVBLQ1MxMl9pMmRfZW5jcnlwdDsKLSsJCVBLQ1MxMl9pbml0OwotKwkJUEtDUzEyX2tleV9nZW5fYXNjOwotKwkJUEtDUzEyX2tleV9nZW5fdW5pOwotKwkJUEtDUzEyX2dlbl9tYWM7Ci0rCQlQS0NTMTJfdmVyaWZ5X21hYzsKLSsJCVBLQ1MxMl9zZXRfbWFjOwotKwkJUEtDUzEyX3NldHVwX21hYzsKLSsJCU9QRU5TU0xfYXNjMnVuaTsKLSsJCU9QRU5TU0xfdW5pMmFzYzsKLSsJCWkyZF9QS0NTMTJfQkFHUzsKLSsJCVBLQ1MxMl9CQUdTX25ldzsKLSsJCWQyaV9QS0NTMTJfQkFHUzsKLSsJCVBLQ1MxMl9CQUdTX2ZyZWU7Ci0rCQlpMmRfUEtDUzEyOwotKwkJZDJpX1BLQ1MxMjsKLSsJCVBLQ1MxMl9uZXc7Ci0rCQlQS0NTMTJfZnJlZTsKLSsJCWkyZF9QS0NTMTJfTUFDX0RBVEE7Ci0rCQlQS0NTMTJfTUFDX0RBVEFfbmV3OwotKwkJZDJpX1BLQ1MxMl9NQUNfREFUQTsKLSsJCVBLQ1MxMl9NQUNfREFUQV9mcmVlOwotKwkJaTJkX1BLQ1MxMl9TQUZFQkFHOwotKwkJUEtDUzEyX1NBRkVCQUdfbmV3OwotKwkJZDJpX1BLQ1MxMl9TQUZFQkFHOwotKwkJUEtDUzEyX1NBRkVCQUdfZnJlZTsKLSsJCUVSUl9sb2FkX1BLQ1MxMl9zdHJpbmdzOwotKwkJUEtDUzEyX1BCRV9hZGQ7Ci0rCQlQS0NTOF9hZGRfa2V5dXNhZ2U7Ci0rCQlQS0NTMTJfZ2V0X2F0dHJfZ2VuOwotKwkJUEtDUzEyX3BhcnNlOwotKwkJUEtDUzEyX2NyZWF0ZTsKLSsJCWkyZF9QS0NTMTJfYmlvOwotKwkJaTJkX1BLQ1MxMl9mcDsKLSsJCWQyaV9QS0NTMTJfYmlvOwotKwkJZDJpX1BLQ1MxMl9mcDsKLSsJCWkyZF9QQkVQQVJBTTsKLSsJCVBCRVBBUkFNX25ldzsKLSsJCWQyaV9QQkVQQVJBTTsKLSsJCVBCRVBBUkFNX2ZyZWU7Ci0rCQlpMmRfUEtDUzhfUFJJVl9LRVlfSU5GTzsKLSsJCVBLQ1M4X1BSSVZfS0VZX0lORk9fbmV3OwotKwkJZDJpX1BLQ1M4X1BSSVZfS0VZX0lORk87Ci0rCQlQS0NTOF9QUklWX0tFWV9JTkZPX2ZyZWU7Ci0rCQlFVlBfUEtDUzgyUEtFWTsKLSsJCUVWUF9QS0VZMlBLQ1M4OwotKwkJUEtDUzhfc2V0X2Jyb2tlbjsKLSsJCUVWUF9QQkVfQUxHT1JfQ2lwaGVySW5pdDsKLSsJCUVWUF9QQkVfYWxnX2FkZDsKLSsJCVBLQ1M1X3BiZV9zZXQ7Ci0rCQlFVlBfUEJFX2NsZWFudXA7Ci0rCQlpMmRfU1hORVQ7Ci0rCQlkMmlfU1hORVQ7Ci0rCQlTWE5FVF9uZXc7Ci0rCQlTWE5FVF9mcmVlOwotKwkJaTJkX1NYTkVUSUQ7Ci0rCQlkMmlfU1hORVRJRDsKLSsJCVNYTkVUSURfbmV3OwotKwkJU1hORVRJRF9mcmVlOwotKwkJRFNBX1NJR19uZXc7Ci0rCQlEU0FfU0lHX2ZyZWU7Ci0rCQlEU0FfZG9fc2lnbjsKLSsJCURTQV9kb192ZXJpZnk7Ci0rCQlkMmlfRFNBX1NJRzsKLSsJCWkyZF9EU0FfU0lHOwotKwkJaTJkX0FTTjFfVklTSUJMRVNUUklORzsKLSsJCWQyaV9BU04xX1ZJU0lCTEVTVFJJTkc7Ci0rCQlpMmRfQVNOMV9VVEY4U1RSSU5HOwotKwkJZDJpX0FTTjFfVVRGOFNUUklORzsKLSsJCWkyZF9ESVJFQ1RPUllTVFJJTkc7Ci0rCQlkMmlfRElSRUNUT1JZU1RSSU5HOwotKwkJaTJkX0RJU1BMQVlURVhUOwotKwkJZDJpX0RJU1BMQVlURVhUOwotKwkJZDJpX0FTTjFfU0VUX09GX1g1MDk7Ci0rCQlpMmRfQVNOMV9TRVRfT0ZfWDUwOTsKLSsJCWkyZF9QQktERjJQQVJBTTsKLSsJCVBCS0RGMlBBUkFNX25ldzsKLSsJCWQyaV9QQktERjJQQVJBTTsKLSsJCVBCS0RGMlBBUkFNX2ZyZWU7Ci0rCQlpMmRfUEJFMlBBUkFNOwotKwkJUEJFMlBBUkFNX25ldzsKLSsJCWQyaV9QQkUyUEFSQU07Ci0rCQlQQkUyUEFSQU1fZnJlZTsKLSsJCWQyaV9BU04xX1NFVF9PRl9HRU5FUkFMX05BTUU7Ci0rCQlpMmRfQVNOMV9TRVRfT0ZfR0VORVJBTF9OQU1FOwotKwkJZDJpX0FTTjFfU0VUX09GX1NYTkVUSUQ7Ci0rCQlpMmRfQVNOMV9TRVRfT0ZfU1hORVRJRDsKLSsJCWQyaV9BU04xX1NFVF9PRl9QT0xJQ1lRVUFMSU5GTzsKLSsJCWkyZF9BU04xX1NFVF9PRl9QT0xJQ1lRVUFMSU5GTzsKLSsJCWQyaV9BU04xX1NFVF9PRl9QT0xJQ1lJTkZPOwotKwkJaTJkX0FTTjFfU0VUX09GX1BPTElDWUlORk87Ci0rCQlTWE5FVF9hZGRfaWRfYXNjOwotKwkJU1hORVRfYWRkX2lkX3Vsb25nOwotKwkJU1hORVRfYWRkX2lkX0lOVEVHRVI7Ci0rCQlTWE5FVF9nZXRfaWRfYXNjOwotKwkJU1hORVRfZ2V0X2lkX3Vsb25nOwotKwkJU1hORVRfZ2V0X2lkX0lOVEVHRVI7Ci0rCQlYNTA5VjNfc2V0X2NvbmZfbGhhc2g7Ci0rCQlpMmRfQ0VSVElGSUNBVEVQT0xJQ0lFUzsKLSsJCUNFUlRJRklDQVRFUE9MSUNJRVNfbmV3OwotKwkJQ0VSVElGSUNBVEVQT0xJQ0lFU19mcmVlOwotKwkJZDJpX0NFUlRJRklDQVRFUE9MSUNJRVM7Ci0rCQlpMmRfUE9MSUNZSU5GTzsKLSsJCVBPTElDWUlORk9fbmV3OwotKwkJZDJpX1BPTElDWUlORk87Ci0rCQlQT0xJQ1lJTkZPX2ZyZWU7Ci0rCQlpMmRfUE9MSUNZUVVBTElORk87Ci0rCQlQT0xJQ1lRVUFMSU5GT19uZXc7Ci0rCQlkMmlfUE9MSUNZUVVBTElORk87Ci0rCQlQT0xJQ1lRVUFMSU5GT19mcmVlOwotKwkJaTJkX1VTRVJOT1RJQ0U7Ci0rCQlVU0VSTk9USUNFX25ldzsKLSsJCWQyaV9VU0VSTk9USUNFOwotKwkJVVNFUk5PVElDRV9mcmVlOwotKwkJaTJkX05PVElDRVJFRjsKLSsJCU5PVElDRVJFRl9uZXc7Ci0rCQlkMmlfTk9USUNFUkVGOwotKwkJTk9USUNFUkVGX2ZyZWU7Ci0rCQlYNTA5VjNfZ2V0X3N0cmluZzsKLSsJCVg1MDlWM19nZXRfc2VjdGlvbjsKLSsJCVg1MDlWM19zdHJpbmdfZnJlZTsKLSsJCVg1MDlWM19zZWN0aW9uX2ZyZWU7Ci0rCQlYNTA5VjNfc2V0X2N0eDsKLSsJCXMyaV9BU04xX0lOVEVHRVI7Ci0rCQlDUllQVE9fc2V0X2xvY2tlZF9tZW1fZnVuY3Rpb25zOwotKwkJQ1JZUFRPX2dldF9sb2NrZWRfbWVtX2Z1bmN0aW9uczsKLSsJCUNSWVBUT19tYWxsb2NfbG9ja2VkOwotKwkJQ1JZUFRPX2ZyZWVfbG9ja2VkOwotKwkJQk5fbW9kX2V4cDJfbW9udDsKLSsJCUVSUl9nZXRfZXJyb3JfbGluZV9kYXRhOwotKwkJRVJSX3BlZWtfZXJyb3JfbGluZV9kYXRhOwotKwkJUEtDUzEyX1BCRV9rZXlpdmdlbjsKLSsJCVg1MDlfQUxHT1JfZHVwOwotKwkJZDJpX0FTTjFfU0VUX09GX0RJU1RfUE9JTlQ7Ci0rCQlpMmRfQVNOMV9TRVRfT0ZfRElTVF9QT0lOVDsKLSsJCWkyZF9DUkxfRElTVF9QT0lOVFM7Ci0rCQlDUkxfRElTVF9QT0lOVFNfbmV3OwotKwkJQ1JMX0RJU1RfUE9JTlRTX2ZyZWU7Ci0rCQlkMmlfQ1JMX0RJU1RfUE9JTlRTOwotKwkJaTJkX0RJU1RfUE9JTlQ7Ci0rCQlESVNUX1BPSU5UX25ldzsKLSsJCWQyaV9ESVNUX1BPSU5UOwotKwkJRElTVF9QT0lOVF9mcmVlOwotKwkJaTJkX0RJU1RfUE9JTlRfTkFNRTsKLSsJCURJU1RfUE9JTlRfTkFNRV9uZXc7Ci0rCQlESVNUX1BPSU5UX05BTUVfZnJlZTsKLSsJCWQyaV9ESVNUX1BPSU5UX05BTUU7Ci0rCQlYNTA5VjNfYWRkX3ZhbHVlX3VjaGFyOwotKwkJZDJpX0FTTjFfU0VUX09GX1g1MDlfQVRUUklCVVRFOwotKwkJaTJkX0FTTjFfU0VUX09GX0FTTjFfVFlQRTsKLSsJCWQyaV9BU04xX1NFVF9PRl9YNTA5X0VYVEVOU0lPTjsKLSsJCWQyaV9BU04xX1NFVF9PRl9YNTA5X05BTUVfRU5UUlk7Ci0rCQlkMmlfQVNOMV9TRVRfT0ZfQVNOMV9UWVBFOwotKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfQVRUUklCVVRFOwotKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfRVhURU5TSU9OOwotKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfTkFNRV9FTlRSWTsKLSsJCVg1MDlWM19FWFRfaTJkOwotKwkJWDUwOVYzX0VYVF92YWxfcHJuOwotKwkJWDUwOVYzX0VYVF9hZGRfbGlzdDsKLSsJCUVWUF9DSVBIRVJfdHlwZTsKLSsJCUVWUF9QQkVfQ2lwaGVySW5pdDsKLSsJCVg1MDlWM19hZGRfdmFsdWVfYm9vbF9uZjsKLSsJCWQyaV9BU04xX1VJTlRFR0VSOwotKwkJc2tfdmFsdWU7Ci0rCQlza19udW07Ci0rCQlza19zZXQ7Ci0rCQlpMmRfQVNOMV9TRVRfT0ZfWDUwOV9SRVZPS0VEOwotKwkJc2tfc29ydDsKLSsJCWQyaV9BU04xX1NFVF9PRl9YNTA5X1JFVk9LRUQ7Ci0rCQlpMmRfQVNOMV9TRVRfT0ZfWDUwOV9BTEdPUjsKLSsJCWkyZF9BU04xX1NFVF9PRl9YNTA5X0NSTDsKLSsJCWQyaV9BU04xX1NFVF9PRl9YNTA5X0FMR09SOwotKwkJZDJpX0FTTjFfU0VUX09GX1g1MDlfQ1JMOwotKwkJaTJkX0FTTjFfU0VUX09GX1BLQ1M3X1NJR05FUl9JTkZPOwotKwkJaTJkX0FTTjFfU0VUX09GX1BLQ1M3X1JFQ0lQX0lORk87Ci0rCQlkMmlfQVNOMV9TRVRfT0ZfUEtDUzdfU0lHTkVSX0lORk87Ci0rCQlkMmlfQVNOMV9TRVRfT0ZfUEtDUzdfUkVDSVBfSU5GTzsKLSsJCVBLQ1M1X1BCRV9hZGQ7Ci0rCQlQRU1fd3JpdGVfYmlvX1BLQ1M4OwotKwkJaTJkX1BLQ1M4X2ZwOwotKwkJUEVNX3JlYWRfYmlvX1BLQ1M4X1BSSVZfS0VZX0lORk87Ci0rCQlQRU1fcmVhZF9iaW9fUDhfUFJJVl9LRVlfSU5GTzsKLSsJCWQyaV9QS0NTOF9iaW87Ci0rCQlkMmlfUEtDUzhfUFJJVl9LRVlfSU5GT19mcDsKLSsJCVBFTV93cml0ZV9iaW9fUEtDUzhfUFJJVl9LRVlfSU5GTzsKLSsJCVBFTV93cml0ZV9iaW9fUDhfUFJJVl9LRVlfSU5GTzsKLSsJCVBFTV9yZWFkX1BLQ1M4OwotKwkJZDJpX1BLQ1M4X1BSSVZfS0VZX0lORk9fYmlvOwotKwkJZDJpX1BLQ1M4X2ZwOwotKwkJUEVNX3dyaXRlX1BLQ1M4OwotKwkJUEVNX3JlYWRfUEtDUzhfUFJJVl9LRVlfSU5GTzsKLSsJCVBFTV9yZWFkX1A4X1BSSVZfS0VZX0lORk87Ci0rCQlQRU1fcmVhZF9iaW9fUEtDUzg7Ci0rCQlQRU1fd3JpdGVfUEtDUzhfUFJJVl9LRVlfSU5GTzsKLSsJCVBFTV93cml0ZV9QOF9QUklWX0tFWV9JTkZPOwotKwkJUEtDUzVfUEJFX2tleWl2Z2VuOwotKwkJaTJkX1BLQ1M4X2JpbzsKLSsJCWkyZF9QS0NTOF9QUklWX0tFWV9JTkZPX2ZwOwotKwkJaTJkX1BLQ1M4X1BSSVZfS0VZX0lORk9fYmlvOwotKwkJQklPX3NfYmlvOwotKwkJUEtDUzVfcGJlMl9zZXQ7Ci0rCQlQS0NTNV9QQktERjJfSE1BQ19TSEExOwotKwkJUEtDUzVfdjJfUEJFX2tleWl2Z2VuOwotKwkJUEVNX3dyaXRlX2Jpb19QS0NTOFByaXZhdGVLZXk7Ci0rCQlQRU1fd3JpdGVfUEtDUzhQcml2YXRlS2V5OwotKwkJQklPX2N0cmxfZ2V0X3JlYWRfcmVxdWVzdDsKLSsJCUJJT19jdHJsX3BlbmRpbmc7Ci0rCQlCSU9fY3RybF93cGVuZGluZzsKLSsJCUJJT19uZXdfYmlvX3BhaXI7Ci0rCQlCSU9fY3RybF9nZXRfd3JpdGVfZ3VhcmFudGVlOwotKwkJQ1JZUFRPX251bV9sb2NrczsKLSsJCUNPTkZfbG9hZF9iaW87Ci0rCQlDT05GX2xvYWRfZnA7Ci0rCQlpMmRfQVNOMV9TRVRfT0ZfQVNOMV9PQkpFQ1Q7Ci0rCQlkMmlfQVNOMV9TRVRfT0ZfQVNOMV9PQkpFQ1Q7Ci0rCQlQS0NTN19zaWduYXR1cmVWZXJpZnk7Ci0rCQlSU0Ffc2V0X21ldGhvZDsKLSsJCVJTQV9nZXRfbWV0aG9kOwotKwkJUlNBX2dldF9kZWZhdWx0X21ldGhvZDsKLSsJCVJTQV9jaGVja19rZXk7Ci0rCQlPQkpfb2JqMnR4dDsKLSsJCURTQV9kdXBfREg7Ci0rCQlYNTA5X1JFUV9nZXRfZXh0ZW5zaW9uczsKLSsJCVg1MDlfUkVRX3NldF9leHRlbnNpb25fbmlkczsKLSsJCUJJT19ud3JpdGU7Ci0rCQlYNTA5X1JFUV9leHRlbnNpb25fbmlkOwotKwkJQklPX25yZWFkOwotKwkJWDUwOV9SRVFfZ2V0X2V4dGVuc2lvbl9uaWRzOwotKwkJQklPX253cml0ZTA7Ci0rCQlYNTA5X1JFUV9hZGRfZXh0ZW5zaW9uc19uaWQ7Ci0rCQlCSU9fbnJlYWQwOwotKwkJWDUwOV9SRVFfYWRkX2V4dGVuc2lvbnM7Ci0rCQlCSU9fbmV3X21lbV9idWY7Ci0rCQlESF9zZXRfZXhfZGF0YTsKLSsJCURIX3NldF9tZXRob2Q7Ci0rCQlEU0FfT3BlblNTTDsKLSsJCURIX2dldF9leF9kYXRhOwotKwkJREhfZ2V0X2V4X25ld19pbmRleDsKLSsJCURTQV9uZXdfbWV0aG9kOwotKwkJREhfbmV3X21ldGhvZDsKLSsJCURIX09wZW5TU0w7Ci0rCQlEU0FfZ2V0X2V4X25ld19pbmRleDsKLSsJCURIX2dldF9kZWZhdWx0X21ldGhvZDsKLSsJCURTQV9zZXRfZXhfZGF0YTsKLSsJCURIX3NldF9kZWZhdWx0X21ldGhvZDsKLSsJCURTQV9nZXRfZXhfZGF0YTsKLSsJCVg1MDlWM19FWFRfUkVRX2FkZF9jb25mOwotKwkJTkVUU0NBUEVfU1BLSV9wcmludDsKLSsJCU5FVFNDQVBFX1NQS0lfc2V0X3B1YmtleTsKLSsJCU5FVFNDQVBFX1NQS0lfYjY0X2VuY29kZTsKLSsJCU5FVFNDQVBFX1NQS0lfZ2V0X3B1YmtleTsKLSsJCU5FVFNDQVBFX1NQS0lfYjY0X2RlY29kZTsKLSsJCVVURjhfcHV0YzsKLSsJCVVURjhfZ2V0YzsKLSsJCVJTQV9udWxsX21ldGhvZDsKLSsJCUFTTjFfdGFnMnN0cjsKLSsJCUJJT19jdHJsX3Jlc2V0X3JlYWRfcmVxdWVzdDsKLSsJCURJU1BMQVlURVhUX25ldzsKLSsJCUFTTjFfR0VORVJBTElaRURUSU1FX2ZyZWU7Ci0rCQlYNTA5X1JFVk9LRURfZ2V0X2V4dF9kMmk7Ci0rCQlYNTA5X3NldF9leF9kYXRhOwotKwkJWDUwOV9yZWplY3Rfc2V0X2JpdF9hc2M7Ci0rCQlYNTA5X05BTUVfYWRkX2VudHJ5X2J5X3R4dDsKLSsJCVg1MDlfTkFNRV9hZGRfZW50cnlfYnlfTklEOwotKwkJWDUwOV9QVVJQT1NFX2dldDA7Ci0rCQlQRU1fcmVhZF9YNTA5X0FVWDsKLSsJCWQyaV9BVVRIT1JJVFlfSU5GT19BQ0NFU1M7Ci0rCQlQRU1fd3JpdGVfUFVCS0VZOwotKwkJQUNDRVNTX0RFU0NSSVBUSU9OX25ldzsKLSsJCVg1MDlfQ0VSVF9BVVhfZnJlZTsKLSsJCWQyaV9BQ0NFU1NfREVTQ1JJUFRJT047Ci0rCQlYNTA5X3RydXN0X2NsZWFyOwotKwkJWDUwOV9UUlVTVF9hZGQ7Ci0rCQlBU04xX1ZJU0lCTEVTVFJJTkdfbmV3OwotKwkJWDUwOV9hbGlhc19zZXQxOwotKwkJQVNOMV9QUklOVEFCTEVTVFJJTkdfZnJlZTsKLSsJCUVWUF9QS0VZX2dldDFfRFNBOwotKwkJQVNOMV9CTVBTVFJJTkdfbmV3OwotKwkJQVNOMV9tYnN0cmluZ19jb3B5OwotKwkJQVNOMV9VVEY4U1RSSU5HX25ldzsKLSsJCURTQV9nZXRfZGVmYXVsdF9tZXRob2Q7Ci0rCQlpMmRfQVNOMV9TRVRfT0ZfQUNDRVNTX0RFU0NSSVBUSU9OOwotKwkJQVNOMV9UNjFTVFJJTkdfZnJlZTsKLSsJCURTQV9zZXRfbWV0aG9kOwotKwkJWDUwOV9nZXRfZXhfZGF0YTsKLSsJCUFTTjFfU1RSSU5HX3R5cGU7Ci0rCQlYNTA5X1BVUlBPU0VfZ2V0X2J5X3NuYW1lOwotKwkJQVNOMV9USU1FX2ZyZWU7Ci0rCQlBU04xX09DVEVUX1NUUklOR19jbXA7Ci0rCQlBU04xX0JJVF9TVFJJTkdfbmV3OwotKwkJWDUwOV9nZXRfZXh0X2QyaTsKLSsJCVBFTV9yZWFkX2Jpb19YNTA5X0FVWDsKLSsJCUFTTjFfU1RSSU5HX3NldF9kZWZhdWx0X21hc2tfYXNjOwotKwkJQVNOMV9TVFJJTkdfc2V0X2RlZl9tYXNrX2FzYzsKLSsJCVBFTV93cml0ZV9iaW9fUlNBX1BVQktFWTsKLSsJCUFTTjFfSU5URUdFUl9jbXA7Ci0rCQlkMmlfUlNBX1BVQktFWV9mcDsKLSsJCVg1MDlfdHJ1c3Rfc2V0X2JpdF9hc2M7Ci0rCQlQRU1fd3JpdGVfYmlvX0RTQV9QVUJLRVk7Ci0rCQlYNTA5X1NUT1JFX0NUWF9mcmVlOwotKwkJRVZQX1BLRVlfc2V0MV9EU0E7Ci0rCQlpMmRfRFNBX1BVQktFWV9mcDsKLSsJCVg1MDlfbG9hZF9jZXJ0X2NybF9maWxlOwotKwkJQVNOMV9USU1FX25ldzsKLSsJCWkyZF9SU0FfUFVCS0VZOwotKwkJWDUwOV9TVE9SRV9DVFhfcHVycG9zZV9pbmhlcml0OwotKwkJUEVNX3JlYWRfUlNBX1BVQktFWTsKLSsJCWQyaV9YNTA5X0FVWDsKLSsJCWkyZF9EU0FfUFVCS0VZOwotKwkJWDUwOV9DRVJUX0FVWF9wcmludDsKLSsJCVBFTV9yZWFkX0RTQV9QVUJLRVk7Ci0rCQlpMmRfUlNBX1BVQktFWV9iaW87Ci0rCQlBU04xX0JJVF9TVFJJTkdfbnVtX2FzYzsKLSsJCWkyZF9QVUJLRVk7Ci0rCQlBU04xX1VUQ1RJTUVfZnJlZTsKLSsJCURTQV9zZXRfZGVmYXVsdF9tZXRob2Q7Ci0rCQlYNTA5X1BVUlBPU0VfZ2V0X2J5X2lkOwotKwkJQUNDRVNTX0RFU0NSSVBUSU9OX2ZyZWU7Ci0rCQlQRU1fcmVhZF9iaW9fUFVCS0VZOwotKwkJQVNOMV9TVFJJTkdfc2V0X2J5X05JRDsKLSsJCVg1MDlfUFVSUE9TRV9nZXRfaWQ7Ci0rCQlESVNQTEFZVEVYVF9mcmVlOwotKwkJT1RIRVJOQU1FX25ldzsKLSsJCVg1MDlfQ0VSVF9BVVhfbmV3OwotKwkJWDUwOV9UUlVTVF9jbGVhbnVwOwotKwkJWDUwOV9OQU1FX2FkZF9lbnRyeV9ieV9PQko7Ci0rCQlYNTA5X0NSTF9nZXRfZXh0X2QyaTsKLSsJCVg1MDlfUFVSUE9TRV9nZXQwX25hbWU7Ci0rCQlQRU1fcmVhZF9QVUJLRVk7Ci0rCQlpMmRfRFNBX1BVQktFWV9iaW87Ci0rCQlpMmRfT1RIRVJOQU1FOwotKwkJQVNOMV9PQ1RFVF9TVFJJTkdfZnJlZTsKLSsJCUFTTjFfQklUX1NUUklOR19zZXRfYXNjOwotKwkJWDUwOV9nZXRfZXhfbmV3X2luZGV4OwotKwkJQVNOMV9TVFJJTkdfVEFCTEVfY2xlYW51cDsKLSsJCVg1MDlfVFJVU1RfZ2V0X2J5X2lkOwotKwkJWDUwOV9QVVJQT1NFX2dldF90cnVzdDsKLSsJCUFTTjFfU1RSSU5HX2xlbmd0aDsKLSsJCWQyaV9BU04xX1NFVF9PRl9BQ0NFU1NfREVTQ1JJUFRJT047Ci0rCQlBU04xX1BSSU5UQUJMRVNUUklOR19uZXc7Ci0rCQlYNTA5VjNfZ2V0X2QyaTsKLSsJCUFTTjFfRU5VTUVSQVRFRF9mcmVlOwotKwkJaTJkX1g1MDlfQ0VSVF9BVVg7Ci0rCQlYNTA5X1NUT1JFX0NUWF9zZXRfdHJ1c3Q7Ci0rCQlBU04xX1NUUklOR19zZXRfZGVmYXVsdF9tYXNrOwotKwkJWDUwOV9TVE9SRV9DVFhfbmV3OwotKwkJRVZQX1BLRVlfZ2V0MV9SU0E7Ci0rCQlESVJFQ1RPUllTVFJJTkdfZnJlZTsKLSsJCVBFTV93cml0ZV9YNTA5X0FVWDsKLSsJCUFTTjFfT0NURVRfU1RSSU5HX3NldDsKLSsJCWQyaV9EU0FfUFVCS0VZX2ZwOwotKwkJZDJpX1JTQV9QVUJLRVk7Ci0rCQlYNTA5X1RSVVNUX2dldDBfbmFtZTsKLSsJCVg1MDlfVFJVU1RfZ2V0MDsKLSsJCUFVVEhPUklUWV9JTkZPX0FDQ0VTU19mcmVlOwotKwkJQVNOMV9JQTVTVFJJTkdfbmV3OwotKwkJZDJpX0RTQV9QVUJLRVk7Ci0rCQlYNTA5X2NoZWNrX3B1cnBvc2U7Ci0rCQlBU04xX0VOVU1FUkFURURfbmV3OwotKwkJZDJpX1JTQV9QVUJLRVlfYmlvOwotKwkJZDJpX1BVQktFWTsKLSsJCVg1MDlfVFJVU1RfZ2V0X3RydXN0OwotKwkJWDUwOV9UUlVTVF9nZXRfZmxhZ3M7Ci0rCQlBU04xX0JNUFNUUklOR19mcmVlOwotKwkJQVNOMV9UNjFTVFJJTkdfbmV3OwotKwkJQVNOMV9VVENUSU1FX25ldzsKLSsJCWkyZF9BVVRIT1JJVFlfSU5GT19BQ0NFU1M7Ci0rCQlFVlBfUEtFWV9zZXQxX1JTQTsKLSsJCVg1MDlfU1RPUkVfQ1RYX3NldF9wdXJwb3NlOwotKwkJQVNOMV9JQTVTVFJJTkdfZnJlZTsKLSsJCVBFTV93cml0ZV9iaW9fWDUwOV9BVVg7Ci0rCQlYNTA5X1BVUlBPU0VfZ2V0X2NvdW50OwotKwkJQ1JZUFRPX2FkZF9pbmZvOwotKwkJWDUwOV9OQU1FX0VOVFJZX2NyZWF0ZV9ieV90eHQ7Ci0rCQlBU04xX1NUUklOR19nZXRfZGVmYXVsdF9tYXNrOwotKwkJWDUwOV9hbGlhc19nZXQwOwotKwkJQVNOMV9TVFJJTkdfZGF0YTsKLSsJCWkyZF9BQ0NFU1NfREVTQ1JJUFRJT047Ci0rCQlYNTA5X3RydXN0X3NldF9iaXQ7Ci0rCQlBU04xX0JJVF9TVFJJTkdfZnJlZTsKLSsJCVBFTV9yZWFkX2Jpb19SU0FfUFVCS0VZOwotKwkJWDUwOV9hZGQxX3JlamVjdF9vYmplY3Q7Ci0rCQlYNTA5X2NoZWNrX3RydXN0OwotKwkJUEVNX3JlYWRfYmlvX0RTQV9QVUJLRVk7Ci0rCQlYNTA5X1BVUlBPU0VfYWRkOwotKwkJQVNOMV9TVFJJTkdfVEFCTEVfZ2V0OwotKwkJQVNOMV9VVEY4U1RSSU5HX2ZyZWU7Ci0rCQlkMmlfRFNBX1BVQktFWV9iaW87Ci0rCQlQRU1fd3JpdGVfUlNBX1BVQktFWTsKLSsJCWQyaV9PVEhFUk5BTUU7Ci0rCQlYNTA5X3JlamVjdF9zZXRfYml0OwotKwkJUEVNX3dyaXRlX0RTQV9QVUJLRVk7Ci0rCQlYNTA5X1BVUlBPU0VfZ2V0MF9zbmFtZTsKLSsJCUVWUF9QS0VZX3NldDFfREg7Ci0rCQlBU04xX09DVEVUX1NUUklOR19kdXA7Ci0rCQlBU04xX0JJVF9TVFJJTkdfc2V0OwotKwkJWDUwOV9UUlVTVF9nZXRfY291bnQ7Ci0rCQlBU04xX0lOVEVHRVJfZnJlZTsKLSsJCU9USEVSTkFNRV9mcmVlOwotKwkJaTJkX1JTQV9QVUJLRVlfZnA7Ci0rCQlBU04xX0lOVEVHRVJfZHVwOwotKwkJZDJpX1g1MDlfQ0VSVF9BVVg7Ci0rCQlQRU1fd3JpdGVfYmlvX1BVQktFWTsKLSsJCUFTTjFfVklTSUJMRVNUUklOR19mcmVlOwotKwkJWDUwOV9QVVJQT1NFX2NsZWFudXA7Ci0rCQlBU04xX21ic3RyaW5nX25jb3B5OwotKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfbmV3OwotKwkJRVZQX1BLRVlfZ2V0MV9ESDsKLSsJCUFTTjFfT0NURVRfU1RSSU5HX25ldzsKLSsJCUFTTjFfSU5URUdFUl9uZXc7Ci0rCQlpMmRfWDUwOV9BVVg7Ci0rCQlBU04xX0JJVF9TVFJJTkdfbmFtZV9wcmludDsKLSsJCVg1MDlfY21wOwotKwkJQVNOMV9TVFJJTkdfbGVuZ3RoX3NldDsKLSsJCURJUkVDVE9SWVNUUklOR19uZXc7Ci0rCQlYNTA5X2FkZDFfdHJ1c3Rfb2JqZWN0OwotKwkJUEtDUzEyX25ld3Bhc3M7Ci0rCQlTTUlNRV93cml0ZV9QS0NTNzsKLSsJCVNNSU1FX3JlYWRfUEtDUzc7Ci0rCQlERVNfc2V0X2tleV9jaGVja2VkOwotKwkJUEtDUzdfdmVyaWZ5OwotKwkJUEtDUzdfZW5jcnlwdDsKLSsJCURFU19zZXRfa2V5X3VuY2hlY2tlZDsKLSsJCVNNSU1FX2NybGZfY29weTsKLSsJCWkyZF9BU04xX1BSSU5UQUJMRVNUUklORzsKLSsJCVBLQ1M3X2dldDBfc2lnbmVyczsKLSsJCVBLQ1M3X2RlY3J5cHQ7Ci0rCQlTTUlNRV90ZXh0OwotKwkJUEtDUzdfc2ltcGxlX3NtaW1lY2FwOwotKwkJUEtDUzdfZ2V0X3NtaW1lY2FwOwotKwkJUEtDUzdfc2lnbjsKLSsJCVBLQ1M3X2FkZF9hdHRyaWJfc21pbWVjYXA7Ci0rCQlDUllQVE9fZGJnX3NldF9vcHRpb25zOwotKwkJQ1JZUFRPX3JlbW92ZV9hbGxfaW5mbzsKLSsJCUNSWVBUT19nZXRfbWVtX2RlYnVnX2Z1bmN0aW9uczsKLSsJCUNSWVBUT19pc19tZW1fY2hlY2tfb247Ci0rCQlDUllQVE9fc2V0X21lbV9kZWJ1Z19mdW5jdGlvbnM7Ci0rCQlDUllQVE9fcG9wX2luZm87Ci0rCQlDUllQVE9fcHVzaF9pbmZvXzsKLSsJCUNSWVBUT19zZXRfbWVtX2RlYnVnX29wdGlvbnM7Ci0rCQlQRU1fd3JpdGVfUEtDUzhQcml2YXRlS2V5X25pZDsKLSsJCVBFTV93cml0ZV9iaW9fUEtDUzhQcml2YXRlS2V5X25pZDsKLSsJCVBFTV93cml0ZV9iaW9fUEtDUzhQcml2S2V5X25pZDsKLSsJCWQyaV9QS0NTOFByaXZhdGVLZXlfYmlvOwotKwkJQVNOMV9OVUxMX2ZyZWU7Ci0rCQlkMmlfQVNOMV9OVUxMOwotKwkJQVNOMV9OVUxMX25ldzsKLSsJCWkyZF9QS0NTOFByaXZhdGVLZXlfYmlvOwotKwkJaTJkX1BLQ1M4UHJpdmF0ZUtleV9mcDsKLSsJCWkyZF9BU04xX05VTEw7Ci0rCQlpMmRfUEtDUzhQcml2YXRlS2V5X25pZF9mcDsKLSsJCWQyaV9QS0NTOFByaXZhdGVLZXlfZnA7Ci0rCQlpMmRfUEtDUzhQcml2YXRlS2V5X25pZF9iaW87Ci0rCQlpMmRfUEtDUzhQcml2YXRlS2V5SW5mb19mcDsKLSsJCWkyZF9QS0NTOFByaXZhdGVLZXlJbmZvX2JpbzsKLSsJCVBFTV9jYjsKLSsJCWkyZF9Qcml2YXRlS2V5X2ZwOwotKwkJZDJpX1ByaXZhdGVLZXlfYmlvOwotKwkJZDJpX1ByaXZhdGVLZXlfZnA7Ci0rCQlpMmRfUHJpdmF0ZUtleV9iaW87Ci0rCQlYNTA5X3JlamVjdF9jbGVhcjsKLSsJCVg1MDlfVFJVU1Rfc2V0X2RlZmF1bHQ7Ci0rCQlkMmlfQXV0b1ByaXZhdGVLZXk7Ci0rCQlYNTA5X0FUVFJJQlVURV9nZXQwX3R5cGU7Ci0rCQlYNTA5X0FUVFJJQlVURV9zZXQxX2RhdGE7Ci0rCQlYNTA5YXRfZ2V0X2F0dHI7Ci0rCQlYNTA5YXRfZ2V0X2F0dHJfY291bnQ7Ci0rCQlYNTA5X0FUVFJJQlVURV9jcmVhdGVfYnlfTklEOwotKwkJWDUwOV9BVFRSSUJVVEVfc2V0MV9vYmplY3Q7Ci0rCQlYNTA5X0FUVFJJQlVURV9jb3VudDsKLSsJCVg1MDlfQVRUUklCVVRFX2NyZWF0ZV9ieV9PQko7Ci0rCQlYNTA5X0FUVFJJQlVURV9nZXQwX29iamVjdDsKLSsJCVg1MDlhdF9nZXRfYXR0cl9ieV9OSUQ7Ci0rCQlYNTA5YXRfYWRkMV9hdHRyOwotKwkJWDUwOV9BVFRSSUJVVEVfZ2V0MF9kYXRhOwotKwkJWDUwOWF0X2RlbGV0ZV9hdHRyOwotKwkJWDUwOWF0X2dldF9hdHRyX2J5X09CSjsKLSsJCVJBTkRfYWRkOwotKwkJQklPX251bWJlcl93cml0dGVuOwotKwkJQklPX251bWJlcl9yZWFkOwotKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MV9jaGFpbjsKLSsJCUVSUl9sb2FkX1JBTkRfc3RyaW5nczsKLSsJCVJBTkRfcHNldWRvX2J5dGVzOwotKwkJWDUwOV9SRVFfZ2V0X2F0dHJfYnlfTklEOwotKwkJWDUwOV9SRVFfZ2V0X2F0dHI7Ci0rCQlYNTA5X1JFUV9hZGQxX2F0dHJfYnlfTklEOwotKwkJWDUwOV9SRVFfZ2V0X2F0dHJfYnlfT0JKOwotKwkJWDUwOWF0X2FkZDFfYXR0cl9ieV9OSUQ7Ci0rCQlYNTA5X1JFUV9hZGQxX2F0dHJfYnlfT0JKOwotKwkJWDUwOV9SRVFfZ2V0X2F0dHJfY291bnQ7Ci0rCQlYNTA5X1JFUV9hZGQxX2F0dHI7Ci0rCQlYNTA5X1JFUV9kZWxldGVfYXR0cjsKLSsJCVg1MDlhdF9hZGQxX2F0dHJfYnlfT0JKOwotKwkJWDUwOV9SRVFfYWRkMV9hdHRyX2J5X3R4dDsKLSsJCVg1MDlfQVRUUklCVVRFX2NyZWF0ZV9ieV90eHQ7Ci0rCQlYNTA5YXRfYWRkMV9hdHRyX2J5X3R4dDsKLSsJCUJOX3BzZXVkb19yYW5kOwotKwkJQk5faXNfcHJpbWVfZmFzdHRlc3Q7Ci0rCQlCTl9DVFhfZW5kOwotKwkJQk5fQ1RYX3N0YXJ0OwotKwkJQk5fQ1RYX2dldDsKLSsJCUVWUF9QS0VZMlBLQ1M4X2Jyb2tlbjsKLSsJCUFTTjFfU1RSSU5HX1RBQkxFX2FkZDsKLSsJCUNSWVBUT19kYmdfZ2V0X29wdGlvbnM7Ci0rCQlBVVRIT1JJVFlfSU5GT19BQ0NFU1NfbmV3OwotKwkJQ1JZUFRPX2dldF9tZW1fZGVidWdfb3B0aW9uczsKLSsJCURFU19jcnlwdDsKLSsJCVBFTV93cml0ZV9iaW9fWDUwOV9SRVFfTkVXOwotKwkJUEVNX3dyaXRlX1g1MDlfUkVRX05FVzsKLSsJCUJJT19jYWxsYmFja19jdHJsOwotKwkJUkFORF9lZ2Q7Ci0rCQlSQU5EX3N0YXR1czsKLSsJCWJuX2R1bXAxOwotKwkJREVTX2NoZWNrX2tleV9wYXJpdHk7Ci0rCQlsaF9udW1faXRlbXM7Ci0rCQlSQU5EX2V2ZW50OwotKwkJRFNPX25ldzsKLSsJCURTT19uZXdfbWV0aG9kOwotKwkJRFNPX2ZyZWU7Ci0rCQlEU09fZmxhZ3M7Ci0rCQlEU09fdXA7Ci0rCQlEU09fc2V0X2RlZmF1bHRfbWV0aG9kOwotKwkJRFNPX2dldF9kZWZhdWx0X21ldGhvZDsKLSsJCURTT19nZXRfbWV0aG9kOwotKwkJRFNPX3NldF9tZXRob2Q7Ci0rCQlEU09fbG9hZDsKLSsJCURTT19iaW5kX3ZhcjsKLSsJCURTT19NRVRIT0RfbnVsbDsKLSsJCURTT19NRVRIT0Rfb3BlbnNzbDsKLSsJCURTT19NRVRIT0RfZGxmY247Ci0rCQlEU09fTUVUSE9EX3dpbjMyOwotKwkJRVJSX2xvYWRfRFNPX3N0cmluZ3M7Ci0rCQlEU09fTUVUSE9EX2RsOwotKwkJTkNPTkZfbG9hZDsKLSsJCU5DT05GX2xvYWRfZnA7Ci0rCQlOQ09ORl9uZXc7Ci0rCQlOQ09ORl9nZXRfc3RyaW5nOwotKwkJTkNPTkZfZnJlZTsKLSsJCU5DT05GX2dldF9udW1iZXI7Ci0rCQlDT05GX2R1bXBfZnA7Ci0rCQlOQ09ORl9sb2FkX2JpbzsKLSsJCU5DT05GX2R1bXBfZnA7Ci0rCQlOQ09ORl9nZXRfc2VjdGlvbjsKLSsJCU5DT05GX2R1bXBfYmlvOwotKwkJQ09ORl9kdW1wX2JpbzsKLSsJCU5DT05GX2ZyZWVfZGF0YTsKLSsJCUNPTkZfc2V0X2RlZmF1bHRfbWV0aG9kOwotKwkJRVJSX2Vycm9yX3N0cmluZ19uOwotKwkJQklPX3NucHJpbnRmOwotKwkJRFNPX2N0cmw7Ci0rCQlpMmRfQVNOMV9TRVRfT0ZfQVNOMV9JTlRFR0VSOwotKwkJaTJkX0FTTjFfU0VUX09GX1BLQ1MxMl9TQUZFQkFHOwotKwkJaTJkX0FTTjFfU0VUX09GX1BLQ1M3OwotKwkJQklPX3ZmcmVlOwotKwkJZDJpX0FTTjFfU0VUX09GX0FTTjFfSU5URUdFUjsKLSsJCWQyaV9BU04xX1NFVF9PRl9QS0NTMTJfU0FGRUJBRzsKLSsJCUFTTjFfVVRDVElNRV9nZXQ7Ci0rCQlYNTA5X1JFUV9kaWdlc3Q7Ci0rCQlYNTA5X0NSTF9kaWdlc3Q7Ci0rCQlkMmlfQVNOMV9TRVRfT0ZfUEtDUzc7Ci0rCQlFVlBfQ0lQSEVSX0NUWF9zZXRfa2V5X2xlbmd0aDsKLSsJCUVWUF9DSVBIRVJfQ1RYX2N0cmw7Ci0rCQlCTl9tb2RfZXhwX21vbnRfd29yZDsKLSsJCVJBTkRfZWdkX2J5dGVzOwotKwkJWDUwOV9SRVFfZ2V0MV9lbWFpbDsKLSsJCVg1MDlfZ2V0MV9lbWFpbDsKLSsJCVg1MDlfZW1haWxfZnJlZTsKLSsJCWkyZF9SU0FfTkVUOwotKwkJZDJpX1JTQV9ORVRfMjsKLSsJCWQyaV9SU0FfTkVUOwotKwkJRFNPX2JpbmRfZnVuYzsKLSsJCUNSWVBUT19nZXRfbmV3X2R5bmxvY2tpZDsKLSsJCXNrX25ld19udWxsOwotKwkJQ1JZUFRPX3NldF9keW5sb2NrX2Rlc3Ryb3lfY2FsbGJhY2s7Ci0rCQlDUllQVE9fc2V0X2R5bmxvY2tfZGVzdHJveV9jYjsKLSsJCUNSWVBUT19kZXN0cm95X2R5bmxvY2tpZDsKLSsJCUNSWVBUT19zZXRfZHlubG9ja19zaXplOwotKwkJQ1JZUFRPX3NldF9keW5sb2NrX2NyZWF0ZV9jYWxsYmFjazsKLSsJCUNSWVBUT19zZXRfZHlubG9ja19jcmVhdGVfY2I7Ci0rCQlDUllQVE9fc2V0X2R5bmxvY2tfbG9ja19jYWxsYmFjazsKLSsJCUNSWVBUT19zZXRfZHlubG9ja19sb2NrX2NiOwotKwkJQ1JZUFRPX2dldF9keW5sb2NrX2xvY2tfY2FsbGJhY2s7Ci0rCQlDUllQVE9fZ2V0X2R5bmxvY2tfbG9ja19jYjsKLSsJCUNSWVBUT19nZXRfZHlubG9ja19kZXN0cm95X2NhbGxiYWNrOwotKwkJQ1JZUFRPX2dldF9keW5sb2NrX2Rlc3Ryb3lfY2I7Ci0rCQlDUllQVE9fZ2V0X2R5bmxvY2tfdmFsdWU7Ci0rCQlDUllQVE9fZ2V0X2R5bmxvY2tfY3JlYXRlX2NhbGxiYWNrOwotKwkJQ1JZUFRPX2dldF9keW5sb2NrX2NyZWF0ZV9jYjsKLSsJCWMyaV9BU04xX0JJVF9TVFJJTkc7Ci0rCQlpMmNfQVNOMV9CSVRfU1RSSU5HOwotKwkJUkFORF9wb2xsOwotKwkJYzJpX0FTTjFfSU5URUdFUjsKLSsJCWkyY19BU04xX0lOVEVHRVI7Ci0rCQlCSU9fZHVtcF9pbmRlbnQ7Ci0rCQlBU04xX3BhcnNlX2R1bXA7Ci0rCQljMmlfQVNOMV9PQkpFQ1Q7Ci0rCQlYNTA5X05BTUVfcHJpbnRfZXhfZnA7Ci0rCQlBU04xX1NUUklOR19wcmludF9leF9mcDsKLSsJCVg1MDlfTkFNRV9wcmludF9leDsKLSsJCUFTTjFfU1RSSU5HX3ByaW50X2V4OwotKwkJTUQ0OwotKwkJTUQ0X1RyYW5zZm9ybTsKLSsJCU1ENF9GaW5hbDsKLSsJCU1ENF9VcGRhdGU7Ci0rCQlNRDRfSW5pdDsKLSsJCUVWUF9tZDQ7Ci0rCQlpMmRfUFVCS0VZX2JpbzsKLSsJCWkyZF9QVUJLRVlfZnA7Ci0rCQlkMmlfUFVCS0VZX2JpbzsKLSsJCUFTTjFfU1RSSU5HX3RvX1VURjg7Ci0rCQlCSU9fdnByaW50ZjsKLSsJCUJJT192c25wcmludGY7Ci0rCQlkMmlfUFVCS0VZX2ZwOwotKwkJWDUwOV9jbXBfdGltZTsKLSsJCVg1MDlfU1RPUkVfQ1RYX3NldF90aW1lOwotKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MV9pc3N1ZXI7Ci0rCQlYNTA5X09CSkVDVF9yZXRyaWV2ZV9tYXRjaDsKLSsJCVg1MDlfT0JKRUNUX2lkeF9ieV9zdWJqZWN0OwotKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2ZsYWdzOwotKwkJWDUwOV9TVE9SRV9DVFhfdHJ1c3RlZF9zdGFjazsKLSsJCVg1MDlfdGltZV9hZGo7Ci0rCQlYNTA5X2NoZWNrX2lzc3VlZDsKLSsJCUFTTjFfVVRDVElNRV9jbXBfdGltZV90OwotKwkJREVTX3NldF93ZWFrX2tleV9mbGFnOwotKwkJREVTX2NoZWNrX2tleTsKLSsJCURFU19yd19tb2RlOwotKwkJUlNBX1BLQ1MxX1JTQXJlZjsKLSsJCVg1MDlfa2V5aWRfc2V0MTsKLSsJCUJJT19uZXh0OwotKwkJRFNPX01FVEhPRF92bXM7Ci0rCQlCSU9fZl9saW5lYnVmZmVyOwotKwkJQk5fYm50ZXN0X3JhbmQ7Ci0rCQlPUEVOU1NMX2lzc2V0dWdpZDsKLSsJCUJOX3JhbmRfcmFuZ2U7Ci0rCQlFUlJfbG9hZF9FTkdJTkVfc3RyaW5nczsKLSsJCUVOR0lORV9zZXRfRFNBOwotKwkJRU5HSU5FX2dldF9maW5pc2hfZnVuY3Rpb247Ci0rCQlFTkdJTkVfZ2V0X2RlZmF1bHRfUlNBOwotKwkJRU5HSU5FX2dldF9CTl9tb2RfZXhwOwotKwkJRFNBX2dldF9kZWZhdWx0X29wZW5zc2xfbWV0aG9kOwotKwkJRU5HSU5FX3NldF9ESDsKLSsJCUVOR0lORV9zZXRfZGVmX0JOX21vZF9leHBfY3J0OwotKwkJRU5HSU5FX3NldF9kZWZhdWx0X0JOX21vZF9leHBfY3J0OwotKwkJRU5HSU5FX2luaXQ7Ci0rCQlESF9nZXRfZGVmYXVsdF9vcGVuc3NsX21ldGhvZDsKLSsJCVJTQV9zZXRfZGVmYXVsdF9vcGVuc3NsX21ldGhvZDsKLSsJCUVOR0lORV9maW5pc2g7Ci0rCQlFTkdJTkVfbG9hZF9wdWJsaWNfa2V5OwotKwkJRU5HSU5FX2dldF9ESDsKLSsJCUVOR0lORV9jdHJsOwotKwkJRU5HSU5FX2dldF9pbml0X2Z1bmN0aW9uOwotKwkJRU5HSU5FX3NldF9pbml0X2Z1bmN0aW9uOwotKwkJRU5HSU5FX3NldF9kZWZhdWx0X0RTQTsKLSsJCUVOR0lORV9nZXRfbmFtZTsKLSsJCUVOR0lORV9nZXRfbGFzdDsKLSsJCUVOR0lORV9nZXRfcHJldjsKLSsJCUVOR0lORV9nZXRfZGVmYXVsdF9ESDsKLSsJCUVOR0lORV9nZXRfUlNBOwotKwkJRU5HSU5FX3NldF9kZWZhdWx0OwotKwkJRU5HSU5FX2dldF9SQU5EOwotKwkJRU5HSU5FX2dldF9maXJzdDsKLSsJCUVOR0lORV9ieV9pZDsKLSsJCUVOR0lORV9zZXRfZmluaXNoX2Z1bmN0aW9uOwotKwkJRU5HSU5FX2dldF9kZWZfQk5fbW9kX2V4cF9jcnQ7Ci0rCQlFTkdJTkVfZ2V0X2RlZmF1bHRfQk5fbW9kX2V4cF9jcnQ7Ci0rCQlSU0FfZ2V0X2RlZmF1bHRfb3BlbnNzbF9tZXRob2Q7Ci0rCQlFTkdJTkVfc2V0X1JTQTsKLSsJCUVOR0lORV9sb2FkX3ByaXZhdGVfa2V5OwotKwkJRU5HSU5FX3NldF9kZWZhdWx0X1JBTkQ7Ci0rCQlFTkdJTkVfc2V0X0JOX21vZF9leHA7Ci0rCQlFTkdJTkVfcmVtb3ZlOwotKwkJRU5HSU5FX2ZyZWU7Ci0rCQlFTkdJTkVfZ2V0X0JOX21vZF9leHBfY3J0OwotKwkJRU5HSU5FX2dldF9uZXh0OwotKwkJRU5HSU5FX3NldF9uYW1lOwotKwkJRU5HSU5FX2dldF9kZWZhdWx0X0RTQTsKLSsJCUVOR0lORV9zZXRfZGVmYXVsdF9CTl9tb2RfZXhwOwotKwkJRU5HSU5FX3NldF9kZWZhdWx0X1JTQTsKLSsJCUVOR0lORV9nZXRfZGVmYXVsdF9SQU5EOwotKwkJRU5HSU5FX2dldF9kZWZhdWx0X0JOX21vZF9leHA7Ci0rCQlFTkdJTkVfc2V0X1JBTkQ7Ci0rCQlFTkdJTkVfc2V0X2lkOwotKwkJRU5HSU5FX3NldF9CTl9tb2RfZXhwX2NydDsKLSsJCUVOR0lORV9zZXRfZGVmYXVsdF9ESDsKLSsJCUVOR0lORV9uZXc7Ci0rCQlFTkdJTkVfZ2V0X2lkOwotKwkJRFNBX3NldF9kZWZhdWx0X29wZW5zc2xfbWV0aG9kOwotKwkJRU5HSU5FX2FkZDsKLSsJCURIX3NldF9kZWZhdWx0X29wZW5zc2xfbWV0aG9kOwotKwkJRU5HSU5FX2dldF9EU0E7Ci0rCQlFTkdJTkVfZ2V0X2N0cmxfZnVuY3Rpb247Ci0rCQlFTkdJTkVfc2V0X2N0cmxfZnVuY3Rpb247Ci0rCQlCTl9wc2V1ZG9fcmFuZF9yYW5nZTsKLSsJCVg1MDlfU1RPUkVfQ1RYX3NldF92ZXJpZnlfY2I7Ci0rCQlFUlJfbG9hZF9DT01QX3N0cmluZ3M7Ci0rCQlQS0NTMTJfaXRlbV9kZWNyeXB0X2QyaTsKLSsJCUFTTjFfVVRGOFNUUklOR19pdDsKLSsJCUVOR0lORV91bnJlZ2lzdGVyX2NpcGhlcnM7Ci0rCQlFTkdJTkVfZ2V0X2NpcGhlcnM7Ci0rCQlkMmlfT0NTUF9CQVNJQ1JFU1A7Ci0rCQlLUkI1X0NIRUNLU1VNX2l0OwotKwkJRUNfUE9JTlRfYWRkOwotKwkJQVNOMV9pdGVtX2V4X2kyZDsKLSsJCU9DU1BfQ0VSVElEX2l0OwotKwkJZDJpX09DU1BfUkVTUEJZVEVTOwotKwkJWDUwOVYzX2FkZDFfaTJkOwotKwkJUEtDUzdfRU5WRUxPUEVfaXQ7Ci0rCQlVSV9hZGRfaW5wdXRfYm9vbGVhbjsKLSsJCUVOR0lORV91bnJlZ2lzdGVyX1JTQTsKLSsJCVg1MDlWM19FWFRfbmNvbmY7Ci0rCQlBU04xX0dFTkVSQUxTVFJJTkdfZnJlZTsKLSsJCWQyaV9PQ1NQX0NFUlRTVEFUVVM7Ci0rCQlYNTA5X1JFVk9LRURfc2V0X3NlcmlhbE51bWJlcjsKLSsJCVg1MDlfcHJpbnRfZXg7Ci0rCQlPQ1NQX09ORVJFUV9nZXQxX2V4dF9kMmk7Ci0rCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX1JBTkQ7Ci0rCQlFTkdJTkVfbG9hZF9keW5hbWljOwotKwkJUEJLREYyUEFSQU1faXQ7Ci0rCQlFWFRFTkRFRF9LRVlfVVNBR0VfbmV3OwotKwkJRUNfR1JPVVBfY2xlYXJfZnJlZTsKLSsJCU9DU1Bfc2VuZHJlcV9iaW87Ci0rCQlBU04xX2l0ZW1fZGlnZXN0OwotKwkJT0NTUF9CQVNJQ1JFU1BfZGVsZXRlX2V4dDsKLSsJCU9DU1BfU0lHTkFUVVJFX2l0OwotKwkJWDUwOV9DUkxfaXQ7Ci0rCQlPQ1NQX0JBU0lDUkVTUF9hZGRfZXh0OwotKwkJS1JCNV9FTkNLRVlfaXQ7Ci0rCQlVSV9tZXRob2Rfc2V0X2Nsb3NlcjsKLSsJCVg1MDlfU1RPUkVfc2V0X3B1cnBvc2U7Ci0rCQlpMmRfQVNOMV9HRU5FUkFMU1RSSU5HOwotKwkJT0NTUF9yZXNwb25zZV9zdGF0dXM7Ci0rCQlpMmRfT0NTUF9TRVJWSUNFTE9DOwotKwkJRU5HSU5FX2dldF9kaWdlc3RfZW5naW5lOwotKwkJRUNfR1JPVVBfc2V0X2N1cnZlX0dGcDsKLSsJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2J5X09CSjsKLSsJCV9vc3NsX29sZF9kZXNfcmFuZG9tX2tleTsKLSsJCUFTTjFfVDYxU1RSSU5HX2l0OwotKwkJRUNfR1JPVVBfbWV0aG9kX29mOwotKwkJaTJkX0tSQjVfQVBSRVE7Ci0rCQlfb3NzbF9vbGRfZGVzX2VuY3J5cHQ7Ci0rCQlBU04xX1BSSU5UQUJMRV9uZXc7Ci0rCQlITUFDX0luaXRfZXg7Ci0rCQlkMmlfS1JCNV9BVVRIRU5UOwotKwkJT0NTUF9hcmNoaXZlX2N1dG9mZl9uZXc7Ci0rCQlFQ19QT0lOVF9zZXRfSnByb2plY3RpdmVfY29vcmRpbmF0ZXNfR0ZwOwotKwkJRUNfUE9JTlRfc2V0X0pwcm9qX2Nvb3Jkc19HRnA7Ci0rCQlfb3NzbF9vbGRfZGVzX2lzX3dlYWtfa2V5OwotKwkJT0NTUF9CQVNJQ1JFU1BfZ2V0X2V4dF9ieV9PQko7Ci0rCQlFQ19QT0lOVF9vY3QycG9pbnQ7Ci0rCQlPQ1NQX1NJTkdMRVJFU1BfZ2V0X2V4dF9jb3VudDsKLSsJCVVJX2N0cmw7Ci0rCQlfc2hhZG93X0RFU19yd19tb2RlOwotKwkJYXNuMV9kb19hZGI7Ci0rCQlBU04xX3RlbXBsYXRlX2kyZDsKLSsJCUVOR0lORV9yZWdpc3Rlcl9ESDsKLSsJCVVJX2NvbnN0cnVjdF9wcm9tcHQ7Ci0rCQlYNTA5X1NUT1JFX3NldF90cnVzdDsKLSsJCVVJX2R1cF9pbnB1dF9zdHJpbmc7Ci0rCQlkMmlfS1JCNV9BUFJFUTsKLSsJCUVWUF9NRF9DVFhfY29weV9leDsKLSsJCU9DU1BfcmVxdWVzdF9pc19zaWduZWQ7Ci0rCQlpMmRfT0NTUF9SRVFJTkZPOwotKwkJS1JCNV9FTkNLRVlfZnJlZTsKLSsJCU9DU1BfcmVzcF9nZXQwOwotKwkJR0VORVJBTF9OQU1FX2l0OwotKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfaXQ7Ci0rCQlYNTA5X1NUT1JFX3NldF9mbGFnczsKLSsJCUVDX1BPSU5UX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzX0dGcDsKLSsJCUVDX1BPSU5UX3NldF9jb21wcl9jb29yZHNfR0ZwOwotKwkJT0NTUF9yZXNwb25zZV9zdGF0dXNfc3RyOwotKwkJZDJpX09DU1BfUkVWT0tFRElORk87Ci0rCQlPQ1NQX2Jhc2ljX2FkZDFfY2VydDsKLSsJCUVSUl9nZXRfaW1wbGVtZW50YXRpb247Ci0rCQlFVlBfQ2lwaGVyRmluYWxfZXg7Ci0rCQlPQ1NQX0NFUlRTVEFUVVNfbmV3OwotKwkJQ1JZUFRPX2NsZWFudXBfYWxsX2V4X2RhdGE7Ci0rCQlPQ1NQX3Jlc3BfZmluZDsKLSsJCUJOX25ubW9kOwotKwkJWDUwOV9DUkxfc29ydDsKLSsJCVg1MDlfUkVWT0tFRF9zZXRfcmV2b2NhdGlvbkRhdGU7Ci0rCQlFTkdJTkVfcmVnaXN0ZXJfUkFORDsKLSsJCU9DU1BfU0VSVklDRUxPQ19uZXc7Ci0rCQlFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGcDsKLSsJCUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRzX0dGcDsKLSsJCV9vc3NsX29sZF9kZXNfb3B0aW9uczsKLSsJCVNYTkVUX2l0OwotKwkJVUlfZHVwX2lucHV0X2Jvb2xlYW47Ci0rCQlQS0NTMTJfYWRkX0NTUE5hbWVfYXNjOwotKwkJRUNfUE9JTlRfaXNfYXRfaW5maW5pdHk7Ci0rCQlFTkdJTkVfbG9hZF9jcnlwdG9kZXY7Ci0rCQlEU09fY29udmVydF9maWxlbmFtZTsKLSsJCVBPTElDWVFVQUxJTkZPX2l0OwotKwkJRU5HSU5FX3JlZ2lzdGVyX2NpcGhlcnM7Ci0rCQlCTl9tb2RfbHNoaWZ0X3F1aWNrOwotKwkJRFNPX3NldF9maWxlbmFtZTsKLSsJCUFTTjFfaXRlbV9mcmVlOwotKwkJS1JCNV9US1RCT0RZX2ZyZWU7Ci0rCQlBVVRIT1JJVFlfS0VZSURfaXQ7Ci0rCQlLUkI1X0FQUkVRQk9EWV9uZXc7Ci0rCQlYNTA5VjNfRVhUX1JFUV9hZGRfbmNvbmY7Ci0rCQlFTkdJTkVfY3RybF9jbWRfc3RyaW5nOwotKwkJaTJkX09DU1BfUkVTUERBVEE7Ci0rCQlFVlBfTURfQ1RYX2luaXQ7Ci0rCQlFWFRFTkRFRF9LRVlfVVNBR0VfZnJlZTsKLSsJCVBLQ1M3X0FUVFJfU0lHTl9pdDsKLSsJCVVJX2FkZF9lcnJvcl9zdHJpbmc7Ci0rCQlLUkI1X0NIRUNLU1VNX2ZyZWU7Ci0rCQlPQ1NQX1JFUVVFU1RfZ2V0X2V4dDsKLSsJCUVOR0lORV9sb2FkX3Vic2VjOwotKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9kaWdlc3RzOwotKwkJUEtFWV9VU0FHRV9QRVJJT0RfaXQ7Ci0rCQlQS0NTMTJfdW5wYWNrX2F1dGhzYWZlczsKLSsJCUFTTjFfaXRlbV91bnBhY2s7Ci0rCQlORVRTQ0FQRV9TUEtBQ19pdDsKLSsJCVg1MDlfUkVWT0tFRF9pdDsKLSsJCUFTTjFfU1RSSU5HX2VuY29kZTsKLSsJCUVWUF9hZXNfMTI4X2VjYjsKLSsJCUtSQjVfQVVUSEVOVF9mcmVlOwotKwkJT0NTUF9CQVNJQ1JFU1BfZ2V0X2V4dF9ieV9jcml0aWNhbDsKLSsJCU9DU1BfQkFTSUNSRVNQX2dldF9leHRfYnlfY3JpdDsKLSsJCU9DU1BfY2VydF9zdGF0dXNfc3RyOwotKwkJZDJpX09DU1BfUkVRVUVTVDsKLSsJCVVJX2R1cF9pbmZvX3N0cmluZzsKLSsJCV9vc3NsX29sZF9kZXNfeHdoaXRlX2luMm91dDsKLSsJCVBLQ1MxMl9pdDsKLSsJCU9DU1BfU0lOR0xFUkVTUF9nZXRfZXh0X2J5X2NyaXRpY2FsOwotKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHRfYnlfY3JpdDsKLSsJCU9DU1BfQ0VSVFNUQVRVU19mcmVlOwotKwkJX29zc2xfb2xkX2Rlc19jcnlwdDsKLSsJCUFTTjFfaXRlbV9pMmQ7Ci0rCQlFVlBfRGVjcnlwdEZpbmFsX2V4OwotKwkJRU5HSU5FX2xvYWRfb3BlbnNzbDsKLSsJCUVOR0lORV9nZXRfY21kX2RlZm5zOwotKwkJRU5HSU5FX3NldF9sb2FkX3ByaXZrZXlfZnVuY3Rpb247Ci0rCQlFTkdJTkVfc2V0X2xvYWRfcHJpdmtleV9mbjsKLSsJCUVWUF9FbmNyeXB0RmluYWxfZXg7Ci0rCQlFTkdJTkVfc2V0X2RlZmF1bHRfZGlnZXN0czsKLSsJCVg1MDlfZ2V0MF9wdWJrZXlfYml0c3RyOwotKwkJYXNuMV9leF9pMmM7Ci0rCQlFTkdJTkVfcmVnaXN0ZXJfUlNBOwotKwkJRU5HSU5FX3VucmVnaXN0ZXJfRFNBOwotKwkJX29zc2xfb2xkX2Rlc19rZXlfc2NoZWQ7Ci0rCQlYNTA5X0VYVEVOU0lPTl9pdDsKLSsJCWkyZF9LUkI1X0FVVEhFTlQ7Ci0rCQlTWE5FVElEX2l0OwotKwkJZDJpX09DU1BfU0lOR0xFUkVTUDsKLSsJCUVESVBBUlRZTkFNRV9uZXc7Ci0rCQlQS0NTMTJfY2VydGJhZzJ4NTA5OwotKwkJX29zc2xfb2xkX2Rlc19vZmI2NF9lbmNyeXB0OwotKwkJZDJpX0VYVEVOREVEX0tFWV9VU0FHRTsKLSsJCUVSUl9wcmludF9lcnJvcnNfY2I7Ci0rCQlFTkdJTkVfc2V0X2NpcGhlcnM7Ci0rCQlkMmlfS1JCNV9BUFJFUUJPRFk7Ci0rCQlVSV9tZXRob2RfZ2V0X2ZsdXNoZXI7Ci0rCQlYNTA5X1BVQktFWV9pdDsKLSsJCV9vc3NsX29sZF9kZXNfZW5jX3JlYWQ7Ci0rCQlQS0NTN19FTkNSWVBUX2l0OwotKwkJaTJkX09DU1BfUkVTUE9OU0U7Ci0rCQlFQ19HUk9VUF9nZXRfY29mYWN0b3I7Ci0rCQlQS0NTMTJfdW5wYWNrX3A3ZGF0YTsKLSsJCWQyaV9LUkI1X0FVVEhEQVRBOwotKwkJT0NTUF9jb3B5X25vbmNlOwotKwkJS1JCNV9BVVRIREFUQV9uZXc7Ci0rCQlPQ1NQX1JFU1BEQVRBX25ldzsKLSsJCUVDX0dGcF9tb250X21ldGhvZDsKLSsJCU9DU1BfUkVWT0tFRElORk9fZnJlZTsKLSsJCVVJX2dldF9leF9kYXRhOwotKwkJS1JCNV9BUFJFUUJPRFlfZnJlZTsKLSsJCUVDX0dST1VQX2dldDBfZ2VuZXJhdG9yOwotKwkJVUlfZ2V0X2RlZmF1bHRfbWV0aG9kOwotKwkJWDUwOVYzX3NldF9uY29uZjsKLSsJCVBLQ1MxMl9pdGVtX2kyZF9lbmNyeXB0OwotKwkJWDUwOV9hZGQxX2V4dF9pMmQ7Ci0rCQlQS0NTN19TSUdORVJfSU5GT19pdDsKLSsJCUtSQjVfUFJJTkNOQU1FX25ldzsKLSsJCVBLQ1MxMl9TQUZFQkFHX2l0OwotKwkJRUNfR1JPVVBfZ2V0X29yZGVyOwotKwkJZDJpX09DU1BfUkVTUElEOwotKwkJT0NTUF9yZXF1ZXN0X3ZlcmlmeTsKLSsJCU5DT05GX2dldF9udW1iZXJfZTsKLSsJCV9vc3NsX29sZF9kZXNfZGVjcnlwdDM7Ci0rCQlYNTA5X3NpZ25hdHVyZV9wcmludDsKLSsJCU9DU1BfU0lOR0xFUkVTUF9mcmVlOwotKwkJRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzOwotKwkJaTJkX09DU1BfT05FUkVROwotKwkJT0NTUF9SRVFVRVNUX2FkZF9leHQ7Ci0rCQlPQ1NQX1JFU1BCWVRFU19uZXc7Ci0rCQlFVlBfTURfQ1RYX2NyZWF0ZTsKLSsJCU9DU1BfcmVzcF9maW5kX3N0YXR1czsKLSsJCVg1MDlfQUxHT1JfaXQ7Ci0rCQlBU04xX1RJTUVfaXQ7Ci0rCQlPQ1NQX3JlcXVlc3Rfc2V0MV9uYW1lOwotKwkJT0NTUF9PTkVSRVFfZ2V0X2V4dF9jb3VudDsKLSsJCVVJX2dldDBfcmVzdWx0OwotKwkJUEtDUzEyX0FVVEhTQUZFU19pdDsKLSsJCUVWUF9hZXNfMjU2X2VjYjsKLSsJCVBLQ1MxMl9wYWNrX2F1dGhzYWZlczsKLSsJCUFTTjFfSUE1U1RSSU5HX2l0OwotKwkJVUlfZ2V0X2lucHV0X2ZsYWdzOwotKwkJRUNfR1JPVVBfc2V0X2dlbmVyYXRvcjsKLSsJCV9vc3NsX29sZF9kZXNfc3RyaW5nX3RvXzJrZXlzOwotKwkJT0NTUF9DRVJUSURfZnJlZTsKLSsJCVg1MDlfQ0VSVF9BVVhfaXQ7Ci0rCQlDRVJUSUZJQ0FURVBPTElDSUVTX2l0OwotKwkJX29zc2xfb2xkX2Rlc19lZGUzX2NiY19lbmNyeXB0OwotKwkJUkFORF9zZXRfcmFuZF9lbmdpbmU7Ci0rCQlEU09fZ2V0X2xvYWRlZF9maWxlbmFtZTsKLSsJCVg1MDlfQVRUUklCVVRFX2l0OwotKwkJT0NTUF9PTkVSRVFfZ2V0X2V4dF9ieV9OSUQ7Ci0rCQlQS0NTMTJfZGVjcnlwdF9za2V5OwotKwkJS1JCNV9BVVRIRU5UX2l0OwotKwkJVUlfZHVwX2Vycm9yX3N0cmluZzsKLSsJCVJTQVB1YmxpY0tleV9pdDsKLSsJCWkyZF9PQ1NQX1JFUVVFU1Q7Ci0rCQlQS0NTMTJfeDUwOWNybDJjZXJ0YmFnOwotKwkJT0NTUF9TRVJWSUNFTE9DX2l0OwotKwkJQVNOMV9pdGVtX3NpZ247Ci0rCQlYNTA5X0NSTF9zZXRfaXNzdWVyX25hbWU7Ci0rCQlPQkpfTkFNRV9kb19hbGxfc29ydGVkOwotKwkJaTJkX09DU1BfQkFTSUNSRVNQOwotKwkJaTJkX09DU1BfUkVTUEJZVEVTOwotKwkJUEtDUzEyX3VucGFja19wN2VuY2RhdGE7Ci0rCQlITUFDX0NUWF9pbml0OwotKwkJRU5HSU5FX2dldF9kaWdlc3Q7Ci0rCQlPQ1NQX1JFU1BPTlNFX3ByaW50OwotKwkJS1JCNV9US1RCT0RZX2l0OwotKwkJQUNDRVNTX0RFU0NSSVBUSU9OX2l0OwotKwkJUEtDUzdfSVNTVUVSX0FORF9TRVJJQUxfaXQ7Ci0rCQlQQkUyUEFSQU1faXQ7Ci0rCQlQS0NTMTJfY2VydGJhZzJ4NTA5Y3JsOwotKwkJUEtDUzdfU0lHTkVEX2l0OwotKwkJRU5HSU5FX2dldF9jaXBoZXI7Ci0rCQlpMmRfT0NTUF9DUkxJRDsKLSsJCU9DU1BfU0lOR0xFUkVTUF9uZXc7Ci0rCQlFTkdJTkVfY21kX2lzX2V4ZWN1dGFibGU7Ci0rCQlSU0FfdXBfcmVmOwotKwkJQVNOMV9HRU5FUkFMU1RSSU5HX2l0OwotKwkJRU5HSU5FX3JlZ2lzdGVyX0RTQTsKLSsJCVg1MDlWM19FWFRfYWRkX25jb25mX3NrOwotKwkJRU5HSU5FX3NldF9sb2FkX3B1YmtleV9mdW5jdGlvbjsKLSsJCVBLQ1M4X2RlY3J5cHQ7Ci0rCQlQRU1fYnl0ZXNfcmVhZF9iaW87Ci0rCQlESVJFQ1RPUllTVFJJTkdfaXQ7Ci0rCQlkMmlfT0NTUF9DUkxJRDsKLSsJCUVDX1BPSU5UX2lzX29uX2N1cnZlOwotKwkJQ1JZUFRPX3NldF9sb2NrZWRfbWVtX2V4X2Z1bmN0aW9uczsKLSsJCUNSWVBUT19zZXRfbG9ja2VkX21lbV9leF9mdW5jczsKLSsJCWQyaV9LUkI1X0NIRUNLU1VNOwotKwkJQVNOMV9pdGVtX2R1cDsKLSsJCVg1MDlfaXQ7Ci0rCQlCTl9tb2RfYWRkOwotKwkJS1JCNV9BVVRIREFUQV9mcmVlOwotKwkJX29zc2xfb2xkX2Rlc19jYmNfY2tzdW07Ci0rCQlBU04xX2l0ZW1fdmVyaWZ5OwotKwkJQ1JZUFRPX3NldF9tZW1fZXhfZnVuY3Rpb25zOwotKwkJRUNfUE9JTlRfZ2V0X0pwcm9qZWN0aXZlX2Nvb3JkaW5hdGVzX0dGcDsKLSsJCUVDX1BPSU5UX2dldF9KcHJval9jb29yZHNfR0ZwOwotKwkJWkxPTkdfaXQ7Ci0rCQlDUllQVE9fZ2V0X2xvY2tlZF9tZW1fZXhfZnVuY3Rpb25zOwotKwkJQ1JZUFRPX2dldF9sb2NrZWRfbWVtX2V4X2Z1bmNzOwotKwkJQVNOMV9USU1FX2NoZWNrOwotKwkJVUlfZ2V0MF91c2VyX2RhdGE7Ci0rCQlITUFDX0NUWF9jbGVhbnVwOwotKwkJRFNBX3VwX3JlZjsKLSsJCV9vc3NsX29sZF9kZXNfZWRlM19jZmI2NF9lbmNyeXB0OwotKwkJX29zc2xfb2Rlc19lZGUzX2NmYjY0X2VuY3J5cHQ7Ci0rCQlBU04xX0JNUFNUUklOR19pdDsKLSsJCUFTTjFfdGFnMmJpdDsKLSsJCVVJX21ldGhvZF9zZXRfZmx1c2hlcjsKLSsJCVg1MDlfb2NzcGlkX3ByaW50OwotKwkJS1JCNV9FTkNEQVRBX2l0OwotKwkJRU5HSU5FX2dldF9sb2FkX3B1YmtleV9mdW5jdGlvbjsKLSsJCVVJX2FkZF91c2VyX2RhdGE7Ci0rCQlPQ1NQX1JFUVVFU1RfZGVsZXRlX2V4dDsKLSsJCVVJX2dldF9tZXRob2Q7Ci0rCQlPQ1NQX09ORVJFUV9mcmVlOwotKwkJQVNOMV9QUklOVEFCTEVTVFJJTkdfaXQ7Ci0rCQlYNTA5X0NSTF9zZXRfbmV4dFVwZGF0ZTsKLSsJCU9DU1BfUkVRVUVTVF9pdDsKLSsJCU9DU1BfQkFTSUNSRVNQX2l0OwotKwkJQUVTX2VjYl9lbmNyeXB0OwotKwkJQk5fbW9kX3NxcjsKLSsJCU5FVFNDQVBFX0NFUlRfU0VRVUVOQ0VfaXQ7Ci0rCQlHRU5FUkFMX05BTUVTX2l0OwotKwkJQVVUSE9SSVRZX0lORk9fQUNDRVNTX2l0OwotKwkJQVNOMV9GQk9PTEVBTl9pdDsKLSsJCVVJX3NldF9leF9kYXRhOwotKwkJX29zc2xfb2xkX2Rlc19zdHJpbmdfdG9fa2V5OwotKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9SU0E7Ci0rCQlkMmlfS1JCNV9QUklOQ05BTUU7Ci0rCQlPQ1NQX1JFU1BCWVRFU19pdDsKLSsJCVg1MDlfQ0lORl9pdDsKLSsJCUVOR0lORV91bnJlZ2lzdGVyX2RpZ2VzdHM7Ci0rCQlkMmlfRURJUEFSVFlOQU1FOwotKwkJZDJpX09DU1BfU0VSVklDRUxPQzsKLSsJCUVOR0lORV9nZXRfZGlnZXN0czsKLSsJCV9vc3NsX29sZF9kZXNfc2V0X29kZF9wYXJpdHk7Ci0rCQlPQ1NQX1JFU1BEQVRBX2ZyZWU7Ci0rCQlkMmlfS1JCNV9USUNLRVQ7Ci0rCQlPVEhFUk5BTUVfaXQ7Ci0rCQlFVlBfTURfQ1RYX2NsZWFudXA7Ci0rCQlkMmlfQVNOMV9HRU5FUkFMU1RSSU5HOwotKwkJWDUwOV9DUkxfc2V0X3ZlcnNpb247Ci0rCQlCTl9tb2Rfc3ViOwotKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHRfYnlfTklEOwotKwkJRU5HSU5FX2dldF9leF9uZXdfaW5kZXg7Ci0rCQlPQ1NQX1JFUVVFU1RfZnJlZTsKLSsJCU9DU1BfUkVRVUVTVF9hZGQxX2V4dF9pMmQ7Ci0rCQlYNTA5X1ZBTF9pdDsKLSsJCUVDX1BPSU5Uc19tYWtlX2FmZmluZTsKLSsJCUVDX1BPSU5UX211bDsKLSsJCVg1MDlWM19FWFRfYWRkX25jb25mOwotKwkJWDUwOV9UUlVTVF9zZXQ7Ci0rCQlYNTA5X0NSTF9hZGQxX2V4dF9pMmQ7Ci0rCQlfb3NzbF9vbGRfZGVzX2ZjcnlwdDsKLSsJCURJU1BMQVlURVhUX2l0OwotKwkJWDUwOV9DUkxfc2V0X2xhc3RVcGRhdGU7Ci0rCQlPQ1NQX0JBU0lDUkVTUF9mcmVlOwotKwkJT0NTUF9CQVNJQ1JFU1BfYWRkMV9leHRfaTJkOwotKwkJZDJpX0tSQjVfQVVUSEVOVEJPRFk7Ci0rCQlDUllQVE9fc2V0X2V4X2RhdGFfaW1wbGVtZW50YXRpb247Ci0rCQlDUllQVE9fc2V0X2V4X2RhdGFfaW1wbDsKLSsJCUtSQjVfRU5DREFUQV9uZXc7Ci0rCQlEU09fdXBfcmVmOwotKwkJT0NTUF9jcmxfcmVhc29uX3N0cjsKLSsJCVVJX2dldDBfcmVzdWx0X3N0cmluZzsKLSsJCUFTTjFfR0VORVJBTFNUUklOR19uZXc7Ci0rCQlYNTA5X1NJR19pdDsKLSsJCUVSUl9zZXRfaW1wbGVtZW50YXRpb247Ci0rCQlFUlJfbG9hZF9FQ19zdHJpbmdzOwotKwkJVUlfZ2V0MF9hY3Rpb25fc3RyaW5nOwotKwkJT0NTUF9PTkVSRVFfZ2V0X2V4dDsKLSsJCUVDX1BPSU5UX21ldGhvZF9vZjsKLSsJCWkyZF9LUkI1X0FQUkVRQk9EWTsKLSsJCV9vc3NsX29sZF9kZXNfZWNiM19lbmNyeXB0OwotKwkJQ1JZUFRPX2dldF9tZW1fZXhfZnVuY3Rpb25zOwotKwkJRU5HSU5FX2dldF9leF9kYXRhOwotKwkJVUlfZGVzdHJveV9tZXRob2Q7Ci0rCQlBU04xX2l0ZW1faTJkX2JpbzsKLSsJCU9DU1BfT05FUkVRX2dldF9leHRfYnlfT0JKOwotKwkJQVNOMV9wcmltaXRpdmVfbmV3OwotKwkJQVNOMV9QUklOVEFCTEVfaXQ7Ci0rCQlFVlBfYWVzXzE5Ml9lY2I7Ci0rCQlPQ1NQX1NJR05BVFVSRV9uZXc7Ci0rCQlMT05HX2l0OwotKwkJQVNOMV9WSVNJQkxFU1RSSU5HX2l0OwotKwkJT0NTUF9TSU5HTEVSRVNQX2FkZDFfZXh0X2kyZDsKLSsJCWQyaV9PQ1NQX0NFUlRJRDsKLSsJCUFTTjFfaXRlbV9kMmlfZnA7Ci0rCQlDUkxfRElTVF9QT0lOVFNfaXQ7Ci0rCQlHRU5FUkFMX05BTUVfcHJpbnQ7Ci0rCQlPQ1NQX1NJTkdMRVJFU1BfZGVsZXRlX2V4dDsKLSsJCVBLQ1MxMl9TQUZFQkFHU19pdDsKLSsJCWQyaV9PQ1NQX1NJR05BVFVSRTsKLSsJCU9DU1BfcmVxdWVzdF9hZGQxX25vbmNlOwotKwkJRU5HSU5FX3NldF9jbWRfZGVmbnM7Ci0rCQlPQ1NQX1NFUlZJQ0VMT0NfZnJlZTsKLSsJCUVDX0dST1VQX2ZyZWU7Ci0rCQlBU04xX0JJVF9TVFJJTkdfaXQ7Ci0rCQlYNTA5X1JFUV9pdDsKLSsJCV9vc3NsX29sZF9kZXNfY2JjX2VuY3J5cHQ7Ci0rCQlFUlJfdW5sb2FkX3N0cmluZ3M7Ci0rCQlQS0NTN19TSUdOX0VOVkVMT1BFX2l0OwotKwkJRURJUEFSVFlOQU1FX2ZyZWU7Ci0rCQlPQ1NQX1JFUUlORk9fZnJlZTsKLSsJCUVDX0dST1VQX25ld19jdXJ2ZV9HRnA7Ci0rCQlPQ1NQX1JFUVVFU1RfZ2V0MV9leHRfZDJpOwotKwkJUEtDUzEyX2l0ZW1fcGFja19zYWZlYmFnOwotKwkJYXNuMV9leF9jMmk7Ci0rCQlFTkdJTkVfcmVnaXN0ZXJfZGlnZXN0czsKLSsJCWkyZF9PQ1NQX1JFVk9LRURJTkZPOwotKwkJYXNuMV9lbmNfcmVzdG9yZTsKLSsJCVVJX2ZyZWU7Ci0rCQlVSV9uZXdfbWV0aG9kOwotKwkJRVZQX0VuY3J5cHRJbml0X2V4OwotKwkJWDUwOV9wdWJrZXlfZGlnZXN0OwotKwkJRUNfUE9JTlRfaW52ZXJ0OwotKwkJT0NTUF9iYXNpY19zaWduOwotKwkJaTJkX09DU1BfUkVTUElEOwotKwkJT0NTUF9jaGVja19ub25jZTsKLSsJCUVOR0lORV9jdHJsX2NtZDsKLSsJCWQyaV9LUkI1X0VOQ0tFWTsKLSsJCU9DU1BfcGFyc2VfdXJsOwotKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHQ7Ci0rCQlPQ1NQX0NSTElEX2ZyZWU7Ci0rCQlPQ1NQX0JBU0lDUkVTUF9nZXQxX2V4dF9kMmk7Ci0rCQlSU0FQcml2YXRlS2V5X2l0OwotKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9ESDsKLSsJCWkyZF9FRElQQVJUWU5BTUU7Ci0rCQlFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGcDsKLSsJCUVDX1BPSU5UX2dldF9hZmZpbmVfY29vcmRzX0dGcDsKLSsJCU9DU1BfQ1JMSURfbmV3OwotKwkJRU5HSU5FX2dldF9mbGFnczsKLSsJCU9DU1BfT05FUkVRX2l0OwotKwkJVUlfcHJvY2VzczsKLSsJCUFTTjFfSU5URUdFUl9pdDsKLSsJCUVWUF9DaXBoZXJJbml0X2V4OwotKwkJVUlfZ2V0X3N0cmluZ190eXBlOwotKwkJRU5HSU5FX3VucmVnaXN0ZXJfREg7Ci0rCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX0RTQTsKLSsJCU9DU1BfT05FUkVRX2dldF9leHRfYnlfY3JpdGljYWw7Ci0rCQlibl9kdXBfZXhwYW5kOwotKwkJT0NTUF9jZXJ0X2lkX25ldzsKLSsJCUJBU0lDX0NPTlNUUkFJTlRTX2l0OwotKwkJQk5fbW9kX2FkZF9xdWljazsKLSsJCUVDX1BPSU5UX25ldzsKLSsJCUVWUF9NRF9DVFhfZGVzdHJveTsKLSsJCU9DU1BfUkVTUEJZVEVTX2ZyZWU7Ci0rCQlFVlBfYWVzXzEyOF9jYmM7Ci0rCQlPQ1NQX1NJTkdMRVJFU1BfZ2V0MV9leHRfZDJpOwotKwkJRUNfUE9JTlRfZnJlZTsKLSsJCURIX3VwX3JlZjsKLSsJCVg1MDlfTkFNRV9FTlRSWV9pdDsKLSsJCVVJX2dldF9leF9uZXdfaW5kZXg7Ci0rCQlCTl9tb2Rfc3ViX3F1aWNrOwotKwkJT0NTUF9PTkVSRVFfYWRkX2V4dDsKLSsJCU9DU1BfcmVxdWVzdF9zaWduOwotKwkJRVZQX0RpZ2VzdEZpbmFsX2V4OwotKwkJRU5HSU5FX3NldF9kaWdlc3RzOwotKwkJT0NTUF9pZF9pc3N1ZXJfY21wOwotKwkJT0JKX05BTUVfZG9fYWxsOwotKwkJRUNfUE9JTlRzX211bDsKLSsJCUVOR0lORV9yZWdpc3Rlcl9jb21wbGV0ZTsKLSsJCVg1MDlWM19FWFRfbmNvbmZfbmlkOwotKwkJQVNOMV9TRVFVRU5DRV9pdDsKLSsJCVVJX3NldF9kZWZhdWx0X21ldGhvZDsKLSsJCVJBTkRfcXVlcnlfZWdkX2J5dGVzOwotKwkJVUlfbWV0aG9kX2dldF93cml0ZXI7Ci0rCQlVSV9PcGVuU1NMOwotKwkJUEVNX2RlZl9jYWxsYmFjazsKLSsJCUVOR0lORV9jbGVhbnVwOwotKwkJRElTVF9QT0lOVF9pdDsKLSsJCU9DU1BfU0lOR0xFUkVTUF9pdDsKLSsJCWQyaV9LUkI1X1RLVEJPRFk7Ci0rCQlFQ19QT0lOVF9jbXA7Ci0rCQlPQ1NQX1JFVk9LRURJTkZPX25ldzsKLSsJCWkyZF9PQ1NQX0NFUlRTVEFUVVM7Ci0rCQlPQ1NQX2Jhc2ljX2FkZDFfbm9uY2U7Ci0rCQlBU04xX2l0ZW1fZXhfZDJpOwotKwkJQk5fbW9kX2xzaGlmdDFfcXVpY2s7Ci0rCQlVSV9zZXRfbWV0aG9kOwotKwkJT0NTUF9pZF9nZXQwX2luZm87Ci0rCQlCTl9tb2Rfc3FydDsKLSsJCUVDX0dST1VQX2NvcHk7Ci0rCQlLUkI1X0VOQ0RBVEFfZnJlZTsKLSsJCV9vc3NsX29sZF9kZXNfY2ZiX2VuY3J5cHQ7Ci0rCQlPQ1NQX1NJTkdMRVJFU1BfZ2V0X2V4dF9ieV9PQko7Ci0rCQlPQ1NQX2NlcnRfdG9faWQ7Ci0rCQlPQ1NQX1JFU1BJRF9uZXc7Ci0rCQlPQ1NQX1JFU1BEQVRBX2l0OwotKwkJZDJpX09DU1BfUkVTUERBVEE7Ci0rCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX2NvbXBsZXRlOwotKwkJT0NTUF9jaGVja192YWxpZGl0eTsKLSsJCVBLQ1MxMl9CQUdTX2l0OwotKwkJT0NTUF91cmxfc3ZjbG9jX25ldzsKLSsJCUFTTjFfdGVtcGxhdGVfZnJlZTsKLSsJCU9DU1BfU0lOR0xFUkVTUF9hZGRfZXh0OwotKwkJS1JCNV9BVVRIRU5UQk9EWV9pdDsKLSsJCVg1MDlfc3VwcG9ydGVkX2V4dGVuc2lvbjsKLSsJCWkyZF9LUkI1X0FVVEhEQVRBOwotKwkJVUlfbWV0aG9kX2dldF9vcGVuZXI7Ci0rCQlFTkdJTkVfc2V0X2V4X2RhdGE7Ci0rCQlPQ1NQX1JFUVVFU1RfcHJpbnQ7Ci0rCQlDQklHTlVNX2l0OwotKwkJS1JCNV9USUNLRVRfbmV3OwotKwkJS1JCNV9BUFJFUV9uZXc7Ci0rCQlFQ19HUk9VUF9nZXRfY3VydmVfR0ZwOwotKwkJS1JCNV9FTkNLRVlfbmV3OwotKwkJQVNOMV90ZW1wbGF0ZV9kMmk7Ci0rCQlfb3NzbF9vbGRfZGVzX3F1YWRfY2tzdW07Ci0rCQlPQ1NQX3NpbmdsZV9nZXQwX3N0YXR1czsKLSsJCUJOX3N3YXA7Ci0rCQlQT0xJQ1lJTkZPX2l0OwotKwkJRU5HSU5FX3NldF9kZXN0cm95X2Z1bmN0aW9uOwotKwkJYXNuMV9lbmNfZnJlZTsKLSsJCU9DU1BfUkVTUElEX2l0OwotKwkJRUNfR1JPVVBfbmV3OwotKwkJRVZQX2Flc18yNTZfY2JjOwotKwkJaTJkX0tSQjVfUFJJTkNOQU1FOwotKwkJX29zc2xfb2xkX2Rlc19lbmNyeXB0MjsKLSsJCV9vc3NsX29sZF9kZXNfZW5jcnlwdDM7Ci0rCQlQS0NTOF9QUklWX0tFWV9JTkZPX2l0OwotKwkJT0NTUF9SRVFJTkZPX2l0OwotKwkJUEJFUEFSQU1faXQ7Ci0rCQlLUkI1X0FVVEhFTlRCT0RZX25ldzsKLSsJCVg1MDlfQ1JMX2FkZDBfcmV2b2tlZDsKLSsJCUVESVBBUlRZTkFNRV9pdDsKLSsJCU5FVFNDQVBFX1NQS0lfaXQ7Ci0rCQlVSV9nZXQwX3Rlc3Rfc3RyaW5nOwotKwkJRU5HSU5FX2dldF9jaXBoZXJfZW5naW5lOwotKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9jaXBoZXJzOwotKwkJRUNfUE9JTlRfY29weTsKLSsJCUJOX2tyb25lY2tlcjsKLSsJCV9vc3NsX29sZF9kZXNfZWRlM19vZmI2NF9lbmNyeXB0OwotKwkJX29zc2xfb2Rlc19lZGUzX29mYjY0X2VuY3J5cHQ7Ci0rCQlVSV9tZXRob2RfZ2V0X3JlYWRlcjsKLSsJCU9DU1BfQkFTSUNSRVNQX2dldF9leHRfY291bnQ7Ci0rCQlBU04xX0VOVU1FUkFURURfaXQ7Ci0rCQlVSV9zZXRfcmVzdWx0OwotKwkJaTJkX0tSQjVfVElDS0VUOwotKwkJWDUwOV9wcmludF9leF9mcDsKLSsJCUVWUF9DSVBIRVJfQ1RYX3NldF9wYWRkaW5nOwotKwkJZDJpX09DU1BfUkVTUE9OU0U7Ci0rCQlBU04xX1VUQ1RJTUVfaXQ7Ci0rCQlfb3NzbF9vbGRfZGVzX2VuY193cml0ZTsKLSsJCU9DU1BfUkVTUE9OU0VfbmV3OwotKwkJQUVTX3NldF9lbmNyeXB0X2tleTsKLSsJCU9DU1BfcmVzcF9jb3VudDsKLSsJCUtSQjVfQ0hFQ0tTVU1fbmV3OwotKwkJRU5HSU5FX2xvYWRfY3N3aWZ0OwotKwkJT0NTUF9vbmVyZXFfZ2V0MF9pZDsKLSsJCUVOR0lORV9zZXRfZGVmYXVsdF9jaXBoZXJzOwotKwkJTk9USUNFUkVGX2l0OwotKwkJWDUwOVYzX0VYVF9DUkxfYWRkX25jb25mOwotKwkJT0NTUF9SRVZPS0VESU5GT19pdDsKLSsJCUFFU19lbmNyeXB0OwotKwkJT0NTUF9SRVFVRVNUX25ldzsKLSsJCUFTTjFfQU5ZX2l0OwotKwkJQ1JZUFRPX2V4X2RhdGFfbmV3X2NsYXNzOwotKwkJX29zc2xfb2xkX2Rlc19uY2JjX2VuY3J5cHQ7Ci0rCQlpMmRfS1JCNV9US1RCT0RZOwotKwkJRUNfUE9JTlRfY2xlYXJfZnJlZTsKLSsJCUFFU19kZWNyeXB0OwotKwkJYXNuMV9lbmNfaW5pdDsKLSsJCVVJX2dldF9yZXN1bHRfbWF4c2l6ZTsKLSsJCU9DU1BfQ0VSVElEX25ldzsKLSsJCUVOR0lORV91bnJlZ2lzdGVyX1JBTkQ7Ci0rCQlVSV9tZXRob2RfZ2V0X2Nsb3NlcjsKLSsJCWQyaV9LUkI1X0VOQ0RBVEE7Ci0rCQlPQ1NQX3JlcXVlc3Rfb25lcmVxX2NvdW50OwotKwkJT0NTUF9iYXNpY192ZXJpZnk7Ci0rCQlLUkI1X0FVVEhFTlRCT0RZX2ZyZWU7Ci0rCQlBU04xX2l0ZW1fZDJpOwotKwkJQVNOMV9wcmltaXRpdmVfZnJlZTsKLSsJCWkyZF9FWFRFTkRFRF9LRVlfVVNBR0U7Ci0rCQlpMmRfT0NTUF9TSUdOQVRVUkU7Ci0rCQlhc24xX2VuY19zYXZlOwotKwkJRU5HSU5FX2xvYWRfbnVyb247Ci0rCQlfb3NzbF9vbGRfZGVzX3BjYmNfZW5jcnlwdDsKLSsJCVBLQ1MxMl9NQUNfREFUQV9pdDsKLSsJCU9DU1BfYWNjZXB0X3Jlc3BvbnNlc19uZXc7Ci0rCQlhc24xX2RvX2xvY2s7Ci0rCQlQS0NTN19BVFRSX1ZFUklGWV9pdDsKLSsJCUtSQjVfQVBSRVFCT0RZX2l0OwotKwkJaTJkX09DU1BfU0lOR0xFUkVTUDsKLSsJCUFTTjFfaXRlbV9leF9uZXc7Ci0rCQlVSV9hZGRfdmVyaWZ5X3N0cmluZzsKLSsJCV9vc3NsX29sZF9kZXNfc2V0X2tleTsKLSsJCUtSQjVfUFJJTkNOQU1FX2l0OwotKwkJRVZQX0RlY3J5cHRJbml0X2V4OwotKwkJaTJkX09DU1BfQ0VSVElEOwotKwkJQVNOMV9pdGVtX2QyaV9iaW87Ci0rCQlFQ19QT0lOVF9kYmw7Ci0rCQlhc24xX2dldF9jaG9pY2Vfc2VsZWN0b3I7Ci0rCQlpMmRfS1JCNV9DSEVDS1NVTTsKLSsJCUVOR0lORV9zZXRfdGFibGVfZmxhZ3M7Ci0rCQlBRVNfb3B0aW9uczsKLSsJCUVOR0lORV9sb2FkX2NoaWw7Ci0rCQlPQ1NQX2lkX2NtcDsKLSsJCU9DU1BfQkFTSUNSRVNQX25ldzsKLSsJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2J5X05JRDsKLSsJCUtSQjVfQVBSRVFfaXQ7Ci0rCQlFTkdJTkVfZ2V0X2Rlc3Ryb3lfZnVuY3Rpb247Ci0rCQlDT05GX3NldF9uY29uZjsKLSsJCUFTTjFfUFJJTlRBQkxFX2ZyZWU7Ci0rCQlPQ1NQX0JBU0lDUkVTUF9nZXRfZXh0X2J5X05JRDsKLSsJCURJU1RfUE9JTlRfTkFNRV9pdDsKLSsJCVg1MDlWM19leHRlbnNpb25zX3ByaW50OwotKwkJX29zc2xfb2xkX2Rlc19jZmI2NF9lbmNyeXB0OwotKwkJWDUwOV9SRVZPS0VEX2FkZDFfZXh0X2kyZDsKLSsJCV9vc3NsX29sZF9kZXNfb2ZiX2VuY3J5cHQ7Ci0rCQlLUkI1X1RLVEJPRFlfbmV3OwotKwkJQVNOMV9PQ1RFVF9TVFJJTkdfaXQ7Ci0rCQlFUlJfbG9hZF9VSV9zdHJpbmdzOwotKwkJaTJkX0tSQjVfRU5DS0VZOwotKwkJQVNOMV90ZW1wbGF0ZV9uZXc7Ci0rCQlPQ1NQX1NJR05BVFVSRV9mcmVlOwotKwkJQVNOMV9pdGVtX2kyZF9mcDsKLSsJCUtSQjVfUFJJTkNOQU1FX2ZyZWU7Ci0rCQlQS0NTN19SRUNJUF9JTkZPX2l0OwotKwkJRVhURU5ERURfS0VZX1VTQUdFX2l0OwotKwkJRUNfR0ZwX3NpbXBsZV9tZXRob2Q7Ci0rCQlFQ19HUk9VUF9wcmVjb21wdXRlX211bHQ7Ci0rCQlPQ1NQX3JlcXVlc3Rfb25lcmVxX2dldDA7Ci0rCQlVSV9tZXRob2Rfc2V0X3dyaXRlcjsKLSsJCUtSQjVfQVVUSEVOVF9uZXc7Ci0rCQlYNTA5X0NSTF9JTkZPX2l0OwotKwkJRFNPX3NldF9uYW1lX2NvbnZlcnRlcjsKLSsJCUFFU19zZXRfZGVjcnlwdF9rZXk7Ci0rCQlQS0NTN19ESUdFU1RfaXQ7Ci0rCQlQS0NTMTJfeDUwOTJjZXJ0YmFnOwotKwkJRVZQX0RpZ2VzdEluaXRfZXg7Ci0rCQlpMmFfQUNDRVNTX0RFU0NSSVBUSU9OOwotKwkJT0NTUF9SRVNQT05TRV9pdDsKLSsJCVBLQ1M3X0VOQ19DT05URU5UX2l0OwotKwkJT0NTUF9yZXF1ZXN0X2FkZDBfaWQ7Ci0rCQlFQ19QT0lOVF9tYWtlX2FmZmluZTsKLSsJCURTT19nZXRfZmlsZW5hbWU7Ci0rCQlPQ1NQX0NFUlRTVEFUVVNfaXQ7Ci0rCQlPQ1NQX3JlcXVlc3RfYWRkMV9jZXJ0OwotKwkJVUlfZ2V0MF9vdXRwdXRfc3RyaW5nOwotKwkJVUlfZHVwX3ZlcmlmeV9zdHJpbmc7Ci0rCQlCTl9tb2RfbHNoaWZ0OwotKwkJS1JCNV9BVVRIREFUQV9pdDsKLSsJCWFzbjFfc2V0X2Nob2ljZV9zZWxlY3RvcjsKLSsJCU9DU1BfYmFzaWNfYWRkMV9zdGF0dXM7Ci0rCQlPQ1NQX1JFU1BJRF9mcmVlOwotKwkJYXNuMV9nZXRfZmllbGRfcHRyOwotKwkJVUlfYWRkX2lucHV0X3N0cmluZzsKLSsJCU9DU1BfQ1JMSURfaXQ7Ci0rCQlpMmRfS1JCNV9BVVRIRU5UQk9EWTsKLSsJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2NvdW50OwotKwkJRU5HSU5FX2xvYWRfYXRhbGxhOwotKwkJWDUwOV9OQU1FX2l0OwotKwkJVVNFUk5PVElDRV9pdDsKLSsJCU9DU1BfUkVRSU5GT19uZXc7Ci0rCQlPQ1NQX0JBU0lDUkVTUF9nZXRfZXh0OwotKwkJQ1JZUFRPX2dldF9leF9kYXRhX2ltcGxlbWVudGF0aW9uOwotKwkJQ1JZUFRPX2dldF9leF9kYXRhX2ltcGw7Ci0rCQlBU04xX2l0ZW1fcGFjazsKLSsJCWkyZF9LUkI1X0VOQ0RBVEE7Ci0rCQlYNTA5X1BVUlBPU0Vfc2V0OwotKwkJWDUwOV9SRVFfSU5GT19pdDsKLSsJCVVJX21ldGhvZF9zZXRfb3BlbmVyOwotKwkJQVNOMV9pdGVtX2V4X2ZyZWU7Ci0rCQlBU04xX0JPT0xFQU5faXQ7Ci0rCQlFTkdJTkVfZ2V0X3RhYmxlX2ZsYWdzOwotKwkJVUlfY3JlYXRlX21ldGhvZDsKLSsJCU9DU1BfT05FUkVRX2FkZDFfZXh0X2kyZDsKLSsJCV9zaGFkb3dfREVTX2NoZWNrX2tleTsKLSsJCWQyaV9PQ1NQX1JFUUlORk87Ci0rCQlVSV9hZGRfaW5mb19zdHJpbmc7Ci0rCQlVSV9nZXRfcmVzdWx0X21pbnNpemU7Ci0rCQlBU04xX05VTExfaXQ7Ci0rCQlCTl9tb2RfbHNoaWZ0MTsKLSsJCWQyaV9PQ1NQX09ORVJFUTsKLSsJCU9DU1BfT05FUkVRX25ldzsKLSsJCUtSQjVfVElDS0VUX2l0OwotKwkJRVZQX2Flc18xOTJfY2JjOwotKwkJS1JCNV9USUNLRVRfZnJlZTsKLSsJCVVJX25ldzsKLSsJCU9DU1BfcmVzcG9uc2VfY3JlYXRlOwotKwkJX29zc2xfb2xkX2Rlc194Y2JjX2VuY3J5cHQ7Ci0rCQlQS0NTN19pdDsKLSsJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2J5X2NyaXRpY2FsOwotKwkJT0NTUF9SRVFVRVNUX2dldF9leHRfYnlfY3JpdDsKLSsJCUVOR0lORV9zZXRfZmxhZ3M7Ci0rCQlfb3NzbF9vbGRfZGVzX2VjYl9lbmNyeXB0OwotKwkJT0NTUF9yZXNwb25zZV9nZXQxX2Jhc2ljOwotKwkJRVZQX0RpZ2VzdDsKLSsJCU9DU1BfT05FUkVRX2RlbGV0ZV9leHQ7Ci0rCQlBU04xX1RCT09MRUFOX2l0OwotKwkJQVNOMV9pdGVtX25ldzsKLSsJCUFTTjFfVElNRV90b19nZW5lcmFsaXplZHRpbWU7Ci0rCQlCSUdOVU1faXQ7Ci0rCQlBRVNfY2JjX2VuY3J5cHQ7Ci0rCQlFTkdJTkVfZ2V0X2xvYWRfcHJpdmtleV9mdW5jdGlvbjsKLSsJCUVOR0lORV9nZXRfbG9hZF9wcml2a2V5X2ZuOwotKwkJT0NTUF9SRVNQT05TRV9mcmVlOwotKwkJVUlfbWV0aG9kX3NldF9yZWFkZXI7Ci0rCQlpMmRfQVNOMV9UNjFTVFJJTkc7Ci0rCQlFQ19QT0lOVF9zZXRfdG9faW5maW5pdHk7Ci0rCQlFUlJfbG9hZF9PQ1NQX3N0cmluZ3M7Ci0rCQlFQ19QT0lOVF9wb2ludDJvY3Q7Ci0rCQlLUkI1X0FQUkVRX2ZyZWU7Ci0rCQlBU04xX09CSkVDVF9pdDsKLSsJCU9DU1BfY3JsSURfbmV3OwotKwkJT0NTUF9jcmxJRDJfbmV3OwotKwkJQ09ORl9tb2R1bGVzX2xvYWRfZmlsZTsKLSsJCUNPTkZfaW1vZHVsZV9zZXRfdXNyX2RhdGE7Ci0rCQlFTkdJTkVfc2V0X2RlZmF1bHRfc3RyaW5nOwotKwkJQ09ORl9tb2R1bGVfZ2V0X3Vzcl9kYXRhOwotKwkJQVNOMV9hZGRfb2lkX21vZHVsZTsKLSsJCUNPTkZfbW9kdWxlc19maW5pc2g7Ci0rCQlPUEVOU1NMX2NvbmZpZzsKLSsJCUNPTkZfbW9kdWxlc191bmxvYWQ7Ci0rCQlDT05GX2ltb2R1bGVfZ2V0X3ZhbHVlOwotKwkJQ09ORl9tb2R1bGVfc2V0X3Vzcl9kYXRhOwotKwkJQ09ORl9wYXJzZV9saXN0OwotKwkJQ09ORl9tb2R1bGVfYWRkOwotKwkJQ09ORl9nZXQxX2RlZmF1bHRfY29uZmlnX2ZpbGU7Ci0rCQlDT05GX2ltb2R1bGVfZ2V0X2ZsYWdzOwotKwkJQ09ORl9pbW9kdWxlX2dldF9tb2R1bGU7Ci0rCQlDT05GX21vZHVsZXNfbG9hZDsKLSsJCUNPTkZfaW1vZHVsZV9nZXRfbmFtZTsKLSsJCUVSUl9wZWVrX3RvcF9lcnJvcjsKLSsJCUNPTkZfaW1vZHVsZV9nZXRfdXNyX2RhdGE7Ci0rCQlDT05GX2ltb2R1bGVfc2V0X2ZsYWdzOwotKwkJRU5HSU5FX2FkZF9jb25mX21vZHVsZTsKLSsJCUVSUl9wZWVrX2xhc3RfZXJyb3JfbGluZTsKLSsJCUVSUl9wZWVrX2xhc3RfZXJyb3JfbGluZV9kYXRhOwotKwkJRVJSX3BlZWtfbGFzdF9lcnJvcjsKLSsJCURFU19yZWFkXzJwYXNzd29yZHM7Ci0rCQlERVNfcmVhZF9wYXNzd29yZDsKLSsJCVVJX1VUSUxfcmVhZF9wdzsKLSsJCVVJX1VUSUxfcmVhZF9wd19zdHJpbmc7Ci0rCQlFTkdJTkVfbG9hZF9hZXA7Ci0rCQlFTkdJTkVfbG9hZF9zdXJld2FyZTsKLSsJCU9QRU5TU0xfYWRkX2FsbF9hbGdvcml0aG1zX25vY29uZjsKLSsJCU9QRU5TU0xfYWRkX2FsbF9hbGdvX25vY29uZjsKLSsJCU9QRU5TU0xfYWRkX2FsbF9hbGdvcml0aG1zX2NvbmY7Ci0rCQlPUEVOU1NMX2FkZF9hbGxfYWxnb19jb25mOwotKwkJT1BFTlNTTF9sb2FkX2J1aWx0aW5fbW9kdWxlczsKLSsJCUFFU19vZmIxMjhfZW5jcnlwdDsKLSsJCUFFU19jdHIxMjhfZW5jcnlwdDsKLSsJCUFFU19jZmIxMjhfZW5jcnlwdDsKLSsJCUVOR0lORV9sb2FkXzQ3NThjY2E7Ci0rCQlfb3NzbF8wOTZfZGVzX3JhbmRvbV9zZWVkOwotKwkJRVZQX2Flc18yNTZfb2ZiOwotKwkJRVZQX2Flc18xOTJfb2ZiOwotKwkJRVZQX2Flc18xMjhfY2ZiMTI4OwotKwkJRVZQX2Flc18yNTZfY2ZiMTI4OwotKwkJRVZQX2Flc18xMjhfb2ZiOwotKwkJRVZQX2Flc18xOTJfY2ZiMTI4OwotKwkJQ09ORl9tb2R1bGVzX2ZyZWU7Ci0rCQlOQ09ORl9kZWZhdWx0OwotKwkJT1BFTlNTTF9ub19jb25maWc7Ci0rCQlOQ09ORl9XSU4zMjsKLSsJCUFTTjFfVU5JVkVSU0FMU1RSSU5HX25ldzsKLSsJCUVWUF9kZXNfZWRlX2VjYjsKLSsJCWkyZF9BU04xX1VOSVZFUlNBTFNUUklORzsKLSsJCUFTTjFfVU5JVkVSU0FMU1RSSU5HX2ZyZWU7Ci0rCQlBU04xX1VOSVZFUlNBTFNUUklOR19pdDsKLSsJCWQyaV9BU04xX1VOSVZFUlNBTFNUUklORzsKLSsJCUVWUF9kZXNfZWRlM19lY2I7Ci0rCQlYNTA5X1JFUV9wcmludF9leDsKLSsJCUVOR0lORV91cF9yZWY7Ci0rCQlCVUZfTUVNX2dyb3dfY2xlYW47Ci0rCQlDUllQVE9fcmVhbGxvY19jbGVhbjsKLSsJCUJVRl9zdHJsY2F0OwotKwkJQklPX2luZGVudDsKLSsJCUJVRl9zdHJsY3B5OwotKwkJT3BlblNTTERpZTsKLSsJCU9QRU5TU0xfY2xlYW5zZTsKLSsJCUVOR0lORV9zZXR1cF9ic2RfY3J5cHRvZGV2OwotKwkJRVJSX3JlbGVhc2VfZXJyX3N0YXRlX3RhYmxlOwotKwkJRVZQX2Flc18xMjhfY2ZiODsKLSsJCUZJUFNfY29ycnVwdF9yc2E7Ci0rCQlGSVBTX3NlbGZ0ZXN0X2RlczsKLSsJCUVWUF9hZXNfMTI4X2NmYjE7Ci0rCQlFVlBfYWVzXzE5Ml9jZmI4OwotKwkJRklQU19tb2RlX3NldDsKLSsJCUZJUFNfc2VsZnRlc3RfZHNhOwotKwkJRVZQX2Flc18yNTZfY2ZiODsKLSsJCUZJUFNfYWxsb3dfbWQ1OwotKwkJREVTX2VkZTNfY2ZiX2VuY3J5cHQ7Ci0rCQlFVlBfZGVzX2VkZTNfY2ZiODsKLSsJCUZJUFNfcmFuZF9zZWVkZWQ7Ci0rCQlBRVNfY2Zicl9lbmNyeXB0X2Jsb2NrOwotKwkJQUVTX2NmYjhfZW5jcnlwdDsKLSsJCUZJUFNfcmFuZF9zZWVkOwotKwkJRklQU19jb3JydXB0X2RlczsKLSsJCUVWUF9hZXNfMTkyX2NmYjE7Ci0rCQlGSVBTX3NlbGZ0ZXN0X2FlczsKLSsJCUZJUFNfc2V0X3Bybmdfa2V5OwotKwkJRVZQX2Rlc19jZmI4OwotKwkJRklQU19jb3JydXB0X2RzYTsKLSsJCUZJUFNfdGVzdF9tb2RlOwotKwkJRklQU19yYW5kX21ldGhvZDsKLSsJCUVWUF9hZXNfMjU2X2NmYjE7Ci0rCQlFUlJfbG9hZF9GSVBTX3N0cmluZ3M7Ci0rCQlGSVBTX2NvcnJ1cHRfYWVzOwotKwkJRklQU19zZWxmdGVzdF9zaGExOwotKwkJRklQU19zZWxmdGVzdF9yc2E7Ci0rCQlGSVBTX2NvcnJ1cHRfc2hhMTsKLSsJCUVWUF9kZXNfY2ZiMTsKLSsJCUZJUFNfZHNhX2NoZWNrOwotKwkJQUVTX2NmYjFfZW5jcnlwdDsKLSsJCUVWUF9kZXNfZWRlM19jZmIxOwotKwkJRklQU19yYW5kX2NoZWNrOwotKwkJRklQU19tZDVfYWxsb3dlZDsKLSsJCUZJUFNfbW9kZTsKLSsJCUZJUFNfc2VsZnRlc3RfZmFpbGVkOwotKwkJc2tfaXNfc29ydGVkOwotKwkJWDUwOV9jaGVja19jYTsKLSsJCUhNQUNfQ1RYX3NldF9mbGFnczsKLSsJCWQyaV9QUk9YWV9DRVJUX0lORk9fRVhURU5TSU9OOwotKwkJUFJPWFlfUE9MSUNZX2l0OwotKwkJaTJkX1BST1hZX1BPTElDWTsKLSsJCWkyZF9QUk9YWV9DRVJUX0lORk9fRVhURU5TSU9OOwotKwkJZDJpX1BST1hZX1BPTElDWTsKLSsJCVBST1hZX0NFUlRfSU5GT19FWFRFTlNJT05fbmV3OwotKwkJUFJPWFlfQ0VSVF9JTkZPX0VYVEVOU0lPTl9mcmVlOwotKwkJUFJPWFlfQ0VSVF9JTkZPX0VYVEVOU0lPTl9pdDsKLSsJCVBST1hZX1BPTElDWV9mcmVlOwotKwkJUFJPWFlfUE9MSUNZX25ldzsKLSsJCUJOX01PTlRfQ1RYX3NldF9sb2NrZWQ7Ci0rCQlGSVBTX3NlbGZ0ZXN0X3JuZzsKLSsJCUVWUF9zaGEzODQ7Ci0rCQlFVlBfc2hhNTEyOwotKwkJRVZQX3NoYTIyNDsKLSsJCUVWUF9zaGEyNTY7Ci0rCQlGSVBTX3NlbGZ0ZXN0X2htYWM7Ci0rCQlGSVBTX2NvcnJ1cHRfcm5nOwotKwkJQk5fbW9kX2V4cF9tb250X2NvbnN0dGltZTsKLSsJCVJTQV9YOTMxX2hhc2hfaWQ7Ci0rCQlSU0FfcGFkZGluZ19jaGVja19YOTMxOwotKwkJUlNBX3ZlcmlmeV9QS0NTMV9QU1M7Ci0rCQlSU0FfcGFkZGluZ19hZGRfWDkzMTsKLSsJCVJTQV9wYWRkaW5nX2FkZF9QS0NTMV9QU1M7Ci0rCQlQS0NTMV9NR0YxOwotKwkJQk5fWDkzMV9nZW5lcmF0ZV9YcHE7Ci0rCQlSU0FfWDkzMV9nZW5lcmF0ZV9rZXk7Ci0rCQlCTl9YOTMxX2Rlcml2ZV9wcmltZTsKLSsJCUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWU7Ci0rCQlSU0FfWDkzMV9kZXJpdmU7Ci0rCQlCSU9fbmV3X2RncmFtOwotKwkJQk5fZ2V0MF9uaXN0X3ByaW1lXzM4NDsKLSsJCUVSUl9zZXRfbWFyazsKLSsJCVg1MDlfU1RPUkVfQ1RYX3NldDBfY3JsczsKLSsJCUVOR0lORV9zZXRfU1RPUkU7Ci0rCQlFTkdJTkVfcmVnaXN0ZXJfRUNEU0E7Ci0rCQlTVE9SRV9tZXRoX3NldF9saXN0X3N0YXJ0X2ZuOwotKwkJU1RPUkVfbWV0aG9kX3NldF9saXN0X3N0YXJ0X2Z1bmN0aW9uOwotKwkJQk5fQkxJTkRJTkdfaW52ZXJ0X2V4OwotKwkJTkFNRV9DT05TVFJBSU5UU19mcmVlOwotKwkJU1RPUkVfQVRUUl9JTkZPX3NldF9udW1iZXI7Ci0rCQlCTl9CTElORElOR19nZXRfdGhyZWFkX2lkOwotKwkJWDUwOV9TVE9SRV9DVFhfc2V0MF9wYXJhbTsKLSsJCVBPTElDWV9NQVBQSU5HX2l0OwotKwkJU1RPUkVfcGFyc2VfYXR0cnNfc3RhcnQ7Ci0rCQlQT0xJQ1lfQ09OU1RSQUlOVFNfZnJlZTsKLSsJCUVWUF9QS0VZX2FkZDFfYXR0cl9ieV9OSUQ7Ci0rCQlCTl9uaXN0X21vZF8xOTI7Ci0rCQlFQ19HUk9VUF9nZXRfdHJpbm9taWFsX2Jhc2lzOwotKwkJU1RPUkVfc2V0X21ldGhvZDsKLSsJCUdFTkVSQUxfU1VCVFJFRV9mcmVlOwotKwkJTkFNRV9DT05TVFJBSU5UU19pdDsKLSsJCUVDREhfZ2V0X2RlZmF1bHRfbWV0aG9kOwotKwkJUEtDUzEyX2FkZF9zYWZlOwotKwkJRUNfS0VZX25ld19ieV9jdXJ2ZV9uYW1lOwotKwkJU1RPUkVfbWV0aF9nZXRfdXBkYXRlX3N0b3JlX2ZuOwotKwkJU1RPUkVfbWV0aG9kX2dldF91cGRhdGVfc3RvcmVfZnVuY3Rpb247Ci0rCQlFTkdJTkVfcmVnaXN0ZXJfRUNESDsKLSsJCVNIQTUxMl9VcGRhdGU7Ci0rCQlpMmRfRUNQcml2YXRlS2V5OwotKwkJQk5fZ2V0MF9uaXN0X3ByaW1lXzE5MjsKLSsJCVNUT1JFX21vZGlmeV9jZXJ0aWZpY2F0ZTsKLSsJCUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0YybTsKLSsJCUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRzX0dGMm07Ci0rCQlCTl9HRjJtX21vZF9leHBfYXJyOwotKwkJU1RPUkVfQVRUUl9JTkZPX21vZGlmeV9udW1iZXI7Ci0rCQlYNTA5X2tleWlkX2dldDA7Ci0rCQlFTkdJTkVfbG9hZF9nbXA7Ci0rCQlwaXRlbV9uZXc7Ci0rCQlCTl9HRjJtX21vZF9tdWxfYXJyOwotKwkJU1RPUkVfbGlzdF9wdWJsaWNfa2V5X2VuZHA7Ci0rCQlvMmlfRUNQdWJsaWNLZXk7Ci0rCQlFQ19LRVlfY29weTsKLSsJCUJJT19kdW1wX2ZwOwotKwkJWDUwOV9wb2xpY3lfbm9kZV9nZXQwX3BhcmVudDsKLSsJCUVDX0dST1VQX2NoZWNrX2Rpc2NyaW1pbmFudDsKLSsJCWkyb19FQ1B1YmxpY0tleTsKLSsJCUVDX0tFWV9wcmVjb21wdXRlX211bHQ7Ci0rCQlhMmlfSVBBRERSRVNTOwotKwkJU1RPUkVfbWV0aF9zZXRfaW5pdGlhbGlzZV9mbjsKLSsJCVNUT1JFX21ldGhvZF9zZXRfaW5pdGlhbGlzZV9mdW5jdGlvbjsKLSsJCVg1MDlfU1RPUkVfQ1RYX3NldF9kZXB0aDsKLSsJCVg1MDlfVkVSSUZZX1BBUkFNX2luaGVyaXQ7Ci0rCQlFQ19QT0lOVF9wb2ludDJibjsKLSsJCVNUT1JFX0FUVFJfSU5GT19zZXRfZG47Ci0rCQlYNTA5X3BvbGljeV90cmVlX2dldDBfcG9saWNpZXM7Ci0rCQlFQ19HUk9VUF9uZXdfY3VydmVfR0YybTsKLSsJCVNUT1JFX2Rlc3Ryb3lfbWV0aG9kOwotKwkJRU5HSU5FX3VucmVnaXN0ZXJfU1RPUkU7Ci0rCQlFVlBfUEtFWV9nZXQxX0VDX0tFWTsKLSsJCVNUT1JFX0FUVFJfSU5GT19nZXQwX251bWJlcjsKLSsJCUVOR0lORV9nZXRfZGVmYXVsdF9FQ0RIOwotKwkJRUNfS0VZX2dldF9jb252X2Zvcm07Ci0rCQlBU04xX09DVEVUX1NUUklOR19OREVGX2l0OwotKwkJU1RPUkVfZGVsZXRlX3B1YmxpY19rZXk7Ci0rCQlTVE9SRV9nZXRfcHVibGljX2tleTsKLSsJCVNUT1JFX21vZGlmeV9hcmJpdHJhcnk7Ci0rCQlFTkdJTkVfZ2V0X3N0YXRpY19zdGF0ZTsKLSsJCXBxdWV1ZV9pdGVyYXRvcjsKLSsJCUVDRFNBX1NJR19uZXc7Ci0rCQlPUEVOU1NMX0RJUl9lbmQ7Ci0rCQlCTl9HRjJtX21vZF9zcXI7Ci0rCQlFQ19QT0lOVF9ibjJwb2ludDsKLSsJCVg1MDlfVkVSSUZZX1BBUkFNX3NldF9kZXB0aDsKLSsJCUVDX0tFWV9zZXRfYXNuMV9mbGFnOwotKwkJU1RPUkVfZ2V0X21ldGhvZDsKLSsJCUVDX0tFWV9nZXRfa2V5X21ldGhvZF9kYXRhOwotKwkJRUNEU0Ffc2lnbl9leDsKLSsJCVNUT1JFX3BhcnNlX2F0dHJzX2VuZDsKLSsJCUVDX0dST1VQX2dldF9wb2ludF9jb252ZXJzaW9uX2Zvcm07Ci0rCQlFQ19HUk9VUF9nZXRfcG9pbnRfY29udl9mb3JtOwotKwkJU1RPUkVfbWV0aG9kX3NldF9zdG9yZV9mdW5jdGlvbjsKLSsJCVNUT1JFX0FUVFJfSU5GT19pbjsKLSsJCVBFTV9yZWFkX2Jpb19FQ1BLUGFyYW1ldGVyczsKLSsJCUVDX0dST1VQX2dldF9wZW50YW5vbWlhbF9iYXNpczsKLSsJCUVWUF9QS0VZX2FkZDFfYXR0cl9ieV90eHQ7Ci0rCQlCTl9CTElORElOR19zZXRfZmxhZ3M7Ci0rCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX3BvbGljaWVzOwotKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0MV9uYW1lOwotKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0X3B1cnBvc2U7Ci0rCQlTVE9SRV9nZXRfbnVtYmVyOwotKwkJRUNEU0Ffc2lnbl9zZXR1cDsKLSsJCUJOX0dGMm1fbW9kX3NvbHZlX3F1YWRfYXJyOwotKwkJRUNfS0VZX3VwX3JlZjsKLSsJCVBPTElDWV9NQVBQSU5HX2ZyZWU7Ci0rCQlCTl9HRjJtX21vZF9kaXY7Ci0rCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfZmxhZ3M7Ci0rCQlFQ19LRVlfZnJlZTsKLSsJCVNUT1JFX21ldGhfc2V0X2xpc3RfbmV4dF9mbjsKLSsJCVNUT1JFX21ldGhvZF9zZXRfbGlzdF9uZXh0X2Z1bmN0aW9uOwotKwkJUEVNX3dyaXRlX2Jpb19FQ1ByaXZhdGVLZXk7Ci0rCQlkMmlfRUNfUFVCS0VZOwotKwkJU1RPUkVfbWV0aF9nZXRfZ2VuZXJhdGVfZm47Ci0rCQlTVE9SRV9tZXRob2RfZ2V0X2dlbmVyYXRlX2Z1bmN0aW9uOwotKwkJU1RPUkVfbWV0aF9zZXRfbGlzdF9lbmRfZm47Ci0rCQlTVE9SRV9tZXRob2Rfc2V0X2xpc3RfZW5kX2Z1bmN0aW9uOwotKwkJcHF1ZXVlX3ByaW50OwotKwkJRUNfR1JPVVBfaGF2ZV9wcmVjb21wdXRlX211bHQ7Ci0rCQlFQ19LRVlfcHJpbnRfZnA7Ci0rCQlCTl9HRjJtX21vZF9hcnI7Ci0rCQlQRU1fd3JpdGVfYmlvX1g1MDlfQ0VSVF9QQUlSOwotKwkJRVZQX1BLRVlfY21wOwotKwkJWDUwOV9wb2xpY3lfbGV2ZWxfbm9kZV9jb3VudDsKLSsJCVNUT1JFX25ld19lbmdpbmU7Ci0rCQlTVE9SRV9saXN0X3B1YmxpY19rZXlfc3RhcnQ7Ci0rCQlYNTA5X1ZFUklGWV9QQVJBTV9uZXc7Ci0rCQlFQ0RIX2dldF9leF9kYXRhOwotKwkJRVZQX1BLRVlfZ2V0X2F0dHI7Ci0rCQlFQ0RTQV9kb19zaWduOwotKwkJRU5HSU5FX3VucmVnaXN0ZXJfRUNESDsKLSsJCUVDREhfT3BlblNTTDsKLSsJCUVDX0tFWV9zZXRfY29udl9mb3JtOwotKwkJRUNfUE9JTlRfZHVwOwotKwkJR0VORVJBTF9TVUJUUkVFX25ldzsKLSsJCVNUT1JFX2xpc3RfY3JsX2VuZHA7Ci0rCQlFQ19nZXRfYnVpbHRpbl9jdXJ2ZXM7Ci0rCQlYNTA5X3BvbGljeV9ub2RlX2dldDBfcXVhbGlmaWVyczsKLSsJCVg1MDlfcGN5X25vZGVfZ2V0MF9xdWFsaWZpZXJzOwotKwkJU1RPUkVfbGlzdF9jcmxfZW5kOwotKwkJRVZQX1BLRVlfc2V0MV9FQ19LRVk7Ci0rCQlCTl9HRjJtX21vZF9zcXJ0X2FycjsKLSsJCWkyZF9FQ1ByaXZhdGVLZXlfYmlvOwotKwkJRUNQS1BhcmFtZXRlcnNfcHJpbnRfZnA7Ci0rCQlwcXVldWVfZmluZDsKLSsJCUVDRFNBX1NJR19mcmVlOwotKwkJUEVNX3dyaXRlX2Jpb19FQ1BLUGFyYW1ldGVyczsKLSsJCVNUT1JFX21ldGhvZF9zZXRfY3RybF9mdW5jdGlvbjsKLSsJCVNUT1JFX2xpc3RfcHVibGljX2tleV9lbmQ7Ci0rCQlFQ19LRVlfc2V0X3ByaXZhdGVfa2V5OwotKwkJcHF1ZXVlX3BlZWs7Ci0rCQlTVE9SRV9nZXRfYXJiaXRyYXJ5OwotKwkJU1RPUkVfc3RvcmVfY3JsOwotKwkJWDUwOV9wb2xpY3lfbm9kZV9nZXQwX3BvbGljeTsKLSsJCVBLQ1MxMl9hZGRfc2FmZXM7Ci0rCQlCTl9CTElORElOR19jb252ZXJ0X2V4OwotKwkJWDUwOV9wb2xpY3lfdHJlZV9mcmVlOwotKwkJT1BFTlNTTF9pYTMyY2FwX2xvYzsKLSsJCUJOX0dGMm1fcG9seTJhcnI7Ci0rCQlTVE9SRV9jdHJsOwotKwkJU1RPUkVfQVRUUl9JTkZPX2NvbXBhcmU7Ci0rCQlCTl9nZXQwX25pc3RfcHJpbWVfMjI0OwotKwkJaTJkX0VDUGFyYW1ldGVyczsKLSsJCWkyZF9FQ1BLUGFyYW1ldGVyczsKLSsJCUJOX0dFTkNCX2NhbGw7Ci0rCQlkMmlfRUNQS1BhcmFtZXRlcnM7Ci0rCQlTVE9SRV9tZXRoX3NldF9nZW5lcmF0ZV9mbjsKLSsJCVNUT1JFX21ldGhvZF9zZXRfZ2VuZXJhdGVfZnVuY3Rpb247Ci0rCQlFTkdJTkVfc2V0X0VDREg7Ci0rCQlOQU1FX0NPTlNUUkFJTlRTX25ldzsKLSsJCVNIQTI1Nl9Jbml0OwotKwkJRUNfS0VZX2dldDBfcHVibGljX2tleTsKLSsJCVBFTV93cml0ZV9iaW9fRUNfUFVCS0VZOwotKwkJU1RPUkVfQVRUUl9JTkZPX3NldF9jc3RyOwotKwkJU1RPUkVfbGlzdF9jcmxfbmV4dDsKLSsJCVNUT1JFX0FUVFJfSU5GT19pbl9yYW5nZTsKLSsJCUVDUGFyYW1ldGVyc19wcmludDsKLSsJCVNUT1JFX21ldGhfc2V0X2RlbGV0ZV9mbjsKLSsJCVNUT1JFX21ldGhvZF9zZXRfZGVsZXRlX2Z1bmN0aW9uOwotKwkJU1RPUkVfbGlzdF9jZXJ0aWZpY2F0ZV9uZXh0OwotKwkJQVNOMV9nZW5lcmF0ZV9uY29uZjsKLSsJCUJVRl9tZW1kdXA7Ci0rCQlCTl9HRjJtX21vZF9tdWw7Ci0rCQlTVE9SRV9tZXRoX2dldF9saXN0X25leHRfZm47Ci0rCQlTVE9SRV9tZXRob2RfZ2V0X2xpc3RfbmV4dF9mdW5jdGlvbjsKLSsJCVNUT1JFX0FUVFJfSU5GT19nZXQwX2RuOwotKwkJU1RPUkVfbGlzdF9wcml2YXRlX2tleV9uZXh0OwotKwkJRUNfR1JPVVBfc2V0X3NlZWQ7Ci0rCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfdHJ1c3Q7Ci0rCQlTVE9SRV9BVFRSX0lORk9fZnJlZTsKLSsJCVNUT1JFX2dldF9wcml2YXRlX2tleTsKLSsJCUVWUF9QS0VZX2dldF9hdHRyX2NvdW50OwotKwkJU1RPUkVfQVRUUl9JTkZPX25ldzsKLSsJCUVDX0dST1VQX2dldF9jdXJ2ZV9HRjJtOwotKwkJU1RPUkVfbWV0aF9zZXRfcmV2b2tlX2ZuOwotKwkJU1RPUkVfbWV0aG9kX3NldF9yZXZva2VfZnVuY3Rpb247Ci0rCQlTVE9SRV9zdG9yZV9udW1iZXI7Ci0rCQlCTl9pc19wcmltZV9leDsKLSsJCVNUT1JFX3Jldm9rZV9wdWJsaWNfa2V5OwotKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MF9wYXJhbTsKLSsJCVNUT1JFX2RlbGV0ZV9hcmJpdHJhcnk7Ci0rCQlQRU1fcmVhZF9YNTA5X0NFUlRfUEFJUjsKLSsJCVg1MDlfU1RPUkVfc2V0X2RlcHRoOwotKwkJRUNEU0FfZ2V0X2V4X2RhdGE7Ci0rCQlTSEEyMjQ7Ci0rCQlCSU9fZHVtcF9pbmRlbnRfZnA7Ci0rCQlFQ19LRVlfc2V0X2dyb3VwOwotKwkJQlVGX3N0cm5kdXA7Ci0rCQlTVE9SRV9saXN0X2NlcnRpZmljYXRlX3N0YXJ0OwotKwkJQk5fR0YybV9tb2Q7Ci0rCQlYNTA5X1JFUV9jaGVja19wcml2YXRlX2tleTsKLSsJCUVDX0dST1VQX2dldF9zZWVkX2xlbjsKLSsJCUVSUl9sb2FkX1NUT1JFX3N0cmluZ3M7Ci0rCQlQRU1fcmVhZF9iaW9fRUNfUFVCS0VZOwotKwkJU1RPUkVfbGlzdF9wcml2YXRlX2tleV9lbmQ7Ci0rCQlpMmRfRUNfUFVCS0VZOwotKwkJRUNEU0FfZ2V0X2RlZmF1bHRfbWV0aG9kOwotKwkJQVNOMV9wdXRfZW9jOwotKwkJWDUwOV9TVE9SRV9DVFhfZ2V0X2V4cGxpY2l0X3BvbGljeTsKLSsJCVg1MDlfU1RPUkVfQ1RYX2dldF9leHBsX3BvbGljeTsKLSsJCVg1MDlfVkVSSUZZX1BBUkFNX3RhYmxlX2NsZWFudXA7Ci0rCQlTVE9SRV9tb2RpZnlfcHJpdmF0ZV9rZXk7Ci0rCQlYNTA5X1ZFUklGWV9QQVJBTV9mcmVlOwotKwkJRUNfTUVUSE9EX2dldF9maWVsZF90eXBlOwotKwkJRUNfR0ZwX25pc3RfbWV0aG9kOwotKwkJU1RPUkVfbWV0aF9zZXRfbW9kaWZ5X2ZuOwotKwkJU1RPUkVfbWV0aG9kX3NldF9tb2RpZnlfZnVuY3Rpb247Ci0rCQlTVE9SRV9wYXJzZV9hdHRyc19uZXh0OwotKwkJRU5HSU5FX2xvYWRfcGFkbG9jazsKLSsJCUVDX0dST1VQX3NldF9jdXJ2ZV9uYW1lOwotKwkJWDUwOV9DRVJUX1BBSVJfaXQ7Ci0rCQlTVE9SRV9tZXRoX2dldF9yZXZva2VfZm47Ci0rCQlTVE9SRV9tZXRob2RfZ2V0X3Jldm9rZV9mdW5jdGlvbjsKLSsJCVNUT1JFX21ldGhvZF9zZXRfZ2V0X2Z1bmN0aW9uOwotKwkJU1RPUkVfbW9kaWZ5X251bWJlcjsKLSsJCVNUT1JFX21ldGhvZF9nZXRfc3RvcmVfZnVuY3Rpb247Ci0rCQlTVE9SRV9zdG9yZV9wcml2YXRlX2tleTsKLSsJCUJOX0dGMm1fbW9kX3Nxcl9hcnI7Ci0rCQlSU0Ffc2V0dXBfYmxpbmRpbmc7Ci0rCQlCSU9fc19kYXRhZ3JhbTsKLSsJCVNUT1JFX01lbW9yeTsKLSsJCXNrX2ZpbmRfZXg7Ci0rCQlFQ19HUk9VUF9zZXRfY3VydmVfR0YybTsKLSsJCUVOR0lORV9zZXRfZGVmYXVsdF9FQ0RTQTsKLSsJCVBPTElDWV9DT05TVFJBSU5UU19uZXc7Ci0rCQlCTl9HRjJtX21vZF9zcXJ0OwotKwkJRUNESF9zZXRfZGVmYXVsdF9tZXRob2Q7Ci0rCQlFQ19LRVlfZ2VuZXJhdGVfa2V5OwotKwkJU0hBMzg0X1VwZGF0ZTsKLSsJCUJOX0dGMm1fYXJyMnBvbHk7Ci0rCQlTVE9SRV9tZXRob2RfZ2V0X2dldF9mdW5jdGlvbjsKLSsJCVNUT1JFX21ldGhfc2V0X2NsZWFudXBfZm47Ci0rCQlTVE9SRV9tZXRob2Rfc2V0X2NsZWFudXBfZnVuY3Rpb247Ci0rCQlFQ19HUk9VUF9jaGVjazsKLSsJCWQyaV9FQ1ByaXZhdGVLZXlfYmlvOwotKwkJRUNfS0VZX2luc2VydF9rZXlfbWV0aG9kX2RhdGE7Ci0rCQlTVE9SRV9tZXRoX2dldF9sb2NrX3N0b3JlX2ZuOwotKwkJU1RPUkVfbWV0aG9kX2dldF9sb2NrX3N0b3JlX2Z1bmN0aW9uOwotKwkJWDUwOV9WRVJJRllfUEFSQU1fZ2V0X2RlcHRoOwotKwkJU0hBMjI0X0ZpbmFsOwotKwkJU1RPUkVfbWV0aF9zZXRfdXBkYXRlX3N0b3JlX2ZuOwotKwkJU1RPUkVfbWV0aG9kX3NldF91cGRhdGVfc3RvcmVfZnVuY3Rpb247Ci0rCQlTSEEyMjRfVXBkYXRlOwotKwkJZDJpX0VDUHJpdmF0ZUtleTsKLSsJCUFTTjFfaXRlbV9uZGVmX2kyZDsKLSsJCVNUT1JFX2RlbGV0ZV9wcml2YXRlX2tleTsKLSsJCUVSUl9wb3BfdG9fbWFyazsKLSsJCUVOR0lORV9yZWdpc3Rlcl9hbGxfU1RPUkU7Ci0rCQlYNTA5X3BvbGljeV9sZXZlbF9nZXQwX25vZGU7Ci0rCQlpMmRfUEtDUzdfTkRFRjsKLSsJCUVDX0dST1VQX2dldF9kZWdyZWU7Ci0rCQlBU04xX2dlbmVyYXRlX3YzOwotKwkJU1RPUkVfQVRUUl9JTkZPX21vZGlmeV9jc3RyOwotKwkJWDUwOV9wb2xpY3lfdHJlZV9sZXZlbF9jb3VudDsKLSsJCUJOX0dGMm1fYWRkOwotKwkJRUNfS0VZX2dldDBfZ3JvdXA7Ci0rCQlTVE9SRV9nZW5lcmF0ZV9jcmw7Ci0rCQlTVE9SRV9zdG9yZV9wdWJsaWNfa2V5OwotKwkJWDUwOV9DRVJUX1BBSVJfZnJlZTsKLSsJCVNUT1JFX3Jldm9rZV9wcml2YXRlX2tleTsKLSsJCUJOX25pc3RfbW9kXzIyNDsKLSsJCVNIQTUxMl9GaW5hbDsKLSsJCVNUT1JFX0FUVFJfSU5GT19tb2RpZnlfZG47Ci0rCQlTVE9SRV9tZXRoX2dldF9pbml0aWFsaXNlX2ZuOwotKwkJU1RPUkVfbWV0aG9kX2dldF9pbml0aWFsaXNlX2Z1bmN0aW9uOwotKwkJU1RPUkVfZGVsZXRlX251bWJlcjsKLSsJCWkyZF9FQ19QVUJLRVlfYmlvOwotKwkJQklPX2RncmFtX25vbl9mYXRhbF9lcnJvcjsKLSsJCUVDX0dST1VQX2dldF9hc24xX2ZsYWc7Ci0rCQlTVE9SRV9BVFRSX0lORk9faW5fZXg7Ci0rCQlTVE9SRV9saXN0X2NybF9zdGFydDsKLSsJCUVDREhfZ2V0X2V4X25ld19pbmRleDsKLSsJCVNUT1JFX21ldGhfZ2V0X21vZGlmeV9mbjsKLSsJCVNUT1JFX21ldGhvZF9nZXRfbW9kaWZ5X2Z1bmN0aW9uOwotKwkJdjJpX0FTTjFfQklUX1NUUklORzsKLSsJCVNUT1JFX3N0b3JlX2NlcnRpZmljYXRlOwotKwkJT0JKX2JzZWFyY2hfZXg7Ci0rCQlYNTA5X1NUT1JFX0NUWF9zZXRfZGVmYXVsdDsKLSsJCVNUT1JFX0FUVFJfSU5GT19zZXRfc2hhMXN0cjsKLSsJCUJOX0dGMm1fbW9kX2ludjsKLSsJCUJOX0dGMm1fbW9kX2V4cDsKLSsJCVNUT1JFX21vZGlmeV9wdWJsaWNfa2V5OwotKwkJU1RPUkVfbWV0aF9nZXRfbGlzdF9zdGFydF9mbjsKLSsJCVNUT1JFX21ldGhvZF9nZXRfbGlzdF9zdGFydF9mdW5jdGlvbjsKLSsJCUVDX0dST1VQX2dldDBfc2VlZDsKLSsJCVNUT1JFX3N0b3JlX2FyYml0cmFyeTsKLSsJCVNUT1JFX21ldGhfc2V0X3VubG9ja19zdG9yZV9mbjsKLSsJCVNUT1JFX21ldGhvZF9zZXRfdW5sb2NrX3N0b3JlX2Z1bmN0aW9uOwotKwkJQk5fR0YybV9tb2RfZGl2X2FycjsKLSsJCUVOR0lORV9zZXRfRUNEU0E7Ci0rCQlTVE9SRV9jcmVhdGVfbWV0aG9kOwotKwkJRUNQS1BhcmFtZXRlcnNfcHJpbnQ7Ci0rCQlFQ19LRVlfZ2V0MF9wcml2YXRlX2tleTsKLSsJCVBFTV93cml0ZV9FQ19QVUJLRVk7Ci0rCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxOwotKwkJRUNESF9zZXRfbWV0aG9kOwotKwkJdjJpX0dFTkVSQUxfTkFNRV9leDsKLSsJCUVDREhfc2V0X2V4X2RhdGE7Ci0rCQlTVE9SRV9nZW5lcmF0ZV9rZXk7Ci0rCQlCTl9uaXN0X21vZF81MjE7Ci0rCQlYNTA5X3BvbGljeV90cmVlX2dldDBfbGV2ZWw7Ci0rCQlFQ19HUk9VUF9zZXRfcG9pbnRfY29udmVyc2lvbl9mb3JtOwotKwkJRUNfR1JPVVBfc2V0X3BvaW50X2NvbnZfZm9ybTsKLSsJCVBFTV9yZWFkX0VDX1BVQktFWTsKLSsJCWkyZF9FQ0RTQV9TSUc7Ci0rCQlFQ0RTQV9PcGVuU1NMOwotKwkJU1RPUkVfZGVsZXRlX2NybDsKLSsJCUVDX0tFWV9nZXRfZW5jX2ZsYWdzOwotKwkJQVNOMV9jb25zdF9jaGVja19pbmZpbml0ZV9lbmQ7Ci0rCQlFVlBfUEtFWV9kZWxldGVfYXR0cjsKLSsJCUVDRFNBX3NldF9kZWZhdWx0X21ldGhvZDsKLSsJCUVDX1BPSU5UX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzX0dGMm07Ci0rCQlFQ19QT0lOVF9zZXRfY29tcHJfY29vcmRzX0dGMm07Ci0rCQlFQ19HUk9VUF9jbXA7Ci0rCQlTVE9SRV9yZXZva2VfY2VydGlmaWNhdGU7Ci0rCQlCTl9nZXQwX25pc3RfcHJpbWVfMjU2OwotKwkJU1RPUkVfbWV0aF9nZXRfZGVsZXRlX2ZuOwotKwkJU1RPUkVfbWV0aG9kX2dldF9kZWxldGVfZnVuY3Rpb247Ci0rCQlTSEEyMjRfSW5pdDsKLSsJCVBFTV9yZWFkX0VDUHJpdmF0ZUtleTsKLSsJCVNIQTUxMl9Jbml0OwotKwkJU1RPUkVfcGFyc2VfYXR0cnNfZW5kcDsKLSsJCUJOX3NldF9uZWdhdGl2ZTsKLSsJCUVSUl9sb2FkX0VDRFNBX3N0cmluZ3M7Ci0rCQlFQ19HUk9VUF9nZXRfYmFzaXNfdHlwZTsKLSsJCVNUT1JFX2xpc3RfcHVibGljX2tleV9uZXh0OwotKwkJaTJ2X0FTTjFfQklUX1NUUklORzsKLSsJCVNUT1JFX09CSkVDVF9mcmVlOwotKwkJQk5fbmlzdF9tb2RfMzg0OwotKwkJaTJkX1g1MDlfQ0VSVF9QQUlSOwotKwkJUEVNX3dyaXRlX0VDUEtQYXJhbWV0ZXJzOwotKwkJRUNESF9jb21wdXRlX2tleTsKLSsJCVNUT1JFX0FUVFJfSU5GT19nZXQwX3NoYTFzdHI7Ci0rCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX0VDREg7Ci0rCQlwcXVldWVfcG9wOwotKwkJU1RPUkVfQVRUUl9JTkZPX2dldDBfY3N0cjsKLSsJCVBPTElDWV9DT05TVFJBSU5UU19pdDsKLSsJCVNUT1JFX2dldF9leF9uZXdfaW5kZXg7Ci0rCQlFVlBfUEtFWV9nZXRfYXR0cl9ieV9PQko7Ci0rCQlYNTA5X1ZFUklGWV9QQVJBTV9hZGQwX3BvbGljeTsKLSsJCUJOX0dGMm1fbW9kX3NvbHZlX3F1YWQ7Ci0rCQlTSEEyNTY7Ci0rCQlpMmRfRUNQcml2YXRlS2V5X2ZwOwotKwkJWDUwOV9wb2xpY3lfdHJlZV9nZXQwX3VzZXJfcG9saWNpZXM7Ci0rCQlYNTA5X3BjeV90cmVlX2dldDBfdXNyX3BvbGljaWVzOwotKwkJT1BFTlNTTF9ESVJfcmVhZDsKLSsJCUVOR0lORV9yZWdpc3Rlcl9hbGxfRUNEU0E7Ci0rCQlYNTA5X1ZFUklGWV9QQVJBTV9sb29rdXA7Ci0rCQlFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGMm07Ci0rCQlFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3Jkc19HRjJtOwotKwkJRUNfR1JPVVBfZHVwOwotKwkJRU5HSU5FX2dldF9kZWZhdWx0X0VDRFNBOwotKwkJRUNfS0VZX25ldzsKLSsJCVNIQTI1Nl9UcmFuc2Zvcm07Ci0rCQlFQ19LRVlfc2V0X2VuY19mbGFnczsKLSsJCUVDRFNBX3ZlcmlmeTsKLSsJCUVDX1BPSU5UX3BvaW50MmhleDsKLSsJCUVOR0lORV9nZXRfU1RPUkU7Ci0rCQlTSEE1MTI7Ci0rCQlTVE9SRV9nZXRfY2VydGlmaWNhdGU7Ci0rCQlFQ0RTQV9kb19zaWduX2V4OwotKwkJRUNEU0FfZG9fdmVyaWZ5OwotKwkJZDJpX0VDUHJpdmF0ZUtleV9mcDsKLSsJCVNUT1JFX2RlbGV0ZV9jZXJ0aWZpY2F0ZTsKLSsJCVNIQTUxMl9UcmFuc2Zvcm07Ci0rCQlYNTA5X1NUT1JFX3NldDFfcGFyYW07Ci0rCQlTVE9SRV9tZXRob2RfZ2V0X2N0cmxfZnVuY3Rpb247Ci0rCQlTVE9SRV9mcmVlOwotKwkJUEVNX3dyaXRlX0VDUHJpdmF0ZUtleTsKLSsJCVNUT1JFX21ldGhfZ2V0X3VubG9ja19zdG9yZV9mbjsKLSsJCVNUT1JFX21ldGhvZF9nZXRfdW5sb2NrX3N0b3JlX2Z1bmN0aW9uOwotKwkJU1RPUkVfZ2V0X2V4X2RhdGE7Ci0rCQlFQ19LRVlfc2V0X3B1YmxpY19rZXk7Ci0rCQlQRU1fcmVhZF9FQ1BLUGFyYW1ldGVyczsKLSsJCVg1MDlfQ0VSVF9QQUlSX25ldzsKLSsJCUVOR0lORV9yZWdpc3Rlcl9TVE9SRTsKLSsJCVJTQV9nZW5lcmF0ZV9rZXlfZXg7Ci0rCQlEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leDsKLSsJCUVDUGFyYW1ldGVyc19wcmludF9mcDsKLSsJCVg1MDlWM19OQU1FX2Zyb21fc2VjdGlvbjsKLSsJCUVWUF9QS0VZX2FkZDFfYXR0cjsKLSsJCVNUT1JFX21vZGlmeV9jcmw7Ci0rCQlTVE9SRV9saXN0X3ByaXZhdGVfa2V5X3N0YXJ0OwotKwkJUE9MSUNZX01BUFBJTkdTX2l0OwotKwkJR0VORVJBTF9TVUJUUkVFX2l0OwotKwkJRUNfR1JPVVBfZ2V0X2N1cnZlX25hbWU7Ci0rCQlQRU1fd3JpdGVfWDUwOV9DRVJUX1BBSVI7Ci0rCQlCSU9fZHVtcF9pbmRlbnRfY2I7Ci0rCQlkMmlfWDUwOV9DRVJUX1BBSVI7Ci0rCQlTVE9SRV9saXN0X3ByaXZhdGVfa2V5X2VuZHA7Ci0rCQlhc24xX2NvbnN0X0ZpbmlzaDsKLSsJCWkyZF9FQ19QVUJLRVlfZnA7Ci0rCQlCTl9uaXN0X21vZF8yNTY7Ci0rCQlYNTA5X1ZFUklGWV9QQVJBTV9hZGQwX3RhYmxlOwotKwkJcHF1ZXVlX2ZyZWU7Ci0rCQlCTl9CTElORElOR19jcmVhdGVfcGFyYW07Ci0rCQlFQ0RTQV9zaXplOwotKwkJZDJpX0VDX1BVQktFWV9iaW87Ci0rCQlCTl9nZXQwX25pc3RfcHJpbWVfNTIxOwotKwkJU1RPUkVfQVRUUl9JTkZPX21vZGlmeV9zaGExc3RyOwotKwkJQk5fZ2VuZXJhdGVfcHJpbWVfZXg7Ci0rCQlFQ19HUk9VUF9uZXdfYnlfY3VydmVfbmFtZTsKLSsJCVNIQTI1Nl9GaW5hbDsKLSsJCURIX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXg7Ci0rCQlQRU1fcmVhZF9iaW9fRUNQcml2YXRlS2V5OwotKwkJU1RPUkVfbWV0aF9nZXRfY2xlYW51cF9mbjsKLSsJCVNUT1JFX21ldGhvZF9nZXRfY2xlYW51cF9mdW5jdGlvbjsKLSsJCUVOR0lORV9nZXRfRUNESDsKLSsJCWQyaV9FQ0RTQV9TSUc7Ci0rCQlCTl9pc19wcmltZV9mYXN0dGVzdF9leDsKLSsJCUVDRFNBX3NpZ247Ci0rCQlYNTA5X3BvbGljeV9jaGVjazsKLSsJCUVWUF9QS0VZX2dldF9hdHRyX2J5X05JRDsKLSsJCVNUT1JFX3NldF9leF9kYXRhOwotKwkJRU5HSU5FX2dldF9FQ0RTQTsKLSsJCUVWUF9lY2RzYTsKLSsJCUJOX0JMSU5ESU5HX2dldF9mbGFnczsKLSsJCVBLQ1MxMl9hZGRfY2VydDsKLSsJCVNUT1JFX09CSkVDVF9uZXc7Ci0rCQlFUlJfbG9hZF9FQ0RIX3N0cmluZ3M7Ci0rCQlFQ19LRVlfZHVwOwotKwkJRVZQX0NJUEhFUl9DVFhfcmFuZF9rZXk7Ci0rCQlFQ0RTQV9zZXRfbWV0aG9kOwotKwkJYTJpX0lQQUREUkVTU19OQzsKLSsJCWQyaV9FQ1BhcmFtZXRlcnM7Ci0rCQlTVE9SRV9saXN0X2NlcnRpZmljYXRlX2VuZDsKLSsJCVNUT1JFX2dldF9jcmw7Ci0rCQlYNTA5X1BPTElDWV9OT0RFX3ByaW50OwotKwkJU0hBMzg0X0luaXQ7Ci0rCQlFQ19HRjJtX3NpbXBsZV9tZXRob2Q7Ci0rCQlFQ0RTQV9zZXRfZXhfZGF0YTsKLSsJCVNIQTM4NF9GaW5hbDsKLSsJCVBLQ1M3X3NldF9kaWdlc3Q7Ci0rCQlFQ19LRVlfcHJpbnQ7Ci0rCQlTVE9SRV9tZXRoX3NldF9sb2NrX3N0b3JlX2ZuOwotKwkJU1RPUkVfbWV0aG9kX3NldF9sb2NrX3N0b3JlX2Z1bmN0aW9uOwotKwkJRUNEU0FfZ2V0X2V4X25ld19pbmRleDsKLSsJCVNIQTM4NDsKLSsJCVBPTElDWV9NQVBQSU5HX25ldzsKLSsJCVNUT1JFX2xpc3RfY2VydGlmaWNhdGVfZW5kcDsKLSsJCVg1MDlfU1RPUkVfQ1RYX2dldDBfcG9saWN5X3RyZWU7Ci0rCQlFQ19HUk9VUF9zZXRfYXNuMV9mbGFnOwotKwkJRUNfS0VZX2NoZWNrX2tleTsKLSsJCWQyaV9FQ19QVUJLRVlfZnA7Ci0rCQlQS0NTN19zZXQwX3R5cGVfb3RoZXI7Ci0rCQlQRU1fcmVhZF9iaW9fWDUwOV9DRVJUX1BBSVI7Ci0rCQlwcXVldWVfbmV4dDsKLSsJCVNUT1JFX21ldGhfZ2V0X2xpc3RfZW5kX2ZuOwotKwkJU1RPUkVfbWV0aG9kX2dldF9saXN0X2VuZF9mdW5jdGlvbjsKLSsJCUVWUF9QS0VZX2FkZDFfYXR0cl9ieV9PQko7Ci0rCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfdGltZTsKLSsJCXBxdWV1ZV9uZXc7Ci0rCQlFTkdJTkVfc2V0X2RlZmF1bHRfRUNESDsKLSsJCVNUT1JFX25ld19tZXRob2Q7Ci0rCQlQS0NTMTJfYWRkX2tleTsKLSsJCURTT19tZXJnZTsKLSsJCUVDX1BPSU5UX2hleDJwb2ludDsKLSsJCUJJT19kdW1wX2NiOwotKwkJU0hBMjU2X1VwZGF0ZTsKLSsJCXBxdWV1ZV9pbnNlcnQ7Ci0rCQlwaXRlbV9mcmVlOwotKwkJQk5fR0YybV9tb2RfaW52X2FycjsKLSsJCUVOR0lORV91bnJlZ2lzdGVyX0VDRFNBOwotKwkJQk5fQkxJTkRJTkdfc2V0X3RocmVhZF9pZDsKLSsJCWdldF9yZmMzNTI2X3ByaW1lXzgxOTI7Ci0rCQlYNTA5X1ZFUklGWV9QQVJBTV9jbGVhcl9mbGFnczsKLSsJCWdldF9yZmMyNDA5X3ByaW1lXzEwMjQ7Ci0rCQlESF9jaGVja19wdWJfa2V5OwotKwkJZ2V0X3JmYzM1MjZfcHJpbWVfMjA0ODsKLSsJCWdldF9yZmMzNTI2X3ByaW1lXzYxNDQ7Ci0rCQlnZXRfcmZjMzUyNl9wcmltZV8xNTM2OwotKwkJZ2V0X3JmYzM1MjZfcHJpbWVfMzA3MjsKLSsJCWdldF9yZmMzNTI2X3ByaW1lXzQwOTY7Ci0rCQlnZXRfcmZjMjQwOV9wcmltZV83Njg7Ci0rCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXRfZmxhZ3M7Ci0rCQlFVlBfQ0lQSEVSX0NUWF9uZXc7Ci0rCQlFVlBfQ0lQSEVSX0NUWF9mcmVlOwotKwkJQ2FtZWxsaWFfY2JjX2VuY3J5cHQ7Ci0rCQlDYW1lbGxpYV9jZmIxMjhfZW5jcnlwdDsKLSsJCUNhbWVsbGlhX2NmYjFfZW5jcnlwdDsKLSsJCUNhbWVsbGlhX2NmYjhfZW5jcnlwdDsKLSsJCUNhbWVsbGlhX2N0cjEyOF9lbmNyeXB0OwotKwkJQ2FtZWxsaWFfY2Zicl9lbmNyeXB0X2Jsb2NrOwotKwkJQ2FtZWxsaWFfZGVjcnlwdDsKLSsJCUNhbWVsbGlhX2VjYl9lbmNyeXB0OwotKwkJQ2FtZWxsaWFfZW5jcnlwdDsKLSsJCUNhbWVsbGlhX29mYjEyOF9lbmNyeXB0OwotKwkJQ2FtZWxsaWFfc2V0X2tleTsKLSsJCUVWUF9jYW1lbGxpYV8xMjhfY2JjOwotKwkJRVZQX2NhbWVsbGlhXzEyOF9jZmIxMjg7Ci0rCQlFVlBfY2FtZWxsaWFfMTI4X2NmYjE7Ci0rCQlFVlBfY2FtZWxsaWFfMTI4X2NmYjg7Ci0rCQlFVlBfY2FtZWxsaWFfMTI4X2VjYjsKLSsJCUVWUF9jYW1lbGxpYV8xMjhfb2ZiOwotKwkJRVZQX2NhbWVsbGlhXzE5Ml9jYmM7Ci0rCQlFVlBfY2FtZWxsaWFfMTkyX2NmYjEyODsKLSsJCUVWUF9jYW1lbGxpYV8xOTJfY2ZiMTsKLSsJCUVWUF9jYW1lbGxpYV8xOTJfY2ZiODsKLSsJCUVWUF9jYW1lbGxpYV8xOTJfZWNiOwotKwkJRVZQX2NhbWVsbGlhXzE5Ml9vZmI7Ci0rCQlFVlBfY2FtZWxsaWFfMjU2X2NiYzsKLSsJCUVWUF9jYW1lbGxpYV8yNTZfY2ZiMTI4OwotKwkJRVZQX2NhbWVsbGlhXzI1Nl9jZmIxOwotKwkJRVZQX2NhbWVsbGlhXzI1Nl9jZmI4OwotKwkJRVZQX2NhbWVsbGlhXzI1Nl9lY2I7Ci0rCQlFVlBfY2FtZWxsaWFfMjU2X29mYjsKLSsJCWEyaV9pcGFkZDsKLSsJCUFTSWRlbnRpZmllcnNfZnJlZTsKLSsJCWkyZF9BU0lkT3JSYW5nZTsKLSsJCUVWUF9DSVBIRVJfYmxvY2tfc2l6ZTsKLSsJCXYzX2FzaWRfaXNfY2Fub25pY2FsOwotKwkJSVBBZGRyZXNzQ2hvaWNlX2ZyZWU7Ci0rCQlFVlBfQ0lQSEVSX0NUWF9zZXRfYXBwX2RhdGE7Ci0rCQlCSU9fc2V0X2NhbGxiYWNrX2FyZzsKLSsJCXYzX2FkZHJfYWRkX3ByZWZpeDsKLSsJCUlQQWRkcmVzc09yUmFuZ2VfaXQ7Ci0rCQlCSU9fc2V0X2ZsYWdzOwotKwkJQVNJZGVudGlmaWVyc19pdDsKLSsJCXYzX2FkZHJfZ2V0X3JhbmdlOwotKwkJQklPX21ldGhvZF90eXBlOwotKwkJdjNfYWRkcl9pbmhlcml0czsKLSsJCUlQQWRkcmVzc0Nob2ljZV9pdDsKLSsJCUFFU19pZ2VfZW5jcnlwdDsKLSsJCXYzX2FkZHJfYWRkX3JhbmdlOwotKwkJRVZQX0NJUEhFUl9DVFhfbmlkOwotKwkJZDJpX0FTUmFuZ2U7Ci0rCQl2M19hZGRyX2FkZF9pbmhlcml0OwotKwkJdjNfYXNpZF9hZGRfaWRfb3JfcmFuZ2U7Ci0rCQl2M19hZGRyX3ZhbGlkYXRlX3Jlc291cmNlX3NldDsKLSsJCUVWUF9DSVBIRVJfaXZfbGVuZ3RoOwotKwkJRVZQX01EX3R5cGU7Ci0rCQl2M19hc2lkX2Nhbm9uaXplOwotKwkJSVBBZGRyZXNzUmFuZ2VfZnJlZTsKLSsJCXYzX2FzaWRfYWRkX2luaGVyaXQ7Ci0rCQlFVlBfQ0lQSEVSX0NUWF9rZXlfbGVuZ3RoOwotKwkJSVBBZGRyZXNzUmFuZ2VfbmV3OwotKwkJQVNJZE9yUmFuZ2VfbmV3OwotKwkJRVZQX01EX3NpemU7Ci0rCQlFVlBfTURfQ1RYX3Rlc3RfZmxhZ3M7Ci0rCQlCSU9fY2xlYXJfZmxhZ3M7Ci0rCQlpMmRfQVNSYW5nZTsKLSsJCUlQQWRkcmVzc1JhbmdlX2l0OwotKwkJSVBBZGRyZXNzQ2hvaWNlX25ldzsKLSsJCUFTSWRlbnRpZmllckNob2ljZV9uZXc7Ci0rCQlBU1JhbmdlX2ZyZWU7Ci0rCQlFVlBfTURfcGtleV90eXBlOwotKwkJRVZQX01EX0NUWF9jbGVhcl9mbGFnczsKLSsJCUlQQWRkcmVzc0ZhbWlseV9mcmVlOwotKwkJaTJkX0lQQWRkcmVzc0ZhbWlseTsKLSsJCUlQQWRkcmVzc09yUmFuZ2VfbmV3OwotKwkJRVZQX0NJUEhFUl9mbGFnczsKLSsJCXYzX2FzaWRfdmFsaWRhdGVfcmVzb3VyY2Vfc2V0OwotKwkJZDJpX0lQQWRkcmVzc1JhbmdlOwotKwkJQUVTX2JpX2lnZV9lbmNyeXB0OwotKwkJQklPX2dldF9jYWxsYmFjazsKLSsJCUlQQWRkcmVzc09yUmFuZ2VfZnJlZTsKLSsJCXYzX2FkZHJfc3Vic2V0OwotKwkJZDJpX0lQQWRkcmVzc0ZhbWlseTsKLSsJCXYzX2FzaWRfc3Vic2V0OwotKwkJQklPX3Rlc3RfZmxhZ3M7Ci0rCQlpMmRfQVNJZGVudGlmaWVyQ2hvaWNlOwotKwkJQVNSYW5nZV9pdDsKLSsJCWQyaV9BU0lkZW50aWZpZXJzOwotKwkJQVNSYW5nZV9uZXc7Ci0rCQlkMmlfSVBBZGRyZXNzQ2hvaWNlOwotKwkJdjNfYWRkcl9nZXRfYWZpOwotKwkJRVZQX0NJUEhFUl9rZXlfbGVuZ3RoOwotKwkJRVZQX0NpcGhlcjsKLSsJCWkyZF9JUEFkZHJlc3NPclJhbmdlOwotKwkJQVNJZE9yUmFuZ2VfaXQ7Ci0rCQlFVlBfQ0lQSEVSX25pZDsKLSsJCWkyZF9JUEFkZHJlc3NDaG9pY2U7Ci0rCQlFVlBfQ0lQSEVSX0NUWF9ibG9ja19zaXplOwotKwkJQVNJZGVudGlmaWVyc19uZXc7Ci0rCQl2M19hZGRyX3ZhbGlkYXRlX3BhdGg7Ci0rCQlJUEFkZHJlc3NGYW1pbHlfbmV3OwotKwkJRVZQX01EX0NUWF9zZXRfZmxhZ3M7Ci0rCQl2M19hZGRyX2lzX2Nhbm9uaWNhbDsKLSsJCWkyZF9JUEFkZHJlc3NSYW5nZTsKLSsJCUlQQWRkcmVzc0ZhbWlseV9pdDsKLSsJCXYzX2FzaWRfaW5oZXJpdHM7Ci0rCQlFVlBfQ0lQSEVSX0NUWF9jaXBoZXI7Ci0rCQlFVlBfQ0lQSEVSX0NUWF9nZXRfYXBwX2RhdGE7Ci0rCQlFVlBfTURfYmxvY2tfc2l6ZTsKLSsJCUVWUF9DSVBIRVJfQ1RYX2ZsYWdzOwotKwkJdjNfYXNpZF92YWxpZGF0ZV9wYXRoOwotKwkJZDJpX0lQQWRkcmVzc09yUmFuZ2U7Ci0rCQl2M19hZGRyX2Nhbm9uaXplOwotKwkJQVNJZGVudGlmaWVyQ2hvaWNlX2l0OwotKwkJRVZQX01EX0NUWF9tZDsKLSsJCWQyaV9BU0lkZW50aWZpZXJDaG9pY2U7Ci0rCQlCSU9fbWV0aG9kX25hbWU7Ci0rCQlFVlBfQ0lQSEVSX0NUWF9pdl9sZW5ndGg7Ci0rCQlBU0lkT3JSYW5nZV9mcmVlOwotKwkJQVNJZGVudGlmaWVyQ2hvaWNlX2ZyZWU7Ci0rCQlCSU9fZ2V0X2NhbGxiYWNrX2FyZzsKLSsJCUJJT19zZXRfY2FsbGJhY2s7Ci0rCQlkMmlfQVNJZE9yUmFuZ2U7Ci0rCQlpMmRfQVNJZGVudGlmaWVyczsKLSsJCVNFRURfZGVjcnlwdDsKLSsJCVNFRURfZW5jcnlwdDsKLSsJCVNFRURfY2JjX2VuY3J5cHQ7Ci0rCQlFVlBfc2VlZF9vZmI7Ci0rCQlTRUVEX2NmYjEyOF9lbmNyeXB0OwotKwkJU0VFRF9vZmIxMjhfZW5jcnlwdDsKLSsJCUVWUF9zZWVkX2NiYzsKLSsJCVNFRURfZWNiX2VuY3J5cHQ7Ci0rCQlFVlBfc2VlZF9lY2I7Ci0rCQlTRUVEX3NldF9rZXk7Ci0rCQlFVlBfc2VlZF9jZmIxMjg7Ci0rCQlYNTA5X0VYVEVOU0lPTlNfaXQ7Ci0rCQlYNTA5X2dldDFfb2NzcDsKLSsJCU9DU1BfUkVRX0NUWF9mcmVlOwotKwkJaTJkX1g1MDlfRVhURU5TSU9OUzsKLSsJCU9DU1Bfc2VuZHJlcV9uYmlvOwotKwkJT0NTUF9zZW5kcmVxX25ldzsKLSsJCWQyaV9YNTA5X0VYVEVOU0lPTlM7Ci0rCQlYNTA5X0FMR09SU19pdDsKLSsJCVg1MDlfQUxHT1JfZ2V0MDsKLSsJCVg1MDlfQUxHT1Jfc2V0MDsKLSsJCUFFU191bndyYXBfa2V5OwotKwkJQUVTX3dyYXBfa2V5OwotKwkJWDUwOWF0X2dldDBfZGF0YV9ieV9PQko7Ci0rCQlBU04xX1RZUEVfc2V0MTsKLSsJCUFTTjFfU1RSSU5HX3NldDA7Ci0rCQlpMmRfWDUwOV9BTEdPUlM7Ci0rCQlCSU9fZl96bGliOwotKwkJQ09NUF96bGliX2NsZWFudXA7Ci0rCQlkMmlfWDUwOV9BTEdPUlM7Ci0rCQlDTVNfUmVjZWlwdFJlcXVlc3RfZnJlZTsKLSsJCVBFTV93cml0ZV9DTVM7Ci0rCQlDTVNfYWRkMF9DZXJ0aWZpY2F0ZUNob2ljZXM7Ci0rCQlDTVNfdW5zaWduZWRfYWRkMV9hdHRyX2J5X09CSjsKLSsJCUVSUl9sb2FkX0NNU19zdHJpbmdzOwotKwkJQ01TX3NpZ25fcmVjZWlwdDsKLSsJCWkyZF9DTVNfQ29udGVudEluZm87Ci0rCQlDTVNfc2lnbmVkX2RlbGV0ZV9hdHRyOwotKwkJZDJpX0NNU19iaW87Ci0rCQlDTVNfdW5zaWduZWRfZ2V0X2F0dHJfYnlfTklEOwotKwkJQ01TX3ZlcmlmeTsKLSsJCVNNSU1FX3JlYWRfQ01TOwotKwkJQ01TX2RlY3J5cHRfc2V0MV9rZXk7Ci0rCQlDTVNfU2lnbmVySW5mb19nZXQwX2FsZ3M7Ci0rCQlDTVNfYWRkMV9jZXJ0OwotKwkJQ01TX3NldF9kZXRhY2hlZDsKLSsJCUNNU19lbmNyeXB0OwotKwkJQ01TX0VudmVsb3BlZERhdGFfY3JlYXRlOwotKwkJQ01TX3VuY29tcHJlc3M7Ci0rCQlDTVNfYWRkMF9jcmw7Ci0rCQlDTVNfU2lnbmVySW5mb192ZXJpZnlfY29udGVudDsKLSsJCUNNU191bnNpZ25lZF9nZXQwX2RhdGFfYnlfT0JKOwotKwkJUEVNX3dyaXRlX2Jpb19DTVM7Ci0rCQlDTVNfdW5zaWduZWRfZ2V0X2F0dHI7Ci0rCQlDTVNfUmVjaXBpZW50SW5mb19rdHJpX2NlcnRfY21wOwotKwkJQ01TX1JlY2lwaWVudEluZm9fa3RyaV9nZXQwX2FsZ3M7Ci0rCQlDTVNfUmVjaXBJbmZvX2t0cmlfZ2V0MF9hbGdzOwotKwkJQ01TX0NvbnRlbnRJbmZvX2ZyZWU7Ci0rCQlDTVNfZmluYWw7Ci0rCQlDTVNfYWRkX3NpbXBsZV9zbWltZWNhcDsKLSsJCUNNU19TaWduZXJJbmZvX3ZlcmlmeTsKLSsJCUNNU19kYXRhOwotKwkJQ01TX0NvbnRlbnRJbmZvX2l0OwotKwkJZDJpX0NNU19SZWNlaXB0UmVxdWVzdDsKLSsJCUNNU19jb21wcmVzczsKLSsJCUNNU19kaWdlc3RfY3JlYXRlOwotKwkJQ01TX1NpZ25lckluZm9fY2VydF9jbXA7Ci0rCQlDTVNfU2lnbmVySW5mb19zaWduOwotKwkJQ01TX2RhdGFfY3JlYXRlOwotKwkJaTJkX0NNU19iaW87Ci0rCQlDTVNfRW5jcnlwdGVkRGF0YV9zZXQxX2tleTsKLSsJCUNNU19kZWNyeXB0OwotKwkJaW50X3NtaW1lX3dyaXRlX0FTTjE7Ci0rCQlDTVNfdW5zaWduZWRfZGVsZXRlX2F0dHI7Ci0rCQlDTVNfdW5zaWduZWRfZ2V0X2F0dHJfY291bnQ7Ci0rCQlDTVNfYWRkX3NtaW1lY2FwOwotKwkJUEVNX3JlYWRfQ01TOwotKwkJQ01TX3NpZ25lZF9nZXRfYXR0cl9ieV9PQko7Ci0rCQlkMmlfQ01TX0NvbnRlbnRJbmZvOwotKwkJQ01TX2FkZF9zdGFuZGFyZF9zbWltZWNhcDsKLSsJCUNNU19Db250ZW50SW5mb19uZXc7Ci0rCQlDTVNfUmVjaXBpZW50SW5mb190eXBlOwotKwkJQ01TX2dldDBfdHlwZTsKLSsJCUNNU19pc19kZXRhY2hlZDsKLSsJCUNNU19zaWduOwotKwkJQ01TX3NpZ25lZF9hZGQxX2F0dHI7Ci0rCQlDTVNfdW5zaWduZWRfZ2V0X2F0dHJfYnlfT0JKOwotKwkJU01JTUVfd3JpdGVfQ01TOwotKwkJQ01TX0VuY3J5cHRlZERhdGFfZGVjcnlwdDsKLSsJCUNNU19nZXQwX1JlY2lwaWVudEluZm9zOwotKwkJQ01TX2FkZDBfUmV2b2NhdGlvbkluZm9DaG9pY2U7Ci0rCQlDTVNfZGVjcnlwdF9zZXQxX3BrZXk7Ci0rCQlDTVNfU2lnbmVySW5mb19zZXQxX3NpZ25lcl9jZXJ0OwotKwkJQ01TX2dldDBfc2lnbmVyczsKLSsJCUNNU19SZWNlaXB0UmVxdWVzdF9nZXQwX3ZhbHVlczsKLSsJCUNNU19zaWduZWRfZ2V0MF9kYXRhX2J5X09CSjsKLSsJCUNNU19nZXQwX1NpZ25lckluZm9zOwotKwkJQ01TX2FkZDBfY2VydDsKLSsJCUNNU19FbmNyeXB0ZWREYXRhX2VuY3J5cHQ7Ci0rCQlDTVNfZGlnZXN0X3ZlcmlmeTsKLSsJCUNNU19zZXQxX3NpZ25lcnNfY2VydHM7Ci0rCQlDTVNfc2lnbmVkX2dldF9hdHRyOwotKwkJQ01TX1JlY2lwaWVudEluZm9fc2V0MF9rZXk7Ci0rCQlDTVNfU2lnbmVkRGF0YV9pbml0OwotKwkJQ01TX1JlY2lwaWVudEluZm9fa2VrcmlfZ2V0MF9pZDsKLSsJCUNNU192ZXJpZnlfcmVjZWlwdDsKLSsJCUNNU19SZWNlaXB0UmVxdWVzdF9pdDsKLSsJCVBFTV9yZWFkX2Jpb19DTVM7Ci0rCQlDTVNfZ2V0MV9jcmxzOwotKwkJQ01TX2FkZDBfcmVjaXBpZW50X2tleTsKLSsJCVNNSU1FX3JlYWRfQVNOMTsKLSsJCUNNU19SZWNlaXB0UmVxdWVzdF9uZXc7Ci0rCQlDTVNfZ2V0MF9jb250ZW50OwotKwkJQ01TX2dldDFfUmVjZWlwdFJlcXVlc3Q7Ci0rCQlDTVNfc2lnbmVkX2FkZDFfYXR0cl9ieV9PQko7Ci0rCQlDTVNfUmVjaXBpZW50SW5mb19rZWtyaV9pZF9jbXA7Ci0rCQlDTVNfYWRkMV9SZWNlaXB0UmVxdWVzdDsKLSsJCUNNU19TaWduZXJJbmZvX2dldDBfc2lnbmVyX2lkOwotKwkJQ01TX3Vuc2lnbmVkX2FkZDFfYXR0cl9ieV9OSUQ7Ci0rCQlDTVNfdW5zaWduZWRfYWRkMV9hdHRyOwotKwkJQ01TX3NpZ25lZF9nZXRfYXR0cl9ieV9OSUQ7Ci0rCQlDTVNfZ2V0MV9jZXJ0czsKLSsJCUNNU19zaWduZWRfYWRkMV9hdHRyX2J5X05JRDsKLSsJCUNNU191bnNpZ25lZF9hZGQxX2F0dHJfYnlfdHh0OwotKwkJQ01TX2RhdGFGaW5hbDsKLSsJCUNNU19SZWNpcGllbnRJbmZvX2t0cmlfZ2V0MF9zaWduZXJfaWQ7Ci0rCQlDTVNfUmVjaXBJbmZvX2t0cmlfZ2V0MF9zaWdyX2lkOwotKwkJaTJkX0NNU19SZWNlaXB0UmVxdWVzdDsKLSsJCUNNU19hZGQxX3JlY2lwaWVudF9jZXJ0OwotKwkJQ01TX2RhdGFJbml0OwotKwkJQ01TX3NpZ25lZF9hZGQxX2F0dHJfYnlfdHh0OwotKwkJQ01TX1JlY2lwaWVudEluZm9fZGVjcnlwdDsKLSsJCUNNU19zaWduZWRfZ2V0X2F0dHJfY291bnQ7Ci0rCQlDTVNfZ2V0MF9lQ29udGVudFR5cGU7Ci0rCQlDTVNfc2V0MV9lQ29udGVudFR5cGU7Ci0rCQlDTVNfUmVjZWlwdFJlcXVlc3RfY3JlYXRlMDsKLSsJCUNNU19hZGQxX3NpZ25lcjsKLSsJCUNNU19SZWNpcGllbnRJbmZvX3NldDBfcGtleTsKLSsJCUVOR0lORV9zZXRfbG9hZF9zc2xfY2xpZW50X2NlcnRfZnVuY3Rpb247Ci0rCQlFTkdJTkVfc2V0X2xkX3NzbF9jbG50X2NlcnRfZm47Ci0rCQlFTkdJTkVfZ2V0X3NzbF9jbGllbnRfY2VydF9mdW5jdGlvbjsKLSsJCUVOR0lORV9nZXRfc3NsX2NsaWVudF9jZXJ0X2ZuOwotKwkJRU5HSU5FX2xvYWRfc3NsX2NsaWVudF9jZXJ0OwotKwkJRU5HSU5FX2xvYWRfY2FwaTsKLSsJCU9QRU5TU0xfaXNzZXJ2aWNlOwotKwkJRklQU19kc2Ffc2lnX2RlY29kZTsKLSsJCUVWUF9DSVBIRVJfQ1RYX2NsZWFyX2ZsYWdzOwotKwkJRklQU19yYW5kX3N0YXR1czsKLSsJCUZJUFNfcmFuZF9zZXRfa2V5OwotKwkJQ1JZUFRPX3NldF9tZW1faW5mb19mdW5jdGlvbnM7Ci0rCQlSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXg7Ci0rCQlpbnRfRVJSX3NldF9zdGF0ZV9mdW5jOwotKwkJaW50X0VWUF9NRF9zZXRfZW5naW5lX2NhbGxiYWNrczsKLSsJCWludF9DUllQVE9fc2V0X2RvX2R5bmxvY2tfY2FsbGJhY2s7Ci0rCQlGSVBTX3JuZ19zdGljazsKLSsJCUVWUF9DSVBIRVJfQ1RYX3NldF9mbGFnczsKLSsJCUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXg7Ci0rCQlGSVBTX3NlbGZ0ZXN0X2NoZWNrOwotKwkJRklQU19yYW5kX3NldF9kdDsKLSsJCUNSWVBUT19kYmdfcG9wX2luZm87Ci0rCQlGSVBTX2RzYV9mcmVlOwotKwkJUlNBX1g5MzFfZGVyaXZlX2V4OwotKwkJRklQU19yc2FfbmV3OwotKwkJRklQU19yYW5kX2J5dGVzOwotKwkJZmlwc19jaXBoZXJfdGVzdDsKLSsJCUVWUF9DSVBIRVJfQ1RYX3Rlc3RfZmxhZ3M7Ci0rCQlDUllQVE9fbWFsbG9jX2RlYnVnX2luaXQ7Ci0rCQlDUllQVE9fZGJnX3B1c2hfaW5mbzsKLSsJCUZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuOwotKwkJRklQU19kaF9uZXc7Ci0rCQlGSVBTX2NvcnJ1cHRfZHNhX2tleWdlbjsKLSsJCUZJUFNfZGhfZnJlZTsKLSsJCWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdDsKLSsJCUVWUF9hZGRfYWxnX21vZHVsZTsKLSsJCWludF9SQU5EX2luaXRfZW5naW5lX2NhbGxiYWNrczsKLSsJCWludF9FVlBfQ0lQSEVSX3NldF9lbmdpbmVfY2FsbGJhY2tzOwotKwkJaW50X0VWUF9NRF9pbml0X2VuZ2luZV9jYWxsYmFja3M7Ci0rCQlGSVBTX3JhbmRfdGVzdF9tb2RlOwotKwkJRklQU19yYW5kX3Jlc2V0OwotKwkJRklQU19kc2FfbmV3OwotKwkJaW50X1JBTkRfc2V0X2NhbGxiYWNrczsKLSsJCUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4OwotKwkJaW50X0VSUl9saWJfaW5pdDsKLSsJCWludF9FVlBfQ0lQSEVSX2luaXRfZW5naW5lX2NhbGxiYWNrczsKLSsJCUZJUFNfcnNhX2ZyZWU7Ci0rCQlGSVBTX2RzYV9zaWdfZW5jb2RlOwotKwkJQ1JZUFRPX2RiZ19yZW1vdmVfYWxsX2luZm87Ci0rCQlPUEVOU1NMX2luaXQ7Ci0rCQlDUllQVE9fc3RyZHVwOwotKwkJSlBBS0VfU1RFUDNBX3Byb2Nlc3M7Ci0rCQlKUEFLRV9TVEVQMV9yZWxlYXNlOwotKwkJSlBBS0VfZ2V0X3NoYXJlZF9rZXk7Ci0rCQlKUEFLRV9TVEVQM0JfaW5pdDsKLSsJCUpQQUtFX1NURVAxX2dlbmVyYXRlOwotKwkJSlBBS0VfU1RFUDFfaW5pdDsKLSsJCUpQQUtFX1NURVAzQl9wcm9jZXNzOwotKwkJSlBBS0VfU1RFUDJfZ2VuZXJhdGU7Ci0rCQlKUEFLRV9DVFhfbmV3OwotKwkJSlBBS0VfQ1RYX2ZyZWU7Ci0rCQlKUEFLRV9TVEVQM0JfcmVsZWFzZTsKLSsJCUpQQUtFX1NURVAzQV9yZWxlYXNlOwotKwkJSlBBS0VfU1RFUDJfcHJvY2VzczsKLSsJCUpQQUtFX1NURVAzQl9nZW5lcmF0ZTsKLSsJCUpQQUtFX1NURVAxX3Byb2Nlc3M7Ci0rCQlKUEFLRV9TVEVQM0FfZ2VuZXJhdGU7Ci0rCQlKUEFLRV9TVEVQMl9yZWxlYXNlOwotKwkJSlBBS0VfU1RFUDNBX2luaXQ7Ci0rCQlFUlJfbG9hZF9KUEFLRV9zdHJpbmdzOwotKwkJSlBBS0VfU1RFUDJfaW5pdDsKLSsJCXBxdWV1ZV9zaXplOwotKwkJaTJkX1RTX0FDQ1VSQUNZOwotKwkJaTJkX1RTX01TR19JTVBSSU5UX2ZwOwotKwkJaTJkX1RTX01TR19JTVBSSU5UOwotKwkJRVZQX1BLRVlfcHJpbnRfcHVibGljOwotKwkJRVZQX1BLRVlfQ1RYX25ldzsKLSsJCWkyZF9UU19UU1RfSU5GTzsKLSsJCUVWUF9QS0VZX2FzbjFfZmluZDsKLSsJCURTT19NRVRIT0RfYmVvczsKLSsJCVRTX0NPTkZfbG9hZF9jZXJ0OwotKwkJVFNfUkVRX2dldF9leHQ7Ci0rCQlFVlBfUEtFWV9zaWduX2luaXQ7Ci0rCQlBU04xX2l0ZW1fcHJpbnQ7Ci0rCQlUU19UU1RfSU5GT19zZXRfbm9uY2U7Ci0rCQlUU19SRVNQX2R1cDsKLSsJCUVOR0lORV9yZWdpc3Rlcl9wa2V5X21ldGhzOwotKwkJRVZQX1BLRVlfYXNuMV9hZGQwOwotKwkJUEtDUzdfYWRkMF9hdHRyaWJfc2lnbmluZ190aW1lOwotKwkJaTJkX1RTX1RTVF9JTkZPX2ZwOwotKwkJQklPX2FzbjFfZ2V0X3ByZWZpeDsKLSsJCVRTX1RTVF9JTkZPX3NldF90aW1lOwotKwkJRVZQX1BLRVlfbWV0aF9zZXRfZGVjcnlwdDsKLSsJCUVWUF9QS0VZX3NldF90eXBlX3N0cjsKLSsJCUVWUF9QS0VZX0NUWF9nZXRfa2V5Z2VuX2luZm87Ci0rCQlUU19SRVFfc2V0X3BvbGljeV9pZDsKLSsJCWQyaV9UU19SRVNQX2ZwOwotKwkJRU5HSU5FX2dldF9wa2V5X2FzbjFfbWV0aF9lbmdpbmU7Ci0rCQlFTkdJTkVfZ2V0X3BrZXlfYXNuMV9tZXRoX2VuZzsKLSsJCVdISVJMUE9PTF9Jbml0OwotKwkJVFNfUkVTUF9zZXRfc3RhdHVzX2luZm87Ci0rCQlFVlBfUEtFWV9rZXlnZW47Ci0rCQlFVlBfRGlnZXN0U2lnbkluaXQ7Ci0rCQlUU19BQ0NVUkFDWV9zZXRfbWlsbGlzOwotKwkJVFNfUkVRX2R1cDsKLSsJCUdFTkVSQUxfTkFNRV9kdXA7Ci0rCQlBU04xX1NFUVVFTkNFX0FOWV9pdDsKLSsJCVdISVJMUE9PTDsKLSsJCVg1MDlfU1RPUkVfZ2V0MV9jcmxzOwotKwkJRU5HSU5FX2dldF9wa2V5X2FzbjFfbWV0aDsKLSsJCUVWUF9QS0VZX2FzbjFfbmV3OwotKwkJQklPX25ld19OREVGOwotKwkJRU5HSU5FX2dldF9wa2V5X21ldGg7Ci0rCQlUU19NU0dfSU1QUklOVF9zZXRfYWxnbzsKLSsJCWkyZF9UU19UU1RfSU5GT19iaW87Ci0rCQlUU19UU1RfSU5GT19zZXRfb3JkZXJpbmc7Ci0rCQlUU19UU1RfSU5GT19nZXRfZXh0X2J5X09CSjsKLSsJCUNSWVBUT19USFJFQURJRF9zZXRfcG9pbnRlcjsKLSsJCVRTX0NPTkZfZ2V0X3RzYV9zZWN0aW9uOwotKwkJU01JTUVfd3JpdGVfQVNOMTsKLSsJCVRTX1JFU1BfQ1RYX3NldF9zaWduZXJfa2V5OwotKwkJRVZQX1BLRVlfZW5jcnlwdF9vbGQ7Ci0rCQlFVlBfUEtFWV9lbmNyeXB0X2luaXQ7Ci0rCQlDUllQVE9fVEhSRUFESURfY3B5OwotKwkJQVNOMV9QQ1RYX2dldF9jZXJ0X2ZsYWdzOwotKwkJaTJkX0VTU19TSUdOSU5HX0NFUlQ7Ci0rCQlUU19DT05GX2xvYWRfa2V5OwotKwkJaTJkX0FTTjFfU0VRVUVOQ0VfQU5ZOwotKwkJZDJpX1RTX01TR19JTVBSSU5UX2JpbzsKLSsJCUVWUF9QS0VZX2FzbjFfc2V0X3B1YmxpYzsKLSsJCWIyaV9QdWJsaWNLZXlfYmlvOwotKwkJQklPX2FzbjFfc2V0X3ByZWZpeDsKLSsJCUVWUF9QS0VZX25ld19tYWNfa2V5OwotKwkJQklPX25ld19DTVM7Ci0rCQlDUllQVE9fVEhSRUFESURfY21wOwotKwkJVFNfUkVRX2V4dF9mcmVlOwotKwkJRVZQX1BLRVlfYXNuMV9zZXRfZnJlZTsKLSsJCUVWUF9QS0VZX2dldDBfYXNuMTsKLSsJCWQyaV9ORVRTQ0FQRV9YNTA5OwotKwkJRVZQX1BLRVlfdmVyaWZ5X3JlY292ZXJfaW5pdDsKLSsJCUVWUF9QS0VZX0NUWF9zZXRfZGF0YTsKLSsJCUVWUF9QS0VZX2tleWdlbl9pbml0OwotKwkJVFNfUkVTUF9DVFhfc2V0X3N0YXR1c19pbmZvOwotKwkJVFNfTVNHX0lNUFJJTlRfZ2V0X2FsZ287Ci0rCQlUU19SRVFfcHJpbnRfYmlvOwotKwkJRVZQX1BLRVlfQ1RYX2N0cmxfc3RyOwotKwkJRVZQX1BLRVlfZ2V0X2RlZmF1bHRfZGlnZXN0X25pZDsKLSsJCVBFTV93cml0ZV9iaW9fUEtDUzdfc3RyZWFtOwotKwkJVFNfTVNHX0lNUFJJTlRfcHJpbnRfYmlvOwotKwkJQk5fYXNjMmJuOwotKwkJVFNfUkVRX2dldF9wb2xpY3lfaWQ7Ci0rCQlFTkdJTkVfc2V0X2RlZmF1bHRfcGtleV9hc24xX21ldGhzOwotKwkJRU5HSU5FX3NldF9kZWZfcGtleV9hc24xX21ldGhzOwotKwkJZDJpX1RTX0FDQ1VSQUNZOwotKwkJRFNPX2dsb2JhbF9sb29rdXA7Ci0rCQlUU19DT05GX3NldF90c2FfbmFtZTsKLSsJCWkyZF9BU04xX1NFVF9BTlk7Ci0rCQlFTkdJTkVfbG9hZF9nb3N0OwotKwkJV0hJUkxQT09MX0JpdFVwZGF0ZTsKLSsJCUFTTjFfUENUWF9nZXRfZmxhZ3M7Ci0rCQlUU19UU1RfSU5GT19nZXRfZXh0X2J5X05JRDsKLSsJCVRTX1JFU1BfbmV3OwotKwkJRVNTX0NFUlRfSURfZHVwOwotKwkJVFNfU1RBVFVTX0lORk9fZHVwOwotKwkJVFNfUkVRX2RlbGV0ZV9leHQ7Ci0rCQlFVlBfRGlnZXN0VmVyaWZ5RmluYWw7Ci0rCQlFVlBfUEtFWV9wcmludF9wYXJhbXM7Ci0rCQlpMmRfQ01TX2Jpb19zdHJlYW07Ci0rCQlUU19SRVFfZ2V0X21zZ19pbXByaW50OwotKwkJT0JKX2ZpbmRfc2lnaWRfYnlfYWxnczsKLSsJCVRTX1RTVF9JTkZPX2dldF9zZXJpYWw7Ci0rCQlUU19SRVFfZ2V0X25vbmNlOwotKwkJWDUwOV9QVUJLRVlfc2V0MF9wYXJhbTsKLSsJCUVWUF9QS0VZX0NUWF9zZXQwX2tleWdlbl9pbmZvOwotKwkJRElTVF9QT0lOVF9zZXRfZHBuYW1lOwotKwkJaTJkX0lTU1VJTkdfRElTVF9QT0lOVDsKLSsJCUFTTjFfU0VUX0FOWV9pdDsKLSsJCUVWUF9QS0VZX0NUWF9nZXRfZGF0YTsKLSsJCVRTX1NUQVRVU19JTkZPX3ByaW50X2JpbzsKLSsJCUVWUF9QS0VZX2Rlcml2ZV9pbml0OwotKwkJZDJpX1RTX1RTVF9JTkZPOwotKwkJRVZQX1BLRVlfYXNuMV9hZGRfYWxpYXM7Ci0rCQlkMmlfVFNfUkVTUF9iaW87Ci0rCQlPVEhFUk5BTUVfY21wOwotKwkJR0VORVJBTF9OQU1FX3NldDBfdmFsdWU7Ci0rCQlQS0NTN19SRUNJUF9JTkZPX2dldDBfYWxnOwotKwkJVFNfUkVTUF9DVFhfbmV3OwotKwkJVFNfUkVTUF9zZXRfdHN0X2luZm87Ci0rCQlQS0NTN19maW5hbDsKLSsJCUVWUF9QS0VZX2Jhc2VfaWQ7Ci0rCQlUU19SRVNQX0NUWF9zZXRfc2lnbmVyX2NlcnQ7Ci0rCQlUU19SRVFfc2V0X21zZ19pbXByaW50OwotKwkJRVZQX1BLRVlfQ1RYX2N0cmw7Ci0rCQlUU19DT05GX3NldF9kaWdlc3RzOwotKwkJZDJpX1RTX01TR19JTVBSSU5UOwotKwkJRVZQX1BLRVlfbWV0aF9zZXRfY3RybDsKLSsJCVRTX1JFUV9nZXRfZXh0X2J5X05JRDsKLSsJCVBLQ1M1X3BiZV9zZXQwX2FsZ29yOwotKwkJQk5fQkxJTkRJTkdfdGhyZWFkX2lkOwotKwkJVFNfQUNDVVJBQ1lfbmV3OwotKwkJWDUwOV9DUkxfTUVUSE9EX2ZyZWU7Ci0rCQlBU04xX1BDVFhfZ2V0X25tX2ZsYWdzOwotKwkJRVZQX1BLRVlfbWV0aF9zZXRfc2lnbjsKLSsJCUNSWVBUT19USFJFQURJRF9jdXJyZW50OwotKwkJRVZQX1BLRVlfZGVjcnlwdF9pbml0OwotKwkJTkVUU0NBUEVfWDUwOV9mcmVlOwotKwkJaTJiX1BWS19iaW87Ci0rCQlFVlBfUEtFWV9wcmludF9wcml2YXRlOwotKwkJR0VORVJBTF9OQU1FX2dldDBfdmFsdWU7Ci0rCQliMmlfUFZLX2JpbzsKLSsJCUFTTjFfVVRDVElNRV9hZGo7Ci0rCQlUU19UU1RfSU5GT19uZXc7Ci0rCQlFVlBfTURfZG9fYWxsX3NvcnRlZDsKLSsJCVRTX0NPTkZfc2V0X2RlZmF1bHRfZW5naW5lOwotKwkJVFNfQUNDVVJBQ1lfc2V0X3NlY29uZHM7Ci0rCQlUU19UU1RfSU5GT19nZXRfdGltZTsKLSsJCVBLQ1M4X3BrZXlfZ2V0MDsKLSsJCUVWUF9QS0VZX2FzbjFfZ2V0MDsKLSsJCU9CSl9hZGRfc2lnaWQ7Ci0rCQlQS0NTN19TSUdORVJfSU5GT19zaWduOwotKwkJRVZQX1BLRVlfcGFyYW1nZW5faW5pdDsKLSsJCUVWUF9QS0VZX3NpZ247Ci0rCQlPQkpfc2lnaWRfZnJlZTsKLSsJCUVWUF9QS0VZX21ldGhfc2V0X2luaXQ7Ci0rCQlkMmlfRVNTX0lTU1VFUl9TRVJJQUw7Ci0rCQlJU1NVSU5HX0RJU1RfUE9JTlRfbmV3OwotKwkJQVNOMV9USU1FX2FkajsKLSsJCVRTX09CSl9wcmludF9iaW87Ci0rCQlFVlBfUEtFWV9tZXRoX3NldF92ZXJpZnlfcmVjb3ZlcjsKLSsJCUVWUF9QS0VZX21ldGhfc2V0X3ZyZnlfcmVjb3ZlcjsKLSsJCVRTX1JFU1BfZ2V0X3N0YXR1c19pbmZvOwotKwkJQ01TX3N0cmVhbTsKLSsJCUVWUF9QS0VZX0NUWF9zZXRfY2I7Ci0rCQlQS0NTN190b19UU19UU1RfSU5GTzsKLSsJCUFTTjFfUENUWF9nZXRfb2lkX2ZsYWdzOwotKwkJVFNfVFNUX0lORk9fYWRkX2V4dDsKLSsJCUVWUF9QS0VZX21ldGhfc2V0X2Rlcml2ZTsKLSsJCWkyZF9UU19SRVNQX2ZwOwotKwkJaTJkX1RTX01TR19JTVBSSU5UX2JpbzsKLSsJCVRTX1JFU1BfQ1RYX3NldF9hY2N1cmFjeTsKLSsJCVRTX1JFUV9zZXRfbm9uY2U7Ci0rCQlFU1NfQ0VSVF9JRF9uZXc7Ci0rCQlFTkdJTkVfcGtleV9hc24xX2ZpbmRfc3RyOwotKwkJVFNfUkVRX2dldF9leHRfY291bnQ7Ci0rCQlCVUZfcmV2ZXJzZTsKLSsJCVRTX1RTVF9JTkZPX3ByaW50X2JpbzsKLSsJCWQyaV9JU1NVSU5HX0RJU1RfUE9JTlQ7Ci0rCQlFTkdJTkVfZ2V0X3BrZXlfbWV0aHM7Ci0rCQlpMmJfUHJpdmF0ZUtleV9iaW87Ci0rCQlpMmRfVFNfUkVTUDsKLSsJCWIyaV9QdWJsaWNLZXk7Ci0rCQlUU19WRVJJRllfQ1RYX2NsZWFudXA7Ci0rCQlUU19TVEFUVVNfSU5GT19mcmVlOwotKwkJVFNfUkVTUF92ZXJpZnlfdG9rZW47Ci0rCQlPQkpfYnNlYXJjaF9leF87Ci0rCQlBU04xX2JuX3ByaW50OwotKwkJRVZQX1BLRVlfYXNuMV9nZXRfY291bnQ7Ci0rCQlFTkdJTkVfcmVnaXN0ZXJfcGtleV9hc24xX21ldGhzOwotKwkJQVNOMV9QQ1RYX3NldF9ubV9mbGFnczsKLSsJCUVWUF9EaWdlc3RWZXJpZnlJbml0OwotKwkJRU5HSU5FX3NldF9kZWZhdWx0X3BrZXlfbWV0aHM7Ci0rCQlUU19UU1RfSU5GT19nZXRfcG9saWN5X2lkOwotKwkJVFNfUkVRX2dldF9jZXJ0X3JlcTsKLSsJCVg1MDlfQ1JMX3NldF9tZXRoX2RhdGE7Ci0rCQlQS0NTOF9wa2V5X3NldDA7Ci0rCQlBU04xX1NUUklOR19jb3B5OwotKwkJZDJpX1RTX1RTVF9JTkZPX2ZwOwotKwkJWDUwOV9DUkxfbWF0Y2g7Ci0rCQlFVlBfUEtFWV9hc24xX3NldF9wcml2YXRlOwotKwkJVFNfVFNUX0lORk9fZ2V0X2V4dF9kMmk7Ci0rCQlUU19SRVNQX0NUWF9hZGRfcG9saWN5OwotKwkJZDJpX1RTX1JFU1A7Ci0rCQlUU19DT05GX2xvYWRfY2VydHM7Ci0rCQlUU19UU1RfSU5GT19nZXRfbXNnX2ltcHJpbnQ7Ci0rCQlFUlJfbG9hZF9UU19zdHJpbmdzOwotKwkJVFNfVFNUX0lORk9fZ2V0X3ZlcnNpb247Ci0rCQlFVlBfUEtFWV9DVFhfZHVwOwotKwkJRVZQX1BLRVlfbWV0aF9zZXRfdmVyaWZ5OwotKwkJaTJiX1B1YmxpY0tleV9iaW87Ci0rCQlUU19DT05GX3NldF9jZXJ0czsKLSsJCUVWUF9QS0VZX2FzbjFfZ2V0MF9pbmZvOwotKwkJVFNfVkVSSUZZX0NUWF9mcmVlOwotKwkJVFNfUkVRX2dldF9leHRfYnlfY3JpdGljYWw7Ci0rCQlUU19SRVNQX0NUWF9zZXRfc2VyaWFsX2NiOwotKwkJWDUwOV9DUkxfZ2V0X21ldGhfZGF0YTsKLSsJCVRTX1JFU1BfQ1RYX3NldF90aW1lX2NiOwotKwkJVFNfTVNHX0lNUFJJTlRfZ2V0X21zZzsKLSsJCVRTX1RTVF9JTkZPX2V4dF9mcmVlOwotKwkJVFNfUkVRX2dldF92ZXJzaW9uOwotKwkJVFNfUkVRX2FkZF9leHQ7Ci0rCQlFVlBfUEtFWV9DVFhfc2V0X2FwcF9kYXRhOwotKwkJT0JKX2JzZWFyY2hfOwotKwkJRVZQX1BLRVlfbWV0aF9zZXRfdmVyaWZ5Y3R4OwotKwkJaTJkX1BLQ1M3X2Jpb19zdHJlYW07Ci0rCQlDUllQVE9fVEhSRUFESURfc2V0X251bWVyaWM7Ci0rCQlQS0NTN19zaWduX2FkZF9zaWduZXI7Ci0rCQlkMmlfVFNfVFNUX0lORk9fYmlvOwotKwkJVFNfVFNUX0lORk9fZ2V0X29yZGVyaW5nOwotKwkJVFNfUkVTUF9wcmludF9iaW87Ci0rCQlUU19UU1RfSU5GT19nZXRfZXh0czsKLSsJCUhNQUNfQ1RYX2NvcHk7Ci0rCQlQS0NTNV9wYmUyX3NldF9pdjsKLSsJCUVOR0lORV9nZXRfcGtleV9hc24xX21ldGhzOwotKwkJYjJpX1ByaXZhdGVLZXk7Ci0rCQlFVlBfUEtFWV9DVFhfZ2V0X2FwcF9kYXRhOwotKwkJVFNfUkVRX3NldF9jZXJ0X3JlcTsKLSsJCUNSWVBUT19USFJFQURJRF9zZXRfY2FsbGJhY2s7Ci0rCQlUU19DT05GX3NldF9zZXJpYWw7Ci0rCQlUU19UU1RfSU5GT19mcmVlOwotKwkJZDJpX1RTX1JFUV9mcDsKLSsJCVRTX1JFU1BfdmVyaWZ5X3Jlc3BvbnNlOwotKwkJaTJkX0VTU19JU1NVRVJfU0VSSUFMOwotKwkJVFNfQUNDVVJBQ1lfZ2V0X3NlY29uZHM7Ci0rCQlFVlBfQ0lQSEVSX2RvX2FsbDsKLSsJCWIyaV9Qcml2YXRlS2V5X2JpbzsKLSsJCU9DU1BfQ0VSVElEX2R1cDsKLSsJCVg1MDlfUFVCS0VZX2dldDBfcGFyYW07Ci0rCQlUU19NU0dfSU1QUklOVF9kdXA7Ci0rCQlQS0NTN19wcmludF9jdHg7Ci0rCQlpMmRfVFNfUkVRX2JpbzsKLSsJCUVWUF93aGlybHBvb2w7Ci0rCQlFVlBfUEtFWV9hc24xX3NldF9wYXJhbTsKLSsJCUVWUF9QS0VZX21ldGhfc2V0X2VuY3J5cHQ7Ci0rCQlBU04xX1BDVFhfc2V0X2ZsYWdzOwotKwkJaTJkX0VTU19DRVJUX0lEOwotKwkJVFNfVkVSSUZZX0NUWF9uZXc7Ci0rCQlUU19SRVNQX0NUWF9zZXRfZXh0ZW5zaW9uX2NiOwotKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9wa2V5X21ldGhzOwotKwkJVFNfUkVTUF9DVFhfc2V0X3N0YXR1c19pbmZvX2NvbmQ7Ci0rCQlUU19SRVNQX0NUWF9zZXRfc3RhdF9pbmZvX2NvbmQ7Ci0rCQlFVlBfUEtFWV92ZXJpZnk7Ci0rCQlXSElSTFBPT0xfRmluYWw7Ci0rCQlYNTA5X0NSTF9NRVRIT0RfbmV3OwotKwkJRVZQX0RpZ2VzdFNpZ25GaW5hbDsKLSsJCVRTX1JFU1BfQ1RYX3NldF9kZWZfcG9saWN5OwotKwkJTkVUU0NBUEVfWDUwOV9pdDsKLSsJCVRTX1JFU1BfY3JlYXRlX3Jlc3BvbnNlOwotKwkJUEtDUzdfU0lHTkVSX0lORk9fZ2V0MF9hbGdzOwotKwkJVFNfVFNUX0lORk9fZ2V0X25vbmNlOwotKwkJRVZQX1BLRVlfZGVjcnlwdF9vbGQ7Ci0rCQlUU19UU1RfSU5GT19zZXRfcG9saWN5X2lkOwotKwkJVFNfQ09ORl9zZXRfZXNzX2NlcnRfaWRfY2hhaW47Ci0rCQlFVlBfUEtFWV9DVFhfZ2V0MF9wa2V5OwotKwkJZDJpX1RTX1JFUTsKLSsJCUVWUF9QS0VZX2FzbjFfZmluZF9zdHI7Ci0rCQlCSU9fZl9hc24xOwotKwkJRVNTX1NJR05JTkdfQ0VSVF9uZXc7Ci0rCQlFVlBfUEJFX2ZpbmQ7Ci0rCQlYNTA5X0NSTF9nZXQwX2J5X2NlcnQ7Ci0rCQlFVlBfUEtFWV9kZXJpdmU7Ci0rCQlpMmRfVFNfUkVROwotKwkJVFNfVFNUX0lORk9fZGVsZXRlX2V4dDsKLSsJCUVTU19JU1NVRVJfU0VSSUFMX2ZyZWU7Ci0rCQlBU04xX1BDVFhfc2V0X3N0cl9mbGFnczsKLSsJCUVOR0lORV9nZXRfcGtleV9hc24xX21ldGhfc3RyOwotKwkJVFNfQ09ORl9zZXRfc2lnbmVyX2tleTsKLSsJCVRTX0FDQ1VSQUNZX2dldF9taWxsaXM7Ci0rCQlUU19SRVNQX2dldF90b2tlbjsKLSsJCVRTX0FDQ1VSQUNZX2R1cDsKLSsJCUVOR0lORV9yZWdpc3Rlcl9hbGxfcGtleV9hc24xX21ldGhzOwotKwkJRU5HSU5FX3JlZ19hbGxfcGtleV9hc24xX21ldGhzOwotKwkJWDUwOV9DUkxfc2V0X2RlZmF1bHRfbWV0aG9kOwotKwkJQ1JZUFRPX1RIUkVBRElEX2hhc2g7Ci0rCQlDTVNfQ29udGVudEluZm9fcHJpbnRfY3R4OwotKwkJVFNfUkVTUF9mcmVlOwotKwkJSVNTVUlOR19ESVNUX1BPSU5UX2ZyZWU7Ci0rCQlFU1NfSVNTVUVSX1NFUklBTF9uZXc7Ci0rCQlDTVNfYWRkMV9jcmw7Ci0rCQlQS0NTN19hZGQxX2F0dHJpYl9kaWdlc3Q7Ci0rCQlUU19SRVNQX0NUWF9hZGRfbWQ7Ci0rCQlUU19UU1RfSU5GT19kdXA7Ci0rCQlFTkdJTkVfc2V0X3BrZXlfYXNuMV9tZXRoczsKLSsJCVBFTV93cml0ZV9iaW9fUGFyYW1ldGVyczsKLSsJCVRTX1RTVF9JTkZPX2dldF9hY2N1cmFjeTsKLSsJCVg1MDlfQ1JMX2dldDBfYnlfc2VyaWFsOwotKwkJVFNfVFNUX0lORk9fc2V0X3ZlcnNpb247Ci0rCQlUU19SRVNQX0NUWF9nZXRfdHN0X2luZm87Ci0rCQlUU19SRVNQX3ZlcmlmeV9zaWduYXR1cmU7Ci0rCQlDUllQVE9fVEhSRUFESURfZ2V0X2NhbGxiYWNrOwotKwkJVFNfVFNUX0lORk9fZ2V0X3RzYTsKLSsJCVRTX1NUQVRVU19JTkZPX25ldzsKLSsJCUVWUF9QS0VZX0NUWF9nZXRfY2I7Ci0rCQlUU19SRVFfZ2V0X2V4dF9kMmk7Ci0rCQlHRU5FUkFMX05BTUVfc2V0MF9vdGhlcm5hbWU7Ci0rCQlUU19UU1RfSU5GT19nZXRfZXh0X2NvdW50OwotKwkJVFNfUkVTUF9DVFhfZ2V0X3JlcXVlc3Q7Ci0rCQlpMmRfTkVUU0NBUEVfWDUwOTsKLSsJCUVOR0lORV9nZXRfcGtleV9tZXRoX2VuZ2luZTsKLSsJCUVWUF9QS0VZX21ldGhfc2V0X3NpZ25jdHg7Ci0rCQlFVlBfUEtFWV9hc24xX2NvcHk7Ci0rCQlBU04xX1RZUEVfY21wOwotKwkJRVZQX0NJUEhFUl9kb19hbGxfc29ydGVkOwotKwkJRVZQX1BLRVlfQ1RYX2ZyZWU7Ci0rCQlJU1NVSU5HX0RJU1RfUE9JTlRfaXQ7Ci0rCQlkMmlfVFNfTVNHX0lNUFJJTlRfZnA7Ci0rCQlYNTA5X1NUT1JFX2dldDFfY2VydHM7Ci0rCQlFVlBfUEtFWV9DVFhfZ2V0X29wZXJhdGlvbjsKLSsJCWQyaV9FU1NfU0lHTklOR19DRVJUOwotKwkJVFNfQ09ORl9zZXRfb3JkZXJpbmc7Ci0rCQlFVlBfUEJFX2FsZ19hZGRfdHlwZTsKLSsJCVRTX1JFUV9zZXRfdmVyc2lvbjsKLSsJCUVWUF9QS0VZX2dldDA7Ci0rCQlCSU9fYXNuMV9zZXRfc3VmZml4OwotKwkJaTJkX1RTX1NUQVRVU19JTkZPOwotKwkJRVZQX01EX2RvX2FsbDsKLSsJCVRTX1RTVF9JTkZPX3NldF9hY2N1cmFjeTsKLSsJCVBLQ1M3X2FkZF9hdHRyaWJfY29udGVudF90eXBlOwotKwkJRVJSX3JlbW92ZV90aHJlYWRfc3RhdGU7Ci0rCQlFVlBfUEtFWV9tZXRoX2FkZDA7Ci0rCQlUU19UU1RfSU5GT19zZXRfdHNhOwotKwkJRVZQX1BLRVlfbWV0aF9uZXc7Ci0rCQlXSElSTFBPT0xfVXBkYXRlOwotKwkJVFNfQ09ORl9zZXRfYWNjdXJhY3k7Ci0rCQlBU04xX1BDVFhfc2V0X29pZF9mbGFnczsKLSsJCUVTU19TSUdOSU5HX0NFUlRfZHVwOwotKwkJZDJpX1RTX1JFUV9iaW87Ci0rCQlYNTA5X3RpbWVfYWRqX2V4OwotKwkJVFNfUkVTUF9DVFhfYWRkX2ZsYWdzOwotKwkJZDJpX1RTX1NUQVRVU19JTkZPOwotKwkJVFNfTVNHX0lNUFJJTlRfc2V0X21zZzsKLSsJCUJJT19hc24xX2dldF9zdWZmaXg7Ci0rCQlUU19SRVFfZnJlZTsKLSsJCUVWUF9QS0VZX21ldGhfZnJlZTsKLSsJCVRTX1JFUV9nZXRfZXh0czsKLSsJCVRTX1JFU1BfQ1RYX3NldF9jbG9ja19wcmVjaXNpb25fZGlnaXRzOwotKwkJVFNfUkVTUF9DVFhfc2V0X2Nsa19wcmVjX2RpZ2l0czsKLSsJCVRTX1JFU1BfQ1RYX2FkZF9mYWlsdXJlX2luZm87Ci0rCQlpMmRfVFNfUkVTUF9iaW87Ci0rCQlFVlBfUEtFWV9DVFhfZ2V0MF9wZWVya2V5OwotKwkJUEVNX3dyaXRlX2Jpb19DTVNfc3RyZWFtOwotKwkJVFNfUkVRX25ldzsKLSsJCVRTX01TR19JTVBSSU5UX25ldzsKLSsJCUVWUF9QS0VZX21ldGhfZmluZDsKLSsJCUVWUF9QS0VZX2lkOwotKwkJVFNfVFNUX0lORk9fc2V0X3NlcmlhbDsKLSsJCWEyaV9HRU5FUkFMX05BTUU7Ci0rCQlUU19DT05GX3NldF9jcnlwdG9fZGV2aWNlOwotKwkJRVZQX1BLRVlfdmVyaWZ5X2luaXQ7Ci0rCQlUU19DT05GX3NldF9wb2xpY2llczsKLSsJCUFTTjFfUENUWF9uZXc7Ci0rCQlFU1NfQ0VSVF9JRF9mcmVlOwotKwkJRU5HSU5FX3VucmVnaXN0ZXJfcGtleV9tZXRoczsKLSsJCVRTX01TR19JTVBSSU5UX2ZyZWU7Ci0rCQlUU19WRVJJRllfQ1RYX2luaXQ7Ci0rCQlQS0NTN19zdHJlYW07Ci0rCQlUU19SRVNQX0NUWF9zZXRfY2VydHM7Ci0rCQlUU19DT05GX3NldF9kZWZfcG9saWN5OwotKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfYWRqOwotKwkJTkVUU0NBUEVfWDUwOV9uZXc7Ci0rCQlUU19BQ0NVUkFDWV9mcmVlOwotKwkJVFNfUkVTUF9nZXRfdHN0X2luZm87Ci0rCQlFVlBfUEtFWV9kZXJpdmVfc2V0X3BlZXI7Ci0rCQlQRU1fcmVhZF9iaW9fUGFyYW1ldGVyczsKLSsJCVRTX0NPTkZfc2V0X2Nsb2NrX3ByZWNpc2lvbl9kaWdpdHM7Ci0rCQlUU19DT05GX3NldF9jbGtfcHJlY19kaWdpdHM7Ci0rCQlFU1NfSVNTVUVSX1NFUklBTF9kdXA7Ci0rCQlUU19BQ0NVUkFDWV9nZXRfbWljcm9zOwotKwkJQVNOMV9QQ1RYX2dldF9zdHJfZmxhZ3M7Ci0rCQlOQU1FX0NPTlNUUkFJTlRTX2NoZWNrOwotKwkJQVNOMV9CSVRfU1RSSU5HX2NoZWNrOwotKwkJWDUwOV9jaGVja19ha2lkOwotKwkJRU5HSU5FX3VucmVnaXN0ZXJfcGtleV9hc24xX21ldGhzOwotKwkJRU5HSU5FX3VucmVnX3BrZXlfYXNuMV9tZXRoczsKLSsJCUFTTjFfUENUWF9mcmVlOwotKwkJUEVNX3dyaXRlX2Jpb19BU04xX3N0cmVhbTsKLSsJCWkyZF9BU04xX2Jpb19zdHJlYW07Ci0rCQlUU19YNTA5X0FMR09SX3ByaW50X2JpbzsKLSsJCUVWUF9QS0VZX21ldGhfc2V0X2NsZWFudXA7Ci0rCQlFVlBfUEtFWV9hc24xX2ZyZWU7Ci0rCQlFU1NfU0lHTklOR19DRVJUX2ZyZWU7Ci0rCQlUU19UU1RfSU5GT19zZXRfbXNnX2ltcHJpbnQ7Ci0rCQlHRU5FUkFMX05BTUVfY21wOwotKwkJZDJpX0FTTjFfU0VUX0FOWTsKLSsJCUVOR0lORV9zZXRfcGtleV9tZXRoczsKLSsJCWkyZF9UU19SRVFfZnA7Ci0rCQlkMmlfQVNOMV9TRVFVRU5DRV9BTlk7Ci0rCQlHRU5FUkFMX05BTUVfZ2V0MF9vdGhlck5hbWU7Ci0rCQlkMmlfRVNTX0NFUlRfSUQ7Ci0rCQlPQkpfZmluZF9zaWdpZF9hbGdzOwotKwkJRVZQX1BLRVlfbWV0aF9zZXRfa2V5Z2VuOwotKwkJUEtDUzVfUEJLREYyX0hNQUM7Ci0rCQlFVlBfUEtFWV9wYXJhbWdlbjsKLSsJCUVWUF9QS0VZX21ldGhfc2V0X3BhcmFtZ2VuOwotKwkJQklPX25ld19QS0NTNzsKLSsJCUVWUF9QS0VZX3ZlcmlmeV9yZWNvdmVyOwotKwkJVFNfZXh0X3ByaW50X2JpbzsKLSsJCVRTX0FTTjFfSU5URUdFUl9wcmludF9iaW87Ci0rCQljaGVja19kZWZlcjsKLSsJCURTT19wYXRoYnlhZGRyOwotKwkJRVZQX1BLRVlfc2V0X3R5cGU7Ci0rCQlUU19BQ0NVUkFDWV9zZXRfbWljcm9zOwotKwkJVFNfUkVRX3RvX1RTX1ZFUklGWV9DVFg7Ci0rCQlFVlBfUEtFWV9tZXRoX3NldF9jb3B5OwotKwkJQVNOMV9QQ1RYX3NldF9jZXJ0X2ZsYWdzOwotKwkJVFNfVFNUX0lORk9fZ2V0X2V4dDsKLSsJCUVWUF9QS0VZX2FzbjFfc2V0X2N0cmw7Ci0rCQlUU19UU1RfSU5GT19nZXRfZXh0X2J5X2NyaXRpY2FsOwotKwkJRVZQX1BLRVlfQ1RYX25ld19pZDsKLSsJCVRTX1JFUV9nZXRfZXh0X2J5X09CSjsKLSsJCVRTX0NPTkZfc2V0X3NpZ25lcl9jZXJ0OwotKwkJWDUwOV9OQU1FX2hhc2hfb2xkOwotKwkJQVNOMV9USU1FX3NldF9zdHJpbmc7Ci0rCQlFVlBfTURfZmxhZ3M7Ci0rCQlUU19SRVNQX0NUWF9mcmVlOwotKwkJRFNBcGFyYW1zX2R1cDsKLSsJCURIcGFyYW1zX2R1cDsKLSsJCU9DU1BfUkVRX0NUWF9hZGQxX2hlYWRlcjsKLSsJCU9DU1BfUkVRX0NUWF9zZXQxX3JlcTsKLSsJCVg1MDlfU1RPUkVfc2V0X3ZlcmlmeV9jYjsKLSsJCVg1MDlfU1RPUkVfQ1RYX2dldDBfY3VycmVudF9jcmw7Ci0rCQlYNTA5X1NUT1JFX0NUWF9nZXQwX3BhcmVudF9jdHg7Ci0rCQlYNTA5X1NUT1JFX0NUWF9nZXQwX2N1cnJlbnRfaXNzdWVyOwotKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MF9jdXJfaXNzdWVyOwotKwkJWDUwOV9pc3N1ZXJfbmFtZV9oYXNoX29sZDsKLSsJCVg1MDlfc3ViamVjdF9uYW1lX2hhc2hfb2xkOwotKwkJRVZQX0NJUEhFUl9DVFhfY29weTsKLSsJCVVJX21ldGhvZF9nZXRfcHJvbXB0X2NvbnN0cnVjdG9yOwotKwkJVUlfbWV0aG9kX2dldF9wcm9tcHRfY29uc3RydWN0cjsKLSsJCVVJX21ldGhvZF9zZXRfcHJvbXB0X2NvbnN0cnVjdG9yOwotKwkJVUlfbWV0aG9kX3NldF9wcm9tcHRfY29uc3RydWN0cjsKLSsJCUVWUF9yZWFkX3B3X3N0cmluZ19taW47Ci0rCQlDUllQVE9fY3RzMTI4X2VuY3J5cHQ7Ci0rCQlDUllQVE9fY3RzMTI4X2RlY3J5cHRfYmxvY2s7Ci0rCQlDUllQVE9fY2ZiMTI4XzFfZW5jcnlwdDsKLSsJCUNSWVBUT19jYmMxMjhfZW5jcnlwdDsKLSsJCUNSWVBUT19jdHIxMjhfZW5jcnlwdDsKLSsJCUNSWVBUT19vZmIxMjhfZW5jcnlwdDsKLSsJCUNSWVBUT19jdHMxMjhfZGVjcnlwdDsKLSsJCUNSWVBUT19jdHMxMjhfZW5jcnlwdF9ibG9jazsKLSsJCUNSWVBUT19jYmMxMjhfZGVjcnlwdDsKLSsJCUNSWVBUT19jZmIxMjhfZW5jcnlwdDsKLSsJCUNSWVBUT19jZmIxMjhfOF9lbmNyeXB0OwotKwkJU1NMX3JlbmVnb3RpYXRlX2FiYnJldmlhdGVkOwotKwkJVExTdjFfMV9tZXRob2Q7Ci0rCQlUTFN2MV8xX2NsaWVudF9tZXRob2Q7Ci0rCQlUTFN2MV8xX3NlcnZlcl9tZXRob2Q7Ci0rCQlTU0xfQ1RYX3NldF9zcnBfY2xpZW50X3B3ZF9jYWxsYmFjazsKLSsJCVNTTF9DVFhfc2V0X3NycF9jbGllbnRfcHdkX2NiOwotKwkJU1NMX2dldF9zcnBfZzsKLSsJCVNTTF9DVFhfc2V0X3NycF91c2VybmFtZV9jYWxsYmFjazsKLSsJCVNTTF9DVFhfc2V0X3NycF91bl9jYjsKLSsJCVNTTF9nZXRfc3JwX3VzZXJpbmZvOwotKwkJU1NMX3NldF9zcnBfc2VydmVyX3BhcmFtOwotKwkJU1NMX3NldF9zcnBfc2VydmVyX3BhcmFtX3B3OwotKwkJU1NMX2dldF9zcnBfTjsKLSsJCVNTTF9nZXRfc3JwX3VzZXJuYW1lOwotKwkJU1NMX0NUWF9zZXRfc3JwX3Bhc3N3b3JkOwotKwkJU1NMX0NUWF9zZXRfc3JwX3N0cmVuZ3RoOwotKwkJU1NMX0NUWF9zZXRfc3JwX3ZlcmlmeV9wYXJhbV9jYWxsYmFjazsKLSsJCVNTTF9DVFhfc2V0X3NycF92ZnlfcGFyYW1fY2I7Ci0rCQlTU0xfQ1RYX3NldF9zcnBfY2JfYXJnOwotKwkJU1NMX0NUWF9zZXRfc3JwX3VzZXJuYW1lOwotKwkJU1NMX0NUWF9TUlBfQ1RYX2luaXQ7Ci0rCQlTU0xfU1JQX0NUWF9pbml0OwotKwkJU1JQX0NhbGNfQV9wYXJhbTsKLSsJCVNSUF9nZW5lcmF0ZV9zZXJ2ZXJfbWFzdGVyX3NlY3JldDsKLSsJCVNSUF9nZW5fc2VydmVyX21hc3Rlcl9zZWNyZXQ7Ci0rCQlTU0xfQ1RYX1NSUF9DVFhfZnJlZTsKLSsJCVNSUF9nZW5lcmF0ZV9jbGllbnRfbWFzdGVyX3NlY3JldDsKLSsJCVNSUF9nZW5fY2xpZW50X21hc3Rlcl9zZWNyZXQ7Ci0rCQlTU0xfc3JwX3NlcnZlcl9wYXJhbV93aXRoX3VzZXJuYW1lOwotKwkJU1NMX3NycF9zZXJ2ZXJfcGFyYW1fd2l0aF91bjsKLSsJCVNTTF9TUlBfQ1RYX2ZyZWU7Ci0rCQlTU0xfc2V0X2RlYnVnOwotKwkJU1NMX1NFU1NJT05fZ2V0MF9wZWVyOwotKwkJVExTdjFfMl9jbGllbnRfbWV0aG9kOwotKwkJU1NMX1NFU1NJT05fc2V0MV9pZF9jb250ZXh0OwotKwkJVExTdjFfMl9zZXJ2ZXJfbWV0aG9kOwotKwkJU1NMX2NhY2hlX2hpdDsKLSsJCVNTTF9nZXQwX2tzc2xfY3R4OwotKwkJU1NMX3NldDBfa3NzbF9jdHg7Ci0rCQlTU0xfc2V0X3N0YXRlOwotKwkJU1NMX0NJUEhFUl9nZXRfaWQ7Ci0rCQlUTFN2MV8yX21ldGhvZDsKLSsJCWtzc2xfY3R4X2dldDBfY2xpZW50X3ByaW5jOwotKwkJU1NMX2V4cG9ydF9rZXlpbmdfbWF0ZXJpYWw7Ci0rCQlTU0xfc2V0X3Rsc2V4dF91c2Vfc3J0cDsKLSsJCVNTTF9DVFhfc2V0X25leHRfcHJvdG9zX2FkdmVydGlzZWRfY2I7Ci0rCQlTU0xfQ1RYX3NldF9uZXh0X3Byb3Rvc19hZHZfY2I7Ci0rCQlTU0xfZ2V0MF9uZXh0X3Byb3RvX25lZ290aWF0ZWQ7Ci0rCQlTU0xfZ2V0X3NlbGVjdGVkX3NydHBfcHJvZmlsZTsKLSsJCVNTTF9DVFhfc2V0X3Rsc2V4dF91c2Vfc3J0cDsKLSsJCVNTTF9zZWxlY3RfbmV4dF9wcm90bzsKLSsJCVNTTF9nZXRfc3J0cF9wcm9maWxlczsKLSsJCVNTTF9DVFhfc2V0X25leHRfcHJvdG9fc2VsZWN0X2NiOwotKwkJU1NMX0NUWF9zZXRfbmV4dF9wcm90b19zZWxfY2I7Ci0rCQlTU0xfU0VTU0lPTl9nZXRfY29tcHJlc3NfaWQ7Ci0rCi0rCQlTUlBfVkJBU0VfZ2V0X2J5X3VzZXI7Ci0rCQlTUlBfQ2FsY19zZXJ2ZXJfa2V5OwotKwkJU1JQX2NyZWF0ZV92ZXJpZmllcjsKLSsJCVNSUF9jcmVhdGVfdmVyaWZpZXJfQk47Ci0rCQlTUlBfQ2FsY191OwotKwkJU1JQX1ZCQVNFX2ZyZWU7Ci0rCQlTUlBfQ2FsY19jbGllbnRfa2V5OwotKwkJU1JQX2dldF9kZWZhdWx0X2dOOwotKwkJU1JQX0NhbGNfeDsKLSsJCVNSUF9DYWxjX0I7Ci0rCQlTUlBfVkJBU0VfbmV3OwotKwkJU1JQX2NoZWNrX2tub3duX2dOX3BhcmFtOwotKwkJU1JQX0NhbGNfQTsKLSsJCVNSUF9WZXJpZnlfQV9tb2RfTjsKLSsJCVNSUF9WQkFTRV9pbml0OwotKwkJU1JQX1ZlcmlmeV9CX21vZF9OOwotKwkJRUNfS0VZX3NldF9wdWJsaWNfa2V5X2FmZmluZV9jb29yZGluYXRlczsKLSsJCUVDX0tFWV9zZXRfcHViX2tleV9hZmZfY29vcmRzOwotKwkJRVZQX2Flc18xOTJfY3RyOwotKwkJRVZQX1BLRVlfbWV0aF9nZXQwX2luZm87Ci0rCQlFVlBfUEtFWV9tZXRoX2NvcHk7Ci0rCQlFUlJfYWRkX2Vycm9yX3ZkYXRhOwotKwkJRVZQX2Flc18xMjhfY3RyOwotKwkJRVZQX2Flc18yNTZfY3RyOwotKwkJRUNfR0ZwX25pc3RwMjI0X21ldGhvZDsKLSsJCUVDX0tFWV9nZXRfZmxhZ3M7Ci0rCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfUFNTX21nZjE7Ci0rCQlFVlBfYWVzXzEyOF94dHM7Ci0rCQlFVlBfYWVzXzI1Nl94dHM7Ci0rCQlFVlBfYWVzXzEyOF9nY207Ci0rCQlFQ19LRVlfY2xlYXJfZmxhZ3M7Ci0rCQlFQ19LRVlfc2V0X2ZsYWdzOwotKwkJRVZQX2Flc18yNTZfY2NtOwotKwkJUlNBX3ZlcmlmeV9QS0NTMV9QU1NfbWdmMTsKLSsJCUVWUF9hZXNfMTI4X2NjbTsKLSsJCUVWUF9hZXNfMTkyX2djbTsKLSsJCVg1MDlfQUxHT1Jfc2V0X21kOwotKwkJUkFORF9pbml0X2ZpcHM7Ci0rCQlFVlBfYWVzXzI1Nl9nY207Ci0rCQlFVlBfYWVzXzE5Ml9jY207Ci0rCQlDTUFDX0NUWF9jb3B5OwotKwkJQ01BQ19DVFhfZnJlZTsKLSsJCUNNQUNfQ1RYX2dldDBfY2lwaGVyX2N0eDsKLSsJCUNNQUNfQ1RYX2NsZWFudXA7Ci0rCQlDTUFDX0luaXQ7Ci0rCQlDTUFDX1VwZGF0ZTsKLSsJCUNNQUNfcmVzdW1lOwotKwkJQ01BQ19DVFhfbmV3OwotKwkJQ01BQ19GaW5hbDsKLSsJCUNSWVBUT19jdHIxMjhfZW5jcnlwdF9jdHIzMjsKLSsJCUNSWVBUT19nY20xMjhfcmVsZWFzZTsKLSsJCUNSWVBUT19jY20xMjhfZGVjcnlwdF9jY202NDsKLSsJCUNSWVBUT19jY20xMjhfZW5jcnlwdDsKLSsJCUNSWVBUT19nY20xMjhfZW5jcnlwdDsKLSsJCUNSWVBUT194dHMxMjhfZW5jcnlwdDsKLSsJCUVWUF9yYzRfaG1hY19tZDU7Ci0rCQlDUllQVE9fbmlzdGN0czEyOF9kZWNyeXB0X2Jsb2NrOwotKwkJQ1JZUFRPX2djbTEyOF9zZXRpdjsKLSsJCUNSWVBUT19uaXN0Y3RzMTI4X2VuY3J5cHQ7Ci0rCQlFVlBfYWVzXzEyOF9jYmNfaG1hY19zaGExOwotKwkJQ1JZUFRPX2djbTEyOF90YWc7Ci0rCQlDUllQVE9fY2NtMTI4X2VuY3J5cHRfY2NtNjQ7Ci0rCQlFTkdJTkVfbG9hZF9yZHJhbmQ7Ci0rCQlDUllQVE9fY2NtMTI4X3NldGl2OwotKwkJQ1JZUFRPX25pc3RjdHMxMjhfZW5jcnlwdF9ibG9jazsKLSsJCUNSWVBUT19nY20xMjhfYWFkOwotKwkJQ1JZUFRPX2NjbTEyOF9pbml0OwotKwkJQ1JZUFRPX25pc3RjdHMxMjhfZGVjcnlwdDsKLSsJCUNSWVBUT19nY20xMjhfbmV3OwotKwkJQ1JZUFRPX2NjbTEyOF90YWc7Ci0rCQlDUllQVE9fY2NtMTI4X2RlY3J5cHQ7Ci0rCQlDUllQVE9fY2NtMTI4X2FhZDsKLSsJCUNSWVBUT19nY20xMjhfaW5pdDsKLSsJCUNSWVBUT19nY20xMjhfZGVjcnlwdDsKLSsJCUVOR0lORV9sb2FkX3JzYXg7Ci0rCQlDUllQVE9fZ2NtMTI4X2RlY3J5cHRfY3RyMzI7Ci0rCQlDUllQVE9fZ2NtMTI4X2VuY3J5cHRfY3RyMzI7Ci0rCQlDUllQVE9fZ2NtMTI4X2ZpbmlzaDsKLSsJCUVWUF9hZXNfMjU2X2NiY19obWFjX3NoYTE7Ci0rCQlQS0NTNV9wYmtkZjJfc2V0OwotKwkJQ01TX2FkZDBfcmVjaXBpZW50X3Bhc3N3b3JkOwotKwkJQ01TX2RlY3J5cHRfc2V0MV9wYXNzd29yZDsKLSsJCUNNU19SZWNpcGllbnRJbmZvX3NldDBfcGFzc3dvcmQ7Ci0rCQlSQU5EX3NldF9maXBzX2RyYmdfdHlwZTsKLSsJCVg1MDlfUkVRX3NpZ25fY3R4OwotKwkJUlNBX1BTU19QQVJBTVNfbmV3OwotKwkJWDUwOV9DUkxfc2lnbl9jdHg7Ci0rCQlYNTA5X3NpZ25hdHVyZV9kdW1wOwotKwkJZDJpX1JTQV9QU1NfUEFSQU1TOwotKwkJUlNBX1BTU19QQVJBTVNfaXQ7Ci0rCQlSU0FfUFNTX1BBUkFNU19mcmVlOwotKwkJWDUwOV9zaWduX2N0eDsKLSsJCWkyZF9SU0FfUFNTX1BBUkFNUzsKLSsJCUFTTjFfaXRlbV9zaWduX2N0eDsKLSsJCUVDX0dGcF9uaXN0cDUyMV9tZXRob2Q7Ci0rCQlFQ19HRnBfbmlzdHAyNTZfbWV0aG9kOwotKwkJT1BFTlNTTF9zdGRlcnI7Ci0rCQlPUEVOU1NMX2NwdWlkX3NldHVwOwotKwkJT1BFTlNTTF9zaG93ZmF0YWw7Ci0rCQlCSU9fbmV3X2RncmFtX3NjdHA7Ci0rCQlCSU9fZGdyYW1fc2N0cF9tc2dfd2FpdGluZzsKLSsJCUJJT19kZ3JhbV9zY3RwX3dhaXRfZm9yX2RyeTsKLSsJCUJJT19zX2RhdGFncmFtX3NjdHA7Ci0rCQlCSU9fZGdyYW1faXNfc2N0cDsKLSsJCUJJT19kZ3JhbV9zY3RwX25vdGlmaWNhdGlvbl9jYjsKLSsJCUNSWVBUT19tZW1jbXA7Ci0rCQlTU0xfQ1RYX3NldF9hbHBuX3Byb3RvczsKLSsJCVNTTF9zZXRfYWxwbl9wcm90b3M7Ci0rCQlTU0xfQ1RYX3NldF9hbHBuX3NlbGVjdF9jYjsKLSsJCVNTTF9nZXQwX2FscG5fc2VsZWN0ZWQ7Ci0rCQlTU0xfQ1RYX3NldF9jdXN0b21fY2xpX2V4dDsKLSsJCVNTTF9DVFhfc2V0X2N1c3RvbV9zcnZfZXh0OwotKwkJU1NMX0NUWF9zZXRfc3J2X3N1cHBfZGF0YTsKLSsJCVNTTF9DVFhfc2V0X2NsaV9zdXBwX2RhdGE7Ci0rCQlTU0xfc2V0X2NlcnRfY2I7Ci0rCQlTU0xfQ1RYX3VzZV9zZXJ2ZXJpbmZvOwotKwkJU1NMX0NUWF91c2Vfc2VydmVyaW5mb19maWxlOwotKwkJU1NMX0NUWF9zZXRfY2VydF9jYjsKLSsJCVNTTF9DVFhfZ2V0MF9wYXJhbTsKLSsJCVNTTF9nZXQwX3BhcmFtOwotKwkJU1NMX2NlcnRzX2NsZWFyOwotKwkJRFRMU3YxXzJfbWV0aG9kOwotKwkJRFRMU3YxXzJfc2VydmVyX21ldGhvZDsKLSsJCURUTFN2MV8yX2NsaWVudF9tZXRob2Q7Ci0rCQlEVExTX21ldGhvZDsKLSsJCURUTFNfc2VydmVyX21ldGhvZDsKLSsJCURUTFNfY2xpZW50X21ldGhvZDsKLSsJCVNTTF9DVFhfZ2V0X3NzbF9tZXRob2Q7Ci0rCQlTU0xfQ1RYX2dldDBfY2VydGlmaWNhdGU7Ci0rCQlTU0xfQ1RYX2dldDBfcHJpdmF0ZWtleTsKLSsJCVNTTF9DT01QX3NldDBfY29tcHJlc3Npb25fbWV0aG9kczsKLSsJCVNTTF9DT01QX2ZyZWVfY29tcHJlc3Npb25fbWV0aG9kczsKLSsJCVNTTF9DSVBIRVJfZmluZDsKLSsJCVNTTF9pc19zZXJ2ZXI7Ci0rCQlTU0xfQ09ORl9DVFhfbmV3OwotKwkJU1NMX0NPTkZfQ1RYX2ZpbmlzaDsKLSsJCVNTTF9DT05GX0NUWF9mcmVlOwotKwkJU1NMX0NPTkZfQ1RYX3NldF9mbGFnczsKLSsJCVNTTF9DT05GX0NUWF9jbGVhcl9mbGFnczsKLSsJCVNTTF9DT05GX0NUWF9zZXQxX3ByZWZpeDsKLSsJCVNTTF9DT05GX0NUWF9zZXRfc3NsOwotKwkJU1NMX0NPTkZfQ1RYX3NldF9zc2xfY3R4OwotKwkJU1NMX0NPTkZfY21kOwotKwkJU1NMX0NPTkZfY21kX2FyZ3Y7Ci0rCQlTU0xfQ09ORl9jbWRfdmFsdWVfdHlwZTsKLSsJCVNTTF90cmFjZTsKLSsJCVNTTF9DSVBIRVJfc3RhbmRhcmRfbmFtZTsKLSsJCVNTTF9nZXRfdGxzYV9yZWNvcmRfYnluYW1lOwotKwkJQVNOMV9USU1FX2RpZmY7Ci0rCQlCSU9faGV4X3N0cmluZzsKLSsJCUNNU19SZWNpcGllbnRJbmZvX2dldDBfcGtleV9jdHg7Ci0rCQlDTVNfUmVjaXBpZW50SW5mb19lbmNyeXB0OwotKwkJQ01TX1NpZ25lckluZm9fZ2V0MF9wa2V5X2N0eDsKLSsJCUNNU19TaWduZXJJbmZvX2dldDBfbWRfY3R4OwotKwkJQ01TX1NpZ25lckluZm9fZ2V0MF9zaWduYXR1cmU7Ci0rCQlDTVNfUmVjaXBpZW50SW5mb19rYXJpX2dldDBfYWxnOwotKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9nZXQwX3Jla3M7Ci0rCQlDTVNfUmVjaXBpZW50SW5mb19rYXJpX2dldDBfb3JpZ19pZDsKLSsJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfb3JpZ19pZF9jbXA7Ci0rCQlDTVNfUmVjaXBpZW50RW5jcnlwdGVkS2V5X2dldDBfaWQ7Ci0rCQlDTVNfUmVjaXBpZW50RW5jcnlwdGVkS2V5X2NlcnRfY21wOwotKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9zZXQwX3BrZXk7Ci0rCQlDTVNfUmVjaXBpZW50SW5mb19rYXJpX2dldDBfY3R4OwotKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9kZWNyeXB0OwotKwkJQ01TX1NoYXJlZEluZm9fZW5jb2RlOwotKwkJREhfY29tcHV0ZV9rZXlfcGFkZGVkOwotKwkJZDJpX0RIeHBhcmFtczsKLSsJCWkyZF9ESHhwYXJhbXM7Ci0rCQlESF9nZXRfMTAyNF8xNjA7Ci0rCQlESF9nZXRfMjA0OF8yMjQ7Ci0rCQlESF9nZXRfMjA0OF8yNTY7Ci0rCQlESF9LREZfWDlfNDI7Ci0rCQlFQ0RIX0tERl9YOV82MjsKLSsJCUVDRFNBX01FVEhPRF9uZXc7Ci0rCQlFQ0RTQV9NRVRIT0RfZnJlZTsKLSsJCUVDRFNBX01FVEhPRF9zZXRfYXBwX2RhdGE7Ci0rCQlFQ0RTQV9NRVRIT0RfZ2V0X2FwcF9kYXRhOwotKwkJRUNEU0FfTUVUSE9EX3NldF9zaWduOwotKwkJRUNEU0FfTUVUSE9EX3NldF9zaWduX3NldHVwOwotKwkJRUNEU0FfTUVUSE9EX3NldF92ZXJpZnk7Ci0rCQlFQ0RTQV9NRVRIT0Rfc2V0X2ZsYWdzOwotKwkJRUNEU0FfTUVUSE9EX3NldF9uYW1lOwotKwkJRVZQX2Rlc19lZGUzX3dyYXA7Ci0rCQlFVlBfYWVzXzEyOF93cmFwOwotKwkJRVZQX2Flc18xOTJfd3JhcDsKLSsJCUVWUF9hZXNfMjU2X3dyYXA7Ci0rCQlFVlBfYWVzXzEyOF9jYmNfaG1hY19zaGEyNTY7Ci0rCQlFVlBfYWVzXzI1Nl9jYmNfaG1hY19zaGEyNTY7Ci0rCQlDUllQVE9fMTI4X3dyYXA7Ci0rCQlDUllQVE9fMTI4X3Vud3JhcDsKLSsJCU9DU1BfUkVRX0NUWF9uYmlvOwotKwkJT0NTUF9SRVFfQ1RYX25ldzsKLSsJCU9DU1Bfc2V0X21heF9yZXNwb25zZV9sZW5ndGg7Ci0rCQlPQ1NQX1JFUV9DVFhfaTJkOwotKwkJT0NTUF9SRVFfQ1RYX25iaW9fZDJpOwotKwkJT0NTUF9SRVFfQ1RYX2dldDBfbWVtX2JpbzsKLSsJCU9DU1BfUkVRX0NUWF9odHRwOwotKwkJUlNBX3BhZGRpbmdfYWRkX1BLQ1MxX09BRVBfbWdmMTsKLSsJCVJTQV9wYWRkaW5nX2NoZWNrX1BLQ1MxX09BRVBfbWdmMTsKLSsJCVJTQV9PQUVQX1BBUkFNU19mcmVlOwotKwkJUlNBX09BRVBfUEFSQU1TX2l0OwotKwkJUlNBX09BRVBfUEFSQU1TX25ldzsKLSsJCVNTTF9nZXRfc2lnYWxnczsKLSsJCVNTTF9nZXRfc2hhcmVkX3NpZ2FsZ3M7Ci0rCQlTU0xfY2hlY2tfY2hhaW47Ci0rCQlYNTA5X2NoYWluX3VwX3JlZjsKLSsJCVg1MDlfaHR0cF9uYmlvOwotKwkJWDUwOV9DUkxfaHR0cF9uYmlvOwotKwkJWDUwOV9SRVZPS0VEX2R1cDsKLSsJCWkyZF9yZV9YNTA5X3RiczsKLSsJCVg1MDlfZ2V0MF9zaWduYXR1cmU7Ci0rCQlYNTA5X2dldF9zaWduYXR1cmVfbmlkOwotKwkJWDUwOV9DUkxfZGlmZjsKLSsJCVg1MDlfY2hhaW5fY2hlY2tfc3VpdGViOwotKwkJWDUwOV9DUkxfY2hlY2tfc3VpdGViOwotKwkJWDUwOV9jaGVja19ob3N0OwotKwkJWDUwOV9jaGVja19lbWFpbDsKLSsJCVg1MDlfY2hlY2tfaXA7Ci0rCQlYNTA5X2NoZWNrX2lwX2FzYzsKLSsJCVg1MDlfU1RPUkVfc2V0X2xvb2t1cF9jcmxzX2NiOwotKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MF9zdG9yZTsKLSsJCVg1MDlfVkVSSUZZX1BBUkFNX3NldDFfaG9zdDsKLSsJCVg1MDlfVkVSSUZZX1BBUkFNX2FkZDFfaG9zdDsKLSsJCVg1MDlfVkVSSUZZX1BBUkFNX3NldF9ob3N0ZmxhZ3M7Ci0rCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXQwX3BlZXJuYW1lOwotKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0MV9lbWFpbDsKLSsJCVg1MDlfVkVSSUZZX1BBUkFNX3NldDFfaXA7Ci0rCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX2lwX2FzYzsKLSsJCVg1MDlfVkVSSUZZX1BBUkFNX2dldDBfbmFtZTsKLSsJCVg1MDlfVkVSSUZZX1BBUkFNX2dldF9jb3VudDsKLSsJCVg1MDlfVkVSSUZZX1BBUkFNX2dldDA7Ci0rCQlYNTA5VjNfRVhUX2ZyZWU7Ci0rCQlFQ19HUk9VUF9nZXRfbW9udF9kYXRhOwotKwkJRUNfY3VydmVfbmlkMm5pc3Q7Ci0rCQlFQ19jdXJ2ZV9uaXN0Mm5pZDsKLSsJCVBFTV93cml0ZV9iaW9fREh4cGFyYW1zOwotKwkJUEVNX3dyaXRlX0RIeHBhcmFtczsKLSsJCVNTTF9DVFhfYWRkX2NsaWVudF9jdXN0b21fZXh0OwotKwkJU1NMX0NUWF9hZGRfc2VydmVyX2N1c3RvbV9leHQ7Ci0rCQlTU0xfZXh0ZW5zaW9uX3N1cHBvcnRlZDsKLSsJCUJVRl9zdHJubGVuOwotKwkJc2tfZGVlcF9jb3B5OwotKwkJU1NMX3Rlc3RfZnVuY3Rpb25zOwotKwotKwlsb2NhbDoKLSsJCSo7Ci0rfTsKLSsKLStPUEVOU1NMXzEuMC4yZyB7Ci0rICAgICAgIGdsb2JhbDoKLSsgICAgICAgICAgICAgICBTUlBfVkJBU0VfZ2V0MV9ieV91c2VyOwotKyAgICAgICAgICAgICAgIFNSUF91c2VyX3B3ZF9mcmVlOwotK30gT1BFTlNTTF8xLjAuMmQ7Ci0rCi1JbmRleDogb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvZW5naW5lcy9vcGVuc3NsLmxkCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCi0rKysgb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvZW5naW5lcy9vcGVuc3NsLmxkCTIwMTQtMDItMjQgMjE6MDI6MzAuMDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDEwIEBACi0rT1BFTlNTTF8xLjAuMiB7Ci0rCWdsb2JhbDoKLSsJCWJpbmRfZW5naW5lOwotKwkJdl9jaGVjazsKLSsJCU9QRU5TU0xfaW5pdDsKLSsJCU9QRU5TU0xfZmluaXNoOwotKwlsb2NhbDoKLSsJCSo7Ci0rfTsKLSsKLUluZGV4OiBvcGVuc3NsLTEuMC4yfmJldGExLm9ic29sZXRlLjAuMDQ5ODQzNjUxNTQ5MDU3NS9lbmdpbmVzL2NjZ29zdC9vcGVuc3NsLmxkCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCi0rKysgb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvZW5naW5lcy9jY2dvc3Qvb3BlbnNzbC5sZAkyMDE0LTAyLTI0IDIxOjAyOjMwLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSwxMCBAQAotK09QRU5TU0xfMS4wLjIgewotKwlnbG9iYWw6Ci0rCQliaW5kX2VuZ2luZTsKLSsJCXZfY2hlY2s7Ci0rCQlPUEVOU1NMX2luaXQ7Ci0rCQlPUEVOU1NMX2ZpbmlzaDsKLSsJbG9jYWw6Ci0rCQkqOwotK307Ci0rCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZml4LWNpcGhlci1kZXMtZWRlMy1jZmIxLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2ZpeC1jaXBoZXItZGVzLWVkZTMtY2ZiMS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEzMThhNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZml4LWNpcGhlci1kZXMtZWRlMy1jZmIxLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKLQotVGhpcyBwYXRjaCBhZGRzIHRoZSBmaXggZm9yIG9uZSBvZiB0aGUgY2lwaGVycyB1c2VkIGluIG9wZW5zc2wsIG5hbWVseQotdGhlIGNpcGhlciBkZXMtZWRlMy1jZmIxLiBDb21wbGV0ZSBidWcgbG9nIGFuZCBwYXRjaCBpcyBwcmVzZW50IGhlcmU6Ci1odHRwOi8vcnQub3BlbnNzbC5vcmcvVGlja2V0L0Rpc3BsYXkuaHRtbD9pZD0yODY3Ci0KLVNpZ25lZC1vZmYtYnk6IE11aGFtbWFkIFNoYWtlZWwgPG11aGFtbWFkX3NoYWtlZWxAbWVudG9yLmNvbT4KLQotSW5kZXg6IG9wZW5zc2wtMS4wLjIvY3J5cHRvL2V2cC9lX2RlczMuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9jcnlwdG8vZXZwL2VfZGVzMy5jCi0rKysgb3BlbnNzbC0xLjAuMi9jcnlwdG8vZXZwL2VfZGVzMy5jCi1AQCAtMjExLDcgKzIxMSw3IEBAIHN0YXRpYyBpbnQgZGVzX2VkZTNfY2ZiMV9jaXBoZXIoRVZQX0NJUEgKLSAgICAgc2l6ZV90IG47Ci0gICAgIHVuc2lnbmVkIGNoYXIgY1sxXSwgZFsxXTsKLSAKLS0gICAgZm9yIChuID0gMDsgbiA8IGlubDsgKytuKSB7Ci0rICAgIGZvciAobiA9IDA7IG4gKiA4IDwgaW5sOyArK24pIHsKLSAgICAgICAgIGNbMF0gPSAoaW5bbiAvIDhdICYgKDEgPDwgKDcgLSBuICUgOCkpKSA/IDB4ODAgOiAwOwotICAgICAgICAgREVTX2VkZTNfY2ZiX2VuY3J5cHQoYywgZCwgMSwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhKGN0eCktPmtzMSwgJmRhdGEoY3R4KS0+a3MyLApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2wtYXZvaWQtTlVMTC1wb2ludGVyLWRlcmVmZXJlbmNlLWluLUVWUF9EaWdlc3RJbml0X2V4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2wtYXZvaWQtTlVMTC1wb2ludGVyLWRlcmVmZXJlbmNlLWluLUVWUF9EaWdlc3RJbml0X2V4LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzM2ZTVjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsLWF2b2lkLU5VTEwtcG9pbnRlci1kZXJlZmVyZW5jZS1pbi1FVlBfRGlnZXN0SW5pdF9leC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLW9wZW5zc2w6IGF2b2lkIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBFVlBfRGlnZXN0SW5pdF9leCgpCi0KLVdlIHNob3VsZCBhdm9pZCBhY2Nlc3NpbmcgdGhlIHR5cGUgcG9pbnRlciBpZiBpdCdzIE5VTEwsCi10aGlzIGNvdWxkIGhhcHBlbiBpZiBjdHgtPmRpZ2VzdCBpcyBub3QgTlVMTC4KLQotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKLWh0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9vcGVuc3NsLWRldkBvcGVuc3NsLm9yZy9tc2czMjg2MC5odG1sCi0KLVNpZ25lZC1vZmYtYnk6IFh1ZmVuZyBaaGFuZyA8eHVmZW5nLnpoYW5nQHdpbmRyaXZlci5jb20+Ci0tLS0KLUluZGV4OiBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZXZwL2RpZ2VzdC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gb3BlbnNzbC0xLjAuMmgub3JpZy9jcnlwdG8vZXZwL2RpZ2VzdC5jCi0rKysgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2V2cC9kaWdlc3QuYwotQEAgLTIxMSw3ICsyMTEsNyBAQCBpbnQgRVZQX0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjCi0gICAgICAgICB0eXBlID0gY3R4LT5kaWdlc3Q7Ci0gICAgIH0KLSAjZW5kaWYKLS0gICAgaWYgKGN0eC0+ZGlnZXN0ICE9IHR5cGUpIHsKLSsgICAgaWYgKHR5cGUgJiYgKGN0eC0+ZGlnZXN0ICE9IHR5cGUpKSB7Ci0gICAgICAgICBpZiAoY3R4LT5kaWdlc3QgJiYgY3R4LT5kaWdlc3QtPmN0eF9zaXplKSB7Ci0gICAgICAgICAgICAgT1BFTlNTTF9mcmVlKGN0eC0+bWRfZGF0YSk7Ci0gICAgICAgICAgICAgY3R4LT5tZF9kYXRhID0gTlVMTDsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9wYXJhbGxlbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9wYXJhbGxlbC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNmNGM5OS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvcGFyYWxsZWwucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMzcgKzAsMCBAQAotRml4IHRoZSBwYXJhbGxlbCByYWNlcyBpbiB0aGUgTWFrZWZpbGVzLgotCi1UaGlzIHBhdGNoIHdhcyB0YWtlbiBmcm9tIHRoZSBHZW50b28gcGFja2FnaW5nOgotaHR0cHM6Ly9naXR3ZWIuZ2VudG9vLm9yZy9yZXBvL2dlbnRvby5naXQvcGxhaW4vZGV2LWxpYnMvb3BlbnNzbC9maWxlcy9vcGVuc3NsLTEuMC4yZy1wYXJhbGxlbC1idWlsZC5wYXRjaAotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLVNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+Ci0KLVJlZnJlc2hlZCBmb3IgMS4wLjJpCi1TaWduZWQtb2ZmLWJ5OiBQYXRyaWNrIE9obHkgPHBhdHJpY2sub2hseUBpbnRlbC5jb20+Ci0KLS0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vTWFrZWZpbGUKLSsrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vTWFrZWZpbGUKLUBAIC04NSwxMSArODUsMTEgQEAKLSAJQGlmIFsgLXogIiQoVEhJUykiIF07IHRoZW4gJChNQUtFKSAtZiAkKFRPUCkvTWFrZWZpbGUgcmVmbGVjdCBUSElTPSRAOyBmaQotIAotIHN1YmRpcnM6Ci0tCUB0YXJnZXQ9YWxsOyAkKFJFQ1VSU0lWRV9NQUtFKQotKwkrQHRhcmdldD1hbGw7ICQoUkVDVVJTSVZFX01BS0UpCi0gCi0gZmlsZXM6Ci0gCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgIkNQVUlEX09CSj0kKENQVUlEX09CSikiIE1ha2VmaWxlID4+ICQoVE9QKS9NSU5GTwotLQlAdGFyZ2V0PWZpbGVzOyAkKFJFQ1VSU0lWRV9NQUtFKQotKwkrQHRhcmdldD1maWxlczsgJChSRUNVUlNJVkVfTUFLRSkKLSAKLSBsaW5rczoKLSAJQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQotQEAgLTEwMCw3ICsxMDAsNyBAQAotICMgbGliOiAkKExJQik6IGFyZSBzcGxpdHRlZCB0byBhdm9pZCBlbmQtbGVzcyBsb29wCi0gbGliOgkkKExJQikKLSAJQHRvdWNoIGxpYgotLSQoTElCKToJJChMSUJPQkopCi0rJChMSUIpOgkkKExJQk9CSikgfCBzdWJkaXJzCi0gCSQoQVIpICQoTElCKSAkKExJQk9CSikKLSAJdGVzdCAteiAiJChGSVBTTElCRElSKSIgfHwgJChBUikgJChMSUIpICQoRklQU0xJQkRJUilmaXBzY2FuaXN0ZXIubwotIAkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KLUBAIC0xMTEsNyArMTExLDcgQEAKLSAJZmkKLSAKLSBsaWJzOgotLQlAdGFyZ2V0PWxpYjsgJChSRUNVUlNJVkVfTUFLRSkKLSsJK0B0YXJnZXQ9bGliOyAkKFJFQ1VSU0lWRV9NQUtFKQotIAotIGluc3RhbGw6Ci0gCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KLUBAIC0xMjAsNyArMTIwLDcgQEAKLSAJKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAotIAljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotIAlkb25lOwotLQlAdGFyZ2V0PWluc3RhbGw7ICQoUkVDVVJTSVZFX01BS0UpCi0rCStAdGFyZ2V0PWluc3RhbGw7ICQoUkVDVVJTSVZFX01BS0UpCi0gCi0gbGludDoKLSAJQHRhcmdldD1saW50OyAkKFJFQ1VSU0lWRV9NQUtFKQotLS0tIG9wZW5zc2wtMS4wLjJnL2VuZ2luZXMvTWFrZWZpbGUKLSsrKyBvcGVuc3NsLTEuMC4yZy9lbmdpbmVzL01ha2VmaWxlCi1AQCAtNzIsNyArNzIsNyBAQAotIAotIGFsbDoJbGliIHN1YmRpcnMKLSAKLS1saWI6CSQoTElCT0JKKQotK2xpYjoJJChMSUJPQkopIHwgc3ViZGlycwotIAlAaWYgWyAtbiAiJChTSEFSRURfTElCUykiIF07IHRoZW4gXAotIAkJc2V0IC1lOyBcCi0gCQlmb3IgbCBpbiAkKExJQk5BTUVTKTsgZG8gXAotQEAgLTg5LDcgKzg5LDcgQEAKLSAKLSBzdWJkaXJzOgotIAllY2hvICQoRURJUlMpCi0tCUB0YXJnZXQ9YWxsOyAkKFJFQ1VSU0lWRV9NQUtFKQotKwkrQHRhcmdldD1hbGw7ICQoUkVDVVJTSVZFX01BS0UpCi0gCi0gZmlsZXM6Ci0gCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCi1AQCAtMTI4LDcgKzEyOCw3IEBACi0gCQkJICBtdiAtZiAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL2VuZ2luZXMvJCRwZngkJGwkJHNmeC5uZXcgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQkcGZ4JCRsJCRzZnggKTsgXAotIAkJZG9uZTsgXAotIAlmaQotLQlAdGFyZ2V0PWluc3RhbGw7ICQoUkVDVVJTSVZFX01BS0UpCi0rCStAdGFyZ2V0PWluc3RhbGw7ICQoUkVDVVJTSVZFX01BS0UpCi0gCi0gdGFnczoKLSAJY3RhZ3MgJChTUkMpCi0tLS0gb3BlbnNzbC0xLjAuMmcvTWFrZWZpbGUub3JnCi0rKysgb3BlbnNzbC0xLjAuMmcvTWFrZWZpbGUub3JnCi1AQCAtMjc5LDE3ICsyNzksMTcgQEAKLSBidWlsZF9saWJzc2w6IGJ1aWxkX3NzbCBsaWJzc2wucGMKLSAKLSBidWlsZF9jcnlwdG86Ci0tCUBkaXI9Y3J5cHRvOyB0YXJnZXQ9YWxsOyAkKEJVSUxEX09ORV9DTUQpCi0rCStAZGlyPWNyeXB0bzsgdGFyZ2V0PWFsbDsgJChCVUlMRF9PTkVfQ01EKQotIGJ1aWxkX3NzbDogYnVpbGRfY3J5cHRvCi0tCUBkaXI9c3NsOyB0YXJnZXQ9YWxsOyAkKEJVSUxEX09ORV9DTUQpCi0rCStAZGlyPXNzbDsgdGFyZ2V0PWFsbDsgJChCVUlMRF9PTkVfQ01EKQotIGJ1aWxkX2VuZ2luZXM6IGJ1aWxkX2NyeXB0bwotLQlAZGlyPWVuZ2luZXM7IHRhcmdldD1hbGw7ICQoQlVJTERfT05FX0NNRCkKLSsJK0BkaXI9ZW5naW5lczsgdGFyZ2V0PWFsbDsgJChCVUlMRF9PTkVfQ01EKQotIGJ1aWxkX2FwcHM6IGJ1aWxkX2xpYnMKLS0JQGRpcj1hcHBzOyB0YXJnZXQ9YWxsOyAkKEJVSUxEX09ORV9DTUQpCi0rCStAZGlyPWFwcHM7IHRhcmdldD1hbGw7ICQoQlVJTERfT05FX0NNRCkKLSBidWlsZF90ZXN0czogYnVpbGRfbGlicwotLQlAZGlyPXRlc3Q7IHRhcmdldD1hbGw7ICQoQlVJTERfT05FX0NNRCkKLSsJK0BkaXI9dGVzdDsgdGFyZ2V0PWFsbDsgJChCVUlMRF9PTkVfQ01EKQotIGJ1aWxkX3Rvb2xzOiBidWlsZF9saWJzCi0tCUBkaXI9dG9vbHM7IHRhcmdldD1hbGw7ICQoQlVJTERfT05FX0NNRCkKLSsJK0BkaXI9dG9vbHM7IHRhcmdldD1hbGw7ICQoQlVJTERfT05FX0NNRCkKLSAKLSBhbGxfdGVzdGFwcHM6IGJ1aWxkX2xpYnMgYnVpbGRfdGVzdGFwcHMKLSBidWlsZF90ZXN0YXBwczoKLUBAIC01NDQsNyArNTQ0LDcgQEAKLSAJKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAotIAljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotIAlkb25lOwotLQlAc2V0IC1lOyB0YXJnZXQ9aW5zdGFsbDsgJChSRUNVUlNJVkVfQlVJTERfQ01EKQotKwkrQHNldCAtZTsgdGFyZ2V0PWluc3RhbGw7ICQoUkVDVVJTSVZFX0JVSUxEX0NNRCkKLSAJQHNldCAtZTsgbGlibGlzdD0iJChMSUJTKSI7IGZvciBpIGluICQkbGlibGlzdCA7XAotIAlkbyBcCi0gCQlpZiBbIC1mICIkJGkiIF07IHRoZW4gXAotLS0tIG9wZW5zc2wtMS4wLjJnL01ha2VmaWxlLnNoYXJlZAotKysrIG9wZW5zc2wtMS4wLjJnL01ha2VmaWxlLnNoYXJlZAotQEAgLTEwNSw2ICsxMDUsNyBAQAotICAgICBTSEFSRURGTEFHUz0iJCR7U0hBUkVERkxBR1M6LSQoQ0ZMQUdTKSAkKFNIQVJFRF9MREZMQUdTKX0iOyBcCi0gICAgIExJQlBBVEg9YGZvciB4IGluICQkTElCREVQUzsgZG8gZWNobyAkJHg7IGRvbmUgfCBzZWQgLWUgJ3MvXiAqLUwvLzt0JyAtZSBkIHwgdW5pcWA7IFwKLSAgICAgTElCUEFUSD1gZWNobyAkJExJQlBBVEggfCBzZWQgLWUgJ3MvIC86L2cnYDsgXAotKyAgICBbIC1lICQkU0hMSUIkJFNITElCX1NPVkVSJCRTSExJQl9TVUZGSVggXSAmJiBleGl0IDA7IFwKLSAgICAgTERfTElCUkFSWV9QQVRIPSQkTElCUEFUSDokJExEX0xJQlJBUllfUEFUSCBcCi0gICAgICQke1NIQVJFRENNRH0gJCR7U0hBUkVERkxBR1N9IFwKLSAJLW8gJCRTSExJQiQkU0hMSUJfU09WRVIkJFNITElCX1NVRkZJWCBcCi1AQCAtMTIyLDYgKzEyMyw3IEBACi0gCQkJZG9uZTsgXAotIAkJZmk7IFwKLSAJCWlmIFsgLW4gIiQkU0hMSUJfU09WRVIiIF07IHRoZW4gXAotKwkJCVsgLWUgIiQkU0hMSUIkJFNITElCX1NVRkZJWCIgXSB8fCBcCi0gCQkJKCAkKFNFVF9YKTsgcm0gLWYgJCRTSExJQiQkU0hMSUJfU1VGRklYOyBcCi0gCQkJICBsbiAtcyAkJHByZXYgJCRTSExJQiQkU0hMSUJfU1VGRklYICk7IFwKLSAJCWZpOyBcCi0tLS0gb3BlbnNzbC0xLjAuMmcvdGVzdC9NYWtlZmlsZQotKysrIG9wZW5zc2wtMS4wLjJnL3Rlc3QvTWFrZWZpbGUKLUBAIC0xNDQsNyArMTQ0LDcgQEAKLSB0YWdzOgotIAljdGFncyAkKFNSQykKLSAKLS10ZXN0czoJZXhlIGFwcHMgJChURVNUUykKLSt0ZXN0czoJZXhlICQoVEVTVFMpCi0gCi0gYXBwczoKLSAJQChjZCAuLjsgJChNQUtFKSBESVJTPWFwcHMgYWxsKQotQEAgLTQzOCwxMzYgKzQzOCwxMzYgQEAKLSAJCWxpbmtfYXBwLiQke3NobGliX3RhcmdldH0KLSAKLSAkKFJTQVRFU1QpJChFWEVfRVhUKTogJChSU0FURVNUKS5vICQoRExJQkNSWVBUTykKLS0JQHRhcmdldD0kKFJTQVRFU1QpOyAkKEJVSUxEX0NNRCkKLSsJK0B0YXJnZXQ9JChSU0FURVNUKTsgJChCVUlMRF9DTUQpCi0gCi0gJChCTlRFU1QpJChFWEVfRVhUKTogJChCTlRFU1QpLm8gJChETElCQ1JZUFRPKQotLQlAdGFyZ2V0PSQoQk5URVNUKTsgJChCVUlMRF9DTUQpCi0rCStAdGFyZ2V0PSQoQk5URVNUKTsgJChCVUlMRF9DTUQpCi0gCi0gJChFQ1RFU1QpJChFWEVfRVhUKTogJChFQ1RFU1QpLm8gJChETElCQ1JZUFRPKQotLQlAdGFyZ2V0PSQoRUNURVNUKTsgJChCVUlMRF9DTUQpCi0rCStAdGFyZ2V0PSQoRUNURVNUKTsgJChCVUlMRF9DTUQpCi0gCi0gJChFWFBURVNUKSQoRVhFX0VYVCk6ICQoRVhQVEVTVCkubyAkKERMSUJDUllQVE8pCi0tCUB0YXJnZXQ9JChFWFBURVNUKTsgJChCVUlMRF9DTUQpCi0rCStAdGFyZ2V0PSQoRVhQVEVTVCk7ICQoQlVJTERfQ01EKQotIAotICQoSURFQVRFU1QpJChFWEVfRVhUKTogJChJREVBVEVTVCkubyAkKERMSUJDUllQVE8pCi0tCUB0YXJnZXQ9JChJREVBVEVTVCk7ICQoQlVJTERfQ01EKQotKwkrQHRhcmdldD0kKElERUFURVNUKTsgJChCVUlMRF9DTUQpCi0gCi0gJChNRDJURVNUKSQoRVhFX0VYVCk6ICQoTUQyVEVTVCkubyAkKERMSUJDUllQVE8pCi0tCUB0YXJnZXQ9JChNRDJURVNUKTsgJChCVUlMRF9DTUQpCi0rCStAdGFyZ2V0PSQoTUQyVEVTVCk7ICQoQlVJTERfQ01EKQotIAotICQoU0hBVEVTVCkkKEVYRV9FWFQpOiAkKFNIQVRFU1QpLm8gJChETElCQ1JZUFRPKQotLQlAdGFyZ2V0PSQoU0hBVEVTVCk7ICQoQlVJTERfQ01EKQotKwkrQHRhcmdldD0kKFNIQVRFU1QpOyAkKEJVSUxEX0NNRCkKLSAKLSAkKFNIQTFURVNUKSQoRVhFX0VYVCk6ICQoU0hBMVRFU1QpLm8gJChETElCQ1JZUFRPKQotLQlAdGFyZ2V0PSQoU0hBMVRFU1QpOyAkKEJVSUxEX0NNRCkKLSsJK0B0YXJnZXQ9JChTSEExVEVTVCk7ICQoQlVJTERfQ01EKQotIAotICQoU0hBMjU2VEVTVCkkKEVYRV9FWFQpOiAkKFNIQTI1NlRFU1QpLm8gJChETElCQ1JZUFRPKQotLQlAdGFyZ2V0PSQoU0hBMjU2VEVTVCk7ICQoQlVJTERfQ01EKQotKwkrQHRhcmdldD0kKFNIQTI1NlRFU1QpOyAkKEJVSUxEX0NNRCkKLSAKLSAkKFNIQTUxMlRFU1QpJChFWEVfRVhUKTogJChTSEE1MTJURVNUKS5vICQoRExJQkNSWVBUTykKLS0JQHRhcmdldD0kKFNIQTUxMlRFU1QpOyAkKEJVSUxEX0NNRCkKLSsJK0B0YXJnZXQ9JChTSEE1MTJURVNUKTsgJChCVUlMRF9DTUQpCi0gCi0gJChSTURURVNUKSQoRVhFX0VYVCk6ICQoUk1EVEVTVCkubyAkKERMSUJDUllQVE8pCi0tCUB0YXJnZXQ9JChSTURURVNUKTsgJChCVUlMRF9DTUQpCi0rCStAdGFyZ2V0PSQoUk1EVEVTVCk7ICQoQlVJTERfQ01EKQotIAotICQoTURDMlRFU1QpJChFWEVfRVhUKTogJChNREMyVEVTVCkubyAkKERMSUJDUllQVE8pCi0tCUB0YXJnZXQ9JChNREMyVEVTVCk7ICQoQlVJTERfQ01EKQotKwkrQHRhcmdldD0kKE1EQzJURVNUKTsgJChCVUlMRF9DTUQpCi0gCi0gJChNRDRURVNUKSQoRVhFX0VYVCk6ICQoTUQ0VEVTVCkubyAkKERMSUJDUllQVE8pCi0tCUB0YXJnZXQ9JChNRDRURVNUKTsgJChCVUlMRF9DTUQpCi0rCStAdGFyZ2V0PSQoTUQ0VEVTVCk7ICQoQlVJTERfQ01EKQotIAotICQoTUQ1VEVTVCkkKEVYRV9FWFQpOiAkKE1ENVRFU1QpLm8gJChETElCQ1JZUFRPKQotLQlAdGFyZ2V0PSQoTUQ1VEVTVCk7ICQoQlVJTERfQ01EKQotKwkrQHRhcmdldD0kKE1ENVRFU1QpOyAkKEJVSUxEX0NNRCkKLSAKLSAkKEhNQUNURVNUKSQoRVhFX0VYVCk6ICQoSE1BQ1RFU1QpLm8gJChETElCQ1JZUFRPKQotLQlAdGFyZ2V0PSQoSE1BQ1RFU1QpOyAkKEJVSUxEX0NNRCkKLSsJK0B0YXJnZXQ9JChITUFDVEVTVCk7ICQoQlVJTERfQ01EKQotIAotICQoV1BURVNUKSQoRVhFX0VYVCk6ICQoV1BURVNUKS5vICQoRExJQkNSWVBUTykKLS0JQHRhcmdldD0kKFdQVEVTVCk7ICQoQlVJTERfQ01EKQotKwkrQHRhcmdldD0kKFdQVEVTVCk7ICQoQlVJTERfQ01EKQotIAotICQoUkMyVEVTVCkkKEVYRV9FWFQpOiAkKFJDMlRFU1QpLm8gJChETElCQ1JZUFRPKQotLQlAdGFyZ2V0PSQoUkMyVEVTVCk7ICQoQlVJTERfQ01EKQotKwkrQHRhcmdldD0kKFJDMlRFU1QpOyAkKEJVSUxEX0NNRCkKLSAKLSAkKEJGVEVTVCkkKEVYRV9FWFQpOiAkKEJGVEVTVCkubyAkKERMSUJDUllQVE8pCi0tCUB0YXJnZXQ9JChCRlRFU1QpOyAkKEJVSUxEX0NNRCkKLSsJK0B0YXJnZXQ9JChCRlRFU1QpOyAkKEJVSUxEX0NNRCkKLSAKLSAkKENBU1RURVNUKSQoRVhFX0VYVCk6ICQoQ0FTVFRFU1QpLm8gJChETElCQ1JZUFRPKQotLQlAdGFyZ2V0PSQoQ0FTVFRFU1QpOyAkKEJVSUxEX0NNRCkKLSsJK0B0YXJnZXQ9JChDQVNUVEVTVCk7ICQoQlVJTERfQ01EKQotIAotICQoUkM0VEVTVCkkKEVYRV9FWFQpOiAkKFJDNFRFU1QpLm8gJChETElCQ1JZUFRPKQotLQlAdGFyZ2V0PSQoUkM0VEVTVCk7ICQoQlVJTERfQ01EKQotKwkrQHRhcmdldD0kKFJDNFRFU1QpOyAkKEJVSUxEX0NNRCkKLSAKLSAkKFJDNVRFU1QpJChFWEVfRVhUKTogJChSQzVURVNUKS5vICQoRExJQkNSWVBUTykKLS0JQHRhcmdldD0kKFJDNVRFU1QpOyAkKEJVSUxEX0NNRCkKLSsJK0B0YXJnZXQ9JChSQzVURVNUKTsgJChCVUlMRF9DTUQpCi0gCi0gJChERVNURVNUKSQoRVhFX0VYVCk6ICQoREVTVEVTVCkubyAkKERMSUJDUllQVE8pCi0tCUB0YXJnZXQ9JChERVNURVNUKTsgJChCVUlMRF9DTUQpCi0rCStAdGFyZ2V0PSQoREVTVEVTVCk7ICQoQlVJTERfQ01EKQotIAotICQoUkFORFRFU1QpJChFWEVfRVhUKTogJChSQU5EVEVTVCkubyAkKERMSUJDUllQVE8pCi0tCUB0YXJnZXQ9JChSQU5EVEVTVCk7ICQoQlVJTERfQ01EKQotKwkrQHRhcmdldD0kKFJBTkRURVNUKTsgJChCVUlMRF9DTUQpCi0gCi0gJChESFRFU1QpJChFWEVfRVhUKTogJChESFRFU1QpLm8gJChETElCQ1JZUFRPKQotLQlAdGFyZ2V0PSQoREhURVNUKTsgJChCVUlMRF9DTUQpCi0rCStAdGFyZ2V0PSQoREhURVNUKTsgJChCVUlMRF9DTUQpCi0gCi0gJChEU0FURVNUKSQoRVhFX0VYVCk6ICQoRFNBVEVTVCkubyAkKERMSUJDUllQVE8pCi0tCUB0YXJnZXQ9JChEU0FURVNUKTsgJChCVUlMRF9DTUQpCi0rCStAdGFyZ2V0PSQoRFNBVEVTVCk7ICQoQlVJTERfQ01EKQotIAotICQoTUVUSFRFU1QpJChFWEVfRVhUKTogJChNRVRIVEVTVCkubyAkKERMSUJDUllQVE8pCi0tCUB0YXJnZXQ9JChNRVRIVEVTVCk7ICQoQlVJTERfQ01EKQotKwkrQHRhcmdldD0kKE1FVEhURVNUKTsgJChCVUlMRF9DTUQpCi0gCi0gJChTU0xURVNUKSQoRVhFX0VYVCk6ICQoU1NMVEVTVCkubyAkKERMSUJTU0wpICQoRExJQkNSWVBUTykKLS0JQHRhcmdldD0kKFNTTFRFU1QpOyAkKEZJUFNfQlVJTERfQ01EKQotKwkrQHRhcmdldD0kKFNTTFRFU1QpOyAkKEZJUFNfQlVJTERfQ01EKQotIAotICQoRU5HSU5FVEVTVCkkKEVYRV9FWFQpOiAkKEVOR0lORVRFU1QpLm8gJChETElCQ1JZUFRPKQotLQlAdGFyZ2V0PSQoRU5HSU5FVEVTVCk7ICQoQlVJTERfQ01EKQotKwkrQHRhcmdldD0kKEVOR0lORVRFU1QpOyAkKEJVSUxEX0NNRCkKLSAKLSAkKEVWUFRFU1QpJChFWEVfRVhUKTogJChFVlBURVNUKS5vICQoRExJQkNSWVBUTykKLS0JQHRhcmdldD0kKEVWUFRFU1QpOyAkKEJVSUxEX0NNRCkKLSsJK0B0YXJnZXQ9JChFVlBURVNUKTsgJChCVUlMRF9DTUQpCi0gCi0gJChFVlBFWFRSQVRFU1QpJChFWEVfRVhUKTogJChFVlBFWFRSQVRFU1QpLm8gJChETElCQ1JZUFRPKQotLQlAdGFyZ2V0PSQoRVZQRVhUUkFURVNUKTsgJChCVUlMRF9DTUQpCi0rCStAdGFyZ2V0PSQoRVZQRVhUUkFURVNUKTsgJChCVUlMRF9DTUQpCi0gCi0gJChFQ0RTQVRFU1QpJChFWEVfRVhUKTogJChFQ0RTQVRFU1QpLm8gJChETElCQ1JZUFRPKQotLQlAdGFyZ2V0PSQoRUNEU0FURVNUKTsgJChCVUlMRF9DTUQpCi0rCStAdGFyZ2V0PSQoRUNEU0FURVNUKTsgJChCVUlMRF9DTUQpCi0gCi0gJChFQ0RIVEVTVCkkKEVYRV9FWFQpOiAkKEVDREhURVNUKS5vICQoRExJQkNSWVBUTykKLS0JQHRhcmdldD0kKEVDREhURVNUKTsgJChCVUlMRF9DTUQpCi0rCStAdGFyZ2V0PSQoRUNESFRFU1QpOyAkKEJVSUxEX0NNRCkKLSAKLSAkKElHRVRFU1QpJChFWEVfRVhUKTogJChJR0VURVNUKS5vICQoRExJQkNSWVBUTykKLS0JQHRhcmdldD0kKElHRVRFU1QpOyAkKEJVSUxEX0NNRCkKLSsJK0B0YXJnZXQ9JChJR0VURVNUKTsgJChCVUlMRF9DTUQpCi0gCi0gJChKUEFLRVRFU1QpJChFWEVfRVhUKTogJChKUEFLRVRFU1QpLm8gJChETElCQ1JZUFRPKQotLQlAdGFyZ2V0PSQoSlBBS0VURVNUKTsgJChCVUlMRF9DTUQpCi0rCStAdGFyZ2V0PSQoSlBBS0VURVNUKTsgJChCVUlMRF9DTUQpCi0gCi0gJChBU04xVEVTVCkkKEVYRV9FWFQpOiAkKEFTTjFURVNUKS5vICQoRExJQkNSWVBUTykKLS0JQHRhcmdldD0kKEFTTjFURVNUKTsgJChCVUlMRF9DTUQpCi0rCStAdGFyZ2V0PSQoQVNOMVRFU1QpOyAkKEJVSUxEX0NNRCkKLSAKLSAkKFNSUFRFU1QpJChFWEVfRVhUKTogJChTUlBURVNUKS5vICQoRExJQkNSWVBUTykKLS0JQHRhcmdldD0kKFNSUFRFU1QpOyAkKEJVSUxEX0NNRCkKLSsJK0B0YXJnZXQ9JChTUlBURVNUKTsgJChCVUlMRF9DTUQpCi0gCi0gJChWM05BTUVURVNUKSQoRVhFX0VYVCk6ICQoVjNOQU1FVEVTVCkubyAkKERMSUJDUllQVE8pCi0tCUB0YXJnZXQ9JChWM05BTUVURVNUKTsgJChCVUlMRF9DTUQpCi0rCStAdGFyZ2V0PSQoVjNOQU1FVEVTVCk7ICQoQlVJTERfQ01EKQotIAotICQoSEVBUlRCRUFUVEVTVCkkKEVYRV9FWFQpOiAkKEhFQVJUQkVBVFRFU1QpLm8gJChETElCQ1JZUFRPKQotLQlAdGFyZ2V0PSQoSEVBUlRCRUFUVEVTVCk7ICQoQlVJTERfQ01EX1NUQVRJQykKLSsJK0B0YXJnZXQ9JChIRUFSVEJFQVRURVNUKTsgJChCVUlMRF9DTURfU1RBVElDKQotIAotICQoQ09OU1RUSU1FVEVTVCkkKEVYRV9FWFQpOiAkKENPTlNUVElNRVRFU1QpLm8KLS0JQHRhcmdldD0kKENPTlNUVElNRVRFU1QpICQoQlVJTERfQ01EKQotKwkrQHRhcmdldD0kKENPTlNUVElNRVRFU1QpICQoQlVJTERfQ01EKQotIAotICQoVkVSSUZZRVhUUkFURVNUKSQoRVhFX0VYVCk6ICQoVkVSSUZZRVhUUkFURVNUKS5vCi0tCUB0YXJnZXQ9JChWRVJJRllFWFRSQVRFU1QpICQoQlVJTERfQ01EKQotKwkrQHRhcmdldD0kKFZFUklGWUVYVFJBVEVTVCkgJChCVUlMRF9DTUQpCi0gCi0gJChDTElFTlRIRUxMT1RFU1QpJChFWEVfRVhUKTogJChDTElFTlRIRUxMT1RFU1QpLm8KLS0JQHRhcmdldD0kKENMSUVOVEhFTExPVEVTVCkgJChCVUlMRF9DTUQpCi0rCStAdGFyZ2V0PSQoQ0xJRU5USEVMTE9URVNUKSAkKEJVSUxEX0NNRCkKLSAKLSAkKEJBRERUTFNURVNUKSQoRVhFX0VYVCk6ICQoQkFERFRMU1RFU1QpLm8KLS0JQHRhcmdldD0kKEJBRERUTFNURVNUKSAkKEJVSUxEX0NNRCkKLSsJK0B0YXJnZXQ9JChCQUREVExTVEVTVCkgJChCVUlMRF9DTUQpCi0gCi0gJChTU0xWMkNPTkZURVNUKSQoRVhFX0VYVCk6ICQoU1NMVjJDT05GVEVTVCkubwotLQlAdGFyZ2V0PSQoU1NMVjJDT05GVEVTVCkgJChCVUlMRF9DTUQpCi0rCStAdGFyZ2V0PSQoU1NMVjJDT05GVEVTVCkgJChCVUlMRF9DTUQpCi0gCi0gJChEVExTVEVTVCkkKEVYRV9FWFQpOiAkKERUTFNURVNUKS5vIHNzbHRlc3RsaWIubyAkKERMSUJTU0wpICQoRExJQkNSWVBUTykKLS0JQHRhcmdldD0kKERUTFNURVNUKTsgZXhvYmo9c3NsdGVzdGxpYi5vOyAkKEJVSUxEX0NNRCkKLSsJK0B0YXJnZXQ9JChEVExTVEVTVCk7IGV4b2JqPXNzbHRlc3RsaWIubzsgJChCVUlMRF9DTUQpCi0gCi0gIyQoQUVTVEVTVCkubzogJChBRVNURVNUKS5jCi0gIwkkKENDKSAtYyAkKENGTEFHUykgLURJTlRFUk1FRElBVEVfVkFMVUVfS0FUIC1EVFJBQ0VfS0FUX01DVCAkKEFFU1RFU1QpLmMKLUBAIC01ODAsNiArNTgwLDYgQEAKLSAjCWZpCi0gCi0gZHVtbXl0ZXN0JChFWEVfRVhUKTogZHVtbXl0ZXN0Lm8gJChETElCQ1JZUFRPKQotLQlAdGFyZ2V0PWR1bW15dGVzdDsgJChCVUlMRF9DTUQpCi0rCStAdGFyZ2V0PWR1bW15dGVzdDsgJChCVUlMRF9DTUQpCi0gCi0gIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9ydW4tcHRlc3QgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvcnVuLXB0ZXN0Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKaW5kZXggM2IyMGZjZS4uNjVjNmNjNwotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvcnVuLXB0ZXN0CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9ydW4tcHRlc3QKQEAgLTEsMiArMSw0IEBACiAjIS9iaW4vc2gKLW1ha2UgLWsgcnVudGVzdAorY2QgdGVzdAorT1BFTlNTTF9FTkdJTkVTPS4uL2VuZ2luZXMgQkxEVE9QPS4uIFNSQ1RPUD0uLiBwZXJsIHJ1bl90ZXN0cy5wbAorY2QgLi4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbDEwLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbDEwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2Y5N2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsMTAuaW5jCkBAIC0wLDAgKzEsMjc1IEBACitTVU1NQVJZID0gIlNlY3VyZSBTb2NrZXQgTGF5ZXIiCitERVNDUklQVElPTiA9ICJTZWN1cmUgU29ja2V0IExheWVyIChTU0wpIGJpbmFyeSBhbmQgcmVsYXRlZCBjcnlwdG9ncmFwaGljIHRvb2xzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cub3BlbnNzbC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vd3d3Lm9wZW5zc2wub3JnL25ld3MvdnVsbmVyYWJpbGl0aWVzLmh0bWwiCitTRUNUSU9OID0gImxpYnMvbmV0d29yayIKKworIyAib3BlbnNzbCB8IFNTTGVheSIgZHVhbCBsaWNlbnNlCitMSUNFTlNFID0gIm9wZW5zc2wiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1mOWE4Zjk2ODEwNzM0NWUwYjc1YWE4YzJlY2FhN2VjOCIKKworREVQRU5EUyA9ICJtYWtlZGVwZW5kLW5hdGl2ZSBob3N0cGVybC1ydW50aW1lLW5hdGl2ZSIKK0RFUEVORFNfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgb3BlbnNzbC1uYXRpdmUiCisKK1BST1ZJREVTICs9ICJvcGVuc3NsMTAiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9zb3VyY2Uvb3BlbnNzbC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICIKK1MgPSAiJHtXT1JLRElSfS9vcGVuc3NsLSR7UFZ9IgorCitQQUNLQUdFQ09ORklHID89ICJjcnlwdG9kZXYtbGludXgiCitQQUNLQUdFQ09ORklHW3BlcmxdID0gIiwsLCIKK1BBQ0tBR0VDT05GSUdbY3J5cHRvZGV2LWxpbnV4XSA9ICItREhBVkVfQ1JZUFRPREVWIC1EVVNFX0NSWVBUT0RFVl9ESUdFU1RTLCxjcnlwdG9kZXYtbGludXgiCisKK1RFUk1JT19saWJjLW11c2wgPSAiLURURVJNSU9TIgorVEVSTUlPID89ICItRFRFUk1JTyIKKyMgQXZvaWQgYmluYXJpZXMgYmVpbmcgbWFya2VkIGFzIHJlcXVpcmluZyBhbiBleGVjdXRhYmxlIHN0YWNrIHNpbmNlIGl0IAorIyBkb2Vzbid0KHdoaWNoIGNhdXNlcyBhbmQgdGhpcyBjYXVzZXMgaXNzdWVzIHdpdGggU0VMaW51eAorQ0ZMQUcgPSAiJHtAYmFzZV9jb25kaXRpb25hbCgnU0lURUlORk9fRU5ESUFOTkVTUycsICdsZScsICctRExfRU5ESUFOJywgJy1EQl9FTkRJQU4nLCBkKX0gXAorCSAke1RFUk1JT30gJHtDRkxBR1N9IC1XYWxsIC1XYSwtLW5vZXhlY3N0YWNrIgorCitleHBvcnQgRElSUyA9ICJjcnlwdG8gc3NsIGFwcHMiCitleHBvcnQgRVhfTElCUyA9ICItbGdjYyAtbGRsIgorZXhwb3J0IEFTID0gIiR7Q0N9IC1jIgorCitpbmhlcml0IHBrZ2NvbmZpZyBzaXRlaW5mbyBtdWx0aWxpYl9oZWFkZXIgcHRlc3QgcmVsYXRpdmVfc3ltbGlua3MKKworUEFDS0FHRVMgPSsgImxpYmNyeXB0byBsaWJzc2wgJHtQTn0tbWlzYyBvcGVuc3NsLWNvbmYiCitGSUxFU19saWJjcnlwdG8gPSAiJHtsaWJkaXJ9L2xpYmNyeXB0byR7U09MSUJTfSIKK0ZJTEVTX2xpYnNzbCA9ICIke2xpYmRpcn0vbGlic3NsJHtTT0xJQlN9IgorRklMRVNfJHtQTn0gPSsgIiAke2xpYmRpcn0vc3NsLyoiCitGSUxFU18ke1BOfS1taXNjID0gIiR7bGliZGlyfS9zc2wvbWlzYyIKK1JERVBFTkRTXyR7UE59LW1pc2MgPSAiJHtAYmIudXRpbHMuZmlsdGVyKCdQQUNLQUdFQ09ORklHJywgJ3BlcmwnLCBkKX0iCisKKyMgQWRkIHRoZSBvcGVuc3NsLmNuZiBmaWxlIHRvIHRoZSBvcGVuc3NsLWNvbmYgcGFja2FnZS4gIE1ha2UgdGhlIGxpYmNyeXB0bworIyBwYWNrYWdlIFJSRUNPTU1FTkRTIG9uIHRoaXMgcGFja2FnZS4gIFRoaXMgd2lsbCBlbmFibGUgdGhlIGNvbmZpZ3VyYXRpb24KKyMgZmlsZSB0byBiZSBpbnN0YWxsZWQgZm9yIGJvdGggdGhlIGJhc2Ugb3BlbnNzbCBwYWNrYWdlIGFuZCB0aGUgbGliY3J5cHRvCisjIHBhY2thZ2Ugc2luY2UgdGhlIGJhc2Ugb3BlbnNzbCBwYWNrYWdlIGRlcGVuZHMgb24gdGhlIGxpYmNyeXB0byBwYWNrYWdlLgorRklMRVNfb3BlbnNzbC1jb25mID0gIiR7c3lzY29uZmRpcn0vc3NsL29wZW5zc2wuY25mIgorQ09ORkZJTEVTX29wZW5zc2wtY29uZiA9ICIke3N5c2NvbmZkaXJ9L3NzbC9vcGVuc3NsLmNuZiIKK1JSRUNPTU1FTkRTX2xpYmNyeXB0byArPSAib3BlbnNzbC1jb25mIgorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIiR7UE59LW1pc2MgbWFrZSBwZXJsIHBlcmwtbW9kdWxlLWZpbGVoYW5kbGUgYmMiCisKKyMgUmVtb3ZlIHRoaXMgdG8gZW5hYmxlIFNTTHYzLiBTU0x2MyBpcyBkZWZhdWx0ZWQgdG8gZGlzYWJsZWQgZHVlIHRvIHRoZSBQT09ETEUKKyMgdnVsbmVyYWJpbGl0eQorRVhUUkFfT0VDT05GID0gIiAtbm8tc3NsMyIKKworZG9fY29uZmlndXJlX3ByZXBlbmRfZGFyd2luICgpIHsKKwlzZWQgLWkgLWUgJy92ZXJzaW9uLXNjcmlwdD1vcGVuc3NsXC5sZC9kJyBDb25maWd1cmUKK30KKworZG9fY29uZmlndXJlICgpIHsKKwljZCB1dGlsCisJcGVybCBwZXJscGF0aC5wbCAke1NUQUdJTkdfQklORElSX05BVElWRX0KKwljZCAuLgorCWxuIC1zZiBhcHBzL29wZW5zc2wucG9kIGNyeXB0by9jcnlwdG8ucG9kIHNzbC9zc2wucG9kIGRvYy8KKworCW9zPSR7SE9TVF9PU30KKwljYXNlICRvcyBpbgorCWxpbnV4LWdudWVhYmkgfFwKKwlsaW51eC1nbnVzcGUgfFwKKwlsaW51eC1tdXNsZWFiaSB8XAorCWxpbnV4LW11c2xzcGUgfFwKKwlsaW51eC1tdXNsICkKKwkJb3M9bGludXgKKwkJOzsKKwkJKikKKwkJOzsKKwllc2FjCisJdGFyZ2V0PSIkb3MtJHtIT1NUX0FSQ0h9IgorCWNhc2UgJHRhcmdldCBpbgorCWxpbnV4LWFybSkKKwkJdGFyZ2V0PWxpbnV4LWFybXY0CisJCTs7CisJbGludXgtYXJtZWIpCisJCXRhcmdldD1saW51eC1lbGYtYXJtZWIKKwkJOzsKKwlsaW51eC1hYXJjaDY0KikKKwkJdGFyZ2V0PWxpbnV4LWFhcmNoNjQKKwkJOzsKKwlsaW51eC1zaDMpCisJCXRhcmdldD1kZWJpYW4tc2gzCisJCTs7CisJbGludXgtc2g0KQorCQl0YXJnZXQ9ZGViaWFuLXNoNAorCQk7OworCWxpbnV4LWk0ODYpCisJCXRhcmdldD1kZWJpYW4taTM4Ni1pNDg2CisJCTs7CisJbGludXgtaTU4NiB8IGxpbnV4LXZpYWMzKQorCQl0YXJnZXQ9ZGViaWFuLWkzODYtaTU4NgorCQk7OworCWxpbnV4LWk2ODYpCisJCXRhcmdldD1kZWJpYW4taTM4Ni1pNjg2L2Ntb3YKKwkJOzsKKwlsaW51eC1nbnV4MzIteDg2XzY0IHwgbGludXgtbXVzbHgzMi14ODZfNjQgKQorCQl0YXJnZXQ9bGludXgteDMyCisJCTs7CisJbGludXgtZ251NjQteDg2XzY0KQorCQl0YXJnZXQ9bGludXgteDg2XzY0CisJCTs7CisJbGludXgtZ251bjMyLW1pcHMqZWwpCisJCXRhcmdldD1kZWJpYW4tbWlwc24zMmVsCisJCTs7CisJbGludXgtZ251bjMyLW1pcHMqKQorCQl0YXJnZXQ9ZGViaWFuLW1pcHNuMzIKKwkJOzsKKwlsaW51eC1taXBzKjY0KmVsKQorCQl0YXJnZXQ9ZGViaWFuLW1pcHM2NGVsCisJCTs7CisJbGludXgtbWlwcyo2NCopCisJCXRhcmdldD1kZWJpYW4tbWlwczY0CisJCTs7CisJbGludXgtbWlwcyplbCkKKwkJdGFyZ2V0PWRlYmlhbi1taXBzZWwKKwkJOzsKKwlsaW51eC1taXBzKikKKwkJdGFyZ2V0PWRlYmlhbi1taXBzCisJCTs7CisJbGludXgtbWljcm9ibGF6ZSp8bGludXgtbmlvczIqfGxpbnV4LWdudSppbHAzMioqKQorCQl0YXJnZXQ9bGludXgtZ2VuZXJpYzMyCisJCTs7CisJbGludXgtcG93ZXJwYykKKwkJdGFyZ2V0PWxpbnV4LXBwYworCQk7OworCWxpbnV4LXBvd2VycGM2NCkKKwkJdGFyZ2V0PWxpbnV4LXBwYzY0CisJCTs7CisJbGludXgtc3VwZXJzcGFyYykKKwkJdGFyZ2V0PWxpbnV4LXNwYXJjdjgKKwkJOzsKKwlsaW51eC1zcGFyYykKKwkJdGFyZ2V0PWxpbnV4LXNwYXJjdjgKKwkJOzsKKwlkYXJ3aW4taTM4NikKKwkJdGFyZ2V0PWRhcndpbi1pMzg2LWNjCisJCTs7CisJZXNhYworCSMgaW5qZWN0IG1hY2hpbmUtc3BlY2lmaWMgZmxhZ3MKKwlzZWQgLWkgLWUgInN8XlwoXCIkdGFyZ2V0XCIsXHMqXCJbXjpdXCtcKTpcKFteOl1cK1wpfFwxOiR7Q0ZMQUd9fGciIENvbmZpZ3VyZQorICAgICAgICB1c2VwcmVmaXg9JHtwcmVmaXh9CisgICAgICAgIGlmIFsgIngkdXNlcHJlZml4IiA9ICJ4IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgdXNlcHJlZml4PS8KKyAgICAgICAgZmkgICAgICAgIAorCXBlcmwgLi9Db25maWd1cmUgJHtFWFRSQV9PRUNPTkZ9IHNoYXJlZCAtLXByZWZpeD0kdXNlcHJlZml4IC0tb3BlbnNzbGRpcj0ke2xpYmRpcn0vc3NsIC0tbGliZGlyPWBiYXNlbmFtZSAke2xpYmRpcn1gICR0YXJnZXQKK30KKworZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLXRhcmdldCAoKSB7CisgICAgc2VkIC1pICdzL1woKE9QRU5TU0w9XCkiLioiL1wxIm9wZW5zc2wiLycgTWFrZWZpbGUKK30KKworZG9fY29tcGlsZSAoKSB7CisJb2VfcnVubWFrZSBkZXBlbmQKKwlvZV9ydW5tYWtlCit9CisKK2RvX2NvbXBpbGVfcHRlc3QgKCkgeworCSMgYnVpbGQgZGVwZW5kZW5jaWVzIGZvciB0ZXN0IGRpcmVjdG9yeSB0b28KKwlleHBvcnQgRElSUz0iJERJUlMgdGVzdCIKKwlvZV9ydW5tYWtlIGRlcGVuZAorCW9lX3J1bm1ha2UgYnVpbGR0ZXN0Cit9CisKK2RvX2luc3RhbGwgKCkgeworCSMgQ3JlYXRlICR7RH0vJHtwcmVmaXh9IHRvIGZpeCBwYXJhbGxlbCBpc3N1ZXMKKwlta2RpciAtcCAke0R9LyR7cHJlZml4fS8KKworCW9lX3J1bm1ha2UgSU5TVEFMTF9QUkVGSVg9IiR7RH0iIE1BTkRJUj0iJHttYW5kaXJ9IiBpbnN0YWxsCisKKwlvZV9saWJpbnN0YWxsIC1zbyBsaWJjcnlwdG8gJHtEfSR7bGliZGlyfQorCW9lX2xpYmluc3RhbGwgLXNvIGxpYnNzbCAke0R9JHtsaWJkaXJ9CisKKwlpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9CisJY3AgLS1kZXJlZmVyZW5jZSAtUiBpbmNsdWRlL29wZW5zc2wgJHtEfSR7aW5jbHVkZWRpcn0KKworCWluc3RhbGwgLURtIDA3NTUgJHtXT1JLRElSfS9vcGVuc3NsLWNfcmVoYXNoLnNoICR7RH0ke2JpbmRpcn0vY19yZWhhc2gKKwlzZWQgLWkgLWUgJ3MsL2V0Yy9vcGVuc3NsLCR7c3lzY29uZmRpcn0vc3NsLGcnICR7RH0ke2JpbmRpcn0vY19yZWhhc2gKKworCW9lX211bHRpbGliX2hlYWRlciBvcGVuc3NsL29wZW5zc2xjb25mLmgKKwlpZiBbICIke0BiYi51dGlscy5maWx0ZXIoJ1BBQ0tBR0VDT05GSUcnLCAncGVybCcsIGQpfSIgXTsgdGhlbgorCQlzZWQgLWkgLWUgJzFzLC4qLCMhJHtiaW5kaXJ9L2VudiBwZXJsLCcgJHtEfSR7bGliZGlyfS9zc2wvbWlzYy9DQS5wbAorCQlzZWQgLWkgLWUgJzFzLC4qLCMhJHtiaW5kaXJ9L2VudiBwZXJsLCcgJHtEfSR7bGliZGlyfS9zc2wvbWlzYy90c2dldAorCWVsc2UKKwkJcm0gLWYgJHtEfSR7bGliZGlyfS9zc2wvbWlzYy9DQS5wbCAke0R9JHtsaWJkaXJ9L3NzbC9taXNjL3RzZ2V0CisJZmkKKworCSMgQ3JlYXRlIFNTTCBzdHJ1Y3R1cmUKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3NzbC8KKwltdiAke0R9JHtsaWJkaXJ9L3NzbC9vcGVuc3NsLmNuZiBcCisJICAgJHtEfSR7bGliZGlyfS9zc2wvY2VydHMgXAorCSAgICR7RH0ke2xpYmRpcn0vc3NsL3ByaXZhdGUgXAorCSAgIFwKKwkgICAke0R9JHtzeXNjb25mZGlyfS9zc2wvCisJbG4gLXNmICR7c3lzY29uZmRpcn0vc3NsL2NlcnRzICR7RH0ke2xpYmRpcn0vc3NsL2NlcnRzCisJbG4gLXNmICR7c3lzY29uZmRpcn0vc3NsL3ByaXZhdGUgJHtEfSR7bGliZGlyfS9zc2wvcHJpdmF0ZQorCWxuIC1zZiAke3N5c2NvbmZkaXJ9L3NzbC9vcGVuc3NsLmNuZiAke0R9JHtsaWJkaXJ9L3NzbC9vcGVuc3NsLmNuZgorCisJIyBSZW5hbWUgbWFuIHBhZ2VzIHRvIHByZWZpeCBvcGVuc3NsMTAtKgorCWZvciBmIGluIGBmaW5kICR7RH0ke21hbmRpcn0gLXR5cGUgZmA7IGRvCisJICAgIG12ICRmICQoZGlybmFtZSAkZikvb3BlbnNzbDEwLSQoYmFzZW5hbWUgJGYpCisJZG9uZQorCWZvciBmIGluIGBmaW5kICR7RH0ke21hbmRpcn0gLXR5cGUgbGA7IGRvCisJICAgIGxuX2Y9YHJlYWRsaW5rICRmYAorCSAgICBybSAtZiAkZgorCSAgICBsbiAtcyBvcGVuc3NsMTAtJGxuX2YgJChkaXJuYW1lICRmKS9vcGVuc3NsMTAtJChiYXNlbmFtZSAkZikKKwlkb25lCit9CisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworCWNwIC1yIC1MIE1ha2VmaWxlLm9yZyBNYWtlZmlsZSB0ZXN0ICR7RH0ke1BURVNUX1BBVEh9CisKKyAgICAgICAgIyBSZXBsYWNlIHRoZSBwYXRoIHRvIG5hdGl2ZSBwZXJsIHdpdGggdGhlIHBhdGggdG8gdGFyZ2V0IHBlcmwKKyAgICAgICAgc2VkIC1pICdzLF5QRVJMPS4qLFBFUkw9JHtiaW5kaXJ9L3BlcmwsJyAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQorCisJY3AgQ29uZmlndXJlIGNvbmZpZyBlX29zLmggJHtEfSR7UFRFU1RfUEFUSH0KKwljcCAtciAtTCBpbmNsdWRlICR7RH0ke1BURVNUX1BBVEh9CisJbG4gLXNmICR7bGliZGlyfS9saWJjcnlwdG8uYSAke0R9JHtQVEVTVF9QQVRIfQorCWxuIC1zZiAke2xpYmRpcn0vbGlic3NsLmEgJHtEfSR7UFRFU1RfUEFUSH0KKwlta2RpciAtcCAke0R9JHtQVEVTVF9QQVRIfS9jcnlwdG8KKwljcCBjcnlwdG8vY29uc3RhbnRfdGltZV9sb2NsLmggJHtEfSR7UFRFU1RfUEFUSH0vY3J5cHRvCisJY3AgLXIgY2VydHMgJHtEfSR7UFRFU1RfUEFUSH0KKwlta2RpciAtcCAke0R9JHtQVEVTVF9QQVRIfS9hcHBzCisJbG4gLXNmICR7bGliZGlyfS9zc2wvbWlzYy9DQS5zaCAgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcworCWxuIC1zZiAke3N5c2NvbmZkaXJ9L3NzbC9vcGVuc3NsLmNuZiAke0R9JHtQVEVTVF9QQVRIfS9hcHBzCisJbG4gLXNmICR7YmluZGlyfS9vcGVuc3NsICAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcworCWNwIGFwcHMvc2VydmVyLnBlbSAgICAgICAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcworCWNwIGFwcHMvc2VydmVyMi5wZW0gICAgICAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcworCW1rZGlyIC1wICR7RH0ke1BURVNUX1BBVEh9L3V0aWwKKwlpbnN0YWxsIHV0aWwvb3BlbnNzbHdyYXAuc2ggICAgJHtEfSR7UFRFU1RfUEFUSH0vdXRpbAorCWluc3RhbGwgdXRpbC9zaGxpYl93cmFwLnNoICAgICAke0R9JHtQVEVTVF9QQVRIfS91dGlsCisJIyBUaW1lIHN0YW1wcyBhcmUgcmVsZXZhbnQgZm9yICJtYWtlIGFsbHRlc3RzIiwgb3RoZXJ3aXNlCisJIyBtYWtlIG1heSB0cnkgdG8gcmVjb21waWxlIGJpbmFyaWVzLiBOb3Qgb25seSBtdXN0IHRoZQorCSMgYmluYXJ5IGZpbGVzIGJlIG5ld2VyIHRoYW4gdGhlIHNvdXJjZXMsIHRoZXkgYWxzbyBtdXN0CisJIyBiZSBtb3JlIHJlY2VudCB0aGFuIHRoZSBoZWFkZXIgZmlsZXMgaW4gL3Vzci9pbmNsdWRlLgorCSMKKwkjIFVzaW5nICJjcCAtYSIgaXMgbm90IHN1ZmZpY2llbnQsIGJlY2F1c2UgZG9faW5zdGFsbAorCSMgZG9lcyBub3QgcHJlc2VydmUgdGhlIG9yaWdpbmFsIHRpbWUgc3RhbXBzLgorCSMKKwkjIFNvIGluc3RlYWQgb2YgdXNpbmcgdGhlIG9yaWdpbmFsIGZpbGUgc3RhbXBzLCB3ZSBzZXQKKwkjIHRoZSBjdXJyZW50IHRpbWUgZm9yIGFsbCBmaWxlcy4gQmluYXJpZXMgd2lsbCBnZXQKKwkjIG1vZGlmaWVkIGFnYWluIGxhdGVyIHdoZW4gc3RyaXBwaW5nIHRoZW0sIGJ1dCB0aGF0J3Mgb2theS4KKwl0b3VjaCAke0R9JHtQVEVTVF9QQVRIfQorCWZpbmQgJHtEfSR7UFRFU1RfUEFUSH0gLXR5cGUgZiAtcHJpbnQwIHwgeGFyZ3MgLS12ZXJib3NlIC0wIHRvdWNoIC1yICR7RH0ke1BURVNUX1BBVEh9CisKKwkjIGV4Y2x1ZGUgYmluYXJ5IGZpbGVzIG9yIHRoZSBwYWNrYWdlIHdvbid0IGluc3RhbGwKKwlmb3IgZCBpbiBzc2x0ZXN0X29sZCB2M2V4dCB4NTA5YXV4OyBkbworCQlybSAtcmYgJHtEfSR7bGliZGlyfS8ke0JQTn0vcHRlc3QvdGVzdC8kZAorCWRvbmUKKworCSMgUmVtb3ZlIGJ1aWxkIGhvc3QgcmVmZXJlbmNlcworCXNlZCAtaSBcCisgICAgICAgLWUgJ3MsLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSwsZycgXAorICAgICAgIC1lICdzfCR7REVCVUdfUFJFRklYX01BUH18fGcnIFwKKyAgICAgICAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZSAke0R9JHtQVEVTVF9QQVRIfS9Db25maWd1cmUKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vb3BlbnNzbCBcCisJICAgIE9QRU5TU0xfQ09ORj0ke2xpYmRpcn0vc3NsL29wZW5zc2wuY25mIFwKKwkgICAgU1NMX0NFUlRfRElSPSR7bGliZGlyfS9zc2wvY2VydHMgXAorCSAgICBTU0xfQ0VSVF9GSUxFPSR7bGliZGlyfS9zc2wvY2VydC5wZW0gXAorCSAgICBPUEVOU1NMX0VOR0lORVM9JHtsaWJkaXJ9L3NzbC9lbmdpbmVzCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsXzEuMC4yay5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbF8xLjAuMmsuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZDFhNTAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsXzEuMC4yay5iYgorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLXJlcXVpcmUgb3BlbnNzbC5pbmMKLQotIyBGb3IgdGFyZ2V0IHNpZGUgdmVyc2lvbnMgb2Ygb3BlbnNzbCBlbmFibGUgc3VwcG9ydCBmb3IgT0NGIExpbnV4IGRyaXZlcgotIyBpZiB0aGV5IGFyZSBhdmFpbGFibGUuCi1ERVBFTkRTICs9ICJjcnlwdG9kZXYtbGludXgiCi0KLUNGTEFHICs9ICItREhBVkVfQ1JZUFRPREVWIC1EVVNFX0NSWVBUT0RFVl9ESUdFU1RTIgotQ0ZMQUdfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgLWZQSUMiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTI3ZmZhNWQ3NGJiNWEzMzcwNTZjMTRiMmVmOTNmYmY2IgotCi1leHBvcnQgRElSUyA9ICJjcnlwdG8gc3NsIGFwcHMgZW5naW5lcyIKLWV4cG9ydCBPRV9MREZMQUdTPSIke0xERkxBR1N9IgotCi1TUkNfVVJJICs9ICJmaWxlOi8vZmluZC5wbDtzdWJkaXI9JHtCUH0vdXRpbC8gXAotICAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCi0gICAgICAgICAgICBmaWxlOi8vb3BlbnNzbC1jX3JlaGFzaC5zaCBcCi0gICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLXRhcmdldHMucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3NoYXJlZC1saWJzLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9vZS1sZGZsYWdzLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9lbmdpbmVzLWluc3RhbGwtaW4tbGliZGlyLXNzbC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vZGViaWFuMS4wLjIvYmxvY2tfZGlnaW5vdGFyLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4xLjAuMi9ibG9ja19kaWdpY2VydF9tYWxheXNpYS5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vZGViaWFuL2NhLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vY19yZWhhc2gtY29tcGF0LnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vZGViaWFuLXRhcmdldHMucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9tYW4tZGlyLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vbWFuLXNlY3Rpb24ucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9uby1ycGF0aC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vZGViaWFuL25vLXN5bWJvbGljLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vcGljLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4xLjAuMi92ZXJzaW9uLXNjcmlwdC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vZGViaWFuMS4wLjIvc29uYW1lLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9vcGVuc3NsX2ZpeF9mb3JfeDMyLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9maXgtY2lwaGVyLWRlcy1lZGUzLWNmYjEucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL29wZW5zc2wtYXZvaWQtTlVMTC1wb2ludGVyLWRlcmVmZXJlbmNlLWluLUVWUF9EaWdlc3RJbml0X2V4LnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9vcGVuc3NsLWZpeC1kZXMucG9kLWVycm9yLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZXMtcHRlc3QucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3B0ZXN0LWRlcHMucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL29wZW5zc2wtMS4wLjJhLXgzMi1hc20ucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3B0ZXN0X21ha2VmaWxlX2RlcHMucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS1tdXNsLXRhcmdldC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vcGFyYWxsZWwucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL29wZW5zc2wtdXRpbC1wZXJscGF0aC5wbC1jd2QucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL1VzZS1TSEEyNTYtbm90LU1ENS1hcy1kZWZhdWx0LWRpZ2VzdC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtYnVpbGQtd2l0aC1jbGFuZy11c2luZy1leHRlcm5hbC1hc3NlbWJsZXIucGF0Y2ggXAotICAgICAgICAgICAgIgotU1JDX1VSSVttZDVzdW1dID0gImY5NjVmYzBiZjAxYmY4ODJiMzEzMTRiNjEzOTFhZTY1IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjZiMzk3N2M2MWYyYWVkZjBmOTYzNjdkY2ZiNWM2ZTU3OGNmMzdlN2I4ZDkxM2I0ZWNiNjY0M2MzY2I4OGQ4YzAiCi0KLVBBQ0tBR0VTID0rICIke1BOfS1lbmdpbmVzIgotRklMRVNfJHtQTn0tZW5naW5lcyA9ICIke2xpYmRpcn0vc3NsL2VuZ2luZXMvKi5zbyAke2xpYmRpcn0vZW5naW5lcyIKLQotIyBUaGUgY3J5cHRvX3VzZV9iaWdpbnQgcGF0Y2ggbWVhbnMgdGhhdCBwZXJsJ3MgYmlnbnVtIG1vZHVsZSBuZWVkcyB0byBiZQotIyBpbnN0YWxsZWQsIGJ1dCBzb21lIGRpc3RyaWJ1dGlvbnMgKGZvciBleGFtcGxlIEZlZG9yYSAyMykgZG9uJ3Qgc2hpcCBpdCBieQotIyBkZWZhdWx0LiAgQXMgdGhlIHJlc3VsdGluZyBlcnJvciBpcyB2ZXJ5IG1pc2xlYWRpbmcgY2hlY2sgZm9yIGJpZ251bSBiZWZvcmUKLSMgYnVpbGRpbmcuCi1kb19jb25maWd1cmVfcHJlcGVuZCgpIHsKLQlpZiAhIHBlcmwgLU1iaWdpbnQgLWUgdHJ1ZTsgdGhlbgotCQliYmZhdGFsICJUaGUgcGVybCBtb2R1bGUgJ2JpZ251bScgd2FzIG5vdCBmb3VuZCBidXQgdGhpcyBpcyByZXF1aXJlZCB0byBidWlsZCBvcGVuc3NsLiAgUGxlYXNlIGluc3RhbGwgdGhpcyBtb2R1bGUgKG9mdGVuIHBhY2thZ2VkIGFzIHBlcmwtYmlnbnVtKSBhbmQgcmUtcnVuIGJpdGJha2UuIgotCWZpCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2xfMS4wLjJuLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsXzEuMC4ybi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjQ0NGM2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsXzEuMC4ybi5iYgpAQCAtMCwwICsxLDYwIEBACityZXF1aXJlIG9wZW5zc2wxMC5pbmMKKworIyBGb3IgdGFyZ2V0IHNpZGUgdmVyc2lvbnMgb2Ygb3BlbnNzbCBlbmFibGUgc3VwcG9ydCBmb3IgT0NGIExpbnV4IGRyaXZlcgorIyBpZiB0aGV5IGFyZSBhdmFpbGFibGUuCisKK0NGTEFHICs9ICItREhBVkVfQ1JZUFRPREVWIC1EVVNFX0NSWVBUT0RFVl9ESUdFU1RTIgorQ0ZMQUdfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgLWZQSUMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTA1N2Q5MjE4YzYxODBlMWQ5ZWU0MDc1NzJiMmRkMjI1IgorCitleHBvcnQgRElSUyA9ICJjcnlwdG8gc3NsIGFwcHMgZW5naW5lcyIKK2V4cG9ydCBPRV9MREZMQUdTPSIke0xERkxBR1N9IgorCitTUkNfVVJJICs9ICJmaWxlOi8vZmluZC5wbDtzdWJkaXI9b3BlbnNzbC0ke1BWfS91dGlsLyBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vb3BlbnNzbC1jX3JlaGFzaC5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUtdGFyZ2V0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zaGFyZWQtbGlicy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9vZS1sZGZsYWdzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2VuZ2luZXMtaW5zdGFsbC1pbi1saWJkaXItc3NsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RlYmlhbjEuMC4yL2Jsb2NrX2RpZ2lub3Rhci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4xLjAuMi9ibG9ja19kaWdpY2VydF9tYWxheXNpYS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vY2EucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGViaWFuL2NfcmVoYXNoLWNvbXBhdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vZGViaWFuLXRhcmdldHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGViaWFuL21hbi1kaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGViaWFuL21hbi1zZWN0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RlYmlhbi9uby1ycGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vbm8tc3ltYm9saWMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGViaWFuL3BpYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4xLjAuMi92ZXJzaW9uLXNjcmlwdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4xLjAuMi9zb25hbWUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb3BlbnNzbF9maXhfZm9yX3gzMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9vcGVuc3NsLWZpeC1kZXMucG9kLWVycm9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL01ha2VmaWxlcy1wdGVzdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wdGVzdC1kZXBzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL29wZW5zc2wtMS4wLjJhLXgzMi1hc20ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcHRlc3RfbWFrZWZpbGVfZGVwcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUtbXVzbC10YXJnZXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGFyYWxsZWwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb3BlbnNzbC11dGlsLXBlcmxwYXRoLnBsLWN3ZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9Vc2UtU0hBMjU2LW5vdC1NRDUtYXMtZGVmYXVsdC1kaWdlc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtYnVpbGQtd2l0aC1jbGFuZy11c2luZy1leHRlcm5hbC1hc3NlbWJsZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1vcGVuc3NsLWZvcmNlLXNvZnQtbGluay10by1hdm9pZC1yYXJlLXJhY2UucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiMTNiZGMxYjFkMWZmMzliNmZkNDJhMjU1ZTc0Njc2YTQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzcwYmFiYjc1ZjI3OGMzOWUwYzUwZThjNGU3NDkzYmMwZjE4ZGI2ODY3NDc4MzQxYTgzMmE5ODJmZDE1YThmZSIKKworUEFDS0FHRVMgPSsgIiR7UE59LWVuZ2luZXMiCitGSUxFU18ke1BOfS1lbmdpbmVzID0gIiR7bGliZGlyfS9zc2wvZW5naW5lcy8qLnNvICR7bGliZGlyfS9lbmdpbmVzIgorCisjIFRoZSBjcnlwdG9fdXNlX2JpZ2ludCBwYXRjaCBtZWFucyB0aGF0IHBlcmwncyBiaWdudW0gbW9kdWxlIG5lZWRzIHRvIGJlCisjIGluc3RhbGxlZCwgYnV0IHNvbWUgZGlzdHJpYnV0aW9ucyAoZm9yIGV4YW1wbGUgRmVkb3JhIDIzKSBkb24ndCBzaGlwIGl0IGJ5CisjIGRlZmF1bHQuICBBcyB0aGUgcmVzdWx0aW5nIGVycm9yIGlzIHZlcnkgbWlzbGVhZGluZyBjaGVjayBmb3IgYmlnbnVtIGJlZm9yZQorIyBidWlsZGluZy4KK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWlmICEgcGVybCAtTWJpZ2ludCAtZSB0cnVlOyB0aGVuCisJCWJiZmF0YWwgIlRoZSBwZXJsIG1vZHVsZSAnYmlnbnVtJyB3YXMgbm90IGZvdW5kIGJ1dCB0aGlzIGlzIHJlcXVpcmVkIHRvIGJ1aWxkIG9wZW5zc2wuICBQbGVhc2UgaW5zdGFsbCB0aGlzIG1vZHVsZSAob2Z0ZW4gcGFja2FnZWQgYXMgcGVybC1iaWdudW0pIGFuZCByZS1ydW4gYml0YmFrZS4iCisJZmkKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbF8xLjEuMGcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2xfMS4xLjBnLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NDliZmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2xfMS4xLjBnLmJiCkBAIC0wLDAgKzEsMTU2IEBACitTVU1NQVJZID0gIlNlY3VyZSBTb2NrZXQgTGF5ZXIiCitERVNDUklQVElPTiA9ICJTZWN1cmUgU29ja2V0IExheWVyIChTU0wpIGJpbmFyeSBhbmQgcmVsYXRlZCBjcnlwdG9ncmFwaGljIHRvb2xzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cub3BlbnNzbC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vd3d3Lm9wZW5zc2wub3JnL25ld3MvdnVsbmVyYWJpbGl0aWVzLmh0bWwiCitTRUNUSU9OID0gImxpYnMvbmV0d29yayIKKworIyAib3BlbnNzbCB8IFNTTGVheSIgZHVhbCBsaWNlbnNlCitMSUNFTlNFID0gIm9wZW5zc2wiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1jYWU2ZGExMGY0ZmZkOTcwMzIxNDc3NmQyYWFiY2UzMiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYmE1ZjFiOGI4MzViODhjYWRiY2U5YjM1ZWQ5NTMxYTYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGU0ZDUwMTI2N2RhMzkzMTA5MDVjYjZkYzhjNjEyMWY3YTJjYWQ0NWE3NzA3Zjc2ZGY4MjhmZTFiODUwNzNhZiIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm9wZW5zc2wub3JnL3NvdXJjZS9vcGVuc3NsLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vb3BlbnNzbC1jX3JlaGFzaC5zaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVRha2UtbGlua2luZy1mbGFncy1mcm9tLUxERkxBR1MtZW52LXZhci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVJlbW92ZS10ZXN0LXRoYXQtcmVxdWlyZXMtcnVubmluZy1hcy1ub24tcm9vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWFlcy1hc20tYWVzLWFybXY0LWJzYWVzLWFybXY3LS5wbC1tYWtlLWl0LXdvcmstd2l0aC0ucGF0Y2ggXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L29wZW5zc2wtJHtQVn0iCisKK2luaGVyaXQgbGliX3BhY2thZ2UgbXVsdGlsaWJfaGVhZGVyIHB0ZXN0CisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJb3M9JHtIT1NUX09TfQorCWNhc2UgJG9zIGluCisJbGludXgtdWNsaWJjIHxcCisJbGludXgtdWNsaWJjZWFiaSB8XAorCWxpbnV4LWdudWVhYmkgfFwKKwlsaW51eC11Y2xpYmNzcGUgfFwKKwlsaW51eC1nbnVzcGUgfFwKKwlsaW51eC1tdXNsKikKKwkJb3M9bGludXgKKwkJOzsKKwkJKikKKwkJOzsKKwllc2FjCisJdGFyZ2V0PSIkb3MtJHtIT1NUX0FSQ0h9IgorCWNhc2UgJHRhcmdldCBpbgorCWxpbnV4LWFybSkKKwkJdGFyZ2V0PWxpbnV4LWFybXY0CisJCTs7CisJbGludXgtYXJtZWIpCisJCXRhcmdldD1saW51eC1hcm12NAorCQk7OworCWxpbnV4LWFhcmNoNjQqKQorCQl0YXJnZXQ9bGludXgtYWFyY2g2NAorCQk7OworCWxpbnV4LXNoMykKKwkJdGFyZ2V0PWxpbnV4LWdlbmVyaWMzMgorCQk7OworCWxpbnV4LXNoNCkKKwkJdGFyZ2V0PWxpbnV4LWdlbmVyaWMzMgorCQk7OworCWxpbnV4LWk0ODYpCisJCXRhcmdldD1saW51eC1lbGYKKwkJOzsKKwlsaW51eC1pNTg2IHwgbGludXgtdmlhYzMpCisJCXRhcmdldD1saW51eC1lbGYKKwkJOzsKKwlsaW51eC1pNjg2KQorCQl0YXJnZXQ9bGludXgtZWxmCisJCTs7CisJbGludXgtZ251eDMyLXg4Nl82NCkKKwkJdGFyZ2V0PWxpbnV4LXgzMgorCQk7OworCWxpbnV4LWdudTY0LXg4Nl82NCkKKwkJdGFyZ2V0PWxpbnV4LXg4Nl82NAorCQk7OworCWxpbnV4LW1pcHMpCisgICAgICAgICAgICAgICAgIyBzcGVjaWZ5aW5nIFRBUkdFVF9DQ19BUkNIIHByZXZlbnRzIG9wZW5zc2wgZnJvbSAoaW5jb3JyZWN0bHkpIGFkZGluZyB0YXJnZXQgYXJjaGl0ZWN0dXJlIGZsYWdzCisJCXRhcmdldD0ibGludXgtbWlwczMyICR7VEFSR0VUX0NDX0FSQ0h9IgorCQk7OworCWxpbnV4LW1pcHNlbCkKKwkJdGFyZ2V0PSJsaW51eC1taXBzMzIgJHtUQVJHRVRfQ0NfQVJDSH0iCisJCTs7CisgICAgICAgIGxpbnV4LWdudW4zMi1taXBzKikKKyAgICAgICAgICAgICAgIHRhcmdldD1saW51eC1taXBzNjQKKyAgICAgICAgICAgICAgICA7OworICAgICAgICBsaW51eC0qLW1pcHM2NCB8IGxpbnV4LW1pcHM2NCkKKyAgICAgICAgICAgICAgIHRhcmdldD1saW51eDY0LW1pcHM2NAorICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGxpbnV4LSotbWlwczY0ZWwgfCBsaW51eC1taXBzNjRlbCkKKyAgICAgICAgICAgICAgIHRhcmdldD1saW51eDY0LW1pcHM2NAorICAgICAgICAgICAgICAgIDs7CisJbGludXgtbWljcm9ibGF6ZSp8bGludXgtbmlvczIqKQorCQl0YXJnZXQ9bGludXgtZ2VuZXJpYzMyCisJCTs7CisJbGludXgtcG93ZXJwYykKKwkJdGFyZ2V0PWxpbnV4LXBwYworCQk7OworCWxpbnV4LXBvd2VycGM2NCkKKwkJdGFyZ2V0PWxpbnV4LXBwYzY0CisJCTs7CisJbGludXgtc3VwZXJzcGFyYykKKwkJdGFyZ2V0PWxpbnV4LXNwYXJjdjkKKwkJOzsKKwlsaW51eC1zcGFyYykKKwkJdGFyZ2V0PWxpbnV4LXNwYXJjdjkKKwkJOzsKKwlkYXJ3aW4taTM4NikKKwkJdGFyZ2V0PWRhcndpbi1pMzg2LWNjCisJCTs7CisJZXNhYworICAgICAgICB1c2VwcmVmaXg9JHtwcmVmaXh9CisgICAgICAgIGlmIFsgIngkdXNlcHJlZml4IiA9ICJ4IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgdXNlcHJlZml4PS8KKyAgICAgICAgZmkKKwlwZXJsIC4vQ29uZmlndXJlICR7RVhUUkFfT0VDT05GfSAtLXByZWZpeD0kdXNlcHJlZml4IC0tb3BlbnNzbGRpcj0ke2xpYmRpcn0vc3NsLTEuMSAtLWxpYmRpcj1gYmFzZW5hbWUgJHtsaWJkaXJ9YCAkdGFyZ2V0Cit9CisKKyN8IGVuZ2luZXMvYWZhbGcvZV9hZmFsZy5jOiBJbiBmdW5jdGlvbiAnZXZlbnRmZCc6CisjfCBlbmdpbmVzL2FmYWxnL2VfYWZhbGcuYzoxMTA6MjA6IGVycm9yOiAnX19OUl9ldmVudGZkJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikKKyN8ICAgICAgcmV0dXJuIHN5c2NhbGwoX19OUl9ldmVudGZkLCBuKTsKKyN8ICAgICAgICAgICAgICAgICAgICAgXn5+fn5+fn5+fn5+CitFWFRSQV9PRUNPTkZfYWFyY2g2NCArPSAibm8tYWZhbGdlbmciCisKKyN8IC4vbGliY3J5cHRvLnNvOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBnZXRjb250ZXh0JworI3wgLi9saWJjcnlwdG8uc286IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHNldGNvbnRleHQnCisjfCAuL2xpYmNyeXB0by5zbzogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgbWFrZWNvbnRleHQnCitFWFRSQV9PRUNPTkZfbGliYy1tdXNsICs9ICItRE9QRU5TU0xfTk9fQVNZTkMiCisKK2RvX2luc3RhbGwgKCkgeworICAgICAgICBvZV9ydW5tYWtlIERFU1RESVI9IiR7RH0iIE1BTkRJUj0iJHttYW5kaXJ9IiBNQU5TVUZGSVg9c3NsIGluc3RhbGwKKyAgICAgICAgb2VfbXVsdGlsaWJfaGVhZGVyIG9wZW5zc2wvb3BlbnNzbGNvbmYuaAorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworICAgICAgICAjIEluc3RhbGwgYSBjdXN0b20gdmVyc2lvbiBvZiBjX3JlaGFzaCB0aGF0IGNhbiBoYW5kbGUgc3lzcm9vdHMgcHJvcGVybHkuCisgICAgICAgICMgVGhpcyB2ZXJzaW9uIGlzIHVzZWQgZm9yIGV4YW1wbGUgd2hlbiBpbnN0YWxsaW5nIGNhLWNlcnRpZmljYXRlcyBkdXJpbmcKKyAgICAgICAgIyBpbWFnZSBjcmVhdGlvbi4KKyAgICAgICAgaW5zdGFsbCAtRG0gMDc1NSAke1dPUktESVJ9L29wZW5zc2wtY19yZWhhc2guc2ggJHtEfSR7YmluZGlyfS9jX3JlaGFzaAorICAgICAgICBzZWQgLWkgLWUgJ3MsL2V0Yy9vcGVuc3NsLCR7c3lzY29uZmRpcn0vc3NsLGcnICR7RH0ke2JpbmRpcn0vY19yZWhhc2gKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKyAgICAgICAgY3AgLXIgKiAke0R9JHtQVEVTVF9QQVRIfQorCisgICAgICAgICMgUHV0dGluZyAuc28gZmlsZXMgaW4gcHRlc3QgcGFja2FnZSB3aWxsIG1lc3MgdXAgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgbWFpbiBvcGVuc3NsIHBhY2thZ2UKKyAgICAgICAgIyBzbyB3ZSByZW5hbWUgdGhlbSB0byAuc28ucHRlc3QgYW5kIHBhdGNoIHRoZSB0ZXN0IGFjY29yZGluZ2x5CisgICAgICAgIG12ICR7RH0ke1BURVNUX1BBVEh9L2xpYmNyeXB0by5zbyAke0R9JHtQVEVTVF9QQVRIfS9saWJjcnlwdG8uc28ucHRlc3QKKyAgICAgICAgbXYgJHtEfSR7UFRFU1RfUEFUSH0vbGlic3NsLnNvICR7RH0ke1BURVNUX1BBVEh9L2xpYnNzbC5zby5wdGVzdAorICAgICAgICBzZWQgLWkgJ3MvJHRhcmdldHtzaGFyZWRfZXh0ZW5zaW9uX3NpbXBsZX0vIi5zby5wdGVzdCIvJyAke0R9JHtQVEVTVF9QQVRIfS90ZXN0L3JlY2lwZXMvOTAtdGVzdF9zaGxpYmxvYWQudAorfQorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAicGVybC1tb2R1bGUtZmlsZS1zcGVjLWZ1bmN0aW9ucyBiYXNoIHB5dGhvbiIKKworRklMRVNfJHtQTn0gPSsgIiAke2xpYmRpcn0vc3NsLTEuMS8qIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tZW5naW5lcyIKK0ZJTEVTXyR7UE59LWVuZ2luZXMgPSAiJHtsaWJkaXJ9L2VuZ2luZXMtMS4xIgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXAuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM4YWYzMy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXAuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotU1VNTUFSWSA9ICJSUEMgcHJvZ3JhbSBudW1iZXIgbWFwcGVyIgotSE9NRVBBR0UgPSAiaHR0cDovL25laWwuYnJvd24ubmFtZS9wb3J0bWFwLyIKLVNFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgotTElDRU5TRSA9ICJCU0QiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9wb3J0bWFwLmM7YmVnaW5saW5lPTI7ZW5kbGluZT0zMTttZDU9NTFmZjY3ZTY2ZWM4NGIyMDA5YjAxN2IxZjk0YWZiZjQgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZnJvbV9sb2NhbC5jO2JlZ2lubGluZT05O2VuZGxpbmU9MzU7bWQ1PTFiZWM5MzhhMjI2OGI4YjQyM2M1ODgwMWFjZTNhZGMxIgotCi1JTklUU0NSSVBUX05BTUUgPSAicG9ydG1hcCIKLUlOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDEwIDIgMyA0IDUgLiBzdG9wIDMyIDAgMSA2IC4iCi0KLWluaGVyaXQgdXBkYXRlLXJjLmQgc3lzdGVtZAotCi1TWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAicG9ydG1hcC5zZXJ2aWNlIgotCi1QQUNLQUdFUyA9KyAicG9ydG1hcC11dGlscyIKLUZJTEVTX3BvcnRtYXAtdXRpbHMgPSAiJHtiYXNlX3NiaW5kaXJ9L3BtYXBfc2V0ICR7YmFzZV9zYmluZGlyfS9wbWFwX2R1bXAiCi1GSUxFU18ke1BOfS1kb2MgKz0gIiR7ZG9jZGlyfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9kZXN0ZGlyLW5vLXN0cmlwLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL2Rlc3RkaXItbm8tc3RyaXAucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmYmY3ODQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL2Rlc3RkaXItbm8tc3RyaXAucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0KLUZyb206IE1pa2UgRnJ5c2luZ2VyIDx2YXBpZXJAZ2VudG9vLm9yZz4KLURhdGU6IFN1biwgMTMgTWF5IDIwMDcgMjE6MTU6MTIgKzAwMDAgKC0wNDAwKQotU3ViamVjdDogcmVzcGVjdCBERVNURElSIGFuZCBkb250IHVzZSAtcyB3aXRoIGluc3RhbGwKLVgtR2l0LVVybDogaHR0cDovL25laWwuYnJvd24ubmFtZS9naXQ/cD1wb3J0bWFwO2E9Y29tbWl0ZGlmZl9wbGFpbjtoPTYwM2M1OWI5NzhjMDRkZjIzNTRmNjhkNGEyZGM2NzZhNzU4ZmY0NmQKLQotcmVzcGVjdCBERVNURElSIGFuZCBkb250IHVzZSAtcyB3aXRoIGluc3RhbGwKLQotJChERVNURElSKSBpcyB0aGUgc3RhbmRhcmQgZm9yIGluc3RhbGxpbmcgaW50byBvdGhlciB0cmVlcywgbm90ICQoQkFTRURJUikgLi4uCi1zbyBJJ3ZlIGNvbnZlcnRlZCB0aGUgTWFrZWZpbGUgdG8gdXNlIHRoYXQuICBJJ3ZlIGFsc28gbGVmdCBpbiAkKEJBU0VESVIpIGFzIGEKLWRlZmF1bHQgdG8gc3VwcG9ydCBvbGQgaW5zdGFsbHM7IG5vdCBzdXJlIGlmIHlvdSdkIGp1c3QgY3V0IGl0LgotCi1TdHJpcHBpbmcgc2hvdWxkIGJlIGxlZnQgdG8gdGhlIHBlcnNvbiB0byBoYW5kbGUsIG5vdCBhdXRvbWF0aWNhbGx5IGRvbmUgYnkKLXRoZSBpbnN0YWxsIHN0ZXAuICBBbHNvLCBgaW5zdGFsbCAtc2AgYWx3YXlzIGNhbGxzIGBzdHJpcGAgd2hpY2ggaXMKLXdyb25nL3VuZGVzaXJlZCBpbiBjcm9zcy1jb21waWxpbmcgc2NlbmFyaW9zLgotCi1TaWduZWQtb2ZmLWJ5OiBNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+Ci1TaWduZWQtb2ZmLWJ5OiBOZWlsIEJyb3duIDxuZWlsYkBzdXNlLmRlPgotLS0tCi0KLWRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCi1pbmRleCA5ZTlhNGI0Li41MzQzNDI4IDEwMDY0NAotLS0tIGEvTWFrZWZpbGUKLSsrKyBiL01ha2VmaWxlCi1AQCAtMTM1LDEzICsxMzUsMTQgQEAgZnJvbV9sb2NhbDogQ1BQRkxBR1MgKz0gLURURVNUCi0gcG9ydG1hcC5tYW4gOiBwb3J0bWFwLjgKLSAJc2VkICQoTUFOX1NFRCkgPCBwb3J0bWFwLjggPiBwb3J0bWFwLm1hbgotIAotK0RFU1RESVIgPSAkKEJBU0VESVIpCi0gaW5zdGFsbDogYWxsCi0tCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA3NTUgLXMgcG9ydG1hcCAke0JBU0VESVJ9L3NiaW4KLS0JaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLW0gMDc1NSAtcyBwbWFwX2R1bXAgJHtCQVNFRElSfS9zYmluCi0tCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA3NTUgLXMgcG1hcF9zZXQgJHtCQVNFRElSfS9zYmluCi0tCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA2NDQgcG9ydG1hcC5tYW4gJHtCQVNFRElSfS91c3Ivc2hhcmUvbWFuL21hbjgvcG9ydG1hcC44Ci0tCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA2NDQgcG1hcF9kdW1wLjggJHtCQVNFRElSfS91c3Ivc2hhcmUvbWFuL21hbjgKLS0JaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLW0gMDY0NCBwbWFwX3NldC44ICR7QkFTRURJUn0vdXNyL3NoYXJlL21hbi9tYW44Ci0rCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA3NTUgcG9ydG1hcCAkKERFU1RESVIpL3NiaW4KLSsJaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLW0gMDc1NSBwbWFwX2R1bXAgJChERVNURElSKS9zYmluCi0rCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA3NTUgcG1hcF9zZXQgJChERVNURElSKS9zYmluCi0rCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA2NDQgcG9ydG1hcC5tYW4gJChERVNURElSKS91c3Ivc2hhcmUvbWFuL21hbjgvcG9ydG1hcC44Ci0rCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA2NDQgcG1hcF9kdW1wLjggJChERVNURElSKS91c3Ivc2hhcmUvbWFuL21hbjgKLSsJaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLW0gMDY0NCBwbWFwX3NldC44ICQoREVTVERJUikvdXNyL3NoYXJlL21hbi9tYW44Ci0gCi0gY2xlYW46Ci0gCXJtIC1mICoubyBwb3J0bWFwIHBtYXBfZHVtcCBwbWFwX3NldCBmcm9tX2xvY2FsIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9wb3J0bWFwLmluaXQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXAvcG9ydG1hcC5pbml0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2MjFhYTE3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9wb3J0bWFwLmluaXQKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0jIS9iaW4vc2gKLSMKLSMjIyBCRUdJTiBJTklUIElORk8KLSMgUHJvdmlkZXM6ICAgICAgICAgIHBvcnRtYXAKLSMgUmVxdWlyZWQtU3RhcnQ6ICAgICRuZXR3b3JrCi0jIFJlcXVpcmVkLVN0b3A6ICAgICAkbmV0d29yawotIyBEZWZhdWx0LVN0YXJ0OiAgICAgUyAyIDMgNCA1Ci0jIERlZmF1bHQtU3RvcDogICAgICAwIDEgNgotIyBTaG9ydC1EZXNjcmlwdGlvbjogVGhlIFJQQyBwb3J0bWFwcGVyCi0jIERlc2NyaXB0aW9uOiAgICAgICBQb3J0bWFwIGlzIGEgc2VydmVyIHRoYXQgY29udmVydHMgUlBDIChSZW1vdGUKLSMgICAgICAgICAgICAgICAgICAgIFByb2NlZHVyZSBDYWxsKSBwcm9ncmFtIG51bWJlcnMgaW50byBEQVJQQQotIyAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgcG9ydCBudW1iZXJzLiBJdCBtdXN0IGJlIHJ1bm5pbmcgaW4KLSMgICAgICAgICAgICAgICAgICAgIG9yZGVyIHRvIG1ha2UgUlBDIGNhbGxzLiBTZXJ2aWNlcyB0aGF0IHVzZQotIyAgICAgICAgICAgICAgICAgICAgUlBDIGluY2x1ZGUgTkZTIGFuZCBOSVMuCi0jIyMgRU5EIElOSVQgSU5GTwotCi10ZXN0IC1mIC9zYmluL3BvcnRtYXAgfHwgZXhpdCAwCi0KLWNhc2UgIiQxIiBpbgotICAgIHN0YXJ0KQotCWVjaG8gIlN0YXJ0aW5nIHBvcnRtYXAgZGFlbW9uLi4uIgotICAgICAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1leGVjIC9zYmluL3BvcnRtYXAKLQotCWlmIFsgLWYgL3Zhci9ydW4vcG9ydG1hcC51cGdyYWRlLXN0YXRlIF07IHRoZW4KLSAgICAgICAgICBlY2hvICJSZXN0b3Jpbmcgb2xkIFJQQyBzZXJ2aWNlIGluZm9ybWF0aW9uLi4uIgotICAgICAgICAgIHNsZWVwIDEgIyBuZWVkcyBhIHNob3J0IHBhdXNlIG9yIHBtYXBfc2V0IHdvbid0IHdvcmsuIDooCi0JICBwbWFwX3NldCA8L3Zhci9ydW4vcG9ydG1hcC51cGdyYWRlLXN0YXRlCi0JICBybSAtZiAvdmFyL3J1bi9wb3J0bWFwLnVwZ3JhZGUtc3RhdGUKLSAgICAgICAgICBlY2hvICJkb25lLiIKLSAgICAgICAgZmkKLQotCTs7Ci0gICAgc3RvcCkKLSAgICAgICAgZWNobyAiU3RvcHBpbmcgcG9ydG1hcCBkYWVtb24uLi4iCi0gICAgICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tZXhlYyAvc2Jpbi9wb3J0bWFwCi0JOzsKLSAgICByZWxvYWQpCi0JOzsKLSAgICBmb3JjZS1yZWxvYWQpCi0gICAgICAgICQwIHJlc3RhcnQKLQk7OwotICAgIHJlc3RhcnQpCi0JIyBwbWFwX2R1bXAgYW5kIHBtYXBfc2V0IG1heSBiZSBpbiBhIGRpZmZlcmVudCBwYWNrYWdlIGFuZCBub3QgaW5zdGFsbGVkLi4uCi0JaWYgWyAtZiAvc2Jpbi9wbWFwX2R1bXAgLWEgLWYgL3NiaW4vcG1hcF9zZXQgXTsgdGhlbgotCQlkb19zdGF0ZT0xCi0JZWxzZQotCQlkb19zdGF0ZT0wCi0JZmkKLQlbICRkb19zdGF0ZSAtZXEgMSBdICYmIHBtYXBfZHVtcCA+L3Zhci9ydW4vcG9ydG1hcC5zdGF0ZQotICAgICAgICAkMCBzdG9wCi0gICAgICAgICQwIHN0YXJ0Ci0JaWYgWyAkZG9fc3RhdGUgLWVxIDEgXTsgdGhlbgotCSAgaWYgWyAhIC1mIC92YXIvcnVuL3BvcnRtYXAudXBncmFkZS1zdGF0ZSBdOyB0aGVuCi0gICAgICAgICAgICBzbGVlcCAxCi0JICAgIHBtYXBfc2V0IDwvdmFyL3J1bi9wb3J0bWFwLnN0YXRlCi0JICBmaQotCSAgcm0gLWYgL3Zhci9ydW4vcG9ydG1hcC5zdGF0ZQotCWZpCi0JOzsKLSAgICAqKQotCWVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9wb3J0bWFwIHtzdGFydHxzdG9wfHJlbG9hZHxyZXN0YXJ0fSIKLQlleGl0IDEKLQk7OwotZXNhYwotCi1leGl0IDAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL3BvcnRtYXAuc2VydmljZSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9wb3J0bWFwLnNlcnZpY2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlZjlkN2IuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL3BvcnRtYXAuc2VydmljZQorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLVtVbml0XQotRGVzY3JpcHRpb249VGhlIFJQQyBwb3J0bWFwcGVyCi1BZnRlcj1uZXR3b3JrLnRhcmdldAotCi1bU2VydmljZV0KLVR5cGU9Zm9ya2luZwotRXhlY1N0YXJ0PUBCQVNFX1NCSU5ESVJAL3BvcnRtYXAKLQotW0luc3RhbGxdCi1XYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL3RjcGQtY29uZmlnLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL3RjcGQtY29uZmlnLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjI1MDU4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC90Y3BkLWNvbmZpZy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotRnJvbTogTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgotRGF0ZTogU3VuLCAxMyBNYXkgMjAwNyAyMToxNzozMiArMDAwMCAoLTA0MDApCi1TdWJqZWN0OiBmaXggYnVpbGRpbmcgd2l0aCB0Y3BkIHN1cHBvcnQgZGlzYWJsZWQKLVgtR2l0LVVybDogaHR0cDovL25laWwuYnJvd24ubmFtZS9naXQ/cD1wb3J0bWFwO2E9Y29tbWl0ZGlmZl9wbGFpbjtoPTc4NDcyMDdhZWQxYjQ0ZmFmMDc3ZWVkMTRhOWFjOWM2ODI0NGViYTUKLQotZml4IGJ1aWxkaW5nIHdpdGggdGNwZCBzdXBwb3J0IGRpc2FibGVkCi0KLU1ha2Ugc3VyZSBwbWFwX2NoZWNrLmMgb25seSBpbmNsdWRlcyB0Y3BkLmggd2hlbiBIT1NUU19BQ0NFU1MgaXMgZGVmaW5lZC4KLQotU2lnbmVkLW9mZi1ieTogVGltb3RoeSBSZWRhZWxsaSA8ZHJpenp0QGdlbnRvby5vcmc+Ci1TaWduZWQtb2ZmLWJ5OiBNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+Ci1TaWduZWQtb2ZmLWJ5OiBOZWlsIEJyb3duIDxuZWlsYkBzdXNlLmRlPgotLS0tCi0KLWRpZmYgLS1naXQgYS9wbWFwX2NoZWNrLmMgYi9wbWFwX2NoZWNrLmMKLWluZGV4IDg0ZjJjMTIuLjQ0M2E4MjIgMTAwNjQ0Ci0tLS0gYS9wbWFwX2NoZWNrLmMKLSsrKyBiL3BtYXBfY2hlY2suYwotQEAgLTQ0LDcgKzQ0LDkgQEAKLSAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotICNpbmNsdWRlIDxycGMvcnBjZW50Lmg+Ci0gI2VuZGlmCi0rI2lmZGVmIEhPU1RTX0FDQ0VTUwotICNpbmNsdWRlIDx0Y3BkLmg+Ci0rI2VuZGlmCi0gI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotICNpbmNsdWRlIDxncnAuaD4KLSAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcF82LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXBfNi4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTcwMDk1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcF82LjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1yZXF1aXJlIHBvcnRtYXAuaW5jCi0KLURFUEVORFNfYXBwZW5kX2xpYmMtbXVzbCA9ICIgbGlidGlycGMgIgotCi1QUiA9ICJyOSIKLQotU1JDX1VSSSA9ICJodHRwczovL2Zvc3NpZXMub3JnL2xpbnV4L21pc2Mvb2xkL3BvcnRtYXAtNi4wLnRneiBcCi0gICAgICAgICAgIGZpbGU6Ly9kZXN0ZGlyLW5vLXN0cmlwLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3RjcGQtY29uZmlnLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3BvcnRtYXAuaW5pdCBcCi0gICAgICAgICAgIGZpbGU6Ly9wb3J0bWFwLnNlcnZpY2UiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJhYzEwOGFiNjhiZjBmMzQ0NzdmODMxNzc5MWFhZjFmZiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIwMmM4MjBkMzlmM2U2ZTcyOWQxYmVhMzI4N2EyZDhhNmM2ODRmMTAwNmZiOTYxMmY5N2RjYWQ0YTI4MWQ0MWRlIgotCi1TID0gIiR7V09SS0RJUn0vJHtCUE59XyR7UFZ9LyIKLQotUEFDS0FHRUNPTkZJRyA/Pz0gInRjcC13cmFwcGVycyIKLVBBQ0tBR0VDT05GSUdbdGNwLXdyYXBwZXJzXSA9ICIsLHRjcC13cmFwcGVycyIKLQotQ1BQRkxBR1MgKz0gIi1ERkFDSUxJVFk9TE9HX0RBRU1PTiAtREVOQUJMRV9ETlMgLURIT1NUU19BQ0NFU1MiCi1DRkxBR1MgKz0gIi1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLWZQSUMiCi1FWFRSQV9PRU1BS0UgKz0gIidOT19UQ1BfV1JBUFBFUj0ke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd0Y3Atd3JhcHBlcnMnLCAnJywgJzEnLCBkKX0nIgotQ0ZMQUdTX2FwcGVuZF9saWJjLW11c2wgPSAiIC1JJHtTVEFHSU5HX0lOQ0RJUn0vdGlycGMgIgotTERGTEFHU19hcHBlbmRfbGliYy1tdXNsID0gIiAtbHRpcnBjICIKLQotZG9faW5zdGFsbCgpIHsKLSAgICBpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuOC8gJHtEfSR7YmFzZV9zYmluZGlyfSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKLSAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wb3J0bWFwLmluaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3BvcnRtYXAKLSAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9Ci0KLSAgICBpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCi0gICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcG9ydG1hcC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCi0gICAgc2VkIC1pIC1lICdzLEBCQVNFX1NCSU5ESVJALCR7YmFzZV9zYmluZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9wb3J0bWFwLnNlcnZpY2UKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LnNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQuc2gKaW5kZXggNWM5ZTVkMy4uMzVhMWFhNiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQuc2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQuc2gKQEAgLTQsNiArNCw3IEBACiBXUEFfU1VQX0JJTj0iL3Vzci9zYmluL3dwYV9zdXBwbGljYW50IgogV1BBX1NVUF9QTkFNRT0id3BhX3N1cHBsaWNhbnQiCiBXUEFfU1VQX1BJREZJTEU9Ii92YXIvcnVuL3dwYV9zdXBwbGljYW50LiRJRkFDRS5waWQiCitXUEFfQ09NTU9OX0NUUkxfSUZBQ0U9Ii92YXIvcnVuL3dwYV9zdXBwbGljYW50IgogV1BBX1NVUF9PUFRJT05TPSItQiAtUCAkV1BBX1NVUF9QSURGSUxFIC1pICRJRkFDRSIKIAogVkVSQk9TSVRZPTAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvcHJvZmlsZSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvcHJvZmlsZQppbmRleCBjZWFmMTVmLi5hMDYyMDI4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3Byb2ZpbGUKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9wcm9maWxlCkBAIC0zLDE1ICszLDEzIEBACiAKIFBBVEg9Ii91c3IvbG9jYWwvYmluOi91c3IvYmluOi9iaW4iCiBFRElUT1I9InZpIgkJCSMgbmVlZGVkIGZvciBwYWNrYWdlcyBsaWtlIGNyb24sIGdpdC1jb21taXQKLXRlc3QgLXogIiRURVJNIiAmJiBURVJNPSJ2dDEwMCIJIyBCYXNpYyB0ZXJtaW5hbCBjYXBhYi4gRm9yIHNjcmVlbiBldGMuCitbICIkVEVSTSIgXSB8fCBURVJNPSJ2dDEwMCIJIyBCYXNpYyB0ZXJtaW5hbCBjYXBhYi4gRm9yIHNjcmVlbiBldGMuCiAKLWlmIFsgIiRIT01FIiA9ICJST09USE9NRSIgXTsgdGhlbgotCVBBVEg9JFBBVEg6L3Vzci9sb2NhbC9zYmluOi91c3Ivc2Jpbjovc2JpbgotZmkKLWlmIFsgIiRQUzEiIF07IHRoZW4KLQkjIHdvcmtzIGZvciBiYXNoIGFuZCBhc2ggKG5vIG90aGVyIHNoZWxscyBrbm93biB0byBiZSBpbiB1c2UgaGVyZSkKLQlQUzE9J1x1QFxoOlx3XCQgJwotZmkKKyMgQWRkIC9zYmluICYgY28gdG8gJFBBVEggZm9yIHRoZSByb290IHVzZXIKK1sgIiRIT01FIiAhPSAiUk9PVEhPTUUiIF0gfHwgUEFUSD0kUEFUSDovdXNyL2xvY2FsL3NiaW46L3Vzci9zYmluOi9zYmluCisKKyMgU2V0IHRoZSBwcm9tcHQgZm9yIGJhc2ggYW5kIGFzaCAobm8gb3RoZXIgc2hlbGxzIGtub3duIHRvIGJlIGluIHVzZSBoZXJlKQorWyAteiAiJFBTMSIgXSB8fCBQUzE9J1x1QFxoOlx3XCQgJwogCiBpZiBbIC1kIC9ldGMvcHJvZmlsZS5kIF07IHRoZW4KIAlmb3IgaSBpbiAvZXRjL3Byb2ZpbGUuZC8qLnNoOyBkbwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9zaGFyZS9kb3QucHJvZmlsZSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvc2hhcmUvZG90LnByb2ZpbGUKaW5kZXggOTc5NzkzZS4uYTg3MzE2MCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9zaGFyZS9kb3QucHJvZmlsZQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3NoYXJlL2RvdC5wcm9maWxlCkBAIC03LDQgKzcsNSBAQAogIyBwYXRoIHNldCBieSAvZXRjL3Byb2ZpbGUKICMgZXhwb3J0IFBBVEgKIAotbWVzZyBuCisjIE1pZ2h0IGZhaWwgYWZ0ZXIgInN1IC0gbXl1c2VyIiB3aGVuIC9kZXYvdHR5KiBpcyBub3Qgd3JpdGFibGUgYnkgIm15dXNlciIuCittZXNnIG4gMj4vZGV2L251bGwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXNfMy4wLjE0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlc18zLjAuMTQuYmIKaW5kZXggY2E3YmYwNi4uMWMwODYzYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlc18zLjAuMTQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlc18zLjAuMTQuYmIKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfS9iYWNrdXBzICR7bG9jYWxzdGF0ZWRpcn0vbGliIFwKICAgICAgICAgICAgL3N5cyAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9taXNjICR7bG9jYWxzdGF0ZWRpcn0vc3Bvb2wgXAogICAgICAgICAgICAke2xvY2Fsc3RhdGVkaXJ9L3ZvbGF0aWxlIFwKLSAgICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfS92b2xhdGlsZS9sb2cgXAorICAgICAgICAgICAke2xvY2Fsc3RhdGVkaXJ9LyR7QCd2b2xhdGlsZS8nIGlmIG9lLnR5cGVzLmJvb2xlYW4oJyR7Vk9MQVRJTEVfTE9HX0RJUn0nKSBlbHNlICcnfWxvZyBcCiAgICAgICAgICAgIC9ob21lICR7cHJlZml4fS9zcmMgJHtsb2NhbHN0YXRlZGlyfS9sb2NhbCBcCiAgICAgICAgICAgIC9tZWRpYSIKIApAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICAgICAgICAgJHtwcmVmaXh9L2xpYi9sb2NhbGUiCiBkaXJzMjc3NS1sc2IgPSAiL3Zhci9tYWlsIgogCi12b2xhdGlsZXMgPSAibG9nIHRtcCIKK3ZvbGF0aWxlcyA9ICIke0AnbG9nJyBpZiBvZS50eXBlcy5ib29sZWFuKCcke1ZPTEFUSUxFX0xPR19ESVJ9JykgZWxzZSAnJ30gdG1wIgogY29uZmZpbGVzID0gIiR7c3lzY29uZmRpcn0vZGViaWFuX3ZlcnNpb24gJHtzeXNjb25mZGlyfS9ob3N0LmNvbmYgXAogICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vaXNzdWUgLyR7c3lzY29uZmRpcn0vaXNzdWUubmV0IFwKICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYgJHtzeXNjb25mZGlyfS9wcm9maWxlIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3guaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC5pbmMKaW5kZXggYWRjNmU5YS4uNDg5MTBjYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC5pbmMKQEAgLTM5LDkgKzM5LDExIEBACiBJTklUU0NSSVBUX05BTUVfJHtQTn0tdWRoY3BkID0gImJ1c3lib3gtdWRoY3BkIgogCiBTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59LXN5c2xvZyIKLVNZU1RFTURfU0VSVklDRV8ke1BOfS1zeXNsb2cgPSAiYnVzeWJveC1zeXNsb2cuc2VydmljZSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1zeXNsb2cgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1NSQ19VUkknLCAnZmlsZTovL3N5c2xvZy5jZmcnLCAnYnVzeWJveC1zeXNsb2cuc2VydmljZScsICcnLCBkKX0iCiAKLUNPTkZGSUxFU18ke1BOfS1zeXNsb2cgPSAiJHtzeXNjb25mZGlyfS9zeXNsb2ctc3RhcnR1cC5jb25mLiR7QlBOfSIKK0NPTkZGSUxFU18ke1BOfS1zeXNsb2cgPSAiJHtzeXNjb25mZGlyfS9zeXNsb2ctc3RhcnR1cC5jb25mIgorUkNPTkZMSUNUU18ke1BOfS1zeXNsb2cgPSAicnN5c2xvZyBzeXNrbG9nZCBzeXNsb2ctbmciCisKIENPTkZGSUxFU18ke1BOfS1tZGV2ID0gIiR7c3lzY29uZmRpcn0vbWRldi5jb25mIgogCiBSUkVDT01NRU5EU18ke1BOfSA9ICIke1BOfS1zeXNsb2cgJHtQTn0tdWRoY3BjIgpAQCAtNzEsNyArNzMsNyBAQAogCWJ1c3lib3hfY2ZnKGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgVHJ1ZSwgRmFsc2UsIGQpLCAnQ09ORklHX1JGS0lMTCcsIGNuZiwgcmVtKQogCXJldHVybiAiXG4iLmpvaW4oY25mKSwgIlxuIi5qb2luKHJlbSkKIAotIyBYLCBZID0gJHtAZmVhdHVyZXNfdG9fdWNsaWJjX3NldHRpbmdzKGQpfQorIyBYLCBZID0gJHtAZmVhdHVyZXNfdG9fYnVzeWJveF9zZXR0aW5ncyhkKX0KICMgdW5mb3J0dW5hdGVseSBkb2Vzbid0IHNlZW0gdG8gd29yayB3aXRoIGJpdGJha2UsIHdvcmthcm91bmQ6CiBkZWYgZmVhdHVyZXNfdG9fYnVzeWJveF9jb25mKGQpOgogCWNuZiwgcmVtID0gZmVhdHVyZXNfdG9fYnVzeWJveF9zZXR0aW5ncyhkKQpAQCAtMTAyLDYgKzEwNCw5IEBACiB9CiAKIGRvX3ByZXBhcmVfY29uZmlnICgpIHsKKwlpZiBbICIkQlVJTERfUkVQUk9EVUNJQkxFX0JJTkFSSUVTIiA9ICIxIiBdOyB0aGVuCisJCWV4cG9ydCBLQ09ORklHX05PVElNRVNUQU1QPTEKKwlmaQogCXNlZCAtZSAnL0NPTkZJR19TVEFUSUMvZCcgXAogCQk8ICR7V09SS0RJUn0vZGVmY29uZmlnID4gJHtTfS8uY29uZmlnCiAJZWNobyAiIyBDT05GSUdfU1RBVElDIGlzIG5vdCBzZXQiID4+IC5jb25maWcKQEAgLTExOCw2ICsxMjMsNyBAQAogCQkgICR7U30vLmNvbmZpZy5vZS10bXAgPiAke1N9Ly5jb25maWcKIAlmaQogCXNlZCAtaSAncy9DT05GSUdfSUZVUERPV05fVURIQ1BDX0NNRF9PUFRJT05TPSItUiAtbiIvQ09ORklHX0lGVVBET1dOX1VESENQQ19DTURfT1BUSU9OUz0iLVIgLWIiLycgJHtTfS8uY29uZmlnCisJc2VkIC1pICdzfCR7REVCVUdfUFJFRklYX01BUH18fGcnICR7U30vLmNvbmZpZwogfQogCiAjIHJldHVybnMgYWxsIHRoZSBlbGVtZW50cyBmcm9tIHRoZSBzcmMgdXJpIHRoYXQgYXJlIC5jZmcgZmlsZXMKQEAgLTEzOCw2ICsxNDQsOSBAQAogCiBkb19jb21waWxlKCkgewogCXVuc2V0IENGTEFHUyBDUFBGTEFHUyBDWFhGTEFHUyBMREZMQUdTCisJaWYgWyAiJEJVSUxEX1JFUFJPRFVDSUJMRV9CSU5BUklFUyIgPSAiMSIgXTsgdGhlbgorCQlleHBvcnQgS0NPTkZJR19OT1RJTUVTVEFNUD0xCisJZmkKIAlpZiBbICIke0JVU1lCT1hfU1BMSVRfU1VJRH0iID0gIjEiIC1hIHhgZ3JlcCAiQ09ORklHX0ZFQVRVUkVfSU5ESVZJRFVBTD15IiAuY29uZmlnYCA9IHggXTsgdGhlbgogCSMgc3BsaXQgdGhlIC5jb25maWcgaW50byB0d28gcGFydHMsIGFuZCBtYWtlIHR3byBidXN5Ym94IGJpbmFyaWVzCiAJCWlmIFsgLWUgLmNvbmZpZy5vcmlnIF07IHRoZW4KQEAgLTI0MSw5ICsyNTAsOSBAQAogCWZpCiAKIAlpZiBncmVwIC1xICJDT05GSUdfU1lTTE9HRD15IiAke0J9Ly5jb25maWc7IHRoZW4KLQkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vc3lzbG9nICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9zeXNsb2cuJHtCUE59Ci0JCWluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vc3lzbG9nLXN0YXJ0dXAuY29uZiAke0R9JHtzeXNjb25mZGlyfS9zeXNsb2ctc3RhcnR1cC5jb25mLiR7QlBOfQotCQlpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L3N5c2xvZy5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2xvZy5jb25mLiR7QlBOfQorCQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9zeXNsb2cgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c2xvZworCQlpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L3N5c2xvZy1zdGFydHVwLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vc3lzbG9nLXN0YXJ0dXAuY29uZgorCQlpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L3N5c2xvZy5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2xvZy5jb25mCiAJZmkKIAlpZiBncmVwICJDT05GSUdfQ1JPTkQ9eSIgJHtCfS8uY29uZmlnOyB0aGVuCiAJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2J1c3lib3gtY3JvbiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCkBAIC0zMDQsNyArMzEzLDYgQEAKIAkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0CiAJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2J1c3lib3gtc3lzbG9nLmRlZmF1bHQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9idXN5Ym94LXN5c2xvZwogICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGxuIC1zZiAvZGV2L251bGwgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzbG9nLnNlcnZpY2UKICAgICAgICAgZmkKICAgICAgICAgaWYgZ3JlcCAtcSAiQ09ORklHX0tMT0dEPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgogICAgICAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQpAQCAtMzE1LDcgKzMyMyw3IEBACiAKICAgICAjIFJlbW92ZSB0aGUgc3lzdmluaXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlIGZvciBzeXN0ZW1kIHN5c3RlbXMgdG8gYXZvaWQgY29uZnVzaW9uCiAgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsICdmYWxzZScsICd0cnVlJywgZCl9OyB0aGVuCi0Jcm0gLWYgJHtEfSR7c3lzY29uZmRpcn0vc3lzbG9nLXN0YXJ0dXAuY29uZi4ke0JQTn0KKwlybSAtZiAke0R9JHtzeXNjb25mZGlyfS9zeXNsb2ctc3RhcnR1cC5jb25mCiAgICAgZmkKIH0KIApAQCAtMzI5LDIwICszMzcsNiBAQAogCiBBTFRFUk5BVElWRV9QUklPUklUWSA9ICI1MCIKIAotQUxURVJOQVRJVkVfJHtQTn0tc3lzbG9nICs9ICJzeXNsb2ctY29uZiIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtzeXNsb2ctY29uZl0gPSAiJHtzeXNjb25mZGlyfS9zeXNsb2cuY29uZiIKLQotcHl0aG9uICgpIHsKLSAgICBpZiBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgVHJ1ZSwgRmFsc2UsIGQpOgotICAgICAgICBwbiA9IGQuZ2V0VmFyKCdQTicpCi0gICAgICAgIGQuYXBwZW5kVmFyKCdBTFRFUk5BVElWRV8lcy1zeXNsb2cnICUgKHBuKSwgJyBzeXNsb2ctaW5pdCcpCi0gICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgJ3N5c2xvZy1pbml0JywgJyVzL2luaXQuZC9zeXNsb2cnICUgKGQuZ2V0VmFyKCdzeXNjb25mZGlyJykpKQotICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsICdzeXNsb2ctaW5pdCcsICclcy9pbml0LmQvc3lzbG9nLiVzJyAlIChkLmdldFZhcignc3lzY29uZmRpcicpLCBkLmdldFZhcignQlBOJykpKQotICAgICAgICBkLmFwcGVuZFZhcignQUxURVJOQVRJVkVfJXMtc3lzbG9nJyAlIChwbiksICcgc3lzbG9nLXN0YXJ0dXAtY29uZicpCi0gICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgJ3N5c2xvZy1zdGFydHVwLWNvbmYnLCAnJXMvc3lzbG9nLXN0YXJ0dXAuY29uZicgJSAoZC5nZXRWYXIoJ3N5c2NvbmZkaXInKSkpCi0gICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUJywgJ3N5c2xvZy1zdGFydHVwLWNvbmYnLCAnJXMvc3lzbG9nLXN0YXJ0dXAuY29uZi4lcycgJSAoZC5nZXRWYXIoJ3N5c2NvbmZkaXInKSwgZC5nZXRWYXIoJ0JQTicpKSkKLX0KLQogcHl0aG9uIGRvX3BhY2thZ2VfcHJlcGVuZCAoKSB7CiAgICAgIyBXZSBuZWVkIHRvIGxvYWQgdGhlIGZ1bGwgc2V0IG9mIGJ1c3lib3ggcHJvdmlkZXMgZnJvbSB0aGUgL2V0Yy9idXN5Ym94LmxpbmtzCiAgICAgIyBVc2UgdGhpcyB0byBzZWUgdGhlIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgd2l0aCB0aGUgcmlnaHQgaW5mb3JtYXRpb24KQEAgLTQzOSwzICs0MzMsNSBAQAogCQlmaQogCWZpCiB9CisKK1JQUk9WSURFU18ke1BOfSArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd1c3JtZXJnZScsICcvYmluL3NoJywgJycsIGQpfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZGVmY29uZmlnIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9kZWZjb25maWcKaW5kZXggODgwM2I1Mi4uY2M2OGJlYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9kZWZjb25maWcKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9kZWZjb25maWcKQEAgLTgyMCw5ICs4MjAsOSBAQAogIyBDT05GSUdfSUZQTFVHRCBpcyBub3Qgc2V0CiBDT05GSUdfSUZVUERPV049eQogQ09ORklHX0lGVVBET1dOX0lGU1RBVEVfUEFUSD0iL3Zhci9ydW4vaWZzdGF0ZSIKLSMgQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVAgaXMgbm90IHNldAotIyBDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9JUF9CVUlMVElOIGlzIG5vdCBzZXQKLUNPTkZJR19GRUFUVVJFX0lGVVBET1dOX0lGQ09ORklHX0JVSUxUSU49eQorQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVA9eQorQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVBfQlVJTFRJTj15CisjIENPTkZJR19GRUFUVVJFX0lGVVBET1dOX0lGQ09ORklHX0JVSUxUSU4gaXMgbm90IHNldAogQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVBWND15CiBDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9JUFY2PXkKIENPTkZJR19GRUFUVVJFX0lGVVBET1dOX01BUFBJTkc9eQpAQCAtMTA1MywxNyArMTA1MywxNSBAQAogIwogIyBTeXN0ZW0gTG9nZ2luZyBVdGlsaXRpZXMKICMKLUNPTkZJR19TWVNMT0dEPXkKLUNPTkZJR19GRUFUVVJFX1JPVEFURV9MT0dGSUxFPXkKLUNPTkZJR19GRUFUVVJFX1JFTU9URV9MT0c9eQotQ09ORklHX0ZFQVRVUkVfU1lTTE9HRF9EVVA9eQotQ09ORklHX0ZFQVRVUkVfU1lTTE9HRF9DRkc9eQotQ09ORklHX0ZFQVRVUkVfU1lTTE9HRF9SRUFEX0JVRkZFUl9TSVpFPTI1NgotQ09ORklHX0ZFQVRVUkVfSVBDX1NZU0xPRz15Ci1DT05GSUdfRkVBVFVSRV9JUENfU1lTTE9HX0JVRkZFUl9TSVpFPTY0Ci1DT05GSUdfTE9HUkVBRD15Ci1DT05GSUdfRkVBVFVSRV9MT0dSRUFEX1JFRFVDRURfTE9DS0lORz15Ci1DT05GSUdfRkVBVFVSRV9LTVNHX1NZU0xPRz15CisjIENPTkZJR19TWVNMT0dEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUk9UQVRFX0xPR0ZJTEUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9SRU1PVEVfTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU1lTTE9HRF9EVVAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TWVNMT0dEX0NGRyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lQQ19TWVNMT0cgaXMgbm90IHNldAorIyBDT05GSUdfTE9HUkVBRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xPR1JFQURfUkVEVUNFRF9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfS01TR19TWVNMT0cgaXMgbm90IHNldAogQ09ORklHX0tMT0dEPXkKIAogIwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9zeXNsb2cuY2ZnIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9zeXNsb2cuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNDI1ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3N5c2xvZy5jZmcKQEAgLTAsMCArMSwxMSBAQAorQ09ORklHX1NZU0xPR0Q9eQorQ09ORklHX0ZFQVRVUkVfUk9UQVRFX0xPR0ZJTEU9eQorQ09ORklHX0ZFQVRVUkVfUkVNT1RFX0xPRz15CitDT05GSUdfRkVBVFVSRV9TWVNMT0dEX0RVUD15CitDT05GSUdfRkVBVFVSRV9TWVNMT0dEX0NGRz15CitDT05GSUdfRkVBVFVSRV9TWVNMT0dEX1JFQURfQlVGRkVSX1NJWkU9MjU2CitDT05GSUdfRkVBVFVSRV9JUENfU1lTTE9HPXkKK0NPTkZJR19GRUFUVVJFX0lQQ19TWVNMT0dfQlVGRkVSX1NJWkU9NjQKK0NPTkZJR19MT0dSRUFEPXkKK0NPTkZJR19GRUFUVVJFX0xPR1JFQURfUkVEVUNFRF9MT0NLSU5HPXkKK0NPTkZJR19GRUFUVVJFX0tNU0dfU1lTTE9HPXkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3hfMS4yNC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveF8xLjI0LjEuYmIKaW5kZXggNmNjYmZmZC4uMWM4NTgwOCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveF8xLjI0LjEuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveF8xLjI0LjEuYmIKQEAgLTQwLDYgKzQwLDcgQEAKICAgICAgICAgICAgZmlsZTovL3Jlc2l6ZS5jZmcgXAogICAgICAgICAgICAke0BbIiIsICJmaWxlOi8vaW5pdC5jZmciXVsoZC5nZXRWYXIoJ1ZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXInKSA9PSAnYnVzeWJveCcpXX0gXAogICAgICAgICAgICAke0BbIiIsICJmaWxlOi8vbWRldi5jZmciXVsoZC5nZXRWYXIoJ1ZJUlRVQUwtUlVOVElNRV9kZXZfbWFuYWdlcicpID09ICdidXN5Ym94LW1kZXYnKV19IFwKKyAgICAgICAgICAgZmlsZTovL3N5c2xvZy5jZmcgXAogICAgICAgICAgICBmaWxlOi8vaW5pdHRhYiBcCiAgICAgICAgICAgIGZpbGU6Ly9yY1MgXAogICAgICAgICAgICBmaWxlOi8vcmNLIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjYvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjYvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNi8wMDAxLWxvY2FsLm1rLWZpeC1jcm9zcy1jb21waWxpbmctcHJvYmxlbS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLzAwMDEtbG9jYWwubWstZml4LWNyb3NzLWNvbXBpbGluZy1wcm9ibGVtLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI2LzAwMDEtbG9jYWwubWstZml4LWNyb3NzLWNvbXBpbGluZy1wcm9ibGVtLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy8wMDAxLWxvY2FsLm1rLWZpeC1jcm9zcy1jb21waWxpbmctcHJvYmxlbS5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNi8wMDAxLXVuYW1lLXJlcG9ydC1wcm9jZXNzb3ItYW5kLWhhcmR3YXJlLWNvcnJlY3RseS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLzAwMDEtdW5hbWUtcmVwb3J0LXByb2Nlc3Nvci1hbmQtaGFyZHdhcmUtY29ycmVjdGx5LnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI2LzAwMDEtdW5hbWUtcmVwb3J0LXByb2Nlc3Nvci1hbmQtaGFyZHdhcmUtY29ycmVjdGx5LnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy8wMDAxLXVuYW1lLXJlcG9ydC1wcm9jZXNzb3ItYW5kLWhhcmR3YXJlLWNvcnJlY3RseS5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNi9kaXNhYmxlLWxzLW91dHB1dC1xdW90aW5nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMvZGlzYWJsZS1scy1vdXRwdXQtcXVvdGluZy5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNi9kaXNhYmxlLWxzLW91dHB1dC1xdW90aW5nLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy9kaXNhYmxlLWxzLW91dHB1dC1xdW90aW5nLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI2L2ZpeC1zZWxpbnV4LWZsYXNrLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMvZml4LXNlbGludXgtZmxhc2sucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjYvZml4LXNlbGludXgtZmxhc2sucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzL2ZpeC1zZWxpbnV4LWZsYXNrLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI2L21hbi1kZWNvdXBsZS1tYW5wYWdlcy1mcm9tLWJ1aWxkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMvbWFuLWRlY291cGxlLW1hbnBhZ2VzLWZyb20tYnVpbGQucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjYvbWFuLWRlY291cGxlLW1hbnBhZ2VzLWZyb20tYnVpbGQucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzL21hbi1kZWNvdXBsZS1tYW5wYWdlcy1mcm9tLWJ1aWxkLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI2L3JlbW92ZS11c3ItbG9jYWwtbGliLWZyb20tbTQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy9yZW1vdmUtdXNyLWxvY2FsLWxpYi1mcm9tLW00LnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI2L3JlbW92ZS11c3ItbG9jYWwtbGliLWZyb20tbTQucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzL3JlbW92ZS11c3ItbG9jYWwtbGliLWZyb20tbTQucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzXzguMjYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlsc184LjI2LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmVmMTAxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzXzguMjYuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotU1VNTUFSWSA9ICJUaGUgYmFzaWMgZmlsZSwgc2hlbGwgYW5kIHRleHQgbWFuaXB1bGF0aW9uIHV0aWxpdGllcyIKLURFU0NSSVBUSU9OID0gIlRoZSBHTlUgQ29yZSBVdGlsaXRpZXMgcHJvdmlkZSB0aGUgYmFzaWMgZmlsZSwgc2hlbGwgYW5kIHRleHQgXAotbWFuaXB1bGF0aW9uIHV0aWxpdGllcy4gVGhlc2UgYXJlIHRoZSBjb3JlIHV0aWxpdGllcyB3aGljaCBhcmUgZXhwZWN0ZWQgdG8gZXhpc3Qgb24gXAotZXZlcnkgc3lzdGVtLiIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9jb3JldXRpbHMvIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vZGViYnVncy5nbnUub3JnL2NvcmV1dGlscyIKLUxJQ0VOU0UgPSAiR1BMdjMrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDRcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbHMuYztiZWdpbmxpbmU9NTtlbmRsaW5lPTE2O21kNT0zOGI3OTc4NWNhODg1MzdiNzU4NzE3ODJhMmEzYzZiOCIKLURFUEVORFMgPSAiZ21wIGxpYmNhcCIKLURFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKLQotaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCi0KLVNSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9jb3JldXRpbHMvJHtCUH0udGFyLnh6O25hbWU9dGFyYmFsbCBcCi0gICAgICAgICAgIGh0dHA6Ly9kaXN0ZmlsZXMuZ2VudG9vLm9yZy9kaXN0ZmlsZXMvJHtCUH0tbWFuLnRhci54ejtuYW1lPW1hbnBhZ2VzIFwKLSAgICAgICAgICAgZmlsZTovL21hbi1kZWNvdXBsZS1tYW5wYWdlcy1mcm9tLWJ1aWxkLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3JlbW92ZS11c3ItbG9jYWwtbGliLWZyb20tbTQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZml4LXNlbGludXgtZmxhc2sucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLXVuYW1lLXJlcG9ydC1wcm9jZXNzb3ItYW5kLWhhcmR3YXJlLWNvcnJlY3RseS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLWxzLW91dHB1dC1xdW90aW5nLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtbG9jYWwubWstZml4LWNyb3NzLWNvbXBpbGluZy1wcm9ibGVtLnBhdGNoIFwKLSAgICAgICAgICAiCi0KLVNSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gImQ1YWEyMDcyZjY2MmQ0MTE4YjlmNGM2M2I5NDYwMWE2IgotU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiMTU1ZTk0ZDc0OGY4ZTJiYzMyN2M2NmUwY2JlYmRiOGQ2YWIyNjVkMmYzN2MzYzkyOGY3YmY2YzNiZWJhOWE4ZSIKLVNSQ19VUklbbWFucGFnZXMubWQ1c3VtXSA9ICJiNTgxMDdmNTMyZjdiZWZmY2IyZjM4ZTJhYzFmMmRhMyIKLVNSQ19VUklbbWFucGFnZXMuc2hhMjU2c3VtXSA9ICI5MzI0ZWM0MTJmZmNhM2IwNDMxZTYyOTk3MjBjMzNhYzk4ZTc0OWU0MzBmNzJhN2M2ZTY1ZjM2MzVjODZhYTI5IgotCi1FWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0td2l0aG91dC1nbXAiCi1FWFRSQV9PRUNPTkZfY2xhc3MtdGFyZ2V0ID0gIi0tZW5hYmxlLWluc3RhbGwtcHJvZ3JhbT1hcmNoIC0tbGliZXhlY2Rpcj0ke2xpYmRpcn0iCi1FWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlc2RrID0gIi0tZW5hYmxlLWluc3RhbGwtcHJvZ3JhbT1hcmNoIgotCi0jIGFjbCBhbmQgeGF0dHIgYXJlIG5vdCBkZWZhdWx0IGZlYXR1cmVzCi0jCi1QQUNLQUdFQ09ORklHX2NsYXNzLXRhcmdldCA/Pz0gIlwKLSAgICAke0BiYi51dGlscy5maWx0ZXIoJ0RJU1RST19GRUFUVVJFUycsICdhY2wgeGF0dHInLCBkKX0gXAotIgotCi0jIFRoZSBsaWIvb2UvcGF0aC5weSByZXF1aXJlcyB4YXR0cgotUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPz89ICJ4YXR0ciIKLQotIyB3aXRoLCB3aXRob3V0LCBkZXBlbmRzLCByZGVwZW5kcwotIwotUEFDS0FHRUNPTkZJR1thY2xdID0gIi0tZW5hYmxlLWFjbCwtLWRpc2FibGUtYWNsLGFjbCwiCi1QQUNLQUdFQ09ORklHW3hhdHRyXSA9ICItLWVuYWJsZS14YXR0ciwtLWRpc2FibGUteGF0dHIsYXR0ciwiCi0KLSMgWyBkZiBta3RlbXAgYmFzZTY0IGdldHMgYSBzcGVjaWFsIHRyZWF0bWVudCBhbmQgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMKLWJpbmRpcl9wcm9ncyA9ICJhcmNoIGJhc2VuYW1lIGNoY29uIGNrc3VtIGNvbW0gY3NwbGl0IGN1dCBkaXIgZGlyY29sb3JzIGRpcm5hbWUgZHUgXAotICAgICAgICAgICAgICAgIGVudiBleHBhbmQgZXhwciBmYWN0b3IgZm10IGZvbGQgZ3JvdXBzIGhlYWQgaG9zdGlkIGlkIGluc3RhbGwgXAotICAgICAgICAgICAgICAgIGpvaW4gbGluayBsb2duYW1lIG1kNXN1bSBta2ZpZm8gbmljZSBubCBub2h1cCBucHJvYyBvZCBwYXN0ZSBwYXRoY2hrIFwKLSAgICAgICAgICAgICAgICBwaW5reSBwciBwcmludGVudiBwcmludGYgcHR4IHJlYWRsaW5rIHJlYWxwYXRoIHJ1bmNvbiBzZXEgc2hhMXN1bSBzaGEyMjRzdW0gc2hhMjU2c3VtIFwKLSAgICAgICAgICAgICAgICBzaGEzODRzdW0gc2hhNTEyc3VtIHNocmVkIHNodWYgc29ydCBzcGxpdCBzdGRidWYgc3VtIHRhYyB0YWlsIHRlZSB0ZXN0IHRpbWVvdXRcCi0gICAgICAgICAgICAgICAgdHIgdHJ1bmNhdGUgdHNvcnQgdHR5IHVuZXhwYW5kIHVuaXEgdW5saW5rIHVwdGltZSB1c2VycyB2ZGlyIHdjIHdobyB3aG9hbWkgeWVzIgotCi0jIGhvc3RuYW1lIGdldHMgYSBzcGVjaWFsIHRyZWF0bWVudCBhbmQgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMKLWJhc2VfYmluZGlyX3Byb2dzID0gImNhdCBjaGdycCBjaG1vZCBjaG93biBjcCBkYXRlIGRkIGVjaG8gZmFsc2Uga2lsbCBsbiBscyBta2RpciBcCi0gICAgICAgICAgICAgICAgICAgICBta25vZCBtdiBwd2Qgcm0gcm1kaXIgc2xlZXAgc3R0eSBzeW5jIHRvdWNoIHRydWUgdW5hbWUgc3RhdCIKLQotc2JpbmRpcl9wcm9ncz0gImNocm9vdCIKLQotIyBMZXQgYWNsb2NhbCB1c2UgdGhlIHJlbGF0aXZlIHBhdGggZm9yIHRoZSBtNCBmaWxlIHJhdGhlciB0aGFuIHRoZQotIyBhYnNvbHV0ZSBzaW5jZSBjb3JldXRpbHMgaGFzIGEgbG90IG9mIG00IGZpbGVzLCBvdGhlcndpc2UgdGhlcmUgbWlnaHQKLSMgYmUgYW4gIkFyZ3VtZW50IGxpc3QgdG9vIGxvbmciIGVycm9yIHdoZW4gaXQgaXMgYnVpbHQgaW4gYSBsb25nL2RlZXAKLSMgZGlyZWN0b3J5LgotYWNwYXRocyA9ICItSSAuL200IgotCi0jIERlYWwgd2l0aCBhIHNlcGFyYXRlIGJ1aWxkZGlyIGZhaWx1cmUgaWYgc3JjIGRvZXNuJ3QgZXhpc3Qgd2hlbiBjcmVhdGluZyB2ZXJzaW9uLmMvdmVyc2lvbi5oCi1kb19jb21waWxlX3ByZXBlbmQgKCkgewotCW1rZGlyIC1wICR7Qn0vc3JjCi19Ci0KLWRvX2luc3RhbGxfY2xhc3MtbmF0aXZlKCkgewotCWF1dG90b29sc19kb19pbnN0YWxsCi0JIyByZW1vdmUgZ3JvdXBzIHRvIGZpeCBjb25mbGljdCB3aXRoIHNoYWRvdy1uYXRpdmUKLQlybSAtZiAke0R9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2dyb3VwcwotCSMgVGhlIHJldHVybiBpcyBhIG11c3Qgc2luY2UgbmF0aXZlIGRvZXNuJ3QgbmVlZCB0aGUKLQkjIGRvX2luc3RhbGxfYXBwZW5kKCkgaW4gdGhlIGJlbG93LgotCXJldHVybgotfQotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQlmb3IgaSBpbiBkZiBta3RlbXAgYmFzZTY0OyBkbyBtdiAke0R9JHtiaW5kaXJ9LyRpICR7RH0ke2JpbmRpcn0vJGkuJHtCUE59OyBkb25lCi0KLQlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQotCVsgIiR7YmFzZV9iaW5kaXJ9IiAhPSAiJHtiaW5kaXJ9IiBdICYmIGZvciBpIGluICR7YmFzZV9iaW5kaXJfcHJvZ3N9OyBkbyBtdiAke0R9JHtiaW5kaXJ9LyRpICR7RH0ke2Jhc2VfYmluZGlyfS8kaS4ke0JQTn07IGRvbmUKLQotCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KLQlbICIke3NiaW5kaXJ9IiAhPSAiJHtiaW5kaXJ9IiBdICYmIGZvciBpIGluICR7c2JpbmRpcl9wcm9nc307IGRvIG12ICR7RH0ke2JpbmRpcn0vJGkgJHtEfSR7c2JpbmRpcn0vJGkuJHtCUE59OyBkb25lCi0KLQkjIFsgcmVxdWlyZXMgc3BlY2lhbCBoYW5kbGluZyBiZWNhdXNlIFsuY29yZXV0aWxzIHdpbGwgY2F1c2UgdGhlIHNlZCBzdHVmZgotCSMgaW4gdXBkYXRlLWFsdGVybmF0aXZlcyB0byBmYWlsLCB0aGVyZWZvcmUgdXNlIGxicmFja2V0IC0gdGhlIG5hbWUgdXNlZAotCSMgZm9yIHRoZSBhY3R1YWwgc291cmNlIGZpbGUuCi0JbXYgJHtEfSR7YmluZGlyfS9bICR7RH0ke2JpbmRpcn0vbGJyYWNrZXQuJHtCUE59Ci0KLQkjIHByZWJ1aWx0IG1hbiBwYWdlcwotCWluc3RhbGwgLWQgJHtEfS8ke21hbmRpcn0vbWFuMQotCWluc3RhbGwgLXQgJHtEfS8ke21hbmRpcn0vbWFuMSAke1N9L21hbi8qLjEKLQkjIHByZWJ1aWx0IG1hbiBwYWdlcyBkb24ndCBkbyBhIHNlcGFyYXRlIG1hbiBwYWdlIGZvciBbIHZzIHRlc3QuCi0JIyBzZWUgY29tbWVudCBhYm92ZSByLmUuIHNlZCBhbmQgdXBkYXRlLWFsdGVybmF0aXZlcwotCWNwIC1hICR7RH0ke21hbmRpcn0vbWFuMS90ZXN0LjEgJHtEfSR7bWFuZGlyfS9tYW4xL2xicmFja2V0LjEuJHtCUE59Ci19Ci0KLWluaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcwotCi1BTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCi1BTFRFUk5BVElWRV8ke1BOfSA9ICJsYnJhY2tldCAke2JpbmRpcl9wcm9nc30gJHtiYXNlX2JpbmRpcl9wcm9nc30gJHtzYmluZGlyX3Byb2dzfSBiYXNlNjQgbWt0ZW1wIGRmIgotQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gImJhc2U2NC4xIG1rdGVtcC4xIGRmLjEgbGJyYWNrZXQuMSBncm91cHMuMSBraWxsLjEgdXB0aW1lLjEgc3RhdC4xICBob3N0bmFtZS4xIgotCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbaG9zdG5hbWUuMV0gPSAiJHttYW5kaXJ9L21hbjEvaG9zdG5hbWUuMSIKLQotQUxURVJOQVRJVkVfTElOS19OQU1FW2Jhc2U2NF0gPSAiJHtiYXNlX2JpbmRpcn0vYmFzZTY0IgotQUxURVJOQVRJVkVfVEFSR0VUW2Jhc2U2NF0gPSAiJHtiaW5kaXJ9L2Jhc2U2NC4ke0JQTn0iCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbYmFzZTY0LjFdID0gIiR7bWFuZGlyfS9tYW4xL2Jhc2U2NC4xIgotCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbbWt0ZW1wXSA9ICIke2Jhc2VfYmluZGlyfS9ta3RlbXAiCi1BTFRFUk5BVElWRV9UQVJHRVRbbWt0ZW1wXSA9ICIke2JpbmRpcn0vbWt0ZW1wLiR7QlBOfSIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtta3RlbXAuMV0gPSAiJHttYW5kaXJ9L21hbjEvbWt0ZW1wLjEiCi0KLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtkZl0gPSAiJHtiYXNlX2JpbmRpcn0vZGYiCi1BTFRFUk5BVElWRV9UQVJHRVRbZGZdID0gIiR7YmluZGlyfS9kZi4ke0JQTn0iCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbZGYuMV0gPSAiJHttYW5kaXJ9L21hbjEvZGYuMSIKLQotQUxURVJOQVRJVkVfTElOS19OQU1FW2xicmFja2V0XSA9ICIke2JpbmRpcn0vWyIKLUFMVEVSTkFUSVZFX1RBUkdFVFtsYnJhY2tldF0gPSAiJHtiaW5kaXJ9L2xicmFja2V0LiR7QlBOfSIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtsYnJhY2tldC4xXSA9ICIke21hbmRpcn0vbWFuMS9sYnJhY2tldC4xIgotCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbZ3JvdXBzLjFdID0gIiR7bWFuZGlyfS9tYW4xL2dyb3Vwcy4xIgotQUxURVJOQVRJVkVfTElOS19OQU1FW3VwdGltZS4xXSA9ICIke21hbmRpcn0vbWFuMS91cHRpbWUuMSIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtraWxsLjFdID0gIiR7bWFuZGlyfS9tYW4xL2tpbGwuMSIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtzdGF0LjFdID0gIiR7bWFuZGlyfS9tYW4xL3N0YXQuMSIKLQotcHl0aG9uIF9fYW5vbnltb3VzKCkgewotCWZvciBwcm9nIGluIGQuZ2V0VmFyKCdiYXNlX2JpbmRpcl9wcm9ncycpLnNwbGl0KCk6Ci0JCWQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignYmFzZV9iaW5kaXInKSwgcHJvZykpCi0KLQlmb3IgcHJvZyBpbiBkLmdldFZhcignc2JpbmRpcl9wcm9ncycpLnNwbGl0KCk6Ci0JCWQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignc2JpbmRpcicpLCBwcm9nKSkKLX0KLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHNfOC4yNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzXzguMjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE4NzQwYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzXzguMjcuYmIKQEAgLTAsMCArMSwxNDIgQEAKK1NVTU1BUlkgPSAiVGhlIGJhc2ljIGZpbGUsIHNoZWxsIGFuZCB0ZXh0IG1hbmlwdWxhdGlvbiB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJUaGUgR05VIENvcmUgVXRpbGl0aWVzIHByb3ZpZGUgdGhlIGJhc2ljIGZpbGUsIHNoZWxsIGFuZCB0ZXh0IFwKK21hbmlwdWxhdGlvbiB1dGlsaXRpZXMuIFRoZXNlIGFyZSB0aGUgY29yZSB1dGlsaXRpZXMgd2hpY2ggYXJlIGV4cGVjdGVkIHRvIGV4aXN0IG9uIFwKK2V2ZXJ5IHN5c3RlbS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY29yZXV0aWxzLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2RlYmJ1Z3MuZ251Lm9yZy9jb3JldXRpbHMiCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0XAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2xzLmM7YmVnaW5saW5lPTU7ZW5kbGluZT0xNjttZDU9MzhiNzk3ODVjYTg4NTM3Yjc1ODcxNzgyYTJhM2M2YjgiCitERVBFTkRTID0gImdtcCBsaWJjYXAiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vY29yZXV0aWxzLyR7QlB9LnRhci54ejtuYW1lPXRhcmJhbGwgXAorICAgICAgICAgICBodHRwOi8vZGlzdGZpbGVzLmdlbnRvby5vcmcvZGlzdGZpbGVzLyR7QlB9LW1hbi50YXIueHo7bmFtZT1tYW5wYWdlcyBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tZGVjb3VwbGUtbWFucGFnZXMtZnJvbS1idWlsZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtdXNyLWxvY2FsLWxpYi1mcm9tLW00LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1zZWxpbnV4LWZsYXNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS11bmFtZS1yZXBvcnQtcHJvY2Vzc29yLWFuZC1oYXJkd2FyZS1jb3JyZWN0bHkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS1scy1vdXRwdXQtcXVvdGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWxvY2FsLm1rLWZpeC1jcm9zcy1jb21waWxpbmctcHJvYmxlbS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW3RhcmJhbGwubWQ1c3VtXSA9ICI1MDI3OTU3OTJjMjEyOTMyMzY1ZTA3Nzk0NmQzNTNhZSIKK1NSQ19VUklbdGFyYmFsbC5zaGEyNTZzdW1dID0gIjg4OTFkMzQ5ZWU4N2I5ZmY3ODcwZjUyYjZkOTMxMmE5ZGI2NzJkMjQzOWQyODliYzU3MDg0NzcxY2EyMTY1NmIiCitTUkNfVVJJW21hbnBhZ2VzLm1kNXN1bV0gPSAiMWIzMWE2ODhkMDY3NjRlMGU5NGFhMjBiN2VhMDgyMjIiCitTUkNfVVJJW21hbnBhZ2VzLnNoYTI1NnN1bV0gPSAiMWY2MTU4MTllOTE2NzY0NmM3MzE2MzZiNmM1ZWNiZTc5ODM3ZTgyYTE4NjY2YmFjYzgyYzNmYjFkZmNmYWVhMyIKKworRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLXdpdGhvdXQtZ21wIgorRVhUUkFfT0VDT05GX2NsYXNzLXRhcmdldCA9ICItLWVuYWJsZS1pbnN0YWxsLXByb2dyYW09YXJjaCAtLWxpYmV4ZWNkaXI9JHtsaWJkaXJ9IgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZXNkayA9ICItLWVuYWJsZS1pbnN0YWxsLXByb2dyYW09YXJjaCIKKworIyBhY2wgYW5kIHhhdHRyIGFyZSBub3QgZGVmYXVsdCBmZWF0dXJlcworIworUEFDS0FHRUNPTkZJR19jbGFzcy10YXJnZXQgPz89ICJcCisgICAgJHtAYmIudXRpbHMuZmlsdGVyKCdESVNUUk9fRkVBVFVSRVMnLCAnYWNsIHhhdHRyJywgZCl9IFwKKyIKKworIyBUaGUgbGliL29lL3BhdGgucHkgcmVxdWlyZXMgeGF0dHIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID8/PSAieGF0dHIiCisKKyMgd2l0aCwgd2l0aG91dCwgZGVwZW5kcywgcmRlcGVuZHMKKyMKK1BBQ0tBR0VDT05GSUdbYWNsXSA9ICItLWVuYWJsZS1hY2wsLS1kaXNhYmxlLWFjbCxhY2wsIgorUEFDS0FHRUNPTkZJR1t4YXR0cl0gPSAiLS1lbmFibGUteGF0dHIsLS1kaXNhYmxlLXhhdHRyLGF0dHIsIgorCisjIFsgZGYgbWt0ZW1wIGJhc2U2NCBnZXRzIGEgc3BlY2lhbCB0cmVhdG1lbnQgYW5kIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGlzCitiaW5kaXJfcHJvZ3MgPSAiYXJjaCBiYXNlbmFtZSBjaGNvbiBja3N1bSBjb21tIGNzcGxpdCBjdXQgZGlyIGRpcmNvbG9ycyBkaXJuYW1lIGR1IFwKKyAgICAgICAgICAgICAgICBlbnYgZXhwYW5kIGV4cHIgZmFjdG9yIGZtdCBmb2xkIGdyb3VwcyBoZWFkIGhvc3RpZCBpZCBpbnN0YWxsIFwKKyAgICAgICAgICAgICAgICBqb2luIGxpbmsgbG9nbmFtZSBtZDVzdW0gbWtmaWZvIG5pY2Ugbmwgbm9odXAgbnByb2Mgb2QgcGFzdGUgcGF0aGNoayBcCisgICAgICAgICAgICAgICAgcGlua3kgcHIgcHJpbnRlbnYgcHJpbnRmIHB0eCByZWFkbGluayByZWFscGF0aCBydW5jb24gc2VxIHNoYTFzdW0gc2hhMjI0c3VtIHNoYTI1NnN1bSBcCisgICAgICAgICAgICAgICAgc2hhMzg0c3VtIHNoYTUxMnN1bSBzaHJlZCBzaHVmIHNvcnQgc3BsaXQgc3RkYnVmIHN1bSB0YWMgdGFpbCB0ZWUgdGVzdCB0aW1lb3V0XAorICAgICAgICAgICAgICAgIHRyIHRydW5jYXRlIHRzb3J0IHR0eSB1bmV4cGFuZCB1bmlxIHVubGluayB1cHRpbWUgdXNlcnMgdmRpciB3YyB3aG8gd2hvYW1pIHllcyIKKworIyBob3N0bmFtZSBnZXRzIGEgc3BlY2lhbCB0cmVhdG1lbnQgYW5kIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGlzCitiYXNlX2JpbmRpcl9wcm9ncyA9ICJjYXQgY2hncnAgY2htb2QgY2hvd24gY3AgZGF0ZSBkZCBlY2hvIGZhbHNlIGtpbGwgbG4gbHMgbWtkaXIgXAorICAgICAgICAgICAgICAgICAgICAgbWtub2QgbXYgcHdkIHJtIHJtZGlyIHNsZWVwIHN0dHkgc3luYyB0b3VjaCB0cnVlIHVuYW1lIHN0YXQiCisKK3NiaW5kaXJfcHJvZ3M9ICJjaHJvb3QiCisKKyMgTGV0IGFjbG9jYWwgdXNlIHRoZSByZWxhdGl2ZSBwYXRoIGZvciB0aGUgbTQgZmlsZSByYXRoZXIgdGhhbiB0aGUKKyMgYWJzb2x1dGUgc2luY2UgY29yZXV0aWxzIGhhcyBhIGxvdCBvZiBtNCBmaWxlcywgb3RoZXJ3aXNlIHRoZXJlIG1pZ2h0CisjIGJlIGFuICJBcmd1bWVudCBsaXN0IHRvbyBsb25nIiBlcnJvciB3aGVuIGl0IGlzIGJ1aWx0IGluIGEgbG9uZy9kZWVwCisjIGRpcmVjdG9yeS4KK2FjcGF0aHMgPSAiLUkgLi9tNCIKKworIyBEZWFsIHdpdGggYSBzZXBhcmF0ZSBidWlsZGRpciBmYWlsdXJlIGlmIHNyYyBkb2Vzbid0IGV4aXN0IHdoZW4gY3JlYXRpbmcgdmVyc2lvbi5jL3ZlcnNpb24uaAorZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKwlta2RpciAtcCAke0J9L3NyYworfQorCitkb19pbnN0YWxsX2NsYXNzLW5hdGl2ZSgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCSMgcmVtb3ZlIGdyb3VwcyB0byBmaXggY29uZmxpY3Qgd2l0aCBzaGFkb3ctbmF0aXZlCisJcm0gLWYgJHtEfSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9ncm91cHMKKwkjIFRoZSByZXR1cm4gaXMgYSBtdXN0IHNpbmNlIG5hdGl2ZSBkb2Vzbid0IG5lZWQgdGhlCisJIyBkb19pbnN0YWxsX2FwcGVuZCgpIGluIHRoZSBiZWxvdy4KKwlyZXR1cm4KK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJZm9yIGkgaW4gZGYgbWt0ZW1wIGJhc2U2NDsgZG8gbXYgJHtEfSR7YmluZGlyfS8kaSAke0R9JHtiaW5kaXJ9LyRpLiR7QlBOfTsgZG9uZQorCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwlbICIke2Jhc2VfYmluZGlyfSIgIT0gIiR7YmluZGlyfSIgXSAmJiBmb3IgaSBpbiAke2Jhc2VfYmluZGlyX3Byb2dzfTsgZG8gbXYgJHtEfSR7YmluZGlyfS8kaSAke0R9JHtiYXNlX2JpbmRpcn0vJGkuJHtCUE59OyBkb25lCisKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJWyAiJHtzYmluZGlyfSIgIT0gIiR7YmluZGlyfSIgXSAmJiBmb3IgaSBpbiAke3NiaW5kaXJfcHJvZ3N9OyBkbyBtdiAke0R9JHtiaW5kaXJ9LyRpICR7RH0ke3NiaW5kaXJ9LyRpLiR7QlBOfTsgZG9uZQorCisJIyBbIHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmcgYmVjYXVzZSBbLmNvcmV1dGlscyB3aWxsIGNhdXNlIHRoZSBzZWQgc3R1ZmYKKwkjIGluIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgdG8gZmFpbCwgdGhlcmVmb3JlIHVzZSBsYnJhY2tldCAtIHRoZSBuYW1lIHVzZWQKKwkjIGZvciB0aGUgYWN0dWFsIHNvdXJjZSBmaWxlLgorCW12ICR7RH0ke2JpbmRpcn0vWyAke0R9JHtiaW5kaXJ9L2xicmFja2V0LiR7QlBOfQorCisJIyBwcmVidWlsdCBtYW4gcGFnZXMKKwlpbnN0YWxsIC1kICR7RH0vJHttYW5kaXJ9L21hbjEKKwlpbnN0YWxsIC10ICR7RH0vJHttYW5kaXJ9L21hbjEgJHtTfS9tYW4vKi4xCisJIyBwcmVidWlsdCBtYW4gcGFnZXMgZG9uJ3QgZG8gYSBzZXBhcmF0ZSBtYW4gcGFnZSBmb3IgWyB2cyB0ZXN0LgorCSMgc2VlIGNvbW1lbnQgYWJvdmUgci5lLiBzZWQgYW5kIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKwljcCAtUiAtLW5vLWRlcmVmZXJlbmNlIC0tcHJlc2VydmU9bW9kZSxsaW5rcyAtdiAke0R9JHttYW5kaXJ9L21hbjEvdGVzdC4xICR7RH0ke21hbmRpcn0vbWFuMS9sYnJhY2tldC4xLiR7QlBOfQorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorQUxURVJOQVRJVkVfJHtQTn0gPSAibGJyYWNrZXQgJHtiaW5kaXJfcHJvZ3N9ICR7YmFzZV9iaW5kaXJfcHJvZ3N9ICR7c2JpbmRpcl9wcm9nc30gYmFzZTY0IG1rdGVtcCBkZiIKK0FMVEVSTkFUSVZFXyR7UE59LWRvYyA9ICJiYXNlNjQuMSBta3RlbXAuMSBkZi4xIGxicmFja2V0LjEgZ3JvdXBzLjEga2lsbC4xIHVwdGltZS4xIHN0YXQuMSAgaG9zdG5hbWUuMSIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2hvc3RuYW1lLjFdID0gIiR7bWFuZGlyfS9tYW4xL2hvc3RuYW1lLjEiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtiYXNlNjRdID0gIiR7YmFzZV9iaW5kaXJ9L2Jhc2U2NCIKK0FMVEVSTkFUSVZFX1RBUkdFVFtiYXNlNjRdID0gIiR7YmluZGlyfS9iYXNlNjQuJHtCUE59IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2Jhc2U2NC4xXSA9ICIke21hbmRpcn0vbWFuMS9iYXNlNjQuMSIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW21rdGVtcF0gPSAiJHtiYXNlX2JpbmRpcn0vbWt0ZW1wIgorQUxURVJOQVRJVkVfVEFSR0VUW21rdGVtcF0gPSAiJHtiaW5kaXJ9L21rdGVtcC4ke0JQTn0iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbWt0ZW1wLjFdID0gIiR7bWFuZGlyfS9tYW4xL21rdGVtcC4xIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZGZdID0gIiR7YmFzZV9iaW5kaXJ9L2RmIgorQUxURVJOQVRJVkVfVEFSR0VUW2RmXSA9ICIke2JpbmRpcn0vZGYuJHtCUE59IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2RmLjFdID0gIiR7bWFuZGlyfS9tYW4xL2RmLjEiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtsYnJhY2tldF0gPSAiJHtiaW5kaXJ9L1siCitBTFRFUk5BVElWRV9UQVJHRVRbbGJyYWNrZXRdID0gIiR7YmluZGlyfS9sYnJhY2tldC4ke0JQTn0iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbGJyYWNrZXQuMV0gPSAiJHttYW5kaXJ9L21hbjEvbGJyYWNrZXQuMSIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2dyb3Vwcy4xXSA9ICIke21hbmRpcn0vbWFuMS9ncm91cHMuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt1cHRpbWUuMV0gPSAiJHttYW5kaXJ9L21hbjEvdXB0aW1lLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVba2lsbC4xXSA9ICIke21hbmRpcn0vbWFuMS9raWxsLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3RhdC4xXSA9ICIke21hbmRpcn0vbWFuMS9zdGF0LjEiCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKwlmb3IgcHJvZyBpbiBkLmdldFZhcignYmFzZV9iaW5kaXJfcHJvZ3MnKS5zcGxpdCgpOgorCQlkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIHByb2csICclcy8lcycgJSAoZC5nZXRWYXIoJ2Jhc2VfYmluZGlyJyksIHByb2cpKQorCisJZm9yIHByb2cgaW4gZC5nZXRWYXIoJ3NiaW5kaXJfcHJvZ3MnKS5zcGxpdCgpOgorCQlkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIHByb2csICclcy8lcycgJSAoZC5nZXRWYXIoJ3NiaW5kaXInKSwgcHJvZykpCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzLXdhaXQvZGJ1cy13YWl0X2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzLXdhaXQvZGJ1cy13YWl0X2dpdC5iYgppbmRleCA2OTFkYzg2Li40YWZiOTBjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy13YWl0L2RidXMtd2FpdF9naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMtd2FpdC9kYnVzLXdhaXRfZ2l0LmJiCkBAIC0xMSw2ICsxMSw3IEBACiBQUiA9ICJyMiIKIAogU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0iCitVUFNUUkVBTV9WRVJTSU9OX1VOS05PV04gPSAiMSIKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy10ZXN0XzEuMTAuMTQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLXRlc3RfMS4xMC4xNC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM5NDgxNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLXRlc3RfMS4xMC4xNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLVNVTU1BUlkgPSAiRC1CdXMgdGVzdCBwYWNrYWdlIChmb3IgRC1idXMgZnVuY3Rpb25hbGl0eSB0ZXN0aW5nIG9ubHkpIgotSE9NRVBBR0UgPSAiaHR0cDovL2RidXMuZnJlZWRlc2t0b3Aub3JnIgotU0VDVElPTiA9ICJiYXNlIgotTElDRU5TRSA9ICJBRkwtMiB8IEdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEwZGRlZDNiNTgxNDhmM2YxZmQ4MDRiMjYzNTRhZjNlIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RidXMvZGJ1cy5oO2JlZ2lubGluZT02O2VuZGxpbmU9MjA7bWQ1PTc3NTVjOWQ3YWJjY2Q1ZGJkMjVhNmE5NzQ1MzhiYjNjIgotCi1ERVBFTkRTID0gImRidXMgZ2xpYi0yLjAiCi0KLVJERVBFTkRTXyR7UE59ICs9ICJtYWtlIgotUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKLQotU1JDX1VSSSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvZGJ1cy9kYnVzLSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly90bXBkaXIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKLSAgICAgICAgICAgZmlsZTovL3B5dGhvbi1jb25maWcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vY2xlYXItZ3VpZF9mcm9tX3NlcnZlci1pZi1zZW5kX25lZ290aWF0ZV91bml4X2YucGF0Y2ggXAotICAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIzZjdiMDEzY2U4ZjY0MWNkNGM4OTdhY2RhMGVmMzQ2NyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIyMzIzOGY3MDM1M2UzOGNlNWNhMTgzZWJjOTUyNWMwZDk3YWMwMGVmNjQwYWQyOWNmNzk0NzgyYWY2ZTZhMDgzIgotCi1TPSIke1dPUktESVJ9L2RidXMtJHtQVn0iCi1GSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9kYnVzOiIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgcHRlc3QgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuCi0KLUVYVFJBX09FQ09ORl9YID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJy0td2l0aC14JywgJy0td2l0aG91dC14JywgZCl9IgotRVhUUkFfT0VDT05GX1hfY2xhc3MtbmF0aXZlID0gIi0td2l0aG91dC14IgotCi1FWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtdGVzdHMgXAotICAgICAgICAgICAgICAgIC0tZW5hYmxlLW1vZHVsYXItdGVzdHMgXAotICAgICAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGxlZC10ZXN0cyBcCi0gICAgICAgICAgICAgICAgLS1lbmFibGUtY2hlY2tzIFwKLSAgICAgICAgICAgICAgICAtLWVuYWJsZS1hc3NlcnRzIFwKLSAgICAgICAgICAgICAgICAtLWVuYWJsZS12ZXJib3NlLW1vZGUgXAotICAgICAgICAgICAgICAgIC0tZGlzYWJsZS14bWwtZG9jcyBcCi0gICAgICAgICAgICAgICAgLS1kaXNhYmxlLWRveHlnZW4tZG9jcyBcCi0gICAgICAgICAgICAgICAgLS1kaXNhYmxlLWxpYmF1ZGl0IFwKLSAgICAgICAgICAgICAgICAtLWRpc2FibGUtc3lzdGVtZCBcCi0gICAgICAgICAgICAgICAgLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyIFwKLSAgICAgICAgICAgICAgICAtLXdpdGgtZGJ1cy10ZXN0LWRpcj0ke1BURVNUX1BBVEh9IFwKLSAgICAgICAgICAgICAgICAke0VYVFJBX09FQ09ORl9YfSIKLQotZG9faW5zdGFsbCgpIHsKLSAgICA6Ci19Ci0KLWRvX2luc3RhbGxfcHRlc3QoKSB7Ci0JaW5zdGFsbCAtZCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0Ci0JbD0ic2hlbGwgcHJpbnRmIHJlZnMgc3lzbG9nIG1hcnNoYWwgc3ludGF4IGNvcnJ1cHQgZGJ1cy1kYWVtb24gZGJ1cy1kYWVtb24tZWF2ZXNkcm9wIGxvb3BiYWNrIHJlbGF5IgotCWZvciBpIGluICRsOyBkbyBpbnN0YWxsICR7Qn0vdGVzdC8ubGlicy90ZXN0LSRpICR7RH0ke1BURVNUX1BBVEh9L3Rlc3Q7IGRvbmUKLQlsPSJidXMgYnVzLXN5c3RlbSBidXMtbGF1bmNoLWhlbHBlciIKLQlmb3IgaSBpbiAkbDsgZG8gaW5zdGFsbCAke0J9L2J1cy8ubGlicy90ZXN0LSRpICR7RH0ke1BURVNUX1BBVEh9L3Rlc3Q7IGRvbmUKLQlpbnN0YWxsICR7Qn0vZGJ1cy8ubGlicy90ZXN0LWRidXMgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAotCWNwIC1yICR7Qn0vdGVzdC9kYXRhICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKLX0KLVJERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJiYXNoIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy10ZXN0XzEuMTAuMjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLXRlc3RfMS4xMC4yMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWFkYjdkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy10ZXN0XzEuMTAuMjAuYmIKQEAgLTAsMCArMSw1OCBAQAorU1VNTUFSWSA9ICJELUJ1cyB0ZXN0IHBhY2thZ2UgKGZvciBELWJ1cyBmdW5jdGlvbmFsaXR5IHRlc3Rpbmcgb25seSkiCitIT01FUEFHRSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkFGTC0yIHwgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTBkZGVkM2I1ODE0OGYzZjFmZDgwNGIyNjM1NGFmM2UgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZGJ1cy9kYnVzLmg7YmVnaW5saW5lPTY7ZW5kbGluZT0yMDttZDU9Nzc1NWM5ZDdhYmNjZDVkYmQyNWE2YTk3NDUzOGJiM2MiCisKK0RFUEVORFMgPSAiZGJ1cyBnbGliLTIuMCIKKworUkRFUEVORFNfJHtQTn0gKz0gIm1ha2UiCitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorCitTUkNfVVJJID0gImh0dHA6Ly9kYnVzLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy9kYnVzL2RidXMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3RtcGRpci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vcHl0aG9uLWNvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jbGVhci1ndWlkX2Zyb21fc2VydmVyLWlmLXNlbmRfbmVnb3RpYXRlX3VuaXhfZi5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjk0Yzk5MWU3NjNkNGY5ZjEzNjkwNDE2YjJkY2Q5NDExIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU1NzRiOTc4MGI1NDI1ZmRlNGQ5NzNiYjU5NmU3ZWEwZjA5ZTAwZmUyZWRkNjYyZGE5MDE2ZTk3NmM0NjBiNDgiCisKK1M9IiR7V09SS0RJUn0vZGJ1cy0ke1BWfSIKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L2RidXM6IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCBwdGVzdCB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4KKworRVhUUkFfT0VDT05GX1ggPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnLS13aXRoLXgnLCAnLS13aXRob3V0LXgnLCBkKX0iCitFWFRSQV9PRUNPTkZfWF9jbGFzcy1uYXRpdmUgPSAiLS13aXRob3V0LXgiCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS10ZXN0cyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtbW9kdWxhci10ZXN0cyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtaW5zdGFsbGVkLXRlc3RzIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1jaGVja3MgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWFzc2VydHMgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLXZlcmJvc2UtbW9kZSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXhtbC1kb2NzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtZG94eWdlbi1kb2NzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtbGliYXVkaXQgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1zeXN0ZW1kIFwKKyAgICAgICAgICAgICAgICAtLXdpdGhvdXQtc3lzdGVtZHN5c3RlbXVuaXRkaXIgXAorICAgICAgICAgICAgICAgIC0td2l0aC1kYnVzLXRlc3QtZGlyPSR7UFRFU1RfUEFUSH0gXAorICAgICAgICAgICAgICAgICR7RVhUUkFfT0VDT05GX1h9IgorCitkb19pbnN0YWxsKCkgeworICAgIDoKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKKwlsPSJzaGVsbCBwcmludGYgcmVmcyBzeXNsb2cgbWFyc2hhbCBzeW50YXggY29ycnVwdCBkYnVzLWRhZW1vbiBkYnVzLWRhZW1vbi1lYXZlc2Ryb3AgbG9vcGJhY2sgcmVsYXkiCisJZm9yIGkgaW4gJGw7IGRvIGluc3RhbGwgJHtCfS90ZXN0Ly5saWJzL3Rlc3QtJGkgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdDsgZG9uZQorCWw9ImJ1cyBidXMtc3lzdGVtIGJ1cy1sYXVuY2gtaGVscGVyIgorCWZvciBpIGluICRsOyBkbyBpbnN0YWxsICR7Qn0vYnVzLy5saWJzL3Rlc3QtJGkgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdDsgZG9uZQorCWluc3RhbGwgJHtCfS9kYnVzLy5saWJzL3Rlc3QtZGJ1cyAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJY3AgLXIgJHtCfS90ZXN0L2RhdGEgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorfQorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gImJhc2giCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzXzEuMTAuMTQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzXzEuMTAuMTQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxZDczNTYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1c18xLjEwLjE0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTgwICswLDAgQEAKLVNVTU1BUlkgPSAiRC1CdXMgbWVzc2FnZSBidXMiCi1ERVNDUklQVElPTiA9ICJELUJ1cyBpcyBhIG1lc3NhZ2UgYnVzIHN5c3RlbSwgYSBzaW1wbGUgd2F5IGZvciBhcHBsaWNhdGlvbnMgdG8gdGFsayB0byBvbmUgYW5vdGhlci4gSW4gYWRkaXRpb24gdG8gaW50ZXJwcm9jZXNzIGNvbW11bmljYXRpb24sIEQtQnVzIGhlbHBzIGNvb3JkaW5hdGUgcHJvY2VzcyBsaWZlY3ljbGU7IGl0IG1ha2VzIGl0IHNpbXBsZSBhbmQgcmVsaWFibGUgdG8gY29kZSBhIFwic2luZ2xlIGluc3RhbmNlXCIgYXBwbGljYXRpb24gb3IgZGFlbW9uLCBhbmQgdG8gbGF1bmNoIGFwcGxpY2F0aW9ucyBhbmQgZGFlbW9ucyBvbiBkZW1hbmQgd2hlbiB0aGVpciBzZXJ2aWNlcyBhcmUgbmVlZGVkLiIKLUhPTUVQQUdFID0gImh0dHA6Ly9kYnVzLmZyZWVkZXNrdG9wLm9yZyIKLVNFQ1RJT04gPSAiYmFzZSIKLUxJQ0VOU0UgPSAiQUZMLTIgfCBHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xMGRkZWQzYjU4MTQ4ZjNmMWZkODA0YjI2MzU0YWYzZSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kYnVzL2RidXMuaDtiZWdpbmxpbmU9NjtlbmRsaW5lPTIwO21kNT03NzU1YzlkN2FiY2NkNWRiZDI1YTZhOTc0NTM4YmIzYyIKLURFUEVORFMgPSAiZXhwYXQgdmlydHVhbC9saWJpbnRsIgotUkRFUEVORFNfZGJ1c19jbGFzcy1uYXRpdmUgPSAiIgotUkRFUEVORFNfZGJ1c19jbGFzcy1uYXRpdmVzZGsgPSAiIgotUEFDS0FHRVMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHRlc3QnLCAnJHtQTn0tcHRlc3QnLCAnJywgZCl9IgotQUxMT1dfRU1QVFlfZGJ1cy1wdGVzdCA9ICIxIgotUkRFUEVORFNfZGJ1cy1wdGVzdF9jbGFzcy10YXJnZXQgPSAiZGJ1cy10ZXN0LXB0ZXN0IgotCi1TUkNfVVJJID0gImh0dHA6Ly9kYnVzLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy9kYnVzL2RidXMtJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovL3RtcGRpci5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9kYnVzLTEuaW5pdCBcCi0gICAgICAgICAgIGZpbGU6Ly9vcy10ZXN0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2NsZWFyLWd1aWRfZnJvbV9zZXJ2ZXItaWYtc2VuZF9uZWdvdGlhdGVfdW5peF9mLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtY29uZmlndXJlLmFjLWV4cGxpY2l0ZWx5LWNoZWNrLXN0ZGludC5oLnBhdGNoIFwKLSIKLQotU1JDX1VSSVttZDVzdW1dID0gIjNmN2IwMTNjZThmNjQxY2Q0Yzg5N2FjZGEwZWYzNDY3IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjIzMjM4ZjcwMzUzZTM4Y2U1Y2ExODNlYmM5NTI1YzBkOTdhYzAwZWY2NDBhZDI5Y2Y3OTQ3ODJhZjZlNmEwODMiCi0KLWluaGVyaXQgdXNlcmFkZCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgdXBkYXRlLXJjLmQgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuCi0KLUlOSVRTQ1JJUFRfTkFNRSA9ICJkYnVzLTEiCi1JTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAwMiA1IDMgMiAuIHN0b3AgMjAgMCAxIDYgLiIKLQotcHl0aG9uIF9fYW5vbnltb3VzKCkgewotICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgVHJ1ZSwgRmFsc2UsIGQpOgotICAgICAgICBkLnNldFZhcigiSU5ISUJJVF9VUERBVEVSQ0RfQkJDTEFTUyIsICIxIikKLX0KLQotVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKLUdST1VQQUREX1BBUkFNXyR7UE59ID0gIi1yIG5ldGRldiIKLVVTRVJBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gLS1ob21lICR7bG9jYWxzdGF0ZWRpcn0vbGliL2RidXMgXAotICAgICAgICAgICAgICAgICAgICAgICAtLW5vLWNyZWF0ZS1ob21lIC0tc2hlbGwgL2Jpbi9mYWxzZSBcCi0gICAgICAgICAgICAgICAgICAgICAgIC0tdXNlci1ncm91cCBtZXNzYWdlYnVzIgotCi1DT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9kYnVzLTEvc3lzdGVtLmNvbmYgJHtzeXNjb25mZGlyfS9kYnVzLTEvc2Vzc2lvbi5jb25mIgotCi1ERUJJQU5OQU1FXyR7UE59ID0gImRidXMtMSIKLQotUEFDS0FHRVMgPSsgIiR7UE59LWxpYiIKLQotT0xEUEtHTkFNRSA9ICJkYnVzLXgxMSIKLU9MRFBLR05BTUVfY2xhc3MtbmF0aXZlc2RrID0gIiIKLQotIyBmb3IgY29tcGF0aWJpbGl0eQotUlBST1ZJREVTXyR7UE59ID0gIiR7T0xEUEtHTkFNRX0iCi1SUkVQTEFDRVNfJHtQTn0gKz0gIiR7T0xEUEtHTkFNRX0iCi0KLUZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9kYnVzLWRhZW1vbiogXAotICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RidXMtdXVpZGdlbiBcCi0gICAgICAgICAgICAgICAke2JpbmRpcn0vZGJ1cy1jbGVhbnVwLXNvY2tldHMgXAotICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RidXMtc2VuZCBcCi0gICAgICAgICAgICAgICAke2JpbmRpcn0vZGJ1cy1tb25pdG9yIFwKLSAgICAgICAgICAgICAgICR7YmluZGlyfS9kYnVzLWxhdW5jaCBcCi0gICAgICAgICAgICAgICAke2JpbmRpcn0vZGJ1cy1ydW4tc2Vzc2lvbiBcCi0gICAgICAgICAgICAgICAke2JpbmRpcn0vZGJ1cy11cGRhdGUtYWN0aXZhdGlvbi1lbnZpcm9ubWVudCBcCi0gICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L2RidXMqIFwKLSAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0gXAotICAgICAgICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfSBcCi0gICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zZXJ2aWNlcyBcCi0gICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0tc2VydmljZXMgXAotICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc2Vzc2lvbi5kIFwKLSAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3Nlc3Npb24uY29uZiBcCi0gICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0uZCBcCi0gICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0uY29uZiBcCi0gICAgICAgICAgICAgICAke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9IFwKLSAgICAgICAgICAgICAgICR7c3lzdGVtZF91c2VyX3VuaXRkaXJ9IFwKLSIKLUZJTEVTXyR7UE59LWxpYiA9ICIke2xpYmRpcn0vbGliKi5zby4qIgotUlJFQ09NTUVORFNfJHtQTn0tbGliID0gIiR7UE59IgotRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vZGJ1cy0xLjAvaW5jbHVkZSAke2JpbmRpcn0vZGJ1cy10ZXN0LXRvb2wiCi0KLVBBQ0tBR0VfV1JJVEVfREVQUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQgc3lzdmluaXQnLCdzeXN0ZW1kLXN5c3RlbWN0bC1uYXRpdmUnLCcnLGQpfSIKLXBrZ19wb3N0aW5zdF9kYnVzKCkgewotCSMgSWYgYm90aCBzeXN0ZW1kIGFuZCBzeXN2aW5pdCBhcmUgZW5hYmxlZCwgbWFzayB0aGUgZGJ1cy0xIGluaXQgc2NyaXB0Ci0gICAgICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kIHN5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KLQkJaWYgWyAtbiAiJEQiIF07IHRoZW4KLQkJCU9QVFM9Ii0tcm9vdD0kRCIKLQkJZmkKLQkJc3lzdGVtY3RsICRPUFRTIG1hc2sgZGJ1cy0xLnNlcnZpY2UKLQlmaQotCi0JaWYgWyAteiAiJEQiIF0gJiYgWyAtZSAvZXRjL2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCBdIDsgdGhlbgotCQkvZXRjL2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCB1cGRhdGUKLQlmaQotfQotCi1FWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXRlc3RzIFwKLSAgICAgICAgICAgICAgICAtLWRpc2FibGUteG1sLWRvY3MgXAotICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1kb3h5Z2VuLWRvY3MgXAotICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1saWJhdWRpdCBcCi0gICAgICAgICAgICAgICAgLS1lbmFibGUtbGFyZ2VmaWxlIFwKLSAgICAgICAgICAgICAgICAiCi0KLUVYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBTWVNURU1DVEw9JHtiYXNlX2JpbmRpcn0vc3lzdGVtY3RsIgotRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC0tZGlzYWJsZS1zZWxpbnV4IgotCi1QQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuZmlsdGVyKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCB4MTEnLCBkKX0iCi1QQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZSA9ICIiCi1QQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZXNkayA9ICIiCi0KLVBBQ0tBR0VDT05GSUdbc3lzdGVtZF0gPSAiLS1lbmFibGUtc3lzdGVtZCAtLXdpdGgtc3lzdGVtZHN5c3RlbXVuaXRkaXI9JHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfSwtLWRpc2FibGUtc3lzdGVtZCAtLXdpdGhvdXQtc3lzdGVtZHN5c3RlbXVuaXRkaXIsc3lzdGVtZCIKLVBBQ0tBR0VDT05GSUdbeDExXSA9ICItLXdpdGgteCAtLWVuYWJsZS14MTEtYXV0b2xhdW5jaCwtLXdpdGhvdXQteCAtLWRpc2FibGUteDExLWF1dG9sYXVuY2gsIHZpcnR1YWwvbGlieDExIGxpYnNtIgotUEFDS0FHRUNPTkZJR1t1c2VyLXNlc3Npb25dID0gIi0tZW5hYmxlLXVzZXItc2Vzc2lvbiAtLXdpdGgtc3lzdGVtZHVzZXJ1bml0ZGlyPSR7c3lzdGVtZF91c2VyX3VuaXRkaXJ9LC0tZGlzYWJsZS11c2VyLXNlc3Npb24iCi0KLWRvX2luc3RhbGwoKSB7Ci0JYXV0b3Rvb2xzX2RvX2luc3RhbGwKLQotCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgotCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAotCQlzZWQgJ3M6QGJpbmRpckA6JHtiaW5kaXJ9OicgPCAke1dPUktESVJ9L2RidXMtMS5pbml0ID4ke1dPUktESVJ9L2RidXMtMS5pbml0LnNoCi0JCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2RidXMtMS5pbml0LnNoICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9kYnVzLTEKLQlmaQotCi0JaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KLQkJZm9yIGkgaW4gZGJ1cy50YXJnZXQud2FudHMgc29ja2V0cy50YXJnZXQud2FudHMgbXVsdGktdXNlci50YXJnZXQud2FudHM7IGRvIFwKLQkJCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vJGk7IGRvbmUKLQkJaW5zdGFsbCAtbSAwNjQ0ICR7Qn0vYnVzL2RidXMuc2VydmljZSAke0J9L2J1cy9kYnVzLnNvY2tldCAke0R9JHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfS8KLQkJbG4gLWZzIC4uL2RidXMuc29ja2V0ICR7RH0ke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9L2RidXMudGFyZ2V0LndhbnRzL2RidXMuc29ja2V0Ci0JCWxuIC1mcyAuLi9kYnVzLnNvY2tldCAke0R9JHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfS9zb2NrZXRzLnRhcmdldC53YW50cy9kYnVzLnNvY2tldAotCQlsbiAtZnMgLi4vZGJ1cy5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9L211bHRpLXVzZXIudGFyZ2V0LndhbnRzL2RidXMuc2VydmljZQotCWZpCi0KLQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCi0JZWNobyAiZCBtZXNzYWdlYnVzIG1lc3NhZ2VidXMgMDc1NSAke2xvY2Fsc3RhdGVkaXJ9L3J1bi9kYnVzIG5vbmUiIFwKLQkgICAgID4gJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMvOTlfZGJ1cwotCi0KLQlta2RpciAtcCAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvZGJ1cwotCi0JY2hvd24gbWVzc2FnZWJ1czptZXNzYWdlYnVzICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kYnVzCi0KLQljaG93biByb290Om1lc3NhZ2VidXMgJHtEfSR7bGliZXhlY2Rpcn0vZGJ1cy1kYWVtb24tbGF1bmNoLWhlbHBlcgotCWNobW9kIDQ3NTUgJHtEfSR7bGliZXhlY2Rpcn0vZGJ1cy1kYWVtb24tbGF1bmNoLWhlbHBlcgotCi0JIyBSZW1vdmUgUmVkIEhhdCBpbml0c2NyaXB0Ci0Jcm0gLXJmICR7RH0ke3N5c2NvbmZkaXJ9L3JjLmQKLQotCSMgUmVtb3ZlIGVtcHR5IHRlc3RleGVjIGRpcmVjdG9yeSBhcyB3ZSBkb24ndCBidWlsZCB0ZXN0cwotCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2RidXMtMS4wL3Rlc3QKLQotCSMgUmVtb3ZlIC92YXIvcnVuIGFzIGl0IGlzIGNyZWF0ZWQgb24gc3RhcnR1cAotCXJtIC1yZiAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4KLX0KLQotZG9faW5zdGFsbF9jbGFzcy1uYXRpdmUoKSB7Ci0JYXV0b3Rvb2xzX2RvX2luc3RhbGwKLQotCSMgZm9yIGRidXMtZ2xpYi1uYXRpdmUgaW50cm9zcGVjdGlvbiBnZW5lcmF0aW9uCi0JaW5zdGFsbCAtZCAke0R9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9kYnVzLwotCSMgTi5CLiBpcyBiZWxvdyBpbnN0YWxsIGFjdHVhbGx5IHJlcXVpcmVkPwotCWluc3RhbGwgLW0gMDY0NCBidXMvc2Vzc2lvbi5jb25mICR7RH0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2RidXMvc2Vzc2lvbi5jb25mCi0KLQkjIGRidXMtZ2xpYi1uYXRpdmUgYW5kIGRidXMtZ2xpYiBuZWVkIHRoaXMgeG1sIGZpbGUKLQkuL2J1cy9kYnVzLWRhZW1vbiAtLWludHJvc3BlY3QgPiAke0R9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9kYnVzL2RidXMtYnVzLWludHJvc3BlY3QueG1sCi0JCi0JIyBkYnVzLWxhdW5jaCBoYXMgbm8gWCBzdXBwb3J0IHNvIGxldHMgbm90IGluc3RhbGwgaXQgaW4gY2FzZSB0aGUgaG9zdAotCSMgaGFzIGEgbW9yZSBmZWF0dXJlZCBhbmQgdXNlZnVsIHZlcnNpb24KLQlybSAtZiAke0R9JHtiaW5kaXJ9L2RidXMtbGF1bmNoCi19Ci0KLWRvX2luc3RhbGxfY2xhc3MtbmF0aXZlc2RrKCkgewotCWF1dG90b29sc19kb19pbnN0YWxsCi0KLQkjIGRidXMtbGF1bmNoIGhhcyBubyBYIHN1cHBvcnQgc28gbGV0cyBub3QgaW5zdGFsbCBpdCBpbiBjYXNlIHRoZSBob3N0Ci0JIyBoYXMgYSBtb3JlIGZlYXR1cmVkIGFuZCB1c2VmdWwgdmVyc2lvbgotCXJtIC1mICR7RH0ke2JpbmRpcn0vZGJ1cy1sYXVuY2gKLQotCSMgUmVtb3ZlIC92YXIvcnVuIHRvIGF2b2lkIFFBIGVycm9yCi0Jcm0gLXJmICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1bgotfQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgotCi1JTlNBTkVfU0tJUF8ke1BOfS1wdGVzdCArPSAiYnVpbGQtZGVwcyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXNfMS4xMC4yMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXNfMS4xMC4yMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGRlZGMxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1c18xLjEwLjIwLmJiCkBAIC0wLDAgKzEsMTgwIEBACitTVU1NQVJZID0gIkQtQnVzIG1lc3NhZ2UgYnVzIgorREVTQ1JJUFRJT04gPSAiRC1CdXMgaXMgYSBtZXNzYWdlIGJ1cyBzeXN0ZW0sIGEgc2ltcGxlIHdheSBmb3IgYXBwbGljYXRpb25zIHRvIHRhbGsgdG8gb25lIGFub3RoZXIuIEluIGFkZGl0aW9uIHRvIGludGVycHJvY2VzcyBjb21tdW5pY2F0aW9uLCBELUJ1cyBoZWxwcyBjb29yZGluYXRlIHByb2Nlc3MgbGlmZWN5Y2xlOyBpdCBtYWtlcyBpdCBzaW1wbGUgYW5kIHJlbGlhYmxlIHRvIGNvZGUgYSBcInNpbmdsZSBpbnN0YW5jZVwiIGFwcGxpY2F0aW9uIG9yIGRhZW1vbiwgYW5kIHRvIGxhdW5jaCBhcHBsaWNhdGlvbnMgYW5kIGRhZW1vbnMgb24gZGVtYW5kIHdoZW4gdGhlaXIgc2VydmljZXMgYXJlIG5lZWRlZC4iCitIT01FUEFHRSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkFGTC0yIHwgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTBkZGVkM2I1ODE0OGYzZjFmZDgwNGIyNjM1NGFmM2UgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZGJ1cy9kYnVzLmg7YmVnaW5saW5lPTY7ZW5kbGluZT0yMDttZDU9Nzc1NWM5ZDdhYmNjZDVkYmQyNWE2YTk3NDUzOGJiM2MiCitERVBFTkRTID0gImV4cGF0IHZpcnR1YWwvbGliaW50bCIKK1JERVBFTkRTX2RidXNfY2xhc3MtbmF0aXZlID0gIiIKK1JERVBFTkRTX2RidXNfY2xhc3MtbmF0aXZlc2RrID0gIiIKK1BBQ0tBR0VTICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B0ZXN0JywgJyR7UE59LXB0ZXN0JywgJycsIGQpfSIKK0FMTE9XX0VNUFRZX2RidXMtcHRlc3QgPSAiMSIKK1JERVBFTkRTX2RidXMtcHRlc3RfY2xhc3MtdGFyZ2V0ID0gImRidXMtdGVzdC1wdGVzdCIKKworU1JDX1VSSSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvZGJ1cy9kYnVzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly90bXBkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGJ1cy0xLmluaXQgXAorICAgICAgICAgICBmaWxlOi8vb3MtdGVzdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jbGVhci1ndWlkX2Zyb21fc2VydmVyLWlmLXNlbmRfbmVnb3RpYXRlX3VuaXhfZi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS5hYy1leHBsaWNpdGVseS1jaGVjay1zdGRpbnQuaC5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5NGM5OTFlNzYzZDRmOWYxMzY5MDQxNmIyZGNkOTQxMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlNTc0Yjk3ODBiNTQyNWZkZTRkOTczYmI1OTZlN2VhMGYwOWUwMGZlMmVkZDY2MmRhOTAxNmU5NzZjNDYwYjQ4IgorCitpbmhlcml0IHVzZXJhZGQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0IHVwZGF0ZS1yYy5kIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgorCitJTklUU0NSSVBUX05BTUUgPSAiZGJ1cy0xIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgMDIgNSAzIDIgLiBzdG9wIDIwIDAgMSA2IC4iCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgZC5zZXRWYXIoIklOSElCSVRfVVBEQVRFUkNEX0JCQ0xBU1MiLCAiMSIpCit9CisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitHUk9VUEFERF9QQVJBTV8ke1BOfSA9ICItciBuZXRkZXYiCitVU0VSQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIC0taG9tZSAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kYnVzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1uby1jcmVhdGUtaG9tZSAtLXNoZWxsIC9iaW4vZmFsc2UgXAorICAgICAgICAgICAgICAgICAgICAgICAtLXVzZXItZ3JvdXAgbWVzc2FnZWJ1cyIKKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vZGJ1cy0xL3N5c3RlbS5jb25mICR7c3lzY29uZmRpcn0vZGJ1cy0xL3Nlc3Npb24uY29uZiIKKworREVCSUFOTkFNRV8ke1BOfSA9ICJkYnVzLTEiCisKK1BBQ0tBR0VTID0rICIke1BOfS1saWIiCisKK09MRFBLR05BTUUgPSAiZGJ1cy14MTEiCitPTERQS0dOQU1FX2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKKyMgZm9yIGNvbXBhdGliaWxpdHkKK1JQUk9WSURFU18ke1BOfSA9ICIke09MRFBLR05BTUV9IgorUlJFUExBQ0VTXyR7UE59ICs9ICIke09MRFBLR05BTUV9IgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vZGJ1cy1kYWVtb24qIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9kYnVzLXV1aWRnZW4gXAorICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RidXMtY2xlYW51cC1zb2NrZXRzIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9kYnVzLXNlbmQgXAorICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RidXMtbW9uaXRvciBcCisgICAgICAgICAgICAgICAke2JpbmRpcn0vZGJ1cy1sYXVuY2ggXAorICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RidXMtcnVuLXNlc3Npb24gXAorICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RidXMtdXBkYXRlLWFjdGl2YXRpb24tZW52aXJvbm1lbnQgXAorICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9kYnVzKiBcCisgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9IFwKKyAgICAgICAgICAgICAgICR7bG9jYWxzdGF0ZWRpcn0gXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc2VydmljZXMgXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzIFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3Nlc3Npb24uZCBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zZXNzaW9uLmNvbmYgXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLmQgXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLmNvbmYgXAorICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfSBcCisgICAgICAgICAgICAgICAke3N5c3RlbWRfdXNlcl91bml0ZGlyfSBcCisiCitGSUxFU18ke1BOfS1saWIgPSAiJHtsaWJkaXJ9L2xpYiouc28uKiIKK1JSRUNPTU1FTkRTXyR7UE59LWxpYiA9ICIke1BOfSIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2RidXMtMS4wL2luY2x1ZGUgJHtiaW5kaXJ9L2RidXMtdGVzdC10b29sIgorCitQQUNLQUdFX1dSSVRFX0RFUFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kIHN5c3Zpbml0Jywnc3lzdGVtZC1zeXN0ZW1jdGwtbmF0aXZlJywnJyxkKX0iCitwa2dfcG9zdGluc3RfZGJ1cygpIHsKKwkjIElmIGJvdGggc3lzdGVtZCBhbmQgc3lzdmluaXQgYXJlIGVuYWJsZWQsIG1hc2sgdGhlIGRidXMtMSBpbml0IHNjcmlwdAorICAgICAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCBzeXN2aW5pdCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCQlPUFRTPSItLXJvb3Q9JEQiCisJCWZpCisJCXN5c3RlbWN0bCAkT1BUUyBtYXNrIGRidXMtMS5zZXJ2aWNlCisJZmkKKworCWlmIFsgLXogIiREIiBdICYmIFsgLWUgL2V0Yy9pbml0LmQvcG9wdWxhdGUtdm9sYXRpbGUuc2ggXSA7IHRoZW4KKwkJL2V0Yy9pbml0LmQvcG9wdWxhdGUtdm9sYXRpbGUuc2ggdXBkYXRlCisJZmkKK30KKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS10ZXN0cyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXhtbC1kb2NzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtZG94eWdlbi1kb2NzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtbGliYXVkaXQgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWxhcmdlZmlsZSBcCisgICAgICAgICAgICAgICAgIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgU1lTVEVNQ1RMPSR7YmFzZV9iaW5kaXJ9L3N5c3RlbWN0bCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLWRpc2FibGUtc2VsaW51eCIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmZpbHRlcignRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQgeDExJywgZCl9IgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPSAiIgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmVzZGsgPSAiIgorCitQQUNLQUdFQ09ORklHW3N5c3RlbWRdID0gIi0tZW5hYmxlLXN5c3RlbWQgLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0sLS1kaXNhYmxlLXN5c3RlbWQgLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyLHN5c3RlbWQiCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS13aXRoLXggLS1lbmFibGUteDExLWF1dG9sYXVuY2gsLS13aXRob3V0LXggLS1kaXNhYmxlLXgxMS1hdXRvbGF1bmNoLCB2aXJ0dWFsL2xpYngxMSBsaWJzbSIKK1BBQ0tBR0VDT05GSUdbdXNlci1zZXNzaW9uXSA9ICItLWVuYWJsZS11c2VyLXNlc3Npb24gLS13aXRoLXN5c3RlbWR1c2VydW5pdGRpcj0ke3N5c3RlbWRfdXNlcl91bml0ZGlyfSwtLWRpc2FibGUtdXNlci1zZXNzaW9uIgorCitkb19pbnN0YWxsKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwkJc2VkICdzOkBiaW5kaXJAOiR7YmluZGlyfTonIDwgJHtXT1JLRElSfS9kYnVzLTEuaW5pdCA+JHtXT1JLRElSfS9kYnVzLTEuaW5pdC5zaAorCQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9kYnVzLTEuaW5pdC5zaCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvZGJ1cy0xCisJZmkKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisJCWZvciBpIGluIGRidXMudGFyZ2V0LndhbnRzIHNvY2tldHMudGFyZ2V0LndhbnRzIG11bHRpLXVzZXIudGFyZ2V0LndhbnRzOyBkbyBcCisJCQlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9LyRpOyBkb25lCisJCWluc3RhbGwgLW0gMDY0NCAke0J9L2J1cy9kYnVzLnNlcnZpY2UgJHtCfS9idXMvZGJ1cy5zb2NrZXQgJHtEfSR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vCisJCWxuIC1mcyAuLi9kYnVzLnNvY2tldCAke0R9JHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfS9kYnVzLnRhcmdldC53YW50cy9kYnVzLnNvY2tldAorCQlsbiAtZnMgLi4vZGJ1cy5zb2NrZXQgJHtEfSR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vc29ja2V0cy50YXJnZXQud2FudHMvZGJ1cy5zb2NrZXQKKwkJbG4gLWZzIC4uL2RidXMuc2VydmljZSAke0R9JHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfS9tdWx0aS11c2VyLnRhcmdldC53YW50cy9kYnVzLnNlcnZpY2UKKwlmaQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCWVjaG8gImQgbWVzc2FnZWJ1cyBtZXNzYWdlYnVzIDA3NTUgJHtsb2NhbHN0YXRlZGlyfS9ydW4vZGJ1cyBub25lIiBcCisJICAgICA+ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzLzk5X2RidXMKKworCisJbWtkaXIgLXAgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2RidXMKKworCWNob3duIG1lc3NhZ2VidXM6bWVzc2FnZWJ1cyAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvZGJ1cworCisJY2hvd24gcm9vdDptZXNzYWdlYnVzICR7RH0ke2xpYmV4ZWNkaXJ9L2RidXMtZGFlbW9uLWxhdW5jaC1oZWxwZXIKKwljaG1vZCA0NzU1ICR7RH0ke2xpYmV4ZWNkaXJ9L2RidXMtZGFlbW9uLWxhdW5jaC1oZWxwZXIKKworCSMgUmVtb3ZlIFJlZCBIYXQgaW5pdHNjcmlwdAorCXJtIC1yZiAke0R9JHtzeXNjb25mZGlyfS9yYy5kCisKKwkjIFJlbW92ZSBlbXB0eSB0ZXN0ZXhlYyBkaXJlY3RvcnkgYXMgd2UgZG9uJ3QgYnVpbGQgdGVzdHMKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9kYnVzLTEuMC90ZXN0CisKKwkjIFJlbW92ZSAvdmFyL3J1biBhcyBpdCBpcyBjcmVhdGVkIG9uIHN0YXJ0dXAKKwlybSAtcmYgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuCit9CisKK2RvX2luc3RhbGxfY2xhc3MtbmF0aXZlKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwkjIGZvciBkYnVzLWdsaWItbmF0aXZlIGludHJvc3BlY3Rpb24gZ2VuZXJhdGlvbgorCWluc3RhbGwgLWQgJHtEfSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZGJ1cy8KKwkjIE4uQi4gaXMgYmVsb3cgaW5zdGFsbCBhY3R1YWxseSByZXF1aXJlZD8KKwlpbnN0YWxsIC1tIDA2NDQgYnVzL3Nlc3Npb24uY29uZiAke0R9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9kYnVzL3Nlc3Npb24uY29uZgorCisJIyBkYnVzLWdsaWItbmF0aXZlIGFuZCBkYnVzLWdsaWIgbmVlZCB0aGlzIHhtbCBmaWxlCisJLi9idXMvZGJ1cy1kYWVtb24gLS1pbnRyb3NwZWN0ID4gJHtEfSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZGJ1cy9kYnVzLWJ1cy1pbnRyb3NwZWN0LnhtbAorCQorCSMgZGJ1cy1sYXVuY2ggaGFzIG5vIFggc3VwcG9ydCBzbyBsZXRzIG5vdCBpbnN0YWxsIGl0IGluIGNhc2UgdGhlIGhvc3QKKwkjIGhhcyBhIG1vcmUgZmVhdHVyZWQgYW5kIHVzZWZ1bCB2ZXJzaW9uCisJcm0gLWYgJHtEfSR7YmluZGlyfS9kYnVzLWxhdW5jaAorfQorCitkb19pbnN0YWxsX2NsYXNzLW5hdGl2ZXNkaygpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBkYnVzLWxhdW5jaCBoYXMgbm8gWCBzdXBwb3J0IHNvIGxldHMgbm90IGluc3RhbGwgaXQgaW4gY2FzZSB0aGUgaG9zdAorCSMgaGFzIGEgbW9yZSBmZWF0dXJlZCBhbmQgdXNlZnVsIHZlcnNpb24KKwlybSAtZiAke0R9JHtiaW5kaXJ9L2RidXMtbGF1bmNoCisKKwkjIFJlbW92ZSAvdmFyL3J1biB0byBhdm9pZCBRQSBlcnJvcgorCXJtIC1yZiAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4KK30KK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworSU5TQU5FX1NLSVBfJHtQTn0tcHRlc3QgKz0gImJ1aWxkLWRlcHMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwMy1jb25maWd1cmUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwMy1jb25maWd1cmUucGF0Y2gKaW5kZXggYzUzYWIwMS4uODQ2OWE1MCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDMtY29uZmlndXJlLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDAzLWNvbmZpZ3VyZS5wYXRjaApAQCAtMSwxOSArMSwyMCBAQAotRnJvbSBjNWY1YzUwNTRjMWIxNTUzOWRjY2Y4NjZlMmMzZmFiYTdlZDY4NDU2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSA1OGRkMjRhODBjYTBmNDAwZDA3NjFhZmQ5Y2UyYjdmNjg0ZmM5MTI1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogPT9VVEYtOD9xP0VyaWM9MjBCPUMzPUE5bmFyZD89IDxlcmljQGV1a3JlYS5jb20+CiBEYXRlOiBUaHUsIDI1IEFwciAyMDEzIDAwOjI3OjI1ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggMy82XSBjb25maWd1cmU6IGFkZCBhIHZhcmlhYmxlIHRvIGFsbG93IG9wZW5wdHkgY2hlY2sgdG8gYmUgY2FjaGVkCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZTogYWRkIGEgdmFyaWFibGUgdG8gYWxsb3cgb3BlbnB0eSBjaGVjayB0byBiZSBjYWNoZWQKIAotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbIGh0dHBzOi8vZ2l0aHViLmNvbS9ta2ovZHJvcGJlYXIvcHVsbC80OCBdCiAKK1NpZ25lZC1vZmYtYnk6IERlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+CiAtLS0KICBjb25maWd1cmUuYWMgfCAxMSArKysrKysrKy0tLQogIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IDA1NDYxZjMuLjljMTZkOTAgMTAwNjQ0CitpbmRleCA4OTNiOTA0Li4yNDU0MDhkIDEwMDY0NAogLS0tIGEvY29uZmlndXJlLmFjCiArKysgYi9jb25maWd1cmUuYWMKLUBAIC0xNjYsMTUgKzE2NiwyMCBAQCBBQ19BUkdfRU5BQkxFKG9wZW5wdHksCitAQCAtMTc3LDE1ICsxNzcsMjAgQEAgQUNfQVJHX0VOQUJMRShvcGVucHR5LAogIAkJCUFDX01TR19OT1RJQ0UoTm90IHVzaW5nIG9wZW5wdHkpCiAgCQllbHNlCiAgCQkJQUNfTVNHX05PVElDRShVc2luZyBvcGVucHR5IGlmIGF2YWlsYWJsZSkKQEAgLTM4LDUgKzM5LDUgQEAKICBBQ19BUkdfRU5BQkxFKHN5c2xvZywKICAJWyAgLS1kaXNhYmxlLXN5c2xvZyAgICAgICAgRG9uJ3QgaW5jbHVkZSBzeXNsb2cgc3VwcG9ydF0sCiAtLSAKLTEuNy4xMS43CisyLjguMQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZml4LWxpYnRvbWNyeXB0LWxpYnRvbW1hdGgtb3JkZXJpbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZml4LWxpYnRvbWNyeXB0LWxpYnRvbW1hdGgtb3JkZXJpbmcucGF0Y2gKaW5kZXggZGU5MzBmMi4uMmIwNWUxOCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2ZpeC1saWJ0b21jcnlwdC1saWJ0b21tYXRoLW9yZGVyaW5nLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9maXgtbGlidG9tY3J5cHQtbGlidG9tbWF0aC1vcmRlcmluZy5wYXRjaApAQCAtMSw0ICsxLDQgQEAKLUZyb20gMmZkOGQyYWVkYWQwYzUwY2RmMWU0M2VkZDIzODc4NzRiNzIwYWQ0YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gZjM3ZmE5YTQxZjI0OGZhNDFkZDc0YTQxYzY2Y2I0MWEyOTFjMDNkMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IEFuZHJlIE1jQ3VyZHkgPGFybWNjdXJkeUBnbWFpbC5jb20+CiBEYXRlOiBGcmksIDE2IFNlcCAyMDE2IDEyOjE4OjIzIC0wNzAwCiBTdWJqZWN0OiBbUEFUQ0hdIGZpeCBsaWJ0b21jcnlwdC9saWJ0b21tYXRoIG9yZGVyaW5nCkBAIC0xMSwxOCArMTEsMTkgQEAKIE5vdGUgdGhhdCBMSUJUT01fTElCUyBpcyBub3QgdXNlZCB3aGVuIGxpbmtpbmcgd2l0aCB0aGUgYnVuZGxlZAogbGlidG9tIGxpYnMuCiAKLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbIGh0dHBzOi8vZ2l0aHViLmNvbS9ta2ovZHJvcGJlYXIvY29tbWl0L2Y5ZTZiYzJhZWNhYjBmNGI1YjUyOWUwN2E5MmNjNjNjOGE2NmNkNGIgXQogCiBTaWduZWQtb2ZmLWJ5OiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4KIC0tLQogIGNvbmZpZ3VyZS5hYyB8IDggKysrKy0tLS0KICAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCBiNmFiZTRjLi44NWJiOGJjIDEwMDY0NAoraW5kZXggMjQ1NDA4ZC4uZDYyNDg1MyAxMDA2NDQKIC0tLSBhL2NvbmZpZ3VyZS5hYwogKysrIGIvY29uZmlndXJlLmFjCi1AQCAtMzkwLDE2ICszOTAsMTYgQEAgQUNfQVJHX0VOQUJMRShidW5kbGVkLWxpYnRvbSwKK0BAIC0zOTMsMTYgKzM5MywxNiBAQCBBQ19BUkdfRU5BQkxFKGJ1bmRsZWQtbGlidG9tLAogIAkJCUFDX01TR19OT1RJQ0UoRm9yY2luZyBidW5kbGVkIGxpYnRvbSopCiAgCQllbHNlCiAgCQkJQlVORExFRF9MSUJUT009MApAQCAtNDQsNSArNDUsNSBAQAogICkKICAKIC0tIAotMS45LjEKKzIuOC4xCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9zdXBwb3J0LW91dC1vZi10cmVlLWJ1aWxkcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9zdXBwb3J0LW91dC1vZi10cmVlLWJ1aWxkcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY2ZWZiNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvc3VwcG9ydC1vdXQtb2YtdHJlZS1idWlsZHMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi1Gcm9tOiA9P1VURi04P3E/SGVucmlrPTIwTm9yZHN0cj1DMz1CNm0/PSA8aGVucmlrQGtuYy5udT4KLURhdGU6IFdlZCwgMTEgTWF5IDIwMTYgMTI6MzU6MDYgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSF0gU3VwcG9ydCBvdXQtb2YtdHJlZSBidWlsZHMgdXNpZ24gYnVuZGxlZCBsaWJ0b20KLQotV2hlbiBidWlsZGluZyBvdXQtb2YtdHJlZSB3ZSBuZWVkIGJvdGggc291cmNlIGFuZCBnZW5lcmF0ZWQKLWZvbGRlcnMgaW4gaW5jbHVkZSBwYXRocyB0byBmaW5kIGJvdGggZGlzdHJpYnV0ZWQgYW5kIGdlbmVyYXRlZAotaGVhZGVycy4KLQotCi0KLVNpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0tLS0KLSBsaWJ0b21jcnlwdC9NYWtlZmlsZS5pbiB8IDIgKy0KLSBsaWJ0b21tYXRoL01ha2VmaWxlLmluICB8IDIgKy0KLSAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L01ha2VmaWxlLmluIGIvbGlidG9tY3J5cHQvTWFrZWZpbGUuaW4KLWluZGV4IDMwNTZlZjAuLjc5NzA3MDAgMTAwNjQ0Ci0tLS0gYS9saWJ0b21jcnlwdC9NYWtlZmlsZS5pbgotKysrIGIvbGlidG9tY3J5cHQvTWFrZWZpbGUuaW4KLUBAIC0xOSw3ICsxOSw3IEBAIHNyY2Rpcj1Ac3JjZGlyQAotIAotICMgQ29tcGlsYXRpb24gZmxhZ3MuIE5vdGUgdGhlICs9IGRvZXMgbm90IHdyaXRlIG92ZXIgdGhlIHVzZXIncyBDRkxBR1MhCi0gIyBUaGUgcmVzdCBvZiB0aGUgZmxhZ3MgY29tZSBmcm9tIHRoZSBwYXJlbnQgRHJvcGJlYXIgbWFrZWZpbGUKLS1DRkxBR1MgKz0gLWMgLUkkKHNyY2Rpcikvc3JjL2hlYWRlcnMvIC1JJChzcmNkaXIpLy4uLyAtRExUQ19TT1VSQ0UgLUkkKHNyY2RpcikvLi4vbGlidG9tbWF0aC8KLStDRkxBR1MgKz0gLWMgLUlzcmMvaGVhZGVycy8gLUkkKHNyY2Rpcikvc3JjL2hlYWRlcnMvIC1JLi4vIC1JJChzcmNkaXIpLy4uLyAtRExUQ19TT1VSQ0UgLUkuLi9saWJ0b21tYXRoLyAtSSQoc3JjZGlyKS8uLi9saWJ0b21tYXRoLwotIAotICMgYWRkaXRpb25hbCB3YXJuaW5ncyAobmV3ZXIgR0NDIDMuNCBhbmQgaGlnaGVyKQotIGlmZGVmIEdDQ18zNAotZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvTWFrZWZpbGUuaW4gYi9saWJ0b21tYXRoL01ha2VmaWxlLmluCi1pbmRleCAwNmFiYTY4Li4wMTljNTBiIDEwMDY0NAotLS0tIGEvbGlidG9tbWF0aC9NYWtlZmlsZS5pbgotKysrIGIvbGlidG9tbWF0aC9NYWtlZmlsZS5pbgotQEAgLTksNyArOSw3IEBAIFZQQVRIPUBzcmNkaXJACi0gc3JjZGlyPUBzcmNkaXJACi0gCi0gIyBTbyB0aGF0IGxpYnRvbW1hdGggY2FuIGluY2x1ZGUgRHJvcGJlYXIgaGVhZGVycyBmb3Igb3B0aW9ucyBhbmQgbV9idXJuKCkKLS1DRkxBR1MgKz0gLUkkKHNyY2RpcikvLi4vbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvIC1JJChzcmNkaXIpLy4uLwotK0NGTEFHUyArPSAtSS4gLUkkKHNyY2RpcikgLUkuLi9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy8gLUkkKHNyY2RpcikvLi4vbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvIC1JLi4vIC1JJChzcmNkaXIpLy4uLwotIAotIGlmbmRlZiBJR05PUkVfU1BFRUQKLSAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhcl8yMDE2Ljc0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyXzIwMTYuNzQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MDIwOTcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyXzIwMTYuNzQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLXJlcXVpcmUgZHJvcGJlYXIuaW5jCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly9zdXBwb3J0LW91dC1vZi10cmVlLWJ1aWxkcy5wYXRjaCIKLQotU1JDX1VSSVttZDVzdW1dID0gIjlhZDAxNzI3MzFlMGYxNjYyMzkzNzgwNDY0M2I1YmQ4IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI3MjBlYTU0ZWQwMDlhZjgxMjcwMWJjYzI5MGEyYTYwMWQ1YzEwN2QxMjk5M2U1ZDkyYzBmNWY4MWY3MTg4OTEiCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhcl8yMDE3Ljc1LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyXzIwMTcuNzUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZiMGQxOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhcl8yMDE3Ljc1LmJiCkBAIC0wLDAgKzEsNSBAQAorcmVxdWlyZSBkcm9wYmVhci5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gImU1N2U5YjlkMjU3MDVkY2IwNzNiYTE1YzQxNjQyNGZkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjZjYmMxZGNiMWM5NzA5ZDIyNmRmZjY2OWU1NjA0MTcyYTE4Y2Y1ZGJmOWEyMDE0NzRkNTYxOGFlNDQ2NTA5OGMiCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXQuaW5jCmluZGV4IDlmYTBjYTIuLjBlZTZjMjcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0LmluYwpAQCAtNiw3ICs2LDExIEBACiAKIFNSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2V4cGF0L2V4cGF0LSR7UFZ9LnRhci5iejIgXAogICAgICAgICAgICBmaWxlOi8vYXV0b3Rvb2xzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnRvb2wtdGFnLnBhdGNoIFwKIAkgICIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBmaWxlOi8vbm9fZ2V0cmFuZG9tLnBhdGNoIgorCiBpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZQogCiAjIFRoaXMgcGFja2FnZSB1c2VzIGFuIGFyY2hpdmUgZm9ybWF0IGtub3duIHRvIGhhdmUgaXNzdWUgd2l0aCBzb21lCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXQvbGlidG9vbC10YWcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXQvbGlidG9vbC10YWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VmNDE5NwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdC9saWJ0b29sLXRhZy5wYXRjaApAQCAtMCwwICsxLDE4IEBACitBZGQgQ0MgdGFnIHRvIGJ1aWxkCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IGV4cGF0LTIuMi4yL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZXhwYXQtMi4yLjIub3JpZy9NYWtlZmlsZS5pbgorKysrIGV4cGF0LTIuMi4yL01ha2VmaWxlLmluCitAQCAtMTA5LDcgKzEwOSw3IEBAIG1rZGlyLWluaXQ6CisgCisgQ0MgPSBAQ0NACisgQ1hYID0gQENYWEAKKy1MSUJUT09MID0gQExJQlRPT0xACisrTElCVE9PTCA9IEBMSUJUT09MQCAtLXRhZyBDQworIAorIElOQ0xVREVTID0gLUkkKHNyY2RpcikvbGliIC1JLgorIExERkxBR1MgPSBATERGTEFHU0AKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdC9ub19nZXRyYW5kb20ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXQvbm9fZ2V0cmFuZG9tLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NGYxYmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXQvbm9fZ2V0cmFuZG9tLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1RoZSBuYXRpdmUgdmVyc2lvbiBvZiBleHBhdCBtYXkgYmUgdXNlZCBvbiBvbGRlciBzeXN0ZW1zIHdoaWNoIGRvbnQgaGF2ZSBnbGliYyAyLjI1CithbmQgaGVuY2UgZG9uJ3QgaGF2ZSBnZXRyYW5kb20oKSB0aGFua3MgdG8gdW5pbmF0aXZlLiBEaXNhYmxlIHRoZSBsaWJjIGNhbGwgYW5kCit1c2UgdGhlIHN5c2NhbGwgaW5zdGVhZCB0byBhdm9pZCBhIGNvbXBhdGliaWxpdHkgaXNzdWUgdW50aWwgd2UgaGF2ZSAyLjI1IGV2ZXJ5d2hlcmUKK3dlIHN1cHBvcnQgd2l0aCB1bmluYXRpdmUuCisKK1JQCisyMDE3LzgvMTQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK0luZGV4OiBleHBhdC0yLjIuMy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBleHBhdC0yLjIuMy5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGV4cGF0LTIuMi4zL2NvbmZpZ3VyZS5hYworQEAgLTE1MSw3ICsxNTEsNyBAQCBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoWworICAgI2luY2x1ZGUgPHN0ZGxpYi5oPiAgLyogZm9yIE5VTEwgKi8KKyAgICNpbmNsdWRlIDxzeXMvcmFuZG9tLmg+CisgICBpbnQgbWFpbigpIHsKKy0gICAgcmV0dXJuIGdldHJhbmRvbShOVUxMLCAwVSwgMFUpOworKyAgICByZXR1cm4gZ2V0cmFuZG9tQlJFQUtNRShOVUxMLCAwVSwgMFUpOworICAgfQorIF0pXSwgWworICAgICBBQ19ERUZJTkUoW0hBVkVfR0VUUkFORE9NXSwgWzFdLApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0XzIuMi4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0XzIuMi4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjIxYTExLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdF8yLjIuMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotcmVxdWlyZSBleHBhdC5pbmMKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTljM2VlNTU5YzZmOWRjZWUxMDQzZWFkMTEyMTM5ZjRmIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiMmY0Nzg0MWM4MjlmYWNiMzQ2ZWI2ZTNmYWI1MjEyZTIiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDllNTBmZjJkMTliMzUzOGJkMjEyNzkwMmE4OTk4NzQ3NGUxYTRkYjhlNDNhNjZhNGQxYTcxMmFiOWE1MDRmZiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdF8yLjIuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdF8yLjIuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmY4NDUwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0XzIuMi4zLmJiCkBAIC0wLDAgKzEsNCBAQAorcmVxdWlyZSBleHBhdC5pbmMKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTViODYyMGQ5OGU0OTc3MmQ5NWZjMWQyOTFjMjZhYTc5IgorU1JDX1VSSVttZDVzdW1dID0gImYwNTNhZjYzZWY1ZjM5YmQ5Yjc4ZDAxZmJjMjAzMzM0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImIzMTg5MGZiMDJmODVjMDAyYTY3NDkxOTIzZjg5YmRhNTAyOGE4ODBmZDZjMzc0ZjcwNzE5M2FkODFhYWNlNWYiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZnRzL2Z0cy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9mdHMvZnRzLmJiCmluZGV4IGRlOTI5N2UuLjAyZjU0MDggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9mdHMvZnRzLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9mdHMvZnRzLmJiCkBAIC0zLDM4ICszLDE4IEBACiAKIFNVTU1BUlkgPSAiUE9TSVggZmlsZSB0cmVlIHN0cmVhbSBvcGVyYXRpb25zIGxpYnJhcnkiCiBIT01FUEFHRSA9ICJodHRwczovL3NpdGVzLmdvb2dsZS5jb20vYS9ib3N0aWMuY29tL2tlaXRoYm9zdGljIgotTElDRU5TRSA9ICJCU0QtNC1DbGF1c2UiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9mdHMuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTM2O21kNT0yNTMyZWRkYjNkMWEyMTkwNTcyM2E0MDExZWM0ZTA4NSIKK0xJQ0VOU0UgPSAiQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWZmZTM1ODE3NGFhZDM4M2YxYjY5Y2UzYjUzZGE5ODIiCiBTRUNUSU9OID0gImxpYnMiCiAKLVNSQ19VUkkgPSAiaHR0cHM6Ly9zaXRlcy5nb29nbGUuY29tL2EvYm9zdGljLmNvbS9rZWl0aGJvc3RpYy9maWxlcy9mdHMudGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovL2Z0cy1oZWFkZXItY29ycmVjdG5lc3MucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZnRzLXVjbGliYy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9yZW1vdmVfY2RlZnMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vc3RkaW50LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2djYzUucGF0Y2ggXAorU1JDUkVWID0gIjk0NDMzM2FlZDlkYzI0Y2ZhNzZjYzY0YmZlNzBjNzVkMjU2NTI3NTMiCitQViA9ICIxLjIrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS92b2lkbGludXgvbXVzbC1mdHMgXAogIgorUyA9ICIke1dPUktESVJ9L2dpdCIKIAotU1JDX1VSSVttZDVzdW1dID0gIjEyMGMxNDcxNTQ4NWVjNmNlZDE0ZjQ5NGQwNTlkMjBhIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNkZjliOWI1YTQ1YWVhZjE2ZjMzYmI4NGU2OTJhMTBkYzY2MmUyMmVjOGE1MTc0OGY5ODc2N2Q2N2ZiNmYzNDIiCi0KLVMgPSAiJHtXT1JLRElSfS8ke0JQTn0iCi0KLWRvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCi0KLUhBU0hTVFlMRV9taXBzYXJjaCA9ICJzeXN2IgotSEFTSFNUWUxFID0gImdudSIKLQotVkVSID0gIjAiCi1kb19jb21waWxlICgpIHsKLSAgICAke0NDfSAtSSR7U30gLWZQSUMgLXNoYXJlZCAtV2wsLS1oYXNoLXN0eWxlPSR7SEFTSFNUWUxFfSAtbyBsaWJmdHMuc28uJHtWRVJ9IC1XbCwtc29uYW1lLGxpYmZ0cy5zby4ke1ZFUn0gJHtTfS9mdHMuYwotfQotCi1kb19pbnN0YWxsKCkgewotICAgIGluc3RhbGwgLURtNzU1ICR7Qn0vbGliZnRzLnNvLiR7VkVSfSAke0R9JHtsaWJkaXJ9L2xpYmZ0cy5zby4ke1ZFUn0KLSAgICBsbiAtc2YgbGliZnRzLnNvLiR7VkVSfSAke0R9JHtsaWJkaXJ9L2xpYmZ0cy5zbwotICAgIGluc3RhbGwgLURtNjQ0ICR7U30vZnRzLmggJHtEfSR7aW5jbHVkZWRpcn0vZnRzLmgKLX0KK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwogIwogIyBXZSB3aWxsIHNraXAgcGFyc2luZyBmb3Igbm9uLW11c2wgc3lzdGVtcwogIwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Z0cy9mdHMvZnRzLWhlYWRlci1jb3JyZWN0bmVzcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9mdHMvZnRzL2Z0cy1oZWFkZXItY29ycmVjdG5lc3MucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3M2RkYzkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Z0cy9mdHMvZnRzLWhlYWRlci1jb3JyZWN0bmVzcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLUluY2x1ZGVkIG5lZWRlZCBoZWFkZXJzIGZvciBjb21waWxpbmcgd2l0aCBtdXNsCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKLQotLS0tIGZ0cy5vcmlnL2Z0cy5oCi0rKysgZnRzL2Z0cy5oCi1AQCAtMzgsNiArMzgsMTcgQEAKLSAjaWZuZGVmCV9GVFNfSF8KLSAjZGVmaW5lCV9GVFNfSF8KLSAKLSsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0rI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgotKwotKyNpbmNsdWRlIDxkaXJlbnQuaD4KLSsjaW5jbHVkZSA8ZXJybm8uaD4KLSsjaW5jbHVkZSA8ZmNudGwuaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDx1bmlzdGQuaD4KLSsKLSB0eXBlZGVmIHN0cnVjdCB7Ci0gCXN0cnVjdCBfZnRzZW50ICpmdHNfY3VyOwkvKiBjdXJyZW50IG5vZGUgKi8KLSAJc3RydWN0IF9mdHNlbnQgKmZ0c19jaGlsZDsJLyogbGlua2VkIGxpc3Qgb2YgY2hpbGRyZW4gKi8KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9mdHMvZnRzL2Z0cy11Y2xpYmMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZnRzL2Z0cy9mdHMtdWNsaWJjLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTc2NTRiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9mdHMvZnRzL2Z0cy11Y2xpYmMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi1BZGQgbWlzc2luZyBkZWZpbmVzIGZvciB1Y2xpYmMKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQotCi0tLS0gZnRzLm9yaWcvZnRzLmMKLSsrKyBmdHMvZnRzLmMKLUBAIC0zMSw2ICszMSwxMCBAQAotICAqIFNVQ0ggREFNQUdFLgotICAqLwotIAotKyNkZWZpbmUJYWxpZ25vZihUWVBFKSAgICgoaW50KSAmKChzdHJ1Y3QgeyBjaGFyIGR1bW15MTsgVFlQRSBkdW1teTI7IH0gKikgMCktPmR1bW15MikKLSsjZGVmaW5lCUFMSUdOQllURVMJKGFsaWdub2YobG9uZyBkb3VibGUpIC0gMSkKLSsjZGVmaW5lCUFMSUdOKHApCSgoKHVpbnRwdHJfdCkocCkgKyBBTElHTkJZVEVTKSAmIH5BTElHTkJZVEVTKSAKLSsKLSAjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi0gc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWZ0cy5jCTguNiAoQmVya2VsZXkpIDgvMTQvOTQiOwotICNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi1AQCAtNjUyLDEwICs2NTYsMTAgQEAKLSAJCWlmICghSVNTRVQoRlRTX1NFRURPVCkgJiYgSVNET1QoZHAtPmRfbmFtZSkpCi0gCQkJY29udGludWU7Ci0gCi0tCQlpZiAoKHAgPSBmdHNfYWxsb2Moc3AsIGRwLT5kX25hbWUsIChpbnQpZHAtPmRfbmFtbGVuKSkgPT0gTlVMTCkKLSsJCWlmICgocCA9IGZ0c19hbGxvYyhzcCwgZHAtPmRfbmFtZSwgKGludClkcC0+ZF9yZWNsZW4pKSA9PSBOVUxMKQotIAkJCWdvdG8gbWVtMTsKLS0JCWlmIChkcC0+ZF9uYW1sZW4gPiBtYXhsZW4pIHsKLS0JCQlpZiAoZnRzX3BhbGxvYyhzcCwgKHNpemVfdClkcC0+ZF9uYW1sZW4pKSB7Ci0rCQlpZiAoZHAtPmRfcmVjbGVuID4gbWF4bGVuKSB7Ci0rCQkJaWYgKGZ0c19wYWxsb2Moc3AsIChzaXplX3QpZHAtPmRfcmVjbGVuKSkgewotIAkJCQkvKgotIAkJCQkgKiBObyBtb3JlIG1lbW9yeSBmb3IgcGF0aCBvciBzdHJ1Y3R1cmVzLiAgU2F2ZQotIAkJCQkgKiBlcnJubywgZnJlZSB1cCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgYW5kIHRoZQotQEAgLTY3NSw3ICs2NzksNyBAQAotIAkJCW1heGxlbiA9IHNwLT5mdHNfcGF0aGxlbiAtIHNwLT5mdHNfY3VyLT5mdHNfcGF0aGxlbiAtIDE7Ci0gCQl9Ci0gCi0tCQlwLT5mdHNfcGF0aGxlbiA9IGxlbiArIGRwLT5kX25hbWxlbiArIDE7Ci0rCQlwLT5mdHNfcGF0aGxlbiA9IGxlbiArIGRwLT5kX3JlY2xlbiArIDE7Ci0gCQlwLT5mdHNfcGFyZW50ID0gc3AtPmZ0c19jdXI7Ci0gCQlwLT5mdHNfbGV2ZWwgPSBsZXZlbDsKLSAKLUBAIC03ODQsNyArNzg4LDcgQEAKLSAJLyogSWYgdXNlciBuZWVkcyBzdGF0IGluZm8sIHN0YXQgYnVmZmVyIGFscmVhZHkgYWxsb2NhdGVkLiAqLwotIAlzYnAgPSBJU1NFVChGVFNfTk9TVEFUKSA/ICZzYiA6IHAtPmZ0c19zdGF0cDsKLSAKLS0jaWZkZWYgRFRfV0hUCi0rI2lmZGVmIFNfSUZXSFQKLSAJLyoKLSAJICogV2hpdGVkLW91dCBmaWxlcyBkb24ndCByZWFsbHkgZXhpc3QuICBIb3dldmVyLCB0aGVyZSdzIHN0YXQoMikgZmlsZQotIAkgKiBtYXNrIGZvciB0aGVtLCBzbyB3ZSBzZXQgaXQgc28gdGhhdCBwcm9ncmFtcyAoaS5lLiwgZmluZCkgZG9uJ3QgaGF2ZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Z0cy9mdHMvZ2NjNS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9mdHMvZnRzL2djYzUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1Yjk0OGUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Z0cy9mdHMvZ2NjNS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNjggKzAsMCBAQAotRm9yd2FyZCBwb3J0IHRoZSBzb3VyY2VzIHRvIGJlIGFibGUgdG8gY29tcGlsZSB3aXRoIGM5OS9nY2M1Ci0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKLQotSW5kZXg6IGZ0cy9mdHMuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGZ0cy5vcmlnL2Z0cy5jCi0rKysgZnRzL2Z0cy5jCi1AQCAtNTEsMTYgKzUxLDYgQEAgc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWZ0cy5jCTguNiAoQgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0gCi0tc3RhdGljIEZUU0VOVAkqZnRzX2FsbG9jIF9fUChGVFMgKiwgY2hhciAqLCBpbnQpOwotLXN0YXRpYyBGVFNFTlQJKmZ0c19idWlsZCBfX1AoRlRTICosIGludCk7Ci0tc3RhdGljIHZvaWQJIGZ0c19sZnJlZSBfX1AoRlRTRU5UICopOwotLXN0YXRpYyB2b2lkCSBmdHNfbG9hZCBfX1AoRlRTICosIEZUU0VOVCAqKTsKLS1zdGF0aWMgc2l6ZV90CSBmdHNfbWF4YXJnbGVuIF9fUChjaGFyICogY29uc3QgKik7Ci0tc3RhdGljIHZvaWQJIGZ0c19wYWRqdXN0IF9fUChGVFMgKiwgdm9pZCAqKTsKLS1zdGF0aWMgaW50CSBmdHNfcGFsbG9jIF9fUChGVFMgKiwgc2l6ZV90KTsKLS1zdGF0aWMgRlRTRU5UCSpmdHNfc29ydCBfX1AoRlRTICosIEZUU0VOVCAqLCBpbnQpOwotLXN0YXRpYyB1X3Nob3J0CSBmdHNfc3RhdCBfX1AoRlRTICosIHN0cnVjdCBkaXJlbnQgKiwgRlRTRU5UICosIGludCk7Ci0tCi0gI2RlZmluZQlJU0RPVChhKQkoYVswXSA9PSAnLicgJiYgKCFhWzFdIHx8IGFbMV0gPT0gJy4nICYmICFhWzJdKSkKLSAKLSAjZGVmaW5lCUlTU0VUKG9wdCkJKHNwLT5mdHNfb3B0aW9ucyAmIG9wdCkKLUBAIC03MywxMTkgKzYzLDE2IEBAIHN0YXRpYyB1X3Nob3J0CSBmdHNfc3RhdCBfX1AoRlRTICosIHN0cnUKLSAjZGVmaW5lCUJDSElMRAkJMQkJLyogZnRzX2NoaWxkcmVuICovCi0gI2RlZmluZQlCTkFNRVMJCTIJCS8qIGZ0c19jaGlsZHJlbiwgbmFtZXMgb25seSAqLwotICNkZWZpbmUJQlJFQUQJCTMJCS8qIGZ0c19yZWFkICovCi0tCi0tRlRTICoKLS1mdHNfb3Blbihhcmd2LCBvcHRpb25zLCBjb21wYXIpCi0tCWNoYXIgKiBjb25zdCAqYXJndjsKLS0JcmVnaXN0ZXIgaW50IG9wdGlvbnM7Ci0tCWludCAoKmNvbXBhcikoKTsKLS17Ci0tCXJlZ2lzdGVyIEZUUyAqc3A7Ci0tCXJlZ2lzdGVyIEZUU0VOVCAqcCwgKnJvb3Q7Ci0tCXJlZ2lzdGVyIGludCBuaXRlbXM7Ci0tCUZUU0VOVCAqcGFyZW50LCAqdG1wOwotLQlpbnQgbGVuOwotLQotLQkvKiBPcHRpb25zIGNoZWNrLiAqLwotLQlpZiAob3B0aW9ucyAmIH5GVFNfT1BUSU9OTUFTSykgewotLQkJZXJybm8gPSBFSU5WQUw7Ci0tCQlyZXR1cm4gKE5VTEwpOwotLQl9Ci0tCi0tCS8qIEFsbG9jYXRlL2luaXRpYWxpemUgdGhlIHN0cmVhbSAqLwotLQlpZiAoKHNwID0gbWFsbG9jKCh1X2ludClzaXplb2YoRlRTKSkpID09IE5VTEwpCi0tCQlyZXR1cm4gKE5VTEwpOwotLQltZW1zZXQoc3AsIDAsIHNpemVvZihGVFMpKTsKLS0Jc3AtPmZ0c19jb21wYXIgPSBjb21wYXI7Ci0tCXNwLT5mdHNfb3B0aW9ucyA9IG9wdGlvbnM7Ci0tCi0tCS8qIExvZ2ljYWwgd2Fsa3MgdHVybiBvbiBOT0NIRElSOyBzeW1ib2xpYyBsaW5rcyBhcmUgdG9vIGhhcmQuICovCi0tCWlmIChJU1NFVChGVFNfTE9HSUNBTCkpCi0tCQlTRVQoRlRTX05PQ0hESVIpOwotLQotLQkvKgotLQkgKiBTdGFydCBvdXQgd2l0aCAxSyBvZiBwYXRoIHNwYWNlLCBhbmQgZW5vdWdoLCBpbiBhbnkgY2FzZSwKLS0JICogdG8gaG9sZCB0aGUgdXNlcidzIHBhdGhzLgotLQkgKi8KLS0JaWYgKGZ0c19wYWxsb2Moc3AsIE1BWChmdHNfbWF4YXJnbGVuKGFyZ3YpLCBNQVhQQVRITEVOKSkpCi0tCQlnb3RvIG1lbTE7Ci0tCi0tCS8qIEFsbG9jYXRlL2luaXRpYWxpemUgcm9vdCdzIHBhcmVudC4gKi8KLS0JaWYgKChwYXJlbnQgPSBmdHNfYWxsb2Moc3AsICIiLCAwKSkgPT0gTlVMTCkKLS0JCWdvdG8gbWVtMjsKLS0JcGFyZW50LT5mdHNfbGV2ZWwgPSBGVFNfUk9PVFBBUkVOVExFVkVMOwotLQotLQkvKiBBbGxvY2F0ZS9pbml0aWFsaXplIHJvb3QocykuICovCi0tCWZvciAocm9vdCA9IE5VTEwsIG5pdGVtcyA9IDA7ICphcmd2OyArK2FyZ3YsICsrbml0ZW1zKSB7Ci0tCQkvKiBEb24ndCBhbGxvdyB6ZXJvLWxlbmd0aCBwYXRocy4gKi8KLS0JCWlmICgobGVuID0gc3RybGVuKCphcmd2KSkgPT0gMCkgewotLQkJCWVycm5vID0gRUlOVkFMOwotLQkJCWdvdG8gbWVtMzsKLS0JCX0KLS0KLS0JCXAgPSBmdHNfYWxsb2Moc3AsICphcmd2LCBsZW4pOwotLQkJcC0+ZnRzX2xldmVsID0gRlRTX1JPT1RMRVZFTDsKLS0JCXAtPmZ0c19wYXJlbnQgPSBwYXJlbnQ7Ci0tCQlwLT5mdHNfYWNjcGF0aCA9IHAtPmZ0c19uYW1lOwotLQkJcC0+ZnRzX2luZm8gPSBmdHNfc3RhdChzcCwgTlVMTCwgcCwgSVNTRVQoRlRTX0NPTUZPTExPVykpOwotLQotLQkJLyogQ29tbWFuZC1saW5lICIuIiBhbmQgIi4uIiBhcmUgcmVhbCBkaXJlY3Rvcmllcy4gKi8KLS0JCWlmIChwLT5mdHNfaW5mbyA9PSBGVFNfRE9UKQotLQkJCXAtPmZ0c19pbmZvID0gRlRTX0Q7Ci0tCi0tCQkvKgotLQkJICogSWYgY29tcGFyaXNvbiByb3V0aW5lIHN1cHBsaWVkLCB0cmF2ZXJzZSBpbiBzb3J0ZWQKLS0JCSAqIG9yZGVyOyBvdGhlcndpc2UgdHJhdmVyc2UgaW4gdGhlIG9yZGVyIHNwZWNpZmllZC4KLS0JCSAqLwotLQkJaWYgKGNvbXBhcikgewotLQkJCXAtPmZ0c19saW5rID0gcm9vdDsKLS0JCQlyb290ID0gcDsKLS0JCX0gZWxzZSB7Ci0tCQkJcC0+ZnRzX2xpbmsgPSBOVUxMOwotLQkJCWlmIChyb290ID09IE5VTEwpCi0tCQkJCXRtcCA9IHJvb3QgPSBwOwotLQkJCWVsc2UgewotLQkJCQl0bXAtPmZ0c19saW5rID0gcDsKLS0JCQkJdG1wID0gcDsKLS0JCQl9Ci0tCQl9Ci0tCX0KLS0JaWYgKGNvbXBhciAmJiBuaXRlbXMgPiAxKQotLQkJcm9vdCA9IGZ0c19zb3J0KHNwLCByb290LCBuaXRlbXMpOwotLQotLQkvKgotLQkgKiBBbGxvY2F0ZSBhIGR1bW15IHBvaW50ZXIgYW5kIG1ha2UgZnRzX3JlYWQgdGhpbmsgdGhhdCB3ZSd2ZSBqdXN0Ci0tCSAqIGZpbmlzaGVkIHRoZSBub2RlIGJlZm9yZSB0aGUgcm9vdChzKTsgc2V0IHAtPmZ0c19pbmZvIHRvIEZUU19JTklUCi0tCSAqIHNvIHRoYXQgZXZlcnl0aGluZyBhYm91dCB0aGUgImN1cnJlbnQiIG5vZGUgaXMgaWdub3JlZC4KLS0JICovCi0tCWlmICgoc3AtPmZ0c19jdXIgPSBmdHNfYWxsb2Moc3AsICIiLCAwKSkgPT0gTlVMTCkKLS0JCWdvdG8gbWVtMzsKLS0Jc3AtPmZ0c19jdXItPmZ0c19saW5rID0gcm9vdDsKLS0Jc3AtPmZ0c19jdXItPmZ0c19pbmZvID0gRlRTX0lOSVQ7Ci0tCi0tCS8qCi0tCSAqIElmIHVzaW5nIGNoZGlyKDIpLCBncmFiIGEgZmlsZSBkZXNjcmlwdG9yIHBvaW50aW5nIHRvIGRvdCB0byBpbnN1cmUKLS0JICogdGhhdCB3ZSBjYW4gZ2V0IGJhY2sgaGVyZTsgdGhpcyBjb3VsZCBiZSBhdm9pZGVkIGZvciBzb21lIHBhdGhzLAotLQkgKiBidXQgYWxtb3N0IGNlcnRhaW5seSBub3Qgd29ydGggdGhlIGVmZm9ydC4gIFNsYXNoZXMsIHN5bWJvbGljIGxpbmtzLAotLQkgKiBhbmQgIi4uIiBhcmUgYWxsIGZhaXJseSBuYXN0eSBwcm9ibGVtcy4gIE5vdGUsIGlmIHdlIGNhbid0IGdldCB0aGUKLS0JICogZGVzY3JpcHRvciB3ZSBydW4gYW55d2F5LCBqdXN0IG1vcmUgc2xvd2x5LgotLQkgKi8KLS0JaWYgKCFJU1NFVChGVFNfTk9DSERJUikgJiYgKHNwLT5mdHNfcmZkID0gb3BlbigiLiIsIE9fUkRPTkxZLCAwKSkgPCAwKQotLQkJU0VUKEZUU19OT0NIRElSKTsKLS0KLS0JcmV0dXJuIChzcCk7Ci0tCi0tbWVtMzoJZnRzX2xmcmVlKHJvb3QpOwotLQlmcmVlKHBhcmVudCk7Ci0tbWVtMjoJZnJlZShzcC0+ZnRzX3BhdGgpOwotLW1lbTE6CWZyZWUoc3ApOwotLQlyZXR1cm4gKE5VTEwpOwotLX0KLSsvKgotKyAqIFNwZWNpYWwgY2FzZSBhIHJvb3Qgb2YgIi8iIHNvIHRoYXQgc2xhc2hlcyBhcmVuJ3QgYXBwZW5kZWQgd2hpY2ggd291bGQKLSsgKiBjYXVzZSBwYXRocyB0byBiZSB3cml0dGVuIGFzICIvL2ZvbyIuCi0rICovCi0rI2RlZmluZQlOQVBQRU5EKHApCQkJCQkJCVwKLSsJKHAtPmZ0c19sZXZlbCA9PSBGVFNfUk9PVExFVkVMICYmIHAtPmZ0c19wYXRobGVuID09IDEgJiYJXAotKwkgICAgcC0+ZnRzX3BhdGhbMF0gPT0gJy8nID8gMCA6IHAtPmZ0c19wYXRobGVuKQotIAotIHN0YXRpYyB2b2lkCi0tZnRzX2xvYWQoc3AsIHApCi0tCUZUUyAqc3A7Ci0tCXJlZ2lzdGVyIEZUU0VOVCAqcDsKLStmdHNfbG9hZChGVFMgKnNwLCByZWdpc3RlciBGVFNFTlQgKnApCi0gewotIAlyZWdpc3RlciBpbnQgbGVuOwotIAlyZWdpc3RlciBjaGFyICpjcDsKLUBAIC0yMDgsMzMyICs5NSwyMTQgQEAgZnRzX2xvYWQoc3AsIHApCi0gCXNwLT5mdHNfZGV2ID0gcC0+ZnRzX2RldjsKLSB9Ci0gCi0taW50Ci0tZnRzX2Nsb3NlKHNwKQotLQlGVFMgKnNwOwotK3N0YXRpYyB2b2lkCi0rZnRzX2xmcmVlKHJlZ2lzdGVyIEZUU0VOVCAqaGVhZCkKLSB7Ci0tCXJlZ2lzdGVyIEZUU0VOVCAqZnJlZXAsICpwOwotLQlpbnQgc2F2ZWRfZXJybm87Ci0rCXJlZ2lzdGVyIEZUU0VOVCAqcDsKLSAKLS0JLyoKLS0JICogVGhpcyBzdGlsbCB3b3JrcyBpZiB3ZSBoYXZlbid0IHJlYWQgYW55dGhpbmcgLS0gdGhlIGR1bW15IHN0cnVjdHVyZQotLQkgKiBwb2ludHMgdG8gdGhlIHJvb3QgbGlzdCwgc28gd2Ugc3RlcCB0aHJvdWdoIHRvIHRoZSBlbmQgb2YgdGhlIHJvb3QKLS0JICogbGlzdCB3aGljaCBoYXMgYSB2YWxpZCBwYXJlbnQgcG9pbnRlci4KLS0JICovCi0tCWlmIChzcC0+ZnRzX2N1cikgewotLQkJZm9yIChwID0gc3AtPmZ0c19jdXI7IHAtPmZ0c19sZXZlbCA+PSBGVFNfUk9PVExFVkVMOykgewotLQkJCWZyZWVwID0gcDsKLS0JCQlwID0gcC0+ZnRzX2xpbmsgPyBwLT5mdHNfbGluayA6IHAtPmZ0c19wYXJlbnQ7Ci0tCQkJZnJlZShmcmVlcCk7Ci0tCQl9Ci0rCS8qIEZyZWUgYSBsaW5rZWQgbGlzdCBvZiBzdHJ1Y3R1cmVzLiAqLwotKwl3aGlsZSAocCA9IGhlYWQpIHsKLSsJCWhlYWQgPSBoZWFkLT5mdHNfbGluazsKLSAJCWZyZWUocCk7Ci0gCX0KLSt9Ci0gCi0tCS8qIEZyZWUgdXAgY2hpbGQgbGlua2VkIGxpc3QsIHNvcnQgYXJyYXksIHBhdGggYnVmZmVyLiAqLwotLQlpZiAoc3AtPmZ0c19jaGlsZCkKLS0JCWZ0c19sZnJlZShzcC0+ZnRzX2NoaWxkKTsKLS0JaWYgKHNwLT5mdHNfYXJyYXkpCi0tCQlmcmVlKHNwLT5mdHNfYXJyYXkpOwotLQlmcmVlKHNwLT5mdHNfcGF0aCk7Ci0rc3RhdGljIHNpemVfdAotK2Z0c19tYXhhcmdsZW4oY2hhciAqIGNvbnN0ICphcmd2KQotK3sKLSsJc2l6ZV90IGxlbiwgbWF4OwotIAotLQkvKiBSZXR1cm4gdG8gb3JpZ2luYWwgZGlyZWN0b3J5LCBzYXZlIGVycm5vIGlmIG5lY2Vzc2FyeS4gKi8KLS0JaWYgKCFJU1NFVChGVFNfTk9DSERJUikpIHsKLS0JCXNhdmVkX2Vycm5vID0gZmNoZGlyKHNwLT5mdHNfcmZkKSA/IGVycm5vIDogMDsKLS0JCSh2b2lkKWNsb3NlKHNwLT5mdHNfcmZkKTsKLS0JfQotKwlmb3IgKG1heCA9IDA7ICphcmd2OyArK2FyZ3YpCi0rCQlpZiAoKGxlbiA9IHN0cmxlbigqYXJndikpID4gbWF4KQotKwkJCW1heCA9IGxlbjsKLSsJcmV0dXJuIChtYXgpOwotK30KLSAKLS0JLyogRnJlZSB1cCB0aGUgc3RyZWFtIHBvaW50ZXIuICovCi0tCWZyZWUoc3ApOwotIAotLQkvKiBTZXQgZXJybm8gYW5kIHJldHVybi4gKi8KLS0JaWYgKCFJU1NFVChGVFNfTk9DSERJUikgJiYgc2F2ZWRfZXJybm8pIHsKLS0JCWVycm5vID0gc2F2ZWRfZXJybm87Ci0tCQlyZXR1cm4gKC0xKTsKLSsvKgotKyAqIFdoZW4gdGhlIHBhdGggaXMgcmVhbGxvYydkLCBoYXZlIHRvIGZpeCBhbGwgb2YgdGhlIHBvaW50ZXJzIGluIHN0cnVjdHVyZXMKLSsgKiBhbHJlYWR5IHJldHVybmVkLgotKyAqLwotK3N0YXRpYyB2b2lkCi0rZnRzX3BhZGp1c3QoRlRTICpzcCwgdm9pZCAqYWRkcikKLSt7Ci0rCUZUU0VOVCAqcDsKLSsKLSsjZGVmaW5lCUFESlVTVChwKSB7CQkJCQkJCVwKLSsJKHApLT5mdHNfYWNjcGF0aCA9CQkJCQkJXAotKwkgICAgKGNoYXIgKilhZGRyICsgKChwKS0+ZnRzX2FjY3BhdGggLSAocCktPmZ0c19wYXRoKTsJCVwKLSsJKHApLT5mdHNfcGF0aCA9IGFkZHI7CQkJCQkJXAotK30KLSsJLyogQWRqdXN0IHRoZSBjdXJyZW50IHNldCBvZiBjaGlsZHJlbi4gKi8KLSsJZm9yIChwID0gc3AtPmZ0c19jaGlsZDsgcDsgcCA9IHAtPmZ0c19saW5rKQotKwkJQURKVVNUKHApOwotKwotKwkvKiBBZGp1c3QgdGhlIHJlc3Qgb2YgdGhlIHRyZWUuICovCi0rCWZvciAocCA9IHNwLT5mdHNfY3VyOyBwLT5mdHNfbGV2ZWwgPj0gRlRTX1JPT1RMRVZFTDspIHsKLSsJCUFESlVTVChwKTsKLSsJCXAgPSBwLT5mdHNfbGluayA/IHAtPmZ0c19saW5rIDogcC0+ZnRzX3BhcmVudDsKLSAJfQotLQlyZXR1cm4gKDApOwotIH0KLSAKLSAvKgotLSAqIFNwZWNpYWwgY2FzZSBhIHJvb3Qgb2YgIi8iIHNvIHRoYXQgc2xhc2hlcyBhcmVuJ3QgYXBwZW5kZWQgd2hpY2ggd291bGQKLS0gKiBjYXVzZSBwYXRocyB0byBiZSB3cml0dGVuIGFzICIvL2ZvbyIuCi0rICogQWxsb3cgZXNzZW50aWFsbHkgdW5saW1pdGVkIHBhdGhzOyBmaW5kLCBybSwgbHMgc2hvdWxkIGFsbCB3b3JrIG9uIGFueSB0cmVlLgotKyAqIE1vc3Qgc3lzdGVtcyB3aWxsIGFsbG93IGNyZWF0aW9uIG9mIHBhdGhzIG11Y2ggbG9uZ2VyIHRoYW4gTUFYUEFUSExFTiwgZXZlbgotKyAqIHRob3VnaCB0aGUga2VybmVsIHdvbid0IHJlc29sdmUgdGhlbS4gIEFkZCB0aGUgc2l6ZSAobm90IGp1c3Qgd2hhdCdzIG5lZWRlZCkKLSsgKiBwbHVzIDI1NiBieXRlcyBzbyBkb24ndCByZWFsbG9jIHRoZSBwYXRoIDIgYnl0ZXMgYXQgYSB0aW1lLgotICAqLwotLSNkZWZpbmUJTkFQUEVORChwKQkJCQkJCQlcCi0tCShwLT5mdHNfbGV2ZWwgPT0gRlRTX1JPT1RMRVZFTCAmJiBwLT5mdHNfcGF0aGxlbiA9PSAxICYmCVwKLS0JICAgIHAtPmZ0c19wYXRoWzBdID09ICcvJyA/IDAgOiBwLT5mdHNfcGF0aGxlbikKLStzdGF0aWMgaW50Ci0rZnRzX3BhbGxvYyhGVFMgKnNwLCBzaXplX3QgbW9yZSkKLSt7Ci0rCXNwLT5mdHNfcGF0aGxlbiArPSBtb3JlICsgMjU2OwotKwlzcC0+ZnRzX3BhdGggPSByZWFsbG9jKHNwLT5mdHNfcGF0aCwgKHNpemVfdClzcC0+ZnRzX3BhdGhsZW4pOwotKwlyZXR1cm4gKHNwLT5mdHNfcGF0aCA9PSBOVUxMKTsKLSt9Ci0gCi0tRlRTRU5UICoKLS1mdHNfcmVhZChzcCkKLS0JcmVnaXN0ZXIgRlRTICpzcDsKLStzdGF0aWMgRlRTRU5UICoKLStmdHNfYWxsb2MoRlRTICpzcCwgY2hhciAqbmFtZSwgcmVnaXN0ZXIgaW50IG5hbWVsZW4pCi0gewotLQlyZWdpc3RlciBGVFNFTlQgKnAsICp0bXA7Ci0tCXJlZ2lzdGVyIGludCBpbnN0cjsKLS0JcmVnaXN0ZXIgY2hhciAqdDsKLS0JaW50IHNhdmVkX2Vycm5vOwotKwlyZWdpc3RlciBGVFNFTlQgKnA7Ci0rCXNpemVfdCBsZW47Ci0gCi0tCS8qIElmIGZpbmlzaGVkIG9yIHVucmVjb3ZlcmFibGUgZXJyb3IsIHJldHVybiBOVUxMLiAqLwotLQlpZiAoc3AtPmZ0c19jdXIgPT0gTlVMTCB8fCBJU1NFVChGVFNfU1RPUCkpCi0rCS8qCi0rCSAqIFRoZSBmaWxlIG5hbWUgaXMgYSB2YXJpYWJsZSBsZW5ndGggYXJyYXkgYW5kIG5vIHN0YXQgc3RydWN0dXJlIGlzCi0rCSAqIG5lY2Vzc2FyeSBpZiB0aGUgdXNlciBoYXMgc2V0IHRoZSBub3N0YXQgYml0LiAgQWxsb2NhdGUgdGhlIEZUU0VOVAotKwkgKiBzdHJ1Y3R1cmUsIHRoZSBmaWxlIG5hbWUgYW5kIHRoZSBzdGF0IHN0cnVjdHVyZSBpbiBvbmUgY2h1bmssIGJ1dAotKwkgKiBiZSBjYXJlZnVsIHRoYXQgdGhlIHN0YXQgc3RydWN0dXJlIGlzIHJlYXNvbmFibHkgYWxpZ25lZC4gIFNpbmNlIHRoZQotKwkgKiBmdHNfbmFtZSBmaWVsZCBpcyBkZWNsYXJlZCB0byBiZSBvZiBzaXplIDEsIHRoZSBmdHNfbmFtZSBwb2ludGVyIGlzCi0rCSAqIG5hbWVsZW4gKyAyIGJlZm9yZSB0aGUgZmlyc3QgcG9zc2libGUgYWRkcmVzcyBvZiB0aGUgc3RhdCBzdHJ1Y3R1cmUuCi0rCSAqLwotKwlsZW4gPSBzaXplb2YoRlRTRU5UKSArIG5hbWVsZW47Ci0rCWlmICghSVNTRVQoRlRTX05PU1RBVCkpCi0rCQlsZW4gKz0gc2l6ZW9mKHN0cnVjdCBzdGF0KSArIEFMSUdOQllURVM7Ci0rCWlmICgocCA9IG1hbGxvYyhsZW4pKSA9PSBOVUxMKQotIAkJcmV0dXJuIChOVUxMKTsKLSAKLS0JLyogU2V0IGN1cnJlbnQgbm9kZSBwb2ludGVyLiAqLwotLQlwID0gc3AtPmZ0c19jdXI7Ci0rCS8qIENvcHkgdGhlIG5hbWUgcGx1cyB0aGUgdHJhaWxpbmcgTlVMTC4gKi8KLSsJbWVtbW92ZShwLT5mdHNfbmFtZSwgbmFtZSwgbmFtZWxlbiArIDEpOwotIAotLQkvKiBTYXZlIGFuZCB6ZXJvIG91dCB1c2VyIGluc3RydWN0aW9ucy4gKi8KLS0JaW5zdHIgPSBwLT5mdHNfaW5zdHI7Ci0rCWlmICghSVNTRVQoRlRTX05PU1RBVCkpCi0rCQlwLT5mdHNfc3RhdHAgPSAoc3RydWN0IHN0YXQgKilBTElHTihwLT5mdHNfbmFtZSArIG5hbWVsZW4gKyAyKTsKLSsJcC0+ZnRzX25hbWVsZW4gPSBuYW1lbGVuOwotKwlwLT5mdHNfcGF0aCA9IHNwLT5mdHNfcGF0aDsKLSsJcC0+ZnRzX2Vycm5vID0gMDsKLSsJcC0+ZnRzX2ZsYWdzID0gMDsKLSAJcC0+ZnRzX2luc3RyID0gRlRTX05PSU5TVFI7Ci0rCXAtPmZ0c19udW1iZXIgPSAwOwotKwlwLT5mdHNfcG9pbnRlciA9IE5VTEw7Ci0rCXJldHVybiAocCk7Ci0rfQotIAotLQkvKiBBbnkgdHlwZSBvZiBmaWxlIG1heSBiZSByZS12aXNpdGVkOyByZS1zdGF0IGFuZCByZS10dXJuLiAqLwotLQlpZiAoaW5zdHIgPT0gRlRTX0FHQUlOKSB7Ci0tCQlwLT5mdHNfaW5mbyA9IGZ0c19zdGF0KHNwLCBOVUxMLCBwLCAwKTsKLS0JCXJldHVybiAocCk7Ci0tCX0KLSAKLStzdGF0aWMgdV9zaG9ydAotK2Z0c19zdGF0KEZUUyAqc3AsIHJlZ2lzdGVyIEZUU0VOVCAqcCwgc3RydWN0IGRpcmVudCAqZHAsIGludCBmb2xsb3cpCi0rewotKwlyZWdpc3RlciBGVFNFTlQgKnQ7Ci0rCXJlZ2lzdGVyIGRldl90IGRldjsKLSsJcmVnaXN0ZXIgaW5vX3QgaW5vOwotKwlzdHJ1Y3Qgc3RhdCAqc2JwLCBzYjsKLSsJaW50IHNhdmVkX2Vycm5vOwotKwotKwkvKiBJZiB1c2VyIG5lZWRzIHN0YXQgaW5mbywgc3RhdCBidWZmZXIgYWxyZWFkeSBhbGxvY2F0ZWQuICovCi0rCXNicCA9IElTU0VUKEZUU19OT1NUQVQpID8gJnNiIDogcC0+ZnRzX3N0YXRwOwotKwotKyNpZmRlZiBTX0lGV0hUCi0gCS8qCi0tCSAqIEZvbGxvd2luZyBhIHN5bWxpbmsgLS0gU0xOT05FIHRlc3QgYWxsb3dzIGFwcGxpY2F0aW9uIHRvIHNlZQotLQkgKiBTTE5PTkUgYW5kIHJlY292ZXIuICBJZiBpbmRpcmVjdGluZyB0aHJvdWdoIGEgc3ltbGluaywgaGF2ZQotLQkgKiBrZWVwIGEgcG9pbnRlciB0byBjdXJyZW50IGxvY2F0aW9uLiAgSWYgdW5hYmxlIHRvIGdldCB0aGF0Ci0tCSAqIHBvaW50ZXIsIGZvbGxvdyBmYWlscy4KLS0JICovCi0tCWlmIChpbnN0ciA9PSBGVFNfRk9MTE9XICYmCi0tCSAgICAocC0+ZnRzX2luZm8gPT0gRlRTX1NMIHx8IHAtPmZ0c19pbmZvID09IEZUU19TTE5PTkUpKSB7Ci0tCQlwLT5mdHNfaW5mbyA9IGZ0c19zdGF0KHNwLCBOVUxMLCBwLCAxKTsKLS0JCWlmIChwLT5mdHNfaW5mbyA9PSBGVFNfRCAmJiAhSVNTRVQoRlRTX05PQ0hESVIpKQotLQkJCWlmICgocC0+ZnRzX3N5bWZkID0gb3BlbigiLiIsIE9fUkRPTkxZLCAwKSkgPCAwKSB7Ci0tCQkJCXAtPmZ0c19lcnJubyA9IGVycm5vOwotLQkJCQlwLT5mdHNfaW5mbyA9IEZUU19FUlI7Ci0tCQkJfSBlbHNlCi0tCQkJCXAtPmZ0c19mbGFncyB8PSBGVFNfU1lNRk9MTE9XOwotLQkJcmV0dXJuIChwKTsKLSsJICogV2hpdGVkLW91dCBmaWxlcyBkb24ndCByZWFsbHkgZXhpc3QuICBIb3dldmVyLCB0aGVyZSdzIHN0YXQoMikgZmlsZQotKwkgKiBtYXNrIGZvciB0aGVtLCBzbyB3ZSBzZXQgaXQgc28gdGhhdCBwcm9ncmFtcyAoaS5lLiwgZmluZCkgZG9uJ3QgaGF2ZQotKwkgKiB0byB0ZXN0IEZUU19XIHNlcGFyYXRlbHkgZnJvbSBvdGhlciBmaWxlIHR5cGVzLgotKwkgKi8KLSsJaWYgKGRwICE9IE5VTEwgJiYgZHAtPmRfdHlwZSA9PSBEVF9XSFQpIHsKLSsJCW1lbXNldChzYnAsIDAsIHNpemVvZihzdHJ1Y3Qgc3RhdCkpOwotKwkJc2JwLT5zdF9tb2RlID0gU19JRldIVDsKLSsJCXJldHVybiAoRlRTX1cpOwotIAl9Ci0tCi0tCS8qIERpcmVjdG9yeSBpbiBwcmUtb3JkZXIuICovCi0tCWlmIChwLT5mdHNfaW5mbyA9PSBGVFNfRCkgewotLQkJLyogSWYgc2tpcHBlZCBvciBjcm9zc2VkIG1vdW50IHBvaW50LCBkbyBwb3N0LW9yZGVyIHZpc2l0LiAqLwotLQkJaWYgKGluc3RyID09IEZUU19TS0lQIHx8Ci0tCQkgICAgSVNTRVQoRlRTX1hERVYpICYmIHAtPmZ0c19kZXYgIT0gc3AtPmZ0c19kZXYpIHsKLS0JCQlpZiAocC0+ZnRzX2ZsYWdzICYgRlRTX1NZTUZPTExPVykKLS0JCQkJKHZvaWQpY2xvc2UocC0+ZnRzX3N5bWZkKTsKLS0JCQlpZiAoc3AtPmZ0c19jaGlsZCkgewotLQkJCQlmdHNfbGZyZWUoc3AtPmZ0c19jaGlsZCk7Ci0tCQkJCXNwLT5mdHNfY2hpbGQgPSBOVUxMOwotLQkJCX0KLS0JCQlwLT5mdHNfaW5mbyA9IEZUU19EUDsKLS0JCQlyZXR1cm4gKHApOwotLQkJfSAKLS0KLS0JCS8qIFJlYnVpbGQgaWYgb25seSByZWFkIHRoZSBuYW1lcyBhbmQgbm93IHRyYXZlcnNpbmcuICovCi0tCQlpZiAoc3AtPmZ0c19jaGlsZCAmJiBzcC0+ZnRzX29wdGlvbnMgJiBGVFNfTkFNRU9OTFkpIHsKLS0JCQlzcC0+ZnRzX29wdGlvbnMgJj0gfkZUU19OQU1FT05MWTsKLS0JCQlmdHNfbGZyZWUoc3AtPmZ0c19jaGlsZCk7Ci0tCQkJc3AtPmZ0c19jaGlsZCA9IE5VTEw7Ci0tCQl9Ci0tCi0tCQkvKgotLQkJICogQ2QgdG8gdGhlIHN1YmRpcmVjdG9yeS4KLS0JCSAqCi0tCQkgKiBJZiBoYXZlIGFscmVhZHkgcmVhZCBhbmQgbm93IGZhaWwgdG8gY2hkaXIsIHdoYWNrIHRoZSBsaXN0Ci0tCQkgKiB0byBtYWtlIHRoZSBuYW1lcyBjb21lIG91dCByaWdodCwgYW5kIHNldCB0aGUgcGFyZW50IGVycm5vCi0tCQkgKiBzbyB0aGUgYXBwbGljYXRpb24gd2lsbCBldmVudHVhbGx5IGdldCBhbiBlcnJvciBjb25kaXRpb24uCi0tCQkgKiBTZXQgdGhlIEZUU19ET05UQ0hESVIgZmxhZyBzbyB0aGF0IHdoZW4gd2UgbG9naWNhbGx5IGNoYW5nZQotLQkJICogZGlyZWN0b3JpZXMgYmFjayB0byB0aGUgcGFyZW50IHdlIGRvbid0IGRvIGEgY2hkaXIuCi0tCQkgKgotLQkJICogSWYgaGF2ZW4ndCByZWFkIGRvIHNvLiAgSWYgdGhlIHJlYWQgZmFpbHMsIGZ0c19idWlsZCBzZXRzCi0tCQkgKiBGVFNfU1RPUCBvciB0aGUgZnRzX2luZm8gZmllbGQgb2YgdGhlIG5vZGUuCi0tCQkgKi8KLS0JCWlmIChzcC0+ZnRzX2NoaWxkKSB7Ci0tCQkJaWYgKENIRElSKHNwLCBwLT5mdHNfYWNjcGF0aCkpIHsKLS0JCQkJcC0+ZnRzX2Vycm5vID0gZXJybm87Ci0tCQkJCXAtPmZ0c19mbGFncyB8PSBGVFNfRE9OVENIRElSOwotLQkJCQlmb3IgKHAgPSBzcC0+ZnRzX2NoaWxkOyBwOyBwID0gcC0+ZnRzX2xpbmspCi0tCQkJCQlwLT5mdHNfYWNjcGF0aCA9Ci0tCQkJCQkgICAgcC0+ZnRzX3BhcmVudC0+ZnRzX2FjY3BhdGg7Ci0tCQkJfQotLQkJfSBlbHNlIGlmICgoc3AtPmZ0c19jaGlsZCA9IGZ0c19idWlsZChzcCwgQlJFQUQpKSA9PSBOVUxMKSB7Ci0tCQkJaWYgKElTU0VUKEZUU19TVE9QKSkKLS0JCQkJcmV0dXJuIChOVUxMKTsKLS0JCQlyZXR1cm4gKHApOwotKyNlbmRpZgotKwotKwkvKgotKwkgKiBJZiBkb2luZyBhIGxvZ2ljYWwgd2Fsaywgb3IgYXBwbGljYXRpb24gcmVxdWVzdGVkIEZUU19GT0xMT1csIGRvCi0rCSAqIGEgc3RhdCgyKS4gIElmIHRoYXQgZmFpbHMsIGNoZWNrIGZvciBhIG5vbi1leGlzdGVudCBzeW1saW5rLiAgSWYKLSsJICogZmFpbCwgc2V0IHRoZSBlcnJubyBmcm9tIHRoZSBzdGF0IGNhbGwuCi0rCSAqLwotKwlpZiAoSVNTRVQoRlRTX0xPR0lDQUwpIHx8IGZvbGxvdykgewotKwkJaWYgKHN0YXQocC0+ZnRzX2FjY3BhdGgsIHNicCkpIHsKLSsJCQlzYXZlZF9lcnJubyA9IGVycm5vOwotKwkJCWlmICghbHN0YXQocC0+ZnRzX2FjY3BhdGgsIHNicCkpIHsKLSsJCQkJZXJybm8gPSAwOwotKwkJCQlyZXR1cm4gKEZUU19TTE5PTkUpOwotKwkJCX0KLSsJCQlwLT5mdHNfZXJybm8gPSBzYXZlZF9lcnJubzsKLSsJCQlnb3RvIGVycjsKLSAJCX0KLS0JCXAgPSBzcC0+ZnRzX2NoaWxkOwotLQkJc3AtPmZ0c19jaGlsZCA9IE5VTEw7Ci0tCQlnb3RvIG5hbWU7Ci0rCX0gZWxzZSBpZiAobHN0YXQocC0+ZnRzX2FjY3BhdGgsIHNicCkpIHsKLSsJCXAtPmZ0c19lcnJubyA9IGVycm5vOwotK2VycjoJCW1lbXNldChzYnAsIDAsIHNpemVvZihzdHJ1Y3Qgc3RhdCkpOwotKwkJcmV0dXJuIChGVFNfTlMpOwotIAl9Ci0gCi0tCS8qIE1vdmUgdG8gdGhlIG5leHQgbm9kZSBvbiB0aGlzIGxldmVsLiAqLwotLW5leHQ6CXRtcCA9IHA7Ci0tCWlmIChwID0gcC0+ZnRzX2xpbmspIHsKLS0JCWZyZWUodG1wKTsKLS0KLS0JCS8qCi0tCQkgKiBJZiByZWFjaGVkIHRoZSB0b3AsIHJldHVybiB0byB0aGUgb3JpZ2luYWwgZGlyZWN0b3J5LCBhbmQKLS0JCSAqIGxvYWQgdGhlIHBhdGhzIGZvciB0aGUgbmV4dCByb290LgotLQkJICovCi0tCQlpZiAocC0+ZnRzX2xldmVsID09IEZUU19ST09UTEVWRUwpIHsKLS0JCQlpZiAoIUlTU0VUKEZUU19OT0NIRElSKSAmJiBGQ0hESVIoc3AsIHNwLT5mdHNfcmZkKSkgewotLQkJCQlTRVQoRlRTX1NUT1ApOwotLQkJCQlyZXR1cm4gKE5VTEwpOwotLQkJCX0KLS0JCQlmdHNfbG9hZChzcCwgcCk7Ci0tCQkJcmV0dXJuIChzcC0+ZnRzX2N1ciA9IHApOwotLQkJfQotLQotKwlpZiAoU19JU0RJUihzYnAtPnN0X21vZGUpKSB7Ci0gCQkvKgotLQkJICogVXNlciBtYXkgaGF2ZSBjYWxsZWQgZnRzX3NldCBvbiB0aGUgbm9kZS4gIElmIHNraXBwZWQsCi0tCQkgKiBpZ25vcmUuICBJZiBmb2xsb3dlZCwgZ2V0IGEgZmlsZSBkZXNjcmlwdG9yIHNvIHdlIGNhbgotLQkJICogZ2V0IGJhY2sgaWYgbmVjZXNzYXJ5LgotKwkJICogU2V0IHRoZSBkZXZpY2UvaW5vZGUuICBVc2VkIHRvIGZpbmQgY3ljbGVzIGFuZCBjaGVjayBmb3IKLSsJCSAqIGNyb3NzaW5nIG1vdW50IHBvaW50cy4gIEFsc28gcmVtZW1iZXIgdGhlIGxpbmsgY291bnQsIHVzZWQKLSsJCSAqIGluIGZ0c19idWlsZCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHN0YXQgY2FsbHMuICBJdCBpcwotKwkJICogdW5kZXJzdG9vZCB0aGF0IHRoZXNlIGZpZWxkcyBhcmUgb25seSByZWZlcmVuY2VkIGlmIGZ0c19pbmZvCi0rCQkgKiBpcyBzZXQgdG8gRlRTX0QuCi0gCQkgKi8KLS0JCWlmIChwLT5mdHNfaW5zdHIgPT0gRlRTX1NLSVApCi0tCQkJZ290byBuZXh0OwotLQkJaWYgKHAtPmZ0c19pbnN0ciA9PSBGVFNfRk9MTE9XKSB7Ci0tCQkJcC0+ZnRzX2luZm8gPSBmdHNfc3RhdChzcCwgTlVMTCwgcCwgMSk7Ci0tCQkJaWYgKHAtPmZ0c19pbmZvID09IEZUU19EICYmICFJU1NFVChGVFNfTk9DSERJUikpCi0tCQkJCWlmICgocC0+ZnRzX3N5bWZkID0KLS0JCQkJICAgIG9wZW4oIi4iLCBPX1JET05MWSwgMCkpIDwgMCkgewotLQkJCQkJcC0+ZnRzX2Vycm5vID0gZXJybm87Ci0tCQkJCQlwLT5mdHNfaW5mbyA9IEZUU19FUlI7Ci0tCQkJCX0gZWxzZQotLQkJCQkJcC0+ZnRzX2ZsYWdzIHw9IEZUU19TWU1GT0xMT1c7Ci0tCQkJcC0+ZnRzX2luc3RyID0gRlRTX05PSU5TVFI7Ci0tCQl9Ci0tCi0tbmFtZToJCXQgPSBzcC0+ZnRzX3BhdGggKyBOQVBQRU5EKHAtPmZ0c19wYXJlbnQpOwotLQkJKnQrKyA9ICcvJzsKLS0JCW1lbW1vdmUodCwgcC0+ZnRzX25hbWUsIHAtPmZ0c19uYW1lbGVuICsgMSk7Ci0tCQlyZXR1cm4gKHNwLT5mdHNfY3VyID0gcCk7Ci0tCX0KLSsJCWRldiA9IHAtPmZ0c19kZXYgPSBzYnAtPnN0X2RldjsKLSsJCWlubyA9IHAtPmZ0c19pbm8gPSBzYnAtPnN0X2lubzsKLSsJCXAtPmZ0c19ubGluayA9IHNicC0+c3Rfbmxpbms7Ci0gCi0tCS8qIE1vdmUgdXAgdG8gdGhlIHBhcmVudCBub2RlLiAqLwotLQlwID0gdG1wLT5mdHNfcGFyZW50OwotLQlmcmVlKHRtcCk7Ci0rCQlpZiAoSVNET1QocC0+ZnRzX25hbWUpKQotKwkJCXJldHVybiAoRlRTX0RPVCk7Ci0gCi0tCWlmIChwLT5mdHNfbGV2ZWwgPT0gRlRTX1JPT1RQQVJFTlRMRVZFTCkgewotIAkJLyoKLS0JCSAqIERvbmU7IGZyZWUgZXZlcnl0aGluZyB1cCBhbmQgc2V0IGVycm5vIHRvIDAgc28gdGhlIHVzZXIKLS0JCSAqIGNhbiBkaXN0aW5ndWlzaCBiZXR3ZWVuIGVycm9yIGFuZCBFT0YuCi0rCQkgKiBDeWNsZSBkZXRlY3Rpb24gaXMgZG9uZSBieSBicnV0ZSBmb3JjZSB3aGVuIHRoZSBkaXJlY3RvcnkKLSsJCSAqIGlzIGZpcnN0IGVuY291bnRlcmVkLiAgSWYgdGhlIHRyZWUgZ2V0cyBkZWVwIGVub3VnaCBvciB0aGUKLSsJCSAqIG51bWJlciBvZiBzeW1ib2xpYyBsaW5rcyB0byBkaXJlY3RvcmllcyBpcyBoaWdoIGVub3VnaCwKLSsJCSAqIHNvbWV0aGluZyBmYXN0ZXIgbWlnaHQgYmUgd29ydGh3aGlsZS4KLSAJCSAqLwotLQkJZnJlZShwKTsKLS0JCWVycm5vID0gMDsKLS0JCXJldHVybiAoc3AtPmZ0c19jdXIgPSBOVUxMKTsKLS0JfQotLQotLQkvKiBOdWwgdGVybWluYXRlIHRoZSBwYXRobmFtZS4gKi8KLS0Jc3AtPmZ0c19wYXRoW3AtPmZ0c19wYXRobGVuXSA9ICdcMCc7Ci0tCi0tCS8qCi0tCSAqIFJldHVybiB0byB0aGUgcGFyZW50IGRpcmVjdG9yeS4gIElmIGF0IGEgcm9vdCBub2RlIG9yIGNhbWUgdGhyb3VnaAotLQkgKiBhIHN5bWxpbmssIGdvIGJhY2sgdGhyb3VnaCB0aGUgZmlsZSBkZXNjcmlwdG9yLiAgT3RoZXJ3aXNlLCBjZCB1cAotLQkgKiBvbmUgZGlyZWN0b3J5LgotLQkgKi8KLS0JaWYgKHAtPmZ0c19sZXZlbCA9PSBGVFNfUk9PVExFVkVMKSB7Ci0tCQlpZiAoIUlTU0VUKEZUU19OT0NIRElSKSAmJiBGQ0hESVIoc3AsIHNwLT5mdHNfcmZkKSkgewotLQkJCVNFVChGVFNfU1RPUCk7Ci0tCQkJcmV0dXJuIChOVUxMKTsKLS0JCX0KLS0JfSBlbHNlIGlmIChwLT5mdHNfZmxhZ3MgJiBGVFNfU1lNRk9MTE9XKSB7Ci0tCQlpZiAoRkNIRElSKHNwLCBwLT5mdHNfc3ltZmQpKSB7Ci0tCQkJc2F2ZWRfZXJybm8gPSBlcnJubzsKLS0JCQkodm9pZCljbG9zZShwLT5mdHNfc3ltZmQpOwotLQkJCWVycm5vID0gc2F2ZWRfZXJybm87Ci0tCQkJU0VUKEZUU19TVE9QKTsKLS0JCQlyZXR1cm4gKE5VTEwpOwotLQkJfQotLQkJKHZvaWQpY2xvc2UocC0+ZnRzX3N5bWZkKTsKLS0JfSBlbHNlIGlmICghKHAtPmZ0c19mbGFncyAmIEZUU19ET05UQ0hESVIpKSB7Ci0tCQlpZiAoQ0hESVIoc3AsICIuLiIpKSB7Ci0tCQkJU0VUKEZUU19TVE9QKTsKLS0JCQlyZXR1cm4gKE5VTEwpOwotLQkJfQotLQl9Ci0tCXAtPmZ0c19pbmZvID0gcC0+ZnRzX2Vycm5vID8gRlRTX0VSUiA6IEZUU19EUDsKLS0JcmV0dXJuIChzcC0+ZnRzX2N1ciA9IHApOwotLX0KLS0KLS0vKgotLSAqIEZ0c19zZXQgdGFrZXMgdGhlIHN0cmVhbSBhcyBhbiBhcmd1bWVudCBhbHRob3VnaCBpdCdzIG5vdCB1c2VkIGluIHRoaXMKLS0gKiBpbXBsZW1lbnRhdGlvbjsgaXQgd291bGQgYmUgbmVjZXNzYXJ5IGlmIGFueW9uZSB3YW50ZWQgdG8gYWRkIGdsb2JhbAotLSAqIHNlbWFudGljcyB0byBmdHMgdXNpbmcgZnRzX3NldC4gIEFuIGVycm9yIHJldHVybiBpcyBhbGxvd2VkIGZvciBzaW1pbGFyCi0tICogcmVhc29ucy4KLS0gKi8KLS0vKiBBUkdTVVNFRCAqLwotLWludAotLWZ0c19zZXQoc3AsIHAsIGluc3RyKQotLQlGVFMgKnNwOwotLQlGVFNFTlQgKnA7Ci0tCWludCBpbnN0cjsKLS17Ci0tCWlmIChpbnN0ciAmJiBpbnN0ciAhPSBGVFNfQUdBSU4gJiYgaW5zdHIgIT0gRlRTX0ZPTExPVyAmJgotLQkgICAgaW5zdHIgIT0gRlRTX05PSU5TVFIgJiYgaW5zdHIgIT0gRlRTX1NLSVApIHsKLS0JCWVycm5vID0gRUlOVkFMOwotLQkJcmV0dXJuICgxKTsKLSsJCWZvciAodCA9IHAtPmZ0c19wYXJlbnQ7Ci0rCQkgICAgdC0+ZnRzX2xldmVsID49IEZUU19ST09UTEVWRUw7IHQgPSB0LT5mdHNfcGFyZW50KQotKwkJCWlmIChpbm8gPT0gdC0+ZnRzX2lubyAmJiBkZXYgPT0gdC0+ZnRzX2RldikgewotKwkJCQlwLT5mdHNfY3ljbGUgPSB0OwotKwkJCQlyZXR1cm4gKEZUU19EQyk7Ci0rCQkJfQotKwkJcmV0dXJuIChGVFNfRCk7Ci0gCX0KLS0JcC0+ZnRzX2luc3RyID0gaW5zdHI7Ci0tCXJldHVybiAoMCk7Ci0rCWlmIChTX0lTTE5LKHNicC0+c3RfbW9kZSkpCi0rCQlyZXR1cm4gKEZUU19TTCk7Ci0rCWlmIChTX0lTUkVHKHNicC0+c3RfbW9kZSkpCi0rCQlyZXR1cm4gKEZUU19GKTsKLSsJcmV0dXJuIChGVFNfREVGQVVMVCk7Ci0gfQotIAotLUZUU0VOVCAqCi0tZnRzX2NoaWxkcmVuKHNwLCBpbnN0cikKLS0JcmVnaXN0ZXIgRlRTICpzcDsKLS0JaW50IGluc3RyOwotK3N0YXRpYyBGVFNFTlQgKgotK2Z0c19zb3J0KEZUUyAqc3AsIEZUU0VOVCAqaGVhZCwgcmVnaXN0ZXIgaW50IG5pdGVtcykKLSB7Ci0tCXJlZ2lzdGVyIEZUU0VOVCAqcDsKLS0JaW50IGZkOwotLQotLQlpZiAoaW5zdHIgJiYgaW5zdHIgIT0gRlRTX05BTUVPTkxZKSB7Ci0tCQllcnJubyA9IEVJTlZBTDsKLS0JCXJldHVybiAoTlVMTCk7Ci0tCX0KLS0KLS0JLyogU2V0IGN1cnJlbnQgbm9kZSBwb2ludGVyLiAqLwotLQlwID0gc3AtPmZ0c19jdXI7Ci0tCi0tCS8qCi0tCSAqIEVycm5vIHNldCB0byAwIHNvIHVzZXIgY2FuIGRpc3Rpbmd1aXNoIGVtcHR5IGRpcmVjdG9yeSBmcm9tCi0tCSAqIGFuIGVycm9yLgotLQkgKi8KLS0JZXJybm8gPSAwOwotLQotLQkvKiBGYXRhbCBlcnJvcnMgc3RvcCBoZXJlLiAqLwotLQlpZiAoSVNTRVQoRlRTX1NUT1ApKQotLQkJcmV0dXJuIChOVUxMKTsKLS0KLS0JLyogUmV0dXJuIGxvZ2ljYWwgaGllcmFyY2h5IG9mIHVzZXIncyBhcmd1bWVudHMuICovCi0tCWlmIChwLT5mdHNfaW5mbyA9PSBGVFNfSU5JVCkKLS0JCXJldHVybiAocC0+ZnRzX2xpbmspOwotLQotLQkvKgotLQkgKiBJZiBub3QgYSBkaXJlY3RvcnkgYmVpbmcgdmlzaXRlZCBpbiBwcmUtb3JkZXIsIHN0b3AgaGVyZS4gIENvdWxkCi0tCSAqIGFsbG93IEZUU19ETlIsIGFzc3VtaW5nIHRoZSB1c2VyIGhhcyBmaXhlZCB0aGUgcHJvYmxlbSwgYnV0IHRoZQotLQkgKiBzYW1lIGVmZmVjdCBpcyBhdmFpbGFibGUgd2l0aCBGVFNfQUdBSU4uCi0tCSAqLwotLQlpZiAocC0+ZnRzX2luZm8gIT0gRlRTX0QgLyogJiYgcC0+ZnRzX2luZm8gIT0gRlRTX0ROUiAqLykKLS0JCXJldHVybiAoTlVMTCk7Ci0tCi0tCS8qIEZyZWUgdXAgYW55IHByZXZpb3VzIGNoaWxkIGxpc3QuICovCi0tCWlmIChzcC0+ZnRzX2NoaWxkKQotLQkJZnRzX2xmcmVlKHNwLT5mdHNfY2hpbGQpOwotLQotLQlpZiAoaW5zdHIgPT0gRlRTX05BTUVPTkxZKSB7Ci0tCQlzcC0+ZnRzX29wdGlvbnMgfD0gRlRTX05BTUVPTkxZOwotLQkJaW5zdHIgPSBCTkFNRVM7Ci0tCX0gZWxzZSAKLS0JCWluc3RyID0gQkNISUxEOwotKwlyZWdpc3RlciBGVFNFTlQgKiphcCwgKnA7Ci0gCi0gCS8qCi0tCSAqIElmIHVzaW5nIGNoZGlyIG9uIGEgcmVsYXRpdmUgcGF0aCBhbmQgY2FsbGVkIEJFRk9SRSBmdHNfcmVhZCBkb2VzCi0tCSAqIGl0cyBjaGRpciB0byB0aGUgcm9vdCBvZiBhIHRyYXZlcnNhbCwgd2UgY2FuIGxvc2UgLS0gd2UgbmVlZCB0bwotLQkgKiBjaGRpciBpbnRvIHRoZSBzdWJkaXJlY3RvcnksIGFuZCB3ZSBkb24ndCBrbm93IHdoZXJlIHRoZSBjdXJyZW50Ci0tCSAqIGRpcmVjdG9yeSBpcywgc28gd2UgY2FuJ3QgZ2V0IGJhY2sgc28gdGhhdCB0aGUgdXBjb21pbmcgY2hkaXIgYnkKLS0JICogZnRzX3JlYWQgd2lsbCB3b3JrLgotKwkgKiBDb25zdHJ1Y3QgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gdGhlIHN0cnVjdHVyZXMgYW5kIGNhbGwgcXNvcnQoMykuCi0rCSAqIFJlYXNzZW1ibGUgdGhlIGFycmF5IGluIHRoZSBvcmRlciByZXR1cm5lZCBieSBxc29ydC4gIElmIHVuYWJsZSB0bwotKwkgKiBzb3J0IGZvciBtZW1vcnkgcmVhc29ucywgcmV0dXJuIHRoZSBkaXJlY3RvcnkgZW50cmllcyBpbiB0aGVpcgotKwkgKiBjdXJyZW50IG9yZGVyLiAgQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciB0aGUgY3VycmVudCBuZWVkcyBwbHVzCi0rCSAqIDQwIHNvIGRvbid0IHJlYWxsb2Mgb25lIGVudHJ5IGF0IGEgdGltZS4KLSAJICovCi0tCWlmIChwLT5mdHNfbGV2ZWwgIT0gRlRTX1JPT1RMRVZFTCB8fCBwLT5mdHNfYWNjcGF0aFswXSA9PSAnLycgfHwKLS0JICAgIElTU0VUKEZUU19OT0NIRElSKSkKLS0JCXJldHVybiAoc3AtPmZ0c19jaGlsZCA9IGZ0c19idWlsZChzcCwgaW5zdHIpKTsKLS0KLS0JaWYgKChmZCA9IG9wZW4oIi4iLCBPX1JET05MWSwgMCkpIDwgMCkKLS0JCXJldHVybiAoTlVMTCk7Ci0tCXNwLT5mdHNfY2hpbGQgPSBmdHNfYnVpbGQoc3AsIGluc3RyKTsKLS0JaWYgKGZjaGRpcihmZCkpCi0tCQlyZXR1cm4gKE5VTEwpOwotLQkodm9pZCljbG9zZShmZCk7Ci0tCXJldHVybiAoc3AtPmZ0c19jaGlsZCk7Ci0rCWlmIChuaXRlbXMgPiBzcC0+ZnRzX25pdGVtcykgewotKwkJc3AtPmZ0c19uaXRlbXMgPSBuaXRlbXMgKyA0MDsKLSsJCWlmICgoc3AtPmZ0c19hcnJheSA9IHJlYWxsb2Moc3AtPmZ0c19hcnJheSwKLSsJCSAgICAoc2l6ZV90KShzcC0+ZnRzX25pdGVtcyAqIHNpemVvZihGVFNFTlQgKikpKSkgPT0gTlVMTCkgewotKwkJCXNwLT5mdHNfbml0ZW1zID0gMDsKLSsJCQlyZXR1cm4gKGhlYWQpOwotKwkJfQotKwl9Ci0rCWZvciAoYXAgPSBzcC0+ZnRzX2FycmF5LCBwID0gaGVhZDsgcDsgcCA9IHAtPmZ0c19saW5rKQotKwkJKmFwKysgPSBwOwotKwlxc29ydCgodm9pZCAqKXNwLT5mdHNfYXJyYXksIG5pdGVtcywgc2l6ZW9mKEZUU0VOVCAqKSwgc3AtPmZ0c19jb21wYXIpOwotKwlmb3IgKGhlYWQgPSAqKGFwID0gc3AtPmZ0c19hcnJheSk7IC0tbml0ZW1zOyArK2FwKQotKwkJYXBbMF0tPmZ0c19saW5rID0gYXBbMV07Ci0rCWFwWzBdLT5mdHNfbGluayA9IE5VTEw7Ci0rCXJldHVybiAoaGVhZCk7Ci0gfQotIAotIC8qCi1AQCAtNTUxLDkgKzMyMCw3IEBAIGZ0c19jaGlsZHJlbihzcCwgaW5zdHIpCi0gICogYmVlbiBmb3VuZCwgY3V0dGluZyB0aGUgc3RhdCBjYWxscyBieSBhYm91dCAyLzMuCi0gICovCi0gc3RhdGljIEZUU0VOVCAqCi0tZnRzX2J1aWxkKHNwLCB0eXBlKQotLQlyZWdpc3RlciBGVFMgKnNwOwotLQlpbnQgdHlwZTsKLStmdHNfYnVpbGQocmVnaXN0ZXIgRlRTICpzcCwgaW50IHR5cGUpCi0gewotIAlyZWdpc3RlciBzdHJ1Y3QgZGlyZW50ICpkcDsKLSAJcmVnaXN0ZXIgRlRTRU5UICpwLCAqaGVhZDsKLUBAIC03MTYsMjgzICs0ODMsNDc5IEBAIG1lbTE6CQkJCXNhdmVkX2Vycm5vID0gZXJybm87Ci0gCQkJCS0tbmxpbmtzOwotIAkJfQotIAotLQkJLyogV2Ugd2FsayBpbiBkaXJlY3Rvcnkgb3JkZXIgc28gImxzIC1mIiBkb2Vzbid0IGdldCB1cHNldC4gKi8KLS0JCXAtPmZ0c19saW5rID0gTlVMTDsKLS0JCWlmIChoZWFkID09IE5VTEwpCi0tCQkJaGVhZCA9IHRhaWwgPSBwOwotLQkJZWxzZSB7Ci0tCQkJdGFpbC0+ZnRzX2xpbmsgPSBwOwotLQkJCXRhaWwgPSBwOwotKwkJLyogV2Ugd2FsayBpbiBkaXJlY3Rvcnkgb3JkZXIgc28gImxzIC1mIiBkb2Vzbid0IGdldCB1cHNldC4gKi8KLSsJCXAtPmZ0c19saW5rID0gTlVMTDsKLSsJCWlmIChoZWFkID09IE5VTEwpCi0rCQkJaGVhZCA9IHRhaWwgPSBwOwotKwkJZWxzZSB7Ci0rCQkJdGFpbC0+ZnRzX2xpbmsgPSBwOwotKwkJCXRhaWwgPSBwOwotKwkJfQotKwkJKytuaXRlbXM7Ci0rCX0KLSsJKHZvaWQpY2xvc2VkaXIoZGlycCk7Ci0rCi0rCS8qCi0rCSAqIElmIGhhZCB0byByZWFsbG9jIHRoZSBwYXRoLCBhZGp1c3QgdGhlIGFkZHJlc3NlcyBmb3IgdGhlIHJlc3QKLSsJICogb2YgdGhlIHRyZWUuCi0rCSAqLwotKwlpZiAoYWRqYWRkcikKLSsJCWZ0c19wYWRqdXN0KHNwLCBhZGphZGRyKTsKLSsKLSsJLyoKLSsJICogSWYgbm90IGNoYW5naW5nIGRpcmVjdG9yaWVzLCByZXNldCB0aGUgcGF0aCBiYWNrIHRvIG9yaWdpbmFsCi0rCSAqIHN0YXRlLgotKwkgKi8KLSsJaWYgKElTU0VUKEZUU19OT0NIRElSKSkgewotKwkJaWYgKGNwIC0gMSA+IHNwLT5mdHNfcGF0aCkKLSsJCQktLWNwOwotKwkJKmNwID0gJ1wwJzsKLSsJfQotKwotKwkvKgotKwkgKiBJZiBkZXNjZW5kZWQgYWZ0ZXIgY2FsbGVkIGZyb20gZnRzX2NoaWxkcmVuIG9yIGFmdGVyIGNhbGxlZCBmcm9tCi0rCSAqIGZ0c19yZWFkIGFuZCBub3RoaW5nIGZvdW5kLCBnZXQgYmFjay4gIEF0IHRoZSByb290IGxldmVsIHdlIHVzZQotKwkgKiB0aGUgc2F2ZWQgZmQ7IGlmIG9uZSBvZiBmdHNfb3BlbigpJ3MgYXJndW1lbnRzIGlzIGEgcmVsYXRpdmUgcGF0aAotKwkgKiB0byBhbiBlbXB0eSBkaXJlY3RvcnksIHdlIHdpbmQgdXAgaGVyZSB3aXRoIG5vIG90aGVyIHdheSBiYWNrLiAgSWYKLSsJICogY2FuJ3QgZ2V0IGJhY2ssIHdlJ3JlIGRvbmUuCi0rCSAqLwotKwlpZiAoZGVzY2VuZCAmJiAodHlwZSA9PSBCQ0hJTEQgfHwgIW5pdGVtcykgJiYKLSsJICAgIChjdXItPmZ0c19sZXZlbCA9PSBGVFNfUk9PVExFVkVMID8KLSsJICAgIEZDSERJUihzcCwgc3AtPmZ0c19yZmQpIDogQ0hESVIoc3AsICIuLiIpKSkgewotKwkJY3VyLT5mdHNfaW5mbyA9IEZUU19FUlI7Ci0rCQlTRVQoRlRTX1NUT1ApOwotKwkJcmV0dXJuIChOVUxMKTsKLSsJfQotKwotKwkvKiBJZiBkaWRuJ3QgZmluZCBhbnl0aGluZywgcmV0dXJuIE5VTEwuICovCi0rCWlmICghbml0ZW1zKSB7Ci0rCQlpZiAodHlwZSA9PSBCUkVBRCkKLSsJCQljdXItPmZ0c19pbmZvID0gRlRTX0RQOwotKwkJcmV0dXJuIChOVUxMKTsKLSsJfQotKwotKwkvKiBTb3J0IHRoZSBlbnRyaWVzLiAqLwotKwlpZiAoc3AtPmZ0c19jb21wYXIgJiYgbml0ZW1zID4gMSkKLSsJCWhlYWQgPSBmdHNfc29ydChzcCwgaGVhZCwgbml0ZW1zKTsKLSsJcmV0dXJuIChoZWFkKTsKLSt9Ci0rCi0rCi0rRlRTICoKLStmdHNfb3BlbihjaGFyICogY29uc3QgKmFyZ3YsIHJlZ2lzdGVyIGludCBvcHRpb25zLCBpbnQgKCpjb21wYXIpKCkpCi0rewotKwlyZWdpc3RlciBGVFMgKnNwOwotKwlyZWdpc3RlciBGVFNFTlQgKnAsICpyb290OwotKwlyZWdpc3RlciBpbnQgbml0ZW1zOwotKwlGVFNFTlQgKnBhcmVudCwgKnRtcDsKLSsJaW50IGxlbjsKLSsKLSsJLyogT3B0aW9ucyBjaGVjay4gKi8KLSsJaWYgKG9wdGlvbnMgJiB+RlRTX09QVElPTk1BU0spIHsKLSsJCWVycm5vID0gRUlOVkFMOwotKwkJcmV0dXJuIChOVUxMKTsKLSsJfQotKwotKwkvKiBBbGxvY2F0ZS9pbml0aWFsaXplIHRoZSBzdHJlYW0gKi8KLSsJaWYgKChzcCA9IG1hbGxvYygodV9pbnQpc2l6ZW9mKEZUUykpKSA9PSBOVUxMKQotKwkJcmV0dXJuIChOVUxMKTsKLSsJbWVtc2V0KHNwLCAwLCBzaXplb2YoRlRTKSk7Ci0rCXNwLT5mdHNfY29tcGFyID0gY29tcGFyOwotKwlzcC0+ZnRzX29wdGlvbnMgPSBvcHRpb25zOwotKwotKwkvKiBMb2dpY2FsIHdhbGtzIHR1cm4gb24gTk9DSERJUjsgc3ltYm9saWMgbGlua3MgYXJlIHRvbyBoYXJkLiAqLwotKwlpZiAoSVNTRVQoRlRTX0xPR0lDQUwpKQotKwkJU0VUKEZUU19OT0NIRElSKTsKLSsKLSsJLyoKLSsJICogU3RhcnQgb3V0IHdpdGggMUsgb2YgcGF0aCBzcGFjZSwgYW5kIGVub3VnaCwgaW4gYW55IGNhc2UsCi0rCSAqIHRvIGhvbGQgdGhlIHVzZXIncyBwYXRocy4KLSsJICovCi0rCWlmIChmdHNfcGFsbG9jKHNwLCBNQVgoZnRzX21heGFyZ2xlbihhcmd2KSwgTUFYUEFUSExFTikpKQotKwkJZ290byBtZW0xOwotKwotKwkvKiBBbGxvY2F0ZS9pbml0aWFsaXplIHJvb3QncyBwYXJlbnQuICovCi0rCWlmICgocGFyZW50ID0gZnRzX2FsbG9jKHNwLCAiIiwgMCkpID09IE5VTEwpCi0rCQlnb3RvIG1lbTI7Ci0rCXBhcmVudC0+ZnRzX2xldmVsID0gRlRTX1JPT1RQQVJFTlRMRVZFTDsKLSsKLSsJLyogQWxsb2NhdGUvaW5pdGlhbGl6ZSByb290KHMpLiAqLwotKwlmb3IgKHJvb3QgPSBOVUxMLCBuaXRlbXMgPSAwOyAqYXJndjsgKythcmd2LCArK25pdGVtcykgewotKwkJLyogRG9uJ3QgYWxsb3cgemVyby1sZW5ndGggcGF0aHMuICovCi0rCQlpZiAoKGxlbiA9IHN0cmxlbigqYXJndikpID09IDApIHsKLSsJCQllcnJubyA9IEVJTlZBTDsKLSsJCQlnb3RvIG1lbTM7Ci0rCQl9Ci0rCi0rCQlwID0gZnRzX2FsbG9jKHNwLCAqYXJndiwgbGVuKTsKLSsJCXAtPmZ0c19sZXZlbCA9IEZUU19ST09UTEVWRUw7Ci0rCQlwLT5mdHNfcGFyZW50ID0gcGFyZW50OwotKwkJcC0+ZnRzX2FjY3BhdGggPSBwLT5mdHNfbmFtZTsKLSsJCXAtPmZ0c19pbmZvID0gZnRzX3N0YXQoc3AsIE5VTEwsIHAsIElTU0VUKEZUU19DT01GT0xMT1cpKTsKLSsKLSsJCS8qIENvbW1hbmQtbGluZSAiLiIgYW5kICIuLiIgYXJlIHJlYWwgZGlyZWN0b3JpZXMuICovCi0rCQlpZiAocC0+ZnRzX2luZm8gPT0gRlRTX0RPVCkKLSsJCQlwLT5mdHNfaW5mbyA9IEZUU19EOwotKwotKwkJLyoKLSsJCSAqIElmIGNvbXBhcmlzb24gcm91dGluZSBzdXBwbGllZCwgdHJhdmVyc2UgaW4gc29ydGVkCi0rCQkgKiBvcmRlcjsgb3RoZXJ3aXNlIHRyYXZlcnNlIGluIHRoZSBvcmRlciBzcGVjaWZpZWQuCi0rCQkgKi8KLSsJCWlmIChjb21wYXIpIHsKLSsJCQlwLT5mdHNfbGluayA9IHJvb3Q7Ci0rCQkJcm9vdCA9IHA7Ci0rCQl9IGVsc2UgewotKwkJCXAtPmZ0c19saW5rID0gTlVMTDsKLSsJCQlpZiAocm9vdCA9PSBOVUxMKQotKwkJCQl0bXAgPSByb290ID0gcDsKLSsJCQllbHNlIHsKLSsJCQkJdG1wLT5mdHNfbGluayA9IHA7Ci0rCQkJCXRtcCA9IHA7Ci0rCQkJfQotIAkJfQotLQkJKytuaXRlbXM7Ci0gCX0KLS0JKHZvaWQpY2xvc2VkaXIoZGlycCk7Ci0tCi0tCS8qCi0tCSAqIElmIGhhZCB0byByZWFsbG9jIHRoZSBwYXRoLCBhZGp1c3QgdGhlIGFkZHJlc3NlcyBmb3IgdGhlIHJlc3QKLS0JICogb2YgdGhlIHRyZWUuCi0tCSAqLwotLQlpZiAoYWRqYWRkcikKLS0JCWZ0c19wYWRqdXN0KHNwLCBhZGphZGRyKTsKLSsJaWYgKGNvbXBhciAmJiBuaXRlbXMgPiAxKQotKwkJcm9vdCA9IGZ0c19zb3J0KHNwLCByb290LCBuaXRlbXMpOwotIAotIAkvKgotLQkgKiBJZiBub3QgY2hhbmdpbmcgZGlyZWN0b3JpZXMsIHJlc2V0IHRoZSBwYXRoIGJhY2sgdG8gb3JpZ2luYWwKLS0JICogc3RhdGUuCi0rCSAqIEFsbG9jYXRlIGEgZHVtbXkgcG9pbnRlciBhbmQgbWFrZSBmdHNfcmVhZCB0aGluayB0aGF0IHdlJ3ZlIGp1c3QKLSsJICogZmluaXNoZWQgdGhlIG5vZGUgYmVmb3JlIHRoZSByb290KHMpOyBzZXQgcC0+ZnRzX2luZm8gdG8gRlRTX0lOSVQKLSsJICogc28gdGhhdCBldmVyeXRoaW5nIGFib3V0IHRoZSAiY3VycmVudCIgbm9kZSBpcyBpZ25vcmVkLgotIAkgKi8KLS0JaWYgKElTU0VUKEZUU19OT0NIRElSKSkgewotLQkJaWYgKGNwIC0gMSA+IHNwLT5mdHNfcGF0aCkKLS0JCQktLWNwOwotLQkJKmNwID0gJ1wwJzsKLS0JfQotKwlpZiAoKHNwLT5mdHNfY3VyID0gZnRzX2FsbG9jKHNwLCAiIiwgMCkpID09IE5VTEwpCi0rCQlnb3RvIG1lbTM7Ci0rCXNwLT5mdHNfY3VyLT5mdHNfbGluayA9IHJvb3Q7Ci0rCXNwLT5mdHNfY3VyLT5mdHNfaW5mbyA9IEZUU19JTklUOwotIAotIAkvKgotLQkgKiBJZiBkZXNjZW5kZWQgYWZ0ZXIgY2FsbGVkIGZyb20gZnRzX2NoaWxkcmVuIG9yIGFmdGVyIGNhbGxlZCBmcm9tCi0tCSAqIGZ0c19yZWFkIGFuZCBub3RoaW5nIGZvdW5kLCBnZXQgYmFjay4gIEF0IHRoZSByb290IGxldmVsIHdlIHVzZQotLQkgKiB0aGUgc2F2ZWQgZmQ7IGlmIG9uZSBvZiBmdHNfb3BlbigpJ3MgYXJndW1lbnRzIGlzIGEgcmVsYXRpdmUgcGF0aAotLQkgKiB0byBhbiBlbXB0eSBkaXJlY3RvcnksIHdlIHdpbmQgdXAgaGVyZSB3aXRoIG5vIG90aGVyIHdheSBiYWNrLiAgSWYKLS0JICogY2FuJ3QgZ2V0IGJhY2ssIHdlJ3JlIGRvbmUuCi0rCSAqIElmIHVzaW5nIGNoZGlyKDIpLCBncmFiIGEgZmlsZSBkZXNjcmlwdG9yIHBvaW50aW5nIHRvIGRvdCB0byBpbnN1cmUKLSsJICogdGhhdCB3ZSBjYW4gZ2V0IGJhY2sgaGVyZTsgdGhpcyBjb3VsZCBiZSBhdm9pZGVkIGZvciBzb21lIHBhdGhzLAotKwkgKiBidXQgYWxtb3N0IGNlcnRhaW5seSBub3Qgd29ydGggdGhlIGVmZm9ydC4gIFNsYXNoZXMsIHN5bWJvbGljIGxpbmtzLAotKwkgKiBhbmQgIi4uIiBhcmUgYWxsIGZhaXJseSBuYXN0eSBwcm9ibGVtcy4gIE5vdGUsIGlmIHdlIGNhbid0IGdldCB0aGUKLSsJICogZGVzY3JpcHRvciB3ZSBydW4gYW55d2F5LCBqdXN0IG1vcmUgc2xvd2x5LgotIAkgKi8KLS0JaWYgKGRlc2NlbmQgJiYgKHR5cGUgPT0gQkNISUxEIHx8ICFuaXRlbXMpICYmCi0tCSAgICAoY3VyLT5mdHNfbGV2ZWwgPT0gRlRTX1JPT1RMRVZFTCA/Ci0tCSAgICBGQ0hESVIoc3AsIHNwLT5mdHNfcmZkKSA6IENIRElSKHNwLCAiLi4iKSkpIHsKLS0JCWN1ci0+ZnRzX2luZm8gPSBGVFNfRVJSOwotLQkJU0VUKEZUU19TVE9QKTsKLS0JCXJldHVybiAoTlVMTCk7Ci0tCX0KLSsJaWYgKCFJU1NFVChGVFNfTk9DSERJUikgJiYgKHNwLT5mdHNfcmZkID0gb3BlbigiLiIsIE9fUkRPTkxZLCAwKSkgPCAwKQotKwkJU0VUKEZUU19OT0NIRElSKTsKLSAKLS0JLyogSWYgZGlkbid0IGZpbmQgYW55dGhpbmcsIHJldHVybiBOVUxMLiAqLwotLQlpZiAoIW5pdGVtcykgewotLQkJaWYgKHR5cGUgPT0gQlJFQUQpCi0tCQkJY3VyLT5mdHNfaW5mbyA9IEZUU19EUDsKLS0JCXJldHVybiAoTlVMTCk7Ci0tCX0KLSsJcmV0dXJuIChzcCk7Ci0gCi0tCS8qIFNvcnQgdGhlIGVudHJpZXMuICovCi0tCWlmIChzcC0+ZnRzX2NvbXBhciAmJiBuaXRlbXMgPiAxKQotLQkJaGVhZCA9IGZ0c19zb3J0KHNwLCBoZWFkLCBuaXRlbXMpOwotLQlyZXR1cm4gKGhlYWQpOwotK21lbTM6CWZ0c19sZnJlZShyb290KTsKLSsJZnJlZShwYXJlbnQpOwotK21lbTI6CWZyZWUoc3AtPmZ0c19wYXRoKTsKLSttZW0xOglmcmVlKHNwKTsKLSsJcmV0dXJuIChOVUxMKTsKLSB9Ci0gCi0tc3RhdGljIHVfc2hvcnQKLS1mdHNfc3RhdChzcCwgZHAsIHAsIGZvbGxvdykKLS0JRlRTICpzcDsKLS0JcmVnaXN0ZXIgRlRTRU5UICpwOwotLQlzdHJ1Y3QgZGlyZW50ICpkcDsKLS0JaW50IGZvbGxvdzsKLStGVFNFTlQgKgotK2Z0c19yZWFkKHJlZ2lzdGVyIEZUUyAqc3ApCi0gewotLQlyZWdpc3RlciBGVFNFTlQgKnQ7Ci0tCXJlZ2lzdGVyIGRldl90IGRldjsKLS0JcmVnaXN0ZXIgaW5vX3QgaW5vOwotLQlzdHJ1Y3Qgc3RhdCAqc2JwLCBzYjsKLSsJcmVnaXN0ZXIgRlRTRU5UICpwLCAqdG1wOwotKwlyZWdpc3RlciBpbnQgaW5zdHI7Ci0rCXJlZ2lzdGVyIGNoYXIgKnQ7Ci0gCWludCBzYXZlZF9lcnJubzsKLSAKLS0JLyogSWYgdXNlciBuZWVkcyBzdGF0IGluZm8sIHN0YXQgYnVmZmVyIGFscmVhZHkgYWxsb2NhdGVkLiAqLwotLQlzYnAgPSBJU1NFVChGVFNfTk9TVEFUKSA/ICZzYiA6IHAtPmZ0c19zdGF0cDsKLSsJLyogSWYgZmluaXNoZWQgb3IgdW5yZWNvdmVyYWJsZSBlcnJvciwgcmV0dXJuIE5VTEwuICovCi0rCWlmIChzcC0+ZnRzX2N1ciA9PSBOVUxMIHx8IElTU0VUKEZUU19TVE9QKSkKLSsJCXJldHVybiAoTlVMTCk7Ci0gCi0tI2lmZGVmIFNfSUZXSFQKLS0JLyoKLS0JICogV2hpdGVkLW91dCBmaWxlcyBkb24ndCByZWFsbHkgZXhpc3QuICBIb3dldmVyLCB0aGVyZSdzIHN0YXQoMikgZmlsZQotLQkgKiBtYXNrIGZvciB0aGVtLCBzbyB3ZSBzZXQgaXQgc28gdGhhdCBwcm9ncmFtcyAoaS5lLiwgZmluZCkgZG9uJ3QgaGF2ZQotLQkgKiB0byB0ZXN0IEZUU19XIHNlcGFyYXRlbHkgZnJvbSBvdGhlciBmaWxlIHR5cGVzLgotLQkgKi8KLS0JaWYgKGRwICE9IE5VTEwgJiYgZHAtPmRfdHlwZSA9PSBEVF9XSFQpIHsKLS0JCW1lbXNldChzYnAsIDAsIHNpemVvZihzdHJ1Y3Qgc3RhdCkpOwotLQkJc2JwLT5zdF9tb2RlID0gU19JRldIVDsKLS0JCXJldHVybiAoRlRTX1cpOwotKwkvKiBTZXQgY3VycmVudCBub2RlIHBvaW50ZXIuICovCi0rCXAgPSBzcC0+ZnRzX2N1cjsKLSsKLSsJLyogU2F2ZSBhbmQgemVybyBvdXQgdXNlciBpbnN0cnVjdGlvbnMuICovCi0rCWluc3RyID0gcC0+ZnRzX2luc3RyOwotKwlwLT5mdHNfaW5zdHIgPSBGVFNfTk9JTlNUUjsKLSsKLSsJLyogQW55IHR5cGUgb2YgZmlsZSBtYXkgYmUgcmUtdmlzaXRlZDsgcmUtc3RhdCBhbmQgcmUtdHVybi4gKi8KLSsJaWYgKGluc3RyID09IEZUU19BR0FJTikgewotKwkJcC0+ZnRzX2luZm8gPSBmdHNfc3RhdChzcCwgTlVMTCwgcCwgMCk7Ci0rCQlyZXR1cm4gKHApOwotIAl9Ci0tI2VuZGlmCi0tCQotKwotIAkvKgotLQkgKiBJZiBkb2luZyBhIGxvZ2ljYWwgd2Fsaywgb3IgYXBwbGljYXRpb24gcmVxdWVzdGVkIEZUU19GT0xMT1csIGRvCi0tCSAqIGEgc3RhdCgyKS4gIElmIHRoYXQgZmFpbHMsIGNoZWNrIGZvciBhIG5vbi1leGlzdGVudCBzeW1saW5rLiAgSWYKLS0JICogZmFpbCwgc2V0IHRoZSBlcnJubyBmcm9tIHRoZSBzdGF0IGNhbGwuCi0rCSAqIEZvbGxvd2luZyBhIHN5bWxpbmsgLS0gU0xOT05FIHRlc3QgYWxsb3dzIGFwcGxpY2F0aW9uIHRvIHNlZQotKwkgKiBTTE5PTkUgYW5kIHJlY292ZXIuICBJZiBpbmRpcmVjdGluZyB0aHJvdWdoIGEgc3ltbGluaywgaGF2ZQotKwkgKiBrZWVwIGEgcG9pbnRlciB0byBjdXJyZW50IGxvY2F0aW9uLiAgSWYgdW5hYmxlIHRvIGdldCB0aGF0Ci0rCSAqIHBvaW50ZXIsIGZvbGxvdyBmYWlscy4KLSAJICovCi0tCWlmIChJU1NFVChGVFNfTE9HSUNBTCkgfHwgZm9sbG93KSB7Ci0tCQlpZiAoc3RhdChwLT5mdHNfYWNjcGF0aCwgc2JwKSkgewotLQkJCXNhdmVkX2Vycm5vID0gZXJybm87Ci0tCQkJaWYgKCFsc3RhdChwLT5mdHNfYWNjcGF0aCwgc2JwKSkgewotLQkJCQllcnJubyA9IDA7Ci0tCQkJCXJldHVybiAoRlRTX1NMTk9ORSk7Ci0tCQkJfSAKLS0JCQlwLT5mdHNfZXJybm8gPSBzYXZlZF9lcnJubzsKLS0JCQlnb3RvIGVycjsKLSsJaWYgKGluc3RyID09IEZUU19GT0xMT1cgJiYKLSsJICAgIChwLT5mdHNfaW5mbyA9PSBGVFNfU0wgfHwgcC0+ZnRzX2luZm8gPT0gRlRTX1NMTk9ORSkpIHsKLSsJCXAtPmZ0c19pbmZvID0gZnRzX3N0YXQoc3AsIE5VTEwsIHAsIDEpOwotKwkJaWYgKHAtPmZ0c19pbmZvID09IEZUU19EICYmICFJU1NFVChGVFNfTk9DSERJUikpCi0rCQkJaWYgKChwLT5mdHNfc3ltZmQgPSBvcGVuKCIuIiwgT19SRE9OTFksIDApKSA8IDApIHsKLSsJCQkJcC0+ZnRzX2Vycm5vID0gZXJybm87Ci0rCQkJCXAtPmZ0c19pbmZvID0gRlRTX0VSUjsKLSsJCQl9IGVsc2UKLSsJCQkJcC0+ZnRzX2ZsYWdzIHw9IEZUU19TWU1GT0xMT1c7Ci0rCQlyZXR1cm4gKHApOwotKwl9Ci0rCi0rCS8qIERpcmVjdG9yeSBpbiBwcmUtb3JkZXIuICovCi0rCWlmIChwLT5mdHNfaW5mbyA9PSBGVFNfRCkgewotKwkJLyogSWYgc2tpcHBlZCBvciBjcm9zc2VkIG1vdW50IHBvaW50LCBkbyBwb3N0LW9yZGVyIHZpc2l0LiAqLwotKwkJaWYgKGluc3RyID09IEZUU19TS0lQIHx8Ci0rCQkgICAgSVNTRVQoRlRTX1hERVYpICYmIHAtPmZ0c19kZXYgIT0gc3AtPmZ0c19kZXYpIHsKLSsJCQlpZiAocC0+ZnRzX2ZsYWdzICYgRlRTX1NZTUZPTExPVykKLSsJCQkJKHZvaWQpY2xvc2UocC0+ZnRzX3N5bWZkKTsKLSsJCQlpZiAoc3AtPmZ0c19jaGlsZCkgewotKwkJCQlmdHNfbGZyZWUoc3AtPmZ0c19jaGlsZCk7Ci0rCQkJCXNwLT5mdHNfY2hpbGQgPSBOVUxMOwotKwkJCX0KLSsJCQlwLT5mdHNfaW5mbyA9IEZUU19EUDsKLSsJCQlyZXR1cm4gKHApOwotIAkJfQotLQl9IGVsc2UgaWYgKGxzdGF0KHAtPmZ0c19hY2NwYXRoLCBzYnApKSB7Ci0tCQlwLT5mdHNfZXJybm8gPSBlcnJubzsKLS1lcnI6CQltZW1zZXQoc2JwLCAwLCBzaXplb2Yoc3RydWN0IHN0YXQpKTsKLS0JCXJldHVybiAoRlRTX05TKTsKLSsKLSsJCS8qIFJlYnVpbGQgaWYgb25seSByZWFkIHRoZSBuYW1lcyBhbmQgbm93IHRyYXZlcnNpbmcuICovCi0rCQlpZiAoc3AtPmZ0c19jaGlsZCAmJiBzcC0+ZnRzX29wdGlvbnMgJiBGVFNfTkFNRU9OTFkpIHsKLSsJCQlzcC0+ZnRzX29wdGlvbnMgJj0gfkZUU19OQU1FT05MWTsKLSsJCQlmdHNfbGZyZWUoc3AtPmZ0c19jaGlsZCk7Ci0rCQkJc3AtPmZ0c19jaGlsZCA9IE5VTEw7Ci0rCQl9Ci0rCi0rCQkvKgotKwkJICogQ2QgdG8gdGhlIHN1YmRpcmVjdG9yeS4KLSsJCSAqCi0rCQkgKiBJZiBoYXZlIGFscmVhZHkgcmVhZCBhbmQgbm93IGZhaWwgdG8gY2hkaXIsIHdoYWNrIHRoZSBsaXN0Ci0rCQkgKiB0byBtYWtlIHRoZSBuYW1lcyBjb21lIG91dCByaWdodCwgYW5kIHNldCB0aGUgcGFyZW50IGVycm5vCi0rCQkgKiBzbyB0aGUgYXBwbGljYXRpb24gd2lsbCBldmVudHVhbGx5IGdldCBhbiBlcnJvciBjb25kaXRpb24uCi0rCQkgKiBTZXQgdGhlIEZUU19ET05UQ0hESVIgZmxhZyBzbyB0aGF0IHdoZW4gd2UgbG9naWNhbGx5IGNoYW5nZQotKwkJICogZGlyZWN0b3JpZXMgYmFjayB0byB0aGUgcGFyZW50IHdlIGRvbid0IGRvIGEgY2hkaXIuCi0rCQkgKgotKwkJICogSWYgaGF2ZW4ndCByZWFkIGRvIHNvLiAgSWYgdGhlIHJlYWQgZmFpbHMsIGZ0c19idWlsZCBzZXRzCi0rCQkgKiBGVFNfU1RPUCBvciB0aGUgZnRzX2luZm8gZmllbGQgb2YgdGhlIG5vZGUuCi0rCQkgKi8KLSsJCWlmIChzcC0+ZnRzX2NoaWxkKSB7Ci0rCQkJaWYgKENIRElSKHNwLCBwLT5mdHNfYWNjcGF0aCkpIHsKLSsJCQkJcC0+ZnRzX2Vycm5vID0gZXJybm87Ci0rCQkJCXAtPmZ0c19mbGFncyB8PSBGVFNfRE9OVENIRElSOwotKwkJCQlmb3IgKHAgPSBzcC0+ZnRzX2NoaWxkOyBwOyBwID0gcC0+ZnRzX2xpbmspCi0rCQkJCQlwLT5mdHNfYWNjcGF0aCA9Ci0rCQkJCQkgICAgcC0+ZnRzX3BhcmVudC0+ZnRzX2FjY3BhdGg7Ci0rCQkJfQotKwkJfSBlbHNlIGlmICgoc3AtPmZ0c19jaGlsZCA9IGZ0c19idWlsZChzcCwgQlJFQUQpKSA9PSBOVUxMKSB7Ci0rCQkJaWYgKElTU0VUKEZUU19TVE9QKSkKLSsJCQkJcmV0dXJuIChOVUxMKTsKLSsJCQlyZXR1cm4gKHApOwotKwkJfQotKwkJcCA9IHNwLT5mdHNfY2hpbGQ7Ci0rCQlzcC0+ZnRzX2NoaWxkID0gTlVMTDsKLSsJCWdvdG8gbmFtZTsKLSAJfQotIAotLQlpZiAoU19JU0RJUihzYnAtPnN0X21vZGUpKSB7Ci0rCS8qIE1vdmUgdG8gdGhlIG5leHQgbm9kZSBvbiB0aGlzIGxldmVsLiAqLwotK25leHQ6CXRtcCA9IHA7Ci0rCWlmIChwID0gcC0+ZnRzX2xpbmspIHsKLSsJCWZyZWUodG1wKTsKLSsKLSAJCS8qCi0tCQkgKiBTZXQgdGhlIGRldmljZS9pbm9kZS4gIFVzZWQgdG8gZmluZCBjeWNsZXMgYW5kIGNoZWNrIGZvcgotLQkJICogY3Jvc3NpbmcgbW91bnQgcG9pbnRzLiAgQWxzbyByZW1lbWJlciB0aGUgbGluayBjb3VudCwgdXNlZAotLQkJICogaW4gZnRzX2J1aWxkIHRvIGxpbWl0IHRoZSBudW1iZXIgb2Ygc3RhdCBjYWxscy4gIEl0IGlzCi0tCQkgKiB1bmRlcnN0b29kIHRoYXQgdGhlc2UgZmllbGRzIGFyZSBvbmx5IHJlZmVyZW5jZWQgaWYgZnRzX2luZm8KLS0JCSAqIGlzIHNldCB0byBGVFNfRC4KLSsJCSAqIElmIHJlYWNoZWQgdGhlIHRvcCwgcmV0dXJuIHRvIHRoZSBvcmlnaW5hbCBkaXJlY3RvcnksIGFuZAotKwkJICogbG9hZCB0aGUgcGF0aHMgZm9yIHRoZSBuZXh0IHJvb3QuCi0gCQkgKi8KLS0JCWRldiA9IHAtPmZ0c19kZXYgPSBzYnAtPnN0X2RldjsKLS0JCWlubyA9IHAtPmZ0c19pbm8gPSBzYnAtPnN0X2lubzsKLS0JCXAtPmZ0c19ubGluayA9IHNicC0+c3Rfbmxpbms7Ci0rCQlpZiAocC0+ZnRzX2xldmVsID09IEZUU19ST09UTEVWRUwpIHsKLSsJCQlpZiAoIUlTU0VUKEZUU19OT0NIRElSKSAmJiBGQ0hESVIoc3AsIHNwLT5mdHNfcmZkKSkgewotKwkJCQlTRVQoRlRTX1NUT1ApOwotKwkJCQlyZXR1cm4gKE5VTEwpOwotKwkJCX0KLSsJCQlmdHNfbG9hZChzcCwgcCk7Ci0rCQkJcmV0dXJuIChzcC0+ZnRzX2N1ciA9IHApOwotKwkJfQotKwotKwkJLyoKLSsJCSAqIFVzZXIgbWF5IGhhdmUgY2FsbGVkIGZ0c19zZXQgb24gdGhlIG5vZGUuICBJZiBza2lwcGVkLAotKwkJICogaWdub3JlLiAgSWYgZm9sbG93ZWQsIGdldCBhIGZpbGUgZGVzY3JpcHRvciBzbyB3ZSBjYW4KLSsJCSAqIGdldCBiYWNrIGlmIG5lY2Vzc2FyeS4KLSsJCSAqLwotKwkJaWYgKHAtPmZ0c19pbnN0ciA9PSBGVFNfU0tJUCkKLSsJCQlnb3RvIG5leHQ7Ci0rCQlpZiAocC0+ZnRzX2luc3RyID09IEZUU19GT0xMT1cpIHsKLSsJCQlwLT5mdHNfaW5mbyA9IGZ0c19zdGF0KHNwLCBOVUxMLCBwLCAxKTsKLSsJCQlpZiAocC0+ZnRzX2luZm8gPT0gRlRTX0QgJiYgIUlTU0VUKEZUU19OT0NIRElSKSkKLSsJCQkJaWYgKChwLT5mdHNfc3ltZmQgPQotKwkJCQkgICAgb3BlbigiLiIsIE9fUkRPTkxZLCAwKSkgPCAwKSB7Ci0rCQkJCQlwLT5mdHNfZXJybm8gPSBlcnJubzsKLSsJCQkJCXAtPmZ0c19pbmZvID0gRlRTX0VSUjsKLSsJCQkJfSBlbHNlCi0rCQkJCQlwLT5mdHNfZmxhZ3MgfD0gRlRTX1NZTUZPTExPVzsKLSsJCQlwLT5mdHNfaW5zdHIgPSBGVFNfTk9JTlNUUjsKLSsJCX0KLSAKLS0JCWlmIChJU0RPVChwLT5mdHNfbmFtZSkpCi0tCQkJcmV0dXJuIChGVFNfRE9UKTsKLStuYW1lOgkJdCA9IHNwLT5mdHNfcGF0aCArIE5BUFBFTkQocC0+ZnRzX3BhcmVudCk7Ci0rCQkqdCsrID0gJy8nOwotKwkJbWVtbW92ZSh0LCBwLT5mdHNfbmFtZSwgcC0+ZnRzX25hbWVsZW4gKyAxKTsKLSsJCXJldHVybiAoc3AtPmZ0c19jdXIgPSBwKTsKLSsJfQotIAotKwkvKiBNb3ZlIHVwIHRvIHRoZSBwYXJlbnQgbm9kZS4gKi8KLSsJcCA9IHRtcC0+ZnRzX3BhcmVudDsKLSsJZnJlZSh0bXApOwotKwotKwlpZiAocC0+ZnRzX2xldmVsID09IEZUU19ST09UUEFSRU5UTEVWRUwpIHsKLSAJCS8qCi0tCQkgKiBDeWNsZSBkZXRlY3Rpb24gaXMgZG9uZSBieSBicnV0ZSBmb3JjZSB3aGVuIHRoZSBkaXJlY3RvcnkKLS0JCSAqIGlzIGZpcnN0IGVuY291bnRlcmVkLiAgSWYgdGhlIHRyZWUgZ2V0cyBkZWVwIGVub3VnaCBvciB0aGUKLS0JCSAqIG51bWJlciBvZiBzeW1ib2xpYyBsaW5rcyB0byBkaXJlY3RvcmllcyBpcyBoaWdoIGVub3VnaCwKLS0JCSAqIHNvbWV0aGluZyBmYXN0ZXIgbWlnaHQgYmUgd29ydGh3aGlsZS4KLSsJCSAqIERvbmU7IGZyZWUgZXZlcnl0aGluZyB1cCBhbmQgc2V0IGVycm5vIHRvIDAgc28gdGhlIHVzZXIKLSsJCSAqIGNhbiBkaXN0aW5ndWlzaCBiZXR3ZWVuIGVycm9yIGFuZCBFT0YuCi0gCQkgKi8KLS0JCWZvciAodCA9IHAtPmZ0c19wYXJlbnQ7Ci0tCQkgICAgdC0+ZnRzX2xldmVsID49IEZUU19ST09UTEVWRUw7IHQgPSB0LT5mdHNfcGFyZW50KQotLQkJCWlmIChpbm8gPT0gdC0+ZnRzX2lubyAmJiBkZXYgPT0gdC0+ZnRzX2RldikgewotLQkJCQlwLT5mdHNfY3ljbGUgPSB0OwotLQkJCQlyZXR1cm4gKEZUU19EQyk7Ci0tCQkJfQotLQkJcmV0dXJuIChGVFNfRCk7Ci0rCQlmcmVlKHApOwotKwkJZXJybm8gPSAwOwotKwkJcmV0dXJuIChzcC0+ZnRzX2N1ciA9IE5VTEwpOwotIAl9Ci0tCWlmIChTX0lTTE5LKHNicC0+c3RfbW9kZSkpCi0tCQlyZXR1cm4gKEZUU19TTCk7Ci0tCWlmIChTX0lTUkVHKHNicC0+c3RfbW9kZSkpCi0tCQlyZXR1cm4gKEZUU19GKTsKLS0JcmV0dXJuIChGVFNfREVGQVVMVCk7Ci0tfQotIAotLXN0YXRpYyBGVFNFTlQgKgotLWZ0c19zb3J0KHNwLCBoZWFkLCBuaXRlbXMpCi0tCUZUUyAqc3A7Ci0tCUZUU0VOVCAqaGVhZDsKLS0JcmVnaXN0ZXIgaW50IG5pdGVtczsKLS17Ci0tCXJlZ2lzdGVyIEZUU0VOVCAqKmFwLCAqcDsKLSsJLyogTnVsIHRlcm1pbmF0ZSB0aGUgcGF0aG5hbWUuICovCi0rCXNwLT5mdHNfcGF0aFtwLT5mdHNfcGF0aGxlbl0gPSAnXDAnOwotIAotIAkvKgotLQkgKiBDb25zdHJ1Y3QgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gdGhlIHN0cnVjdHVyZXMgYW5kIGNhbGwgcXNvcnQoMykuCi0tCSAqIFJlYXNzZW1ibGUgdGhlIGFycmF5IGluIHRoZSBvcmRlciByZXR1cm5lZCBieSBxc29ydC4gIElmIHVuYWJsZSB0bwotLQkgKiBzb3J0IGZvciBtZW1vcnkgcmVhc29ucywgcmV0dXJuIHRoZSBkaXJlY3RvcnkgZW50cmllcyBpbiB0aGVpcgotLQkgKiBjdXJyZW50IG9yZGVyLiAgQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciB0aGUgY3VycmVudCBuZWVkcyBwbHVzCi0tCSAqIDQwIHNvIGRvbid0IHJlYWxsb2Mgb25lIGVudHJ5IGF0IGEgdGltZS4KLSsJICogUmV0dXJuIHRvIHRoZSBwYXJlbnQgZGlyZWN0b3J5LiAgSWYgYXQgYSByb290IG5vZGUgb3IgY2FtZSB0aHJvdWdoCi0rCSAqIGEgc3ltbGluaywgZ28gYmFjayB0aHJvdWdoIHRoZSBmaWxlIGRlc2NyaXB0b3IuICBPdGhlcndpc2UsIGNkIHVwCi0rCSAqIG9uZSBkaXJlY3RvcnkuCi0gCSAqLwotLQlpZiAobml0ZW1zID4gc3AtPmZ0c19uaXRlbXMpIHsKLS0JCXNwLT5mdHNfbml0ZW1zID0gbml0ZW1zICsgNDA7Ci0tCQlpZiAoKHNwLT5mdHNfYXJyYXkgPSByZWFsbG9jKHNwLT5mdHNfYXJyYXksCi0tCQkgICAgKHNpemVfdCkoc3AtPmZ0c19uaXRlbXMgKiBzaXplb2YoRlRTRU5UICopKSkpID09IE5VTEwpIHsKLS0JCQlzcC0+ZnRzX25pdGVtcyA9IDA7Ci0tCQkJcmV0dXJuIChoZWFkKTsKLSsJaWYgKHAtPmZ0c19sZXZlbCA9PSBGVFNfUk9PVExFVkVMKSB7Ci0rCQlpZiAoIUlTU0VUKEZUU19OT0NIRElSKSAmJiBGQ0hESVIoc3AsIHNwLT5mdHNfcmZkKSkgewotKwkJCVNFVChGVFNfU1RPUCk7Ci0rCQkJcmV0dXJuIChOVUxMKTsKLSsJCX0KLSsJfSBlbHNlIGlmIChwLT5mdHNfZmxhZ3MgJiBGVFNfU1lNRk9MTE9XKSB7Ci0rCQlpZiAoRkNIRElSKHNwLCBwLT5mdHNfc3ltZmQpKSB7Ci0rCQkJc2F2ZWRfZXJybm8gPSBlcnJubzsKLSsJCQkodm9pZCljbG9zZShwLT5mdHNfc3ltZmQpOwotKwkJCWVycm5vID0gc2F2ZWRfZXJybm87Ci0rCQkJU0VUKEZUU19TVE9QKTsKLSsJCQlyZXR1cm4gKE5VTEwpOwotKwkJfQotKwkJKHZvaWQpY2xvc2UocC0+ZnRzX3N5bWZkKTsKLSsJfSBlbHNlIGlmICghKHAtPmZ0c19mbGFncyAmIEZUU19ET05UQ0hESVIpKSB7Ci0rCQlpZiAoQ0hESVIoc3AsICIuLiIpKSB7Ci0rCQkJU0VUKEZUU19TVE9QKTsKLSsJCQlyZXR1cm4gKE5VTEwpOwotIAkJfQotIAl9Ci0tCWZvciAoYXAgPSBzcC0+ZnRzX2FycmF5LCBwID0gaGVhZDsgcDsgcCA9IHAtPmZ0c19saW5rKQotLQkJKmFwKysgPSBwOwotLQlxc29ydCgodm9pZCAqKXNwLT5mdHNfYXJyYXksIG5pdGVtcywgc2l6ZW9mKEZUU0VOVCAqKSwgc3AtPmZ0c19jb21wYXIpOwotLQlmb3IgKGhlYWQgPSAqKGFwID0gc3AtPmZ0c19hcnJheSk7IC0tbml0ZW1zOyArK2FwKQotLQkJYXBbMF0tPmZ0c19saW5rID0gYXBbMV07Ci0tCWFwWzBdLT5mdHNfbGluayA9IE5VTEw7Ci0tCXJldHVybiAoaGVhZCk7Ci0rCXAtPmZ0c19pbmZvID0gcC0+ZnRzX2Vycm5vID8gRlRTX0VSUiA6IEZUU19EUDsKLSsJcmV0dXJuIChzcC0+ZnRzX2N1ciA9IHApOwotIH0KLSAKLS1zdGF0aWMgRlRTRU5UICoKLS1mdHNfYWxsb2Moc3AsIG5hbWUsIG5hbWVsZW4pCi0tCUZUUyAqc3A7Ci0tCWNoYXIgKm5hbWU7Ci0tCXJlZ2lzdGVyIGludCBuYW1lbGVuOwotKy8qCi0rICogRnRzX3NldCB0YWtlcyB0aGUgc3RyZWFtIGFzIGFuIGFyZ3VtZW50IGFsdGhvdWdoIGl0J3Mgbm90IHVzZWQgaW4gdGhpcwotKyAqIGltcGxlbWVudGF0aW9uOyBpdCB3b3VsZCBiZSBuZWNlc3NhcnkgaWYgYW55b25lIHdhbnRlZCB0byBhZGQgZ2xvYmFsCi0rICogc2VtYW50aWNzIHRvIGZ0cyB1c2luZyBmdHNfc2V0LiAgQW4gZXJyb3IgcmV0dXJuIGlzIGFsbG93ZWQgZm9yIHNpbWlsYXIKLSsgKiByZWFzb25zLgotKyAqLwotKy8qIEFSR1NVU0VEICovCi0raW50Ci0rZnRzX3NldChGVFMgKnNwLCBGVFNFTlQgKnAsIGludCBpbnN0cikKLSt7Ci0rCWlmIChpbnN0ciAmJiBpbnN0ciAhPSBGVFNfQUdBSU4gJiYgaW5zdHIgIT0gRlRTX0ZPTExPVyAmJgotKwkgICAgaW5zdHIgIT0gRlRTX05PSU5TVFIgJiYgaW5zdHIgIT0gRlRTX1NLSVApIHsKLSsJCWVycm5vID0gRUlOVkFMOwotKwkJcmV0dXJuICgxKTsKLSsJfQotKwlwLT5mdHNfaW5zdHIgPSBpbnN0cjsKLSsJcmV0dXJuICgwKTsKLSt9Ci0rCi0rRlRTRU5UICoKLStmdHNfY2hpbGRyZW4ocmVnaXN0ZXIgRlRTICpzcCwgaW50IGluc3RyKQotIHsKLSAJcmVnaXN0ZXIgRlRTRU5UICpwOwotLQlzaXplX3QgbGVuOwotKwlpbnQgZmQ7Ci0rCi0rCWlmIChpbnN0ciAmJiBpbnN0ciAhPSBGVFNfTkFNRU9OTFkpIHsKLSsJCWVycm5vID0gRUlOVkFMOwotKwkJcmV0dXJuIChOVUxMKTsKLSsJfQotKwotKwkvKiBTZXQgY3VycmVudCBub2RlIHBvaW50ZXIuICovCi0rCXAgPSBzcC0+ZnRzX2N1cjsKLSAKLSAJLyoKLS0JICogVGhlIGZpbGUgbmFtZSBpcyBhIHZhcmlhYmxlIGxlbmd0aCBhcnJheSBhbmQgbm8gc3RhdCBzdHJ1Y3R1cmUgaXMKLS0JICogbmVjZXNzYXJ5IGlmIHRoZSB1c2VyIGhhcyBzZXQgdGhlIG5vc3RhdCBiaXQuICBBbGxvY2F0ZSB0aGUgRlRTRU5UCi0tCSAqIHN0cnVjdHVyZSwgdGhlIGZpbGUgbmFtZSBhbmQgdGhlIHN0YXQgc3RydWN0dXJlIGluIG9uZSBjaHVuaywgYnV0Ci0tCSAqIGJlIGNhcmVmdWwgdGhhdCB0aGUgc3RhdCBzdHJ1Y3R1cmUgaXMgcmVhc29uYWJseSBhbGlnbmVkLiAgU2luY2UgdGhlCi0tCSAqIGZ0c19uYW1lIGZpZWxkIGlzIGRlY2xhcmVkIHRvIGJlIG9mIHNpemUgMSwgdGhlIGZ0c19uYW1lIHBvaW50ZXIgaXMKLS0JICogbmFtZWxlbiArIDIgYmVmb3JlIHRoZSBmaXJzdCBwb3NzaWJsZSBhZGRyZXNzIG9mIHRoZSBzdGF0IHN0cnVjdHVyZS4KLSsJICogRXJybm8gc2V0IHRvIDAgc28gdXNlciBjYW4gZGlzdGluZ3Vpc2ggZW1wdHkgZGlyZWN0b3J5IGZyb20KLSsJICogYW4gZXJyb3IuCi0gCSAqLwotLQlsZW4gPSBzaXplb2YoRlRTRU5UKSArIG5hbWVsZW47Ci0tCWlmICghSVNTRVQoRlRTX05PU1RBVCkpCi0tCQlsZW4gKz0gc2l6ZW9mKHN0cnVjdCBzdGF0KSArIEFMSUdOQllURVM7Ci0tCWlmICgocCA9IG1hbGxvYyhsZW4pKSA9PSBOVUxMKQotKwllcnJubyA9IDA7Ci0rCi0rCS8qIEZhdGFsIGVycm9ycyBzdG9wIGhlcmUuICovCi0rCWlmIChJU1NFVChGVFNfU1RPUCkpCi0gCQlyZXR1cm4gKE5VTEwpOwotIAotLQkvKiBDb3B5IHRoZSBuYW1lIHBsdXMgdGhlIHRyYWlsaW5nIE5VTEwuICovCi0tCW1lbW1vdmUocC0+ZnRzX25hbWUsIG5hbWUsIG5hbWVsZW4gKyAxKTsKLSsJLyogUmV0dXJuIGxvZ2ljYWwgaGllcmFyY2h5IG9mIHVzZXIncyBhcmd1bWVudHMuICovCi0rCWlmIChwLT5mdHNfaW5mbyA9PSBGVFNfSU5JVCkKLSsJCXJldHVybiAocC0+ZnRzX2xpbmspOwotIAotLQlpZiAoIUlTU0VUKEZUU19OT1NUQVQpKQotLQkJcC0+ZnRzX3N0YXRwID0gKHN0cnVjdCBzdGF0ICopQUxJR04ocC0+ZnRzX25hbWUgKyBuYW1lbGVuICsgMik7Ci0tCXAtPmZ0c19uYW1lbGVuID0gbmFtZWxlbjsKLS0JcC0+ZnRzX3BhdGggPSBzcC0+ZnRzX3BhdGg7Ci0tCXAtPmZ0c19lcnJubyA9IDA7Ci0tCXAtPmZ0c19mbGFncyA9IDA7Ci0tCXAtPmZ0c19pbnN0ciA9IEZUU19OT0lOU1RSOwotLQlwLT5mdHNfbnVtYmVyID0gMDsKLS0JcC0+ZnRzX3BvaW50ZXIgPSBOVUxMOwotLQlyZXR1cm4gKHApOwotKwkvKgotKwkgKiBJZiBub3QgYSBkaXJlY3RvcnkgYmVpbmcgdmlzaXRlZCBpbiBwcmUtb3JkZXIsIHN0b3AgaGVyZS4gIENvdWxkCi0rCSAqIGFsbG93IEZUU19ETlIsIGFzc3VtaW5nIHRoZSB1c2VyIGhhcyBmaXhlZCB0aGUgcHJvYmxlbSwgYnV0IHRoZQotKwkgKiBzYW1lIGVmZmVjdCBpcyBhdmFpbGFibGUgd2l0aCBGVFNfQUdBSU4uCi0rCSAqLwotKwlpZiAocC0+ZnRzX2luZm8gIT0gRlRTX0QgLyogJiYgcC0+ZnRzX2luZm8gIT0gRlRTX0ROUiAqLykKLSsJCXJldHVybiAoTlVMTCk7Ci0rCi0rCS8qIEZyZWUgdXAgYW55IHByZXZpb3VzIGNoaWxkIGxpc3QuICovCi0rCWlmIChzcC0+ZnRzX2NoaWxkKQotKwkJZnRzX2xmcmVlKHNwLT5mdHNfY2hpbGQpOwotKwotKwlpZiAoaW5zdHIgPT0gRlRTX05BTUVPTkxZKSB7Ci0rCQlzcC0+ZnRzX29wdGlvbnMgfD0gRlRTX05BTUVPTkxZOwotKwkJaW5zdHIgPSBCTkFNRVM7Ci0rCX0gZWxzZQotKwkJaW5zdHIgPSBCQ0hJTEQ7Ci0rCi0rCS8qCi0rCSAqIElmIHVzaW5nIGNoZGlyIG9uIGEgcmVsYXRpdmUgcGF0aCBhbmQgY2FsbGVkIEJFRk9SRSBmdHNfcmVhZCBkb2VzCi0rCSAqIGl0cyBjaGRpciB0byB0aGUgcm9vdCBvZiBhIHRyYXZlcnNhbCwgd2UgY2FuIGxvc2UgLS0gd2UgbmVlZCB0bwotKwkgKiBjaGRpciBpbnRvIHRoZSBzdWJkaXJlY3RvcnksIGFuZCB3ZSBkb24ndCBrbm93IHdoZXJlIHRoZSBjdXJyZW50Ci0rCSAqIGRpcmVjdG9yeSBpcywgc28gd2UgY2FuJ3QgZ2V0IGJhY2sgc28gdGhhdCB0aGUgdXBjb21pbmcgY2hkaXIgYnkKLSsJICogZnRzX3JlYWQgd2lsbCB3b3JrLgotKwkgKi8KLSsJaWYgKHAtPmZ0c19sZXZlbCAhPSBGVFNfUk9PVExFVkVMIHx8IHAtPmZ0c19hY2NwYXRoWzBdID09ICcvJyB8fAotKwkgICAgSVNTRVQoRlRTX05PQ0hESVIpKQotKwkJcmV0dXJuIChzcC0+ZnRzX2NoaWxkID0gZnRzX2J1aWxkKHNwLCBpbnN0cikpOwotKwotKwlpZiAoKGZkID0gb3BlbigiLiIsIE9fUkRPTkxZLCAwKSkgPCAwKQotKwkJcmV0dXJuIChOVUxMKTsKLSsJc3AtPmZ0c19jaGlsZCA9IGZ0c19idWlsZChzcCwgaW5zdHIpOwotKwlpZiAoZmNoZGlyKGZkKSkKLSsJCXJldHVybiAoTlVMTCk7Ci0rCSh2b2lkKWNsb3NlKGZkKTsKLSsJcmV0dXJuIChzcC0+ZnRzX2NoaWxkKTsKLSB9Ci0gCi0tc3RhdGljIHZvaWQKLS1mdHNfbGZyZWUoaGVhZCkKLS0JcmVnaXN0ZXIgRlRTRU5UICpoZWFkOwotK2ludAotK2Z0c19jbG9zZShGVFMgKnNwKQotIHsKLS0JcmVnaXN0ZXIgRlRTRU5UICpwOwotKwlyZWdpc3RlciBGVFNFTlQgKmZyZWVwLCAqcDsKLSsJaW50IHNhdmVkX2Vycm5vOwotIAotLQkvKiBGcmVlIGEgbGlua2VkIGxpc3Qgb2Ygc3RydWN0dXJlcy4gKi8KLS0Jd2hpbGUgKHAgPSBoZWFkKSB7Ci0tCQloZWFkID0gaGVhZC0+ZnRzX2xpbms7Ci0rCS8qCi0rCSAqIFRoaXMgc3RpbGwgd29ya3MgaWYgd2UgaGF2ZW4ndCByZWFkIGFueXRoaW5nIC0tIHRoZSBkdW1teSBzdHJ1Y3R1cmUKLSsJICogcG9pbnRzIHRvIHRoZSByb290IGxpc3QsIHNvIHdlIHN0ZXAgdGhyb3VnaCB0byB0aGUgZW5kIG9mIHRoZSByb290Ci0rCSAqIGxpc3Qgd2hpY2ggaGFzIGEgdmFsaWQgcGFyZW50IHBvaW50ZXIuCi0rCSAqLwotKwlpZiAoc3AtPmZ0c19jdXIpIHsKLSsJCWZvciAocCA9IHNwLT5mdHNfY3VyOyBwLT5mdHNfbGV2ZWwgPj0gRlRTX1JPT1RMRVZFTDspIHsKLSsJCQlmcmVlcCA9IHA7Ci0rCQkJcCA9IHAtPmZ0c19saW5rID8gcC0+ZnRzX2xpbmsgOiBwLT5mdHNfcGFyZW50OwotKwkJCWZyZWUoZnJlZXApOwotKwkJfQotIAkJZnJlZShwKTsKLSAJfQotLX0KLSAKLS0vKgotLSAqIEFsbG93IGVzc2VudGlhbGx5IHVubGltaXRlZCBwYXRoczsgZmluZCwgcm0sIGxzIHNob3VsZCBhbGwgd29yayBvbiBhbnkgdHJlZS4KLS0gKiBNb3N0IHN5c3RlbXMgd2lsbCBhbGxvdyBjcmVhdGlvbiBvZiBwYXRocyBtdWNoIGxvbmdlciB0aGFuIE1BWFBBVEhMRU4sIGV2ZW4KLS0gKiB0aG91Z2ggdGhlIGtlcm5lbCB3b24ndCByZXNvbHZlIHRoZW0uICBBZGQgdGhlIHNpemUgKG5vdCBqdXN0IHdoYXQncyBuZWVkZWQpCi0tICogcGx1cyAyNTYgYnl0ZXMgc28gZG9uJ3QgcmVhbGxvYyB0aGUgcGF0aCAyIGJ5dGVzIGF0IGEgdGltZS4gCi0tICovCi0tc3RhdGljIGludAotLWZ0c19wYWxsb2Moc3AsIG1vcmUpCi0tCUZUUyAqc3A7Ci0tCXNpemVfdCBtb3JlOwotLXsKLS0Jc3AtPmZ0c19wYXRobGVuICs9IG1vcmUgKyAyNTY7Ci0tCXNwLT5mdHNfcGF0aCA9IHJlYWxsb2Moc3AtPmZ0c19wYXRoLCAoc2l6ZV90KXNwLT5mdHNfcGF0aGxlbik7Ci0tCXJldHVybiAoc3AtPmZ0c19wYXRoID09IE5VTEwpOwotLX0KLSsJLyogRnJlZSB1cCBjaGlsZCBsaW5rZWQgbGlzdCwgc29ydCBhcnJheSwgcGF0aCBidWZmZXIuICovCi0rCWlmIChzcC0+ZnRzX2NoaWxkKQotKwkJZnRzX2xmcmVlKHNwLT5mdHNfY2hpbGQpOwotKwlpZiAoc3AtPmZ0c19hcnJheSkKLSsJCWZyZWUoc3AtPmZ0c19hcnJheSk7Ci0rCWZyZWUoc3AtPmZ0c19wYXRoKTsKLSAKLS0vKgotLSAqIFdoZW4gdGhlIHBhdGggaXMgcmVhbGxvYydkLCBoYXZlIHRvIGZpeCBhbGwgb2YgdGhlIHBvaW50ZXJzIGluIHN0cnVjdHVyZXMKLS0gKiBhbHJlYWR5IHJldHVybmVkLgotLSAqLwotLXN0YXRpYyB2b2lkCi0tZnRzX3BhZGp1c3Qoc3AsIGFkZHIpCi0tCUZUUyAqc3A7Ci0tCXZvaWQgKmFkZHI7Ci0tewotLQlGVFNFTlQgKnA7Ci0rCS8qIFJldHVybiB0byBvcmlnaW5hbCBkaXJlY3RvcnksIHNhdmUgZXJybm8gaWYgbmVjZXNzYXJ5LiAqLwotKwlpZiAoIUlTU0VUKEZUU19OT0NIRElSKSkgewotKwkJc2F2ZWRfZXJybm8gPSBmY2hkaXIoc3AtPmZ0c19yZmQpID8gZXJybm8gOiAwOwotKwkJKHZvaWQpY2xvc2Uoc3AtPmZ0c19yZmQpOwotKwl9Ci0gCi0tI2RlZmluZQlBREpVU1QocCkgewkJCQkJCQlcCi0tCShwKS0+ZnRzX2FjY3BhdGggPQkJCQkJCVwKLS0JICAgIChjaGFyICopYWRkciArICgocCktPmZ0c19hY2NwYXRoIC0gKHApLT5mdHNfcGF0aCk7CQlcCi0tCShwKS0+ZnRzX3BhdGggPSBhZGRyOwkJCQkJCVwKLS19Ci0tCS8qIEFkanVzdCB0aGUgY3VycmVudCBzZXQgb2YgY2hpbGRyZW4uICovCi0tCWZvciAocCA9IHNwLT5mdHNfY2hpbGQ7IHA7IHAgPSBwLT5mdHNfbGluaykKLS0JCUFESlVTVChwKTsKLSsJLyogRnJlZSB1cCB0aGUgc3RyZWFtIHBvaW50ZXIuICovCi0rCWZyZWUoc3ApOwotIAotLQkvKiBBZGp1c3QgdGhlIHJlc3Qgb2YgdGhlIHRyZWUuICovCi0tCWZvciAocCA9IHNwLT5mdHNfY3VyOyBwLT5mdHNfbGV2ZWwgPj0gRlRTX1JPT1RMRVZFTDspIHsKLS0JCUFESlVTVChwKTsKLS0JCXAgPSBwLT5mdHNfbGluayA/IHAtPmZ0c19saW5rIDogcC0+ZnRzX3BhcmVudDsKLSsJLyogU2V0IGVycm5vIGFuZCByZXR1cm4uICovCi0rCWlmICghSVNTRVQoRlRTX05PQ0hESVIpICYmIHNhdmVkX2Vycm5vKSB7Ci0rCQllcnJubyA9IHNhdmVkX2Vycm5vOwotKwkJcmV0dXJuICgtMSk7Ci0gCX0KLSsJcmV0dXJuICgwKTsKLSB9Ci0gCi0tc3RhdGljIHNpemVfdAotLWZ0c19tYXhhcmdsZW4oYXJndikKLS0JY2hhciAqIGNvbnN0ICphcmd2OwotLXsKLS0Jc2l6ZV90IGxlbiwgbWF4OwotLQotLQlmb3IgKG1heCA9IDA7ICphcmd2OyArK2FyZ3YpCi0tCQlpZiAoKGxlbiA9IHN0cmxlbigqYXJndikpID4gbWF4KQotLQkJCW1heCA9IGxlbjsKLS0JcmV0dXJuIChtYXgpOwotLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9mdHMvZnRzL3JlbW92ZV9jZGVmcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9mdHMvZnRzL3JlbW92ZV9jZGVmcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE1MjcwNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZnRzL2Z0cy9yZW1vdmVfY2RlZnMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi1SZXBsYWNlIHVzZSBvZiBtYWNyb3MgZnJvbSBzeXMvY2RlZnMuaCBzaW5jZSBjZGVmcy5oIGlzIG1pc3Npbmcgb24gbXVzbAotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCi0KLUluZGV4OiBmdHMvZnRzLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBmdHMub3JpZy9mdHMuaAotKysrIGZ0cy9mdHMuaAotQEAgLTEyNiwxNSArMTI2LDIxIEBAIHR5cGVkZWYgc3RydWN0IF9mdHNlbnQgewotIAljaGFyIGZ0c19uYW1lWzFdOwkJLyogZmlsZSBuYW1lICovCi0gfSBGVFNFTlQ7Ci0gCi0tI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotKyNpZmRlZiBfX2NwbHVzcGx1cwotK2V4dGVybiAiQyIgewotKyNlbmRpZgotIAotLV9fQkVHSU5fREVDTFMKLS1GVFNFTlQJKmZ0c19jaGlsZHJlbiBfX1AoKEZUUyAqLCBpbnQpKTsKLS1pbnQJIGZ0c19jbG9zZSBfX1AoKEZUUyAqKSk7Ci0tRlRTCSpmdHNfb3BlbiBfX1AoKGNoYXIgKiBjb25zdCAqLCBpbnQsCi0tCSAgICBpbnQgKCopKGNvbnN0IEZUU0VOVCAqKiwgY29uc3QgRlRTRU5UICoqKSkpOwotLUZUU0VOVAkqZnRzX3JlYWQgX19QKChGVFMgKikpOwotLWludAkgZnRzX3NldCBfX1AoKEZUUyAqLCBGVFNFTlQgKiwgaW50KSk7Ci0tX19FTkRfREVDTFMKLSsjaWZuZGVmIF9fUAotKyNkZWZpbmUgX19QCi0rI2VuZGlmCi0rRlRTRU5UCSpmdHNfY2hpbGRyZW4gKEZUUyAqcCwgaW50IG9wdHMpOwotK2ludAkgZnRzX2Nsb3NlIChGVFMgKnApOwotK0ZUUwkqZnRzX29wZW4gKGNoYXIgKiBjb25zdCAqIHBhdGgsIGludCBvcHRzLAotKwkgICAgaW50ICgqY29tcGZuKShjb25zdCBGVFNFTlQgKiosIGNvbnN0IEZUU0VOVCAqKikpOwotK0ZUU0VOVAkqZnRzX3JlYWQgKEZUUyAqcCk7Ci0raW50CSBmdHNfc2V0IChGVFMgKnAsIEZUU0VOVCAqZiwgaW50IG9wdHMpOwotIAotKyNpZmRlZiBfX2NwbHVzcGx1cwotK30KLSsjZW5kaWYKLSAjZW5kaWYgLyogIV9GVFNfSF8gKi8KLUluZGV4OiBmdHMvZnRzLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBmdHMub3JpZy9mdHMuYwotKysrIGZ0cy9mdHMuYwotQEAgLTUwLDE1ICs1MCwxNSBAQCBzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZnRzLmMJOC42IChCCi0gI2luY2x1ZGUgPHN0cmluZy5oPgotICNpbmNsdWRlIDx1bmlzdGQuaD4KLSAKLS1zdGF0aWMgRlRTRU5UCSpmdHNfYWxsb2MgX19QKChGVFMgKiwgY2hhciAqLCBpbnQpKTsKLS1zdGF0aWMgRlRTRU5UCSpmdHNfYnVpbGQgX19QKChGVFMgKiwgaW50KSk7Ci0tc3RhdGljIHZvaWQJIGZ0c19sZnJlZSBfX1AoKEZUU0VOVCAqKSk7Ci0tc3RhdGljIHZvaWQJIGZ0c19sb2FkIF9fUCgoRlRTICosIEZUU0VOVCAqKSk7Ci0tc3RhdGljIHNpemVfdAkgZnRzX21heGFyZ2xlbiBfX1AoKGNoYXIgKiBjb25zdCAqKSk7Ci0tc3RhdGljIHZvaWQJIGZ0c19wYWRqdXN0IF9fUCgoRlRTICosIHZvaWQgKikpOwotLXN0YXRpYyBpbnQJIGZ0c19wYWxsb2MgX19QKChGVFMgKiwgc2l6ZV90KSk7Ci0tc3RhdGljIEZUU0VOVAkqZnRzX3NvcnQgX19QKChGVFMgKiwgRlRTRU5UICosIGludCkpOwotLXN0YXRpYyB1X3Nob3J0CSBmdHNfc3RhdCBfX1AoKEZUUyAqLCBzdHJ1Y3QgZGlyZW50ICosIEZUU0VOVCAqLCBpbnQpKTsKLStzdGF0aWMgRlRTRU5UCSpmdHNfYWxsb2MgX19QKEZUUyAqLCBjaGFyICosIGludCk7Ci0rc3RhdGljIEZUU0VOVAkqZnRzX2J1aWxkIF9fUChGVFMgKiwgaW50KTsKLStzdGF0aWMgdm9pZAkgZnRzX2xmcmVlIF9fUChGVFNFTlQgKik7Ci0rc3RhdGljIHZvaWQJIGZ0c19sb2FkIF9fUChGVFMgKiwgRlRTRU5UICopOwotK3N0YXRpYyBzaXplX3QJIGZ0c19tYXhhcmdsZW4gX19QKGNoYXIgKiBjb25zdCAqKTsKLStzdGF0aWMgdm9pZAkgZnRzX3BhZGp1c3QgX19QKEZUUyAqLCB2b2lkICopOwotK3N0YXRpYyBpbnQJIGZ0c19wYWxsb2MgX19QKEZUUyAqLCBzaXplX3QpOwotK3N0YXRpYyBGVFNFTlQJKmZ0c19zb3J0IF9fUChGVFMgKiwgRlRTRU5UICosIGludCk7Ci0rc3RhdGljIHVfc2hvcnQJIGZ0c19zdGF0IF9fUChGVFMgKiwgc3RydWN0IGRpcmVudCAqLCBGVFNFTlQgKiwgaW50KTsKLSAKLSAjZGVmaW5lCUlTRE9UKGEpCShhWzBdID09ICcuJyAmJiAoIWFbMV0gfHwgYVsxXSA9PSAnLicgJiYgIWFbMl0pKQotIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Z0cy9mdHMvc3RkaW50LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Z0cy9mdHMvc3RkaW50LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWU2MDk3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9mdHMvZnRzL3N0ZGludC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLUluY2x1ZGUgc3RkaW50LmggZm9yIHVfKiB0eXBlZGVmcwotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCi0KLS0tLSAuL2Z0cy5jLm9yaWcKLSsrKyAuL2Z0cy5jCi1AQCAtNDYsNiArNDYsNyBAQAotICNpbmNsdWRlIDxlcnJuby5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxmdHMuaD4KLSsjaW5jbHVkZSA8c3RkaW50Lmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8dW5pc3RkLmg+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0XzAuMTkuOC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dF8wLjE5LjguMS5iYgppbmRleCA4M2VkZmZlLi5jMjA1OWU2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0XzAuMTkuOC4xLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHRfMC4xOS44LjEuYmIKQEAgLTI0LDggKzI0LDYgQEAKIAogUEFDS0FHRUNPTkZJR1ttc2djYXQtY3Vyc2VzXSA9ICItLXdpdGgtbGlibmN1cnNlcy1wcmVmaXg9JHtTVEFHSU5HX0xJQkRJUn0vLi4sLS1kaXNhYmxlLWN1cnNlcyxuY3Vyc2VzLCIKIAotTERGTEFHU19wcmVwZW5kX2xpYmMtdWNsaWJjID0gIiAtbHJ0IC1scHRocmVhZCAiCi0KIGluaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KIAogRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtbGlzcGRpciBcCkBAIC04NiwxNSArODQsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJhc3ByaW50Zi5zbyogXAogICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9HTlUuR2V0dGV4dC5kbGwgXAogICAgICAgICAgICAgICAgICAgICAgICAgIgotRklMRVNfZ2V0dGV4dC1ydW50aW1lX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgJHtsaWJkaXJ9L2xpYmludGwuc28uKiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vY2hhcnNldC5hbGlhcyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgogRklMRVNfZ2V0dGV4dC1ydW50aW1lLWRldiArPSAiJHtsaWJkaXJ9L2xpYmFzcHJpbnRmLmEgXAogICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vYXV0b3NwcmludGYuaCBcCiAgICAgICAgICAgICAgICAgICAgICAiCi1GSUxFU19nZXR0ZXh0LXJ1bnRpbWUtZGV2X2FwcGVuZF9saWJjLXVjbGliYyA9ICIgJHtsaWJkaXJ9L2xpYmludGwuc28gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vbGliaW50bC5oIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgogRklMRVNfZ2V0dGV4dC1ydW50aW1lLWRvYyA9ICIke21hbmRpcn0vbWFuMS9nZXR0ZXh0LiogXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMS9uZ2V0dGV4dC4qIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEvZW52c3Vic3QuKiBcCkBAIC0xMTksNiArMTExLDEwIEBACiAJcm0gJHtEfSR7ZGF0YWRpcn0vZ2V0dGV4dC9jb25maWcucnBhdGgKIAlybSAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L3BvL01ha2VmaWxlLmluLmluCiAJcm0gJHtEfSR7ZGF0YWRpcn0vZ2V0dGV4dC9wby9yZW1vdmUtcG90Y2RhdGUuc2luCisKKyAgICAgICAgY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmluZGlyfS9tc2dmbXQgXAorICAgICAgICAgICAgICAgIEdFVFRFWFREQVRBRElSPSIke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dldHRleHQtMC4xOS44LyIKKwogfQogCiBCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvZml4LWNvbmZsaWN0aW5nLXJhbmQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvZml4LWNvbmZsaWN0aW5nLXJhbmQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NzExMTIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2ZpeC1jb25mbGljdGluZy1yYW5kLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotUmVuYW1lICdyYW5kJyB2YXJpYWJsZSB0byBhdm9pZCBjb25mbGljdC4KLQotVXBzdHJlYW0tU3RhdHVzOiBwZW5kaW5nCi1TaWduZWQtb2ZmLWJ5OiBCasO2cm4gU3RlbmJlcmcgPGJqc3RAZW5lYS5jb20+Ci0KLWRpZmYgLXUgZ2xpYi0yLjM0LjMvdGVzdHMvcmVmY291bnQvc2lnbmFscy5jfiBnbGliLTIuMzQuMy90ZXN0cy9yZWZjb3VudC9zaWduYWxzLmMKLS0tLSBnbGliLTIuMzQuMy90ZXN0cy9yZWZjb3VudC9zaWduYWxzLmMJMjAxMi0xMS0yNiAxNzo1Mjo0OC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBnbGliLTIuMzQuMy90ZXN0cy9yZWZjb3VudC9zaWduYWxzLmMJMjAxMy0wMi0wOCAxNDoyNDoxMC4wNTI0Nzc1NDYgKzAxMDAKLUBAIC05LDcgKzksNyBAQAotICNkZWZpbmUgTVlfSVNfVEVTVF9DTEFTUyh0Y2xhc3MpICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgodGNsYXNzKSwgR19UWVBFX1RFU1QpKQotICNkZWZpbmUgTVlfVEVTVF9HRVRfQ0xBU1ModGVzdCkgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKCh0ZXN0KSwgR19UWVBFX1RFU1QsIEdUZXN0Q2xhc3MpKQotIAotLXN0YXRpYyBHUmFuZCAqcmFuZDsKLStzdGF0aWMgR1JhbmQgKmdyYW5kOwotIAotIHR5cGVkZWYgc3RydWN0IF9HVGVzdCBHVGVzdDsKLSB0eXBlZGVmIHN0cnVjdCBfR1Rlc3RDbGFzcyBHVGVzdENsYXNzOwotQEAgLTg0LDcgKzg0LDcgQEAKLSAgICAgICBOVUxMCi0gICAgIH07Ci0gCi0tICAgIHJhbmQgPSBnX3JhbmRfbmV3KCk7Ci0rICAgIGdyYW5kID0gZ19yYW5kX25ldygpOwotIAotICAgICB0ZXN0X3R5cGUgPSBnX3R5cGVfcmVnaXN0ZXJfc3RhdGljIChHX1RZUEVfT0JKRUNULCAiR1Rlc3QiLAotICAgICAgICAgJnRlc3RfaW5mbywgMCk7Ci1AQCAtMjE4LDcgKzIxOCw3IEBACi0gc3RhdGljIHZvaWQKLSBteV90ZXN0X2RvX3Byb3AgKEdUZXN0ICogdGVzdCkKLSB7Ci0tICB0ZXN0LT52YWx1ZSA9IGdfcmFuZF9pbnQgKHJhbmQpOwotKyAgdGVzdC0+dmFsdWUgPSBnX3JhbmRfaW50IChncmFuZCk7Ci0gICBnX29iamVjdF9ub3RpZnkgKEdfT0JKRUNUICh0ZXN0KSwgInRlc3QtcHJvcCIpOwotIH0KLSAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9nbGliLWdldHRleHRpemUtZGlyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2dsaWItZ2V0dGV4dGl6ZS1kaXIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNDM1MTEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2dsaWItZ2V0dGV4dGl6ZS1kaXIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jIGFuIHZlcnkgb2xkIHBhdGNoIGNoZXJyeS1waWNrZWQgaW4gZXZlcnkgZ2xpYi0yLjAgcGF0Y2ggZGlyZWN0b3J5LiBUaGUgZWFybGllc3QgY29udGFpbmVyCi0jIGZvciBpdCBpcyAyLjYuNSBpbiBPRS4gVGhlIGVhcmxpZXN0IGNvbW1pdCBmb3IgaXQgaXMgYzhlNTcwMjEyN2U1MDdlODJlNmY2OGE0YjhjNTQ2ODAzYWNjZWE5ZAotIyBpbiBPRSBzaWRlIHdoaWNoIHBvcnRzIGZyb20gcHJldmlvdXMgYml0a2VlcGVyIFNDTS4gSW4gT0Ugc2lkZSBpdCdzIG9ubHkgdXNlZCB0aWwgMi4xMi40LgotIwotIyBrZWVwIGl0IHNpbmNlIGl0J3MgYWx3YXlzIGNsZWFuZXIgdG8gbm90IGhhcmRjb2RlIGRlc3RpbmF0aW9uIHBhdGguIFVzZSBAZGF0YWRpckAgaXMgbW9yZQotIyBwb3J0YWJsZSBoZXJlLiBtYXJrIGZvciB1cHN0cmVhbQotIwotIyBieSBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4sIDA2LzI1LzIwMTAKLSMgUmViYXNlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPiwgMTEvMTYvMjAxMAotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCi0KLWRpZmYgLXJ1TiBnbGliLTIuMjcuMy1vcmlnL2dsaWItZ2V0dGV4dGl6ZS5pbiBnbGliLTIuMjcuMy9nbGliLWdldHRleHRpemUuaW4KLS0tLSBnbGliLTIuMjcuMy1vcmlnL2dsaWItZ2V0dGV4dGl6ZS5pbgkyMDA5LTA0LTAxIDA3OjA0OjIwLjAwMDAwMDAwMCArMDgwMAotKysrIGdsaWItMi4yNy4zL2dsaWItZ2V0dGV4dGl6ZS5pbgkyMDEwLTExLTE2IDEyOjU1OjA2Ljg3NDYwNTkxNiArMDgwMAotQEAgLTUyLDcgKzUyLDcgQEAKLSBkYXRhZGlyPUBkYXRhZGlyQAotIGRhdGFyb290ZGlyPUBkYXRhcm9vdGRpckAKLSAKLS1nZXR0ZXh0X2Rpcj0kcHJlZml4L3NoYXJlL2dsaWItMi4wL2dldHRleHQKLStnZXR0ZXh0X2Rpcj1AZGF0YWRpckAvZ2xpYi0yLjAvZ2V0dGV4dAotIAotIHdoaWxlIHRlc3QgJCMgLWd0IDA7IGRvCi0gICBjYXNlICIkMSIgaW4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMF8yLjUwLjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjBfMi41MC4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmVhMzQ3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMF8yLjUwLjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi1yZXF1aXJlIGdsaWIuaW5jCi0KLVBFID0gIjEiCi0KLVNIUlRfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCi0KLVNSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9L2dsaWIvJHtTSFJUX1ZFUn0vZ2xpYi0ke1BWfS50YXIueHogXAotICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLWxpYnRvb2wucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZml4LWNvbmZsaWN0aW5nLXJhbmQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKLSAgICAgICAgICAgZmlsZTovL3B0ZXN0LXBhdGhzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3VjbGliY19tdXNsX3RyYW5zbGF0aW9uLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2FsbG93LXJ1bi1tZWRpYS1zZFgtZHJpdmUtbW91bnQtaWYtdXNlcm5hbWUtcm9vdC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLVJlbW92ZS10aGUtd2FybmluZy1hYm91dC1kZXByZWNhdGVkLXBhdGhzLWluLXNjaGVtYXMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vRW5hYmxlLW1vcmUtdGVzdHMtd2hpbGUtY3Jvc3MtY29tcGlsaW5nLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtSW5zdGFsbC1naW8tcXVlcnltb2R1bGVzLWFzLWxpYmV4ZWNfUFJPR1JBTS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLURvLW5vdC1pZ25vcmUtcmV0dXJuLXZhbHVlLW9mLXdyaXRlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtVGVzdC1mb3ItcHRocmVhZF9nZXRuYW1lX25wLWJlZm9yZS11c2luZy1pdC5wYXRjaCBcCi0gICAgICAgICAgICIKLQotU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBmaWxlOi8vZ2xpYi1nZXR0ZXh0aXplLWRpci5wYXRjaCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9yZWxvY2F0ZS1tb2R1bGVzLnBhdGNoIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiMzgxYWIyMjkzNGYyOTY3NTBkMDM2YWE1NWEzOTdkZWQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiODJlZTk0YmY0YzAxNDU5YjZiMDBjYjlkYjA1NDVjMjIzNzkyMWUzMDYwYzBiNzRjZmYxM2ZiYzAyMGNmZDk5OSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMF8yLjUyLjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjBfMi41Mi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZmU2MDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjBfMi41Mi4zLmJiCkBAIC0wLDAgKzEsMjMgQEAKK3JlcXVpcmUgZ2xpYi5pbmMKKworUEUgPSAiMSIKKworU0hSVF9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKKworU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vZ2xpYi8ke1NIUlRfVkVSfS9nbGliLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUtbGlidG9vbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vcHRlc3QtcGF0aHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdWNsaWJjX211c2xfdHJhbnNsYXRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWxsb3ctcnVuLW1lZGlhLXNkWC1kcml2ZS1tb3VudC1pZi11c2VybmFtZS1yb290LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtUmVtb3ZlLXRoZS13YXJuaW5nLWFib3V0LWRlcHJlY2F0ZWQtcGF0aHMtaW4tc2NoZW1hcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9FbmFibGUtbW9yZS10ZXN0cy13aGlsZS1jcm9zcy1jb21waWxpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1JbnN0YWxsLWdpby1xdWVyeW1vZHVsZXMtYXMtbGliZXhlY19QUk9HUkFNLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRG8tbm90LWlnbm9yZS1yZXR1cm4tdmFsdWUtb2Ytd3JpdGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1UZXN0LWZvci1wdGhyZWFkX2dldG5hbWVfbnAtYmVmb3JlLXVzaW5nLWl0LnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGZpbGU6Ly9yZWxvY2F0ZS1tb2R1bGVzLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODkyNjVkMDI4OWE0MzZlOTljYWQ1NDQ5MWViMjFlZjQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjVlZTc2MzVhN2MwZmNkNGVjOTFjYmMzYWUwN2M3ZjhmNWNlNjIxZDgxODM1MTFmNDE0ZGVkMDllN2U0ZTEyOCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLmluYwppbmRleCAyYjMwZTM3Li40Y2RmMTQxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWIuaW5jCkBAIC00NSw3ICs0NSw2IEBACiBQUklOVEZfbWluZ3czMiA9ICItLWVuYWJsZS1pbmNsdWRlZC1wcmludGY9eWVzIgogRVhUUkFfT0VDT05GID0gIiR7UFJJTlRGfSAke0NPUkVDT05GfSIKIEVYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiJHtDT1JFQ09ORn0gLS1kaXNhYmxlLXNlbGludXgiCi1FWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLXdpdGgtbGliaWNvbnY9Z251IgogCiAjIFRlbGwgY29uZmlndXJlIHRoYXQgd2UnbGwgaGF2ZSBkYnVzLWRhZW1vbiBvbiB0aGUgdGFyZ2V0IGZvciB0aGUgdGVzdHMKIEVYVFJBX09FQ09ORl9jbGFzcy10YXJnZXRfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygnUFRFU1RfRU5BQkxFRCcsICcxJywgJyBhY19jdl9wcm9nX0RCVVNfREFFTU9OPWRidXMtZGFlbW9uJywgJycsIGQpfSIKQEAgLTY3LDEyICs2NiwxNyBAQAogICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZ2xpYi1jb21waWxlLXJlc291cmNlcyBcCiAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ2xpYi0yLjAvZ2V0dGV4dC9wby9NYWtlZmlsZS5pbi5pbiBcCiAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ2xpYi0yLjAvc2NoZW1hcy9nc2NoZW1hLmR0ZCBcCisgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ2xpYi0yLjAvdmFsZ3JpbmQvZ2xpYi5zdXBwIFwKICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9nZXR0ZXh0L2l0cyIKIEZJTEVTXyR7UE59LWRiZyArPSAiJHtkYXRhZGlyfS9nbGliLTIuMC9nZGIgJHtkYXRhZGlyfS9nZGIiCiBGSUxFU18ke1BOfS1jb2RlZ2VuID0gIiR7ZGF0YWRpcn0vZ2xpYi0yLjAvY29kZWdlbi8qLnB5IFwKICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2dkYnVzLWNvZGVnZW4iCiBGSUxFU18ke1BOfS11dGlscyA9ICIke2JpbmRpcn0vKiIKIAorUlJFQ09NTUVORFNfJHtQTn0gKz0gInNoYXJlZC1taW1lLWluZm8iCisjIFdoZW4gY3Jvc3MgY29tcGlsaW5nIGZvciBXaW5kb3dzIHdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGlzCitSUkVDT01NRU5EU18ke1BOfV9yZW1vdmVfbWluZ3czMiA9ICJzaGFyZWQtbWltZS1pbmZvIgorCiBBUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY0ID0gImFybSIKIEFSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjUgPSAiYXJtIgogIyBWYWxncmluZCBydW50aW1lIGRldGVjdGlvbiB3b3JrcyB1c2luZyBoYW5kLXdyaXR0ZW4gYXNzZW1ibHksIHdoaWNoCkBAIC0xMTcsNiArMTIxLDEyIEBACiAJZmkKIH0KIAorUkRFUEVORFNfJHtQTn0tY29kZWdlbiArPSAiXAorICAgICAgICAgICAgcHl0aG9uMyBcCisgICAgICAgICAgICBweXRob24zLWRpc3R1dGlscyBcCisgICAgICAgICAgICBweXRob24zLXhtbCBcCisgICAgICAgICAgICIKKwogUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIlwKICAgICAgICAgICAgIGRidXMgXAogICAgICAgICAgICAgZ25vbWUtZGVza3RvcC10ZXN0aW5nIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9jcm9zcy1sb2NhbGVkZWYtbmF0aXZlXzIuMjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZV8yLjI1LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWU4NjgzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9jcm9zcy1sb2NhbGVkZWYtbmF0aXZlXzIuMjUuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi1TVU1NQVJZID0gIkNyb3NzIGxvY2FsZSBnZW5lcmF0aW9uIHRvb2wgZm9yIGdsaWJjIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmMvbGliYy5odG1sIgotU0VDVElPTiA9ICJsaWJzIgotTElDRU5TRSA9ICJMR1BMLTIuMSIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRVM7bWQ1PWU5YTU1OGUyNDNiMzZkMzIwOWYzODBkZWIzOTRiMjEzIFwKLSAgICAgIGZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCi0gICAgICBmaWxlOi8vcG9zaXgvcnhzcGVuY2VyL0NPUFlSSUdIVDttZDU9ZGM1NDg1YmIzOTRhMTNiMjMzMmVjMWM3ODVmNWQ4M2EgXAotICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKLQotIyBUZWxsIGF1dG90b29scyB0aGF0IHdlJ3JlIHdvcmtpbmcgaW4gdGhlIGxvY2FsZWRlZiBkaXJlY3RvcnkKLSMKLUFVVE9UT09MU19TQ1JJUFRfUEFUSCA9ICIke1N9L2xvY2FsZWRlZiIKLQotaW5oZXJpdCBuYXRpdmUKLWluaGVyaXQgYXV0b3Rvb2xzCi0KLUZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9LyR7UE59OiR7RklMRV9ESVJOQU1FfS9nbGliYzoiCi0KLVNSQ0JSQU5DSCA/PSAicmVsZWFzZS8ke1BWfS9tYXN0ZXIiCi1HTElCQ19HSVRfVVJJID89ICJnaXQ6Ly9zb3VyY2V3YXJlLm9yZy9naXQvZ2xpYmMuZ2l0IgotVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAiKD9QPHB2ZXI+XGQrXC5cZCsoXC5cZCspKikiCi0KLVNSQ1JFVl9nbGliYyA/PSAiZGIwMjQyZTMwMjM0MzY3NTdiYmM3YzQ4OGE3NzllNmUzMzQzZGIwNCIKLVNSQ1JFVl9sb2NhbGVkZWYgPz0gIjI5ODY5YjZkYzExNDI3YzViYWI4MzliZGIxNTVjODVhN2M2NDRjNzEiCi0KLVNSQ19VUkkgPSAiJHtHTElCQ19HSVRfVVJJfTticmFuY2g9JHtTUkNCUkFOQ0h9O25hbWU9Z2xpYmMgXAotICAgICAgICAgICBnaXQ6Ly9naXRodWIuY29tL2tyYWovbG9jYWxlZGVmO2JyYW5jaD1tYXN0ZXI7bmFtZT1sb2NhbGVkZWY7ZGVzdHN1ZmZpeD1naXQvbG9jYWxlZGVmIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTYtdGltZXpvbmUtcmUtd3JpdHRlbi10enNlbGVjdC1hcy1wb3NpeC1zaC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDE3LVJlbW92ZS1iYXNoLWRlcGVuZGVuY3ktZm9yLW5zY2QtaW5pdC1zY3JpcHQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxOC1lZ2xpYmMtQ3Jvc3MtYnVpbGRpbmctYW5kLXRlc3RpbmctaW5zdHJ1Y3Rpb25zLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTktZWdsaWJjLUhlbHAtYm9vdHN0cmFwLWNyb3NzLXRvb2xjaGFpbi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDIwLWVnbGliYy1jaGVycnktcGlja2VkLWZyb20ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAyMS1lZ2xpYmMtQ2xlYXItY2FjaGUtbGluZXMtb24tcHBjOHh4LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjItZWdsaWJjLVJlc29sdmUtX19mcHNjcl92YWx1ZXMtb24tU0g0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjMtZWdsaWJjLUluc3RhbGwtUElDLWFyY2hpdmVzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjQtZWdsaWJjLUZvcndhcmQtcG9ydC1jcm9zcy1sb2NhbGUtZ2VuZXJhdGlvbi1zdXBwb3J0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjUtRGVmaW5lLURVTU1ZX0xPQ0FMRV9ULWlmLW5vdC1kZWZpbmVkLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtSW5jbHVkZS1sb2NhbGVfdC5oLWNvbXBhdGliaWxpdHktaGVhZGVyLnBhdGNoIFwKLSIKLSMgTWFrZXMgZm9yIGEgcmF0aGVyIGxvbmcgcmV2ICgyMiBjaGFyYWN0ZXJzKSwgYnV0Li4uCi0jCi1TUkNSRVZfRk9STUFUID0gImdsaWJjX2xvY2FsZWRlZiIKLQotUyA9ICIke1dPUktESVJ9L2dpdCIKLQotRVhUUkFfT0VDT05GID0gIi0td2l0aC1nbGliYz0ke1N9IgotQ0ZMQUdTICs9ICItZmdudTg5LWlubGluZSAtc3RkPWdudTk5IC1ESVNfSU5cKHhcKT0nMCciCi0KLWRvX2luc3RhbGwoKSB7Ci0JaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9Ci0JaW5zdGFsbCAtbSAwNzU1ICR7Qn0vbG9jYWxlZGVmICR7RH0ke2JpbmRpcn0vY3Jvc3MtbG9jYWxlZGVmCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZV8yLjI2LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2Nyb3NzLWxvY2FsZWRlZi1uYXRpdmVfMi4yNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzVkNzBkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2Nyb3NzLWxvY2FsZWRlZi1uYXRpdmVfMi4yNi5iYgpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIkNyb3NzIGxvY2FsZSBnZW5lcmF0aW9uIHRvb2wgZm9yIGdsaWJjIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmMvbGliYy5odG1sIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMLTIuMSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRVM7bWQ1PWU5YTU1OGUyNDNiMzZkMzIwOWYzODBkZWIzOTRiMjEzIFwKKyAgICAgIGZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICBmaWxlOi8vcG9zaXgvcnhzcGVuY2VyL0NPUFlSSUdIVDttZDU9ZGM1NDg1YmIzOTRhMTNiMjMzMmVjMWM3ODVmNWQ4M2EgXAorICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKKworIyBUZWxsIGF1dG90b29scyB0aGF0IHdlJ3JlIHdvcmtpbmcgaW4gdGhlIGxvY2FsZWRlZiBkaXJlY3RvcnkKKyMKK0FVVE9UT09MU19TQ1JJUFRfUEFUSCA9ICIke1N9L2xvY2FsZWRlZiIKKworaW5oZXJpdCBuYXRpdmUKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9LyR7UE59OiR7RklMRV9ESVJOQU1FfS9nbGliYzoiCisKK1NSQ0JSQU5DSCA/PSAicmVsZWFzZS8ke1BWfS9tYXN0ZXIiCitHTElCQ19HSVRfVVJJID89ICJnaXQ6Ly9zb3VyY2V3YXJlLm9yZy9naXQvZ2xpYmMuZ2l0IgorVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAiKD9QPHB2ZXI+XGQrXC5cZCsoXC5cZCspKikiCisKK1NSQ1JFVl9nbGliYyA/PSAiMWM5YTVjMjcwZDhiNjZmMzBkY2ZhZjFjYjJkNmNmMzlkM2UxODM2OSIKK1NSQ1JFVl9sb2NhbGVkZWYgPz0gImRmYjRhZmU1NTFjNmM2ZTk0ZjljYzg1NDE3YmQxZjU4MjE2OGM4NDMiCisKK1NSQ19VUkkgPSAiJHtHTElCQ19HSVRfVVJJfTticmFuY2g9JHtTUkNCUkFOQ0h9O25hbWU9Z2xpYmMgXAorICAgICAgICAgICBnaXQ6Ly9naXRodWIuY29tL2tyYWovbG9jYWxlZGVmO2JyYW5jaD1tYXN0ZXI7bmFtZT1sb2NhbGVkZWY7ZGVzdHN1ZmZpeD1naXQvbG9jYWxlZGVmIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTUtdGltZXpvbmUtcmUtd3JpdHRlbi10enNlbGVjdC1hcy1wb3NpeC1zaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE2LVJlbW92ZS1iYXNoLWRlcGVuZGVuY3ktZm9yLW5zY2QtaW5pdC1zY3JpcHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNy1lZ2xpYmMtQ3Jvc3MtYnVpbGRpbmctYW5kLXRlc3RpbmctaW5zdHJ1Y3Rpb25zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTgtZWdsaWJjLUhlbHAtYm9vdHN0cmFwLWNyb3NzLXRvb2xjaGFpbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE5LWVnbGliYy1DbGVhci1jYWNoZS1saW5lcy1vbi1wcGM4eHgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMC1lZ2xpYmMtUmVzb2x2ZS1fX2Zwc2NyX3ZhbHVlcy1vbi1TSDQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMS1lZ2xpYmMtSW5zdGFsbC1QSUMtYXJjaGl2ZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMi1lZ2xpYmMtRm9yd2FyZC1wb3J0LWNyb3NzLWxvY2FsZS1nZW5lcmF0aW9uLXN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMy1EZWZpbmUtRFVNTVlfTE9DQUxFX1QtaWYtbm90LWRlZmluZWQucGF0Y2ggXAorIgorIyBNYWtlcyBmb3IgYSByYXRoZXIgbG9uZyByZXYgKDIyIGNoYXJhY3RlcnMpLCBidXQuLi4KKyMKK1NSQ1JFVl9GT1JNQVQgPSAiZ2xpYmNfbG9jYWxlZGVmIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWdsaWJjPSR7U30iCitDRkxBR1MgKz0gIi1mZ251ODktaW5saW5lIC1zdGQ9Z251OTkgLURJU19JTlwoeFwpPScwJyIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtCfS9sb2NhbGVkZWYgJHtEfSR7YmluZGlyfS9jcm9zcy1sb2NhbGVkZWYKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1jb2xsYXRlcmFsLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1jb2xsYXRlcmFsLmluYwppbmRleCAzN2YyN2NhLi5kZTg1OWQ1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtY29sbGF0ZXJhbC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWNvbGxhdGVyYWwuaW5jCkBAIC0xOCw1ICsxOCw0IEBACiBkb19pbnN0YWxsW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19zdGFzaF9sb2NhbGUiCiAKIENPTVBBVElCTEVfSE9TVF9saWJjLW11c2xfY2xhc3MtdGFyZ2V0ID0gIm51bGwiCi1DT01QQVRJQkxFX0hPU1RfbGliYy11Y2xpYmNfY2xhc3MtdGFyZ2V0ID0gIm51bGwiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1pbml0aWFsXzIuMjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtaW5pdGlhbF8yLjI2LmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtaW5pdGlhbF8yLjI1LmJiCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtaW5pdGlhbF8yLjI2LmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbG9jYWxlLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sb2NhbGUuaW5jCmluZGV4IDc1YWJhYmUuLmIzY2IxMGIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sb2NhbGUuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sb2NhbGUuaW5jCkBAIC0xMiw3ICsxMiw3IEBACiBCSU5VVElMU0RFUF9jbGFzcy1uYXRpdmVzZGsgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9YmludXRpbHMtY3Jvc3NzZGs6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKIGRvX3BhY2thZ2VbZGVwZW5kc10gKz0gIiR7QklOVVRJTFNERVB9IgogCi0jIGxvY2FsZWRlZiBsaW5rcyB3aXRoIGxpYmMuc28gYW5kIGdsaWJjLWNvbGxhdGVyYWwuaW5jaW5oaWJpdHMgYWxsIGRlZmF1bHQgZGVwcworIyBsb2NhbGVkZWYgbGlua3Mgd2l0aCBsaWJjLnNvIGFuZCBnbGliYy1jb2xsYXRlcmFsLmluYyBpbmhpYml0cyBhbGwgZGVmYXVsdCBkZXBzCiAjIGNhbm5vdCBhZGQgdmlydHVhbC9saWJjIHRvIERFUEVORFMsIGJlY2F1c2UgaXQgd291bGQgY29uZmxpY3Qgd2l0aCBsaWJjLWluaXRpYWwgaW4gUlNTCiBSREVQRU5EU19sb2NhbGVkZWYgKz0gImdsaWJjIgogCkBAIC0zOSw3ICszOSw2IEBACiAKIFBBQ0tBR0VTX0RZTkFNSUMgPSAiXmxvY2FsZS1iYXNlLS4qIFwKICAgICAgICAgICAgICAgICAgICAgXmdsaWJjLWdjb252LS4qIF5nbGliYy1jaGFybWFwLS4qIF5nbGliYy1sb2NhbGVkYXRhLS4qIF5nbGliYy1iaW5hcnktbG9jYWxlZGF0YS0uKiBcCi0gICAgICAgICAgICAgICAgICAgIF5nbGliYy1nY29udi0uKiAgXmdsaWJjLWNoYXJtYXAtLiogIF5nbGliYy1sb2NhbGVkYXRhLS4qICBeZ2xpYmMtYmluYXJ5LWxvY2FsZWRhdGEtLiogXAogICAgICAgICAgICAgICAgICAgICBeJHtNTFBSRUZJWH1nbGliYy1nY29udiQiCiAKICMgQ3JlYXRlIGEgZ2xpYmMtYmluYXJpZXMgcGFja2FnZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxvY2FsZV8yLjI1LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxvY2FsZV8yLjI2LmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbG9jYWxlXzIuMjUuYmIKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sb2NhbGVfMi4yNi5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLW10cmFjZV8yLjI1LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLW10cmFjZV8yLjI2LmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbXRyYWNlXzIuMjUuYmIKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1tdHJhY2VfMi4yNi5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXBhY2thZ2UuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXBhY2thZ2UuaW5jCmluZGV4IDlmN2ZhNjIuLmRmM2RiMmMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1wYWNrYWdlLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtcGFja2FnZS5pbmMKQEAgLTEsMTkgKzEsMyBAQAotIwotIyBGb3Igbm93LCB3ZSB3aWxsIHNraXAgYnVpbGRpbmcgb2YgYSBnY2MgcGFja2FnZSBpZiBpdCBpcyBhIHVjbGliYyBvbmUKLSMgYW5kIG91ciBidWlsZCBpcyBub3QgYSB1Y2xpYmMgb25lLCBhbmQgd2Ugc2tpcCBhIGdsaWJjIG9uZSBpZiBvdXIgYnVpbGQKLSMgaXMgYSB1Y2xpYmMgYnVpbGQuCi0jCi0jIFNlZSB0aGUgbm90ZSBpbiBnY2MvZ2NjXzMuNC4wLm9lCi0jCi0KLXB5dGhvbiBfX2Fub255bW91cyAoKSB7Ci0gICAgaW1wb3J0IGJiLCByZQotICAgIHVjX29zID0gKHJlLm1hdGNoKCcuKnVjbGliYyonLCBkLmdldFZhcignVEFSR0VUX09TJykpICE9IE5vbmUpCi0gICAgaWYgdWNfb3M6Ci0gICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJpbmNvbXBhdGlibGUgd2l0aCB0YXJnZXQgJXMiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ1RBUkdFVF9PUycpKQotfQotCiBJTkhJQklUX1NZU1JPT1RfU1RSSVAgPSAiMSIKIAogUEFDS0FHRVMgPSAiJHtQTn0tZGJnIGNhdGNoc2VndiBzbG4gbnNjZCBsZGQgdHpjb2RlIGdsaWJjLXRocmVhZC1kYiAke1BOfS1waWMgbGliY2lkbiBsaWJtZW11c2FnZSBsaWJzZWdmYXVsdCAke1BOfS1wY3Byb2ZpbGUgbGlic290cnVzcyAke1BOfSAke1BOfS11dGlscyBnbGliYy1leHRyYS1uc3MgJHtQTn0tZGV2ICR7UE59LXN0YXRpY2RldiAke1BOfS1kb2MiCkBAIC0xNDcsMTEgKzEzMSwxNSBAQAogCWRvX2luc3RhbGxfYXJtbXVsdGlsaWIKIH0KIAorZG9faW5zdGFsbF9hcHBlbmRfYXJtZWIgKCkgeworCWRvX2luc3RhbGxfYXJtbXVsdGlsaWIKK30KKwogZG9faW5zdGFsbF9hcm1tdWx0aWxpYiAoKSB7CiAKIAlvZV9tdWx0aWxpYl9oZWFkZXIgYml0cy9lbmRpYW4uaCBiaXRzL2ZjbnRsLmggYml0cy9mZW52LmggYml0cy9mcC1mYXN0LmggYml0cy9od2NhcC5oIGJpdHMvaXBjLmggYml0cy9saW5rLmggYml0cy93b3Jkc2l6ZS5oCi0Jb2VfbXVsdGlsaWJfaGVhZGVyIGJpdHMvbG9jYWxfbGltLmggYml0cy9tbWFuLmggYml0cy9tc3EuaCBiaXRzL3B0aHJlYWR0eXBlcy5oICBiaXRzL3NlbS5oICBiaXRzL3NlbWFwaG9yZS5oIGJpdHMvc2V0am1wLmgKLQlvZV9tdWx0aWxpYl9oZWFkZXIgYml0cy9zaG0uaCBiaXRzL3NpZ3N0YWNrLmggYml0cy9zdGF0LmggYml0cy9zdGF0ZnMuaCBiaXRzL3N0cmluZy5oIGJpdHMvdHlwZXNpemVzLmgKKwlvZV9tdWx0aWxpYl9oZWFkZXIgYml0cy9sb2NhbF9saW0uaCBiaXRzL21tYW4uaCBiaXRzL21zcS5oIGJpdHMvcHRocmVhZHR5cGVzLmggYml0cy9wdGhyZWFkdHlwZXMtYXJjaC5oICBiaXRzL3NlbS5oICBiaXRzL3NlbWFwaG9yZS5oIGJpdHMvc2V0am1wLmgKKwlvZV9tdWx0aWxpYl9oZWFkZXIgYml0cy9zaG0uaCBiaXRzL3NpZ3N0YWNrLmggYml0cy9zdGF0LmggYml0cy9zdGF0ZnMuaCBiaXRzL3R5cGVzaXplcy5oCiAKIAlvZV9tdWx0aWxpYl9oZWFkZXIgZnB1X2NvbnRyb2wuaCBnbnUvbGliLW5hbWVzLmggZ251L3N0dWJzLmggaWVlZTc1NC5oCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1zY3JpcHRzXzIuMjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtc2NyaXB0c18yLjI2LmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtc2NyaXB0c18yLjI1LmJiCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtc2NyaXB0c18yLjI2LmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMS1JbmNsdWRlLWxvY2FsZV90LmgtY29tcGF0aWJpbGl0eS1oZWFkZXIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMS1JbmNsdWRlLWxvY2FsZV90LmgtY29tcGF0aWJpbGl0eS1oZWFkZXIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExM2M0MjguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDEtSW5jbHVkZS1sb2NhbGVfdC5oLWNvbXBhdGliaWxpdHktaGVhZGVyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotRnJvbSBhYmZlYjBjZjRlMzI2MWE2NmE3YTIzYWJjOWFlZDMzYzAzNGM4NTBkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogSm9zaHVhIFdhdHQgPEpvc2h1YS5XYXR0QGdhcm1pbi5jb20+Ci1EYXRlOiBXZWQsIDYgRGVjIDIwMTcgMTM6MjY6MTkgLTA2MDAKLVN1YmplY3Q6IFtQQVRDSF0gSW5jbHVkZSBsb2NhbGVfdC5oIGNvbXBhdGliaWxpdHkgaGVhZGVyCi0KLU5ld2VyIHZlcnNpb25zIG9mIGdsaWJjIChzaW5jZSAyLjI2KSBtb3ZlZCB0aGUgbG9jYWxlIHR5cGVkZWZzIGZyb20KLXhsb2NhbGUuaCB0byBiaXRzL3R5cGVzL2xvY2FsZV90LmguIENyZWF0ZSBhIGNvbXBhdGliaWxpdHkgaGVhZGVyIGZvcgotdGhlc2UgbmV3ZXIgdmVyc2lvbnMgb2YgZ2xpYmMKLQotU2VlIGYwYmUyNWI2MzM2ZGI3NDkyZTQ3ZDJlOGU3MmViOGFmNTNiNTUwNmQgaW4gZ2xpYmMKLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIGNvbXBhdGliaWxpdHkgd2l0aCBuZXdlciBob3N0IGdsaWJjCi1TaWduZWQtb2ZmLWJ5OiBKb3NodWEgV2F0dCA8SlBFV2hhY2tlckBnbWFpbC5jb20+Ci0KLS0tLQotIGxvY2FsZS9iaXRzL3R5cGVzL2xvY2FsZV90LmggfCAxICsKLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKLSBjcmVhdGUgbW9kZSAxMDA2NDQgbG9jYWxlL2JpdHMvdHlwZXMvbG9jYWxlX3QuaAotCi1kaWZmIC0tZ2l0IGEvbG9jYWxlL2JpdHMvdHlwZXMvbG9jYWxlX3QuaCBiL2xvY2FsZS9iaXRzL3R5cGVzL2xvY2FsZV90LmgKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwMDAwLi5iNTE5YTZjNWY4Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9sb2NhbGUvYml0cy90eXBlcy9sb2NhbGVfdC5oCi1AQCAtMCwwICsxIEBACi0rI2luY2x1ZGUgPHhsb2NhbGUuaD4KLS0tIAotMi4xNC4zCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAxLW5hdGl2ZXNkay1nbGliYy1Mb29rLWZvci1ob3N0LXN5c3RlbS1sZC5zby5jYWNoZS1hcy0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMS1uYXRpdmVzZGstZ2xpYmMtTG9vay1mb3ItaG9zdC1zeXN0ZW0tbGQuc28uY2FjaGUtYXMtLnBhdGNoCmluZGV4IDA1NTNmOGEuLjE5YzFkOWIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAxLW5hdGl2ZXNkay1nbGliYy1Mb29rLWZvci1ob3N0LXN5c3RlbS1sZC5zby5jYWNoZS1hcy0ucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDEtbmF0aXZlc2RrLWdsaWJjLUxvb2stZm9yLWhvc3Qtc3lzdGVtLWxkLnNvLmNhY2hlLWFzLS5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gMjcyN2U1OGQxZDI2OTk5NGRlMTdjYWRiMTIxOTUwMDFiMTQ1ODVlNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gODEzNDZiMmY3NzM1Njk4MDc4ZDViZjkxOWE3OGI2YzAyNjlkNmZlZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiBEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAxOjQ4OjI0ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMDEvMjZdIG5hdGl2ZXNkay1nbGliYzogTG9vayBmb3IgaG9zdCBzeXN0ZW0gbGQuc28uY2FjaGUgYXMKK1N1YmplY3Q6IFtQQVRDSCAwMS8yNV0gbmF0aXZlc2RrLWdsaWJjOiBMb29rIGZvciBob3N0IHN5c3RlbSBsZC5zby5jYWNoZSBhcwogIHdlbGwKIAogVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KQEAgLTMxLDcgKzMxLDcgQEAKICAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvZWxmL2RsLWxvYWQuYyBiL2VsZi9kbC1sb2FkLmMKLWluZGV4IDUxZmIwZDAuLmY1MDNkYmMgMTAwNjQ0CitpbmRleCBjMWI2ZDRiYTBmLi5kN2FmOWViY2JjIDEwMDY0NAogLS0tIGEvZWxmL2RsLWxvYWQuYwogKysrIGIvZWxmL2RsLWxvYWQuYwogQEAgLTIwNTQsNiArMjA1NCwxNCBAQCBfZGxfbWFwX29iamVjdCAoc3RydWN0IGxpbmtfbWFwICpsb2FkZXIsIGNvbnN0IGNoYXIgKm5hbWUsCkBAIC02NSw1ICs2NSw1IEBACiAgICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19MSUJTKSkKICAJX2RsX2RlYnVnX3ByaW50ZiAoIlxuIik7CiAtLSAKLTIuMTAuMgorMi4xMy4yCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAyLW5hdGl2ZXNkay1nbGliYy1GaXgtYnVmZmVyLW92ZXJydW4td2l0aC1hLXJlbG9jYXRlZC0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMi1uYXRpdmVzZGstZ2xpYmMtRml4LWJ1ZmZlci1vdmVycnVuLXdpdGgtYS1yZWxvY2F0ZWQtLnBhdGNoCmluZGV4IGU1ZWYzNDEuLjJjZTI0MGIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAyLW5hdGl2ZXNkay1nbGliYy1GaXgtYnVmZmVyLW92ZXJydW4td2l0aC1hLXJlbG9jYXRlZC0ucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDItbmF0aXZlc2RrLWdsaWJjLUZpeC1idWZmZXItb3ZlcnJ1bi13aXRoLWEtcmVsb2NhdGVkLS5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gMTU3OGY1MjY0N2VjODgwNDE4NmQxOTQ0ZDRjZDIwOTUxMzJlZmMzOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gODJmMmU5MTBlYzBlMmRlNmE5ZTJiMDA3ODI1YmRkZmM1ODUwNTc1ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiBEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAxOjUwOjAwICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMDIvMjZdIG5hdGl2ZXNkay1nbGliYzogRml4IGJ1ZmZlciBvdmVycnVuIHdpdGggYSByZWxvY2F0ZWQKK1N1YmplY3Q6IFtQQVRDSCAwMi8yNV0gbmF0aXZlc2RrLWdsaWJjOiBGaXggYnVmZmVyIG92ZXJydW4gd2l0aCBhIHJlbG9jYXRlZAogIFNESwogCiBXaGVuIGxkLWxpbnV4LSouc28uMiBpcyByZWxvY2F0ZWQgdG8gYSBwYXRoIHRoYXQgaXMgbG9uZ2VyIHRoYW4gdGhlCkBAIC0yMiw3ICsyMiw3IEBACiAgMSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKykKIAogZGlmZiAtLWdpdCBhL2VsZi9kbC1sb2FkLmMgYi9lbGYvZGwtbG9hZC5jCi1pbmRleCBmNTAzZGJjLi4zYTNkMTEyIDEwMDY0NAoraW5kZXggZDdhZjllYmNiYy4uMTljMWRiOTk0OCAxMDA2NDQKIC0tLSBhL2VsZi9kbC1sb2FkLmMKICsrKyBiL2VsZi9kbC1sb2FkLmMKIEBAIC0xNzUzLDcgKzE3NTMsMTkgQEAgb3Blbl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwgaW50IG1vZGUsCkBAIC00Niw1ICs0Niw1IEBACiAgICAgIHsKICAgICAgICBzdHJ1Y3Qgcl9zZWFyY2hfcGF0aF9lbGVtICp0aGlzX2RpciA9ICpkaXJzOwogLS0gCi0yLjEwLjIKKzIuMTMuMgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMy1uYXRpdmVzZGstZ2xpYmMtUmFpc2UtdGhlLXNpemUtb2YtYXJyYXlzLWNvbnRhaW5pbmctLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDMtbmF0aXZlc2RrLWdsaWJjLVJhaXNlLXRoZS1zaXplLW9mLWFycmF5cy1jb250YWluaW5nLS5wYXRjaAppbmRleCA5ZTIwN2U0Li4zOTdlOGIzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMy1uYXRpdmVzZGstZ2xpYmMtUmFpc2UtdGhlLXNpemUtb2YtYXJyYXlzLWNvbnRhaW5pbmctLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAzLW5hdGl2ZXNkay1nbGliYy1SYWlzZS10aGUtc2l6ZS1vZi1hcnJheXMtY29udGFpbmluZy0ucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIGU1Mzk2OGQ2MTgwNGI2YmFiMzJlYzZlMTNjYzBiM2NkNTcyMTQ3OTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDQ5MGEwZWI0ZGExYWY3MjZlYTVkNjhlM2VmYzBkMThiYTk0YzQwNTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMTo1MTozOCArMDAwMAotU3ViamVjdDogW1BBVENIIDAzLzI2XSBuYXRpdmVzZGstZ2xpYmM6IFJhaXNlIHRoZSBzaXplIG9mIGFycmF5cyBjb250YWluaW5nIGRsCitTdWJqZWN0OiBbUEFUQ0ggMDMvMjVdIG5hdGl2ZXNkay1nbGliYzogUmFpc2UgdGhlIHNpemUgb2YgYXJyYXlzIGNvbnRhaW5pbmcgZGwKICBwYXRocwogCiBUaGlzIHBhdGNoIHB1dHMgdGhlIGR5bmFtaWMgbG9hZGVyIHBhdGggaW4gdGhlIGJpbmFyaWVzLCBTWVNURU1fRElSUyBzdHJpbmdzCkBAIC0yNiwxMCArMjYsMTAgQEAKICA3IGZpbGVzIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvZWxmL2RsLWNhY2hlLmMgYi9lbGYvZGwtY2FjaGUuYwotaW5kZXggY2ZhMzM1ZS4uZGFhMTJlYyAxMDA2NDQKK2luZGV4IGU5NjMyZGEwYjMuLjRkZTUyOWQyY2YgMTAwNjQ0CiAtLS0gYS9lbGYvZGwtY2FjaGUuYwogKysrIGIvZWxmL2RsLWNhY2hlLmMKLUBAIC0xMzIsNiArMTMyLDEwIEBAIGRvCQkJCQkJCQkJICAgICAgXAorQEAgLTEzMyw2ICsxMzMsMTAgQEAgZG8JCQkJCQkJCQkgICAgICBcCiAgd2hpbGUgKDApCiAgCiAgCkBAIC00MSw3ICs0MSw3IEBACiAgaW50ZXJuYWxfZnVuY3Rpb24KICBfZGxfY2FjaGVfbGliY21wIChjb25zdCBjaGFyICpwMSwgY29uc3QgY2hhciAqcDIpCiBkaWZmIC0tZ2l0IGEvZWxmL2RsLWxvYWQuYyBiL2VsZi9kbC1sb2FkLmMKLWluZGV4IDNhM2QxMTIuLmExNDEwZTQgMTAwNjQ0CitpbmRleCAxOWMxZGI5OTQ4Li43MGMyNTliNDAwIDEwMDY0NAogLS0tIGEvZWxmL2RsLWxvYWQuYwogKysrIGIvZWxmL2RsLWxvYWQuYwogQEAgLTEwNiw4ICsxMDYsOCBAQCBzdGF0aWMgc2l6ZV90IG1heF9jYXBzdHJsZW4gYXR0cmlidXRlX3JlbHJvOwpAQCAtNTYsNyArNTYsNyBAQAogICAgU1lTVEVNX0RJUlNfTEVOCiAgfTsKIGRpZmYgLS1naXQgYS9lbGYvaW50ZXJwLmMgYi9lbGYvaW50ZXJwLmMKLWluZGV4IDk0NDg4MDIuLmU3ZThjNzAgMTAwNjQ0CitpbmRleCBiNmU4ZjA0NDQ0Li40N2MyMDQxNWJjIDEwMDY0NAogLS0tIGEvZWxmL2ludGVycC5jCiArKysgYi9lbGYvaW50ZXJwLmMKIEBAIC0xOCw1ICsxOCw1IEBACkBAIC02Nyw3ICs2Nyw3IEBACiArY29uc3QgY2hhciBfX2ludm9rZV9keW5hbWljX2xpbmtlcl9fWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmludGVycCIpKSkKICAgID0gUlVOVElNRV9MSU5LRVI7CiBkaWZmIC0tZ2l0IGEvZWxmL2xkY29uZmlnLmMgYi9lbGYvbGRjb25maWcuYwotaW5kZXggNDY3Y2E4Mi4uNjMxYTJhOSAxMDA2NDQKK2luZGV4IDk5Y2FmOWU5YmIuLjM2ZWE1ZGY1ZjEgMTAwNjQ0CiAtLS0gYS9lbGYvbGRjb25maWcuYwogKysrIGIvZWxmL2xkY29uZmlnLmMKIEBAIC0xNjgsNiArMTY4LDkgQEAgc3RhdGljIHN0cnVjdCBhcmdwIGFyZ3AgPQpAQCAtODEsMTggKzgxLDE4IEBACiAgICAgYSBwbGF0Zm9ybS4gICovCiAgc3RhdGljIGludAogZGlmZiAtLWdpdCBhL2VsZi9ydGxkLmMgYi9lbGYvcnRsZC5jCi1pbmRleCA0ZWMyNWQ3Li5lMTU5YzEyIDEwMDY0NAoraW5kZXggNjU2NDdmYjFjOC4uY2Q4MzgxY2IzMyAxMDA2NDQKIC0tLSBhL2VsZi9ydGxkLmMKICsrKyBiL2VsZi9ydGxkLmMKLUBAIC05OSw2ICs5OSw3IEBAIHVpbnRwdHJfdCBfX3BvaW50ZXJfY2hrX2d1YXJkX2xvY2FsCi0gc3Ryb25nX2FsaWFzIChfX3BvaW50ZXJfY2hrX2d1YXJkX2xvY2FsLCBfX3BvaW50ZXJfY2hrX2d1YXJkKQotICNlbmRpZgotIAorQEAgLTEyOCw2ICsxMjgsNyBAQCBkc29fbmFtZV92YWxpZF9mb3Jfc3VpZCAoY29uc3QgY2hhciAqcCkKKyAgICAgfQorICAgcmV0dXJuICpwICE9ICdcMCc7CisgfQogK2V4dGVybiBjb25zdCBjaGFyIExEX1NPX0NBQ0hFWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmxkc29jYWNoZSIpKSk7CiAgCi0gLyogTGlzdCBvZiBhdWRpdGluZyBEU09zLiAgKi8KLSBzdGF0aWMgc3RydWN0IGF1ZGl0X2xpc3QKLUBAIC04NTQsMTIgKzg1NSwxMiBAQCBvZiB0aGlzIGhlbHBlciBwcm9ncmFtOyBjaGFuY2VzIGFyZSB5b3UgZGlkIG5vdCBpbnRlbmQgdG8gcnVuIHRoaXMgcHJvZ3JhbS5cblwKKyAvKiBMRF9BVURJVCB2YXJpYWJsZSBjb250ZW50cy4gIE11c3QgYmUgcHJvY2Vzc2VkIGJlZm9yZSB0aGUKKyAgICBhdWRpdF9saXN0IGJlbG93LiAgKi8KK0BAIC05OTksMTIgKzEwMDAsMTIgQEAgb2YgdGhpcyBoZWxwZXIgcHJvZ3JhbTsgY2hhbmNlcyBhcmUgeW91IGRpZCBub3QgaW50ZW5kIHRvIHJ1biB0aGlzIHByb2dyYW0uXG5cCiAgICAtLWxpc3QgICAgICAgICAgICAgICAgbGlzdCBhbGwgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhleSBhcmUgcmVzb2x2ZWRcblwKICAgIC0tdmVyaWZ5ICAgICAgICAgICAgICB2ZXJpZnkgdGhhdCBnaXZlbiBvYmplY3QgcmVhbGx5IGlzIGEgZHluYW1pY2FsbHkgbGlua2VkXG5cCiAgCQkJb2JqZWN0IHdlIGNhbiBoYW5kbGVcblwKQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgICAgICsrX2RsX3NraXBfYXJnczsKICAgICAgICAtLV9kbF9hcmdjOwogZGlmZiAtLWdpdCBhL2ljb252L2djb252X2NvbmYuYyBiL2ljb252L2djb252X2NvbmYuYwotaW5kZXggZTIzNTE4OC4uNTY5ZjcyZSAxMDA2NDQKK2luZGV4IDVhYTA1NWRlNmUuLmI5YTE0YjliZDMgMTAwNjQ0CiAtLS0gYS9pY29udi9nY29udl9jb25mLmMKICsrKyBiL2ljb252L2djb252X2NvbmYuYwogQEAgLTM2LDcgKzM2LDcgQEAKQEAgLTEyMSw3ICsxMjEsNyBAQAogIC8qIFRoZSBwYXRoIGVsZW1lbnRzLCBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBfX2djb252X2dldF9wYXRoIGZ1bmN0aW9uLgogICAgIEFsbCBwYXRoIGVsZW1lbnRzIGVuZCBpbiBhIHNsYXNoLiAgKi8KIGRpZmYgLS1naXQgYS9zeXNkZXBzL2dlbmVyaWMvZGwtY2FjaGUuaCBiL3N5c2RlcHMvZ2VuZXJpYy9kbC1jYWNoZS5oCi1pbmRleCBlYjJmOTAwLi41MDU4MDRlIDEwMDY0NAoraW5kZXggMWYwYjhmNjI5ZC4uYWNiZTY4Mzk5ZCAxMDA2NDQKIC0tLSBhL3N5c2RlcHMvZ2VuZXJpYy9kbC1jYWNoZS5oCiArKysgYi9zeXNkZXBzL2dlbmVyaWMvZGwtY2FjaGUuaAogQEAgLTI3LDEwICsyNyw2IEBACkBAIC0xMzYsNSArMTM2LDUgQEAKICAjIGRlZmluZSBhZGRfc3lzdGVtX2RpcihkaXIpIGFkZF9kaXIgKGRpcikKICAjZW5kaWYKIC0tIAotMi4xMC4yCisyLjEzLjIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDQtbmF0aXZlc2RrLWdsaWJjLUFsbG93LTY0LWJpdC1hdG9taWNzLWZvci14ODYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNC1uYXRpdmVzZGstZ2xpYmMtQWxsb3ctNjQtYml0LWF0b21pY3MtZm9yLXg4Ni5wYXRjaAppbmRleCBiOTgxZjdiLi44ZGI0N2JjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNC1uYXRpdmVzZGstZ2xpYmMtQWxsb3ctNjQtYml0LWF0b21pY3MtZm9yLXg4Ni5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNC1uYXRpdmVzZGstZ2xpYmMtQWxsb3ctNjQtYml0LWF0b21pY3MtZm9yLXg4Ni5wYXRjaApAQCAtMSwxMiArMSwxNCBAQAotRnJvbSAwYjk1ZjM0MjA3ZmZlZDNhYTUzZmE5NDk2NjJiZmJjY2M3Yzg2NGE0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSA4ZmUxYjU2MTgwYzMwZDIzN2NjMmFiOWE1YTljOTdhMDMxMWY0MWRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIERhdGU6IFRodSwgMzEgRGVjIDIwMTUgMTQ6MzU6MzUgLTA4MDAKLVN1YmplY3Q6IFtQQVRDSCAwNC8yNl0gbmF0aXZlc2RrLWdsaWJjOiBBbGxvdyA2NCBiaXQgYXRvbWljcyBmb3IgeDg2CitTdWJqZWN0OiBbUEFUQ0ggMDQvMjVdIG5hdGl2ZXNkay1nbGliYzogQWxsb3cgNjQgYml0IGF0b21pY3MgZm9yIHg4NgogCiBUaGUgZml4IGNvbnNpc3Qgb2YgYWxsb3dpbmcgNjRiaXQgYXRvbWljIG9wcyBmb3IgeDg2LgogVGhpcyBzaG91bGQgYmUgc2FmZSBmb3IgaTU4NiBhbmQgbmV3ZXIgQ1BVcy4KIEl0IGFsc28gbWFrZXMgdGhlIHN5bmNocm9uaXphdGlvbiBtb3JlIGVmZmljaWVudC4KIAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1TcGVjaWZpY10KKwogU2lnbmVkLW9mZi1ieTogSnVybyBCeXN0cmlja3kgPGp1cm8uYnlzdHJpY2t5QGludGVsLmNvbT4KIFNpZ25lZC1vZmYtYnk6IFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPgogU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KQEAgLTE1LDcgKzE3LDcgQEAKICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKIAogZGlmZiAtLWdpdCBhL3N5c2RlcHMvaTM4Ni9hdG9taWMtbWFjaGluZS5oIGIvc3lzZGVwcy9pMzg2L2F0b21pYy1tYWNoaW5lLmgKLWluZGV4IGNlNjJiMzMuLjRmZTQ0ZWEgMTAwNjQ0CitpbmRleCAwZTI0MjAwNjE3Li4xNTMyZjUyZGVjIDEwMDY0NAogLS0tIGEvc3lzZGVwcy9pMzg2L2F0b21pYy1tYWNoaW5lLmgKICsrKyBiL3N5c2RlcHMvaTM4Ni9hdG9taWMtbWFjaGluZS5oCiBAQCAtNTQsNyArNTQsNyBAQCB0eXBlZGVmIHVpbnRtYXhfdCB1YXRvbWljX21heF90OwpAQCAtMjUsOCArMjcsOCBAQAogLSNkZWZpbmUgX19IQVZFXzY0Ql9BVE9NSUNTIDAKICsjZGVmaW5lIF9fSEFWRV82NEJfQVRPTUlDUyAxCiAgI2RlZmluZSBVU0VfQVRPTUlDX0NPTVBJTEVSX0JVSUxUSU5TIDAKLSAKKyAjZGVmaW5lIEFUT01JQ19FWENIQU5HRV9VU0VTX0NBUyAwCiAgCiAtLSAKLTIuMTAuMgorMi4xMy4yCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA1LWZzbC1lNTAwLWU1NTAwLWU2NTAwLTYwM2UtZnNxcnQtaW1wbGVtZW50YXRpb24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNS1mc2wtZTUwMC1lNTUwMC1lNjUwMC02MDNlLWZzcXJ0LWltcGxlbWVudGF0aW9uLnBhdGNoCmluZGV4IGVlNTAwMDAuLjk1NmIyYWEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA1LWZzbC1lNTAwLWU1NTAwLWU2NTAwLTYwM2UtZnNxcnQtaW1wbGVtZW50YXRpb24ucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDUtZnNsLWU1MDAtZTU1MDAtZTY1MDAtNjAzZS1mc3FydC1pbXBsZW1lbnRhdGlvbi5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gNzdhNzQ5NTM3NmM3ZDBjNTUwN2MwZWM5OWJmMTU2ODE1MDMzOWVmNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gYjllZGNjODQ1NjQxOTU2YjcyODZjNjBjODMzZjA1YTlmNzBjZmFiOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiBEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjAxOjUwICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMDUvMjZdIGZzbCBlNTAwL2U1NTAwL2U2NTAwLzYwM2UgZnNxcnQgaW1wbGVtZW50YXRpb24KK1N1YmplY3Q6IFtQQVRDSCAwNS8yNV0gZnNsIGU1MDAvZTU1MDAvZTY1MDAvNjAzZSBmc3FydCBpbXBsZW1lbnRhdGlvbgogCiBVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIFNpZ25lZC1vZmYtYnk6IEVkbWFyIFdpZW5za29za2kgPGVkbWFyQGZyZWVzY2FsZS5jb20+CkBAIC00OSw3ICs0OSw3IEBACiAKIGRpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYwogbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjcxZTUxNmQKK2luZGV4IDAwMDAwMDAwMDAuLjcxZTUxNmQxYzgKIC0tLSAvZGV2L251bGwKICsrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMKIEBAIC0wLDAgKzEsMTM0IEBACkBAIC0xODksNyArMTg5LDcgQEAKICt9CiBkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYwogbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjI2ZmEwNjcKK2luZGV4IDAwMDAwMDAwMDAuLjI2ZmEwNjdhYmYKIC0tLSAvZGV2L251bGwKICsrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jCiBAQCAtMCwwICsxLDEwMSBAQApAQCAtMjk2LDcgKzI5Niw3IEBACiArfQogZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYwogbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjcxZTUxNmQKK2luZGV4IDAwMDAwMDAwMDAuLjcxZTUxNmQxYzgKIC0tLSAvZGV2L251bGwKICsrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYwogQEAgLTAsMCArMSwxMzQgQEAKQEAgLTQzNiw3ICs0MzYsNyBAQAogK30KIGRpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYwogbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjI2ZmEwNjcKK2luZGV4IDAwMDAwMDAwMDAuLjI2ZmEwNjdhYmYKIC0tLSAvZGV2L251bGwKICsrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMKIEBAIC0wLDAgKzEsMTAxIEBACkBAIC01NDMsNyArNTQzLDcgQEAKICt9CiBkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYwogbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjcxZTUxNmQKK2luZGV4IDAwMDAwMDAwMDAuLjcxZTUxNmQxYzgKIC0tLSAvZGV2L251bGwKICsrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jCiBAQCAtMCwwICsxLDEzNCBAQApAQCAtNjgzLDcgKzY4Myw3IEBACiArfQogZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYwogbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjI2ZmEwNjcKK2luZGV4IDAwMDAwMDAwMDAuLjI2ZmEwNjdhYmYKIC0tLSAvZGV2L251bGwKICsrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYwogQEAgLTAsMCArMSwxMDEgQEAKQEAgLTc5MCw3ICs3OTAsNyBAQAogK30KIGRpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCiBuZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uNzFlNTE2ZAoraW5kZXggMDAwMDAwMDAwMC4uNzFlNTE2ZDFjOAogLS0tIC9kZXYvbnVsbAogKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKIEBAIC0wLDAgKzEsMTM0IEBACkBAIC05MzAsNyArOTMwLDcgQEAKICt9CiBkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCiBuZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uMjZmYTA2NworaW5kZXggMDAwMDAwMDAwMC4uMjZmYTA2N2FiZgogLS0tIC9kZXYvbnVsbAogKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCiBAQCAtMCwwICsxLDEwMSBAQApAQCAtMTAzNyw3ICsxMDM3LDcgQEAKICt9CiBkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYwogbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjcxZTUxNmQKK2luZGV4IDAwMDAwMDAwMDAuLjcxZTUxNmQxYzgKIC0tLSAvZGV2L251bGwKICsrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jCiBAQCAtMCwwICsxLDEzNCBAQApAQCAtMTE3Nyw3ICsxMTc3LDcgQEAKICt9CiBkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jCiBuZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uMjZmYTA2NworaW5kZXggMDAwMDAwMDAwMC4uMjZmYTA2N2FiZgogLS0tIC9kZXYvbnVsbAogKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jCiBAQCAtMCwwICsxLDEwMSBAQApAQCAtMTI4NCw3ICsxMjg0LDcgQEAKICt9CiBkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYwogbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjcxZTUxNmQKK2luZGV4IDAwMDAwMDAwMDAuLjcxZTUxNmQxYzgKIC0tLSAvZGV2L251bGwKICsrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jCiBAQCAtMCwwICsxLDEzNCBAQApAQCAtMTQyNCw3ICsxNDI0LDcgQEAKICt9CiBkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jCiBuZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uMjZmYTA2NworaW5kZXggMDAwMDAwMDAwMC4uMjZmYTA2N2FiZgogLS0tIC9kZXYvbnVsbAogKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jCiBAQCAtMCwwICsxLDEwMSBAQApAQCAtMTUzMSwxNCArMTUzMSwxNCBAQAogK30KIGRpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9JbXBsaWVzIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvSW1wbGllcwogbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLmIxMDNiNGQKK2luZGV4IDAwMDAwMDAwMDAuLmIxMDNiNGRlYTUKIC0tLSAvZGV2L251bGwKICsrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L0ltcGxpZXMKIEBAIC0wLDAgKzEgQEAKICtwb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdQogZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2UzMDBjMy9mcHUvSW1wbGllcyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2UzMDBjMy9mcHUvSW1wbGllcwogbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjY0ZGIxN2YKK2luZGV4IDAwMDAwMDAwMDAuLjY0ZGIxN2ZhZGEKIC0tLSAvZGV2L251bGwKICsrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2UzMDBjMy9mcHUvSW1wbGllcwogQEAgLTAsMCArMSwyIEBACkBAIC0xNTQ2LDM5ICsxNTQ2LDM5IEBACiArcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUKIGRpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L0ltcGxpZXMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L0ltcGxpZXMKIG5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi43ZWFjNWZjCitpbmRleCAwMDAwMDAwMDAwLi43ZWFjNWZjZjAyCiAtLS0gL2Rldi9udWxsCiArKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L0ltcGxpZXMKIEBAIC0wLDAgKzEgQEAKICtwb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1CiBkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L0ltcGxpZXMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvSW1wbGllcwogbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjI2NGIyYTcKK2luZGV4IDAwMDAwMDAwMDAuLjI2NGIyYTc3MDAKIC0tLSAvZGV2L251bGwKICsrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9JbXBsaWVzCiBAQCAtMCwwICsxIEBACiArcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1CiBkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L0ltcGxpZXMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvSW1wbGllcwogbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLmEyNTkzNDQKK2luZGV4IDAwMDAwMDAwMDAuLmEyNTkzNDQ2N2IKIC0tLSAvZGV2L251bGwKICsrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9JbXBsaWVzCiBAQCAtMCwwICsxIEBACiArcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1CiBkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L0ltcGxpZXMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvSW1wbGllcwogbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLmE3YmM4NTQKK2luZGV4IDAwMDAwMDAwMDAuLmE3YmM4NTRiZTgKIC0tLSAvZGV2L251bGwKICsrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9JbXBsaWVzCiBAQCAtMCwwICsxIEBACiArcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1CiBkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L0ltcGxpZXMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvSW1wbGllcwogbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjA0ZmY4Y2MKK2luZGV4IDAwMDAwMDAwMDAuLjA0ZmY4Y2MxODEKIC0tLSAvZGV2L251bGwKICsrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9JbXBsaWVzCiBAQCAtMCwwICsxIEBACiArcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1CiAtLSAKLTIuMTAuMgorMi4xMy4yCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA2LXJlYWRsaWItQWRkLU9FQ09SRV9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUy10by1rbm93bi0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNi1yZWFkbGliLUFkZC1PRUNPUkVfS05PV05fSU5URVJQUkVURVJfTkFNRVMtdG8ta25vd24tLnBhdGNoCmluZGV4IDkwODhkMjkuLmM3NGZlYWQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA2LXJlYWRsaWItQWRkLU9FQ09SRV9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUy10by1rbm93bi0ucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDYtcmVhZGxpYi1BZGQtT0VDT1JFX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTLXRvLWtub3duLS5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gNTIwY2I5ZTc0NmFmNjM3Y2YwMWZlYTM4NWI3ZjRlZTRhYWRiZGZkZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gMzI0MjAyNDg4YTFjMjQzOWJlMzQ1NzQ1NzIyZjVjYjA0YzBlMDg0NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiBEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjExOjIyICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMDYvMjZdIHJlYWRsaWI6IEFkZCBPRUNPUkVfS05PV05fSU5URVJQUkVURVJfTkFNRVMgdG8ga25vd24KK1N1YmplY3Q6IFtQQVRDSCAwNi8yNV0gcmVhZGxpYjogQWRkIE9FQ09SRV9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUyB0byBrbm93bgogIG5hbWVzCiAKIFRoaXMgYm9sdHMgaW4gYSBob29rIGZvciBPRSB0byBwYXNzIGl0cyBvd24gdmVyc2lvbiBvZiBpbnRlcnByZXRlcgpAQCAtMTcsNyArMTcsNyBAQAogIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQogCiBkaWZmIC0tZ2l0IGEvZWxmL3JlYWRsaWIuYyBiL2VsZi9yZWFkbGliLmMKLWluZGV4IDhhNjZmZmUuLjA4ZDU2ZmMgMTAwNjQ0CitpbmRleCBkMjc4YTE4OWIyLi5hODRjYjg1MTU4IDEwMDY0NAogLS0tIGEvZWxmL3JlYWRsaWIuYwogKysrIGIvZWxmL3JlYWRsaWIuYwogQEAgLTUxLDYgKzUxLDcgQEAgc3RhdGljIHN0cnVjdCBrbm93bl9uYW1lcyBpbnRlcnByZXRlcnNbXSA9CkBAIC0yOSw1ICsyOSw1IEBACiAgCiAgc3RhdGljIHN0cnVjdCBrbm93bl9uYW1lcyBrbm93bl9saWJzW10gPQogLS0gCi0yLjEwLjIKKzIuMTMuMgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNy1wcGMtc3FydC1GaXgtdW5kZWZpbmVkLXJlZmVyZW5jZS10by1fX3NxcnRfZmluaXRlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDctcHBjLXNxcnQtRml4LXVuZGVmaW5lZC1yZWZlcmVuY2UtdG8tX19zcXJ0X2Zpbml0ZS5wYXRjaAppbmRleCBmMzNkZWZlLi5iNjQzMjc2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNy1wcGMtc3FydC1GaXgtdW5kZWZpbmVkLXJlZmVyZW5jZS10by1fX3NxcnRfZmluaXRlLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA3LXBwYy1zcXJ0LUZpeC11bmRlZmluZWQtcmVmZXJlbmNlLXRvLV9fc3FydF9maW5pdGUucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIDY0MTMwMjYyNzg3ZDU0ZTJlNjY5NWFlNGVkODc4M2JmZWMxNGZmZWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIGNmMDBiZjlkZTgxMjgxNzFlNzlhMDE5ZGU4MDllMzVmM2FlZWQyODEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoxNTowNyArMDAwMAotU3ViamVjdDogW1BBVENIIDA3LzI2XSBwcGMvc3FydDogRml4IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fc3FydF9maW5pdGUnCitTdWJqZWN0OiBbUEFUQ0ggMDcvMjVdIHBwYy9zcXJ0OiBGaXggdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19zcXJ0X2Zpbml0ZScKIAogb24gcHBjIGZpeGVzIHRoZSBlcnJvcnMgbGlrZSBiZWxvdwogfCAuLy5saWJzL2xpYnB1bHNlY29yZS0xLjEuc286IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fc3FydF9maW5pdGUnCkBAIC0zNiw3ICszNiw3IEBACiAgMTIgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYwotaW5kZXggNzFlNTE2ZC4uMTc5NWZkNiAxMDA2NDQKK2luZGV4IDcxZTUxNmQxYzguLjE3OTVmZDZjM2UgMTAwNjQ0CiAtLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jCiArKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jCiBAQCAtMzksMTQgKzM5LDggQEAgc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CkBAIC02MCw3ICs2MCw3IEBACiAgfQogK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCiBkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYwotaW5kZXggMjZmYTA2Ny4uYTkxN2YzMSAxMDA2NDQKK2luZGV4IDI2ZmEwNjdhYmYuLmE5MTdmMzEzYWIgMTAwNjQ0CiAtLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYwogKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMKIEBAIC0zNywxNCArMzcsOCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OwpAQCAtODQsNyArODQsNyBAQAogIH0KICtzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCiBkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jCi1pbmRleCA3MWU1MTZkLi5mYzRhNzQ5IDEwMDY0NAoraW5kZXggNzFlNTE2ZDFjOC4uZmM0YTc0OTkwZSAxMDA2NDQKIC0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYwogKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jCiBAQCAtMTMyLDMgKzEzMiw0IEBAIF9faWVlZTc1NF9zcXJ0IChiKQpAQCAtOTMsNyArOTMsNyBAQAogIH0KICtzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQogZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jCi1pbmRleCAyNmZhMDY3Li45ZDE3NTEyIDEwMDY0NAoraW5kZXggMjZmYTA2N2FiZi4uOWQxNzUxMjJhOCAxMDA2NDQKIC0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMKICsrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMKIEBAIC05OSwzICs5OSw0IEBAIF9faWVlZTc1NF9zcXJ0ZiAoYikKQEAgLTEwMiw3ICsxMDIsNyBAQAogIH0KICtzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCiBkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYwotaW5kZXggNzFlNTE2ZC4uZmM0YTc0OSAxMDA2NDQKK2luZGV4IDcxZTUxNmQxYzguLmZjNGE3NDk5MGUgMTAwNjQ0CiAtLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYwogKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMKIEBAIC0xMzIsMyArMTMyLDQgQEAgX19pZWVlNzU0X3NxcnQgKGIpCkBAIC0xMTEsNyArMTExLDcgQEAKICB9CiArc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKIGRpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMKLWluZGV4IDI2ZmEwNjcuLjlkMTc1MTIgMTAwNjQ0CitpbmRleCAyNmZhMDY3YWJmLi45ZDE3NTEyMmE4IDEwMDY0NAogLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jCiArKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMKIEBAIC05OSwzICs5OSw0IEBAIF9faWVlZTc1NF9zcXJ0ZiAoYikKQEAgLTEyMCw3ICsxMjAsNyBAQAogIH0KICtzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCiBkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYwotaW5kZXggNzFlNTE2ZC4uZmM0YTc0OSAxMDA2NDQKK2luZGV4IDcxZTUxNmQxYzguLmZjNGE3NDk5MGUgMTAwNjQ0CiAtLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYwogKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKIEBAIC0xMzIsMyArMTMyLDQgQEAgX19pZWVlNzU0X3NxcnQgKGIpCkBAIC0xMjksNyArMTI5LDcgQEAKICB9CiArc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKIGRpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKLWluZGV4IDI2ZmEwNjcuLjlkMTc1MTIgMTAwNjQ0CitpbmRleCAyNmZhMDY3YWJmLi45ZDE3NTEyMmE4IDEwMDY0NAogLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCiArKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKIEBAIC05OSwzICs5OSw0IEBAIF9faWVlZTc1NF9zcXJ0ZiAoYikKQEAgLTEzOCw3ICsxMzgsNyBAQAogIH0KICtzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCiBkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYwotaW5kZXggNzFlNTE2ZC4uMTc5NWZkNiAxMDA2NDQKK2luZGV4IDcxZTUxNmQxYzguLjE3OTVmZDZjM2UgMTAwNjQ0CiAtLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYwogKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMKIEBAIC0zOSwxNCArMzksOCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKQEAgLTE2Miw3ICsxNjIsNyBAQAogIH0KICtzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQogZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYwotaW5kZXggMjZmYTA2Ny4uYTkxN2YzMSAxMDA2NDQKK2luZGV4IDI2ZmEwNjdhYmYuLmE5MTdmMzEzYWIgMTAwNjQ0CiAtLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMKICsrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYwogQEAgLTM3LDE0ICszNyw4IEBAIHN0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CkBAIC0xODYsNyArMTg2LDcgQEAKICB9CiArc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQogZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMKLWluZGV4IDcxZTUxNmQuLmZjNGE3NDkgMTAwNjQ0CitpbmRleCA3MWU1MTZkMWM4Li5mYzRhNzQ5OTBlIDEwMDY0NAogLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMKICsrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jCiBAQCAtMTMyLDMgKzEzMiw0IEBAIF9faWVlZTc1NF9zcXJ0IChiKQpAQCAtMTk1LDcgKzE5NSw3IEBACiAgfQogK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCiBkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jCi1pbmRleCAyNmZhMDY3Li45ZDE3NTEyIDEwMDY0NAoraW5kZXggMjZmYTA2N2FiZi4uOWQxNzUxMjJhOCAxMDA2NDQKIC0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYwogKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jCiBAQCAtOTksMyArOTksNCBAQCBfX2llZWU3NTRfc3FydGYgKGIpCkBAIC0yMDQsNSArMjA0LDUgQEAKICB9CiArc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQogLS0gCi0yLjEwLjIKKzIuMTMuMgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwOC1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDgtX19pZWVlNzU0X3NxcnQtZi1hcmUtbm93LWlubGluZS1mdW5jdGlvbnMtYW5kLWNhbGwtby5wYXRjaAppbmRleCAyNmY2NWM1Li4zYWVlYzUyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwOC1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA4LV9faWVlZTc1NF9zcXJ0LWYtYXJlLW5vdy1pbmxpbmUtZnVuY3Rpb25zLWFuZC1jYWxsLW8ucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIDVhZmIwMTQ3ZTNlNDljM2I0NzQ0MDQ1MjQwMTRlZmU1MWIyYmNhNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIGJhYmUzMTFkZWNhOWVlMjczMDI3OGYxM2IwNjFiOTE0YjUyODZkYzMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoxNjozOCArMDAwMAotU3ViamVjdDogW1BBVENIIDA4LzI2XSBfX2llZWU3NTRfc3FydHssZn0gYXJlIG5vdyBpbmxpbmUgZnVuY3Rpb25zIGFuZCBjYWxsCitTdWJqZWN0OiBbUEFUQ0ggMDgvMjVdIF9faWVlZTc1NF9zcXJ0eyxmfSBhcmUgbm93IGlubGluZSBmdW5jdGlvbnMgYW5kIGNhbGwKICBvdXQgX19zbG93IHZlcnNpb25zCiAKIFVwc3RyZWFtLVN0YXR1czogUGVuZGluZwpAQCAtMjMsNyArMjMsNyBAQAogIDEyIGZpbGVzIGNoYW5nZWQsIDExNCBpbnNlcnRpb25zKCspLCAyMSBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jCi1pbmRleCAxNzk1ZmQ2Li5kYWE4M2YzIDEwMDY0NAoraW5kZXggMTc5NWZkNmMzZS4uZGFhODNmM2ZlOCAxMDA2NDQKIC0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMKICsrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMKIEBAIC00MCw3ICs0MCw3IEBAIHN0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OwpAQCAtNTgsNyArNTgsNyBAQAogKwogIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCiBkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYwotaW5kZXggYTkxN2YzMS4uYjgxMmNmMSAxMDA2NDQKK2luZGV4IGE5MTdmMzEzYWIuLmI4MTJjZjE3MDUgMTAwNjQ0CiAtLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYwogKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMKIEBAIC0zOCw3ICszOCw3IEBAIHN0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CkBAIC04Miw3ICs4Miw3IEBACiArfQogIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKIGRpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMKLWluZGV4IGZjNGE3NDkuLjcwMzhhNzAgMTAwNjQ0CitpbmRleCBmYzRhNzQ5OTBlLi43MDM4YTcwYjQ3IDEwMDY0NAogLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jCiArKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMKIEBAIC00MSwxMCArNDEsMTAgQEAgc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CkBAIC0xMjEsNyArMTIxLDcgQEAKICsKICBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQogZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jCi1pbmRleCA5ZDE3NTEyLi4xMGRlMWYwIDEwMDY0NAoraW5kZXggOWQxNzUxMjJhOC4uMTBkZTFmMGNjMyAxMDA2NDQKIC0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMKICsrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMKIEBAIC0zOSwxMCArMzksMTAgQEAgc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKQEAgLTE1MSw3ICsxNTEsNyBAQAogKwogIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKIGRpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jCi1pbmRleCBmYzRhNzQ5Li43MDM4YTcwIDEwMDY0NAoraW5kZXggZmM0YTc0OTkwZS4uNzAzOGE3MGI0NyAxMDA2NDQKIC0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jCiArKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYwogQEAgLTQxLDEwICs0MSwxMCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKQEAgLTE5MCw3ICsxOTAsNyBAQAogKwogIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCiBkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jCi1pbmRleCA5ZDE3NTEyLi4xMGRlMWYwIDEwMDY0NAoraW5kZXggOWQxNzUxMjJhOC4uMTBkZTFmMGNjMyAxMDA2NDQKIC0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYwogKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jCiBAQCAtMzksMTAgKzM5LDEwIEBAIHN0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CkBAIC0yMjAsNyArMjIwLDcgQEAKICsKICBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCiBkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYwotaW5kZXggZmM0YTc0OS4uMWMzNDI0NCAxMDA2NDQKK2luZGV4IGZjNGE3NDk5MGUuLjFjMzQyNDRiZDggMTAwNjQ0CiAtLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYwogKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKIEBAIC0xMzIsNCArMTMyLDEyIEBAIF9faWVlZTc1NF9zcXJ0IChiKQpAQCAtMjM3LDcgKzIzNyw3IEBACiArCiAgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKIGRpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKLWluZGV4IDlkMTc1MTIuLjgxMjY1MzUgMTAwNjQ0CitpbmRleCA5ZDE3NTEyMmE4Li44MTI2NTM1NThmIDEwMDY0NAogLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCiArKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKIEBAIC05OSw0ICs5OSwxMiBAQCBfX2llZWU3NTRfc3FydGYgKGIpCkBAIC0yNTQsNyArMjU0LDcgQEAKICsKICBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCiBkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYwotaW5kZXggMTc5NWZkNi4uMTNhODE5NyAxMDA2NDQKK2luZGV4IDE3OTVmZDZjM2UuLjEzYTgxOTczZTMgMTAwNjQ0CiAtLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYwogKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMKIEBAIC00MCw3ICs0MCw3IEBAIHN0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OwpAQCAtMjg5LDcgKzI4OSw3IEBACiArCiAgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKIGRpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMKLWluZGV4IGE5MTdmMzEuLmZhZTJkODEgMTAwNjQ0CitpbmRleCBhOTE3ZjMxM2FiLi5mYWUyZDgxMjEwIDEwMDY0NAogLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jCiArKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMKIEBAIC0zOCw3ICszOCw3IEBAIHN0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CkBAIC0zMTQsNyArMzE0LDcgQEAKICsKICBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCiBkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYwotaW5kZXggZmM0YTc0OS4uNzAzOGE3MCAxMDA2NDQKK2luZGV4IGZjNGE3NDk5MGUuLjcwMzhhNzBiNDcgMTAwNjQ0CiAtLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYwogKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMKIEBAIC00MSwxMCArNDEsMTAgQEAgc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CkBAIC0zNTMsNyArMzUzLDcgQEAKICsKICBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQogZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYwotaW5kZXggOWQxNzUxMi4uMTBkZTFmMCAxMDA2NDQKK2luZGV4IDlkMTc1MTIyYTguLjEwZGUxZjBjYzMgMTAwNjQ0CiAtLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMKICsrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYwogQEAgLTM5LDEwICszOSwxMCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OwpAQCAtMzgzLDUgKzM4Myw1IEBACiArCiAgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQogLS0gCi0yLjEwLjIKKzIuMTMuMgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwOS1RdW90ZS1mcm9tLWJ1Zy0xNDQzLXdoaWNoLWV4cGxhaW5zLXdoYXQtdGhlLXBhdGNoLWRvLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDktUXVvdGUtZnJvbS1idWctMTQ0My13aGljaC1leHBsYWlucy13aGF0LXRoZS1wYXRjaC1kby5wYXRjaAppbmRleCBkNDE2YWNkLi43ZDVjMmUzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwOS1RdW90ZS1mcm9tLWJ1Zy0xNDQzLXdoaWNoLWV4cGxhaW5zLXdoYXQtdGhlLXBhdGNoLWRvLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA5LVF1b3RlLWZyb20tYnVnLTE0NDMtd2hpY2gtZXhwbGFpbnMtd2hhdC10aGUtcGF0Y2gtZG8ucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIGRkZDUxYmI0ZTAwNTQzMmNiM2MwZjhmMzM4MjI5NTQ0MDhhOWZlZTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDkzYjVkNmJlZDE5OTM5MDM5MDMxYzQ1Yjc3N2QyOTYxOWRiMDYxODQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoyMDowOSArMDAwMAotU3ViamVjdDogW1BBVENIIDA5LzI2XSBRdW90ZSBmcm9tIGJ1ZyAxNDQzIHdoaWNoIGV4cGxhaW5zIHdoYXQgdGhlIHBhdGNoIGRvZXMKK1N1YmplY3Q6IFtQQVRDSCAwOS8yNV0gUXVvdGUgZnJvbSBidWcgMTQ0MyB3aGljaCBleHBsYWlucyB3aGF0IHRoZSBwYXRjaCBkb2VzCiAgOgogCiAgIFdlIGJ1aWxkIHNvbWUgcmFuZG9tIHByb2dyYW0gYW5kIGxpbmsgaXQgd2l0aCAtbHVzdC4gIFdoZW4gd2UgcnVuIGl0LApAQCAtNDUsMTAgKzQ1LDEwIEBACiAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCiAKIGRpZmYgLS1naXQgYS9zeXNkZXBzL2FybS9kbC1tYWNoaW5lLmggYi9zeXNkZXBzL2FybS9kbC1tYWNoaW5lLmgKLWluZGV4IDYwZWVlMDAuLjdkNTRkNWUgMTAwNjQ0CitpbmRleCA3MDUzZWFkMTZlLi4wYjFlMTcxNmIwIDEwMDY0NAogLS0tIGEvc3lzZGVwcy9hcm0vZGwtbWFjaGluZS5oCiArKysgYi9zeXNkZXBzL2FybS9kbC1tYWNoaW5lLmgKLUBAIC00OTksNyArNDk5LDcgQEAgZWxmX21hY2hpbmVfcmVsIChzdHJ1Y3QgbGlua19tYXAgKm1hcCwgY29uc3QgRWxmMzJfUmVsICpyZWxvYywKK0BAIC01MDAsNyArNTAwLDcgQEAgZWxmX21hY2hpbmVfcmVsIChzdHJ1Y3QgbGlua19tYXAgKm1hcCwgY29uc3QgRWxmMzJfUmVsICpyZWxvYywKICAKICAJY2FzZSBSX0FSTV9UTFNfRFRQT0ZGMzI6CiAgCSAgaWYgKHN5bSAhPSBOVUxMKQpAQCAtNTgsNSArNTgsNSBAQAogIAogIAljYXNlIFJfQVJNX1RMU19UUE9GRjMyOgogLS0gCi0yLjEwLjIKKzIuMTMuMgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMC1lZ2xpYmMtcnVuLWxpYm0tZXJyLXRhYi5wbC13aXRoLXNwZWNpZmljLWRpcnMtaW4tUy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDEwLWVnbGliYy1ydW4tbGlibS1lcnItdGFiLnBsLXdpdGgtc3BlY2lmaWMtZGlycy1pbi1TLnBhdGNoCmluZGV4IDI3NmYxZmEuLjcyNzVjM2UgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDEwLWVnbGliYy1ydW4tbGlibS1lcnItdGFiLnBsLXdpdGgtc3BlY2lmaWMtZGlycy1pbi1TLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDEwLWVnbGliYy1ydW4tbGlibS1lcnItdGFiLnBsLXdpdGgtc3BlY2lmaWMtZGlycy1pbi1TLnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSBkN2U3NDY3MDgyNTMzMGY1NDIxYTU1ZjVhYTJhMWNlNmZkYTdkN2ZiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSAxYTZlMGY0ZWU4NTg0YjA0MjI2MTU2ZGYxYTNkZTNlNDY3ZjBlZjZmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogVGluZyBMaXUgPGIyODQ5NUBmcmVlc2NhbGUuY29tPgogRGF0ZTogV2VkLCAxOSBEZWMgMjAxMiAwNDozOTo1NyAtMDYwMAotU3ViamVjdDogW1BBVENIIDEwLzI2XSBlZ2xpYmM6IHJ1biBsaWJtLWVyci10YWIucGwgd2l0aCBzcGVjaWZpYyBkaXJzIGluICR7U30KK1N1YmplY3Q6IFtQQVRDSCAxMC8yNV0gZWdsaWJjOiBydW4gbGlibS1lcnItdGFiLnBsIHdpdGggc3BlY2lmaWMgZGlycyBpbiAke1N9CiAKIGxpYm0tZXJyLXRhYi5wbCB3aWxsIHBhcnNlIGFsbCB0aGUgZmlsZXMgbmFtZWQgImxpYm0tdGVzdC11bHBzIgogaW4gdGhlIGdpdmVuIGRpciByZWN1cnNpdmVseS4gVG8gYXZvaWQgcGFyc2luZyB0aGUgb25lIGluCkBAIC0xOCw3ICsxOCw3IEBACiAgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogCiBkaWZmIC0tZ2l0IGEvbWFudWFsL01ha2VmaWxlIGIvbWFudWFsL01ha2VmaWxlCi1pbmRleCBmMmY2OTRmLi5lMDYyODMzIDEwMDY0NAoraW5kZXggNGVkNjNhOGVmMy4uZTg5OTE5ZWIxOSAxMDA2NDQKIC0tLSBhL21hbnVhbC9NYWtlZmlsZQogKysrIGIvbWFudWFsL01ha2VmaWxlCiBAQCAtMTA1LDcgKzEwNSw4IEBAICQob2JqcGZ4KWxpYm0tZXJyLnRleGk6ICQob2JqcGZ4KXN0YW1wLWxpYm0tZXJyCkBAIC0zMiw1ICszMiw1IEBACiAgCXRvdWNoICRACiAgCiAtLSAKLTIuMTAuMgorMi4xMy4yCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDExLV9faWVlZTc1NF9zcXJ0LWYtYXJlLW5vdy1pbmxpbmUtZnVuY3Rpb25zLWFuZC1jYWxsLW8ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMS1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoCmluZGV4IDA5NmRhYjUuLjg0ZjJjYTUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDExLV9faWVlZTc1NF9zcXJ0LWYtYXJlLW5vdy1pbmxpbmUtZnVuY3Rpb25zLWFuZC1jYWxsLW8ucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTEtX19pZWVlNzU0X3NxcnQtZi1hcmUtbm93LWlubGluZS1mdW5jdGlvbnMtYW5kLWNhbGwtby5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gZDZlMjA3NjU3MTI2M2U0NWM0ODg4OTg5NmQzZDk0ZmY1NzZkZjJiZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gOWIyYWY2Y2JmNjhkMzM1M2Q3MjUxOWU3ZjZjNDZiZWNiN2JkMWQwZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiBEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjI0OjQ2ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMTEvMjZdIF9faWVlZTc1NF9zcXJ0eyxmfSBhcmUgbm93IGlubGluZSBmdW5jdGlvbnMgYW5kIGNhbGwKK1N1YmplY3Q6IFtQQVRDSCAxMS8yNV0gX19pZWVlNzU0X3NxcnR7LGZ9IGFyZSBub3cgaW5saW5lIGZ1bmN0aW9ucyBhbmQgY2FsbAogIG91dCBfX3Nsb3cgdmVyc2lvbnMKIAogVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCkBAIC0xNCw3ICsxNCw3IEBACiAgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCi1pbmRleCAxYzM0MjQ0Li43MDM4YTcwIDEwMDY0NAoraW5kZXggMWMzNDI0NGJkOC4uNzAzOGE3MGI0NyAxMDA2NDQKIC0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCiArKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYwogQEAgLTQxLDEwICs0MSwxMCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKQEAgLTQwLDcgKzQwLDcgQEAKICAjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYwotaW5kZXggODEyNjUzNS4uMTBkZTFmMCAxMDA2NDQKK2luZGV4IDgxMjY1MzU1OGYuLjEwZGUxZjBjYzMgMTAwNjQ0CiAtLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKICsrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYwogQEAgLTM5LDEwICszOSwxMCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OwpAQCAtNTcsNSArNTcsNSBAQAogICNlbmRpZgogIHsKIC0tIAotMi4xMC4yCisyLjEzLjIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTItTWFrZS1sZC12ZXJzaW9uLW91dHB1dC1tYXRjaGluZy1ncm9rLWdvbGQtcy1vdXRwdXQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMi1NYWtlLWxkLXZlcnNpb24tb3V0cHV0LW1hdGNoaW5nLWdyb2stZ29sZC1zLW91dHB1dC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzcyOGM2MS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMi1NYWtlLWxkLXZlcnNpb24tb3V0cHV0LW1hdGNoaW5nLWdyb2stZ29sZC1zLW91dHB1dC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLUZyb20gYzA5NzRjNzQ2ZTAyNjY1MGJlZjVkMTk0MGViM2Y1MTk3NjVjNzdhZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjI1OjQ1ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMTIvMjZdIE1ha2UgbGQgLS12ZXJzaW9uIG91dHB1dCBtYXRjaGluZyBncm9rIGdvbGQncyBvdXRwdXQKLQotYWRhcHRlZCBmcm9tIGZyb20gdXBzdHJlYW0gYnJhbmNoIHJvbGFuZC9nb2xkLXZzLWxpYmMKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi0gY29uZmlndXJlICAgIHwgMiArLQotIGNvbmZpZ3VyZS5hYyB8IDIgKy0KLSAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQotaW5kZXggNWNmMzIzMC4uMzkxZjI5ZCAxMDA3NTUKLS0tLSBhL2NvbmZpZ3VyZQotKysrIGIvY29uZmlndXJlCi1AQCAtNDU1NSw3ICs0NTU1LDcgQEAgZWxzZQotICAgIyBGb3VuZCBpdCwgbm93IGNoZWNrIHRoZSB2ZXJzaW9uLgotICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB2ZXJzaW9uIG9mICRMRCIgPiY1Ci0gJGFzX2VjaG9fbiAiY2hlY2tpbmcgdmVyc2lvbiBvZiAkTEQuLi4gIiA+JjY7IH0KLS0gIGFjX3Byb2dfdmVyc2lvbj1gJExEIC0tdmVyc2lvbiAyPiYxIHwgc2VkIC1uICdzL14uKkdOVSBsZC4qIFwoWzAtOV1bMC05XSpcLlswLTkuXSpcKS4qJC9cMS9wJ2AKLSsgIGFjX3Byb2dfdmVyc2lvbj1gJExEIC0tdmVyc2lvbiAyPiYxIHwgc2VkIC1uICdzL14uKkdOVSBbQmJpbnV0aWxzZF1bXi5dKiBcKFswLTldWzAtOV0qXC5bMC05Ll0qXCkuKiQvXDEvcCdgCi0gICBjYXNlICRhY19wcm9nX3ZlcnNpb24gaW4KLSAgICAgJycpIGFjX3Byb2dfdmVyc2lvbj0idi4gPy4/PywgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7Ci0gICAgIDIuMVswLTldWzAtOV0qfDIuMlsyLTldKnwyLlszLTldWzAtOV0qfFszLTldLip8WzEtOV1bMC05XSopCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCBkNzE5ZmFkLi41YjU4NzdjIDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC05OTAsNyArOTkwLDcgQEAgQUNfQ0hFQ0tfUFJPR19WRVIoQVMsICRBUywgLS12ZXJzaW9uLAotIAkJICBbMi4xWzAtOV1bMC05XSp8Mi4yWzItOV0qfDIuWzMtOV1bMC05XSp8WzMtOV0uKnxbMS05XVswLTldKl0sCi0gCQkgIEFTPTogY3JpdGljX21pc3Npbmc9IiRjcml0aWNfbWlzc2luZyBhcyIpCi0gQUNfQ0hFQ0tfUFJPR19WRVIoTEQsICRMRCwgLS12ZXJzaW9uLAotLQkJICBbR05VIGxkLiogXChbMC05XVswLTldKlwuWzAtOS5dKlwpXSwKLSsJCSAgW0dOVSBbQmJpbnV0aWxzZF1bXi5dKiBcKFswLTldWzAtOV0qXC5bMC05Ll0qXCldLAotIAkJICBbMi4xWzAtOV1bMC05XSp8Mi4yWzItOV0qfDIuWzMtOV1bMC05XSp8WzMtOV0uKnxbMS05XVswLTldKl0sCi0gCQkgIExEPTogY3JpdGljX21pc3Npbmc9IiRjcml0aWNfbWlzc2luZyBsZCIpCi0gCi0tLSAKLTIuMTAuMgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMi1zeXNkZXBzLWdudS1jb25maWd1cmUuYWMtaGFuZGxlLWNvcnJlY3RseS1saWJjX2N2X3JvLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTItc3lzZGVwcy1nbnUtY29uZmlndXJlLmFjLWhhbmRsZS1jb3JyZWN0bHktbGliY19jdl9yby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmY2YjIzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTItc3lzZGVwcy1nbnUtY29uZmlndXJlLmFjLWhhbmRsZS1jb3JyZWN0bHktbGliY19jdl9yby5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIGZmZDNjNWEwNGQ4ZjJmMjZmZWE3MWZlZDRjZTQxZTg4YjZmNTEwODYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoyNzoxMCArMDAwMAorU3ViamVjdDogW1BBVENIIDEyLzI1XSBzeXNkZXBzL2dudS9jb25maWd1cmUuYWM6IGhhbmRsZSBjb3JyZWN0bHkKKyAkbGliY19jdl9yb290c2JpbmRpcgorCitVcHN0cmVhbS1TdGF0dXM6UGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXR0aGlldSBDcmFwZXQgPE1hdHRoaWV1LkNyYXBldEBpbmdlbmljby5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3lzZGVwcy9nbnUvY29uZmlndXJlICAgIHwgMiArLQorIHN5c2RlcHMvZ251L2NvbmZpZ3VyZS5hYyB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3N5c2RlcHMvZ251L2NvbmZpZ3VyZSBiL3N5c2RlcHMvZ251L2NvbmZpZ3VyZQoraW5kZXggNzEyNDNhZDBjNi4uZjU3ODE4NzU3NiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvZ251L2NvbmZpZ3VyZQorKysrIGIvc3lzZGVwcy9nbnUvY29uZmlndXJlCitAQCAtMzIsNiArMzIsNiBAQCBjYXNlICIkcHJlZml4IiBpbgorICAgZWxzZQorICAgICBsaWJjX2N2X2xvY2Fsc3RhdGVkaXI9JGxvY2Fsc3RhdGVkaXIKKyAgICBmaQorLSAgbGliY19jdl9yb290c2JpbmRpcj0vc2JpbgorKyAgdGVzdCAtbiAiJGxpYmNfY3Zfcm9vdHNiaW5kaXIiIHx8IGxpYmNfY3Zfcm9vdHNiaW5kaXI9L3NiaW4KKyAgIDs7CisgZXNhYworZGlmZiAtLWdpdCBhL3N5c2RlcHMvZ251L2NvbmZpZ3VyZS5hYyBiL3N5c2RlcHMvZ251L2NvbmZpZ3VyZS5hYworaW5kZXggNjM0ZmU0ZGUyYS4uM2RiMTY5N2Y0ZiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvZ251L2NvbmZpZ3VyZS5hYworKysrIGIvc3lzZGVwcy9nbnUvY29uZmlndXJlLmFjCitAQCAtMjEsNiArMjEsNiBAQCBjYXNlICIkcHJlZml4IiBpbgorICAgZWxzZQorICAgICBsaWJjX2N2X2xvY2Fsc3RhdGVkaXI9JGxvY2Fsc3RhdGVkaXIKKyAgICBmaQorLSAgbGliY19jdl9yb290c2JpbmRpcj0vc2JpbgorKyAgdGVzdCAtbiAiJGxpYmNfY3Zfcm9vdHNiaW5kaXIiIHx8IGxpYmNfY3Zfcm9vdHNiaW5kaXI9L3NiaW4KKyAgIDs7CisgZXNhYworLS0gCisyLjEzLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTMtQWRkLXVudXNlZC1hdHRyaWJ1dGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMy1BZGQtdW51c2VkLWF0dHJpYnV0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTlmZTUwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTMtQWRkLXVudXNlZC1hdHRyaWJ1dGUucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSAwNDljY2U4MmYzNWUwZDg2NGQ5ODA3NWI4Mzg4OGRiYmE0ZDY4YWZkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6Mjg6NDEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxMy8yNV0gQWRkIHVudXNlZCBhdHRyaWJ1dGUKKworSGVscHMgaW4gYXZvaWRpbmcgZ2NjIHdhcm5pbmcgd2hlbiBoZWFkZXIgaXMgaXMgaW5jbHVkZWQgaW4KK2Egc291cmNlIGZpbGUgd2hpY2ggZG9lcyBub3QgdXNlIGJvdGggZnVuY3Rpb25zCisKKyAgICAgICAgKiBpY29udi9nY29udl9jaGFyc2V0LmggKHN0cmlwKToKKyAgICAgICAgQWRkIHVudXNlZCBhdHRyaWJ1dGUuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgaWNvbnYvZ2NvbnZfY2hhcnNldC5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvaWNvbnYvZ2NvbnZfY2hhcnNldC5oIGIvaWNvbnYvZ2NvbnZfY2hhcnNldC5oCitpbmRleCAxOGQ4YmQ2YWU3Li5lYjcyOWRhNWQzIDEwMDY0NAorLS0tIGEvaWNvbnYvZ2NvbnZfY2hhcnNldC5oCisrKysgYi9pY29udi9nY29udl9jaGFyc2V0LmgKK0BAIC0yMSw3ICsyMSw3IEBACisgI2luY2x1ZGUgPGxvY2FsZS5oPgorIAorIAorLXN0YXRpYyB2b2lkCisrc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCisgc3RyaXAgKGNoYXIgKndwLCBjb25zdCBjaGFyICpzKQorIHsKKyAgIGludCBzbGFzaF9jb3VudCA9IDA7CistLSAKKzIuMTMuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMy1zeXNkZXBzLWdudS1jb25maWd1cmUuYWMtaGFuZGxlLWNvcnJlY3RseS1saWJjX2N2X3JvLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTMtc3lzZGVwcy1nbnUtY29uZmlndXJlLmFjLWhhbmRsZS1jb3JyZWN0bHktbGliY19jdl9yby5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM4MWM3Mi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMy1zeXNkZXBzLWdudS1jb25maWd1cmUuYWMtaGFuZGxlLWNvcnJlY3RseS1saWJjX2N2X3JvLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotRnJvbSAyYTEyZWFkZmQ3OTQwYjZiMDkxM2RlOGU5NWQ4NTEyNTRjY2U3OTUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6Mjc6MTAgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAxMy8yNl0gc3lzZGVwcy9nbnUvY29uZmlndXJlLmFjOiBoYW5kbGUgY29ycmVjdGx5Ci0gJGxpYmNfY3Zfcm9vdHNiaW5kaXIKLQotVXBzdHJlYW0tU3RhdHVzOlBlbmRpbmcKLQotU2lnbmVkLW9mZi1ieTogTWF0dGhpZXUgQ3JhcGV0IDxNYXR0aGlldS5DcmFwZXRAaW5nZW5pY28uY29tPgotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotIHN5c2RlcHMvZ251L2NvbmZpZ3VyZSAgICB8IDIgKy0KLSBzeXNkZXBzL2dudS9jb25maWd1cmUuYWMgfCAyICstCi0gMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9zeXNkZXBzL2dudS9jb25maWd1cmUgYi9zeXNkZXBzL2dudS9jb25maWd1cmUKLWluZGV4IDcxMjQzYWQuLmY1NzgxODcgMTAwNjQ0Ci0tLS0gYS9zeXNkZXBzL2dudS9jb25maWd1cmUKLSsrKyBiL3N5c2RlcHMvZ251L2NvbmZpZ3VyZQotQEAgLTMyLDYgKzMyLDYgQEAgY2FzZSAiJHByZWZpeCIgaW4KLSAgIGVsc2UKLSAgICAgbGliY19jdl9sb2NhbHN0YXRlZGlyPSRsb2NhbHN0YXRlZGlyCi0gICAgZmkKLS0gIGxpYmNfY3Zfcm9vdHNiaW5kaXI9L3NiaW4KLSsgIHRlc3QgLW4gIiRsaWJjX2N2X3Jvb3RzYmluZGlyIiB8fCBsaWJjX2N2X3Jvb3RzYmluZGlyPS9zYmluCi0gICA7OwotIGVzYWMKLWRpZmYgLS1naXQgYS9zeXNkZXBzL2dudS9jb25maWd1cmUuYWMgYi9zeXNkZXBzL2dudS9jb25maWd1cmUuYWMKLWluZGV4IDYzNGZlNGQuLjNkYjE2OTcgMTAwNjQ0Ci0tLS0gYS9zeXNkZXBzL2dudS9jb25maWd1cmUuYWMKLSsrKyBiL3N5c2RlcHMvZ251L2NvbmZpZ3VyZS5hYwotQEAgLTIxLDYgKzIxLDYgQEAgY2FzZSAiJHByZWZpeCIgaW4KLSAgIGVsc2UKLSAgICAgbGliY19jdl9sb2NhbHN0YXRlZGlyPSRsb2NhbHN0YXRlZGlyCi0gICAgZmkKLS0gIGxpYmNfY3Zfcm9vdHNiaW5kaXI9L3NiaW4KLSsgIHRlc3QgLW4gIiRsaWJjX2N2X3Jvb3RzYmluZGlyIiB8fCBsaWJjX2N2X3Jvb3RzYmluZGlyPS9zYmluCi0gICA7OwotIGVzYWMKLS0tIAotMi4xMC4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE0LUFkZC11bnVzZWQtYXR0cmlidXRlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTQtQWRkLXVudXNlZC1hdHRyaWJ1dGUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyM2UxMDQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTQtQWRkLXVudXNlZC1hdHRyaWJ1dGUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi1Gcm9tIGVjNGY3NzYzYjMwNjAzYjdiYTBiNzBiZDc3NTBlMzRkNDQyODIxYjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoyODo0MSArMDAwMAotU3ViamVjdDogW1BBVENIIDE0LzI2XSBBZGQgdW51c2VkIGF0dHJpYnV0ZQotCi1IZWxwcyBpbiBhdm9pZGluZyBnY2Mgd2FybmluZyB3aGVuIGhlYWRlciBpcyBpcyBpbmNsdWRlZCBpbgotYSBzb3VyY2UgZmlsZSB3aGljaCBkb2VzIG5vdCB1c2UgYm90aCBmdW5jdGlvbnMKLQotICAgICAgICAqIGljb252L2djb252X2NoYXJzZXQuaCAoc3RyaXApOgotICAgICAgICBBZGQgdW51c2VkIGF0dHJpYnV0ZS4KLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLSBpY29udi9nY29udl9jaGFyc2V0LmggfCAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9pY29udi9nY29udl9jaGFyc2V0LmggYi9pY29udi9nY29udl9jaGFyc2V0LmgKLWluZGV4IDk1Y2JjZTcuLjE5MWEwZGQgMTAwNjQ0Ci0tLS0gYS9pY29udi9nY29udl9jaGFyc2V0LmgKLSsrKyBiL2ljb252L2djb252X2NoYXJzZXQuaAotQEAgLTIxLDcgKzIxLDcgQEAKLSAjaW5jbHVkZSA8bG9jYWxlLmg+Ci0gCi0gCi0tc3RhdGljIHZvaWQKLStzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKLSBzdHJpcCAoY2hhciAqd3AsIGNvbnN0IGNoYXIgKnMpCi0gewotICAgaW50IHNsYXNoX2NvdW50ID0gMDsKLS0tIAotMi4xMC4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE0LXllcy13aXRoaW4tdGhlLXBhdGgtc2V0cy13cm9uZy1jb25maWctdmFyaWFibGVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTQteWVzLXdpdGhpbi10aGUtcGF0aC1zZXRzLXdyb25nLWNvbmZpZy12YXJpYWJsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRjNzBlMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE0LXllcy13aXRoaW4tdGhlLXBhdGgtc2V0cy13cm9uZy1jb25maWctdmFyaWFibGVzLnBhdGNoCkBAIC0wLDAgKzEsMjYzIEBACitGcm9tIDNiOTA0YmVlODFhMWNmZTgxZTNmNDM3YjVmMzI5NmVmZDU0YTUxYWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDozMTowNiArMDAwMAorU3ViamVjdDogW1BBVENIIDE0LzI1XSAneWVzJyB3aXRoaW4gdGhlIHBhdGggc2V0cyB3cm9uZyBjb25maWcgdmFyaWFibGVzCisKK0l0IHNlZW1zIHRoYXQgdGhlICdBQ19FR1JFUF9DUFAoeWVzLi4uJyBleGFtcGxlIGlzIHF1aXRlIHBvcHVsYXIKK2J1dCBiZWluZyBzdWNoIGEgc2hvcnQgd29yZCB0byBncmVwIGl0IGlzIGxpa2VseSB0byBwcm9kdWNlCitmYWxzZS1wb3NpdGl2ZSBtYXRjaGVzIHdpdGggdGhlIHBhdGggaXQgaXMgY29uZmlndXJlZCBpbnRvLgorCitUaGUgY2hhbmdlIGlzIHRvIHVzZSBhIG1vcmUgZWxhYm9yYXRlZCBzdHJpbmcgdG8gZ3JlcCBmb3IuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtsaWJjLWFscGhhQHNvdXJjZXdhcmUub3JnXQorCitTaWduZWQtb2ZmLWJ5OiBCZW5qYW1pbiBFc3F1aXZlbCA8YmVuamFtaW4uZXNxdWl2ZWxAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHN5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvYXJtL2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvYXJtL2NvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvbWlwcy9jb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvbWlwcy9jb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvbmlvczIvY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvbmlvczIvY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlLmFjICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2NvbmZpZ3VyZSAgICB8IDggKysrKy0tLS0KKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUuYWMgfCA4ICsrKystLS0tCisgMTIgZmlsZXMgY2hhbmdlZCwgMjggaW5zZXJ0aW9ucygrKSwgMjggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlIGIvc3lzZGVwcy9hYXJjaDY0L2NvbmZpZ3VyZQoraW5kZXggNWJkMzU1YTY5MS4uM2JjNTUzN2JjMCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUKKysrKyBiL3N5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUKK0BAIC0xNDgsMTIgKzE0OCwxMiBAQCBlbHNlCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpZmRlZiBfX0FBUkNINjRFQl9fCistICAgICAgICAgICAgICAgICAgICAgIHllcworKyAgICAgICAgICAgICAgICAgICAgICBpc19hYXJjaDY0X2JlCisgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgCisgX0FDRU9GCisgaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisrICAkRUdSRVAgImlzX2FhcmNoNjRfYmUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgICBsaWJjX2N2X2FhcmNoNjRfYmU9eWVzCisgZWxzZQorICAgbGliY19jdl9hYXJjaDY0X2JlPW5vCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9hYXJjaDY0L2NvbmZpZ3VyZS5hYyBiL3N5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUuYWMKK2luZGV4IDc4NTFkZDRkYWMuLjZlOTIzODE3MWYgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlLmFjCisrKysgYi9zeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlLmFjCitAQCAtMTAsOCArMTAsOCBAQCBHTElCQ19QUk9WSURFUyBkbmwgU2VlIGFjbG9jYWwubTQgaW4gdGhlIHRvcCBsZXZlbCBzb3VyY2UgZGlyZWN0b3J5LgorICMgdGhlIGR5bmFtaWMgbGlua2VyIHZpYSAlaWZkZWYuCisgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBiaWcgZW5kaWFuXSwKKyAgIFtsaWJjX2N2X2FhcmNoNjRfYmVdLAorLSAgW0FDX0VHUkVQX0NQUCh5ZXMsWyNpZmRlZiBfX0FBUkNINjRFQl9fCistICAgICAgICAgICAgICAgICAgICAgIHllcworKyAgW0FDX0VHUkVQX0NQUChpc19hYXJjaDY0X2JlLFsjaWZkZWYgX19BQVJDSDY0RUJfXworKyAgICAgICAgICAgICAgICAgICAgICBpc19hYXJjaDY0X2JlCisgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICBdLCBsaWJjX2N2X2FhcmNoNjRfYmU9eWVzLCBsaWJjX2N2X2FhcmNoNjRfYmU9bm8pXSkKKyBpZiB0ZXN0ICRsaWJjX2N2X2FhcmNoNjRfYmUgPSB5ZXM7IHRoZW4KK2RpZmYgLS1naXQgYS9zeXNkZXBzL2FybS9jb25maWd1cmUgYi9zeXNkZXBzL2FybS9jb25maWd1cmUKK2luZGV4IDQzMWU4NDNiMmIuLmUxNTI0NjExMzggMTAwNjQ0CistLS0gYS9zeXNkZXBzL2FybS9jb25maWd1cmUKKysrKyBiL3N5c2RlcHMvYXJtL2NvbmZpZ3VyZQorQEAgLTE1MSwxMiArMTUxLDEyIEBAIGVsc2UKKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgI2lmZGVmIF9fQVJNX1BDU19WRlAKKy0JCSAgICAgIHllcworKwkJICAgICAgdXNlX2FybV9wY3NfdmZwCisgCQkgICAgICNlbmRpZgorIAorIF9BQ0VPRgorIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKy0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorKyAgJEVHUkVQICJ1c2VfYXJtX3Bjc192ZnAiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgICBsaWJjX2N2X2FybV9wY3NfdmZwPXllcworIGVsc2UKKyAgIGxpYmNfY3ZfYXJtX3Bjc192ZnA9bm8KK2RpZmYgLS1naXQgYS9zeXNkZXBzL2FybS9jb25maWd1cmUuYWMgYi9zeXNkZXBzL2FybS9jb25maWd1cmUuYWMKK2luZGV4IDkwY2RkNjljNzUuLjA1YTI2MmJhMDAgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2FybS9jb25maWd1cmUuYWMKKysrKyBiL3N5c2RlcHMvYXJtL2NvbmZpZ3VyZS5hYworQEAgLTE1LDggKzE1LDggQEAgQUNfREVGSU5FKFBJX1NUQVRJQ19BTkRfSElEREVOKQorICMgdGhlIGR5bmFtaWMgbGlua2VyIHZpYSAlaWZkZWYuCisgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIGNvbXBpbGVyIGlzIHVzaW5nIHRoZSBBUk0gaGFyZC1mbG9hdCBBQkldLAorICAgW2xpYmNfY3ZfYXJtX3Bjc192ZnBdLAorLSAgW0FDX0VHUkVQX0NQUCh5ZXMsWyNpZmRlZiBfX0FSTV9QQ1NfVkZQCistCQkgICAgICB5ZXMKKysgIFtBQ19FR1JFUF9DUFAodXNlX2FybV9wY3NfdmZwLFsjaWZkZWYgX19BUk1fUENTX1ZGUAorKwkJICAgICAgdXNlX2FybV9wY3NfdmZwCisgCQkgICAgICNlbmRpZgorICAgXSwgbGliY19jdl9hcm1fcGNzX3ZmcD15ZXMsIGxpYmNfY3ZfYXJtX3Bjc192ZnA9bm8pXSkKKyBpZiB0ZXN0ICRsaWJjX2N2X2FybV9wY3NfdmZwID0geWVzOyB0aGVuCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9taXBzL2NvbmZpZ3VyZSBiL3N5c2RlcHMvbWlwcy9jb25maWd1cmUKK2luZGV4IDRlMTMyNDhjMDMuLmYxNGFmOTUyZDAgMTAwNjQ0CistLS0gYS9zeXNkZXBzL21pcHMvY29uZmlndXJlCisrKysgYi9zeXNkZXBzL21pcHMvY29uZmlndXJlCitAQCAtMTQzLDExICsxNDMsMTEgQEAgZWxzZQorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyBkbmwKKyAjaWZkZWYgX19taXBzX25hbjIwMDgKKy15ZXMKKyt1c2VfbWlwc19uYW4yMDA4CisgI2VuZGlmCisgX0FDRU9GCisgaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisrICAkRUdSRVAgInVzZV9taXBzX25hbjIwMDgiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgICBsaWJjX2N2X21pcHNfbmFuMjAwOD15ZXMKKyBlbHNlCisgICBsaWJjX2N2X21pcHNfbmFuMjAwOD1ubworZGlmZiAtLWdpdCBhL3N5c2RlcHMvbWlwcy9jb25maWd1cmUuYWMgYi9zeXNkZXBzL21pcHMvY29uZmlndXJlLmFjCitpbmRleCBiY2JkYWZmZDlmLi5hZDMwNTdmNGNjIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9taXBzL2NvbmZpZ3VyZS5hYworKysrIGIvc3lzZGVwcy9taXBzL2NvbmZpZ3VyZS5hYworQEAgLTYsOSArNiw5IEBAIGRubCBwb3NpdGlvbiBpbmRlcGVuZGVudCB3YXkuCisgZG5sIEFDX0RFRklORShQSV9TVEFUSUNfQU5EX0hJRERFTikKKyAKKyBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgY29tcGlsZXIgaXMgdXNpbmcgdGhlIDIwMDggTmFOIGVuY29kaW5nXSwKKy0gIGxpYmNfY3ZfbWlwc19uYW4yMDA4LCBbQUNfRUdSRVBfQ1BQKHllcywgW2RubAorKyAgbGliY19jdl9taXBzX25hbjIwMDgsIFtBQ19FR1JFUF9DUFAodXNlX21pcHNfbmFuMjAwOCwgW2RubAorICNpZmRlZiBfX21pcHNfbmFuMjAwOAorLXllcworK3VzZV9taXBzX25hbjIwMDgKKyAjZW5kaWZdLCBsaWJjX2N2X21pcHNfbmFuMjAwOD15ZXMsIGxpYmNfY3ZfbWlwc19uYW4yMDA4PW5vKV0pCisgaWYgdGVzdCB4JGxpYmNfY3ZfbWlwc19uYW4yMDA4ID0geHllczsgdGhlbgorICAgQUNfREVGSU5FKEhBVkVfTUlQU19OQU4yMDA4KQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvbmlvczIvY29uZmlndXJlIGIvc3lzZGVwcy9uaW9zMi9jb25maWd1cmUKK2luZGV4IDE0YzhhM2EwMTQuLmRkZTM4MTRlZjIgMTAwNjQ0CistLS0gYS9zeXNkZXBzL25pb3MyL2NvbmZpZ3VyZQorKysrIGIvc3lzZGVwcy9uaW9zMi9jb25maWd1cmUKK0BAIC0xNDIsMTIgKzE0MiwxMiBAQCBlbHNlCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpZmRlZiBfX25pb3MyX2JpZ19lbmRpYW5fXworLSAgICAgICAgICAgICAgICAgICAgICB5ZXMKKysgICAgICAgICAgICAgICAgICAgICAgaXNfbmlvczJfYmUKKyAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAKKyBfQUNFT0YKKyBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKysgICRFR1JFUCAiaXNfbmlvczJfYmUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgICBsaWJjX2N2X25pb3MyX2JlPXllcworIGVsc2UKKyAgIGxpYmNfY3ZfbmlvczJfYmU9bm8KK2RpZmYgLS1naXQgYS9zeXNkZXBzL25pb3MyL2NvbmZpZ3VyZS5hYyBiL3N5c2RlcHMvbmlvczIvY29uZmlndXJlLmFjCitpbmRleCBmMDVmNDM4MDJiLi5kYzg2Mzk5MDJkIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9uaW9zMi9jb25maWd1cmUuYWMKKysrKyBiL3N5c2RlcHMvbmlvczIvY29uZmlndXJlLmFjCitAQCAtNCw4ICs0LDggQEAgR0xJQkNfUFJPVklERVMgZG5sIFNlZSBhY2xvY2FsLm00IGluIHRoZSB0b3AgbGV2ZWwgc291cmNlIGRpcmVjdG9yeS4KKyAjIE5pb3MgSUkgYmlnIGVuZGlhbiBpcyBub3QgeWV0IHN1cHBvcnRlZC4KKyBBQ19DQUNIRV9DSEVDSyhbZm9yIGJpZyBlbmRpYW5dLAorICAgW2xpYmNfY3ZfbmlvczJfYmVdLAorLSAgW0FDX0VHUkVQX0NQUCh5ZXMsWyNpZmRlZiBfX25pb3MyX2JpZ19lbmRpYW5fXworLSAgICAgICAgICAgICAgICAgICAgICB5ZXMKKysgIFtBQ19FR1JFUF9DUFAoaXNfbmlvczJfYmUsWyNpZmRlZiBfX25pb3MyX2JpZ19lbmRpYW5fXworKyAgICAgICAgICAgICAgICAgICAgICBpc19uaW9zMl9iZQorICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgXSwgbGliY19jdl9uaW9zMl9iZT15ZXMsIGxpYmNfY3ZfbmlvczJfYmU9bm8pXSkKKyBpZiB0ZXN0ICRsaWJjX2N2X25pb3MyX2JlID0geWVzOyB0aGVuCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZQoraW5kZXggYTU1MTNmYWQ0OC4uMjgzYjI5M2ZmMyAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZQorQEAgLTQxNCwxMSArNDE0LDExIEBAIGVsc2UKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgZG5sCisgI2lmZGVmIF9fbWlwc19uYW4yMDA4CisteWVzCisrdXNlX21pcHNfbmFuMjAwOAorICNlbmRpZgorIF9BQ0VPRgorIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKy0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorKyAgJEVHUkVQICJ1c2VfbWlwc19uYW4yMDA4IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICAgbGliY19jdl9taXBzX25hbjIwMDg9eWVzCisgZWxzZQorICAgbGliY19jdl9taXBzX25hbjIwMDg9bm8KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZS5hYyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlLmFjCitpbmRleCA5MTQ3YWE0NTgyLi43ODk4ZTI0NzM4IDEwMDY0NAorLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUuYWMKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlLmFjCitAQCAtMTA1LDkgKzEwNSw5IEBAIEFDX0NPTVBJTEVfSUZFTFNFKAorIExJQkNfQ09ORklHX1ZBUihbbWlwcy1tb2RlLXN3aXRjaF0sWyR7bGliY19taXBzX21vZGVfc3dpdGNofV0pCisgCisgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIGNvbXBpbGVyIGlzIHVzaW5nIHRoZSAyMDA4IE5hTiBlbmNvZGluZ10sCistICBsaWJjX2N2X21pcHNfbmFuMjAwOCwgW0FDX0VHUkVQX0NQUCh5ZXMsIFtkbmwKKysgIGxpYmNfY3ZfbWlwc19uYW4yMDA4LCBbQUNfRUdSRVBfQ1BQKHVzZV9taXBzX25hbjIwMDgsIFtkbmwKKyAjaWZkZWYgX19taXBzX25hbjIwMDgKKy15ZXMKKyt1c2VfbWlwc19uYW4yMDA4CisgI2VuZGlmXSwgbGliY19jdl9taXBzX25hbjIwMDg9eWVzLCBsaWJjX2N2X21pcHNfbmFuMjAwOD1ubyldKQorIAorIGxpYmNfbWlwc19uYW49CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlCitpbmRleCA0ZTdmY2YxZDk3Li40NGE5Y2IzNzkxIDEwMDY0NAorLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUKK0BAIC0xNTUsMTIgKzE1NSwxMiBAQCBlbHNlCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpZiBfQ0FMTF9FTEYgPT0gMgorLSAgICAgICAgICAgICAgICAgICAgICB5ZXMKKysgICAgICAgICAgICAgICAgICAgICAgdXNlX3BwY19lbGZ2Ml9hYmkKKyAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAKKyBfQUNFT0YKKyBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKysgICRFR1JFUCAidXNlX3BwY19lbGZ2Ml9hYmkiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgICBsaWJjX2N2X3BwYzY0X2VsZnYyX2FiaT15ZXMKKyBlbHNlCisgICBsaWJjX2N2X3BwYzY0X2VsZnYyX2FiaT1ubworQEAgLTE4OCwxMiArMTg4LDEyIEBAIGVsc2UKKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgI2lmZGVmIF9DQUxMX0VMRgorLSAgICAgICAgICAgICAgICAgICAgICAgICB5ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZGVmX2NhbGxfZWxmCisgICAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAKKyBfQUNFT0YKKyBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKysgICRFR1JFUCAiaXNfZGVmX2NhbGxfZWxmIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICAgbGliY19jdl9wcGM2NF9kZWZfY2FsbF9lbGY9eWVzCisgZWxzZQorICAgbGliY19jdl9wcGM2NF9kZWZfY2FsbF9lbGY9bm8KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUuYWMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUuYWMKK2luZGV4IGY5Y2JhNmUxNWQuLmIyMWY3MmYxZTQgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUuYWMKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2NvbmZpZ3VyZS5hYworQEAgLTYsOCArNiw4IEBAIExJQkNfU0xJQkRJUl9SVExERElSKFtsaWI2NF0sIFtsaWI2NF0pCisgIyBEZWZpbmUgZGVmYXVsdC1hYmkgYWNjb3JkaW5nIHRvIGNvbXBpbGVyIGZsYWdzLgorIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBjb21waWxlciBpcyB1c2luZyB0aGUgUG93ZXJQQzY0IEVMRnYyIEFCSV0sCisgICBbbGliY19jdl9wcGM2NF9lbGZ2Ml9hYmldLAorLSAgW0FDX0VHUkVQX0NQUCh5ZXMsWyNpZiBfQ0FMTF9FTEYgPT0gMgorLSAgICAgICAgICAgICAgICAgICAgICB5ZXMKKysgIFtBQ19FR1JFUF9DUFAodXNlX3BwY19lbGZ2Ml9hYmksWyNpZiBfQ0FMTF9FTEYgPT0gMgorKyAgICAgICAgICAgICAgICAgICAgICB1c2VfcHBjX2VsZnYyX2FiaQorICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgXSwgbGliY19jdl9wcGM2NF9lbGZ2Ml9hYmk9eWVzLCBsaWJjX2N2X3BwYzY0X2VsZnYyX2FiaT1ubyldKQorIGlmIHRlc3QgJGxpYmNfY3ZfcHBjNjRfZWxmdjJfYWJpID0geWVzOyB0aGVuCitAQCAtMTksOCArMTksOCBAQCBlbHNlCisgICAjIENvbXBpbGVyIHRoYXQgZG8gbm90IHN1cHBvcnQgRUxGdjIgQUJJIGRvZXMgbm90IGRlZmluZSBfQ0FMTF9FTEYKKyAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBjb21waWxlciBkZWZpbmVzIF9DQUxMX0VMRl0sCisgICAgIFtsaWJjX2N2X3BwYzY0X2RlZl9jYWxsX2VsZl0sCistICAgIFtBQ19FR1JFUF9DUFAoeWVzLFsjaWZkZWYgX0NBTExfRUxGCistICAgICAgICAgICAgICAgICAgICAgICAgIHllcworKyAgICBbQUNfRUdSRVBfQ1BQKGlzX2RlZl9jYWxsX2VsZixbI2lmZGVmIF9DQUxMX0VMRgorKyAgICAgICAgICAgICAgICAgICAgICAgICBpc19kZWZfY2FsbF9lbGYKKyAgICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgICBdLCBsaWJjX2N2X3BwYzY0X2RlZl9jYWxsX2VsZj15ZXMsIGxpYmNfY3ZfcHBjNjRfZGVmX2NhbGxfZWxmPW5vKV0pCisgICBpZiB0ZXN0ICRsaWJjX2N2X3BwYzY0X2RlZl9jYWxsX2VsZiA9IG5vOyB0aGVuCistLSAKKzIuMTMuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNS10aW1lem9uZS1yZS13cml0dGVuLXR6c2VsZWN0LWFzLXBvc2l4LXNoLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTUtdGltZXpvbmUtcmUtd3JpdHRlbi10enNlbGVjdC1hcy1wb3NpeC1zaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWZlZmZhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTUtdGltZXpvbmUtcmUtd3JpdHRlbi10enNlbGVjdC1hcy1wb3NpeC1zaC5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIGI4Y2I4Y2IyNDJjYjc1MWQ4ODhmZWIxYWRhNWM0ZDBmMDVjYmMxZDcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDozMzowMyArMDAwMAorU3ViamVjdDogW1BBVENIIDE1LzI1XSB0aW1lem9uZTogcmUtd3JpdHRlbiB0enNlbGVjdCBhcyBwb3NpeCBzaAorCitUbyBhdm9pZCB0aGUgYmFzaCBkZXBlbmRlbmN5LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHRpbWV6b25lL01ha2VmaWxlICAgICB8IDIgKy0KKyB0aW1lem9uZS90enNlbGVjdC5rc2ggfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90aW1lem9uZS9NYWtlZmlsZSBiL3RpbWV6b25lL01ha2VmaWxlCitpbmRleCBkNmNjN2JhMzU3Li5lNGVhZDZlMWE3IDEwMDY0NAorLS0tIGEvdGltZXpvbmUvTWFrZWZpbGUKKysrKyBiL3RpbWV6b25lL01ha2VmaWxlCitAQCAtMTIyLDcgKzEyMiw3IEBAICQodGVzdGRhdGEpL1hUJTogdGVzdGRhdGEvWFQlCisgCWNwICQ8ICRACisgCisgJChvYmpwZngpdHpzZWxlY3Q6IHR6c2VsZWN0LmtzaCAkKGNvbW1vbi1vYmpwZngpY29uZmlnLm1ha2UKKy0Jc2VkIC1lICdzfC9iaW4vYmFzaHwkKEJBU0gpfCcgXAorKwlzZWQgLWUgJ3N8L2Jpbi9iYXNofC9iaW4vc2h8JyBcCisgCSAgICAtZSAnc3xUWkRJUj1bXn1dKnxUWkRJUj0kKHpvbmVkaXIpfCcgXAorIAkgICAgLWUgJy9UWlZFUlNJT049L3N8c2VlX01ha2VmaWxlfCIkKHZlcnNpb24pInwnIFwKKyAJICAgIC1lICcvUEtHVkVSU0lPTj0vc3w9Lip8PSIkKFBLR1ZFUlNJT04pInwnIFwKK2RpZmYgLS1naXQgYS90aW1lem9uZS90enNlbGVjdC5rc2ggYi90aW1lem9uZS90enNlbGVjdC5rc2gKK2luZGV4IGQyYzNhNmQxZGQuLjA4OTY3OWYzMDYgMTAwNzU1CistLS0gYS90aW1lem9uZS90enNlbGVjdC5rc2gKKysrKyBiL3RpbWV6b25lL3R6c2VsZWN0LmtzaAorQEAgLTM1LDcgKzM1LDcgQEAgUkVQT1JUX0JVR1NfVE89dHpAaWFuYS5vcmcKKyAKKyAjIFNwZWNpZnkgZGVmYXVsdCB2YWx1ZXMgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcyBpZiB0aGV5IGFyZSB1bnNldC4KKyA6ICR7QVdLPWF3a30KKy06ICR7VFpESVI9YHB3ZGB9CisrOiAke1RaRElSPSQocHdkKX0KKyAKKyAjIE91dHB1dCBvbmUgYXJndW1lbnQgYXMtaXMgdG8gc3RhbmRhcmQgb3V0cHV0LgorICMgU2FmZXIgdGhhbiAnZWNobycsIHdoaWNoIGNhbiBtaXNoYW5kbGUgJ1wnIG9yIGxlYWRpbmcgJy0nLgorLS0gCisyLjEzLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTUteWVzLXdpdGhpbi10aGUtcGF0aC1zZXRzLXdyb25nLWNvbmZpZy12YXJpYWJsZXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNS15ZXMtd2l0aGluLXRoZS1wYXRoLXNldHMtd3JvbmctY29uZmlnLXZhcmlhYmxlcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThkNDI1YS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNS15ZXMtd2l0aGluLXRoZS1wYXRoLXNldHMtd3JvbmctY29uZmlnLXZhcmlhYmxlcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI2MyArMCwwIEBACi1Gcm9tIDE4ZDY0OTUxY2JiNjhkOGQ3NWU4ZWYzNDdjYmQwZTBhNWMxNDYwNGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDozMTowNiArMDAwMAotU3ViamVjdDogW1BBVENIIDE1LzI2XSAneWVzJyB3aXRoaW4gdGhlIHBhdGggc2V0cyB3cm9uZyBjb25maWcgdmFyaWFibGVzCi0KLUl0IHNlZW1zIHRoYXQgdGhlICdBQ19FR1JFUF9DUFAoeWVzLi4uJyBleGFtcGxlIGlzIHF1aXRlIHBvcHVsYXIKLWJ1dCBiZWluZyBzdWNoIGEgc2hvcnQgd29yZCB0byBncmVwIGl0IGlzIGxpa2VseSB0byBwcm9kdWNlCi1mYWxzZS1wb3NpdGl2ZSBtYXRjaGVzIHdpdGggdGhlIHBhdGggaXQgaXMgY29uZmlndXJlZCBpbnRvLgotCi1UaGUgY2hhbmdlIGlzIHRvIHVzZSBhIG1vcmUgZWxhYm9yYXRlZCBzdHJpbmcgdG8gZ3JlcCBmb3IuCi0KLVVwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtsaWJjLWFscGhhQHNvdXJjZXdhcmUub3JnXQotCi1TaWduZWQtb2ZmLWJ5OiBCZW5qYW1pbiBFc3F1aXZlbCA8YmVuamFtaW4uZXNxdWl2ZWxAbGludXguaW50ZWwuY29tPgotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotIHN5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQotIHN5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQotIHN5c2RlcHMvYXJtL2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQotIHN5c2RlcHMvYXJtL2NvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQotIHN5c2RlcHMvbWlwcy9jb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQotIHN5c2RlcHMvbWlwcy9jb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQotIHN5c2RlcHMvbmlvczIvY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQotIHN5c2RlcHMvbmlvczIvY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQotIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlICAgICAgICAgICAgICAgICB8IDQgKystLQotIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlLmFjICAgICAgICAgICAgICB8IDQgKystLQotIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2NvbmZpZ3VyZSAgICB8IDggKysrKy0tLS0KLSBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUuYWMgfCA4ICsrKystLS0tCi0gMTIgZmlsZXMgY2hhbmdlZCwgMjggaW5zZXJ0aW9ucygrKSwgMjggZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9zeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlIGIvc3lzZGVwcy9hYXJjaDY0L2NvbmZpZ3VyZQotaW5kZXggNWJkMzU1YS4uM2JjNTUzNyAxMDA2NDQKLS0tLSBhL3N5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUKLSsrKyBiL3N5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUKLUBAIC0xNDgsMTIgKzE0OCwxMiBAQCBlbHNlCi0gICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0gLyogZW5kIGNvbmZkZWZzLmguICAqLwotICNpZmRlZiBfX0FBUkNINjRFQl9fCi0tICAgICAgICAgICAgICAgICAgICAgIHllcwotKyAgICAgICAgICAgICAgICAgICAgICBpc19hYXJjaDY0X2JlCi0gICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCi0gCi0gX0FDRU9GCi0gaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0rICAkRUdSRVAgImlzX2FhcmNoNjRfYmUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0gICBsaWJjX2N2X2FhcmNoNjRfYmU9eWVzCi0gZWxzZQotICAgbGliY19jdl9hYXJjaDY0X2JlPW5vCi1kaWZmIC0tZ2l0IGEvc3lzZGVwcy9hYXJjaDY0L2NvbmZpZ3VyZS5hYyBiL3N5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUuYWMKLWluZGV4IDc4NTFkZDQuLjZlOTIzODEgMTAwNjQ0Ci0tLS0gYS9zeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlLmFjCi0rKysgYi9zeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlLmFjCi1AQCAtMTAsOCArMTAsOCBAQCBHTElCQ19QUk9WSURFUyBkbmwgU2VlIGFjbG9jYWwubTQgaW4gdGhlIHRvcCBsZXZlbCBzb3VyY2UgZGlyZWN0b3J5LgotICMgdGhlIGR5bmFtaWMgbGlua2VyIHZpYSAlaWZkZWYuCi0gQUNfQ0FDSEVfQ0hFQ0soW2ZvciBiaWcgZW5kaWFuXSwKLSAgIFtsaWJjX2N2X2FhcmNoNjRfYmVdLAotLSAgW0FDX0VHUkVQX0NQUCh5ZXMsWyNpZmRlZiBfX0FBUkNINjRFQl9fCi0tICAgICAgICAgICAgICAgICAgICAgIHllcwotKyAgW0FDX0VHUkVQX0NQUChpc19hYXJjaDY0X2JlLFsjaWZkZWYgX19BQVJDSDY0RUJfXwotKyAgICAgICAgICAgICAgICAgICAgICBpc19hYXJjaDY0X2JlCi0gICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCi0gICBdLCBsaWJjX2N2X2FhcmNoNjRfYmU9eWVzLCBsaWJjX2N2X2FhcmNoNjRfYmU9bm8pXSkKLSBpZiB0ZXN0ICRsaWJjX2N2X2FhcmNoNjRfYmUgPSB5ZXM7IHRoZW4KLWRpZmYgLS1naXQgYS9zeXNkZXBzL2FybS9jb25maWd1cmUgYi9zeXNkZXBzL2FybS9jb25maWd1cmUKLWluZGV4IDQzMWU4NDMuLmUxNTI0NjEgMTAwNjQ0Ci0tLS0gYS9zeXNkZXBzL2FybS9jb25maWd1cmUKLSsrKyBiL3N5c2RlcHMvYXJtL2NvbmZpZ3VyZQotQEAgLTE1MSwxMiArMTUxLDEyIEBAIGVsc2UKLSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLSAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0gI2lmZGVmIF9fQVJNX1BDU19WRlAKLS0JCSAgICAgIHllcwotKwkJICAgICAgdXNlX2FybV9wY3NfdmZwCi0gCQkgICAgICNlbmRpZgotIAotIF9BQ0VPRgotIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLS0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotKyAgJEVHUkVQICJ1c2VfYXJtX3Bjc192ZnAiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0gICBsaWJjX2N2X2FybV9wY3NfdmZwPXllcwotIGVsc2UKLSAgIGxpYmNfY3ZfYXJtX3Bjc192ZnA9bm8KLWRpZmYgLS1naXQgYS9zeXNkZXBzL2FybS9jb25maWd1cmUuYWMgYi9zeXNkZXBzL2FybS9jb25maWd1cmUuYWMKLWluZGV4IDkwY2RkNjkuLjA1YTI2MmIgMTAwNjQ0Ci0tLS0gYS9zeXNkZXBzL2FybS9jb25maWd1cmUuYWMKLSsrKyBiL3N5c2RlcHMvYXJtL2NvbmZpZ3VyZS5hYwotQEAgLTE1LDggKzE1LDggQEAgQUNfREVGSU5FKFBJX1NUQVRJQ19BTkRfSElEREVOKQotICMgdGhlIGR5bmFtaWMgbGlua2VyIHZpYSAlaWZkZWYuCi0gQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIGNvbXBpbGVyIGlzIHVzaW5nIHRoZSBBUk0gaGFyZC1mbG9hdCBBQkldLAotICAgW2xpYmNfY3ZfYXJtX3Bjc192ZnBdLAotLSAgW0FDX0VHUkVQX0NQUCh5ZXMsWyNpZmRlZiBfX0FSTV9QQ1NfVkZQCi0tCQkgICAgICB5ZXMKLSsgIFtBQ19FR1JFUF9DUFAodXNlX2FybV9wY3NfdmZwLFsjaWZkZWYgX19BUk1fUENTX1ZGUAotKwkJICAgICAgdXNlX2FybV9wY3NfdmZwCi0gCQkgICAgICNlbmRpZgotICAgXSwgbGliY19jdl9hcm1fcGNzX3ZmcD15ZXMsIGxpYmNfY3ZfYXJtX3Bjc192ZnA9bm8pXSkKLSBpZiB0ZXN0ICRsaWJjX2N2X2FybV9wY3NfdmZwID0geWVzOyB0aGVuCi1kaWZmIC0tZ2l0IGEvc3lzZGVwcy9taXBzL2NvbmZpZ3VyZSBiL3N5c2RlcHMvbWlwcy9jb25maWd1cmUKLWluZGV4IDRlMTMyNDguLmYxNGFmOTUgMTAwNjQ0Ci0tLS0gYS9zeXNkZXBzL21pcHMvY29uZmlndXJlCi0rKysgYi9zeXNkZXBzL21pcHMvY29uZmlndXJlCi1AQCAtMTQzLDExICsxNDMsMTEgQEAgZWxzZQotIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSBkbmwKLSAjaWZkZWYgX19taXBzX25hbjIwMDgKLS15ZXMKLSt1c2VfbWlwc19uYW4yMDA4Ci0gI2VuZGlmCi0gX0FDRU9GCi0gaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0rICAkRUdSRVAgInVzZV9taXBzX25hbjIwMDgiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0gICBsaWJjX2N2X21pcHNfbmFuMjAwOD15ZXMKLSBlbHNlCi0gICBsaWJjX2N2X21pcHNfbmFuMjAwOD1ubwotZGlmZiAtLWdpdCBhL3N5c2RlcHMvbWlwcy9jb25maWd1cmUuYWMgYi9zeXNkZXBzL21pcHMvY29uZmlndXJlLmFjCi1pbmRleCBiY2JkYWZmLi5hZDMwNTdmIDEwMDY0NAotLS0tIGEvc3lzZGVwcy9taXBzL2NvbmZpZ3VyZS5hYwotKysrIGIvc3lzZGVwcy9taXBzL2NvbmZpZ3VyZS5hYwotQEAgLTYsOSArNiw5IEBAIGRubCBwb3NpdGlvbiBpbmRlcGVuZGVudCB3YXkuCi0gZG5sIEFDX0RFRklORShQSV9TVEFUSUNfQU5EX0hJRERFTikKLSAKLSBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgY29tcGlsZXIgaXMgdXNpbmcgdGhlIDIwMDggTmFOIGVuY29kaW5nXSwKLS0gIGxpYmNfY3ZfbWlwc19uYW4yMDA4LCBbQUNfRUdSRVBfQ1BQKHllcywgW2RubAotKyAgbGliY19jdl9taXBzX25hbjIwMDgsIFtBQ19FR1JFUF9DUFAodXNlX21pcHNfbmFuMjAwOCwgW2RubAotICNpZmRlZiBfX21pcHNfbmFuMjAwOAotLXllcwotK3VzZV9taXBzX25hbjIwMDgKLSAjZW5kaWZdLCBsaWJjX2N2X21pcHNfbmFuMjAwOD15ZXMsIGxpYmNfY3ZfbWlwc19uYW4yMDA4PW5vKV0pCi0gaWYgdGVzdCB4JGxpYmNfY3ZfbWlwc19uYW4yMDA4ID0geHllczsgdGhlbgotICAgQUNfREVGSU5FKEhBVkVfTUlQU19OQU4yMDA4KQotZGlmZiAtLWdpdCBhL3N5c2RlcHMvbmlvczIvY29uZmlndXJlIGIvc3lzZGVwcy9uaW9zMi9jb25maWd1cmUKLWluZGV4IDE0YzhhM2EuLmRkZTM4MTQgMTAwNjQ0Ci0tLS0gYS9zeXNkZXBzL25pb3MyL2NvbmZpZ3VyZQotKysrIGIvc3lzZGVwcy9uaW9zMi9jb25maWd1cmUKLUBAIC0xNDIsMTIgKzE0MiwxMiBAQCBlbHNlCi0gICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0gLyogZW5kIGNvbmZkZWZzLmguICAqLwotICNpZmRlZiBfX25pb3MyX2JpZ19lbmRpYW5fXwotLSAgICAgICAgICAgICAgICAgICAgICB5ZXMKLSsgICAgICAgICAgICAgICAgICAgICAgaXNfbmlvczJfYmUKLSAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKLSAKLSBfQUNFT0YKLSBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0tICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKLSsgICRFR1JFUCAiaXNfbmlvczJfYmUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0gICBsaWJjX2N2X25pb3MyX2JlPXllcwotIGVsc2UKLSAgIGxpYmNfY3ZfbmlvczJfYmU9bm8KLWRpZmYgLS1naXQgYS9zeXNkZXBzL25pb3MyL2NvbmZpZ3VyZS5hYyBiL3N5c2RlcHMvbmlvczIvY29uZmlndXJlLmFjCi1pbmRleCBmMDVmNDM4Li5kYzg2Mzk5IDEwMDY0NAotLS0tIGEvc3lzZGVwcy9uaW9zMi9jb25maWd1cmUuYWMKLSsrKyBiL3N5c2RlcHMvbmlvczIvY29uZmlndXJlLmFjCi1AQCAtNCw4ICs0LDggQEAgR0xJQkNfUFJPVklERVMgZG5sIFNlZSBhY2xvY2FsLm00IGluIHRoZSB0b3AgbGV2ZWwgc291cmNlIGRpcmVjdG9yeS4KLSAjIE5pb3MgSUkgYmlnIGVuZGlhbiBpcyBub3QgeWV0IHN1cHBvcnRlZC4KLSBBQ19DQUNIRV9DSEVDSyhbZm9yIGJpZyBlbmRpYW5dLAotICAgW2xpYmNfY3ZfbmlvczJfYmVdLAotLSAgW0FDX0VHUkVQX0NQUCh5ZXMsWyNpZmRlZiBfX25pb3MyX2JpZ19lbmRpYW5fXwotLSAgICAgICAgICAgICAgICAgICAgICB5ZXMKLSsgIFtBQ19FR1JFUF9DUFAoaXNfbmlvczJfYmUsWyNpZmRlZiBfX25pb3MyX2JpZ19lbmRpYW5fXwotKyAgICAgICAgICAgICAgICAgICAgICBpc19uaW9zMl9iZQotICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgotICAgXSwgbGliY19jdl9uaW9zMl9iZT15ZXMsIGxpYmNfY3ZfbmlvczJfYmU9bm8pXSkKLSBpZiB0ZXN0ICRsaWJjX2N2X25pb3MyX2JlID0geWVzOyB0aGVuCi1kaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZQotaW5kZXggYTU1MTNmYS4uMjgzYjI5MyAxMDA2NDQKLS0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlCi0rKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZQotQEAgLTQxNCwxMSArNDE0LDExIEBAIGVsc2UKLSAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0gZG5sCi0gI2lmZGVmIF9fbWlwc19uYW4yMDA4Ci0teWVzCi0rdXNlX21pcHNfbmFuMjAwOAotICNlbmRpZgotIF9BQ0VPRgotIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLS0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotKyAgJEVHUkVQICJ1c2VfbWlwc19uYW4yMDA4IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotICAgbGliY19jdl9taXBzX25hbjIwMDg9eWVzCi0gZWxzZQotICAgbGliY19jdl9taXBzX25hbjIwMDg9bm8KLWRpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZS5hYyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlLmFjCi1pbmRleCA5MTQ3YWE0Li43ODk4ZTI0IDEwMDY0NAotLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUuYWMKLSsrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlLmFjCi1AQCAtMTA1LDkgKzEwNSw5IEBAIEFDX0NPTVBJTEVfSUZFTFNFKAotIExJQkNfQ09ORklHX1ZBUihbbWlwcy1tb2RlLXN3aXRjaF0sWyR7bGliY19taXBzX21vZGVfc3dpdGNofV0pCi0gCi0gQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIGNvbXBpbGVyIGlzIHVzaW5nIHRoZSAyMDA4IE5hTiBlbmNvZGluZ10sCi0tICBsaWJjX2N2X21pcHNfbmFuMjAwOCwgW0FDX0VHUkVQX0NQUCh5ZXMsIFtkbmwKLSsgIGxpYmNfY3ZfbWlwc19uYW4yMDA4LCBbQUNfRUdSRVBfQ1BQKHVzZV9taXBzX25hbjIwMDgsIFtkbmwKLSAjaWZkZWYgX19taXBzX25hbjIwMDgKLS15ZXMKLSt1c2VfbWlwc19uYW4yMDA4Ci0gI2VuZGlmXSwgbGliY19jdl9taXBzX25hbjIwMDg9eWVzLCBsaWJjX2N2X21pcHNfbmFuMjAwOD1ubyldKQotIAotIGxpYmNfbWlwc19uYW49Ci1kaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlCi1pbmRleCBhZjA2OTcwLi4yN2I4YzFiIDEwMDY0NAotLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlCi0rKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUKLUBAIC0xNTUsMTIgKzE1NSwxMiBAQCBlbHNlCi0gICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0gLyogZW5kIGNvbmZkZWZzLmguICAqLwotICNpZiBfQ0FMTF9FTEYgPT0gMgotLSAgICAgICAgICAgICAgICAgICAgICB5ZXMKLSsgICAgICAgICAgICAgICAgICAgICAgdXNlX3BwY19lbGZ2Ml9hYmkKLSAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKLSAKLSBfQUNFT0YKLSBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0tICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKLSsgICRFR1JFUCAidXNlX3BwY19lbGZ2Ml9hYmkiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0gICBsaWJjX2N2X3BwYzY0X2VsZnYyX2FiaT15ZXMKLSBlbHNlCi0gICBsaWJjX2N2X3BwYzY0X2VsZnYyX2FiaT1ubwotQEAgLTE4OCwxMiArMTg4LDEyIEBAIGVsc2UKLSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLSAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0gI2lmZGVmIF9DQUxMX0VMRgotLSAgICAgICAgICAgICAgICAgICAgICAgICB5ZXMKLSsgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZGVmX2NhbGxfZWxmCi0gICAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKLSAKLSBfQUNFT0YKLSBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0tICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKLSsgICRFR1JFUCAiaXNfZGVmX2NhbGxfZWxmIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotICAgbGliY19jdl9wcGM2NF9kZWZfY2FsbF9lbGY9eWVzCi0gZWxzZQotICAgbGliY19jdl9wcGM2NF9kZWZfY2FsbF9lbGY9bm8KLWRpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUuYWMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUuYWMKLWluZGV4IDA4MjI5MTUuLjlhMzJmZGQgMTAwNjQ0Ci0tLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUuYWMKLSsrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2NvbmZpZ3VyZS5hYwotQEAgLTYsOCArNiw4IEBAIExJQkNfU0xJQkRJUl9SVExERElSKFtsaWI2NF0sIFtsaWI2NF0pCi0gIyBEZWZpbmUgZGVmYXVsdC1hYmkgYWNjb3JkaW5nIHRvIGNvbXBpbGVyIGZsYWdzLgotIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBjb21waWxlciBpcyB1c2luZyB0aGUgUG93ZXJQQzY0IEVMRnYyIEFCSV0sCi0gICBbbGliY19jdl9wcGM2NF9lbGZ2Ml9hYmldLAotLSAgW0FDX0VHUkVQX0NQUCh5ZXMsWyNpZiBfQ0FMTF9FTEYgPT0gMgotLSAgICAgICAgICAgICAgICAgICAgICB5ZXMKLSsgIFtBQ19FR1JFUF9DUFAodXNlX3BwY19lbGZ2Ml9hYmksWyNpZiBfQ0FMTF9FTEYgPT0gMgotKyAgICAgICAgICAgICAgICAgICAgICB1c2VfcHBjX2VsZnYyX2FiaQotICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgotICAgXSwgbGliY19jdl9wcGM2NF9lbGZ2Ml9hYmk9eWVzLCBsaWJjX2N2X3BwYzY0X2VsZnYyX2FiaT1ubyldKQotIGlmIHRlc3QgJGxpYmNfY3ZfcHBjNjRfZWxmdjJfYWJpID0geWVzOyB0aGVuCi1AQCAtMTksOCArMTksOCBAQCBlbHNlCi0gICAjIENvbXBpbGVyIHRoYXQgZG8gbm90IHN1cHBvcnQgRUxGdjIgQUJJIGRvZXMgbm90IGRlZmluZSBfQ0FMTF9FTEYKLSAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBjb21waWxlciBkZWZpbmVzIF9DQUxMX0VMRl0sCi0gICAgIFtsaWJjX2N2X3BwYzY0X2RlZl9jYWxsX2VsZl0sCi0tICAgIFtBQ19FR1JFUF9DUFAoeWVzLFsjaWZkZWYgX0NBTExfRUxGCi0tICAgICAgICAgICAgICAgICAgICAgICAgIHllcwotKyAgICBbQUNfRUdSRVBfQ1BQKGlzX2RlZl9jYWxsX2VsZixbI2lmZGVmIF9DQUxMX0VMRgotKyAgICAgICAgICAgICAgICAgICAgICAgICBpc19kZWZfY2FsbF9lbGYKLSAgICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgotICAgICBdLCBsaWJjX2N2X3BwYzY0X2RlZl9jYWxsX2VsZj15ZXMsIGxpYmNfY3ZfcHBjNjRfZGVmX2NhbGxfZWxmPW5vKV0pCi0gICBpZiB0ZXN0ICRsaWJjX2N2X3BwYzY0X2RlZl9jYWxsX2VsZiA9IG5vOyB0aGVuCi0tLSAKLTIuMTAuMgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNi1SZW1vdmUtYmFzaC1kZXBlbmRlbmN5LWZvci1uc2NkLWluaXQtc2NyaXB0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTYtUmVtb3ZlLWJhc2gtZGVwZW5kZW5jeS1mb3ItbnNjZC1pbml0LXNjcmlwdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDk5ODNiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTYtUmVtb3ZlLWJhc2gtZGVwZW5kZW5jeS1mb3ItbnNjZC1pbml0LXNjcmlwdC5wYXRjaApAQCAtMCwwICsxLDc1IEBACitGcm9tIDY5ZDM3ODAwMWFkZmU5YTM1OWQyZjRiMDY5YzFlZDJkMzZkZTQ0ODAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVGh1LCAzMSBEZWMgMjAxNSAxNDozMzowMiAtMDgwMAorU3ViamVjdDogW1BBVENIIDE2LzI1XSBSZW1vdmUgYmFzaCBkZXBlbmRlbmN5IGZvciBuc2NkIGluaXQgc2NyaXB0CisKK1RoZSBuc2NkIGluaXQgc2NyaXB0IHVzZXMgIyEgL2Jpbi9iYXNoIGJ1dCBvbmx5IHJlYWxseSB1c2VzIG9uZSBiYXNoaXNtCisodHJhbnNsYXRlZCBzdHJpbmdzKSwgc28gcmVtb3ZlIHRoZW0gYW5kIHN3aXRjaCB0aGUgc2hlbGwgdG8gIyEvYmluL3NoLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBuc2NkL25zY2QuaW5pdCB8IDE0ICsrKysrKystLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL25zY2QvbnNjZC5pbml0IGIvbnNjZC9uc2NkLmluaXQKK2luZGV4IGE4ODJkYTdkOGIuLmIwMjk4NmVjMTUgMTAwNjQ0CistLS0gYS9uc2NkL25zY2QuaW5pdAorKysrIGIvbnNjZC9uc2NkLmluaXQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgIworICMgbnNjZDoJCVN0YXJ0cyB0aGUgTmFtZSBTd2l0Y2ggQ2FjaGUgRGFlbW9uCisgIworQEAgLTQ5LDcgKzQ5LDcgQEAgcHJvZz1uc2NkCisgc3RhcnQgKCkgeworICAgICBbIC1kIC92YXIvcnVuL25zY2QgXSB8fCBta2RpciAvdmFyL3J1bi9uc2NkCisgICAgIFsgLWQgL3Zhci9kYi9uc2NkIF0gfHwgbWtkaXIgL3Zhci9kYi9uc2NkCistICAgIGVjaG8gLW4gJCJTdGFydGluZyAkcHJvZzogIgorKyAgICBlY2hvIC1uICJTdGFydGluZyAkcHJvZzogIgorICAgICBkYWVtb24gL3Vzci9zYmluL25zY2QKKyAgICAgUkVUVkFMPSQ/CisgICAgIGVjaG8KK0BAIC01OCw3ICs1OCw3IEBAIHN0YXJ0ICgpIHsKKyB9CisgCisgc3RvcCAoKSB7CistICAgIGVjaG8gLW4gJCJTdG9wcGluZyAkcHJvZzogIgorKyAgICBlY2hvIC1uICJTdG9wcGluZyAkcHJvZzogIgorICAgICAvdXNyL3NiaW4vbnNjZCAtSworICAgICBSRVRWQUw9JD8KKyAgICAgaWYgWyAkUkVUVkFMIC1lcSAwIF07IHRoZW4KK0BAIC02Nyw5ICs2Nyw5IEBAIHN0b3AgKCkgeworIAkjIGEgbm9uLXByaXZpbGVnZWQgdXNlcgorIAlybSAtZiAvdmFyL3J1bi9uc2NkL25zY2QucGlkCisgCXJtIC1mIC92YXIvcnVuL25zY2Qvc29ja2V0CistICAgICAgIAlzdWNjZXNzICQiJHByb2cgc2h1dGRvd24iCisrCXN1Y2Nlc3MgIiRwcm9nIHNodXRkb3duIgorICAgICBlbHNlCistICAgICAgIAlmYWlsdXJlICQiJHByb2cgc2h1dGRvd24iCisrCWZhaWx1cmUgIiRwcm9nIHNodXRkb3duIgorICAgICBmaQorICAgICBlY2hvCisgICAgIHJldHVybiAkUkVUVkFMCitAQCAtMTAzLDEzICsxMDMsMTMgQEAgY2FzZSAiJDEiIGluCisgCVJFVFZBTD0kPworIAk7OworICAgICBmb3JjZS1yZWxvYWQgfCByZWxvYWQpCistICAgIAllY2hvIC1uICQiUmVsb2FkaW5nICRwcm9nOiAiCisrCWVjaG8gLW4gIlJlbG9hZGluZyAkcHJvZzogIgorIAlraWxscHJvYyAvdXNyL3NiaW4vbnNjZCAtSFVQCisgCVJFVFZBTD0kPworIAllY2hvCisgCTs7CisgICAgICopCistCWVjaG8gJCJVc2FnZTogJDAge3N0YXJ0fHN0b3B8c3RhdHVzfHJlc3RhcnR8cmVsb2FkfGNvbmRyZXN0YXJ0fSIKKysJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHN0YXR1c3xyZXN0YXJ0fHJlbG9hZHxjb25kcmVzdGFydH0iCisgCVJFVFZBTD0xCisgCTs7CisgZXNhYworLS0gCisyLjEzLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTYtdGltZXpvbmUtcmUtd3JpdHRlbi10enNlbGVjdC1hcy1wb3NpeC1zaC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE2LXRpbWV6b25lLXJlLXdyaXR0ZW4tdHpzZWxlY3QtYXMtcG9zaXgtc2gucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNmEyYzAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTYtdGltZXpvbmUtcmUtd3JpdHRlbi10enNlbGVjdC1hcy1wb3NpeC1zaC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLUZyb20gMmJlZDUxNWI5ZjlmNjEzYWUwZGI5Yjk2MDdkOGZhNjBhNGFmY2E1YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjMzOjAzICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMTYvMjZdIHRpbWV6b25lOiByZS13cml0dGVuIHR6c2VsZWN0IGFzIHBvc2l4IHNoCi0KLVRvIGF2b2lkIHRoZSBiYXNoIGRlcGVuZGVuY3kuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi0gdGltZXpvbmUvTWFrZWZpbGUgICAgIHwgMiArLQotIHRpbWV6b25lL3R6c2VsZWN0LmtzaCB8IDIgKy0KLSAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3RpbWV6b25lL01ha2VmaWxlIGIvdGltZXpvbmUvTWFrZWZpbGUKLWluZGV4IGRlZTc1NjguLjY2YTUwYmUgMTAwNjQ0Ci0tLS0gYS90aW1lem9uZS9NYWtlZmlsZQotKysrIGIvdGltZXpvbmUvTWFrZWZpbGUKLUBAIC0xMjAsNyArMTIwLDcgQEAgJCh0ZXN0ZGF0YSkvWFQlOiB0ZXN0ZGF0YS9YVCUKLSAJY3AgJDwgJEAKLSAKLSAkKG9ianBmeCl0enNlbGVjdDogdHpzZWxlY3Qua3NoICQoY29tbW9uLW9ianBmeCljb25maWcubWFrZQotLQlzZWQgLWUgJ3N8L2Jpbi9iYXNofCQoQkFTSCl8JyBcCi0rCXNlZCAtZSAnc3wvYmluL2Jhc2h8L2Jpbi9zaHwnIFwKLSAJICAgIC1lICdzfFRaRElSPVtefV0qfFRaRElSPSQoem9uZWRpcil8JyBcCi0gCSAgICAtZSAnL1RaVkVSU0lPTj0vc3xzZWVfTWFrZWZpbGV8IiQodmVyc2lvbikifCcgXAotIAkgICAgLWUgJy9QS0dWRVJTSU9OPS9zfD0uKnw9IiQoUEtHVkVSU0lPTikifCcgXAotZGlmZiAtLWdpdCBhL3RpbWV6b25lL3R6c2VsZWN0LmtzaCBiL3RpbWV6b25lL3R6c2VsZWN0LmtzaAotaW5kZXggMmMzYjJmNC4uMGMwNGE2MSAxMDA3NTUKLS0tLSBhL3RpbWV6b25lL3R6c2VsZWN0LmtzaAotKysrIGIvdGltZXpvbmUvdHpzZWxlY3Qua3NoCi1AQCAtMzUsNyArMzUsNyBAQCBSRVBPUlRfQlVHU19UTz10ekBpYW5hLm9yZwotIAotICMgU3BlY2lmeSBkZWZhdWx0IHZhbHVlcyBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzIGlmIHRoZXkgYXJlIHVuc2V0LgotIDogJHtBV0s9YXdrfQotLTogJHtUWkRJUj1gcHdkYH0KLSs6ICR7VFpESVI9JChwd2QpfQotIAotICMgT3V0cHV0IG9uZSBhcmd1bWVudCBhcy1pcyB0byBzdGFuZGFyZCBvdXRwdXQuCi0gIyBTYWZlciB0aGFuICdlY2hvJywgd2hpY2ggY2FuIG1pc2hhbmRsZSAnXCcgb3IgbGVhZGluZyAnLScuCi0tLSAKLTIuMTAuMgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNy1SZW1vdmUtYmFzaC1kZXBlbmRlbmN5LWZvci1uc2NkLWluaXQtc2NyaXB0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTctUmVtb3ZlLWJhc2gtZGVwZW5kZW5jeS1mb3ItbnNjZC1pbml0LXNjcmlwdC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmMyNTA2Yy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNy1SZW1vdmUtYmFzaC1kZXBlbmRlbmN5LWZvci1uc2NkLWluaXQtc2NyaXB0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotRnJvbSBjODgxNDg3NWIzNjJlZmJmZDc3ODM0NWQwZDI3Nzc0NzhiZjExYTMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFRodSwgMzEgRGVjIDIwMTUgMTQ6MzM6MDIgLTA4MDAKLVN1YmplY3Q6IFtQQVRDSCAxNy8yNl0gUmVtb3ZlIGJhc2ggZGVwZW5kZW5jeSBmb3IgbnNjZCBpbml0IHNjcmlwdAotCi1UaGUgbnNjZCBpbml0IHNjcmlwdCB1c2VzICMhIC9iaW4vYmFzaCBidXQgb25seSByZWFsbHkgdXNlcyBvbmUgYmFzaGlzbQotKHRyYW5zbGF0ZWQgc3RyaW5ncyksIHNvIHJlbW92ZSB0aGVtIGFuZCBzd2l0Y2ggdGhlIHNoZWxsIHRvICMhL2Jpbi9zaC4KLQotU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBuc2NkL25zY2QuaW5pdCB8IDE0ICsrKysrKystLS0tLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL25zY2QvbnNjZC5pbml0IGIvbnNjZC9uc2NkLmluaXQKLWluZGV4IGE4ODJkYTcuLmIwMjk4NmUgMTAwNjQ0Ci0tLS0gYS9uc2NkL25zY2QuaW5pdAotKysrIGIvbnNjZC9uc2NkLmluaXQKLUBAIC0xLDQgKzEsNCBAQAotLSMhL2Jpbi9iYXNoCi0rIyEvYmluL3NoCi0gIwotICMgbnNjZDoJCVN0YXJ0cyB0aGUgTmFtZSBTd2l0Y2ggQ2FjaGUgRGFlbW9uCi0gIwotQEAgLTQ5LDcgKzQ5LDcgQEAgcHJvZz1uc2NkCi0gc3RhcnQgKCkgewotICAgICBbIC1kIC92YXIvcnVuL25zY2QgXSB8fCBta2RpciAvdmFyL3J1bi9uc2NkCi0gICAgIFsgLWQgL3Zhci9kYi9uc2NkIF0gfHwgbWtkaXIgL3Zhci9kYi9uc2NkCi0tICAgIGVjaG8gLW4gJCJTdGFydGluZyAkcHJvZzogIgotKyAgICBlY2hvIC1uICJTdGFydGluZyAkcHJvZzogIgotICAgICBkYWVtb24gL3Vzci9zYmluL25zY2QKLSAgICAgUkVUVkFMPSQ/Ci0gICAgIGVjaG8KLUBAIC01OCw3ICs1OCw3IEBAIHN0YXJ0ICgpIHsKLSB9Ci0gCi0gc3RvcCAoKSB7Ci0tICAgIGVjaG8gLW4gJCJTdG9wcGluZyAkcHJvZzogIgotKyAgICBlY2hvIC1uICJTdG9wcGluZyAkcHJvZzogIgotICAgICAvdXNyL3NiaW4vbnNjZCAtSwotICAgICBSRVRWQUw9JD8KLSAgICAgaWYgWyAkUkVUVkFMIC1lcSAwIF07IHRoZW4KLUBAIC02Nyw5ICs2Nyw5IEBAIHN0b3AgKCkgewotIAkjIGEgbm9uLXByaXZpbGVnZWQgdXNlcgotIAlybSAtZiAvdmFyL3J1bi9uc2NkL25zY2QucGlkCi0gCXJtIC1mIC92YXIvcnVuL25zY2Qvc29ja2V0Ci0tICAgICAgIAlzdWNjZXNzICQiJHByb2cgc2h1dGRvd24iCi0rCXN1Y2Nlc3MgIiRwcm9nIHNodXRkb3duIgotICAgICBlbHNlCi0tICAgICAgIAlmYWlsdXJlICQiJHByb2cgc2h1dGRvd24iCi0rCWZhaWx1cmUgIiRwcm9nIHNodXRkb3duIgotICAgICBmaQotICAgICBlY2hvCi0gICAgIHJldHVybiAkUkVUVkFMCi1AQCAtMTAzLDEzICsxMDMsMTMgQEAgY2FzZSAiJDEiIGluCi0gCVJFVFZBTD0kPwotIAk7OwotICAgICBmb3JjZS1yZWxvYWQgfCByZWxvYWQpCi0tICAgIAllY2hvIC1uICQiUmVsb2FkaW5nICRwcm9nOiAiCi0rCWVjaG8gLW4gIlJlbG9hZGluZyAkcHJvZzogIgotIAlraWxscHJvYyAvdXNyL3NiaW4vbnNjZCAtSFVQCi0gCVJFVFZBTD0kPwotIAllY2hvCi0gCTs7Ci0gICAgICopCi0tCWVjaG8gJCJVc2FnZTogJDAge3N0YXJ0fHN0b3B8c3RhdHVzfHJlc3RhcnR8cmVsb2FkfGNvbmRyZXN0YXJ0fSIKLSsJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHN0YXR1c3xyZXN0YXJ0fHJlbG9hZHxjb25kcmVzdGFydH0iCi0gCVJFVFZBTD0xCi0gCTs7Ci0gZXNhYwotLS0gCi0yLjEwLjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTctZWdsaWJjLUNyb3NzLWJ1aWxkaW5nLWFuZC10ZXN0aW5nLWluc3RydWN0aW9ucy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE3LWVnbGliYy1Dcm9zcy1idWlsZGluZy1hbmQtdGVzdGluZy1pbnN0cnVjdGlvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UzOWQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE3LWVnbGliYy1Dcm9zcy1idWlsZGluZy1hbmQtdGVzdGluZy1pbnN0cnVjdGlvbnMucGF0Y2gKQEAgLTAsMCArMSw2MTkgQEAKK0Zyb20gY2RjODhkZmZhMjI2ODE1ZTNhMjE4NjA0NjU1NDU5ZTMzZGM4NjQ4MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjQyOjU4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTcvMjVdIGVnbGliYzogQ3Jvc3MgYnVpbGRpbmcgYW5kIHRlc3RpbmcgaW5zdHJ1Y3Rpb25zCisKK1BvcnRlZCBmcm9tIGVnbGliYworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBHTElCQy5jcm9zcy1idWlsZGluZyB8IDM4MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBHTElCQy5jcm9zcy10ZXN0aW5nICB8IDIwNSArKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDU4OCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IEdMSUJDLmNyb3NzLWJ1aWxkaW5nCisgY3JlYXRlIG1vZGUgMTAwNjQ0IEdMSUJDLmNyb3NzLXRlc3RpbmcKKworZGlmZiAtLWdpdCBhL0dMSUJDLmNyb3NzLWJ1aWxkaW5nIGIvR0xJQkMuY3Jvc3MtYnVpbGRpbmcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwLi5lNmUwZGExYWFmCistLS0gL2Rldi9udWxsCisrKysgYi9HTElCQy5jcm9zcy1idWlsZGluZworQEAgLTAsMCArMSwzODMgQEAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBtb2RlOiB0ZXh0IC0qLQorKworKyAgICAgICAgICAgICAgICAgICAgICAgIENyb3NzLUNvbXBpbGluZyBHTElCQworKyAgICAgICAgICAgICAgICAgIEppbSBCbGFuZHkgPGppbWJAY29kZXNvdXJjZXJ5LmNvbT4KKysKKysKKytJbnRyb2R1Y3Rpb24KKysKKytNb3N0IEdOVSB0b29scyBoYXZlIGEgc2ltcGxlIGJ1aWxkIHByb2NlZHVyZTogeW91IHJ1biB0aGVpcgorKydjb25maWd1cmUnIHNjcmlwdCwgYW5kIHRoZW4geW91IHJ1biAnbWFrZScuICBVbmZvcnR1bmF0ZWx5LCB0aGUKKytwcm9jZXNzIG9mIGNyb3NzLWNvbXBpbGluZyB0aGUgR05VIEMgbGlicmFyeSBpcyBxdWl0ZSBhIGJpdCBtb3JlCisraW52b2x2ZWQ6CisrCisrMSkgQnVpbGQgYSBjcm9zcy1jb21waWxlciwgd2l0aCBjZXJ0YWluIGZhY2lsaXRpZXMgZGlzYWJsZWQuCisrCisrMikgQ29uZmlndXJlIHRoZSBDIGxpYnJhcnkgdXNpbmcgdGhlIGNvbXBpbGVyIHlvdSBidWlsdCBpbiBzdGVwIDEpLgorKyAgIEJ1aWxkIGEgZmV3IG9mIHRoZSBDIHJ1bi10aW1lIG9iamVjdCBmaWxlcywgYnV0IG5vdCB0aGUgcmVzdCBvZiB0aGUKKysgICBsaWJyYXJ5LiAgSW5zdGFsbCB0aGUgbGlicmFyeSdzIGhlYWRlciBmaWxlcyBhbmQgdGhlIHJ1bi10aW1lCisrICAgb2JqZWN0IGZpbGVzLCBhbmQgY3JlYXRlIGEgZHVtbXkgbGliYy5zby4KKysKKyszKSBCdWlsZCBhIHNlY29uZCBjcm9zcy1jb21waWxlciwgdXNpbmcgdGhlIGhlYWRlciBmaWxlcyBhbmQgb2JqZWN0CisrICAgZmlsZXMgeW91IGluc3RhbGxlZCBpbiBzdGVwIDIuCisrCisrNCkgQ29uZmlndXJlLCBidWlsZCwgYW5kIGluc3RhbGwgYSBmcmVzaCBDIGxpYnJhcnksIHVzaW5nIHRoZSBjb21waWxlcgorKyAgIGJ1aWx0IGluIHN0ZXAgMy4KKysKKys1KSBCdWlsZCBhIHRoaXJkIGNyb3NzLWNvbXBpbGVyLCBiYXNlZCBvbiB0aGUgQyBsaWJyYXJ5IGJ1aWx0IGluIHN0ZXAgNC4KKysKKytUaGUgcmVhc29uIGZvciB0aGlzIGNvbXBsZXhpdHkgaXMgdGhhdCwgYWx0aG91Z2ggR0NDIGFuZCB0aGUgR05VIEMKKytsaWJyYXJ5IGFyZSBkaXN0cmlidXRlZCBzZXBhcmF0ZWx5LCB0aGV5IGFyZSBub3QgYWN0dWFsbHkgaW5kZXBlbmRlbnQKKytvZiBlYWNoIG90aGVyOiBHQ0MgcmVxdWlyZXMgdGhlIEMgbGlicmFyeSdzIGhlYWRlcnMgYW5kIHNvbWUgb2JqZWN0CisrZmlsZXMgdG8gY29tcGlsZSBpdHMgb3duIGxpYnJhcmllcywgd2hpbGUgdGhlIEMgbGlicmFyeSBkZXBlbmRzIG9uCisrR0NDJ3MgbGlicmFyaWVzLiAgR0xJQkMgaW5jbHVkZXMgZmVhdHVyZXMgYW5kIGJ1ZyBmaXhlcyB0byB0aGUgc3RvY2sKKytHTlUgQyBsaWJyYXJ5IHRoYXQgc2ltcGxpZnkgdGhpcyBwcm9jZXNzLCBidXQgdGhlIGZ1bmRhbWVudGFsCisraW50ZXJkZXBlbmRlbmN5IHN0YW5kcy4KKysKKytJbiB0aGlzIGRvY3VtZW50LCB3ZSBleHBsYWluIGhvdyB0byBjcm9zcy1jb21waWxlIGFuIEdMSUJDL0dDQyBwYWlyCisrZnJvbSBzb3VyY2UuICBPdXIgaW50ZW5kZWQgYXVkaWVuY2UgaXMgZGV2ZWxvcGVycyB3aG8gYXJlIGFscmVhZHkKKytmYW1pbGlhciB3aXRoIHRoZSBHTlUgdG9vbGNoYWluIGFuZCBjb21mb3J0YWJsZSB3b3JraW5nIHdpdGgKKytjcm9zcy1kZXZlbG9wbWVudCB0b29scy4gIFdoaWxlIHdlIGRvIHByZXNlbnQgYSB3b3JrZWQgZXhhbXBsZSB0bworK2FjY29tcGFueSB0aGUgZXhwbGFuYXRpb24sIGZvciBjbGFyaXR5J3Mgc2FrZSB3ZSBkbyBub3QgY292ZXIgbWFueSBvZgorK3RoZSBvcHRpb25zIGF2YWlsYWJsZSB0byBjcm9zcy10b29sY2hhaW4gdXNlcnMuCisrCisrCisrUHJlcGFyYXRpb24KKysKKytHTElCQyByZXF1aXJlcyByZWNlbnQgdmVyc2lvbnMgb2YgdGhlIEdOVSBiaW51dGlscywgR0NDLCBhbmQgdGhlCisrTGludXgga2VybmVsLiAgVGhlIHdlYiBwYWdlIDxodHRwOi8vd3d3LmVnbGliYy5vcmcvcHJlcmVxdWlzaXRlcz4KKytkb2N1bWVudHMgdGhlIGN1cnJlbnQgcmVxdWlyZW1lbnRzLCBhbmQgbGlzdHMgcGF0Y2hlcyBuZWVkZWQgZm9yCisrY2VydGFpbiB0YXJnZXQgYXJjaGl0ZWN0dXJlcy4gIEFzIG9mIHRoaXMgd3JpdGluZywgdGhlc2UgYnVpbGQKKytpbnN0cnVjdGlvbnMgaGF2ZSBiZWVuIHRlc3RlZCB3aXRoIGJpbnV0aWxzIDIuMjIuNTEsIEdDQyA0LjYuMiwKKythbmQgTGludXggMy4xLgorKworK0ZpcnN0LCBsZXQncyBzZXQgc29tZSB2YXJpYWJsZXMsIHRvIHNpbXBsaWZ5IGxhdGVyIGNvbW1hbmRzLiAgV2UnbGwKKytidWlsZCBHTElCQyBhbmQgR0NDIGZvciBhbiBBUk0gdGFyZ2V0LCBrbm93biB0byB0aGUgTGludXgga2VybmVsCisrYXMgJ2FybScsIGFuZCB3ZSdsbCBkbyB0aGUgYnVpbGQgb24gYW4gSW50ZWwgeDg2XzY0IExpbnV4IGJveDoKKysKKysgICAgJCBidWlsZD14ODZfNjQtcGMtbGludXgtZ251CisrICAgICQgaG9zdD0kYnVpbGQKKysgICAgJCB0YXJnZXQ9YXJtLW5vbmUtbGludXgtZ251ZWFiaQorKyAgICAkIGxpbnV4X2FyY2g9YXJtCisrCisrV2UncmUgdXNpbmcgdGhlIGFmb3JlbWVudGlvbmVkIHZlcnNpb25zIG9mIEJpbnV0aWxzLCBHQ0MsIGFuZCBMaW51eDoKKysKKysgICAgJCBiaW51dGlsc3Y9YmludXRpbHMtMi4yMi41MQorKyAgICAkIGdjY3Y9Z2NjLTQuNi4yCisrICAgICQgbGludXh2PWxpbnV4LTMuMQorKworK1dlJ3JlIGNhcnJ5aW5nIG91dCB0aGUgZW50aXJlIHByb2Nlc3MgdW5kZXIgJ34vY3Jvc3MtYnVpbGQnLCB3aGljaAorK2NvbnRhaW5zIHVucGFja2VkIHNvdXJjZSB0cmVlcyBmb3IgYmludXRpbHMsIGdjYywgYW5kIGxpbnV4IGtlcm5lbCwKKythbG9uZyB3aXRoIEdMSUJDIHN2biB0cnVuayAod2hpY2ggY2FuIGJlIGNoZWNrZWQtb3V0IHdpdGgKKysnc3ZuIGNvIGh0dHA6Ly93d3cuZWdsaWJjLm9yZy9zdm4vdHJ1bmsgZWdsaWJjJyk6CisrCisrICAgICQgdG9wPSRIT01FL2Nyb3NzLWJ1aWxkLyR0YXJnZXQKKysgICAgJCBzcmM9JEhPTUUvY3Jvc3MtYnVpbGQvc3JjCisrICAgICQgbHMgJHNyYworKyAgICBiaW51dGlscy0yLjIyLjUxICBnbGliYyAgZ2NjLTQuNi4yICBsaW51eC0zLjEKKysKKytXZSdyZSBnb2luZyB0byBwbGFjZSBvdXIgYnVpbGQgZGlyZWN0b3JpZXMgaW4gYSBzdWJkaXJlY3RvcnkgJ29iaicsCisrd2UnbGwgaW5zdGFsbCB0aGUgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluIGluICd0b29scycsIGFuZCB3ZSdsbAorK3BsYWNlIG91ciBzeXNyb290IChjb250YWluaW5nIGZpbGVzIHRvIGJlIGluc3RhbGxlZCBvbiB0aGUgdGFyZ2V0Cisrc3lzdGVtKSBpbiAnc3lzcm9vdCc6CisrCisrICAgICQgb2JqPSR0b3Avb2JqCisrICAgICQgdG9vbHM9JHRvcC90b29scworKyAgICAkIHN5c3Jvb3Q9JHRvcC9zeXNyb290CisrCisrCisrQmludXRpbHMKKysKKytDb25maWd1cmluZyBhbmQgYnVpbGRpbmcgYmludXRpbHMgZm9yIHRoZSB0YXJnZXQgaXMgc3RyYWlnaHRmb3J3YXJkOgorKworKyAgICAkIG1rZGlyIC1wICRvYmovYmludXRpbHMKKysgICAgJCBjZCAkb2JqL2JpbnV0aWxzCisrICAgICQgJHNyYy8kYmludXRpbHN2L2NvbmZpZ3VyZSBcCisrICAgID4gICAgIC0tdGFyZ2V0PSR0YXJnZXQgXAorKyAgICA+ICAgICAtLXByZWZpeD0kdG9vbHMgXAorKyAgICA+ICAgICAtLXdpdGgtc3lzcm9vdD0kc3lzcm9vdAorKyAgICAkIG1ha2UKKysgICAgJCBtYWtlIGluc3RhbGwKKysKKysKKytUaGUgRmlyc3QgR0NDCisrCisrRm9yIG91ciB3b3JrLCB3ZSBuZWVkIGEgY3Jvc3MtY29tcGlsZXIgdGFyZ2V0aW5nIGFuIEFSTSBMaW51eAorK3N5c3RlbS4gIEhvd2V2ZXIsIHRoYXQgY29uZmlndXJhdGlvbiBpbmNsdWRlcyB0aGUgc2hhcmVkIGxpYnJhcnkKKysnbGliZ2NjX3Muc28nLCB3aGljaCBpcyBjb21waWxlZCBhZ2FpbnN0IHRoZSBHTElCQyBoZWFkZXJzICh3aGljaCB3ZQorK2hhdmVuJ3QgaW5zdGFsbGVkIHlldCkgYW5kIGxpbmtlZCBhZ2FpbnN0ICdsaWJjLnNvJyAod2hpY2ggd2UgaGF2ZW4ndAorK2J1aWx0IHlldCkuCisrCisrRm9ydHVuYXRlbHksIHRoZXJlIGFyZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEdDQyB3aGljaCB0ZWxsIGl0IG5vdAorK3RvIGJ1aWxkICdsaWJnY2Nfcy5zbycuICBUaGUgJy0td2l0aG91dC1oZWFkZXJzJyBvcHRpb24gaXMgc3VwcG9zZWQgdG8KKyt0YWtlIGNhcmUgb2YgdGhpcywgYnV0IGl0cyBpbXBsZW1lbnRhdGlvbiBpcyBpbmNvbXBsZXRlLCBzbyB5b3UgbXVzdAorK2Fsc28gY29uZmlndXJlIHdpdGggdGhlICctLXdpdGgtbmV3bGliJyBvcHRpb24uICBXaGlsZSAnLS13aXRoLW5ld2xpYicKKythcHBlYXJzIHRvIG1lYW4gIlVzZSB0aGUgTmV3bGliIEMgbGlicmFyeSIsIGl0cyBlZmZlY3QgaXMgdG8gdGVsbCB0aGUKKytHQ0MgYnVpbGQgbWFjaGluZXJ5LCAiRG9uJ3QgYXNzdW1lIHRoZXJlIGlzIGEgQyBsaWJyYXJ5IGF2YWlsYWJsZS4iCisrCisrV2UgYWxzbyBuZWVkIHRvIGRpc2FibGUgc29tZSBvZiB0aGUgbGlicmFyaWVzIHRoYXQgd291bGQgbm9ybWFsbHkgYmUKKytidWlsdCBhbG9uZyB3aXRoIEdDQywgYW5kIHNwZWNpZnkgdGhhdCBvbmx5IHRoZSBjb21waWxlciBmb3IgdGhlIEMKKytsYW5ndWFnZSBpcyBuZWVkZWQuCisrCisrU28sIHdlIGNyZWF0ZSBhIGJ1aWxkIGRpcmVjdG9yeSwgY29uZmlndXJlLCBtYWtlLCBhbmQgaW5zdGFsbC4KKysKKysgICAgJCBta2RpciAtcCAkb2JqL2djYzEKKysgICAgJCBjZCAkb2JqL2djYzEKKysgICAgJCAkc3JjLyRnY2N2L2NvbmZpZ3VyZSBcCisrICAgID4gICAgIC0tdGFyZ2V0PSR0YXJnZXQgXAorKyAgICA+ICAgICAtLXByZWZpeD0kdG9vbHMgXAorKyAgICA+ICAgICAtLXdpdGhvdXQtaGVhZGVycyAtLXdpdGgtbmV3bGliIFwKKysgICAgPiAgICAgLS1kaXNhYmxlLXNoYXJlZCAtLWRpc2FibGUtdGhyZWFkcyAtLWRpc2FibGUtbGlic3NwIFwKKysgICAgPiAgICAgLS1kaXNhYmxlLWxpYmdvbXAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgLS1kaXNhYmxlLWxpYnF1YWRtYXRoIFwKKysgICAgPiAgICAgLS1kaXNhYmxlLWRlY2ltYWwtZmxvYXQgLS1kaXNhYmxlLWxpYmZmaSBcCisrICAgID4gICAgIC0tZW5hYmxlLWxhbmd1YWdlcz1jCisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZSBpbnN0YWxsCisrCisrCisrTGludXggS2VybmVsIEhlYWRlcnMKKysKKytUbyBjb25maWd1cmUgR0xJQkMsIHdlIGFsc28gbmVlZCBMaW51eCBrZXJuZWwgaGVhZGVycyBpbiBwbGFjZS4KKytGb3J0dW5hdGVseSwgdGhlIExpbnV4IG1ha2VmaWxlcyBoYXZlIGEgdGFyZ2V0IHRoYXQgaW5zdGFsbHMgdGhlbSBmb3IKKyt1cy4gIFNpbmNlIHRoZSBwcm9jZXNzIGRvZXMgbW9kaWZ5IHRoZSBzb3VyY2UgdHJlZSBhIGJpdCwgd2UgbWFrZSBhCisrY29weSBmaXJzdDoKKysKKysgICAgJCBjcCAtciAkc3JjLyRsaW51eHYgJG9iai9saW51eAorKyAgICAkIGNkICRvYmovbGludXgKKysKKytOb3cgd2UncmUgcmVhZHkgdG8gaW5zdGFsbCB0aGUgaGVhZGVycyBpbnRvIHRoZSBzeXNyb290OgorKworKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBcCisrICAgID4gbWFrZSBoZWFkZXJzX2luc3RhbGwgXAorKyAgICA+ICAgICAgQVJDSD0kbGludXhfYXJjaCBDUk9TU19DT01QSUxFPSR0YXJnZXQtIFwKKysgICAgPiAgICAgIElOU1RBTExfSERSX1BBVEg9JHN5c3Jvb3QvdXNyCisrCisrCisrR0xJQkMgSGVhZGVycyBhbmQgUHJlbGltaW5hcnkgT2JqZWN0cworKworK1VzaW5nIHRoZSBjcm9zcy1jb21waWxlciB3ZSd2ZSBqdXN0IGJ1aWx0LCB3ZSBjYW4gbm93IGNvbmZpZ3VyZSBHTElCQworK3dlbGwgZW5vdWdoIHRvIGluc3RhbGwgdGhlIGhlYWRlcnMgYW5kIGJ1aWxkIHRoZSBvYmplY3QgZmlsZXMgdGhhdCB0aGUKKytmdWxsIGNyb3NzLWNvbXBpbGVyIHdpbGwgbmVlZDoKKysKKysgICAgJCBta2RpciAtcCAkb2JqL2dsaWJjLWhlYWRlcnMKKysgICAgJCBjZCAkb2JqL2dsaWJjLWhlYWRlcnMKKysgICAgJCBCVUlMRF9DQz1nY2MgXAorKyAgICA+IENDPSR0b29scy9iaW4vJHRhcmdldC1nY2MgXAorKyAgICA+IENYWD0kdG9vbHMvYmluLyR0YXJnZXQtZysrIFwKKysgICAgPiBBUj0kdG9vbHMvYmluLyR0YXJnZXQtYXIgXAorKyAgICA+IFJBTkxJQj0kdG9vbHMvYmluLyR0YXJnZXQtcmFubGliIFwKKysgICAgPiAkc3JjL2dsaWJjL2xpYmMvY29uZmlndXJlIFwKKysgICAgPiAgICAgLS1wcmVmaXg9L3VzciBcCisrICAgID4gICAgIC0td2l0aC1oZWFkZXJzPSRzeXNyb290L3Vzci9pbmNsdWRlIFwKKysgICAgPiAgICAgLS1idWlsZD0kYnVpbGQgXAorKyAgICA+ICAgICAtLWhvc3Q9JHRhcmdldCBcCisrICAgID4gICAgIC0tZGlzYWJsZS1wcm9maWxlIC0td2l0aG91dC1nZCAtLXdpdGhvdXQtY3ZzIFwKKysgICAgPiAgICAgLS1lbmFibGUtYWRkLW9ucz1ucHRsLGxpYmlkbiwuLi9wb3J0cworKworK1RoZSBvcHRpb24gJy0tcHJlZml4PS91c3InIG1heSBsb29rIHN0cmFuZ2UsIGJ1dCB5b3Ugc2hvdWxkIG5ldmVyCisrY29uZmlndXJlIEdMSUJDIHdpdGggYSBwcmVmaXggb3RoZXIgdGhhbiAnL3Vzcic6IGluIHZhcmlvdXMgcGxhY2VzLAorK0dMSUJDJ3MgYnVpbGQgc3lzdGVtIGNoZWNrcyB3aGV0aGVyIHRoZSBwcmVmaXggaXMgJy91c3InLCBhbmQgZG9lcworK3NwZWNpYWwgaGFuZGxpbmcgb25seSBpZiB0aGF0IGlzIHRoZSBjYXNlLiAgVW5sZXNzIHlvdSB1c2UgdGhpcworK3ByZWZpeCwgeW91IHdpbGwgZ2V0IGEgc3lzcm9vdCB0aGF0IGRvZXMgbm90IHVzZSB0aGUgc3RhbmRhcmQgTGludXgKKytkaXJlY3RvcnkgbGF5b3V0cyBhbmQgY2Fubm90IGJlIHVzZWQgYXMgYSBiYXNpcyBmb3IgdGhlIHJvb3QKKytmaWxlc3lzdGVtIG9uIHlvdXIgdGFyZ2V0IHN5c3RlbSBjb21wYXRpYmx5IHdpdGggbm9ybWFsIEdMSUJDCisraW5zdGFsbGF0aW9ucy4KKysKKytUaGUgJy0td2l0aC1oZWFkZXJzJyBvcHRpb24gdGVsbHMgR0xJQkMgd2hlcmUgdGhlIExpbnV4IGhlYWRlcnMgaGF2ZQorK2JlZW4gaW5zdGFsbGVkLgorKworK1RoZSAnLS1lbmFibGUtYWRkLW9ucz1ucHRsLGxpYmlkbiwuLi9wb3J0cycgb3B0aW9uIHRlbGxzIEdMSUJDIHRvIGxvb2sKKytmb3IgdGhlIGxpc3RlZCBnbGliYyBhZGQtb25zLiBNb3N0IG5vdGFibHkgdGhlIHBvcnRzIGFkZC1vbiAobG9jYXRlZAorK2p1c3QgYWJvdmUgdGhlIGxpYmMgc291cmNlcyBpbiB0aGUgR0xJQkMgc3ZuIHRyZWUpIGlzIHJlcXVpcmVkIHRvCisrc3VwcG9ydCBBUk0gdGFyZ2V0cy4KKysKKytXZSBjYW4gbm93IHVzZSB0aGUgJ2luc3RhbGwtaGVhZGVycycgbWFrZWZpbGUgdGFyZ2V0IHRvIGluc3RhbGwgdGhlCisraGVhZGVyczoKKysKKysgICAgJCBtYWtlIGluc3RhbGwtaGVhZGVycyBpbnN0YWxsX3Jvb3Q9JHN5c3Jvb3QgXAorKyAgICA+ICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwtYm9vdHN0cmFwLWhlYWRlcnM9eWVzCisrCisrVGhlICdpbnN0YWxsX3Jvb3QnIHZhcmlhYmxlIGluZGljYXRlcyB3aGVyZSB0aGUgZmlsZXMgc2hvdWxkIGFjdHVhbGx5CisrYmUgaW5zdGFsbGVkOyBpdHMgdmFsdWUgaXMgdHJlYXRlZCBhcyB0aGUgcGFyZW50IG9mIHRoZSAnLS1wcmVmaXgnCisrZGlyZWN0b3J5IHdlIHBhc3NlZCB0byB0aGUgY29uZmlndXJlIHNjcmlwdCwgc28gdGhlIGhlYWRlcnMgd2lsbCBnbyBpbgorKyckc3lzcm9vdC91c3IvaW5jbHVkZScuICBUaGUgJ2luc3RhbGwtYm9vdHN0cmFwLWhlYWRlcnMnIHZhcmlhYmxlCisrcmVxdWVzdHMgc3BlY2lhbCBoYW5kbGluZyBmb3IgY2VydGFpbiB0cmlja3kgaGVhZGVyIGZpbGVzLgorKworK05leHQsIHRoZXJlIGFyZSBhIGZldyBvYmplY3QgZmlsZXMgbmVlZGVkIHRvIGxpbmsgc2hhcmVkIGxpYnJhcmllcywKKyt3aGljaCB3ZSBidWlsZCBhbmQgaW5zdGFsbCBieSBoYW5kOgorKworKyAgICAkIG1rZGlyIC1wICRzeXNyb290L3Vzci9saWIKKysgICAgJCBtYWtlIGNzdS9zdWJkaXJfbGliCisrICAgICQgY3AgY3N1L2NydDEubyBjc3UvY3J0aS5vIGNzdS9jcnRuLm8gJHN5c3Jvb3QvdXNyL2xpYgorKworK0ZpbmFsbHksICdsaWJnY2Nfcy5zbycgcmVxdWlyZXMgYSAnbGliYy5zbycgdG8gbGluayBhZ2FpbnN0LiAgSG93ZXZlciwKKytzaW5jZSB3ZSB3aWxsIG5ldmVyIGFjdHVhbGx5IGV4ZWN1dGUgaXRzIGNvZGUsIGl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQKKytpdCBjb250YWlucy4gIFNvLCB0cmVhdGluZyAnL2Rldi9udWxsJyBhcyBhIEMgc291cmNlIGZpbGUsIHdlIHByb2R1Y2UKKythIGR1bW15ICdsaWJjLnNvJyBpbiBvbmUgc3RlcDoKKysKKysgICAgJCAkdG9vbHMvYmluLyR0YXJnZXQtZ2NjIC1ub3N0ZGxpYiAtbm9zdGFydGZpbGVzIC1zaGFyZWQgLXggYyAvZGV2L251bGwgXAorKyAgICA+ICAgICAgICAgICAgICAgICAgICAgICAgLW8gJHN5c3Jvb3QvdXNyL2xpYi9saWJjLnNvCisrCisrCisrVGhlIFNlY29uZCBHQ0MKKysKKytXaXRoIHRoZSBHTElCQyBoZWFkZXJzIGFuZCBzZWxlY3RlZCBvYmplY3QgZmlsZXMgaW5zdGFsbGVkLCB3ZSBjYW4KKytub3cgYnVpbGQgYSBHQ0MgdGhhdCBpcyBjYXBhYmxlIG9mIGNvbXBpbGluZyBHTElCQy4gIFdlIGNvbmZpZ3VyZSwKKytidWlsZCwgYW5kIGluc3RhbGwgdGhlIHNlY29uZCBHQ0MsIGFnYWluIGJ1aWxkaW5nIG9ubHkgdGhlIEMgY29tcGlsZXIsCisrYW5kIGF2b2lkaW5nIGxpYnJhcmllcyB3ZSB3b24ndCB1c2U6CisrCisrICAgICQgbWtkaXIgLXAgJG9iai9nY2MyCisrICAgICQgY2QgJG9iai9nY2MyCisrICAgICQgJHNyYy8kZ2Njdi9jb25maWd1cmUgXAorKyAgICA+ICAgICAtLXRhcmdldD0kdGFyZ2V0IFwKKysgICAgPiAgICAgLS1wcmVmaXg9JHRvb2xzIFwKKysgICAgPiAgICAgLS13aXRoLXN5c3Jvb3Q9JHN5c3Jvb3QgXAorKyAgICA+ICAgICAtLWRpc2FibGUtbGlic3NwIC0tZGlzYWJsZS1saWJnb21wIC0tZGlzYWJsZS1saWJtdWRmbGFwIFwKKysgICAgPiAgICAgLS1kaXNhYmxlLWxpYmZmaSAtLWRpc2FibGUtbGlicXVhZG1hdGggXAorKyAgICA+ICAgICAtLWVuYWJsZS1sYW5ndWFnZXM9YworKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlCisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UgaW5zdGFsbAorKworKworK0dMSUJDLCBDb21wbGV0ZQorKworK1dpdGggdGhlIHNlY29uZCBjb21waWxlciBidWlsdCBhbmQgaW5zdGFsbGVkLCB3ZSdyZSBub3cgcmVhZHkgZm9yIHRoZQorK2Z1bGwgR0xJQkMgYnVpbGQ6CisrCisrICAgICQgbWtkaXIgLXAgJG9iai9nbGliYworKyAgICAkIGNkICRvYmovZ2xpYmMKKysgICAgJCBCVUlMRF9DQz1nY2MgXAorKyAgICA+IENDPSR0b29scy9iaW4vJHRhcmdldC1nY2MgXAorKyAgICA+IENYWD0kdG9vbHMvYmluLyR0YXJnZXQtZysrIFwKKysgICAgPiBBUj0kdG9vbHMvYmluLyR0YXJnZXQtYXIgXAorKyAgICA+IFJBTkxJQj0kdG9vbHMvYmluLyR0YXJnZXQtcmFubGliIFwKKysgICAgPiAkc3JjL2dsaWJjL2xpYmMvY29uZmlndXJlIFwKKysgICAgPiAgICAgLS1wcmVmaXg9L3VzciBcCisrICAgID4gICAgIC0td2l0aC1oZWFkZXJzPSRzeXNyb290L3Vzci9pbmNsdWRlIFwKKysgICAgPiAgICAgLS13aXRoLWtjb25maWc9JG9iai9saW51eC9zY3JpcHRzL2tjb25maWcgXAorKyAgICA+ICAgICAtLWJ1aWxkPSRidWlsZCBcCisrICAgID4gICAgIC0taG9zdD0kdGFyZ2V0IFwKKysgICAgPiAgICAgLS1kaXNhYmxlLXByb2ZpbGUgLS13aXRob3V0LWdkIC0td2l0aG91dC1jdnMgXAorKyAgICA+ICAgICAtLWVuYWJsZS1hZGQtb25zPW5wdGwsbGliaWRuLC4uL3BvcnRzCisrCisrTm90ZSB0aGUgYWRkaXRpb25hbCAnLS13aXRoLWtjb25maWcnIG9wdGlvbi4gVGhpcyB0ZWxscyBHTElCQyB3aGVyZSB0bworK2ZpbmQgdGhlIGhvc3QgY29uZmlnIHRvb2xzIHVzZWQgYnkgdGhlIGtlcm5lbCAnbWFrZSBjb25maWcnIGFuZCAnbWFrZQorK21lbnVjb25maWcnLiAgVGhlc2UgdG9vbHMgY2FuIGJlIHJlLXVzZWQgYnkgR0xJQkMgZm9yIGl0cyBvd24gJ21ha2UKKysqY29uZmlnJyBzdXBwb3J0LCB3aGljaCB3aWxsIGNyZWF0ZSAnb3B0aW9uLWdyb3Vwcy5jb25maWcnIGZvciB5b3UuCisrQnV0IGZpcnN0IG1ha2Ugc3VyZSB0aG9zZSB0b29scyBoYXZlIGJlZW4gYnVpbHQgYnkgcnVubmluZyBzb21lCisrZHVtbXkgJ21ha2UgKmNvbmZpZycgY2FsbHMgaW4gdGhlIGtlcm5lbCBkaXJlY3Rvcnk6CisrCisrICAgICQgY2QgJG9iai9saW51eAorKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlIGNvbmZpZyBcCisrICAgID4gICAgICBBUkNIPSRsaW51eF9hcmNoIENST1NTX0NPTVBJTEU9JHRhcmdldC0gXAorKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlIG1lbnVjb25maWcgXAorKyAgICA+ICAgICAgQVJDSD0kbGludXhfYXJjaCBDUk9TU19DT01QSUxFPSR0YXJnZXQtIFwKKysKKytOb3cgd2UgY2FuIGNvbmZpZ3VyZSBhbmQgYnVpbGQgdGhlIGZ1bGwgR0xJQkM6CisrCisrICAgICQgY2QgJG9iai9nbGliYworKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlIGRlZmNvbmZpZworKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlIG1lbnVjb25maWcKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZQorKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlIGluc3RhbGwgaW5zdGFsbF9yb290PSRzeXNyb290CisrCisrQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBhIGNvbXBsZXRlIEdMSUJDIGluc3RhbGxhdGlvbiBpbiAnJHN5c3Jvb3QnLAorK3dpdGggaGVhZGVyIGZpbGVzLCBsaWJyYXJ5IGZpbGVzLCBhbmQgbW9zdCBvZiB0aGUgQyBydW50aW1lIHN0YXJ0dXAKKytmaWxlcyBpbiBwbGFjZS4KKysKKysKKytUaGUgVGhpcmQgR0NDCisrCisrRmluYWxseSwgd2UgcmVjb21waWxlIEdDQyBhZ2FpbnN0IHRoaXMgZnVsbCBpbnN0YWxsYXRpb24sIGVuYWJsaW5nCisrd2hhdGV2ZXIgbGFuZ3VhZ2VzIGFuZCBsaWJyYXJpZXMgd2Ugd291bGQgbGlrZSB0byB1c2U6CisrCisrICAgICQgbWtkaXIgLXAgJG9iai9nY2MzCisrICAgICQgY2QgJG9iai9nY2MzCisrICAgICQgJHNyYy8kZ2Njdi9jb25maWd1cmUgXAorKyAgICA+ICAgICAtLXRhcmdldD0kdGFyZ2V0IFwKKysgICAgPiAgICAgLS1wcmVmaXg9JHRvb2xzIFwKKysgICAgPiAgICAgLS13aXRoLXN5c3Jvb3Q9JHN5c3Jvb3QgXAorKyAgICA+ICAgICAtLWVuYWJsZS1fX2N4YV9hdGV4aXQgXAorKyAgICA+ICAgICAtLWRpc2FibGUtbGlic3NwIC0tZGlzYWJsZS1saWJnb21wIC0tZGlzYWJsZS1saWJtdWRmbGFwIFwKKysgICAgPiAgICAgLS1lbmFibGUtbGFuZ3VhZ2VzPWMsYysrCisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZSBpbnN0YWxsCisrCisrVGhlICctLWVuYWJsZS1fX2N4YV9hdGV4aXQnIG9wdGlvbiB0ZWxscyBHQ0Mgd2hhdCBzb3J0IG9mIEMrKworK2Rlc3RydWN0b3Igc3VwcG9ydCB0byBleHBlY3QgZnJvbSB0aGUgQyBsaWJyYXJ5OyBpdCdzIHJlcXVpcmVkIHdpdGgKKytHTElCQy4KKysKKytBbmQgc2luY2UgR0NDJ3MgaW5zdGFsbGF0aW9uIHByb2Nlc3MgaXNuJ3QgZGVzaWduZWQgdG8gaGVscCBjb25zdHJ1Y3QKKytzeXNyb290IHRyZWVzLCB3ZSBtdXN0IG1hbnVhbGx5IGNvcHkgY2VydGFpbiBsaWJyYXJpZXMgaW50byBwbGFjZSBpbgorK3RoZSBzeXNyb290LgorKworKyAgICAkIGNwIC1kICR0b29scy8kdGFyZ2V0L2xpYi9saWJnY2Nfcy5zbyogJHN5c3Jvb3QvbGliCisrICAgICQgY3AgLWQgJHRvb2xzLyR0YXJnZXQvbGliL2xpYnN0ZGMrKy5zbyogJHN5c3Jvb3QvdXNyL2xpYgorKworKworK1RyeWluZyBUaGluZ3MgT3V0CisrCisrQXQgdGhpcyBwb2ludCwgJyR0b29scycgY29udGFpbnMgYSBjcm9zcyB0b29sY2hhaW4gcmVhZHkgdG8gdXNlCisrdGhlIEdMSUJDIGluc3RhbGxhdGlvbiBpbiAnJHN5c3Jvb3QnOgorKworKyAgICAkIGNhdCA+IGhlbGxvLmMgPDxFT0YKKysgICAgPiAjaW5jbHVkZSA8c3RkaW8uaD4KKysgICAgPiBpbnQKKysgICAgPiBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrICAgID4geworKyAgICA+ICAgcHV0cyAoIkhlbGxvLCB3b3JsZCEiKTsKKysgICAgPiAgIHJldHVybiAwOworKyAgICA+IH0KKysgICAgPiBFT0YKKysgICAgJCAkdG9vbHMvYmluLyR0YXJnZXQtZ2NjIC1XYWxsIGhlbGxvLmMgLW8gaGVsbG8KKysgICAgJCBjYXQgPiBjKystaGVsbG8uY2MgPDxFT0YKKysgICAgPiAjaW5jbHVkZSA8aW9zdHJlYW0+CisrICAgID4gaW50CisrICAgID4gbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKyAgICA+IHsKKysgICAgPiAgIHN0ZDo6Y291dCA8PCAiSGVsbG8sIEMrKyB3b3JsZCEiIDw8IHN0ZDo6ZW5kbDsKKysgICAgPiAgIHJldHVybiAwOworKyAgICA+IH0KKysgICAgPiBFT0YKKysgICAgJCAkdG9vbHMvYmluLyR0YXJnZXQtZysrIC1XYWxsIGMrKy1oZWxsby5jYyAtbyBjKystaGVsbG8KKysKKysKKytXZSBjYW4gdXNlICdyZWFkZWxmJyB0byB2ZXJpZnkgdGhhdCB0aGVzZSBhcmUgaW5kZWVkIGV4ZWN1dGFibGVzIGZvcgorK291ciB0YXJnZXQsIHVzaW5nIG91ciBkeW5hbWljIGxpbmtlcjoKKysKKysgICAgJCAkdG9vbHMvYmluLyR0YXJnZXQtcmVhZGVsZiAtaGwgaGVsbG8KKysgICAgRUxGIEhlYWRlcjoKKysgICAgLi4uCisrICAgICAgVHlwZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWEVDIChFeGVjdXRhYmxlIGZpbGUpCisrICAgICAgTWFjaGluZTogICAgICAgICAgICAgICAgICAgICAgICAgICBBUk0KKysKKysgICAgLi4uCisrICAgIFByb2dyYW0gSGVhZGVyczoKKysgICAgICBUeXBlICAgICAgICAgICBPZmZzZXQgICBWaXJ0QWRkciAgIFBoeXNBZGRyICAgRmlsZVNpeiBNZW1TaXogIEZsZyBBbGlnbgorKyAgICAgIFBIRFIgICAgICAgICAgIDB4MDAwMDM0IDB4MTAwMDAwMzQgMHgxMDAwMDAzNCAweDAwMTAwIDB4MDAxMDAgUiBFIDB4NAorKyAgICAgIElOVEVSUCAgICAgICAgIDB4MDAwMTM0IDB4MDAwMDgxMzQgMHgwMDAwODEzNCAweDAwMDEzIDB4MDAwMTMgUiAgIDB4MQorKyAgICAgICAgICBbUmVxdWVzdGluZyBwcm9ncmFtIGludGVycHJldGVyOiAvbGliL2xkLWxpbnV4LnNvLjNdCisrICAgICAgTE9BRCAgICAgICAgICAgMHgwMDAwMDAgMHgwMDAwODAwMCAweDAwMDA4MDAwIDB4MDA0MmMgMHgwMDQyYyBSIEUgMHg4MDAwCisrICAgIC4uLgorKworK0xvb2tpbmcgYXQgdGhlIGR5bmFtaWMgc2VjdGlvbiBvZiB0aGUgaW5zdGFsbGVkICdsaWJnY2Nfcy5zbycsIHdlIHNlZQorK3RoYXQgdGhlICdORUVERUQnIGVudHJ5IGZvciB0aGUgQyBsaWJyYXJ5IGRvZXMgaW5jbHVkZSB0aGUgJy42JworK3N1ZmZpeCwgaW5kaWNhdGluZyB0aGF0IHdhcyBsaW5rZWQgYWdhaW5zdCBvdXIgZnVsbHkgYnVpbGQgR0xJQkMsIGFuZAorK25vdCBvdXIgZHVtbXkgJ2xpYmMuc28nOgorKworKyAgICAkICR0b29scy9iaW4vJHRhcmdldC1yZWFkZWxmIC1kICRzeXNyb290L2xpYi9saWJnY2Nfcy5zby4xCisrICAgIER5bmFtaWMgc2VjdGlvbiBhdCBvZmZzZXQgMHgxMDgzYyBjb250YWlucyAyNCBlbnRyaWVzOgorKyAgICAgIFRhZyAgICAgICAgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lL1ZhbHVlCisrICAgICAweDAwMDAwMDAxIChORUVERUQpICAgICAgICAgICAgICAgICAgICAgU2hhcmVkIGxpYnJhcnk6IFtsaWJjLnNvLjZdCisrICAgICAweDAwMDAwMDBlIChTT05BTUUpICAgICAgICAgICAgICAgICAgICAgTGlicmFyeSBzb25hbWU6IFtsaWJnY2Nfcy5zby4xXQorKyAgICAuLi4KKysKKysKKytBbmQgb24gdGhlIHRhcmdldCBtYWNoaW5lLCB3ZSBjYW4gcnVuIG91ciBwcm9ncmFtczoKKysKKysgICAgJCAkc3lzcm9vdC9saWIvbGQuc28uMSAtLWxpYnJhcnktcGF0aCAkc3lzcm9vdC9saWI6JHN5c3Jvb3QvdXNyL2xpYiBcCisrICAgID4gLi9oZWxsbworKyAgICBIZWxsbywgd29ybGQhCisrICAgICQgJHN5c3Jvb3QvbGliL2xkLnNvLjEgLS1saWJyYXJ5LXBhdGggJHN5c3Jvb3QvbGliOiRzeXNyb290L3Vzci9saWIgXAorKyAgICA+IC4vYysrLWhlbGxvCisrICAgIEhlbGxvLCBDKysgd29ybGQhCitkaWZmIC0tZ2l0IGEvR0xJQkMuY3Jvc3MtdGVzdGluZyBiL0dMSUJDLmNyb3NzLXRlc3RpbmcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwLi5iNjdiNDY4NDY2CistLS0gL2Rldi9udWxsCisrKysgYi9HTElCQy5jcm9zcy10ZXN0aW5nCitAQCAtMCwwICsxLDIwNSBAQAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIG1vZGU6IHRleHQgLSotCisrCisrICAgICAgICAgICAgICAgICAgICAgIENyb3NzLVRlc3RpbmcgV2l0aCBHTElCQworKyAgICAgICAgICAgICAgICAgIEppbSBCbGFuZHkgPGppbWJAY29kZXNvdXJjZXJ5LmNvbT4KKysKKysKKytJbnRyb2R1Y3Rpb24KKysKKytEZXZlbG9wZXJzIHdyaXRpbmcgc29mdHdhcmUgZm9yIGVtYmVkZGVkIHN5c3RlbXMgb2Z0ZW4gdXNlIGEgZGVza3RvcAorK29yIG90aGVyIHNpbWlsYXJseSBjYXBhYmxlIGNvbXB1dGVyIGZvciBkZXZlbG9wbWVudCwgYnV0IG5lZWQgdG8gcnVuCisrdGVzdHMgb24gdGhlIGVtYmVkZGVkIHN5c3RlbSwgb3IgcGVyaGFwcyBvbiBhIHNpbXVsYXRvci4gIFdoZW4KKytjb25maWd1cmVkIGZvciBjcm9zcy1jb21waWxhdGlvbiwgdGhlIHN0b2NrIEdOVSBDIGxpYnJhcnkgc2ltcGx5CisrZGlzYWJsZXMgcnVubmluZyB0ZXN0cyBhbHRvZ2V0aGVyOiB0aGUgY29tbWFuZCAnbWFrZSB0ZXN0cycgYnVpbGRzCisrdGVzdCBwcm9ncmFtcywgYnV0IGRvZXMgbm90IHJ1biB0aGVtLiAgR0xJQkMsIGhvd2V2ZXIsIHByb3ZpZGVzCisrZmFjaWxpdGllcyBmb3IgY29tcGlsaW5nIHRlc3RzIGFuZCBnZW5lcmF0aW5nIGRhdGEgZmlsZXMgb24gdGhlIGJ1aWxkCisrc3lzdGVtLCBidXQgcnVubmluZyB0aGUgdGVzdCBwcm9ncmFtcyB0aGVtc2VsdmVzIG9uIGEgcmVtb3RlIHN5c3RlbSBvcgorK3NpbXVsYXRvci4KKysKKysKKytUZXN0IGVudmlyb25tZW50IHJlcXVpcmVtZW50cworKworK1RoZSB0ZXN0IGVudmlyb25tZW50IG11c3QgbWVldCBjZXJ0YWluIGNvbmRpdGlvbnMgZm9yIEdMSUJDJ3MKKytjcm9zcy10ZXN0aW5nIGZhY2lsaXRpZXMgdG8gd29yazoKKysKKystIFNoYXJlZCBmaWxlc3lzdGVtcy4gIFRoZSAnYnVpbGQnIHN5c3RlbSwgb24gd2hpY2ggeW91IGNvbmZpZ3VyZSBhbmQKKysgIGNvbXBpbGUgR0xJQkMsIGFuZCB0aGUgJ2hvc3QnIHN5c3RlbSwgb24gd2hpY2ggeW91IGludGVuZCB0byBydW4KKysgIEdMSUJDLCBtdXN0IHNoYXJlIGEgZmlsZXN5c3RlbSBjb250YWluaW5nIHRoZSBHTElCQyBidWlsZCBhbmQKKysgIHNvdXJjZSB0cmVlcy4gIEZpbGVzIG11c3QgYXBwZWFyIGF0IHRoZSBzYW1lIHBhdGhzIG9uIGJvdGggc3lzdGVtcy4KKysKKystIFJlbW90ZS1zaGVsbCBsaWtlIGludm9jYXRpb24uICBUaGVyZSBtdXN0IGJlIGEgd2F5IHRvIHJ1biBhIHByb2dyYW0KKysgIG9uIHRoZSBob3N0IHN5c3RlbSBmcm9tIHRoZSBidWlsZCBzeXN0ZW0sIHBhc3NpbmcgaXQgcHJvcGVybHkgcXVvdGVkCisrICBjb21tYW5kLWxpbmUgYXJndW1lbnRzLCBzZXR0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcywgYW5kCisrICBpbmhlcml0aW5nIHRoZSBjYWxsZXIncyBzdGFuZGFyZCBpbnB1dCBhbmQgb3V0cHV0LgorKworKworK1VzYWdlCisrCisrVG8gdXNlIEdMSUJDJ3MgY3Jvc3MtdGVzdGluZyBzdXBwb3J0LCBwcm92aWRlIHZhbHVlcyBmb3IgdGhlCisrZm9sbG93aW5nIE1ha2UgdmFyaWFibGVzIHdoZW4geW91IGludm9rZSAnbWFrZSc6CisrCisrLSBjcm9zcy10ZXN0LXdyYXBwZXIKKysKKysgIFRoaXMgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBjcm9zcy10ZXN0aW5nIHdyYXBwZXIgY29tbWFuZCwgYWxvbmcKKysgIHdpdGggYW55IGFyZ3VtZW50cy4KKysKKystIGNyb3NzLWxvY2FsZWRlZgorKworKyAgVGhpcyBzaG91bGQgYmUgdGhlIG5hbWUgb2YgYSBjcm9zcy1jYXBhYmxlIGxvY2FsZWRlZiBwcm9ncmFtLCBsaWtlCisrICB0aGF0IGluY2x1ZGVkIGluIHRoZSBHTElCQyAnbG9jYWxlZGVmJyBtb2R1bGUsIGFsb25nIHdpdGggYW55CisrICBhcmd1bWVudHMgbmVlZGVkLgorKworK1RoZXNlIGFyZSBlYWNoIGV4cGxhaW5lZCBpbiBkZXRhaWwgYmVsb3cuCisrCisrCisrVGhlIENyb3NzLVRlc3RpbmcgV3JhcHBlcgorKworK1RvIHJ1biB0ZXN0IHByb2dyYW1zIHJlbGlhYmx5LCB0aGUgc3RvY2sgR05VIEMgbGlicmFyeSB0YWtlcyBjYXJlIHRvCisrZW5zdXJlIHRoYXQgdGVzdCBwcm9ncmFtcyB1c2UgdGhlIG5ld2x5IGNvbXBpbGVkIGR5bmFtaWMgbGlua2VyIGFuZAorK3NoYXJlZCBsaWJyYXJpZXMsIGFuZCBuZXZlciB0aGUgaG9zdCBzeXN0ZW0ncyBpbnN0YWxsZWQgbGlicmFyaWVzLiAgVG8KKythY2NvbXBsaXNoIHRoaXMsIGl0IHJ1bnMgdGhlIHRlc3RzIGJ5IGV4cGxpY2l0bHkgaW52b2tpbmcgdGhlIGR5bmFtaWMKKytsaW5rZXIgZnJvbSB0aGUgYnVpbGQgdHJlZSwgcGFzc2luZyBpdCBhIGxpc3Qgb2YgYnVpbGQgdHJlZQorK2RpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3Igc2hhcmVkIGxpYnJhcmllcywgZm9sbG93ZWQgYnkgdGhlIG5hbWUgb2YKKyt0aGUgZXhlY3V0YWJsZSB0byBydW4gYW5kIGl0cyBhcmd1bWVudHMuCisrCisrRm9yIGV4YW1wbGUsIHdoZXJlIG9uZSBtaWdodCBub3JtYWxseSBydW4gYSB0ZXN0IHByb2dyYW0gbGlrZSB0aGlzOgorKworKyAgICAkIC4vdHN0LWZvbyBhcmcxIGFyZzIKKysKKyt0aGUgR05VIEMgbGlicmFyeSBtaWdodCBydW4gdGhhdCBwcm9ncmFtIGxpa2UgdGhpczoKKysKKysgICAgJCAkb2JqZGlyL2VsZi9sZC1saW51eC5zby4zIC0tbGlicmFyeS1wYXRoICRvYmpkaXIgXAorKyAgICAgIC4vdHN0LWZvbyBhcmcxIGFyZzIKKysKKysod2hlcmUgJG9iamRpciBpcyB0aGUgcGF0aCB0byB0aGUgdG9wIG9mIHRoZSBidWlsZCB0cmVlLCBhbmQgdGhlCisrdHJhaWxpbmcgYmFja3NsYXNoIGluZGljYXRlcyBhIGNvbnRpbnVhdGlvbiBvZiB0aGUgY29tbWFuZCkuICBJbiBvdGhlcgorK3dvcmRzLCBlYWNoIHRlc3QgcHJvZ3JhbSBpbnZvY2F0aW9uIGlzICd3cmFwcGVkIHVwJyBpbnNpZGUgYW4gZXhwbGljaXQKKytpbnZvY2F0aW9uIG9mIHRoZSBkeW5hbWljIGxpbmtlciwgd2hpY2ggbXVzdCBpdHNlbGYgZXhlY3V0ZSB0aGUgdGVzdAorK3Byb2dyYW0sIGhhdmluZyBsb2FkZWQgc2hhcmVkIGxpYnJhcmllcyBmcm9tIHRoZSBhcHByb3ByaWF0ZQorK2RpcmVjdG9yaWVzLgorKworK1RvIHN1cHBvcnQgY3Jvc3MtdGVzdGluZywgR0xJQkMgYWxsb3dzIHRoZSBkZXZlbG9wZXIgdG8gb3B0aW9uYWxseQorK3NldCB0aGUgJ2Nyb3NzLXRlc3Qtd3JhcHBlcicgTWFrZSB2YXJpYWJsZSB0byBhbm90aGVyIHdyYXBwZXIgY29tbWFuZCwKKyt0byB3aGljaCBpdCBwYXNzZXMgdGhlIGVudGlyZSBkeW5hbWljIGxpbmtlciBpbnZvY2F0aW9uIHNob3duIGFib3ZlIGFzCisrYXJndW1lbnRzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBkZXZlbG9wZXIgc3VwcGxpZXMgYSB3cmFwcGVyIG9mCisrJ215LXdyYXBwZXIgaG9zdG5hbWUnLCB0aGVuIEdMSUJDIHdvdWxkIHJ1biB0aGUgdGVzdCBhYm92ZSBhcworK2ZvbGxvd3M6CisrCisrICAgICQgbXktd3JhcHBlciBob3N0bmFtZSBcCisrICAgICAgJG9iamRpci9lbGYvbGQtbGludXguc28uMyAtLWxpYnJhcnktcGF0aCAkb2JqZGlyIFwKKysgICAgICAuL3RzdC1mb28gYXJnMSBhcmcyCisrCisrVGhlICdteS13cmFwcGVyJyBjb21tYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBleGVjdXRpbmcgdGhlIGNvbW1hbmQKKytnaXZlbiBvbiB0aGUgaG9zdCBzeXN0ZW0uCisrCisrU2luY2UgdGVzdHMgYXJlIHJ1biBpbiB2YXJ5aW5nIGRpcmVjdG9yaWVzLCB0aGUgd3JhcHBlciBzaG91bGQgZWl0aGVyCisrYmUgaW4geW91ciBjb21tYW5kIHNlYXJjaCBwYXRoLCBvciAnY3Jvc3MtdGVzdC13cmFwcGVyJyBzaG91bGQgZ2l2ZSBhbgorK2Fic29sdXRlIHBhdGggZm9yIHRoZSB3cmFwcGVyLgorKworK1RoZSB3cmFwcGVyIG11c3QgbWVldCBzZXZlcmFsIHJlcXVpcmVtZW50czoKKysKKystIEl0IG11c3QgcHJlc2VydmUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgQXMgZXhwbGFpbmVkIGFib3ZlLCB0aGUKKysgIGJ1aWxkIGRpcmVjdG9yeSB0cmVlIG11c3QgYmUgdmlzaWJsZSBvbiBib3RoIHRoZSBidWlsZCBhbmQgaG9zdAorKyAgc3lzdGVtcywgYXQgdGhlIHNhbWUgcGF0aC4gIFRoZSB0ZXN0IHdyYXBwZXIgbXVzdCBlbnN1cmUgdGhhdCB0aGUKKysgIGN1cnJlbnQgZGlyZWN0b3J5IGl0IGluaGVyaXRzIGlzIGFsc28gaW5oZXJpdGVkIGJ5IHRoZSBkeW5hbWljCisrICBsaW5rZXIgKGFuZCB0aHVzIHRoZSB0ZXN0IHByb2dyYW0gaXRzZWxmKS4KKysKKystIEl0IG11c3QgcHJlc2VydmUgZW52aXJvbm1lbnQgdmFyaWFibGVzJyB2YWx1ZXMuICBNYW55IEdMSUJDIHRlc3RzCisrICBzZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0ZXN0IHJ1bnM7IGluIG5hdGl2ZSB0ZXN0aW5nLCBpdAorKyAgaW52b2tlcyBwcm9ncmFtcyBsaWtlIHRoaXM6CisrCisrICAgICQgR0NPTlZfUEFUSD0kb2JqZGlyL2ljb252ZGF0YSBcCisrICAgICAgJG9iamRpci9lbGYvbGQtbGludXguc28uMyAtLWxpYnJhcnktcGF0aCAkb2JqZGlyIFwKKysgICAgICAuL3RzdC1mb28gYXJnMSBhcmcyCisrCisrICBXaXRoIHRoZSBjcm9zcy10ZXN0aW5nIHdyYXBwZXIsIHRoYXQgaW52b2NhdGlvbiBiZWNvbWVzOgorKworKyAgICAkIEdDT05WX1BBVEg9JG9iamRpci9pY29udmRhdGEgXAorKyAgICAgIG15LXdyYXBwZXIgaG9zdG5hbWUgXAorKyAgICAgICRvYmpkaXIvZWxmL2xkLWxpbnV4LnNvLjMgLS1saWJyYXJ5LXBhdGggJG9iamRpciBcCisrICAgICAgLi90c3QtZm9vIGFyZzEgYXJnMgorKworKyAgSGVyZSwgJ215LXdyYXBwZXInIG11c3QgZW5zdXJlIHRoYXQgdGhlIHZhbHVlIGl0IHNlZXMgZm9yCisrICAnR0NPTlZfUEFUSCcgd2lsbCBiZSBzZWVuIGJ5IHRoZSBkeW5hbWljIGxpbmtlciwgYW5kIHRodXMgJ3RzdC1mb28nCisrICBpdHNlbGYuICAoVGhlIHdyYXBwZXIgc3VwcGxpZWQgd2l0aCBHTElCQyBzaW1wbHkgcHJlc2VydmVzIHRoZQorKyAgdmFsdWVzIG9mICphbGwqIGVudmlyb21lbnQgdmFyaWFibGVzLCB3aXRoIGEgZml4ZWQgc2V0IG9mCisrICBleGNlcHRpb25zLikKKysKKysgIElmIHlvdXIgd3JhcHBlciBpcyBhIHNoZWxsIHNjcmlwdCwgdGFrZSBjYXJlIHRvIGNvcnJlY3RseSBwcm9wYWdhdGUKKysgIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgY29udGFpbiBzcGFjZXMgYW5kIHNoZWxsCisrICBtZXRhY2hhcmFjdGVycy4KKysKKystIEl0IG11c3QgcGFzcyB0aGUgY29tbWFuZCdzIGFyZ3VtZW50cywgdW5tb2RpZmllZC4gIFRoZSBhcmd1bWVudHMKKysgIHNlZW4gYnkgdGhlIHRlc3QgcHJvZ3JhbSBzaG91bGQgYmUgZXhhY3RseSB0aG9zZSBzZWVuIGJ5IHRoZSB3cmFwcGVyCisrICAoYWZ0ZXIgd2hhdGV2ZXIgYXJndW1lbnRzIGFyZSBnaXZlbiB0byB0aGUgd3JhcHBlciBpdHNlbGYpLiAgVGhlCisrICBHTElCQyB0ZXN0IGZyYW1ld29yayBwZXJmb3JtcyBhbGwgbmVlZGVkIHNoZWxsIHdvcmQgc3BsaXR0aW5nIGFuZAorKyAgZXhwYW5zaW9uICh3aWxkY2FyZCBleHBhbnNpb24sIHBhcmFtZXRlciBzdWJzdGl0dXRpb24sIGFuZCBzbyBvbikKKysgIGJlZm9yZSBpbnZva2luZyB0aGUgd3JhcHBlcjsgZnVydGhlciBleHBhbnNpb24gbWF5IGJyZWFrIHRoZSB0ZXN0cy4KKysKKysKKytUaGUgJ2Nyb3NzLXRlc3Qtc3NoLnNoJyBzY3JpcHQKKysKKytJZiB5b3Ugd2FudCB0byB1c2UgJ3NzaCcgKG9yIHNvbWV0aGluZyBzdWZmaWNpZW50bHkgc2ltaWxhcikgdG8gcnVuCisrdGVzdCBwcm9ncmFtcyBvbiB5b3VyIGhvc3Qgc3lzdGVtLCBHTElCQyBpbmNsdWRlcyBhIHNoZWxsIHNjcmlwdCwKKysnc2NyaXB0cy9jcm9zcy10ZXN0LXNzaC5zaCcsIHdoaWNoIHlvdSBjYW4gdXNlIGFzIHlvdXIgd3JhcHBlcgorK2NvbW1hbmQuICBUaGlzIHNjcmlwdCB0YWtlcyBjYXJlIG9mIHNldHRpbmcgdGhlIHRlc3QgY29tbWFuZCdzIGN1cnJlbnQKKytkaXJlY3RvcnksIHByb3BhZ2F0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlcywgYW5kIGNhcnJ5aW5nCisrY29tbWFuZC1saW5lIGFyZ3VtZW50cywgYWxsIGFjcm9zcyBhbiAnc3NoJyBjb25uZWN0aW9uLiAgWW91IG1heSBldmVuCisrc3VwcGx5IGFuIGFsdGVybmF0aXZlIHRvICdzc2gnIG9uIHRoZSBjb21tYW5kIGxpbmUsIGlmIG5lZWRlZC4KKysKKytGb3IgbW9yZSBkZXRhaWxzLCBwYXNzICdjcm9zcy10ZXN0LXNzaC5zaCcgdGhlICctLWhlbHAnIG9wdGlvbi4KKysKKysKKytUaGUgQ3Jvc3MtQ29tcGlsaW5nIExvY2FsZSBEZWZpbml0aW9uIENvbW1hbmQKKysKKytTb21lIEdMSUJDIHRlc3RzIHJlbHkgb24gbG9jYWxlcyBnZW5lcmF0ZWQgZXNwZWNpYWxseSBmb3IgdGhlIHRlc3QKKytwcm9jZXNzLiAgSW4gYSBuYXRpdmUgY29uZmlndXJhdGlvbiwgdGhlc2UgdGVzdHMgc2ltcGx5IHJ1biB0aGUKKysnbG9jYWxlZGVmJyBjb21tYW5kIGJ1aWx0IGJ5IHRoZSBub3JtYWwgR0xJQkMgYnVpbGQgcHJvY2VzcywKKysnbG9jYWxlL2xvY2FsZWRlZicsIHRvIHByb2Nlc3MgYW5kIGluc3RhbGwgdGhlaXIgbG9jYWxlcy4gIEhvd2V2ZXIsIGluCisrYSBjcm9zcy1jb21waWxpbmcgY29uZmlndXJhdGlvbiwgdGhpcyAnbG9jYWxlZGVmJyBpcyBidWlsdCBmb3IgdGhlCisraG9zdCBzeXN0ZW0sIG5vdCB0aGUgYnVpbGQgc3lzdGVtLCBhbmQgc2luY2UgaXQgcmVxdWlyZXMgcXVpdGUgYSBiaXQKKytvZiBtZW1vcnkgdG8gcnVuICh3ZSBoYXZlIHNlZW4gaXQgZmFpbCBvbiBzeXN0ZW1zIHdpdGggNjRNaUIgb2YKKyttZW1vcnkpLCBpdCBtYXkgbm90IGJlIHByYWN0aWNhbCB0byBydW4gaXQgb24gdGhlIGhvc3Qgc3lzdGVtLgorKworK0lmIHNldCwgR0xJQkMgdXNlcyB0aGUgJ2Nyb3NzLWxvY2FsZWRlZicgTWFrZSB2YXJpYWJsZSBhcyB0aGUgY29tbWFuZAorK3RvIHJ1biBvbiB0aGUgYnVpbGQgc3lzdGVtIHRvIHByb2Nlc3MgYW5kIGluc3RhbGwgbG9jYWxlcy4gIFRoZQorK2xvY2FsZWRlZiBwcm9ncmFtIGJ1aWx0IGZyb20gdGhlIEdMSUJDICdsb2NhbGVkZWYnIG1vZHVsZSBpcworK3N1aXRhYmxlLgorKworK1RoZSB2YWx1ZSBvZiAnY3Jvc3MtbG9jYWxlZGVmJyBtYXkgYWxzbyBpbmNsdWRlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMKKyt0byBiZSBwYXNzZWQgdG8gdGhlIHByb2dyYW07IGlmIHlvdSBhcmUgdXNpbmcgR0xJQkMncyAnbG9jYWxlZGVmJywKKyt5b3UgbWF5IGluY2x1ZGUgZW5kaWFubmVzcyBhbmQgJ3VpbnQzMl90JyBhbGlnbm1lbnQgYXJndW1lbnRzIGhlcmUuCisrCisrCisrRXhhbXBsZQorKworK0luIGRldmVsb3BpbmcgR0xJQkMncyBjcm9zcy10ZXN0aW5nIGZhY2lsaXR5LCB3ZSBpbnZva2VkICdtYWtlJyB3aXRoCisrdGhlIGZvbGxvd2luZyBzY3JpcHQ6CisrCisrICAgICMhL2Jpbi9zaAorKworKyAgICBzcmNkaXI9Li4uCisrICAgIHRlc3RfaG9zdG5hbWU9Li4uCisrICAgIGxvY2FsZWRlZmRpcj0uLi4KKysgICAgY3Jvc3NfZ3h4PS4uLi1nKysKKysKKysgICAgd3JhcHBlcj0iJHNyY2Rpci9zY3JpcHRzL2Nyb3NzLXRlc3Qtc3NoLnNoICR0ZXN0X2hvc3RuYW1lIgorKyAgICBsb2NhbGVkZWY9IiRsb2NhbGVkZWZkaXIvbG9jYWxlZGVmIC0tbGl0dGxlLWVuZGlhbiAtLXVpbnQzMi1hbGlnbj00IgorKworKyAgICBtYWtlIGNyb3NzLXRlc3Qtd3JhcHBlcj0iJHdyYXBwZXIiIFwKKysgICAgICAgICBjcm9zcy1sb2NhbGVkZWY9IiRsb2NhbGVkZWYiIFwKKysgICAgICAgICBDWFg9IiRjcm9zc19neHgiIFwKKysgICAgICAgICAiJEAiCisrCisrCisrT3RoZXIgQ3Jvc3MtVGVzdGluZyBDb25jZXJucworKworK0hlcmUgYXJlIG5vdGVzIG9uIHNvbWUgb3RoZXIgaXNzdWVzIHdoaWNoIHlvdSBtYXkgZW5jb3VudGVyIGluIHJ1bm5pbmcKKyt0aGUgR0xJQkMgdGVzdHMgaW4gYSBjcm9zcy1jb21waWxpbmcgZW52aXJvbm1lbnQ6CisrCisrLSBTb21lIHRlc3RzIHJlcXVpcmUgYSBDKysgY3Jvc3MtY29tcGlsZXI7IHlvdSBzaG91bGQgc2V0IHRoZSAnQ1hYJworKyAgTWFrZSB2YXJpYWJsZSB0byB0aGUgbmFtZSBvZiBhbiBhcHByb3ByaWF0ZSBjcm9zcy1jb21waWxlci4KKysKKystIFNvbWUgdGVzdHMgcmVxdWlyZSBhY2Nlc3MgdG8gbGlic3RkYysrLnNvLjYgYW5kIGxpYmdjY19zLnNvLjE7IHdlCisrICBzaW1wbHkgcGxhY2UgY29waWVzIG9mIHRoZXNlIGxpYnJhcmllcyBpbiB0aGUgdG9wIEdMSUJDIGJ1aWxkCisrICBkaXJlY3RvcnkuCistLSAKKzIuMTMuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxOC1lZ2xpYmMtQ3Jvc3MtYnVpbGRpbmctYW5kLXRlc3RpbmctaW5zdHJ1Y3Rpb25zLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTgtZWdsaWJjLUNyb3NzLWJ1aWxkaW5nLWFuZC10ZXN0aW5nLWluc3RydWN0aW9ucy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVjMDFmMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxOC1lZ2xpYmMtQ3Jvc3MtYnVpbGRpbmctYW5kLXRlc3RpbmctaW5zdHJ1Y3Rpb25zLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjE5ICswLDAgQEAKLUZyb20gZGY5NmQ2YjYxYmI2MGYxM2NkM2Q0OTg5ZDFhZmM1NmQ3MDVmNGEzMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjQyOjU4ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMTgvMjZdIGVnbGliYzogQ3Jvc3MgYnVpbGRpbmcgYW5kIHRlc3RpbmcgaW5zdHJ1Y3Rpb25zCi0KLVBvcnRlZCBmcm9tIGVnbGliYwotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBHTElCQy5jcm9zcy1idWlsZGluZyB8IDM4MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKLSBHTElCQy5jcm9zcy10ZXN0aW5nICB8IDIwNSArKysrKysrKysrKysrKysrKysrKysrKysrKysKLSAyIGZpbGVzIGNoYW5nZWQsIDU4OCBpbnNlcnRpb25zKCspCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IEdMSUJDLmNyb3NzLWJ1aWxkaW5nCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IEdMSUJDLmNyb3NzLXRlc3RpbmcKLQotZGlmZiAtLWdpdCBhL0dMSUJDLmNyb3NzLWJ1aWxkaW5nIGIvR0xJQkMuY3Jvc3MtYnVpbGRpbmcKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi5lNmUwZGExCi0tLS0gL2Rldi9udWxsCi0rKysgYi9HTElCQy5jcm9zcy1idWlsZGluZwotQEAgLTAsMCArMSwzODMgQEAKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBtb2RlOiB0ZXh0IC0qLQotKwotKyAgICAgICAgICAgICAgICAgICAgICAgIENyb3NzLUNvbXBpbGluZyBHTElCQwotKyAgICAgICAgICAgICAgICAgIEppbSBCbGFuZHkgPGppbWJAY29kZXNvdXJjZXJ5LmNvbT4KLSsKLSsKLStJbnRyb2R1Y3Rpb24KLSsKLStNb3N0IEdOVSB0b29scyBoYXZlIGEgc2ltcGxlIGJ1aWxkIHByb2NlZHVyZTogeW91IHJ1biB0aGVpcgotKydjb25maWd1cmUnIHNjcmlwdCwgYW5kIHRoZW4geW91IHJ1biAnbWFrZScuICBVbmZvcnR1bmF0ZWx5LCB0aGUKLStwcm9jZXNzIG9mIGNyb3NzLWNvbXBpbGluZyB0aGUgR05VIEMgbGlicmFyeSBpcyBxdWl0ZSBhIGJpdCBtb3JlCi0raW52b2x2ZWQ6Ci0rCi0rMSkgQnVpbGQgYSBjcm9zcy1jb21waWxlciwgd2l0aCBjZXJ0YWluIGZhY2lsaXRpZXMgZGlzYWJsZWQuCi0rCi0rMikgQ29uZmlndXJlIHRoZSBDIGxpYnJhcnkgdXNpbmcgdGhlIGNvbXBpbGVyIHlvdSBidWlsdCBpbiBzdGVwIDEpLgotKyAgIEJ1aWxkIGEgZmV3IG9mIHRoZSBDIHJ1bi10aW1lIG9iamVjdCBmaWxlcywgYnV0IG5vdCB0aGUgcmVzdCBvZiB0aGUKLSsgICBsaWJyYXJ5LiAgSW5zdGFsbCB0aGUgbGlicmFyeSdzIGhlYWRlciBmaWxlcyBhbmQgdGhlIHJ1bi10aW1lCi0rICAgb2JqZWN0IGZpbGVzLCBhbmQgY3JlYXRlIGEgZHVtbXkgbGliYy5zby4KLSsKLSszKSBCdWlsZCBhIHNlY29uZCBjcm9zcy1jb21waWxlciwgdXNpbmcgdGhlIGhlYWRlciBmaWxlcyBhbmQgb2JqZWN0Ci0rICAgZmlsZXMgeW91IGluc3RhbGxlZCBpbiBzdGVwIDIuCi0rCi0rNCkgQ29uZmlndXJlLCBidWlsZCwgYW5kIGluc3RhbGwgYSBmcmVzaCBDIGxpYnJhcnksIHVzaW5nIHRoZSBjb21waWxlcgotKyAgIGJ1aWx0IGluIHN0ZXAgMy4KLSsKLSs1KSBCdWlsZCBhIHRoaXJkIGNyb3NzLWNvbXBpbGVyLCBiYXNlZCBvbiB0aGUgQyBsaWJyYXJ5IGJ1aWx0IGluIHN0ZXAgNC4KLSsKLStUaGUgcmVhc29uIGZvciB0aGlzIGNvbXBsZXhpdHkgaXMgdGhhdCwgYWx0aG91Z2ggR0NDIGFuZCB0aGUgR05VIEMKLStsaWJyYXJ5IGFyZSBkaXN0cmlidXRlZCBzZXBhcmF0ZWx5LCB0aGV5IGFyZSBub3QgYWN0dWFsbHkgaW5kZXBlbmRlbnQKLStvZiBlYWNoIG90aGVyOiBHQ0MgcmVxdWlyZXMgdGhlIEMgbGlicmFyeSdzIGhlYWRlcnMgYW5kIHNvbWUgb2JqZWN0Ci0rZmlsZXMgdG8gY29tcGlsZSBpdHMgb3duIGxpYnJhcmllcywgd2hpbGUgdGhlIEMgbGlicmFyeSBkZXBlbmRzIG9uCi0rR0NDJ3MgbGlicmFyaWVzLiAgR0xJQkMgaW5jbHVkZXMgZmVhdHVyZXMgYW5kIGJ1ZyBmaXhlcyB0byB0aGUgc3RvY2sKLStHTlUgQyBsaWJyYXJ5IHRoYXQgc2ltcGxpZnkgdGhpcyBwcm9jZXNzLCBidXQgdGhlIGZ1bmRhbWVudGFsCi0raW50ZXJkZXBlbmRlbmN5IHN0YW5kcy4KLSsKLStJbiB0aGlzIGRvY3VtZW50LCB3ZSBleHBsYWluIGhvdyB0byBjcm9zcy1jb21waWxlIGFuIEdMSUJDL0dDQyBwYWlyCi0rZnJvbSBzb3VyY2UuICBPdXIgaW50ZW5kZWQgYXVkaWVuY2UgaXMgZGV2ZWxvcGVycyB3aG8gYXJlIGFscmVhZHkKLStmYW1pbGlhciB3aXRoIHRoZSBHTlUgdG9vbGNoYWluIGFuZCBjb21mb3J0YWJsZSB3b3JraW5nIHdpdGgKLStjcm9zcy1kZXZlbG9wbWVudCB0b29scy4gIFdoaWxlIHdlIGRvIHByZXNlbnQgYSB3b3JrZWQgZXhhbXBsZSB0bwotK2FjY29tcGFueSB0aGUgZXhwbGFuYXRpb24sIGZvciBjbGFyaXR5J3Mgc2FrZSB3ZSBkbyBub3QgY292ZXIgbWFueSBvZgotK3RoZSBvcHRpb25zIGF2YWlsYWJsZSB0byBjcm9zcy10b29sY2hhaW4gdXNlcnMuCi0rCi0rCi0rUHJlcGFyYXRpb24KLSsKLStHTElCQyByZXF1aXJlcyByZWNlbnQgdmVyc2lvbnMgb2YgdGhlIEdOVSBiaW51dGlscywgR0NDLCBhbmQgdGhlCi0rTGludXgga2VybmVsLiAgVGhlIHdlYiBwYWdlIDxodHRwOi8vd3d3LmVnbGliYy5vcmcvcHJlcmVxdWlzaXRlcz4KLStkb2N1bWVudHMgdGhlIGN1cnJlbnQgcmVxdWlyZW1lbnRzLCBhbmQgbGlzdHMgcGF0Y2hlcyBuZWVkZWQgZm9yCi0rY2VydGFpbiB0YXJnZXQgYXJjaGl0ZWN0dXJlcy4gIEFzIG9mIHRoaXMgd3JpdGluZywgdGhlc2UgYnVpbGQKLStpbnN0cnVjdGlvbnMgaGF2ZSBiZWVuIHRlc3RlZCB3aXRoIGJpbnV0aWxzIDIuMjIuNTEsIEdDQyA0LjYuMiwKLSthbmQgTGludXggMy4xLgotKwotK0ZpcnN0LCBsZXQncyBzZXQgc29tZSB2YXJpYWJsZXMsIHRvIHNpbXBsaWZ5IGxhdGVyIGNvbW1hbmRzLiAgV2UnbGwKLStidWlsZCBHTElCQyBhbmQgR0NDIGZvciBhbiBBUk0gdGFyZ2V0LCBrbm93biB0byB0aGUgTGludXgga2VybmVsCi0rYXMgJ2FybScsIGFuZCB3ZSdsbCBkbyB0aGUgYnVpbGQgb24gYW4gSW50ZWwgeDg2XzY0IExpbnV4IGJveDoKLSsKLSsgICAgJCBidWlsZD14ODZfNjQtcGMtbGludXgtZ251Ci0rICAgICQgaG9zdD0kYnVpbGQKLSsgICAgJCB0YXJnZXQ9YXJtLW5vbmUtbGludXgtZ251ZWFiaQotKyAgICAkIGxpbnV4X2FyY2g9YXJtCi0rCi0rV2UncmUgdXNpbmcgdGhlIGFmb3JlbWVudGlvbmVkIHZlcnNpb25zIG9mIEJpbnV0aWxzLCBHQ0MsIGFuZCBMaW51eDoKLSsKLSsgICAgJCBiaW51dGlsc3Y9YmludXRpbHMtMi4yMi41MQotKyAgICAkIGdjY3Y9Z2NjLTQuNi4yCi0rICAgICQgbGludXh2PWxpbnV4LTMuMQotKwotK1dlJ3JlIGNhcnJ5aW5nIG91dCB0aGUgZW50aXJlIHByb2Nlc3MgdW5kZXIgJ34vY3Jvc3MtYnVpbGQnLCB3aGljaAotK2NvbnRhaW5zIHVucGFja2VkIHNvdXJjZSB0cmVlcyBmb3IgYmludXRpbHMsIGdjYywgYW5kIGxpbnV4IGtlcm5lbCwKLSthbG9uZyB3aXRoIEdMSUJDIHN2biB0cnVuayAod2hpY2ggY2FuIGJlIGNoZWNrZWQtb3V0IHdpdGgKLSsnc3ZuIGNvIGh0dHA6Ly93d3cuZWdsaWJjLm9yZy9zdm4vdHJ1bmsgZWdsaWJjJyk6Ci0rCi0rICAgICQgdG9wPSRIT01FL2Nyb3NzLWJ1aWxkLyR0YXJnZXQKLSsgICAgJCBzcmM9JEhPTUUvY3Jvc3MtYnVpbGQvc3JjCi0rICAgICQgbHMgJHNyYwotKyAgICBiaW51dGlscy0yLjIyLjUxICBnbGliYyAgZ2NjLTQuNi4yICBsaW51eC0zLjEKLSsKLStXZSdyZSBnb2luZyB0byBwbGFjZSBvdXIgYnVpbGQgZGlyZWN0b3JpZXMgaW4gYSBzdWJkaXJlY3RvcnkgJ29iaicsCi0rd2UnbGwgaW5zdGFsbCB0aGUgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluIGluICd0b29scycsIGFuZCB3ZSdsbAotK3BsYWNlIG91ciBzeXNyb290IChjb250YWluaW5nIGZpbGVzIHRvIGJlIGluc3RhbGxlZCBvbiB0aGUgdGFyZ2V0Ci0rc3lzdGVtKSBpbiAnc3lzcm9vdCc6Ci0rCi0rICAgICQgb2JqPSR0b3Avb2JqCi0rICAgICQgdG9vbHM9JHRvcC90b29scwotKyAgICAkIHN5c3Jvb3Q9JHRvcC9zeXNyb290Ci0rCi0rCi0rQmludXRpbHMKLSsKLStDb25maWd1cmluZyBhbmQgYnVpbGRpbmcgYmludXRpbHMgZm9yIHRoZSB0YXJnZXQgaXMgc3RyYWlnaHRmb3J3YXJkOgotKwotKyAgICAkIG1rZGlyIC1wICRvYmovYmludXRpbHMKLSsgICAgJCBjZCAkb2JqL2JpbnV0aWxzCi0rICAgICQgJHNyYy8kYmludXRpbHN2L2NvbmZpZ3VyZSBcCi0rICAgID4gICAgIC0tdGFyZ2V0PSR0YXJnZXQgXAotKyAgICA+ICAgICAtLXByZWZpeD0kdG9vbHMgXAotKyAgICA+ICAgICAtLXdpdGgtc3lzcm9vdD0kc3lzcm9vdAotKyAgICAkIG1ha2UKLSsgICAgJCBtYWtlIGluc3RhbGwKLSsKLSsKLStUaGUgRmlyc3QgR0NDCi0rCi0rRm9yIG91ciB3b3JrLCB3ZSBuZWVkIGEgY3Jvc3MtY29tcGlsZXIgdGFyZ2V0aW5nIGFuIEFSTSBMaW51eAotK3N5c3RlbS4gIEhvd2V2ZXIsIHRoYXQgY29uZmlndXJhdGlvbiBpbmNsdWRlcyB0aGUgc2hhcmVkIGxpYnJhcnkKLSsnbGliZ2NjX3Muc28nLCB3aGljaCBpcyBjb21waWxlZCBhZ2FpbnN0IHRoZSBHTElCQyBoZWFkZXJzICh3aGljaCB3ZQotK2hhdmVuJ3QgaW5zdGFsbGVkIHlldCkgYW5kIGxpbmtlZCBhZ2FpbnN0ICdsaWJjLnNvJyAod2hpY2ggd2UgaGF2ZW4ndAotK2J1aWx0IHlldCkuCi0rCi0rRm9ydHVuYXRlbHksIHRoZXJlIGFyZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEdDQyB3aGljaCB0ZWxsIGl0IG5vdAotK3RvIGJ1aWxkICdsaWJnY2Nfcy5zbycuICBUaGUgJy0td2l0aG91dC1oZWFkZXJzJyBvcHRpb24gaXMgc3VwcG9zZWQgdG8KLSt0YWtlIGNhcmUgb2YgdGhpcywgYnV0IGl0cyBpbXBsZW1lbnRhdGlvbiBpcyBpbmNvbXBsZXRlLCBzbyB5b3UgbXVzdAotK2Fsc28gY29uZmlndXJlIHdpdGggdGhlICctLXdpdGgtbmV3bGliJyBvcHRpb24uICBXaGlsZSAnLS13aXRoLW5ld2xpYicKLSthcHBlYXJzIHRvIG1lYW4gIlVzZSB0aGUgTmV3bGliIEMgbGlicmFyeSIsIGl0cyBlZmZlY3QgaXMgdG8gdGVsbCB0aGUKLStHQ0MgYnVpbGQgbWFjaGluZXJ5LCAiRG9uJ3QgYXNzdW1lIHRoZXJlIGlzIGEgQyBsaWJyYXJ5IGF2YWlsYWJsZS4iCi0rCi0rV2UgYWxzbyBuZWVkIHRvIGRpc2FibGUgc29tZSBvZiB0aGUgbGlicmFyaWVzIHRoYXQgd291bGQgbm9ybWFsbHkgYmUKLStidWlsdCBhbG9uZyB3aXRoIEdDQywgYW5kIHNwZWNpZnkgdGhhdCBvbmx5IHRoZSBjb21waWxlciBmb3IgdGhlIEMKLStsYW5ndWFnZSBpcyBuZWVkZWQuCi0rCi0rU28sIHdlIGNyZWF0ZSBhIGJ1aWxkIGRpcmVjdG9yeSwgY29uZmlndXJlLCBtYWtlLCBhbmQgaW5zdGFsbC4KLSsKLSsgICAgJCBta2RpciAtcCAkb2JqL2djYzEKLSsgICAgJCBjZCAkb2JqL2djYzEKLSsgICAgJCAkc3JjLyRnY2N2L2NvbmZpZ3VyZSBcCi0rICAgID4gICAgIC0tdGFyZ2V0PSR0YXJnZXQgXAotKyAgICA+ICAgICAtLXByZWZpeD0kdG9vbHMgXAotKyAgICA+ICAgICAtLXdpdGhvdXQtaGVhZGVycyAtLXdpdGgtbmV3bGliIFwKLSsgICAgPiAgICAgLS1kaXNhYmxlLXNoYXJlZCAtLWRpc2FibGUtdGhyZWFkcyAtLWRpc2FibGUtbGlic3NwIFwKLSsgICAgPiAgICAgLS1kaXNhYmxlLWxpYmdvbXAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgLS1kaXNhYmxlLWxpYnF1YWRtYXRoIFwKLSsgICAgPiAgICAgLS1kaXNhYmxlLWRlY2ltYWwtZmxvYXQgLS1kaXNhYmxlLWxpYmZmaSBcCi0rICAgID4gICAgIC0tZW5hYmxlLWxhbmd1YWdlcz1jCi0rICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UKLSsgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZSBpbnN0YWxsCi0rCi0rCi0rTGludXggS2VybmVsIEhlYWRlcnMKLSsKLStUbyBjb25maWd1cmUgR0xJQkMsIHdlIGFsc28gbmVlZCBMaW51eCBrZXJuZWwgaGVhZGVycyBpbiBwbGFjZS4KLStGb3J0dW5hdGVseSwgdGhlIExpbnV4IG1ha2VmaWxlcyBoYXZlIGEgdGFyZ2V0IHRoYXQgaW5zdGFsbHMgdGhlbSBmb3IKLSt1cy4gIFNpbmNlIHRoZSBwcm9jZXNzIGRvZXMgbW9kaWZ5IHRoZSBzb3VyY2UgdHJlZSBhIGJpdCwgd2UgbWFrZSBhCi0rY29weSBmaXJzdDoKLSsKLSsgICAgJCBjcCAtciAkc3JjLyRsaW51eHYgJG9iai9saW51eAotKyAgICAkIGNkICRvYmovbGludXgKLSsKLStOb3cgd2UncmUgcmVhZHkgdG8gaW5zdGFsbCB0aGUgaGVhZGVycyBpbnRvIHRoZSBzeXNyb290OgotKwotKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBcCi0rICAgID4gbWFrZSBoZWFkZXJzX2luc3RhbGwgXAotKyAgICA+ICAgICAgQVJDSD0kbGludXhfYXJjaCBDUk9TU19DT01QSUxFPSR0YXJnZXQtIFwKLSsgICAgPiAgICAgIElOU1RBTExfSERSX1BBVEg9JHN5c3Jvb3QvdXNyCi0rCi0rCi0rR0xJQkMgSGVhZGVycyBhbmQgUHJlbGltaW5hcnkgT2JqZWN0cwotKwotK1VzaW5nIHRoZSBjcm9zcy1jb21waWxlciB3ZSd2ZSBqdXN0IGJ1aWx0LCB3ZSBjYW4gbm93IGNvbmZpZ3VyZSBHTElCQwotK3dlbGwgZW5vdWdoIHRvIGluc3RhbGwgdGhlIGhlYWRlcnMgYW5kIGJ1aWxkIHRoZSBvYmplY3QgZmlsZXMgdGhhdCB0aGUKLStmdWxsIGNyb3NzLWNvbXBpbGVyIHdpbGwgbmVlZDoKLSsKLSsgICAgJCBta2RpciAtcCAkb2JqL2dsaWJjLWhlYWRlcnMKLSsgICAgJCBjZCAkb2JqL2dsaWJjLWhlYWRlcnMKLSsgICAgJCBCVUlMRF9DQz1nY2MgXAotKyAgICA+IENDPSR0b29scy9iaW4vJHRhcmdldC1nY2MgXAotKyAgICA+IENYWD0kdG9vbHMvYmluLyR0YXJnZXQtZysrIFwKLSsgICAgPiBBUj0kdG9vbHMvYmluLyR0YXJnZXQtYXIgXAotKyAgICA+IFJBTkxJQj0kdG9vbHMvYmluLyR0YXJnZXQtcmFubGliIFwKLSsgICAgPiAkc3JjL2dsaWJjL2xpYmMvY29uZmlndXJlIFwKLSsgICAgPiAgICAgLS1wcmVmaXg9L3VzciBcCi0rICAgID4gICAgIC0td2l0aC1oZWFkZXJzPSRzeXNyb290L3Vzci9pbmNsdWRlIFwKLSsgICAgPiAgICAgLS1idWlsZD0kYnVpbGQgXAotKyAgICA+ICAgICAtLWhvc3Q9JHRhcmdldCBcCi0rICAgID4gICAgIC0tZGlzYWJsZS1wcm9maWxlIC0td2l0aG91dC1nZCAtLXdpdGhvdXQtY3ZzIFwKLSsgICAgPiAgICAgLS1lbmFibGUtYWRkLW9ucz1ucHRsLGxpYmlkbiwuLi9wb3J0cwotKwotK1RoZSBvcHRpb24gJy0tcHJlZml4PS91c3InIG1heSBsb29rIHN0cmFuZ2UsIGJ1dCB5b3Ugc2hvdWxkIG5ldmVyCi0rY29uZmlndXJlIEdMSUJDIHdpdGggYSBwcmVmaXggb3RoZXIgdGhhbiAnL3Vzcic6IGluIHZhcmlvdXMgcGxhY2VzLAotK0dMSUJDJ3MgYnVpbGQgc3lzdGVtIGNoZWNrcyB3aGV0aGVyIHRoZSBwcmVmaXggaXMgJy91c3InLCBhbmQgZG9lcwotK3NwZWNpYWwgaGFuZGxpbmcgb25seSBpZiB0aGF0IGlzIHRoZSBjYXNlLiAgVW5sZXNzIHlvdSB1c2UgdGhpcwotK3ByZWZpeCwgeW91IHdpbGwgZ2V0IGEgc3lzcm9vdCB0aGF0IGRvZXMgbm90IHVzZSB0aGUgc3RhbmRhcmQgTGludXgKLStkaXJlY3RvcnkgbGF5b3V0cyBhbmQgY2Fubm90IGJlIHVzZWQgYXMgYSBiYXNpcyBmb3IgdGhlIHJvb3QKLStmaWxlc3lzdGVtIG9uIHlvdXIgdGFyZ2V0IHN5c3RlbSBjb21wYXRpYmx5IHdpdGggbm9ybWFsIEdMSUJDCi0raW5zdGFsbGF0aW9ucy4KLSsKLStUaGUgJy0td2l0aC1oZWFkZXJzJyBvcHRpb24gdGVsbHMgR0xJQkMgd2hlcmUgdGhlIExpbnV4IGhlYWRlcnMgaGF2ZQotK2JlZW4gaW5zdGFsbGVkLgotKwotK1RoZSAnLS1lbmFibGUtYWRkLW9ucz1ucHRsLGxpYmlkbiwuLi9wb3J0cycgb3B0aW9uIHRlbGxzIEdMSUJDIHRvIGxvb2sKLStmb3IgdGhlIGxpc3RlZCBnbGliYyBhZGQtb25zLiBNb3N0IG5vdGFibHkgdGhlIHBvcnRzIGFkZC1vbiAobG9jYXRlZAotK2p1c3QgYWJvdmUgdGhlIGxpYmMgc291cmNlcyBpbiB0aGUgR0xJQkMgc3ZuIHRyZWUpIGlzIHJlcXVpcmVkIHRvCi0rc3VwcG9ydCBBUk0gdGFyZ2V0cy4KLSsKLStXZSBjYW4gbm93IHVzZSB0aGUgJ2luc3RhbGwtaGVhZGVycycgbWFrZWZpbGUgdGFyZ2V0IHRvIGluc3RhbGwgdGhlCi0raGVhZGVyczoKLSsKLSsgICAgJCBtYWtlIGluc3RhbGwtaGVhZGVycyBpbnN0YWxsX3Jvb3Q9JHN5c3Jvb3QgXAotKyAgICA+ICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwtYm9vdHN0cmFwLWhlYWRlcnM9eWVzCi0rCi0rVGhlICdpbnN0YWxsX3Jvb3QnIHZhcmlhYmxlIGluZGljYXRlcyB3aGVyZSB0aGUgZmlsZXMgc2hvdWxkIGFjdHVhbGx5Ci0rYmUgaW5zdGFsbGVkOyBpdHMgdmFsdWUgaXMgdHJlYXRlZCBhcyB0aGUgcGFyZW50IG9mIHRoZSAnLS1wcmVmaXgnCi0rZGlyZWN0b3J5IHdlIHBhc3NlZCB0byB0aGUgY29uZmlndXJlIHNjcmlwdCwgc28gdGhlIGhlYWRlcnMgd2lsbCBnbyBpbgotKyckc3lzcm9vdC91c3IvaW5jbHVkZScuICBUaGUgJ2luc3RhbGwtYm9vdHN0cmFwLWhlYWRlcnMnIHZhcmlhYmxlCi0rcmVxdWVzdHMgc3BlY2lhbCBoYW5kbGluZyBmb3IgY2VydGFpbiB0cmlja3kgaGVhZGVyIGZpbGVzLgotKwotK05leHQsIHRoZXJlIGFyZSBhIGZldyBvYmplY3QgZmlsZXMgbmVlZGVkIHRvIGxpbmsgc2hhcmVkIGxpYnJhcmllcywKLSt3aGljaCB3ZSBidWlsZCBhbmQgaW5zdGFsbCBieSBoYW5kOgotKwotKyAgICAkIG1rZGlyIC1wICRzeXNyb290L3Vzci9saWIKLSsgICAgJCBtYWtlIGNzdS9zdWJkaXJfbGliCi0rICAgICQgY3AgY3N1L2NydDEubyBjc3UvY3J0aS5vIGNzdS9jcnRuLm8gJHN5c3Jvb3QvdXNyL2xpYgotKwotK0ZpbmFsbHksICdsaWJnY2Nfcy5zbycgcmVxdWlyZXMgYSAnbGliYy5zbycgdG8gbGluayBhZ2FpbnN0LiAgSG93ZXZlciwKLStzaW5jZSB3ZSB3aWxsIG5ldmVyIGFjdHVhbGx5IGV4ZWN1dGUgaXRzIGNvZGUsIGl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQKLStpdCBjb250YWlucy4gIFNvLCB0cmVhdGluZyAnL2Rldi9udWxsJyBhcyBhIEMgc291cmNlIGZpbGUsIHdlIHByb2R1Y2UKLSthIGR1bW15ICdsaWJjLnNvJyBpbiBvbmUgc3RlcDoKLSsKLSsgICAgJCAkdG9vbHMvYmluLyR0YXJnZXQtZ2NjIC1ub3N0ZGxpYiAtbm9zdGFydGZpbGVzIC1zaGFyZWQgLXggYyAvZGV2L251bGwgXAotKyAgICA+ICAgICAgICAgICAgICAgICAgICAgICAgLW8gJHN5c3Jvb3QvdXNyL2xpYi9saWJjLnNvCi0rCi0rCi0rVGhlIFNlY29uZCBHQ0MKLSsKLStXaXRoIHRoZSBHTElCQyBoZWFkZXJzIGFuZCBzZWxlY3RlZCBvYmplY3QgZmlsZXMgaW5zdGFsbGVkLCB3ZSBjYW4KLStub3cgYnVpbGQgYSBHQ0MgdGhhdCBpcyBjYXBhYmxlIG9mIGNvbXBpbGluZyBHTElCQy4gIFdlIGNvbmZpZ3VyZSwKLStidWlsZCwgYW5kIGluc3RhbGwgdGhlIHNlY29uZCBHQ0MsIGFnYWluIGJ1aWxkaW5nIG9ubHkgdGhlIEMgY29tcGlsZXIsCi0rYW5kIGF2b2lkaW5nIGxpYnJhcmllcyB3ZSB3b24ndCB1c2U6Ci0rCi0rICAgICQgbWtkaXIgLXAgJG9iai9nY2MyCi0rICAgICQgY2QgJG9iai9nY2MyCi0rICAgICQgJHNyYy8kZ2Njdi9jb25maWd1cmUgXAotKyAgICA+ICAgICAtLXRhcmdldD0kdGFyZ2V0IFwKLSsgICAgPiAgICAgLS1wcmVmaXg9JHRvb2xzIFwKLSsgICAgPiAgICAgLS13aXRoLXN5c3Jvb3Q9JHN5c3Jvb3QgXAotKyAgICA+ICAgICAtLWRpc2FibGUtbGlic3NwIC0tZGlzYWJsZS1saWJnb21wIC0tZGlzYWJsZS1saWJtdWRmbGFwIFwKLSsgICAgPiAgICAgLS1kaXNhYmxlLWxpYmZmaSAtLWRpc2FibGUtbGlicXVhZG1hdGggXAotKyAgICA+ICAgICAtLWVuYWJsZS1sYW5ndWFnZXM9YwotKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlCi0rICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UgaW5zdGFsbAotKwotKwotK0dMSUJDLCBDb21wbGV0ZQotKwotK1dpdGggdGhlIHNlY29uZCBjb21waWxlciBidWlsdCBhbmQgaW5zdGFsbGVkLCB3ZSdyZSBub3cgcmVhZHkgZm9yIHRoZQotK2Z1bGwgR0xJQkMgYnVpbGQ6Ci0rCi0rICAgICQgbWtkaXIgLXAgJG9iai9nbGliYwotKyAgICAkIGNkICRvYmovZ2xpYmMKLSsgICAgJCBCVUlMRF9DQz1nY2MgXAotKyAgICA+IENDPSR0b29scy9iaW4vJHRhcmdldC1nY2MgXAotKyAgICA+IENYWD0kdG9vbHMvYmluLyR0YXJnZXQtZysrIFwKLSsgICAgPiBBUj0kdG9vbHMvYmluLyR0YXJnZXQtYXIgXAotKyAgICA+IFJBTkxJQj0kdG9vbHMvYmluLyR0YXJnZXQtcmFubGliIFwKLSsgICAgPiAkc3JjL2dsaWJjL2xpYmMvY29uZmlndXJlIFwKLSsgICAgPiAgICAgLS1wcmVmaXg9L3VzciBcCi0rICAgID4gICAgIC0td2l0aC1oZWFkZXJzPSRzeXNyb290L3Vzci9pbmNsdWRlIFwKLSsgICAgPiAgICAgLS13aXRoLWtjb25maWc9JG9iai9saW51eC9zY3JpcHRzL2tjb25maWcgXAotKyAgICA+ICAgICAtLWJ1aWxkPSRidWlsZCBcCi0rICAgID4gICAgIC0taG9zdD0kdGFyZ2V0IFwKLSsgICAgPiAgICAgLS1kaXNhYmxlLXByb2ZpbGUgLS13aXRob3V0LWdkIC0td2l0aG91dC1jdnMgXAotKyAgICA+ICAgICAtLWVuYWJsZS1hZGQtb25zPW5wdGwsbGliaWRuLC4uL3BvcnRzCi0rCi0rTm90ZSB0aGUgYWRkaXRpb25hbCAnLS13aXRoLWtjb25maWcnIG9wdGlvbi4gVGhpcyB0ZWxscyBHTElCQyB3aGVyZSB0bwotK2ZpbmQgdGhlIGhvc3QgY29uZmlnIHRvb2xzIHVzZWQgYnkgdGhlIGtlcm5lbCAnbWFrZSBjb25maWcnIGFuZCAnbWFrZQotK21lbnVjb25maWcnLiAgVGhlc2UgdG9vbHMgY2FuIGJlIHJlLXVzZWQgYnkgR0xJQkMgZm9yIGl0cyBvd24gJ21ha2UKLSsqY29uZmlnJyBzdXBwb3J0LCB3aGljaCB3aWxsIGNyZWF0ZSAnb3B0aW9uLWdyb3Vwcy5jb25maWcnIGZvciB5b3UuCi0rQnV0IGZpcnN0IG1ha2Ugc3VyZSB0aG9zZSB0b29scyBoYXZlIGJlZW4gYnVpbHQgYnkgcnVubmluZyBzb21lCi0rZHVtbXkgJ21ha2UgKmNvbmZpZycgY2FsbHMgaW4gdGhlIGtlcm5lbCBkaXJlY3Rvcnk6Ci0rCi0rICAgICQgY2QgJG9iai9saW51eAotKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlIGNvbmZpZyBcCi0rICAgID4gICAgICBBUkNIPSRsaW51eF9hcmNoIENST1NTX0NPTVBJTEU9JHRhcmdldC0gXAotKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlIG1lbnVjb25maWcgXAotKyAgICA+ICAgICAgQVJDSD0kbGludXhfYXJjaCBDUk9TU19DT01QSUxFPSR0YXJnZXQtIFwKLSsKLStOb3cgd2UgY2FuIGNvbmZpZ3VyZSBhbmQgYnVpbGQgdGhlIGZ1bGwgR0xJQkM6Ci0rCi0rICAgICQgY2QgJG9iai9nbGliYwotKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlIGRlZmNvbmZpZwotKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlIG1lbnVjb25maWcKLSsgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZQotKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlIGluc3RhbGwgaW5zdGFsbF9yb290PSRzeXNyb290Ci0rCi0rQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBhIGNvbXBsZXRlIEdMSUJDIGluc3RhbGxhdGlvbiBpbiAnJHN5c3Jvb3QnLAotK3dpdGggaGVhZGVyIGZpbGVzLCBsaWJyYXJ5IGZpbGVzLCBhbmQgbW9zdCBvZiB0aGUgQyBydW50aW1lIHN0YXJ0dXAKLStmaWxlcyBpbiBwbGFjZS4KLSsKLSsKLStUaGUgVGhpcmQgR0NDCi0rCi0rRmluYWxseSwgd2UgcmVjb21waWxlIEdDQyBhZ2FpbnN0IHRoaXMgZnVsbCBpbnN0YWxsYXRpb24sIGVuYWJsaW5nCi0rd2hhdGV2ZXIgbGFuZ3VhZ2VzIGFuZCBsaWJyYXJpZXMgd2Ugd291bGQgbGlrZSB0byB1c2U6Ci0rCi0rICAgICQgbWtkaXIgLXAgJG9iai9nY2MzCi0rICAgICQgY2QgJG9iai9nY2MzCi0rICAgICQgJHNyYy8kZ2Njdi9jb25maWd1cmUgXAotKyAgICA+ICAgICAtLXRhcmdldD0kdGFyZ2V0IFwKLSsgICAgPiAgICAgLS1wcmVmaXg9JHRvb2xzIFwKLSsgICAgPiAgICAgLS13aXRoLXN5c3Jvb3Q9JHN5c3Jvb3QgXAotKyAgICA+ICAgICAtLWVuYWJsZS1fX2N4YV9hdGV4aXQgXAotKyAgICA+ICAgICAtLWRpc2FibGUtbGlic3NwIC0tZGlzYWJsZS1saWJnb21wIC0tZGlzYWJsZS1saWJtdWRmbGFwIFwKLSsgICAgPiAgICAgLS1lbmFibGUtbGFuZ3VhZ2VzPWMsYysrCi0rICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UKLSsgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZSBpbnN0YWxsCi0rCi0rVGhlICctLWVuYWJsZS1fX2N4YV9hdGV4aXQnIG9wdGlvbiB0ZWxscyBHQ0Mgd2hhdCBzb3J0IG9mIEMrKwotK2Rlc3RydWN0b3Igc3VwcG9ydCB0byBleHBlY3QgZnJvbSB0aGUgQyBsaWJyYXJ5OyBpdCdzIHJlcXVpcmVkIHdpdGgKLStHTElCQy4KLSsKLStBbmQgc2luY2UgR0NDJ3MgaW5zdGFsbGF0aW9uIHByb2Nlc3MgaXNuJ3QgZGVzaWduZWQgdG8gaGVscCBjb25zdHJ1Y3QKLStzeXNyb290IHRyZWVzLCB3ZSBtdXN0IG1hbnVhbGx5IGNvcHkgY2VydGFpbiBsaWJyYXJpZXMgaW50byBwbGFjZSBpbgotK3RoZSBzeXNyb290LgotKwotKyAgICAkIGNwIC1kICR0b29scy8kdGFyZ2V0L2xpYi9saWJnY2Nfcy5zbyogJHN5c3Jvb3QvbGliCi0rICAgICQgY3AgLWQgJHRvb2xzLyR0YXJnZXQvbGliL2xpYnN0ZGMrKy5zbyogJHN5c3Jvb3QvdXNyL2xpYgotKwotKwotK1RyeWluZyBUaGluZ3MgT3V0Ci0rCi0rQXQgdGhpcyBwb2ludCwgJyR0b29scycgY29udGFpbnMgYSBjcm9zcyB0b29sY2hhaW4gcmVhZHkgdG8gdXNlCi0rdGhlIEdMSUJDIGluc3RhbGxhdGlvbiBpbiAnJHN5c3Jvb3QnOgotKwotKyAgICAkIGNhdCA+IGhlbGxvLmMgPDxFT0YKLSsgICAgPiAjaW5jbHVkZSA8c3RkaW8uaD4KLSsgICAgPiBpbnQKLSsgICAgPiBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rICAgID4gewotKyAgICA+ICAgcHV0cyAoIkhlbGxvLCB3b3JsZCEiKTsKLSsgICAgPiAgIHJldHVybiAwOwotKyAgICA+IH0KLSsgICAgPiBFT0YKLSsgICAgJCAkdG9vbHMvYmluLyR0YXJnZXQtZ2NjIC1XYWxsIGhlbGxvLmMgLW8gaGVsbG8KLSsgICAgJCBjYXQgPiBjKystaGVsbG8uY2MgPDxFT0YKLSsgICAgPiAjaW5jbHVkZSA8aW9zdHJlYW0+Ci0rICAgID4gaW50Ci0rICAgID4gbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKyAgICA+IHsKLSsgICAgPiAgIHN0ZDo6Y291dCA8PCAiSGVsbG8sIEMrKyB3b3JsZCEiIDw8IHN0ZDo6ZW5kbDsKLSsgICAgPiAgIHJldHVybiAwOwotKyAgICA+IH0KLSsgICAgPiBFT0YKLSsgICAgJCAkdG9vbHMvYmluLyR0YXJnZXQtZysrIC1XYWxsIGMrKy1oZWxsby5jYyAtbyBjKystaGVsbG8KLSsKLSsKLStXZSBjYW4gdXNlICdyZWFkZWxmJyB0byB2ZXJpZnkgdGhhdCB0aGVzZSBhcmUgaW5kZWVkIGV4ZWN1dGFibGVzIGZvcgotK291ciB0YXJnZXQsIHVzaW5nIG91ciBkeW5hbWljIGxpbmtlcjoKLSsKLSsgICAgJCAkdG9vbHMvYmluLyR0YXJnZXQtcmVhZGVsZiAtaGwgaGVsbG8KLSsgICAgRUxGIEhlYWRlcjoKLSsgICAgLi4uCi0rICAgICAgVHlwZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWEVDIChFeGVjdXRhYmxlIGZpbGUpCi0rICAgICAgTWFjaGluZTogICAgICAgICAgICAgICAgICAgICAgICAgICBBUk0KLSsKLSsgICAgLi4uCi0rICAgIFByb2dyYW0gSGVhZGVyczoKLSsgICAgICBUeXBlICAgICAgICAgICBPZmZzZXQgICBWaXJ0QWRkciAgIFBoeXNBZGRyICAgRmlsZVNpeiBNZW1TaXogIEZsZyBBbGlnbgotKyAgICAgIFBIRFIgICAgICAgICAgIDB4MDAwMDM0IDB4MTAwMDAwMzQgMHgxMDAwMDAzNCAweDAwMTAwIDB4MDAxMDAgUiBFIDB4NAotKyAgICAgIElOVEVSUCAgICAgICAgIDB4MDAwMTM0IDB4MDAwMDgxMzQgMHgwMDAwODEzNCAweDAwMDEzIDB4MDAwMTMgUiAgIDB4MQotKyAgICAgICAgICBbUmVxdWVzdGluZyBwcm9ncmFtIGludGVycHJldGVyOiAvbGliL2xkLWxpbnV4LnNvLjNdCi0rICAgICAgTE9BRCAgICAgICAgICAgMHgwMDAwMDAgMHgwMDAwODAwMCAweDAwMDA4MDAwIDB4MDA0MmMgMHgwMDQyYyBSIEUgMHg4MDAwCi0rICAgIC4uLgotKwotK0xvb2tpbmcgYXQgdGhlIGR5bmFtaWMgc2VjdGlvbiBvZiB0aGUgaW5zdGFsbGVkICdsaWJnY2Nfcy5zbycsIHdlIHNlZQotK3RoYXQgdGhlICdORUVERUQnIGVudHJ5IGZvciB0aGUgQyBsaWJyYXJ5IGRvZXMgaW5jbHVkZSB0aGUgJy42JwotK3N1ZmZpeCwgaW5kaWNhdGluZyB0aGF0IHdhcyBsaW5rZWQgYWdhaW5zdCBvdXIgZnVsbHkgYnVpbGQgR0xJQkMsIGFuZAotK25vdCBvdXIgZHVtbXkgJ2xpYmMuc28nOgotKwotKyAgICAkICR0b29scy9iaW4vJHRhcmdldC1yZWFkZWxmIC1kICRzeXNyb290L2xpYi9saWJnY2Nfcy5zby4xCi0rICAgIER5bmFtaWMgc2VjdGlvbiBhdCBvZmZzZXQgMHgxMDgzYyBjb250YWlucyAyNCBlbnRyaWVzOgotKyAgICAgIFRhZyAgICAgICAgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lL1ZhbHVlCi0rICAgICAweDAwMDAwMDAxIChORUVERUQpICAgICAgICAgICAgICAgICAgICAgU2hhcmVkIGxpYnJhcnk6IFtsaWJjLnNvLjZdCi0rICAgICAweDAwMDAwMDBlIChTT05BTUUpICAgICAgICAgICAgICAgICAgICAgTGlicmFyeSBzb25hbWU6IFtsaWJnY2Nfcy5zby4xXQotKyAgICAuLi4KLSsKLSsKLStBbmQgb24gdGhlIHRhcmdldCBtYWNoaW5lLCB3ZSBjYW4gcnVuIG91ciBwcm9ncmFtczoKLSsKLSsgICAgJCAkc3lzcm9vdC9saWIvbGQuc28uMSAtLWxpYnJhcnktcGF0aCAkc3lzcm9vdC9saWI6JHN5c3Jvb3QvdXNyL2xpYiBcCi0rICAgID4gLi9oZWxsbwotKyAgICBIZWxsbywgd29ybGQhCi0rICAgICQgJHN5c3Jvb3QvbGliL2xkLnNvLjEgLS1saWJyYXJ5LXBhdGggJHN5c3Jvb3QvbGliOiRzeXNyb290L3Vzci9saWIgXAotKyAgICA+IC4vYysrLWhlbGxvCi0rICAgIEhlbGxvLCBDKysgd29ybGQhCi1kaWZmIC0tZ2l0IGEvR0xJQkMuY3Jvc3MtdGVzdGluZyBiL0dMSUJDLmNyb3NzLXRlc3RpbmcKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi5iNjdiNDY4Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9HTElCQy5jcm9zcy10ZXN0aW5nCi1AQCAtMCwwICsxLDIwNSBAQAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIG1vZGU6IHRleHQgLSotCi0rCi0rICAgICAgICAgICAgICAgICAgICAgIENyb3NzLVRlc3RpbmcgV2l0aCBHTElCQwotKyAgICAgICAgICAgICAgICAgIEppbSBCbGFuZHkgPGppbWJAY29kZXNvdXJjZXJ5LmNvbT4KLSsKLSsKLStJbnRyb2R1Y3Rpb24KLSsKLStEZXZlbG9wZXJzIHdyaXRpbmcgc29mdHdhcmUgZm9yIGVtYmVkZGVkIHN5c3RlbXMgb2Z0ZW4gdXNlIGEgZGVza3RvcAotK29yIG90aGVyIHNpbWlsYXJseSBjYXBhYmxlIGNvbXB1dGVyIGZvciBkZXZlbG9wbWVudCwgYnV0IG5lZWQgdG8gcnVuCi0rdGVzdHMgb24gdGhlIGVtYmVkZGVkIHN5c3RlbSwgb3IgcGVyaGFwcyBvbiBhIHNpbXVsYXRvci4gIFdoZW4KLStjb25maWd1cmVkIGZvciBjcm9zcy1jb21waWxhdGlvbiwgdGhlIHN0b2NrIEdOVSBDIGxpYnJhcnkgc2ltcGx5Ci0rZGlzYWJsZXMgcnVubmluZyB0ZXN0cyBhbHRvZ2V0aGVyOiB0aGUgY29tbWFuZCAnbWFrZSB0ZXN0cycgYnVpbGRzCi0rdGVzdCBwcm9ncmFtcywgYnV0IGRvZXMgbm90IHJ1biB0aGVtLiAgR0xJQkMsIGhvd2V2ZXIsIHByb3ZpZGVzCi0rZmFjaWxpdGllcyBmb3IgY29tcGlsaW5nIHRlc3RzIGFuZCBnZW5lcmF0aW5nIGRhdGEgZmlsZXMgb24gdGhlIGJ1aWxkCi0rc3lzdGVtLCBidXQgcnVubmluZyB0aGUgdGVzdCBwcm9ncmFtcyB0aGVtc2VsdmVzIG9uIGEgcmVtb3RlIHN5c3RlbSBvcgotK3NpbXVsYXRvci4KLSsKLSsKLStUZXN0IGVudmlyb25tZW50IHJlcXVpcmVtZW50cwotKwotK1RoZSB0ZXN0IGVudmlyb25tZW50IG11c3QgbWVldCBjZXJ0YWluIGNvbmRpdGlvbnMgZm9yIEdMSUJDJ3MKLStjcm9zcy10ZXN0aW5nIGZhY2lsaXRpZXMgdG8gd29yazoKLSsKLSstIFNoYXJlZCBmaWxlc3lzdGVtcy4gIFRoZSAnYnVpbGQnIHN5c3RlbSwgb24gd2hpY2ggeW91IGNvbmZpZ3VyZSBhbmQKLSsgIGNvbXBpbGUgR0xJQkMsIGFuZCB0aGUgJ2hvc3QnIHN5c3RlbSwgb24gd2hpY2ggeW91IGludGVuZCB0byBydW4KLSsgIEdMSUJDLCBtdXN0IHNoYXJlIGEgZmlsZXN5c3RlbSBjb250YWluaW5nIHRoZSBHTElCQyBidWlsZCBhbmQKLSsgIHNvdXJjZSB0cmVlcy4gIEZpbGVzIG11c3QgYXBwZWFyIGF0IHRoZSBzYW1lIHBhdGhzIG9uIGJvdGggc3lzdGVtcy4KLSsKLSstIFJlbW90ZS1zaGVsbCBsaWtlIGludm9jYXRpb24uICBUaGVyZSBtdXN0IGJlIGEgd2F5IHRvIHJ1biBhIHByb2dyYW0KLSsgIG9uIHRoZSBob3N0IHN5c3RlbSBmcm9tIHRoZSBidWlsZCBzeXN0ZW0sIHBhc3NpbmcgaXQgcHJvcGVybHkgcXVvdGVkCi0rICBjb21tYW5kLWxpbmUgYXJndW1lbnRzLCBzZXR0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcywgYW5kCi0rICBpbmhlcml0aW5nIHRoZSBjYWxsZXIncyBzdGFuZGFyZCBpbnB1dCBhbmQgb3V0cHV0LgotKwotKwotK1VzYWdlCi0rCi0rVG8gdXNlIEdMSUJDJ3MgY3Jvc3MtdGVzdGluZyBzdXBwb3J0LCBwcm92aWRlIHZhbHVlcyBmb3IgdGhlCi0rZm9sbG93aW5nIE1ha2UgdmFyaWFibGVzIHdoZW4geW91IGludm9rZSAnbWFrZSc6Ci0rCi0rLSBjcm9zcy10ZXN0LXdyYXBwZXIKLSsKLSsgIFRoaXMgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBjcm9zcy10ZXN0aW5nIHdyYXBwZXIgY29tbWFuZCwgYWxvbmcKLSsgIHdpdGggYW55IGFyZ3VtZW50cy4KLSsKLSstIGNyb3NzLWxvY2FsZWRlZgotKwotKyAgVGhpcyBzaG91bGQgYmUgdGhlIG5hbWUgb2YgYSBjcm9zcy1jYXBhYmxlIGxvY2FsZWRlZiBwcm9ncmFtLCBsaWtlCi0rICB0aGF0IGluY2x1ZGVkIGluIHRoZSBHTElCQyAnbG9jYWxlZGVmJyBtb2R1bGUsIGFsb25nIHdpdGggYW55Ci0rICBhcmd1bWVudHMgbmVlZGVkLgotKwotK1RoZXNlIGFyZSBlYWNoIGV4cGxhaW5lZCBpbiBkZXRhaWwgYmVsb3cuCi0rCi0rCi0rVGhlIENyb3NzLVRlc3RpbmcgV3JhcHBlcgotKwotK1RvIHJ1biB0ZXN0IHByb2dyYW1zIHJlbGlhYmx5LCB0aGUgc3RvY2sgR05VIEMgbGlicmFyeSB0YWtlcyBjYXJlIHRvCi0rZW5zdXJlIHRoYXQgdGVzdCBwcm9ncmFtcyB1c2UgdGhlIG5ld2x5IGNvbXBpbGVkIGR5bmFtaWMgbGlua2VyIGFuZAotK3NoYXJlZCBsaWJyYXJpZXMsIGFuZCBuZXZlciB0aGUgaG9zdCBzeXN0ZW0ncyBpbnN0YWxsZWQgbGlicmFyaWVzLiAgVG8KLSthY2NvbXBsaXNoIHRoaXMsIGl0IHJ1bnMgdGhlIHRlc3RzIGJ5IGV4cGxpY2l0bHkgaW52b2tpbmcgdGhlIGR5bmFtaWMKLStsaW5rZXIgZnJvbSB0aGUgYnVpbGQgdHJlZSwgcGFzc2luZyBpdCBhIGxpc3Qgb2YgYnVpbGQgdHJlZQotK2RpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3Igc2hhcmVkIGxpYnJhcmllcywgZm9sbG93ZWQgYnkgdGhlIG5hbWUgb2YKLSt0aGUgZXhlY3V0YWJsZSB0byBydW4gYW5kIGl0cyBhcmd1bWVudHMuCi0rCi0rRm9yIGV4YW1wbGUsIHdoZXJlIG9uZSBtaWdodCBub3JtYWxseSBydW4gYSB0ZXN0IHByb2dyYW0gbGlrZSB0aGlzOgotKwotKyAgICAkIC4vdHN0LWZvbyBhcmcxIGFyZzIKLSsKLSt0aGUgR05VIEMgbGlicmFyeSBtaWdodCBydW4gdGhhdCBwcm9ncmFtIGxpa2UgdGhpczoKLSsKLSsgICAgJCAkb2JqZGlyL2VsZi9sZC1saW51eC5zby4zIC0tbGlicmFyeS1wYXRoICRvYmpkaXIgXAotKyAgICAgIC4vdHN0LWZvbyBhcmcxIGFyZzIKLSsKLSsod2hlcmUgJG9iamRpciBpcyB0aGUgcGF0aCB0byB0aGUgdG9wIG9mIHRoZSBidWlsZCB0cmVlLCBhbmQgdGhlCi0rdHJhaWxpbmcgYmFja3NsYXNoIGluZGljYXRlcyBhIGNvbnRpbnVhdGlvbiBvZiB0aGUgY29tbWFuZCkuICBJbiBvdGhlcgotK3dvcmRzLCBlYWNoIHRlc3QgcHJvZ3JhbSBpbnZvY2F0aW9uIGlzICd3cmFwcGVkIHVwJyBpbnNpZGUgYW4gZXhwbGljaXQKLStpbnZvY2F0aW9uIG9mIHRoZSBkeW5hbWljIGxpbmtlciwgd2hpY2ggbXVzdCBpdHNlbGYgZXhlY3V0ZSB0aGUgdGVzdAotK3Byb2dyYW0sIGhhdmluZyBsb2FkZWQgc2hhcmVkIGxpYnJhcmllcyBmcm9tIHRoZSBhcHByb3ByaWF0ZQotK2RpcmVjdG9yaWVzLgotKwotK1RvIHN1cHBvcnQgY3Jvc3MtdGVzdGluZywgR0xJQkMgYWxsb3dzIHRoZSBkZXZlbG9wZXIgdG8gb3B0aW9uYWxseQotK3NldCB0aGUgJ2Nyb3NzLXRlc3Qtd3JhcHBlcicgTWFrZSB2YXJpYWJsZSB0byBhbm90aGVyIHdyYXBwZXIgY29tbWFuZCwKLSt0byB3aGljaCBpdCBwYXNzZXMgdGhlIGVudGlyZSBkeW5hbWljIGxpbmtlciBpbnZvY2F0aW9uIHNob3duIGFib3ZlIGFzCi0rYXJndW1lbnRzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBkZXZlbG9wZXIgc3VwcGxpZXMgYSB3cmFwcGVyIG9mCi0rJ215LXdyYXBwZXIgaG9zdG5hbWUnLCB0aGVuIEdMSUJDIHdvdWxkIHJ1biB0aGUgdGVzdCBhYm92ZSBhcwotK2ZvbGxvd3M6Ci0rCi0rICAgICQgbXktd3JhcHBlciBob3N0bmFtZSBcCi0rICAgICAgJG9iamRpci9lbGYvbGQtbGludXguc28uMyAtLWxpYnJhcnktcGF0aCAkb2JqZGlyIFwKLSsgICAgICAuL3RzdC1mb28gYXJnMSBhcmcyCi0rCi0rVGhlICdteS13cmFwcGVyJyBjb21tYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBleGVjdXRpbmcgdGhlIGNvbW1hbmQKLStnaXZlbiBvbiB0aGUgaG9zdCBzeXN0ZW0uCi0rCi0rU2luY2UgdGVzdHMgYXJlIHJ1biBpbiB2YXJ5aW5nIGRpcmVjdG9yaWVzLCB0aGUgd3JhcHBlciBzaG91bGQgZWl0aGVyCi0rYmUgaW4geW91ciBjb21tYW5kIHNlYXJjaCBwYXRoLCBvciAnY3Jvc3MtdGVzdC13cmFwcGVyJyBzaG91bGQgZ2l2ZSBhbgotK2Fic29sdXRlIHBhdGggZm9yIHRoZSB3cmFwcGVyLgotKwotK1RoZSB3cmFwcGVyIG11c3QgbWVldCBzZXZlcmFsIHJlcXVpcmVtZW50czoKLSsKLSstIEl0IG11c3QgcHJlc2VydmUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgQXMgZXhwbGFpbmVkIGFib3ZlLCB0aGUKLSsgIGJ1aWxkIGRpcmVjdG9yeSB0cmVlIG11c3QgYmUgdmlzaWJsZSBvbiBib3RoIHRoZSBidWlsZCBhbmQgaG9zdAotKyAgc3lzdGVtcywgYXQgdGhlIHNhbWUgcGF0aC4gIFRoZSB0ZXN0IHdyYXBwZXIgbXVzdCBlbnN1cmUgdGhhdCB0aGUKLSsgIGN1cnJlbnQgZGlyZWN0b3J5IGl0IGluaGVyaXRzIGlzIGFsc28gaW5oZXJpdGVkIGJ5IHRoZSBkeW5hbWljCi0rICBsaW5rZXIgKGFuZCB0aHVzIHRoZSB0ZXN0IHByb2dyYW0gaXRzZWxmKS4KLSsKLSstIEl0IG11c3QgcHJlc2VydmUgZW52aXJvbm1lbnQgdmFyaWFibGVzJyB2YWx1ZXMuICBNYW55IEdMSUJDIHRlc3RzCi0rICBzZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0ZXN0IHJ1bnM7IGluIG5hdGl2ZSB0ZXN0aW5nLCBpdAotKyAgaW52b2tlcyBwcm9ncmFtcyBsaWtlIHRoaXM6Ci0rCi0rICAgICQgR0NPTlZfUEFUSD0kb2JqZGlyL2ljb252ZGF0YSBcCi0rICAgICAgJG9iamRpci9lbGYvbGQtbGludXguc28uMyAtLWxpYnJhcnktcGF0aCAkb2JqZGlyIFwKLSsgICAgICAuL3RzdC1mb28gYXJnMSBhcmcyCi0rCi0rICBXaXRoIHRoZSBjcm9zcy10ZXN0aW5nIHdyYXBwZXIsIHRoYXQgaW52b2NhdGlvbiBiZWNvbWVzOgotKwotKyAgICAkIEdDT05WX1BBVEg9JG9iamRpci9pY29udmRhdGEgXAotKyAgICAgIG15LXdyYXBwZXIgaG9zdG5hbWUgXAotKyAgICAgICRvYmpkaXIvZWxmL2xkLWxpbnV4LnNvLjMgLS1saWJyYXJ5LXBhdGggJG9iamRpciBcCi0rICAgICAgLi90c3QtZm9vIGFyZzEgYXJnMgotKwotKyAgSGVyZSwgJ215LXdyYXBwZXInIG11c3QgZW5zdXJlIHRoYXQgdGhlIHZhbHVlIGl0IHNlZXMgZm9yCi0rICAnR0NPTlZfUEFUSCcgd2lsbCBiZSBzZWVuIGJ5IHRoZSBkeW5hbWljIGxpbmtlciwgYW5kIHRodXMgJ3RzdC1mb28nCi0rICBpdHNlbGYuICAoVGhlIHdyYXBwZXIgc3VwcGxpZWQgd2l0aCBHTElCQyBzaW1wbHkgcHJlc2VydmVzIHRoZQotKyAgdmFsdWVzIG9mICphbGwqIGVudmlyb21lbnQgdmFyaWFibGVzLCB3aXRoIGEgZml4ZWQgc2V0IG9mCi0rICBleGNlcHRpb25zLikKLSsKLSsgIElmIHlvdXIgd3JhcHBlciBpcyBhIHNoZWxsIHNjcmlwdCwgdGFrZSBjYXJlIHRvIGNvcnJlY3RseSBwcm9wYWdhdGUKLSsgIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgY29udGFpbiBzcGFjZXMgYW5kIHNoZWxsCi0rICBtZXRhY2hhcmFjdGVycy4KLSsKLSstIEl0IG11c3QgcGFzcyB0aGUgY29tbWFuZCdzIGFyZ3VtZW50cywgdW5tb2RpZmllZC4gIFRoZSBhcmd1bWVudHMKLSsgIHNlZW4gYnkgdGhlIHRlc3QgcHJvZ3JhbSBzaG91bGQgYmUgZXhhY3RseSB0aG9zZSBzZWVuIGJ5IHRoZSB3cmFwcGVyCi0rICAoYWZ0ZXIgd2hhdGV2ZXIgYXJndW1lbnRzIGFyZSBnaXZlbiB0byB0aGUgd3JhcHBlciBpdHNlbGYpLiAgVGhlCi0rICBHTElCQyB0ZXN0IGZyYW1ld29yayBwZXJmb3JtcyBhbGwgbmVlZGVkIHNoZWxsIHdvcmQgc3BsaXR0aW5nIGFuZAotKyAgZXhwYW5zaW9uICh3aWxkY2FyZCBleHBhbnNpb24sIHBhcmFtZXRlciBzdWJzdGl0dXRpb24sIGFuZCBzbyBvbikKLSsgIGJlZm9yZSBpbnZva2luZyB0aGUgd3JhcHBlcjsgZnVydGhlciBleHBhbnNpb24gbWF5IGJyZWFrIHRoZSB0ZXN0cy4KLSsKLSsKLStUaGUgJ2Nyb3NzLXRlc3Qtc3NoLnNoJyBzY3JpcHQKLSsKLStJZiB5b3Ugd2FudCB0byB1c2UgJ3NzaCcgKG9yIHNvbWV0aGluZyBzdWZmaWNpZW50bHkgc2ltaWxhcikgdG8gcnVuCi0rdGVzdCBwcm9ncmFtcyBvbiB5b3VyIGhvc3Qgc3lzdGVtLCBHTElCQyBpbmNsdWRlcyBhIHNoZWxsIHNjcmlwdCwKLSsnc2NyaXB0cy9jcm9zcy10ZXN0LXNzaC5zaCcsIHdoaWNoIHlvdSBjYW4gdXNlIGFzIHlvdXIgd3JhcHBlcgotK2NvbW1hbmQuICBUaGlzIHNjcmlwdCB0YWtlcyBjYXJlIG9mIHNldHRpbmcgdGhlIHRlc3QgY29tbWFuZCdzIGN1cnJlbnQKLStkaXJlY3RvcnksIHByb3BhZ2F0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlcywgYW5kIGNhcnJ5aW5nCi0rY29tbWFuZC1saW5lIGFyZ3VtZW50cywgYWxsIGFjcm9zcyBhbiAnc3NoJyBjb25uZWN0aW9uLiAgWW91IG1heSBldmVuCi0rc3VwcGx5IGFuIGFsdGVybmF0aXZlIHRvICdzc2gnIG9uIHRoZSBjb21tYW5kIGxpbmUsIGlmIG5lZWRlZC4KLSsKLStGb3IgbW9yZSBkZXRhaWxzLCBwYXNzICdjcm9zcy10ZXN0LXNzaC5zaCcgdGhlICctLWhlbHAnIG9wdGlvbi4KLSsKLSsKLStUaGUgQ3Jvc3MtQ29tcGlsaW5nIExvY2FsZSBEZWZpbml0aW9uIENvbW1hbmQKLSsKLStTb21lIEdMSUJDIHRlc3RzIHJlbHkgb24gbG9jYWxlcyBnZW5lcmF0ZWQgZXNwZWNpYWxseSBmb3IgdGhlIHRlc3QKLStwcm9jZXNzLiAgSW4gYSBuYXRpdmUgY29uZmlndXJhdGlvbiwgdGhlc2UgdGVzdHMgc2ltcGx5IHJ1biB0aGUKLSsnbG9jYWxlZGVmJyBjb21tYW5kIGJ1aWx0IGJ5IHRoZSBub3JtYWwgR0xJQkMgYnVpbGQgcHJvY2VzcywKLSsnbG9jYWxlL2xvY2FsZWRlZicsIHRvIHByb2Nlc3MgYW5kIGluc3RhbGwgdGhlaXIgbG9jYWxlcy4gIEhvd2V2ZXIsIGluCi0rYSBjcm9zcy1jb21waWxpbmcgY29uZmlndXJhdGlvbiwgdGhpcyAnbG9jYWxlZGVmJyBpcyBidWlsdCBmb3IgdGhlCi0raG9zdCBzeXN0ZW0sIG5vdCB0aGUgYnVpbGQgc3lzdGVtLCBhbmQgc2luY2UgaXQgcmVxdWlyZXMgcXVpdGUgYSBiaXQKLStvZiBtZW1vcnkgdG8gcnVuICh3ZSBoYXZlIHNlZW4gaXQgZmFpbCBvbiBzeXN0ZW1zIHdpdGggNjRNaUIgb2YKLSttZW1vcnkpLCBpdCBtYXkgbm90IGJlIHByYWN0aWNhbCB0byBydW4gaXQgb24gdGhlIGhvc3Qgc3lzdGVtLgotKwotK0lmIHNldCwgR0xJQkMgdXNlcyB0aGUgJ2Nyb3NzLWxvY2FsZWRlZicgTWFrZSB2YXJpYWJsZSBhcyB0aGUgY29tbWFuZAotK3RvIHJ1biBvbiB0aGUgYnVpbGQgc3lzdGVtIHRvIHByb2Nlc3MgYW5kIGluc3RhbGwgbG9jYWxlcy4gIFRoZQotK2xvY2FsZWRlZiBwcm9ncmFtIGJ1aWx0IGZyb20gdGhlIEdMSUJDICdsb2NhbGVkZWYnIG1vZHVsZSBpcwotK3N1aXRhYmxlLgotKwotK1RoZSB2YWx1ZSBvZiAnY3Jvc3MtbG9jYWxlZGVmJyBtYXkgYWxzbyBpbmNsdWRlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMKLSt0byBiZSBwYXNzZWQgdG8gdGhlIHByb2dyYW07IGlmIHlvdSBhcmUgdXNpbmcgR0xJQkMncyAnbG9jYWxlZGVmJywKLSt5b3UgbWF5IGluY2x1ZGUgZW5kaWFubmVzcyBhbmQgJ3VpbnQzMl90JyBhbGlnbm1lbnQgYXJndW1lbnRzIGhlcmUuCi0rCi0rCi0rRXhhbXBsZQotKwotK0luIGRldmVsb3BpbmcgR0xJQkMncyBjcm9zcy10ZXN0aW5nIGZhY2lsaXR5LCB3ZSBpbnZva2VkICdtYWtlJyB3aXRoCi0rdGhlIGZvbGxvd2luZyBzY3JpcHQ6Ci0rCi0rICAgICMhL2Jpbi9zaAotKwotKyAgICBzcmNkaXI9Li4uCi0rICAgIHRlc3RfaG9zdG5hbWU9Li4uCi0rICAgIGxvY2FsZWRlZmRpcj0uLi4KLSsgICAgY3Jvc3NfZ3h4PS4uLi1nKysKLSsKLSsgICAgd3JhcHBlcj0iJHNyY2Rpci9zY3JpcHRzL2Nyb3NzLXRlc3Qtc3NoLnNoICR0ZXN0X2hvc3RuYW1lIgotKyAgICBsb2NhbGVkZWY9IiRsb2NhbGVkZWZkaXIvbG9jYWxlZGVmIC0tbGl0dGxlLWVuZGlhbiAtLXVpbnQzMi1hbGlnbj00IgotKwotKyAgICBtYWtlIGNyb3NzLXRlc3Qtd3JhcHBlcj0iJHdyYXBwZXIiIFwKLSsgICAgICAgICBjcm9zcy1sb2NhbGVkZWY9IiRsb2NhbGVkZWYiIFwKLSsgICAgICAgICBDWFg9IiRjcm9zc19neHgiIFwKLSsgICAgICAgICAiJEAiCi0rCi0rCi0rT3RoZXIgQ3Jvc3MtVGVzdGluZyBDb25jZXJucwotKwotK0hlcmUgYXJlIG5vdGVzIG9uIHNvbWUgb3RoZXIgaXNzdWVzIHdoaWNoIHlvdSBtYXkgZW5jb3VudGVyIGluIHJ1bm5pbmcKLSt0aGUgR0xJQkMgdGVzdHMgaW4gYSBjcm9zcy1jb21waWxpbmcgZW52aXJvbm1lbnQ6Ci0rCi0rLSBTb21lIHRlc3RzIHJlcXVpcmUgYSBDKysgY3Jvc3MtY29tcGlsZXI7IHlvdSBzaG91bGQgc2V0IHRoZSAnQ1hYJwotKyAgTWFrZSB2YXJpYWJsZSB0byB0aGUgbmFtZSBvZiBhbiBhcHByb3ByaWF0ZSBjcm9zcy1jb21waWxlci4KLSsKLSstIFNvbWUgdGVzdHMgcmVxdWlyZSBhY2Nlc3MgdG8gbGlic3RkYysrLnNvLjYgYW5kIGxpYmdjY19zLnNvLjE7IHdlCi0rICBzaW1wbHkgcGxhY2UgY29waWVzIG9mIHRoZXNlIGxpYnJhcmllcyBpbiB0aGUgdG9wIEdMSUJDIGJ1aWxkCi0rICBkaXJlY3RvcnkuCi0tLSAKLTIuMTAuMgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxOC1lZ2xpYmMtSGVscC1ib290c3RyYXAtY3Jvc3MtdG9vbGNoYWluLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTgtZWdsaWJjLUhlbHAtYm9vdHN0cmFwLWNyb3NzLXRvb2xjaGFpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmYzNWY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTgtZWdsaWJjLUhlbHAtYm9vdHN0cmFwLWNyb3NzLXRvb2xjaGFpbi5wYXRjaApAQCAtMCwwICsxLDEwMCBAQAorRnJvbSAxMTYxY2QxYzY4MzU0N2QyOWEwMzYyNmQ5ZDdkZTdmOWNjMDNiNzRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6NDk6MjggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxOC8yNV0gZWdsaWJjOiBIZWxwIGJvb3RzdHJhcCBjcm9zcyB0b29sY2hhaW4KKworVGFrZW4gZnJvbSBFR0xJQkMsIHIxNDg0ICsgcjE1MjUKKworICAgICAgICAyMDA3LTAyLTIwICBKaW0gQmxhbmR5ICA8amltYkBjb2Rlc291cmNlcnkuY29tPgorCisgICAgICAgICAgICAgICAgKiBNYWtlZmlsZSAoaW5zdGFsbC1oZWFkZXJzKTogUHJlc2VydmUgb2xkIGJlaGF2aW9yOiBkZXBlbmQgb24KKyAgICAgICAgICAgICAgICAkKGluc3RfaW5jbHVkZWRpcikvZ251L3N0dWJzLmggb25seSBpZiBpbnN0YWxsLWJvb3RzdHJhcC1oZWFkZXJzCisgICAgICAgICAgICAgICAgaXMgc2V0OyBvdGhlcndpc2UsIHBsYWNlIGdudS9zdHVicy5oIG9uIHRoZSAnaW5zdGFsbC1vdGhlcnMnIGxpc3QuCisKKyAgICAgICAgMjAwNy0wMi0xNiAgSmltIEJsYW5keSAgPGppbWJAY29kZXNvdXJjZXJ5LmNvbT4KKworICAgICAgICAgICAgICAgICogTWFrZWZpbGU6IEFtZW5kIG1ha2UgaW5zdGFsbC1oZWFkZXJzIHRvIGluc3RhbGwgZXZlcnl0aGluZworICAgICAgICAgICAgICAgIG5lY2Vzc2FyeSBmb3IgYnVpbGRpbmcgYSBjcm9zcy1jb21waWxlci4gIEluc3RhbGwgZ251L3N0dWJzLmggYXMKKyAgICAgICAgICAgICAgICBwYXJ0IG9mICdpbnN0YWxsLWhlYWRlcnMnLCBub3QgJ2luc3RhbGwtb3RoZXJzJy4KKyAgICAgICAgICAgICAgICBJZiBpbnN0YWxsLWJvb3RzdHJhcC1oZWFkZXJzIGlzICd5ZXMnLCBpbnN0YWxsIGEgZHVtbXkgY29weSBvZgorICAgICAgICAgICAgICAgIGdudS9zdHVicy5oLCBpbnN0ZWFkIG9mIGNvbXB1dGluZyB0aGUgcmVhbCB0aGluZy4KKyAgICAgICAgICAgICAgICAqIGluY2x1ZGUvc3R1YnMtYm9vdHN0cmFwLmg6IE5ldyBmaWxlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBNYWtlZmlsZSAgICAgICAgICAgICAgICAgIHwgMjIgKysrKysrKysrKysrKysrKysrKysrLQorIGluY2x1ZGUvc3R1YnMtYm9vdHN0cmFwLmggfCAxMiArKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9zdHVicy1ib290c3RyYXAuaAorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggM2UwYWU2ZjQzYi4uMjRkYzY2ZDE3YyAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTcwLDkgKzcwLDE4IEBAIHN1YmRpci1kaXJzID0gaW5jbHVkZQorIHZwYXRoICUuaCAkKHN1YmRpci1kaXJzKQorIAorICMgV2hhdCB0byBpbnN0YWxsLgorLWluc3RhbGwtb3RoZXJzID0gJChpbnN0X2luY2x1ZGVkaXIpL2dudS9zdHVicy5oCisgaW5zdGFsbC1iaW4tc2NyaXB0ID0KKyAKKysjIElmIHdlJ3JlIGJvb3RzdHJhcHBpbmcsIGluc3RhbGwgYSBkdW1teSBnbnUvc3R1YnMuaCBhbG9uZyB3aXRoIHRoZQorKyMgb3RoZXIgaGVhZGVycywgc28gJ21ha2UgaW5zdGFsbC1oZWFkZXJzJyBwcm9kdWNlcyBhIHVzZWFibGUgaW5jbHVkZQorKyMgdHJlZS4gIE90aGVyd2lzZSwgaW5zdGFsbCBnbnUvc3R1YnMuaCBsYXRlciwgYWZ0ZXIgdGhlIHJlc3Qgb2YgdGhlCisrIyBidWlsZCBpcyBkb25lLgorK2lmZXEgKCQoaW5zdGFsbC1ib290c3RyYXAtaGVhZGVycykseWVzKQorK2luc3RhbGwtaGVhZGVyczogJChpbnN0X2luY2x1ZGVkaXIpL2dudS9zdHVicy5oCisrZWxzZQorK2luc3RhbGwtb3RoZXJzID0gJChpbnN0X2luY2x1ZGVkaXIpL2dudS9zdHVicy5oCisrZW5kaWYKKysKKyBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorIGhlYWRlcnMgKz0gZ251L2xpYi1uYW1lcy5oCisgZW5kaWYKK0BAIC0xNTIsNiArMTYxLDE2IEBAIG90aGVyczogJChjb21tb24tb2JqcGZ4KXRlc3RydW4uc2gKKyAKKyBzdWJkaXItc3R1YnMgOj0gJChmb3JlYWNoIGRpciwkKHN1YmRpcnMpLCQoY29tbW9uLW9ianBmeCkkKGRpcikvc3R1YnMpCisgCisrIyBnbnUvc3R1YnMuaCBkZXBlbmRzICh2aWEgdGhlIHN1YmRpciAnc3R1YnMnIHRhcmdldHMpIG9uIGFsbCB0aGUgLm8KKysjIGZpbGVzIGluIEVHTElCQy4gIEZvciBib290c3RyYXBwaW5nIGEgR0NDL0VHTElCQyBwYWlyLCBhbiBlbXB0eQorKyMgZ251L3N0dWJzLmggaXMgZ29vZCBlbm91Z2guCisraWZlcSAoJChpbnN0YWxsLWJvb3RzdHJhcC1oZWFkZXJzKSx5ZXMpCisrJChpbnN0X2luY2x1ZGVkaXIpL2dudS9zdHVicy5oOiBpbmNsdWRlL3N0dWJzLWJvb3RzdHJhcC5oICQoK2ZvcmNlKQorKwkkKG1ha2UtdGFyZ2V0LWRpcmVjdG9yeSkKKysJJChJTlNUQUxMX0RBVEEpICQ8ICRACisrCisraW5zdGFsbGVkLXN0dWJzID0KKytlbHNlCisgaWZuZGVmIGFiaS12YXJpYW50cworIGluc3RhbGxlZC1zdHVicyA9ICQoaW5zdF9pbmNsdWRlZGlyKS9nbnUvc3R1YnMuaAorIGVsc2UKK0BAIC0xNzgsNiArMTk3LDcgQEAgJChpbnN0X2luY2x1ZGVkaXIpL2dudS9zdHVicy5oOiAkKCtmb3JjZSkKKyAKKyBpbnN0YWxsLW90aGVycy1ub3N1YmRpcjogJChpbnN0YWxsZWQtc3R1YnMpCisgZW5kaWYKKytlbmRpZgorIAorIAorICMgU2luY2Ugc3R1YnMuaCBpcyBuZXZlciBuZWVkZWQgd2hlbiBidWlsZGluZyB0aGUgbGlicmFyeSwgd2Ugc2ltcGxpZnkgdGhlCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zdHVicy1ib290c3RyYXAuaCBiL2luY2x1ZGUvc3R1YnMtYm9vdHN0cmFwLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwLi4xZDJiNjY5YWZmCistLS0gL2Rldi9udWxsCisrKysgYi9pbmNsdWRlL3N0dWJzLWJvb3RzdHJhcC5oCitAQCAtMCwwICsxLDEyIEBACisrLyogUGxhY2Vob2xkZXIgc3R1YnMuaCBmaWxlIGZvciBib290c3RyYXBwaW5nLgorKworKyAgIFdoZW4gYm9vdHN0cmFwcGluZyBhIEdDQy9FR0xJQkMgcGFpciwgR0NDIHJlcXVpcmVzIHRoYXQgdGhlIEVHTElCQworKyAgIGhlYWRlcnMgYmUgaW5zdGFsbGVkLCBidXQgd2UgY2FuJ3QgZnVsbHkgYnVpbGQgRUdMSUJDIHdpdGhvdXQgdGhhdAorKyAgIEdDQy4gIFNvIHdlIHJ1biB0aGUgY29tbWFuZDoKKysKKysgICAgICBtYWtlIGluc3RhbGwtaGVhZGVycyBpbnN0YWxsLWJvb3RzdHJhcC1oZWFkZXJzPXllcworKworKyAgIHRvIGluc3RhbGwgdGhlIGhlYWRlcnMgR0NDIG5lZWRzLCBidXQgYXZvaWQgYnVpbGRpbmcgY2VydGFpbgorKyAgIGRpZmZpY3VsdCBoZWFkZXJzLiAgVGhlIDxnbnUvc3R1YnMuaD4gaGVhZGVyIGRlcGVuZHMsIHZpYSB0aGUKKysgICBFR0xJQkMgc3ViZGlyICdzdHVicycgbWFrZSB0YXJnZXRzLCBvbiBldmVyeSAubyBmaWxlIGluIEVHTElCQywgYnV0CisrICAgYW4gZW1wdHkgc3R1YnMuaCBsaWtlIHRoaXMgd2lsbCBkbyBmaW5lIGZvciBHQ0MuICAqLworLS0gCisyLjEzLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTktZWdsaWJjLUNsZWFyLWNhY2hlLWxpbmVzLW9uLXBwYzh4eC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE5LWVnbGliYy1DbGVhci1jYWNoZS1saW5lcy1vbi1wcGM4eHgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiMjhjZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE5LWVnbGliYy1DbGVhci1jYWNoZS1saW5lcy1vbi1wcGM4eHgucGF0Y2gKQEAgLTAsMCArMSw4MyBAQAorRnJvbSAxNzMyYzdmMjU0NTNjODc5YzE3NzAxODM5ZWYzNDg3NmE3MzU3MDA4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMzEgRGVjIDIwMTUgMTU6MTU6MDkgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSCAxOS8yNV0gZWdsaWJjOiBDbGVhciBjYWNoZSBsaW5lcyBvbiBwcGM4eHgKKworMjAwNy0wNi0xMyAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AY29kZXNvdXJjZXJ5LmNvbT4KKyAgICAgICAgICAgIE1hcmsgU2hpbndlbGwgIDxzaGlud2VsbEBjb2Rlc291cmNlcnkuY29tPgorCisgICAgICAgICogc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9saWJjLXN0YXJ0LmMKKyAgICAgICAgKF9fbGliY19zdGFydF9tYWluKTogRGV0ZWN0IDh4eCBwYXJ0cyBhbmQgY2xlYXIKKyAgICAgICAgX19jYWNoZV9saW5lX3NpemUgaWYgZGV0ZWN0ZWQuCisgICAgICAgICogc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9kbC1zeXNkZXAuYworICAgICAgICAoRExfUExBVEZPUk1fQVVYVik6IExpa2V3aXNlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvZGwtc3lzZGVwLmMgIHwgMTQgKysrKysrKysrKysrKy0KKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2xpYmMtc3RhcnQuYyB8IDE2ICsrKysrKysrKysrKysrKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDI4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2RsLXN5c2RlcC5jIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9kbC1zeXNkZXAuYworaW5kZXggMjNmNWQ1ZDM4OC4uN2U0NTI4OGRiNyAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvZGwtc3lzZGVwLmMKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvZGwtc3lzZGVwLmMKK0BAIC0yNCw5ICsyNCwyMSBAQCBpbnQgX19jYWNoZV9saW5lX3NpemUgYXR0cmlidXRlX2hpZGRlbjsKKyAvKiBTY2FuIHRoZSBBdXggVmVjdG9yIGZvciB0aGUgIkRhdGEgQ2FjaGUgQmxvY2sgU2l6ZSIgZW50cnkuICBJZiBmb3VuZAorICAgIHZlcmlmeSB0aGF0IHRoZSBzdGF0aWMgZXh0ZXJuIF9fY2FjaGVfbGluZV9zaXplIGlzIGRlZmluZWQgYnkgY2hlY2tpbmcKKyAgICBmb3Igbm90IE5VTEwuICBJZiBpdCBpcyBkZWZpbmVkIHRoZW4gYXNzaWduIHRoZSBjYWNoZSBibG9jayBzaXplCistICAgdmFsdWUgdG8gX19jYWNoZV9saW5lX3NpemUuICAqLworKyAgIHZhbHVlIHRvIF9fY2FjaGVfbGluZV9zaXplLiAgVGhpcyBpcyB1c2VkIGJ5IG1lbXNldCB0bworKyAgIG9wdGltaXplIHNldHRpbmcgdG8gemVyby4gIFdlIGhhdmUgdG8gZGV0ZWN0IDh4eCBwcm9jZXNzb3JzLCB3aGljaAorKyAgIGhhdmUgYnVnZ3kgZGNieiBpbXBsZW1lbnRhdGlvbnMgdGhhdCBjYW5ub3QgcmVwb3J0IHBhZ2UgZmF1bHRzCisrICAgY29ycmVjdGx5LiAgVGhhdCByZXF1aXJlcyByZWFkaW5nIFNQUiwgd2hpY2ggaXMgYSBwcml2aWxlZ2VkCisrICAgb3BlcmF0aW9uLiAgRm9ydHVuYXRlbHkgMi4yLjE4IGFuZCBsYXRlciBlbXVsYXRlcyBQb3dlclBDIG1mc3ByCisrICAgcmVhZHMgZnJvbSB0aGUgUFZSIHJlZ2lzdGVyLiAgICovCisgI2RlZmluZSBETF9QTEFURk9STV9BVVhWCQkJCQkJICAgICAgXAorICAgICAgIGNhc2UgQVRfRENBQ0hFQlNJWkU6CQkJCQkJICAgICAgXAorKwlpZiAoX19MSU5VWF9LRVJORUxfVkVSU0lPTiA+PSAweDAyMDIxOCkJCQkJICAgICAgXAorKwkgIHsJCQkJCQkJCSAgICAgIFwKKysJICAgIHVuc2lnbmVkIHB2ciA9IDA7CQkJCQkJICAgICAgXAorKwkgICAgYXNtICgibWZzcHIgJTAsIDI4NyIgOiAiPXIiIChwdnIpKTsJCQkJICAgICAgXAorKwkgICAgaWYgKChwdnIgJiAweGZmZmYwMDAwKSA9PSAweDAwNTAwMDAwKQkJCSAgICAgIFwKKysJICAgICAgYnJlYWs7CQkJCQkJCSAgICAgIFwKKysJICB9CQkJCQkJCQkgICAgICBcCisgCV9fY2FjaGVfbGluZV9zaXplID0gYXYtPmFfdW4uYV92YWw7CQkJCSAgICAgIFwKKyAJYnJlYWs7CisgCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9saWJjLXN0YXJ0LmMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2xpYmMtc3RhcnQuYworaW5kZXggYWQwMzZjMWU0Yi4uYWZlZTU2YTNkYSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvbGliYy1zdGFydC5jCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2xpYmMtc3RhcnQuYworQEAgLTczLDExICs3MywyNSBAQCBfX2xpYmNfc3RhcnRfbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2LAorIAorICAgLyogSW5pdGlhbGl6ZSB0aGUgX19jYWNoZV9saW5lX3NpemUgdmFyaWFibGUgZnJvbSB0aGUgYXV4IHZlY3Rvci4gIEZvciB0aGUKKyAgICAgIHN0YXRpYyBjYXNlLCB3ZSBhbHNvIG5lZWQgX2RsX2h3Y2FwLCBfZGxfaHdjYXAyIGFuZCBfZGxfcGxhdGZvcm0sIHNvIHdlCistICAgICBjYW4gY2FsbCBfX3RjYl9wYXJzZV9od2NhcF9hbmRfY29udmVydF9hdF9wbGF0Zm9ybSAoKS4gICovCisrICAgICBjYW4gY2FsbCBfX3RjYl9wYXJzZV9od2NhcF9hbmRfY29udmVydF9hdF9wbGF0Zm9ybSAoKS4KKysKKysgICAgIFRoaXMgaXMgdXNlZCBieSBtZW1zZXQgdG8gb3B0aW1pemUgc2V0dGluZyB0byB6ZXJvLiAgV2UgaGF2ZSB0bworKyAgICAgZGV0ZWN0IDh4eCBwcm9jZXNzb3JzLCB3aGljaCBoYXZlIGJ1Z2d5IGRjYnogaW1wbGVtZW50YXRpb25zIHRoYXQKKysgICAgIGNhbm5vdCByZXBvcnQgcGFnZSBmYXVsdHMgY29ycmVjdGx5LiAgVGhhdCByZXF1aXJlcyByZWFkaW5nIFNQUiwKKysgICAgIHdoaWNoIGlzIGEgcHJpdmlsZWdlZCBvcGVyYXRpb24uICBGb3J0dW5hdGVseSAyLjIuMTggYW5kIGxhdGVyCisrICAgICBlbXVsYXRlcyBQb3dlclBDIG1mc3ByIHJlYWRzIGZyb20gdGhlIFBWUiByZWdpc3Rlci4gICovCisgICBmb3IgKEVsZlcgKGF1eHZfdCkgKiBhdiA9IGF1eHZlYzsgYXYtPmFfdHlwZSAhPSBBVF9OVUxMOyArK2F2KQorICAgICBzd2l0Y2ggKGF2LT5hX3R5cGUpCisgICAgICAgeworICAgICAgIGNhc2UgQVRfRENBQ0hFQlNJWkU6CisrCWlmIChfX0xJTlVYX0tFUk5FTF9WRVJTSU9OID49IDB4MDIwMjE4KQorKwkgIHsKKysJICAgIHVuc2lnbmVkIHB2ciA9IDA7CisrCisrCSAgICBhc20gKCJtZnNwciAlMCwgMjg3IiA6ICI9ciIgKHB2cikgOik7CisrCSAgICBpZiAoKHB2ciAmIDB4ZmZmZjAwMDApID09IDB4MDA1MDAwMDApCisrCSAgICAgIGJyZWFrOworKwkgIH0KKyAJX19jYWNoZV9saW5lX3NpemUgPSBhdi0+YV91bi5hX3ZhbDsKKyAJYnJlYWs7CisgI2lmbmRlZiBTSEFSRUQKKy0tIAorMi4xMy4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE5LWVnbGliYy1IZWxwLWJvb3RzdHJhcC1jcm9zcy10b29sY2hhaW4ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxOS1lZ2xpYmMtSGVscC1ib290c3RyYXAtY3Jvc3MtdG9vbGNoYWluLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTkyMWJiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE5LWVnbGliYy1IZWxwLWJvb3RzdHJhcC1jcm9zcy10b29sY2hhaW4ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotRnJvbSAyY2I3ZTNjYWU0MDIwZjQzMWQ0MjZhZDE3NDBiYjI1NTA2Y2RlODk5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6NDk6MjggKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAxOS8yNl0gZWdsaWJjOiBIZWxwIGJvb3RzdHJhcCBjcm9zcyB0b29sY2hhaW4KLQotVGFrZW4gZnJvbSBFR0xJQkMsIHIxNDg0ICsgcjE1MjUKLQotICAgICAgICAyMDA3LTAyLTIwICBKaW0gQmxhbmR5ICA8amltYkBjb2Rlc291cmNlcnkuY29tPgotCi0gICAgICAgICAgICAgICAgKiBNYWtlZmlsZSAoaW5zdGFsbC1oZWFkZXJzKTogUHJlc2VydmUgb2xkIGJlaGF2aW9yOiBkZXBlbmQgb24KLSAgICAgICAgICAgICAgICAkKGluc3RfaW5jbHVkZWRpcikvZ251L3N0dWJzLmggb25seSBpZiBpbnN0YWxsLWJvb3RzdHJhcC1oZWFkZXJzCi0gICAgICAgICAgICAgICAgaXMgc2V0OyBvdGhlcndpc2UsIHBsYWNlIGdudS9zdHVicy5oIG9uIHRoZSAnaW5zdGFsbC1vdGhlcnMnIGxpc3QuCi0KLSAgICAgICAgMjAwNy0wMi0xNiAgSmltIEJsYW5keSAgPGppbWJAY29kZXNvdXJjZXJ5LmNvbT4KLQotICAgICAgICAgICAgICAgICogTWFrZWZpbGU6IEFtZW5kIG1ha2UgaW5zdGFsbC1oZWFkZXJzIHRvIGluc3RhbGwgZXZlcnl0aGluZwotICAgICAgICAgICAgICAgIG5lY2Vzc2FyeSBmb3IgYnVpbGRpbmcgYSBjcm9zcy1jb21waWxlci4gIEluc3RhbGwgZ251L3N0dWJzLmggYXMKLSAgICAgICAgICAgICAgICBwYXJ0IG9mICdpbnN0YWxsLWhlYWRlcnMnLCBub3QgJ2luc3RhbGwtb3RoZXJzJy4KLSAgICAgICAgICAgICAgICBJZiBpbnN0YWxsLWJvb3RzdHJhcC1oZWFkZXJzIGlzICd5ZXMnLCBpbnN0YWxsIGEgZHVtbXkgY29weSBvZgotICAgICAgICAgICAgICAgIGdudS9zdHVicy5oLCBpbnN0ZWFkIG9mIGNvbXB1dGluZyB0aGUgcmVhbCB0aGluZy4KLSAgICAgICAgICAgICAgICAqIGluY2x1ZGUvc3R1YnMtYm9vdHN0cmFwLmg6IE5ldyBmaWxlLgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBNYWtlZmlsZSAgICAgICAgICAgICAgICAgIHwgMjIgKysrKysrKysrKysrKysrKysrKysrLQotIGluY2x1ZGUvc3R1YnMtYm9vdHN0cmFwLmggfCAxMiArKysrKysrKysrKysKLSAyIGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLSBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9zdHVicy1ib290c3RyYXAuaAotCi1kaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQotaW5kZXggMWFlMzI4MS4uMjZhYjdiZiAxMDA2NDQKLS0tLSBhL01ha2VmaWxlCi0rKysgYi9NYWtlZmlsZQotQEAgLTcwLDkgKzcwLDE4IEBAIHN1YmRpci1kaXJzID0gaW5jbHVkZQotIHZwYXRoICUuaCAkKHN1YmRpci1kaXJzKQotIAotICMgV2hhdCB0byBpbnN0YWxsLgotLWluc3RhbGwtb3RoZXJzID0gJChpbnN0X2luY2x1ZGVkaXIpL2dudS9zdHVicy5oCi0gaW5zdGFsbC1iaW4tc2NyaXB0ID0KLSAKLSsjIElmIHdlJ3JlIGJvb3RzdHJhcHBpbmcsIGluc3RhbGwgYSBkdW1teSBnbnUvc3R1YnMuaCBhbG9uZyB3aXRoIHRoZQotKyMgb3RoZXIgaGVhZGVycywgc28gJ21ha2UgaW5zdGFsbC1oZWFkZXJzJyBwcm9kdWNlcyBhIHVzZWFibGUgaW5jbHVkZQotKyMgdHJlZS4gIE90aGVyd2lzZSwgaW5zdGFsbCBnbnUvc3R1YnMuaCBsYXRlciwgYWZ0ZXIgdGhlIHJlc3Qgb2YgdGhlCi0rIyBidWlsZCBpcyBkb25lLgotK2lmZXEgKCQoaW5zdGFsbC1ib290c3RyYXAtaGVhZGVycykseWVzKQotK2luc3RhbGwtaGVhZGVyczogJChpbnN0X2luY2x1ZGVkaXIpL2dudS9zdHVicy5oCi0rZWxzZQotK2luc3RhbGwtb3RoZXJzID0gJChpbnN0X2luY2x1ZGVkaXIpL2dudS9zdHVicy5oCi0rZW5kaWYKLSsKLSBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQotIGhlYWRlcnMgKz0gZ251L2xpYi1uYW1lcy5oCi0gZW5kaWYKLUBAIC0xNTIsNiArMTYxLDE2IEBAIG90aGVyczogJChjb21tb24tb2JqcGZ4KXRlc3RydW4uc2gKLSAKLSBzdWJkaXItc3R1YnMgOj0gJChmb3JlYWNoIGRpciwkKHN1YmRpcnMpLCQoY29tbW9uLW9ianBmeCkkKGRpcikvc3R1YnMpCi0gCi0rIyBnbnUvc3R1YnMuaCBkZXBlbmRzICh2aWEgdGhlIHN1YmRpciAnc3R1YnMnIHRhcmdldHMpIG9uIGFsbCB0aGUgLm8KLSsjIGZpbGVzIGluIEVHTElCQy4gIEZvciBib290c3RyYXBwaW5nIGEgR0NDL0VHTElCQyBwYWlyLCBhbiBlbXB0eQotKyMgZ251L3N0dWJzLmggaXMgZ29vZCBlbm91Z2guCi0raWZlcSAoJChpbnN0YWxsLWJvb3RzdHJhcC1oZWFkZXJzKSx5ZXMpCi0rJChpbnN0X2luY2x1ZGVkaXIpL2dudS9zdHVicy5oOiBpbmNsdWRlL3N0dWJzLWJvb3RzdHJhcC5oICQoK2ZvcmNlKQotKwkkKG1ha2UtdGFyZ2V0LWRpcmVjdG9yeSkKLSsJJChJTlNUQUxMX0RBVEEpICQ8ICRACi0rCi0raW5zdGFsbGVkLXN0dWJzID0KLStlbHNlCi0gaWZuZGVmIGFiaS12YXJpYW50cwotIGluc3RhbGxlZC1zdHVicyA9ICQoaW5zdF9pbmNsdWRlZGlyKS9nbnUvc3R1YnMuaAotIGVsc2UKLUBAIC0xNzgsNiArMTk3LDcgQEAgJChpbnN0X2luY2x1ZGVkaXIpL2dudS9zdHVicy5oOiAkKCtmb3JjZSkKLSAKLSBpbnN0YWxsLW90aGVycy1ub3N1YmRpcjogJChpbnN0YWxsZWQtc3R1YnMpCi0gZW5kaWYKLStlbmRpZgotIAotIAotICMgU2luY2Ugc3R1YnMuaCBpcyBuZXZlciBuZWVkZWQgd2hlbiBidWlsZGluZyB0aGUgbGlicmFyeSwgd2Ugc2ltcGxpZnkgdGhlCi1kaWZmIC0tZ2l0IGEvaW5jbHVkZS9zdHVicy1ib290c3RyYXAuaCBiL2luY2x1ZGUvc3R1YnMtYm9vdHN0cmFwLmgKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi4xZDJiNjY5Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9pbmNsdWRlL3N0dWJzLWJvb3RzdHJhcC5oCi1AQCAtMCwwICsxLDEyIEBACi0rLyogUGxhY2Vob2xkZXIgc3R1YnMuaCBmaWxlIGZvciBib290c3RyYXBwaW5nLgotKwotKyAgIFdoZW4gYm9vdHN0cmFwcGluZyBhIEdDQy9FR0xJQkMgcGFpciwgR0NDIHJlcXVpcmVzIHRoYXQgdGhlIEVHTElCQwotKyAgIGhlYWRlcnMgYmUgaW5zdGFsbGVkLCBidXQgd2UgY2FuJ3QgZnVsbHkgYnVpbGQgRUdMSUJDIHdpdGhvdXQgdGhhdAotKyAgIEdDQy4gIFNvIHdlIHJ1biB0aGUgY29tbWFuZDoKLSsKLSsgICAgICBtYWtlIGluc3RhbGwtaGVhZGVycyBpbnN0YWxsLWJvb3RzdHJhcC1oZWFkZXJzPXllcwotKwotKyAgIHRvIGluc3RhbGwgdGhlIGhlYWRlcnMgR0NDIG5lZWRzLCBidXQgYXZvaWQgYnVpbGRpbmcgY2VydGFpbgotKyAgIGRpZmZpY3VsdCBoZWFkZXJzLiAgVGhlIDxnbnUvc3R1YnMuaD4gaGVhZGVyIGRlcGVuZHMsIHZpYSB0aGUKLSsgICBFR0xJQkMgc3ViZGlyICdzdHVicycgbWFrZSB0YXJnZXRzLCBvbiBldmVyeSAubyBmaWxlIGluIEVHTElCQywgYnV0Ci0rICAgYW4gZW1wdHkgc3R1YnMuaCBsaWtlIHRoaXMgd2lsbCBkbyBmaW5lIGZvciBHQ0MuICAqLwotLS0gCi0yLjEwLjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjAtZWdsaWJjLVJlc29sdmUtX19mcHNjcl92YWx1ZXMtb24tU0g0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjAtZWdsaWJjLVJlc29sdmUtX19mcHNjcl92YWx1ZXMtb24tU0g0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MzVkODcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMC1lZ2xpYmMtUmVzb2x2ZS1fX2Zwc2NyX3ZhbHVlcy1vbi1TSDQucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorRnJvbSAxMDhiM2ExZGY5NmE4NTUyMmM1MmEwZGVjMDMyZmMyYzEwNmY1ZjJkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6NTU6NTMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyMC8yNV0gZWdsaWJjOiBSZXNvbHZlIF9fZnBzY3JfdmFsdWVzIG9uIFNINAorCisyMDEwLTA5LTI5ICBOb2J1aGlybyBJd2FtYXRzdSAgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorICAgICAgICAgICAgQW5kcmV3IFN0dWJicyAgPGFtc0Bjb2Rlc291cmNlcnkuY29tPgorCisgICAgICAgIFJlc29sdmUgU0gncyBfX2Zwc2NyX3ZhbHVlcyB0byBzeW1ib2wgaW4gbGliYy5zby4KKworICAgICAgICAqIHN5c2RlcHMvc2gvc2g0L2ZwdS9mcHVfY29udHJvbC5oOiBBZGQgQysrIF9fc2V0X2Zwc2NyIHByb3RvdHlwZS4KKyAgICAgICAgKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9WZXJzaW9ucyAoR0xJQkNfMi4yKTogQWRkIF9fZnBzY3JfdmFsdWVzLgorICAgICAgICAqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5c2RlcC5TIChfX19mcHNjcl92YWx1ZXMpOiBOZXcgY29uc3RhbnQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvVmVyc2lvbnMgfCAgMSArCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzZGVwLlMgfCAxMSArKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvVmVyc2lvbnMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9WZXJzaW9ucworaW5kZXggZTA5MzhjNDE2NS4uY2ExZDdkYTMzOSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL1ZlcnNpb25zCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9WZXJzaW9ucworQEAgLTIsNiArMiw3IEBAIGxpYmMgeworICAgR0xJQkNfMi4yIHsKKyAgICAgIyBmdW5jdGlvbnMgdXNlZCBpbiBvdGhlciBsaWJyYXJpZXMKKyAgICAgX194c3RhdDY0OyBfX2Z4c3RhdDY0OyBfX2x4c3RhdDY0OworKyAgICBfX2Zwc2NyX3ZhbHVlczsKKyAKKyAgICAgIyBhKgorICAgICBhbHBoYXNvcnQ2NDsKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXNkZXAuUyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5c2RlcC5TCitpbmRleCA1ZjExYmM3MzdiLi4yZmQyMTdiMDBiIDEwMDY0NAorLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzZGVwLlMKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5c2RlcC5TCitAQCAtMzAsMyArMzAsMTQgQEAgRU5UUlkgKF9fc3lzY2FsbF9lcnJvcikKKyAKKyAjZGVmaW5lIF9fc3lzY2FsbF9lcnJvciBfX3N5c2NhbGxfZXJyb3JfMQorICNpbmNsdWRlIDxzeXNkZXBzL3VuaXgvc2gvc3lzZGVwLlM+CisrCisrICAgICAgIC5kYXRhCisrICAgICAgIC5hbGlnbiAzCisrICAgICAgIC5nbG9ibCBfX19mcHNjcl92YWx1ZXMKKysgICAgICAgLnR5cGUgX19fZnBzY3JfdmFsdWVzLCBAb2JqZWN0CisrICAgICAgIC5zaXplIF9fX2Zwc2NyX3ZhbHVlcywgOAorK19fX2Zwc2NyX3ZhbHVlczoKKysgICAgICAgLmxvbmcgMAorKyAgICAgICAubG9uZyAweDgwMDAwCisrd2Vha19hbGlhcyAoX19fZnBzY3JfdmFsdWVzLCBfX2Zwc2NyX3ZhbHVlcykKKysKKy0tIAorMi4xMy4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIwLWVnbGliYy1jaGVycnktcGlja2VkLWZyb20ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMC1lZ2xpYmMtY2hlcnJ5LXBpY2tlZC1mcm9tLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzQ0NTczLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIwLWVnbGliYy1jaGVycnktcGlja2VkLWZyb20ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi1Gcm9tIGIyZWQ5MDZlYzg2NDU4M2I0MzM3OWVmOWFkMmI1NjMwYzEyMzI1NjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogVGh1LCAzMSBEZWMgMjAxNSAxNToxMDozMyAtMDgwMAotU3ViamVjdDogW1BBVENIIDIwLzI2XSBlZ2xpYmM6IGNoZXJyeS1waWNrZWQgZnJvbQotCi1odHRwOi8vd3d3LmVnbGliYy5vcmcvYXJjaGl2ZXMvcGF0Y2hlcy9tc2cwMDc3Mi5odG1sCi0KLU5vdCB5ZXQgbWVyZ2VkIGludG8gZ2xpYmMKLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSByZXNvbHYvcmVzX2xpYmMuYyB8IDE0ICsrKysrKysrKysrKystCi0gMSBmaWxlIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL3Jlc29sdi9yZXNfbGliYy5jIGIvcmVzb2x2L3Jlc19saWJjLmMKLWluZGV4IGE0YjM3NmYuLjMyNTZlMTIgMTAwNjQ0Ci0tLS0gYS9yZXNvbHYvcmVzX2xpYmMuYwotKysrIGIvcmVzb2x2L3Jlc19saWJjLmMKLUBAIC0yMSwxMSArMjEsMTMgQEAKLSAjaW5jbHVkZSA8YXRvbWljLmg+Ci0gI2luY2x1ZGUgPGxpbWl0cy5oPgotICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSsjaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotICNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KLSAjaW5jbHVkZSA8cmVzb2x2Lmg+Ci0gI2luY2x1ZGUgPGxpYmMtbG9jay5oPgotIAotK19fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZCAoc3RhdGljLCBsb2NrKTsKLSBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3Jlc19pbml0c3RhbXAgYXR0cmlidXRlX2hpZGRlbjsKLSAvKiBXZSBoYXZlIGF0b21pYyBpbmNyZW1lbnQgb3BlcmF0aW9ucyBvbiA2NC1iaXQgcGxhdGZvcm1zLiAgKi8KLSAjaWYgX19XT1JEU0laRSA9PSA2NAotQEAgLTMzLDcgKzM1LDYgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19yZXNfaW5pdHN0YW1wIGF0dHJpYnV0ZV9oaWRkZW47Ci0gIyBkZWZpbmUgYXRvbWljaW5jdW5sb2NrKGxvY2spICh2b2lkKSAwCi0gIyBkZWZpbmUgYXRvbWljaW5jKHZhcikgY2F0b21pY19pbmNyZW1lbnQgKCYodmFyKSkKLSAjZWxzZQotLV9fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZCAoc3RhdGljLCBsb2NrKTsKLSAjIGRlZmluZSBhdG9taWNpbmNsb2NrKGxvY2spIF9fbGliY19sb2NrX2xvY2sgKGxvY2spCi0gIyBkZWZpbmUgYXRvbWljaW5jdW5sb2NrKGxvY2spIF9fbGliY19sb2NrX3VubG9jayAobG9jaykKLSAjIGRlZmluZSBhdG9taWNpbmModmFyKSArK3ZhcgotQEAgLTkyLDcgKzkzLDE4IEBAIHJlc19pbml0KHZvaWQpIHsKLSBpbnQKLSBfX3Jlc19tYXliZV9pbml0IChyZXNfc3RhdGUgcmVzcCwgaW50IHByZWluaXQpCi0gewotKwlzdGF0aWMgdGltZV90IGxhc3RfbXRpbWU7Ci0rCXN0cnVjdCBzdGF0IHN0YXRidWY7Ci0rCWludCByZXQ7Ci0rCi0gCWlmIChyZXNwLT5vcHRpb25zICYgUkVTX0lOSVQpIHsKLSsJCXJldCA9IHN0YXQgKF9QQVRIX1JFU0NPTkYsICZzdGF0YnVmKTsKLSsJCV9fbGliY19sb2NrX2xvY2sgKGxvY2spOwotKwkJaWYgKChyZXQgPT0gMCkgJiYgKGxhc3RfbXRpbWUgIT0gc3RhdGJ1Zi5zdF9tdGltZSkpIHsKLSsJCQlsYXN0X210aW1lID0gc3RhdGJ1Zi5zdF9tdGltZTsKLSsJCQlhdG9taWNpbmMgKF9fcmVzX2luaXRzdGFtcCk7Ci0rCQl9Ci0rCQlfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOwotIAkJaWYgKF9fcmVzX2luaXRzdGFtcCAhPSByZXNwLT5fdS5fZXh0LmluaXRzdGFtcCkgewotIAkJCWlmIChyZXNwLT5uc2NvdW50ID4gMCkKLSAJCQkJX19yZXNfaWNsb3NlIChyZXNwLCB0cnVlKTsKLS0tIAotMi4xMC4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIxLWVnbGliYy1DbGVhci1jYWNoZS1saW5lcy1vbi1wcGM4eHgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMS1lZ2xpYmMtQ2xlYXItY2FjaGUtbGluZXMtb24tcHBjOHh4LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWE3MzkxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIxLWVnbGliYy1DbGVhci1jYWNoZS1saW5lcy1vbi1wcGM4eHgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi1Gcm9tIDAwMGFiNTE4YWExMjY5NzE0YmMwYTlhNDYzM2IwYTUzOGZhZTkxZDkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogVGh1LCAzMSBEZWMgMjAxNSAxNToxNTowOSAtMDgwMAotU3ViamVjdDogW1BBVENIIDIxLzI2XSBlZ2xpYmM6IENsZWFyIGNhY2hlIGxpbmVzIG9uIHBwYzh4eAotCi0yMDA3LTA2LTEzICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBjb2Rlc291cmNlcnkuY29tPgotICAgICAgICAgICAgTWFyayBTaGlud2VsbCAgPHNoaW53ZWxsQGNvZGVzb3VyY2VyeS5jb20+Ci0KLSAgICAgICAgKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2xpYmMtc3RhcnQuYwotICAgICAgICAoX19saWJjX3N0YXJ0X21haW4pOiBEZXRlY3QgOHh4IHBhcnRzIGFuZCBjbGVhcgotICAgICAgICBfX2NhY2hlX2xpbmVfc2l6ZSBpZiBkZXRlY3RlZC4KLSAgICAgICAgKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2RsLXN5c2RlcC5jCi0gICAgICAgIChETF9QTEFURk9STV9BVVhWKTogTGlrZXdpc2UuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi0gc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9kbC1zeXNkZXAuYyAgfCAxNCArKysrKysrKysrKysrLQotIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvbGliYy1zdGFydC5jIHwgMTYgKysrKysrKysrKysrKysrLQotIDIgZmlsZXMgY2hhbmdlZCwgMjggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvZGwtc3lzZGVwLmMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2RsLXN5c2RlcC5jCi1pbmRleCA5OGVjMmIzLi5iMzg0YWUwIDEwMDY0NAotLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9kbC1zeXNkZXAuYwotKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9kbC1zeXNkZXAuYwotQEAgLTI0LDkgKzI0LDIxIEBAIGludCBfX2NhY2hlX2xpbmVfc2l6ZSBhdHRyaWJ1dGVfaGlkZGVuOwotIC8qIFNjYW4gdGhlIEF1eCBWZWN0b3IgZm9yIHRoZSAiRGF0YSBDYWNoZSBCbG9jayBTaXplIiBlbnRyeS4gIElmIGZvdW5kCi0gICAgdmVyaWZ5IHRoYXQgdGhlIHN0YXRpYyBleHRlcm4gX19jYWNoZV9saW5lX3NpemUgaXMgZGVmaW5lZCBieSBjaGVja2luZwotICAgIGZvciBub3QgTlVMTC4gIElmIGl0IGlzIGRlZmluZWQgdGhlbiBhc3NpZ24gdGhlIGNhY2hlIGJsb2NrIHNpemUKLS0gICB2YWx1ZSB0byBfX2NhY2hlX2xpbmVfc2l6ZS4gICovCi0rICAgdmFsdWUgdG8gX19jYWNoZV9saW5lX3NpemUuICBUaGlzIGlzIHVzZWQgYnkgbWVtc2V0IHRvCi0rICAgb3B0aW1pemUgc2V0dGluZyB0byB6ZXJvLiAgV2UgaGF2ZSB0byBkZXRlY3QgOHh4IHByb2Nlc3NvcnMsIHdoaWNoCi0rICAgaGF2ZSBidWdneSBkY2J6IGltcGxlbWVudGF0aW9ucyB0aGF0IGNhbm5vdCByZXBvcnQgcGFnZSBmYXVsdHMKLSsgICBjb3JyZWN0bHkuICBUaGF0IHJlcXVpcmVzIHJlYWRpbmcgU1BSLCB3aGljaCBpcyBhIHByaXZpbGVnZWQKLSsgICBvcGVyYXRpb24uICBGb3J0dW5hdGVseSAyLjIuMTggYW5kIGxhdGVyIGVtdWxhdGVzIFBvd2VyUEMgbWZzcHIKLSsgICByZWFkcyBmcm9tIHRoZSBQVlIgcmVnaXN0ZXIuICAgKi8KLSAjZGVmaW5lIERMX1BMQVRGT1JNX0FVWFYJCQkJCQkgICAgICBcCi0gICAgICAgY2FzZSBBVF9EQ0FDSEVCU0laRToJCQkJCQkgICAgICBcCi0rCWlmIChfX0xJTlVYX0tFUk5FTF9WRVJTSU9OID49IDB4MDIwMjE4KQkJCQkgICAgICBcCi0rCSAgewkJCQkJCQkJICAgICAgXAotKwkgICAgdW5zaWduZWQgcHZyID0gMDsJCQkJCQkgICAgICBcCi0rCSAgICBhc20gKCJtZnNwciAlMCwgMjg3IiA6ICI9ciIgKHB2cikpOwkJCQkgICAgICBcCi0rCSAgICBpZiAoKHB2ciAmIDB4ZmZmZjAwMDApID09IDB4MDA1MDAwMDApCQkJICAgICAgXAotKwkgICAgICBicmVhazsJCQkJCQkJICAgICAgXAotKwkgIH0JCQkJCQkJCSAgICAgIFwKLSAJX19jYWNoZV9saW5lX3NpemUgPSBhdi0+YV91bi5hX3ZhbDsJCQkJICAgICAgXAotIAlicmVhazsKLSAKLWRpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2xpYmMtc3RhcnQuYyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvbGliYy1zdGFydC5jCi1pbmRleCAwZWZkMjk3Li44Y2MwZWY4IDEwMDY0NAotLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9saWJjLXN0YXJ0LmMKLSsrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvbGliYy1zdGFydC5jCi1AQCAtNzMsMTEgKzczLDI1IEBAIF9fbGliY19zdGFydF9tYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YsCi0gCi0gICAvKiBJbml0aWFsaXplIHRoZSBfX2NhY2hlX2xpbmVfc2l6ZSB2YXJpYWJsZSBmcm9tIHRoZSBhdXggdmVjdG9yLiAgRm9yIHRoZQotICAgICAgc3RhdGljIGNhc2UsIHdlIGFsc28gbmVlZCBfZGxfaHdjYXAsIF9kbF9od2NhcDIgYW5kIF9kbF9wbGF0Zm9ybSwgc28gd2UKLS0gICAgIGNhbiBjYWxsIF9fdGNiX3BhcnNlX2h3Y2FwX2FuZF9jb252ZXJ0X2F0X3BsYXRmb3JtICgpLiAgKi8KLSsgICAgIGNhbiBjYWxsIF9fdGNiX3BhcnNlX2h3Y2FwX2FuZF9jb252ZXJ0X2F0X3BsYXRmb3JtICgpLgotKwotKyAgICAgVGhpcyBpcyB1c2VkIGJ5IG1lbXNldCB0byBvcHRpbWl6ZSBzZXR0aW5nIHRvIHplcm8uICBXZSBoYXZlIHRvCi0rICAgICBkZXRlY3QgOHh4IHByb2Nlc3NvcnMsIHdoaWNoIGhhdmUgYnVnZ3kgZGNieiBpbXBsZW1lbnRhdGlvbnMgdGhhdAotKyAgICAgY2Fubm90IHJlcG9ydCBwYWdlIGZhdWx0cyBjb3JyZWN0bHkuICBUaGF0IHJlcXVpcmVzIHJlYWRpbmcgU1BSLAotKyAgICAgd2hpY2ggaXMgYSBwcml2aWxlZ2VkIG9wZXJhdGlvbi4gIEZvcnR1bmF0ZWx5IDIuMi4xOCBhbmQgbGF0ZXIKLSsgICAgIGVtdWxhdGVzIFBvd2VyUEMgbWZzcHIgcmVhZHMgZnJvbSB0aGUgUFZSIHJlZ2lzdGVyLiAgKi8KLSAgIGZvciAoRWxmVyAoYXV4dl90KSAqIGF2ID0gYXV4dmVjOyBhdi0+YV90eXBlICE9IEFUX05VTEw7ICsrYXYpCi0gICAgIHN3aXRjaCAoYXYtPmFfdHlwZSkKLSAgICAgICB7Ci0gICAgICAgY2FzZSBBVF9EQ0FDSEVCU0laRToKLSsJaWYgKF9fTElOVVhfS0VSTkVMX1ZFUlNJT04gPj0gMHgwMjAyMTgpCi0rCSAgewotKwkgICAgdW5zaWduZWQgcHZyID0gMDsKLSsKLSsJICAgIGFzbSAoIm1mc3ByICUwLCAyODciIDogIj1yIiAocHZyKSA6KTsKLSsJICAgIGlmICgocHZyICYgMHhmZmZmMDAwMCkgPT0gMHgwMDUwMDAwMCkKLSsJICAgICAgYnJlYWs7Ci0rCSAgfQotIAlfX2NhY2hlX2xpbmVfc2l6ZSA9IGF2LT5hX3VuLmFfdmFsOwotIAlicmVhazsKLSAjaWZuZGVmIFNIQVJFRAotLS0gCi0yLjEwLjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjEtZWdsaWJjLUluc3RhbGwtUElDLWFyY2hpdmVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjEtZWdsaWJjLUluc3RhbGwtUElDLWFyY2hpdmVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZTM5N2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMS1lZ2xpYmMtSW5zdGFsbC1QSUMtYXJjaGl2ZXMucGF0Y2gKQEAgLTAsMCArMSwxMjMgQEAKK0Zyb20gMzM5MmVlODNiMDEzMmMwODlkZmZiMWU5ODkyYjRiMjUyY2UxZWMwZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAxOjU3OjAxICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMjEvMjVdIGVnbGliYzogSW5zdGFsbCBQSUMgYXJjaGl2ZXMKKworRm9yd2FyZCBwb3J0IGZyb20gZWdsaWJjCisKKzIwMDgtMDItMDcgIEpvc2VwaCBNeWVycyAgPGpvc2VwaEBjb2Rlc291cmNlcnkuY29tPgorCisgICAgICAgICogTWFrZXJ1bGVzIChpbnN0YWxsLWV4dHJhcywgaW5zdGFsbC1tYXApOiBOZXcgdmFyaWFibGVzLgorICAgICAgICAoaW5zdGFsbGVkLWxpYmNzKTogQWRkIGxpYmNfcGljLmEuCisgICAgICAgIChpbnN0YWxsLWxpYik6IEluY2x1ZGUgX3BpYy5hIGZpbGVzIGZvciB2ZXJzaW9uZWQgc2hhcmVkCisgICAgICAgIGxpYnJhcmllcy4KKyAgICAgICAgKGluc3RhbGwtbWFwLW5vc3ViZGlyLCBpbnN0YWxsLWV4dHJhcy1ub3N1YmRpcik6IEFkZCBydWxlcyBmb3IKKyAgICAgICAgaW5zdGFsbGluZyBleHRyYSBmaWxlcy4KKyAgICAgICAgKGluc3RhbGwtbm8tbGliYy5hLW5vc3ViZGlyKTogRGVwZW5kIG9uIGluc3RhbGwtbWFwLW5vc3ViZGlyIGFuZAorICAgICAgICBpbnN0YWxsLWV4dHJhcy1ub3N1YmRpci4KKworMjAwOC0wNC0wMSAgTWF4aW0gS3V2eXJrb3YgIDxtYXhpbUBjb2Rlc291cmNlcnkuY29tPgorCisgICAgICAgICogTWFrZXJ1bGVzIChpbnN0YWxsLWxpYik6IERvbid0IGluc3RhbGwgbGlicHRocmVhZF9waWMuYS4KKyAgICAgICAgKGluc3RhbGwtbWFwKTogRG9uJ3QgaW5zdGFsbCBsaWJwdGhyZWFkX3BpYy5tYXAuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgTWFrZXJ1bGVzIHwgNDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDQwIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlcnVsZXMgYi9NYWtlcnVsZXMKK2luZGV4IDliYjcwN2MxNjguLjc0Y2JlZmI5YmEgMTAwNjQ0CistLS0gYS9NYWtlcnVsZXMKKysrKyBiL01ha2VydWxlcworQEAgLTc3NSw2ICs3NzUsOSBAQCBpZmVxICgkKGJ1aWxkLXNoYXJlZCkseWVzKQorICQoY29tbW9uLW9ianBmeClsaWJjLnNvOiAkKGNvbW1vbi1vYmpwZngpbGliYy5tYXAKKyBlbmRpZgorIGNvbW1vbi1nZW5lcmF0ZWQgKz0gbGliYy5zbyBsaWJjX3BpYy5vcworK2lmbmRlZiBzdWJkaXIKKytpbnN0YWxsLWV4dHJhcyA6PSBzb2luaXQubyBzb2ZpbmkubworK2VuZGlmCisgaWZkZWYgbGliYy5zby12ZXJzaW9uCisgJChjb21tb24tb2JqcGZ4KWxpYmMuc28kKGxpYmMuc28tdmVyc2lvbik6ICQoY29tbW9uLW9ianBmeClsaWJjLnNvCisgCSQobWFrZS1saW5rKQorQEAgLTEwMjYsNiArMTAyOSw3IEBAIGVuZGlmCisgCisgaW5zdGFsbDogY2hlY2staW5zdGFsbC1zdXBwb3J0ZWQKKyAKKytpbnN0YWxsZWQtbGliY3MgOj0gJChpbnN0YWxsZWQtbGliY3MpICQoaW5zdF9saWJkaXIpL2xpYmNfcGljLmEKKyBpbnN0YWxsOiAkKGluc3RhbGxlZC1saWJjcykKKyAkKGluc3RhbGxlZC1saWJjcyk6ICQoaW5zdF9saWJkaXIpL2xpYiQobGlicHJlZml4KSU6IGxpYiAkKCtmb3JjZSkKKyAJJChtYWtlLXRhcmdldC1kaXJlY3RvcnkpCitAQCAtMTA1NCw2ICsxMDU4LDIyIEBAIHZlcnNpb25lZCA6PSAkKHN0cmlwICQoZm9yZWFjaCBzbywkKGluc3RhbGwtbGliLnNvKSxcCisgaW5zdGFsbC1saWIuc28tdmVyc2lvbmVkIDo9ICQoZmlsdGVyICQodmVyc2lvbmVkKSwgJChpbnN0YWxsLWxpYi5zbykpCisgaW5zdGFsbC1saWIuc28tdW52ZXJzaW9uZWQgOj0gJChmaWx0ZXItb3V0ICQodmVyc2lvbmVkKSwgJChpbnN0YWxsLWxpYi5zbykpCisgCisrIyBJbnN0YWxsIHRoZSBfcGljLmEgZmlsZXMgZm9yIHZlcnNpb25lZCBsaWJyYXJpZXMsIGFuZCBjb3JyZXNwb25kaW5nCisrIyAubWFwIGZpbGVzLgorKyMgbGlicHRocmVhZF9waWMuYSBicmVha3MgbWtsaWJzLCBzbyBkb24ndCBpbnN0YWxsIGl0IGFuZCBpdHMgbWFwLgorK2luc3RhbGwtbGliIDo9ICQoaW5zdGFsbC1saWIpICQoaW5zdGFsbC1saWIuc28tdmVyc2lvbmVkOiUuc289JV9waWMuYSkKKytpbnN0YWxsLWxpYiA6PSAkKGZpbHRlci1vdXQgbGlicHRocmVhZF9waWMuYSwkKGluc3RhbGwtbGliKSkKKysjIERlc3BpdGUgaGF2aW5nIGEgc29uYW1lIGxpYmh1cmR1c2VyIGFuZCBsaWJtYWNodXNlciBkbyBub3QgdXNlIHN5bWJvbAorKyMgdmVyc2lvbmluZywgc28gZG9uJ3QgaW5zdGFsbCB0aGUgY29ycmVzcG9uZGluZyAubWFwIGZpbGVzLgorK2lmZXEgKCQoYnVpbGQtc2hhcmVkKSx5ZXMpCisraW5zdGFsbC1tYXAgOj0gJChwYXRzdWJzdCAlLnNvLCUubWFwLFwKKysJCQkkKGZvcmVhY2ggTCwkKGluc3RhbGwtbGliLnNvLXZlcnNpb25lZCksJChub3RkaXIgJEwpKSkKKytpbnN0YWxsLW1hcCA6PSAkKGZpbHRlci1vdXQgbGliaHVyZHVzZXIubWFwIGxpYm1hY2h1c2VyLm1hcCBsaWJwdGhyZWFkLm1hcCwkKGluc3RhbGwtbWFwKSkKKytpZm5kZWYgc3ViZGlyCisraW5zdGFsbC1tYXAgOj0gJChpbnN0YWxsLW1hcCkgbGliYy5tYXAKKytlbmRpZgorK2VuZGlmCisrCisgIyBGb3IgdmVyc2lvbmVkIGxpYnJhcmllcywgd2UgaW5zdGFsbCB0aHJlZSBmaWxlczoKKyAjCSQoaW5zdF9saWJkaXIpL2xpYmZvby5zbwktLSBmb3IgbGlua2luZywgc3ltbGluayBvciBsZCBzY3JpcHQKKyAjCSQoaW5zdF9zbGliZGlyKS9saWJmb28uc28uTk4JLS0gZm9yIGxvYWRpbmcgYnkgU09OQU1FLCBzeW1saW5rCitAQCAtMTI5OCw5ICsxMzE4LDIyIEBAICQoYWRkcHJlZml4ICQoaW5zdF9pbmNsdWRlZGlyKS8sJChoZWFkZXJzLW5vbmgpKTogJChpbnN0X2luY2x1ZGVkaXIpLyU6IFwKKyBlbmRpZgkjIGhlYWRlcnMtbm9uaAorIGVuZGlmCSMgaGVhZGVycworIAorK2lmZGVmIGluc3RhbGwtbWFwCisrJChhZGRwcmVmaXggJChpbnN0X2xpYmRpcikvLCQocGF0c3Vic3QgbGliJS5tYXAsbGliJV9waWMubWFwLCQoaW5zdGFsbC1tYXApKSk6IFwKKysgICQoaW5zdF9saWJkaXIpL2xpYiVfcGljLm1hcDogJChjb21tb24tb2JqcGZ4KWxpYiUubWFwICQoK2ZvcmNlKQorKwkkKGRvLWluc3RhbGwpCisrZW5kaWYKKysKKytpZmRlZiBpbnN0YWxsLWV4dHJhcworKyQoYWRkcHJlZml4ICQoaW5zdF9saWJkaXIpL2xpYmNfcGljLywkKGluc3RhbGwtZXh0cmFzKSk6IFwKKysgICQoaW5zdF9saWJkaXIpL2xpYmNfcGljLyUubzogJChlbGYtb2JqcGZ4KSUub3MgJCgrZm9yY2UpCisrCSQoZG8taW5zdGFsbCkKKytlbmRpZgorKworIC5QSE9OWTogaW5zdGFsbC1iaW4tbm9zdWJkaXIgaW5zdGFsbC1iaW4tc2NyaXB0LW5vc3ViZGlyIFwKKyAJaW5zdGFsbC1yb290c2Jpbi1ub3N1YmRpciBpbnN0YWxsLXNiaW4tbm9zdWJkaXIgaW5zdGFsbC1saWItbm9zdWJkaXIgXAorLQlpbnN0YWxsLWRhdGEtbm9zdWJkaXIgaW5zdGFsbC1oZWFkZXJzLW5vc3ViZGlyCisrCWluc3RhbGwtZGF0YS1ub3N1YmRpciBpbnN0YWxsLWhlYWRlcnMtbm9zdWJkaXIgaW5zdGFsbC1tYXAtbm9zdWJkaXIgXAorKwlpbnN0YWxsLWV4dHJhcy1ub3N1YmRpcgorIGluc3RhbGwtYmluLW5vc3ViZGlyOiAkKGFkZHByZWZpeCAkKGluc3RfYmluZGlyKS8sJChpbnN0YWxsLWJpbikpCisgaW5zdGFsbC1iaW4tc2NyaXB0LW5vc3ViZGlyOiAkKGFkZHByZWZpeCAkKGluc3RfYmluZGlyKS8sJChpbnN0YWxsLWJpbi1zY3JpcHQpKQorIGluc3RhbGwtcm9vdHNiaW4tbm9zdWJkaXI6IFwKK0BAIC0xMzEzLDYgKzEzNDYsMTAgQEAgaW5zdGFsbC1kYXRhLW5vc3ViZGlyOiAkKGFkZHByZWZpeCAkKGluc3RfZGF0YWRpcikvLCQoaW5zdGFsbC1kYXRhKSkKKyBpbnN0YWxsLWhlYWRlcnMtbm9zdWJkaXI6ICQoYWRkcHJlZml4ICQoaW5zdF9pbmNsdWRlZGlyKS8sJChoZWFkZXJzKSkKKyBpbnN0YWxsLW90aGVycy1ub3N1YmRpcjogJChpbnN0YWxsLW90aGVycykKKyBpbnN0YWxsLW90aGVycy1wcm9ncmFtcy1ub3N1YmRpcjogJChpbnN0YWxsLW90aGVycy1wcm9ncmFtcykKKytpbnN0YWxsLW1hcC1ub3N1YmRpcjogJChhZGRwcmVmaXggJChpbnN0X2xpYmRpcikvLFwKKysJCSAgICAgICAkKHBhdHN1YnN0IGxpYiUubWFwLGxpYiVfcGljLm1hcCwkKGluc3RhbGwtbWFwKSkpCisraW5zdGFsbC1leHRyYXMtbm9zdWJkaXI6ICQoYWRkcHJlZml4ICQoaW5zdF9saWJkaXIpL2xpYmNfcGljLyxcCisrCQkgICAgICAgJChpbnN0YWxsLWV4dHJhcykpCisgCisgIyBXZSBuZWVkIGFsbCB0aGUgYC1ub3N1YmRpcicgdGFyZ2V0cyBzbyB0aGF0IGBpbnN0YWxsJyBpbiB0aGUgcGFyZW50CisgIyBkb2Vzbid0IGRlcGVuZCBvbiBzZXZlcmFsIHRoaW5ncyB3aGljaCBlYWNoIGl0ZXJhdGUgb3ZlciB0aGUgc3ViZGlycy4KK0BAIC0xMzIyLDcgKzEzNTksOCBAQCBpbnN0YWxsLSU6OiBpbnN0YWxsLSUtbm9zdWJkaXIgOworIAorIC5QSE9OWTogaW5zdGFsbCBpbnN0YWxsLW5vLWxpYmMuYS1ub3N1YmRpcgorIGluc3RhbGwtbm8tbGliYy5hLW5vc3ViZGlyOiBpbnN0YWxsLWhlYWRlcnMtbm9zdWJkaXIgaW5zdGFsbC1kYXRhLW5vc3ViZGlyIFwKKy0JCQkgICAgaW5zdGFsbC1saWItbm9zdWJkaXIgaW5zdGFsbC1vdGhlcnMtbm9zdWJkaXIKKysJCQkgICAgaW5zdGFsbC1saWItbm9zdWJkaXIgaW5zdGFsbC1vdGhlcnMtbm9zdWJkaXIgXAorKwkJCSAgICBpbnN0YWxsLW1hcC1ub3N1YmRpciBpbnN0YWxsLWV4dHJhcy1ub3N1YmRpcgorIGlmZXEgKCQoYnVpbGQtcHJvZ3JhbXMpLHllcykKKyBpbnN0YWxsLW5vLWxpYmMuYS1ub3N1YmRpcjogaW5zdGFsbC1iaW4tbm9zdWJkaXIgaW5zdGFsbC1iaW4tc2NyaXB0LW5vc3ViZGlyIFwKKyAJCQkgICAgaW5zdGFsbC1yb290c2Jpbi1ub3N1YmRpciBpbnN0YWxsLXNiaW4tbm9zdWJkaXIgXAorLS0gCisyLjEzLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjItZWdsaWJjLUZvcndhcmQtcG9ydC1jcm9zcy1sb2NhbGUtZ2VuZXJhdGlvbi1zdXBwb3J0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjItZWdsaWJjLUZvcndhcmQtcG9ydC1jcm9zcy1sb2NhbGUtZ2VuZXJhdGlvbi1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhOGEyMGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMi1lZ2xpYmMtRm9yd2FyZC1wb3J0LWNyb3NzLWxvY2FsZS1nZW5lcmF0aW9uLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSw1NjYgQEAKK0Zyb20gZDk3NTMzZGMyMDFjZmQ4NjM3NjViMWE2N2EyN2ZkZTNlMjYyMmRhNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAxOjMzOjQ5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMjIvMjVdIGVnbGliYzogRm9yd2FyZCBwb3J0IGNyb3NzIGxvY2FsZSBnZW5lcmF0aW9uIHN1cHBvcnQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsb2NhbGUvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAzICsrLQorIGxvY2FsZS9jYXRuYW1lcy5jICAgICAgICAgICAgIHwgNDggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBsb2NhbGUvbG9jYWxlaW5mby5oICAgICAgICAgICB8ICAyICstCisgbG9jYWxlL3Byb2dyYW1zL2NoYXJtYXAtZGlyLmMgfCAgNiArKysrKworIGxvY2FsZS9wcm9ncmFtcy9sZC1jb2xsYXRlLmMgIHwgMTcgKysrKysrLS0tLS0tLQorIGxvY2FsZS9wcm9ncmFtcy9sZC1jdHlwZS5jICAgIHwgMjcgKysrKysrKysrKy0tLS0tLS0tLS0KKyBsb2NhbGUvcHJvZ3JhbXMvbGQtdGltZS5jICAgICB8IDMxICsrKysrKysrKysrKysrKy0tLS0tLS0tCisgbG9jYWxlL3Byb2dyYW1zL2xpbmVyZWFkZXIuYyAgfCAgMiArLQorIGxvY2FsZS9wcm9ncmFtcy9sb2NhbGVkZWYuYyAgIHwgIDggKysrKysrCisgbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuYyAgICAgfCAgNSArKystCisgbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuaCAgICAgfCA1OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCisgbG9jYWxlL3NldGxvY2FsZS5jICAgICAgICAgICAgfCAzMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMTIgZmlsZXMgY2hhbmdlZCwgMTY5IGluc2VydGlvbnMoKyksIDY5IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsb2NhbGUvY2F0bmFtZXMuYworCitkaWZmIC0tZ2l0IGEvbG9jYWxlL01ha2VmaWxlIGIvbG9jYWxlL01ha2VmaWxlCitpbmRleCA5OGVlNzYyNzJkLi5iYzNhZmIyMjQ4IDEwMDY0NAorLS0tIGEvbG9jYWxlL01ha2VmaWxlCisrKysgYi9sb2NhbGUvTWFrZWZpbGUKK0BAIC0yNiw3ICsyNiw4IEBAIGhlYWRlcnMJCT0gbGFuZ2luZm8uaCBsb2NhbGUuaCBiaXRzL2xvY2FsZS5oIFwKKyAJCSAgYml0cy90eXBlcy9sb2NhbGVfdC5oIGJpdHMvdHlwZXMvX19sb2NhbGVfdC5oCisgcm91dGluZXMJPSBzZXRsb2NhbGUgZmluZGxvY2FsZSBsb2FkbG9jYWxlIGxvYWRhcmNoaXZlIFwKKyAJCSAgbG9jYWxlY29udiBubF9sYW5naW5mbyBubF9sYW5naW5mb19sIG1iX2N1cl9tYXggXAorLQkJICBuZXdsb2NhbGUgZHVwbG9jYWxlIGZyZWVsb2NhbGUgdXNlbG9jYWxlCisrCQkgIG5ld2xvY2FsZSBkdXBsb2NhbGUgZnJlZWxvY2FsZSB1c2Vsb2NhbGUgXAorKwkJICBjYXRuYW1lcworIHRlc3RzCQk9IHRzdC1DLWxvY2FsZSB0c3QtbG9jbmFtZSB0c3QtZHVwbG9jYWxlCisgY2F0ZWdvcmllcwk9IGN0eXBlIG1lc3NhZ2VzIG1vbmV0YXJ5IG51bWVyaWMgdGltZSBwYXBlciBuYW1lIFwKKyAJCSAgYWRkcmVzcyB0ZWxlcGhvbmUgbWVhc3VyZW1lbnQgaWRlbnRpZmljYXRpb24gY29sbGF0ZQorZGlmZiAtLWdpdCBhL2xvY2FsZS9jYXRuYW1lcy5jIGIvbG9jYWxlL2NhdG5hbWVzLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwLi45ZmFkMzU3ZGIxCistLS0gL2Rldi9udWxsCisrKysgYi9sb2NhbGUvY2F0bmFtZXMuYworQEAgLTAsMCArMSw0OCBAQAorKy8qIENvcHlyaWdodCAoQykgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlICJsb2NhbGVpbmZvLmgiCisrCisrLyogRGVmaW5lIGFuIGFycmF5IG9mIGNhdGVnb3J5IG5hbWVzIChhbHNvIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcykuICAqLworK2NvbnN0IHVuaW9uIGNhdG5hbWVzdHJfdCBfbmxfY2F0ZWdvcnlfbmFtZXMgYXR0cmlidXRlX2hpZGRlbiA9CisrICB7CisrICAgIHsKKysjZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpIFwKKysgICAgICBjYXRlZ29yeV9uYW1lLAorKyNpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKKysjdW5kZWYgREVGSU5FX0NBVEVHT1JZCisrICAgIH0KKysgIH07CisrCisrY29uc3QgdWludDhfdCBfbmxfY2F0ZWdvcnlfbmFtZV9pZHhzW19fTENfTEFTVF0gYXR0cmlidXRlX2hpZGRlbiA9CisrICB7CisrI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCisrICAgIFtjYXRlZ29yeV0gPSBvZmZzZXRvZiAodW5pb24gY2F0bmFtZXN0cl90LCBDQVROQU1FTUYgKF9fTElORV9fKSksCisrI2luY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgorKyN1bmRlZiBERUZJTkVfQ0FURUdPUlkKKysgIH07CisrCisrLyogQW4gYXJyYXkgb2YgdGhlaXIgbGVuZ3RocywgZm9yIGNvbnZlbmllbmNlLiAgKi8KKytjb25zdCB1aW50OF90IF9ubF9jYXRlZ29yeV9uYW1lX3NpemVzW10gYXR0cmlidXRlX2hpZGRlbiA9CisrICB7CisrI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCisrICAgIFtjYXRlZ29yeV0gPSBzaXplb2YgKGNhdGVnb3J5X25hbWUpIC0gMSwKKysjaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCisrI3VuZGVmCURFRklORV9DQVRFR09SWQorKyAgICBbTENfQUxMXSA9IHNpemVvZiAoIkxDX0FMTCIpIC0gMQorKyAgfTsKK2RpZmYgLS1naXQgYS9sb2NhbGUvbG9jYWxlaW5mby5oIGIvbG9jYWxlL2xvY2FsZWluZm8uaAoraW5kZXggNGUxYzhjNTY4YS4uZjdlZDk0NmYxYyAxMDA2NDQKKy0tLSBhL2xvY2FsZS9sb2NhbGVpbmZvLmgKKysrKyBiL2xvY2FsZS9sb2NhbGVpbmZvLmgKK0BAIC0yMjQsNyArMjI0LDcgQEAgX19saWJjX3RzZF9kZWZpbmUgKGV4dGVybiwgbG9jYWxlX3QsIExPQ0FMRSkKKyAgICB1bnVzZWQuICBXZSBjYW4gbWFuYWdlIHRoaXMgcGxheWluZyBzb21lIHRyaWNrcyB3aXRoIHdlYWsgcmVmZXJlbmNlcy4KKyAgICBCdXQgd2l0aCB0aHJlYWQtbG9jYWwgbG9jYWxlIHNldHRpbmdzLCBpdCBiZWNvbWVzIHF1aXRlIHVuZ2Fpbmx5IHVubGVzcworICAgIHdlIGNhbiB1c2UgX190aHJlYWQgdmFyaWFibGVzLiAgU28gb25seSBpbiB0aGF0IGNhc2UgZG8gd2UgYXR0ZW1wdCB0aGlzLiAgKi8KKy0jaWZuZGVmIFNIQVJFRAorKyNpZiAhZGVmaW5lZCBTSEFSRUQgJiYgIWRlZmluZWQgSU5fR0xJQkNfTE9DQUxFREVGCisgIyBpbmNsdWRlIDx0bHMuaD4KKyAjIGRlZmluZSBOTF9DVVJSRU5UX0lORElSRUNUCTEKKyAjZW5kaWYKK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvY2hhcm1hcC1kaXIuYyBiL2xvY2FsZS9wcm9ncmFtcy9jaGFybWFwLWRpci5jCitpbmRleCBlNTVhYjg2ZTI4Li4wZjg3ZTZkZDI4IDEwMDY0NAorLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2NoYXJtYXAtZGlyLmMKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9jaGFybWFwLWRpci5jCitAQCAtMTksNyArMTksOSBAQAorICNpbmNsdWRlIDxlcnJvci5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxsaWJpbnRsLmg+CisrI2lmbmRlZiBOT19VTkNPTVBSRVNTCisgI2luY2x1ZGUgPHNwYXduLmg+CisrI2VuZGlmCisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KK0BAIC0xNTYsNiArMTU4LDcgQEAgY2hhcm1hcF9jbG9zZWRpciAoQ0hBUk1BUF9ESVIgKmNkaXIpCisgICByZXR1cm4gY2xvc2VkaXIgKGRpcik7CisgfQorIAorKyNpZm5kZWYgTk9fVU5DT01QUkVTUworIC8qIENyZWF0ZXMgYSBzdWJwcm9jZXNzIGRlY29tcHJlc3NpbmcgdGhlIGdpdmVuIHBhdGhuYW1lLCBhbmQgcmV0dXJucworICAgIGEgc3RyZWFtIHJlYWRpbmcgaXRzIG91dHB1dCAodGhlIGRlY29tcHJlc3NlZCBkYXRhKS4gICovCisgc3RhdGljCitAQCAtMjA0LDYgKzIwNyw3IEBAIGZvcGVuX3VuY29tcHJlc3NlZCAoY29uc3QgY2hhciAqcGF0aG5hbWUsIGNvbnN0IGNoYXIgKmNvbXByZXNzb3IpCisgICAgIH0KKyAgIHJldHVybiBOVUxMOworIH0KKysjZW5kaWYKKyAKKyAvKiBPcGVucyBhIGNoYXJtYXAgZm9yIHJlYWRpbmcsIGdpdmVuIGl0cyBuYW1lIChub3QgYW4gYWxpYXMgbmFtZSkuICAqLworIEZJTEUgKgorQEAgLTIyNiw2ICsyMzAsNyBAQCBjaGFybWFwX29wZW4gKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSwgY29uc3QgY2hhciAqbmFtZSkKKyAgIGlmIChzdHJlYW0gIT0gTlVMTCkKKyAgICAgcmV0dXJuIHN0cmVhbTsKKyAKKysjaWZuZGVmIE5PX1VOQ09NUFJFU1MKKyAgIG1lbWNweSAocCwgIi5neiIsIDQpOworICAgc3RyZWFtID0gZm9wZW5fdW5jb21wcmVzc2VkIChwYXRobmFtZSwgImd6aXAiKTsKKyAgIGlmIChzdHJlYW0gIT0gTlVMTCkKK0BAIC0yMzUsNiArMjQwLDcgQEAgY2hhcm1hcF9vcGVuIChjb25zdCBjaGFyICpkaXJlY3RvcnksIGNvbnN0IGNoYXIgKm5hbWUpCisgICBzdHJlYW0gPSBmb3Blbl91bmNvbXByZXNzZWQgKHBhdGhuYW1lLCAiYnppcDIiKTsKKyAgIGlmIChzdHJlYW0gIT0gTlVMTCkKKyAgICAgcmV0dXJuIHN0cmVhbTsKKysjZW5kaWYKKyAKKyAgIHJldHVybiBOVUxMOworIH0KK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbGQtY29sbGF0ZS5jIGIvbG9jYWxlL3Byb2dyYW1zL2xkLWNvbGxhdGUuYworaW5kZXggY2VjODQ4Y2I3Yy4uZmNkNzY4ZWI3ZCAxMDA2NDQKKy0tLSBhL2xvY2FsZS9wcm9ncmFtcy9sZC1jb2xsYXRlLmMKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9sZC1jb2xsYXRlLmMKK0BAIC0zNTAsNyArMzUwLDcgQEAgbmV3X2VsZW1lbnQgKHN0cnVjdCBsb2NhbGVfY29sbGF0ZV90ICpjb2xsYXRlLCBjb25zdCBjaGFyICptYnMsIHNpemVfdCBtYnNsZW4sCisgICAgIH0KKyAgIGlmICh3Y3MgIT0gTlVMTCkKKyAgICAgeworLSAgICAgIHNpemVfdCBud2NzID0gd2NzbGVuICgod2NoYXJfdCAqKSB3Y3MpOworKyAgICAgIHNpemVfdCBud2NzID0gd2NzbGVuX3VpbnQzMiAod2NzKTsKKyAgICAgICB1aW50MzJfdCB6ZXJvID0gMDsKKyAgICAgICAvKiBIYW5kbGUgPFUwMDAwPiBhcyBhIHNpbmdsZSBjaGFyYWN0ZXIuICAqLworICAgICAgIGlmIChud2NzID09IDApCitAQCAtMTc3Niw4ICsxNzc2LDcgQEAgc3ltYm9sIGAlcycgaGFzIHRoZSBzYW1lIGVuY29kaW5nIGFzIiksICgqZXB0ciktPm5hbWUpOworIAorIAkgICAgICBpZiAoKCplcHRyKS0+bndjcyA9PSBydW5wLT5ud2NzKQorIAkJeworLQkJICBpbnQgYyA9IHdtZW1jbXAgKCh3Y2hhcl90ICopICgqZXB0ciktPndjcywKKy0JCQkJICAgKHdjaGFyX3QgKikgcnVucC0+d2NzLCBydW5wLT5ud2NzKTsKKysJCSAgaW50IGMgPSB3bWVtY21wX3VpbnQzMiAoKCplcHRyKS0+d2NzLCBydW5wLT53Y3MsIHJ1bnAtPm53Y3MpOworIAorIAkJICBpZiAoYyA9PSAwKQorIAkJICAgIHsKK0BAIC0yMDEwLDkgKzIwMDksOSBAQCBhZGRfdG9fdGFibGV3YyAodWludDMyX3QgY2gsIHN0cnVjdCBlbGVtZW50X3QgKnJ1bnApCisgCSAgICAgb25lIGNvbnNlY3V0aXZlIGVudHJ5LiAgKi8KKyAJICBpZiAocnVucC0+d2NuZXh0ICE9IE5VTEwKKyAJICAgICAgJiYgcnVucC0+bndjcyA9PSBydW5wLT53Y25leHQtPm53Y3MKKy0JICAgICAgJiYgd21lbWNtcCAoKHdjaGFyX3QgKikgcnVucC0+d2NzLAorLQkJCSAgKHdjaGFyX3QgKilydW5wLT53Y25leHQtPndjcywKKy0JCQkgIHJ1bnAtPm53Y3MgLSAxKSA9PSAwCisrCSAgICAgICYmIHdtZW1jbXBfdWludDMyIChydW5wLT53Y3MsCisrCQkJCSBydW5wLT53Y25leHQtPndjcywKKysJCQkJIHJ1bnAtPm53Y3MgLSAxKSA9PSAwCisgCSAgICAgICYmIChydW5wLT53Y3NbcnVucC0+bndjcyAtIDFdCisgCQkgID09IHJ1bnAtPndjbmV4dC0+d2NzW3J1bnAtPm53Y3MgLSAxXSArIDEpKQorIAkgICAgeworQEAgLTIwMzYsOSArMjAzNSw5IEBAIGFkZF90b190YWJsZXdjICh1aW50MzJfdCBjaCwgc3RydWN0IGVsZW1lbnRfdCAqcnVucCkKKyAJCXJ1bnAgPSBydW5wLT53Y25leHQ7CisgCSAgICAgIHdoaWxlIChydW5wLT53Y25leHQgIT0gTlVMTAorIAkJICAgICAmJiBydW5wLT5ud2NzID09IHJ1bnAtPndjbmV4dC0+bndjcworLQkJICAgICAmJiB3bWVtY21wICgod2NoYXJfdCAqKSBydW5wLT53Y3MsCistCQkJCSAod2NoYXJfdCAqKXJ1bnAtPndjbmV4dC0+d2NzLAorLQkJCQkgcnVucC0+bndjcyAtIDEpID09IDAKKysJCSAgICAgJiYgd21lbWNtcF91aW50MzIgKHJ1bnAtPndjcywKKysJCQkJCXJ1bnAtPndjbmV4dC0+d2NzLAorKwkJCQkJcnVucC0+bndjcyAtIDEpID09IDAKKyAJCSAgICAgJiYgKHJ1bnAtPndjc1tydW5wLT5ud2NzIC0gMV0KKyAJCQkgPT0gcnVucC0+d2NuZXh0LT53Y3NbcnVucC0+bndjcyAtIDFdICsgMSkpOworIAorZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9sZC1jdHlwZS5jIGIvbG9jYWxlL3Byb2dyYW1zL2xkLWN0eXBlLmMKK2luZGV4IGRmMjY2YzIwZDYuLjA1YzAxNTJlYzkgMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbGQtY3R5cGUuYworKysrIGIvbG9jYWxlL3Byb2dyYW1zL2xkLWN0eXBlLmMKK0BAIC05MjYsNyArOTI2LDcgQEAgY3R5cGVfb3V0cHV0IChzdHJ1Y3QgbG9jYWxlZGVmX3QgKmxvY2FsZSwgY29uc3Qgc3RydWN0IGNoYXJtYXBfdCAqY2hhcm1hcCwKKyAgIGFsbG9jYXRlX2FycmF5cyAoY3R5cGUsIGNoYXJtYXAsIGN0eXBlLT5yZXBlcnRvaXJlKTsKKyAKKyAgIGRlZmF1bHRfbWlzc2luZ19sZW4gPSAoY3R5cGUtPmRlZmF1bHRfbWlzc2luZworLQkJCSA/IHdjc2xlbiAoKHdjaGFyX3QgKikgY3R5cGUtPmRlZmF1bHRfbWlzc2luZykKKysJCQkgPyB3Y3NsZW5fdWludDMyIChjdHlwZS0+ZGVmYXVsdF9taXNzaW5nKQorIAkJCSA6IDApOworIAorICAgaW5pdF9sb2NhbGVfZGF0YSAoJmZpbGUsIG5lbGVtcyk7CitAQCAtMTkzNyw3ICsxOTM3LDcgQEAgcmVhZF90cmFuc2xpdF9lbnRyeSAoc3RydWN0IGxpbmVyZWFkZXIgKmxkZmlsZSwgc3RydWN0IGxvY2FsZV9jdHlwZV90ICpjdHlwZSwKKyAJICAgIGlnbm9yZSA9IDE7CisgCSAgZWxzZQorIAkgICAgLyogVGhpcyB2YWx1ZSBpcyB1c2FibGUuICAqLworLQkgICAgb2JzdGFja19ncm93IChvYiwgdG9fd3N0ciwgd2NzbGVuICgod2NoYXJfdCAqKSB0b193c3RyKSAqIDQpOworKwkgICAgb2JzdGFja19ncm93IChvYiwgdG9fd3N0ciwgd2NzbGVuX3VpbnQzMiAodG9fd3N0cikgKiA0KTsKKyAKKyAJICBmaXJzdCA9IDA7CisgCX0KK0BAIC0yNDcxLDggKzI0NzEsOCBAQCB3aXRoIGNoYXJhY3RlciBjb2RlIHJhbmdlIHZhbHVlcyBvbmUgbXVzdCB1c2UgdGhlIGFic29sdXRlIGVsbGlwc2lzIGAuLi4nIikpOworIAkgICAgfQorIAorIAloYW5kbGVfdG9rX2RpZ2l0OgorLQkgIGNsYXNzX2JpdCA9IF9JU3dkaWdpdDsKKy0JICBjbGFzczI1Nl9iaXQgPSBfSVNkaWdpdDsKKysJICBjbGFzc19iaXQgPSBCSVR3ICh0b2tfZGlnaXQpOworKwkgIGNsYXNzMjU2X2JpdCA9IEJJVCAodG9rX2RpZ2l0KTsKKyAJICBoYW5kbGVfZGlnaXRzID0gMTsKKyAJICBnb3RvIHJlYWRfY2hhcmNsYXNzOworIAorQEAgLTM5MjksOCArMzkyOSw3IEBAIGFsbG9jYXRlX2FycmF5cyAoc3RydWN0IGxvY2FsZV9jdHlwZV90ICpjdHlwZSwgY29uc3Qgc3RydWN0IGNoYXJtYXBfdCAqY2hhcm1hcCwKKyAKKyAJICB3aGlsZSAoaWR4IDwgbnVtYmVyKQorIAkgICAgeworLQkgICAgICBpbnQgcmVzID0gd2NzY21wICgoY29uc3Qgd2NoYXJfdCAqKSBzb3J0ZWRbaWR4XS0+ZnJvbSwKKy0JCQkJKGNvbnN0IHdjaGFyX3QgKikgcnVucC0+ZnJvbSk7CisrCSAgICAgIGludCByZXMgPSB3Y3NjbXBfdWludDMyIChzb3J0ZWRbaWR4XS0+ZnJvbSwgcnVucC0+ZnJvbSk7CisgCSAgICAgIGlmIChyZXMgPT0gMCkKKyAJCXsKKyAJCSAgcmVwbGFjZSA9IDE7CitAQCAtMzk2NywxMSArMzk2NiwxMSBAQCBhbGxvY2F0ZV9hcnJheXMgKHN0cnVjdCBsb2NhbGVfY3R5cGVfdCAqY3R5cGUsIGNvbnN0IHN0cnVjdCBjaGFybWFwX3QgKmNoYXJtYXAsCisgICAgICAgZm9yIChzaXplX3QgY250ID0gMDsgY250IDwgbnVtYmVyOyArK2NudCkKKyAJeworIAkgIHN0cnVjdCB0cmFuc2xpdF90b190ICpzcnVucDsKKy0JICBmcm9tX2xlbiArPSB3Y3NsZW4gKChjb25zdCB3Y2hhcl90ICopIHNvcnRlZFtjbnRdLT5mcm9tKSArIDE7CisrCSAgZnJvbV9sZW4gKz0gd2NzbGVuX3VpbnQzMiAoc29ydGVkW2NudF0tPmZyb20pICsgMTsKKyAJICBzcnVucCA9IHNvcnRlZFtjbnRdLT50bzsKKyAJICB3aGlsZSAoc3J1bnAgIT0gTlVMTCkKKyAJICAgIHsKKy0JICAgICAgdG9fbGVuICs9IHdjc2xlbiAoKGNvbnN0IHdjaGFyX3QgKikgc3J1bnAtPnN0cikgKyAxOworKwkgICAgICB0b19sZW4gKz0gd2NzbGVuX3VpbnQzMiAoc3J1bnAtPnN0cikgKyAxOworIAkgICAgICBzcnVucCA9IHNydW5wLT5uZXh0OworIAkgICAgfQorIAkgIC8qIFBsdXMgb25lIGZvciB0aGUgZXh0cmEgTlVMIGNoYXJhY3RlciBtYXJraW5nIHRoZSBlbmQgb2YKK0BAIC0zOTk1LDE4ICszOTk0LDE4IEBAIGFsbG9jYXRlX2FycmF5cyAoc3RydWN0IGxvY2FsZV9jdHlwZV90ICpjdHlwZSwgY29uc3Qgc3RydWN0IGNoYXJtYXBfdCAqY2hhcm1hcCwKKyAJICBjdHlwZS0+dHJhbnNsaXRfZnJvbV9pZHhbY250XSA9IGZyb21fbGVuOworIAkgIGN0eXBlLT50cmFuc2xpdF90b19pZHhbY250XSA9IHRvX2xlbjsKKyAKKy0JICBsZW4gPSB3Y3NsZW4gKChjb25zdCB3Y2hhcl90ICopIHNvcnRlZFtjbnRdLT5mcm9tKSArIDE7CistCSAgd21lbWNweSAoKHdjaGFyX3QgKikgJmN0eXBlLT50cmFuc2xpdF9mcm9tX3RibFtmcm9tX2xlbl0sCistCQkgICAoY29uc3Qgd2NoYXJfdCAqKSBzb3J0ZWRbY250XS0+ZnJvbSwgbGVuKTsKKysJICBsZW4gPSB3Y3NsZW5fdWludDMyIChzb3J0ZWRbY250XS0+ZnJvbSkgKyAxOworKwkgIHdtZW1jcHlfdWludDMyICgmY3R5cGUtPnRyYW5zbGl0X2Zyb21fdGJsW2Zyb21fbGVuXSwKKysJCQkgIHNvcnRlZFtjbnRdLT5mcm9tLCBsZW4pOworIAkgIGZyb21fbGVuICs9IGxlbjsKKyAKKyAJICBjdHlwZS0+dHJhbnNsaXRfdG9faWR4W2NudF0gPSB0b19sZW47CisgCSAgc3J1bnAgPSBzb3J0ZWRbY250XS0+dG87CisgCSAgd2hpbGUgKHNydW5wICE9IE5VTEwpCisgCSAgICB7CistCSAgICAgIGxlbiA9IHdjc2xlbiAoKGNvbnN0IHdjaGFyX3QgKikgc3J1bnAtPnN0cikgKyAxOworLQkgICAgICB3bWVtY3B5ICgod2NoYXJfdCAqKSAmY3R5cGUtPnRyYW5zbGl0X3RvX3RibFt0b19sZW5dLAorLQkJICAgICAgIChjb25zdCB3Y2hhcl90ICopIHNydW5wLT5zdHIsIGxlbik7CisrCSAgICAgIGxlbiA9IHdjc2xlbl91aW50MzIgKHNydW5wLT5zdHIpICsgMTsKKysJICAgICAgd21lbWNweV91aW50MzIgKCZjdHlwZS0+dHJhbnNsaXRfdG9fdGJsW3RvX2xlbl0sCisrCQkJICAgICAgc3J1bnAtPnN0ciwgbGVuKTsKKyAJICAgICAgdG9fbGVuICs9IGxlbjsKKyAJICAgICAgc3J1bnAgPSBzcnVucC0+bmV4dDsKKyAJICAgIH0KK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbGQtdGltZS5jIGIvbG9jYWxlL3Byb2dyYW1zL2xkLXRpbWUuYworaW5kZXggMzJlOWM0MWUzNS4uNmE2MWZjZWRlYiAxMDA2NDQKKy0tLSBhL2xvY2FsZS9wcm9ncmFtcy9sZC10aW1lLmMKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9sZC10aW1lLmMKK0BAIC0yMTUsOCArMjE1LDEwIEBAIE5vIGRlZmluaXRpb24gZm9yICVzIGNhdGVnb3J5IGZvdW5kIiksICJMQ19USU1FIikpOworIAl9CisgICAgICAgZWxzZQorIAl7CisrCSAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHd0X2ZtdF9hbXBtW10KKysJICAgID0geyAnJScsJ0knLCc6JywnJScsJ00nLCc6JywnJScsJ1MnLCcgJywnJScsJ3AnLDAgfTsKKyAJICB0aW1lLT50X2ZtdF9hbXBtID0gIiVJOiVNOiVTICVwIjsKKy0JICB0aW1lLT53dF9mbXRfYW1wbSA9IChjb25zdCB1aW50MzJfdCAqKSBMIiVJOiVNOiVTICVwIjsKKysJICB0aW1lLT53dF9mbXRfYW1wbSA9IHd0X2ZtdF9hbXBtOworIAl9CisgICAgIH0KKyAKK0BAIC0yMjYsNyArMjI4LDcgQEAgTm8gZGVmaW5pdGlvbiBmb3IgJXMgY2F0ZWdvcnkgZm91bmQiKSwgIkxDX1RJTUUiKSk7CisgICAgICAgY29uc3QgaW50IGRheXNfcGVyX21vbnRoWzEyXSA9IHsgMzEsIDI5LCAzMSwgMzAsIDMxLCAzMCwKKyAJCQkJICAgICAgIDMxLCAzMSwgMzAsIDMxICwzMCwgMzEgfTsKKyAgICAgICBzaXplX3QgaWR4OworLSAgICAgIHdjaGFyX3QgKndzdHI7CisrICAgICAgdWludDMyX3QgKndzdHI7CisgCisgICAgICAgdGltZS0+ZXJhX2VudHJpZXMgPQorIAkoc3RydWN0IGVyYV9kYXRhICopIHhtYWxsb2MgKHRpbWUtPm51bV9lcmEKK0BAIC00NjQsMTggKzQ2NiwxOCBAQCBObyBkZWZpbml0aW9uIGZvciAlcyBjYXRlZ29yeSBmb3VuZCIpLCAiTENfVElNRSIpKTsKKyAJICAgIH0KKyAKKyAJICAvKiBOb3cgZ2VuZXJhdGUgdGhlIHdpZGUgY2hhcmFjdGVyIG5hbWUgYW5kIGZvcm1hdC4gICovCistCSAgd3N0ciA9IHdjc2NociAoKHdjaGFyX3QgKikgdGltZS0+d2VyYVtpZHhdLCBMJzonKTsvKiBlbmQgZGlyZWN0aW9uICovCistCSAgd3N0ciA9IHdzdHIgPyB3Y3NjaHIgKHdzdHIgKyAxLCBMJzonKSA6IE5VTEw7CS8qIGVuZCBvZmZzZXQgKi8KKy0JICB3c3RyID0gd3N0ciA/IHdjc2NociAod3N0ciArIDEsIEwnOicpIDogTlVMTDsJLyogZW5kIHN0YXJ0ICovCistCSAgd3N0ciA9IHdzdHIgPyB3Y3NjaHIgKHdzdHIgKyAxLCBMJzonKSA6IE5VTEw7CS8qIGVuZCBlbmQgKi8KKysJICB3c3RyID0gd2NzY2hyX3VpbnQzMiAodGltZS0+d2VyYVtpZHhdLCBMJzonKTsgLyogZW5kIGRpcmVjdGlvbiAqLworKwkgIHdzdHIgPSB3c3RyID8gd2NzY2hyX3VpbnQzMiAod3N0ciArIDEsIEwnOicpIDogTlVMTDsgLyogZW5kIG9mZnNldCAqLworKwkgIHdzdHIgPSB3c3RyID8gd2NzY2hyX3VpbnQzMiAod3N0ciArIDEsIEwnOicpIDogTlVMTDsgLyogZW5kIHN0YXJ0ICovCisrCSAgd3N0ciA9IHdzdHIgPyB3Y3NjaHJfdWludDMyICh3c3RyICsgMSwgTCc6JykgOiBOVUxMOyAvKiBlbmQgZW5kICovCisgCSAgaWYgKHdzdHIgIT0gTlVMTCkKKyAJICAgIHsKKy0JICAgICAgdGltZS0+ZXJhX2VudHJpZXNbaWR4XS53bmFtZSA9ICh1aW50MzJfdCAqKSB3c3RyICsgMTsKKy0JICAgICAgd3N0ciA9IHdjc2NociAod3N0ciArIDEsIEwnOicpOwkvKiBlbmQgbmFtZSAqLworKwkgICAgICB0aW1lLT5lcmFfZW50cmllc1tpZHhdLnduYW1lID0gd3N0ciArIDE7CisrCSAgICAgIHdzdHIgPSB3Y3NjaHJfdWludDMyICh3c3RyICsgMSwgTCc6Jyk7IC8qIGVuZCBuYW1lICovCisgCSAgICAgIGlmICh3c3RyICE9IE5VTEwpCisgCQl7CisgCQkgICp3c3RyID0gTCdcMCc7CistCQkgIHRpbWUtPmVyYV9lbnRyaWVzW2lkeF0ud2Zvcm1hdCA9ICh1aW50MzJfdCAqKSB3c3RyICsgMTsKKysJCSAgdGltZS0+ZXJhX2VudHJpZXNbaWR4XS53Zm9ybWF0ID0gd3N0ciArIDE7CisgCQl9CisgCSAgICAgIGVsc2UKKyAJCXRpbWUtPmVyYV9lbnRyaWVzW2lkeF0ud25hbWUgPQorQEAgLTUzNCw3ICs1MzYsMTYgQEAgTm8gZGVmaW5pdGlvbiBmb3IgJXMgY2F0ZWdvcnkgZm91bmQiKSwgIkxDX1RJTUUiKSk7CisgICBpZiAodGltZS0+ZGF0ZV9mbXQgPT0gTlVMTCkKKyAgICAgdGltZS0+ZGF0ZV9mbXQgPSAiJWEgJWIgJWUgJUg6JU06JVMgJVogJVkiOworICAgaWYgKHRpbWUtPndkYXRlX2ZtdCA9PSBOVUxMKQorLSAgICB0aW1lLT53ZGF0ZV9mbXQgPSAoY29uc3QgdWludDMyX3QgKikgTCIlYSAlYiAlZSAlSDolTTolUyAlWiAlWSI7CisrICAgIHsKKysgICAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgd2RhdGVfZm10W10gPQorKwl7ICclJywnYScsJyAnLAorKwkgICclJywnYicsJyAnLAorKwkgICclJywnZScsJyAnLAorKwkgICclJywnSCcsJzonLCclJywnTScsJzonLCclJywnUycsJyAnLAorKwkgICclJywnWicsJyAnLAorKwkgICclJywnWScsMCB9OworKyAgICAgIHRpbWUtPndkYXRlX2ZtdCA9IHdkYXRlX2ZtdDsKKysgICAgfQorIH0KKyAKKyAKK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbGluZXJlYWRlci5jIGIvbG9jYWxlL3Byb2dyYW1zL2xpbmVyZWFkZXIuYworaW5kZXggNTJiMzQwOTYzYS4uMWE4YmNlMTdiNCAxMDA2NDQKKy0tLSBhL2xvY2FsZS9wcm9ncmFtcy9saW5lcmVhZGVyLmMKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9saW5lcmVhZGVyLmMKK0BAIC01OTUsNyArNTk1LDcgQEAgZ2V0X3N0cmluZyAoc3RydWN0IGxpbmVyZWFkZXIgKmxyLCBjb25zdCBzdHJ1Y3QgY2hhcm1hcF90ICpjaGFybWFwLAorIHsKKyAgIGludCByZXR1cm5fd2lkZXN0ciA9IGxyLT5yZXR1cm5fd2lkZXN0cjsKKyAgIGNoYXIgKmJ1ZjsKKy0gIHdjaGFyX3QgKmJ1ZjIgPSBOVUxMOworKyAgdWludDMyX3QgKmJ1ZjIgPSBOVUxMOworICAgc2l6ZV90IGJ1ZmFjdDsKKyAgIHNpemVfdCBidWZtYXggPSA1NjsKKyAKK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbG9jYWxlZGVmLmMgYi9sb2NhbGUvcHJvZ3JhbXMvbG9jYWxlZGVmLmMKK2luZGV4IDZhY2MxMzQyYzcuLmRmODc3NDBmOGIgMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbG9jYWxlZGVmLmMKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9sb2NhbGVkZWYuYworQEAgLTEwOCw2ICsxMDgsNyBAQCB2b2lkICgqYXJncF9wcm9ncmFtX3ZlcnNpb25faG9vaykgKEZJTEUgKiwgc3RydWN0IGFyZ3Bfc3RhdGUgKikgPSBwcmludF92ZXJzaW9uOworICNkZWZpbmUgT1BUX0xJU1RfQVJDSElWRSAzMDkKKyAjZGVmaW5lIE9QVF9MSVRUTEVfRU5ESUFOIDQwMAorICNkZWZpbmUgT1BUX0JJR19FTkRJQU4gNDAxCisrI2RlZmluZSBPUFRfVUlOVDMyX0FMSUdOIDQwMgorIAorIC8qIERlZmluaXRpb25zIG9mIGFyZ3VtZW50cyBmb3IgYXJncCBmdW5jdGlvbnMuICAqLworIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0aW9uc1tdID0KK0BAIC0xNDMsNiArMTQ0LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRpb25zW10gPQorICAgICBOXygiR2VuZXJhdGUgbGl0dGxlLWVuZGlhbiBvdXRwdXQiKSB9LAorICAgeyAiYmlnLWVuZGlhbiIsIE9QVF9CSUdfRU5ESUFOLCBOVUxMLCAwLAorICAgICBOXygiR2VuZXJhdGUgYmlnLWVuZGlhbiBvdXRwdXQiKSB9LAorKyAgeyAidWludDMyLWFsaWduIiwgT1BUX1VJTlQzMl9BTElHTiwgIkFMSUdOTUVOVCIsIDAsCisrICAgIE5fKCJTZXQgdGhlIHRhcmdldCdzIHVpbnQzMl90IGFsaWdubWVudCBpbiBieXRlcyAoZGVmYXVsdCA0KSIpIH0sCisgICB7IE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwgfQorIH07CisgCitAQCAtMjMyLDEyICsyMzUsMTQgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICAgIGN0eXBlIGxvY2FsZS4gIChQMTAwMy4yIDQuMzUuNS4yKSAgKi8KKyAgIHNldGxvY2FsZSAoTENfQ1RZUEUsICJQT1NJWCIpOworIAorKyNpZm5kZWYgTk9fU1lTQ09ORgorICAgLyogTG9vayB3aGV0aGVyIHRoZSBzeXN0ZW0gcmVhbGx5IGFsbG93cyBsb2NhbGUgZGVmaW5pdGlvbnMuICBQT1NJWAorICAgICAgZGVmaW5lcyBlcnJvciBjb2RlIDMgZm9yIHRoaXMgc2l0dWF0aW9uIHNvIEkgdGhpbmsgaXQgbXVzdCBiZQorICAgICAgYSBmYXRhbCBlcnJvciAoc2VlIFAxMDAzLjIgNC4zNS44KS4gICovCisgICBpZiAoc3lzY29uZiAoX1NDXzJfTE9DQUxFREVGKSA8IDApCisgICAgIFdJVEhfQ1VSX0xPQ0FMRSAoZXJyb3IgKDMsIDAsIF8oIlwKKyBGQVRBTDogc3lzdGVtIGRvZXMgbm90IGRlZmluZSBgX1BPU0lYMl9MT0NBTEVERUYnIikpKTsKKysjZW5kaWYKKyAKKyAgIC8qIFByb2Nlc3MgY2hhcm1hcCBmaWxlLiAgKi8KKyAgIGNoYXJtYXAgPSBjaGFybWFwX3JlYWQgKGNoYXJtYXBfZmlsZSwgdmVyYm9zZSwgMSwgYmVfcXVpZXQsIDEpOworQEAgLTMyOCw2ICszMzMsOSBAQCBwYXJzZV9vcHQgKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorICAgICBjYXNlIE9QVF9CSUdfRU5ESUFOOgorICAgICAgIHNldF9iaWdfZW5kaWFuICh0cnVlKTsKKyAgICAgICBicmVhazsKKysgICAgY2FzZSBPUFRfVUlOVDMyX0FMSUdOOgorKyAgICAgIHVpbnQzMl9hbGlnbl9tYXNrID0gc3RydG9sIChhcmcsIE5VTEwsIDApIC0gMTsKKysgICAgICBicmVhazsKKyAgICAgY2FzZSAnYyc6CisgICAgICAgZm9yY2Vfb3V0cHV0ID0gMTsKKyAgICAgICBicmVhazsKK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5jIGIvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuYworaW5kZXggMDk5MGVmMTFiZS4uNjgzNDIyYzkwOCAxMDA2NDQKKy0tLSBhL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmMKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmMKK0BAIC01NDQsNiArNTQ0LDkgQEAgY29tcGFyZV9maWxlcyAoY29uc3QgY2hhciAqZmlsZW5hbWUxLCBjb25zdCBjaGFyICpmaWxlbmFtZTIsIHNpemVfdCBzaXplLAorICAgIG1hY2hpbmUgcnVubmluZyBsb2NhbGVkZWYuICAqLworIGJvb2wgc3dhcF9lbmRpYW5uZXNzX3A7CisgCisrLyogVGhlIHRhcmdldCdzIHZhbHVlIG9mIF9fYWxpZ25fXyh1aW50MzJfdCkgLSAxLiAgKi8KKyt1bnNpZ25lZCBpbnQgdWludDMyX2FsaWduX21hc2sgPSAzOworKworIC8qIFdoZW4gY2FsbGVkIG91dHNpZGUgYSBzdGFydF9sb2NhbGVfc3RydWN0dXJlL2VuZF9sb2NhbGVfc3RydWN0dXJlCisgICAgb3Igc3RhcnRfbG9jYWxlX3ByZWx1ZGUvZW5kX2xvY2FsZV9wcmVsdWRlIGJsb2NrLCByZWNvcmQgdGhhdCB0aGUKKyAgICBuZXh0IGJ5dGUgaW4gRklMRSdzIG9ic3RhY2sgd2lsbCBiZSB0aGUgZmlyc3QgYnl0ZSBvZiBhIG5ldyBlbGVtZW50LgorQEAgLTYyMSw3ICs2MjQsNyBAQCBhZGRfbG9jYWxlX3N0cmluZyAoc3RydWN0IGxvY2FsZV9maWxlICpmaWxlLCBjb25zdCBjaGFyICpzdHJpbmcpCisgdm9pZAorIGFkZF9sb2NhbGVfd3N0cmluZyAoc3RydWN0IGxvY2FsZV9maWxlICpmaWxlLCBjb25zdCB1aW50MzJfdCAqc3RyaW5nKQorIHsKKy0gIGFkZF9sb2NhbGVfdWludDMyX2FycmF5IChmaWxlLCBzdHJpbmcsIHdjc2xlbiAoKGNvbnN0IHdjaGFyX3QgKikgc3RyaW5nKSArIDEpOworKyAgYWRkX2xvY2FsZV91aW50MzJfYXJyYXkgKGZpbGUsIHN0cmluZywgd2NzbGVuX3VpbnQzMiAoc3RyaW5nKSArIDEpOworIH0KKyAKKyAvKiBSZWNvcmQgdGhhdCBGSUxFJ3MgbmV4dCBlbGVtZW50IGlzIHRoZSAzMi1iaXQgaW50ZWdlciBWQUxVRS4gICovCitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuaCBiL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmgKK2luZGV4IDM0MDdlMTNjMTMuLjBiYjU1NmNhZjggMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5oCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5oCitAQCAtNzEsNiArNzEsOCBAQCBleHRlcm4gdm9pZCB3cml0ZV9hbGxfY2F0ZWdvcmllcyAoc3RydWN0IGxvY2FsZWRlZl90ICpkZWZpbml0aW9ucywKKyAKKyBleHRlcm4gYm9vbCBzd2FwX2VuZGlhbm5lc3NfcDsKKyAKKytleHRlcm4gdW5zaWduZWQgaW50IHVpbnQzMl9hbGlnbl9tYXNrOworKworIC8qIENoYW5nZSB0aGUgb3V0cHV0IHRvIGJlIGJpZy1lbmRpYW4gaWYgQklHX0VORElBTiBpcyB0cnVlIGFuZAorICAgIGxpdHRsZS1lbmRpYW4gb3RoZXJ3aXNlLiAgKi8KKyBzdGF0aWMgaW5saW5lIHZvaWQKK0BAIC04OSw3ICs5MSw4IEBAIG1heWJlX3N3YXBfdWludDMyICh1aW50MzJfdCB2YWx1ZSkKKyB9CisgCisgLyogTGlrZXdpc2UsIGJ1dCBtdW5nZSBhbiBhcnJheSBvZiBOIHVpbnQzMl90cyBzdGFydGluZyBhdCBBUlJBWS4gICovCistc3RhdGljIGlubGluZSB2b2lkCisrc3RhdGljIHZvaWQKKytfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKKyBtYXliZV9zd2FwX3VpbnQzMl9hcnJheSAodWludDMyX3QgKmFycmF5LCBzaXplX3QgbikKKyB7CisgICBpZiAoc3dhcF9lbmRpYW5uZXNzX3ApCitAQCAtOTksNyArMTAyLDggQEAgbWF5YmVfc3dhcF91aW50MzJfYXJyYXkgKHVpbnQzMl90ICphcnJheSwgc2l6ZV90IG4pCisgCisgLyogTGlrZSBtYXliZV9zd2FwX3VpbnQzMl9hcnJheSwgYnV0IHRoZSBhcnJheSBvZiBOIGVsZW1lbnRzIGlzIGF0CisgICAgdGhlIGVuZCBvZiBPQlNUQUNLJ3MgY3VycmVudCBvYmplY3QuICAqLworLXN0YXRpYyBpbmxpbmUgdm9pZAorK3N0YXRpYyB2b2lkCisrX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCisgbWF5YmVfc3dhcF91aW50MzJfb2JzdGFjayAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2ssIHNpemVfdCBuKQorIHsKKyAgIG1heWJlX3N3YXBfdWludDMyX2FycmF5ICgodWludDMyX3QgKikgb2JzdGFja19uZXh0X2ZyZWUgKG9ic3RhY2spIC0gbiwgbik7CitAQCAtMjc2LDQgKzI4MCw1NSBAQCBleHRlcm4gdm9pZCBpZGVudGlmaWNhdGlvbl9vdXRwdXQgKHN0cnVjdCBsb2NhbGVkZWZfdCAqbG9jYWxlLAorIAkJCQkgICBjb25zdCBzdHJ1Y3QgY2hhcm1hcF90ICpjaGFybWFwLAorIAkJCQkgICBjb25zdCBjaGFyICpvdXRwdXRfcGF0aCk7CisgCisrc3RhdGljIHNpemVfdCB3Y3NsZW5fdWludDMyIChjb25zdCB1aW50MzJfdCAqc3RyKSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7Cisrc3RhdGljIHVpbnQzMl90ICogd21lbWNweV91aW50MzIgKHVpbnQzMl90ICpzMSwgY29uc3QgdWludDMyX3QgKnMyLCBzaXplX3QgbikgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworK3N0YXRpYyB1aW50MzJfdCAqIHdjc2Nocl91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzLCB1aW50MzJfdCBjaCkgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworK3N0YXRpYyBpbnQgd2NzY21wX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnMxLCBjb25zdCB1aW50MzJfdCAqczIpIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKytzdGF0aWMgaW50IHdtZW1jbXBfdWludDMyIChjb25zdCB1aW50MzJfdCAqczEsIGNvbnN0IHVpbnQzMl90ICpzMiwgc2l6ZV90IG4pIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysKKytzdGF0aWMgc2l6ZV90Cisrd2NzbGVuX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnN0cikKKyt7CisrICBzaXplX3QgbGVuID0gMDsKKysgIHdoaWxlIChzdHJbbGVuXSAhPSAwKQorKyAgICBsZW4rKzsKKysgIHJldHVybiBsZW47CisrfQorKworK3N0YXRpYyAgaW50Cisrd21lbWNtcF91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzMSwgY29uc3QgdWludDMyX3QgKnMyLCBzaXplX3QgbikKKyt7CisrICB3aGlsZSAobi0tICE9IDApCisrICAgIHsKKysgICAgICBpbnQgZGlmZiA9ICpzMSsrIC0gKnMyKys7CisrICAgICAgaWYgKGRpZmYgIT0gMCkKKysJcmV0dXJuIGRpZmY7CisrICAgIH0KKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50Cisrd2NzY21wX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnMxLCBjb25zdCB1aW50MzJfdCAqczIpCisreworKyAgd2hpbGUgKCpzMSAhPSAwICYmICpzMSA9PSAqczIpCisrICAgIHMxKyssIHMyKys7CisrICByZXR1cm4gKnMxIC0gKnMyOworK30KKysKKytzdGF0aWMgdWludDMyX3QgKgorK3dtZW1jcHlfdWludDMyICh1aW50MzJfdCAqczEsIGNvbnN0IHVpbnQzMl90ICpzMiwgc2l6ZV90IG4pCisreworKyAgcmV0dXJuIG1lbWNweSAoczEsIHMyLCBuICogc2l6ZW9mICh1aW50MzJfdCkpOworK30KKysKKytzdGF0aWMgdWludDMyX3QgKgorK3djc2Nocl91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzLCB1aW50MzJfdCBjaCkKKyt7CisrICBkbworKyAgICBpZiAoKnMgPT0gY2gpCisrICAgICAgcmV0dXJuICh1aW50MzJfdCAqKSBzOworKyAgd2hpbGUgKCpzKysgIT0gMCk7CisrICByZXR1cm4gMDsKKyt9CisrCisgI2VuZGlmIC8qIGxvY2ZpbGUuaCAqLworZGlmZiAtLWdpdCBhL2xvY2FsZS9zZXRsb2NhbGUuYyBiL2xvY2FsZS9zZXRsb2NhbGUuYworaW5kZXggMTlhY2M0YjJjNy4uYzg5ZDNiODdhZCAxMDA2NDQKKy0tLSBhL2xvY2FsZS9zZXRsb2NhbGUuYworKysrIGIvbG9jYWxlL3NldGxvY2FsZS5jCitAQCAtNjQsMzYgKzY0LDYgQEAgc3RhdGljIGNoYXIgKmNvbnN0IF9ubF9jdXJyZW50X3VzZWRbXSA9CisgI2VuZGlmCisgCisgCistLyogRGVmaW5lIGFuIGFycmF5IG9mIGNhdGVnb3J5IG5hbWVzIChhbHNvIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcykuICAqLworLWNvbnN0IHVuaW9uIGNhdG5hbWVzdHJfdCBfbmxfY2F0ZWdvcnlfbmFtZXMgYXR0cmlidXRlX2hpZGRlbiA9CistICB7CistICAgIHsKKy0jZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpIFwKKy0gICAgICBjYXRlZ29yeV9uYW1lLAorLSNpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKKy0jdW5kZWYgREVGSU5FX0NBVEVHT1JZCistICAgIH0KKy0gIH07CistCistY29uc3QgdWludDhfdCBfbmxfY2F0ZWdvcnlfbmFtZV9pZHhzW19fTENfTEFTVF0gYXR0cmlidXRlX2hpZGRlbiA9CistICB7CistI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCistICAgIFtjYXRlZ29yeV0gPSBvZmZzZXRvZiAodW5pb24gY2F0bmFtZXN0cl90LCBDQVROQU1FTUYgKF9fTElORV9fKSksCistI2luY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgorLSN1bmRlZiBERUZJTkVfQ0FURUdPUlkKKy0gIH07CistCistLyogQW4gYXJyYXkgb2YgdGhlaXIgbGVuZ3RocywgZm9yIGNvbnZlbmllbmNlLiAgKi8KKy1jb25zdCB1aW50OF90IF9ubF9jYXRlZ29yeV9uYW1lX3NpemVzW10gYXR0cmlidXRlX2hpZGRlbiA9CistICB7CistI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCistICAgIFtjYXRlZ29yeV0gPSBzaXplb2YgKGNhdGVnb3J5X25hbWUpIC0gMSwKKy0jaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCistI3VuZGVmCURFRklORV9DQVRFR09SWQorLSAgICBbTENfQUxMXSA9IHNpemVvZiAoIkxDX0FMTCIpIC0gMQorLSAgfTsKKy0KKy0KKyAjaWZkZWYgTkxfQ1VSUkVOVF9JTkRJUkVDVAorICMgZGVmaW5lIFdFQUtfUE9TVExPQUQocG9zdGxvYWQpIHdlYWtfZXh0ZXJuIChwb3N0bG9hZCkKKyAjZWxzZQorLS0gCisyLjEzLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjItZWdsaWJjLVJlc29sdmUtX19mcHNjcl92YWx1ZXMtb24tU0g0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjItZWdsaWJjLVJlc29sdmUtX19mcHNjcl92YWx1ZXMtb24tU0g0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGNkNWIwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIyLWVnbGliYy1SZXNvbHZlLV9fZnBzY3JfdmFsdWVzLW9uLVNINC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLUZyb20gYTUwYzZlODA1NDNmYjRjYmM1ODk5NzhjMTFmZTg0NmJmNGE5NDQ5MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjU1OjUzICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMjIvMjZdIGVnbGliYzogUmVzb2x2ZSBfX2Zwc2NyX3ZhbHVlcyBvbiBTSDQKLQotMjAxMC0wOS0yOSAgTm9idWhpcm8gSXdhbWF0c3UgIDxpd2FtYXRzdUBuaWdhdXJpLm9yZz4KLSAgICAgICAgICAgIEFuZHJldyBTdHViYnMgIDxhbXNAY29kZXNvdXJjZXJ5LmNvbT4KLQotICAgICAgICBSZXNvbHZlIFNIJ3MgX19mcHNjcl92YWx1ZXMgdG8gc3ltYm9sIGluIGxpYmMuc28uCi0KLSAgICAgICAgKiBzeXNkZXBzL3NoL3NoNC9mcHUvZnB1X2NvbnRyb2wuaDogQWRkIEMrKyBfX3NldF9mcHNjciBwcm90b3R5cGUuCi0gICAgICAgICogc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvVmVyc2lvbnMgKEdMSUJDXzIuMik6IEFkZCBfX2Zwc2NyX3ZhbHVlcy4KLSAgICAgICAgKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXNkZXAuUyAoX19fZnBzY3JfdmFsdWVzKTogTmV3IGNvbnN0YW50LgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL1ZlcnNpb25zIHwgIDEgKwotIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5c2RlcC5TIHwgMTEgKysrKysrKysrKysKLSAyIGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL1ZlcnNpb25zIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvVmVyc2lvbnMKLWluZGV4IGUwOTM4YzQuLmNhMWQ3ZGEgMTAwNjQ0Ci0tLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9WZXJzaW9ucwotKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvVmVyc2lvbnMKLUBAIC0yLDYgKzIsNyBAQCBsaWJjIHsKLSAgIEdMSUJDXzIuMiB7Ci0gICAgICMgZnVuY3Rpb25zIHVzZWQgaW4gb3RoZXIgbGlicmFyaWVzCi0gICAgIF9feHN0YXQ2NDsgX19meHN0YXQ2NDsgX19seHN0YXQ2NDsKLSsgICAgX19mcHNjcl92YWx1ZXM7Ci0gCi0gICAgICMgYSoKLSAgICAgYWxwaGFzb3J0NjQ7Ci1kaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzZGVwLlMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXNkZXAuUwotaW5kZXggMDAyNGQ3OS4uZDFkYjdlNCAxMDA2NDQKLS0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5c2RlcC5TCi0rKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXNkZXAuUwotQEAgLTMwLDMgKzMwLDE0IEBAIEVOVFJZIChfX3N5c2NhbGxfZXJyb3IpCi0gCi0gI2RlZmluZSBfX3N5c2NhbGxfZXJyb3IgX19zeXNjYWxsX2Vycm9yXzEKLSAjaW5jbHVkZSA8c3lzZGVwcy91bml4L3NoL3N5c2RlcC5TPgotKwotKyAgICAgICAuZGF0YQotKyAgICAgICAuYWxpZ24gMwotKyAgICAgICAuZ2xvYmwgX19fZnBzY3JfdmFsdWVzCi0rICAgICAgIC50eXBlIF9fX2Zwc2NyX3ZhbHVlcywgQG9iamVjdAotKyAgICAgICAuc2l6ZSBfX19mcHNjcl92YWx1ZXMsIDgKLStfX19mcHNjcl92YWx1ZXM6Ci0rICAgICAgIC5sb25nIDAKLSsgICAgICAgLmxvbmcgMHg4MDAwMAotK3dlYWtfYWxpYXMgKF9fX2Zwc2NyX3ZhbHVlcywgX19mcHNjcl92YWx1ZXMpCi0rCi0tLSAKLTIuMTAuMgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMy1EZWZpbmUtRFVNTVlfTE9DQUxFX1QtaWYtbm90LWRlZmluZWQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMy1EZWZpbmUtRFVNTVlfTE9DQUxFX1QtaWYtbm90LWRlZmluZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU1ODBkNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIzLURlZmluZS1EVU1NWV9MT0NBTEVfVC1pZi1ub3QtZGVmaW5lZC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIGNiNGQwMGVhYzdmODQwOTIzMTRkZTU5MzYyNmVlYTQwZjk1MjkwMzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAyMCBBcHIgMjAxNiAyMToxMTowMCAtMDcwMAorU3ViamVjdDogW1BBVENIIDIzLzI1XSBEZWZpbmUgRFVNTVlfTE9DQUxFX1QgaWYgbm90IGRlZmluZWQKKworVGhpcyBpcyBhIGhhY2sgdG8gZml4IGJ1aWxkaW5nIHRoZSBsb2NhbGUgYml0cyBvbiBhbiBvbGRlcgorQ2VudE9zIDUuWCBtYWNoaW5lCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsb2NhbGUvcHJvZ3JhbXMvY29uZmlnLmggfCAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9jb25maWcuaCBiL2xvY2FsZS9wcm9ncmFtcy9jb25maWcuaAoraW5kZXggNWI0MTZiZTBkOC4uNzllNjZlZWQ1ZSAxMDA2NDQKKy0tLSBhL2xvY2FsZS9wcm9ncmFtcy9jb25maWcuaAorKysrIGIvbG9jYWxlL3Byb2dyYW1zL2NvbmZpZy5oCitAQCAtMTksNiArMTksOSBAQAorICNpZm5kZWYgX0xEX0NPTkZJR19ICisgI2RlZmluZSBfTERfQ09ORklHX0gJMQorIAorKyNpZm5kZWYgRFVNTVlfTE9DQUxFX1QKKysjZGVmaW5lIERVTU1ZX0xPQ0FMRV9UCisrI2VuZGlmCisgLyogVXNlIHRoZSBpbnRlcm5hbCB0ZXh0ZG9tYWluIHVzZWQgZm9yIGxpYmMgbWVzc2FnZXMuICAqLworICNkZWZpbmUgUEFDS0FHRSBfbGliY19pbnRsX2RvbWFpbm5hbWUKKyAjaWZuZGVmIFZFUlNJT04KKy0tIAorMi4xMy4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIzLWVnbGliYy1JbnN0YWxsLVBJQy1hcmNoaXZlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIzLWVnbGliYy1JbnN0YWxsLVBJQy1hcmNoaXZlcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNlNTcxZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMy1lZ2xpYmMtSW5zdGFsbC1QSUMtYXJjaGl2ZXMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotRnJvbSAxMDE1NjhkYWY0OGQ5OWU3MWIyODBhMmZkZDg1NDYwZmU3NDBkNTgzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDE6NTc6MDEgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAyMy8yNl0gZWdsaWJjOiBJbnN0YWxsIFBJQyBhcmNoaXZlcwotCi1Gb3J3YXJkIHBvcnQgZnJvbSBlZ2xpYmMKLQotMjAwOC0wMi0wNyAgSm9zZXBoIE15ZXJzICA8am9zZXBoQGNvZGVzb3VyY2VyeS5jb20+Ci0KLSAgICAgICAgKiBNYWtlcnVsZXMgKGluc3RhbGwtZXh0cmFzLCBpbnN0YWxsLW1hcCk6IE5ldyB2YXJpYWJsZXMuCi0gICAgICAgIChpbnN0YWxsZWQtbGliY3MpOiBBZGQgbGliY19waWMuYS4KLSAgICAgICAgKGluc3RhbGwtbGliKTogSW5jbHVkZSBfcGljLmEgZmlsZXMgZm9yIHZlcnNpb25lZCBzaGFyZWQKLSAgICAgICAgbGlicmFyaWVzLgotICAgICAgICAoaW5zdGFsbC1tYXAtbm9zdWJkaXIsIGluc3RhbGwtZXh0cmFzLW5vc3ViZGlyKTogQWRkIHJ1bGVzIGZvcgotICAgICAgICBpbnN0YWxsaW5nIGV4dHJhIGZpbGVzLgotICAgICAgICAoaW5zdGFsbC1uby1saWJjLmEtbm9zdWJkaXIpOiBEZXBlbmQgb24gaW5zdGFsbC1tYXAtbm9zdWJkaXIgYW5kCi0gICAgICAgIGluc3RhbGwtZXh0cmFzLW5vc3ViZGlyLgotCi0yMDA4LTA0LTAxICBNYXhpbSBLdXZ5cmtvdiAgPG1heGltQGNvZGVzb3VyY2VyeS5jb20+Ci0KLSAgICAgICAgKiBNYWtlcnVsZXMgKGluc3RhbGwtbGliKTogRG9uJ3QgaW5zdGFsbCBsaWJwdGhyZWFkX3BpYy5hLgotICAgICAgICAoaW5zdGFsbC1tYXApOiBEb24ndCBpbnN0YWxsIGxpYnB0aHJlYWRfcGljLm1hcC4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBNYWtlcnVsZXMgfCA0MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KLSAxIGZpbGUgY2hhbmdlZCwgNDAgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL01ha2VydWxlcyBiL01ha2VydWxlcwotaW5kZXggNjFhMDI0MC4uMzczZTYyOCAxMDA2NDQKLS0tLSBhL01ha2VydWxlcwotKysrIGIvTWFrZXJ1bGVzCi1AQCAtNzYyLDYgKzc2Miw5IEBAIGlmZXEgKCQoYnVpbGQtc2hhcmVkKSx5ZXMpCi0gJChjb21tb24tb2JqcGZ4KWxpYmMuc286ICQoY29tbW9uLW9ianBmeClsaWJjLm1hcAotIGVuZGlmCi0gY29tbW9uLWdlbmVyYXRlZCArPSBsaWJjLnNvIGxpYmNfcGljLm9zCi0raWZuZGVmIHN1YmRpcgotK2luc3RhbGwtZXh0cmFzIDo9IHNvaW5pdC5vIHNvZmluaS5vCi0rZW5kaWYKLSBpZmRlZiBsaWJjLnNvLXZlcnNpb24KLSAkKGNvbW1vbi1vYmpwZngpbGliYy5zbyQobGliYy5zby12ZXJzaW9uKTogJChjb21tb24tb2JqcGZ4KWxpYmMuc28KLSAJJChtYWtlLWxpbmspCi1AQCAtMTAwNCw2ICsxMDA3LDcgQEAgZW5kaWYKLSAKLSBpbnN0YWxsOiBjaGVjay1pbnN0YWxsLXN1cHBvcnRlZAotIAotK2luc3RhbGxlZC1saWJjcyA6PSAkKGluc3RhbGxlZC1saWJjcykgJChpbnN0X2xpYmRpcikvbGliY19waWMuYQotIGluc3RhbGw6ICQoaW5zdGFsbGVkLWxpYmNzKQotICQoaW5zdGFsbGVkLWxpYmNzKTogJChpbnN0X2xpYmRpcikvbGliJChsaWJwcmVmaXgpJTogbGliICQoK2ZvcmNlKQotIAkkKG1ha2UtdGFyZ2V0LWRpcmVjdG9yeSkKLUBAIC0xMDMyLDYgKzEwMzYsMjIgQEAgdmVyc2lvbmVkIDo9ICQoc3RyaXAgJChmb3JlYWNoIHNvLCQoaW5zdGFsbC1saWIuc28pLFwKLSBpbnN0YWxsLWxpYi5zby12ZXJzaW9uZWQgOj0gJChmaWx0ZXIgJCh2ZXJzaW9uZWQpLCAkKGluc3RhbGwtbGliLnNvKSkKLSBpbnN0YWxsLWxpYi5zby11bnZlcnNpb25lZCA6PSAkKGZpbHRlci1vdXQgJCh2ZXJzaW9uZWQpLCAkKGluc3RhbGwtbGliLnNvKSkKLSAKLSsjIEluc3RhbGwgdGhlIF9waWMuYSBmaWxlcyBmb3IgdmVyc2lvbmVkIGxpYnJhcmllcywgYW5kIGNvcnJlc3BvbmRpbmcKLSsjIC5tYXAgZmlsZXMuCi0rIyBsaWJwdGhyZWFkX3BpYy5hIGJyZWFrcyBta2xpYnMsIHNvIGRvbid0IGluc3RhbGwgaXQgYW5kIGl0cyBtYXAuCi0raW5zdGFsbC1saWIgOj0gJChpbnN0YWxsLWxpYikgJChpbnN0YWxsLWxpYi5zby12ZXJzaW9uZWQ6JS5zbz0lX3BpYy5hKQotK2luc3RhbGwtbGliIDo9ICQoZmlsdGVyLW91dCBsaWJwdGhyZWFkX3BpYy5hLCQoaW5zdGFsbC1saWIpKQotKyMgRGVzcGl0ZSBoYXZpbmcgYSBzb25hbWUgbGliaHVyZHVzZXIgYW5kIGxpYm1hY2h1c2VyIGRvIG5vdCB1c2Ugc3ltYm9sCi0rIyB2ZXJzaW9uaW5nLCBzbyBkb24ndCBpbnN0YWxsIHRoZSBjb3JyZXNwb25kaW5nIC5tYXAgZmlsZXMuCi0raWZlcSAoJChidWlsZC1zaGFyZWQpLHllcykKLStpbnN0YWxsLW1hcCA6PSAkKHBhdHN1YnN0ICUuc28sJS5tYXAsXAotKwkJCSQoZm9yZWFjaCBMLCQoaW5zdGFsbC1saWIuc28tdmVyc2lvbmVkKSwkKG5vdGRpciAkTCkpKQotK2luc3RhbGwtbWFwIDo9ICQoZmlsdGVyLW91dCBsaWJodXJkdXNlci5tYXAgbGlibWFjaHVzZXIubWFwIGxpYnB0aHJlYWQubWFwLCQoaW5zdGFsbC1tYXApKQotK2lmbmRlZiBzdWJkaXIKLStpbnN0YWxsLW1hcCA6PSAkKGluc3RhbGwtbWFwKSBsaWJjLm1hcAotK2VuZGlmCi0rZW5kaWYKLSsKLSAjIEZvciB2ZXJzaW9uZWQgbGlicmFyaWVzLCB3ZSBpbnN0YWxsIHRocmVlIGZpbGVzOgotICMJJChpbnN0X2xpYmRpcikvbGliZm9vLnNvCS0tIGZvciBsaW5raW5nLCBzeW1saW5rIG9yIGxkIHNjcmlwdAotICMJJChpbnN0X3NsaWJkaXIpL2xpYmZvby5zby5OTgktLSBmb3IgbG9hZGluZyBieSBTT05BTUUsIHN5bWxpbmsKLUBAIC0xMjc1LDkgKzEyOTUsMjIgQEAgJChhZGRwcmVmaXggJChpbnN0X2luY2x1ZGVkaXIpLywkKGhlYWRlcnMtbm9uaCkpOiAkKGluc3RfaW5jbHVkZWRpcikvJTogXAotIGVuZGlmCSMgaGVhZGVycy1ub25oCi0gZW5kaWYJIyBoZWFkZXJzCi0gCi0raWZkZWYgaW5zdGFsbC1tYXAKLSskKGFkZHByZWZpeCAkKGluc3RfbGliZGlyKS8sJChwYXRzdWJzdCBsaWIlLm1hcCxsaWIlX3BpYy5tYXAsJChpbnN0YWxsLW1hcCkpKTogXAotKyAgJChpbnN0X2xpYmRpcikvbGliJV9waWMubWFwOiAkKGNvbW1vbi1vYmpwZngpbGliJS5tYXAgJCgrZm9yY2UpCi0rCSQoZG8taW5zdGFsbCkKLStlbmRpZgotKwotK2lmZGVmIGluc3RhbGwtZXh0cmFzCi0rJChhZGRwcmVmaXggJChpbnN0X2xpYmRpcikvbGliY19waWMvLCQoaW5zdGFsbC1leHRyYXMpKTogXAotKyAgJChpbnN0X2xpYmRpcikvbGliY19waWMvJS5vOiAkKGVsZi1vYmpwZngpJS5vcyAkKCtmb3JjZSkKLSsJJChkby1pbnN0YWxsKQotK2VuZGlmCi0rCi0gLlBIT05ZOiBpbnN0YWxsLWJpbi1ub3N1YmRpciBpbnN0YWxsLWJpbi1zY3JpcHQtbm9zdWJkaXIgXAotIAlpbnN0YWxsLXJvb3RzYmluLW5vc3ViZGlyIGluc3RhbGwtc2Jpbi1ub3N1YmRpciBpbnN0YWxsLWxpYi1ub3N1YmRpciBcCi0tCWluc3RhbGwtZGF0YS1ub3N1YmRpciBpbnN0YWxsLWhlYWRlcnMtbm9zdWJkaXIKLSsJaW5zdGFsbC1kYXRhLW5vc3ViZGlyIGluc3RhbGwtaGVhZGVycy1ub3N1YmRpciBpbnN0YWxsLW1hcC1ub3N1YmRpciBcCi0rCWluc3RhbGwtZXh0cmFzLW5vc3ViZGlyCi0gaW5zdGFsbC1iaW4tbm9zdWJkaXI6ICQoYWRkcHJlZml4ICQoaW5zdF9iaW5kaXIpLywkKGluc3RhbGwtYmluKSkKLSBpbnN0YWxsLWJpbi1zY3JpcHQtbm9zdWJkaXI6ICQoYWRkcHJlZml4ICQoaW5zdF9iaW5kaXIpLywkKGluc3RhbGwtYmluLXNjcmlwdCkpCi0gaW5zdGFsbC1yb290c2Jpbi1ub3N1YmRpcjogXAotQEAgLTEyOTAsNiArMTMyMywxMCBAQCBpbnN0YWxsLWRhdGEtbm9zdWJkaXI6ICQoYWRkcHJlZml4ICQoaW5zdF9kYXRhZGlyKS8sJChpbnN0YWxsLWRhdGEpKQotIGluc3RhbGwtaGVhZGVycy1ub3N1YmRpcjogJChhZGRwcmVmaXggJChpbnN0X2luY2x1ZGVkaXIpLywkKGhlYWRlcnMpKQotIGluc3RhbGwtb3RoZXJzLW5vc3ViZGlyOiAkKGluc3RhbGwtb3RoZXJzKQotIGluc3RhbGwtb3RoZXJzLXByb2dyYW1zLW5vc3ViZGlyOiAkKGluc3RhbGwtb3RoZXJzLXByb2dyYW1zKQotK2luc3RhbGwtbWFwLW5vc3ViZGlyOiAkKGFkZHByZWZpeCAkKGluc3RfbGliZGlyKS8sXAotKwkJICAgICAgICQocGF0c3Vic3QgbGliJS5tYXAsbGliJV9waWMubWFwLCQoaW5zdGFsbC1tYXApKSkKLStpbnN0YWxsLWV4dHJhcy1ub3N1YmRpcjogJChhZGRwcmVmaXggJChpbnN0X2xpYmRpcikvbGliY19waWMvLFwKLSsJCSAgICAgICAkKGluc3RhbGwtZXh0cmFzKSkKLSAKLSAjIFdlIG5lZWQgYWxsIHRoZSBgLW5vc3ViZGlyJyB0YXJnZXRzIHNvIHRoYXQgYGluc3RhbGwnIGluIHRoZSBwYXJlbnQKLSAjIGRvZXNuJ3QgZGVwZW5kIG9uIHNldmVyYWwgdGhpbmdzIHdoaWNoIGVhY2ggaXRlcmF0ZSBvdmVyIHRoZSBzdWJkaXJzLgotQEAgLTEyOTksNyArMTMzNiw4IEBAIGluc3RhbGwtJTo6IGluc3RhbGwtJS1ub3N1YmRpciA7Ci0gCi0gLlBIT05ZOiBpbnN0YWxsIGluc3RhbGwtbm8tbGliYy5hLW5vc3ViZGlyCi0gaW5zdGFsbC1uby1saWJjLmEtbm9zdWJkaXI6IGluc3RhbGwtaGVhZGVycy1ub3N1YmRpciBpbnN0YWxsLWRhdGEtbm9zdWJkaXIgXAotLQkJCSAgICBpbnN0YWxsLWxpYi1ub3N1YmRpciBpbnN0YWxsLW90aGVycy1ub3N1YmRpcgotKwkJCSAgICBpbnN0YWxsLWxpYi1ub3N1YmRpciBpbnN0YWxsLW90aGVycy1ub3N1YmRpciBcCi0rCQkJICAgIGluc3RhbGwtbWFwLW5vc3ViZGlyIGluc3RhbGwtZXh0cmFzLW5vc3ViZGlyCi0gaWZlcSAoJChidWlsZC1wcm9ncmFtcykseWVzKQotIGluc3RhbGwtbm8tbGliYy5hLW5vc3ViZGlyOiBpbnN0YWxsLWJpbi1ub3N1YmRpciBpbnN0YWxsLWJpbi1zY3JpcHQtbm9zdWJkaXIgXAotIAkJCSAgICBpbnN0YWxsLXJvb3RzYmluLW5vc3ViZGlyIGluc3RhbGwtc2Jpbi1ub3N1YmRpciBcCi0tLSAKLTIuMTAuMgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNC1lZ2xpYmMtRm9yd2FyZC1wb3J0LWNyb3NzLWxvY2FsZS1nZW5lcmF0aW9uLXN1cHBvcnQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNC1lZ2xpYmMtRm9yd2FyZC1wb3J0LWNyb3NzLWxvY2FsZS1nZW5lcmF0aW9uLXN1cHBvcnQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzOTk4OTAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjQtZWdsaWJjLUZvcndhcmQtcG9ydC1jcm9zcy1sb2NhbGUtZ2VuZXJhdGlvbi1zdXBwb3J0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTY2ICswLDAgQEAKLUZyb20gODI1MTZlM2VkMzcyZjYxOGM4ODZhMmRlNGY5NDk4ZjU5N2FhOGE4YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAxOjMzOjQ5ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMjQvMjZdIGVnbGliYzogRm9yd2FyZCBwb3J0IGNyb3NzIGxvY2FsZSBnZW5lcmF0aW9uIHN1cHBvcnQKLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBsb2NhbGUvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAzICsrLQotIGxvY2FsZS9jYXRuYW1lcy5jICAgICAgICAgICAgIHwgNDggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKLSBsb2NhbGUvbG9jYWxlaW5mby5oICAgICAgICAgICB8ICAyICstCi0gbG9jYWxlL3Byb2dyYW1zL2NoYXJtYXAtZGlyLmMgfCAgNiArKysrKwotIGxvY2FsZS9wcm9ncmFtcy9sZC1jb2xsYXRlLmMgIHwgMTcgKysrKysrLS0tLS0tLQotIGxvY2FsZS9wcm9ncmFtcy9sZC1jdHlwZS5jICAgIHwgMjcgKysrKysrKysrKy0tLS0tLS0tLS0KLSBsb2NhbGUvcHJvZ3JhbXMvbGQtdGltZS5jICAgICB8IDMxICsrKysrKysrKysrKysrKy0tLS0tLS0tCi0gbG9jYWxlL3Byb2dyYW1zL2xpbmVyZWFkZXIuYyAgfCAgMiArLQotIGxvY2FsZS9wcm9ncmFtcy9sb2NhbGVkZWYuYyAgIHwgIDggKysrKysrCi0gbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuYyAgICAgfCAgNSArKystCi0gbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuaCAgICAgfCA1OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCi0gbG9jYWxlL3NldGxvY2FsZS5jICAgICAgICAgICAgfCAzMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gMTIgZmlsZXMgY2hhbmdlZCwgMTY5IGluc2VydGlvbnMoKyksIDY5IGRlbGV0aW9ucygtKQotIGNyZWF0ZSBtb2RlIDEwMDY0NCBsb2NhbGUvY2F0bmFtZXMuYwotCi1kaWZmIC0tZ2l0IGEvbG9jYWxlL01ha2VmaWxlIGIvbG9jYWxlL01ha2VmaWxlCi1pbmRleCBjNTM3OWU2Li5jOThjNjc1IDEwMDY0NAotLS0tIGEvbG9jYWxlL01ha2VmaWxlCi0rKysgYi9sb2NhbGUvTWFrZWZpbGUKLUBAIC0yNSw3ICsyNSw4IEBAIGluY2x1ZGUgLi4vTWFrZWNvbmZpZwotIGhlYWRlcnMJCT0gbG9jYWxlLmggYml0cy9sb2NhbGUuaCBsYW5naW5mby5oIHhsb2NhbGUuaAotIHJvdXRpbmVzCT0gc2V0bG9jYWxlIGZpbmRsb2NhbGUgbG9hZGxvY2FsZSBsb2FkYXJjaGl2ZSBcCi0gCQkgIGxvY2FsZWNvbnYgbmxfbGFuZ2luZm8gbmxfbGFuZ2luZm9fbCBtYl9jdXJfbWF4IFwKLS0JCSAgbmV3bG9jYWxlIGR1cGxvY2FsZSBmcmVlbG9jYWxlIHVzZWxvY2FsZQotKwkJICBuZXdsb2NhbGUgZHVwbG9jYWxlIGZyZWVsb2NhbGUgdXNlbG9jYWxlIFwKLSsJCSAgY2F0bmFtZXMKLSB0ZXN0cwkJPSB0c3QtQy1sb2NhbGUgdHN0LWxvY25hbWUgdHN0LWR1cGxvY2FsZQotIGNhdGVnb3JpZXMJPSBjdHlwZSBtZXNzYWdlcyBtb25ldGFyeSBudW1lcmljIHRpbWUgcGFwZXIgbmFtZSBcCi0gCQkgIGFkZHJlc3MgdGVsZXBob25lIG1lYXN1cmVtZW50IGlkZW50aWZpY2F0aW9uIGNvbGxhdGUKLWRpZmYgLS1naXQgYS9sb2NhbGUvY2F0bmFtZXMuYyBiL2xvY2FsZS9jYXRuYW1lcy5jCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uOWZhZDM1NwotLS0tIC9kZXYvbnVsbAotKysrIGIvbG9jYWxlL2NhdG5hbWVzLmMKLUBAIC0wLDAgKzEsNDggQEAKLSsvKiBDb3B5cmlnaHQgKEMpIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgotKwotKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSsgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSsgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSsgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSsgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSsgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQotKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KLSsKLSsjaW5jbHVkZSAibG9jYWxlaW5mby5oIgotKwotKy8qIERlZmluZSBhbiBhcnJheSBvZiBjYXRlZ29yeSBuYW1lcyAoYWxzbyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZXMpLiAgKi8KLStjb25zdCB1bmlvbiBjYXRuYW1lc3RyX3QgX25sX2NhdGVnb3J5X25hbWVzIGF0dHJpYnV0ZV9oaWRkZW4gPQotKyAgewotKyAgICB7Ci0rI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCi0rICAgICAgY2F0ZWdvcnlfbmFtZSwKLSsjaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCi0rI3VuZGVmIERFRklORV9DQVRFR09SWQotKyAgICB9Ci0rICB9OwotKwotK2NvbnN0IHVpbnQ4X3QgX25sX2NhdGVnb3J5X25hbWVfaWR4c1tfX0xDX0xBU1RdIGF0dHJpYnV0ZV9oaWRkZW4gPQotKyAgewotKyNkZWZpbmUgREVGSU5FX0NBVEVHT1JZKGNhdGVnb3J5LCBjYXRlZ29yeV9uYW1lLCBpdGVtcywgYSkgXAotKyAgICBbY2F0ZWdvcnldID0gb2Zmc2V0b2YgKHVuaW9uIGNhdG5hbWVzdHJfdCwgQ0FUTkFNRU1GIChfX0xJTkVfXykpLAotKyNpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKLSsjdW5kZWYgREVGSU5FX0NBVEVHT1JZCi0rICB9OwotKwotKy8qIEFuIGFycmF5IG9mIHRoZWlyIGxlbmd0aHMsIGZvciBjb252ZW5pZW5jZS4gICovCi0rY29uc3QgdWludDhfdCBfbmxfY2F0ZWdvcnlfbmFtZV9zaXplc1tdIGF0dHJpYnV0ZV9oaWRkZW4gPQotKyAgewotKyNkZWZpbmUgREVGSU5FX0NBVEVHT1JZKGNhdGVnb3J5LCBjYXRlZ29yeV9uYW1lLCBpdGVtcywgYSkgXAotKyAgICBbY2F0ZWdvcnldID0gc2l6ZW9mIChjYXRlZ29yeV9uYW1lKSAtIDEsCi0rI2luY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgotKyN1bmRlZglERUZJTkVfQ0FURUdPUlkKLSsgICAgW0xDX0FMTF0gPSBzaXplb2YgKCJMQ19BTEwiKSAtIDEKLSsgIH07Ci1kaWZmIC0tZ2l0IGEvbG9jYWxlL2xvY2FsZWluZm8uaCBiL2xvY2FsZS9sb2NhbGVpbmZvLmgKLWluZGV4IDFmNGRhOTIuLjdmNjg5MzUgMTAwNjQ0Ci0tLS0gYS9sb2NhbGUvbG9jYWxlaW5mby5oCi0rKysgYi9sb2NhbGUvbG9jYWxlaW5mby5oCi1AQCAtMjI0LDcgKzIyNCw3IEBAIF9fbGliY190c2RfZGVmaW5lIChleHRlcm4sIF9fbG9jYWxlX3QsIExPQ0FMRSkKLSAgICB1bnVzZWQuICBXZSBjYW4gbWFuYWdlIHRoaXMgcGxheWluZyBzb21lIHRyaWNrcyB3aXRoIHdlYWsgcmVmZXJlbmNlcy4KLSAgICBCdXQgd2l0aCB0aHJlYWQtbG9jYWwgbG9jYWxlIHNldHRpbmdzLCBpdCBiZWNvbWVzIHF1aXRlIHVuZ2Fpbmx5IHVubGVzcwotICAgIHdlIGNhbiB1c2UgX190aHJlYWQgdmFyaWFibGVzLiAgU28gb25seSBpbiB0aGF0IGNhc2UgZG8gd2UgYXR0ZW1wdCB0aGlzLiAgKi8KLS0jaWZuZGVmIFNIQVJFRAotKyNpZiAhZGVmaW5lZCBTSEFSRUQgJiYgIWRlZmluZWQgSU5fR0xJQkNfTE9DQUxFREVGCi0gIyBpbmNsdWRlIDx0bHMuaD4KLSAjIGRlZmluZSBOTF9DVVJSRU5UX0lORElSRUNUCTEKLSAjZW5kaWYKLWRpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvY2hhcm1hcC1kaXIuYyBiL2xvY2FsZS9wcm9ncmFtcy9jaGFybWFwLWRpci5jCi1pbmRleCA5OWZjZDM1Li41ZTUyOGRjIDEwMDY0NAotLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2NoYXJtYXAtZGlyLmMKLSsrKyBiL2xvY2FsZS9wcm9ncmFtcy9jaGFybWFwLWRpci5jCi1AQCAtMTksNyArMTksOSBAQAotICNpbmNsdWRlIDxlcnJvci5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxsaWJpbnRsLmg+Ci0rI2lmbmRlZiBOT19VTkNPTVBSRVNTCi0gI2luY2x1ZGUgPHNwYXduLmg+Ci0rI2VuZGlmCi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLUBAIC0xNTYsNiArMTU4LDcgQEAgY2hhcm1hcF9jbG9zZWRpciAoQ0hBUk1BUF9ESVIgKmNkaXIpCi0gICByZXR1cm4gY2xvc2VkaXIgKGRpcik7Ci0gfQotIAotKyNpZm5kZWYgTk9fVU5DT01QUkVTUwotIC8qIENyZWF0ZXMgYSBzdWJwcm9jZXNzIGRlY29tcHJlc3NpbmcgdGhlIGdpdmVuIHBhdGhuYW1lLCBhbmQgcmV0dXJucwotICAgIGEgc3RyZWFtIHJlYWRpbmcgaXRzIG91dHB1dCAodGhlIGRlY29tcHJlc3NlZCBkYXRhKS4gICovCi0gc3RhdGljCi1AQCAtMjA0LDYgKzIwNyw3IEBAIGZvcGVuX3VuY29tcHJlc3NlZCAoY29uc3QgY2hhciAqcGF0aG5hbWUsIGNvbnN0IGNoYXIgKmNvbXByZXNzb3IpCi0gICAgIH0KLSAgIHJldHVybiBOVUxMOwotIH0KLSsjZW5kaWYKLSAKLSAvKiBPcGVucyBhIGNoYXJtYXAgZm9yIHJlYWRpbmcsIGdpdmVuIGl0cyBuYW1lIChub3QgYW4gYWxpYXMgbmFtZSkuICAqLwotIEZJTEUgKgotQEAgLTIyNiw2ICsyMzAsNyBAQCBjaGFybWFwX29wZW4gKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSwgY29uc3QgY2hhciAqbmFtZSkKLSAgIGlmIChzdHJlYW0gIT0gTlVMTCkKLSAgICAgcmV0dXJuIHN0cmVhbTsKLSAKLSsjaWZuZGVmIE5PX1VOQ09NUFJFU1MKLSAgIG1lbWNweSAocCwgIi5neiIsIDQpOwotICAgc3RyZWFtID0gZm9wZW5fdW5jb21wcmVzc2VkIChwYXRobmFtZSwgImd6aXAiKTsKLSAgIGlmIChzdHJlYW0gIT0gTlVMTCkKLUBAIC0yMzUsNiArMjQwLDcgQEAgY2hhcm1hcF9vcGVuIChjb25zdCBjaGFyICpkaXJlY3RvcnksIGNvbnN0IGNoYXIgKm5hbWUpCi0gICBzdHJlYW0gPSBmb3Blbl91bmNvbXByZXNzZWQgKHBhdGhuYW1lLCAiYnppcDIiKTsKLSAgIGlmIChzdHJlYW0gIT0gTlVMTCkKLSAgICAgcmV0dXJuIHN0cmVhbTsKLSsjZW5kaWYKLSAKLSAgIHJldHVybiBOVUxMOwotIH0KLWRpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbGQtY29sbGF0ZS5jIGIvbG9jYWxlL3Byb2dyYW1zL2xkLWNvbGxhdGUuYwotaW5kZXggMWUxMjVmNi4uM2IyODY3ZiAxMDA2NDQKLS0tLSBhL2xvY2FsZS9wcm9ncmFtcy9sZC1jb2xsYXRlLmMKLSsrKyBiL2xvY2FsZS9wcm9ncmFtcy9sZC1jb2xsYXRlLmMKLUBAIC0zNTAsNyArMzUwLDcgQEAgbmV3X2VsZW1lbnQgKHN0cnVjdCBsb2NhbGVfY29sbGF0ZV90ICpjb2xsYXRlLCBjb25zdCBjaGFyICptYnMsIHNpemVfdCBtYnNsZW4sCi0gICAgIH0KLSAgIGlmICh3Y3MgIT0gTlVMTCkKLSAgICAgewotLSAgICAgIHNpemVfdCBud2NzID0gd2NzbGVuICgod2NoYXJfdCAqKSB3Y3MpOwotKyAgICAgIHNpemVfdCBud2NzID0gd2NzbGVuX3VpbnQzMiAod2NzKTsKLSAgICAgICB1aW50MzJfdCB6ZXJvID0gMDsKLSAgICAgICAvKiBIYW5kbGUgPFUwMDAwPiBhcyBhIHNpbmdsZSBjaGFyYWN0ZXIuICAqLwotICAgICAgIGlmIChud2NzID09IDApCi1AQCAtMTc3Niw4ICsxNzc2LDcgQEAgc3ltYm9sIGAlcycgaGFzIHRoZSBzYW1lIGVuY29kaW5nIGFzIiksICgqZXB0ciktPm5hbWUpOwotIAotIAkgICAgICBpZiAoKCplcHRyKS0+bndjcyA9PSBydW5wLT5ud2NzKQotIAkJewotLQkJICBpbnQgYyA9IHdtZW1jbXAgKCh3Y2hhcl90ICopICgqZXB0ciktPndjcywKLS0JCQkJICAgKHdjaGFyX3QgKikgcnVucC0+d2NzLCBydW5wLT5ud2NzKTsKLSsJCSAgaW50IGMgPSB3bWVtY21wX3VpbnQzMiAoKCplcHRyKS0+d2NzLCBydW5wLT53Y3MsIHJ1bnAtPm53Y3MpOwotIAotIAkJICBpZiAoYyA9PSAwKQotIAkJICAgIHsKLUBAIC0yMDEwLDkgKzIwMDksOSBAQCBhZGRfdG9fdGFibGV3YyAodWludDMyX3QgY2gsIHN0cnVjdCBlbGVtZW50X3QgKnJ1bnApCi0gCSAgICAgb25lIGNvbnNlY3V0aXZlIGVudHJ5LiAgKi8KLSAJICBpZiAocnVucC0+d2NuZXh0ICE9IE5VTEwKLSAJICAgICAgJiYgcnVucC0+bndjcyA9PSBydW5wLT53Y25leHQtPm53Y3MKLS0JICAgICAgJiYgd21lbWNtcCAoKHdjaGFyX3QgKikgcnVucC0+d2NzLAotLQkJCSAgKHdjaGFyX3QgKilydW5wLT53Y25leHQtPndjcywKLS0JCQkgIHJ1bnAtPm53Y3MgLSAxKSA9PSAwCi0rCSAgICAgICYmIHdtZW1jbXBfdWludDMyIChydW5wLT53Y3MsCi0rCQkJCSBydW5wLT53Y25leHQtPndjcywKLSsJCQkJIHJ1bnAtPm53Y3MgLSAxKSA9PSAwCi0gCSAgICAgICYmIChydW5wLT53Y3NbcnVucC0+bndjcyAtIDFdCi0gCQkgID09IHJ1bnAtPndjbmV4dC0+d2NzW3J1bnAtPm53Y3MgLSAxXSArIDEpKQotIAkgICAgewotQEAgLTIwMzYsOSArMjAzNSw5IEBAIGFkZF90b190YWJsZXdjICh1aW50MzJfdCBjaCwgc3RydWN0IGVsZW1lbnRfdCAqcnVucCkKLSAJCXJ1bnAgPSBydW5wLT53Y25leHQ7Ci0gCSAgICAgIHdoaWxlIChydW5wLT53Y25leHQgIT0gTlVMTAotIAkJICAgICAmJiBydW5wLT5ud2NzID09IHJ1bnAtPndjbmV4dC0+bndjcwotLQkJICAgICAmJiB3bWVtY21wICgod2NoYXJfdCAqKSBydW5wLT53Y3MsCi0tCQkJCSAod2NoYXJfdCAqKXJ1bnAtPndjbmV4dC0+d2NzLAotLQkJCQkgcnVucC0+bndjcyAtIDEpID09IDAKLSsJCSAgICAgJiYgd21lbWNtcF91aW50MzIgKHJ1bnAtPndjcywKLSsJCQkJCXJ1bnAtPndjbmV4dC0+d2NzLAotKwkJCQkJcnVucC0+bndjcyAtIDEpID09IDAKLSAJCSAgICAgJiYgKHJ1bnAtPndjc1tydW5wLT5ud2NzIC0gMV0KLSAJCQkgPT0gcnVucC0+d2NuZXh0LT53Y3NbcnVucC0+bndjcyAtIDFdICsgMSkpOwotIAotZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9sZC1jdHlwZS5jIGIvbG9jYWxlL3Byb2dyYW1zL2xkLWN0eXBlLmMKLWluZGV4IDBmZDE0MWMuLjY4MTM2ZTYgMTAwNjQ0Ci0tLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbGQtY3R5cGUuYwotKysrIGIvbG9jYWxlL3Byb2dyYW1zL2xkLWN0eXBlLmMKLUBAIC05MjYsNyArOTI2LDcgQEAgY3R5cGVfb3V0cHV0IChzdHJ1Y3QgbG9jYWxlZGVmX3QgKmxvY2FsZSwgY29uc3Qgc3RydWN0IGNoYXJtYXBfdCAqY2hhcm1hcCwKLSAgIGFsbG9jYXRlX2FycmF5cyAoY3R5cGUsIGNoYXJtYXAsIGN0eXBlLT5yZXBlcnRvaXJlKTsKLSAKLSAgIGRlZmF1bHRfbWlzc2luZ19sZW4gPSAoY3R5cGUtPmRlZmF1bHRfbWlzc2luZwotLQkJCSA/IHdjc2xlbiAoKHdjaGFyX3QgKikgY3R5cGUtPmRlZmF1bHRfbWlzc2luZykKLSsJCQkgPyB3Y3NsZW5fdWludDMyIChjdHlwZS0+ZGVmYXVsdF9taXNzaW5nKQotIAkJCSA6IDApOwotIAotICAgaW5pdF9sb2NhbGVfZGF0YSAoJmZpbGUsIG5lbGVtcyk7Ci1AQCAtMTkzNyw3ICsxOTM3LDcgQEAgcmVhZF90cmFuc2xpdF9lbnRyeSAoc3RydWN0IGxpbmVyZWFkZXIgKmxkZmlsZSwgc3RydWN0IGxvY2FsZV9jdHlwZV90ICpjdHlwZSwKLSAJICAgIGlnbm9yZSA9IDE7Ci0gCSAgZWxzZQotIAkgICAgLyogVGhpcyB2YWx1ZSBpcyB1c2FibGUuICAqLwotLQkgICAgb2JzdGFja19ncm93IChvYiwgdG9fd3N0ciwgd2NzbGVuICgod2NoYXJfdCAqKSB0b193c3RyKSAqIDQpOwotKwkgICAgb2JzdGFja19ncm93IChvYiwgdG9fd3N0ciwgd2NzbGVuX3VpbnQzMiAodG9fd3N0cikgKiA0KTsKLSAKLSAJICBmaXJzdCA9IDA7Ci0gCX0KLUBAIC0yNDcxLDggKzI0NzEsOCBAQCB3aXRoIGNoYXJhY3RlciBjb2RlIHJhbmdlIHZhbHVlcyBvbmUgbXVzdCB1c2UgdGhlIGFic29sdXRlIGVsbGlwc2lzIGAuLi4nIikpOwotIAkgICAgfQotIAotIAloYW5kbGVfdG9rX2RpZ2l0OgotLQkgIGNsYXNzX2JpdCA9IF9JU3dkaWdpdDsKLS0JICBjbGFzczI1Nl9iaXQgPSBfSVNkaWdpdDsKLSsJICBjbGFzc19iaXQgPSBCSVR3ICh0b2tfZGlnaXQpOwotKwkgIGNsYXNzMjU2X2JpdCA9IEJJVCAodG9rX2RpZ2l0KTsKLSAJICBoYW5kbGVfZGlnaXRzID0gMTsKLSAJICBnb3RvIHJlYWRfY2hhcmNsYXNzOwotIAotQEAgLTM5MjksOCArMzkyOSw3IEBAIGFsbG9jYXRlX2FycmF5cyAoc3RydWN0IGxvY2FsZV9jdHlwZV90ICpjdHlwZSwgY29uc3Qgc3RydWN0IGNoYXJtYXBfdCAqY2hhcm1hcCwKLSAKLSAJICB3aGlsZSAoaWR4IDwgbnVtYmVyKQotIAkgICAgewotLQkgICAgICBpbnQgcmVzID0gd2NzY21wICgoY29uc3Qgd2NoYXJfdCAqKSBzb3J0ZWRbaWR4XS0+ZnJvbSwKLS0JCQkJKGNvbnN0IHdjaGFyX3QgKikgcnVucC0+ZnJvbSk7Ci0rCSAgICAgIGludCByZXMgPSB3Y3NjbXBfdWludDMyIChzb3J0ZWRbaWR4XS0+ZnJvbSwgcnVucC0+ZnJvbSk7Ci0gCSAgICAgIGlmIChyZXMgPT0gMCkKLSAJCXsKLSAJCSAgcmVwbGFjZSA9IDE7Ci1AQCAtMzk2NywxMSArMzk2NiwxMSBAQCBhbGxvY2F0ZV9hcnJheXMgKHN0cnVjdCBsb2NhbGVfY3R5cGVfdCAqY3R5cGUsIGNvbnN0IHN0cnVjdCBjaGFybWFwX3QgKmNoYXJtYXAsCi0gICAgICAgZm9yIChzaXplX3QgY250ID0gMDsgY250IDwgbnVtYmVyOyArK2NudCkKLSAJewotIAkgIHN0cnVjdCB0cmFuc2xpdF90b190ICpzcnVucDsKLS0JICBmcm9tX2xlbiArPSB3Y3NsZW4gKChjb25zdCB3Y2hhcl90ICopIHNvcnRlZFtjbnRdLT5mcm9tKSArIDE7Ci0rCSAgZnJvbV9sZW4gKz0gd2NzbGVuX3VpbnQzMiAoc29ydGVkW2NudF0tPmZyb20pICsgMTsKLSAJICBzcnVucCA9IHNvcnRlZFtjbnRdLT50bzsKLSAJICB3aGlsZSAoc3J1bnAgIT0gTlVMTCkKLSAJICAgIHsKLS0JICAgICAgdG9fbGVuICs9IHdjc2xlbiAoKGNvbnN0IHdjaGFyX3QgKikgc3J1bnAtPnN0cikgKyAxOwotKwkgICAgICB0b19sZW4gKz0gd2NzbGVuX3VpbnQzMiAoc3J1bnAtPnN0cikgKyAxOwotIAkgICAgICBzcnVucCA9IHNydW5wLT5uZXh0OwotIAkgICAgfQotIAkgIC8qIFBsdXMgb25lIGZvciB0aGUgZXh0cmEgTlVMIGNoYXJhY3RlciBtYXJraW5nIHRoZSBlbmQgb2YKLUBAIC0zOTk1LDE4ICszOTk0LDE4IEBAIGFsbG9jYXRlX2FycmF5cyAoc3RydWN0IGxvY2FsZV9jdHlwZV90ICpjdHlwZSwgY29uc3Qgc3RydWN0IGNoYXJtYXBfdCAqY2hhcm1hcCwKLSAJICBjdHlwZS0+dHJhbnNsaXRfZnJvbV9pZHhbY250XSA9IGZyb21fbGVuOwotIAkgIGN0eXBlLT50cmFuc2xpdF90b19pZHhbY250XSA9IHRvX2xlbjsKLSAKLS0JICBsZW4gPSB3Y3NsZW4gKChjb25zdCB3Y2hhcl90ICopIHNvcnRlZFtjbnRdLT5mcm9tKSArIDE7Ci0tCSAgd21lbWNweSAoKHdjaGFyX3QgKikgJmN0eXBlLT50cmFuc2xpdF9mcm9tX3RibFtmcm9tX2xlbl0sCi0tCQkgICAoY29uc3Qgd2NoYXJfdCAqKSBzb3J0ZWRbY250XS0+ZnJvbSwgbGVuKTsKLSsJICBsZW4gPSB3Y3NsZW5fdWludDMyIChzb3J0ZWRbY250XS0+ZnJvbSkgKyAxOwotKwkgIHdtZW1jcHlfdWludDMyICgmY3R5cGUtPnRyYW5zbGl0X2Zyb21fdGJsW2Zyb21fbGVuXSwKLSsJCQkgIHNvcnRlZFtjbnRdLT5mcm9tLCBsZW4pOwotIAkgIGZyb21fbGVuICs9IGxlbjsKLSAKLSAJICBjdHlwZS0+dHJhbnNsaXRfdG9faWR4W2NudF0gPSB0b19sZW47Ci0gCSAgc3J1bnAgPSBzb3J0ZWRbY250XS0+dG87Ci0gCSAgd2hpbGUgKHNydW5wICE9IE5VTEwpCi0gCSAgICB7Ci0tCSAgICAgIGxlbiA9IHdjc2xlbiAoKGNvbnN0IHdjaGFyX3QgKikgc3J1bnAtPnN0cikgKyAxOwotLQkgICAgICB3bWVtY3B5ICgod2NoYXJfdCAqKSAmY3R5cGUtPnRyYW5zbGl0X3RvX3RibFt0b19sZW5dLAotLQkJICAgICAgIChjb25zdCB3Y2hhcl90ICopIHNydW5wLT5zdHIsIGxlbik7Ci0rCSAgICAgIGxlbiA9IHdjc2xlbl91aW50MzIgKHNydW5wLT5zdHIpICsgMTsKLSsJICAgICAgd21lbWNweV91aW50MzIgKCZjdHlwZS0+dHJhbnNsaXRfdG9fdGJsW3RvX2xlbl0sCi0rCQkJICAgICAgc3J1bnAtPnN0ciwgbGVuKTsKLSAJICAgICAgdG9fbGVuICs9IGxlbjsKLSAJICAgICAgc3J1bnAgPSBzcnVucC0+bmV4dDsKLSAJICAgIH0KLWRpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbGQtdGltZS5jIGIvbG9jYWxlL3Byb2dyYW1zL2xkLXRpbWUuYwotaW5kZXggODc1MzFiYy4uNWYyYzI2NiAxMDA2NDQKLS0tLSBhL2xvY2FsZS9wcm9ncmFtcy9sZC10aW1lLmMKLSsrKyBiL2xvY2FsZS9wcm9ncmFtcy9sZC10aW1lLmMKLUBAIC0yMTUsOCArMjE1LDEwIEBAIE5vIGRlZmluaXRpb24gZm9yICVzIGNhdGVnb3J5IGZvdW5kIiksICJMQ19USU1FIikpOwotIAl9Ci0gICAgICAgZWxzZQotIAl7Ci0rCSAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHd0X2ZtdF9hbXBtW10KLSsJICAgID0geyAnJScsJ0knLCc6JywnJScsJ00nLCc6JywnJScsJ1MnLCcgJywnJScsJ3AnLDAgfTsKLSAJICB0aW1lLT50X2ZtdF9hbXBtID0gIiVJOiVNOiVTICVwIjsKLS0JICB0aW1lLT53dF9mbXRfYW1wbSA9IChjb25zdCB1aW50MzJfdCAqKSBMIiVJOiVNOiVTICVwIjsKLSsJICB0aW1lLT53dF9mbXRfYW1wbSA9IHd0X2ZtdF9hbXBtOwotIAl9Ci0gICAgIH0KLSAKLUBAIC0yMjYsNyArMjI4LDcgQEAgTm8gZGVmaW5pdGlvbiBmb3IgJXMgY2F0ZWdvcnkgZm91bmQiKSwgIkxDX1RJTUUiKSk7Ci0gICAgICAgY29uc3QgaW50IGRheXNfcGVyX21vbnRoWzEyXSA9IHsgMzEsIDI5LCAzMSwgMzAsIDMxLCAzMCwKLSAJCQkJICAgICAgIDMxLCAzMSwgMzAsIDMxICwzMCwgMzEgfTsKLSAgICAgICBzaXplX3QgaWR4OwotLSAgICAgIHdjaGFyX3QgKndzdHI7Ci0rICAgICAgdWludDMyX3QgKndzdHI7Ci0gCi0gICAgICAgdGltZS0+ZXJhX2VudHJpZXMgPQotIAkoc3RydWN0IGVyYV9kYXRhICopIHhtYWxsb2MgKHRpbWUtPm51bV9lcmEKLUBAIC00NjQsMTggKzQ2NiwxOCBAQCBObyBkZWZpbml0aW9uIGZvciAlcyBjYXRlZ29yeSBmb3VuZCIpLCAiTENfVElNRSIpKTsKLSAJICAgIH0KLSAKLSAJICAvKiBOb3cgZ2VuZXJhdGUgdGhlIHdpZGUgY2hhcmFjdGVyIG5hbWUgYW5kIGZvcm1hdC4gICovCi0tCSAgd3N0ciA9IHdjc2NociAoKHdjaGFyX3QgKikgdGltZS0+d2VyYVtpZHhdLCBMJzonKTsvKiBlbmQgZGlyZWN0aW9uICovCi0tCSAgd3N0ciA9IHdzdHIgPyB3Y3NjaHIgKHdzdHIgKyAxLCBMJzonKSA6IE5VTEw7CS8qIGVuZCBvZmZzZXQgKi8KLS0JICB3c3RyID0gd3N0ciA/IHdjc2NociAod3N0ciArIDEsIEwnOicpIDogTlVMTDsJLyogZW5kIHN0YXJ0ICovCi0tCSAgd3N0ciA9IHdzdHIgPyB3Y3NjaHIgKHdzdHIgKyAxLCBMJzonKSA6IE5VTEw7CS8qIGVuZCBlbmQgKi8KLSsJICB3c3RyID0gd2NzY2hyX3VpbnQzMiAodGltZS0+d2VyYVtpZHhdLCBMJzonKTsgLyogZW5kIGRpcmVjdGlvbiAqLwotKwkgIHdzdHIgPSB3c3RyID8gd2NzY2hyX3VpbnQzMiAod3N0ciArIDEsIEwnOicpIDogTlVMTDsgLyogZW5kIG9mZnNldCAqLwotKwkgIHdzdHIgPSB3c3RyID8gd2NzY2hyX3VpbnQzMiAod3N0ciArIDEsIEwnOicpIDogTlVMTDsgLyogZW5kIHN0YXJ0ICovCi0rCSAgd3N0ciA9IHdzdHIgPyB3Y3NjaHJfdWludDMyICh3c3RyICsgMSwgTCc6JykgOiBOVUxMOyAvKiBlbmQgZW5kICovCi0gCSAgaWYgKHdzdHIgIT0gTlVMTCkKLSAJICAgIHsKLS0JICAgICAgdGltZS0+ZXJhX2VudHJpZXNbaWR4XS53bmFtZSA9ICh1aW50MzJfdCAqKSB3c3RyICsgMTsKLS0JICAgICAgd3N0ciA9IHdjc2NociAod3N0ciArIDEsIEwnOicpOwkvKiBlbmQgbmFtZSAqLwotKwkgICAgICB0aW1lLT5lcmFfZW50cmllc1tpZHhdLnduYW1lID0gd3N0ciArIDE7Ci0rCSAgICAgIHdzdHIgPSB3Y3NjaHJfdWludDMyICh3c3RyICsgMSwgTCc6Jyk7IC8qIGVuZCBuYW1lICovCi0gCSAgICAgIGlmICh3c3RyICE9IE5VTEwpCi0gCQl7Ci0gCQkgICp3c3RyID0gTCdcMCc7Ci0tCQkgIHRpbWUtPmVyYV9lbnRyaWVzW2lkeF0ud2Zvcm1hdCA9ICh1aW50MzJfdCAqKSB3c3RyICsgMTsKLSsJCSAgdGltZS0+ZXJhX2VudHJpZXNbaWR4XS53Zm9ybWF0ID0gd3N0ciArIDE7Ci0gCQl9Ci0gCSAgICAgIGVsc2UKLSAJCXRpbWUtPmVyYV9lbnRyaWVzW2lkeF0ud25hbWUgPQotQEAgLTUzNCw3ICs1MzYsMTYgQEAgTm8gZGVmaW5pdGlvbiBmb3IgJXMgY2F0ZWdvcnkgZm91bmQiKSwgIkxDX1RJTUUiKSk7Ci0gICBpZiAodGltZS0+ZGF0ZV9mbXQgPT0gTlVMTCkKLSAgICAgdGltZS0+ZGF0ZV9mbXQgPSAiJWEgJWIgJWUgJUg6JU06JVMgJVogJVkiOwotICAgaWYgKHRpbWUtPndkYXRlX2ZtdCA9PSBOVUxMKQotLSAgICB0aW1lLT53ZGF0ZV9mbXQgPSAoY29uc3QgdWludDMyX3QgKikgTCIlYSAlYiAlZSAlSDolTTolUyAlWiAlWSI7Ci0rICAgIHsKLSsgICAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgd2RhdGVfZm10W10gPQotKwl7ICclJywnYScsJyAnLAotKwkgICclJywnYicsJyAnLAotKwkgICclJywnZScsJyAnLAotKwkgICclJywnSCcsJzonLCclJywnTScsJzonLCclJywnUycsJyAnLAotKwkgICclJywnWicsJyAnLAotKwkgICclJywnWScsMCB9OwotKyAgICAgIHRpbWUtPndkYXRlX2ZtdCA9IHdkYXRlX2ZtdDsKLSsgICAgfQotIH0KLSAKLSAKLWRpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbGluZXJlYWRlci5jIGIvbG9jYWxlL3Byb2dyYW1zL2xpbmVyZWFkZXIuYwotaW5kZXggYjg4NWY2NS4uMGFmYjYzMSAxMDA2NDQKLS0tLSBhL2xvY2FsZS9wcm9ncmFtcy9saW5lcmVhZGVyLmMKLSsrKyBiL2xvY2FsZS9wcm9ncmFtcy9saW5lcmVhZGVyLmMKLUBAIC01OTUsNyArNTk1LDcgQEAgZ2V0X3N0cmluZyAoc3RydWN0IGxpbmVyZWFkZXIgKmxyLCBjb25zdCBzdHJ1Y3QgY2hhcm1hcF90ICpjaGFybWFwLAotIHsKLSAgIGludCByZXR1cm5fd2lkZXN0ciA9IGxyLT5yZXR1cm5fd2lkZXN0cjsKLSAgIGNoYXIgKmJ1ZjsKLS0gIHdjaGFyX3QgKmJ1ZjIgPSBOVUxMOwotKyAgdWludDMyX3QgKmJ1ZjIgPSBOVUxMOwotICAgc2l6ZV90IGJ1ZmFjdDsKLSAgIHNpemVfdCBidWZtYXggPSA1NjsKLSAKLWRpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbG9jYWxlZGVmLmMgYi9sb2NhbGUvcHJvZ3JhbXMvbG9jYWxlZGVmLmMKLWluZGV4IGI0YzQ4ZjEuLmVkMDhkNDggMTAwNjQ0Ci0tLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbG9jYWxlZGVmLmMKLSsrKyBiL2xvY2FsZS9wcm9ncmFtcy9sb2NhbGVkZWYuYwotQEAgLTEwOCw2ICsxMDgsNyBAQCB2b2lkICgqYXJncF9wcm9ncmFtX3ZlcnNpb25faG9vaykgKEZJTEUgKiwgc3RydWN0IGFyZ3Bfc3RhdGUgKikgPSBwcmludF92ZXJzaW9uOwotICNkZWZpbmUgT1BUX0xJU1RfQVJDSElWRSAzMDkKLSAjZGVmaW5lIE9QVF9MSVRUTEVfRU5ESUFOIDQwMAotICNkZWZpbmUgT1BUX0JJR19FTkRJQU4gNDAxCi0rI2RlZmluZSBPUFRfVUlOVDMyX0FMSUdOIDQwMgotIAotIC8qIERlZmluaXRpb25zIG9mIGFyZ3VtZW50cyBmb3IgYXJncCBmdW5jdGlvbnMuICAqLwotIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0aW9uc1tdID0KLUBAIC0xNDMsNiArMTQ0LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRpb25zW10gPQotICAgICBOXygiR2VuZXJhdGUgbGl0dGxlLWVuZGlhbiBvdXRwdXQiKSB9LAotICAgeyAiYmlnLWVuZGlhbiIsIE9QVF9CSUdfRU5ESUFOLCBOVUxMLCAwLAotICAgICBOXygiR2VuZXJhdGUgYmlnLWVuZGlhbiBvdXRwdXQiKSB9LAotKyAgeyAidWludDMyLWFsaWduIiwgT1BUX1VJTlQzMl9BTElHTiwgIkFMSUdOTUVOVCIsIDAsCi0rICAgIE5fKCJTZXQgdGhlIHRhcmdldCdzIHVpbnQzMl90IGFsaWdubWVudCBpbiBieXRlcyAoZGVmYXVsdCA0KSIpIH0sCi0gICB7IE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwgfQotIH07Ci0gCi1AQCAtMjMyLDEyICsyMzUsMTQgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSAgICAgIGN0eXBlIGxvY2FsZS4gIChQMTAwMy4yIDQuMzUuNS4yKSAgKi8KLSAgIHNldGxvY2FsZSAoTENfQ1RZUEUsICJQT1NJWCIpOwotIAotKyNpZm5kZWYgTk9fU1lTQ09ORgotICAgLyogTG9vayB3aGV0aGVyIHRoZSBzeXN0ZW0gcmVhbGx5IGFsbG93cyBsb2NhbGUgZGVmaW5pdGlvbnMuICBQT1NJWAotICAgICAgZGVmaW5lcyBlcnJvciBjb2RlIDMgZm9yIHRoaXMgc2l0dWF0aW9uIHNvIEkgdGhpbmsgaXQgbXVzdCBiZQotICAgICAgYSBmYXRhbCBlcnJvciAoc2VlIFAxMDAzLjIgNC4zNS44KS4gICovCi0gICBpZiAoc3lzY29uZiAoX1NDXzJfTE9DQUxFREVGKSA8IDApCi0gICAgIFdJVEhfQ1VSX0xPQ0FMRSAoZXJyb3IgKDMsIDAsIF8oIlwKLSBGQVRBTDogc3lzdGVtIGRvZXMgbm90IGRlZmluZSBgX1BPU0lYMl9MT0NBTEVERUYnIikpKTsKLSsjZW5kaWYKLSAKLSAgIC8qIFByb2Nlc3MgY2hhcm1hcCBmaWxlLiAgKi8KLSAgIGNoYXJtYXAgPSBjaGFybWFwX3JlYWQgKGNoYXJtYXBfZmlsZSwgdmVyYm9zZSwgMSwgYmVfcXVpZXQsIDEpOwotQEAgLTMyOCw2ICszMzMsOSBAQCBwYXJzZV9vcHQgKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQotICAgICBjYXNlIE9QVF9CSUdfRU5ESUFOOgotICAgICAgIHNldF9iaWdfZW5kaWFuICh0cnVlKTsKLSAgICAgICBicmVhazsKLSsgICAgY2FzZSBPUFRfVUlOVDMyX0FMSUdOOgotKyAgICAgIHVpbnQzMl9hbGlnbl9tYXNrID0gc3RydG9sIChhcmcsIE5VTEwsIDApIC0gMTsKLSsgICAgICBicmVhazsKLSAgICAgY2FzZSAnYyc6Ci0gICAgICAgZm9yY2Vfb3V0cHV0ID0gMTsKLSAgICAgICBicmVhazsKLWRpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5jIGIvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuYwotaW5kZXggMzJmNWNkMi4uMDI5NjdiMCAxMDA2NDQKLS0tLSBhL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmMKLSsrKyBiL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmMKLUBAIC01NDQsNiArNTQ0LDkgQEAgY29tcGFyZV9maWxlcyAoY29uc3QgY2hhciAqZmlsZW5hbWUxLCBjb25zdCBjaGFyICpmaWxlbmFtZTIsIHNpemVfdCBzaXplLAotICAgIG1hY2hpbmUgcnVubmluZyBsb2NhbGVkZWYuICAqLwotIGJvb2wgc3dhcF9lbmRpYW5uZXNzX3A7Ci0gCi0rLyogVGhlIHRhcmdldCdzIHZhbHVlIG9mIF9fYWxpZ25fXyh1aW50MzJfdCkgLSAxLiAgKi8KLSt1bnNpZ25lZCBpbnQgdWludDMyX2FsaWduX21hc2sgPSAzOwotKwotIC8qIFdoZW4gY2FsbGVkIG91dHNpZGUgYSBzdGFydF9sb2NhbGVfc3RydWN0dXJlL2VuZF9sb2NhbGVfc3RydWN0dXJlCi0gICAgb3Igc3RhcnRfbG9jYWxlX3ByZWx1ZGUvZW5kX2xvY2FsZV9wcmVsdWRlIGJsb2NrLCByZWNvcmQgdGhhdCB0aGUKLSAgICBuZXh0IGJ5dGUgaW4gRklMRSdzIG9ic3RhY2sgd2lsbCBiZSB0aGUgZmlyc3QgYnl0ZSBvZiBhIG5ldyBlbGVtZW50LgotQEAgLTYyMSw3ICs2MjQsNyBAQCBhZGRfbG9jYWxlX3N0cmluZyAoc3RydWN0IGxvY2FsZV9maWxlICpmaWxlLCBjb25zdCBjaGFyICpzdHJpbmcpCi0gdm9pZAotIGFkZF9sb2NhbGVfd3N0cmluZyAoc3RydWN0IGxvY2FsZV9maWxlICpmaWxlLCBjb25zdCB1aW50MzJfdCAqc3RyaW5nKQotIHsKLS0gIGFkZF9sb2NhbGVfdWludDMyX2FycmF5IChmaWxlLCBzdHJpbmcsIHdjc2xlbiAoKGNvbnN0IHdjaGFyX3QgKikgc3RyaW5nKSArIDEpOwotKyAgYWRkX2xvY2FsZV91aW50MzJfYXJyYXkgKGZpbGUsIHN0cmluZywgd2NzbGVuX3VpbnQzMiAoc3RyaW5nKSArIDEpOwotIH0KLSAKLSAvKiBSZWNvcmQgdGhhdCBGSUxFJ3MgbmV4dCBlbGVtZW50IGlzIHRoZSAzMi1iaXQgaW50ZWdlciBWQUxVRS4gICovCi1kaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuaCBiL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmgKLWluZGV4IGEzZGQ5MDQuLjJjNzc2M2EgMTAwNjQ0Ci0tLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5oCi0rKysgYi9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5oCi1AQCAtNzEsNiArNzEsOCBAQCBleHRlcm4gdm9pZCB3cml0ZV9hbGxfY2F0ZWdvcmllcyAoc3RydWN0IGxvY2FsZWRlZl90ICpkZWZpbml0aW9ucywKLSAKLSBleHRlcm4gYm9vbCBzd2FwX2VuZGlhbm5lc3NfcDsKLSAKLStleHRlcm4gdW5zaWduZWQgaW50IHVpbnQzMl9hbGlnbl9tYXNrOwotKwotIC8qIENoYW5nZSB0aGUgb3V0cHV0IHRvIGJlIGJpZy1lbmRpYW4gaWYgQklHX0VORElBTiBpcyB0cnVlIGFuZAotICAgIGxpdHRsZS1lbmRpYW4gb3RoZXJ3aXNlLiAgKi8KLSBzdGF0aWMgaW5saW5lIHZvaWQKLUBAIC04OSw3ICs5MSw4IEBAIG1heWJlX3N3YXBfdWludDMyICh1aW50MzJfdCB2YWx1ZSkKLSB9Ci0gCi0gLyogTGlrZXdpc2UsIGJ1dCBtdW5nZSBhbiBhcnJheSBvZiBOIHVpbnQzMl90cyBzdGFydGluZyBhdCBBUlJBWS4gICovCi0tc3RhdGljIGlubGluZSB2b2lkCi0rc3RhdGljIHZvaWQKLStfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKLSBtYXliZV9zd2FwX3VpbnQzMl9hcnJheSAodWludDMyX3QgKmFycmF5LCBzaXplX3QgbikKLSB7Ci0gICBpZiAoc3dhcF9lbmRpYW5uZXNzX3ApCi1AQCAtOTksNyArMTAyLDggQEAgbWF5YmVfc3dhcF91aW50MzJfYXJyYXkgKHVpbnQzMl90ICphcnJheSwgc2l6ZV90IG4pCi0gCi0gLyogTGlrZSBtYXliZV9zd2FwX3VpbnQzMl9hcnJheSwgYnV0IHRoZSBhcnJheSBvZiBOIGVsZW1lbnRzIGlzIGF0Ci0gICAgdGhlIGVuZCBvZiBPQlNUQUNLJ3MgY3VycmVudCBvYmplY3QuICAqLwotLXN0YXRpYyBpbmxpbmUgdm9pZAotK3N0YXRpYyB2b2lkCi0rX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCi0gbWF5YmVfc3dhcF91aW50MzJfb2JzdGFjayAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2ssIHNpemVfdCBuKQotIHsKLSAgIG1heWJlX3N3YXBfdWludDMyX2FycmF5ICgodWludDMyX3QgKikgb2JzdGFja19uZXh0X2ZyZWUgKG9ic3RhY2spIC0gbiwgbik7Ci1AQCAtMjc2LDQgKzI4MCw1NSBAQCBleHRlcm4gdm9pZCBpZGVudGlmaWNhdGlvbl9vdXRwdXQgKHN0cnVjdCBsb2NhbGVkZWZfdCAqbG9jYWxlLAotIAkJCQkgICBjb25zdCBzdHJ1Y3QgY2hhcm1hcF90ICpjaGFybWFwLAotIAkJCQkgICBjb25zdCBjaGFyICpvdXRwdXRfcGF0aCk7Ci0gCi0rc3RhdGljIHNpemVfdCB3Y3NsZW5fdWludDMyIChjb25zdCB1aW50MzJfdCAqc3RyKSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7Ci0rc3RhdGljIHVpbnQzMl90ICogd21lbWNweV91aW50MzIgKHVpbnQzMl90ICpzMSwgY29uc3QgdWludDMyX3QgKnMyLCBzaXplX3QgbikgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOwotK3N0YXRpYyB1aW50MzJfdCAqIHdjc2Nocl91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzLCB1aW50MzJfdCBjaCkgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOwotK3N0YXRpYyBpbnQgd2NzY21wX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnMxLCBjb25zdCB1aW50MzJfdCAqczIpIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKLStzdGF0aWMgaW50IHdtZW1jbXBfdWludDMyIChjb25zdCB1aW50MzJfdCAqczEsIGNvbnN0IHVpbnQzMl90ICpzMiwgc2l6ZV90IG4pIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKLSsKLStzdGF0aWMgc2l6ZV90Ci0rd2NzbGVuX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnN0cikKLSt7Ci0rICBzaXplX3QgbGVuID0gMDsKLSsgIHdoaWxlIChzdHJbbGVuXSAhPSAwKQotKyAgICBsZW4rKzsKLSsgIHJldHVybiBsZW47Ci0rfQotKwotK3N0YXRpYyAgaW50Ci0rd21lbWNtcF91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzMSwgY29uc3QgdWludDMyX3QgKnMyLCBzaXplX3QgbikKLSt7Ci0rICB3aGlsZSAobi0tICE9IDApCi0rICAgIHsKLSsgICAgICBpbnQgZGlmZiA9ICpzMSsrIC0gKnMyKys7Ci0rICAgICAgaWYgKGRpZmYgIT0gMCkKLSsJcmV0dXJuIGRpZmY7Ci0rICAgIH0KLSsgIHJldHVybiAwOwotK30KLSsKLStzdGF0aWMgaW50Ci0rd2NzY21wX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnMxLCBjb25zdCB1aW50MzJfdCAqczIpCi0rewotKyAgd2hpbGUgKCpzMSAhPSAwICYmICpzMSA9PSAqczIpCi0rICAgIHMxKyssIHMyKys7Ci0rICByZXR1cm4gKnMxIC0gKnMyOwotK30KLSsKLStzdGF0aWMgdWludDMyX3QgKgotK3dtZW1jcHlfdWludDMyICh1aW50MzJfdCAqczEsIGNvbnN0IHVpbnQzMl90ICpzMiwgc2l6ZV90IG4pCi0rewotKyAgcmV0dXJuIG1lbWNweSAoczEsIHMyLCBuICogc2l6ZW9mICh1aW50MzJfdCkpOwotK30KLSsKLStzdGF0aWMgdWludDMyX3QgKgotK3djc2Nocl91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzLCB1aW50MzJfdCBjaCkKLSt7Ci0rICBkbwotKyAgICBpZiAoKnMgPT0gY2gpCi0rICAgICAgcmV0dXJuICh1aW50MzJfdCAqKSBzOwotKyAgd2hpbGUgKCpzKysgIT0gMCk7Ci0rICByZXR1cm4gMDsKLSt9Ci0rCi0gI2VuZGlmIC8qIGxvY2ZpbGUuaCAqLwotZGlmZiAtLWdpdCBhL2xvY2FsZS9zZXRsb2NhbGUuYyBiL2xvY2FsZS9zZXRsb2NhbGUuYwotaW5kZXggNjliMzE0MS4uMWNlZjBiZSAxMDA2NDQKLS0tLSBhL2xvY2FsZS9zZXRsb2NhbGUuYwotKysrIGIvbG9jYWxlL3NldGxvY2FsZS5jCi1AQCAtNjQsMzYgKzY0LDYgQEAgc3RhdGljIGNoYXIgKmNvbnN0IF9ubF9jdXJyZW50X3VzZWRbXSA9Ci0gI2VuZGlmCi0gCi0gCi0tLyogRGVmaW5lIGFuIGFycmF5IG9mIGNhdGVnb3J5IG5hbWVzIChhbHNvIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcykuICAqLwotLWNvbnN0IHVuaW9uIGNhdG5hbWVzdHJfdCBfbmxfY2F0ZWdvcnlfbmFtZXMgYXR0cmlidXRlX2hpZGRlbiA9Ci0tICB7Ci0tICAgIHsKLS0jZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpIFwKLS0gICAgICBjYXRlZ29yeV9uYW1lLAotLSNpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKLS0jdW5kZWYgREVGSU5FX0NBVEVHT1JZCi0tICAgIH0KLS0gIH07Ci0tCi0tY29uc3QgdWludDhfdCBfbmxfY2F0ZWdvcnlfbmFtZV9pZHhzW19fTENfTEFTVF0gYXR0cmlidXRlX2hpZGRlbiA9Ci0tICB7Ci0tI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCi0tICAgIFtjYXRlZ29yeV0gPSBvZmZzZXRvZiAodW5pb24gY2F0bmFtZXN0cl90LCBDQVROQU1FTUYgKF9fTElORV9fKSksCi0tI2luY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgotLSN1bmRlZiBERUZJTkVfQ0FURUdPUlkKLS0gIH07Ci0tCi0tLyogQW4gYXJyYXkgb2YgdGhlaXIgbGVuZ3RocywgZm9yIGNvbnZlbmllbmNlLiAgKi8KLS1jb25zdCB1aW50OF90IF9ubF9jYXRlZ29yeV9uYW1lX3NpemVzW10gYXR0cmlidXRlX2hpZGRlbiA9Ci0tICB7Ci0tI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCi0tICAgIFtjYXRlZ29yeV0gPSBzaXplb2YgKGNhdGVnb3J5X25hbWUpIC0gMSwKLS0jaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCi0tI3VuZGVmCURFRklORV9DQVRFR09SWQotLSAgICBbTENfQUxMXSA9IHNpemVvZiAoIkxDX0FMTCIpIC0gMQotLSAgfTsKLS0KLS0KLSAjaWZkZWYgTkxfQ1VSUkVOVF9JTkRJUkVDVAotICMgZGVmaW5lIFdFQUtfUE9TVExPQUQocG9zdGxvYWQpIHdlYWtfZXh0ZXJuIChwb3N0bG9hZCkKLSAjZWxzZQotLS0gCi0yLjEwLjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjQtZWxmLWRsLWRlcHMuYy1NYWtlLV9kbF9idWlsZF9sb2NhbF9zY29wZS1icmVhZHRoLWZpci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI0LWVsZi1kbC1kZXBzLmMtTWFrZS1fZGxfYnVpbGRfbG9jYWxfc2NvcGUtYnJlYWR0aC1maXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI1OTM1MgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI0LWVsZi1kbC1kZXBzLmMtTWFrZS1fZGxfYnVpbGRfbG9jYWxfc2NvcGUtYnJlYWR0aC1maXIucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorRnJvbSBhNzg0NzQyNzM5YzkwZWVhMGQ0Y2NiYmQwNzNhMDY3ZDU1Y2E5NWU4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAxOCBBdWcgMjAxNiAxNDowNzo1OCAtMDUwMAorU3ViamVjdDogW1BBVENIIDI0LzI1XSBlbGYvZGwtZGVwcy5jOiBNYWtlIF9kbF9idWlsZF9sb2NhbF9zY29wZSBicmVhZHRoIGZpcnN0CisKK0FjY29yZGluZyB0byB0aGUgRUxGIHNwZWNpZmljYXRpb246CisKK1doZW4gcmVzb2x2aW5nIHN5bWJvbGljIHJlZmVyZW5jZXMsIHRoZSBkeW5hbWljIGxpbmtlciBleGFtaW5lcyB0aGUgc3ltYm9sCit0YWJsZXMgd2l0aCBhIGJyZWFkdGgtZmlyc3Qgc2VhcmNoLgorCitUaGlzIGZ1bmN0aW9uIHdhcyB1c2luZyBhIGRlcHRoIGZpcnN0IHNlYXJjaC4gIEJ5IGRvaW5nIHNvIHRoZSBjb25mbGljdAorcmVzb2x1dGlvbiByZXBvcnRlZCB0byB0aGUgcHJlbGlua2VyICh3aGVuIExEX1RSQUNFX1BSRUxJTktJTkc9MSBpcyBzZXQpCit3YXMgaW5jb3JyZWN0LiAgVGhpcyBjYXVzZWQgcHJvYmxlbXMgd2hlbiB0aGVpciB3ZXJlIHZhcmlvdXMgY2lyY3VsYXIKK2RlcGVuZGVuY2llcyBiZXR3ZWVuIGxpYnJhcmllcy4gIFRoZSBwcm9ibGVtIHVzdWFsbHkgbWFuaWZlc3RlZCBpdHNlbGYgYnkKK3RoZSB3cm9uZyBJRlVOQyBiZWluZyBleGVjdXRlZC4KKworW0JaIyAyMDQ4OF0KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2xpYmMtYWxwaGFdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGVsZi9kbC1kZXBzLmMgfCAxNCArKysrKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZWxmL2RsLWRlcHMuYyBiL2VsZi9kbC1kZXBzLmMKK2luZGV4IDFiOGJhYzY1OTMuLmM2MTY4MDhmMzEgMTAwNjQ0CistLS0gYS9lbGYvZGwtZGVwcy5jCisrKysgYi9lbGYvZGwtZGVwcy5jCitAQCAtNzMsMTMgKzczLDE5IEBAIF9kbF9idWlsZF9sb2NhbF9zY29wZSAoc3RydWN0IGxpbmtfbWFwICoqbGlzdCwgc3RydWN0IGxpbmtfbWFwICptYXApCisgeworICAgc3RydWN0IGxpbmtfbWFwICoqcCA9IGxpc3Q7CisgICBzdHJ1Y3QgbGlua19tYXAgKipxOworKyAgc3RydWN0IGxpbmtfbWFwICoqcjsKKyAKKyAgICpwKysgPSBtYXA7CisgICBtYXAtPmxfcmVzZXJ2ZWQgPSAxOworLSAgaWYgKG1hcC0+bF9pbml0ZmluaSkKKy0gICAgZm9yIChxID0gbWFwLT5sX2luaXRmaW5pICsgMTsgKnE7ICsrcSkKKy0gICAgICBpZiAoISAoKnEpLT5sX3Jlc2VydmVkKQorLQlwICs9IF9kbF9idWlsZF9sb2NhbF9zY29wZSAocCwgKnEpOworKworKyAgZm9yIChyID0gbGlzdDsgciA8IHA7ICsrcikKKysgICAgaWYgKCgqciktPmxfaW5pdGZpbmkpCisrICAgICAgZm9yIChxID0gKCpyKS0+bF9pbml0ZmluaSArIDE7ICpxOyArK3EpCisrCWlmICghICgqcSktPmxfcmVzZXJ2ZWQpCisrCSAgeworKwkgICAgKnArKyA9ICpxOworKwkgICAgKCpxKS0+bF9yZXNlcnZlZCA9IDE7CisrCSAgfQorICAgcmV0dXJuIHAgLSBsaXN0OworIH0KKyAKKy0tIAorMi4xMy4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI1LURlZmluZS1EVU1NWV9MT0NBTEVfVC1pZi1ub3QtZGVmaW5lZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI1LURlZmluZS1EVU1NWV9MT0NBTEVfVC1pZi1ub3QtZGVmaW5lZC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYwZjVkNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNS1EZWZpbmUtRFVNTVlfTE9DQUxFX1QtaWYtbm90LWRlZmluZWQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi1Gcm9tIGMyZDhjZGVhYjExNmNhYWNkZmVkYjM1ZWViM2U3NDNiNDQ4MDdiZWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogV2VkLCAyMCBBcHIgMjAxNiAyMToxMTowMCAtMDcwMAotU3ViamVjdDogW1BBVENIIDI1LzI2XSBEZWZpbmUgRFVNTVlfTE9DQUxFX1QgaWYgbm90IGRlZmluZWQKLQotVGhpcyBpcyBhIGhhY2sgdG8gZml4IGJ1aWxkaW5nIHRoZSBsb2NhbGUgYml0cyBvbiBhbiBvbGRlcgotQ2VudE9zIDUuWCBtYWNoaW5lCi0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBsb2NhbGUvcHJvZ3JhbXMvY29uZmlnLmggfCAzICsrKwotIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9jb25maWcuaCBiL2xvY2FsZS9wcm9ncmFtcy9jb25maWcuaAotaW5kZXggZjYwNjM2NS4uMGU1ZjhjMyAxMDA2NDQKLS0tLSBhL2xvY2FsZS9wcm9ncmFtcy9jb25maWcuaAotKysrIGIvbG9jYWxlL3Byb2dyYW1zL2NvbmZpZy5oCi1AQCAtMTksNiArMTksOSBAQAotICNpZm5kZWYgX0xEX0NPTkZJR19ICi0gI2RlZmluZSBfTERfQ09ORklHX0gJMQotIAotKyNpZm5kZWYgRFVNTVlfTE9DQUxFX1QKLSsjZGVmaW5lIERVTU1ZX0xPQ0FMRV9UCi0rI2VuZGlmCi0gLyogVXNlIHRoZSBpbnRlcm5hbCB0ZXh0ZG9tYWluIHVzZWQgZm9yIGxpYmMgbWVzc2FnZXMuICAqLwotICNkZWZpbmUgUEFDS0FHRSBfbGliY19pbnRsX2RvbWFpbm5hbWUKLSAjaWZuZGVmIFZFUlNJT04KLS0tIAotMi4xMC4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI1LWxvY2FsZS1maXgtaGFyZC1jb2RlZC1yZWZlcmVuY2UtdG8tZ2NjLUUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNS1sb2NhbGUtZml4LWhhcmQtY29kZWQtcmVmZXJlbmNlLXRvLWdjYy1FLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YWQwNGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNS1sb2NhbGUtZml4LWhhcmQtY29kZWQtcmVmZXJlbmNlLXRvLWdjYy1FLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gZjNhNjcwNDk2YzhmZTZkNGFjZjA0NWY1YjE2N2ExOWNmNDFiMDQ0ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9KPUMzPUE5cj1DMz1BOW15PTIwUm9zZW4/PSA8amVyZW15LnJvc2VuQHNtaWxlLmZyPgorRGF0ZTogTW9uLCAyMiBBdWcgMjAxNiAxNjowOToyNSArMDIwMAorU3ViamVjdDogW1BBVENIIDI1LzI1XSBsb2NhbGU6IGZpeCBoYXJkLWNvZGVkIHJlZmVyZW5jZSB0byBnY2MgLUUKKworV2hlbiBuZXcgdmVyc2lvbiBvZiBjb21waWxlcnMgYXJlIHB1Ymxpc2hlZCwgdGhleSBtYXkgbm90IGJlIGNvbXBhdGlibGUgd2l0aAorb2xkZXIgdmVyc2lvbnMgb2Ygc29mdHdhcmUuIFRoaXMgaXMgcGFydGljdWxhcmx5IGNvbW1vbiB3aGVuIHNvZnR3YXJlIGlzIGJ1aWx0Cit3aXRoIC1XZXJyb3IuCisKK0F1dG90b29scyBwcm92aWRlcyBhIHdheSBmb3IgYSB1c2VyIHRvIHNwZWNpZnkgdGhlIG5hbWUgb2YgaGlzIGNvbXBpbGVyIHVzaW5nIGEKK3NldCBvZiB2YXJpYWJsZXMgKCRDQyAkQ1hYICRDUFAgZXRjLikuIFRob3NlIHZhcmlhYmxlcyBhcmUgdXNlZCBjb3JyZWN0bHkgd2hlbgorY29tcGlsaW5nIGdsaWJjIGJ1dCB0aGUgc2NyaXB0IHVzZWQgdG8gZ2VuZXJhdGUgdHJhbnNsaXRlcmF0aW9ucyBpbiB0aGUgbG9jYWxlLworc3ViZGlyZWN0b3J5IGRpcmVjdGx5IGNhbGxzIHRoZSBnY2MgYmluYXJ5IHRvIGdldCB0aGUgb3V0cHV0IG9mIHRoZQorcHJlcHJvY2Vzc29yIGluc3RlYWQgb2YgdXNpbmcgdGhlICRDUFAgdmFyaWFibGUgcHJvdmlkZWQgYnkgdGhlIGJ1aWxkCitlbnZpcm9ubWVudC4KKworVGhpcyBwYXRjaCByZXBsYWNlcyB0aGUgaGFyZC1jb2RlZCByZWZlcmVuY2UgdG8gdGhlIGdjYyBiaW5hcnkgd2l0aCB0aGUgcHJvcGVyCitlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGh1cyBhbGxvd2luZyBhIHVzZXIgdG8gb3ZlcnJpZGUgaXQuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL3NvdXJjZXdhcmUub3JnL21sL2xpYmMtYWxwaGEvMjAxNi0wOC9tc2cwMDc0Ni5odG1sXQorLS0tCisgbG9jYWxlL2dlbi10cmFuc2xpdC5wbCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xvY2FsZS9nZW4tdHJhbnNsaXQucGwgYi9sb2NhbGUvZ2VuLXRyYW5zbGl0LnBsCitpbmRleCAzMGQzZjJmMTk1Li5lOTc2NTMwMTdjIDEwMDY0NAorLS0tIGEvbG9jYWxlL2dlbi10cmFuc2xpdC5wbAorKysrIGIvbG9jYWxlL2dlbi10cmFuc2xpdC5wbAorQEAgLTEsNSArMSw1IEBACisgIyEvdXNyL2Jpbi9wZXJsIC13Cistb3BlbiBGLCAiY2F0IEMtdHJhbnNsaXQuaC5pbiB8IGdjYyAtRSAtIHwiIHx8IGRpZSAiQ2Fubm90IHByZXByb2Nlc3MgaW5wdXQgZmlsZSI7Cisrb3BlbiBGLCAnY2F0IEMtdHJhbnNsaXQuaC5pbiB8ICR7Q1BQOi1nY2MgLUV9IC0gfCcgfHwgZGllICJDYW5ub3QgcHJlcHJvY2VzcyBpbnB1dCBmaWxlIjsKKyAKKyAKKyBzdWIgY3N0cmxlbiB7CistLSAKKzIuMTMuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNi1hc3NlcnQtU3VwcHJlc3MtcGVkYW50aWMtd2FybmluZy1jYXVzZWQtYnktc3RhdGVtZW50LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjYtYXNzZXJ0LVN1cHByZXNzLXBlZGFudGljLXdhcm5pbmctY2F1c2VkLWJ5LXN0YXRlbWVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmJiOTZiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjYtYXNzZXJ0LVN1cHByZXNzLXBlZGFudGljLXdhcm5pbmctY2F1c2VkLWJ5LXN0YXRlbWVudC5wYXRjaApAQCAtMCwwICsxLDkwIEBACitGcm9tIDAzNzI4M2NiYzc0NzM5YjcyZjM2ZGZlYzgyN2QxMjBmYWEyNDM0MDYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGbG9yaWFuIFdlaW1lciA8ZndlaW1lciBhdCByZWRoYXQgZG90IGNvbT4KK0RhdGU6IFRodSwgNiBKdWwgMjAxNyAxMTo1MDo1NSArMDIwMAorU3ViamVjdDogW1BBVENIIDI2LzI2XSBhc3NlcnQ6IFN1cHByZXNzIHBlZGFudGljIHdhcm5pbmcgY2F1c2VkIGJ5IHN0YXRlbWVudAorIGV4cHJlc3Npb24gW0JaIyAyMTI0Ml0KKworT24gMDcvMDUvMjAxNyAxMDoxNSBQTSwgWmFjayBXZWluYmVyZyB3cm90ZToKKz4gT24gV2VkLCBKdWwgNSwgMjAxNyBhdCAxMTo1MSBBTSwgRmxvcmlhbiBXZWltZXIgPGZ3ZWltZXJAcmVkaGF0LmNvbT4gd3JvdGU6Cis+PiBPbiAwNy8wNS8yMDE3IDA1OjQ2IFBNLCBaYWNrIFdlaW5iZXJnIHdyb3RlOgorPj4+IEEgcHJvYmxlbSBvY2N1cnMgdG8gbWU6IGV4cHJlc3Npb25zIGludm9sdmluZyBWTEFzIF9hcmVfIGV2YWx1YXRlZAorPj4+IGluc2lkZSBzaXplb2YuCis+PgorPj4gVGhlIHR5cGUgb2YgdGhlIHNpemVvZiBhcmd1bWVudCB3b3VsZCBzdGlsbCBiZSBpbnQgKGR1ZSB0byB0aGUKKz4+IGNvbXBhcmlzb24gYWdhaW5zdCAwKSwgc28gdGhpcyBkb2Vzbid0IGFjdHVhbGx5IG9jY3VyLgorPgorPiBJIHJlY2hlY2tlZCB3aGF0IEM5OSBzYXlzIGFib3V0IHNpemVvZiBhbmQgVkxBcywgYW5kIHlvdSdyZSByaWdodCAtCis+IHRoZSBvcGVyYW5kIG9mIHNpemVvZiBpcyBvbmx5IGV2YWx1YXRlZCB3aGVuIHNpemVvZiBpcyBfZGlyZWN0bHlfCis+IGFwcGxpZWQgdG8gYSBWTEEuICBTbyB0aGlzIGlzIGluZGVlZCBzYWZlLCBidXQgSSB0aGluayB0aGlzIHdyaW5rbGUKKz4gc2hvdWxkIGJlIG1lbnRpb25lZCBpbiB0aGUgY29tbWVudC4gIFBlcmhhcHMKKz4KKz4gLyogVGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgRVhQUiBpcyBub3QgZXZhbHVhdGVkIGR1ZSB0byB0aGUgc2l6ZW9mLAorPiAgICBidXQgd2lsbCB0cmlnZ2VyIGFueSBwZWRhbnRpYyB3YXJuaW5ncyBtYXNrZWQgYnkgdGhlIF9fZXh0ZW5zaW9uX18KKz4gICAgZm9yIHRoZSBzZWNvbmQgb2NjdXJyZW5jZS4gIFRoZSBleHBsaWNpdCBjb21wYXJpc29uIGFnYWluc3QgemVybworPiAgICBlbnN1cmVzIHRoYXQgc2l6ZW9mIGlzIG5vdCBkaXJlY3RseSBhcHBsaWVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBvcgorPiAgICBiaXQtZmllbGQgKHdoaWNoIHdvdWxkIGJlIGlsbC1mb3JtZWQpIG9yIFZMQSAod2hpY2ggd291bGQgYmUgZXZhbHVhdGVkKS4gICovCis+Cis+IHp3CisKK1doYXQgYWJvdXQgdGhlIGF0dGFjaGVkIHBhdGNoPworCitTaWRkaGVzaCwgaXMgdGhpcyBva2F5IGR1cmluZyB0aGUgZnJlZXplPyAgSSdkIGxpa2UgdG8gYmFja3BvcnQgaXQgdG8KKzIuMjUgYXMgd2VsbC4KKworVGhhbmtzLAorRmxvcmlhbgorCithc3NlcnQ6IFN1cHByZXNzIHBlZGFudGljIHdhcm5pbmcgY2F1c2VkIGJ5IHN0YXRlbWVudCBleHByZXNzaW9uCisKKzIwMTctMDctMDYgIEZsb3JpYW4gV2VpbWVyICA8ZndlaW1lckByZWRoYXQuY29tPgorCisJW0JaICMyMTI0Ml0KKwkqIGFzc2VydC9hc3NlcnQuaCBbX19HTlVDX18gJiYgIV9fU1RSSUNUX0FOU0lfX10gKGFzc2VydCk6CisJU3VwcHJlc3MgcGVkYW50aWMgd2FybmluZyByZXN1bHRpbmcgZnJvbSBzdGF0ZW1lbnQgZXhwcmVzc2lvbi4KKwkoX19BU1NFUlRfRlVOQ1RJT04pOiBBZGQgbWlzc2luZyBfX2V4dGVuZHNpb25fXy4KKy0tLQorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworIGFzc2VydC9hc3NlcnQuaCB8IDEyICsrKysrKysrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9hc3NlcnQvYXNzZXJ0LmggYi9hc3NlcnQvYXNzZXJ0LmgKK2luZGV4IDIyZjAxOTUzN2MuLjY4MDFjZmViMTAgMTAwNjQ0CistLS0gYS9hc3NlcnQvYXNzZXJ0LmgKKysrKyBiL2Fzc2VydC9hc3NlcnQuaAorQEAgLTkxLDEzICs5MSwxOSBAQCBfX0VORF9ERUNMUworICAgICAgPyBfX0FTU0VSVF9WT0lEX0NBU1QgKDApCQkJCQkJXAorICAgICAgOiBfX2Fzc2VydF9mYWlsICgjZXhwciwgX19GSUxFX18sIF9fTElORV9fLCBfX0FTU0VSVF9GVU5DVElPTikpCisgIyBlbHNlCisrLyogVGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgRVhQUiBpcyBub3QgZXZhbHVhdGVkIGR1ZSB0byB0aGUgc2l6ZW9mLAorKyAgIGJ1dCB3aWxsIHRyaWdnZXIgYW55IHBlZGFudGljIHdhcm5pbmdzIG1hc2tlZCBieSB0aGUgX19leHRlbnNpb25fXworKyAgIGZvciB0aGUgc2Vjb25kIG9jY3VycmVuY2UuICBUaGUgZXhwbGljaXQgY29tcGFyaXNvbiBhZ2FpbnN0IHplcm8gaXMKKysgICByZXF1aXJlZCB0byBzdXBwb3J0IGZ1bmN0aW9uIHBvaW50ZXJzIGFuZCBiaXQgZmllbGRzIGluIHRoaXMKKysgICBjb250ZXh0LCBhbmQgdG8gc3VwcHJlc3MgdGhlIGV2YWx1YXRpb24gb2YgdmFyaWFibGUgbGVuZ3RoCisrICAgYXJyYXlzLiAgKi8KKyAjICBkZWZpbmUgYXNzZXJ0KGV4cHIpCQkJCQkJCVwKKy0gICAgKHsJCQkJCQkJCQlcCisrICAoKHZvaWQpIHNpemVvZiAoKGV4cHIpID09IDApLCBfX2V4dGVuc2lvbl9fICh7CQkJXAorICAgICAgIGlmIChleHByKQkJCQkJCQkJXAorICAgICAgICAgOyAvKiBlbXB0eSAqLwkJCQkJCQlcCisgICAgICAgZWxzZQkJCQkJCQkJXAorICAgICAgICAgX19hc3NlcnRfZmFpbCAoI2V4cHIsIF9fRklMRV9fLCBfX0xJTkVfXywgX19BU1NFUlRfRlVOQ1RJT04pOwlcCistICAgIH0pCisrICAgIH0pKQorICMgZW5kaWYKKyAKKyAjIGlmZGVmCV9fVVNFX0dOVQorQEAgLTExMyw3ICsxMTksNyBAQCBfX0VORF9ERUNMUworICAgIEM5eCBoYXMgYSBzaW1pbGFyIHZhcmlhYmxlIGNhbGxlZCBfX2Z1bmNfXywgYnV0IHByZWZlciB0aGUgR0NDIG9uZSBzaW5jZQorICAgIGl0IGRlbWFuZ2xlcyBDKysgZnVuY3Rpb24gbmFtZXMuICAqLworICMgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyA/IF9fR05VQ19QUkVSRVEgKDIsIDYpIDogX19HTlVDX1BSRVJFUSAoMiwgNCkKKy0jICAgZGVmaW5lIF9fQVNTRVJUX0ZVTkNUSU9OCV9fUFJFVFRZX0ZVTkNUSU9OX18KKysjICAgZGVmaW5lIF9fQVNTRVJUX0ZVTkNUSU9OCV9fZXh0ZW5zaW9uX18gX19QUkVUVFlfRlVOQ1RJT05fXworICMgZWxzZQorICMgIGlmIGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKyAjICAgZGVmaW5lIF9fQVNTRVJUX0ZVTkNUSU9OCV9fZnVuY19fCistLSAKKzIuMTMuMworCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNi1lbGYtZGwtZGVwcy5jLU1ha2UtX2RsX2J1aWxkX2xvY2FsX3Njb3BlLWJyZWFkdGgtZmlyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjYtZWxmLWRsLWRlcHMuYy1NYWtlLV9kbF9idWlsZF9sb2NhbF9zY29wZS1icmVhZHRoLWZpci5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUyZjUzMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNi1lbGYtZGwtZGVwcy5jLU1ha2UtX2RsX2J1aWxkX2xvY2FsX3Njb3BlLWJyZWFkdGgtZmlyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotRnJvbSBmYjMxNWMxOTdjY2E2MTI5OWE2ZjY1ODhlYTM0NjAxNDVjMjU1ZDA2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgotRGF0ZTogVGh1LCAxOCBBdWcgMjAxNiAxNDowNzo1OCAtMDUwMAotU3ViamVjdDogW1BBVENIIDI2LzI2XSBlbGYvZGwtZGVwcy5jOiBNYWtlIF9kbF9idWlsZF9sb2NhbF9zY29wZSBicmVhZHRoIGZpcnN0Ci0KLUFjY29yZGluZyB0byB0aGUgRUxGIHNwZWNpZmljYXRpb246Ci0KLVdoZW4gcmVzb2x2aW5nIHN5bWJvbGljIHJlZmVyZW5jZXMsIHRoZSBkeW5hbWljIGxpbmtlciBleGFtaW5lcyB0aGUgc3ltYm9sCi10YWJsZXMgd2l0aCBhIGJyZWFkdGgtZmlyc3Qgc2VhcmNoLgotCi1UaGlzIGZ1bmN0aW9uIHdhcyB1c2luZyBhIGRlcHRoIGZpcnN0IHNlYXJjaC4gIEJ5IGRvaW5nIHNvIHRoZSBjb25mbGljdAotcmVzb2x1dGlvbiByZXBvcnRlZCB0byB0aGUgcHJlbGlua2VyICh3aGVuIExEX1RSQUNFX1BSRUxJTktJTkc9MSBpcyBzZXQpCi13YXMgaW5jb3JyZWN0LiAgVGhpcyBjYXVzZWQgcHJvYmxlbXMgd2hlbiB0aGVpciB3ZXJlIHZhcmlvdXMgY2lyY3VsYXIKLWRlcGVuZGVuY2llcyBiZXR3ZWVuIGxpYnJhcmllcy4gIFRoZSBwcm9ibGVtIHVzdWFsbHkgbWFuaWZlc3RlZCBpdHNlbGYgYnkKLXRoZSB3cm9uZyBJRlVOQyBiZWluZyBleGVjdXRlZC4KLQotW0JaIyAyMDQ4OF0KLQotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2xpYmMtYWxwaGFdCi0KLVNpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KLS0tLQotIGVsZi9kbC1kZXBzLmMgfCAxNCArKysrKysrKysrLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvZWxmL2RsLWRlcHMuYyBiL2VsZi9kbC1kZXBzLmMKLWluZGV4IDZhODI5ODcuLjUzYmU4MjQgMTAwNjQ0Ci0tLS0gYS9lbGYvZGwtZGVwcy5jCi0rKysgYi9lbGYvZGwtZGVwcy5jCi1AQCAtNzMsMTMgKzczLDE5IEBAIF9kbF9idWlsZF9sb2NhbF9zY29wZSAoc3RydWN0IGxpbmtfbWFwICoqbGlzdCwgc3RydWN0IGxpbmtfbWFwICptYXApCi0gewotICAgc3RydWN0IGxpbmtfbWFwICoqcCA9IGxpc3Q7Ci0gICBzdHJ1Y3QgbGlua19tYXAgKipxOwotKyAgc3RydWN0IGxpbmtfbWFwICoqcjsKLSAKLSAgICpwKysgPSBtYXA7Ci0gICBtYXAtPmxfcmVzZXJ2ZWQgPSAxOwotLSAgaWYgKG1hcC0+bF9pbml0ZmluaSkKLS0gICAgZm9yIChxID0gbWFwLT5sX2luaXRmaW5pICsgMTsgKnE7ICsrcSkKLS0gICAgICBpZiAoISAoKnEpLT5sX3Jlc2VydmVkKQotLQlwICs9IF9kbF9idWlsZF9sb2NhbF9zY29wZSAocCwgKnEpOwotKwotKyAgZm9yIChyID0gbGlzdDsgciA8IHA7ICsrcikKLSsgICAgaWYgKCgqciktPmxfaW5pdGZpbmkpCi0rICAgICAgZm9yIChxID0gKCpyKS0+bF9pbml0ZmluaSArIDE7ICpxOyArK3EpCi0rCWlmICghICgqcSktPmxfcmVzZXJ2ZWQpCi0rCSAgewotKwkgICAgKnArKyA9ICpxOwotKwkgICAgKCpxKS0+bF9yZXNlcnZlZCA9IDE7Ci0rCSAgfQotICAgcmV0dXJuIHAgLSBsaXN0OwotIH0KLSAKLS0tIAotMi4xMC4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI3LWdsaWJjLXJlc2V0LWRsLWxvYWQtd3JpdGUtbG9jay1hZnRlci1mb3JraW5nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjctZ2xpYmMtcmVzZXQtZGwtbG9hZC13cml0ZS1sb2NrLWFmdGVyLWZvcmtpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc3YjI1MwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI3LWdsaWJjLXJlc2V0LWRsLWxvYWQtd3JpdGUtbG9jay1hZnRlci1mb3JraW5nLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gYTZiYjczZDFjZmQyMGE3M2ZiYmU2MDc2MDA4Mzc2ZmI4Nzg3OWQxYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFl1YW5qaWUgSHVhbmcgPHl1YW5qaWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMTggQXVnIDIwMTYgMTc6NTk6MTMgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gcmVzZXQgZGxfbG9hZF93cml0ZV9sb2NrIGFmdGVyIGZvcmtpbmcKKworVGhlIHBhdGNoIGluIHRoaXMgQnVnemlsbGEgZW50cnkgd2FzIHJlcXVlc3RlZCBieSBhIGN1c3RvbWVyOgorCisgIGh0dHBzOi8vd3d3LnNvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xOTI4MgorCitUaGUgX19saWJjX2ZvcmsoKSBjb2RlIHJlc2V0IGRsX2xvYWRfbG9jaywgYnV0IGl0IGFsc28gbmVlZGVkIHRvIHJlc2V0CitkbF9sb2FkX3dyaXRlX2xvY2suICBUaGUgcGF0Y2ggaGFzIG5vdCB5ZXQgYmVlbiBpbnRlZ3JhdGVkIHVwc3RyZWFtLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgWyBOb3QgQXV0aG9yIFNlZSBidWd6aWxsYV0KKworU2lnbmVkLW9mZi1ieTogRGFtb2RhciBTb25vbmUgPGRhbW9kYXIuc29ub25lQGtwaXQuY29tPgorU2lnbmVkLW9mZi1ieTogWXVhbmppZSBIdWFuZyA8eXVhbmppZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgc3lzZGVwcy9ucHRsL2ZvcmsuYyB8IDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9ucHRsL2ZvcmsuYyBiL3N5c2RlcHMvbnB0bC9mb3JrLmMKK2luZGV4IDJiOWFlNGIuLjNkMGI4ZGEgMTAwNjQ0CistLS0gYS9zeXNkZXBzL25wdGwvZm9yay5jCisrKysgYi9zeXNkZXBzL25wdGwvZm9yay5jCitAQCAtMTc0LDggKzE3NCw5IEBAIF9fbGliY19mb3JrICh2b2lkKQorICAgICAgIC8qIFJlc2V0IGxvY2tzIGluIHRoZSBJL08gY29kZS4gICovCisgICAgICAgX0lPX2xpc3RfcmVzZXRsb2NrICgpOworIAorLSAgICAgIC8qIFJlc2V0IHRoZSBsb2NrIHRoZSBkeW5hbWljIGxvYWRlciB1c2VzIHRvIHByb3RlY3QgaXRzIGRhdGEuICAqLworKyAgICAgIC8qIFJlc2V0IHRoZSBsb2NrcyB0aGUgZHluYW1pYyBsb2FkZXIgdXNlcyB0byBwcm90ZWN0IGl0cyBkYXRhLiAgKi8KKyAgICAgICBfX3J0bGRfbG9ja19pbml0aWFsaXplIChHTChkbF9sb2FkX2xvY2spKTsKKysgICAgICBfX3J0bGRfbG9ja19pbml0aWFsaXplIChHTChkbF9sb2FkX3dyaXRlX2xvY2spKTsKKyAKKyAgICAgICAvKiBSdW4gdGhlIGhhbmRsZXJzIHJlZ2lzdGVyZWQgZm9yIHRoZSBjaGlsZC4gICovCisgICAgICAgd2hpbGUgKGFsbHAgIT0gTlVMTCkKKy0tIAorMS45LjEKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI3LWxvY2FsZS1maXgtaGFyZC1jb2RlZC1yZWZlcmVuY2UtdG8tZ2NjLUUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNy1sb2NhbGUtZml4LWhhcmQtY29kZWQtcmVmZXJlbmNlLXRvLWdjYy1FLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWMwYmRjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI3LWxvY2FsZS1maXgtaGFyZC1jb2RlZC1yZWZlcmVuY2UtdG8tZ2NjLUUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi1Gcm9tIGEyZmM4NmNiOGQwMzY2MTcxZjEwMGViZDAzM2FlYjk2MDlmYTQwZGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiA9P1VURi04P3E/Sj1DMz1BOXI9QzM9QTlteT0yMFJvc2VuPz0gPGplcmVteS5yb3NlbkBzbWlsZS5mcj4KLURhdGU6IE1vbiwgMjIgQXVnIDIwMTYgMTY6MDk6MjUgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAyNy8yN10gbG9jYWxlOiBmaXggaGFyZC1jb2RlZCByZWZlcmVuY2UgdG8gZ2NjIC1FCi0KLVdoZW4gbmV3IHZlcnNpb24gb2YgY29tcGlsZXJzIGFyZSBwdWJsaXNoZWQsIHRoZXkgbWF5IG5vdCBiZSBjb21wYXRpYmxlIHdpdGgKLW9sZGVyIHZlcnNpb25zIG9mIHNvZnR3YXJlLiBUaGlzIGlzIHBhcnRpY3VsYXJseSBjb21tb24gd2hlbiBzb2Z0d2FyZSBpcyBidWlsdAotd2l0aCAtV2Vycm9yLgotCi1BdXRvdG9vbHMgcHJvdmlkZXMgYSB3YXkgZm9yIGEgdXNlciB0byBzcGVjaWZ5IHRoZSBuYW1lIG9mIGhpcyBjb21waWxlciB1c2luZyBhCi1zZXQgb2YgdmFyaWFibGVzICgkQ0MgJENYWCAkQ1BQIGV0Yy4pLiBUaG9zZSB2YXJpYWJsZXMgYXJlIHVzZWQgY29ycmVjdGx5IHdoZW4KLWNvbXBpbGluZyBnbGliYyBidXQgdGhlIHNjcmlwdCB1c2VkIHRvIGdlbmVyYXRlIHRyYW5zbGl0ZXJhdGlvbnMgaW4gdGhlIGxvY2FsZS8KLXN1YmRpcmVjdG9yeSBkaXJlY3RseSBjYWxscyB0aGUgZ2NjIGJpbmFyeSB0byBnZXQgdGhlIG91dHB1dCBvZiB0aGUKLXByZXByb2Nlc3NvciBpbnN0ZWFkIG9mIHVzaW5nIHRoZSAkQ1BQIHZhcmlhYmxlIHByb3ZpZGVkIGJ5IHRoZSBidWlsZAotZW52aXJvbm1lbnQuCi0KLVRoaXMgcGF0Y2ggcmVwbGFjZXMgdGhlIGhhcmQtY29kZWQgcmVmZXJlbmNlIHRvIHRoZSBnY2MgYmluYXJ5IHdpdGggdGhlIHByb3BlcgotZW52aXJvbm1lbnQgdmFyaWFibGUsIHRodXMgYWxsb3dpbmcgYSB1c2VyIHRvIG92ZXJyaWRlIGl0LgotCi1VcHN0cmVhbS1TdGF0dXMgOiBTdWJtaXR0ZWQgW2h0dHBzOi8vc291cmNld2FyZS5vcmcvbWwvbGliYy1hbHBoYS8yMDE2LTA4L21zZzAwNzQ2Lmh0bWxdCi0tLS0KLSBsb2NhbGUvZ2VuLXRyYW5zbGl0LnBsIHwgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvbG9jYWxlL2dlbi10cmFuc2xpdC5wbCBiL2xvY2FsZS9nZW4tdHJhbnNsaXQucGwKLWluZGV4IDMwZDNmMmYuLmU5NzY1MzAgMTAwNjQ0Ci0tLS0gYS9sb2NhbGUvZ2VuLXRyYW5zbGl0LnBsCi0rKysgYi9sb2NhbGUvZ2VuLXRyYW5zbGl0LnBsCi1AQCAtMSw1ICsxLDUgQEAKLSAjIS91c3IvYmluL3BlcmwgLXcKLS1vcGVuIEYsICJjYXQgQy10cmFuc2xpdC5oLmluIHwgZ2NjIC1FIC0gfCIgfHwgZGllICJDYW5ub3QgcHJlcHJvY2VzcyBpbnB1dCBmaWxlIjsKLStvcGVuIEYsICdjYXQgQy10cmFuc2xpdC5oLmluIHwgJHtDUFA6LWdjYyAtRX0gLSB8JyB8fCBkaWUgIkNhbm5vdCBwcmVwcm9jZXNzIGlucHV0IGZpbGUiOwotIAotIAotIHN1YiBjc3RybGVuIHsKLS0tIAotMi4xMC4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI4LUJ1Zy00NTc4LWFkZC1sZC5zby1sb2NrLXdoaWxlLWZvcmsucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyOC1CdWctNDU3OC1hZGQtbGQuc28tbG9jay13aGlsZS1mb3JrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NjIzN2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyOC1CdWctNDU3OC1hZGQtbGQuc28tbG9jay13aGlsZS1mb3JrLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK1RoZSBwYXRjaCBpbiB0aGlzIEJ1Z3ppbGxhIGVudHJ5IHdhcyByZXF1ZXN0ZWQgYnkgYSBjdXN0b21lcjoKKyAgaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDU3OAorCitJZiBhIHRocmVhZCBoYXBwZW5zIHRvIGhvbGQgZGxfbG9hZF9sb2NrIGFuZCBoYXZlIHJfc3RhdGUgc2V0IHRvIFJUX0FERCBvcgorUlRfREVMRVRFIGF0IHRoZSB0aW1lIGFub3RoZXIgdGhyZWFkIGNhbGxzIGZvcmsoKSwgdGhlbiB0aGUgY2hpbGQgZXhpdCBjb2RlCitmcm9tIGZvcmsgKGluIG5wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZm9yay5jIGluIG91ciBjYXNlKSByZS1pbml0aWFsaXplcworZGxfbG9hZF9sb2NrIGJ1dCBkb2VzIG5vdCByZXN0b3JlIHJfc3RhdGUgdG8gUlRfQ09OU0lTVEVOVC4gSWYgdGhlIGNoaWxkCitzdWJzZXF1ZW50bHkgcmVxdWlyZXMgbGQuc28gZnVuY3Rpb25hbGl0eSBiZWZvcmUgY2FsbGluZyBleGVjKCksIHRoZW4gdGhlCithc3NlcnRpb24gd2lsbCBmaXJlLgorCitUaGUgcGF0Y2ggYWNxdWlyZXMgZGxfbG9hZF9sb2NrIG9uIGVudHJ5IHRvIGZvcmsoKSBhbmQgcmVsZWFzZXMgaXQgb24gZXhpdAorZnJvbSB0aGUgcGFyZW50IHBhdGguICBUaGUgY2hpbGQgcGF0aCBpcyBpbml0aWFsaXplZCBhcyBjdXJyZW50bHkgZG9uZS4KK1RoaXMgaXMgZXNzZW50aWFsbHkgcHRocmVhZHNfYXRmb3JrLCBidXQgZm9yY2VkIHRvIGJlIGZpcnN0IGJlY2F1c2UgdGhlCithY3F1aXNpdGlvbiBvZiBkbF9sb2FkX2xvY2sgbXVzdCBoYXBwZW4gYmVmb3JlIG1hbGxvY19hdGZvcmsgaXMgYWN0aXZlCit0byBhdm9pZCBhIGRlYWRsb2NrLgorVGhlIHBhdGNoIGhhcyBub3QgeWV0IGJlZW4gaW50ZWdyYXRlZCB1cHN0cmVhbS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nIFsgTm90IEF1dGhvciBTZWUgYnVnemlsbGFdCisKK1NpZ25lZC1vZmYtYnk6IFJhZ2h1bmF0aCBMb2x1ciA8UmFnaHVuYXRoLkxvbHVyQGtwaXQuY29tPgorU2lnbmVkLW9mZi1ieTogWXVhbmppZSBIdWFuZyA8eXVhbmppZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogWmhpeGlvbmcgQ2hpIDx6aGl4aW9uZy5jaGlAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IGdpdC9zeXNkZXBzL25wdGwvZm9yay5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3lzZGVwcy9ucHRsL2ZvcmsuYyAgICAgICAyMDE3LTA4LTAzIDE2OjAyOjE1LjY3NDcwNDA4MCArMDgwMAorKysrIGdpdC9zeXNkZXBzL25wdGwvZm9yay5jICAgIDIwMTctMDgtMDQgMTg6MTU6MDIuNDYzMzYyMDE1ICswODAwCitAQCAtMjUsNiArMjUsNyBAQAorICNpbmNsdWRlIDx0bHMuaD4KKyAjaW5jbHVkZSA8aHAtdGltaW5nLmg+CisgI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrI2luY2x1ZGUgPGxpYmMtbG9jay5oPgorICNpbmNsdWRlIDxzdGRpby1sb2NrLmg+CisgI2luY2x1ZGUgPGF0b21pYy5oPgorICNpbmNsdWRlIDxucHRsL3B0aHJlYWRQLmg+CitAQCAtNjAsNiArNjEsMTAgQEAKKyAgICAgIGJ1dCBvdXIgY3VycmVudCBmb3JrIGltcGxlbWVudGF0aW9uIGlzIG5vdC4gICovCisgICBib29sIG11bHRpcGxlX3RocmVhZHMgPSBUSFJFQURfR0VUTUVNIChUSFJFQURfU0VMRiwgaGVhZGVyLm11bHRpcGxlX3RocmVhZHMpOworIAorKyAgLyogZ3JhYiBsZC5zbyBsb2NrIEJFRk9SRSBzd2l0Y2hpbmcgdG8gbWFsbG9jX2F0Zm9yayAqLworKyAgX19ydGxkX2xvY2tfbG9ja19yZWN1cnNpdmUgKEdMKGRsX2xvYWRfbG9jaykpOworKyAgX19ydGxkX2xvY2tfbG9ja19yZWN1cnNpdmUgKEdMKGRsX2xvYWRfd3JpdGVfbG9jaykpOworKworICAgLyogUnVuIGFsbCB0aGUgcmVnaXN0ZXJlZCBwcmVwYXJhdGlvbiBoYW5kbGVycy4gIEluIHJldmVyc2Ugb3JkZXIuCisgICAgICBXaGlsZSBkb2luZyB0aGlzIHdlIGJ1aWxkIHVwIGEgbGlzdCBvZiBhbGwgdGhlIGVudHJpZXMuICAqLworICAgc3RydWN0IGZvcmtfaGFuZGxlciAqcnVucDsKK0BAIC0yNDcsNiArMjUyLDEwIEBACisgCisgCSAgYWxscCA9IGFsbHAtPm5leHQ7CisgCX0KKysKKysgICAgICAvKiB1bmxvY2sgbGQuc28gbGFzdCwgYmVjYXVzZSB3ZSBsb2NrZWQgaXQgZmlyc3QgKi8KKysgICAgICBfX3J0bGRfbG9ja191bmxvY2tfcmVjdXJzaXZlIChHTChkbF9sb2FkX3dyaXRlX2xvY2spKTsKKysgICAgICBfX3J0bGRfbG9ja191bmxvY2tfcmVjdXJzaXZlIChHTChkbF9sb2FkX2xvY2spKTsKKyAgICAgfQorIAorICAgcmV0dXJuIHBpZDsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI4LVJld29yay1mbm8tb21pdC1mcmFtZS1wb2ludGVyLXN1cHBvcnQtb24taTM4Ni5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI4LVJld29yay1mbm8tb21pdC1mcmFtZS1wb2ludGVyLXN1cHBvcnQtb24taTM4Ni5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VkMmI5MC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyOC1SZXdvcmstZm5vLW9taXQtZnJhbWUtcG9pbnRlci1zdXBwb3J0LW9uLWkzODYucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNjggKzAsMCBAQAotRnJvbSAxZWEwMDNkNGZjY2M0NjQ2ZmQxODQ4YTE4MjQwNWExYzcwMDBhYjE4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQWRoZW1lcnZhbCBaYW5lbGxhIDxhZGhlbWVydmFsLnphbmVsbGFAbGluYXJvLm9yZz4KLURhdGU6IFN1biwgOCBKYW4gMjAxNyAxMTozODoyMyAtMDIwMAotU3ViamVjdDogW1BBVENIIDI4LzI4XSBSZXdvcmsgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgc3VwcG9ydCBvbiBpMzg2Ci0KLUNvbW1pdCA2YjFkZjhiMjdmIGZpeGVkIHRoZSAtT1MgYnVpbGQgaXNzdWUgb24gaTM4NiAoQlojMjA3MjkpIGJ5Ci1leHBsaWNpdGluZyBkaXNhYmxpbmcgZnJhbWUgcG9pbnRlciAoLWZvbWl0LWZyYW1lLXBvaW50ZXIpIG9uIHRoZQotZmF1bHR5IG9iamVjdHMuICBBbHRob3VnaCBpdCBkb2VzIGZpeCB0aGUgaXNzdWUsIGl0IGlzIGEgc3VicGFyCi13b3JrYXJvdW5kIHRoYXQgYWRkcyBjb21wbGV4aXR5IGluIGJ1aWxkIHByb2Nlc3MgKGEgcnVsZSBmb3IgZWFjaAotb2JqZWN0IHRvIGFkZCB0aGUgcmVxdWlyZWQgY29tcGlsZXIgb3B0aW9uIGFuZCBwb250ZW50aWFsbHkgbW9yZQotcnVsZXMgZm9yIG9iamVjdHMgdGhhdCBjYWxsIHtJTkxJTkUsSU5URVJOQUx9X1NZU0NBTEwpIGFuZCBkb2VzIG5vdAotYWxsb3cgdGhlIGltcGxlbWVudGF0aW9ucyB0byBnZXQgYWxsIHRoZSBwb3NzaWJsZSBkZWJ1Zy9jYWxsdHJhY2sKLWluZm9ybWF0aW9uIHBvc3NpYmxlICh1c2VkIG1haW5seSBpbiBkZWJ1Z2dlcnMgYW5kIHBlcmZvcm1hbmNlCi1tZWFzdXJlbWVudCB0b29scykuCi0KLVRoaXMgcGF0Y2ggZml4ZXMgaXQgYnkgYWRkaW5nIGFuIGV4cGxpY2l0IGNvbmZpZ3VyZSBjaGVjayB0byBzZWUKLWlmIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIGlzIHNldCBhbmQgdG8gYWN0IGFjY29yZGluZ2x5IChzZXQgb3IKLW5vdCBPUFRJTUlaRV9GT1JfR0NDXzUpLiAgVGhlIG1ha2UgcnVsZXMgaXMgc2ltcGxpZmllZCBhbmQgb25seQotb25lIGlzIHJlcXVpcmVkOiB0byBhZGQgbGliYy1kby1zeXNjYWxsIG9uIGxvYWRlciBkdWUgbW1hcAotKHdoaWNoIHdpbGwgYmUgZW1wdHkgYW55d2F5IGZvciBkZWZhdWx0IGJ1aWxkIHdpdGgKLS1mb21pdC1mcmFtZS1wb2ludGVyKS4KLQotQ2hlY2tlZCBvbiBpMzg2LWxpbnV4LWdudSB3aXRoIEdDQyA2LjIuMSB3aXRoIENGTEFHUyBzZXRzIGFzCi0nLU9zJywgJy1PMiAtZm5vLW9taXQtZnJhbWUtcG9pbnRlcicsIGFuZCAnLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyJy4KLUZvciAnLU9zJyB0aGUgdGVzdHN1aXRlIGlzc3VlcyBkZXNjcmliZWQgYnkgQlojMTk0NjMgYW5kIEJaIzE1MTA1Ci1zdGlsbCBhcHBsaWVkLgotCi1JdCBmaXhlcyBCWiAjMjEwMjksIGFsdGhvdWdoIGl0IGlzIG1hcmtlZCBhcyBkdXBsaWNhdGVkIG9mICMyMDcyOQotKEkgcmVvcGVuZWQgdG8gdHJhY2sgdGhpcyBjbGVhbnVwKS4KLQotCVtCWiAjMjEwMjldCi0JKiBjb25maWcuaC5pbiBbQ0FOX1VTRV9SRUdJU1RFUl9BU01fRUJQXTogTmV3IGRlZmluZS4KLQkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvTWFrZWZpbGUKLQlbJChzdWJkaXIpID0gZWxmXSAoc3lzZGVwLWRsLXJvdXRpbmVzKTogQWRkIGxpYmMtZG8tc3lzY2FsbC4KLQkodXNlcy02LXN5c2NhbGwtYXJndW1lbnRzKTogUmVtb3ZlLgotCVskKHN1YmRpcikgPSBtaXNjXSAoQ0ZMQUdTLWVwb2xsX3B3YWl0Lm8pOiBMaWtld2lzZS4KLQlbJChzdWJkaXIpID0gbWlzY10gKENGTEFHUy1lcG9sbF9wd2FpdC5vcyk6IExpa2V3aXNlLgotCVskKHN1YmRpcikgPSBtaXNjXSAoQ0ZMQUdTLW1tYXAubyk6IExpa2V3aXNlLgotCVskKHN1YmRpcikgPSBtaXNjXSAoQ0ZMQUdTLW1tYXAub3MpOiBMaWtld2lzZS4KLQlbJChzdWJkaXIpID0gbWlzY10gKENGTEFHUy1tbWFwNjQubyk6IExpa2V3aXNlLgotCVskKHN1YmRpcikgPSBtaXNjXSAoQ0ZMQUdTLW1tYXA2NC5vcyk6IExpa2V3aXNlLgotCVskKHN1YmRpcikgPSBtaXNjXSAoQ0ZMQUdTLXBzZWxlY3Qubyk6IExpa2V3aXNlLgotCVskKHN1YmRpcikgPSBtaXNjXSAoY2ZsYWdzLXBzZWxlY3Qubyk6IExpa2V3aXNlLgotCVskKHN1YmRpcikgPSBtaXNjXSAoY2ZsYWdzLXBzZWxlY3Qub3MpOiBMaWtld2lzZS4KLQlbJChzdWJkaXIpID0gbWlzY10gKGNmbGFncy1ydGxkLW1tYXAub3MpOiBMaWtld2lzZS4KLQlbJChzdWJkaXIpID0gc3lzdmlwY10gKGNmbGFncy1zZW10aW1lZG9wLm8pOiBMaWtld2lzZS4KLQlbJChzdWJkaXIpID0gc3lzdmlwY10gKGNmbGFncy1zZW10aW1lZG9wLm9zKTogTGlrZXdpc2UuCi0JWyQoc3ViZGlyKSA9IGlvXSAoQ0ZMQUdTLXBvc2l4X2ZhZHZpc2U2NC5vKTogTGlrZXdpc2UuCi0JWyQoc3ViZGlyKSA9IGlvXSAoQ0ZMQUdTLXBvc2l4X2ZhZHZpc2U2NC5vcyk6IExpa2V3aXNlLgotCVskKHN1YmRpcikgPSBpb10gKENGTEFHUy1wb3NpeF9mYWxsb2NhdGUubyk6IExpa2V3aXNlLgotCVskKHN1YmRpcikgPSBpb10gKENGTEFHUy1wb3NpeF9mYWxsb2NhdGUub3MpOiBMaWtld2lzZS4KLQlbJChzdWJkaXIpID0gaW9dIChDRkxBR1MtcG9zaXhfZmFsbG9jYXRlNjQubyk6IExpa2V3aXNlLgotCVskKHN1YmRpcikgPSBpb10gKENGTEFHUy1wb3NpeF9mYWxsb2NhdGU2NC5vcyk6IExpa2V3aXNlLgotCVskKHN1YmRpcikgPSBpb10gKENGTEFHUy1zeW5jX2ZpbGVfcmFuZ2Uubyk6IExpa2V3aXNlLgotCVskKHN1YmRpcikgPSBpb10gKENGTEFHUy1zeW5jX2ZpbGVfcmFuZ2Uub3MpOiBMaWtld2lzZS4KLQlbJChzdWJkaXIpID0gaW9dIChDRkxBR1MtZmFsbG9jYXRlLm8pOiBMaWtld2lzZS4KLQlbJChzdWJkaXIpID0gaW9dIChDRkxBR1MtZmFsbG9jYXRlLm9zKTogTGlrZXdpc2UuCi0JWyQoc3ViZGlyKSA9IGlvXSAoQ0ZMQUdTLWZhbGxvY2F0ZTY0Lm8pOiBMaWtld2lzZS4KLQlbJChzdWJkaXIpID0gaW9dIChDRkxBR1MtZmFsbG9jYXRlNjQub3MpOiBMaWtld2lzZS4KLQlbJChzdWJkaXIpID0gbnB0bF0gKENGTEFHUy1wdGhyZWFkX3J3bG9ja190aW1lZHJkbG9jay5vKToKLQlMaWtld2lzZS4KLQlbJChzdWJkaXIpID0gbnB0bF0gKENGTEFHUy1wdGhyZWFkX3J3bG9ja190aW1lZHJkbG9jay5vcyk6Ci0JTGlrZXdpc2UuCi0JWyQoc3ViZGlyKSA9IG5wdGxdIChDRkxBR1MtcHRocmVhZF9yd2xvY2tfdGltZWRyd2xvY2subyk6Ci0JTGlrZXdpc2UuCi0JWyQoc3ViZGlyKSA9IG5wdGxdIChDRkxBR1MtcHRocmVhZF9yd2xvY2tfdGltZWRyd2xvY2sub3MpOgotCUxpa2V3aXNlLgotCVskKHN1YmRpcikgPSBucHRsXSAoQ0ZMQUdTLXNlbV93YWl0Lm8pOiBMaWtld2lzZS4KLQlbJChzdWJkaXIpID0gbnB0bF0gKENGTEFHUy1zZW1fd2FpdC5vcyk6IExpa2V3aXNlLgotCVskKHN1YmRpcikgPSBucHRsXSAoQ0ZMQUdTLXNlbV90aW1lZHdhaXQubyk6IExpa2V3aXNlLgotCVskKHN1YmRpcikgPSBucHRsXSAoQ0ZMQUdTLXNlbV90aW1lZHdhaXQub3MpOiBMaWtld2lzZS4KLQkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvY29uZmlndXJlLmFjOiBBZGQgY2hlY2sgaWYgY29tcGlsZXIgYWxsb3dzCi0JZWJwIG9uIGlubGluZSBhc3NlbWJseS4KLQkqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCSogc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaCAoT1BUSU1JWkVfRk9SX0dDQ181KToKLQlTZXQgaWYgQ0FOX1VTRV9SRUdJU1RFUl9BU01fRUJQIGlzIHNldC4KLQkoY2hlY2tfY29uc2lzdGVuY3kpOiBMaWtld2lzZS4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi0gIGh0dHBzOi8vc291cmNld2FyZS5vcmcvZ2l0Lz9wPWdsaWJjLmdpdDthPWNvbW1pdGRpZmY7aD0zYjMzZDZlZDYwOTZjMWQyMGQwNWE2NTBiMDYwMjZkNjczZjczOTlhCi0KLVNpZ25lZC1vZmYtYnk6IEFuZHJlIE1jQ3VyZHkgPGFybWNjdXJkeUBnbWFpbC5jb20+Ci0tLS0KLSBjb25maWcuaC5pbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0ICsrKysKLSBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L01ha2VmaWxlICAgICB8IDM5ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L2NvbmZpZ3VyZSAgICB8IDM5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKLSBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L2NvbmZpZ3VyZS5hYyB8IDE3ICsrKysrKysrKysrKysrCi0gc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaCAgICAgfCAgNiArKy0tLQotIDUgZmlsZXMgY2hhbmdlZCwgNjQgaW5zZXJ0aW9ucygrKSwgNDEgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9jb25maWcuaC5pbiBiL2NvbmZpZy5oLmluCi1pbmRleCA3YmZlOTIzLi5mYjJjYzUxIDEwMDY0NAotLS0tIGEvY29uZmlnLmguaW4KLSsrKyBiL2NvbmZpZy5oLmluCi1AQCAtMjU5LDQgKzI1OSw4IEBACi0gLyogQnVpbGQgZ2xpYmMgd2l0aCB0dW5hYmxlcyBzdXBwb3J0LiAgKi8KLSAjZGVmaW5lIEhBVkVfVFVOQUJMRVMgMAotIAotKy8qIFNvbWUgY29tcGlsZXIgb3B0aW9ucyBtYXkgbm93IGFsbG93IHRvIHVzZSBlYnAgaW4gX19hc21fXyAodXNlZCBtYWlubHkKLSsgICBpbiBpMzg2IDYgYXJndW1lbnQgc3lzY2FsbCBpc3N1ZSkuICAqLwotKyNkZWZpbmUgQ0FOX1VTRV9SRUdJU1RFUl9BU01fRUJQIDAKLSsKLSAjZW5kaWYKLWRpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L01ha2VmaWxlIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9NYWtlZmlsZQotaW5kZXggOTYwOTc1Mi4uNmFhYzBkZiAxMDA2NDQKLS0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvTWFrZWZpbGUKLSsrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvTWFrZWZpbGUKLUBAIC0xLDQ3ICsxLDE4IEBACi0gIyBUaGUgZGVmYXVsdCBBQkkgaXMgMzIuCi0gZGVmYXVsdC1hYmkgOj0gMzIKLSAKLS0jICVlYnAgaXMgdXNlZCB0byBwYXNzIHRoZSA2dGggYXJndW1lbnQgdG8gc3lzdGVtIGNhbGxzLCBzbyB0aGVzZQotLSMgc3lzdGVtIGNhbGxzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBhIGZyYW1lIHBvaW50ZXIuCi0tdXNlcy02LXN5c2NhbGwtYXJndW1lbnRzID0gLWZvbWl0LWZyYW1lLXBvaW50ZXIKLS0KLSBpZmVxICgkKHN1YmRpciksbWlzYykKLSBzeXNkZXBfcm91dGluZXMgKz0gaW9wZXJtIGlvcGwgdm04NgotLUNGTEFHUy1lcG9sbF9wd2FpdC5vICs9ICQodXNlcy02LXN5c2NhbGwtYXJndW1lbnRzKQotLUNGTEFHUy1lcG9sbF9wd2FpdC5vcyArPSAkKHVzZXMtNi1zeXNjYWxsLWFyZ3VtZW50cykKLS1DRkxBR1MtbW1hcC5vICs9ICQodXNlcy02LXN5c2NhbGwtYXJndW1lbnRzKQotLUNGTEFHUy1tbWFwLm9zICs9ICQodXNlcy02LXN5c2NhbGwtYXJndW1lbnRzKQotLUNGTEFHUy1tbWFwNjQubyArPSAkKHVzZXMtNi1zeXNjYWxsLWFyZ3VtZW50cykKLS1DRkxBR1MtbW1hcDY0Lm9zICs9ICQodXNlcy02LXN5c2NhbGwtYXJndW1lbnRzKQotLUNGTEFHUy1wc2VsZWN0Lm8gKz0gJCh1c2VzLTYtc3lzY2FsbC1hcmd1bWVudHMpCi0tQ0ZMQUdTLXBzZWxlY3Qub3MgKz0gJCh1c2VzLTYtc3lzY2FsbC1hcmd1bWVudHMpCi0tQ0ZMQUdTLXJ0bGQtbW1hcC5vcyArPSAkKHVzZXMtNi1zeXNjYWxsLWFyZ3VtZW50cykKLS1lbmRpZgotLQotLWlmZXEgKCQoc3ViZGlyKSxzeXN2aXBjKQotLUNGTEFHUy1zZW10aW1lZG9wLm8gKz0gJCh1c2VzLTYtc3lzY2FsbC1hcmd1bWVudHMpCi0tQ0ZMQUdTLXNlbXRpbWVkb3Aub3MgKz0gJCh1c2VzLTYtc3lzY2FsbC1hcmd1bWVudHMpCi0gZW5kaWYKLSAKLSBpZmVxICgkKHN1YmRpciksZWxmKQotK3N5c2RlcC1kbC1yb3V0aW5lcyArPSBsaWJjLWRvLXN5c2NhbGwKLSBzeXNkZXAtb3RoZXJzICs9IGxkZGxpYmM0Ci0gaW5zdGFsbC1iaW4gKz0gbGRkbGliYzQKLSBlbmRpZgotIAotIGlmZXEgKCQoc3ViZGlyKSxpbykKLSBzeXNkZXBfcm91dGluZXMgKz0gbGliYy1kby1zeXNjYWxsCi0tQ0ZMQUdTLXBvc2l4X2ZhZHZpc2U2NC5vICs9ICQodXNlcy02LXN5c2NhbGwtYXJndW1lbnRzKQotLUNGTEFHUy1wb3NpeF9mYWR2aXNlNjQub3MgKz0gJCh1c2VzLTYtc3lzY2FsbC1hcmd1bWVudHMpCi0tQ0ZMQUdTLXBvc2l4X2ZhbGxvY2F0ZS5vICs9ICQodXNlcy02LXN5c2NhbGwtYXJndW1lbnRzKQotLUNGTEFHUy1wb3NpeF9mYWxsb2NhdGUub3MgKz0gJCh1c2VzLTYtc3lzY2FsbC1hcmd1bWVudHMpCi0tQ0ZMQUdTLXBvc2l4X2ZhbGxvY2F0ZTY0Lm8gKz0gJCh1c2VzLTYtc3lzY2FsbC1hcmd1bWVudHMpCi0tQ0ZMQUdTLXBvc2l4X2ZhbGxvY2F0ZTY0Lm9zICs9ICQodXNlcy02LXN5c2NhbGwtYXJndW1lbnRzKQotLUNGTEFHUy1zeW5jX2ZpbGVfcmFuZ2UubyArPSAkKHVzZXMtNi1zeXNjYWxsLWFyZ3VtZW50cykKLS1DRkxBR1Mtc3luY19maWxlX3JhbmdlLm9zICs9ICQodXNlcy02LXN5c2NhbGwtYXJndW1lbnRzKQotLUNGTEFHUy1mYWxsb2NhdGUubyArPSAkKHVzZXMtNi1zeXNjYWxsLWFyZ3VtZW50cykKLS1DRkxBR1MtZmFsbG9jYXRlLm9zICs9ICQodXNlcy02LXN5c2NhbGwtYXJndW1lbnRzKQotLUNGTEFHUy1mYWxsb2NhdGU2NC5vICs9ICQodXNlcy02LXN5c2NhbGwtYXJndW1lbnRzKQotLUNGTEFHUy1mYWxsb2NhdGU2NC5vcyArPSAkKHVzZXMtNi1zeXNjYWxsLWFyZ3VtZW50cykKLSBlbmRpZgotIAotIGlmZXEgKCQoc3ViZGlyKSxucHRsKQotQEAgLTYxLDE0ICszMiw2IEBAIGlmZXEgKCQoc3ViZGlyKSxucHRsKQotICMgcHVsbCBpbiBfX3N5c2NhbGxfZXJyb3Igcm91dGluZQotIGxpYnB0aHJlYWQtcm91dGluZXMgKz0gc3lzZGVwCi0gbGlicHRocmVhZC1zaGFyZWQtb25seS1yb3V0aW5lcyArPSBzeXNkZXAKLS1DRkxBR1MtcHRocmVhZF9yd2xvY2tfdGltZWRyZGxvY2subyArPSAkKHVzZXMtNi1zeXNjYWxsLWFyZ3VtZW50cykKLS1DRkxBR1MtcHRocmVhZF9yd2xvY2tfdGltZWRyZGxvY2sub3MgKz0gJCh1c2VzLTYtc3lzY2FsbC1hcmd1bWVudHMpCi0tQ0ZMQUdTLXB0aHJlYWRfcndsb2NrX3RpbWVkd3Jsb2NrLm8gKz0gJCh1c2VzLTYtc3lzY2FsbC1hcmd1bWVudHMpCi0tQ0ZMQUdTLXB0aHJlYWRfcndsb2NrX3RpbWVkd3Jsb2NrLm9zICs9ICQodXNlcy02LXN5c2NhbGwtYXJndW1lbnRzKQotLUNGTEFHUy1zZW1fd2FpdC5vICs9ICQodXNlcy02LXN5c2NhbGwtYXJndW1lbnRzKQotLUNGTEFHUy1zZW1fd2FpdC5vcyArPSAkKHVzZXMtNi1zeXNjYWxsLWFyZ3VtZW50cykKLS1DRkxBR1Mtc2VtX3RpbWVkd2FpdC5vICs9ICQodXNlcy02LXN5c2NhbGwtYXJndW1lbnRzKQotLUNGTEFHUy1zZW1fdGltZWR3YWl0Lm9zICs9ICQodXNlcy02LXN5c2NhbGwtYXJndW1lbnRzKQotIGVuZGlmCi0gCi0gaWZlcSAoJChzdWJkaXIpLHJ0KQotZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvY29uZmlndXJlIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9jb25maWd1cmUKLWluZGV4IGViNzI2NTkuLmFlMmMzNTYgMTAwNjQ0Ci0tLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L2NvbmZpZ3VyZQotKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9jb25maWd1cmUKLUBAIC0zLDUgKzMsNDQgQEAKLSAKLSBhcmNoX21pbmltdW1fa2VybmVsPTIuNi4zMgotIAotKyMgQ2hlY2sgaWYgQ0ZMQUdTIGFsbG93cyBjb21waWxlciB0byB1c2UgZWJwIHJlZ2lzdGVyIGluIGlubGluZSBhc3NlbWJseS4KLSsKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGNvbXBpbGVyIGZsYWdzIGFsbG93cyBlYnAgaW4gaW5saW5lIGFzc2VtYmx5IiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBpZiBjb21waWxlciBmbGFncyBhbGxvd3MgZWJwIGluIGlubGluZSBhc3NlbWJseS4uLiAiID4mNjsgfQotK2lmICR7bGliY19jdl9jYW5fdXNlX3JlZ2lzdGVyX2FzbV9lYnArOn0gZmFsc2U7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rCi0rY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSsKLSsgICAgdm9pZCBmb28gKGludCBpKQotKyAgICB7Ci0rICAgICAgcmVnaXN0ZXIgaW50IHJlZyBhc20gKCJlYnAiKSA9IGk7Ci0rICAgICAgYXNtICgiIyAlMCIgOiA6ICJyIiAocmVnKSk7Ci0rICAgIH0KLStpbnQKLSttYWluICgpCi0rewotKwotKyAgOwotKyAgcmV0dXJuIDA7Ci0rfQotK19BQ0VPRgotK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSsgIGxpYmNfY3ZfY2FuX3VzZV9yZWdpc3Rlcl9hc21fZWJwPXllcwotK2Vsc2UKLSsgIGxpYmNfY3ZfY2FuX3VzZV9yZWdpc3Rlcl9hc21fZWJwPW5vCi0rZmkKLStybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSsKLStmaQotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGliY19jdl9jYW5fdXNlX3JlZ2lzdGVyX2FzbV9lYnAiID4mNQotKyRhc19lY2hvICIkbGliY19jdl9jYW5fdXNlX3JlZ2lzdGVyX2FzbV9lYnAiID4mNjsgfQotK2lmIHRlc3QgJGxpYmNfY3ZfY2FuX3VzZV9yZWdpc3Rlcl9hc21fZWJwID0geWVzOyB0aGVuCi0rICAkYXNfZWNobyAiI2RlZmluZSBDQU5fVVNFX1JFR0lTVEVSX0FTTV9FQlAgMSIgPj5jb25mZGVmcy5oCi0rCi0rZmkKLSsKLSBsaWJjX2N2X2djY191bndpbmRfZmluZF9mZGU9eWVzCi0gbGRkX3Jld3JpdGVfc2NyaXB0PXN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2xkZC1yZXdyaXRlLnNlZAotZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvY29uZmlndXJlLmFjIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9jb25maWd1cmUuYWMKLWluZGV4IDFhMTFkYTYuLjFjZDYzMmUgMTAwNjQ0Ci0tLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L2NvbmZpZ3VyZS5hYwotKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9jb25maWd1cmUuYWMKLUBAIC0zLDUgKzMsMjIgQEAgR0xJQkNfUFJPVklERVMgZG5sIFNlZSBhY2xvY2FsLm00IGluIHRoZSB0b3AgbGV2ZWwgc291cmNlIGRpcmVjdG9yeS4KLSAKLSBhcmNoX21pbmltdW1fa2VybmVsPTIuNi4zMgotIAotKyMgQ2hlY2sgaWYgQ0ZMQUdTIGFsbG93cyBjb21waWxlciB0byB1c2UgZWJwIHJlZ2lzdGVyIGluIGlubGluZSBhc3NlbWJseS4KLStBQ19DQUNIRV9DSEVDSyhbaWYgY29tcGlsZXIgZmxhZ3MgYWxsb3dzIGVicCBpbiBpbmxpbmUgYXNzZW1ibHldLAotKyAgICAgICAgICAgICAgICBsaWJjX2N2X2Nhbl91c2VfcmVnaXN0ZXJfYXNtX2VicCwgWwotK0FDX0NPTVBJTEVfSUZFTFNFKAotKyAgW0FDX0xBTkdfUFJPR1JBTShbCi0rICAgIHZvaWQgZm9vIChpbnQgaSkKLSsgICAgewotKyAgICAgIHJlZ2lzdGVyIGludCByZWcgYXNtICgiZWJwIikgPSBpOwotKyAgICAgIGFzbSAoIiMgJTAiIDogOiAiciIgKHJlZykpOwotKyAgICB9XSldLAotKyAgW2xpYmNfY3ZfY2FuX3VzZV9yZWdpc3Rlcl9hc21fZWJwPXllc10sCi0rICBbbGliY19jdl9jYW5fdXNlX3JlZ2lzdGVyX2FzbV9lYnA9bm9dKQotK10pCi0raWYgdGVzdCAkbGliY19jdl9jYW5fdXNlX3JlZ2lzdGVyX2FzbV9lYnAgPSB5ZXM7IHRoZW4KLSsgIEFDX0RFRklORShDQU5fVVNFX1JFR0lTVEVSX0FTTV9FQlApCi0rZmkKLSsKLSBsaWJjX2N2X2djY191bndpbmRfZmluZF9mZGU9eWVzCi0gbGRkX3Jld3JpdGVfc2NyaXB0PXN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2xkZC1yZXdyaXRlLnNlZAotZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvc3lzZGVwLmggYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3N5c2RlcC5oCi1pbmRleCBiYWY0NjQyLi40NDliMjNlIDEwMDY0NAotLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaAotKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXNkZXAuaAotQEAgLTQ0LDkgKzQ0LDkgQEAKLSAvKiBTaW5jZSBHQ0MgNSBhbmQgYWJvdmUgY2FuIHByb3Blcmx5IHNwaWxsICVlYnggd2l0aCBQSUMgd2hlbiBuZWVkZWQsCi0gICAgd2UgY2FuIGlubGluZSBzeXNjYWxscyB3aXRoIDYgYXJndW1lbnRzIGlmIEdDQyA1IG9yIGFib3ZlIGlzIHVzZWQKLSAgICB0byBjb21waWxlIGdsaWJjLiAgRGlzYWJsZSBHQ0MgNSBvcHRpbWl6YXRpb24gd2hlbiBjb21waWxpbmcgZm9yCi0tICAgcHJvZmlsaW5nIHNpbmNlIGFzbSAoImVicCIpIGNhbid0IGJlIHVzZWQgdG8gcHV0IHRoZSA2dGggYXJndW1lbnQKLS0gICBpbiAlZWJwIGZvciBzeXNjYWxsLiAgKi8KLS0jaWYgX19HTlVDX1BSRVJFUSAoNSwwKSAmJiAhZGVmaW5lZCBQUk9GCi0rICAgcHJvZmlsaW5nIG9yIHdoZW4gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgaXMgdXNlZCBzaW5jZSBhc20gKCJlYnAiKQotKyAgIGNhbid0IGJlIHVzZWQgdG8gcHV0IHRoZSA2dGggYXJndW1lbnQgaW4gJWVicCBmb3Igc3lzY2FsbC4gICovCi0rI2lmIF9fR05VQ19QUkVSRVEgKDUsMCkgJiYgIWRlZmluZWQgUFJPRiAmJiBDQU5fVVNFX1JFR0lTVEVSX0FTTV9FQlAKLSAjIGRlZmluZSBPUFRJTUlaRV9GT1JfR0NDXzUKLSAjZW5kaWYKLSAKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjktYXNzZXJ0LVN1cHBvcnQtdHlwZXMtd2l0aG91dC1vcGVyYXRvci1pbnQtQlotMjE5NzIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyOS1hc3NlcnQtU3VwcG9ydC10eXBlcy13aXRob3V0LW9wZXJhdG9yLWludC1CWi0yMTk3Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzcwNTBmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjktYXNzZXJ0LVN1cHBvcnQtdHlwZXMtd2l0aG91dC1vcGVyYXRvci1pbnQtQlotMjE5NzIucGF0Y2gKQEAgLTAsMCArMSwxOTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworKiBmaXhlcyAibGFtYmRhLWV4cHJlc3Npb24gaW4gdW5ldmFsdWF0ZWQgY29udGV4dCIgY29tcGlsZSBmYWlsdXJlcyBzdWNoIGFzCisgIGh0dHBzOi8vZ2l0aHViLmNvbS9ubG9obWFubi9qc29uL2lzc3Vlcy83MDUKKworKiBmaXhlcyAibm8gbWF0Y2ggZm9yICdvcGVyYXRvcj09IiBjb21waWxlIGZhaWx1cmVzIHN1Y2ggYXMKKyAgaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD0xNDgyOTkwCisKKyogQ2hhbmdlbG9nIGVkaXQgd2FzIHJlbW92ZWQgZnJvbSB1cHN0cmVhbSBjb21taXQgYmVjYXVzZSBpdCBjYXVzZWQgY29uZmxpY3QKKworU2lnbmVkLW9mZi1ieTogUy4gTG9ja3dvb2QtQ2hpbGRzIDxzamxAdmN0bGFicy5jb20+CisKK0Zyb20gYjU4ODlkMjVlOWJmOTQ0YTg5ZmRkN2JjYWJmM2I2YzZmNmJiNmY3YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZsb3JpYW4gV2VpbWVyIDxmd2VpbWVyQHJlZGhhdC5jb20+CitEYXRlOiBNb24sIDIxIEF1ZyAyMDE3IDEzOjAzOjI5ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGFzc2VydDogU3VwcG9ydCB0eXBlcyB3aXRob3V0IG9wZXJhdG9yPT0gKGludCkgW0JaICMyMTk3Ml0KKworLS0tCisgYXNzZXJ0L01ha2VmaWxlICAgICAgICAgIHwgMTEgKysrKysrLQorIGFzc2VydC9hc3NlcnQuaCAgICAgICAgICB8IDE2ICsrKysrKy0tLS0KKyBhc3NlcnQvdHN0LWFzc2VydC1jKysuY2MgfCA3OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBhc3NlcnQvdHN0LWFzc2VydC1nKysuY2MgfCAxOSArKysrKysrKysrKysKKyA0IGZpbGVzIGNoYW5nZWQsIDEyOCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBhc3NlcnQvdHN0LWFzc2VydC1jKysuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYXNzZXJ0L3RzdC1hc3NlcnQtZysrLmNjCisKK2RpZmYgLS1naXQgYS9hc3NlcnQvTWFrZWZpbGUgYi9hc3NlcnQvTWFrZWZpbGUKK2luZGV4IDFjM2JlOWIuLjllYzFiZTggMTAwNjQ0CistLS0gYS9hc3NlcnQvTWFrZWZpbGUKKysrKyBiL2Fzc2VydC9NYWtlZmlsZQorQEAgLTI1LDYgKzI1LDE1IEBAIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIGhlYWRlcnMJOj0gYXNzZXJ0LmgKKyAKKyByb3V0aW5lcyA6PSBhc3NlcnQgYXNzZXJ0LXBlcnIgX19hc3NlcnQKKy10ZXN0cyA6PSB0ZXN0LWFzc2VydCB0ZXN0LWFzc2VydC1wZXJyCisrdGVzdHMgOj0gdGVzdC1hc3NlcnQgdGVzdC1hc3NlcnQtcGVyciB0c3QtYXNzZXJ0LWMrKyB0c3QtYXNzZXJ0LWcrKworIAorIGluY2x1ZGUgLi4vUnVsZXMKKysKKytpZmVxICgkKGhhdmUtY3h4LXRocmVhZF9sb2NhbCkseWVzKQorK0NGTEFHUy10c3QtYXNzZXJ0LWMrKy5vID0gLXN0ZD1jKysxMQorK0xETElCUy10c3QtYXNzZXJ0LWMrKyA9IC1sc3RkYysrCisrQ0ZMQUdTLXRzdC1hc3NlcnQtZysrLm8gPSAtc3RkPWdudSsrMTEKKytMRExJQlMtdHN0LWFzc2VydC1nKysgPSAtbHN0ZGMrKworK2Vsc2UKKyt0ZXN0cy11bnN1cHBvcnRlZCArPSB0c3QtYXNzZXJ0LWMrKyB0c3QtYXNzZXJ0LWcrKworK2VuZGlmCitkaWZmIC0tZ2l0IGEvYXNzZXJ0L2Fzc2VydC5oIGIvYXNzZXJ0L2Fzc2VydC5oCitpbmRleCA2ODAxY2ZlLi42NDBjOTVjIDEwMDY0NAorLS0tIGEvYXNzZXJ0L2Fzc2VydC5oCisrKysgYi9hc3NlcnQvYXNzZXJ0LmgKK0BAIC04NSw3ICs4NSwxMiBAQCBfX0VORF9ERUNMUworIC8qIFdoZW4gcG9zc2libGUsIGRlZmluZSBhc3NlcnQgc28gdGhhdCBpdCBkb2VzIG5vdCBhZGQgZXh0cmEKKyAgICBwYXJlbnRoZXNlcyBhcm91bmQgRVhQUi4gIE90aGVyd2lzZSwgdGhvc2UgYWRkZWQgcGFyZW50aGVzZXMgd291bGQKKyAgICBzdXBwcmVzcyB3YXJuaW5ncyB3ZSdkIGV4cGVjdCB0byBiZSBkZXRlY3RlZCBieSBnY2MncyAtV3BhcmVudGhlc2VzLiAgKi8KKy0jIGlmICFkZWZpbmVkIF9fR05VQ19fIHx8IGRlZmluZWQgX19TVFJJQ1RfQU5TSV9fCisrIyBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisrIyAgZGVmaW5lIGFzc2VydChleHByKQkJCQkJCQlcCisrICAgICAoc3RhdGljX2Nhc3QgPGJvb2w+IChleHByKQkJCQkJCVwKKysgICAgICA/IHZvaWQgKDApCQkJCQkJCVwKKysgICAgICA6IF9fYXNzZXJ0X2ZhaWwgKCNleHByLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fQVNTRVJUX0ZVTkNUSU9OKSkKKysjIGVsaWYgIWRlZmluZWQgX19HTlVDX18gfHwgZGVmaW5lZCBfX1NUUklDVF9BTlNJX18KKyAjICBkZWZpbmUgYXNzZXJ0KGV4cHIpCQkJCQkJCVwKKyAgICAgKChleHByKQkJCQkJCQkJXAorICAgICAgPyBfX0FTU0VSVF9WT0lEX0NBU1QgKDApCQkJCQkJXAorQEAgLTkzLDEyICs5OCwxMSBAQCBfX0VORF9ERUNMUworICMgZWxzZQorIC8qIFRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIEVYUFIgaXMgbm90IGV2YWx1YXRlZCBkdWUgdG8gdGhlIHNpemVvZiwKKyAgICBidXQgd2lsbCB0cmlnZ2VyIGFueSBwZWRhbnRpYyB3YXJuaW5ncyBtYXNrZWQgYnkgdGhlIF9fZXh0ZW5zaW9uX18KKy0gICBmb3IgdGhlIHNlY29uZCBvY2N1cnJlbmNlLiAgVGhlIGV4cGxpY2l0IGNvbXBhcmlzb24gYWdhaW5zdCB6ZXJvIGlzCistICAgcmVxdWlyZWQgdG8gc3VwcG9ydCBmdW5jdGlvbiBwb2ludGVycyBhbmQgYml0IGZpZWxkcyBpbiB0aGlzCistICAgY29udGV4dCwgYW5kIHRvIHN1cHByZXNzIHRoZSBldmFsdWF0aW9uIG9mIHZhcmlhYmxlIGxlbmd0aAorLSAgIGFycmF5cy4gICovCisrICAgZm9yIHRoZSBzZWNvbmQgb2NjdXJyZW5jZS4gIFRoZSB0ZXJuYXJ5IG9wZXJhdG9yIGlzIHJlcXVpcmVkIHRvCisrICAgc3VwcG9ydCBmdW5jdGlvbiBwb2ludGVycyBhbmQgYml0IGZpZWxkcyBpbiB0aGlzIGNvbnRleHQsIGFuZCB0bworKyAgIHN1cHByZXNzIHRoZSBldmFsdWF0aW9uIG9mIHZhcmlhYmxlIGxlbmd0aCBhcnJheXMuICAqLworICMgIGRlZmluZSBhc3NlcnQoZXhwcikJCQkJCQkJXAorLSAgKCh2b2lkKSBzaXplb2YgKChleHByKSA9PSAwKSwgX19leHRlbnNpb25fXyAoewkJCVwKKysgICgodm9pZCkgc2l6ZW9mICgoZXhwcikgPyAxIDogMCksIF9fZXh0ZW5zaW9uX18gKHsJCQlcCisgICAgICAgaWYgKGV4cHIpCQkJCQkJCQlcCisgICAgICAgICA7IC8qIGVtcHR5ICovCQkJCQkJCVwKKyAgICAgICBlbHNlCQkJCQkJCQlcCitkaWZmIC0tZ2l0IGEvYXNzZXJ0L3RzdC1hc3NlcnQtYysrLmNjIGIvYXNzZXJ0L3RzdC1hc3NlcnQtYysrLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTJhNWU2OQorLS0tIC9kZXYvbnVsbAorKysrIGIvYXNzZXJ0L3RzdC1hc3NlcnQtYysrLmNjCitAQCAtMCwwICsxLDc4IEBACisrLyogVGVzdHMgZm9yIGludGVyYWN0aW9ucyBiZXR3ZWVuIEMrKyBhbmQgYXNzZXJ0LgorKyAgIENvcHlyaWdodCAoQykgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNlZQorKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisrCisrI2luY2x1ZGUgPGFzc2VydC5oPgorKworKy8qIFRoZSBDKysgc3RhbmRhcmQgcmVxdWlyZXMgdGhhdCBpZiB0aGUgYXNzZXJ0IGFyZ3VtZW50IGlzIGEgY29uc3RhbnQKKysgICBzdWJleHByZXNzaW9uLCB0aGVuIHRoZSBhc3NlcnQgaXRzZWxmIGlzIG9uZSwgdG9vLiAgKi8KKytjb25zdGV4cHIgaW50CisrY2hlY2tfY29uc3RleHByICgpCisreworKyAgcmV0dXJuIChhc3NlcnQgKHRydWUpLCAxKTsKKyt9CisrCisrLyogT2JqZWN0cyBvZiB0aGlzIGNsYXNzIGNhbiBiZSBjb250ZXh0dWFsbHkgY29udmVydGVkIHRvIGJvb2wsIGJ1dAorKyAgIGNhbm5vdCBiZSBjb21wYXJlZCB0byBpbnQuICAqLworK3N0cnVjdCBub19pbnQKKyt7CisrICBub19pbnQgKCkgPSBkZWZhdWx0OworKyAgbm9faW50IChjb25zdCBub19pbnQgJikgPSBkZWxldGU7CisrCisrICBleHBsaWNpdCBvcGVyYXRvciBib29sICgpIGNvbnN0CisrICB7CisrICAgIHJldHVybiB0cnVlOworKyAgfQorKworKyAgYm9vbCBvcGVyYXRvciEgKCkgY29uc3Q7IC8qIE5vIGRlZmluaXRpb24uICAqLworKyAgdGVtcGxhdGUgPGNsYXNzIFQ+IGJvb2wgb3BlcmF0b3I9PSAoVCkgY29uc3Q7IC8qIE5vIGRlZmluaXRpb24uICAqLworKyAgdGVtcGxhdGUgPGNsYXNzIFQ+IGJvb2wgb3BlcmF0b3IhPSAoVCkgY29uc3Q7IC8qIE5vIGRlZmluaXRpb24uICAqLworK307CisrCisrLyogVGhpcyBjbGFzcyB0ZXN0cyB0aGF0IG9wZXJhdG9yPT0gaXMgbm90IHVzZWQgYnkgYXNzZXJ0LiAgKi8KKytzdHJ1Y3QgYm9vbF9hbmRfaW50CisreworKyAgYm9vbF9hbmRfaW50ICgpID0gZGVmYXVsdDsKKysgIGJvb2xfYW5kX2ludCAoY29uc3Qgbm9faW50ICYpID0gZGVsZXRlOworKworKyAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCAoKSBjb25zdAorKyAgeworKyAgICByZXR1cm4gdHJ1ZTsKKysgIH0KKysKKysgIGJvb2wgb3BlcmF0b3IhICgpIGNvbnN0OyAvKiBObyBkZWZpbml0aW9uLiAgKi8KKysgIHRlbXBsYXRlIDxjbGFzcyBUPiBib29sIG9wZXJhdG9yPT0gKFQpIGNvbnN0OyAvKiBObyBkZWZpbml0aW9uLiAgKi8KKysgIHRlbXBsYXRlIDxjbGFzcyBUPiBib29sIG9wZXJhdG9yIT0gKFQpIGNvbnN0OyAvKiBObyBkZWZpbml0aW9uLiAgKi8KKyt9OworKworK3N0YXRpYyBpbnQKKytkb190ZXN0ICgpCisreworKyAgeworKyAgICBub19pbnQgdmFsdWU7CisrICAgIGFzc2VydCAodmFsdWUpOworKyAgfQorKworKyAgeworKyAgICBib29sX2FuZF9pbnQgdmFsdWU7CisrICAgIGFzc2VydCAodmFsdWUpOworKyAgfQorKworKyAgcmV0dXJuIDA7CisrfQorKworKyNpbmNsdWRlIDxzdXBwb3J0L3Rlc3QtZHJpdmVyLmM+CitkaWZmIC0tZ2l0IGEvYXNzZXJ0L3RzdC1hc3NlcnQtZysrLmNjIGIvYXNzZXJ0L3RzdC1hc3NlcnQtZysrLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uOGMwNjQwMgorLS0tIC9kZXYvbnVsbAorKysrIGIvYXNzZXJ0L3RzdC1hc3NlcnQtZysrLmNjCitAQCAtMCwwICsxLDE5IEBACisrLyogVGVzdHMgZm9yIGludGVyYWN0aW9ucyBiZXR3ZWVuIEMrKyBhbmQgYXNzZXJ0LiAgR05VIEMrKzExIHZlcnNpb24uCisrICAgQ29weXJpZ2h0IChDKSAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgc2VlCisrICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKysjaW5jbHVkZSA8dHN0LWFzc2VydC1jKysuY2M+CistLSAKKzEuOS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy9DVkUtMjAxNy0xNTY3MC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy9DVkUtMjAxNy0xNTY3MC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTA1MGE1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjL0NWRS0yMDE3LTE1NjcwLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK0Zyb20gYTc2Mzc2ZGY3YzA3ZTU3N2E5NTE1YzNmYWE1ZGJkNTBiZGE1ZGEwNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgRWdnZXJ0IDxlZ2dlcnRAY3MudWNsYS5lZHU+CitEYXRlOiBGcmksIDIwIE9jdCAyMDE3IDE4OjQxOjE0ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIENWRS0yMDE3LTE1NjcwOiBnbG9iOiBGaXggb25lLWJ5dGUgb3ZlcmZsb3cgW0JaICMyMjMyMF0KKworKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgYzM2OWQ2NmU1NDI2YTMwZTQ3MjViMTAwZDVjZDI4ZTM3Mjc1NGY5MCkKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorQ1ZFOiBDVkUtMjAxNy0xNTY3MAorQWZmZWN0czogZ2xpYmMgPCAyLjI3CitTaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KKworLS0tCisgQ2hhbmdlTG9nICAgIHwgNiArKysrKysKKyBORVdTICAgICAgICAgfCA1ICsrKysrCisgcG9zaXgvZ2xvYi5jIHwgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogZ2l0L05FV1MKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9ORVdTCisrKysgZ2l0L05FV1MKK0BAIC0yMDYsNiArMjA2LDExIEBAIFNlY3VyaXR5IHJlbGF0ZWQgY2hhbmdlczoKKyAqIEEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSBpbiBjbG50dWRwX2NhbGwgaW4gdGhlIFN1biBSUEMgc3lzdGVtIGhhcyBiZWVuCisgICBmaXhlZCAoQ1ZFLTIwMTctMTIxMzMpLgorIAorKyAgQ1ZFLTIwMTctMTU2NzA6IFRoZSBnbG9iIGZ1bmN0aW9uLCB3aGVuIGludm9rZWQgd2l0aCBHTE9CX1RJTERFLAorKyAgc3VmZmVyZWQgZnJvbSBhIG9uZS1ieXRlIG92ZXJmbG93IGR1cmluZyB+IG9wZXJhdG9yIHByb2Nlc3NpbmcgKGVpdGhlcgorKyAgb24gdGhlIHN0YWNrIG9yIHRoZSBoZWFwLCBkZXBlbmRpbmcgb24gdGhlIGxlbmd0aCBvZiB0aGUgdXNlciBuYW1lKS4KKysgIFJlcG9ydGVkIGJ5IFRpbSBSw7xoc2VuLgorKworIFRoZSBmb2xsb3dpbmcgYnVncyBhcmUgcmVzb2x2ZWQgd2l0aCB0aGlzIHJlbGVhc2U6CisgCisgICBbOTg0XSBuZXR3b3JrOiBSZXNwb25kIHRvIGNoYW5nZWQgcmVzb2x2LmNvbmYgaW4gZ2V0aG9zdGJ5bmFtZQorSW5kZXg6IGdpdC9wb3NpeC9nbG9iLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9wb3NpeC9nbG9iLmMKKysrKyBnaXQvcG9zaXgvZ2xvYi5jCitAQCAtODQzLDcgKzg0Myw3IEBAIGdsb2IgKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGludCBmbGFncywgaW4KKyAJCSAgKnAgPSAnXDAnOworIAkJfQorIAkgICAgICBlbHNlCistCQkqKChjaGFyICopIG1lbXBjcHkgKG5ld3AsIGRpcm5hbWUgKyAxLCBlbmRfbmFtZSAtIGRpcm5hbWUpKQorKwkJKigoY2hhciAqKSBtZW1wY3B5IChuZXdwLCBkaXJuYW1lICsgMSwgZW5kX25hbWUgLSBkaXJuYW1lIC0gMSkpCisgCQkgID0gJ1wwJzsKKyAJICAgICAgdXNlcl9uYW1lID0gbmV3cDsKKyAJICAgIH0KK0luZGV4OiBnaXQvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvQ2hhbmdlTG9nCisrKysgZ2l0L0NoYW5nZUxvZworQEAgLTEsMyArMSw5IEBACisrMjAxNy0xMC0yMCAgUGF1bCBFZ2dlcnQgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKysKKysgICAgICAgW0JaICMyMjMyMF0KKysgICAgICAgQ1ZFLTIwMTctMTU2NzAKKysgICAgICAgKiBwb3NpeC9nbG9iLmMgKF9fZ2xvYik6IEZpeCBvbmUtYnl0ZSBvdmVyZmxvdy4KKysKKyAyMDE3LTA4LTAyICBTaWRkaGVzaCBQb3lhcmVrYXIgIDxzaWRkaGVzaEBzb3VyY2V3YXJlLm9yZz4KKyAKKyAJKiB2ZXJzaW9uLmggKFJFTEVBU0UpOiBTZXQgdG8gInN0YWJsZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy9DVkUtMjAxNy0xNTY3MS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy9DVkUtMjAxNy0xNTY3MS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTY5MjgyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjL0NWRS0yMDE3LTE1NjcxLnBhdGNoCkBAIC0wLDAgKzEsNjYgQEAKK0Zyb20gZjFjZjk4YjU4Mzc4N2NmYjYyNzhiYWVhNDZlMjg2YTBlZTc1NjdmZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgRWdnZXJ0IDxlZ2dlcnRAY3MudWNsYS5lZHU+CitEYXRlOiBTdW4sIDIyIE9jdCAyMDE3IDEwOjAwOjU3ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGdsb2I6IEZpeCBidWZmZXIgb3ZlcmZsb3cgZHVyaW5nIEdMT0JfVElMREUgdW5lc2NhcGluZyBbQloKKyAjMjIzMzJdCisKKyhjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IGExNTliNTNmYTA1OTk0N2NjMjU0OGUzYjBkNWJkY2Y3Yjk2MzBiYTgpCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK0NWRTogQ1ZFLTIwMTctMTU2NzEKK1NpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgorCistLS0KKyBDaGFuZ2VMb2cgICAgfCA2ICsrKysrKworIE5FV1MgICAgICAgICB8IDQgKysrKworIHBvc2l4L2dsb2IuYyB8IDQgKystLQorIDMgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdpdC9ORVdTCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvTkVXUworKysrIGdpdC9ORVdTCitAQCAtMjExLDYgKzIxMSwxMCBAQCBTZWN1cml0eSByZWxhdGVkIGNoYW5nZXM6CisgICBvbiB0aGUgc3RhY2sgb3IgdGhlIGhlYXAsIGRlcGVuZGluZyBvbiB0aGUgbGVuZ3RoIG9mIHRoZSB1c2VyIG5hbWUpLgorICAgUmVwb3J0ZWQgYnkgVGltIFLDvGhzZW4uCisgCisrICBUaGUgZ2xvYiBmdW5jdGlvbiwgd2hlbiBpbnZva2VkIHdpdGggR0xPQl9USUxERSBhbmQgd2l0aG91dAorKyAgR0xPQl9OT0VTQ0FQRSwgY291bGQgd3JpdGUgcGFzdCB0aGUgZW5kIG9mIGEgYnVmZmVyIHdoaWxlCisrICB1bmVzY2FwaW5nIHVzZXIgbmFtZXMuICBSZXBvcnRlZCBieSBUaW0gUsO8aHNlbi4KKysKKyBUaGUgZm9sbG93aW5nIGJ1Z3MgYXJlIHJlc29sdmVkIHdpdGggdGhpcyByZWxlYXNlOgorIAorICAgWzk4NF0gbmV0d29yazogUmVzcG9uZCB0byBjaGFuZ2VkIHJlc29sdi5jb25mIGluIGdldGhvc3RieW5hbWUKK0luZGV4OiBnaXQvcG9zaXgvZ2xvYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvcG9zaXgvZ2xvYi5jCisrKysgZ2l0L3Bvc2l4L2dsb2IuYworQEAgLTgyMywxMSArODIzLDExIEBAIGdsb2IgKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGludCBmbGFncywgaW4KKyAJCSAgY2hhciAqcCA9IG1lbXBjcHkgKG5ld3AsIGRpcm5hbWUgKyAxLAorIAkJCQkgICAgIHVuZXNjYXBlIC0gZGlybmFtZSAtIDEpOworIAkJICBjaGFyICpxID0gdW5lc2NhcGU7CistCQkgIHdoaWxlICgqcSAhPSAnXDAnKQorKwkJICB3aGlsZSAocSAhPSBlbmRfbmFtZSkKKyAJCSAgICB7CisgCQkgICAgICBpZiAoKnEgPT0gJ1xcJykKKyAJCQl7CistCQkJICBpZiAocVsxXSA9PSAnXDAnKQorKwkJCSAgaWYgKHEgKyAxID09IGVuZF9uYW1lKQorIAkJCSAgICB7CisgCQkJICAgICAgLyogIn5mb1xcb1xcIiB1bmVzY2FwZSB0byB1c2VyX25hbWUgImZvb1xcIiwKKyAJCQkJIGJ1dCAifmZvXFxvXFwvIiB1bmVzY2FwZSB0byB1c2VyX25hbWUKK0luZGV4OiBnaXQvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvQ2hhbmdlTG9nCisrKysgZ2l0L0NoYW5nZUxvZworQEAgLTEsNSArMSwxMCBAQAorKworIDIwMTctMTAtMjAgIFBhdWwgRWdnZXJ0IDxlZ2dlcnRAY3MudWNsYS5lZHU+CisgCisrICAgICAgIFtCWiAjMjIzMzJdCisrICAgICAgICogcG9zaXgvZ2xvYi5jIChfX2dsb2IpOiBGaXggYnVmZmVyIG92ZXJmbG93IGR1cmluZyBHTE9CX1RJTERFCisrICAgICAgIHVuZXNjYXBpbmcuCisrCisgICAgICAgIFtCWiAjMjIzMjBdCisgICAgICAgIENWRS0yMDE3LTE1NjcwCisgICAgICAgICogcG9zaXgvZ2xvYi5jIChfX2dsb2IpOiBGaXggb25lLWJ5dGUgb3ZlcmZsb3cuCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvQ1ZFLTIwMTctMTY5OTcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvQ1ZFLTIwMTctMTY5OTcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg3MzFlNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy9DVkUtMjAxNy0xNjk5Ny5wYXRjaApAQCAtMCwwICsxLDE1MCBAQAorRnJvbSA0ZWJkMGM0MTkxYzYwNzNjYzhhN2M1ZmRjZjFkMTgyYzQ3MTliY2JiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQXVyZWxpZW4gSmFybm8gPGF1cmVsaWVuQGF1cmVsMzIubmV0PgorRGF0ZTogU2F0LCAzMCBEZWMgMjAxNyAxMDo1NDoyMyArMDEwMAorU3ViamVjdDogW1BBVENIXSBlbGY6IENoZWNrIGZvciBlbXB0eSB0b2tlbnMgYmVmb3JlIGR5bmFtaWMgc3RyaW5nIHRva2VuCisgZXhwYW5zaW9uIFtCWiAjMjI2MjVdCisKK1RoZSBmaWxsaW5fcnBhdGggZnVuY3Rpb24gaW4gZWxmL2RsLWxvYWQuYyBsb29wcyBvdmVyIGVhY2ggUlBBVEggb3IKK1JVTlBBVEggdG9rZW5zIGFuZCBpbnRlcnByZXRzIGVtcHR5IHRva2VucyBhcyB0aGUgY3VycmVudCBkaXJlY3RvcnkKKygiLi8iKS4gSW4gcHJhY3RpY2UgdGhlIGNoZWNrIGZvciBlbXB0eSB0b2tlbiBpcyBkb25lICphZnRlciogdGhlCitkeW5hbWljIHN0cmluZyB0b2tlbiBleHBhbnNpb24uIFRoZSBleHBhbnNpb24gcHJvY2VzcyBjYW4gcmV0dXJuIGFuCitlbXB0eSBzdHJpbmcgZm9yIHRoZSAkT1JJR0lOIHRva2VuIGlmIF9fbGliY19lbmFibGVfc2VjdXJlIGlzIHNldAorb3IgaWYgdGhlIHBhdGggb2YgdGhlIGJpbmFyeSBjYW4gbm90IGJlIGRldGVybWluZWQgKC9wcm9jIG5vdCBtb3VudGVkKS4KKworRml4IHRoYXQgYnkgbW92aW5nIHRoZSBjaGVjayBmb3IgZW1wdHkgdG9rZW5zIGJlZm9yZSB0aGUgZHluYW1pYyBzdHJpbmcKK3Rva2VuIGV4cGFuc2lvbi4gSW4gYWRkaXRpb24sIGNoZWNrIGZvciBOVUxMIHBvaW50ZXIgb3IgZW1wdHkgc3RyaW5ncworcmV0dXJuIGJ5IGV4cGFuZF9keW5hbWljX3N0cmluZ190b2tlbi4KKworVGhlIGFib3ZlIGNoYW5nZXMgaGlnaGxpZ2h0ZWQgYSBidWcgaW4gZGVjb21wb3NlX3JwYXRoLCBhbiBlbXB0eSBhcnJheQoraXMgcmVwcmVzZW50ZWQgYnkgdGhlIGZpcnN0IGVsZW1lbnQgYmVpbmcgTlVMTCBhdCB0aGUgZmlsbGluX3JwYXRoCitsZXZlbCwgYnV0IGJ5IHVzaW5nIGEgLTEgcG9pbnRlciBpbiBkZWNvbXBvc2VfcnBhdGggYW5kIG90aGVyIGZ1bmN0aW9ucy4KKworQ2hhbmdlbG9nOgorCVtCWiAjMjI2MjVdCisJKiBlbGYvZGwtbG9hZC5jIChmaWxsaW5fcnBhdGgpOiBDaGVjayBmb3IgZW1wdHkgdG9rZW5zIGJlZm9yZSBkeW5hbWljCisJc3RyaW5nIHRva2VuIGV4cGFuc2lvbi4gQ2hlY2sgZm9yIE5VTEwgcG9pbnRlciBvciBlbXB0eSBzdHJpbmcgcG9zc2libHkKKwlyZXR1cm5lZCBieSBleHBhbmRfZHluYW1pY19zdHJpbmdfdG9rZW4uCisJKGRlY29tcG9zZV9ycGF0aCk6IENoZWNrIGZvciBlbXB0eSBwYXRoIGFmdGVyIGR5bmFtaWMgc3RyaW5nCisJdG9rZW4gZXhwYW5zaW9uLgorKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgM2UzYzkwNGRhZWY2OWI4YmY3ZDVjYzA3Zjc5M2M5ZjA3YzM1NTNlZikKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorQ1ZFOiBDVkUtMjAxNy0xNjk5NworU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+CisKKy0tLQorIENoYW5nZUxvZyAgICAgfCAxMCArKysrKysrKysrCisgTkVXUyAgICAgICAgICB8ICA0ICsrKysKKyBlbGYvZGwtbG9hZC5jIHwgNDkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNDcgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnaXQvTkVXUworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL05FV1MKKysrKyBnaXQvTkVXUworQEAgLTIxNSw2ICsyMTUsMTAgQEAgU2VjdXJpdHkgcmVsYXRlZCBjaGFuZ2VzOgorICAgR0xPQl9OT0VTQ0FQRSwgY291bGQgd3JpdGUgcGFzdCB0aGUgZW5kIG9mIGEgYnVmZmVyIHdoaWxlCisgICB1bmVzY2FwaW5nIHVzZXIgbmFtZXMuICBSZXBvcnRlZCBieSBUaW0gUsO8aHNlbi4KKyAKKysgIENWRS0yMDE3LTE2OTk3OiBJbmNvcnJlY3QgaGFuZGxpbmcgb2YgUlBBVEggb3IgUlVOUEFUSCBjb250YWluaW5nICRPUklHSU4KKysgIGZvciBBVF9TRUNVUkUgb3IgU1VJRCBiaW5hcmllcyBjb3VsZCBiZSB1c2VkIHRvIGxvYWQgbGlicmFyaWVzIGZyb20gdGhlCisrICBjdXJyZW50IGRpcmVjdG9yeS4KKysKKyBUaGUgZm9sbG93aW5nIGJ1Z3MgYXJlIHJlc29sdmVkIHdpdGggdGhpcyByZWxlYXNlOgorIAorICAgWzk4NF0gbmV0d29yazogUmVzcG9uZCB0byBjaGFuZ2VkIHJlc29sdi5jb25mIGluIGdldGhvc3RieW5hbWUKK0luZGV4OiBnaXQvZWxmL2RsLWxvYWQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2VsZi9kbC1sb2FkLmMKKysrKyBnaXQvZWxmL2RsLWxvYWQuYworQEAgLTQzMywzMiArNDMzLDQxIEBAIGZpbGxpbl9ycGF0aCAoY2hhciAqcnBhdGgsIHN0cnVjdCByX3NlYXIKKyB7CisgICBjaGFyICpjcDsKKyAgIHNpemVfdCBuZWxlbXMgPSAwOworLSAgY2hhciAqdG9fZnJlZTsKKyAKKyAgIHdoaWxlICgoY3AgPSBfX3N0cnNlcCAoJnJwYXRoLCBzZXApKSAhPSBOVUxMKQorICAgICB7CisgICAgICAgc3RydWN0IHJfc2VhcmNoX3BhdGhfZWxlbSAqZGlycDsKKysgICAgICBjaGFyICp0b19mcmVlID0gTlVMTDsKKysgICAgICBzaXplX3QgbGVuID0gMDsKKyAKKy0gICAgICB0b19mcmVlID0gY3AgPSBleHBhbmRfZHluYW1pY19zdHJpbmdfdG9rZW4gKGwsIGNwLCAxKTsKKysgICAgICAvKiBgc3Ryc2VwJyBjYW4gcGFzcyBhbiBlbXB0eSBzdHJpbmcuICAqLworKyAgICAgIGlmICgqY3AgIT0gJ1wwJykKKysJeworKwkgIHRvX2ZyZWUgPSBjcCA9IGV4cGFuZF9keW5hbWljX3N0cmluZ190b2tlbiAobCwgY3AsIDEpOworIAorLSAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGNwKTsKKysJICAvKiBleHBhbmRfZHluYW1pY19zdHJpbmdfdG9rZW4gY2FuIHJldHVybiBOVUxMIGluIGNhc2Ugb2YgZW1wdHkKKysJICAgICBwYXRoIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuICAqLworKwkgIGlmIChjcCA9PSBOVUxMKQorKwkgICAgY29udGludWU7CisrCisrCSAgLyogQ29tcHV0ZSB0aGUgbGVuZ3RoIGFmdGVyIGR5bmFtaWMgc3RyaW5nIHRva2VuIGV4cGFuc2lvbiBhbmQKKysJICAgICBpZ25vcmUgZW1wdHkgcGF0aHMuICAqLworKwkgIGxlbiA9IHN0cmxlbiAoY3ApOworKwkgIGlmIChsZW4gPT0gMCkKKysJICAgIHsKKysJICAgICAgZnJlZSAodG9fZnJlZSk7CisrCSAgICAgIGNvbnRpbnVlOworKwkgICAgfQorIAorLSAgICAgIC8qIGBzdHJzZXAnIGNhbiBwYXNzIGFuIGVtcHR5IHN0cmluZy4gIFRoaXMgaGFzIHRvIGJlCistCSBpbnRlcnByZXRlZCBhcyBgdXNlIHRoZSBjdXJyZW50IGRpcmVjdG9yeScuICovCistICAgICAgaWYgKGxlbiA9PSAwKQorLQl7CistCSAgc3RhdGljIGNvbnN0IGNoYXIgY3Vyd2RbXSA9ICIuLyI7CistCSAgY3AgPSAoY2hhciAqKSBjdXJ3ZDsKKysJICAvKiBSZW1vdmUgdHJhaWxpbmcgc2xhc2hlcyAoZXhjZXB0IGZvciAiLyIpLiAgKi8KKysJICB3aGlsZSAobGVuID4gMSAmJiBjcFtsZW4gLSAxXSA9PSAnLycpCisrCSAgICAtLWxlbjsKKysKKysJICAvKiBOb3cgYWRkIG9uZSBpZiB0aGVyZSBpcyBub25lIHNvIGZhci4gICovCisrCSAgaWYgKGxlbiA+IDAgJiYgY3BbbGVuIC0gMV0gIT0gJy8nKQorKwkgICAgY3BbbGVuKytdID0gJy8nOworIAl9CisgCistICAgICAgLyogUmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXMgKGV4Y2VwdCBmb3IgIi8iKS4gICovCistICAgICAgd2hpbGUgKGxlbiA+IDEgJiYgY3BbbGVuIC0gMV0gPT0gJy8nKQorLQktLWxlbjsKKy0KKy0gICAgICAvKiBOb3cgYWRkIG9uZSBpZiB0aGVyZSBpcyBub25lIHNvIGZhci4gICovCistICAgICAgaWYgKGxlbiA+IDAgJiYgY3BbbGVuIC0gMV0gIT0gJy8nKQorLQljcFtsZW4rK10gPSAnLyc7CistCisgICAgICAgLyogTWFrZSBzdXJlIHdlIGRvbid0IHVzZSB1bnRydXN0ZWQgZGlyZWN0b3JpZXMgaWYgd2UgcnVuIFNVSUQuICAqLworICAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChjaGVja190cnVzdGVkKSAmJiAhaXNfdHJ1c3RlZF9wYXRoIChjcCwgbGVuKSkKKyAJeworQEAgLTYyMSw2ICs2MzAsMTQgQEAgZGVjb21wb3NlX3JwYXRoIChzdHJ1Y3Qgcl9zZWFyY2hfcGF0aF9zdAorICAgICAgbmVjZXNzYXJ5LiAgKi8KKyAgIGZyZWUgKGNvcHkpOworIAorKyAgLyogVGhlcmUgaXMgbm8gcGF0aCBhZnRlciBleHBhbnNpb24uICAqLworKyAgaWYgKHJlc3VsdFswXSA9PSBOVUxMKQorKyAgICB7CisrICAgICAgZnJlZSAocmVzdWx0KTsKKysgICAgICBzcHMtPmRpcnMgPSAoc3RydWN0IHJfc2VhcmNoX3BhdGhfZWxlbSAqKikgLTE7CisrICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisgICBzcHMtPmRpcnMgPSByZXN1bHQ7CisgICAvKiBUaGUgY2FsbGVyIHdpbGwgY2hhbmdlIHRoaXMgdmFsdWUgaWYgd2UgaGF2ZW4ndCB1c2VkIGEgcmVhbCBtYWxsb2MuICAqLworICAgc3BzLT5tYWxsb2NlZCA9IDE7CitJbmRleDogZ2l0L0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL0NoYW5nZUxvZworKysrIGdpdC9DaGFuZ2VMb2cKK0BAIC0xLDMgKzEsMTIgQEAKKysyMDE3LTEyLTMwICBBdXJlbGllbiBKYXJubyAgPGF1cmVsaWVuQGF1cmVsMzIubmV0PgorKyAgICAgICAgICAgRG1pdHJ5IFYuIExldmluICA8bGR2QGFsdGxpbnV4Lm9yZz4KKysKKysgICAgICAgW0JaICMyMjYyNV0KKysgICAgICAgKiBlbGYvZGwtbG9hZC5jIChmaWxsaW5fcnBhdGgpOiBDaGVjayBmb3IgZW1wdHkgdG9rZW5zIGJlZm9yZSBkeW5hbWljCisrICAgICAgIHN0cmluZyB0b2tlbiBleHBhbnNpb24uIENoZWNrIGZvciBOVUxMIHBvaW50ZXIgb3IgZW1wdHkgc3RyaW5nIHBvc3NpYmx5CisrICAgICAgIHJldHVybmVkIGJ5IGV4cGFuZF9keW5hbWljX3N0cmluZ190b2tlbi4KKysgICAgICAgKGRlY29tcG9zZV9ycGF0aCk6IENoZWNrIGZvciBlbXB0eSBwYXRoIGFmdGVyIGR5bmFtaWMgc3RyaW5nCisrICAgICAgIHRva2VuIGV4cGFuc2lvbi4KKyAKKyAyMDE3LTEwLTIwICBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjL0NWRS0yMDE3LTE3NDI2LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjL0NWRS0yMDE3LTE3NDI2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZDFjYjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvQ1ZFLTIwMTctMTc0MjYucGF0Y2gKQEAgLTAsMCArMSw4MCBAQAorRnJvbSBkZjhjMjE5Y2I5ODdjZmU4NWM1NTBlZmE2OTNhMTM4M2ExMWUzOGFhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQXJqdW4gU2hhbmthciA8YXJqdW5AcmVkaGF0LmNvbT4KK0RhdGU6IFRodSwgMzAgTm92IDIwMTcgMTM6MzE6NDUgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IGludGVnZXIgb3ZlcmZsb3cgaW4gbWFsbG9jIHdoZW4gdGNhY2hlIGlzIGVuYWJsZWQgW0JaCisgIzIyMzc1XQorCitXaGVuIHRoZSBwZXItdGhyZWFkIGNhY2hlIGlzIGVuYWJsZWQsIF9fbGliY19tYWxsb2MgdXNlcyByZXF1ZXN0MnNpemUgKHdoaWNoCitkb2VzIG5vdCBwZXJmb3JtIGFuIG92ZXJmbG93IGNoZWNrKSB0byBjYWxjdWxhdGUgdGhlIGNodW5rIHNpemUgZnJvbSB0aGUKK3JlcXVlc3RlZCBhbGxvY2F0aW9uIHNpemUuIFRoaXMgbGVhZHMgdG8gYW4gaW50ZWdlciBvdmVyZmxvdyBjYXVzaW5nIG1hbGxvYwordG8gaW5jb3JyZWN0bHkgcmV0dXJuIHRoZSBsYXN0IHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQgYmxvY2sgd2hlbiBjYWxsZWQgd2l0aAorYSB2ZXJ5IGxhcmdlIHNpemUgYXJndW1lbnQgKGNsb3NlIHRvIFNJWkVfTUFYKS4KKworVGhpcyBjb21taXQgdXNlcyBjaGVja2VkX3JlcXVlc3Qyc2l6ZSBpbnN0ZWFkLCByZW1vdmluZyB0aGUgb3ZlcmZsb3cuCisKKyhjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IDM0Njk3Njk0ZThhOTNiMzI1YjE4ZjI1ZjdkY2RlZDU1ZDZiYWVhZjYpCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK0NWRTogQ1ZFLTIwMTctMTc0MjYKK1NpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgorCistLS0KKyBDaGFuZ2VMb2cgICAgICAgfCA3ICsrKysrKysKKyBORVdTICAgICAgICAgICAgfCA2ICsrKysrKworIG1hbGxvYy9tYWxsb2MuYyB8IDMgKystCisgMyBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBnaXQvTkVXUworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL05FV1MKKysrKyBnaXQvTkVXUworQEAgLTQsNiArNCw4IEBAIFNlZSB0aGUgZW5kIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuCisgCisgUGxlYXNlIHNlbmQgR05VIEMgbGlicmFyeSBidWcgcmVwb3J0cyB2aWEgPGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS8+CisgdXNpbmcgYGdsaWJjJyBpbiB0aGUgInByb2R1Y3QiIGZpZWxkLgorKworK1syMjM3NV0gbWFsbG9jIHJldHVybnMgcG9pbnRlciBmcm9tIHRjYWNoZSBpbnN0ZWFkIG9mIE5VTEwgKENWRS0yMDE3LTE3NDI2KQorIAwKKyBWZXJzaW9uIDIuMjYKKyAKK0BAIC0yMTUsNiArMjE3LDExIEBAIFNlY3VyaXR5IHJlbGF0ZWQgY2hhbmdlczoKKyAgIGZvciBBVF9TRUNVUkUgb3IgU1VJRCBiaW5hcmllcyBjb3VsZCBiZSB1c2VkIHRvIGxvYWQgbGlicmFyaWVzIGZyb20gdGhlCisgICBjdXJyZW50IGRpcmVjdG9yeS4KKyAKKysgIENWRS0yMDE3LTE3NDI2OiBUaGUgbWFsbG9jIGZ1bmN0aW9uLCB3aGVuIGNhbGxlZCB3aXRoIGFuIG9iamVjdCBzaXplIG5lYXIKKysgIHRoZSB2YWx1ZSBTSVpFX01BWCwgd291bGQgcmV0dXJuIGEgcG9pbnRlciB0byBhIGJ1ZmZlciB3aGljaCBpcyB0b28gc21hbGwsCisrICBpbnN0ZWFkIG9mIE5VTEwuICBUaGlzIHdhcyBhIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCB3aXRoIHRoZSBuZXcgbWFsbG9jCisrICB0aHJlYWQgY2FjaGUgaW4gZ2xpYmMgMi4yNi4gIFJlcG9ydGVkIGJ5IElhaW4gQnVjbGF3LgorKworIFRoZSBmb2xsb3dpbmcgYnVncyBhcmUgcmVzb2x2ZWQgd2l0aCB0aGlzIHJlbGVhc2U6CisgCisgICBbOTg0XSBuZXR3b3JrOiBSZXNwb25kIHRvIGNoYW5nZWQgcmVzb2x2LmNvbmYgaW4gZ2V0aG9zdGJ5bmFtZQorSW5kZXg6IGdpdC9tYWxsb2MvbWFsbG9jLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9tYWxsb2MvbWFsbG9jLmMKKysrKyBnaXQvbWFsbG9jL21hbGxvYy5jCitAQCAtMzA1MCw3ICszMDUwLDggQEAgX19saWJjX21hbGxvYyAoc2l6ZV90IGJ5dGVzKQorICAgICByZXR1cm4gKCpob29rKShieXRlcywgUkVUVVJOX0FERFJFU1MgKDApKTsKKyAjaWYgVVNFX1RDQUNIRQorICAgLyogaW50X2ZyZWUgYWxzbyBjYWxscyByZXF1ZXN0MnNpemUsIGJlIGNhcmVmdWwgdG8gbm90IHBhZCB0d2ljZS4gICovCistICBzaXplX3QgdGJ5dGVzID0gcmVxdWVzdDJzaXplIChieXRlcyk7CisrICBzaXplX3QgdGJ5dGVzOworKyAgY2hlY2tlZF9yZXF1ZXN0MnNpemUgKGJ5dGVzLCB0Ynl0ZXMpOworICAgc2l6ZV90IHRjX2lkeCA9IGNzaXplMnRpZHggKHRieXRlcyk7CisgCisgICBNQVlCRV9JTklUX1RDQUNIRSAoKTsKK0luZGV4OiBnaXQvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvQ2hhbmdlTG9nCisrKysgZ2l0L0NoYW5nZUxvZworQEAgLTEsMyArMSwxMCBAQAorKzIwMTctMTEtMzAgIEFyanVuIFNoYW5rYXIgIDxhcmp1bkByZWRoYXQuY29tPgorKworKyAgICAgICBbQlogIzIyMzc1XQorKyAgICAgICBDVkUtMjAxNy0xNzQyNgorKyAgICAgICAqIG1hbGxvYy9tYWxsb2MuYyAoX19saWJjX21hbGxvYyk6IFVzZSBjaGVja2VkX3JlcXVlc3Qyc2l6ZQorKyAgICAgICBpbnN0ZWFkIG9mIHJlcXVlc3Qyc2l6ZS4KKysKKyAyMDE3LTEyLTMwICBBdXJlbGllbiBKYXJubyAgPGF1cmVsaWVuQGF1cmVsMzIubmV0PgorICAgICAgICAgICAgRG1pdHJ5IFYuIExldmluICA8bGR2QGFsdGxpbnV4Lm9yZz4KKyAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliY18yLjI1LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjXzIuMjUuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMWVjMGMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjXzIuMjUuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotcmVxdWlyZSBnbGliYy5pbmMKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRVM7bWQ1PWU5YTU1OGUyNDNiMzZkMzIwOWYzODBkZWIzOTRiMjEzIFwKLSAgICAgIGZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCi0gICAgICBmaWxlOi8vcG9zaXgvcnhzcGVuY2VyL0NPUFlSSUdIVDttZDU9ZGM1NDg1YmIzOTRhMTNiMjMzMmVjMWM3ODVmNWQ4M2EgXAotICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKLQotREVQRU5EUyArPSAiZ3BlcmYtbmF0aXZlIgotCi1TUkNSRVYgPz0gImRiMDI0MmUzMDIzNDM2NzU3YmJjN2M0ODhhNzc5ZTZlMzM0M2RiMDQiCi0KLVNSQ0JSQU5DSCA/PSAicmVsZWFzZS8ke1BWfS9tYXN0ZXIiCi0KLUdMSUJDX0dJVF9VUkkgPz0gImdpdDovL3NvdXJjZXdhcmUub3JnL2dpdC9nbGliYy5naXQiCi1VUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICIoP1A8cHZlcj5cZCtcLlxkKyhcLlxkKykqKSIKLQotU1JDX1VSSSA9ICIke0dMSUJDX0dJVF9VUkl9O2JyYW5jaD0ke1NSQ0JSQU5DSH07bmFtZT1nbGliYyBcCi0gICAgICAgICAgIGZpbGU6Ly9ldGMvbGQuc28uY29uZiBcCi0gICAgICAgICAgIGZpbGU6Ly9nZW5lcmF0ZS1zdXBwb3J0ZWQubWsgXAotICAgICAgICAgICBcCi0gICAgICAgICAgICR7TkFUSVZFU0RLRklYRVN9IFwKLSAgICAgICAgICAgZmlsZTovLzAwMDUtZnNsLWU1MDAtZTU1MDAtZTY1MDAtNjAzZS1mc3FydC1pbXBsZW1lbnRhdGlvbi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA2LXJlYWRsaWItQWRkLU9FQ09SRV9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUy10by1rbm93bi0ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwNy1wcGMtc3FydC1GaXgtdW5kZWZpbmVkLXJlZmVyZW5jZS10by1fX3NxcnRfZmluaXRlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDgtX19pZWVlNzU0X3NxcnQtZi1hcmUtbm93LWlubGluZS1mdW5jdGlvbnMtYW5kLWNhbGwtby5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA5LVF1b3RlLWZyb20tYnVnLTE0NDMtd2hpY2gtZXhwbGFpbnMtd2hhdC10aGUtcGF0Y2gtZG8ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxMC1lZ2xpYmMtcnVuLWxpYm0tZXJyLXRhYi5wbC13aXRoLXNwZWNpZmljLWRpcnMtaW4tUy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDExLV9faWVlZTc1NF9zcXJ0LWYtYXJlLW5vdy1pbmxpbmUtZnVuY3Rpb25zLWFuZC1jYWxsLW8ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxMi1NYWtlLWxkLXZlcnNpb24tb3V0cHV0LW1hdGNoaW5nLWdyb2stZ29sZC1zLW91dHB1dC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDEzLXN5c2RlcHMtZ251LWNvbmZpZ3VyZS5hYy1oYW5kbGUtY29ycmVjdGx5LWxpYmNfY3Zfcm8ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxNC1BZGQtdW51c2VkLWF0dHJpYnV0ZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDE1LXllcy13aXRoaW4tdGhlLXBhdGgtc2V0cy13cm9uZy1jb25maWctdmFyaWFibGVzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTYtdGltZXpvbmUtcmUtd3JpdHRlbi10enNlbGVjdC1hcy1wb3NpeC1zaC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDE3LVJlbW92ZS1iYXNoLWRlcGVuZGVuY3ktZm9yLW5zY2QtaW5pdC1zY3JpcHQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxOC1lZ2xpYmMtQ3Jvc3MtYnVpbGRpbmctYW5kLXRlc3RpbmctaW5zdHJ1Y3Rpb25zLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTktZWdsaWJjLUhlbHAtYm9vdHN0cmFwLWNyb3NzLXRvb2xjaGFpbi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDIwLWVnbGliYy1jaGVycnktcGlja2VkLWZyb20ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAyMS1lZ2xpYmMtQ2xlYXItY2FjaGUtbGluZXMtb24tcHBjOHh4LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjItZWdsaWJjLVJlc29sdmUtX19mcHNjcl92YWx1ZXMtb24tU0g0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjMtZWdsaWJjLUluc3RhbGwtUElDLWFyY2hpdmVzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjQtZWdsaWJjLUZvcndhcmQtcG9ydC1jcm9zcy1sb2NhbGUtZ2VuZXJhdGlvbi1zdXBwb3J0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjUtRGVmaW5lLURVTU1ZX0xPQ0FMRV9ULWlmLW5vdC1kZWZpbmVkLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjYtZWxmLWRsLWRlcHMuYy1NYWtlLV9kbF9idWlsZF9sb2NhbF9zY29wZS1icmVhZHRoLWZpci5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDI3LWxvY2FsZS1maXgtaGFyZC1jb2RlZC1yZWZlcmVuY2UtdG8tZ2NjLUUucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAyOC1SZXdvcmstZm5vLW9taXQtZnJhbWUtcG9pbnRlci1zdXBwb3J0LW9uLWkzODYucGF0Y2ggXAotIgotCi1OQVRJVkVTREtGSVhFUyA/PSAiIgotTkFUSVZFU0RLRklYRVNfY2xhc3MtbmF0aXZlc2RrID0gIlwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtbmF0aXZlc2RrLWdsaWJjLUxvb2stZm9yLWhvc3Qtc3lzdGVtLWxkLnNvLmNhY2hlLWFzLS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAyLW5hdGl2ZXNkay1nbGliYy1GaXgtYnVmZmVyLW92ZXJydW4td2l0aC1hLXJlbG9jYXRlZC0ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMy1uYXRpdmVzZGstZ2xpYmMtUmFpc2UtdGhlLXNpemUtb2YtYXJyYXlzLWNvbnRhaW5pbmctLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDQtbmF0aXZlc2RrLWdsaWJjLUFsbG93LTY0LWJpdC1hdG9taWNzLWZvci14ODYucGF0Y2ggXAotIgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotQiA9ICIke1dPUktESVJ9L2J1aWxkLSR7VEFSR0VUX1NZU30iCi0KLVBBQ0tBR0VTX0RZTkFNSUMgPSAiIgotCi0jIHRoZSAtaXN5c3RlbSBpbiBiaXRiYWtlLmNvbmYgc2NyZXdzIHVwIGdsaWJjIGRvX3N0YWdlCi1CVUlMRF9DUFBGTEFHUyA9ICItSSR7U1RBR0lOR19JTkNESVJfTkFUSVZFfSIKLVRBUkdFVF9DUFBGTEFHUyA9ICItSSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7aW5jbHVkZWRpcn0iCi0KLUdMSUJDX0JST0tFTl9MT0NBTEVTID0gIiIKLSMKLSMgV2Ugd2lsbCBza2lwIHBhcnNpbmcgZ2xpYmMgd2hlbiB0YXJnZXQgc3lzdGVtIEMgbGlicmFyeSBzZWxlY3Rpb24gaXMgbm90IGdsaWJjCi0jIHRoaXMgaGVscHMgaW4gZWFzaW5nIG91dCBwYXJzaW5nIGZvciBub24tZ2xpYmMgc3lzdGVtIGxpYnJhcmllcwotIwotQ09NUEFUSUJMRV9IT1NUX2xpYmMtbXVzbF9jbGFzcy10YXJnZXQgPSAibnVsbCIKLUNPTVBBVElCTEVfSE9TVF9saWJjLXVjbGliY19jbGFzcy10YXJnZXQgPSAibnVsbCIKLQotRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLWtlcm5lbD0ke09MREVTVF9LRVJORUx9IFwKLSAgICAgICAgICAgICAgICAtLXdpdGhvdXQtY3ZzIC0tZGlzYWJsZS1wcm9maWxlIFwKLSAgICAgICAgICAgICAgICAtLWRpc2FibGUtZGVidWcgLS13aXRob3V0LWdkIFwKLSAgICAgICAgICAgICAgICAtLWVuYWJsZS1jbG9jYWxlPWdudSBcCi0gICAgICAgICAgICAgICAgLS1lbmFibGUtYWRkLW9ucyBcCi0gICAgICAgICAgICAgICAgLS13aXRoLWhlYWRlcnM9JHtTVEFHSU5HX0lOQ0RJUn0gXAotICAgICAgICAgICAgICAgIC0td2l0aG91dC1zZWxpbnV4IFwKLSAgICAgICAgICAgICAgICAtLWVuYWJsZS1vYnNvbGV0ZS1ycGMgXAotICAgICAgICAgICAgICAgICR7R0xJQkNfRVhUUkFfT0VDT05GfSIKLQotRVhUUkFfT0VDT05GICs9ICIke0BnZXRfbGliY19mcHVfc2V0dGluZyhiYiwgZCl9IgotRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtaW5ldC1hbmwnLCAnLS1lbmFibGUtbnNjZCcsICctLWRpc2FibGUtbnNjZCcsIGQpfSIKLQotCi1kb19wYXRjaF9hcHBlbmQoKSB7Ci0gICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb19maXhfcmVhZGxpYl9jJywgZCkKLX0KLQotZG9fZml4X3JlYWRsaWJfYyAoKSB7Ci0Jc2VkIC1pIC1lICdzI09FQ09SRV9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUyMke0VHTElCQ19LTk9XTl9JTlRFUlBSRVRFUl9OQU1FU30jJyAke1N9L2VsZi9yZWFkbGliLmMKLX0KLQotZG9fY29uZmlndXJlICgpIHsKLSMgb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiB0byBhdm9pZCB0aGUgYXV0b2NvbmYvYXV0b21ha2UvYWNsb2NhbC9hdXRvaGVhZGVyCi0jIGNhbGxzIGZvciBub3cKLSMgZG9uJ3QgcGFzcyBDUFBGTEFHUyBpbnRvIGNvbmZpZ3VyZSwgc2luY2UgaXQgdXBzZXRzIHRoZSBrZXJuZWwtaGVhZGVycwotIyB2ZXJzaW9uIGNoZWNrIGFuZCBkb2Vzbid0IHJlYWxseSBoZWxwIHdpdGggYW55dGhpbmcKLSAgICAgICAgKGNkICR7U30gJiYgZ251LWNvbmZpZ2l6ZSkgfHwgZGllICJmYWlsdXJlIGluIHJ1bm5pbmcgZ251LWNvbmZpZ2l6ZSIKLSAgICAgICAgZmluZCAke1N9IC1uYW1lICJjb25maWd1cmUiIHwgeGFyZ3MgdG91Y2gKLSAgICAgICAgQ1BQRkxBR1M9IiIgb2VfcnVuY29uZgotfQotCi1ycGNzdmMgPSAiYm9vdHBhcmFtX3Byb3QueCBubG1fcHJvdC54IHJzdGF0LnggXAotCSAgeXBwYXNzd2QueCBrbG1fcHJvdC54IHJleC54IHNtX2ludGVyLnggbW91bnQueCBcCi0JICBydXNlcnMueCBzcHJheS54IG5mc19wcm90LnggcnF1b3RhLngga2V5X3Byb3QueCIKLQotZG9fY29tcGlsZSAoKSB7Ci0JIyAtV2wsLXJwYXRoLWxpbmsgPHN0YWdpbmc+L2xpYiBpbiBMREZMQUdTIGNhbiBjYXVzZSBicmVha2FnZSBpZiBhbm90aGVyIGdsaWJjIGlzIGluIHN0YWdpbmcKLQl1bnNldCBMREZMQUdTCi0JYmFzZV9kb19jb21waWxlCi0JKAotCQljZCAke1N9L3N1bnJwYy9ycGNzdmMKLQkJZm9yIHIgaW4gJHtycGNzdmN9OyBkbwotCQkJaD1gZWNobyAkcnxzZWQgLWUncyxcLngkLC5oLCdgCi0JCQlybSAtZiAkaAotCQkJJHtCfS9zdW5ycGMvY3Jvc3MtcnBjZ2VuIC1oICRyIC1vICRoIHx8IGJid2FybiAiJHtQTn06IHVuYWJsZSB0byBnZW5lcmF0ZSBoZWFkZXIgZm9yICRyIgotCQlkb25lCi0JKQotCWVjaG8gIkFkanVzdCBsZGQgc2NyaXB0IgotCWlmIFsgLW4gIiR7UlRMRExJU1R9IiBdCi0JdGhlbgotCQlwcmV2cnRsZD1gY2F0ICR7Qn0vZWxmL2xkZCB8IGdyZXAgIl5SVExETElTVD0iIHwgc2VkICdzI15SVExETElTVD0iXD9cKFteIl0qXCkiXD8kI1wxIydgCi0JCWlmIFsgIiR7cHJldnJ0bGR9IiAhPSAiJHtSVExETElTVH0iIF0KLQkJdGhlbgotCQkJc2VkIC1pICR7Qn0vZWxmL2xkZCAtZSAicyNeUlRMRExJU1Q9LipcJCNSVExETElTVD1cIiR7cHJldnJ0bGR9ICR7UlRMRExJU1R9XCIjIgotCQlmaQotCWZpCi0KLX0KLQotIyBVc2UgdGhlIGhvc3QgbG9jYWxlIGFyY2hpdmUgd2hlbiBidWlsdCBmb3IgbmF0aXZlc2RrIHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0bwotIyBzaGlwIGEgY29tcGxldGUgKDEwME1CKSBsb2NhbGUgc2V0LgotZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKLSAgICBlY2hvICJjb21wbG9jYWxlZGlyPS91c3IvbGliL2xvY2FsZSIgPj4gJHtTfS9jb25maWdwYXJtcwotfQotCi1yZXF1aXJlIGdsaWJjLXBhY2thZ2UuaW5jCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjXzIuMjYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmNfMi4yNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzBlYjk4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjXzIuMjYuYmIKQEAgLTAsMCArMSwxNTQgQEAKK3JlcXVpcmUgZ2xpYmMuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0VTO21kNT1lOWE1NThlMjQzYjM2ZDMyMDlmMzgwZGViMzk0YjIxMyBcCisgICAgICBmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgZmlsZTovL3Bvc2l4L3J4c3BlbmNlci9DT1BZUklHSFQ7bWQ1PWRjNTQ4NWJiMzk0YTEzYjIzMzJlYzFjNzg1ZjVkODNhIFwKKyAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKK0RFUEVORFMgKz0gImdwZXJmLW5hdGl2ZSBiaXNvbi1uYXRpdmUiCisKK1NSQ1JFViA/PSAiMWM5YTVjMjcwZDhiNjZmMzBkY2ZhZjFjYjJkNmNmMzlkM2UxODM2OSIKKworU1JDQlJBTkNIID89ICJyZWxlYXNlLyR7UFZ9L21hc3RlciIKKworR0xJQkNfR0lUX1VSSSA/PSAiZ2l0Oi8vc291cmNld2FyZS5vcmcvZ2l0L2dsaWJjLmdpdCIKK1VQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gIig/UDxwdmVyPlxkK1wuXGQrKFwuXGQrKSopIgorCitTUkNfVVJJID0gIiR7R0xJQkNfR0lUX1VSSX07YnJhbmNoPSR7U1JDQlJBTkNIfTtuYW1lPWdsaWJjIFwKKyAgICAgICAgICAgZmlsZTovL2V0Yy9sZC5zby5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2dlbmVyYXRlLXN1cHBvcnRlZC5tayBcCisgICAgICAgICAgIFwKKyAgICAgICAgICAgJHtOQVRJVkVTREtGSVhFU30gXAorICAgICAgICAgICBmaWxlOi8vMDAwNS1mc2wtZTUwMC1lNTUwMC1lNjUwMC02MDNlLWZzcXJ0LWltcGxlbWVudGF0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDYtcmVhZGxpYi1BZGQtT0VDT1JFX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTLXRvLWtub3duLS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA3LXBwYy1zcXJ0LUZpeC11bmRlZmluZWQtcmVmZXJlbmNlLXRvLV9fc3FydF9maW5pdGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOC1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDktUXVvdGUtZnJvbS1idWctMTQ0My13aGljaC1leHBsYWlucy13aGF0LXRoZS1wYXRjaC1kby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEwLWVnbGliYy1ydW4tbGlibS1lcnItdGFiLnBsLXdpdGgtc3BlY2lmaWMtZGlycy1pbi1TLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTEtX19pZWVlNzU0X3NxcnQtZi1hcmUtbm93LWlubGluZS1mdW5jdGlvbnMtYW5kLWNhbGwtby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEyLXN5c2RlcHMtZ251LWNvbmZpZ3VyZS5hYy1oYW5kbGUtY29ycmVjdGx5LWxpYmNfY3Zfcm8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMy1BZGQtdW51c2VkLWF0dHJpYnV0ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE0LXllcy13aXRoaW4tdGhlLXBhdGgtc2V0cy13cm9uZy1jb25maWctdmFyaWFibGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTUtdGltZXpvbmUtcmUtd3JpdHRlbi10enNlbGVjdC1hcy1wb3NpeC1zaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE2LVJlbW92ZS1iYXNoLWRlcGVuZGVuY3ktZm9yLW5zY2QtaW5pdC1zY3JpcHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNy1lZ2xpYmMtQ3Jvc3MtYnVpbGRpbmctYW5kLXRlc3RpbmctaW5zdHJ1Y3Rpb25zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTgtZWdsaWJjLUhlbHAtYm9vdHN0cmFwLWNyb3NzLXRvb2xjaGFpbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE5LWVnbGliYy1DbGVhci1jYWNoZS1saW5lcy1vbi1wcGM4eHgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMC1lZ2xpYmMtUmVzb2x2ZS1fX2Zwc2NyX3ZhbHVlcy1vbi1TSDQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMS1lZ2xpYmMtSW5zdGFsbC1QSUMtYXJjaGl2ZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMi1lZ2xpYmMtRm9yd2FyZC1wb3J0LWNyb3NzLWxvY2FsZS1nZW5lcmF0aW9uLXN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMy1EZWZpbmUtRFVNTVlfTE9DQUxFX1QtaWYtbm90LWRlZmluZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNC1lbGYtZGwtZGVwcy5jLU1ha2UtX2RsX2J1aWxkX2xvY2FsX3Njb3BlLWJyZWFkdGgtZmlyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjUtbG9jYWxlLWZpeC1oYXJkLWNvZGVkLXJlZmVyZW5jZS10by1nY2MtRS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI2LWFzc2VydC1TdXBwcmVzcy1wZWRhbnRpYy13YXJuaW5nLWNhdXNlZC1ieS1zdGF0ZW1lbnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNy1nbGliYy1yZXNldC1kbC1sb2FkLXdyaXRlLWxvY2stYWZ0ZXItZm9ya2luZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI4LUJ1Zy00NTc4LWFkZC1sZC5zby1sb2NrLXdoaWxlLWZvcmsucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTU2NzAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTU2NzEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyOS1hc3NlcnQtU3VwcG9ydC10eXBlcy13aXRob3V0LW9wZXJhdG9yLWludC1CWi0yMTk3Mi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNy0xNjk5Ny5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNy0xNzQyNi5wYXRjaCBcCisiCisKK05BVElWRVNES0ZJWEVTID89ICIiCitOQVRJVkVTREtGSVhFU19jbGFzcy1uYXRpdmVzZGsgPSAiXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1uYXRpdmVzZGstZ2xpYmMtTG9vay1mb3ItaG9zdC1zeXN0ZW0tbGQuc28uY2FjaGUtYXMtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItbmF0aXZlc2RrLWdsaWJjLUZpeC1idWZmZXItb3ZlcnJ1bi13aXRoLWEtcmVsb2NhdGVkLS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLW5hdGl2ZXNkay1nbGliYy1SYWlzZS10aGUtc2l6ZS1vZi1hcnJheXMtY29udGFpbmluZy0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC1uYXRpdmVzZGstZ2xpYmMtQWxsb3ctNjQtYml0LWF0b21pY3MtZm9yLXg4Ni5wYXRjaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCitCID0gIiR7V09SS0RJUn0vYnVpbGQtJHtUQVJHRVRfU1lTfSIKKworUEFDS0FHRVNfRFlOQU1JQyA9ICIiCisKKyMgdGhlIC1pc3lzdGVtIGluIGJpdGJha2UuY29uZiBzY3Jld3MgdXAgZ2xpYmMgZG9fc3RhZ2UKK0JVSUxEX0NQUEZMQUdTID0gIi1JJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9IgorVEFSR0VUX0NQUEZMQUdTID0gIi1JJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtpbmNsdWRlZGlyfSIKKworR0xJQkNfQlJPS0VOX0xPQ0FMRVMgPSAiIgorIworIyBXZSB3aWxsIHNraXAgcGFyc2luZyBnbGliYyB3aGVuIHRhcmdldCBzeXN0ZW0gQyBsaWJyYXJ5IHNlbGVjdGlvbiBpcyBub3QgZ2xpYmMKKyMgdGhpcyBoZWxwcyBpbiBlYXNpbmcgb3V0IHBhcnNpbmcgZm9yIG5vbi1nbGliYyBzeXN0ZW0gbGlicmFyaWVzCisjCitDT01QQVRJQkxFX0hPU1RfbGliYy1tdXNsX2NsYXNzLXRhcmdldCA9ICJudWxsIgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUta2VybmVsPSR7T0xERVNUX0tFUk5FTH0gXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1jdnMgLS1kaXNhYmxlLXByb2ZpbGUgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1kZWJ1ZyAtLXdpdGhvdXQtZ2QgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWNsb2NhbGU9Z251IFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1hZGQtb25zPWxpYmlkbiBcCisgICAgICAgICAgICAgICAgLS13aXRoLWhlYWRlcnM9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1zZWxpbnV4IFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1vYnNvbGV0ZS1ycGMgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLW9ic29sZXRlLW5zbCBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtdHVuYWJsZXMgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWJpbmQtbm93IFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1zdGFjay1wcm90ZWN0b3I9c3Ryb25nIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1zdGFja2d1YXJkLXJhbmRvbWl6YXRpb24gXAorICAgICAgICAgICAgICAgICR7R0xJQkNfRVhUUkFfT0VDT05GfSIKKworRVhUUkFfT0VDT05GICs9ICIke0BnZXRfbGliY19mcHVfc2V0dGluZyhiYiwgZCl9IgorRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtaW5ldC1hbmwnLCAnLS1lbmFibGUtbnNjZCcsICctLWRpc2FibGUtbnNjZCcsIGQpfSIKKworCitkb19wYXRjaF9hcHBlbmQoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb19maXhfcmVhZGxpYl9jJywgZCkKK30KKworZG9fZml4X3JlYWRsaWJfYyAoKSB7CisJc2VkIC1pIC1lICdzI09FQ09SRV9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUyMke0VHTElCQ19LTk9XTl9JTlRFUlBSRVRFUl9OQU1FU30jJyAke1N9L2VsZi9yZWFkbGliLmMKK30KKworZG9fY29uZmlndXJlICgpIHsKKyMgb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiB0byBhdm9pZCB0aGUgYXV0b2NvbmYvYXV0b21ha2UvYWNsb2NhbC9hdXRvaGVhZGVyCisjIGNhbGxzIGZvciBub3cKKyMgZG9uJ3QgcGFzcyBDUFBGTEFHUyBpbnRvIGNvbmZpZ3VyZSwgc2luY2UgaXQgdXBzZXRzIHRoZSBrZXJuZWwtaGVhZGVycworIyB2ZXJzaW9uIGNoZWNrIGFuZCBkb2Vzbid0IHJlYWxseSBoZWxwIHdpdGggYW55dGhpbmcKKyAgICAgICAgKGNkICR7U30gJiYgZ251LWNvbmZpZ2l6ZSkgfHwgZGllICJmYWlsdXJlIGluIHJ1bm5pbmcgZ251LWNvbmZpZ2l6ZSIKKyAgICAgICAgZmluZCAke1N9IC1uYW1lICJjb25maWd1cmUiIHwgeGFyZ3MgdG91Y2gKKyAgICAgICAgIyAicGx1cmFsLmMiIG1heSBvciBtYXkgbm90IGdldCByZWdlbmVyYXRlZCBmcm9tICJwbHVyYWwueSIgc28gd2UKKyAgICAgICAgIyB0b3VjaCAicGx1cmFsLnkiIHRvIG1ha2Ugc3VyZSBpdCBkb2VzLiAoVGhpcyBzaG91bGQgbm90IGJlIG5lZWRlZAorICAgICAgICAjIGZvciBnbGliYyB2ZXJzaW9uIDIuMjYrKQorICAgICAgICBmaW5kICR7U30vaW50bCAtbmFtZSAicGx1cmFsLnkiIHwgeGFyZ3MgdG91Y2gKKyAgICAgICAgQ1BQRkxBR1M9IiIgb2VfcnVuY29uZgorfQorCitycGNzdmMgPSAiYm9vdHBhcmFtX3Byb3QueCBubG1fcHJvdC54IHJzdGF0LnggXAorCSAgeXBwYXNzd2QueCBrbG1fcHJvdC54IHJleC54IHNtX2ludGVyLnggbW91bnQueCBcCisJICBydXNlcnMueCBzcHJheS54IG5mc19wcm90LnggcnF1b3RhLngga2V5X3Byb3QueCIKKworZG9fY29tcGlsZSAoKSB7CisJIyAtV2wsLXJwYXRoLWxpbmsgPHN0YWdpbmc+L2xpYiBpbiBMREZMQUdTIGNhbiBjYXVzZSBicmVha2FnZSBpZiBhbm90aGVyIGdsaWJjIGlzIGluIHN0YWdpbmcKKwl1bnNldCBMREZMQUdTCisJYmFzZV9kb19jb21waWxlCisJKAorCQljZCAke1N9L3N1bnJwYy9ycGNzdmMKKwkJZm9yIHIgaW4gJHtycGNzdmN9OyBkbworCQkJaD1gZWNobyAkcnxzZWQgLWUncyxcLngkLC5oLCdgCisJCQlybSAtZiAkaAorCQkJJHtCfS9zdW5ycGMvY3Jvc3MtcnBjZ2VuIC1oICRyIC1vICRoIHx8IGJid2FybiAiJHtQTn06IHVuYWJsZSB0byBnZW5lcmF0ZSBoZWFkZXIgZm9yICRyIgorCQlkb25lCisJKQorCWVjaG8gIkFkanVzdCBsZGQgc2NyaXB0IgorCWlmIFsgLW4gIiR7UlRMRExJU1R9IiBdCisJdGhlbgorCQlwcmV2cnRsZD1gY2F0ICR7Qn0vZWxmL2xkZCB8IGdyZXAgIl5SVExETElTVD0iIHwgc2VkICdzI15SVExETElTVD0iXD9cKFteIl0qXCkiXD8kI1wxIydgCisJCWlmIFsgIiR7cHJldnJ0bGR9IiAhPSAiJHtSVExETElTVH0iIF0KKwkJdGhlbgorCQkJc2VkIC1pICR7Qn0vZWxmL2xkZCAtZSAicyNeUlRMRExJU1Q9LipcJCNSVExETElTVD1cIiR7cHJldnJ0bGR9ICR7UlRMRExJU1R9XCIjIgorCQlmaQorCWZpCisKK30KKworIyBVc2UgdGhlIGhvc3QgbG9jYWxlIGFyY2hpdmUgd2hlbiBidWlsdCBmb3IgbmF0aXZlc2RrIHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0bworIyBzaGlwIGEgY29tcGxldGUgKDEwME1CKSBsb2NhbGUgc2V0LgorZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKyAgICBlY2hvICJjb21wbG9jYWxlZGlyPS91c3IvbGliL2xvY2FsZSIgPj4gJHtTfS9jb25maWdwYXJtcworfQorCityZXF1aXJlIGdsaWJjLXBhY2thZ2UuaW5jCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2ZpbGVzL2RlZm4yLWMtbWFuLWRvbi10LXJlbHktb24tZHBrZy1hcmNoaXRlY3R1cmUtdG8tc2V0LWEucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vZmlsZXMvZGVmbjItYy1tYW4tZG9uLXQtcmVseS1vbi1kcGtnLWFyY2hpdGVjdHVyZS10by1zZXQtYS5wYXRjaAppbmRleCA4YzRkOTUzLi5hMjRiOGNkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vZmlsZXMvZGVmbjItYy1tYW4tZG9uLXQtcmVseS1vbi1kcGtnLWFyY2hpdGVjdHVyZS10by1zZXQtYS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vZmlsZXMvZGVmbjItYy1tYW4tZG9uLXQtcmVseS1vbi1kcGtnLWFyY2hpdGVjdHVyZS10by1zZXQtYS5wYXRjaApAQCAtMTIsNiArMTIsNyBAQAogbGlrZSB0aGUgbG9vcGJhY2sgZGV2aWNlIG5vdCBiZWluZyBjb25maWd1cmVkL2VuYWJsZWQuCiAKIFNpZ25lZC1vZmYtYnk6IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICBkZWZuMmMucGwgICB8IDYgKysrLS0tCiAgZGVmbjJtYW4ucGwgfCA2ICsrKy0tLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9idWlsZC1hcHBsaWFuY2UtaW1hZ2VfMTUuMC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9idWlsZC1hcHBsaWFuY2UtaW1hZ2VfMTUuMC4wLmJiCmluZGV4IDA0NTc4MWMuLmJkNDQxYWUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvYnVpbGQtYXBwbGlhbmNlLWltYWdlXzE1LjAuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2J1aWxkLWFwcGxpYW5jZS1pbWFnZV8xNS4wLjAuYmIKQEAgLTMsOCArMyw3IEBACiBIT01FUEFHRSA9ICJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jdW1lbnRhdGlvbi9idWlsZC1hcHBsaWFuY2UiCiAKIExJQ0VOU0UgPSAiTUlUIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKIAogSU1BR0VfSU5TVEFMTCA9ICJwYWNrYWdlZ3JvdXAtY29yZS1ib290IHBhY2thZ2Vncm91cC1jb3JlLXNzaC1vcGVuc3NoIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZCBcCiAgICAgICAgICAgICAgICAgIGtlcm5lbC1kZXYga2VybmVsLWRldnNyYyBjb25ubWFuIGNvbm5tYW4tcGx1Z2luLWV0aGVybmV0IGRoY3AtY2xpZW50IFwKQEAgLTE5LDEyICsxOCwxMiBAQAogQVBQRU5EICs9ICJyb290ZnN0eXBlPWV4dDQgcXVpZXQiCiAKIERFUEVORFMgPSAiemlwLW5hdGl2ZSBweXRob24zLXBpcC1uYXRpdmUiCi1JTUFHRV9GU1RZUEVTID0gInZtZGsiCitJTUFHRV9GU1RZUEVTID0gIndpYy52bWRrIgogCiBpbmhlcml0IGNvcmUtaW1hZ2UgbW9kdWxlLWJhc2Ugc2V0dXB0b29sczMKIAotU1JDUkVWID89ICJiODU5MjcyYWQ0MDUzMTg1ZDQ5ODBjYWMwNTQ4MWI0MzBlMDUzNDVmIgotU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5O2JyYW5jaD1weXJvIFwKK1NSQ1JFViA/PSAiYTk1ODg2NDZmY2VjMTdlNTMxOTllMWVhN2U3YjhkY2NmMTQwODE3ZSIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reTticmFuY2g9cm9ja28gXAogICAgICAgICAgICBmaWxlOi8vWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZteCBcCiAgICAgICAgICAgIGZpbGU6Ly9Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14ZiBcCiAgICAgICAgICAgIGZpbGU6Ly9SRUFETUVfVmlydHVhbEJveF9HdWVzdF9BZGRpdGlvbnMudHh0IFwKQEAgLTEwMSw3ICsxMDAsMTEgQEAKIAlleHBvcnQgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9CiAJZXhwb3J0IEhPTUU9JHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlcgogCW1rZGlyIC1wICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvLmNhY2hlL3BpcAotCXBpcDMgaW5zdGFsbCAtLXVzZXIgLUkgLVUgLXYgLXIgJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci9wb2t5L2JpdGJha2UvdG9hc3Rlci1yZXF1aXJlbWVudHMudHh0CisJcGlwM19pbnN0YWxsX3BhcmFtcz0iLS11c2VyIC1JIC1VIC12IC1yICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcG9reS9iaXRiYWtlL3RvYXN0ZXItcmVxdWlyZW1lbnRzLnR4dCIKKwlpZiBbIC1uICIke2h0dHBfcHJveHl9IiBdOyB0aGVuCisJICAgcGlwM19pbnN0YWxsX3BhcmFtcz0iJHtwaXAzX2luc3RhbGxfcGFyYW1zfSAtLXByb3h5ICR7aHR0cF9wcm94eX0iCisJZmkKKwlwaXAzIGluc3RhbGwgJHtwaXAzX2luc3RhbGxfcGFyYW1zfQogCWNob3duIC1SIGJ1aWxkZXIuYnVpbGRlciAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyLy5sb2NhbAogCWNob3duIC1SIGJ1aWxkZXIuYnVpbGRlciAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyLy5jYWNoZQogfQpAQCAtMTIwLDcgKzEyMyw3IEBACiAJY2QgJHtXT1JLRElSfQogCW1rZGlyIC1wIFlvY3RvX0J1aWxkX0FwcGxpYW5jZQogCWNwICoudm14KiBZb2N0b19CdWlsZF9BcHBsaWFuY2UKLQlsbiAtc2YgJHtJTUdERVBMT1lESVJ9LyR7SU1BR0VfTkFNRX0udm1kayBZb2N0b19CdWlsZF9BcHBsaWFuY2UvWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZtZGsKKwlsbiAtc2YgJHtJTUdERVBMT1lESVJ9LyR7SU1BR0VfTkFNRX0ke0lNQUdFX05BTUVfU1VGRklYfS53aWMudm1kayBZb2N0b19CdWlsZF9BcHBsaWFuY2UvWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZtZGsKIAl6aXAgLXIgJHtJTUdERVBMT1lESVJ9L1lvY3RvX0J1aWxkX0FwcGxpYW5jZS0ke0RBVEVUSU1FfS56aXAgWW9jdG9fQnVpbGRfQXBwbGlhbmNlCiAJbG4gLXNmIFlvY3RvX0J1aWxkX0FwcGxpYW5jZS0ke0RBVEVUSU1FfS56aXAgJHtJTUdERVBMT1lESVJ9L1lvY3RvX0J1aWxkX0FwcGxpYW5jZS56aXAKIH0KQEAgLTEzMCw0ICsxMzMsNCBAQAogICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnY3JlYXRlX2J1bmRsZV9maWxlcycsIGQpCiB9CiAKLWFkZHRhc2sgYnVuZGxlX2ZpbGVzIGFmdGVyIGRvX3ZtaW1nIGJlZm9yZSBkb19pbWFnZV9jb21wbGV0ZQorYWRkdGFzayBidW5kbGVfZmlsZXMgYWZ0ZXIgZG9faW1hZ2Vfd2ljIGJlZm9yZSBkb19pbWFnZV9jb21wbGV0ZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzLmJiCmluZGV4IDU3OTRhMjUuLmM0NDZlODcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMuYmIKQEAgLTgsNyArOCw3IEBACiAjIERvIG5vdCBwb2xsdXRlIHRoZSBpbml0cmQgaW1hZ2Ugd2l0aCByb290ZnMgZmVhdHVyZXMKIElNQUdFX0ZFQVRVUkVTID0gIiIKIAotZXhwb3J0IElNQUdFX0JBU0VOQU1FID0gImNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMiCitleHBvcnQgSU1BR0VfQkFTRU5BTUUgPSAiJHtNTFBSRUZJWH1jb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzIgogSU1BR0VfTElOR1VBUyA9ICIiCiAKIExJQ0VOU0UgPSAiTUlUIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLXRpbnktaW5pdHJhbWZzLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLXRpbnktaW5pdHJhbWZzLmJiCmluZGV4IDE4NDcyN2QuLjE2OTk1ZTYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS10aW55LWluaXRyYW1mcy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtdGlueS1pbml0cmFtZnMuYmIKQEAgLTEsMTAgKzEsOSBAQAogIyBTaW1wbGUgaW5pdHJhbWZzIGltYWdlIGFydGlmYWN0IGdlbmVyYXRpb24gZm9yIHRpbnkgaW1hZ2VzLgogREVTQ1JJUFRJT04gPSAiVGlueSBpbWFnZSBjYXBhYmxlIG9mIGJvb3RpbmcgYSBkZXZpY2UuIFRoZSBrZXJuZWwgaW5jbHVkZXMgXAogdGhlIE1pbmltYWwgUkFNLWJhc2VkIEluaXRpYWwgUm9vdCBGaWxlc3lzdGVtIChpbml0cmFtZnMpLCB3aGljaCBmaW5kcyB0aGUgXAotZmlyc3QgJ2luaXQnIHByb2dyYW0gbW9yZSBlZmZpY2llbnRseS4gIGNvcmUtaW1hZ2UtdGlueS1pbml0cmFtZnMgZG9lc24ndCBcCitmaXJzdCAnaW5pdCcgcHJvZ3JhbSBtb3JlIGVmZmljaWVudGx5LiBjb3JlLWltYWdlLXRpbnktaW5pdHJhbWZzIGRvZXNuJ3QgXAogYWN0dWFsbHkgZ2VuZXJhdGUgYW4gaW1hZ2UgYnV0IHJhdGhlciBnZW5lcmF0ZXMgYm9vdCBhbmQgcm9vdGZzIGFydGlmYWN0cyBcCi1pbnRvIGEgY29tbW9uIGxvY2F0aW9uIHRoYXQgY2FuIHN1YnNlcXVlbnRseSBiZSBwaWNrZWQgdXAgYnkgZXh0ZXJuYWwgaW1hZ2UgXAotZ2VuZXJhdGlvbiB0b29scyBzdWNoIGFzIHdpYy4iCit0aGF0IGNhbiBzdWJzZXF1ZW50bHkgYmUgcGlja2VkIHVwIGJ5IGV4dGVybmFsIGltYWdlIGdlbmVyYXRpb24gdG9vbHMgc3VjaCBhcyB3aWMuIgogCiBQQUNLQUdFX0lOU1RBTEwgPSAiaW5pdHJhbWZzLWxpdmUtYm9vdCBwYWNrYWdlZ3JvdXAtY29yZS1ib290IGRyb3BiZWFyICR7VklSVFVBTC1SVU5USU1FX2Jhc2UtdXRpbHN9IHVkZXYgYmFzZS1wYXNzd2QgJHtST09URlNfQk9PVFNUUkFQX0lOU1RBTEx9IgogCkBAIC0xNyw3ICsxNiw3IEBACiBMSUNFTlNFID0gIk1JVCIKIAogIyBkb24ndCBhY3R1YWxseSBnZW5lcmF0ZSBhbiBpbWFnZSwganVzdCB0aGUgYXJ0aWZhY3RzIG5lZWRlZCBmb3Igb25lCi1JTUFHRV9GU1RZUEVTID0gIiR7SU5JVFJBTUZTX0ZTVFlQRVN9IHdpYyIKK0lNQUdFX0ZTVFlQRVMgPSAiJHtJTklUUkFNRlNfRlNUWVBFU30iCiAKIGluaGVyaXQgY29yZS1pbWFnZQogCkBAIC00MCwzICszOSw1IEBACiB9CiAKIElNQUdFX1BSRVBST0NFU1NfQ09NTUFORCArPSAidGlueWluaXRyZDsiCisKK1FCX0tFUk5FTF9DTURMSU5FX0FQUEVORCArPSAiZGVidWdzaGVsbD0zIGluaXQ9L2Jpbi9idXN5Ym94IHNoIGluaXQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwtZWZpLnNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1pbnN0YWxsLWVmaS5zaAppbmRleCA1YWQzYTYwLi43MDY0MThmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwtZWZpLnNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC1lZmkuc2gKQEAgLTE4Niw2ICsxODYsMTMgQEAKIAogcGFydGVkICR7ZGV2aWNlfSBwcmludAogCitlY2hvICJXYWl0aW5nIGZvciBkZXZpY2Ugbm9kZXMuLi4iCitDPTAKK3doaWxlIFsgJEMgLW5lIDMgXSAmJiBbICEgLWUgJGJvb3RmcyAgLW8gISAtZSAkcm9vdGZzIC1vICEgLWUgJHN3YXAgXTsgZG8KKyAgICBDPSQoKCBDICsgMSApKQorICAgIHNsZWVwIDEKK2RvbmUKKwogZWNobyAiRm9ybWF0dGluZyAkYm9vdGZzIHRvIHZmYXQuLi4iCiBta2ZzLnZmYXQgJGJvb3RmcwogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwuc2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwuc2gKaW5kZXggNTcyNjEzZS4uZGFkZTA1OSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1pbnN0YWxsLnNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC5zaApAQCAtMTMyLDcgKzEzMiw3IEBACiAKIGRpc2tfc2l6ZT0kKHBhcnRlZCAke2RldmljZX0gdW5pdCBtYiBwcmludCB8IGdyZXAgJ15EaXNrIC4qOiAuKk1CJyB8IGN1dCAtZCIgIiAtZiAzIHwgc2VkIC1lICJzL01CLy8iKQogCi1ncnViX3ZlcnNpb249JChncnViLWluc3RhbGwgLXZ8c2VkICdzLy4qIFwoWzAtOV1cKS4qL1wxLycpCitncnViX3ZlcnNpb249JChncnViLWluc3RhbGwgLVZ8c2VkICdzLy4qIFwoWzAtOV1cKS4qL1wxLycpCiAKIGlmIFsgJGdydWJfdmVyc2lvbiAtZXEgMCBdIDsgdGhlbgogICAgIGJpb3NfYm9vdF9zaXplPTAKQEAgLTIxMSw2ICsyMTEsMTMgQEAKIAogcGFydGVkICR7ZGV2aWNlfSBwcmludAogCitlY2hvICJXYWl0aW5nIGZvciBkZXZpY2Ugbm9kZXMuLi4iCitDPTAKK3doaWxlIFsgJEMgLW5lIDMgXSAmJiBbICEgLWUgJGJvb3RmcyAgLW8gISAtZSAkcm9vdGZzIC1vICEgLWUgJHN3YXAgXTsgZG8KKyAgICBDPSQoKCBDICsgMSApKQorICAgIHNsZWVwIDEKK2RvbmUKKwogZWNobyAiRm9ybWF0dGluZyAkYm9vdGZzIHRvIGV4dDMuLi4iCiBta2ZzLmV4dDMgJGJvb3RmcwogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWxpdmUuc2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWxpdmUuc2gKaW5kZXggNDQxYjQxYy4uNDZjYWI2YyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1saXZlLnNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtbGl2ZS5zaApAQCAtODQsNiArODQsMTAgQEAKICAgICAjIGRldmljZSBub2RlIGNyZWF0aW9uIGV2ZW50cyB3ZXJlIGhhbmRsZWQsIHRvIGF2b2lkIHVuZXhwZWN0ZWQgYmVoYXZpb3IKICAgICBraWxsYWxsIC05ICIke19VREVWX0RBRU1PTiMjKi99IiAyPi9kZXYvbnVsbAogCisgICAgIyBEb24ndCBydW4gc3lzdGVtZC11cGRhdGUtZG9uZSBvbiBzeXN0ZW1kLWJhc2VkIGxpdmUgc3lzdGVtcworICAgICMgYmVjYXVzZSBpdCB0cmlnZ2VycyBhIHNsb3cgcmVidWlsZCBvZiBsZGNvbmZpZyBjYWNoZXMuCisgICAgdG91Y2ggJHtST09UX01PVU5UfS9ldGMvLnVwZGF0ZWQgJHtST09UX01PVU5UfS92YXIvLnVwZGF0ZWQKKwogICAgICMgQWxsb3cgZm9yIGlkZW50aWZpY2F0aW9uIG9mIHRoZSByZWFsIHJvb3QgZXZlbiBhZnRlciBib290CiAgICAgbWtkaXIgLXAgICR7Uk9PVF9NT1VOVH0vbWVkaWEvcmVhbHJvb3QKICAgICBtb3VudCAtbiAtLW1vdmUgIi9ydW4vbWVkaWEvJHtST09UX0RJU0t9IiAke1JPT1RfTU9VTlR9L21lZGlhL3JlYWxyb290CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL21kZXYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL21kZXYKaW5kZXggYTVkZjFkNy4uOTgxNGQ5NyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9tZGV2CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvbWRldgpAQCAtMSw1ICsxLDUgQEAKICMhL2Jpbi9zaAotIyBDb3B5cmlnaHQgKEMpIDIwMTEgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisjIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNyBPLlMuIFN5c3RlbXMgU29mdHdhcmUgTFREQS4KICMgTGljZW5zZWQgb24gTUlUCiAKIG1kZXZfZW5hYmxlZCgpIHsKQEAgLTI1LDYgKzI1LDYgQEAKIAogCSMgbG9hZCBtb2R1bGVzIGZvciBkZXZpY2VzCiAJZmluZCAvc3lzIC1uYW1lIG1vZGFsaWFzIHwgd2hpbGUgcmVhZCBtOyBkbwotCQlsb2FkX2tlcm5lbF9tb2R1bGUgJChjYXQgJG0pCisJCWxvYWRfa2VybmVsX21vZHVsZSAkKGNhdCAiJG0iKQogCWRvbmUKIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvc2V0dXAtbGl2ZSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvc2V0dXAtbGl2ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yzc5ZjQxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9zZXR1cC1saXZlCkBAIC0wLDAgKzEsNjQgQEAKKyMvYmluL3NoCisjIENvcHlyaWdodCAoQykgMjAxMSBPLlMuIFN5c3RlbXMgU29mdHdhcmUgTFREQS4KKyMgTGljZW5zZWQgb24gTUlUCisKK3NldHVwX2VuYWJsZWQoKSB7CisJcmV0dXJuIDAKK30KKworc2V0dXBfcnVuKCkgeworUk9PVF9JTUFHRT0icm9vdGZzLmltZyIKK0lTT0xJTlVYPSIiCitST09UX0RJU0s9IiIKK3NoZWxsdGltZW91dD0zMAorCisJaWYgWyAteiAiJGJvb3RwYXJhbV9yb290IiAtbyAiJGJvb3RwYXJhbV9yb290IiA9ICIvZGV2L3JhbTAiIF07IHRoZW4KKwkJZWNobyAiV2FpdGluZyBmb3IgcmVtb3ZhYmxlIG1lZGlhLi4uIgorCQlDPTAKKwkJd2hpbGUgdHJ1ZQorCQlkbworCQkgIGZvciBpIGluIGBscyAvcnVuL21lZGlhIDI+L2Rldi9udWxsYDsgZG8KKwkJICAgICAgaWYgWyAtZiAvcnVuL21lZGlhLyRpLyRST09UX0lNQUdFIF0gOyB0aGVuCisJCQkJZm91bmQ9InllcyIKKwkJCQlST09UX0RJU0s9IiRpIgorCQkJCWJyZWFrCisJCQkgIGVsaWYgWyAtZiAvcnVuL21lZGlhLyRpL2lzb2xpbnV4LyRST09UX0lNQUdFIF07IHRoZW4KKwkJCQlmb3VuZD0ieWVzIgorCQkJCUlTT0xJTlVYPSJpc29saW51eCIKKwkJCQlST09UX0RJU0s9IiRpIgorCQkJCWJyZWFrCisJCSAgICAgIGZpCisJCSAgZG9uZQorCQkgIGlmIFsgIiRmb3VuZCIgPSAieWVzIiBdOyB0aGVuCisJCSAgICAgIGJyZWFrOworCQkgIGZpCisJCSAgIyBkb24ndCB3YWl0IGZvciBtb3JlIHRoYW4gJHNoZWxsdGltZW91dCBzZWNvbmRzLCBpZiBpdCdzIHNldAorCQkgIGlmIFsgLW4gIiRzaGVsbHRpbWVvdXQiIF07IHRoZW4KKwkJICAgICAgZWNobyAtbiAiICIgJCgoICRzaGVsbHRpbWVvdXQgLSAkQyApKQorCQkgICAgICBpZiBbICRDIC1nZSAkc2hlbGx0aW1lb3V0IF07IHRoZW4KKwkJICAgICAgICAgICBlY2hvICIuLi4iCisJCQkgICBlY2hvICJNb3VudGVkIGZpbGVzeXN0ZW1zIgorCQkgICAgICAgICAgIG1vdW50IHwgZ3JlcCBtZWRpYQorCQkgICAgICAgICAgIGVjaG8gIkF2YWlsYWJsZSBibG9jayBkZXZpY2VzIgorCQkgICAgICAgICAgIGNhdCAvcHJvYy9wYXJ0aXRpb25zCisJCSAgICAgICAgICAgZmF0YWwgIkNhbm5vdCBmaW5kICRST09UX0lNQUdFIGZpbGUgaW4gL3J1bi9tZWRpYS8qICwgZHJvcHBpbmcgdG8gYSBzaGVsbCAiCisJCSAgICAgIGZpCisJCSAgICAgIEM9JCgoIEMgKyAxICkpCisJCSAgZmkKKwkJICBzbGVlcCAxCisJCWRvbmUKKwkJIyBUaGUgZXhpc3Rpbmcgcm9vdGZzIG1vZHVsZSBoYXMgbm8gc3VwcG9ydCBmb3Igcm9vdGZzIGltYWdlcy4gQXNzaWduIHRoZSByb290ZnMgaW1hZ2UuCisJCWJvb3RwYXJhbV9yb290PSIvcnVuL21lZGlhLyRST09UX0RJU0svJElTT0xJTlVYLyRST09UX0lNQUdFIgorCWZpCisKKwlpZiBbICIkYm9vdHBhcmFtX0xBQkVMIiAhPSAiYm9vdCIgLWEgLWYgL2luaXQuZC8kYm9vdHBhcmFtX0xBQkVMLnNoIF0gOyB0aGVuCisJCWlmIFsgLWYgL3J1bi9tZWRpYS8kaS8kSVNPTElOVVgvJFJPT1RfSU1BR0UgXSA7IHRoZW4KKwkJICAgIC4vaW5pdC5kLyRib290cGFyYW1fTEFCRUwuc2ggJGkvJElTT0xJTlVYICRST09UX0lNQUdFICR2aWRlb19tb2RlICR2Z2FfbW9kZSAkY29uc29sZV9wYXJhbXMKKwkJZWxzZQorCQkgICAgZmF0YWwgIkNvdWxkIG5vdCBmaW5kICRib290cGFyYW1fTEFCRUwgc2NyaXB0IgorCQlmaQorCisJCSMgSWYgd2UncmUgZ2V0dGluZyBoZXJlLCB3ZSBmYWlsZWQuLi4KKwkJZmF0YWwgIlRhcmdldCAkYm9vdHBhcmFtX0xBQkVMIGZhaWxlZCIKKwlmaQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29ya18xLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrXzEuMC5iYgppbmRleCA2N2ExYjA0Li4yYWZjMzdlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrXzEuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrXzEuMC5iYgpAQCAtMyw3ICszLDcgQEAKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgogUkRFUEVORFNfJHtQTn0gKz0gIiR7VklSVFVBTC1SVU5USU1FX2Jhc2UtdXRpbHN9IgogCi1QUiA9ICJyMiIKK1BSID0gInI0IgogCiBpbmhlcml0IGFsbGFyY2gKIApAQCAtMTMsNyArMTMsOCBAQAogICAgICAgICAgICBmaWxlOi8vbWRldiBcCiAgICAgICAgICAgIGZpbGU6Ly91ZGV2IFwKICAgICAgICAgICAgZmlsZTovL2UyZnMgXAotICAgICAgICAgICBmaWxlOi8vZGVidWciCisgICAgICAgICAgIGZpbGU6Ly9kZWJ1ZyBcCisgICAgICAgICAgIgogCiBTID0gIiR7V09SS0RJUn0iCiAKQEAgLTQ4LDcgKzQ5LDggQEAKICAgICAgICAgICAgIGluaXRyYW1mcy1tb2R1bGUtdWRldiBcCiAgICAgICAgICAgICBpbml0cmFtZnMtbW9kdWxlLWUyZnMgXAogICAgICAgICAgICAgaW5pdHJhbWZzLW1vZHVsZS1yb290ZnMgXAotICAgICAgICAgICAgaW5pdHJhbWZzLW1vZHVsZS1kZWJ1ZyIKKyAgICAgICAgICAgIGluaXRyYW1mcy1tb2R1bGUtZGVidWcgXAorICAgICAgICAgICAiCiAKIEZJTEVTXyR7UE59LWJhc2UgPSAiL2luaXQgL2luaXQuZC85OS1maW5pc2ggL2RldiIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC1lZmlfMS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC1lZmlfMS4wLmJiCmluZGV4IDMyYzFmY2UuLjJhN2Y4NGQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpXzEuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLWVmaV8xLjAuYmIKQEAgLTIxLDQgKzIxLDQgQEAKIAogRklMRVNfJHtQTn0gPSAiIC9pbnN0YWxsLWVmaS5zaCAiCiAKLUNPTVBBVElCTEVfSE9TVCA9ICIoaS44Nnx4ODZfNjQpLiotbGludXgiCitDT01QQVRJQkxFX0hPU1QgPSAiKGkuODYuKnx4ODZfNjQuKnxhYXJjaDY0LiopLWxpbnV4IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbF8xLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsXzEuMC5iYgppbmRleCA4OGIzYjMwLi5hNTUzYTBkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsXzEuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsXzEuMC5iYgpAQCAtMjEsNCArMjEsNCBAQAogCiBGSUxFU18ke1BOfSA9ICIgL2luc3RhbGwuc2ggIgogCi1DT01QQVRJQkxFX0hPU1QgPSAiKGkuODZ8eDg2XzY0KS4qLWxpbnV4IgorQ09NUEFUSUJMRV9IT1NUID0gIihpLjg2Lip8eDg2XzY0Lip8YWFyY2g2NC4qKS1saW51eCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1tb2R1bGUtaW5zdGFsbC1lZmlfMS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLW1vZHVsZS1pbnN0YWxsLWVmaV8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU3Zjc2ZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1tb2R1bGUtaW5zdGFsbC1lZmlfMS4wLmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiaW5pdHJhbWZzLWZyYW1ld29yayBtb2R1bGUgZm9yIEVGSSBpbnN0YWxsYXRpb24gb3B0aW9uIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKK1JERVBFTkRTXyR7UE59ID0gImluaXRyYW1mcy1mcmFtZXdvcmstYmFzZSBwYXJ0ZWQgZTJmc3Byb2dzLW1rZTJmcyBkb3Nmc3Rvb2xzIHV0aWwtbGludXgtYmxraWQiCisKK1BSID0gInI0IgorCitTUkNfVVJJID0gImZpbGU6Ly9pbml0LWluc3RhbGwtZWZpLnNoIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9L2luaXQuZAorICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQtaW5zdGFsbC1lZmkuc2ggJHtEfS9pbml0LmQvaW5zdGFsbC1lZmkuc2gKK30KKworRklMRVNfJHtQTn0gPSAiL2luaXQuZC9pbnN0YWxsLWVmaS5zaCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1tb2R1bGUtaW5zdGFsbF8xLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbW9kdWxlLWluc3RhbGxfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYjY5ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbW9kdWxlLWluc3RhbGxfMS4wLmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiaW5pdHJhbWZzLWZyYW1ld29yayBtb2R1bGUgZm9yIGluc3RhbGxhdGlvbiBvcHRpb24iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorUkRFUEVORFNfJHtQTn0gPSAiaW5pdHJhbWZzLWZyYW1ld29yay1iYXNlIGdydWIgcGFydGVkIGUyZnNwcm9ncy1ta2UyZnMgdXRpbC1saW51eC1ibGtpZCIKKworIyBUaGUgc2FtZSByZXN0cmljdGlvbiBhcyBncnViCitDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NC4qfGkuODYuKnxhcm0uKnxhYXJjaDY0LiopLShsaW51eC4qfGZyZWVic2QuKiknCitDT01QQVRJQkxFX0hPU1RfYXJtdjdhID0gJ251bGwnCitDT01QQVRJQkxFX0hPU1RfYXJtdjd2ZSA9ICdudWxsJworCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICJmaWxlOi8vaW5pdC1pbnN0YWxsLnNoIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9L2luaXQuZAorICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQtaW5zdGFsbC5zaCAke0R9L2luaXQuZC9pbnN0YWxsLnNoCit9CisKK0ZJTEVTXyR7UE59ID0gIi9pbml0LmQvaW5zdGFsbC5zaCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1tb2R1bGUtc2V0dXAtbGl2ZV8xLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbW9kdWxlLXNldHVwLWxpdmVfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMmZlOWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbW9kdWxlLXNldHVwLWxpdmVfMS4wLmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiaW5pdHJhbWZzLWZyYW1ld29yayBtb2R1bGUgZm9yIGxpdmUgYm9vdGluZyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitSREVQRU5EU18ke1BOfSA9ICJpbml0cmFtZnMtZnJhbWV3b3JrLWJhc2UgdWRldi1leHRyYWNvbmYiCisKK1BSID0gInI0IgorCitpbmhlcml0IGFsbGFyY2gKKworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vaW5pdHJhbWZzLWZyYW1ld29yazoiCitTUkNfVVJJID0gImZpbGU6Ly9zZXR1cC1saXZlIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9L2luaXQuZAorICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3NldHVwLWxpdmUgJHtEfS9pbml0LmQvODAtc2V0dXAtbGl2ZQorfQorCitGSUxFU18ke1BOfSA9ICIvaW5pdC5kLzgwLXNldHVwLWxpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3BvcHVsYXRlLXZvbGF0aWxlLnNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9wb3B1bGF0ZS12b2xhdGlsZS5zaAppbmRleCAyMmE3MWVjLi4zNTMxNmVjIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3BvcHVsYXRlLXZvbGF0aWxlLnNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcG9wdWxhdGUtdm9sYXRpbGUuc2gKQEAgLTI1LDggKzI1LDE4IEBACiBbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiUG9wdWxhdGluZyB2b2xhdGlsZSBGaWxlc3lzdGVtcy4iCiAKIGNyZWF0ZV9maWxlKCkgeworCUVYRUM9IiIKKwlbIC16ICIkMiIgXSAmJiB7CisJCUVYRUM9IgorCQl0b3VjaCBcIiQxXCI7CisJCSIKKwl9IHx8IHsKKwkJRVhFQz0iCisJCWNwIFwiJDJcIiBcIiQxXCI7CisJCSIKKwl9CiAJRVhFQz0iCi0JdG91Y2ggXCIkMVwiOworCSR7RVhFQ30KIAljaG93biAke1RVU0VSfS4ke1RHUk9VUH0gJDEgfHwgZWNobyBcIkZhaWxlZCB0byBzZXQgb3duZXIgLSR7VFVTRVJ9LSBmb3IgLSQxLS5cIiA+L2Rldi90dHkwIDI+JjE7CiAJY2htb2QgJHtUTU9ERX0gJDEgfHwgZWNobyBcIkZhaWxlZCB0byBzZXQgbW9kZSAtJHtUTU9ERX0tIGZvciAtJDEtLlwiID4vZGV2L3R0eTAgMj4mMSAiCiAKQEAgLTE4Nyw3ICsxOTcsOSBAQAogCiAJCWNhc2UgIiR7VFRZUEV9IiBpbgogCQkJImYiKSAgWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gIkNyZWF0aW5nIGZpbGUgLSR7VE5BTUV9LS4iCi0JCQkJY3JlYXRlX2ZpbGUgIiR7VE5BTUV9IgorCQkJCVRTT1VSQ0U9IiRUTFRBUkdFVCIKKwkJCQlbICIke1RTT1VSQ0V9IiA9ICJub25lIiBdICYmIFRTT1VSQ0U9IiIKKwkJCQljcmVhdGVfZmlsZSAiJHtUTkFNRX0iICIke1RTT1VSQ0V9IiAmCiAJCQkJOzsKIAkJCSJkIikgIFsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJDcmVhdGluZyBkaXJlY3RvcnkgLSR7VE5BTUV9LS4iCiAJCQkJbWtfZGlyICIke1ROQU1FfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvdm9sYXRpbGVzIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC92b2xhdGlsZXMKaW5kZXggYmMxN2M0NS4uMjAxMTA2NiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC92b2xhdGlsZXMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC92b2xhdGlsZXMKQEAgLTI3LDcgKzI3LDYgQEAKIGQgcm9vdCByb290IDA3NTUgL3Zhci92b2xhdGlsZS9sb2cgbm9uZQogZCByb290IHJvb3QgMTc3NyAvdmFyL3ZvbGF0aWxlL3RtcCBub25lCiBsIHJvb3Qgcm9vdCAxNzc3IC92YXIvbG9jayAvcnVuL2xvY2sKLWwgcm9vdCByb290IDA3NTUgL3Zhci9sb2cgL3Zhci92b2xhdGlsZS9sb2cKIGwgcm9vdCByb290IDA3NTUgL3Zhci9ydW4gL3J1bgogbCByb290IHJvb3QgMTc3NyAvdmFyL3RtcCAvdmFyL3ZvbGF0aWxlL3RtcAogbCByb290IHJvb3QgMTc3NyAvdG1wIC92YXIvdG1wCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHNfMS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzXzEuMC5iYgppbmRleCAyZTRmN2U0Li45MWVlYTRiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHNfMS4wLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0c18xLjAuYmIKQEAgLTEsNCArMSw1IEBACiBTVU1NQVJZID0gIlN5c1YgaW5pdCBzY3JpcHRzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL2ZlZG9yYS1zeXN2L2luaXRzY3JpcHRzIgogREVTQ1JJUFRJT04gPSAiSW5pdHNjcmlwdHMgcHJvdmlkZSB0aGUgYmFzaWMgc3lzdGVtIHN0YXJ0dXAgaW5pdGlhbGl6YXRpb24gc2NyaXB0cyBmb3IgdGhlIHN5c3RlbS4gIFRoZXNlIHNjcmlwdHMgaW5jbHVkZSBhY3Rpb25zIHN1Y2ggYXMgZmlsZXN5c3RlbSBtb3VudGluZywgZnNjaywgUlRDIG1hbmlwdWxhdGlvbiBhbmQgb3RoZXIgYWN0aW9ucyByb3V0aW5lbHkgcGVyZm9ybWVkIGF0IHN5c3RlbSBzdGFydHVwLiAgSW4gYWRkaXRpb24sIHRoZSBzY3JpcHRzIGFyZSBhbHNvIHVzZWQgZHVyaW5nIHN5c3RlbSBzaHV0ZG93biB0byByZXZlcnNlIHRoZSBhY3Rpb25zIHBlcmZvcm1lZCBhdCBzdGFydHVwLiIKIFNFQ1RJT04gPSAiYmFzZSIKIExJQ0VOU0UgPSAiR1BMdjIiCkBAIC00MiwxOSArNDMsMTkgQEAKIAogS0VSTkVMX1ZFUlNJT04gPSAiIgogCi1pbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKIERFUEVORFNfYXBwZW5kID0gIiB1cGRhdGUtcmMuZC1uYXRpdmUiCiBQQUNLQUdFX1dSSVRFX0RFUFNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3N5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZScsJycsZCl9IgogCi1QQUNLQUdFUyA9KyAiJHtQTn0tZnVuY3Rpb25zIgotUkRFUEVORFNfJHtQTn0gPSAiJHtQTn0tZnVuY3Rpb25zIFwKLSAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzZWxpbnV4JywnYmFzaCcsJycsZCl9IFwKK1BBQ0tBR0VTID0rICIke1BOfS1mdW5jdGlvbnMgJHtQTn0tc3VzaGVsbCIKK1JERVBFTkRTXyR7UE59ID0gImluaXRkLWZ1bmN0aW9ucyBcCisgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc2VsaW51eCcsJyR7UE59LXN1c2hlbGwnLCcnLGQpfSBcCiAJCSAiCisjIFJlY29tbWVuZCBwbi1mdW5jdGlvbnMgc28gdGhhdCBpdCB3aWxsIGJlIGEgcHJlZmVycmVkIGRlZmF1bHQgcHJvdmlkZXIgZm9yIGluaXRkLWZ1bmN0aW9ucworUlJFQ09NTUVORFNfJHtQTn0gPSAiJHtQTn0tZnVuY3Rpb25zIgorUlBST1ZJREVTXyR7UE59LWZ1bmN0aW9ucyA9ICJpbml0ZC1mdW5jdGlvbnMiCitSQ09ORkxJQ1RTXyR7UE59LWZ1bmN0aW9ucyA9ICJsc2Jpbml0c2NyaXB0cyIKIEZJTEVTXyR7UE59LWZ1bmN0aW9ucyA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9mdW5jdGlvbnMqIgotCi1BTFRFUk5BVElWRV9QUklPUklUWV8ke1BOfS1mdW5jdGlvbnMgPSAiOTAiCi1BTFRFUk5BVElWRV8ke1BOfS1mdW5jdGlvbnMgPSAiZnVuY3Rpb25zIgotQUxURVJOQVRJVkVfTElOS19OQU1FW2Z1bmN0aW9uc10gPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvZnVuY3Rpb25zIgorRklMRVNfJHtQTn0tc3VzaGVsbCA9ICIke2Jhc2Vfc2JpbmRpcn0vc3VzaGVsbCIKIAogSEFMVEFSR1MgPz0gIi1kIC1mIgogCkBAIC0xMDIsNiArMTAzLDkgQEAKIAlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9yZWFkLW9ubHktcm9vdGZzLWhvb2suc2ggJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCiAJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vc2F2ZS1ydGMuc2gJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCiAJaW5zdGFsbCAtbSAwNjQ0ICAgICR7V09SS0RJUn0vdm9sYXRpbGVzCQkke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcy8wMF9jb3JlCisJaWYgWyAke0Agb2UudHlwZXMuYm9vbGVhbignJHtWT0xBVElMRV9MT0dfRElSfScpIH0gPSBUcnVlIF07IHRoZW4KKwkJZWNobyAibCByb290IHJvb3QgMDc1NSAvdmFyL2xvZyAvdmFyL3ZvbGF0aWxlL2xvZyIgPj4gJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMvMDBfY29yZQorCWZpCiAJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vZG1lc2cuc2gJCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAogCWluc3RhbGwgLW0gMDY0NCAgICAke1dPUktESVJ9L2xvZ3JvdGF0ZS1kbWVzZy5jb25mICR7RH0ke3N5c2NvbmZkaXJ9LwogCkBAIC0xMzQsNyArMTM4LDcgQEAKIAl1cGRhdGUtcmMuZCAtciAke0R9IG1vdW50YWxsLnNoIHN0YXJ0IDAzIFMgLgogCXVwZGF0ZS1yYy5kIC1yICR7RH0gaG9zdG5hbWUuc2ggc3RhcnQgMzkgUyAuCiAJdXBkYXRlLXJjLmQgLXIgJHtEfSBtb3VudG5mcy5zaCBzdGFydCAxNSAyIDMgNCA1IC4KLQl1cGRhdGUtcmMuZCAtciAke0R9IGJvb3RtaXNjLnNoIHN0YXJ0IDU1IFMgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gYm9vdG1pc2Muc2ggc3RhcnQgMzYgUyAuCiAJdXBkYXRlLXJjLmQgLXIgJHtEfSBzeXNmcy5zaCBzdGFydCAwMiBTIC4KIAl1cGRhdGUtcmMuZCAtciAke0R9IHBvcHVsYXRlLXZvbGF0aWxlLnNoIHN0YXJ0IDM3IFMgLgogCXVwZGF0ZS1yYy5kIC1yICR7RH0gcmVhZC1vbmx5LXJvb3Rmcy1ob29rLnNoIHN0YXJ0IDI5IFMgLgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2tiZC9rYmRfMi4wLjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUva2JkL2tiZF8yLjAuNC5iYgppbmRleCA2NTMyNWMwLi40MjNiNDdhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUva2JkL2tiZF8yLjAuNC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUva2JkL2tiZF8yLjAuNC5iYgpAQCAtMSw0ICsxLDUgQEAKIFNVTU1BUlkgPSAiS2V5dGFibGUgZmlsZXMgYW5kIGtleWJvYXJkIHV0aWxpdGllcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cua2JkLXByb2plY3Qub3JnLyIKICMgZXZlcnl0aGluZyBtaW51cyBjb25zb2xlLWZvbnRzIGlzIEdQTHYyKwogTElDRU5TRSA9ICJHUEx2MisiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNWZjYzM2MTIxZDkzZTFmNjlkOTZhMzEzMDc4YzhiNSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJjZ3JvdXAvbGliY2dyb3VwXzAuNDEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGliY2dyb3VwL2xpYmNncm91cF8wLjQxLmJiCmluZGV4IDk1OTc5NjMuLmU0YjE3ODIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJjZ3JvdXAvbGliY2dyb3VwXzAuNDEuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYmNncm91cC9saWJjZ3JvdXBfMC40MS5iYgpAQCAtMSw0ICsxLDUgQEAKIFNVTU1BUlkgPSAiTGludXggY29udHJvbCBncm91cCBhYnN0cmFjdGlvbiBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL2xpYmNnLnNvdXJjZWZvcmdlLm5ldC8iCiBERVNDUklQVElPTiA9ICJsaWJjZ3JvdXAgaXMgYSBsaWJyYXJ5IHRoYXQgYWJzdHJhY3RzIHRoZSBjb250cm9sIGdyb3VwIGZpbGUgc3lzdGVtIFwKIGluIExpbnV4LiBDb250cm9sIGdyb3VwcyBhbGxvdyB5b3UgdG8gbGltaXQsIGFjY291bnQgYW5kIGlzb2xhdGUgcmVzb3VyY2UgdXNhZ2UgXAogKENQVSwgbWVtb3J5LCBkaXNrIEkvTywgZXRjLikgb2YgZ3JvdXBzIG9mIHByb2Nlc3Nlcy4iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvbGlieG1sMi1DVkUtMjAxNi00NjU4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbDItQ1ZFLTIwMTYtNDY1OC5wYXRjaAppbmRleCA1NDEyZThjLi5iYjU1ZWVkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvbGlieG1sMi1DVkUtMjAxNi00NjU4LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9saWJ4bWwyLUNWRS0yMDE2LTQ2NTgucGF0Y2gKQEAgLTgsNyArOCw3IEBACiBCdXQgdGhleSBkb24ndCBuZWNlc3NhcmlseSBoYXZlIGEgcGh5c2ljYWwgcmVwcmVzZW50YXRpb24gaW4gYQogZG9jdW1lbnQsIHNvIHNpbXBseSBkaXNhbGxvdyB0aGVtIGluIFhQb2ludGVyIHJhbmdlcy4KIAotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydGVkIAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAogIC0gW2h0dHBzOi8vZ2l0Lmdub21lLm9yZy9icm93c2UvbGlieG1sMi9jb21taXQvP2lkPWMxZDFmNzEyMTE5NDAzNjYwOGJmNTU1ZjA4ZDMwNjJhMzZmZDM0NGJdCiAgLSBbaHR0cHM6Ly9naXQuZ25vbWUub3JnL2Jyb3dzZS9saWJ4bWwyL2NvbW1pdC8/aWQ9M2Y4YTkxMDM2ZDMzOGU1MWMwNTlkNTQzOTdhNDJkNjQ1ZjAxOWM2NV0KIENWRTogQ1ZFLTIwMTYtNDY1OApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbDItZml4X05VTExfcG9pbnRlcl9kZXJlZnMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvbGlieG1sMi1maXhfTlVMTF9wb2ludGVyX2RlcmVmcy5wYXRjaAppbmRleCA4MzU1MmNhLi5jNjBlMzJmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvbGlieG1sMi1maXhfTlVMTF9wb2ludGVyX2RlcmVmcy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvbGlieG1sMi1maXhfTlVMTF9wb2ludGVyX2RlcmVmcy5wYXRjaApAQCAtMiw4ICsyLDcgQEAKIAogeHBvaW50ZXI6IEZpeCBtb3JlIE5VTEwgcG9pbnRlciBkZXJlZnMKIAotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydGVkIFtodHRwczovL2dpdC5nbm9tZS5vcmcvYnJvd3NlL2xpYnhtbDIvY29tbWl0Lz9pZD1lOTA1ZjA4MTIzZTRhNmU3NzMxNTQ5ZTZmMDlkYWRmZjRjYWI2NWJkXQotQ1ZFOiAtCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtodHRwczovL2dpdC5nbm9tZS5vcmcvYnJvd3NlL2xpYnhtbDIvY29tbWl0Lz9pZD1lOTA1ZjA4MTIzZTRhNmU3NzMxNTQ5ZTZmMDlkYWRmZjRjYWI2NWJkXQogU2lnbmVkLW9mZi1ieTogQW5kcmVqIFZhbGVrIDxhbmRyZWoudmFsZWtAc2llbWVucy5jb20+CiBTaWduZWQtb2ZmLWJ5OiBQYXNjYWwgQmFjaCA8cGFzY2FsLmJhY2hAc2llbWVucy5jb20+CiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9saWJ4bWwyLWZpeF9ub2RlX2NvbXBhcmlzb24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvbGlieG1sMi1maXhfbm9kZV9jb21wYXJpc29uLnBhdGNoCmluZGV4IDExNzE4YmIuLjY1ZjZiZWYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9saWJ4bWwyLWZpeF9ub2RlX2NvbXBhcmlzb24ucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbDItZml4X25vZGVfY29tcGFyaXNvbi5wYXRjaApAQCAtNSwxMCArNSwxMCBAQAogIC0gQWRkIHNhbml0eSBjaGVjayBmb3IgZW1wdHkgc3RhY2suCiAgLSBJbmNsdWRlIGNvbXBhcmF0aW9uIGluIGNoYW5nZXMgZnJvbSB4bWxYUGF0aENtcE5vZGVzRXh0IHRvIHhtbFhQYXRoQ21wTm9kZXMKIAotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydGVkCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CiAgLSBbaHR0cHM6Ly9naXQuZ25vbWUub3JnL2Jyb3dzZS9saWJ4bWwyL2NvbW1pdC8/aWQ9YzFkMWY3MTIxMTk0MDM2NjA4YmY1NTVmMDhkMzA2MmEzNmZkMzQ0Yl0KICAtIFtodHRwczovL2dpdC5nbm9tZS5vcmcvYnJvd3NlL2xpYnhtbDIvY29tbWl0Lz9pZD1hMDA1MTk5MzMwYjg2ZGFkYTE5ZDE2MmNhZTE1ZWY5YmRjYjZiYWE4XQotQ1ZFOiBuZWNlc3NhcnkgY2hhbmdlcyBmb3IgZml4aW5nIENWRS0yMDE2LTUxMzEKK0NWRTogQ1ZFLTIwMTYtNTEzMQogU2lnbmVkLW9mZi1ieTogQW5kcmVqIFZhbGVrIDxhbmRyZWoudmFsZWtAc2llbWVucy5jb20+CiBTaWduZWQtb2ZmLWJ5OiBQYXNjYWwgQmFjaCA8cGFzY2FsLmJhY2hAc2llbWVucy5jb20+CiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9ydW4tcHRlc3QgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvcnVuLXB0ZXN0CmluZGV4IDQ3M2QwYjYuLmMzMTNkODMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9ydW4tcHRlc3QKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL3J1bi1wdGVzdApAQCAtMSwzICsxLDQgQEAKICMhL2Jpbi9zaAogCitleHBvcnQgTENfQUxMPWVuX1VTLlVURi04CiBtYWtlIC1rIHJ1bnRlc3RzCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDJfMi45LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDJfMi45LjQuYmIKaW5kZXggMTA3NTM5Yi4uOWFkYjI5YyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyXzIuOS40LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMl8yLjkuNC5iYgpAQCAtMTEsNyArMTEsNyBAQAogCiBERVBFTkRTID0gInpsaWIgdmlydHVhbC9saWJpY29udiIKIAotU1JDX1VSSSA9ICJmdHA6Ly94bWxzb2Z0Lm9yZy9saWJ4bWwyL2xpYnhtbDItJHtQVn0udGFyLmd6O25hbWU9bGlidGFyIFwKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy54bWxzb2Z0Lm9yZy9zb3VyY2VzL2xpYnhtbDItJHtQVn0udGFyLmd6O25hbWU9bGlidGFyIFwKICAgICAgICAgICAgaHR0cDovL3d3dy53My5vcmcvWE1ML1Rlc3QveG1sdHMyMDA4MDgyNy50YXIuZ3o7bmFtZT10ZXN0dGFyIFwKICAgICAgICAgICAgZmlsZTovL2xpYnhtbC02NGJpdC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9hbnNpZGVjbC5wYXRjaCBcCkBAIC01MywxMSArNTMsMTEgQEAKIAogUkRFUEVORFNfJHtQTn0tcHl0aG9uICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdweXRob24nLCAncHl0aG9uMy1jb3JlJywgJycsIGQpfSIKIAotUkRFUEVORFNfJHtQTn0tcHRlc3RfYXBwZW5kX2xpYmMtZ2xpYmMgPSAiIGdsaWJjLWdjb252LWViY2RpYy11cyBnbGliYy1nY29udi1pYm0xMTQxIgorUkRFUEVORFNfJHtQTn0tcHRlc3RfYXBwZW5kX2xpYmMtZ2xpYmMgPSAiIGdsaWJjLWdjb252LWViY2RpYy11cyBnbGliYy1nY29udi1pYm0xMTQxIGdsaWJjLWdjb252LWlzbzg4NTktNSIKIAogZXhwb3J0IFBZVEhPTl9TSVRFX1BBQ0tBR0VTPSIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSIKIAotIyBXQVJOSU5HOiB6bGliIGlzIHJlcXVpcmUgZm9yIFJQTSB1c2UKKyMgV0FSTklORzogemxpYiBpcyByZXF1aXJlZCBmb3IgUlBNIHVzZQogRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1kZWJ1ZyAtLXdpdGhvdXQtbGVnYWN5IC0td2l0aC1jYXRhbG9nIC0td2l0aG91dC1kb2Nib29rIC0td2l0aC1jMTRuIC0td2l0aG91dC1sem1hIC0td2l0aC1mZXhjZXB0aW9ucyIKIEVYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS13aXRob3V0LWxlZ2FjeSAtLXdpdGhvdXQtZG9jYm9vayAtLXdpdGgtYzE0biAtLXdpdGhvdXQtbHptYSAtLXdpdGgtemxpYiIKIEVYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmVzZGsgPSAiLS13aXRob3V0LWxlZ2FjeSAtLXdpdGhvdXQtZG9jYm9vayAtLXdpdGgtYzE0biAtLXdpdGhvdXQtbHptYSAtLXdpdGgtemxpYiIKQEAgLTg5LDYgKzg5LDE3IEBACiAJCWdyZXAgLWxyWiAnIyEvdXNyL2Jpbi9weXRob24nICR7RH0ke1BURVNUX1BBVEh9L3B5dGhvbiB8CiAJCQl4YXJncyAtMCBzZWQgLWkgLWUgJ3N8L3Vzci9iaW4vcHl0aG9ufCR7VVNSQklOUEFUSH0vJHtQWVRIT05fUE59fCcKIAlmaQorCSNSZW1vdmUgYnVpbGQgaG9zdCByZWZlcmVuY2VzIGZyb20gdmFyaW91cyBNYWtlZmlsZXMKKwlmaW5kICIke0R9JHtQVEVTVF9QQVRIfSIgLW5hbWUgTWFrZWZpbGUgLXR5cGUgZiAtZXhlYyBcCisJICAgIHNlZCAtaSBcCisJICAgIC1lICdzLC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0sLGcnIFwKKwkgICAgLWUgJ3N8JHtERUJVR19QUkVGSVhfTUFQfXx8ZycgXAorCSAgICAtZSAnczoke0hPU1RUT09MU19ESVJ9Lzo6ZycgXAorCSAgICAtZSAnczoke1JFQ0lQRV9TWVNST09UX05BVElWRX06OmcnIFwKKwkgICAgLWUgJ3M6JHtSRUNJUEVfU1lTUk9PVH06OmcnIFwKKwkgICAgLWUgJ3M6JHtCQVNFX1dPUktESVJ9LyR7TVVMVElNQUNIX1RBUkdFVF9TWVN9OjpnJyBcCisJICAgIC1lICcvXlJFTERBVEUvZCcgXAorCSAgICB7fSArCiB9CiAKIGRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9idWlsZHRvb2xzLXRhcmJhbGwuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9idWlsZHRvb2xzLXRhcmJhbGwuYmIKaW5kZXggYWJkYzdmZS4uYmUzN2M0NCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvYnVpbGR0b29scy10YXJiYWxsLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL2J1aWxkdG9vbHMtdGFyYmFsbC5iYgpAQCAtNDYsOCArNDYsNiBAQAogaW5oZXJpdCBub3BhY2thZ2VzCiAKIGRlbHRhc2sgaW5zdGFsbAotZGVsdGFzayBwYWNrYWdlCi1kZWx0YXNrIHBhY2thZ2VkYXRhCiBkZWx0YXNrIHBvcHVsYXRlX3N5c3Jvb3QKIAogZG9fcG9wdWxhdGVfc2RrW3N0YW1wLWV4dHJhLWluZm9dID0gIiR7UEFDS0FHRV9BUkNIfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtZ28tdG9vbGNoYWluLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS1nby10b29sY2hhaW4uYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRlMzg1YwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtZ28tdG9vbGNoYWluLmJiCkBAIC0wLDAgKzEsMTIgQEAKK1NVTU1BUlkgPSAiTWV0YSBwYWNrYWdlIGZvciBidWlsZGluZyBhIGluc3RhbGxhYmxlIEdvIHRvb2xjaGFpbiIKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IHBvcHVsYXRlX3NkaworCitUT09MQ0hBSU5fSE9TVF9UQVNLX2FwcGVuZCA9ICIgXAorICAgIHBhY2thZ2Vncm91cC1nby1jcm9zcy1jYW5hZGlhbi0ke01BQ0hJTkV9IFwKKyIKKworVE9PTENIQUlOX1RBUkdFVF9UQVNLX2FwcGVuZCA9ICIgXAorICAgICR7QG11bHRpbGliX3BrZ19leHRlbmQoZCwgJ3BhY2thZ2Vncm91cC1nby1zZGstdGFyZ2V0Jyl9IFwKKyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL3BhY2thZ2UtaW5kZXguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9wYWNrYWdlLWluZGV4LmJiCmluZGV4IGZlMDIyZmYuLmE0MTIzYjcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL3BhY2thZ2UtaW5kZXguYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvcGFja2FnZS1pbmRleC5iYgpAQCAtNCwxNyArNCwxNCBAQAogSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKIFBBQ0tBR0VTID0gIiIKIAoraW5oZXJpdCBub3BhY2thZ2VzCisKIGRlbHRhc2sgZG9fZmV0Y2gKIGRlbHRhc2sgZG9fdW5wYWNrCiBkZWx0YXNrIGRvX3BhdGNoCiBkZWx0YXNrIGRvX2NvbmZpZ3VyZQogZGVsdGFzayBkb19jb21waWxlCiBkZWx0YXNrIGRvX2luc3RhbGwKLWRlbHRhc2sgZG9fcGFja2FnZQotZGVsdGFzayBkb19wYWNrYWdlZGF0YQotZGVsdGFzayBkb19wYWNrYWdlX3dyaXRlX2lwawotZGVsdGFzayBkb19wYWNrYWdlX3dyaXRlX3JwbQotZGVsdGFzayBkb19wYWNrYWdlX3dyaXRlX2RlYgogZGVsdGFzayBkb19wb3B1bGF0ZV9zeXNyb290CiAKIGRvX3BhY2thZ2VfaW5kZXhbbm9zdGFtcF0gPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL3NpZ25pbmcta2V5cy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL3NpZ25pbmcta2V5cy5iYgppbmRleCBhYWEwMWQwLi4yYzFjYzM4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9zaWduaW5nLWtleXMuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvc2lnbmluZy1rZXlzLmJiCkBAIC00NCwyNSArNDQsMjUgQEAKIAogZG9faW5zdGFsbCAoKSB7CiAgICAgaWYgWyAtZiAiJHtCfS9ycG0ta2V5IiBdOyB0aGVuCi0gICAgICAgIGluc3RhbGwgLUQgLW0gMDY0NCAiJHtCfS9ycG0ta2V5IiAiJHtEfSR7c3lzY29uZmRpcn0vcGtpL3JwbS1ncGcvUlBNLUdQRy1LRVktJHtESVNUUk9fVkVSU0lPTn0iCisgICAgICAgIGluc3RhbGwgLUQgLW0gMDY0NCAiJHtCfS9ycG0ta2V5IiAiJHtEfSR7c3lzY29uZmRpcn0vcGtpL3JwbS1ncGcvUlBNLUdQRy1LRVktJHtESVNUUk99LSR7RElTVFJPX0NPREVOQU1FfSIKICAgICBmaQogICAgIGlmIFsgLWYgIiR7Qn0vaXBrLWtleSIgXTsgdGhlbgotICAgICAgICBpbnN0YWxsIC1EIC1tIDA2NDQgIiR7Qn0vaXBrLWtleSIgIiR7RH0ke3N5c2NvbmZkaXJ9L3BraS9pcGstZ3BnL0lQSy1HUEctS0VZLSR7RElTVFJPX1ZFUlNJT059IgorICAgICAgICBpbnN0YWxsIC1EIC1tIDA2NDQgIiR7Qn0vaXBrLWtleSIgIiR7RH0ke3N5c2NvbmZkaXJ9L3BraS9pcGstZ3BnL0lQSy1HUEctS0VZLSR7RElTVFJPfS0ke0RJU1RST19DT0RFTkFNRX0iCiAgICAgZmkKICAgICBpZiBbIC1mICIke0J9L3BmLWtleSIgXTsgdGhlbgotICAgICAgICBpbnN0YWxsIC1EIC1tIDA2NDQgIiR7Qn0vcGYta2V5IiAiJHtEfSR7c3lzY29uZmRpcn0vcGtpL3BhY2thZ2VmZWVkLWdwZy9QQUNLQUdFRkVFRC1HUEctS0VZLSR7RElTVFJPX1ZFUlNJT059IgorICAgICAgICBpbnN0YWxsIC1EIC1tIDA2NDQgIiR7Qn0vcGYta2V5IiAiJHtEfSR7c3lzY29uZmRpcn0vcGtpL3BhY2thZ2VmZWVkLWdwZy9QQUNLQUdFRkVFRC1HUEctS0VZLSR7RElTVFJPfS0ke0RJU1RST19DT0RFTkFNRX0iCiAgICAgZmkKIH0KIAogZG9fZGVwbG95ICgpIHsKICAgICBpZiBbIC1mICIke0J9L3JwbS1rZXkiIF07IHRoZW4KLSAgICAgICAgaW5zdGFsbCAtRCAtbSAwNjQ0ICIke0J9L3JwbS1rZXkiICIke0RFUExPWURJUn0vUlBNLUdQRy1LRVktJHtESVNUUk9fVkVSU0lPTn0iCisgICAgICAgIGluc3RhbGwgLUQgLW0gMDY0NCAiJHtCfS9ycG0ta2V5IiAiJHtERVBMT1lESVJ9L1JQTS1HUEctS0VZLSR7RElTVFJPfS0ke0RJU1RST19DT0RFTkFNRX0iCiAgICAgZmkKICAgICBpZiBbIC1mICIke0J9L2lway1rZXkiIF07IHRoZW4KLSAgICAgICAgaW5zdGFsbCAtRCAtbSAwNjQ0ICIke0J9L2lway1rZXkiICIke0RFUExPWURJUn0vSVBLLUdQRy1LRVktJHtESVNUUk9fVkVSU0lPTn0iCisgICAgICAgIGluc3RhbGwgLUQgLW0gMDY0NCAiJHtCfS9pcGsta2V5IiAiJHtERVBMT1lESVJ9L0lQSy1HUEctS0VZLSR7RElTVFJPfS0ke0RJU1RST19DT0RFTkFNRX0iCiAgICAgZmkKICAgICBpZiBbIC1mICIke0J9L3BmLWtleSIgXTsgdGhlbgotICAgICAgICBpbnN0YWxsIC1EIC1tIDA2NDQgIiR7Qn0vcGYta2V5IiAiJHtERVBMT1lESVJ9L1BBQ0tBR0VGRUVELUdQRy1LRVktJHtESVNUUk9fVkVSU0lPTn0iCisgICAgICAgIGluc3RhbGwgLUQgLW0gMDY0NCAiJHtCfS9wZi1rZXkiICIke0RFUExPWURJUn0vUEFDS0FHRUZFRUQtR1BHLUtFWS0ke0RJU1RST30tJHtESVNUUk9fQ09ERU5BTUV9IgogICAgIGZpCiB9CiBkb19kZXBsb3lbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7REVQTE9ZX0RJUl9SUE19IgpAQCAtNzEsMyArNzEsMTEgQEAKICMgY2xlYXIgc3RhbXAtZXh0cmEtaW5mbyBzaW5jZSBNQUNISU5FIGlzIG5vcm1hbGx5IHB1dCB0aGVyZSBieSBkZXBsb3kuYmJjbGFzcwogZG9fZGVwbG95W3N0YW1wLWV4dHJhLWluZm9dID0gIiIKIGFkZHRhc2sgZGVwbG95IGFmdGVyIGRvX2dldF9wdWJsaWNfa2V5cworCisjIERlbGV0ZSB1bm5lY2Vzc2FyeSB0YXNrcy4gSW4gcGFydGljdWxhciwgImRvX3VucGFjayIgX211c3RfIGJlIGRlbGV0ZWQgYmVjYXVzZQorIyBpdCBjbGVhbnMgJHtCfSBhbmQgd2lsbCB3aXBlIGFueSBrZXlzIGV4cG9ydGVkIGJ5IGRvX2dldF9wdWJsaWNfa2V5cy4KK2RlbHRhc2sgZG9fZmV0Y2gKK2RlbHRhc2sgZG9fdW5wYWNrCitkZWx0YXNrIGRvX3BhdGNoCitkZWx0YXNrIGRvX2NvbmZpZ3VyZQorZGVsdGFzayBkb19jb21waWxlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS91bmluYXRpdmUtdGFyYmFsbC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL3VuaW5hdGl2ZS10YXJiYWxsLmJiCmluZGV4IGYzZmMxZWIuLjVmYWJmN2YgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL3VuaW5hdGl2ZS10YXJiYWxsLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL3VuaW5hdGl2ZS10YXJiYWxsLmJiCkBAIC0zNCw4ICszNCw2IEBACiBpbmhlcml0IG5vcGFja2FnZXMKIAogZGVsdGFzayBpbnN0YWxsCi1kZWx0YXNrIHBhY2thZ2UKLWRlbHRhc2sgcGFja2FnZWRhdGEKIGRlbHRhc2sgcG9wdWxhdGVfc3lzcm9vdAogCiBkb19wb3B1bGF0ZV9zZGtbc3RhbXAtZXh0cmEtaW5mb10gPSAiJHtQQUNLQUdFX0FSQ0h9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvd2ljLXRvb2xzLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvd2ljLXRvb2xzLmJiCmluZGV4IGNkNDk0ZWMuLjA5ZWI0MDkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL3dpYy10b29scy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS93aWMtdG9vbHMuYmIKQEAgLTUsMTIgKzUsMTUgQEAKIERFUEVORFMgPSAiXAogICAgICAgICAgICBwYXJ0ZWQtbmF0aXZlIHN5c2xpbnV4LW5hdGl2ZSBncHRmZGlzay1uYXRpdmUgZG9zZnN0b29scy1uYXRpdmUgXAogICAgICAgICAgICBtdG9vbHMtbmF0aXZlIGJtYXAtdG9vbHMtbmF0aXZlIGdydWItZWZpLW5hdGl2ZSBjZHJ0b29scy1uYXRpdmUgXAotICAgICAgICAgICBidHJmcy10b29scy1uYXRpdmUgc3F1YXNoZnMtdG9vbHMtbmF0aXZlIFwKKyAgICAgICAgICAgYnRyZnMtdG9vbHMtbmF0aXZlIHNxdWFzaGZzLXRvb2xzLW5hdGl2ZSBwc2V1ZG8tbmF0aXZlIFwKKyAgICAgICAgICAgZTJmc3Byb2dzLW5hdGl2ZSB1dGlsLWxpbnV4LW5hdGl2ZSBcCiAgICAgICAgICAgICIKIERFUEVORFNfYXBwZW5kX3g4NiA9ICIgc3lzbGludXggZ3J1Yi1lZmkgc3lzdGVtZC1ib290IgogREVQRU5EU19hcHBlbmRfeDg2LTY0ID0gIiBzeXNsaW51eCBncnViLWVmaSBzeXN0ZW1kLWJvb3QiCitERVBFTkRTX2FwcGVuZF94ODYteDMyID0gIiBzeXNsaW51eCBncnViLWVmaSIKIAogSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKwogaW5oZXJpdCBub3BhY2thZ2VzCiAKICMgVGhlIHN5c3Jvb3Qgb2Ygd2ljLXRvb2xzIGlzIG5lZWRlZCBmb3Igd2ljLCBidXQgaWYgcm1fd29yayBpcyBlbmFibGVkLCBpdCB3aWxsCkBAIC0xOSwxNCArMjIsNSBAQAogCiBweXRob24gZG9fYnVpbGRfc3lzcm9vdCAoKSB7CiAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJleHRlbmRfcmVjaXBlX3N5c3Jvb3QiLCBkKQotCi0gICAgIyBXcml0ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdXNlZCBieSB3aWMKLSAgICAjIHRvIHRtcC9zeXNyb290cy88bWFjaGluZT4vaW1nZGF0YS93aWN0b29scy5lbnYKLSAgICBvdXRkaXIgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ1NUQUdJTkdfRElSJyksIGQuZ2V0VmFyKCdNQUNISU5FJyksICdpbWdkYXRhJykKLSAgICBiYi51dGlscy5ta2RpcmhpZXIob3V0ZGlyKQotICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ob3V0ZGlyLCAid2ljLXRvb2xzLmVudiIpLCAndycpIGFzIGVudmY6Ci0gICAgICAgIGZvciB2YXIgaW4gKCdSRUNJUEVfU1lTUk9PVF9OQVRJVkUnLCAnU1RBR0lOR19EQVRBRElSJywgJ1NUQUdJTkdfTElCRElSJyk6Ci0gICAgICAgICAgICBlbnZmLndyaXRlKCclcz0iJXMiXG4nICUgKHZhciwgZC5nZXRWYXIodmFyKS5zdHJpcCgpKSkKLQogfQogYWRkdGFzayBkb19idWlsZF9zeXNyb290IGFmdGVyIGRvX3ByZXBhcmVfcmVjaXBlX3N5c3Jvb3QgYmVmb3JlIGRvX2J1aWxkCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbXVzbC9tdXNsLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tdXNsL211c2wuaW5jCmluZGV4IDU2YzlkN2YuLjlhZjExNzIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tdXNsL211c2wuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tdXNsL211c2wuaW5jCkBAIC0yNiwzICsyNiw4IEBACiAjIERvZXNuJ3QgY29tcGlsZSBpbiBNSVBTMTZlIG1vZGUgZHVlIHRvIHVzZSBvZiBoYW5kLXdyaXR0ZW4KICMgYXNzZW1ibHkKIE1JUFNfSU5TVFJVQ1RJT05fU0VUID0gIm1pcHMiCisKKyMgdGh1bWIxIGlzIHVuc3VwcG9ydGVkCitBUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY1ID0gImFybSIKK0FSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjQgPSAiYXJtIgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbXVzbC9tdXNsX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tdXNsL211c2xfZ2l0LmJiCmluZGV4IGE4OGJjNGQuLmRiMjZiNGYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tdXNsL211c2xfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tdXNsL211c2xfZ2l0LmJiCkBAIC0zLDkgKzMsOSBAQAogCiByZXF1aXJlIG11c2wuaW5jCiAKLVNSQ1JFViA9ICI1NDgwN2Q0N2FjZWNhYjc3ODQ5OGNlZDg4Y2U4ZjYyYmZhMTZlMzc5IgorU1JDUkVWID0gImViMDNiZGUyZjI0NTgyODc0Y2I3MmI1NmM3ODExYmY1MWRhMGM4MTciCiAKLVBWID0gIjEuMS4xNitnaXQke1NSQ1BWfSIKK1BWID0gIjEuMS4xOCtnaXQke1NSQ1BWfSIKIAogIyBtaXJyb3IgaXMgYXQgZ2l0Oi8vZ2l0aHViLmNvbS9rcmFqL211c2wuZ2l0CiAKQEAgLTI4LDYgKzI4LDE0IEBACiAKIExERkxBR1MgKz0gIi1XbCwtc29uYW1lLGxpYmMuc28iCiAKKyMgV2hlbiBjb21waWxpbmcgZm9yIFRodW1iIG9yIFRodW1iMiwgZnJhbWUgcG9pbnRlcnMgX211c3RfIGJlIGRpc2FibGVkIHNpbmNlIHRoZQorIyBUaHVtYiBmcmFtZSBwb2ludGVyIGluIHI3IGNsYXNoZXMgd2l0aCBtdXNsJ3MgdXNlIG9mIGlubGluZSBhc20gdG8gbWFrZSBzeXNjYWxscworIyAod2hlcmUgcjcgaXMgdXNlZCBmb3IgdGhlIHN5c2NhbGwgTlIpLiBJbiBtb3N0IGNhc2VzLCBmcmFtZSBwb2ludGVycyB3aWxsIGJlCisjIGRpc2FibGVkIGF1dG9tYXRpY2FsbHkgZHVlIHRvIHRoZSBvcHRpbWlzYXRpb24gbGV2ZWwsIGJ1dCBhcHBlbmQgYW4gZXhwbGljaXQKKyMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIG9wdGltaXNhdGlvbiBpcyBzZXQgdG8gLU8wIG9yIGZyYW1lCisjIHBvaW50ZXJzIGhhdmUgYmVlbiBlbmFibGVkIGJ5IC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIGVhcmxpZXIgaW4gQ0ZMQUdTLCBldGMuCitDRkxBR1NfYXBwZW5kX2FybSA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfQ0NBUkdTJywgJy1tdGh1bWInLCAnLWZvbWl0LWZyYW1lLXBvaW50ZXInLCAnJywgZCl9IgorCiBDT05GSUdVUkVPUFRTID0gIiBcCiAgICAgLS1wcmVmaXg9JHtwcmVmaXh9IFwKICAgICAtLWV4ZWMtcHJlZml4PSR7ZXhlY19wcmVmaXh9IFwKQEAgLTQ5LDEwICs1NywxMSBAQAogCW9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPScke0R9JwogCiAJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJcm0gLWYgJHtEfSR7YmluZGlyfS9sZGQKIAlsbnIgJHtEfSR7bGliZGlyfS9saWJjLnNvICR7RH0ke2JpbmRpcn0vbGRkCiAJZm9yIGwgaW4gY3J5cHQgZGwgbSBwdGhyZWFkIHJlc29sdiBydCB1dGlsIHhuZXQKIAlkbwotCQlsbiAtcyBsaWJjLnNvICR7RH0ke2xpYmRpcn0vbGliJGwuc28KKwkJbG4gLXNmIGxpYmMuc28gJHtEfSR7bGliZGlyfS9saWIkbC5zbwogCWRvbmUKIH0KIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvZmlsZXMvMDAwMS10aWMtaGFuZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL2ZpbGVzLzAwMDEtdGljLWhhbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE5NzA1NgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL2ZpbGVzLzAwMDEtdGljLWhhbmcucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSBhOTU1OTBmNjc2MjA5ODMyZmUwYjI3MjI2ZTZkZTNjYjUwZTJiOTdjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxNiBBdWcgMjAxNyAxNDozMTo1MSArMDgwMAorU3ViamVjdDogW1BBVENIIDEvMl0gdGljIGhhbmcKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCisndGljJyBvZiBzb21lIGxpbnV4IGRpc3RyaWJ1dGlvbnMgKGUuZy4gZmVkb3JhIDExKSBoYW5nIGluIGFuIGluZmluaXRlCitsb29wIHdoZW4gcHJvY2Vzc2luZyB0aGUgb3JpZ2luYWwgZmlsZS4KKworU2lnbmVkLW9mZi1ieTogYW5vbnltb3VzCisKK1JlYmFzZSB0byA2LjArMjAxNzA3MTUKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIG1pc2MvdGVybWluZm8uc3JjIHwgMTEgKysrKystLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbWlzYy90ZXJtaW5mby5zcmMgYi9taXNjL3Rlcm1pbmZvLnNyYworaW5kZXggZWUzZmFiMy4uMTc2ZDU5MyAxMDA2NDQKKy0tLSBhL21pc2MvdGVybWluZm8uc3JjCisrKysgYi9taXNjL3Rlcm1pbmZvLnNyYworQEAgLTUxNzcsMTIgKzUxNzcsMTEgQEAga29uc29sZS14ZjN4fEtERSBjb25zb2xlIHdpbmRvdyB3aXRoIGtleWJvYXJkIGZvciBYRnJlZTg2IDMueCB4dGVybSwKKyAjIFRoZSB2YWx1ZSBmb3Iga2JzIHJlZmxlY3RzIGxvY2FsIGN1c3RvbWl6YXRpb24gcmF0aGVyIHRoYW4gdGhlIHNldHRpbmdzIHVzZWQKKyAjIGZvciBYRnJlZTg2IHh0ZXJtLgorIGtvbnNvbGUteGY0eHxLREUgY29uc29sZSB3aW5kb3cgd2l0aCBrZXlib2FyZCBmb3IgWEZyZWU4NiA0LnggeHRlcm0sCistCWtlbmQ9XEVPRiwga2hvbWU9XEVPSCwgdXNlPWtvbnNvbGUrcGNma2V5cywKKy0JdXNlPWtvbnNvbGUtdnQxMDAsCistIyBLb25zb2xlIGRvZXMgbm90IGltcGxlbWVudCBzaGlmdGVkIGN1cnNvci1rZXlzLgorLWtvbnNvbGUrcGNma2V5c3xrb25zb2xlIHN1YnNldCBvZiB4dGVybStwY2ZrZXlzLAorLQlrTEZUQCwga1JJVEAsIGtjYnQ9XEVbWiwga2luZEAsIGtyaUAsIGtETkAsIGtVUEAsIHVzZT14dGVybStwY2MyLAorLQl1c2U9eHRlcm0rcGNmMCwKKysJa2VuZD1cRU9GLCBrZjE9XEVPUCwga2YxMz1cRU8yUCwga2YxND1cRU8yUSwga2YxNT1cRU8yUiwKKysJa2YxNj1cRU8yUywga2YxNz1cRVsxNTsyfiwga2YxOD1cRVsxNzsyfiwga2YxOT1cRVsxODsyfiwKKysJa2YyPVxFT1EsIGtmMjA9XEVbMTk7Mn4sIGtmMjE9XEVbMjA7Mn4sIGtmMjI9XEVbMjE7Mn4sCisrCWtmMjM9XEVbMjM7Mn4sIGtmMjQ9XEVbMjQ7Mn4sIGtmMz1cRU9SLCBrZjQ9XEVPUywKKysJa2hvbWU9XEVPSCwgdXNlPWtvbnNvbGUtdnQxMDAsCisgIyBLREUncyAidnQxMDAiIGtleWJvYXJkIGhhcyBubyByZWxhdGlvbnNoaXAgdG8gYW55IHRlcm1pbmFsIHRoYXQgREVDIG1hZGUsIGJ1dAorICMgaXQgaXMgc3RpbGwgdXNlZnVsIGZvciBkZXJpdmluZyB0aGUgb3RoZXIgZW50cmllcy4KKyBrb25zb2xlLXZ0MTAwfEtERSBjb25zb2xlIHdpbmRvdyB3aXRoIHZ0MTAwIChzaWMpIGtleWJvYXJkLAorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL2ZpbGVzLzAwMDItY29uZmlndXJlLXJlcHJvZHVjaWJsZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL2ZpbGVzLzAwMDItY29uZmlndXJlLXJlcHJvZHVjaWJsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDdjZTZhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvZmlsZXMvMDAwMi1jb25maWd1cmUtcmVwcm9kdWNpYmxlLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gOTM5Yzk5NGYzNzU2YzJkNmQzY2FiMmU2YTA0ZDA1ZmE3YzJiMWQ1NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMTYgQXVnIDIwMTcgMTQ6NDU6MjcgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIGNvbmZpZ3VyZTogcmVwcm9kdWNpYmxlCisKKyJjb25maWd1cmUiIGVuZm9yY2VzIC1VIGZvciBhciBmbGFncywgYnJlYWtpbmcgZGV0ZXJtaW5pc3RpYyBidWlsZHMuCitUaGUgZmxhZyB3YXMgYWRkZWQgdG8gZml4IHNvbWUgdmFndWVseSBzcGVjaWZpZWQgInJlY2VudCBQT1NJWCBiaW51dGlsCitidWlsZCBwcm9ibGVtcyIgaW4gMjAxNS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBKdXJvIEJ5c3RyaWNreSA8anVyby5ieXN0cmlja3lAaW50ZWwuY29tPgorCitSZWJhc2UgdG8gUmViYXNlIHRvIDYuMCsyMDE3MDcxNQorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDdkN2QyYzEuLmY0NDQzNTQgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTQ0NTgsNyArNDQ1OCw3IEBAIGlmIHRlc3QgIiR7Y2ZfY3ZfYXJfZmxhZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyBlbHNlCisgCisgCWNmX2N2X2FyX2ZsYWdzPXVua25vd24KKy0JZm9yIGNmX2FyX2ZsYWdzIGluIC1jdXJ2VSAtY3VydiBjdXJ2IC1jcnYgY3J2IC1jcXYgY3F2IC1ydiBydgorKwlmb3IgY2ZfYXJfZmxhZ3MgaW4gLWN1cnYgY3VydiAtY3J2IGNydiAtY3F2IGNxdiAtcnYgcnYKKyAJZG8KKyAKKyAJCSMgY2hlY2sgaWYgJEFSRkxBR1MgYWxyZWFkeSBjb250YWlucyB0aGlzIGNob2ljZQorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL2ZpbGVzL0NWRS0yMDE3LTEzNzMyLUNWRS0yMDE3LTEzNzM0LUNWRS0yMDE3LTEzNzMwLUNWRS0yMDE3LTEzNzI5LUNWRS0yMDE3LTEzNzI4LUNWRS0yMDE3LTEzNzMxLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvZmlsZXMvQ1ZFLTIwMTctMTM3MzItQ1ZFLTIwMTctMTM3MzQtQ1ZFLTIwMTctMTM3MzAtQ1ZFLTIwMTctMTM3MjktQ1ZFLTIwMTctMTM3MjgtQ1ZFLTIwMTctMTM3MzEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE5MzMyYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL2ZpbGVzL0NWRS0yMDE3LTEzNzMyLUNWRS0yMDE3LTEzNzM0LUNWRS0yMDE3LTEzNzMwLUNWRS0yMDE3LTEzNzI5LUNWRS0yMDE3LTEzNzI4LUNWRS0yMDE3LTEzNzMxLnBhdGNoCkBAIC0wLDAgKzEsNTQxIEBACitGcm9tIDRiZjcyY2I4ZjFkM2FhNWYzM2MzMWViODE3YTVmMDMzOGY0YWFmNmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBPdmlkaXUgUGFuYWl0IDxvdmlkaXUucGFuYWl0QHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDIwIFNlcCAyMDE3IDA1OjAyOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEltcG9ydCB1cHN0cmVhbSBwYXRjaCAyMDE3MDgyNgorCisyMDE3MDgyNgorCSsgZml4ZXMgZm9yICJpdGVybTIiIChyZXBvcnQgYnkgTGVvbmFyZG8gQnJvbmRhbmkgU2NoZW5rZWwpIC1URAorCSsgY29ycmVjdGVkIGEgd2FybmluZyBmcm9tIHRpYyBhYm91dCBrZXlzIHdoaWNoIGFyZSB0aGUgc2FtZSwgdG8gc2tpcAorCSAgb3ZlciBtaXNzaW5nL2NhbmNlbGxlZCB2YWx1ZXMuCisJKyBhZGQgY2hlY2sgaW4gdGljIGZvciB1bm5lY2Vzc2FyeSB1c2Ugb2YgIjIiIHRvIGRlbm90ZSBhIHNoaWZ0ZWQKKwkgIHNwZWNpYWwga2V5LgorCSsgaW1wcm92ZSBjaGVja3MgaW4gdHJpbV9zZ3IwLCBjb21wX3BhcnNlLmMgYW5kIHBhcnNlX2VudHJ5LmMsIGZvcgorCSAgY2FuY2VsbGVkIHN0cmluZyBjYXBhYmlsaXRpZXMuCisJKyBhZGQgY2hlY2sgaW4gX25jX3BhcnNlX2VudHJ5KCkgZm9yIGludmFsaWQgZW50cnkgbmFtZSwgc2V0dGluZyB0aGUKKwkgIG5hbWUgdG8gImludmFsaWQiIHRvIGF2b2lkIHByb2JsZW1zIHN0b3JpbmcgZW50cmllcy4KKwkrIGFkZC9pbXByb3ZlIGNoZWNrcyBpbiB0aWMncyBwYXJzZXIgdG8gYWRkcmVzcyBpbnZhbGlkIGlucHV0CisJICArIGFkZCBhIGNoZWNrIGluIGNvbXBfc2Nhbi5jIHRvIGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIHdoZXJlIGEKKwkgICAgbm9udGV4dCBmaWxlIGVuZGluZyB3aXRoIGEgTlVMIHJhdGhlciB0aGFuIG5ld2xpbmUgaXMgZ2l2ZW4gdG8gdGljCisJICAgIGFzIGlucHV0IChSZWRoYXQgIzE0ODQyNzQpLgorCSAgKyBhbGxvdyBmb3IgY2FuY2VsbGVkIGNhcGFiaWxpdGllcyBpbiBfbmNfc2F2ZV9zdHIgKFJlZGhhdCAjMTQ4NDI3NikuCisJICArIGFkZCB2YWxpZGl0eSBjaGVja3MgZm9yICJ1c2U9IiB0YXJnZXQgaW4gX25jX3BhcnNlX2VudHJ5IChSZWRoYXQKKwkgICAgIzE0ODQyODQpLgorCSAgKyBjaGVjayBmb3IgaW52YWxpZCBzdHJpbmdzIGluIHBvc3Rwcm9jZXNzX3Rlcm1jYXAgKFJlZGhhdCAjMTQ4NDI4NSkKKwkgICsgcmVzZXQgc2Vjb25kYXJ5IHBvaW50ZXJzIG9uIEVPRiBpbiBuZXh0X2NoYXIoKSAoUmVkaGF0ICMxNDg0Mjg3KS4KKwkgICsgZ3VhcmQgX25jX3NhZmVfc3RyY3B5KCkgYW5kIF9uY19zYWZlX3N0cmNhdCgpIGFnYWluc3QgY2FsbHMgdXNpbmcKKwkgICAgY2FuY2VsbGVkIHN0cmluZ3MgKFJlZGhhdCAjMTQ4NDI5MSkuCisJKyBjb3JyZWN0IHR5cG8gaW4gY3Vyc19tZW1sZWFrcy4zeCAoU3ZlbiBKb2FjaGltKS4KKwkrIGltcHJvdmUgdGVzdC9jb25maWd1cmUgY2hlY2tzIGZvciBzb21lIGN1cnNlcyB2YXJpYW50cyBub3QgYmFzZWQgb24KKwkgIFgvT3BlbiBDdXJzZXMuCisJKyBhZGQgb3B0aW9ucyBmb3IgdGVzdC9jb25maWd1cmUgdG8gZGlzYWJsZSBjaGVja3MgZm9yIGZvcm0sIG1lbnUgYW5kCisJICBwYW5lbCBsaWJyYXJpZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK0NWRTogQ1ZFLTIwMTctMTM3MzIsIENWRS0yMDE3LTEzNzM0LCBDVkUtMjAxNy0xMzczMCwgQ1ZFLTIwMTctMTM3MjksIENWRS0yMDE3LTEzNzI4LCBDVkUtMjAxNy0xMzczMQorIAorCitBdXRob3I6IFN2ZW4gSm9hY2hpbSA8c3ZlbmpvYWNAZ214LmRlPgorU2lnbmVkLW9mZi1ieTogT3ZpZGl1IFBhbmFpdCA8b3ZpZGl1LnBhbmFpdEB3aW5kcml2ZXIuY29tPgorLS0tCisgZGlzdC5tayAgICAgICAgICAgICAgICAgICAgIHwgIDQgKy0KKyBpbmNsdWRlL25jdXJzZXNfZGVmcyAgICAgICAgfCAgNCArLQorIG5jdXJzZXMvdGluZm8vYWxsb2NfZW50cnkuYyB8ICA0ICstCisgbmN1cnNlcy90aW5mby9jb21wX3BhcnNlLmMgIHwgMTAgKystLS0KKyBuY3Vyc2VzL3RpbmZvL2NvbXBfc2Nhbi5jICAgfCAgNiArKy0KKyBuY3Vyc2VzL3RpbmZvL3BhcnNlX2VudHJ5LmMgfCA5MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KKyBuY3Vyc2VzL3RpbmZvL3N0cmluZ3MuYyAgICAgfCAgOSArKystLQorIG5jdXJzZXMvdGluZm8vdHJpbV9zZ3IwLmMgICB8ICA0ICstCisgcHJvZ3MvdGljLmMgICAgICAgICAgICAgICAgIHwgNzUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQorIDkgZmlsZXMgY2hhbmdlZCwgMTU3IGluc2VydGlvbnMoKyksIDUwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZGlzdC5tayBiL2Rpc3QubWsKK2luZGV4IDlhZjI2OTkuLjJjNzA0NzIgMTAwNjQ0CistLS0gYS9kaXN0Lm1rCisrKysgYi9kaXN0Lm1rCitAQCAtMjUsNyArMjUsNyBAQAorICMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworICMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLSMgJElkOiBkaXN0Lm1rLHYgMS4xMTcyIDIwMTcvMDcvMTMgMDA6MTU6MjcgdG9tIEV4cCAkCisrIyAkSWQ6IGRpc3QubWssdiAxLjExNzkgMjAxNy8wOC8yMCAxNTozMzo0MSB0b20gRXhwICQKKyAjIE1ha2VmaWxlIGZvciBjcmVhdGluZyBuY3Vyc2VzIGRpc3RyaWJ1dGlvbnMuCisgIworICMgVGhpcyBvbmx5IG5lZWRzIHRvIGJlIHVzZWQgZGlyZWN0bHkgYXMgYSBtYWtlZmlsZSBieSBkZXZlbG9wZXJzLCBidXQKK0BAIC0zNyw3ICszNyw3IEBAIFNIRUxMID0gL2Jpbi9zaAorICMgVGhlc2UgZGVmaW5lIHRoZSBtYWpvci9taW5vci9wYXRjaCB2ZXJzaW9ucyBvZiBuY3Vyc2VzLgorIE5DVVJTRVNfTUFKT1IgPSA2CisgTkNVUlNFU19NSU5PUiA9IDAKKy1OQ1VSU0VTX1BBVENIID0gMjAxNzA3MTUKKytOQ1VSU0VTX1BBVENIID0gMjAxNzA4MjYKKyAKKyAjIFdlIGRvbid0IGFwcGVuZCB0aGUgcGF0Y2ggdG8gdGhlIHZlcnNpb24sIHNpbmNlIHRoaXMgb25seSBhcHBsaWVzIHRvIHJlbGVhc2VzCisgVkVSU0lPTiA9ICQoTkNVUlNFU19NQUpPUikuJChOQ1VSU0VTX01JTk9SKQorZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmN1cnNlc19kZWZzIGIvaW5jbHVkZS9uY3Vyc2VzX2RlZnMKK2luZGV4IGU2NjExYjcuLmQyMzdkYjEgMTAwNjQ0CistLS0gYS9pbmNsdWRlL25jdXJzZXNfZGVmcworKysrIGIvaW5jbHVkZS9uY3Vyc2VzX2RlZnMKK0BAIC0xLDQgKzEsNCBAQAorLSMgJElkOiBuY3Vyc2VzX2RlZnMsdiAxLjczIDIwMTcvMDYvMjQgMTQ6MjA6NTcgdG9tIEV4cCAkCisrIyAkSWQ6IG5jdXJzZXNfZGVmcyx2IDEuNzUgMjAxNy8wOC8yMCAxNjo1MDowNCB0b20gRXhwICQKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjIENvcHlyaWdodCAoYykgMjAwMC0yMDE2LDIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKK0BAIC01MCw3ICs1MCw5IEBAIEhBVkVfQlNEX1NUUklOR19ICisgSEFWRV9CVE9XQyAKKyBIQVZFX0JVSUxUSU5fSAorIEhBVkVfQ0hHQVQJMQorK0hBVkVfQ09MT1JfQ09OVEVOVAkxCisgSEFWRV9DT0xPUl9TRVQJMQorK0hBVkVfQ1VSU0NSCTEKKyBIQVZFX0RJUkVOVF9ICisgSEFWRV9FUlJOTworIEhBVkVfRkNOVExfSAorZGlmZiAtLWdpdCBhL25jdXJzZXMvdGluZm8vYWxsb2NfZW50cnkuYyBiL25jdXJzZXMvdGluZm8vYWxsb2NfZW50cnkuYworaW5kZXggNWRlMDlmMS4uMDkzNzRkNiAxMDA2NDQKKy0tLSBhL25jdXJzZXMvdGluZm8vYWxsb2NfZW50cnkuYworKysrIGIvbmN1cnNlcy90aW5mby9hbGxvY19lbnRyeS5jCitAQCAtNDcsNyArNDcsNyBAQAorIAorICNpbmNsdWRlIDx0aWMuaD4KKyAKKy1NT0RVTEVfSUQoIiRJZDogYWxsb2NfZW50cnkuYyx2IDEuNjAgMjAxNy8wNi8yNyAyMzo0ODo1NSB0b20gRXhwICQiKQorK01PRFVMRV9JRCgiJElkOiBhbGxvY19lbnRyeS5jLHYgMS42MSAyMDE3LzA4LzI1IDA5OjA5OjA4IHRvbSBFeHAgJCIpCisgCisgI2RlZmluZSBBQlNFTlRfT0ZGU0VUICAgIC0xCisgI2RlZmluZSBDQU5DRUxMRURfT0ZGU0VUIC0yCitAQCAtOTgsNyArOTgsNyBAQCBfbmNfc2F2ZV9zdHIoY29uc3QgY2hhciAqY29uc3Qgc3RyaW5nKQorICAgICBzaXplX3Qgb2xkX25leHRfZnJlZSA9IG5leHRfZnJlZTsKKyAgICAgc2l6ZV90IGxlbjsKKyAKKy0gICAgaWYgKHN0cmluZyA9PSAwKQorKyAgICBpZiAoIVZBTElEX1NUUklORyhzdHJpbmcpKQorIAlyZXR1cm4gX25jX3NhdmVfc3RyKCIiKTsKKyAgICAgbGVuID0gc3RybGVuKHN0cmluZykgKyAxOworIAorZGlmZiAtLWdpdCBhL25jdXJzZXMvdGluZm8vY29tcF9wYXJzZS5jIGIvbmN1cnNlcy90aW5mby9jb21wX3BhcnNlLmMKK2luZGV4IDM0ZTYyMTYuLjU4MGQ0ZGYgMTAwNjQ0CistLS0gYS9uY3Vyc2VzL3RpbmZvL2NvbXBfcGFyc2UuYworKysrIGIvbmN1cnNlcy90aW5mby9jb21wX3BhcnNlLmMKK0BAIC00Nyw3ICs0Nyw3IEBACisgCisgI2luY2x1ZGUgPHRpYy5oPgorIAorLU1PRFVMRV9JRCgiJElkOiBjb21wX3BhcnNlLmMsdiAxLjk2IDIwMTcvMDQvMTUgMTU6MzY6NTggdG9tIEV4cCAkIikKKytNT0RVTEVfSUQoIiRJZDogY29tcF9wYXJzZS5jLHYgMS45OSAyMDE3LzA4LzI2IDE2OjE1OjUwIHRvbSBFeHAgJCIpCisgCisgc3RhdGljIHZvaWQgc2FuaXR5X2NoZWNrMihURVJNVFlQRTIgKiwgYm9vbCk7CisgTkNVUlNFU19JTVBFWFAgdm9pZCBOQ1VSU0VTX0FQSSgqX25jX2NoZWNrX3Rlcm10eXBlMikgKFRFUk1UWVBFMiAqLCBib29sKSA9IHNhbml0eV9jaGVjazI7CitAQCAtNTEwLDkgKzUxMCw5IEBAIHN0YXRpYyB2b2lkCisgZml4dXBfYWNzYyhURVJNVFlQRTIgKnRwLCBpbnQgbGl0ZXJhbCkKKyB7CisgICAgIGlmICghbGl0ZXJhbCkgeworLQlpZiAoYWNzX2NoYXJzID09IDAKKy0JICAgICYmIGVudGVyX2FsdF9jaGFyc2V0X21vZGUgIT0gMAorLQkgICAgJiYgZXhpdF9hbHRfY2hhcnNldF9tb2RlICE9IDApCisrCWlmIChhY3NfY2hhcnMgPT0gQUJTRU5UX1NUUklORworKwkgICAgJiYgUFJFU0VOVChlbnRlcl9hbHRfY2hhcnNldF9tb2RlKQorKwkgICAgJiYgUFJFU0VOVChleGl0X2FsdF9jaGFyc2V0X21vZGUpKQorIAkgICAgYWNzX2NoYXJzID0gc3RyZHVwKFZUX0FDU0MpOworICAgICB9CisgfQorQEAgLTU2OCw5ICs1NjgsNyBAQCBzYW5pdHlfY2hlY2syKFRFUk1UWVBFMiAqdHAsIGJvb2wgbGl0ZXJhbCkKKyAgICAgUEFJUkVEKGVudGVyX3hvbl9tb2RlLCBleGl0X3hvbl9tb2RlKTsKKyAgICAgUEFJUkVEKGVudGVyX2FtX21vZGUsIGV4aXRfYW1fbW9kZSk7CisgICAgIEFORE1JU1NJTkcobGFiZWxfb2ZmLCBsYWJlbF9vbik7CistI2lmZGVmIHJlbW92ZV9jbG9jaworICAgICBQQUlSRUQoZGlzcGxheV9jbG9jaywgcmVtb3ZlX2Nsb2NrKTsKKy0jZW5kaWYKKyAgICAgQU5ETUlTU0lORyhzZXRfY29sb3JfcGFpciwgaW5pdGlhbGl6ZV9wYWlyKTsKKyB9CisgCitkaWZmIC0tZ2l0IGEvbmN1cnNlcy90aW5mby9jb21wX3NjYW4uYyBiL25jdXJzZXMvdGluZm8vY29tcF9zY2FuLmMKK2luZGV4IDQwZDdmNmEuLmIyMDcyNTcgMTAwNjQ0CistLS0gYS9uY3Vyc2VzL3RpbmZvL2NvbXBfc2Nhbi5jCisrKysgYi9uY3Vyc2VzL3RpbmZvL2NvbXBfc2Nhbi5jCitAQCAtNTAsNyArNTAsNyBAQAorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDx0aWMuaD4KKyAKKy1NT0RVTEVfSUQoIiRJZDogY29tcF9zY2FuLmMsdiAxLjEwNiAyMDE3LzA0LzIyIDExOjQxOjEyIHRvbSBFeHAgJCIpCisrTU9EVUxFX0lEKCIkSWQ6IGNvbXBfc2Nhbi5jLHYgMS4xMDggMjAxNy8wOC8yNSAyMjo1NzoyMSB0b20gRXhwICQiKQorIAorIC8qCisgICogTWF4aW11bSBsZW5ndGggb2Ygc3RyaW5nIGNhcGFiaWxpdHkgd2UnbGwgYWNjZXB0IGJlZm9yZSByYWlzaW5nIGFuIGVycm9yLgorQEAgLTE2OCw2ICsxNjgsOCBAQCBuZXh0X2NoYXIodm9pZCkKKyAJaWYgKHJlc3VsdCAhPSAwKSB7CisgCSAgICBGcmVlQW5kTnVsbChyZXN1bHQpOworIAkgICAgRnJlZUFuZE51bGwocHVzaG5hbWUpOworKwkgICAgYnVmcHRyID0gMDsKKysJICAgIGJ1ZnN0YXJ0ID0gMDsKKyAJICAgIGFsbG9jYXRlZCA9IDA7CisgCX0KKyAJLyoKK0BAIC0yMjIsNiArMjI0LDggQEAgbmV4dF9jaGFyKHZvaWQpCisgCQl9CisgCQlpZiAoKGJ1ZnB0ciA9IGJ1ZnN0YXJ0KSAhPSAwKSB7CisgCQkgICAgdXNlZCA9IHN0cmxlbihidWZwdHIpOworKwkJICAgIGlmICh1c2VkID09IDApCisrCQkJcmV0dXJuIChFT0YpOworIAkJICAgIHdoaWxlIChpc3doaXRlKCpidWZwdHIpKSB7CisgCQkJaWYgKCpidWZwdHIgPT0gJ1x0JykgeworIAkJCSAgICBfbmNfY3Vycl9jb2wgPSAoX25jX2N1cnJfY29sIHwgNykgKyAxOworZGlmZiAtLWdpdCBhL25jdXJzZXMvdGluZm8vcGFyc2VfZW50cnkuYyBiL25jdXJzZXMvdGluZm8vcGFyc2VfZW50cnkuYworaW5kZXggM2ZhMmYyNS4uYmJiZmNiMiAxMDA2NDQKKy0tLSBhL25jdXJzZXMvdGluZm8vcGFyc2VfZW50cnkuYworKysrIGIvbmN1cnNlcy90aW5mby9wYXJzZV9lbnRyeS5jCitAQCAtNDcsNyArNDcsNyBAQAorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDx0aWMuaD4KKyAKKy1NT0RVTEVfSUQoIiRJZDogcGFyc2VfZW50cnkuYyx2IDEuODYgMjAxNy8wNi8yOCAwMDo1MzoxMiB0b20gRXhwICQiKQorK01PRFVMRV9JRCgiJElkOiBwYXJzZV9lbnRyeS5jLHYgMS45MSAyMDE3LzA4LzI2IDE2OjEzOjM0IHRvbSBFeHAgJCIpCisgCisgI2lmZGVmIExJTlQKKyBzdGF0aWMgc2hvcnQgY29uc3QgcGFyYW1ldHJpemVkW10gPQorQEAgLTE4MCw2ICsxODAsMjAgQEAgX25jX2V4dGVuZF9uYW1lcyhFTlRSWSAqIGVudHJ5cCwgY2hhciAqbmFtZSwgaW50IHRva2VuX3R5cGUpCisgfQorICNlbmRpZiAvKiBOQ1VSU0VTX1hOQU1FUyAqLworIAorK3N0YXRpYyBib29sCisrdmFsaWRfZW50cnluYW1lKGNvbnN0IGNoYXIgKm5hbWUpCisreworKyAgICBib29sIHJlc3VsdCA9IFRSVUU7CisrICAgIGludCBjaDsKKysgICAgd2hpbGUgKChjaCA9IFVDaGFyKCpuYW1lKyspKSAhPSAnXDAnKSB7CisrCWlmIChjaCA8PSAnICcgfHwgY2ggPiAnficgfHwgY2ggPT0gJy8nKSB7CisrCSAgICByZXN1bHQgPSBGQUxTRTsKKysJICAgIGJyZWFrOworKwl9CisrICAgIH0KKysgICAgcmV0dXJuIHJlc3VsdDsKKyt9CisrCisgLyoKKyAgKglpbnQKKyAgKglfbmNfcGFyc2VfZW50cnkoZW50cnksIGxpdGVyYWwsIHNpbGVudCkKK0BAIC0yMTEsNiArMjI1LDcgQEAgX25jX3BhcnNlX2VudHJ5KEVOVFJZICogZW50cnlwLCBpbnQgbGl0ZXJhbCwgYm9vbCBzaWxlbnQpCisgICAgIGludCB0b2tlbl90eXBlOworICAgICBzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSBjb25zdCAqZW50cnlfcHRyOworICAgICBjaGFyICpwdHIsICpiYXNlOworKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgICBib29sIGJhZF90Y191c2FnZSA9IEZBTFNFOworIAorICAgICB0b2tlbl90eXBlID0gX25jX2dldF90b2tlbihzaWxlbnQpOworQEAgLTI2MSw3ICsyNzYsMTIgQEAgX25jX3BhcnNlX2VudHJ5KEVOVFJZICogZW50cnlwLCBpbnQgbGl0ZXJhbCwgYm9vbCBzaWxlbnQpCisgICAgICAqIHJlc3VsdHMgaW4gdGhlIHRlcm1pbmFsIHR5cGUgZ2V0dGluZyBwcmVtYXR1cmVseSBzZXQgdG8gY29ycmVzcG9uZAorICAgICAgKiB0byB0aGF0IG9mIHRoZSBuZXh0IGVudHJ5LgorICAgICAgKi8KKy0gICAgX25jX3NldF90eXBlKF9uY19maXJzdF9uYW1lKGVudHJ5cC0+dHRlcm0udGVybV9uYW1lcykpOworKyAgICBuYW1lID0gX25jX2ZpcnN0X25hbWUoZW50cnlwLT50dGVybS50ZXJtX25hbWVzKTsKKysgICAgaWYgKCF2YWxpZF9lbnRyeW5hbWUobmFtZSkpIHsKKysJX25jX3dhcm5pbmcoImludmFsaWQgZW50cnkgbmFtZSBcIiVzXCIiLCBuYW1lKTsKKysJbmFtZSA9ICJpbnZhbGlkIjsKKysgICAgfQorKyAgICBfbmNfc2V0X3R5cGUobmFtZSk7CisgCisgICAgIC8qIGNoZWNrIGZvciBvdmVybHktbG9uZyBuYW1lcyBhbmQgYWxpYXNlcyAqLworICAgICBmb3IgKGJhc2UgPSBlbnRyeXAtPnR0ZXJtLnRlcm1fbmFtZXM7IChwdHIgPSBzdHJjaHIoYmFzZSwgJ3wnKSkgIT0gMDsKK0BAIC0yODMsMTMgKzMwMywyNCBAQCBfbmNfcGFyc2VfZW50cnkoRU5UUlkgKiBlbnRyeXAsIGludCBsaXRlcmFsLCBib29sIHNpbGVudCkKKyAJYm9vbCBpc191c2UgPSAoc3RyY21wKF9uY19jdXJyX3Rva2VuLnRrX25hbWUsICJ1c2UiKSA9PSAwKTsKKyAJYm9vbCBpc190YyA9ICFpc191c2UgJiYgKHN0cmNtcChfbmNfY3Vycl90b2tlbi50a19uYW1lLCAidGMiKSA9PSAwKTsKKyAJaWYgKGlzX3VzZSB8fCBpc190YykgeworKwkgICAgaWYgKCFWQUxJRF9TVFJJTkcoX25jX2N1cnJfdG9rZW4udGtfdmFsc3RyaW5nKQorKwkJfHwgX25jX2N1cnJfdG9rZW4udGtfdmFsc3RyaW5nWzBdID09ICdcMCcpIHsKKysJCV9uY193YXJuaW5nKCJtaXNzaW5nIG5hbWUgZm9yIHVzZS1jbGF1c2UiKTsKKysJCWNvbnRpbnVlOworKwkgICAgfSBlbHNlIGlmICghdmFsaWRfZW50cnluYW1lKF9uY19jdXJyX3Rva2VuLnRrX3ZhbHN0cmluZykpIHsKKysJCV9uY193YXJuaW5nKCJpbnZhbGlkIG5hbWUgZm9yIHVzZS1jbGF1c2UgXCIlc1wiIiwKKysJCQkgICAgX25jX2N1cnJfdG9rZW4udGtfdmFsc3RyaW5nKTsKKysJCWNvbnRpbnVlOworKwkgICAgfSBlbHNlIGlmIChlbnRyeXAtPm51c2VzID49IE1BWF9VU0VTKSB7CisrCQlfbmNfd2FybmluZygidG9vIG1hbnkgdXNlLWNsYXVzZXMsIGlnbm9yZWQgXCIlc1wiIiwKKysJCQkgICAgX25jX2N1cnJfdG9rZW4udGtfdmFsc3RyaW5nKTsKKysJCWNvbnRpbnVlOworKwkgICAgfQorIAkgICAgZW50cnlwLT51c2VzW2VudHJ5cC0+bnVzZXNdLm5hbWUgPSBfbmNfc2F2ZV9zdHIoX25jX2N1cnJfdG9rZW4udGtfdmFsc3RyaW5nKTsKKyAJICAgIGVudHJ5cC0+dXNlc1tlbnRyeXAtPm51c2VzXS5saW5lID0gX25jX2N1cnJfbGluZTsKKy0JICAgIGlmIChWQUxJRF9TVFJJTkcoZW50cnlwLT51c2VzW2VudHJ5cC0+bnVzZXNdLm5hbWUpKSB7CistCQllbnRyeXAtPm51c2VzKys7CistCQlpZiAoZW50cnlwLT5udXNlcyA+IDEgJiYgaXNfdGMpIHsKKy0JCSAgICBCQURfVENfVVNBR0UKKy0JCX0KKysJICAgIGVudHJ5cC0+bnVzZXMrKzsKKysJICAgIGlmIChlbnRyeXAtPm51c2VzID4gMSAmJiBpc190YykgeworKwkJQkFEX1RDX1VTQUdFCisgCSAgICB9CisgCX0gZWxzZSB7CisgCSAgICAvKiBub3JtYWwgdG9rZW4gbG9va3VwICovCitAQCAtNjQxLDEzICs2NzIsNiBAQCBzdGF0aWMgY29uc3QgY2hhciBDX0JTW10gPSAiXGIiOworIHN0YXRpYyBjb25zdCBjaGFyIENfSFRbXSA9ICJcdCI7CisgCisgLyoKKy0gKiBOb3RlIHRoYXQgV0FOVEVEIGFuZCBQUkVTRU5UIGFyZSBub3Qgc2ltcGxlIGludmVyc2VzISAgSWYgYSBjYXBhYmlsaXR5CistICogaGFzIGJlZW4gZXhwbGljaXRseSBjYW5jZWxsZWQsIGl0J3Mgbm90IGNvbnNpZGVyZWQgV0FOVEVELgorLSAqLworLSNkZWZpbmUgV0FOVEVEKHMpCSgocykgPT0gQUJTRU5UX1NUUklORykKKy0jZGVmaW5lIFBSRVNFTlQocykJKCgocykgIT0gQUJTRU5UX1NUUklORykgJiYgKChzKSAhPSBDQU5DRUxMRURfU1RSSU5HKSkKKy0KKy0vKgorICAqIFRoaXMgYml0IG9mIGxlZ2VyZGVtYWluIHR1cm5zIGFsbCB0aGUgdGVybWluZm8gdmFyaWFibGUgbmFtZXMgaW50bworICAqIHJlZmVyZW5jZXMgdG8gbG9jYXRpb25zIGluIHRoZSBhcnJheXMgQm9vbGVhbnMsIE51bWJlcnMsIGFuZCBTdHJpbmdzIC0tLQorICAqIHByZWNpc2VseSB3aGF0J3MgbmVlZGVkLgorQEAgLTY3MiwxMCArNjk2LDEwIEBAIHBvc3Rwcm9jZXNzX3Rlcm1jYXAoVEVSTVRZUEUyICp0cCwgYm9vbCBoYXNfYmFzZSkKKyAKKyAgICAgLyogaWYgdGhlcmUgd2FzIGEgdGMgZW50cnksIGFzc3VtZSB3ZSBwaWNrZWQgdXAgZGVmYXVsdHMgdmlhIHRoYXQgKi8KKyAgICAgaWYgKCFoYXNfYmFzZSkgeworLQlpZiAoV0FOVEVEKGluaXRfM3N0cmluZykgJiYgdGVybWNhcF9pbml0MikKKysJaWYgKFdBTlRFRChpbml0XzNzdHJpbmcpICYmIFBSRVNFTlQodGVybWNhcF9pbml0MikpCisgCSAgICBpbml0XzNzdHJpbmcgPSBfbmNfc2F2ZV9zdHIodGVybWNhcF9pbml0Mik7CisgCistCWlmIChXQU5URUQocmVzZXRfMnN0cmluZykgJiYgdGVybWNhcF9yZXNldCkKKysJaWYgKFdBTlRFRChyZXNldF8yc3RyaW5nKSAmJiBQUkVTRU5UKHRlcm1jYXBfcmVzZXQpKQorIAkgICAgcmVzZXRfMnN0cmluZyA9IF9uY19zYXZlX3N0cih0ZXJtY2FwX3Jlc2V0KTsKKyAKKyAJaWYgKFdBTlRFRChjYXJyaWFnZV9yZXR1cm4pKSB7CitAQCAtNzkwLDcgKzgxNCw3IEBAIHBvc3Rwcm9jZXNzX3Rlcm1jYXAoVEVSTVRZUEUyICp0cCwgYm9vbCBoYXNfYmFzZSkKKyAJaWYgKGluaXRfdGFicyAhPSA4ICYmIGluaXRfdGFicyAhPSBBQlNFTlRfTlVNRVJJQykKKyAJICAgIF9uY193YXJuaW5nKCJoYXJkd2FyZSB0YWJzIHdpdGggYSB3aWR0aCBvdGhlciB0aGFuIDg6ICVkIiwgaW5pdF90YWJzKTsKKyAJZWxzZSB7CistCSAgICBpZiAodGFiICYmIF9uY19jYXBjbXAodGFiLCBDX0hUKSkKKysJICAgIGlmIChQUkVTRU5UKHRhYikgJiYgX25jX2NhcGNtcCh0YWIsIENfSFQpKQorIAkJX25jX3dhcm5pbmcoImhhcmR3YXJlIHRhYnMgd2l0aCBhIG5vbi1eSSB0YWIgc3RyaW5nICVzIiwKKyAJCQkgICAgX25jX3Zpc2J1Zih0YWIpKTsKKyAJICAgIGVsc2UgeworQEAgLTg2NywxNyArODkxLDIyIEBAIHBvc3Rwcm9jZXNzX3Rlcm1jYXAoVEVSTVRZUEUyICp0cCwgYm9vbCBoYXNfYmFzZSkKKyAJICAgICAqIFRoZSBtYWdpYyBtb21lbnQgLS0gY29weSB0aGUgbWFwcGVkIGtleSBzdHJpbmcgb3ZlciwKKyAJICAgICAqIHN0cmlwcGluZyBvdXQgcGFkZGluZy4KKyAJICAgICAqLworLQkgICAgZm9yIChkcCA9IGJ1ZjIsIGJwID0gdHAtPlN0cmluZ3NbZnJvbV9wdHItPm50ZV9pbmRleF07ICpicDsgYnArKykgeworLQkJaWYgKGJwWzBdID09ICckJyAmJiBicFsxXSA9PSAnPCcpIHsKKy0JCSAgICB3aGlsZSAoKmJwICYmICpicCAhPSAnPicpIHsKKy0JCQkrK2JwOworLQkJICAgIH0KKy0JCX0gZWxzZQorLQkJICAgICpkcCsrID0gKmJwOworLQkgICAgfQorLQkgICAgKmRwID0gJ1wwJzsKKysJICAgIGJwID0gdHAtPlN0cmluZ3NbZnJvbV9wdHItPm50ZV9pbmRleF07CisrCSAgICBpZiAoVkFMSURfU1RSSU5HKGJwKSkgeworKwkJZm9yIChkcCA9IGJ1ZjI7ICpicDsgYnArKykgeworKwkJICAgIGlmIChicFswXSA9PSAnJCcgJiYgYnBbMV0gPT0gJzwnKSB7CisrCQkJd2hpbGUgKCpicCAmJiAqYnAgIT0gJz4nKSB7CisrCQkJICAgICsrYnA7CisrCQkJfQorKwkJICAgIH0gZWxzZQorKwkJCSpkcCsrID0gKmJwOworKwkJfQorKwkJKmRwID0gJ1wwJzsKKyAKKy0JICAgIHRwLT5TdHJpbmdzW3RvX3B0ci0+bnRlX2luZGV4XSA9IF9uY19zYXZlX3N0cihidWYyKTsKKysJCXRwLT5TdHJpbmdzW3RvX3B0ci0+bnRlX2luZGV4XSA9IF9uY19zYXZlX3N0cihidWYyKTsKKysJICAgIH0gZWxzZSB7CisrCQl0cC0+U3RyaW5nc1t0b19wdHItPm50ZV9pbmRleF0gPSBicDsKKysJICAgIH0KKyAJfQorIAorIAkvKgorQEAgLTg4Niw3ICs5MTUsNyBAQCBwb3N0cHJvY2Vzc190ZXJtY2FwKFRFUk1UWVBFMiAqdHAsIGJvb2wgaGFzX2Jhc2UpCisgCSAqIGdvdCBtYXBwZWQgdG8ga2ljaDEgYW5kIGltIHRvIGtJQyB0byBhdm9pZCBhIGNvbGxpc2lvbi4KKyAJICogSWYgdGhlIGRlc2NyaXB0aW9uIGhhcyBpbSBidXQgbm90IGljLCBoYWNrIGtJQyBiYWNrIHRvIGtpY2gxLgorIAkgKi8KKy0JaWYgKGZvdW5kaW0gJiYgV0FOVEVEKGtleV9pYykgJiYga2V5X3NpYykgeworKwlpZiAoZm91bmRpbSAmJiBXQU5URUQoa2V5X2ljKSAmJiBQUkVTRU5UKGtleV9zaWMpKSB7CisgCSAgICBrZXlfaWMgPSBrZXlfc2ljOworIAkgICAga2V5X3NpYyA9IEFCU0VOVF9TVFJJTkc7CisgCX0KK0BAIC05MzgsOSArOTY3LDkgQEAgcG9zdHByb2Nlc3NfdGVybWNhcChURVJNVFlQRTIgKnRwLCBib29sIGhhc19iYXNlKQorIAkgICAgYWNzX2NoYXJzID0gX25jX3NhdmVfc3RyKGJ1ZjIpOworIAkgICAgX25jX3dhcm5pbmcoImFjc2Mgc3RyaW5nIHN5bnRoZXNpemVkIGZyb20gWEVOSVggY2FwYWJpbGl0aWVzIik7CisgCX0KKy0gICAgfSBlbHNlIGlmIChhY3NfY2hhcnMgPT0gMAorLQkgICAgICAgJiYgZW50ZXJfYWx0X2NoYXJzZXRfbW9kZSAhPSAwCistCSAgICAgICAmJiBleGl0X2FsdF9jaGFyc2V0X21vZGUgIT0gMCkgeworKyAgICB9IGVsc2UgaWYgKGFjc19jaGFycyA9PSBBQlNFTlRfU1RSSU5HCisrCSAgICAgICAmJiBQUkVTRU5UKGVudGVyX2FsdF9jaGFyc2V0X21vZGUpCisrCSAgICAgICAmJiBQUkVTRU5UKGV4aXRfYWx0X2NoYXJzZXRfbW9kZSkpIHsKKyAJYWNzX2NoYXJzID0gX25jX3NhdmVfc3RyKFZUX0FDU0MpOworICAgICB9CisgfQorZGlmZiAtLWdpdCBhL25jdXJzZXMvdGluZm8vc3RyaW5ncy5jIGIvbmN1cnNlcy90aW5mby9zdHJpbmdzLmMKK2luZGV4IDM5M2Q4ZTcuLjEwZWM2YzggMTAwNjQ0CistLS0gYS9uY3Vyc2VzL3RpbmZvL3N0cmluZ3MuYworKysrIGIvbmN1cnNlcy90aW5mby9zdHJpbmdzLmMKK0BAIC0xLDUgKzEsNSBAQAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCistICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDcsMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKysgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMiwyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorQEAgLTM1LDggKzM1LDkgQEAKKyAqKi8KKyAKKyAjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKysjaW5jbHVkZSA8dGljLmg+CisgCistTU9EVUxFX0lEKCIkSWQ6IHN0cmluZ3MuYyx2IDEuOCAyMDEyLzAyLzIyIDIyOjM0OjMxIHRvbSBFeHAgJCIpCisrTU9EVUxFX0lEKCIkSWQ6IHN0cmluZ3MuYyx2IDEuOSAyMDE3LzA4LzI2IDEzOjE2OjExIHRvbSBFeHAgJCIpCisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBVc2VmdWwgc3RyaW5nIGZ1bmN0aW9ucyAoZXNwZWNpYWxseSBmb3IgbXZjdXIpCitAQCAtMTA1LDcgKzEwNiw3IEBAIF9uY19zdHJfY29weShzdHJpbmdfZGVzYyAqIGRzdCwgc3RyaW5nX2Rlc2MgKiBzcmMpCisgTkNVUlNFU19FWFBPUlQoYm9vbCkKKyBfbmNfc2FmZV9zdHJjYXQoc3RyaW5nX2Rlc2MgKiBkc3QsIGNvbnN0IGNoYXIgKnNyYykKKyB7CistICAgIGlmIChzcmMgIT0gMCkgeworKyAgICBpZiAoUFJFU0VOVChzcmMpKSB7CisgCXNpemVfdCBsZW4gPSBzdHJsZW4oc3JjKTsKKyAKKyAJaWYgKGxlbiA8IGRzdC0+c19zaXplKSB7CitAQCAtMTI2LDcgKzEyNyw3IEBAIF9uY19zYWZlX3N0cmNhdChzdHJpbmdfZGVzYyAqIGRzdCwgY29uc3QgY2hhciAqc3JjKQorIE5DVVJTRVNfRVhQT1JUKGJvb2wpCisgX25jX3NhZmVfc3RyY3B5KHN0cmluZ19kZXNjICogZHN0LCBjb25zdCBjaGFyICpzcmMpCisgeworLSAgICBpZiAoc3JjICE9IDApIHsKKysgICAgaWYgKFBSRVNFTlQoc3JjKSkgeworIAlzaXplX3QgbGVuID0gc3RybGVuKHNyYyk7CisgCisgCWlmIChsZW4gPCBkc3QtPnNfc2l6ZSkgeworZGlmZiAtLWdpdCBhL25jdXJzZXMvdGluZm8vdHJpbV9zZ3IwLmMgYi9uY3Vyc2VzL3RpbmZvL3RyaW1fc2dyMC5jCitpbmRleCA0Y2JjYjY1Li40ZDkyZDE1IDEwMDY0NAorLS0tIGEvbmN1cnNlcy90aW5mby90cmltX3NncjAuYworKysrIGIvbmN1cnNlcy90aW5mby90cmltX3NncjAuYworQEAgLTM2LDcgKzM2LDcgQEAKKyAKKyAjaW5jbHVkZSA8dGljLmg+CisgCistTU9EVUxFX0lEKCIkSWQ6IHRyaW1fc2dyMC5jLHYgMS4xNiAyMDE3LzA0LzA1IDIyOjMzOjA3IHRvbSBFeHAgJCIpCisrTU9EVUxFX0lEKCIkSWQ6IHRyaW1fc2dyMC5jLHYgMS4xNyAyMDE3LzA4LzI2IDE0OjU0OjE2IHRvbSBFeHAgJCIpCisgCisgI3VuZGVmIENVUgorICNkZWZpbmUgQ1VSIHRwLT4KK0BAIC0yNjMsNyArMjYzLDcgQEAgX25jX3RyaW1fc2dyMChURVJNVFlQRTIgKnRwKQorIAkgICAgLyoKKyAJICAgICAqIElmIHJtYWNzIGlzIGEgc3Vic3RyaW5nIG9mIHNncigwKSwgcmVtb3ZlIHRoYXQgY2h1bmsuCisgCSAgICAgKi8KKy0JICAgIGlmIChleGl0X2FsdF9jaGFyc2V0X21vZGUgIT0gMCkgeworKwkgICAgaWYgKFBSRVNFTlQoZXhpdF9hbHRfY2hhcnNldF9tb2RlKSkgeworIAkJVFIoVFJBQ0VfREFUQUJBU0UsICgic2NhbiBmb3Igcm1hY3MgJXMiLCBfbmNfdmlzYnVmKGV4aXRfYWx0X2NoYXJzZXRfbW9kZSkpKTsKKyAJCWogPSBzdHJsZW4ob2ZmKTsKKyAJCWsgPSBzdHJsZW4oZXhpdF9hbHRfY2hhcnNldF9tb2RlKTsKK2RpZmYgLS1naXQgYS9wcm9ncy90aWMuYyBiL3Byb2dzL3RpYy5jCitpbmRleCBjNWQ3OGU1Li42ZGQ0Njc4IDEwMDY0NAorLS0tIGEvcHJvZ3MvdGljLmMKKysrKyBiL3Byb2dzL3RpYy5jCitAQCAtNDgsNyArNDgsNyBAQAorICNpbmNsdWRlIDxwYXJhbWV0cml6ZWQuaD4KKyAjaW5jbHVkZSA8dHJhbnNmb3JtLmg+CisgCistTU9EVUxFX0lEKCIkSWQ6IHRpYy5jLHYgMS4yMzMgMjAxNy8wNy8xNSAxNzo0MDoxOSB0b20gRXhwICQiKQorK01PRFVMRV9JRCgiJElkOiB0aWMuYyx2IDEuMjQzIDIwMTcvMDgvMjYgMjA6NTY6NTUgdG9tIEV4cCAkIikKKyAKKyAjZGVmaW5lIFNURElOX05BTUUgIjxzdGRpbj4iCisgCitAQCAtNjIsNiArNjIsMTAgQEAgc3RhdGljIGJvb2wgc2hvd3N1bW1hcnkgPSBGQUxTRTsKKyBzdGF0aWMgY2hhciAqKm5hbWVsc3QgPSAwOworIHN0YXRpYyBjb25zdCBjaGFyICp0b19yZW1vdmU7CisgCisrI2lmIE5DVVJTRVNfWE5BTUVTCisrc3RhdGljIGJvb2wgdXNpbmdfZXh0ZW5zaW9ucyA9IEZBTFNFOworKyNlbmRpZgorKworIHN0YXRpYyB2b2lkICgqc2F2ZV9jaGVja190ZXJtdHlwZSkgKFRFUk1UWVBFMiAqLCBib29sKTsKKyBzdGF0aWMgdm9pZCBjaGVja190ZXJtdHlwZShURVJNVFlQRTIgKnR0LCBib29sKTsKKyAKK0BAIC04NTAsNiArODU0LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkgICAgLyogRkFMTFRIUlUgKi8KKyAJY2FzZSAneCc6CisgCSAgICB1c2VfZXh0ZW5kZWRfbmFtZXMoVFJVRSk7CisrCSAgICB1c2luZ19leHRlbnNpb25zID0gVFJVRTsKKyAJICAgIGJyZWFrOworICNlbmRpZgorIAlkZWZhdWx0OgorQEAgLTI0MDUsMTAgKzI0MTAsMTcgQEAgY2hlY2tfY29uZmxpY3QoVEVSTVRZUEUyICp0cCkKKyAJICAgIGNvbnN0IGNoYXIgKmEgPSBnaXZlbltqXS52YWx1ZTsKKyAJICAgIGJvb2wgZmlyc3QgPSBUUlVFOworIAorKwkgICAgaWYgKCFWQUxJRF9TVFJJTkcoYSkpCisrCQljb250aW51ZTsKKysKKyAJICAgIGZvciAoayA9IGogKyAxOyBnaXZlbltrXS5rZXljb2RlOyBrKyspIHsKKyAJCWNvbnN0IGNoYXIgKmIgPSBnaXZlbltrXS52YWx1ZTsKKysKKysJCWlmICghVkFMSURfU1RSSU5HKGIpKQorKwkJICAgIGNvbnRpbnVlOworIAkJaWYgKGNoZWNrW2tdKQorIAkJICAgIGNvbnRpbnVlOworKworIAkJaWYgKCFfbmNfY2FwY21wKGEsIGIpKSB7CisgCQkgICAgY2hlY2tbal0gPSAxOworIAkJICAgIGNoZWNrW2tdID0gMTsKK0BAIC0yNDMxLDYgKzI0NDMsNjcgQEAgY2hlY2tfY29uZmxpY3QoVEVSTVRZUEUyICp0cCkKKyAJICAgIGlmICghZmlyc3QpCisgCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgCX0KKysjaWYgTkNVUlNFU19YTkFNRVMKKysJaWYgKHVzaW5nX2V4dGVuc2lvbnMpIHsKKysJICAgIC8qICpJTkRFTlQtT0ZGKiAqLworKwkgICAgc3RhdGljIHN0cnVjdCB7CisrCQljb25zdCBjaGFyICp4Y3Vyc2VzOworKwkJY29uc3QgY2hhciAqc2hpZnRlZDsKKysJICAgIH0gdGFibGVbXSA9IHsKKysJCXsgImtEQyIsICBOVUxMIH0sCisrCQl7ICJrRE4iLCAgImtpbmQiIH0sCisrCQl7ICJrRU5EIiwgTlVMTCB9LAorKwkJeyAia0hPTSIsIE5VTEwgfSwKKysJCXsgImtMRlQiLCBOVUxMIH0sCisrCQl7ICJrTlhUIiwgTlVMTCB9LAorKwkJeyAia1BSViIsIE5VTEwgfSwKKysJCXsgImtSSVQiLCBOVUxMIH0sCisrCQl7ICJrVVAiLCAgImtyaSIgfSwKKysJCXsgTlVMTCwgICBOVUxMIH0sCisrCSAgICB9OworKwkgICAgLyogKklOREVOVC1PTiogKi8KKysKKysJICAgIC8qCisrCSAgICAgKiBTVnI0IGN1cnNlcyBkZWZpbmVzIHRoZSAieGN1cnNlcyIgbmFtZXMgbGlzdGVkIGFib3ZlIGV4Y2VwdCBmb3IKKysJICAgICAqIHRoZSBzcGVjaWFsIGNhc2VzIGluIHRoZSAic2hpZnRlZCIgY29sdW1uLiAgV2hlbiB1c2luZyB0aGVzZQorKwkgICAgICogbmFtZXMgZm9yIHh0ZXJtJ3MgZXh0ZW5zaW9ucywgdGhhdCB3YXMgY29uZnVzaW5nLCBhbmQgcmVzdWx0ZWQKKysJICAgICAqIGluIGFkZGluZyBleHRlbmRlZCBjYXBhYmlsaXRpZXMgd2l0aCAiMiIgKHNoaWZ0KSBzdWZmaXguICBUaGlzCisrCSAgICAgKiBjaGVjayB3YXJucyBhYm91dCB1bm5lY2Vzc2FyeSB1c2Ugb2YgZXh0ZW5zaW9ucyBmb3IgdGhpcyBxdWlyay4KKysJICAgICAqLworKwkgICAgZm9yIChqID0gMDsgZ2l2ZW5bal0ua2V5Y29kZTsgKytqKSB7CisrCQljb25zdCBjaGFyICpmaW5kID0gZ2l2ZW5bal0ubmFtZTsKKysJCWludCB2YWx1ZTsKKysJCWNoYXIgY2g7CisrCisrCQlpZiAoIVZBTElEX1NUUklORyhnaXZlbltqXS52YWx1ZSkpCisrCQkgICAgY29udGludWU7CisrCisrCQlmb3IgKGsgPSAwOyB0YWJsZVtrXS54Y3Vyc2VzOyArK2spIHsKKysJCSAgICBjb25zdCBjaGFyICp0ZXN0ID0gdGFibGVba10ueGN1cnNlczsKKysJCSAgICBzaXplX3Qgc2l6ZSA9IHN0cmxlbih0ZXN0KTsKKysKKysJCSAgICBpZiAoIXN0cm5jbXAoZmluZCwgdGVzdCwgc2l6ZSkgJiYgc3RyY21wKGZpbmQsIHRlc3QpKSB7CisrCQkJc3dpdGNoIChzc2NhbmYoZmluZCArIHNpemUsICIlZCVjIiwgJnZhbHVlLCAmY2gpKSB7CisrCQkJY2FzZSAxOgorKwkJCSAgICBpZiAodmFsdWUgPT0gMikgeworKwkJCQlfbmNfd2FybmluZygiZXhwZWN0ZWQgJyVzJyByYXRoZXIgdGhhbiAnJXMnIiwKKysJCQkJCSAgICAodGFibGVba10uc2hpZnRlZAorKwkJCQkJICAgICA/IHRhYmxlW2tdLnNoaWZ0ZWQKKysJCQkJCSAgICAgOiB0ZXN0KSwgZmluZCk7CisrCQkJICAgIH0gZWxzZSBpZiAodmFsdWUgPCAyIHx8IHZhbHVlID4gMTUpIHsKKysJCQkJX25jX3dhcm5pbmcoImV4cGVjdGVkIG51bWVyaWMgMi4uMTUgJyVzJyIsIGZpbmQpOworKwkJCSAgICB9CisrCQkJICAgIGJyZWFrOworKwkJCWRlZmF1bHQ6CisrCQkJICAgIF9uY193YXJuaW5nKCJleHBlY3RlZCBudW1lcmljIHN1ZmZpeCBmb3IgJyVzJyIsIGZpbmQpOworKwkJCSAgICBicmVhazsKKysJCQl9CisrCQkJYnJlYWs7CisrCQkgICAgfQorKwkJfQorKwkgICAgfQorKwl9CisrI2VuZGlmCisgCWZyZWUoZ2l2ZW4pOworIAlmcmVlKGNoZWNrKTsKKyAgICAgfQorLS0gCisyLjEwLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvZmlsZXMvY29uZmlndXJlLXJlcHJvZHVjaWJsZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL2ZpbGVzL2NvbmZpZ3VyZS1yZXByb2R1Y2libGUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0YThiZGMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvZmlsZXMvY29uZmlndXJlLXJlcHJvZHVjaWJsZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSJjb25maWd1cmUiIGVuZm9yY2VzIC1VIGZvciBhciBmbGFncywgYnJlYWtpbmcgZGV0ZXJtaW5pc3RpYyBidWlsZHMuCi1UaGUgZmxhZyB3YXMgYWRkZWQgdG8gZml4IHNvbWUgdmFndWVseSBzcGVjaWZpZWQgInJlY2VudCBQT1NJWCBiaW51dGlsCi1idWlsZCBwcm9ibGVtcyIgaW4gMjAxNS4gCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotU2lnbmVkLW9mZi1ieTogSnVybyBCeXN0cmlja3kgPGp1cm8uYnlzdHJpY2t5QGludGVsLmNvbT4KLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQotaW5kZXggN2YzMTIwOC4uYWE4MDkxMSAxMDA3NTUKLS0tLSBhL2NvbmZpZ3VyZQotKysrIGIvY29uZmlndXJlCi1AQCAtNDQyOCw3ICs0NDI4LDcgQEAgaWYgdGVzdCAiJHtjZl9jdl9hcl9mbGFncytzZXR9IiA9IHNldDsgdGhlbgotIGVsc2UKLSAKLSAJY2ZfY3ZfYXJfZmxhZ3M9dW5rbm93bgotLQlmb3IgY2ZfYXJfZmxhZ3MgaW4gLWN1cnZVIC1jdXJ2IGN1cnYgLWNydiBjcnYgLWNxdiBjcXYgLXJ2IHJ2Ci0rCWZvciBjZl9hcl9mbGFncyBpbiAtY3VydiBjdXJ2IC1jcnYgY3J2IC1jcXYgY3F2IC1ydiBydgotIAlkbwotIAotIAkJIyBjaGVjayBpZiAkQVJGTEFHUyBhbHJlYWR5IGNvbnRhaW5zIHRoaXMgY2hvaWNlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9maWxlcy9maXgtY2ZsYWdzLW1hbmdsZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL2ZpbGVzL2ZpeC1jZmxhZ3MtbWFuZ2xlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTQ0N2M1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL2ZpbGVzL2ZpeC1jZmxhZ3MtbWFuZ2xlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotY29uZmlndXJlIGhhcyBhIHBpZWNlIG9mIGxvZ2ljIHRvIGRldGVjdCB1c2VycyAiYWJ1c2luZyIgQ0MgdG8gaG9sZCBjb21waWxlcgotZmxhZ3MgKHdoaWNoIHdlIGRvKS4gIEl0IGFsc28gaGFzIGxvZ2ljIHRvICJjb3JyZWN0IiB0aGlzIGJ5IG1vdmluZyB0aGUgZmxhZ3MKLWZyb20gQ0MgdG8gQ0ZMQUdTLCBidXQgdGhlIHNlZCBvbmx5IGhhbmRsZXMgYSBzaW5nbGUgYXJndW1lbnQgaW4gQ0MuCi0KLVJlcGxhY2UgdGhlIHNlZCB3aXRoIGF3ayB0byBmaWx0ZXIgb3V0IGFsbCB3b3JkcyB0aGF0IHN0YXJ0IHdpdGggYSBoeXBoZW4uCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQotaW5kZXggN2YzMTIwOC4uMWEyOWNmYyAxMDA3NTUKLS0tLSBhL2NvbmZpZ3VyZQotKysrIGIvY29uZmlndXJlCi1AQCAtMjE5MSwyICsyMTkxLDIgQEAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiB5b3VyIGVudmlyb25tZW50IG1pc3VzZXMgdGhlIENDIHZhcmlhYmxlIHRvIGhvbGQgQ0ZMQUdTL0MKLS0JY2ZfZmxhZ3M9YGVjaG8gIiRDQyIgfCBzZWQgLWUgJ3MvXi4qWyAJXVwoLVteIAldXCkvXDEvJ2AKLS0JQ0M9YGVjaG8gIiRDQyAiIHwgc2VkIC1lICdzL1sgCV0tW14gCV0uKiQvLycgLWUgJ3MvWyAJXSokLy8nYAotKwljZl9mbGFncz1gZWNobyAiJENDIiB8IGF3ayAgJ0JFR0lOe09SUz0iICI7UlM9IiAifSAvXi0uKy8ge3ByaW50ICQxfSdgCi0rCUNDPWBlY2hvICIkQ0MgIiB8IGF3ayAgJ0JFR0lOe09SUz0iICI7UlM9IiAifSAvXlteLV0uKy8ge3ByaW50ICQxfSdgCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9maWxlcy90aWMtaGFuZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL2ZpbGVzL3RpYy1oYW5nLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmE4OWQyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL2ZpbGVzL3RpYy1oYW5nLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQotCi0ndGljJyBvZiBzb21lIGxpbnV4IGRpc3RyaWJ1dGlvbnMgKGUuZy4gZmVkb3JhIDExKSBoYW5nIGluIGFuIGluZmluaXRlCi1sb29wIHdoZW4gcHJvY2Vzc2luZyB0aGUgb3JpZ2luYWwgZmlsZS4KLQotSW5kZXg6IG5jdXJzZXMtNS43L21pc2MvdGVybWluZm8uc3JjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gbmN1cnNlcy01Ljcub3JpZy9taXNjL3Rlcm1pbmZvLnNyYwotKysrIG5jdXJzZXMtNS43L21pc2MvdGVybWluZm8uc3JjCi1AQCAtMzcwNiwxMiArMzcwNiwxMSBAQCBrb25zb2xlLXhmM3h8S0RFIGNvbnNvbGUgd2luZG93IHdpdGgga2V5Ci0gIyBUaGUgdmFsdWUgZm9yIGticyByZWZsZWN0cyBsb2NhbCBjdXN0b21pemF0aW9uIHJhdGhlciB0aGFuIHRoZSBzZXR0aW5ncyB1c2VkCi0gIyBmb3IgWEZyZWU4NiB4dGVybS4KLSBrb25zb2xlLXhmNHh8S0RFIGNvbnNvbGUgd2luZG93IHdpdGgga2V5Ym9hcmQgZm9yIFhGcmVlODYgNC54IHh0ZXJtLAotLQlrZW5kPVxFT0YsIGtob21lPVxFT0gsIHVzZT1rb25zb2xlK3BjZmtleXMsCi0tCXVzZT1rb25zb2xlLXZ0MTAwLAotLSMgS29uc29sZSBkb2VzIG5vdCBpbXBsZW1lbnQgc2hpZnRlZCBjdXJzb3Ita2V5cy4KLS1rb25zb2xlK3BjZmtleXN8a29uc29sZSBzdWJzZXQgb2YgeHRlcm0rcGNma2V5cywKLS0Ja0xGVEAsIGtSSVRALCBrY2J0PVxFW1osIGtpbmRALCBrcmlALCBrRE5ALCBrVVBALCB1c2U9eHRlcm0rcGNjMiwKLS0JdXNlPXh0ZXJtK3BjZjAsCi0rCWtlbmQ9XEVPRiwga2YxPVxFT1AsIGtmMTM9XEVPMlAsIGtmMTQ9XEVPMlEsIGtmMTU9XEVPMlIsCi0rCWtmMTY9XEVPMlMsIGtmMTc9XEVbMTU7Mn4sIGtmMTg9XEVbMTc7Mn4sIGtmMTk9XEVbMTg7Mn4sCi0rCWtmMj1cRU9RLCBrZjIwPVxFWzE5OzJ+LCBrZjIxPVxFWzIwOzJ+LCBrZjIyPVxFWzIxOzJ+LAotKwlrZjIzPVxFWzIzOzJ+LCBrZjI0PVxFWzI0OzJ+LCBrZjM9XEVPUiwga2Y0PVxFT1MsCi0rCWtob21lPVxFT0gsIHVzZT1rb25zb2xlLXZ0MTAwLAotICMgS0RFJ3MgInZ0MTAwIiBrZXlib2FyZCBoYXMgbm8gcmVsYXRpb25zaGlwIHRvIGFueSB0ZXJtaW5hbCB0aGF0IERFQyBtYWRlLCBidXQKLSAjIGl0IGlzIHN0aWxsIHVzZWZ1bCBmb3IgZGVyaXZpbmcgdGhlIG90aGVyIGVudHJpZXMuCi0ga29uc29sZS12dDEwMHxLREUgY29uc29sZSB3aW5kb3cgd2l0aCB2dDEwMCAoc2ljKSBrZXlib2FyZCwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXNfNi4wKzIwMTYxMTI2LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlc182LjArMjAxNjExMjYuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjZTMxMDguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlc182LjArMjAxNjExMjYuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1yZXF1aXJlIG5jdXJzZXMuaW5jCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly90aWMtaGFuZy5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vZml4LWNmbGFncy1tYW5nbGUucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2NvbmZpZy5jYWNoZSBcCi0gICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLXJlcHJvZHVjaWJsZS5wYXRjaCBcCi0iCi0jIGNvbW1pdCBpZCBjb3JyZXNwb25kcyB0byB0aGUgcmV2aXNpb24gaW4gcGFja2FnZSB2ZXJzaW9uCi1TUkNSRVYgPSAiM2RiMGJkMTljYjUwZTNkOWI0ZjJjZjE1YjdhMTAyZmUxMTMwMjA2OCIKLVMgPSAiJHtXT1JLRElSfS9naXQiCi1FWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1hYmktdmVyc2lvbj01IgotVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAiKD9QPHB2ZXI+XGQrKFwuXGQrKSsoXCtcZCspKikiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9uY3Vyc2VzXzYuMCsyMDE3MDcxNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXNfNi4wKzIwMTcwNzE1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZGE1ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9uY3Vyc2VzXzYuMCsyMDE3MDcxNS5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIG5jdXJzZXMuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLXRpYy1oYW5nLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAyLWNvbmZpZ3VyZS1yZXByb2R1Y2libGUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2NvbmZpZy5jYWNoZSBcCisgICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTM3MzItQ1ZFLTIwMTctMTM3MzQtQ1ZFLTIwMTctMTM3MzAtQ1ZFLTIwMTctMTM3MjktQ1ZFLTIwMTctMTM3MjgtQ1ZFLTIwMTctMTM3MzEucGF0Y2ggXAorIgorIyBjb21taXQgaWQgY29ycmVzcG9uZHMgdG8gdGhlIHJldmlzaW9uIGluIHBhY2thZ2UgdmVyc2lvbgorU1JDUkVWID0gIjUyNjgxYTZhMWExOGI0ZDZlYjFhNzE2NTEyZDBkZDgyN2JkNzFjODciCitTID0gIiR7V09SS0RJUn0vZ2l0IgorRVhUUkFfT0VDT05GICs9ICItLXdpdGgtYWJpLXZlcnNpb249NSIKK1VQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gIig/UDxwdmVyPlxkKyhcLlxkKykrKFwrXGQrKSopIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL292bWYvb3ZtZi1zaGVsbC1pbWFnZS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9vdm1mL292bWYtc2hlbGwtaW1hZ2UuYmIKaW5kZXggMDI5NTQ3Yi4uMGQyYjhiZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL292bWYvb3ZtZi1zaGVsbC1pbWFnZS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvb3ZtZi9vdm1mLXNoZWxsLWltYWdlLmJiCkBAIC0xLDEwICsxLDEzIEBACiBERVNDUklQVElPTiA9ICJib290IGltYWdlIHdpdGggVUVGSSBzaGVsbCBhbmQgdG9vbHMiCiAKICMgRm9yIHRoaXMgaW1hZ2UgcmVjaXBlLCBvbmx5IHRoZSB3aWMgZm9ybWF0IHdpdGggYQotIyBzaW5nbGUgdmZhdCBwYXJ0aXRpb24gbWFrZXMgc2Vuc2UuCisjIHNpbmdsZSB2ZmF0IHBhcnRpdGlvbiBtYWtlcyBzZW5zZS4gQmVjYXVzZSB3ZSBoYXZlIG5vCisjIGJvb3QgbG9hZGVyIGFuZCBubyByb290ZnMgcGFydGl0aW9uLCBub3QgYWRkaXRpb25hbAorIyB0b29scyBhcmUgbmVlZGVkIGZvciB0aGlzIC53a3MgZmlsZS4KIElNQUdFX0ZTVFlQRVNfZm9yY2V2YXJpYWJsZSA9ICd3aWMnCi0KIFdLU19GSUxFID0gIm92bWYvb3ZtZi1zaGVsbC1pbWFnZS53a3MiCitXS1NfRklMRV9ERVBFTkRTID0gIiIKKwogaW5oZXJpdCBpbWFnZQogCiAjIFdlIHdhbnQgYSBtaW5pbWFsIGltYWdlIHdpdGgganVzdCBvdm1mLXNoZWxsLWVmaSB1bnBhY2tlZCBpbiBpdC4gV2UKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9vdm1mL292bWYvMDAwMS1NZGVNb2R1bGVQa2ctVWVmaUhpaUxpYi1GaXgtaW5jb3JyZWN0LWNvbXBhcmlzb24tZXhwLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL292bWYvb3ZtZi8wMDAxLU1kZU1vZHVsZVBrZy1VZWZpSGlpTGliLUZpeC1pbmNvcnJlY3QtY29tcGFyaXNvbi1leHAucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZDdhNDYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL292bWYvb3ZtZi8wMDAxLU1kZU1vZHVsZVBrZy1VZWZpSGlpTGliLUZpeC1pbmNvcnJlY3QtY29tcGFyaXNvbi1leHAucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi1Gcm9tIDczNjkyNzEwZDUwZGExZjQyMWIwZTZkZGZmNzg0Y2EzMTM1Mzg5YjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBEYW5kYW4gQmkgPGRhbmRhbi5iaUBpbnRlbC5jb20+Ci1EYXRlOiBTYXQsIDEgQXByIDIwMTcgMTA6MzE6MTQgKzA4MDAKLVN1YmplY3Q6IFtQQVRDSF0gTWRlTW9kdWxlUGtnL1VlZmlIaWlMaWI6Rml4IGluY29ycmVjdCBjb21wYXJpc29uIGV4cHJlc3Npb24KLQotRml4IHRoZSBpbmNvcnJlY3QgY29tcGFyaXNvbiBiZXR3ZWVuIHBvaW50ZXIgYW5kIGNvbnN0YW50IHplcm8gY2hhcmFjdGVyLgotCi1odHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTQxNgotCi1WMjogVGhlIHBvaW50ZXIgU3RyaW5nUHRyIHBvaW50cyB0byBhIHN0cmluZyByZXR1cm5lZAotYnkgRXh0cmFjdENvbmZpZy9FeHBvcnRDb25maWcsIGlmIGl0IGlzIE5VTEwsIGZ1bmN0aW9uCi1JbnRlcm5hbEhpaUlmclZhbHVlQWN0aW9uIHdpbGwgcmV0dXJuIEZBTFNFLiBTbyBpbgotY3VycmVudCB1c2FnZSBtb2RlbCwgdGhlIFN0cmluZ1B0ciBjYW4gbm90IGJlIE5VTEwgYmVmb3JlCi11c2luZyBpdCwgc28gd2UgY2FuIGFkZCBBU1NFUlQgaGVyZS4KLQotQ2M6IEVyaWMgRG9uZyA8ZXJpYy5kb25nQGludGVsLmNvbT4KLUNjOiBMaW1pbmcgR2FvIDxsaW1pbmcuZ2FvQGludGVsLmNvbT4KLUNvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFncmVlbWVudCAxLjAKLVNpZ25lZC1vZmYtYnk6IERhbmRhbiBCaSA8ZGFuZGFuLmJpQGludGVsLmNvbT4KLVJldmlld2VkLWJ5OiBFcmljIERvbmcgPGVyaWMuZG9uZ0BpbnRlbC5jb20+Ci0tLS0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotIE1kZU1vZHVsZVBrZy9MaWJyYXJ5L1VlZmlIaWlMaWIvSGlpTGliLmMgfCA1ICsrKy0tCi0gMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotSW5kZXg6IGdpdC9NZGVNb2R1bGVQa2cvTGlicmFyeS9VZWZpSGlpTGliL0hpaUxpYi5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvTWRlTW9kdWxlUGtnL0xpYnJhcnkvVWVmaUhpaUxpYi9IaWlMaWIuYwotKysrIGdpdC9NZGVNb2R1bGVQa2cvTGlicmFyeS9VZWZpSGlpTGliL0hpaUxpYi5jCi1AQCAtMjE4MCw2ICsyMTgwLDggQEAgSW50ZXJuYWxIaWlJZnJWYWx1ZUFjdGlvbiAoCi0gICB9DQotICAgDQotICAgU3RyaW5nUHRyID0gQ29uZmlnQWx0UmVzcDsNCi0rCi0rICBBU1NFUlQgKFN0cmluZ1B0ciAhPSBOVUxMKTsNCi0gICANCi0gICB3aGlsZSAoU3RyaW5nUHRyICE9IEwnXDAnKSB7DQotICAgICAvLw0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9vdm1mL292bWYvMDAwMS1pYTMyLURvbnQtdXNlLXBpZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9vdm1mL292bWYvMDAwMS1pYTMyLURvbnQtdXNlLXBpZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmI0MThiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL292bWYvb3ZtZi8wMDAxLWlhMzItRG9udC11c2UtcGllLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gZjY1ZTljYzAyNTI3ODM4N2I0OTRjMjM4M2M1ZDlmZjNiZWQ5ODY4NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDExIEp1biAyMDE3IDAwOjQ3OjI0IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGlhMzI6IERvbnQgdXNlIC1waWUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBCYXNlVG9vbHMvQ29uZi90b29sc19kZWYudGVtcGxhdGUgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitJbmRleDogZ2l0L0Jhc2VUb29scy9Db25mL3Rvb2xzX2RlZi50ZW1wbGF0ZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL0Jhc2VUb29scy9Db25mL3Rvb2xzX2RlZi50ZW1wbGF0ZQorKysrIGdpdC9CYXNlVG9vbHMvQ29uZi90b29sc19kZWYudGVtcGxhdGUKK0BAIC00MzM2LDcgKzQzMzYsNyBAQCBSRUxFQVNFXypfKl9PQkpDT1BZX0FERERFQlVHRkxBRyAgID0KKyBOT09QVF8qXypfT0JKQ09QWV9BRERERUJVR0ZMQUcgICAgID0gLS1hZGQtZ251LWRlYnVnbGluaz0kKERFQlVHX0RJUikvJChNT0RVTEVfTkFNRSkuZGVidWcNCisgDQorIERFRklORSBHQ0NfQUxMX0NDX0ZMQUdTICAgICAgICAgICAgPSAtZyAtT3MgLWZzaG9ydC13Y2hhciAtZm5vLWJ1aWx0aW4gLWZuby1zdHJpY3QtYWxpYXNpbmcgLVdhbGwgLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyAtaW5jbHVkZSBBdXRvR2VuLmggLWZuby1jb21tb24NCistREVGSU5FIEdDQ19JQTMyX0NDX0ZMQUdTICAgICAgICAgICA9IERFRihHQ0NfQUxMX0NDX0ZMQUdTKSAtbTMyIC1tYWxpZ24tZG91YmxlIC1mcmVvcmRlci1ibG9ja3MgLWZyZW9yZGVyLWJsb2Nrcy1hbmQtcGFydGl0aW9uIC1PMiAtbW5vLXN0YWNrLWFyZy1wcm9iZQ0KKytERUZJTkUgR0NDX0lBMzJfQ0NfRkxBR1MgICAgICAgICAgID0gREVGKEdDQ19BTExfQ0NfRkxBR1MpIC1tMzIgLW1hbGlnbi1kb3VibGUgLWZyZW9yZGVyLWJsb2NrcyAtZnJlb3JkZXItYmxvY2tzLWFuZC1wYXJ0aXRpb24gLU8yIC1tbm8tc3RhY2stYXJnLXByb2JlIC1mbm8tUElFIC1uby1waWUNCisgREVGSU5FIEdDQ19YNjRfQ0NfRkxBR1MgICAgICAgICAgICA9IERFRihHQ0NfQUxMX0NDX0ZMQUdTKSAtbW5vLXJlZC16b25lIC1Xbm8tYWRkcmVzcyAtbW5vLXN0YWNrLWFyZy1wcm9iZQ0KKyBERUZJTkUgR0NDX0lQRl9DQ19GTEFHUyAgICAgICAgICAgID0gREVGKEdDQ19BTExfQ0NfRkxBR1MpIC1taW5saW5lLWludC1kaXZpZGUtbWluLWxhdGVuY3kNCisgREVGSU5FIEdDQ19BUk1fQ0NfRkxBR1MgICAgICAgICAgICA9IERFRihHQ0NfQUxMX0NDX0ZMQUdTKSAtbWxpdHRsZS1lbmRpYW4gLW1hYmk9YWFwY3MgLWZuby1zaG9ydC1lbnVtcyAtZnVuc2lnbmVkLWNoYXIgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVduby1hZGRyZXNzIC1tdGh1bWIgLW1mbG9hdC1hYmk9c29mdCAtZm5vLXBpYyAtZm5vLXBpZQ0KK0BAIC00MzY5LDkgKzQzNjksOSBAQCBERUZJTkUgR0NDX0FSTV9SQ19GTEFHUyAgICAgICAgICAgID0gLUkKKyBERUZJTkUgR0NDX0FBUkNINjRfUkNfRkxBR1MgICAgICAgID0gLUkgYmluYXJ5IC1PIGVsZjY0LWxpdHRsZWFhcmNoNjQgLUIgYWFyY2g2NCAtLXJlbmFtZS1zZWN0aW9uIC5kYXRhPS5oaWkNCisgDQorIERFRklORSBHQ0M0NF9BTExfQ0NfRkxBR1MgICAgICAgICAgICA9IC1nIC1mc2hvcnQtd2NoYXIgLWZuby1idWlsdGluIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1XYWxsIC1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWluY2x1ZGUgQXV0b0dlbi5oIC1mbm8tY29tbW9uIC1EU1RSSU5HX0FSUkFZX05BTUU9JChCQVNFX05BTUUpU3RyaW5ncw0KKy1ERUZJTkUgR0NDNDRfSUEzMl9DQ19GTEFHUyAgICAgICAgICAgPSBERUYoR0NDNDRfQUxMX0NDX0ZMQUdTKSAtbTMyIC1tYXJjaD1pNTg2IC1tYWxpZ24tZG91YmxlIC1mbm8tc3RhY2stcHJvdGVjdG9yIC1EIEVGSTMyIC1mbm8tYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMNCisrREVGSU5FIEdDQzQ0X0lBMzJfQ0NfRkxBR1MgICAgICAgICAgID0gREVGKEdDQzQ0X0FMTF9DQ19GTEFHUykgLW0zMiAtbWFyY2g9aTU4NiAtbWFsaWduLWRvdWJsZSAtZm5vLXN0YWNrLXByb3RlY3RvciAtRCBFRkkzMiAtZm5vLWFzeW5jaHJvbm91cy11bndpbmQtdGFibGVzIC1mbm8tUElFIC1uby1waWUNCisgREVGSU5FIEdDQzQ0X1g2NF9DQ19GTEFHUyAgICAgICAgICAgID0gREVGKEdDQzQ0X0FMTF9DQ19GTEFHUykgLW02NCAtZm5vLXN0YWNrLXByb3RlY3RvciAiLURFRklBUEk9X19hdHRyaWJ1dGVfXygobXNfYWJpKSkiIC1tYWNjdW11bGF0ZS1vdXRnb2luZy1hcmdzIC1tbm8tcmVkLXpvbmUgLVduby1hZGRyZXNzIC1tY21vZGVsPXNtYWxsIC1mcGllIC1mbm8tYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMNCistREVGSU5FIEdDQzQ0X0lBMzJfWDY0X0RMSU5LX0NPTU1PTiAgID0gLW5vc3RkbGliIC1XbCwtbiwtcSwtLWdjLXNlY3Rpb25zIC16IGNvbW1vbi1wYWdlLXNpemU9MHgyMA0KKytERUZJTkUgR0NDNDRfSUEzMl9YNjRfRExJTktfQ09NTU9OICAgPSAtbm9zdGRsaWIgLVdsLC1uLC1xLC0tZ2Mtc2VjdGlvbnMgLXogY29tbW9uLXBhZ2Utc2l6ZT0weDIwIC1uby1waWUNCisgREVGSU5FIEdDQzQ0X0lBMzJfWDY0X0FTTERMSU5LX0ZMQUdTID0gREVGKEdDQzQ0X0lBMzJfWDY0X0RMSU5LX0NPTU1PTikgLVdsLC0tZW50cnksUmVmZXJlbmNlQWNwaVRhYmxlIC11IFJlZmVyZW5jZUFjcGlUYWJsZQ0KKyBERUZJTkUgR0NDNDRfSUEzMl9YNjRfRExJTktfRkxBR1MgICAgPSBERUYoR0NDNDRfSUEzMl9YNjRfRExJTktfQ09NTU9OKSAtV2wsLS1lbnRyeSwkKElNQUdFX0VOVFJZX1BPSU5UKSAtdSAkKElNQUdFX0VOVFJZX1BPSU5UKSAtV2wsLU1hcCwkKERFU1RfRElSX0RFQlVHKS8kKEJBU0VfTkFNRSkubWFwDQorIERFRklORSBHQ0M0NF9JQTMyX0RMSU5LMl9GTEFHUyAgICAgICA9IC1XbCwtLWRlZnN5bT1QRUNPRkZfSEVBREVSX1NJWkU9MHgyMjAgREVGKEdDQ19ETElOSzJfRkxBR1NfQ09NTU9OKQ0KK0BAIC00NDUxLDcgKzQ0NTEsNyBAQCBERUZJTkUgR0NDNDhfQUFSQ0g2NF9BU0xETElOS19GTEFHUyAgPSBECisgDQorIERFRklORSBHQ0M0OV9JQTMyX0NDX0ZMQUdTICAgICAgICAgICA9IERFRihHQ0M0OF9JQTMyX0NDX0ZMQUdTKQ0KKyBERUZJTkUgR0NDNDlfWDY0X0NDX0ZMQUdTICAgICAgICAgICAgPSBERUYoR0NDNDhfWDY0X0NDX0ZMQUdTKQ0KKy1ERUZJTkUgR0NDNDlfSUEzMl9YNjRfRExJTktfQ09NTU9OICAgPSAtbm9zdGRsaWIgLVdsLC1uLC1xLC0tZ2Mtc2VjdGlvbnMgLXogY29tbW9uLXBhZ2Utc2l6ZT0weDQwDQorK0RFRklORSBHQ0M0OV9JQTMyX1g2NF9ETElOS19DT01NT04gICA9IC1ub3N0ZGxpYiAtV2wsLW4sLXEsLS1nYy1zZWN0aW9ucyAteiBjb21tb24tcGFnZS1zaXplPTB4NDAgLW5vLXBpZQ0KKyBERUZJTkUgR0NDNDlfSUEzMl9YNjRfQVNMRExJTktfRkxBR1MgPSBERUYoR0NDNDlfSUEzMl9YNjRfRExJTktfQ09NTU9OKSAtV2wsLS1lbnRyeSxSZWZlcmVuY2VBY3BpVGFibGUgLXUgUmVmZXJlbmNlQWNwaVRhYmxlDQorIERFRklORSBHQ0M0OV9JQTMyX1g2NF9ETElOS19GTEFHUyAgICA9IERFRihHQ0M0OV9JQTMyX1g2NF9ETElOS19DT01NT04pIC1XbCwtLWVudHJ5LCQoSU1BR0VfRU5UUllfUE9JTlQpIC11ICQoSU1BR0VfRU5UUllfUE9JTlQpIC1XbCwtTWFwLCQoREVTVF9ESVJfREVCVUcpLyQoQkFTRV9OQU1FKS5tYXANCisgREVGSU5FIEdDQzQ5X0lBMzJfRExJTksyX0ZMQUdTICAgICAgID0gREVGKEdDQzQ4X0lBMzJfRExJTksyX0ZMQUdTKQ0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9vdm1mL292bWYvMDAwMi1vdm1mLXVwZGF0ZS1wYXRoLXRvLW5hdGl2ZS1CYXNlVG9vbHMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvb3ZtZi9vdm1mLzAwMDItb3ZtZi11cGRhdGUtcGF0aC10by1uYXRpdmUtQmFzZVRvb2xzLnBhdGNoCmluZGV4IDk0MDI5YTUuLjk0YWU1ZDQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9vdm1mL292bWYvMDAwMi1vdm1mLXVwZGF0ZS1wYXRoLXRvLW5hdGl2ZS1CYXNlVG9vbHMucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL292bWYvb3ZtZi8wMDAyLW92bWYtdXBkYXRlLXBhdGgtdG8tbmF0aXZlLUJhc2VUb29scy5wYXRjaApAQCAtMTAsNiArMTAsNyBAQAogd2l0aCB0aGUgYXBwcm9wcmlhdGUgbG9jYXRpb24gYmVmb3JlIGJ1aWxkaW5nLgogCiBTaWduZWQtb2ZmLWJ5OiBSaWNhcmRvIE5lcmkgPHJpY2FyZG8ubmVyaS1jYWxkZXJvbkBsaW51eC5pbnRlbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIC0tLQogIE92bWZQa2cvYnVpbGQuc2ggfCAyICstCiAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvb3ZtZi9vdm1mLzAwMDMtQmFzZVRvb2xzLW1ha2VmaWxlLWFkanVzdC10by1idWlsZC1pbi11bmRlci1iaXRiYWtlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL292bWYvb3ZtZi8wMDAzLUJhc2VUb29scy1tYWtlZmlsZS1hZGp1c3QtdG8tYnVpbGQtaW4tdW5kZXItYml0YmFrZS5wYXRjaAppbmRleCAwZmRjMjc4Li42NWI1YzE2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvb3ZtZi9vdm1mLzAwMDMtQmFzZVRvb2xzLW1ha2VmaWxlLWFkanVzdC10by1idWlsZC1pbi11bmRlci1iaXRiYWtlLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9vdm1mL292bWYvMDAwMy1CYXNlVG9vbHMtbWFrZWZpbGUtYWRqdXN0LXRvLWJ1aWxkLWluLXVuZGVyLWJpdGJha2UucGF0Y2gKQEAgLTcsMzMgKzcsMzMgQEAKIHVzaW5nIHRoZSBiaXRiYWtlIG5hdGl2ZSBzeXNyb290IGluY2x1ZGUgYW5kIGxpYnJhcnkgZGlyZWN0b3JpZXMuCiAKIFNpZ25lZC1vZmYtYnk6IFJpY2FyZG8gTmVyaSA8cmljYXJkby5uZXJpQGxpbnV4LmludGVsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZwogLS0tCiAgQmFzZVRvb2xzL1NvdXJjZS9DL01ha2VmaWxlcy9oZWFkZXIubWFrZWZpbGUgfCA4ICsrKystLS0tCiAgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKIAotZGlmZiAtLWdpdCBhL0Jhc2VUb29scy9Tb3VyY2UvQy9NYWtlZmlsZXMvaGVhZGVyLm1ha2VmaWxlIGIvQmFzZVRvb2xzL1NvdXJjZS9DL01ha2VmaWxlcy9oZWFkZXIubWFrZWZpbGUKLWluZGV4IDgyMWQxMTQuLmZlMGYwOGIgMTAwNjQ0Ci0tLS0gYS9CYXNlVG9vbHMvU291cmNlL0MvTWFrZWZpbGVzL2hlYWRlci5tYWtlZmlsZQotKysrIGIvQmFzZVRvb2xzL1NvdXJjZS9DL01ha2VmaWxlcy9oZWFkZXIubWFrZWZpbGUKLUBAIC00NCwxNCArNDQsMTQgQEAgQVJDSF9JTkNMVURFID0gLUkgJChNQUtFUk9PVCkvSW5jbHVkZS9BQXJjaDY0LworSW5kZXg6IGdpdC9CYXNlVG9vbHMvU291cmNlL0MvTWFrZWZpbGVzL2hlYWRlci5tYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL0Jhc2VUb29scy9Tb3VyY2UvQy9NYWtlZmlsZXMvaGVhZGVyLm1ha2VmaWxlCisrKysgZ2l0L0Jhc2VUb29scy9Tb3VyY2UvQy9NYWtlZmlsZXMvaGVhZGVyLm1ha2VmaWxlCitAQCAtNDQsMTUgKzQ0LDE1IEBAIEFSQ0hfSU5DTFVERSA9IC1JICQoTUFLRVJPT1QpL0luY2x1ZGUvQUEKICBlbmRpZg0KICANCiAgSU5DTFVERSA9ICQoVE9PTF9JTkNMVURFKSAtSSAkKE1BS0VST09UKSAtSSAkKE1BS0VST09UKS9JbmNsdWRlL0NvbW1vbiAtSSAkKE1BS0VST09UKS9JbmNsdWRlLyAtSSAkKE1BS0VST09UKS9JbmNsdWRlL0luZHVzdHJ5U3RhbmRhcmQgLUkgJChNQUtFUk9PVCkvQ29tbW9uLyAtSSAuLiAtSSAuICQoQVJDSF9JTkNMVURFKSANCiAtQlVJTERfQ1BQRkxBR1MgPSAkKElOQ0xVREUpIC1PMg0KLStCVUlMRF9DUFBGTEFHUyA6PSAkKEJVSUxEX0NQUEZMQUdTKSAkKElOQ0xVREUpIC1PMg0KKytCVUlMRF9DUFBGTEFHUyArPSAkKElOQ0xVREUpIC1PMg0KICBpZmVxICgkKERBUldJTiksRGFyd2luKQ0KICAjIGFzc3VtZSBjbGFuZyBvciBjbGFuZyBjb21wYXRpYmxlIGZsYWdzIG9uIE9TIFgNCiAtQlVJTERfQ0ZMQUdTID0gLU1EIC1mc2hvcnQtd2NoYXIgLWZuby1zdHJpY3QtYWxpYXNpbmcgLVdhbGwgLVdlcnJvciAtV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIC1Xbm8tc2VsZi1hc3NpZ24gLVduby11bnVzZWQtcmVzdWx0IC1ub3N0ZGxpYiAtYyAtZw0KLStCVUlMRF9DRkxBR1MgOj0gJChCVUlMRF9DRkxBR1MpIC1NRCAtZnNob3J0LXdjaGFyIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1XYWxsIC1XZXJyb3IgLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucyAtV25vLXNlbGYtYXNzaWduIC1Xbm8tdW51c2VkLXJlc3VsdCAtbm9zdGRsaWIgLWMgLWcNCisrQlVJTERfQ0ZMQUdTICs9IC1NRCAtZnNob3J0LXdjaGFyIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1XYWxsIC1XZXJyb3IgLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucyAtV25vLXNlbGYtYXNzaWduIC1Xbm8tdW51c2VkLXJlc3VsdCAtbm9zdGRsaWIgLWMgLWcNCiAgZWxzZQ0KIC1CVUlMRF9DRkxBR1MgPSAtTUQgLWZzaG9ydC13Y2hhciAtZm5vLXN0cmljdC1hbGlhc2luZyAtV2FsbCAtV2Vycm9yIC1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMgLVduby11bnVzZWQtcmVzdWx0IC1ub3N0ZGxpYiAtYyAtZw0KLStCVUlMRF9DRkxBR1MgOj0gJChCVUlMRF9DRkxBR1MpIC1NRCAtZnNob3J0LXdjaGFyIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1XYWxsIC1XZXJyb3IgLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucyAtV25vLXVudXNlZC1yZXN1bHQgLW5vc3RkbGliIC1jIC1nDQorK0JVSUxEX0NGTEFHUyArPSAtTUQgLWZzaG9ydC13Y2hhciAtZm5vLXN0cmljdC1hbGlhc2luZyAtV2FsbCAtV2Vycm9yIC1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMgLVduby11bnVzZWQtcmVzdWx0IC1ub3N0ZGxpYiAtYyAtZw0KICBlbmRpZg0KIC1CVUlMRF9MRkxBR1MgPQ0KLStCVUlMRF9MRkxBR1MgOj0gJChMREZMQUdTKQ0KLSBCVUlMRF9DWFhGTEFHUyA9DQorLUJVSUxEX0NYWEZMQUdTID0gLVduby11bnVzZWQtcmVzdWx0DQorK0JVSUxEX0xGTEFHUyA9ICQoTERGTEFHUykNCisrQlVJTERfQ1hYRkxBR1MgKz0gLVduby11bnVzZWQtcmVzdWx0DQogIA0KICBpZmVxICgkKEFSQ0gpLCBJQTMyKQ0KLS0tIAotMi45LjMKLQorICMNCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvb3ZtZi9vdm1mLzAwMDQtb3ZtZi1lbmFibGUtbG9uZy1wYXRoLWZpbGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvb3ZtZi9vdm1mLzAwMDQtb3ZtZi1lbmFibGUtbG9uZy1wYXRoLWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk1NGZiZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9vdm1mL292bWYvMDAwNC1vdm1mLWVuYWJsZS1sb25nLXBhdGgtZmlsZS5wYXRjaApAQCAtMCwwICsxLDE4IEBACitGcm9tIDAzMmZjNmIxZjc2OTFiZDUzN2ZkMmE2YmQxMzgyMWZjZjNjNDVlNjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAxMSBTZXAgMjAxNyAwMjoyMTo1NSAtMDQwMAorU3ViamVjdDogW1BBVENIXSBvdm1mOiBlbmFibGUgbG9uZyBwYXRoIGZpbGUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPgorLS0tCisgQmFzZVRvb2xzL1NvdXJjZS9DL0NvbW1vbi9Db21tb25MaWIuaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL0Jhc2VUb29scy9Tb3VyY2UvQy9Db21tb24vQ29tbW9uTGliLmggYi9CYXNlVG9vbHMvU291cmNlL0MvQ29tbW9uL0NvbW1vbkxpYi5oCitpbmRleCAyMDQxYjg5ZTJkLi44MTE2YWEyZTM1IDEwMDY0NAorLS0tIGEvQmFzZVRvb2xzL1NvdXJjZS9DL0NvbW1vbi9Db21tb25MaWIuaAorKysrIGIvQmFzZVRvb2xzL1NvdXJjZS9DL0NvbW1vbi9Db21tb25MaWIuaAorQEAgLTIyICsyMiBAQCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELgorLSNkZWZpbmUgTUFYX0xPTkdfRklMRV9QQVRIIDUwMA0KKysjZGVmaW5lIE1BWF9MT05HX0ZJTEVfUEFUSCAxMDIzDQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL292bWYvb3ZtZi9uby1zdGFjay1wcm90ZWN0b3ItYWxsLWFyY2hzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL292bWYvb3ZtZi9uby1zdGFjay1wcm90ZWN0b3ItYWxsLWFyY2hzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1OWIxYzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvb3ZtZi9vdm1mL25vLXN0YWNrLXByb3RlY3Rvci1hbGwtYXJjaHMucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorQXV0aG9yOiBTdGV2ZSBMYW5nYXNlayA8c3RldmUubGFuZ2FzZWtAdWJ1bnR1LmNvbT4KK0Rlc2NyaXB0aW9uOiBwYXNzIC1mbm8tc3RhY2stcHJvdGVjdG9yIHRvIGFsbCBHQ0MgdG9vbGNoYWlucworIFRoZSB1cHN0cmVhbSBidWlsZCBydWxlcyBpbmV4cGxpY2FibHkgcGFzcyAtZm5vLXN0YWNrLXByb3RlY3RvciBvbmx5Cisgd2hlbiBidWlsZGluZyBmb3IgaTM4NiBhbmQgYW1kNjQuICBBZGQgdGhpcyBlc3NlbnRpYWwgYXJndW1lbnQgdG8gdGhlCisgZ2VuZXJpYyBydWxlcyBmb3IgZ2NjIDQuNCBhbmQgbGF0ZXIuCitMYXN0LVVwZGF0ZWQ6IDIwMTYtMDQtMTIKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworSW5kZXg6IGdpdC9CYXNlVG9vbHMvQ29uZi90b29sc19kZWYudGVtcGxhdGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9CYXNlVG9vbHMvQ29uZi90b29sc19kZWYudGVtcGxhdGUKKysrKyBnaXQvQmFzZVRvb2xzL0NvbmYvdG9vbHNfZGVmLnRlbXBsYXRlCitAQCAtNDM2OCw3ICs0MzY4LDcgQEAgREVGSU5FIEdDQ19JUEZfUkNfRkxBR1MgICAgICAgICAgICA9IC1JCisgREVGSU5FIEdDQ19BUk1fUkNfRkxBR1MgICAgICAgICAgICA9IC1JIGJpbmFyeSAtTyBlbGYzMi1saXR0bGVhcm0gICAgIC1CIGFybSAgICAgLS1yZW5hbWUtc2VjdGlvbiAuZGF0YT0uaGlpDQorIERFRklORSBHQ0NfQUFSQ0g2NF9SQ19GTEFHUyAgICAgICAgPSAtSSBiaW5hcnkgLU8gZWxmNjQtbGl0dGxlYWFyY2g2NCAtQiBhYXJjaDY0IC0tcmVuYW1lLXNlY3Rpb24gLmRhdGE9LmhpaQ0KKyANCistREVGSU5FIEdDQzQ0X0FMTF9DQ19GTEFHUyAgICAgICAgICAgID0gLWcgLWZzaG9ydC13Y2hhciAtZm5vLWJ1aWx0aW4gLWZuby1zdHJpY3QtYWxpYXNpbmcgLVdhbGwgLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtaW5jbHVkZSBBdXRvR2VuLmggLWZuby1jb21tb24gLURTVFJJTkdfQVJSQVlfTkFNRT0kKEJBU0VfTkFNRSlTdHJpbmdzDQorK0RFRklORSBHQ0M0NF9BTExfQ0NfRkxBR1MgICAgICAgICAgICA9IC1nIC1mc2hvcnQtd2NoYXIgLWZuby1idWlsdGluIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1XYWxsIC1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby1zdGFjay1wcm90ZWN0b3IgLWluY2x1ZGUgQXV0b0dlbi5oIC1mbm8tY29tbW9uIC1EU1RSSU5HX0FSUkFZX05BTUU9JChCQVNFX05BTUUpU3RyaW5ncw0KKyBERUZJTkUgR0NDNDRfSUEzMl9DQ19GTEFHUyAgICAgICAgICAgPSBERUYoR0NDNDRfQUxMX0NDX0ZMQUdTKSAtbTMyIC1tYXJjaD1pNTg2IC1tYWxpZ24tZG91YmxlIC1mbm8tc3RhY2stcHJvdGVjdG9yIC1EIEVGSTMyIC1mbm8tYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMgLWZuby1QSUUgLW5vLXBpZQ0KKyBERUZJTkUgR0NDNDRfWDY0X0NDX0ZMQUdTICAgICAgICAgICAgPSBERUYoR0NDNDRfQUxMX0NDX0ZMQUdTKSAtbTY0IC1mbm8tc3RhY2stcHJvdGVjdG9yICItREVGSUFQST1fX2F0dHJpYnV0ZV9fKChtc19hYmkpKSIgLW1hY2N1bXVsYXRlLW91dGdvaW5nLWFyZ3MgLW1uby1yZWQtem9uZSAtV25vLWFkZHJlc3MgLW1jbW9kZWw9c21hbGwgLWZwaWUgLWZuby1hc3luY2hyb25vdXMtdW53aW5kLXRhYmxlcw0KKyBERUZJTkUgR0NDNDRfSUEzMl9YNjRfRExJTktfQ09NTU9OICAgPSAtbm9zdGRsaWIgLVdsLC1uLC1xLC0tZ2Mtc2VjdGlvbnMgLXogY29tbW9uLXBhZ2Utc2l6ZT0weDIwDQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL292bWYvb3ZtZl9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvb3ZtZi9vdm1mX2dpdC5iYgppbmRleCA5ZDk4OGU5Li5mYTBkNjYyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvb3ZtZi9vdm1mX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvb3ZtZi9vdm1mX2dpdC5iYgpAQCAtMSw1ICsxLDcgQEAKLURFU0NSSVBUSU9OID0gIk9WTUYgLSBVRUZJIGZpcm13YXJlIGZvciBRZW11IGFuZCBLVk0iCi1IT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L2FwcHMvbWVkaWF3aWtpL3RpYW5vY29yZS9pbmRleC5waHA/dGl0bGU9T1ZNRiIKK1NVTU1BUlkgPSAiT1ZNRiAtIFVFRkkgZmlybXdhcmUgZm9yIFFlbXUgYW5kIEtWTSIKK0RFU0NSSVBUSU9OID0gIk9WTUYgaXMgYW4gRURLIElJIGJhc2VkIHByb2plY3QgdG8gZW5hYmxlIFVFRkkgc3VwcG9ydCBmb3IgXAorVmlydHVhbCBNYWNoaW5lcy4gT1ZNRiBjb250YWlucyBzYW1wbGUgVUVGSSBmaXJtd2FyZSBmb3IgUUVNVSBhbmQgS1ZNIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL3RpYW5vY29yZS90aWFub2NvcmUuZ2l0aHViLmlvL3dpa2kvT1ZNRiIKIExJQ0VOU0UgPSAiQlNEIgogTElDRU5TRV9jbGFzcy10YXJnZXQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnc2VjdXJlYm9vdCcsICdCU0QgJiBPcGVuU1NMJywgJ0JTRCcsIGQpfSIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL092bWZQa2cvTGljZW5zZS50eHQ7bWQ1PTM0M2RjODhlODJmZjMzZDA0MjA3NGY2MjA1MGMzNDk2IgpAQCAtMTEsMjAgKzEzLDI1IEBACiBQQUNLQUdFQ09ORklHW3NlY3VyZWJvb3RdID0gIiwsLCIKIAogU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3RpYW5vY29yZS9lZGsyLmdpdDticmFuY2g9bWFzdGVyIFwKKwlmaWxlOi8vMDAwMS1pYTMyLURvbnQtdXNlLXBpZS5wYXRjaCBcCiAJZmlsZTovLzAwMDItb3ZtZi11cGRhdGUtcGF0aC10by1uYXRpdmUtQmFzZVRvb2xzLnBhdGNoIFwKIAlmaWxlOi8vMDAwMy1CYXNlVG9vbHMtbWFrZWZpbGUtYWRqdXN0LXRvLWJ1aWxkLWluLXVuZGVyLWJpdGJha2UucGF0Y2ggXAorCWZpbGU6Ly8wMDA0LW92bWYtZW5hYmxlLWxvbmctcGF0aC1maWxlLnBhdGNoIFwKIAlmaWxlOi8vVmZyQ29tcGlsZS1pbmNyZWFzZS1wYXRoLWxlbmd0aC1saW1pdC5wYXRjaCBcCi0gICAgICAgIGZpbGU6Ly8wMDAxLU1kZU1vZHVsZVBrZy1VZWZpSGlpTGliLUZpeC1pbmNvcnJlY3QtY29tcGFyaXNvbi1leHAucGF0Y2ggXAorCWZpbGU6Ly9uby1zdGFjay1wcm90ZWN0b3ItYWxsLWFyY2hzLnBhdGNoIFwKICAgICAgICAgIgorVVBTVFJFQU1fVkVSU0lPTl9VTktOT1dOID0gIjEiCisKK09QRU5TU0xfUkVMRUFTRSA9ICJvcGVuc3NsLTEuMS4wZSIKIAogU1JDX1VSSV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBcCi0JJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnc2VjdXJlYm9vdCcsICdodHRwOi8vd3d3Lm9wZW5zc2wub3JnL3NvdXJjZS9vcGVuc3NsLTEuMC4yai50YXIuZ3o7bmFtZT1vcGVuc3NsO3N1YmRpcj0ke1N9L0NyeXB0b1BrZy9MaWJyYXJ5L09wZW5zc2xMaWInLCAnJywgZCl9IFwKKwkke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdzZWN1cmVib290JywgJ2h0dHA6Ly93d3cub3BlbnNzbC5vcmcvc291cmNlLyR7T1BFTlNTTF9SRUxFQVNFfS50YXIuZ3o7bmFtZT1vcGVuc3NsO3N1YmRpcj0ke1N9L0NyeXB0b1BrZy9MaWJyYXJ5L09wZW5zc2xMaWInLCAnJywgZCl9IFwKIAlmaWxlOi8vMDAwNy1Pdm1mUGtnLUVucm9sbERlZmF1bHRLZXlzLWFwcGxpY2F0aW9uLWZvci1lbnJvbGxpbmctLnBhdGNoIFwKICIKIAotU1JDUkVWPSI0NTc1YTYwMmNhNjA3MmVlOWQwNDE1MGIzOGJmYjE0M2NiZmY4NTg4IgotU1JDX1VSSVtvcGVuc3NsLm1kNXN1bV0gPSAiOTYzMjIxMzhmMGI2OWU2MWI3MjEyYmM1M2Q1ZTkxMmIiCi1TUkNfVVJJW29wZW5zc2wuc2hhMjU2c3VtXSA9ICJlN2FmZjI5MmJlMjFjMjU5YzZhZjI2NDY5YzdhOWIzYmEyNmU5YWJhYWZmZDMyNWUzZGNjYzk3ODUyNTZjNDMxIgorU1JDUkVWPSJlYzQ5MTBjZDMzMzY1NjVmZGI2MWRhZmRkOWVjNGFlN2E2MTYwYmEzIgorU1JDX1VSSVtvcGVuc3NsLm1kNXN1bV0gPSAiNTFjNDJkMTUyMTIyZTQ3NDc1NGFlYTk2ZjY2OTI4YzYiCitTUkNfVVJJW29wZW5zc2wuc2hhMjU2c3VtXSA9ICI1N2JlODYxODk3OWQ4MGM5MTA3MjhjZmM5OTM2OWJmOTdiMmExYWJkOGYzNjZhYjZlYmRlZTg5NzVhZDM4NzRjIgogCiBpbmhlcml0IGRlcGxveQogCkBAIC0xNDQsNyArMTUxLDcgQEAKIAogZG9fY29tcGlsZV9jbGFzcy10YXJnZXQoKSB7CiAgICAgZXhwb3J0IExGTEFHUz0iJHtMREZMQUdTfSIKLSAgICBQQVJBTExFTF9KT0JTPSIke0AgJyR7UEFSQUxMRUxfTUFLRX0nLnJlcGxhY2UoJy1qJywgJy1uJyl9IgorICAgIFBBUkFMTEVMX0pPQlM9IiR7QCAnJHtQQVJBTExFTF9NQUtFfScucmVwbGFjZSgnLWonLCAnLW4gJyl9IgogICAgIE9WTUZfQVJDSD0iWDY0IgogICAgIGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiAhPSAieDg2XzY0IiBdIDsgdGhlbgogICAgICAgICBPVk1GX0FSQ0g9IklBMzIiCkBAIC0xODYsMTAgKzE5Myw3IEBACiAgICAgICAgICMgYnVpbGRpbmcgd2l0aCBTZWN1cmUgQm9vdCBlbmFibGVkLgogICAgICAgICBiYm5vdGUgIkJ1aWxkaW5nIHdpdGggU2VjdXJlIEJvb3QuIgogICAgICAgICBybSAtcmYgJHtTfS9CdWlsZC9Pdm1mJE9WTUZfRElSX1NVRkZJWAotICAgICAgICBpZiAhIFsgLWYgJHtTfS9DcnlwdG9Qa2cvTGlicmFyeS9PcGVuc3NsTGliL29wZW5zc2wtKi9lZGsyLXBhdGNoLWFwcGxpZWQgXTsgdGhlbgotICAgICAgICAgICAgKCBjZCAke1N9L0NyeXB0b1BrZy9MaWJyYXJ5L09wZW5zc2xMaWIvb3BlbnNzbC0qICYmIHBhdGNoIC1wMSA8JChlY2hvIC4uL0VES0lJX29wZW5zc2wtKi5wYXRjaCkgJiYgdG91Y2ggZWRrMi1wYXRjaC1hcHBsaWVkICkKLSAgICAgICAgZmkKLSAgICAgICAgKCBjZCAke1N9L0NyeXB0b1BrZy9MaWJyYXJ5L09wZW5zc2xMaWIvICYmIC4vSW5zdGFsbC5zaCApCisgICAgICAgIGxuIC1zZiAke09QRU5TU0xfUkVMRUFTRX0gJHtTfS9DcnlwdG9Qa2cvTGlicmFyeS9PcGVuc3NsTGliL29wZW5zc2wKICAgICAgICAgJHtTfS9Pdm1mUGtnL2J1aWxkLnNoICRQQVJBTExFTF9KT0JTIC1hICRPVk1GX0FSQ0ggLWIgUkVMRUFTRSAtdCAke0ZJWEVEX0dDQ1ZFUn0gJHtPVk1GX1NFQ1VSRV9CT09UX0ZMQUdTfQogICAgICAgICBsbiAke2J1aWxkX2Rpcn0vRlYvT1ZNRi5mZCAke1dPUktESVJ9L292bWYvb3ZtZi5zZWNib290LmZkCiAgICAgICAgIGxuICR7YnVpbGRfZGlyfS9GVi9PVk1GX0NPREUuZmQgJHtXT1JLRElSfS9vdm1mL292bWYuc2VjYm9vdC5jb2RlLmZkCkBAIC0yNDEsMyArMjQ1LDQgQEAKIGFkZHRhc2sgZG9fZGVwbG95IGFmdGVyIGRvX2NvbXBpbGUgYmVmb3JlIGRvX2J1aWxkCiAKIEJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorVE9PTENIQUlOID0gImdjYyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtc2RrLWhvc3QuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9uYXRpdmVzZGstcGFja2FnZWdyb3VwLXNkay1ob3N0LmJiCmluZGV4IDJjYTYzOTIuLmFlZTRhMDMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtc2RrLWhvc3QuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1zZGstaG9zdC5iYgpAQCAtNCw3ICs0LDYgQEAKIAogU1VNTUFSWSA9ICJIb3N0IHBhY2thZ2VzIGZvciB0aGUgc3RhbmRhbG9uZSBTREsgb3IgZXh0ZXJuYWwgdG9vbGNoYWluIgogUFIgPSAicjEyIgotTElDRU5TRSA9ICJNSVQiCiAKIGluaGVyaXQgcGFja2FnZWdyb3VwIG5hdGl2ZXNkawogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtYmFzZS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1iYXNlLmJiCmluZGV4IDAwNjllM2UuLmY5ZTZlMmUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1iYXNlLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1iYXNlLmJiCkBAIC0yMDQsNyArMjA0LDcgQEAKIFNVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtYmx1ZXRvb3RoID0gIkJsdWV0b290aCBzdXBwb3J0IgogUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtYmx1ZXRvb3RoID0gIlwKICAgICAke0JMVUVafSBcCi0gICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ2Fsc2EnLCAnbGliYXNvdW5kLW1vZHVsZS1ibHVleicsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ2Fsc2EnLCBiYi51dGlscy5jb250YWlucygnQkxVRVonLCAnYmx1ZXo0JywgJ2xpYmFzb3VuZC1tb2R1bGUtYmx1ZXonLCAnJywgZCksICcnLGQpfSBcCiAgICAgIgogCiBSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1ibHVldG9vdGggPSAiXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc2RrLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc2RrLmJiCmluZGV4IDdkNmQ0MTQuLmFmMGNlMjAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXNkay5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zZGsuYmIKQEAgLTMzLDcgKzMzLDYgQEAKIFNBTklUSVpFUlNfcG93ZXJwYzY0ID0gIiIKIFNBTklUSVpFUlNfc3BhcmMgPSAiIgogU0FOSVRJWkVSU19saWJjLW11c2wgPSAiIgotU0FOSVRJWkVSU19saWJjLXVjbGliYyA9ICIiCiAKIFJSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1jb3JlLXNkayA9ICJcCiAgICAgbGliZ29tcCBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtcHJvZmlsZS5iYgppbmRleCA5NDZjOTQ3Li5hOGU0N2RhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXByb2ZpbGUuYmIKQEAgLTMxLDIzICszMSwxNSBAQAogUEVSRiA9ICJwZXJmIgogUEVSRl9saWJjLW11c2wgPSAiIgogCi0jIHN5c3RlbXRhcCBuZWVkcyBlbGZ1dGlscyB3aGljaCBpcyBub3QgZnVsbHkgYnVpbGRhYmxlIG9uIHVjbGliYwotIyBoZW5jZSB3ZSBleGNsdWRlIGl0IGZyb20gdWNsaWJjIGJhc2VkIGJ1aWxkcworIyBzeXN0ZW10YXAgbmVlZHMgZWxmdXRpbHMgd2hpY2ggaXMgbm90IGZ1bGx5IGJ1aWxkYWJsZSBvbiBzb21lIGFyY2hlcy9saWJjcwogU1lTVEVNVEFQID0gInN5c3RlbXRhcCIKLVNZU1RFTVRBUF9saWJjLXVjbGliYyA9ICIiCiBTWVNURU1UQVBfbGliYy1tdXNsID0gIiIKIFNZU1RFTVRBUF9taXBzYXJjaCA9ICIiCiBTWVNURU1UQVBfbmlvczIgPSAiIgogU1lTVEVNVEFQX2FhcmNoNjQgPSAiIgogCi0jIGx0dG5nLXVzdCB1c2VzIHNjaGVkX2dldGNwdSgpIHdoaWNoIGlzIG5vdCB0aGVyZSBvbiB1Y2xpYmMKLSMgZm9yIHNvbWUgb2YgdGhlIGFyY2hpdGVjdHVyZXMgaXQgY2FuIGJlIHBhdGNoZWQgdG8gY2FsbCB0aGUKLSMgc3lzY2FsbCBkaXJlY3RseSBidXQgZm9yIHg4Nl82NCBfX05SX2dldGNwdSBpcyBhIHZzeXNjYWxsCi0jIHdoaWNoIG1lYW5zIHdlIGNhbiBub3QgdXNlIHN5c2NhbGwoKSB0byBjYWxsIGl0LiBTbyB3ZSBpZ25vcmUKLSMgaXQgZm9yIHg4Nl82NC91Y2xpYmMKLQorIyBsdHRuZy11c3QgdXNlcyBzY2hlZF9nZXRjcHUoKSB3aGljaCBpcyBub3QgdGhlcmUgb24gZm9yIHNvbWUgcGxhdGZvcm1zLgogTFRUTkdVU1QgPSAibHR0bmctdXN0IgotTFRUTkdVU1RfbGliYy11Y2xpYmMgPSAiIgogTFRUTkdVU1RfbGliYy1tdXNsID0gIiIKIAogTFRUTkdUT09MUyA9ICJsdHRuZy10b29scyIKQEAgLTYwLDEzICs1MiwxMyBAQAogIyB2YWxncmluZCBkb2VzIG5vdCB3b3JrIG9uIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMvYXJjaGl0ZWN0dXJlcwogCiBWQUxHUklORCA9ICJ2YWxncmluZCIKLVZBTEdSSU5EX2xpYmMtdWNsaWJjID0gIiIKIFZBTEdSSU5EX2xpYmMtbXVzbCA9ICIiCiBWQUxHUklORF9taXBzYXJjaCA9ICIiCiBWQUxHUklORF9uaW9zMiA9ICIiCiBWQUxHUklORF9hcm12NCA9ICIiCiBWQUxHUklORF9hcm12NSA9ICIiCiBWQUxHUklORF9hcm12NiA9ICIiCitWQUxHUklORF9hcm1lYiA9ICIiCiBWQUxHUklORF9hYXJjaDY0ID0gIiIKIFZBTEdSSU5EX2xpbnV4LWdudXgzMiA9ICIiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1nby1jcm9zcy1jYW5hZGlhbi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1nby1jcm9zcy1jYW5hZGlhbi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGFhY2UxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWdvLWNyb3NzLWNhbmFkaWFuLmJiCkBAIC0wLDAgKzEsMTIgQEAKK1NVTU1BUlkgPSAiSG9zdCBTREsgcGFja2FnZSBmb3IgR28gY3Jvc3MgY2FuYWRpYW4gdG9vbGNoYWluIgorUE4gPSAicGFja2FnZWdyb3VwLWdvLWNyb3NzLWNhbmFkaWFuLSR7TUFDSElORX0iCisKK2luaGVyaXQgY3Jvc3MtY2FuYWRpYW4gcGFja2FnZWdyb3VwCisKK1BBQ0tBR0VHUk9VUF9ESVNBQkxFX0NPTVBMRU1FTlRBUlkgPSAiMSIKKworR08gPSAiZ28tY3Jvc3MtY2FuYWRpYW4tJHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfSIKKworUkRFUEVORFNfJHtQTn0gPSAiIFwKKyAgICAke0BhbGxfbXVsdGlsaWJfdHVuZV92YWx1ZXMoZCwgJ0dPJyl9IFwKKyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1nby1zZGstdGFyZ2V0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWdvLXNkay10YXJnZXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UxOTA3NwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1nby1zZGstdGFyZ2V0LmJiCkBAIC0wLDAgKzEsOCBAQAorU1VNTUFSWSA9ICJUYXJnZXQgcGFja2FnZXMgZm9yIHRoZSBHbyBTREsiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwIGdvYXJjaAorCitSREVQRU5EU18ke1BOfSA9ICIgXAorICAgIGdvLXJ1bnRpbWUgXAorICAgIGdvLXJ1bnRpbWUtZGV2IFwKKyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC5iYgppbmRleCBjMWJiZGZjLi5mZjQyODY2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLmJiCkBAIC00Miw3ICs0Miw2IEBACiAgICAgbWMtZmlzaCBcCiAgICAgbWMtaGVscGVycyBcCiAgICAgbWMtaGVscGVycy1wZXJsIFwKLSAgICBtYy1oZWxwZXJzLXB5dGhvbiBcCiAgICAgcGFydGVkIFwKICAgICAke1BTRVVET30gXAogICAgIHNjcmVlbiBcCkBAIC0xNDEsMTcgKzE0MCwxOSBAQAogICAgIG5mcy11dGlscyBcCiAgICAgbmZzLXV0aWxzLWNsaWVudCBcCiAgICAgb3BlbnNzbCBcCisgICAgb3BlbnNzaC1zY3AgXAogICAgIG9wZW5zc2gtc2Z0cC1zZXJ2ZXIgXAorICAgIG9wZW5zc2gtc3NoIFwKICAgICBvcGtnIFwKICAgICBvcGtnLXV0aWxzIFwKICAgICBwYXRjaCBcCiAgICAgcGVybCBcCiAgICAgcGVybC1kZXYgXAorICAgIHBlcmwtbWlzYyBcCiAgICAgcGVybC1tb2R1bGVzIFwKICAgICBwZXJsLXBvZCBcCiAgICAgcHl0aG9uIFwKICAgICBweXRob24tbW9kdWxlcyBcCi0gICAgcHl0aG9uLWdpdCBcCiAgICAgcHl0aG9uMyBcCiAgICAgcHl0aG9uMy1tb2R1bGVzIFwKICAgICBweXRob24zLWdpdCBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcHNwbGFzaC9maWxlcy9wc3BsYXNoLWluaXQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcHNwbGFzaC9maWxlcy9wc3BsYXNoLWluaXQKaW5kZXggNjZjODVlOS4uMGJjZTFkZSAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvZmlsZXMvcHNwbGFzaC1pbml0CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzL3BzcGxhc2gtaW5pdApAQCAtNyw2ICs3LDEyIEBACiAjIERlZmF1bHQtU3RvcDoKICMjIyBFTkQgSU5JVCBJTkZPCiAKK2lmIFsgISAtZSAvZGV2L2ZiMCBdOyB0aGVuCisgICAgZWNobyAiRnJhbWVidWZmZXIgL2Rldi9mYjAgbm90IGRldGVjdGVkIgorICAgIGVjaG8gIkJvb3Qgc3BsYXNoc2NyZWVuIGRpc2FibGVkIgorICAgIGV4aXQgMDsKK2ZpCisKIHJlYWQgQ01ETElORSA8IC9wcm9jL2NtZGxpbmUKIGZvciB4IGluICRDTURMSU5FOyBkbwogICAgICAgICBjYXNlICR4IGluCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcHNwbGFzaC9wc3BsYXNoX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL3BzcGxhc2hfZ2l0LmJiCmluZGV4IDQ0Mjk3ZTEuLjNiN2Y4MTggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL3BzcGxhc2hfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL3BzcGxhc2hfZ2l0LmJiCkBAIC01LDEzICs1LDE0IEBACiBMSUNFTlNFID0gIkdQTHYyKyIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3BzcGxhc2guaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTE2O21kNT04NDBmYjIzNTZiMTBhODViZWQ3OGRkMDlkYzc3NDVjNiIKIAotU1JDUkVWID0gIjg4MzQzYWQyM2M5MGZhMWRkOGQ3OWFjMGQ3ODRhNjkxYWEwYzZkMmIiCitTUkNSRVYgPSAiMjAxNWY3MDczZTk4ZGQ5NTYyZGIwOTM2YTI1NGFmNWVmNTYzNTZjZiIKIFBWID0gIjAuMStnaXQke1NSQ1BWfSIKIFBSID0gInIxNSIKIAogU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0gXAogICAgICAgICAgICBmaWxlOi8vcHNwbGFzaC1pbml0IFwKICAgICAgICAgICAgJHtTUExBU0hfSU1BR0VTfSIKK1VQU1RSRUFNX1ZFUlNJT05fVU5LTk9XTiA9ICIxIgogCiBTUExBU0hfSU1BR0VTID0gImZpbGU6Ly9wc3BsYXNoLXBva3ktaW1nLmg7b3V0c3VmZml4PWRlZmF1bHQiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUuaW5jCmluZGV4IDFhMGExNTUuLmU5NjY1MjIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLmluYwpAQCAtNCw2ICs0LDcgQEAKIGFkZGl0aW9uYWwgZnVuY3Rpb25zIHRvIG1haW50YWluIGEgbGlzdCBvZiBwcmV2aW91c2x5LWVudGVyZWQgY29tbWFuZCBsaW5lcywgdG8gcmVjYWxsIGFuZCBwZXJoYXBzIHJlZWRpdCB0aG9zZSAgIFwKIGxpbmVzLCBhbmQgcGVyZm9ybSBjc2gtbGlrZSBoaXN0b3J5IGV4cGFuc2lvbiBvbiBwcmV2aW91cyBjb21tYW5kcy4iCiBTRUNUSU9OID0gImxpYnMiCitIT01FUEFHRSA9ICJodHRwczovL2Nuc3d3dy5jbnMuY3dydS5lZHUvcGhwL2NoZXQvcmVhZGxpbmUvcmx0b3AuaHRtbCIKIAogIyBHUEx2MisgKDwgNi4wKSwgR1BMdjMrICg+PSA2LjApCiBMSUNFTlNFID0gIkdQTHYzKyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtYm9vdF8yMzQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLWJvb3RfMjM0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMThiMjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLWJvb3RfMjM0LmJiCkBAIC0wLDAgKzEsNDMgQEAKK3JlcXVpcmUgc3lzdGVtZC5pbmMKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L3N5c3RlbWQ6IgorCitERVBFTkRTID0gImludGx0b29sLW5hdGl2ZSBsaWJjYXAgdXRpbC1saW51eCBnbnUtZWZpIGdwZXJmLW5hdGl2ZSIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDctdXNlLWxuci13cmFwcGVyLWluc3RlYWQtb2YtbG9va2luZy1mb3ItcmVsYXRpdmUtb3B0aS5wYXRjaCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQKK2luaGVyaXQgZGVwbG95CisKK0VGSV9DQyA/PSAiJHtDQ30iCisjIE1hbiBwYWdlcyBhcmUgcGFja2FnZWQgdGhyb3VnaCB0aGUgbWFpbiBzeXN0ZW1kIHJlY2lwZQorRVhUUkFfT0VDT05GID0gIiAtLWVuYWJsZS1nbnVlZmkgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtZWZpLWluY2x1ZGVkaXI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtZWZpLWxkc2Rpcj0ke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1lZmktbGliZGlyPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLW1hbnBhZ2VzIFwKKyAgICAgICAgICAgICAgICAgRUZJX0NDPScke0VGSV9DQ30nIFwKKyAgICAgICAgICAgICAgICIKKworIyBJbXBvcnRlZCBmcm9tIHRoZSBvbGQgZ3VtbWlib290IHJlY2lwZQorVFVORV9DQ0FSR1NfcmVtb3ZlID0gIi1tZnBtYXRoPXNzZSIKK0NPTVBBVElCTEVfSE9TVCA9ICIoeDg2XzY0Lip8aS44Ni4qKS1saW51eCIKK0NPTVBBVElCTEVfSE9TVF9saW51eC1nbnV4MzIgPSAibnVsbCIKKworZG9fY29tcGlsZSgpIHsKKwlTWVNURU1EX0JPT1RfRUZJX0FSQ0g9ImlhMzIiCisJaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIng4Nl82NCIgXTsgdGhlbgorCQlTWVNURU1EX0JPT1RfRUZJX0FSQ0g9Ing2NCIKKwlmaQorCisJb2VfcnVubWFrZSBzeXN0ZW1kLWJvb3Qke1NZU1RFTURfQk9PVF9FRklfQVJDSH0uZWZpCit9CisKK2RvX2luc3RhbGwoKSB7CisJIyBCeXBhc3Mgc3lzdGVtZCBpbnN0YWxsYXRpb24gd2l0aCBhIE5PUAorCToKK30KKworZG9fZGVwbG95ICgpIHsKKwlpbnN0YWxsICR7Qn0vc3lzdGVtZC1ib290Ki5lZmkgJHtERVBMT1lESVJ9Cit9CithZGR0YXNrIGRlcGxveSBiZWZvcmUgZG9fYnVpbGQgYWZ0ZXIgZG9fY29tcGlsZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1jb21wYXQtdW5pdHMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLWNvbXBhdC11bml0cy5iYgppbmRleCBmZTlhNTIxLi5kMjI4YTUxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLWNvbXBhdC11bml0cy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLWNvbXBhdC11bml0cy5iYgpAQCAtMSw1ICsxLDUgQEAKIFNVTU1BUlkgPSAiRW5oYW5jZXMgc3lzdGVtZCBjb21wYXRpbGliaXR5IHdpdGggZXhpc3RpbmcgU3lzVmluaXQgc2NyaXB0cyIKLQorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9zeXN0ZW1kIgogTElDRU5TRSA9ICJNSVQiCiAKIFBSID0gInIyOSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtbWFjaGluZS11bml0c18xLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLW1hY2hpbmUtdW5pdHNfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNzU2ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLW1hY2hpbmUtdW5pdHNfMS4wLmJiCkBAIC0wLDAgKzEsMTMgQEAKK1NVTU1BUlkgPSAiTWFjaGluZSBzcGVjaWZpYyBzeXN0ZW1kIHVuaXRzIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09NTU9OX0xJQ0VOU0VfRElSfS9NSVQ7bWQ1PTA4MzVhZGU2OThlMGJjZjg1MDZlY2RhMmY3YjRmMzAyIgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitQUiA9ICJyMTkiCisKK2luaGVyaXQgc3lzdGVtZAorU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIiIKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtc2VyaWFsZ2V0dHkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXNlcmlhbGdldHR5LmJiCmluZGV4IDc2OGIxMzAuLmQ5MzQ3MTYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtc2VyaWFsZ2V0dHkuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zZXJpYWxnZXR0eS5iYgpAQCAtMSw0ICsxLDUgQEAKIFNVTU1BUlkgPSAiU2VyaWFsIHRlcm1pbmFsIHN1cHBvcnQgZm9yIHN5c3RlbWQiCitIT01FUEFHRSA9ICJodHRwczovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9zeXN0ZW1kLyIKIExJQ0VOU0UgPSAiR1BMdjIrIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMDttZDU9ODAxZjgwOTgwZDE3MWRkNjQyNTYxMDgzM2EyMmRiZTYiCiAKQEAgLTM4LDggKzM5LDYgQEAKIAlmaQogfQogCi1SREVQRU5EU18ke1BOfSA9ICJzeXN0ZW1kIgotCiAjIFRoaXMgaXMgYSBtYWNoaW5lIHNwZWNpZmljIGZpbGUKIEZJTEVTXyR7UE59ID0gIiR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vKi5zZXJ2aWNlICR7c3lzY29uZmRpcn0iCiBQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgpAQCAtNDksMyArNDgsNSBAQAogICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucyAoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgVHJ1ZSwgRmFsc2UsIGQpOgogICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiJ3N5c3RlbWQnIG5vdCBpbiBESVNUUk9fRkVBVFVSRVMiKQogfQorCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zeXN0ZW1jdGwvc3lzdGVtY3RsIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zeXN0ZW1jdGwvc3lzdGVtY3RsCmluZGV4IGVmYWQxNGMuLjZlNWExYjcgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtc3lzdGVtY3RsL3N5c3RlbWN0bAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXN5c3RlbWN0bC9zeXN0ZW1jdGwKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiAJIyBJZiBhbnkgbmV3IHVuaXQgdHlwZXMgYXJlIGFkZGVkIHRvIHN5c3RlbWQgdGhleSBzaG91bGQgYmUgYWRkZWQKIAkjIHRvIHRoaXMgcmVndWxhciBleHByZXNzaW9uLgotCXVuaXRfdHlwZXNfcmU9J1wuXChzZXJ2aWNlXHxzb2NrZXRcfGRldmljZVx8bW91bnRcfGF1dG9tb3VudFx8c3dhcFx8dGFyZ2V0XHxwYXRoXHx0aW1lclx8c25hcHNob3RcKVxzKiQnCisJdW5pdF90eXBlc19yZT0nXC5cKHNlcnZpY2VcfHNvY2tldFx8ZGV2aWNlXHxtb3VudFx8YXV0b21vdW50XHxzd2FwXHx0YXJnZXRcfHRhcmdldFwud2FudHNcfHBhdGhcfHRpbWVyXHxzbmFwc2hvdFwpXHMqJCcKIAlpZiBbICIkYWN0aW9uIiA9ICJwcmVzZXQiIF07IHRoZW4KIAkJYWN0aW9uPWBlZ3JlcCAtc2ggICRzZXJ2aWNlICRST09UL2V0Yy9zeXN0ZW1kL3VzZXItcHJlc2V0LyoucHJlc2V0IHwgY3V0IC1mMSAtZCcgJ2AKIAkJaWYgWyAteiAiJGFjdGlvbiIgXTsgdGhlbgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLmluYwppbmRleCAyOWUwYmU2Li5kOTlkMTUwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLmluYwpAQCAtMTQsMTAgKzE0LDggQEAKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UuR1BMMjttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUgXAogICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRS5MR1BMMi4xO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKIAotU1JDUkVWID0gImExZTJlZjdlYzkxMjkwMmQ4MTQyZTdjYjU4MzBjYmZiNDdkYmE4NmMiCitTUkNSRVYgPSAiYzFlZGFiN2FkMWU3Y2NjOWJlNjkzYmVkZmQ0NjRjZDFjYmZmYjM5NSIKIAogU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3N5c3RlbWQvc3lzdGVtZC5naXQ7cHJvdG9jb2w9Z2l0IgogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgotCi1MREZMQUdTX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLWxydCAtbHNzcF9ub25zaGFyZWQgLWxzc3AgIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAxLURlZmluZS1fUEFUSF9XVE1QWC1hbmQtX1BBVEhfVVRNUFgtaWYtbm90LWRlZmluZWQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDEtRGVmaW5lLV9QQVRIX1dUTVBYLWFuZC1fUEFUSF9VVE1QWC1pZi1ub3QtZGVmaW5lZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTU5OWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAxLURlZmluZS1fUEFUSF9XVE1QWC1hbmQtX1BBVEhfVVRNUFgtaWYtbm90LWRlZmluZWQucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSAzY2E1MzI2NDg1Y2IxOWU3NzVhZjZkZTYxNWMxN2JlNjZlNDRlNDcyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMjQgT2N0IDIwMTcgMjM6MDg6MjQgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gRGVmaW5lIF9QQVRIX1dUTVBYIGFuZCBfUEFUSF9VVE1QWCBpZiBub3QgZGVmaW5lZAorCitNdXNsIG5lZWRzIHRoZXNlIGRlZmluZXMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBzcmMvc2hhcmVkL3V0bXAtd3RtcC5jIHwgOCArKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9zaGFyZWQvdXRtcC13dG1wLmMgYi9zcmMvc2hhcmVkL3V0bXAtd3RtcC5jCitpbmRleCA5NzUwZGNkODEuLmJkNTVkNzRhMSAxMDA2NDQKKy0tLSBhL3NyYy9zaGFyZWQvdXRtcC13dG1wLmMKKysrKyBiL3NyYy9zaGFyZWQvdXRtcC13dG1wLmMKK0BAIC0yNyw2ICsyNyw3IEBACisgI2luY2x1ZGUgPHN5cy90aW1lLmg+CisgI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNpbmNsdWRlIDx1dG1wLmg+CisgI2luY2x1ZGUgPHV0bXB4Lmg+CisgCisgI2luY2x1ZGUgImFsbG9jLXV0aWwuaCIKK0BAIC00MSw2ICs0MiwxMyBAQAorICNpbmNsdWRlICJ1dGlsLmgiCisgI2luY2x1ZGUgInV0bXAtd3RtcC5oIgorIAorKyNpZiBkZWZpbmVkIF9QQVRIX1VUTVAgJiYgIWRlZmluZWQgX1BBVEhfVVRNUFgKKysjIGRlZmluZSBfUEFUSF9VVE1QWCBfUEFUSF9VVE1QCisrI2VuZGlmCisrI2lmIGRlZmluZWQgX1BBVEhfV1RNUCAmJiAhZGVmaW5lZCBfUEFUSF9XVE1QWAorKyMgZGVmaW5lIF9QQVRIX1dUTVBYIF9QQVRIX1dUTVAKKysjZW5kaWYKKysKKyBpbnQgdXRtcF9nZXRfcnVubGV2ZWwoaW50ICpydW5sZXZlbCwgaW50ICpwcmV2aW91cykgeworICAgICAgICAgc3RydWN0IHV0bXB4ICpmb3VuZCwgbG9va3VwID0geyAudXRfdHlwZSA9IFJVTl9MVkwgfTsKKyAgICAgICAgIGludCByOworLS0gCisyLjE0LjMKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAxLVVzZS11aW50bWF4X3QtZm9yLWhhbmRsaW5nLXJsaW1fdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwMS1Vc2UtdWludG1heF90LWZvci1oYW5kbGluZy1ybGltX3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc5ZGM3OAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwMS1Vc2UtdWludG1heF90LWZvci1oYW5kbGluZy1ybGltX3QucGF0Y2gKQEAgLTAsMCArMSw4OSBAQAorRnJvbSBiMmQ0MTcxYzZlNTIxY2YxZTcwMzMxZmI3NjkyMzRkNjNhNGE2ZDQ0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjcgT2N0IDIwMTcgMTM6MDA6NDEgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVXNlIHVpbnRtYXhfdCBmb3IgaGFuZGxpbmcgcmxpbV90CisKK1BSSXV7MzIsNjR9IGlzIG5vdCByaWdodCBmb3JtYXQgdG8gcmVwcmVzZW50IHJsaW1fdCB0eXBlCit0aGVyZWZvcmUgdXNlICVqdSBhbmQgdHlwZWNhc3QgdGhlIHJsaW1fdCB2YXJpYWJsZXMgdG8KK3VpbnRtYXhfdC4KKworRml4ZXMgcG9ydGFibGlsaXR5IGVycm9ycyBsaWtlCisKK2V4ZWN1dGUuYzozNDQ2OjM2OiBlcnJvcjogZm9ybWF0ICclbHUnIGV4cGVjdHMgYXJndW1lbnQgb2YgdHlwZSAnbG9uZyB1bnNpZ25lZCBpbnQnLCBidXQgYXJndW1lbnQgNSBoYXMgdHlwZSAncmxpbV90IHtha2EgbG9uZyBsb25nIHVuc2lnbmVkIGludH0nIFstV2Vycm9yPWZvcm1hdD1dCit8ICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGYsICIlcyVzOiAiIFJMSU1fRk1UICJcbiIsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5+fn5+fn5+Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCwgcmxpbWl0X3RvX3N0cmluZyhpKSwgYy0+cmxpbWl0W2ldLT5ybGltX21heCk7Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL3N5c3RlbWQvc3lzdGVtZC9wdWxsLzcxOTldCisKKyBzcmMvYmFzaWMvZm9ybWF0LXV0aWwuaCB8IDggLS0tLS0tLS0KKyBzcmMvYmFzaWMvcmxpbWl0LXV0aWwuYyB8IDggKysrKy0tLS0KKyBzcmMvY29yZS9leGVjdXRlLmMgICAgICB8IDggKysrKy0tLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvYmFzaWMvZm9ybWF0LXV0aWwuaCBiL3NyYy9iYXNpYy9mb3JtYXQtdXRpbC5oCitpbmRleCBhZTQyYThmODkuLjE0NDI0OWNkNiAxMDA2NDQKKy0tLSBhL3NyYy9iYXNpYy9mb3JtYXQtdXRpbC5oCisrKysgYi9zcmMvYmFzaWMvZm9ybWF0LXV0aWwuaAorQEAgLTYwLDE0ICs2MCw2IEBACisgIyAgZGVmaW5lIFBSSV9USU1FWCAibGkiCisgI2VuZGlmCisgCistI2lmIFNJWkVPRl9STElNX1QgPT0gOAorLSMgIGRlZmluZSBSTElNX0ZNVCAiJSIgUFJJdTY0CistI2VsaWYgU0laRU9GX1JMSU1fVCA9PSA0CistIyAgZGVmaW5lIFJMSU1fRk1UICIlIiBQUkl1MzIKKy0jZWxzZQorLSMgIGVycm9yIFVua25vd24gcmxpbV90IHNpemUKKy0jZW5kaWYKKy0KKyAjaWYgU0laRU9GX0RFVl9UID09IDgKKyAjICBkZWZpbmUgREVWX0ZNVCAiJSIgUFJJdTY0CisgI2VsaWYgU0laRU9GX0RFVl9UID09IDQKK2RpZmYgLS1naXQgYS9zcmMvYmFzaWMvcmxpbWl0LXV0aWwuYyBiL3NyYy9iYXNpYy9ybGltaXQtdXRpbC5jCitpbmRleCBjYTgzNGRmNjIuLjQxZmNlYmI3NCAxMDA2NDQKKy0tLSBhL3NyYy9iYXNpYy9ybGltaXQtdXRpbC5jCisrKysgYi9zcmMvYmFzaWMvcmxpbWl0LXV0aWwuYworQEAgLTI4NCwxMyArMjg0LDEzIEBAIGludCBybGltaXRfZm9ybWF0KGNvbnN0IHN0cnVjdCBybGltaXQgKnJsLCBjaGFyICoqcmV0KSB7CisgICAgICAgICBpZiAocmwtPnJsaW1fY3VyID49IFJMSU1fSU5GSU5JVFkgJiYgcmwtPnJsaW1fbWF4ID49IFJMSU1fSU5GSU5JVFkpCisgICAgICAgICAgICAgICAgIHMgPSBzdHJkdXAoImluZmluaXR5Iik7CisgICAgICAgICBlbHNlIGlmIChybC0+cmxpbV9jdXIgPj0gUkxJTV9JTkZJTklUWSkKKy0gICAgICAgICAgICAgICAgKHZvaWQpIGFzcHJpbnRmKCZzLCAiaW5maW5pdHk6IiBSTElNX0ZNVCwgcmwtPnJsaW1fbWF4KTsKKysgICAgICAgICAgICAgICAgKHZvaWQpIGFzcHJpbnRmKCZzLCAiaW5maW5pdHk6JWp1IiwgKHVpbnRtYXhfdClybC0+cmxpbV9tYXgpOworICAgICAgICAgZWxzZSBpZiAocmwtPnJsaW1fbWF4ID49IFJMSU1fSU5GSU5JVFkpCistICAgICAgICAgICAgICAgICh2b2lkKSBhc3ByaW50ZigmcywgUkxJTV9GTVQgIjppbmZpbml0eSIsIHJsLT5ybGltX2N1cik7CisrICAgICAgICAgICAgICAgICh2b2lkKSBhc3ByaW50ZigmcywgIiVqdTppbmZpbml0eSIsICh1aW50bWF4X3QpcmwtPnJsaW1fY3VyKTsKKyAgICAgICAgIGVsc2UgaWYgKHJsLT5ybGltX2N1ciA9PSBybC0+cmxpbV9tYXgpCistICAgICAgICAgICAgICAgICh2b2lkKSBhc3ByaW50ZigmcywgUkxJTV9GTVQsIHJsLT5ybGltX2N1cik7CisrICAgICAgICAgICAgICAgICh2b2lkKSBhc3ByaW50ZigmcywgIiVqdSIsICh1aW50bWF4X3QpcmwtPnJsaW1fY3VyKTsKKyAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgKHZvaWQpIGFzcHJpbnRmKCZzLCBSTElNX0ZNVCAiOiIgUkxJTV9GTVQsIHJsLT5ybGltX2N1ciwgcmwtPnJsaW1fbWF4KTsKKysgICAgICAgICAgICAgICAgKHZvaWQpIGFzcHJpbnRmKCZzLCAiJWp1OiVqdSIsICh1aW50bWF4X3QpcmwtPnJsaW1fY3VyLCAodWludG1heF90KXJsLT5ybGltX21heCk7CisgCisgICAgICAgICBpZiAoIXMpCisgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2V4ZWN1dGUuYyBiL3NyYy9jb3JlL2V4ZWN1dGUuYworaW5kZXggZDcyZTViZjA4Li5kMzg5NDYwMDIgMTAwNjQ0CistLS0gYS9zcmMvY29yZS9leGVjdXRlLmMKKysrKyBiL3NyYy9jb3JlL2V4ZWN1dGUuYworQEAgLTM0NDMsMTAgKzM0NDMsMTAgQEAgdm9pZCBleGVjX2NvbnRleHRfZHVtcChFeGVjQ29udGV4dCAqYywgRklMRSogZiwgY29uc3QgY2hhciAqcHJlZml4KSB7CisgCisgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUkxJTV9OTElNSVRTOyBpKyspCisgICAgICAgICAgICAgICAgIGlmIChjLT5ybGltaXRbaV0pIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGYsICIlcyVzOiAiIFJMSU1fRk1UICJcbiIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXgsIHJsaW1pdF90b19zdHJpbmcoaSksIGMtPnJsaW1pdFtpXS0+cmxpbV9tYXgpOworLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoZiwgIiVzJXNTb2Z0OiAiIFJMSU1fRk1UICJcbiIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXgsIHJsaW1pdF90b19zdHJpbmcoaSksIGMtPnJsaW1pdFtpXS0+cmxpbV9jdXIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoZiwgIiVzJXM6ICVqdVxuIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCwgcmxpbWl0X3RvX3N0cmluZyhpKSwgKHVpbnRtYXhfdCljLT5ybGltaXRbaV0tPnJsaW1fbWF4KTsKKysgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGYsICIlcyVzU29mdDogJWp1XG4iLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4LCBybGltaXRfdG9fc3RyaW5nKGkpLCAodWludG1heF90KWMtPnJsaW1pdFtpXS0+cmxpbV9jdXIpOworICAgICAgICAgICAgICAgICB9CisgCisgICAgICAgICBpZiAoYy0+aW9wcmlvX3NldCkgeworLS0gCisyLjE0LjMKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAxLWFkZC1mYWxsYmFjay1wYXJzZV9wcmludGZfZm9ybWF0LWltcGxlbWVudGF0aW9uLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAxLWFkZC1mYWxsYmFjay1wYXJzZV9wcmludGZfZm9ybWF0LWltcGxlbWVudGF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZjc0NTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDEtYWRkLWZhbGxiYWNrLXBhcnNlX3ByaW50Zl9mb3JtYXQtaW1wbGVtZW50YXRpb24ucGF0Y2gKQEAgLTAsMCArMSw0MzMgQEAKK0Zyb20gMDkzM2NhNjI1MTgwOGY4NTZiOTJiMGNlOGRhODY5NmQ1ZmViYzMzMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEVtaWwgUmVubmVyIEJlcnRoaW5nIDxzeXN0ZW1kQGVzbWlsLmRrPgorRGF0ZTogTW9uLCAyMyBPY3QgMjAxNyAxMDo0MTozOSAtMDcwMAorU3ViamVjdDogW1BBVENIIDAxLzEyXSBhZGQgZmFsbGJhY2sgcGFyc2VfcHJpbnRmX2Zvcm1hdCBpbXBsZW1lbnRhdGlvbgorCitTaWduZWQtb2ZmLWJ5OiBFbWlsIFJlbm5lciBCZXJ0aGluZyA8c3lzdGVtZEBlc21pbC5kaz4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICB8ICAgNCArCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICB8ICAgMiArCisgc3JjL2Jhc2ljL3BhcnNlLXByaW50Zi1mb3JtYXQuYyB8IDI3MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgc3JjL2Jhc2ljL3BhcnNlLXByaW50Zi1mb3JtYXQuaCB8ICA1NyArKysrKysrKysKKyBzcmMvYmFzaWMvc3RkaW8tdXRpbC5oICAgICAgICAgIHwgICAyICstCisgc3JjL2pvdXJuYWwvam91cm5hbC1zZW5kLmMgICAgICB8ICAgMiArLQorIDYgZmlsZXMgY2hhbmdlZCwgMzM4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYXNpYy9wYXJzZS1wcmludGYtZm9ybWF0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jhc2ljL3BhcnNlLXByaW50Zi1mb3JtYXQuaAorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggNjkyZDdiYjk1Li4zY2M4ZjM0NTEgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC05OTcsNiArOTk3LDEwIEBAIGxpYmJhc2ljX2xhX1NPVVJDRVMgPSBcCisgCXNyYy9iYXNpYy9qb3VybmFsLWltcG9ydGVyLmggXAorIAlzcmMvYmFzaWMvam91cm5hbC1pbXBvcnRlci5jCisgCisraWYgIUhBVkVfUFJJTlRGX0gKKytsaWJiYXNpY19sYV9TT1VSQ0VTICs9IHNyYy9iYXNpYy9wYXJzZS1wcmludGYtZm9ybWF0LmMKKytlbmRpZgorKworIG5vZGlzdF9saWJiYXNpY19sYV9TT1VSQ0VTID0gXAorIAlzcmMvYmFzaWMvZXJybm8tZnJvbS1uYW1lLmggXAorIAlzcmMvYmFzaWMvZXJybm8tdG8tbmFtZS5oIFwKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDYwZTdkZjVlZS4uZWZjZGM2YzE2IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zMDgsOCArMzA4LDEwIEBAIEFDX0NIRUNLX0hFQURFUlMoW3VjaGFyLmhdLCBbXSwgW10pCisgQUNfQ0hFQ0tfSEVBREVSUyhbc3lzL2NhcGFiaWxpdHkuaF0sIFtdLCBbQUNfTVNHX0VSUk9SKFsqKiogUE9TSVggY2FwcyBoZWFkZXJzIG5vdCBmb3VuZF0pXSkKKyBBQ19DSEVDS19IRUFERVJTKFtsaW51eC9idHJmcy5oXSwgW10sIFtdKQorIEFDX0NIRUNLX0hFQURFUlMoW2xpbnV4L21lbWZkLmhdLCBbXSwgW10pCisrQUNfQ0hFQ0tfSEVBREVSUyhbcHJpbnRmLmhdLCBbXSwgW10pCisgQUNfQ0hFQ0tfSEVBREVSUyhbbGludXgvdm1fc29ja2V0cy5oXSwgW10sIFtdLCBbI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD5dKQorIAorK0FNX0NPTkRJVElPTkFMKEhBVkVfUFJJTlRGX0gsIFt0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9wcmludGZfaCIgPSB4eWVzXSkKKyAjIHVuY29uZGl0aW9uYWxseSBwdWxsLWluIGxpYnJ0IHdpdGggb2xkIGdsaWJjIHZlcnNpb25zCisgQUNfU0VBUkNIX0xJQlMoW2Nsb2NrX2dldHRpbWVdLCBbcnRdLCBbXSwgW10pCisgCitkaWZmIC0tZ2l0IGEvc3JjL2Jhc2ljL3BhcnNlLXByaW50Zi1mb3JtYXQuYyBiL3NyYy9iYXNpYy9wYXJzZS1wcmludGYtZm9ybWF0LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAuLjQ5NDM3ZTU0NAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2Jhc2ljL3BhcnNlLXByaW50Zi1mb3JtYXQuYworQEAgLTAsMCArMSwyNzMgQEAKKysvKi0qLSBNb2RlOiBDOyBjLWJhc2ljLW9mZnNldDogODsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLSovCisrCisrLyoqKgorKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc3lzdGVtZC4KKysKKysgIENvcHlyaWdodCAyMDE0IEVtaWwgUmVubmVyIEJlcnRoaW5nIDxzeXN0ZW1kQGVzbWlsLmRrPgorKworKyAgV2l0aCBwYXJ0cyBmcm9tIHRoZSBtdXNsIEMgbGlicmFyeQorKyAgQ29weXJpZ2h0IDIwMDUtMjAxNCBSaWNoIEZlbGtlciwgZXQgYWwuCisrCisrICBzeXN0ZW1kIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgIHN5c3RlbWQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisrICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICBhbG9uZyB3aXRoIHN5c3RlbWQ7IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKysqKiovCisrCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysKKysjaW5jbHVkZSAicGFyc2UtcHJpbnRmLWZvcm1hdC5oIgorKworK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdW1lX25vbmFyZyhjb25zdCBjaGFyICpmbXQpCisreworKyAgICAgICAgZG8geworKyAgICAgICAgICAgICAgICBpZiAoKmZtdCA9PSAnXDAnKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbXQ7CisrICAgICAgICB9IHdoaWxlICgqZm10KysgIT0gJyUnKTsKKysgICAgICAgIHJldHVybiBmbXQ7CisrfQorKworK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdW1lX251bShjb25zdCBjaGFyICpmbXQpCisreworKyAgICAgICAgZm9yICg7KmZtdCA+PSAnMCcgJiYgKmZtdCA8PSAnOSc7IGZtdCsrKQorKyAgICAgICAgICAgICAgICAvKiBkbyBub3RoaW5nICovOworKyAgICAgICAgcmV0dXJuIGZtdDsKKyt9CisrCisrc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN1bWVfYXJnbihjb25zdCBjaGFyICpmbXQsIHNpemVfdCAqYXJnKQorK3sKKysgICAgICAgIGNvbnN0IGNoYXIgKnAgPSBmbXQ7CisrICAgICAgICBzaXplX3QgdmFsID0gMDsKKysKKysgICAgICAgIGlmICgqcCA8ICcxJyB8fCAqcCA+ICc5JykKKysgICAgICAgICAgICAgICAgcmV0dXJuIGZtdDsKKysgICAgICAgIGRvIHsKKysgICAgICAgICAgICAgICAgdmFsID0gMTAqdmFsICsgKCpwKysgLSAnMCcpOworKyAgICAgICAgfSB3aGlsZSAoKnAgPj0gJzAnICYmICpwIDw9ICc5Jyk7CisrCisrICAgICAgICBpZiAoKnAgIT0gJyQnKQorKyAgICAgICAgICAgICAgICByZXR1cm4gZm10OworKyAgICAgICAgKmFyZyA9IHZhbDsKKysgICAgICAgIHJldHVybiBwKzE7CisrfQorKworK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdW1lX2ZsYWdzKGNvbnN0IGNoYXIgKmZtdCkKKyt7CisrICAgICAgICB3aGlsZSAoMSkgeworKyAgICAgICAgICAgICAgICBzd2l0Y2ggKCpmbXQpIHsKKysgICAgICAgICAgICAgICAgY2FzZSAnIyc6CisrICAgICAgICAgICAgICAgIGNhc2UgJzAnOgorKyAgICAgICAgICAgICAgICBjYXNlICctJzoKKysgICAgICAgICAgICAgICAgY2FzZSAnICc6CisrICAgICAgICAgICAgICAgIGNhc2UgJysnOgorKyAgICAgICAgICAgICAgICBjYXNlICdcJyc6CisrICAgICAgICAgICAgICAgIGNhc2UgJ0knOgorKyAgICAgICAgICAgICAgICAgICAgICAgIGZtdCsrOworKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIHJldHVybiBmbXQ7CisrICAgICAgICB9CisrfQorKworK2VudW0gc3RhdGUgeworKyAgICAgICAgQkFSRSwKKysgICAgICAgIExQUkUsCisrICAgICAgICBMTFBSRSwKKysgICAgICAgIEhQUkUsCisrICAgICAgICBISFBSRSwKKysgICAgICAgIEJJR0xQUkUsCisrICAgICAgICBaVFBSRSwKKysgICAgICAgIEpQUkUsCisrICAgICAgICBTVE9QCisrfTsKKysKKytlbnVtIHR5cGUgeworKyAgICAgICAgTk9ORSwKKysgICAgICAgIFBUUiwKKysgICAgICAgIElOVCwKKysgICAgICAgIFVJTlQsCisrICAgICAgICBVTExPTkcsCisrICAgICAgICBMT05HLAorKyAgICAgICAgVUxPTkcsCisrICAgICAgICBTSE9SVCwKKysgICAgICAgIFVTSE9SVCwKKysgICAgICAgIENIQVIsCisrICAgICAgICBVQ0hBUiwKKysgICAgICAgIExMT05HLAorKyAgICAgICAgU0laRVQsCisrICAgICAgICBJTUFYLAorKyAgICAgICAgVU1BWCwKKysgICAgICAgIFBESUZGLAorKyAgICAgICAgVUlQVFIsCisrICAgICAgICBEQkwsCisrICAgICAgICBMREJMLAorKyAgICAgICAgTUFYVFlQRQorK307CisrCisrc3RhdGljIGNvbnN0IHNob3J0IHBhX3R5cGVzW01BWFRZUEVdID0geworKyAgICAgICAgW05PTkVdICAgPSBQQV9JTlQsCisrICAgICAgICBbUFRSXSAgICA9IFBBX1BPSU5URVIsCisrICAgICAgICBbSU5UXSAgICA9IFBBX0lOVCwKKysgICAgICAgIFtVSU5UXSAgID0gUEFfSU5ULAorKyAgICAgICAgW1VMTE9OR10gPSBQQV9JTlQgfCBQQV9GTEFHX0xPTkdfTE9ORywKKysgICAgICAgIFtMT05HXSAgID0gUEFfSU5UIHwgUEFfRkxBR19MT05HLAorKyAgICAgICAgW1VMT05HXSAgPSBQQV9JTlQgfCBQQV9GTEFHX0xPTkcsCisrICAgICAgICBbU0hPUlRdICA9IFBBX0lOVCB8IFBBX0ZMQUdfU0hPUlQsCisrICAgICAgICBbVVNIT1JUXSA9IFBBX0lOVCB8IFBBX0ZMQUdfU0hPUlQsCisrICAgICAgICBbQ0hBUl0gICA9IFBBX0NIQVIsCisrICAgICAgICBbVUNIQVJdICA9IFBBX0NIQVIsCisrICAgICAgICBbTExPTkddICA9IFBBX0lOVCB8IFBBX0ZMQUdfTE9OR19MT05HLAorKyAgICAgICAgW1NJWkVUXSAgPSBQQV9JTlQgfCBQQV9GTEFHX0xPTkcsCisrICAgICAgICBbSU1BWF0gICA9IFBBX0lOVCB8IFBBX0ZMQUdfTE9OR19MT05HLAorKyAgICAgICAgW1VNQVhdICAgPSBQQV9JTlQgfCBQQV9GTEFHX0xPTkdfTE9ORywKKysgICAgICAgIFtQRElGRl0gID0gUEFfSU5UIHwgUEFfRkxBR19MT05HX0xPTkcsCisrICAgICAgICBbVUlQVFJdICA9IFBBX0lOVCB8IFBBX0ZMQUdfTE9ORywKKysgICAgICAgIFtEQkxdICAgID0gUEFfRE9VQkxFLAorKyAgICAgICAgW0xEQkxdICAgPSBQQV9ET1VCTEUgfCBQQV9GTEFHX0xPTkdfRE9VQkxFCisrfTsKKysKKysjZGVmaW5lIFMoeCkgWyh4KS0nQSddCisrI2RlZmluZSBFKHgpIChTVE9QICsgKHgpKQorKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHN0YXRlc1tdWyd6Jy0nQScrMV0gPSB7CisrICAgICAgICB7IC8qIDA6IGJhcmUgdHlwZXMgKi8KKysgICAgICAgICAgICAgICAgUygnZCcpID0gRShJTlQpLCBTKCdpJykgPSBFKElOVCksCisrICAgICAgICAgICAgICAgIFMoJ28nKSA9IEUoVUlOVCksUygndScpID0gRShVSU5UKSxTKCd4JykgPSBFKFVJTlQpLCBTKCdYJykgPSBFKFVJTlQpLAorKyAgICAgICAgICAgICAgICBTKCdlJykgPSBFKERCTCksIFMoJ2YnKSA9IEUoREJMKSwgUygnZycpID0gRShEQkwpLCAgUygnYScpID0gRShEQkwpLAorKyAgICAgICAgICAgICAgICBTKCdFJykgPSBFKERCTCksIFMoJ0YnKSA9IEUoREJMKSwgUygnRycpID0gRShEQkwpLCAgUygnQScpID0gRShEQkwpLAorKyAgICAgICAgICAgICAgICBTKCdjJykgPSBFKENIQVIpLFMoJ0MnKSA9IEUoSU5UKSwKKysgICAgICAgICAgICAgICAgUygncycpID0gRShQVFIpLCBTKCdTJykgPSBFKFBUUiksIFMoJ3AnKSA9IEUoVUlQVFIpLFMoJ24nKSA9IEUoUFRSKSwKKysgICAgICAgICAgICAgICAgUygnbScpID0gRShOT05FKSwKKysgICAgICAgICAgICAgICAgUygnbCcpID0gTFBSRSwgICBTKCdoJykgPSBIUFJFLCBTKCdMJykgPSBCSUdMUFJFLAorKyAgICAgICAgICAgICAgICBTKCd6JykgPSBaVFBSRSwgIFMoJ2onKSA9IEpQUkUsIFMoJ3QnKSA9IFpUUFJFCisrICAgICAgICB9LCB7IC8qIDE6IGwtcHJlZml4ZWQgKi8KKysgICAgICAgICAgICAgICAgUygnZCcpID0gRShMT05HKSwgUygnaScpID0gRShMT05HKSwKKysgICAgICAgICAgICAgICAgUygnbycpID0gRShVTE9ORyksUygndScpID0gRShVTE9ORyksUygneCcpID0gRShVTE9ORyksUygnWCcpID0gRShVTE9ORyksCisrICAgICAgICAgICAgICAgIFMoJ2UnKSA9IEUoREJMKSwgIFMoJ2YnKSA9IEUoREJMKSwgIFMoJ2cnKSA9IEUoREJMKSwgIFMoJ2EnKSA9IEUoREJMKSwKKysgICAgICAgICAgICAgICAgUygnRScpID0gRShEQkwpLCAgUygnRicpID0gRShEQkwpLCAgUygnRycpID0gRShEQkwpLCAgUygnQScpID0gRShEQkwpLAorKyAgICAgICAgICAgICAgICBTKCdjJykgPSBFKElOVCksICBTKCdzJykgPSBFKFBUUiksICBTKCduJykgPSBFKFBUUiksCisrICAgICAgICAgICAgICAgIFMoJ2wnKSA9IExMUFJFCisrICAgICAgICB9LCB7IC8qIDI6IGxsLXByZWZpeGVkICovCisrICAgICAgICAgICAgICAgIFMoJ2QnKSA9IEUoTExPTkcpLCBTKCdpJykgPSBFKExMT05HKSwKKysgICAgICAgICAgICAgICAgUygnbycpID0gRShVTExPTkcpLFMoJ3UnKSA9IEUoVUxMT05HKSwKKysgICAgICAgICAgICAgICAgUygneCcpID0gRShVTExPTkcpLFMoJ1gnKSA9IEUoVUxMT05HKSwKKysgICAgICAgICAgICAgICAgUygnbicpID0gRShQVFIpCisrICAgICAgICB9LCB7IC8qIDM6IGgtcHJlZml4ZWQgKi8KKysgICAgICAgICAgICAgICAgUygnZCcpID0gRShTSE9SVCksIFMoJ2knKSA9IEUoU0hPUlQpLAorKyAgICAgICAgICAgICAgICBTKCdvJykgPSBFKFVTSE9SVCksUygndScpID0gRShVU0hPUlQpLAorKyAgICAgICAgICAgICAgICBTKCd4JykgPSBFKFVTSE9SVCksUygnWCcpID0gRShVU0hPUlQpLAorKyAgICAgICAgICAgICAgICBTKCduJykgPSBFKFBUUiksCisrICAgICAgICAgICAgICAgIFMoJ2gnKSA9IEhIUFJFCisrICAgICAgICB9LCB7IC8qIDQ6IGhoLXByZWZpeGVkICovCisrICAgICAgICAgICAgICAgIFMoJ2QnKSA9IEUoQ0hBUiksIFMoJ2knKSA9IEUoQ0hBUiksCisrICAgICAgICAgICAgICAgIFMoJ28nKSA9IEUoVUNIQVIpLFMoJ3UnKSA9IEUoVUNIQVIpLAorKyAgICAgICAgICAgICAgICBTKCd4JykgPSBFKFVDSEFSKSxTKCdYJykgPSBFKFVDSEFSKSwKKysgICAgICAgICAgICAgICAgUygnbicpID0gRShQVFIpCisrICAgICAgICB9LCB7IC8qIDU6IEwtcHJlZml4ZWQgKi8KKysgICAgICAgICAgICAgICAgUygnZScpID0gRShMREJMKSxTKCdmJykgPSBFKExEQkwpLFMoJ2cnKSA9IEUoTERCTCksIFMoJ2EnKSA9IEUoTERCTCksCisrICAgICAgICAgICAgICAgIFMoJ0UnKSA9IEUoTERCTCksUygnRicpID0gRShMREJMKSxTKCdHJykgPSBFKExEQkwpLCBTKCdBJykgPSBFKExEQkwpLAorKyAgICAgICAgICAgICAgICBTKCduJykgPSBFKFBUUikKKysgICAgICAgIH0sIHsgLyogNjogei0gb3IgdC1wcmVmaXhlZCAoYXNzdW1lZCB0byBiZSBzYW1lIHNpemUpICovCisrICAgICAgICAgICAgICAgIFMoJ2QnKSA9IEUoUERJRkYpLFMoJ2knKSA9IEUoUERJRkYpLAorKyAgICAgICAgICAgICAgICBTKCdvJykgPSBFKFNJWkVUKSxTKCd1JykgPSBFKFNJWkVUKSwKKysgICAgICAgICAgICAgICAgUygneCcpID0gRShTSVpFVCksUygnWCcpID0gRShTSVpFVCksCisrICAgICAgICAgICAgICAgIFMoJ24nKSA9IEUoUFRSKQorKyAgICAgICAgfSwgeyAvKiA3OiBqLXByZWZpeGVkICovCisrICAgICAgICAgICAgICAgIFMoJ2QnKSA9IEUoSU1BWCksIFMoJ2knKSA9IEUoSU1BWCksCisrICAgICAgICAgICAgICAgIFMoJ28nKSA9IEUoVU1BWCksIFMoJ3UnKSA9IEUoVU1BWCksCisrICAgICAgICAgICAgICAgIFMoJ3gnKSA9IEUoVU1BWCksIFMoJ1gnKSA9IEUoVU1BWCksCisrICAgICAgICAgICAgICAgIFMoJ24nKSA9IEUoUFRSKQorKyAgICAgICAgfQorK307CisrCisrc2l6ZV90IHBhcnNlX3ByaW50Zl9mb3JtYXQoY29uc3QgY2hhciAqZm10LCBzaXplX3QgbiwgaW50ICp0eXBlcykKKyt7CisrICAgICAgICBzaXplX3QgaSA9IDA7CisrICAgICAgICBzaXplX3QgbGFzdCA9IDA7CisrCisrICAgICAgICBtZW1zZXQodHlwZXMsIDAsIG4pOworKworKyAgICAgICAgd2hpbGUgKDEpIHsKKysgICAgICAgICAgICAgICAgc2l6ZV90IGFyZzsKKysgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0YXRlOworKworKyAgICAgICAgICAgICAgICBmbXQgPSBjb25zdW1lX25vbmFyZyhmbXQpOworKyAgICAgICAgICAgICAgICBpZiAoKmZtdCA9PSAnXDAnKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgICBpZiAoKmZtdCA9PSAnJScpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBmbXQrKzsKKysgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBhcmcgPSAwOworKyAgICAgICAgICAgICAgICBmbXQgPSBjb25zdW1lX2FyZ24oZm10LCAmYXJnKTsKKysgICAgICAgICAgICAgICAgLyogZmxhZ3MgKi8KKysgICAgICAgICAgICAgICAgZm10ID0gY29uc3VtZV9mbGFncyhmbXQpOworKyAgICAgICAgICAgICAgICAvKiB3aWR0aCAqLworKyAgICAgICAgICAgICAgICBpZiAoKmZtdCA9PSAnKicpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgd2FyZyA9IDA7CisrICAgICAgICAgICAgICAgICAgICAgICAgZm10ID0gY29uc3VtZV9hcmduKGZtdCsxLCAmd2FyZyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhcmcgPT0gMCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcmcgPSArK2k7CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhcmcgPiBsYXN0KQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IHdhcmc7CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhcmcgPD0gbiAmJiB0eXBlc1t3YXJnLTFdID09IE5PTkUpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlc1t3YXJnLTFdID0gSU5UOworKyAgICAgICAgICAgICAgICB9IGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgICBmbXQgPSBjb25zdW1lX251bShmbXQpOworKyAgICAgICAgICAgICAgICAvKiBwcmVjaXNpb24gKi8KKysgICAgICAgICAgICAgICAgaWYgKCpmbXQgPT0gJy4nKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgZm10Kys7CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpmbXQgPT0gJyonKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGFyZyA9IDA7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXQgPSBjb25zdW1lX2FyZ24oZm10KzEsICZwYXJnKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJnID09IDApCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmcgPSArK2k7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZyA+IGxhc3QpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgPSBwYXJnOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmcgPD0gbiAmJiB0eXBlc1twYXJnLTFdID09IE5PTkUpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzW3BhcmctMV0gPSBJTlQ7CisrICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqZm10ID09ICctJykKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm10Kys7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXQgPSBjb25zdW1lX251bShmbXQpOworKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAvKiBsZW5ndGggbW9kaWZpZXIgYW5kIGNvbnZlcnNpb24gc3BlY2lmaWVyICovCisrICAgICAgICAgICAgICAgIHN0YXRlID0gQkFSRTsKKysgICAgICAgICAgICAgICAgZG8geworKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9ICpmbXQrKzsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA8ICdBJyB8fCBjID4gJ3onKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZXNbc3RhdGVdUyhjKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gMCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgICAgICB9IHdoaWxlIChzdGF0ZSA8IFNUT1ApOworKworKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gRShOT05FKSkKKysgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKysKKysgICAgICAgICAgICAgICAgaWYgKGFyZyA9PSAwKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9ICsraTsKKysgICAgICAgICAgICAgICAgaWYgKGFyZyA+IGxhc3QpCisrICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IGFyZzsKKysgICAgICAgICAgICAgICAgaWYgKGFyZyA8PSBuKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzW2FyZy0xXSA9IHN0YXRlIC0gU1RPUDsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmIChsYXN0ID4gbikKKysgICAgICAgICAgICAgICAgbGFzdCA9IG47CisrICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGFzdDsgaSsrKQorKyAgICAgICAgICAgICAgICB0eXBlc1tpXSA9IHBhX3R5cGVzW3R5cGVzW2ldXTsKKysKKysgICAgICAgIHJldHVybiBsYXN0OworK30KK2RpZmYgLS1naXQgYS9zcmMvYmFzaWMvcGFyc2UtcHJpbnRmLWZvcm1hdC5oIGIvc3JjL2Jhc2ljL3BhcnNlLXByaW50Zi1mb3JtYXQuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMC4uNDM3MTE3N2IwCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYmFzaWMvcGFyc2UtcHJpbnRmLWZvcm1hdC5oCitAQCAtMCwwICsxLDU3IEBACisrLyotKi0gTW9kZTogQzsgYy1iYXNpYy1vZmZzZXQ6IDg7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0qLworKworKy8qKioKKysgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHN5c3RlbWQuCisrCisrICBDb3B5cmlnaHQgMjAxNCBFbWlsIFJlbm5lciBCZXJ0aGluZyA8c3lzdGVtZEBlc21pbC5kaz4KKysKKysgIFdpdGggcGFydHMgZnJvbSB0aGUgR05VIEMgTGlicmFyeQorKyAgQ29weXJpZ2h0IDE5OTEtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgIHN5c3RlbWQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgc3lzdGVtZCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKysgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgIGFsb25nIHdpdGggc3lzdGVtZDsgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKyoqKi8KKysKKysjcHJhZ21hIG9uY2UKKysKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrCisrI2lmZGVmIEhBVkVfUFJJTlRGX0gKKysjaW5jbHVkZSA8cHJpbnRmLmg+CisrI2Vsc2UKKysKKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrZW51bSB7CQkJCS8qIEMgdHlwZTogKi8KKysgIFBBX0lOVCwJCQkvKiBpbnQgKi8KKysgIFBBX0NIQVIsCQkJLyogaW50LCBjYXN0IHRvIGNoYXIgKi8KKysgIFBBX1dDSEFSLAkJCS8qIHdpZGUgY2hhciAqLworKyAgUEFfU1RSSU5HLAkJCS8qIGNvbnN0IGNoYXIgKiwgYSAnXDAnLXRlcm1pbmF0ZWQgc3RyaW5nICovCisrICBQQV9XU1RSSU5HLAkJCS8qIGNvbnN0IHdjaGFyX3QgKiwgd2lkZSBjaGFyYWN0ZXIgc3RyaW5nICovCisrICBQQV9QT0lOVEVSLAkJCS8qIHZvaWQgKiAqLworKyAgUEFfRkxPQVQsCQkJLyogZmxvYXQgKi8KKysgIFBBX0RPVUJMRSwJCQkvKiBkb3VibGUgKi8KKysgIFBBX0xBU1QKKyt9OworKworKy8qIEZsYWcgYml0cyB0aGF0IGNhbiBiZSBzZXQgaW4gYSB0eXBlIHJldHVybmVkIGJ5IGBwYXJzZV9wcmludGZfZm9ybWF0Jy4gICovCisrI2RlZmluZQlQQV9GTEFHX01BU0sJCTB4ZmYwMAorKyNkZWZpbmUJUEFfRkxBR19MT05HX0xPTkcJKDEgPDwgOCkKKysjZGVmaW5lCVBBX0ZMQUdfTE9OR19ET1VCTEUJUEFfRkxBR19MT05HX0xPTkcKKysjZGVmaW5lCVBBX0ZMQUdfTE9ORwkJKDEgPDwgOSkKKysjZGVmaW5lCVBBX0ZMQUdfU0hPUlQJCSgxIDw8IDEwKQorKyNkZWZpbmUJUEFfRkxBR19QVFIJCSgxIDw8IDExKQorKworK3NpemVfdCBwYXJzZV9wcmludGZfZm9ybWF0KGNvbnN0IGNoYXIgKmZtdCwgc2l6ZV90IG4sIGludCAqdHlwZXMpOworKworKyNlbmRpZiAvKiBIQVZFX1BSSU5URl9IICovCitkaWZmIC0tZ2l0IGEvc3JjL2Jhc2ljL3N0ZGlvLXV0aWwuaCBiL3NyYy9iYXNpYy9zdGRpby11dGlsLmgKK2luZGV4IGJkMTE0NGI0Yy4uYzljOTVlYjU0IDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL3N0ZGlvLXV0aWwuaAorKysrIGIvc3JjL2Jhc2ljL3N0ZGlvLXV0aWwuaAorQEAgLTE5LDEyICsxOSwxMiBAQAorICAgYWxvbmcgd2l0aCBzeXN0ZW1kOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKioqLworIAorLSNpbmNsdWRlIDxwcmludGYuaD4KKyAjaW5jbHVkZSA8c3RkYXJnLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIAorICNpbmNsdWRlICJtYWNyby5oIgorKyNpbmNsdWRlICJwYXJzZS1wcmludGYtZm9ybWF0LmgiCisgCisgI2RlZmluZSB4c3ByaW50ZihidWYsIGZtdCwgLi4uKSBcCisgICAgICAgICBhc3NlcnRfbWVzc2FnZV9zZSgoc2l6ZV90KSBzbnByaW50ZihidWYsIEVMRU1FTlRTT0YoYnVmKSwgZm10LCBfX1ZBX0FSR1NfXykgPCBFTEVNRU5UU09GKGJ1ZiksICJ4c3ByaW50ZjogIiAjYnVmICJbXSBtdXN0IGJlIGJpZyBlbm91Z2giKQorZGlmZiAtLWdpdCBhL3NyYy9qb3VybmFsL2pvdXJuYWwtc2VuZC5jIGIvc3JjL2pvdXJuYWwvam91cm5hbC1zZW5kLmMKK2luZGV4IDQ0MGZiYTY3Yy4uMDIzNmM0M2M0IDEwMDY0NAorLS0tIGEvc3JjL2pvdXJuYWwvam91cm5hbC1zZW5kLmMKKysrKyBiL3NyYy9qb3VybmFsL2pvdXJuYWwtc2VuZC5jCitAQCAtMTksNyArMTksNiBAQAorIAorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxmY250bC5oPgorLSNpbmNsdWRlIDxwcmludGYuaD4KKyAjaW5jbHVkZSA8c3RkZGVmLmg+CisgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyAjaW5jbHVkZSA8c3lzL3VuLmg+CitAQCAtMzgsNiArMzcsNyBAQAorICNpbmNsdWRlICJzdGRpby11dGlsLmgiCisgI2luY2x1ZGUgInN0cmluZy11dGlsLmgiCisgI2luY2x1ZGUgInV0aWwuaCIKKysjaW5jbHVkZSAicGFyc2UtcHJpbnRmLWZvcm1hdC5oIgorIAorICNkZWZpbmUgU05EQlVGX1NJWkUgKDgqMTAyNCoxMDI0KQorIAorLS0gCisyLjE0LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAxLWNvcmUtZGV2aWNlLmMtQ2hhbmdlLXRoZS1kZWZhdWx0LWRldmljZS10aW1lb3V0LXRvLTIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDEtY29yZS1kZXZpY2UuYy1DaGFuZ2UtdGhlLWRlZmF1bHQtZGV2aWNlLXRpbWVvdXQtdG8tMi5wYXRjaAppbmRleCBlZTJjZDZjLi43ZjFiYzQ0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDEtY29yZS1kZXZpY2UuYy1DaGFuZ2UtdGhlLWRlZmF1bHQtZGV2aWNlLXRpbWVvdXQtdG8tMi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDEtY29yZS1kZXZpY2UuYy1DaGFuZ2UtdGhlLWRlZmF1bHQtZGV2aWNlLXRpbWVvdXQtdG8tMi5wYXRjaApAQCAtMSw3ICsxLDcgQEAKLUZyb20gYTU0NGQ2ZDE1ZjVjNDE4MDg0ZjMyMjM0OWFhZmUzNDExMjhkNWZjYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gZjFiNWE2ZjcxN2JkYTZmODBhNmI1ZTNlNGQ1MGI0NTBmNmNjN2IwOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiBEYXRlOiBNb24sIDE0IERlYyAyMDE1IDA0OjA5OjE5ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMDEvMTldIGNvcmUvZGV2aWNlLmM6IENoYW5nZSB0aGUgZGVmYXVsdCBkZXZpY2UgdGltZW91dCB0byAyNDAKK1N1YmplY3Q6IFtQQVRDSCAxNC8xNF0gY29yZS9kZXZpY2UuYzogQ2hhbmdlIHRoZSBkZWZhdWx0IGRldmljZSB0aW1lb3V0IHRvIDI0MAogIHNlYy4KIE1JTUUtVmVyc2lvbjogMS4wCiBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQEAgLTExLDIzICsxMSwyNCBAQAogCiBTaWduZWQtb2ZmLWJ5OiBBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKIC0tLQogIHNyYy9jb3JlL2RldmljZS5jIHwgMiArLQogIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQogCiBkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvZGV2aWNlLmMgYi9zcmMvY29yZS9kZXZpY2UuYwotaW5kZXggYzU3MmE2Ny4uZjkwNzc0ZSAxMDA2NDQKK2luZGV4IDc3NjAxYzU1Mi4uOThiZjQ5YmEyIDEwMDY0NAogLS0tIGEvc3JjL2NvcmUvZGV2aWNlLmMKICsrKyBiL3NyYy9jb3JlL2RldmljZS5jCiBAQCAtMTEyLDcgKzExMiw3IEBAIHN0YXRpYyB2b2lkIGRldmljZV9pbml0KFVuaXQgKnUpIHsKICAgICAgICAgICAqIGluZGVmaW5pdGVseSBmb3IgcGx1Z2dlZCBpbiBkZXZpY2VzLCBzb21ldGhpbmcgd2hpY2ggY2Fubm90CiAgICAgICAgICAgKiBoYXBwZW4gZm9yIHRoZSBvdGhlciB1bml0cyBzaW5jZSB0aGVpciBvcGVyYXRpb25zIHRpbWUgb3V0CiAgICAgICAgICAgKiBhbnl3YXkuICovCi0tICAgICAgICB1LT5qb2JfdGltZW91dCA9IHUtPm1hbmFnZXItPmRlZmF1bHRfdGltZW91dF9zdGFydF91c2VjOwotKyAgICAgICAgdS0+am9iX3RpbWVvdXQgPSAoMjQwICogVVNFQ19QRVJfU0VDKTsKKy0gICAgICAgIHUtPmpvYl9ydW5uaW5nX3RpbWVvdXQgPSB1LT5tYW5hZ2VyLT5kZWZhdWx0X3RpbWVvdXRfc3RhcnRfdXNlYzsKKysgICAgICAgIHUtPmpvYl9ydW5uaW5nX3RpbWVvdXQgPSAoMjQwICogVVNFQ19QRVJfU0VDKTsKICAKICAgICAgICAgIHUtPmlnbm9yZV9vbl9pc29sYXRlID0gdHJ1ZTsKICB9CiAtLSAKLTIuMTAuMgorMi4xMy4yCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwMS1jb3JlLWV2YWx1YXRlLXByZXNldHMtYWZ0ZXItZ2VuZXJhdG9ycy1oYXZlLXJ1bi02NTI2LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAxLWNvcmUtZXZhbHVhdGUtcHJlc2V0cy1hZnRlci1nZW5lcmF0b3JzLWhhdmUtcnVuLTY1MjYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYxMDBlNQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwMS1jb3JlLWV2YWx1YXRlLXByZXNldHMtYWZ0ZXItZ2VuZXJhdG9ycy1oYXZlLXJ1bi02NTI2LnBhdGNoCkBAIC0wLDAgKzEsNjkgQEAKK0Zyb20gMjhkZDY2ZWNmY2U3NDNiMWVhOTA0NmM3YmI1MDFlMGZjYWVmZjcyNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEx1Y2EgQnJ1bm8gPGx1Y2EuYnJ1bm9AY29yZW9zLmNvbT4KK0RhdGU6IFN1biwgNiBBdWcgMjAxNyAxMzoyNDoyNCArMDAwMAorU3ViamVjdDogW1BBVENIXSBjb3JlOiBldmFsdWF0ZSBwcmVzZXRzIGFmdGVyIGdlbmVyYXRvcnMgaGF2ZSBydW4gKCM2NTI2KQorCitUaGlzIGNvbW1pdCBtb3ZlcyB0aGUgZmlyc3QtYm9vdCBzeXN0ZW0gcHJlc2V0LXNldHRpbmdzIGV2YWx1YXRpb24gb3V0CitvZiBtYWluIGFuZCBpbnRvIHRoZSBtYW5hZ2VyIHN0YXJ0dXAgbG9naWMgaXRzZWxmLiBOb3RhYmx5LCBpdCByZXZlcnNlcwordGhlIG9yZGVyIGJldHdlZW4gZ2VuZXJhdG9ycyBhbmQgcHJlc2V0cyBldmFsdWF0aW9uLCBzbyB0aGF0IGFueSBjaGFuZ2VzCitwZXJmb3JtZWQgYnkgZmlyc3QtYm9vdCBnZW5lcmF0b3JzIGFyZSB0YWtlbiBpbnRvIHRoZSBhY2NvdW50IGJ5IHByZXNldHMKK2xvZ2ljLgorCitBZnRlciB0aGlzIGNoYW5nZSwgdW5pdHMgY3JlYXRlZCBieSBhIGdlbmVyYXRvciBjYW4gYmUgZW5hYmxlZCBhcyBwYXJ0CitvZiBhIHByZXNldC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBDYXRhbGluIEVuYWNoZSA8Y2F0YWxpbi5lbmFjaGVAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9jb3JlL21haW4uYyAgICB8IDEyICsrLS0tLS0tLS0tLQorIHNyYy9jb3JlL21hbmFnZXIuYyB8ICA4ICsrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9jb3JlL21haW4uYyBiL3NyYy9jb3JlL21haW4uYworaW5kZXggZGZlZGMzZC4uMTFhYzljZiAxMDA2NDQKKy0tLSBhL3NyYy9jb3JlL21haW4uYworKysrIGIvc3JjL2NvcmUvbWFpbi5jCitAQCAtMTgwOSwxOCArMTgwOSwxMCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisgICAgICAgICAgICAgICAgIGlmIChwcmN0bChQUl9TRVRfQ0hJTERfU1VCUkVBUEVSLCAxKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgbG9nX3dhcm5pbmdfZXJybm8oZXJybm8sICJGYWlsZWQgdG8gbWFrZSB1cyBhIHN1YnJlYXBlcjogJW0iKTsKKyAKKy0gICAgICAgIGlmIChhcmdfc3lzdGVtKSB7CisrICAgICAgICBpZiAoYXJnX3N5c3RlbSkKKysgICAgICAgICAgICAgICAgLyogQnVtcCB1cCBSTElNSVRfTk9GSUxFIGZvciBzeXN0ZW1kIGl0c2VsZiAqLworICAgICAgICAgICAgICAgICAodm9pZCkgYnVtcF9ybGltaXRfbm9maWxlKCZzYXZlZF9ybGltaXRfbm9maWxlKTsKKyAKKy0gICAgICAgICAgICAgICAgaWYgKGVtcHR5X2V0YykgeworLSAgICAgICAgICAgICAgICAgICAgICAgIHIgPSB1bml0X2ZpbGVfcHJlc2V0X2FsbChVTklUX0ZJTEVfU1lTVEVNLCAwLCBOVUxMLCBVTklUX0ZJTEVfUFJFU0VUX0VOQUJMRV9PTkxZLCBOVUxMLCAwKTsKKy0gICAgICAgICAgICAgICAgICAgICAgICBpZiAociA8IDApCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dfZnVsbF9lcnJubyhyID09IC1FRVhJU1QgPyBMT0dfTk9USUNFIDogTE9HX1dBUk5JTkcsIHIsICJGYWlsZWQgdG8gcG9wdWxhdGUgL2V0YyB3aXRoIHByZXNldCB1bml0IHNldHRpbmdzLCBpZ25vcmluZzogJW0iKTsKKy0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dfaW5mbygiUG9wdWxhdGVkIC9ldGMgd2l0aCBwcmVzZXQgdW5pdCBzZXR0aW5ncy4iKTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgfQorLQorICAgICAgICAgciA9IG1hbmFnZXJfbmV3KGFyZ19zeXN0ZW0gPyBVTklUX0ZJTEVfU1lTVEVNIDogVU5JVF9GSUxFX1VTRVIsIGFyZ19hY3Rpb24gPT0gQUNUSU9OX1RFU1QsICZtKTsKKyAgICAgICAgIGlmIChyIDwgMCkgeworICAgICAgICAgICAgICAgICBsb2dfZW1lcmdlbmN5X2Vycm5vKHIsICJGYWlsZWQgdG8gYWxsb2NhdGUgbWFuYWdlciBvYmplY3Q6ICVtIik7CitkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbWFuYWdlci5jIGIvc3JjL2NvcmUvbWFuYWdlci5jCitpbmRleCAxYWFkYjcwLi5mYjVlMmI1IDEwMDY0NAorLS0tIGEvc3JjL2NvcmUvbWFuYWdlci5jCisrKysgYi9zcmMvY29yZS9tYW5hZ2VyLmMKK0BAIC0xMzI4LDYgKzEzMjgsMTQgQEAgaW50IG1hbmFnZXJfc3RhcnR1cChNYW5hZ2VyICptLCBGSUxFICpzZXJpYWxpemF0aW9uLCBGRFNldCAqZmRzKSB7CisgICAgICAgICBpZiAociA8IDApCisgICAgICAgICAgICAgICAgIHJldHVybiByOworIAorKyAgICAgICAgaWYgKG0tPmZpcnN0X2Jvb3QgJiYgbS0+dW5pdF9maWxlX3Njb3BlID09IFVOSVRfRklMRV9TWVNURU0pIHsKKysgICAgICAgICAgICAgICAgcSA9IHVuaXRfZmlsZV9wcmVzZXRfYWxsKFVOSVRfRklMRV9TWVNURU0sIDAsIE5VTEwsIFVOSVRfRklMRV9QUkVTRVRfRU5BQkxFX09OTFksIE5VTEwsIDApOworKyAgICAgICAgICAgICAgICBpZiAocSA8IDApCisrICAgICAgICAgICAgICAgICAgICAgICAgbG9nX2Z1bGxfZXJybm8ocSA9PSAtRUVYSVNUID8gTE9HX05PVElDRSA6IExPR19XQVJOSU5HLCBxLCAiRmFpbGVkIHRvIHBvcHVsYXRlIC9ldGMgd2l0aCBwcmVzZXQgdW5pdCBzZXR0aW5ncywgaWdub3Jpbmc6ICVtIik7CisrICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgICBsb2dfaW5mbygiUG9wdWxhdGVkIC9ldGMgd2l0aCBwcmVzZXQgdW5pdCBzZXR0aW5ncy4iKTsKKysgICAgICAgIH0KKysKKyAgICAgICAgIGxvb2t1cF9wYXRoc19yZWR1Y2UoJm0tPmxvb2t1cF9wYXRocyk7CisgICAgICAgICBtYW5hZ2VyX2J1aWxkX3VuaXRfcGF0aF9jYWNoZShtKTsKKyAKKy0tIAorMi4xMC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwMS1jb3JlLWxvYWQtZnJhZ21lbnQtcmVmdXNlLXVuaXRzLXdpdGgtZXJyb3JzLWluLWNlcnRhLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAxLWNvcmUtbG9hZC1mcmFnbWVudC1yZWZ1c2UtdW5pdHMtd2l0aC1lcnJvcnMtaW4tY2VydGEucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwOTQ4YjIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAxLWNvcmUtbG9hZC1mcmFnbWVudC1yZWZ1c2UtdW5pdHMtd2l0aC1lcnJvcnMtaW4tY2VydGEucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMjkgKzAsMCBAQAotSWYgYSB1c2VyIGlzIGNyZWF0ZWQgd2l0aCBhIHN0cmljdGx5LXNwZWFraW5nIGludmFsaWQgbmFtZSBzdWNoIGFzICcwZGF5JyBhbmQgYQotdW5pdCBjcmVhdGVkIHRvIHJ1biBhcyB0aGF0IHVzZXIsIHN5c3RlbWQgcmVqZWN0cyB0aGUgdXNlcm5hbWUgYW5kIHJ1bnMgdGhlIHVuaXQKLWFzIHJvb3QuCi0KLUNWRTogQ1ZFLTIwMTctMTAwMDA4MgotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KLQotRnJvbSBkOGUxMzEwZTFlZDdiNmYxMjJiYzdlYjhiYTA2MWZiZDA4ODc4M2MwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogPT9VVEYtOD9xP1piaWduaWV3PTIwSj1DND05OWRyemVqZXdza2ktU3ptZWs/PSA8emJ5c3pla0Bpbi53YXcucGw+Ci1EYXRlOiBUaHUsIDYgSnVsIDIwMTcgMTM6Mjg6MTkgLTA0MDAKLVN1YmplY3Q6IFtQQVRDSF0gY29yZS9sb2FkLWZyYWdtZW50OiByZWZ1c2UgdW5pdHMgd2l0aCBlcnJvcnMgaW4gY2VydGFpbgotIGRpcmVjdGl2ZXMKLQotSWYgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQgaW4gYW55IG9mIHRoZSBFeGVjKiBsaW5lcywgV29ya2luZ0RpcmVjdG9yeSwKLVNFTGludXhDb250ZXh0LCBBcHBhcm1vclByb2ZpbGUsIFNtYWNrUHJvY2Vzc0xhYmVsLCBTZXJ2aWNlIChpbiAuc29ja2V0Ci11bml0cyksIFVzZXIsIG9yIEdyb3VwLCByZWZ1c2UgdG8gbG9hZCB0aGUgdW5pdC4gSWYgdGhlIGNvbmZpZyBzdGFuemEKLWhhcyBzdXBwb3J0LCBpZ25vcmUgdGhlIGZhaWx1cmUgaWYgJy0nIGlzIHByZXNlbnQuCi0KLUZvciB0aG9zZSBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZXMsIGV2ZW4gaWYgd2Ugc3RhcnRlZCB0aGUgdW5pdCwgaXQncwotcHJldHR5IGxpa2VseSB0aGF0IGl0J2xsIGRvIHNvbWV0aGluZyB1bmV4cGVjdGVkIChsaWtlIHdyaXRlIGZpbGVzCi1pbiBhIHdyb25nIHBsYWNlLCBvciB3aXRoIGEgd3JvbmcgY29udGV4dCwgb3IgcnVuIHdpdGggd3JvbmcgcGVybWlzc2lvbnMsCi1ldGMpLiBJdCBzZWVtcyBiZXR0ZXIgdG8gcmVmdXNlIHRvIHN0YXJ0IHRoZSB1bml0IGFuZCBoYXZlIHRoZSBhZG1pbgotY2xlYW4gdXAgdGhlIGNvbmZpZ3VyYXRpb24gd2l0aG91dCBnaXZpbmcgdGhlIHNlcnZpY2UgYSBjaGFuY2UgdG8gbWVzcwotdXAgc3R1ZmYuCi0KLU5vdGUgdGhhdCBhbGwgInNlY3VyaXR5IiBvcHRpb25zIHRoYXQgcmVzdHJpY3Qgd2hhdCB0aGUgdW5pdCBjYW4gZG8KLShDYXBhYmlsaXRpZXMsIEFtYmllbnRDYXBhYmlsaXRpZXMsIFJlc3RyaWN0KiwgU3lzdGVtQ2FsbEZpbHRlciwgTGltaXQqLAotUHJpdmF0ZURldmljZXMsIFByb3RlY3QqLCBldGMpIGFyZSBfbm90XyB0cmVhdGVkIGxpa2UgdGhpcy4gU3VjaCBvcHRpb25zIGFyZQotb25seSBzdXBwbGVtZW50YXJ5LCBhbmQgYXJlIG5vdCBhbHdheXMgYXZhaWxhYmxlIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlCi1hbmQgY29tcGlsYXRpb24gb3B0aW9ucywgc28gdW5pdCBhdXRob3JzIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHNlcnZpY2UKLXJ1bnMgY29ycmVjdGx5IHdpdGhvdXQgdGhlbSBhbnl3YXkuCi0KLUZpeGVzICM2MjM3LCAjNjI3Ny4KLQotU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KLS0tLQotIHNyYy9jb3JlL2xvYWQtZnJhZ21lbnQuYyAgfCAxMDQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLQotIHNyYy90ZXN0L3Rlc3QtdW5pdC1maWxlLmMgfCAgMTQgKysrLS0tLQotIDIgZmlsZXMgY2hhbmdlZCwgNzAgaW5zZXJ0aW9ucygrKSwgNDggZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9zcmMvY29yZS9sb2FkLWZyYWdtZW50LmMgYi9zcmMvY29yZS9sb2FkLWZyYWdtZW50LmMKLWluZGV4IGNiYzgyNjgwOS4uMjA0Nzk3NGY0IDEwMDY0NAotLS0tIGEvc3JjL2NvcmUvbG9hZC1mcmFnbWVudC5jCi0rKysgYi9zcmMvY29yZS9sb2FkLWZyYWdtZW50LmMKLUBAIC02MzAsMjAgKzYzMCwyOCBAQCBpbnQgY29uZmlnX3BhcnNlX2V4ZWMoCi0gCi0gICAgICAgICAgICAgICAgIGlmIChpc2VtcHR5KGYpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlyc3Qgd29yZCBpcyBlaXRoZXIgIi0iIG9yICJAIiB3aXRoIG5vIGNvbW1hbmQuICovCi0tICAgICAgICAgICAgICAgICAgICAgICAgbG9nX3N5bnRheCh1bml0LCBMT0dfRVJSLCBmaWxlbmFtZSwgbGluZSwgMCwgIkVtcHR5IHBhdGggaW4gY29tbWFuZCBsaW5lLCBpZ25vcmluZzogXCIlc1wiIiwgcnZhbHVlKTsKLS0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgICAgICAgICAgICAgICAgICBsb2dfc3ludGF4KHVuaXQsIExPR19FUlIsIGZpbGVuYW1lLCBsaW5lLCAwLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVtcHR5IHBhdGggaW4gY29tbWFuZCBsaW5lJXM6IFwiJXNcIiIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmUgPyAiLCBpZ25vcmluZyIgOiAiIiwgcnZhbHVlKTsKLSsgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWdub3JlID8gMCA6IC1FTk9FWEVDOwotICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIGlmICghc3RyaW5nX2lzX3NhZmUoZikpIHsKLS0gICAgICAgICAgICAgICAgICAgICAgICBsb2dfc3ludGF4KHVuaXQsIExPR19FUlIsIGZpbGVuYW1lLCBsaW5lLCAwLCAiRXhlY3V0YWJsZSBwYXRoIGNvbnRhaW5zIHNwZWNpYWwgY2hhcmFjdGVycywgaWdub3Jpbmc6ICVzIiwgcnZhbHVlKTsKLS0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgICAgICAgICAgICAgICAgICBsb2dfc3ludGF4KHVuaXQsIExPR19FUlIsIGZpbGVuYW1lLCBsaW5lLCAwLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4ZWN1dGFibGUgcGF0aCBjb250YWlucyBzcGVjaWFsIGNoYXJhY3RlcnMlczogJXMiLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlID8gIiwgaWdub3JpbmciIDogIiIsIHJ2YWx1ZSk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlnbm9yZSA/IDAgOiAtRU5PRVhFQzsKLSAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBpZiAoIXBhdGhfaXNfYWJzb2x1dGUoZikpIHsKLS0gICAgICAgICAgICAgICAgICAgICAgICBsb2dfc3ludGF4KHVuaXQsIExPR19FUlIsIGZpbGVuYW1lLCBsaW5lLCAwLCAiRXhlY3V0YWJsZSBwYXRoIGlzIG5vdCBhYnNvbHV0ZSwgaWdub3Jpbmc6ICVzIiwgcnZhbHVlKTsKLS0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgICAgICAgICAgICAgICAgICBsb2dfc3ludGF4KHVuaXQsIExPR19FUlIsIGZpbGVuYW1lLCBsaW5lLCAwLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4ZWN1dGFibGUgcGF0aCBpcyBub3QgYWJzb2x1dGUlczogJXMiLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlID8gIiwgaWdub3JpbmciIDogIiIsIHJ2YWx1ZSk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlnbm9yZSA/IDAgOiAtRU5PRVhFQzsKLSAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBpZiAoZW5kc3dpdGgoZiwgIi8iKSkgewotLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ19zeW50YXgodW5pdCwgTE9HX0VSUiwgZmlsZW5hbWUsIGxpbmUsIDAsICJFeGVjdXRhYmxlIHBhdGggc3BlY2lmaWVzIGEgZGlyZWN0b3J5LCBpZ25vcmluZzogJXMiLCBydmFsdWUpOwotLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ19zeW50YXgodW5pdCwgTE9HX0VSUiwgZmlsZW5hbWUsIGxpbmUsIDAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXhlY3V0YWJsZSBwYXRoIHNwZWNpZmllcyBhIGRpcmVjdG9yeSVzOiAlcyIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmUgPyAiLCBpZ25vcmluZyIgOiAiIiwgcnZhbHVlKTsKLSsgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWdub3JlID8gMCA6IC1FTk9FWEVDOwotICAgICAgICAgICAgICAgICB9Ci0gCi0gICAgICAgICAgICAgICAgIGlmIChmID09IGZpcnN0d29yZCkgewotQEAgLTY5OSw3ICs3MDcsNyBAQCBpbnQgY29uZmlnX3BhcnNlX2V4ZWMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHIgPCAwKQotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWdub3JlID8gMCA6IC1FTk9FWEVDOwotIAotICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghR1JFRURZX1JFQUxMT0MobiwgbmJ1ZnNpemUsIG5sZW4gKyAyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2dfb29tKCk7Ci1AQCAtNzA5LDggKzcxNywxMCBAQCBpbnQgY29uZmlnX3BhcnNlX2V4ZWMoCi0gICAgICAgICAgICAgICAgIH0KLSAKLSAgICAgICAgICAgICAgICAgaWYgKCFuIHx8ICFuWzBdKSB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgbG9nX3N5bnRheCh1bml0LCBMT0dfRVJSLCBmaWxlbmFtZSwgbGluZSwgMCwgIkVtcHR5IGV4ZWN1dGFibGUgbmFtZSBvciB6ZXJvZXRoIGFyZ3VtZW50LCBpZ25vcmluZzogJXMiLCBydmFsdWUpOwotLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ19zeW50YXgodW5pdCwgTE9HX0VSUiwgZmlsZW5hbWUsIGxpbmUsIDAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRW1wdHkgZXhlY3V0YWJsZSBuYW1lIG9yIHplcm9ldGggYXJndW1lbnQlczogJXMiLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlID8gIiwgaWdub3JpbmciIDogIiIsIHJ2YWx1ZSk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlnbm9yZSA/IDAgOiAtRU5PRVhFQzsKLSAgICAgICAgICAgICAgICAgfQotIAotICAgICAgICAgICAgICAgICBuY2UgPSBuZXcwKEV4ZWNDb21tYW5kLCAxKTsKLUBAIC0xMzE1LDggKzEzMjUsMTAgQEAgaW50IGNvbmZpZ19wYXJzZV9leGVjX3NlbGludXhfY29udGV4dCgKLSAKLSAgICAgICAgIHIgPSB1bml0X25hbWVfcHJpbnRmKHUsIHJ2YWx1ZSwgJmspOwotICAgICAgICAgaWYgKHIgPCAwKSB7Ci0tICAgICAgICAgICAgICAgIGxvZ19zeW50YXgodW5pdCwgTE9HX0VSUiwgZmlsZW5hbWUsIGxpbmUsIHIsICJGYWlsZWQgdG8gcmVzb2x2ZSBzcGVjaWZpZXJzLCBpZ25vcmluZzogJW0iKTsKLS0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICAgICAgICAgIGxvZ19zeW50YXgodW5pdCwgTE9HX0VSUiwgZmlsZW5hbWUsIGxpbmUsIHIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byByZXNvbHZlIHNwZWNpZmllcnMlczogJW0iLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZSA/ICIsIGlnbm9yaW5nIiA6ICIiKTsKLSsgICAgICAgICAgICAgICAgcmV0dXJuIGlnbm9yZSA/IDAgOiAtRU5PRVhFQzsKLSAgICAgICAgIH0KLSAKLSAgICAgICAgIGZyZWUoYy0+c2VsaW51eF9jb250ZXh0KTsKLUBAIC0xMzYzLDggKzEzNzUsMTAgQEAgaW50IGNvbmZpZ19wYXJzZV9leGVjX2FwcGFybW9yX3Byb2ZpbGUoCi0gCi0gICAgICAgICByID0gdW5pdF9uYW1lX3ByaW50Zih1LCBydmFsdWUsICZrKTsKLSAgICAgICAgIGlmIChyIDwgMCkgewotLSAgICAgICAgICAgICAgICBsb2dfc3ludGF4KHVuaXQsIExPR19FUlIsIGZpbGVuYW1lLCBsaW5lLCByLCAiRmFpbGVkIHRvIHJlc29sdmUgc3BlY2lmaWVycywgaWdub3Jpbmc6ICVtIik7Ci0tICAgICAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgICAgICAgICBsb2dfc3ludGF4KHVuaXQsIExPR19FUlIsIGZpbGVuYW1lLCBsaW5lLCByLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcmVzb2x2ZSBzcGVjaWZpZXJzJXM6ICVtIiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmUgPyAiLCBpZ25vcmluZyIgOiAiIik7Ci0rICAgICAgICAgICAgICAgIHJldHVybiBpZ25vcmUgPyAwIDogLUVOT0VYRUM7Ci0gICAgICAgICB9Ci0gCi0gICAgICAgICBmcmVlKGMtPmFwcGFybW9yX3Byb2ZpbGUpOwotQEAgLTE0MTEsOCArMTQyNSwxMCBAQCBpbnQgY29uZmlnX3BhcnNlX2V4ZWNfc21hY2tfcHJvY2Vzc19sYWJlbCgKLSAKLSAgICAgICAgIHIgPSB1bml0X25hbWVfcHJpbnRmKHUsIHJ2YWx1ZSwgJmspOwotICAgICAgICAgaWYgKHIgPCAwKSB7Ci0tICAgICAgICAgICAgICAgIGxvZ19zeW50YXgodW5pdCwgTE9HX0VSUiwgZmlsZW5hbWUsIGxpbmUsIHIsICJGYWlsZWQgdG8gcmVzb2x2ZSBzcGVjaWZpZXJzLCBpZ25vcmluZzogJW0iKTsKLS0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICAgICAgICAgIGxvZ19zeW50YXgodW5pdCwgTE9HX0VSUiwgZmlsZW5hbWUsIGxpbmUsIHIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byByZXNvbHZlIHNwZWNpZmllcnMlczogJW0iLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZSA/ICIsIGlnbm9yaW5nIiA6ICIiKTsKLSsgICAgICAgICAgICAgICAgcmV0dXJuIGlnbm9yZSA/IDAgOiAtRU5PRVhFQzsKLSAgICAgICAgIH0KLSAKLSAgICAgICAgIGZyZWUoYy0+c21hY2tfcHJvY2Vzc19sYWJlbCk7Ci1AQCAtMTYzMCwxOSArMTY0NiwxOSBAQCBpbnQgY29uZmlnX3BhcnNlX3NvY2tldF9zZXJ2aWNlKAotIAotICAgICAgICAgciA9IHVuaXRfbmFtZV9wcmludGYoVU5JVChzKSwgcnZhbHVlLCAmcCk7Ci0gICAgICAgICBpZiAociA8IDApIHsKLS0gICAgICAgICAgICAgICAgbG9nX3N5bnRheCh1bml0LCBMT0dfRVJSLCBmaWxlbmFtZSwgbGluZSwgciwgIkZhaWxlZCB0byByZXNvbHZlIHNwZWNpZmllcnMsIGlnbm9yaW5nOiAlcyIsIHJ2YWx1ZSk7Ci0tICAgICAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgICAgICAgICBsb2dfc3ludGF4KHVuaXQsIExPR19FUlIsIGZpbGVuYW1lLCBsaW5lLCByLCAiRmFpbGVkIHRvIHJlc29sdmUgc3BlY2lmaWVyczogJXMiLCBydmFsdWUpOwotKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0VYRUM7Ci0gICAgICAgICB9Ci0gCi0gICAgICAgICBpZiAoIWVuZHN3aXRoKHAsICIuc2VydmljZSIpKSB7Ci0tICAgICAgICAgICAgICAgIGxvZ19zeW50YXgodW5pdCwgTE9HX0VSUiwgZmlsZW5hbWUsIGxpbmUsIDAsICJVbml0IG11c3QgYmUgb2YgdHlwZSBzZXJ2aWNlLCBpZ25vcmluZzogJXMiLCBydmFsdWUpOwotLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgICAgICAgICAgbG9nX3N5bnRheCh1bml0LCBMT0dfRVJSLCBmaWxlbmFtZSwgbGluZSwgMCwgIlVuaXQgbXVzdCBiZSBvZiB0eXBlIHNlcnZpY2U6ICVzIiwgcnZhbHVlKTsKLSsgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9FWEVDOwotICAgICAgICAgfQotIAotICAgICAgICAgciA9IG1hbmFnZXJfbG9hZF91bml0KFVOSVQocyktPm1hbmFnZXIsIHAsIE5VTEwsICZlcnJvciwgJngpOwotICAgICAgICAgaWYgKHIgPCAwKSB7Ci0tICAgICAgICAgICAgICAgIGxvZ19zeW50YXgodW5pdCwgTE9HX0VSUiwgZmlsZW5hbWUsIGxpbmUsIHIsICJGYWlsZWQgdG8gbG9hZCB1bml0ICVzLCBpZ25vcmluZzogJXMiLCBydmFsdWUsIGJ1c19lcnJvcl9tZXNzYWdlKCZlcnJvciwgcikpOwotLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgICAgICAgICAgbG9nX3N5bnRheCh1bml0LCBMT0dfRVJSLCBmaWxlbmFtZSwgbGluZSwgciwgIkZhaWxlZCB0byBsb2FkIHVuaXQgJXM6ICVzIiwgcnZhbHVlLCBidXNfZXJyb3JfbWVzc2FnZSgmZXJyb3IsIHIpKTsKLSsgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9FWEVDOwotICAgICAgICAgfQotIAotICAgICAgICAgdW5pdF9yZWZfc2V0KCZzLT5zZXJ2aWNlLCB4KTsKLUBAIC0xODkzLDEzICsxOTA5LDEzIEBAIGludCBjb25maWdfcGFyc2VfdXNlcl9ncm91cCgKLSAKLSAgICAgICAgICAgICAgICAgciA9IHVuaXRfZnVsbF9wcmludGYodSwgcnZhbHVlLCAmayk7Ci0gICAgICAgICAgICAgICAgIGlmIChyIDwgMCkgewotLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ19zeW50YXgodW5pdCwgTE9HX0VSUiwgZmlsZW5hbWUsIGxpbmUsIHIsICJGYWlsZWQgdG8gcmVzb2x2ZSB1bml0IHNwZWNpZmllcnMgaW4gJXMsIGlnbm9yaW5nOiAlbSIsIHJ2YWx1ZSk7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgbG9nX3N5bnRheCh1bml0LCBMT0dfRVJSLCBmaWxlbmFtZSwgbGluZSwgciwgIkZhaWxlZCB0byByZXNvbHZlIHVuaXQgc3BlY2lmaWVycyBpbiAlczogJW0iLCBydmFsdWUpOwotKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PRVhFQzsKLSAgICAgICAgICAgICAgICAgfQotIAotICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkX3VzZXJfZ3JvdXBfbmFtZV9vcl9pZChrKSkgewotLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ19zeW50YXgodW5pdCwgTE9HX0VSUiwgZmlsZW5hbWUsIGxpbmUsIDAsICJJbnZhbGlkIHVzZXIvZ3JvdXAgbmFtZSBvciBudW1lcmljIElELCBpZ25vcmluZzogJXMiLCBrKTsKLS0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgICAgICAgICAgICAgICAgICBsb2dfc3ludGF4KHVuaXQsIExPR19FUlIsIGZpbGVuYW1lLCBsaW5lLCAwLCAiSW52YWxpZCB1c2VyL2dyb3VwIG5hbWUgb3IgbnVtZXJpYyBJRDogJXMiLCBrKTsKLSsgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0VYRUM7Ci0gICAgICAgICAgICAgICAgIH0KLSAKLSAgICAgICAgICAgICAgICAgbiA9IGs7Ci1AQCAtMTk1NywxOSArMTk3MywxOSBAQCBpbnQgY29uZmlnX3BhcnNlX3VzZXJfZ3JvdXBfc3RydigKLSAgICAgICAgICAgICAgICAgaWYgKHIgPT0gLUVOT01FTSkKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9nX29vbSgpOwotICAgICAgICAgICAgICAgICBpZiAociA8IDApIHsKLS0gICAgICAgICAgICAgICAgICAgICAgICBsb2dfc3ludGF4KHVuaXQsIExPR19FUlIsIGZpbGVuYW1lLCBsaW5lLCByLCAiSW52YWxpZCBzeW50YXgsIGlnbm9yaW5nOiAlcyIsIHJ2YWx1ZSk7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgbG9nX3N5bnRheCh1bml0LCBMT0dfRVJSLCBmaWxlbmFtZSwgbGluZSwgciwgIkludmFsaWQgc3ludGF4OiAlcyIsIHJ2YWx1ZSk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9FWEVDOwotICAgICAgICAgICAgICAgICB9Ci0gCi0gICAgICAgICAgICAgICAgIHIgPSB1bml0X2Z1bGxfcHJpbnRmKHUsIHdvcmQsICZrKTsKLSAgICAgICAgICAgICAgICAgaWYgKHIgPCAwKSB7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgbG9nX3N5bnRheCh1bml0LCBMT0dfRVJSLCBmaWxlbmFtZSwgbGluZSwgciwgIkZhaWxlZCB0byByZXNvbHZlIHVuaXQgc3BlY2lmaWVycyBpbiAlcywgaWdub3Jpbmc6ICVtIiwgd29yZCk7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgbG9nX3N5bnRheCh1bml0LCBMT0dfRVJSLCBmaWxlbmFtZSwgbGluZSwgciwgIkZhaWxlZCB0byByZXNvbHZlIHVuaXQgc3BlY2lmaWVycyBpbiAlczogJW0iLCB3b3JkKTsKLSsgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0VYRUM7Ci0gICAgICAgICAgICAgICAgIH0KLSAKLSAgICAgICAgICAgICAgICAgaWYgKCF2YWxpZF91c2VyX2dyb3VwX25hbWVfb3JfaWQoaykpIHsKLS0gICAgICAgICAgICAgICAgICAgICAgICBsb2dfc3ludGF4KHVuaXQsIExPR19FUlIsIGZpbGVuYW1lLCBsaW5lLCAwLCAiSW52YWxpZCB1c2VyL2dyb3VwIG5hbWUgb3IgbnVtZXJpYyBJRCwgaWdub3Jpbmc6ICVzIiwgayk7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgbG9nX3N5bnRheCh1bml0LCBMT0dfRVJSLCBmaWxlbmFtZSwgbGluZSwgMCwgIkludmFsaWQgdXNlci9ncm91cCBuYW1lIG9yIG51bWVyaWMgSUQ6ICVzIiwgayk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9FWEVDOwotICAgICAgICAgICAgICAgICB9Ci0gCi0gICAgICAgICAgICAgICAgIHIgPSBzdHJ2X3B1c2godXNlcnMsIGspOwotQEAgLTIxMjgsMjUgKzIxNDQsMjggQEAgaW50IGNvbmZpZ19wYXJzZV93b3JraW5nX2RpcmVjdG9yeSgKLSAKLSAgICAgICAgICAgICAgICAgciA9IHVuaXRfZnVsbF9wcmludGYodSwgcnZhbHVlLCAmayk7Ci0gICAgICAgICAgICAgICAgIGlmIChyIDwgMCkgewotLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ19zeW50YXgodW5pdCwgTE9HX0VSUiwgZmlsZW5hbWUsIGxpbmUsIHIsICJGYWlsZWQgdG8gcmVzb2x2ZSB1bml0IHNwZWNpZmllcnMgaW4gd29ya2luZyBkaXJlY3RvcnkgcGF0aCAnJXMnLCBpZ25vcmluZzogJW0iLCBydmFsdWUpOwotLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ19zeW50YXgodW5pdCwgTE9HX0VSUiwgZmlsZW5hbWUsIGxpbmUsIHIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHJlc29sdmUgdW5pdCBzcGVjaWZpZXJzIGluIHdvcmtpbmcgZGlyZWN0b3J5IHBhdGggJyVzJyVzOiAlbSIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydmFsdWUsIG1pc3Npbmdfb2sgPyAiLCBpZ25vcmluZyIgOiAiIik7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1pc3Npbmdfb2sgPyAwIDogLUVOT0VYRUM7Ci0gICAgICAgICAgICAgICAgIH0KLSAKLSAgICAgICAgICAgICAgICAgcGF0aF9raWxsX3NsYXNoZXMoayk7Ci0gCi0gICAgICAgICAgICAgICAgIGlmICghdXRmOF9pc192YWxpZChrKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ19zeW50YXhfaW52YWxpZF91dGY4KHVuaXQsIExPR19FUlIsIGZpbGVuYW1lLCBsaW5lLCBydmFsdWUpOwotLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtaXNzaW5nX29rID8gMCA6IC1FTk9FWEVDOwotICAgICAgICAgICAgICAgICB9Ci0gCi0gICAgICAgICAgICAgICAgIGlmICghcGF0aF9pc19hYnNvbHV0ZShrKSkgewotLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ19zeW50YXgodW5pdCwgTE9HX0VSUiwgZmlsZW5hbWUsIGxpbmUsIDAsICJXb3JraW5nIGRpcmVjdG9yeSBwYXRoICclcycgaXMgbm90IGFic29sdXRlLCBpZ25vcmluZy4iLCBydmFsdWUpOwotLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ19zeW50YXgodW5pdCwgTE9HX0VSUiwgZmlsZW5hbWUsIGxpbmUsIDAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV29ya2luZyBkaXJlY3RvcnkgcGF0aCAnJXMnIGlzIG5vdCBhYnNvbHV0ZSVzLiIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydmFsdWUsIG1pc3Npbmdfb2sgPyAiLCBpZ25vcmluZyIgOiAiIik7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1pc3Npbmdfb2sgPyAwIDogLUVOT0VYRUM7Ci0gICAgICAgICAgICAgICAgIH0KLSAKLS0gICAgICAgICAgICAgICAgZnJlZV9hbmRfcmVwbGFjZShjLT53b3JraW5nX2RpcmVjdG9yeSwgayk7Ci0tCi0gICAgICAgICAgICAgICAgIGMtPndvcmtpbmdfZGlyZWN0b3J5X2hvbWUgPSBmYWxzZTsKLSsgICAgICAgICAgICAgICAgZnJlZV9hbmRfcmVwbGFjZShjLT53b3JraW5nX2RpcmVjdG9yeSwgayk7Ci0gICAgICAgICB9Ci0gCi0gICAgICAgICBjLT53b3JraW5nX2RpcmVjdG9yeV9taXNzaW5nX29rID0gbWlzc2luZ19vazsKLUBAIC00MjI4LDggKzQyNDcsMTEgQEAgaW50IHVuaXRfbG9hZF9mcmFnbWVudChVbml0ICp1KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7Ci0gCi0gICAgICAgICAgICAgICAgIHIgPSBsb2FkX2Zyb21fcGF0aCh1LCBrKTsKLS0gICAgICAgICAgICAgICAgaWYgKHIgPCAwKQotKyAgICAgICAgICAgICAgICBpZiAociA8IDApIHsKLSsgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9PSAtRU5PRVhFQykKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ191bml0X25vdGljZSh1LCAiVW5pdCBjb25maWd1cmF0aW9uIGhhcyBmYXRhbCBlcnJvciwgdW5pdCB3aWxsIG5vdCBiZSBzdGFydGVkLiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByOwotKyAgICAgICAgICAgICAgICB9Ci0gCi0gICAgICAgICAgICAgICAgIGlmICh1LT5sb2FkX3N0YXRlID09IFVOSVRfU1RVQikgewotICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9GT1JFQUNIKHQsIHUtPm5hbWVzLCBpKSB7Ci1kaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvdGVzdC11bml0LWZpbGUuYyBiL3NyYy90ZXN0L3Rlc3QtdW5pdC1maWxlLmMKLWluZGV4IDEyZjQ4YmY0My4uZmQ3OTdiNTg3IDEwMDY0NAotLS0tIGEvc3JjL3Rlc3QvdGVzdC11bml0LWZpbGUuYwotKysrIGIvc3JjL3Rlc3QvdGVzdC11bml0LWZpbGUuYwotQEAgLTE0Niw3ICsxNDYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NvbmZpZ19wYXJzZV9leGVjKHZvaWQpIHsKLSAgICAgICAgIHIgPSBjb25maWdfcGFyc2VfZXhlYyhOVUxMLCAiZmFrZSIsIDQsICJzZWN0aW9uIiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTFZhbHVlIiwgMCwgIi9SVmFsdWUvIGFyZ3YwIHIxIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYywgdSk7Ci0tICAgICAgICBhc3NlcnRfc2UociA9PSAwKTsKLSsgICAgICAgIGFzc2VydF9zZShyID09IC1FTk9FWEVDKTsKLSAgICAgICAgIGFzc2VydF9zZShjMS0+Y29tbWFuZF9uZXh0ID09IE5VTEwpOwotIAotICAgICAgICAgbG9nX2luZm8oIi8qIGhvbm91cl9hcmd2MCAqLyIpOwotQEAgLTE2MSw3ICsxNjEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NvbmZpZ19wYXJzZV9leGVjKHZvaWQpIHsKLSAgICAgICAgIHIgPSBjb25maWdfcGFyc2VfZXhlYyhOVUxMLCAiZmFrZSIsIDMsICJzZWN0aW9uIiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTFZhbHVlIiwgMCwgIkAvUlZhbHVlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYywgdSk7Ci0tICAgICAgICBhc3NlcnRfc2UociA9PSAwKTsKLSsgICAgICAgIGFzc2VydF9zZShyID09IC1FTk9FWEVDKTsKLSAgICAgICAgIGFzc2VydF9zZShjMS0+Y29tbWFuZF9uZXh0ID09IE5VTEwpOwotIAotICAgICAgICAgbG9nX2luZm8oIi8qIG5vIGNvbW1hbmQsIHdoaXRlc3BhY2Ugb25seSwgcmVzZXQgKi8iKTsKLUBAIC0yMjAsNyArMjIwLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9jb25maWdfcGFyc2VfZXhlYyh2b2lkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1AL1JWYWx1ZSBhcmd2MCByMSA7IDsgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvZ29vL2dvbyBib28iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjLCB1KTsKLS0gICAgICAgIGFzc2VydF9zZShyID49IDApOwotKyAgICAgICAgYXNzZXJ0X3NlKHIgPT0gLUVOT0VYRUMpOwotICAgICAgICAgYzEgPSBjMS0+Y29tbWFuZF9uZXh0OwotICAgICAgICAgY2hlY2tfZXhlY2NvbW1hbmQoYzEsICIvUlZhbHVlIiwgImFyZ3YwIiwgInIxIiwgTlVMTCwgdHJ1ZSk7Ci0gCi1AQCAtMzc0LDcgKzM3NCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfY29uZmlnX3BhcnNlX2V4ZWModm9pZCkgewotICAgICAgICAgICAgICAgICByID0gY29uZmlnX3BhcnNlX2V4ZWMoTlVMTCwgImZha2UiLCA0LCAic2VjdGlvbiIsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTFZhbHVlIiwgMCwgcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjLCB1KTsKLS0gICAgICAgICAgICAgICAgYXNzZXJ0X3NlKHIgPT0gMCk7Ci0rICAgICAgICAgICAgICAgIGFzc2VydF9zZShyID09IC1FTk9FWEVDKTsKLSAgICAgICAgICAgICAgICAgYXNzZXJ0X3NlKGMxLT5jb21tYW5kX25leHQgPT0gTlVMTCk7Ci0gICAgICAgICB9Ci0gCi1AQCAtNDAxLDIxICs0MDEsMjEgQEAgc3RhdGljIHZvaWQgdGVzdF9jb25maWdfcGFyc2VfZXhlYyh2b2lkKSB7Ci0gICAgICAgICByID0gY29uZmlnX3BhcnNlX2V4ZWMoTlVMTCwgImZha2UiLCA0LCAic2VjdGlvbiIsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxWYWx1ZSIsIDAsICIvcGF0aFxcIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYywgdSk7Ci0tICAgICAgICBhc3NlcnRfc2UociA9PSAwKTsKLSsgICAgICAgIGFzc2VydF9zZShyID09IC1FTk9FWEVDKTsKLSAgICAgICAgIGFzc2VydF9zZShjMS0+Y29tbWFuZF9uZXh0ID09IE5VTEwpOwotIAotICAgICAgICAgbG9nX2luZm8oIi8qIG1pc3NpbmcgZW5kaW5nICcgKi8iKTsKLSAgICAgICAgIHIgPSBjb25maWdfcGFyc2VfZXhlYyhOVUxMLCAiZmFrZSIsIDQsICJzZWN0aW9uIiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTFZhbHVlIiwgMCwgIi9wYXRoICdmb28iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjLCB1KTsKLS0gICAgICAgIGFzc2VydF9zZShyID09IDApOwotKyAgICAgICAgYXNzZXJ0X3NlKHIgPT0gLUVOT0VYRUMpOwotICAgICAgICAgYXNzZXJ0X3NlKGMxLT5jb21tYW5kX25leHQgPT0gTlVMTCk7Ci0gCi0gICAgICAgICBsb2dfaW5mbygiLyogbWlzc2luZyBlbmRpbmcgJyB3aXRoIHRyYWlsaW5nIGJhY2tzbGFzaCAqLyIpOwotICAgICAgICAgciA9IGNvbmZpZ19wYXJzZV9leGVjKE5VTEwsICJmYWtlIiwgNCwgInNlY3Rpb24iLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMVmFsdWUiLCAwLCAiL3BhdGggJ2Zvb1xcIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYywgdSk7Ci0tICAgICAgICBhc3NlcnRfc2UociA9PSAwKTsKLSsgICAgICAgIGFzc2VydF9zZShyID09IC1FTk9FWEVDKTsKLSAgICAgICAgIGFzc2VydF9zZShjMS0+Y29tbWFuZF9uZXh0ID09IE5VTEwpOwotIAotICAgICAgICAgbG9nX2luZm8oIi8qIGludmFsaWQgc3BhY2UgYmV0d2VlbiBtb2RpZmllcnMgKi8iKTsKLS0tIAotMi4xMS4wCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDEtbWFpbi1za2lwLW1hbnktaW5pdGlhbGl6YXRpb24tc3RlcHMtd2hlbi1ydW5uaW5nLWluLS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwMS1tYWluLXNraXAtbWFueS1pbml0aWFsaXphdGlvbi1zdGVwcy13aGVuLXJ1bm5pbmctaW4tLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMzNiMDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDEtbWFpbi1za2lwLW1hbnktaW5pdGlhbGl6YXRpb24tc3RlcHMtd2hlbi1ydW5uaW5nLWluLS5wYXRjaApAQCAtMCwwICsxLDE2MyBAQAorRnJvbSBkZWEzNzRlODk4YTc0OWEwNDc0YjcyYjIwMTVjY2E5MDA5YjE0MzJiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGVubmFydCBQb2V0dGVyaW5nIDxsZW5uYXJ0QHBvZXR0ZXJpbmcubmV0PgorRGF0ZTogV2VkLCAxMyBTZXAgMjAxNyAxMDozMTo0MCArMDIwMAorU3ViamVjdDogW1BBVENIXSBtYWluOiBza2lwIG1hbnkgaW5pdGlhbGl6YXRpb24gc3RlcHMgd2hlbiBydW5uaW5nIGluIC0tdGVzdAorIG1vZGUKKworTW9zdCBpbXBvcnRhbnRseSwgZG9uJ3QgY29sbGVjdCBvcGVuIHNvY2tldCBhY3RpdmF0aW9uIGZkcyB3aGVuIGluCistLXRlc3QgbW9kZS4gVGhpcyBzcGVjaWZpY2FsbHkgY3JlYXRlZCBhIHByb2JsZW0gYmVjYXVzZSB3ZSBpbnZva2UKK3BhZ2VyX29wZW4oKSBiZWZvcmVoYW5kICh3aGljaCB0aGVzZSBkYXlzIG1ha2VzIGNvcGllcyBvZiB0aGUgb3JpZ2luYWwKK3N0ZG91dC9zdGRlcnIgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byByZXN0b3JlIHRoZW0gd2hlbiB0aGUgcGFnZXIgZ29lcworYXdheSkgYW5kIHdlIG1pZ2h0IG1pc3Rha2VubHkgdGhlIGZkIGNvcGllcyBpdCBjcmVhdGVzIGFzIHNvY2tldAorYWN0aXZhdGlvbiBmZHMuCisKK0ZpeGVzOiAjNjM4MworCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IENhdGFsaW4gRW5hY2hlIDxjYXRhbGluLmVuYWNoZUB3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL2NvcmUvbWFpbi5jIHwgMTA4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDU2IGluc2VydGlvbnMoKyksIDUyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbWFpbi5jIGIvc3JjL2NvcmUvbWFpbi5jCitpbmRleCAxMWFjOWNmLi5kMWE1M2E1IDEwMDY0NAorLS0tIGEvc3JjL2NvcmUvbWFpbi5jCisrKysgYi9zcmMvY29yZS9tYWluLmMKK0BAIC0xNjc5LDIwICsxNjc5LDIyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyAgICAgICAgIGxvZ19jbG9zZSgpOworIAorICAgICAgICAgLyogUmVtZW1iZXIgb3BlbiBmaWxlIGRlc2NyaXB0b3JzIGZvciBsYXRlciBkZXNlcmlhbGl6YXRpb24gKi8KKy0gICAgICAgIHIgPSBmZHNldF9uZXdfZmlsbCgmZmRzKTsKKy0gICAgICAgIGlmIChyIDwgMCkgeworLSAgICAgICAgICAgICAgICBsb2dfZW1lcmdlbmN5X2Vycm5vKHIsICJGYWlsZWQgdG8gYWxsb2NhdGUgZmQgc2V0OiAlbSIpOworLSAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0gIkZhaWxlZCB0byBhbGxvY2F0ZSBmZCBzZXQiOworLSAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKy0gICAgICAgIH0gZWxzZQorLSAgICAgICAgICAgICAgICBmZHNldF9jbG9leGVjKGZkcywgdHJ1ZSk7CisrICAgICAgICBpZiAoYXJnX2FjdGlvbiA9PSBBQ1RJT05fUlVOKSB7CisrICAgICAgICAgICAgICAgIHIgPSBmZHNldF9uZXdfZmlsbCgmZmRzKTsKKysgICAgICAgICAgICAgICAgaWYgKHIgPCAwKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgbG9nX2VtZXJnZW5jeV9lcnJubyhyLCAiRmFpbGVkIHRvIGFsbG9jYXRlIGZkIHNldDogJW0iKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0gIkZhaWxlZCB0byBhbGxvY2F0ZSBmZCBzZXQiOworKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworKyAgICAgICAgICAgICAgICB9IGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgICBmZHNldF9jbG9leGVjKGZkcywgdHJ1ZSk7CisgCistICAgICAgICBpZiAoYXJnX3NlcmlhbGl6YXRpb24pCistICAgICAgICAgICAgICAgIGFzc2VydF9zZShmZHNldF9yZW1vdmUoZmRzLCBmaWxlbm8oYXJnX3NlcmlhbGl6YXRpb24pKSA+PSAwKTsKKysgICAgICAgICAgICAgICAgaWYgKGFyZ19zZXJpYWxpemF0aW9uKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF9zZShmZHNldF9yZW1vdmUoZmRzLCBmaWxlbm8oYXJnX3NlcmlhbGl6YXRpb24pKSA+PSAwKTsKKyAKKy0gICAgICAgIGlmIChhcmdfc3lzdGVtKQorLSAgICAgICAgICAgICAgICAvKiBCZWNvbWUgYSBzZXNzaW9uIGxlYWRlciBpZiB3ZSBhcmVuJ3Qgb25lIHlldC4gKi8KKy0gICAgICAgICAgICAgICAgc2V0c2lkKCk7CisrICAgICAgICAgICAgICAgIGlmIChhcmdfc3lzdGVtKQorKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJlY29tZSBhIHNlc3Npb24gbGVhZGVyIGlmIHdlIGFyZW4ndCBvbmUgeWV0LiAqLworKyAgICAgICAgICAgICAgICAgICAgICAgIHNldHNpZCgpOworKyAgICAgICAgfQorIAorICAgICAgICAgLyogTW92ZSBvdXQgb2YgdGhlIHdheSwgc28gdGhhdCB3ZSB3b24ndCBibG9jayB1bm1vdW50cyAqLworICAgICAgICAgYXNzZXJ0X3NlKGNoZGlyKCIvIikgPT0gMCk7CitAQCAtMTc2Miw1NiArMTc2NCw1OCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdfYWN0aW9uID09IEFDVElPTl9URVNUID8gIiB0ZXN0IiA6ICIiLCBnZXR1aWQoKSwgdCk7CisgICAgICAgICB9CisgCistICAgICAgICBpZiAoYXJnX3N5c3RlbSAmJiAhc2tpcF9zZXR1cCkgeworLSAgICAgICAgICAgICAgICBpZiAoYXJnX3Nob3dfc3RhdHVzID4gMCkKKy0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfd2VsY29tZSgpOworKyAgICAgICAgaWYgKGFyZ19hY3Rpb24gPT0gQUNUSU9OX1JVTikgeworKyAgICAgICAgICAgICAgICBpZiAoYXJnX3N5c3RlbSAmJiAhc2tpcF9zZXR1cCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmdfc2hvd19zdGF0dXMgPiAwKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzX3dlbGNvbWUoKTsKKyAKKy0gICAgICAgICAgICAgICAgaG9zdG5hbWVfc2V0dXAoKTsKKy0gICAgICAgICAgICAgICAgbWFjaGluZV9pZF9zZXR1cChOVUxMLCBhcmdfbWFjaGluZV9pZCwgTlVMTCk7CistICAgICAgICAgICAgICAgIGxvb3BiYWNrX3NldHVwKCk7CistICAgICAgICAgICAgICAgIGJ1bXBfdW5peF9tYXhfZGdyYW1fcWxlbigpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lX3NldHVwKCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZV9pZF9zZXR1cChOVUxMLCBhcmdfbWFjaGluZV9pZCwgTlVMTCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgbG9vcGJhY2tfc2V0dXAoKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBidW1wX3VuaXhfbWF4X2RncmFtX3FsZW4oKTsKKyAKKy0gICAgICAgICAgICAgICAgdGVzdF91c3IoKTsKKy0gICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3VzcigpOworKyAgICAgICAgICAgICAgICB9CisgCistICAgICAgICBpZiAoYXJnX3N5c3RlbSAmJiBhcmdfcnVudGltZV93YXRjaGRvZyA+IDAgJiYgYXJnX3J1bnRpbWVfd2F0Y2hkb2cgIT0gVVNFQ19JTkZJTklUWSkKKy0gICAgICAgICAgICAgICAgd2F0Y2hkb2dfc2V0X3RpbWVvdXQoJmFyZ19ydW50aW1lX3dhdGNoZG9nKTsKKysgICAgICAgICAgICAgICAgaWYgKGFyZ19zeXN0ZW0gJiYgYXJnX3J1bnRpbWVfd2F0Y2hkb2cgPiAwICYmIGFyZ19ydW50aW1lX3dhdGNoZG9nICE9IFVTRUNfSU5GSU5JVFkpCisrICAgICAgICAgICAgICAgICAgICAgICAgd2F0Y2hkb2dfc2V0X3RpbWVvdXQoJmFyZ19ydW50aW1lX3dhdGNoZG9nKTsKKyAKKy0gICAgICAgIGlmIChhcmdfdGltZXJfc2xhY2tfbnNlYyAhPSBOU0VDX0lORklOSVRZKQorLSAgICAgICAgICAgICAgICBpZiAocHJjdGwoUFJfU0VUX1RJTUVSU0xBQ0ssIGFyZ190aW1lcl9zbGFja19uc2VjKSA8IDApCistICAgICAgICAgICAgICAgICAgICAgICAgbG9nX2Vycm9yX2Vycm5vKGVycm5vLCAiRmFpbGVkIHRvIGFkanVzdCB0aW1lciBzbGFjazogJW0iKTsKKysgICAgICAgICAgICAgICAgaWYgKGFyZ190aW1lcl9zbGFja19uc2VjICE9IE5TRUNfSU5GSU5JVFkpCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByY3RsKFBSX1NFVF9USU1FUlNMQUNLLCBhcmdfdGltZXJfc2xhY2tfbnNlYykgPCAwKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nX2Vycm9yX2Vycm5vKGVycm5vLCAiRmFpbGVkIHRvIGFkanVzdCB0aW1lciBzbGFjazogJW0iKTsKKyAKKy0gICAgICAgIGlmIChhcmdfc3lzdGVtICYmICFjYXBfdGVzdF9hbGwoYXJnX2NhcGFiaWxpdHlfYm91bmRpbmdfc2V0KSkgeworLSAgICAgICAgICAgICAgICByID0gY2FwYWJpbGl0eV9ib3VuZGluZ19zZXRfZHJvcF91c2VybW9kZShhcmdfY2FwYWJpbGl0eV9ib3VuZGluZ19zZXQpOworLSAgICAgICAgICAgICAgICBpZiAociA8IDApIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBsb2dfZW1lcmdlbmN5X2Vycm5vKHIsICJGYWlsZWQgdG8gZHJvcCBjYXBhYmlsaXR5IGJvdW5kaW5nIHNldCBvZiB1c2VybW9kZSBoZWxwZXJzOiAlbSIpOworLSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2UgPSAiRmFpbGVkIHRvIGRyb3AgY2FwYWJpbGl0eSBib3VuZGluZyBzZXQgb2YgdXNlcm1vZGUgaGVscGVycyI7CistICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgciA9IGNhcGFiaWxpdHlfYm91bmRpbmdfc2V0X2Ryb3AoYXJnX2NhcGFiaWxpdHlfYm91bmRpbmdfc2V0LCB0cnVlKTsKKy0gICAgICAgICAgICAgICAgaWYgKHIgPCAwKSB7CistICAgICAgICAgICAgICAgICAgICAgICAgbG9nX2VtZXJnZW5jeV9lcnJubyhyLCAiRmFpbGVkIHRvIGRyb3AgY2FwYWJpbGl0eSBib3VuZGluZyBzZXQ6ICVtIik7CistICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZSA9ICJGYWlsZWQgdG8gZHJvcCBjYXBhYmlsaXR5IGJvdW5kaW5nIHNldCI7CistICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisrICAgICAgICAgICAgICAgIGlmIChhcmdfc3lzdGVtICYmICFjYXBfdGVzdF9hbGwoYXJnX2NhcGFiaWxpdHlfYm91bmRpbmdfc2V0KSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBjYXBhYmlsaXR5X2JvdW5kaW5nX3NldF9kcm9wX3VzZXJtb2RlKGFyZ19jYXBhYmlsaXR5X2JvdW5kaW5nX3NldCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPCAwKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dfZW1lcmdlbmN5X2Vycm5vKHIsICJGYWlsZWQgdG8gZHJvcCBjYXBhYmlsaXR5IGJvdW5kaW5nIHNldCBvZiB1c2VybW9kZSBoZWxwZXJzOiAlbSIpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZSA9ICJGYWlsZWQgdG8gZHJvcCBjYXBhYmlsaXR5IGJvdW5kaW5nIHNldCBvZiB1c2VybW9kZSBoZWxwZXJzIjsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgICAgICByID0gY2FwYWJpbGl0eV9ib3VuZGluZ19zZXRfZHJvcChhcmdfY2FwYWJpbGl0eV9ib3VuZGluZ19zZXQsIHRydWUpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyIDwgMCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nX2VtZXJnZW5jeV9lcnJubyhyLCAiRmFpbGVkIHRvIGRyb3AgY2FwYWJpbGl0eSBib3VuZGluZyBzZXQ6ICVtIik7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0gIkZhaWxlZCB0byBkcm9wIGNhcGFiaWxpdHkgYm91bmRpbmcgc2V0IjsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgfQorIAorLSAgICAgICAgaWYgKGFyZ19zeXNjYWxsX2FyY2hzKSB7CistICAgICAgICAgICAgICAgIHIgPSBlbmZvcmNlX3N5c2NhbGxfYXJjaHMoYXJnX3N5c2NhbGxfYXJjaHMpOworLSAgICAgICAgICAgICAgICBpZiAociA8IDApIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0gIkZhaWxlZCB0byBzZXQgc3lzY2FsbCBhcmNoaXRlY3R1cmVzIjsKKy0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKysgICAgICAgICAgICAgICAgaWYgKGFyZ19zeXNjYWxsX2FyY2hzKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgciA9IGVuZm9yY2Vfc3lzY2FsbF9hcmNocyhhcmdfc3lzY2FsbF9hcmNocyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPCAwKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0gIkZhaWxlZCB0byBzZXQgc3lzY2FsbCBhcmNoaXRlY3R1cmVzIjsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgfQorIAorLSAgICAgICAgaWYgKCFhcmdfc3lzdGVtKQorLSAgICAgICAgICAgICAgICAvKiBCZWNvbWUgcmVhcGVyIG9mIG91ciBjaGlsZHJlbiAqLworLSAgICAgICAgICAgICAgICBpZiAocHJjdGwoUFJfU0VUX0NISUxEX1NVQlJFQVBFUiwgMSkgPCAwKQorLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ193YXJuaW5nX2Vycm5vKGVycm5vLCAiRmFpbGVkIHRvIG1ha2UgdXMgYSBzdWJyZWFwZXI6ICVtIik7CisrICAgICAgICAgICAgICAgIGlmICghYXJnX3N5c3RlbSkKKysgICAgICAgICAgICAgICAgICAgICAgICAvKiBCZWNvbWUgcmVhcGVyIG9mIG91ciBjaGlsZHJlbiAqLworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmN0bChQUl9TRVRfQ0hJTERfU1VCUkVBUEVSLCAxKSA8IDApCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dfd2FybmluZ19lcnJubyhlcnJubywgIkZhaWxlZCB0byBtYWtlIHVzIGEgc3VicmVhcGVyOiAlbSIpOworIAorLSAgICAgICAgaWYgKGFyZ19zeXN0ZW0pCistICAgICAgICAgICAgICAgIC8qIEJ1bXAgdXAgUkxJTUlUX05PRklMRSBmb3Igc3lzdGVtZCBpdHNlbGYgKi8KKy0gICAgICAgICAgICAgICAgKHZvaWQpIGJ1bXBfcmxpbWl0X25vZmlsZSgmc2F2ZWRfcmxpbWl0X25vZmlsZSk7CisrICAgICAgICAgICAgICAgIGlmIChhcmdfc3lzdGVtKQorKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1bXAgdXAgUkxJTUlUX05PRklMRSBmb3Igc3lzdGVtZCBpdHNlbGYgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCkgYnVtcF9ybGltaXRfbm9maWxlKCZzYXZlZF9ybGltaXRfbm9maWxlKTsKKysgICAgICAgIH0KKyAKKyAgICAgICAgIHIgPSBtYW5hZ2VyX25ldyhhcmdfc3lzdGVtID8gVU5JVF9GSUxFX1NZU1RFTSA6IFVOSVRfRklMRV9VU0VSLCBhcmdfYWN0aW9uID09IEFDVElPTl9URVNULCAmbSk7CisgICAgICAgICBpZiAociA8IDApIHsKKy0tIAorMi4xMC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwMi1zcmMtYmFzaWMtbWlzc2luZy5oLWNoZWNrLWZvci1taXNzaW5nLXN0cm5kdXBhLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAyLXNyYy1iYXNpYy1taXNzaW5nLmgtY2hlY2stZm9yLW1pc3Npbmctc3RybmR1cGEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRjMTM2YgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwMi1zcmMtYmFzaWMtbWlzc2luZy5oLWNoZWNrLWZvci1taXNzaW5nLXN0cm5kdXBhLnBhdGNoCkBAIC0wLDAgKzEsMTA0IEBACitGcm9tIDU4NWFiZDg5MWE1NjQwOTkxNTMxNDMwNDEwMWNhYzI2YjQyYzA3NmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBFbWlsIFJlbm5lciBCZXJ0aGluZyA8c3lzdGVtZEBlc21pbC5kaz4KK0RhdGU6IE1vbiwgMjMgT2N0IDIwMTcgMTA6NDU6NDYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAwMi8xMl0gc3JjL2Jhc2ljL21pc3NpbmcuaDogY2hlY2sgZm9yIG1pc3Npbmcgc3RybmR1cGEKKworaW5jbHVkZSBtaXNzaW5nLmggIGZvciBkZWZpbml0aW9uIG9mIHN0cm5kdXBhCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgY29uZmlndXJlLmFjICAgICAgICAgICB8ICAxICsKKyBzcmMvYmFzaWMvbWlzc2luZy5oICAgIHwgMTEgKysrKysrKysrKysKKyBzcmMvYmFzaWMvbWtkaXIuYyAgICAgIHwgIDEgKworIHNyYy9iYXNpYy9wYXJzZS11dGlsLmMgfCAgMSArCisgc3JjL3NoYXJlZC9wYWdlci5jICAgICB8ICAxICsKKyBzcmMvc2hhcmVkL3VpZC1yYW5nZS5jIHwgIDEgKworIDYgZmlsZXMgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBlZmNkYzZjMTYuLmNkMDM1YTk3MSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzI5LDYgKzMyOSw3IEBAIEFDX0NIRUNLX0RFQ0xTKFsKKyAgICAgICAgIHBpdm90X3Jvb3QsCisgICAgICAgICBuYW1lX3RvX2hhbmRsZV9hdCwKKyAgICAgICAgIHNldG5zLAorKyAgICAgICAgc3RybmR1cGEsCisgICAgICAgICByZW5hbWVhdDIsCisgICAgICAgICBrY21wLAorICAgICAgICAga2V5Y3RsLAorZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy9taXNzaW5nLmggYi9zcmMvYmFzaWMvbWlzc2luZy5oCitpbmRleCAwNDkxMmJmNTIuLjgwMDk4ODhhZCAxMDA2NDQKKy0tLSBhL3NyYy9iYXNpYy9taXNzaW5nLmgKKysrKyBiL3NyYy9iYXNpYy9taXNzaW5nLmgKK0BAIC0xMTA0LDYgKzExMDQsMTcgQEAgdHlwZWRlZiBpbnQzMl90IGtleV9zZXJpYWxfdDsKKyAjZGVmaW5lIEtFWUNUTF9ERVNDUklCRSA2CisgI2VuZGlmCisgCisrI2lmICFIQVZFX0RFQ0xfU1RSTkRVUEEKKysjZGVmaW5lIHN0cm5kdXBhKHMsIG4pIFwKKysgICh7IFwKKysgICAgY29uc3QgY2hhciAqX19vbGQgPSAocyk7IFwKKysgICAgc2l6ZV90IF9fbGVuID0gc3RybmxlbihfX29sZCwgKG4pKTsgXAorKyAgICBjaGFyICpfX25ldyA9IChjaGFyICopYWxsb2NhKF9fbGVuICsgMSk7IFwKKysgICAgX19uZXdbX19sZW5dID0gJ1wwJzsgXAorKyAgICAoY2hhciAqKW1lbWNweShfX25ldywgX19vbGQsIF9fbGVuKTsgXAorKyAgfSkKKysjZW5kaWYKKysKKyAjaWZuZGVmIEtFWUNUTF9SRUFECisgI2RlZmluZSBLRVlDVExfUkVBRCAxMQorICNlbmRpZgorZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy9ta2Rpci5jIGIvc3JjL2Jhc2ljL21rZGlyLmMKK2luZGV4IDZiMWE5ODQwMi4uZDEzODhkZjQ4IDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL21rZGlyLmMKKysrKyBiL3NyYy9iYXNpYy9ta2Rpci5jCitAQCAtMjgsNiArMjgsNyBAQAorICNpbmNsdWRlICJwYXRoLXV0aWwuaCIKKyAjaW5jbHVkZSAic3RhdC11dGlsLmgiCisgI2luY2x1ZGUgInVzZXItdXRpbC5oIgorKyNpbmNsdWRlICJtaXNzaW5nLmgiCisgCisgaW50IG1rZGlyX3NhZmVfaW50ZXJuYWwoY29uc3QgY2hhciAqcGF0aCwgbW9kZV90IG1vZGUsIHVpZF90IHVpZCwgZ2lkX3QgZ2lkLCBta2Rpcl9mdW5jX3QgX21rZGlyKSB7CisgICAgICAgICBzdHJ1Y3Qgc3RhdCBzdDsKK2RpZmYgLS1naXQgYS9zcmMvYmFzaWMvcGFyc2UtdXRpbC5jIGIvc3JjL2Jhc2ljL3BhcnNlLXV0aWwuYworaW5kZXggNDUzMmYyMjJjLi43YTMwYTBlMDYgMTAwNjQ0CistLS0gYS9zcmMvYmFzaWMvcGFyc2UtdXRpbC5jCisrKysgYi9zcmMvYmFzaWMvcGFyc2UtdXRpbC5jCitAQCAtMzAsNiArMzAsNyBAQAorICNpbmNsdWRlICJwYXJzZS11dGlsLmgiCisgI2luY2x1ZGUgInByb2Nlc3MtdXRpbC5oIgorICNpbmNsdWRlICJzdHJpbmctdXRpbC5oIgorKyNpbmNsdWRlICJtaXNzaW5nLmgiCisgCisgaW50IHBhcnNlX2Jvb2xlYW4oY29uc3QgY2hhciAqdikgeworICAgICAgICAgYXNzZXJ0KHYpOworZGlmZiAtLWdpdCBhL3NyYy9zaGFyZWQvcGFnZXIuYyBiL3NyYy9zaGFyZWQvcGFnZXIuYworaW5kZXggNGQ3YjAyYzYzLi44NTRlZmMwYzkgMTAwNjQ0CistLS0gYS9zcmMvc2hhcmVkL3BhZ2VyLmMKKysrKyBiL3NyYy9zaGFyZWQvcGFnZXIuYworQEAgLTM4LDYgKzM4LDcgQEAKKyAjaW5jbHVkZSAic3RyaW5nLXV0aWwuaCIKKyAjaW5jbHVkZSAic3Rydi5oIgorICNpbmNsdWRlICJ0ZXJtaW5hbC11dGlsLmgiCisrI2luY2x1ZGUgIm1pc3NpbmcuaCIKKyAKKyBzdGF0aWMgcGlkX3QgcGFnZXJfcGlkID0gMDsKKyAKK2RpZmYgLS1naXQgYS9zcmMvc2hhcmVkL3VpZC1yYW5nZS5jIGIvc3JjL3NoYXJlZC91aWQtcmFuZ2UuYworaW5kZXggYjZlYzQ3NDM5Li45MWNlOWZiN2YgMTAwNjQ0CistLS0gYS9zcmMvc2hhcmVkL3VpZC1yYW5nZS5jCisrKysgYi9zcmMvc2hhcmVkL3VpZC1yYW5nZS5jCitAQCAtMjQsNiArMjQsNyBAQAorICNpbmNsdWRlICJtYWNyby5oIgorICNpbmNsdWRlICJ1aWQtcmFuZ2UuaCIKKyAjaW5jbHVkZSAidXNlci11dGlsLmgiCisrI2luY2x1ZGUgIm1pc3NpbmcuaCIKKyAKKyBzdGF0aWMgYm9vbCB1aWRfcmFuZ2VfaW50ZXJzZWN0KFVpZFJhbmdlICpyYW5nZSwgdWlkX3Qgc3RhcnQsIHVpZF90IG5yKSB7CisgICAgICAgICBhc3NlcnQocmFuZ2UpOworLS0gCisyLjE0LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAyLXVuaXRzLVByZWZlci1nZXR0eS10by1hZ2V0dHktaW4tY29uc29sZS1zZXR1cC1zeXN0ZW0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDItdW5pdHMtUHJlZmVyLWdldHR5LXRvLWFnZXR0eS1pbi1jb25zb2xlLXNldHVwLXN5c3RlbS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTUxYTI4ZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDItdW5pdHMtUHJlZmVyLWdldHR5LXRvLWFnZXR0eS1pbi1jb25zb2xlLXNldHVwLXN5c3RlbS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLUZyb20gODczNmQ5YjliYjQ5MmY2MGU4ZjNhMWE3ZmI1YTA1YmEzMjAxZDg2YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjI5OjE1ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMDIvMTldIHVuaXRzOiBQcmVmZXIgZ2V0dHkgdG8gYWdldHR5IGluIGNvbnNvbGUgc2V0dXAgc3lzdGVtZAotIHVuaXRzCi0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbiBzcGVjaWZpY10KLQotU2lnbmVkLW9mZi1ieTogTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBmcmVlLWVsZWN0cm9ucy5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi0gdW5pdHMvZ2V0dHlALnNlcnZpY2UubTQgICAgICAgIHwgMiArLQotIHVuaXRzL3NlcmlhbC1nZXR0eUAuc2VydmljZS5tNCB8IDIgKy0KLSAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3VuaXRzL2dldHR5QC5zZXJ2aWNlLm00IGIvdW5pdHMvZ2V0dHlALnNlcnZpY2UubTQKLWluZGV4IDViODJjMTMuLmU3Mjk0NjkgMTAwNjQ0Ci0tLS0gYS91bml0cy9nZXR0eUAuc2VydmljZS5tNAotKysrIGIvdW5pdHMvZ2V0dHlALnNlcnZpY2UubTQKLUBAIC0zMyw3ICszMyw3IEBAIENvbmRpdGlvblBhdGhFeGlzdHM9L2Rldi90dHkwCi0gCi0gW1NlcnZpY2VdCi0gIyB0aGUgVlQgaXMgY2xlYXJlZCBieSBUVFlWVERpc2FsbG9jYXRlCi0tRXhlY1N0YXJ0PS0vc2Jpbi9hZ2V0dHkgLS1ub2NsZWFyICVJICRURVJNCi0rRXhlY1N0YXJ0PS0vc2Jpbi9nZXR0eSAtTCAlSSAkVEVSTQotIFR5cGU9aWRsZQotIFJlc3RhcnQ9YWx3YXlzCi0gUmVzdGFydFNlYz0wCi1kaWZmIC0tZ2l0IGEvdW5pdHMvc2VyaWFsLWdldHR5QC5zZXJ2aWNlLm00IGIvdW5pdHMvc2VyaWFsLWdldHR5QC5zZXJ2aWNlLm00Ci1pbmRleCA0NTIyZDBkLi5lNmQ0OTlkIDEwMDY0NAotLS0tIGEvdW5pdHMvc2VyaWFsLWdldHR5QC5zZXJ2aWNlLm00Ci0rKysgYi91bml0cy9zZXJpYWwtZ2V0dHlALnNlcnZpY2UubTQKLUBAIC0yMiw3ICsyMiw3IEBAIEJlZm9yZT1nZXR0eS50YXJnZXQKLSBJZ25vcmVPbklzb2xhdGU9eWVzCi0gCi0gW1NlcnZpY2VdCi0tRXhlY1N0YXJ0PS0vc2Jpbi9hZ2V0dHkgLS1rZWVwLWJhdWQgMTE1MjAwLDM4NDAwLDk2MDAgJUkgJFRFUk0KLStFeGVjU3RhcnQ9LS9zYmluL2dldHR5IC1MIDExNTIwMCAlSSAkVEVSTQotIFR5cGU9aWRsZQotIFJlc3RhcnQ9YWx3YXlzCi0gVXRtcElkZW50aWZpZXI9JUkKLS0tIAotMi4xMC4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwMy1kZWZpbmUtZXhwMTAtaWYtbWlzc2luZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwMy1kZWZpbmUtZXhwMTAtaWYtbWlzc2luZy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdjNmFjNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDMtZGVmaW5lLWV4cDEwLWlmLW1pc3NpbmcucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi1Gcm9tIGIzODNjMjg2ZjU4MTg0NTc1MjE2YjJiZjZmMTg1YmEyYWQ2NDg5NTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogV2VkLCA5IE5vdiAyMDE2IDE5OjI1OjQ1IC0wODAwCi1TdWJqZWN0OiBbUEFUQ0ggMDMvMTldIGRlZmluZSBleHAxMCBpZiBtaXNzaW5nCi0KLUluc3BpcmVkIGJ5OiBodHRwOi8vcGV0ZXIua29yc2dhYXJkLmNvbS9wYXRjaGVzL2Fsc2EtdXRpbHMvYWxzYW1peGVyLWZpeC1idWlsZC1vbi11Q2xpYmMtZXhwMTAucGF0Y2gKLQotZXhwMTAgZXh0ZW5zaW9uIGlzIG5vdCBwYXJ0IG9mIHVDbGliYywgc28gY29tcHV0ZSBpdC4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IFNhbXVlbCBNYXJ0aW4gPHMubWFydGluNDlAZ21haWwuY29tPgotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotIHNyYy9iYXNpYy9taXNzaW5nLmggfCA1ICsrKysrCi0gMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvc3JjL2Jhc2ljL21pc3NpbmcuaCBiL3NyYy9iYXNpYy9taXNzaW5nLmgKLWluZGV4IDRjMDEzYmUuLjRhM2ZkOWMgMTAwNjQ0Ci0tLS0gYS9zcmMvYmFzaWMvbWlzc2luZy5oCi0rKysgYi9zcmMvYmFzaWMvbWlzc2luZy5oCi1AQCAtMTA3OCw0ICsxMDc4LDkgQEAgdHlwZWRlZiBpbnQzMl90IGtleV9zZXJpYWxfdDsKLSAKLSAjZW5kaWYKLSAKLSsjaWZkZWYgX19VQ0xJQkNfXwotKy8qIDEwXnggPSAxMF4obG9nIGVeeCkgPSAoZV54KV5sb2cxMCA9IGVeKHggKiBsb2cgMTApICovCi0rI2RlZmluZSBleHAxMCh4KSAoZXhwKCh4KSAqIGxvZygxMCkpKQotKyNlbmRpZiAvKiBfX1VDTElCQ19fICovCi0rCi0gI2luY2x1ZGUgIm1pc3Npbmdfc3lzY2FsbC5oIgotLS0gCi0yLjEwLjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAzLWRvbi10LWZhaWwtaWYtR0xPQl9CUkFDRS1hbmQtR0xPQl9BTFRESVJGVU5DLWlzLW5vdC0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDMtZG9uLXQtZmFpbC1pZi1HTE9CX0JSQUNFLWFuZC1HTE9CX0FMVERJUkZVTkMtaXMtbm90LS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTJkMmM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAzLWRvbi10LWZhaWwtaWYtR0xPQl9CUkFDRS1hbmQtR0xPQl9BTFRESVJGVU5DLWlzLW5vdC0ucGF0Y2gKQEAgLTAsMCArMSwxNTcgQEAKK0Zyb20gNWJiYmMyYTA4YTNiNDI4M2VjMDRhZjBlNzdlMjVmYjIwNWFhOGI4MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEVtaWwgUmVubmVyIEJlcnRoaW5nIDxzeXN0ZW1kQGVzbWlsLmRrPgorRGF0ZTogTW9uLCAyMyBPY3QgMjAxNyAxMDo1MDoxNCAtMDcwMAorU3ViamVjdDogW1BBVENIIDAzLzEyXSBkb24ndCBmYWlsIGlmIEdMT0JfQlJBQ0UgYW5kIEdMT0JfQUxURElSRlVOQyBpcyBub3QKKyBkZWZpbmVkCisKK0lmIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGRvZXNuJ3QgcHJvdmlkZSBicmFjZQorZXhwYW5zaW9uIHVzZXJzIGp1c3Qgd29uJ3QgZ2V0IGl0LgorCitEb250IHVzZSBHTlUgR0xPQiBleHRlbnRpb25zIG9uIG5vbi1nbGliYyBzeXN0ZW1zCisKK0NvbmRpdGlvbmFsaXplIHVzZSBvZiBHTE9CX0FMVERJUkZVTkMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBzcmMvYmFzaWMvZ2xvYi11dGlsLmMgICAgIHwgMjAgKysrKysrKysrKysrKysrKystLS0KKyBzcmMvdGVzdC90ZXN0LWdsb2ItdXRpbC5jIHwgMTcgKysrKysrKysrKysrKysrLS0KKyBzcmMvdG1wZmlsZXMvdG1wZmlsZXMuYyAgIHwgIDggKysrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDQwIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvYmFzaWMvZ2xvYi11dGlsLmMgYi9zcmMvYmFzaWMvZ2xvYi11dGlsLmMKK2luZGV4IGY2MTFjNDJlNC4uYWQ2ZTJiZThkIDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL2dsb2ItdXRpbC5jCisrKysgYi9zcmMvYmFzaWMvZ2xvYi11dGlsLmMKK0BAIC0yNywxMyArMjcsMTggQEAKKyAjaW5jbHVkZSAibWFjcm8uaCIKKyAjaW5jbHVkZSAicGF0aC11dGlsLmgiCisgI2luY2x1ZGUgInN0cnYuaCIKKysvKiBEb24ndCBmYWlsIGlmIHRoZSBzdGFuZGFyZCBsaWJyYXJ5CisrICogZG9lc24ndCBwcm92aWRlIGJyYWNlIGV4cGFuc2lvbiAqLworKyNpZm5kZWYgR0xPQl9CUkFDRQorKyNkZWZpbmUgR0xPQl9CUkFDRSAwCisrI2VuZGlmCisgCisgaW50IHNhZmVfZ2xvYihjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MsIGdsb2JfdCAqcGdsb2IpIHsKKyAgICAgICAgIGludCBrOworIAorKyNpZmRlZiBHTE9CX0FMVERJUkZVTkMKKyAgICAgICAgIC8qIFdlIHdhbnQgdG8gc2V0IEdMT0JfQUxURElSRlVOQyBvdXJzZWx2ZXMsIGRvbid0IGFsbG93IGl0IHRvIGJlIHNldC4gKi8KKyAgICAgICAgIGFzc2VydCghKGZsYWdzICYgR0xPQl9BTFRESVJGVU5DKSk7CistCisgICAgICAgICBpZiAoIXBnbG9iLT5nbF9jbG9zZWRpcikKKyAgICAgICAgICAgICAgICAgcGdsb2ItPmdsX2Nsb3NlZGlyID0gKHZvaWQgKCopKHZvaWQgKikpIGNsb3NlZGlyOworICAgICAgICAgaWYgKCFwZ2xvYi0+Z2xfcmVhZGRpcikKK0BAIC00NCwxMCArNDksMTMgQEAgaW50IHNhZmVfZ2xvYihjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MsIGdsb2JfdCAqcGdsb2IpIHsKKyAgICAgICAgICAgICAgICAgcGdsb2ItPmdsX2xzdGF0ID0gbHN0YXQ7CisgICAgICAgICBpZiAoIXBnbG9iLT5nbF9zdGF0KQorICAgICAgICAgICAgICAgICBwZ2xvYi0+Z2xfc3RhdCA9IHN0YXQ7CistCisrI2VuZGlmCisgICAgICAgICBlcnJubyA9IDA7CisrI2lmZGVmIEdMT0JfQUxURElSRlVOQworICAgICAgICAgayA9IGdsb2IocGF0aCwgZmxhZ3MgfCBHTE9CX0FMVERJUkZVTkMsIE5VTEwsIHBnbG9iKTsKKy0KKysjZWxzZQorKyAgICAgICAgayA9IGdsb2IocGF0aCwgZmxhZ3MsIE5VTEwsIHBnbG9iKTsKKysjZW5kaWYKKyAgICAgICAgIGlmIChrID09IEdMT0JfTk9NQVRDSCkKKyAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7CisgICAgICAgICBpZiAoayA9PSBHTE9CX05PU1BBQ0UpCitAQCAtNjAsNiArNjgsMTIgQEAgaW50IHNhZmVfZ2xvYihjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MsIGdsb2JfdCAqcGdsb2IpIHsKKyAgICAgICAgIHJldHVybiAwOworIH0KKyAKKysvKiBEb24ndCBmYWlsIGlmIHRoZSBzdGFuZGFyZCBsaWJyYXJ5CisrICogZG9lc24ndCBwcm92aWRlIGJyYWNlIGV4cGFuc2lvbiAqLworKyNpZm5kZWYgR0xPQl9CUkFDRQorKyNkZWZpbmUgR0xPQl9CUkFDRSAwCisrI2VuZGlmCisrCisgaW50IGdsb2JfZXhpc3RzKGNvbnN0IGNoYXIgKnBhdGgpIHsKKyAgICAgICAgIF9jbGVhbnVwX2dsb2JmcmVlXyBnbG9iX3QgZyA9IHt9OworICAgICAgICAgaW50IGs7CitkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvdGVzdC1nbG9iLXV0aWwuYyBiL3NyYy90ZXN0L3Rlc3QtZ2xvYi11dGlsLmMKK2luZGV4IGFmODY2ZTAwNC4uM2FmYTA5YWRhIDEwMDY0NAorLS0tIGEvc3JjL3Rlc3QvdGVzdC1nbG9iLXV0aWwuYworKysrIGIvc3JjL3Rlc3QvdGVzdC1nbG9iLXV0aWwuYworQEAgLTI5LDYgKzI5LDExIEBACisgI2luY2x1ZGUgImdsb2ItdXRpbC5oIgorICNpbmNsdWRlICJtYWNyby5oIgorICNpbmNsdWRlICJybS1yZi5oIgorKy8qIERvbid0IGZhaWwgaWYgdGhlIHN0YW5kYXJkIGxpYnJhcnkKKysgKiBkb2Vzbid0IHByb3ZpZGUgYnJhY2UgZXhwYW5zaW9uICovCisrI2lmbmRlZiBHTE9CX0JSQUNFCisrI2RlZmluZSBHTE9CX0JSQUNFIDAKKysjZW5kaWYKKyAKKyBzdGF0aWMgdm9pZCB0ZXN0X2dsb2JfZXhpc3RzKHZvaWQpIHsKKyAgICAgICAgIGNoYXIgbmFtZVtdID0gIi90bXAvdGVzdC1nbG9iX2V4aXN0cy5YWFhYWFgiOworQEAgLTUxLDI1ICs1NiwzMyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2dsb2JfZXhpc3RzKHZvaWQpIHsKKyBzdGF0aWMgdm9pZCB0ZXN0X2dsb2Jfbm9fZG90KHZvaWQpIHsKKyAgICAgICAgIGNoYXIgdGVtcGxhdGVbXSA9ICIvdG1wL3Rlc3QtZ2xvYi11dGlsLlhYWFhYWFgiOworICAgICAgICAgY29uc3QgY2hhciAqZm47CistCisgICAgICAgICBfY2xlYW51cF9nbG9iZnJlZV8gZ2xvYl90IGcgPSB7CisrI2lmZGVmIEdMT0JfQUxURElSRlVOQworICAgICAgICAgICAgICAgICAuZ2xfY2xvc2VkaXIgPSAodm9pZCAoKikodm9pZCAqKSkgY2xvc2VkaXIsCisgICAgICAgICAgICAgICAgIC5nbF9yZWFkZGlyID0gKHN0cnVjdCBkaXJlbnQgKigqKSh2b2lkICopKSByZWFkZGlyX25vX2RvdCwKKyAgICAgICAgICAgICAgICAgLmdsX29wZW5kaXIgPSAodm9pZCAqKCopKGNvbnN0IGNoYXIgKikpIG9wZW5kaXIsCisgICAgICAgICAgICAgICAgIC5nbF9sc3RhdCA9IGxzdGF0LAorICAgICAgICAgICAgICAgICAuZ2xfc3RhdCA9IHN0YXQsCisrI2VuZGlmCisgICAgICAgICB9OworLQorICAgICAgICAgaW50IHI7CisgCisgICAgICAgICBhc3NlcnRfc2UobWtkdGVtcCh0ZW1wbGF0ZSkpOworIAorICAgICAgICAgZm4gPSBzdHJqb2luYSh0ZW1wbGF0ZSwgIi8qIik7CisrI2lmZGVmIEdMT0JfQUxURElSRlVOQworICAgICAgICAgciA9IGdsb2IoZm4sIEdMT0JfTk9TT1JUfEdMT0JfQlJBQ0V8R0xPQl9BTFRESVJGVU5DLCBOVUxMLCAmZyk7CisrI2Vsc2UKKysgICAgICAgIHIgPSBnbG9iKGZuLCBHTE9CX05PU09SVHxHTE9CX0JSQUNFLCBOVUxMLCAmZyk7CisrI2VuZGlmCisgICAgICAgICBhc3NlcnRfc2UociA9PSBHTE9CX05PTUFUQ0gpOworIAorICAgICAgICAgZm4gPSBzdHJqb2luYSh0ZW1wbGF0ZSwgIi8uKiIpOworKyNpZmRlZiBHTE9CX0FMVERJUkZVTkMKKyAgICAgICAgIHIgPSBnbG9iKGZuLCBHTE9CX05PU09SVHxHTE9CX0JSQUNFfEdMT0JfQUxURElSRlVOQywgTlVMTCwgJmcpOworKyNlbHNlCisrICAgICAgICByID0gZ2xvYihmbiwgR0xPQl9OT1NPUlR8R0xPQl9CUkFDRSwgTlVMTCwgJmcpOworKyNlbmRpZgorICAgICAgICAgYXNzZXJ0X3NlKHIgPT0gR0xPQl9OT01BVENIKTsKKyAKKyAgICAgICAgICh2b2lkKSBybV9yZih0ZW1wbGF0ZSwgUkVNT1ZFX1JPT1R8UkVNT1ZFX1BIWVNJQ0FMKTsKK2RpZmYgLS1naXQgYS9zcmMvdG1wZmlsZXMvdG1wZmlsZXMuYyBiL3NyYy90bXBmaWxlcy90bXBmaWxlcy5jCitpbmRleCA5NDE5Yzk5ZTIuLjA3MDI3YTc2NSAxMDA2NDQKKy0tLSBhL3NyYy90bXBmaWxlcy90bXBmaWxlcy5jCisrKysgYi9zcmMvdG1wZmlsZXMvdG1wZmlsZXMuYworQEAgLTcxLDYgKzcxLDEyIEBACisgI2luY2x1ZGUgInVtYXNrLXV0aWwuaCIKKyAjaW5jbHVkZSAidXNlci11dGlsLmgiCisgI2luY2x1ZGUgInV0aWwuaCIKKysvKiBEb24ndCBmYWlsIGlmIHRoZSBzdGFuZGFyZCBsaWJyYXJ5CisrICogZG9lc24ndCBwcm92aWRlIGJyYWNlIGV4cGFuc2lvbiAqLworKyNpZm5kZWYgR0xPQl9CUkFDRQorKyNkZWZpbmUgR0xPQl9CUkFDRSAwCisrI2VuZGlmCisrCisgCisgLyogVGhpcyByZWFkcyBhbGwgZmlsZXMgbGlzdGVkIGluIC9ldGMvdG1wZmlsZXMuZC8/Ki5jb25mIGFuZCBjcmVhdGVzCisgICogdGhlbSBpbiB0aGUgZmlsZSBzeXN0ZW0uIFRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byBjcmVhdGUKK0BAIC0xMDkyLDcgKzEwOTgsOSBAQCBzdGF0aWMgaW50IGl0ZW1fZG9fY2hpbGRyZW4oSXRlbSAqaSwgY29uc3QgY2hhciAqcGF0aCwgYWN0aW9uX3QgYWN0aW9uKSB7CisgCisgc3RhdGljIGludCBnbG9iX2l0ZW0oSXRlbSAqaSwgYWN0aW9uX3QgYWN0aW9uLCBib29sIHJlY3Vyc2l2ZSkgeworICAgICAgICAgX2NsZWFudXBfZ2xvYmZyZWVfIGdsb2JfdCBnID0geworKyNpZmRlZiBHTE9CX0FMVERJUkZVTkMKKyAgICAgICAgICAgICAgICAgLmdsX29wZW5kaXIgPSAodm9pZCAqKCopKGNvbnN0IGNoYXIgKikpIG9wZW5kaXJfbm9tb2QsCisrI2VuZGlmCisgICAgICAgICB9OworICAgICAgICAgaW50IHIgPSAwLCBrOworICAgICAgICAgY2hhciAqKmZuOworLS0gCisyLjE0LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA0LXNyYy1iYXNpYy1taXNzaW5nLmgtY2hlY2stZm9yLW1pc3NpbmctX19jb21wYXJfZm5fdC0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDQtc3JjLWJhc2ljLW1pc3NpbmcuaC1jaGVjay1mb3ItbWlzc2luZy1fX2NvbXBhcl9mbl90LS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjVhZTk5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA0LXNyYy1iYXNpYy1taXNzaW5nLmgtY2hlY2stZm9yLW1pc3NpbmctX19jb21wYXJfZm5fdC0ucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorRnJvbSBjODUwYjY1NGU3MTY3N2UwZDYyOTJmMTM0NTIwN2I5YjVhY2ZmYzMzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRW1pbCBSZW5uZXIgQmVydGhpbmcgPHN5c3RlbWRAZXNtaWwuZGs+CitEYXRlOiBNb24sIDIzIE9jdCAyMDE3IDExOjMxOjAzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMTJdIHNyYy9iYXNpYy9taXNzaW5nLmg6IGNoZWNrIGZvciBtaXNzaW5nIF9fY29tcGFyX2ZuX3QKKyB0eXBlZGVmCisKK2luY2x1ZGUgbWlzc2luZy5oIGZvciBtaXNzaW5nIF9fY29tcGFyX2ZuX3QKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBzcmMvYmFzaWMvbWlzc2luZy5oIHwgNSArKysrKworIHNyYy9iYXNpYy9zdHJidWYuYyAgfCAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2Jhc2ljL21pc3NpbmcuaCBiL3NyYy9iYXNpYy9taXNzaW5nLmgKK2luZGV4IDgwMDk4ODhhZC4uNjcxZjM0MWM2IDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL21pc3NpbmcuaAorKysrIGIvc3JjL2Jhc2ljL21pc3NpbmcuaAorQEAgLTEwNjMsNiArMTA2MywxMSBAQCBzdHJ1Y3QgaW5wdXRfbWFzayB7CisgI2RlZmluZSBSRU5BTUVfTk9SRVBMQUNFICgxIDw8IDApCisgI2VuZGlmCisgCisrI2lmbmRlZiBfX0NPTVBBUl9GTl9UCisrI2RlZmluZSBfX0NPTVBBUl9GTl9UCisrdHlwZWRlZiBpbnQgKCpfX2NvbXBhcl9mbl90KShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CisrI2VuZGlmCisrCisgI2lmbmRlZiBLQ01QX0ZJTEUKKyAjZGVmaW5lIEtDTVBfRklMRSAwCisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvc3JjL2Jhc2ljL3N0cmJ1Zi5jIGIvc3JjL2Jhc2ljL3N0cmJ1Zi5jCitpbmRleCAwMGFhZjllNjIuLjlkYzRhNTg0YSAxMDA2NDQKKy0tLSBhL3NyYy9iYXNpYy9zdHJidWYuYworKysrIGIvc3JjL2Jhc2ljL3N0cmJ1Zi5jCitAQCAtMjMsNiArMjMsNyBAQAorIAorICNpbmNsdWRlICJhbGxvYy11dGlsLmgiCisgI2luY2x1ZGUgInN0cmJ1Zi5oIgorKyNpbmNsdWRlICJtaXNzaW5nLmgiCisgCisgLyoKKyAgKiBTdHJidWYgc3RvcmVzIGdpdmVuIHN0cmluZ3MgaW4gYSBzaW5nbGUgY29udGludW91cyBhbGxvY2F0ZWQgbWVtb3J5CistLSAKKzIuMTQuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDYtSW5jbHVkZS1uZXRpbmV0LWlmX2V0aGVyLmgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDYtSW5jbHVkZS1uZXRpbmV0LWlmX2V0aGVyLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU4ODdlZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNi1JbmNsdWRlLW5ldGluZXQtaWZfZXRoZXIuaC5wYXRjaApAQCAtMCwwICsxLDg2IEBACitGcm9tIDIxMDgwYjZhNDBkMGE0ZGRkMmRiOGYwZmEzNzY4NmY2ZmE4ODVkMWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyMyBPY3QgMjAxNyAxMTozODozMyAtMDcwMAorU3ViamVjdDogW1BBVENIIDA2LzEyXSBJbmNsdWRlIG5ldGluZXQvaWZfZXRoZXIuaAorCitGaXhlcworL21udC9hL29lL2J1aWxkL3RtcC93b3JrL21pcHMzMnIyLWJlYy1saW51eC1tdXNsL3N5c3RlbWQvMV8yMzQtcjAvcmVjaXBlLXN5c3Jvb3QvdXNyL2luY2x1ZGUvbmV0aW5ldC9pZl9ldGhlci5oOjEwMTo4OiBlcnJvcjogcmVkZWZpbml0aW9uIG9mICdzdHJ1Y3QgZXRoaGRyJworIHN0cnVjdCBldGhoZHIgeworICAgICAgICBefn5+fn4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBzcmMvbGlic3lzdGVtZC9zZC1uZXRsaW5rL25ldGxpbmstdHlwZXMuYyB8IDEgKworIHNyYy9uZXR3b3JrL25ldGRldi90dW50YXAuYyAgICAgICAgICAgICAgIHwgMSArCisgc3JjL25ldHdvcmsvbmV0d29ya2QtYnJ2bGFuLmMgICAgICAgICAgICAgfCAxICsKKyBzcmMvdWRldi9uZXQvZXRodG9vbC11dGlsLmMgICAgICAgICAgICAgICB8IDIgKy0KKyBzcmMvdWRldi91ZGV2LWJ1aWx0aW4tbmV0X3NldHVwX2xpbmsuYyAgICB8IDIgKy0KKyA1IGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9saWJzeXN0ZW1kL3NkLW5ldGxpbmsvbmV0bGluay10eXBlcy5jIGIvc3JjL2xpYnN5c3RlbWQvc2QtbmV0bGluay9uZXRsaW5rLXR5cGVzLmMKK2luZGV4IDkyM2Y3ZGQxMC4uYjk1YjFlNGIyIDEwMDY0NAorLS0tIGEvc3JjL2xpYnN5c3RlbWQvc2QtbmV0bGluay9uZXRsaW5rLXR5cGVzLmMKKysrKyBiL3NyYy9saWJzeXN0ZW1kL3NkLW5ldGxpbmsvbmV0bGluay10eXBlcy5jCitAQCAtMTksNiArMTksNyBAQAorIAorICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorKyNpbmNsdWRlIDxuZXRpbmV0L2lmX2V0aGVyLmg+CisgI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKyAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisgI2luY2x1ZGUgPGxpbnV4L2Nhbi9uZXRsaW5rLmg+CitkaWZmIC0tZ2l0IGEvc3JjL25ldHdvcmsvbmV0ZGV2L3R1bnRhcC5jIGIvc3JjL25ldHdvcmsvbmV0ZGV2L3R1bnRhcC5jCitpbmRleCAzZDYyODA4ODQuLjQwZTU4YzM4ZiAxMDA2NDQKKy0tLSBhL3NyYy9uZXR3b3JrL25ldGRldi90dW50YXAuYworKysrIGIvc3JjL25ldHdvcmsvbmV0ZGV2L3R1bnRhcC5jCitAQCAtMTgsNiArMTgsNyBAQAorICoqKi8KKyAKKyAjaW5jbHVkZSA8ZmNudGwuaD4KKysjaW5jbHVkZSA8bmV0aW5ldC9pZl9ldGhlci5oPgorICNpbmNsdWRlIDxsaW51eC9pZl90dW4uaD4KKyAjaW5jbHVkZSA8bmV0L2lmLmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaWZfZXRoZXIuaD4KK2RpZmYgLS1naXQgYS9zcmMvbmV0d29yay9uZXR3b3JrZC1icnZsYW4uYyBiL3NyYy9uZXR3b3JrL25ldHdvcmtkLWJydmxhbi5jCitpbmRleCBmYTVkM2VlN2YuLmUwODI4OTYyYSAxMDA2NDQKKy0tLSBhL3NyYy9uZXR3b3JrL25ldHdvcmtkLWJydmxhbi5jCisrKysgYi9zcmMvbmV0d29yay9uZXR3b3JrZC1icnZsYW4uYworQEAgLTE4LDYgKzE4LDcgQEAKKyAqKiovCisgCisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKysjaW5jbHVkZSA8bmV0aW5ldC9pZl9ldGhlci5oPgorICNpbmNsdWRlIDxsaW51eC9pZl9icmlkZ2UuaD4KKyAjaW5jbHVkZSA8c3RkYm9vbC5oPgorIAorZGlmZiAtLWdpdCBhL3NyYy91ZGV2L25ldC9ldGh0b29sLXV0aWwuYyBiL3NyYy91ZGV2L25ldC9ldGh0b29sLXV0aWwuYworaW5kZXggMjAxZmMyMzQzLi41ZjdjYzJhMGEgMTAwNjQ0CistLS0gYS9zcmMvdWRldi9uZXQvZXRodG9vbC11dGlsLmMKKysrKyBiL3NyYy91ZGV2L25ldC9ldGh0b29sLXV0aWwuYworQEAgLTE2LDcgKzE2LDcgQEAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCBzeXN0ZW1kOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKioqLworLQorKyNpbmNsdWRlIDxuZXRpbmV0L2lmX2V0aGVyLmg+CisgI2luY2x1ZGUgPG5ldC9pZi5oPgorICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorZGlmZiAtLWdpdCBhL3NyYy91ZGV2L3VkZXYtYnVpbHRpbi1uZXRfc2V0dXBfbGluay5jIGIvc3JjL3VkZXYvdWRldi1idWlsdGluLW5ldF9zZXR1cF9saW5rLmMKK2luZGV4IDhlNDc3NzUxMy4uZDAxZmZmMmE0IDEwMDY0NAorLS0tIGEvc3JjL3VkZXYvdWRldi1idWlsdGluLW5ldF9zZXR1cF9saW5rLmMKKysrKyBiL3NyYy91ZGV2L3VkZXYtYnVpbHRpbi1uZXRfc2V0dXBfbGluay5jCitAQCAtMTYsNyArMTYsNyBAQAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHN5c3RlbWQ7IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqKiovCistCisrI2luY2x1ZGUgPG5ldGluZXQvaWZfZXRoZXIuaD4KKyAjaW5jbHVkZSAiYWxsb2MtdXRpbC5oIgorICNpbmNsdWRlICJsaW5rLWNvbmZpZy5oIgorICNpbmNsdWRlICJsb2cuaCIKKy0tIAorMi4xNC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNi1jb25maWd1cmUtQ2hlY2stZm9yLWFkZGl0aW9uYWwtZmVhdHVyZXMtdGhhdC11Y2xpYmMtLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA2LWNvbmZpZ3VyZS1DaGVjay1mb3ItYWRkaXRpb25hbC1mZWF0dXJlcy10aGF0LXVjbGliYy0ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzYTBkM2YuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA2LWNvbmZpZ3VyZS1DaGVjay1mb3ItYWRkaXRpb25hbC1mZWF0dXJlcy10aGF0LXVjbGliYy0ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi1Gcm9tIDgyZDgzN2I3NjYxOGE3NzM0ODViOTZlMzhiN2I5MTA4M2E3NDM3ZTggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwNTowNTo0NSArMDAwMAotU3ViamVjdDogW1BBVENIIDA2LzE5XSBjb25maWd1cmU6IENoZWNrIGZvciBhZGRpdGlvbmFsIGZlYXR1cmVzIHRoYXQgdWNsaWJjCi0gZG9lc250IHN1cHBvcnQKLQotVGhpcyBoZWxwcyBpbiBzdXBwb3J0aW5nIHVjbGliYyB3aGljaCBkb2VzIG5vdCBoYXZlIGFsbCBmZWF0dXJlcyB0aGF0Ci1nbGliYyBtaWdodCBoYXZlCi0KLVVwc3RyZWFtLVN0YXR1czogRGVuaWVkIFtubyBkZXNpcmUgZm9yIHVjbGliYyBzdXBwb3J0XQotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi0gY29uZmlndXJlLmFjIHwgMTggKysrKysrKysrKysrKysrKysrCi0gMSBmaWxlIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggN2Y2YjNiOS4uN2M0YjVhMiAxMDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFjCi1AQCAtMTEwLDYgKzExMCwyNCBAQCBBQ19QQVRIX1BST0coW1VNT1VOVF9QQVRIXSwgW3Vtb3VudF0sIFsvdXNyL2Jpbi91bW91bnRdLCBbJFBBVEg6L3Vzci9zYmluOi9zYmluXQotIAotIEFTX0lGKFshIGxuIC0tcmVsYXRpdmUgLS1oZWxwID4gL2Rldi9udWxsIDI+JjFdLCBbQUNfTVNHX0VSUk9SKFsqKiogbG4gZG9lc24ndCBzdXBwb3J0IC0tcmVsYXRpdmUgKioqXSldKQotIAotKyMgY2hlY2sgZm9yIGZldyBmdW5jdGlvbnMgbm90IGltcGxlbWVudGVkIGluIHVDbGliYwotKwotK0FDX0NIRUNLX0ZVTkNTX09OQ0UobWtvc3RlbXAgZXhlY3ZwZSBwb3NpeF9mYWxsb2NhdGUpCi0rCi0rIyBjaGVjayBmb3IgJW1zIGZvcm1hdCBzdXBwb3J0IC0gYXNzdW1lIGFsd2F5cyBubyBpZiBjcm9zcyBjb21waWxpbmcKLSsKLStBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgJW1zIGZvcm1hdCBpcyBzdXBwb3J0ZWQgYnkgKnNjYW5mXSkKLSsKLStBQ19MSU5LX0lGRUxTRSgKLSsJW0FDX0xBTkdfUFJPR1JBTShbCi0rCSAjaW5jbHVkZSA8c3RkaW8uaD4KLSsJIF0sWwotKwkgICAgY2hhciAqYnVmMSwgKmJ1ZjIsICpidWYzLCBzdHI9IjEgMi4zIGFiY2RlIiA7Ci0rCSAgICBpbnQgcmMgPSBzc2NhbmYoc3RyLCAiJW1zICVtcyAlbXMiLCAmYnVmMSwgJmJ1ZjIsICZidWYzKSA7Ci0rCSAgICByZXR1cm4gKHJjPT0zKT8wOjE7XSldLAotKwlbQUNfREVGSU5FKFtIQVZFX01TRk9STUFUXSwgWzFdLCBbRGVmaW5lIGlmICVtcyBmb3JtYXQgaXMgc3VwcG9ydGVkIGJ5ICpzY2FuZi5dKV0sCi0rCVtBQ19NU0dfUkVTVUxUKFtub10pXSkKLSsKLSBNNF9ERUZJTkVTPQotIAotIEFDX0NIRUNLX1RPT0woT0JKQ09QWSwgb2JqY29weSkKLS0tIAotMi4xMC4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNy1jaGVjay1mb3ItbWlzc2luZy1jYW5vbmljYWxpemVfZmlsZV9uYW1lLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA3LWNoZWNrLWZvci1taXNzaW5nLWNhbm9uaWNhbGl6ZV9maWxlX25hbWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIzNGM1OQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNy1jaGVjay1mb3ItbWlzc2luZy1jYW5vbmljYWxpemVfZmlsZV9uYW1lLnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK0Zyb20gMDVkZmZlNjc5MTlmZmM3MmJlNWMwMTdiYzZjZjgyZjE2NGIyZThmOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEVtaWwgUmVubmVyIEJlcnRoaW5nIDxzeXN0ZW1kQGVzbWlsLmRrPgorRGF0ZTogTW9uLCAyMyBPY3QgMjAxNyAxMTo0MjowMyAtMDcwMAorU3ViamVjdDogW1BBVENIIDA3LzEyXSBjaGVjayBmb3IgbWlzc2luZyBjYW5vbmljYWxpemVfZmlsZV9uYW1lCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgIHwgMiArKworIHNyYy9iYXNpYy9taXNzaW5nLmggICAgICAgICB8IDEgKworIHNyYy9iYXNpYy9taXNzaW5nX3N5c2NhbGwuaCB8IDYgKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggY2QwMzVhOTcxLi4zNjc0MTkwZmIgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTMzMyw2ICszMzMsNyBAQCBBQ19DSEVDS19ERUNMUyhbCisgICAgICAgICByZW5hbWVhdDIsCisgICAgICAgICBrY21wLAorICAgICAgICAga2V5Y3RsLAorKyAgICAgICAgY2Fub25pY2FsaXplX2ZpbGVfbmFtZSwKKyAgICAgICAgIExPX0ZMQUdTX1BBUlRTQ0FOLAorICAgICAgICAgY29weV9maWxlX3JhbmdlLAorICAgICAgICAgZXhwbGljaXRfYnplcm9dLAorQEAgLTM0Myw2ICszNDQsNyBAQCBBQ19DSEVDS19ERUNMUyhbCisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPHNjaGVkLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8bGludXgvbG9vcC5oPgorIF1dKQorIAorZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy9taXNzaW5nLmggYi9zcmMvYmFzaWMvbWlzc2luZy5oCitpbmRleCA2NzFmMzQxYzYuLjhhZTQ5NjRlMSAxMDA2NDQKKy0tLSBhL3NyYy9iYXNpYy9taXNzaW5nLmgKKysrKyBiL3NyYy9iYXNpYy9taXNzaW5nLmgKK0BAIC0xMjQ2LDMgKzEyNDYsNCBAQCBzdHJ1Y3QgZXRodG9vbF9saW5rX3NldHRpbmdzIHsKKyAjZW5kaWYKKyAKKyAjaW5jbHVkZSAibWlzc2luZ19zeXNjYWxsLmgiCisrCitkaWZmIC0tZ2l0IGEvc3JjL2Jhc2ljL21pc3Npbmdfc3lzY2FsbC5oIGIvc3JjL2Jhc2ljL21pc3Npbmdfc3lzY2FsbC5oCitpbmRleCA4OTgxMTZjN2IuLjRkNDRlZTRmYSAxMDA2NDQKKy0tLSBhL3NyYy9iYXNpYy9taXNzaW5nX3N5c2NhbGwuaAorKysrIGIvc3JjL2Jhc2ljL21pc3Npbmdfc3lzY2FsbC5oCitAQCAtMjgsNiArMjgsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgcGl2b3Rfcm9vdChjb25zdCBjaGFyICpuZXdfcm9vdCwgY29uc3QgY2hhciAqcHV0X29sZCkgeworIH0KKyAjZW5kaWYKKyAKKysjaWYgIUhBVkVfREVDTF9DQU5PTklDQUxJWkVfRklMRV9OQU1FCisrc3RhdGljIGlubGluZSBjaGFyICpjYW5vbmljYWxpemVfZmlsZV9uYW1lKGNvbnN0IGNoYXIgKnBhdGgpIHsKKysgICAgICAgIHJldHVybiByZWFscGF0aChwYXRoLCBOVUxMKTsKKyt9CisrI2VuZGlmCisrCisgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyAKKyAjaWYgIUhBVkVfREVDTF9NRU1GRF9DUkVBVEUKKy0tIAorMi4xNC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNy11c2UtbG5yLXdyYXBwZXItaW5zdGVhZC1vZi1sb29raW5nLWZvci1yZWxhdGl2ZS1vcHRpLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA3LXVzZS1sbnItd3JhcHBlci1pbnN0ZWFkLW9mLWxvb2tpbmctZm9yLXJlbGF0aXZlLW9wdGkucGF0Y2gKaW5kZXggZmFkNjlhNS4uYmM5MmRiNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA3LXVzZS1sbnItd3JhcHBlci1pbnN0ZWFkLW9mLWxvb2tpbmctZm9yLXJlbGF0aXZlLW9wdGkucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA3LXVzZS1sbnItd3JhcHBlci1pbnN0ZWFkLW9mLWxvb2tpbmctZm9yLXJlbGF0aXZlLW9wdGkucGF0Y2gKQEAgLTEyLDEwICsxMiwxMCBAQAogIGNvbmZpZ3VyZS5hYyB8IDIgLS0KICAyIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAzIGRlbGV0aW9ucygtKQogCi1kaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQotaW5kZXggMjllZDFkZC4uMDJmNDAxNyAxMDA2NDQKLS0tLSBhL01ha2VmaWxlLmFtCi0rKysgYi9NYWtlZmlsZS5hbQorSW5kZXg6IGdpdC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL01ha2VmaWxlLmFtCisrKysgZ2l0L01ha2VmaWxlLmFtCiBAQCAtMzIwLDcgKzMyMCw3IEBAIGRlZmluZSBpbnN0YWxsLXJlbGF0aXZlLWFsaWFzZXMKICAJd2hpbGUgWyAtbiAiJCQxIiBdOyBkbyBcCiAgCQkkKE1LRElSX1ApIGBkaXJuYW1lICQoREVTVERJUikkJGRpci8kJDJgICYmIFwKQEAgLTI1LDE5ICsyNSwxNiBAQAogIAkJc2hpZnQgMiB8fCBleGl0ICQkPzsgXAogIAlkb25lCiAgZW5kZWYKLWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IDdjNGI1YTIuLmIxMGM5NTIgMTAwNjQ0Ci0tLS0gYS9jb25maWd1cmUuYWMKLSsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTEwOCw4ICsxMDgsNiBAQCBBQ19QQVRIX1BST0coW1NVTE9HSU5dLCBbc3Vsb2dpbl0sIFsvdXNyL3NiaW4vc3Vsb2dpbl0sIFskUEFUSDovdXNyL3NiaW46L3NiaW5dKQorSW5kZXg6IGdpdC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9jb25maWd1cmUuYWMKKysrKyBnaXQvY29uZmlndXJlLmFjCitAQCAtMTEwLDggKzExMCw2IEBAIEFDX1BBVEhfUFJPRyhbU1VMT0dJTl0sIFtzdWxvZ2luXSwgWy91c3IKICBBQ19QQVRIX1BST0coW01PVU5UX1BBVEhdLCBbbW91bnRdLCBbL3Vzci9iaW4vbW91bnRdLCBbJFBBVEg6L3Vzci9zYmluOi9zYmluXSkKICBBQ19QQVRIX1BST0coW1VNT1VOVF9QQVRIXSwgW3Vtb3VudF0sIFsvdXNyL2Jpbi91bW91bnRdLCBbJFBBVEg6L3Vzci9zYmluOi9zYmluXSkKICAKIC1BU19JRihbISBsbiAtLXJlbGF0aXZlIC0taGVscCA+IC9kZXYvbnVsbCAyPiYxXSwgW0FDX01TR19FUlJPUihbKioqIGxuIGRvZXNuJ3Qgc3VwcG9ydCAtLXJlbGF0aXZlICoqKl0pXSkKIC0KLSAjIGNoZWNrIGZvciBmZXcgZnVuY3Rpb25zIG5vdCBpbXBsZW1lbnRlZCBpbiB1Q2xpYmMKKyBNNF9ERUZJTkVTPQogIAotIEFDX0NIRUNLX0ZVTkNTX09OQ0UobWtvc3RlbXAgZXhlY3ZwZSBwb3NpeF9mYWxsb2NhdGUpCi0tLSAKLTIuMTAuMgotCisgQUNfQ0hFQ0tfVE9PTChPQkpDT1BZLCBvYmpjb3B5KQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA4LURvLW5vdC1lbmFibGUtbnNzLXRlc3RzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA4LURvLW5vdC1lbmFibGUtbnNzLXRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YTRmOGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDgtRG8tbm90LWVuYWJsZS1uc3MtdGVzdHMucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSA0OGU3YzBmNWIyZjVkNzc3YTE2YWM1NTg0ZGM0ZjUwZjFkZmE4MzJjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMjMgT2N0IDIwMTcgMTI6Mjc6NTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAwOC8xMl0gRG8gbm90IGVuYWJsZSBuc3MgdGVzdHMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBNYWtlZmlsZS5hbSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IDNjYzhmMzQ1MS4uZGYyMGE5YTExIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtNTI5MCw2ICs1MjkwLDcgQEAgRVhUUkFfRElTVCArPSBcCisgCXNyYy90aW1lc3luYy90aW1lc3luY2QuY29uZi5pbgorIAorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisraWYgRU5BQkxFX05TU19TWVNURU1ECisgdGVzdF9uc3NfU09VUkNFUyA9IFwKKyAJc3JjL3Rlc3QvdGVzdC1uc3MuYworIAorQEAgLTUzMDIsNyArNTMwMyw2IEBAIG1hbnVhbF90ZXN0cyArPSBcCisgCXRlc3QtbnNzCisgCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1pZiBFTkFCTEVfTlNTX1NZU1RFTUQKKyBsaWJuc3Nfc3lzdGVtZF9sYV9TT1VSQ0VTID0gXAorIAlzcmMvbnNzLXN5c3RlbWQvbnNzLXN5c3RlbWQuc3ltIFwKKyAJc3JjL25zcy1zeXN0ZW1kL25zcy1zeXN0ZW1kLmMKKy0tIAorMi4xNC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwOC1uc3Bhd24tVXNlLWV4ZWN2cGUtb25seS13aGVuLWxpYmMtc3VwcG9ydHMtaXQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDgtbnNwYXduLVVzZS1leGVjdnBlLW9ubHktd2hlbi1saWJjLXN1cHBvcnRzLWl0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODZiNWFhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwOC1uc3Bhd24tVXNlLWV4ZWN2cGUtb25seS13aGVuLWxpYmMtc3VwcG9ydHMtaXQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1Gcm9tIDk2MDI2YTM3NjMyNjRlYjQxYTJjM2UzNzRmMjMyZjZlNTQzMjg0YTggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogV2VkLCA5IE5vdiAyMDE2IDE5OjMzOjQ5IC0wODAwCi1TdWJqZWN0OiBbUEFUQ0ggMDgvMTldIG5zcGF3bjogVXNlIGV4ZWN2cGUgb25seSB3aGVuIGxpYmMgc3VwcG9ydHMgaXQKLQotVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQgW25vIGRlc2lyZSBmb3IgdWNsaWJjIHN1cHBvcnRdCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBzcmMvbnNwYXduL25zcGF3bi5jIHwgNyArKysrKysrCi0gMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvc3JjL25zcGF3bi9uc3Bhd24uYyBiL3NyYy9uc3Bhd24vbnNwYXduLmMKLWluZGV4IDliOWFlOTAuLjE5YjQ3Y2QgMTAwNjQ0Ci0tLS0gYS9zcmMvbnNwYXduL25zcGF3bi5jCi0rKysgYi9zcmMvbnNwYXduL25zcGF3bi5jCi1AQCAtMTIzLDYgKzEyMyw4IEBAIHR5cGVkZWYgZW51bSBMaW5rSm91cm5hbCB7Ci0gICAgICAgICBMSU5LX0dVRVNUCi0gfSBMaW5rSm91cm5hbDsKLSAKLSsjaW5jbHVkZSAiY29uZmlnLmgiCi0rCi0gc3RhdGljIGNoYXIgKmFyZ19kaXJlY3RvcnkgPSBOVUxMOwotIHN0YXRpYyBjaGFyICphcmdfdGVtcGxhdGUgPSBOVUxMOwotIHN0YXRpYyBjaGFyICphcmdfY2hkaXIgPSBOVUxMOwotQEAgLTI4NzEsNyArMjg3MywxMiBAQCBzdGF0aWMgaW50IGlubmVyX2NoaWxkKAotICAgICAgICAgICAgICAgICBhWzBdID0gKGNoYXIqKSAiL3NiaW4vaW5pdCI7Ci0gICAgICAgICAgICAgICAgIGV4ZWN2ZShhWzBdLCBhLCBlbnZfdXNlKTsKLSAgICAgICAgIH0gZWxzZSBpZiAoIXN0cnZfaXNlbXB0eShhcmdfcGFyYW1ldGVycykpCi0rI2lmZGVmIEhBVkVfRVhFQ1ZQRQotICAgICAgICAgICAgICAgICBleGVjdnBlKGFyZ19wYXJhbWV0ZXJzWzBdLCBhcmdfcGFyYW1ldGVycywgZW52X3VzZSk7Ci0rI2Vsc2UKLSsgICAgICAgICAgICAgICAgZW52aXJvbiA9IGVudl91c2U7Ci0rICAgICAgICAgICAgICAgIGV4ZWN2cChhcmdfcGFyYW1ldGVyc1swXSwgYXJnX3BhcmFtZXRlcnMpOwotKyNlbmRpZiAvKiBIQVZFX0VYRUNWUEUgKi8KLSAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICBpZiAoIWFyZ19jaGRpcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBjYW5ub3QgY2hhbmdlIHRoZSBkaXJlY3RvcnksIHdlJ2xsIGVuZCB1cCBpbiAvLCB0aGF0IGlzIGV4cGVjdGVkLiAqLwotLS0gCi0yLjEwLjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA5LXRlc3QtaGV4ZGVjb2N0LmMtSW5jbHVkZS1taXNzaW5nLmgtZm9ybS1zdHJuZHVwYS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwOS10ZXN0LWhleGRlY29jdC5jLUluY2x1ZGUtbWlzc2luZy5oLWZvcm0tc3RybmR1cGEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM2OTRkYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwOS10ZXN0LWhleGRlY29jdC5jLUluY2x1ZGUtbWlzc2luZy5oLWZvcm0tc3RybmR1cGEucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorRnJvbSA3NWY0ZTdmMTY3ZGU1MzNhMTYwZWUxYWYyYTAzZmJhNGM1YTVmZmM2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMjMgT2N0IDIwMTcgMTI6MzM6MjIgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAwOS8xMl0gdGVzdC1oZXhkZWNvY3QuYzogSW5jbHVkZSBtaXNzaW5nLmggZm9ybSBzdHJuZHVwYQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIHNyYy90ZXN0L3Rlc3QtaGV4ZGVjb2N0LmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Rlc3QtaGV4ZGVjb2N0LmMgYi9zcmMvdGVzdC90ZXN0LWhleGRlY29jdC5jCitpbmRleCBmY2FlNDI3ZTcuLjVlYjVlMmVkNyAxMDA2NDQKKy0tLSBhL3NyYy90ZXN0L3Rlc3QtaGV4ZGVjb2N0LmMKKysrKyBiL3NyYy90ZXN0L3Rlc3QtaGV4ZGVjb2N0LmMKK0BAIC0yMSw2ICsyMSw3IEBACisgI2luY2x1ZGUgImhleGRlY29jdC5oIgorICNpbmNsdWRlICJtYWNyby5oIgorICNpbmNsdWRlICJzdHJpbmctdXRpbC5oIgorKyNpbmNsdWRlICJtaXNzaW5nLmgiCisgCisgc3RhdGljIHZvaWQgdGVzdF9oZXhjaGFyKHZvaWQpIHsKKyAgICAgICAgIGFzc2VydF9zZShoZXhjaGFyKDB4YSkgPT0gJ2EnKTsKKy0tIAorMi4xNC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwOS11dGlsLWJ5cGFzcy11bmltcGxlbWVudGVkLV9TQ19QSFlTX1BBR0VTLXN5c3RlbS1jb25mLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA5LXV0aWwtYnlwYXNzLXVuaW1wbGVtZW50ZWQtX1NDX1BIWVNfUEFHRVMtc3lzdGVtLWNvbmYucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxNTBiYjAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA5LXV0aWwtYnlwYXNzLXVuaW1wbGVtZW50ZWQtX1NDX1BIWVNfUEFHRVMtc3lzdGVtLWNvbmYucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi1Gcm9tIDA4NWM4YjZmMjUzNzI2YWQ1NDdlN2JlODRmZjNmMmI5OTcwMTQ4OGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogV2VkLCA5IE5vdiAyMDE2IDE5OjM4OjA3IC0wODAwCi1TdWJqZWN0OiBbUEFUQ0ggMDkvMTldIHV0aWw6IGJ5cGFzcyB1bmltcGxlbWVudGVkIF9TQ19QSFlTX1BBR0VTIHN5c3RlbQotIGNvbmZpZ3VyYXRpb24gQVBJIG9uIHVjbGliYwotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3VjbGliYy1zcGVjaWZpY10KLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotIHNyYy9iYXNpYy91dGlsLmMgfCAxNSArKysrKysrKysrKysrKysKLSAxIGZpbGUgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvc3JjL2Jhc2ljL3V0aWwuYyBiL3NyYy9iYXNpYy91dGlsLmMKLWluZGV4IGMxYjVjYTEuLjRjNjJkNDMgMTAwNjQ0Ci0tLS0gYS9zcmMvYmFzaWMvdXRpbC5jCi0rKysgYi9zcmMvYmFzaWMvdXRpbC5jCi1AQCAtNzQyLDYgKzc0MiwyMCBAQCB1aW50NjRfdCBwaHlzaWNhbF9tZW1vcnkodm9pZCkgewotICAgICAgICAgICogSW4gb3JkZXIgdG8gc3VwcG9ydCBjb250YWluZXJzIG5pY2VseSB0aGF0IGhhdmUgYSBjb25maWd1cmVkIG1lbW9yeSBsaW1pdCB3ZSdsbCB0YWtlIHRoZSBtaW5pbXVtIG9mIHRoZQotICAgICAgICAgICogcGh5c2ljYWxseSByZXBvcnRlZCBhbW91bnQgb2YgbWVtb3J5IGFuZCB0aGUgbGltaXQgY29uZmlndXJlZCBmb3IgdGhlIHJvb3QgY2dyb3VwLCBpZiB0aGVyZSBpcyBhbnkuICovCi0gCi0rI2lmZGVmIF9fVUNMSUJDX18KLSsgICAgICAgIGNoYXIgbGluZVsxMjhdOwotKyAgICAgICAgRklMRSAqZiA9IGZvcGVuKCIvcHJvYy9tZW1pbmZvIiwgInIiKTsKLSsgICAgICAgIGlmIChmID09IE5VTEwpCi0rICAgICAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgd2hpbGUgKCFmZW9mKGYpICYmIGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKS0xLCBmKSkgewotKyAgICAgICAgICAgICAgICBpZiAoc3NjYW5mKGxpbmUsICJNZW1Ub3RhbDogJWxpIGtCIiwgJm1lbSkgPT0gMSkgewotKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbSAqPSAxMDI0OwotKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotKyAgICAgICAgICAgICAgICB9Ci0rICAgICAgICB9Ci0rICAgICAgICBmY2xvc2UoZik7Ci0rICAgICAgICByZXR1cm4gKHVpbnQ2NF90KSBtZW07Ci0rI2Vsc2UKLSAgICAgICAgIHNjID0gc3lzY29uZihfU0NfUEhZU19QQUdFUyk7Ci0gICAgICAgICBhc3NlcnQoc2MgPiAwKTsKLSAKLUBAIC03NjIsNiArNzc2LDcgQEAgdWludDY0X3QgcGh5c2ljYWxfbWVtb3J5KHZvaWQpIHsKLSAgICAgICAgIGxpbSAqPSBwczsKLSAKLSAgICAgICAgIHJldHVybiBNSU4obWVtLCBsaW0pOwotKyNlbmRpZgotIH0KLSAKLSB1aW50NjRfdCBwaHlzaWNhbF9tZW1vcnlfc2NhbGUodWludDY0X3QgdiwgdWludDY0X3QgbWF4KSB7Ci0tLSAKLTIuMTAuMgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTAtdGVzdC1zaXplb2YuYy1EaXNhYmxlLXRlc3RzLWZvci1taXNzaW5nLXR5cGVkZWZzLWluLS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMC10ZXN0LXNpemVvZi5jLURpc2FibGUtdGVzdHMtZm9yLW1pc3NpbmctdHlwZWRlZnMtaW4tLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwOGM4M2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTAtdGVzdC1zaXplb2YuYy1EaXNhYmxlLXRlc3RzLWZvci1taXNzaW5nLXR5cGVkZWZzLWluLS5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitGcm9tIDZlOWQyYmNhYTZmODg2YjIzODRjMWMzNWEwNGU0ZWJjMTQ4YWVhNjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyMyBPY3QgMjAxNyAxMjo0MDoyNSAtMDcwMAorU3ViamVjdDogW1BBVENIIDEwLzEyXSB0ZXN0LXNpemVvZi5jOiBEaXNhYmxlIHRlc3RzIGZvciBtaXNzaW5nIHR5cGVkZWZzIGluCisgbXVzbAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIHNyYy90ZXN0L3Rlc3Qtc2l6ZW9mLmMgfCA1ICsrKystCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvdGVzdC1zaXplb2YuYyBiL3NyYy90ZXN0L3Rlc3Qtc2l6ZW9mLmMKK2luZGV4IDI2OWFkZmQxOC4uYmE3ODU1ZGZmIDEwMDY0NAorLS0tIGEvc3JjL3Rlc3QvdGVzdC1zaXplb2YuYworKysrIGIvc3JjL3Rlc3QvdGVzdC1zaXplb2YuYworQEAgLTE4LDcgKzE4LDYgQEAKKyAqKiovCisgCisgI2luY2x1ZGUgPHN0ZGlvLmg+CistCisgI2luY2x1ZGUgInRpbWUtdXRpbC5oIgorIAorIC8qIFByaW50IGluZm9ybWF0aW9uIGFib3V0IHZhcmlvdXMgdHlwZXMuIFVzZWZ1bCB3aGVuIGRpYWdub3NpbmcKK0BAIC00OCw4ICs0NywxMCBAQCBpbnQgbWFpbih2b2lkKSB7CisgICAgICAgICBpbmZvKHVuc2lnbmVkKTsKKyAgICAgICAgIGluZm8obG9uZyB1bnNpZ25lZCk7CisgICAgICAgICBpbmZvKGxvbmcgbG9uZyB1bnNpZ25lZCk7CisrI2lmZGVmIF9fR0xJQkNfXworICAgICAgICAgaW5mbyhfX3N5c2NhbGxfdWxvbmdfdCk7CisgICAgICAgICBpbmZvKF9fc3lzY2FsbF9zbG9uZ190KTsKKysjZW5kaWYKKyAKKyAgICAgICAgIGluZm8oZmxvYXQpOworICAgICAgICAgaW5mbyhkb3VibGUpOworQEAgLTU5LDcgKzYwLDkgQEAgaW50IG1haW4odm9pZCkgeworICAgICAgICAgaW5mbyhzc2l6ZV90KTsKKyAgICAgICAgIGluZm8odGltZV90KTsKKyAgICAgICAgIGluZm8odXNlY190KTsKKysjaWZkZWYgX19HTElCQ19fCisgICAgICAgICBpbmZvKF9fdGltZV90KTsKKysjZW5kaWYKKyAKKyAgICAgICAgIGluZm8oZW51bSBFbnVtKTsKKyAgICAgICAgIGluZm8oZW51bSBCaWdFbnVtKTsKKy0tIAorMi4xNC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMS1kb24tdC11c2UtZ2xpYmMtc3BlY2lmaWMtcXNvcnRfci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMS1kb24tdC11c2UtZ2xpYmMtc3BlY2lmaWMtcXNvcnRfci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2ZlODI5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDExLWRvbi10LXVzZS1nbGliYy1zcGVjaWZpYy1xc29ydF9yLnBhdGNoCkBAIC0wLDAgKzEsMTA1IEBACitGcm9tIDJlYjQ1ZjVhMGE4YmZiOGJkY2EwODQ1ODdhZDI4ZTUwMDFmM2NjNGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBFbWlsIFJlbm5lciBCZXJ0aGluZyA8c3lzdGVtZEBlc21pbC5kaz4KK0RhdGU6IFRodSwgMTggU2VwIDIwMTQgMTU6MjQ6NTYgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxMS8xMl0gZG9uJ3QgdXNlIGdsaWJjLXNwZWNpZmljIHFzb3J0X3IKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBzcmMvaHdkYi9od2RiLmMgICAgICAgICB8IDE4ICsrKysrKysrKysrLS0tLS0tLQorIHNyYy91ZGV2L3VkZXZhZG0taHdkYi5jIHwgMTYgKysrKysrKysrKy0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMjEgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvaHdkYi9od2RiLmMgYi9zcmMvaHdkYi9od2RiLmMKK2luZGV4IDc5MzM5OGNhNi4uNjY5YjAwODE4IDEwMDY0NAorLS0tIGEvc3JjL2h3ZGIvaHdkYi5jCisrKysgYi9zcmMvaHdkYi9od2RiLmMKK0BAIC0xNTEsMTMgKzE1MSwxMiBAQCBzdGF0aWMgdm9pZCB0cmllX2ZyZWUoc3RydWN0IHRyaWUgKnRyaWUpIHsKKyAKKyBERUZJTkVfVFJJVklBTF9DTEVBTlVQX0ZVTkMoc3RydWN0IHRyaWUqLCB0cmllX2ZyZWUpOworIAorLXN0YXRpYyBpbnQgdHJpZV92YWx1ZXNfY21wKGNvbnN0IHZvaWQgKnYxLCBjb25zdCB2b2lkICp2Miwgdm9pZCAqYXJnKSB7Cisrc3RhdGljIHN0cnVjdCB0cmllICp0cmllX25vZGVfYWRkX3ZhbHVlX3RyaWU7Cisrc3RhdGljIGludCB0cmllX3ZhbHVlc19jbXAoY29uc3Qgdm9pZCAqdjEsIGNvbnN0IHZvaWQgKnYyKSB7CisgICAgICAgICBjb25zdCBzdHJ1Y3QgdHJpZV92YWx1ZV9lbnRyeSAqdmFsMSA9IHYxOworICAgICAgICAgY29uc3Qgc3RydWN0IHRyaWVfdmFsdWVfZW50cnkgKnZhbDIgPSB2MjsKKy0gICAgICAgIHN0cnVjdCB0cmllICp0cmllID0gYXJnOworLQorLSAgICAgICAgcmV0dXJuIHN0cmNtcCh0cmllLT5zdHJpbmdzLT5idWYgKyB2YWwxLT5rZXlfb2ZmLAorLSAgICAgICAgICAgICAgICAgICAgICB0cmllLT5zdHJpbmdzLT5idWYgKyB2YWwyLT5rZXlfb2ZmKTsKKysgICAgICAgIHJldHVybiBzdHJjbXAodHJpZV9ub2RlX2FkZF92YWx1ZV90cmllLT5zdHJpbmdzLT5idWYgKyB2YWwxLT5rZXlfb2ZmLAorKyAgICAgICAgICAgICAgICAgICAgICB0cmllX25vZGVfYWRkX3ZhbHVlX3RyaWUtPnN0cmluZ3MtPmJ1ZiArIHZhbDItPmtleV9vZmYpOworIH0KKyAKKyBzdGF0aWMgaW50IHRyaWVfbm9kZV9hZGRfdmFsdWUoc3RydWN0IHRyaWUgKnRyaWUsIHN0cnVjdCB0cmllX25vZGUgKm5vZGUsCitAQCAtMTgyLDcgKzE4MSwxMCBAQCBzdGF0aWMgaW50IHRyaWVfbm9kZV9hZGRfdmFsdWUoc3RydWN0IHRyaWUgKnRyaWUsIHN0cnVjdCB0cmllX25vZGUgKm5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlX29mZiA9IHYsCisgICAgICAgICAgICAgICAgIH07CisgCistICAgICAgICAgICAgICAgIHZhbCA9IHhic2VhcmNoX3IoJnNlYXJjaCwgbm9kZS0+dmFsdWVzLCBub2RlLT52YWx1ZXNfY291bnQsIHNpemVvZihzdHJ1Y3QgdHJpZV92YWx1ZV9lbnRyeSksIHRyaWVfdmFsdWVzX2NtcCwgdHJpZSk7CisrICAgICAgICAgICAgICAgIHRyaWVfbm9kZV9hZGRfdmFsdWVfdHJpZSA9IHRyaWU7CisrICAgICAgICAgICAgICAgIHZhbCA9IGJzZWFyY2goJnNlYXJjaCwgbm9kZS0+dmFsdWVzLCBub2RlLT52YWx1ZXNfY291bnQsIHNpemVvZihzdHJ1Y3QgdHJpZV92YWx1ZV9lbnRyeSksIHRyaWVfdmFsdWVzX2NtcCk7CisrICAgICAgICAgICAgICAgIHRyaWVfbm9kZV9hZGRfdmFsdWVfdHJpZSA9IE5VTEw7CisrCisgICAgICAgICAgICAgICAgIGlmICh2YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgMiBpZGVudGljYWwgcHJvcGVydGllcyBvbiB0aGUgc2FtZSBtYXRjaC1zdHJpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICogU2luY2Ugd2UgcHJvY2VzcyBmaWxlcyBpbiBvcmRlciwgd2UganVzdCByZXBsYWNlIHRoZSBwcmV2aW91cyB2YWx1ZS4KK0BAIC0yMDcsNyArMjA5LDkgQEAgc3RhdGljIGludCB0cmllX25vZGVfYWRkX3ZhbHVlKHN0cnVjdCB0cmllICp0cmllLCBzdHJ1Y3QgdHJpZV9ub2RlICpub2RlLAorICAgICAgICAgbm9kZS0+dmFsdWVzW25vZGUtPnZhbHVlc19jb3VudF0uZmlsZV9wcmlvcml0eSA9IGZpbGVfcHJpb3JpdHk7CisgICAgICAgICBub2RlLT52YWx1ZXNbbm9kZS0+dmFsdWVzX2NvdW50XS5saW5lX251bWJlciA9IGxpbmVfbnVtYmVyOworICAgICAgICAgbm9kZS0+dmFsdWVzX2NvdW50Kys7CistICAgICAgICBxc29ydF9yKG5vZGUtPnZhbHVlcywgbm9kZS0+dmFsdWVzX2NvdW50LCBzaXplb2Yoc3RydWN0IHRyaWVfdmFsdWVfZW50cnkpLCB0cmllX3ZhbHVlc19jbXAsIHRyaWUpOworKyAgICAgICAgdHJpZV9ub2RlX2FkZF92YWx1ZV90cmllID0gdHJpZTsKKysgICAgICAgIHFzb3J0KG5vZGUtPnZhbHVlcywgbm9kZS0+dmFsdWVzX2NvdW50LCBzaXplb2Yoc3RydWN0IHRyaWVfdmFsdWVfZW50cnkpLCB0cmllX3ZhbHVlc19jbXApOworKyAgICAgICAgdHJpZV9ub2RlX2FkZF92YWx1ZV90cmllID0gTlVMTDsKKyAgICAgICAgIHJldHVybiAwOworIH0KKyAKK2RpZmYgLS1naXQgYS9zcmMvdWRldi91ZGV2YWRtLWh3ZGIuYyBiL3NyYy91ZGV2L3VkZXZhZG0taHdkYi5jCitpbmRleCA2OWIwYjkwMjUuLmZiZDIxMzMwMCAxMDA2NDQKKy0tLSBhL3NyYy91ZGV2L3VkZXZhZG0taHdkYi5jCisrKysgYi9zcmMvdWRldi91ZGV2YWRtLWh3ZGIuYworQEAgLTEyOCwxMyArMTI4LDEzIEBAIHN0YXRpYyB2b2lkIHRyaWVfbm9kZV9jbGVhbnVwKHN0cnVjdCB0cmllX25vZGUgKm5vZGUpIHsKKyAgICAgICAgIGZyZWUobm9kZSk7CisgfQorIAorLXN0YXRpYyBpbnQgdHJpZV92YWx1ZXNfY21wKGNvbnN0IHZvaWQgKnYxLCBjb25zdCB2b2lkICp2Miwgdm9pZCAqYXJnKSB7Cisrc3RhdGljIHN0cnVjdCB0cmllICp0cmllX25vZGVfYWRkX3ZhbHVlX3RyaWU7Cisrc3RhdGljIGludCB0cmllX3ZhbHVlc19jbXAoY29uc3Qgdm9pZCAqdjEsIGNvbnN0IHZvaWQgKnYyKSB7CisgICAgICAgICBjb25zdCBzdHJ1Y3QgdHJpZV92YWx1ZV9lbnRyeSAqdmFsMSA9IHYxOworICAgICAgICAgY29uc3Qgc3RydWN0IHRyaWVfdmFsdWVfZW50cnkgKnZhbDIgPSB2MjsKKy0gICAgICAgIHN0cnVjdCB0cmllICp0cmllID0gYXJnOworIAorLSAgICAgICAgcmV0dXJuIHN0cmNtcCh0cmllLT5zdHJpbmdzLT5idWYgKyB2YWwxLT5rZXlfb2ZmLAorLSAgICAgICAgICAgICAgICAgICAgICB0cmllLT5zdHJpbmdzLT5idWYgKyB2YWwyLT5rZXlfb2ZmKTsKKysgICAgICAgIHJldHVybiBzdHJjbXAodHJpZV9ub2RlX2FkZF92YWx1ZV90cmllLT5zdHJpbmdzLT5idWYgKyB2YWwxLT5rZXlfb2ZmLAorKyAgICAgICAgICAgICAgICAgICAgICB0cmllX25vZGVfYWRkX3ZhbHVlX3RyaWUtPnN0cmluZ3MtPmJ1ZiArIHZhbDItPmtleV9vZmYpOworIH0KKyAKKyBzdGF0aWMgaW50IHRyaWVfbm9kZV9hZGRfdmFsdWUoc3RydWN0IHRyaWUgKnRyaWUsIHN0cnVjdCB0cmllX25vZGUgKm5vZGUsCitAQCAtMTU1LDcgKzE1NSw5IEBAIHN0YXRpYyBpbnQgdHJpZV9ub2RlX2FkZF92YWx1ZShzdHJ1Y3QgdHJpZSAqdHJpZSwgc3RydWN0IHRyaWVfbm9kZSAqbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVfb2ZmID0gdiwKKyAgICAgICAgICAgICAgICAgfTsKKyAKKy0gICAgICAgICAgICAgICAgdmFsID0geGJzZWFyY2hfcigmc2VhcmNoLCBub2RlLT52YWx1ZXMsIG5vZGUtPnZhbHVlc19jb3VudCwgc2l6ZW9mKHN0cnVjdCB0cmllX3ZhbHVlX2VudHJ5KSwgdHJpZV92YWx1ZXNfY21wLCB0cmllKTsKKysgICAgICAgICAgICAgICAgdHJpZV9ub2RlX2FkZF92YWx1ZV90cmllID0gdHJpZTsKKysgICAgICAgICAgICAgICAgdmFsID0gYnNlYXJjaCgmc2VhcmNoLCBub2RlLT52YWx1ZXMsIG5vZGUtPnZhbHVlc19jb3VudCwgc2l6ZW9mKHN0cnVjdCB0cmllX3ZhbHVlX2VudHJ5KSwgdHJpZV92YWx1ZXNfY21wKTsKKysgICAgICAgICAgICAgICAgdHJpZV9ub2RlX2FkZF92YWx1ZV90cmllID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgaWYgKHZhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlcGxhY2UgZXhpc3RpbmcgZWFybGllciBrZXkgd2l0aCBuZXcgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICB2YWwtPnZhbHVlX29mZiA9IHY7CitAQCAtMTcyLDcgKzE3NCw5IEBAIHN0YXRpYyBpbnQgdHJpZV9ub2RlX2FkZF92YWx1ZShzdHJ1Y3QgdHJpZSAqdHJpZSwgc3RydWN0IHRyaWVfbm9kZSAqbm9kZSwKKyAgICAgICAgIG5vZGUtPnZhbHVlc1tub2RlLT52YWx1ZXNfY291bnRdLmtleV9vZmYgPSBrOworICAgICAgICAgbm9kZS0+dmFsdWVzW25vZGUtPnZhbHVlc19jb3VudF0udmFsdWVfb2ZmID0gdjsKKyAgICAgICAgIG5vZGUtPnZhbHVlc19jb3VudCsrOworLSAgICAgICAgcXNvcnRfcihub2RlLT52YWx1ZXMsIG5vZGUtPnZhbHVlc19jb3VudCwgc2l6ZW9mKHN0cnVjdCB0cmllX3ZhbHVlX2VudHJ5KSwgdHJpZV92YWx1ZXNfY21wLCB0cmllKTsKKysgICAgICAgIHRyaWVfbm9kZV9hZGRfdmFsdWVfdHJpZSA9IHRyaWU7CisrICAgICAgICBxc29ydChub2RlLT52YWx1ZXMsIG5vZGUtPnZhbHVlc19jb3VudCwgc2l6ZW9mKHN0cnVjdCB0cmllX3ZhbHVlX2VudHJ5KSwgdHJpZV92YWx1ZXNfY21wKTsKKysgICAgICAgIHRyaWVfbm9kZV9hZGRfdmFsdWVfdHJpZSA9IE5VTEw7CisgICAgICAgICByZXR1cm4gMDsKKyB9CisgCistLSAKKzIuMTQuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTItZG9uLXQtcGFzcy1BVF9TWU1MSU5LX05PRk9MTE9XLWZsYWctdG8tZmFjY2Vzc2F0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDEyLWRvbi10LXBhc3MtQVRfU1lNTElOS19OT0ZPTExPVy1mbGFnLXRvLWZhY2Nlc3NhdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTZkYjY1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDEyLWRvbi10LXBhc3MtQVRfU1lNTElOS19OT0ZPTExPVy1mbGFnLXRvLWZhY2Nlc3NhdC5wYXRjaApAQCAtMCwwICsxLDk5IEBACitGcm9tIDk2MjE2MThjNzAxYTJkNWViM2UyNmY0MGM2ODM1NGQ0ZGZiOGY4NzIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgorRGF0ZTogVHVlLCAxMCBPY3QgMjAxNyAxNDozMzozMCAtMDcwMAorU3ViamVjdDogW1BBVENIIDEyLzEyXSBkb24ndCBwYXNzIEFUX1NZTUxJTktfTk9GT0xMT1cgZmxhZyB0byBmYWNjZXNzYXQoKQorCitBdm9pZCB1c2luZyBBVF9TWU1MSU5LX05PRk9MTE9XIGZsYWcuIEl0IGRvZXNuJ3Qgc2VlbSBsaWtlIHRoZSByaWdodAordGhpbmcgdG8gZG8gYW5kIGl0J3Mgbm90IHBvcnRhYmxlIChub3Qgc3VwcG9ydGVkIGJ5IG11c2wpLiBTZWU6CisKKyAgaHR0cDovL2xpc3RzLmxhbmRsZXkubmV0L3BpcGVybWFpbC90b3lib3gtbGFuZGxleS5uZXQvMjAxNC1TZXB0ZW1iZXIvMDAzNjEwLmh0bWwKKyAgaHR0cDovL3d3dy5vcGVud2FsbC5jb20vbGlzdHMvbXVzbC8yMDE1LzAyLzA1LzIKKworTm90ZSB0aGF0IGxhY2Nlc3MoKSBpcyBuZXZlciBwYXNzaW5nIEFUX0VBQ0NFU1Mgc28gYSBsb3Qgb2YgdGhlCitkaXNjdXNzaW9uIGluIHRoZSBsaW5rcyBhYm92ZSBkb2Vzbid0IGFwcGx5LiBOb3RlIGFsc28gdGhhdAorKGN1cnJlbnRseSkgYWxsIHN5c3RlbWQgY2FsbGVycyBvZiBsYWNjZXNzKCkgcGFzcyBtb2RlIGFzIEZfT0ssIHNvCitvbmx5IGNoZWNrIGZvciBleGlzdGVuY2Ugb2YgYSBmaWxlLCBub3QgYWNjZXNzIHBlcm1pc3Npb25zLgorVGhlcmVmb3JlLCBpbiB0aGlzIGNhc2UsIHRoZSBvbmx5IGRpc3RpY3Rpb24gYmV0d2VlbiBmYWNjZXNzYXQoKQord2l0aCAoZmxhZyA9PSAwKSBhbmQgKGZsYWcgPT0gQVRfU1lNTElOS19OT0ZPTExPVykgaXMgdGhlIGJlaGF2aW91cgorZm9yIGJyb2tlbiBzeW1saW5rczsgbGFjY2VzcygpIG9uIGEgYnJva2VuIHN5bWxpbmsgd2lsbCBzdWNjZWVkIHdpdGgKKyhmbGFnID09IEFUX1NZTUxJTktfTk9GT0xMT1cpIGFuZCBmYWlsIChmbGFnID09IDApLgorCitUaGUgbGFjY2VzcygpIG1hY3JvcyB3YXMgYWRkZWQgdG8gc3lzdGVtZCBzb21lIHRpbWUgYWdvIGFuZCBpdCdzIG5vdAorY2xlYXIgaWYgb3Igd2h5IGl0IG5lZWRzIHRvIHJldHVybiBzdWNjZXNzIGZvciBicm9rZW4gc3ltbGlua3MuIE1heWJlCitqdXN0IGhpc3RvcmljYWwgYW5kIG5vdCBhY3R1YWxseSBuZWNlc3Nhcnkgb3IgZGVzaXJlZCBiZWhhdmlvdXI/CisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlIE1jQ3VyZHkgPGFybWNjdXJkeUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgc3JjL2Jhc2ljL2ZzLXV0aWwuaCAgICAgICAgICB8IDIyICsrKysrKysrKysrKysrKysrKysrKy0KKyBzcmMvc2hhcmVkL2Jhc2UtZmlsZXN5c3RlbS5jIHwgIDYgKysrLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAyNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2Jhc2ljL2ZzLXV0aWwuaCBiL3NyYy9iYXNpYy9mcy11dGlsLmgKK2luZGV4IDA5NGFjZjE3OS4uY2RiYzBhZTcyIDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL2ZzLXV0aWwuaAorKysrIGIvc3JjL2Jhc2ljL2ZzLXV0aWwuaAorQEAgLTQ4LDcgKzQ4LDI3IEBAIGludCBmY2htb2RfdW1hc2soaW50IGZkLCBtb2RlX3QgbW9kZSk7CisgCisgaW50IGZkX3dhcm5fcGVybWlzc2lvbnMoY29uc3QgY2hhciAqcGF0aCwgaW50IGZkKTsKKyAKKy0jZGVmaW5lIGxhY2Nlc3MocGF0aCwgbW9kZSkgZmFjY2Vzc2F0KEFUX0ZEQ1dELCAocGF0aCksIChtb2RlKSwgQVRfU1lNTElOS19OT0ZPTExPVykKKysvKgorKyAgIEF2b2lkIHVzaW5nIEFUX1NZTUxJTktfTk9GT0xMT1cgZmxhZy4gSXQgZG9lc24ndCBzZWVtIGxpa2UgdGhlIHJpZ2h0IHRoaW5nIHRvCisrICAgZG8gYW5kIGl0J3Mgbm90IHBvcnRhYmxlIChub3Qgc3VwcG9ydGVkIGJ5IG11c2wpLiBTZWU6CisrCisrICAgICBodHRwOi8vbGlzdHMubGFuZGxleS5uZXQvcGlwZXJtYWlsL3RveWJveC1sYW5kbGV5Lm5ldC8yMDE0LVNlcHRlbWJlci8wMDM2MTAuaHRtbAorKyAgICAgaHR0cDovL3d3dy5vcGVud2FsbC5jb20vbGlzdHMvbXVzbC8yMDE1LzAyLzA1LzIKKysKKysgICBOb3RlIHRoYXQgbGFjY2VzcygpIGlzIG5ldmVyIHBhc3NpbmcgQVRfRUFDQ0VTUyBzbyBhIGxvdCBvZiB0aGUgZGlzY3Vzc2lvbiBpbgorKyAgIHRoZSBsaW5rcyBhYm92ZSBkb2Vzbid0IGFwcGx5LiBOb3RlIGFsc28gdGhhdCAoY3VycmVudGx5KSBhbGwgc3lzdGVtZCBjYWxsZXJzCisrICAgb2YgbGFjY2VzcygpIHBhc3MgbW9kZSBhcyBGX09LLCBzbyBvbmx5IGNoZWNrIGZvciBleGlzdGVuY2Ugb2YgYSBmaWxlLCBub3QKKysgICBhY2Nlc3MgcGVybWlzc2lvbnMuIFRoZXJlZm9yZSwgaW4gdGhpcyBjYXNlLCB0aGUgb25seSBkaXN0aWN0aW9uIGJldHdlZW4KKysgICBmYWNjZXNzYXQoKSB3aXRoIChmbGFnID09IDApIGFuZCAoZmxhZyA9PSBBVF9TWU1MSU5LX05PRk9MTE9XKSBpcyB0aGUKKysgICBiZWhhdmlvdXIgZm9yIGJyb2tlbiBzeW1saW5rczsgbGFjY2VzcygpIG9uIGEgYnJva2VuIHN5bWxpbmsgd2lsbCBzdWNjZWVkCisrICAgd2l0aCAoZmxhZyA9PSBBVF9TWU1MSU5LX05PRk9MTE9XKSBhbmQgZmFpbCAoZmxhZyA9PSAwKS4KKysKKysgICBUaGUgbGFjY2VzcygpIG1hY3JvcyB3YXMgYWRkZWQgdG8gc3lzdGVtZCBzb21lIHRpbWUgYWdvIGFuZCBpdCdzIG5vdCBjbGVhciBpZgorKyAgIG9yIHdoeSBpdCBuZWVkcyB0byByZXR1cm4gc3VjY2VzcyBmb3IgYnJva2VuIHN5bWxpbmtzLiBNYXliZSBqdXN0IGhpc3RvcmljYWwKKysgICBhbmQgbm90IGFjdHVhbGx5IG5lY2Vzc2FyeSBvciBkZXNpcmVkIGJlaGF2aW91cj8KKysqLworKworKyNkZWZpbmUgbGFjY2VzcyhwYXRoLCBtb2RlKSBmYWNjZXNzYXQoQVRfRkRDV0QsIChwYXRoKSwgKG1vZGUpLCAwKQorIAorIGludCB0b3VjaF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGJvb2wgcGFyZW50cywgdXNlY190IHN0YW1wLCB1aWRfdCB1aWQsIGdpZF90IGdpZCwgbW9kZV90IG1vZGUpOworIGludCB0b3VjaChjb25zdCBjaGFyICpwYXRoKTsKK2RpZmYgLS1naXQgYS9zcmMvc2hhcmVkL2Jhc2UtZmlsZXN5c3RlbS5jIGIvc3JjL3NoYXJlZC9iYXNlLWZpbGVzeXN0ZW0uYworaW5kZXggOTAzYTE4Nzg2Li4yZjYwNTJlZTcgMTAwNjQ0CistLS0gYS9zcmMvc2hhcmVkL2Jhc2UtZmlsZXN5c3RlbS5jCisrKysgYi9zcmMvc2hhcmVkL2Jhc2UtZmlsZXN5c3RlbS5jCitAQCAtNzAsNyArNzAsNyBAQCBpbnQgYmFzZV9maWxlc3lzdGVtX2NyZWF0ZShjb25zdCBjaGFyICpyb290LCB1aWRfdCB1aWQsIGdpZF90IGdpZCkgeworICAgICAgICAgICAgICAgICByZXR1cm4gbG9nX2Vycm9yX2Vycm5vKGVycm5vLCAiRmFpbGVkIHRvIG9wZW4gcm9vdCBmaWxlIHN5c3RlbTogJW0iKTsKKyAKKyAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBFTEVNRU5UU09GKHRhYmxlKTsgaSArKykgeworLSAgICAgICAgICAgICAgICBpZiAoZmFjY2Vzc2F0KGZkLCB0YWJsZVtpXS5kaXIsIEZfT0ssIEFUX1NZTUxJTktfTk9GT0xMT1cpID49IDApCisrICAgICAgICAgICAgICAgIGlmIChmYWNjZXNzYXQoZmQsIHRhYmxlW2ldLmRpciwgRl9PSywgMCkgPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAKKyAgICAgICAgICAgICAgICAgaWYgKHRhYmxlW2ldLnRhcmdldCkgeworQEAgLTc4LDcgKzc4LDcgQEAgaW50IGJhc2VfZmlsZXN5c3RlbV9jcmVhdGUoY29uc3QgY2hhciAqcm9vdCwgdWlkX3QgdWlkLCBnaWRfdCBnaWQpIHsKKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGVjayBpZiBvbmUgb2YgdGhlIHRhcmdldHMgZXhpc3RzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgTlVMU1RSX0ZPUkVBQ0gocywgdGFibGVbaV0udGFyZ2V0KSB7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmFjY2Vzc2F0KGZkLCBzLCBGX09LLCBBVF9TWU1MSU5LX05PRk9MTE9XKSA8IDApCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmFjY2Vzc2F0KGZkLCBzLCBGX09LLCAwKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hlY2sgaWYgYSBzcGVjaWZpYyBmaWxlIGV4aXN0cyBhdCB0aGUgdGFyZ2V0IHBhdGggKi8KK0BAIC04OSw3ICs4OSw3IEBAIGludCBiYXNlX2ZpbGVzeXN0ZW1fY3JlYXRlKGNvbnN0IGNoYXIgKnJvb3QsIHVpZF90IHVpZCwgZ2lkX3QgZ2lkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9nX29vbSgpOworIAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmFjY2Vzc2F0KGZkLCBwLCBGX09LLCBBVF9TWU1MSU5LX05PRk9MTE9XKSA8IDApCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYWNjZXNzYXQoZmQsIHAsIEZfT0ssIDApIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAKKy0tIAorMi4xNC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMi1ydWxlcy13aGl0ZWxpc3QtaGQtZGV2aWNlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMi1ydWxlcy13aGl0ZWxpc3QtaGQtZGV2aWNlcy5wYXRjaAppbmRleCA4NjY2YmRjLi5lYjM4MGNlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTItcnVsZXMtd2hpdGVsaXN0LWhkLWRldmljZXMucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDEyLXJ1bGVzLXdoaXRlbGlzdC1oZC1kZXZpY2VzLnBhdGNoCkBAIC0xLDcgKzEsNyBAQAotRnJvbSA4Y2MxYWUxMWY1NGRjYzM4ZWUyMTY4YjBmOTk3MDNiODM1ZGQzOTQyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSBhYjVhMjcwNDAxMzNmN2NkZjA2MmFjOGNmZWI5NGUwODFkMzU2N2IzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIERhdGU6IFdlZCwgOSBOb3YgMjAxNiAxOTo0MToxMyAtMDgwMAotU3ViamVjdDogW1BBVENIIDEyLzE5XSBydWxlczogd2hpdGVsaXN0IGhkKiBkZXZpY2VzCitTdWJqZWN0OiBbUEFUQ0ggMDcvMTRdIHJ1bGVzOiB3aGl0ZWxpc3QgaGQqIGRldmljZXMKIAogcWVtdSBieSBkZWZhdWx0IGVtdWxhdGVzIElERSBhbmQgdGhlIGxpbnV4LXlvY3RvIGtlcm5lbChzKSB1c2UKIENPTkZJR19JREUgaW5zdGVhZCBvZiB0aGUgbW9yZSBtb2Rlcm4gbGlic2F0YSwgc28gZGlza3MgYXBwZWFyIGFzCkBAIC0xMSwyMyArMTEsMjQgQEAKIAogU2lnbmVkLW9mZi1ieTogUGF0cmljayBPaGx5IDxwYXRyaWNrLm9obHlAaW50ZWwuY29tPgogU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKwogLS0tCiAgcnVsZXMvNjAtcGVyc2lzdGVudC1zdG9yYWdlLnJ1bGVzIHwgMiArLQogIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQogCiBkaWZmIC0tZ2l0IGEvcnVsZXMvNjAtcGVyc2lzdGVudC1zdG9yYWdlLnJ1bGVzIGIvcnVsZXMvNjAtcGVyc2lzdGVudC1zdG9yYWdlLnJ1bGVzCi1pbmRleCBjMTNkMDVjLi5iMTRmYmVkIDEwMDY0NAoraW5kZXggZDI3NDVmNjVmLi42M2Y0NzJiZTggMTAwNjQ0CiAtLS0gYS9ydWxlcy82MC1wZXJzaXN0ZW50LXN0b3JhZ2UucnVsZXMKICsrKyBiL3J1bGVzLzYwLXBlcnNpc3RlbnQtc3RvcmFnZS5ydWxlcwogQEAgLTcsNyArNyw3IEBAIEFDVElPTj09InJlbW92ZSIsIEdPVE89InBlcnNpc3RlbnRfc3RvcmFnZV9lbmQiCiAgRU5We1VERVZfRElTQUJMRV9QRVJTSVNURU5UX1NUT1JBR0VfUlVMRVNfRkxBR309PSIxIiwgR09UTz0icGVyc2lzdGVudF9zdG9yYWdlX2VuZCIKICAKICBTVUJTWVNURU0hPSJibG9jayIsIEdPVE89InBlcnNpc3RlbnRfc3RvcmFnZV9lbmQiCi0tS0VSTkVMIT0ibG9vcCp8bW1jYmxrKlswLTldfG1zYmxrKlswLTldfG1zcGJsaypbMC05XXxudm1lKnxzZCp8c3IqfHZkKnx4dmQqfGJjYWNoZSp8Y2Npc3MqfGRhc2QqfHViZCp8c2NtKnxwbWVtKiIsIEdPVE89InBlcnNpc3RlbnRfc3RvcmFnZV9lbmQiCi0rS0VSTkVMIT0ibG9vcCp8bW1jYmxrKlswLTldfG1zYmxrKlswLTldfG1zcGJsaypbMC05XXxudm1lKnxoZCp8c2QqfHNyKnx2ZCp8eHZkKnxiY2FjaGUqfGNjaXNzKnxkYXNkKnx1YmQqfHNjbSp8cG1lbSoiLCBHT1RPPSJwZXJzaXN0ZW50X3N0b3JhZ2VfZW5kIgorLUtFUk5FTCE9Imxvb3AqfG1tY2JsaypbMC05XXxtc2JsaypbMC05XXxtc3BibGsqWzAtOV18bnZtZSp8c2QqfHNyKnx2ZCp8eHZkKnxiY2FjaGUqfGNjaXNzKnxkYXNkKnx1YmQqfHNjbSp8cG1lbSp8bmJkKiIsIEdPVE89InBlcnNpc3RlbnRfc3RvcmFnZV9lbmQiCisrS0VSTkVMIT0ibG9vcCp8bW1jYmxrKlswLTldfG1zYmxrKlswLTldfG1zcGJsaypbMC05XXxudm1lKnxzZCp8c3IqfHZkKnx4dmQqfGJjYWNoZSp8Y2Npc3MqfGRhc2QqfHViZCp8c2NtKnxwbWVtKnxuYmQqfGhkKiIsIEdPVE89InBlcnNpc3RlbnRfc3RvcmFnZV9lbmQiCiAgCiAgIyBpZ25vcmUgcGFydGl0aW9ucyB0aGF0IHNwYW4gdGhlIGVudGlyZSBkaXNrCiAgVEVTVD09Indob2xlX2Rpc2siLCBHT1RPPSJwZXJzaXN0ZW50X3N0b3JhZ2VfZW5kIgogLS0gCi0yLjEwLjIKKzIuMTMuMgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTMtTWFrZS1yb290LXMtaG9tZS1kaXJlY3RvcnktY29uZmlndXJhYmxlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDEzLU1ha2Utcm9vdC1zLWhvbWUtZGlyZWN0b3J5LWNvbmZpZ3VyYWJsZS5wYXRjaAppbmRleCAyYjMzMzM3Li5hZWViYmZiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTMtTWFrZS1yb290LXMtaG9tZS1kaXJlY3RvcnktY29uZmlndXJhYmxlLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMy1NYWtlLXJvb3Qtcy1ob21lLWRpcmVjdG9yeS1jb25maWd1cmFibGUucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIDc5ZTY0YTA3ODQwZTBkOTdkNjZlNDYxMTFmMWMwODZiZjgzOTgxYjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDQ3OWUxZjRhYTJiOWYxYzkxMWE0ZDBkZDE4ZTIyMmQyNDFhOTc4ZWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogV2VkLCA5IE5vdiAyMDE2IDIwOjM1OjMwIC0wODAwCi1TdWJqZWN0OiBbUEFUQ0ggMTMvMTldIE1ha2Ugcm9vdCdzIGhvbWUgZGlyZWN0b3J5IGNvbmZpZ3VyYWJsZQorU3ViamVjdDogW1BBVENIIDQyLzQ4XSBNYWtlIHJvb3QncyBob21lIGRpcmVjdG9yeSBjb25maWd1cmFibGUKIAogT3BlbkVtYmVkZGVkIGhhcyBhIGNvbmZpZ3VyYWJsZSBob21lIGRpcmVjdG9yeSBmb3Igcm9vdC4gQWxsb3cKIHN5c3RlbWQgdG8gYmUgYnVpbHQgdXNpbmcgaXRzIGlkZWEgb2Ygd2hhdCByb290J3MgaG9tZSBkaXJlY3RvcnkKQEAgLTE0LDYgKzE0LDcgQEAKIAogU2lnbmVkLW9mZi1ieTogRGFuIE1jR3JlZ29yIDxkYW4ubWNncmVnb3JAdXNhc2suY2E+CiBTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCiAtLS0KICBNYWtlZmlsZS5hbSAgICAgICAgICAgICAgICB8IDIgKysKICBjb25maWd1cmUuYWMgICAgICAgICAgICAgICB8IDcgKysrKysrKwpAQCAtMjQsMTggKzI1LDE4IEBACiAgNiBmaWxlcyBjaGFuZ2VkLCAxNyBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQotaW5kZXggNDIwZTBlMC4uMzAxMGIwMSAxMDA2NDQKK2luZGV4IDFiY2Q5MzJjMi4uYzJiNGE5OWQyIDEwMDY0NAogLS0tIGEvTWFrZWZpbGUuYW0KICsrKyBiL01ha2VmaWxlLmFtCi1AQCAtMjEzLDYgKzIxMyw3IEBAIEFNX0NQUEZMQUdTID0gXAorQEAgLTIyNiw2ICsyMjYsNyBAQCBBTV9DUFBGTEFHUyA9IFwKICAJLURMSUJESVI9XCIkKGxpYmRpcilcIiBcCiAgCS1EUk9PVExJQkRJUj1cIiQocm9vdGxpYmRpcilcIiBcCiAgCS1EUk9PVExJQkVYRUNESVI9XCIkKHJvb3RsaWJleGVjZGlyKVwiIFwKICsJLURST09USE9NRURJUj1cIiQocm9vdGhvbWVkaXIpXCIgXAotIAktRFRFU1RfRElSPVwiJChhYnNfdG9wX3NyY2RpcikvdGVzdFwiIFwKICAJLUkgJCh0b3Bfc3JjZGlyKS9zcmMgXAogIAktSSAkKHRvcF9idWlsZGRpcikvc3JjL2Jhc2ljIFwKLUBAIC02MDU3LDYgKzYwNTgsNyBAQCBzdWJzdGl0dXRpb25zID0gXAorIAktSSAkKHRvcF9zcmNkaXIpL3NyYy9iYXNpYyBcCitAQCAtNjM1Niw2ICs2MzU3LDcgQEAgc3Vic3RpdHV0aW9ucyA9IFwKICAgICAgICAgJ3xyb290bGliZGlyPSQocm9vdGxpYmRpcil8JyBcCiAgICAgICAgICd8cm9vdGxpYmV4ZWNkaXI9JChyb290bGliZXhlY2Rpcil8JyBcCiAgICAgICAgICd8cm9vdGJpbmRpcj0kKHJvb3RiaW5kaXIpfCcgXApAQCAtNDQsMTAgKzQ1LDEwIEBACiAgICAgICAgICd8U1lTVEVNQ1RMPSQocm9vdGJpbmRpcikvc3lzdGVtY3RsfCcgXAogICAgICAgICAnfFNZU1RFTURfTk9USUZZPSQocm9vdGJpbmRpcikvc3lzdGVtZC1ub3RpZnl8JyBcCiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCBiMTBjOTUyLi5kZmMwYmQzIDEwMDY0NAoraW5kZXggMDM1NGZmZTZhLi5iNTNjYTFmMWEgMTAwNjQ0CiAtLS0gYS9jb25maWd1cmUuYWMKICsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTE1MTMsNiArMTUxMywxMSBAQCBBQ19BUkdfV0lUSChbcm9vdGxpYmRpcl0sCitAQCAtMTY0MSw2ICsxNjQxLDExIEBAIEFDX0FSR19XSVRIKFtyb290bGliZGlyXSwKICAgICAgICAgIFt3aXRoX3Jvb3RsaWJkaXI9JHtsaWJkaXJ9XSkKICBBWF9OT1JNQUxJWkVfUEFUSChbd2l0aF9yb290bGliZGlyXSkKICAKQEAgLTU3LDI5ICs1OCwyOSBAQAogKyAgICAgICAgW3dpdGhfcm9vdGhvbWVkaXI9L3Jvb3RdKQogKwogIEFDX0FSR19XSVRIKFtwYW1saWJkaXJdLAotICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1wYW1saWJkaXI9RElSXSwgW0RpcmVjdG9yeSBmb3IgUEFNIG1vZHVsZXNdKSwKKyAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtcGFtbGliZGlyPURJUl0sIFtkaXJlY3RvcnkgZm9yIFBBTSBtb2R1bGVzXSksCiAgICAgICAgICBbXSwKLUBAIC0xNTk4LDYgKzE2MDMsNyBAQCBBQ19TVUJTVChbcGFtbGliZGlyXSwgWyR3aXRoX3BhbWxpYmRpcl0pCi0gQUNfU1VCU1QoW3BhbWNvbmZkaXJdLCBbJHdpdGhfcGFtY29uZmRpcl0pCitAQCAtMTczMyw2ICsxNzM4LDcgQEAgQUNfU1VCU1QoW3BhbWNvbmZkaXJdLCBbJHdpdGhfcGFtY29uZmRpcl0pCisgQUNfU1VCU1QoW3JwbW1hY3Jvc2Rpcl0sIFskd2l0aF9ycG1tYWNyb3NkaXJdKQogIEFDX1NVQlNUKFtyb290cHJlZml4XSwgWyR3aXRoX3Jvb3RwcmVmaXhdKQogIEFDX1NVQlNUKFtyb290bGliZGlyXSwgWyR3aXRoX3Jvb3RsaWJkaXJdKQogK0FDX1NVQlNUKFtyb290aG9tZWRpcl0sIFskd2l0aF9yb290aG9tZWRpcl0pCiAgCiAgQUNfQ09ORklHX0ZJTEVTKFsKICAgICAgICAgIE1ha2VmaWxlCi1AQCAtMTY4OCw2ICsxNjk0LDcgQEAgQUNfTVNHX1JFU1VMVChbCitAQCAtMTgyOSw2ICsxODM1LDcgQEAgQUNfTVNHX1JFU1VMVChbCiAgICAgICAgICBpbmNsdWRlZGlyOiAgICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0KICAgICAgICAgIGxpYiBkaXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9CiAgICAgICAgICByb290bGliIGRpcjogICAgICAgICAgICAgICAgICAgICAgICR7d2l0aF9yb290bGliZGlyfQogKyAgICAgICAgcm9vdCBob21lIGRpcjogICAgICAgICAgICAgICAgICAgICAke3dpdGhfcm9vdGhvbWVkaXJ9CiAgICAgICAgICBTeXNWIGluaXQgc2NyaXB0czogICAgICAgICAgICAgICAgICR7U1lTVEVNX1NZU1ZJTklUX1BBVEh9CiAgICAgICAgICBTeXNWIHJjPy5kIGRpcmVjdG9yaWVzOiAgICAgICAgICAgICR7U1lTVEVNX1NZU1ZSQ05EX1BBVEh9Ci0gICAgICAgICBCdWlsZCBQeXRob246ICAgICAgICAgICAgICAgICAgICAgICR7UFlUSE9OfQorICAgICAgICAgYnVpbGQgUHl0aG9uOiAgICAgICAgICAgICAgICAgICAgICAke1BZVEhPTn0KIGRpZmYgLS1naXQgYS9zcmMvYmFzaWMvdXNlci11dGlsLmMgYi9zcmMvYmFzaWMvdXNlci11dGlsLmMKLWluZGV4IDkzODUzM2QuLjNmOWZkYzQgMTAwNjQ0CitpbmRleCBjNjE5ZGFkNTIuLjY2MjY4MmFkZiAxMDA2NDQKIC0tLSBhL3NyYy9iYXNpYy91c2VyLXV0aWwuYwogKysrIGIvc3JjL2Jhc2ljL3VzZXItdXRpbC5jCi1AQCAtMTI3LDcgKzEyNyw3IEBAIGludCBnZXRfdXNlcl9jcmVkcygKK0BAIC0xMjksNyArMTI5LDcgQEAgaW50IGdldF91c2VyX2NyZWRzKAogICAgICAgICAgICAgICAgICAgICAgICAgICpnaWQgPSAwOwogIAogICAgICAgICAgICAgICAgICBpZiAoaG9tZSkKQEAgLTg4LDcgKzg5LDcgQEAKICAKICAgICAgICAgICAgICAgICAgaWYgKHNoZWxsKQogICAgICAgICAgICAgICAgICAgICAgICAgICpzaGVsbCA9ICIvYmluL3NoIjsKLUBAIC0zODcsNyArMzg3LDcgQEAgaW50IGdldF9ob21lX2RpcihjaGFyICoqX2gpIHsKK0BAIC0zODksNyArMzg5LDcgQEAgaW50IGdldF9ob21lX2RpcihjaGFyICoqX2gpIHsKICAgICAgICAgIC8qIEhhcmRjb2RlIGhvbWUgZGlyZWN0b3J5IGZvciByb290IHRvIGF2b2lkIE5TUyAqLwogICAgICAgICAgdSA9IGdldHVpZCgpOwogICAgICAgICAgaWYgKHUgPT0gMCkgewpAQCAtOTgsMTAgKzk5LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CiAgCiBkaWZmIC0tZ2l0IGEvc3JjL25zcGF3bi9uc3Bhd24uYyBiL3NyYy9uc3Bhd24vbnNwYXduLmMKLWluZGV4IDE5YjQ3Y2QuLmU0MmJmMTkgMTAwNjQ0CitpbmRleCA4YTVmZWRkNGIuLjdiMDFlYzA3OCAxMDA2NDQKIC0tLSBhL3NyYy9uc3Bhd24vbnNwYXduLmMKICsrKyBiL3NyYy9uc3Bhd24vbnNwYXduLmMKLUBAIC0yNzk4LDcgKzI3OTgsNyBAQCBzdGF0aWMgaW50IGlubmVyX2NoaWxkKAorQEAgLTIyOTEsNyArMjI5MSw3IEBAIHN0YXRpYyBpbnQgaW5uZXJfY2hpbGQoCiAgICAgICAgICBpZiAoZW52cFtuX2Vudl0pCiAgICAgICAgICAgICAgICAgIG5fZW52Kys7CiAgCkBAIC0xMTAsOCArMTExLDggQEAKICAgICAgICAgICAgICAoYXNwcmludGYoKGNoYXIqKikoZW52cCArIG5fZW52KyspLCAiVVNFUj0lcyIsIGFyZ191c2VyID8gYXJnX3VzZXIgOiAicm9vdCIpIDwgMCkgfHwKICAgICAgICAgICAgICAoYXNwcmludGYoKGNoYXIqKikoZW52cCArIG5fZW52KyspLCAiTE9HTkFNRT0lcyIsIGFyZ191c2VyID8gYXJnX3VzZXIgOiAicm9vdCIpIDwgMCkpCiAgICAgICAgICAgICAgICAgIHJldHVybiBsb2dfb29tKCk7Ci1AQCAtMjg4Miw3ICsyODgyLDcgQEAgc3RhdGljIGludCBpbm5lcl9jaGlsZCgKLSAgICAgICAgIGVsc2UgeworQEAgLTIzNzMsNyArMjM3Myw3IEBAIHN0YXRpYyBpbnQgaW5uZXJfY2hpbGQoCisgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBpZiAoIWFyZ19jaGRpcikKICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBjYW5ub3QgY2hhbmdlIHRoZSBkaXJlY3RvcnksIHdlJ2xsIGVuZCB1cCBpbiAvLCB0aGF0IGlzIGV4cGVjdGVkLiAqLwogLSAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKSBjaGRpcihob21lID86ICIvcm9vdCIpOwpAQCAtMTIwLDcgKzEyMSw3IEBACiAgICAgICAgICAgICAgICAgIGV4ZWNsZSgiL2Jpbi9iYXNoIiwgIi1iYXNoIiwgTlVMTCwgZW52X3VzZSk7CiAgICAgICAgICAgICAgICAgIGV4ZWNsZSgiL2Jpbi9zaCIsICItc2giLCBOVUxMLCBlbnZfdXNlKTsKIGRpZmYgLS1naXQgYS91bml0cy9lbWVyZ2VuY3kuc2VydmljZS5pbiBiL3VuaXRzL2VtZXJnZW5jeS5zZXJ2aWNlLmluCi1pbmRleCBkYTY4ZWI4Li5lMjVmODc5IDEwMDY0NAoraW5kZXggZTllYjIzOGI5Li4zMjU4OGU0OGEgMTAwNjQ0CiAtLS0gYS91bml0cy9lbWVyZ2VuY3kuc2VydmljZS5pbgogKysrIGIvdW5pdHMvZW1lcmdlbmN5LnNlcnZpY2UuaW4KIEBAIC0xNSw4ICsxNSw4IEBAIENvbmZsaWN0cz1zeXNsb2cuc29ja2V0CkBAIC0xMzEsMTEgKzEzMiwxMSBAQAogLVdvcmtpbmdEaXJlY3Rvcnk9LS9yb290CiArRW52aXJvbm1lbnQ9SE9NRT1Acm9vdGhvbWVkaXJACiArV29ya2luZ0RpcmVjdG9yeT0tQHJvb3Rob21lZGlyQAotIEV4ZWNTdGFydFByZT0tL2Jpbi9wbHltb3V0aCAtLXdhaXQgcXVpdAotIEV4ZWNTdGFydFByZT0tL2Jpbi9lY2hvIC1lICdZb3UgYXJlIGluIGVtZXJnZW5jeSBtb2RlLiBBZnRlciBsb2dnaW5nIGluLCB0eXBlICJqb3VybmFsY3RsIC14YiIgdG8gdmlld1xcbnN5c3RlbSBsb2dzLCAic3lzdGVtY3RsIHJlYm9vdCIgdG8gcmVib290LCAic3lzdGVtY3RsIGRlZmF1bHQiIG9yIF5EIHRvXFxudHJ5IGFnYWluIHRvIGJvb3QgaW50byBkZWZhdWx0IG1vZGUuJwotIEV4ZWNTdGFydD0tL2Jpbi9zaCAtYyAiQFNVTE9HSU5AOyBAU1lTVEVNQ1RMQCAtLWpvYi1tb2RlPWZhaWwgLS1uby1ibG9jayBkZWZhdWx0IgorIEV4ZWNTdGFydD0tQHJvb3RsaWJleGVjZGlyQC9zeXN0ZW1kLXN1bG9naW4tc2hlbGwgZW1lcmdlbmN5CisgVHlwZT1pZGxlCisgU3RhbmRhcmRJbnB1dD10dHktZm9yY2UKIGRpZmYgLS1naXQgYS91bml0cy9yZXNjdWUuc2VydmljZS5pbiBiL3VuaXRzL3Jlc2N1ZS5zZXJ2aWNlLmluCi1pbmRleCA1ZmVmZjY5Li5hODM0MzllIDEwMDY0NAoraW5kZXggNGFiNjZmNDg1Li5iZDk4OThmMmMgMTAwNjQ0CiAtLS0gYS91bml0cy9yZXNjdWUuc2VydmljZS5pbgogKysrIGIvdW5pdHMvcmVzY3VlLnNlcnZpY2UuaW4KIEBAIC0xNCw4ICsxNCw4IEBAIEFmdGVyPXN5c2luaXQudGFyZ2V0IHBseW1vdXRoLXN0YXJ0LnNlcnZpY2UKQEAgLTE0Niw5ICsxNDcsOSBAQAogLVdvcmtpbmdEaXJlY3Rvcnk9LS9yb290CiArRW52aXJvbm1lbnQ9SE9NRT1Acm9vdGhvbWVkaXJACiArV29ya2luZ0RpcmVjdG9yeT0tQHJvb3Rob21lZGlyQAotIEV4ZWNTdGFydFByZT0tL2Jpbi9wbHltb3V0aCAtLXdhaXQgcXVpdAotIEV4ZWNTdGFydFByZT0tL2Jpbi9lY2hvIC1lICdZb3UgYXJlIGluIHJlc2N1ZSBtb2RlLiBBZnRlciBsb2dnaW5nIGluLCB0eXBlICJqb3VybmFsY3RsIC14YiIgdG8gdmlld1xcbnN5c3RlbSBsb2dzLCAic3lzdGVtY3RsIHJlYm9vdCIgdG8gcmVib290LCAic3lzdGVtY3RsIGRlZmF1bHQiIG9yIF5EIHRvXFxuYm9vdCBpbnRvIGRlZmF1bHQgbW9kZS4nCi0gRXhlY1N0YXJ0PS0vYmluL3NoIC1jICJAU1VMT0dJTkA7IEBTWVNURU1DVExAIC0tam9iLW1vZGU9ZmFpbCAtLW5vLWJsb2NrIGRlZmF1bHQiCisgRXhlY1N0YXJ0PS1Acm9vdGxpYmV4ZWNkaXJAL3N5c3RlbWQtc3Vsb2dpbi1zaGVsbCByZXNjdWUKKyBUeXBlPWlkbGUKKyBTdGFuZGFyZElucHV0PXR0eS1mb3JjZQogLS0gCi0yLjEwLjIKKzIuMTMuMgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTMtY29tcGFyaXNvbl9mbl90LWlzLWdsaWJjLXNwZWNpZmljLXVzZS1yYXctc2lnbmF0dXJlLS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMy1jb21wYXJpc29uX2ZuX3QtaXMtZ2xpYmMtc3BlY2lmaWMtdXNlLXJhdy1zaWduYXR1cmUtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMTk5ODEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTMtY29tcGFyaXNvbl9mbl90LWlzLWdsaWJjLXNwZWNpZmljLXVzZS1yYXctc2lnbmF0dXJlLS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDRiNjczMzU0NGJlYjY2MmEwZjc3MzEwMzAyZmFlMWZiN2I3NmQxNjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAxMiBTZXAgMjAxNSAxODo1MzozMSArMDAwMAorU3ViamVjdDogW1BBVENIIDEzLzEzXSBjb21wYXJpc29uX2ZuX3QgaXMgZ2xpYmMgc3BlY2lmaWMsIHVzZSByYXcgc2lnbmF0dXJlIGluCisgZnVuY3Rpb24gcG9pbnRlcgorCittYWtlIGl0IHdvcmsgd2l0aCBtdXNsIHdoZXJlIGNvbXBhcmlzb25fZm5fdCBpcyBub3QgcHJvdmlkZWQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBzcmMvYmFzaWMvdXRpbC5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2Jhc2ljL3V0aWwuaCBiL3NyYy9iYXNpYy91dGlsLmgKK2luZGV4IGM3ZGE2YzM5Yi4uODdmNjJiODkxIDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL3V0aWwuaAorKysrIGIvc3JjL2Jhc2ljL3V0aWwuaAorQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCAqeGJzZWFyY2hfcihjb25zdCB2b2lkICprZXksIGNvbnN0IHZvaWQgKmJhc2UsIHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUsCisgICogTm9ybWFsIHFzb3J0IHJlcXVpcmVzIGJhc2UgdG8gYmUgbm9ubnVsbC4gSGVyZSB3ZXJlIHJlcXVpcmUKKyAgKiB0aGF0IG9ubHkgaWYgbm1lbWIgPiAwLgorICAqLworLXN0YXRpYyBpbmxpbmUgdm9pZCBxc29ydF9zYWZlKHZvaWQgKmJhc2UsIHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUsIGNvbXBhcmlzb25fZm5fdCBjb21wYXIpIHsKKytzdGF0aWMgaW5saW5lIHZvaWQgcXNvcnRfc2FmZSh2b2lkICpiYXNlLCBzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplLCBpbnQgKCpjb21wYXIpKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSkgeworICAgICAgICAgaWYgKG5tZW1iIDw9IDEpCisgICAgICAgICAgICAgICAgIHJldHVybjsKKyAKKy0tIAorMi4xNC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxNS1SZXZlcnQtdWRldi1yZW1vdmUtdXNlcnNwYWNlLWZpcm13YXJlLWxvYWRpbmctc3VwcG9yLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDE1LVJldmVydC11ZGV2LXJlbW92ZS11c2Vyc3BhY2UtZmlybXdhcmUtbG9hZGluZy1zdXBwb3IucGF0Y2gKaW5kZXggZjMxZDIxMS4uOTU4NzFiYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDE1LVJldmVydC11ZGV2LXJlbW92ZS11c2Vyc3BhY2UtZmlybXdhcmUtbG9hZGluZy1zdXBwb3IucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDE1LVJldmVydC11ZGV2LXJlbW92ZS11c2Vyc3BhY2UtZmlybXdhcmUtbG9hZGluZy1zdXBwb3IucGF0Y2gKQEAgLTEsNyArMSw3IEBACi1Gcm9tIDRkMjhkOWE3ZDhkNjlmYjQyOTk1NWQ3NzBlNTNlN2E4MTY0MGRhMjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDc4ODM5ODVhM2E3ODY3N2U5YTFkNWQ2MWZlN2ZhOGJhZGYzOWY1NjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogV2VkLCA5IE5vdiAyMDE2IDIwOjQ1OjIzIC0wODAwCi1TdWJqZWN0OiBbUEFUQ0ggMTUvMTldIFJldmVydCAidWRldjogcmVtb3ZlIHVzZXJzcGFjZSBmaXJtd2FyZSBsb2FkaW5nCitTdWJqZWN0OiBbUEFUQ0ggMTAvMTRdIFJldmVydCAidWRldjogcmVtb3ZlIHVzZXJzcGFjZSBmaXJtd2FyZSBsb2FkaW5nCiAgc3VwcG9ydCIKIAogVGhpcyByZXZlcnRzIGNvbW1pdCBiZTJlYTcyM2IxZDAyM2IzZDM4NWQzYjc5MWVlNDYwN2NiZmIyMGNhLgpAQCAtMTEsMjMgKzExLDI0IEBACiAKIFNpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKIC0tLQogIE1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwgIDEyICsrKwotIFJFQURNRSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA2ICstCisgUkVBRE1FICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KICBUT0RPICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiAgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgfCAgMTggKysrKysKICBzcmMvdWRldi91ZGV2LWJ1aWx0aW4tZmlybXdhcmUuYyB8IDE1NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKICBzcmMvdWRldi91ZGV2LWJ1aWx0aW4uYyAgICAgICAgICB8ICAgMyArCiAgc3JjL3VkZXYvdWRldi5oICAgICAgICAgICAgICAgICAgfCAgIDYgKysKICBzcmMvdWRldi91ZGV2ZC5jICAgICAgICAgICAgICAgICB8ICAxMyArKysrCi0gOCBmaWxlcyBjaGFuZ2VkLCAyMTAgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyA4IGZpbGVzIGNoYW5nZWQsIDIwOSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdWRldi91ZGV2LWJ1aWx0aW4tZmlybXdhcmUuYwogCiBkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQotaW5kZXggMzAxMGIwMS4uMjI5NDkyYSAxMDA2NDQKK2luZGV4IGMyYjRhOTlkMi4uNjkyZDdiYjk1IDEwMDY0NAogLS0tIGEvTWFrZWZpbGUuYW0KICsrKyBiL01ha2VmaWxlLmFtCi1AQCAtMzc5MSw2ICszNzkxLDE4IEBAIGxpYnVkZXZfY29yZV9sYV9MSUJBREQgPSBcCitAQCAtMzk4NSw2ICszOTg1LDE4IEBAIGxpYnVkZXZfY29yZV9sYV9MSUJBREQgPSBcCiAgCSQoQkxLSURfTElCUykgXAogIAkkKEtNT0RfTElCUykKICAKQEAgLTQ3LDE3ICs0OCwxMCBAQAogIGxpYnVkZXZfY29yZV9sYV9TT1VSQ0VTICs9IFwKICAJc3JjL3VkZXYvdWRldi1idWlsdGluLWttb2QuYwogZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQotaW5kZXggOWY1YmM5My4uZjYwYWUxMSAxMDA2NDQKK2luZGV4IDYwMzg4ZWViZS4uZTIxOTc2MzkzIDEwMDY0NAogLS0tIGEvUkVBRE1FCiArKysgYi9SRUFETUUKLUBAIC01MCwxNCArNTAsMTQgQEAgUkVRVUlSRU1FTlRTOgotICAgICAgICAgICBDT05GSUdfUFJPQ19GUwotICAgICAgICAgICBDT05GSUdfRkhBTkRMRSAobGlidWRldiwgbW91bnQgYW5kIGJpbmQgbW91bnQgaGFuZGxpbmcpCi0gCi0tICAgICAgICB1ZGV2IHdpbGwgZmFpbCB0byB3b3JrIHdpdGggdGhlIGxlZ2FjeSBzeXNmcyBsYXlvdXQ6Ci0rICAgICAgICBVZGV2IHdpbGwgZmFpbCB0byB3b3JrIHdpdGggdGhlIGxlZ2FjeSBzeXNmcyBsYXlvdXQ6Ci0gICAgICAgICAgIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPW4KLSAKK0BAIC02MSw4ICs2MSw4IEBAIFJFUVVJUkVNRU5UUzoKICAgICAgICAgIExlZ2FjeSBob3RwbHVnIHNsb3dzIGRvd24gdGhlIHN5c3RlbSBhbmQgY29uZnVzZXMgdWRldjoKICAgICAgICAgICAgQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iIgogIApAQCAtNjksMTAgKzYzLDEwIEBACiAgCiAgICAgICAgICBTb21lIHVkZXYgcnVsZXMgYW5kIHZpcnR1YWxpemF0aW9uIGRldGVjdGlvbiByZWxpZXMgb24gaXQ6CiBkaWZmIC0tZ2l0IGEvVE9ETyBiL1RPRE8KLWluZGV4IGJhYWFjOTQuLjFhYjE2OTEgMTAwNjQ0CitpbmRleCA2MWVmYTVlOWYuLjY3Y2NhYzIyNCAxMDA2NDQKIC0tLSBhL1RPRE8KICsrKyBiL1RPRE8KLUBAIC02NTgsNiArNjU4LDcgQEAgRmVhdHVyZXM6CitAQCAtNzQwLDYgKzc0MCw3IEBAIEZlYXR1cmVzOgogICogaW5pdGlhbGl6ZSB0aGUgaG9zdG5hbWUgZnJvbSB0aGUgZnMgbGFiZWwgb2YgLywgaWYgL2V0Yy9ob3N0bmFtZSBkb2VzIG5vdCBleGlzdD8KICAKICAqIHVkZXY6CkBAIC04MSwxMSArNzUsMTEgQEAKICAgIC0ga2lsbCBzY3NpX2lkCiAgICAtIGFkZCB0cmlnZ2VyIC0tc3Vic3lzdGVtLW1hdGNoPXVzYi91c2JfZGV2aWNlIGRldmljZQogZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggZGZjMGJkMy4uMWRlMDA2NiAxMDA2NDQKK2luZGV4IGI1M2NhMWYxYS4uMTE1MGNhNTBlIDEwMDY0NAogLS0tIGEvY29uZmlndXJlLmFjCiArKysgYi9jb25maWd1cmUuYWMKLUBAIC0xMzk0LDYgKzEzOTQsMjMgQEAgQU1fQ09ORElUSU9OQUwoSEFWRV9NWUhPU1ROQU1FLCBbdGVzdCAiJGhhdmVfbXlob3N0bmFtZSIgPSAieWVzIl0pCi0gQUNfQVJHX0VOQUJMRShod2RiLCBbQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1od2RiXSwgW2Rpc2FibGUgaGFyZHdhcmUgZGF0YWJhc2Ugc3VwcG9ydF0pXSwKK0BAIC0xNTIyLDYgKzE1MjIsMjMgQEAgQU1fQ09ORElUSU9OQUwoSEFWRV9NWUhPU1ROQU1FLCBbdGVzdCAiJGhhdmVfbXlob3N0bmFtZSIgPSAieWVzIl0pCisgQUNfQVJHX0VOQUJMRShod2RiLCBbQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1od2RiXSwgW2Rpc2FibGUgaGFyZHdhcmUgZGF0YWJhc2Ugc3VwcG9ydF0pXSwKICAgICAgICAgZW5hYmxlX2h3ZGI9JGVuYWJsZXZhbCwgZW5hYmxlX2h3ZGI9eWVzKQogIEFNX0NPTkRJVElPTkFMKEVOQUJMRV9IV0RCLCBbdGVzdCB4JGVuYWJsZV9od2RiID0geHllc10pCiArQUNfQVJHX1dJVEgoZmlybXdhcmUtcGF0aCwKQEAgLTEwOCwxNyArMTAyLDE3IEBACiAgCiAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBoYXZlX21hbnBhZ2VzPW5vCi1AQCAtMTY5OCw2ICsxNzE1LDcgQEAgQUNfTVNHX1JFU1VMVChbCitAQCAtMTgzOSw2ICsxODU2LDcgQEAgQUNfTVNHX1JFU1VMVChbCiAgICAgICAgICBTeXNWIGluaXQgc2NyaXB0czogICAgICAgICAgICAgICAgICR7U1lTVEVNX1NZU1ZJTklUX1BBVEh9CiAgICAgICAgICBTeXNWIHJjPy5kIGRpcmVjdG9yaWVzOiAgICAgICAgICAgICR7U1lTVEVNX1NZU1ZSQ05EX1BBVEh9Ci0gICAgICAgICBCdWlsZCBQeXRob246ICAgICAgICAgICAgICAgICAgICAgICR7UFlUSE9OfQorICAgICAgICAgYnVpbGQgUHl0aG9uOiAgICAgICAgICAgICAgICAgICAgICAke1BZVEhPTn0KICsgICAgICAgIGZpcm13YXJlIHBhdGg6ICAgICAgICAgICAgICAgICAgICAgJHtGSVJNV0FSRV9QQVRIfQogICAgICAgICAgUEFNIG1vZHVsZXMgZGlyOiAgICAgICAgICAgICAgICAgICAke3dpdGhfcGFtbGliZGlyfQogICAgICAgICAgUEFNIGNvbmZpZ3VyYXRpb24gZGlyOiAgICAgICAgICAgICAke3dpdGhfcGFtY29uZmRpcn0KLSAgICAgICAgIEQtQnVzIHBvbGljeSBkaXI6ICAgICAgICAgICAgICAgICAgJHt3aXRoX2RidXNwb2xpY3lkaXJ9CisgICAgICAgICBSUE0gbWFjcm9zIGRpcjogICAgICAgICAgICAgICAgICAgICR7d2l0aF9ycG1tYWNyb3NkaXJ9CiBkaWZmIC0tZ2l0IGEvc3JjL3VkZXYvdWRldi1idWlsdGluLWZpcm13YXJlLmMgYi9zcmMvdWRldi91ZGV2LWJ1aWx0aW4tZmlybXdhcmUuYwogbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLmJkOGMyZmIKK2luZGV4IDAwMDAwMDAwMC4uYmQ4YzJmYjk2CiAtLS0gL2Rldi9udWxsCiArKysgYi9zcmMvdWRldi91ZGV2LWJ1aWx0aW4tZmlybXdhcmUuYwogQEAgLTAsMCArMSwxNTQgQEAKQEAgLTI3Nyw3ICsyNzEsNyBAQAogKyAgICAgICAgLnJ1bl9vbmNlID0gdHJ1ZSwKICt9OwogZGlmZiAtLWdpdCBhL3NyYy91ZGV2L3VkZXYtYnVpbHRpbi5jIGIvc3JjL3VkZXYvdWRldi1idWlsdGluLmMKLWluZGV4IGU2YjM2ZjEuLmNkOTk0N2UgMTAwNjQ0CitpbmRleCBlNmIzNmYxMjQuLmNkOTk0N2UyYSAxMDA2NDQKIC0tLSBhL3NyYy91ZGV2L3VkZXYtYnVpbHRpbi5jCiArKysgYi9zcmMvdWRldi91ZGV2LWJ1aWx0aW4uYwogQEAgLTMxLDYgKzMxLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB1ZGV2X2J1aWx0aW4gKmJ1aWx0aW5zW10gPSB7CkBAIC0yOTEsMTAgKzI4NSwxMCBAQAogICAgICAgICAgW1VERVZfQlVJTFRJTl9JTlBVVF9JRF0gPSAmdWRldl9idWlsdGluX2lucHV0X2lkLAogICAgICAgICAgW1VERVZfQlVJTFRJTl9LRVlCT0FSRF0gPSAmdWRldl9idWlsdGluX2tleWJvYXJkLAogZGlmZiAtLWdpdCBhL3NyYy91ZGV2L3VkZXYuaCBiL3NyYy91ZGV2L3VkZXYuaAotaW5kZXggODQzM2U4ZC4uZDMyMzY2ZCAxMDA2NDQKK2luZGV4IGMwY2I3ZWFlOC4uOWYwZjFjZjEzIDEwMDY0NAogLS0tIGEvc3JjL3VkZXYvdWRldi5oCiArKysgYi9zcmMvdWRldi91ZGV2LmgKLUBAIC0xNDgsNiArMTQ4LDkgQEAgZW51bSB1ZGV2X2J1aWx0aW5fY21kIHsKK0BAIC0xNTAsNiArMTUwLDkgQEAgZW51bSB1ZGV2X2J1aWx0aW5fY21kIHsKICAgICAgICAgIFVERVZfQlVJTFRJTl9CTEtJRCwKICAjZW5kaWYKICAgICAgICAgIFVERVZfQlVJTFRJTl9CVFJGUywKQEAgLTMwNCw3ICsyOTgsNyBAQAogICAgICAgICAgVURFVl9CVUlMVElOX0hXREIsCiAgICAgICAgICBVREVWX0JVSUxUSU5fSU5QVVRfSUQsCiAgICAgICAgICBVREVWX0JVSUxUSU5fS0VZQk9BUkQsCi1AQCAtMTc2LDYgKzE3OSw5IEBAIHN0cnVjdCB1ZGV2X2J1aWx0aW4geworQEAgLTE3OCw2ICsxODEsOSBAQCBzdHJ1Y3QgdWRldl9idWlsdGluIHsKICBleHRlcm4gY29uc3Qgc3RydWN0IHVkZXZfYnVpbHRpbiB1ZGV2X2J1aWx0aW5fYmxraWQ7CiAgI2VuZGlmCiAgZXh0ZXJuIGNvbnN0IHN0cnVjdCB1ZGV2X2J1aWx0aW4gdWRldl9idWlsdGluX2J0cmZzOwpAQCAtMzE1LDcgKzMwOSw3IEBACiAgZXh0ZXJuIGNvbnN0IHN0cnVjdCB1ZGV2X2J1aWx0aW4gdWRldl9idWlsdGluX2lucHV0X2lkOwogIGV4dGVybiBjb25zdCBzdHJ1Y3QgdWRldl9idWlsdGluIHVkZXZfYnVpbHRpbl9rZXlib2FyZDsKIGRpZmYgLS1naXQgYS9zcmMvdWRldi91ZGV2ZC5jIGIvc3JjL3VkZXYvdWRldmQuYwotaW5kZXggZDMzNmVlMC4uODFlNWRjNSAxMDA2NDQKK2luZGV4IGFjYmRkZDQxOC4uMjAzNDdiNDAyIDEwMDY0NAogLS0tIGEvc3JjL3VkZXYvdWRldmQuYwogKysrIGIvc3JjL3VkZXYvdWRldmQuYwogQEAgLTEyNSw2ICsxMjUsOSBAQCBzdHJ1Y3QgZXZlbnQgewpAQCAtMzUzLDUgKzM0Nyw1IEBACiAgICAgICAgICAgICAgICAgIGlmIChldmVudC0+ZGV2cGF0aFtjb21tb25dID09ICcvJykgewogICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LT5kZWxheWluZ19zZXFudW0gPSBsb29wX2V2ZW50LT5zZXFudW07CiAtLSAKLTIuMTAuMgorMi4xMy4yCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxNi1tYWtlLXRlc3QtZGlyLWNvbmZpZ3VyYWJsZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxNi1tYWtlLXRlc3QtZGlyLWNvbmZpZ3VyYWJsZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBkMWRmNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTYtbWFrZS10ZXN0LWRpci1jb25maWd1cmFibGUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi1Gcm9tIDIxOGJiYzU1NWEzN2Y5MzczZmJiN2YwM2M3NDRlYjY1MTA5ZDM0NzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogV2VkLCA5IE5vdiAyMDE2IDIwOjQ3OjM3IC0wODAwCi1TdWJqZWN0OiBbUEFUQ0ggMTYvMTldIG1ha2UgdGVzdCBkaXIgY29uZmlndXJhYmxlCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi10ZXN0IG1heWJlIGJlIHJ1biBvbiB0YXJnZXQgaW4gY3Jvc3MtY29tcGlsZSBlbnZpcm9ubWVudCwgYW5kIHRlc3QgZGlyCi1pcyBub3QgdGhlIGNvbXBpbGF0aW9uIGRpciwgc28gbWFrZSBpdCBjb25maWd1cmFibGUKLQotU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotIE1ha2VmaWxlLmFtICB8IDIgKy0KLSBjb25maWd1cmUuYWMgfCA3ICsrKysrKysKLSAyIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQotaW5kZXggMjI5NDkyYS4uZTk5N2Q4MiAxMDA2NDQKLS0tLSBhL01ha2VmaWxlLmFtCi0rKysgYi9NYWtlZmlsZS5hbQotQEAgLTIxNCw3ICsyMTQsNyBAQCBBTV9DUFBGTEFHUyA9IFwKLSAJLURST09UTElCRElSPVwiJChyb290bGliZGlyKVwiIFwKLSAJLURST09UTElCRVhFQ0RJUj1cIiQocm9vdGxpYmV4ZWNkaXIpXCIgXAotIAktRFJPT1RIT01FRElSPVwiJChyb290aG9tZWRpcilcIiBcCi0tCS1EVEVTVF9ESVI9XCIkKGFic190b3Bfc3JjZGlyKS90ZXN0XCIgXAotKwktRFRFU1RfRElSPVwiJCh0ZXN0ZGlyKS90ZXN0XCIgXAotIAktSSAkKHRvcF9zcmNkaXIpL3NyYyBcCi0gCS1JICQodG9wX2J1aWxkZGlyKS9zcmMvYmFzaWMgXAotIAktSSAkKHRvcF9zcmNkaXIpL3NyYy9iYXNpYyBcCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCAxZGUwMDY2Li5iMTJlMzIwIDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC0xNTM1LDYgKzE1MzUsMTEgQEAgQUNfQVJHX1dJVEgoW3Jvb3Rob21lZGlyXSwKLSAgICAgICAgIFtdLAotICAgICAgICAgW3dpdGhfcm9vdGhvbWVkaXI9L3Jvb3RdKQotIAotK0FDX0FSR19XSVRIKFt0ZXN0ZGlyXSwKLSsgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtdGVzdGRpcj1ESVJdLCBbdGVzdCBmaWxlIGRpcmVjdG9yeV0pLAotKyAgICAgICAgW10sCi0rICAgICAgICBbd2l0aF90ZXN0ZGlyPSR7YWJzX3RvcF9zcmNkaXJ9XSkKLSsKLSBBQ19BUkdfV0lUSChbcGFtbGliZGlyXSwKLSAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtcGFtbGliZGlyPURJUl0sIFtEaXJlY3RvcnkgZm9yIFBBTSBtb2R1bGVzXSksCi0gICAgICAgICBbXSwKLUBAIC0xNjIxLDYgKzE2MjYsNyBAQCBBQ19TVUJTVChbcGFtY29uZmRpcl0sIFskd2l0aF9wYW1jb25mZGlyXSkKLSBBQ19TVUJTVChbcm9vdHByZWZpeF0sIFskd2l0aF9yb290cHJlZml4XSkKLSBBQ19TVUJTVChbcm9vdGxpYmRpcl0sIFskd2l0aF9yb290bGliZGlyXSkKLSBBQ19TVUJTVChbcm9vdGhvbWVkaXJdLCBbJHdpdGhfcm9vdGhvbWVkaXJdKQotK0FDX1NVQlNUKFt0ZXN0ZGlyXSwgWyR3aXRoX3Rlc3RkaXJdKQotIAotIEFDX0NPTkZJR19GSUxFUyhbCi0gICAgICAgICBNYWtlZmlsZQotQEAgLTE3MTIsNiArMTcxOCw3IEBAIEFDX01TR19SRVNVTFQoWwotICAgICAgICAgbGliIGRpcjogICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0KLSAgICAgICAgIHJvb3RsaWIgZGlyOiAgICAgICAgICAgICAgICAgICAgICAgJHt3aXRoX3Jvb3RsaWJkaXJ9Ci0gICAgICAgICByb290IGhvbWUgZGlyOiAgICAgICAgICAgICAgICAgICAgICR7d2l0aF9yb290aG9tZWRpcn0KLSsgICAgICAgIHRlc3QgZGlyOiAgICAgICAgICAgICAgICAgICAgICAgICAgJHt3aXRoX3Rlc3RkaXJ9Ci0gICAgICAgICBTeXNWIGluaXQgc2NyaXB0czogICAgICAgICAgICAgICAgICR7U1lTVEVNX1NZU1ZJTklUX1BBVEh9Ci0gICAgICAgICBTeXNWIHJjPy5kIGRpcmVjdG9yaWVzOiAgICAgICAgICAgICR7U1lTVEVNX1NZU1ZSQ05EX1BBVEh9Ci0gICAgICAgICBCdWlsZCBQeXRob246ICAgICAgICAgICAgICAgICAgICAgICR7UFlUSE9OfQotLS0gCi0yLjEwLjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDE3LXJlbW92ZS1kdXBsaWNhdGUtaW5jbHVkZS11Y2hhci5oLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDE3LXJlbW92ZS1kdXBsaWNhdGUtaW5jbHVkZS11Y2hhci5oLnBhdGNoCmluZGV4IDc3ZGJkNmUuLmQyMDA2MzUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxNy1yZW1vdmUtZHVwbGljYXRlLWluY2x1ZGUtdWNoYXIuaC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTctcmVtb3ZlLWR1cGxpY2F0ZS1pbmNsdWRlLXVjaGFyLmgucGF0Y2gKQEAgLTYsNiArNiw3IEBACiBtaXNzaW5nLmggYWxyZWFkeSBpbmNsdWRlcyBpdAogCiBTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICBzcmMvYmFzaWMvZXNjYXBlLmggfCAxIC0KICBzcmMvYmFzaWMvdXRmOC5oICAgfCAxIC0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxOC1jaGVjay1mb3ItdWNoYXIuaC1pbi1jb25maWd1cmUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTgtY2hlY2stZm9yLXVjaGFyLmgtaW4tY29uZmlndXJlLnBhdGNoCmluZGV4IDU4MjQwMzMuLjA2N2I3M2YgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxOC1jaGVjay1mb3ItdWNoYXIuaC1pbi1jb25maWd1cmUucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDE4LWNoZWNrLWZvci11Y2hhci5oLWluLWNvbmZpZ3VyZS5wYXRjaApAQCAtMSwyMSArMSwyMyBAQAotRnJvbSA3Y2MwYjE5ZDI0NDAyM2M3YjNlNTU3NzY1YjAzYjc5NzFlMDQ3ZjI5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSAxMzU1NDU3MDkyYjAyYTE1YzY0NmZjMWM3MmU2OGI2OTRhODZkZDk5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIERhdGU6IE1vbiwgMjIgRmViIDIwMTYgMDY6MDI6MzggKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAxOC8xOV0gY2hlY2sgZm9yIHVjaGFyLmggaW4gY29uZmlndXJlCitTdWJqZWN0OiBbUEFUQ0ggMTIvMTRdIGNoZWNrIGZvciB1Y2hhci5oIGluIGNvbmZpZ3VyZQogCiBVc2UgaWZkZWYgdG8gaW5jbHVkZSB1Y2hhci5oCiAKIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKwogLS0tCiAgY29uZmlndXJlLmFjICAgICAgICB8IDEgKwogIHNyYy9iYXNpYy9taXNzaW5nLmggfCAyICsrCiAgMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKIAogZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggYjEyZTMyMC4uNGU2ZGZkZiAxMDA2NDQKK2luZGV4IDExNTBjYTUwZS4uNjBlN2RmNWVlIDEwMDY0NAogLS0tIGEvY29uZmlndXJlLmFjCiArKysgYi9jb25maWd1cmUuYWMKLUBAIC0yOTgsNiArMjk4LDcgQEAgQU1fQ09ORElUSU9OQUwoW0hBVkVfUFlUSE9OXSwgW3Rlc3QgIngkaGF2ZV9weXRob24iID0gInh5ZXMiXSkKK0BAIC0zMDQsNiArMzA0LDcgQEAgQU1fQ09ORElUSU9OQUwoW0hBVkVfUFlUSE9OXSwgW3Rlc3QgIngkaGF2ZV9weXRob24iID0gInh5ZXMiXSkKICAKICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIApAQCAtMjQsMTIgKzI2LDEyIEBACiAgQUNfQ0hFQ0tfSEVBREVSUyhbbGludXgvYnRyZnMuaF0sIFtdLCBbXSkKICBBQ19DSEVDS19IRUFERVJTKFtsaW51eC9tZW1mZC5oXSwgW10sIFtdKQogZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy9taXNzaW5nLmggYi9zcmMvYmFzaWMvbWlzc2luZy5oCi1pbmRleCA0OTM2ODczLi5jZTc5NDA0IDEwMDY0NAoraW5kZXggMjVhMTFmMzUxLi5kNjMxYjdlM2UgMTAwNjQ0CiAtLS0gYS9zcmMvYmFzaWMvbWlzc2luZy5oCiArKysgYi9zcmMvYmFzaWMvbWlzc2luZy5oCi1AQCAtMzUsNyArMzUsOSBAQAotICNpbmNsdWRlIDxzdGRsaWIuaD4KK0BAIC0zNyw3ICszNyw5IEBACiAgI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAgI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CiArI2lmZGVmIEhBVkVfVUNIQVJfSAogICNpbmNsdWRlIDx1Y2hhci5oPgpAQCAtMzgsNSArNDAsNSBAQAogIAogICNpZmRlZiBIQVZFX0FVRElUCiAtLSAKLTIuMTAuMgorMi4xMy4yCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxOS1zb2NrZXQtdXRpbC1kb24tdC1mYWlsLWlmLWxpYmMtZG9lc24tdC1zdXBwb3J0LUlETi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxOS1zb2NrZXQtdXRpbC1kb24tdC1mYWlsLWlmLWxpYmMtZG9lc24tdC1zdXBwb3J0LUlETi5wYXRjaAppbmRleCA2NmFhNGNhLi5iNjA5Mjc2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTktc29ja2V0LXV0aWwtZG9uLXQtZmFpbC1pZi1saWJjLWRvZXNuLXQtc3VwcG9ydC1JRE4ucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDE5LXNvY2tldC11dGlsLWRvbi10LWZhaWwtaWYtbGliYy1kb2Vzbi10LXN1cHBvcnQtSUROLnBhdGNoCkBAIC0xLDE4ICsxLDE5IEBACi1Gcm9tIDI4OTU1NGQ4N2U0ZmQ5NmNhZTA4YzBmYjQ0OWJmNDFkNTY0MWNkMjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIGI3YzZiZmUyZWM1YWU0MjZlNTg2ZTFkNmVjYWRiNTJhOTcxMjhhM2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogV2VkLCA5IE5vdiAyMDE2IDIwOjQ5OjUzIC0wODAwCi1TdWJqZWN0OiBbUEFUQ0ggMTkvMTldIHNvY2tldC11dGlsOiBkb24ndCBmYWlsIGlmIGxpYmMgZG9lc24ndCBzdXBwb3J0IElETgorU3ViamVjdDogW1BBVENIIDEzLzE0XSBzb2NrZXQtdXRpbDogZG9uJ3QgZmFpbCBpZiBsaWJjIGRvZXNuJ3Qgc3VwcG9ydCBJRE4KIAogVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAKIFNpZ25lZC1vZmYtYnk6IEVtaWwgUmVubmVyIEJlcnRoaW5nIDxzeXN0ZW1kQGVzbWlsLmRrPgogU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKwogLS0tCiAgc3JjL2Jhc2ljL3NvY2tldC11dGlsLmMgfCA5ICsrKysrKysrKwogIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKIAogZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy9zb2NrZXQtdXRpbC5jIGIvc3JjL2Jhc2ljL3NvY2tldC11dGlsLmMKLWluZGV4IDRlYmYxMDYuLjUzYjlhMTIgMTAwNjQ0CitpbmRleCAwMTZlNjRhYTAuLmQ0NjU4ODI2ZSAxMDA2NDQKIC0tLSBhL3NyYy9iYXNpYy9zb2NrZXQtdXRpbC5jCiArKysgYi9zcmMvYmFzaWMvc29ja2V0LXV0aWwuYwogQEAgLTQ3LDYgKzQ3LDE1IEBACkBAIC0yOSw4ICszMCw4IEBACiArI2RlZmluZSBOSV9JRE5fVVNFX1NURDNfQVNDSUlfUlVMRVMgMAogKyNlbmRpZgogIAotIGludCBzb2NrZXRfYWRkcmVzc19wYXJzZShTb2NrZXRBZGRyZXNzICphLCBjb25zdCBjaGFyICpzKSB7Ci0gICAgICAgICBjaGFyICplLCAqbjsKKyAjaWZkZWYgRU5BQkxFX0lETgorICMgIGRlZmluZSBJRE5fRkxBR1MgKE5JX0lETnxOSV9JRE5fVVNFX1NURDNfQVNDSUlfUlVMRVMpCiAtLSAKLTIuMTAuMgorMi4xMy4yCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAyMC1iYWNrLXBvcnQtMjMzLWRvbi10LXVzZS10aGUtdW5pZmllZC1oaWVyYXJjaHktZm9yLXRoZS1zeXN0ZW1kLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDIwLWJhY2stcG9ydC0yMzMtZG9uLXQtdXNlLXRoZS11bmlmaWVkLWhpZXJhcmNoeS1mb3ItdGhlLXN5c3RlbWQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmQ4NjguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDIwLWJhY2stcG9ydC0yMzMtZG9uLXQtdXNlLXRoZS11bmlmaWVkLWhpZXJhcmNoeS1mb3ItdGhlLXN5c3RlbWQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi1UaGlzIGlzIGEgZGlyZWN0IGJhY2twb3J0IGZyb20gc3lzdGVtZC0yMzMncyBzdHJlYW0gdG8gZml4IGx4Yy9kb2NrZXIuCi0KLSUgbHhjLXN0YXJ0IC1uIGNvbnRhaW5lciAtRgotbHhjLXN0YXJ0OiBjZ2ZzbmcuYzogcGFyc2VfaGllcmFyY2hpZXM6IDgyNSBGYWlsZWQgdG8gZmluZCBjdXJyZW50IGNncm91cCBmb3IgY29udHJvbGxlciAnbmFtZT1zeXN0ZW1kJwotbHhjLXN0YXJ0OiBjZ2ZzbmcuYzogYWxsX2NvbnRyb2xsZXJzX2ZvdW5kOiA0MzEgbm8gc3lzdGVtZCBjb250cm9sbGVyIG1vdW50cG9pbnQgZm91bmQKLWx4Yy1zdGFydDogc3RhcnQuYzogbHhjX3NwYXduOiAxMDgyIGZhaWxlZCBpbml0aWFsaXppbmcgY2dyb3VwIHN1cHBvcnQKLWx4Yy1zdGFydDogc3RhcnQuYzogX19seGNfc3RhcnQ6IDEzMzIgZmFpbGVkIHRvIHNwYXduICdjb250YWluZXInCi1seGMtc3RhcnQ6IGx4Y19zdGFydC5jOiBtYWluOiAzNDQgVGhlIGNvbnRhaW5lciBmYWlsZWQgdG8gc3RhcnQuCi1seGMtc3RhcnQ6IGx4Y19zdGFydC5jOiBtYWluOiAzNDggQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBjYW4gYmUgb2J0YWluZWQgYnkgc2V0dGluZyB0aGUgLS1sb2dmaWxlIGFuZCAtLWxvZ3ByaW9yaXR5IG9wdGlvbnMuCi0KLSMjIGJlZ2luIGJhY2twb3J0ICMjCi0KLUZyb20gODQzZDViYWY2YWFkNmM1M2ZjMDBlYThkOTVkODMyMDlhNGY5MmRlMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IE1hcnRpbiBQaXR0IDxtYXJ0aW4ucGl0dEB1YnVudHUuY29tPgotRGF0ZTogVGh1LCAxMCBOb3YgMjAxNiAwNTozMzoxMyArMDEwMAotU3ViamVjdDogW1BBVENIXSBjb3JlOiBkb24ndCB1c2UgdGhlIHVuaWZpZWQgaGllcmFyY2h5IGZvciB0aGUgc3lzdGVtZCBjZ3JvdXAKLSB5ZXQgKCM0NjI4KQotCi1Ub28gbWFueSB0aGluZ3MgZG9uJ3QgZ2V0IGFsb25nIHdpdGggdGhlIHVuaWZpZWQgaGllcmFyY2h5IHlldDoKLQotICogaHR0cHM6Ly9naXRodWIuY29tL29wZW5jb250YWluZXJzL3J1bmMvaXNzdWVzLzExNzUKLSAqIGh0dHBzOi8vZ2l0aHViLmNvbS9kb2NrZXIvZG9ja2VyL2lzc3Vlcy8yODEwOQotICogaHR0cHM6Ly9naXRodWIuY29tL2x4Yy9seGMvaXNzdWVzLzEyODAKLQotU28gcmV2ZXJ0IHRoZSBkZWZhdWx0IHRvIHRoZSBsZWdhY3kgaGllcmFyY2h5IGZvciBub3cuIERldmVsb3BlcnMgb2YgdGhlIGFib3ZlCi1zb2Z0d2FyZSBjYW4gb3B0IGludG8gdGhlIHVuaWZpZWQgaGllcmFyY2h5IHdpdGgKLSJzeXN0ZW1kLmxlZ2FjeV9zeXN0ZW1kX2Nncm91cF9jb250cm9sbGVyPTAiLgotLS0tCi0gc3JjL2Jhc2ljL2Nncm91cC11dGlsLmMgfCA0ICsrLS0KLSAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvc3JjL2Jhc2ljL2Nncm91cC11dGlsLmMgYi9zcmMvYmFzaWMvY2dyb3VwLXV0aWwuYwotaW5kZXggNWU3Mzc1My4uZGMxMzAyNSAxMDA2NDQKLS0tLSBhL3NyYy9iYXNpYy9jZ3JvdXAtdXRpbC5jCi0rKysgYi9zcmMvYmFzaWMvY2dyb3VwLXV0aWwuYwotQEAgLTI0MjMsMTAgKzI0MjMsMTAgQEAgYm9vbCBjZ19pc191bmlmaWVkX3N5c3RlbWRfY29udHJvbGxlcl93YW50ZWQodm9pZCkgewotIAotICAgICAgICAgICAgICAgICByID0gZ2V0X3Byb2NfY21kbGluZV9rZXkoInN5c3RlbWQubGVnYWN5X3N5c3RlbWRfY2dyb3VwX2NvbnRyb2xsZXI9IiwgJnZhbHVlKTsKLSAgICAgICAgICAgICAgICAgaWYgKHIgPCAwKQotLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAKLSAgICAgICAgICAgICAgICAgaWYgKHIgPT0gMCkKLS0gICAgICAgICAgICAgICAgICAgICAgICB3YW50ZWQgPSB0cnVlOwotKyAgICAgICAgICAgICAgICAgICAgICAgIHdhbnRlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgd2FudGVkID0gcGFyc2VfYm9vbGVhbih2YWx1ZSkgPD0gMDsKLSAgICAgICAgIH0KLS0tIAotMi4xMC4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWRfMjMyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZF8yMzIuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ZmU0OTYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZF8yMzIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw1OTkgKzAsMCBAQAotcmVxdWlyZSBzeXN0ZW1kLmluYwotCi1QUk9WSURFUyA9ICJ1ZGV2IgotCi1QRSA9ICIxIgotCi1ERVBFTkRTID0gImttb2QgaW50bHRvb2wtbmF0aXZlIGdwZXJmLW5hdGl2ZSBhY2wgcmVhZGxpbmUgbGliY2FwIGxpYmNncm91cCB1dGlsLWxpbnV4IgotCi1TRUNUSU9OID0gImJhc2Uvc2hlbGwiCi0KLWluaGVyaXQgdXNlcmFkZCBwa2djb25maWcgYXV0b3Rvb2xzIHBlcmxuYXRpdmUgdXBkYXRlLXJjLmQgdXBkYXRlLWFsdGVybmF0aXZlcyBxZW11IHN5c3RlbWQgcHRlc3QgZ2V0dGV4dCBiYXNoLWNvbXBsZXRpb24gbWFucGFnZXMKLQotU1JDX1VSSSArPSAiIFwKLSAgICAgICAgICAgZmlsZTovL3RvdWNoc2NyZWVuLnJ1bGVzIFwKLSAgICAgICAgICAgZmlsZTovLzAwLWNyZWF0ZS12b2xhdGlsZS5jb25mIFwKLSAgICAgICAgICAgZmlsZTovL2luaXQgXAotICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKLSAgICAgICAgICAgZmlsZTovLzAwMDMtZGVmaW5lLWV4cDEwLWlmLW1pc3NpbmcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwNC1Vc2UtZ2V0ZW52LXdoZW4tc2VjdXJlLXZlcnNpb25zLWFyZS1ub3QtYXZhaWxhYmxlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDUtYmluZm10LURvbi10LWluc3RhbGwtZGVwZW5kZW5jeS1saW5rcy1hdC1pbnN0YWxsLXRpbS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA2LWNvbmZpZ3VyZS1DaGVjay1mb3ItYWRkaXRpb25hbC1mZWF0dXJlcy10aGF0LXVjbGliYy0ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwNy11c2UtbG5yLXdyYXBwZXItaW5zdGVhZC1vZi1sb29raW5nLWZvci1yZWxhdGl2ZS1vcHRpLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDgtbnNwYXduLVVzZS1leGVjdnBlLW9ubHktd2hlbi1saWJjLXN1cHBvcnRzLWl0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDktdXRpbC1ieXBhc3MtdW5pbXBsZW1lbnRlZC1fU0NfUEhZU19QQUdFUy1zeXN0ZW0tY29uZi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDEwLWltcGxtZW50LXN5c3RlbWQtc3lzdi1pbnN0YWxsLWZvci1PRS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDExLW5zcy1teW1hY2hpbmVzLUJ1aWxkLWNvbmRpdGlvbmFsbHktd2hlbi1IQVZFX01ZSE9TVE4ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxMi1ydWxlcy13aGl0ZWxpc3QtaGQtZGV2aWNlcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDEzLU1ha2Utcm9vdC1zLWhvbWUtZGlyZWN0b3J5LWNvbmZpZ3VyYWJsZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDE0LVJldmVydC1ydWxlcy1yZW1vdmUtZmlybXdhcmUtbG9hZGluZy1ydWxlcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDE1LVJldmVydC11ZGV2LXJlbW92ZS11c2Vyc3BhY2UtZmlybXdhcmUtbG9hZGluZy1zdXBwb3IucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxNi1tYWtlLXRlc3QtZGlyLWNvbmZpZ3VyYWJsZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDE3LXJlbW92ZS1kdXBsaWNhdGUtaW5jbHVkZS11Y2hhci5oLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTgtY2hlY2stZm9yLXVjaGFyLmgtaW4tY29uZmlndXJlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTktc29ja2V0LXV0aWwtZG9uLXQtZmFpbC1pZi1saWJjLWRvZXNuLXQtc3VwcG9ydC1JRE4ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAyMC1iYWNrLXBvcnQtMjMzLWRvbi10LXVzZS10aGUtdW5pZmllZC1oaWVyYXJjaHktZm9yLXRoZS1zeXN0ZW1kLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtY29yZS1sb2FkLWZyYWdtZW50LXJlZnVzZS11bml0cy13aXRoLWVycm9ycy1pbi1jZXJ0YS5wYXRjaCBcCi0iCi1TUkNfVVJJX2FwcGVuZF9saWJjLXVjbGliYyA9ICJcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAyLXVuaXRzLVByZWZlci1nZXR0eS10by1hZ2V0dHktaW4tY29uc29sZS1zZXR1cC1zeXN0ZW0ucGF0Y2ggXAotIgotU1JDX1VSSV9hcHBlbmRfcWVtdWFsbCA9ICIgZmlsZTovLzAwMDEtY29yZS1kZXZpY2UuYy1DaGFuZ2UtdGhlLWRlZmF1bHQtZGV2aWNlLXRpbWVvdXQtdG8tMi5wYXRjaCIKLQotUEFDS0FHRUNPTkZJRyA/Pz0gInh6IFwKLSAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5maWx0ZXIoJ0RJU1RST19GRUFUVVJFUycsICdlZmkgcGFtIHNlbGludXggbGRjb25maWcnLCBkKX0gXAotICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3hrYmNvbW1vbicsICcnLCBkKX0gXAotICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2lmaScsICdyZmtpbGwnLCAnJywgZCl9IFwKLSAgICAgICAgICAgICAgICAgICBiaW5mbXQgXAotICAgICAgICAgICAgICAgICAgIHJhbmRvbXNlZWQgXAotICAgICAgICAgICAgICAgICAgIG1hY2hpbmVkIFwKLSAgICAgICAgICAgICAgICAgICBiYWNrbGlnaHQgXAotICAgICAgICAgICAgICAgICAgIHZjb25zb2xlIFwKLSAgICAgICAgICAgICAgICAgICBxdW90YWNoZWNrIFwKLSAgICAgICAgICAgICAgICAgICBob3N0bmFtZWQgXAotICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUQ0xJQkMnLCAnZ2xpYmMnLCAnbXlob3N0bmFtZSBzeXN1c2VycycsICcnLCBkKX0gXAotICAgICAgICAgICAgICAgICAgIGhpYmVybmF0ZSBcCi0gICAgICAgICAgICAgICAgICAgdGltZWRhdGVkIFwKLSAgICAgICAgICAgICAgICAgICB0aW1lc3luY2QgXAotICAgICAgICAgICAgICAgICAgIGxvY2FsZWQgXAotICAgICAgICAgICAgICAgICAgIGltYSBcCi0gICAgICAgICAgICAgICAgICAgc21hY2sgXAotICAgICAgICAgICAgICAgICAgIGxvZ2luZCBcCi0gICAgICAgICAgICAgICAgICAgZmlyc3Rib290IFwKLSAgICAgICAgICAgICAgICAgICB1dG1wIFwKLSAgICAgICAgICAgICAgICAgICBwb2xraXQgXAotIgotUEFDS0FHRUNPTkZJR19yZW1vdmVfbGliYy1tdXNsID0gInNlbGludXgiCi1QQUNLQUdFQ09ORklHX3JlbW92ZV9saWJjLW11c2wgPSAic21hY2siCi0KLSMgVXNlIHRoZSB1cHN0cmVhbSBzeXN0ZW1kIHNlcmlhbC1nZXR0eUAuc2VydmljZSBhbmQgcmVseSBvbgotIyBzeXN0ZW1kLWdldHR5LWdlbmVyYXRvciBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBPRS1jb3JlIHNwZWNpZmljCi0jIHN5c3RlbWQtc2VyaWFsZ2V0dHkuYmIgLSBub3QgZW5hYmxlZCBieSBkZWZhdWx0LgotUEFDS0FHRUNPTkZJR1tzZXJpYWwtZ2V0dHktZ2VuZXJhdG9yXSA9ICIiCi0KLVBBQ0tBR0VDT05GSUdbam91cm5hbC11cGxvYWRdID0gIi0tZW5hYmxlLWxpYmN1cmwsLS1kaXNhYmxlLWxpYmN1cmwsY3VybCIKLSMgU2lnbiB0aGUgam91cm5hbCBmb3IgYW50aS10YW1wZXJpbmcKLVBBQ0tBR0VDT05GSUdbZ2NyeXB0XSA9ICItLWVuYWJsZS1nY3J5cHQsLS1kaXNhYmxlLWdjcnlwdCxsaWJnY3J5cHQiCi1QQUNLQUdFQ09ORklHW2NyeXB0c2V0dXBdID0gIi0tZW5hYmxlLWxpYmNyeXB0c2V0dXAsLS1kaXNhYmxlLWxpYmNyeXB0c2V0dXAsY3J5cHRzZXR1cCIKLVBBQ0tBR0VDT05GSUdbbWljcm9odHRwZF0gPSAiLS1lbmFibGUtbWljcm9odHRwZCwtLWRpc2FibGUtbWljcm9odHRwZCxsaWJtaWNyb2h0dHBkIgotUEFDS0FHRUNPTkZJR1tlbGZ1dGlsc10gPSAiLS1lbmFibGUtZWxmdXRpbHMsLS1kaXNhYmxlLWVsZnV0aWxzLGVsZnV0aWxzIgotUEFDS0FHRUNPTkZJR1tyZXNvbHZlZF0gPSAiLS1lbmFibGUtcmVzb2x2ZWQsLS1kaXNhYmxlLXJlc29sdmVkIgotUEFDS0FHRUNPTkZJR1tuZXR3b3JrZF0gPSAiLS1lbmFibGUtbmV0d29ya2QsLS1kaXNhYmxlLW5ldHdvcmtkIgotUEFDS0FHRUNPTkZJR1ttYWNoaW5lZF0gPSAiLS1lbmFibGUtbWFjaGluZWQsLS1kaXNhYmxlLW1hY2hpbmVkIgotUEFDS0FHRUNPTkZJR1tiYWNrbGlnaHRdID0gIi0tZW5hYmxlLWJhY2tsaWdodCwtLWRpc2FibGUtYmFja2xpZ2h0IgotUEFDS0FHRUNPTkZJR1t2Y29uc29sZV0gPSAiLS1lbmFibGUtdmNvbnNvbGUsLS1kaXNhYmxlLXZjb25zb2xlLCwke1BOfS12Y29uc29sZS1zZXR1cCIKLVBBQ0tBR0VDT05GSUdbcXVvdGFjaGVja10gPSAiLS1lbmFibGUtcXVvdGFjaGVjaywtLWRpc2FibGUtcXVvdGFjaGVjayIKLVBBQ0tBR0VDT05GSUdbaG9zdG5hbWVkXSA9ICItLWVuYWJsZS1ob3N0bmFtZWQsLS1kaXNhYmxlLWhvc3RuYW1lZCIKLVBBQ0tBR0VDT05GSUdbbXlob3N0bmFtZV0gPSAiLS1lbmFibGUtbXlob3N0bmFtZSwtLWRpc2FibGUtbXlob3N0bmFtZSIKLVBBQ0tBR0VDT05GSUdbcmZraWxsXSA9ICItLWVuYWJsZS1yZmtpbGwsLS1kaXNhYmxlLXJma2lsbCIKLVBBQ0tBR0VDT05GSUdbaGliZXJuYXRlXSA9ICItLWVuYWJsZS1oaWJlcm5hdGUsLS1kaXNhYmxlLWhpYmVybmF0ZSIKLVBBQ0tBR0VDT05GSUdbdGltZWRhdGVkXSA9ICItLWVuYWJsZS10aW1lZGF0ZWQsLS1kaXNhYmxlLXRpbWVkYXRlZCIKLVBBQ0tBR0VDT05GSUdbdGltZXN5bmNkXSA9ICItLWVuYWJsZS10aW1lc3luY2QsLS1kaXNhYmxlLXRpbWVzeW5jZCIKLVBBQ0tBR0VDT05GSUdbbG9jYWxlZF0gPSAiLS1lbmFibGUtbG9jYWxlZCwtLWRpc2FibGUtbG9jYWxlZCIKLVBBQ0tBR0VDT05GSUdbZWZpXSA9ICItLWVuYWJsZS1lZmksLS1kaXNhYmxlLWVmaSIKLVBBQ0tBR0VDT05GSUdbaW1hXSA9ICItLWVuYWJsZS1pbWEsLS1kaXNhYmxlLWltYSIKLVBBQ0tBR0VDT05GSUdbc21hY2tdID0gIi0tZW5hYmxlLXNtYWNrLC0tZGlzYWJsZS1zbWFjayIKLSMgbGlic2VjY29tcCBpcyBmb3VuZCBpbiBtZXRhLXNlY3VyaXR5Ci1QQUNLQUdFQ09ORklHW3NlY2NvbXBdID0gIi0tZW5hYmxlLXNlY2NvbXAsLS1kaXNhYmxlLXNlY2NvbXAsbGlic2VjY29tcCIKLVBBQ0tBR0VDT05GSUdbbG9naW5kXSA9ICItLWVuYWJsZS1sb2dpbmQsLS1kaXNhYmxlLWxvZ2luZCIKLVBBQ0tBR0VDT05GSUdbc3lzdXNlcnNdID0gIi0tZW5hYmxlLXN5c3VzZXJzLC0tZGlzYWJsZS1zeXN1c2VycyIKLVBBQ0tBR0VDT05GSUdbZmlyc3Rib290XSA9ICItLWVuYWJsZS1maXJzdGJvb3QsLS1kaXNhYmxlLWZpcnN0Ym9vdCIKLVBBQ0tBR0VDT05GSUdbcmFuZG9tc2VlZF0gPSAiLS1lbmFibGUtcmFuZG9tc2VlZCwtLWRpc2FibGUtcmFuZG9tc2VlZCIKLVBBQ0tBR0VDT05GSUdbYmluZm10XSA9ICItLWVuYWJsZS1iaW5mbXQsLS1kaXNhYmxlLWJpbmZtdCIKLVBBQ0tBR0VDT05GSUdbdXRtcF0gPSAiLS1lbmFibGUtdXRtcCwtLWRpc2FibGUtdXRtcCIKLVBBQ0tBR0VDT05GSUdbcG9sa2l0XSA9ICItLWVuYWJsZS1wb2xraXQsLS1kaXNhYmxlLXBvbGtpdCIKLSMgaW1wb3J0ZCByZXF1aXJlcyBjdXJsL3h6L3psaWIvYnppcDIvZ2NyeXB0Ci1QQUNLQUdFQ09ORklHW2ltcG9ydGRdID0gIi0tZW5hYmxlLWltcG9ydGQsLS1kaXNhYmxlLWltcG9ydGQiCi1QQUNLQUdFQ09ORklHW2xpYmlkbl0gPSAiLS1lbmFibGUtbGliaWRuLC0tZGlzYWJsZS1saWJpZG4sbGliaWRuIgotUEFDS0FHRUNPTkZJR1thdWRpdF0gPSAiLS1lbmFibGUtYXVkaXQsLS1kaXNhYmxlLWF1ZGl0LGF1ZGl0IgotUEFDS0FHRUNPTkZJR1ttYW5wYWdlc10gPSAiLS1lbmFibGUtbWFucGFnZXMsLS1kaXNhYmxlLW1hbnBhZ2VzLGxpYnhzbHQtbmF0aXZlIHhtbHRvLW5hdGl2ZSBkb2Nib29rLXhtbC1kdGQ0LW5hdGl2ZSBkb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uYXRpdmUiCi1QQUNLQUdFQ09ORklHW3BhbV0gPSAiLS1lbmFibGUtcGFtLC0tZGlzYWJsZS1wYW0sbGlicGFtIgotIyBWZXJpZnkga2V5bWFwcyBvbiBsb2NhbGUgY2hhbmdlCi1QQUNLQUdFQ09ORklHW3hrYmNvbW1vbl0gPSAiLS1lbmFibGUteGtiY29tbW9uLC0tZGlzYWJsZS14a2Jjb21tb24sbGlieGtiY29tbW9uIgotIyBVcGRhdGUgTkFUIGZpcmV3YWxsIHJ1bGVzCi1QQUNLQUdFQ09ORklHW2lwdGNdID0gIi0tZW5hYmxlLWxpYmlwdGMsLS1kaXNhYmxlLWxpYmlwdGMsaXB0YWJsZXMiCi1QQUNLQUdFQ09ORklHW2xkY29uZmlnXSA9ICItLWVuYWJsZS1sZGNvbmZpZywtLWRpc2FibGUtbGRjb25maWcsLCIKLVBBQ0tBR0VDT05GSUdbc2VsaW51eF0gPSAiLS1lbmFibGUtc2VsaW51eCwtLWRpc2FibGUtc2VsaW51eCxsaWJzZWxpbnV4IgotUEFDS0FHRUNPTkZJR1t2YWxncmluZF0gPSAiYWNfY3ZfaGVhZGVyX3ZhbGdyaW5kX21lbWNoZWNrX2g9eWVzIGFjX2N2X2hlYWRlcl92YWxncmluZF92YWxncmluZF9oPXllcyAsYWNfY3ZfaGVhZGVyX3ZhbGdyaW5kX21lbWNoZWNrX2g9bm8gYWNfY3ZfaGVhZGVyX3ZhbGdyaW5kX3ZhbGdyaW5kX2g9bm8gLHZhbGdyaW5kIgotUEFDS0FHRUNPTkZJR1txcmVuY29kZV0gPSAiLS1lbmFibGUtcXJlbmNvZGUsLS1kaXNhYmxlLXFyZW5jb2RlLHFyZW5jb2RlIgotUEFDS0FHRUNPTkZJR1tkYnVzXSA9ICItLWVuYWJsZS1kYnVzLC0tZGlzYWJsZS1kYnVzLGRidXMiCi1QQUNLQUdFQ09ORklHW2NvcmVkdW1wXSA9ICItLWVuYWJsZS1jb3JlZHVtcCwtLWRpc2FibGUtY29yZWR1bXAiCi1QQUNLQUdFQ09ORklHW2J6aXAyXSA9ICItLWVuYWJsZS1iemlwMiwtLWRpc2FibGUtYnppcDIsYnppcDIiCi1QQUNLQUdFQ09ORklHW2x6NF0gPSAiLS1lbmFibGUtbHo0LC0tZGlzYWJsZS1sejQsbHo0IgotUEFDS0FHRUNPTkZJR1t4el0gPSAiLS1lbmFibGUteHosLS1kaXNhYmxlLXh6LHh6IgotUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLWVuYWJsZS16bGliLC0tZGlzYWJsZS16bGliLHpsaWIiCi0KLUNBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX0tJTEw9JHtiYXNlX2JpbmRpcn0va2lsbCIKLUNBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX0tNT0Q9JHtiYXNlX2JpbmRpcn0va21vZCIKLUNBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX1FVT1RBQ0hFQ0s9JHtzYmluZGlyfS9xdW90YWNoZWNrIgotQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfUVVPVEFPTj0ke3NiaW5kaXJ9L3F1b3Rhb24iCi1DQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9TVUxPR0lOPSR7YmFzZV9zYmluZGlyfS9zdWxvZ2luIgotCi0jIEhlbHBlciB2YXJpYWJsZXMgdG8gY2xhcmlmeSBsb2NhdGlvbnMuICBUaGlzIG1pcnJvcnMgdGhlIGxvZ2ljIGluIHN5c3RlbWQncwotIyBidWlsZCBzeXN0ZW0uCi1yb290cHJlZml4ID89ICIke2Jhc2VfcHJlZml4fSIKLXJvb3RsaWJkaXIgPz0gIiR7YmFzZV9saWJkaXJ9Igotcm9vdGxpYmV4ZWNkaXIgPSAiJHtyb290cHJlZml4fS9saWIiCi0KLUNBQ0hFRF9DT05GSUdVUkVWQVJTX2NsYXNzLXRhcmdldCA9ICJcCi0gICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9NT1VOVF9QQVRIPSR7YmFzZV9iaW5kaXJ9L21vdW50IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhY19jdl9wYXRoX1VNT1VOVF9QQVRIPSR7YmFzZV9iaW5kaXJ9L3Vtb3VudCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9LTU9EPSR7YmFzZV9iaW5kaXJ9L2ttb2QgXAotICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfS0lMTD0ke2Jhc2VfYmluZGlyfS9raWxsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhY19jdl9wYXRoX1NVTE9HSU49JHtiYXNlX3NiaW5kaXJ9L3N1bG9naW4gXAotICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfS0VYRUM9JHtzYmluZGlyfS9rZXhlYyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9RVU9UQUNIRUNLPSR7c2JpbmRpcn0vcXVvdGFjaGVjayBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9RVU9UQU9OPSR7c2JpbmRpcn0vcXVvdGFvbiBcCi0JCQkgIgotCi1FWFRSQV9PRUNPTkYgPSAiIC0td2l0aC1yb290cHJlZml4PSR7cm9vdHByZWZpeH0gXAotICAgICAgICAgICAgICAgICAtLXdpdGgtcm9vdGxpYmRpcj0ke3Jvb3RsaWJkaXJ9IFwKLSAgICAgICAgICAgICAgICAgLS13aXRoLXJvb3Rob21lZGlyPSR7Uk9PVF9IT01FfSBcCi0gICAgICAgICAgICAgICAgIC0tZW5hYmxlLXNwbGl0LXVzciBcCi0gICAgICAgICAgICAgICAgIC0td2l0aG91dC1weXRob24gXAotICAgICAgICAgICAgICAgICAtLXdpdGgtc3lzdnJjbmQtcGF0aD0ke3N5c2NvbmZkaXJ9IFwKLSAgICAgICAgICAgICAgICAgLS13aXRoLWZpcm13YXJlLXBhdGg9L2xpYi9maXJtd2FyZSBcCi0gICAgICAgICAgICAgICAgIC0td2l0aC10ZXN0ZGlyPSR7UFRFU1RfUEFUSH0gXAotICAgICAgICAgICAgICAgIgotIyBwZXIgdGhlIHN5c3RlbWQgUkVBRE1FLCBkZWZpbmUgVkFMR1JJTkQ9MSB0byBydW4gdW5kZXIgdmFsZ3JpbmQKLUNGTEFHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAndmFsZ3JpbmQnLCAnIC1EVkFMR1JJTkQ9MScsICcnLCBkKX0iCi0KLSMgZGlzYWJsZSBwcm9ibGVtYXRpYyBHQ0MgNS4yIG9wdGltaXphdGlvbnMgW1lPQ1RPICM4MjkxXQotRlVMTF9PUFRJTUlaQVRJT05fYXBwZW5kX2FybSA9ICIgLWZuby1zY2hlZHVsZS1pbnNucyAtZm5vLXNjaGVkdWxlLWluc25zMiIKLQotIyBBdm9pZCBsb2dpbiBmYWlsdXJlIG9uIHFlbXVtaXBzNjQgd2hlbiBwYW0gaXMgZW5hYmxlZAotRlVMTF9PUFRJTUlaQVRJT05fYXBwZW5kX21pcHM2NCA9ICIgLWZuby10cmVlLXN3aXRjaC1jb252ZXJzaW9uIC1mbm8tdHJlZS10YWlsLW1lcmdlIgotCi1kb19jb25maWd1cmVfcHJlcGVuZCgpIHsKLQlleHBvcnQgTk09IiR7SE9TVF9QUkVGSVh9Z2NjLW5tIgotCWV4cG9ydCBBUj0iJHtIT1NUX1BSRUZJWH1nY2MtYXIiCi0JZXhwb3J0IFJBTkxJQj0iJHtIT1NUX1BSRUZJWH1nY2MtcmFubGliIgotCWV4cG9ydCBLTU9EPSIke2Jhc2VfYmluZGlyfS9rbW9kIgotCWlmIFsgLWQgJHtTfS91bml0cy5wcmVfc2VkIF0gOyB0aGVuCi0JCWNwIC1yICR7U30vdW5pdHMucHJlX3NlZCAke1N9L3VuaXRzCi0JZWxzZQotCQljcCAtciAke1N9L3VuaXRzICR7U30vdW5pdHMucHJlX3NlZAotCWZpCi0Jc2VkIC1pIC1lICdzOi1EVEVTVF9ESVI9XFxcIi4qXFxcIjotRFRFU1RfRElSPVxcXCIke1BURVNUX1BBVEh9L3Rlc3RzL3Rlc3RcXFwiOicgJHtTfS9NYWtlZmlsZS5hbQotCXNlZCAtaSAtZSAnczotRENBVEFMT0dfRElSPVxcXCIuKlxcXCI6LURDQVRBTE9HX0RJUj1cXFwiJHtQVEVTVF9QQVRIfS90ZXN0cy9jYXRhbG9nXFxcIjonICR7U30vTWFrZWZpbGUuYW0KLX0KLQotZG9faW5zdGFsbCgpIHsKLQlhdXRvdG9vbHNfZG9faW5zdGFsbAotCWluc3RhbGwgLWQgJHtEfS8ke2Jhc2Vfc2JpbmRpcn0KLQlpZiAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdzZXJpYWwtZ2V0dHktZ2VuZXJhdG9yJywgJ2ZhbHNlJywgJ3RydWUnLCBkKX07IHRoZW4KLQkJIyBQcm92aWRlZCBieSBhIHNlcGFyYXRlIHJlY2lwZQotCQlybSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zZXJpYWwtZ2V0dHkqIC1mCi0JZmkKLQotCSMgUHJvdmlkZSBzdXBwb3J0IGZvciBpbml0cmFtZnMKLQlbICEgLWUgJHtEfS9pbml0IF0gJiYgbG4gLXMgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kICR7RH0vaW5pdAotCVsgISAtZSAke0R9LyR7YmFzZV9zYmluZGlyfS91ZGV2ZCBdICYmIGxuIC1zICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC11ZGV2ZCAke0R9LyR7YmFzZV9zYmluZGlyfS91ZGV2ZAotCi0JIyBDcmVhdGUgbWFjaGluZS1pZAotCSMgMjA6MTIgPCBtZXpjYWxlcm8+IGtvZW46IHlvdSBoYXZlIHRocmVlIG9wdGlvbnM6IGEpIHJ1biBzeXN0ZW1kLW1hY2hpbmUtaWQtc2V0dXAgYXQgaW5zdGFsbCB0aW1lLCBiKSBoYXZlIC8gcmVhZC1vbmx5IGFuZCBhbiBlbXB0eSBmaWxlIHRoZXJlIChmb3Igc3RhdGVsZXNzKSBhbmQgYykgYm9vdCB3aXRoIC8gd3JpdGFibGUKLQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9tYWNoaW5lLWlkCi0KLQotCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vdWRldi9ydWxlcy5kLwotCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZAotCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9LyoucnVsZXMgJHtEfSR7c3lzY29uZmRpcn0vdWRldi9ydWxlcy5kLwotCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9wa2djb25maWcKLQlpbnN0YWxsIC1tIDA2NDQgJHtCfS9zcmMvdWRldi91ZGV2LnBjICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnLwotCi0JaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vMDAtY3JlYXRlLXZvbGF0aWxlLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZC8KLQotCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN2aW5pdCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCi0JCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCi0JCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c3RlbWQtdWRldmQKLQkJc2VkIC1pIHMlQFVERVZEQCUke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtdWRldmQlICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9zeXN0ZW1kLXVkZXZkCi0JZmkKLQotCWNob3duIHJvb3Q6c3lzdGVtZC1qb3VybmFsICR7RH0vJHtsb2NhbHN0YXRlZGlyfS9sb2cvam91cm5hbAotCi0JIyBEZWxldGUgam91cm5hbCBSRUFETUUsIGFzIGxvZyBjYW4gYmUgc3ltbGlua2VkIGluc2lkZSB2b2xhdGlsZS4KLQlybSAtZiAke0R9LyR7bG9jYWxzdGF0ZWRpcn0vbG9nL1JFQURNRQotCi0JaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9ncmFwaGljYWwudGFyZ2V0LndhbnRzCi0JaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9tdWx0aS11c2VyLnRhcmdldC53YW50cwotCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcG93ZXJvZmYudGFyZ2V0LndhbnRzCi0JaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9yZWJvb3QudGFyZ2V0LndhbnRzCi0JaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9yZXNjdWUudGFyZ2V0LndhbnRzCi0KLQkjIENyZWF0ZSBzeW1saW5rcyBmb3Igc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlCi0JaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAndXRtcCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCi0JCWxuIC1zZiAuLi9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZ3JhcGhpY2FsLnRhcmdldC53YW50cy9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UKLQkJbG4gLXNmIC4uL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9tdWx0aS11c2VyLnRhcmdldC53YW50cy9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UKLQkJbG4gLXNmIC4uL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9wb3dlcm9mZi50YXJnZXQud2FudHMvc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlCi0JCWxuIC1zZiAuLi9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcmVib290LnRhcmdldC53YW50cy9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UKLQkJbG4gLXNmIC4uL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9yZXNjdWUudGFyZ2V0LndhbnRzL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZQotCWZpCi0KLQkjIEVuYWJsZSBqb3VybmFsIHRvIGZvcndhcmQgbWVzc2FnZSB0byBzeXNsb2cgZGFlbW9uCi0Jc2VkIC1pIC1lICdzLy4qRm9yd2FyZFRvU3lzbG9nLiovRm9yd2FyZFRvU3lzbG9nPXllcy8nICR7RH0ke3N5c2NvbmZkaXJ9L3N5c3RlbWQvam91cm5hbGQuY29uZgotCSMgU2V0IHRoZSBtYXhpbWl1bSBzaXplIG9mIHJ1bnRpbWUgam91cm5hbCB0byA2NE0gYXMgZGVmYXVsdAotCXNlZCAtaSAtZSAncy8uKlJ1bnRpbWVNYXhVc2UuKi9SdW50aW1lTWF4VXNlPTY0TS8nICR7RH0ke3N5c2NvbmZkaXJ9L3N5c3RlbWQvam91cm5hbGQuY29uZgotCi0JIyB0aGlzIGZpbGUgaXMgbmVlZGVkIHRvIGV4aXN0IGlmIG5ldHdvcmtkIGlzIGRpc2FibGVkIGJ1dCB0aW1lc3luY2QgaXMgc3RpbGwgaW4gdXNlIHNpbmNlIHRpbWVzeW5jZCBjaGVja3MgaXQKLQkjIGZvciBleGlzdGVuY2UgZWxzZSBpdCBmYWlscwotCWlmIFsgLXMgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYi90bXBmaWxlcy5kL3N5c3RlbWQuY29uZiBdOyB0aGVuCi0JCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ25ldHdvcmtkJywgJzonLCAnc2VkIC1pIC1lICJcJGFkIC9ydW4vc3lzdGVtZC9uZXRpZi9saW5rcyAwNzU1IHJvb3Qgcm9vdCAtIiAke0R9JHtleGVjX3ByZWZpeH0vbGliL3RtcGZpbGVzLmQvc3lzdGVtZC5jb25mJywgZCl9Ci0JZmkKLQlpZiAhICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3Jlc29sdmVkJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KLQkJZWNobyAnTCEgJHtzeXNjb25mZGlyfS9yZXNvbHYuY29uZiAtIC0gLSAtIC4uL3J1bi9zeXN0ZW1kL3Jlc29sdmUvcmVzb2x2LmNvbmYnID4+JHtEfSR7ZXhlY19wcmVmaXh9L2xpYi90bXBmaWxlcy5kL2V0Yy5jb25mCi0JCWVjaG8gJ2QgL3J1bi9zeXN0ZW1kL3Jlc29sdmUgMDc1NSByb290IHJvb3QgLScgPj4ke0R9JHtleGVjX3ByZWZpeH0vbGliL3RtcGZpbGVzLmQvc3lzdGVtZC5jb25mCi0JCWVjaG8gJ2YgL3J1bi9zeXN0ZW1kL3Jlc29sdmUvcmVzb2x2LmNvbmYgMDY0NCByb290IHJvb3QnID4+JHtEfSR7ZXhlY19wcmVmaXh9L2xpYi90bXBmaWxlcy5kL3N5c3RlbWQuY29uZgotCQlsbiAtcyAuLi9ydW4vc3lzdGVtZC9yZXNvbHZlL3Jlc29sdi5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3Jlc29sdi5jb25mCi0JZWxzZQotCQlzZWQgLWkgLWUgInMlXkwhIC9ldGMvcmVzb2x2LmNvbmYuKiQlTCEgL2V0Yy9yZXNvbHYuY29uZiAtIC0gLSAtIC4uL3J1bi9zeXN0ZW1kL3Jlc29sdmUvcmVzb2x2LmNvbmYlZyIgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYi90bXBmaWxlcy5kL2V0Yy5jb25mCi0JZmkKLQlpbnN0YWxsIC1EbSAwNzU1ICR7U30vc3JjL3N5c3RlbWN0bC9zeXN0ZW1kLXN5c3YtaW5zdGFsbC5TS0VMRVRPTiAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbWQtc3lzdi1pbnN0YWxsCi19Ci0KLWRvX2luc3RhbGxfcHRlc3QgKCkgewotICAgICAgICMgaW5zdGFsbCBkYXRhIGZpbGVzIG5lZWRlZCBmb3IgdGVzdHMKLSAgICAgICBpbnN0YWxsIC1kICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL3Rlc3QKLSAgICAgICBjcCAtcmZMICR7U30vdGVzdC8qICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL3Rlc3QKLSAgICAgICAjIHB5dGhvbiBpcyBkaXNhYmxlZCBmb3Igc3lzdGVtZCwgdGh1cyByZW1vdmluZyB0aGVzZSBweXRob24gdGVzdGluZyBzY3JpcHRzCi0gICAgICAgcm0gJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvdGVzdC8qLnB5Ci0gICAgICAgc2VkIC1pICdzLyJ0cmVlIi8ibHMiLycgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvdGVzdC91ZGV2LXRlc3QucGwKLQotICAgICAgIGluc3RhbGwgLWQgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvY2F0YWxvZwotICAgICAgIGluc3RhbGwgJHtTfS9jYXRhbG9nLyogJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvY2F0YWxvZy8KLQotICAgICAgIGluc3RhbGwgLUQgJHtTfS9idWlsZC1hdXgvdGVzdC1kcml2ZXIgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvYnVpbGQtYXV4L3Rlc3QtZHJpdmVyCi0KLSAgICAgICBpbnN0YWxsIC1kICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL3J1bGVzCi0gICAgICAgaW5zdGFsbCAke0J9L3J1bGVzLyogJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvcnVsZXMvCi0KLSAgICAgICAjIFRoaXMgZGlyZWN0b3J5IG5lZWRzIHRvIGJlIHRoZXJlIGZvciB1ZGV2LXRlc3QucGwgdG8gd29yay4KLSAgICAgICBpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vdWRldi9ydWxlcy5kCi0KLSAgICAgICAjIGluc3RhbGwgYWN0dWFsIHRlc3QgYmluYXJpZXMKLSAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtCfS90ZXN0LSogJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvCi0gICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7Qn0vLmxpYnMvdGVzdC0qICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzLwotCi0gICAgICAgaW5zdGFsbCAke0J9L01ha2VmaWxlICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzLwotfQotCi1weXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKXsKLSAgICBzeXN0ZW1kbGliZGlyID0gZC5nZXRWYXIoInJvb3RsaWJkaXIiKQotICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHN5c3RlbWRsaWJkaXIsICdebGliKC4qKVwuc29cLionLCAnbGliJXMnLCAnU3lzdGVtZCAlcyBsaWJyYXJ5JywgZXh0cmFfZGVwZW5kcz0nJywgYWxsb3dfbGlua3M9VHJ1ZSkKLX0KLVBBQ0tBR0VTX0RZTkFNSUMgKz0gIl5saWIodWRldnxzeXN0ZW1kfG5zcykuKiIKLQotUEFDS0FHRVMgPSsgIlwKLSAgICAke1BOfS1ndWkgXAotICAgICR7UE59LXZjb25zb2xlLXNldHVwIFwKLSAgICAke1BOfS1pbml0cmFtZnMgXAotICAgICR7UE59LWFuYWx5emUgXAotICAgICR7UE59LWtlcm5lbC1pbnN0YWxsIFwKLSAgICAke1BOfS1ycG0tbWFjcm9zIFwKLSAgICAke1BOfS1iaW5mbXQgXAotICAgICR7UE59LXBhbSBcCi0gICAgJHtQTn0tenNoLWNvbXBsZXRpb24gXAotICAgICR7UE59LXhvcmcteGluaXRyYyBcCi0gICAgJHtQTn0tY29udGFpbmVyIFwKLSAgICAke1BOfS1leHRyYS11dGlscyBcCi0iCi0KLVNVTU1BUllfJHtQTn0tY29udGFpbmVyID0gIlRvb2xzIGZvciBjb250YWluZXJzIGFuZCBWTXMiCi1ERVNDUklQVElPTl8ke1BOfS1jb250YWluZXIgPSAiU3lzdGVtZCB0b29scyB0byBzcGF3biBhbmQgbWFuYWdlIGNvbnRhaW5lcnMgYW5kIHZpcnR1YWwgbWFjaGluZXMuIgotCi1TWVNURU1EX1BBQ0tBR0VTID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2JpbmZtdCcsICcke1BOfS1iaW5mbXQnLCAnJywgZCl9IgotU1lTVEVNRF9TRVJWSUNFXyR7UE59LWJpbmZtdCA9ICJzeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlIgotCi1VU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59ICR7UE59LWV4dHJhLXV0aWxzIgotVVNFUkFERF9QQVJBTV8ke1BOfSArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnbWljcm9odHRwZCcsICctLXN5c3RlbSAtZCAvIC1NIC0tc2hlbGwgL2Jpbi9ub2xvZ2luIHN5c3RlbWQtam91cm5hbC1nYXRld2F5OycsICcnLCBkKX0iCi1VU0VSQUREX1BBUkFNXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdtaWNyb2h0dHBkJywgJy0tc3lzdGVtIC1kIC8gLU0gLS1zaGVsbCAvYmluL25vbG9naW4gc3lzdGVtZC1qb3VybmFsLXJlbW90ZTsnLCAnJywgZCl9IgotVVNFUkFERF9QQVJBTV8ke1BOfSArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnam91cm5hbC11cGxvYWQnLCAnLS1zeXN0ZW0gLWQgLyAtTSAtLXNoZWxsIC9iaW4vbm9sb2dpbiBzeXN0ZW1kLWpvdXJuYWwtdXBsb2FkOycsICcnLCBkKX0iCi1VU0VSQUREX1BBUkFNXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd0aW1lc3luY2QnLCAnLS1zeXN0ZW0gLWQgLyAtTSAtLXNoZWxsIC9iaW4vbm9sb2dpbiBzeXN0ZW1kLXRpbWVzeW5jOycsICcnLCBkKX0iCi1VU0VSQUREX1BBUkFNXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICduZXR3b3JrZCcsICctLXN5c3RlbSAtZCAvIC1NIC0tc2hlbGwgL2Jpbi9ub2xvZ2luIHN5c3RlbWQtbmV0d29yazsnLCAnJywgZCl9IgotVVNFUkFERF9QQVJBTV8ke1BOfSArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnY29yZWR1bXAnLCAnLS1zeXN0ZW0gLWQgLyAtTSAtLXNoZWxsIC9iaW4vbm9sb2dpbiBzeXN0ZW1kLWNvcmVkdW1wOycsICcnLCBkKX0iCi1VU0VSQUREX1BBUkFNXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdyZXNvbHZlZCcsICctLXN5c3RlbSAtZCAvIC1NIC0tc2hlbGwgL2Jpbi9ub2xvZ2luIHN5c3RlbWQtcmVzb2x2ZTsnLCAnJywgZCl9IgotR1JPVVBBRERfUEFSQU1fJHtQTn0gPSAiLXIgbG9jazsgLXIgc3lzdGVtZC1qb3VybmFsIgotVVNFUkFERF9QQVJBTV8ke1BOfS1leHRyYS11dGlscyArPSAiLS1zeXN0ZW0gLWQgLyAtTSAtLXNoZWxsIC9iaW4vbm9sb2dpbiBzeXN0ZW1kLWJ1cy1wcm94eTsiCi0KLUZJTEVTXyR7UE59LWFuYWx5emUgPSAiJHtiaW5kaXJ9L3N5c3RlbWQtYW5hbHl6ZSIKLQotRklMRVNfJHtQTn0taW5pdHJhbWZzID0gIi9pbml0IgotUkRFUEVORFNfJHtQTn0taW5pdHJhbWZzID0gIiR7UE59IgotCi1SREVQRU5EU18ke1BOfS1wdGVzdCArPSAiZ2F3ayBtYWtlIHBlcmwgYmFzaCB4eiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgdHpkYXRhIHR6ZGF0YS1hbWVyaWNhcyB0emRhdGEtYXNpYSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgdHpkYXRhLWV1cm9wZSB0emRhdGEtYWZyaWNhIHR6ZGF0YS1hbnRhcmN0aWNhIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICB0emRhdGEtYXJjdGljIHR6ZGF0YS1hdGxhbnRpYyB0emRhdGEtYXVzdHJhbGlhIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICB0emRhdGEtcGFjaWZpYyB0emRhdGEtcG9zaXgiCi0KLUZJTEVTXyR7UE59LXB0ZXN0ICs9ICIke2xpYmRpcn0vdWRldi9ydWxlcy5kIgotCi1GSUxFU18ke1BOfS1ndWkgPSAiJHtiaW5kaXJ9L3N5c3RlbWFkbSIKLQotRklMRVNfJHtQTn0tdmNvbnNvbGUtc2V0dXAgPSAiJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLXZjb25zb2xlLXNldHVwIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzdGVtZC12Y29uc29sZS1zZXR1cC5zZXJ2aWNlIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzaW5pdC50YXJnZXQud2FudHMvc3lzdGVtZC12Y29uc29sZS1zZXR1cC5zZXJ2aWNlIgotCi1SREVQRU5EU18ke1BOfS1rZXJuZWwtaW5zdGFsbCArPSAiYmFzaCIKLUZJTEVTXyR7UE59LWtlcm5lbC1pbnN0YWxsID0gIiR7YmluZGlyfS9rZXJuZWwtaW5zdGFsbCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2tlcm5lbC8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL2tlcm5lbCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKLUZJTEVTXyR7UE59LXJwbS1tYWNyb3MgPSAiJHtleGVjX3ByZWZpeH0vbGliL3JwbSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIgotCi1GSUxFU18ke1BOfS14b3JnLXhpbml0cmMgPSAiJHtzeXNjb25mZGlyfS9YMTEveGluaXQveGluaXRyYy5kLyoiCi0KLUZJTEVTXyR7UE59LXpzaC1jb21wbGV0aW9uID0gIiR7ZGF0YWRpcn0venNoL3NpdGUtZnVuY3Rpb25zIgotCi1GSUxFU18ke1BOfS1iaW5mbXQgPSAiJHtzeXNjb25mZGlyfS9iaW5mbXQuZC8gXAotICAgICAgICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi9iaW5mbXQuZCBcCi0gICAgICAgICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLWJpbmZtdCBcCi0gICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9wcm9jLXN5cy1mcy1iaW5mbXRfbWlzYy4qIFwKLSAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtYmluZm10LnNlcnZpY2UiCi1SUkVDT01NRU5EU18ke1BOfS1iaW5mbXQgPSAia2VybmVsLW1vZHVsZS1iaW5mbXQtbWlzYyIKLQotUlJFQ09NTUVORFNfJHtQTn0tdmNvbnNvbGUtc2V0dXAgPSAia2JkIGtiZC1jb25zb2xlZm9udHMga2JkLWtleW1hcHMiCi0KLUZJTEVTXyR7UE59LWNvbnRhaW5lciA9ICIke3N5c2NvbmZkaXJ9L2RidXMtMS9zeXN0ZW0uZC9vcmcuZnJlZWRlc2t0b3AuaW1wb3J0MS5jb25mIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2RidXMtMS9zeXN0ZW0uZC9vcmcuZnJlZWRlc2t0b3AubWFjaGluZTEuY29uZiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgJHtiYXNlX2JpbmRpcn0vbWFjaGluZWN0bCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3N5c3RlbWQtbnNwYXduIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAke25vbmFyY2hfbGliZGlyfS9zeXN0ZW1kL2ltcG9ydC1wdWJyaW5nLmdwZyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfS9idXNuYW1lcy50YXJnZXQud2FudHMvb3JnLmZyZWVkZXNrdG9wLmltcG9ydDEuYnVzbmFtZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfS9idXNuYW1lcy50YXJnZXQud2FudHMvb3JnLmZyZWVkZXNrdG9wLm1hY2hpbmUxLmJ1c25hbWUgXAotICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vbG9jYWwtZnMudGFyZ2V0LndhbnRzL3Zhci1saWItbWFjaGluZXMubW91bnQgXAotICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vbWFjaGluZS5zbGljZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfS9tYWNoaW5lcy50YXJnZXQgXAotICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vb3JnLmZyZWVkZXNrdG9wLmltcG9ydDEuYnVzbmFtZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfS9vcmcuZnJlZWRlc2t0b3AubWFjaGluZTEuYnVzbmFtZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfS9zeXN0ZW1kLWltcG9ydGQuc2VydmljZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfS9zeXN0ZW1kLW1hY2hpbmVkLnNlcnZpY2UgXAotICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vZGJ1cy1vcmcuZnJlZWRlc2t0b3AubWFjaGluZTEuc2VydmljZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfS92YXItbGliLW1hY2hpbmVzLm1vdW50IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtaW1wb3J0IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtaW1wb3J0ZCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLWpvdXJuYWwtZ2F0ZXdheWQgXAotICAgICAgICAgICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC1qb3VybmFsLXJlbW90ZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLWpvdXJuYWwtdXBsb2FkIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtbWFjaGluZWQgXAotICAgICAgICAgICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC1wdWxsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvdG1wZmlsZXMuZC9zeXN0ZW1kLW5zcGF3bi5jb25mIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9L3N5c3RlbWQtbnNwYXduQC5zZXJ2aWNlIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlibnNzX215bWFjaGluZXMuc28uMiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzL29yZy5mcmVlZGVza3RvcC5pbXBvcnQxLnNlcnZpY2UgXAotICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcy9vcmcuZnJlZWRlc2t0b3AubWFjaGluZTEuc2VydmljZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9wb2xraXQtMS9hY3Rpb25zL29yZy5mcmVlZGVza3RvcC5pbXBvcnQxLnBvbGljeSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9wb2xraXQtMS9hY3Rpb25zL29yZy5mcmVlZGVza3RvcC5tYWNoaW5lMS5wb2xpY3kgXAotICAgICAgICAgICAgICAgICAgICAgICAgIgotCi1GSUxFU18ke1BOfS1leHRyYS11dGlscyA9ICJcCi0gICAgICAgICAgICAgICAgICAgICAgICAke2Jhc2VfYmluZGlyfS9zeXN0ZW1kLWVzY2FwZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke2Jhc2VfYmluZGlyfS9zeXN0ZW1kLWluaGliaXQgXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3N5c3RlbWQtZGV0ZWN0LXZpcnQgXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3N5c3RlbWQtcGF0aCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vc3lzdGVtZC1ydW4gXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3N5c3RlbWQtY2F0IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9zeXN0ZW1kLWRlbHRhIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9zeXN0ZW1kLWNnbHMgXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3N5c3RlbWQtY2d0b3AgXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3N5c3RlbWQtc3RkaW8tYnJpZGdlIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICR7YmFzZV9iaW5kaXJ9L3N5c3RlbWQtYXNrLXBhc3N3b3JkIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICR7YmFzZV9iaW5kaXJ9L3N5c3RlbWQtdHR5LWFzay1wYXNzd29yZC1hZ2VudCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtYXNrLXBhc3N3b3JkLWNvbnNvbGUucGF0aCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtYXNrLXBhc3N3b3JkLWNvbnNvbGUuc2VydmljZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtYXNrLXBhc3N3b3JkLXdhbGwucGF0aCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtYXNrLXBhc3N3b3JkLXdhbGwuc2VydmljZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c2luaXQudGFyZ2V0LndhbnRzL3N5c3RlbWQtYXNrLXBhc3N3b3JkLWNvbnNvbGUucGF0aCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c2luaXQudGFyZ2V0LndhbnRzL3N5c3RlbWQtYXNrLXBhc3N3b3JkLXdhbGwucGF0aCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL211bHRpLXVzZXIudGFyZ2V0LndhbnRzL3N5c3RlbWQtYXNrLXBhc3N3b3JkLXdhbGwucGF0aCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtcmVzb2x2ZS1ob3N0IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC1hYy1wb3dlciBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtYWN0aXZhdGUgXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLWJ1cy1wcm94eWQgXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXN0ZW1kLWJ1cy1wcm94eWQuc2VydmljZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtYnVzLXByb3h5ZC5zb2NrZXQgXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLXNvY2tldC1wcm94eWQgXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLXJlcGx5LXBhc3N3b3JkIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC1zbGVlcCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbS1zbGVlcCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtaGliZXJuYXRlLnNlcnZpY2UgXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXN0ZW1kLWh5YnJpZC1zbGVlcC5zZXJ2aWNlIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzdGVtZC1zdXNwZW5kLnNlcnZpY2UgXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zbGVlcC50YXJnZXQgXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLWluaXRjdGwgXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXN0ZW1kLWluaXRjdGwuc2VydmljZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtaW5pdGN0bC5zb2NrZXQgXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zb2NrZXRzLnRhcmdldC53YW50cy9zeXN0ZW1kLWluaXRjdGwuc29ja2V0IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtLWdlbmVyYXRvcnMvc3lzdGVtZC1ncHQtYXV0by1nZW5lcmF0b3IgXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLWNncm91cHMtYWdlbnQgXAotIgotCi1DT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9tYWNoaW5lLWlkIFwKLSAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3N5c3RlbWQvY29yZWR1bXAuY29uZiBcCi0gICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9zeXN0ZW1kL2pvdXJuYWxkLmNvbmYgXAotICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vc3lzdGVtZC9sb2dpbmQuY29uZiBcCi0gICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9zeXN0ZW1kL3N5c3RlbS5jb25mIFwKLSAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3N5c3RlbWQvdXNlci5jb25mIgotCi1GSUxFU18ke1BOfSA9ICIgJHtiYXNlX2JpbmRpcn0vKiBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc2VydmljZXMgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcyBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9wb2xraXQtMSBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS8ke0JQTn0gXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZmFjdG9yeSBcCi0gICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9kYnVzLTEvIFwKLSAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L21hY2hpbmUtaWQgXAotICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vbW9kdWxlcy1sb2FkLmQvIFwKLSAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3BhbS5kLyBcCi0gICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9zeXNjdGwuZC8gXAotICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vc3lzdGVtZC8gXAotICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZC8gXAotICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0veGRnLyBcCi0gICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9pbml0LmQvUkVBRE1FIFwKLSAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3Jlc29sdi5jb25mIFwKLSAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kLyogXAotICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS8qIFwKLSAgICAgICAgICAgICAgICAke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8qLnNvIFwKLSAgICAgICAgICAgICAgICAvY2dyb3VwIFwKLSAgICAgICAgICAgICAgICAke2JpbmRpcn0vc3lzdGVtZCogXAotICAgICAgICAgICAgICAgICR7YmluZGlyfS9idXNjdGwgXAotICAgICAgICAgICAgICAgICR7YmluZGlyfS9jb3JlZHVtcGN0bCBcCi0gICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2xvY2FsZWN0bCBcCi0gICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2hvc3RuYW1lY3RsIFwKLSAgICAgICAgICAgICAgICAke2JpbmRpcn0vdGltZWRhdGVjdGwgXAotICAgICAgICAgICAgICAgICR7YmluZGlyfS9ib290Y3RsIFwKLSAgICAgICAgICAgICAgICAke2JpbmRpcn0va2VybmVsLWluc3RhbGwgXAotICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi90bXBmaWxlcy5kLyouY29uZiBcCi0gICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL3N5c3RlbWQgXAotICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi9tb2R1bGVzLWxvYWQuZCBcCi0gICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL3N5c2N0bC5kIFwKLSAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvc3lzdXNlcnMuZCBcCi0gICAgICAgICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfSBcCi0gICAgICAgICAgICAgICAgJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2L3J1bGVzLmQvNzAtdWFjY2Vzcy5ydWxlcyBcCi0gICAgICAgICAgICAgICAgJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2L3J1bGVzLmQvNzEtc2VhdC5ydWxlcyBcCi0gICAgICAgICAgICAgICAgJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2L3J1bGVzLmQvNzMtc2VhdC1sYXRlLnJ1bGVzIFwKLSAgICAgICAgICAgICAgICAke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvcnVsZXMuZC85OS1zeXN0ZW1kLnJ1bGVzIFwKLSAgICAgICAgICAgICAgICIKLQotRklMRVNfJHtQTn0tZGV2ICs9ICIke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8qLmxhICR7ZGF0YWRpcn0vZGJ1cy0xL2ludGVyZmFjZXMvICR7c3lzY29uZmRpcn0vcnBtL21hY3Jvcy5zeXN0ZW1kIgotCi1SREVQRU5EU18ke1BOfSArPSAia21vZCBkYnVzIHV0aWwtbGludXgtbW91bnQgdWRldiAoPSAke0VYVEVORFBLR1Z9KSIKLVJERVBFTkRTXyR7UE59ICs9ICJ2b2xhdGlsZS1iaW5kcyB1cGRhdGUtcmMuZCIKLQotUlJFQ09NTUVORFNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3NlcmlhbC1nZXR0eS1nZW5lcmF0b3InLCAnJywgJ3N5c3RlbWQtc2VyaWFsZ2V0dHknLCBkKX0gXAotICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbWQtZXh0cmEtdXRpbHMgXAotICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbWQtY29tcGF0LXVuaXRzIHVkZXYtaHdkYiBcCi0gICAgICAgICAgICAgICAgICAgICAgdXRpbC1saW51eC1hZ2V0dHkgIHV0aWwtbGludXgtZnNjayBlMmZzcHJvZ3MtZTJmc2NrIFwKLSAgICAgICAgICAgICAgICAgICAgICBrZXJuZWwtbW9kdWxlLWF1dG9mczQga2VybmVsLW1vZHVsZS11bml4IGtlcm5lbC1tb2R1bGUtaXB2NiBcCi0gICAgICAgICAgICAgICAgICAgICAgb3MtcmVsZWFzZSBcCi0iCi0KLUlOU0FORV9TS0lQXyR7UE59ICs9ICJkZXYtc28gbGliZGlyIgotSU5TQU5FX1NLSVBfJHtQTn0tZGJnICs9ICJsaWJkaXIiCi1JTlNBTkVfU0tJUF8ke1BOfS1kb2MgKz0gIiBsaWJkaXIiCi0KLVBBQ0tBR0VTID0rICJ1ZGV2IHVkZXYtaHdkYiIKLQotUlBST1ZJREVTX3VkZXYgPSAiaG90cGx1ZyIKLQotUkRFUEVORFNfdWRldi1od2RiICs9ICJ1ZGV2IgotCi1GSUxFU191ZGV2ICs9ICIke2Jhc2Vfc2JpbmRpcn0vdWRldmQgXAotICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLXVkZXZkIFwKLSAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvYWNjZWxlcm9tZXRlciBcCi0gICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2F0YV9pZCBcCi0gICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2Nkcm9tX2lkIFwKLSAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvY29sbGVjdCBcCi0gICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2ZpbmRrZXlib2FyZHMgXAotICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9rZXlib2FyZC1mb3JjZS1yZWxlYXNlLnNoIFwKLSAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYva2V5bWFwIFwKLSAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvbXRkX3Byb2JlIFwKLSAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvc2NzaV9pZCBcCi0gICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L3Y0bF9pZCBcCi0gICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2tleW1hcHMgXAotICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9ydWxlcy5kLyoucnVsZXMgXAotICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS91ZGV2IFwKLSAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c3RlbWQtdWRldmQgXAotICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8qdWRldiogXAotICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8qLndhbnRzLyp1ZGV2KiBcCi0gICAgICAgICAgICAgICAke2Jhc2VfYmluZGlyfS91ZGV2YWRtIFwKLSAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYmFzaC1jb21wbGV0aW9uL2NvbXBsZXRpb25zL3VkZXZhZG0gXAotICAgICAgICAgICAgICAiCi0KLUZJTEVTX3VkZXYtaHdkYiA9ICIke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2h3ZGIuZCIKLQotSU5JVFNDUklQVF9QQUNLQUdFUyA9ICJ1ZGV2IgotSU5JVFNDUklQVF9OQU1FX3VkZXYgPSAic3lzdGVtZC11ZGV2ZCIKLUlOSVRTQ1JJUFRfUEFSQU1TX3VkZXYgPSAic3RhcnQgMDMgUyAuIgotCi1weXRob24gX19hbm9ueW1vdXMoKSB7Ci0gICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCk6Ci0gICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX1VQREFURVJDRF9CQkNMQVNTIiwgIjEiKQotfQotCi0jIFRPRE86Ci0jIHUtYSBmb3IgcnVubGV2ZWwgYW5kIHRlbGluaXQKLQotQUxURVJOQVRJVkVfJHtQTn0gPSAiaW5pdCBoYWx0IHJlYm9vdCBzaHV0ZG93biBwb3dlcm9mZiBydW5sZXZlbCIKLQotQUxURVJOQVRJVkVfVEFSR0VUW2luaXRdID0gIiR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZCIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtpbml0XSA9ICIke2Jhc2Vfc2JpbmRpcn0vaW5pdCIKLUFMVEVSTkFUSVZFX1BSSU9SSVRZW2luaXRdID89ICIzMDAiCi0KLUFMVEVSTkFUSVZFX1RBUkdFVFtoYWx0XSA9ICIke2Jhc2VfYmluZGlyfS9zeXN0ZW1jdGwiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbaGFsdF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2hhbHQiCi1BTFRFUk5BVElWRV9QUklPUklUWVtoYWx0XSA/PSAiMzAwIgotCi1BTFRFUk5BVElWRV9UQVJHRVRbcmVib290XSA9ICIke2Jhc2VfYmluZGlyfS9zeXN0ZW1jdGwiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbcmVib290XSA9ICIke2Jhc2Vfc2JpbmRpcn0vcmVib290IgotQUxURVJOQVRJVkVfUFJJT1JJVFlbcmVib290XSA/PSAiMzAwIgotCi1BTFRFUk5BVElWRV9UQVJHRVRbc2h1dGRvd25dID0gIiR7YmFzZV9iaW5kaXJ9L3N5c3RlbWN0bCIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtzaHV0ZG93bl0gPSAiJHtiYXNlX3NiaW5kaXJ9L3NodXRkb3duIgotQUxURVJOQVRJVkVfUFJJT1JJVFlbc2h1dGRvd25dID89ICIzMDAiCi0KLUFMVEVSTkFUSVZFX1RBUkdFVFtwb3dlcm9mZl0gPSAiJHtiYXNlX2JpbmRpcn0vc3lzdGVtY3RsIgotQUxURVJOQVRJVkVfTElOS19OQU1FW3Bvd2Vyb2ZmXSA9ICIke2Jhc2Vfc2JpbmRpcn0vcG93ZXJvZmYiCi1BTFRFUk5BVElWRV9QUklPUklUWVtwb3dlcm9mZl0gPz0gIjMwMCIKLQotQUxURVJOQVRJVkVfVEFSR0VUW3J1bmxldmVsXSA9ICIke2Jhc2VfYmluZGlyfS9zeXN0ZW1jdGwiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbcnVubGV2ZWxdID0gIiR7YmFzZV9zYmluZGlyfS9ydW5sZXZlbCIKLUFMVEVSTkFUSVZFX1BSSU9SSVRZW3J1bmxldmVsXSA/PSAiMzAwIgotCi1wa2dfcG9zdGluc3RfJHtQTn0gKCkgewotCXNlZCAtZSAnL15ob3N0czovcy9ccypcPG15aG9zdG5hbWVcPi8vJyBcCi0JCS1lICdzL1woXmhvc3RzOi4qXClcKFw8ZmlsZXNcPlwpXCguKlwpXChcPGRuc1w+XClcKC4qXCkvXDFcMiBteWhvc3RuYW1lIFwzXDRcNS8nIFwKLQkJLWkgJEQke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYKLX0KLQotcGtnX3ByZXJtXyR7UE59ICgpIHsKLQlzZWQgLWUgJy9eaG9zdHM6L3MvXHMqXDxteWhvc3RuYW1lXD4vLycgXAotCQktZSAnL15ob3N0czovcy9ccypteWhvc3RuYW1lLy8nIFwKLQkJLWkgJEQke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYKLX0KLQotUEFDS0FHRV9XUklURV9ERVBTICs9ICJxZW11LW5hdGl2ZSIKLXBrZ19wb3N0aW5zdF91ZGV2LWh3ZGIgKCkgewotCWlmIHRlc3QgLW4gIiREIjsgdGhlbgotCQkke0BxZW11X3J1bl9iaW5hcnkoZCwgJyREJywgJyR7YmFzZV9iaW5kaXJ9L3VkZXZhZG0nKX0gaHdkYiAtLXVwZGF0ZSBcCi0JCQktLXJvb3QgJEQKLQkJY2hvd24gcm9vdDpyb290ICREJHtzeXNjb25mZGlyfS91ZGV2L2h3ZGIuYmluCi0JZWxzZQotCQl1ZGV2YWRtIGh3ZGIgLS11cGRhdGUKLQlmaQotfQotCi1wa2dfcHJlcm1fdWRldi1od2RiICgpIHsKLQlybSAtZiAkRCR7c3lzY29uZmRpcn0vdWRldi9od2RiLmJpbgotfQotCi0jIEFzIHRoaXMgcmVjaXBlIGJ1aWxkcyB1ZGV2LCByZXNwZWN0IHN5c3RlbWQgYmVpbmcgaW4gRElTVFJPX0ZFQVRVUkVTIHNvCi0jIHRoYXQgd2UgZG9uJ3QgYnVpbGQgYm90aCB1ZGV2IGFuZCBzeXN0ZW1kIGluIHdvcmxkIGJ1aWxkcy4KLXB5dGhvbiAoKSB7Ci0gICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zICgnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCBUcnVlLCBGYWxzZSwgZCk6Ci0gICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCInc3lzdGVtZCcgbm90IGluIERJU1RST19GRUFUVVJFUyIpCi0KLSAgICBpbXBvcnQgcmUKLSAgICBpZiByZS5tYXRjaCgnLiptdXNsKicsIGQuZ2V0VmFyKCdUQVJHRVRfT1MnKSkgIT0gTm9uZToKLSAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIk5vdCBfeWV0XyBzdXBwb3J0ZWQgb24gbXVzbCBiYXNlZCB0YXJnZXRzIikKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWRfMjM0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZF8yMzQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNlMjdiZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWRfMjM0LmJiCkBAIC0wLDAgKzEsNjQxIEBACityZXF1aXJlIHN5c3RlbWQuaW5jCisKK1BST1ZJREVTID0gInVkZXYiCisKK1BFID0gIjEiCisKK0RFUEVORFMgPSAia21vZCBpbnRsdG9vbC1uYXRpdmUgZ3BlcmYtbmF0aXZlIGFjbCByZWFkbGluZSBsaWJjYXAgbGliY2dyb3VwIHV0aWwtbGludXgiCisKK1NFQ1RJT04gPSAiYmFzZS9zaGVsbCIKKworaW5oZXJpdCB1c2VyYWRkIHBrZ2NvbmZpZyBhdXRvdG9vbHMgcGVybG5hdGl2ZSB1cGRhdGUtcmMuZCB1cGRhdGUtYWx0ZXJuYXRpdmVzIHFlbXUgc3lzdGVtZCBwdGVzdCBnZXR0ZXh0IGJhc2gtY29tcGxldGlvbiBtYW5wYWdlcworCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vc3lzdGVtZC9zeXN0ZW1kLmdpdDtwcm90b2NvbD1naXQgXAorICAgICAgICAgICBmaWxlOi8vdG91Y2hzY3JlZW4ucnVsZXMgXAorICAgICAgICAgICBmaWxlOi8vMDAtY3JlYXRlLXZvbGF0aWxlLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vMDAwNC1Vc2UtZ2V0ZW52LXdoZW4tc2VjdXJlLXZlcnNpb25zLWFyZS1ub3QtYXZhaWxhYmxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtYmluZm10LURvbi10LWluc3RhbGwtZGVwZW5kZW5jeS1saW5rcy1hdC1pbnN0YWxsLXRpbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA3LXVzZS1sbnItd3JhcHBlci1pbnN0ZWFkLW9mLWxvb2tpbmctZm9yLXJlbGF0aXZlLW9wdGkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMC1pbXBsbWVudC1zeXN0ZW1kLXN5c3YtaW5zdGFsbC1mb3ItT0UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMS1uc3MtbXltYWNoaW5lcy1CdWlsZC1jb25kaXRpb25hbGx5LXdoZW4tSEFWRV9NWUhPU1ROLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTItcnVsZXMtd2hpdGVsaXN0LWhkLWRldmljZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMy1NYWtlLXJvb3Qtcy1ob21lLWRpcmVjdG9yeS1jb25maWd1cmFibGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNC1SZXZlcnQtcnVsZXMtcmVtb3ZlLWZpcm13YXJlLWxvYWRpbmctcnVsZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNS1SZXZlcnQtdWRldi1yZW1vdmUtdXNlcnNwYWNlLWZpcm13YXJlLWxvYWRpbmctc3VwcG9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTctcmVtb3ZlLWR1cGxpY2F0ZS1pbmNsdWRlLXVjaGFyLmgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxOC1jaGVjay1mb3ItdWNoYXIuaC1pbi1jb25maWd1cmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxOS1zb2NrZXQtdXRpbC1kb24tdC1mYWlsLWlmLWxpYmMtZG9lc24tdC1zdXBwb3J0LUlETi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWFkZC1mYWxsYmFjay1wYXJzZV9wcmludGZfZm9ybWF0LWltcGxlbWVudGF0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItc3JjLWJhc2ljLW1pc3NpbmcuaC1jaGVjay1mb3ItbWlzc2luZy1zdHJuZHVwYS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLWRvbi10LWZhaWwtaWYtR0xPQl9CUkFDRS1hbmQtR0xPQl9BTFRESVJGVU5DLWlzLW5vdC0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC1zcmMtYmFzaWMtbWlzc2luZy5oLWNoZWNrLWZvci1taXNzaW5nLV9fY29tcGFyX2ZuX3QtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDYtSW5jbHVkZS1uZXRpbmV0LWlmX2V0aGVyLmgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNy1jaGVjay1mb3ItbWlzc2luZy1jYW5vbmljYWxpemVfZmlsZV9uYW1lLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDgtRG8tbm90LWVuYWJsZS1uc3MtdGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOS10ZXN0LWhleGRlY29jdC5jLUluY2x1ZGUtbWlzc2luZy5oLWZvcm0tc3RybmR1cGEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMC10ZXN0LXNpemVvZi5jLURpc2FibGUtdGVzdHMtZm9yLW1pc3NpbmctdHlwZWRlZnMtaW4tLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTEtZG9uLXQtdXNlLWdsaWJjLXNwZWNpZmljLXFzb3J0X3IucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMi1kb24tdC1wYXNzLUFUX1NZTUxJTktfTk9GT0xMT1ctZmxhZy10by1mYWNjZXNzYXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMy1jb21wYXJpc29uX2ZuX3QtaXMtZ2xpYmMtc3BlY2lmaWMtdXNlLXJhdy1zaWduYXR1cmUtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRGVmaW5lLV9QQVRIX1dUTVBYLWFuZC1fUEFUSF9VVE1QWC1pZi1ub3QtZGVmaW5lZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVzZS11aW50bWF4X3QtZm9yLWhhbmRsaW5nLXJsaW1fdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvcmUtZXZhbHVhdGUtcHJlc2V0cy1hZnRlci1nZW5lcmF0b3JzLWhhdmUtcnVuLTY1MjYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1tYWluLXNraXAtbWFueS1pbml0aWFsaXphdGlvbi1zdGVwcy13aGVuLXJ1bm5pbmctaW4tLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSV9hcHBlbmRfcWVtdWFsbCA9ICIgZmlsZTovLzAwMDEtY29yZS1kZXZpY2UuYy1DaGFuZ2UtdGhlLWRlZmF1bHQtZGV2aWNlLXRpbWVvdXQtdG8tMi5wYXRjaCIKKworUEFNX1BMVUdJTlMgPSAiIFwKKyAgICBwYW0tcGx1Z2luLXVuaXggXAorICAgIHBhbS1wbHVnaW4tbG9naW51aWQgXAorICAgIHBhbS1wbHVnaW4ta2V5aW5pdCBcCisiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIgXAorICAgICR7QGJiLnV0aWxzLmZpbHRlcignRElTVFJPX0ZFQVRVUkVTJywgJ2VmaSBsZGNvbmZpZyBwYW0gc2VsaW51eCB1c3JtZXJnZScsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3aWZpJywgJ3Jma2lsbCcsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3hrYmNvbW1vbicsICcnLCBkKX0gXAorICAgIGJhY2tsaWdodCBcCisgICAgYmluZm10IFwKKyAgICBmaXJzdGJvb3QgXAorICAgIGhpYmVybmF0ZSBcCisgICAgaG9zdG5hbWVkIFwKKyAgICBpbWEgXAorICAgIGxvY2FsZWQgXAorICAgIGxvZ2luZCBcCisgICAgbWFjaGluZWQgXAorICAgIG15aG9zdG5hbWUgXAorICAgIG5ldHdvcmtkIFwKKyAgICBuc3MgXAorICAgIHBvbGtpdCBcCisgICAgcXVvdGFjaGVjayBcCisgICAgcmFuZG9tc2VlZCBcCisgICAgcmVzb2x2ZWQgXAorICAgIHNtYWNrIFwKKyAgICBzeXN1c2VycyBcCisgICAgdGltZWRhdGVkIFwKKyAgICB0aW1lc3luY2QgXAorICAgIHV0bXAgXAorICAgIHZjb25zb2xlIFwKKyAgICB4eiBcCisiCisKK1BBQ0tBR0VDT05GSUdfcmVtb3ZlX2xpYmMtbXVzbCA9ICIgXAorICAgIGxvY2FsZWQgXAorICAgIG15aG9zdG5hbWUgXAorICAgIG5zcyBcCisgICAgcmVzb2x2ZWQgXAorICAgIHNlbGludXggXAorICAgIHNtYWNrIFwKKyAgICBzeXN1c2VycyBcCisgICAgdXRtcCBcCisiCisKKyMgVXNlIHRoZSB1cHN0cmVhbSBzeXN0ZW1kIHNlcmlhbC1nZXR0eUAuc2VydmljZSBhbmQgcmVseSBvbgorIyBzeXN0ZW1kLWdldHR5LWdlbmVyYXRvciBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBPRS1jb3JlIHNwZWNpZmljCisjIHN5c3RlbWQtc2VyaWFsZ2V0dHkuYmIgLSBub3QgZW5hYmxlZCBieSBkZWZhdWx0LgorUEFDS0FHRUNPTkZJR1tzZXJpYWwtZ2V0dHktZ2VuZXJhdG9yXSA9ICIiCisKK1BBQ0tBR0VDT05GSUdbYXVkaXRdID0gIi0tZW5hYmxlLWF1ZGl0LC0tZGlzYWJsZS1hdWRpdCxhdWRpdCIKK1BBQ0tBR0VDT05GSUdbYmFja2xpZ2h0XSA9ICItLWVuYWJsZS1iYWNrbGlnaHQsLS1kaXNhYmxlLWJhY2tsaWdodCIKK1BBQ0tBR0VDT05GSUdbYmluZm10XSA9ICItLWVuYWJsZS1iaW5mbXQsLS1kaXNhYmxlLWJpbmZtdCIKK1BBQ0tBR0VDT05GSUdbYnppcDJdID0gIi0tZW5hYmxlLWJ6aXAyLC0tZGlzYWJsZS1iemlwMixiemlwMiIKK1BBQ0tBR0VDT05GSUdbY29yZWR1bXBdID0gIi0tZW5hYmxlLWNvcmVkdW1wLC0tZGlzYWJsZS1jb3JlZHVtcCIKK1BBQ0tBR0VDT05GSUdbY3J5cHRzZXR1cF0gPSAiLS1lbmFibGUtbGliY3J5cHRzZXR1cCwtLWRpc2FibGUtbGliY3J5cHRzZXR1cCxjcnlwdHNldHVwIgorUEFDS0FHRUNPTkZJR1tkYnVzXSA9ICItLWVuYWJsZS1kYnVzLC0tZGlzYWJsZS1kYnVzLGRidXMiCitQQUNLQUdFQ09ORklHW2VmaV0gPSAiLS1lbmFibGUtZWZpLC0tZGlzYWJsZS1lZmkiCitQQUNLQUdFQ09ORklHW2VsZnV0aWxzXSA9ICItLWVuYWJsZS1lbGZ1dGlscywtLWRpc2FibGUtZWxmdXRpbHMsZWxmdXRpbHMiCitQQUNLQUdFQ09ORklHW2ZpcnN0Ym9vdF0gPSAiLS1lbmFibGUtZmlyc3Rib290LC0tZGlzYWJsZS1maXJzdGJvb3QiCisjIFNpZ24gdGhlIGpvdXJuYWwgZm9yIGFudGktdGFtcGVyaW5nCitQQUNLQUdFQ09ORklHW2djcnlwdF0gPSAiLS1lbmFibGUtZ2NyeXB0LC0tZGlzYWJsZS1nY3J5cHQsbGliZ2NyeXB0IgorUEFDS0FHRUNPTkZJR1toaWJlcm5hdGVdID0gIi0tZW5hYmxlLWhpYmVybmF0ZSwtLWRpc2FibGUtaGliZXJuYXRlIgorUEFDS0FHRUNPTkZJR1tob3N0bmFtZWRdID0gIi0tZW5hYmxlLWhvc3RuYW1lZCwtLWRpc2FibGUtaG9zdG5hbWVkIgorUEFDS0FHRUNPTkZJR1tpbWFdID0gIi0tZW5hYmxlLWltYSwtLWRpc2FibGUtaW1hIgorIyBpbXBvcnRkIHJlcXVpcmVzIGN1cmwveHovemxpYi9iemlwMi9nY3J5cHQKK1BBQ0tBR0VDT05GSUdbaW1wb3J0ZF0gPSAiLS1lbmFibGUtaW1wb3J0ZCwtLWRpc2FibGUtaW1wb3J0ZCIKKyMgVXBkYXRlIE5BVCBmaXJld2FsbCBydWxlcworUEFDS0FHRUNPTkZJR1tpcHRjXSA9ICItLWVuYWJsZS1saWJpcHRjLC0tZGlzYWJsZS1saWJpcHRjLGlwdGFibGVzIgorUEFDS0FHRUNPTkZJR1tqb3VybmFsLXVwbG9hZF0gPSAiLS1lbmFibGUtbGliY3VybCwtLWRpc2FibGUtbGliY3VybCxjdXJsIgorUEFDS0FHRUNPTkZJR1tsZGNvbmZpZ10gPSAiLS1lbmFibGUtbGRjb25maWcsLS1kaXNhYmxlLWxkY29uZmlnIgorUEFDS0FHRUNPTkZJR1tsaWJpZG5dID0gIi0tZW5hYmxlLWxpYmlkbiwtLWRpc2FibGUtbGliaWRuLGxpYmlkbiIKK1BBQ0tBR0VDT05GSUdbbG9jYWxlZF0gPSAiLS1lbmFibGUtbG9jYWxlZCwtLWRpc2FibGUtbG9jYWxlZCIKK1BBQ0tBR0VDT05GSUdbbG9naW5kXSA9ICItLWVuYWJsZS1sb2dpbmQsLS1kaXNhYmxlLWxvZ2luZCIKK1BBQ0tBR0VDT05GSUdbbHo0XSA9ICItLWVuYWJsZS1sejQsLS1kaXNhYmxlLWx6NCxsejQiCitQQUNLQUdFQ09ORklHW21hY2hpbmVkXSA9ICItLWVuYWJsZS1tYWNoaW5lZCwtLWRpc2FibGUtbWFjaGluZWQiCitQQUNLQUdFQ09ORklHW21hbnBhZ2VzXSA9ICItLWVuYWJsZS1tYW5wYWdlcywtLWRpc2FibGUtbWFucGFnZXMsbGlieHNsdC1uYXRpdmUgeG1sdG8tbmF0aXZlIGRvY2Jvb2steG1sLWR0ZDQtbmF0aXZlIGRvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5hdGl2ZSIKK1BBQ0tBR0VDT05GSUdbbWljcm9odHRwZF0gPSAiLS1lbmFibGUtbWljcm9odHRwZCwtLWRpc2FibGUtbWljcm9odHRwZCxsaWJtaWNyb2h0dHBkIgorUEFDS0FHRUNPTkZJR1tteWhvc3RuYW1lXSA9ICItLWVuYWJsZS1teWhvc3RuYW1lLC0tZGlzYWJsZS1teWhvc3RuYW1lIgorUEFDS0FHRUNPTkZJR1tuZXR3b3JrZF0gPSAiLS1lbmFibGUtbmV0d29ya2QsLS1kaXNhYmxlLW5ldHdvcmtkIgorUEFDS0FHRUNPTkZJR1tuc3NdID0gIi0tZW5hYmxlLW5zcy1zeXN0ZW1kLC0tZGlzYWJsZS1uc3Mtc3lzdGVtZCIKK1BBQ0tBR0VDT05GSUdbcGFtXSA9ICItLWVuYWJsZS1wYW0sLS1kaXNhYmxlLXBhbSxsaWJwYW0sJHtQQU1fUExVR0lOU30iCitQQUNLQUdFQ09ORklHW3BvbGtpdF0gPSAiLS1lbmFibGUtcG9sa2l0LC0tZGlzYWJsZS1wb2xraXQiCitQQUNLQUdFQ09ORklHW3FyZW5jb2RlXSA9ICItLWVuYWJsZS1xcmVuY29kZSwtLWRpc2FibGUtcXJlbmNvZGUscXJlbmNvZGUiCitQQUNLQUdFQ09ORklHW3F1b3RhY2hlY2tdID0gIi0tZW5hYmxlLXF1b3RhY2hlY2ssLS1kaXNhYmxlLXF1b3RhY2hlY2siCitQQUNLQUdFQ09ORklHW3JhbmRvbXNlZWRdID0gIi0tZW5hYmxlLXJhbmRvbXNlZWQsLS1kaXNhYmxlLXJhbmRvbXNlZWQiCitQQUNLQUdFQ09ORklHW3Jlc29sdmVkXSA9ICItLWVuYWJsZS1yZXNvbHZlZCwtLWRpc2FibGUtcmVzb2x2ZWQiCitQQUNLQUdFQ09ORklHW3Jma2lsbF0gPSAiLS1lbmFibGUtcmZraWxsLC0tZGlzYWJsZS1yZmtpbGwiCisjIGxpYnNlY2NvbXAgaXMgZm91bmQgaW4gbWV0YS1zZWN1cml0eQorUEFDS0FHRUNPTkZJR1tzZWNjb21wXSA9ICItLWVuYWJsZS1zZWNjb21wLC0tZGlzYWJsZS1zZWNjb21wLGxpYnNlY2NvbXAiCitQQUNLQUdFQ09ORklHW3NlbGludXhdID0gIi0tZW5hYmxlLXNlbGludXgsLS1kaXNhYmxlLXNlbGludXgsbGlic2VsaW51eCxpbml0c2NyaXB0cy1zdXNoZWxsIgorUEFDS0FHRUNPTkZJR1tzbWFja10gPSAiLS1lbmFibGUtc21hY2ssLS1kaXNhYmxlLXNtYWNrIgorUEFDS0FHRUNPTkZJR1tzeXN1c2Vyc10gPSAiLS1lbmFibGUtc3lzdXNlcnMsLS1kaXNhYmxlLXN5c3VzZXJzIgorUEFDS0FHRUNPTkZJR1t0aW1lZGF0ZWRdID0gIi0tZW5hYmxlLXRpbWVkYXRlZCwtLWRpc2FibGUtdGltZWRhdGVkIgorUEFDS0FHRUNPTkZJR1t0aW1lc3luY2RdID0gIi0tZW5hYmxlLXRpbWVzeW5jZCwtLWRpc2FibGUtdGltZXN5bmNkIgorUEFDS0FHRUNPTkZJR1t1c3JtZXJnZV0gPSAiLS1kaXNhYmxlLXNwbGl0LXVzciwtLWVuYWJsZS1zcGxpdC11c3IiCitQQUNLQUdFQ09ORklHW3V0bXBdID0gIi0tZW5hYmxlLXV0bXAsLS1kaXNhYmxlLXV0bXAiCitQQUNLQUdFQ09ORklHW3ZhbGdyaW5kXSA9ICJhY19jdl9oZWFkZXJfdmFsZ3JpbmRfbWVtY2hlY2tfaD15ZXMgYWNfY3ZfaGVhZGVyX3ZhbGdyaW5kX3ZhbGdyaW5kX2g9eWVzLGFjX2N2X2hlYWRlcl92YWxncmluZF9tZW1jaGVja19oPW5vIGFjX2N2X2hlYWRlcl92YWxncmluZF92YWxncmluZF9oPW5vLHZhbGdyaW5kIgorUEFDS0FHRUNPTkZJR1t2Y29uc29sZV0gPSAiLS1lbmFibGUtdmNvbnNvbGUsLS1kaXNhYmxlLXZjb25zb2xlLCwke1BOfS12Y29uc29sZS1zZXR1cCIKKyMgVmVyaWZ5IGtleW1hcHMgb24gbG9jYWxlIGNoYW5nZQorUEFDS0FHRUNPTkZJR1t4a2Jjb21tb25dID0gIi0tZW5hYmxlLXhrYmNvbW1vbiwtLWRpc2FibGUteGtiY29tbW9uLGxpYnhrYmNvbW1vbiIKK1BBQ0tBR0VDT05GSUdbeHpdID0gIi0tZW5hYmxlLXh6LC0tZGlzYWJsZS14eix4eiIKK1BBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS1lbmFibGUtemxpYiwtLWRpc2FibGUtemxpYix6bGliIgorCisjIEhhcmRjb2RlIHRhcmdldCBiaW5hcnkgcGF0aHMgdG8gYXZvaWQgQUNfUFJPR19QQVRIIGluIHRoZSBzeXN0ZW1kCisjIGNvbmZpZ3VyZSBzY3JpcHQgZGV0ZWN0aW5nIGFuZCBzZXR0aW5nIHBhdGhzIGZyb20gc3lzcm9vdCBvciBob3N0LgorQ0FDSEVEX0NPTkZJR1VSRVZBUlNfY2xhc3MtdGFyZ2V0ID0gIiBcCisgICAgYWNfY3ZfcGF0aF9LRVhFQz0ke3NiaW5kaXJ9L2tleGVjIFwKKyAgICBhY19jdl9wYXRoX0tJTEw9JHtiYXNlX2JpbmRpcn0va2lsbCBcCisgICAgYWNfY3ZfcGF0aF9LTU9EPSR7YmFzZV9iaW5kaXJ9L2ttb2QgXAorICAgIGFjX2N2X3BhdGhfTU9VTlRfUEFUSD0ke2Jhc2VfYmluZGlyfS9tb3VudCBcCisgICAgYWNfY3ZfcGF0aF9RVU9UQUNIRUNLPSR7c2JpbmRpcn0vcXVvdGFjaGVjayBcCisgICAgYWNfY3ZfcGF0aF9RVU9UQU9OPSR7c2JpbmRpcn0vcXVvdGFvbiBcCisgICAgYWNfY3ZfcGF0aF9TVUxPR0lOPSR7YmFzZV9zYmluZGlyfS9zdWxvZ2luIFwKKyAgICBhY19jdl9wYXRoX1VNT1VOVF9QQVRIPSR7YmFzZV9iaW5kaXJ9L3Vtb3VudCBcCisiCisKKyMgSGVscGVyIHZhcmlhYmxlcyB0byBjbGFyaWZ5IGxvY2F0aW9ucy4gIFRoaXMgbWlycm9ycyB0aGUgbG9naWMgaW4gc3lzdGVtZCdzCisjIGJ1aWxkIHN5c3RlbS4KK3Jvb3RwcmVmaXggPz0gIiR7cm9vdF9wcmVmaXh9Igorcm9vdGxpYmRpciA/PSAiJHtiYXNlX2xpYmRpcn0iCityb290bGliZXhlY2RpciA9ICIke3Jvb3RwcmVmaXh9L2xpYiIKKworRVhUUkFfT0VDT05GID0gIiBcCisgICAgLS13aXRob3V0LXB5dGhvbiBcCisgICAgLS13aXRoLXJvb3Rob21lZGlyPSR7Uk9PVF9IT01FfSBcCisgICAgLS13aXRoLXJvb3RsaWJkaXI9JHtyb290bGliZGlyfSBcCisgICAgLS13aXRoLXJvb3RwcmVmaXg9JHtyb290cHJlZml4fSBcCisgICAgLS13aXRoLXN5c3ZyY25kLXBhdGg9JHtzeXNjb25mZGlyfSBcCisgICAgLS13aXRoLWZpcm13YXJlLXBhdGg9JHtub25hcmNoX2Jhc2VfbGliZGlyfS9maXJtd2FyZSBcCisiCisKKyMgcGVyIHRoZSBzeXN0ZW1kIFJFQURNRSwgZGVmaW5lIFZBTEdSSU5EPTEgdG8gcnVuIHVuZGVyIHZhbGdyaW5kCitDRkxBR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3ZhbGdyaW5kJywgJyAtRFZBTEdSSU5EPTEnLCAnJywgZCl9IgorCisjIGRpc2FibGUgcHJvYmxlbWF0aWMgR0NDIDUuMiBvcHRpbWl6YXRpb25zIFtZT0NUTyAjODI5MV0KK0ZVTExfT1BUSU1JWkFUSU9OX2FwcGVuZF9hcm0gPSAiIC1mbm8tc2NoZWR1bGUtaW5zbnMgLWZuby1zY2hlZHVsZS1pbnNuczIiCisKK0NPTVBJTEVSX05NID89ICIke0hPU1RfUFJFRklYfWdjYy1ubSIKK0NPTVBJTEVSX0FSID89ICIke0hPU1RfUFJFRklYfWdjYy1hciIKK0NPTVBJTEVSX1JBTkxJQiA/PSAiJHtIT1NUX1BSRUZJWH1nY2MtcmFubGliIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlleHBvcnQgTk09IiR7Q09NUElMRVJfTk19IgorCWV4cG9ydCBBUj0iJHtDT01QSUxFUl9BUn0iCisJZXhwb3J0IFJBTkxJQj0iJHtDT01QSUxFUl9SQU5MSUJ9IgorCWV4cG9ydCBLTU9EPSIke2Jhc2VfYmluZGlyfS9rbW9kIgorCWlmIFsgLWQgJHtTfS91bml0cy5wcmVfc2VkIF0gOyB0aGVuCisJCWNwIC1yICR7U30vdW5pdHMucHJlX3NlZCAke1N9L3VuaXRzCisJZWxzZQorCQljcCAtciAke1N9L3VuaXRzICR7U30vdW5pdHMucHJlX3NlZAorCWZpCisJc2VkIC1pIC1lICdzOi1EVEVTVF9ESVI9XFxcIi4qXFxcIjotRFRFU1RfRElSPVxcXCIke1BURVNUX1BBVEh9L3Rlc3RzL3Rlc3RcXFwiOicgJHtTfS9NYWtlZmlsZS5hbQorCXNlZCAtaSAtZSAnczotRENBVEFMT0dfRElSPVxcXCIuKlxcXCI6LURDQVRBTE9HX0RJUj1cXFwiJHtQVEVTVF9QQVRIfS90ZXN0cy9jYXRhbG9nXFxcIjonICR7U30vTWFrZWZpbGUuYW0KK30KKworZG9faW5zdGFsbCgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfS8ke2Jhc2Vfc2JpbmRpcn0KKwlpZiAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdzZXJpYWwtZ2V0dHktZ2VuZXJhdG9yJywgJ2ZhbHNlJywgJ3RydWUnLCBkKX07IHRoZW4KKwkJIyBQcm92aWRlZCBieSBhIHNlcGFyYXRlIHJlY2lwZQorCQlybSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zZXJpYWwtZ2V0dHkqIC1mCisJZmkKKworCSMgUHJvdmlkZSBzdXBwb3J0IGZvciBpbml0cmFtZnMKKwlbICEgLWUgJHtEfS9pbml0IF0gJiYgbG4gLXMgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kICR7RH0vaW5pdAorCVsgISAtZSAke0R9LyR7YmFzZV9zYmluZGlyfS91ZGV2ZCBdICYmIGxuIC1zICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC11ZGV2ZCAke0R9LyR7YmFzZV9zYmluZGlyfS91ZGV2ZAorCisJIyBDcmVhdGUgbWFjaGluZS1pZAorCSMgMjA6MTIgPCBtZXpjYWxlcm8+IGtvZW46IHlvdSBoYXZlIHRocmVlIG9wdGlvbnM6IGEpIHJ1biBzeXN0ZW1kLW1hY2hpbmUtaWQtc2V0dXAgYXQgaW5zdGFsbCB0aW1lLCBiKSBoYXZlIC8gcmVhZC1vbmx5IGFuZCBhbiBlbXB0eSBmaWxlIHRoZXJlIChmb3Igc3RhdGVsZXNzKSBhbmQgYykgYm9vdCB3aXRoIC8gd3JpdGFibGUKKwl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9tYWNoaW5lLWlkCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZC8KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS8qLnJ1bGVzICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZC8KKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnCisJaW5zdGFsbCAtbSAwNjQ0ICR7Qn0vc3JjL3VkZXYvdWRldi5wYyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8KKworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9LzAwLWNyZWF0ZS12b2xhdGlsZS5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQvCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdmluaXQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9zeXN0ZW1kLXVkZXZkCisJCXNlZCAtaSBzJUBVREVWREAlJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLXVkZXZkJSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvc3lzdGVtZC11ZGV2ZAorCWZpCisKKwljaG93biByb290OnN5c3RlbWQtam91cm5hbCAke0R9LyR7bG9jYWxzdGF0ZWRpcn0vbG9nL2pvdXJuYWwKKworCSMgRGVsZXRlIGpvdXJuYWwgUkVBRE1FLCBhcyBsb2cgY2FuIGJlIHN5bWxpbmtlZCBpbnNpZGUgdm9sYXRpbGUuCisJcm0gLWYgJHtEfS8ke2xvY2Fsc3RhdGVkaXJ9L2xvZy9SRUFETUUKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZ3JhcGhpY2FsLnRhcmdldC53YW50cworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbXVsdGktdXNlci50YXJnZXQud2FudHMKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3Bvd2Vyb2ZmLnRhcmdldC53YW50cworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcmVib290LnRhcmdldC53YW50cworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcmVzY3VlLnRhcmdldC53YW50cworCisJIyBDcmVhdGUgc3ltbGlua3MgZm9yIHN5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZQorCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3V0bXAnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorCQlsbiAtc2YgLi4vc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2dyYXBoaWNhbC50YXJnZXQud2FudHMvc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlCisJCWxuIC1zZiAuLi9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbXVsdGktdXNlci50YXJnZXQud2FudHMvc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlCisJCWxuIC1zZiAuLi9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcG93ZXJvZmYudGFyZ2V0LndhbnRzL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZQorCQlsbiAtc2YgLi4vc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3JlYm9vdC50YXJnZXQud2FudHMvc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlCisJCWxuIC1zZiAuLi9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcmVzY3VlLnRhcmdldC53YW50cy9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UKKwlmaQorCisJIyBFbmFibGUgam91cm5hbCB0byBmb3J3YXJkIG1lc3NhZ2UgdG8gc3lzbG9nIGRhZW1vbgorCXNlZCAtaSAtZSAncy8uKkZvcndhcmRUb1N5c2xvZy4qL0ZvcndhcmRUb1N5c2xvZz15ZXMvJyAke0R9JHtzeXNjb25mZGlyfS9zeXN0ZW1kL2pvdXJuYWxkLmNvbmYKKwkjIFNldCB0aGUgbWF4aW1pdW0gc2l6ZSBvZiBydW50aW1lIGpvdXJuYWwgdG8gNjRNIGFzIGRlZmF1bHQKKwlzZWQgLWkgLWUgJ3MvLipSdW50aW1lTWF4VXNlLiovUnVudGltZU1heFVzZT02NE0vJyAke0R9JHtzeXNjb25mZGlyfS9zeXN0ZW1kL2pvdXJuYWxkLmNvbmYKKworCSMgdGhpcyBmaWxlIGlzIG5lZWRlZCB0byBleGlzdCBpZiBuZXR3b3JrZCBpcyBkaXNhYmxlZCBidXQgdGltZXN5bmNkIGlzIHN0aWxsIGluIHVzZSBzaW5jZSB0aW1lc3luY2QgY2hlY2tzIGl0CisJIyBmb3IgZXhpc3RlbmNlIGVsc2UgaXQgZmFpbHMKKwlpZiBbIC1zICR7RH0ke2V4ZWNfcHJlZml4fS9saWIvdG1wZmlsZXMuZC9zeXN0ZW1kLmNvbmYgXTsgdGhlbgorCQkke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICduZXR3b3JrZCcsICc6JywgJ3NlZCAtaSAtZSAiXCRhZCAvcnVuL3N5c3RlbWQvbmV0aWYvbGlua3MgMDc1NSByb290IHJvb3QgLSIgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYi90bXBmaWxlcy5kL3N5c3RlbWQuY29uZicsIGQpfQorCWZpCisJaWYgISAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdyZXNvbHZlZCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisJCWVjaG8gJ0whICR7c3lzY29uZmRpcn0vcmVzb2x2LmNvbmYgLSAtIC0gLSAuLi9ydW4vc3lzdGVtZC9yZXNvbHZlL3Jlc29sdi5jb25mJyA+PiR7RH0ke2V4ZWNfcHJlZml4fS9saWIvdG1wZmlsZXMuZC9ldGMuY29uZgorCQllY2hvICdkIC9ydW4vc3lzdGVtZC9yZXNvbHZlIDA3NTUgcm9vdCByb290IC0nID4+JHtEfSR7ZXhlY19wcmVmaXh9L2xpYi90bXBmaWxlcy5kL3N5c3RlbWQuY29uZgorCQllY2hvICdmIC9ydW4vc3lzdGVtZC9yZXNvbHZlL3Jlc29sdi5jb25mIDA2NDQgcm9vdCByb290JyA+PiR7RH0ke2V4ZWNfcHJlZml4fS9saWIvdG1wZmlsZXMuZC9zeXN0ZW1kLmNvbmYKKwkJbG4gLXMgLi4vcnVuL3N5c3RlbWQvcmVzb2x2ZS9yZXNvbHYuY29uZiAke0R9JHtzeXNjb25mZGlyfS9yZXNvbHYtY29uZi5zeXN0ZW1kCisJZWxzZQorCQlzZWQgLWkgLWUgInMlXkwhIC9ldGMvcmVzb2x2LmNvbmYuKiQlTCEgL2V0Yy9yZXNvbHYuY29uZiAtIC0gLSAtIC4uL3J1bi9zeXN0ZW1kL3Jlc29sdmUvcmVzb2x2LmNvbmYlZyIgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYi90bXBmaWxlcy5kL2V0Yy5jb25mCisJCWxuIC1zIC4uL3J1bi9zeXN0ZW1kL3Jlc29sdmUvcmVzb2x2LmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vcmVzb2x2LWNvbmYuc3lzdGVtZAorCWZpCisJaW5zdGFsbCAtRG0gMDc1NSAke1N9L3NyYy9zeXN0ZW1jdGwvc3lzdGVtZC1zeXN2LWluc3RhbGwuU0tFTEVUT04gJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW1kLXN5c3YtaW5zdGFsbAorCisJIyBJZiBwb2xraXQgaXMgc2V0dXAgZml4dXAgcGVybWlzc2lvbnMgYW5kIG93bmVyc2hpcAorCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3BvbGtpdCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisJCWlmIFsgLWQgJHtEfSR7ZGF0YWRpcn0vcG9sa2l0LTEvcnVsZXMuZCBdOyB0aGVuCisJCQljaG1vZCA3MDAgJHtEfSR7ZGF0YWRpcn0vcG9sa2l0LTEvcnVsZXMuZAorCQkJY2hvd24gcG9sa2l0ZDpyb290ICR7RH0ke2RhdGFkaXJ9L3BvbGtpdC0xL3J1bGVzLmQKKwkJZmkKKwlmaQorfQorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKwkjIGluc3RhbGwgZGF0YSBmaWxlcyBuZWVkZWQgZm9yIHRlc3RzCisJaW5zdGFsbCAtZCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy90ZXN0CisJY3AgLXJmTCAke1N9L3Rlc3QvKiAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy90ZXN0CisJIyBweXRob24gaXMgZGlzYWJsZWQgZm9yIHN5c3RlbWQsIHRodXMgcmVtb3ZpbmcgdGhlc2UgcHl0aG9uIHRlc3Rpbmcgc2NyaXB0cworCXJtICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL3Rlc3QvKi5weQorCXNlZCAtaSAncy8idHJlZSIvImxzIi8nICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL3Rlc3QvdWRldi10ZXN0LnBsCisKKwlpbnN0YWxsIC1kICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL2NhdGFsb2cKKwlpbnN0YWxsICR7U30vY2F0YWxvZy8qICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL2NhdGFsb2cvCisKKwlpbnN0YWxsIC1EICR7U30vYnVpbGQtYXV4L3Rlc3QtZHJpdmVyICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL2J1aWxkLWF1eC90ZXN0LWRyaXZlcgorCisJaW5zdGFsbCAtZCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy9ydWxlcworCWluc3RhbGwgJHtCfS9ydWxlcy8qICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL3J1bGVzLworCisJIyBUaGlzIGRpcmVjdG9yeSBuZWVkcyB0byBiZSB0aGVyZSBmb3IgdWRldi10ZXN0LnBsIHRvIHdvcmsuCisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L3VkZXYvcnVsZXMuZAorCisJIyBpbnN0YWxsIGFjdHVhbCB0ZXN0IGJpbmFyaWVzCisJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vdGVzdC0qICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzLworCWluc3RhbGwgLW0gMDc1NSAke0J9Ly5saWJzL3Rlc3QtKiAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy8KKworCWluc3RhbGwgJHtCfS9NYWtlZmlsZSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy8KK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCl7CisgICAgc3lzdGVtZGxpYmRpciA9IGQuZ2V0VmFyKCJyb290bGliZGlyIikKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBzeXN0ZW1kbGliZGlyLCAnXmxpYiguKilcLnNvXC4qJywgJ2xpYiVzJywgJ1N5c3RlbWQgJXMgbGlicmFyeScsIGV4dHJhX2RlcGVuZHM9JycsIGFsbG93X2xpbmtzPVRydWUpCit9CitQQUNLQUdFU19EWU5BTUlDICs9ICJebGliKHVkZXZ8c3lzdGVtZHxuc3MpLioiCisKK1BBQ0tBR0VTID0rICJcCisgICAgJHtQTn0tZ3VpIFwKKyAgICAke1BOfS12Y29uc29sZS1zZXR1cCBcCisgICAgJHtQTn0taW5pdHJhbWZzIFwKKyAgICAke1BOfS1hbmFseXplIFwKKyAgICAke1BOfS1rZXJuZWwtaW5zdGFsbCBcCisgICAgJHtQTn0tcnBtLW1hY3JvcyBcCisgICAgJHtQTn0tYmluZm10IFwKKyAgICAke1BOfS16c2gtY29tcGxldGlvbiBcCisgICAgJHtQTn0teG9yZy14aW5pdHJjIFwKKyAgICAke1BOfS1jb250YWluZXIgXAorICAgICR7UE59LWV4dHJhLXV0aWxzIFwKKyIKKworU1VNTUFSWV8ke1BOfS1jb250YWluZXIgPSAiVG9vbHMgZm9yIGNvbnRhaW5lcnMgYW5kIFZNcyIKK0RFU0NSSVBUSU9OXyR7UE59LWNvbnRhaW5lciA9ICJTeXN0ZW1kIHRvb2xzIHRvIHNwYXduIGFuZCBtYW5hZ2UgY29udGFpbmVycyBhbmQgdmlydHVhbCBtYWNoaW5lcy4iCisKK1NZU1RFTURfUEFDS0FHRVMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnYmluZm10JywgJyR7UE59LWJpbmZtdCcsICcnLCBkKX0iCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tYmluZm10ID0gInN5c3RlbWQtYmluZm10LnNlcnZpY2UiCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0gJHtQTn0tZXh0cmEtdXRpbHMiCitVU0VSQUREX1BBUkFNXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdtaWNyb2h0dHBkJywgJy0tc3lzdGVtIC1kIC8gLU0gLS1zaGVsbCAvYmluL25vbG9naW4gc3lzdGVtZC1qb3VybmFsLWdhdGV3YXk7JywgJycsIGQpfSIKK1VTRVJBRERfUEFSQU1fJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ21pY3JvaHR0cGQnLCAnLS1zeXN0ZW0gLWQgLyAtTSAtLXNoZWxsIC9iaW4vbm9sb2dpbiBzeXN0ZW1kLWpvdXJuYWwtcmVtb3RlOycsICcnLCBkKX0iCitVU0VSQUREX1BBUkFNXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdqb3VybmFsLXVwbG9hZCcsICctLXN5c3RlbSAtZCAvIC1NIC0tc2hlbGwgL2Jpbi9ub2xvZ2luIHN5c3RlbWQtam91cm5hbC11cGxvYWQ7JywgJycsIGQpfSIKK1VTRVJBRERfUEFSQU1fJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3RpbWVzeW5jZCcsICctLXN5c3RlbSAtZCAvIC1NIC0tc2hlbGwgL2Jpbi9ub2xvZ2luIHN5c3RlbWQtdGltZXN5bmM7JywgJycsIGQpfSIKK1VTRVJBRERfUEFSQU1fJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ25ldHdvcmtkJywgJy0tc3lzdGVtIC1kIC8gLU0gLS1zaGVsbCAvYmluL25vbG9naW4gc3lzdGVtZC1uZXR3b3JrOycsICcnLCBkKX0iCitVU0VSQUREX1BBUkFNXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdjb3JlZHVtcCcsICctLXN5c3RlbSAtZCAvIC1NIC0tc2hlbGwgL2Jpbi9ub2xvZ2luIHN5c3RlbWQtY29yZWR1bXA7JywgJycsIGQpfSIKK1VTRVJBRERfUEFSQU1fJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3Jlc29sdmVkJywgJy0tc3lzdGVtIC1kIC8gLU0gLS1zaGVsbCAvYmluL25vbG9naW4gc3lzdGVtZC1yZXNvbHZlOycsICcnLCBkKX0iCitVU0VSQUREX1BBUkFNXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwb2xraXQnLCAnLS1zeXN0ZW0gLS1uby1jcmVhdGUtaG9tZSAtLXVzZXItZ3JvdXAgLS1ob21lLWRpciAke3N5c2NvbmZkaXJ9L3BvbGtpdC0xIHBvbGtpdGQ7JywgJycsIGQpfSIKK0dST1VQQUREX1BBUkFNXyR7UE59ID0gIi1yIGxvY2s7IC1yIHN5c3RlbWQtam91cm5hbCIKK1VTRVJBRERfUEFSQU1fJHtQTn0tZXh0cmEtdXRpbHMgKz0gIi0tc3lzdGVtIC1kIC8gLU0gLS1zaGVsbCAvYmluL25vbG9naW4gc3lzdGVtZC1idXMtcHJveHk7IgorCitGSUxFU18ke1BOfS1hbmFseXplID0gIiR7YmluZGlyfS9zeXN0ZW1kLWFuYWx5emUiCisKK0ZJTEVTXyR7UE59LWluaXRyYW1mcyA9ICIvaW5pdCIKK1JERVBFTkRTXyR7UE59LWluaXRyYW1mcyA9ICIke1BOfSIKKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gImdhd2sgbWFrZSBwZXJsIGJhc2ggeHogXAorICAgICAgICAgICAgICAgICAgICAgICAgIHR6ZGF0YSB0emRhdGEtYW1lcmljYXMgdHpkYXRhLWFzaWEgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHR6ZGF0YS1ldXJvcGUgdHpkYXRhLWFmcmljYSB0emRhdGEtYW50YXJjdGljYSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgdHpkYXRhLWFyY3RpYyB0emRhdGEtYXRsYW50aWMgdHpkYXRhLWF1c3RyYWxpYSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgdHpkYXRhLXBhY2lmaWMgdHpkYXRhLXBvc2l4IgorCitGSUxFU18ke1BOfS1wdGVzdCArPSAiJHtsaWJkaXJ9L3VkZXYvcnVsZXMuZCIKKworRklMRVNfJHtQTn0tZ3VpID0gIiR7YmluZGlyfS9zeXN0ZW1hZG0iCisKK0ZJTEVTXyR7UE59LXZjb25zb2xlLXNldHVwID0gIiR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC12Y29uc29sZS1zZXR1cCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtdmNvbnNvbGUtc2V0dXAuc2VydmljZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c2luaXQudGFyZ2V0LndhbnRzL3N5c3RlbWQtdmNvbnNvbGUtc2V0dXAuc2VydmljZSIKKworUkRFUEVORFNfJHtQTn0ta2VybmVsLWluc3RhbGwgKz0gImJhc2giCitGSUxFU18ke1BOfS1rZXJuZWwtaW5zdGFsbCA9ICIke2JpbmRpcn0va2VybmVsLWluc3RhbGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9rZXJuZWwvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi9rZXJuZWwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCitGSUxFU18ke1BOfS1ycG0tbWFjcm9zID0gIiR7ZXhlY19wcmVmaXh9L2xpYi9ycG0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICIKKworRklMRVNfJHtQTn0teG9yZy14aW5pdHJjID0gIiR7c3lzY29uZmRpcn0vWDExL3hpbml0L3hpbml0cmMuZC8qIgorCitGSUxFU18ke1BOfS16c2gtY29tcGxldGlvbiA9ICIke2RhdGFkaXJ9L3pzaC9zaXRlLWZ1bmN0aW9ucyIKKworRklMRVNfJHtQTn0tYmluZm10ID0gIiR7c3lzY29uZmRpcn0vYmluZm10LmQvIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvYmluZm10LmQgXAorICAgICAgICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC1iaW5mbXQgXAorICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcHJvYy1zeXMtZnMtYmluZm10X21pc2MuKiBcCisgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlIgorUlJFQ09NTUVORFNfJHtQTn0tYmluZm10ID0gImtlcm5lbC1tb2R1bGUtYmluZm10LW1pc2MiCisKK1JSRUNPTU1FTkRTXyR7UE59LXZjb25zb2xlLXNldHVwID0gImtiZCBrYmQtY29uc29sZWZvbnRzIGtiZC1rZXltYXBzIgorCitGSUxFU18ke1BOfS1jb250YWluZXIgPSAiJHtzeXNjb25mZGlyfS9kYnVzLTEvc3lzdGVtLmQvb3JnLmZyZWVkZXNrdG9wLmltcG9ydDEuY29uZiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9kYnVzLTEvc3lzdGVtLmQvb3JnLmZyZWVkZXNrdG9wLm1hY2hpbmUxLmNvbmYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7YmFzZV9iaW5kaXJ9L21hY2hpbmVjdGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9zeXN0ZW1kLW5zcGF3biBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtub25hcmNoX2xpYmRpcn0vc3lzdGVtZC9pbXBvcnQtcHVicmluZy5ncGcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vYnVzbmFtZXMudGFyZ2V0LndhbnRzL29yZy5mcmVlZGVza3RvcC5pbXBvcnQxLmJ1c25hbWUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vYnVzbmFtZXMudGFyZ2V0LndhbnRzL29yZy5mcmVlZGVza3RvcC5tYWNoaW5lMS5idXNuYW1lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9L2xvY2FsLWZzLnRhcmdldC53YW50cy92YXItbGliLW1hY2hpbmVzLm1vdW50IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9L21hY2hpbmUuc2xpY2UgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vbWFjaGluZXMudGFyZ2V0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9L29yZy5mcmVlZGVza3RvcC5pbXBvcnQxLmJ1c25hbWUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vb3JnLmZyZWVkZXNrdG9wLm1hY2hpbmUxLmJ1c25hbWUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vc3lzdGVtZC1pbXBvcnRkLnNlcnZpY2UgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vc3lzdGVtZC1tYWNoaW5lZC5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9L2RidXMtb3JnLmZyZWVkZXNrdG9wLm1hY2hpbmUxLnNlcnZpY2UgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vdmFyLWxpYi1tYWNoaW5lcy5tb3VudCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLWltcG9ydCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLWltcG9ydGQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC1qb3VybmFsLWdhdGV3YXlkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtam91cm5hbC1yZW1vdGUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC1qb3VybmFsLXVwbG9hZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLW1hY2hpbmVkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtcHVsbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL3RtcGZpbGVzLmQvc3lzdGVtZC1uc3Bhd24uY29uZiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfS9zeXN0ZW1kLW5zcGF3bkAuc2VydmljZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYm5zc19teW1hY2hpbmVzLnNvLjIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcy9vcmcuZnJlZWRlc2t0b3AuaW1wb3J0MS5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0tc2VydmljZXMvb3JnLmZyZWVkZXNrdG9wLm1hY2hpbmUxLnNlcnZpY2UgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS5kL29yZy5mcmVlZGVza3RvcC5tYWNoaW5lMS5jb25mIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3BvbGtpdC0xL2FjdGlvbnMvb3JnLmZyZWVkZXNrdG9wLmltcG9ydDEucG9saWN5IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3BvbGtpdC0xL2FjdGlvbnMvb3JnLmZyZWVkZXNrdG9wLm1hY2hpbmUxLnBvbGljeSBcCisgICAgICAgICAgICAgICAgICAgICAgICAiCisKK0ZJTEVTXyR7UE59LWV4dHJhLXV0aWxzID0gIlwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7YmFzZV9iaW5kaXJ9L3N5c3RlbWQtZXNjYXBlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7YmFzZV9iaW5kaXJ9L3N5c3RlbWQtaW5oaWJpdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vc3lzdGVtZC1kZXRlY3QtdmlydCBcCisgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vc3lzdGVtZC1wYXRoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9zeXN0ZW1kLXJ1biBcCisgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vc3lzdGVtZC1jYXQgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3N5c3RlbWQtZGVsdGEgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3N5c3RlbWQtY2dscyBcCisgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vc3lzdGVtZC1jZ3RvcCBcCisgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vc3lzdGVtZC1zdGRpby1icmlkZ2UgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtiYXNlX2JpbmRpcn0vc3lzdGVtZC1hc2stcGFzc3dvcmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtiYXNlX2JpbmRpcn0vc3lzdGVtZC10dHktYXNrLXBhc3N3b3JkLWFnZW50IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzdGVtZC1hc2stcGFzc3dvcmQtY29uc29sZS5wYXRoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzdGVtZC1hc2stcGFzc3dvcmQtY29uc29sZS5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzdGVtZC1hc2stcGFzc3dvcmQtd2FsbC5wYXRoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzdGVtZC1hc2stcGFzc3dvcmQtd2FsbC5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzaW5pdC50YXJnZXQud2FudHMvc3lzdGVtZC1hc2stcGFzc3dvcmQtY29uc29sZS5wYXRoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzaW5pdC50YXJnZXQud2FudHMvc3lzdGVtZC1hc2stcGFzc3dvcmQtd2FsbC5wYXRoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbXVsdGktdXNlci50YXJnZXQud2FudHMvc3lzdGVtZC1hc2stcGFzc3dvcmQtd2FsbC5wYXRoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC1yZXNvbHZlLWhvc3QgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLWFjLXBvd2VyIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC1hY3RpdmF0ZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtYnVzLXByb3h5ZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtYnVzLXByb3h5ZC5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzdGVtZC1idXMtcHJveHlkLnNvY2tldCBcCisgICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtc29ja2V0LXByb3h5ZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtcmVwbHktcGFzc3dvcmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLXNsZWVwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtLXNsZWVwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzdGVtZC1oaWJlcm5hdGUuc2VydmljZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtaHlicmlkLXNsZWVwLnNlcnZpY2UgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXN0ZW1kLXN1c3BlbmQuc2VydmljZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NsZWVwLnRhcmdldCBcCisgICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtaW5pdGN0bCBcCisgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtaW5pdGN0bC5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzdGVtZC1pbml0Y3RsLnNvY2tldCBcCisgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NvY2tldHMudGFyZ2V0LndhbnRzL3N5c3RlbWQtaW5pdGN0bC5zb2NrZXQgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW0tZ2VuZXJhdG9ycy9zeXN0ZW1kLWdwdC1hdXRvLWdlbmVyYXRvciBcCisgICAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtY2dyb3Vwcy1hZ2VudCBcCisiCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L21hY2hpbmUtaWQgXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vc3lzdGVtZC9jb3JlZHVtcC5jb25mIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3N5c3RlbWQvam91cm5hbGQuY29uZiBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9zeXN0ZW1kL2xvZ2luZC5jb25mIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3N5c3RlbWQvc3lzdGVtLmNvbmYgXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vc3lzdGVtZC91c2VyLmNvbmYiCisKK0ZJTEVTXyR7UE59ID0gIiAke2Jhc2VfYmluZGlyfS8qIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zZXJ2aWNlcyBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3BvbGtpdC0xIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9LyR7QlBOfSBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9mYWN0b3J5IFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2RidXMtMS8gXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vbWFjaGluZS1pZCBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9tb2R1bGVzLWxvYWQuZC8gXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vcGFtLmQvIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3N5c2N0bC5kLyBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9zeXN0ZW1kLyBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS90bXBmaWxlcy5kLyBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS94ZGcvIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2luaXQuZC9SRUFETUUgXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vcmVzb2x2LWNvbmYuc3lzdGVtZCBcCisgICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC8qIFwKKyAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vKiBcCisgICAgICAgICAgICAgICAgJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvKi5zbyBcCisgICAgICAgICAgICAgICAgL2Nncm91cCBcCisgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3N5c3RlbWQqIFwKKyAgICAgICAgICAgICAgICAke2JpbmRpcn0vYnVzY3RsIFwKKyAgICAgICAgICAgICAgICAke2JpbmRpcn0vY29yZWR1bXBjdGwgXAorICAgICAgICAgICAgICAgICR7YmluZGlyfS9sb2NhbGVjdGwgXAorICAgICAgICAgICAgICAgICR7YmluZGlyfS9ob3N0bmFtZWN0bCBcCisgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3RpbWVkYXRlY3RsIFwKKyAgICAgICAgICAgICAgICAke2JpbmRpcn0vYm9vdGN0bCBcCisgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2tlcm5lbC1pbnN0YWxsIFwKKyAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvdG1wZmlsZXMuZC8qLmNvbmYgXAorICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi9zeXN0ZW1kIFwKKyAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvbW9kdWxlcy1sb2FkLmQgXAorICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi9zeXNjdGwuZCBcCisgICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL3N5c3VzZXJzLmQgXAorICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi9lbnZpcm9ubWVudC5kIFwKKyAgICAgICAgICAgICAgICAke2xvY2Fsc3RhdGVkaXJ9IFwKKyAgICAgICAgICAgICAgICAke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvcnVsZXMuZC83MC11YWNjZXNzLnJ1bGVzIFwKKyAgICAgICAgICAgICAgICAke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvcnVsZXMuZC83MS1zZWF0LnJ1bGVzIFwKKyAgICAgICAgICAgICAgICAke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvcnVsZXMuZC83My1zZWF0LWxhdGUucnVsZXMgXAorICAgICAgICAgICAgICAgICR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi9ydWxlcy5kLzk5LXN5c3RlbWQucnVsZXMgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS5kL29yZy5mcmVlZGVza3RvcC50aW1lZGF0ZTEuY29uZiBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLmQvb3JnLmZyZWVkZXNrdG9wLmxvY2FsZTEuY29uZiBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLmQvb3JnLmZyZWVkZXNrdG9wLm5ldHdvcmsxLmNvbmYgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS5kL29yZy5mcmVlZGVza3RvcC5yZXNvbHZlMS5jb25mIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0uZC9vcmcuZnJlZWRlc2t0b3Auc3lzdGVtZDEuY29uZiBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLmQvb3JnLmZyZWVkZXNrdG9wLmhvc3RuYW1lMS5jb25mIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0uZC9vcmcuZnJlZWRlc2t0b3AubG9naW4xLmNvbmYgXAorICAgICAgICAgICAgICAgIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5LyoubGEgJHtkYXRhZGlyfS9kYnVzLTEvaW50ZXJmYWNlcy8gJHtzeXNjb25mZGlyfS9ycG0vbWFjcm9zLnN5c3RlbWQiCisKK1JERVBFTkRTXyR7UE59ICs9ICJrbW9kIGRidXMgdXRpbC1saW51eC1tb3VudCB1ZGV2ICg9ICR7RVhURU5EUEtHVn0pIHV0aWwtbGludXgtYWdldHR5IgorUkRFUEVORFNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3NlcmlhbC1nZXR0eS1nZW5lcmF0b3InLCAnJywgJ3N5c3RlbWQtc2VyaWFsZ2V0dHknLCBkKX0iCitSREVQRU5EU18ke1BOfSArPSAidm9sYXRpbGUtYmluZHMgdXBkYXRlLXJjLmQiCisKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICJzeXN0ZW1kLWV4dHJhLXV0aWxzIFwKKyAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1kLWNvbXBhdC11bml0cyB1ZGV2LWh3ZGIgXAorICAgICAgICAgICAgICAgICAgICAgIHV0aWwtbGludXgtZnNjayBlMmZzcHJvZ3MtZTJmc2NrIFwKKyAgICAgICAgICAgICAgICAgICAgICBrZXJuZWwtbW9kdWxlLWF1dG9mczQga2VybmVsLW1vZHVsZS11bml4IGtlcm5lbC1tb2R1bGUtaXB2NiBcCisgICAgICAgICAgICAgICAgICAgICAgb3MtcmVsZWFzZSBcCisiCisKK0lOU0FORV9TS0lQXyR7UE59ICs9ICJkZXYtc28gbGliZGlyIgorSU5TQU5FX1NLSVBfJHtQTn0tZGJnICs9ICJsaWJkaXIiCitJTlNBTkVfU0tJUF8ke1BOfS1kb2MgKz0gIiBsaWJkaXIiCisKK1BBQ0tBR0VTID0rICJ1ZGV2IHVkZXYtaHdkYiIKKworUlBST1ZJREVTX3VkZXYgPSAiaG90cGx1ZyIKKworUkRFUEVORFNfdWRldi1od2RiICs9ICJ1ZGV2IgorCitGSUxFU191ZGV2ICs9ICIke2Jhc2Vfc2JpbmRpcn0vdWRldmQgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLXVkZXZkIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvYWNjZWxlcm9tZXRlciBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2F0YV9pZCBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2Nkcm9tX2lkIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvY29sbGVjdCBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2ZpbmRrZXlib2FyZHMgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9rZXlib2FyZC1mb3JjZS1yZWxlYXNlLnNoIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYva2V5bWFwIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvbXRkX3Byb2JlIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvc2NzaV9pZCBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L3Y0bF9pZCBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2tleW1hcHMgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9ydWxlcy5kLyoucnVsZXMgXAorICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS91ZGV2IFwKKyAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c3RlbWQtdWRldmQgXAorICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8qdWRldiogXAorICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8qLndhbnRzLyp1ZGV2KiBcCisgICAgICAgICAgICAgICAke2Jhc2VfYmluZGlyfS91ZGV2YWRtIFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYmFzaC1jb21wbGV0aW9uL2NvbXBsZXRpb25zL3VkZXZhZG0gXAorICAgICAgICAgICAgICAiCisKK0ZJTEVTX3VkZXYtaHdkYiA9ICIke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2h3ZGIuZCIKKworSU5JVFNDUklQVF9QQUNLQUdFUyA9ICJ1ZGV2IgorSU5JVFNDUklQVF9OQU1FX3VkZXYgPSAic3lzdGVtZC11ZGV2ZCIKK0lOSVRTQ1JJUFRfUEFSQU1TX3VkZXYgPSAic3RhcnQgMDMgUyAuIgorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX1VQREFURVJDRF9CQkNMQVNTIiwgIjEiKQorfQorCisjIFRPRE86CisjIHUtYSBmb3IgcnVubGV2ZWwgYW5kIHRlbGluaXQKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiaW5pdCBoYWx0IHJlYm9vdCBzaHV0ZG93biBwb3dlcm9mZiBydW5sZXZlbCByZXNvbHYtY29uZiIKKworQUxURVJOQVRJVkVfVEFSR0VUW2luaXRdID0gIiR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtpbml0XSA9ICIke2Jhc2Vfc2JpbmRpcn0vaW5pdCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW2luaXRdID89ICIzMDAiCisKK0FMVEVSTkFUSVZFX1RBUkdFVFtoYWx0XSA9ICIke2Jhc2VfYmluZGlyfS9zeXN0ZW1jdGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaGFsdF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2hhbHQiCitBTFRFUk5BVElWRV9QUklPUklUWVtoYWx0XSA/PSAiMzAwIgorCitBTFRFUk5BVElWRV9UQVJHRVRbcmVib290XSA9ICIke2Jhc2VfYmluZGlyfS9zeXN0ZW1jdGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcmVib290XSA9ICIke2Jhc2Vfc2JpbmRpcn0vcmVib290IgorQUxURVJOQVRJVkVfUFJJT1JJVFlbcmVib290XSA/PSAiMzAwIgorCitBTFRFUk5BVElWRV9UQVJHRVRbc2h1dGRvd25dID0gIiR7YmFzZV9iaW5kaXJ9L3N5c3RlbWN0bCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzaHV0ZG93bl0gPSAiJHtiYXNlX3NiaW5kaXJ9L3NodXRkb3duIgorQUxURVJOQVRJVkVfUFJJT1JJVFlbc2h1dGRvd25dID89ICIzMDAiCisKK0FMVEVSTkFUSVZFX1RBUkdFVFtwb3dlcm9mZl0gPSAiJHtiYXNlX2JpbmRpcn0vc3lzdGVtY3RsIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3Bvd2Vyb2ZmXSA9ICIke2Jhc2Vfc2JpbmRpcn0vcG93ZXJvZmYiCitBTFRFUk5BVElWRV9QUklPUklUWVtwb3dlcm9mZl0gPz0gIjMwMCIKKworQUxURVJOQVRJVkVfVEFSR0VUW3J1bmxldmVsXSA9ICIke2Jhc2VfYmluZGlyfS9zeXN0ZW1jdGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcnVubGV2ZWxdID0gIiR7YmFzZV9zYmluZGlyfS9ydW5sZXZlbCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW3J1bmxldmVsXSA/PSAiMzAwIgorCitBTFRFUk5BVElWRV9UQVJHRVRbcmVzb2x2LWNvbmZdID0gIiR7c3lzY29uZmRpcn0vcmVzb2x2LWNvbmYuc3lzdGVtZCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtyZXNvbHYtY29uZl0gPSAiJHtzeXNjb25mZGlyfS9yZXNvbHYuY29uZiIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW3Jlc29sdi1jb25mXSA/PSAiNTAiCisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJc2VkIC1lICcvXmhvc3RzOi9zL1xzKlw8bXlob3N0bmFtZVw+Ly8nIFwKKwkJLWUgJ3MvXCheaG9zdHM6LipcKVwoXDxmaWxlc1w+XClcKC4qXClcKFw8ZG5zXD5cKVwoLipcKS9cMVwyIG15aG9zdG5hbWUgXDNcNFw1LycgXAorCQktaSAkRCR7c3lzY29uZmRpcn0vbnNzd2l0Y2guY29uZgorfQorCitwa2dfcHJlcm1fJHtQTn0gKCkgeworCXNlZCAtZSAnL15ob3N0czovcy9ccypcPG15aG9zdG5hbWVcPi8vJyBcCisJCS1lICcvXmhvc3RzOi9zL1xzKm15aG9zdG5hbWUvLycgXAorCQktaSAkRCR7c3lzY29uZmRpcn0vbnNzd2l0Y2guY29uZgorfQorCitQQUNLQUdFX1dSSVRFX0RFUFMgKz0gInFlbXUtbmF0aXZlIgorcGtnX3Bvc3RpbnN0X3VkZXYtaHdkYiAoKSB7CisJaWYgdGVzdCAtbiAiJEQiOyB0aGVuCisJCSR7QHFlbXVfcnVuX2JpbmFyeShkLCAnJEQnLCAnJHtiYXNlX2JpbmRpcn0vdWRldmFkbScpfSBod2RiIC0tdXBkYXRlIFwKKwkJCS0tcm9vdCAkRAorCQljaG93biByb290OnJvb3QgJEQke3N5c2NvbmZkaXJ9L3VkZXYvaHdkYi5iaW4KKwllbHNlCisJCXVkZXZhZG0gaHdkYiAtLXVwZGF0ZQorCWZpCit9CisKK3BrZ19wcmVybV91ZGV2LWh3ZGIgKCkgeworCXJtIC1mICREJHtzeXNjb25mZGlyfS91ZGV2L2h3ZGIuYmluCit9CisKKyMgQXMgdGhpcyByZWNpcGUgYnVpbGRzIHVkZXYsIHJlc3BlY3Qgc3lzdGVtZCBiZWluZyBpbiBESVNUUk9fRkVBVFVSRVMgc28KKyMgdGhhdCB3ZSBkb24ndCBidWlsZCBib3RoIHVkZXYgYW5kIHN5c3RlbWQgaW4gd29ybGQgYnVpbGRzLgorcHl0aG9uICgpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMgKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIidzeXN0ZW1kJyBub3QgaW4gRElTVFJPX0ZFQVRVUkVTIikKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC1pbml0dGFiL3N0YXJ0X2dldHR5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LWluaXR0YWIvc3RhcnRfZ2V0dHkKaW5kZXggZTNkMDUyYS4uZTE1YWUzNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LWluaXR0YWIvc3RhcnRfZ2V0dHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LWluaXR0YWIvc3RhcnRfZ2V0dHkKQEAgLTEsNSArMSw0MyBAQAogIyEvYmluL3NoCi1pZiBbIC1jIC9kZXYvJDIgXQotdGhlbiAKLQkvc2Jpbi9nZXR0eSAtTCAkMSAkMiAkMwotZmkKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGhpcyBzY3JpcHQgaXMgdXNlZCB0byBhdXRvbWF0aWNhbGx5IHNldCB1cCB0aGUgc2VyaWFsIGNvbnNvbGUocykgb24gc3RhcnR1cC4KKyMgVGhlIHZhcmlhYmxlIFNFUklBTF9DT05TT0xFUyBjYW4gYmUgc2V0IGluIG1ldGEvY29uZi9tYWNoaW5lLyouY29uZi4KKyMgU2NyaXB0IGVuaGFuY2VtZW50IGhhcyBiZWVuIGRvbmUgYmFzZWQgb24gQnVnIFlPQ1RPICMxMDg0NC4KKyMgTW9zdCBvZiB0aGUgaW5mb3JtYXRpb24gaXMgcmV0cmlldmVkIGZyb20gL3Byb2MgdmlydHVhbCBmaWxlc3lzdGVtIGNvbnRhaW5pbmcKKyMgYWxsIHRoZSBydW50aW1lIHN5c3RlbSBpbmZvcm1hdGlvbiAoZWcuIHN5c3RlbSBtZW1vcnksIGRldmljZSBtb3VudCwgZXRjKS4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBHZXQgYWN0aXZlIHNlcmlhbCBmaWxlbmFtZS4KK2FjdGl2ZV9zZXJpYWw9JChncmVwICJzZXJpYWwiIC9wcm9jL3R0eS9kcml2ZXJzIHwgY3V0IC1kLyAtZjEgfCBzZWQgInMvICokLy8iKQorCisjIFJlcGhyYXNlIGlucHV0IHBhcmFtZXRlciBmcm9tIHR0eVMgdGFyZ2V0IGluZGV4ICh0dHlTMSwgdHR5UzIsIHR0eUFNQTAsIGV0YykuCitydW50aW1lX3R0eT0kKGVjaG8gJDIgfCBncmVwIC1vaCAnWzAtOV0nKQorCisjIEJhY2t1cCAkSUZTLgorREVGQVVMVF9JRlM9JElGUworIyBDdXN0b21pemUgSW50ZXJuYWwgRmllbGQgU2VwYXJhdG9yLgorSUZTPSIkKHByaW50ZiAnXG5cdCcpIgorCitmb3IgbGluZSBpbiAkYWN0aXZlX3NlcmlhbDsgZG8KKwkjIENoZWNrIHdlIGhhdmUgdGhlIGZpbGUgY29udGFpbmluZyBjdXJyZW50IGFjdGl2ZSBzZXJpYWwgdGFyZ2V0IGluZGV4LgorCWlmIFsgLWUgIi9wcm9jL3R0eS9kcml2ZXIvJGxpbmUiIF0KKyAgICAgICAgdGhlbgorCQkjIFJlbW92ZSBhbGwgdW5rbm93biBlbnRyaWVzIGFuZCBkaXNjYXJkIHRoZSBmaXJzdCBsaW5lIChkZXNjKS4KKwkJYWN0aXZldHR5PSQoZ3JlcCAtdiAidW5rbm93biIgIi9wcm9jL3R0eS9kcml2ZXIvJGxpbmUiIFwKKwkJCSAgICB8IHRhaWwgLW4gKzIgfCBncmVwIC1vaCAiXlxzKlxTKlswLTldIikKKwkJZm9yIGFjdGl2ZSBpbiAkYWN0aXZldHR5OyBkbworCQkJIyBJZiBpbmRleGVzIGRvIG1hdGNoIHRoZW4gZW5hYmxlIHRoZSBzZXJpYWwgY29uc29sZS4KKwkJCWlmIFsgJGFjdGl2ZSAtZXEgJHJ1bnRpbWVfdHR5IF0KKwkJCXRoZW4KKwkJCQlpZiBbIC1jIC9kZXYvJDIgXQorCQkJCXRoZW4KKwkJCQkgICAgL3NiaW4vZ2V0dHkgLUwgJDEgJDIgJDMKKwkJCQlmaQorCQkJCWJyZWFrCisJCQlmaQorCQlkb25lCisJZmkKK2RvbmUKKworIyBSZXN0b3JlICRJRlMuCitJRlM9JERFRkFVTFRfSUZTCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXRfMi44OGRzZi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdF8yLjg4ZHNmLmJiCmluZGV4IDg4NDg1N2EuLjIyYTBlY2YgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdF8yLjg4ZHNmLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdF8yLjg4ZHNmLmJiCkBAIC02OCw3ICs2OCw3IEBACiBGSUxFU19zeXN2aW5pdC1waWRvZiA9ICIke2Jhc2VfYmluZGlyfS9waWRvZi5zeXN2aW5pdCAke2Jhc2Vfc2JpbmRpcn0va2lsbGFsbDUiCiBGSUxFU19zeXN2aW5pdC1zdWxvZ2luID0gIiR7YmFzZV9zYmluZGlyfS9zdWxvZ2luLnN5c3Zpbml0IgogCi1SREVQRU5EU18ke1BOfSArPSAic3lzdmluaXQtcGlkb2YgaW5pdHNjcmlwdHMtZnVuY3Rpb25zIgorUkRFUEVORFNfJHtQTn0gKz0gInN5c3Zpbml0LXBpZG9mIGluaXRkLWZ1bmN0aW9ucyIKIAogQ0ZMQUdTX3ByZXBlbmQgPSAiLURfR05VX1NPVVJDRSAiCiBleHBvcnQgTENSWVBUID0gIi1sY3J5cHQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi9ldWRldi9pbml0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvZXVkZXYvaW5pdAppbmRleCAwYWIwMjhiLi4wNDU1YWRlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi9ldWRldi9pbml0CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L2V1ZGV2L2luaXQKQEAgLTE0LDI1ICsxNCw3IEBACiBbIC1kIC9zeXMvY2xhc3MgXSB8fCBleGl0IDEKIFsgLXIgL3Byb2MvbW91bnRzIF0gfHwgZXhpdCAxCiBbIC14IEBVREVWREAgXSB8fCBleGl0IDEKLVNZU0NPTkZfQ0FDSEVEPSIvZXRjL3VkZXYvY2FjaGUuZGF0YSIKLVNZU0NPTkZfVE1QPSIvZGV2L3NobS91ZGV2LmNhY2hlIgotREVWQ0FDSEVfUkVHRU49Ii9kZXYvc2htL3VkZXYtcmVnZW4iICMgY3JlYXRlIHRvIHJlcXVlc3QgY2FjaGUgcmVnZW4KIAotIyBBIGxpc3Qgb2YgZmlsZXMgd2hpY2ggYXJlIHVzZWQgYXMgYSBjcml0ZXJpYSB0byBqdWRnZSB3aGV0aGVyIHRoZSB1ZGV2IGNhY2hlIGNvdWxkIGJlIHJldXNlZC4KLUNNUF9GSUxFX0xJU1Q9Ii9wcm9jL3ZlcnNpb24gL3Byb2MvY21kbGluZSAvcHJvYy9kZXZpY2VzIgotWyAtZiAvcHJvYy9hdGFncyBdICYmIENNUF9GSUxFX0xJU1Q9IiRDTVBfRklMRV9MSVNUIC9wcm9jL2F0YWdzIgotCi0jIExpc3Qgb2YgZmlsZXMgd2hvc2UgbWV0YWRhdGEgKHNpemUvbXRpbWUvbmFtZSkgd2lsbCBiZSBpbmNsdWRlZCBpbiBjYWNoZWQKLSMgc3lzdGVtIHN0YXRlLgotTUVUQV9GSUxFX0xJU1Q9ImxpYi91ZGV2L3J1bGVzLmQvKiBldGMvdWRldi9ydWxlcy5kLyoiCi0KLSMgQ29tbWFuZCB0byBjb21wdXRlIHN5c3RlbSBjb25maWd1cmF0aW9uLgotc3lzY29uZl9jbWQgKCkgewotCWNhdCAtLSAkQ01QX0ZJTEVfTElTVAotCXN0YXQgLWMgJyVzICVZICVuJyAtLSAkTUVUQV9GSUxFX0xJU1QgfCBhd2sgLUYvICd7cHJpbnQgJDEgIiAiICRORjt9JwotfQotCi1bIC1mIC9ldGMvZGVmYXVsdC91ZGV2LWNhY2hlIF0gJiYgLiAvZXRjL2RlZmF1bHQvdWRldi1jYWNoZQogWyAtZiAvZXRjL3VkZXYvdWRldi5jb25mIF0gJiYgLiAvZXRjL3VkZXYvdWRldi5jb25mCiBbIC1mIC9ldGMvZGVmYXVsdC9yY1MgXSAmJiAuIC9ldGMvZGVmYXVsdC9yY1MKIApAQCAtNjYsMzcgKzQ4LDYgQEAKICAgICAjIC92YXIvdm9sYXRpbGUvdG1wIGRpcmVjdG9yeSB0byBiZSBhdmFpbGFibGUuCiAgICAgbWtkaXIgLW0gMTc3NyAtcCAvdmFyL3ZvbGF0aWxlL3RtcAogCi0gICAgIyBDYWNoZSBoYW5kbGluZy4KLSAgICBpZiBbICIkREVWQ0FDSEUiICE9ICIiIF07IHRoZW4KLSAgICAgICAgICAgIGlmIFsgLWUgJERFVkNBQ0hFIF07IHRoZW4KLQkJICAgIHN5c2NvbmZfY21kID4gIiRTWVNDT05GX1RNUCIKLQkJICAgIGlmIGNtcCAkU1lTQ09ORl9DQUNIRUQgJFNZU0NPTkZfVE1QID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXIgeG1mICRERVZDQUNIRSAtQyAvIC1tCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90X2ZpcnN0X2Jvb3Q9MQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgIiRWRVJCT1NFIiAhPSAibm8iIF0gJiYgZWNobyAidWRldjogdXNpbmcgY2FjaGUgZmlsZSAkREVWQ0FDSEUiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyAtZSAkU1lTQ09ORl9UTVAgXSAmJiBybSAtZiAiJFNZU0NPTkZfVE1QIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgLWUgIiRERVZDQUNIRV9SRUdFTiIgXSAmJiBybSAtZiAiJERFVkNBQ0hFX1JFR0VOIgotICAgICAgICAgICAgICAgICAgICBlbHNlCi0JCQkgICAgIyBPdXRwdXQgZGV0YWlsZWQgcmVhc29uIHdoeSB0aGUgY2FjaGVkIC9kZXYgaXMgbm90IHVzZWQKLQkJCSAgICBjYXQgPDxFT0YKLXVkZXY6IE5vdCB1c2luZyB1ZGV2IGNhY2hlIGJlY2F1c2Ugb2YgY2hhbmdlcyBkZXRlY3RlZCBpbiB0aGUgZm9sbG93aW5nIGZpbGVzOgotdWRldjogICAgICRDTVBfRklMRV9MSVNUCi11ZGV2OiAgICAgJE1FVEFfRklMRV9MSVNUCi11ZGV2OiBUaGUgdWRldiBjYWNoZSB3aWxsIGJlIHJlZ2VuZXJhdGVkLiBUbyBpZGVudGlmeSB0aGUgZGV0ZWN0ZWQgY2hhbmdlcywKLXVkZXY6IGNvbXBhcmUgdGhlIGNhY2hlZCBzeXNjb25mIGF0ICAgJFNZU0NPTkZfQ0FDSEVECi11ZGV2OiBhZ2FpbnN0IHRoZSBjdXJyZW50IHN5c2NvbmYgYXQgICRTWVNDT05GX1RNUAotRU9GCi0JCQkgICAgdG91Y2ggIiRERVZDQUNIRV9SRUdFTiIKLSAgICAgICAgICAgICAgICAgICAgZmkKLQkgICAgZWxzZQotCQkgICAgaWYgWyAiJFJPT1RGU19SRUFEX09OTFkiICE9ICJ5ZXMiIF07IHRoZW4KLQkJCSAgICAjIElmIHJvb3RmcyBpcyBub3QgcmVhZC1vbmx5LCBpdCdzIHBvc3NpYmxlIHRoYXQgYSBuZXcgdWRldiBjYWNoZSB3b3VsZCBiZSBnZW5lcmF0ZWQ7Ci0JCQkgICAgIyBvdGhlcndpc2UsIHdlIGRvIG5vdCBib3RoZXIgdG8gcmVhZCBmaWxlcy4KLQkJCSAgICB0b3VjaCAiJERFVkNBQ0hFX1JFR0VOIgotCQkgICAgZmkKLSAgICAgICAgICAgIGZpCi0gICAgZmkKLQogICAgICMgbWFrZV9leHRyYV9ub2RlcwogICAgIGtpbGxfdWRldmQgPiAiL2Rldi9udWxsIiAyPiYxCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L2V1ZGV2L3VkZXYtY2FjaGUgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi9ldWRldi91ZGV2LWNhY2hlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2ZmZjFjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L2V1ZGV2L3VkZXYtY2FjaGUKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0jIS9iaW4vc2ggLWUKLQotIyMjIEJFR0lOIElOSVQgSU5GTwotIyBQcm92aWRlczogICAgICAgICAgdWRldi1jYWNoZQotIyBSZXF1aXJlZC1TdGFydDogICAgbW91bnRhbGwKLSMgUmVxdWlyZWQtU3RvcDoKLSMgRGVmYXVsdC1TdGFydDogICAgIFMKLSMgRGVmYXVsdC1TdG9wOgotIyBTaG9ydC1EZXNjcmlwdGlvbjogY2FjaGUgL2RldiB0byBzcGVlZHVwIHRoZSB1ZGV2IG5leHQgYm9vdAotIyMjIEVORCBJTklUIElORk8KLQotZXhwb3J0IFRaPS9ldGMvbG9jYWx0aW1lCi0KLVsgLXIgL3Byb2MvbW91bnRzIF0gfHwgZXhpdCAxCi1bIC14IEBVREVWREAgXSB8fCBleGl0IDEKLVsgLWQgL3N5cy9jbGFzcyBdIHx8IGV4aXQgMQotCi1bIC1mIC9ldGMvZGVmYXVsdC9yY1MgXSAmJiAuIC9ldGMvZGVmYXVsdC9yY1MKLURFVkNBQ0hFX1RNUD0iL2Rldi9zaG0vdWRldi1jYWNoZS10bXAudGFyIgotU1lTQ09ORl9DQUNIRUQ9Ii9ldGMvdWRldi9jYWNoZS5kYXRhIgotU1lTQ09ORl9UTVA9Ii9kZXYvc2htL3VkZXYuY2FjaGUiCi1ERVZDQUNIRV9SRUdFTj0iL2Rldi9zaG0vdWRldi1yZWdlbiIgIyBjcmVhdGUgdG8gcmVxdWVzdCBjYWNoZSByZWdlbgotCi0jIEEgbGlzdCBvZiBmaWxlcyB3aGljaCBhcmUgdXNlZCBhcyBhIGNyaXRlcmlhIHRvIGp1ZGdlIHdoZXRoZXIgdGhlIHVkZXYgY2FjaGUgY291bGQgYmUgcmV1c2VkLgotQ01QX0ZJTEVfTElTVD0iL3Byb2MvdmVyc2lvbiAvcHJvYy9jbWRsaW5lIC9wcm9jL2RldmljZXMiCi1bIC1mIC9wcm9jL2F0YWdzIF0gJiYgQ01QX0ZJTEVfTElTVD0iJENNUF9GSUxFX0xJU1QgL3Byb2MvYXRhZ3MiCi0KLSMgTGlzdCBvZiBmaWxlcyB3aG9zZSBtZXRhZGF0YSAoc2l6ZS9tdGltZS9uYW1lKSB3aWxsIGJlIGluY2x1ZGVkIGluIGNhY2hlZAotIyBzeXN0ZW0gc3RhdGUuCi1NRVRBX0ZJTEVfTElTVD0ibGliL3VkZXYvcnVsZXMuZC8qIGV0Yy91ZGV2L3J1bGVzLmQvKiIKLQotIyBDb21tYW5kIHRvIGNvbXB1dGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uCi1zeXNjb25mX2NtZCAoKSB7Ci0JY2F0IC0tICRDTVBfRklMRV9MSVNUCi0Jc3RhdCAtYyAnJXMgJVkgJW4nIC0tICRNRVRBX0ZJTEVfTElTVCB8IGF3ayAtRi8gJ3twcmludCAkMSAiICIgJE5GO30nCi19Ci0KLVsgLWYgL2V0Yy9kZWZhdWx0L3VkZXYtY2FjaGUgXSAmJiAuIC9ldGMvZGVmYXVsdC91ZGV2LWNhY2hlCi0KLWlmIFsgIiRST09URlNfUkVBRF9PTkxZIiA9ICJ5ZXMiIF07IHRoZW4KLSAgICBbICIkVkVSQk9TRSIgIT0gIm5vIiBdICYmIGVjaG8gInVkZXYtY2FjaGU6IHJlYWQtb25seSByb290ZnMsIHNraXAgZ2VuZXJhdGluZyB1ZGV2LWNhY2hlIgotICAgIGV4aXQgMAotZmkKLQotWyAiJERFVkNBQ0hFIiAhPSAiIiBdIHx8IGV4aXQgMAotWyAiJHtWRVJCT1NFfSIgPT0gIm5vIiBdIHx8IGVjaG8gLW4gInVkZXYtY2FjaGU6IGNoZWNraW5nIGZvciAke0RFVkNBQ0hFX1JFR0VOfS4uLiAiCi1pZiAhIFsgLWUgIiRERVZDQUNIRV9SRUdFTiIgXTsgdGhlbgotCVsgIiR7VkVSQk9TRX0iID09ICJubyIgXSB8fCBlY2hvICJub3QgZm91bmQuIgotCWV4aXQgMAotZmkKLVsgIiR7VkVSQk9TRX0iID09ICJubyIgXSB8fCBlY2hvICJmb3VuZC4iCi1lY2hvICJQb3B1bGF0aW5nIGRldiBjYWNoZSIKLQotZXJyX2NsZWFudXAgKCkgewotICAgICAgICBlY2hvICJ1ZGV2LWNhY2hlOiB1cGRhdGUgZmFpbGVkISIKLSAgICAgICAgdWRldmFkbSBjb250cm9sIC0tc3RhcnQtZXhlYy1xdWV1ZQotCXJtIC1mIC0tICIkU1lTQ09ORl9UTVAiICIkREVWQ0FDSEVfVE1QIiAiJERFVkNBQ0hFIiAiJFNZU0NPTkZfQ0FDSEVEIgotfQotCi0oCi0Jc2V0IC1lCi0JdHJhcCAnZXJyX2NsZWFudXAnIEVYSVQKLQl1ZGV2YWRtIGNvbnRyb2wgLS1zdG9wLWV4ZWMtcXVldWUKLQlzeXNjb25mX2NtZCA+ICIkU1lTQ09ORl9UTVAiCi0JZmluZCAvZGV2IC14ZGV2IFwoIC10eXBlIGIgLW8gLXR5cGUgYyAtbyAtdHlwZSBsIFwpIHwgY3V0IC1jIDItIFwKLQkJfCB4YXJncyB0YXIgY2YgIiR7REVWQ0FDSEVfVE1QfSIKLQlnemlwIDwgIiR7REVWQ0FDSEVfVE1QfSIgPiAiJERFVkNBQ0hFIgotCXJtIC1mICIke0RFVkNBQ0hFX1RNUH0iCi0JbXYgIiRTWVNDT05GX1RNUCIgIiRTWVNDT05GX0NBQ0hFRCIKLQl1ZGV2YWRtIGNvbnRyb2wgLS1zdGFydC1leGVjLXF1ZXVlCi0Jcm0gLWYgIiRERVZDQUNIRV9SRUdFTiIKLQl0cmFwIC0gRVhJVAotKSAmCi0KLWV4aXQgMApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvZXVkZXYvdWRldi1jYWNoZS5kZWZhdWx0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvZXVkZXYvdWRldi1jYWNoZS5kZWZhdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2I3MzI2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L2V1ZGV2L3VkZXYtY2FjaGUuZGVmYXVsdAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotIyBEZWZhdWx0IGZvciAvZXRjL2luaXQuZC91ZGV2Ci0KLSMgQ29tbWVudCB0aGlzIG91dCB0byBkaXNhYmxlIGRldmljZSBjYWNoZQotREVWQ0FDSEU9Ii9ldGMvdWRldi1jYWNoZS50YXIuZ3oiCi1QUk9CRV9QTEFURk9STV9CVVM9InllcyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L2V1ZGV2XzMuMi4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvZXVkZXZfMy4yLjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZmI1NDQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvZXVkZXZfMy4yLjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotU1VNTUFSWSA9ICJldWRldiBpcyBhIGZvcmsgb2Ygc3lzdGVtZCdzIHVkZXYiCi1IT01FUEFHRSA9ICJodHRwczovL3dpa2kuZ2VudG9vLm9yZy93aWtpL0V1ZGV2IgotTElDRU5TRSA9ICJHUEx2Mi4wKyAmIExHUEwtMi4xKyIKLUxJQ0VOU0VfbGlidWRldiA9ICJMR1BMLTIuMSsiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKLQotREVQRU5EUyA9ICJnbGliLTIuMCBnbGliLTIuMC1uYXRpdmUgZ3BlcmYtbmF0aXZlIGttb2QgbGlieHNsdC1uYXRpdmUgdXRpbC1saW51eCIKLQotUFJPVklERVMgPSAidWRldiIKLQotU1JDX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vZ2VudG9vLyR7QlBOfS9hcmNoaXZlL3Yke1BWfS50YXIuZ3o7ZG93bmxvYWRmaWxlbmFtZT0ke0JQfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vMDAxNC1SZXZlcnQtcnVsZXMtcmVtb3ZlLWZpcm13YXJlLWxvYWRpbmctcnVsZXMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vUmV2ZXJ0LXVkZXYtcmVtb3ZlLXVzZXJzcGFjZS1maXJtd2FyZS1sb2FkaW5nLXN1cHBvci5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9kZXZmcy11ZGV2LnJ1bGVzIFwKLSAgICAgICAgICAgZmlsZTovL2luaXQgXAotICAgICAgICAgICBmaWxlOi8vbGlua3MuY29uZiBcCi0gICAgICAgICAgIGZpbGU6Ly9sb2NhbC5ydWxlcyBcCi0gICAgICAgICAgIGZpbGU6Ly9wZXJtaXNzaW9ucy5ydWxlcyBcCi0gICAgICAgICAgIGZpbGU6Ly9ydW4ucnVsZXMgXAotICAgICAgICAgICBmaWxlOi8vdWRldi1jYWNoZSBcCi0gICAgICAgICAgIGZpbGU6Ly91ZGV2LWNhY2hlLmRlZmF1bHQgXAotICAgICAgICAgICBmaWxlOi8vdWRldi5ydWxlcyBcCi0iCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL2dlbnRvby9ldWRldi9yZWxlYXNlcyIKLQotU1JDX1VSSVttZDVzdW1dID0gImEyYWFlMTZiYzQzMmVhYzBlNzFjMTI2N2MzODRlMjk1IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg4ZjUzMGMxNTQwNzUwZTZkYWE5MWI1ZWFlZWJmODhlNzYxZTZmMGM4NjUxNWMxYzI4ZWVkZmQ4NzFmMDI3YzYiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1yYy5kIHFlbXUgcGtnY29uZmlnCi0KLUVYVFJBX09FQ09ORiA9ICIgXAotICAgIC0tc2JpbmRpcj0ke2Jhc2Vfc2JpbmRpcn0gXAotICAgIC0td2l0aC1yb290bGliZGlyPSR7YmFzZV9saWJkaXJ9IFwKLSAgICAtLXdpdGgtcm9vdHByZWZpeD0gXAotIgotCi1QQUNLQUdFQ09ORklHID8/PSAiaHdkYiIKLVBBQ0tBR0VDT05GSUdbaHdkYl0gPSAiLS1lbmFibGUtaHdkYiwtLWRpc2FibGUtaHdkYiIKLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKLQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC91ZGV2Ci0JaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vdWRldi1jYWNoZSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvdWRldi1jYWNoZQotCXNlZCAtaSBzJUBVREVWREAlJHtiYXNlX3NiaW5kaXJ9L3VkZXZkJSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvdWRldgotCXNlZCAtaSBzJUBVREVWREAlJHtiYXNlX3NiaW5kaXJ9L3VkZXZkJSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvdWRldi1jYWNoZQotCi0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0Ci0JaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vdWRldi1jYWNoZS5kZWZhdWx0ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdWRldi1jYWNoZQotCi0JdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vdWRldi9jYWNoZS5kYXRhCi0KLQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZAotCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2xvY2FsLnJ1bGVzICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZC9sb2NhbC5ydWxlcwotCi0JIyBVc2UgY2xhc3NpYyBuZXR3b3JrIGludGVyZmFjZSBuYW1pbmcgc2NoZW1lCi0JdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vdWRldi9ydWxlcy5kLzgwLW5ldC1uYW1lLXNsb3QucnVsZXMKLQotCSMgaGlkMmhjaSBoYXMgbW92ZWQgdG8gYmx1ZXo0LiByZW1vdmVkIGluIHVkZXYgYXMgb2YgdmVyc2lvbiAxNjkKLQlybSAtZiAke0R9JHtiYXNlX2xpYmRpcn0vdWRldi9oaWQyaGNpCi19Ci0KLUlOSVRTQ1JJUFRfUEFDS0FHRVMgPSAiZXVkZXYgdWRldi1jYWNoZSIKLUlOSVRTQ1JJUFRfTkFNRV9ldWRldiA9ICJ1ZGV2IgotSU5JVFNDUklQVF9QQVJBTVNfZXVkZXYgPSAic3RhcnQgMDQgUyAuIgotSU5JVFNDUklQVF9OQU1FX3VkZXYtY2FjaGUgPSAidWRldi1jYWNoZSIKLUlOSVRTQ1JJUFRfUEFSQU1TX3VkZXYtY2FjaGUgPSAic3RhcnQgMzYgUyAuIgotCi1QQUNLQUdFUyA9KyAibGlidWRldiIKLVBBQ0tBR0VTID0rICJ1ZGV2LWNhY2hlIgotUEFDS0FHRVMgPSsgImV1ZGV2LWh3ZGIiCi0KLQotRklMRVNfJHtQTn0gKz0gIiR7bGliZXhlY2Rpcn0gJHtiYXNlX2xpYmRpcn0vdWRldiAke2JpbmRpcn0vdWRldmFkbSIKLUZJTEVTXyR7UE59LWRldiA9ICIke2RhdGFkaXJ9L3BrZ2NvbmZpZy91ZGV2LnBjIFwKLSAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L2xpYnVkZXYuaCAke2xpYmRpcn0vbGlidWRldi5zbyBcCi0gICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS91ZGV2LmggJHtsaWJkaXJ9L2xpYnVkZXYubGEgXAotICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJ1ZGV2LmEgJHtsaWJkaXJ9L3BrZ2NvbmZpZy9saWJ1ZGV2LnBjIgotRklMRVNfbGlidWRldiA9ICIke2Jhc2VfbGliZGlyfS9saWJ1ZGV2LnNvLioiCi1GSUxFU191ZGV2LWNhY2hlID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kL3VkZXYtY2FjaGUgJHtzeXNjb25mZGlyfS9kZWZhdWx0L3VkZXYtY2FjaGUiCi1GSUxFU19ldWRldi1od2RiID0gIiR7c3lzY29uZmRpcn0vdWRldi9od2RiLmQiCi0KLVJERVBFTkRTX2V1ZGV2LWh3ZGIgKz0gImV1ZGV2IgotCi1SUkVDT01NRU5EU18ke1BOfSArPSAidWRldi1jYWNoZSIKLQotUlBST1ZJREVTXyR7UE59ID0gImhvdHBsdWcgdWRldiIKLVJQUk9WSURFU19ldWRldi1od2RiICs9ICJ1ZGV2LWh3ZGIiCi0KLXB5dGhvbiAoKSB7Ci0gICAgaWYgYmIudXRpbHMuY29udGFpbnMgKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsIFRydWUsIEZhbHNlLCBkKToKLSAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIidzeXN0ZW1kJyBpbiBESVNUUk9fRkVBVFVSRVMiKQotfQotCi1QQUNLQUdFX1dSSVRFX0RFUFMgKz0gInFlbXUtbmF0aXZlIgotcGtnX3Bvc3RpbnN0X2V1ZGV2LWh3ZGIgKCkgewotICAgIGlmIHRlc3QgLW4gIiREIjsgdGhlbgotICAgICAgICAke0BxZW11X3J1bl9iaW5hcnkoZCwgJyREJywgJyR7YmluZGlyfS91ZGV2YWRtJyl9IGh3ZGIgLS11cGRhdGUgLS1yb290ICRECi0gICAgICAgIGNob3duIHJvb3Q6cm9vdCAkRCR7c3lzY29uZmRpcn0vdWRldi9od2RiLmJpbgotICAgIGVsc2UKLSAgICAgICAgdWRldmFkbSBod2RiIC0tdXBkYXRlCi0gICAgZmkKLX0KLQotcGtnX3ByZXJtX2V1ZGV2LWh3ZGIgKCkgewotICAgICAgICBybSAtZiAkRCR7c3lzY29uZmRpcn0vdWRldi9od2RiLmJpbgotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvZXVkZXZfMy4yLjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi9ldWRldl8zLjIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmZiMjNhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvZXVkZXZfMy4yLjIuYmIKQEAgLTAsMCArMSw5NiBAQAorU1VNTUFSWSA9ICJldWRldiBpcyBhIGZvcmsgb2Ygc3lzdGVtZCdzIHVkZXYiCitIT01FUEFHRSA9ICJodHRwczovL3dpa2kuZ2VudG9vLm9yZy93aWtpL0V1ZGV2IgorTElDRU5TRSA9ICJHUEx2Mi4wKyAmIExHUEwtMi4xKyIKK0xJQ0VOU0VfbGlidWRldiA9ICJMR1BMLTIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKKworREVQRU5EUyA9ICJnbGliLTIuMCBnbGliLTIuMC1uYXRpdmUgZ3BlcmYtbmF0aXZlIGttb2QgbGlieHNsdC1uYXRpdmUgdXRpbC1saW51eCIKKworUFJPVklERVMgPSAidWRldiIKKworU1JDX1VSSSA9ICJodHRwOi8vZGV2LmdlbnRvby5vcmcvfmJsdWVuZXNzLyR7QlBOfS8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAxNC1SZXZlcnQtcnVsZXMtcmVtb3ZlLWZpcm13YXJlLWxvYWRpbmctcnVsZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vUmV2ZXJ0LXVkZXYtcmVtb3ZlLXVzZXJzcGFjZS1maXJtd2FyZS1sb2FkaW5nLXN1cHBvci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kZXZmcy11ZGV2LnJ1bGVzIFwKKyAgICAgICAgICAgZmlsZTovL2luaXQgXAorICAgICAgICAgICBmaWxlOi8vbGlua3MuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9sb2NhbC5ydWxlcyBcCisgICAgICAgICAgIGZpbGU6Ly9wZXJtaXNzaW9ucy5ydWxlcyBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4ucnVsZXMgXAorICAgICAgICAgICBmaWxlOi8vdWRldi5ydWxlcyBcCisiCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL2dlbnRvby9ldWRldi9yZWxlYXNlcyIKKworU1JDX1VSSVttZDVzdW1dID0gIjQxZTE5YjcwNDYyNjkyZmVmZDA3MmEzZjM4ODE4YjZlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNlNGM1NmVjMmZjMTg1NGFmZDBhMzFmM2FmZmE0OGY5MjJjNjJkNDBlZTEyYTBjMWE0YjRmMTUyZWY1YjBmNjMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1yYy5kIHFlbXUgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgIC0tc2JpbmRpcj0ke2Jhc2Vfc2JpbmRpcn0gXAorICAgIC0td2l0aC1yb290bGliZGlyPSR7YmFzZV9saWJkaXJ9IFwKKyAgICAtLXdpdGgtcm9vdHByZWZpeD0gXAorIgorCitQQUNLQUdFQ09ORklHID8/PSAiaHdkYiIKK1BBQ0tBR0VDT05GSUdbaHdkYl0gPSAiLS1lbmFibGUtaHdkYiwtLWRpc2FibGUtaHdkYiIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC91ZGV2CisJc2VkIC1pIHMlQFVERVZEQCUke2Jhc2Vfc2JpbmRpcn0vdWRldmQlICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC91ZGV2CisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZAorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2xvY2FsLnJ1bGVzICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZC9sb2NhbC5ydWxlcworCisJIyBVc2UgY2xhc3NpYyBuZXR3b3JrIGludGVyZmFjZSBuYW1pbmcgc2NoZW1lCisJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vdWRldi9ydWxlcy5kLzgwLW5ldC1uYW1lLXNsb3QucnVsZXMKKworCSMgaGlkMmhjaSBoYXMgbW92ZWQgdG8gYmx1ZXo0LiByZW1vdmVkIGluIHVkZXYgYXMgb2YgdmVyc2lvbiAxNjkKKwlybSAtZiAke0R9JHtiYXNlX2xpYmRpcn0vdWRldi9oaWQyaGNpCit9CisKK2RvX2luc3RhbGxfcHJlcGVuZF9jbGFzcy10YXJnZXQgKCkgeworCSMgUmVtb3ZlIHJlZmVyZW5jZXMgdG8gYnVpbGRtYWNoaW5lCisJc2VkIC1pIC1lICdzOiR7UkVDSVBFX1NZU1JPT1RfTkFUSVZFfTo6ZycgXAorCQkke0J9L3NyYy91ZGV2L2tleWJvYXJkLWtleXMtZnJvbS1uYW1lLmgKK30KKworSU5JVFNDUklQVF9OQU1FID0gInVkZXYiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAwNCBTIC4iCisKK1BBQ0tBR0VTID0rICJsaWJ1ZGV2IgorUEFDS0FHRVMgPSsgImV1ZGV2LWh3ZGIiCisKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZXhlY2Rpcn0gJHtiYXNlX2xpYmRpcn0vdWRldiAke2JpbmRpcn0vdWRldmFkbSIKK0ZJTEVTXyR7UE59LWRldiA9ICIke2RhdGFkaXJ9L3BrZ2NvbmZpZy91ZGV2LnBjIFwKKyAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L2xpYnVkZXYuaCAke2xpYmRpcn0vbGlidWRldi5zbyBcCisgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS91ZGV2LmggJHtsaWJkaXJ9L2xpYnVkZXYubGEgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJ1ZGV2LmEgJHtsaWJkaXJ9L3BrZ2NvbmZpZy9saWJ1ZGV2LnBjIgorRklMRVNfbGlidWRldiA9ICIke2Jhc2VfbGliZGlyfS9saWJ1ZGV2LnNvLioiCitGSUxFU19ldWRldi1od2RiID0gIiR7c3lzY29uZmRpcn0vdWRldi9od2RiLmQiCisKK1JERVBFTkRTX2V1ZGV2LWh3ZGIgKz0gImV1ZGV2IgorCitSUFJPVklERVNfJHtQTn0gPSAiaG90cGx1ZyB1ZGV2IgorUlBST1ZJREVTX2V1ZGV2LWh3ZGIgKz0gInVkZXYtaHdkYiIKKworcHl0aG9uICgpIHsKKyAgICBpZiBiYi51dGlscy5jb250YWlucyAoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiJ3N5c3RlbWQnIGluIERJU1RST19GRUFUVVJFUyIpCit9CisKK1BBQ0tBR0VfV1JJVEVfREVQUyArPSAicWVtdS1uYXRpdmUiCitwa2dfcG9zdGluc3RfZXVkZXYtaHdkYiAoKSB7CisgICAgaWYgdGVzdCAtbiAiJEQiOyB0aGVuCisgICAgICAgICR7QHFlbXVfcnVuX2JpbmFyeShkLCAnJEQnLCAnJHtiaW5kaXJ9L3VkZXZhZG0nKX0gaHdkYiAtLXVwZGF0ZSAtLXJvb3QgJEQKKyAgICAgICAgY2hvd24gcm9vdDpyb290ICREJHtzeXNjb25mZGlyfS91ZGV2L2h3ZGIuYmluCisgICAgZWxzZQorICAgICAgICB1ZGV2YWRtIGh3ZGIgLS11cGRhdGUKKyAgICBmaQorfQorCitwa2dfcHJlcm1fZXVkZXYtaHdkYiAoKSB7CisgICAgICAgIHJtIC1mICREJHtzeXNjb25mZGlyfS91ZGV2L2h3ZGIuYmluCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZl8xLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZl8xLjEuYmIKaW5kZXggYWUxMjU1MC4uNDNhMWNmZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmZfMS4xLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mXzEuMS5iYgpAQCAtMSw0ICsxLDUgQEAKIFNVTU1BUlkgPSAiRXh0cmEgbWFjaGluZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGVzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93aWtpLmdlbnRvby5vcmcvd2lraS9FdWRldiIKIERFU0NSSVBUSU9OID0gIkV4dHJhIG1hY2hpbmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgdWRldiwgc3BlY2lmaWNhbGx5IGJsYWNrbGlzdCBpbmZvcm1hdGlvbi4iCiBMSUNFTlNFID0gIk1JVCIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kXzAuNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZF8wLjcuYmIKaW5kZXggM2I5NjVjNS4uNmZjNmY2ZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kXzAuNy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXBkYXRlLXJjLmQvdXBkYXRlLXJjLmRfMC43LmJiCkBAIC0xLDQgKzEsNSBAQAogU1VNTUFSWSA9ICJtYW5hZ2Ugc3ltbGlua3MgaW4gL2V0Yy9yY04uZCIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXRodWIuY29tL3BoaWxiL3VwZGF0ZS1yYy5kLyIKIERFU0NSSVBUSU9OID0gInVwZGF0ZS1yYy5kIGlzIGEgdXRpbGl0eSB0aGF0IGFsbG93cyB0aGUgbWFuYWdlbWVudCBvZiBzeW1saW5rcyB0byB0aGUgaW5pdHNjcmlwdHMgaW4gdGhlIC9ldGMvcmNOLmQgZGlyZWN0b3J5IHN0cnVjdHVyZS4iCiBTRUNUSU9OID0gImJhc2UiCiAKQEAgLTE1LDYgKzE2LDcgQEAKICAgICAgICAgICAgZmlsZTovL2NoZWNrLWlmLXN5bWxpbmtzLWFyZS12YWxpZC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9maXgtdG8taGFuZGxlLXByaW9yaXR5LW51bWJlcnMtY29ycmVjdGx5LnBhdGNoIFwKICAgICAgICAgICAiCitVUFNUUkVBTV9WRVJTSU9OX1VOS05PV04gPSAiMSIKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4LmluYwppbmRleCA2MzMwMmE5Li5mMGZmZDI1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4LmluYwpAQCAtMSw0ICsxLDUgQEAKIFNVTU1BUlkgPSAiQSBzdWl0ZSBvZiBiYXNpYyBzeXN0ZW0gYWRtaW5pc3RyYXRpb24gdXRpbGl0aWVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3VzZXJ3ZWIua2VybmVsLm9yZy9+a3phay91dGlsLWxpbnV4LyIKIERFU0NSSVBUSU9OID0gIlV0aWwtbGludXggaW5jbHVkZXMgYSBzdWl0ZSBvZiBiYXNpYyBzeXN0ZW0gYWRtaW5pc3RyYXRpb24gdXRpbGl0aWVzIFwKIGNvbW1vbmx5IGZvdW5kIG9uIG1vc3QgTGludXggc3lzdGVtcy4gIFNvbWUgb2YgdGhlIG1vcmUgaW1wb3J0YW50IHV0aWxpdGllcyBpbmNsdWRlIFwKIGRpc2sgcGFydGl0aW9uaW5nLCBrZXJuZWwgbWVzc2FnZSBtYW5hZ2VtZW50LCBmaWxlc3lzdGVtIGNyZWF0aW9uLCBhbmQgc3lzdGVtIGxvZ2luLiIKQEAgLTMzLDkgKzM0LDEwIEBACiAgICAgICAgICAgICAgdXRpbC1saW51eC1ibGtpZCB1dGlsLWxpbnV4LW1rZnMgdXRpbC1saW51eC1tY29va2llIHV0aWwtbGludXgtcmVzZXQgXAogICAgICAgICAgICAgIHV0aWwtbGludXgtbHNibGsgdXRpbC1saW51eC1ta2ZzLmNyYW1mcyB1dGlsLWxpbnV4LWZzdHJpbSBcCiAgICAgICAgICAgICAgdXRpbC1saW51eC1wYXJ0eCB1dGlsLWxpbnV4LWh3Y2xvY2sgdXRpbC1saW51eC1tb3VudHBvaW50IFwKLSAgICAgICAgICAgICB1dGlsLWxpbnV4LWZpbmRmcyB1dGlsLWxpbnV4LWdldG9wdCB1dGlsLWxpbnV4LXN1bG9naW4gdXRpbC1saW51eC1wcmxpbWl0IgorICAgICAgICAgICAgIHV0aWwtbGludXgtZmluZGZzIHV0aWwtbGludXgtZ2V0b3B0IHV0aWwtbGludXgtc3Vsb2dpbiB1dGlsLWxpbnV4LXBybGltaXQgXAorICAgICAgICAgICAgIHV0aWwtbGludXgtaW9uaWNlIHV0aWwtbGludXgtc3dpdGNoLXJvb3QiCiBQQUNLQUdFUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncHlsaWJtb3VudCcsICd1dGlsLWxpbnV4LXB5bGlibW91bnQnLCAnJywgZCl9IgotUEFDS0FHRVMgPSsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3V0aWwtbGludXgtcnVudXNlcicsICcnLCBkKX0iCitQQUNLQUdFUyA9KyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAndXRpbC1saW51eC1ydW51c2VyIHV0aWwtbGludXgtc3UnLCAnJywgZCl9IgogCiBQQUNLQUdFU19EWU5BTUlDID0gIl51dGlsLWxpbnV4LWxpYi4qIgogCkBAIC05MSw2ICs5Myw5IEBACiBGSUxFU191dGlsLWxpbnV4LWdldG9wdCA9ICIke2Jhc2VfYmluZGlyfS9nZXRvcHQuJHtCUE59IgogRklMRVNfdXRpbC1saW51eC1ydW51c2VyID0gIiR7c2JpbmRpcn0vcnVudXNlciIKIEZJTEVTX3V0aWwtbGludXgtcHJsaW1pdCA9ICIke2JpbmRpcn0vcHJsaW1pdCIKK0ZJTEVTX3V0aWwtbGludXgtaW9uaWNlID0gIiR7YmluZGlyfS9pb25pY2UiCitGSUxFU191dGlsLWxpbnV4LXN1ID0gIiR7YmluZGlyfS9zdS51dGlsLWxpbnV4ICR7c3lzY29uZmRpcn0vcGFtLmQvc3UtbCIKK0NPTkZGSUxFU191dGlsLWxpbnV4LXN1ID0gIiR7c3lzY29uZmRpcn0vcGFtLmQvc3UtbCIKIAogRklMRVNfdXRpbC1saW51eC1weWxpYm1vdW50ID0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2xpYm1vdW50L3B5bGlibW91bnQuc28gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2xpYm1vdW50L19faW5pdF9fLiogXApAQCAtMTA3LDYgKzExMiw4IEBACiBGSUxFU191dGlsLWxpbnV4LXN1bG9naW4gPSAiJHtiYXNlX3NiaW5kaXJ9L3N1bG9naW4qIgogRklMRVNfdXRpbC1saW51eC1tb3VudHBvaW50ID0gIiR7YmFzZV9iaW5kaXJ9L21vdW50cG9pbnQuJHtCUE59IgogCitGSUxFU191dGlsLWxpbnV4LXN3aXRjaC1yb290ID0gIiR7YmFzZV9zYmluZGlyfS9zd2l0Y2hfcm9vdC4ke0JQTn0iCisKICMgVXRpbC1saW51eCcgYmxraWQgcmVwbGFjZXMgdGhlIGUyZnNwcm9ncyBvbmUKIEZJTEVTX3V0aWwtbGludXgtYmxraWQgPSAiJHtiYXNlX3NiaW5kaXJ9L2Jsa2lkKiIKIFJDT05GTElDVFNfdXRpbC1saW51eC1ibGtpZCA9ICJlMmZzcHJvZ3MtYmxraWQiCkBAIC0xMTYsMTEgKzEyMywxMiBAQAogUkRFUEVORFNfdXRpbC1saW51eC1yZXNldCArPSAibmN1cnNlcyIKIAogUkRFUEVORFNfdXRpbC1saW51eC1ydW51c2VyICs9ICJsaWJwYW0iCitSREVQRU5EU191dGlsLWxpbnV4LXN1ICs9ICJsaWJwYW0iCiAKIFJERVBFTkRTXyR7UE59ID0gInV0aWwtbGludXgtdW1vdW50IHV0aWwtbGludXgtc3dhcG9ub2ZmIHV0aWwtbGludXgtbG9zZXR1cCB1dGlsLWxpbnV4LXN1bG9naW4gdXRpbC1saW51eC1sc2JsayIKLVJERVBFTkRTXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICd1dGlsLWxpbnV4LXJ1bnVzZXInLCAnJywgZCl9IgorUkRFUEVORFNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3V0aWwtbGludXgtcnVudXNlciB1dGlsLWxpbnV4LXN1JywgJycsIGQpfSIKIAotUlJFQ09NTUVORFNfJHtQTn0gPSAidXRpbC1saW51eC1mZGlzayB1dGlsLWxpbnV4LWNmZGlzayB1dGlsLWxpbnV4LXNmZGlzayB1dGlsLWxpbnV4LW1vdW50IHV0aWwtbGludXgtcmVhZHByb2ZpbGUgdXRpbC1saW51eC1ta2ZzIHV0aWwtbGludXgtbW91bnRwb2ludCB1dGlsLWxpbnV4LXBybGltaXQiCitSUkVDT01NRU5EU18ke1BOfSA9ICJ1dGlsLWxpbnV4LWZkaXNrIHV0aWwtbGludXgtY2ZkaXNrIHV0aWwtbGludXgtc2ZkaXNrIHV0aWwtbGludXgtbW91bnQgdXRpbC1saW51eC1yZWFkcHJvZmlsZSB1dGlsLWxpbnV4LW1rZnMgdXRpbC1saW51eC1tb3VudHBvaW50IHV0aWwtbGludXgtcHJsaW1pdCB1dGlsLWxpbnV4LWlvbmljZSB1dGlsLWxpbnV4LXN3aXRjaC1yb290IgogCiBSUkVDT01NRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgogUlJFQ09NTUVORFNfJHtQTn1fY2xhc3MtbmF0aXZlc2RrID0gIiIKQEAgLTE4Miw2ICsxOTAsMTIgQEAKIAkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcnVudXNlci5wYW1kICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kL3J1bnVzZXIKIAkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcnVudXNlci1sLnBhbWQgJHtEfSR7c3lzY29uZmRpcn0vcGFtLmQvcnVudXNlci1sCiAJZmkKKwlpZiBbICIke0BiYi51dGlscy5maWx0ZXIoJ1BBQ0tBR0VDT05GSUcnLCAncGFtJywgZCl9IiBdOyB0aGVuCisJCSMgUmVxdWlyZWQgZm9yICJzdSAtIiBha2EgInN1IC0tbG9naW4iIGJlY2F1c2UKKwkJIyBvdGhlcndpc2UgaXQgdXNlcyAib3RoZXIiLCB3aGljaCBoYXMgImF1dGggcGFtX2Rlbnkuc28iCisJCSMgYW5kIHRodXMgcHJldmVudHMgdGhlIG9wZXJhdGlvbi4KKwkJbG4gLXMgc3UgJHtEfSR7c3lzY29uZmRpcn0vcGFtLmQvc3UtbAorCWZpCiB9CiAKICMgcmVzZXQgYW5kIG5vbG9naW4gY2F1c2VzIGEgY29uZmxpY3Qgd2l0aCBuY3Vyc2VzLW5hdGl2ZSBhbmQgc2hhZG93LW5hdGl2ZQpAQCAtMjkwLDcgKzMwNCw3IEBACiB9CiAKIFJERVBFTkRTXyR7UE59LWJhc2gtY29tcGxldGlvbiArPSAidXRpbC1saW51eC1sc2JsayIKLVJERVBFTkRTXyR7UE59LXB0ZXN0ID0gImJhc2ggZ3JlcCBjb3JldXRpbHMiCitSREVQRU5EU18ke1BOfS1wdGVzdCA9ICJiYXNoIGdyZXAgY29yZXV0aWxzIHdoaWNoIHV0aWwtbGludXgtYmxraWQgdXRpbC1saW51eC1mc2NrIGJ0cmZzLXRvb2xzIgogCiBkb19jb21waWxlX3B0ZXN0KCkgewogICAgIG9lX3J1bm1ha2UgYnVpbGR0ZXN0LVRFU1RTCkBAIC0yOTgsMjMgKzMxMiwzMCBAQAogCiBkb19pbnN0YWxsX3B0ZXN0KCkgewogICAgIG1rZGlyIC1wICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL3RzCi0gICAgZmluZCAuIC1tYXhkZXB0aCAxIC10eXBlIGYgLXBlcm0gLTExMSAtZXhlYyBjcCB7fSAke0R9JHtQVEVTVF9QQVRIfSBcOwotICAgIGNwICR7U30vdGVzdHMvZnVuY3Rpb25zLnNoICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzLwotICAgIGNwICR7U30vdGVzdHMvY29tbWFuZHMuc2ggJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvCi0gICAgY3AgJHtTfS90ZXN0cy9ydW4uc2ggJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvCi0gICAgY3AgLXBSICR7U30vdGVzdHMvZXhwZWN0ZWQgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvZXhwZWN0ZWQKKyAgICBmaW5kIC4gLW5hbWUgJ3Rlc3QqJyAtbWF4ZGVwdGggMSAtdHlwZSBmIC1wZXJtIC0xMTEgLWV4ZWMgY3Age30gJHtEfSR7UFRFU1RfUEFUSH0gXDsKKyAgICBmaW5kIC4vLmxpYnMgLW5hbWUgJ3NhbXBsZSonIC1tYXhkZXB0aCAxIC10eXBlIGYgLXBlcm0gLTExMSAtZXhlYyBjcCB7fSAke0R9JHtQVEVTVF9QQVRIfSBcOworICAgIGZpbmQgLi8ubGlicyAtbmFtZSAndGVzdConIC1tYXhkZXB0aCAxIC10eXBlIGYgLXBlcm0gLTExMSAtZXhlYyBjcCB7fSAke0R9JHtQVEVTVF9QQVRIfSBcOwogCi0gICAgbGlzdD0iYml0b3BzIGJ1aWxkLXN5cyBjYWwgY29sIGNvbHJtIGNvbHVtbiBkbWVzZyBmc2NrIGhleGR1bXAgaHdjbG9jayBpcGNzIGlzb3NpemUgbG9naW4gbG9vayBtZDUgbWlzYyBtb3JlIG5hbWVpIHBhdGhzIHNjaGVkdXRpbHMgc2NyaXB0IHN3YXBvbiB0YWlsZiIKLSAgICAjIFRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIG5vdCBpbnN0YWxsZWQgIHlldDoKLSAgICAjIGJsa2lkIHNjc2lfZGVidWcgbW9kdWxlIGRlcGVuZGVudAotICAgICMgY3JhbWZzIGdjYyBkZXBlbmRlbnQKLSAgICAjIGVqZWN0IGdjYyBkZXBlbmRlbnQKLSAgICAjIGZkaXNrIHNjc2lfZGVidWcgbW9kdWxlIGFuZCBnY2MgZGVwZW5kZW50Ci0gICAgIyBsc2NwdSBnY2MgZGVwZW5kYW50Ci0gICAgIyBsaWJtb3VudCB1dWlkZ2VuIGRlcGVuZGVudAotICAgICMgbW91bnQgZ2NjIGRlcGVuZGFudAotICAgICMgcGFydHggYmxraWQgZGVwZW5kYW50Ci0gICAgZm9yIGQgaW4gJGxpc3Q7IGRvCi0gICAgICAgIGNwIC1wUiAke1N9L3Rlc3RzL3RzLyRkICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL3RzLwotICAgIGRvbmUKKyAgICBjcCAke1N9L3Rlc3RzLyouc2ggJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvCisgICAgY3AgLXBSICR7U30vdGVzdHMvZXhwZWN0ZWQgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvZXhwZWN0ZWQKKyAgICBjcCAtcFIgJHtTfS90ZXN0cy90cyAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy8KKyAgICBjcCAke1dPUktESVJ9L2J1aWxkL2NvbmZpZy5oICR7RH0ke1BURVNUX1BBVEh9CisKKyAgICAjIFRoZSBvcmlnaW5hbCBwYXRocyBvZiBleGVjdXRhYmxlcyB0byBiZSB0ZXN0ZWQgcG9pbnQgdG8gYSBsb2NhbCBmb2xkZXIgY29udGFpbmluZworICAgICMgdGhlIGV4ZWN1dGFibGVzLiBXZSB3YW50IHRvIHRlc3QgdGhlIGluc3RhbGxlZCBleGVjdXRhYmxlcywgbm90IHRoZSBsb2NhbCBjb3BpZXMuCisgICAgIyBTbyBzdHJpcCB0aGUgcGF0aHMsIHRoZSBleGVjdXRhYmxlcyB3aWxsIGJlIGxvY2F0ZWQgdmlhICJ3aGljaCIKKyAgICBzZWQgIC1pIFwKKyAgICAgICAgIC1lICcvXlRTX0NNRC8gc3wkdG9wX2J1aWxkZGlyL3x8ZycgXAorICAgICAgICAgLWUgJy9eVFNfSEVMUEVSLyBzfCR0b3BfYnVpbGRkaXJ8JHtQVEVTVF9QQVRIfXxnJyBcCisgICAgICAgICAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy9jb21tYW5kcy5zaAorCisgICAgIyBDaGFuZ2UgJ2lmIFsgISAteCAiJDEiIF0nIHRvICdpZiBbICEgLXggImB3aGljaCAkMSAyPi9kZXYvbnVsbGAiXScKKyAgICBzZWQgLWkgLWUgXAorICAgICAgICAnL15cdGlmW1s6c3BhY2U6XV1cW1tbOnNwYWNlOl1dIVtbOnNwYWNlOl1dLXhbWzpzcGFjZTpdXSIkMSIvc3wkMXxgd2hpY2ggJDEgMj4vZGV2L251bGxgfGcnIFwKKyAgICAgICAgICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL2Z1bmN0aW9ucy5zaAorCisgICAgIyAia2lsbCAtTCIgYmVoYXZlcyBkaWZmZXJlbnRseSB0aGFuICIvYmluL2tpbGwgLUwiIHNvIHdlIG5lZWQgYW4gYWRkaXRpb25hbCBmaXgKKyAgICBzZWQgLWkgLWUgXAorICAgICAgICAgJy9eVFNfQ01EX0tJTEwvIHN8a2lsbHwvYmluL2tpbGx8ZycgXAorICAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvY29tbWFuZHMuc2gKIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvbm9fZ2V0cmFuZG9tLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC9ub19nZXRyYW5kb20ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlmYTFjYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvbm9fZ2V0cmFuZG9tLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK2dldHJhbmRvbSgpIGlzIG9ubHkgYXZhaWxhYmxlIGluIGdsaWJjIDIuMjUrIGFuZCB1bmluYXRpdmUgbWF5IHJlbG9jYXRlIAorYmluYXJpZXMgb250byBzeXN0ZW1zIHRoYXQgZG9uJ3QgaGF2ZSB0aGlzIGZ1bmN0aW9uLiBGb3Igbm93LCBmb3JjZSB0aGUgCitjb2RlIHRvIHRoZSBvbGRlciBjb2RlcGF0aCB1bnRpbCB3ZSBjYW4gY29tZSB1cCB3aXRoIGEgYmV0dGVyIHNvbHV0aW9uIAorZm9yIHRoaXMga2luZCBvZiBpc3N1ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitSUAorMjAxNi84LzE1CisKK0luZGV4OiB1dGlsLWxpbnV4LTIuMzAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdXRpbC1saW51eC0yLjMwLm9yaWcvY29uZmlndXJlLmFjCisrKysgdXRpbC1saW51eC0yLjMwL2NvbmZpZ3VyZS5hYworQEAgLTM5OSw3ICszOTksNiBAQCBBQ19DSEVDS19GVU5DUyhbIFwKKyAJZ2V0ZHRhYmxlc2l6ZSBcCisgCWdldGV4ZWNuYW1lIFwKKyAJZ2V0bW50aW5mbyBcCistCWdldHJhbmRvbSBcCisgCWdldHJsaW1pdCBcCisgCWdldHNnbmFtIFwKKyAJaW5vdGlmeV9pbml0IFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXVpZC10ZXN0LWVycm9yLWFwaS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXVpZC10ZXN0LWVycm9yLWFwaS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZmZGU1ZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V1aWQtdGVzdC1lcnJvci1hcGkucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi1UaGlzIHBhdGNoIGFkZHMgZXJyb3IoKSBBUEkgaW1wbGVtZW50YXRpb24gZm9yIG5vbi1nbGliYyBzeXN0ZW0gQyBsaWJzCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotLS0tCi0gbWlzYy11dGlscy90ZXN0X3V1aWRkLmMgfCA2MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCi0gMSBmaWxlIGNoYW5nZWQsIDYxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL21pc2MtdXRpbHMvdGVzdF91dWlkZC5jIGIvbWlzYy11dGlscy90ZXN0X3V1aWRkLmMKLWluZGV4IDM2ZjNiM2QuLjdkNTc5Y2UgMTAwNjQ0Ci0tLS0gYS9taXNjLXV0aWxzL3Rlc3RfdXVpZGQuYwotKysrIGIvbWlzYy11dGlscy90ZXN0X3V1aWRkLmMKLUBAIC0yMyw3ICsyMyw2IEBACi0gICoKLSAgKgltYWtlIHV1aWRkIHV1aWRnZW4gbG9jYWxzdGF0ZWRpcj0vdmFyCi0gICovCi0tI2luY2x1ZGUgPGVycm9yLmg+Ci0gI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSAjaW5jbHVkZSA8c3RkaW8uaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci1AQCAtMzgsNiArMzcsMTcgQEAKLSAjaW5jbHVkZSAieGFsbG9jLmgiCi0gI2luY2x1ZGUgInN0cnV0aWxzLmgiCi0gCi0rI2lmZGVmIF9fR0xJQkNfXwotKyNpbmNsdWRlIDxlcnJvci5oPgotKyNlbHNlCi0rZXh0ZXJuIHZvaWQgKCplcnJvcl9wcmludF9wcm9nbmFtZSkodm9pZCk7Ci0rZXh0ZXJuIHVuc2lnbmVkIGludCBlcnJvcl9tZXNzYWdlX2NvdW50OwotK2V4dGVybiBpbnQgZXJyb3Jfb25lX3Blcl9saW5lOwotKwotK3ZvaWQgZXJyb3IoaW50LCBpbnQsIGNvbnN0IGNoYXIgKiwgLi4uKTsKLSt2b2lkIGVycm9yX2F0X2xpbmUoaW50LCBpbnQsIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50LCBjb25zdCBjaGFyICosIC4uLik7Ci0rI2VuZGlmCi0rCi0gI2RlZmluZSBMT0cobGV2ZWwsYXJncykgaWYgKGxvZ2xldiA+PSBsZXZlbCkgeyBmcHJpbnRmIGFyZ3M7IH0KLSAKLSBzaXplX3QgbnByb2Nlc3NlcyA9IDQ7Ci1AQCAtMjU2LDYgKzI2Niw1NiBAQCBzdGF0aWMgdm9pZCBvYmplY3RfZHVtcChzaXplX3QgaWR4LCBvYmplY3RfdCAqb2JqKQotIAlmcHJpbnRmKHN0ZGVyciwgIn1cbiIpOwotIH0KLSAKLSsjaWZuZGVmIF9fR0xJQkNfXwotK2V4dGVybiBjaGFyICpfX3Byb2duYW1lOwotKwotK3ZvaWQgKCplcnJvcl9wcmludF9wcm9nbmFtZSkodm9pZCkgPSAwOwotK3Vuc2lnbmVkIGludCBlcnJvcl9tZXNzYWdlX2NvdW50ID0gMDsKLStpbnQgZXJyb3Jfb25lX3Blcl9saW5lID0gMDsKLSsKLStzdGF0aWMgdm9pZCBlcHJpbnQoaW50IHN0YXR1cywgaW50IGUsIGNvbnN0IGNoYXIgKmZpbGUsIHVuc2lnbmVkIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCi0rewotKwlpZiAoZmlsZSAmJiBlcnJvcl9vbmVfcGVyX2xpbmUpIHsKLSsJCXN0YXRpYyBjb25zdCBjaGFyICpvbGRmaWxlOwotKwkJc3RhdGljIHVuc2lnbmVkIGludCBvbGRsaW5lOwotKwkJaWYgKGxpbmUgPT0gb2xkbGluZSAmJiBzdHJjbXAoZmlsZSwgb2xkZmlsZSkgPT0gMCkKLSsJCQlyZXR1cm47Ci0rCQlvbGRmaWxlID0gZmlsZTsKLSsJCW9sZGxpbmUgPSBsaW5lOwotKwl9Ci0rCWlmIChlcnJvcl9wcmludF9wcm9nbmFtZSkKLSsJCWVycm9yX3ByaW50X3Byb2duYW1lKCk7Ci0rCWVsc2UKLSsJCWZwcmludGYoc3RkZXJyLCAiJXM6ICIsIF9fcHJvZ25hbWUpOwotKwlpZiAoZmlsZSkKLSsJCWZwcmludGYoc3RkZXJyLCAiJXM6JXU6ICIsIGZpbGUsIGxpbmUpOwotKwl2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOwotKwlpZiAoZSkKLSsJCWZwcmludGYoc3RkZXJyLCAiOiAlcyIsIHN0cmVycm9yKGUpKTsKLSsJcHV0YygnXG4nLCBzdGRlcnIpOwotKwlmZmx1c2goc3RkZXJyKTsKLSsJZXJyb3JfbWVzc2FnZV9jb3VudCsrOwotKwlpZiAoc3RhdHVzKQotKwkJZXhpdChzdGF0dXMpOwotK30KLSsKLSt2b2lkIGVycm9yKGludCBzdGF0dXMsIGludCBlLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLSt7Ci0rCXZhX2xpc3QgYXA7Ci0rCXZhX3N0YXJ0KGFwLGZtdCk7Ci0rCWVwcmludChzdGF0dXMsIGUsIDAsIDAsIGZtdCwgYXApOwotKwl2YV9lbmQoYXApOwotK30KLSsKLSt2b2lkIGVycm9yX2F0X2xpbmUoaW50IHN0YXR1cywgaW50IGUsIGNvbnN0IGNoYXIgKmZpbGUsIHVuc2lnbmVkIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLSt7Ci0rCXZhX2xpc3QgYXA7Ci0rCXZhX3N0YXJ0KGFwLGZtdCk7Ci0rCWVwcmludChzdGF0dXMsIGUsIGZpbGUsIGxpbmUsIGZtdCwgYXApOwotKwl2YV9lbmQoYXApOwotK30KLSsjZW5kaWYgLyogX19HTElCQ19fICovCi0rCi0gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSB7Ci0gCXNpemVfdCBpLCBuZmFpbGVkID0gMCwgbmlnbm9yZWQgPSAwOwotLS0gCi0yLjguMwotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4XzIuMjkuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXhfMi4yOS4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzk1YjQ3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXhfMi4yOS4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotTUFKT1JfVkVSU0lPTiA9ICIyLjI5IgotcmVxdWlyZSB1dGlsLWxpbnV4LmluYwotCi0jIFRvIHN1cHBvcnQgb2xkZXIgaG9zdHMsIHdlIG5lZWQgdG8gcGF0Y2ggYW5kL29yIHJldmVydAotIyBzb21lIHVwc3RyZWFtIGNoYW5nZXMuICBPbmx5IGRvIHRoaXMgZm9yIG5hdGl2ZSBwYWNrYWdlcy4KLU9MREhPU1QgPSAiIgotT0xESE9TVF9jbGFzcy1uYXRpdmUgPSAiZmlsZTovL3V0aWwtbGludXgtbmF0aXZlLXFzb3J0LnBhdGNoIgotCi1TUkNfVVJJICs9ICJmaWxlOi8vY29uZmlndXJlLXNiaW5kaXIucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3J1bnVzZXIucGFtZCBcCi0gICAgICAgICAgICBmaWxlOi8vcnVudXNlci1sLnBhbWQgXAotICAgICAgICAgICAgJHtPTERIT1NUfSBcCi0gICAgICAgICAgICBmaWxlOi8vcHRlc3QucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCi0gICAgICAgICAgICBmaWxlOi8vZGlzcGxheV90ZXN0bmFtZV9mb3Jfc3VidGVzdC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vYXZvaWRfcGFyYWxsZWxfdGVzdHMucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3V1aWQtdGVzdC1lcnJvci1hcGkucGF0Y2ggXAotIgotU1JDX1VSSVttZDVzdW1dID0gIjBjYmI2ZDE2YWI5YzU3MzZlNTY0OWVmMTI2NGJlZTZlIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBjZTQwNjAwYjkzNGVjMmZlY2ZhNmJmYzRlZmU2OTgyZDA1MWJhOTZjMjgzMmIwNTIwMTM0N2FlYzU4MmY1NGYiCi0KLUNBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJzY2FuZl9jdl9hbGxvY19tb2RpZmllcj1tcyIKLQotRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICIke1NIQVJFRF9FWFRSQV9PRUNPTkZ9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWZhbGxvY2F0ZSBcCi0JCQkgICAgIC0tZGlzYWJsZS11c2UtdHR5LWdyb3VwIFwKLSIKLUVYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmVzZGsgPSAiJHtTSEFSRURfRVhUUkFfT0VDT05GfSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1mYWxsb2NhdGUgXAotCQkJCS0tZGlzYWJsZS11c2UtdHR5LWdyb3VwIFwKLSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXhfMi4zMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXhfMi4zMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTQ0OWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eF8yLjMwLmJiCkBAIC0wLDAgKzEsMzEgQEAKK01BSk9SX1ZFUlNJT04gPSAiMi4zMCIKK3JlcXVpcmUgdXRpbC1saW51eC5pbmMKKworIyBUbyBzdXBwb3J0IG9sZGVyIGhvc3RzLCB3ZSBuZWVkIHRvIHBhdGNoIGFuZC9vciByZXZlcnQKKyMgc29tZSB1cHN0cmVhbSBjaGFuZ2VzLiAgT25seSBkbyB0aGlzIGZvciBuYXRpdmUgcGFja2FnZXMuCitPTERIT1NUID0gIiIKK09MREhPU1RfY2xhc3MtbmF0aXZlID0gImZpbGU6Ly91dGlsLWxpbnV4LW5hdGl2ZS1xc29ydC5wYXRjaCIKKworU1JDX1VSSSArPSAiZmlsZTovL2NvbmZpZ3VyZS1zYmluZGlyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ydW51c2VyLnBhbWQgXAorICAgICAgICAgICAgZmlsZTovL3J1bnVzZXItbC5wYW1kIFwKKyAgICAgICAgICAgICR7T0xESE9TVH0gXAorICAgICAgICAgICAgZmlsZTovL3B0ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAgZmlsZTovL2Rpc3BsYXlfdGVzdG5hbWVfZm9yX3N1YnRlc3QucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2F2b2lkX3BhcmFsbGVsX3Rlc3RzLnBhdGNoIFwKKyIKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZmlsZTovL25vX2dldHJhbmRvbS5wYXRjaCIKK1NSQ19VUklbbWQ1c3VtXSA9ICJlYWEzNDI5MTUwMjY4MDI3OTA4YTFiOGFlNmVlOWE2MiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjMjA4YTRmZjY5MDZjYjdmNTc5NDBhYTViYzNhNmVlZDE0NmU1MGE3Y2MwYTA5MmY1MmVmMmFiNjUwNTdhMDhkIgorCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAic2NhbmZfY3ZfYWxsb2NfbW9kaWZpZXI9bXMiCisKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiJHtTSEFSRURfRVhUUkFfT0VDT05GfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1mYWxsb2NhdGUgXAorCQkJICAgICAtLWRpc2FibGUtdXNlLXR0eS1ncm91cCBcCisiCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlc2RrID0gIiR7U0hBUkVEX0VYVFJBX09FQ09ORn0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWRpc2FibGUtZmFsbG9jYXRlIFwKKwkJCQktLWRpc2FibGUtdXNlLXR0eS1ncm91cCBcCisiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliXzEuMi4xMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWJfMS4yLjExLmJiCmluZGV4IGJhMjE2ZjYuLjY0MTA1MTkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWJfMS4yLjExLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWJfMS4yLjExLmJiCkBAIC00NSw2ICs0NSwxMSBAQAogCWluc3RhbGwgJHtCfS9taW5pZ3ppcCAgICR7RH0ke1BURVNUX1BBVEh9CiAJaW5zdGFsbCAke0J9L2V4YW1wbGVzaCAgJHtEfSR7UFRFU1RfUEFUSH0KIAlpbnN0YWxsICR7Qn0vbWluaWd6aXBzaCAke0R9JHtQVEVTVF9QQVRIfQorCisJIyBSZW1vdmUgYnVpbGRob3N0IHJlZmVyZW5jZXMuLi4KKwlzZWQgLWkgLWUgInMsLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSwsZyIgXAorCQktZSAnc3wke0RFQlVHX1BSRUZJWF9NQVB9fHxnJyBcCisJICR7RH0ke1BURVNUX1BBVEh9L01ha2VmaWxlCiB9CiAKICMgTW92ZSB6bGliIHNoYXJlZCBsaWJyYXJpZXMgZm9yIHRhcmdldCBidWlsZHMgdG8gJGJhc2VfbGliZGlyIHNvIHRoZSBsaWJyYXJ5CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQtbmF0aXZlXzEuMi4xMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1uYXRpdmVfMS4yLjEyLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTY2MGRhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1uYXRpdmVfMS4yLjEyLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1yZXF1aXJlIGFwdC1uYXRpdmUuaW5jCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly9ub2NvbmZpZ3VyZS5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vbm8tY3VybC5wYXRjaCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1uYXRpdmVfMS4yLjI0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LW5hdGl2ZV8xLjIuMjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIxNmI1MAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1uYXRpdmVfMS4yLjI0LmJiCkBAIC0wLDAgKzEsNyBAQAorcmVxdWlyZSBhcHQtbmF0aXZlLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vbm9jb25maWd1cmUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL25vLWN1cmwucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2djY180LnhfYXB0LXBrZy1jb250cmliLXN0cnV0bC5jYy1JbmNsdWRlLWFycmF5LWhlYWRlci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZ2NjXzQueF9SZXZlcnQtYXZvaWQtY2hhbmdpbmctdGhlLWdsb2JhbC1MQ19USU1FLWZvci1SZWxlYXNlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9nY2NfNC54X1JldmVydC11c2UtZGUtbG9jYWxlZC1zdGQtcHV0X3RpbWUtaW5zdGVhZC1yb2xsaW5nLW8ucGF0Y2giCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LmluYwppbmRleCAzMDI2MzcwLi5mMWNkZTMwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC5pbmMKQEAgLTIsNyArMiw3IEBACiBMSUNFTlNFID0gIkdQTHYyLjArIgogU0VDVElPTiA9ICJiYXNlIgogCi1TUkNfVVJJID0gImh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLzIwMTYwNTI2VDE2Mjk0M1ovcG9vbC9tYWluL2EvJHtCUE59LyR7QlBOfV8ke1BWfS50YXIueHogXAorU1JDX1VSSSA9ICJodHRwOi8vYXJjaGl2ZS51YnVudHUuY29tL3VidW50dS9wb29sL21haW4vYS8ke0JQTn0vJHtCUE59XyR7UFZ9LnRhci54eiBcCiAgICAgICAgICAgIGZpbGU6Ly91c2UtaG9zdC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9tYWtlcmFjZS5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9uby1ubHMtZHBrZy5wYXRjaCBcCkBAIC0xNCw5ICsxNCw5IEBACiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWVudmlyb25tZW50Lm1hay1tdXNsLWJhc2VkLXN5c3RlbXMtY2FuLWdlbmVyYXRlLXNoYXIucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1hcHQtMS4yLjEyLUZpeC1tdXNsLWJ1aWxkLnBhdGNoIFwKICAgICAgICAgICAgIgotU1JDX1VSSVttZDVzdW1dID0gIjgwZjZmMGVmMTEwYTQ1YTdlNWFmOGE5ZDIzM2ZiMGU3IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImU4MjBkMjdjYmE3MzQ3NmRmNGFiY2ZmMjdkYWRkMWI1ODQ3NDc0YmZlODVmN2U5MjAyYTlhMDc1MjY5NzNlYTYiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkdQTDttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMiCitTUkNfVVJJW21kNXN1bV0gPSAiY2U4ZjlhYjExZjRmZDBhMDhlYzczZWFmZmQ3NWM4ZjAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmExMzExYTljZTAwZTcyMzc5YTBhM2JjNmQyNDBiYTMwYzA5NjhjZmJiYjM0NzI4NTllNTBiOTllMjRlOTU5OCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuR1BMO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKIAogIyB0aGUgcGFja2FnZSBpcyB0YWtlbiBmcm9tIHNuYXBzaG90cy5kZWJpYW4ub3JnOyB0aGF0IHNvdXJjZSBpcyBzdGF0aWMgYW5kIGdvZXMgc3RhbGUKICMgc28gd2UgY2hlY2sgdGhlIGxhdGVzdCB1cHN0cmVhbSBmcm9tIGEgZGlyZWN0b3J5IHRoYXQgZG9lcyBnZXQgdXBkYXRlZApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LzAwMDEtUmV2ZXJ0LWFsd2F5cy1ydW4tZHBrZy1jb25maWd1cmUtYS1hdC10aGUtZW5kLW9mLW91ci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLVJldmVydC1hbHdheXMtcnVuLWRwa2ctY29uZmlndXJlLWEtYXQtdGhlLWVuZC1vZi1vdXIucGF0Y2gKaW5kZXggYjNhODgzYi4uNzM0YmEwMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LzAwMDEtUmV2ZXJ0LWFsd2F5cy1ydW4tZHBrZy1jb25maWd1cmUtYS1hdC10aGUtZW5kLW9mLW91ci5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1SZXZlcnQtYWx3YXlzLXJ1bi1kcGtnLWNvbmZpZ3VyZS1hLWF0LXRoZS1lbmQtb2Ytb3VyLnBhdGNoCkBAIC0yMiwxMCArMjIsMTAgQEAKICAzIGZpbGVzIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvYXB0LXBrZy9kZWIvZHBrZ3BtLmNjIGIvYXB0LXBrZy9kZWIvZHBrZ3BtLmNjCi1pbmRleCA4MzRjYjBlLi44NGRlZDNhIDEwMDY0NAoraW5kZXggNTMzZDliMzY3Li42Y2U4MWJiZDkgMTAwNjQ0CiAtLS0gYS9hcHQtcGtnL2RlYi9kcGtncG0uY2MKICsrKyBiL2FwdC1wa2cvZGViL2Rwa2dwbS5jYwotQEAgLTEwMzcsMTIgKzEwMzcsNiBAQCB2b2lkIHBrZ0RQa2dQTTo6QnVpbGRQYWNrYWdlc1Byb2dyZXNzTWFwKCkKK0BAIC0xMDQxLDEyICsxMDQxLDYgQEAgdm9pZCBwa2dEUGtnUE06OkJ1aWxkUGFja2FnZXNQcm9ncmVzc01hcCgpCiAgCSBQYWNrYWdlc1RvdGFsKys7CiAgICAgICAgfQogICAgIH0KQEAgLTM4LDcgKzM4LDcgQEAKICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp9fX0qLwogIGJvb2wgcGtnRFBrZ1BNOjpHbyhpbnQgU3RhdHVzRmQpCi1AQCAtMTI1MCw4ICsxMjQ0LDkgQEAgYm9vbCBwa2dEUGtnUE06OkdvKEFQVDo6UHJvZ3Jlc3M6OlBhY2thZ2VNYW5hZ2VyICpwcm9ncmVzcykKK0BAIC0xMjY4LDggKzEyNjIsOSBAQCBib29sIHBrZ0RQa2dQTTo6R28oQVBUOjpQcm9ncmVzczo6UGFja2FnZU1hbmFnZXIgKnByb2dyZXNzKQogIAogICAgIC8vIHN1cHBvcnQgc3VicHJlc3Npbmcgb2YgdHJpZ2dlcnMgcHJvY2Vzc2luZyBmb3Igc3BlY2lhbAogICAgIC8vIGNhc2VzIGxpa2UgZC1pIHRoYXQgcnVucyB0aGUgdHJpZ2dlcnMgaGFuZGxpbmcgbWFudWFsbHkKQEAgLTUwLDcgKzUwLDcgQEAKICAKICAgICAvLyBmb3IgdGhlIHByb2dyZXNzCiBkaWZmIC0tZ2l0IGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1kZWI4MjIgYi90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkLWRlYjgyMgotaW5kZXggNThmZDczMi4uMzM1OTc2MiAxMDA3NTUKK2luZGV4IGE4ZDU5NjA4ZC4uMGM2YTliYmJmIDEwMDc1NQogLS0tIGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1kZWI4MjIKICsrKyBiL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZGViODIyCiBAQCAtMjcsMzYgKzI3LDM2IEBAIE1lc3NhZ2U6IEluc3RhbGxpbmcgdGVzdGluZyAoYW1kNjQpCkBAIC02OSwxOSArNjksMTkgQEAKICAKICBTdGF0dXM6IHByb2dyZXNzCiAgUGFja2FnZTogdGVzdGluZzphbWQ2NAotLVBlcmNlbnQ6IDUwCi0rUGVyY2VudDogNjAKKy1QZXJjZW50OiA1MC4wMDAwCisrUGVyY2VudDogNjAuMDAwMAogIE1lc3NhZ2U6IFByZXBhcmluZyB0byBjb25maWd1cmUgdGVzdGluZyAoYW1kNjQpCiAgCiAgU3RhdHVzOiBwcm9ncmVzcwotLVBlcmNlbnQ6IDUwCi0rUGVyY2VudDogNjAKKy1QZXJjZW50OiA1MC4wMDAwCisrUGVyY2VudDogNjAuMDAwMAogIE1lc3NhZ2U6IFJ1bm5pbmcgZHBrZwogIAogIFN0YXR1czogcHJvZ3Jlc3MKICBQYWNrYWdlOiB0ZXN0aW5nOmFtZDY0Ci0tUGVyY2VudDogNTAKLStQZXJjZW50OiA2MAorLVBlcmNlbnQ6IDUwLjAwMDAKKytQZXJjZW50OiA2MC4wMDAwCiAgTWVzc2FnZTogQ29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCiAgCiAgU3RhdHVzOiBwcm9ncmVzcwpAQCAtOTgsNyArOTgsNyBAQAogIAogIFN0YXR1czogcHJvZ3Jlc3MKIGRpZmYgLS1naXQgYS90ZXN0L2ludGVncmF0aW9uL3Rlc3Qtbm8tZmRzLWxlYWtlZC10by1tYWludGFpbmVyLXNjcmlwdHMgYi90ZXN0L2ludGVncmF0aW9uL3Rlc3Qtbm8tZmRzLWxlYWtlZC10by1tYWludGFpbmVyLXNjcmlwdHMKLWluZGV4IGQ4NmU2MzguLmVmNmQyM2IgMTAwNzU1CitpbmRleCBkODZlNjM4Y2QuLmVmNmQyM2JlMiAxMDA3NTUKIC0tLSBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1uby1mZHMtbGVha2VkLXRvLW1haW50YWluZXItc2NyaXB0cwogKysrIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LW5vLWZkcy1sZWFrZWQtdG8tbWFpbnRhaW5lci1zY3JpcHRzCiBAQCAtNTksOCArNTksNyBAQCBzdGFydHVwIHBhY2thZ2VzIGNvbmZpZ3VyZQpAQCAtMTIyLDUgKzEyMiw1IEBACiAgY2hlY2twdXJnZQogIAogLS0gCi0yLjEuNAorMi4xMS4wCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLWFwdC0xLjIuMTItRml4LW11c2wtYnVpbGQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1hcHQtMS4yLjEyLUZpeC1tdXNsLWJ1aWxkLnBhdGNoCmluZGV4IDA0YjA0MDYuLmY3YWMxOWIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLWFwdC0xLjIuMTItRml4LW11c2wtYnVpbGQucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LzAwMDEtYXB0LTEuMi4xMi1GaXgtbXVzbC1idWlsZC5wYXRjaApAQCAtMTEsNyArMTEsNyBAQAogYXB0LXBrZy9jb250cmliL3NydnJlYy5oOiBBZGQgZXhwbGljaXR5IGluY2x1ZGUgb2Ygc3lzL3R5cGVzLmgKIHRvIGF2b2lkIGVycm9ycyBpbiB0eXBlcyB1X2ludF9TSVpFLgogCi1VcHN0cmVhbS1zdGF0dXM6IFBlbmRpbmcKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZwogCiBTaWduZWQtb2ZmLWJ5OiBBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KIC0tLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2djY180LnhfUmV2ZXJ0LWF2b2lkLWNoYW5naW5nLXRoZS1nbG9iYWwtTENfVElNRS1mb3ItUmVsZWFzZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9nY2NfNC54X1JldmVydC1hdm9pZC1jaGFuZ2luZy10aGUtZ2xvYmFsLUxDX1RJTUUtZm9yLVJlbGVhc2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM4ZGUyMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9nY2NfNC54X1JldmVydC1hdm9pZC1jaGFuZ2luZy10aGUtZ2xvYmFsLUxDX1RJTUUtZm9yLVJlbGVhc2UucGF0Y2gKQEAgLTAsMCArMSw4MCBAQAorRnJvbSA3ZWYyYjJkYmEwZTBiZWU0NTBkYTNjODQ1MGVhNzgyYTNlN2Q2NDI5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuPUMzPUFEYmFsPTIwTGltPUMzPUIzbj89IDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgorRGF0ZTogVHVlLCAyMiBBdWcgMjAxNyAxMTo0OTowMSAtMDUwMAorU3ViamVjdDogW1BBVENIIDMvM10gUmV2ZXJ0ICJhdm9pZCBjaGFuZ2luZyB0aGUgZ2xvYmFsIExDX1RJTUUgZm9yIFJlbGVhc2UKKyB3cml0aW5nIgorCitUaGlzIHJldmVydHMgY29tbWl0IDc4ZTdiNjgzYzY0NWU5MDdkYjEyNjU4NDA1YTRiMjAxYTYyNDNlYTguCisKK0FmdGVyIHdlIGRyb3AgZGViaWFuOCBhbmQgY2VudG9zNyB0aGF0IGhhcyBnY2MgPCA1IChzdGQ6OnB1dF90aW1lIG5vdCBhdmFpbGFibGUpIAordmVyc2lvbnMgdGhpcyBwYXRjaCBjYW4gYmUgcmVtb3ZlLgorCitTaWduZWQtb2ZmLWJ5OiBBbmliYWwgTGltb24gPGxpbW9uLmFuaWJhbEBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBmdHBhcmNoaXZlL3dyaXRlci5jYyB8IDI5ICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE3IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZnRwYXJjaGl2ZS93cml0ZXIuY2MgYi9mdHBhcmNoaXZlL3dyaXRlci5jYworaW5kZXggMjU5NjM4Mi4uZTQzYTY0MyAxMDA2NDQKKy0tLSBhL2Z0cGFyY2hpdmUvd3JpdGVyLmNjCisrKysgYi9mdHBhcmNoaXZlL3dyaXRlci5jYworQEAgLTM3LDcgKzM3LDYgQEAKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPGN0aW1lPgorICNpbmNsdWRlIDxpb3N0cmVhbT4KKy0jaW5jbHVkZSA8aW9tYW5pcD4KKyAjaW5jbHVkZSA8c3N0cmVhbT4KKyAjaW5jbHVkZSA8bWVtb3J5PgorICNpbmNsdWRlIDx1dGlsaXR5PgorQEAgLTk4NCwyOSArOTgzLDM1IEBAIFJlbGVhc2VXcml0ZXI6OlJlbGVhc2VXcml0ZXIoRmlsZUZkICogY29uc3QgR2l2ZW5PdXRwdXQsIHN0cmluZyBjb25zdCAmLypEQiovKSA6CisgICAgQWRkUGF0dGVybnMoX2NvbmZpZy0+RmluZFZlY3RvcigiQVBUOjpGVFBBcmNoaXZlOjpSZWxlYXNlOjpQYXR0ZXJucyIpKTsKKyAKKyAgICB0aW1lX3QgY29uc3Qgbm93ID0gdGltZShOVUxMKTsKKy0gICBhdXRvIGNvbnN0IHBvc2l4ID0gc3RkOjpsb2NhbGUoIkMuVVRGLTgiKTsKKyAKKy0gICAvLyBGSVhNRTogdXNlIFRpbWVSRkMxMTIzIGhlcmU/IEJ1dCB0aGF0IHVzZXMgR01UIHRvIHNhdGlzZnkgSFRUUC8xLjEKKy0gICBzdGQ6Om9zdHJpbmdzdHJlYW0gZGF0ZXN0cjsKKy0gICBkYXRlc3RyLmltYnVlKHBvc2l4KTsKKy0gICBkYXRlc3RyIDw8IHN0ZDo6cHV0X3RpbWUoZ210aW1lKCZub3cpLCAiJWEsICVkICViICVZICVIOiVNOiVTIFVUQyIpOworKyAgIHNldGxvY2FsZShMQ19USU1FLCAiQyIpOworKworKyAgIGNoYXIgZGF0ZXN0clsxMjhdOworKyAgIGlmIChzdHJmdGltZShkYXRlc3RyLCBzaXplb2YoZGF0ZXN0ciksICIlYSwgJWQgJWIgJVkgJUg6JU06JVMgVVRDIiwKKysgICAgICAgICAgICAgICAgZ210aW1lKCZub3cpKSA9PSAwKQorKyAgIHsKKysgICAgICBkYXRlc3RyWzBdID0gJ1wwJzsKKysgICB9CisgCisgICAgdGltZV90IGNvbnN0IHZhbGlkdW50aWwgPSBub3cgKyBfY29uZmlnLT5GaW5kSSgiQVBUOjpGVFBBcmNoaXZlOjpSZWxlYXNlOjpWYWxpZFRpbWUiLCAwKTsKKy0gICBzdGQ6Om9zdHJpbmdzdHJlYW0gdmFsaWRzdHI7CistICAgaWYgKHZhbGlkdW50aWwgIT0gbm93KQorKyAgIGNoYXIgdmFsaWRzdHJbMTI4XTsKKysgICBpZiAobm93ID09IHZhbGlkdW50aWwgfHwKKysgICAgICAgc3RyZnRpbWUodmFsaWRzdHIsIHNpemVvZih2YWxpZHN0ciksICIlYSwgJWQgJWIgJVkgJUg6JU06JVMgVVRDIiwKKysgICAgICAgICAgICAgICAgZ210aW1lKCZ2YWxpZHVudGlsKSkgPT0gMCkKKyAgICB7CistICAgICAgZGF0ZXN0ci5pbWJ1ZShwb3NpeCk7CistICAgICAgdmFsaWRzdHIgPDwgc3RkOjpwdXRfdGltZShnbXRpbWUoJnZhbGlkdW50aWwpLCAiJWEsICVkICViICVZICVIOiVNOiVTIFVUQyIpOworKyAgICAgIHZhbGlkc3RyWzBdID0gJ1wwJzsKKyAgICB9CisgCisrICAgc2V0bG9jYWxlKExDX1RJTUUsICIiKTsKKysKKyAgICBtYXA8c3RyaW5nLHN0cmluZz4gRmllbGRzOworICAgIEZpZWxkc1siT3JpZ2luIl0gPSAiIjsKKyAgICBGaWVsZHNbIkxhYmVsIl0gPSAiIjsKKyAgICBGaWVsZHNbIlN1aXRlIl0gPSAiIjsKKyAgICBGaWVsZHNbIlZlcnNpb24iXSA9ICIiOworICAgIEZpZWxkc1siQ29kZW5hbWUiXSA9ICIiOworLSAgIEZpZWxkc1siRGF0ZSJdID0gZGF0ZXN0ci5zdHIoKTsKKy0gICBGaWVsZHNbIlZhbGlkLVVudGlsIl0gPSB2YWxpZHN0ci5zdHIoKTsKKysgICBGaWVsZHNbIkRhdGUiXSA9IGRhdGVzdHI7CisrICAgRmllbGRzWyJWYWxpZC1VbnRpbCJdID0gdmFsaWRzdHI7CisgICAgRmllbGRzWyJBcmNoaXRlY3R1cmVzIl0gPSAiIjsKKyAgICBGaWVsZHNbIkNvbXBvbmVudHMiXSA9ICIiOworICAgIEZpZWxkc1siRGVzY3JpcHRpb24iXSA9ICIiOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvZ2NjXzQueF9SZXZlcnQtdXNlLWRlLWxvY2FsZWQtc3RkLXB1dF90aW1lLWluc3RlYWQtcm9sbGluZy1vLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2djY180LnhfUmV2ZXJ0LXVzZS1kZS1sb2NhbGVkLXN0ZC1wdXRfdGltZS1pbnN0ZWFkLXJvbGxpbmctby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODhhNjZhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2djY180LnhfUmV2ZXJ0LXVzZS1kZS1sb2NhbGVkLXN0ZC1wdXRfdGltZS1pbnN0ZWFkLXJvbGxpbmctby5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIGM3MmVmOWI2YWU4M2EwYTJmYmJlZmQ1YzA1MDMzNWY2NWYwZDJiYzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW49QzM9QURiYWw9MjBMaW09QzM9QjNuPz0gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUdWUsIDIyIEF1ZyAyMDE3IDExOjQ4OjQ2IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMi8zXSBSZXZlcnQgInVzZSBkZS1sb2NhbGVkIHN0ZDo6cHV0X3RpbWUgaW5zdGVhZCByb2xsaW5nIG91cgorIG93biIKKworVGhpcyByZXZlcnRzIGNvbW1pdCA0ZWQyYTE3YWI0MzM0ZjAxOWMwMDUxMmFhNTRhMTYyZjBiZjA4M2M0LgorCitBZnRlciB3ZSBkcm9wIGRlYmlhbjggYW5kIGNlbnRvczcgdGhhdCBoYXMgZ2NjIDwgNSAoc3RkOjpwdXRfdGltZSBub3QgYXZhaWxhYmxlKSAKK3ZlcnNpb25zIHRoaXMgcGF0Y2ggY2FuIGJlIHJlbW92ZS4KKworU2lnbmVkLW9mZi1ieTogQW5pYmFsIExpbW9uIDxsaW1vbi5hbmliYWxAZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgYXB0LXBrZy9jb250cmliL3N0cnV0bC5jYyB8IDE0ICsrKysrKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2FwdC1wa2cvY29udHJpYi9zdHJ1dGwuY2MgYi9hcHQtcGtnL2NvbnRyaWIvc3RydXRsLmNjCitpbmRleCBjMmZmMDFkLi5lOWVmMmJlIDEwMDY0NAorLS0tIGEvYXB0LXBrZy9jb250cmliL3N0cnV0bC5jYworKysrIGIvYXB0LXBrZy9jb250cmliL3N0cnV0bC5jYworQEAgLTc2MCwxMSArNzYwLDE1IEBAIHN0cmluZyBUaW1lUkZDMTEyMyh0aW1lX3QgRGF0ZSkKKyAgICBpZiAoZ210aW1lX3IoJkRhdGUsICZDb252KSA9PSBOVUxMKQorICAgICAgIHJldHVybiAiIjsKKyAKKy0gICBhdXRvIGNvbnN0IHBvc2l4ID0gc3RkOjpsb2NhbGU6OmNsYXNzaWMoKTsKKy0gICBzdGQ6Om9zdHJpbmdzdHJlYW0gZGF0ZXN0cjsKKy0gICBkYXRlc3RyLmltYnVlKHBvc2l4KTsKKy0gICBkYXRlc3RyIDw8IHN0ZDo6cHV0X3RpbWUoJkNvbnYsICIlYSwgJWQgJWIgJVkgJUg6JU06JVMgR01UIik7CistICAgcmV0dXJuIGRhdGVzdHIuc3RyKCk7CisrICAgY2hhciBCdWZbMzAwXTsKKysgICBjb25zdCBjaGFyICpEYXlbXSA9IHsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0In07CisrICAgY29uc3QgY2hhciAqTW9udGhbXSA9IHsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMifTsKKysKKysgICBzbnByaW50ZihCdWYsIHNpemVvZihCdWYpLCAiJXMsICUwMmkgJXMgJWkgJTAyaTolMDJpOiUwMmkgR01UIixEYXlbQ29udi50bV93ZGF5XSwKKysJICAgQ29udi50bV9tZGF5LE1vbnRoW0NvbnYudG1fbW9uXSxDb252LnRtX3llYXIrMTkwMCxDb252LnRtX2hvdXIsCisrCSAgIENvbnYudG1fbWluLENvbnYudG1fc2VjKTsKKysgICByZXR1cm4gQnVmOworIH0KKyAJCQkJCQkJCQkvKn19fSovCisgLy8gUmVhZE1lc3NhZ2VzIC0gUmVhZCBtZXNzYWdlcyBmcm9tIHRoZSBGRAkJCQkvKnt7eyovCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9nY2NfNC54X2FwdC1wa2ctY29udHJpYi1zdHJ1dGwuY2MtSW5jbHVkZS1hcnJheS1oZWFkZXIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvZ2NjXzQueF9hcHQtcGtnLWNvbnRyaWItc3RydXRsLmNjLUluY2x1ZGUtYXJyYXktaGVhZGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMzI1OTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvZ2NjXzQueF9hcHQtcGtnLWNvbnRyaWItc3RydXRsLmNjLUluY2x1ZGUtYXJyYXktaGVhZGVyLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gZmY4NTYyZjc3MjRjNGRiNGI4MzYzNWFmOWU2MjdmMzQ5NTIyMjMyNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuaWJhbCBMaW1vbiA8bGltb24uYW5pYmFsQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMjIgQXVnIDIwMTcgMDQ6NDE6MzEgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAxLzNdIGFwdC1wa2cvY29udHJpYi9zdHJ1dGwuY2M6IEluY2x1ZGUgYXJyYXkgaGVhZGVyCisKK0lmIEdDQyB2ZXJzaW9uIGlzIGxlc3MgdGhhbiA1IHRoZSBhcnJheSBoZWFkZXIgbmVlZHMgdG8gYmUgaW5jbHVkZWQKK3RvIHN1cHBvcnQgc3RkOjphcnJheS4KKworQWZ0ZXIgd2UgZHJvcCBkZWJpYW44IGFuZCBjZW50b3M3IHRoYXQgaGFzIGdjYyA8IDUgdmVyc2lvbnMgdGhpcyBwYXRjaAorY2FuIGJlIHJlbW92ZS4KKworU2lnbmVkLW9mZi1ieTogQW5pYmFsIExpbW9uIDxsaW1vbi5hbmliYWxAZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgYXB0LXBrZy9jb250cmliL3N0cnV0bC5jYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvYXB0LXBrZy9jb250cmliL3N0cnV0bC5jYyBiL2FwdC1wa2cvY29udHJpYi9zdHJ1dGwuY2MKK2luZGV4IDYwZDBjYTguLmMyZmYwMWQgMTAwNjQ0CistLS0gYS9hcHQtcGtnL2NvbnRyaWIvc3RydXRsLmNjCisrKysgYi9hcHQtcGtnL2NvbnRyaWIvc3RydXRsLmNjCitAQCAtMjcsNiArMjcsNyBAQAorICNpbmNsdWRlIDxzc3RyZWFtPgorICNpbmNsdWRlIDxzdHJpbmc+CisgI2luY2x1ZGUgPHZlY3Rvcj4KKysjaW5jbHVkZSA8YXJyYXk+CisgCisgI2luY2x1ZGUgPHN0ZGRlZi5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0XzEuMi4xMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdF8xLjIuMjQuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdF8xLjIuMTIuYmIKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdF8xLjIuMjQuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYtYXJjaGl2ZS9hdXRvY29uZi1hcmNoaXZlXzIwMTYuMDkuMTYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mLWFyY2hpdmUvYXV0b2NvbmYtYXJjaGl2ZV8yMDE2LjA5LjE2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNGRjMzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mLWFyY2hpdmUvYXV0b2NvbmYtYXJjaGl2ZV8yMDE2LjA5LjE2LmJiCkBAIC0wLDAgKzEsMTQgQEAKK1NVTU1BUlkgPSAiYSBjb2xsZWN0aW9uIG9mIGZyZWVseSByZS11c2FibGUgQXV0b2NvbmYgbWFjcm9zIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9jb25mLWFyY2hpdmUvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMLTMuMC13aXRoLWF1dG9jb25mLWV4Y2VwdGlvbiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICBmaWxlOi8vQ09QWUlORy5FWENFUFRJT047bWQ1PWZkZWYxNjhlYmZmM2JjMmYxMzY2NGMzNjVhNWZiNTE1IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIueHoiCitTUkNfVVJJW21kNXN1bV0gPSAiYmYxOWQ0Y2RkY2UyNjBiM2MzZTFkNTFkNDI1MDkwNzEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZThmMmVmZDIzNWY4NDJiYWQyZjY5MzhiZjRhNzIyNDBhNWU1ZmNkMjQ4ZTg0NDQzMzVlNjNiZWI2MGZhYmQ4MiIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mLmluYwppbmRleCBmMWIyZGZjLi5lYTYyZGY4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mLmluYwpAQCAtMSw0ICsxLDQgQEAKLVNVTU1BUlkgPSAiQSBHTlUgdG9vbCB0aGF0IHByb2N1ZGUgc2hlbGwgc2NyaXB0cyB0byBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZSBzb2Z0d2FyZSIKK1NVTU1BUlkgPSAiQSBHTlUgdG9vbCB0aGF0IHByb2R1Y2Ugc2hlbGwgc2NyaXB0cyB0byBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZSBzb2Z0d2FyZSIKIERFU0NSSVBUSU9OID0gIkF1dG9jb25mIGlzIGFuIGV4dGVuc2libGUgcGFja2FnZSBvZiBNNCBtYWNyb3MgdGhhdCBwcm9kdWNlIHNoZWxsIHNjcmlwdHMgdG8gYXV0b21hdGljYWxseSBcIAogY29uZmlndXJlIHNvZnR3YXJlIHNvdXJjZSBjb2RlIHBhY2thZ2VzLiBBdXRvY29uZiBjcmVhdGVzIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZm9yIGEgcGFja2FnZSBmcm9tIGEgdGVtcGxhdGUgXAogZmlsZSB0aGF0IGxpc3RzIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGZlYXR1cmVzIHRoYXQgdGhlIHBhY2thZ2UgY2FuIHVzZSwgaW4gdGhlIGZvcm0gb2YgTTQgbWFjcm8gY2FsbHMuIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4tbmF0aXZlXzUuMTguMTIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi1uYXRpdmVfNS4xOC4xMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUzNDc3Yy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi1uYXRpdmVfNS4xOC4xMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLVNVTU1BUlkgPSAiQXV0b21hdGVkIHRleHQgYW5kIHByb2dyYW0gZ2VuZXJhdGlvbiB0b29sIgotREVTQ1JJUFRJT04gPSAiQXV0b0dlbiBpcyBhIHRvb2wgZGVzaWduZWQgdG8gc2ltcGxpZnkgdGhlIGNyZWF0aW9uIGFuZFwKLSBtYWludGVuYW5jZSBvZiBwcm9ncmFtcyB0aGF0IGNvbnRhaW4gbGFyZ2UgYW1vdW50cyBvZiByZXBldGl0aW91cyB0ZXh0LlwKLSBJdCBpcyBlc3BlY2lhbGx5IHZhbHVhYmxlIGluIHByb2dyYW1zIHRoYXQgaGF2ZSBzZXZlcmFsIGJsb2NrcyBvZiB0ZXh0XAotIHRoYXQgbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZC4iCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2dlbi8iCi1TRUNUSU9OID0gImRldmVsIgotTElDRU5TRSA9ICJHUEx2MyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgotCi1TUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYXV0b2dlbi9yZWwke1BWfS9hdXRvZ2VuLSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9pbmNyZWFzZS10aW1lb3V0LWxpbWl0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL21rLXRwbC1jb25maWcuc2gtZm9yY2UtZXhpdC12YWx1ZS10by1iZS0wLWluLXN1YnByb2MucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZml4LXNjcmlwdC1lcnItd2hlbi1wcm9jZXNzaW5nLWxpYmd1aWxlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtY29uZmlnLWxpYm9wdHMubTQtcmVnZW5lcmF0ZS1pdC1mcm9tLWNvbmZpZy1saWJvcHRzLi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAyLWF1dG9vcHRzLW1rLXRwbC1jb25maWcuc2gtZml4LXBlcmwtcGF0aC5wYXRjaCBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI1NTFkMTVjY2JmNWI1ZmM1NjU4ZGEzNzVkNTAwMzM4OSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI4MDVjMjAxODJmM2NiMGViZjE1NzFkM2IwMTk3Mjg1MWM1NmZiMzQzNDhkZmRjMzg3OTlmZDBlYzNiMmJhZGJlIgotCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL2Z0cC5nbnUub3JnL2dudS9hdXRvZ2VuLyIKLVVQU1RSRUFNX0NIRUNLX1JFR0VYID0gInJlbCg/UDxwdmVyPlxkKyhcLlxkKykrKS8iCi0KLURFUEVORFMgPSAiZ3VpbGUtbmF0aXZlIGxpYnRvb2wtbmF0aXZlIGxpYnhtbDItbmF0aXZlIgotCi1pbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIG5hdGl2ZSBwa2djb25maWcKLQotIyBhdXRvZ2VuLW5hdGl2ZSBsaW5rcyBhZ2FpbnN0IGxpYmd1aWxlIHdoaWNoIG1heSBoYXZlIGJlZW4gcmVsb2NhdGVkIHdpdGggc3N0YXRlCi0jIHRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyBlbnN1cmUgdGhlcmUgaXNuJ3QgYSByZWxvY2F0aW9uIGlzc3VlCi1leHBvcnQgR1VJTEVfTE9BRF9QQVRIID0gIiR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ3VpbGUvMi4wIgotZXhwb3J0IEdVSUxFX0xPQURfQ09NUElMRURfUEFUSCA9ICIke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ3VpbGUvMi4wL2NjYWNoZSIKLQotZXhwb3J0IFBPU0lYX1NIRUxMID0gIi91c3IvYmluL2VudiBzaCIKLQotZG9faW5zdGFsbF9hcHBlbmQgKCkgewotCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2F1dG9nZW4gXAotCQlHVUlMRV9MT0FEX1BBVEg9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9ndWlsZS8yLjAgXAotCQlHVUlMRV9MT0FEX0NPTVBJTEVEX1BBVEg9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2d1aWxlLzIuMC9jY2FjaGUKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2dlbi9hdXRvZ2VuLzAwMDEtY29uZmlnLWxpYm9wdHMubTQtcmVnZW5lcmF0ZS1pdC1mcm9tLWNvbmZpZy1saWJvcHRzLi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2dlbi9hdXRvZ2VuLzAwMDEtY29uZmlnLWxpYm9wdHMubTQtcmVnZW5lcmF0ZS1pdC1mcm9tLWNvbmZpZy1saWJvcHRzLi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE0MDE4ZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi8wMDAxLWNvbmZpZy1saWJvcHRzLm00LXJlZ2VuZXJhdGUtaXQtZnJvbS1jb25maWctbGlib3B0cy4ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi1Gcm9tIDQ1MDQwZTdkMjY4MzI5ZWJjNDBlNmNiMjM3YzY0YTY2MzdjZmFiNWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KLURhdGU6IE1vbiwgMTMgTWFyIDIwMTcgMjA6MjI6MTAgLTA3MDAKLVN1YmplY3Q6IFtQQVRDSF0gY29uZmlnL2xpYm9wdHMubTQ6IHJlZ2VuZXJhdGUgaXQgZnJvbSBjb25maWcvbGlib3B0cy5kZWYKLQotSXQgd2FzIG91dCBvZiBkYXRlIGNvbXBhcmVkIHRvIGNvbmZpZy9saWJvcHRzLmRlZiwgc28gcmVnZW5lcmF0ZSBpdCB2aWEKLSJhdXRvZ2VuIGNvbmZpZy9saWJvcHRzLmRlZiIgY29tbWFuZC4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgotLS0tCi0gY29uZmlnL2xpYm9wdHMubTQgfCAzICsrLQotIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2NvbmZpZy9saWJvcHRzLm00IGIvY29uZmlnL2xpYm9wdHMubTQKLWluZGV4IGM3YmE0ZjMuLjUxZTZhMzkgMTAwNjQ0Ci0tLS0gYS9jb25maWcvbGlib3B0cy5tNAotKysrIGIvY29uZmlnL2xpYm9wdHMubTQKLUBAIC0yLDcgKzIsNyBAQCBkbmwgIC0qLSBidWZmZXItcmVhZC1vbmx5OiB0IC0qLSB2aTogc2V0IHJvOgotIGRubAotIGRubCBETyBOT1QgRURJVCBUSElTIEZJTEUgICAobGlib3B0cy5tNCkKLSBkbmwKLS1kbmwgSXQgaGFzIGJlZW4gQXV0b0dlbi1lZAotK2RubCBJdCBoYXMgYmVlbiBBdXRvR2VuLWVkICBNYXJjaCAxMywgMjAxNyBhdCAwODoyMToyMSBQTSBieSBBdXRvR2VuIDUuMTgKLSBkbmwgRnJvbSB0aGUgZGVmaW5pdGlvbnMgICAgbGlib3B0cy5kZWYKLSBkbmwgYW5kIHRoZSB0ZW1wbGF0ZSBmaWxlICAgY29uZnRlc3QudHBsCi0gZG5sCi1AQCAtMTE0LDYgKzExNCw3IEBAIEFDX0RFRlVOKFtJTlZPS0VfTElCT1BUU19NQUNST1NfRklSU1RdLFsKLSAgIEFDX1BST0dfU0VECi0gICBbd2hpbGUgOgotICAgZG8KLSsgICAgICB0ZXN0IC14ICIkUE9TSVhfU0hFTEwiICYmIGJyZWFrCi0gICAgICAgUE9TSVhfU0hFTEw9YHdoaWNoIGJhc2hgCi0gICAgICAgdGVzdCAteCAiJFBPU0lYX1NIRUxMIiAmJiBicmVhawotICAgICAgIFBPU0lYX1NIRUxMPWB3aGljaCBkYXNoYAotLS0gCi0yLjEwLjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vMDAwMi1hdXRvb3B0cy1tay10cGwtY29uZmlnLnNoLWZpeC1wZXJsLXBhdGgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi8wMDAyLWF1dG9vcHRzLW1rLXRwbC1jb25maWcuc2gtZml4LXBlcmwtcGF0aC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVmZTE0My4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi8wMDAyLWF1dG9vcHRzLW1rLXRwbC1jb25maWcuc2gtZml4LXBlcmwtcGF0aC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLUZyb20gOWY2OWYzZjVlZjIyYmYxYmNmZmIwZTY1MWVmYzI2MDg4OWNmYWE0NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgotRGF0ZTogTW9uLCAxMyBNYXIgMjAxNyAyMDozMzozMCAtMDcwMAotU3ViamVjdDogW1BBVENIXSBhdXRvb3B0cy9tay10cGwtY29uZmlnLnNoOiBmaXggcGVybCBwYXRoCi0KLVVzZSAid2hpY2ggcGVybCIgYXMgc2hlYmFuZyBkb2Vzbid0IHdvcmsgd2hlbiBpdCBpcyBsb25nZXIgdGhhbgotQklOUFJNX0JVRl9TSVpFIHdoaWNoIGlzIDEyOCB1c3VhbGx5LiBTbyB1c2UgIi91c3IvYmluL2VudiBwZXJsIiB0bwotaW5zdGVhZCBvZi4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgotLS0tCi0gYXV0b29wdHMvbWstdHBsLWNvbmZpZy5zaCB8IDIgKy0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2F1dG9vcHRzL21rLXRwbC1jb25maWcuc2ggYi9hdXRvb3B0cy9tay10cGwtY29uZmlnLnNoCi1pbmRleCAwOTNlODA4Li44ZGZjNmRkIDEwMDc1NQotLS0tIGEvYXV0b29wdHMvbWstdHBsLWNvbmZpZy5zaAotKysrIGIvYXV0b29wdHMvbWstdHBsLWNvbmZpZy5zaAotQEAgLTk4LDcgKzk4LDcgQEAgZml4X3NjcmlwdHMoKSB7Ci0gICAgICAgICBzdD1gc2VkIDFxICRmYAotIAotICAgICAgICAgY2FzZSAiJHN0IiBpbgotLSAgICAgICAgKnBlcmwgKSBlY2hvICcjIScgYHdoaWNoIHBlcmxgCi0rICAgICAgICAqcGVybCApIGVjaG8gJyMhL3Vzci9iaW4vZW52IHBlcmwnCi0gICAgICAgICAgICAgICAgICBzZWQgMWQgJGYKLSAgICAgICAgICAgICAgICAgIDs7Ci0gCi0tLSAKLTIuMTAuMgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9maXgtc2NyaXB0LWVyci13aGVuLXByb2Nlc3NpbmctbGliZ3VpbGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9maXgtc2NyaXB0LWVyci13aGVuLXByb2Nlc3NpbmctbGliZ3VpbGUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5NGEzOTUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vZml4LXNjcmlwdC1lcnItd2hlbi1wcm9jZXNzaW5nLWxpYmd1aWxlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotYXV0b2dlbi1uYXRpdmU6IGZpeCBzY3JpcHQgZXJyIHdoZW4gcHJvY2Vzc2luZyBsaWJndWlsZQotCi1kb19jb25maWd1cmUgZm9yIGF1dG9nZW4gd2lsbCBmYWlsIGlmIHByb2plY3QgZGlyZWN0b3J5IHBhdGgKLWNvbnRhaW5zICctSScgY2hhcmFjdGVyLCB3aGljaCBpcyBjYXVzZWQgYnkgdGhlIHVuc3VpdGFibGUgc2VkCi1zY3JpcHQgd2hlbiBwcm9jZXNzaW5nIGxpYmd1aWxlLgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotU2lnbmVkLW9mZi1ieTogWmhlbmJvIEdhbyA8emhlbmJvLmdhb0B3aW5kcml2ZXIuY29tPgotU2lnbmVkLW9mZi1ieTogWWkgWmhhbyA8eWkuemhhb0B3aW5kcml2ZXIuY29tPgotCi1kaWZmIC0tZ2l0IGEvY29uZmlnL2FnX21hY3Jvcy5tNCBiL2NvbmZpZy9hZ19tYWNyb3MubTQKLWluZGV4IDU4MTg2YjYuLjU4ZWQyYWQgMTAwNjQ0Ci0tLS0gYS9jb25maWcvYWdfbWFjcm9zLm00Ci0rKysgYi9jb25maWcvYWdfbWFjcm9zLm00Ci1AQCAtMzIsNyArMzIsNyBAQCBBQ19ERUZVTihbSU5WT0tFX0FHX01BQ1JPU19MQVNUXSxbCi0gICBHVUlMRV9GTEFHUwotICAgW2FnX2d2PWBnZGlyPVxgcGtnLWNvbmZpZyAtLWNmbGFncy1vbmx5LUkgXAotICAgZ3VpbGUtJHtHVUlMRV9FRkZFQ1RJVkVfVkVSU0lPTn0gfCBcCi0tICBzZWQgJ3MvLUkgKi8vO3MvICotSS4qLyAvZydcYAotKyAgc2VkICdzLyAqLUkgKlwvLyBcLy9nJ1xgCi0gICBmb3IgZCBpbiAkZ2RpcgotICAgZG8gIHRlc3QgLWYgIiRkL2xpYmd1aWxlL3ZlcnNpb24uaCIgJiYgZ2Rpcj0kZCAmJiBicmVhawotICAgZG9uZQotZGlmZiAtLWdpdCBhL2NvbmZpZy9taXNjLmRlZiBiL2NvbmZpZy9taXNjLmRlZgotaW5kZXggNDkwZDM2MS4uNmUxODNlZiAxMDA2NDQKLS0tLSBhL2NvbmZpZy9taXNjLmRlZgotKysrIGIvY29uZmlnL21pc2MuZGVmCi1AQCAtMzQyLDcgKzM0Miw3IEBAIGRvLWFsd2F5cyA9IDw8LSBfRU5EX0FMV0FZU18KLSAJR1VJTEVfRkxBR1MKLSAJW2FnX2d2PWBnZGlyPVxgcGtnLWNvbmZpZyAtLWNmbGFncy1vbmx5LUkgXAotIAkJCWd1aWxlLSR7R1VJTEVfRUZGRUNUSVZFX1ZFUlNJT059IHwgXAotLQkJCXNlZCAncy8tSSAqLy87cy8gKi1JLiovIC9nJ1xgCi0rCQkJc2VkICdzLyAqLUkgKlwvLyBcLy9nJ1xgCi0gCQl0ZXN0IC16ICIkZ2RpciIgJiYgZ2Rpcj0vdXNyL2luY2x1ZGUKLSAJCWZvciBkIGluICRnZGlyCi0gCQlkbyAgdGVzdCAtZiAiJGQvbGliZ3VpbGUvdmVyc2lvbi5oIiAmJiBnZGlyPSRkICYmIGJyZWFrCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9pbmNyZWFzZS10aW1lb3V0LWxpbWl0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vaW5jcmVhc2UtdGltZW91dC1saW1pdC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmZDdlNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9pbmNyZWFzZS10aW1lb3V0LWxpbWl0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotU3ViamVjdDogW1BBVENIXSBhdXRvZ2VuOiBpbmNyZWFzZSB0aW1lb3V0IGxpbWl0IGZvciBzaGVsbCBjb21tYW5kcwotCi1PbiBzb21lIG92ZXJsb2FkZWQgaG9zdHMsIHNoZWxsIGNvbW1hbmRzIG9mIGF1dG9nZW4gbWF5IGNhbiBub3QKLWZpbmlzaCBpbiA1IHNlY3MuIFRoaXMgaGFzIGNhdXNlZCBtYW55IGJ1aWxkIGZhaWx1cmVzLCBzbyBpbmNyZWFzZQotdGhlIHRpbWVvdXQgbGltaXQgdG8gZml4IHRoaXMuCi0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KLQotU2lnbmVkLW9mZi1ieTogWGluIE91eWFuZyA8WGluLk91eWFuZ0B3aW5kcml2ZXIuY29tPgotLS0tCi0gY29uZmlndXJlLmFjIHwgICAgNiArKystLS0KLSAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCA1OGE4NDhiLi4xNzBkZDllIDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC0xNzgsOSArMTc4LDkgQEAgdGltZV9kZWx0YT1gZXhwciAke2NvbmZpZ19lbmRfdGltZX0gLSAke2NvbmZpZ19zdGFydF90aW1lfSAyPi9kZXYvbnVsbGAKLSBpZiB0ZXN0IC16ICIke0FHX1RJTUVPVVR9IgotIHRoZW4KLSAgIGlmIHRlc3QgLXogIiR7dGltZV9kZWx0YX0iCi0tICB0aGVuIHRpbWVfZGVsdGE9MTAKLS0gIGVsaWYgdGVzdCAke3RpbWVfZGVsdGF9IC1sdCA1Ci0tICB0aGVuIHRpbWVfZGVsdGE9NSA7IGZpCi0rICB0aGVuIHRpbWVfZGVsdGE9NjAKLSsgIGVsaWYgdGVzdCAke3RpbWVfZGVsdGF9IC1sdCAzMAotKyAgdGhlbiB0aW1lX2RlbHRhPTMwIDsgZmkKLSAKLSAgIEFHX1RJTUVPVVQ9JHt0aW1lX2RlbHRhfQotIGZpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9tay10cGwtY29uZmlnLnNoLWZvcmNlLWV4aXQtdmFsdWUtdG8tYmUtMC1pbi1zdWJwcm9jLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vbWstdHBsLWNvbmZpZy5zaC1mb3JjZS1leGl0LXZhbHVlLXRvLWJlLTAtaW4tc3VicHJvYy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU2ZGE3Yi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9tay10cGwtY29uZmlnLnNoLWZvcmNlLWV4aXQtdmFsdWUtdG8tYmUtMC1pbi1zdWJwcm9jLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLW1rLXRwbC1jb25maWcuc2g6IGZvcmNlIGV4aXQgdmFsdWUgdG8gYmUgMCBpbiBzdWJwcm9jZXNzCi0KLVRoZSByZXR1cm4gdmFsdWUgb2Ygc3RhdGVtZW50IGxpc3Q9YDxzdWJjb21tYW5kcz5gIGlzIHRoZSBleGl0IHZhbHVlIG9mIHRoZQotc3ViY29tbWFuZHMuIFNvIGlmIHRoZSBzdWJjb21tYW5kcyBmYWlscywgdGhlIGNvbXBpbGF0aW9uIGZhaWxzLiBUaGlzIGlzIG9idmlvdXNseQotbm90IGludGVuZGVkLiBJbiB0aGUgbm9ybWFsIGNhc2UsIHdlIGV4cGVjdCB0aGUgZ3JlcCBjb21tYW5kIHRvIGZhaWwgYXMgdGhlcmUgc2hvdWxkCi1iZSBubyAnbm9yZXR1cm4nIHdvcmQgaW4gdGhlIGxpYmd1aWxlIGZpbGVzLgotCi1TaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+Ci0tLS0KLSBhdXRvb3B0cy9tay10cGwtY29uZmlnLnNoIHwgICAgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvYXV0b29wdHMvbWstdHBsLWNvbmZpZy5zaCBiL2F1dG9vcHRzL21rLXRwbC1jb25maWcuc2gKLWluZGV4IDkyNmY1YWIuLjZiNGEwZmIgMTAwNzU1Ci0tLS0gYS9hdXRvb3B0cy9tay10cGwtY29uZmlnLnNoCi0rKysgYi9hdXRvb3B0cy9tay10cGwtY29uZmlnLnNoCi1AQCAtMjAyLDcgKzIwMiw3IEBAIGZpeF9ndWlsZSgpIHsKLSAKLSAgICAgbGlzdD1gc2V0ICtlIDsgZXhlYyAyPi9kZXYvbnVsbAotICAgICAgICAgZmluZCAke2xpYmd1aWxlZGlyfS9saWJndWlsZSogLXR5cGUgZiB8IFwKLS0gICAgICAgICAgICB4YXJncyBncmVwIC1sIC1FICdcPG5vcmV0dXJuXD4nYAotKyAgICAgICAgICAgIHhhcmdzIGdyZXAgLWwgLUUgJ1w8bm9yZXR1cm5cPicgOyBleGl0IDBgCi0gCi0gICAgIHRlc3QgLXogIiRsaXN0IiAmJiBleGl0IDAKLSAKLS0tIAotMS43LjkuNQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlLzAwMDEtYXV0b21ha2UtQWRkLWRlZmF1bHQtbGlidG9vbF90YWctdG8tY3BwYXNtLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS8wMDAxLWF1dG9tYWtlLUFkZC1kZWZhdWx0LWxpYnRvb2xfdGFnLXRvLWNwcGFzbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjIxZjEzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS8wMDAxLWF1dG9tYWtlLUFkZC1kZWZhdWx0LWxpYnRvb2xfdGFnLXRvLWNwcGFzbS5wYXRjaApAQCAtMCwwICsxLDI3IEBACitGcm9tIDI1YThhYzMwNDg2Nzk4ZDIzZjUxNjcyMmQ3M2ViNjIyZTYyNjRmMjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAyNiBKdWwgMjAxNyAxMToxOTo1NiAtMDcwMAorU3ViamVjdDogW1BBVENIXSBhdXRvbWFrZTogQWRkIGRlZmF1bHQgbGlidG9vbF90YWcgdG8gY3BwYXNtLgorCisgICAgKiBiaW4vYXV0b21ha2UuaW4gKHJlZ2lzdGVyX2xhbmd1YWdlKTogRGVmaW5lIGRlZmF1bHQgbGlidG9vbCB0YWcgdG8gYmUgQ0MKKyAgICBzaW5jZSBDUFBBU0NPTVBJTEUgaXMgdXNpbmcgQ0MgdG8gY2FsbCBhc3NlbWJsZXIKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworIGJpbi9hdXRvbWFrZS5pbiB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitJbmRleDogYXV0b21ha2UtMS4xNS4xL2Jpbi9hdXRvbWFrZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF1dG9tYWtlLTEuMTUuMS5vcmlnL2Jpbi9hdXRvbWFrZS5pbgorKysrIGF1dG9tYWtlLTEuMTUuMS9iaW4vYXV0b21ha2UuaW4KK0BAIC04MzEsNiArODMxLDcgQEAgcmVnaXN0ZXJfbGFuZ3VhZ2UgKCduYW1lJyA9PiAnY3BwYXNtJywKKyAJCSAgICdjb21waWxlcicgPT4gJ0NQUEFTQ09NUElMRScsCisgCQkgICAnY29tcGlsZV9mbGFnJyA9PiAnLWMnLAorIAkJICAgJ291dHB1dF9mbGFnJyA9PiAnLW8nLAorKwkJICAgJ2xpYnRvb2xfdGFnJyA9PiAnQ0MnLAorIAkJICAgJ2V4dGVuc2lvbnMnID0+IFsnLlMnLCAnLnN4J10pOworIAorICMgRm9ydHJhbiA3NwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS8wMDAxLWF1dG9tYWtlLXBvcnQtdG8tUGVybC01LjIyLWFuZC1sYXRlci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2UvMDAwMS1hdXRvbWFrZS1wb3J0LXRvLVBlcmwtNS4yMi1hbmQtbGF0ZXIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNjg5NWYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS8wMDAxLWF1dG9tYWtlLXBvcnQtdG8tUGVybC01LjIyLWFuZC1sYXRlci5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLUZyb20gMTNmMDBlYjQ0OTNjMjE3MjY5Yjc2NjE0NzU5ZTQ1MmQ4MzAyOTU1ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFBhdWwgRWdnZXJ0IDxlZ2dlcnRAY3MudWNsYS5lZHU+Ci1EYXRlOiBUaHUsIDMxIE1hciAyMDE2IDE2OjM1OjI5IC0wNzAwCi1TdWJqZWN0OiBbUEFUQ0hdIGF1dG9tYWtlOiBwb3J0IHRvIFBlcmwgNS4yMiBhbmQgbGF0ZXIKLQotV2l0aG91dCB0aGlzIGNoYW5nZSwgUGVybCA1LjIyIGNvbXBsYWlucyAiVW5lc2NhcGVkIGxlZnQgYnJhY2UgaW4KLXJlZ2V4IGlzIGRlcHJlY2F0ZWQiIGFuZCB0aGlzIGlzIHBsYW5uZWQgdG8gYmVjb21lIGEgaGFyZCBlcnJvciBpbgotUGVybCA1LjI2LiAgU2VlOgotaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9kaXN0L3BlcmwtNS4yMi4wL3BvZC9wZXJsZGVsdGEucG9kI0FfbGl0ZXJhbF8lMjJ7JTIyX3Nob3VsZF9ub3dfYmVfZXNjYXBlZF9pbl9hX3BhdHRlcm4KLSogYmluL2F1dG9tYWtlLmluIChzdWJzdGl0dXRlX2FjX3N1YnN0X3ZhcmlhYmxlcyk6IEVzY2FwZSBsZWZ0IGJyYWNlLgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsxM2YwMGViNDQ5M2MyMTcyNjliNzY2MTQ3NTllNDUyZDgzMDI5NTVlXQotLS0tCi0gYmluL2F1dG9tYWtlLmluIHwgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvYmluL2F1dG9tYWtlLmluIGIvYmluL2F1dG9tYWtlLmluCi1pbmRleCBhM2EwYWEzMTguLjJjOGYzMWUxNCAxMDA2NDQKLS0tLSBhL2Jpbi9hdXRvbWFrZS5pbgotKysrIGIvYmluL2F1dG9tYWtlLmluCi1AQCAtMzg3OCw3ICszODc4LDcgQEAgc3ViIHN1YnN0aXR1dGVfYWNfc3Vic3RfdmFyaWFibGVzX3dvcmtlcgotIHN1YiBzdWJzdGl0dXRlX2FjX3N1YnN0X3ZhcmlhYmxlcwotIHsKLSAgIG15ICgkdGV4dCkgPSBAXzsKLS0gICR0ZXh0ID1+IHMvXCR7KFteIFx0PTore31dKyl9L3N1YnN0aXR1dGVfYWNfc3Vic3RfdmFyaWFibGVzX3dvcmtlciAoJDEpL2dlOwotKyAgJHRleHQgPX4gcy9cJFt7XShbXiBcdD06K3t9XSspfS9zdWJzdGl0dXRlX2FjX3N1YnN0X3ZhcmlhYmxlc193b3JrZXIgKCQxKS9nZTsKLSAgIHJldHVybiAkdGV4dDsKLSB9Ci0gCi0tLSAKLTIuMTEuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlXzEuMTUuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2VfMS4xNS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOWI2MTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlXzEuMTUuMS5iYgpAQCAtMCwwICsxLDQzIEBACityZXF1aXJlIGF1dG9tYWtlLmluYworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiYXV0b2NvbmYtbmF0aXZlIgorCitOQU1FVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCisKK1JERVBFTkRTXyR7UE59ICs9ICJcCisgICAgYXV0b2NvbmYgXAorICAgIHBlcmwgXAorICAgIHBlcmwtbW9kdWxlLWJ5dGVzIFwKKyAgICBwZXJsLW1vZHVsZS1kYXRhLWR1bXBlciBcCisgICAgcGVybC1tb2R1bGUtc3RyaWN0IFwKKyAgICBwZXJsLW1vZHVsZS10ZXh0LXBhcnNld29yZHMgXAorICAgIHBlcmwtbW9kdWxlLXRocmVhZC1xdWV1ZSBcCisgICAgcGVybC1tb2R1bGUtdGhyZWFkcyBcCisgICAgcGVybC1tb2R1bGUtdmFycyAiCisKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICJhdXRvY29uZi1uYXRpdmUgaG9zdHBlcmwtcnVudGltZS1uYXRpdmUiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAibmF0aXZlc2RrLWF1dG9jb25mIgorCitTUkNfVVJJICs9ICJmaWxlOi8vcHl0aG9uLWxpYmRpci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYnVpbGR0ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9wZXJmb3JtYW5jZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbmV3X3J0X3BhdGhfZm9yX3Rlc3QtZHJpdmVyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hdXRvbWFrZS1yZXBsYWNlLXctb3B0aW9uLWluLXNoZWJhbmdzLXdpdGgtbW9kZXJuLXVzZS13YXJuaW5ncy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1hdXRvbWFrZS1BZGQtZGVmYXVsdC1saWJ0b29sX3RhZy10by1jcHBhc20ucGF0Y2ggXAorICAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTVkZjNmMmQ2ZWI4ZjgxZTcwYjhjYjYzYTkzYzg4NTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTg4ZTMyNTI3YWJlMDUyMzA3ZDIxYzhjYTAwMGFhMjM4YjkxNGRmMzYzYTYxN2UzOGY0ZmI4OWY1YWJmNjI2MCIKKworUEVSTCA9ICIke1VTUkJJTlBBVEh9L3BlcmwiCitQRVJMX2NsYXNzLW5hdGl2ZSA9ICIke1VTUkJJTlBBVEh9L2VudiBwZXJsIgorUEVSTF9jbGFzcy1uYXRpdmVzZGsgPSAiJHtVU1JCSU5QQVRIfS9lbnYgcGVybCIKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfUEVSTD0nJHtQRVJMfSciCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2VfMS4xNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2VfMS4xNS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAyZGQ2My4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlXzEuMTUuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi1yZXF1aXJlIGF1dG9tYWtlLmluYwotTElDRU5TRSA9ICJHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgotREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiYXV0b2NvbmYtbmF0aXZlIgotCi1OQU1FVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCi0KLVJERVBFTkRTXyR7UE59ICs9ICJcCi0gICAgYXV0b2NvbmYgXAotICAgIHBlcmwgXAotICAgIHBlcmwtbW9kdWxlLWJ5dGVzIFwKLSAgICBwZXJsLW1vZHVsZS1kYXRhLWR1bXBlciBcCi0gICAgcGVybC1tb2R1bGUtc3RyaWN0IFwKLSAgICBwZXJsLW1vZHVsZS10ZXh0LXBhcnNld29yZHMgXAotICAgIHBlcmwtbW9kdWxlLXRocmVhZC1xdWV1ZSBcCi0gICAgcGVybC1tb2R1bGUtdGhyZWFkcyBcCi0gICAgcGVybC1tb2R1bGUtdmFycyAiCi0KLVJERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICJhdXRvY29uZi1uYXRpdmUgaG9zdHBlcmwtcnVudGltZS1uYXRpdmUiCi1SREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAibmF0aXZlc2RrLWF1dG9jb25mIgotCi1TUkNfVVJJICs9ICJmaWxlOi8vcHl0aG9uLWxpYmRpci5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vYnVpbGR0ZXN0LnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9wZXJmb3JtYW5jZS5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vbmV3X3J0X3BhdGhfZm9yX3Rlc3QtZHJpdmVyLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9hdXRvbWFrZS1yZXBsYWNlLXctb3B0aW9uLWluLXNoZWJhbmdzLXdpdGgtbW9kZXJuLXVzZS13YXJuaW5ncy5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vMDAwMS1hdXRvbWFrZS1wb3J0LXRvLVBlcmwtNS4yMi1hbmQtbGF0ZXIucGF0Y2ggXAotICAgICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNzE2OTQ2YTEwNWNhMjI4YWI1NDVmYzM3YTcwZGYzYTMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzk0NmU5NDVhOTZlMjgxNTJiYTVhNmJlYjA2MjVjYTcxNWM2ZTMyYWM1NWYyZTM1M2VmNTRkZWYwYzhlZDkyNCIKLQotUEVSTCA9ICIke1VTUkJJTlBBVEh9L3BlcmwiCi1QRVJMX2NsYXNzLW5hdGl2ZSA9ICIke1VTUkJJTlBBVEh9L2VudiBwZXJsIgotUEVSTF9jbGFzcy1uYXRpdmVzZGsgPSAiJHtVU1JCSU5QQVRIfS9lbnYgcGVybCIKLQotQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfUEVSTD0nJHtQRVJMfSciCi0KLWRvX2luc3RhbGxfYXBwZW5kICgpIHsKLSAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9Ci19Ci0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtMi4yOC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLTIuMjguaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzg0YzUyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtMi4yOC5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi1MSUNfRklMRVNfQ0hLU1VNPSJcCi0gICAgZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyXAotICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9OWY2MDRkOGE0ZjhlNzRmNGY1MTQwODQ1YTIxYjY2NzRcCi0gICAgZmlsZTovL0NPUFlJTkczO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNFwKLSAgICBmaWxlOi8vQ09QWUlORzMuTElCO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNlwKLSAgICBmaWxlOi8vZ2FzL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0XAotICAgIGZpbGU6Ly9pbmNsdWRlL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyXAotICAgIGZpbGU6Ly9pbmNsdWRlL0NPUFlJTkczO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNFwKLSAgICBmaWxlOi8vbGliaWJlcnR5L0NPUFlJTkcuTElCO21kNT1hOTE2NDY3YjkxMDc2ZTYzMWRkOGVkYjc0MjQ3NjljN1wKLSAgICBmaWxlOi8vYmZkL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0XAotICAgICIKLQotZGVmIGJpbnV0aWxzX2JyYW5jaF92ZXJzaW9uKGQpOgotICAgIHB2c3BsaXQgPSBkLmdldFZhcignUFYnKS5zcGxpdCgnLicpCi0gICAgcmV0dXJuIHB2c3BsaXRbMF0gKyAiXyIgKyBwdnNwbGl0WzFdCi0KLUJJTlVQViA9ICIke0BiaW51dGlsc19icmFuY2hfdmVyc2lvbihkKX0iCi0KLVVQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gImJpbnV0aWxzLSg/UDxwdmVyPlxkK18oXGRfPykqKSIKLQotU1JDUkVWID0gIjM1NDE5OWM3NjkyYzFiZWQ1M2EyYTE1ZjBlNGQ1MzE0NTdlOTVmMTciCi1TUkNfVVJJID0gIlwKLSAgICAgZ2l0Oi8vc291cmNld2FyZS5vcmcvZ2l0L2JpbnV0aWxzLWdkYi5naXQ7YnJhbmNoPWJpbnV0aWxzLSR7QklOVVBWfS1icmFuY2g7cHJvdG9jb2w9Z2l0IFwKLSAgICAgZmlsZTovLzAwMDMtZ3Byb2YtYWRkLXVjbGliYy1zdXBwb3J0LXRvLWNvbmZpZ3VyZS5wYXRjaCBcCi0gICAgIGZpbGU6Ly8wMDA0LVBvaW50LXNjcmlwdHMtbG9jYXRpb24tdG8tbGliZGlyLnBhdGNoIFwKLSAgICAgZmlsZTovLzAwMDUtT25seS1nZW5lcmF0ZS1hbi1SUEFUSC1lbnRyeS1pZi1MRF9SVU5fUEFUSC1pcy1ub3QtZS5wYXRjaCBcCi0gICAgIGZpbGU6Ly8wMDA2LUV4cGxpY2l0bHktbGluay13aXRoLWxpYm0tb24tdWNsaWJjLnBhdGNoIFwKLSAgICAgZmlsZTovLzAwMDctVXNlLWxpYnRvb2wtMi40LnBhdGNoIFwKLSAgICAgZmlsZTovLzAwMDgtQWRkLXRoZS1hcm12NWUtYXJjaGl0ZWN0dXJlLXRvLWJpbnV0aWxzLnBhdGNoIFwKLSAgICAgZmlsZTovLzAwMDktZG9uLXQtbGV0LXRoZS1kaXN0cm8tY29tcGlsZXItcG9pbnQtdG8tdGhlLXdyb25nLWlucy5wYXRjaCBcCi0gICAgIGZpbGU6Ly8wMDEwLXdhcm4tZm9yLXVzZXMtb2Ytc3lzdGVtLWRpcmVjdG9yaWVzLXdoZW4tY3Jvc3MtbGlua2kucGF0Y2ggXAotICAgICBmaWxlOi8vMDAxMS1GaXgtcnBhdGgtaW4tbGlidG9vbC13aGVuLXN5c3Jvb3QtaXMtZW5hYmxlZC5wYXRjaCBcCi0gICAgIGZpbGU6Ly8wMDEyLUNoYW5nZS1kZWZhdWx0LWVtdWxhdGlvbi1mb3ItbWlwczY0LWxpbnV4LnBhdGNoIFwKLSAgICAgZmlsZTovLzAwMTMtQWRkLXN1cHBvcnQtZm9yLU5ldGxvZ2ljLVhMUC5wYXRjaCBcCi0gICAgIGZpbGU6Ly8wMDE0LWZpeC10aGUtaW5jb3JyZWN0LWFzc2VtYmxpbmctZm9yLXBwYy13YWl0LW1uZW1vbmljLnBhdGNoIFwKLSAgICAgZmlsZTovLzAwMTUtc3luYy13aXRoLU9FLWxpYnRvb2wtY2hhbmdlcy5wYXRjaCBcCi0gICAgIGZpbGU6Ly8wMDE2LURldGVjdC02NC1iaXQtTUlQUy10YXJnZXRzLnBhdGNoIFwKLSAgICAgZmlsZTovL0NWRS0yMDE3LTY5NjUucGF0Y2ggXAotICAgICBmaWxlOi8vQ1ZFLTIwMTctNjk2Ni5wYXRjaCBcCi0gICAgIGZpbGU6Ly8wMDE3LWJmZC1JbXByb3ZlLWxvb2t1cC1vZi1maWxlLWxpbmUtaW5mb3JtYXRpb24tZm9yLWVycm8ucGF0Y2ggXAotICAgICBmaWxlOi8vMDAxOC1QUi0yMTQwOS1zZWdmYXVsdC1pbi1fYmZkX2R3YXJmMl9maW5kX25lYXJlc3RfbGluZS5wYXRjaCBcCi0gICAgIGZpbGU6Ly9DVkUtMjAxNy02OTY5LnBhdGNoIFwKLSAgICAgZmlsZTovL0NWRS0yMDE3LTY5NjlfMi5wYXRjaCBcCi0gICAgIGZpbGU6Ly9DVkUtMjAxNy03MjA5LnBhdGNoIFwKLSAgICAgZmlsZTovL0NWRS0yMDE3LTcyMTAucGF0Y2ggXAotICAgICBmaWxlOi8vQ1ZFLTIwMTctNzIyMy5wYXRjaCBcCi0gICAgIGZpbGU6Ly9DVkUtMjAxNy03NjE0LnBhdGNoIFwKLSAgICAgZmlsZTovL0NWRS0yMDE3LTgzOTMucGF0Y2ggXAotICAgICBmaWxlOi8vQ1ZFLTIwMTctODM5NC5wYXRjaCBcCi0gICAgIGZpbGU6Ly9DVkUtMjAxNy04Mzk1LnBhdGNoIFwKLSAgICAgZmlsZTovL0NWRS0yMDE3LTgzOTZfODM5Ny5wYXRjaCBcCi0gICAgIGZpbGU6Ly9DVkUtMjAxNy04Mzk4LnBhdGNoIFwKLSAgICAgZmlsZTovL0NWRS0yMDE3LTg0MjEucGF0Y2ggXAotICAgICBmaWxlOi8vQ1ZFLTIwMTctOTAzOF85MDQ0LnBhdGNoIFwKLSAgICAgZmlsZTovL0NWRS0yMDE3LTkwMzkucGF0Y2ggXAotICAgICBmaWxlOi8vQ1ZFLTIwMTctOTA0MF85MDQyLnBhdGNoIFwKLSAgICAgZmlsZTovL0NWRS0yMDE3LTk3NDIucGF0Y2ggXAotICAgICBmaWxlOi8vQ1ZFLTIwMTctOTc0NC5wYXRjaCBcCi0gICAgIGZpbGU6Ly9DVkUtMjAxNy05NzQ1LnBhdGNoIFwKLSAgICAgZmlsZTovL0NWRS0yMDE3LTk3NDYucGF0Y2ggXAotICAgICBmaWxlOi8vQ1ZFLTIwMTctOTc0Ny5wYXRjaCBcCi0gICAgIGZpbGU6Ly9DVkUtMjAxNy05NzQ4LnBhdGNoIFwKLSAgICAgZmlsZTovL0NWRS0yMDE3LTk3NDkucGF0Y2ggXAotICAgICBmaWxlOi8vQ1ZFLTIwMTctOTc1MC5wYXRjaCBcCi0gICAgIGZpbGU6Ly9DVkUtMjAxNy05NzUxLnBhdGNoIFwKLSAgICAgZmlsZTovL0NWRS0yMDE3LTk3NTIucGF0Y2ggXAotICAgICBmaWxlOi8vQ1ZFLTIwMTctOTc1My5wYXRjaCBcCi0gICAgIGZpbGU6Ly9DVkUtMjAxNy05NzU1LnBhdGNoIFwKLSAgICAgZmlsZTovL0NWRS0yMDE3LTk3NTYucGF0Y2ggXAotICAgICBmaWxlOi8vQ1ZFLTIwMTctOTk1NC5wYXRjaCBcCi0gICAgIGZpbGU6Ly9DVkUtMjAxNy05OTU1XzEucGF0Y2ggXAotICAgICBmaWxlOi8vQ1ZFLTIwMTctOTk1NV8yLnBhdGNoIFwKLSAgICAgZmlsZTovL0NWRS0yMDE3LTk5NTVfMy5wYXRjaCBcCi0gICAgIGZpbGU6Ly9DVkUtMjAxNy05OTU1XzQucGF0Y2ggXAotICAgICBmaWxlOi8vQ1ZFLTIwMTctOTk1NV81LnBhdGNoIFwKLSAgICAgZmlsZTovL0NWRS0yMDE3LTk5NTVfNi5wYXRjaCBcCi0gICAgIGZpbGU6Ly9DVkUtMjAxNy05OTU1XzcucGF0Y2ggXAotICAgICBmaWxlOi8vQ1ZFLTIwMTctOTk1NV84LnBhdGNoIFwKLSAgICAgZmlsZTovL0NWRS0yMDE3LTk5NTVfOS5wYXRjaCBcCi0iCi1TICA9ICIke1dPUktESVJ9L2dpdCIKLQotZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewotICAgICAgICBybSAtcmYgJHtTfS9nZGIgJHtTfS9saWJkZWNudW1iZXIgJHtTfS9yZWFkbGluZSAke1N9L3NpbQotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy0yLjI5LjEuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy0yLjI5LjEuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YTcyZTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLTIuMjkuMS5pbmMKQEAgLTAsMCArMSw0MyBAQAorTElDX0ZJTEVTX0NIS1NVTT0iXAorICAgIGZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MlwKKyAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTlmNjA0ZDhhNGY4ZTc0ZjRmNTE0MDg0NWEyMWI2Njc0XAorICAgIGZpbGU6Ly9DT1BZSU5HMzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDRcCisgICAgZmlsZTovL0NPUFlJTkczLkxJQjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjZcCisgICAgZmlsZTovL2dhcy9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNFwKKyAgICBmaWxlOi8vaW5jbHVkZS9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MlwKKyAgICBmaWxlOi8vaW5jbHVkZS9DT1BZSU5HMzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDRcCisgICAgZmlsZTovL2xpYmliZXJ0eS9DT1BZSU5HLkxJQjttZDU9YTkxNjQ2N2I5MTA3NmU2MzFkZDhlZGI3NDI0NzY5YzdcCisgICAgZmlsZTovL2JmZC9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNFwKKyAgICAiCisKK2RlZiBiaW51dGlsc19icmFuY2hfdmVyc2lvbihkKToKKyAgICBwdnNwbGl0ID0gZC5nZXRWYXIoJ1BWJykuc3BsaXQoJy4nKQorICAgIHJldHVybiBwdnNwbGl0WzBdICsgIl8iICsgcHZzcGxpdFsxXQorCitCSU5VUFYgPSAiJHtAYmludXRpbHNfYnJhbmNoX3ZlcnNpb24oZCl9IgorCitVUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICJiaW51dGlscy0oP1A8cHZlcj5cZCtfKFxkXz8pKikiCisKK1NSQ1JFViA/PSAiOTAyNzZmMTUzNzlkMzgwNzYxZmM0OTlkYTJiYTI0Y2ZiM2MxMmE5NCIKK0JJTlVUSUxTX0dJVF9VUkkgPz0gImdpdDovL3NvdXJjZXdhcmUub3JnL2dpdC9iaW51dGlscy1nZGIuZ2l0O2JyYW5jaD1iaW51dGlscy0ke0JJTlVQVn0tYnJhbmNoO3Byb3RvY29sPWdpdCIKK1NSQ19VUkkgPSAiXAorICAgICAke0JJTlVUSUxTX0dJVF9VUkl9IFwKKyAgICAgZmlsZTovLzAwMDMtY29uZmlndXJlLXdpZGVuLXRoZS1yZWdleHAtZm9yLVNILWFyY2hpdGVjdHVyZXMucGF0Y2ggXAorICAgICBmaWxlOi8vMDAwNC1Qb2ludC1zY3JpcHRzLWxvY2F0aW9uLXRvLWxpYmRpci5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDA1LU9ubHktZ2VuZXJhdGUtYW4tUlBBVEgtZW50cnktaWYtTERfUlVOX1BBVEgtaXMtbm90LWUucGF0Y2ggXAorICAgICBmaWxlOi8vMDAwNi1Vc2UtbGlidG9vbC0yLjQucGF0Y2ggXAorICAgICBmaWxlOi8vMDAwNy1BZGQtdGhlLWFybXY1ZS1hcmNoaXRlY3R1cmUtdG8tYmludXRpbHMucGF0Y2ggXAorICAgICBmaWxlOi8vMDAwOC1kb24tdC1sZXQtdGhlLWRpc3Ryby1jb21waWxlci1wb2ludC10by10aGUtd3JvbmctaW5zLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMDktd2Fybi1mb3ItdXNlcy1vZi1zeXN0ZW0tZGlyZWN0b3JpZXMtd2hlbi1jcm9zcy1saW5raS5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDEwLUZpeC1ycGF0aC1pbi1saWJ0b29sLXdoZW4tc3lzcm9vdC1pcy1lbmFibGVkLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMTEtQ2hhbmdlLWRlZmF1bHQtZW11bGF0aW9uLWZvci1taXBzNjQtbGludXgucGF0Y2ggXAorICAgICBmaWxlOi8vMDAxMi1BZGQtc3VwcG9ydC1mb3ItTmV0bG9naWMtWExQLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMTMtZml4LXRoZS1pbmNvcnJlY3QtYXNzZW1ibGluZy1mb3ItcHBjLXdhaXQtbW5lbW9uaWMucGF0Y2ggXAorICAgICBmaWxlOi8vMDAxNC1EZXRlY3QtNjQtYml0LU1JUFMtdGFyZ2V0cy5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDE1LXN5bmMtd2l0aC1PRS1saWJ0b29sLWNoYW5nZXMucGF0Y2ggXAorIgorUyAgPSAiJHtXT1JLRElSfS9naXQiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgICAgICAgcm0gLXJmICR7U30vZ2RiICR7U30vbGliZGVjbnVtYmVyICR7U30vcmVhZGxpbmUgJHtTfS9zaW0KK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3MtY2FuYWRpYW5fMi4yOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3MtY2FuYWRpYW5fMi4yOS4xLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzLWNhbmFkaWFuXzIuMjguYmIKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3MtY2FuYWRpYW5fMi4yOS4xLmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzXzIuMjguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzXzIuMjkuMS5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zc18yLjI4LmJiCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzXzIuMjkuMS5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zc3Nka18yLjI4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zc3Nka18yLjI5LjEuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3NzZGtfMi4yOC5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zc3Nka18yLjI5LjEuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMS1iaW51dGlscy1jcm9zc3Nkay1HZW5lcmF0ZS1yZWxvY2F0YWJsZS1TREtzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAxLWJpbnV0aWxzLWNyb3Nzc2RrLUdlbmVyYXRlLXJlbG9jYXRhYmxlLVNES3MucGF0Y2gKaW5kZXggOGZiMWI0ZS4uMGI1MTVkOCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAxLWJpbnV0aWxzLWNyb3Nzc2RrLUdlbmVyYXRlLXJlbG9jYXRhYmxlLVNES3MucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAxLWJpbnV0aWxzLWNyb3Nzc2RrLUdlbmVyYXRlLXJlbG9jYXRhYmxlLVNES3MucGF0Y2gKQEAgLTEsNCArMSw0IEBACi1Gcm9tIDY4OWQwMTE2ODhiNWZmOTQ4MWQ0MzY3YmVmM2RlYTdhN2IyODY3ZmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDU4YWM5Zjk1YTNkODNjMjllZmFmN2E4OTA2ZmI2YWVmZWE4YzhlNzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjU4OjU0ICswMDAwCiBTdWJqZWN0OiBbUEFUQ0ggMDEvMTVdIGJpbnV0aWxzLWNyb3Nzc2RrOiBHZW5lcmF0ZSByZWxvY2F0YWJsZSBTREtzCkBAIC00Myw3ICs0Myw3IEBACiAgTERfRkxBRz0KICBEQVRBX0FMSUdOTUVOVD0ke0RBVEFfQUxJR05NRU5UX30KIGRpZmYgLS1naXQgYS9sZC9zY3JpcHR0ZW1wbC9lbGYuc2MgYi9sZC9zY3JpcHR0ZW1wbC9lbGYuc2MKLWluZGV4IGU2NWY5YTNjY2YuLmQ5OWQyYzFkMmEgMTAwNjQ0CitpbmRleCBkOTEzOGJjMDU5Li5lNDhmYWVjYTQzIDEwMDY0NAogLS0tIGEvbGQvc2NyaXB0dGVtcGwvZWxmLnNjCiArKysgYi9sZC9zY3JpcHR0ZW1wbC9lbGYuc2MKIEBAIC0xMzgsOCArMTM4LDggQEAgaWYgdGVzdCAteiAiJERBVEFfU0VHTUVOVF9BTElHTiI7IHRoZW4KQEAgLTU4LDUgKzU4LDUgQEAKICBpZiB0ZXN0IC16ICIkUExUIjsgdGhlbgogICAgSVBMVD0iLmlwbHQgICAgICAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLmlwbHQpIH0iCiAtLSAKLTIuMTIuMAorMi4xNC4wCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMi1iaW51dGlscy1jcm9zcy1Eby1ub3QtZ2VuZXJhdGUtbGlua2VyLXNjcmlwdC1kaXJlY3RvLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAyLWJpbnV0aWxzLWNyb3NzLURvLW5vdC1nZW5lcmF0ZS1saW5rZXItc2NyaXB0LWRpcmVjdG8ucGF0Y2gKaW5kZXggMTQyOTlmZC4uMzcwMzMzZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAyLWJpbnV0aWxzLWNyb3NzLURvLW5vdC1nZW5lcmF0ZS1saW5rZXItc2NyaXB0LWRpcmVjdG8ucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAyLWJpbnV0aWxzLWNyb3NzLURvLW5vdC1nZW5lcmF0ZS1saW5rZXItc2NyaXB0LWRpcmVjdG8ucGF0Y2gKQEAgLTEsNCArMSw0IEBACi1Gcm9tIDdjN2RlMTA3YjRiMGE1MDdkMmFlY2EzZTNhODZkMDFjYjRiNTEzNjAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDhmOTI5YzYxNjIwODM1MWQwOTcxZDdkZmQ3NTc0ZDQ4ZDMxNDQ2MDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogTW9uLCA2IE1hciAyMDE3IDIzOjM3OjA1IC0wODAwCiBTdWJqZWN0OiBbUEFUQ0ggMDIvMTVdIGJpbnV0aWxzLWNyb3NzOiBEbyBub3QgZ2VuZXJhdGUgbGlua2VyIHNjcmlwdApAQCAtNTcsNSArNTcsNSBAQAogICAgbGlicz0ke05BVElWRV9MSUJfRElSU30KICAgIGlmIFsgIngke05BVElWRX0iID0gInh5ZXMiIF0gOyB0aGVuCiAtLSAKLTIuMTIuMAorMi4xNC4wCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMy1jb25maWd1cmUtd2lkZW4tdGhlLXJlZ2V4cC1mb3ItU0gtYXJjaGl0ZWN0dXJlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMy1jb25maWd1cmUtd2lkZW4tdGhlLXJlZ2V4cC1mb3ItU0gtYXJjaGl0ZWN0dXJlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmMwOWNjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAzLWNvbmZpZ3VyZS13aWRlbi10aGUtcmVnZXhwLWZvci1TSC1hcmNoaXRlY3R1cmVzLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0Zyb20gZTVhODA2YWFlMDJhMTAyOTBjNzFkZWI3MmY2Mjk0Yzk4MDY4MzY4ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6MDc6MzMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwMy8xNV0gY29uZmlndXJlOiB3aWRlbiB0aGUgcmVnZXhwIGZvciBTSCBhcmNoaXRlY3R1cmVzCisKK2dwcm9mIG5lZWRzIHRvIGtub3cgYWJvdXQgdWNsaWJjCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlICAgICAgIHwgMiArLQorIGdwcm9mL2NvbmZpZ3VyZSB8IDUgKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCBiZTlkZDg5ZDliLi5kOGFmMTU1YWI1IDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC0zODQ0LDcgKzM4NDQsNyBAQCBjYXNlICIke3RhcmdldH0iIGluCisgICBvcjFrKi0qLSopCisgICAgIG5vY29uZmlnZGlycz0iJG5vY29uZmlnZGlycyBnZGIiCisgICAgIDs7CistICBzaC0qLSopCisrICBzaCotKi0qIHwgc2g2NC0qLSopCisgICAgIGNhc2UgIiR7dGFyZ2V0fSIgaW4KKyAgICAgICBzaCotKi1lbGYpCisgICAgICAgICAgOzsKK2RpZmYgLS1naXQgYS9ncHJvZi9jb25maWd1cmUgYi9ncHJvZi9jb25maWd1cmUKK2luZGV4IGU3MWZlOGI5ZTQuLjY3OWUwZGNlNzcgMTAwNzU1CistLS0gYS9ncHJvZi9jb25maWd1cmUKKysrKyBiL2dwcm9mL2NvbmZpZ3VyZQorQEAgLTU4NzQsNiArNTg3NCwxMSBAQCBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKKytsaW51eC11Y2xpYmMqKQorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKysgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC9saWIvbGlidUNsaWJjLSouc29gCisrICA7OworKworIG5ldGJzZCopCisgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfF9waWNcLmEpJCcKKy0tIAorMi4xNC4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMy1ncHJvZi1hZGQtdWNsaWJjLXN1cHBvcnQtdG8tY29uZmlndXJlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAzLWdwcm9mLWFkZC11Y2xpYmMtc3VwcG9ydC10by1jb25maWd1cmUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkZGI0MmIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAzLWdwcm9mLWFkZC11Y2xpYmMtc3VwcG9ydC10by1jb25maWd1cmUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1Gcm9tIDc4OTNkMmIyNGQwMzAzYmRhM2EwMDQ5ODQ2NDg5NjE5ZmZkMTM4N2IgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjA3OjMzICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMDMvMTVdIGdwcm9mOiBhZGQgdWNsaWJjIHN1cHBvcnQgdG8gY29uZmlndXJlCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi0gZ3Byb2YvY29uZmlndXJlIHwgNSArKysrKwotIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL2dwcm9mL2NvbmZpZ3VyZSBiL2dwcm9mL2NvbmZpZ3VyZQotaW5kZXggOWU2YjhmMzUyNS4uMzhhNGMwYjBlNSAxMDA3NTUKLS0tLSBhL2dwcm9mL2NvbmZpZ3VyZQotKysrIGIvZ3Byb2YvY29uZmlndXJlCi1AQCAtNTg3NCw2ICs1ODc0LDExIEBAIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKLSAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gICA7OwotIAotK2xpbnV4LXVjbGliYyopCi0rICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL2xpYi9saWJ1Q2xpYmMtKi5zb2AKLSsgIDs7Ci0rCi0gbmV0YnNkKikKLSAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJwotLS0gCi0yLjEyLjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA0LVBvaW50LXNjcmlwdHMtbG9jYXRpb24tdG8tbGliZGlyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA0LVBvaW50LXNjcmlwdHMtbG9jYXRpb24tdG8tbGliZGlyLnBhdGNoCmluZGV4IGM2YjlkZTcuLjM4ZWVlMzAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNC1Qb2ludC1zY3JpcHRzLWxvY2F0aW9uLXRvLWxpYmRpci5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDQtUG9pbnQtc2NyaXB0cy1sb2NhdGlvbi10by1saWJkaXIucGF0Y2gKQEAgLTEsNCArMSw0IEBACi1Gcm9tIGUzNDY1MGM1MDU3NGE4YTM5ZDY5NDU2N2VkNjA3YTYzMDA2YjZmOTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDM2MzRlYzM1NDdiYzBmOGE1ZDFiOGFkMTUzNjVlMmY4MzZjZGE2NDIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjA5OjU4ICswMDAwCiBTdWJqZWN0OiBbUEFUQ0ggMDQvMTVdIFBvaW50IHNjcmlwdHMgbG9jYXRpb24gdG8gbGliZGlyCkBAIC0xMiw3ICsxMiw3IEBACiAgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9sZC9NYWtlZmlsZS5hbSBiL2xkL01ha2VmaWxlLmFtCi1pbmRleCAxNWJlYWE3MDIxLi5iYmY5YzY3MWQ4IDEwMDY0NAoraW5kZXggNjI1MzQ3ZmY2Mi4uZDUzMzRkMjY4MSAxMDA2NDQKIC0tLSBhL2xkL01ha2VmaWxlLmFtCiArKysgYi9sZC9NYWtlZmlsZS5hbQogQEAgLTU3LDcgKzU3LDcgQEAgZW5kaWYKQEAgLTI1LDEwICsyNSwxMCBAQAogIEVNVUwgPSBARU1VTEAKICBFTVVMQVRJT05fT0ZJTEVTID0gQEVNVUxBVElPTl9PRklMRVNACiBkaWZmIC0tZ2l0IGEvbGQvTWFrZWZpbGUuaW4gYi9sZC9NYWtlZmlsZS5pbgotaW5kZXggMDQyYjY5MGVkNi4uMzdlN2IyNWU5YSAxMDA2NDQKK2luZGV4IGJhMjUxNzc3YjAuLmEyY2YyMjgyYjUgMTAwNjQ0CiAtLS0gYS9sZC9NYWtlZmlsZS5pbgogKysrIGIvbGQvTWFrZWZpbGUuaW4KLUBAIC00NTIsNyArNDUyLDcgQEAgQU1fQ0ZMQUdTID0gJChXQVJOX0NGTEFHUykgJChFTEZfQ0xGQUdTKQorQEAgLTQ0Niw3ICs0NDYsNyBAQCBBTV9DRkxBR1MgPSAkKFdBUk5fQ0ZMQUdTKSAkKEVMRl9DTEZBR1MpCiAgIyBXZSBwdXQgdGhlIHNjcmlwdHMgaW4gdGhlIGRpcmVjdG9yeSAkKHNjcmlwdGRpcikvbGRzY3JpcHRzLgogICMgV2UgY2FuJ3QgcHV0IHRoZSBzY3JpcHRzIGluICQoZGF0YWRpcikgYmVjYXVzZSB0aGUgU0VBUkNIX0RJUgogICMgZGlyZWN0aXZlcyBuZWVkIHRvIGJlIGRpZmZlcmVudCBmb3IgbmF0aXZlIGFuZCBjcm9zcyBsaW5rZXJzLgpAQCAtMzgsNSArMzgsNSBAQAogIEJGRERJUiA9ICQoQkFTRURJUikvYmZkCiAgSU5DRElSID0gJChCQVNFRElSKS9pbmNsdWRlCiAtLSAKLTIuMTIuMAorMi4xNC4wCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNS1Pbmx5LWdlbmVyYXRlLWFuLVJQQVRILWVudHJ5LWlmLUxEX1JVTl9QQVRILWlzLW5vdC1lLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA1LU9ubHktZ2VuZXJhdGUtYW4tUlBBVEgtZW50cnktaWYtTERfUlVOX1BBVEgtaXMtbm90LWUucGF0Y2gKaW5kZXggNzI2ZjcwMi4uNTkxNTBhMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA1LU9ubHktZ2VuZXJhdGUtYW4tUlBBVEgtZW50cnktaWYtTERfUlVOX1BBVEgtaXMtbm90LWUucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA1LU9ubHktZ2VuZXJhdGUtYW4tUlBBVEgtZW50cnktaWYtTERfUlVOX1BBVEgtaXMtbm90LWUucGF0Y2gKQEAgLTEsNCArMSw0IEBACi1Gcm9tIDQyMjkyZjU1MzNiY2E5MDRmMjMwYThlMDNjZWVlMWY4NGVmMGM0ZWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDlkMzdjOGY2OGMwN2RhNjMxODZjYjk5M2YxMjIxZjZjMTFlY2E0MjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjI3OjE3ICswMDAwCiBTdWJqZWN0OiBbUEFUQ0ggMDUvMTVdIE9ubHkgZ2VuZXJhdGUgYW4gUlBBVEggZW50cnkgaWYgTERfUlVOX1BBVEggaXMgbm90CkBAIC0xNSwxOSArMTUsMTkgQEAKICAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCiAKIGRpZmYgLS1naXQgYS9sZC9lbXVsdGVtcGwvZWxmMzIuZW0gYi9sZC9lbXVsdGVtcGwvZWxmMzIuZW0KLWluZGV4IDg0YWRhZWY2ZGYuLmFiOGM3NDI1N2UgMTAwNjQ0CitpbmRleCA5YWMxODQwMzE2Li45ZGM0YzE0OWJjIDEwMDY0NAogLS0tIGEvbGQvZW11bHRlbXBsL2VsZjMyLmVtCiArKysgYi9sZC9lbXVsdGVtcGwvZWxmMzIuZW0KLUBAIC0xNDExLDYgKzE0MTEsOCBAQCBmcmFnbWVudCA8PEVPRgorQEAgLTE0NjMsNiArMTQ2Myw4IEBAIGZyYWdtZW50IDw8RU9GCiAgCSAgICAgICYmIGNvbW1hbmRfbGluZS5ycGF0aCA9PSBOVUxMKQogIAkgICAgewotIAkgICAgICBsaWJfcGF0aCA9IChjb25zdCBjaGFyICopIGdldGVudiAoIkxEX1JVTl9QQVRIIik7Ci0rCSAgICAgIGlmICgobGliX3BhdGgpICYmIChzdHJsZW4gKGxpYl9wYXRoKSA9PSAwKSkKLSsJCSAgbGliX3BhdGggPSBOVUxMOwotIAkgICAgICBpZiAoZ2xkJHtFTVVMQVRJT05fTkFNRX1fc2VhcmNoX25lZWRlZCAobGliX3BhdGgsICZuLAotIAkJCQkJCSAgICAgIGZvcmNlKSkKKyAJICAgICAgcGF0aCA9IChjb25zdCBjaGFyICopIGdldGVudiAoIkxEX1JVTl9QQVRIIik7CisrCSAgICAgIGlmICgocGF0aCkgJiYgKHN0cmxlbiAocGF0aCkgPT0gMCkpCisrCQkgIHBhdGggPSBOVUxMOworIAkgICAgICBpZiAocGF0aAorIAkJICAmJiBnbGQke0VNVUxBVElPTl9OQU1FfV9zZWFyY2hfbmVlZGVkIChwYXRoLCAmbiwgZm9yY2UpKQogIAkJYnJlYWs7Ci1AQCAtMTY5Miw2ICsxNjk0LDggQEAgZ2xkJHtFTVVMQVRJT05fTkFNRX1fYmVmb3JlX2FsbG9jYXRpb24gKHZvaWQpCitAQCAtMTc0MCw2ICsxNzQyLDggQEAgZ2xkJHtFTVVMQVRJT05fTkFNRX1fYmVmb3JlX2FsbG9jYXRpb24gKHZvaWQpCiAgICBycGF0aCA9IGNvbW1hbmRfbGluZS5ycGF0aDsKICAgIGlmIChycGF0aCA9PSBOVUxMKQogICAgICBycGF0aCA9IChjb25zdCBjaGFyICopIGdldGVudiAoIkxEX1JVTl9QQVRIIik7CkBAIC0zNyw1ICszNyw1IEBACiAgICBmb3IgKGFiZmQgPSBsaW5rX2luZm8uaW5wdXRfYmZkczsgYWJmZDsgYWJmZCA9IGFiZmQtPmxpbmsubmV4dCkKICAgICAgaWYgKGJmZF9nZXRfZmxhdm91ciAoYWJmZCkgPT0gYmZkX3RhcmdldF9lbGZfZmxhdm91cikKIC0tIAotMi4xMi4wCisyLjE0LjAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA2LUV4cGxpY2l0bHktbGluay13aXRoLWxpYm0tb24tdWNsaWJjLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA2LUV4cGxpY2l0bHktbGluay13aXRoLWxpYm0tb24tdWNsaWJjLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzcwY2E3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNi1FeHBsaWNpdGx5LWxpbmstd2l0aC1saWJtLW9uLXVjbGliYy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLUZyb20gNmE0NmJmMTUxZDdlNTNkZjhiNWU3NjQ1YTJkMjQxOTY3Njg4MzY4YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6MzI6NDkgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAwNi8xNV0gRXhwbGljaXRseSBsaW5rIHdpdGggbGlibSBvbiB1Y2xpYmMKLQotRGVzY3JpcHRpb246Ci0KLVdlIGRvIG5vdCBuZWVkIHRvIGhhdmUgdGhlIGxpYnRvb2wgcGF0Y2ggYW55bW9yZSBmb3IgYmludXRpbHMgYWZ0ZXIKLWxpYnRvb2wgaGFzIGJlZW4gdXBkYXRlZCB1cHN0cmVhbSBpdCBpbmNsdWRlIHN1cHBvcnQgZm9yIGl0LiBIb3dldmVyCi1mb3IgYnVpbGRpbmcgZ2FzIG5hdGl2ZWx5IG9uIHVjbGliYyBzeXN0ZW1zIHdlIGhhdmUgdG8gbGluayBpdCB3aXRoCi0tbG0gc28gdGhhdCBpdCBwaWNrcyB1cCBtaXNzaW5nIHN5bWJvbHMuCi0KLS9sb2NhbC9idWlsZF9hcmVhL0JVSUxEL2FybV92NXRfbGVfdWNsaWJjL2JpbnV0aWxzLTIuMTcuNTAvb2JqZGlyL2xpYmliZXJ0eS9waWMvbGliaWJlcnR5LmEoZmxvYXRmb3JtYXQubyk6Ci1JbiBmdW5jdGlvbiBgZmxvYXRmb3JtYXRfZnJvbV9kb3VibGUnOgotZmxvYXRmb3JtYXQuYzooLnRleHQrMHgxZWMpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBmcmV4cCcKLWZsb2F0Zm9ybWF0LmM6KC50ZXh0KzB4MmY4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgbGRleHAnCi0vbG9jYWwvYnVpbGRfYXJlYS9CVUlMRC9hcm1fdjV0X2xlX3VjbGliYy9iaW51dGlscy0yLjE3LjUwL29iamRpci9saWJpYmVydHkvcGljL2xpYmliZXJ0eS5hKGZsb2F0Zm9ybWF0Lm8pOgotSW4gZnVuY3Rpb24gYGZsb2F0Zm9ybWF0X3RvX2RvdWJsZSc6Ci1mbG9hdGZvcm1hdC5jOigudGV4dCsweDM4YSk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGxkZXhwJwotZmxvYXRmb3JtYXQuYzooLnRleHQrMHgzZDIpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBsZGV4cCcKLWZsb2F0Zm9ybWF0LmM6KC50ZXh0KzB4NDNlKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgbGRleHAnCi1mbG9hdGZvcm1hdC5jOigudGV4dCsweDRlMik6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGxkZXhwJwotY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKLW1ha2VbNF06ICoqKiBbYXMtbmV3XSBFcnJvciAxCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi0gZ2FzL2NvbmZpZ3VyZS50Z3QgfCA2ICsrKysrKwotIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL2dhcy9jb25maWd1cmUudGd0IGIvZ2FzL2NvbmZpZ3VyZS50Z3QKLWluZGV4IDcxMWQ1MzdlOTUuLjdjZDJkYzE3NmEgMTAwNjQ0Ci0tLS0gYS9nYXMvY29uZmlndXJlLnRndAotKysrIGIvZ2FzL2NvbmZpZ3VyZS50Z3QKLUBAIC00OTQsNiArNDk0LDEyIEBAIGNhc2UgJHtnZW5lcmljX3RhcmdldH0gaW4KLSAgICotKi1uZXR3YXJlKQkJCQlmbXQ9ZWxmIGVtPW5ldHdhcmUgOzsKLSBlc2FjCi0gCi0rY2FzZSAke2dlbmVyaWNfdGFyZ2V0fSBpbgotKyAgYXJtLSotKnVjbGliYyopCi0rICAgIG5lZWRfbGlibT15ZXMKLSsgICAgOzsKLStlc2FjCi0rCi0gY2FzZSAke2NwdV90eXBlfSBpbgotICAgYWFyY2g2NCB8IGFscGhhIHwgYXJtIHwgaTM4NiB8IGlhNjQgfCBtaWNyb2JsYXplIHwgbWlwcyB8IG5zMzJrIHwgb3IxayB8IG9yMWtuZCB8IHBkcDExIHwgcHBjIHwgcmlzY3YgfCBzcGFyYyB8IHo4MCB8IHo4aykKLSAgICAgYmZkX2dhcz15ZXMKLS0tIAotMi4xMi4wCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNi1Vc2UtbGlidG9vbC0yLjQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDYtVXNlLWxpYnRvb2wtMi40LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4N2VmZTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDYtVXNlLWxpYnRvb2wtMi40LnBhdGNoCkBAIC0wLDAgKzEsMjExNTcgQEAKK0Zyb20gNzFjNzM0YmIzNzU0MzE5MDI5ZGNmYzg5OGNlZGJhZGU0MjI3NGRjYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDE0IEZlYiAyMDE2IDE3OjA0OjA3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDYvMTVdIFVzZSBsaWJ0b29sIDIuNAorCitnZXQgbGlidG9vbCBzeXNyb290IHN1cHBvcnQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBiZmQvY29uZmlndXJlICAgICAgICB8IDEzMTggKysrKysrKysrKysrKysrKystLS0tLS0KKyBiZmQvY29uZmlndXJlLmFjICAgICB8ICAgIDIgKy0KKyBiaW51dGlscy9jb25maWd1cmUgICB8IDEzMTYgKysrKysrKysrKysrKysrKystLS0tLS0KKyBjb25maWd1cmUgICAgICAgICAgICB8ICAgIDIgKy0KKyBnYXMvY29uZmlndXJlICAgICAgICB8IDEzMTQgKysrKysrKysrKysrKysrKystLS0tLS0KKyBncHJvZi9jb25maWd1cmUgICAgICB8IDEzMjEgKysrKysrKysrKysrKysrKystLS0tLS0KKyBsZC9jb25maWd1cmUgICAgICAgICB8IDE2OTEgKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0KKyBsaWJ0b29sLm00ICAgICAgICAgICB8IDEwODAgKysrKysrKysrKysrKy0tLS0tLQorIGx0bWFpbi5zaCAgICAgICAgICAgIHwgMjkyNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQorIGx0b3B0aW9ucy5tNCAgICAgICAgIHwgICAgMiArLQorIGx0dmVyc2lvbi5tNCAgICAgICAgIHwgICAxMiArLQorIGx0fm9ic29sZXRlLm00ICAgICAgIHwgICAgMiArLQorIG9wY29kZXMvY29uZmlndXJlICAgIHwgMTMxOCArKysrKysrKysrKysrKysrKy0tLS0tLQorIG9wY29kZXMvY29uZmlndXJlLmFjIHwgICAgMiArLQorIHpsaWIvY29uZmlndXJlICAgICAgIHwgMTMxNiArKysrKysrKysrKysrKysrKy0tLS0tLQorIDE1IGZpbGVzIGNoYW5nZWQsIDk5MjcgaW5zZXJ0aW9ucygrKSwgMzY5NCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2JmZC9jb25maWd1cmUgYi9iZmQvY29uZmlndXJlCitpbmRleCA0ODI3NjU5NGVkLi4zZWNlODk0M2YzIDEwMDc1NQorLS0tIGEvYmZkL2NvbmZpZ3VyZQorKysrIGIvYmZkL2NvbmZpZ3VyZQorQEAgLTY3Miw2ICs2NzIsOSBAQCBPVE9PTAorIExJUE8KKyBOTUVESVQKKyBEU1lNVVRJTAorK01BTklGRVNUX1RPT0wKKythY19jdF9BUgorK0RMTFRPT0wKKyBPQkpEVU1QCisgTE5fUworIE5NCitAQCAtNzg1LDYgKzc4OCw3IEBAIGVuYWJsZV9zdGF0aWMKKyB3aXRoX3BpYworIGVuYWJsZV9mYXN0X2luc3RhbGwKKyB3aXRoX2dudV9sZAorK3dpdGhfbGlidG9vbF9zeXNyb290CisgZW5hYmxlX2xpYnRvb2xfbG9jaworIGVuYWJsZV9wbHVnaW5zCisgZW5hYmxlX2xhcmdlZmlsZQorQEAgLTE0NjEsNiArMTQ2NSw4IEBAIE9wdGlvbmFsIFBhY2thZ2VzOgorICAgLS13aXRoLXBpYyAgICAgICAgICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib3RoXQorICAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQorKyAgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD1ESVIgU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKKysgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS4KKyAgIC0td2l0aC1tbWFwICAgICAgICAgICAgIHRyeSB1c2luZyBtbWFwIGZvciBCRkQgaW5wdXQgZmlsZXMgaWYgYXZhaWxhYmxlCisgICAtLXdpdGgtc2VwYXJhdGUtZGVidWctZGlyPURJUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9vayBmb3IgZ2xvYmFsIHNlcGFyYXRlIGRlYnVnIGluZm8gaW4gRElSCitAQCAtNTM5Myw4ICs1Mzk5LDggQEAgZXNhYworIAorIAorIAorLW1hY3JvX3ZlcnNpb249JzIuMi43YScKKy1tYWNyb19yZXZpc2lvbj0nMS4zMTM0JworK21hY3JvX3ZlcnNpb249JzIuNCcKKyttYWNyb19yZXZpc2lvbj0nMS4zMjkzJworIAorIAorIAorQEAgLTU0MzQsNyArNTQ0MCw3IEBAIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MuLi4gIiA+JjY7IH0KKyAjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KKy1pZiB0ZXN0ICJYYHByaW50IC1yIC0tIC1uIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgICBFQ0hPPSdwcmludCAtciAtLScKKyBlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorQEAgLTYxMjAsOCArNjEyNiw4IEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7CisgIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKKyB4c2lfc2hlbGw9bm8KKyAoIF9sdF9kdW1teT0iYS9iL2MiCistICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwiJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorLSAgICAgID0gYyxhL2IsLCBcCisrICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorKyAgICAgID0gYyxhL2IsYi9jLCBcCisgICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICYmIHhzaV9zaGVsbD15ZXMKK0BAIC02MTcwLDYgKzYxNzYsODAgQEAgZXNhYworIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICotKi1jeWd3aW4qICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisrICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b190b29sX2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgorK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorK2Nhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTYxODYsNiArNjI2NiwxMSBAQCBjYXNlICRyZWxvYWRfZmxhZyBpbgorIGVzYWMKKyByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgY2FzZSAkaG9zdF9vcyBpbgorKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKysgICAgICByZWxvYWRfY21kcz1mYWxzZQorKyAgICBmaQorKyAgICA7OworICAgZGFyd2luKikKKyAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitAQCAtNjM1NCw3ICs2NDM5LDggQEAgbWluZ3cqIHwgcHczMiopCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICAgZWxzZQorLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKKysgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgIGZpCisgICA7OworQEAgLTY1MDgsNiArNjU5NCwyMSBAQCBlc2FjCisgZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKKyAkYXNfZWNobyAiJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KKysKKytmaWxlX21hZ2ljX2dsb2I9Cisrd2FudF9ub2Nhc2VnbG9iPW5vCisraWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKysgIGNhc2UgJGhvc3Rfb3MgaW4KKysgIG1pbmd3KiB8IHB3MzIqKQorKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcworKyAgICBlbHNlCisrICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bXDFdXC9bXDFdXC9nOy9nImAKKysgICAgZmkKKysgICAgOzsKKysgIGVzYWMKKytmaQorKworIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAorIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorQEAgLTY1MjEsMTEgKzY2MjIsMTY0IEBAIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorIAorIAorIAorKworKworKworKworKworKworKworKworKworKworIAorIAorIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisrICBhY19jdF9ETExUT09MPSRETExUT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorKyAgICBETExUT09MPSJmYWxzZSIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKysgIGZpCisrZWxzZQorKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisrCisrY2FzZSAkaG9zdF9vcyBpbgorK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKKysgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKysgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisrICAgIDs7CisrICAqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKysgICAgOzsKKysgIGVzYWMKKysgIDs7CisrKikKKysgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorKyAgOzsKKytlc2FjCisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjY7IH0KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyt0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisrCisrCisrCisrCisrCisrCisrCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKysgIGRvCisrICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTY1NDEsNyArNjc5NSw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKysgICAgYWNfY3ZfcHJvZ19BUj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTY1NjEsMTEgKzY4MTUsMTUgQEAgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCisrICBkb25lCisgZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKytpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgICBhY19jdF9BUj0kQVIKKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBhcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKytkbworKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjU4MSw3ICs2ODM5LDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKKysgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTY2MDAsNiArNjg1OCwxMCBAQCBlbHNlCisgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorKworKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhaworK2RvbmUKKysKKyAgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgICBBUj0iZmFsc2UiCisgICBlbHNlCitAQCAtNjYxMSwxNiArNjg3Myw3MiBAQCBhY190b29sX3dhcm5lZD15ZXMgOzsKKyBlc2FjCisgICAgIEFSPSRhY19jdF9BUgorICAgZmkKKy1lbHNlCistICBBUj0iJGFjX2N2X3Byb2dfQVIiCisgZmkKKyAKKy10ZXN0IC16ICIkQVIiICYmIEFSPWFyCistdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKys6ICR7QVI9YXJ9CisrOiAke0FSX0ZMQUdTPWNydX0KKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfYXJfYXRfZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X2FyX2F0X2ZpbGU9bm8KKysgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworK2ludAorK21haW4gKCkKKyt7CisgCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorKyAgZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CisrICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JjUnCisrICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKysJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKysJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisrCXsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKwlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgorKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKyAKKytmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIAorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcl9hdF9maWxlIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQorIAorK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KKytlbHNlCisrICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKKytmaQorIAorIAorIAorQEAgLTY5NjIsOCArNzI4MCw4IEBAIGVzYWMKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorIAorICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKyAKKyAjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KKyBvcHRfY3I9CitAQCAtNjk5OSw2ICs3MzE3LDcgQEAgZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworICAgZWxzZQorICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICAgZmkKKysgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKyAKKyAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICAgcGlwZV93b3Jrcz1ubworQEAgLTcwNDAsNiArNzM1OSwxOCBAQCBfTFRfRU9GCisgICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKysvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKysjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKysvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbHNlCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKysjZW5kaWYKKysKKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyAjZW5kaWYKK0BAIC03MDUxLDcgKzczODIsNyBAQCBfTFRfRU9GCisgCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgCisgLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworLWNvbnN0IHN0cnVjdCB7CisrTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICB2b2lkICAgICAgICphZGRyZXNzOworIH0KK0BAIC03MDc3LDggKzc0MDgsOCBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworIF9MVF9FT0YKKyAJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorLQkgIGx0X3NhdmVfTElCUz0iJExJQlMiCistCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKysJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorIAkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKKyAJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKK0BAIC03MDg4LDggKzc0MTksOCBAQCBfTFRfRU9GCisgICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAJICAgIHBpcGVfd29ya3M9eWVzCisgCSAgZmkKKy0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisrCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisgCWVsc2UKKyAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKKyAJZmkKK0BAIC03MTI2LDYgKzc0NTcsMTYgQEAgZWxzZQorICRhc19lY2hvICJvayIgPiY2OyB9CisgZmkKKyAKKysjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KKytpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZmkKKysKKysKKysKKysKKyAKKyAKKyAKK0BAIC03MTQyLDYgKzc0ODMsNDUgQEAgZmkKKyAKKyAKKyAKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzcm9vdC4uLiAiID4mNjsgfQorKworKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlidG9vbC1zeXNyb290IHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke3dpdGhfbGlidG9vbF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuIDoKKysgIHdpdGh2YWw9JHdpdGhfbGlidG9vbF9zeXNyb290OworK2Vsc2UKKysgIHdpdGhfbGlidG9vbF9zeXNyb290PW5vCisrZmkKKysKKysKKytsdF9zeXNyb290PQorK2Nhc2UgJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0gaW4gIygKKysgeWVzKQorKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorKyAgIGZpCisrICAgOzsgIygKKysgLyopCisrICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrICAgOzsgIygKKysgbm98JycpCisrICAgOzsgIygKKysgKikKKysgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNQorKyRhc19lY2hvICIke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY2OyB9CisrICAgYXNfZm5fZXJyb3IgIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1CisrICAgOzsKKytlc2FjCisrCisrIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke2x0X3N5c3Jvb3Q6LW5vfSIgPiY1CisrJGFzX2VjaG8gIiR7bHRfc3lzcm9vdDotbm99IiA+JjY7IH0KKyAKKyAKKyAKK0BAIC03MzUzLDYgKzc3MzMsMTIzIEBAIGVzYWMKKyAKKyBuZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKyAKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiRNQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJHthY190b29sX3ByZWZpeH1tdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3RfTUFOSUZFU1RfVE9PTD0kTUFOSUZFU1RfVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IG10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9IiRhY19jdF9NQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0ibXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9NQU5JRkVTVF9UT09MIiA9IHg7IHRoZW4KKysgICAgTUFOSUZFU1RfVE9PTD0iOiIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIE1BTklGRVNUX1RPT0w9JGFjX2N0X01BTklGRVNUX1RPT0wKKysgIGZpCisrZWxzZQorKyAgTUFOSUZFU1RfVE9PTD0iJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9tYWluZmVzdF90b29sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiY1CisrICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0CisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisrICBmaQorKyAgcm0gLWYgY29uZnRlc3QqCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNjsgfQorK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCisrICBNQU5JRkVTVF9UT09MPToKKytmaQorKworKworKworKworKworIAorICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICByaGFwc29keSogfCBkYXJ3aW4qKQorQEAgLTc5MTYsNiArODQxMyw4IEBAIF9MVF9FT0YKKyAgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKKyAgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CisgICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQorKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiY1CisrICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JjUKKyAgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKKyBpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorIF9MVF9FT0YKK0BAIC04MDgwLDcgKzg1NzksOCBAQCBmaQorIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKKyAKKyAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKScKKytMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCisgCisgCisgCitAQCAtODE2OSw3ICs4NjY5LDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKK0BAIC04NDY3LDggKzg5NjcsNiBAQCBmaQorIGx0X3Byb2dfY29tcGlsZXJfcGljPQorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorIAorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCisgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworQEAgLTg2MzQsNiArOTEzMiwxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisgCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKKyAJOzsKKysgICAgICBuYWdmb3IqKQorKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisrCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKKysJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisrCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKysJOzsKKyAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorQEAgLTg2OTYsNyArOTIwMCw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKysgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgICopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKK0BAIC04NzUzLDEzICs5MjU3LDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICAgOzsKKyBlc2FjCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CistJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CistCistCistCistCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKytsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKKyAKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorQEAgLTg4MjAsNiArOTMyOCwxMSBAQCBmaQorIAorIAorIAorKworKworKworKworKworICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisgIworQEAgLTkxNzAsNyArOTY4Myw4IEBAIF9MVF9FT0YKKyAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCistICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKyAKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworQEAgLTkyNjksMTIgKzk3ODMsMTIgQEAgX0xUX0VPRgorIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nLXJwYXRoICRsaWJkaXInCistCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisrCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworIAkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CistCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgCSAgZmkKKyAJICA7OworIAllc2FjCitAQCAtOTI4OCw4ICs5ODAyLDggQEAgX0xUX0VPRgorIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisgCXdsYXJjPQorICAgICAgIGVsc2UKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZmkKKyAgICAgICA7OworIAorQEAgLTkzMDcsOCArOTgyMSw4IEBAIF9MVF9FT0YKKyAKKyBfTFRfRU9GCisgICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC05MzU0LDggKzk4NjgsOCBAQCBfTFRfRU9GCisgCisgICAgICopCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtOTQ4NSw3ICs5OTk5LDEzIEBAIF9MVF9FT0YKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKKyAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKyAgICAgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTk0OTgsMjIgKzEwMDE4LDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKK0BAIC05NTI1LDcgKzEwMDUyLDEzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAllbHNlCisgCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAJICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0JIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05NTM4LDIyICsxMDA3MSwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorQEAgLTk1OTgsMjAgKzEwMTM4LDYzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKy0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCistICAgICAgbGliZXh0PWxpYgorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCistICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKy0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorLSAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKy0gICAgICBmaXhfc3JjZmlsZV9wYXRoPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKy0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgY2wqKQorKwkjIE5hdGl2ZSBNU1ZDCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKysJZmlsZV9saXN0X3NwZWM9J0AnCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGVsc2UKKysJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZml+CisrCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgIGxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysJIyBEb24ndCB1c2UgcmFubGliCisrCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKKysJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisrCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgKi5leGV8Ki5FWEUpIDs7CisrCSAgICAqKQorKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIDs7CisrCSAgZXNhY34KKysJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKysJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworKwkgIGZpJworKwk7OworKyAgICAgICopCisrCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCTs7CisrICAgICAgZXNhYworICAgICAgIDs7CisgCisgICAgIGRhcndpbiogfCByaGFwc29keSopCitAQCAtOTY3Miw3ICsxMDI1NSw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworQEAgLTk2ODAsNyArMTAyNjMsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDkqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZmkKK0BAIC05Njk2LDcgKzEwMjc5LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXgxMCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgICBmaQorQEAgLTk3MjAsMTAgKzEwMzAzLDEwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJaWE2NCopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAkqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWVzYWMKKyAgICAgICBlbHNlCitAQCAtOTgwMiwyMyArMTAzODUsMzYgQEAgZmkKKyAKKyAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKyAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorLSAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKy0gICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKysJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisrCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKysJICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy1pbnQgZm9vKHZvaWQpIHt9CisraW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKy0gIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0KKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllcworK2Vsc2UKKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9CisrCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJZmkKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworQEAgLTk5MDMsNyArMTA0OTksNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgZWxzZQorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKK0BAIC05OTIyLDkgKzEwNTE4LDkgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCXdsYXJjPScke3dsfScKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKy0JICAkQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworKwkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgIGVsc2UKKyAJY2FzZSBgJENDIC1WIDI+JjFgIGluCisgCSoiQ29tcGlsZXJzIDUuMCIqKQorQEAgLTEwNTAwLDggKzExMDk2LDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgbmVlZF92ZXJzaW9uPW5vCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAKKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKysgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKysgIHllcywqKQorKyAgICAjIGdjYworICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorQEAgLTEwNTM0LDEzICsxMTEzMSw3MSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKysgICAgOzsKKysKKysgICosY2wqKQorKyAgICAjIE5hdGl2ZSBNU1ZDCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisrCisrICAgIGNhc2UgJGJ1aWxkX29zIGluCisrICAgIG1pbmd3KikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisrICAgICAgbHRfc2F2ZV9pZnM9JElGUworKyAgICAgIElGUz0nOycKKysgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisrICAgICAgZG8KKysgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisrICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKysgICAgICBkb25lCisrICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorKyAgICAgIDs7CisrICAgIGN5Z3dpbiopCisrICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKysgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKysgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICBmaQorKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKysgICAgICA7OworKyAgICBlc2FjCisrCisrICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKysgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisrICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisrICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisrICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisrICAgICAgICRSTSBcJGRscGF0aCcKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgIDs7CisgCisgICAqKQorKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgIDs7CisgICBlc2FjCistICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgIDs7CitAQCAtMTA2MzIsNyArMTEyODcsNyBAQCBoYWlrdSopCisgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9iZW9zL3N5c3RlbS9saWInCisrICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIDs7CisgCitAQCAtMTE0NzIsMTAgKzEyMTI3LDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTE1NzgsMTAgKzEyMjMzLDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTQxNzIsNyArMTQ4MjcsNyBAQCBTSEFSRURfTERGTEFHUz0KKyBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSAieWVzIjsgdGhlbgorICAgeD1gc2VkIC1uIC1lICdzL15bIAldKlBJQ0ZMQUdbIAldKj1bIAldKi8vcCcgPCAuLi9saWJpYmVydHkvTWFrZWZpbGUgfCBzZWQgLW4gJyRwJ2AKKyAgIGlmIHRlc3QgLW4gIiR4IjsgdGhlbgorLSAgICBTSEFSRURfTElCQUREPSItTGBwd2RgLy4uL2xpYmliZXJ0eS9waWMgLWxpYmVydHkiCisrICAgIFNIQVJFRF9MSUJBREQ9ImBwd2RgLy4uL2xpYmliZXJ0eS9waWMvbGliaWJlcnR5LmEiCisgICBmaQorIAorICMgTW9yZSBoYWNrcyB0byBidWlsZCBETExzIG9uIFdpbmRvd3MuCitAQCAtMTY4NzksMTMgKzE3NTM0LDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b190b29sX2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2ZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyt3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J2AkRUNITyAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSdgJEVDSE8gIiRhcmNoaXZlcl9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTY5MDAsMTQgKzE3NTYyLDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfc3lzcm9vdD0nYCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE1BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK01BTklGRVNUX1RPT0w9J2AkRUNITyAiJE1BTklGRVNUX1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIERTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIExJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE2OTQwLDEyICsxNzYwNSwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcQorIGhhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maXhfc3JjZmlsZV9wYXRoPSdgJEVDSE8gIiRmaXhfc3JjZmlsZV9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBwcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGxpbmtfY21kcz0nYCRFQ0hPICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNzAwMCw4ICsxNzY2NSwxMyBAQCByZWxvYWRfZmxhZyBcCisgT0JKRFVNUCBcCisgZGVwbGlic19jaGVja19tZXRob2QgXAorIGZpbGVfbWFnaWNfY21kIFwKKytmaWxlX21hZ2ljX2dsb2IgXAorK3dhbnRfbm9jYXNlZ2xvYiBcCisrRExMVE9PTCBcCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgXAorIEFSIFwKKyBBUl9GTEFHUyBcCisrYXJjaGl2ZXJfbGlzdF9zcGVjIFwKKyBTVFJJUCBcCisgUkFOTElCIFwKKyBDQyBcCitAQCAtMTcwMTEsMTIgKzE3NjgxLDE0IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCisrbm1fZmlsZV9saXN0X3NwZWMgXAorIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKKy1sdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCisrbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIFwKKyBuZWVkX2xvY2tzIFwKKytNQU5JRkVTVF9UT09MIFwKKyBEU1lNVVRJTCBcCisgTk1FRElUIFwKKyBMSVBPIFwKK0BAIC0xNzAzMiw3ICsxNzcwNCw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKKyBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKKy1maXhfc3JjZmlsZV9wYXRoIFwKKyBleGNsdWRlX2V4cHN5bXMgXAorIGluY2x1ZGVfZXhwc3ltcyBcCisgZmlsZV9saXN0X3NwZWMgXAorQEAgLTE3MDY4LDYgKzE3NzM5LDcgQEAgbW9kdWxlX2NtZHMgXAorIG1vZHVsZV9leHBzeW1fY21kcyBcCisgZXhwb3J0X3N5bWJvbHNfY21kcyBcCisgcHJlbGlua19jbWRzIFwKKytwb3N0bGlua19jbWRzIFwKKyBwb3N0aW5zdGFsbF9jbWRzIFwKKyBwb3N0dW5pbnN0YWxsX2NtZHMgXAorIGZpbmlzaF9jbWRzIFwKK0BAIC0xNzg0Nyw3ICsxODUxOSw4IEBAICRhc19lY2hvIFgiJGZpbGUiIHwKKyAjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKyAjCisgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKy0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyMgICAgICAgICAgICAgICAgIEluYy4KKyAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorICMKKyAjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCitAQCAtMTc5NTAsMTkgKzE4NjIzLDQyIEBAIFNQMk5MPSRsdF9sdF9TUDJOTAorICMgdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlcy4KKyBOTDJTUD0kbHRfbHRfTkwyU1AKKyAKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlIG5hbWVzIHRvIFwkaG9zdCBmb3JtYXQuCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorKworKyMgY29udmVydCBcJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorKworICMgQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXIuCisgT0JKRFVNUD0kbHRfT0JKRFVNUAorIAorICMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgCistIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIi4KKysjIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisgZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisgCisrIyBIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKytmaWxlX21hZ2ljX2dsb2I9JGx0X2ZpbGVfbWFnaWNfZ2xvYgorKworKyMgRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK3dhbnRfbm9jYXNlZ2xvYj0kbHRfd2FudF9ub2Nhc2VnbG9iCisrCisrIyBETEwgY3JlYXRpb24gcHJvZ3JhbS4KKytETExUT09MPSRsdF9ETExUT09MCisrCisrIyBDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzLgorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorKworICMgVGhlIGFyY2hpdmVyLgorIEFSPSRsdF9BUgorKworKyMgRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmUuCisgQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisgCisrIyBIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXIuCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9hcmNoaXZlcl9saXN0X3NwZWMKKysKKyAjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgorIFNUUklQPSRsdF9TVFJJUAorIAorQEAgLTE3OTkyLDYgKzE4Njg4LDEyIEBAIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisgIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KKyBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKKyAKKysjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgXCROTS4KKytubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKKysKKysjIFRoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyxhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorK2x0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKKysKKyAjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KKyBvYmpkaXI9JG9iamRpcgorIAorQEAgLTE4MDAxLDYgKzE4NzAzLDkgQEAgTUFHSUNfQ01EPSRNQUdJQ19DTUQKKyAjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworIG5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKKyAKKysjIE1hbmlmZXN0IHRvb2wuCisrTUFOSUZFU1RfVE9PTD0kbHRfTUFOSUZFU1RfVE9PTAorKworICMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KKyBEU1lNVVRJTD0kbHRfRFNZTVVUSUwKKyAKK0BAIC0xODExNSwxMiArMTg4MjAsMTIgQEAgd2l0aF9nY2M9JEdDQworICMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KKyBub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCisgCistIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCistCisgIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCisgcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCisgCisrIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCisrCisgIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorIGxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCisgCitAQCAtMTgyMDcsOSArMTg5MTIsNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCisgIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCisgbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicworIAorLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KKy1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCistCisgIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKyAKK0BAIC0xODIyNSw2ICsxODkyNyw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisgIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KKyBwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworIAorKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KKytwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzCisrCisgIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCisgZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCisgCitAQCAtMTgyNTcsMjEwICsxODk2MiwxNjkgQEAgbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisgICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKy0gIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBjYXNlICR4c2lfc2hlbGwgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorLSMgY2FsbDoKKy0jICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorLSMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorLSMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorLSMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLSMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorLSMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKy0jIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KKy1mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorLSAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifQorLX0KKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9JHsxJSU9Kn0KKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz0kezEjKj19CistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworLSAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sbworLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKQorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKy0gIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKy0gIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCistICBlbHNlCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKy0gIGZpCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkYmFzZW5hbWUiYAorLX0KKy0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgY2FzZSAkezJ9IGluCistICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CistICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKy0gIGVzYWMKKy19CistCistIyBzZWQgc2NyaXB0czoKKy1teV9zZWRfbG9uZ19vcHQ9JzFzL15cKC1bXj1dKlwpPS4qL1wxLztxJworLW15X3NlZF9sb25nX2FyZz0nMXMvXi1bXj1dKj0vLycKKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAorLSAgZnVuY19vcHRfc3BsaXRfYXJnPWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAorLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLlteLl0qJC8ubG8vJ2AKKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJEAiYAorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKKy19CistCistX0xUX0VPRgorLWVzYWMKKy0KKy1jYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDErPVwkMiIKKy19CistX0xUX0VPRgorLSAgICA7OworLSAgKikKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDE9XCQkMVwkMiIKKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgZXNhYworLQorLQorLSAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKysKKysgIGlmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWUgL2NcCisrZnVuY19kaXJuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfYmFzZW5hbWUgL2NcCisrZnVuY19iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIC9jXAorK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3RyaXBuYW1lICgpJC8sL159ICMgZnVuY19zdHJpcG5hbWUgL2NcCisrZnVuY19zdHJpcG5hbWUgKClcCisre1wKKytcICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmVcCisrXCAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuXAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M31cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3N0cmlwbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfbG9uZ19vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IC9jXAorK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfVwKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfbG9uZ19vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X3Nob3J0X29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IC9jXAorK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fVwKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sbzJvICgpJC8sL159ICMgZnVuY19sbzJvIC9jXAorK2Z1bmNfbG8ybyAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7O1wKKytcICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sbzJvIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY194Zm9ybSAoKSQvLC9efSAjIGZ1bmNfeGZvcm0gL2NcCisrZnVuY194Zm9ybSAoKVwKKyt7XAorKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3hmb3JtIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcml0aCAoKSQvLC9efSAjIGZ1bmNfYXJpdGggL2NcCisrZnVuY19hcml0aCAoKVwKKyt7XAorKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSlcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXJpdGggaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xlbiAoKSQvLC9efSAjIGZ1bmNfbGVuIC9jXAorK2Z1bmNfbGVuICgpXAorK3tcCisrICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sZW4gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKytmaQorKworK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kIC9jXAorK2Z1bmNfYXBwZW5kICgpXAorK3tcCisrICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmRfcXVvdGVkICgpJC8sL159ICMgZnVuY19hcHBlbmRfcXVvdGVkIC9jXAorK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKVwKKyt7XAorK1wgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSJcCisrXCAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmRfcXVvdGVkIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZWxzZQorKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2ZpCisrCisraWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiYyO30KKytmaQorKworKworKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgIGNobW9kICt4ICIkb2ZpbGUiCisgCitkaWZmIC0tZ2l0IGEvYmZkL2NvbmZpZ3VyZS5hYyBiL2JmZC9jb25maWd1cmUuYWMKK2luZGV4IDhmZDAzYTdlYTguLjg4MTZjMzI4NmMgMTAwNjQ0CistLS0gYS9iZmQvY29uZmlndXJlLmFjCisrKysgYi9iZmQvY29uZmlndXJlLmFjCitAQCAtMjU0LDcgKzI1NCw3IEBAIGNoYW5nZXF1b3RlKCwpZG5sCisgICB4PWBzZWQgLW4gLWUgJ3MvXlsgCV0qUElDRkxBR1sgCV0qPVsgCV0qLy9wJyA8IC4uL2xpYmliZXJ0eS9NYWtlZmlsZSB8IHNlZCAtbiAnJHAnYAorIGNoYW5nZXF1b3RlKFssXSlkbmwKKyAgIGlmIHRlc3QgLW4gIiR4IjsgdGhlbgorLSAgICBTSEFSRURfTElCQUREPSItTGBwd2RgLy4uL2xpYmliZXJ0eS9waWMgLWxpYmVydHkiCisrICAgIFNIQVJFRF9MSUJBREQ9ImBwd2RgLy4uL2xpYmliZXJ0eS9waWMvbGliaWJlcnR5LmEiCisgICBmaQorIAorICMgTW9yZSBoYWNrcyB0byBidWlsZCBETExzIG9uIFdpbmRvd3MuCitkaWZmIC0tZ2l0IGEvYmludXRpbHMvY29uZmlndXJlIGIvYmludXRpbHMvY29uZmlndXJlCitpbmRleCAyMmUxYjE3MzZlLi4zMjFiNjM1MzViIDEwMDc1NQorLS0tIGEvYmludXRpbHMvY29uZmlndXJlCisrKysgYi9iaW51dGlscy9jb25maWd1cmUKK0BAIC02NTksOCArNjU5LDExIEBAIE9UT09MCisgTElQTworIE5NRURJVAorIERTWU1VVElMCisrTUFOSUZFU1RfVE9PTAorIFJBTkxJQgorK2FjX2N0X0FSCisgQVIKKytETExUT09MCisgT0JKRFVNUAorIExOX1MKKyBOTQorQEAgLTc3Miw2ICs3NzUsNyBAQCBlbmFibGVfc3RhdGljCisgd2l0aF9waWMKKyBlbmFibGVfZmFzdF9pbnN0YWxsCisgd2l0aF9nbnVfbGQKKyt3aXRoX2xpYnRvb2xfc3lzcm9vdAorIGVuYWJsZV9saWJ0b29sX2xvY2sKKyBlbmFibGVfcGx1Z2lucworIGVuYWJsZV9sYXJnZWZpbGUKK0BAIC0xNDQ0LDYgKzE0NDgsOCBAQCBPcHRpb25hbCBQYWNrYWdlczoKKyAgIC0td2l0aC1waWMgICAgICAgICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KKyAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKysgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisrICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuCisgICAtLXdpdGgtc3lzdGVtLXpsaWIgICAgICB1c2UgaW5zdGFsbGVkIGxpYnoKKyAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBkZWZhdWx0PW5vCisgICAtLXdpdGgtbGliaWNvbnYtcHJlZml4Wz1ESVJdICBzZWFyY2ggZm9yIGxpYmljb252IGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCitAQCAtNTE2MCw4ICs1MTY2LDggQEAgZXNhYworIAorIAorIAorLW1hY3JvX3ZlcnNpb249JzIuMi43YScKKy1tYWNyb19yZXZpc2lvbj0nMS4zMTM0JworK21hY3JvX3ZlcnNpb249JzIuNCcKKyttYWNyb19yZXZpc2lvbj0nMS4zMjkzJworIAorIAorIAorQEAgLTUyMDEsNyArNTIwNyw3IEBAIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MuLi4gIiA+JjY7IH0KKyAjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KKy1pZiB0ZXN0ICJYYHByaW50IC1yIC0tIC1uIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgICBFQ0hPPSdwcmludCAtciAtLScKKyBlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorQEAgLTU4ODcsOCArNTg5Myw4IEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7CisgIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKKyB4c2lfc2hlbGw9bm8KKyAoIF9sdF9kdW1teT0iYS9iL2MiCistICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwiJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorLSAgICAgID0gYyxhL2IsLCBcCisrICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorKyAgICAgID0gYyxhL2IsYi9jLCBcCisgICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICYmIHhzaV9zaGVsbD15ZXMKK0BAIC01OTM3LDYgKzU5NDMsODAgQEAgZXNhYworIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICotKi1jeWd3aW4qICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisrICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b190b29sX2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgorK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorK2Nhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTU5NTMsNiArNjAzMywxMSBAQCBjYXNlICRyZWxvYWRfZmxhZyBpbgorIGVzYWMKKyByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgY2FzZSAkaG9zdF9vcyBpbgorKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKysgICAgICByZWxvYWRfY21kcz1mYWxzZQorKyAgICBmaQorKyAgICA7OworICAgZGFyd2luKikKKyAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitAQCAtNjEyMSw3ICs2MjA2LDggQEAgbWluZ3cqIHwgcHczMiopCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICAgZWxzZQorLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKKysgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgIGZpCisgICA7OworQEAgLTYyNzUsNiArNjM2MSwyMSBAQCBlc2FjCisgZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKKyAkYXNfZWNobyAiJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KKysKKytmaWxlX21hZ2ljX2dsb2I9Cisrd2FudF9ub2Nhc2VnbG9iPW5vCisraWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKysgIGNhc2UgJGhvc3Rfb3MgaW4KKysgIG1pbmd3KiB8IHB3MzIqKQorKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcworKyAgICBlbHNlCisrICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bXDFdXC9bXDFdXC9nOy9nImAKKysgICAgZmkKKysgICAgOzsKKysgIGVzYWMKKytmaQorKworIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAorIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorQEAgLTYyOTAsOSArNjM5MSwxNjIgQEAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisgCisgCisgCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK0RMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKKyskYXNfZWNobyAiJERMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N0X0RMTFRPT0w9JERMTFRPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iJGFjX2N0X0RMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9ETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCisrICAgIERMTFRPT0w9ImZhbHNlIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAorKyAgZmkKKytlbHNlCisrICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgorK2ZpCisrCisrdGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorKworKworKworKworKworKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKysKKytjYXNlICRob3N0X29zIGluCisrY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAorKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisrICAqLS1pZGVudGlmeS1zdHJpY3QqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKKysgICAgOzsKKysgICopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjaworKyAgICA7OworKyAgZXNhYworKyAgOzsKKysqKQorKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCisrICA7OworK2VzYWMKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNjsgfQorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKysKKysKKysKKysKKysKKysKKysKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCisrICBmb3IgYWNfcHJvZyBpbiBhcgorKyAgZG8KKysgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjMwOCw3ICs2NTYyLDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX0FSPSIke2FjX3Rvb2xfcHJlZml4fWFyIgorKyAgICBhY19jdl9wcm9nX0FSPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNjMyOCwxMSArNjU4MiwxNSBAQCAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisgCisrICAgIHRlc3QgLW4gIiRBUiIgJiYgYnJlYWsKKysgIGRvbmUKKyBmaQorLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FSIjsgdGhlbgorK2lmIHRlc3QgLXogIiRBUiI7IHRoZW4KKyAgIGFjX2N0X0FSPSRBUgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCisrICBmb3IgYWNfcHJvZyBpbiBhcgorK2RvCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02MzQ4LDcgKzY2MDYsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNjM2Nyw2ICs2NjI1LDEwIEBAIGVsc2UKKyAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisrCisrICB0ZXN0IC1uICIkYWNfY3RfQVIiICYmIGJyZWFrCisrZG9uZQorKworICAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCisgICAgIEFSPSJmYWxzZSIKKyAgIGVsc2UKK0BAIC02Mzc4LDEyICs2NjQwLDEwIEBAIGFjX3Rvb2xfd2FybmVkPXllcyA7OworIGVzYWMKKyAgICAgQVI9JGFjX2N0X0FSCisgICBmaQorLWVsc2UKKy0gIEFSPSIkYWNfY3ZfcHJvZ19BUiIKKyBmaQorIAorLXRlc3QgLXogIiRBUiIgJiYgQVI9YXIKKy10ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorKzogJHtBUj1hcn0KKys6ICR7QVJfRkxBR1M9Y3J1fQorIAorIAorIAorQEAgLTYzOTUsNiArNjY1NSw2NCBAQCB0ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9hcl9hdF9maWxlK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfYXJfYXRfZmlsZT1ubworKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKKysgICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mNScKKysgICAgICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKysJeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisrICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQorKworK2ZpCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyX2F0X2ZpbGUiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfYXJfYXRfZmlsZSIgPiY2OyB9CisrCisraWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQorK2Vsc2UKKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQorK2ZpCisrCisrCisrCisrCisrCisrCisrCisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgorQEAgLTY3MjksOCArNzA0Nyw4IEBAIGVzYWMKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorIAorICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKyAKKyAjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KKyBvcHRfY3I9CitAQCAtNjc2Niw2ICs3MDg0LDcgQEAgZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworICAgZWxzZQorICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICAgZmkKKysgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKyAKKyAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICAgcGlwZV93b3Jrcz1ubworQEAgLTY4MDcsNiArNzEyNiwxOCBAQCBfTFRfRU9GCisgICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKysvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKysjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKysvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbHNlCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKysjZW5kaWYKKysKKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyAjZW5kaWYKK0BAIC02ODE4LDcgKzcxNDksNyBAQCBfTFRfRU9GCisgCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgCisgLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworLWNvbnN0IHN0cnVjdCB7CisrTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICB2b2lkICAgICAgICphZGRyZXNzOworIH0KK0BAIC02ODQ0LDggKzcxNzUsOCBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworIF9MVF9FT0YKKyAJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorLQkgIGx0X3NhdmVfTElCUz0iJExJQlMiCistCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKysJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorIAkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKKyAJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKK0BAIC02ODU1LDggKzcxODYsOCBAQCBfTFRfRU9GCisgICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAJICAgIHBpcGVfd29ya3M9eWVzCisgCSAgZmkKKy0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisrCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisgCWVsc2UKKyAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKKyAJZmkKK0BAIC02ODkzLDYgKzcyMjQsMjEgQEAgZWxzZQorICRhc19lY2hvICJvayIgPiY2OyB9CisgZmkKKyAKKysjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KKytpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZmkKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyAKKyAKKyAKK0BAIC02OTA4LDYgKzcyNTQsNDAgQEAgZmkKKyAKKyAKKyAKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzcm9vdC4uLiAiID4mNjsgfQorKworKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlidG9vbC1zeXNyb290IHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke3dpdGhfbGlidG9vbF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuIDoKKysgIHdpdGh2YWw9JHdpdGhfbGlidG9vbF9zeXNyb290OworK2Vsc2UKKysgIHdpdGhfbGlidG9vbF9zeXNyb290PW5vCisrZmkKKysKKysKKytsdF9zeXNyb290PQorK2Nhc2UgJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0gaW4gIygKKysgeWVzKQorKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorKyAgIGZpCisrICAgOzsgIygKKysgLyopCisrICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrICAgOzsgIygKKysgbm98JycpCisrICAgOzsgIygKKysgKikKKysgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNQorKyRhc19lY2hvICIke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY2OyB9CisrICAgYXNfZm5fZXJyb3IgIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1CisrICAgOzsKKytlc2FjCisrCisrIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke2x0X3N5c3Jvb3Q6LW5vfSIgPiY1CisrJGFzX2VjaG8gIiR7bHRfc3lzcm9vdDotbm99IiA+JjY7IH0KKyAKKyAKKyAKK0BAIC03MTIwLDYgKzc1MDAsMTIzIEBAIGVzYWMKKyAKKyBuZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKyAKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiRNQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJHthY190b29sX3ByZWZpeH1tdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3RfTUFOSUZFU1RfVE9PTD0kTUFOSUZFU1RfVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IG10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9IiRhY19jdF9NQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0ibXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9NQU5JRkVTVF9UT09MIiA9IHg7IHRoZW4KKysgICAgTUFOSUZFU1RfVE9PTD0iOiIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIE1BTklGRVNUX1RPT0w9JGFjX2N0X01BTklGRVNUX1RPT0wKKysgIGZpCisrZWxzZQorKyAgTUFOSUZFU1RfVE9PTD0iJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9tYWluZmVzdF90b29sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiY1CisrICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0CisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisrICBmaQorKyAgcm0gLWYgY29uZnRlc3QqCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNjsgfQorK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCisrICBNQU5JRkVTVF9UT09MPToKKytmaQorKworKworKworKworKworIAorICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICByaGFwc29keSogfCBkYXJ3aW4qKQorQEAgLTc2ODMsNiArODE4MCw4IEBAIF9MVF9FT0YKKyAgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKKyAgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CisgICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQorKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiY1CisrICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JjUKKyAgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKKyBpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorIF9MVF9FT0YKK0BAIC03ODc4LDcgKzgzNzcsOCBAQCBmaQorIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKKyAKKyAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKScKKytMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCisgCisgCisgCitAQCAtNzk2Nyw3ICs4NDY3LDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKK0BAIC04MjY1LDggKzg3NjUsNiBAQCBmaQorIGx0X3Byb2dfY29tcGlsZXJfcGljPQorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorIAorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCisgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworQEAgLTg0MzIsNiArODkzMCwxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisgCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKKyAJOzsKKysgICAgICBuYWdmb3IqKQorKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisrCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKKysJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisrCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKysJOzsKKyAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorQEAgLTg0OTQsNyArODk5OCw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKysgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgICopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKK0BAIC04NTUxLDEzICs5MDU1LDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICAgOzsKKyBlc2FjCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CistJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CistCistCistCistCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKytsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKKyAKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorQEAgLTg2MTgsNiArOTEyNiwxMSBAQCBmaQorIAorIAorIAorKworKworKworKworKworICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisgIworQEAgLTg5NjgsNyArOTQ4MSw4IEBAIF9MVF9FT0YKKyAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCistICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKyAKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworQEAgLTkwNjcsMTIgKzk1ODEsMTIgQEAgX0xUX0VPRgorIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nLXJwYXRoICRsaWJkaXInCistCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisrCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworIAkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CistCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgCSAgZmkKKyAJICA7OworIAllc2FjCitAQCAtOTA4Niw4ICs5NjAwLDggQEAgX0xUX0VPRgorIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisgCXdsYXJjPQorICAgICAgIGVsc2UKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZmkKKyAgICAgICA7OworIAorQEAgLTkxMDUsOCArOTYxOSw4IEBAIF9MVF9FT0YKKyAKKyBfTFRfRU9GCisgICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC05MTUyLDggKzk2NjYsOCBAQCBfTFRfRU9GCisgCisgICAgICopCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtOTI4Myw3ICs5Nzk3LDEzIEBAIF9MVF9FT0YKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKKyAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKyAgICAgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTkyOTYsMjIgKzk4MTYsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorQEAgLTkzMjMsNyArOTg1MCwxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJZWxzZQorIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgCSAjIGVtcHR5IGV4ZWN1dGFibGUuCistCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTMzNiwyMiArOTg2OSwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorQEAgLTkzOTYsMjAgKzk5MzYsNjMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKy0gICAgICBsaWJleHQ9bGliCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCistICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCistICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCistICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKy0gICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCistICAgICAgb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworLSAgICAgIGZpeF9zcmNmaWxlX3BhdGg9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgICBjbCopCisrCSMgTmF0aXZlIE1TVkMKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworKwlmaWxlX2xpc3Rfc3BlYz0nQCcKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKysJICAgIHNlZCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZWxzZQorKwkgICAgc2VkIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBmaX4KKysJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisrCSAgbGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgKT0ndHJ1ZScKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKwkjIERvbid0IHVzZSByYW5saWIKKysJb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworKwlwb3N0bGlua19jbWRzPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKysJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICopCisrCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgOzsKKysJICBlc2FjfgorKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisrCSAgZmknCisrCTs7CisrICAgICAgKikKKysJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisrCW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCisrCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisrCW9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJOzsKKysgICAgICBlc2FjCisgICAgICAgOzsKKyAKKyAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKK0BAIC05NDcwLDcgKzEwMDUzLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCitAQCAtOTQ3OCw3ICsxMDA2MSw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4OSopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBmaQorQEAgLTk0OTQsNyArMTAwNzcsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDEwKikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgIGZpCitAQCAtOTUxOCwxMCArMTAxMDEsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAlpYTY0KikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCSopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJZXNhYworICAgICAgIGVsc2UKK0BAIC05NjAwLDIzICsxMDE4MywzNiBAQCBmaQorIAorICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorIAkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCisgCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCistICAgICAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorLSAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgorKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKysJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorKwkgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLWludCBmb28odm9pZCkge30KKytpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9CisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorLSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworLQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzCisrZWxzZQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm8KKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKysgICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjY7IH0KKysJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgorKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlmaQorICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCitAQCAtOTcwMSw3ICsxMDI5Nyw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICBlbHNlCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworQEAgLTk3MjAsOSArMTAzMTYsOSBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJd2xhcmM9JyR7d2x9JworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkgICRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisrCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgZWxzZQorIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKyAJKiJDb21waWxlcnMgNS4wIiopCitAQCAtMTAyOTgsOCArMTA4OTQsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICBuZWVkX3ZlcnNpb249bm8KKyAgIG5lZWRfbGliX3ByZWZpeD1ubworIAorLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCistICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQorKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorKyAgeWVzLCopCisrICAgICMgZ2NjCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CitAQCAtMTAzMzIsMTMgKzEwOTI5LDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICAgOzsKKyAgICAgZXNhYworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworKyAgICA7OworKworKyAgKixjbCopCisrICAgICMgTmF0aXZlIE1TVkMKKysgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKysgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKysKKysgICAgY2FzZSAkYnVpbGRfb3MgaW4KKysgICAgbWluZ3cqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKysgICAgICBsdF9zYXZlX2lmcz0kSUZTCisrICAgICAgSUZTPSc7JworKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKysgICAgICBkbworKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKysgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorKyAgICAgIGRvbmUKKysgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisrICAgICAgOzsKKysgICAgY3lnd2luKikKKysgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisrICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisrICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIDs7CisrICAgICopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisrICAgICAgZWxzZQorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIGZpCisrICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisrICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKysgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKysgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKysgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisrICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKysgICAgICAgJFJNIFwkZGxwYXRoJworKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICAgOzsKKyAKKyAgICopCisrICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgIHNobGlicGF0aF92YXI9UEFUSAorICAgOzsKK0BAIC0xMDQzMCw3ICsxMTA4NSw3IEBAIGhhaWt1KikKKyAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L2Jlb3Mvc3lzdGVtL2xpYicKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgOzsKKyAKK0BAIC0xMTI3MCwxMCArMTE5MjUsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xMTM3NiwxMCArMTIwMzEsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xNTQ0NiwxMyArMTYxMDEsMjAgQEAgZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Vuc2V0PSdgJEVDSE8gIiRsdF91bnNldCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9OTDJTUD0nYCRFQ0hPICIkbHRfTkwyU1AiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9mbGFnPSdgJEVDSE8gIiRyZWxvYWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2NtZHM9J2AkRUNITyAiJHJlbG9hZF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBPQkpEVU1QPSdgJEVDSE8gIiRPQkpEVU1QIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0nYCRFQ0hPICIkZGVwbGlic19jaGVja19tZXRob2QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbWFnaWNfY21kPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrZmlsZV9tYWdpY19nbG9iPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2dsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3dhbnRfbm9jYXNlZ2xvYj0nYCRFQ0hPICIkd2FudF9ub2Nhc2VnbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytETExUT09MPSdgJEVDSE8gIiRETExUT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0nYCRFQ0hPICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSPSdgJEVDSE8gIiRBUiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVJfRkxBR1M9J2AkRUNITyAiJEFSX0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKythcmNoaXZlcl9saXN0X3NwZWM9J2AkRUNITyAiJGFyY2hpdmVyX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgU1RSSVA9J2AkRUNITyAiJFNUUklQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBSQU5MSUI9J2AkRUNITyAiJFJBTkxJQiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNTQ2NywxNCArMTYxMjksMTcgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGUKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbm1fZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJG5tX2ZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9zeXNyb290PSdgJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvYmpkaXI9J2AkRUNITyAiJG9iamRpciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTUFHSUNfQ01EPSdgJEVDSE8gIiRNQUdJQ19DTUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9waWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9sb2Nrcz0nYCRFQ0hPICIkbmVlZF9sb2NrcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrTUFOSUZFU1RfVE9PTD0nYCRFQ0hPICIkTUFOSUZFU1RfVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgRFNZTVVUSUw9J2AkRUNITyAiJERTWU1VVElMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBOTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTElQTz0nYCRFQ0hPICIkTElQTyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTU1MDcsMTIgKzE2MTcyLDEyIEBAIGhhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xCisgaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluaGVyaXRfcnBhdGg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGxpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWZpeF9zcmNmaWxlX3BhdGg9J2AkRUNITyAiJGZpeF9zcmNmaWxlX3BhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGFsd2F5c19leHBvcnRfc3ltYm9scz0nYCRFQ0hPICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleHBvcnRfc3ltYm9sc19jbWRzPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5jbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHByZWxpbmtfY21kcz0nYCRFQ0hPICIkcHJlbGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytwb3N0bGlua19jbWRzPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSdgJEVDSE8gIiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE1NTY3LDggKzE2MjMyLDEzIEBAIHJlbG9hZF9mbGFnIFwKKyBPQkpEVU1QIFwKKyBkZXBsaWJzX2NoZWNrX21ldGhvZCBcCisgZmlsZV9tYWdpY19jbWQgXAorK2ZpbGVfbWFnaWNfZ2xvYiBcCisrd2FudF9ub2Nhc2VnbG9iIFwKKytETExUT09MIFwKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCBcCisgQVIgXAorIEFSX0ZMQUdTIFwKKythcmNoaXZlcl9saXN0X3NwZWMgXAorIFNUUklQIFwKKyBSQU5MSUIgXAorIENDIFwKK0BAIC0xNTU3OCwxMiArMTYyNDgsMTQgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKKytubV9maWxlX2xpc3Rfc3BlYyBcCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgXAorLWx0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfcGljIFwKKytsdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyBcCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorIG5lZWRfbG9ja3MgXAorK01BTklGRVNUX1RPT0wgXAorIERTWU1VVElMIFwKKyBOTUVESVQgXAorIExJUE8gXAorQEAgLTE1NTk5LDcgKzE2MjcxLDYgQEAgbm9fdW5kZWZpbmVkX2ZsYWcgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAorIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorLWZpeF9zcmNmaWxlX3BhdGggXAorIGV4Y2x1ZGVfZXhwc3ltcyBcCisgaW5jbHVkZV9leHBzeW1zIFwKKyBmaWxlX2xpc3Rfc3BlYyBcCitAQCAtMTU2MzUsNiArMTYzMDYsNyBAQCBtb2R1bGVfY21kcyBcCisgbW9kdWxlX2V4cHN5bV9jbWRzIFwKKyBleHBvcnRfc3ltYm9sc19jbWRzIFwKKyBwcmVsaW5rX2NtZHMgXAorK3Bvc3RsaW5rX2NtZHMgXAorIHBvc3RpbnN0YWxsX2NtZHMgXAorIHBvc3R1bmluc3RhbGxfY21kcyBcCisgZmluaXNoX2NtZHMgXAorQEAgLTE2MzkyLDcgKzE3MDY0LDggQEAgJGFzX2VjaG8gWCIkZmlsZSIgfAorICMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorICMKKyAjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorLSMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrIyAgICAgICAgICAgICAgICAgSW5jLgorICMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisgIworICMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KK0BAIC0xNjQ5NSwxOSArMTcxNjgsNDIgQEAgU1AyTkw9JGx0X2x0X1NQMk5MCisgIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgorIE5MMlNQPSRsdF9sdF9OTDJTUAorIAorKyMgY29udmVydCBcJGJ1aWxkIGZpbGUgbmFtZXMgdG8gXCRob3N0IGZvcm1hdC4KKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisrCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4KKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisrCisgIyBBbiBvYmplY3Qgc3ltYm9sIGR1bXBlci4KKyBPQkpEVU1QPSRsdF9PQkpEVU1QCisgCisgIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKyAKKy0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gImZpbGVfbWFnaWMiLgorKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyBmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKyAKKysjIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK2ZpbGVfbWFnaWNfZ2xvYj0kbHRfZmlsZV9tYWdpY19nbG9iCisrCisrIyBGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrd2FudF9ub2Nhc2VnbG9iPSRsdF93YW50X25vY2FzZWdsb2IKKysKKysjIERMTCBjcmVhdGlvbiBwcm9ncmFtLgorK0RMTFRPT0w9JGx0X0RMTFRPT0wKKysKKysjIENvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXMuCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrCisgIyBUaGUgYXJjaGl2ZXIuCisgQVI9JGx0X0FSCisrCisrIyBGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZS4KKyBBUl9GTEFHUz0kbHRfQVJfRkxBR1MKKyAKKysjIEhvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KKythcmNoaXZlcl9saXN0X3NwZWM9JGx0X2FyY2hpdmVyX2xpc3Rfc3BlYworKworICMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCisgU1RSSVA9JGx0X1NUUklQCisgCitAQCAtMTY1MzcsNiArMTcyMzMsMTIgQEAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKKyAjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgorIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeAorIAorKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciBcJE5NLgorK25tX2ZpbGVfbGlzdF9zcGVjPSRsdF9ubV9maWxlX2xpc3Rfc3BlYworKworKyMgVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzLGFuZCBpbiB3aGljaCBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuCisrbHRfc3lzcm9vdD0kbHRfc3lzcm9vdAorKworICMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgorIG9iamRpcj0kb2JqZGlyCisgCitAQCAtMTY1NDYsNiArMTcyNDgsOSBAQCBNQUdJQ19DTUQ9JE1BR0lDX0NNRAorICMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CisgbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworIAorKyMgTWFuaWZlc3QgdG9vbC4KKytNQU5JRkVTVF9UT09MPSRsdF9NQU5JRkVTVF9UT09MCisrCisgIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgorIERTWU1VVElMPSRsdF9EU1lNVVRJTAorIAorQEAgLTE2NjYwLDEyICsxNzM2NSwxMiBAQCB3aXRoX2djYz0kR0NDCisgIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorIG5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKKyAKKy0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCistd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKy0KKyAjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KKyBwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKKyAKKysjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCisrd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKysKKyAjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCisgbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKKyAKK0BAIC0xNjc1Miw5ICsxNzQ1Nyw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKKyAjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KKyBsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCisgCistIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKKy0KKyAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scworIAorQEAgLTE2NzcwLDYgKzE3NDcyLDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKKyAjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorIHByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCisgCisrIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHMKKysKKyAjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KKyBmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWMKKyAKK0BAIC0xNjgwMiwyMTAgKzE3NTA3LDE2OSBAQCBsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKyAgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworLSAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIGNhc2UgJHhzaV9zaGVsbCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCistIyBjYWxsOgorLSMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCistIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CistIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCistIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCistIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworLSMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCistICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9CistfQorLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorLSAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CistICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PSR7IzF9CistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorLSAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAorLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKy0gIGVsc2UKKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorLSAgZmkKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCistfQorLQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy0jIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICBjYXNlICR7Mn0gaW4KKy0gICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKy0gICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworLSAgZXNhYworLX0KKy0KKy0jIHNlZCBzY3JpcHRzOgorLW15X3NlZF9sb25nX29wdD0nMXMvXlwoLVtePV0qXCk9LiovXDEvO3EnCistbXlfc2VkX2xvbmdfYXJnPScxcy9eLVtePV0qPS8vJworLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCistICBmdW5jX29wdF9zcGxpdF9hcmc9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19hcmciYAorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW14uXSokLy5sby8nYAorLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkQCJgCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkMSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorLX0KKy0KKy1fTFRfRU9GCistZXNhYworLQorLWNhc2UgJGx0X3NoZWxsX2FwcGVuZCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMSs9XCQyIgorLX0KKy1fTFRfRU9GCistICAgIDs7CistICAqKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMT1cJCQxXCQyIgorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICBlc2FjCistCistCistICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisrICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisrICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorKworKyAgaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZSAvY1wKKytmdW5jX2Rpcm5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19iYXNlbmFtZSAvY1wKKytmdW5jX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgL2NcCisrZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zdHJpcG5hbWUgKCkkLywvXn0gIyBmdW5jX3N0cmlwbmFtZSAvY1wKKytmdW5jX3N0cmlwbmFtZSAoKVwKKyt7XAorK1wgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZVwKKytcICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC5cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3RyaXBuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9sb25nX29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgL2NcCisrZnVuY19zcGxpdF9sb25nX29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9sb25nX29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgL2NcCisrZnVuY19zcGxpdF9zaG9ydF9vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9zaG9ydF9vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xvMm8gKCkkLywvXn0gIyBmdW5jX2xvMm8gL2NcCisrZnVuY19sbzJvICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7XAorK1wgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xvMm8gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3hmb3JtICgpJC8sL159ICMgZnVuY194Zm9ybSAvY1wKKytmdW5jX3hmb3JtICgpXAorK3tcCisrICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfeGZvcm0gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FyaXRoICgpJC8sL159ICMgZnVuY19hcml0aCAvY1wKKytmdW5jX2FyaXRoICgpXAorK3tcCisrICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcml0aCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbGVuICgpJC8sL159ICMgZnVuY19sZW4gL2NcCisrZnVuY19sZW4gKClcCisre1wKKysgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xlbiBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworK2ZpCisrCisraWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kICgpJC8sL159ICMgZnVuY19hcHBlbmQgL2NcCisrZnVuY19hcHBlbmQgKClcCisre1wKKysgICAgZXZhbCAiJHsxfSs9XFwkezJ9IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZF9xdW90ZWQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZF9xdW90ZWQgL2NcCisrZnVuY19hcHBlbmRfcXVvdGVkICgpXAorK3tcCisrXCAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IlwKKytcICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZF9xdW90ZWQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytlbHNlCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQorKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZmkKKysKKytpZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjI7fQorK2ZpCisrCisrCisrICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICAgY2htb2QgK3ggIiRvZmlsZSIKKyAKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IGQ4YWYxNTVhYjUuLjAwNWVkODI3YWIgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTM4NDQsNyArMzg0NCw3IEBAIGNhc2UgIiR7dGFyZ2V0fSIgaW4KKyAgIG9yMWsqLSotKikKKyAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzIGdkYiIKKyAgICAgOzsKKy0gIHNoKi0qLSogfCBzaDY0LSotKikKKysgIHNoLSotKiB8IHNoNjQtKi0qKQorICAgICBjYXNlICIke3RhcmdldH0iIGluCisgICAgICAgc2gqLSotZWxmKQorICAgICAgICAgIDs7CitkaWZmIC0tZ2l0IGEvZ2FzL2NvbmZpZ3VyZSBiL2dhcy9jb25maWd1cmUKK2luZGV4IDkzYWZiMjBjOGYuLjgxZGQ0Y2JkOTcgMTAwNzU1CistLS0gYS9nYXMvY29uZmlndXJlCisrKysgYi9nYXMvY29uZmlndXJlCitAQCAtNjUwLDggKzY1MCwxMSBAQCBPVE9PTAorIExJUE8KKyBOTUVESVQKKyBEU1lNVVRJTAorK01BTklGRVNUX1RPT0wKKyBSQU5MSUIKKythY19jdF9BUgorIEFSCisrRExMVE9PTAorIE9CSkRVTVAKKyBMTl9TCisgTk0KK0BAIC03NjMsNiArNzY2LDcgQEAgZW5hYmxlX3N0YXRpYworIHdpdGhfcGljCisgZW5hYmxlX2Zhc3RfaW5zdGFsbAorIHdpdGhfZ251X2xkCisrd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBlbmFibGVfbGlidG9vbF9sb2NrCisgZW5hYmxlX3BsdWdpbnMKKyBlbmFibGVfbGFyZ2VmaWxlCitAQCAtNDkyMSw4ICs0OTI1LDggQEAgZXNhYworIAorIAorIAorLW1hY3JvX3ZlcnNpb249JzIuMi43YScKKy1tYWNyb19yZXZpc2lvbj0nMS4zMTM0JworK21hY3JvX3ZlcnNpb249JzIuNCcKKyttYWNyb19yZXZpc2lvbj0nMS4zMjkzJworIAorIAorIAorQEAgLTQ5NjIsNyArNDk2Niw3IEBAIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MuLi4gIiA+JjY7IH0KKyAjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KKy1pZiB0ZXN0ICJYYHByaW50IC1yIC0tIC1uIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgICBFQ0hPPSdwcmludCAtciAtLScKKyBlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorQEAgLTU2NDgsOCArNTY1Miw4IEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7CisgIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKKyB4c2lfc2hlbGw9bm8KKyAoIF9sdF9kdW1teT0iYS9iL2MiCistICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwiJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorLSAgICAgID0gYyxhL2IsLCBcCisrICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorKyAgICAgID0gYyxhL2IsYi9jLCBcCisgICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICYmIHhzaV9zaGVsbD15ZXMKK0BAIC01Njk4LDYgKzU3MDIsODAgQEAgZXNhYworIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICotKi1jeWd3aW4qICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisrICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b190b29sX2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgorK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorK2Nhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTU3MTQsNiArNTc5MiwxMSBAQCBjYXNlICRyZWxvYWRfZmxhZyBpbgorIGVzYWMKKyByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgY2FzZSAkaG9zdF9vcyBpbgorKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKysgICAgICByZWxvYWRfY21kcz1mYWxzZQorKyAgICBmaQorKyAgICA7OworICAgZGFyd2luKikKKyAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitAQCAtNTg4Miw3ICs1OTY1LDggQEAgbWluZ3cqIHwgcHczMiopCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICAgZWxzZQorLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKKysgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgIGZpCisgICA7OworQEAgLTYwMzYsNiArNjEyMCwyMSBAQCBlc2FjCisgZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKKyAkYXNfZWNobyAiJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KKysKKytmaWxlX21hZ2ljX2dsb2I9Cisrd2FudF9ub2Nhc2VnbG9iPW5vCisraWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKysgIGNhc2UgJGhvc3Rfb3MgaW4KKysgIG1pbmd3KiB8IHB3MzIqKQorKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcworKyAgICBlbHNlCisrICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bXDFdXC9bXDFdXC9nOy9nImAKKysgICAgZmkKKysgICAgOzsKKysgIGVzYWMKKytmaQorKworIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAorIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorQEAgLTYwNTEsOSArNjE1MCwxNjIgQEAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisgCisgCisgCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK0RMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKKyskYXNfZWNobyAiJERMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N0X0RMTFRPT0w9JERMTFRPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iJGFjX2N0X0RMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9ETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCisrICAgIERMTFRPT0w9ImZhbHNlIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAorKyAgZmkKKytlbHNlCisrICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgorK2ZpCisrCisrdGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorKworKworKworKworKworKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKysKKytjYXNlICRob3N0X29zIGluCisrY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAorKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisrICAqLS1pZGVudGlmeS1zdHJpY3QqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKKysgICAgOzsKKysgICopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjaworKyAgICA7OworKyAgZXNhYworKyAgOzsKKysqKQorKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCisrICA7OworK2VzYWMKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNjsgfQorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKysKKysKKysKKysKKysKKysKKysKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCisrICBmb3IgYWNfcHJvZyBpbiBhcgorKyAgZG8KKysgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjA2OSw3ICs2MzIxLDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX0FSPSIke2FjX3Rvb2xfcHJlZml4fWFyIgorKyAgICBhY19jdl9wcm9nX0FSPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNjA4OSwxMSArNjM0MSwxNSBAQCAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisgCisrICAgIHRlc3QgLW4gIiRBUiIgJiYgYnJlYWsKKysgIGRvbmUKKyBmaQorLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FSIjsgdGhlbgorK2lmIHRlc3QgLXogIiRBUiI7IHRoZW4KKyAgIGFjX2N0X0FSPSRBUgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCisrICBmb3IgYWNfcHJvZyBpbiBhcgorK2RvCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02MTA5LDcgKzYzNjUsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNjEyOCw2ICs2Mzg0LDEwIEBAIGVsc2UKKyAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisrCisrICB0ZXN0IC1uICIkYWNfY3RfQVIiICYmIGJyZWFrCisrZG9uZQorKworICAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCisgICAgIEFSPSJmYWxzZSIKKyAgIGVsc2UKK0BAIC02MTM5LDEyICs2Mzk5LDEwIEBAIGFjX3Rvb2xfd2FybmVkPXllcyA7OworIGVzYWMKKyAgICAgQVI9JGFjX2N0X0FSCisgICBmaQorLWVsc2UKKy0gIEFSPSIkYWNfY3ZfcHJvZ19BUiIKKyBmaQorIAorLXRlc3QgLXogIiRBUiIgJiYgQVI9YXIKKy10ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorKzogJHtBUj1hcn0KKys6ICR7QVJfRkxBR1M9Y3J1fQorIAorIAorIAorQEAgLTYxNTYsNiArNjQxNCw2NCBAQCB0ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9hcl9hdF9maWxlK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfYXJfYXRfZmlsZT1ubworKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKKysgICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mNScKKysgICAgICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKysJeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisrICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQorKworK2ZpCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyX2F0X2ZpbGUiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfYXJfYXRfZmlsZSIgPiY2OyB9CisrCisraWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQorK2Vsc2UKKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQorK2ZpCisrCisrCisrCisrCisrCisrCisrCisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgorQEAgLTY0OTAsOCArNjgwNiw4IEBAIGVzYWMKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorIAorICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKyAKKyAjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KKyBvcHRfY3I9CitAQCAtNjUyNyw2ICs2ODQzLDcgQEAgZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworICAgZWxzZQorICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICAgZmkKKysgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKyAKKyAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICAgcGlwZV93b3Jrcz1ubworQEAgLTY1NjgsNiArNjg4NSwxOCBAQCBfTFRfRU9GCisgICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKysvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKysjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKysvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbHNlCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKysjZW5kaWYKKysKKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyAjZW5kaWYKK0BAIC02NTc5LDcgKzY5MDgsNyBAQCBfTFRfRU9GCisgCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgCisgLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworLWNvbnN0IHN0cnVjdCB7CisrTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICB2b2lkICAgICAgICphZGRyZXNzOworIH0KK0BAIC02NjA1LDggKzY5MzQsOCBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworIF9MVF9FT0YKKyAJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorLQkgIGx0X3NhdmVfTElCUz0iJExJQlMiCistCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKysJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorIAkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKKyAJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKK0BAIC02NjE2LDggKzY5NDUsOCBAQCBfTFRfRU9GCisgICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAJICAgIHBpcGVfd29ya3M9eWVzCisgCSAgZmkKKy0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisrCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisgCWVsc2UKKyAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKKyAJZmkKK0BAIC02NjU0LDYgKzY5ODMsMjEgQEAgZWxzZQorICRhc19lY2hvICJvayIgPiY2OyB9CisgZmkKKyAKKysjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KKytpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZmkKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyAKKyAKKyAKK0BAIC02NjY5LDYgKzcwMTMsNDAgQEAgZmkKKyAKKyAKKyAKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzcm9vdC4uLiAiID4mNjsgfQorKworKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlidG9vbC1zeXNyb290IHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke3dpdGhfbGlidG9vbF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuIDoKKysgIHdpdGh2YWw9JHdpdGhfbGlidG9vbF9zeXNyb290OworK2Vsc2UKKysgIHdpdGhfbGlidG9vbF9zeXNyb290PW5vCisrZmkKKysKKysKKytsdF9zeXNyb290PQorK2Nhc2UgJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0gaW4gIygKKysgeWVzKQorKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorKyAgIGZpCisrICAgOzsgIygKKysgLyopCisrICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrICAgOzsgIygKKysgbm98JycpCisrICAgOzsgIygKKysgKikKKysgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNQorKyRhc19lY2hvICIke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY2OyB9CisrICAgYXNfZm5fZXJyb3IgIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1CisrICAgOzsKKytlc2FjCisrCisrIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke2x0X3N5c3Jvb3Q6LW5vfSIgPiY1CisrJGFzX2VjaG8gIiR7bHRfc3lzcm9vdDotbm99IiA+JjY7IH0KKyAKKyAKKyAKK0BAIC02ODgxLDYgKzcyNTksMTIzIEBAIGVzYWMKKyAKKyBuZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKyAKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiRNQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJHthY190b29sX3ByZWZpeH1tdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3RfTUFOSUZFU1RfVE9PTD0kTUFOSUZFU1RfVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IG10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9IiRhY19jdF9NQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0ibXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9NQU5JRkVTVF9UT09MIiA9IHg7IHRoZW4KKysgICAgTUFOSUZFU1RfVE9PTD0iOiIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIE1BTklGRVNUX1RPT0w9JGFjX2N0X01BTklGRVNUX1RPT0wKKysgIGZpCisrZWxzZQorKyAgTUFOSUZFU1RfVE9PTD0iJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9tYWluZmVzdF90b29sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiY1CisrICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0CisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisrICBmaQorKyAgcm0gLWYgY29uZnRlc3QqCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNjsgfQorK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCisrICBNQU5JRkVTVF9UT09MPToKKytmaQorKworKworKworKworKworIAorICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICByaGFwc29keSogfCBkYXJ3aW4qKQorQEAgLTc0NDQsNiArNzkzOSw4IEBAIF9MVF9FT0YKKyAgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKKyAgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CisgICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQorKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiY1CisrICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JjUKKyAgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKKyBpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorIF9MVF9FT0YKK0BAIC03NjM5LDcgKzgxMzYsOCBAQCBmaQorIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKKyAKKyAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKScKKytMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCisgCisgCisgCitAQCAtNzcyOCw3ICs4MjI2LDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKK0BAIC04MDI2LDggKzg1MjQsNiBAQCBmaQorIGx0X3Byb2dfY29tcGlsZXJfcGljPQorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorIAorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCisgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworQEAgLTgxOTMsNiArODY4OSwxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisgCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKKyAJOzsKKysgICAgICBuYWdmb3IqKQorKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisrCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKKysJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisrCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKysJOzsKKyAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorQEAgLTgyNTUsNyArODc1Nyw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKysgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgICopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKK0BAIC04MzEyLDEzICs4ODE0LDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICAgOzsKKyBlc2FjCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CistJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CistCistCistCistCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKytsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKKyAKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorQEAgLTgzNzksNiArODg4NSwxMSBAQCBmaQorIAorIAorIAorKworKworKworKworKworICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisgIworQEAgLTg3MjksNyArOTI0MCw4IEBAIF9MVF9FT0YKKyAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCistICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKyAKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworQEAgLTg4MjgsMTIgKzkzNDAsMTIgQEAgX0xUX0VPRgorIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nLXJwYXRoICRsaWJkaXInCistCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisrCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworIAkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CistCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgCSAgZmkKKyAJICA7OworIAllc2FjCitAQCAtODg0Nyw4ICs5MzU5LDggQEAgX0xUX0VPRgorIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisgCXdsYXJjPQorICAgICAgIGVsc2UKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZmkKKyAgICAgICA7OworIAorQEAgLTg4NjYsOCArOTM3OCw4IEBAIF9MVF9FT0YKKyAKKyBfTFRfRU9GCisgICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC04OTEzLDggKzk0MjUsOCBAQCBfTFRfRU9GCisgCisgICAgICopCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtOTA0NCw3ICs5NTU2LDEzIEBAIF9MVF9FT0YKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKKyAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKyAgICAgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTkwNTcsMjIgKzk1NzUsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorQEAgLTkwODQsNyArOTYwOSwxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJZWxzZQorIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgCSAjIGVtcHR5IGV4ZWN1dGFibGUuCistCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTA5NywyMiArOTYyOCwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorQEAgLTkxNTcsMjAgKzk2OTUsNjMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKy0gICAgICBsaWJleHQ9bGliCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCistICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCistICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCistICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKy0gICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCistICAgICAgb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworLSAgICAgIGZpeF9zcmNmaWxlX3BhdGg9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgICBjbCopCisrCSMgTmF0aXZlIE1TVkMKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworKwlmaWxlX2xpc3Rfc3BlYz0nQCcKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKysJICAgIHNlZCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZWxzZQorKwkgICAgc2VkIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBmaX4KKysJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisrCSAgbGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgKT0ndHJ1ZScKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKwkjIERvbid0IHVzZSByYW5saWIKKysJb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworKwlwb3N0bGlua19jbWRzPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKysJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICopCisrCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgOzsKKysJICBlc2FjfgorKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisrCSAgZmknCisrCTs7CisrICAgICAgKikKKysJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisrCW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCisrCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisrCW9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJOzsKKysgICAgICBlc2FjCisgICAgICAgOzsKKyAKKyAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKK0BAIC05MjMxLDcgKzk4MTIsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCistICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KK0BAIC05MjM5LDcgKzk4MjAsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDkqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZmkKK0BAIC05MjU1LDcgKzk4MzYsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDEwKikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgIGZpCitAQCAtOTI3OSwxMCArOTg2MCwxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWlhNjQqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJKikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAllc2FjCisgICAgICAgZWxzZQorQEAgLTkzNjEsMjMgKzk5NDIsMzYgQEAgZmkKKyAKKyAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKyAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorLSAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKy0gICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKysJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisrCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKysJICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy1pbnQgZm9vKHZvaWQpIHt9CisraW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKy0gIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0KKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllcworK2Vsc2UKKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9CisrCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJZmkKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworQEAgLTk0NjIsNyArMTAwNTYsNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgZWxzZQorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKK0BAIC05NDgxLDkgKzEwMDc1LDkgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCXdsYXJjPScke3dsfScKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKy0JICAkQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworKwkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgIGVsc2UKKyAJY2FzZSBgJENDIC1WIDI+JjFgIGluCisgCSoiQ29tcGlsZXJzIDUuMCIqKQorQEAgLTEwMDU5LDggKzEwNjUzLDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgbmVlZF92ZXJzaW9uPW5vCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAKKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKysgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKysgIHllcywqKQorKyAgICAjIGdjYworICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorQEAgLTEwMDkzLDEzICsxMDY4OCw3MSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKysgICAgOzsKKysKKysgICosY2wqKQorKyAgICAjIE5hdGl2ZSBNU1ZDCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisrCisrICAgIGNhc2UgJGJ1aWxkX29zIGluCisrICAgIG1pbmd3KikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisrICAgICAgbHRfc2F2ZV9pZnM9JElGUworKyAgICAgIElGUz0nOycKKysgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisrICAgICAgZG8KKysgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisrICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKysgICAgICBkb25lCisrICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorKyAgICAgIDs7CisrICAgIGN5Z3dpbiopCisrICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKysgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKysgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICBmaQorKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKysgICAgICA7OworKyAgICBlc2FjCisrCisrICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKysgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisrICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisrICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisrICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisrICAgICAgICRSTSBcJGRscGF0aCcKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgIDs7CisgCisgICAqKQorKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgIDs7CisgICBlc2FjCistICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgIDs7CitAQCAtMTAxOTEsNyArMTA4NDQsNyBAQCBoYWlrdSopCisgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9iZW9zL3N5c3RlbS9saWInCisrICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIDs7CisgCitAQCAtMTEwMzEsMTAgKzExNjg0LDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTExMzcsMTAgKzExNzkwLDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTU0MzYsMTMgKzE2MDg5LDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b190b29sX2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2ZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyt3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J2AkRUNITyAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSdgJEVDSE8gIiRhcmNoaXZlcl9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTU0NTcsMTQgKzE2MTE3LDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfc3lzcm9vdD0nYCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE1BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK01BTklGRVNUX1RPT0w9J2AkRUNITyAiJE1BTklGRVNUX1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIERTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIExJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE1NDk3LDEyICsxNjE2MCwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcQorIGhhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maXhfc3JjZmlsZV9wYXRoPSdgJEVDSE8gIiRmaXhfc3JjZmlsZV9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBwcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGxpbmtfY21kcz0nYCRFQ0hPICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNTU1Nyw4ICsxNjIyMCwxMyBAQCByZWxvYWRfZmxhZyBcCisgT0JKRFVNUCBcCisgZGVwbGlic19jaGVja19tZXRob2QgXAorIGZpbGVfbWFnaWNfY21kIFwKKytmaWxlX21hZ2ljX2dsb2IgXAorK3dhbnRfbm9jYXNlZ2xvYiBcCisrRExMVE9PTCBcCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgXAorIEFSIFwKKyBBUl9GTEFHUyBcCisrYXJjaGl2ZXJfbGlzdF9zcGVjIFwKKyBTVFJJUCBcCisgUkFOTElCIFwKKyBDQyBcCitAQCAtMTU1NjgsMTIgKzE2MjM2LDE0IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCisrbm1fZmlsZV9saXN0X3NwZWMgXAorIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKKy1sdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCisrbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIFwKKyBuZWVkX2xvY2tzIFwKKytNQU5JRkVTVF9UT09MIFwKKyBEU1lNVVRJTCBcCisgTk1FRElUIFwKKyBMSVBPIFwKK0BAIC0xNTU4OSw3ICsxNjI1OSw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKKyBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKKy1maXhfc3JjZmlsZV9wYXRoIFwKKyBleGNsdWRlX2V4cHN5bXMgXAorIGluY2x1ZGVfZXhwc3ltcyBcCisgZmlsZV9saXN0X3NwZWMgXAorQEAgLTE1NjI1LDYgKzE2Mjk0LDcgQEAgbW9kdWxlX2NtZHMgXAorIG1vZHVsZV9leHBzeW1fY21kcyBcCisgZXhwb3J0X3N5bWJvbHNfY21kcyBcCisgcHJlbGlua19jbWRzIFwKKytwb3N0bGlua19jbWRzIFwKKyBwb3N0aW5zdGFsbF9jbWRzIFwKKyBwb3N0dW5pbnN0YWxsX2NtZHMgXAorIGZpbmlzaF9jbWRzIFwKK0BAIC0xNjM4OSw3ICsxNzA1OSw4IEBAICRhc19lY2hvIFgiJGZpbGUiIHwKKyAjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKyAjCisgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKy0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyMgICAgICAgICAgICAgICAgIEluYy4KKyAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorICMKKyAjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCitAQCAtMTY0OTIsMTkgKzE3MTYzLDQyIEBAIFNQMk5MPSRsdF9sdF9TUDJOTAorICMgdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlcy4KKyBOTDJTUD0kbHRfbHRfTkwyU1AKKyAKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlIG5hbWVzIHRvIFwkaG9zdCBmb3JtYXQuCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorKworKyMgY29udmVydCBcJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorKworICMgQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXIuCisgT0JKRFVNUD0kbHRfT0JKRFVNUAorIAorICMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgCistIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIi4KKysjIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisgZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisgCisrIyBIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKytmaWxlX21hZ2ljX2dsb2I9JGx0X2ZpbGVfbWFnaWNfZ2xvYgorKworKyMgRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK3dhbnRfbm9jYXNlZ2xvYj0kbHRfd2FudF9ub2Nhc2VnbG9iCisrCisrIyBETEwgY3JlYXRpb24gcHJvZ3JhbS4KKytETExUT09MPSRsdF9ETExUT09MCisrCisrIyBDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzLgorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorKworICMgVGhlIGFyY2hpdmVyLgorIEFSPSRsdF9BUgorKworKyMgRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmUuCisgQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisgCisrIyBIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXIuCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9hcmNoaXZlcl9saXN0X3NwZWMKKysKKyAjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgorIFNUUklQPSRsdF9TVFJJUAorIAorQEAgLTE2NTM0LDYgKzE3MjI4LDEyIEBAIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisgIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KKyBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKKyAKKysjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgXCROTS4KKytubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKKysKKysjIFRoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyxhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorK2x0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKKysKKyAjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KKyBvYmpkaXI9JG9iamRpcgorIAorQEAgLTE2NTQzLDYgKzE3MjQzLDkgQEAgTUFHSUNfQ01EPSRNQUdJQ19DTUQKKyAjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworIG5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKKyAKKysjIE1hbmlmZXN0IHRvb2wuCisrTUFOSUZFU1RfVE9PTD0kbHRfTUFOSUZFU1RfVE9PTAorKworICMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KKyBEU1lNVVRJTD0kbHRfRFNZTVVUSUwKKyAKK0BAIC0xNjY1NywxMiArMTczNjAsMTIgQEAgd2l0aF9nY2M9JEdDQworICMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KKyBub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCisgCistIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCistCisgIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCisgcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCisgCisrIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCisrCisgIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorIGxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCisgCitAQCAtMTY3NDksOSArMTc0NTIsNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCisgIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCisgbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicworIAorLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KKy1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCistCisgIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKyAKK0BAIC0xNjc2Nyw2ICsxNzQ2Nyw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisgIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KKyBwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworIAorKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KKytwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzCisrCisgIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCisgZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCisgCitAQCAtMTY3OTksMjEwICsxNzUwMiwxNjkgQEAgbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisgICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKy0gIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBjYXNlICR4c2lfc2hlbGwgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorLSMgY2FsbDoKKy0jICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorLSMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorLSMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorLSMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLSMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorLSMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKy0jIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KKy1mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorLSAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifQorLX0KKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9JHsxJSU9Kn0KKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz0kezEjKj19CistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworLSAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sbworLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKQorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKy0gIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKy0gIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCistICBlbHNlCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKy0gIGZpCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkYmFzZW5hbWUiYAorLX0KKy0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgY2FzZSAkezJ9IGluCistICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CistICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKy0gIGVzYWMKKy19CistCistIyBzZWQgc2NyaXB0czoKKy1teV9zZWRfbG9uZ19vcHQ9JzFzL15cKC1bXj1dKlwpPS4qL1wxLztxJworLW15X3NlZF9sb25nX2FyZz0nMXMvXi1bXj1dKj0vLycKKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAorLSAgZnVuY19vcHRfc3BsaXRfYXJnPWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAorLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLlteLl0qJC8ubG8vJ2AKKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJEAiYAorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKKy19CistCistX0xUX0VPRgorLWVzYWMKKy0KKy1jYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDErPVwkMiIKKy19CistX0xUX0VPRgorLSAgICA7OworLSAgKikKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDE9XCQkMVwkMiIKKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgZXNhYworLQorLQorLSAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKysKKysgIGlmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWUgL2NcCisrZnVuY19kaXJuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfYmFzZW5hbWUgL2NcCisrZnVuY19iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIC9jXAorK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3RyaXBuYW1lICgpJC8sL159ICMgZnVuY19zdHJpcG5hbWUgL2NcCisrZnVuY19zdHJpcG5hbWUgKClcCisre1wKKytcICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmVcCisrXCAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuXAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M31cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3N0cmlwbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfbG9uZ19vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IC9jXAorK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfVwKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfbG9uZ19vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X3Nob3J0X29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IC9jXAorK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fVwKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sbzJvICgpJC8sL159ICMgZnVuY19sbzJvIC9jXAorK2Z1bmNfbG8ybyAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7O1wKKytcICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sbzJvIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY194Zm9ybSAoKSQvLC9efSAjIGZ1bmNfeGZvcm0gL2NcCisrZnVuY194Zm9ybSAoKVwKKyt7XAorKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3hmb3JtIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcml0aCAoKSQvLC9efSAjIGZ1bmNfYXJpdGggL2NcCisrZnVuY19hcml0aCAoKVwKKyt7XAorKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSlcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXJpdGggaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xlbiAoKSQvLC9efSAjIGZ1bmNfbGVuIC9jXAorK2Z1bmNfbGVuICgpXAorK3tcCisrICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sZW4gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKytmaQorKworK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kIC9jXAorK2Z1bmNfYXBwZW5kICgpXAorK3tcCisrICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmRfcXVvdGVkICgpJC8sL159ICMgZnVuY19hcHBlbmRfcXVvdGVkIC9jXAorK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKVwKKyt7XAorK1wgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSJcCisrXCAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmRfcXVvdGVkIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZWxzZQorKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2ZpCisrCisraWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiYyO30KKytmaQorKworKworKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgIGNobW9kICt4ICIkb2ZpbGUiCisgCitkaWZmIC0tZ2l0IGEvZ3Byb2YvY29uZmlndXJlIGIvZ3Byb2YvY29uZmlndXJlCitpbmRleCA2NzllMGRjZTc3Li5hYzRjMDE2YTYzIDEwMDc1NQorLS0tIGEvZ3Byb2YvY29uZmlndXJlCisrKysgYi9ncHJvZi9jb25maWd1cmUKK0BAIC02MzEsOCArNjMxLDExIEBAIE9UT09MCisgTElQTworIE5NRURJVAorIERTWU1VVElMCisrTUFOSUZFU1RfVE9PTAorIFJBTkxJQgorK2FjX2N0X0FSCisgQVIKKytETExUT09MCisgT0JKRFVNUAorIExOX1MKKyBOTQorQEAgLTc0NCw2ICs3NDcsNyBAQCBlbmFibGVfc3RhdGljCisgd2l0aF9waWMKKyBlbmFibGVfZmFzdF9pbnN0YWxsCisgd2l0aF9nbnVfbGQKKyt3aXRoX2xpYnRvb2xfc3lzcm9vdAorIGVuYWJsZV9saWJ0b29sX2xvY2sKKyBlbmFibGVfcGx1Z2lucworIGVuYWJsZV9sYXJnZWZpbGUKK0BAIC0xNDAyLDYgKzE0MDYsOCBAQCBPcHRpb25hbCBQYWNrYWdlczoKKyAgIC0td2l0aC1waWMgICAgICAgICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KKyAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKysgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisrICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuCisgCisgU29tZSBpbmZsdWVudGlhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CisgICBDQyAgICAgICAgICBDIGNvbXBpbGVyIGNvbW1hbmQKK0BAIC00ODM2LDggKzQ4NDIsOCBAQCBlc2FjCisgCisgCisgCistbWFjcm9fdmVyc2lvbj0nMi4yLjdhJworLW1hY3JvX3JldmlzaW9uPScxLjMxMzQnCisrbWFjcm9fdmVyc2lvbj0nMi40JworK21hY3JvX3JldmlzaW9uPScxLjMyOTMnCisgCisgCisgCitAQCAtNDg3Nyw3ICs0ODgzLDcgQEAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncy4uLiAiID4mNjsgfQorICMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgorLWlmIHRlc3QgIlhgcHJpbnQgLXIgLS0gLW4gMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisraWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisgICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgIEVDSE89J3ByaW50IC1yIC0tJworIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCitAQCAtNTU2Myw4ICs1NTY5LDggQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsKKyAjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworIHhzaV9zaGVsbD1ubworICggX2x0X2R1bW15PSJhL2IvYyIKKy0gIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCistICAgICAgPSBjLGEvYiwsIFwKKysgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisrICAgICAgPSBjLGEvYixiL2MsIFwKKyAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAgJiYgeHNpX3NoZWxsPXllcworQEAgLTU2MTMsNiArNTYxOSw4MCBAQCBlc2FjCisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9faG9zdF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKi0qLWN5Z3dpbiogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKKysgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICAjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNTYyOSw2ICs1NzA5LDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCisgZXNhYworIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyBjYXNlICRob3N0X29zIGluCisrICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCisrICAgIGZpCisrICAgIDs7CisgICBkYXJ3aW4qKQorICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK0BAIC01Nzk3LDcgKzU4ODIsOCBAQCBtaW5ndyogfCBwdzMyKikKKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgICBlbHNlCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICAgZmkKKyAgIDs7CitAQCAtNTg3NCwxMSArNTk2MCw2IEBAIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorLWxpbnV4LXVjbGliYyopCistICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorLSAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL2xpYi9saWJ1Q2xpYmMtKi5zb2AKKy0gIDs7CistCisgbmV0YnNkKikKKyAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJworQEAgLTU5NTYsNiArNjAzNywyMSBAQCBlc2FjCisgZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKKyAkYXNfZWNobyAiJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KKysKKytmaWxlX21hZ2ljX2dsb2I9Cisrd2FudF9ub2Nhc2VnbG9iPW5vCisraWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKysgIGNhc2UgJGhvc3Rfb3MgaW4KKysgIG1pbmd3KiB8IHB3MzIqKQorKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcworKyAgICBlbHNlCisrICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bXDFdXC9bXDFdXC9nOy9nImAKKysgICAgZmkKKysgICAgOzsKKysgIGVzYWMKKytmaQorKworIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAorIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorQEAgLTU5NzEsOSArNjA2NywxNjIgQEAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisgCisgCisgCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK0RMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKKyskYXNfZWNobyAiJERMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N0X0RMTFRPT0w9JERMTFRPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iJGFjX2N0X0RMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9ETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCisrICAgIERMTFRPT0w9ImZhbHNlIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAorKyAgZmkKKytlbHNlCisrICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgorK2ZpCisrCisrdGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorKworKworKworKworKworKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKysKKytjYXNlICRob3N0X29zIGluCisrY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAorKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisrICAqLS1pZGVudGlmeS1zdHJpY3QqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKKysgICAgOzsKKysgICopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjaworKyAgICA7OworKyAgZXNhYworKyAgOzsKKysqKQorKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCisrICA7OworK2VzYWMKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNjsgfQorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKysKKysKKysKKysKKysKKysKKysKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCisrICBmb3IgYWNfcHJvZyBpbiBhcgorKyAgZG8KKysgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNTk4OSw3ICs2MjM4LDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX0FSPSIke2FjX3Rvb2xfcHJlZml4fWFyIgorKyAgICBhY19jdl9wcm9nX0FSPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNjAwOSwxMSArNjI1OCwxNSBAQCAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisgCisrICAgIHRlc3QgLW4gIiRBUiIgJiYgYnJlYWsKKysgIGRvbmUKKyBmaQorLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FSIjsgdGhlbgorK2lmIHRlc3QgLXogIiRBUiI7IHRoZW4KKyAgIGFjX2N0X0FSPSRBUgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCisrICBmb3IgYWNfcHJvZyBpbiBhcgorK2RvCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02MDI5LDcgKzYyODIsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNjA0OCw2ICs2MzAxLDEwIEBAIGVsc2UKKyAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisrCisrICB0ZXN0IC1uICIkYWNfY3RfQVIiICYmIGJyZWFrCisrZG9uZQorKworICAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCisgICAgIEFSPSJmYWxzZSIKKyAgIGVsc2UKK0BAIC02MDU5LDEyICs2MzE2LDEwIEBAIGFjX3Rvb2xfd2FybmVkPXllcyA7OworIGVzYWMKKyAgICAgQVI9JGFjX2N0X0FSCisgICBmaQorLWVsc2UKKy0gIEFSPSIkYWNfY3ZfcHJvZ19BUiIKKyBmaQorIAorLXRlc3QgLXogIiRBUiIgJiYgQVI9YXIKKy10ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorKzogJHtBUj1hcn0KKys6ICR7QVJfRkxBR1M9Y3J1fQorIAorIAorIAorQEAgLTYwNzYsNiArNjMzMSw2NCBAQCB0ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9hcl9hdF9maWxlK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfYXJfYXRfZmlsZT1ubworKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKKysgICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mNScKKysgICAgICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKysJeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisrICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQorKworK2ZpCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyX2F0X2ZpbGUiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfYXJfYXRfZmlsZSIgPiY2OyB9CisrCisraWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQorK2Vsc2UKKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQorK2ZpCisrCisrCisrCisrCisrCisrCisrCisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgorQEAgLTY0MTAsOCArNjcyMyw4IEBAIGVzYWMKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorIAorICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKyAKKyAjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KKyBvcHRfY3I9CitAQCAtNjQ0Nyw2ICs2NzYwLDcgQEAgZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworICAgZWxzZQorICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICAgZmkKKysgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKyAKKyAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICAgcGlwZV93b3Jrcz1ubworQEAgLTY0ODgsNiArNjgwMiwxOCBAQCBfTFRfRU9GCisgICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKysvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKysjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKysvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbHNlCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKysjZW5kaWYKKysKKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyAjZW5kaWYKK0BAIC02NDk5LDcgKzY4MjUsNyBAQCBfTFRfRU9GCisgCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgCisgLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworLWNvbnN0IHN0cnVjdCB7CisrTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICB2b2lkICAgICAgICphZGRyZXNzOworIH0KK0BAIC02NTI1LDggKzY4NTEsOCBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworIF9MVF9FT0YKKyAJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorLQkgIGx0X3NhdmVfTElCUz0iJExJQlMiCistCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKysJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorIAkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKKyAJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKK0BAIC02NTM2LDggKzY4NjIsOCBAQCBfTFRfRU9GCisgICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAJICAgIHBpcGVfd29ya3M9eWVzCisgCSAgZmkKKy0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisrCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisgCWVsc2UKKyAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKKyAJZmkKK0BAIC02NTc0LDYgKzY5MDAsMTggQEAgZWxzZQorICRhc19lY2hvICJvayIgPiY2OyB9CisgZmkKKyAKKysjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KKytpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZmkKKysKKysKKysKKysKKysKKysKKyAKKyAKKyAKK0BAIC02NTkwLDYgKzY5MjgsNDMgQEAgZmkKKyAKKyAKKyAKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzcm9vdC4uLiAiID4mNjsgfQorKworKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlidG9vbC1zeXNyb290IHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke3dpdGhfbGlidG9vbF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuIDoKKysgIHdpdGh2YWw9JHdpdGhfbGlidG9vbF9zeXNyb290OworK2Vsc2UKKysgIHdpdGhfbGlidG9vbF9zeXNyb290PW5vCisrZmkKKysKKysKKytsdF9zeXNyb290PQorK2Nhc2UgJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0gaW4gIygKKysgeWVzKQorKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorKyAgIGZpCisrICAgOzsgIygKKysgLyopCisrICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrICAgOzsgIygKKysgbm98JycpCisrICAgOzsgIygKKysgKikKKysgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNQorKyRhc19lY2hvICIke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY2OyB9CisrICAgYXNfZm5fZXJyb3IgIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1CisrICAgOzsKKytlc2FjCisrCisrIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke2x0X3N5c3Jvb3Q6LW5vfSIgPiY1CisrJGFzX2VjaG8gIiR7bHRfc3lzcm9vdDotbm99IiA+JjY7IH0KKyAKKyAKKyAKK0BAIC02ODAxLDYgKzcxNzYsMTIzIEBAIGVzYWMKKyAKKyBuZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKyAKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiRNQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJHthY190b29sX3ByZWZpeH1tdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3RfTUFOSUZFU1RfVE9PTD0kTUFOSUZFU1RfVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IG10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9IiRhY19jdF9NQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0ibXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9NQU5JRkVTVF9UT09MIiA9IHg7IHRoZW4KKysgICAgTUFOSUZFU1RfVE9PTD0iOiIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIE1BTklGRVNUX1RPT0w9JGFjX2N0X01BTklGRVNUX1RPT0wKKysgIGZpCisrZWxzZQorKyAgTUFOSUZFU1RfVE9PTD0iJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9tYWluZmVzdF90b29sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiY1CisrICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0CisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisrICBmaQorKyAgcm0gLWYgY29uZnRlc3QqCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNjsgfQorK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCisrICBNQU5JRkVTVF9UT09MPToKKytmaQorKworKworKworKworKworIAorICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICByaGFwc29keSogfCBkYXJ3aW4qKQorQEAgLTczNjQsNiArNzg1Niw4IEBAIF9MVF9FT0YKKyAgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKKyAgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CisgICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQorKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiY1CisrICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JjUKKyAgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKKyBpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorIF9MVF9FT0YKK0BAIC03NTU5LDcgKzgwNTMsOCBAQCBmaQorIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKKyAKKyAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKScKKytMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCisgCisgCisgCitAQCAtNzY0OCw3ICs4MTQzLDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKK0BAIC03OTQ2LDggKzg0NDEsNiBAQCBmaQorIGx0X3Byb2dfY29tcGlsZXJfcGljPQorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorIAorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCisgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworQEAgLTgxMTMsNiArODYwNiwxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisgCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKKyAJOzsKKysgICAgICBuYWdmb3IqKQorKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisrCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKKysJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisrCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKysJOzsKKyAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorQEAgLTgxNzUsNyArODY3NCw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKysgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgICopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKK0BAIC04MjMyLDEzICs4NzMxLDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICAgOzsKKyBlc2FjCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CistJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CistCistCistCistCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKytsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKKyAKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorQEAgLTgyOTksNiArODgwMiwxMSBAQCBmaQorIAorIAorIAorKworKworKworKworKworICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisgIworQEAgLTg2NDksNyArOTE1Nyw4IEBAIF9MVF9FT0YKKyAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCistICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKyAKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworQEAgLTg3NDgsMTIgKzkyNTcsMTIgQEAgX0xUX0VPRgorIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nLXJwYXRoICRsaWJkaXInCistCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisrCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworIAkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CistCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgCSAgZmkKKyAJICA7OworIAllc2FjCitAQCAtODc2Nyw4ICs5Mjc2LDggQEAgX0xUX0VPRgorIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisgCXdsYXJjPQorICAgICAgIGVsc2UKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZmkKKyAgICAgICA7OworIAorQEAgLTg3ODYsOCArOTI5NSw4IEBAIF9MVF9FT0YKKyAKKyBfTFRfRU9GCisgICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC04ODMzLDggKzkzNDIsOCBAQCBfTFRfRU9GCisgCisgICAgICopCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtODk2NCw3ICs5NDczLDEzIEBAIF9MVF9FT0YKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKKyAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKyAgICAgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTg5NzcsMjIgKzk0OTIsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorQEAgLTkwMDQsNyArOTUyNiwxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJZWxzZQorIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgCSAjIGVtcHR5IGV4ZWN1dGFibGUuCistCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTAxNywyMiArOTU0NSwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorQEAgLTkwNzcsMjAgKzk2MTIsNjMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKy0gICAgICBsaWJleHQ9bGliCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCistICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCistICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCistICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKy0gICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCistICAgICAgb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworLSAgICAgIGZpeF9zcmNmaWxlX3BhdGg9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgICBjbCopCisrCSMgTmF0aXZlIE1TVkMKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworKwlmaWxlX2xpc3Rfc3BlYz0nQCcKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKysJICAgIHNlZCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZWxzZQorKwkgICAgc2VkIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBmaX4KKysJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisrCSAgbGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgKT0ndHJ1ZScKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKwkjIERvbid0IHVzZSByYW5saWIKKysJb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworKwlwb3N0bGlua19jbWRzPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKysJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICopCisrCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgOzsKKysJICBlc2FjfgorKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisrCSAgZmknCisrCTs7CisrICAgICAgKikKKysJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisrCW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCisrCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisrCW9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJOzsKKysgICAgICBlc2FjCisgICAgICAgOzsKKyAKKyAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKK0BAIC05MTUxLDcgKzk3MjksNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCistICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KK0BAIC05MTU5LDcgKzk3MzcsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDkqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZmkKK0BAIC05MTc1LDcgKzk3NTMsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDEwKikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgIGZpCitAQCAtOTE5OSwxMCArOTc3NywxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWlhNjQqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJKikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAllc2FjCisgICAgICAgZWxzZQorQEAgLTkyODEsMjMgKzk4NTksMzYgQEAgZmkKKyAKKyAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKyAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorLSAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKy0gICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKysJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisrCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKysJICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy1pbnQgZm9vKHZvaWQpIHt9CisraW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKy0gIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0KKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllcworK2Vsc2UKKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9CisrCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJZmkKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworQEAgLTkzODIsNyArOTk3Myw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICBlbHNlCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworQEAgLTk0MDEsOSArOTk5Miw5IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAl3bGFyYz0nJHt3bH0nCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CistCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICBlbHNlCisgCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorIAkqIkNvbXBpbGVycyA1LjAiKikKK0BAIC05OTc5LDggKzEwNTcwLDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgbmVlZF92ZXJzaW9uPW5vCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAKKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKysgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKysgIHllcywqKQorKyAgICAjIGdjYworICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorQEAgLTEwMDEzLDEzICsxMDYwNSw3MSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKysgICAgOzsKKysKKysgICosY2wqKQorKyAgICAjIE5hdGl2ZSBNU1ZDCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisrCisrICAgIGNhc2UgJGJ1aWxkX29zIGluCisrICAgIG1pbmd3KikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisrICAgICAgbHRfc2F2ZV9pZnM9JElGUworKyAgICAgIElGUz0nOycKKysgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisrICAgICAgZG8KKysgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisrICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKysgICAgICBkb25lCisrICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorKyAgICAgIDs7CisrICAgIGN5Z3dpbiopCisrICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKysgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKysgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICBmaQorKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKysgICAgICA7OworKyAgICBlc2FjCisrCisrICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKysgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisrICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisrICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisrICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisrICAgICAgICRSTSBcJGRscGF0aCcKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgIDs7CisgCisgICAqKQorKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgIDs7CisgICBlc2FjCistICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgIDs7CitAQCAtMTAxMTEsNyArMTA3NjEsNyBAQCBoYWlrdSopCisgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9iZW9zL3N5c3RlbS9saWInCisrICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIDs7CisgCitAQCAtMTA5NTEsMTAgKzExNjAxLDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTEwNTcsMTAgKzExNzA3LDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTMwMDUsMTMgKzEzNjU1LDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b190b29sX2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2ZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyt3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J2AkRUNITyAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSdgJEVDSE8gIiRhcmNoaXZlcl9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTMwMjYsMTQgKzEzNjgzLDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfc3lzcm9vdD0nYCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE1BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK01BTklGRVNUX1RPT0w9J2AkRUNITyAiJE1BTklGRVNUX1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIERTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIExJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTEzMDY2LDEyICsxMzcyNiwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcQorIGhhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maXhfc3JjZmlsZV9wYXRoPSdgJEVDSE8gIiRmaXhfc3JjZmlsZV9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBwcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGxpbmtfY21kcz0nYCRFQ0hPICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xMzEyNiw4ICsxMzc4NiwxMyBAQCByZWxvYWRfZmxhZyBcCisgT0JKRFVNUCBcCisgZGVwbGlic19jaGVja19tZXRob2QgXAorIGZpbGVfbWFnaWNfY21kIFwKKytmaWxlX21hZ2ljX2dsb2IgXAorK3dhbnRfbm9jYXNlZ2xvYiBcCisrRExMVE9PTCBcCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgXAorIEFSIFwKKyBBUl9GTEFHUyBcCisrYXJjaGl2ZXJfbGlzdF9zcGVjIFwKKyBTVFJJUCBcCisgUkFOTElCIFwKKyBDQyBcCitAQCAtMTMxMzcsMTIgKzEzODAyLDE0IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCisrbm1fZmlsZV9saXN0X3NwZWMgXAorIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKKy1sdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCisrbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIFwKKyBuZWVkX2xvY2tzIFwKKytNQU5JRkVTVF9UT09MIFwKKyBEU1lNVVRJTCBcCisgTk1FRElUIFwKKyBMSVBPIFwKK0BAIC0xMzE1OCw3ICsxMzgyNSw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKKyBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKKy1maXhfc3JjZmlsZV9wYXRoIFwKKyBleGNsdWRlX2V4cHN5bXMgXAorIGluY2x1ZGVfZXhwc3ltcyBcCisgZmlsZV9saXN0X3NwZWMgXAorQEAgLTEzMTk0LDYgKzEzODYwLDcgQEAgbW9kdWxlX2NtZHMgXAorIG1vZHVsZV9leHBzeW1fY21kcyBcCisgZXhwb3J0X3N5bWJvbHNfY21kcyBcCisgcHJlbGlua19jbWRzIFwKKytwb3N0bGlua19jbWRzIFwKKyBwb3N0aW5zdGFsbF9jbWRzIFwKKyBwb3N0dW5pbnN0YWxsX2NtZHMgXAorIGZpbmlzaF9jbWRzIFwKK0BAIC0xMzk1MCw3ICsxNDYxNyw4IEBAICRhc19lY2hvIFgiJGZpbGUiIHwKKyAjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKyAjCisgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKy0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyMgICAgICAgICAgICAgICAgIEluYy4KKyAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorICMKKyAjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCitAQCAtMTQwNTMsMTkgKzE0NzIxLDQyIEBAIFNQMk5MPSRsdF9sdF9TUDJOTAorICMgdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlcy4KKyBOTDJTUD0kbHRfbHRfTkwyU1AKKyAKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlIG5hbWVzIHRvIFwkaG9zdCBmb3JtYXQuCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorKworKyMgY29udmVydCBcJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorKworICMgQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXIuCisgT0JKRFVNUD0kbHRfT0JKRFVNUAorIAorICMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgCistIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIi4KKysjIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisgZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisgCisrIyBIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKytmaWxlX21hZ2ljX2dsb2I9JGx0X2ZpbGVfbWFnaWNfZ2xvYgorKworKyMgRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK3dhbnRfbm9jYXNlZ2xvYj0kbHRfd2FudF9ub2Nhc2VnbG9iCisrCisrIyBETEwgY3JlYXRpb24gcHJvZ3JhbS4KKytETExUT09MPSRsdF9ETExUT09MCisrCisrIyBDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzLgorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorKworICMgVGhlIGFyY2hpdmVyLgorIEFSPSRsdF9BUgorKworKyMgRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmUuCisgQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisgCisrIyBIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXIuCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9hcmNoaXZlcl9saXN0X3NwZWMKKysKKyAjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgorIFNUUklQPSRsdF9TVFJJUAorIAorQEAgLTE0MDk1LDYgKzE0Nzg2LDEyIEBAIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisgIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KKyBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKKyAKKysjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgXCROTS4KKytubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKKysKKysjIFRoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyxhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorK2x0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKKysKKyAjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KKyBvYmpkaXI9JG9iamRpcgorIAorQEAgLTE0MTA0LDYgKzE0ODAxLDkgQEAgTUFHSUNfQ01EPSRNQUdJQ19DTUQKKyAjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworIG5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKKyAKKysjIE1hbmlmZXN0IHRvb2wuCisrTUFOSUZFU1RfVE9PTD0kbHRfTUFOSUZFU1RfVE9PTAorKworICMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KKyBEU1lNVVRJTD0kbHRfRFNZTVVUSUwKKyAKK0BAIC0xNDIxOCwxMiArMTQ5MTgsMTIgQEAgd2l0aF9nY2M9JEdDQworICMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KKyBub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCisgCistIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCistCisgIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCisgcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCisgCisrIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCisrCisgIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorIGxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCisgCitAQCAtMTQzMTAsOSArMTUwMTAsNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCisgIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCisgbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicworIAorLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KKy1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCistCisgIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKyAKK0BAIC0xNDMyOCw2ICsxNTAyNSw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisgIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KKyBwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworIAorKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KKytwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzCisrCisgIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCisgZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCisgCitAQCAtMTQzNjAsMjEwICsxNTA2MCwxNjkgQEAgbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisgICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKy0gIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBjYXNlICR4c2lfc2hlbGwgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorLSMgY2FsbDoKKy0jICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorLSMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorLSMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorLSMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLSMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorLSMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKy0jIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KKy1mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorLSAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifQorLX0KKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9JHsxJSU9Kn0KKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz0kezEjKj19CistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworLSAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sbworLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKQorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKy0gIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKy0gIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCistICBlbHNlCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKy0gIGZpCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkYmFzZW5hbWUiYAorLX0KKy0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgY2FzZSAkezJ9IGluCistICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CistICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKy0gIGVzYWMKKy19CistCistIyBzZWQgc2NyaXB0czoKKy1teV9zZWRfbG9uZ19vcHQ9JzFzL15cKC1bXj1dKlwpPS4qL1wxLztxJworLW15X3NlZF9sb25nX2FyZz0nMXMvXi1bXj1dKj0vLycKKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAorLSAgZnVuY19vcHRfc3BsaXRfYXJnPWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAorLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLlteLl0qJC8ubG8vJ2AKKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJEAiYAorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKKy19CistCistX0xUX0VPRgorLWVzYWMKKy0KKy1jYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDErPVwkMiIKKy19CistX0xUX0VPRgorLSAgICA7OworLSAgKikKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDE9XCQkMVwkMiIKKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgZXNhYworLQorLQorLSAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKysKKysgIGlmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWUgL2NcCisrZnVuY19kaXJuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfYmFzZW5hbWUgL2NcCisrZnVuY19iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIC9jXAorK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3RyaXBuYW1lICgpJC8sL159ICMgZnVuY19zdHJpcG5hbWUgL2NcCisrZnVuY19zdHJpcG5hbWUgKClcCisre1wKKytcICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmVcCisrXCAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuXAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M31cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3N0cmlwbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfbG9uZ19vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IC9jXAorK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfVwKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfbG9uZ19vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X3Nob3J0X29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IC9jXAorK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fVwKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sbzJvICgpJC8sL159ICMgZnVuY19sbzJvIC9jXAorK2Z1bmNfbG8ybyAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7O1wKKytcICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sbzJvIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY194Zm9ybSAoKSQvLC9efSAjIGZ1bmNfeGZvcm0gL2NcCisrZnVuY194Zm9ybSAoKVwKKyt7XAorKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3hmb3JtIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcml0aCAoKSQvLC9efSAjIGZ1bmNfYXJpdGggL2NcCisrZnVuY19hcml0aCAoKVwKKyt7XAorKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSlcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXJpdGggaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xlbiAoKSQvLC9efSAjIGZ1bmNfbGVuIC9jXAorK2Z1bmNfbGVuICgpXAorK3tcCisrICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sZW4gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKytmaQorKworK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kIC9jXAorK2Z1bmNfYXBwZW5kICgpXAorK3tcCisrICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmRfcXVvdGVkICgpJC8sL159ICMgZnVuY19hcHBlbmRfcXVvdGVkIC9jXAorK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKVwKKyt7XAorK1wgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSJcCisrXCAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmRfcXVvdGVkIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZWxzZQorKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2ZpCisrCisraWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiYyO30KKytmaQorKworKworKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgIGNobW9kICt4ICIkb2ZpbGUiCisgCitkaWZmIC0tZ2l0IGEvbGQvY29uZmlndXJlIGIvbGQvY29uZmlndXJlCitpbmRleCBkN2Y2NmY4Y2RjLi40ZTcxNTExYmQxIDEwMDc1NQorLS0tIGEvbGQvY29uZmlndXJlCisrKysgYi9sZC9jb25maWd1cmUKK0BAIC02NTUsOCArNjU1LDExIEBAIE9UT09MCisgTElQTworIE5NRURJVAorIERTWU1VVElMCisrTUFOSUZFU1RfVE9PTAorIFJBTkxJQgorK2FjX2N0X0FSCisgQVIKKytETExUT09MCisgT0JKRFVNUAorIExOX1MKKyBOTQorQEAgLTc3OCw2ICs3ODEsNyBAQCBlbmFibGVfc3RhdGljCisgd2l0aF9waWMKKyBlbmFibGVfZmFzdF9pbnN0YWxsCisgd2l0aF9nbnVfbGQKKyt3aXRoX2xpYnRvb2xfc3lzcm9vdAorIGVuYWJsZV9saWJ0b29sX2xvY2sKKyBlbmFibGVfcGx1Z2lucworIGVuYWJsZV9sYXJnZWZpbGUKK0BAIC0xNDY0LDYgKzE0NjgsOCBAQCBPcHRpb25hbCBQYWNrYWdlczoKKyAgIC0td2l0aC1waWMgICAgICAgICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KKyAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKysgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisrICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuCisgICAtLXdpdGgtbGliLXBhdGg9ZGlyMTpkaXIyLi4uICBzZXQgZGVmYXVsdCBMSUJfUEFUSAorICAgLS13aXRoLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgdXNyL2xpYiBldCBhbCB3aXRoaW4gRElSLgorIAorQEAgLTU2NTgsOCArNTY2NCw4IEBAIGVzYWMKKyAKKyAKKyAKKy1tYWNyb192ZXJzaW9uPScyLjIuN2EnCistbWFjcm9fcmV2aXNpb249JzEuMzEzNCcKKyttYWNyb192ZXJzaW9uPScyLjQnCisrbWFjcm9fcmV2aXNpb249JzEuMzI5MycKKyAKKyAKKyAKK0BAIC01Njk5LDcgKzU3MDUsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9CisgIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCistaWYgdGVzdCAiWGBwcmludCAtciAtLSAtbiAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKytpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICAgRUNITz0ncHJpbnQgLXIgLS0nCisgZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KK0BAIC02Mzg1LDggKzYzOTEsOCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OworICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCisgeHNpX3NoZWxsPW5vCisgKCBfbHRfZHVtbXk9ImEvYi9jIgorLSAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKy0gICAgICA9IGMsYS9iLCwgXAorKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKysgICAgICA9IGMsYS9iLGIvYywgXAorICAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICAmJiB4c2lfc2hlbGw9eWVzCitAQCAtNjQzNSw2ICs2NDQxLDgwIEBAIGVzYWMKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b19ob3N0X2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqLSotY3lnd2luKiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9fdG9vbF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgICNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KKytsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKytjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02NDUxLDYgKzY1MzEsMTEgQEAgY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyBlc2FjCisgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworIGNhc2UgJGhvc3Rfb3MgaW4KKysgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisrICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKysgICAgZmkKKysgICAgOzsKKyAgIGRhcndpbiopCisgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworQEAgLTY2MTksNyArNjcwNCw4IEBAIG1pbmd3KiB8IHB3MzIqKQorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgIGVsc2UKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCisrICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKysgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgICBmaQorICAgOzsKK0BAIC02NzczLDYgKzY4NTksMjEgQEAgZXNhYworIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1CisgJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CisrCisrZmlsZV9tYWdpY19nbG9iPQorK3dhbnRfbm9jYXNlZ2xvYj1ubworK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisrICBjYXNlICRob3N0X29zIGluCisrICBtaW5ndyogfCBwdzMyKikKKysgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKKysgICAgZWxzZQorKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1wxXVwvW1wxXVwvZzsvZyJgCisrICAgIGZpCisrICAgIDs7CisrICBlc2FjCisrZmkKKysKKyBmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKKyB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KK0BAIC02Nzg4LDkgKzY4ODksMTYyIEBAIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorIAorIAorIAorKworKworKworKworKworKworKworKworKworKworK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisrICBhY19jdF9ETExUT09MPSRETExUT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorKyAgICBETExUT09MPSJmYWxzZSIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKysgIGZpCisrZWxzZQorKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisrCisrY2FzZSAkaG9zdF9vcyBpbgorK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKKysgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKysgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisrICAgIDs7CisrICAqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKysgICAgOzsKKysgIGVzYWMKKysgIDs7CisrKikKKysgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorKyAgOzsKKytlc2FjCisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjY7IH0KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyt0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisrCisrCisrCisrCisrCisrCisrCisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKysgIGRvCisrICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTY4MDYsNyArNzA2MCw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKysgICAgYWNfY3ZfcHJvZ19BUj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTY4MjYsMTEgKzcwODAsMTUgQEAgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCisrICBkb25lCisgZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKytpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgICBhY19jdF9BUj0kQVIKKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBhcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKytkbworKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjg0Niw3ICs3MTA0LDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKKysgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTY4NjUsNiArNzEyMywxMCBAQCBlbHNlCisgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorKworKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhaworK2RvbmUKKysKKyAgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgICBBUj0iZmFsc2UiCisgICBlbHNlCitAQCAtNjg3NiwxMiArNzEzOCwxMiBAQCBhY190b29sX3dhcm5lZD15ZXMgOzsKKyBlc2FjCisgICAgIEFSPSRhY19jdF9BUgorICAgZmkKKy1lbHNlCistICBBUj0iJGFjX2N2X3Byb2dfQVIiCisgZmkKKyAKKy10ZXN0IC16ICIkQVIiICYmIEFSPWFyCistdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKys6ICR7QVI9YXJ9CisrOiAke0FSX0ZMQUdTPWNydX0KKysKKysKKyAKKyAKKyAKK0BAIC02ODkxLDYgKzcxNTMsNjIgQEAgdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfYXJfYXRfZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X2FyX2F0X2ZpbGU9bm8KKysgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworK2ludAorK21haW4gKCkKKyt7CisrCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorKyAgZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CisrICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JjUnCisrICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKysJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKysJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisrCXsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKwlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgorKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKysKKytmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcl9hdF9maWxlIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQorKworK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KKytlbHNlCisrICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKKytmaQorKworKworKworKworKworIAorIAorIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KK0BAIC03MjI3LDggKzc1NDUsOCBAQCBlc2FjCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKyAKKyAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisgCisgIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCisgb3B0X2NyPQorQEAgLTcyNjQsNiArNzU4Miw3IEBAIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKyAgIGVsc2UKKyAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cKCRzeW1jb2RlJHN5bWNvZGUqXClbCSBdWwkgXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgIGZpCisrICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisgCisgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgIHBpcGVfd29ya3M9bm8KK0BAIC03MzA1LDYgKzc2MjQsMTggQEAgX0xUX0VPRgorICAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisrLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisrI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKysvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKysgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxpZiBkZWZpbmVkKF9fb3NmX18pCisrLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxzZQorKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CisrI2VuZGlmCisrCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisgI2VuZGlmCitAQCAtNzMxNiw3ICs3NjQ3LDcgQEAgX0xUX0VPRgorIAkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorIAorIC8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KKy1jb25zdCBzdHJ1Y3QgeworK0xUX0RMU1lNX0NPTlNUIHN0cnVjdCB7CisgICBjb25zdCBjaGFyICpuYW1lOworICAgdm9pZCAgICAgICAqYWRkcmVzczsKKyB9CitAQCAtNzM0Miw4ICs3NjczLDggQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyBfTFRfRU9GCisgCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKyAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKy0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorLQkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKyAJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCisgCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CitAQCAtNzM1Myw4ICs3Njg0LDggQEAgX0xUX0VPRgorICAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgCSAgICBwaXBlX3dvcmtzPXllcworIAkgIGZpCistCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKKy0JICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKysJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUworKwkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUworIAllbHNlCisgCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CisgCWZpCitAQCAtNzM5MSw2ICs3NzIyLDE5IEBAIGVsc2UKKyAkYXNfZWNobyAib2siID4mNjsgfQorIGZpCisgCisrIyBSZXNwb25zZSBmaWxlIHN1cHBvcnQuCisraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2VsaWYgJE5NIC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ1tAXUZJTEUnID4vZGV2L251bGw7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2ZpCisrCisrCisrCisrCisrCisrCisrCisgCisgCisgCitAQCAtNzQwNCw2ICs3NzQ4LDQyIEBAIGZpCisgCisgCisgCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3lzcm9vdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN5c3Jvb3QuLi4gIiA+JjY7IH0KKysKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYnRvb2wtc3lzcm9vdCB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICB3aXRodmFsPSR3aXRoX2xpYnRvb2xfc3lzcm9vdDsKKytlbHNlCisrICB3aXRoX2xpYnRvb2xfc3lzcm9vdD1ubworK2ZpCisrCisrCisrbHRfc3lzcm9vdD0KKytjYXNlICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IGluICMoCisrIHllcykKKysgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKysgICBmaQorKyAgIDs7ICMoCisrIC8qKQorKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX2xpYnRvb2xfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKyAgIDs7ICMoCisrIG5vfCcnKQorKyAgIDs7ICMoCisrICopCisrICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjUKKyskYXNfZWNobyAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNjsgfQorKyAgIGFzX2ZuX2Vycm9yICJUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguIiAiJExJTkVOTyIgNQorKyAgIDs7CisrZXNhYworKworKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtsdF9zeXNyb290Oi1ub30iID4mNQorKyRhc19lY2hvICIke2x0X3N5c3Jvb3Q6LW5vfSIgPiY2OyB9CisgCisgCisgCitAQCAtNzYxOCw2ICs3OTk4LDEyMyBAQCBlc2FjCisgCisgbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisgCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1tdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJE1BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N0X01BTklGRVNUX1RPT0w9JE1BTklGRVNUX1RPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9Im10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9NQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPSB4OyB0aGVuCisrICAgIE1BTklGRVNUX1RPT0w9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBNQU5JRkVTVF9UT09MPSRhY19jdF9NQU5JRkVTVF9UT09MCisrICBmaQorK2Vsc2UKKysgIE1BTklGRVNUX1RPT0w9IiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mNQorKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKysgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcworKyAgZmkKKysgIHJtIC1mIGNvbmZ0ZXN0KgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorKyAgTUFOSUZFU1RfVE9PTD06CisrZmkKKysKKysKKysKKysKKysKKyAKKyAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKK0BAIC04MTgxLDYgKzg2NzgsOCBAQCBfTFRfRU9GCisgICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CisgICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQorICAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKKysgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQorKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiY1CisgICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCisgaW50IG1haW4oKSB7IHJldHVybiAwO30KKyBfTFRfRU9GCitAQCAtODI0OSw2ICs4NzQ4LDE2IEBAIGRvbmUKKyAKKyAKKyAKKytmdW5jX3N0cmlwbmFtZV9jbmYgKCkKKyt7CisrICBjYXNlICR7Mn0gaW4KKysgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CisrICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CisrICBlc2FjCisrfSAjIGZ1bmNfc3RyaXBuYW1lX2NuZgorKworKworKworIAorIAorICMgU2V0IG9wdGlvbnMKK0BAIC04Mzc3LDcgKzg4ODYsOCBAQCBmaQorIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKKyAKKyAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKScKKytMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCisgCisgCisgCitAQCAtODQ2Niw3ICs4OTc2LDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKK0BAIC04NzY0LDggKzkyNzQsNiBAQCBmaQorIGx0X3Byb2dfY29tcGlsZXJfcGljPQorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorIAorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCisgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworQEAgLTg5MzEsNiArOTQzOSwxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisgCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKKyAJOzsKKysgICAgICBuYWdmb3IqKQorKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisrCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKKysJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisrCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKysJOzsKKyAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorQEAgLTg5OTMsNyArOTUwNyw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKysgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgICopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKK0BAIC05MDUwLDEzICs5NTY0LDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICAgOzsKKyBlc2FjCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CistJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CistCistCistCistCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKytsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKKyAKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorQEAgLTkxMTcsNiArOTYzNSwxMSBAQCBmaQorIAorIAorIAorKworKworKworKworKworICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisgIworQEAgLTk0NjcsNyArOTk5MCw4IEBAIF9MVF9FT0YKKyAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCistICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKyAKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworQEAgLTk1NjYsMTIgKzEwMDkwLDEyIEBAIF9MVF9FT0YKKyAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJworLQkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworKwkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKyAJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKysJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworIAkgIGZpCisgCSAgOzsKKyAJZXNhYworQEAgLTk1ODUsOCArMTAxMDksOCBAQCBfTFRfRU9GCisgCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKyAJd2xhcmM9CisgICAgICAgZWxzZQorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBmaQorICAgICAgIDs7CisgCitAQCAtOTYwNCw4ICsxMDEyOCw4IEBAIF9MVF9FT0YKKyAKKyBfTFRfRU9GCisgICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC05NjUxLDggKzEwMTc1LDggQEAgX0xUX0VPRgorIAorICAgICAqKQorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTk3ODIsNyArMTAzMDYsMTMgQEAgX0xUX0VPRgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJworICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCistICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrICAgICAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTc5NSwyMiArMTAzMjUsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorQEAgLTk4MjIsNyArMTAzNTksMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCWVsc2UKKyAJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorIAkgIyBlbXB0eSBleGVjdXRhYmxlLgorLQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTk4MzUsMjIgKzEwMzc4LDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCitAQCAtOTg5NCwyMSArMTA0NDQsNjQgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKy0gICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCistICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorLSAgICAgIGxpYmV4dD1saWIKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKy0gICAgICBzaHJleHRfY21kcz0iLmRsbCIKKy0gICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCistICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKy0gICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorLSAgICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCistICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKy0gICAgICBvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCistICAgICAgZml4X3NyY2ZpbGVfcGF0aD0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCistICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgY2wqKQorKwkjIE5hdGl2ZSBNU1ZDCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKysJZmlsZV9saXN0X3NwZWM9J0AnCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGVsc2UKKysJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZml+CisrCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgIGxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysJIyBEb24ndCB1c2UgcmFubGliCisrCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKKysJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisrCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgKi5leGV8Ki5FWEUpIDs7CisrCSAgICAqKQorKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIDs7CisrCSAgZXNhY34KKysJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKysJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworKwkgIGZpJworKwk7OworKyAgICAgICopCisrCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCTs7CisrICAgICAgZXNhYworICAgICAgIDs7CisgCisgICAgIGRhcndpbiogfCByaGFwc29keSopCitAQCAtOTk2OSw3ICsxMDU2Miw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworQEAgLTk5NzcsNyArMTA1NzAsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDkqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZmkKK0BAIC05OTkzLDcgKzEwNTg2LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXgxMCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgICBmaQorQEAgLTEwMDE3LDEwICsxMDYxMCwxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWlhNjQqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJKikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAllc2FjCisgICAgICAgZWxzZQorQEAgLTEwMDk5LDIzICsxMDY5MiwzNiBAQCBmaQorIAorICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorIAkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCisgCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCistICAgICAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorLSAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgorKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKysJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorKwkgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLWludCBmb28odm9pZCkge30KKytpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9CisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorLSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworLQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzCisrZWxzZQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm8KKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKysgICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjY7IH0KKysJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgorKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlmaQorICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCitAQCAtMTAyMDAsNyArMTA4MDYsNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgZWxzZQorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKK0BAIC0xMDIxOSw5ICsxMDgyNSw5IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAl3bGFyYz0nJHt3bH0nCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CistCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICBlbHNlCisgCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorIAkqIkNvbXBpbGVycyA1LjAiKikKK0BAIC0xMDc5Nyw4ICsxMTQwMyw5IEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgIG5lZWRfdmVyc2lvbj1ubworICAgbmVlZF9saWJfcHJlZml4PW5vCisgCistICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KKy0gIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKiB8IHllcyxjZWdjYyopCisrICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisrICB5ZXMsKikKKysgICAgIyBnY2MKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KK0BAIC0xMDgzMSwxMyArMTE0MzgsNzEgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgICA7OworICAgICBlc2FjCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisrICAgIDs7CisrCisrICAqLGNsKikKKysgICAgIyBOYXRpdmUgTVNWQworKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJworKworKyAgICBjYXNlICRidWlsZF9vcyBpbgorKyAgICBtaW5ndyopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKKysgICAgICBJRlM9JzsnCisrICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorKyAgICAgIGRvCisrICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisrICAgICAgZG9uZQorKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFthLXpBLVpdXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKysgICAgICA7OworKyAgICBjeWd3aW4qKQorKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKysgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKysgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisrICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCisrICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKysgICAgICBlbHNlCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgZmkKKysgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKKysgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisrICAgICAgOzsKKysgICAgZXNhYworKworKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisrICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKysgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorKyAgICAgICAkUk0gXCRkbHBhdGgnCisrICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJworICAgICA7OworIAorICAgKikKKysgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgICA7OworICAgZXNhYworLSAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICAgc2hsaWJwYXRoX3Zhcj1QQVRICisgICA7OworQEAgLTEwOTI5LDcgKzExNTk0LDcgQEAgaGFpa3UqKQorICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCistICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3QvYmVvcy9zeXN0ZW0vbGliJworKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICA7OworIAorQEAgLTExNzY5LDEwICsxMjQzNCwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTExODc1LDEwICsxMjU0MCwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTEyMjcwLDYgKzEyOTM1LDcgQEAgJFJNIC1yIGNvbmZ0ZXN0KgorIAorICAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgIGx0X3NhdmVfQ0M9JENDCisrICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgICBsdF9zYXZlX0xEPSRMRAorICAgbHRfc2F2ZV9HQ0M9JEdDQworICAgR0NDPSRHWFgKK0BAIC0xMjI4Nyw2ICsxMjk1Myw3IEBAICRSTSAtciBjb25mdGVzdCoKKyAgIGZpCisgICB0ZXN0IC16ICIke0xEQ1hYK3NldH0iIHx8IExEPSRMRENYWAorICAgQ0M9JHtDWFgtImMrKyJ9CisrICBDRkxBR1M9JENYWEZMQUdTCisgICBjb21waWxlcj0kQ0MKKyAgIGNvbXBpbGVyX0NYWD0kQ0MKKyAgIGZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbworQEAgLTEyNTY5LDcgKzEzMjM2LDEzIEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllCisgICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nLWJlcm9rJworICAgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkKKyAgICAgICAgICAgIyBleGVjdXRhYmxlLgorLSAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrICAgICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtMTI1ODIsMjIgKzEzMjU1LDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jeHhfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoX19DWFgiOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF9fQ1hYCisrZmkKKyAKKyAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCitAQCAtMTI2MTAsNyArMTMyOTAsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgICAgIGVsc2UKKyAJICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorIAkgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorLQkgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF9fQ1hYK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC0xMjYyMywyMiArMTMzMDksMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF9fQ1hYIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoX19DWFgKKytmaQorIAorIAkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorQEAgLTEyNjgxLDI5ICsxMzM3NCw3NSBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAgICAgICAgIDs7CisgCisgICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorLSAgICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIENYWCkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCistICAgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorLSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKKy0gICAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtYWxsLXN5bWJvbHMnCistICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKKy0gICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KKy0gICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPXllcworLQorLSAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorLSAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCistICAgICAgICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKy0gICAgICAgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKy0gICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCistCSAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CistICAgICAgICAgIGVsc2UKKy0JICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworLQkgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKy0gICAgICAgICAgZml+CistICAgICAgICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKy0gICAgICAgIGVsc2UKKy0gICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworLSAgICAgICAgZmkKKy0gICAgICAgIDs7CisrCWNhc2UgJEdYWCwkY2NfYmFzZW5hbWUgaW4KKysJLGNsKiB8IG5vLGNsKikKKysJICAjIE5hdGl2ZSBNU1ZDCisrCSAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworKwkgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyAnCisrCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCisrCSAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD15ZXMKKysJICBmaWxlX2xpc3Rfc3BlY19DWFg9J0AnCisrCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJICBsaWJleHQ9bGliCisrCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCSAgc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JworKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgICAkU0VEIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICAgIGVsc2UKKysJICAgICAgJFNFRCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgICBmaX4KKysJICAgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKysJICAgIGxpbmtuYW1lcz0nCisrCSAgIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorKwkgICMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCBDWFgpPSd0cnVlJworKwkgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPXllcworKwkgICMgRG9uJ3QgdXNlIHJhbmxpYgorKwkgIG9sZF9wb3N0aW5zdGFsbF9jbWRzX0NYWD0nY2htb2QgNjQ0ICRvbGRsaWInCisrCSAgcG9zdGxpbmtfY21kc19DWFg9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKysJICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisrCSAgICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAgICouZXhlfCouRVhFKSA7OworKwkgICAgICAqKQorKwkJbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorKwkJbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJCTs7CisrCSAgICBlc2FjfgorKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRsdF9vdXRwdXRmaWxlIn4KKysJICAgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisrCSAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworKwkgICAgZmknCisrCSAgOzsKKysJKikKKysJICAjIGcrKworKwkgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBDWFgpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorKwkgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKKysJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAorKwkgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KKysJICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD15ZXMKKysKKysJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisrCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisrCSAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisrCSAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKysJICAgIGVsc2UKKysJICAgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisrCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisrCSAgICBmaX4KKysJICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKysJICBlbHNlCisrCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisrCSAgZmkKKysJICA7OworKwllc2FjCisrCTs7CisgICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAKKyAKK0BAIC0xMjgwOSw3ICsxMzU0OCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICAgICAgIDs7CisgICAgICAgICAgICopCisgICAgICAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKyAgICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworQEAgLTEyODgwLDEwICsxMzYxOSwxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworIAkgICAgICAgICAgICA7OworIAkgICAgICAgICAgaWE2NCopCistCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKysJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKyAJICAgICAgICAgICAgOzsKKyAJICAgICAgICAgICopCistCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworKwkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgICAgICAgICAgIDs7CisgCSAgICAgICAgZXNhYworIAkgICAgICBmaQorQEAgLTEyOTI0LDkgKzEzNjYzLDkgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgICAgICopCisgCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorIAkgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJICAgICAgZWxzZQorLQkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgLW8gJGxpYicKKysJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAtbyAkbGliJworIAkgICAgICBmaQorIAkgICAgZmkKKyAJICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworQEAgLTEyOTk2LDIwICsxMzczNSwyMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICAgICAgcHJlbGlua19jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAJCXJtIC1yZiAkdHBsZGlyfgorIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgorLQkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAiJworKwkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKKyAJICAgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgCQlybSAtcmYgJHRwbGRpcn4KKyAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+CistCQkkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgfgorKwkJJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGB+CisgCQkkUkFOTElCICRvbGRsaWInCisgCSAgICAgIGFyY2hpdmVfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgCQlybSAtcmYgJHRwbGRpcn4KKyAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorLQkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKysJCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworIAkgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAJCXJtIC1yZiAkdHBsZGlyfgorIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CistCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworIAkgICAgICA7OworIAkgICAgKikgIyBWZXJzaW9uIDYgYW5kIGFib3ZlIHVzZSB3ZWFrIHN5bWJvbHMKKyAJICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCitAQCAtMTMyMDQsNyArMTM5NDMsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJCSAgOzsKKyAJICAgICAgICAqKQorLQkgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCSAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCQkgIDs7CisgCSAgICAgIGVzYWMKKyAKK0BAIC0xMzI1MCw3ICsxMzk4OSw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICAgIHNvbGFyaXMqKQorICAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICAgICAgQ0MqKQorKyAgICAgICAgICBDQyogfCBzdW5DQyopCisgCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisgICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcworIAkgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLXpkZWZzJworQEAgLTEzMjkxLDkgKzE0MDMwLDkgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKyAJICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0teiAke3dsfWRlZnMnCisgCSAgICAgIGlmICRDQyAtLXZlcnNpb24gfCAkR1JFUCAtdiAnXjJcLjcnID4gL2Rldi9udWxsOyB0aGVuCistCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKysJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKyAJICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkJICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisrCQkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgCisgCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworIAkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorQEAgLTEzNDI4LDYgKzE0MTY3LDEzIEBAIHByaXZhdGU6CisgfTsKKyBfTFRfRU9GCisgCisrCisrX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1M9JENGTEFHUworK2Nhc2UgIiRDQyAkQ0ZMQUdTICIgaW4gIygKKysqXCAtZmx0bypcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLWx0byIgOzsKKysqXCAtZndob3ByKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8td2hvcHIiIDs7CisrZXNhYworKworIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEzNDQxLDcgKzE0MTg3LDcgQEAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgICBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPW5vCisgCisgICBmb3IgcCBpbiBgZXZhbCAiJG91dHB1dF92ZXJib3NlX2xpbmtfY21kImA7IGRvCistICAgIGNhc2UgJHAgaW4KKysgICAgY2FzZSAke3ByZXZ9JHtwfSBpbgorIAorICAgICAtTCogfCAtUiogfCAtbCopCisgICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCitAQCAtMTM0NTAsMTMgKzE0MTk2LDIyIEBAIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAgICAgICAgICB0ZXN0ICRwID0gIi1SIjsgdGhlbgorIAkgcHJldj0kcAorIAkgY29udGludWUKKy0gICAgICAgZWxzZQorLQkgcHJldj0KKyAgICAgICAgZmkKKyAKKysgICAgICAgIyBFeHBhbmQgdGhlIHN5c3Jvb3QgdG8gZWFzZSBleHRyYWN0aW5nIHRoZSBkaXJlY3RvcmllcyBsYXRlci4KKysgICAgICAgaWYgdGVzdCAteiAiJHByZXYiOyB0aGVuCisrICAgICAgICAgY2FzZSAkcCBpbgorKyAgICAgICAgIC1MKikgZnVuY19zdHJpcG5hbWVfY25mICctTCcgJycgIiRwIjsgcHJldj0tTDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisrICAgICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1SJyAnJyAiJHAiOyBwcmV2PS1SOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKysgICAgICAgICAtbCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLWwnICcnICIkcCI7IHByZXY9LWw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworKyAgICAgICAgIGVzYWMKKysgICAgICAgZmkKKysgICAgICAgY2FzZSAkcCBpbgorKyAgICAgICA9KikgZnVuY19zdHJpcG5hbWVfY25mICc9JyAnJyAiJHAiOyBwPSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworKyAgICAgICBlc2FjCisgICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCistCSBjYXNlICRwIGluCistCSAtTCogfCAtUiopCisrCSBjYXNlICR7cHJldn0gaW4KKysJIC1MIHwgLVIpCisgCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQorIAkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKKyAJICAgIyB1c2VyIHN1cHBsaWVkIGxpYnMgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIHRoZW0uCitAQCAtMTM0NzYsOCArMTQyMzEsMTAgQEAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgCSAgIHBvc3RkZXBzX0NYWD0iJHtwb3N0ZGVwc19DWFh9ICR7cHJldn0ke3B9IgorIAkgZmkKKyAgICAgICAgZmkKKysgICAgICAgcHJldj0KKyAgICAgICAgOzsKKyAKKysgICAgKi5sdG8uJG9iamV4dCkgOzsgIyBJZ25vcmUgR0NDIExUTyBvYmplY3RzCisgICAgICouJG9iamV4dCkKKyAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdGVzdCBvYmplY3QgZmlsZSBvbmx5IHNob3dzIHVwCisgICAgICAgICMgb25jZSBpbiB0aGUgY29tcGlsZXIgb3V0cHV0LgorQEAgLTEzNTEzLDYgKzE0MjcwLDcgQEAgZWxzZQorIGZpCisgCisgJFJNIC1mIGNvbmZlc3QuJG9iamV4dAorK0NGTEFHUz0kX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1MKKyAKKyAjIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgorIGNhc2UgJGhvc3Rfb3MgaW4KK0BAIC0xMzU0OCw3ICsxNDMwNiw3IEBAIGxpbnV4KikKKyAKKyBzb2xhcmlzKikKKyAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICBDQyopCisrICBDQyogfCBzdW5DQyopCisgICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworICAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKyAgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcworQEAgLTEzNjEzLDggKzE0MzcxLDYgQEAgZmkKKyBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPQorIAorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCisgICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCisgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorQEAgLTEzNzE5LDYgKzE0NDc1LDExIEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCSAgOzsKKyAJZXNhYworIAk7OworKyAgICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCisrCSMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKysJIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKysJbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctRERMTF9FWFBPUlQnCisrCTs7CisgICAgICAgZGd1eCopCisgCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisgCSAgZWMrKyopCitAQCAtMTM4NzEsNyArMTQ2MzIsNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAk7OworICAgICAgIHNvbGFyaXMqKQorIAljYXNlICRjY19iYXNlbmFtZSBpbgorLQkgIENDKikKKysJICBDQyogfCBzdW5DQyopCisgCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisgCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworIAkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKK0BAIC0xMzkzNiwxMCArMTQ2OTcsMTcgQEAgY2FzZSAkaG9zdF9vcyBpbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggLURQSUMiCisgICAgIDs7CisgZXNhYworLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA+JjUKKy0kYXNfZWNobyAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY2OyB9CistCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWD0kbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgiID4mNjsgfQorK2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfQ1hYCisgCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KK0BAIC0xMzk5Nyw2ICsxNDc2NSw4IEBAIGZpCisgCisgCisgCisrCisrCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyAjCitAQCAtMTQxNzQsNiArMTQ5NDQsNyBAQCBmaQorICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorIAorICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKKyAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgIGFpeFs0LTldKikKKyAgICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCitAQCAtMTQxODgsMTUgKzE0OTU5LDIwIEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllCisgICAgIDs7CisgICBwdzMyKikKKyAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9IiRsdGRsbF9jbWRzIgorLSAgOzsKKysgICAgOzsKKyAgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCistICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLzsvXi4qWyBdX19ubV9fL3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKy0gIDs7CisrICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgIGNsKikgOzsKKysgICAgKikKKysgICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKysgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisgICAqKQorICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworLSAgOzsKKysgICAgOzsKKyAgIGVzYWMKKy0gIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKKyAKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxkX3NobGlic19DWFgiID4mNQorICRhc19lY2hvICIkbGRfc2hsaWJzX0NYWCIgPiY2OyB9CitAQCAtMTQ0NTksOCArMTUyMzUsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICBuZWVkX3ZlcnNpb249bm8KKyAgIG5lZWRfbGliX3ByZWZpeD1ubworIAorLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCistICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQorKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorKyAgeWVzLCopCisrICAgICMgZ2NjCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CitAQCAtMTQ0OTIsMTMgKzE1MjY5LDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICAgOzsKKyAgICAgZXNhYworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworKyAgICA7OworKworKyAgKixjbCopCisrICAgICMgTmF0aXZlIE1TVkMKKysgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKysgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKysKKysgICAgY2FzZSAkYnVpbGRfb3MgaW4KKysgICAgbWluZ3cqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKysgICAgICBsdF9zYXZlX2lmcz0kSUZTCisrICAgICAgSUZTPSc7JworKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKysgICAgICBkbworKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKysgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorKyAgICAgIGRvbmUKKysgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisrICAgICAgOzsKKysgICAgY3lnd2luKikKKysgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisrICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisrICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIDs7CisrICAgICopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisrICAgICAgZWxzZQorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIGZpCisrICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisrICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKysgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKysgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKysgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisrICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKysgICAgICAgJFJNIFwkZGxwYXRoJworKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICAgOzsKKyAKKyAgICopCisrICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgIHNobGlicGF0aF92YXI9UEFUSAorICAgOzsKK0BAIC0xNDU4OSw3ICsxNTQyNCw3IEBAIGhhaWt1KikKKyAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L2Jlb3Mvc3lzdGVtL2xpYicKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgOzsKKyAKK0BAIC0xNTA0OCw2ICsxNTg4Myw3IEBAIGZpCisgICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKyAKKyAgIENDPSRsdF9zYXZlX0NDCisrICBDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCisgICBMRENYWD0kTEQKKyAgIExEPSRsdF9zYXZlX0xECisgICBHQ0M9JGx0X3NhdmVfR0NDCitAQCAtMTgwODMsMTMgKzE4OTE5LDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b190b29sX2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2ZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyt3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J2AkRUNITyAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSdgJEVDSE8gIiRhcmNoaXZlcl9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTgxMDQsMTQgKzE4OTQ3LDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfc3lzcm9vdD0nYCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE1BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK01BTklGRVNUX1RPT0w9J2AkRUNITyAiJE1BTklGRVNUX1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIERTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIExJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE4MTQ0LDEyICsxODk5MCwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcQorIGhhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maXhfc3JjZmlsZV9wYXRoPSdgJEVDSE8gIiRmaXhfc3JjZmlsZV9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBwcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGxpbmtfY21kcz0nYCRFQ0hPICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xODE4OCw4ICsxOTAzNCw4IEBAIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlCisgY29tcGlsZXJfQ1hYPSdgJEVDSE8gIiRjb21waWxlcl9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEdDQ19DWFg9J2AkRUNITyAiJEdDQ19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1sdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPSdgJEVDSE8gIiRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE4MjE2LDEyICsxOTA2MiwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFgiIHwgJFNFRCAiJGRlbGF5XworIGhhcmRjb2RlX2F1dG9tYXRpY19DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluaGVyaXRfcnBhdGhfQ1hYPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbGlua19hbGxfZGVwbGlic19DWFg9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maXhfc3JjZmlsZV9wYXRoX0NYWD0nYCRFQ0hPICIkZml4X3NyY2ZpbGVfcGF0aF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhjbHVkZV9leHBzeW1zX0NYWD0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5jbHVkZV9leHBzeW1zX0NYWD0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcHJlbGlua19jbWRzX0NYWD0nYCRFQ0hPICIkcHJlbGlua19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGxpbmtfY21kc19DWFg9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX2xpc3Rfc3BlY19DWFg9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaGFyZGNvZGVfYWN0aW9uX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfYWN0aW9uX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWD0nYCRFQ0hPICIkY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTgyNTksOCArMTkxMDUsMTMgQEAgcmVsb2FkX2ZsYWcgXAorIE9CSkRVTVAgXAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kIFwKKyBmaWxlX21hZ2ljX2NtZCBcCisrZmlsZV9tYWdpY19nbG9iIFwKKyt3YW50X25vY2FzZWdsb2IgXAorK0RMTFRPT0wgXAorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIFwKKyBBUiBcCisgQVJfRkxBR1MgXAorK2FyY2hpdmVyX2xpc3Rfc3BlYyBcCisgU1RSSVAgXAorIFJBTkxJQiBcCisgQ0MgXAorQEAgLTE4MjcwLDEyICsxOTEyMSwxNCBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXAorK25tX2ZpbGVfbGlzdF9zcGVjIFwKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCistbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9waWMgXAorK2x0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCisgbmVlZF9sb2NrcyBcCisrTUFOSUZFU1RfVE9PTCBcCisgRFNZTVVUSUwgXAorIE5NRURJVCBcCisgTElQTyBcCitAQCAtMTgyOTEsNyArMTkxNDQsNiBAQCBub191bmRlZmluZWRfZmxhZyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCBcCisgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCistZml4X3NyY2ZpbGVfcGF0aCBcCisgZXhjbHVkZV9leHBzeW1zIFwKKyBpbmNsdWRlX2V4cHN5bXMgXAorIGZpbGVfbGlzdF9zcGVjIFwKK0BAIC0xODMxMyw4ICsxOTE2NSw4IEBAIExEX0NYWCBcCisgcmVsb2FkX2ZsYWdfQ1hYIFwKKyBjb21waWxlcl9DWFggXAorIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWCBcCistbHRfcHJvZ19jb21waWxlcl93bF9DWFggXAorIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCBcCisrbHRfcHJvZ19jb21waWxlcl93bF9DWFggXAorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWCBcCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIFwKKyBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYIFwKK0BAIC0xODMyNiw3ICsxOTE3OCw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnX0NYWCBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFggXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfQ1hYIFwKKyBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWCBcCistZml4X3NyY2ZpbGVfcGF0aF9DWFggXAorIGV4Y2x1ZGVfZXhwc3ltc19DWFggXAorIGluY2x1ZGVfZXhwc3ltc19DWFggXAorIGZpbGVfbGlzdF9zcGVjX0NYWCBcCitAQCAtMTgzNjAsNiArMTkyMTEsNyBAQCBtb2R1bGVfY21kcyBcCisgbW9kdWxlX2V4cHN5bV9jbWRzIFwKKyBleHBvcnRfc3ltYm9sc19jbWRzIFwKKyBwcmVsaW5rX2NtZHMgXAorK3Bvc3RsaW5rX2NtZHMgXAorIHBvc3RpbnN0YWxsX2NtZHMgXAorIHBvc3R1bmluc3RhbGxfY21kcyBcCisgZmluaXNoX2NtZHMgXAorQEAgLTE4Mzc0LDcgKzE5MjI2LDggQEAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFggXAorIG1vZHVsZV9jbWRzX0NYWCBcCisgbW9kdWxlX2V4cHN5bV9jbWRzX0NYWCBcCisgZXhwb3J0X3N5bWJvbHNfY21kc19DWFggXAorLXByZWxpbmtfY21kc19DWFg7IGRvCisrcHJlbGlua19jbWRzX0NYWCBcCisrcG9zdGxpbmtfY21kc19DWFg7IGRvCisgICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgorICAgICAqW1xcXFxcXFxgXFwiXFxcJF0qKQorICAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCitAQCAtMTkxNjcsNyArMjAwMjAsOCBAQCAkYXNfZWNobyBYIiRmaWxlIiB8CisgIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisgIworICMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCistIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysjICAgICAgICAgICAgICAgICBJbmMuCisgIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyAjCisgIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorQEAgLTE5MjcwLDE5ICsyMDEyNCw0MiBAQCBTUDJOTD0kbHRfbHRfU1AyTkwKKyAjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCisgTkwyU1A9JGx0X2x0X05MMlNQCisgCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZSBuYW1lcyB0byBcJGhvc3QgZm9ybWF0LgorK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKysKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0LgorK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKysKKyAjIEFuIG9iamVjdCBzeW1ib2wgZHVtcGVyLgorIE9CSkRVTVA9JGx0X09CSkRVTVAKKyAKKyAjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAorIAorLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSAiZmlsZV9tYWdpYyIuCisrIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorIGZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorIAorKyMgSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrZmlsZV9tYWdpY19nbG9iPSRsdF9maWxlX21hZ2ljX2dsb2IKKysKKysjIEZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyt3YW50X25vY2FzZWdsb2I9JGx0X3dhbnRfbm9jYXNlZ2xvYgorKworKyMgRExMIGNyZWF0aW9uIHByb2dyYW0uCisrRExMVE9PTD0kbHRfRExMVE9PTAorKworKyMgQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllcy4KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKysKKyAjIFRoZSBhcmNoaXZlci4KKyBBUj0kbHRfQVIKKysKKysjIEZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlLgorIEFSX0ZMQUdTPSRsdF9BUl9GTEFHUworIAorKyMgSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyLgorK2FyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfYXJjaGl2ZXJfbGlzdF9zcGVjCisrCisgIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KKyBTVFJJUD0kbHRfU1RSSVAKKyAKK0BAIC0xOTMxMiw2ICsyMDE4OSwxMiBAQCBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworICMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCisgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4CisgCisrIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCisrbm1fZmlsZV9saXN0X3NwZWM9JGx0X25tX2ZpbGVfbGlzdF9zcGVjCisrCisrIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KKytsdF9zeXNyb290PSRsdF9zeXNyb290CisrCisgIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCisgb2JqZGlyPSRvYmpkaXIKKyAKK0BAIC0xOTMyMSw2ICsyMDIwNCw5IEBAIE1BR0lDX0NNRD0kTUFHSUNfQ01ECisgIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KKyBuZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCisgCisrIyBNYW5pZmVzdCB0b29sLgorK01BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKKysKKyAjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCisgRFNZTVVUSUw9JGx0X0RTWU1VVElMCisgCitAQCAtMTk0MzUsMTIgKzIwMzIxLDEyIEBAIHdpdGhfZ2NjPSRHQ0MKKyAjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCisgbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZworIAorLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKy13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorLQorICMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorIHBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYworIAorKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKyt3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorKworICMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KKyBsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYworIAorQEAgLTE5NTI3LDkgKzIwNDEzLDYgQEAgaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAorICMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorIGxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKKyAKKy0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCistZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAorLQorICMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorIGFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCisgCitAQCAtMTk1NDUsNiArMjA0MjgsOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcworICMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCisgcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHMKKyAKKysjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCisrcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kcworKworICMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorIGZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYworIAorQEAgLTE5NTkxLDIxMCArMjA0NzcsMTY5IEBAIGx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorICAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CistICBzZWQgJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgY2FzZSAkeHNpX3NoZWxsIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKy0jIGNhbGw6CistIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKy0jICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKy0jICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKy0jICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0jIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKy0jIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCistIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCistZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKy0gICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In0KKy19CistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PSR7MSUlPSp9CistICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKy0gICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7CistICBlc2FjCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgKikgIyBCb3VybmUgY29tcGF0aWJsZSBmdW5jdGlvbnMuCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCistICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCistICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorLSAgZWxzZQorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCistICBmaQorLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKKy19CistCistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLSMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsyfSBpbgorLSAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworLSAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CistICBlc2FjCistfQorLQorLSMgc2VkIHNjcmlwdHM6CistbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW149XSpcKT0uKi9cMS87cScKKy1teV9zZWRfbG9uZ19hcmc9JzFzL14tW149XSo9Ly8nCistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiQxIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCistfQorLQorLV9MVF9FT0YKKy1lc2FjCistCistY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxKz1cJDIiCistfQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxPVwkJDFcJDIiCistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gIGVzYWMKKy0KKy0KKy0gIHNlZCAtbiAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS8sJHAnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKysgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKysgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisrCisrICBpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lIC9jXAorK2Z1bmNfZGlybmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Jhc2VuYW1lIC9jXAorK2Z1bmNfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAvY1wKKytmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3N0cmlwbmFtZSAoKSQvLC9efSAjIGZ1bmNfc3RyaXBuYW1lIC9jXAorK2Z1bmNfc3RyaXBuYW1lICgpXAorK3tcCisrXCAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlXAorK1wgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LlwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In1cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zdHJpcG5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X2xvbmdfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9sb25nX29wdCAvY1wKKytmdW5jX3NwbGl0X2xvbmdfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn1cCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz0kezEjKj19XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X2xvbmdfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCAvY1wKKytmdW5jX3NwbGl0X3Nob3J0X29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P31cCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X3Nob3J0X29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbG8ybyAoKSQvLC9efSAjIGZ1bmNfbG8ybyAvY1wKKytmdW5jX2xvMm8gKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOztcCisrXCAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbG8ybyBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfeGZvcm0gKCkkLywvXn0gIyBmdW5jX3hmb3JtIC9jXAorK2Z1bmNfeGZvcm0gKClcCisre1wKKysgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY194Zm9ybSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXJpdGggKCkkLywvXn0gIyBmdW5jX2FyaXRoIC9jXAorK2Z1bmNfYXJpdGggKClcCisre1wKKysgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FyaXRoIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sZW4gKCkkLywvXn0gIyBmdW5jX2xlbiAvY1wKKytmdW5jX2xlbiAoKVwKKyt7XAorKyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbGVuIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrZmkKKysKKytpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZCAvY1wKKytmdW5jX2FwcGVuZCAoKVwKKyt7XAorKyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kX3F1b3RlZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCAvY1wKKytmdW5jX2FwcGVuZF9xdW90ZWQgKClcCisre1wKKytcICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iXAorK1wgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kX3F1b3RlZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JworKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2Vsc2UKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytmaQorKworK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mMjt9CisrZmkKKysKKysKKysgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisgICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgICBjaG1vZCAreCAiJG9maWxlIgorIAorQEAgLTE5ODIyLDEyICsyMDY2NywxMiBAQCB3aXRoX2djYz0kR0NDX0NYWAorICMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KKyBub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWAorIAorLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKy13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9DWFgKKy0KKyAjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KKyBwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCisgCisrIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsX0NYWAorKworICMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KKyBsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFgKKyAKK0BAIC0xOTkxNCw5ICsyMDc1OSw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGhfQ1hYCisgIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCisgbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlic19DWFgKKyAKKy0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCistZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aF9DWFgKKy0KKyAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFgKKyAKK0BAIC0xOTkzMiw2ICsyMDc3NCw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zX0NYWAorICMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCisgcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHNfQ1hYCisgCisrIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHNfQ1hYCisrCisgIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCisgZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjX0NYWAorIAorZGlmZiAtLWdpdCBhL2xpYnRvb2wubTQgYi9saWJ0b29sLm00CitpbmRleCAyNGQxM2YzNDQwLi5lNDVmZGM2OTk4IDEwMDY0NAorLS0tIGEvbGlidG9vbC5tNAorKysrIGIvbGlidG9vbC5tNAorQEAgLTEsNyArMSw4IEBACisgIyBsaWJ0b29sLm00IC0gQ29uZmlndXJlIGxpYnRvb2wgZm9yIHRoZSBob3N0IHN5c3RlbS4gLSotQXV0b2NvbmYtKi0KKyAjCisgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKy0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyMgICAgICAgICAgICAgICAgIEluYy4KKyAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorICMKKyAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCitAQCAtMTAsNyArMTEsOCBAQAorIAorIG00X2RlZmluZShbX0xUX0NPUFlJTkddLCBbZG5sCisgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKy0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyMgICAgICAgICAgICAgICAgIEluYy4KKyAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorICMKKyAjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCitAQCAtMzcsNyArMzksNyBAQCBtNF9kZWZpbmUoW19MVF9DT1BZSU5HXSwgW2RubAorICMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgXSkKKyAKKy0jIHNlcmlhbCA1NiBMVF9JTklUCisrIyBzZXJpYWwgNTcgTFRfSU5JVAorIAorIAorICMgTFRfUFJFUkVRKFZFUlNJT04pCitAQCAtOTIsNyArOTQsOCBAQCBfTFRfU0VUX09QVElPTlMoWyQwXSwgWyQxXSkKKyBMSUJUT09MX0RFUFM9IiRsdG1haW4iCisgCisgIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KKy1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKytMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpciknCisrTElCVE9PTD0iJExJQlRPT0wvJHtob3N0X2FsaWFzfS1saWJ0b29sIgorIEFDX1NVQlNUKExJQlRPT0wpZG5sCisgCisgX0xUX1NFVFVQCitAQCAtMTY2LDEwICsxNjksMTMgQEAgX0xUX0RFQ0woW10sIFtleGVleHRdLCBbMF0sIFtFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIildKWRubAorIGRubAorIG00X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorIG00X3JlcXVpcmUoW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10pZG5sCisrbTRfcmVxdWlyZShbX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlNdKWRubAorIG00X3JlcXVpcmUoW19MVF9DTURfUkVMT0FEXSlkbmwKKyBtNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9EXSlkbmwKKyttNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQl0pZG5sCisgbTRfcmVxdWlyZShbX0xUX0NNRF9PTERfQVJDSElWRV0pZG5sCisgbTRfcmVxdWlyZShbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10pZG5sCisrbTRfcmVxdWlyZShbX0xUX1dJVEhfU1lTUk9PVF0pZG5sCisgCisgX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoWworICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKK0BAIC0xOTksNyArMjA1LDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKK0BAIC02MzIsNyArNjM4LDcgQEAgbTRfaWZzZXQoW0FDX1BBQ0tBR0VfTkFNRV0sIFtBQ19QQUNLQUdFX05BTUUgXSljb25maWcubHRbXWRubAorIG00X2lmc2V0KFtBQ19QQUNLQUdFX1ZFUlNJT05dLCBbIEFDX1BBQ0tBR0VfVkVSU0lPTl0pCisgY29uZmlndXJlZCBieSAkWzBdLCBnZW5lcmF0ZWQgYnkgbTRfUEFDS0FHRV9TVFJJTkcuCisgCistQ29weXJpZ2h0IChDKSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK0NvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBUaGlzIGNvbmZpZy5sdCBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGdpdmVzIHVubGltaXRlZCBwZXJtaXNpb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKKyAKK0BAIC03NDYsMTUgKzc1MiwxMiBAQCBfTFRfRU9GCisgICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKy0gIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisrICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisrICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorIAorLSAgX0xUX1BST0dfWFNJX1NIRUxMRk5TCisrICBfTFRfUFJPR19SRVBMQUNFX1NIRUxMRk5TCisgCistICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisrICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICAgY2htb2QgK3ggIiRvZmlsZSIKKyBdLAorQEAgLTk4MCw2ICs5ODMsOCBAQCBfTFRfRU9GCisgICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mQVNfTUVTU0FHRV9MT0dfRkQKKysgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKysgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKKyBpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorIF9MVF9FT0YKK0BAIC0xMDY5LDMwICsxMDc0LDQxIEBAIG00X2RlZnVuKFtfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFU10sCisgICBmaQorIF0pCisgCistIyBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFtUQUdOQU1FXSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIExpbmtzIGEgbWluaW1hbCBwcm9ncmFtIGFuZCBjaGVja3MgdGhlIGV4ZWN1dGFibGUKKyAjIGZvciB0aGUgc3lzdGVtIGRlZmF1bHQgaGFyZGNvZGVkIGxpYnJhcnkgcGF0aC4gSW4gbW9zdCBjYXNlcywKKyAjIHRoaXMgaXMgL3Vzci9saWI6L2xpYiwgYnV0IHdoZW4gdGhlIE1QSSBjb21waWxlcnMgYXJlIHVzZWQKKyAjIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29tbXVuaWNhdGlvbiBhbmQgTVBJIGxpYnMgYXJlIGluY2x1ZGVkIHRvby4KKyAjIElmIHdlIGRvbid0IGZpbmQgYW55dGhpbmcsIHVzZSB0aGUgZGVmYXVsdCBsaWJyYXJ5IHBhdGggYWNjb3JkaW5nCisgIyB0byB0aGUgYWl4IGxkIG1hbnVhbC4KKysjIFN0b3JlIHRoZSByZXN1bHRzIGZyb20gdGhlIGRpZmZlcmVudCBjb21waWxlcnMgZm9yIGVhY2ggVEFHTkFNRS4KKysjIEFsbG93IHRvIG92ZXJyaWRlIHRoZW0gZm9yIGFsbCB0YWdzIHRocm91Z2ggbHRfY3ZfYWl4X2xpYnBhdGguCisgbTRfZGVmdW4oW19MVF9TWVNfTU9EVUxFX1BBVEhfQUlYXSwKKyBbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKKy1BQ19MSU5LX0lGRUxTRShBQ19MQU5HX1BST0dSQU0sWworLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maV0sW10pCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisraWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgQUNfQ0FDSEVfVkFMKFtfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKV0sCisrICBbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTV0sWworKyAgbHRfYWl4X2xpYnBhdGhfc2VkPSdbCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH1dJworKyAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkiOyB0aGVuCisrICAgIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmldLFtdKQorKyAgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pIjsgdGhlbgorKyAgICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrICBdKQorKyAgYWl4X2xpYnBhdGg9JF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pCisrZmkKKyBdKSMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKyAKKyAKK0BAIC0xMTE3LDcgKzExMzMsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworIAorIEFDX01TR19DSEVDS0lORyhbaG93IHRvIHByaW50IHN0cmluZ3NdKQorICMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgorLWlmIHRlc3QgIlhgcHJpbnQgLXIgLS0gLW4gMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisraWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisgICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgIEVDSE89J3ByaW50IC1yIC0tJworIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCitAQCAtMTE2MSw2ICsxMTc3LDM5IEBAIF9MVF9ERUNMKFtdLCBbRUNIT10sIFsxXSwgW0FuIGVjaG8gcHJvZ3JhbSB0aGF0IHByb3RlY3RzIGJhY2tzbGFzaGVzXSkKKyBdKSMgX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKKyAKKyAKKysjIF9MVF9XSVRIX1NZU1JPT1QKKysjIC0tLS0tLS0tLS0tLS0tLS0KKytBQ19ERUZVTihbX0xUX1dJVEhfU1lTUk9PVF0sCisrW0FDX01TR19DSEVDS0lORyhbZm9yIHN5c3Jvb3RdKQorK0FDX0FSR19XSVRIKFtsaWJ0b29sLXN5c3Jvb3RdLAorK1sgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3RbPURJUl0gU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKKysgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS5dLAorK1tdLCBbd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm9dKQorKworK2RubCBsdF9zeXNyb290IHdpbGwgYWx3YXlzIGJlIHBhc3NlZCB1bnF1b3RlZC4gIFdlIHF1b3RlIGl0IGhlcmUKKytkbmwgaW4gY2FzZSB0aGUgdXNlciBwYXNzZWQgYSBkaXJlY3RvcnkgbmFtZS4KKytsdF9zeXNyb290PQorK2Nhc2UgJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0gaW4gIygKKysgeWVzKQorKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorKyAgIGZpCisrICAgOzsgIygKKysgLyopCisrICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrICAgOzsgIygKKysgbm98JycpCisrICAgOzsgIygKKysgKikKKysgICBBQ19NU0dfUkVTVUxUKFske3dpdGhfbGlidG9vbF9zeXNyb290fV0pCisrICAgQUNfTVNHX0VSUk9SKFtUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguXSkKKysgICA7OworK2VzYWMKKysKKysgQUNfTVNHX1JFU1VMVChbJHtsdF9zeXNyb290Oi1ub31dKQorK19MVF9ERUNMKFtdLCBbbHRfc3lzcm9vdF0sIFswXSwgW1RoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgXWRubAorK1tkZXBlbmRlbnQgbGlicmFyaWVzLCBhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLl0pXSkKKysKKyAjIF9MVF9FTkFCTEVfTE9DSworICMgLS0tLS0tLS0tLS0tLS0tCisgbTRfZGVmdW4oW19MVF9FTkFCTEVfTE9DS10sCitAQCAtMTMyMCwxNCArMTM2OSw0NyBAQCBuZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKyBdKSMgX0xUX0VOQUJMRV9MT0NLCisgCisgCisrIyBfTFRfUFJPR19BUgorKyMgLS0tLS0tLS0tLS0KKyttNF9kZWZ1bihbX0xUX1BST0dfQVJdLAorK1tBQ19DSEVDS19UT09MUyhBUiwgW2FyXSwgZmFsc2UpCisrOiAke0FSPWFyfQorKzogJHtBUl9GTEFHUz1jcnV9CisrX0xUX0RFQ0woW10sIFtBUl0sIFsxXSwgW1RoZSBhcmNoaXZlcl0pCisrX0xUX0RFQ0woW10sIFtBUl9GTEFHU10sIFsxXSwgW0ZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlXSkKKysKKytBQ19DQUNIRV9DSEVDSyhbZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnRdLCBbbHRfY3ZfYXJfYXRfZmlsZV0sCisrICBbbHRfY3ZfYXJfYXRfZmlsZT1ubworKyAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU1dLAorKyAgICAgW2VjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiZBU19NRVNTQUdFX0xPR19GRCcKKysgICAgICBBQ19UUllfRVZBTChbbHRfYXJfdHJ5XSkKKysgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKysJQUNfVFJZX0VWQUwoW2x0X2FyX3RyeV0pCisrCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisrICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQorKyAgICAgXSkKKysgIF0pCisrCisraWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQorK2Vsc2UKKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQorK2ZpCisrX0xUX0RFQ0woW10sIFthcmNoaXZlcl9saXN0X3NwZWNdLCBbMV0sCisrICBbSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyXSkKKytdKSMgX0xUX1BST0dfQVIKKysKKysKKyAjIF9MVF9DTURfT0xEX0FSQ0hJVkUKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyBtNF9kZWZ1bihbX0xUX0NNRF9PTERfQVJDSElWRV0sCistW0FDX0NIRUNLX1RPT0woQVIsIGFyLCBmYWxzZSkKKy10ZXN0IC16ICIkQVIiICYmIEFSPWFyCistdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKy1fTFRfREVDTChbXSwgW0FSXSwgWzFdLCBbVGhlIGFyY2hpdmVyXSkKKy1fTFRfREVDTChbXSwgW0FSX0ZMQUdTXSwgWzFdKQorK1tfTFRfUFJPR19BUgorIAorIEFDX0NIRUNLX1RPT0woU1RSSVAsIHN0cmlwLCA6KQorIHRlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgorQEAgLTE2MjMsNyArMTcwNSw3IEBAIGVsc2UKKyAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorLVsjbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSIKKytbI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorICNpbmNsdWRlICJjb25mZGVmcy5oIgorIAorICNpZiBIQVZFX0RMRkNOX0gKK0BAIC0xNjY3LDEwICsxNzQ5LDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMjIxMCw4ICsyMjkyLDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgbmVlZF92ZXJzaW9uPW5vCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAKKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKysgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKysgIHllcywqKQorKyAgICAjIGdjYworICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorQEAgLTIyNDQsMTMgKzIzMjcsNzEgQEAgbTRfaWYoWyQxXSwgW10sWworICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKysgICAgOzsKKysKKysgICosY2wqKQorKyAgICAjIE5hdGl2ZSBNU1ZDCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKysKKysgICAgY2FzZSAkYnVpbGRfb3MgaW4KKysgICAgbWluZ3cqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKysgICAgICBsdF9zYXZlX2lmcz0kSUZTCisrICAgICAgSUZTPSc7JworKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKysgICAgICBkbworKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKysgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorKyAgICAgIGRvbmUKKysgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbW2EtekEtWl1dXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKysgICAgICA7OworKyAgICBjeWd3aW4qKQorKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKysgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKysgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisrICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgWyRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbF07IHRoZW4KKysgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICBmaQorKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKysgICAgICA7OworKyAgICBlc2FjCisrCisrICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKysgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisrICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisrICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisrICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisrICAgICAgICRSTSBcJGRscGF0aCcKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgIDs7CisgCisgICAqKQorKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgIHNobGlicGF0aF92YXI9UEFUSAorICAgOzsKK0BAIC0yMzQyLDcgKzI0ODMsNyBAQCBoYWlrdSopCisgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9iZW9zL3N5c3RlbS9saWInCisrICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIDs7CisgCitAQCAtMjk1MCw2ICszMDkxLDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCisgZXNhYworIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyBjYXNlICRob3N0X29zIGluCisrICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCisrICAgIGZpCisrICAgIDs7CisgICBkYXJ3aW4qKQorICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK0BAIC0zMDE2LDcgKzMxNjIsOCBAQCBtaW5ndyogfCBwdzMyKikKKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgICBlbHNlCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICAgZmkKKyAgIDs7CitAQCAtMzE2Nyw2ICszMzE0LDIxIEBAIHRwZiopCisgICA7OworIGVzYWMKKyBdKQorKworK2ZpbGVfbWFnaWNfZ2xvYj0KKyt3YW50X25vY2FzZWdsb2I9bm8KKytpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgbWluZ3cqIHwgcHczMiopCisrICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisrICAgIGVsc2UKKysgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tbXDFdXVwvW1tcMV1dXC9nOy9nImAKKysgICAgZmkKKysgICAgOzsKKysgIGVzYWMKKytmaQorKworIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAorIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorQEAgLTMxNzQsNyArMzMzNiwxMSBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKyBfTFRfREVDTChbXSwgW2RlcGxpYnNfY2hlY2tfbWV0aG9kXSwgWzFdLAorICAgICBbTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHNdKQorIF9MVF9ERUNMKFtdLCBbZmlsZV9tYWdpY19jbWRdLCBbMV0sCistICAgIFtDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIl0pCisrICAgIFtDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKKytfTFRfREVDTChbXSwgW2ZpbGVfbWFnaWNfZ2xvYl0sIFsxXSwKKysgICAgW0hvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKKytfTFRfREVDTChbXSwgW3dhbnRfbm9jYXNlZ2xvYl0sIFsxXSwKKysgICAgW0ZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIl0pCisgXSkjIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QKKyAKKyAKK0BAIC0zMjc3LDYgKzM0NDMsNjcgQEAgZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorIGRubCBBQ19ERUZVTihbQU1fUFJPR19OTV0sIFtdKQorIGRubCBBQ19ERUZVTihbQUNfUFJPR19OTV0sIFtdKQorIAorKyMgX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUIKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBob3cgdG8gZGV0ZXJtaW5lIHRoZSBuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeQorKyMgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgbGluayBsaWJyYXJ5LgorKyMgIC0tIFBPUlRNRSBmaWxsIGluIHdpdGggdGhlIGR5bmFtaWMgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MKKyttNF9kZWZ1bihbX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUJdLAorK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pCisrbTRfcmVxdWlyZShbX0xUX0RFQ0xfT0JKRFVNUF0pCisrbTRfcmVxdWlyZShbX0xUX0RFQ0xfRExMVE9PTF0pCisrQUNfQ0FDSEVfQ0hFQ0soW2hvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXNdLAorK2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kLAorK1tsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKysKKytjYXNlICRob3N0X29zIGluCisrY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAorKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisrICAqLS1pZGVudGlmeS1zdHJpY3QqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKKysgICAgOzsKKysgICopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjaworKyAgICA7OworKyAgZXNhYworKyAgOzsKKysqKQorKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCisrICA7OworK2VzYWMKKytdKQorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKysKKytfTFRfREVDTChbXSwgW3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kXSwgWzFdLAorKyAgICBbQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllc10pCisrXSkjIF9MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCCisrCisrCisrIyBfTFRfUEFUSF9NQU5JRkVTVF9UT09MCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBsb2NhdGUgdGhlIG1hbmlmZXN0IHRvb2wKKyttNF9kZWZ1bihbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0sCisrW0FDX0NIRUNLX1RPT0woTUFOSUZFU1RfVE9PTCwgbXQsIDopCisrdGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKKytBQ19DQUNIRV9DSEVDSyhbaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sXSwgW2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbF0sCisrICBbbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiZBU19NRVNTQUdFX0xPR19GRAorKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisrICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisrICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKKysgIGZpCisrICBybSAtZiBjb25mdGVzdCpdKQorK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCisrICBNQU5JRkVTVF9UT09MPToKKytmaQorK19MVF9ERUNMKFtdLCBbTUFOSUZFU1RfVE9PTF0sIFsxXSwgW01hbmlmZXN0IHRvb2xdKWRubAorK10pIyBfTFRfUEFUSF9NQU5JRkVTVF9UT09MCisrCisgCisgIyBMVF9MSUJfTQorICMgLS0tLS0tLS0KK0BAIC0zNDAzLDggKzM2MzAsOCBAQCBlc2FjCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKyAKKyAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwobGliW1teIF1dKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpW1sgXV0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpW1sgXV0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKGxpYltbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisgCisgIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCisgb3B0X2NyPQorQEAgLTM0NDAsNiArMzY2Nyw3IEBAIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKyAgIGVsc2UKKyAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKltbCSBdXVwoJHN5bWNvZGUkc3ltY29kZSpcKVtbCSBdXVtbCSBdXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgIGZpCisrICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisgCisgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgIHBpcGVfd29ya3M9bm8KK0BAIC0zNDczLDYgKzM3MDEsMTggQEAgX0xUX0VPRgorICAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisrLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisrI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKysvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKysgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisrIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUCisrI2VsaWYgZGVmaW5lZChfX29zZl9fKQorKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworKyMgZGVmaW5lIExUQCZ0QF9ETFNZTV9DT05TVAorKyNlbHNlCisrIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUIGNvbnN0CisrI2VuZGlmCisrCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisgI2VuZGlmCitAQCAtMzQ4NCw3ICszNzI0LDcgQEAgX0xUX0VPRgorIAkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorIAorIC8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KKy1jb25zdCBzdHJ1Y3QgeworK0xUQCZ0QF9ETFNZTV9DT05TVCBzdHJ1Y3QgeworICAgY29uc3QgY2hhciAqbmFtZTsKKyAgIHZvaWQgICAgICAgKmFkZHJlc3M7CisgfQorQEAgLTM1MTAsMTUgKzM3NTAsMTUgQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyBfTFRfRU9GCisgCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKyAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKy0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorLQkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKyAJICBDRkxBR1M9IiRDRkxBR1MkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIgorIAkgIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAJICAgIHBpcGVfd29ya3M9eWVzCisgCSAgZmkKKy0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisrCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisgCWVsc2UKKyAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECisgCWZpCitAQCAtMzU1MSw2ICszNzkxLDEzIEBAIGVsc2UKKyAgIEFDX01TR19SRVNVTFQob2spCisgZmkKKyAKKysjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KKytpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW1tAXV1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytmaQorKworIF9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3BpcGVdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sIFsxXSwKKyAgICAgW1Rha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXNdKQorIF9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NkZWNsXSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsXSwgWzFdLAorQEAgLTM1NjEsNiArMzgwOCw4IEBAIF9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzXSwKKyBfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4XSwKKyAgICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLCBbMV0sCisgICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZF0pCisrX0xUX0RFQ0woW10sIFtubV9maWxlX2xpc3Rfc3BlY10sIFsxXSwKKysgICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgJE5NXSkKKyBdKSAjIF9MVF9DTURfR0xPQkFMX1NZTUJPTFMKKyAKKyAKK0BAIC0zNTcyLDcgKzM4MjEsNiBAQCBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0KKyBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQorIAorLUFDX01TR19DSEVDS0lORyhbZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUNdKQorIG00X2lmKFskMV0sIFtDWFhdLCBbCisgICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCisgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorQEAgLTM2NzgsNiArMzkyNiwxMiBAQCBtNF9pZihbJDFdLCBbQ1hYXSwgWworIAkgIDs7CisgCWVzYWMKKyAJOzsKKysgICAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqIHwgY2VnY2MqKQorKwkjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisrCSMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisrCW00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKysJICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKysJOzsKKyAgICAgICBkZ3V4KikKKyAJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAJICBlYysrKikKK0BAIC0zODMwLDcgKzQwODQsNyBAQCBtNF9pZihbJDFdLCBbQ1hYXSwgWworIAk7OworICAgICAgIHNvbGFyaXMqKQorIAljYXNlICRjY19iYXNlbmFtZSBpbgorLQkgIENDKikKKysJICBDQyogfCBzdW5DQyopCisgCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisgCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworIAkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKK0BAIC00MDUzLDYgKzQzMDcsMTIgQEAgbTRfaWYoWyQxXSwgW0NYWF0sIFsKKyAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctLXNoYXJlZCcKKyAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctLXN0YXRpYycKKyAJOzsKKysgICAgICBuYWdmb3IqKQorKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsLVdsLCwnCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKysJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKysJOzsKKyAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorQEAgLTQxMTUsNyArNDM3NSw3IEBAIG00X2lmKFskMV0sIFtDWFhdLCBbCisgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQorKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKyAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgICopCisgCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJzs7CitAQCAtNDE3Miw5ICs0NDMyLDExIEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpQCZ0QG00X2lmKFskMV0sW10sWyAtRFBJQ10sW200X2lmKFskMV0sW0NYWF0sWyAtRFBJQ10sW10pXSkiCisgICAgIDs7CisgZXNhYworLUFDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSldKQorLV9MVF9UQUdERUNMKFt3bF0sIFtsdF9wcm9nX2NvbXBpbGVyX3dsXSwgWzFdLAorLQlbSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlcl0pCisrCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDXSwKKysgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljLCAkMSldLAorKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKT0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpXSkKKytfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKQorIAorICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCitAQCAtNDE5Myw2ICs0NDU1LDggQEAgZmkKKyBfTFRfVEFHREVDTChbcGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9waWNdLCBbMV0sCisgCVtBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHNdKQorIAorK19MVF9UQUdERUNMKFt3bF0sIFtsdF9wcm9nX2NvbXBpbGVyX3dsXSwgWzFdLAorKwlbSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlcl0pCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyAjCitAQCAtNDIxMyw2ICs0NDc3LDcgQEAgX0xUX1RBR0RFQ0woW2xpbmtfc3RhdGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9zdGF0aWNdLCBbMV0sCisgbTRfZGVmdW4oW19MVF9MSU5LRVJfU0hMSUJTXSwKKyBbQUNfUkVRVUlSRShbTFRfUEFUSF9MRF0pZG5sCisgQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCisrbTRfcmVxdWlyZShbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0pZG5sCisgbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCisgbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorIG00X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitAQCAtNDIyMSw2ICs0NDg2LDcgQEAgbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCisgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorIG00X2lmKFskMV0sIFtDWFhdLCBbCisgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCisgICBjYXNlICRob3N0X29zIGluCisgICBhaXhbWzQtOV1dKikKKyAgICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCitAQCAtNDIzNSwxNSArNDUwMSwyMCBAQCBtNF9pZihbJDFdLCBbQ1hYXSwgWworICAgICA7OworICAgcHczMiopCisgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSIkbHRkbGxfY21kcyIKKy0gIDs7CisrICAgIDs7CisgICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorLSAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLzsvXi4qW1sgXV1fX25tX18vcy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCistICA7OworKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICBjbCopIDs7CisrICAgICopCisrICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS87cy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZSddCisrICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworICAgKikKKyAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKy0gIDs7CisrICAgIDs7CisgICBlc2FjCistICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJ10KKyBdLCBbCisgICBydW5wYXRoX3Zhcj0KKyAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KK0BAIC00NDExLDcgKzQ2ODIsOCBAQCBfTFRfRU9GCisgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworICAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW1tBSVRXXV1bWyBdXS9zLy4qW1sgXV0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLztzL14uKltbIF1dX19ubV9fXChbW14gXV0qXClbWyBdXVtbXiBdXSovXDEgREFUQS87L15JW1sgXV0vZDsvXltbQUlUV11dW1sgXV0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJ10KKyAKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKK0BAIC00NTEwLDEyICs0NzgyLDEyIEBAIF9MVF9FT0YKKyAJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisgCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CisgCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKysJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworIAkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKysJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworIAkgIGZpCisgCSAgOzsKKyAJZXNhYworQEAgLTQ1MjksOCArNDgwMSw4IEBAIF9MVF9FT0YKKyAJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKyAJd2xhcmM9CisgICAgICAgZWxzZQorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZmkKKyAgICAgICA7OworIAorQEAgLTQ1NDgsOCArNDgyMCw4IEBAIF9MVF9FT0YKKyAKKyBfTFRfRU9GCisgICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICBmaQorQEAgLTQ1OTUsOCArNDg2Nyw4IEBAIF9MVF9FT0YKKyAKKyAgICAgKikKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICBmaQorQEAgLTQ3MjYsNyArNDk5OCw3IEBAIF9MVF9FT0YKKyAJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSctYmVyb2snCisgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0gICAgICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisrICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgICBlbHNlCitAQCAtNDczNyw3ICs1MDA5LDcgQEAgX0xUX0VPRgorIAllbHNlCisgCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAJICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0JIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisrCSBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorIAkgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKyAJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCitAQCAtNDc4MSwyMCArNTA1Myw2MyBAQCBfTFRfRU9GCisgICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKKy0gICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorLSAgICAgIGxpYmV4dD1saWIKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKy0gICAgICBzaHJleHRfY21kcz0iLmRsbCIKKy0gICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCistICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCistICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKy0gICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKy0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorLSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCistICAgICAgX0xUX1RBR1ZBUihmaXhfc3JjZmlsZV9wYXRoLCAkMSk9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworLSAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgY2wqKQorKwkjIE5hdGl2ZSBNU1ZDCisrCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKysJX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKysJX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPSdAJworKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGVsc2UKKysJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZml+CisrCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgIGxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKysJX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisrCV9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW1tBSVRXXV1bWyBdXS9zLy4qW1sgXV0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysJIyBEb24ndCB1c2UgcmFubGliCisrCV9MVF9UQUdWQVIob2xkX3Bvc3RpbnN0YWxsX2NtZHMsICQxKT0nY2htb2QgNjQ0ICRvbGRsaWInCisrCV9MVF9UQUdWQVIocG9zdGxpbmtfY21kcywgJDEpPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKysJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICopCisrCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgOzsKKysJICBlc2FjfgorKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisrCSAgZmknCisrCTs7CisrICAgICAgKikKKysJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisrCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisrCV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorKwlfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworKwlfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKysJOzsKKysgICAgICBlc2FjCisgICAgICAgOzsKKyAKKyAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKK0BAIC00ODI4LDcgKzUxNDMsNyBAQCBfTFRfRU9GCisgCisgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KK0BAIC00ODM2LDcgKzUxNTEsNyBAQCBfTFRfRU9GCisgCisgICAgIGhwdXg5KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBlbHNlCisgCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGZpCitAQCAtNDg1Miw3ICs1MTY3LDcgQEAgX0xUX0VPRgorIAorICAgICBocHV4MTAqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBlbHNlCisgCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICAgZmkKK0BAIC00ODc2LDEwICs1MTkxLDEwIEBAIF9MVF9FT0YKKyAJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAlpYTY0KikKKy0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJKikKKy0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWVzYWMKKyAgICAgICBlbHNlCitAQCAtNDkyNiwxNiArNTI0MSwzMSBAQCBfTFRfRU9GCisgCisgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKyAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorLSAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKy0gICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKy0gICAgICAgIEFDX0xJTktfSUZFTFNFKGludCBmb28odm9pZCkge30sCistICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCistICAgICAgICApCistICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgorKwlBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbF0sCisrCSAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sXSwKKysJICBbc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKysJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorKwkgICBBQ19MSU5LX0lGRUxTRSgKKysJICAgICBbQUNfTEFOR19TT1VSQ0UoCisrCSAgICAgICAgW0FDX0xBTkdfQ0FTRShbQ10sIFtbaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfV1dLAorKwkJCSAgICAgIFtDKytdLCBbW2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH1dXSwKKysJCQkgICAgICBbRm9ydHJhbiA3N10sIFtbCisrICAgICAgc3Vicm91dGluZSBmb28KKysgICAgICBlbmRdXSwKKysJCQkgICAgICBbRm9ydHJhbl0sIFtbCisrICAgICAgc3Vicm91dGluZSBmb28KKysgICAgICBlbmRdXSldKV0sCisrCSAgICAgIFtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXNdLAorKwkgICAgICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm9dKQorKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyJdKQorKwlpZiB0ZXN0ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID0geWVzOyB0aGVuCisrICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlmaQorICAgICAgIGVsc2UKKyAJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKK0BAIC01MDIwLDcgKzUzNTAsNyBAQCBfTFRfRU9GCisgICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICBlbHNlCisgCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKK0BAIC01MDM5LDkgKzUzNjksOSBAQCBfTFRfRU9GCisgICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXogZGVmcycKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAl3bGFyYz0nJHt3bH0nCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CistCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICBlbHNlCisgCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorIAkqIkNvbXBpbGVycyA1LjAiKikKK0BAIC01MzEzLDggKzU2NDMsNiBAQCBfTFRfVEFHREVDTChbXSwgW2luaGVyaXRfcnBhdGhdLCBbMF0sCisgICAgIHRvIHJ1bnRpbWUgcGF0aCBsaXN0XSkKKyBfTFRfVEFHREVDTChbXSwgW2xpbmtfYWxsX2RlcGxpYnNdLCBbMF0sCisgICAgIFtXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXNdKQorLV9MVF9UQUdERUNMKFtdLCBbZml4X3NyY2ZpbGVfcGF0aF0sIFsxXSwKKy0gICAgW0ZpeCB0aGUgc2hlbGwgdmFyaWFibGUgJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlcl0pCisgX0xUX1RBR0RFQ0woW10sIFthbHdheXNfZXhwb3J0X3N5bWJvbHNdLCBbMF0sCisgICAgIFtTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWRdKQorIF9MVF9UQUdERUNMKFtdLCBbZXhwb3J0X3N5bWJvbHNfY21kc10sIFsyXSwKK0BAIC01MzI1LDYgKzU2NTMsOCBAQCBfTFRfVEFHREVDTChbXSwgW2luY2x1ZGVfZXhwc3ltc10sIFsxXSwKKyAgICAgW1N5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZF0pCisgX0xUX1RBR0RFQ0woW10sIFtwcmVsaW5rX2NtZHNdLCBbMl0sCisgICAgIFtDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlc10pCisrX0xUX1RBR0RFQ0woW10sIFtwb3N0bGlua19jbWRzXSwgWzJdLAorKyAgICBbQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtc10pCisgX0xUX1RBR0RFQ0woW10sIFtmaWxlX2xpc3Rfc3BlY10sIFsxXSwKKyAgICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlc10pCisgZG5sIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCitAQCAtNTQyNiw2ICs1NzU2LDcgQEAgQ0M9IiRsdF9zYXZlX0NDIgorIG00X2RlZnVuKFtfTFRfTEFOR19DWFhfQ09ORklHXSwKKyBbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCisgbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorK200X3JlcXVpcmUoW19MVF9QQVRIX01BTklGRVNUX1RPT0xdKWRubAorIGlmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCAiWCRDWFgiICE9ICJYbm8iICYmCisgICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAorICAgICAodGVzdCAiWCRDWFgiICE9ICJYZysrIikpKSA7IHRoZW4KK0BAIC01NDg3LDYgKzU4MTgsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorIAorICAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgIGx0X3NhdmVfQ0M9JENDCisrICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgICBsdF9zYXZlX0xEPSRMRAorICAgbHRfc2F2ZV9HQ0M9JEdDQworICAgR0NDPSRHWFgKK0BAIC01NTA0LDYgKzU4MzYsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAgZmkKKyAgIHRlc3QgLXogIiR7TERDWFgrc2V0fSIgfHwgTEQ9JExEQ1hYCisgICBDQz0ke0NYWC0iYysrIn0KKysgIENGTEFHUz0kQ1hYRkxBR1MKKyAgIGNvbXBpbGVyPSRDQworICAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorQEAgLTU2NjcsNyArNjAwMCw3IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICAgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJworICAgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkKKyAgICAgICAgICAgIyBleGVjdXRhYmxlLgorLSAgICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorKyAgICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAKKyAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCitAQCAtNTY3OSw3ICs2MDEyLDcgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgZWxzZQorIAkgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgCSAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCistCSAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorKwkgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKyAJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAkgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKyAJICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KK0BAIC01NzIxLDI5ICs2MDU0LDc1IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICAgICAgICA7OworIAorICAgICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKy0gICAgICAgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCistICAgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKy0gICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtYWxsLXN5bWJvbHMnCistICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKy0gICAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKy0gICAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworLQorLSAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorLSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCistICAgICAgICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKy0gICAgICAgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKy0gICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCistCSAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CistICAgICAgICAgIGVsc2UKKy0JICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworLQkgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKy0gICAgICAgICAgZml+CistICAgICAgICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKy0gICAgICAgIGVsc2UKKy0gICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworLSAgICAgICAgZmkKKy0gICAgICAgIDs7CisrCWNhc2UgJEdYWCwkY2NfYmFzZW5hbWUgaW4KKysJLGNsKiB8IG5vLGNsKikKKysJICAjIE5hdGl2ZSBNU1ZDCisrCSAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworKwkgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCisrCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisrCSAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKysJICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9J0AnCisrCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJICBsaWJleHQ9bGliCisrCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCSAgc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JworKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgICAkU0VEIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICAgIGVsc2UKKysJICAgICAgJFNFRCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgICBmaX4KKysJICAgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKysJICAgIGxpbmtuYW1lcz0nCisrCSAgIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorKwkgICMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCisrCSAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisrCSAgIyBEb24ndCB1c2UgcmFubGliCisrCSAgX0xUX1RBR1ZBUihvbGRfcG9zdGluc3RhbGxfY21kcywgJDEpPSdjaG1vZCA2NDQgJG9sZGxpYicKKysJICBfTFRfVEFHVkFSKHBvc3RsaW5rX2NtZHMsICQxKT0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorKwkgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKysJICAgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKysJICAgICAgKi5leGV8Ki5FWEUpIDs7CisrCSAgICAgICopCisrCQlsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisrCQlsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgorKwkJOzsKKysJICAgIGVzYWN+CisrCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGx0X291dHB1dGZpbGUifgorKwkgICAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKysJICAgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKysJICAgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisrCSAgICBmaScKKysJICA7OworKwkqKQorKwkgICMgZysrCisrCSAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKysJICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisrCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1hbGwtc3ltYm9scycKKysJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKysJICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisrCSAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisrCisrCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworKwkgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorKwkgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKysJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisrCSAgICBlbHNlCisrCSAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworKwkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworKwkgICAgZml+CisrCSAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisrCSAgZWxzZQorKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworKwkgIGZpCisrCSAgOzsKKysJZXNhYworKwk7OworICAgICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAgICBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUygkMSkKKyAJOzsKK0BAIC01ODE4LDcgKzYxOTcsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAgICAgICAgICAgIDs7CisgICAgICAgICAgICopCisgICAgICAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKyAgICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworQEAgLTU4ODksMTAgKzYyNjgsMTAgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworIAkgICAgICAgICAgICA7OworIAkgICAgICAgICAgaWE2NCopCistCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKysJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKyAJICAgICAgICAgICAgOzsKKyAJICAgICAgICAgICopCistCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgICAgICAgICAgIDs7CisgCSAgICAgICAgZXNhYworIAkgICAgICBmaQorQEAgLTU5MzMsOSArNjMxMiw5IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICAgICAgICAgICopCisgCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorIAkgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJICAgICAgZWxzZQorLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgLW8gJGxpYicKKysJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAtbyAkbGliJworIAkgICAgICBmaQorIAkgICAgZmkKKyAJICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworQEAgLTYwMDUsMjAgKzYzODQsMjAgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAJICAgICAgX0xUX1RBR1ZBUihwcmVsaW5rX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAJCXJtIC1yZiAkdHBsZGlyfgorIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgorLQkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAiJworKwkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKKyAJICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgCQlybSAtcmYgJHRwbGRpcn4KKyAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+CistCQkkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgfgorKwkJJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGB+CisgCQkkUkFOTElCICRvbGRsaWInCisgCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgCQlybSAtcmYgJHRwbGRpcn4KKyAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorLQkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKysJCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworIAkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAJCXJtIC1yZiAkdHBsZGlyfgorIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CistCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworIAkgICAgICA7OworIAkgICAgKikgIyBWZXJzaW9uIDYgYW5kIGFib3ZlIHVzZSB3ZWFrIHN5bWJvbHMKKyAJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCitAQCAtNjIxMyw3ICs2NTkyLDcgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAJICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJCSAgOzsKKyAJICAgICAgICAqKQorLQkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCQkgIDs7CisgCSAgICAgIGVzYWMKKyAKK0BAIC02MjU5LDcgKzY2MzgsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorIAorICAgICAgIHNvbGFyaXMqKQorICAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICAgICAgQ0MqKQorKyAgICAgICAgICBDQyogfCBzdW5DQyopCisgCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisgICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywkMSk9eWVzCisgCSAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtemRlZnMnCitAQCAtNjMwMCw5ICs2Njc5LDkgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorIAkgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS16ICR7d2x9ZGVmcycKKyAJICAgICAgaWYgJENDIC0tdmVyc2lvbiB8ICRHUkVQIC12ICdeMlwuNycgPiAvZGV2L251bGw7IHRoZW4KKy0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworIAkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CistCQkgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysJCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAKKyAJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCitAQCAtNjQzMSw2ICs2ODEwLDcgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorIAorICAgQ0M9JGx0X3NhdmVfQ0MKKysgIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKKyAgIExEQ1hYPSRMRAorICAgTEQ9JGx0X3NhdmVfTEQKKyAgIEdDQz0kbHRfc2F2ZV9HQ0MKK0BAIC02NDQ1LDYgKzY4MjUsMjkgQEAgQUNfTEFOR19QT1AKKyBdKSMgX0xUX0xBTkdfQ1hYX0NPTkZJRworIAorIAorKyMgX0xUX0ZVTkNfU1RSSVBOQU1FX0NORgorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgZnVuY19zdHJpcG5hbWVfY25mIHByZWZpeCBzdWZmaXggbmFtZQorKyMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCisrIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKysjIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKysjIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCisrIworKyMgVGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gdGhlIChub24tWFNJKSB2ZXJzaW9uIG9mIGZ1bmNfc3RyaXBuYW1lLAorKyMgZXhjZXB0IHRoaXMgb25lIGNhbiBiZSB1c2VkIGJ5IG00IGNvZGUgdGhhdCBtYXkgYmUgZXhlY3V0ZWQgYnkgY29uZmlndXJlLAorKyMgcmF0aGVyIHRoYW4gdGhlIGxpYnRvb2wgc2NyaXB0LgorK200X2RlZnVuKFtfTFRfRlVOQ19TVFJJUE5BTUVfQ05GXSxbZG5sCisrQUNfUkVRVUlSRShbX0xUX0RFQ0xfU0VEXSkKKytBQ19SRVFVSVJFKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pCisrZnVuY19zdHJpcG5hbWVfY25mICgpCisreworKyAgY2FzZSAkezJ9IGluCisrICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworKyAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworKyAgZXNhYworK30gIyBmdW5jX3N0cmlwbmFtZV9jbmYKKytdKSMgX0xUX0ZVTkNfU1RSSVBOQU1FX0NORgorKworICMgX0xUX1NZU19ISURERU5fTElCREVQUyhbVEFHTkFNRV0pCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEZpZ3VyZSBvdXQgImhpZGRlbiIgbGlicmFyeSBkZXBlbmRlbmNpZXMgZnJvbSB2ZXJib3NlCitAQCAtNjQ1Myw2ICs2ODU2LDcgQEAgQUNfTEFOR19QT1AKKyAjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KKyBtNF9kZWZ1bihbX0xUX1NZU19ISURERU5fTElCREVQU10sCisgW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorK0FDX1JFUVVJUkUoW19MVF9GVU5DX1NUUklQTkFNRV9DTkZdKWRubAorICMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdCBiZWluZyBsaW5rZWQ6CisgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPQorIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9CitAQCAtNjUwMyw2ICs2OTA3LDEzIEBAIHB1YmxpYyBjbGFzcyBmb28geworIH07CisgX0xUX0VPRgorIF0pCisrCisrX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1M9JENGTEFHUworK2Nhc2UgIiRDQyAkQ0ZMQUdTICIgaW4gIygKKysqXCAtZmx0bypcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLWx0byIgOzsKKysqXCAtZndob3ByKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8td2hvcHIiIDs7CisrZXNhYworKworIGRubCBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKKyBkbmwgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCitAQCAtNjUxNCw3ICs2OTI1LDcgQEAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9bm8KKyAKKyAgIGZvciBwIGluIGBldmFsICIkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiYDsgZG8KKy0gICAgY2FzZSAkcCBpbgorKyAgICBjYXNlICR7cHJldn0ke3B9IGluCisgCisgICAgIC1MKiB8IC1SKiB8IC1sKikKKyAgICAgICAgIyBTb21lIGNvbXBpbGVycyBwbGFjZSBzcGFjZSBiZXR3ZWVuICIte0wsUn0iIGFuZCB0aGUgcGF0aC4KK0BAIC02NTIzLDEzICs2OTM0LDIyIEBAIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgICAgICAgIHRlc3QgJHAgPSAiLVIiOyB0aGVuCisgCSBwcmV2PSRwCisgCSBjb250aW51ZQorLSAgICAgICBlbHNlCistCSBwcmV2PQorICAgICAgICBmaQorIAorKyAgICAgICAjIEV4cGFuZCB0aGUgc3lzcm9vdCB0byBlYXNlIGV4dHJhY3RpbmcgdGhlIGRpcmVjdG9yaWVzIGxhdGVyLgorKyAgICAgICBpZiB0ZXN0IC16ICIkcHJldiI7IHRoZW4KKysgICAgICAgICBjYXNlICRwIGluCisrICAgICAgICAgLUwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1MJyAnJyAiJHAiOyBwcmV2PS1MOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKysgICAgICAgICAtUiopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLVInICcnICIkcCI7IHByZXY9LVI7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworKyAgICAgICAgIC1sKikgZnVuY19zdHJpcG5hbWVfY25mICctbCcgJycgIiRwIjsgcHJldj0tbDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisrICAgICAgICAgZXNhYworKyAgICAgICBmaQorKyAgICAgICBjYXNlICRwIGluCisrICAgICAgID0qKSBmdW5jX3N0cmlwbmFtZV9jbmYgJz0nICcnICIkcCI7IHA9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisrICAgICAgIGVzYWMKKyAgICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KKy0JIGNhc2UgJHAgaW4KKy0JIC1MKiB8IC1SKikKKysJIGNhc2UgJHtwcmV2fSBpbgorKwkgLUwgfCAtUikKKyAJICAgIyBJbnRlcm5hbCBjb21waWxlciBsaWJyYXJ5IHBhdGhzIHNob3VsZCBjb21lIGFmdGVyIHRob3NlCisgCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQorIAkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KK0BAIC02NTQ5LDggKzY5NjksMTAgQEAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAJICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke19MVF9UQUdWQVIocG9zdGRlcHMsICQxKX0gJHtwcmV2fSR7cH0iCisgCSBmaQorICAgICAgICBmaQorKyAgICAgICBwcmV2PQorICAgICAgICA7OworIAorKyAgICAqLmx0by4kb2JqZXh0KSA7OyAjIElnbm9yZSBHQ0MgTFRPIG9iamVjdHMKKyAgICAgKi4kb2JqZXh0KQorICAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB0ZXN0IG9iamVjdCBmaWxlIG9ubHkgc2hvd3MgdXAKKyAgICAgICAgIyBvbmNlIGluIHRoZSBjb21waWxlciBvdXRwdXQuCitAQCAtNjU4Niw2ICs3MDA4LDcgQEAgZWxzZQorIGZpCisgCisgJFJNIC1mIGNvbmZlc3QuJG9iamV4dAorK0NGTEFHUz0kX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1MKKyAKKyAjIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgorIG00X2lmKFskMV0sIFtDWFhdLAorQEAgLTY2MjIsNyArNzA0NSw3IEBAIGxpbnV4KikKKyAKKyBzb2xhcmlzKikKKyAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICBDQyopCisrICBDQyogfCBzdW5DQyopCisgICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworICAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKyAgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcworQEAgLTY3MzUsNyArNzE1OCw5IEBAIGlmIHRlc3QgIiRfbHRfZGlzYWJsZV9GNzciICE9IHllczsgdGhlbgorICAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgIGx0X3NhdmVfQ0M9IiRDQyIKKyAgIGx0X3NhdmVfR0NDPSRHQ0MKKysgIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAgIENDPSR7Rjc3LSJmNzcifQorKyAgQ0ZMQUdTPSRGRkxBR1MKKyAgIGNvbXBpbGVyPSRDQworICAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorQEAgLTY3ODksNiArNzIxNCw3IEBAIGlmIHRlc3QgIiRfbHRfZGlzYWJsZV9GNzciICE9IHllczsgdGhlbgorIAorICAgR0NDPSRsdF9zYXZlX0dDQworICAgQ0M9IiRsdF9zYXZlX0NDIgorKyAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCisgZmkgIyB0ZXN0ICIkX2x0X2Rpc2FibGVfRjc3IiAhPSB5ZXMKKyAKKyBBQ19MQU5HX1BPUAorQEAgLTY4NjUsNyArNzI5MSw5IEBAIGlmIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzOyB0aGVuCisgICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICAgbHRfc2F2ZV9DQz0iJENDIgorICAgbHRfc2F2ZV9HQ0M9JEdDQworKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICAgQ0M9JHtGQy0iZjk1In0KKysgIENGTEFHUz0kRkNGTEFHUworICAgY29tcGlsZXI9JENDCisgICBHQ0M9JGFjX2N2X2ZjX2NvbXBpbGVyX2dudQorIAorQEAgLTY5MjEsNyArNzM0OSw4IEBAIGlmIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzOyB0aGVuCisgICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKyAKKyAgIEdDQz0kbHRfc2F2ZV9HQ0MKKy0gIENDPSIkbHRfc2F2ZV9DQyIKKysgIENDPSRsdF9zYXZlX0NDCisrICBDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCisgZmkgIyB0ZXN0ICIkX2x0X2Rpc2FibGVfRkMiICE9IHllcworIAorIEFDX0xBTkdfUE9QCitAQCAtNjk1OCwxMCArNzM4NywxMiBAQCBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisgCisgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKy1sdF9zYXZlX0NDPSIkQ0MiCisrbHRfc2F2ZV9DQz0kQ0MKKytsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgbHRfc2F2ZV9HQ0M9JEdDQworIEdDQz15ZXMKKyBDQz0ke0dDSi0iZ2NqIn0KKytDRkxBR1M9JEdDSkZMQUdTCisgY29tcGlsZXI9JENDCisgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorQEAgLTY5OTIsNyArNzQyMyw4IEBAIGZpCisgQUNfTEFOR19SRVNUT1JFCisgCisgR0NDPSRsdF9zYXZlX0dDQworLUNDPSIkbHRfc2F2ZV9DQyIKKytDQz0kbHRfc2F2ZV9DQworK0NGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKKyBdKSMgX0xUX0xBTkdfR0NKX0NPTkZJRworIAorIAorQEAgLTcwMjcsOSArNzQ1OSwxMSBAQCBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisgCisgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyBsdF9zYXZlX0NDPSIkQ0MiCisrbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworIGx0X3NhdmVfR0NDPSRHQ0MKKyBHQ0M9CisgQ0M9JHtSQy0id2luZHJlcyJ9CisrQ0ZMQUdTPQorIGNvbXBpbGVyPSRDQworIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCitAQCAtNzA0Miw3ICs3NDc2LDggQEAgZmkKKyAKKyBHQ0M9JGx0X3NhdmVfR0NDCisgQUNfTEFOR19SRVNUT1JFCistQ0M9IiRsdF9zYXZlX0NDIgorK0NDPSRsdF9zYXZlX0NDCisrQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworIF0pIyBfTFRfTEFOR19SQ19DT05GSUcKKyAKKyAKK0BAIC03MTAxLDYgKzc1MzYsMTUgQEAgX0xUX0RFQ0woW10sIFtPQkpEVU1QXSwgWzFdLCBbQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXJdKQorIEFDX1NVQlNUKFtPQkpEVU1QXSkKKyBdKQorIAorKyMgX0xUX0RFQ0xfRExMVE9PTAorKyMgLS0tLS0tLS0tLS0tLS0tLQorKyMgRW5zdXJlIERMTFRPT0wgdmFyaWFibGUgaXMgc2V0LgorK200X2RlZnVuKFtfTFRfREVDTF9ETExUT09MXSwKKytbQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKKyt0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCisrX0xUX0RFQ0woW10sIFtETExUT09MXSwgWzFdLCBbRExMIGNyZWF0aW9uIHByb2dyYW1dKQorK0FDX1NVQlNUKFtETExUT09MXSkKKytdKQorIAorICMgX0xUX0RFQ0xfU0VECisgIyAtLS0tLS0tLS0tLS0KK0BAIC03MTk0LDggKzc2MzgsOCBAQCBtNF9kZWZ1bihbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSwKKyAjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworIHhzaV9zaGVsbD1ubworICggX2x0X2R1bW15PSJhL2IvYyIKKy0gIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCistICAgICAgPSBjLGEvYiwsIFwKKysgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisrICAgICAgPSBjLGEvYixiL2MsIFwKKyAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAgJiYgeHNpX3NoZWxsPXllcworQEAgLTcyMzQsMjA2ICs3Njc4LDE2MiBAQCBfTFRfREVDTChbTkwyU1BdLCBbbHRfTkwyU1BdLCBbMV0sIFt0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzXSlkbmwKKyBdKSMgX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTCisgCisgCistIyBfTFRfUFJPR19YU0lfU0hFTExGTlMKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSMgQm91cm5lIGFuZCBYU0kgY29tcGF0aWJsZSB2YXJpYW50cyBvZiBzb21lIHVzZWZ1bCBzaGVsbCBmdW5jdGlvbnMuCistbTRfZGVmdW4oW19MVF9QUk9HX1hTSV9TSEVMTEZOU10sCistW2Nhc2UgJHhzaV9zaGVsbCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCistIyBjYWxsOgorLSMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCistIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CistIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCistIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCistIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworLSMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCistICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9CistfQorLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorLSAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CistICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICRbKl0gKSkKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KKy19CisrIyBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFIChGVU5DTkFNRSwgUkVQTEFDRU1FTlQtQk9EWSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgSW4gYCRjZmdmaWxlJywgbG9vayBmb3IgZnVuY3Rpb24gRlVOQ05BTUUgZGVsaW1pdGVkIGJ5IGBeRlVOQ05BTUUgKCkkJyBhbmQKKysjICdefSBGVU5DTkFNRSAnLCBhbmQgcmVwbGFjZSBpdHMgYm9keSB3aXRoIFJFUExBQ0VNRU5ULUJPRFkuCisrbTRfZGVmdW4oW19MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0VdLAorK1tkbmwgeworK3NlZCAtZSAnL14kMSAoKSQvLC9efSAjICQxIC9jXAorKyQxICgpXAorK3tcCisrbTRfYnBhdHN1YnN0cyhbJDJdLCBbJF0sIFtcXF0sIFteXChbCSBdXCldLCBbXFxcMV0pCisrfSAjIEV4dGVuZGVkLXNoZWxsICQxIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrXSkKKyAKKy1fTFRfRU9GCistICAgIDs7CistICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyAKKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKy0gIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKy0gIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCistICBlbHNlCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKy0gIGZpCistfQorKyMgX0xUX1BST0dfUkVQTEFDRV9TSEVMTEZOUworKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgUmVwbGFjZSBleGlzdGluZyBwb3J0YWJsZSBpbXBsZW1lbnRhdGlvbnMgb2Ygc2V2ZXJhbCBzaGVsbCBmdW5jdGlvbnMgd2l0aAorKyMgZXF1aXZhbGVudCBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbnMgd2hlcmUgdGhvc2UgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZS4uCisrbTRfZGVmdW4oW19MVF9QUk9HX1JFUExBQ0VfU0hFTExGTlNdLAorK1tpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2Rpcm5hbWVdLCBbZG5sCisrICAgIGNhc2UgJHsxfSBpbgorKyAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CisrICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworKyAgICBlc2FjXSkKKysKKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYmFzZW5hbWVdLCBbZG5sCisrICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJdKQorKworKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZV0sIFtkbmwKKysgICAgY2FzZSAkezF9IGluCisrICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKysgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CisrICAgIGVzYWMKKysgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99Il0pCisgCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCistfQorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zdHJpcG5hbWVdLCBbZG5sCisrICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKysgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorKyAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorKyAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorKyAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifV0pCisgCistZG5sIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUKKy1kbmwgQSBwb3J0YWJsZSB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gaXMgYWxyZWFkeSBkZWZpbmVkIGluIGdlbmVyYWwubTRzaAorLWRubCBzbyB0aGVyZSBpcyBubyBuZWVkIGZvciBpdCBoZXJlLgorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zcGxpdF9sb25nX29wdF0sIFtkbmwKKysgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9CisrICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1dKQorIAorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy0jIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICBjYXNlICR7Mn0gaW4KKy0gICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKy0gICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworLSAgZXNhYworLX0KKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfc3BsaXRfc2hvcnRfb3B0XSwgW2RubAorKyAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fQorKyAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XSkKKyAKKy0jIHNlZCBzY3JpcHRzOgorLW15X3NlZF9sb25nX29wdD0nMXMvXlwoLVtbXj1dXSpcKT0uKi9cMS87cScKKy1teV9zZWRfbG9uZ19hcmc9JzFzL14tW1tePV1dKj0vLycKKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfbG8yb10sIFtkbmwKKysgICAgY2FzZSAkezF9IGluCisrICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKysgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKysgICAgZXNhY10pCisgCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCistfQorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY194Zm9ybV0sIFsgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb10pCisgCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAorLX0KKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYXJpdGhdLCBbICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkWypdICkpXSkKKyAKKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLltbXi5dXSokLy5sby8nYAorLX0KKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfbGVuXSwgWyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1dKQorK2ZpCisgCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJFtAXSJgCistfQorK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYXBwZW5kXSwgWyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXSkKKyAKKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJFsxXSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorLX0KKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYXBwZW5kX3F1b3RlZF0sIFtkbmwKKysgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSIKKytkbmwgbTQgZXhwYW5zaW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHRoZW4gdGhlIHNoZWxsIGV2YWwgdHVybnMgdGhhdCBpbnRvIFwKKysgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJdKQorIAorLV9MVF9FT0YKKy1lc2FjCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbW2EtekEtWl9dXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytlbHNlCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQorKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW1thLXpBLVpfXV1cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytmaQorIAorLWNhc2UgJGx0X3NoZWxsX2FwcGVuZCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCisrICBBQ19NU0dfV0FSTihbVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZV0pCisrZmkKKytdKQorIAorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkWzFdKz1cJFsyXSIKKy19CistX0xUX0VPRgorKyMgX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlMKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBEZXRlcm1pbmUgd2hpY2ggZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb25zIHNob3VsZCBiZSB1c2VkIGJ5CisrIyBmdW5jX3RvX2hvc3RfZmlsZSAoYW5kLCBpbXBsaWNpdGx5LCBieSBmdW5jX3RvX2hvc3RfcGF0aCkuICBUaGVzZSBhcmUgbmVlZGVkCisrIyBmb3IgY2VydGFpbiBjcm9zcy1jb21waWxlIGNvbmZpZ3VyYXRpb25zIGFuZCBuYXRpdmUgbWluZ3cuCisrbTRfZGVmdW4oW19MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TXSwKKytbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCisrQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXRdKQorK0FDX0NBQ0hFX1ZBTChsdF9jdl90b19ob3N0X2ZpbGVfY21kLAorK1tjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKyAgICAgOzsKKy0gICopCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiRbMV09XCQkWzFdXCRbMl0iCistfQorLQorLV9MVF9FT0YKKysgICotKi1jeWd3aW4qICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgIGVzYWMKKyAgICAgOzsKKy0gIGVzYWMKKysgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisrICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICA7OworK2VzYWMKKytdKQorK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKytBQ19NU0dfUkVTVUxUKFskbHRfY3ZfdG9faG9zdF9maWxlX2NtZF0pCisrX0xUX0RFQ0woW3RvX2hvc3RfZmlsZV9jbWRdLCBbbHRfY3ZfdG9faG9zdF9maWxlX2NtZF0sCisrICAgICAgICAgWzBdLCBbY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXRdKWRubAorKworK0FDX01TR19DSEVDS0lORyhbaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdF0pCisrQUNfQ0FDSEVfVkFMKGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQsCisrWyNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KKytsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKytjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrZXNhYworIF0pCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorK0FDX01TR19SRVNVTFQoWyRsdF9jdl90b190b29sX2ZpbGVfY21kXSkKKytfTFRfREVDTChbdG9fdG9vbF9maWxlX2NtZF0sIFtsdF9jdl90b190b29sX2ZpbGVfY21kXSwKKysgICAgICAgICBbMF0sIFtjb252ZXJ0ICRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0XSlkbmwKKytdKSMgX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlMKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IDk1MDNlYzg1ZDcuLjcwZTg1NmUwNjUgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTEsMTAgKzEsOSBAQAorLSMgR2VuZXJhdGVkIGZyb20gbHRtYWluLm00c2guCisgCistIyBsaWJ0b29sIChHTlUgbGlidG9vbCAxLjMxMzQgMjAwOS0xMS0yOSkgMi4yLjdhCisrIyBsaWJ0b29sIChHTlUgbGlidG9vbCkgMi40CisgIyBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorIAorICMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LAorLSMgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTworICMgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgCitAQCAtMzgsNyArMzcsNiBAQAorICMgICAtbiwgLS1kcnktcnVuICAgICAgICAgICAgZGlzcGxheSBjb21tYW5kcyB3aXRob3V0IG1vZGlmeWluZyBhbnkgZmlsZXMKKyAjICAgICAgIC0tZmVhdHVyZXMgICAgICAgICAgIGRpc3BsYXkgYmFzaWMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorICMgICAgICAgLS1tb2RlPU1PREUgICAgICAgICAgdXNlIG9wZXJhdGlvbiBtb2RlIE1PREUKKy0jICAgICAgIC0tbm8tZmluaXNoICAgICAgICAgIGxldCBpbnN0YWxsIG1vZGUgYXZvaWQgZmluaXNoIGNvbW1hbmRzCisgIyAgICAgICAtLXByZXNlcnZlLWR1cC1kZXBzICBkb24ndCByZW1vdmUgZHVwbGljYXRlIGRlcGVuZGVuY3kgbGlicmFyaWVzCisgIyAgICAgICAtLXF1aWV0LCAtLXNpbGVudCAgICBkb24ndCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisgIyAgICAgICAtLW5vLXF1aWV0LCAtLW5vLXNpbGVudAorQEAgLTcxLDE3ICs2OSwxOSBAQAorICMgICAgICAgICBjb21waWxlcjoJCSRMVENDCisgIyAgICAgICAgIGNvbXBpbGVyIGZsYWdzOgkJJExUQ0ZMQUdTCisgIyAgICAgICAgIGxpbmtlcjoJCSRMRCAoZ251PyAkd2l0aF9nbnVfbGQpCistIyAgICAgICAgICRwcm9nbmFtZToJKEdOVSBsaWJ0b29sIDEuMzEzNCAyMDA5LTExLTI5KSAyLjIuN2EKKysjICAgICAgICAgJHByb2duYW1lOgkoR05VIGxpYnRvb2wpIDIuNAorICMgICAgICAgICBhdXRvbWFrZToJJGF1dG9tYWtlX3ZlcnNpb24KKyAjICAgICAgICAgYXV0b2NvbmY6CSRhdXRvY29uZl92ZXJzaW9uCisgIworICMgUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LgorKyMgR05VIGxpYnRvb2wgaG9tZSBwYWdlOiA8aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYnRvb2wvPi4KKysjIEdlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LgorIAorIFBST0dSQU09bGlidG9vbAorIFBBQ0tBR0U9bGlidG9vbAorLVZFUlNJT049Mi4yLjdhCistVElNRVNUQU1QPSIgMS4zMTM0IDIwMDktMTEtMjkiCistcGFja2FnZV9yZXZpc2lvbj0xLjMxMzQKKytWRVJTSU9OPTIuNAorK1RJTUVTVEFNUD0iIgorK3BhY2thZ2VfcmV2aXNpb249MS4zMjkzCisgCisgIyBCZSBCb3VybmUgY29tcGF0aWJsZQorIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorQEAgLTEwNiw5ICsxMDYsNiBAQCBfTFRFQ0hPX0VPRicKKyB9CisgCisgIyBOTFMgbnVpc2FuY2VzOiBXZSBzYXZlIHRoZSBvbGQgdmFsdWVzIHRvIHJlc3RvcmUgZHVyaW5nIGV4ZWN1dGUgbW9kZS4KKy0jIE9ubHkgc2V0IExBTkcgYW5kIExDX0FMTCB0byBDIGlmIGFscmVhZHkgc2V0LgorLSMgVGhlc2UgbXVzdCBub3QgYmUgc2V0IHVuY29uZGl0aW9uYWxseSBiZWNhdXNlIG5vdCBhbGwgc3lzdGVtcyB1bmRlcnN0YW5kCistIyBlLmcuIExBTkc9QyAobm90YWJseSBTQ08pLgorIGx0X3VzZXJfbG9jYWxlPQorIGx0X3NhZmVfbG9jYWxlPQorIGZvciBsdF92YXIgaW4gTEFORyBMQU5HVUFHRSBMQ19BTEwgTENfQ1RZUEUgTENfQ09MTEFURSBMQ19NRVNTQUdFUworQEAgLTEyMSwxNSArMTE4LDEzIEBAIGRvCisgCSAgbHRfc2FmZV9sb2NhbGU9XCIkbHRfdmFyPUM7IFwkbHRfc2FmZV9sb2NhbGVcIgorIAlmaSIKKyBkb25lCisrTENfQUxMPUMKKytMQU5HVUFHRT1DCisrZXhwb3J0IExBTkdVQUdFIExDX0FMTAorIAorICRsdF91bnNldCBDRFBBVEgKKyAKKyAKKy0KKy0KKy0KKy0KKy0KKyAjIFdvcmsgYXJvdW5kIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaXNzdWUgb24gSVJJWCA2LjUuIE9uIElSSVggNi40Kywgc2gKKyAjIGlzIGtzaCBidXQgd2hlbiB0aGUgc2hlbGwgaXMgaW52b2tlZCBhcyAic2giIGFuZCB0aGUgY3VycmVudCB2YWx1ZSBvZgorICMgdGhlIF9YUEcgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IGVxdWFsIHRvIDEgKG9uZSksIHRoZSBzcGVjaWFsCitAQCAtMTQwLDcgKzEzNSw3IEBAIHByb2dwYXRoPSIkMCIKKyAKKyAKKyA6ICR7Q1A9ImNwIC1mIn0KKy06ICR7RUNITz0kYXNfZWNob30KKyt0ZXN0ICIke0VDSE8rc2V0fSIgPSBzZXQgfHwgRUNITz0ke2FzX2VjaG8tJ3ByaW50ZiAlc1xuJ30KKyA6ICR7RUdSRVA9Ii9iaW4vZ3JlcCAtRSJ9CisgOiAke0ZHUkVQPSIvYmluL2dyZXAgLUYifQorIDogJHtHUkVQPSIvYmluL2dyZXAifQorQEAgLTE0OSw3ICsxNDQsNyBAQCBwcm9ncGF0aD0iJDAiCisgOiAke01LRElSPSJta2RpciJ9CisgOiAke01WPSJtdiAtZiJ9CisgOiAke1JNPSJybSAtZiJ9CistOiAke1NFRD0iL21vdW50L2VuZG9yL3dpbGRlbmh1L2xvY2FsLXg4Nl82NC9iaW4vc2VkIn0KKys6ICR7U0VEPSIvYmluL3NlZCJ9CisgOiAke1NIRUxMPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSJ9CisgOiAke1hzZWQ9IiRTRUQgLWUgMXMvXlgvLyJ9CisgCitAQCAtMTY5LDYgKzE2NCwyNyBAQCBJRlM9IiAJJGx0X25sIgorIGRpcm5hbWU9InMsL1teL10qJCwsIgorIGJhc2VuYW1lPSJzLF4uKi8sLCIKKyAKKysjIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKysjIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCisrIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCisrZnVuY19kaXJuYW1lICgpCisreworKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCisrICAgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCisrICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKysgICAgZWxzZQorKyAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKysgICAgZmkKKyt9ICMgZnVuY19kaXJuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworKworKyMgZnVuY19iYXNlbmFtZSBmaWxlCisrZnVuY19iYXNlbmFtZSAoKQorK3sKKysgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCisrfSAjIGZ1bmNfYmFzZW5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrCisgIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorICMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKyAjIGNhbGw6CitAQCAtMTgzLDE3ICsxOTksMzEgQEAgYmFzZW5hbWU9InMsXi4qLywsIgorICMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKKyB7CistICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorLSAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAtZSAiJGRpcm5hbWUiYAorLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKy0gIGVsc2UKKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorLSAgZmkKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEIC1lICIkYmFzZW5hbWUiYAorLX0KKysgICAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKysgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAtZSAiJGRpcm5hbWUiYAorKyAgICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorKyAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCisrICAgIGVsc2UKKysgICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCisrICAgIGZpCisrICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEIC1lICIkYmFzZW5hbWUiYAorK30gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworKworKyMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCisrIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKysjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworKyMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKysjIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCisrZnVuY19zdHJpcG5hbWUgKCkKKyt7CisrICAgIGNhc2UgJHsyfSBpbgorKyAgICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CisrICAgICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworKyAgICBlc2FjCisrfSAjIGZ1bmNfc3RyaXBuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorIAorLSMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLgorIAorICMgVGhlc2UgU0VEIHNjcmlwdHMgcHJlc3VwcG9zZSBhbiBhYnNvbHV0ZSBwYXRoIHdpdGggYSB0cmFpbGluZyBzbGFzaC4KKyBwYXRoY2FyPSdzLF4vXChbXi9dKlwpLiokLFwxLCcKK0BAIC0zNzYsNiArNDA2LDE1IEBAIHNlZF9xdW90ZV9zdWJzdD0ncy9cKFtgIiRcXF1cKS9cXFwxL2cnCisgIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCisgZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woWyJgXFxdXCkvXFxcMS9nJworIAorKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IHR1cm5zIGEgc3RyaW5nIGludG8gYSByZWdleCBtYXRjaGluZyBmb3IgdGhlCisrIyBzdHJpbmcgbGl0ZXJhbGx5LgorK3NlZF9tYWtlX2xpdGVyYWxfcmVnZXg9J3MsW10uW14kXFwqXC9dLFxcJixnJworKworKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGNvbnZlcnRzIGEgdzMyIGZpbGUgbmFtZSBvciBwYXRoCisrIyB3aGljaCBjb250YWlucyBmb3J3YXJkIHNsYXNoZXMsIGludG8gb25lIHRoYXQgY29udGFpbnMKKysjIChlc2NhcGVkKSBiYWNrc2xhc2hlcy4gIEEgdmVyeSBuYWl2ZSBpbXBsZW1lbnRhdGlvbi4KKytsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5PSdzfFxcXFwqfFxcfGc7c3wvfFxcfGc7c3xcXHxcXFxcfGcnCisrCisgIyBSZS1gXCcgcGFyYW1ldGVyIGV4cGFuc2lvbnMgaW4gb3V0cHV0IG9mIGRvdWJsZV9xdW90ZV9zdWJzdCB0aGF0IHdlcmUKKyAjIGBcJy1lZCBpbiBpbnB1dCB0byB0aGUgc2FtZS4gIElmIGFuIG9kZCBudW1iZXIgb2YgYFwnIHByZWNlZGVkIGEgJyQnCisgIyBpbiBpbnB1dCB0byBkb3VibGVfcXVvdGVfc3Vic3QsIHRoYXQgJyQnIHdhcyBwcm90ZWN0ZWQgZnJvbSBleHBhbnNpb24uCitAQCAtNDA0LDcgKzQ0Myw3IEBAIG9wdF93YXJuaW5nPToKKyAjIG5hbWUgaWYgaXQgaGFzIGJlZW4gc2V0IHlldC4KKyBmdW5jX2VjaG8gKCkKKyB7CistICAgICRFQ0hPICIkcHJvZ25hbWUke21vZGUrOiB9JG1vZGU6ICQqIgorKyAgICAkRUNITyAiJHByb2duYW1lOiAke29wdF9tb2RlKyRvcHRfbW9kZTogfSQqIgorIH0KKyAKKyAjIGZ1bmNfdmVyYm9zZSBhcmcuLi4KK0BAIC00MzAsMTQgKzQ2OSwxNCBAQCBmdW5jX2VjaG9fYWxsICgpCisgIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgorIGZ1bmNfZXJyb3IgKCkKKyB7CistICAgICRFQ0hPICIkcHJvZ25hbWUke21vZGUrOiB9JG1vZGU6ICIkezErIiRAIn0gMT4mMgorKyAgICAkRUNITyAiJHByb2duYW1lOiAke29wdF9tb2RlKyRvcHRfbW9kZTogfSIkezErIiRAIn0gMT4mMgorIH0KKyAKKyAjIGZ1bmNfd2FybmluZyBhcmcuLi4KKyAjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIHdhcm5pbmcgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4KKyBmdW5jX3dhcm5pbmcgKCkKKyB7CistICAgICRvcHRfd2FybmluZyAmJiAkRUNITyAiJHByb2duYW1lJHttb2RlKzogfSRtb2RlOiB3YXJuaW5nOiAiJHsxKyIkQCJ9IDE+JjIKKysgICAgJG9wdF93YXJuaW5nICYmICRFQ0hPICIkcHJvZ25hbWU6ICR7b3B0X21vZGUrJG9wdF9tb2RlOiB9d2FybmluZzogIiR7MSsiJEAifSAxPiYyCisgCisgICAgICMgYmFzaCBidWcgYWdhaW46CisgICAgIDoKK0BAIC02NTYsMTkgKzY5NSwzNSBAQCBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgKCkKKyAgICAgZmkKKyB9CisgCistCistCisrIyBmdW5jX3RyX3NoCisrIyBUdXJuICQxIGludG8gYSBzdHJpbmcgc3VpdGFibGUgZm9yIGEgc2hlbGwgdmFyaWFibGUgbmFtZS4KKysjIFJlc3VsdCBpcyBzdG9yZWQgaW4gJGZ1bmNfdHJfc2hfcmVzdWx0LiAgQWxsIGNoYXJhY3RlcnMKKysjIG5vdCBpbiB0aGUgc2V0IGEtekEtWjAtOV8gYXJlIHJlcGxhY2VkIHdpdGggJ18nLiBGdXJ0aGVyLAorKyMgaWYgJDEgYmVnaW5zIHdpdGggYSBkaWdpdCwgYSAnXycgaXMgcHJlcGVuZGVkIGFzIHdlbGwuCisrZnVuY190cl9zaCAoKQorK3sKKysgIGNhc2UgJDEgaW4KKysgIFswLTldKiB8ICpbIWEtekEtWjAtOV9dKikKKysgICAgZnVuY190cl9zaF9yZXN1bHQ9YCRFQ0hPICIkMSIgfCAkU0VEICdzL15cKFswLTldXCkvX1wxLzsgcy9bXmEtekEtWjAtOV9dL18vZydgCisrICAgIDs7CisrICAqICkKKysgICAgZnVuY190cl9zaF9yZXN1bHQ9JDEKKysgICAgOzsKKysgIGVzYWMKKyt9CisgCisgCisgIyBmdW5jX3ZlcnNpb24KKyAjIEVjaG8gdmVyc2lvbiBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KKyBmdW5jX3ZlcnNpb24gKCkKKyB7CisrICAgICRvcHRfZGVidWcKKysKKyAgICAgJFNFRCAtbiAnLyhDKS8hYiBnbworIAk6bW9yZQorIAkvXC4vIXsKKyAJICBOCistCSAgcy9cbiMgLy8KKysJICBzL1xuIyAvIC8KKyAJICBiIG1vcmUKKyAJfQorIAk6Z28KK0BAIC02ODUsNyArNzQwLDkgQEAgZnVuY192ZXJzaW9uICgpCisgIyBFY2hvIHNob3J0IGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCisgZnVuY191c2FnZSAoKQorIHsKKy0gICAgJFNFRCAtbiAnL14jIFVzYWdlOi8sL14jICAqLWgvIHsKKysgICAgJG9wdF9kZWJ1ZworKworKyAgICAkU0VEIC1uICcvXiMgVXNhZ2U6LywvXiMgICouKi0taGVscC8geworICAgICAgICAgcy9eIyAvLworIAlzL14jICokLy8KKyAJcy9cJHByb2duYW1lLyckcHJvZ25hbWUnLworQEAgLTcwMSw3ICs3NTgsMTAgQEAgZnVuY191c2FnZSAoKQorICMgdW5sZXNzICdub2V4aXQnIGlzIHBhc3NlZCBhcyBhcmd1bWVudC4KKyBmdW5jX2hlbHAgKCkKKyB7CisrICAgICRvcHRfZGVidWcKKysKKyAgICAgJFNFRCAtbiAnL14jIFVzYWdlOi8sLyMgUmVwb3J0IGJ1Z3MgdG8vIHsKKysJOnByaW50CisgICAgICAgICBzL14jIC8vCisgCXMvXiMgKiQvLworIAlzKlwkcHJvZ25hbWUqJyRwcm9nbmFtZScqCitAQCAtNzE0LDcgKzc3NCwxMSBAQCBmdW5jX2hlbHAgKCkKKyAJcy9cJGF1dG9tYWtlX3ZlcnNpb24vJyJgKGF1dG9tYWtlIC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCRTRUQgMXFgIicvCisgCXMvXCRhdXRvY29uZl92ZXJzaW9uLyciYChhdXRvY29uZiAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwkU0VEIDFxYCInLworIAlwCistICAgICB9JyA8ICIkcHJvZ3BhdGgiCisrCWQKKysgICAgIH0KKysgICAgIC9eIyAuKiBob21lIHBhZ2U6L2IgcHJpbnQKKysgICAgIC9eIyBHZW5lcmFsIGhlbHAgdXNpbmcvYiBwcmludAorKyAgICAgJyA8ICIkcHJvZ3BhdGgiCisgICAgIHJldD0kPworICAgICBpZiB0ZXN0IC16ICIkMSI7IHRoZW4KKyAgICAgICBleGl0ICRyZXQKK0BAIC03MjYsMTIgKzc5MCwzOSBAQCBmdW5jX2hlbHAgKCkKKyAjIGV4aXRfY21kLgorIGZ1bmNfbWlzc2luZ19hcmcgKCkKKyB7CistICAgIGZ1bmNfZXJyb3IgIm1pc3NpbmcgYXJndW1lbnQgZm9yICQxIgorKyAgICAkb3B0X2RlYnVnCisrCisrICAgIGZ1bmNfZXJyb3IgIm1pc3NpbmcgYXJndW1lbnQgZm9yICQxLiIKKyAgICAgZXhpdF9jbWQ9ZXhpdAorIH0KKyAKKy1leGl0X2NtZD06CisgCisrIyBmdW5jX3NwbGl0X3Nob3J0X29wdCBzaG9ydG9wdAorKyMgU2V0IGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUgYW5kIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyBzaGVsbAorKyMgdmFyaWFibGVzIGFmdGVyIHNwbGl0dGluZyBTSE9SVE9QVCBhZnRlciB0aGUgMm5kIGNoYXJhY3Rlci4KKytmdW5jX3NwbGl0X3Nob3J0X29wdCAoKQorK3sKKysgICAgbXlfc2VkX3Nob3J0X29wdD0nMXMvXlwoLi5cKS4qJC9cMS87cScKKysgICAgbXlfc2VkX3Nob3J0X3Jlc3Q9JzFzL14uLlwoLipcKSQvXDEvO3EnCisrCisrICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX3Nob3J0X29wdCJgCisrICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfc2hvcnRfcmVzdCJgCisrfSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworKworKyMgZnVuY19zcGxpdF9sb25nX29wdCBsb25nb3B0CisrIyBTZXQgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lIGFuZCBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZyBzaGVsbAorKyMgdmFyaWFibGVzIGFmdGVyIHNwbGl0dGluZyBMT05HT1BUIGF0IHRoZSBgPScgc2lnbi4KKytmdW5jX3NwbGl0X2xvbmdfb3B0ICgpCisreworKyAgICBteV9zZWRfbG9uZ19vcHQ9JzFzL15cKC0tW149XSpcKT0uKi9cMS87cScKKysgICAgbXlfc2VkX2xvbmdfYXJnPScxcy9eLS1bXj1dKj0vLycKKysKKysgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCisrICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCisrfSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrZXhpdF9jbWQ9OgorIAorIAorIAorQEAgLTc0MSwyNiArODMyLDY0IEBAIG1hZ2ljPSIlJSVNQUdJQyB2YXJpYWJsZSUlJSIKKyBtYWdpY19leGU9IiUlJU1BR0lDIEVYRSB2YXJpYWJsZSUlJSIKKyAKKyAjIEdsb2JhbCB2YXJpYWJsZXMuCistIyAkbW9kZSBpcyB1bnNldAorIG5vbm9wdD0KKy1leGVjdXRlX2RsZmlsZXM9CisgcHJlc2VydmVfYXJncz0KKyBsbzJvPSJzL1xcLmxvXCQvLiR7b2JqZXh0fS8iCisgbzJsbz0icy9cXC4ke29iamV4dH1cJC8ubG8vIgorIGV4dHJhY3RlZF9hcmNoaXZlcz0KKyBleHRyYWN0ZWRfc2VyaWFsPTAKKyAKKy1vcHRfZHJ5X3J1bj1mYWxzZQorLW9wdF9maW5pc2g9OgorLW9wdF9kdXBsaWNhdGVfZGVwcz1mYWxzZQorLW9wdF9zaWxlbnQ9ZmFsc2UKKy1vcHRfZGVidWc9OgorLQorICMgSWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gYW55IG9mIHRoZSBhY3Rpb25zLCB0aGUgY29tbWFuZCBpbiBpdAorICMgd2lsbCBiZSBleGVjZWQgYXQgdGhlIGVuZC4gIFRoaXMgcHJldmVudHMgaGVyZS1kb2N1bWVudHMgZnJvbSBiZWluZworICMgbGVmdCBvdmVyIGJ5IHNoZWxscy4KKyBleGVjX2NtZD0KKyAKKysjIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorKyMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorK2Z1bmNfYXBwZW5kICgpCisreworKyAgICBldmFsICIkezF9PVwkJHsxfVwkezJ9IgorK30gIyBmdW5jX2FwcGVuZCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKysjIGZ1bmNfYXBwZW5kX3F1b3RlZCB2YXIgdmFsdWUKKysjIFF1b3RlIFZBTFVFIGFuZCBhcHBlbmQgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIsIHNlcGFyYXRlZAorKyMgYnkgYSBzcGFjZS4KKytmdW5jX2FwcGVuZF9xdW90ZWQgKCkKKyt7CisrICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iCisrICAgIGV2YWwgIiR7MX09XCQkezF9XFwgXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyt9ICMgZnVuY19hcHBlbmRfcXVvdGVkIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworKworKyMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKytmdW5jX2FyaXRoICgpCisreworKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJHtAfSJgCisrfSAjIGZ1bmNfYXJpdGggbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrCisrIyBmdW5jX2xlbiBzdHJpbmcKKysjIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCisrZnVuY19sZW4gKCkKKyt7CisrICAgIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJHsxfSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorK30gIyBmdW5jX2xlbiBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKysKKysjIGZ1bmNfbG8ybyBvYmplY3QKKytmdW5jX2xvMm8gKCkKKyt7CisrICAgIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKKyt9ICMgZnVuY19sbzJvIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworKworKyMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCisrZnVuY194Zm9ybSAoKQorK3sKKysgICAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCisrfSAjIGZ1bmNfeGZvcm0gbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrCisgIyBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gYXJnLi4uCisgIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dlZCBieQorICMgYSBjb25maWd1cmF0aW9uIGZhaWx1cmUgaGludCwgYW5kIGV4aXQuCitAQCAtODUwLDEzMCArOTc5LDIwNCBAQCBmdW5jX2VuYWJsZV90YWcgKCkKKyAgIGVzYWMKKyB9CisgCistIyBQYXJzZSBvcHRpb25zIG9uY2UsIHRob3JvdWdobHkuICBUaGlzIGNvbWVzIGFzIHNvb24gYXMgcG9zc2libGUgaW4KKy0jIHRoZSBzY3JpcHQgdG8gbWFrZSB0aGluZ3MgbGlrZSBgbGlidG9vbCAtLXZlcnNpb24nIGhhcHBlbiBxdWlja2x5LgorKyMgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCisrIyBFbnN1cmUgdGhhdCB3ZSBhcmUgdXNpbmcgbTQgbWFjcm9zLCBhbmQgbGlidG9vbCBzY3JpcHQgZnJvbSB0aGUgc2FtZQorKyMgcmVsZWFzZSBvZiBsaWJ0b29sLgorK2Z1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaCAoKQorIHsKKysgIGlmIHRlc3QgIiRwYWNrYWdlX3JldmlzaW9uIiAhPSAiJG1hY3JvX3JldmlzaW9uIjsgdGhlbgorKyAgICBpZiB0ZXN0ICIkVkVSU0lPTiIgIT0gIiRtYWNyb192ZXJzaW9uIjsgdGhlbgorKyAgICAgIGlmIHRlc3QgLXogIiRtYWNyb192ZXJzaW9uIjsgdGhlbgorKyAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCisrJHByb2duYW1lOiBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIGFuIG9sZGVyIHJlbGVhc2UuCisrJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSAkUEFDS0FHRSAkVkVSU0lPTgorKyRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KKytfTFRfRU9GCisrICAgICAgZWxzZQorKyAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCisrJHByb2duYW1lOiBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tICRQQUNLQUdFICRtYWNyb192ZXJzaW9uLgorKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KKyskcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCisrX0xUX0VPRgorKyAgICAgIGZpCisrICAgIGVsc2UKKysgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uLAorKyRwcm9nbmFtZTogYnV0IHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIHJldmlzaW9uICRtYWNyb19yZXZpc2lvbi4KKyskcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uCisrJHByb2duYW1lOiBvZiAkUEFDS0FHRSAkVkVSU0lPTiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorK19MVF9FT0YKKysgICAgZmkKKyAKKy0gICMgU2hvcnRoYW5kIGZvciAtLW1vZGU9Zm9vLCBvbmx5IHZhbGlkIGFzIHRoZSBmaXJzdCBhcmd1bWVudAorLSAgY2FzZSAkMSBpbgorLSAgY2xlYW58Y2xlYXxjbGV8Y2wpCistICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNsZWFuICR7MSsiJEAifTsgc2hpZnQKKy0gICAgOzsKKy0gIGNvbXBpbGV8Y29tcGlsfGNvbXBpfGNvbXB8Y29tfGNvfGMpCistICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNvbXBpbGUgJHsxKyIkQCJ9OyBzaGlmdAorLSAgICA7OworLSAgZXhlY3V0ZXxleGVjdXR8ZXhlY3V8ZXhlY3xleGV8ZXh8ZSkKKy0gICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZXhlY3V0ZSAkezErIiRAIn07IHNoaWZ0CistICAgIDs7CistICBmaW5pc2h8ZmluaXN8ZmluaXxmaW58Zml8ZikKKy0gICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZmluaXNoICR7MSsiJEAifTsgc2hpZnQKKy0gICAgOzsKKy0gIGluc3RhbGx8aW5zdGFsfGluc3RhfGluc3R8aW5zfGlufGkpCistICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorLSAgICA7OworLSAgbGlua3xsaW58bGl8bCkKKy0gICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgbGluayAkezErIiRAIn07IHNoaWZ0CistICAgIDs7CistICB1bmluc3RhbGx8dW5pbnN0YWx8dW5pbnN0YXx1bmluc3R8dW5pbnN8dW5pbnx1bml8dW58dSkKKy0gICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgdW5pbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKy0gICAgOzsKKy0gIGVzYWMKKysgICAgZXhpdCAkRVhJVF9NSVNNQVRDSAorKyAgZmkKKyt9CisrCisrCisrIyBTaG9ydGhhbmQgZm9yIC0tbW9kZT1mb28sIG9ubHkgdmFsaWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50CisrY2FzZSAkMSBpbgorK2NsZWFufGNsZWF8Y2xlfGNsKQorKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY2xlYW4gJHsxKyIkQCJ9OyBzaGlmdAorKyAgOzsKKytjb21waWxlfGNvbXBpbHxjb21waXxjb21wfGNvbXxjb3xjKQorKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY29tcGlsZSAkezErIiRAIn07IHNoaWZ0CisrICA7OworK2V4ZWN1dGV8ZXhlY3V0fGV4ZWN1fGV4ZWN8ZXhlfGV4fGUpCisrICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBleGVjdXRlICR7MSsiJEAifTsgc2hpZnQKKysgIDs7CisrZmluaXNofGZpbmlzfGZpbml8ZmlufGZpfGYpCisrICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAorKyAgOzsKKytpbnN0YWxsfGluc3RhbHxpbnN0YXxpbnN0fGluc3xpbnxpKQorKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CisrICA7OworK2xpbmt8bGlufGxpfGwpCisrICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBsaW5rICR7MSsiJEAifTsgc2hpZnQKKysgIDs7CisrdW5pbnN0YWxsfHVuaW5zdGFsfHVuaW5zdGF8dW5pbnN0fHVuaW5zfHVuaW58dW5pfHVufHUpCisrICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSB1bmluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorKyAgOzsKKytlc2FjCisgCistICAjIFBhcnNlIG5vbi1tb2RlIHNwZWNpZmljIGFyZ3VtZW50czoKKy0gIHdoaWxlIHRlc3QgIiQjIiAtZ3QgMDsgZG8KKysKKysKKysjIE9wdGlvbiBkZWZhdWx0czoKKytvcHRfZGVidWc9OgorK29wdF9kcnlfcnVuPWZhbHNlCisrb3B0X2NvbmZpZz1mYWxzZQorK29wdF9wcmVzZXJ2ZV9kdXBfZGVwcz1mYWxzZQorK29wdF9mZWF0dXJlcz1mYWxzZQorK29wdF9maW5pc2g9ZmFsc2UKKytvcHRfaGVscD1mYWxzZQorK29wdF9oZWxwX2FsbD1mYWxzZQorK29wdF9zaWxlbnQ9OgorK29wdF92ZXJib3NlPToKKytvcHRfc2lsZW50PWZhbHNlCisrb3B0X3ZlcmJvc2U9ZmFsc2UKKysKKysKKysjIFBhcnNlIG9wdGlvbnMgb25jZSwgdGhvcm91Z2hseS4gIFRoaXMgY29tZXMgYXMgc29vbiBhcyBwb3NzaWJsZSBpbiB0aGUKKysjIHNjcmlwdCB0byBtYWtlIHRoaW5ncyBsaWtlIGAtLXZlcnNpb24nIGhhcHBlbiBhcyBxdWlja2x5IGFzIHdlIGNhbi4KKyt7CisrICAjIHRoaXMganVzdCBlYXNlcyBleGl0IGhhbmRsaW5nCisrICB3aGlsZSB0ZXN0ICQjIC1ndCAwOyBkbworICAgICBvcHQ9IiQxIgorICAgICBzaGlmdAorLQorICAgICBjYXNlICRvcHQgaW4KKy0gICAgICAtLWNvbmZpZykJCWZ1bmNfY29uZmlnCQkJCQk7OworLQorLSAgICAgIC0tZGVidWcpCQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0IgorKyAgICAgIC0tZGVidWd8LXgpCW9wdF9kZWJ1Zz0nc2V0IC14JworIAkJCWZ1bmNfZWNobyAiZW5hYmxpbmcgc2hlbGwgdHJhY2UgbW9kZSIKKy0JCQlvcHRfZGVidWc9J3NldCAteCcKKyAJCQkkb3B0X2RlYnVnCisgCQkJOzsKKy0KKy0gICAgICAtZGxvcGVuKQkJdGVzdCAiJCMiIC1lcSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgIiRvcHQiICYmIGJyZWFrCistCQkJZXhlY3V0ZV9kbGZpbGVzPSIkZXhlY3V0ZV9kbGZpbGVzICQxIgorLQkJCXNoaWZ0CisrICAgICAgLS1kcnktcnVufC0tZHJ5cnVufC1uKQorKwkJCW9wdF9kcnlfcnVuPToKKyAJCQk7OworLQorLSAgICAgIC0tZHJ5LXJ1biB8IC1uKQlvcHRfZHJ5X3J1bj06CQkJCQk7OworLSAgICAgIC0tZmVhdHVyZXMpICAgICAgIGZ1bmNfZmVhdHVyZXMJCQkJCTs7CistICAgICAgLS1maW5pc2gpCQltb2RlPSJmaW5pc2giCQkJCQk7OworLSAgICAgIC0tbm8tZmluaXNoKQlvcHRfZmluaXNoPWZhbHNlCQkJCTs7CistCistICAgICAgLS1tb2RlKQkJdGVzdCAiJCMiIC1lcSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgIiRvcHQiICYmIGJyZWFrCistCQkJY2FzZSAkMSBpbgorLQkJCSAgIyBWYWxpZCBtb2RlIGFyZ3VtZW50czoKKy0JCQkgIGNsZWFuKQk7OworLQkJCSAgY29tcGlsZSkJOzsKKy0JCQkgIGV4ZWN1dGUpCTs7CistCQkJICBmaW5pc2gpCTs7CistCQkJICBpbnN0YWxsKQk7OworLQkJCSAgbGluaykJCTs7CistCQkJICByZWxpbmspCTs7CistCQkJICB1bmluc3RhbGwpCTs7CistCistCQkJICAjIENhdGNoIGFueXRoaW5nIGVsc2UgYXMgYW4gZXJyb3IKKy0JCQkgICopIGZ1bmNfZXJyb3IgImludmFsaWQgYXJndW1lbnQgZm9yICRvcHQiCistCQkJICAgICBleGl0X2NtZD1leGl0CistCQkJICAgICBicmVhaworLQkJCSAgICAgOzsKKy0JCSAgICAgICAgZXNhYworLQorLQkJCW1vZGU9IiQxIgorKyAgICAgIC0tY29uZmlnKQorKwkJCW9wdF9jb25maWc9OgorK2Z1bmNfY29uZmlnCisrCQkJOzsKKysgICAgICAtLWRsb3BlbnwtZGxvcGVuKQorKwkJCW9wdGFyZz0iJDEiCisrCQkJb3B0X2Rsb3Blbj0iJHtvcHRfZGxvcGVuKyRvcHRfZGxvcGVuCisrfSRvcHRhcmciCisgCQkJc2hpZnQKKyAJCQk7OworLQorICAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMpCistCQkJb3B0X2R1cGxpY2F0ZV9kZXBzPToJCQkJOzsKKy0KKy0gICAgICAtLXF1aWV0fC0tc2lsZW50KQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0IgorLQkJCW9wdF9zaWxlbnQ9OgorLQkJCW9wdF92ZXJib3NlPWZhbHNlCisrCQkJb3B0X3ByZXNlcnZlX2R1cF9kZXBzPToKKyAJCQk7OworLQorLSAgICAgIC0tbm8tcXVpZXR8LS1uby1zaWxlbnQpCistCQkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCIKKy0JCQlvcHRfc2lsZW50PWZhbHNlCisrICAgICAgLS1mZWF0dXJlcykKKysJCQlvcHRfZmVhdHVyZXM9OgorK2Z1bmNfZmVhdHVyZXMKKyAJCQk7OworLQorLSAgICAgIC0tdmVyYm9zZXwgLXYpCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQiCisrICAgICAgLS1maW5pc2gpCisrCQkJb3B0X2ZpbmlzaD06Cisrc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAorKwkJCTs7CisrICAgICAgLS1oZWxwKQorKwkJCW9wdF9oZWxwPToKKysJCQk7OworKyAgICAgIC0taGVscC1hbGwpCisrCQkJb3B0X2hlbHBfYWxsPToKKytvcHRfaGVscD0nOiBoZWxwLWFsbCcKKysJCQk7OworKyAgICAgIC0tbW9kZSkKKysJCQl0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRvcHQgJiYgYnJlYWsKKysJCQlvcHRhcmc9IiQxIgorKwkJCW9wdF9tb2RlPSIkb3B0YXJnIgorK2Nhc2UgJG9wdGFyZyBpbgorKyAgIyBWYWxpZCBtb2RlIGFyZ3VtZW50czoKKysgIGNsZWFufGNvbXBpbGV8ZXhlY3V0ZXxmaW5pc2h8aW5zdGFsbHxsaW5rfHJlbGlua3x1bmluc3RhbGwpIDs7CisrCisrICAjIENhdGNoIGFueXRoaW5nIGVsc2UgYXMgYW4gZXJyb3IKKysgICopIGZ1bmNfZXJyb3IgImludmFsaWQgYXJndW1lbnQgZm9yICRvcHQiCisrICAgICBleGl0X2NtZD1leGl0CisrICAgICBicmVhaworKyAgICAgOzsKKytlc2FjCisrCQkJc2hpZnQKKysJCQk7OworKyAgICAgIC0tbm8tc2lsZW50fC0tbm8tcXVpZXQpCisgCQkJb3B0X3NpbGVudD1mYWxzZQorLQkJCW9wdF92ZXJib3NlPToKKytmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKKyAJCQk7OworLQorLSAgICAgIC0tbm8tdmVyYm9zZSkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCIKKysgICAgICAtLW5vLXZlcmJvc2UpCisgCQkJb3B0X3ZlcmJvc2U9ZmFsc2UKKytmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKKyAJCQk7OworLQorLSAgICAgIC0tdGFnKQkJdGVzdCAiJCMiIC1lcSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgIiRvcHQiICYmIGJyZWFrCistCQkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCAkMSIKKy0JCQlmdW5jX2VuYWJsZV90YWcgIiQxIgkjIHRhZ25hbWUgaXMgc2V0IGhlcmUKKysgICAgICAtLXNpbGVudHwtLXF1aWV0KQorKwkJCW9wdF9zaWxlbnQ9OgorK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgorKyAgICAgICAgb3B0X3ZlcmJvc2U9ZmFsc2UKKysJCQk7OworKyAgICAgIC0tdmVyYm9zZXwtdikKKysJCQlvcHRfdmVyYm9zZT06CisrZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCisrb3B0X3NpbGVudD1mYWxzZQorKwkJCTs7CisrICAgICAgLS10YWcpCisrCQkJdGVzdCAkIyA9IDAgJiYgZnVuY19taXNzaW5nX2FyZyAkb3B0ICYmIGJyZWFrCisrCQkJb3B0YXJnPSIkMSIKKysJCQlvcHRfdGFnPSIkb3B0YXJnIgorK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0ICRvcHRhcmciCisrZnVuY19lbmFibGVfdGFnICIkb3B0YXJnIgorIAkJCXNoaWZ0CisgCQkJOzsKKyAKKysgICAgICAtXD98LWgpCQlmdW5jX3VzYWdlCQkJCTs7CisrICAgICAgLS1oZWxwKQkJZnVuY19oZWxwCQkJCTs7CisrICAgICAgLS12ZXJzaW9uKQlmdW5jX3ZlcnNpb24JCQkJOzsKKysKKyAgICAgICAjIFNlcGFyYXRlIG9wdGFyZ3MgdG8gbG9uZyBvcHRpb25zOgorLSAgICAgIC1kbG9wZW49KnwtLW1vZGU9KnwtLXRhZz0qKQorLQkJCWZ1bmNfb3B0X3NwbGl0ICIkb3B0IgorLQkJCXNldCBkdW1teSAiJGZ1bmNfb3B0X3NwbGl0X29wdCIgIiRmdW5jX29wdF9zcGxpdF9hcmciICR7MSsiJEAifQorKyAgICAgIC0tKj0qKQorKwkJCWZ1bmNfc3BsaXRfbG9uZ19vcHQgIiRvcHQiCisrCQkJc2V0IGR1bW15ICIkZnVuY19zcGxpdF9sb25nX29wdF9uYW1lIiAiJGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnIiAkezErIiRAIn0KKyAJCQlzaGlmdAorIAkJCTs7CisgCistICAgICAgLVw/fC1oKQkJZnVuY191c2FnZQkJCQkJOzsKKy0gICAgICAtLWhlbHApCQlvcHRfaGVscD06CQkJCQk7OworLSAgICAgIC0taGVscC1hbGwpCW9wdF9oZWxwPSc6IGhlbHAtYWxsJwkJCQk7OworLSAgICAgIC0tdmVyc2lvbikJZnVuY192ZXJzaW9uCQkJCQk7OworLQorLSAgICAgIC0qKQkJZnVuY19mYXRhbF9oZWxwICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgJG9wdCciCTs7CistCistICAgICAgKikJCW5vbm9wdD0iJG9wdCIKKy0JCQlicmVhaworKyAgICAgICMgU2VwYXJhdGUgbm9uLWFyZ3VtZW50IHNob3J0IG9wdGlvbnM6CisrICAgICAgLVw/KnwtaCp8LW4qfC12KikKKysJCQlmdW5jX3NwbGl0X3Nob3J0X29wdCAiJG9wdCIKKysJCQlzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiAiLSRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmciICR7MSsiJEAifQorKwkJCXNoaWZ0CisgCQkJOzsKKysKKysgICAgICAtLSkJCWJyZWFrCQkJCQk7OworKyAgICAgIC0qKQkJZnVuY19mYXRhbF9oZWxwICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgJG9wdCciIDs7CisrICAgICAgKikJCXNldCBkdW1teSAiJG9wdCIgJHsxKyIkQCJ9OwlzaGlmdDsgYnJlYWsgIDs7CisgICAgIGVzYWMKKyAgIGRvbmUKKyAKKysgICMgVmFsaWRhdGUgb3B0aW9uczoKKysKKysgICMgc2F2ZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50CisrICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KKysgICAgbm9ub3B0PSIkb3B0IgorKyAgICBzaGlmdAorKyAgZmkKKysKKysgICMgcHJlc2VydmUgLS1kZWJ1ZworKyAgdGVzdCAiJG9wdF9kZWJ1ZyIgPSA6IHx8IGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAtLWRlYnVnIgorIAorICAgY2FzZSAkaG9zdCBpbgorICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqcHczMiogfCAqY2VnY2MqIHwgKnNvbGFyaXMyKiApCitAQCAtOTgxLDgyICsxMTg0LDQ0IEBAIGZ1bmNfZW5hYmxlX3RhZyAoKQorICAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9OgorICAgICAgIDs7CisgICAgICopCistICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz0kb3B0X2R1cGxpY2F0ZV9kZXBzCisrICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz0kb3B0X3ByZXNlcnZlX2R1cF9kZXBzCisgICAgICAgOzsKKyAgIGVzYWMKKyAKKy0gICMgSGF2aW5nIHdhcm5lZCBhYm91dCBhbGwgbWlzLXNwZWNpZmllZCBvcHRpb25zLCBiYWlsIG91dCBpZgorLSAgIyBhbnl0aGluZyB3YXMgd3JvbmcuCistICAkZXhpdF9jbWQgJEVYSVRfRkFJTFVSRQorLX0KKysgICRvcHRfaGVscCB8fCB7CisrICAgICMgU2FuaXR5IGNoZWNrcyBmaXJzdDoKKysgICAgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCisgCistIyBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKy0jIEVuc3VyZSB0aGF0IHdlIGFyZSB1c2luZyBtNCBtYWNyb3MsIGFuZCBsaWJ0b29sIHNjcmlwdCBmcm9tIHRoZSBzYW1lCistIyByZWxlYXNlIG9mIGxpYnRvb2wuCistZnVuY19jaGVja192ZXJzaW9uX21hdGNoICgpCisteworLSAgaWYgdGVzdCAiJHBhY2thZ2VfcmV2aXNpb24iICE9ICIkbWFjcm9fcmV2aXNpb24iOyB0aGVuCistICAgIGlmIHRlc3QgIiRWRVJTSU9OIiAhPSAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCistICAgICAgaWYgdGVzdCAteiAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCistICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorLSRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKy0kcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gYW4gb2xkZXIgcmVsZWFzZS4KKy0kcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCistJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorLV9MVF9FT0YKKy0gICAgICBlbHNlCistICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorLSRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKy0kcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gJFBBQ0tBR0UgJG1hY3JvX3ZlcnNpb24uCistJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSAkUEFDS0FHRSAkVkVSU0lPTgorLSRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KKy1fTFRfRU9GCistICAgICAgZmkKKy0gICAgZWxzZQorLSAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCistJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24sCistJHByb2duYW1lOiBidXQgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gcmV2aXNpb24gJG1hY3JvX3JldmlzaW9uLgorLSRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24KKy0kcHJvZ25hbWU6IG9mICRQQUNLQUdFICRWRVJTSU9OIGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCistX0xUX0VPRgorKyAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiAhPSB5ZXM7IHRoZW4KKysgICAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gIm5vdCBjb25maWd1cmVkIHRvIGJ1aWxkIGFueSBraW5kIG9mIGxpYnJhcnkiCisgICAgIGZpCisgCistICAgIGV4aXQgJEVYSVRfTUlTTUFUQ0gKKy0gIGZpCistfQorLQorKyAgICAjIERhcndpbiBzdWNrcworKyAgICBldmFsIHN0ZF9zaHJleHQ9XCIkc2hyZXh0X2NtZHNcIgorIAorLSMjIC0tLS0tLS0tLS0tICMjCistIyMgICAgTWFpbi4gICAgIyMKKy0jIyAtLS0tLS0tLS0tLSAjIworLQorLSRvcHRfaGVscCB8fCB7CistICAjIFNhbml0eSBjaGVja3MgZmlyc3Q6CistICBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKy0KKy0gIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiICE9IHllczsgdGhlbgorLSAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gIm5vdCBjb25maWd1cmVkIHRvIGJ1aWxkIGFueSBraW5kIG9mIGxpYnJhcnkiCistICBmaQorKyAgICAjIE9ubHkgZXhlY3V0ZSBtb2RlIGlzIGFsbG93ZWQgdG8gaGF2ZSAtZGxvcGVuIGZsYWdzLgorKyAgICBpZiB0ZXN0IC1uICIkb3B0X2Rsb3BlbiIgJiYgdGVzdCAiJG9wdF9tb2RlIiAhPSBleGVjdXRlOyB0aGVuCisrICAgICAgZnVuY19lcnJvciAidW5yZWNvZ25pemVkIG9wdGlvbiBcYC1kbG9wZW4nIgorKyAgICAgICRFQ0hPICIkaGVscCIgMT4mMgorKyAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorKyAgICBmaQorIAorLSAgdGVzdCAteiAiJG1vZGUiICYmIGZ1bmNfZmF0YWxfZXJyb3IgImVycm9yOiB5b3UgbXVzdCBzcGVjaWZ5IGEgTU9ERS4iCisrICAgICMgQ2hhbmdlIHRoZSBoZWxwIG1lc3NhZ2UgdG8gYSBtb2RlLXNwZWNpZmljIG9uZS4KKysgICAgZ2VuZXJpY19oZWxwPSIkaGVscCIKKysgICAgaGVscD0iVHJ5IFxgJHByb2duYW1lIC0taGVscCAtLW1vZGU9JG9wdF9tb2RlJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisrICB9CisgCisgCistICAjIERhcndpbiBzdWNrcworLSAgZXZhbCAic3RkX3NocmV4dD1cIiRzaHJleHRfY21kc1wiIgorKyAgIyBCYWlsIGlmIHRoZSBvcHRpb25zIHdlcmUgc2NyZXdlZAorKyAgJGV4aXRfY21kICRFWElUX0ZBSUxVUkUKKyt9CisgCisgCistICAjIE9ubHkgZXhlY3V0ZSBtb2RlIGlzIGFsbG93ZWQgdG8gaGF2ZSAtZGxvcGVuIGZsYWdzLgorLSAgaWYgdGVzdCAtbiAiJGV4ZWN1dGVfZGxmaWxlcyIgJiYgdGVzdCAiJG1vZGUiICE9IGV4ZWN1dGU7IHRoZW4KKy0gICAgZnVuY19lcnJvciAidW5yZWNvZ25pemVkIG9wdGlvbiBcYC1kbG9wZW4nIgorLSAgICAkRUNITyAiJGhlbHAiIDE+JjIKKy0gICAgZXhpdCAkRVhJVF9GQUlMVVJFCistICBmaQorIAorLSAgIyBDaGFuZ2UgdGhlIGhlbHAgbWVzc2FnZSB0byBhIG1vZGUtc3BlY2lmaWMgb25lLgorLSAgZ2VuZXJpY19oZWxwPSIkaGVscCIKKy0gIGhlbHA9IlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPSRtb2RlJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCistfQorIAorKyMjIC0tLS0tLS0tLS0tICMjCisrIyMgICAgTWFpbi4gICAgIyMKKysjIyAtLS0tLS0tLS0tLSAjIworIAorICMgZnVuY19sYWxpYl9wIGZpbGUKKyAjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIGAubGEnIGxpYnJhcnkgb3IgYC5sbycgb2JqZWN0IGZpbGUuCitAQCAtMTEyMSwxMiArMTI4Niw5IEBAIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAoKQorICMgdGVtcG9yYXJ5IGx0d3JhcHBlcl9zY3JpcHQuCisgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAoKQorIHsKKy0gICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ9IiIKKy0gICAgaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkMSI7IHRoZW4KKy0JZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJDEiICIiICIuIgorLQlmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0JZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0LyRvYmpkaXIvJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9X2x0c2h3cmFwcGVyIgorLSAgICBmaQorKyAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkMSIgIiIgIi4iCisrICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorKyAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQvJG9iamRpci8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH1fbHRzaHdyYXBwZXIiCisgfQorIAorICMgZnVuY19sdHdyYXBwZXJfcCBmaWxlCitAQCAtMTE0OSw3ICsxMzExLDcgQEAgZnVuY19leGVjdXRlX2NtZHMgKCkKKyAgICAgc2F2ZV9pZnM9JElGUzsgSUZTPSd+JworICAgICBmb3IgY21kIGluICQxOyBkbworICAgICAgIElGUz0kc2F2ZV9pZnMKKy0gICAgICBldmFsICJjbWQ9XCIkY21kXCIiCisrICAgICAgZXZhbCBjbWQ9XCIkY21kXCIKKyAgICAgICBmdW5jX3Nob3dfZXZhbCAiJGNtZCIgIiR7Mi06fSIKKyAgICAgZG9uZQorICAgICBJRlM9JHNhdmVfaWZzCitAQCAtMTE3Miw2ICsxMzM0LDM3IEBAIGZ1bmNfc291cmNlICgpCisgfQorIAorIAorKyMgZnVuY19yZXNvbHZlX3N5c3Jvb3QgUEFUSAorKyMgUmVwbGFjZSBhIGxlYWRpbmcgPSBpbiBQQVRIIHdpdGggYSBzeXNyb290LiAgU3RvcmUgdGhlIHJlc3VsdCBpbnRvCisrIyBmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKytmdW5jX3Jlc29sdmVfc3lzcm9vdCAoKQorK3sKKysgIGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdD0kMQorKyAgY2FzZSAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IGluCisrICA9KikKKysgICAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorKyAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQ9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrICAgIDs7CisrICBlc2FjCisrfQorKworKyMgZnVuY19yZXBsYWNlX3N5c3Jvb3QgUEFUSAorKyMgSWYgUEFUSCBiZWdpbnMgd2l0aCB0aGUgc3lzcm9vdCwgcmVwbGFjZSBpdCB3aXRoID0gYW5kCisrIyBzdG9yZSB0aGUgcmVzdWx0IGludG8gZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0LgorK2Z1bmNfcmVwbGFjZV9zeXNyb290ICgpCisreworKyAgY2FzZSAiJGx0X3N5c3Jvb3Q6JDEiIGluCisrICA/KjoiJGx0X3N5c3Jvb3QiKikKKysgICAgZnVuY19zdHJpcG5hbWUgIiRsdF9zeXNyb290IiAnJyAiJDEiCisrICAgIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdD0iPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrICAgIDs7CisrICAqKQorKyAgICAjIEluY2x1ZGluZyBubyBzeXNyb290LgorKyAgICBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQ9JDEKKysgICAgOzsKKysgIGVzYWMKKyt9CisrCisgIyBmdW5jX2luZmVyX3RhZyBhcmcKKyAjIEluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIHRvIHVzZSBpZiBhbnkgYXJlIGF2YWlsYWJsZSBhbmQKKyAjIGlmIG9uZSB3YXNuJ3QgY2hvc2VuIHZpYSB0aGUgIi0tdGFnIiBjb21tYW5kIGxpbmUgb3B0aW9uLgorQEAgLTExODQsOCArMTM3Nyw3IEBAIGZ1bmNfaW5mZXJfdGFnICgpCisgICAgIGlmIHRlc3QgLW4gIiRhdmFpbGFibGVfdGFncyIgJiYgdGVzdCAteiAiJHRhZ25hbWUiOyB0aGVuCisgICAgICAgQ0NfcXVvdGVkPQorICAgICAgIGZvciBhcmcgaW4gJENDOyBkbworLSAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKy0JQ0NfcXVvdGVkPSIkQ0NfcXVvdGVkICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysJZnVuY19hcHBlbmRfcXVvdGVkIENDX3F1b3RlZCAiJGFyZyIKKyAgICAgICBkb25lCisgICAgICAgQ0NfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDYAorICAgICAgIENDX3F1b3RlZF9leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NfcXVvdGVkYAorQEAgLTEyMDQsOCArMTM5Niw3IEBAIGZ1bmNfaW5mZXJfdGFnICgpCisgCSAgICBDQ19xdW90ZWQ9CisgCSAgICBmb3IgYXJnIGluICRDQzsgZG8KKyAJICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIG90aGVyIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLgorLQkgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorLQkgICAgICBDQ19xdW90ZWQ9IiRDQ19xdW90ZWQgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKwkgICAgICBmdW5jX2FwcGVuZF9xdW90ZWQgQ0NfcXVvdGVkICIkYXJnIgorIAkgICAgZG9uZQorIAkgICAgQ0NfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDYAorIAkgICAgQ0NfcXVvdGVkX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ19xdW90ZWRgCitAQCAtMTI3NCw2ICsxNDY1LDQ4NiBAQCBFT0YKKyAgICAgfQorIH0KKyAKKysKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKyMgRklMRSBOQU1FIEFORCBQQVRIIENPTlZFUlNJT04gSEVMUEVSIEZVTkNUSU9OUyAjCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysKKysjIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgQVJHCisrIyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgd2hlbiAkYnVpbGQgaXMgKm5peCwKKysjIGFuZCAkaG9zdCBpcyBtaW5ndywgY3lnd2luLCBvciBzb21lIG90aGVyIHczMiBlbnZpcm9ubWVudC4gUmVsaWVzIG9uIGEKKysjIGNvcnJlY3RseSBjb25maWd1cmVkIHdpbmUgZW52aXJvbm1lbnQgYXZhaWxhYmxlLCB3aXRoIHRoZSB3aW5lcGF0aCBwcm9ncmFtCisrIyBpbiAkYnVpbGQncyAkUEFUSC4KKysjCisrIyBBUkcgaXMgdGhlICRidWlsZCBmaWxlIG5hbWUgdG8gYmUgY29udmVydGVkIHRvIHczMiBmb3JtYXQuCisrIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluICRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCwgYW5kIHdpbGwKKysjIGJlIGVtcHR5IG9uIGVycm9yIChvciB3aGVuIEFSRyBpcyBlbXB0eSkKKytmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9IiQxIgorKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisrICAgICMgVW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lcyBub3QgZXhpdCB3aXRoIGEgbm9uLXplcm8gZXJyb3IgY29kZSwgc28gd2UKKysgICAgIyBhcmUgZm9yY2VkIHRvIGNoZWNrIHRoZSBjb250ZW50cyBvZiBzdGRvdXQuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUKKysgICAgIyBjb21tYW5kIGlzIG5vdCBmb3VuZCwgdGhlIHNoZWxsIHdpbGwgc2V0IGFuIGV4aXQgY29kZSBvZiAxMjcgYW5kIHByaW50CisrICAgICMgKmFuIGVycm9yIG1lc3NhZ2UqIHRvIHN0ZG91dC4gU28gd2UgbXVzdCBjaGVjayBmb3IgYm90aCBlcnJvciBjb2RlIG9mCisrICAgICMgemVybyBBTkQgbm9uLWVtcHR5IHN0ZG91dCwgd2hpY2ggZXhwbGFpbnMgdGhlIG9kZCBjb25zdHJ1Y3Rpb246CisrICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wPWB3aW5lcGF0aCAtdyAiJDEiIDI+L2Rldi9udWxsYAorKyAgICBpZiB0ZXN0ICIkPyIgLWVxIDAgJiYgdGVzdCAtbiAiJHtmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcH0iOyB0aGVuCisrICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9YCRFQ0hPICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXAiIHwKKysgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKysgICAgZWxzZQorKyAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0PQorKyAgICBmaQorKyAgZmkKKyt9CisrIyBlbmQ6IGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIKKysKKysKKysjIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgQVJHCisrIyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBwYXRoIGNvbnZlcnNpb24gZnVuY3Rpb25zIHdoZW4gJGJ1aWxkIGlzICpuaXgsIGFuZAorKyMgJGhvc3QgaXMgbWluZ3csIGN5Z3dpbiwgb3Igc29tZSBvdGhlciB3MzIgZW52aXJvbm1lbnQuIFJlbGllcyBvbiBhIGNvcnJlY3RseQorKyMgY29uZmlndXJlZCB3aW5lIGVudmlyb25tZW50IGF2YWlsYWJsZSwgd2l0aCB0aGUgd2luZXBhdGggcHJvZ3JhbSBpbiAkYnVpbGQncworKyMgJFBBVEguIEFzc3VtZXMgQVJHIGhhcyBubyBsZWFkaW5nIG9yIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMuCisrIworKyMgQVJHIGlzIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIGZvcm1hdCB0byB3aW4zMi4KKysjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0LgorKyMgVW5jb252ZXJ0aWJsZSBmaWxlIChkaXJlY3RvcnkpIG5hbWVzIGluIEFSRyBhcmUgc2tpcHBlZDsgaWYgbm8gZGlyZWN0b3J5IG5hbWVzCisrIyBhcmUgY29udmVydGlibGUsIHRoZW4gdGhlIHJlc3VsdCBtYXkgYmUgZW1wdHkuCisrZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgICMgdW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lc24ndCBjb252ZXJ0IHBhdGhzLCBvbmx5IGZpbGUgbmFtZXMKKysgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0PSIiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgb2xkSUZTPSRJRlMKKysgICAgSUZTPToKKysgICAgZm9yIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfZiBpbiAkMTsgZG8KKysgICAgICBJRlM9JG9sZElGUworKyAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX2YiCisrICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IiA7IHRoZW4KKysgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCI7IHRoZW4KKysgICAgICAgICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgZnVuY19hcHBlbmQgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQgIjskZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgIGRvbmUKKysgICAgSUZTPSRvbGRJRlMKKysgIGZpCisrfQorKyMgZW5kOiBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyCisrCisrCisrIyBmdW5jX2N5Z3BhdGggQVJHUy4uLgorKyMgV3JhcHBlciBhcm91bmQgY2FsbGluZyB0aGUgY3lncGF0aCBwcm9ncmFtIHZpYSBMVF9DWUdQQVRILiBUaGlzIGlzIHVzZWQgd2hlbgorKyMgd2hlbiAoMSkgJGJ1aWxkIGlzICpuaXggYW5kIEN5Z3dpbiBpcyBob3N0ZWQgdmlhIGEgd2luZSBlbnZpcm9ubWVudDsgb3IgKDIpCisrIyAkYnVpbGQgaXMgTVNZUyBhbmQgJGhvc3QgaXMgQ3lnd2luLCBvciAoMykgJGJ1aWxkIGlzIEN5Z3dpbi4gSW4gY2FzZSAoMSkgb3IKKysjICgyKSwgcmV0dXJucyB0aGUgQ3lnd2luIGZpbGUgbmFtZSBvciBwYXRoIGluIGZ1bmNfY3lncGF0aF9yZXN1bHQgKGlucHV0CisrIyBmaWxlIG5hbWUgb3IgcGF0aCBpcyBhc3N1bWVkIHRvIGJlIGluIHczMiBmb3JtYXQsIGFzIHByZXZpb3VzbHkgY29udmVydGVkCisrIyBmcm9tICRidWlsZCdzICpuaXggb3IgTVNZUyBmb3JtYXQpLiBJbiBjYXNlICgzKSwgcmV0dXJucyB0aGUgdzMyIGZpbGUgbmFtZQorKyMgb3IgcGF0aCBpbiBmdW5jX2N5Z3BhdGhfcmVzdWx0IChpbnB1dCBmaWxlIG5hbWUgb3IgcGF0aCBpcyBhc3N1bWVkIHRvIGJlIGluCisrIyBDeWd3aW4gZm9ybWF0KS4gUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgb24gZXJyb3IuCisrIworKyMgQVJHUyBhcmUgcGFzc2VkIHRvIGN5Z3BhdGgsIHdpdGggdGhlIGxhc3Qgb25lIGJlaW5nIHRoZSBmaWxlIG5hbWUgb3IgcGF0aCB0bworKyMgYmUgY29udmVydGVkLgorKyMKKysjIFNwZWNpZnkgdGhlIGFic29sdXRlICpuaXggKG9yIHczMikgbmFtZSB0byBjeWdwYXRoIGluIHRoZSBMVF9DWUdQQVRICisrIyBlbnZpcm9ubWVudCB2YXJpYWJsZTsgZG8gbm90IHB1dCBpdCBpbiAkUEFUSC4KKytmdW5jX2N5Z3BhdGggKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBpZiB0ZXN0IC1uICIkTFRfQ1lHUEFUSCIgJiYgdGVzdCAtZiAiJExUX0NZR1BBVEgiOyB0aGVuCisrICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9YCRMVF9DWUdQQVRIICIkQCIgMj4vZGV2L251bGxgCisrICAgIGlmIHRlc3QgIiQ/IiAtbmUgMDsgdGhlbgorKyAgICAgICMgb24gZmFpbHVyZSwgZW5zdXJlIHJlc3VsdCBpcyBlbXB0eQorKyAgICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9CisrICAgIGZpCisrICBlbHNlCisrICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9CisrICAgIGZ1bmNfZXJyb3IgIkxUX0NZR1BBVEggaXMgZW1wdHkgb3Igc3BlY2lmaWVzIG5vbi1leGlzdGVudCBmaWxlOiBcYCRMVF9DWUdQQVRIJyIKKysgIGZpCisrfQorKyNlbmQ6IGZ1bmNfY3lncGF0aAorKworKworKyMgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgQVJHCisrIyBDb252ZXJ0IGZpbGUgbmFtZSBvciBwYXRoIEFSRyBmcm9tIE1TWVMgZm9ybWF0IHRvIHczMiBmb3JtYXQuICBSZXR1cm4KKysjIHJlc3VsdCBpbiBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQuCisrZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICAjIGF3a3dhcmQ6IGNtZCBhcHBlbmRzIHNwYWNlcyB0byByZXN1bHQKKysgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdD1gKCBjbWQgLy9jIGVjaG8gIiQxIiApIDI+L2Rldi9udWxsIHwKKysgICAgJFNFRCAtZSAncy9bIF0qJC8vJyAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorK30KKysjZW5kOiBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMgorKworKworKyMgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgQVJHMSBBUkcyCisrIyBWZXJpZnkgdGhhdCBBUkcxIChhIGZpbGUgbmFtZSBpbiAkYnVpbGQgZm9ybWF0KSB3YXMgY29udmVydGVkIHRvICRob3N0CisrIyBmb3JtYXQgaW4gQVJHMi4gT3RoZXJ3aXNlLCBlbWl0IGFuIGVycm9yIG1lc3NhZ2UsIGJ1dCBjb250aW51ZSAocmVzZXR0aW5nCisrIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQgdG8gQVJHMSkuCisrZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBpZiB0ZXN0IC16ICIkMiIgJiYgdGVzdCAtbiAiJDEiIDsgdGhlbgorKyAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIGhvc3QgZmlsZSBuYW1lIGNvcnJlc3BvbmRpbmcgdG8iCisrICAgIGZ1bmNfZXJyb3IgIiAgXGAkMSciCisrICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgorKyAgICAjIEZhbGxiYWNrOgorKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorKyAgZmkKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sKKysKKysKKysjIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIEZST01fUEFUSFNFUCBUT19QQVRIU0VQIEZST01fUEFUSCBUT19QQVRICisrIyBWZXJpZnkgdGhhdCBGUk9NX1BBVEggKGEgcGF0aCBpbiAkYnVpbGQgZm9ybWF0KSB3YXMgY29udmVydGVkIHRvICRob3N0CisrIyBmb3JtYXQgaW4gVE9fUEFUSC4gT3RoZXJ3aXNlLCBlbWl0IGFuIGVycm9yIG1lc3NhZ2UsIGJ1dCBjb250aW51ZSwgcmVzZXR0aW5nCisrIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQgdG8gYSBzaW1wbGlzdGljIGZhbGxiYWNrIHZhbHVlIChzZWUgYmVsb3cpLgorK2Z1bmNfY29udmVydF9wYXRoX2NoZWNrICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgaWYgdGVzdCAteiAiJDQiICYmIHRlc3QgLW4gIiQzIjsgdGhlbgorKyAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBob3N0IHBhdGggY29ycmVzcG9uZGluZyB0byIKKysgICAgZnVuY19lcnJvciAiICBcYCQzJyIKKysgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCisrICAgICMgRmFsbGJhY2suICBUaGlzIGlzIGEgZGVsaWJlcmF0ZWx5IHNpbXBsaXN0aWMgImNvbnZlcnNpb24iIGFuZAorKyAgICAjIHNob3VsZCBub3QgYmUgImltcHJvdmVkIi4gIFNlZSBsaWJ0b29sLmluZm8uCisrICAgIGlmIHRlc3QgIngkMSIgIT0gIngkMiI7IHRoZW4KKysgICAgICBsdF9yZXBsYWNlX3BhdGhzZXBfY2hhcnM9InN8JDF8JDJ8ZyIKKysgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YGVjaG8gIiQzIiB8CisrICAgICAgICAkU0VEIC1lICIkbHRfcmVwbGFjZV9wYXRoc2VwX2NoYXJzImAKKysgICAgZWxzZQorKyAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDMiCisrICAgIGZpCisrICBmaQorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjaworKworKworKyMgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwIEZST05UUEFUIEJBQ0tQQVQgUkVQTCBPUklHCisrIyBNb2RpZmllcyBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQgYnkgcHJlcGVuZGluZyBSRVBMIGlmIE9SSUcgbWF0Y2hlcyBGUk9OVFBBVAorKyMgYW5kIGFwcGVuZGluZyBSRVBMIGlmIE9SSUcgbWF0Y2hlcyBCQUNLUEFULgorK2Z1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGNhc2UgJDQgaW4KKysgICQxICkgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMyRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisrICAgIDs7CisrICBlc2FjCisrICBjYXNlICQ0IGluCisrICAkMiApIGZ1bmNfYXBwZW5kIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCAiJDMiCisrICAgIDs7CisrICBlc2FjCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcAorKworKworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrIyAkYnVpbGQgdG8gJGhvc3QgRklMRSBOQU1FIENPTlZFUlNJT04gRlVOQ1RJT05TICMKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKyMgaW52b2tlZCB2aWEgYCR0b19ob3N0X2ZpbGVfY21kIEFSRycKKysjCisrIyBJbiBlYWNoIGNhc2UsIEFSRyBpcyB0aGUgcGF0aCB0byBiZSBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgdG8gJGhvc3QgZm9ybWF0LgorKyMgUmVzdWx0IHdpbGwgYmUgYXZhaWxhYmxlIGluICRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrCisrCisrIyBmdW5jX3RvX2hvc3RfZmlsZSBBUkcKKysjIENvbnZlcnRzIHRoZSBmaWxlIG5hbWUgQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuIFJldHVybiByZXN1bHQKKysjIGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX3RvX2hvc3RfZmlsZSAoKQorK3sKKysgICRvcHRfZGVidWcKKysgICR0b19ob3N0X2ZpbGVfY21kICIkMSIKKyt9CisrIyBlbmQgZnVuY190b19ob3N0X2ZpbGUKKysKKysKKysjIGZ1bmNfdG9fdG9vbF9maWxlIEFSRyBMQVpZCisrIyBjb252ZXJ0cyB0aGUgZmlsZSBuYW1lIEFSRyBmcm9tICRidWlsZCBmb3JtYXQgdG8gdG9vbGNoYWluIGZvcm1hdC4gUmV0dXJuCisrIyByZXN1bHQgaW4gZnVuY190b190b29sX2ZpbGVfcmVzdWx0LiAgSWYgdGhlIGNvbnZlcnNpb24gaW4gdXNlIGlzIGxpc3RlZAorKyMgaW4gKHRoZSBjb21tYSBzZXBhcmF0ZWQpIExBWlksIG5vIGNvbnZlcnNpb24gdGFrZXMgcGxhY2UuCisrZnVuY190b190b29sX2ZpbGUgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBjYXNlICwkMiwgaW4KKysgICAgKiwiJHRvX3Rvb2xfZmlsZV9jbWQiLCopCisrICAgICAgZnVuY190b190b29sX2ZpbGVfcmVzdWx0PSQxCisrICAgICAgOzsKKysgICAgKikKKysgICAgICAkdG9fdG9vbF9maWxlX2NtZCAiJDEiCisrICAgICAgZnVuY190b190b29sX2ZpbGVfcmVzdWx0PSRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQKKysgICAgICA7OworKyAgZXNhYworK30KKysjIGVuZCBmdW5jX3RvX3Rvb2xfZmlsZQorKworKworKyMgZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCBBUkcKKysjIENvcHkgQVJHIHRvIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfZmlsZV9ub29wICgpCisreworKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKworKworKyMgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgQVJHCisrIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSAobWluZ3cpIE1TWVMgdG8gKG1pbmd3KSB3MzIgZm9ybWF0OyBhdXRvbWF0aWMKKysjIGNvbnZlcnNpb24gdG8gdzMyIGlzIG5vdCBhdmFpbGFibGUgaW5zaWRlIHRoZSBjd3JhcHBlci4gIFJldHVybnMgcmVzdWx0IGluCisrIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisrICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkMSIKKysgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgorKyAgZmkKKysgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrCisrCisrIyBmdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyIEFSRworKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gQ3lnd2luIHRvIHczMiBmb3JtYXQuICBSZXR1cm5zIHJlc3VsdCBpbgorKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisrICAgICMgYmVjYXVzZSAkYnVpbGQgaXMgY3lnd2luLCB3ZSBjYWxsICJ0aGUiIGN5Z3BhdGggaW4gJFBBVEg7IG5vIG5lZWQgdG8gdXNlCisrICAgICMgTFRfQ1lHUEFUSCBpbiB0aGlzIGNhc2UuCisrICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD1gY3lncGF0aCAtbSAiJDEiYAorKyAgZmkKKysgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKysKKysKKysjIGZ1bmNfY29udmVydF9maWxlX25peF90b193MzIgQVJHCisrIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSAqbml4IHRvIHczMiBmb3JtYXQuICBSZXF1aXJlcyBhIHdpbmUgZW52aXJvbm1lbnQKKysjIGFuZCBhIHdvcmtpbmcgd2luZXBhdGguIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICIkMSIKKysgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCisrICBmaQorKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorKworKworKyMgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4gQVJHCisrIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSBNU1lTIHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBMVF9DWUdQQVRIIHNldC4KKysjIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiQxIgorKyAgICBmdW5jX2N5Z3BhdGggLXUgIiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCisrICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY3lncGF0aF9yZXN1bHQiCisrICBmaQorKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKysKKysKKysjIGZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4gQVJHCisrIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSAqbml4IHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBDeWd3aW4gaW5zdGFsbGVkCisrIyBpbiBhIHdpbmUgZW52aXJvbm1lbnQsIHdvcmtpbmcgd2luZXBhdGgsIGFuZCBMVF9DWUdQQVRIIHNldC4gIFJldHVybnMgcmVzdWx0CisrIyBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgIyBjb252ZXJ0IGZyb20gKm5peCB0byB3MzIsIHRoZW4gdXNlIGN5Z3BhdGggdG8gY29udmVydCBmcm9tIHczMiB0byBjeWd3aW4uCisrICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiQxIgorKyAgICBmdW5jX2N5Z3BhdGggLXUgIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKysgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKysgIGZpCisrICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisrCisrCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrIyAkYnVpbGQgdG8gJGhvc3QgUEFUSCBDT05WRVJTSU9OIEZVTkNUSU9OUyAjCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrIyBpbnZva2VkIHZpYSBgJHRvX2hvc3RfcGF0aF9jbWQgQVJHJworKyMKKysjIEluIGVhY2ggY2FzZSwgQVJHIGlzIHRoZSBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCB0byAkaG9zdCBmb3JtYXQuCisrIyBUaGUgcmVzdWx0IHdpbGwgYmUgYXZhaWxhYmxlIGluICRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCisrIworKyMgUGF0aCBzZXBhcmF0b3JzIGFyZSBhbHNvIGNvbnZlcnRlZCBmcm9tICRidWlsZCBmb3JtYXQgdG8gJGhvc3QgZm9ybWF0LiAgSWYKKysjIEFSRyBiZWdpbnMgb3IgZW5kcyB3aXRoIGEgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVyLCBpdCBpcyBwcmVzZXJ2ZWQgKGJ1dAorKyMgY29udmVydGVkIHRvICRob3N0IGZvcm1hdCkgb24gb3V0cHV0LgorKyMKKysjIEFsbCBwYXRoIGNvbnZlcnNpb24gZnVuY3Rpb25zIGFyZSBuYW1lZCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbnZlbnRpb246CisrIyAgIGZpbGUgbmFtZSBjb252ZXJzaW9uIGZ1bmN0aW9uICAgIDogZnVuY19jb252ZXJ0X2ZpbGVfWF90b19ZICgpCisrIyAgIHBhdGggY29udmVyc2lvbiBmdW5jdGlvbiAgICAgICAgIDogZnVuY19jb252ZXJ0X3BhdGhfWF90b19ZICgpCisrIyB3aGVyZSwgZm9yIGFueSBnaXZlbiAkYnVpbGQvJGhvc3QgY29tYmluYXRpb24gdGhlICdYX3RvX1knIHZhbHVlIGlzIHRoZQorKyMgc2FtZS4gIElmIGNvbnZlcnNpb24gZnVuY3Rpb25zIGFyZSBhZGRlZCBmb3IgbmV3ICRidWlsZC8kaG9zdCBjb21iaW5hdGlvbnMsCisrIyB0aGUgdHdvIG5ldyBmdW5jdGlvbnMgbXVzdCBmb2xsb3cgdGhpcyBwYXR0ZXJuLCBvciBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAorKyMgd2lsbCBicmVhay4KKysKKysKKysjIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCisrIyBFbnN1cmVzIHRoYXQgZnVuY3Rpb24gInBvaW50ZXIiIHZhcmlhYmxlICR0b19ob3N0X3BhdGhfY21kIGlzIHNldCB0byB0aGUKKysjIGFwcHJvcHJpYXRlIHZhbHVlLCBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgJHRvX2hvc3RfZmlsZV9jbWQuCisrdG9faG9zdF9wYXRoX2NtZD0KKytmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZCAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGlmIHRlc3QgLXogIiR0b19ob3N0X3BhdGhfY21kIjsgdGhlbgorKyAgICBmdW5jX3N0cmlwbmFtZSAnZnVuY19jb252ZXJ0X2ZpbGVfJyAnJyAiJHRvX2hvc3RfZmlsZV9jbWQiCisrICAgIHRvX2hvc3RfcGF0aF9jbWQ9ImZ1bmNfY29udmVydF9wYXRoXyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fSIKKysgIGZpCisrfQorKworKworKyMgZnVuY190b19ob3N0X3BhdGggQVJHCisrIyBDb252ZXJ0cyB0aGUgcGF0aCBBUkcgZnJvbSAkYnVpbGQgZm9ybWF0IHRvICRob3N0IGZvcm1hdC4gUmV0dXJuIHJlc3VsdAorKyMgaW4gZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorK2Z1bmNfdG9faG9zdF9wYXRoICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQKKysgICR0b19ob3N0X3BhdGhfY21kICIkMSIKKyt9CisrIyBlbmQgZnVuY190b19ob3N0X3BhdGgKKysKKysKKysjIGZ1bmNfY29udmVydF9wYXRoX25vb3AgQVJHCisrIyBDb3B5IEFSRyB0byBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCisrZnVuY19jb252ZXJ0X3BhdGhfbm9vcCAoKQorK3sKKysgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX25vb3AKKysKKysKKysjIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyIEFSRworKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tIChtaW5ndykgTVNZUyB0byAobWluZ3cpIHczMiBmb3JtYXQ7IGF1dG9tYXRpYworKyMgY29udmVyc2lvbiB0byB3MzIgaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgdGhlIGN3cmFwcGVyLiAgUmV0dXJucyByZXN1bHQgaW4KKysjIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tIEFSRy4gIE1TWVMKKysgICAgIyBiZWhhdmlvciBpcyBpbmNvbnNpc3RlbnQgaGVyZTsgY3lncGF0aCB0dXJucyB0aGVtIGludG8gJy47JyBhbmQgJzsuJzsKKysgICAgIyBhbmQgd2luZXBhdGggaWdub3JlcyB0aGVtIGNvbXBsZXRlbHkuCisrICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisrICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCisrICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKysgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAorKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisrICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKKysgIGZpCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyCisrCisrCisrIyBmdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyIEFSRworKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tIEN5Z3dpbiB0byB3MzIgZm9ybWF0LiAgUmV0dXJucyByZXN1bHQgaW4KKysjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKKysgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKysgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gY3lncGF0aCAtbSAtcCAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiYAorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCisrICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKysgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiAiOyIgIiQxIgorKyAgZmkKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfY3lnd2luX3RvX3czMgorKworKworKyMgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX3czMiBBUkcKKysjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSAqbml4IHRvIHczMiBmb3JtYXQuICBSZXF1aXJlcyBhIHdpbmUgZW52aXJvbm1lbnQgYW5kCisrIyBhIHdvcmtpbmcgd2luZXBhdGguICBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX3czMiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6CisrICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisrICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKyAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKKysgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQiCisrICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogIjsiIFwKKysgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCisrICBmaQorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyCisrCisrCisrIyBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbiBBUkcKKysjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSBNU1lTIHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBMVF9DWUdQQVRIIHNldC4KKysjIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6CisrICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisrICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCisrICAgIGZ1bmNfY3lncGF0aCAtdSAtcCAiJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKysgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKysgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiA6IFwKKysgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiIDogIiQxIgorKyAgZmkKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b19jeWd3aW4KKysKKysKKysjIGZ1bmNfY29udmVydF9wYXRoX25peF90b19jeWd3aW4gQVJHCisrIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gKm5peCB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgQ3lnd2luIGluc3RhbGxlZCBpbiBhCisrIyBhIHdpbmUgZW52aXJvbm1lbnQsIHdvcmtpbmcgd2luZXBhdGgsIGFuZCBMVF9DWUdQQVRIIHNldC4gIFJldHVybnMgcmVzdWx0IGluCisrIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tCisrICAgICMgQVJHLiBtc3lzIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBoZXJlLCBjeWdwYXRoIHR1cm5zIHRoZW0KKysgICAgIyBpbnRvICcuOycgYW5kICc7LicsIGFuZCB3aW5lcGF0aCBpZ25vcmVzIHRoZW0gY29tcGxldGVseS4KKysgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKysgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorKyAgICBmdW5jX2N5Z3BhdGggLXUgLXAgIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKysgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKysgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiA6IFwKKysgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiIDogIiQxIgorKyAgZmkKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbgorKworKworICMgZnVuY19tb2RlX2NvbXBpbGUgYXJnLi4uCisgZnVuY19tb2RlX2NvbXBpbGUgKCkKKyB7CitAQCAtMTMxNCwxMiArMTk4NSwxMiBAQCBmdW5jX21vZGVfY29tcGlsZSAoKQorIAkgIDs7CisgCisgCS1waWUgfCAtZnBpZSB8IC1mUElFKQorLSAgICAgICAgICBwaWVfZmxhZz0iJHBpZV9mbGFnICRhcmciCisrICAgICAgICAgIGZ1bmNfYXBwZW5kIHBpZV9mbGFnICIgJGFyZyIKKyAJICBjb250aW51ZQorIAkgIDs7CisgCisgCS1zaGFyZWQgfCAtc3RhdGljIHwgLXByZWZlci1waWMgfCAtcHJlZmVyLW5vbi1waWMpCistCSAgbGF0ZXI9IiRsYXRlciAkYXJnIgorKwkgIGZ1bmNfYXBwZW5kIGxhdGVyICIgJGFyZyIKKyAJICBjb250aW51ZQorIAkgIDs7CisgCitAQCAtMTM0MCwxNSArMjAxMSwxNCBAQCBmdW5jX21vZGVfY29tcGlsZSAoKQorIAkgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworIAkgIGZvciBhcmcgaW4gJGFyZ3M7IGRvCisgCSAgICBJRlM9IiRzYXZlX2lmcyIKKy0JICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCistCSAgICBsYXN0YXJnPSIkbGFzdGFyZyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCSAgICBmdW5jX2FwcGVuZF9xdW90ZWQgbGFzdGFyZyAiJGFyZyIKKyAJICBkb25lCisgCSAgSUZTPSIkc2F2ZV9pZnMiCisgCSAgZnVuY19zdHJpcG5hbWUgJyAnICcnICIkbGFzdGFyZyIKKyAJICBsYXN0YXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAKKyAJICAjIEFkZCB0aGUgYXJndW1lbnRzIHRvIGJhc2VfY29tcGlsZS4KKy0JICBiYXNlX2NvbXBpbGU9IiRiYXNlX2NvbXBpbGUgJGxhc3RhcmciCisrCSAgZnVuY19hcHBlbmQgYmFzZV9jb21waWxlICIgJGxhc3RhcmciCisgCSAgY29udGludWUKKyAJICA7OworIAorQEAgLTEzNjQsOCArMjAzNCw3IEBAIGZ1bmNfbW9kZV9jb21waWxlICgpCisgICAgICAgZXNhYyAgICAjICBjYXNlICRhcmdfbW9kZQorIAorICAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSB0aGUgcHJldmlvdXMgYXJndW1lbnQuCistICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGxhc3RhcmciCistICAgICAgYmFzZV9jb21waWxlPSIkYmFzZV9jb21waWxlICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysgICAgICBmdW5jX2FwcGVuZF9xdW90ZWQgYmFzZV9jb21waWxlICIkbGFzdGFyZyIKKyAgICAgZG9uZSAjIGZvciBhcmcKKyAKKyAgICAgY2FzZSAkYXJnX21vZGUgaW4KK0BAIC0xNDk2LDE3ICsyMTY1LDE2IEBAIGNvbXBpbGVyLiIKKyAJJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorIAlleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgICBmaQorLSAgICAgIHJlbW92ZWxpc3Q9IiRyZW1vdmVsaXN0ICRvdXRwdXRfb2JqIgorKyAgICAgIGZ1bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkb3V0cHV0X29iaiIKKyAgICAgICAkRUNITyAiJHNyY2ZpbGUiID4gIiRsb2NrZmlsZSIKKyAgICAgZmkKKyAKKyAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorLSAgICByZW1vdmVsaXN0PSIkcmVtb3ZlbGlzdCAkbG9ja2ZpbGUiCisrICAgIGZ1bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkbG9ja2ZpbGUiCisgICAgIHRyYXAgJyRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScgMSAyIDE1CisgCistICAgIGlmIHRlc3QgLW4gIiRmaXhfc3JjZmlsZV9wYXRoIjsgdGhlbgorLSAgICAgIGV2YWwgInNyY2ZpbGU9XCIkZml4X3NyY2ZpbGVfcGF0aFwiIgorLSAgICBmaQorKyAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJHNyY2ZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgIHNyY2ZpbGU9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkc3JjZmlsZSIKKyAgICAgcXNyY2ZpbGU9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CisgCitAQCAtMTUyNiw3ICsyMTk0LDcgQEAgY29tcGlsZXIuIgorIAorICAgICAgIGlmIHRlc3QgLXogIiRvdXRwdXRfb2JqIjsgdGhlbgorIAkjIFBsYWNlIFBJQyBvYmplY3RzIGluICRvYmpkaXIKKy0JY29tbWFuZD0iJGNvbW1hbmQgLW8gJGxvYmoiCisrCWZ1bmNfYXBwZW5kIGNvbW1hbmQgIiAtbyAkbG9iaiIKKyAgICAgICBmaQorIAorICAgICAgIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAiJGNvbW1hbmQiCVwKK0BAIC0xNTczLDExICsyMjQxLDExIEBAIGNvbXBpbGVyLiIKKyAJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUgJHBpY19mbGFnIgorICAgICAgIGZpCisgICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX2NfbyIgPSB5ZXM7IHRoZW4KKy0JY29tbWFuZD0iJGNvbW1hbmQgLW8gJG9iaiIKKysJZnVuY19hcHBlbmQgY29tbWFuZCAiIC1vICRvYmoiCisgICAgICAgZmkKKyAKKyAgICAgICAjIFN1cHByZXNzIGNvbXBpbGVyIG91dHB1dCBpZiB3ZSBhbHJlYWR5IGRpZCBhIFBJQyBjb21waWxhdGlvbi4KKy0gICAgICBjb21tYW5kPSIkY29tbWFuZCRzdXBwcmVzc19vdXRwdXQiCisrICAgICAgZnVuY19hcHBlbmQgY29tbWFuZCAiJHN1cHByZXNzX291dHB1dCIKKyAgICAgICBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgIiRjb21tYW5kIiBcCisgICAgICAgICAnJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJworIAorQEAgLTE2MjIsMTMgKzIyOTAsMTMgQEAgY29tcGlsZXIuIgorIH0KKyAKKyAkb3B0X2hlbHAgfHwgeworLSAgdGVzdCAiJG1vZGUiID0gY29tcGlsZSAmJiBmdW5jX21vZGVfY29tcGlsZSAkezErIiRAIn0KKysgIHRlc3QgIiRvcHRfbW9kZSIgPSBjb21waWxlICYmIGZ1bmNfbW9kZV9jb21waWxlICR7MSsiJEAifQorIH0KKyAKKyBmdW5jX21vZGVfaGVscCAoKQorIHsKKyAgICAgIyBXZSBuZWVkIHRvIGRpc3BsYXkgaGVscCBmb3IgZWFjaCBvZiB0aGUgbW9kZXMuCistICAgIGNhc2UgJG1vZGUgaW4KKysgICAgY2FzZSAkb3B0X21vZGUgaW4KKyAgICAgICAiIikKKyAgICAgICAgICMgR2VuZXJpYyBoZWxwIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSB1c2FnZSBjb21tZW50cworICAgICAgICAgIyBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmaWxlLgorQEAgLTE2NTksOCArMjMyNyw4IEBAIFRoaXMgbW9kZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBvcHRpb25zOgorIAorICAgLW8gT1VUUFVULUZJTEUgICAgc2V0IHRoZSBvdXRwdXQgZmlsZSBuYW1lIHRvIE9VVFBVVC1GSUxFCisgICAtbm8tc3VwcHJlc3MgICAgICBkbyBub3Qgc3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGZvciBtdWx0aXBsZSBwYXNzZXMKKy0gIC1wcmVmZXItcGljICAgICAgIHRyeSB0byBidWlsZGluZyBQSUMgb2JqZWN0cyBvbmx5CistICAtcHJlZmVyLW5vbi1waWMgICB0cnkgdG8gYnVpbGRpbmcgbm9uLVBJQyBvYmplY3RzIG9ubHkKKysgIC1wcmVmZXItcGljICAgICAgIHRyeSB0byBidWlsZCBQSUMgb2JqZWN0cyBvbmx5CisrICAtcHJlZmVyLW5vbi1waWMgICB0cnkgdG8gYnVpbGQgbm9uLVBJQyBvYmplY3RzIG9ubHkKKyAgIC1zaGFyZWQgICAgICAgICAgIGRvIG5vdCBidWlsZCBhIFxgLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCisgICAtc3RhdGljICAgICAgICAgICBvbmx5IGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKyAgIC1XYyxGTEFHICAgICAgICAgIHBhc3MgRkxBRyBkaXJlY3RseSB0byB0aGUgY29tcGlsZXIKK0BAIC0xODA0LDcgKzI0NzIsNyBAQCBPdGhlcndpc2UsIG9ubHkgRklMRSBpdHNlbGYgaXMgZGVsZXRlZCB1c2luZyBSTS4iCisgICAgICAgICA7OworIAorICAgICAgICopCistICAgICAgICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkbW9kZSciCisrICAgICAgICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkb3B0X21vZGUnIgorICAgICAgICAgOzsKKyAgICAgZXNhYworIAorQEAgLTE4MTksMTMgKzI0ODcsMTMgQEAgaWYgJG9wdF9oZWxwOyB0aGVuCisgICBlbHNlCisgICAgIHsKKyAgICAgICBmdW5jX2hlbHAgbm9leGl0CistICAgICAgZm9yIG1vZGUgaW4gY29tcGlsZSBsaW5rIGV4ZWN1dGUgaW5zdGFsbCBmaW5pc2ggdW5pbnN0YWxsIGNsZWFuOyBkbworKyAgICAgIGZvciBvcHRfbW9kZSBpbiBjb21waWxlIGxpbmsgZXhlY3V0ZSBpbnN0YWxsIGZpbmlzaCB1bmluc3RhbGwgY2xlYW47IGRvCisgCWZ1bmNfbW9kZV9oZWxwCisgICAgICAgZG9uZQorICAgICB9IHwgc2VkIC1uICcxcDsgMiwkcy9eVXNhZ2U6LyAgb3I6IC9wJworICAgICB7CisgICAgICAgZnVuY19oZWxwIG5vZXhpdAorLSAgICAgIGZvciBtb2RlIGluIGNvbXBpbGUgbGluayBleGVjdXRlIGluc3RhbGwgZmluaXNoIHVuaW5zdGFsbCBjbGVhbjsgZG8KKysgICAgICBmb3Igb3B0X21vZGUgaW4gY29tcGlsZSBsaW5rIGV4ZWN1dGUgaW5zdGFsbCBmaW5pc2ggdW5pbnN0YWxsIGNsZWFuOyBkbworIAllY2hvCisgCWZ1bmNfbW9kZV9oZWxwCisgICAgICAgZG9uZQorQEAgLTE4NTQsMTMgKzI1MjIsMTYgQEAgZnVuY19tb2RlX2V4ZWN1dGUgKCkKKyAgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBDT01NQU5EIgorIAorICAgICAjIEhhbmRsZSAtZGxvcGVuIGZsYWdzIGltbWVkaWF0ZWx5LgorLSAgICBmb3IgZmlsZSBpbiAkZXhlY3V0ZV9kbGZpbGVzOyBkbworKyAgICBmb3IgZmlsZSBpbiAkb3B0X2Rsb3BlbjsgZG8KKyAgICAgICB0ZXN0IC1mICIkZmlsZSIgXAorIAl8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGZpbGUnIGlzIG5vdCBhIGZpbGUiCisgCisgICAgICAgZGlyPQorICAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgICAqLmxhKQorKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZpbGUiCisrCWZpbGU9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorKworIAkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorIAlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAorIAkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCitAQCAtMTg4Miw3ICsyNTUzLDcgQEAgZnVuY19tb2RlX2V4ZWN1dGUgKCkKKyAJZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyAKKyAJaWYgdGVzdCAtZiAiJGRpci8kb2JqZGlyLyRkbG5hbWUiOyB0aGVuCistCSAgZGlyPSIkZGlyLyRvYmpkaXIiCisrCSAgZnVuY19hcHBlbmQgZGlyICIvJG9iamRpciIKKyAJZWxzZQorIAkgIGlmIHRlc3QgISAtZiAiJGRpci8kZGxuYW1lIjsgdGhlbgorIAkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgXGAkZGxuYW1lJyBpbiBcYCRkaXInIG9yIFxgJGRpci8kb2JqZGlyJyIKK0BAIC0xOTA3LDEwICsyNTc4LDEwIEBAIGZ1bmNfbW9kZV9leGVjdXRlICgpCisgICAgICAgdGVzdCAtbiAiJGFic2RpciIgJiYgZGlyPSIkYWJzZGlyIgorIAorICAgICAgICMgTm93IGFkZCB0aGUgZGlyZWN0b3J5IHRvIHNobGlicGF0aF92YXIuCistICAgICAgaWYgZXZhbCB0ZXN0IC16IFwiXCQkc2hsaWJwYXRoX3ZhclwiOyB0aGVuCistCWV2YWwgJHNobGlicGF0aF92YXI9XCRkaXIKKysgICAgICBpZiBldmFsICJ0ZXN0IC16IFwiXCQkc2hsaWJwYXRoX3ZhclwiIjsgdGhlbgorKwlldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyXCIiCisgICAgICAgZWxzZQorLQlldmFsICRzaGxpYnBhdGhfdmFyPVwkZGlyOlwkJHNobGlicGF0aF92YXIKKysJZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpcjpcJCRzaGxpYnBhdGhfdmFyXCIiCisgICAgICAgZmkKKyAgICAgZG9uZQorIAorQEAgLTE5MzksOCArMjYxMCw3IEBAIGZ1bmNfbW9kZV9leGVjdXRlICgpCisgCTs7CisgICAgICAgZXNhYworICAgICAgICMgUXVvdGUgYXJndW1lbnRzICh0byBwcmVzZXJ2ZSBzaGVsbCBtZXRhY2hhcmFjdGVycykuCistICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZpbGUiCistICAgICAgYXJncz0iJGFyZ3MgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKyAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBhcmdzICIkZmlsZSIKKyAgICAgZG9uZQorIAorICAgICBpZiB0ZXN0ICJYJG9wdF9kcnlfcnVuIiA9IFhmYWxzZTsgdGhlbgorQEAgLTE5NzIsMjIgKzI2NDIsNTkgQEAgZnVuY19tb2RlX2V4ZWN1dGUgKCkKKyAgICAgZmkKKyB9CisgCistdGVzdCAiJG1vZGUiID0gZXhlY3V0ZSAmJiBmdW5jX21vZGVfZXhlY3V0ZSAkezErIiRAIn0KKyt0ZXN0ICIkb3B0X21vZGUiID0gZXhlY3V0ZSAmJiBmdW5jX21vZGVfZXhlY3V0ZSAkezErIiRAIn0KKyAKKyAKKyAjIGZ1bmNfbW9kZV9maW5pc2ggYXJnLi4uCisgZnVuY19tb2RlX2ZpbmlzaCAoKQorIHsKKyAgICAgJG9wdF9kZWJ1ZworLSAgICBsaWJkaXJzPSIkbm9ub3B0IgorKyAgICBsaWJzPQorKyAgICBsaWJkaXJzPQorICAgICBhZG1pbmNtZHM9CisgCistICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCistICAgICAgZm9yIGRpcgorLSAgICAgIGRvCistCWxpYmRpcnM9IiRsaWJkaXJzICRkaXIiCistICAgICAgZG9uZQorKyAgICBmb3Igb3B0IGluICIkbm9ub3B0IiAkezErIiRAIn0KKysgICAgZG8KKysgICAgICBpZiB0ZXN0IC1kICIkb3B0IjsgdGhlbgorKwlmdW5jX2FwcGVuZCBsaWJkaXJzICIgJG9wdCIKKyAKKysgICAgICBlbGlmIHRlc3QgLWYgIiRvcHQiOyB0aGVuCisrCWlmIGZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRvcHQiOyB0aGVuCisrCSAgZnVuY19hcHBlbmQgbGlicyAiICRvcHQiCisrCWVsc2UKKysJICBmdW5jX3dhcm5pbmcgIlxgJG9wdCcgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorKwlmaQorKworKyAgICAgIGVsc2UKKysJZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCBhcmd1bWVudCBcYCRvcHQnIgorKyAgICAgIGZpCisrICAgIGRvbmUKKysKKysgICAgaWYgdGVzdCAtbiAiJGxpYnMiOyB0aGVuCisrICAgICAgaWYgdGVzdCAtbiAiJGx0X3N5c3Jvb3QiOyB0aGVuCisrICAgICAgICBzeXNyb290X3JlZ2V4PWAkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJHNlZF9tYWtlX2xpdGVyYWxfcmVnZXgiYAorKyAgICAgICAgc3lzcm9vdF9jbWQ9InMvXChbICddXCkkc3lzcm9vdF9yZWdleC9cMS9nOyIKKysgICAgICBlbHNlCisrICAgICAgICBzeXNyb290X2NtZD0KKysgICAgICBmaQorKworKyAgICAgICMgUmVtb3ZlIHN5c3Jvb3QgcmVmZXJlbmNlcworKyAgICAgIGlmICRvcHRfZHJ5X3J1bjsgdGhlbgorKyAgICAgICAgZm9yIGxpYiBpbiAkbGliczsgZG8KKysgICAgICAgICAgZWNobyAicmVtb3ZpbmcgcmVmZXJlbmNlcyB0byAkbHRfc3lzcm9vdCBhbmQgXGA9JyBwcmVmaXhlcyBmcm9tICRsaWIiCisrICAgICAgICBkb25lCisrICAgICAgZWxzZQorKyAgICAgICAgdG1wZGlyPWBmdW5jX21rdGVtcGRpcmAKKysgICAgICAgIGZvciBsaWIgaW4gJGxpYnM7IGRvCisrCSAgc2VkIC1lICIke3N5c3Jvb3RfY21kfSBzL1woWyAnXS1bTFJdXCk9L1wxL2c7IHMvXChbICddXCk9L1wxL2ciICRsaWIgXAorKwkgICAgPiAkdG1wZGlyL3RtcC1sYQorKwkgIG12IC1mICR0bXBkaXIvdG1wLWxhICRsaWIKKysJZG9uZQorKyAgICAgICAgJHtSTX1yICIkdG1wZGlyIgorKyAgICAgIGZpCisrICAgIGZpCisrCisrICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCisgICAgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKyAJaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzIjsgdGhlbgorIAkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBmaW5pc2ggY29tbWFuZHMuCitAQCAtMTk5Nyw3ICsyNzA0LDcgQEAgZnVuY19tb2RlX2ZpbmlzaCAoKQorIAlpZiB0ZXN0IC1uICIkZmluaXNoX2V2YWwiOyB0aGVuCisgCSAgIyBEbyB0aGUgc2luZ2xlIGZpbmlzaF9ldmFsLgorIAkgIGV2YWwgY21kcz1cIiRmaW5pc2hfZXZhbFwiCistCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiRjbWRzIiB8fCBhZG1pbmNtZHM9IiRhZG1pbmNtZHMKKysJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZHMiIHx8IGZ1bmNfYXBwZW5kIGFkbWluY21kcyAiCisgICAgICAgICRjbWRzIgorIAlmaQorICAgICAgIGRvbmUKK0BAIC0yMDA2LDUzICsyNzEzLDU1IEBAIGZ1bmNfbW9kZV9maW5pc2ggKCkKKyAgICAgIyBFeGl0IGhlcmUgaWYgdGhleSB3YW50ZWQgc2lsZW50IG1vZGUuCisgICAgICRvcHRfc2lsZW50ICYmIGV4aXQgJEVYSVRfU1VDQ0VTUworIAorLSAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorLSAgICBlY2hvICJMaWJyYXJpZXMgaGF2ZSBiZWVuIGluc3RhbGxlZCBpbjoiCistICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCistICAgICAgJEVDSE8gIiAgICRsaWJkaXIiCistICAgIGRvbmUKKy0gICAgZWNobworLSAgICBlY2hvICJJZiB5b3UgZXZlciBoYXBwZW4gdG8gd2FudCB0byBsaW5rIGFnYWluc3QgaW5zdGFsbGVkIGxpYnJhcmllcyIKKy0gICAgZWNobyAiaW4gYSBnaXZlbiBkaXJlY3RvcnksIExJQkRJUiwgeW91IG11c3QgZWl0aGVyIHVzZSBsaWJ0b29sLCBhbmQiCistICAgIGVjaG8gInNwZWNpZnkgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGxpYnJhcnksIG9yIHVzZSB0aGUgXGAtTExJQkRJUiciCistICAgIGVjaG8gImZsYWcgZHVyaW5nIGxpbmtpbmcgYW5kIGRvIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nOiIKKy0gICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCistICAgICAgZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRzaGxpYnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKy0gICAgICBlY2hvICIgICAgIGR1cmluZyBleGVjdXRpb24iCistICAgIGZpCistICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKy0gICAgICBlY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHJ1bnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKy0gICAgICBlY2hvICIgICAgIGR1cmluZyBsaW5raW5nIgorLSAgICBmaQorLSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKy0gICAgICBsaWJkaXI9TElCRElSCistICAgICAgZXZhbCAiZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCisrICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCisrICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKysgICAgICBlY2hvICJMaWJyYXJpZXMgaGF2ZSBiZWVuIGluc3RhbGxlZCBpbjoiCisrICAgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKysJJEVDSE8gIiAgICRsaWJkaXIiCisrICAgICAgZG9uZQorKyAgICAgIGVjaG8KKysgICAgICBlY2hvICJJZiB5b3UgZXZlciBoYXBwZW4gdG8gd2FudCB0byBsaW5rIGFnYWluc3QgaW5zdGFsbGVkIGxpYnJhcmllcyIKKysgICAgICBlY2hvICJpbiBhIGdpdmVuIGRpcmVjdG9yeSwgTElCRElSLCB5b3UgbXVzdCBlaXRoZXIgdXNlIGxpYnRvb2wsIGFuZCIKKysgICAgICBlY2hvICJzcGVjaWZ5IHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBsaWJyYXJ5LCBvciB1c2UgdGhlIFxgLUxMSUJESVInIgorKyAgICAgIGVjaG8gImZsYWcgZHVyaW5nIGxpbmtpbmcgYW5kIGRvIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nOiIKKysgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKysJZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRzaGxpYnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKysJZWNobyAiICAgICBkdXJpbmcgZXhlY3V0aW9uIgorKyAgICAgIGZpCisrICAgICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorKwllY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHJ1bnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKysJZWNobyAiICAgICBkdXJpbmcgbGlua2luZyIKKysgICAgICBmaQorKyAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorKwlsaWJkaXI9TElCRElSCisrCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAKKy0gICAgICAkRUNITyAiICAgLSB1c2UgdGhlIFxgJGZsYWcnIGxpbmtlciBmbGFnIgorLSAgICBmaQorLSAgICBpZiB0ZXN0IC1uICIkYWRtaW5jbWRzIjsgdGhlbgorLSAgICAgICRFQ0hPICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBydW4gdGhlc2UgY29tbWFuZHM6JGFkbWluY21kcyIKKy0gICAgZmkKKy0gICAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKy0gICAgICBlY2hvICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBhZGQgTElCRElSIHRvIFxgL2V0Yy9sZC5zby5jb25mJyIKKy0gICAgZmkKKy0gICAgZWNobworKwkkRUNITyAiICAgLSB1c2UgdGhlIFxgJGZsYWcnIGxpbmtlciBmbGFnIgorKyAgICAgIGZpCisrICAgICAgaWYgdGVzdCAtbiAiJGFkbWluY21kcyI7IHRoZW4KKysJJEVDSE8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHJ1biB0aGVzZSBjb21tYW5kczokYWRtaW5jbWRzIgorKyAgICAgIGZpCisrICAgICAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKysJZWNobyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgYWRkIExJQkRJUiB0byBcYC9ldGMvbGQuc28uY29uZiciCisrICAgICAgZmkKKysgICAgICBlY2hvCisgCistICAgIGVjaG8gIlNlZSBhbnkgb3BlcmF0aW5nIHN5c3RlbSBkb2N1bWVudGF0aW9uIGFib3V0IHNoYXJlZCBsaWJyYXJpZXMgZm9yIgorLSAgICBjYXNlICRob3N0IGluCistICAgICAgc29sYXJpczIuWzY3ODldfHNvbGFyaXMyLjFbMC05XSkKKy0gICAgICAgIGVjaG8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpLCBjcmxlKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwiCistCWVjaG8gInBhZ2VzLiIKKy0JOzsKKy0gICAgICAqKQorLSAgICAgICAgZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCBwYWdlcy4iCistICAgICAgICA7OworLSAgICBlc2FjCistICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisrICAgICAgZWNobyAiU2VlIGFueSBvcGVyYXRpbmcgc3lzdGVtIGRvY3VtZW50YXRpb24gYWJvdXQgc2hhcmVkIGxpYnJhcmllcyBmb3IiCisrICAgICAgY2FzZSAkaG9zdCBpbgorKwlzb2xhcmlzMi5bNjc4OV18c29sYXJpczIuMVswLTldKQorKwkgIGVjaG8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpLCBjcmxlKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwiCisrCSAgZWNobyAicGFnZXMuIgorKwkgIDs7CisrCSopCisrCSAgZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCBwYWdlcy4iCisrCSAgOzsKKysgICAgICBlc2FjCisrICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKysgICAgZmkKKyAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgfQorIAorLXRlc3QgIiRtb2RlIiA9IGZpbmlzaCAmJiBmdW5jX21vZGVfZmluaXNoICR7MSsiJEAifQorK3Rlc3QgIiRvcHRfbW9kZSIgPSBmaW5pc2ggJiYgZnVuY19tb2RlX2ZpbmlzaCAkezErIiRAIn0KKyAKKyAKKyAjIGZ1bmNfbW9kZV9pbnN0YWxsIGFyZy4uLgorQEAgLTIwNzcsNyArMjc4Niw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgICAgICMgVGhlIHJlYWwgZmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBpbnN0YWxsYXRpb24gcHJvZ3JhbS4KKyAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgorICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorLSAgICBpbnN0YWxsX3Byb2c9IiRpbnN0YWxsX3Byb2ckZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrICAgIGZ1bmNfYXBwZW5kIGluc3RhbGxfcHJvZyAiJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICBpbnN0YWxsX3NoYXJlZF9wcm9nPSRpbnN0YWxsX3Byb2cKKyAgICAgY2FzZSAiICRpbnN0YWxsX3Byb2cgIiBpbgorICAgICAgICpbXFxcIC9dY3BcICopIGluc3RhbGxfY3A9OiA7OworQEAgLTIwOTcsNyArMjgwNiw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgICAgIGRvCisgICAgICAgYXJnMj0KKyAgICAgICBpZiB0ZXN0IC1uICIkZGVzdCI7IHRoZW4KKy0JZmlsZXM9IiRmaWxlcyAkZGVzdCIKKysJZnVuY19hcHBlbmQgZmlsZXMgIiAkZGVzdCIKKyAJZGVzdD0kYXJnCisgCWNvbnRpbnVlCisgICAgICAgZmkKK0BAIC0yMTM1LDExICsyODQ0LDExIEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgCisgICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBhcmd1bWVudC4KKyAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorLSAgICAgIGluc3RhbGxfcHJvZz0iJGluc3RhbGxfcHJvZyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrICAgICAgZnVuY19hcHBlbmQgaW5zdGFsbF9wcm9nICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICAgIGlmIHRlc3QgLW4gIiRhcmcyIjsgdGhlbgorIAlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnMiIKKyAgICAgICBmaQorLSAgICAgIGluc3RhbGxfc2hhcmVkX3Byb2c9IiRpbnN0YWxsX3NoYXJlZF9wcm9nICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysgICAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3NoYXJlZF9wcm9nICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICBkb25lCisgCisgICAgIHRlc3QgLXogIiRpbnN0YWxsX3Byb2ciICYmIFwKK0BAIC0yMTUxLDcgKzI4NjAsNyBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQorICAgICBpZiB0ZXN0IC1uICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIiAmJiAkbm9fbW9kZTsgdGhlbgorICAgICAgIGlmICRpbnN0YWxsX2NwOyB0aGVuIDo7IGVsc2UKKyAJZnVuY19xdW90ZV9mb3JfZXZhbCAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSIKKy0JaW5zdGFsbF9zaGFyZWRfcHJvZz0iJGluc3RhbGxfc2hhcmVkX3Byb2cgLW0gJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKwlmdW5jX2FwcGVuZCBpbnN0YWxsX3NoYXJlZF9wcm9nICIgLW0gJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICAgIGZpCisgICAgIGZpCisgCitAQCAtMjIwOSwxMCArMjkxOCwxMyBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQorICAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgICAqLiRsaWJleHQpCisgCSMgRG8gdGhlIHN0YXRpYyBsaWJyYXJpZXMgbGF0ZXIuCistCXN0YXRpY2xpYnM9IiRzdGF0aWNsaWJzICRmaWxlIgorKwlmdW5jX2FwcGVuZCBzdGF0aWNsaWJzICIgJGZpbGUiCisgCTs7CisgCisgICAgICAgKi5sYSkKKysJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmaWxlIgorKwlmaWxlPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKysKKyAJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKyAJZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKKyAJICB8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGZpbGUnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKK0BAIC0yMjI2LDIzICsyOTM4LDMwIEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgCWlmIHRlc3QgIlgkZGVzdGRpciIgPSAiWCRsaWJkaXIiOyB0aGVuCisgCSAgY2FzZSAiJGN1cnJlbnRfbGliZGlycyAiIGluCisgCSAgKiIgJGxpYmRpciAiKikgOzsKKy0JICAqKSBjdXJyZW50X2xpYmRpcnM9IiRjdXJyZW50X2xpYmRpcnMgJGxpYmRpciIgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBjdXJyZW50X2xpYmRpcnMgIiAkbGliZGlyIiA7OworIAkgIGVzYWMKKyAJZWxzZQorIAkgICMgTm90ZSB0aGUgbGliZGlyIGFzIGEgZnV0dXJlIGxpYmRpci4KKyAJICBjYXNlICIkZnV0dXJlX2xpYmRpcnMgIiBpbgorIAkgICoiICRsaWJkaXIgIiopIDs7CistCSAgKikgZnV0dXJlX2xpYmRpcnM9IiRmdXR1cmVfbGliZGlycyAkbGliZGlyIiA7OworKwkgICopIGZ1bmNfYXBwZW5kIGZ1dHVyZV9saWJkaXJzICIgJGxpYmRpciIgOzsKKyAJICBlc2FjCisgCWZpCisgCisgCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIvIiAiIgorIAlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorLQlkaXI9IiRkaXIkb2JqZGlyIgorKwlmdW5jX2FwcGVuZCBkaXIgIiRvYmpkaXIiCisgCisgCWlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKysgICAgICAjIFN0cmlwIGFueSB0cmFpbGluZyBzbGFzaCBmcm9tIHRoZSBkZXN0aW5hdGlvbi4KKysgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRsaWJkaXIiCisrICAgICAgZGVzdGxpYmRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrCisrICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkZGVzdGRpciIKKysgICAgICBzX2Rlc3RkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKworIAkgICMgRGV0ZXJtaW5lIHRoZSBwcmVmaXggdGhlIHVzZXIgaGFzIGFwcGxpZWQgdG8gb3VyIGZ1dHVyZSBkaXIuCistCSAgaW5zdF9wcmVmaXhfZGlyPWAkRUNITyAiJGRlc3RkaXIiIHwgJFNFRCAtZSAicyUkbGliZGlyXCQlJSJgCisrCSAgaW5zdF9wcmVmaXhfZGlyPWAkRUNITyAiWCRzX2Rlc3RkaXIiIHwgJFhzZWQgLWUgInMlJGRlc3RsaWJkaXJcJCUlImAKKyAKKyAJICAjIERvbid0IGFsbG93IHRoZSB1c2VyIHRvIHBsYWNlIHVzIG91dHNpZGUgb2Ygb3VyIGV4cGVjdGVkCisgCSAgIyBsb2NhdGlvbiBiL2MgdGhpcyBwcmV2ZW50cyBmaW5kaW5nIGRlcGVuZGVudCBsaWJyYXJpZXMgdGhhdAorQEAgLTIzMTUsNyArMzAzNCw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRpbnN0bmFtZSAkZGVzdGRpci8kbmFtZSIgJ2V4aXQgJD8nCisgCisgCSMgTWF5YmUgaW5zdGFsbCB0aGUgc3RhdGljIGxpYnJhcnksIHRvby4KKy0JdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBzdGF0aWNsaWJzPSIkc3RhdGljbGlicyAkZGlyLyRvbGRfbGlicmFyeSIKKysJdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBmdW5jX2FwcGVuZCBzdGF0aWNsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCisgCTs7CisgCisgICAgICAgKi5sbykKK0BAIC0yNTAzLDcgKzMyMjIsNyBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQorICAgICB0ZXN0IC1uICIkZnV0dXJlX2xpYmRpcnMiICYmIFwKKyAgICAgICBmdW5jX3dhcm5pbmcgInJlbWVtYmVyIHRvIHJ1biBcYCRwcm9nbmFtZSAtLWZpbmlzaCRmdXR1cmVfbGliZGlycyciCisgCistICAgIGlmIHRlc3QgLW4gIiRjdXJyZW50X2xpYmRpcnMiICYmICRvcHRfZmluaXNoOyB0aGVuCisrICAgIGlmIHRlc3QgLW4gIiRjdXJyZW50X2xpYmRpcnMiOyB0aGVuCisgICAgICAgIyBNYXliZSBqdXN0IGRvIGEgZHJ5IHJ1bi4KKyAgICAgICAkb3B0X2RyeV9ydW4gJiYgY3VycmVudF9saWJkaXJzPSIgLW4kY3VycmVudF9saWJkaXJzIgorICAgICAgIGV4ZWNfY21kPSckU0hFTEwgJHByb2dwYXRoICRwcmVzZXJ2ZV9hcmdzIC0tZmluaXNoJGN1cnJlbnRfbGliZGlycycKK0BAIC0yNTEyLDcgKzMyMzEsNyBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQorICAgICBmaQorIH0KKyAKKy10ZXN0ICIkbW9kZSIgPSBpbnN0YWxsICYmIGZ1bmNfbW9kZV9pbnN0YWxsICR7MSsiJEAifQorK3Rlc3QgIiRvcHRfbW9kZSIgPSBpbnN0YWxsICYmIGZ1bmNfbW9kZV9pbnN0YWxsICR7MSsiJEAifQorIAorIAorICMgZnVuY19nZW5lcmF0ZV9kbHN5bXMgb3V0cHV0bmFtZSBvcmlnaW5hdG9yIHBpY19wCitAQCAtMjU1OSw2ICszMjc4LDE4IEBAIGV4dGVybiBcIkNcIiB7CisgI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdzdHJpY3QtcHJvdG90eXBlc1wiCisgI2VuZGlmCisgCisrLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisrI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKysvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKysgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxpZiBkZWZpbmVkKF9fb3NmX18pCisrLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxzZQorKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CisrI2VuZGlmCisrCisgLyogRXh0ZXJuYWwgc3ltYm9sIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGNvbXBpbGVyLiAqL1wKKyAiCisgCitAQCAtMjU3MCwyMSArMzMwMSwyMiBAQCBleHRlcm4gXCJDXCIgeworIAkgICMgQWRkIG91ciBvd24gcHJvZ3JhbSBvYmplY3RzIHRvIHRoZSBzeW1ib2wgbGlzdC4KKyAJICBwcm9nZmlsZXM9YCRFQ0hPICIkb2JqcyRvbGRfZGVwbGlicyIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCisgCSAgZm9yIHByb2dmaWxlIGluICRwcm9nZmlsZXM7IGRvCistCSAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tIFxgJHByb2dmaWxlJyIKKy0JICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkTk0gJHByb2dmaWxlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKysJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkcHJvZ2ZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrCSAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tIFxgJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCciCisrCSAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJE5NICRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorIAkgIGRvbmUKKyAKKyAJICBpZiB0ZXN0IC1uICIkZXhjbHVkZV9leHBzeW1zIjsgdGhlbgorIAkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKy0JICAgICAgJEVHUkVQIC12ICIgKCRleGNsdWRlX2V4cHN5bXMpJCIgIiRubGlzdCIgPiAiJG5saXN0IlQKKy0JICAgICAgJE1WICIkbmxpc3QiVCAiJG5saXN0IgorKwkgICAgICBldmFsICckRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKysJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKyAJICAgIH0KKyAJICBmaQorIAorIAkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKyAJICAgICRvcHRfZHJ5X3J1biB8fCB7CistCSAgICAgICRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJG5saXN0IiA+ICIkbmxpc3QiVAorLQkgICAgICAkTVYgIiRubGlzdCJUICIkbmxpc3QiCisrCSAgICAgIGV2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKysJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKyAJICAgIH0KKyAJICBmaQorIAorQEAgLTI1OTMsMjMgKzMzMjUsMjMgQEAgZXh0ZXJuIFwiQ1wiIHsKKyAJICAgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiCisgCSAgICAkb3B0X2RyeV9ydW4gfHwgeworIAkgICAgICAkUk0gJGV4cG9ydF9zeW1ib2xzCistCSAgICAgICR7U0VEfSAtbiAtZSAnL146IEBQUk9HUkFNQCAkL2QnIC1lICdzL14uKiBcKC4qXCkkL1wxL3AnIDwgIiRubGlzdCIgPiAiJGV4cG9ydF9zeW1ib2xzIgorKwkgICAgICBldmFsICIke1NFRH0gLW4gLWUgJy9eOiBAUFJPR1JBTUAgJC9kJyAtZSAncy9eLiogXCguKlwpJC9cMS9wJyAiJzwgIiRubGlzdCIgPiAiJGV4cG9ydF9zeW1ib2xzIicKKyAJICAgICAgY2FzZSAkaG9zdCBpbgorIAkgICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKy0gICAgICAgICAgICAgICAgZWNobyBFWFBPUlRTID4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiIKKy0gICAgICAgICAgICAgICAgY2F0ICIkZXhwb3J0X3N5bWJvbHMiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiCisrICAgICAgICAgICAgICAgIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisrICAgICAgICAgICAgICAgIGV2YWwgJ2NhdCAiJGV4cG9ydF9zeW1ib2xzIiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKyAJICAgICAgICA7OworIAkgICAgICBlc2FjCisgCSAgICB9CisgCSAgZWxzZQorIAkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKy0JICAgICAgJHtTRUR9IC1lICdzL1woW10uWypeJF1cKS9cXFwxL2cnIC1lICdzL14vIC8nIC1lICdzLyQvJC8nIDwgIiRleHBvcnRfc3ltYm9scyIgPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIgorLQkgICAgICAkR1JFUCAtZiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIiA8ICIkbmxpc3QiID4gIiRubGlzdCJUCistCSAgICAgICRNViAiJG5saXN0IlQgIiRubGlzdCIKKysJICAgICAgZXZhbCAiJHtTRUR9IC1lICdzL1woW10uWypeJF1cKS9cXFxcXDEvZycgLWUgJ3MvXi8gLycgLWUgJ3MvJC8kLyciJyA8ICIkZXhwb3J0X3N5bWJvbHMiID4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCInCisrCSAgICAgIGV2YWwgJyRHUkVQIC1mICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlQnCisrCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCisgCSAgICAgIGNhc2UgJGhvc3QgaW4KKyAJICAgICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKy0JICAgICAgICAgIGVjaG8gRVhQT1JUUyA+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiCistCSAgICAgICAgICBjYXQgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiIKKysJICAgICAgICAgIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisrCSAgICAgICAgICBldmFsICdjYXQgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisgCSAgICAgICAgICA7OworIAkgICAgICBlc2FjCisgCSAgICB9CitAQCAtMjYyMCwxMCArMzM1Miw1MiBAQCBleHRlcm4gXCJDXCIgeworIAkgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkZGxwcmVmaWxlJyIKKyAJICBmdW5jX2Jhc2VuYW1lICIkZGxwcmVmaWxlIgorIAkgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0JICAkb3B0X2RyeV9ydW4gfHwgeworLQkgICAgJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IgorLQkgICAgZXZhbCAiJE5NICRkbHByZWZpbGUgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorLQkgIH0KKysgICAgICAgICAgY2FzZSAkaG9zdCBpbgorKwkgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisrCSAgICAgICMgaWYgYW4gaW1wb3J0IGxpYnJhcnksIHdlIG5lZWQgdG8gb2J0YWluIGRsbmFtZQorKwkgICAgICBpZiBmdW5jX3dpbjMyX2ltcG9ydF9saWJfcCAiJGRscHJlZmlsZSI7IHRoZW4KKysJICAgICAgICBmdW5jX3RyX3NoICIkZGxwcmVmaWxlIgorKwkgICAgICAgIGV2YWwgImN1cnJfbGFmaWxlPVwkbGliZmlsZV8kZnVuY190cl9zaF9yZXN1bHQiCisrCSAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9IiIKKysJICAgICAgICBpZiB0ZXN0IC1uICIkY3Vycl9sYWZpbGUiICYmIGZ1bmNfbGFsaWJfcCAiJGN1cnJfbGFmaWxlIjsgdGhlbgorKwkgICAgICAgICAgIyBVc2Ugc3Vic2hlbGwsIHRvIGF2b2lkIGNsb2JiZXJpbmcgY3VycmVudCB2YXJpYWJsZSB2YWx1ZXMKKysJICAgICAgICAgIGRscHJlZmlsZV9kbG5hbWU9YHNvdXJjZSAiJGN1cnJfbGFmaWxlIiAmJiBlY2hvICIkZGxuYW1lImAKKysJICAgICAgICAgIGlmIHRlc3QgLW4gIiRkbHByZWZpbGVfZGxuYW1lIiA7IHRoZW4KKysJICAgICAgICAgICAgZnVuY19iYXNlbmFtZSAiJGRscHJlZmlsZV9kbG5hbWUiCisrCSAgICAgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisrCSAgICAgICAgICBlbHNlCisrCSAgICAgICAgICAgICMgbm8gbGFmaWxlLiB1c2VyIGV4cGxpY2l0bHkgcmVxdWVzdGVkIC1kbHByZW9wZW4gPGltcG9ydCBsaWJyYXJ5Pi4KKysJICAgICAgICAgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kICIkZGxwcmVmaWxlIgorKwkgICAgICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0kc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKKysJICAgICAgICAgIGZpCisrCSAgICAgICAgZmkKKysJICAgICAgICAkb3B0X2RyeV9ydW4gfHwgeworKwkgICAgICAgICAgaWYgdGVzdCAtbiAiJGRscHJlZmlsZV9kbGJhc2VuYW1lIiA7IHRoZW4KKysJICAgICAgICAgICAgZXZhbCAnJEVDSE8gIjogJGRscHJlZmlsZV9kbGJhc2VuYW1lIiA+PiAiJG5saXN0IicKKysJICAgICAgICAgIGVsc2UKKysJICAgICAgICAgICAgZnVuY193YXJuaW5nICJDb3VsZCBub3QgY29tcHV0ZSBETEwgbmFtZSBmcm9tICRuYW1lIgorKwkgICAgICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJworKwkgICAgICAgICAgZmkKKysJICAgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkZGxwcmVmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKwkgICAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8CisrCSAgICAgICAgICAgICRTRUQgLWUgJy9JIF9faW1wL2QnIC1lICdzL0kgX19ubV8vRCAvO3MvX25tX18vLycgPj4gJyRubGlzdCciCisrCSAgICAgICAgfQorKwkgICAgICBlbHNlICMgbm90IGFuIGltcG9ydCBsaWIKKysJICAgICAgICAkb3B0X2RyeV9ydW4gfHwgeworKwkgICAgICAgICAgZXZhbCAnJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IicKKysJICAgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkZGxwcmVmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKwkgICAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKysJICAgICAgICB9CisrCSAgICAgIGZpCisrCSAgICA7OworKwkgICAgKikKKysJICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKKysJICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJworKwkgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkZGxwcmVmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKwkgICAgICAgIGV2YWwgIiROTSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisrCSAgICAgIH0KKysJICAgIDs7CisrICAgICAgICAgIGVzYWMKKyAJZG9uZQorIAorIAkkb3B0X2RyeV9ydW4gfHwgeworQEAgLTI2NjEsMjYgKzM0MzUsOSBAQCB0eXBlZGVmIHN0cnVjdCB7CisgICBjb25zdCBjaGFyICpuYW1lOworICAgdm9pZCAqYWRkcmVzczsKKyB9IGx0X2Rsc3ltbGlzdDsKKy0iCistCSAgY2FzZSAkaG9zdCBpbgorLQkgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorLQkgICAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKy0vKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlCistICAgcnVudGltZSByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24KKy0gICBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8iCistCSAgICBsdF9kbHN5bV9jb25zdD0gOzsKKy0JICAqb3NmNSopCistCSAgICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorLS8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEgKi8iCistCSAgICBsdF9kbHN5bV9jb25zdD0gOzsKKy0JICAqKQorLQkgICAgbHRfZGxzeW1fY29uc3Q9Y29uc3QgOzsKKy0JICBlc2FjCistCistCSAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKy1leHRlcm4gJGx0X2Rsc3ltX2NvbnN0IGx0X2Rsc3ltbGlzdAorK2V4dGVybiBMVF9ETFNZTV9DT05TVCBsdF9kbHN5bWxpc3QKKyBsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW107CistJGx0X2Rsc3ltX2NvbnN0IGx0X2Rsc3ltbGlzdAorK0xUX0RMU1lNX0NPTlNUIGx0X2Rsc3ltbGlzdAorIGx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXSA9Cisge1wKKyAgIHsgXCIkbXlfb3JpZ2luYXRvclwiLCAodm9pZCAqKSAwIH0sIgorQEAgLTI3MzYsNyArMzQ5Myw3IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgCWZvciBhcmcgaW4gJExUQ0ZMQUdTOyBkbworIAkgIGNhc2UgJGFyZyBpbgorIAkgIC1waWUgfCAtZnBpZSB8IC1mUElFKSA7OworLQkgICopIHN5bXRhYl9jZmxhZ3M9IiRzeW10YWJfY2ZsYWdzICRhcmciIDs7CisrCSAgKikgZnVuY19hcHBlbmQgc3ltdGFiX2NmbGFncyAiICRhcmciIDs7CisgCSAgZXNhYworIAlkb25lCisgCitAQCAtMjc5Niw5ICszNTUzLDExIEBAIGZ1bmNfd2luMzJfbGliaWQgKCkKKyAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0IgorICAgICA7OworICAgKmFyXCBhcmNoaXZlKikgIyBjb3VsZCBiZSBhbiBpbXBvcnQsIG9yIHN0YXRpYworLSAgICBpZiAkT0JKRFVNUCAtZiAiJDEiIHwgJFNFRCAtZSAnMTBxJyAyPi9kZXYvbnVsbCB8CistICAgICAgICRFR1JFUCAnZmlsZSBmb3JtYXQgKHBlLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScgPi9kZXYvbnVsbDsgdGhlbgorLSAgICAgIHdpbjMyX25tcmVzPWAkTk0gLWYgcG9zaXggLUEgIiQxIiB8CisrICAgICMgS2VlcCB0aGUgZWdyZXAgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9ELgorKyAgICBpZiBldmFsICRPQkpEVU1QIC1mICQxIHwgJFNFRCAtZSAnMTBxJyAyPi9kZXYvbnVsbCB8CisrICAgICAgICRFR1JFUCAnZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJyA+L2Rldi9udWxsOyB0aGVuCisrICAgICAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgIHdpbjMyX25tcmVzPWBldmFsICROTSAtZiBwb3NpeCAtQSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiB8CisgCSRTRUQgLW4gLWUgJworIAkgICAgMSwxMDB7CisgCQkvIEkgL3sKK0BAIC0yODI3LDYgKzM1ODYsMTMxIEBAIGZ1bmNfd2luMzJfbGliaWQgKCkKKyAgICRFQ0hPICIkd2luMzJfbGliaWRfdHlwZSIKKyB9CisgCisrIyBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIgQVJHCisrIworKyMgUGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUKKysjIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZAorKyMgaW1wb3J0IGxpYnJhcnkgQVJHLgorKyMgSW52b2tlZCBieSBldmFsJ2luZyB0aGUgbGlidG9vbCB2YXJpYWJsZQorKyMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluIHRoZSB2YXJpYWJsZQorKyMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0CisrZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YCRETExUT09MIC0taWRlbnRpZnktc3RyaWN0IC0taWRlbnRpZnkgIiQxImAKKyt9CisrCisrIyBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSBTRUNUSU9OX05BTUUgTElCTkFNRXMKKysjCisrIyBUaGUgaXMgdGhlIGNvcmUgb2YgYSBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBvZiBhCisrIyBwbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSBuYW1lIG9mIHRoZQorKyMgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGltcG9ydCBsaWJyYXJ5IExJQk5BTUUuCisrIworKyMgU0VDVElPTl9OQU1FIGlzIGVpdGhlciAuaWRhdGEkNiBvciAuaWRhdGEkNywgZGVwZW5kaW5nCisrIyBvbiB0aGUgcGxhdGZvcm0gYW5kIGNvbXBpbGVyIHRoYXQgY3JlYXRlZCB0aGUgaW1wbGliLgorKyMKKysjIEVjaG9zIHRoZSBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZQorKyMgc3BlY2lmaWVkIGltcG9ydCBsaWJyYXJ5LgorK2Z1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgbWF0Y2hfbGl0ZXJhbD1gJEVDSE8gIiQxIiB8ICRTRUQgIiRzZWRfbWFrZV9saXRlcmFsX3JlZ2V4ImAKKysgICRPQkpEVU1QIC1zIC0tc2VjdGlvbiAiJDEiICIkMiIgMj4vZGV2L251bGwgfAorKyAgICAkU0VEICcvXkNvbnRlbnRzIG9mIHNlY3Rpb24gJyIkbWF0Y2hfbGl0ZXJhbCInOi97CisrICAgICAgIyBQbGFjZSBtYXJrZXIgYXQgYmVnaW5uaW5nIG9mIGFyY2hpdmUgbWVtYmVyIGRsbG5hbWUgc2VjdGlvbgorKyAgICAgIHMvLiovPT09PU1BUks9PT09LworKyAgICAgIHAKKysgICAgICBkCisrICAgIH0KKysgICAgIyBUaGVzZSBsaW5lcyBjYW4gc29tZXRpbWVzIGJlIGxvbmdlciB0aGFuIDQzIGNoYXJhY3RlcnMsIGJ1dAorKyAgICAjIGFyZSBhbHdheXMgdW5pbnRlcmVzdGluZworKyAgICAvOlsJIF0qZmlsZSBmb3JtYXQgcGVbaV1ceywxXH0tL2QKKysgICAgL15JbiBhcmNoaXZlIFteOl0qOi9kCisrICAgICMgRW5zdXJlIG1hcmtlciBpcyBwcmludGVkCisrICAgIC9ePT09PU1BUks9PT09L3AKKysgICAgIyBSZW1vdmUgYWxsIGxpbmVzIHdpdGggbGVzcyB0aGFuIDQzIGNoYXJhY3RlcnMKKysgICAgL14uXHs0M1x9LyFkCisrICAgICMgRnJvbSByZW1haW5pbmcgbGluZXMsIHJlbW92ZSBmaXJzdCA0MyBjaGFyYWN0ZXJzCisrICAgIHMvXi5cezQzXH0vLycgfAorKyAgICAkU0VEIC1uICcKKysgICAgICAjIEpvaW4gbWFya2VyIGFuZCBhbGwgbGluZXMgdW50aWwgbmV4dCBtYXJrZXIgaW50byBhIHNpbmdsZSBsaW5lCisrICAgICAgL149PT09TUFSSz09PT0vIGIgcGFyYQorKyAgICAgIEgKKysgICAgICAkIGIgcGFyYQorKyAgICAgIGIKKysgICAgICA6cGFyYQorKyAgICAgIHgKKysgICAgICBzL1xuLy9nCisrICAgICAgIyBSZW1vdmUgdGhlIG1hcmtlcgorKyAgICAgIHMvXj09PT1NQVJLPT09PS8vCisrICAgICAgIyBSZW1vdmUgdHJhaWxpbmcgZG90cyBhbmQgd2hpdGVzcGFjZQorKyAgICAgIHMvW1wuIFx0XSokLy8KKysgICAgICAjIFByaW50CisrICAgICAgLy4vcCcgfAorKyAgICAjIHdlIG5vdyBoYXZlIGEgbGlzdCwgb25lIGVudHJ5IHBlciBsaW5lLCBvZiB0aGUgc3RyaW5naWZpZWQKKysgICAgIyBjb250ZW50cyBvZiB0aGUgYXBwcm9wcmlhdGUgc2VjdGlvbiBvZiBhbGwgbWVtYmVycyBvZiB0aGUKKysgICAgIyBhcmNoaXZlIHdoaWNoIHBvc3Nlc3MgdGhhdCBzZWN0aW9uLiBIZXVyaXN0aWM6IGVsaW1pbmF0ZQorKyAgICAjIGFsbCB0aG9zZSB3aGljaCBoYXZlIGEgZmlyc3Qgb3Igc2Vjb25kIGNoYXJhY3RlciB0aGF0IGlzCisrICAgICMgYSAnLicgKHRoYXQgaXMsIG9iamR1bXAncyByZXByZXNlbnRhdGlvbiBvZiBhbiB1bnByaW50YWJsZQorKyAgICAjIGNoYXJhY3Rlci4pIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGFsbCBhcmNoaXZlcyB3aXRoIGxlc3MgdGhhbgorKyAgICAjIDB4MzAyZiBleHBvcnRzIC0tIGJ1dCB3aWxsIGZhaWwgZm9yIERMTHMgd2hvc2UgbmFtZSBhY3R1YWxseQorKyAgICAjIGJlZ2lucyB3aXRoIGEgbGl0ZXJhbCAnLicgb3IgYSBzaW5nbGUgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5CisrICAgICMgYSAnLicuCisrICAgICMKKysgICAgIyBPZiB0aG9zZSB0aGF0IHJlbWFpbiwgcHJpbnQgdGhlIGZpcnN0IG9uZS4KKysgICAgJFNFRCAtZSAnL15cLi9kOy9eLlwuL2Q7cScKKyt9CisrCisrIyBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wIEFSRworKyMgVGhpcyBwcmVkaWNhdGUgcmV0dXJucyB3aXRoIHplcm8gc3RhdHVzIChUUlVFKSBpZgorKyMgQVJHIGlzIGEgR05VL2JpbnV0aWxzLXN0eWxlIGltcG9ydCBsaWJyYXJ5LiBSZXR1cm5zCisrIyB3aXRoIG5vbnplcm8gc3RhdHVzIChGQUxTRSkgb3RoZXJ3aXNlLgorK2Z1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl90bXA9YCROTSAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgfCBldmFsICIkZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRFR1JFUCAnIChfaGVhZF9bQS1aYS16MC05X10rX1thZF1sKnxbQS1aYS16MC05X10rX1thZF1sKl9pbmFtZSkkJ2AKKysgIHRlc3QgLW4gIiRmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl90bXAiCisrfQorKworKyMgZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wIEFSRworKyMgVGhpcyBwcmVkaWNhdGUgcmV0dXJucyB3aXRoIHplcm8gc3RhdHVzIChUUlVFKSBpZgorKyMgQVJHIGlzIGFuIE1TLXN0eWxlIGltcG9ydCBsaWJyYXJ5LiBSZXR1cm5zCisrIyB3aXRoIG5vbnplcm8gc3RhdHVzIChGQUxTRSkgb3RoZXJ3aXNlLgorK2Z1bmNfY3lnbWluZ19tc19pbXBsaWJfcCAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfdG1wPWAkTk0gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiIHwgZXZhbCAiJGdsb2JhbF9zeW1ib2xfcGlwZSIgfCAkR1JFUCAnX05VTExfSU1QT1JUX0RFU0NSSVBUT1InYAorKyAgdGVzdCAtbiAiJGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfdG1wIgorK30KKysKKysjIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjayBBUkcKKysjIFBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlCisrIyBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQKKysjIGltcG9ydCBsaWJyYXJ5IEFSRy4KKysjCisrIyBUaGlzIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uIGlzIGZvciB1c2Ugd2hlbiAkRExMVE9PTAorKyMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgLS1pZGVudGlmeS1zdHJpY3Qgb3B0aW9uLgorKyMgSW52b2tlZCBieSBldmFsJ2luZyB0aGUgbGlidG9vbCB2YXJpYWJsZQorKyMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluIHRoZSB2YXJpYWJsZQorKyMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0CisrZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgaWYgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCAiJDEiIDsgdGhlbgorKyAgICAjIGJpbnV0aWxzIGltcG9ydCBsaWJyYXJ5CisrICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAnLmlkYXRhJDcnICIkMSJgCisrICBlbGlmIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfcCAiJDEiIDsgdGhlbgorKyAgICAjIG1zLWdlbmVyYXRlZCBpbXBvcnQgbGlicmFyeQorKyAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgJy5pZGF0YSQ2JyAiJDEiYAorKyAgZWxzZQorKyAgICAjIHVua25vd24KKysgICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9IiIKKysgIGZpCisrfQorIAorIAorICMgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgZGlyIG9sZGxpYgorQEAgLTI5MTcsNyArMzgwMSw3IEBAIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAoKQorIAkgICAgZGFyd2luX2ZpbGU9CisgCSAgICBkYXJ3aW5fZmlsZXM9CisgCSAgICBmb3IgZGFyd2luX2ZpbGUgaW4gJGRhcndpbl9maWxlbGlzdDsgZG8KKy0JICAgICAgZGFyd2luX2ZpbGVzPWBmaW5kIHVuZmF0LSQkIC1uYW1lICRkYXJ3aW5fZmlsZSAtcHJpbnQgfCAkTkwyU1BgCisrCSAgICAgIGRhcndpbl9maWxlcz1gZmluZCB1bmZhdC0kJCAtbmFtZSAkZGFyd2luX2ZpbGUgLXByaW50IHwgc29ydCB8ICROTDJTUGAKKyAJICAgICAgJExJUE8gLWNyZWF0ZSAtb3V0cHV0ICIkZGFyd2luX2ZpbGUiICRkYXJ3aW5fZmlsZXMKKyAJICAgIGRvbmUgIyAkZGFyd2luX2ZpbGVsaXN0CisgCSAgICAkUk0gLXJmIHVuZmF0LSQkCitAQCAtMjkzMiw3ICszODE2LDcgQEAgZnVuY19leHRyYWN0X2FyY2hpdmVzICgpCisgICAgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiJG15X3hkaXIiICIkbXlfeGFicyIKKyAJOzsKKyAgICAgICBlc2FjCistICAgICAgbXlfb2xkb2Jqcz0iJG15X29sZG9ianMgImBmaW5kICRteV94ZGlyIC1uYW1lIFwqLiRvYmpleHQgLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8ICROTDJTUGAKKysgICAgICBteV9vbGRvYmpzPSIkbXlfb2xkb2JqcyAiYGZpbmQgJG15X3hkaXIgLW5hbWUgXCouJG9iamV4dCAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgc29ydCB8ICROTDJTUGAKKyAgICAgZG9uZQorIAorICAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0PSIkbXlfb2xkb2JqcyIKK0BAIC0zMDE0LDcgKzM4OTgsMTEwIEBAIGZ1bmNfZmFsbGJhY2tfZWNobyAoKQorIF9MVEVDSE9fRU9GJworIH0KKyAgICAgRUNITz1cIiRxRUNIT1wiCistICBmaVwKKysgIGZpCisrCisrIyBWZXJ5IGJhc2ljIG9wdGlvbiBwYXJzaW5nLiBUaGVzZSBvcHRpb25zIGFyZSAoYSkgc3BlY2lmaWMgdG8KKysjIHRoZSBsaWJ0b29sIHdyYXBwZXIsIChiKSBhcmUgaWRlbnRpY2FsIGJldHdlZW4gdGhlIHdyYXBwZXIKKysjIC9zY3JpcHQvIGFuZCB0aGUgd3JhcHBlciAvZXhlY3V0YWJsZS8gd2hpY2ggaXMgdXNlZCBvbmx5IG9uCisrIyB3aW5kb3dzIHBsYXRmb3JtcywgYW5kIChjKSBhbGwgYmVnaW4gd2l0aCB0aGUgc3RyaW5nICItLWx0LSIKKysjIChhcHBsaWNhdGlvbiBwcm9ncmFtcyBhcmUgdW5saWtlbHkgdG8gaGF2ZSBvcHRpb25zIHdoaWNoIG1hdGNoCisrIyB0aGlzIHBhdHRlcm4pLgorKyMKKysjIFRoZXJlIGFyZSBvbmx5IHR3byBzdXBwb3J0ZWQgb3B0aW9uczogLS1sdC1kZWJ1ZyBhbmQKKysjIC0tbHQtZHVtcC1zY3JpcHQuIFRoZXJlIGlzLCBkZWxpYmVyYXRlbHksIG5vIC0tbHQtaGVscC4KKysjCisrIyBUaGUgZmlyc3QgYXJndW1lbnQgdG8gdGhpcyBwYXJzaW5nIGZ1bmN0aW9uIHNob3VsZCBiZSB0aGUKKysjIHNjcmlwdCdzICQwIHZhbHVlLCBmb2xsb3dlZCBieSAiJEAiLgorK2x0X29wdGlvbl9kZWJ1Zz0KKytmdW5jX3BhcnNlX2x0X29wdGlvbnMgKCkKKyt7CisrICBsdF9zY3JpcHRfYXJnMD1cJDAKKysgIHNoaWZ0CisrICBmb3IgbHRfb3B0CisrICBkbworKyAgICBjYXNlIFwiXCRsdF9vcHRcIiBpbgorKyAgICAtLWx0LWRlYnVnKSBsdF9vcHRpb25fZGVidWc9MSA7OworKyAgICAtLWx0LWR1bXAtc2NyaXB0KQorKyAgICAgICAgbHRfZHVtcF9EPVxgXCRFQ0hPIFwiWFwkbHRfc2NyaXB0X2FyZzBcIiB8ICRTRUQgLWUgJ3MvXlgvLycgLWUgJ3MlL1teL10qJCUlJ1xgCisrICAgICAgICB0ZXN0IFwiWFwkbHRfZHVtcF9EXCIgPSBcIlhcJGx0X3NjcmlwdF9hcmcwXCIgJiYgbHRfZHVtcF9EPS4KKysgICAgICAgIGx0X2R1bXBfRj1cYFwkRUNITyBcIlhcJGx0X3NjcmlwdF9hcmcwXCIgfCAkU0VEIC1lICdzL15YLy8nIC1lICdzJV4uKi8lJSdcYAorKyAgICAgICAgY2F0IFwiXCRsdF9kdW1wX0QvXCRsdF9kdW1wX0ZcIgorKyAgICAgICAgZXhpdCAwCisrICAgICAgOzsKKysgICAgLS1sdC0qKQorKyAgICAgICAgXCRFQ0hPIFwiVW5yZWNvZ25pemVkIC0tbHQtIG9wdGlvbjogJ1wkbHRfb3B0J1wiIDE+JjIKKysgICAgICAgIGV4aXQgMQorKyAgICAgIDs7CisrICAgIGVzYWMKKysgIGRvbmUKKysKKysgICMgUHJpbnQgdGhlIGRlYnVnIGJhbm5lciBpbW1lZGlhdGVseToKKysgIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCisrICAgIGVjaG8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBsaWJ0b29sIHdyYXBwZXIgKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OXCIgMT4mMgorKyAgZmkKKyt9CisrCisrIyBVc2VkIHdoZW4gLS1sdC1kZWJ1Zy4gUHJpbnRzIGl0cyBhcmd1bWVudHMgdG8gc3Rkb3V0CisrIyAocmVkaXJlY3Rpb24gaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIpCisrZnVuY19sdF9kdW1wX2FyZ3MgKCkKKyt7CisrICBsdF9kdW1wX2FyZ3NfTj0xOworKyAgZm9yIGx0X2FyZworKyAgZG8KKysgICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndltcJGx0X2R1bXBfYXJnc19OXTogXCRsdF9hcmdcIgorKyAgICBsdF9kdW1wX2FyZ3NfTj1cYGV4cHIgXCRsdF9kdW1wX2FyZ3NfTiArIDFcYAorKyAgZG9uZQorK30KKysKKysjIENvcmUgZnVuY3Rpb24gZm9yIGxhdW5jaGluZyB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uCisrZnVuY19leGVjX3Byb2dyYW1fY29yZSAoKQorK3sKKysiCisrICBjYXNlICRob3N0IGluCisrICAjIEJhY2tzbGFzaGVzIHNlcGFyYXRlIGRpcmVjdG9yaWVzIG9uIHBsYWluIHdpbmRvd3MKKysgICotKi1taW5ndyB8ICotKi1vczIqIHwgKi1jZWdjYyopCisrICAgICRFQ0hPICJcCisrICAgICAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KKysgICAgICAgIFwkRUNITyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IG5ld2FyZ3ZbMF06IFwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiAxPiYyCisrICAgICAgICBmdW5jX2x0X2R1bXBfYXJncyBcJHsxK1wiXCRAXCJ9IDE+JjIKKysgICAgICBmaQorKyAgICAgIGV4ZWMgXCJcJHByb2dkaXJcXFxcXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQorKyIKKysgICAgOzsKKysKKysgICopCisrICAgICRFQ0hPICJcCisrICAgICAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KKysgICAgICAgIFwkRUNITyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IG5ld2FyZ3ZbMF06IFwkcHJvZ2Rpci9cJHByb2dyYW1cIiAxPiYyCisrICAgICAgICBmdW5jX2x0X2R1bXBfYXJncyBcJHsxK1wiXCRAXCJ9IDE+JjIKKysgICAgICBmaQorKyAgICAgIGV4ZWMgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQorKyIKKysgICAgOzsKKysgIGVzYWMKKysgICRFQ0hPICJcCisrICAgICAgXCRFQ0hPIFwiXCQwOiBjYW5ub3QgZXhlYyBcJHByb2dyYW0gXCQqXCIgMT4mMgorKyAgICAgIGV4aXQgMQorK30KKysKKysjIEEgZnVuY3Rpb24gdG8gZW5jYXBzdWxhdGUgbGF1bmNoaW5nIHRoZSB0YXJnZXQgYXBwbGljYXRpb24KKysjIFN0cmlwcyBvcHRpb25zIGluIHRoZSAtLWx0LSogbmFtZXNwYWNlIGZyb20gXCRAIGFuZAorKyMgbGF1bmNoZXMgdGFyZ2V0IGFwcGxpY2F0aW9uIHdpdGggdGhlIHJlbWFpbmluZyBhcmd1bWVudHMuCisrZnVuY19leGVjX3Byb2dyYW0gKCkKKyt7CisrICBmb3IgbHRfd3JfYXJnCisrICBkbworKyAgICBjYXNlIFwkbHRfd3JfYXJnIGluCisrICAgIC0tbHQtKikgOzsKKysgICAgKikgc2V0IHggXCJcJEBcIiBcIlwkbHRfd3JfYXJnXCI7IHNoaWZ0OzsKKysgICAgZXNhYworKyAgICBzaGlmdAorKyAgZG9uZQorKyAgZnVuY19leGVjX3Byb2dyYW1fY29yZSBcJHsxK1wiXCRAXCJ9CisrfQorKworKyAgIyBQYXJzZSBvcHRpb25zCisrICBmdW5jX3BhcnNlX2x0X29wdGlvbnMgXCJcJDBcIiBcJHsxK1wiXCRAXCJ9CisgCisgICAjIEZpbmQgdGhlIGRpcmVjdG9yeSB0aGF0IHRoaXMgc2NyaXB0IGxpdmVzIGluLgorICAgdGhpc2Rpcj1cYFwkRUNITyBcIlwkZmlsZVwiIHwgJFNFRCAncyUvW14vXSokJSUnXGAKK0BAIC0zMDc4LDcgKzQwNjUsNyBAQCBfTFRFQ0hPX0VPRicKKyAKKyAgICAgIyByZWxpbmsgZXhlY3V0YWJsZSBpZiBuZWNlc3NhcnkKKyAgICAgaWYgdGVzdCAtbiBcIlwkcmVsaW5rX2NvbW1hbmRcIjsgdGhlbgorLSAgICAgIGlmIHJlbGlua19jb21tYW5kX291dHB1dD1cYGV2YWwgXCJcJHJlbGlua19jb21tYW5kXCIgMj4mMVxgOyB0aGVuIDoKKysgICAgICBpZiByZWxpbmtfY29tbWFuZF9vdXRwdXQ9XGBldmFsIFwkcmVsaW5rX2NvbW1hbmQgMj4mMVxgOyB0aGVuIDoKKyAgICAgICBlbHNlCisgCSRFQ0hPIFwiXCRyZWxpbmtfY29tbWFuZF9vdXRwdXRcIiA+JjIKKyAJJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCitAQCAtMzEwMiw2ICs0MDg5LDE4IEBAIF9MVEVDSE9fRU9GJworIAorICAgaWYgdGVzdCAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgdGhlbiIKKyAKKysJIyBmaXh1cCB0aGUgZGxsIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0by4KKysJIworKwkjIEZpeCB0aGUgRExMIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0by4gIERvIHRoaXMgYmVmb3JlIHByZXBlbmRpbmcKKysJIyB0byBzaGxpYnBhdGgsIGJlY2F1c2Ugb24gV2luZG93cywgYm90aCBhcmUgUEFUSCBhbmQgdW5pbnN0YWxsZWQKKysJIyBsaWJyYXJpZXMgbXVzdCBjb21lIGZpcnN0LgorKwlpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KKysJICAkRUNITyAiXAorKyAgICAjIEFkZCB0aGUgZGxsIHNlYXJjaCBwYXRoIGNvbXBvbmVudHMgdG8gdGhlIGV4ZWN1dGFibGUgUEFUSAorKyAgICBQQVRIPSRkbGxzZWFyY2hwYXRoOlwkUEFUSAorKyIKKysJZmkKKysKKyAJIyBFeHBvcnQgb3VyIHNobGlicGF0aF92YXIgaWYgd2UgaGF2ZSBvbmUuCisgCWlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KKyAJICAkRUNITyAiXAorQEAgLTMxMTYsMzUgKzQxMTUsMTAgQEAgX0xURUNIT19FT0YnCisgIgorIAlmaQorIAorLQkjIGZpeHVwIHRoZSBkbGwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLgorLQlpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KKy0JICAkRUNITyAiXAorLSAgICAjIEFkZCB0aGUgZGxsIHNlYXJjaCBwYXRoIGNvbXBvbmVudHMgdG8gdGhlIGV4ZWN1dGFibGUgUEFUSAorLSAgICBQQVRIPSRkbGxzZWFyY2hwYXRoOlwkUEFUSAorLSIKKy0JZmkKKy0KKyAJJEVDSE8gIlwKKyAgICAgaWYgdGVzdCBcIlwkbGlidG9vbF9leGVjdXRlX21hZ2ljXCIgIT0gXCIkbWFnaWNcIjsgdGhlbgorICAgICAgICMgUnVuIHRoZSBhY3R1YWwgcHJvZ3JhbSB3aXRoIG91ciBhcmd1bWVudHMuCistIgorLQljYXNlICRob3N0IGluCistCSMgQmFja3NsYXNoZXMgc2VwYXJhdGUgZGlyZWN0b3JpZXMgb24gcGxhaW4gd2luZG93cworLQkqLSotbWluZ3cgfCAqLSotb3MyKiB8ICotY2VnY2MqKQorLQkgICRFQ0hPICJcCistICAgICAgZXhlYyBcIlwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CistIgorLQkgIDs7CistCistCSopCistCSAgJEVDSE8gIlwKKy0gICAgICBleGVjIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KKy0iCistCSAgOzsKKy0JZXNhYworLQkkRUNITyAiXAorLSAgICAgIFwkRUNITyBcIlwkMDogY2Fubm90IGV4ZWMgXCRwcm9ncmFtIFwkKlwiIDE+JjIKKy0gICAgICBleGl0IDEKKysgICAgICBmdW5jX2V4ZWNfcHJvZ3JhbSBcJHsxK1wiXCRAXCJ9CisgICAgIGZpCisgICBlbHNlCisgICAgICMgVGhlIHByb2dyYW0gZG9lc24ndCBleGlzdC4KK0BAIC0zMTU4LDE2NiArNDEzMiw2IEBAIGZpXAorIH0KKyAKKyAKKy0jIGZ1bmNfdG9faG9zdF9wYXRoIGFyZworLSMKKy0jIENvbnZlcnQgcGF0aHMgdG8gaG9zdCBmb3JtYXQgd2hlbiB1c2VkIHdpdGggYnVpbGQgdG9vbHMuCistIyBJbnRlbmRlZCBmb3IgdXNlIHdpdGggIm5hdGl2ZSIgbWluZ3cgKHdoZXJlIGxpYnRvb2wgaXRzZWxmCistIyBpcyBydW5uaW5nIHVuZGVyIHRoZSBtc3lzIHNoZWxsKSwgb3IgaW4gdGhlIGZvbGxvd2luZyBjcm9zcy0KKy0jIGJ1aWxkIGVudmlyb25tZW50czoKKy0jICAgICRidWlsZCAgICAgICAgICAkaG9zdAorLSMgICAgbWluZ3cgKG1zeXMpICAgIG1pbmd3ICBbZS5nLiBuYXRpdmVdCistIyAgICBjeWd3aW4gICAgICAgICAgbWluZ3cKKy0jICAgICpuaXggKyB3aW5lICAgICBtaW5ndworLSMgd2hlcmUgd2luZSBpcyBlcXVpcHBlZCB3aXRoIHRoZSBgd2luZXBhdGgnIGV4ZWN1dGFibGUuCistIyBJbiB0aGUgbmF0aXZlIG1pbmd3IGNhc2UsIHRoZSAobXN5cykgc2hlbGwgYXV0b21hdGljYWxseQorLSMgY29udmVydHMgcGF0aHMgZm9yIGFueSBub24tbXN5cyBhcHBsaWNhdGlvbnMgaXQgbGF1bmNoZXMsCistIyBidXQgdGhhdCBmYWNpbGl0eSBpc24ndCBhdmFpbGFibGUgZnJvbSBpbnNpZGUgdGhlIGN3cmFwcGVyLgorLSMgU2ltaWxhciBhY2NvbW1vZGF0aW9ucyBhcmUgbmVjZXNzYXJ5IGZvciAkaG9zdCBtaW5ndyBhbmQKKy0jICRidWlsZCBjeWd3aW4uICBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gZG9lcyBubyBoYXJtIGZvciBvdGhlcgorLSMgJGhvc3QvJGJ1aWxkIGNvbWJpbmF0aW9ucyBub3QgbGlzdGVkIGFib3ZlLgorLSMKKy0jIEFSRyBpcyB0aGUgcGF0aCAob24gJGJ1aWxkKSB0aGF0IHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8KKy0jIHRoZSBwcm9wZXIgcmVwcmVzZW50YXRpb24gZm9yICRob3N0LiBUaGUgcmVzdWx0IGlzIHN0b3JlZAorLSMgaW4gJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KKy1mdW5jX3RvX2hvc3RfcGF0aCAoKQorLXsKKy0gIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCistICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKy0gICAgY2FzZSAkaG9zdCBpbgorLSAgICAgICptaW5ndyogKQorLSAgICAgICAgbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeT0nc3xcXFxcKnxcXHxnO3N8L3xcXHxnO3N8XFx8XFxcXHxnJworLSAgICAgICAgY2FzZSAkYnVpbGQgaW4KKy0gICAgICAgICAgKm1pbmd3KiApICMgYWN0dWFsbHksIG1zeXMKKy0gICAgICAgICAgICAjIGF3a3dhcmQ6IGNtZCBhcHBlbmRzIHNwYWNlcyB0byByZXN1bHQKKy0gICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YCggY21kIC8vYyBlY2hvICIkMSIgKSAyPi9kZXYvbnVsbCB8CistICAgICAgICAgICAgICAkU0VEIC1lICdzL1sgXSokLy8nIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCistICAgICAgICAgICAgOzsKKy0gICAgICAgICAgKmN5Z3dpbiogKQorLSAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gY3lncGF0aCAtdyAiJDEiIHwKKy0JICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorLSAgICAgICAgICAgIDs7CistICAgICAgICAgICogKQorLSAgICAgICAgICAgICMgVW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lcyBub3QgZXhpdCB3aXRoIGEgbm9uLXplcm8KKy0gICAgICAgICAgICAjIGVycm9yIGNvZGUsIHNvIHdlIGFyZSBmb3JjZWQgdG8gY2hlY2sgdGhlIGNvbnRlbnRzIG9mCistICAgICAgICAgICAgIyBzdGRvdXQuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgY29tbWFuZCBpcyBub3QKKy0gICAgICAgICAgICAjIGZvdW5kLCB0aGUgc2hlbGwgd2lsbCBzZXQgYW4gZXhpdCBjb2RlIG9mIDEyNyBhbmQgcHJpbnQKKy0gICAgICAgICAgICAjICphbiBlcnJvciBtZXNzYWdlKiB0byBzdGRvdXQuIFNvIHdlIG11c3QgY2hlY2sgZm9yIGJvdGgKKy0gICAgICAgICAgICAjIGVycm9yIGNvZGUgb2YgemVybyBBTkQgbm9uLWVtcHR5IHN0ZG91dCwgd2hpY2ggZXhwbGFpbnMKKy0gICAgICAgICAgICAjIHRoZSBvZGQgY29uc3RydWN0aW9uOgorLSAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9YHdpbmVwYXRoIC13ICIkMSIgMj4vZGV2L251bGxgCistICAgICAgICAgICAgaWYgdGVzdCAiJD8iIC1lcSAwICYmIHRlc3QgLW4gIiR7ZnVuY190b19ob3N0X3BhdGhfdG1wMX0iOyB0aGVuCistICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YCRFQ0hPICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgfAorLSAgICAgICAgICAgICAgICAkU0VEIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgIyBBbGxvdyB3YXJuaW5nIGJlbG93LgorLSAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PQorLSAgICAgICAgICAgIGZpCistICAgICAgICAgICAgOzsKKy0gICAgICAgIGVzYWMKKy0gICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiIDsgdGhlbgorLSAgICAgICAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIGhvc3QgcGF0aCBjb3JyZXNwb25kaW5nIHRvIgorLSAgICAgICAgICBmdW5jX2Vycm9yICIgIFxgJDEnIgorLSAgICAgICAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKKy0gICAgICAgICAgIyBGYWxsYmFjazoKKy0gICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKy0gICAgICAgIGZpCistICAgICAgICA7OworLSAgICBlc2FjCistICBmaQorLX0KKy0jIGVuZDogZnVuY190b19ob3N0X3BhdGgKKy0KKy0jIGZ1bmNfdG9faG9zdF9wYXRobGlzdCBhcmcKKy0jCistIyBDb252ZXJ0IHBhdGhsaXN0cyB0byBob3N0IGZvcm1hdCB3aGVuIHVzZWQgd2l0aCBidWlsZCB0b29scy4KKy0jIFNlZSBmdW5jX3RvX2hvc3RfcGF0aCgpLCBhYm92ZS4gVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyB0aGUKKy0jIGZvbGxvd2luZyAkYnVpbGQvJGhvc3QgY29tYmluYXRpb25zIChidXQgZG9lcyBubyBoYXJtIGZvcgorLSMgY29tYmluYXRpb25zIG5vdCBsaXN0ZWQgaGVyZSk6CistIyAgICAkYnVpbGQgICAgICAgICAgJGhvc3QKKy0jICAgIG1pbmd3IChtc3lzKSAgICBtaW5ndyAgW2UuZy4gbmF0aXZlXQorLSMgICAgY3lnd2luICAgICAgICAgIG1pbmd3CistIyAgICAqbml4ICsgd2luZSAgICAgbWluZ3cKKy0jCistIyBQYXRoIHNlcGFyYXRvcnMgYXJlIGFsc28gY29udmVydGVkIGZyb20gJGJ1aWxkIGZvcm1hdCB0bworLSMgJGhvc3QgZm9ybWF0LiBJZiBBUkcgYmVnaW5zIG9yIGVuZHMgd2l0aCBhIHBhdGggc2VwYXJhdG9yCistIyBjaGFyYWN0ZXIsIGl0IGlzIHByZXNlcnZlZCAoYnV0IGNvbnZlcnRlZCB0byAkaG9zdCBmb3JtYXQpCistIyBvbiBvdXRwdXQuCistIworLSMgQVJHIGlzIGEgcGF0aGxpc3QgKG9uICRidWlsZCkgdGhhdCBzaG91bGQgYmUgY29udmVydGVkIHRvCistIyB0aGUgcHJvcGVyIHJlcHJlc2VudGF0aW9uIG9uICRob3N0LiBUaGUgcmVzdWx0IGlzIHN0b3JlZAorLSMgaW4gJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQuCistZnVuY190b19ob3N0X3BhdGhsaXN0ICgpCisteworLSAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD0iJDEiCistICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKy0gICAgY2FzZSAkaG9zdCBpbgorLSAgICAgICptaW5ndyogKQorLSAgICAgICAgbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeT0nc3xcXFxcKnxcXHxnO3N8L3xcXHxnO3N8XFx8XFxcXHxnJworLSAgICAgICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tCistICAgICAgICAjIEFSRy4gbXN5cyBiZWhhdmlvciBpcyBpbmNvbnNpc3RlbnQgaGVyZSwgY3lncGF0aCB0dXJucyB0aGVtCistICAgICAgICAjIGludG8gJy47JyBhbmQgJzsuJywgYW5kIHdpbmVwYXRoIGlnbm9yZXMgdGhlbSBjb21wbGV0ZWx5LgorLQlmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorLSAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorLSAgICAgICAgY2FzZSAkYnVpbGQgaW4KKy0gICAgICAgICAgKm1pbmd3KiApICMgQWN0dWFsbHksIG1zeXMuCistICAgICAgICAgICAgIyBBd2t3YXJkOiBjbWQgYXBwZW5kcyBzcGFjZXMgdG8gcmVzdWx0LgorLSAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9YAorLQkgICAgICAoIGNtZCAvL2MgZWNobyAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAxIiApIDI+L2Rldi9udWxsIHwKKy0JICAgICAgJFNFRCAtZSAncy9bIF0qJC8vJyAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorLSAgICAgICAgICAgIDs7CistICAgICAgICAgICpjeWd3aW4qICkKKy0gICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PWBjeWdwYXRoIC13IC1wICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEiIHwKKy0gICAgICAgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKy0gICAgICAgICAgICA7OworLSAgICAgICAgICAqICkKKy0gICAgICAgICAgICAjIHVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXNuJ3QgY29udmVydCBwYXRobGlzdHMKKy0gICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSIiCistICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X29sZElGUz0kSUZTCistICAgICAgICAgICAgSUZTPToKKy0gICAgICAgICAgICBmb3IgZnVuY190b19ob3N0X3BhdGhsaXN0X2YgaW4gJGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAxIDsgZG8KKy0gICAgICAgICAgICAgIElGUz0kZnVuY190b19ob3N0X3BhdGhsaXN0X29sZElGUworLSAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9mIiA7IHRoZW4KKy0gICAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGggIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfZiIKKy0gICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIgOyB0aGVuCistICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiIDsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD0iJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKy0gICAgICAgICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0ICI7JGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKy0gICAgICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICBkb25lCistICAgICAgICAgICAgSUZTPSRmdW5jX3RvX2hvc3RfcGF0aGxpc3Rfb2xkSUZTCistICAgICAgICAgICAgOzsKKy0gICAgICAgIGVzYWMKKy0gICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0IjsgdGhlbgorLSAgICAgICAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBob3N0IHBhdGgocykgY29ycmVzcG9uZGluZyB0byIKKy0gICAgICAgICAgZnVuY19lcnJvciAiICBcYCQxJyIKKy0gICAgICAgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCistICAgICAgICAgICMgRmFsbGJhY2suIFRoaXMgbWF5IGJyZWFrIGlmICQxIGNvbnRhaW5zIERPUy1zdHlsZSBkcml2ZQorLSAgICAgICAgICAjIHNwZWNpZmljYXRpb25zLiBUaGUgZml4IGlzIG5vdCB0byBjb21wbGljYXRlIHRoZSBleHByZXNzaW9uCistICAgICAgICAgICMgYmVsb3csIGJ1dCBmb3IgdGhlIHVzZXIgdG8gcHJvdmlkZSBhIHdvcmtpbmcgd2luZSBpbnN0YWxsYXRpb24KKy0gICAgICAgICAgIyB3aXRoIHdpbmVwYXRoIHNvIHRoYXQgcGF0aCB0cmFuc2xhdGlvbiBpbiB0aGUgY3Jvc3MtdG8tbWluZ3cKKy0gICAgICAgICAgIyBjYXNlIHdvcmtzIHByb3Blcmx5LgorLSAgICAgICAgICBsdF9yZXBsYWNlX3BhdGhzZXBfbml4X3RvX2Rvcz0ic3w6fDt8ZyIKKy0gICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD1gZWNobyAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAxIiB8XAorLSAgICAgICAgICAgICRTRUQgLWUgIiRsdF9yZXBsYWNlX3BhdGhzZXBfbml4X3RvX2RvcyJgCistICAgICAgICBmaQorLSAgICAgICAgIyBOb3csIGFkZCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3JzIGJhY2sKKy0gICAgICAgIGNhc2UgIiQxIiBpbgorLSAgICAgICAgICA6KiApIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9IjskZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCIKKy0gICAgICAgICAgICA7OworLSAgICAgICAgZXNhYworLSAgICAgICAgY2FzZSAiJDEiIGluCistICAgICAgICAgICo6ICkgZnVuY19hcHBlbmQgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCAiOyIKKy0gICAgICAgICAgICA7OworLSAgICAgICAgZXNhYworLSAgICAgICAgOzsKKy0gICAgZXNhYworLSAgZmkKKy19CistIyBlbmQ6IGZ1bmNfdG9faG9zdF9wYXRobGlzdAorLQorICMgZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYworICMgZW1pdCB0aGUgc291cmNlIGNvZGUgZm9yIGEgd3JhcHBlciBleGVjdXRhYmxlIG9uIHN0ZG91dAorICMgTXVzdCBPTkxZIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBmdW5jX21vZGVfbGluayBiZWNhdXNlCitAQCAtMzMzNCwxMCArNDE0OCw2IEBAIGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMgKCkKKyAKKyAgICBUaGlzIHdyYXBwZXIgZXhlY3V0YWJsZSBzaG91bGQgbmV2ZXIgYmUgbW92ZWQgb3V0IG9mIHRoZSBidWlsZCBkaXJlY3RvcnkuCisgICAgSWYgaXQgaXMsIGl0IHdpbGwgbm90IG9wZXJhdGUgY29ycmVjdGx5LgorLQorLSAgIEN1cnJlbnRseSwgaXQgc2ltcGx5IGV4ZWNzIHRoZSB3cmFwcGVyICpzY3JpcHQqICIkU0hFTEwgJG91dHB1dCIsCistICAgYnV0IGNvdWxkIGV2ZW50dWFsbHkgYWJzb3JiIGFsbCBvZiB0aGUgc2NyaXB0cyBmdW5jdGlvbmFsaXR5IGFuZAorLSAgIGV4ZWMgJG9iamRpci8kb3V0cHV0bmFtZSBkaXJlY3RseS4KKyAqLworIEVPRgorIAkgICAgY2F0IDw8IkVPRiIKK0BAIC0zNDYyLDIyICs0MjcyLDEzIEBAIGludCBzZXRlbnYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworICAgaWYgKHN0YWxlKSB7IGZyZWUgKCh2b2lkICopIHN0YWxlKTsgc3RhbGUgPSAwOyB9IFwKKyB9IHdoaWxlICgwKQorIAorLSN1bmRlZiBMVFdSQVBQRVJfREVCVUdQUklOVEYKKy0jaWYgZGVmaW5lZCBMVF9ERUJVR1dSQVBQRVIKKy0jIGRlZmluZSBMVFdSQVBQRVJfREVCVUdQUklOVEYoYXJncykgbHR3cmFwcGVyX2RlYnVncHJpbnRmIGFyZ3MKKy1zdGF0aWMgdm9pZAorLWx0d3JhcHBlcl9kZWJ1Z3ByaW50ZiAoY29uc3QgY2hhciAqZm10LCAuLi4pCisteworLSAgICB2YV9saXN0IGFyZ3M7CistICAgIHZhX3N0YXJ0IChhcmdzLCBmbXQpOworLSAgICAodm9pZCkgdmZwcmludGYgKHN0ZGVyciwgZm10LCBhcmdzKTsKKy0gICAgdmFfZW5kIChhcmdzKTsKKy19CisrI2lmIGRlZmluZWQoTFRfREVCVUdXUkFQUEVSKQorK3N0YXRpYyBpbnQgbHRfZGVidWcgPSAxOworICNlbHNlCistIyBkZWZpbmUgTFRXUkFQUEVSX0RFQlVHUFJJTlRGKGFyZ3MpCisrc3RhdGljIGludCBsdF9kZWJ1ZyA9IDA7CisgI2VuZGlmCisgCistY29uc3QgY2hhciAqcHJvZ3JhbV9uYW1lID0gTlVMTDsKKytjb25zdCBjaGFyICpwcm9ncmFtX25hbWUgPSAibGlidG9vbC13cmFwcGVyIjsgLyogaW4gY2FzZSB4c3RyZHVwIGZhaWxzICovCisgCisgdm9pZCAqeG1hbGxvYyAoc2l6ZV90IG51bSk7CisgY2hhciAqeHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKTsKK0BAIC0zNDg3LDcgKzQyODgsMTAgQEAgY2hhciAqY2hhc2Vfc3ltbGlua3MgKGNvbnN0IGNoYXIgKnBhdGhzcGVjKTsKKyBpbnQgbWFrZV9leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKTsKKyBpbnQgY2hlY2tfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCk7CisgY2hhciAqc3RyZW5kemFwIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCk7Cistdm9pZCBsdF9mYXRhbCAoY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKTsKKyt2b2lkIGx0X2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pOworK3ZvaWQgbHRfZmF0YWwgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pOworK3N0YXRpYyBjb25zdCBjaGFyICpub25udWxsIChjb25zdCBjaGFyICpzKTsKKytzdGF0aWMgY29uc3QgY2hhciAqbm9uZW1wdHkgKGNvbnN0IGNoYXIgKnMpOworIHZvaWQgbHRfc2V0ZW52IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CisgY2hhciAqbHRfZXh0ZW5kX3N0ciAoY29uc3QgY2hhciAqb3JpZ192YWx1ZSwgY29uc3QgY2hhciAqYWRkLCBpbnQgdG9fZW5kKTsKKyB2b2lkIGx0X3VwZGF0ZV9leGVfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOworQEAgLTM0OTcsMTQgKzQzMDEsMTQgQEAgdm9pZCBsdF9kdW1wX3NjcmlwdCAoRklMRSAqZik7CisgRU9GCisgCisgCSAgICBjYXQgPDxFT0YKKy1jb25zdCBjaGFyICogTUFHSUNfRVhFID0gIiRtYWdpY19leGUiOworK3ZvbGF0aWxlIGNvbnN0IGNoYXIgKiBNQUdJQ19FWEUgPSAiJG1hZ2ljX2V4ZSI7CisgY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBUk5BTUUgPSAiJHNobGlicGF0aF92YXIiOworIEVPRgorIAorIAkgICAgaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgorLSAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0ICIkdGVtcF9ycGF0aCIKKysgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoICIkdGVtcF9ycGF0aCIKKyAJICAgICAgY2F0IDw8RU9GCistY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiOworK2NvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiOworIEVPRgorIAkgICAgZWxzZQorIAkgICAgICBjYXQgPDwiRU9GIgorQEAgLTM1MTMsMTAgKzQzMTcsMTAgQEAgRU9GCisgCSAgICBmaQorIAorIAkgICAgaWYgdGVzdCAtbiAiJGRsbHNlYXJjaHBhdGgiOyB0aGVuCistICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3QgIiRkbGxzZWFyY2hwYXRoOiIKKysgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoICIkZGxsc2VhcmNocGF0aDoiCisgCSAgICAgIGNhdCA8PEVPRgorIGNvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQVJOQU1FID0gIlBBVEgiOworLWNvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0IjsKKytjb25zdCBjaGFyICogRVhFX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IjsKKyBFT0YKKyAJICAgIGVsc2UKKyAJICAgICAgY2F0IDw8IkVPRiIKK0BAIC0zNTM5LDEyICs0MzQzLDEwIEBAIEVPRgorIAkgICAgY2F0IDw8IkVPRiIKKyAKKyAjZGVmaW5lIExUV1JBUFBFUl9PUFRJT05fUFJFRklYICAgICAgICAgIi0tbHQtIgorLSNkZWZpbmUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVhfTEVOR1RIICA1CisgCistc3RhdGljIGNvbnN0IHNpemVfdCBvcHRfcHJlZml4X2xlbiAgICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVhfTEVOR1RIOworIHN0YXRpYyBjb25zdCBjaGFyICpsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYOworLQorIHN0YXRpYyBjb25zdCBjaGFyICpkdW1wc2NyaXB0X29wdCAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJkdW1wLXNjcmlwdCI7Cisrc3RhdGljIGNvbnN0IGNoYXIgKmRlYnVnX29wdCAgICAgICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImRlYnVnIjsKKyAKKyBpbnQKKyBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorQEAgLTM1NjEsMTAgKzQzNjMsMTMgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgIGludCBpOworIAorICAgcHJvZ3JhbV9uYW1lID0gKGNoYXIgKikgeHN0cmR1cCAoYmFzZV9uYW1lIChhcmd2WzBdKSk7CistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIGFyZ3ZbMF0gICAgICA6ICVzXG4iLCBhcmd2WzBdKSk7CistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIHByb2dyYW1fbmFtZSA6ICVzXG4iLCBwcm9ncmFtX25hbWUpKTsKKysgIG5ld2FyZ3ogPSBYTUFMTE9DIChjaGFyICosIGFyZ2MgKyAxKTsKKyAKKy0gIC8qIHZlcnkgc2ltcGxlIGFyZyBwYXJzaW5nOyBkb24ndCB3YW50IHRvIHJlbHkgb24gZ2V0b3B0ICovCisrICAvKiB2ZXJ5IHNpbXBsZSBhcmcgcGFyc2luZzsgZG9uJ3Qgd2FudCB0byByZWx5IG9uIGdldG9wdAorKyAgICogYWxzbywgY29weSBhbGwgbm9uIGN3cmFwcGVyIG9wdGlvbnMgdG8gbmV3YXJneiwgZXhjZXB0CisrICAgKiBhcmd6WzBdLCB3aGljaCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5CisrICAgKi8KKysgIG5ld2FyZ2M9MDsKKyAgIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisgICAgIHsKKyAgICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBkdW1wc2NyaXB0X29wdCkgPT0gMCkKK0BAIC0zNTgxLDIxICs0Mzg2LDU0IEBAIEVPRgorIAkgIGx0X2R1bXBfc2NyaXB0IChzdGRvdXQpOworIAkgIHJldHVybiAwOworIAl9CisrICAgICAgaWYgKHN0cmNtcCAoYXJndltpXSwgZGVidWdfb3B0KSA9PSAwKQorKwl7CisrICAgICAgICAgIGx0X2RlYnVnID0gMTsKKysgICAgICAgICAgY29udGludWU7CisrCX0KKysgICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCkgPT0gMCkKKysgICAgICAgIHsKKysgICAgICAgICAgLyogaG93ZXZlciwgaWYgdGhlcmUgaXMgYW4gb3B0aW9uIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAorKyAgICAgICAgICAgICBuYW1lc3BhY2UsIGJ1dCBpdCBpcyBub3Qgb25lIG9mIHRoZSBvbmVzIHdlIGtub3cgYWJvdXQgYW5kCisrICAgICAgICAgICAgIGhhdmUgYWxyZWFkeSBkZWFsdCB3aXRoLCBhYm92ZSAoaW5sdWRpbmcgZHVtcC1zY3JpcHQpLCB0aGVuCisrICAgICAgICAgICAgIHJlcG9ydCBhbiBlcnJvci4gT3RoZXJ3aXNlLCB0YXJnZXRzIG1pZ2h0IGJlZ2luIHRvIGJlbGlldmUKKysgICAgICAgICAgICAgdGhleSBhcmUgYWxsb3dlZCB0byB1c2Ugb3B0aW9ucyBpbiB0aGUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVgKKysgICAgICAgICAgICAgbmFtZXNwYWNlLiBUaGUgZmlyc3QgdGltZSBhbnkgdXNlciBjb21wbGFpbnMgYWJvdXQgdGhpcywgd2UnbGwKKysgICAgICAgICAgICAgbmVlZCB0byBtYWtlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYIGEgY29uZmlndXJlLXRpbWUgb3B0aW9uCisrICAgICAgICAgICAgIG9yIGEgY29uZmlndXJlLmFjLXNldHRhYmxlIHZhbHVlLgorKyAgICAgICAgICAgKi8KKysgICAgICAgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywKKysJCSAgICAidW5yZWNvZ25pemVkICVzIG9wdGlvbjogJyVzJyIsCisrICAgICAgICAgICAgICAgICAgICBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCwgYXJndltpXSk7CisrICAgICAgICB9CisrICAgICAgLyogb3RoZXJ3aXNlIC4uLiAqLworKyAgICAgIG5ld2FyZ3pbKytuZXdhcmdjXSA9IHhzdHJkdXAgKGFyZ3ZbaV0pOworICAgICB9CisrICBuZXdhcmd6WysrbmV3YXJnY10gPSBOVUxMOworKworK0VPRgorKwkgICAgY2F0IDw8RU9GCisrICAvKiBUaGUgR05VIGJhbm5lciBtdXN0IGJlIHRoZSBmaXJzdCBub24tZXJyb3IgZGVidWcgbWVzc2FnZSAqLworKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgImxpYnRvb2wgd3JhcHBlciAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT05cbiIpOworK0VPRgorKwkgICAgY2F0IDw8IkVPRiIKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgYXJndlswXTogJXNcbiIsIGFyZ3ZbMF0pOworKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBwcm9ncmFtX25hbWU6ICVzXG4iLCBwcm9ncmFtX25hbWUpOworIAorLSAgbmV3YXJneiA9IFhNQUxMT0MgKGNoYXIgKiwgYXJnYyArIDEpOworICAgdG1wX3BhdGhzcGVjID0gZmluZF9leGVjdXRhYmxlIChhcmd2WzBdKTsKKyAgIGlmICh0bXBfcGF0aHNwZWMgPT0gTlVMTCkKKy0gICAgbHRfZmF0YWwgKCJDb3VsZG4ndCBmaW5kICVzIiwgYXJndlswXSk7CistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIGZvdW5kIGV4ZSAoYmVmb3JlIHN5bWxpbmsgY2hhc2UpIGF0IDogJXNcbiIsCistCQkJICB0bXBfcGF0aHNwZWMpKTsKKysgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgImNvdWxkbid0IGZpbmQgJXMiLCBhcmd2WzBdKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisrICAgICAgICAgICAgICAgICAgIihtYWluKSBmb3VuZCBleGUgKGJlZm9yZSBzeW1saW5rIGNoYXNlKSBhdDogJXNcbiIsCisrCQkgIHRtcF9wYXRoc3BlYyk7CisgCisgICBhY3R1YWxfY3dyYXBwZXJfcGF0aCA9IGNoYXNlX3N5bWxpbmtzICh0bXBfcGF0aHNwZWMpOworLSAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBmb3VuZCBleGUgKGFmdGVyIHN5bWxpbmsgY2hhc2UpIGF0IDogJXNcbiIsCistCQkJICBhY3R1YWxfY3dyYXBwZXJfcGF0aCkpOworKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKysgICAgICAgICAgICAgICAgICAiKG1haW4pIGZvdW5kIGV4ZSAoYWZ0ZXIgc3ltbGluayBjaGFzZSkgYXQ6ICVzXG4iLAorKwkJICBhY3R1YWxfY3dyYXBwZXJfcGF0aCk7CisgICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKKyAKKy0gIGFjdHVhbF9jd3JhcHBlcl9uYW1lID0geHN0cmR1cCggYmFzZV9uYW1lIChhY3R1YWxfY3dyYXBwZXJfcGF0aCkpOworKyAgYWN0dWFsX2N3cmFwcGVyX25hbWUgPSB4c3RyZHVwIChiYXNlX25hbWUgKGFjdHVhbF9jd3JhcHBlcl9wYXRoKSk7CisgICBzdHJlbmR6YXAgKGFjdHVhbF9jd3JhcHBlcl9wYXRoLCBhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisgCisgICAvKiB3cmFwcGVyIG5hbWUgdHJhbnNmb3JtcyAqLworQEAgLTM2MTMsOCArNDQ1MSw5IEBAIEVPRgorICAgdGFyZ2V0X25hbWUgPSB0bXBfcGF0aHNwZWM7CisgICB0bXBfcGF0aHNwZWMgPSAwOworIAorLSAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBsaWJ0b29sIHRhcmdldCBuYW1lOiAlc1xuIiwKKy0JCQkgIHRhcmdldF9uYW1lKSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorKwkJICAiKG1haW4pIGxpYnRvb2wgdGFyZ2V0IG5hbWU6ICVzXG4iLAorKwkJICB0YXJnZXRfbmFtZSk7CisgRU9GCisgCisgCSAgICBjYXQgPDxFT0YKK0BAIC0zNjY0LDM1ICs0NTAzLDE5IEBAIEVPRgorIAorICAgbHRfc2V0ZW52ICgiQklOX1NIIiwgInhwZzQiKTsgLyogZm9yIFRydTY0ICovCisgICBsdF9zZXRlbnYgKCJEVUFMQ0FTRSIsICIxIik7ICAvKiBmb3IgTVNLIHNoICovCistICBsdF91cGRhdGVfbGliX3BhdGggKExJQl9QQVRIX1ZBUk5BTUUsIExJQl9QQVRIX1ZBTFVFKTsKKysgIC8qIFVwZGF0ZSB0aGUgRExMIHNlYXJjaHBhdGguICBFWEVfUEFUSF9WQUxVRSAoJGRsbHNlYXJjaHBhdGgpIG11c3QKKysgICAgIGJlIHByZXBlbmRlZCBiZWZvcmUgKHRoYXQgaXMsIGFwcGVhciBhZnRlcikgTElCX1BBVEhfVkFMVUUgKCR0ZW1wX3JwYXRoKQorKyAgICAgYmVjYXVzZSBvbiBXaW5kb3dzLCBib3RoICpfVkFSTkFNRXMgYXJlIFBBVEggYnV0IHVuaW5zdGFsbGVkCisrICAgICBsaWJyYXJpZXMgbXVzdCBjb21lIGZpcnN0LiAqLworICAgbHRfdXBkYXRlX2V4ZV9wYXRoIChFWEVfUEFUSF9WQVJOQU1FLCBFWEVfUEFUSF9WQUxVRSk7CisrICBsdF91cGRhdGVfbGliX3BhdGggKExJQl9QQVRIX1ZBUk5BTUUsIExJQl9QQVRIX1ZBTFVFKTsKKyAKKy0gIG5ld2FyZ2M9MDsKKy0gIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCistICAgIHsKKy0gICAgICBpZiAoc3RybmNtcCAoYXJndltpXSwgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgsIG9wdF9wcmVmaXhfbGVuKSA9PSAwKQorLSAgICAgICAgeworLSAgICAgICAgICAvKiBob3dldmVyLCBpZiB0aGVyZSBpcyBhbiBvcHRpb24gaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCistICAgICAgICAgICAgIG5hbWVzcGFjZSwgYnV0IGl0IGlzIG5vdCBvbmUgb2YgdGhlIG9uZXMgd2Uga25vdyBhYm91dCBhbmQKKy0gICAgICAgICAgICAgaGF2ZSBhbHJlYWR5IGRlYWx0IHdpdGgsIGFib3ZlIChpbmx1ZGluZyBkdW1wLXNjcmlwdCksIHRoZW4KKy0gICAgICAgICAgICAgcmVwb3J0IGFuIGVycm9yLiBPdGhlcndpc2UsIHRhcmdldHMgbWlnaHQgYmVnaW4gdG8gYmVsaWV2ZQorLSAgICAgICAgICAgICB0aGV5IGFyZSBhbGxvd2VkIHRvIHVzZSBvcHRpb25zIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAorLSAgICAgICAgICAgICBuYW1lc3BhY2UuIFRoZSBmaXJzdCB0aW1lIGFueSB1c2VyIGNvbXBsYWlucyBhYm91dCB0aGlzLCB3ZSdsbAorLSAgICAgICAgICAgICBuZWVkIHRvIG1ha2UgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggYSBjb25maWd1cmUtdGltZSBvcHRpb24KKy0gICAgICAgICAgICAgb3IgYSBjb25maWd1cmUuYWMtc2V0dGFibGUgdmFsdWUuCistICAgICAgICAgICAqLworLSAgICAgICAgICBsdF9mYXRhbCAoIlVucmVjb2duaXplZCBvcHRpb24gaW4gJXMgbmFtZXNwYWNlOiAnJXMnIiwKKy0gICAgICAgICAgICAgICAgICAgIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4LCBhcmd2W2ldKTsKKy0gICAgICAgIH0KKy0gICAgICAvKiBvdGhlcndpc2UgLi4uICovCistICAgICAgbmV3YXJnelsrK25ld2FyZ2NdID0geHN0cmR1cCAoYXJndltpXSk7CistICAgIH0KKy0gIG5ld2FyZ3pbKytuZXdhcmdjXSA9IE5VTEw7CistCistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgICAgICgoIihtYWluKSBsdF9hcmd2X3plcm8gOiAlc1xuIiwgKGx0X2FyZ3ZfemVybyA/IGx0X2FyZ3ZfemVybyA6ICI8TlVMTD4iKSkpOworKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBsdF9hcmd2X3plcm86ICVzXG4iLAorKwkJICBub25udWxsIChsdF9hcmd2X3plcm8pKTsKKyAgIGZvciAoaSA9IDA7IGkgPCBuZXdhcmdjOyBpKyspCisgICAgIHsKKy0gICAgICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIG5ld2FyZ3pbJWRdICAgOiAlc1xuIiwgaSwgKG5ld2FyZ3pbaV0gPyBuZXdhcmd6W2ldIDogIjxOVUxMPiIpKSk7CisrICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBuZXdhcmd6WyVkXTogJXNcbiIsCisrCQkgICAgICBpLCBub25udWxsIChuZXdhcmd6W2ldKSk7CisgICAgIH0KKyAKKyBFT0YKK0BAIC0zNzA2LDcgKzQ1MjksOSBAQCBFT0YKKyAgIGlmIChydmFsID09IC0xKQorICAgICB7CisgICAgICAgLyogZmFpbGVkIHRvIHN0YXJ0IHByb2Nlc3MgKi8KKy0gICAgICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIGZhaWxlZCB0byBsYXVuY2ggdGFyZ2V0IFwiJXNcIjogZXJybm8gPSAlZFxuIiwgbHRfYXJndl96ZXJvLCBlcnJubykpOworKyAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkgICAgICAiKG1haW4pIGZhaWxlZCB0byBsYXVuY2ggdGFyZ2V0IFwiJXNcIjogJXNcbiIsCisrCQkgICAgICBsdF9hcmd2X3plcm8sIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKKyAgICAgICByZXR1cm4gMTI3OworICAgICB9CisgICByZXR1cm4gcnZhbDsKK0BAIC0zNzI4LDcgKzQ1NTMsNyBAQCB4bWFsbG9jIChzaXplX3QgbnVtKQorIHsKKyAgIHZvaWQgKnAgPSAodm9pZCAqKSBtYWxsb2MgKG51bSk7CisgICBpZiAoIXApCistICAgIGx0X2ZhdGFsICgiTWVtb3J5IGV4aGF1c3RlZCIpOworKyAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAibWVtb3J5IGV4aGF1c3RlZCIpOworIAorICAgcmV0dXJuIHA7CisgfQorQEAgLTM3NjIsOCArNDU4Nyw4IEBAIGNoZWNrX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpCisgeworICAgc3RydWN0IHN0YXQgc3Q7CisgCistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKGNoZWNrX2V4ZWN1dGFibGUpICA6ICVzXG4iLAorLQkJCSAgcGF0aCA/ICgqcGF0aCA/IHBhdGggOiAiRU1QVFkhIikgOiAiTlVMTCEiKSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKGNoZWNrX2V4ZWN1dGFibGUpOiAlc1xuIiwKKysgICAgICAgICAgICAgICAgICBub25lbXB0eSAocGF0aCkpOworICAgaWYgKCghcGF0aCkgfHwgKCEqcGF0aCkpCisgICAgIHJldHVybiAwOworIAorQEAgLTM3ODAsOCArNDYwNSw4IEBAIG1ha2VfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCkKKyAgIGludCBydmFsID0gMDsKKyAgIHN0cnVjdCBzdGF0IHN0OworIAorLSAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWtlX2V4ZWN1dGFibGUpICAgOiAlc1xuIiwKKy0JCQkgIHBhdGggPyAoKnBhdGggPyBwYXRoIDogIkVNUFRZISIpIDogIk5VTEwhIikpOworKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWtlX2V4ZWN1dGFibGUpOiAlc1xuIiwKKysgICAgICAgICAgICAgICAgICBub25lbXB0eSAocGF0aCkpOworICAgaWYgKCghcGF0aCkgfHwgKCEqcGF0aCkpCisgICAgIHJldHVybiAwOworIAorQEAgLTM4MDcsOCArNDYzMiw4IEBAIGZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqd3JhcHBlcikKKyAgIGludCB0bXBfbGVuOworICAgY2hhciAqY29uY2F0X25hbWU7CisgCistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKGZpbmRfZXhlY3V0YWJsZSkgICA6ICVzXG4iLAorLQkJCSAgd3JhcHBlciA/ICgqd3JhcHBlciA/IHdyYXBwZXIgOiAiRU1QVFkhIikgOiAiTlVMTCEiKSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKGZpbmRfZXhlY3V0YWJsZSk6ICVzXG4iLAorKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5ICh3cmFwcGVyKSk7CisgCisgICBpZiAoKHdyYXBwZXIgPT0gTlVMTCkgfHwgKCp3cmFwcGVyID09ICdcMCcpKQorICAgICByZXR1cm4gTlVMTDsKK0BAIC0zODYxLDcgKzQ2ODYsOCBAQCBmaW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKndyYXBwZXIpCisgCQl7CisgCQkgIC8qIGVtcHR5IHBhdGg6IGN1cnJlbnQgZGlyZWN0b3J5ICovCisgCQkgIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKKy0JCSAgICBsdF9mYXRhbCAoImdldGN3ZCBmYWlsZWQiKTsKKysJCSAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiZ2V0Y3dkIGZhaWxlZDogJXMiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKKyAJCSAgdG1wX2xlbiA9IHN0cmxlbiAodG1wKTsKKyAJCSAgY29uY2F0X25hbWUgPQorIAkJICAgIFhNQUxMT0MgKGNoYXIsIHRtcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOworQEAgLTM4ODYsNyArNDcxMiw4IEBAIGZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqd3JhcHBlcikKKyAgICAgfQorICAgLyogUmVsYXRpdmUgcGF0aCB8IG5vdCBmb3VuZCBpbiBwYXRoOiBwcmVwZW5kIGN3ZCAqLworICAgaWYgKGdldGN3ZCAodG1wLCBMVF9QQVRITUFYKSA9PSBOVUxMKQorLSAgICBsdF9mYXRhbCAoImdldGN3ZCBmYWlsZWQiKTsKKysgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgImdldGN3ZCBmYWlsZWQ6ICVzIiwKKysgICAgICAgICAgICAgIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKKyAgIHRtcF9sZW4gPSBzdHJsZW4gKHRtcCk7CisgICBjb25jYXRfbmFtZSA9IFhNQUxMT0MgKGNoYXIsIHRtcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOworICAgbWVtY3B5IChjb25jYXRfbmFtZSwgdG1wLCB0bXBfbGVuKTsKK0BAIC0zOTEyLDggKzQ3MzksOSBAQCBjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpCisgICBpbnQgaGFzX3N5bWxpbmtzID0gMDsKKyAgIHdoaWxlIChzdHJsZW4gKHRtcF9wYXRoc3BlYykgJiYgIWhhc19zeW1saW5rcykKKyAgICAgeworLSAgICAgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCJjaGVja2luZyBwYXRoIGNvbXBvbmVudCBmb3Igc3ltbGlua3M6ICVzXG4iLAorLQkJCSAgICAgIHRtcF9wYXRoc3BlYykpOworKyAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkgICAgICAiY2hlY2tpbmcgcGF0aCBjb21wb25lbnQgZm9yIHN5bWxpbmtzOiAlc1xuIiwKKysJCSAgICAgIHRtcF9wYXRoc3BlYyk7CisgICAgICAgaWYgKGxzdGF0ICh0bXBfcGF0aHNwZWMsICZzKSA9PSAwKQorIAl7CisgCSAgaWYgKFNfSVNMTksgKHMuc3RfbW9kZSkgIT0gMCkKK0BAIC0zOTM1LDggKzQ3NjMsOSBAQCBjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpCisgCX0KKyAgICAgICBlbHNlCisgCXsKKy0JICBjaGFyICplcnJzdHIgPSBzdHJlcnJvciAoZXJybm8pOworLQkgIGx0X2ZhdGFsICgiRXJyb3IgYWNjZXNzaW5nIGZpbGUgJXMgKCVzKSIsIHRtcF9wYXRoc3BlYywgZXJyc3RyKTsKKysJICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAorKwkJICAgICJlcnJvciBhY2Nlc3NpbmcgZmlsZSBcIiVzXCI6ICVzIiwKKysJCSAgICB0bXBfcGF0aHNwZWMsIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKKyAJfQorICAgICB9CisgICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKK0BAIC0zOTQ5LDcgKzQ3NzgsOCBAQCBjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpCisgICB0bXBfcGF0aHNwZWMgPSByZWFscGF0aCAocGF0aHNwZWMsIGJ1Zik7CisgICBpZiAodG1wX3BhdGhzcGVjID09IDApCisgICAgIHsKKy0gICAgICBsdF9mYXRhbCAoIkNvdWxkIG5vdCBmb2xsb3cgc3ltbGlua3MgZm9yICVzIiwgcGF0aHNwZWMpOworKyAgICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkiY291bGQgbm90IGZvbGxvdyBzeW1saW5rcyBmb3IgJXMiLCBwYXRoc3BlYyk7CisgICAgIH0KKyAgIHJldHVybiB4c3RyZHVwICh0bXBfcGF0aHNwZWMpOworICNlbmRpZgorQEAgLTM5NzUsMTEgKzQ4MDUsMjUgQEAgc3RyZW5kemFwIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCkKKyAgIHJldHVybiBzdHI7CisgfQorIAorK3ZvaWQKKytsdF9kZWJ1Z3ByaW50ZiAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorK3sKKysgIHZhX2xpc3QgYXJnczsKKysgIGlmIChsdF9kZWJ1ZykKKysgICAgeworKyAgICAgICh2b2lkKSBmcHJpbnRmIChzdGRlcnIsICIlczolczolZDogIiwgcHJvZ3JhbV9uYW1lLCBmaWxlLCBsaW5lKTsKKysgICAgICB2YV9zdGFydCAoYXJncywgZm10KTsKKysgICAgICAodm9pZCkgdmZwcmludGYgKHN0ZGVyciwgZm10LCBhcmdzKTsKKysgICAgICB2YV9lbmQgKGFyZ3MpOworKyAgICB9CisrfQorKworIHN0YXRpYyB2b2lkCistbHRfZXJyb3JfY29yZSAoaW50IGV4aXRfc3RhdHVzLCBjb25zdCBjaGFyICptb2RlLAorK2x0X2Vycm9yX2NvcmUgKGludCBleGl0X3N0YXR1cywgY29uc3QgY2hhciAqZmlsZSwKKysJICAgICAgIGludCBsaW5lLCBjb25zdCBjaGFyICptb2RlLAorIAkgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSwgdmFfbGlzdCBhcCkKKyB7CistICBmcHJpbnRmIChzdGRlcnIsICIlczogJXM6ICIsIHByb2dyYW1fbmFtZSwgbW9kZSk7CisrICBmcHJpbnRmIChzdGRlcnIsICIlczolczolZDogJXM6ICIsIHByb2dyYW1fbmFtZSwgZmlsZSwgbGluZSwgbW9kZSk7CisgICB2ZnByaW50ZiAoc3RkZXJyLCBtZXNzYWdlLCBhcCk7CisgICBmcHJpbnRmIChzdGRlcnIsICIuXG4iKTsKKyAKK0BAIC0zOTg4LDIwICs0ODMyLDMyIEBAIGx0X2Vycm9yX2NvcmUgKGludCBleGl0X3N0YXR1cywgY29uc3QgY2hhciAqbW9kZSwKKyB9CisgCisgdm9pZAorLWx0X2ZhdGFsIChjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCisrbHRfZmF0YWwgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCisgeworICAgdmFfbGlzdCBhcDsKKyAgIHZhX3N0YXJ0IChhcCwgbWVzc2FnZSk7CistICBsdF9lcnJvcl9jb3JlIChFWElUX0ZBSUxVUkUsICJGQVRBTCIsIG1lc3NhZ2UsIGFwKTsKKysgIGx0X2Vycm9yX2NvcmUgKEVYSVRfRkFJTFVSRSwgZmlsZSwgbGluZSwgIkZBVEFMIiwgbWVzc2FnZSwgYXApOworICAgdmFfZW5kIChhcCk7CisgfQorIAorK3N0YXRpYyBjb25zdCBjaGFyICoKKytub25udWxsIChjb25zdCBjaGFyICpzKQorK3sKKysgIHJldHVybiBzID8gcyA6ICIobnVsbCkiOworK30KKysKKytzdGF0aWMgY29uc3QgY2hhciAqCisrbm9uZW1wdHkgKGNvbnN0IGNoYXIgKnMpCisreworKyAgcmV0dXJuIChzICYmICEqcykgPyAiKGVtcHR5KSIgOiBub25udWxsIChzKTsKKyt9CisrCisgdm9pZAorIGx0X3NldGVudiAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCisgeworLSAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihsdF9zZXRlbnYpIHNldHRpbmcgJyVzJyB0byAnJXMnXG4iLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUgPyBuYW1lIDogIjxOVUxMPiIpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlID8gdmFsdWUgOiAiPE5VTEw+IikpKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkgICIobHRfc2V0ZW52KSBzZXR0aW5nICclcycgdG8gJyVzJ1xuIiwKKysgICAgICAgICAgICAgICAgICBub25udWxsIChuYW1lKSwgbm9ubnVsbCAodmFsdWUpKTsKKyAgIHsKKyAjaWZkZWYgSEFWRV9TRVRFTlYKKyAgICAgLyogYWx3YXlzIG1ha2UgYSBjb3B5LCBmb3IgY29uc2lzdGVuY3kgd2l0aCAhSEFWRV9TRVRFTlYgKi8KK0BAIC00MDQ5LDkgKzQ5MDUsOSBAQCBsdF9leHRlbmRfc3RyIChjb25zdCBjaGFyICpvcmlnX3ZhbHVlLCBjb25zdCBjaGFyICphZGQsIGludCB0b19lbmQpCisgdm9pZAorIGx0X3VwZGF0ZV9leGVfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCisgeworLSAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihsdF91cGRhdGVfZXhlX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lID8gbmFtZSA6ICI8TlVMTD4iKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSA/IHZhbHVlIDogIjxOVUxMPiIpKSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorKwkJICAiKGx0X3VwZGF0ZV9leGVfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAorKyAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOworIAorICAgaWYgKG5hbWUgJiYgKm5hbWUgJiYgdmFsdWUgJiYgKnZhbHVlKQorICAgICB7CitAQCAtNDA3MCw5ICs0OTI2LDkgQEAgbHRfdXBkYXRlX2V4ZV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKKyB2b2lkCisgbHRfdXBkYXRlX2xpYl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKKyB7CistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKGx0X3VwZGF0ZV9saWJfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUgPyBuYW1lIDogIjxOVUxMPiIpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlID8gdmFsdWUgOiAiPE5VTEw+IikpKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkgICIobHRfdXBkYXRlX2xpYl9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCisrICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7CisgCisgICBpZiAobmFtZSAmJiAqbmFtZSAmJiB2YWx1ZSAmJiAqdmFsdWUpCisgICAgIHsKK0BAIC00MjIyLDcgKzUwNzgsNyBAQCBFT0YKKyBmdW5jX3dpbjMyX2ltcG9ydF9saWJfcCAoKQorIHsKKyAgICAgJG9wdF9kZWJ1ZworLSAgICBjYXNlIGBldmFsICIkZmlsZV9tYWdpY19jbWQgXCJcJDFcIiAyPi9kZXYvbnVsbCIgfCAkU0VEIC1lIDEwcWAgaW4KKysgICAgY2FzZSBgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCJcJDFcIiAyPi9kZXYvbnVsbCB8ICRTRUQgLWUgMTBxYCBpbgorICAgICAqaW1wb3J0KikgOiA7OworICAgICAqKSBmYWxzZSA7OworICAgICBlc2FjCitAQCAtNDQwMSw5ICs1MjU3LDkgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIDs7CisgCSAgKikKKyAJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKy0JICAgICAgZGxmaWxlcz0iJGRsZmlsZXMgJGFyZyIKKysJICAgICAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRhcmciCisgCSAgICBlbHNlCistCSAgICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRhcmciCisrCSAgICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkYXJnIgorIAkgICAgZmkKKyAJICAgIHByZXY9CisgCSAgICBjb250aW51ZQorQEAgLTQ0MjcsNyArNTI4Myw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAqLSotZGFyd2luKikKKyAJICAgICAgY2FzZSAiJGRlcGxpYnMgIiBpbgorIAkJKiIgJHFhcmcubHRmcmFtZXdvcmsgIiopIDs7CistCQkqKSBkZXBsaWJzPSIkZGVwbGlicyAkcWFyZy5sdGZyYW1ld29yayIgIyB0aGlzIGlzIGZpeGVkIGxhdGVyCisrCQkqKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJHFhcmcubHRmcmFtZXdvcmsiICMgdGhpcyBpcyBmaXhlZCBsYXRlcgorIAkJICAgOzsKKyAJICAgICAgZXNhYworIAkgICAgICA7OworQEAgLTQ0NDYsNyArNTMwMiw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBtb3JlYXJncz0KKyAJICAgIGZvciBmaWwgaW4gYGNhdCAiJHNhdmVfYXJnImAKKyAJICAgIGRvCistIwkgICAgICBtb3JlYXJncz0iJG1vcmVhcmdzICRmaWwiCisrIwkgICAgICBmdW5jX2FwcGVuZCBtb3JlYXJncyAiICRmaWwiCisgCSAgICAgIGFyZz0kZmlsCisgCSAgICAgICMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgb2JqZWN0LgorIAorQEAgLTQ0NzUsNyArNTMzMSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCisgCQkgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKyAJCSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0geWVzOyB0aGVuCistCQkgICAgICBkbGZpbGVzPSIkZGxmaWxlcyAkcGljX29iamVjdCIKKysJCSAgICAgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkcGljX29iamVjdCIKKyAJCSAgICAgIHByZXY9CisgCQkgICAgICBjb250aW51ZQorIAkJICAgIGVsc2UKK0BAIC00NDg3LDcgKzUzNDMsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkJICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQorIAkJICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisgCQkgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorLQkJICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRwaWNfb2JqZWN0IgorKwkJICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkcGljX29iamVjdCIKKyAJCSAgICBwcmV2PQorIAkJICBmaQorIAorQEAgLTQ1NTcsMTIgKzU0MTMsMTIgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICBpZiB0ZXN0ICIkcHJldiIgPSBycGF0aDsgdGhlbgorIAkgICAgY2FzZSAiJHJwYXRoICIgaW4KKyAJICAgICoiICRhcmcgIiopIDs7CistCSAgICAqKSBycGF0aD0iJHJwYXRoICRhcmciIDs7CisrCSAgICAqKSBmdW5jX2FwcGVuZCBycGF0aCAiICRhcmciIDs7CisgCSAgICBlc2FjCisgCSAgZWxzZQorIAkgICAgY2FzZSAiJHhycGF0aCAiIGluCisgCSAgICAqIiAkYXJnICIqKSA7OworLQkgICAgKikgeHJwYXRoPSIkeHJwYXRoICRhcmciIDs7CisrCSAgICAqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkYXJnIiA7OworIAkgICAgZXNhYworIAkgIGZpCisgCSAgcHJldj0KK0BAIC00NTc0LDI4ICs1NDMwLDI4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgY29udGludWUKKyAJICA7OworIAl3ZWFrKQorLQkgIHdlYWtfbGlicz0iJHdlYWtfbGlicyAkYXJnIgorKwkgIGZ1bmNfYXBwZW5kIHdlYWtfbGlicyAiICRhcmciCisgCSAgcHJldj0KKyAJICBjb250aW51ZQorIAkgIDs7CisgCXhjY2xpbmtlcikKKy0JICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJHFhcmciCistCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkcWFyZyIKKysJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkcWFyZyIKKysJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRxYXJnIgorIAkgIHByZXY9CisgCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCisgCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRxYXJnIgorIAkgIGNvbnRpbnVlCisgCSAgOzsKKyAJeGNvbXBpbGVyKQorLQkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHFhcmciCisrCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkcWFyZyIKKyAJICBwcmV2PQorIAkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRxYXJnIgorIAkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkcWFyZyIKKyAJICBjb250aW51ZQorIAkgIDs7CisgCXhsaW5rZXIpCistCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRxYXJnIgorLQkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHdsJHFhcmciCisrCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJHFhcmciCisrCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkd2wkcWFyZyIKKyAJICBwcmV2PQorIAkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICR3bCRxYXJnIgorIAkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkd2wkcWFyZyIKK0BAIC00Njg2LDE1ICs1NTQyLDE2IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCTs7CisgCisgICAgICAgLUwqKQorLQlmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkYXJnIgorLQlkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorLQlpZiB0ZXN0IC16ICIkZGlyIjsgdGhlbgorKwlmdW5jX3N0cmlwbmFtZSAiLUwiICcnICIkYXJnIgorKwlpZiB0ZXN0IC16ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IjsgdGhlbgorIAkgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgorIAkgICAgZnVuY19mYXRhbF9lcnJvciAicmVxdWlyZSBubyBzcGFjZSBiZXR3ZWVuIFxgLUwnIGFuZCBcYCQxJyIKKyAJICBlbHNlCisgCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJuZWVkIHBhdGggZm9yIFxgLUwnIG9wdGlvbiIKKyAJICBmaQorIAlmaQorKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysJZGlyPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKyAJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisgCWNhc2UgJGRpciBpbgorIAlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CitAQCAtNDcwNiwxMCArNTU2MywxNiBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIDs7CisgCWVzYWMKKyAJY2FzZSAiJGRlcGxpYnMgIiBpbgorLQkqIiAtTCRkaXIgIiopIDs7CisrCSoiIC1MJGRpciAiKiB8ICoiICRhcmcgIiopCisrCSAgIyBXaWxsIG9ubHkgaGFwcGVuIGZvciBhYnNvbHV0ZSBvciBzeXNyb290IGFyZ3VtZW50cworKwkgIDs7CisgCSopCistCSAgZGVwbGlicz0iJGRlcGxpYnMgLUwkZGlyIgorLQkgIGxpYl9zZWFyY2hfcGF0aD0iJGxpYl9zZWFyY2hfcGF0aCAkZGlyIgorKwkgICMgUHJlc2VydmUgc3lzcm9vdCwgYnV0IG5ldmVyIGluY2x1ZGUgcmVsYXRpdmUgZGlyZWN0b3JpZXMKKysJICBjYXNlICRkaXIgaW4KKysJICAgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKiB8ID0qKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGFyZyIgOzsKKysJICAgICopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAtTCRkaXIiIDs7CisrCSAgZXNhYworKwkgIGZ1bmNfYXBwZW5kIGxpYl9zZWFyY2hfcGF0aCAiICRkaXIiCisgCSAgOzsKKyAJZXNhYworIAljYXNlICRob3N0IGluCitAQCAtNDcxOCwxMiArNTU4MSwxMiBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorIAkgICoiOiRkaXI6IiopIDs7CisgCSAgOjopIGRsbHNlYXJjaHBhdGg9JGRpcjs7CistCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JGRpciI7OworKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokZGlyIjs7CisgCSAgZXNhYworIAkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorIAkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OworIAkgIDo6KSBkbGxzZWFyY2hwYXRoPSR0ZXN0YmluZGlyOzsKKy0JICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokdGVzdGJpbmRpciI7OworKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokdGVzdGJpbmRpciI7OworIAkgIGVzYWMKKyAJICA7OworIAllc2FjCitAQCAtNDc0Nyw3ICs1NjEwLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIDs7CisgCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorIAkgICAgIyBSaGFwc29keSBDIGFuZCBtYXRoIGxpYnJhcmllcyBhcmUgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKKy0JICAgIGRlcGxpYnM9IiRkZXBsaWJzIFN5c3RlbS5sdGZyYW1ld29yayIKKysJICAgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiBTeXN0ZW0ubHRmcmFtZXdvcmsiCisgCSAgICBjb250aW51ZQorIAkgICAgOzsKKyAJICAqLSotc2NvMy4ydjUqIHwgKi0qLXNjbzV2NiopCitAQCAtNDc1OCw5ICs1NjIxLDYgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICMgQ29tcGlsZXIgaW5zZXJ0cyBsaWJjIGluIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aHJlYWRzIHRvIHdvcmsKKyAJICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorIAkgICAgOzsKKy0JICAqLSotbGludXgqKQorLQkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCistCSAgICA7OworIAkgIGVzYWMKKyAJZWxpZiB0ZXN0ICJYJGFyZyIgPSAiWC1sY19yIjsgdGhlbgorIAkgY2FzZSAkaG9zdCBpbgorQEAgLTQ3NzAsNyArNTYzMCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgIDs7CisgCSBlc2FjCisgCWZpCistCWRlcGxpYnM9IiRkZXBsaWJzICRhcmciCisrCWZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkYXJnIgorIAljb250aW51ZQorIAk7OworIAorQEAgLTQ3ODIsOCArNTY0Miw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgIyBUcnU2NCBVTklYIHVzZXMgLW1vZGVsIFthcmddIHRvIGRldGVybWluZSB0aGUgbGF5b3V0IG9mIEMrKworICAgICAgICMgY2xhc3NlcywgbmFtZSBtYW5nbGluZywgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZy4KKyAgICAgICAjIERhcndpbiB1c2VzIHRoZSAtYXJjaCBmbGFnIHRvIGRldGVybWluZSBvdXRwdXQgYXJjaGl0ZWN0dXJlLgorLSAgICAgIC1tb2RlbHwtYXJjaHwtaXN5c3Jvb3QpCistCWNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKKysgICAgICAtbW9kZWx8LWFyY2h8LWlzeXNyb290fC0tc3lzcm9vdCkKKysJZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgorIAlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorIAlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKyAJcHJldj14Y29tcGlsZXIKK0BAIC00NzkxLDEyICs1NjUxLDEyIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCTs7CisgCisgICAgICAgLW10fC1tdGhyZWFkc3wta3RocmVhZHwtS3RocmVhZHwtcHRocmVhZHwtcHRocmVhZHN8LS10aHJlYWQtc2FmZXwtdGhyZWFkcykKKy0JY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgorKwlmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCisgCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisgCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorIAljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorIAkgICAgKiIgJGFyZyAiKikgOzsKKy0JICAgICogKSBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRhcmciIDs7CisrCSAgICAqICkgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkYXJnIiA7OworIAllc2FjCisgCWNvbnRpbnVlCisgCTs7CitAQCAtNDg2MywxMyArNTcyMywxNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKyAJY2FzZSAkZGlyIGluCisgCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKysJPSopCisrCSAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkZGlyIgorKwkgIGRpcj0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysJICA7OworIAkqKQorIAkgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIgorIAkgIDs7CisgCWVzYWMKKyAJY2FzZSAiJHhycGF0aCAiIGluCisgCSoiICRkaXIgIiopIDs7CistCSopIHhycGF0aD0iJHhycGF0aCAkZGlyIiA7OworKwkqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkZGlyIiA7OworIAllc2FjCisgCWNvbnRpbnVlCisgCTs7CitAQCAtNDkyMiw4ICs1Nzg2LDggQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCisgCSAgSUZTPSIkc2F2ZV9pZnMiCisgICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgorLQkgIGFyZz0iJGFyZyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCistCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCSAgZnVuY19hcHBlbmQgYXJnICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorIAlkb25lCisgCUlGUz0iJHNhdmVfaWZzIgorIAlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCitAQCAtNDkzOCw5ICs1ODAyLDkgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCisgCSAgSUZTPSIkc2F2ZV9pZnMiCisgICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgorLQkgIGFyZz0iJGFyZyAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCistCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCistCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysJICBmdW5jX2FwcGVuZCBhcmcgIiAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorIAlkb25lCisgCUlGUz0iJHNhdmVfaWZzIgorIAlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCitAQCAtNDk2OCwyNCArNTgzMiwyNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAJOzsKKyAKKy0gICAgICAjIC02NCwgLW1pcHNbMC05XSBlbmFibGUgNjQtYml0IG1vZGUgb24gdGhlIFNHSSBjb21waWxlcgorLSAgICAgICMgLXJbMC05XVswLTldKiBzcGVjaWZpZXMgdGhlIHByb2Nlc3NvciBvbiB0aGUgU0dJIGNvbXBpbGVyCistICAgICAgIyAteGFyY2g9KiwgLXh0YXJnZXQ9KiBlbmFibGUgNjQtYml0IG1vZGUgb24gdGhlIFN1biBjb21waWxlcgorLSAgICAgICMgK0RBKiwgK0REKiBlbmFibGUgNjQtYml0IG1vZGUgb24gdGhlIEhQIGNvbXBpbGVyCistICAgICAgIyAtcSogcGFzcyB0aHJvdWdoIGNvbXBpbGVyIGFyZ3MgZm9yIHRoZSBJQk0gY29tcGlsZXIKKy0gICAgICAjIC1tKiwgLXRbNDVdKiwgLXR4c2NhbGUqIHBhc3MgdGhyb3VnaCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMKKy0gICAgICAjIGNvbXBpbGVyIGFyZ3MgZm9yIEdDQworLSAgICAgICMgLUYvcGF0aCBnaXZlcyBwYXRoIHRvIHVuaW5zdGFsbGVkIGZyYW1ld29ya3MsIGdjYyBvbiBkYXJ3aW4KKy0gICAgICAjIC1wLCAtcGcsIC0tY292ZXJhZ2UsIC1mcHJvZmlsZS0qIHBhc3MgdGhyb3VnaCBwcm9maWxpbmcgZmxhZyBmb3IgR0NDCistICAgICAgIyBAZmlsZSBHQ0MgcmVzcG9uc2UgZmlsZXMKKy0gICAgICAjIC10cD0qIFBvcnRsYW5kIHBnY2MgdGFyZ2V0IHByb2Nlc3NvciBzZWxlY3Rpb24KKysgICAgICAjIEZsYWdzIHRvIGJlIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZCwgd2l0aCByYXRpb25hbGU6CisrICAgICAgIyAtNjQsIC1taXBzWzAtOV0gICAgICBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBTR0kgY29tcGlsZXIKKysgICAgICAjIC1yWzAtOV1bMC05XSogICAgICAgIHNwZWNpZnkgcHJvY2Vzc29yIGZvciB0aGUgU0dJIGNvbXBpbGVyCisrICAgICAgIyAteGFyY2g9KiwgLXh0YXJnZXQ9KiBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBTdW4gY29tcGlsZXIKKysgICAgICAjICtEQSosICtERCogICAgICAgICAgIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIEhQIGNvbXBpbGVyCisrICAgICAgIyAtcSogICAgICAgICAgICAgICAgICBjb21waWxlciBhcmdzIGZvciB0aGUgSUJNIGNvbXBpbGVyCisrICAgICAgIyAtbSosIC10WzQ1XSosIC10eHNjYWxlKiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmxhZ3MgZm9yIEdDQworKyAgICAgICMgLUYvcGF0aCAgICAgICAgICAgICAgcGF0aCB0byB1bmluc3RhbGxlZCBmcmFtZXdvcmtzLCBnY2Mgb24gZGFyd2luCisrICAgICAgIyAtcCwgLXBnLCAtLWNvdmVyYWdlLCAtZnByb2ZpbGUtKiAgcHJvZmlsaW5nIGZsYWdzIGZvciBHQ0MKKysgICAgICAjIEBmaWxlICAgICAgICAgICAgICAgIEdDQyByZXNwb25zZSBmaWxlcworKyAgICAgICMgLXRwPSogICAgICAgICAgICAgICAgUG9ydGxhbmQgcGdjYyB0YXJnZXQgcHJvY2Vzc29yIHNlbGVjdGlvbgorKyAgICAgICMgLS1zeXNyb290PSogICAgICAgICAgZm9yIHN5c3Jvb3Qgc3VwcG9ydAorKyAgICAgICMgLU8qLCAtZmx0byosIC1md2hvcHIqLCAtZnVzZS1saW5rZXItcGx1Z2luIEdDQyBsaW5rLXRpbWUgb3B0aW1pemF0aW9uCisgICAgICAgLTY0fC1taXBzWzAtOV18LXJbMC05XVswLTldKnwteGFyY2g9KnwteHRhcmdldD0qfCtEQSp8K0REKnwtcSp8LW0qfCBcCistICAgICAgLXRbNDVdKnwtdHhzY2FsZSp8LXB8LXBnfC0tY292ZXJhZ2V8LWZwcm9maWxlLSp8LUYqfEAqfC10cD0qKQorKyAgICAgIC10WzQ1XSp8LXR4c2NhbGUqfC1wfC1wZ3wtLWNvdmVyYWdlfC1mcHJvZmlsZS0qfC1GKnxAKnwtdHA9KnwtLXN5c3Jvb3Q9KnwgXAorKyAgICAgIC1PKnwtZmx0byp8LWZ3aG9wcip8LWZ1c2UtbGlua2VyLXBsdWdpbikKKyAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAgICAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorLSAgICAgICAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgorKyAgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgorICAgICAgICAgY29udGludWUKKyAgICAgICAgIDs7CisgCitAQCAtNDk5Nyw3ICs1ODY0LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAKKyAgICAgICAqLiRvYmpleHQpCisgCSMgQSBzdGFuZGFyZCBvYmplY3QuCistCW9ianM9IiRvYmpzICRhcmciCisrCWZ1bmNfYXBwZW5kIG9ianMgIiAkYXJnIgorIAk7OworIAorICAgICAgICoubG8pCitAQCAtNTAyOCw3ICs1ODk1LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAKKyAJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKyAJICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHllczsgdGhlbgorLQkJZGxmaWxlcz0iJGRsZmlsZXMgJHBpY19vYmplY3QiCisrCQlmdW5jX2FwcGVuZCBkbGZpbGVzICIgJHBpY19vYmplY3QiCisgCQlwcmV2PQorIAkJY29udGludWUKKyAJICAgICAgZWxzZQorQEAgLTUwNDAsNyArNTkwNyw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQorIAkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorIAkgICAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCistCSAgICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRwaWNfb2JqZWN0IgorKwkgICAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJHBpY19vYmplY3QiCisgCSAgICAgIHByZXY9CisgCSAgICBmaQorIAorQEAgLTUwODUsMjQgKzU5NTIsMjUgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAKKyAgICAgICAqLiRsaWJleHQpCisgCSMgQW4gYXJjaGl2ZS4KKy0JZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKy0Jb2xkX2RlcGxpYnM9IiRvbGRfZGVwbGlicyAkYXJnIgorKwlmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGFyZyIKKysJZnVuY19hcHBlbmQgb2xkX2RlcGxpYnMgIiAkYXJnIgorIAljb250aW51ZQorIAk7OworIAorICAgICAgICoubGEpCisgCSMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgbGlicmFyeS4KKyAKKysJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRhcmciCisgCWlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKyAJICAjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRsb3Blbi4KKy0JICBkbGZpbGVzPSIkZGxmaWxlcyAkYXJnIgorKwkgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorIAkgIHByZXY9CisgCWVsaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorIAkgICMgVGhlIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbHByZW9wZW4uCistCSAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGFyZyIKKysJICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAJICBwcmV2PQorIAllbHNlCistCSAgZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKysJICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAJZmkKKyAJY29udGludWUKKyAJOzsKK0BAIC01MTI3LDcgKzU5OTUsNyBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAgIGZ1bmNfZmF0YWxfaGVscCAidGhlIFxgJHByZXZhcmcnIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIKKyAKKyAgICAgaWYgdGVzdCAiJGV4cG9ydF9keW5hbWljIiA9IHllcyAmJiB0ZXN0IC1uICIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIjsgdGhlbgorLSAgICAgIGV2YWwgImFyZz1cIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIiIKKysgICAgICBldmFsIGFyZz1cIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorICAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisgICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisgICAgIGZpCitAQCAtNTE0NCwxMSArNjAxMiwxMyBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICBlbHNlCisgICAgICAgc2hsaWJfc2VhcmNoX3BhdGg9CisgICAgIGZpCistICAgIGV2YWwgInN5c19saWJfc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXCIiCistICAgIGV2YWwgInN5c19saWJfZGxzZWFyY2hfcGF0aD1cIiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY1wiIgorKyAgICBldmFsIHN5c19saWJfc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXCIKKysgICAgZXZhbCBzeXNfbGliX2Rsc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWNcIgorIAorICAgICBmdW5jX2Rpcm5hbWUgIiRvdXRwdXQiICIvIiAiIgorICAgICBvdXRwdXRfb2JqZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCRvYmpkaXIiCisrICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0X29iamRpci8iCisrICAgIHRvb2xfb3V0cHV0X29iamRpcj0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisgICAgICMgQ3JlYXRlIHRoZSBvYmplY3QgZGlyZWN0b3J5LgorICAgICBmdW5jX21rZGlyX3AgIiRvdXRwdXRfb2JqZGlyIgorIAorQEAgLTUxNjksMTIgKzYwMzksMTIgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAgICAgIyBGaW5kIGFsbCBpbnRlcmRlcGVuZGVudCBkZXBsaWJzIGJ5IHNlYXJjaGluZyBmb3IgbGlicmFyaWVzCisgICAgICMgdGhhdCBhcmUgbGlua2VkIG1vcmUgdGhhbiBvbmNlIChlLmcuIC1sYSAtbGIgLWxhKQorICAgICBmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbworLSAgICAgIGlmICRvcHRfZHVwbGljYXRlX2RlcHMgOyB0aGVuCisrICAgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KKyAJY2FzZSAiJGxpYnMgIiBpbgorLQkqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisrCSoiICRkZXBsaWIgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRlcGxpYiIgOzsKKyAJZXNhYworICAgICAgIGZpCistICAgICAgbGlicz0iJGxpYnMgJGRlcGxpYiIKKysgICAgICBmdW5jX2FwcGVuZCBsaWJzICIgJGRlcGxpYiIKKyAgICAgZG9uZQorIAorICAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCitAQCAtNTE4Nyw5ICs2MDU3LDkgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAgICAgICBpZiAkb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwczsgdGhlbgorIAlmb3IgcHJlX3Bvc3RfZGVwIGluICRwcmVkZXBzICRwb3N0ZGVwczsgZG8KKyAJICBjYXNlICIkcHJlX3Bvc3RfZGVwcyAiIGluCistCSAgKiIgJHByZV9wb3N0X2RlcCAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkcHJlX3Bvc3RfZGVwcyIgOzsKKysJICAqIiAkcHJlX3Bvc3RfZGVwICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRwcmVfcG9zdF9kZXBzIiA7OworIAkgIGVzYWMKKy0JICBwcmVfcG9zdF9kZXBzPSIkcHJlX3Bvc3RfZGVwcyAkcHJlX3Bvc3RfZGVwIgorKwkgIGZ1bmNfYXBwZW5kIHByZV9wb3N0X2RlcHMgIiAkcHJlX3Bvc3RfZGVwIgorIAlkb25lCisgICAgICAgZmkKKyAgICAgICBwcmVfcG9zdF9kZXBzPQorQEAgLTUyNTYsOCArNjEyNiw5IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCWZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisgCSAgIyBJZ25vcmUgbm9uLWxpYnRvb2wtbGlicworIAkgIGRlcGVuZGVuY3lfbGlicz0KKysJICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGxpYiIKKyAJICBjYXNlICRsaWIgaW4KKy0JICAqLmxhKQlmdW5jX3NvdXJjZSAiJGxpYiIgOzsKKysJICAqLmxhKQlmdW5jX3NvdXJjZSAiJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIgOzsKKyAJICBlc2FjCisgCisgCSAgIyBDb2xsZWN0IHByZW9wZW5lZCBsaWJ0b29sIGRlcGxpYnMsIGV4Y2VwdCBhbnkgdGhpcyBsaWJyYXJ5CitAQCAtNTI2Nyw3ICs2MTM4LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAgICAgICAgICAgICBkZXBsaWJfYmFzZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKyAJICAgIGNhc2UgIiAkd2Vha19saWJzICIgaW4KKyAJICAgICoiICRkZXBsaWJfYmFzZSAiKikgOzsKKy0JICAgICopIGRlcGxpYnM9IiRkZXBsaWJzICRkZXBsaWIiIDs7CisrCSAgICAqKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGRlcGxpYiIgOzsKKyAJICAgIGVzYWMKKyAJICBkb25lCisgCWRvbmUKK0BAIC01Mjg4LDExICs2MTU5LDExIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKyAJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisgCSAgZWxzZQorLQkgICAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkZGVwbGliIgorKwkgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkZGVwbGliIgorIAkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiA7IHRoZW4KKyAJCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisgCQkgICAgKiIgJGRlcGxpYiAiKikgOzsKKy0JCSAgICAqICkgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkZGVwbGliIiA7OworKwkJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRkZXBsaWIiIDs7CisgCQllc2FjCisgCSAgICBmaQorIAkgIGZpCitAQCAtNTM3Nyw3ICs2MjQ4LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgOyB0aGVuCisgCQljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorIAkJICAgICoiICRkZXBsaWIgIiopIDs7CistCQkgICAgKiApIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGRlcGxpYiIgOzsKKysJCSAgICAqICkgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkZGVwbGliIiA7OworIAkJZXNhYworIAkgICAgZmkKKyAJICBmaQorQEAgLTUzOTAsNyArNjI2MSw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICB0ZXN0ICIkcGFzcyIgPSBjb252ICYmIGNvbnRpbnVlCisgCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKyAJICAgIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCistCSAgICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAJICAgIDs7CisgCSAgcHJvZykKKyAJICAgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KK0BAIC01NDA0LDcgKzYyNzYsOCBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorIAkgICAgZmkKKyAJICAgIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCistCSAgICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAJICAgIDs7CisgCSAgKikKKyAJICAgIGZ1bmNfd2FybmluZyAiXGAtTCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIKK0BAIC01NDE1LDE3ICs2Mjg4LDIxIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCS1SKikKKyAJICBpZiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCisgCSAgICBmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkZGVwbGliIgorLQkgICAgZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkgICAgZGlyPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKyAJICAgICMgTWFrZSBzdXJlIHRoZSB4cnBhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCisgCSAgICBjYXNlICIkeHJwYXRoICIgaW4KKyAJICAgICoiICRkaXIgIiopIDs7CistCSAgICAqKSB4cnBhdGg9IiR4cnBhdGggJGRpciIgOzsKKysJICAgICopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICRkaXIiIDs7CisgCSAgICBlc2FjCisgCSAgZmkKKyAJICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorIAkgIGNvbnRpbnVlCisgCSAgOzsKKy0JKi5sYSkgbGliPSIkZGVwbGliIiA7OworKwkqLmxhKQorKwkgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIgorKwkgIGxpYj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisrCSAgOzsKKyAJKi4kbGliZXh0KQorIAkgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KKyAJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCitAQCAtNTQ4OCwxMSArNjM2NSwxMSBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuIHx8IHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbm87IHRoZW4KKyAJICAgICAgIyBJZiB0aGVyZSBpcyBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nIHN0YXRpY2FsbHksCisgCSAgICAgICMgd2UgbmVlZCB0byBwcmVsb2FkLgorLQkgICAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGVwbGliIgorKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRlcGxpYiIKKyAJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisgCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisgCSAgICBlbHNlCistCSAgICAgIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRkZXBsaWIiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkZGVwbGliIgorIAkgICAgZmkKKyAJICBmaQorIAkgIGNvbnRpbnVlCitAQCAtNTUzOCw3ICs2NDE1LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICBmb3IgdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyBpbiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZ3M7IGRvCisgCSAgICBjYXNlICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKyAJICAgICAgKiIgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWcgIiopIDs7CistCSAgICAgICopIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWciOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyI7OworIAkgICAgZXNhYworIAkgIGRvbmUKKyAJZmkKK0BAIC01NTQ2LDggKzY0MjMsOCBAQCBmdW5jX21vZGVfbGluayAoKQorIAlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIiB8fAorIAkgICB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csc2NhbiIgfHwKKyAJICAgeyB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IH07IHRoZW4KKy0JICB0ZXN0IC1uICIkZGxvcGVuIiAmJiBkbGZpbGVzPSIkZGxmaWxlcyAkZGxvcGVuIgorLQkgIHRlc3QgLW4gIiRkbHByZW9wZW4iICYmIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRkbHByZW9wZW4iCisrCSAgdGVzdCAtbiAiJGRsb3BlbiIgJiYgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRkbG9wZW4iCisrCSAgdGVzdCAtbiAiJGRscHJlb3BlbiIgJiYgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRkbHByZW9wZW4iCisgCWZpCisgCisgCWlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KK0BAIC01NTU4LDIwICs2NDM1LDIwIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRsaWInIgorIAkgICAgZmkKKyAJICAgICMgSXQgaXMgYSBsaWJ0b29sIGNvbnZlbmllbmNlIGxpYnJhcnksIHNvIGFkZCBpbiBpdHMgb2JqZWN0cy4KKy0JICAgIGNvbnZlbmllbmNlPSIkY29udmVuaWVuY2UgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorLQkgICAgb2xkX2NvbnZlbmllbmNlPSIkb2xkX2NvbnZlbmllbmNlICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKKysJICAgIGZ1bmNfYXBwZW5kIGNvbnZlbmllbmNlICIgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorKwkgICAgZnVuY19hcHBlbmQgb2xkX2NvbnZlbmllbmNlICIgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorIAkgIGVsaWYgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliOyB0aGVuCisgCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIGNvbnZlbmllbmNlIGxpYnJhcnkiCisgCSAgZmkKKyAJICB0bXBfbGlicz0KKyAJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisgCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorLQkgICAgaWYgJG9wdF9kdXBsaWNhdGVfZGVwcyA7IHRoZW4KKysJICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCisgCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCistCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKysJICAgICAgKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OworIAkgICAgICBlc2FjCisgCSAgICBmaQorLQkgICAgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIgorKwkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIgorIAkgIGRvbmUKKyAJICBjb250aW51ZQorIAlmaSAjICRwYXNzID0gY29udgorQEAgLTU1NzksOSArNjQ1NiwxNSBAQCBmdW5jX21vZGVfbGluayAoKQorIAorIAkjIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSB3ZSBsaW5rIGFnYWluc3QuCisgCWxpbmtsaWI9CistCWZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KKy0JICBsaW5rbGliPSIkbCIKKy0JZG9uZQorKwlpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmCisrCSAgIHsgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicyIgPSB5ZXMgfHwKKysJICAgICB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzLCRpbnN0YWxsZWQiID0gImJ1aWx0LG5vIjsgfTsgdGhlbgorKwkgIGxpbmtsaWI9JG9sZF9saWJyYXJ5CisrCWVsc2UKKysJICBmb3IgbCBpbiAkb2xkX2xpYnJhcnkgJGxpYnJhcnlfbmFtZXM7IGRvCisrCSAgICBsaW5rbGliPSIkbCIKKysJICBkb25lCisrCWZpCisgCWlmIHRlc3QgLXogIiRsaW5rbGliIjsgdGhlbgorIAkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRsaWInIgorIAlmaQorQEAgLTU1OTgsOSArNjQ4MSw5IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAjIHN0YXRpY2FsbHksIHdlIG5lZWQgdG8gcHJlbG9hZC4gIFdlIGFsc28gbmVlZCB0byBwcmVsb2FkIGFueQorIAkgICAgIyBkZXBlbmRlbnQgbGlicmFyaWVzIHNvIGxpYmx0ZGwncyBkZXBsaWIgcHJlbG9hZGVyIGRvZXNuJ3QKKyAJICAgICMgYm9tYiBvdXQgaW4gdGhlIGxvYWQgZGVwbGlicyBwaGFzZS4KKy0JICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRsaWIgJGRlcGVuZGVuY3lfbGlicyIKKysJICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkbGliICRkZXBlbmRlbmN5X2xpYnMiCisgCSAgZWxzZQorLQkgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGxpYiIKKysJICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkbGliIgorIAkgIGZpCisgCSAgY29udGludWUKKyAJZmkgIyAkcGFzcyA9IGRsb3BlbgorQEAgLTU2MjIsMTQgKzY1MDUsMTQgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAKKyAJIyBGaW5kIHRoZSByZWxldmFudCBvYmplY3QgZGlyZWN0b3J5IGFuZCBsaWJyYXJ5IG5hbWUuCisgCWlmIHRlc3QgIlgkaW5zdGFsbGVkIiA9IFh5ZXM7IHRoZW4KKy0JICBpZiB0ZXN0ICEgLWYgIiRsaWJkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCisrCSAgaWYgdGVzdCAhIC1mICIkbHRfc3lzcm9vdCRsaWJkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCisgCSAgICBmdW5jX3dhcm5pbmcgImxpYnJhcnkgXGAkbGliJyB3YXMgbW92ZWQuIgorIAkgICAgZGlyPSIkbGFkaXIiCisgCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisgCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisgCSAgZWxzZQorLQkgICAgZGlyPSIkbGliZGlyIgorLQkgICAgYWJzZGlyPSIkbGliZGlyIgorKwkgICAgZGlyPSIkbHRfc3lzcm9vdCRsaWJkaXIiCisrCSAgICBhYnNkaXI9IiRsdF9zeXNyb290JGxpYmRpciIKKyAJICBmaQorIAkgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljIiA9IFh5ZXMgJiYgYXZvaWR0ZW1wcnBhdGg9eWVzCisgCWVsc2UKK0BAIC01NjM3LDEyICs2NTIwLDEyIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBkaXI9IiRsYWRpciIKKyAJICAgIGFic2Rpcj0iJGFic19sYWRpciIKKyAJICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKKy0JICAgIG5vdGluc3RfcGF0aD0iJG5vdGluc3RfcGF0aCAkYWJzX2xhZGlyIgorKwkgICAgZnVuY19hcHBlbmQgbm90aW5zdF9wYXRoICIgJGFic19sYWRpciIKKyAJICBlbHNlCisgCSAgICBkaXI9IiRsYWRpci8kb2JqZGlyIgorIAkgICAgYWJzZGlyPSIkYWJzX2xhZGlyLyRvYmpkaXIiCisgCSAgICAjIFJlbW92ZSB0aGlzIHNlYXJjaCBwYXRoIGxhdGVyCistCSAgICBub3RpbnN0X3BhdGg9IiRub3RpbnN0X3BhdGggJGFic19sYWRpciIKKysJICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfcGF0aCAiICRhYnNfbGFkaXIiCisgCSAgZmkKKyAJZmkgIyAkaW5zdGFsbGVkID0geWVzCisgCWZ1bmNfc3RyaXBuYW1lICdsaWInICcubGEnICIkbGFuYW1lIgorQEAgLTU2NTMsMjAgKzY1MzYsNDYgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICBpZiB0ZXN0IC16ICIkbGliZGlyIiAmJiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorIAkgICAgZnVuY19mYXRhbF9lcnJvciAib25seSBsaWJyYXJpZXMgbWF5IC1kbHByZW9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiBcYCRsaWInIgorIAkgIGZpCistCSAgIyBQcmVmZXIgdXNpbmcgYSBzdGF0aWMgbGlicmFyeSAoc28gdGhhdCBubyBzaWxseSBfRFlOQU1JQyBzeW1ib2xzCistCSAgIyBhcmUgcmVxdWlyZWQgdG8gbGluaykuCistCSAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorLQkgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRpci8kb2xkX2xpYnJhcnkiCistCSAgICAjIEtlZXAgYSBsaXN0IG9mIHByZW9wZW5lZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMgdG8gY2hlY2sKKy0JICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgorLQkgICAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorLQkJZGxwcmVjb252ZW5pZW5jZWxpYnM9IiRkbHByZWNvbnZlbmllbmNlbGlicyAkZGlyLyRvbGRfbGlicmFyeSIKKy0JICAjIE90aGVyd2lzZSwgdXNlIHRoZSBkbG5hbWUsIHNvIHRoYXQgbHRfZGxvcGVuIGZpbmRzIGl0LgorLQkgIGVsaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKy0JICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkaXIvJGRsbmFtZSIKKy0JICBlbHNlCistCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRsaW5rbGliIgorLQkgIGZpCisrCSAgY2FzZSAiJGhvc3QiIGluCisrCSAgICAjIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHBsYXRmb3JtcyB3aXRoIFBFLURMTHMuCisrCSAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKysJICAgICAgIyBMaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGxpbmsgYWdhaW5zdCBzaGFyZWQgbGlicmFyeSBpZiBib3RoCisrCSAgICAgICMgc3RhdGljIGFuZCBzaGFyZWQgYXJlIHByZXNlbnQuICBUaGVyZWZvcmUsIGVuc3VyZSB3ZSBleHRyYWN0CisrCSAgICAgICMgc3ltYm9scyBmcm9tIHRoZSBpbXBvcnQgbGlicmFyeSBpZiBhIHNoYXJlZCBsaWJyYXJ5IGlzIHByZXNlbnQKKysJICAgICAgIyAob3RoZXJ3aXNlLCB0aGUgZGxvcGVuIG1vZHVsZSBuYW1lIHdpbGwgYmUgaW5jb3JyZWN0KS4gIFdlIGRvCisrCSAgICAgICMgdGhpcyBieSBwdXR0aW5nIHRoZSBpbXBvcnQgbGlicmFyeSBuYW1lIGludG8gJG5ld2RscHJlZmlsZXMuCisrCSAgICAgICMgV2UgcmVjb3ZlciB0aGUgZGxvcGVuIG1vZHVsZSBuYW1lIGJ5ICdzYXZpbmcnIHRoZSBsYSBmaWxlCisrCSAgICAgICMgbmFtZSBpbiBhIHNwZWNpYWwgcHVycG9zZSB2YXJpYWJsZSwgYW5kIChsYXRlcikgZXh0cmFjdGluZyB0aGUKKysJICAgICAgIyBkbG5hbWUgZnJvbSB0aGUgbGEgZmlsZS4KKysJICAgICAgaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKysJICAgICAgICBmdW5jX3RyX3NoICIkZGlyLyRsaW5rbGliIgorKwkgICAgICAgIGV2YWwgImxpYmZpbGVfJGZ1bmNfdHJfc2hfcmVzdWx0PVwkYWJzX2xhZGlyL1wkbGFuYW1lIgorKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRsaW5rbGliIgorKwkgICAgICBlbHNlCisrCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJG9sZF9saWJyYXJ5IgorKwkgICAgICAgICMgS2VlcCBhIGxpc3Qgb2YgcHJlb3BlbmVkIGNvbnZlbmllbmNlIGxpYnJhcmllcyB0byBjaGVjaworKwkgICAgICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgorKwkgICAgICAgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKysJICAgICAgICAgIGZ1bmNfYXBwZW5kIGRscHJlY29udmVuaWVuY2VsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCisrCSAgICAgIGZpCisrCSAgICA7OworKwkgICAgKiApCisrCSAgICAgICMgUHJlZmVyIHVzaW5nIGEgc3RhdGljIGxpYnJhcnkgKHNvIHRoYXQgbm8gc2lsbHkgX0RZTkFNSUMgc3ltYm9scworKwkgICAgICAjIGFyZSByZXF1aXJlZCB0byBsaW5rKS4KKysJICAgICAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKysJICAgICAgICAjIEtlZXAgYSBsaXN0IG9mIHByZW9wZW5lZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMgdG8gY2hlY2sKKysJICAgICAgICAjIHRoYXQgdGhleSBhcmUgYmVpbmcgdXNlZCBjb3JyZWN0bHkgaW4gdGhlIGxpbmsgcGFzcy4KKysJICAgICAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisrCSAgICAgICAgICBmdW5jX2FwcGVuZCBkbHByZWNvbnZlbmllbmNlbGlicyAiICRkaXIvJG9sZF9saWJyYXJ5IgorKwkgICAgICAjIE90aGVyd2lzZSwgdXNlIHRoZSBkbG5hbWUsIHNvIHRoYXQgbHRfZGxvcGVuIGZpbmRzIGl0LgorKwkgICAgICBlbGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCisrCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGRsbmFtZSIKKysJICAgICAgZWxzZQorKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRsaW5rbGliIgorKwkgICAgICBmaQorKwkgICAgOzsKKysJICBlc2FjCisgCWZpICMgJHBhc3MgPSBkbHByZW9wZW4KKyAKKyAJaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KK0BAIC01Njg0LDcgKzY1OTMsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAorIAorIAlpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyAmJiB0ZXN0ICIkcGFzcyIgIT0gbGluazsgdGhlbgorLQkgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGFkaXIiCisrCSAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGxhZGlyIgorIAkgIGRlcGxpYnM9IiRsaWIgJGRlcGxpYnMiCisgCisgCSAgbGlua2FsbGRlcGxpYnM9bm8KK0BAIC01Njk3LDcgKzY2MDYsOCBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKyAJICAgIGNhc2UgJGRlcGxpYiBpbgorIAkgICAgLUwqKSBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorLQkgICAgICAgICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysJICAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrCSAgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisgCQkgOzsKKyAJICAgIGVzYWMKKyAJICAgICMgTmVlZCB0byBsaW5rIGFnYWluc3QgYWxsIGRlcGVuZGVuY3lfbGlicz8KK0BAIC01NzA4LDEyICs2NjE4LDEyIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAgICMgb3IvYW5kIGxpbmsgYWdhaW5zdCBzdGF0aWMgbGlicmFyaWVzCisgCSAgICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorIAkgICAgZmkKKy0JICAgIGlmICRvcHRfZHVwbGljYXRlX2RlcHMgOyB0aGVuCisrCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgorIAkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorLQkgICAgICAqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisrCSAgICAgICoiICRkZXBsaWIgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRlcGxpYiIgOzsKKyAJICAgICAgZXNhYworIAkgICAgZmkKKy0JICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKKysJICAgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIKKyAJICBkb25lICMgZm9yIGRlcGxpYgorIAkgIGNvbnRpbnVlCisgCWZpICMgJGxpbmttb2RlID0gcHJvZy4uLgorQEAgLTU3MjgsNyArNjYzOCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAgICMgTWFrZSBzdXJlIHRoZSBycGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KKyAJICAgICAgY2FzZSAiJHRlbXBfcnBhdGg6IiBpbgorIAkgICAgICAqIiRhYnNkaXI6IiopIDs7CistCSAgICAgICopIHRlbXBfcnBhdGg9IiR0ZW1wX3JwYXRoJGFic2RpcjoiIDs7CisrCSAgICAgICopIGZ1bmNfYXBwZW5kIHRlbXBfcnBhdGggIiRhYnNkaXI6IiA7OworIAkgICAgICBlc2FjCisgCSAgICBmaQorIAorQEAgLTU3NDAsNyArNjY1MCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAqKQorIAkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCisgCSAgICAgICoiICRhYnNkaXIgIiopIDs7CistCSAgICAgICopIGNvbXBpbGVfcnBhdGg9IiRjb21waWxlX3JwYXRoICRhYnNkaXIiCisrCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OworIAkgICAgICBlc2FjCisgCSAgICAgIDs7CisgCSAgICBlc2FjCitAQCAtNTc0OSw3ICs2NjU5LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICopCisgCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisgCSAgICAgICoiICRsaWJkaXIgIiopIDs7CistCSAgICAgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIKKysJICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OworIAkgICAgICBlc2FjCisgCSAgICAgIDs7CisgCSAgICBlc2FjCitAQCAtNTc3NCwxMiArNjY4NCwxMiBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIGNhc2UgJGhvc3QgaW4KKyAJICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqKQorIAkgICAgICAjIE5vIHBvaW50IGluIHJlbGlua2luZyBETExzIGJlY2F1c2UgcGF0aHMgYXJlIG5vdCBlbmNvZGVkCistCSAgICAgIG5vdGluc3RfZGVwbGlicz0iJG5vdGluc3RfZGVwbGlicyAkbGliIgorKwkgICAgICBmdW5jX2FwcGVuZCBub3RpbnN0X2RlcGxpYnMgIiAkbGliIgorIAkgICAgICBuZWVkX3JlbGluaz1ubworIAkgICAgOzsKKyAJICAqKQorIAkgICAgaWYgdGVzdCAiJGluc3RhbGxlZCIgPSBubzsgdGhlbgorLQkgICAgICBub3RpbnN0X2RlcGxpYnM9IiRub3RpbnN0X2RlcGxpYnMgJGxpYiIKKysJICAgICAgZnVuY19hcHBlbmQgbm90aW5zdF9kZXBsaWJzICIgJGxpYiIKKyAJICAgICAgbmVlZF9yZWxpbms9eWVzCisgCSAgICBmaQorIAkgICAgOzsKK0BAIC01ODE0LDcgKzY3MjQsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgKikKKyAJICAgICAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgorIAkgICAgICAqIiAkYWJzZGlyICIqKSA7OworLQkgICAgICAqKSBjb21waWxlX3JwYXRoPSIkY29tcGlsZV9ycGF0aCAkYWJzZGlyIgorKwkgICAgICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3JwYXRoICIgJGFic2RpciIgOzsKKyAJICAgICAgZXNhYworIAkgICAgICA7OworIAkgICAgZXNhYworQEAgLTU4MjMsNyArNjczMyw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAqKQorIAkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorIAkgICAgICAqIiAkbGliZGlyICIqKSA7OworLQkgICAgICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiCisrCSAgICAgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKKyAJICAgICAgZXNhYworIAkgICAgICA7OworIAkgICAgZXNhYworQEAgLTU4MzUsNyArNjc0NSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBzaGlmdAorIAkgICAgcmVhbG5hbWU9IiQxIgorIAkgICAgc2hpZnQKKy0JICAgIGV2YWwgImxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIiCisrCSAgICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKyAJICAgICMgdXNlIGRsbmFtZSBpZiB3ZSBnb3QgaXQuIGl0J3MgcGVyZmVjdGx5IGdvb2QsIG5vPworIAkgICAgaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKyAJICAgICAgc29uYW1lPSIkZGxuYW1lIgorQEAgLTU4NDgsNyArNjc1OCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCQl2ZXJzdWZmaXg9Ii0kbWFqb3IiCisgCQk7OworIAkgICAgICBlc2FjCistCSAgICAgIGV2YWwgInNvbmFtZT1cIiRzb25hbWVfc3BlY1wiIgorKwkgICAgICBldmFsIHNvbmFtZT1cIiRzb25hbWVfc3BlY1wiCisgCSAgICBlbHNlCisgCSAgICAgIHNvbmFtZT0iJHJlYWxuYW1lIgorIAkgICAgZmkKK0BAIC01ODc3LDcgKzY3ODcsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgbGlua2xpYj0kbmV3bGliCisgCSAgZmkgIyB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiCisgCistCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG1vZGUiICE9IHJlbGluazsgdGhlbgorKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisgCSAgICBhZGRfc2hsaWJwYXRoPQorIAkgICAgYWRkX2Rpcj0KKyAJICAgIGFkZD0KK0BAIC01OTMzLDcgKzY4NDMsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkJaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKyAJCSAgY2FzZSAkbGliZGlyIGluCisgCQkgICAgW1xcL10qKQorLQkJICAgICAgYWRkX2Rpcj0iJGFkZF9kaXIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKysJCSAgICAgIGZ1bmNfYXBwZW5kIGFkZF9kaXIgIiAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorIAkJICAgICAgOzsKKyAJCSAgZXNhYworIAkJZmkKK0BAIC01OTU1LDcgKzY4NjUsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgaWYgdGVzdCAtbiAiJGFkZF9zaGxpYnBhdGgiOyB0aGVuCisgCSAgICAgIGNhc2UgOiRjb21waWxlX3NobGlicGF0aDogaW4KKyAJICAgICAgKiI6JGFkZF9zaGxpYnBhdGg6IiopIDs7CistCSAgICAgICopIGNvbXBpbGVfc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkYWRkX3NobGlicGF0aDoiIDs7CisrCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfc2hsaWJwYXRoICIkYWRkX3NobGlicGF0aDoiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIGZpCisgCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorQEAgLTU5NjksMTMgKzY4NzksMTMgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJCSB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KKyAJCWNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCisgCQkqIjokbGliZGlyOiIqKSA7OworLQkJKikgZmluYWxpemVfc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoJGxpYmRpcjoiIDs7CisrCQkqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9zaGxpYnBhdGggIiRsaWJkaXI6IiA7OworIAkJZXNhYworIAkgICAgICBmaQorIAkgICAgZmkKKyAJICBmaQorIAorLQkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKyAJICAgIGFkZF9zaGxpYnBhdGg9CisgCSAgICBhZGRfZGlyPQorIAkgICAgYWRkPQorQEAgLTU5ODksNyArNjg5OSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgorIAkgICAgICBjYXNlIDokZmluYWxpemVfc2hsaWJwYXRoOiBpbgorIAkgICAgICAqIjokbGliZGlyOiIqKSA7OworLQkgICAgICAqKSBmaW5hbGl6ZV9zaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgkbGliZGlyOiIgOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfc2hsaWJwYXRoICIkbGliZGlyOiIgOzsKKyAJICAgICAgZXNhYworIAkgICAgICBhZGQ9Ii1sJG5hbWUiCisgCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9hdXRvbWF0aWMiID0geWVzOyB0aGVuCitAQCAtNjAwMSwxMiArNjkxMSwxMiBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgICBmaQorIAkgICAgZWxzZQorIAkgICAgICAjIFdlIGNhbm5vdCBzZWVtIHRvIGhhcmRjb2RlIGl0LCBndWVzcyB3ZSdsbCBmYWtlIGl0LgorLQkgICAgICBhZGRfZGlyPSItTCRsaWJkaXIiCisrCSAgICAgIGFkZF9kaXI9Ii1MJGx0X3N5c3Jvb3QkbGliZGlyIgorIAkgICAgICAjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCisgCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisgCQljYXNlICRsaWJkaXIgaW4KKyAJCSAgW1xcL10qKQorLQkJICAgIGFkZF9kaXI9IiRhZGRfZGlyIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisrCQkgICAgZnVuY19hcHBlbmQgYWRkX2RpciAiIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisgCQkgICAgOzsKKyAJCWVzYWMKKyAJICAgICAgZmkKK0BAIC02MDgzLDI3ICs2OTkzLDMzIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAgICAgICAgdGVtcF94cnBhdGg9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorIAkJICAgY2FzZSAiICR4cnBhdGggIiBpbgorIAkJICAgKiIgJHRlbXBfeHJwYXRoICIqKSA7OworLQkJICAgKikgeHJwYXRoPSIkeHJwYXRoICR0ZW1wX3hycGF0aCI7OworKwkJICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJHRlbXBfeHJwYXRoIjs7CisgCQkgICBlc2FjOzsKKy0JICAgICAgKikgdGVtcF9kZXBsaWJzPSIkdGVtcF9kZXBsaWJzICRsaWJkaXIiOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgdGVtcF9kZXBsaWJzICIgJGxpYmRpciI7OworIAkgICAgICBlc2FjCisgCSAgICBkb25lCisgCSAgICBkZXBlbmRlbmN5X2xpYnM9IiR0ZW1wX2RlcGxpYnMiCisgCSAgZmkKKyAKKy0JICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGFic2RpciIKKysJICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkYWJzZGlyIgorIAkgICMgTGluayBhZ2FpbnN0IHRoaXMgbGlicmFyeQorIAkgIHRlc3QgIiRsaW5rX3N0YXRpYyIgPSBubyAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRhYnNfbGFkaXIvJGxhbmFtZSAkbmV3ZGVwZW5kZW5jeV9saWJzIgorIAkgICMgLi4uIGFuZCBpdHMgZGVwZW5kZW5jeV9saWJzCisgCSAgdG1wX2xpYnM9CisgCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworIAkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCistCSAgICBpZiAkb3B0X2R1cGxpY2F0ZV9kZXBzIDsgdGhlbgorKwkgICAgY2FzZSAkZGVwbGliIGluCisrICAgICAgICAgICAgICAtTCopIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisrICAgICAgICAgICAgICAgICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0Ijs7CisrICAgICAgICAgICAgICAqKSBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIgOzsKKysgICAgICAgICAgICBlc2FjCisrCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgorIAkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorLQkgICAgICAqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisrCSAgICAgICoiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQgIiopCisrICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIgOzsKKyAJICAgICAgZXNhYworIAkgICAgZmkKKy0JICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKKysJICAgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAJICBkb25lCisgCisgCSAgaWYgdGVzdCAiJGxpbmtfYWxsX2RlcGxpYnMiICE9IG5vOyB0aGVuCitAQCAtNjExMyw4ICs3MDI5LDEwIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAgIGNhc2UgJGRlcGxpYiBpbgorIAkgICAgICAtTCopIHBhdGg9IiRkZXBsaWIiIDs7CisgCSAgICAgICoubGEpCisrCSAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCisrCSAgICAgICAgZGVwbGliPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKyAJICAgICAgICBmdW5jX2Rpcm5hbWUgIiRkZXBsaWIiICIiICIuIgorLQkJZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKysJCWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorIAkJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisgCQljYXNlICRkaXIgaW4KKyAJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzZGlyPSIkZGlyIiA7OworQEAgLTYxMzAsNyArNzA0OCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCQljYXNlICRob3N0IGluCisgCQkqLSotZGFyd2luKikKKyAJCSAgZGVwZGVwbD0KKy0JCSAgZGVwbGlicmFyeV9uYW1lcz1gJHtTRUR9IC1uIC1lICdzL15saWJyYXJ5X25hbWVzPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKysJCSAgZXZhbCBkZXBsaWJyYXJ5X25hbWVzPWAke1NFRH0gLW4gLWUgJ3MvXmxpYnJhcnlfbmFtZXM9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorIAkJICBpZiB0ZXN0IC1uICIkZGVwbGlicmFyeV9uYW1lcyIgOyB0aGVuCisgCQkgICAgZm9yIHRtcCBpbiAkZGVwbGlicmFyeV9uYW1lcyA7IGRvCisgCQkgICAgICBkZXBkZXBsPSR0bXAKK0BAIC02MTQxLDggKzcwNTksOCBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkZGFyd2luX2luc3RhbGxfbmFtZSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCR7T1RPT0w2NH0gLUwgJGRlcGRlcGwgIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAorICAgICAgICAgICAgICAgICAgICAgICBmaQorLQkJICAgICAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAke3dsfS1keWxpYl9maWxlICR7d2x9JHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgorLQkJICAgICAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzIC1keWxpYl9maWxlICR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKKysJCSAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHt3bH0tZHlsaWJfZmlsZSAke3dsfSR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKKysJCSAgICAgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiIC1keWxpYl9maWxlICR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKKyAJCSAgICAgIHBhdGg9CisgCQkgICAgZmkKKyAJCSAgZmkKK0BAIC02MTUyLDcgKzcwNzAsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkJICA7OworIAkJZXNhYworIAkJZWxzZQorLQkJICBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKysJCSAgZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKyAJCSAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorIAkJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorIAkJICB0ZXN0ICIkYWJzZGlyIiAhPSAiJGxpYmRpciIgJiYgXAorQEAgLTYxOTIsNyArNzExMCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgZm9yIGRpciBpbiAkbmV3bGliX3NlYXJjaF9wYXRoOyBkbworIAkgICAgY2FzZSAiJGxpYl9zZWFyY2hfcGF0aCAiIGluCisgCSAgICAqIiAkZGlyICIqKSA7OworLQkgICAgKikgbGliX3NlYXJjaF9wYXRoPSIkbGliX3NlYXJjaF9wYXRoICRkaXIiIDs7CisrCSAgICAqKSBmdW5jX2FwcGVuZCBsaWJfc2VhcmNoX3BhdGggIiAkZGlyIiA7OworIAkgICAgZXNhYworIAkgIGRvbmUKKyAJICBuZXdsaWJfc2VhcmNoX3BhdGg9CitAQCAtNjIwNSw3ICs3MTIzLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJZmkKKyAJZm9yIHZhciBpbiAkdmFycyBkZXBlbmRlbmN5X2xpYnM7IGRvCisgCSAgIyBBZGQgbGlicmFyaWVzIHRvICR2YXIgaW4gcmV2ZXJzZSBvcmRlcgorLQkgIGV2YWwgdG1wX2xpYnM9XCQkdmFyCisrCSAgZXZhbCB0bXBfbGlicz1cIlwkJHZhclwiCisgCSAgbmV3X2xpYnM9CisgCSAgZm9yIGRlcGxpYiBpbiAkdG1wX2xpYnM7IGRvCisgCSAgICAjIEZJWE1FOiBQZWRhbnRpY2FsbHksIHRoaXMgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLCBzbworQEAgLTYyNTAsMTMgKzcxNjgsMTMgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIC1MKikKKyAJICAgICAgY2FzZSAiICR0bXBfbGlicyAiIGluCisgCSAgICAgICoiICRkZXBsaWIgIiopIDs7CistCSAgICAgICopIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIgOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIiA7OworIAkgICAgICBlc2FjCisgCSAgICAgIDs7CistCSAgICAqKSB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiIDs7CisrCSAgICAqKSBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiIDs7CisgCSAgICBlc2FjCisgCSAgZG9uZQorLQkgIGV2YWwgJHZhcj1cJHRtcF9saWJzCisrCSAgZXZhbCAkdmFyPVwiJHRtcF9saWJzXCIKKyAJZG9uZSAjIGZvciB2YXIKKyAgICAgICBmaQorICAgICAgICMgTGFzdCBzdGVwOiByZW1vdmUgcnVudGltZSBsaWJzIGZyb20gZGVwZW5kZW5jeV9saWJzCitAQCAtNjI2OSw3ICs3MTg3LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICA7OworIAllc2FjCisgCWlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKy0JICB0bXBfbGlicz0iJHRtcF9saWJzICRpIgorKwkgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGkiCisgCWZpCisgICAgICAgZG9uZQorICAgICAgIGRlcGVuZGVuY3lfbGlicz0kdG1wX2xpYnMKK0BAIC02MzEwLDcgKzcyMjgsNyBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworICAgICAgIG9sZGxpYnM9IiRvdXRwdXQiCistICAgICAgb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMiCisrICAgICAgZnVuY19hcHBlbmQgb2JqcyAiJG9sZF9kZXBsaWJzIgorICAgICAgIDs7CisgCisgICAgIGxpYikKK0BAIC02MzE5LDggKzcyMzcsOCBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAgIGxpYiopCisgCWZ1bmNfc3RyaXBuYW1lICdsaWInICcubGEnICIkb3V0cHV0bmFtZSIKKyAJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CistCWV2YWwgInNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIiIKKy0JZXZhbCAibGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIiIKKysJZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKKysJZXZhbCBsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiCisgCTs7CisgICAgICAgKikKKyAJdGVzdCAiJG1vZHVsZSIgPSBubyAmJiBcCitAQCAtNjMzMCw4ICs3MjQ4LDggQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAjIEFkZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzIGlmIHJlcXVpcmVkCisgCSAgZnVuY19zdHJpcG5hbWUgJycgJy5sYScgIiRvdXRwdXRuYW1lIgorIAkgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorLQkgIGV2YWwgInNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIiIKKy0JICBldmFsICJsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiIgorKwkgIGV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisrCSAgZXZhbCBsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiCisgCWVsc2UKKyAJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCisgCSAgbGlibmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CitAQCAtNjM0Niw3ICs3MjY0LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICBlY2hvCisgCSAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIG5vbi1saWJ0b29sIgorIAkgICRFQ0hPICIqKiogb2JqZWN0cyAkb2JqcyBpcyBub3QgcG9ydGFibGUhIgorLQkgIGxpYm9ianM9IiRsaWJvYmpzICRvYmpzIgorKwkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkb2JqcyIKKyAJZmkKKyAgICAgICBmaQorIAorQEAgLTY1NDQsNyArNzQ2Miw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgZG9uZQorIAorIAkgICMgTWFrZSBleGVjdXRhYmxlcyBkZXBlbmQgb24gb3VyIGN1cnJlbnQgdmVyc2lvbi4KKy0JICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmc6JHtjdXJyZW50fS4wIgorKwkgIGZ1bmNfYXBwZW5kIHZlcnN0cmluZyAiOiR7Y3VycmVudH0uMCIKKyAJICA7OworIAorIAlxbngpCitAQCAtNjYxMiwxMCArNzUzMCwxMCBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAgIGZpCisgCisgICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRsaWJuYW1lIiAiJGxpYm5hbWUiICJ5ZXMiCistICAgICAgbGlib2Jqcz0iJGxpYm9ianMgJHN5bWZpbGVvYmoiCisrICAgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRzeW1maWxlb2JqIgorICAgICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisgCistICAgICAgaWYgdGVzdCAiJG1vZGUiICE9IHJlbGluazsgdGhlbgorKyAgICAgIGlmIHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisgCSMgUmVtb3ZlIG91ciBvdXRwdXRzLCBidXQgZG9uJ3QgcmVtb3ZlIG9iamVjdCBmaWxlcyBzaW5jZSB0aGV5CisgCSMgbWF5IGhhdmUgYmVlbiBjcmVhdGVkIHdoZW4gY29tcGlsaW5nIFBJQyBvYmplY3RzLgorIAlyZW1vdmVsaXN0PQorQEAgLTY2MzEsNyArNzU0OSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCQkgICBjb250aW51ZQorIAkJIGZpCisgCSAgICAgICBmaQorLQkgICAgICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJHAiCisrCSAgICAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJHAiCisgCSAgICAgICA7OworIAkgICAgKikgOzsKKyAJICBlc2FjCitAQCAtNjY0Miw3ICs3NTYwLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAKKyAgICAgICAjIE5vdyBzZXQgdGhlIHZhcmlhYmxlcyBmb3IgYnVpbGRpbmcgb2xkIGxpYnJhcmllcy4KKyAgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzICYmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IGNvbnZlbmllbmNlIDsgdGhlbgorLQlvbGRsaWJzPSIkb2xkbGlicyAkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorKwlmdW5jX2FwcGVuZCBvbGRsaWJzICIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKyAKKyAJIyBUcmFuc2Zvcm0gLmxvIGZpbGVzIHRvIC5vIGZpbGVzLgorIAlvbGRvYmpzPSIkb2JqcyAiYCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIvXC4ke2xpYmV4dH0kL2Q7ICRsbzJvIiB8ICROTDJTUGAKK0BAIC02NjU5LDEwICs3NTc3LDExIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGFueSBycGF0aCBmbGFncywgdGhlbiBhZGQgdGhlbS4KKyAJdGVtcF94cnBhdGg9CisgCWZvciBsaWJkaXIgaW4gJHhycGF0aDsgZG8KKy0JICB0ZW1wX3hycGF0aD0iJHRlbXBfeHJwYXRoIC1SJGxpYmRpciIKKysJICBmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKKysJICBmdW5jX2FwcGVuZCB0ZW1wX3hycGF0aCAiIC1SJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKKyAJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorIAkgICoiICRsaWJkaXIgIiopIDs7CistCSAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIiA7OworKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKKyAJICBlc2FjCisgCWRvbmUKKyAJaWYgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KK0BAIC02Njc2LDcgKzc1OTUsNyBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAgIGZvciBsaWIgaW4gJG9sZF9kbGZpbGVzOyBkbworIAljYXNlICIgJGRscHJlZmlsZXMgJGRsZmlsZXMgIiBpbgorIAkqIiAkbGliICIqKSA7OworLQkqKSBkbGZpbGVzPSIkZGxmaWxlcyAkbGliIiA7OworKwkqKSBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGxpYiIgOzsKKyAJZXNhYworICAgICAgIGRvbmUKKyAKK0BAIC02Njg2LDcgKzc2MDUsNyBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAgIGZvciBsaWIgaW4gJG9sZF9kbHByZWZpbGVzOyBkbworIAljYXNlICIkZGxwcmVmaWxlcyAiIGluCisgCSoiICRsaWIgIiopIDs7CistCSopIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRsaWIiIDs7CisrCSopIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkbGliIiA7OworIAllc2FjCisgICAgICAgZG9uZQorIAorQEAgLTY2OTgsNyArNzYxNyw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICA7OworIAkgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKyAJICAgICMgUmhhcHNvZHkgQyBsaWJyYXJ5IGlzIGluIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCistCSAgICBkZXBsaWJzPSIkZGVwbGlicyBTeXN0ZW0ubHRmcmFtZXdvcmsiCisrCSAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgU3lzdGVtLmx0ZnJhbWV3b3JrIgorIAkgICAgOzsKKyAJICAqLSotbmV0YnNkKikKKyAJICAgICMgRG9uJ3QgbGluayB3aXRoIGxpYmMgdW50aWwgdGhlIGEub3V0IGxkLnNvIGlzIGZpeGVkLgorQEAgLTY3MTUsNyArNzYzNCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgKikKKyAJICAgICMgQWRkIGxpYmMgdG8gZGVwbGlicyBvbiBhbGwgb3RoZXIgc3lzdGVtcyBpZiBuZWNlc3NhcnkuCisgCSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9uZWVkX2xjIiA9ICJ5ZXMiOyB0aGVuCistCSAgICAgIGRlcGxpYnM9IiRkZXBsaWJzIC1sYyIKKysJICAgICAgZnVuY19hcHBlbmQgZGVwbGlicyAiIC1sYyIKKyAJICAgIGZpCisgCSAgICA7OworIAkgIGVzYWMKK0BAIC02NzY0LDE4ICs3NjgzLDE4IEBAIEVPRgorIAkJaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorIAkJICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKyAJCSAgKiIgJGkgIiopCistCQkgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisrCQkgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorIAkJICAgIGk9IiIKKyAJCSAgICA7OworIAkJICBlc2FjCisgCQlmaQorIAkJaWYgdGVzdCAtbiAiJGkiIDsgdGhlbgorLQkJICBldmFsICJsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiIgorLQkJICBldmFsICJkZXBsaWJfbWF0Y2hlcz1cIiRsaWJyYXJ5X25hbWVzX3NwZWNcIiIKKysJCSAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisrCQkgIGRlcGxpYl9tYXRjaGVzPWBldmFsICJcXCRFQ0hPIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiImAKKyAJCSAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlczsgc2hpZnQKKyAJCSAgZGVwbGliX21hdGNoPSQxCisgCQkgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMCA7IHRoZW4KKy0JCSAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKysJCSAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisgCQkgIGVsc2UKKyAJCSAgICBkcm9wcGVkZGVwcz15ZXMKKyAJCSAgICBlY2hvCitAQCAtNjc4OSw3ICs3NzA4LDcgQEAgRU9GCisgCQlmaQorIAkJOzsKKyAJICAgICAgKikKKy0JCW5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorKwkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorIAkJOzsKKyAJICAgICAgZXNhYworIAkgICAgZG9uZQorQEAgLTY4MDcsMTggKzc3MjYsMTggQEAgRU9GCisgCQkgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKyAJCSAgICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKyAJCSAgICAqIiAkaSAiKikKKy0JCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorKwkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorIAkJICAgICAgaT0iIgorIAkJICAgICAgOzsKKyAJCSAgICBlc2FjCisgCQkgIGZpCisgCQkgIGlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKy0JCSAgICBldmFsICJsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiIgorLQkJICAgIGV2YWwgImRlcGxpYl9tYXRjaGVzPVwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiIgorKwkJICAgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorKwkJICAgIGRlcGxpYl9tYXRjaGVzPWBldmFsICJcXCRFQ0hPIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiImAKKyAJCSAgICBzZXQgZHVtbXkgJGRlcGxpYl9tYXRjaGVzOyBzaGlmdAorIAkJICAgIGRlcGxpYl9tYXRjaD0kMQorIAkJICAgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMCA7IHRoZW4KKy0JCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorKwkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorIAkJICAgIGVsc2UKKyAJCSAgICAgIGRyb3BwZWRkZXBzPXllcworIAkJICAgICAgZWNobworQEAgLTY4NDAsNyArNzc1OSw3IEBAIEVPRgorIAkJZmkKKyAJCTs7CisgCSAgICAgICopCistCQluZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKysJCWZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKKyAJCTs7CisgCSAgICAgIGVzYWMKKyAJICAgIGRvbmUKK0BAIC02ODU3LDE1ICs3Nzc2LDI3IEBAIEVPRgorIAkgICAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisgCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKyAJCSoiICRhX2RlcGxpYiAiKikKKy0JCSAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorKwkJICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorIAkJICBhX2RlcGxpYj0iIgorIAkJICA7OworIAkJZXNhYworIAkgICAgICBmaQorIAkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorLQkJZXZhbCAibGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIiIKKysJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorKwkJaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfZ2xvYiI7IHRoZW4KKysJCSAgbGlibmFtZWdsb2I9YGZ1bmNfZWNob19hbGwgIiRsaWJuYW1lIiB8ICRTRUQgLWUgJGZpbGVfbWFnaWNfZ2xvYmAKKysJCWVsc2UKKysJCSAgbGlibmFtZWdsb2I9JGxpYm5hbWUKKysJCWZpCisrCQl0ZXN0ICIkd2FudF9ub2Nhc2VnbG9iIiA9IHllcyAmJiBub2Nhc2VnbG9iPWBzaG9wdCAtcCBub2Nhc2VnbG9iYAorIAkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCistCQkgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZVsuLV0qIDI+L2Rldi9udWxsYAorKwkJICBpZiB0ZXN0ICIkd2FudF9ub2Nhc2VnbG9iIiA9IHllczsgdGhlbgorKwkJICAgIHNob3B0IC1zIG5vY2FzZWdsb2IKKysJCSAgICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVnbG9iWy4tXSogMj4vZGV2L251bGxgCisrCQkgICAgJG5vY2FzZWdsb2IKKysJCSAgZWxzZQorKwkJICAgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZWdsb2JbLi1dKiAyPi9kZXYvbnVsbGAKKysJCSAgZmkKKyAJCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbworIAkJICAgICAgIyBGb2xsb3cgc29mdCBsaW5rcy4KKyAJCSAgICAgIGlmIGxzIC1sTGQgIiRwb3RlbnRfbGliIiAyPi9kZXYvbnVsbCB8CitAQCAtNjg4NSwxMCArNzgxNiwxMCBAQCBFT0YKKyAJCQkqKSBwb3RsaWI9YCRFQ0hPICIkcG90bGliIiB8ICRTRUQgJ3MsW14vXSokLCwnYCIkcG90bGlibGluayI7OworIAkJCWVzYWMKKyAJCSAgICAgIGRvbmUKKy0JCSAgICAgIGlmIGV2YWwgIiRmaWxlX21hZ2ljX2NtZCBcIlwkcG90bGliXCIiIDI+L2Rldi9udWxsIHwKKysJCSAgICAgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwiXCRwb3RsaWJcIiAyPi9kZXYvbnVsbCB8CisgCQkJICRTRUQgLWUgMTBxIHwKKyAJCQkgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKy0JCQluZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisrCQkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKyAJCQlhX2RlcGxpYj0iIgorIAkJCWJyZWFrIDIKKyAJCSAgICAgIGZpCitAQCAtNjkxMyw3ICs3ODQ0LDcgQEAgRU9GCisgCSAgICAgIDs7CisgCSAgICAqKQorIAkgICAgICAjIEFkZCBhIC1MIGFyZ3VtZW50LgorLQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisgCSAgICAgIDs7CisgCSAgICBlc2FjCisgCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KK0BAIC02OTI5LDIwICs3ODYwLDIwIEBAIEVPRgorIAkgICAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisgCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKyAJCSoiICRhX2RlcGxpYiAiKikKKy0JCSAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorKwkJICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorIAkJICBhX2RlcGxpYj0iIgorIAkJICA7OworIAkJZXNhYworIAkgICAgICBmaQorIAkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorLQkJZXZhbCAibGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIiIKKysJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorIAkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCisgCQkgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZVsuLV0qIDI+L2Rldi9udWxsYAorIAkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCisgCQkgICAgcG90bGliPSIkcG90ZW50X2xpYiIgIyBzZWUgc3ltbGluay1jaGVjayBhYm92ZSBpbiBmaWxlX21hZ2ljIHRlc3QKKyAJCSAgICBpZiBldmFsICJcJEVDSE8gXCIkcG90ZW50X2xpYlwiIiAyPi9kZXYvbnVsbCB8ICRTRUQgMTBxIHwgXAorIAkJICAgICAgICRFR1JFUCAiJG1hdGNoX3BhdHRlcm5fcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCistCQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisrCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorIAkJICAgICAgYV9kZXBsaWI9IiIKKyAJCSAgICAgIGJyZWFrIDIKKyAJCSAgICBmaQorQEAgLTY5NjcsNyArNzg5OCw3IEBAIEVPRgorIAkgICAgICA7OworIAkgICAgKikKKyAJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KKy0JICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorIAkgICAgICA7OworIAkgICAgZXNhYworIAkgIGRvbmUgIyBHb25lIHRocm91Z2ggYWxsIGRlcGxpYnMuCitAQCAtNzA3MSw3ICs4MDAyLDcgQEAgRU9GCisgCSopCisgCSAgY2FzZSAiICRkZXBsaWJzICIgaW4KKyAJICAqIiAtTCRwYXRoLyRvYmpkaXIgIiopCistCSAgICBuZXdfbGlicz0iJG5ld19saWJzIC1MJHBhdGgvJG9iamRpciIgOzsKKysJICAgIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgLUwkcGF0aC8kb2JqZGlyIiA7OworIAkgIGVzYWMKKyAJICA7OworIAllc2FjCitAQCAtNzA4MSwxMCArODAxMiwxMCBAQCBFT0YKKyAJLUwqKQorIAkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgorIAkgICoiICRkZXBsaWIgIiopIDs7CistCSAgKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworKwkgICopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKKyAJICBlc2FjCisgCSAgOzsKKy0JKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworKwkqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CisgCWVzYWMKKyAgICAgICBkb25lCisgICAgICAgZGVwbGlicz0iJG5ld19saWJzIgorQEAgLTcxMDEsMTAgKzgwMzIsMTIgQEAgRU9GCisgCSAgaGFyZGNvZGVfbGliZGlycz0KKyAJICBkZXBfcnBhdGg9CisgCSAgcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCIKKy0JICB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rICYmIHJwYXRoPSIkY29tcGlsZV9ycGF0aCRycGF0aCIKKysJICB0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluayAmJiBycGF0aD0iJGNvbXBpbGVfcnBhdGgkcnBhdGgiCisgCSAgZm9yIGxpYmRpciBpbiAkcnBhdGg7IGRvCisgCSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKyAJICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisrCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKKysJCWxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CisgCQlpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKyAJCSAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKKyAJCWVsc2UKK0BAIC03MTEzLDE4ICs4MDQ2LDE4IEBAIEVPRgorIAkJICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisgCQkgICAgOzsKKyAJCSAgKikKKy0JCSAgICBoYXJkY29kZV9saWJkaXJzPSIkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKysJCSAgICBmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJzICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisgCQkgICAgOzsKKyAJCSAgZXNhYworIAkJZmkKKyAJICAgICAgZWxzZQorLQkJZXZhbCAiZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCistCQlkZXBfcnBhdGg9IiRkZXBfcnBhdGggJGZsYWciCisrCQlldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrCQlmdW5jX2FwcGVuZCBkZXBfcnBhdGggIiAkZmxhZyIKKyAJICAgICAgZmkKKyAJICAgIGVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorIAkgICAgICBjYXNlICIkcGVybV9ycGF0aCAiIGluCisgCSAgICAgICoiICRsaWJkaXIgIiopIDs7CistCSAgICAgICopIHBlcm1fcnBhdGg9IiRwZXJtX3JwYXRoICRsaWJkaXIiIDs7CisrCSAgICAgICopIGZ1bmNfYXBwZWQgcGVybV9ycGF0aCAiICRsaWJkaXIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIGZpCisgCSAgZG9uZQorQEAgLTcxMzMsNDAgKzgwNjYsMzggQEAgRU9GCisgCSAgICAgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisgCSAgICBsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorIAkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQiOyB0aGVuCistCSAgICAgIGV2YWwgImRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkXCIiCisrCSAgICAgIGV2YWwgZGVwX3JwYXRoPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRcIgorIAkgICAgZWxzZQorLQkgICAgICBldmFsICJkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgorKwkgICAgICBldmFsIGRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAJICAgIGZpCisgCSAgZmkKKyAJICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiICYmIHRlc3QgLW4gIiRwZXJtX3JwYXRoIjsgdGhlbgorIAkgICAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKyAJICAgIHJwYXRoPQorIAkgICAgZm9yIGRpciBpbiAkcGVybV9ycGF0aDsgZG8KKy0JICAgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorKwkgICAgICBmdW5jX2FwcGVuZCBycGF0aCAiJGRpcjoiCisgCSAgICBkb25lCistCSAgICBldmFsICRydW5wYXRoX3Zhcj1cJHJwYXRoXCQkcnVucGF0aF92YXIKKy0JICAgIGV4cG9ydCAkcnVucGF0aF92YXIKKysJICAgIGV2YWwgIiRydW5wYXRoX3Zhcj0nJHJwYXRoXCQkcnVucGF0aF92YXInOyBleHBvcnQgJHJ1bnBhdGhfdmFyIgorIAkgIGZpCisgCSAgdGVzdCAtbiAiJGRlcF9ycGF0aCIgJiYgZGVwbGlicz0iJGRlcF9ycGF0aCAkZGVwbGlicyIKKyAJZmkKKyAKKyAJc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoIgorLQl0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rICYmIHNobGlicGF0aD0iJGNvbXBpbGVfc2hsaWJwYXRoJHNobGlicGF0aCIKKysJdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbmsgJiYgc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkc2hsaWJwYXRoIgorIAlpZiB0ZXN0IC1uICIkc2hsaWJwYXRoIjsgdGhlbgorLQkgIGV2YWwgJHNobGlicGF0aF92YXI9XCRzaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyCistCSAgZXhwb3J0ICRzaGxpYnBhdGhfdmFyCisrCSAgZXZhbCAiJHNobGlicGF0aF92YXI9JyRzaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyJzsgZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorIAlmaQorIAorIAkjIEdldCB0aGUgcmVhbCBhbmQgbGluayBuYW1lcyBvZiB0aGUgbGlicmFyeS4KKy0JZXZhbCAic2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiIgorLQlldmFsICJsaWJyYXJ5X25hbWVzPVwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiIgorKwlldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgorKwlldmFsIGxpYnJhcnlfbmFtZXM9XCIkbGlicmFyeV9uYW1lc19zcGVjXCIKKyAJc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCisgCXNoaWZ0CisgCXJlYWxuYW1lPSIkMSIKKyAJc2hpZnQKKyAKKyAJaWYgdGVzdCAtbiAiJHNvbmFtZV9zcGVjIjsgdGhlbgorLQkgIGV2YWwgInNvbmFtZT1cIiRzb25hbWVfc3BlY1wiIgorKwkgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKKyAJZWxzZQorIAkgIHNvbmFtZT0iJHJlYWxuYW1lIgorIAlmaQorQEAgLTcxNzgsNyArODEwOSw3IEBAIEVPRgorIAlsaW5rbmFtZXM9CisgCWZvciBsaW5rCisgCWRvCistCSAgbGlua25hbWVzPSIkbGlua25hbWVzICRsaW5rIgorKwkgIGZ1bmNfYXBwZW5kIGxpbmtuYW1lcyAiICRsaW5rIgorIAlkb25lCisgCisgCSMgVXNlIHN0YW5kYXJkIG9iamVjdHMgaWYgdGhleSBhcmUgcGljCitAQCAtNzE4OSw3ICs4MTIwLDcgQEAgRU9GCisgCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKyAJICAkb3B0X2RyeV9ydW4gfHwgY3AgIiRleHBvcnRfc3ltYm9scyIgIiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnVleHAiCisgCSAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnVleHAiCistCSAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkZXhwb3J0X3N5bWJvbHMiCisrCSAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMiCisgCWZpCisgCisgCW9yaWdfZXhwb3J0X3N5bWJvbHM9CitAQCAtNzIyMCwxMyArODE1MSw0NSBAQCBFT0YKKyAJICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJGV4cG9ydF9zeW1ib2xzCisgCSAgICBjbWRzPSRleHBvcnRfc3ltYm9sc19jbWRzCisgCSAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKy0JICAgIGZvciBjbWQgaW4gJGNtZHM7IGRvCisrCSAgICBmb3IgY21kMSBpbiAkY21kczsgZG8KKyAJICAgICAgSUZTPSIkc2F2ZV9pZnMiCistCSAgICAgIGV2YWwgImNtZD1cIiRjbWRcIiIKKy0JICAgICAgZnVuY19sZW4gIiAkY21kIgorLQkgICAgICBsZW49JGZ1bmNfbGVuX3Jlc3VsdAorLQkgICAgICBpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KKysJICAgICAgIyBUYWtlIHRoZSBub3JtYWwgYnJhbmNoIGlmIHRoZSBubV9maWxlX2xpc3Rfc3BlYyBicmFuY2gKKysJICAgICAgIyBkb2Vzbid0IHdvcmsgb3IgaWYgdG9vbCBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQuCisrCSAgICAgIGNhc2UgJG5tX2ZpbGVfbGlzdF9zcGVjfiR0b190b29sX2ZpbGVfY21kIGluCisrCQkqfmZ1bmNfY29udmVydF9maWxlX25vb3AgfCAqfmZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyIHwgfiopCisrCQkgIHRyeV9ub3JtYWxfYnJhbmNoPXllcworKwkJICBldmFsIGNtZD1cIiRjbWQxXCIKKysJCSAgZnVuY19sZW4gIiAkY21kIgorKwkJICBsZW49JGZ1bmNfbGVuX3Jlc3VsdAorKwkJICA7OworKwkJKikKKysJCSAgdHJ5X25vcm1hbF9icmFuY2g9bm8KKysJCSAgOzsKKysJICAgICAgZXNhYworKwkgICAgICBpZiB0ZXN0ICIkdHJ5X25vcm1hbF9icmFuY2giID0geWVzIFwKKysJCSAmJiB7IHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiBcCisrCQkgICAgICB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgfQorKwkgICAgICB0aGVuCisrCQlmdW5jX3Nob3dfZXZhbCAiJGNtZCIgJ2V4aXQgJD8nCisrCQlza2lwcGVkX2V4cG9ydD1mYWxzZQorKwkgICAgICBlbGlmIHRlc3QgLW4gIiRubV9maWxlX2xpc3Rfc3BlYyI7IHRoZW4KKysJCWZ1bmNfYmFzZW5hbWUgIiRvdXRwdXQiCisrCQlvdXRwdXRfbGE9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisrCQlzYXZlX2xpYm9ianM9JGxpYm9ianMKKysJCXNhdmVfb3V0cHV0PSRvdXRwdXQKKysJCW91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5ubQorKwkJZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCisrCQlsaWJvYmpzPSRubV9maWxlX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKysJCWZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKysJCWZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJE5NIGlucHV0IGZpbGUgbGlzdDogJG91dHB1dCIKKysJCWZvciBvYmogaW4gJHNhdmVfbGlib2JqczsgZG8KKysJCSAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCisrCQkgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IgorKwkJZG9uZSA+ICIkb3V0cHV0IgorKwkJZXZhbCBjbWQ9XCIkY21kMVwiCisgCQlmdW5jX3Nob3dfZXZhbCAiJGNtZCIgJ2V4aXQgJD8nCisrCQlvdXRwdXQ9JHNhdmVfb3V0cHV0CisrCQlsaWJvYmpzPSRzYXZlX2xpYm9ianMKKyAJCXNraXBwZWRfZXhwb3J0PWZhbHNlCisgCSAgICAgIGVsc2UKKyAJCSMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBleGVjdXRlIGluIG9uZSBzdGVwLgorQEAgLTcyNDgsNyArODIxMSw3IEBAIEVPRgorIAlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisgCSAgdG1wX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCisgCSAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0iJG9yaWdfZXhwb3J0X3N5bWJvbHMiCistCSAgJG9wdF9kcnlfcnVuIHx8ICRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyIKKysJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKKyAJZmkKKyAKKyAJaWYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KK0BAIC03MjYwLDcgKzgyMjMsNyBAQCBFT0YKKyAJICAjIGdsb2JhbCB2YXJpYWJsZXMuIGpvaW4oMSkgd291bGQgYmUgbmljZSBoZXJlLCBidXQgdW5mb3J0dW5hdGVseQorIAkgICMgaXNuJ3QgYSBibGVzc2VkIHRvb2wuCisgCSAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWUgJy9bICxdREFUQS8hZDtzLFwoLipcKVwoWyBcLF0uKlwpLHN8XlwxJHxcMVwyfCwnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyCistCSAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgorKwkgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKKyAJICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYKKyAJICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scworIAlmaQorQEAgLTcyNzAsNyArODIzMyw3IEBAIEVPRgorIAkgIGNhc2UgIiAkY29udmVuaWVuY2UgIiBpbgorIAkgICoiICR0ZXN0X2RlcGxpYiAiKikgOzsKKyAJICAqKQorLQkgICAgdG1wX2RlcGxpYnM9IiR0bXBfZGVwbGlicyAkdGVzdF9kZXBsaWIiCisrCSAgICBmdW5jX2FwcGVuZCB0bXBfZGVwbGlicyAiICR0ZXN0X2RlcGxpYiIKKyAJICAgIDs7CisgCSAgZXNhYworIAlkb25lCitAQCAtNzI4Niw0MyArODI0OSw0MyBAQCBFT0YKKyAJICBmaQorIAkgIGlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKyAJICAgIHNhdmVfbGlib2Jqcz0kbGlib2JqcworLQkgICAgZXZhbCAibGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIiIKKysJICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgorIAkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKyAJICBlbHNlCisgCSAgICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorLQkgICAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisrCSAgICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorIAorIAkgICAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCistCSAgICBsaWJvYmpzPSIkbGlib2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKysJICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKyAJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisgCSAgZmkKKyAJZmkKKyAKKyAJaWYgdGVzdCAiJHRocmVhZF9zYWZlIiA9IHllcyAmJiB0ZXN0IC1uICIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjIjsgdGhlbgorLQkgIGV2YWwgImZsYWc9XCIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjXCIiCistCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRmbGFnIgorKwkgIGV2YWwgZmxhZz1cIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWNcIgorKwkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRmbGFnIgorIAlmaQorIAorIAkjIE1ha2UgYSBiYWNrdXAgb2YgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgd2hlbiByZWxpbmtpbmcKKy0JaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCistCSAgJG9wdF9kcnlfcnVuIHx8IChjZCAkb3V0cHV0X29iamRpciAmJiAkUk0gJHtyZWFsbmFtZX1VICYmICRNViAkcmVhbG5hbWUgJHtyZWFsbmFtZX1VKSB8fCBleGl0ICQ/CisrCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKysJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVUgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVUpJyB8fCBleGl0ICQ/CisgCWZpCisgCisgCSMgRG8gZWFjaCBvZiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KKyAJaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJG1vZHVsZV9jbWRzIiA7IHRoZW4KKyAJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRtb2R1bGVfZXhwc3ltX2NtZHMiOyB0aGVuCistCSAgICBldmFsICJ0ZXN0X2NtZHM9XCIkbW9kdWxlX2V4cHN5bV9jbWRzXCIiCisrCSAgICBldmFsIHRlc3RfY21kcz1cIiRtb2R1bGVfZXhwc3ltX2NtZHNcIgorIAkgICAgY21kcz0kbW9kdWxlX2V4cHN5bV9jbWRzCisgCSAgZWxzZQorLQkgICAgZXZhbCAidGVzdF9jbWRzPVwiJG1vZHVsZV9jbWRzXCIiCisrCSAgICBldmFsIHRlc3RfY21kcz1cIiRtb2R1bGVfY21kc1wiCisgCSAgICBjbWRzPSRtb2R1bGVfY21kcworIAkgIGZpCisgCWVsc2UKKyAJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIjsgdGhlbgorLQkgICAgZXZhbCAidGVzdF9jbWRzPVwiJGFyY2hpdmVfZXhwc3ltX2NtZHNcIiIKKysJICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfZXhwc3ltX2NtZHNcIgorIAkgICAgY21kcz0kYXJjaGl2ZV9leHBzeW1fY21kcworIAkgIGVsc2UKKy0JICAgIGV2YWwgInRlc3RfY21kcz1cIiRhcmNoaXZlX2NtZHNcIiIKKysJICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfY21kc1wiCisgCSAgICBjbWRzPSRhcmNoaXZlX2NtZHMKKyAJICBmaQorIAlmaQorQEAgLTczNjYsMTAgKzgzMjksMTMgQEAgRU9GCisgCSAgICBlY2hvICdJTlBVVCAoJyA+ICRvdXRwdXQKKyAJICAgIGZvciBvYmogaW4gJHNhdmVfbGlib2JqcworIAkgICAgZG8KKy0JICAgICAgJEVDSE8gIiRvYmoiID4+ICRvdXRwdXQKKysJICAgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCisrCSAgICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiA+PiAkb3V0cHV0CisgCSAgICBkb25lCisgCSAgICBlY2hvICcpJyA+PiAkb3V0cHV0CistCSAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRvdXRwdXQiCisrCSAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCisrCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKysJICAgIG91dHB1dD0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisgCSAgZWxpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgIlgkZmlsZV9saXN0X3NwZWMiICE9IFg7IHRoZW4KKyAJICAgIG91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5sbmsKKyAJICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgbGlua2VyIGlucHV0IGZpbGUgbGlzdDogJG91dHB1dCIKK0BAIC03MzgzLDE1ICs4MzQ5LDE3IEBAIEVPRgorIAkgICAgZmkKKyAJICAgIGZvciBvYmoKKyAJICAgIGRvCistCSAgICAgICRFQ0hPICIkb2JqIiA+PiAkb3V0cHV0CisrCSAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgorKwkgICAgICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgPj4gJG91dHB1dAorIAkgICAgZG9uZQorLQkgICAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkb3V0cHV0IgorLQkgICAgb3V0cHV0PSRmaXJzdG9ialwiJGZpbGVfbGlzdF9zcGVjJG91dHB1dFwiCisrCSAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCisrCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKysJICAgIG91dHB1dD0kZmlyc3RvYmpcIiRmaWxlX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIgorIAkgIGVsc2UKKyAJICAgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiOyB0aGVuCisgCSAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuLi4iCisgCSAgICAgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAorLQkgICAgICBldmFsICJ0ZXN0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIiIKKysJICAgICAgZXZhbCB0ZXN0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIgorIAkgICAgICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiCisgCSAgICAgIGxlbjA9JGZ1bmNfbGVuX3Jlc3VsdAorIAkgICAgICBsZW49JGxlbjAKK0BAIC03NDExLDEyICs4Mzc5LDEyIEBAIEVPRgorIAkJICBpZiB0ZXN0ICIkayIgLWVxIDEgOyB0aGVuCisgCQkgICAgIyBUaGUgZmlyc3QgZmlsZSBkb2Vzbid0IGhhdmUgYSBwcmV2aW91cyBjb21tYW5kIHRvIGFkZC4KKyAJCSAgICByZWxvYWRfb2Jqcz0kb2JqbGlzdAorLQkJICAgIGV2YWwgImNvbmNhdF9jbWRzPVwiJHJlbG9hZF9jbWRzXCIiCisrCQkgICAgZXZhbCBjb25jYXRfY21kcz1cIiRyZWxvYWRfY21kc1wiCisgCQkgIGVsc2UKKyAJCSAgICAjIEFsbCBzdWJzZXF1ZW50IHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzIHdpbGwgbGluayBpbgorIAkJICAgICMgdGhlIGxhc3Qgb25lIGNyZWF0ZWQuCisgCQkgICAgcmVsb2FkX29ianM9IiRvYmpsaXN0ICRsYXN0X3JvYmoiCistCQkgICAgZXZhbCAiY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzfiRyZWxvYWRfY21kc35cJFJNICRsYXN0X3JvYmpcIiIKKysJCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc34kcmVsb2FkX2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKKyAJCSAgZmkKKyAJCSAgbGFzdF9yb2JqPSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisgCQkgIGZ1bmNfYXJpdGggJGsgKyAxCitAQCAtNzQzMywxMSArODQwMSwxMSBAQCBFT0YKKyAJICAgICAgIyBmaWxlcyB3aWxsIGxpbmsgaW4gdGhlIGxhc3Qgb25lIGNyZWF0ZWQuCisgCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorIAkgICAgICByZWxvYWRfb2Jqcz0iJG9iamxpc3QgJGxhc3Rfcm9iaiIKKy0JICAgICAgZXZhbCAiY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kcmVsb2FkX2NtZHNcIiIKKysJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRyZWxvYWRfY21kc1wiCisgCSAgICAgIGlmIHRlc3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCistCSAgICAgICAgZXZhbCAiY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc31+XCRSTSAkbGFzdF9yb2JqXCIiCisrCSAgICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfX5cJFJNICRsYXN0X3JvYmpcIgorIAkgICAgICBmaQorLQkgICAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRvdXRwdXQiCisrCSAgICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKyAKKyAJICAgIGVsc2UKKyAJICAgICAgb3V0cHV0PQorQEAgLTc0NTAsOSArODQxOCw5IEBAIEVPRgorIAkgICAgICBsaWJvYmpzPSRvdXRwdXQKKyAJICAgICAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gY3JlYXRlIHRoZSBleHBvcnQgZmlsZS4KKyAJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CistCSAgICAgIGV2YWwgImNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kcyRleHBvcnRfc3ltYm9sc19jbWRzXCIiCisrCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzJGV4cG9ydF9zeW1ib2xzX2NtZHNcIgorIAkgICAgICBpZiB0ZXN0IC1uICIkbGFzdF9yb2JqIjsgdGhlbgorLQkJZXZhbCAiY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiIgorKwkJZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKKyAJICAgICAgZmkKKyAJICAgIGZpCisgCitAQCAtNzQ3MSw3ICs4NDM5LDcgQEAgRU9GCisgCQlsdF9leGl0PSQ/CisgCisgCQkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKy0JCWlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorKwkJaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorIAkJICAoIGNkICIkb3V0cHV0X29iamRpciIgJiYgXAorIAkJICAgICRSTSAiJHtyZWFsbmFtZX1UIiAmJiBcCisgCQkgICAgJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKK0BAIC03NDkyLDcgKzg0NjAsNyBAQCBFT0YKKyAJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKyAJICAgICAgdG1wX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCisgCSAgICAgIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIiAmJiB0bXBfZXhwb3J0X3N5bWJvbHM9IiRvcmlnX2V4cG9ydF9zeW1ib2xzIgorLQkgICAgICAkb3B0X2RyeV9ydW4gfHwgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIgorKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKKyAJICAgIGZpCisgCisgCSAgICBpZiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KK0BAIC03NTA0LDcgKzg0NzIsNyBAQCBFT0YKKyAJICAgICAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKKyAJICAgICAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KKyAJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWUgJy9bICxdREFUQS8hZDtzLFwoLipcKVwoWyBcLF0uKlwpLHN8XlwxJHxcMVwyfCwnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyCistCSAgICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKKysJICAgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgorIAkgICAgICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYKKyAJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWYgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIDwgJG9yaWdfZXhwb3J0X3N5bWJvbHMgPiAkZXhwb3J0X3N5bWJvbHMKKyAJICAgIGZpCitAQCAtNzUxNSw3ICs4NDgzLDcgQEAgRU9GCisgCSAgb3V0cHV0PSRzYXZlX291dHB1dAorIAorIAkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSIgJiYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorLQkgICAgZXZhbCAibGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIiIKKysJICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgorIAkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKyAJICBmaQorIAkgICMgRXhwYW5kIHRoZSBsaWJyYXJ5IGxpbmtpbmcgY29tbWFuZHMgYWdhaW4gdG8gcmVzZXQgdGhlCitAQCAtNzUzOSwyMyArODUwNywyMyBAQCBFT0YKKyAKKyAJaWYgdGVzdCAtbiAiJGRlbGZpbGVzIjsgdGhlbgorIAkgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMgdG8gJGNtZHMuCistCSAgZXZhbCAiY21kcz1cIlwkY21kc35cJFJNICRkZWxmaWxlc1wiIgorKwkgIGV2YWwgY21kcz1cIlwkY21kc35cJFJNICRkZWxmaWxlc1wiCisgCWZpCisgCisgCSMgQWRkIGFueSBvYmplY3RzIGZyb20gcHJlbG9hZGVkIGNvbnZlbmllbmNlIGxpYnJhcmllcworIAlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KKyAJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorLQkgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorKwkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisgCisgCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKKy0JICBsaWJvYmpzPSIkbGlib2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKysJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisgCSAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKyAJZmkKKyAKKyAJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisgCWZvciBjbWQgaW4gJGNtZHM7IGRvCisgCSAgSUZTPSIkc2F2ZV9pZnMiCistCSAgZXZhbCAiY21kPVwiJGNtZFwiIgorKwkgIGV2YWwgY21kPVwiJGNtZFwiCisgCSAgJG9wdF9zaWxlbnQgfHwgeworIAkgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkY21kIgorIAkgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorQEAgLTc1NjQsNyArODUzMiw3IEBAIEVPRgorIAkgICAgbHRfZXhpdD0kPworIAorIAkgICAgIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CistCSAgICBpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKysJICAgIGlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKyAJICAgICAgKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmIFwKKyAJICAgICAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAorIAkJJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKK0BAIC03NTc2LDggKzg1NDQsOCBAQCBFT0YKKyAJSUZTPSIkc2F2ZV9pZnMiCisgCisgCSMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAorLQlpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKy0JICAkb3B0X2RyeV9ydW4gfHwgKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVQgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVQgJiYgJE1WICR7cmVhbG5hbWV9VSAkcmVhbG5hbWUpIHx8IGV4aXQgJD8KKysJaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VCAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VCAmJiAkTVYgJHtyZWFsbmFtZX1VICRyZWFsbmFtZSknIHx8IGV4aXQgJD8KKyAKKyAJICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCisgCSAgICBpZiB0ZXN0IC16ICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCitAQCAtNzY1NiwxNyArODYyNCwyMCBAQCBFT0YKKyAKKyAgICAgICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCisgCWlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKy0JICBldmFsICJ0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncz1cIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiIgorKwkgIGV2YWwgdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3M9XCIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgorIAkgIHJlbG9hZF9jb252X29ianM9JHJlbG9hZF9vYmpzXCBgJEVDSE8gIiR0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncyIgfCAkU0VEICdzfCx8IHxnJ2AKKyAJZWxzZQorIAkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvYmp9eCIKKy0JICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKysJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorIAorIAkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQorIAkgIHJlbG9hZF9jb252X29ianM9IiRyZWxvYWRfb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKyAJZmkKKyAgICAgICBmaQorIAorKyAgICAgICMgSWYgd2UncmUgbm90IGJ1aWxkaW5nIHNoYXJlZCwgd2UgbmVlZCB0byB1c2Ugbm9uX3BpY19vYmpzCisrICAgICAgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIGxpYm9ianM9IiRub25fcGljX29iamVjdHMiCisrCisgICAgICAgIyBDcmVhdGUgdGhlIG9sZC1zdHlsZSBvYmplY3QuCisgICAgICAgcmVsb2FkX29ianM9IiRvYmpzJG9sZF9kZXBsaWJzICJgJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIi9cLiR7bGliZXh0fSQvZDsgL1wubGliJC9kOyAkbG8ybyIgfCAkTkwyU1BgIiAkcmVsb2FkX2NvbnZfb2JqcyIgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0CisgCitAQCAtNzY5MCw3ICs4NjYxLDcgQEAgRU9GCisgCSMgQ3JlYXRlIGFuIGludmFsaWQgbGlidG9vbCBvYmplY3QgaWYgbm8gUElDLCBzbyB0aGF0IHdlIGRvbid0CisgCSMgYWNjaWRlbnRhbGx5IGxpbmsgaXQgaW50byBhIHByb2dyYW0uCisgCSMgJHNob3cgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIKKy0JIyAkb3B0X2RyeV9ydW4gfHwgZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIHx8IGV4aXQgJD8KKysJIyAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIiB8fCBleGl0ICQ/CisgCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgIGZpCisgCitAQCAtNzc0MCw4ICs4NzExLDggQEAgRU9GCisgCWlmIHRlc3QgIiR0YWduYW1lIiA9IENYWCA7IHRoZW4KKyAJICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9IGluCisgCSAgICAxMC5bMDEyM10pCistCSAgICAgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAke3dsfS1iaW5kX2F0X2xvYWQiCistCSAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICR7d2x9LWJpbmRfYXRfbG9hZCIKKysJICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHt3bH0tYmluZF9hdF9sb2FkIgorKwkgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHt3bH0tYmluZF9hdF9sb2FkIgorIAkgICAgOzsKKyAJICBlc2FjCisgCWZpCitAQCAtNzc2MSw3ICs4NzMyLDcgQEAgRU9GCisgCSopCisgCSAgY2FzZSAiICRjb21waWxlX2RlcGxpYnMgIiBpbgorIAkgICoiIC1MJHBhdGgvJG9iamRpciAiKikKKy0JICAgIG5ld19saWJzPSIkbmV3X2xpYnMgLUwkcGF0aC8kb2JqZGlyIiA7OworKwkgICAgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAtTCRwYXRoLyRvYmpkaXIiIDs7CisgCSAgZXNhYworIAkgIDs7CisgCWVzYWMKK0BAIC03NzcxLDE3ICs4NzQyLDE3IEBAIEVPRgorIAktTCopCisgCSAgY2FzZSAiICRuZXdfbGlicyAiIGluCisgCSAgKiIgJGRlcGxpYiAiKikgOzsKKy0JICAqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisrCSAgKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OworIAkgIGVzYWMKKyAJICA7OworLQkqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisrCSopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKKyAJZXNhYworICAgICAgIGRvbmUKKyAgICAgICBjb21waWxlX2RlcGxpYnM9IiRuZXdfbGlicyIKKyAKKyAKKy0gICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGNvbXBpbGVfZGVwbGlicyIKKy0gICAgICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkZmluYWxpemVfZGVwbGlicyIKKysgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkY29tcGlsZV9kZXBsaWJzIgorKyAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkZmluYWxpemVfZGVwbGlicyIKKyAKKyAgICAgICBpZiB0ZXN0IC1uICIkcnBhdGgkeHJwYXRoIjsgdGhlbgorIAkjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxhZ3MsIHRoZW4gYWRkIHRoZW0uCitAQCAtNzc4OSw3ICs4NzYwLDcgQEAgRU9GCisgCSAgIyBUaGlzIGlzIHRoZSBtYWdpYyB0byB1c2UgLXJwYXRoLgorIAkgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisgCSAgKiIgJGxpYmRpciAiKikgOzsKKy0JICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiIDs7CisrCSAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OworIAkgIGVzYWMKKyAJZG9uZQorICAgICAgIGZpCitAQCAtNzgwOCwxOCArODc3OSwxOCBAQCBFT0YKKyAJICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQorIAkJOzsKKyAJICAgICAgKikKKy0JCWhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorKwkJZnVuY19hcHBlbmQgaGFyZGNvZGVfbGliZGlycyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorIAkJOzsKKyAJICAgICAgZXNhYworIAkgICAgZmkKKyAJICBlbHNlCistCSAgICBldmFsICJmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKKy0JICAgIHJwYXRoPSIkcnBhdGggJGZsYWciCisrCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgorIAkgIGZpCisgCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorIAkgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KKyAJICAqIiAkbGliZGlyICIqKSA7OworLQkgICopIHBlcm1fcnBhdGg9IiRwZXJtX3JwYXRoICRsaWJkaXIiIDs7CisrCSAgKikgZnVuY19hcHBlbmQgcGVybV9ycGF0aCAiICRsaWJkaXIiIDs7CisgCSAgZXNhYworIAlmaQorIAljYXNlICRob3N0IGluCitAQCAtNzgyOCwxMiArODc5OSwxMiBAQCBFT0YKKyAJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKyAJICAqIjokbGliZGlyOiIqKSA7OworIAkgIDo6KSBkbGxzZWFyY2hwYXRoPSRsaWJkaXI7OworLQkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiRsaWJkaXIiOzsKKysJICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JGxpYmRpciI7OworIAkgIGVzYWMKKyAJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKyAJICAqIjokdGVzdGJpbmRpcjoiKikgOzsKKyAJICA6OikgZGxsc2VhcmNocGF0aD0kdGVzdGJpbmRpcjs7CistCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JHRlc3RiaW5kaXIiOzsKKysJICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JHRlc3RiaW5kaXIiOzsKKyAJICBlc2FjCisgCSAgOzsKKyAJZXNhYworQEAgLTc4NDIsNyArODgxMyw3IEBAIEVPRgorICAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgorIAkgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisgCWxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCistCWV2YWwgInJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCisrCWV2YWwgcnBhdGg9XCIgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgIGZpCisgICAgICAgY29tcGlsZV9ycGF0aD0iJHJwYXRoIgorIAorQEAgLTc4NTksMTggKzg4MzAsMTggQEAgRU9GCisgCSAgICAgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKyAJCTs7CisgCSAgICAgICopCistCQloYXJkY29kZV9saWJkaXJzPSIkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKysJCWZ1bmNfYXBwZW5kIGhhcmRjb2RlX2xpYmRpcnMgIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKyAJCTs7CisgCSAgICAgIGVzYWMKKyAJICAgIGZpCisgCSAgZWxzZQorLQkgICAgZXZhbCAiZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCistCSAgICBycGF0aD0iJHJwYXRoICRmbGFnIgorKwkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKwkgICAgZnVuY19hcHBlbmQgcnBhdGggIiAkZmxhZyIKKyAJICBmaQorIAllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKyAJICBjYXNlICIkZmluYWxpemVfcGVybV9ycGF0aCAiIGluCisgCSAgKiIgJGxpYmRpciAiKikgOzsKKy0JICAqKSBmaW5hbGl6ZV9wZXJtX3JwYXRoPSIkZmluYWxpemVfcGVybV9ycGF0aCAkbGliZGlyIiA7OworKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3Blcm1fcnBhdGggIiAkbGliZGlyIiA7OworIAkgIGVzYWMKKyAJZmkKKyAgICAgICBkb25lCitAQCAtNzg3OCw3ICs4ODQ5LDcgQEAgRU9GCisgICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCisgCSB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKyAJbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKy0JZXZhbCAicnBhdGg9XCIgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKKysJZXZhbCBycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICAgZmkKKyAgICAgICBmaW5hbGl6ZV9ycGF0aD0iJHJwYXRoIgorIAorQEAgLTc5MjEsNiArODg5MiwxMiBAQCBFT0YKKyAJZXhpdF9zdGF0dXM9MAorIAlmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXRfc3RhdHVzPSQ/JworIAorKwlpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KKysJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKysJICBwb3N0bGlua19jbWRzPWBmdW5jX2VjaG9fYWxsICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnIC1lICdzJUBUT09MX09VVFBVVEAlJyIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiclZydgCisrCSAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0bGlua19jbWRzIiAnZXhpdCAkPycKKysJZmkKKysKKyAJIyBEZWxldGUgdGhlIGdlbmVyYXRlZCBmaWxlcy4KKyAJaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IjsgdGhlbgorIAkgIGZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSInCitAQCAtNzk0Myw3ICs4OTIwLDcgQEAgRU9GCisgCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKyAJICBycGF0aD0KKyAJICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbworLQkgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorKwkgICAgZnVuY19hcHBlbmQgcnBhdGggIiRkaXI6IgorIAkgIGRvbmUKKyAJICBjb21waWxlX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCisgCWZpCitAQCAtNzk1MSw3ICs4OTI4LDcgQEAgRU9GCisgCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKyAJICBycGF0aD0KKyAJICBmb3IgZGlyIGluICRmaW5hbGl6ZV9wZXJtX3JwYXRoOyBkbworLQkgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorKwkgICAgZnVuY19hcHBlbmQgcnBhdGggIiRkaXI6IgorIAkgIGRvbmUKKyAJICBmaW5hbGl6ZV92YXI9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgIgorIAlmaQorQEAgLTc5NjYsNiArODk0MywxMyBAQCBFT0YKKyAJJG9wdF9kcnlfcnVuIHx8ICRSTSAkb3V0cHV0CisgCSMgTGluayB0aGUgZXhlY3V0YWJsZSBhbmQgZXhpdAorIAlmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXQgJD8nCisrCisrCWlmIHRlc3QgLW4gIiRwb3N0bGlua19jbWRzIjsgdGhlbgorKwkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorKwkgIHBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKKysJICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JworKwlmaQorKworIAlleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgICBmaQorIAorQEAgLTc5OTksNiArODk4MywxMiBAQCBFT0YKKyAKKyAgICAgICBmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXQgJD8nCisgCisrICAgICAgaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCisrCWZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSIKKysJcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKKysJZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0bGlua19jbWRzIiAnZXhpdCAkPycKKysgICAgICBmaQorKworICAgICAgICMgTm93IGNyZWF0ZSB0aGUgd3JhcHBlciBzY3JpcHQuCisgICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0IgorIAorQEAgLTgwOTYsNyArOTA4Niw3IEBAIEVPRgorIAllbHNlCisgCSAgb2xkb2Jqcz0iJG9sZF9kZXBsaWJzICRub25fcGljX29iamVjdHMiCisgCSAgaWYgdGVzdCAiJHByZWxvYWQiID0geWVzICYmIHRlc3QgLWYgIiRzeW1maWxlb2JqIjsgdGhlbgorLQkgICAgb2xkb2Jqcz0iJG9sZG9ianMgJHN5bWZpbGVvYmoiCisrCSAgICBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJHN5bWZpbGVvYmoiCisgCSAgZmkKKyAJZmkKKyAJYWRkbGlicz0iJG9sZF9jb252ZW5pZW5jZSIKK0BAIC04MTA0LDEwICs5MDk0LDEwIEBAIEVPRgorIAorICAgICAgIGlmIHRlc3QgLW4gIiRhZGRsaWJzIjsgdGhlbgorIAlnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorLQlnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKysJZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKyAKKyAJZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGFkZGxpYnMKKy0Jb2xkb2Jqcz0iJG9sZG9ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisrCWZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKyAgICAgICBmaQorIAorICAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgorQEAgLTgxMTgsMTAgKzkxMDgsMTAgQEAgRU9GCisgCSMgQWRkIGFueSBvYmplY3RzIGZyb20gcHJlbG9hZGVkIGNvbnZlbmllbmNlIGxpYnJhcmllcworIAlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KKyAJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorLQkgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorKwkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisgCisgCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKKy0JICBvbGRvYmpzPSIkb2xkb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKysJICBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisgCWZpCisgCisgCSMgUE9TSVggZGVtYW5kcyBubyBwYXRocyB0byBiZSBlbmNvZGVkIGluIGFyY2hpdmVzLiAgV2UgaGF2ZQorQEAgLTgxMzksNyArOTEyOSw3IEBAIEVPRgorIAllbHNlCisgCSAgZWNobyAiY29weWluZyBzZWxlY3RlZCBvYmplY3QgZmlsZXMgdG8gYXZvaWQgYmFzZW5hbWUgY29uZmxpY3RzLi4uIgorIAkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCistCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisrCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKyAJICBmdW5jX21rZGlyX3AgIiRnZW50b3AiCisgCSAgc2F2ZV9vbGRvYmpzPSRvbGRvYmpzCisgCSAgb2xkb2Jqcz0KK0BAIC04MTYzLDE4ICs5MTUzLDI4IEBAIEVPRgorIAkJZXNhYworIAkgICAgICBkb25lCisgCSAgICAgIGZ1bmNfc2hvd19ldmFsICJsbiAkb2JqICRnZW50b3AvJG5ld29iaiB8fCBjcCAkb2JqICRnZW50b3AvJG5ld29iaiIKKy0JICAgICAgb2xkb2Jqcz0iJG9sZG9ianMgJGdlbnRvcC8kbmV3b2JqIgorKwkgICAgICBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJGdlbnRvcC8kbmV3b2JqIgorIAkgICAgICA7OworLQkgICAgKikgb2xkb2Jqcz0iJG9sZG9ianMgJG9iaiIgOzsKKysJICAgICopIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkb2JqIiA7OworIAkgICAgZXNhYworIAkgIGRvbmUKKyAJZmkKKy0JZXZhbCAiY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIiCisrCWV2YWwgY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKKyAKKyAJZnVuY19sZW4gIiAkY21kcyIKKyAJbGVuPSRmdW5jX2xlbl9yZXN1bHQKKyAJaWYgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisgCSAgY21kcz0kb2xkX2FyY2hpdmVfY21kcworKwllbGlmIHRlc3QgLW4gIiRhcmNoaXZlcl9saXN0X3NwZWMiOyB0aGVuCisrCSAgZnVuY192ZXJib3NlICJ1c2luZyBjb21tYW5kIGZpbGUgYXJjaGl2ZSBsaW5raW5nLi4uIgorKwkgIGZvciBvYmogaW4gJG9sZG9ianMKKysJICBkbworKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCisrCSAgICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIKKysJICBkb25lID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUubGliY21kCisrCSAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmxpYmNtZCIKKysJICBvbGRvYmpzPSIgJGFyY2hpdmVyX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiCisrCSAgY21kcz0kb2xkX2FyY2hpdmVfY21kcworIAllbHNlCisgCSAgIyB0aGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGxpbmsgaW4gb25lIHN0ZXAsIGxpbmsgaW4gcGFydHMKKyAJICBmdW5jX3ZlcmJvc2UgInVzaW5nIHBpZWNld2lzZSBhcmNoaXZlIGxpbmtpbmcuLi4iCitAQCAtODE4OSw3ICs5MTg5LDcgQEAgRU9GCisgCSAgZG8KKyAJICAgIGxhc3Rfb2xkb2JqPSRvYmoKKyAJICBkb25lCistCSAgZXZhbCAidGVzdF9jbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIiIKKysJICBldmFsIHRlc3RfY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKKyAJICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiCisgCSAgbGVuMD0kZnVuY19sZW5fcmVzdWx0CisgCSAgbGVuPSRsZW4wCitAQCAtODIwOCw3ICs5MjA4LDcgQEAgRU9GCisgCQlSQU5MSUI9JHNhdmVfUkFOTElCCisgCSAgICAgIGZpCisgCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorLQkgICAgICBldmFsICJjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRvbGRfYXJjaGl2ZV9jbWRzXCIiCisrCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kb2xkX2FyY2hpdmVfY21kc1wiCisgCSAgICAgIG9iamxpc3Q9CisgCSAgICAgIGxlbj0kbGVuMAorIAkgICAgZmkKK0BAIC04MjE2LDkgKzkyMTYsOSBAQCBFT0YKKyAJICBSQU5MSUI9JHNhdmVfUkFOTElCCisgCSAgb2xkb2Jqcz0kb2JqbGlzdAorIAkgIGlmIHRlc3QgIlgkb2xkb2JqcyIgPSAiWCIgOyB0aGVuCistCSAgICBldmFsICJjbWRzPVwiXCRjb25jYXRfY21kc1wiIgorKwkgICAgZXZhbCBjbWRzPVwiXCRjb25jYXRfY21kc1wiCisgCSAgZWxzZQorLQkgICAgZXZhbCAiY21kcz1cIlwkY29uY2F0X2NtZHN+XCRvbGRfYXJjaGl2ZV9jbWRzXCIiCisrCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzflwkb2xkX2FyY2hpdmVfY21kc1wiCisgCSAgZmkKKyAJZmkKKyAgICAgICBmaQorQEAgLTgyNjgsMTIgKzkyNjgsMjMgQEAgRU9GCisgCSAgICAgICoubGEpCisgCQlmdW5jX2Jhc2VuYW1lICIkZGVwbGliIgorIAkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLQkJbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisrCQlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIKKysJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHRgCisgCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisgCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorLQkJbmV3ZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzICRsaWJkaXIvJG5hbWUiCisrCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAke2x0X3N5c3Jvb3Q6Kz19JGxpYmRpci8kbmFtZSIKKysJCTs7CisrCSAgICAgIC1MKikKKysJCWZ1bmNfc3RyaXBuYW1lIC1MICcnICIkZGVwbGliIgorKwkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAtTCRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCisgCQk7OworLQkgICAgICAqKSBuZXdkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMgJGRlcGxpYiIgOzsKKysJICAgICAgLVIqKQorKwkJZnVuY19zdHJpcG5hbWUgLVIgJycgIiRkZXBsaWIiCisrCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysJCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiIC1SJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKKysJCTs7CisrCSAgICAgICopIGZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiICRkZXBsaWIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIGRvbmUKKyAJICAgIGRlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyIKK0BAIC04Mjg0LDEyICs5Mjk1LDE0IEBAIEVPRgorIAkgICAgICAqLmxhKQorIAkgICAgICAgIGZ1bmNfYmFzZW5hbWUgIiRsaWIiCisgCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistCQlsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGxpYmAKKysJCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkbGliIgorKwkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdGAKKysKKyAJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKyAJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCistCQluZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkbGliZGlyLyRuYW1lIgorKwkJZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgorIAkJOzsKKy0JICAgICAgKikgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGxpYiIgOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRsaWIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIGRvbmUKKyAJICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorQEAgLTgzMDMsMTAgKzkzMTYsMTEgQEAgRU9GCisgCQkjIHRoZSBsaWJyYXJ5OgorIAkJZnVuY19iYXNlbmFtZSAiJGxpYiIKKyAJCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0JCWxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorKwkJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRsaWIiCisrCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0YAorIAkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorIAkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKy0JCW5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRsaWJkaXIvJG5hbWUiCisrCQlmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCisgCQk7OworIAkgICAgICBlc2FjCisgCSAgICBkb25lCitAQCAtODMxOCw3ICs5MzMyLDcgQEAgRU9GCisgCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0iJGxpYiIgOzsKKyAJCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKKyAJICAgICAgZXNhYworLQkgICAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkYWJzIgorKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGFicyIKKyAJICAgIGRvbmUKKyAJICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorIAkgICAgbmV3ZGxwcmVmaWxlcz0KK0BAIC04MzI3LDcgKzkzNDEsNyBAQCBFT0YKKyAJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSIkbGliIiA7OworIAkJKikgYWJzPWBwd2RgIi8kbGliIiA7OworIAkgICAgICBlc2FjCistCSAgICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRhYnMiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkYWJzIgorIAkgICAgZG9uZQorIAkgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisgCSAgZmkKK0BAIC04NDEyLDcgKzk0MjYsNyBAQCByZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiIgorICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyB9CisgCisteyB0ZXN0ICIkbW9kZSIgPSBsaW5rIHx8IHRlc3QgIiRtb2RlIiA9IHJlbGluazsgfSAmJgorK3sgdGVzdCAiJG9wdF9tb2RlIiA9IGxpbmsgfHwgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgfSAmJgorICAgICBmdW5jX21vZGVfbGluayAkezErIiRAIn0KKyAKKyAKK0BAIC04NDMyLDkgKzk0NDYsOSBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCisgICAgIGZvciBhcmcKKyAgICAgZG8KKyAgICAgICBjYXNlICRhcmcgaW4KKy0gICAgICAtZikgUk09IiRSTSAkYXJnIjsgcm1mb3JjZT15ZXMgOzsKKy0gICAgICAtKikgUk09IiRSTSAkYXJnIiA7OworLSAgICAgICopIGZpbGVzPSIkZmlsZXMgJGFyZyIgOzsKKysgICAgICAtZikgZnVuY19hcHBlbmQgUk0gIiAkYXJnIjsgcm1mb3JjZT15ZXMgOzsKKysgICAgICAtKikgZnVuY19hcHBlbmQgUk0gIiAkYXJnIiA7OworKyAgICAgICopIGZ1bmNfYXBwZW5kIGZpbGVzICIgJGFyZyIgOzsKKyAgICAgICBlc2FjCisgICAgIGRvbmUKKyAKK0BAIC04NDQzLDI0ICs5NDU3LDIzIEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAKKyAgICAgcm1kaXJzPQorIAorLSAgICBvcmlnb2JqZGlyPSIkb2JqZGlyIgorICAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisgICAgICAgZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCisgICAgICAgZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyAgICAgICBpZiB0ZXN0ICJYJGRpciIgPSBYLjsgdGhlbgorLQlvYmpkaXI9IiRvcmlnb2JqZGlyIgorKwlvZGlyPSIkb2JqZGlyIgorICAgICAgIGVsc2UKKy0Jb2JqZGlyPSIkZGlyLyRvcmlnb2JqZGlyIgorKwlvZGlyPSIkZGlyLyRvYmpkaXIiCisgICAgICAgZmkKKyAgICAgICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKyAgICAgICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistICAgICAgdGVzdCAiJG1vZGUiID0gdW5pbnN0YWxsICYmIG9iamRpcj0iJGRpciIKKysgICAgICB0ZXN0ICIkb3B0X21vZGUiID0gdW5pbnN0YWxsICYmIG9kaXI9IiRkaXIiCisgCistICAgICAgIyBSZW1lbWJlciBvYmpkaXIgZm9yIHJlbW92YWwgbGF0ZXIsIGJlaW5nIGNhcmVmdWwgdG8gYXZvaWQgZHVwbGljYXRlcworLSAgICAgIGlmIHRlc3QgIiRtb2RlIiA9IGNsZWFuOyB0aGVuCisrICAgICAgIyBSZW1lbWJlciBvZGlyIGZvciByZW1vdmFsIGxhdGVyLCBiZWluZyBjYXJlZnVsIHRvIGF2b2lkIGR1cGxpY2F0ZXMKKysgICAgICBpZiB0ZXN0ICIkb3B0X21vZGUiID0gY2xlYW47IHRoZW4KKyAJY2FzZSAiICRybWRpcnMgIiBpbgorLQkgICoiICRvYmpkaXIgIiopIDs7CistCSAgKikgcm1kaXJzPSIkcm1kaXJzICRvYmpkaXIiIDs7CisrCSAgKiIgJG9kaXIgIiopIDs7CisrCSAgKikgZnVuY19hcHBlbmQgcm1kaXJzICIgJG9kaXIiIDs7CisgCWVzYWMKKyAgICAgICBmaQorIAorQEAgLTg0ODYsMTggKzk0OTksMTcgQEAgZnVuY19tb2RlX3VuaW5zdGFsbCAoKQorIAorIAkgICMgRGVsZXRlIHRoZSBsaWJ0b29sIGxpYnJhcmllcyBhbmQgc3ltbGlua3MuCisgCSAgZm9yIG4gaW4gJGxpYnJhcnlfbmFtZXM7IGRvCistCSAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRuIgorKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuIgorIAkgIGRvbmUKKy0JICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG9sZF9saWJyYXJ5IgorKwkgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRvbGRfbGlicmFyeSIKKyAKKy0JICBjYXNlICIkbW9kZSIgaW4KKysJICBjYXNlICIkb3B0X21vZGUiIGluCisgCSAgY2xlYW4pCistCSAgICBjYXNlICIgICRsaWJyYXJ5X25hbWVzICIgaW4KKy0JICAgICMgIiAgIiBpbiB0aGUgYmVnaW5uaW5nIGNhdGNoZXMgZW1wdHkgJGRsbmFtZQorKwkgICAgY2FzZSAiICRsaWJyYXJ5X25hbWVzICIgaW4KKyAJICAgICoiICRkbG5hbWUgIiopIDs7CistCSAgICAqKSBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRkbG5hbWUiIDs7CisrCSAgICAqKSB0ZXN0IC1uICIkZGxuYW1lIiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGRsbmFtZSIgOzsKKyAJICAgIGVzYWMKKy0JICAgIHRlc3QgLW4gIiRsaWJkaXIiICYmIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG5hbWUgJG9iamRpci8ke25hbWV9aSIKKysJICAgIHRlc3QgLW4gIiRsaWJkaXIiICYmIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kbmFtZSAkb2Rpci8ke25hbWV9aSIKKyAJICAgIDs7CisgCSAgdW5pbnN0YWxsKQorIAkgICAgaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiOyB0aGVuCitAQCAtODUyNSwxOSArOTUzNywxOSBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCisgCSAgIyBBZGQgUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCisgCSAgaWYgdGVzdCAtbiAiJHBpY19vYmplY3QiICYmCisgCSAgICAgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKy0JICAgIHJtZmlsZXM9IiRybWZpbGVzICRkaXIvJHBpY19vYmplY3QiCisrCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGRpci8kcGljX29iamVjdCIKKyAJICBmaQorIAorIAkgICMgQWRkIG5vbi1QSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KKyAJICBpZiB0ZXN0IC1uICIkbm9uX3BpY19vYmplY3QiICYmCisgCSAgICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCistCSAgICBybWZpbGVzPSIkcm1maWxlcyAkZGlyLyRub25fcGljX29iamVjdCIKKysJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZGlyLyRub25fcGljX29iamVjdCIKKyAJICBmaQorIAlmaQorIAk7OworIAorICAgICAgICopCistCWlmIHRlc3QgIiRtb2RlIiA9IGNsZWFuIDsgdGhlbgorKwlpZiB0ZXN0ICIkb3B0X21vZGUiID0gY2xlYW4gOyB0aGVuCisgCSAgbm9leGVuYW1lPSRuYW1lCisgCSAgY2FzZSAkZmlsZSBpbgorIAkgICouZXhlKQorQEAgLTg1NDcsNyArOTU1OSw3IEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAJICAgIG5vZXhlbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgCSAgICAjICRmaWxlIHdpdGggLmV4ZSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHJtZmlsZXMsCisgCSAgICAjIGFkZCAkZmlsZSB3aXRob3V0IC5leGUKKy0JICAgIHJtZmlsZXM9IiRybWZpbGVzICRmaWxlIgorKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRmaWxlIgorIAkgICAgOzsKKyAJICBlc2FjCisgCSAgIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgYSBsaWJ0b29sIHByb2dyYW0uCitAQCAtODU1Niw3ICs5NTY4LDcgQEAgZnVuY19tb2RlX3VuaW5zdGFsbCAoKQorIAkgICAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKKyAJICAgICAgcmVsaW5rX2NvbW1hbmQ9CisgCSAgICAgIGZ1bmNfc291cmNlICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorLQkgICAgICBybWZpbGVzPSIkcm1maWxlcyAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQiCisrCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQiCisgCSAgICBlbHNlCisgCSAgICAgIHJlbGlua19jb21tYW5kPQorIAkgICAgICBmdW5jX3NvdXJjZSAkZGlyLyRub2V4ZW5hbWUKK0BAIC04NTY0LDEyICs5NTc2LDEyIEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAKKyAJICAgICMgbm90ZSAkbmFtZSBzdGlsbCBjb250YWlucyAuZXhlIGlmIGl0IHdhcyBpbiAkZmlsZSBvcmlnaW5hbGx5CisgCSAgICAjIGFzIGRvZXMgdGhlIHZlcnNpb24gb2YgJGZpbGUgdGhhdCB3YXMgYWRkZWQgaW50byAkcm1maWxlcworLQkgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbmFtZSAkb2JqZGlyLyR7bmFtZX1TLiR7b2JqZXh0fSIKKysJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kbmFtZSAkb2Rpci8ke25hbWV9Uy4ke29iamV4dH0iCisgCSAgICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllcyAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCistCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvbHQtJG5hbWUiCisrCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci9sdC0kbmFtZSIKKyAJICAgIGZpCisgCSAgICBpZiB0ZXN0ICJYJG5vZXhlbmFtZSIgIT0gIlgkbmFtZSIgOyB0aGVuCistCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvbHQtJHtub2V4ZW5hbWV9LmMiCisrCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci9sdC0ke25vZXhlbmFtZX0uYyIKKyAJICAgIGZpCisgCSAgZmkKKyAJZmkKK0BAIC04NTc3LDcgKzk1ODksNiBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCisgICAgICAgZXNhYworICAgICAgIGZ1bmNfc2hvd19ldmFsICIkUk0gJHJtZmlsZXMiICdleGl0X3N0YXR1cz0xJworICAgICBkb25lCistICAgIG9iamRpcj0iJG9yaWdvYmpkaXIiCisgCisgICAgICMgVHJ5IHRvIHJlbW92ZSB0aGUgJHtvYmpkaXJ9cyBpbiB0aGUgZGlyZWN0b3JpZXMgd2hlcmUgd2UgZGVsZXRlZCBmaWxlcworICAgICBmb3IgZGlyIGluICRybWRpcnM7IGRvCitAQCAtODU4OSwxNiArOTYwMCwxNiBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCisgICAgIGV4aXQgJGV4aXRfc3RhdHVzCisgfQorIAorLXsgdGVzdCAiJG1vZGUiID0gdW5pbnN0YWxsIHx8IHRlc3QgIiRtb2RlIiA9IGNsZWFuOyB9ICYmCisreyB0ZXN0ICIkb3B0X21vZGUiID0gdW5pbnN0YWxsIHx8IHRlc3QgIiRvcHRfbW9kZSIgPSBjbGVhbjsgfSAmJgorICAgICBmdW5jX21vZGVfdW5pbnN0YWxsICR7MSsiJEAifQorIAorLXRlc3QgLXogIiRtb2RlIiAmJiB7CisrdGVzdCAteiAiJG9wdF9tb2RlIiAmJiB7CisgICBoZWxwPSIkZ2VuZXJpY19oZWxwIgorICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgTU9ERSIKKyB9CisgCisgdGVzdCAteiAiJGV4ZWNfY21kIiAmJiBcCistICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkbW9kZSciCisrICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkb3B0X21vZGUnIgorIAorIGlmIHRlc3QgLW4gIiRleGVjX2NtZCI7IHRoZW4KKyAgIGV2YWwgZXhlYyAiJGV4ZWNfY21kIgorZGlmZiAtLWdpdCBhL2x0b3B0aW9ucy5tNCBiL2x0b3B0aW9ucy5tNAoraW5kZXggNWVmMTJjZWQyYS4uMTdjZmQ1MWMwYiAxMDA2NDQKKy0tLSBhL2x0b3B0aW9ucy5tNAorKysrIGIvbHRvcHRpb25zLm00CitAQCAtOCw3ICs4LDcgQEAKKyAjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorICMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisgCistIyBzZXJpYWwgNiBsdG9wdGlvbnMubTQKKysjIHNlcmlhbCA3IGx0b3B0aW9ucy5tNAorIAorICMgVGhpcyBpcyB0byBoZWxwIGFjbG9jYWwgZmluZCB0aGVzZSBtYWNyb3MsIGFzIGl0IGNhbid0IHNlZSBtNF9kZWZpbmUuCisgQUNfREVGVU4oW0xUT1BUSU9OU19WRVJTSU9OXSwgW200X2lmKFsxXSldKQorZGlmZiAtLWdpdCBhL2x0dmVyc2lvbi5tNCBiL2x0dmVyc2lvbi5tNAoraW5kZXggYmY4N2Y3NzEzMi4uOWM3YjVkNDExOCAxMDA2NDQKKy0tLSBhL2x0dmVyc2lvbi5tNAorKysrIGIvbHR2ZXJzaW9uLm00CitAQCAtNywxNyArNywxNyBAQAorICMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisgIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyAKKy0jIEdlbmVyYXRlZCBmcm9tIGx0dmVyc2lvbi5pbi4KKysjIEBjb25maWd1cmVfaW5wdXRACisgCistIyBzZXJpYWwgMzEzNCBsdHZlcnNpb24ubTQKKysjIHNlcmlhbCAzMjkzIGx0dmVyc2lvbi5tNAorICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wKKyAKKy1tNF9kZWZpbmUoW0xUX1BBQ0tBR0VfVkVSU0lPTl0sIFsyLjIuN2FdKQorLW00X2RlZmluZShbTFRfUEFDS0FHRV9SRVZJU0lPTl0sIFsxLjMxMzRdKQorK200X2RlZmluZShbTFRfUEFDS0FHRV9WRVJTSU9OXSwgWzIuNF0pCisrbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1JFVklTSU9OXSwgWzEuMzI5M10pCisgCisgQUNfREVGVU4oW0xUVkVSU0lPTl9WRVJTSU9OXSwKKy1bbWFjcm9fdmVyc2lvbj0nMi4yLjdhJworLW1hY3JvX3JldmlzaW9uPScxLjMxMzQnCisrW21hY3JvX3ZlcnNpb249JzIuNCcKKyttYWNyb19yZXZpc2lvbj0nMS4zMjkzJworIF9MVF9ERUNMKCwgbWFjcm9fdmVyc2lvbiwgMCwgW1doaWNoIHJlbGVhc2Ugb2YgbGlidG9vbC5tNCB3YXMgdXNlZD9dKQorIF9MVF9ERUNMKCwgbWFjcm9fcmV2aXNpb24sIDApCisgXSkKK2RpZmYgLS1naXQgYS9sdH5vYnNvbGV0ZS5tNCBiL2x0fm9ic29sZXRlLm00CitpbmRleCBiZjkyYjVlMDc5Li5jNTczZGE5MGM1IDEwMDY0NAorLS0tIGEvbHR+b2Jzb2xldGUubTQKKysrKyBiL2x0fm9ic29sZXRlLm00CitAQCAtNyw3ICs3LDcgQEAKKyAjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorICMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisgCistIyBzZXJpYWwgNCBsdH5vYnNvbGV0ZS5tNAorKyMgc2VyaWFsIDUgbHR+b2Jzb2xldGUubTQKKyAKKyAjIFRoZXNlIGV4aXN0IGVudGlyZWx5IHRvIGZvb2wgYWNsb2NhbCB3aGVuIGJvb3RzdHJhcHBpbmcgbGlidG9vbC4KKyAjCitkaWZmIC0tZ2l0IGEvb3Bjb2Rlcy9jb25maWd1cmUgYi9vcGNvZGVzL2NvbmZpZ3VyZQoraW5kZXggMTc1MzBmNTRiOS4uNzliMzk2MTFjMiAxMDA3NTUKKy0tLSBhL29wY29kZXMvY29uZmlndXJlCisrKysgYi9vcGNvZGVzL2NvbmZpZ3VyZQorQEAgLTY1MCw2ICs2NTAsOSBAQCBPVE9PTAorIExJUE8KKyBOTUVESVQKKyBEU1lNVVRJTAorK01BTklGRVNUX1RPT0wKKythY19jdF9BUgorK0RMTFRPT0wKKyBPQkpEVU1QCisgTE5fUworIE5NCitAQCAtNzYzLDYgKzc2Niw3IEBAIGVuYWJsZV9zdGF0aWMKKyB3aXRoX3BpYworIGVuYWJsZV9mYXN0X2luc3RhbGwKKyB3aXRoX2dudV9sZAorK3dpdGhfbGlidG9vbF9zeXNyb290CisgZW5hYmxlX2xpYnRvb2xfbG9jaworIGVuYWJsZV90YXJnZXRzCisgZW5hYmxlX3dlcnJvcgorQEAgLTE0MjMsNiArMTQyNyw4IEBAIE9wdGlvbmFsIFBhY2thZ2VzOgorICAgLS13aXRoLXBpYyAgICAgICAgICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib3RoXQorICAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQorKyAgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD1ESVIgU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKKysgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS4KKyAKKyBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgIENDICAgICAgICAgIEMgY29tcGlsZXIgY29tbWFuZAorQEAgLTUxMTUsOCArNTEyMSw4IEBAIGVzYWMKKyAKKyAKKyAKKy1tYWNyb192ZXJzaW9uPScyLjIuN2EnCistbWFjcm9fcmV2aXNpb249JzEuMzEzNCcKKyttYWNyb192ZXJzaW9uPScyLjQnCisrbWFjcm9fcmV2aXNpb249JzEuMzI5MycKKyAKKyAKKyAKK0BAIC01MTU2LDcgKzUxNjIsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9CisgIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCistaWYgdGVzdCAiWGBwcmludCAtciAtLSAtbiAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKytpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICAgRUNITz0ncHJpbnQgLXIgLS0nCisgZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KK0BAIC01ODQyLDggKzU4NDgsOCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OworICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCisgeHNpX3NoZWxsPW5vCisgKCBfbHRfZHVtbXk9ImEvYi9jIgorLSAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKy0gICAgICA9IGMsYS9iLCwgXAorKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKysgICAgICA9IGMsYS9iLGIvYywgXAorICAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICAmJiB4c2lfc2hlbGw9eWVzCitAQCAtNTg5Miw2ICs1ODk4LDgwIEBAIGVzYWMKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b19ob3N0X2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqLSotY3lnd2luKiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9fdG9vbF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgICNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KKytsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKytjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC01OTA4LDYgKzU5ODgsMTEgQEAgY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyBlc2FjCisgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworIGNhc2UgJGhvc3Rfb3MgaW4KKysgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisrICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKysgICAgZmkKKysgICAgOzsKKyAgIGRhcndpbiopCisgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworQEAgLTYwNzYsNyArNjE2MSw4IEBAIG1pbmd3KiB8IHB3MzIqKQorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgIGVsc2UKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCisrICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKysgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgICBmaQorICAgOzsKK0BAIC02MjMwLDYgKzYzMTYsMjEgQEAgZXNhYworIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1CisgJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CisrCisrZmlsZV9tYWdpY19nbG9iPQorK3dhbnRfbm9jYXNlZ2xvYj1ubworK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisrICBjYXNlICRob3N0X29zIGluCisrICBtaW5ndyogfCBwdzMyKikKKysgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKKysgICAgZWxzZQorKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1wxXVwvW1wxXVwvZzsvZyJgCisrICAgIGZpCisrICAgIDs7CisrICBlc2FjCisrZmkKKysKKyBmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKKyB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KK0BAIC02MjQzLDExICs2MzQ0LDE2NCBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKyAKKyAKKyAKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyAKKyAKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCisraWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQorKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgorKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X0RMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KKysgICAgRExMVE9PTD0iZmFsc2UiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCisrICBmaQorK2Vsc2UKKysgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJworKworK2Nhc2UgJGhvc3Rfb3MgaW4KKytjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCisrICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCisrICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KKysgICotLWlkZW50aWZ5LXN0cmljdCopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgorKyAgICA7OworKyAgKikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCisrICAgIDs7CisrICBlc2FjCisrICA7OworKyopCisrICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKKysgIDs7CisrZXNhYworKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY2OyB9Cisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrdGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworKworKworKworKworKworKworKworK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgIGZvciBhY19wcm9nIGluIGFyCisrICBkbworKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02MjYzLDcgKzY1MTcsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCisrICAgIGFjX2N2X3Byb2dfQVI9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02MjgzLDExICs2NTM3LDE1IEBAICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKyAKKysgICAgdGVzdCAtbiAiJEFSIiAmJiBicmVhaworKyAgZG9uZQorIGZpCistaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCisraWYgdGVzdCAteiAiJEFSIjsgdGhlbgorICAgYWNfY3RfQVI9JEFSCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKKysgIGZvciBhY19wcm9nIGluIGFyCisrZG8KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTYzMDMsNyArNjU2MSw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02MzIyLDYgKzY1ODAsMTAgQEAgZWxzZQorICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKysKKysgIHRlc3QgLW4gIiRhY19jdF9BUiIgJiYgYnJlYWsKKytkb25lCisrCisgICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KKyAgICAgQVI9ImZhbHNlIgorICAgZWxzZQorQEAgLTYzMzMsMTYgKzY1OTUsNzIgQEAgYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisgZXNhYworICAgICBBUj0kYWNfY3RfQVIKKyAgIGZpCistZWxzZQorLSAgQVI9IiRhY19jdl9wcm9nX0FSIgorIGZpCisgCistdGVzdCAteiAiJEFSIiAmJiBBUj1hcgorLXRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CisrOiAke0FSPWFyfQorKzogJHtBUl9GTEFHUz1jcnV9CisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2FyX2F0X2ZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9hcl9hdF9maWxlPW5vCisrICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKytpbnQKKyttYWluICgpCisreworIAorKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKysgIGVjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiY1JworKyAgICAgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisrCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCisrCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQorKwl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KKysgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisgCisrZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJfYXRfZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9hcl9hdF9maWxlIiA+JjY7IH0KKyAKKytpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCisrICBhcmNoaXZlcl9saXN0X3NwZWM9CisrZWxzZQorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCisrZmkKKyAKKyAKKyAKK0BAIC02Njg0LDggKzcwMDIsOCBAQCBlc2FjCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKyAKKyAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisgCisgIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCisgb3B0X2NyPQorQEAgLTY3MjEsNiArNzAzOSw3IEBAIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKyAgIGVsc2UKKyAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cKCRzeW1jb2RlJHN5bWNvZGUqXClbCSBdWwkgXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgIGZpCisrICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisgCisgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgIHBpcGVfd29ya3M9bm8KK0BAIC02NzYyLDYgKzcwODEsMTggQEAgX0xUX0VPRgorICAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisrLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisrI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKysvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKysgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxpZiBkZWZpbmVkKF9fb3NmX18pCisrLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxzZQorKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CisrI2VuZGlmCisrCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisgI2VuZGlmCitAQCAtNjc3Myw3ICs3MTA0LDcgQEAgX0xUX0VPRgorIAkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorIAorIC8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KKy1jb25zdCBzdHJ1Y3QgeworK0xUX0RMU1lNX0NPTlNUIHN0cnVjdCB7CisgICBjb25zdCBjaGFyICpuYW1lOworICAgdm9pZCAgICAgICAqYWRkcmVzczsKKyB9CitAQCAtNjc5OSw4ICs3MTMwLDggQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyBfTFRfRU9GCisgCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKyAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKy0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorLQkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKyAJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCisgCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CitAQCAtNjgxMCw4ICs3MTQxLDggQEAgX0xUX0VPRgorICAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgCSAgICBwaXBlX3dvcmtzPXllcworIAkgIGZpCistCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKKy0JICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKysJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUworKwkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUworIAllbHNlCisgCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CisgCWZpCitAQCAtNjg0OCw2ICs3MTc5LDE2IEBAIGVsc2UKKyAkYXNfZWNobyAib2siID4mNjsgfQorIGZpCisgCisrIyBSZXNwb25zZSBmaWxlIHN1cHBvcnQuCisraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2VsaWYgJE5NIC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ1tAXUZJTEUnID4vZGV2L251bGw7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2ZpCisrCisrCisrCisrCisgCisgCisgCitAQCAtNjg2NCw2ICs3MjA1LDQ1IEBAIGZpCisgCisgCisgCisrCisrCisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3lzcm9vdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN5c3Jvb3QuLi4gIiA+JjY7IH0KKysKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYnRvb2wtc3lzcm9vdCB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICB3aXRodmFsPSR3aXRoX2xpYnRvb2xfc3lzcm9vdDsKKytlbHNlCisrICB3aXRoX2xpYnRvb2xfc3lzcm9vdD1ubworK2ZpCisrCisrCisrbHRfc3lzcm9vdD0KKytjYXNlICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IGluICMoCisrIHllcykKKysgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKysgICBmaQorKyAgIDs7ICMoCisrIC8qKQorKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX2xpYnRvb2xfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKyAgIDs7ICMoCisrIG5vfCcnKQorKyAgIDs7ICMoCisrICopCisrICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjUKKyskYXNfZWNobyAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNjsgfQorKyAgIGFzX2ZuX2Vycm9yICJUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguIiAiJExJTkVOTyIgNQorKyAgIDs7CisrZXNhYworKworKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtsdF9zeXNyb290Oi1ub30iID4mNQorKyRhc19lY2hvICIke2x0X3N5c3Jvb3Q6LW5vfSIgPiY2OyB9CisgCisgCisgCitAQCAtNzA3NSw2ICs3NDU1LDEyMyBAQCBlc2FjCisgCisgbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisgCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1tdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJE1BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N0X01BTklGRVNUX1RPT0w9JE1BTklGRVNUX1RPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9Im10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9NQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPSB4OyB0aGVuCisrICAgIE1BTklGRVNUX1RPT0w9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBNQU5JRkVTVF9UT09MPSRhY19jdF9NQU5JRkVTVF9UT09MCisrICBmaQorK2Vsc2UKKysgIE1BTklGRVNUX1RPT0w9IiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mNQorKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKysgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcworKyAgZmkKKysgIHJtIC1mIGNvbmZ0ZXN0KgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorKyAgTUFOSUZFU1RfVE9PTD06CisrZmkKKysKKysKKysKKysKKysKKyAKKyAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKK0BAIC03NjM4LDYgKzgxMzUsOCBAQCBfTFRfRU9GCisgICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CisgICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQorICAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKKysgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQorKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiY1CisgICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCisgaW50IG1haW4oKSB7IHJldHVybiAwO30KKyBfTFRfRU9GCitAQCAtNzgwMyw3ICs4MzAyLDggQEAgZmkKKyBMSUJUT09MX0RFUFM9IiRsdG1haW4iCisgCisgIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KKy1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKytMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpciknCisrTElCVE9PTD0iJExJQlRPT0wvJHtob3N0X2FsaWFzfS1saWJ0b29sIgorIAorIAorIAorQEAgLTc4OTIsNyArODM5Miw3IEBAIGFpeDMqKQorIGVzYWMKKyAKKyAjIEdsb2JhbCB2YXJpYWJsZXM6Cistb2ZpbGU9bGlidG9vbAorK29maWxlPSR7aG9zdF9hbGlhc30tbGlidG9vbAorIGNhbl9idWlsZF9zaGFyZWQ9eWVzCisgCisgIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCitAQCAtODE5MCw4ICs4NjkwLDYgQEAgZmkKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKyAKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKy0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAorICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKK0BAIC04MzU3LDYgKzg4NTUsMTIgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy0tc2hhcmVkJworIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLS1zdGF0aWMnCisgCTs7CisrICAgICAgbmFnZm9yKikKKysJIyBOQUcgRm9ydHJhbiBjb21waWxlcgorKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCisrCWx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJworKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisrCTs7CisgICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKyAJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKK0BAIC04NDE5LDcgKzg5MjMsNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCisrICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICAqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7CitAQCAtODQ3NiwxMyArODk4MCwxNyBAQCBjYXNlICRob3N0X29zIGluCisgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgIDs7CisgZXNhYworLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNQorLSRhc19lY2hvICIkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorLQorLQorLQorLQorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CisrbHRfcHJvZ19jb21waWxlcl9waWM9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljCisgCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KK0BAIC04NTQzLDYgKzkwNTEsMTEgQEAgZmkKKyAKKyAKKyAKKysKKysKKysKKysKKysKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorICMKK0BAIC04ODkzLDcgKzk0MDYsOCBAQCBfTFRfRU9GCisgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhjbHVkZV9leHBzeW1zPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCisgCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKK0BAIC04OTkyLDEyICs5NTA2LDEyIEBAIF9MVF9FT0YKKyAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJworLQkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworKwkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKyAJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKysJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworIAkgIGZpCisgCSAgOzsKKyAJZXNhYworQEAgLTkwMTEsOCArOTUyNSw4IEBAIF9MVF9FT0YKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworIAl3bGFyYz0KKyAgICAgICBlbHNlCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGZpCisgICAgICAgOzsKKyAKK0BAIC05MDMwLDggKzk1NDQsOCBAQCBfTFRfRU9GCisgCisgX0xUX0VPRgorICAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtOTA3Nyw4ICs5NTkxLDggQEAgX0xUX0VPRgorIAorICAgICAqKQorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTkyMDgsNyArOTcyMiwxMyBAQCBfTFRfRU9GCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCisgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysgICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05MjIxLDIyICs5NzQxLDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKK0BAIC05MjQ4LDcgKzk3NzUsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCWVsc2UKKyAJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorIAkgIyBlbXB0eSBleGVjdXRhYmxlLgorLQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTkyNjEsMjIgKzk3OTQsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAJIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKK0BAIC05MzIxLDIwICs5ODYxLDYzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKy0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCistICAgICAgbGliZXh0PWxpYgorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCistICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKy0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorLSAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKy0gICAgICBmaXhfc3JjZmlsZV9wYXRoPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKy0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgY2wqKQorKwkjIE5hdGl2ZSBNU1ZDCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKysJZmlsZV9saXN0X3NwZWM9J0AnCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGVsc2UKKysJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZml+CisrCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgIGxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysJIyBEb24ndCB1c2UgcmFubGliCisrCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKKysJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisrCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgKi5leGV8Ki5FWEUpIDs7CisrCSAgICAqKQorKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIDs7CisrCSAgZXNhY34KKysJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKysJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworKwkgIGZpJworKwk7OworKyAgICAgICopCisrCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCTs7CisrICAgICAgZXNhYworICAgICAgIDs7CisgCisgICAgIGRhcndpbiogfCByaGFwc29keSopCitAQCAtOTM5NSw3ICs5OTc4LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCitAQCAtOTQwMyw3ICs5OTg2LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXg5KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisrCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGZpCitAQCAtOTQxOSw3ICsxMDAwMiw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4MTAqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICAgZmkKK0BAIC05NDQzLDEwICsxMDAyNiwxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWlhNjQqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJKikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAllc2FjCisgICAgICAgZWxzZQorQEAgLTk1MjUsMjMgKzEwMTA4LDM2IEBAIGZpCisgCisgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisgCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKyAJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KKy0gICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCistICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCistICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisrCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorKwkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCisrCSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistaW50IGZvbyh2b2lkKSB7fQorK2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH0KKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CistICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCistCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXMKKytlbHNlCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD1ubworIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNjsgfQorKwlpZiB0ZXN0ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID0geWVzOyB0aGVuCisrICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWZpCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKK0BAIC05NjI2LDcgKzEwMjIyLDcgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgIGVsc2UKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCitAQCAtOTY0NSw5ICsxMDI0MSw5IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAl3bGFyYz0nJHt3bH0nCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CistCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICBlbHNlCisgCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorIAkqIkNvbXBpbGVycyA1LjAiKikKK0BAIC0xMDIyMyw4ICsxMDgxOSw5IEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgIG5lZWRfdmVyc2lvbj1ubworICAgbmVlZF9saWJfcHJlZml4PW5vCisgCistICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KKy0gIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKiB8IHllcyxjZWdjYyopCisrICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisrICB5ZXMsKikKKysgICAgIyBnY2MKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KK0BAIC0xMDI1NywxMyArMTA4NTQsNzEgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgICA7OworICAgICBlc2FjCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisrICAgIDs7CisrCisrICAqLGNsKikKKysgICAgIyBOYXRpdmUgTVNWQworKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJworKworKyAgICBjYXNlICRidWlsZF9vcyBpbgorKyAgICBtaW5ndyopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKKysgICAgICBJRlM9JzsnCisrICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorKyAgICAgIGRvCisrICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisrICAgICAgZG9uZQorKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFthLXpBLVpdXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKysgICAgICA7OworKyAgICBjeWd3aW4qKQorKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKysgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKysgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisrICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCisrICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKysgICAgICBlbHNlCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgZmkKKysgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKKysgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisrICAgICAgOzsKKysgICAgZXNhYworKworKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisrICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKysgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorKyAgICAgICAkUk0gXCRkbHBhdGgnCisrICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJworICAgICA7OworIAorICAgKikKKysgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgICA7OworICAgZXNhYworLSAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICAgc2hsaWJwYXRoX3Zhcj1QQVRICisgICA7OworQEAgLTEwMzU1LDcgKzExMDEwLDcgQEAgaGFpa3UqKQorICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCistICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3QvYmVvcy9zeXN0ZW0vbGliJworKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICA7OworIAorQEAgLTExMTk1LDEwICsxMTg1MCwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTExMzAxLDEwICsxMTk1NiwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTEyNTQzLDcgKzEzMTk4LDcgQEAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gInllcyI7IHRoZW4KKyAjIHNpbmNlIGxpYmJmZCBtYXkgbm90IHB1bGwgaW4gdGhlIGVudGlyZXR5IG9mIGxpYmliZXJ0eS4KKyAgIHg9YHNlZCAtbiAtZSAncy9eWyAJXSpQSUNGTEFHWyAJXSo9WyAJXSovL3AnIDwgLi4vbGliaWJlcnR5L01ha2VmaWxlIHwgc2VkIC1uICckcCdgCisgICBpZiB0ZXN0IC1uICIkeCI7IHRoZW4KKy0gICAgU0hBUkVEX0xJQkFERD0iLUxgcHdkYC8uLi9saWJpYmVydHkvcGljIC1saWJlcnR5IgorKyAgICBTSEFSRURfTElCQUREPSJgcHdkYC8uLi9saWJpYmVydHkvcGljL2xpYmliZXJ0eS5hIgorICAgZmkKKyAKKyAgIGNhc2UgIiR7aG9zdH0iIGluCitAQCAtMTM1MjAsMTMgKzE0MTc1LDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b190b29sX2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2ZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyt3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J2AkRUNITyAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSdgJEVDSE8gIiRhcmNoaXZlcl9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTM1NDEsMTQgKzE0MjAzLDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfc3lzcm9vdD0nYCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE1BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK01BTklGRVNUX1RPT0w9J2AkRUNITyAiJE1BTklGRVNUX1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIERTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIExJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTEzNTgxLDEyICsxNDI0NiwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcQorIGhhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maXhfc3JjZmlsZV9wYXRoPSdgJEVDSE8gIiRmaXhfc3JjZmlsZV9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBwcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGxpbmtfY21kcz0nYCRFQ0hPICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xMzY0MSw4ICsxNDMwNiwxMyBAQCByZWxvYWRfZmxhZyBcCisgT0JKRFVNUCBcCisgZGVwbGlic19jaGVja19tZXRob2QgXAorIGZpbGVfbWFnaWNfY21kIFwKKytmaWxlX21hZ2ljX2dsb2IgXAorK3dhbnRfbm9jYXNlZ2xvYiBcCisrRExMVE9PTCBcCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgXAorIEFSIFwKKyBBUl9GTEFHUyBcCisrYXJjaGl2ZXJfbGlzdF9zcGVjIFwKKyBTVFJJUCBcCisgUkFOTElCIFwKKyBDQyBcCitAQCAtMTM2NTIsMTIgKzE0MzIyLDE0IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCisrbm1fZmlsZV9saXN0X3NwZWMgXAorIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKKy1sdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCisrbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIFwKKyBuZWVkX2xvY2tzIFwKKytNQU5JRkVTVF9UT09MIFwKKyBEU1lNVVRJTCBcCisgTk1FRElUIFwKKyBMSVBPIFwKK0BAIC0xMzY3Myw3ICsxNDM0NSw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKKyBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKKy1maXhfc3JjZmlsZV9wYXRoIFwKKyBleGNsdWRlX2V4cHN5bXMgXAorIGluY2x1ZGVfZXhwc3ltcyBcCisgZmlsZV9saXN0X3NwZWMgXAorQEAgLTEzNzA5LDYgKzE0MzgwLDcgQEAgbW9kdWxlX2NtZHMgXAorIG1vZHVsZV9leHBzeW1fY21kcyBcCisgZXhwb3J0X3N5bWJvbHNfY21kcyBcCisgcHJlbGlua19jbWRzIFwKKytwb3N0bGlua19jbWRzIFwKKyBwb3N0aW5zdGFsbF9jbWRzIFwKKyBwb3N0dW5pbnN0YWxsX2NtZHMgXAorIGZpbmlzaF9jbWRzIFwKK0BAIC0xNDQ2NSw3ICsxNTEzNyw4IEBAICRhc19lY2hvIFgiJGZpbGUiIHwKKyAjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKyAjCisgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKy0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyMgICAgICAgICAgICAgICAgIEluYy4KKyAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorICMKKyAjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCitAQCAtMTQ1NjgsMTkgKzE1MjQxLDQyIEBAIFNQMk5MPSRsdF9sdF9TUDJOTAorICMgdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlcy4KKyBOTDJTUD0kbHRfbHRfTkwyU1AKKyAKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlIG5hbWVzIHRvIFwkaG9zdCBmb3JtYXQuCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorKworKyMgY29udmVydCBcJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorKworICMgQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXIuCisgT0JKRFVNUD0kbHRfT0JKRFVNUAorIAorICMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgCistIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIi4KKysjIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisgZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisgCisrIyBIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKytmaWxlX21hZ2ljX2dsb2I9JGx0X2ZpbGVfbWFnaWNfZ2xvYgorKworKyMgRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK3dhbnRfbm9jYXNlZ2xvYj0kbHRfd2FudF9ub2Nhc2VnbG9iCisrCisrIyBETEwgY3JlYXRpb24gcHJvZ3JhbS4KKytETExUT09MPSRsdF9ETExUT09MCisrCisrIyBDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzLgorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorKworICMgVGhlIGFyY2hpdmVyLgorIEFSPSRsdF9BUgorKworKyMgRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmUuCisgQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisgCisrIyBIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXIuCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9hcmNoaXZlcl9saXN0X3NwZWMKKysKKyAjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgorIFNUUklQPSRsdF9TVFJJUAorIAorQEAgLTE0NjEwLDYgKzE1MzA2LDEyIEBAIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisgIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KKyBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKKyAKKysjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgXCROTS4KKytubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKKysKKysjIFRoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyxhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorK2x0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKKysKKyAjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KKyBvYmpkaXI9JG9iamRpcgorIAorQEAgLTE0NjE5LDYgKzE1MzIxLDkgQEAgTUFHSUNfQ01EPSRNQUdJQ19DTUQKKyAjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworIG5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKKyAKKysjIE1hbmlmZXN0IHRvb2wuCisrTUFOSUZFU1RfVE9PTD0kbHRfTUFOSUZFU1RfVE9PTAorKworICMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KKyBEU1lNVVRJTD0kbHRfRFNZTVVUSUwKKyAKK0BAIC0xNDczMywxMiArMTU0MzgsMTIgQEAgd2l0aF9nY2M9JEdDQworICMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KKyBub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCisgCistIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCistCisgIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCisgcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCisgCisrIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCisrCisgIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorIGxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCisgCitAQCAtMTQ4MjUsOSArMTU1MzAsNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCisgIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCisgbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicworIAorLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KKy1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCistCisgIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKyAKK0BAIC0xNDg0Myw2ICsxNTU0NSw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisgIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KKyBwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworIAorKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KKytwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzCisrCisgIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCisgZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCisgCitAQCAtMTQ4NzUsMjEwICsxNTU4MCwxNjkgQEAgbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisgICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKy0gIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBjYXNlICR4c2lfc2hlbGwgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorLSMgY2FsbDoKKy0jICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorLSMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorLSMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorLSMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLSMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorLSMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKy0jIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KKy1mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorLSAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifQorLX0KKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9JHsxJSU9Kn0KKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz0kezEjKj19CistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworLSAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sbworLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKQorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKy0gIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKy0gIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCistICBlbHNlCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKy0gIGZpCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkYmFzZW5hbWUiYAorLX0KKy0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgY2FzZSAkezJ9IGluCistICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CistICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKy0gIGVzYWMKKy19CistCistIyBzZWQgc2NyaXB0czoKKy1teV9zZWRfbG9uZ19vcHQ9JzFzL15cKC1bXj1dKlwpPS4qL1wxLztxJworLW15X3NlZF9sb25nX2FyZz0nMXMvXi1bXj1dKj0vLycKKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAorLSAgZnVuY19vcHRfc3BsaXRfYXJnPWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAorLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLlteLl0qJC8ubG8vJ2AKKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJEAiYAorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKKy19CistCistX0xUX0VPRgorLWVzYWMKKy0KKy1jYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDErPVwkMiIKKy19CistX0xUX0VPRgorLSAgICA7OworLSAgKikKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDE9XCQkMVwkMiIKKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgZXNhYworLQorLQorLSAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKysKKysgIGlmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWUgL2NcCisrZnVuY19kaXJuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfYmFzZW5hbWUgL2NcCisrZnVuY19iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIC9jXAorK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3RyaXBuYW1lICgpJC8sL159ICMgZnVuY19zdHJpcG5hbWUgL2NcCisrZnVuY19zdHJpcG5hbWUgKClcCisre1wKKytcICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmVcCisrXCAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuXAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M31cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3N0cmlwbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfbG9uZ19vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IC9jXAorK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfVwKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfbG9uZ19vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X3Nob3J0X29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IC9jXAorK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fVwKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sbzJvICgpJC8sL159ICMgZnVuY19sbzJvIC9jXAorK2Z1bmNfbG8ybyAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7O1wKKytcICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sbzJvIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY194Zm9ybSAoKSQvLC9efSAjIGZ1bmNfeGZvcm0gL2NcCisrZnVuY194Zm9ybSAoKVwKKyt7XAorKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3hmb3JtIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcml0aCAoKSQvLC9efSAjIGZ1bmNfYXJpdGggL2NcCisrZnVuY19hcml0aCAoKVwKKyt7XAorKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSlcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXJpdGggaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xlbiAoKSQvLC9efSAjIGZ1bmNfbGVuIC9jXAorK2Z1bmNfbGVuICgpXAorK3tcCisrICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sZW4gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKytmaQorKworK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kIC9jXAorK2Z1bmNfYXBwZW5kICgpXAorK3tcCisrICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmRfcXVvdGVkICgpJC8sL159ICMgZnVuY19hcHBlbmRfcXVvdGVkIC9jXAorK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKVwKKyt7XAorK1wgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSJcCisrXCAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmRfcXVvdGVkIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZWxzZQorKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2ZpCisrCisraWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiYyO30KKytmaQorKworKworKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgIGNobW9kICt4ICIkb2ZpbGUiCisgCitkaWZmIC0tZ2l0IGEvb3Bjb2Rlcy9jb25maWd1cmUuYWMgYi9vcGNvZGVzL2NvbmZpZ3VyZS5hYworaW5kZXggYTlmYmZkNjFmMS4uYzQzNzgwZjY0ZCAxMDA2NDQKKy0tLSBhL29wY29kZXMvY29uZmlndXJlLmFjCisrKysgYi9vcGNvZGVzL2NvbmZpZ3VyZS5hYworQEAgLTE2Nyw3ICsxNjcsNyBAQCBjaGFuZ2VxdW90ZSgsKWRubAorICAgeD1gc2VkIC1uIC1lICdzL15bIAldKlBJQ0ZMQUdbIAldKj1bIAldKi8vcCcgPCAuLi9saWJpYmVydHkvTWFrZWZpbGUgfCBzZWQgLW4gJyRwJ2AKKyBjaGFuZ2VxdW90ZShbLF0pZG5sCisgICBpZiB0ZXN0IC1uICIkeCI7IHRoZW4KKy0gICAgU0hBUkVEX0xJQkFERD0iLUxgcHdkYC8uLi9saWJpYmVydHkvcGljIC1saWJlcnR5IgorKyAgICBTSEFSRURfTElCQUREPSJgcHdkYC8uLi9saWJpYmVydHkvcGljL2xpYmliZXJ0eS5hIgorICAgZmkKKyAKKyAgIGNhc2UgIiR7aG9zdH0iIGluCitkaWZmIC0tZ2l0IGEvemxpYi9jb25maWd1cmUgYi96bGliL2NvbmZpZ3VyZQoraW5kZXggZGMyZDllZDM4My4uZWQ5YTQ5MmY1YyAxMDA3NTUKKy0tLSBhL3psaWIvY29uZmlndXJlCisrKysgYi96bGliL2NvbmZpZ3VyZQorQEAgLTYxNCw4ICs2MTQsMTEgQEAgT1RPT0wKKyBMSVBPCisgTk1FRElUCisgRFNZTVVUSUwKKytNQU5JRkVTVF9UT09MCisgUkFOTElCCisrYWNfY3RfQVIKKyBBUgorK0RMTFRPT0wKKyBPQkpEVU1QCisgTE5fUworIE5NCitAQCAtNzM3LDYgKzc0MCw3IEBAIGVuYWJsZV9zdGF0aWMKKyB3aXRoX3BpYworIGVuYWJsZV9mYXN0X2luc3RhbGwKKyB3aXRoX2dudV9sZAorK3dpdGhfbGlidG9vbF9zeXNyb290CisgZW5hYmxlX2xpYnRvb2xfbG9jaworIGVuYWJsZV9ob3N0X3NoYXJlZAorICcKK0BAIC0xMzg1LDYgKzEzODksOCBAQCBPcHRpb25hbCBQYWNrYWdlczoKKyAgIC0td2l0aC1waWMgICAgICAgICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KKyAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKysgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisrICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuCisgCisgU29tZSBpbmZsdWVudGlhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CisgICBDQyAgICAgICAgICBDIGNvbXBpbGVyIGNvbW1hbmQKK0BAIC0zOTEwLDggKzM5MTYsOCBAQCBlc2FjCisgCisgCisgCistbWFjcm9fdmVyc2lvbj0nMi4yLjdhJworLW1hY3JvX3JldmlzaW9uPScxLjMxMzQnCisrbWFjcm9fdmVyc2lvbj0nMi40JworK21hY3JvX3JldmlzaW9uPScxLjMyOTMnCisgCisgCisgCitAQCAtMzk1MSw3ICszOTU3LDcgQEAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncy4uLiAiID4mNjsgfQorICMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgorLWlmIHRlc3QgIlhgcHJpbnQgLXIgLS0gLW4gMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisraWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisgICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgIEVDSE89J3ByaW50IC1yIC0tJworIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCitAQCAtNDc2Nyw4ICs0NzczLDggQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsKKyAjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworIHhzaV9zaGVsbD1ubworICggX2x0X2R1bW15PSJhL2IvYyIKKy0gIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCistICAgICAgPSBjLGEvYiwsIFwKKysgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisrICAgICAgPSBjLGEvYixiL2MsIFwKKyAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAgJiYgeHNpX3NoZWxsPXllcworQEAgLTQ4MTcsNiArNDgyMyw4MCBAQCBlc2FjCisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9faG9zdF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKi0qLWN5Z3dpbiogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKKysgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICAjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNDgzMyw2ICs0OTEzLDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCisgZXNhYworIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyBjYXNlICRob3N0X29zIGluCisrICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCisrICAgIGZpCisrICAgIDs7CisgICBkYXJ3aW4qKQorICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK0BAIC01MDAxLDcgKzUwODYsOCBAQCBtaW5ndyogfCBwdzMyKikKKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgICBlbHNlCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICAgZmkKKyAgIDs7CitAQCAtNTE1NSw2ICs1MjQxLDIxIEBAIGVzYWMKKyBmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQorICRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQorKworK2ZpbGVfbWFnaWNfZ2xvYj0KKyt3YW50X25vY2FzZWdsb2I9bm8KKytpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgbWluZ3cqIHwgcHczMiopCisrICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisrICAgIGVsc2UKKysgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tcMV1cL1tcMV1cL2c7L2ciYAorKyAgICBmaQorKyAgICA7OworKyAgZXNhYworK2ZpCisrCisgZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCitAQCAtNTE2OCwxMSArNTI2OSwxNjUgQEAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisgCisgCisgCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisgCisgCisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK0RMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKKyskYXNfZWNobyAiJERMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N0X0RMTFRPT0w9JERMTFRPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iJGFjX2N0X0RMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9ETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCisrICAgIERMTFRPT0w9ImZhbHNlIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAorKyAgZmkKKytlbHNlCisrICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgorK2ZpCisrCisrdGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorKworKworKworKworKworKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKysKKytjYXNlICRob3N0X29zIGluCisrY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAorKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisrICAqLS1pZGVudGlmeS1zdHJpY3QqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKKysgICAgOzsKKysgICopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjaworKyAgICA7OworKyAgZXNhYworKyAgOzsKKysqKQorKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCisrICA7OworK2VzYWMKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNjsgfQorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKysKKysKKysKKysKKysKKysKKysKKysKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICBmb3IgYWNfcHJvZyBpbiBhcgorKyAgZG8KKysgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNTE4OCw3ICs1NDQzLDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX0FSPSIke2FjX3Rvb2xfcHJlZml4fWFyIgorKyAgICBhY19jdl9wcm9nX0FSPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNTIwOCwxMSArNTQ2MywxNSBAQCAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisgCisrICAgIHRlc3QgLW4gIiRBUiIgJiYgYnJlYWsKKysgIGRvbmUKKyBmaQorLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FSIjsgdGhlbgorK2lmIHRlc3QgLXogIiRBUiI7IHRoZW4KKyAgIGFjX2N0X0FSPSRBUgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCisrICBmb3IgYWNfcHJvZyBpbiBhcgorK2RvCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC01MjI4LDcgKzU0ODcsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNTI0Nyw2ICs1NTA2LDEwIEBAIGVsc2UKKyAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisrCisrICB0ZXN0IC1uICIkYWNfY3RfQVIiICYmIGJyZWFrCisrZG9uZQorKworICAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCisgICAgIEFSPSJmYWxzZSIKKyAgIGVsc2UKK0BAIC01MjU4LDE2ICs1NTIxLDcyIEBAIGFjX3Rvb2xfd2FybmVkPXllcyA7OworIGVzYWMKKyAgICAgQVI9JGFjX2N0X0FSCisgICBmaQorLWVsc2UKKy0gIEFSPSIkYWNfY3ZfcHJvZ19BUiIKKyBmaQorIAorLXRlc3QgLXogIiRBUiIgJiYgQVI9YXIKKy10ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorKzogJHtBUj1hcn0KKys6ICR7QVJfRkxBR1M9Y3J1fQorKworKworKworKworKworKworKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9hcl9hdF9maWxlK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfYXJfYXRfZmlsZT1ubworKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKyAKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKKysgICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mNScKKysgICAgICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKysJeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisrICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQorIAorK2ZpCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyX2F0X2ZpbGUiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfYXJfYXRfZmlsZSIgPiY2OyB9CisgCisraWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQorK2Vsc2UKKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQorK2ZpCisgCisgCisgCitAQCAtNTYwOSw4ICs1OTI4LDggQEAgZXNhYworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisgCisgIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorIAorICMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorIG9wdF9jcj0KK0BAIC01NjQ2LDYgKzU5NjUsNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisgICBlbHNlCisgICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgICBmaQorKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgorIAorICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgICBwaXBlX3dvcmtzPW5vCitAQCAtNTY4Nyw2ICs2MDA3LDE4IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisrLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisrICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2VsaWYgZGVmaW5lZChfX29zZl9fKQorKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2Vsc2UKKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAorKyNlbmRpZgorKworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworICNlbmRpZgorQEAgLTU2OTgsNyArNjAzMCw3IEBAIF9MVF9FT0YKKyAJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyAvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCistY29uc3Qgc3RydWN0IHsKKytMVF9ETFNZTV9DT05TVCBzdHJ1Y3QgeworICAgY29uc3QgY2hhciAqbmFtZTsKKyAgIHZvaWQgICAgICAgKmFkZHJlc3M7CisgfQorQEAgLTU3MjQsOCArNjA1Niw4IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgX0xUX0VPRgorIAkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisgCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CistCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKKy0JICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKysJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUworKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUworIAkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisgCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgorIAkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorQEAgLTU3MzUsOCArNjA2Nyw4IEBAIF9MVF9FT0YKKyAgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorIAkgICAgcGlwZV93b3Jrcz15ZXMKKyAJICBmaQorLQkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCistCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCisrCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKKysJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKKyAJZWxzZQorIAkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQorIAlmaQorQEAgLTU3NzMsNiArNjEwNSwxOSBAQCBlbHNlCisgJGFzX2VjaG8gIm9rIiA+JjY7IH0KKyBmaQorIAorKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgorK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbQF1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytmaQorKworKworKworKworKworKworKworIAorIAorIAorQEAgLTU3OTAsNiArNjEzNSw0MSBAQCBmaQorIAorIAorIAorKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5c3Jvb3QiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNyb290Li4uICIgPiY2OyB9CisrCisrIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Qgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgd2l0aHZhbD0kd2l0aF9saWJ0b29sX3N5c3Jvb3Q7CisrZWxzZQorKyAgd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm8KKytmaQorKworKworK2x0X3N5c3Jvb3Q9CisrY2FzZSAke3dpdGhfbGlidG9vbF9zeXNyb290fSBpbiAjKAorKyB5ZXMpCisrICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisrICAgZmkKKysgICA7OyAjKAorKyAvKikKKysgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9saWJ0b29sX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKysgICA7OyAjKAorKyBub3wnJykKKysgICA7OyAjKAorKyAqKQorKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY1CisrJGFzX2VjaG8gIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjY7IH0KKysgICBhc19mbl9lcnJvciAiVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIgIiRMSU5FTk8iIDUKKysgICA7OworK2VzYWMKKysKKysgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7bHRfc3lzcm9vdDotbm99IiA+JjUKKyskYXNfZWNobyAiJHtsdF9zeXNyb290Oi1ub30iID4mNjsgfQorIAorIAorIAorQEAgLTYwMDQsNiArNjM4NCwxMjMgQEAgZXNhYworIAorIG5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorIAorK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1tdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJE1BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIke2FjX3Rvb2xfcHJlZml4fW10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytNQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRNQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdF9NQU5JRkVTVF9UT09MPSRNQU5JRkVTVF9UT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgbXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0iJGFjX2N0X01BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSJtdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X01BTklGRVNUX1RPT0wiID0geDsgdGhlbgorKyAgICBNQU5JRkVTVF9UT09MPSI6IgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgTUFOSUZFU1RfVE9PTD0kYWNfY3RfTUFOSUZFU1RfVE9PTAorKyAgZmkKKytlbHNlCisrICBNQU5JRkVTVF9UT09MPSIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIgorK2ZpCisrCisrdGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JjUKKysgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisrICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKKysgIGZpCisrICBybSAtZiBjb25mdGVzdCoKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY2OyB9CisraWYgdGVzdCAieCRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiICE9IHh5ZXM7IHRoZW4KKysgIE1BTklGRVNUX1RPT0w9OgorK2ZpCisrCisrCisrCisrCisrCisgCisgICBjYXNlICRob3N0X29zIGluCisgICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCitAQCAtNjU3MCw2ICs3MDY3LDggQEAgX0xUX0VPRgorICAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mNQorICAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JjUKKyAgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiY1CisrICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JjUKKysgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mNQorICAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgorIGludCBtYWluKCkgeyByZXR1cm4gMDt9CisgX0xUX0VPRgorQEAgLTcwMzMsNyArNzUzMiw4IEBAIGZpCisgTElCVE9PTF9ERVBTPSIkbHRtYWluIgorIAorICMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCistTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCisrTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpJworK0xJQlRPT0w9IiRMSUJUT09MLyR7aG9zdF9hbGlhc30tbGlidG9vbCIKKyAKKyAKKyAKK0BAIC03MTIyLDcgKzc2MjIsNyBAQCBhaXgzKikKKyBlc2FjCisgCisgIyBHbG9iYWwgdmFyaWFibGVzOgorLW9maWxlPWxpYnRvb2wKKytvZmlsZT0ke2hvc3RfYWxpYXN9LWxpYnRvb2wKKyBjYW5fYnVpbGRfc2hhcmVkPXllcworIAorICMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorQEAgLTc0MjAsOCArNzkyMCw2IEBAIGZpCisgbHRfcHJvZ19jb21waWxlcl9waWM9CisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CisgCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CistJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAKKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCitAQCAtNzU4Nyw2ICs4MDg1LDEyIEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCWx0X3Byb2dfY29tcGlsZXJfcGljPSctLXNoYXJlZCcKKyAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy0tc3RhdGljJworIAk7OworKyAgICAgIG5hZ2ZvciopCisrCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKysJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLC1XbCwsJworKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKKysJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworKwk7OworICAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKyAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCisgCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCitAQCAtNzY0OSw3ICs4MTUzLDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQorKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJzs7CisgICAgICAgKikKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OworQEAgLTc3MDYsMTMgKzgyMTAsMTcgQEAgY2FzZSAkaG9zdF9vcyBpbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgorICAgICA7OworIGVzYWMKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKy0kYXNfZWNobyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKy0KKy0KKy0KKy0KKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfcHJvZ19jb21waWxlcl9waWMKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorK2x0X3Byb2dfY29tcGlsZXJfcGljPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYworIAorICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCitAQCAtNzc3Myw2ICs4MjgxLDExIEBAIGZpCisgCisgCisgCisrCisrCisrCisrCisrCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyAjCitAQCAtODEyMyw3ICs4NjM2LDggQEAgX0xUX0VPRgorICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCisgICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKy0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4Y2x1ZGVfZXhwc3ltcz0nW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJworIAorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCitAQCAtODIyMiwxMiArODczNiwxMiBAQCBfTFRfRU9GCisgCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSctcnBhdGggJGxpYmRpcicKKy0JICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKysJICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisgCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorIAkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKy0JICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisrCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAJICBmaQorIAkgIDs7CisgCWVzYWMKK0BAIC04MjQxLDggKzg3NTUsOCBAQCBfTFRfRU9GCisgCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKyAJd2xhcmM9CisgICAgICAgZWxzZQorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBmaQorICAgICAgIDs7CisgCitAQCAtODI2MCw4ICs4Nzc0LDggQEAgX0xUX0VPRgorIAorIF9MVF9FT0YKKyAgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTgzMDcsOCArODgyMSw4IEBAIF9MVF9FT0YKKyAKKyAgICAgKikKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC04NDM4LDcgKzg5NTIsMTMgQEAgX0xUX0VPRgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJworICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCistICAgICAgICBpZiB0ZXN0IHgkZ2NjX25vX2xpbmsgPSB4eWVzOyB0aGVuCisrICAgICAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgeCRnY2Nfbm9fbGluayA9IHh5ZXM7IHRoZW4KKyAgIGFzX2ZuX2Vycm9yICJMaW5rIHRlc3RzIGFyZSBub3QgYWxsb3dlZCBhZnRlciBHQ0NfTk9fRVhFQ1VUQUJMRVMuIiAiJExJTkVOTyIgNQorIGZpCisgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTg0NTQsMjIgKzg5NzQsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorQEAgLTg0ODEsNyArOTAwOCwxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJZWxzZQorIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgCSAjIGVtcHR5IGV4ZWN1dGFibGUuCistCSBpZiB0ZXN0IHgkZ2NjX25vX2xpbmsgPSB4eWVzOyB0aGVuCisrCSBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgeCRnY2Nfbm9fbGluayA9IHh5ZXM7IHRoZW4KKyAgIGFzX2ZuX2Vycm9yICJMaW5rIHRlc3RzIGFyZSBub3QgYWxsb3dlZCBhZnRlciBHQ0NfTk9fRVhFQ1VUQUJMRVMuIiAiJExJTkVOTyIgNQorIGZpCisgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTg0OTcsMjIgKzkwMzAsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAJIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKK0BAIC04NTU3LDIwICs5MDk3LDYzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKy0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCistICAgICAgbGliZXh0PWxpYgorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCistICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKy0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorLSAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKy0gICAgICBmaXhfc3JjZmlsZV9wYXRoPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKy0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgY2wqKQorKwkjIE5hdGl2ZSBNU1ZDCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKysJZmlsZV9saXN0X3NwZWM9J0AnCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGVsc2UKKysJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZml+CisrCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgIGxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysJIyBEb24ndCB1c2UgcmFubGliCisrCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKKysJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisrCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgKi5leGV8Ki5FWEUpIDs7CisrCSAgICAqKQorKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIDs7CisrCSAgZXNhY34KKysJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKysJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworKwkgIGZpJworKwk7OworKyAgICAgICopCisrCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCTs7CisrICAgICAgZXNhYworICAgICAgIDs7CisgCisgICAgIGRhcndpbiogfCByaGFwc29keSopCitAQCAtODYzMSw3ICs5MjE0LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCitAQCAtODYzOSw3ICs5MjIyLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXg5KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisrCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGZpCitAQCAtODY1NSw3ICs5MjM4LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXgxMCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgICBmaQorQEAgLTg2NzksMTAgKzkyNjIsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAlpYTY0KikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCSopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJZXNhYworICAgICAgIGVsc2UKK0BAIC04NzYxLDI2ICs5MzQ0LDM5IEBAIGZpCisgCisgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisgCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKyAJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KKy0gICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCistICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCistICAgICAgICBpZiB0ZXN0IHgkZ2NjX25vX2xpbmsgPSB4eWVzOyB0aGVuCisrCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisrCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorKwkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCisrCSAgIGlmIHRlc3QgeCRnY2Nfbm9fbGluayA9IHh5ZXM7IHRoZW4KKyAgIGFzX2ZuX2Vycm9yICJMaW5rIHRlc3RzIGFyZSBub3QgYWxsb3dlZCBhZnRlciBHQ0NfTk9fRVhFQ1VUQUJMRVMuIiAiJExJTkVOTyIgNQorIGZpCisgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy1pbnQgZm9vKHZvaWQpIHt9CisraW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKy0gIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0KKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllcworK2Vsc2UKKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9CisrCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJZmkKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworQEAgLTg4NjUsNyArOTQ2MSw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICBlbHNlCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworQEAgLTg4ODQsOSArOTQ4MCw5IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAl3bGFyYz0nJHt3bH0nCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CistCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICBlbHNlCisgCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorIAkqIkNvbXBpbGVycyA1LjAiKikKK0BAIC05NDYyLDggKzEwMDU4LDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgbmVlZF92ZXJzaW9uPW5vCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAKKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKysgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKysgIHllcywqKQorKyAgICAjIGdjYworICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorQEAgLTk0OTYsMTMgKzEwMDkzLDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICAgOzsKKyAgICAgZXNhYworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworKyAgICA7OworKworKyAgKixjbCopCisrICAgICMgTmF0aXZlIE1TVkMKKysgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKysgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKysKKysgICAgY2FzZSAkYnVpbGRfb3MgaW4KKysgICAgbWluZ3cqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKysgICAgICBsdF9zYXZlX2lmcz0kSUZTCisrICAgICAgSUZTPSc7JworKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKysgICAgICBkbworKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKysgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorKyAgICAgIGRvbmUKKysgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisrICAgICAgOzsKKysgICAgY3lnd2luKikKKysgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisrICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisrICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIDs7CisrICAgICopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisrICAgICAgZWxzZQorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIGZpCisrICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisrICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKysgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKysgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKysgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisrICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKysgICAgICAgJFJNIFwkZGxwYXRoJworKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICAgOzsKKyAKKyAgICopCisrICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgIHNobGlicGF0aF92YXI9UEFUSAorICAgOzsKK0BAIC05NTk0LDcgKzEwMjQ5LDcgQEAgaGFpa3UqKQorICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCistICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3QvYmVvcy9zeXN0ZW0vbGliJworKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICA7OworIAorQEAgLTEwNDUyLDEwICsxMTEwNywxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTEwNTU4LDEwICsxMTIxMywxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTExOTkyLDEzICsxMjY0NywyMCBAQCBleGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfdW5zZXQ9J2AkRUNITyAiJGx0X3Vuc2V0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9TUDJOTD0nYCRFQ0hPICIkbHRfU1AyTkwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X05MMlNQPSdgJEVDSE8gIiRsdF9OTDJTUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfY3ZfdG9faG9zdF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2ZsYWc9J2AkRUNITyAiJHJlbG9hZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfY21kcz0nYCRFQ0hPICIkcmVsb2FkX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE9CSkRVTVA9J2AkRUNITyAiJE9CSkRVTVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSdgJEVDSE8gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9tYWdpY19jbWQ9J2AkRUNITyAiJGZpbGVfbWFnaWNfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytmaWxlX21hZ2ljX2dsb2I9J2AkRUNITyAiJGZpbGVfbWFnaWNfZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrd2FudF9ub2Nhc2VnbG9iPSdgJEVDSE8gIiR3YW50X25vY2FzZWdsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK0RMTFRPT0w9J2AkRUNITyAiJERMTFRPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSdgJEVDSE8gIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVI9J2AkRUNITyAiJEFSIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUl9GTEFHUz0nYCRFQ0hPICIkQVJfRkxBR1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2FyY2hpdmVyX2xpc3Rfc3BlYz0nYCRFQ0hPICIkYXJjaGl2ZXJfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBTVFJJUD0nYCRFQ0hPICIkU1RSSVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFJBTkxJQj0nYCRFQ0hPICIkUkFOTElCIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTEyMDEzLDE0ICsxMjY3NSwxNyBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZQorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytubV9maWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkbm1fZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3N5c3Jvb3Q9J2AkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9iamRpcj0nYCRFQ0hPICIkb2JqZGlyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBNQUdJQ19DTUQ9J2AkRUNITyAiJE1BR0lDX0NNRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1sdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBuZWVkX2xvY2tzPSdgJEVDSE8gIiRuZWVkX2xvY2tzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytNQU5JRkVTVF9UT09MPSdgJEVDSE8gIiRNQU5JRkVTVF9UT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBEU1lNVVRJTD0nYCRFQ0hPICIkRFNZTVVUSUwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE5NRURJVD0nYCRFQ0hPICIkTk1FRElUIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBMSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xMjA1MywxMiArMTI3MTgsMTIgQEAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3EKKyBoYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5oZXJpdF9ycGF0aD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbGlua19hbGxfZGVwbGlicz0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistZml4X3NyY2ZpbGVfcGF0aD0nYCRFQ0hPICIkZml4X3NyY2ZpbGVfcGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4cG9ydF9zeW1ib2xzX2NtZHM9J2AkRUNITyAiJGV4cG9ydF9zeW1ib2xzX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4Y2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcHJlbGlua19jbWRzPSdgJEVDSE8gIiRwcmVsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3Bvc3RsaW5rX2NtZHM9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9J2AkRUNITyAiJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBuZWVkX2xpYl9wcmVmaXg9J2AkRUNITyAiJG5lZWRfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTIxMTMsOCArMTI3NzgsMTMgQEAgcmVsb2FkX2ZsYWcgXAorIE9CSkRVTVAgXAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kIFwKKyBmaWxlX21hZ2ljX2NtZCBcCisrZmlsZV9tYWdpY19nbG9iIFwKKyt3YW50X25vY2FzZWdsb2IgXAorK0RMTFRPT0wgXAorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIFwKKyBBUiBcCisgQVJfRkxBR1MgXAorK2FyY2hpdmVyX2xpc3Rfc3BlYyBcCisgU1RSSVAgXAorIFJBTkxJQiBcCisgQ0MgXAorQEAgLTEyMTI0LDEyICsxMjc5NCwxNCBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXAorK25tX2ZpbGVfbGlzdF9zcGVjIFwKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCistbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9waWMgXAorK2x0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCisgbmVlZF9sb2NrcyBcCisrTUFOSUZFU1RfVE9PTCBcCisgRFNZTVVUSUwgXAorIE5NRURJVCBcCisgTElQTyBcCitAQCAtMTIxNDUsNyArMTI4MTcsNiBAQCBub191bmRlZmluZWRfZmxhZyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCBcCisgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCistZml4X3NyY2ZpbGVfcGF0aCBcCisgZXhjbHVkZV9leHBzeW1zIFwKKyBpbmNsdWRlX2V4cHN5bXMgXAorIGZpbGVfbGlzdF9zcGVjIFwKK0BAIC0xMjE4MSw2ICsxMjg1Miw3IEBAIG1vZHVsZV9jbWRzIFwKKyBtb2R1bGVfZXhwc3ltX2NtZHMgXAorIGV4cG9ydF9zeW1ib2xzX2NtZHMgXAorIHByZWxpbmtfY21kcyBcCisrcG9zdGxpbmtfY21kcyBcCisgcG9zdGluc3RhbGxfY21kcyBcCisgcG9zdHVuaW5zdGFsbF9jbWRzIFwKKyBmaW5pc2hfY21kcyBcCitAQCAtMTI3NzAsNyArMTM0NDIsOCBAQCAkYXNfZWNobyBYIiRmaWxlIiB8CisgIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisgIworICMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCistIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysjICAgICAgICAgICAgICAgICBJbmMuCisgIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyAjCisgIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorQEAgLTEyODczLDE5ICsxMzU0Niw0MiBAQCBTUDJOTD0kbHRfbHRfU1AyTkwKKyAjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCisgTkwyU1A9JGx0X2x0X05MMlNQCisgCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZSBuYW1lcyB0byBcJGhvc3QgZm9ybWF0LgorK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKysKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0LgorK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKysKKyAjIEFuIG9iamVjdCBzeW1ib2wgZHVtcGVyLgorIE9CSkRVTVA9JGx0X09CSkRVTVAKKyAKKyAjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAorIAorLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSAiZmlsZV9tYWdpYyIuCisrIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorIGZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorIAorKyMgSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrZmlsZV9tYWdpY19nbG9iPSRsdF9maWxlX21hZ2ljX2dsb2IKKysKKysjIEZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyt3YW50X25vY2FzZWdsb2I9JGx0X3dhbnRfbm9jYXNlZ2xvYgorKworKyMgRExMIGNyZWF0aW9uIHByb2dyYW0uCisrRExMVE9PTD0kbHRfRExMVE9PTAorKworKyMgQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllcy4KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKysKKyAjIFRoZSBhcmNoaXZlci4KKyBBUj0kbHRfQVIKKysKKysjIEZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlLgorIEFSX0ZMQUdTPSRsdF9BUl9GTEFHUworIAorKyMgSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyLgorK2FyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfYXJjaGl2ZXJfbGlzdF9zcGVjCisrCisgIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KKyBTVFJJUD0kbHRfU1RSSVAKKyAKK0BAIC0xMjkxNSw2ICsxMzYxMSwxMiBAQCBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworICMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCisgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4CisgCisrIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCisrbm1fZmlsZV9saXN0X3NwZWM9JGx0X25tX2ZpbGVfbGlzdF9zcGVjCisrCisrIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KKytsdF9zeXNyb290PSRsdF9zeXNyb290CisrCisgIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCisgb2JqZGlyPSRvYmpkaXIKKyAKK0BAIC0xMjkyNCw2ICsxMzYyNiw5IEBAIE1BR0lDX0NNRD0kTUFHSUNfQ01ECisgIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KKyBuZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCisgCisrIyBNYW5pZmVzdCB0b29sLgorK01BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKKysKKyAjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCisgRFNZTVVUSUw9JGx0X0RTWU1VVElMCisgCitAQCAtMTMwMzgsMTIgKzEzNzQzLDEyIEBAIHdpdGhfZ2NjPSRHQ0MKKyAjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCisgbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZworIAorLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKy13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorLQorICMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorIHBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYworIAorKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKyt3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorKworICMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KKyBsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYworIAorQEAgLTEzMTMwLDkgKzEzODM1LDYgQEAgaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAorICMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorIGxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKKyAKKy0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCistZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAorLQorICMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorIGFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCisgCitAQCAtMTMxNDgsNiArMTM4NTAsOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcworICMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCisgcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHMKKyAKKysjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCisrcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kcworKworICMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorIGZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYworIAorQEAgLTEzMTgwLDIxMCArMTM4ODUsMTY5IEBAIGx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorICAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CistICBzZWQgJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgY2FzZSAkeHNpX3NoZWxsIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKy0jIGNhbGw6CistIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKy0jICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKy0jICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKy0jICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0jIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKy0jIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCistIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCistZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKy0gICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In0KKy19CistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PSR7MSUlPSp9CistICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKy0gICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7CistICBlc2FjCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgKikgIyBCb3VybmUgY29tcGF0aWJsZSBmdW5jdGlvbnMuCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCistICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCistICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorLSAgZWxzZQorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCistICBmaQorLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKKy19CistCistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLSMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsyfSBpbgorLSAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworLSAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CistICBlc2FjCistfQorLQorLSMgc2VkIHNjcmlwdHM6CistbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW149XSpcKT0uKi9cMS87cScKKy1teV9zZWRfbG9uZ19hcmc9JzFzL14tW149XSo9Ly8nCistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiQxIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCistfQorLQorLV9MVF9FT0YKKy1lc2FjCistCistY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxKz1cJDIiCistfQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxPVwkJDFcJDIiCistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gIGVzYWMKKy0KKy0KKy0gIHNlZCAtbiAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS8sJHAnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKysgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKysgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisrCisrICBpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lIC9jXAorK2Z1bmNfZGlybmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Jhc2VuYW1lIC9jXAorK2Z1bmNfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAvY1wKKytmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3N0cmlwbmFtZSAoKSQvLC9efSAjIGZ1bmNfc3RyaXBuYW1lIC9jXAorK2Z1bmNfc3RyaXBuYW1lICgpXAorK3tcCisrXCAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlXAorK1wgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LlwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In1cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zdHJpcG5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X2xvbmdfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9sb25nX29wdCAvY1wKKytmdW5jX3NwbGl0X2xvbmdfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn1cCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz0kezEjKj19XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X2xvbmdfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCAvY1wKKytmdW5jX3NwbGl0X3Nob3J0X29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P31cCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X3Nob3J0X29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbG8ybyAoKSQvLC9efSAjIGZ1bmNfbG8ybyAvY1wKKytmdW5jX2xvMm8gKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOztcCisrXCAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbG8ybyBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfeGZvcm0gKCkkLywvXn0gIyBmdW5jX3hmb3JtIC9jXAorK2Z1bmNfeGZvcm0gKClcCisre1wKKysgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY194Zm9ybSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXJpdGggKCkkLywvXn0gIyBmdW5jX2FyaXRoIC9jXAorK2Z1bmNfYXJpdGggKClcCisre1wKKysgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FyaXRoIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sZW4gKCkkLywvXn0gIyBmdW5jX2xlbiAvY1wKKytmdW5jX2xlbiAoKVwKKyt7XAorKyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbGVuIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrZmkKKysKKytpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZCAvY1wKKytmdW5jX2FwcGVuZCAoKVwKKyt7XAorKyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kX3F1b3RlZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCAvY1wKKytmdW5jX2FwcGVuZF9xdW90ZWQgKClcCisre1wKKytcICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iXAorK1wgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kX3F1b3RlZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JworKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2Vsc2UKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytmaQorKworK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mMjt9CisrZmkKKysKKysKKysgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisgICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgICBjaG1vZCAreCAiJG9maWxlIgorIAorLS0gCisyLjE0LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA3LUFkZC10aGUtYXJtdjVlLWFyY2hpdGVjdHVyZS10by1iaW51dGlscy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNy1BZGQtdGhlLWFybXY1ZS1hcmNoaXRlY3R1cmUtdG8tYmludXRpbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgwMTk2MAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNy1BZGQtdGhlLWFybXY1ZS1hcmNoaXRlY3R1cmUtdG8tYmludXRpbHMucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSAyYjg3YWFkMTc0MWJjNDgxZGQwOTgyZjEwMGFkNWVhN2Y5MzdiYjYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTozNzoxMCArMDAwMAorU3ViamVjdDogW1BBVENIIDA3LzE1XSBBZGQgdGhlIGFybXY1ZSBhcmNoaXRlY3R1cmUgdG8gYmludXRpbHMKKworQmludXRpbHMgaGFzIGEgY29tbWVudCB0aGF0IGluZGljYXRlcyBpdCBpcyBzdXBwb3NlZCB0byBtYXRjaCBnY2MgZm9yCithbGwgb2YgdGhlIHN1cHBvcnQgIi1tYXJjaD0iIHNldHRpbmdzLCBidXQgaXQgd2FzIGxhY2tpbmcgdGhlIGFybXY1ZSBzZXR0aW5nLgorVGhpcyB3YXMgYSBzaW1wbGUgd2F5IHRvIGFkZCBpdCwgYXMgdGh1bWIgaW5zdHJ1Y3Rpb25zIHNob3VsZG4ndCBiZSBnZW5lcmF0ZWQKK2J5IHRoZSBjb21waWxlciBhbnl3YXkuCisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkCitVcHN0cmVhbSBtYWludGFpbmVyIGluZGljYXRlZCB0aGF0IHdlIHNob3VsZCBub3QgYmUgdXNpbmcgYXJtdjVlLCBldmVuCit0aG91Z2ggaXQgaXMgYSBsZWdhbCBhcmNoaWN0dXJlIGRlZmluZWQgYnkgb3VyIGdjYy4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdhcy9jb25maWcvdGMtYXJtLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2dhcy9jb25maWcvdGMtYXJtLmMgYi9nYXMvY29uZmlnL3RjLWFybS5jCitpbmRleCBhODg1ZWZlNGZjLi43MzVlYWE3NDQ3IDEwMDY0NAorLS0tIGEvZ2FzL2NvbmZpZy90Yy1hcm0uYworKysrIGIvZ2FzL2NvbmZpZy90Yy1hcm0uYworQEAgLTI1OTkwLDYgKzI1OTkwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm1fYXJjaF9vcHRpb25fdGFibGUgYXJtX2FyY2hzW10gPQorICAgQVJNX0FSQ0hfT1BUICgiYXJtdjR0IiwJQVJNX0FSQ0hfVjRULAkgRlBVX0FSQ0hfRlBBKSwKKyAgIEFSTV9BUkNIX09QVCAoImFybXY0dHhtIiwJQVJNX0FSQ0hfVjRUeE0sCSBGUFVfQVJDSF9GUEEpLAorICAgQVJNX0FSQ0hfT1BUICgiYXJtdjUiLAlBUk1fQVJDSF9WNSwJIEZQVV9BUkNIX1ZGUCksCisrICBBUk1fQVJDSF9PUFQgKCJhcm12NWUiLAlBUk1fQVJDSF9WNVRFLAkgRlBVX0FSQ0hfVkZQKSwKKyAgIEFSTV9BUkNIX09QVCAoImFybXY1dCIsCUFSTV9BUkNIX1Y1VCwJIEZQVV9BUkNIX1ZGUCksCisgICBBUk1fQVJDSF9PUFQgKCJhcm12NXR4bSIsCUFSTV9BUkNIX1Y1VHhNLAkgRlBVX0FSQ0hfVkZQKSwKKyAgIEFSTV9BUkNIX09QVCAoImFybXY1dGUiLAlBUk1fQVJDSF9WNVRFLAkgRlBVX0FSQ0hfVkZQKSwKKy0tIAorMi4xNC4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNy1Vc2UtbGlidG9vbC0yLjQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDctVXNlLWxpYnRvb2wtMi40LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjdmNzUzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNy1Vc2UtbGlidG9vbC0yLjQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMTEzNyArMCwwIEBACi1Gcm9tIDlhMzY1MWUxMjAyNjFjNzIwOTA2ODlhZDc3MGFkMDQ4YjBiYWY1MDYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogTW9uLCA2IE1hciAyMDE3IDIzOjI4OjMzIC0wODAwCi1TdWJqZWN0OiBbUEFUQ0ggMDcvMTVdIFVzZSBsaWJ0b29sIDIuNAotCi1nZXQgbGlidG9vbCBzeXNyb290IHN1cHBvcnQKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFsgT0UgY29uZmlndXJhdGlvbiBTcGVjaWZpY10KLQotIGJmZC9jb25maWd1cmUgICAgICAgIHwgMTMxOCArKysrKysrKysrKysrKysrKy0tLS0tLQotIGJmZC9jb25maWd1cmUuYWMgICAgIHwgICAgMiArLQotIGJpbnV0aWxzL2NvbmZpZ3VyZSAgIHwgMTMxNiArKysrKysrKysrKysrKysrKy0tLS0tLQotIGdhcy9jb25maWd1cmUgICAgICAgIHwgMTMxNCArKysrKysrKysrKysrKysrKy0tLS0tLQotIGdwcm9mL2NvbmZpZ3VyZSAgICAgIHwgMTMyMSArKysrKysrKysrKysrKysrKy0tLS0tLQotIGxkL2NvbmZpZ3VyZSAgICAgICAgIHwgMTY5MSArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLQotIGxpYnRvb2wubTQgICAgICAgICAgIHwgMTA4MCArKysrKysrKysrKysrLS0tLS0tCi0gbHRtYWluLnNoICAgICAgICAgICAgfCAyOTI1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCi0gbHRvcHRpb25zLm00ICAgICAgICAgfCAgICAyICstCi0gbHR2ZXJzaW9uLm00ICAgICAgICAgfCAgIDEyICstCi0gbHR+b2Jzb2xldGUubTQgICAgICAgfCAgICAyICstCi0gb3Bjb2Rlcy9jb25maWd1cmUgICAgfCAxMzE4ICsrKysrKysrKysrKysrKysrLS0tLS0tCi0gb3Bjb2Rlcy9jb25maWd1cmUuYWMgfCAgICAyICstCi0gemxpYi9jb25maWd1cmUgICAgICAgfCAxMzE2ICsrKysrKysrKysrKysrKysrLS0tLS0tCi0gMTQgZmlsZXMgY2hhbmdlZCwgOTkyNiBpbnNlcnRpb25zKCspLCAzNjkzIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvYmZkL2NvbmZpZ3VyZSBiL2JmZC9jb25maWd1cmUKLWluZGV4IGYzMGJmYWJlZjMuLmZhMWE1NDVlOWQgMTAwNzU1Ci0tLS0gYS9iZmQvY29uZmlndXJlCi0rKysgYi9iZmQvY29uZmlndXJlCi1AQCAtNjcyLDYgKzY3Miw5IEBAIE9UT09MCi0gTElQTwotIE5NRURJVAotIERTWU1VVElMCi0rTUFOSUZFU1RfVE9PTAotK2FjX2N0X0FSCi0rRExMVE9PTAotIE9CSkRVTVAKLSBMTl9TCi0gTk0KLUBAIC03ODUsNiArNzg4LDcgQEAgZW5hYmxlX3N0YXRpYwotIHdpdGhfcGljCi0gZW5hYmxlX2Zhc3RfaW5zdGFsbAotIHdpdGhfZ251X2xkCi0rd2l0aF9saWJ0b29sX3N5c3Jvb3QKLSBlbmFibGVfbGlidG9vbF9sb2NrCi0gZW5hYmxlX3BsdWdpbnMKLSBlbmFibGVfbGFyZ2VmaWxlCi1AQCAtMTQ2MSw2ICsxNDY1LDggQEAgT3B0aW9uYWwgUGFja2FnZXM6Ci0gICAtLXdpdGgtcGljICAgICAgICAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCi0gICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCi0rICAtLXdpdGgtbGlidG9vbC1zeXNyb290PURJUiBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUgotKyAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLgotICAgLS13aXRoLW1tYXAgICAgICAgICAgICAgdHJ5IHVzaW5nIG1tYXAgZm9yIEJGRCBpbnB1dCBmaWxlcyBpZiBhdmFpbGFibGUKLSAgIC0td2l0aC1zZXBhcmF0ZS1kZWJ1Zy1kaXI9RElSCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBMb29rIGZvciBnbG9iYWwgc2VwYXJhdGUgZGVidWcgaW5mbyBpbiBESVIKLUBAIC01MzkzLDggKzUzOTksOCBAQCBlc2FjCi0gCi0gCi0gCi0tbWFjcm9fdmVyc2lvbj0nMi4yLjdhJwotLW1hY3JvX3JldmlzaW9uPScxLjMxMzQnCi0rbWFjcm9fdmVyc2lvbj0nMi40JwotK21hY3JvX3JldmlzaW9uPScxLjMyOTMnCi0gCi0gCi0gCi1AQCAtNTQzNCw3ICs1NDQwLDcgQEAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KLSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzIiA+JjUKLSAkYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncy4uLiAiID4mNjsgfQotICMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgotLWlmIHRlc3QgIlhgcHJpbnQgLXIgLS0gLW4gMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCi0raWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCi0gICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KLSAgIEVDSE89J3ByaW50IC1yIC0tJwotIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCi1AQCAtNjEyMCw4ICs2MTI2LDggQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsKLSAjIFRyeSBzb21lIFhTSSBmZWF0dXJlcwotIHhzaV9zaGVsbD1ubwotICggX2x0X2R1bW15PSJhL2IvYyIKLS0gIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCi0tICAgICAgPSBjLGEvYiwsIFwKLSsgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCi0rICAgICAgPSBjLGEvYixiL2MsIFwKLSAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAotICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAotICAgJiYgeHNpX3NoZWxsPXllcwotQEAgLTYxNzAsNiArNjE3Niw4MCBAQCBlc2FjCi0gCi0gCi0gCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdC4uLiAiID4mNjsgfQotK2lmIHRlc3QgIiR7bHRfY3ZfdG9faG9zdF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGNhc2UgJGhvc3QgaW4KLSsgICotKi1taW5ndyogKQotKyAgICBjYXNlICRidWlsZCBpbgotKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKLSsgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLSsgICAgICAgIDs7Ci0rICAgICAgKi0qLWN5Z3dpbiogKQotKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCi0rICAgICAgICA7OwotKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKLSsgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgotKyAgICAgICAgOzsKLSsgICAgZXNhYwotKyAgICA7OwotKyAgKi0qLWN5Z3dpbiogKQotKyAgICBjYXNlICRidWlsZCBpbgotKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKLSsgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KLSsgICAgICAgIDs7Ci0rICAgICAgKi0qLWN5Z3dpbiogKQotKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCi0rICAgICAgICA7OwotKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKLSsgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgotKyAgICAgICAgOzsKLSsgICAgZXNhYwotKyAgICA7OwotKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKLSsgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCi0rICAgIDs7Ci0rZXNhYwotKwotK2ZpCi0rCi0rdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY1Ci0rJGFzX2VjaG8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjY7IH0KLSsKLSsKLSsKLSsKLSsKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICAjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCi0rbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCi0rY2FzZSAkaG9zdCBpbgotKyAgKi0qLW1pbmd3KiApCi0rICAgIGNhc2UgJGJ1aWxkIGluCi0rICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cwotKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgotKyAgICAgICAgOzsKLSsgICAgZXNhYwotKyAgICA7OwotK2VzYWMKLSsKLStmaQotKwotK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNQotKyRhc19lY2hvICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY2OyB9Ci0rCi0rCi0rCi0rCi0rCi0geyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKLSAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9Ci0gaWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbiA6Ci1AQCAtNjE4Niw2ICs2MjY2LDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCi0gZXNhYwotIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLSBjYXNlICRob3N0X29zIGluCi0rICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0rICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgotKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCi0rICAgIGZpCi0rICAgIDs7Ci0gICBkYXJ3aW4qKQotICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLUBAIC02MzU0LDcgKzY0MzksOCBAQCBtaW5ndyogfCBwdzMyKikKLSAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKLSAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCi0gICBlbHNlCi0tICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JwotKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCi0rICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKLSAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJwotICAgZmkKLSAgIDs7Ci1AQCAtNjUwOCw2ICs2NTk0LDIxIEBAIGVzYWMKLSBmaQotIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQotICRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQotKwotK2ZpbGVfbWFnaWNfZ2xvYj0KLSt3YW50X25vY2FzZWdsb2I9bm8KLStpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgotKyAgY2FzZSAkaG9zdF9vcyBpbgotKyAgbWluZ3cqIHwgcHczMiopCi0rICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSsgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCi0rICAgIGVsc2UKLSsgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tcMV1cL1tcMV1cL2c7L2ciYAotKyAgICBmaQotKyAgICA7OwotKyAgZXNhYwotK2ZpCi0rCi0gZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCi0gZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi0gdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCi1AQCAtNjUyMyw5ICs2NjI0LDE2MiBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KLSAKLSAKLSAKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0tICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCi0rICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi0rc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgotKyAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0rZWxzZQotK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLStmb3IgYXNfZGlyIGluICRQQVRICi0rZG8KLSsgIElGUz0kYXNfc2F2ZV9JRlMKLSsgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0rICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotKyAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKLSsgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0rICAgIGJyZWFrIDIKLSsgIGZpCi0rZG9uZQotKyAgZG9uZQotK0lGUz0kYXNfc2F2ZV9JRlMKLSsKLStmaQotK2ZpCi0rRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCi0raWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCi0rICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQotKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9Ci0rZWxzZQotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSskYXNfZWNobyAibm8iID4mNjsgfQotK2ZpCi0rCi0rCi0rZmkKLStpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgotKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAotKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLStzZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgotKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0rZWxzZQotK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLStmb3IgYXNfZGlyIGluICRQQVRICi0rZG8KLSsgIElGUz0kYXNfc2F2ZV9JRlMKLSsgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0rICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCi0rICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotKyAgICBicmVhayAyCi0rICBmaQotK2RvbmUKLSsgIGRvbmUKLStJRlM9JGFzX3NhdmVfSUZTCi0rCi0rZmkKLStmaQotK2FjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAotK2lmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKLSskYXNfZWNobyAiJGFjX2N0X0RMTFRPT0wiID4mNjsgfQotK2Vsc2UKLSsgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0rJGFzX2VjaG8gIm5vIiA+JjY7IH0KLStmaQotKwotKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KLSsgICAgRExMVE9PTD0iZmFsc2UiCi0rICBlbHNlCi0rICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLSt5ZXM6KQotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Ci0rYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci0rZXNhYwotKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCi0rICBmaQotK2Vsc2UKLSsgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCi0rZmkKLSsKLSt0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzIiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzLi4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHtsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJwotKwotK2Nhc2UgJGhvc3Rfb3MgaW4KLStjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0rICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCi0rICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCi0rICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KLSsgICotLWlkZW50aWZ5LXN0cmljdCopCi0rICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgotKyAgICA7OwotKyAgKikKLSsgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCi0rICAgIDs7Ci0rICBlc2FjCi0rICA7OwotKyopCi0rICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKLSsgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKLSsgIDs7Ci0rZXNhYwotKwotK2ZpCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY1Ci0rJGFzX2VjaG8gIiRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY2OyB9Ci0rc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCi0rdGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITwotKwotKwotKwotKwotKwotKwotKwotK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSsgIGZvciBhY19wcm9nIGluIGFyCi0rICBkbwotKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLStzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci0gaWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuIDoKLUBAIC02NTQxLDcgKzY3OTUsNyBAQCBkbwotICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0tICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCi0rICAgIGFjX2N2X3Byb2dfQVI9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgotICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICAgYnJlYWsgMgotICAgZmkKLUBAIC02NTYxLDExICs2ODE1LDE1IEBAICRhc19lY2hvICJubyIgPiY2OyB9Ci0gZmkKLSAKLSAKLSsgICAgdGVzdCAtbiAiJEFSIiAmJiBicmVhawotKyAgZG9uZQotIGZpCi0taWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCi0raWYgdGVzdCAteiAiJEFSIjsgdGhlbgotICAgYWNfY3RfQVI9JEFSCi0tICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLS1zZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKLSsgIGZvciBhY19wcm9nIGluIGFyCi0rZG8KLSsgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgotIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLSBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgotQEAgLTY1ODEsNyArNjgzOSw3IEBAIGRvCi0gICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLS0gICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCi0rICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19wcm9nIgotICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICAgYnJlYWsgMgotICAgZmkKLUBAIC02NjAwLDYgKzY4NTgsMTAgQEAgZWxzZQotICRhc19lY2hvICJubyIgPiY2OyB9Ci0gZmkKLSAKLSsKLSsgIHRlc3QgLW4gIiRhY19jdF9BUiIgJiYgYnJlYWsKLStkb25lCi0rCi0gICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KLSAgICAgQVI9ImZhbHNlIgotICAgZWxzZQotQEAgLTY2MTEsMTYgKzY4NzMsNzIgQEAgYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci0gZXNhYwotICAgICBBUj0kYWNfY3RfQVIKLSAgIGZpCi0tZWxzZQotLSAgQVI9IiRhY19jdl9wcm9nX0FSIgotIGZpCi0gCi0tdGVzdCAteiAiJEFSIiAmJiBBUj1hcgotLXRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1Ci0rOiAke0FSPWFyfQotKzogJHtBUl9GTEFHUz1jcnV9Ci0rCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2x0X2N2X2FyX2F0X2ZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBsdF9jdl9hcl9hdF9maWxlPW5vCi0rICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSsKLStpbnQKLSttYWluICgpCi0rewotIAotKyAgOwotKyAgcmV0dXJuIDA7Ci0rfQotK19BQ0VPRgotK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSsgIGVjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAotKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiY1JwotKyAgICAgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1Ci0rICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1Ci0rICBhY19zdGF0dXM9JD8KLSsgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQotKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCi0rCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCi0rCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQotKwl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQotKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQotKyAgYWNfc3RhdHVzPSQ/Ci0rICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSsgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KLSsJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KLSsgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACi0rICAgICAgICBmaQotKyAgICAgIGZpCi0rICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCi0gCi0rZmkKLStybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAKLStmaQotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJfYXRfZmlsZSIgPiY1Ci0rJGFzX2VjaG8gIiRsdF9jdl9hcl9hdF9maWxlIiA+JjY7IH0KLSAKLStpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCi0rICBhcmNoaXZlcl9saXN0X3NwZWM9Ci0rZWxzZQotKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCi0rZmkKLSAKLSAKLSAKLUBAIC02OTYyLDggKzcyODAsOCBAQCBlc2FjCi0gbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKLSAKLSAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKLS1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgotLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgotK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCi0rbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCi0gCi0gIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCi0gb3B0X2NyPQotQEAgLTY5OTksNiArNzMxNyw3IEBAIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KLSAgIGVsc2UKLSAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cKCRzeW1jb2RlJHN5bWNvZGUqXClbCSBdWwkgXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKLSAgIGZpCi0rICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCi0gCi0gICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KLSAgIHBpcGVfd29ya3M9bm8KLUBAIC03MDQwLDYgKzczNTksMTggQEAgX0xUX0VPRgotICAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCi0gCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgotIAkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0Ci0rLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCi0rI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKLSsvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKLSsgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCi0rIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKLSsjZWxpZiBkZWZpbmVkKF9fb3NmX18pCi0rLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCi0rIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKLSsjZWxzZQotKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0Ci0rI2VuZGlmCi0rCi0gI2lmZGVmIF9fY3BsdXNwbHVzCi0gZXh0ZXJuICJDIiB7Ci0gI2VuZGlmCi1AQCAtNzA1MSw3ICs3MzgyLDcgQEAgX0xUX0VPRgotIAkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAotIAotIC8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KLS1jb25zdCBzdHJ1Y3QgewotK0xUX0RMU1lNX0NPTlNUIHN0cnVjdCB7Ci0gICBjb25zdCBjaGFyICpuYW1lOwotICAgdm9pZCAgICAgICAqYWRkcmVzczsKLSB9Ci1AQCAtNzA3Nyw4ICs3NDA4LDggQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKLSBfTFRfRU9GCi0gCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KLSAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKLS0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgotLQkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCi0rCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCi0gCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKLSAJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCi0gCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1Ci1AQCAtNzA4OCw4ICs3NDE5LDggQEAgX0xUX0VPRgotICAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCi0gCSAgICBwaXBlX3dvcmtzPXllcwotIAkgIGZpCi0tCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKLS0JICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKLSsJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUwotKwkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUwotIAllbHNlCi0gCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1Ci0gCWZpCi1AQCAtNzEyNiw2ICs3NDU3LDE2IEBAIGVsc2UKLSAkYXNfZWNobyAib2siID4mNjsgfQotIGZpCi0gCi0rIyBSZXNwb25zZSBmaWxlIHN1cHBvcnQuCi0raWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KLSsgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJwotK2VsaWYgJE5NIC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ1tAXUZJTEUnID4vZGV2L251bGw7IHRoZW4KLSsgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJwotK2ZpCi0rCi0rCi0rCi0rCi0gCi0gCi0gCi1AQCAtNzE0Nyw2ICs3NDg4LDQ1IEBAIGZpCi0gCi0gCi0gCi0rCi0rCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3lzcm9vdCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN5c3Jvb3QuLi4gIiA+JjY7IH0KLSsKLSsjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYnRvb2wtc3lzcm9vdCB3YXMgZ2l2ZW4uCi0raWYgdGVzdCAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICB3aXRodmFsPSR3aXRoX2xpYnRvb2xfc3lzcm9vdDsKLStlbHNlCi0rICB3aXRoX2xpYnRvb2xfc3lzcm9vdD1ubwotK2ZpCi0rCi0rCi0rbHRfc3lzcm9vdD0KLStjYXNlICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IGluICMoCi0rIHllcykKLSsgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotKyAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKLSsgICBmaQotKyAgIDs7ICMoCi0rIC8qKQotKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX2xpYnRvb2xfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAotKyAgIDs7ICMoCi0rIG5vfCcnKQotKyAgIDs7ICMoCi0rICopCi0rICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjUKLSskYXNfZWNobyAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNjsgfQotKyAgIGFzX2ZuX2Vycm9yICJUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguIiAiJExJTkVOTyIgNQotKyAgIDs7Ci0rZXNhYwotKwotKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtsdF9zeXNyb290Oi1ub30iID4mNQotKyRhc19lY2hvICIke2x0X3N5c3Jvb3Q6LW5vfSIgPiY2OyB9Ci0rCi0rCi0rCi0rCi0rCi0gIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCi0gaWYgdGVzdCAiJHtlbmFibGVfbGlidG9vbF9sb2NrK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYnRvb2xfbG9jazsKLUBAIC03MzUzLDYgKzc3MzMsMTIzIEBAIGVzYWMKLSAKLSBuZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKLSAKLStpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0rICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW10OyBhY193b3JkPSQyCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgaWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCi0rICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiRNQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLStlbHNlCi0rYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotK2ZvciBhc19kaXIgaW4gJFBBVEgKLStkbwotKyAgSUZTPSRhc19zYXZlX0lGUwotKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSsgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0rICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0rICAgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJHthY190b29sX3ByZWZpeH1tdCIKLSsgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0rICAgIGJyZWFrIDIKLSsgIGZpCi0rZG9uZQotKyAgZG9uZQotK0lGUz0kYXNfc2F2ZV9JRlMKLSsKLStmaQotK2ZpCi0rTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MCi0raWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCi0rICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BTklGRVNUX1RPT0wiID4mNQotKyRhc19lY2hvICIkTUFOSUZFU1RfVE9PTCIgPiY2OyB9Ci0rZWxzZQotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSskYXNfZWNobyAibm8iID4mNjsgfQotK2ZpCi0rCi0rCi0rZmkKLStpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIjsgdGhlbgotKyAgYWNfY3RfTUFOSUZFU1RfVE9PTD0kTUFOSUZFU1RfVE9PTAotKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi0rc2V0IGR1bW15IG10OyBhY193b3JkPSQyCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgaWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCi0rICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9IiRhY19jdF9NQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLStlbHNlCi0rYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotK2ZvciBhc19kaXIgaW4gJFBBVEgKLStkbwotKyAgSUZTPSRhc19zYXZlX0lGUwotKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSsgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0rICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0rICAgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0ibXQiCi0rICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotKyAgICBicmVhayAyCi0rICBmaQotK2RvbmUKLSsgIGRvbmUKLStJRlM9JGFzX3NhdmVfSUZTCi0rCi0rZmkKLStmaQotK2FjX2N0X01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTAotK2lmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjUKLSskYXNfZWNobyAiJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNjsgfQotK2Vsc2UKLSsgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0rJGFzX2VjaG8gIm5vIiA+JjY7IH0KLStmaQotKwotKyAgaWYgdGVzdCAieCRhY19jdF9NQU5JRkVTVF9UT09MIiA9IHg7IHRoZW4KLSsgICAgTUFOSUZFU1RfVE9PTD0iOiIKLSsgIGVsc2UKLSsgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgotK3llczopCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLSthY190b29sX3dhcm5lZD15ZXMgOzsKLStlc2FjCi0rICAgIE1BTklGRVNUX1RPT0w9JGFjX2N0X01BTklGRVNUX1RPT0wKLSsgIGZpCi0rZWxzZQotKyAgTUFOSUZFU1RfVE9PTD0iJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCIKLStmaQotKwotK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10Ci0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbC4uLiAiID4mNjsgfQotK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9tYWluZmVzdF90b29sK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCi0rICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiY1Ci0rICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0Ci0rICBjYXQgY29uZnRlc3QuZXJyID4mNQotKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgotKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCi0rICBmaQotKyAgcm0gLWYgY29uZnRlc3QqCi0rZmkKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY1Ci0rJGFzX2VjaG8gIiRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNjsgfQotK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCi0rICBNQU5JRkVTVF9UT09MPToKLStmaQotKwotKwotKwotKwotKwotIAotICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICByaGFwc29keSogfCBkYXJ3aW4qKQotQEAgLTc5MTYsNiArODQxMyw4IEBAIF9MVF9FT0YKLSAgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKLSAgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1Ci0gICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQotKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiY1Ci0rICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JjUKLSAgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKLSBpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQotIF9MVF9FT0YKLUBAIC04MDgwLDcgKzg1NzksOCBAQCBmaQotIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKLSAKLSAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgotLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJwotK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKScKLStMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCi0gCi0gCi0gCi1AQCAtODE2OSw3ICs4NjY5LDcgQEAgYWl4MyopCi0gZXNhYwotIAotICMgR2xvYmFsIHZhcmlhYmxlczoKLS1vZmlsZT1saWJ0b29sCi0rb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCi0gY2FuX2J1aWxkX3NoYXJlZD15ZXMKLSAKLSAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKLUBAIC04NDY3LDggKzg5NjcsNiBAQCBmaQotIGx0X3Byb2dfY29tcGlsZXJfcGljPQotIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQotIAotLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQotLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9Ci0gCi0gICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotQEAgLTg2MzQsNiArOTEzMiwxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQotIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCi0gCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKLSAJOzsKLSsgICAgICBuYWdmb3IqKQotKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCi0rCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKLSsJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCi0rCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKLSsJOzsKLSAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCi0gICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAotIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQotQEAgLTg2OTYsNyArOTIwMCw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9Ci0gICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwotICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKLSAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKLSsgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCi0gCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OwotICAgICAgICopCi0gCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKLUBAIC04NzUzLDEzICs5MjU3LDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKLSAgICAgOzsKLSBlc2FjCi0teyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1Ci0tJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9Ci0tCi0tCi0tCi0tCi0gCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCi0rZmkKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKLSskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KLStsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKLSAKLSAjCi0gIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgotQEAgLTg4MjAsNiArOTMyOCwxMSBAQCBmaQotIAotIAotIAotKwotKwotKwotKwotKwotICMKLSAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0gIwotQEAgLTkxNzAsNyArOTY4Myw4IEBAIF9MVF9FT0YKLSAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAotICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubwotICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCi0tICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSsgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKLSAKLSAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotQEAgLTkyNjksMTIgKzk3ODMsMTIgQEAgX0xUX0VPRgotIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJwotIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Ci0gCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nLXJwYXRoICRsaWJkaXInCi0tCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCi0rCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJwotIAkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KLSAJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0tCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJwotKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCi0gCSAgZmkKLSAJICA7OwotIAllc2FjCi1AQCAtOTI4OCw4ICs5ODAyLDggQEAgX0xUX0VPRgotIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCi0gCXdsYXJjPQotICAgICAgIGVsc2UKLS0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLS0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0rCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICAgZmkKLSAgICAgICA7OwotIAotQEAgLTkzMDcsOCArOTgyMSw4IEBAIF9MVF9FT0YKLSAKLSBfTFRfRU9GCi0gICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0tCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0tCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSsJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgIGVsc2UKLSAJbGRfc2hsaWJzPW5vCi0gICAgICAgZmkKLUBAIC05MzU0LDggKzk4NjgsOCBAQCBfTFRfRU9GCi0gCi0gICAgICopCi0gICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSsJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0rCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgICBlbHNlCi0gCWxkX3NobGlicz1ubwotICAgICAgIGZpCi1AQCAtOTQ4NSw3ICs5OTk5LDEzIEBAIF9MVF9FT0YKLSAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKLSAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgotICAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgotLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotKyAgICAgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgotKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCi0rZWxzZQotKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0gLyogZW5kIGNvbmZkZWZzLmguICAqLwotIAotIGludAotQEAgLTk0OTgsMjIgKzEwMDE4LDI5IEBAIG1haW4gKCkKLSBfQUNFT0YKLSBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gCi0tbHRfYWl4X2xpYnBhdGhfc2VkPScKLS0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotLQkvXjAvIHsKLS0JICAgIHMvXjAgICpcKC4qXCkkL1wxLwotLQkgICAgcAotLQl9Ci0tICAgIH0nCi0tYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0tIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KLS0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotLWZpCi0rICBsdF9haXhfbGlicGF0aF9zZWQ9JwotKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLSsJICAvXjAvIHsKLSsJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KLSsJICAgICAgcAotKwkgIH0KLSsgICAgICB9JwotKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KLSsgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotKyAgZmkKLSBmaQotIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KLSsgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgotKyAgZmkKLSsKLStmaQotKwotKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXwotK2ZpCi0gCi0gICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKLUBAIC05NTI1LDcgKzEwMDUyLDEzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotIAllbHNlCi0gCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KLSAJICMgZW1wdHkgZXhlY3V0YWJsZS4KLS0JIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLSsJIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KLSsgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAotK2Vsc2UKLSsgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSAKLSBpbnQKLUBAIC05NTM4LDIyICsxMDA3MSwyOSBAQCBtYWluICgpCi0gX0FDRU9GCi0gaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotIAotLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0tICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLS0JL14wLyB7Ci0tCSAgICBzL14wICAqXCguKlwpJC9cMS8KLS0JICAgIHAKLS0JfQotLSAgICB9JwotLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLS1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0tICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLS1maQotKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKLSsgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7Ci0rCSAgL14wLyB7Ci0rCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCi0rCSAgICAgIHAKLSsJICB9Ci0rICAgICAgfScKLSsgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSsgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLSsgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCi0rICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSsgIGZpCi0gZmkKLSBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLS1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLSsgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCi0rICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKLSsgIGZpCi0rCi0rZmkKLSsKLSsgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KLStmaQotIAotIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLSAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotQEAgLTk1OTgsMjAgKzEwMTM4LDYzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCi0gICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcwotICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0tICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKLS0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAotLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCi0tICAgICAgbGliZXh0PWxpYgotLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgotLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgotLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KLS0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JwotLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCi0tICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKLS0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgotLSAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKLS0gICAgICBmaXhfc3JjZmlsZV9wYXRoPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKLS0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcwotKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0rICAgICAgY2wqKQotKwkjIE5hdGl2ZSBNU1ZDCi0rCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCi0rCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCi0rCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKLSsJZmlsZV9saXN0X3NwZWM9J0AnCi0rCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCi0rCWxpYmV4dD1saWIKLSsJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0rCXNocmV4dF9jbWRzPSIuZGxsIgotKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCi0rCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCi0rCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0rCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOwotKwkgIGVsc2UKLSsJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7Ci0rCSAgZml+Ci0rCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgotKwkgIGxpbmtuYW1lcz0nCi0rCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KLSsJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCi0rCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCi0rCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSsJIyBEb24ndCB1c2UgcmFubGliCi0rCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKLSsJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgotKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+Ci0rCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgotKwkgICAgKi5leGV8Ki5FWEUpIDs7Ci0rCSAgICAqKQotKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCi0rCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCi0rCSAgICAgIDs7Ci0rCSAgZXNhY34KLSsJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgotKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKLSsJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOwotKwkgIGZpJwotKwk7OwotKyAgICAgICopCi0rCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgotKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJwotKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAotKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotKwlsaWJleHQ9bGliCi0rCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgotKwlzaHJleHRfY21kcz0iLmRsbCIKLSsJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JwotKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgotKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJwotKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgotKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCi0rCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCi0rCTs7Ci0rICAgICAgZXNhYwotICAgICAgIDs7Ci0gCi0gICAgIGRhcndpbiogfCByaGFwc29keSopCi1AQCAtOTY3Miw3ICsxMDI1NSw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotIAotICAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLS0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKLSAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotQEAgLTk2ODAsNyArMTAyNjMsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLSAKLSAgICAgaHB1eDkqKQotICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0tCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSsJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgICBlbHNlCi0gCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICAgZmkKLUBAIC05Njk2LDcgKzEwMjc5LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0gCi0gICAgIGhwdXgxMCopCi0gICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0tCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSsJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgICBlbHNlCi0gCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgICBmaQotQEAgLTk3MjAsMTAgKzEwMzAzLDEwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotIAkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gCSAgOzsKLSAJaWE2NCopCi0tCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSsJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAJICA7OwotIAkqKQotLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSsJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotIAkgIDs7Ci0gCWVzYWMKLSAgICAgICBlbHNlCi1AQCAtOTgwMiwyMyArMTAzODUsMzYgQEAgZmkKLSAKLSAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKLSAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAotIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgotLSAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKLS0gICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKLS0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLSsJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KLSsJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sIiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sLi4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCi0rCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKLSsJICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS1pbnQgZm9vKHZvaWQpIHt9Ci0raW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQotIF9BQ0VPRgotIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLS0gIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLS0KLSsgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllcwotK2Vsc2UKLSsgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCi0gZmkKLSBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLS0gICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCi0rICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotK2ZpCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1Ci0rJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9Ci0rCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KLSsgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSsJZmkKLSAgICAgICBlbHNlCi0gCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotQEAgLTk5MDMsNyArMTA0OTksNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCi0gICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSsJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICAgZWxzZQotIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLUBAIC05OTIyLDkgKzEwNTE4LDkgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJwotICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gCXdsYXJjPScke3dsfScKLS0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSsJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLS0JICAkQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwotKwkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwotICAgICAgIGVsc2UKLSAJY2FzZSBgJENDIC1WIDI+JjFgIGluCi0gCSoiQ29tcGlsZXJzIDUuMCIqKQotQEAgLTEwNTAwLDggKzExMDk2LDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAgbmVlZF92ZXJzaW9uPW5vCi0gICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAKLS0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgotLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKLSsgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KLSsgIHllcywqKQotKyAgICAjIGdjYwotICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJwotICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCi0gICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgotQEAgLTEwNTM0LDEzICsxMTEzMSw3MSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgIDs7Ci0gICAgIGVzYWMKLSsgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKLSsgICAgOzsKLSsKLSsgICosY2wqKQotKyAgICAjIE5hdGl2ZSBNU1ZDCi0rICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCi0rICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSsgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCi0rCi0rICAgIGNhc2UgJGJ1aWxkX29zIGluCi0rICAgIG1pbmd3KikKLSsgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ci0rICAgICAgbHRfc2F2ZV9pZnM9JElGUwotKyAgICAgIElGUz0nOycKLSsgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCi0rICAgICAgZG8KLSsgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKLSsgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCi0rICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKLSsgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKLSsgICAgICBkb25lCi0rICAgICAgSUZTPSRsdF9zYXZlX2lmcwotKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgotKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAotKyAgICAgIDs7Ci0rICAgIGN5Z3dpbiopCi0rICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQotKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcwotKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KLSsgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCi0rICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCi0rICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKLSsgICAgICA7OwotKyAgICAqKQotKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKLSsgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KLSsgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCi0rICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAotKyAgICAgIGVsc2UKLSsgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKLSsgICAgICBmaQotKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQotKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKLSsgICAgICA7OwotKyAgICBlc2FjCi0rCi0rICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKLSsgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci0rICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSsgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+Ci0rICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+Ci0rICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJwotKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgotKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+Ci0rICAgICAgICRSTSBcJGRscGF0aCcKLSsgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCi0gICAgIDs7Ci0gCi0gICAqKQotKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKLSAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCi0rICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICAgIDs7Ci0gICBlc2FjCi0tICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwotICAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCi0gICBzaGxpYnBhdGhfdmFyPVBBVEgKLSAgIDs7Ci1AQCAtMTA2MzIsNyArMTEyODcsNyBAQCBoYWlrdSopCi0gICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKLSAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLS0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9iZW9zL3N5c3RlbS9saWInCi0rICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKLSAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgIDs7Ci0gCi1AQCAtMTE0NzIsMTAgKzEyMTI3LDEwIEBAIGVsc2UKLSAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCi0gICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLwotICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQotLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7Ci0raW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOwotICNlbmRpZgotIAotLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQotK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQotIGludCBtYWluICgpCi0gewotICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7Ci1AQCAtMTE1NzgsMTAgKzEyMjMzLDEwIEBAIGVsc2UKLSAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCi0gICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLwotICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQotLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7Ci0raW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOwotICNlbmRpZgotIAotLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQotK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQotIGludCBtYWluICgpCi0gewotICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7Ci1AQCAtMTQxMjIsNyArMTQ3NzcsNyBAQCBTSEFSRURfTERGTEFHUz0KLSBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSAieWVzIjsgdGhlbgotICAgeD1gc2VkIC1uIC1lICdzL15bIAldKlBJQ0ZMQUdbIAldKj1bIAldKi8vcCcgPCAuLi9saWJpYmVydHkvTWFrZWZpbGUgfCBzZWQgLW4gJyRwJ2AKLSAgIGlmIHRlc3QgLW4gIiR4IjsgdGhlbgotLSAgICBTSEFSRURfTElCQUREPSItTGBwd2RgLy4uL2xpYmliZXJ0eS9waWMgLWxpYmVydHkiCi0rICAgIFNIQVJFRF9MSUJBREQ9ImBwd2RgLy4uL2xpYmliZXJ0eS9waWMvbGliaWJlcnR5LmEiCi0gICBmaQotIAotICMgTW9yZSBoYWNrcyB0byBidWlsZCBETExzIG9uIFdpbmRvd3MuCi1AQCAtMTY4MjYsMTMgKzE3NDgxLDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGx0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLStsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLStsdF9jdl90b190b29sX2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSByZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIHJlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK2ZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSt3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J2AkRUNITyAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIEFSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rYXJjaGl2ZXJfbGlzdF9zcGVjPSdgJEVDSE8gIiRhcmNoaXZlcl9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIFNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1AQCAtMTY4NDcsMTQgKzE3NTA5LDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCi0gbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rbHRfc3lzcm9vdD0nYCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIE1BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotLWx0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGx0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIG5lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK01BTklGRVNUX1RPT0w9J2AkRUNITyAiJE1BTklGRVNUX1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIERTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIExJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotQEAgLTE2ODg3LDEyICsxNzU1MiwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcQotIGhhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLS1maXhfc3JjZmlsZV9wYXRoPSdgJEVDSE8gIiRmaXhfc3JjZmlsZV9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBhbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGluY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBwcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rcG9zdGxpbmtfY21kcz0nYCRFQ0hPICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIG5lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUBAIC0xNjk0Nyw4ICsxNzYxMiwxMyBAQCByZWxvYWRfZmxhZyBcCi0gT0JKRFVNUCBcCi0gZGVwbGlic19jaGVja19tZXRob2QgXAotIGZpbGVfbWFnaWNfY21kIFwKLStmaWxlX21hZ2ljX2dsb2IgXAotK3dhbnRfbm9jYXNlZ2xvYiBcCi0rRExMVE9PTCBcCi0rc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgXAotIEFSIFwKLSBBUl9GTEFHUyBcCi0rYXJjaGl2ZXJfbGlzdF9zcGVjIFwKLSBTVFJJUCBcCi0gUkFOTElCIFwKLSBDQyBcCi1AQCAtMTY5NTgsMTIgKzE3NjI4LDE0IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAotIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKLSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCi0gbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCi0rbm1fZmlsZV9saXN0X3NwZWMgXAotIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKLS1sdF9wcm9nX2NvbXBpbGVyX3dsIFwKLSBsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCi0rbHRfcHJvZ19jb21waWxlcl93bCBcCi0gbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAotIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIFwKLSBuZWVkX2xvY2tzIFwKLStNQU5JRkVTVF9UT09MIFwKLSBEU1lNVVRJTCBcCi0gTk1FRElUIFwKLSBMSVBPIFwKLUBAIC0xNjk3OSw3ICsxNzY1MSw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnIFwKLSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKLSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKLSBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKLS1maXhfc3JjZmlsZV9wYXRoIFwKLSBleGNsdWRlX2V4cHN5bXMgXAotIGluY2x1ZGVfZXhwc3ltcyBcCi0gZmlsZV9saXN0X3NwZWMgXAotQEAgLTE3MDE1LDYgKzE3Njg2LDcgQEAgbW9kdWxlX2NtZHMgXAotIG1vZHVsZV9leHBzeW1fY21kcyBcCi0gZXhwb3J0X3N5bWJvbHNfY21kcyBcCi0gcHJlbGlua19jbWRzIFwKLStwb3N0bGlua19jbWRzIFwKLSBwb3N0aW5zdGFsbF9jbWRzIFwKLSBwb3N0dW5pbnN0YWxsX2NtZHMgXAotIGZpbmlzaF9jbWRzIFwKLUBAIC0xNzc5NCw3ICsxODQ2Niw4IEBAICRhc19lY2hvIFgiJGZpbGUiIHwKLSAjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KLSAjCi0gIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKLS0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotKyMgICAgICAgICAgICAgICAgIEluYy4KLSAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgotICMKLSAjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCi1AQCAtMTc4OTcsMTkgKzE4NTcwLDQyIEBAIFNQMk5MPSRsdF9sdF9TUDJOTAotICMgdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlcy4KLSBOTDJTUD0kbHRfbHRfTkwyU1AKLSAKLSsjIGNvbnZlcnQgXCRidWlsZCBmaWxlIG5hbWVzIHRvIFwkaG9zdCBmb3JtYXQuCi0rdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAotKwotKyMgY29udmVydCBcJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuCi0rdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAotKwotICMgQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXIuCi0gT0JKRFVNUD0kbHRfT0JKRFVNUAotIAotICMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCi0gZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi0gCi0tIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIi4KLSsjIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCi0gZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCi0gCi0rIyBIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KLStmaWxlX21hZ2ljX2dsb2I9JGx0X2ZpbGVfbWFnaWNfZ2xvYgotKwotKyMgRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgotK3dhbnRfbm9jYXNlZ2xvYj0kbHRfd2FudF9ub2Nhc2VnbG9iCi0rCi0rIyBETEwgY3JlYXRpb24gcHJvZ3JhbS4KLStETExUT09MPSRsdF9ETExUT09MCi0rCi0rIyBDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzLgotK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAotKwotICMgVGhlIGFyY2hpdmVyLgotIEFSPSRsdF9BUgotKwotKyMgRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmUuCi0gQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCi0gCi0rIyBIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXIuCi0rYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9hcmNoaXZlcl9saXN0X3NwZWMKLSsKLSAjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgotIFNUUklQPSRsdF9TVFJJUAotIAotQEAgLTE3OTM5LDYgKzE4NjM1LDEyIEBAIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCi0gIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KLSBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKLSAKLSsjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgXCROTS4KLStubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKLSsKLSsjIFRoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyxhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLgotK2x0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKLSsKLSAjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KLSBvYmpkaXI9JG9iamRpcgotIAotQEAgLTE3OTQ4LDYgKzE4NjUwLDkgQEAgTUFHSUNfQ01EPSRNQUdJQ19DTUQKLSAjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPwotIG5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKLSAKLSsjIE1hbmlmZXN0IHRvb2wuCi0rTUFOSUZFU1RfVE9PTD0kbHRfTUFOSUZFU1RfVE9PTAotKwotICMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KLSBEU1lNVVRJTD0kbHRfRFNZTVVUSUwKLSAKLUBAIC0xODA2MiwxMiArMTg3NjcsMTIgQEAgd2l0aF9nY2M9JEdDQwotICMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KLSBub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCi0gCi0tIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgotLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCi0tCi0gIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCi0gcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCi0gCi0rIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgotK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCi0rCi0gIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgotIGxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCi0gCi1AQCAtMTgxNTQsOSArMTg4NTksNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCi0gIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCi0gbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicwotIAotLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KLS1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCi0tCi0gIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCi0gYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKLSAKLUBAIC0xODE3Miw2ICsxODg3NCw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCi0gIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KLSBwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcwotIAotKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KLStwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzCi0rCi0gIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCi0gZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCi0gCi1AQCAtMTgyMDQsMjEwICsxODkwOSwxNjkgQEAgbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCi0gICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCi0gICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQotICAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KLS0gIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCi0tICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCi0tCi0tICBjYXNlICR4c2lfc2hlbGwgaW4KLS0gIHllcykKLS0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKLS0KLS0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKLS0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCi0tIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCi0tZnVuY19kaXJuYW1lICgpCi0tewotLSAgY2FzZSAkezF9IGluCi0tICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7Ci0tICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKLS0gIGVzYWMKLS19Ci0tCi0tIyBmdW5jX2Jhc2VuYW1lIGZpbGUKLS1mdW5jX2Jhc2VuYW1lICgpCi0tewotLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgotLX0KLS0KLS0jIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50Ci0tIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgotLSMgY2FsbDoKLS0jICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAotLSMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAotLSMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgotLSMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgotLSMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgotLSMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotLSMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQotLSMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KLS0jIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KLS1mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCi0tewotLSAgY2FzZSAkezF9IGluCi0tICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7Ci0tICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKLS0gIGVzYWMKLS0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKLS19Ci0tCi0tIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKLS0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgotLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCi0tIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCi0tIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgotLWZ1bmNfc3RyaXBuYW1lICgpCi0tewotLSAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQotLSAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgotLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KLS0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9Ci0tICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifQotLX0KLS0KLS0jIGZ1bmNfb3B0X3NwbGl0Ci0tZnVuY19vcHRfc3BsaXQgKCkKLS17Ci0tICBmdW5jX29wdF9zcGxpdF9vcHQ9JHsxJSU9Kn0KLS0gIGZ1bmNfb3B0X3NwbGl0X2FyZz0kezEjKj19Ci0tfQotLQotLSMgZnVuY19sbzJvIG9iamVjdAotLWZ1bmNfbG8ybyAoKQotLXsKLS0gIGNhc2UgJHsxfSBpbgotLSAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OwotLSAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKLS0gIGVzYWMKLS19Ci0tCi0tIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKLS1mdW5jX3hmb3JtICgpCi0tewotLSAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sbwotLX0KLS0KLS0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCi0tZnVuY19hcml0aCAoKQotLXsKLS0gIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKQotLX0KLS0KLS0jIGZ1bmNfbGVuIHN0cmluZwotLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KLS1mdW5jX2xlbiAoKQotLXsKLS0gIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQotLX0KLS0KLS1fTFRfRU9GCi0tICAgIDs7Ci0tICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KLS0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKLS0KLS0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKLS0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCi0tIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCi0tZnVuY19kaXJuYW1lICgpCi0tewotLSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KLS0gIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKLS0gIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCi0tICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCi0tICBlbHNlCi0tICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKLS0gIGZpCi0tfQotLQotLSMgZnVuY19iYXNlbmFtZSBmaWxlCi0tZnVuY19iYXNlbmFtZSAoKQotLXsKLS0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkYmFzZW5hbWUiYAotLX0KLS0KLS0KLS0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQotLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCi0tIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKLS0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKLS0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCi0tIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQotLWZ1bmNfc3RyaXBuYW1lICgpCi0tewotLSAgY2FzZSAkezJ9IGluCi0tICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7Ci0tICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKLS0gIGVzYWMKLS19Ci0tCi0tIyBzZWQgc2NyaXB0czoKLS1teV9zZWRfbG9uZ19vcHQ9JzFzL15cKC1bXj1dKlwpPS4qL1wxLztxJwotLW15X3NlZF9sb25nX2FyZz0nMXMvXi1bXj1dKj0vLycKLS0KLS0jIGZ1bmNfb3B0X3NwbGl0Ci0tZnVuY19vcHRfc3BsaXQgKCkKLS17Ci0tICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAotLSAgZnVuY19vcHRfc3BsaXRfYXJnPWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKLS19Ci0tCi0tIyBmdW5jX2xvMm8gb2JqZWN0Ci0tZnVuY19sbzJvICgpCi0tewotLSAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAotLX0KLS0KLS0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQotLWZ1bmNfeGZvcm0gKCkKLS17Ci0tICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLlteLl0qJC8ubG8vJ2AKLS19Ci0tCi0tIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgotLWZ1bmNfYXJpdGggKCkKLS17Ci0tICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJEAiYAotLX0KLS0KLS0jIGZ1bmNfbGVuIHN0cmluZwotLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KLS1mdW5jX2xlbiAoKQotLXsKLS0gIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKLS19Ci0tCi0tX0xUX0VPRgotLWVzYWMKLS0KLS1jYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KLS0gIHllcykKLS0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKLS0KLS0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQotLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgotLWZ1bmNfYXBwZW5kICgpCi0tewotLSAgZXZhbCAiJDErPVwkMiIKLS19Ci0tX0xUX0VPRgotLSAgICA7OwotLSAgKikKLS0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKLS0KLS0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQotLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgotLWZ1bmNfYXBwZW5kICgpCi0tewotLSAgZXZhbCAiJDE9XCQkMVwkMiIKLS19Ci0tCi0tX0xUX0VPRgotLSAgICA7OwotLSAgZXNhYwotLQotLQotLSAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAotLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQotLQotLSAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAotKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAotKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKLSsKLSsgIGlmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KLSsgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWUgL2NcCi0rZnVuY19kaXJuYW1lICgpXAotK3tcCi0rXCAgICBjYXNlICR7MX0gaW5cCi0rXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAotK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAotK1wgICAgZXNhY1wKLSt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rCi0rCi0rICBzZWQgLWUgJy9eZnVuY19iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfYmFzZW5hbWUgL2NcCi0rZnVuY19iYXNlbmFtZSAoKVwKLSt7XAotK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKLSt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIC9jXAotK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKClcCi0re1wKLStcICAgIGNhc2UgJHsxfSBpblwKLStcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCi0rXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCi0rXCAgICBlc2FjXAotK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKLSt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfc3RyaXBuYW1lICgpJC8sL159ICMgZnVuY19zdHJpcG5hbWUgL2NcCi0rZnVuY19zdHJpcG5hbWUgKClcCi0re1wKLStcICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmVcCi0rXCAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuXAotK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M31cCi0rXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifVwKLStcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3N0cmlwbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfbG9uZ19vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IC9jXAotK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKClcCi0re1wKLStcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfVwKLStcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1cCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfbG9uZ19vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgIHNlZCAtZSAnL15mdW5jX3NwbGl0X3Nob3J0X29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IC9jXAotK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpXAotK3tcCi0rXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fVwKLStcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1cCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rCi0rCi0rICBzZWQgLWUgJy9eZnVuY19sbzJvICgpJC8sL159ICMgZnVuY19sbzJvIC9jXAotK2Z1bmNfbG8ybyAoKVwKLSt7XAotK1wgICAgY2FzZSAkezF9IGluXAotK1wgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7O1wKLStcICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7XAotK1wgICAgZXNhY1wKLSt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sbzJvIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rCi0rCi0rICBzZWQgLWUgJy9eZnVuY194Zm9ybSAoKSQvLC9efSAjIGZ1bmNfeGZvcm0gL2NcCi0rZnVuY194Zm9ybSAoKVwKLSt7XAotKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3hmb3JtIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rCi0rCi0rICBzZWQgLWUgJy9eZnVuY19hcml0aCAoKSQvLC9efSAjIGZ1bmNfYXJpdGggL2NcCi0rZnVuY19hcml0aCAoKVwKLSt7XAotKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSlcCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXJpdGggaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgIHNlZCAtZSAnL15mdW5jX2xlbiAoKSQvLC9efSAjIGZ1bmNfbGVuIC9jXAotK2Z1bmNfbGVuICgpXAotK3tcCi0rICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfVwKLSt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sZW4gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLStmaQotKwotK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KLSsgIHNlZCAtZSAnL15mdW5jX2FwcGVuZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kIC9jXAotK2Z1bmNfYXBwZW5kICgpXAotK3tcCi0rICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJcCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rCi0rCi0rICBzZWQgLWUgJy9eZnVuY19hcHBlbmRfcXVvdGVkICgpJC8sL159ICMgZnVuY19hcHBlbmRfcXVvdGVkIC9jXAotK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKVwKLSt7XAotK1wgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSJcCi0rXCAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IlwKLSt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmRfcXVvdGVkIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rCi0rCi0rICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCi0rICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKLSsgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSsgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rZWxzZQotKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKLSsgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCi0rICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotK2ZpCi0rCi0raWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KLSsgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiY1Ci0rJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiYyO30KLStmaQotKwotKwotKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKLSAgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKLSAgIGNobW9kICt4ICIkb2ZpbGUiCi0gCi1kaWZmIC0tZ2l0IGEvYmZkL2NvbmZpZ3VyZS5hYyBiL2JmZC9jb25maWd1cmUuYWMKLWluZGV4IDlhMTgzYzE2MjguLjNkOGVhMDc4MzYgMTAwNjQ0Ci0tLS0gYS9iZmQvY29uZmlndXJlLmFjCi0rKysgYi9iZmQvY29uZmlndXJlLmFjCi1AQCAtMjUzLDcgKzI1Myw3IEBAIGNoYW5nZXF1b3RlKCwpZG5sCi0gICB4PWBzZWQgLW4gLWUgJ3MvXlsgCV0qUElDRkxBR1sgCV0qPVsgCV0qLy9wJyA8IC4uL2xpYmliZXJ0eS9NYWtlZmlsZSB8IHNlZCAtbiAnJHAnYAotIGNoYW5nZXF1b3RlKFssXSlkbmwKLSAgIGlmIHRlc3QgLW4gIiR4IjsgdGhlbgotLSAgICBTSEFSRURfTElCQUREPSItTGBwd2RgLy4uL2xpYmliZXJ0eS9waWMgLWxpYmVydHkiCi0rICAgIFNIQVJFRF9MSUJBREQ9ImBwd2RgLy4uL2xpYmliZXJ0eS9waWMvbGliaWJlcnR5LmEiCi0gICBmaQotIAotICMgTW9yZSBoYWNrcyB0byBidWlsZCBETExzIG9uIFdpbmRvd3MuCi1kaWZmIC0tZ2l0IGEvYmludXRpbHMvY29uZmlndXJlIGIvYmludXRpbHMvY29uZmlndXJlCi1pbmRleCA4MjExOWVmZTcyLi40YTk4OTE4Y2UxIDEwMDc1NQotLS0tIGEvYmludXRpbHMvY29uZmlndXJlCi0rKysgYi9iaW51dGlscy9jb25maWd1cmUKLUBAIC02NTksOCArNjU5LDExIEBAIE9UT09MCi0gTElQTwotIE5NRURJVAotIERTWU1VVElMCi0rTUFOSUZFU1RfVE9PTAotIFJBTkxJQgotK2FjX2N0X0FSCi0gQVIKLStETExUT09MCi0gT0JKRFVNUAotIExOX1MKLSBOTQotQEAgLTc3Miw2ICs3NzUsNyBAQCBlbmFibGVfc3RhdGljCi0gd2l0aF9waWMKLSBlbmFibGVfZmFzdF9pbnN0YWxsCi0gd2l0aF9nbnVfbGQKLSt3aXRoX2xpYnRvb2xfc3lzcm9vdAotIGVuYWJsZV9saWJ0b29sX2xvY2sKLSBlbmFibGVfcGx1Z2lucwotIGVuYWJsZV9sYXJnZWZpbGUKLUBAIC0xNDQ0LDYgKzE0NDgsOCBAQCBPcHRpb25hbCBQYWNrYWdlczoKLSAgIC0td2l0aC1waWMgICAgICAgICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KLSAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KLSsgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCi0rICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuCi0gICAtLXdpdGgtc3lzdGVtLXpsaWIgICAgICB1c2UgaW5zdGFsbGVkIGxpYnoKLSAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBkZWZhdWx0PW5vCi0gICAtLXdpdGgtbGliaWNvbnYtcHJlZml4Wz1ESVJdICBzZWFyY2ggZm9yIGxpYmljb252IGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCi1AQCAtNTE2MCw4ICs1MTY2LDggQEAgZXNhYwotIAotIAotIAotLW1hY3JvX3ZlcnNpb249JzIuMi43YScKLS1tYWNyb19yZXZpc2lvbj0nMS4zMTM0JwotK21hY3JvX3ZlcnNpb249JzIuNCcKLSttYWNyb19yZXZpc2lvbj0nMS4zMjkzJwotIAotIAotIAotQEAgLTUyMDEsNyArNTIwNyw3IEBAIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCi0geyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1Ci0gJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MuLi4gIiA+JjY7IH0KLSAjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KLS1pZiB0ZXN0ICJYYHByaW50IC1yIC0tIC1uIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAotK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAotICAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCi0gICBFQ0hPPSdwcmludCAtciAtLScKLSBlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgotQEAgLTU4ODcsOCArNTg5Myw4IEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7Ci0gIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKLSB4c2lfc2hlbGw9bm8KLSAoIF9sdF9kdW1teT0iYS9iL2MiCi0tICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwiJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAotLSAgICAgID0gYyxhL2IsLCBcCi0rICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAotKyAgICAgID0gYyxhL2IsYi9jLCBcCi0gICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKLSAgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKLSAgICYmIHhzaV9zaGVsbD15ZXMKLUBAIC01OTM3LDYgKzU5NDMsODAgQEAgZXNhYwotIAotIAotIAotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0IiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBjYXNlICRob3N0IGluCi0rICAqLSotbWluZ3cqICkKLSsgICAgY2FzZSAkYnVpbGQgaW4KLSsgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCi0rICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0rICAgICAgICA7OwotKyAgICAgICotKi1jeWd3aW4qICkKLSsgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgotKyAgICAgICAgOzsKLSsgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4Ci0rICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKLSsgICAgICAgIDs7Ci0rICAgIGVzYWMKLSsgICAgOzsKLSsgICotKi1jeWd3aW4qICkKLSsgICAgY2FzZSAkYnVpbGQgaW4KLSsgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCi0rICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCi0rICAgICAgICA7OwotKyAgICAgICotKi1jeWd3aW4qICkKLSsgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAotKyAgICAgICAgOzsKLSsgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4Ci0rICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KLSsgICAgICAgIDs7Ci0rICAgIGVzYWMKLSsgICAgOzsKLSsgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCi0rICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAotKyAgICA7OwotK2VzYWMKLSsKLStmaQotKwotK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNQotKyRhc19lY2hvICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY2OyB9Ci0rCi0rCi0rCi0rCi0rCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0IiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0Li4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHtsdF9jdl90b190b29sX2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgotK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAotK2Nhc2UgJGhvc3QgaW4KLSsgICotKi1taW5ndyogKQotKyAgICBjYXNlICRidWlsZCBpbgotKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKLSsgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLSsgICAgICAgIDs7Ci0rICAgIGVzYWMKLSsgICAgOzsKLStlc2FjCi0rCi0rZmkKLSsKLSt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjUKLSskYXNfZWNobyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNjsgfQotKwotKwotKwotKwotKwotIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1Ci0gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQotIGlmIHRlc3QgIiR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgotQEAgLTU5NTMsNiArNjAzMywxMSBAQCBjYXNlICRyZWxvYWRfZmxhZyBpbgotIGVzYWMKLSByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi0gY2FzZSAkaG9zdF9vcyBpbgotKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KLSsgICAgICByZWxvYWRfY21kcz1mYWxzZQotKyAgICBmaQotKyAgICA7OwotICAgZGFyd2luKikKLSAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi1AQCAtNjEyMSw3ICs2MjA2LDggQEAgbWluZ3cqIHwgcHczMiopCi0gICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCi0gICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJwotICAgZWxzZQotLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKLSsgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgotKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCi0gICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKLSAgIGZpCi0gICA7OwotQEAgLTYyNzUsNiArNjM2MSwyMSBAQCBlc2FjCi0gZmkKLSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKLSAkYXNfZWNobyAiJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KLSsKLStmaWxlX21hZ2ljX2dsb2I9Ci0rd2FudF9ub2Nhc2VnbG9iPW5vCi0raWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KLSsgIGNhc2UgJGhvc3Rfb3MgaW4KLSsgIG1pbmd3KiB8IHB3MzIqKQotKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0rICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcwotKyAgICBlbHNlCi0rICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bXDFdXC9bXDFdXC9nOy9nImAKLSsgICAgZmkKLSsgICAgOzsKLSsgIGVzYWMKLStmaQotKwotIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAotIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAotIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgotQEAgLTYyOTAsOSArNjM5MSwxNjIgQEAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCi0gCi0gCi0gCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0raWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHthY19jdl9wcm9nX0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KLSsgIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotK2Vsc2UKLSthc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0rZm9yIGFzX2RpciBpbiAkUEFUSAotK2RvCi0rICBJRlM9JGFzX3NhdmVfSUZTCi0rICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSsgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSsgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCi0rICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotKyAgICBicmVhayAyCi0rICBmaQotK2RvbmUKLSsgIGRvbmUKLStJRlM9JGFzX3NhdmVfSUZTCi0rCi0rZmkKLStmaQotK0RMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAotK2lmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKLSskYXNfZWNobyAiJERMTFRPT0wiID4mNjsgfQotK2Vsc2UKLSsgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0rJGFzX2VjaG8gIm5vIiA+JjY7IH0KLStmaQotKwotKwotK2ZpCi0raWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KLSsgIGFjX2N0X0RMTFRPT0w9JERMTFRPT0wKLSsgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi0rc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KLSsgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iJGFjX2N0X0RMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotK2Vsc2UKLSthc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0rZm9yIGFzX2RpciBpbiAkUEFUSAotK2RvCi0rICBJRlM9JGFzX3NhdmVfSUZTCi0rICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSsgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSsgICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgotKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSsgICAgYnJlYWsgMgotKyAgZmkKLStkb25lCi0rICBkb25lCi0rSUZTPSRhc19zYXZlX0lGUwotKwotK2ZpCi0rZmkKLSthY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKLStpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KLSsgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1Ci0rJGFzX2VjaG8gIiRhY19jdF9ETExUT09MIiA+JjY7IH0KLStlbHNlCi0rICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotKyRhc19lY2hvICJubyIgPiY2OyB9Ci0rZmkKLSsKLSsgIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCi0rICAgIERMTFRPT0w9ImZhbHNlIgotKyAgZWxzZQotKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi0reWVzOikKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0rJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotK2FjX3Rvb2xfd2FybmVkPXllcyA7OwotK2VzYWMKLSsgICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAotKyAgZmkKLStlbHNlCi0rICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgotK2ZpCi0rCi0rdGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAotKwotKwotKwotKwotKwotKwotKwotKwotKwotKwotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcyIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcy4uLiAiID4mNjsgfQotK2lmIHRlc3QgIiR7bHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKLSsKLStjYXNlICRob3N0X29zIGluCi0rY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAotKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAotKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCi0rICAqLS1pZGVudGlmeS1zdHJpY3QqKQotKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKLSsgICAgOzsKLSsgICopCi0rICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjawotKyAgICA7OwotKyAgZXNhYwotKyAgOzsKLSsqKQotKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCi0rICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCi0rICA7OwotK2VzYWMKLSsKLStmaQotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNQotKyRhc19lY2hvICIkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNjsgfQotK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAotK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0tICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCi0rICBmb3IgYWNfcHJvZyBpbiBhcgotKyAgZG8KLSsgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi0rc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCi0geyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUitzZXR9IiA9IHNldDsgdGhlbiA6Ci1AQCAtNjMwOCw3ICs2NTYyLDcgQEAgZG8KLSAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotLSAgICBhY19jdl9wcm9nX0FSPSIke2FjX3Rvb2xfcHJlZml4fWFyIgotKyAgICBhY19jdl9wcm9nX0FSPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKLSAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgIGJyZWFrIDIKLSAgIGZpCi1AQCAtNjMyOCwxMSArNjU4MiwxNSBAQCAkYXNfZWNobyAibm8iID4mNjsgfQotIGZpCi0gCi0gCi0rICAgIHRlc3QgLW4gIiRBUiIgJiYgYnJlYWsKLSsgIGRvbmUKLSBmaQotLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FSIjsgdGhlbgotK2lmIHRlc3QgLXogIiRBUiI7IHRoZW4KLSAgIGFjX2N0X0FSPSRBUgotLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi0tc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCi0rICBmb3IgYWNfcHJvZyBpbiBhcgotK2RvCi0rICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLStzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKLSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci0gaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuIDoKLUBAIC02MzQ4LDcgKzY2MDYsNyBAQCBkbwotICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0tICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgotKyAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfcHJvZyIKLSAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgIGJyZWFrIDIKLSAgIGZpCi1AQCAtNjM2Nyw2ICs2NjI1LDEwIEBAIGVsc2UKLSAkYXNfZWNobyAibm8iID4mNjsgfQotIGZpCi0gCi0rCi0rICB0ZXN0IC1uICIkYWNfY3RfQVIiICYmIGJyZWFrCi0rZG9uZQotKwotICAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCi0gICAgIEFSPSJmYWxzZSIKLSAgIGVsc2UKLUBAIC02Mzc4LDEyICs2NjQwLDEwIEBAIGFjX3Rvb2xfd2FybmVkPXllcyA7OwotIGVzYWMKLSAgICAgQVI9JGFjX2N0X0FSCi0gICBmaQotLWVsc2UKLS0gIEFSPSIkYWNfY3ZfcHJvZ19BUiIKLSBmaQotIAotLXRlc3QgLXogIiRBUiIgJiYgQVI9YXIKLS10ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQotKzogJHtBUj1hcn0KLSs6ICR7QVJfRkxBR1M9Y3J1fQotIAotIAotIAotQEAgLTYzOTUsNiArNjY1NSw2NCBAQCB0ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQotIAotIAotIAotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0Li4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHtsdF9jdl9hcl9hdF9maWxlK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgbHRfY3ZfYXJfYXRfZmlsZT1ubwotKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLSsvKiBlbmQgY29uZmRlZnMuaC4gICovCi0rCi0raW50Ci0rbWFpbiAoKQotK3sKLSsKLSsgIDsKLSsgIHJldHVybiAwOwotK30KLStfQUNFT0YKLStpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0rICBlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKLSsgICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mNScKLSsgICAgICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQotKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQotKyAgYWNfc3RhdHVzPSQ/Ci0rICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSsgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KLSsgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgotKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgotKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKLSsJeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKLSsgIChldmFsICRsdF9hcl90cnkpIDI+JjUKLSsgIGFjX3N0YXR1cz0kPwotKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0rICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9Ci0rCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCi0rICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAotKyAgICAgICAgZmkKLSsgICAgICBmaQotKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQotKwotK2ZpCi0rcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0rCi0rZmkKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyX2F0X2ZpbGUiID4mNQotKyRhc19lY2hvICIkbHRfY3ZfYXJfYXRfZmlsZSIgPiY2OyB9Ci0rCi0raWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgotKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQotK2Vsc2UKLSsgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQotK2ZpCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0gaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLSBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgotQEAgLTY3MjksOCArNzA0Nyw4IEBAIGVzYWMKLSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgotIAotICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcwotLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCi0tbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCi0rbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKLStsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKLSAKLSAjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KLSBvcHRfY3I9Ci1AQCAtNjc2Niw2ICs3MDg0LDcgQEAgZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbwotICAgZWxzZQotICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgotICAgZmkKLSsgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKLSAKLSAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgotICAgcGlwZV93b3Jrcz1ubwotQEAgLTY4MDcsNiArNzEyNiwxOCBAQCBfTFRfRU9GCi0gICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KLSAJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCi0gCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKLSsvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KLSsjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQotKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQotKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KLSsjIGRlZmluZSBMVF9ETFNZTV9DT05TVAotKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKLSsvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KLSsjIGRlZmluZSBMVF9ETFNZTV9DT05TVAotKyNlbHNlCi0rIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKLSsjZW5kaWYKLSsKLSAjaWZkZWYgX19jcGx1c3BsdXMKLSBleHRlcm4gIkMiIHsKLSAjZW5kaWYKLUBAIC02ODE4LDcgKzcxNDksNyBAQCBfTFRfRU9GCi0gCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0gCi0gLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLwotLWNvbnN0IHN0cnVjdCB7Ci0rTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKLSAgIGNvbnN0IGNoYXIgKm5hbWU7Ci0gICB2b2lkICAgICAgICphZGRyZXNzOwotIH0KLUBAIC02ODQ0LDggKzcxNzUsOCBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgewotIF9MVF9FT0YKLSAJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgotIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAotLQkgIGx0X3NhdmVfTElCUz0iJExJQlMiCi0tCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0rCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKLSsJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgotIAkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKLSAJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKLUBAIC02ODU1LDggKzcxODYsOCBAQCBfTFRfRU9GCi0gICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KLSAJICAgIHBpcGVfd29ya3M9eWVzCi0gCSAgZmkKLS0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgotLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgotKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCi0rCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCi0gCWVsc2UKLSAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKLSAJZmkKLUBAIC02ODkzLDYgKzcyMjQsMjEgQEAgZWxzZQotICRhc19lY2hvICJvayIgPiY2OyB9Ci0gZmkKLSAKLSsjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KLStpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgotKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCi0rZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgotKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCi0rZmkKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSAKLSAKLSAKLUBAIC02OTEwLDYgKzcyNTYsNDAgQEAgZmkKLSAKLSAKLSAKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzcm9vdC4uLiAiID4mNjsgfQotKwotKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlidG9vbC1zeXNyb290IHdhcyBnaXZlbi4KLStpZiB0ZXN0ICIke3dpdGhfbGlidG9vbF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuIDoKLSsgIHdpdGh2YWw9JHdpdGhfbGlidG9vbF9zeXNyb290OwotK2Vsc2UKLSsgIHdpdGhfbGlidG9vbF9zeXNyb290PW5vCi0rZmkKLSsKLSsKLStsdF9zeXNyb290PQotK2Nhc2UgJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0gaW4gIygKLSsgeWVzKQotKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0rICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAotKyAgIGZpCi0rICAgOzsgIygKLSsgLyopCi0rICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi0rICAgOzsgIygKLSsgbm98JycpCi0rICAgOzsgIygKLSsgKikKLSsgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNQotKyRhc19lY2hvICIke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY2OyB9Ci0rICAgYXNfZm5fZXJyb3IgIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1Ci0rICAgOzsKLStlc2FjCi0rCi0rIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke2x0X3N5c3Jvb3Q6LW5vfSIgPiY1Ci0rJGFzX2VjaG8gIiR7bHRfc3lzcm9vdDotbm99IiA+JjY7IH0KLSsKLSsKLSAKLSAKLSAKLUBAIC03MTIwLDYgKzc1MDAsMTIzIEBAIGVzYWMKLSAKLSBuZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKLSAKLStpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0rICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW10OyBhY193b3JkPSQyCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgaWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCi0rICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiRNQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLStlbHNlCi0rYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotK2ZvciBhc19kaXIgaW4gJFBBVEgKLStkbwotKyAgSUZTPSRhc19zYXZlX0lGUwotKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSsgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0rICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0rICAgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJHthY190b29sX3ByZWZpeH1tdCIKLSsgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0rICAgIGJyZWFrIDIKLSsgIGZpCi0rZG9uZQotKyAgZG9uZQotK0lGUz0kYXNfc2F2ZV9JRlMKLSsKLStmaQotK2ZpCi0rTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MCi0raWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCi0rICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BTklGRVNUX1RPT0wiID4mNQotKyRhc19lY2hvICIkTUFOSUZFU1RfVE9PTCIgPiY2OyB9Ci0rZWxzZQotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSskYXNfZWNobyAibm8iID4mNjsgfQotK2ZpCi0rCi0rCi0rZmkKLStpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIjsgdGhlbgotKyAgYWNfY3RfTUFOSUZFU1RfVE9PTD0kTUFOSUZFU1RfVE9PTAotKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi0rc2V0IGR1bW15IG10OyBhY193b3JkPSQyCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgaWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCi0rICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9IiRhY19jdF9NQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLStlbHNlCi0rYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotK2ZvciBhc19kaXIgaW4gJFBBVEgKLStkbwotKyAgSUZTPSRhc19zYXZlX0lGUwotKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSsgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0rICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0rICAgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0ibXQiCi0rICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotKyAgICBicmVhayAyCi0rICBmaQotK2RvbmUKLSsgIGRvbmUKLStJRlM9JGFzX3NhdmVfSUZTCi0rCi0rZmkKLStmaQotK2FjX2N0X01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTAotK2lmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjUKLSskYXNfZWNobyAiJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNjsgfQotK2Vsc2UKLSsgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0rJGFzX2VjaG8gIm5vIiA+JjY7IH0KLStmaQotKwotKyAgaWYgdGVzdCAieCRhY19jdF9NQU5JRkVTVF9UT09MIiA9IHg7IHRoZW4KLSsgICAgTUFOSUZFU1RfVE9PTD0iOiIKLSsgIGVsc2UKLSsgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgotK3llczopCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLSthY190b29sX3dhcm5lZD15ZXMgOzsKLStlc2FjCi0rICAgIE1BTklGRVNUX1RPT0w9JGFjX2N0X01BTklGRVNUX1RPT0wKLSsgIGZpCi0rZWxzZQotKyAgTUFOSUZFU1RfVE9PTD0iJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCIKLStmaQotKwotK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10Ci0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbC4uLiAiID4mNjsgfQotK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9tYWluZmVzdF90b29sK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCi0rICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiY1Ci0rICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0Ci0rICBjYXQgY29uZnRlc3QuZXJyID4mNQotKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgotKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCi0rICBmaQotKyAgcm0gLWYgY29uZnRlc3QqCi0rZmkKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY1Ci0rJGFzX2VjaG8gIiRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNjsgfQotK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCi0rICBNQU5JRkVTVF9UT09MPToKLStmaQotKwotKwotKwotKwotKwotIAotICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICByaGFwc29keSogfCBkYXJ3aW4qKQotQEAgLTc2ODMsNiArODE4MCw4IEBAIF9MVF9FT0YKLSAgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKLSAgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1Ci0gICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQotKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiY1Ci0rICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JjUKLSAgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKLSBpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQotIF9MVF9FT0YKLUBAIC03ODc4LDcgKzgzNzcsOCBAQCBmaQotIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKLSAKLSAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgotLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJwotK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKScKLStMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCi0gCi0gCi0gCi1AQCAtNzk2Nyw3ICs4NDY3LDcgQEAgYWl4MyopCi0gZXNhYwotIAotICMgR2xvYmFsIHZhcmlhYmxlczoKLS1vZmlsZT1saWJ0b29sCi0rb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCi0gY2FuX2J1aWxkX3NoYXJlZD15ZXMKLSAKLSAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKLUBAIC04MjY1LDggKzg3NjUsNiBAQCBmaQotIGx0X3Byb2dfY29tcGlsZXJfcGljPQotIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQotIAotLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQotLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9Ci0gCi0gICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotQEAgLTg0MzIsNiArODkzMCwxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQotIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCi0gCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKLSAJOzsKLSsgICAgICBuYWdmb3IqKQotKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCi0rCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKLSsJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCi0rCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKLSsJOzsKLSAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCi0gICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAotIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQotQEAgLTg0OTQsNyArODk5OCw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9Ci0gICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwotICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKLSAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKLSsgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCi0gCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OwotICAgICAgICopCi0gCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKLUBAIC04NTUxLDEzICs5MDU1LDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKLSAgICAgOzsKLSBlc2FjCi0teyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1Ci0tJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9Ci0tCi0tCi0tCi0tCi0gCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCi0rZmkKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKLSskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KLStsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKLSAKLSAjCi0gIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgotQEAgLTg2MTgsNiArOTEyNiwxMSBAQCBmaQotIAotIAotIAotKwotKwotKwotKwotKwotICMKLSAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0gIwotQEAgLTg5NjgsNyArOTQ4MSw4IEBAIF9MVF9FT0YKLSAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAotICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubwotICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCi0tICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSsgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKLSAKLSAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotQEAgLTkwNjcsMTIgKzk1ODEsMTIgQEAgX0xUX0VPRgotIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJwotIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Ci0gCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nLXJwYXRoICRsaWJkaXInCi0tCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCi0rCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJwotIAkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KLSAJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0tCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJwotKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCi0gCSAgZmkKLSAJICA7OwotIAllc2FjCi1AQCAtOTA4Niw4ICs5NjAwLDggQEAgX0xUX0VPRgotIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCi0gCXdsYXJjPQotICAgICAgIGVsc2UKLS0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLS0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0rCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICAgZmkKLSAgICAgICA7OwotIAotQEAgLTkxMDUsOCArOTYxOSw4IEBAIF9MVF9FT0YKLSAKLSBfTFRfRU9GCi0gICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0tCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0tCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSsJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgIGVsc2UKLSAJbGRfc2hsaWJzPW5vCi0gICAgICAgZmkKLUBAIC05MTUyLDggKzk2NjYsOCBAQCBfTFRfRU9GCi0gCi0gICAgICopCi0gICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSsJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0rCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgICBlbHNlCi0gCWxkX3NobGlicz1ubwotICAgICAgIGZpCi1AQCAtOTI4Myw3ICs5Nzk3LDEzIEBAIF9MVF9FT0YKLSAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKLSAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgotICAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgotLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotKyAgICAgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgotKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCi0rZWxzZQotKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0gLyogZW5kIGNvbmZkZWZzLmguICAqLwotIAotIGludAotQEAgLTkyOTYsMjIgKzk4MTYsMjkgQEAgbWFpbiAoKQotIF9BQ0VPRgotIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAKLS1sdF9haXhfbGlicGF0aF9zZWQ9JwotLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7Ci0tCS9eMC8gewotLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCi0tCSAgICBwCi0tCX0KLS0gICAgfScKLS1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLS0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi0taWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgotLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0tZmkKLSsgIGx0X2FpeF9saWJwYXRoX3NlZD0nCi0rICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotKwkgIC9eMC8gewotKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLwotKwkgICAgICBwCi0rCSAgfQotKyAgICAgIH0nCi0rICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0rICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi0rICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgotKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0rICBmaQotIGZpCi0gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0taWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0rICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgotKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCi0rICBmaQotKwotK2ZpCi0rCi0rICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCi0rZmkKLSAKLSAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0gICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgotQEAgLTkzMjMsNyArOTg1MCwxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLSAJZWxzZQotIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCi0gCSAjIGVtcHR5IGV4ZWN1dGFibGUuCi0tCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0rCSBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCi0rICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKLStlbHNlCi0rICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLSAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0gCi0gaW50Ci1AQCAtOTMzNiwyMiArOTg2OSwyOSBAQCBtYWluICgpCi0gX0FDRU9GCi0gaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotIAotLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0tICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLS0JL14wLyB7Ci0tCSAgICBzL14wICAqXCguKlwpJC9cMS8KLS0JICAgIHAKLS0JfQotLSAgICB9JwotLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLS1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0tICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLS1maQotKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKLSsgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7Ci0rCSAgL14wLyB7Ci0rCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCi0rCSAgICAgIHAKLSsJICB9Ci0rICAgICAgfScKLSsgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSsgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLSsgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCi0rICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSsgIGZpCi0gZmkKLSBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLS1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLSsgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCi0rICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKLSsgIGZpCi0rCi0rZmkKLSsKLSsgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KLStmaQotIAotIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLSAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotQEAgLTkzOTYsMjAgKzk5MzYsNjMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0gICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KLSAgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCi0gICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLS0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJwotLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCi0tICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KLS0gICAgICBsaWJleHQ9bGliCi0tICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0tICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0tICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCi0tICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KLS0gICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJwotLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCi0tICAgICAgb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJwotLSAgICAgIGZpeF9zcmNmaWxlX3BhdGg9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJwotLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCi0rICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSsgICAgICBjbCopCi0rCSMgTmF0aXZlIE1TVkMKLSsJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKLSsJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKLSsJYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcwotKwlmaWxlX2xpc3Rfc3BlYz0nQCcKLSsJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KLSsJbGliZXh0PWxpYgotKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLSsJc2hyZXh0X2NtZHM9Ii5kbGwiCi0rCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KLSsJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKLSsJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KLSsJICAgIHNlZCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7Ci0rCSAgZWxzZQotKwkgICAgc2VkIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKLSsJICBmaX4KLSsJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+Ci0rCSAgbGlua25hbWVzPScKLSsJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgotKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgKT0ndHJ1ZScKLSsJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKLSsJZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotKwkjIERvbid0IHVzZSByYW5saWIKLSsJb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJwotKwlwb3N0bGlua19jbWRzPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+Ci0rCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KLSsJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCi0rCSAgICAqLmV4ZXwqLkVYRSkgOzsKLSsJICAgICopCi0rCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKLSsJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKLSsJICAgICAgOzsKLSsJICBlc2FjfgotKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCi0rCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOwotKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7Ci0rCSAgZmknCi0rCTs7Ci0rICAgICAgKikKLSsJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCi0rCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCi0rCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCi0rCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCi0rCWxpYmV4dD1saWIKLSsJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0rCXNocmV4dF9jbWRzPSIuZGxsIgotKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCi0rCWFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCi0rCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCi0rCW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCi0rCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCi0rCW9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKLSsJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKLSsJOzsKLSsgICAgICBlc2FjCi0gICAgICAgOzsKLSAKLSAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLUBAIC05NDcwLDcgKzEwMDUzLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0gCi0gICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KLSAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0rICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwotICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi1AQCAtOTQ3OCw3ICsxMDA2MSw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotIAotICAgICBocHV4OSopCi0gICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLS0JYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgIGVsc2UKLSAJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgICBmaQotQEAgLTk0OTQsNyArMTAwNzcsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLSAKLSAgICAgaHB1eDEwKikKLSAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLS0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgIGVsc2UKLSAJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgIGZpCi1AQCAtOTUxOCwxMCArMTAxMDEsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0gCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAJICA7OwotIAlpYTY0KikKLS0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotIAkgIDs7Ci0gCSopCi0tCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gCSAgOzsKLSAJZXNhYwotICAgICAgIGVsc2UKLUBAIC05NjAwLDIzICsxMDE4MywzNiBAQCBmaQotIAotICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0tCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0rCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotIAkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAotIAkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCi0gCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCi0tICAgICAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotLSAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgotLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgotKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKLSsJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgotKwkgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0gLyogZW5kIGNvbmZkZWZzLmguICAqLwotLWludCBmb28odm9pZCkge30KLStpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9Ci0gX0FDRU9GCi0gaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotLSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotLQotKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzCi0rZWxzZQotKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm8KLSBmaQotIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotLSAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKLSsgICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCi0rZmkKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjUKLSskYXNfZWNobyAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjY7IH0KLSsJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgotKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotKwlmaQotICAgICAgIGVsc2UKLSAJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi1AQCAtOTcwMSw3ICsxMDI5Nyw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKLSAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0tCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgICBlbHNlCi0gCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotQEAgLTk3MjAsOSArMTAzMTYsOSBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCi0gICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAJd2xhcmM9JyR7d2x9JwotLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotLQkgICRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCi0rCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCi0gICAgICAgZWxzZQotIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KLSAJKiJDb21waWxlcnMgNS4wIiopCi1AQCAtMTAyOTgsOCArMTA4OTQsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICBuZWVkX3ZlcnNpb249bm8KLSAgIG5lZWRfbGliX3ByZWZpeD1ubwotIAotLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCi0tICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQotKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgotKyAgeWVzLCopCi0rICAgICMgZ2NjCi0gICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCi0gICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKLSAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci1AQCAtMTAzMzIsMTMgKzEwOTI5LDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICAgOzsKLSAgICAgZXNhYwotKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwotKyAgICA7OwotKwotKyAgKixjbCopCi0rICAgICMgTmF0aXZlIE1TVkMKLSsgICAgbGlibmFtZV9zcGVjPSckbmFtZScKLSsgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKLSsKLSsgICAgY2FzZSAkYnVpbGRfb3MgaW4KLSsgICAgbWluZ3cqKQotKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KLSsgICAgICBsdF9zYXZlX2lmcz0kSUZTCi0rICAgICAgSUZTPSc7JwotKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKLSsgICAgICBkbwotKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcwotKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KLSsgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAotKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgotKyAgICAgIGRvbmUKLSsgICAgICBJRlM9JGx0X3NhdmVfaWZzCi0rICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCi0rICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCi0rICAgICAgOzsKLSsgICAgY3lnd2luKikKLSsgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCi0rICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCi0rICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgotKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKLSsgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKLSsgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotKyAgICAgIDs7Ci0rICAgICopCi0rICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgotKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgotKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KLSsgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCi0rICAgICAgZWxzZQotKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotKyAgICAgIGZpCi0rICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCi0rICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQotKyAgICAgIDs7Ci0rICAgIGVzYWMKLSsKLSsgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KLSsgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgotKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KLSsgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KLSsgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCi0rICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0rICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KLSsgICAgICAgJFJNIFwkZGxwYXRoJwotKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0rICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKLSAgICAgOzsKLSAKLSAgICopCi0rICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgotICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKLSsgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKLSAgICAgOzsKLSAgIGVzYWMKLS0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KLSAgIHNobGlicGF0aF92YXI9UEFUSAotICAgOzsKLUBAIC0xMDQzMCw3ICsxMTA4NSw3IEBAIGhhaWt1KikKLSAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAotICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L2Jlb3Mvc3lzdGVtL2xpYicKLSsgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJwotICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgOzsKLSAKLUBAIC0xMTI3MCwxMCArMTE5MjUsMTAgQEAgZWxzZQotIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKLSAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCi0gI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCi0tdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKLStpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7Ci0gI2VuZGlmCi0gCi0tdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9Ci0raW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9Ci0gaW50IG1haW4gKCkKLSB7Ci0gICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKLUBAIC0xMTM3NiwxMCArMTIwMzEsMTAgQEAgZWxzZQotIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKLSAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCi0gI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCi0tdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKLStpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7Ci0gI2VuZGlmCi0gCi0tdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9Ci0raW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9Ci0gaW50IG1haW4gKCkKLSB7Ci0gICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKLUBAIC0xNTQzNiwxMyArMTYwOTEsMjAgQEAgZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGx0X3Vuc2V0PSdgJEVDSE8gIiRsdF91bnNldCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBsdF9OTDJTUD0nYCRFQ0hPICIkbHRfTkwyU1AiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIHJlbG9hZF9mbGFnPSdgJEVDSE8gIiRyZWxvYWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gcmVsb2FkX2NtZHM9J2AkRUNITyAiJHJlbG9hZF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBPQkpEVU1QPSdgJEVDSE8gIiRPQkpEVU1QIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBkZXBsaWJzX2NoZWNrX21ldGhvZD0nYCRFQ0hPICIkZGVwbGlic19jaGVja19tZXRob2QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGZpbGVfbWFnaWNfY21kPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rZmlsZV9tYWdpY19nbG9iPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2dsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK3dhbnRfbm9jYXNlZ2xvYj0nYCRFQ0hPICIkd2FudF9ub2Nhc2VnbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLStETExUT09MPSdgJEVDSE8gIiRETExUT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLStzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0nYCRFQ0hPICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIEFSPSdgJEVDSE8gIiRBUiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gQVJfRkxBR1M9J2AkRUNITyAiJEFSX0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSthcmNoaXZlcl9saXN0X3NwZWM9J2AkRUNITyAiJGFyY2hpdmVyX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gU1RSSVA9J2AkRUNITyAiJFNUUklQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBSQU5MSUI9J2AkRUNITyAiJFJBTkxJQiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUBAIC0xNTQ1NywxNCArMTYxMTksMTcgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGUKLSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rbm1fZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJG5tX2ZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLStsdF9zeXNyb290PSdgJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBvYmpkaXI9J2AkRUNITyAiJG9iamRpciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gTUFHSUNfQ01EPSdgJEVDSE8gIiRNQUdJQ19DTUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0tbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbHRfcHJvZ19jb21waWxlcl9waWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLStsdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbmVlZF9sb2Nrcz0nYCRFQ0hPICIkbmVlZF9sb2NrcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rTUFOSUZFU1RfVE9PTD0nYCRFQ0hPICIkTUFOSUZFU1RfVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gRFNZTVVUSUw9J2AkRUNITyAiJERTWU1VVElMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBOTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gTElQTz0nYCRFQ0hPICIkTElQTyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1AQCAtMTU0OTcsMTIgKzE2MTYyLDEyIEBAIGhhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xCi0gaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGluaGVyaXRfcnBhdGg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGxpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotLWZpeF9zcmNmaWxlX3BhdGg9J2AkRUNITyAiJGZpeF9zcmNmaWxlX3BhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGFsd2F5c19leHBvcnRfc3ltYm9scz0nYCRFQ0hPICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBleHBvcnRfc3ltYm9sc19jbWRzPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBleGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gaW5jbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIHByZWxpbmtfY21kcz0nYCRFQ0hPICIkcHJlbGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLStwb3N0bGlua19jbWRzPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBmaWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSdgJEVDSE8gIiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotQEAgLTE1NTU3LDggKzE2MjIyLDEzIEBAIHJlbG9hZF9mbGFnIFwKLSBPQkpEVU1QIFwKLSBkZXBsaWJzX2NoZWNrX21ldGhvZCBcCi0gZmlsZV9tYWdpY19jbWQgXAotK2ZpbGVfbWFnaWNfZ2xvYiBcCi0rd2FudF9ub2Nhc2VnbG9iIFwKLStETExUT09MIFwKLStzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCBcCi0gQVIgXAotIEFSX0ZMQUdTIFwKLSthcmNoaXZlcl9saXN0X3NwZWMgXAotIFNUUklQIFwKLSBSQU5MSUIgXAotIENDIFwKLUBAIC0xNTU2OCwxMiArMTYyMzgsMTQgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCi0gbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAotIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKLSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKLStubV9maWxlX2xpc3Rfc3BlYyBcCi0gbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgXAotLWx0X3Byb2dfY29tcGlsZXJfd2wgXAotIGx0X3Byb2dfY29tcGlsZXJfcGljIFwKLStsdF9wcm9nX2NvbXBpbGVyX3dsIFwKLSBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyBcCi0gbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAotIG5lZWRfbG9ja3MgXAotK01BTklGRVNUX1RPT0wgXAotIERTWU1VVElMIFwKLSBOTUVESVQgXAotIExJUE8gXAotQEAgLTE1NTg5LDcgKzE2MjYxLDYgQEAgbm9fdW5kZWZpbmVkX2ZsYWcgXAotIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgXAotIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAotIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAotLWZpeF9zcmNmaWxlX3BhdGggXAotIGV4Y2x1ZGVfZXhwc3ltcyBcCi0gaW5jbHVkZV9leHBzeW1zIFwKLSBmaWxlX2xpc3Rfc3BlYyBcCi1AQCAtMTU2MjUsNiArMTYyOTYsNyBAQCBtb2R1bGVfY21kcyBcCi0gbW9kdWxlX2V4cHN5bV9jbWRzIFwKLSBleHBvcnRfc3ltYm9sc19jbWRzIFwKLSBwcmVsaW5rX2NtZHMgXAotK3Bvc3RsaW5rX2NtZHMgXAotIHBvc3RpbnN0YWxsX2NtZHMgXAotIHBvc3R1bmluc3RhbGxfY21kcyBcCi0gZmluaXNoX2NtZHMgXAotQEAgLTE2MzgyLDcgKzE3MDU0LDggQEAgJGFzX2VjaG8gWCIkZmlsZSIgfAotICMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgotICMKLSAjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAotLSMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0rIyAgICAgICAgICAgICAgICAgSW5jLgotICMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2Ci0gIwotICMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KLUBAIC0xNjQ4NSwxOSArMTcxNTgsNDIgQEAgU1AyTkw9JGx0X2x0X1NQMk5MCi0gIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgotIE5MMlNQPSRsdF9sdF9OTDJTUAotIAotKyMgY29udmVydCBcJGJ1aWxkIGZpbGUgbmFtZXMgdG8gXCRob3N0IGZvcm1hdC4KLSt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCi0rCi0rIyBjb252ZXJ0IFwkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4KLSt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCi0rCi0gIyBBbiBvYmplY3Qgc3ltYm9sIGR1bXBlci4KLSBPQkpEVU1QPSRsdF9PQkpEVU1QCi0gCi0gIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KLSBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKLSAKLS0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gImZpbGVfbWFnaWMiLgotKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KLSBmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKLSAKLSsjIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgotK2ZpbGVfbWFnaWNfZ2xvYj0kbHRfZmlsZV9tYWdpY19nbG9iCi0rCi0rIyBGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCi0rd2FudF9ub2Nhc2VnbG9iPSRsdF93YW50X25vY2FzZWdsb2IKLSsKLSsjIERMTCBjcmVhdGlvbiBwcm9ncmFtLgotK0RMTFRPT0w9JGx0X0RMTFRPT0wKLSsKLSsjIENvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXMuCi0rc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCi0rCi0gIyBUaGUgYXJjaGl2ZXIuCi0gQVI9JGx0X0FSCi0rCi0rIyBGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZS4KLSBBUl9GTEFHUz0kbHRfQVJfRkxBR1MKLSAKLSsjIEhvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KLSthcmNoaXZlcl9saXN0X3NwZWM9JGx0X2FyY2hpdmVyX2xpc3Rfc3BlYwotKwotICMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCi0gU1RSSVA9JGx0X1NUUklQCi0gCi1AQCAtMTY1MjcsNiArMTcyMjMsMTIgQEAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKLSAjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgotIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeAotIAotKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciBcJE5NLgotK25tX2ZpbGVfbGlzdF9zcGVjPSRsdF9ubV9maWxlX2xpc3Rfc3BlYwotKwotKyMgVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzLGFuZCBpbiB3aGljaCBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuCi0rbHRfc3lzcm9vdD0kbHRfc3lzcm9vdAotKwotICMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgotIG9iamRpcj0kb2JqZGlyCi0gCi1AQCAtMTY1MzYsNiArMTcyMzgsOSBAQCBNQUdJQ19DTUQ9JE1BR0lDX0NNRAotICMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/Ci0gbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcwotIAotKyMgTWFuaWZlc3QgdG9vbC4KLStNQU5JRkVTVF9UT09MPSRsdF9NQU5JRkVTVF9UT09MCi0rCi0gIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgotIERTWU1VVElMPSRsdF9EU1lNVVRJTAotIAotQEAgLTE2NjUwLDEyICsxNzM1NSwxMiBAQCB3aXRoX2djYz0kR0NDCi0gIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgotIG5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKLSAKLS0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCi0td2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKLS0KLSAjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KLSBwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKLSAKLSsjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCi0rd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKLSsKLSAjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCi0gbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKLSAKLUBAIC0xNjc0Miw5ICsxNzQ0Nyw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKLSAjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KLSBsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCi0gCi0tIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgotLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKLS0KLSAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KLSBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scwotIAotQEAgLTE2NzYwLDYgKzE3NDYyLDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKLSAjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgotIHByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCi0gCi0rIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgotK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHMKLSsKLSAjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KLSBmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWMKLSAKLUBAIC0xNjc5MiwyMTAgKzE3NDk3LDE2OSBAQCBsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKLSAgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KLSAgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCi0gICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPwotLSAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKLS0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKLS0KLS0gIGNhc2UgJHhzaV9zaGVsbCBpbgotLSAgeWVzKQotLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgotLQotLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAotLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKLS0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KLS1mdW5jX2Rpcm5hbWUgKCkKLS17Ci0tICBjYXNlICR7MX0gaW4KLS0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKLS0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OwotLSAgZXNhYwotLX0KLS0KLS0jIGZ1bmNfYmFzZW5hbWUgZmlsZQotLWZ1bmNfYmFzZW5hbWUgKCkKLS17Ci0tICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCi0tfQotLQotLSMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKLS0jIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCi0tIyBjYWxsOgotLSMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCi0tIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0Ci0tIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCi0tIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCi0tIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCi0tIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0tIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCi0tIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bwotLSMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgotLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKLS17Ci0tICBjYXNlICR7MX0gaW4KLS0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKLS0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OwotLSAgZXNhYwotLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgotLX0KLS0KLS0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQotLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCi0tIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKLS0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKLS0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCi0tZnVuY19zdHJpcG5hbWUgKCkKLS17Ci0tICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCi0tICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCi0tICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQotLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KLS0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9Ci0tfQotLQotLSMgZnVuY19vcHRfc3BsaXQKLS1mdW5jX29wdF9zcGxpdCAoKQotLXsKLS0gIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQotLSAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KLS19Ci0tCi0tIyBmdW5jX2xvMm8gb2JqZWN0Ci0tZnVuY19sbzJvICgpCi0tewotLSAgY2FzZSAkezF9IGluCi0tICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7Ci0tICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OwotLSAgZXNhYwotLX0KLS0KLS0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQotLWZ1bmNfeGZvcm0gKCkKLS17Ci0tICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCi0tfQotLQotLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KLS1mdW5jX2FyaXRoICgpCi0tewotLSAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpCi0tfQotLQotLSMgZnVuY19sZW4gc3RyaW5nCi0tIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgotLWZ1bmNfbGVuICgpCi0tewotLSAgZnVuY19sZW5fcmVzdWx0PSR7IzF9Ci0tfQotLQotLV9MVF9FT0YKLS0gICAgOzsKLS0gICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgotLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgotLQotLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAotLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKLS0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KLS1mdW5jX2Rpcm5hbWUgKCkKLS17Ci0tICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgotLSAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAotLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KLS0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKLS0gIGVsc2UKLS0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgotLSAgZmkKLS19Ci0tCi0tIyBmdW5jX2Jhc2VuYW1lIGZpbGUKLS1mdW5jX2Jhc2VuYW1lICgpCi0tewotLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCi0tfQotLQotLQotLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCi0tIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KLS0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAotLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZwotLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KLS0jIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCi0tZnVuY19zdHJpcG5hbWUgKCkKLS17Ci0tICBjYXNlICR7Mn0gaW4KLS0gICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKLS0gICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OwotLSAgZXNhYwotLX0KLS0KLS0jIHNlZCBzY3JpcHRzOgotLW15X3NlZF9sb25nX29wdD0nMXMvXlwoLVtePV0qXCk9LiovXDEvO3EnCi0tbXlfc2VkX2xvbmdfYXJnPScxcy9eLVtePV0qPS8vJwotLQotLSMgZnVuY19vcHRfc3BsaXQKLS1mdW5jX29wdF9zcGxpdCAoKQotLXsKLS0gIGZ1bmNfb3B0X3NwbGl0X29wdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCi0tICBmdW5jX29wdF9zcGxpdF9hcmc9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19hcmciYAotLX0KLS0KLS0jIGZ1bmNfbG8ybyBvYmplY3QKLS1mdW5jX2xvMm8gKCkKLS17Ci0tICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCi0tfQotLQotLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCi0tZnVuY194Zm9ybSAoKQotLXsKLS0gIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW14uXSokLy5sby8nYAotLX0KLS0KLS0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCi0tZnVuY19hcml0aCAoKQotLXsKLS0gIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkQCJgCi0tfQotLQotLSMgZnVuY19sZW4gc3RyaW5nCi0tIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgotLWZ1bmNfbGVuICgpCi0tewotLSAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkMSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAotLX0KLS0KLS1fTFRfRU9GCi0tZXNhYwotLQotLWNhc2UgJGx0X3NoZWxsX2FwcGVuZCBpbgotLSAgeWVzKQotLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgotLQotLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCi0tIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCi0tZnVuY19hcHBlbmQgKCkKLS17Ci0tICBldmFsICIkMSs9XCQyIgotLX0KLS1fTFRfRU9GCi0tICAgIDs7Ci0tICAqKQotLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgotLQotLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCi0tIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCi0tZnVuY19hcHBlbmQgKCkKLS17Ci0tICBldmFsICIkMT1cJCQxXCQyIgotLX0KLS0KLS1fTFRfRU9GCi0tICAgIDs7Ci0tICBlc2FjCi0tCi0tCi0tICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCi0tICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCi0tCi0tICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8Ci0rICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCi0rICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQotKwotKyAgaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgotKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZSAvY1wKLStmdW5jX2Rpcm5hbWUgKClcCi0re1wKLStcICAgIGNhc2UgJHsxfSBpblwKLStcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCi0rXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCi0rXCAgICBlc2FjXAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgIHNlZCAtZSAnL15mdW5jX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19iYXNlbmFtZSAvY1wKLStmdW5jX2Jhc2VuYW1lICgpXAotK3tcCi0rXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rCi0rCi0rICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgL2NcCi0rZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKVwKLSt7XAotK1wgICAgY2FzZSAkezF9IGluXAotK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKLStcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKLStcICAgIGVzYWNcCi0rXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rCi0rCi0rICBzZWQgLWUgJy9eZnVuY19zdHJpcG5hbWUgKCkkLywvXn0gIyBmdW5jX3N0cmlwbmFtZSAvY1wKLStmdW5jX3N0cmlwbmFtZSAoKVwKLSt7XAotK1wgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZVwKLStcICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC5cCi0rXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfVwKLStcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9XAotK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1cCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3RyaXBuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rCi0rCi0rICBzZWQgLWUgJy9eZnVuY19zcGxpdF9sb25nX29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgL2NcCi0rZnVuY19zcGxpdF9sb25nX29wdCAoKVwKLSt7XAotK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9XAotK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fVwKLSt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9sb25nX29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgL2NcCi0rZnVuY19zcGxpdF9zaG9ydF9vcHQgKClcCi0re1wKLStcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99XAotK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifVwKLSt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9zaG9ydF9vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgIHNlZCAtZSAnL15mdW5jX2xvMm8gKCkkLywvXn0gIyBmdW5jX2xvMm8gL2NcCi0rZnVuY19sbzJvICgpXAotK3tcCi0rXCAgICBjYXNlICR7MX0gaW5cCi0rXCAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7XAotK1wgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOztcCi0rXCAgICBlc2FjXAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xvMm8gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgIHNlZCAtZSAnL15mdW5jX3hmb3JtICgpJC8sL159ICMgZnVuY194Zm9ybSAvY1wKLStmdW5jX3hmb3JtICgpXAotK3tcCi0rICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9cCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfeGZvcm0gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgIHNlZCAtZSAnL15mdW5jX2FyaXRoICgpJC8sL159ICMgZnVuY19hcml0aCAvY1wKLStmdW5jX2FyaXRoICgpXAotK3tcCi0rICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKVwKLSt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcml0aCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfbGVuICgpJC8sL159ICMgZnVuY19sZW4gL2NcCi0rZnVuY19sZW4gKClcCi0re1wKLSsgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xlbiBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotK2ZpCi0rCi0raWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgotKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kICgpJC8sL159ICMgZnVuY19hcHBlbmQgL2NcCi0rZnVuY19hcHBlbmQgKClcCi0re1wKLSsgICAgZXZhbCAiJHsxfSs9XFwkezJ9IlwKLSt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgIHNlZCAtZSAnL15mdW5jX2FwcGVuZF9xdW90ZWQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZF9xdW90ZWQgL2NcCi0rZnVuY19hcHBlbmRfcXVvdGVkICgpXAotK3tcCi0rXCAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IlwKLStcICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZF9xdW90ZWQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKLSsgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAotKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLStlbHNlCi0rICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQotKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKLSsgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSsgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rZmkKLSsKLStpZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjUKLSskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjI7fQotK2ZpCi0rCi0rCi0rICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAotICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQotICAgY2htb2QgK3ggIiRvZmlsZSIKLSAKLWRpZmYgLS1naXQgYS9nYXMvY29uZmlndXJlIGIvZ2FzL2NvbmZpZ3VyZQotaW5kZXggZTU3NGNiODUxNC4uYTM2ZjFhZTE2MSAxMDA3NTUKLS0tLSBhL2dhcy9jb25maWd1cmUKLSsrKyBiL2dhcy9jb25maWd1cmUKLUBAIC02NTAsOCArNjUwLDExIEBAIE9UT09MCi0gTElQTwotIE5NRURJVAotIERTWU1VVElMCi0rTUFOSUZFU1RfVE9PTAotIFJBTkxJQgotK2FjX2N0X0FSCi0gQVIKLStETExUT09MCi0gT0JKRFVNUAotIExOX1MKLSBOTQotQEAgLTc2Myw2ICs3NjYsNyBAQCBlbmFibGVfc3RhdGljCi0gd2l0aF9waWMKLSBlbmFibGVfZmFzdF9pbnN0YWxsCi0gd2l0aF9nbnVfbGQKLSt3aXRoX2xpYnRvb2xfc3lzcm9vdAotIGVuYWJsZV9saWJ0b29sX2xvY2sKLSBlbmFibGVfcGx1Z2lucwotIGVuYWJsZV9sYXJnZWZpbGUKLUBAIC00OTIxLDggKzQ5MjUsOCBAQCBlc2FjCi0gCi0gCi0gCi0tbWFjcm9fdmVyc2lvbj0nMi4yLjdhJwotLW1hY3JvX3JldmlzaW9uPScxLjMxMzQnCi0rbWFjcm9fdmVyc2lvbj0nMi40JwotK21hY3JvX3JldmlzaW9uPScxLjMyOTMnCi0gCi0gCi0gCi1AQCAtNDk2Miw3ICs0OTY2LDcgQEAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KLSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzIiA+JjUKLSAkYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncy4uLiAiID4mNjsgfQotICMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgotLWlmIHRlc3QgIlhgcHJpbnQgLXIgLS0gLW4gMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCi0raWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCi0gICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KLSAgIEVDSE89J3ByaW50IC1yIC0tJwotIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCi1AQCAtNTY0OCw4ICs1NjUyLDggQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsKLSAjIFRyeSBzb21lIFhTSSBmZWF0dXJlcwotIHhzaV9zaGVsbD1ubwotICggX2x0X2R1bW15PSJhL2IvYyIKLS0gIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCi0tICAgICAgPSBjLGEvYiwsIFwKLSsgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCi0rICAgICAgPSBjLGEvYixiL2MsIFwKLSAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAotICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAotICAgJiYgeHNpX3NoZWxsPXllcwotQEAgLTU2OTgsNiArNTcwMiw4MCBAQCBlc2FjCi0gCi0gCi0gCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdC4uLiAiID4mNjsgfQotK2lmIHRlc3QgIiR7bHRfY3ZfdG9faG9zdF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGNhc2UgJGhvc3QgaW4KLSsgICotKi1taW5ndyogKQotKyAgICBjYXNlICRidWlsZCBpbgotKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKLSsgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLSsgICAgICAgIDs7Ci0rICAgICAgKi0qLWN5Z3dpbiogKQotKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCi0rICAgICAgICA7OwotKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKLSsgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgotKyAgICAgICAgOzsKLSsgICAgZXNhYwotKyAgICA7OwotKyAgKi0qLWN5Z3dpbiogKQotKyAgICBjYXNlICRidWlsZCBpbgotKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKLSsgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KLSsgICAgICAgIDs7Ci0rICAgICAgKi0qLWN5Z3dpbiogKQotKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCi0rICAgICAgICA7OwotKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKLSsgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgotKyAgICAgICAgOzsKLSsgICAgZXNhYwotKyAgICA7OwotKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKLSsgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCi0rICAgIDs7Ci0rZXNhYwotKwotK2ZpCi0rCi0rdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY1Ci0rJGFzX2VjaG8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjY7IH0KLSsKLSsKLSsKLSsKLSsKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICAjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCi0rbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCi0rY2FzZSAkaG9zdCBpbgotKyAgKi0qLW1pbmd3KiApCi0rICAgIGNhc2UgJGJ1aWxkIGluCi0rICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cwotKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgotKyAgICAgICAgOzsKLSsgICAgZXNhYwotKyAgICA7OwotK2VzYWMKLSsKLStmaQotKwotK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNQotKyRhc19lY2hvICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY2OyB9Ci0rCi0rCi0rCi0rCi0rCi0geyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKLSAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9Ci0gaWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbiA6Ci1AQCAtNTcxNCw2ICs1NzkyLDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCi0gZXNhYwotIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLSBjYXNlICRob3N0X29zIGluCi0rICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0rICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgotKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCi0rICAgIGZpCi0rICAgIDs7Ci0gICBkYXJ3aW4qKQotICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLUBAIC01ODgyLDcgKzU5NjUsOCBAQCBtaW5ndyogfCBwdzMyKikKLSAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKLSAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCi0gICBlbHNlCi0tICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JwotKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCi0rICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKLSAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJwotICAgZmkKLSAgIDs7Ci1AQCAtNjAzNiw2ICs2MTIwLDIxIEBAIGVzYWMKLSBmaQotIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQotICRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQotKwotK2ZpbGVfbWFnaWNfZ2xvYj0KLSt3YW50X25vY2FzZWdsb2I9bm8KLStpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgotKyAgY2FzZSAkaG9zdF9vcyBpbgotKyAgbWluZ3cqIHwgcHczMiopCi0rICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSsgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCi0rICAgIGVsc2UKLSsgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tcMV1cL1tcMV1cL2c7L2ciYAotKyAgICBmaQotKyAgICA7OwotKyAgZXNhYwotK2ZpCi0rCi0gZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCi0gZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi0gdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCi1AQCAtNjA1MSw5ICs2MTUwLDE2MiBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KLSAKLSAKLSAKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLStpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0rICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi0rc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgotKyAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0rZWxzZQotK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLStmb3IgYXNfZGlyIGluICRQQVRICi0rZG8KLSsgIElGUz0kYXNfc2F2ZV9JRlMKLSsgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0rICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotKyAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKLSsgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0rICAgIGJyZWFrIDIKLSsgIGZpCi0rZG9uZQotKyAgZG9uZQotK0lGUz0kYXNfc2F2ZV9JRlMKLSsKLStmaQotK2ZpCi0rRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCi0raWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCi0rICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQotKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9Ci0rZWxzZQotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSskYXNfZWNobyAibm8iID4mNjsgfQotK2ZpCi0rCi0rCi0rZmkKLStpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgotKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAotKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLStzZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgotKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0rZWxzZQotK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLStmb3IgYXNfZGlyIGluICRQQVRICi0rZG8KLSsgIElGUz0kYXNfc2F2ZV9JRlMKLSsgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0rICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCi0rICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotKyAgICBicmVhayAyCi0rICBmaQotK2RvbmUKLSsgIGRvbmUKLStJRlM9JGFzX3NhdmVfSUZTCi0rCi0rZmkKLStmaQotK2FjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAotK2lmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKLSskYXNfZWNobyAiJGFjX2N0X0RMTFRPT0wiID4mNjsgfQotK2Vsc2UKLSsgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0rJGFzX2VjaG8gIm5vIiA+JjY7IH0KLStmaQotKwotKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KLSsgICAgRExMVE9PTD0iZmFsc2UiCi0rICBlbHNlCi0rICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLSt5ZXM6KQotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Ci0rYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci0rZXNhYwotKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCi0rICBmaQotK2Vsc2UKLSsgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCi0rZmkKLSsKLSt0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzIiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzLi4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHtsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJwotKwotK2Nhc2UgJGhvc3Rfb3MgaW4KLStjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0rICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCi0rICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCi0rICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KLSsgICotLWlkZW50aWZ5LXN0cmljdCopCi0rICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgotKyAgICA7OwotKyAgKikKLSsgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCi0rICAgIDs7Ci0rICBlc2FjCi0rICA7OwotKyopCi0rICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKLSsgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKLSsgIDs7Ci0rZXNhYwotKwotK2ZpCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY1Ci0rJGFzX2VjaG8gIiRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY2OyB9Ci0rc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCi0rdGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITwotKwotKwotKwotKwotKwotKwotKwotIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLS0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi0tc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKLSsgIGZvciBhY19wcm9nIGluIGFyCi0rICBkbwotKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLStzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci0gaWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuIDoKLUBAIC02MDY5LDcgKzYzMjEsNyBAQCBkbwotICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0tICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCi0rICAgIGFjX2N2X3Byb2dfQVI9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgotICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICAgYnJlYWsgMgotICAgZmkKLUBAIC02MDg5LDExICs2MzQxLDE1IEBAICRhc19lY2hvICJubyIgPiY2OyB9Ci0gZmkKLSAKLSAKLSsgICAgdGVzdCAtbiAiJEFSIiAmJiBicmVhawotKyAgZG9uZQotIGZpCi0taWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCi0raWYgdGVzdCAteiAiJEFSIjsgdGhlbgotICAgYWNfY3RfQVI9JEFSCi0tICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLS1zZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKLSsgIGZvciBhY19wcm9nIGluIGFyCi0rZG8KLSsgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgotIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLSBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgotQEAgLTYxMDksNyArNjM2NSw3IEBAIGRvCi0gICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLS0gICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCi0rICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19wcm9nIgotICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICAgYnJlYWsgMgotICAgZmkKLUBAIC02MTI4LDYgKzYzODQsMTAgQEAgZWxzZQotICRhc19lY2hvICJubyIgPiY2OyB9Ci0gZmkKLSAKLSsKLSsgIHRlc3QgLW4gIiRhY19jdF9BUiIgJiYgYnJlYWsKLStkb25lCi0rCi0gICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KLSAgICAgQVI9ImZhbHNlIgotICAgZWxzZQotQEAgLTYxMzksMTIgKzYzOTksMTAgQEAgYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci0gZXNhYwotICAgICBBUj0kYWNfY3RfQVIKLSAgIGZpCi0tZWxzZQotLSAgQVI9IiRhY19jdl9wcm9nX0FSIgotIGZpCi0gCi0tdGVzdCAteiAiJEFSIiAmJiBBUj1hcgotLXRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1Ci0rOiAke0FSPWFyfQotKzogJHtBUl9GTEFHUz1jcnV9Ci0gCi0gCi0gCi1AQCAtNjE1Niw2ICs2NDE0LDY0IEBAIHRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1Ci0gCi0gCi0gCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2x0X2N2X2FyX2F0X2ZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBsdF9jdl9hcl9hdF9maWxlPW5vCi0rICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSsKLStpbnQKLSttYWluICgpCi0rewotKwotKyAgOwotKyAgcmV0dXJuIDA7Ci0rfQotK19BQ0VPRgotK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSsgIGVjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAotKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiY1JwotKyAgICAgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1Ci0rICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1Ci0rICBhY19zdGF0dXM9JD8KLSsgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQotKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCi0rCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCi0rCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQotKwl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQotKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQotKyAgYWNfc3RhdHVzPSQ/Ci0rICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSsgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KLSsJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KLSsgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACi0rICAgICAgICBmaQotKyAgICAgIGZpCi0rICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCi0rCi0rZmkKLStybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSsKLStmaQotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJfYXRfZmlsZSIgPiY1Ci0rJGFzX2VjaG8gIiRsdF9jdl9hcl9hdF9maWxlIiA+JjY7IH0KLSsKLStpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCi0rICBhcmNoaXZlcl9saXN0X3NwZWM9Ci0rZWxzZQotKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCi0rZmkKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCi1AQCAtNjQ5MCw4ICs2ODA2LDggQEAgZXNhYwotIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCi0gCi0gIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCi0tbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKLS1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKLStsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgotK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgotIAotICMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgotIG9wdF9jcj0KLUBAIC02NTI3LDYgKzY4NDMsNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCi0gICBlbHNlCi0gICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCi0gICBmaQotKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgotIAotICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCi0gICBwaXBlX3dvcmtzPW5vCi1AQCAtNjU2OCw2ICs2ODg1LDE4IEBAIF9MVF9FT0YKLSAgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgotIAlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KLSAJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAotKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLwotKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCi0rLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCi0rICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLwotKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCi0rI2VsaWYgZGVmaW5lZChfX29zZl9fKQotKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLwotKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCi0rI2Vsc2UKLSsjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAotKyNlbmRpZgotKwotICNpZmRlZiBfX2NwbHVzcGx1cwotIGV4dGVybiAiQyIgewotICNlbmRpZgotQEAgLTY1NzksNyArNjkwOCw3IEBAIF9MVF9FT0YKLSAJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKLSAKLSAvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCi0tY29uc3Qgc3RydWN0IHsKLStMVF9ETFNZTV9DT05TVCBzdHJ1Y3QgewotICAgY29uc3QgY2hhciAqbmFtZTsKLSAgIHZvaWQgICAgICAgKmFkZHJlc3M7Ci0gfQotQEAgLTY2MDUsOCArNjkzNCw4IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7Ci0gX0xUX0VPRgotIAkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCi0gCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0Ci0tCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKLS0JICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKLSsJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUwotKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUwotIAkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCi0gCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgotIAkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQotQEAgLTY2MTYsOCArNjk0NSw4IEBAIF9MVF9FT0YKLSAgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgotIAkgICAgcGlwZV93b3Jrcz15ZXMKLSAJICBmaQotLQkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCi0tCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCi0rCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKLSsJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKLSAJZWxzZQotIAkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQotIAlmaQotQEAgLTY2NTQsNiArNjk4MywyMSBAQCBlbHNlCi0gJGFzX2VjaG8gIm9rIiA+JjY7IH0KLSBmaQotIAotKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgotK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCi0rICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKLStlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbQF1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCi0rICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKLStmaQotKwotKwotKwotKwotKwotKwotKwotKwotKwotIAotIAotIAotQEAgLTY2NzEsNiArNzAxNSw0MCBAQCBmaQotIAotIAotIAotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5c3Jvb3QiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNyb290Li4uICIgPiY2OyB9Ci0rCi0rIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Qgd2FzIGdpdmVuLgotK2lmIHRlc3QgIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgd2l0aHZhbD0kd2l0aF9saWJ0b29sX3N5c3Jvb3Q7Ci0rZWxzZQotKyAgd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm8KLStmaQotKwotKwotK2x0X3N5c3Jvb3Q9Ci0rY2FzZSAke3dpdGhfbGlidG9vbF9zeXNyb290fSBpbiAjKAotKyB5ZXMpCi0rICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSsgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCi0rICAgZmkKLSsgICA7OyAjKAotKyAvKikKLSsgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9saWJ0b29sX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKLSsgICA7OyAjKAotKyBub3wnJykKLSsgICA7OyAjKAotKyAqKQotKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY1Ci0rJGFzX2VjaG8gIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjY7IH0KLSsgICBhc19mbl9lcnJvciAiVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIgIiRMSU5FTk8iIDUKLSsgICA7OwotK2VzYWMKLSsKLSsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7bHRfc3lzcm9vdDotbm99IiA+JjUKLSskYXNfZWNobyAiJHtsdF9zeXNyb290Oi1ub30iID4mNjsgfQotKwotKwotIAotIAotIAotQEAgLTY4ODEsNiArNzI1OSwxMjMgQEAgZXNhYwotIAotIG5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgotIAotK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSsgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1tdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi0rc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bXQ7IGFjX3dvcmQ9JDIKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHthY19jdl9wcm9nX01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KLSsgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJE1BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotK2Vsc2UKLSthc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0rZm9yIGFzX2RpciBpbiAkUEFUSAotK2RvCi0rICBJRlM9JGFzX3NhdmVfSUZTCi0rICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSsgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSsgICAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIke2FjX3Rvb2xfcHJlZml4fW10IgotKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSsgICAgYnJlYWsgMgotKyAgZmkKLStkb25lCi0rICBkb25lCi0rSUZTPSRhc19zYXZlX0lGUwotKwotK2ZpCi0rZmkKLStNQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wKLStpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KLSsgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFOSUZFU1RfVE9PTCIgPiY1Ci0rJGFzX2VjaG8gIiRNQU5JRkVTVF9UT09MIiA+JjY7IH0KLStlbHNlCi0rICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotKyRhc19lY2hvICJubyIgPiY2OyB9Ci0rZmkKLSsKLSsKLStmaQotK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiOyB0aGVuCi0rICBhY19jdF9NQU5JRkVTVF9UT09MPSRNQU5JRkVTVF9UT09MCi0rICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLStzZXQgZHVtbXkgbXQ7IGFjX3dvcmQ9JDIKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KLSsgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0iJGFjX2N0X01BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotK2Vsc2UKLSthc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0rZm9yIGFzX2RpciBpbiAkUEFUSAotK2RvCi0rICBJRlM9JGFzX3NhdmVfSUZTCi0rICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSsgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSsgICAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSJtdCIKLSsgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0rICAgIGJyZWFrIDIKLSsgIGZpCi0rZG9uZQotKyAgZG9uZQotK0lGUz0kYXNfc2F2ZV9JRlMKLSsKLStmaQotK2ZpCi0rYWNfY3RfTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MCi0raWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCi0rICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNQotKyRhc19lY2hvICIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY2OyB9Ci0rZWxzZQotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSskYXNfZWNobyAibm8iID4mNjsgfQotK2ZpCi0rCi0rICBpZiB0ZXN0ICJ4JGFjX2N0X01BTklGRVNUX1RPT0wiID0geDsgdGhlbgotKyAgICBNQU5JRkVTVF9UT09MPSI6IgotKyAgZWxzZQotKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi0reWVzOikKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0rJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotK2FjX3Rvb2xfd2FybmVkPXllcyA7OwotK2VzYWMKLSsgICAgTUFOSUZFU1RfVE9PTD0kYWNfY3RfTUFOSUZFU1RfVE9PTAotKyAgZmkKLStlbHNlCi0rICBNQU5JRkVTVF9UT09MPSIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIgotK2ZpCi0rCi0rdGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sLi4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KLSsgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JjUKLSsgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKLSsgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0rICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCi0rICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKLSsgIGZpCi0rICBybSAtZiBjb25mdGVzdCoKLStmaQotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjUKLSskYXNfZWNobyAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY2OyB9Ci0raWYgdGVzdCAieCRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiICE9IHh5ZXM7IHRoZW4KLSsgIE1BTklGRVNUX1RPT0w9OgotK2ZpCi0rCi0rCi0rCi0rCi0rCi0gCi0gICBjYXNlICRob3N0X29zIGluCi0gICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCi1AQCAtNzQ0NCw2ICs3OTM5LDggQEAgX0xUX0VPRgotICAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mNQotICAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JjUKLSAgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiY1Ci0rICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JjUKLSsgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mNQotICAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgotIGludCBtYWluKCkgeyByZXR1cm4gMDt9Ci0gX0xUX0VPRgotQEAgLTc2MzksNyArODEzNiw4IEBAIGZpCi0gTElCVE9PTF9ERVBTPSIkbHRtYWluIgotIAotICMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCi0tTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCi0rTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpJwotK0xJQlRPT0w9IiRMSUJUT09MLyR7aG9zdF9hbGlhc30tbGlidG9vbCIKLSAKLSAKLSAKLUBAIC03NzI4LDcgKzgyMjYsNyBAQCBhaXgzKikKLSBlc2FjCi0gCi0gIyBHbG9iYWwgdmFyaWFibGVzOgotLW9maWxlPWxpYnRvb2wKLStvZmlsZT0ke2hvc3RfYWxpYXN9LWxpYnRvb2wKLSBjYW5fYnVpbGRfc2hhcmVkPXllcwotIAotICMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAotQEAgLTgwMjYsOCArODUyNCw2IEBAIGZpCi0gbHRfcHJvZ19jb21waWxlcl9waWM9Ci0gbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Ci0gCi0teyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1Ci0tJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KLSAKLSAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi1AQCAtODE5Myw2ICs4Njg5LDEyIEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9Ci0gCWx0X3Byb2dfY29tcGlsZXJfcGljPSctLXNoYXJlZCcKLSAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy0tc3RhdGljJwotIAk7OwotKyAgICAgIG5hZ2ZvciopCi0rCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKLSsJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLC1XbCwsJwotKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKLSsJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotKwk7OwotICAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKLSAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCi0gCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCi1AQCAtODI1NSw3ICs4NzU3LDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KLSAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCi0gICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0tICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQotKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKLSAJbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJzs7Ci0gICAgICAgKikKLSAJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OwotQEAgLTgzMTIsMTMgKzg4MTQsMTcgQEAgY2FzZSAkaG9zdF9vcyBpbgotICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgotICAgICA7OwotIGVzYWMKLS17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKLS0kYXNfZWNobyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KLS0KLS0KLS0KLS0KLSAKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQotK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfcHJvZ19jb21waWxlcl9waWMKLStmaQotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNQotKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQotK2x0X3Byb2dfY29tcGlsZXJfcGljPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYwotIAotICMKLSAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCi1AQCAtODM3OSw2ICs4ODg1LDExIEBAIGZpCi0gCi0gCi0gCi0rCi0rCi0rCi0rCi0rCi0gIwotICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSAjCi1AQCAtODcyOSw3ICs5MjQwLDggQEAgX0xUX0VPRgotICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCi0gICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCi0gICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKLS0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0rICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotKyAgICAgIGV4Y2x1ZGVfZXhwc3ltcz0nW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJwotIAotICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi1AQCAtODgyOCwxMiArOTM0MCwxMiBAQCBfTFRfRU9GCi0gCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCi0gCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KLSAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSctcnBhdGggJGxpYmRpcicKLS0JICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKLSsJICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCi0gCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgotIAkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotIAkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLS0JICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCi0rCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLSAJICBmaQotIAkgIDs7Ci0gCWVzYWMKLUBAIC04ODQ3LDggKzkzNTksOCBAQCBfTFRfRU9GCi0gCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKLSAJd2xhcmM9Ci0gICAgICAgZWxzZQotLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSsJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0rCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgICBmaQotICAgICAgIDs7Ci0gCi1AQCAtODg2Niw4ICs5Mzc4LDggQEAgX0xUX0VPRgotIAotIF9MVF9FT0YKLSAgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLS0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLS0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0rCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICAgZWxzZQotIAlsZF9zaGxpYnM9bm8KLSAgICAgICBmaQotQEAgLTg5MTMsOCArOTQyNSw4IEBAIF9MVF9FT0YKLSAKLSAgICAgKikKLSAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0tCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0tCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSsJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgIGVsc2UKLSAJbGRfc2hsaWJzPW5vCi0gICAgICAgZmkKLUBAIC05MDQ0LDcgKzk1NTYsMTMgQEAgX0xUX0VPRgotIAlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJwotICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCi0gICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCi0tICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0rICAgICAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCi0rICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKLStlbHNlCi0rICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLSAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0gCi0gaW50Ci1AQCAtOTA1NywyMiArOTU3NSwyOSBAQCBtYWluICgpCi0gX0FDRU9GCi0gaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotIAotLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0tICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLS0JL14wLyB7Ci0tCSAgICBzL14wICAqXCguKlwpJC9cMS8KLS0JICAgIHAKLS0JfQotLSAgICB9JwotLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLS1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0tICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLS1maQotKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKLSsgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7Ci0rCSAgL14wLyB7Ci0rCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCi0rCSAgICAgIHAKLSsJICB9Ci0rICAgICAgfScKLSsgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSsgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLSsgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCi0rICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSsgIGZpCi0gZmkKLSBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLS1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLSsgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCi0rICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKLSsgIGZpCi0rCi0rZmkKLSsKLSsgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KLStmaQotIAotICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLSAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCi1AQCAtOTA4NCw3ICs5NjA5LDEzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotIAllbHNlCi0gCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KLSAJICMgZW1wdHkgZXhlY3V0YWJsZS4KLS0JIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLSsJIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KLSsgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAotK2Vsc2UKLSsgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSAKLSBpbnQKLUBAIC05MDk3LDIyICs5NjI4LDI5IEBAIG1haW4gKCkKLSBfQUNFT0YKLSBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gCi0tbHRfYWl4X2xpYnBhdGhfc2VkPScKLS0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotLQkvXjAvIHsKLS0JICAgIHMvXjAgICpcKC4qXCkkL1wxLwotLQkgICAgcAotLQl9Ci0tICAgIH0nCi0tYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0tIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KLS0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotLWZpCi0rICBsdF9haXhfbGlicGF0aF9zZWQ9JwotKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLSsJICAvXjAvIHsKLSsJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KLSsJICAgICAgcAotKwkgIH0KLSsgICAgICB9JwotKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KLSsgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotKyAgZmkKLSBmaQotIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KLSsgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgotKyAgZmkKLSsKLStmaQotKwotKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXwotK2ZpCi0gCi0gCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotIAkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCi1AQCAtOTE1NywyMCArOTY5NSw2MyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLSAgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgotICAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKLSAgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCi0tICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKLS0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotLSAgICAgIGxpYmV4dD1saWIKLS0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLS0gICAgICBzaHJleHRfY21kcz0iLmRsbCIKLS0gICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCi0tICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKLS0gICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgotLSAgICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCi0tICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KLS0gICAgICBvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCi0tICAgICAgZml4X3NyY2ZpbGVfcGF0aD0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCi0tICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKLSsgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotKyAgICAgIGNsKikKLSsJIyBOYXRpdmUgTVNWQwotKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJwotKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAotKwlhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCi0rCWZpbGVfbGlzdF9zcGVjPSdAJwotKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotKwlsaWJleHQ9bGliCi0rCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgotKwlzaHJleHRfY21kcz0iLmRsbCIKLSsJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JwotKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotKwkgICAgc2VkIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKLSsJICBlbHNlCi0rCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOwotKwkgIGZpfgotKwkgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KLSsJICBsaW5rbmFtZXM9JwotKwkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCi0rCSMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCApPSd0cnVlJwotKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcwotKwlleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0rCSMgRG9uJ3QgdXNlIHJhbmxpYgotKwlvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCi0rCXBvc3RsaW5rX2NtZHM9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KLSsJICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgotKwkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KLSsJICAgICouZXhlfCouRVhFKSA7OwotKwkgICAgKikKLSsJICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgotKwkgICAgICBsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgotKwkgICAgICA7OwotKwkgIGVzYWN+Ci0rCSAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KLSsJICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7Ci0rCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKLSsJICBmaScKLSsJOzsKLSsgICAgICAqKQotKwkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKLSsJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKLSsJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKLSsJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KLSsJbGliZXh0PWxpYgotKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLSsJc2hyZXh0X2NtZHM9Ii5kbGwiCi0rCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KLSsJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKLSsJIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KLSsJb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKLSsJIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KLSsJb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJwotKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcwotKwk7OwotKyAgICAgIGVzYWMKLSAgICAgICA7OwotIAotICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotQEAgLTkyMzEsNyArOTgxMiw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotIAotICAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLS0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKLSAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotQEAgLTkyMzksNyArOTgyMCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotIAotICAgICBocHV4OSopCi0gICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLS0JYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgIGVsc2UKLSAJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgICBmaQotQEAgLTkyNTUsNyArOTgzNiw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotIAotICAgICBocHV4MTAqKQotICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0rCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICAgZWxzZQotIAlhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICAgZmkKLUBAIC05Mjc5LDEwICs5ODYwLDEwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotIAkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gCSAgOzsKLSAJaWE2NCopCi0tCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSsJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAJICA7OwotIAkqKQotLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSsJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotIAkgIDs7Ci0gCWVzYWMKLSAgICAgICBlbHNlCi1AQCAtOTM2MSwyMyArOTk0MiwzNiBAQCBmaQotIAotICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0tCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0rCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotIAkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAotIAkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCi0gCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCi0tICAgICAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotLSAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgotLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgotKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKLSsJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgotKwkgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0gLyogZW5kIGNvbmZkZWZzLmguICAqLwotLWludCBmb28odm9pZCkge30KLStpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9Ci0gX0FDRU9GCi0gaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotLSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotLQotKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzCi0rZWxzZQotKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm8KLSBmaQotIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotLSAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKLSsgICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCi0rZmkKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjUKLSskYXNfZWNobyAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjY7IH0KLSsJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgotKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotKwlmaQotICAgICAgIGVsc2UKLSAJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi1AQCAtOTQ2Miw3ICsxMDA1Niw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKLSAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0tCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgICBlbHNlCi0gCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotQEAgLTk0ODEsOSArMTAwNzUsOSBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCi0gICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAJd2xhcmM9JyR7d2x9JwotLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotLQkgICRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCi0rCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCi0gICAgICAgZWxzZQotIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KLSAJKiJDb21waWxlcnMgNS4wIiopCi1AQCAtMTAwNTksOCArMTA2NTMsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICBuZWVkX3ZlcnNpb249bm8KLSAgIG5lZWRfbGliX3ByZWZpeD1ubwotIAotLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCi0tICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQotKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgotKyAgeWVzLCopCi0rICAgICMgZ2NjCi0gICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCi0gICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKLSAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci1AQCAtMTAwOTMsMTMgKzEwNjg4LDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICAgOzsKLSAgICAgZXNhYwotKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwotKyAgICA7OwotKwotKyAgKixjbCopCi0rICAgICMgTmF0aXZlIE1TVkMKLSsgICAgbGlibmFtZV9zcGVjPSckbmFtZScKLSsgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKLSsKLSsgICAgY2FzZSAkYnVpbGRfb3MgaW4KLSsgICAgbWluZ3cqKQotKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KLSsgICAgICBsdF9zYXZlX2lmcz0kSUZTCi0rICAgICAgSUZTPSc7JwotKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKLSsgICAgICBkbwotKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcwotKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KLSsgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAotKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgotKyAgICAgIGRvbmUKLSsgICAgICBJRlM9JGx0X3NhdmVfaWZzCi0rICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCi0rICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCi0rICAgICAgOzsKLSsgICAgY3lnd2luKikKLSsgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCi0rICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCi0rICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgotKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKLSsgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKLSsgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotKyAgICAgIDs7Ci0rICAgICopCi0rICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgotKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgotKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KLSsgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCi0rICAgICAgZWxzZQotKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotKyAgICAgIGZpCi0rICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCi0rICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQotKyAgICAgIDs7Ci0rICAgIGVzYWMKLSsKLSsgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KLSsgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgotKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KLSsgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KLSsgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCi0rICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0rICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KLSsgICAgICAgJFJNIFwkZGxwYXRoJwotKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0rICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKLSAgICAgOzsKLSAKLSAgICopCi0rICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgotICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKLSsgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKLSAgICAgOzsKLSAgIGVzYWMKLS0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KLSAgIHNobGlicGF0aF92YXI9UEFUSAotICAgOzsKLUBAIC0xMDE5MSw3ICsxMDg0NCw3IEBAIGhhaWt1KikKLSAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAotICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L2Jlb3Mvc3lzdGVtL2xpYicKLSsgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJwotICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgOzsKLSAKLUBAIC0xMTAzMSwxMCArMTE2ODQsMTAgQEAgZWxzZQotIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKLSAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCi0gI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCi0tdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKLStpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7Ci0gI2VuZGlmCi0gCi0tdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9Ci0raW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9Ci0gaW50IG1haW4gKCkKLSB7Ci0gICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKLUBAIC0xMTEzNywxMCArMTE3OTAsMTAgQEAgZWxzZQotIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKLSAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCi0gI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCi0tdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKLStpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7Ci0gI2VuZGlmCi0gCi0tdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9Ci0raW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9Ci0gaW50IG1haW4gKCkKLSB7Ci0gICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKLUBAIC0xNTQyNSwxMyArMTYwNzgsMjAgQEAgZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGx0X3Vuc2V0PSdgJEVDSE8gIiRsdF91bnNldCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBsdF9OTDJTUD0nYCRFQ0hPICIkbHRfTkwyU1AiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIHJlbG9hZF9mbGFnPSdgJEVDSE8gIiRyZWxvYWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gcmVsb2FkX2NtZHM9J2AkRUNITyAiJHJlbG9hZF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBPQkpEVU1QPSdgJEVDSE8gIiRPQkpEVU1QIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBkZXBsaWJzX2NoZWNrX21ldGhvZD0nYCRFQ0hPICIkZGVwbGlic19jaGVja19tZXRob2QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGZpbGVfbWFnaWNfY21kPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rZmlsZV9tYWdpY19nbG9iPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2dsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK3dhbnRfbm9jYXNlZ2xvYj0nYCRFQ0hPICIkd2FudF9ub2Nhc2VnbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLStETExUT09MPSdgJEVDSE8gIiRETExUT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLStzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0nYCRFQ0hPICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIEFSPSdgJEVDSE8gIiRBUiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gQVJfRkxBR1M9J2AkRUNITyAiJEFSX0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSthcmNoaXZlcl9saXN0X3NwZWM9J2AkRUNITyAiJGFyY2hpdmVyX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gU1RSSVA9J2AkRUNITyAiJFNUUklQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBSQU5MSUI9J2AkRUNITyAiJFJBTkxJQiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUBAIC0xNTQ0NiwxNCArMTYxMDYsMTcgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGUKLSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rbm1fZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJG5tX2ZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLStsdF9zeXNyb290PSdgJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBvYmpkaXI9J2AkRUNITyAiJG9iamRpciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gTUFHSUNfQ01EPSdgJEVDSE8gIiRNQUdJQ19DTUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0tbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbHRfcHJvZ19jb21waWxlcl9waWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLStsdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbmVlZF9sb2Nrcz0nYCRFQ0hPICIkbmVlZF9sb2NrcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rTUFOSUZFU1RfVE9PTD0nYCRFQ0hPICIkTUFOSUZFU1RfVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gRFNZTVVUSUw9J2AkRUNITyAiJERTWU1VVElMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBOTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gTElQTz0nYCRFQ0hPICIkTElQTyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1AQCAtMTU0ODYsMTIgKzE2MTQ5LDEyIEBAIGhhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xCi0gaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGluaGVyaXRfcnBhdGg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGxpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotLWZpeF9zcmNmaWxlX3BhdGg9J2AkRUNITyAiJGZpeF9zcmNmaWxlX3BhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGFsd2F5c19leHBvcnRfc3ltYm9scz0nYCRFQ0hPICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBleHBvcnRfc3ltYm9sc19jbWRzPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBleGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gaW5jbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIHByZWxpbmtfY21kcz0nYCRFQ0hPICIkcHJlbGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLStwb3N0bGlua19jbWRzPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBmaWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSdgJEVDSE8gIiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotQEAgLTE1NTQ2LDggKzE2MjA5LDEzIEBAIHJlbG9hZF9mbGFnIFwKLSBPQkpEVU1QIFwKLSBkZXBsaWJzX2NoZWNrX21ldGhvZCBcCi0gZmlsZV9tYWdpY19jbWQgXAotK2ZpbGVfbWFnaWNfZ2xvYiBcCi0rd2FudF9ub2Nhc2VnbG9iIFwKLStETExUT09MIFwKLStzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCBcCi0gQVIgXAotIEFSX0ZMQUdTIFwKLSthcmNoaXZlcl9saXN0X3NwZWMgXAotIFNUUklQIFwKLSBSQU5MSUIgXAotIENDIFwKLUBAIC0xNTU1NywxMiArMTYyMjUsMTQgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCi0gbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAotIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKLSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKLStubV9maWxlX2xpc3Rfc3BlYyBcCi0gbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgXAotLWx0X3Byb2dfY29tcGlsZXJfd2wgXAotIGx0X3Byb2dfY29tcGlsZXJfcGljIFwKLStsdF9wcm9nX2NvbXBpbGVyX3dsIFwKLSBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyBcCi0gbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAotIG5lZWRfbG9ja3MgXAotK01BTklGRVNUX1RPT0wgXAotIERTWU1VVElMIFwKLSBOTUVESVQgXAotIExJUE8gXAotQEAgLTE1NTc4LDcgKzE2MjQ4LDYgQEAgbm9fdW5kZWZpbmVkX2ZsYWcgXAotIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgXAotIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAotIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAotLWZpeF9zcmNmaWxlX3BhdGggXAotIGV4Y2x1ZGVfZXhwc3ltcyBcCi0gaW5jbHVkZV9leHBzeW1zIFwKLSBmaWxlX2xpc3Rfc3BlYyBcCi1AQCAtMTU2MTQsNiArMTYyODMsNyBAQCBtb2R1bGVfY21kcyBcCi0gbW9kdWxlX2V4cHN5bV9jbWRzIFwKLSBleHBvcnRfc3ltYm9sc19jbWRzIFwKLSBwcmVsaW5rX2NtZHMgXAotK3Bvc3RsaW5rX2NtZHMgXAotIHBvc3RpbnN0YWxsX2NtZHMgXAotIHBvc3R1bmluc3RhbGxfY21kcyBcCi0gZmluaXNoX2NtZHMgXAotQEAgLTE2Mzc4LDcgKzE3MDQ4LDggQEAgJGFzX2VjaG8gWCIkZmlsZSIgfAotICMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgotICMKLSAjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAotLSMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0rIyAgICAgICAgICAgICAgICAgSW5jLgotICMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2Ci0gIwotICMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KLUBAIC0xNjQ4MSwxOSArMTcxNTIsNDIgQEAgU1AyTkw9JGx0X2x0X1NQMk5MCi0gIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgotIE5MMlNQPSRsdF9sdF9OTDJTUAotIAotKyMgY29udmVydCBcJGJ1aWxkIGZpbGUgbmFtZXMgdG8gXCRob3N0IGZvcm1hdC4KLSt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCi0rCi0rIyBjb252ZXJ0IFwkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4KLSt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCi0rCi0gIyBBbiBvYmplY3Qgc3ltYm9sIGR1bXBlci4KLSBPQkpEVU1QPSRsdF9PQkpEVU1QCi0gCi0gIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KLSBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKLSAKLS0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gImZpbGVfbWFnaWMiLgotKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KLSBmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKLSAKLSsjIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgotK2ZpbGVfbWFnaWNfZ2xvYj0kbHRfZmlsZV9tYWdpY19nbG9iCi0rCi0rIyBGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCi0rd2FudF9ub2Nhc2VnbG9iPSRsdF93YW50X25vY2FzZWdsb2IKLSsKLSsjIERMTCBjcmVhdGlvbiBwcm9ncmFtLgotK0RMTFRPT0w9JGx0X0RMTFRPT0wKLSsKLSsjIENvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXMuCi0rc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCi0rCi0gIyBUaGUgYXJjaGl2ZXIuCi0gQVI9JGx0X0FSCi0rCi0rIyBGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZS4KLSBBUl9GTEFHUz0kbHRfQVJfRkxBR1MKLSAKLSsjIEhvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KLSthcmNoaXZlcl9saXN0X3NwZWM9JGx0X2FyY2hpdmVyX2xpc3Rfc3BlYwotKwotICMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCi0gU1RSSVA9JGx0X1NUUklQCi0gCi1AQCAtMTY1MjMsNiArMTcyMTcsMTIgQEAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKLSAjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgotIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeAotIAotKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciBcJE5NLgotK25tX2ZpbGVfbGlzdF9zcGVjPSRsdF9ubV9maWxlX2xpc3Rfc3BlYwotKwotKyMgVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzLGFuZCBpbiB3aGljaCBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuCi0rbHRfc3lzcm9vdD0kbHRfc3lzcm9vdAotKwotICMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgotIG9iamRpcj0kb2JqZGlyCi0gCi1AQCAtMTY1MzIsNiArMTcyMzIsOSBAQCBNQUdJQ19DTUQ9JE1BR0lDX0NNRAotICMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/Ci0gbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcwotIAotKyMgTWFuaWZlc3QgdG9vbC4KLStNQU5JRkVTVF9UT09MPSRsdF9NQU5JRkVTVF9UT09MCi0rCi0gIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgotIERTWU1VVElMPSRsdF9EU1lNVVRJTAotIAotQEAgLTE2NjQ2LDEyICsxNzM0OSwxMiBAQCB3aXRoX2djYz0kR0NDCi0gIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgotIG5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKLSAKLS0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCi0td2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKLS0KLSAjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KLSBwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKLSAKLSsjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCi0rd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKLSsKLSAjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCi0gbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKLSAKLUBAIC0xNjczOCw5ICsxNzQ0MSw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKLSAjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KLSBsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCi0gCi0tIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgotLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKLS0KLSAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KLSBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scwotIAotQEAgLTE2NzU2LDYgKzE3NDU2LDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKLSAjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgotIHByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCi0gCi0rIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgotK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHMKLSsKLSAjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KLSBmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWMKLSAKLUBAIC0xNjc4OCwyMTAgKzE3NDkxLDE2OSBAQCBsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKLSAgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KLSAgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCi0gICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPwotLSAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKLS0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKLS0KLS0gIGNhc2UgJHhzaV9zaGVsbCBpbgotLSAgeWVzKQotLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgotLQotLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAotLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKLS0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KLS1mdW5jX2Rpcm5hbWUgKCkKLS17Ci0tICBjYXNlICR7MX0gaW4KLS0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKLS0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OwotLSAgZXNhYwotLX0KLS0KLS0jIGZ1bmNfYmFzZW5hbWUgZmlsZQotLWZ1bmNfYmFzZW5hbWUgKCkKLS17Ci0tICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCi0tfQotLQotLSMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKLS0jIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCi0tIyBjYWxsOgotLSMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCi0tIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0Ci0tIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCi0tIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCi0tIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCi0tIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0tIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCi0tIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bwotLSMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgotLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKLS17Ci0tICBjYXNlICR7MX0gaW4KLS0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKLS0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OwotLSAgZXNhYwotLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgotLX0KLS0KLS0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQotLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCi0tIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKLS0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKLS0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCi0tZnVuY19zdHJpcG5hbWUgKCkKLS17Ci0tICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCi0tICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCi0tICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQotLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KLS0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9Ci0tfQotLQotLSMgZnVuY19vcHRfc3BsaXQKLS1mdW5jX29wdF9zcGxpdCAoKQotLXsKLS0gIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQotLSAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KLS19Ci0tCi0tIyBmdW5jX2xvMm8gb2JqZWN0Ci0tZnVuY19sbzJvICgpCi0tewotLSAgY2FzZSAkezF9IGluCi0tICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7Ci0tICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OwotLSAgZXNhYwotLX0KLS0KLS0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQotLWZ1bmNfeGZvcm0gKCkKLS17Ci0tICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCi0tfQotLQotLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KLS1mdW5jX2FyaXRoICgpCi0tewotLSAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpCi0tfQotLQotLSMgZnVuY19sZW4gc3RyaW5nCi0tIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgotLWZ1bmNfbGVuICgpCi0tewotLSAgZnVuY19sZW5fcmVzdWx0PSR7IzF9Ci0tfQotLQotLV9MVF9FT0YKLS0gICAgOzsKLS0gICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgotLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgotLQotLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAotLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKLS0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KLS1mdW5jX2Rpcm5hbWUgKCkKLS17Ci0tICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgotLSAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAotLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KLS0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKLS0gIGVsc2UKLS0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgotLSAgZmkKLS19Ci0tCi0tIyBmdW5jX2Jhc2VuYW1lIGZpbGUKLS1mdW5jX2Jhc2VuYW1lICgpCi0tewotLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCi0tfQotLQotLQotLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCi0tIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KLS0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAotLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZwotLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KLS0jIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCi0tZnVuY19zdHJpcG5hbWUgKCkKLS17Ci0tICBjYXNlICR7Mn0gaW4KLS0gICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKLS0gICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OwotLSAgZXNhYwotLX0KLS0KLS0jIHNlZCBzY3JpcHRzOgotLW15X3NlZF9sb25nX29wdD0nMXMvXlwoLVtePV0qXCk9LiovXDEvO3EnCi0tbXlfc2VkX2xvbmdfYXJnPScxcy9eLVtePV0qPS8vJwotLQotLSMgZnVuY19vcHRfc3BsaXQKLS1mdW5jX29wdF9zcGxpdCAoKQotLXsKLS0gIGZ1bmNfb3B0X3NwbGl0X29wdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCi0tICBmdW5jX29wdF9zcGxpdF9hcmc9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19hcmciYAotLX0KLS0KLS0jIGZ1bmNfbG8ybyBvYmplY3QKLS1mdW5jX2xvMm8gKCkKLS17Ci0tICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCi0tfQotLQotLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCi0tZnVuY194Zm9ybSAoKQotLXsKLS0gIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW14uXSokLy5sby8nYAotLX0KLS0KLS0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCi0tZnVuY19hcml0aCAoKQotLXsKLS0gIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkQCJgCi0tfQotLQotLSMgZnVuY19sZW4gc3RyaW5nCi0tIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgotLWZ1bmNfbGVuICgpCi0tewotLSAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkMSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAotLX0KLS0KLS1fTFRfRU9GCi0tZXNhYwotLQotLWNhc2UgJGx0X3NoZWxsX2FwcGVuZCBpbgotLSAgeWVzKQotLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgotLQotLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCi0tIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCi0tZnVuY19hcHBlbmQgKCkKLS17Ci0tICBldmFsICIkMSs9XCQyIgotLX0KLS1fTFRfRU9GCi0tICAgIDs7Ci0tICAqKQotLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgotLQotLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCi0tIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCi0tZnVuY19hcHBlbmQgKCkKLS17Ci0tICBldmFsICIkMT1cJCQxXCQyIgotLX0KLS0KLS1fTFRfRU9GCi0tICAgIDs7Ci0tICBlc2FjCi0tCi0tCi0tICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCi0tICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCi0tCi0tICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8Ci0rICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCi0rICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQotKwotKyAgaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgotKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZSAvY1wKLStmdW5jX2Rpcm5hbWUgKClcCi0re1wKLStcICAgIGNhc2UgJHsxfSBpblwKLStcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCi0rXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCi0rXCAgICBlc2FjXAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgIHNlZCAtZSAnL15mdW5jX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19iYXNlbmFtZSAvY1wKLStmdW5jX2Jhc2VuYW1lICgpXAotK3tcCi0rXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rCi0rCi0rICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgL2NcCi0rZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKVwKLSt7XAotK1wgICAgY2FzZSAkezF9IGluXAotK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKLStcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKLStcICAgIGVzYWNcCi0rXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rCi0rCi0rICBzZWQgLWUgJy9eZnVuY19zdHJpcG5hbWUgKCkkLywvXn0gIyBmdW5jX3N0cmlwbmFtZSAvY1wKLStmdW5jX3N0cmlwbmFtZSAoKVwKLSt7XAotK1wgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZVwKLStcICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC5cCi0rXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfVwKLStcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9XAotK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1cCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3RyaXBuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rCi0rCi0rICBzZWQgLWUgJy9eZnVuY19zcGxpdF9sb25nX29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgL2NcCi0rZnVuY19zcGxpdF9sb25nX29wdCAoKVwKLSt7XAotK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9XAotK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fVwKLSt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9sb25nX29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgL2NcCi0rZnVuY19zcGxpdF9zaG9ydF9vcHQgKClcCi0re1wKLStcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99XAotK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifVwKLSt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9zaG9ydF9vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgIHNlZCAtZSAnL15mdW5jX2xvMm8gKCkkLywvXn0gIyBmdW5jX2xvMm8gL2NcCi0rZnVuY19sbzJvICgpXAotK3tcCi0rXCAgICBjYXNlICR7MX0gaW5cCi0rXCAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7XAotK1wgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOztcCi0rXCAgICBlc2FjXAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xvMm8gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgIHNlZCAtZSAnL15mdW5jX3hmb3JtICgpJC8sL159ICMgZnVuY194Zm9ybSAvY1wKLStmdW5jX3hmb3JtICgpXAotK3tcCi0rICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9cCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfeGZvcm0gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgIHNlZCAtZSAnL15mdW5jX2FyaXRoICgpJC8sL159ICMgZnVuY19hcml0aCAvY1wKLStmdW5jX2FyaXRoICgpXAotK3tcCi0rICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKVwKLSt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcml0aCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfbGVuICgpJC8sL159ICMgZnVuY19sZW4gL2NcCi0rZnVuY19sZW4gKClcCi0re1wKLSsgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xlbiBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotK2ZpCi0rCi0raWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgotKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kICgpJC8sL159ICMgZnVuY19hcHBlbmQgL2NcCi0rZnVuY19hcHBlbmQgKClcCi0re1wKLSsgICAgZXZhbCAiJHsxfSs9XFwkezJ9IlwKLSt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgIHNlZCAtZSAnL15mdW5jX2FwcGVuZF9xdW90ZWQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZF9xdW90ZWQgL2NcCi0rZnVuY19hcHBlbmRfcXVvdGVkICgpXAotK3tcCi0rXCAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IlwKLStcICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZF9xdW90ZWQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKLSsgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAotKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLStlbHNlCi0rICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQotKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKLSsgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSsgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rZmkKLSsKLStpZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjUKLSskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjI7fQotK2ZpCi0rCi0rCi0rICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAotICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQotICAgY2htb2QgK3ggIiRvZmlsZSIKLSAKLWRpZmYgLS1naXQgYS9ncHJvZi9jb25maWd1cmUgYi9ncHJvZi9jb25maWd1cmUKLWluZGV4IDM4YTRjMGIwZTUuLjM4ZDFmNjk5YzcgMTAwNzU1Ci0tLS0gYS9ncHJvZi9jb25maWd1cmUKLSsrKyBiL2dwcm9mL2NvbmZpZ3VyZQotQEAgLTYzMSw4ICs2MzEsMTEgQEAgT1RPT0wKLSBMSVBPCi0gTk1FRElUCi0gRFNZTVVUSUwKLStNQU5JRkVTVF9UT09MCi0gUkFOTElCCi0rYWNfY3RfQVIKLSBBUgotK0RMTFRPT0wKLSBPQkpEVU1QCi0gTE5fUwotIE5NCi1AQCAtNzQ0LDYgKzc0Nyw3IEBAIGVuYWJsZV9zdGF0aWMKLSB3aXRoX3BpYwotIGVuYWJsZV9mYXN0X2luc3RhbGwKLSB3aXRoX2dudV9sZAotK3dpdGhfbGlidG9vbF9zeXNyb290Ci0gZW5hYmxlX2xpYnRvb2xfbG9jawotIGVuYWJsZV9wbHVnaW5zCi0gZW5hYmxlX2xhcmdlZmlsZQotQEAgLTE0MDIsNiArMTQwNiw4IEBAIE9wdGlvbmFsIFBhY2thZ2VzOgotICAgLS13aXRoLXBpYyAgICAgICAgICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBib3RoXQotICAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQotKyAgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD1ESVIgU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKLSsgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS4KLSAKLSBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKLSAgIENDICAgICAgICAgIEMgY29tcGlsZXIgY29tbWFuZAotQEAgLTQ4MzYsOCArNDg0Miw4IEBAIGVzYWMKLSAKLSAKLSAKLS1tYWNyb192ZXJzaW9uPScyLjIuN2EnCi0tbWFjcm9fcmV2aXNpb249JzEuMzEzNCcKLSttYWNyb192ZXJzaW9uPScyLjQnCi0rbWFjcm9fcmV2aXNpb249JzEuMzI5MycKLSAKLSAKLSAKLUBAIC00ODc3LDcgKzQ4ODMsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITwotIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MiID4mNQotICRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9Ci0gIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCi0taWYgdGVzdCAiWGBwcmludCAtciAtLSAtbiAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKLStpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKLSAgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgotICAgRUNITz0ncHJpbnQgLXIgLS0nCi0gZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KLUBAIC01NTYzLDggKzU1NjksOCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OwotICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCi0geHNpX3NoZWxsPW5vCi0gKCBfbHRfZHVtbXk9ImEvYi9jIgotLSAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKLS0gICAgICA9IGMsYS9iLCwgXAotKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKLSsgICAgICA9IGMsYS9iLGIvYywgXAotICAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCi0gICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCi0gICAmJiB4c2lfc2hlbGw9eWVzCi1AQCAtNTYxMyw2ICs1NjE5LDgwIEBAIGVzYWMKLSAKLSAKLSAKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0Li4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHtsdF9jdl90b19ob3N0X2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgY2FzZSAkaG9zdCBpbgotKyAgKi0qLW1pbmd3KiApCi0rICAgIGNhc2UgJGJ1aWxkIGluCi0rICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cwotKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgotKyAgICAgICAgOzsKLSsgICAgICAqLSotY3lnd2luKiApCi0rICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKLSsgICAgICAgIDs7Ci0rICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAotKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCi0rICAgICAgICA7OwotKyAgICBlc2FjCi0rICAgIDs7Ci0rICAqLSotY3lnd2luKiApCi0rICAgIGNhc2UgJGJ1aWxkIGluCi0rICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cwotKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgotKyAgICAgICAgOzsKLSsgICAgICAqLSotY3lnd2luKiApCi0rICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKLSsgICAgICAgIDs7Ci0rICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAotKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCi0rICAgICAgICA7OwotKyAgICBlc2FjCi0rICAgIDs7Ci0rICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQotKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKLSsgICAgOzsKLStlc2FjCi0rCi0rZmkKLSsKLSt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjUKLSskYXNfZWNobyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNjsgfQotKwotKwotKwotKwotKwotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4uLiAiID4mNjsgfQotK2lmIHRlc3QgIiR7bHRfY3ZfdG9fdG9vbF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgICNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KLStsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKLStjYXNlICRob3N0IGluCi0rICAqLSotbWluZ3cqICkKLSsgICAgY2FzZSAkYnVpbGQgaW4KLSsgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCi0rICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0rICAgICAgICA7OwotKyAgICBlc2FjCi0rICAgIDs7Ci0rZXNhYwotKwotK2ZpCi0rCi0rdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY1Ci0rJGFzX2VjaG8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjY7IH0KLSsKLSsKLSsKLSsKLSsKLSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQotICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KLSBpZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuIDoKLUBAIC01NjI5LDYgKzU3MDksMTEgQEAgY2FzZSAkcmVsb2FkX2ZsYWcgaW4KLSBlc2FjCi0gcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotIGNhc2UgJGhvc3Rfb3MgaW4KLSsgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSsgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCi0rICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKLSsgICAgZmkKLSsgICAgOzsKLSAgIGRhcndpbiopCi0gICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotQEAgLTU3OTcsNyArNTg4Miw4IEBAIG1pbmd3KiB8IHB3MzIqKQotICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJwotICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKLSAgIGVsc2UKLS0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCi0rICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KLSsgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJwotICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCi0gICBmaQotICAgOzsKLUBAIC01ODc0LDExICs1OTYwLDYgQEAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQotICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgIDs7Ci0gCi0tbGludXgtdWNsaWJjKikKLS0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0tICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvbGliL2xpYnVDbGliYy0qLnNvYAotLSAgOzsKLS0KLSBuZXRic2QqKQotICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCi0gICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCi1AQCAtNTk1Niw2ICs2MDM3LDIxIEBAIGVzYWMKLSBmaQotIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQotICRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQotKwotK2ZpbGVfbWFnaWNfZ2xvYj0KLSt3YW50X25vY2FzZWdsb2I9bm8KLStpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgotKyAgY2FzZSAkaG9zdF9vcyBpbgotKyAgbWluZ3cqIHwgcHczMiopCi0rICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSsgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCi0rICAgIGVsc2UKLSsgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tcMV1cL1tcMV1cL2c7L2ciYAotKyAgICBmaQotKyAgICA7OwotKyAgZXNhYwotK2ZpCi0rCi0gZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCi0gZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi0gdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCi1AQCAtNTk3MSw5ICs2MDY3LDE2MiBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KLSAKLSAKLSAKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLStpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0rICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi0rc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgotKyAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0rZWxzZQotK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLStmb3IgYXNfZGlyIGluICRQQVRICi0rZG8KLSsgIElGUz0kYXNfc2F2ZV9JRlMKLSsgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0rICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotKyAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKLSsgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0rICAgIGJyZWFrIDIKLSsgIGZpCi0rZG9uZQotKyAgZG9uZQotK0lGUz0kYXNfc2F2ZV9JRlMKLSsKLStmaQotK2ZpCi0rRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCi0raWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCi0rICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQotKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9Ci0rZWxzZQotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSskYXNfZWNobyAibm8iID4mNjsgfQotK2ZpCi0rCi0rCi0rZmkKLStpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgotKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAotKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLStzZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgotKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0rZWxzZQotK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLStmb3IgYXNfZGlyIGluICRQQVRICi0rZG8KLSsgIElGUz0kYXNfc2F2ZV9JRlMKLSsgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0rICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCi0rICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotKyAgICBicmVhayAyCi0rICBmaQotK2RvbmUKLSsgIGRvbmUKLStJRlM9JGFzX3NhdmVfSUZTCi0rCi0rZmkKLStmaQotK2FjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAotK2lmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKLSskYXNfZWNobyAiJGFjX2N0X0RMTFRPT0wiID4mNjsgfQotK2Vsc2UKLSsgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0rJGFzX2VjaG8gIm5vIiA+JjY7IH0KLStmaQotKwotKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KLSsgICAgRExMVE9PTD0iZmFsc2UiCi0rICBlbHNlCi0rICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLSt5ZXM6KQotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Ci0rYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci0rZXNhYwotKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCi0rICBmaQotK2Vsc2UKLSsgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCi0rZmkKLSsKLSt0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzIiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzLi4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHtsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJwotKwotK2Nhc2UgJGhvc3Rfb3MgaW4KLStjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0rICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCi0rICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCi0rICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KLSsgICotLWlkZW50aWZ5LXN0cmljdCopCi0rICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgotKyAgICA7OwotKyAgKikKLSsgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCi0rICAgIDs7Ci0rICBlc2FjCi0rICA7OwotKyopCi0rICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKLSsgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKLSsgIDs7Ci0rZXNhYwotKwotK2ZpCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY1Ci0rJGFzX2VjaG8gIiRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY2OyB9Ci0rc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCi0rdGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITwotKwotKwotKwotKwotKwotKwotKwotIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLS0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi0tc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKLSsgIGZvciBhY19wcm9nIGluIGFyCi0rICBkbwotKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLStzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci0gaWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuIDoKLUBAIC01OTg5LDcgKzYyMzgsNyBAQCBkbwotICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0tICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCi0rICAgIGFjX2N2X3Byb2dfQVI9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgotICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICAgYnJlYWsgMgotICAgZmkKLUBAIC02MDA5LDExICs2MjU4LDE1IEBAICRhc19lY2hvICJubyIgPiY2OyB9Ci0gZmkKLSAKLSAKLSsgICAgdGVzdCAtbiAiJEFSIiAmJiBicmVhawotKyAgZG9uZQotIGZpCi0taWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCi0raWYgdGVzdCAteiAiJEFSIjsgdGhlbgotICAgYWNfY3RfQVI9JEFSCi0tICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLS1zZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKLSsgIGZvciBhY19wcm9nIGluIGFyCi0rZG8KLSsgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgotIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLSBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgotQEAgLTYwMjksNyArNjI4Miw3IEBAIGRvCi0gICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLS0gICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCi0rICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19wcm9nIgotICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICAgYnJlYWsgMgotICAgZmkKLUBAIC02MDQ4LDYgKzYzMDEsMTAgQEAgZWxzZQotICRhc19lY2hvICJubyIgPiY2OyB9Ci0gZmkKLSAKLSsKLSsgIHRlc3QgLW4gIiRhY19jdF9BUiIgJiYgYnJlYWsKLStkb25lCi0rCi0gICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KLSAgICAgQVI9ImZhbHNlIgotICAgZWxzZQotQEAgLTYwNTksMTIgKzYzMTYsMTAgQEAgYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci0gZXNhYwotICAgICBBUj0kYWNfY3RfQVIKLSAgIGZpCi0tZWxzZQotLSAgQVI9IiRhY19jdl9wcm9nX0FSIgotIGZpCi0gCi0tdGVzdCAteiAiJEFSIiAmJiBBUj1hcgotLXRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1Ci0rOiAke0FSPWFyfQotKzogJHtBUl9GTEFHUz1jcnV9Ci0gCi0gCi0gCi1AQCAtNjA3Niw2ICs2MzMxLDY0IEBAIHRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1Ci0gCi0gCi0gCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2x0X2N2X2FyX2F0X2ZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBsdF9jdl9hcl9hdF9maWxlPW5vCi0rICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSsKLStpbnQKLSttYWluICgpCi0rewotKwotKyAgOwotKyAgcmV0dXJuIDA7Ci0rfQotK19BQ0VPRgotK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSsgIGVjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAotKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiY1JwotKyAgICAgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1Ci0rICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1Ci0rICBhY19zdGF0dXM9JD8KLSsgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQotKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCi0rCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCi0rCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQotKwl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQotKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQotKyAgYWNfc3RhdHVzPSQ/Ci0rICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSsgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KLSsJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KLSsgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACi0rICAgICAgICBmaQotKyAgICAgIGZpCi0rICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCi0rCi0rZmkKLStybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSsKLStmaQotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJfYXRfZmlsZSIgPiY1Ci0rJGFzX2VjaG8gIiRsdF9jdl9hcl9hdF9maWxlIiA+JjY7IH0KLSsKLStpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCi0rICBhcmNoaXZlcl9saXN0X3NwZWM9Ci0rZWxzZQotKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCi0rZmkKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCi1AQCAtNjQxMCw4ICs2NzIzLDggQEAgZXNhYwotIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCi0gCi0gIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCi0tbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKLS1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKLStsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgotK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgotIAotICMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgotIG9wdF9jcj0KLUBAIC02NDQ3LDYgKzY3NjAsNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCi0gICBlbHNlCi0gICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCi0gICBmaQotKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgotIAotICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCi0gICBwaXBlX3dvcmtzPW5vCi1AQCAtNjQ4OCw2ICs2ODAyLDE4IEBAIF9MVF9FT0YKLSAgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgotIAlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KLSAJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAotKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLwotKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCi0rLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCi0rICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLwotKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCi0rI2VsaWYgZGVmaW5lZChfX29zZl9fKQotKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLwotKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCi0rI2Vsc2UKLSsjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAotKyNlbmRpZgotKwotICNpZmRlZiBfX2NwbHVzcGx1cwotIGV4dGVybiAiQyIgewotICNlbmRpZgotQEAgLTY0OTksNyArNjgyNSw3IEBAIF9MVF9FT0YKLSAJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKLSAKLSAvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCi0tY29uc3Qgc3RydWN0IHsKLStMVF9ETFNZTV9DT05TVCBzdHJ1Y3QgewotICAgY29uc3QgY2hhciAqbmFtZTsKLSAgIHZvaWQgICAgICAgKmFkZHJlc3M7Ci0gfQotQEAgLTY1MjUsOCArNjg1MSw4IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7Ci0gX0xUX0VPRgotIAkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCi0gCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0Ci0tCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKLS0JICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKLSsJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUwotKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUwotIAkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCi0gCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgotIAkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQotQEAgLTY1MzYsOCArNjg2Miw4IEBAIF9MVF9FT0YKLSAgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgotIAkgICAgcGlwZV93b3Jrcz15ZXMKLSAJICBmaQotLQkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCi0tCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCi0rCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKLSsJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKLSAJZWxzZQotIAkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQotIAlmaQotQEAgLTY1NzQsNiArNjkwMCwxOCBAQCBlbHNlCi0gJGFzX2VjaG8gIm9rIiA+JjY7IH0KLSBmaQotIAotKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgotK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCi0rICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKLStlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbQF1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCi0rICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKLStmaQotKwotKwotKwotKwotKwotKwotIAotIAotIAotQEAgLTY1OTUsNiArNjkzMyw0MyBAQCBmaQotIAotIAotIAotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5c3Jvb3QiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNyb290Li4uICIgPiY2OyB9Ci0rCi0rIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Qgd2FzIGdpdmVuLgotK2lmIHRlc3QgIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgd2l0aHZhbD0kd2l0aF9saWJ0b29sX3N5c3Jvb3Q7Ci0rZWxzZQotKyAgd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm8KLStmaQotKwotKwotK2x0X3N5c3Jvb3Q9Ci0rY2FzZSAke3dpdGhfbGlidG9vbF9zeXNyb290fSBpbiAjKAotKyB5ZXMpCi0rICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSsgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCi0rICAgZmkKLSsgICA7OyAjKAotKyAvKikKLSsgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9saWJ0b29sX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKLSsgICA7OyAjKAotKyBub3wnJykKLSsgICA7OyAjKAotKyAqKQotKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY1Ci0rJGFzX2VjaG8gIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjY7IH0KLSsgICBhc19mbl9lcnJvciAiVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIgIiRMSU5FTk8iIDUKLSsgICA7OwotK2VzYWMKLSsKLSsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7bHRfc3lzcm9vdDotbm99IiA+JjUKLSskYXNfZWNobyAiJHtsdF9zeXNyb290Oi1ub30iID4mNjsgfQotKwotKwotKwotKwotKwotICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgotIGlmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gICBlbmFibGV2YWw9JGVuYWJsZV9saWJ0b29sX2xvY2s7Ci1AQCAtNjgwMSw2ICs3MTc2LDEyMyBAQCBlc2FjCi0gCi0gbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCi0gCi0raWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLStzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1tdDsgYWNfd29yZD0kMgotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGlmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgotKyAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0rZWxzZQotK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLStmb3IgYXNfZGlyIGluICRQQVRICi0rZG8KLSsgIElGUz0kYXNfc2F2ZV9JRlMKLSsgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0rICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotKyAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCi0rICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotKyAgICBicmVhayAyCi0rICBmaQotK2RvbmUKLSsgIGRvbmUKLStJRlM9JGFzX3NhdmVfSUZTCi0rCi0rZmkKLStmaQotK01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTAotK2lmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5JRkVTVF9UT09MIiA+JjUKLSskYXNfZWNobyAiJE1BTklGRVNUX1RPT0wiID4mNjsgfQotK2Vsc2UKLSsgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0rJGFzX2VjaG8gIm5vIiA+JjY7IH0KLStmaQotKwotKwotK2ZpCi0raWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCI7IHRoZW4KLSsgIGFjX2N0X01BTklGRVNUX1RPT0w9JE1BTklGRVNUX1RPT0wKLSsgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotK3NldCBkdW1teSBtdDsgYWNfd29yZD0kMgotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgotKyAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0rZWxzZQotK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLStmb3IgYXNfZGlyIGluICRQQVRICi0rZG8KLSsgIElGUz0kYXNfc2F2ZV9JRlMKLSsgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0rICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotKyAgICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9Im10IgotKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSsgICAgYnJlYWsgMgotKyAgZmkKLStkb25lCi0rICBkb25lCi0rSUZTPSRhc19zYXZlX0lGUwotKwotK2ZpCi0rZmkKLSthY19jdF9NQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wKLStpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KLSsgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY1Ci0rJGFzX2VjaG8gIiRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjY7IH0KLStlbHNlCi0rICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotKyRhc19lY2hvICJubyIgPiY2OyB9Ci0rZmkKLSsKLSsgIGlmIHRlc3QgIngkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPSB4OyB0aGVuCi0rICAgIE1BTklGRVNUX1RPT0w9IjoiCi0rICBlbHNlCi0rICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLSt5ZXM6KQotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Ci0rYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci0rZXNhYwotKyAgICBNQU5JRkVTVF9UT09MPSRhY19jdF9NQU5JRkVTVF9UT09MCi0rICBmaQotK2Vsc2UKLSsgIE1BTklGRVNUX1RPT0w9IiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiCi0rZmkKLSsKLSt0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sIiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubwotKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mNQotKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAotKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSsgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KLSsgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcwotKyAgZmkKLSsgIHJtIC1mIGNvbmZ0ZXN0KgotK2ZpCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNQotKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KLStpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgotKyAgTUFOSUZFU1RfVE9PTD06Ci0rZmkKLSsKLSsKLSsKLSsKLSsKLSAKLSAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKLUBAIC03MzY0LDYgKzc4NTYsOCBAQCBfTFRfRU9GCi0gICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1Ci0gICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQotICAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKLSsgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQotKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiY1Ci0gICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCi0gaW50IG1haW4oKSB7IHJldHVybiAwO30KLSBfTFRfRU9GCi1AQCAtNzU1OSw3ICs4MDUzLDggQEAgZmkKLSBMSUJUT09MX0RFUFM9IiRsdG1haW4iCi0gCi0gIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KLS1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKLStMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpciknCi0rTElCVE9PTD0iJExJQlRPT0wvJHtob3N0X2FsaWFzfS1saWJ0b29sIgotIAotIAotIAotQEAgLTc2NDgsNyArODE0Myw3IEBAIGFpeDMqKQotIGVzYWMKLSAKLSAjIEdsb2JhbCB2YXJpYWJsZXM6Ci0tb2ZpbGU9bGlidG9vbAotK29maWxlPSR7aG9zdF9hbGlhc30tbGlidG9vbAotIGNhbl9idWlsZF9zaGFyZWQ9eWVzCi0gCi0gIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCi1AQCAtNzk0Niw4ICs4NDQxLDYgQEAgZmkKLSBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KLSBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KLSAKLS17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKLS0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQotIAotICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKLUBAIC04MTEzLDYgKzg2MDYsMTIgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KLSAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy0tc2hhcmVkJwotIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLS1zdGF0aWMnCi0gCTs7Ci0rICAgICAgbmFnZm9yKikKLSsJIyBOQUcgRm9ydHJhbiBjb21waWxlcgotKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCi0rCWx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJwotKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCi0rCTs7Ci0gICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQotICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKLSAJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKLUBAIC04MTc1LDcgKzg2NzQsNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQotICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKLSAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCi0gICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLS0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCi0rICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQotIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKLSAgICAgICAqKQotIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7Ci1AQCAtODIzMiwxMyArODczMSwxNyBAQCBjYXNlICRob3N0X29zIGluCi0gICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCi0gICAgIDs7Ci0gZXNhYwotLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNQotLSRhc19lY2hvICIkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQotLQotLQotLQotLQotIAotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljPSRsdF9wcm9nX2NvbXBpbGVyX3BpYwotK2ZpCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1Ci0rJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9Ci0rbHRfcHJvZ19jb21waWxlcl9waWM9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljCi0gCi0gIwotICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLUBAIC04Mjk5LDYgKzg4MDIsMTEgQEAgZmkKLSAKLSAKLSAKLSsKLSsKLSsKLSsKLSsKLSAjCi0gIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgotICMKLUBAIC04NjQ5LDcgKzkxNTcsOCBAQCBfTFRfRU9GCi0gICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKLSAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KLSAgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcwotLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSsgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0rICAgICAgZXhjbHVkZV9leHBzeW1zPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCi0gCi0gICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLUBAIC04NzQ4LDEyICs5MjU3LDEyIEBAIF9MVF9FT0YKLSAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKLSAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQotIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJwotLQkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJwotKwkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKLSAJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCi0gCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotIAkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLSsJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJwotIAkgIGZpCi0gCSAgOzsKLSAJZXNhYwotQEAgLTg3NjcsOCArOTI3Niw4IEBAIF9MVF9FT0YKLSAJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJwotIAl3bGFyYz0KLSAgICAgICBlbHNlCi0tCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0tCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSsJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgIGZpCi0gICAgICAgOzsKLSAKLUBAIC04Nzg2LDggKzkyOTUsOCBAQCBfTFRfRU9GCi0gCi0gX0xUX0VPRgotICAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSsJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0rCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgICBlbHNlCi0gCWxkX3NobGlicz1ubwotICAgICAgIGZpCi1AQCAtODgzMyw4ICs5MzQyLDggQEAgX0xUX0VPRgotIAotICAgICAqKQotICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLS0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLS0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0rCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICAgZWxzZQotIAlsZF9zaGxpYnM9bm8KLSAgICAgICBmaQotQEAgLTg5NjQsNyArOTQ3MywxMyBAQCBfTFRfRU9GCi0gCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCi0gICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KLSAgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KLS0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLSsgICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KLSsgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAotK2Vsc2UKLSsgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSAKLSBpbnQKLUBAIC04OTc3LDIyICs5NDkyLDI5IEBAIG1haW4gKCkKLSBfQUNFT0YKLSBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gCi0tbHRfYWl4X2xpYnBhdGhfc2VkPScKLS0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotLQkvXjAvIHsKLS0JICAgIHMvXjAgICpcKC4qXCkkL1wxLwotLQkgICAgcAotLQl9Ci0tICAgIH0nCi0tYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0tIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KLS0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotLWZpCi0rICBsdF9haXhfbGlicGF0aF9zZWQ9JwotKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLSsJICAvXjAvIHsKLSsJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KLSsJICAgICAgcAotKwkgIH0KLSsgICAgICB9JwotKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KLSsgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotKyAgZmkKLSBmaQotIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KLSsgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgotKyAgZmkKLSsKLStmaQotKwotKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXwotK2ZpCi0gCi0gICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKLUBAIC05MDA0LDcgKzk1MjYsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0gCWVsc2UKLSAJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgotIAkgIyBlbXB0eSBleGVjdXRhYmxlLgotLQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotKwkgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgotKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCi0rZWxzZQotKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0gLyogZW5kIGNvbmZkZWZzLmguICAqLwotIAotIGludAotQEAgLTkwMTcsMjIgKzk1NDUsMjkgQEAgbWFpbiAoKQotIF9BQ0VPRgotIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAKLS1sdF9haXhfbGlicGF0aF9zZWQ9JwotLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7Ci0tCS9eMC8gewotLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCi0tCSAgICBwCi0tCX0KLS0gICAgfScKLS1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLS0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi0taWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgotLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0tZmkKLSsgIGx0X2FpeF9saWJwYXRoX3NlZD0nCi0rICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotKwkgIC9eMC8gewotKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLwotKwkgICAgICBwCi0rCSAgfQotKyAgICAgIH0nCi0rICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0rICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi0rICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgotKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0rICBmaQotIGZpCi0gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0taWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0rICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgotKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCi0rICBmaQotKwotK2ZpCi0rCi0rICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCi0rZmkKLSAKLSAJIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0gCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKLUBAIC05MDc3LDIwICs5NjEyLDYzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCi0gICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcwotICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0tICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKLS0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAotLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCi0tICAgICAgbGliZXh0PWxpYgotLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgotLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgotLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KLS0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JwotLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCi0tICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKLS0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgotLSAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKLS0gICAgICBmaXhfc3JjZmlsZV9wYXRoPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKLS0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcwotKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0rICAgICAgY2wqKQotKwkjIE5hdGl2ZSBNU1ZDCi0rCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCi0rCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCi0rCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKLSsJZmlsZV9saXN0X3NwZWM9J0AnCi0rCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCi0rCWxpYmV4dD1saWIKLSsJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0rCXNocmV4dF9jbWRzPSIuZGxsIgotKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCi0rCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCi0rCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0rCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOwotKwkgIGVsc2UKLSsJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7Ci0rCSAgZml+Ci0rCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgotKwkgIGxpbmtuYW1lcz0nCi0rCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KLSsJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCi0rCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCi0rCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSsJIyBEb24ndCB1c2UgcmFubGliCi0rCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKLSsJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgotKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+Ci0rCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgotKwkgICAgKi5leGV8Ki5FWEUpIDs7Ci0rCSAgICAqKQotKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCi0rCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCi0rCSAgICAgIDs7Ci0rCSAgZXNhY34KLSsJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgotKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKLSsJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOwotKwkgIGZpJwotKwk7OwotKyAgICAgICopCi0rCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgotKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJwotKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAotKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotKwlsaWJleHQ9bGliCi0rCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgotKwlzaHJleHRfY21kcz0iLmRsbCIKLSsJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JwotKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgotKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJwotKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgotKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCi0rCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCi0rCTs7Ci0rICAgICAgZXNhYwotICAgICAgIDs7Ci0gCi0gICAgIGRhcndpbiogfCByaGFwc29keSopCi1AQCAtOTE1MSw3ICs5NzI5LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0gCi0gICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KLSAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0rICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwotICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi1AQCAtOTE1OSw3ICs5NzM3LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0gCi0gICAgIGhwdXg5KikKLSAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotLQlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0rCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICAgZWxzZQotIAlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgIGZpCi1AQCAtOTE3NSw3ICs5NzUzLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0gCi0gICAgIGhwdXgxMCopCi0gICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0tCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSsJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgICBlbHNlCi0gCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgICBmaQotQEAgLTkxOTksMTAgKzk3NzcsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0gCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAJICA7OwotIAlpYTY0KikKLS0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotIAkgIDs7Ci0gCSopCi0tCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gCSAgOzsKLSAJZXNhYwotICAgICAgIGVsc2UKLUBAIC05MjgxLDIzICs5ODU5LDM2IEBAIGZpCi0gCi0gICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLS0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSsJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90Ci0gCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKLSAJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KLS0gICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCi0tICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCi0tICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0rCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCi0rCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbC4uLiAiID4mNjsgfQotK2lmIHRlc3QgIiR7bHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotKwkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCi0rCSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLSAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0taW50IGZvbyh2b2lkKSB7fQotK2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH0KLSBfQUNFT0YKLSBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0tICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0tCi0rICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXMKLStlbHNlCi0rICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD1ubwotIGZpCi0gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0tICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKLStmaQotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNQotKyRhc19lY2hvICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNjsgfQotKwlpZiB0ZXN0ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID0geWVzOyB0aGVuCi0rICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0rCWZpCi0gICAgICAgZWxzZQotIAlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLUBAIC05MzgyLDcgKzk5NzMsNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCi0gICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSsJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICAgZWxzZQotIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLUBAIC05NDAxLDkgKzk5OTIsOSBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCi0gICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAJd2xhcmM9JyR7d2x9JwotLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotLQkgICRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCi0rCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCi0gICAgICAgZWxzZQotIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KLSAJKiJDb21waWxlcnMgNS4wIiopCi1AQCAtOTk3OSw4ICsxMDU3MCw5IEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgIG5lZWRfdmVyc2lvbj1ubwotICAgbmVlZF9saWJfcHJlZml4PW5vCi0gCi0tICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KLS0gIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKiB8IHllcyxjZWdjYyopCi0rICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCi0rICB5ZXMsKikKLSsgICAgIyBnY2MKLSAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKLSAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotICAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KLUBAIC0xMDAxMywxMyArMTA2MDUsNzEgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgICA7OwotICAgICBlc2FjCi0rICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0rICAgIDs7Ci0rCi0rICAqLGNsKikKLSsgICAgIyBOYXRpdmUgTVNWQwotKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0rICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJwotKwotKyAgICBjYXNlICRidWlsZF9vcyBpbgotKyAgICBtaW5ndyopCi0rICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQotKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKLSsgICAgICBJRlM9JzsnCi0rICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgotKyAgICAgIGRvCi0rICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCi0rICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgotKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCi0rICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCi0rICAgICAgZG9uZQotKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKLSsgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KLSsgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFthLXpBLVpdXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKLSsgICAgICA7OwotKyAgICBjeWd3aW4qKQotKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KLSsgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKLSsgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCi0rICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAotKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAotKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCi0rICAgICAgOzsKLSsgICAgKikKLSsgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCi0rICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCi0rICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgotKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKLSsgICAgICBlbHNlCi0rICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCi0rICAgICAgZmkKLSsgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKLSsgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCi0rICAgICAgOzsKLSsgICAgZXNhYwotKwotKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCi0rICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgotKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0rICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgotKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgotKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKLSsgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSsgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgotKyAgICAgICAkUk0gXCRkbHBhdGgnCi0rICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSsgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJwotICAgICA7OwotIAotICAgKikKLSsgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCi0gICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJwotKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwotICAgICA7OwotICAgZXNhYwotLSAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKLSAgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgotICAgc2hsaWJwYXRoX3Zhcj1QQVRICi0gICA7OwotQEAgLTEwMTExLDcgKzEwNzYxLDcgQEAgaGFpa3UqKQotICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICi0gICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0tICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3QvYmVvcy9zeXN0ZW0vbGliJwotKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCi0gICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICA7OwotIAotQEAgLTEwOTUxLDEwICsxMTYwMSwxMCBAQCBlbHNlCi0gLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAotICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KLSAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKLS12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOwotK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKLSAjZW5kaWYKLSAKLS12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KLStpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KLSBpbnQgbWFpbiAoKQotIHsKLSAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOwotQEAgLTExMDU3LDEwICsxMTcwNywxMCBAQCBlbHNlCi0gLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAotICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KLSAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKLS12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOwotK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKLSAjZW5kaWYKLSAKLS12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KLStpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KLSBpbnQgbWFpbiAoKQotIHsKLSAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOwotQEAgLTEzMDA1LDEzICsxMzY1NSwyMCBAQCBleGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbHRfdW5zZXQ9J2AkRUNITyAiJGx0X3Vuc2V0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBsdF9TUDJOTD0nYCRFQ0hPICIkbHRfU1AyTkwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGx0X05MMlNQPSdgJEVDSE8gIiRsdF9OTDJTUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rbHRfY3ZfdG9faG9zdF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gcmVsb2FkX2ZsYWc9J2AkRUNITyAiJHJlbG9hZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSByZWxvYWRfY21kcz0nYCRFQ0hPICIkcmVsb2FkX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIE9CSkRVTVA9J2AkRUNITyAiJE9CSkRVTVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSdgJEVDSE8gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gZmlsZV9tYWdpY19jbWQ9J2AkRUNITyAiJGZpbGVfbWFnaWNfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLStmaWxlX21hZ2ljX2dsb2I9J2AkRUNITyAiJGZpbGVfbWFnaWNfZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rd2FudF9ub2Nhc2VnbG9iPSdgJEVDSE8gIiR3YW50X25vY2FzZWdsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK0RMTFRPT0w9J2AkRUNITyAiJERMTFRPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSdgJEVDSE8gIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gQVI9J2AkRUNITyAiJEFSIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBBUl9GTEFHUz0nYCRFQ0hPICIkQVJfRkxBR1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK2FyY2hpdmVyX2xpc3Rfc3BlYz0nYCRFQ0hPICIkYXJjaGl2ZXJfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBTVFJJUD0nYCRFQ0hPICIkU1RSSVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIFJBTkxJQj0nYCRFQ0hPICIkUkFOTElCIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBvbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotQEAgLTEzMDI2LDE0ICsxMzY4MywxNyBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZQotIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLStubV9maWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkbm1fZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK2x0X3N5c3Jvb3Q9J2AkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIG9iamRpcj0nYCRFQ0hPICIkb2JqZGlyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBNQUdJQ19DTUQ9J2AkRUNITyAiJE1BR0lDX0NNRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLS1sdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK2x0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbHRfY3ZfcHJvZ19jb21waWxlcl9jX289J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBuZWVkX2xvY2tzPSdgJEVDSE8gIiRuZWVkX2xvY2tzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLStNQU5JRkVTVF9UT09MPSdgJEVDSE8gIiRNQU5JRkVTVF9UT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBEU1lNVVRJTD0nYCRFQ0hPICIkRFNZTVVUSUwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIE5NRURJVD0nYCRFQ0hPICIkTk1FRElUIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBMSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUBAIC0xMzA2NiwxMiArMTM3MjYsMTIgQEAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3EKLSBoYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gaW5oZXJpdF9ycGF0aD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbGlua19hbGxfZGVwbGlicz0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0tZml4X3NyY2ZpbGVfcGF0aD0nYCRFQ0hPICIkZml4X3NyY2ZpbGVfcGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGV4cG9ydF9zeW1ib2xzX2NtZHM9J2AkRUNITyAiJGV4cG9ydF9zeW1ib2xzX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGV4Y2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBpbmNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gcHJlbGlua19jbWRzPSdgJEVDSE8gIiRwcmVsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK3Bvc3RsaW5rX2NtZHM9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9J2AkRUNITyAiJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBuZWVkX2xpYl9wcmVmaXg9J2AkRUNITyAiJG5lZWRfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1AQCAtMTMxMjYsOCArMTM3ODYsMTMgQEAgcmVsb2FkX2ZsYWcgXAotIE9CSkRVTVAgXAotIGRlcGxpYnNfY2hlY2tfbWV0aG9kIFwKLSBmaWxlX21hZ2ljX2NtZCBcCi0rZmlsZV9tYWdpY19nbG9iIFwKLSt3YW50X25vY2FzZWdsb2IgXAotK0RMTFRPT0wgXAotK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIFwKLSBBUiBcCi0gQVJfRkxBR1MgXAotK2FyY2hpdmVyX2xpc3Rfc3BlYyBcCi0gU1RSSVAgXAotIFJBTkxJQiBcCi0gQ0MgXAotQEAgLTEzMTM3LDEyICsxMzgwMiwxNCBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKLSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCi0gbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAotIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXAotK25tX2ZpbGVfbGlzdF9zcGVjIFwKLSBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCi0tbHRfcHJvZ19jb21waWxlcl93bCBcCi0gbHRfcHJvZ19jb21waWxlcl9waWMgXAotK2x0X3Byb2dfY29tcGlsZXJfd2wgXAotIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKLSBsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCi0gbmVlZF9sb2NrcyBcCi0rTUFOSUZFU1RfVE9PTCBcCi0gRFNZTVVUSUwgXAotIE5NRURJVCBcCi0gTElQTyBcCi1AQCAtMTMxNTgsNyArMTM4MjUsNiBAQCBub191bmRlZmluZWRfZmxhZyBcCi0gaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCi0gaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCBcCi0gaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCi0tZml4X3NyY2ZpbGVfcGF0aCBcCi0gZXhjbHVkZV9leHBzeW1zIFwKLSBpbmNsdWRlX2V4cHN5bXMgXAotIGZpbGVfbGlzdF9zcGVjIFwKLUBAIC0xMzE5NCw2ICsxMzg2MCw3IEBAIG1vZHVsZV9jbWRzIFwKLSBtb2R1bGVfZXhwc3ltX2NtZHMgXAotIGV4cG9ydF9zeW1ib2xzX2NtZHMgXAotIHByZWxpbmtfY21kcyBcCi0rcG9zdGxpbmtfY21kcyBcCi0gcG9zdGluc3RhbGxfY21kcyBcCi0gcG9zdHVuaW5zdGFsbF9jbWRzIFwKLSBmaW5pc2hfY21kcyBcCi1AQCAtMTM5NTAsNyArMTQ2MTcsOCBAQCAkYXNfZWNobyBYIiRmaWxlIiB8Ci0gIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCi0gIwotICMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCi0tIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSsjICAgICAgICAgICAgICAgICBJbmMuCi0gIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKLSAjCi0gIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgotQEAgLTE0MDUzLDE5ICsxNDcyMSw0MiBAQCBTUDJOTD0kbHRfbHRfU1AyTkwKLSAjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCi0gTkwyU1A9JGx0X2x0X05MMlNQCi0gCi0rIyBjb252ZXJ0IFwkYnVpbGQgZmlsZSBuYW1lcyB0byBcJGhvc3QgZm9ybWF0LgotK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKLSsKLSsjIGNvbnZlcnQgXCRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0LgotK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKLSsKLSAjIEFuIG9iamVjdCBzeW1ib2wgZHVtcGVyLgotIE9CSkRVTVA9JGx0X09CSkRVTVAKLSAKLSAjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgotIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAotIAotLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSAiZmlsZV9tYWdpYyIuCi0rIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgotIGZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAotIAotKyMgSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCi0rZmlsZV9tYWdpY19nbG9iPSRsdF9maWxlX21hZ2ljX2dsb2IKLSsKLSsjIEZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KLSt3YW50X25vY2FzZWdsb2I9JGx0X3dhbnRfbm9jYXNlZ2xvYgotKwotKyMgRExMIGNyZWF0aW9uIHByb2dyYW0uCi0rRExMVE9PTD0kbHRfRExMVE9PTAotKwotKyMgQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllcy4KLStzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKLSsKLSAjIFRoZSBhcmNoaXZlci4KLSBBUj0kbHRfQVIKLSsKLSsjIEZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlLgotIEFSX0ZMQUdTPSRsdF9BUl9GTEFHUwotIAotKyMgSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyLgotK2FyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfYXJjaGl2ZXJfbGlzdF9zcGVjCi0rCi0gIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KLSBTVFJJUD0kbHRfU1RSSVAKLSAKLUBAIC0xNDA5NSw2ICsxNDc4NiwxMiBAQCBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcwotICMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCi0gZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4Ci0gCi0rIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCi0rbm1fZmlsZV9saXN0X3NwZWM9JGx0X25tX2ZpbGVfbGlzdF9zcGVjCi0rCi0rIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KLStsdF9zeXNyb290PSRsdF9zeXNyb290Ci0rCi0gIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCi0gb2JqZGlyPSRvYmpkaXIKLSAKLUBAIC0xNDEwNCw2ICsxNDgwMSw5IEBAIE1BR0lDX0NNRD0kTUFHSUNfQ01ECi0gIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KLSBuZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCi0gCi0rIyBNYW5pZmVzdCB0b29sLgotK01BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKLSsKLSAjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCi0gRFNZTVVUSUw9JGx0X0RTWU1VVElMCi0gCi1AQCAtMTQyMTgsMTIgKzE0OTE4LDEyIEBAIHdpdGhfZ2NjPSRHQ0MKLSAjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCi0gbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZwotIAotLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KLS13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAotLQotICMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgotIHBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYwotIAotKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KLSt3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAotKwotICMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KLSBsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYwotIAotQEAgLTE0MzEwLDkgKzE1MDEwLDYgQEAgaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAotICMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgotIGxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKLSAKLS0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCi0tZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAotLQotICMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgotIGFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCi0gCi1AQCAtMTQzMjgsNiArMTUwMjUsOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcwotICMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCi0gcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHMKLSAKLSsjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCi0rcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kcwotKwotICMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgotIGZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYwotIAotQEAgLTE0MzYwLDIxMCArMTUwNjAsMTY5IEBAIGx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgotICAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgotICAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KLSAgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/Ci0tICBzZWQgJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAotLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQotLQotLSAgY2FzZSAkeHNpX3NoZWxsIGluCi0tICB5ZXMpCi0tICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCi0tCi0tIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50Ci0tIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAotLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgotLWZ1bmNfZGlybmFtZSAoKQotLXsKLS0gIGNhc2UgJHsxfSBpbgotLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OwotLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7Ci0tICBlc2FjCi0tfQotLQotLSMgZnVuY19iYXNlbmFtZSBmaWxlCi0tZnVuY19iYXNlbmFtZSAoKQotLXsKLS0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKLS19Ci0tCi0tIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAotLSMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KLS0jIGNhbGw6Ci0tIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKLS0jICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKLS0jICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KLS0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKLS0jICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KLS0jICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLS0jIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKLS0jIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCi0tIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCi0tZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQotLXsKLS0gIGNhc2UgJHsxfSBpbgotLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OwotLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7Ci0tICBlc2FjCi0tICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCi0tfQotLQotLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCi0tIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KLS0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAotLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZwotLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KLS1mdW5jX3N0cmlwbmFtZSAoKQotLXsKLS0gICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKLS0gICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KLS0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9Ci0tICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQotLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In0KLS19Ci0tCi0tIyBmdW5jX29wdF9zcGxpdAotLWZ1bmNfb3B0X3NwbGl0ICgpCi0tewotLSAgZnVuY19vcHRfc3BsaXRfb3B0PSR7MSUlPSp9Ci0tICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQotLX0KLS0KLS0jIGZ1bmNfbG8ybyBvYmplY3QKLS1mdW5jX2xvMm8gKCkKLS17Ci0tICBjYXNlICR7MX0gaW4KLS0gICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKLS0gICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7Ci0tICBlc2FjCi0tfQotLQotLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCi0tZnVuY194Zm9ybSAoKQotLXsKLS0gIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KLS19Ci0tCi0tIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgotLWZ1bmNfYXJpdGggKCkKLS17Ci0tICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKLS19Ci0tCi0tIyBmdW5jX2xlbiBzdHJpbmcKLS0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCi0tZnVuY19sZW4gKCkKLS17Ci0tICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KLS19Ci0tCi0tX0xUX0VPRgotLSAgICA7OwotLSAgKikgIyBCb3VybmUgY29tcGF0aWJsZSBmdW5jdGlvbnMuCi0tICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCi0tCi0tIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50Ci0tIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAotLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgotLWZ1bmNfZGlybmFtZSAoKQotLXsKLS0gICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCi0tICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCi0tICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgotLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgotLSAgZWxzZQotLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCi0tICBmaQotLX0KLS0KLS0jIGZ1bmNfYmFzZW5hbWUgZmlsZQotLWZ1bmNfYmFzZW5hbWUgKCkKLS17Ci0tICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKLS19Ci0tCi0tCi0tIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKLS0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgotLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCi0tIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCi0tIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgotLSMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKLS1mdW5jX3N0cmlwbmFtZSAoKQotLXsKLS0gIGNhc2UgJHsyfSBpbgotLSAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OwotLSAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7Ci0tICBlc2FjCi0tfQotLQotLSMgc2VkIHNjcmlwdHM6Ci0tbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW149XSpcKT0uKi9cMS87cScKLS1teV9zZWRfbG9uZ19hcmc9JzFzL14tW149XSo9Ly8nCi0tCi0tIyBmdW5jX29wdF9zcGxpdAotLWZ1bmNfb3B0X3NwbGl0ICgpCi0tewotLSAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKLS0gIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCi0tfQotLQotLSMgZnVuY19sbzJvIG9iamVjdAotLWZ1bmNfbG8ybyAoKQotLXsKLS0gIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKLS19Ci0tCi0tIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKLS1mdW5jX3hmb3JtICgpCi0tewotLSAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCi0tfQotLQotLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KLS1mdW5jX2FyaXRoICgpCi0tewotLSAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKLS19Ci0tCi0tIyBmdW5jX2xlbiBzdHJpbmcKLS0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCi0tZnVuY19sZW4gKCkKLS17Ci0tICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiQxIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCi0tfQotLQotLV9MVF9FT0YKLS1lc2FjCi0tCi0tY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCi0tICB5ZXMpCi0tICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCi0tCi0tIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKLS0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KLS1mdW5jX2FwcGVuZCAoKQotLXsKLS0gIGV2YWwgIiQxKz1cJDIiCi0tfQotLV9MVF9FT0YKLS0gICAgOzsKLS0gICopCi0tICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCi0tCi0tIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKLS0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KLS1mdW5jX2FwcGVuZCAoKQotLXsKLS0gIGV2YWwgIiQxPVwkJDFcJDIiCi0tfQotLQotLV9MVF9FT0YKLS0gICAgOzsKLS0gIGVzYWMKLS0KLS0KLS0gIHNlZCAtbiAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS8sJHAnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKLS0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKLS0KLS0gIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKLSsgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKLSsgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCi0rCi0rICBpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCi0rICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lIC9jXAotK2Z1bmNfZGlybmFtZSAoKVwKLSt7XAotK1wgICAgY2FzZSAkezF9IGluXAotK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKLStcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKLStcICAgIGVzYWNcCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Jhc2VuYW1lIC9jXAotK2Z1bmNfYmFzZW5hbWUgKClcCi0re1wKLStcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAvY1wKLStmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpXAotK3tcCi0rXCAgICBjYXNlICR7MX0gaW5cCi0rXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAotK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAotK1wgICAgZXNhY1wKLStcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgIHNlZCAtZSAnL15mdW5jX3N0cmlwbmFtZSAoKSQvLC9efSAjIGZ1bmNfc3RyaXBuYW1lIC9jXAotK2Z1bmNfc3RyaXBuYW1lICgpXAotK3tcCi0rXCAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlXAotK1wgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LlwKLStcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9XAotK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In1cCi0rXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifVwKLSt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zdHJpcG5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgIHNlZCAtZSAnL15mdW5jX3NwbGl0X2xvbmdfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9sb25nX29wdCAvY1wKLStmdW5jX3NwbGl0X2xvbmdfb3B0ICgpXAotK3tcCi0rXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn1cCi0rXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz0kezEjKj19XAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X2xvbmdfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rCi0rCi0rICBzZWQgLWUgJy9eZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCAvY1wKLStmdW5jX3NwbGl0X3Nob3J0X29wdCAoKVwKLSt7XAotK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P31cCi0rXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X3Nob3J0X29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfbG8ybyAoKSQvLC9efSAjIGZ1bmNfbG8ybyAvY1wKLStmdW5jX2xvMm8gKClcCi0re1wKLStcICAgIGNhc2UgJHsxfSBpblwKLStcICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOztcCi0rXCAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7O1wKLStcICAgIGVzYWNcCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbG8ybyBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfeGZvcm0gKCkkLywvXn0gIyBmdW5jX3hmb3JtIC9jXAotK2Z1bmNfeGZvcm0gKClcCi0re1wKLSsgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb1wKLSt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY194Zm9ybSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfYXJpdGggKCkkLywvXn0gIyBmdW5jX2FyaXRoIC9jXAotK2Z1bmNfYXJpdGggKClcCi0re1wKLSsgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpXAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FyaXRoIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rCi0rCi0rICBzZWQgLWUgJy9eZnVuY19sZW4gKCkkLywvXn0gIyBmdW5jX2xlbiAvY1wKLStmdW5jX2xlbiAoKVwKLSt7XAotKyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1cCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbGVuIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rCi0rZmkKLSsKLStpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCi0rICBzZWQgLWUgJy9eZnVuY19hcHBlbmQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZCAvY1wKLStmdW5jX2FwcGVuZCAoKVwKLSt7XAotKyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kX3F1b3RlZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCAvY1wKLStmdW5jX2FwcGVuZF9xdW90ZWQgKClcCi0re1wKLStcICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iXAotK1wgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJcCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kX3F1b3RlZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JwotKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCi0rICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotK2Vsc2UKLSsgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCi0rICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAotKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLStmaQotKwotK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCi0rICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mNQotKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mMjt9Ci0rZmkKLSsKLSsKLSsgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8Ci0gICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCi0gICBjaG1vZCAreCAiJG9maWxlIgotIAotZGlmZiAtLWdpdCBhL2xkL2NvbmZpZ3VyZSBiL2xkL2NvbmZpZ3VyZQotaW5kZXggYTE2YzZkYjA1OS4uNDI3N2I3NGJhZCAxMDA3NTUKLS0tLSBhL2xkL2NvbmZpZ3VyZQotKysrIGIvbGQvY29uZmlndXJlCi1AQCAtNjU5LDggKzY1OSwxMSBAQCBPVE9PTAotIExJUE8KLSBOTUVESVQKLSBEU1lNVVRJTAotK01BTklGRVNUX1RPT0wKLSBSQU5MSUIKLSthY19jdF9BUgotIEFSCi0rRExMVE9PTAotIE9CSkRVTVAKLSBMTl9TCi0gTk0KLUBAIC03ODIsNiArNzg1LDcgQEAgZW5hYmxlX3N0YXRpYwotIHdpdGhfcGljCi0gZW5hYmxlX2Zhc3RfaW5zdGFsbAotIHdpdGhfZ251X2xkCi0rd2l0aF9saWJ0b29sX3N5c3Jvb3QKLSBlbmFibGVfbGlidG9vbF9sb2NrCi0gZW5hYmxlX3BsdWdpbnMKLSBlbmFibGVfbGFyZ2VmaWxlCi1AQCAtMTQ2Myw2ICsxNDY3LDggQEAgT3B0aW9uYWwgUGFja2FnZXM6Ci0gICAtLXdpdGgtcGljICAgICAgICAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCi0gICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCi0rICAtLXdpdGgtbGlidG9vbC1zeXNyb290PURJUiBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUgotKyAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLgotICAgLS13aXRoLWxpYi1wYXRoPWRpcjE6ZGlyMi4uLiAgc2V0IGRlZmF1bHQgTElCX1BBVEgKLSAgIC0td2l0aC1zeXNyb290PURJUiBTZWFyY2ggZm9yIHVzci9saWIgZXQgYWwgd2l0aGluIERJUi4KLSAKLUBAIC01NjU3LDggKzU2NjMsOCBAQCBlc2FjCi0gCi0gCi0gCi0tbWFjcm9fdmVyc2lvbj0nMi4yLjdhJwotLW1hY3JvX3JldmlzaW9uPScxLjMxMzQnCi0rbWFjcm9fdmVyc2lvbj0nMi40JwotK21hY3JvX3JldmlzaW9uPScxLjMyOTMnCi0gCi0gCi0gCi1AQCAtNTY5OCw3ICs1NzA0LDcgQEAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KLSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzIiA+JjUKLSAkYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncy4uLiAiID4mNjsgfQotICMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgotLWlmIHRlc3QgIlhgcHJpbnQgLXIgLS0gLW4gMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCi0raWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCi0gICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KLSAgIEVDSE89J3ByaW50IC1yIC0tJwotIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCi1AQCAtNjM4NCw4ICs2MzkwLDggQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsKLSAjIFRyeSBzb21lIFhTSSBmZWF0dXJlcwotIHhzaV9zaGVsbD1ubwotICggX2x0X2R1bW15PSJhL2IvYyIKLS0gIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCi0tICAgICAgPSBjLGEvYiwsIFwKLSsgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCi0rICAgICAgPSBjLGEvYixiL2MsIFwKLSAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAotICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAotICAgJiYgeHNpX3NoZWxsPXllcwotQEAgLTY0MzQsNiArNjQ0MCw4MCBAQCBlc2FjCi0gCi0gCi0gCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdC4uLiAiID4mNjsgfQotK2lmIHRlc3QgIiR7bHRfY3ZfdG9faG9zdF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGNhc2UgJGhvc3QgaW4KLSsgICotKi1taW5ndyogKQotKyAgICBjYXNlICRidWlsZCBpbgotKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKLSsgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLSsgICAgICAgIDs7Ci0rICAgICAgKi0qLWN5Z3dpbiogKQotKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCi0rICAgICAgICA7OwotKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKLSsgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgotKyAgICAgICAgOzsKLSsgICAgZXNhYwotKyAgICA7OwotKyAgKi0qLWN5Z3dpbiogKQotKyAgICBjYXNlICRidWlsZCBpbgotKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKLSsgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KLSsgICAgICAgIDs7Ci0rICAgICAgKi0qLWN5Z3dpbiogKQotKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCi0rICAgICAgICA7OwotKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKLSsgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgotKyAgICAgICAgOzsKLSsgICAgZXNhYwotKyAgICA7OwotKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKLSsgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCi0rICAgIDs7Ci0rZXNhYwotKwotK2ZpCi0rCi0rdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY1Ci0rJGFzX2VjaG8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjY7IH0KLSsKLSsKLSsKLSsKLSsKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICAjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCi0rbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCi0rY2FzZSAkaG9zdCBpbgotKyAgKi0qLW1pbmd3KiApCi0rICAgIGNhc2UgJGJ1aWxkIGluCi0rICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cwotKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgotKyAgICAgICAgOzsKLSsgICAgZXNhYwotKyAgICA7OwotK2VzYWMKLSsKLStmaQotKwotK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNQotKyRhc19lY2hvICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY2OyB9Ci0rCi0rCi0rCi0rCi0rCi0geyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKLSAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9Ci0gaWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbiA6Ci1AQCAtNjQ1MCw2ICs2NTMwLDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCi0gZXNhYwotIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLSBjYXNlICRob3N0X29zIGluCi0rICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0rICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgotKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCi0rICAgIGZpCi0rICAgIDs7Ci0gICBkYXJ3aW4qKQotICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLUBAIC02NjE4LDcgKzY3MDMsOCBAQCBtaW5ndyogfCBwdzMyKikKLSAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKLSAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCi0gICBlbHNlCi0tICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JwotKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCi0rICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKLSAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJwotICAgZmkKLSAgIDs7Ci1AQCAtNjc3Miw2ICs2ODU4LDIxIEBAIGVzYWMKLSBmaQotIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQotICRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQotKwotK2ZpbGVfbWFnaWNfZ2xvYj0KLSt3YW50X25vY2FzZWdsb2I9bm8KLStpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgotKyAgY2FzZSAkaG9zdF9vcyBpbgotKyAgbWluZ3cqIHwgcHczMiopCi0rICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSsgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCi0rICAgIGVsc2UKLSsgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tcMV1cL1tcMV1cL2c7L2ciYAotKyAgICBmaQotKyAgICA7OwotKyAgZXNhYwotK2ZpCi0rCi0gZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCi0gZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi0gdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCi1AQCAtNjc4Nyw5ICs2ODg4LDE2MiBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KLSAKLSAKLSAKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLStpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0rICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi0rc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgotKyAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0rZWxzZQotK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLStmb3IgYXNfZGlyIGluICRQQVRICi0rZG8KLSsgIElGUz0kYXNfc2F2ZV9JRlMKLSsgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0rICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotKyAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKLSsgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0rICAgIGJyZWFrIDIKLSsgIGZpCi0rZG9uZQotKyAgZG9uZQotK0lGUz0kYXNfc2F2ZV9JRlMKLSsKLStmaQotK2ZpCi0rRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCi0raWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCi0rICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQotKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9Ci0rZWxzZQotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSskYXNfZWNobyAibm8iID4mNjsgfQotK2ZpCi0rCi0rCi0rZmkKLStpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgotKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAotKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLStzZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgotKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0rZWxzZQotK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLStmb3IgYXNfZGlyIGluICRQQVRICi0rZG8KLSsgIElGUz0kYXNfc2F2ZV9JRlMKLSsgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0rICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCi0rICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotKyAgICBicmVhayAyCi0rICBmaQotK2RvbmUKLSsgIGRvbmUKLStJRlM9JGFzX3NhdmVfSUZTCi0rCi0rZmkKLStmaQotK2FjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAotK2lmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKLSskYXNfZWNobyAiJGFjX2N0X0RMTFRPT0wiID4mNjsgfQotK2Vsc2UKLSsgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0rJGFzX2VjaG8gIm5vIiA+JjY7IH0KLStmaQotKwotKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KLSsgICAgRExMVE9PTD0iZmFsc2UiCi0rICBlbHNlCi0rICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLSt5ZXM6KQotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Ci0rYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci0rZXNhYwotKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCi0rICBmaQotK2Vsc2UKLSsgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCi0rZmkKLSsKLSt0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzIiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzLi4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHtsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJwotKwotK2Nhc2UgJGhvc3Rfb3MgaW4KLStjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0rICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCi0rICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCi0rICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KLSsgICotLWlkZW50aWZ5LXN0cmljdCopCi0rICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgotKyAgICA7OwotKyAgKikKLSsgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCi0rICAgIDs7Ci0rICBlc2FjCi0rICA7OwotKyopCi0rICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKLSsgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKLSsgIDs7Ci0rZXNhYwotKwotK2ZpCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY1Ci0rJGFzX2VjaG8gIiRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY2OyB9Ci0rc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCi0rdGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITwotKwotKwotKwotKwotKwotKwotKwotIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLS0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi0tc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKLSsgIGZvciBhY19wcm9nIGluIGFyCi0rICBkbwotKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLStzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci0gaWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuIDoKLUBAIC02ODA1LDcgKzcwNTksNyBAQCBkbwotICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0tICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCi0rICAgIGFjX2N2X3Byb2dfQVI9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgotICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICAgYnJlYWsgMgotICAgZmkKLUBAIC02ODI1LDExICs3MDc5LDE1IEBAICRhc19lY2hvICJubyIgPiY2OyB9Ci0gZmkKLSAKLSAKLSsgICAgdGVzdCAtbiAiJEFSIiAmJiBicmVhawotKyAgZG9uZQotIGZpCi0taWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCi0raWYgdGVzdCAteiAiJEFSIjsgdGhlbgotICAgYWNfY3RfQVI9JEFSCi0tICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLS1zZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKLSsgIGZvciBhY19wcm9nIGluIGFyCi0rZG8KLSsgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgotIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLSBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgotQEAgLTY4NDUsNyArNzEwMyw3IEBAIGRvCi0gICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLS0gICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCi0rICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19wcm9nIgotICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICAgYnJlYWsgMgotICAgZmkKLUBAIC02ODY0LDYgKzcxMjIsMTAgQEAgZWxzZQotICRhc19lY2hvICJubyIgPiY2OyB9Ci0gZmkKLSAKLSsKLSsgIHRlc3QgLW4gIiRhY19jdF9BUiIgJiYgYnJlYWsKLStkb25lCi0rCi0gICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KLSAgICAgQVI9ImZhbHNlIgotICAgZWxzZQotQEAgLTY4NzUsMTIgKzcxMzcsMTIgQEAgYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci0gZXNhYwotICAgICBBUj0kYWNfY3RfQVIKLSAgIGZpCi0tZWxzZQotLSAgQVI9IiRhY19jdl9wcm9nX0FSIgotIGZpCi0gCi0tdGVzdCAteiAiJEFSIiAmJiBBUj1hcgotLXRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1Ci0rOiAke0FSPWFyfQotKzogJHtBUl9GTEFHUz1jcnV9Ci0rCi0rCi0gCi0gCi0gCi1AQCAtNjg5MCw2ICs3MTUyLDYyIEBAIHRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1Ci0gCi0gCi0gCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2x0X2N2X2FyX2F0X2ZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBsdF9jdl9hcl9hdF9maWxlPW5vCi0rICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSsKLStpbnQKLSttYWluICgpCi0rewotKwotKyAgOwotKyAgcmV0dXJuIDA7Ci0rfQotK19BQ0VPRgotK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSsgIGVjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAotKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiY1JwotKyAgICAgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1Ci0rICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1Ci0rICBhY19zdGF0dXM9JD8KLSsgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQotKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCi0rCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCi0rCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQotKwl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQotKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQotKyAgYWNfc3RhdHVzPSQ/Ci0rICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSsgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KLSsJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KLSsgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACi0rICAgICAgICBmaQotKyAgICAgIGZpCi0rICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCi0rCi0rZmkKLStybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSsKLStmaQotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJfYXRfZmlsZSIgPiY1Ci0rJGFzX2VjaG8gIiRsdF9jdl9hcl9hdF9maWxlIiA+JjY7IH0KLSsKLStpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCi0rICBhcmNoaXZlcl9saXN0X3NwZWM9Ci0rZWxzZQotKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCi0rZmkKLSsKLSsKLSsKLSsKLSsKLSAKLSAKLSBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi1AQCAtNzIyNiw4ICs3NTQ0LDggQEAgZXNhYwotIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCi0gCi0gIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCi0tbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKLS1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKLStsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgotK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgotIAotICMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgotIG9wdF9jcj0KLUBAIC03MjYzLDYgKzc1ODEsNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCi0gICBlbHNlCi0gICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCi0gICBmaQotKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgotIAotICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCi0gICBwaXBlX3dvcmtzPW5vCi1AQCAtNzMwNCw2ICs3NjIzLDE4IEBAIF9MVF9FT0YKLSAgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgotIAlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KLSAJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAotKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLwotKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCi0rLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCi0rICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLwotKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCi0rI2VsaWYgZGVmaW5lZChfX29zZl9fKQotKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLwotKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCi0rI2Vsc2UKLSsjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAotKyNlbmRpZgotKwotICNpZmRlZiBfX2NwbHVzcGx1cwotIGV4dGVybiAiQyIgewotICNlbmRpZgotQEAgLTczMTUsNyArNzY0Niw3IEBAIF9MVF9FT0YKLSAJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKLSAKLSAvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCi0tY29uc3Qgc3RydWN0IHsKLStMVF9ETFNZTV9DT05TVCBzdHJ1Y3QgewotICAgY29uc3QgY2hhciAqbmFtZTsKLSAgIHZvaWQgICAgICAgKmFkZHJlc3M7Ci0gfQotQEAgLTczNDEsOCArNzY3Miw4IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7Ci0gX0xUX0VPRgotIAkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCi0gCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0Ci0tCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKLS0JICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKLSsJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUwotKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUwotIAkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCi0gCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgotIAkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQotQEAgLTczNTIsOCArNzY4Myw4IEBAIF9MVF9FT0YKLSAgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgotIAkgICAgcGlwZV93b3Jrcz15ZXMKLSAJICBmaQotLQkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCi0tCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCi0rCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKLSsJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKLSAJZWxzZQotIAkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQotIAlmaQotQEAgLTczOTAsNiArNzcyMSwxOSBAQCBlbHNlCi0gJGFzX2VjaG8gIm9rIiA+JjY7IH0KLSBmaQotIAotKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgotK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCi0rICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKLStlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbQF1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCi0rICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKLStmaQotKwotKwotKwotKwotKwotKwotKwotIAotIAotIAotQEAgLTc0MTAsNiArNzc1NCw0MiBAQCBmaQotIAotIAotIAotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5c3Jvb3QiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNyb290Li4uICIgPiY2OyB9Ci0rCi0rIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Qgd2FzIGdpdmVuLgotK2lmIHRlc3QgIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgd2l0aHZhbD0kd2l0aF9saWJ0b29sX3N5c3Jvb3Q7Ci0rZWxzZQotKyAgd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm8KLStmaQotKwotKwotK2x0X3N5c3Jvb3Q9Ci0rY2FzZSAke3dpdGhfbGlidG9vbF9zeXNyb290fSBpbiAjKAotKyB5ZXMpCi0rICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSsgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCi0rICAgZmkKLSsgICA7OyAjKAotKyAvKikKLSsgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9saWJ0b29sX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKLSsgICA7OyAjKAotKyBub3wnJykKLSsgICA7OyAjKAotKyAqKQotKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY1Ci0rJGFzX2VjaG8gIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjY7IH0KLSsgICBhc19mbl9lcnJvciAiVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIgIiRMSU5FTk8iIDUKLSsgICA7OwotK2VzYWMKLSsKLSsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7bHRfc3lzcm9vdDotbm99IiA+JjUKLSskYXNfZWNobyAiJHtsdF9zeXNyb290Oi1ub30iID4mNjsgfQotKwotKwotKwotKwotIAotICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgotIGlmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbiA6Ci1AQCAtNzYxNyw2ICs3OTk3LDEyMyBAQCBlc2FjCi0gCi0gbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCi0gCi0raWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLStzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1tdDsgYWNfd29yZD0kMgotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGlmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgotKyAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0rZWxzZQotK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLStmb3IgYXNfZGlyIGluICRQQVRICi0rZG8KLSsgIElGUz0kYXNfc2F2ZV9JRlMKLSsgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0rICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotKyAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCi0rICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotKyAgICBicmVhayAyCi0rICBmaQotK2RvbmUKLSsgIGRvbmUKLStJRlM9JGFzX3NhdmVfSUZTCi0rCi0rZmkKLStmaQotK01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTAotK2lmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5JRkVTVF9UT09MIiA+JjUKLSskYXNfZWNobyAiJE1BTklGRVNUX1RPT0wiID4mNjsgfQotK2Vsc2UKLSsgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0rJGFzX2VjaG8gIm5vIiA+JjY7IH0KLStmaQotKwotKwotK2ZpCi0raWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCI7IHRoZW4KLSsgIGFjX2N0X01BTklGRVNUX1RPT0w9JE1BTklGRVNUX1RPT0wKLSsgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotK3NldCBkdW1teSBtdDsgYWNfd29yZD0kMgotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgotKyAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0rZWxzZQotK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLStmb3IgYXNfZGlyIGluICRQQVRICi0rZG8KLSsgIElGUz0kYXNfc2F2ZV9JRlMKLSsgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0rICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotKyAgICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9Im10IgotKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSsgICAgYnJlYWsgMgotKyAgZmkKLStkb25lCi0rICBkb25lCi0rSUZTPSRhc19zYXZlX0lGUwotKwotK2ZpCi0rZmkKLSthY19jdF9NQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wKLStpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KLSsgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY1Ci0rJGFzX2VjaG8gIiRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjY7IH0KLStlbHNlCi0rICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotKyRhc19lY2hvICJubyIgPiY2OyB9Ci0rZmkKLSsKLSsgIGlmIHRlc3QgIngkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPSB4OyB0aGVuCi0rICAgIE1BTklGRVNUX1RPT0w9IjoiCi0rICBlbHNlCi0rICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLSt5ZXM6KQotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Ci0rYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci0rZXNhYwotKyAgICBNQU5JRkVTVF9UT09MPSRhY19jdF9NQU5JRkVTVF9UT09MCi0rICBmaQotK2Vsc2UKLSsgIE1BTklGRVNUX1RPT0w9IiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiCi0rZmkKLSsKLSt0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sIiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubwotKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mNQotKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAotKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSsgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KLSsgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcwotKyAgZmkKLSsgIHJtIC1mIGNvbmZ0ZXN0KgotK2ZpCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNQotKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KLStpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgotKyAgTUFOSUZFU1RfVE9PTD06Ci0rZmkKLSsKLSsKLSsKLSsKLSsKLSAKLSAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKLUBAIC04MTgwLDYgKzg2NzcsOCBAQCBfTFRfRU9GCi0gICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1Ci0gICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQotICAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKLSsgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQotKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiY1Ci0gICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCi0gaW50IG1haW4oKSB7IHJldHVybiAwO30KLSBfTFRfRU9GCi1AQCAtODI0OCw2ICs4NzQ3LDE2IEBAIGRvbmUKLSAKLSAKLSAKLStmdW5jX3N0cmlwbmFtZV9jbmYgKCkKLSt7Ci0rICBjYXNlICR7Mn0gaW4KLSsgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7Ci0rICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7Ci0rICBlc2FjCi0rfSAjIGZ1bmNfc3RyaXBuYW1lX2NuZgotKwotKwotKwotIAotIAotICMgU2V0IG9wdGlvbnMKLUBAIC04Mzc2LDcgKzg4ODUsOCBAQCBmaQotIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKLSAKLSAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgotLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJwotK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKScKLStMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCi0gCi0gCi0gCi1AQCAtODQ2NSw3ICs4OTc1LDcgQEAgYWl4MyopCi0gZXNhYwotIAotICMgR2xvYmFsIHZhcmlhYmxlczoKLS1vZmlsZT1saWJ0b29sCi0rb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCi0gY2FuX2J1aWxkX3NoYXJlZD15ZXMKLSAKLSAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKLUBAIC04NzYzLDggKzkyNzMsNiBAQCBmaQotIGx0X3Byb2dfY29tcGlsZXJfcGljPQotIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQotIAotLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQotLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9Ci0gCi0gICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotQEAgLTg5MzAsNiArOTQzOCwxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQotIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCi0gCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKLSAJOzsKLSsgICAgICBuYWdmb3IqKQotKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCi0rCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKLSsJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCi0rCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKLSsJOzsKLSAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCi0gICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAotIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQotQEAgLTg5OTIsNyArOTUwNiw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9Ci0gICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwotICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKLSAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKLSsgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCi0gCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OwotICAgICAgICopCi0gCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKLUBAIC05MDQ5LDEzICs5NTYzLDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKLSAgICAgOzsKLSBlc2FjCi0teyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1Ci0tJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9Ci0tCi0tCi0tCi0tCi0gCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCi0rZmkKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKLSskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KLStsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKLSAKLSAjCi0gIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgotQEAgLTkxMTYsNiArOTYzNCwxMSBAQCBmaQotIAotIAotIAotKwotKwotKwotKwotKwotICMKLSAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0gIwotQEAgLTk0NjYsNyArOTk4OSw4IEBAIF9MVF9FT0YKLSAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAotICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubwotICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCi0tICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSsgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKLSAKLSAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotQEAgLTk1NjUsMTIgKzEwMDg5LDEyIEBAIF9MVF9FT0YKLSAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKLSAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQotIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJwotLQkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJwotKwkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKLSAJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCi0gCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotIAkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLSsJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJwotIAkgIGZpCi0gCSAgOzsKLSAJZXNhYwotQEAgLTk1ODQsOCArMTAxMDgsOCBAQCBfTFRfRU9GCi0gCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKLSAJd2xhcmM9Ci0gICAgICAgZWxzZQotLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSsJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0rCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgICBmaQotICAgICAgIDs7Ci0gCi1AQCAtOTYwMyw4ICsxMDEyNyw4IEBAIF9MVF9FT0YKLSAKLSBfTFRfRU9GCi0gICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0tCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0tCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSsJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgIGVsc2UKLSAJbGRfc2hsaWJzPW5vCi0gICAgICAgZmkKLUBAIC05NjUwLDggKzEwMTc0LDggQEAgX0xUX0VPRgotIAotICAgICAqKQotICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLS0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLS0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0rCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICAgZWxzZQotIAlsZF9zaGxpYnM9bm8KLSAgICAgICBmaQotQEAgLTk3ODEsNyArMTAzMDUsMTMgQEAgX0xUX0VPRgotIAlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJwotICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCi0gICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCi0tICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0rICAgICAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCi0rICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKLStlbHNlCi0rICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLSAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0gCi0gaW50Ci1AQCAtOTc5NCwyMiArMTAzMjQsMjkgQEAgbWFpbiAoKQotIF9BQ0VPRgotIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAKLS1sdF9haXhfbGlicGF0aF9zZWQ9JwotLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7Ci0tCS9eMC8gewotLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCi0tCSAgICBwCi0tCX0KLS0gICAgfScKLS1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLS0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi0taWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgotLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0tZmkKLSsgIGx0X2FpeF9saWJwYXRoX3NlZD0nCi0rICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotKwkgIC9eMC8gewotKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLwotKwkgICAgICBwCi0rCSAgfQotKyAgICAgIH0nCi0rICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0rICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi0rICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgotKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0rICBmaQotIGZpCi0gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0taWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0rICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgotKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCi0rICBmaQotKwotK2ZpCi0rCi0rICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCi0rZmkKLSAKLSAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0gICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgotQEAgLTk4MjEsNyArMTAzNTgsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0gCWVsc2UKLSAJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgotIAkgIyBlbXB0eSBleGVjdXRhYmxlLgotLQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotKwkgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgotKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCi0rZWxzZQotKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0gLyogZW5kIGNvbmZkZWZzLmguICAqLwotIAotIGludAotQEAgLTk4MzQsMjIgKzEwMzc3LDI5IEBAIG1haW4gKCkKLSBfQUNFT0YKLSBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gCi0tbHRfYWl4X2xpYnBhdGhfc2VkPScKLS0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotLQkvXjAvIHsKLS0JICAgIHMvXjAgICpcKC4qXCkkL1wxLwotLQkgICAgcAotLQl9Ci0tICAgIH0nCi0tYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0tIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KLS0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotLWZpCi0rICBsdF9haXhfbGlicGF0aF9zZWQ9JwotKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLSsJICAvXjAvIHsKLSsJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KLSsJICAgICAgcAotKwkgIH0KLSsgICAgICB9JwotKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KLSsgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotKyAgZmkKLSBmaQotIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KLSsgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgotKyAgZmkKLSsKLStmaQotKwotKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXwotK2ZpCi0gCi0gCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotIAkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCi1AQCAtOTg5MywyMSArMTA0NDMsNjQgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0gICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKLSAgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgotICAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKLS0gICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCi0tICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKLS0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotLSAgICAgIGxpYmV4dD1saWIKLS0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLS0gICAgICBzaHJleHRfY21kcz0iLmRsbCIKLS0gICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCi0tICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKLS0gICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgotLSAgICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCi0tICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KLS0gICAgICBvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCi0tICAgICAgZml4X3NyY2ZpbGVfcGF0aD0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCi0tICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKLSsgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0rICAgICAgY2wqKQotKwkjIE5hdGl2ZSBNU1ZDCi0rCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCi0rCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCi0rCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKLSsJZmlsZV9saXN0X3NwZWM9J0AnCi0rCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCi0rCWxpYmV4dD1saWIKLSsJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0rCXNocmV4dF9jbWRzPSIuZGxsIgotKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCi0rCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCi0rCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0rCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOwotKwkgIGVsc2UKLSsJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7Ci0rCSAgZml+Ci0rCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgotKwkgIGxpbmtuYW1lcz0nCi0rCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KLSsJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCi0rCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCi0rCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSsJIyBEb24ndCB1c2UgcmFubGliCi0rCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKLSsJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgotKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+Ci0rCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgotKwkgICAgKi5leGV8Ki5FWEUpIDs7Ci0rCSAgICAqKQotKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCi0rCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCi0rCSAgICAgIDs7Ci0rCSAgZXNhY34KLSsJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgotKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKLSsJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOwotKwkgIGZpJwotKwk7OwotKyAgICAgICopCi0rCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgotKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJwotKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAotKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotKwlsaWJleHQ9bGliCi0rCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgotKwlzaHJleHRfY21kcz0iLmRsbCIKLSsJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JwotKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgotKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJwotKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgotKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCi0rCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCi0rCTs7Ci0rICAgICAgZXNhYwotICAgICAgIDs7Ci0gCi0gICAgIGRhcndpbiogfCByaGFwc29keSopCi1AQCAtOTk2OCw3ICsxMDU2MSw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotIAotICAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLS0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKLSAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotQEAgLTk5NzYsNyArMTA1NjksNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLSAKLSAgICAgaHB1eDkqKQotICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0tCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSsJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgICBlbHNlCi0gCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICAgZmkKLUBAIC05OTkyLDcgKzEwNTg1LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0gCi0gICAgIGhwdXgxMCopCi0gICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0tCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSsJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgICBlbHNlCi0gCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgICBmaQotQEAgLTEwMDE2LDEwICsxMDYwOSwxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLSAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotIAkgIDs7Ci0gCWlhNjQqKQotLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0rCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gCSAgOzsKLSAJKikKLS0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0rCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAJICA7OwotIAllc2FjCi0gICAgICAgZWxzZQotQEAgLTEwMDk4LDIzICsxMDY5MSwzNiBAQCBmaQotIAotICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0tCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0rCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotIAkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAotIAkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCi0gCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCi0tICAgICAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotLSAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgotLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgotKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKLSsJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgotKwkgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0gLyogZW5kIGNvbmZkZWZzLmguICAqLwotLWludCBmb28odm9pZCkge30KLStpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9Ci0gX0FDRU9GCi0gaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotLSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotLQotKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzCi0rZWxzZQotKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm8KLSBmaQotIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotLSAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKLSsgICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCi0rZmkKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjUKLSskYXNfZWNobyAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjY7IH0KLSsJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgotKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotKwlmaQotICAgICAgIGVsc2UKLSAJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi1AQCAtMTAxOTksNyArMTA4MDUsNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCi0gICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSsJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICAgZWxzZQotIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLUBAIC0xMDIxOCw5ICsxMDgyNCw5IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKLSAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotIAl3bGFyYz0nJHt3bH0nCi0tCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0rCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0tCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKLSsJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKLSAgICAgICBlbHNlCi0gCWNhc2UgYCRDQyAtViAyPiYxYCBpbgotIAkqIkNvbXBpbGVycyA1LjAiKikKLUBAIC0xMDc5Niw4ICsxMTQwMiw5IEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgIG5lZWRfdmVyc2lvbj1ubwotICAgbmVlZF9saWJfcHJlZml4PW5vCi0gCi0tICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KLS0gIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKiB8IHllcyxjZWdjYyopCi0rICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCi0rICB5ZXMsKikKLSsgICAgIyBnY2MKLSAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKLSAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotICAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KLUBAIC0xMDgzMCwxMyArMTE0MzcsNzEgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgICA7OwotICAgICBlc2FjCi0rICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0rICAgIDs7Ci0rCi0rICAqLGNsKikKLSsgICAgIyBOYXRpdmUgTVNWQwotKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0rICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJwotKwotKyAgICBjYXNlICRidWlsZF9vcyBpbgotKyAgICBtaW5ndyopCi0rICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQotKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKLSsgICAgICBJRlM9JzsnCi0rICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgotKyAgICAgIGRvCi0rICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCi0rICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgotKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCi0rICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCi0rICAgICAgZG9uZQotKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKLSsgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KLSsgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFthLXpBLVpdXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKLSsgICAgICA7OwotKyAgICBjeWd3aW4qKQotKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KLSsgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKLSsgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCi0rICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAotKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAotKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCi0rICAgICAgOzsKLSsgICAgKikKLSsgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCi0rICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCi0rICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgotKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKLSsgICAgICBlbHNlCi0rICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCi0rICAgICAgZmkKLSsgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKLSsgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCi0rICAgICAgOzsKLSsgICAgZXNhYwotKwotKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCi0rICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgotKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0rICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgotKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgotKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKLSsgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSsgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgotKyAgICAgICAkUk0gXCRkbHBhdGgnCi0rICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSsgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJwotICAgICA7OwotIAotICAgKikKLSsgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCi0gICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJwotKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwotICAgICA7OwotICAgZXNhYwotLSAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKLSAgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgotICAgc2hsaWJwYXRoX3Zhcj1QQVRICi0gICA7OwotQEAgLTEwOTI4LDcgKzExNTkzLDcgQEAgaGFpa3UqKQotICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICi0gICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0tICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3QvYmVvcy9zeXN0ZW0vbGliJwotKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCi0gICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICA7OwotIAotQEAgLTExNzY4LDEwICsxMjQzMywxMCBAQCBlbHNlCi0gLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAotICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KLSAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKLS12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOwotK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKLSAjZW5kaWYKLSAKLS12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KLStpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KLSBpbnQgbWFpbiAoKQotIHsKLSAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOwotQEAgLTExODc0LDEwICsxMjUzOSwxMCBAQCBlbHNlCi0gLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAotICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KLSAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKLS12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOwotK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKLSAjZW5kaWYKLSAKLS12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KLStpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KLSBpbnQgbWFpbiAoKQotIHsKLSAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOwotQEAgLTEyMjY5LDYgKzEyOTM0LDcgQEAgJFJNIC1yIGNvbmZ0ZXN0KgotIAotICAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLSAgIGx0X3NhdmVfQ0M9JENDCi0rICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCi0gICBsdF9zYXZlX0xEPSRMRAotICAgbHRfc2F2ZV9HQ0M9JEdDQwotICAgR0NDPSRHWFgKLUBAIC0xMjI4Niw2ICsxMjk1Miw3IEBAICRSTSAtciBjb25mdGVzdCoKLSAgIGZpCi0gICB0ZXN0IC16ICIke0xEQ1hYK3NldH0iIHx8IExEPSRMRENYWAotICAgQ0M9JHtDWFgtImMrKyJ9Ci0rICBDRkxBR1M9JENYWEZMQUdTCi0gICBjb21waWxlcj0kQ0MKLSAgIGNvbXBpbGVyX0NYWD0kQ0MKLSAgIGZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbwotQEAgLTEyNTY4LDcgKzEzMjM1LDEzIEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllCi0gICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nLWJlcm9rJwotICAgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkKLSAgICAgICAgICAgIyBleGVjdXRhYmxlLgotLSAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0rICAgICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KLSsgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAotK2Vsc2UKLSsgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLSAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0gCi0gaW50Ci1AQCAtMTI1ODEsMjIgKzEzMjU0LDI5IEBAIG1haW4gKCkKLSBfQUNFT0YKLSBpZiBhY19mbl9jeHhfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAKLS1sdF9haXhfbGlicGF0aF9zZWQ9JwotLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7Ci0tCS9eMC8gewotLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCi0tCSAgICBwCi0tCX0KLS0gICAgfScKLS1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLS0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi0taWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgotLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0tZmkKLSsgIGx0X2FpeF9saWJwYXRoX3NlZD0nCi0rICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotKwkgIC9eMC8gewotKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLwotKwkgICAgICBwCi0rCSAgfQotKyAgICAgIH0nCi0rICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoX19DWFgiOyB0aGVuCi0rICAgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0rICBmaQotIGZpCi0gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0taWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0rICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KLSsgICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD0iL3Vzci9saWI6L2xpYiIKLSsgIGZpCi0rCi0rZmkKLSsKLSsgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF9fQ1hYCi0rZmkKLSAKLSAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0gCi1AQCAtMTI2MDksNyArMTMyODksMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0gICAgICAgICAgIGVsc2UKLSAJICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgotIAkgICAgIyBlbXB0eSBleGVjdXRhYmxlLgotLQkgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotKwkgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgotKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCi0rZWxzZQotKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF9fQ1hYK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSAKLSBpbnQKLUBAIC0xMjYyMiwyMiArMTMzMDgsMjkgQEAgbWFpbiAoKQotIF9BQ0VPRgotIGlmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotIAotLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0tICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLS0JL14wLyB7Ci0tCSAgICBzL14wICAqXCguKlwpJC9cMS8KLS0JICAgIHAKLS0JfQotLSAgICB9JwotLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLS1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0tICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLS1maQotKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKLSsgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7Ci0rCSAgL14wLyB7Ci0rCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCi0rCSAgICAgIHAKLSsJICB9Ci0rICAgICAgfScKLSsgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0rICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi0rICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KLSsgICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSsgIGZpCi0gZmkKLSBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLS1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLSsgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF9fQ1hYIjsgdGhlbgotKyAgICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPSIvdXNyL2xpYjovbGliIgotKyAgZmkKLSsKLStmaQotKwotKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoX19DWFgKLStmaQotIAotIAkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0gCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotQEAgLTEyNjgwLDI5ICsxMzM3Myw3NSBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLSAgICAgICAgIDs7Ci0gCi0gICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotLSAgICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIENYWCkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCi0tICAgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotLSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKLS0gICAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtYWxsLXN5bWJvbHMnCi0tICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKLS0gICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KLS0gICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPXllcwotLQotLSAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgotLSAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0tICAgICAgICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKLS0gICAgICAgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KLS0gICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0tCSAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0tICAgICAgICAgIGVsc2UKLS0JICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotLQkgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLS0gICAgICAgICAgZml+Ci0tICAgICAgICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLS0gICAgICAgIGVsc2UKLS0gICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubwotLSAgICAgICAgZmkKLS0gICAgICAgIDs7Ci0rCWNhc2UgJEdYWCwkY2NfYmFzZW5hbWUgaW4KLSsJLGNsKiB8IG5vLGNsKikKLSsJICAjIE5hdGl2ZSBNU1ZDCi0rCSAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcwotKwkgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0rCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyAnCi0rCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCi0rCSAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD15ZXMKLSsJICBmaWxlX2xpc3Rfc3BlY19DWFg9J0AnCi0rCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KLSsJICBsaWJleHQ9bGliCi0rCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0rCSAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0rCSAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JwotKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotKwkgICAgICAkU0VEIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKLSsJICAgIGVsc2UKLSsJICAgICAgJFNFRCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7Ci0rCSAgICBmaX4KLSsJICAgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KLSsJICAgIGxpbmtuYW1lcz0nCi0rCSAgIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgotKwkgICMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCBDWFgpPSd0cnVlJwotKwkgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPXllcwotKwkgICMgRG9uJ3QgdXNlIHJhbmxpYgotKwkgIG9sZF9wb3N0aW5zdGFsbF9jbWRzX0NYWD0nY2htb2QgNjQ0ICRvbGRsaWInCi0rCSAgcG9zdGxpbmtfY21kc19DWFg9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KLSsJICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+Ci0rCSAgICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCi0rCSAgICAgICouZXhlfCouRVhFKSA7OwotKwkgICAgICAqKQotKwkJbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgotKwkJbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKLSsJCTs7Ci0rCSAgICBlc2FjfgotKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRsdF9vdXRwdXRmaWxlIn4KLSsJICAgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCi0rCSAgICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7Ci0rCSAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOwotKwkgICAgZmknCi0rCSAgOzsKLSsJKikKLSsJICAjIGcrKwotKwkgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBDWFgpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAotKwkgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0rCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKLSsJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJwotKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAotKwkgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KLSsJICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD15ZXMKLSsKLSsJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCi0rCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0rCSAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCi0rCSAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgotKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0rCSAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLSsJICAgIGVsc2UKLSsJICAgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0rCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0rCSAgICBmaX4KLSsJICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLSsJICBlbHNlCi0rCSAgICBsZF9zaGxpYnNfQ1hYPW5vCi0rCSAgZmkKLSsJICA7OwotKwllc2FjCi0rCTs7Ci0gICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAKLSAKLUBAIC0xMjgwOCw3ICsxMzU0Nyw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICopCi0gICAgICAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLS0gICAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotKyAgICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgICAgICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubwotQEAgLTEyODc5LDEwICsxMzYxOCwxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLSAJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotIAkgICAgICAgICAgICA7OwotIAkgICAgICAgICAgaWE2NCopCi0tCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLSsJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLSAJICAgICAgICAgICAgOzsKLSAJICAgICAgICAgICopCi0tCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotKwkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0gCSAgICAgICAgICAgIDs7Ci0gCSAgICAgICAgZXNhYwotIAkgICAgICBmaQotQEAgLTEyOTIzLDkgKzEzNjYyLDkgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0gICAgICAgICAgICopCi0gCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotIAkgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLS0JICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0rCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAJICAgICAgZWxzZQotLQkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgLW8gJGxpYicKLSsJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAtbyAkbGliJwotIAkgICAgICBmaQotIAkgICAgZmkKLSAJICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcwotQEAgLTEyOTk1LDIwICsxMzczNCwyMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLSAJICAgICAgcHJlbGlua19jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KLSAJCXJtIC1yZiAkdHBsZGlyfgotIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgotLQkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAiJwotKwkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKLSAJICAgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+Ci0gCQlybSAtcmYgJHRwbGRpcn4KLSAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+Ci0tCQkkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgfgotKwkJJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGB+Ci0gCQkkUkFOTElCICRvbGRsaWInCi0gCSAgICAgIGFyY2hpdmVfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+Ci0gCQlybSAtcmYgJHRwbGRpcn4KLSAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgotLQkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKLSsJCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJwotIAkgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KLSAJCXJtIC1yZiAkdHBsZGlyfgotIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+Ci0tCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0rCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotIAkgICAgICA7OwotIAkgICAgKikgIyBWZXJzaW9uIDYgYW5kIGFib3ZlIHVzZSB3ZWFrIHN5bWJvbHMKLSAJICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCi1AQCAtMTMyMDMsNyArMTM5NDIsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLSAJICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAJCSAgOzsKLSAJICAgICAgICAqKQotLQkgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0rCSAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gCQkgIDs7Ci0gCSAgICAgIGVzYWMKLSAKLUBAIC0xMzI0OSw3ICsxMzk4OCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotIAotICAgICAgIHNvbGFyaXMqKQotICAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLS0gICAgICAgICAgQ0MqKQotKyAgICAgICAgICBDQyogfCBzdW5DQyopCi0gCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCi0gICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcwotIAkgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLXpkZWZzJwotQEAgLTEzMjkwLDkgKzE0MDI5LDkgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0gCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLSAJICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0teiAke3dsfWRlZnMnCi0gCSAgICAgIGlmICRDQyAtLXZlcnNpb24gfCAkR1JFUCAtdiAnXjJcLjcnID4gL2Rldi9udWxsOyB0aGVuCi0tCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKLSsJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKLSAJICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotLQkJICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCi0rCQkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCi0gCi0gCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotIAkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotQEAgLTEzNDI3LDYgKzE0MTY2LDEzIEBAIHByaXZhdGU6Ci0gfTsKLSBfTFRfRU9GCi0gCi0rCi0rX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1M9JENGTEFHUwotK2Nhc2UgIiRDQyAkQ0ZMQUdTICIgaW4gIygKLSsqXCAtZmx0bypcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLWx0byIgOzsKLSsqXCAtZndob3ByKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8td2hvcHIiIDs7Ci0rZXNhYwotKwotIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQotICAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgIGFjX3N0YXR1cz0kPwotQEAgLTEzNDQwLDcgKzE0MTg2LDcgQEAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1Ci0gICBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPW5vCi0gCi0gICBmb3IgcCBpbiBgZXZhbCAiJG91dHB1dF92ZXJib3NlX2xpbmtfY21kImA7IGRvCi0tICAgIGNhc2UgJHAgaW4KLSsgICAgY2FzZSAke3ByZXZ9JHtwfSBpbgotIAotICAgICAtTCogfCAtUiogfCAtbCopCi0gICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCi1AQCAtMTM0NDksMTMgKzE0MTk1LDIyIEBAIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQotICAgICAgICAgICB0ZXN0ICRwID0gIi1SIjsgdGhlbgotIAkgcHJldj0kcAotIAkgY29udGludWUKLS0gICAgICAgZWxzZQotLQkgcHJldj0KLSAgICAgICAgZmkKLSAKLSsgICAgICAgIyBFeHBhbmQgdGhlIHN5c3Jvb3QgdG8gZWFzZSBleHRyYWN0aW5nIHRoZSBkaXJlY3RvcmllcyBsYXRlci4KLSsgICAgICAgaWYgdGVzdCAteiAiJHByZXYiOyB0aGVuCi0rICAgICAgICAgY2FzZSAkcCBpbgotKyAgICAgICAgIC1MKikgZnVuY19zdHJpcG5hbWVfY25mICctTCcgJycgIiRwIjsgcHJldj0tTDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7Ci0rICAgICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1SJyAnJyAiJHAiOyBwcmV2PS1SOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKLSsgICAgICAgICAtbCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLWwnICcnICIkcCI7IHByZXY9LWw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OwotKyAgICAgICAgIGVzYWMKLSsgICAgICAgZmkKLSsgICAgICAgY2FzZSAkcCBpbgotKyAgICAgICA9KikgZnVuY19zdHJpcG5hbWVfY25mICc9JyAnJyAiJHAiOyBwPSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OwotKyAgICAgICBlc2FjCi0gICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCi0tCSBjYXNlICRwIGluCi0tCSAtTCogfCAtUiopCi0rCSBjYXNlICR7cHJldn0gaW4KLSsJIC1MIHwgLVIpCi0gCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQotIAkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKLSAJICAgIyB1c2VyIHN1cHBsaWVkIGxpYnMgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIHRoZW0uCi1AQCAtMTM0NzUsOCArMTQyMzAsMTAgQEAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1Ci0gCSAgIHBvc3RkZXBzX0NYWD0iJHtwb3N0ZGVwc19DWFh9ICR7cHJldn0ke3B9IgotIAkgZmkKLSAgICAgICAgZmkKLSsgICAgICAgcHJldj0KLSAgICAgICAgOzsKLSAKLSsgICAgKi5sdG8uJG9iamV4dCkgOzsgIyBJZ25vcmUgR0NDIExUTyBvYmplY3RzCi0gICAgICouJG9iamV4dCkKLSAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdGVzdCBvYmplY3QgZmlsZSBvbmx5IHNob3dzIHVwCi0gICAgICAgICMgb25jZSBpbiB0aGUgY29tcGlsZXIgb3V0cHV0LgotQEAgLTEzNTEyLDYgKzE0MjY5LDcgQEAgZWxzZQotIGZpCi0gCi0gJFJNIC1mIGNvbmZlc3QuJG9iamV4dAotK0NGTEFHUz0kX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1MKLSAKLSAjIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgotIGNhc2UgJGhvc3Rfb3MgaW4KLUBAIC0xMzU0Nyw3ICsxNDMwNSw3IEBAIGxpbnV4KikKLSAKLSBzb2xhcmlzKikKLSAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0tICBDQyopCi0rICBDQyogfCBzdW5DQyopCi0gICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcwotICAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKLSAgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcwotQEAgLTEzNjEyLDggKzE0MzcwLDYgQEAgZmkKLSBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Ci0gbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPQotIAotLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQotLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9Ci0gCi0gICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCi0gICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotQEAgLTEzNzE4LDYgKzE0NDc0LDExIEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9Ci0gCSAgOzsKLSAJZXNhYwotIAk7OwotKyAgICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCi0rCSMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKLSsJIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSsJbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctRERMTF9FWFBPUlQnCi0rCTs7Ci0gICAgICAgZGd1eCopCi0gCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gCSAgZWMrKyopCi1AQCAtMTM4NzAsNyArMTQ2MzEsNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQotIAk7OwotICAgICAgIHNvbGFyaXMqKQotIAljYXNlICRjY19iYXNlbmFtZSBpbgotLQkgIENDKikKLSsJICBDQyogfCBzdW5DQyopCi0gCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCi0gCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJwotIAkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKLUBAIC0xMzkzNSwxMCArMTQ2OTYsMTcgQEAgY2FzZSAkaG9zdF9vcyBpbgotICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggLURQSUMiCi0gICAgIDs7Ci0gZXNhYwotLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA+JjUKLS0kYXNfZWNobyAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY2OyB9Ci0tCi0gCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWD0kbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCi0rZmkKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY1Ci0rJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgiID4mNjsgfQotK2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfQ1hYCi0gCi0gIwotICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLUBAIC0xMzk5Niw2ICsxNDc2NCw4IEBAIGZpCi0gCi0gCi0gCi0rCi0rCi0gIwotICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSAjCi1AQCAtMTQxNzMsNiArMTQ5NDMsNyBAQCBmaQotICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQotIAotICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSsgIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKLSAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgIGFpeFs0LTldKikKLSAgICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCi1AQCAtMTQxODcsMTUgKzE0OTU4LDIwIEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllCi0gICAgIDs7Ci0gICBwdzMyKikKLSAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9IiRsdGRsbF9jbWRzIgotLSAgOzsKLSsgICAgOzsKLSAgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCi0tICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLzsvXi4qWyBdX19ubV9fL3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLS0gIDs7Ci0rICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0rICAgIGNsKikgOzsKLSsgICAgKikKLSsgICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotKyAgICAgIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKLSsgICAgICA7OwotKyAgICBlc2FjCi0rICAgIDs7Ci0gICAqKQotICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotLSAgOzsKLSsgICAgOzsKLSAgIGVzYWMKLS0gIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKLSAKLSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxkX3NobGlic19DWFgiID4mNQotICRhc19lY2hvICIkbGRfc2hsaWJzX0NYWCIgPiY2OyB9Ci1AQCAtMTQ0NTgsOCArMTUyMzQsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICBuZWVkX3ZlcnNpb249bm8KLSAgIG5lZWRfbGliX3ByZWZpeD1ubwotIAotLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCi0tICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQotKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgotKyAgeWVzLCopCi0rICAgICMgZ2NjCi0gICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCi0gICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKLSAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci1AQCAtMTQ0OTEsMTMgKzE1MjY4LDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICAgOzsKLSAgICAgZXNhYwotKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwotKyAgICA7OwotKwotKyAgKixjbCopCi0rICAgICMgTmF0aXZlIE1TVkMKLSsgICAgbGlibmFtZV9zcGVjPSckbmFtZScKLSsgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKLSsKLSsgICAgY2FzZSAkYnVpbGRfb3MgaW4KLSsgICAgbWluZ3cqKQotKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KLSsgICAgICBsdF9zYXZlX2lmcz0kSUZTCi0rICAgICAgSUZTPSc7JwotKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKLSsgICAgICBkbwotKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcwotKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KLSsgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAotKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgotKyAgICAgIGRvbmUKLSsgICAgICBJRlM9JGx0X3NhdmVfaWZzCi0rICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCi0rICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCi0rICAgICAgOzsKLSsgICAgY3lnd2luKikKLSsgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCi0rICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCi0rICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgotKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKLSsgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKLSsgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotKyAgICAgIDs7Ci0rICAgICopCi0rICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgotKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgotKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KLSsgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCi0rICAgICAgZWxzZQotKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotKyAgICAgIGZpCi0rICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCi0rICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQotKyAgICAgIDs7Ci0rICAgIGVzYWMKLSsKLSsgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KLSsgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgotKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KLSsgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KLSsgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCi0rICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0rICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KLSsgICAgICAgJFJNIFwkZGxwYXRoJwotKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0rICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKLSAgICAgOzsKLSAKLSAgICopCi0rICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgotICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKLSsgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKLSAgICAgOzsKLSAgIGVzYWMKLS0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KLSAgIHNobGlicGF0aF92YXI9UEFUSAotICAgOzsKLUBAIC0xNDU4OCw3ICsxNTQyMyw3IEBAIGhhaWt1KikKLSAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAotICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L2Jlb3Mvc3lzdGVtL2xpYicKLSsgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJwotICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgOzsKLSAKLUBAIC0xNTA0Nyw2ICsxNTg4Miw3IEBAIGZpCi0gICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKLSAKLSAgIENDPSRsdF9zYXZlX0NDCi0rICBDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCi0gICBMRENYWD0kTEQKLSAgIExEPSRsdF9zYXZlX0xECi0gICBHQ0M9JGx0X3NhdmVfR0NDCi1AQCAtMTgwMjYsMTMgKzE4ODYyLDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGx0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLStsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLStsdF9jdl90b190b29sX2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSByZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIHJlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK2ZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSt3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J2AkRUNITyAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIEFSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rYXJjaGl2ZXJfbGlzdF9zcGVjPSdgJEVDSE8gIiRhcmNoaXZlcl9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIFNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1AQCAtMTgwNDcsMTQgKzE4ODkwLDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCi0gbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rbHRfc3lzcm9vdD0nYCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIE1BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotLWx0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGx0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIG5lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK01BTklGRVNUX1RPT0w9J2AkRUNITyAiJE1BTklGRVNUX1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIERTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIExJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotQEAgLTE4MDg3LDEyICsxODkzMywxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcQotIGhhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLS1maXhfc3JjZmlsZV9wYXRoPSdgJEVDSE8gIiRmaXhfc3JjZmlsZV9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBhbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGluY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBwcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rcG9zdGxpbmtfY21kcz0nYCRFQ0hPICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIG5lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUBAIC0xODEzMSw4ICsxODk3Nyw4IEBAIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlCi0gY29tcGlsZXJfQ1hYPSdgJEVDSE8gIiRjb21waWxlcl9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIEdDQ19DWFg9J2AkRUNITyAiJEdDQ19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLS1sdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLStsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPSdgJEVDSE8gIiRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotQEAgLTE4MTU5LDEyICsxOTAwNSwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFgiIHwgJFNFRCAiJGRlbGF5XwotIGhhcmRjb2RlX2F1dG9tYXRpY19DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGluaGVyaXRfcnBhdGhfQ1hYPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbGlua19hbGxfZGVwbGlic19DWFg9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLS1maXhfc3JjZmlsZV9wYXRoX0NYWD0nYCRFQ0hPICIkZml4X3NyY2ZpbGVfcGF0aF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gZXhjbHVkZV9leHBzeW1zX0NYWD0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gaW5jbHVkZV9leHBzeW1zX0NYWD0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gcHJlbGlua19jbWRzX0NYWD0nYCRFQ0hPICIkcHJlbGlua19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rcG9zdGxpbmtfY21kc19DWFg9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBmaWxlX2xpc3Rfc3BlY19DWFg9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gaGFyZGNvZGVfYWN0aW9uX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfYWN0aW9uX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWD0nYCRFQ0hPICIkY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1AQCAtMTgyMDIsOCArMTkwNDgsMTMgQEAgcmVsb2FkX2ZsYWcgXAotIE9CSkRVTVAgXAotIGRlcGxpYnNfY2hlY2tfbWV0aG9kIFwKLSBmaWxlX21hZ2ljX2NtZCBcCi0rZmlsZV9tYWdpY19nbG9iIFwKLSt3YW50X25vY2FzZWdsb2IgXAotK0RMTFRPT0wgXAotK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIFwKLSBBUiBcCi0gQVJfRkxBR1MgXAotK2FyY2hpdmVyX2xpc3Rfc3BlYyBcCi0gU1RSSVAgXAotIFJBTkxJQiBcCi0gQ0MgXAotQEAgLTE4MjEzLDEyICsxOTA2NCwxNCBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKLSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCi0gbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAotIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXAotK25tX2ZpbGVfbGlzdF9zcGVjIFwKLSBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCi0tbHRfcHJvZ19jb21waWxlcl93bCBcCi0gbHRfcHJvZ19jb21waWxlcl9waWMgXAotK2x0X3Byb2dfY29tcGlsZXJfd2wgXAotIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKLSBsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCi0gbmVlZF9sb2NrcyBcCi0rTUFOSUZFU1RfVE9PTCBcCi0gRFNZTVVUSUwgXAotIE5NRURJVCBcCi0gTElQTyBcCi1AQCAtMTgyMzQsNyArMTkwODcsNiBAQCBub191bmRlZmluZWRfZmxhZyBcCi0gaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCi0gaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCBcCi0gaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCi0tZml4X3NyY2ZpbGVfcGF0aCBcCi0gZXhjbHVkZV9leHBzeW1zIFwKLSBpbmNsdWRlX2V4cHN5bXMgXAotIGZpbGVfbGlzdF9zcGVjIFwKLUBAIC0xODI1Niw4ICsxOTEwOCw4IEBAIExEX0NYWCBcCi0gcmVsb2FkX2ZsYWdfQ1hYIFwKLSBjb21waWxlcl9DWFggXAotIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWCBcCi0tbHRfcHJvZ19jb21waWxlcl93bF9DWFggXAotIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCBcCi0rbHRfcHJvZ19jb21waWxlcl93bF9DWFggXAotIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWCBcCi0gbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIFwKLSBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYIFwKLUBAIC0xODI2OSw3ICsxOTEyMSw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnX0NYWCBcCi0gaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFggXAotIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfQ1hYIFwKLSBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWCBcCi0tZml4X3NyY2ZpbGVfcGF0aF9DWFggXAotIGV4Y2x1ZGVfZXhwc3ltc19DWFggXAotIGluY2x1ZGVfZXhwc3ltc19DWFggXAotIGZpbGVfbGlzdF9zcGVjX0NYWCBcCi1AQCAtMTgzMDMsNiArMTkxNTQsNyBAQCBtb2R1bGVfY21kcyBcCi0gbW9kdWxlX2V4cHN5bV9jbWRzIFwKLSBleHBvcnRfc3ltYm9sc19jbWRzIFwKLSBwcmVsaW5rX2NtZHMgXAotK3Bvc3RsaW5rX2NtZHMgXAotIHBvc3RpbnN0YWxsX2NtZHMgXAotIHBvc3R1bmluc3RhbGxfY21kcyBcCi0gZmluaXNoX2NtZHMgXAotQEAgLTE4MzE3LDcgKzE5MTY5LDggQEAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFggXAotIG1vZHVsZV9jbWRzX0NYWCBcCi0gbW9kdWxlX2V4cHN5bV9jbWRzX0NYWCBcCi0gZXhwb3J0X3N5bWJvbHNfY21kc19DWFggXAotLXByZWxpbmtfY21kc19DWFg7IGRvCi0rcHJlbGlua19jbWRzX0NYWCBcCi0rcG9zdGxpbmtfY21kc19DWFg7IGRvCi0gICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgotICAgICAqW1xcXFxcXFxgXFwiXFxcJF0qKQotICAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCi1AQCAtMTkxMTAsNyArMTk5NjMsOCBAQCAkYXNfZWNobyBYIiRmaWxlIiB8Ci0gIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCi0gIwotICMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCi0tIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSsjICAgICAgICAgICAgICAgICBJbmMuCi0gIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKLSAjCi0gIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgotQEAgLTE5MjEzLDE5ICsyMDA2Nyw0MiBAQCBTUDJOTD0kbHRfbHRfU1AyTkwKLSAjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCi0gTkwyU1A9JGx0X2x0X05MMlNQCi0gCi0rIyBjb252ZXJ0IFwkYnVpbGQgZmlsZSBuYW1lcyB0byBcJGhvc3QgZm9ybWF0LgotK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKLSsKLSsjIGNvbnZlcnQgXCRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0LgotK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKLSsKLSAjIEFuIG9iamVjdCBzeW1ib2wgZHVtcGVyLgotIE9CSkRVTVA9JGx0X09CSkRVTVAKLSAKLSAjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgotIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAotIAotLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSAiZmlsZV9tYWdpYyIuCi0rIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgotIGZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAotIAotKyMgSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCi0rZmlsZV9tYWdpY19nbG9iPSRsdF9maWxlX21hZ2ljX2dsb2IKLSsKLSsjIEZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KLSt3YW50X25vY2FzZWdsb2I9JGx0X3dhbnRfbm9jYXNlZ2xvYgotKwotKyMgRExMIGNyZWF0aW9uIHByb2dyYW0uCi0rRExMVE9PTD0kbHRfRExMVE9PTAotKwotKyMgQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllcy4KLStzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKLSsKLSAjIFRoZSBhcmNoaXZlci4KLSBBUj0kbHRfQVIKLSsKLSsjIEZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlLgotIEFSX0ZMQUdTPSRsdF9BUl9GTEFHUwotIAotKyMgSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyLgotK2FyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfYXJjaGl2ZXJfbGlzdF9zcGVjCi0rCi0gIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KLSBTVFJJUD0kbHRfU1RSSVAKLSAKLUBAIC0xOTI1NSw2ICsyMDEzMiwxMiBAQCBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcwotICMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCi0gZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4Ci0gCi0rIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCi0rbm1fZmlsZV9saXN0X3NwZWM9JGx0X25tX2ZpbGVfbGlzdF9zcGVjCi0rCi0rIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KLStsdF9zeXNyb290PSRsdF9zeXNyb290Ci0rCi0gIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCi0gb2JqZGlyPSRvYmpkaXIKLSAKLUBAIC0xOTI2NCw2ICsyMDE0Nyw5IEBAIE1BR0lDX0NNRD0kTUFHSUNfQ01ECi0gIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KLSBuZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCi0gCi0rIyBNYW5pZmVzdCB0b29sLgotK01BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKLSsKLSAjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCi0gRFNZTVVUSUw9JGx0X0RTWU1VVElMCi0gCi1AQCAtMTkzNzgsMTIgKzIwMjY0LDEyIEBAIHdpdGhfZ2NjPSRHQ0MKLSAjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCi0gbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZwotIAotLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KLS13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAotLQotICMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgotIHBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYwotIAotKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KLSt3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAotKwotICMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KLSBsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYwotIAotQEAgLTE5NDcwLDkgKzIwMzU2LDYgQEAgaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAotICMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgotIGxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKLSAKLS0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCi0tZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAotLQotICMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgotIGFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCi0gCi1AQCAtMTk0ODgsNiArMjAzNzEsOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcwotICMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCi0gcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHMKLSAKLSsjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCi0rcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kcwotKwotICMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgotIGZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYwotIAotQEAgLTE5NTM0LDIxMCArMjA0MjAsMTY5IEBAIGx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgotICAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgotICAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KLSAgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/Ci0tICBzZWQgJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAotLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQotLQotLSAgY2FzZSAkeHNpX3NoZWxsIGluCi0tICB5ZXMpCi0tICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCi0tCi0tIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50Ci0tIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAotLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgotLWZ1bmNfZGlybmFtZSAoKQotLXsKLS0gIGNhc2UgJHsxfSBpbgotLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OwotLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7Ci0tICBlc2FjCi0tfQotLQotLSMgZnVuY19iYXNlbmFtZSBmaWxlCi0tZnVuY19iYXNlbmFtZSAoKQotLXsKLS0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKLS19Ci0tCi0tIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAotLSMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KLS0jIGNhbGw6Ci0tIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKLS0jICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKLS0jICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KLS0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKLS0jICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KLS0jICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLS0jIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKLS0jIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCi0tIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCi0tZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQotLXsKLS0gIGNhc2UgJHsxfSBpbgotLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OwotLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7Ci0tICBlc2FjCi0tICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCi0tfQotLQotLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCi0tIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KLS0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAotLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZwotLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KLS1mdW5jX3N0cmlwbmFtZSAoKQotLXsKLS0gICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKLS0gICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KLS0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9Ci0tICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQotLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In0KLS19Ci0tCi0tIyBmdW5jX29wdF9zcGxpdAotLWZ1bmNfb3B0X3NwbGl0ICgpCi0tewotLSAgZnVuY19vcHRfc3BsaXRfb3B0PSR7MSUlPSp9Ci0tICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQotLX0KLS0KLS0jIGZ1bmNfbG8ybyBvYmplY3QKLS1mdW5jX2xvMm8gKCkKLS17Ci0tICBjYXNlICR7MX0gaW4KLS0gICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKLS0gICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7Ci0tICBlc2FjCi0tfQotLQotLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCi0tZnVuY194Zm9ybSAoKQotLXsKLS0gIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KLS19Ci0tCi0tIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgotLWZ1bmNfYXJpdGggKCkKLS17Ci0tICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKLS19Ci0tCi0tIyBmdW5jX2xlbiBzdHJpbmcKLS0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCi0tZnVuY19sZW4gKCkKLS17Ci0tICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KLS19Ci0tCi0tX0xUX0VPRgotLSAgICA7OwotLSAgKikgIyBCb3VybmUgY29tcGF0aWJsZSBmdW5jdGlvbnMuCi0tICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCi0tCi0tIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50Ci0tIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAotLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgotLWZ1bmNfZGlybmFtZSAoKQotLXsKLS0gICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCi0tICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCi0tICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgotLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgotLSAgZWxzZQotLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCi0tICBmaQotLX0KLS0KLS0jIGZ1bmNfYmFzZW5hbWUgZmlsZQotLWZ1bmNfYmFzZW5hbWUgKCkKLS17Ci0tICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKLS19Ci0tCi0tCi0tIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKLS0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgotLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCi0tIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCi0tIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgotLSMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKLS1mdW5jX3N0cmlwbmFtZSAoKQotLXsKLS0gIGNhc2UgJHsyfSBpbgotLSAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OwotLSAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7Ci0tICBlc2FjCi0tfQotLQotLSMgc2VkIHNjcmlwdHM6Ci0tbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW149XSpcKT0uKi9cMS87cScKLS1teV9zZWRfbG9uZ19hcmc9JzFzL14tW149XSo9Ly8nCi0tCi0tIyBmdW5jX29wdF9zcGxpdAotLWZ1bmNfb3B0X3NwbGl0ICgpCi0tewotLSAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKLS0gIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCi0tfQotLQotLSMgZnVuY19sbzJvIG9iamVjdAotLWZ1bmNfbG8ybyAoKQotLXsKLS0gIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKLS19Ci0tCi0tIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKLS1mdW5jX3hmb3JtICgpCi0tewotLSAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCi0tfQotLQotLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KLS1mdW5jX2FyaXRoICgpCi0tewotLSAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKLS19Ci0tCi0tIyBmdW5jX2xlbiBzdHJpbmcKLS0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCi0tZnVuY19sZW4gKCkKLS17Ci0tICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiQxIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCi0tfQotLQotLV9MVF9FT0YKLS1lc2FjCi0tCi0tY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCi0tICB5ZXMpCi0tICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCi0tCi0tIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKLS0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KLS1mdW5jX2FwcGVuZCAoKQotLXsKLS0gIGV2YWwgIiQxKz1cJDIiCi0tfQotLV9MVF9FT0YKLS0gICAgOzsKLS0gICopCi0tICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCi0tCi0tIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKLS0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KLS1mdW5jX2FwcGVuZCAoKQotLXsKLS0gIGV2YWwgIiQxPVwkJDFcJDIiCi0tfQotLQotLV9MVF9FT0YKLS0gICAgOzsKLS0gIGVzYWMKLS0KLS0KLS0gIHNlZCAtbiAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS8sJHAnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKLS0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKLS0KLS0gIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKLSsgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKLSsgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCi0rCi0rICBpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCi0rICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lIC9jXAotK2Z1bmNfZGlybmFtZSAoKVwKLSt7XAotK1wgICAgY2FzZSAkezF9IGluXAotK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKLStcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKLStcICAgIGVzYWNcCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Jhc2VuYW1lIC9jXAotK2Z1bmNfYmFzZW5hbWUgKClcCi0re1wKLStcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAvY1wKLStmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpXAotK3tcCi0rXCAgICBjYXNlICR7MX0gaW5cCi0rXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAotK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAotK1wgICAgZXNhY1wKLStcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgIHNlZCAtZSAnL15mdW5jX3N0cmlwbmFtZSAoKSQvLC9efSAjIGZ1bmNfc3RyaXBuYW1lIC9jXAotK2Z1bmNfc3RyaXBuYW1lICgpXAotK3tcCi0rXCAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlXAotK1wgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LlwKLStcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9XAotK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In1cCi0rXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifVwKLSt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zdHJpcG5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgIHNlZCAtZSAnL15mdW5jX3NwbGl0X2xvbmdfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9sb25nX29wdCAvY1wKLStmdW5jX3NwbGl0X2xvbmdfb3B0ICgpXAotK3tcCi0rXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn1cCi0rXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz0kezEjKj19XAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X2xvbmdfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rCi0rCi0rICBzZWQgLWUgJy9eZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCAvY1wKLStmdW5jX3NwbGl0X3Nob3J0X29wdCAoKVwKLSt7XAotK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P31cCi0rXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X3Nob3J0X29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfbG8ybyAoKSQvLC9efSAjIGZ1bmNfbG8ybyAvY1wKLStmdW5jX2xvMm8gKClcCi0re1wKLStcICAgIGNhc2UgJHsxfSBpblwKLStcICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOztcCi0rXCAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7O1wKLStcICAgIGVzYWNcCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbG8ybyBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfeGZvcm0gKCkkLywvXn0gIyBmdW5jX3hmb3JtIC9jXAotK2Z1bmNfeGZvcm0gKClcCi0re1wKLSsgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb1wKLSt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY194Zm9ybSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfYXJpdGggKCkkLywvXn0gIyBmdW5jX2FyaXRoIC9jXAotK2Z1bmNfYXJpdGggKClcCi0re1wKLSsgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpXAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FyaXRoIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rCi0rCi0rICBzZWQgLWUgJy9eZnVuY19sZW4gKCkkLywvXn0gIyBmdW5jX2xlbiAvY1wKLStmdW5jX2xlbiAoKVwKLSt7XAotKyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1cCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbGVuIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rCi0rZmkKLSsKLStpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCi0rICBzZWQgLWUgJy9eZnVuY19hcHBlbmQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZCAvY1wKLStmdW5jX2FwcGVuZCAoKVwKLSt7XAotKyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kX3F1b3RlZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCAvY1wKLStmdW5jX2FwcGVuZF9xdW90ZWQgKClcCi0re1wKLStcICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iXAotK1wgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJcCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kX3F1b3RlZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JwotKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCi0rICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotK2Vsc2UKLSsgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCi0rICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAotKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLStmaQotKwotK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCi0rICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mNQotKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mMjt9Ci0rZmkKLSsKLSsKLSsgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8Ci0gICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCi0gICBjaG1vZCAreCAiJG9maWxlIgotIAotQEAgLTE5NzY1LDEyICsyMDYxMCwxMiBAQCB3aXRoX2djYz0kR0NDX0NYWAotICMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KLSBub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWAotIAotLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KLS13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9DWFgKLS0KLSAjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KLSBwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCi0gCi0rIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgotK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsX0NYWAotKwotICMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KLSBsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFgKLSAKLUBAIC0xOTg1Nyw5ICsyMDcwMiw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGhfQ1hYCi0gIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCi0gbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlic19DWFgKLSAKLS0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCi0tZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aF9DWFgKLS0KLSAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KLSBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFgKLSAKLUBAIC0xOTg3NSw2ICsyMDcxNyw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zX0NYWAotICMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCi0gcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHNfQ1hYCi0gCi0rIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgotK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHNfQ1hYCi0rCi0gIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCi0gZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjX0NYWAotIAotZGlmZiAtLWdpdCBhL2xpYnRvb2wubTQgYi9saWJ0b29sLm00Ci1pbmRleCAyNGQxM2YzNDQwLi5lNDVmZGM2OTk4IDEwMDY0NAotLS0tIGEvbGlidG9vbC5tNAotKysrIGIvbGlidG9vbC5tNAotQEAgLTEsNyArMSw4IEBACi0gIyBsaWJ0b29sLm00IC0gQ29uZmlndXJlIGxpYnRvb2wgZm9yIHRoZSBob3N0IHN5c3RlbS4gLSotQXV0b2NvbmYtKi0KLSAjCi0gIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKLS0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotKyMgICAgICAgICAgICAgICAgIEluYy4KLSAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgotICMKLSAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCi1AQCAtMTAsNyArMTEsOCBAQAotIAotIG00X2RlZmluZShbX0xUX0NPUFlJTkddLCBbZG5sCi0gIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKLS0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotKyMgICAgICAgICAgICAgICAgIEluYy4KLSAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgotICMKLSAjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCi1AQCAtMzcsNyArMzksNyBAQCBtNF9kZWZpbmUoW19MVF9DT1BZSU5HXSwgW2RubAotICMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gXSkKLSAKLS0jIHNlcmlhbCA1NiBMVF9JTklUCi0rIyBzZXJpYWwgNTcgTFRfSU5JVAotIAotIAotICMgTFRfUFJFUkVRKFZFUlNJT04pCi1AQCAtOTIsNyArOTQsOCBAQCBfTFRfU0VUX09QVElPTlMoWyQwXSwgWyQxXSkKLSBMSUJUT09MX0RFUFM9IiRsdG1haW4iCi0gCi0gIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KLS1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKLStMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpciknCi0rTElCVE9PTD0iJExJQlRPT0wvJHtob3N0X2FsaWFzfS1saWJ0b29sIgotIEFDX1NVQlNUKExJQlRPT0wpZG5sCi0gCi0gX0xUX1NFVFVQCi1AQCAtMTY2LDEwICsxNjksMTMgQEAgX0xUX0RFQ0woW10sIFtleGVleHRdLCBbMF0sIFtFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIildKWRubAotIGRubAotIG00X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAotIG00X3JlcXVpcmUoW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10pZG5sCi0rbTRfcmVxdWlyZShbX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlNdKWRubAotIG00X3JlcXVpcmUoW19MVF9DTURfUkVMT0FEXSlkbmwKLSBtNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9EXSlkbmwKLSttNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQl0pZG5sCi0gbTRfcmVxdWlyZShbX0xUX0NNRF9PTERfQVJDSElWRV0pZG5sCi0gbTRfcmVxdWlyZShbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10pZG5sCi0rbTRfcmVxdWlyZShbX0xUX1dJVEhfU1lTUk9PVF0pZG5sCi0gCi0gX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoWwotICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKLUBAIC0xOTksNyArMjA1LDcgQEAgYWl4MyopCi0gZXNhYwotIAotICMgR2xvYmFsIHZhcmlhYmxlczoKLS1vZmlsZT1saWJ0b29sCi0rb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCi0gY2FuX2J1aWxkX3NoYXJlZD15ZXMKLSAKLSAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKLUBAIC02MzIsNyArNjM4LDcgQEAgbTRfaWZzZXQoW0FDX1BBQ0tBR0VfTkFNRV0sIFtBQ19QQUNLQUdFX05BTUUgXSljb25maWcubHRbXWRubAotIG00X2lmc2V0KFtBQ19QQUNLQUdFX1ZFUlNJT05dLCBbIEFDX1BBQ0tBR0VfVkVSU0lPTl0pCi0gY29uZmlndXJlZCBieSAkWzBdLCBnZW5lcmF0ZWQgYnkgbTRfUEFDS0FHRV9TVFJJTkcuCi0gCi0tQ29weXJpZ2h0IChDKSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotK0NvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSBUaGlzIGNvbmZpZy5sdCBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIGdpdmVzIHVubGltaXRlZCBwZXJtaXNpb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKLSAKLUBAIC03NDYsMTUgKzc1MiwxMiBAQCBfTFRfRU9GCi0gICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCi0gICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQotICAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KLS0gIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCi0tICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCi0rICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCi0rICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQotIAotLSAgX0xUX1BST0dfWFNJX1NIRUxMRk5TCi0rICBfTFRfUFJPR19SRVBMQUNFX1NIRUxMRk5TCi0gCi0tICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCi0tICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCi0tCi0tICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8Ci0rICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAotICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQotICAgY2htb2QgK3ggIiRvZmlsZSIKLSBdLAotQEAgLTk4MCw2ICs5ODMsOCBAQCBfTFRfRU9GCi0gICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiZBU19NRVNTQUdFX0xPR19GRAotICAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mQVNfTUVTU0FHRV9MT0dfRkQKLSsgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKLSsgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKLSBpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQotIF9MVF9FT0YKLUBAIC0xMDY5LDMwICsxMDc0LDQxIEBAIG00X2RlZnVuKFtfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFU10sCi0gICBmaQotIF0pCi0gCi0tIyBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAotLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsjIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFtUQUdOQU1FXSkKLSsjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAjIExpbmtzIGEgbWluaW1hbCBwcm9ncmFtIGFuZCBjaGVja3MgdGhlIGV4ZWN1dGFibGUKLSAjIGZvciB0aGUgc3lzdGVtIGRlZmF1bHQgaGFyZGNvZGVkIGxpYnJhcnkgcGF0aC4gSW4gbW9zdCBjYXNlcywKLSAjIHRoaXMgaXMgL3Vzci9saWI6L2xpYiwgYnV0IHdoZW4gdGhlIE1QSSBjb21waWxlcnMgYXJlIHVzZWQKLSAjIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29tbXVuaWNhdGlvbiBhbmQgTVBJIGxpYnMgYXJlIGluY2x1ZGVkIHRvby4KLSAjIElmIHdlIGRvbid0IGZpbmQgYW55dGhpbmcsIHVzZSB0aGUgZGVmYXVsdCBsaWJyYXJ5IHBhdGggYWNjb3JkaW5nCi0gIyB0byB0aGUgYWl4IGxkIG1hbnVhbC4KLSsjIFN0b3JlIHRoZSByZXN1bHRzIGZyb20gdGhlIGRpZmZlcmVudCBjb21waWxlcnMgZm9yIGVhY2ggVEFHTkFNRS4KLSsjIEFsbG93IHRvIG92ZXJyaWRlIHRoZW0gZm9yIGFsbCB0YWdzIHRocm91Z2ggbHRfY3ZfYWl4X2xpYnBhdGguCi0gbTRfZGVmdW4oW19MVF9TWVNfTU9EVUxFX1BBVEhfQUlYXSwKLSBbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKLS1BQ19MSU5LX0lGRUxTRShBQ19MQU5HX1BST0dSQU0sWwotLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0tICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLS0JL14wLyB7Ci0tCSAgICBzL14wICAqXCguKlwpJC9cMS8KLS0JICAgIHAKLS0JfQotLSAgICB9JwotLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLS1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0tICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLS1maV0sW10pCi0taWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0raWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgotKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCi0rZWxzZQotKyAgQUNfQ0FDSEVfVkFMKFtfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKV0sCi0rICBbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTV0sWwotKyAgbHRfYWl4X2xpYnBhdGhfc2VkPSdbCi0rICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotKwkgIC9eMC8gewotKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLwotKwkgICAgICBwCi0rCSAgfQotKyAgICAgIH1dJwotKyAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0rICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi0rICBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkiOyB0aGVuCi0rICAgIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotKyAgZmldLFtdKQotKyAgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pIjsgdGhlbgotKyAgICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT0iL3Vzci9saWI6L2xpYiIKLSsgIGZpCi0rICBdKQotKyAgYWl4X2xpYnBhdGg9JF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pCi0rZmkKLSBdKSMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKLSAKLSAKLUBAIC0xMTE3LDcgKzExMzMsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITwotIAotIEFDX01TR19DSEVDS0lORyhbaG93IHRvIHByaW50IHN0cmluZ3NdKQotICMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgotLWlmIHRlc3QgIlhgcHJpbnQgLXIgLS0gLW4gMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCi0raWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCi0gICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KLSAgIEVDSE89J3ByaW50IC1yIC0tJwotIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCi1AQCAtMTE2MSw2ICsxMTc3LDM5IEBAIF9MVF9ERUNMKFtdLCBbRUNIT10sIFsxXSwgW0FuIGVjaG8gcHJvZ3JhbSB0aGF0IHByb3RlY3RzIGJhY2tzbGFzaGVzXSkKLSBdKSMgX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKLSAKLSAKLSsjIF9MVF9XSVRIX1NZU1JPT1QKLSsjIC0tLS0tLS0tLS0tLS0tLS0KLStBQ19ERUZVTihbX0xUX1dJVEhfU1lTUk9PVF0sCi0rW0FDX01TR19DSEVDS0lORyhbZm9yIHN5c3Jvb3RdKQotK0FDX0FSR19XSVRIKFtsaWJ0b29sLXN5c3Jvb3RdLAotK1sgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3RbPURJUl0gU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKLSsgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS5dLAotK1tdLCBbd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm9dKQotKwotK2RubCBsdF9zeXNyb290IHdpbGwgYWx3YXlzIGJlIHBhc3NlZCB1bnF1b3RlZC4gIFdlIHF1b3RlIGl0IGhlcmUKLStkbmwgaW4gY2FzZSB0aGUgdXNlciBwYXNzZWQgYSBkaXJlY3RvcnkgbmFtZS4KLStsdF9zeXNyb290PQotK2Nhc2UgJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0gaW4gIygKLSsgeWVzKQotKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0rICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAotKyAgIGZpCi0rICAgOzsgIygKLSsgLyopCi0rICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi0rICAgOzsgIygKLSsgbm98JycpCi0rICAgOzsgIygKLSsgKikKLSsgICBBQ19NU0dfUkVTVUxUKFske3dpdGhfbGlidG9vbF9zeXNyb290fV0pCi0rICAgQUNfTVNHX0VSUk9SKFtUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguXSkKLSsgICA7OwotK2VzYWMKLSsKLSsgQUNfTVNHX1JFU1VMVChbJHtsdF9zeXNyb290Oi1ub31dKQotK19MVF9ERUNMKFtdLCBbbHRfc3lzcm9vdF0sIFswXSwgW1RoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgXWRubAotK1tkZXBlbmRlbnQgbGlicmFyaWVzLCBhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLl0pXSkKLSsKLSAjIF9MVF9FTkFCTEVfTE9DSwotICMgLS0tLS0tLS0tLS0tLS0tCi0gbTRfZGVmdW4oW19MVF9FTkFCTEVfTE9DS10sCi1AQCAtMTMyMCwxNCArMTM2OSw0NyBAQCBuZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKLSBdKSMgX0xUX0VOQUJMRV9MT0NLCi0gCi0gCi0rIyBfTFRfUFJPR19BUgotKyMgLS0tLS0tLS0tLS0KLSttNF9kZWZ1bihbX0xUX1BST0dfQVJdLAotK1tBQ19DSEVDS19UT09MUyhBUiwgW2FyXSwgZmFsc2UpCi0rOiAke0FSPWFyfQotKzogJHtBUl9GTEFHUz1jcnV9Ci0rX0xUX0RFQ0woW10sIFtBUl0sIFsxXSwgW1RoZSBhcmNoaXZlcl0pCi0rX0xUX0RFQ0woW10sIFtBUl9GTEFHU10sIFsxXSwgW0ZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlXSkKLSsKLStBQ19DQUNIRV9DSEVDSyhbZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnRdLCBbbHRfY3ZfYXJfYXRfZmlsZV0sCi0rICBbbHRfY3ZfYXJfYXRfZmlsZT1ubwotKyAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU1dLAotKyAgICAgW2VjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAotKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiZBU19NRVNTQUdFX0xPR19GRCcKLSsgICAgICBBQ19UUllfRVZBTChbbHRfYXJfdHJ5XSkKLSsgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgotKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgotKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKLSsJQUNfVFJZX0VWQUwoW2x0X2FyX3RyeV0pCi0rCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCi0rICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAotKyAgICAgICAgZmkKLSsgICAgICBmaQotKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQotKyAgICAgXSkKLSsgIF0pCi0rCi0raWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgotKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQotK2Vsc2UKLSsgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQotK2ZpCi0rX0xUX0RFQ0woW10sIFthcmNoaXZlcl9saXN0X3NwZWNdLCBbMV0sCi0rICBbSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyXSkKLStdKSMgX0xUX1BST0dfQVIKLSsKLSsKLSAjIF9MVF9DTURfT0xEX0FSQ0hJVkUKLSAjIC0tLS0tLS0tLS0tLS0tLS0tLS0KLSBtNF9kZWZ1bihbX0xUX0NNRF9PTERfQVJDSElWRV0sCi0tW0FDX0NIRUNLX1RPT0woQVIsIGFyLCBmYWxzZSkKLS10ZXN0IC16ICIkQVIiICYmIEFSPWFyCi0tdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKLS1fTFRfREVDTChbXSwgW0FSXSwgWzFdLCBbVGhlIGFyY2hpdmVyXSkKLS1fTFRfREVDTChbXSwgW0FSX0ZMQUdTXSwgWzFdKQotK1tfTFRfUFJPR19BUgotIAotIEFDX0NIRUNLX1RPT0woU1RSSVAsIHN0cmlwLCA6KQotIHRlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgotQEAgLTE2MjMsNyArMTcwNSw3IEBAIGVsc2UKLSAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKLSAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCi0gICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgotLVsjbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSIKLStbI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgotICNpbmNsdWRlICJjb25mZGVmcy5oIgotIAotICNpZiBIQVZFX0RMRkNOX0gKLUBAIC0xNjY3LDEwICsxNzQ5LDEwIEBAIGVsc2UKLSAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCi0gICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLwotICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQotLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7Ci0raW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOwotICNlbmRpZgotIAotLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQotK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQotIGludCBtYWluICgpCi0gewotICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7Ci1AQCAtMjIxMCw4ICsyMjkyLDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAgbmVlZF92ZXJzaW9uPW5vCi0gICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAKLS0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgotLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKLSsgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KLSsgIHllcywqKQotKyAgICAjIGdjYwotICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJwotICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCi0gICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgotQEAgLTIyNDQsMTMgKzIzMjcsNzEgQEAgbTRfaWYoWyQxXSwgW10sWwotICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgIDs7Ci0gICAgIGVzYWMKLSsgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKLSsgICAgOzsKLSsKLSsgICosY2wqKQotKyAgICAjIE5hdGl2ZSBNU1ZDCi0rICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCi0rICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKLSsKLSsgICAgY2FzZSAkYnVpbGRfb3MgaW4KLSsgICAgbWluZ3cqKQotKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KLSsgICAgICBsdF9zYXZlX2lmcz0kSUZTCi0rICAgICAgSUZTPSc7JwotKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKLSsgICAgICBkbwotKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcwotKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KLSsgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAotKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgotKyAgICAgIGRvbmUKLSsgICAgICBJRlM9JGx0X3NhdmVfaWZzCi0rICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCi0rICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbW2EtekEtWl1dXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKLSsgICAgICA7OwotKyAgICBjeWd3aW4qKQotKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KLSsgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKLSsgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCi0rICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAotKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAotKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCi0rICAgICAgOzsKLSsgICAgKikKLSsgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCi0rICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgWyRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbF07IHRoZW4KLSsgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCi0rICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAotKyAgICAgIGVsc2UKLSsgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKLSsgICAgICBmaQotKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQotKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKLSsgICAgICA7OwotKyAgICBlc2FjCi0rCi0rICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKLSsgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci0rICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSsgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+Ci0rICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+Ci0rICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJwotKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgotKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+Ci0rICAgICAgICRSTSBcJGRscGF0aCcKLSsgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCi0gICAgIDs7Ci0gCi0gICAqKQotKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKLSAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKLSsgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKLSAgICAgOzsKLSAgIGVzYWMKLS0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KLSAgIHNobGlicGF0aF92YXI9UEFUSAotICAgOzsKLUBAIC0yMzQyLDcgKzI0ODMsNyBAQCBoYWlrdSopCi0gICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKLSAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLS0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9iZW9zL3N5c3RlbS9saWInCi0rICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKLSAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgIDs7Ci0gCi1AQCAtMjk1MCw2ICszMDkxLDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCi0gZXNhYwotIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLSBjYXNlICRob3N0X29zIGluCi0rICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0rICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgotKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCi0rICAgIGZpCi0rICAgIDs7Ci0gICBkYXJ3aW4qKQotICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLUBAIC0zMDE2LDcgKzMxNjIsOCBAQCBtaW5ndyogfCBwdzMyKikKLSAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKLSAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCi0gICBlbHNlCi0tICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JwotKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCi0rICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKLSAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJwotICAgZmkKLSAgIDs7Ci1AQCAtMzE2Nyw2ICszMzE0LDIxIEBAIHRwZiopCi0gICA7OwotIGVzYWMKLSBdKQotKwotK2ZpbGVfbWFnaWNfZ2xvYj0KLSt3YW50X25vY2FzZWdsb2I9bm8KLStpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgotKyAgY2FzZSAkaG9zdF9vcyBpbgotKyAgbWluZ3cqIHwgcHczMiopCi0rICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSsgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCi0rICAgIGVsc2UKLSsgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tbXDFdXVwvW1tcMV1dXC9nOy9nImAKLSsgICAgZmkKLSsgICAgOzsKLSsgIGVzYWMKLStmaQotKwotIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAotIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAotIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgotQEAgLTMxNzQsNyArMzMzNiwxMSBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KLSBfTFRfREVDTChbXSwgW2RlcGxpYnNfY2hlY2tfbWV0aG9kXSwgWzFdLAotICAgICBbTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHNdKQotIF9MVF9ERUNMKFtdLCBbZmlsZV9tYWdpY19jbWRdLCBbMV0sCi0tICAgIFtDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIl0pCi0rICAgIFtDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKLStfTFRfREVDTChbXSwgW2ZpbGVfbWFnaWNfZ2xvYl0sIFsxXSwKLSsgICAgW0hvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKLStfTFRfREVDTChbXSwgW3dhbnRfbm9jYXNlZ2xvYl0sIFsxXSwKLSsgICAgW0ZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIl0pCi0gXSkjIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QKLSAKLSAKLUBAIC0zMjc3LDYgKzM0NDMsNjcgQEAgZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotIGRubCBBQ19ERUZVTihbQU1fUFJPR19OTV0sIFtdKQotIGRubCBBQ19ERUZVTihbQUNfUFJPR19OTV0sIFtdKQotIAotKyMgX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUIKLSsjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rIyBob3cgdG8gZGV0ZXJtaW5lIHRoZSBuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeQotKyMgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgbGluayBsaWJyYXJ5LgotKyMgIC0tIFBPUlRNRSBmaWxsIGluIHdpdGggdGhlIGR5bmFtaWMgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MKLSttNF9kZWZ1bihbX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUJdLAotK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pCi0rbTRfcmVxdWlyZShbX0xUX0RFQ0xfT0JKRFVNUF0pCi0rbTRfcmVxdWlyZShbX0xUX0RFQ0xfRExMVE9PTF0pCi0rQUNfQ0FDSEVfQ0hFQ0soW2hvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXNdLAotK2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kLAotK1tsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKLSsKLStjYXNlICRob3N0X29zIGluCi0rY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAotKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAotKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCi0rICAqLS1pZGVudGlmeS1zdHJpY3QqKQotKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKLSsgICAgOzsKLSsgICopCi0rICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjawotKyAgICA7OwotKyAgZXNhYwotKyAgOzsKLSsqKQotKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCi0rICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCi0rICA7OwotK2VzYWMKLStdKQotK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAotK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KLSsKLStfTFRfREVDTChbXSwgW3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kXSwgWzFdLAotKyAgICBbQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllc10pCi0rXSkjIF9MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCCi0rCi0rCi0rIyBfTFRfUEFUSF9NQU5JRkVTVF9UT09MCi0rIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rIyBsb2NhdGUgdGhlIG1hbmlmZXN0IHRvb2wKLSttNF9kZWZ1bihbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0sCi0rW0FDX0NIRUNLX1RPT0woTUFOSUZFU1RfVE9PTCwgbXQsIDopCi0rdGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKLStBQ19DQUNIRV9DSEVDSyhbaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sXSwgW2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbF0sCi0rICBbbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCi0rICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiZBU19NRVNTQUdFX0xPR19GRAotKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAotKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECi0rICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCi0rICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKLSsgIGZpCi0rICBybSAtZiBjb25mdGVzdCpdKQotK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCi0rICBNQU5JRkVTVF9UT09MPToKLStmaQotK19MVF9ERUNMKFtdLCBbTUFOSUZFU1RfVE9PTF0sIFsxXSwgW01hbmlmZXN0IHRvb2xdKWRubAotK10pIyBfTFRfUEFUSF9NQU5JRkVTVF9UT09MCi0rCi0gCi0gIyBMVF9MSUJfTQotICMgLS0tLS0tLS0KLUBAIC0zNDAzLDggKzM2MzAsOCBAQCBlc2FjCi0gbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKLSAKLSAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKLS1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgotLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwobGliW1teIF1dKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKLStsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpW1sgXV0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCi0rbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpW1sgXV0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKGxpYltbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCi0gCi0gIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCi0gb3B0X2NyPQotQEAgLTM0NDAsNiArMzY2Nyw3IEBAIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KLSAgIGVsc2UKLSAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKltbCSBdXVwoJHN5bWNvZGUkc3ltY29kZSpcKVtbCSBdXVtbCSBdXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKLSAgIGZpCi0rICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCi0gCi0gICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KLSAgIHBpcGVfd29ya3M9bm8KLUBAIC0zNDczLDYgKzM3MDEsMTggQEAgX0xUX0VPRgotICAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCi0gCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgotIAkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0Ci0rLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCi0rI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKLSsvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKLSsgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCi0rIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUCi0rI2VsaWYgZGVmaW5lZChfX29zZl9fKQotKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLwotKyMgZGVmaW5lIExUQCZ0QF9ETFNZTV9DT05TVAotKyNlbHNlCi0rIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUIGNvbnN0Ci0rI2VuZGlmCi0rCi0gI2lmZGVmIF9fY3BsdXNwbHVzCi0gZXh0ZXJuICJDIiB7Ci0gI2VuZGlmCi1AQCAtMzQ4NCw3ICszNzI0LDcgQEAgX0xUX0VPRgotIAkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAotIAotIC8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KLS1jb25zdCBzdHJ1Y3QgewotK0xUQCZ0QF9ETFNZTV9DT05TVCBzdHJ1Y3QgewotICAgY29uc3QgY2hhciAqbmFtZTsKLSAgIHZvaWQgICAgICAgKmFkZHJlc3M7Ci0gfQotQEAgLTM1MTAsMTUgKzM3NTAsMTUgQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKLSBfTFRfRU9GCi0gCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KLSAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKLS0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgotLQkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCi0rCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCi0gCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKLSAJICBDRkxBR1M9IiRDRkxBR1MkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIgotIAkgIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KLSAJICAgIHBpcGVfd29ya3M9eWVzCi0gCSAgZmkKLS0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgotLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgotKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCi0rCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCi0gCWVsc2UKLSAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gCWZpCi1AQCAtMzU1MSw2ICszNzkxLDEzIEBAIGVsc2UKLSAgIEFDX01TR19SRVNVTFQob2spCi0gZmkKLSAKLSsjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KLStpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgotKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCi0rZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW1tAXV1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCi0rICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKLStmaQotKwotIF9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3BpcGVdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sIFsxXSwKLSAgICAgW1Rha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXNdKQotIF9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NkZWNsXSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsXSwgWzFdLAotQEAgLTM1NjEsNiArMzgwOCw4IEBAIF9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzXSwKLSBfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4XSwKLSAgICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLCBbMV0sCi0gICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZF0pCi0rX0xUX0RFQ0woW10sIFtubV9maWxlX2xpc3Rfc3BlY10sIFsxXSwKLSsgICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgJE5NXSkKLSBdKSAjIF9MVF9DTURfR0xPQkFMX1NZTUJPTFMKLSAKLSAKLUBAIC0zNTcyLDcgKzM4MjEsNiBAQCBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0KLSBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Ci0gX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQotIAotLUFDX01TR19DSEVDS0lORyhbZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUNdKQotIG00X2lmKFskMV0sIFtDWFhdLCBbCi0gICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCi0gICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotQEAgLTM2NzgsNiArMzkyNiwxMiBAQCBtNF9pZihbJDFdLCBbQ1hYXSwgWwotIAkgIDs7Ci0gCWVzYWMKLSAJOzsKLSsgICAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqIHwgY2VnY2MqKQotKwkjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCi0rCSMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCi0rCW00X2lmKFskMV0sIFtHQ0pdLCBbXSwKLSsJICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKLSsJOzsKLSAgICAgICBkZ3V4KikKLSAJY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAJICBlYysrKikKLUBAIC0zODMwLDcgKzQwODQsNyBAQCBtNF9pZihbJDFdLCBbQ1hYXSwgWwotIAk7OwotICAgICAgIHNvbGFyaXMqKQotIAljYXNlICRjY19iYXNlbmFtZSBpbgotLQkgIENDKikKLSsJICBDQyogfCBzdW5DQyopCi0gCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCi0gCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotIAkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLUBAIC00MDUzLDYgKzQzMDcsMTIgQEAgbTRfaWYoWyQxXSwgW0NYWF0sIFsKLSAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctLXNoYXJlZCcKLSAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctLXN0YXRpYycKLSAJOzsKLSsgICAgICBuYWdmb3IqKQotKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCi0rCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsLVdsLCwnCi0rCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKLSsJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSsJOzsKLSAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCi0gICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAotIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQotQEAgLTQxMTUsNyArNDM3NSw3IEBAIG00X2lmKFskMV0sIFtDWFhdLCBbCi0gICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLSAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0tICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQotKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKLSAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICc7OwotICAgICAgICopCi0gCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJzs7Ci1AQCAtNDE3Miw5ICs0NDMyLDExIEBAIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpQCZ0QG00X2lmKFskMV0sW10sWyAtRFBJQ10sW200X2lmKFskMV0sW0NYWF0sWyAtRFBJQ10sW10pXSkiCi0gICAgIDs7Ci0gZXNhYwotLUFDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSldKQotLV9MVF9UQUdERUNMKFt3bF0sIFtsdF9wcm9nX2NvbXBpbGVyX3dsXSwgWzFdLAotLQlbSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlcl0pCi0rCi0rQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDXSwKLSsgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljLCAkMSldLAotKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKT0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpXSkKLStfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKQotIAotICMKLSAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCi1AQCAtNDE5Myw2ICs0NDU1LDggQEAgZmkKLSBfTFRfVEFHREVDTChbcGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9waWNdLCBbMV0sCi0gCVtBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHNdKQotIAotK19MVF9UQUdERUNMKFt3bF0sIFtsdF9wcm9nX2NvbXBpbGVyX3dsXSwgWzFdLAotKwlbSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlcl0pCi0gIwotICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSAjCi1AQCAtNDIxMyw2ICs0NDc3LDcgQEAgX0xUX1RBR0RFQ0woW2xpbmtfc3RhdGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9zdGF0aWNdLCBbMV0sCi0gbTRfZGVmdW4oW19MVF9MSU5LRVJfU0hMSUJTXSwKLSBbQUNfUkVRVUlSRShbTFRfUEFUSF9MRF0pZG5sCi0gQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCi0rbTRfcmVxdWlyZShbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0pZG5sCi0gbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCi0gbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAotIG00X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCi1AQCAtNDIyMSw2ICs0NDg2LDcgQEAgbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCi0gQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQotIG00X2lmKFskMV0sIFtDWFhdLCBbCi0gICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotKyAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCi0gICBjYXNlICRob3N0X29zIGluCi0gICBhaXhbWzQtOV1dKikKLSAgICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCi1AQCAtNDIzNSwxNSArNDUwMSwyMCBAQCBtNF9pZihbJDFdLCBbQ1hYXSwgWwotICAgICA7OwotICAgcHczMiopCi0gICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSIkbHRkbGxfY21kcyIKLS0gIDs7Ci0rICAgIDs7Ci0gICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQotLSAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLzsvXi4qW1sgXV1fX25tX18vcy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0tICA7OwotKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotKyAgICBjbCopIDs7Ci0rICAgICopCi0rICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS87cy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0rICAgICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZSddCi0rICAgICAgOzsKLSsgICAgZXNhYwotKyAgICA7OwotICAgKikKLSAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLS0gIDs7Ci0rICAgIDs7Ci0gICBlc2FjCi0tICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJ10KLSBdLCBbCi0gICBydW5wYXRoX3Zhcj0KLSAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KLUBAIC00NDExLDcgKzQ2ODIsOCBAQCBfTFRfRU9GCi0gICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0gICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubwotICAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwotLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW1tBSVRXXV1bWyBdXS9zLy4qW1sgXV0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSsgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLztzL14uKltbIF1dX19ubV9fXChbW14gXV0qXClbWyBdXVtbXiBdXSovXDEgREFUQS87L15JW1sgXV0vZDsvXltbQUlUV11dW1sgXV0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSsgICAgICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJ10KLSAKLSAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLUBAIC00NTEwLDEyICs0NzgyLDEyIEBAIF9MVF9FT0YKLSAJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCi0gCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Ci0gCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9Jy1ycGF0aCAkbGliZGlyJwotLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKLSsJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJwotIAkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KLSAJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotIAkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLSsJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJwotIAkgIGZpCi0gCSAgOzsKLSAJZXNhYwotQEAgLTQ1MjksOCArNDgwMSw4IEBAIF9MVF9FT0YKLSAJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKLSAJd2xhcmM9Ci0gICAgICAgZWxzZQotLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLS0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0rCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICAgZmkKLSAgICAgICA7OwotIAotQEAgLTQ1NDgsOCArNDgyMCw4IEBAIF9MVF9FT0YKLSAKLSBfTFRfRU9GCi0gICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0tCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0rCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSsJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgICBlbHNlCi0gCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgICBmaQotQEAgLTQ1OTUsOCArNDg2Nyw4IEBAIF9MVF9FT0YKLSAKLSAgICAgKikKLSAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0tCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0rCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSsJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgICBlbHNlCi0gCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgICBmaQotQEAgLTQ3MjYsNyArNDk5OCw3IEBAIF9MVF9FT0YKLSAJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSctYmVyb2snCi0gICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KLSAgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KLS0gICAgICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCi0rICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQotICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0gICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKLSAgICAgICBlbHNlCi1AQCAtNDczNyw3ICs1MDA5LDcgQEAgX0xUX0VPRgotIAllbHNlCi0gCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KLSAJICMgZW1wdHkgZXhlY3V0YWJsZS4KLS0JIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCi0rCSBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQotIAkgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0gCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKLSAJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi1AQCAtNDc4MSwyMCArNTA1Myw2MyBAQCBfTFRfRU9GCi0gICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KLSAgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCi0gICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLS0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKLS0gICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLS0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotLSAgICAgIGxpYmV4dD1saWIKLS0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLS0gICAgICBzaHJleHRfY21kcz0iLmRsbCIKLS0gICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCi0tICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCi0tICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KLS0gICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKLS0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgotLSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCi0tICAgICAgX0xUX1RBR1ZBUihmaXhfc3JjZmlsZV9wYXRoLCAkMSk9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJwotLSAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwotKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0rICAgICAgY2wqKQotKwkjIE5hdGl2ZSBNU1ZDCi0rCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJwotKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLSsJX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKLSsJX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPSdAJwotKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotKwlsaWJleHQ9bGliCi0rCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgotKwlzaHJleHRfY21kcz0iLmRsbCIKLSsJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKLSsJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0rCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOwotKwkgIGVsc2UKLSsJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7Ci0rCSAgZml+Ci0rCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgotKwkgIGxpbmtuYW1lcz0nCi0rCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KLSsJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKLSsJX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCi0rCV9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW1tBSVRXXV1bWyBdXS9zLy4qW1sgXV0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSsJIyBEb24ndCB1c2UgcmFubGliCi0rCV9MVF9UQUdWQVIob2xkX3Bvc3RpbnN0YWxsX2NtZHMsICQxKT0nY2htb2QgNjQ0ICRvbGRsaWInCi0rCV9MVF9UQUdWQVIocG9zdGxpbmtfY21kcywgJDEpPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+Ci0rCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KLSsJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCi0rCSAgICAqLmV4ZXwqLkVYRSkgOzsKLSsJICAgICopCi0rCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKLSsJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKLSsJICAgICAgOzsKLSsJICBlc2FjfgotKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCi0rCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOwotKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7Ci0rCSAgZmknCi0rCTs7Ci0rICAgICAgKikKLSsJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCi0rCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJwotKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLSsJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KLSsJbGliZXh0PWxpYgotKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLSsJc2hyZXh0X2NtZHM9Ii5kbGwiCi0rCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KLSsJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCi0rCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCi0rCV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJwotKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgotKwlfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJwotKwlfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKLSsJOzsKLSsgICAgICBlc2FjCi0gICAgICAgOzsKLSAKLSAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLUBAIC00ODI4LDcgKzUxNDMsNyBAQCBfTFRfRU9GCi0gCi0gICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KLSAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJwotICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLUBAIC00ODM2LDcgKzUxNTEsNyBAQCBfTFRfRU9GCi0gCi0gICAgIGhwdXg5KikKLSAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgICBlbHNlCi0gCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgIGZpCi1AQCAtNDg1Miw3ICs1MTY3LDcgQEAgX0xUX0VPRgotIAotICAgICBocHV4MTAqKQotICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgICBlbHNlCi0gCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICAgZmkKLUBAIC00ODc2LDEwICs1MTkxLDEwIEBAIF9MVF9FT0YKLSAJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAJICA7OwotIAlpYTY0KikKLS0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSsJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gCSAgOzsKLSAJKikKLS0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotIAkgIDs7Ci0gCWVzYWMKLSAgICAgICBlbHNlCi1AQCAtNDkyNiwxNiArNTI0MSwzMSBAQCBfTFRfRU9GCi0gCi0gICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLS0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0rCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKLSAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAotIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgotLSAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKLS0gICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKLS0gICAgICAgIEFDX0xJTktfSUZFTFNFKGludCBmb28odm9pZCkge30sCi0tICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0tICAgICAgICApCi0tICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgotKwlBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbF0sCi0rCSAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sXSwKLSsJICBbc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKLSsJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgotKwkgICBBQ19MSU5LX0lGRUxTRSgKLSsJICAgICBbQUNfTEFOR19TT1VSQ0UoCi0rCSAgICAgICAgW0FDX0xBTkdfQ0FTRShbQ10sIFtbaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfV1dLAotKwkJCSAgICAgIFtDKytdLCBbW2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH1dXSwKLSsJCQkgICAgICBbRm9ydHJhbiA3N10sIFtbCi0rICAgICAgc3Vicm91dGluZSBmb28KLSsgICAgICBlbmRdXSwKLSsJCQkgICAgICBbRm9ydHJhbl0sIFtbCi0rICAgICAgc3Vicm91dGluZSBmb28KLSsgICAgICBlbmRdXSldKV0sCi0rCSAgICAgIFtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXNdLAotKwkgICAgICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm9dKQotKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyJdKQotKwlpZiB0ZXN0ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID0geWVzOyB0aGVuCi0rICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotKwlmaQotICAgICAgIGVsc2UKLSAJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLUBAIC01MDIwLDcgKzUzNTAsNyBAQCBfTFRfRU9GCi0gICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZwotICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0tCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSsJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgICBlbHNlCi0gCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLUBAIC01MDM5LDkgKzUzNjksOSBAQCBfTFRfRU9GCi0gICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXogZGVmcycKLSAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotIAl3bGFyYz0nJHt3bH0nCi0tCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0tCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKLSsJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKLSAgICAgICBlbHNlCi0gCWNhc2UgYCRDQyAtViAyPiYxYCBpbgotIAkqIkNvbXBpbGVycyA1LjAiKikKLUBAIC01MzEzLDggKzU2NDMsNiBAQCBfTFRfVEFHREVDTChbXSwgW2luaGVyaXRfcnBhdGhdLCBbMF0sCi0gICAgIHRvIHJ1bnRpbWUgcGF0aCBsaXN0XSkKLSBfTFRfVEFHREVDTChbXSwgW2xpbmtfYWxsX2RlcGxpYnNdLCBbMF0sCi0gICAgIFtXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXNdKQotLV9MVF9UQUdERUNMKFtdLCBbZml4X3NyY2ZpbGVfcGF0aF0sIFsxXSwKLS0gICAgW0ZpeCB0aGUgc2hlbGwgdmFyaWFibGUgJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlcl0pCi0gX0xUX1RBR0RFQ0woW10sIFthbHdheXNfZXhwb3J0X3N5bWJvbHNdLCBbMF0sCi0gICAgIFtTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWRdKQotIF9MVF9UQUdERUNMKFtdLCBbZXhwb3J0X3N5bWJvbHNfY21kc10sIFsyXSwKLUBAIC01MzI1LDYgKzU2NTMsOCBAQCBfTFRfVEFHREVDTChbXSwgW2luY2x1ZGVfZXhwc3ltc10sIFsxXSwKLSAgICAgW1N5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZF0pCi0gX0xUX1RBR0RFQ0woW10sIFtwcmVsaW5rX2NtZHNdLCBbMl0sCi0gICAgIFtDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlc10pCi0rX0xUX1RBR0RFQ0woW10sIFtwb3N0bGlua19jbWRzXSwgWzJdLAotKyAgICBbQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtc10pCi0gX0xUX1RBR0RFQ0woW10sIFtmaWxlX2xpc3Rfc3BlY10sIFsxXSwKLSAgICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlc10pCi0gZG5sIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCi1AQCAtNTQyNiw2ICs1NzU2LDcgQEAgQ0M9IiRsdF9zYXZlX0NDIgotIG00X2RlZnVuKFtfTFRfTEFOR19DWFhfQ09ORklHXSwKLSBbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCi0gbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAotK200X3JlcXVpcmUoW19MVF9QQVRIX01BTklGRVNUX1RPT0xdKWRubAotIGlmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCAiWCRDWFgiICE9ICJYbm8iICYmCi0gICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAotICAgICAodGVzdCAiWCRDWFgiICE9ICJYZysrIikpKSA7IHRoZW4KLUBAIC01NDg3LDYgKzU4MTgsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgotIAotICAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLSAgIGx0X3NhdmVfQ0M9JENDCi0rICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCi0gICBsdF9zYXZlX0xEPSRMRAotICAgbHRfc2F2ZV9HQ0M9JEdDQwotICAgR0NDPSRHWFgKLUBAIC01NTA0LDYgKzU4MzYsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgotICAgZmkKLSAgIHRlc3QgLXogIiR7TERDWFgrc2V0fSIgfHwgTEQ9JExEQ1hYCi0gICBDQz0ke0NYWC0iYysrIn0KLSsgIENGTEFHUz0kQ1hYRkxBR1MKLSAgIGNvbXBpbGVyPSRDQwotICAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQwotICAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQotQEAgLTU2NjcsNyArNjAwMCw3IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCi0gICAgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJwotICAgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkKLSAgICAgICAgICAgIyBleGVjdXRhYmxlLgotLSAgICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAotKyAgICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQotICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLSAKLSAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCi1AQCAtNTY3OSw3ICs2MDEyLDcgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KLSAgICAgICAgICAgZWxzZQotIAkgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCi0gCSAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCi0tCSAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAotKwkgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKLSAJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotIAkgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKLSAJICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLUBAIC01NzIxLDI5ICs2MDU0LDc1IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCi0gICAgICAgICA7OwotIAotICAgICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLS0gICAgICAgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCi0tICAgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLS0gICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtYWxsLXN5bWJvbHMnCi0tICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLS0gICAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KLS0gICAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwotLQotLSAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgotLSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0tICAgICAgICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKLS0gICAgICAgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KLS0gICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0tCSAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0tICAgICAgICAgIGVsc2UKLS0JICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotLQkgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLS0gICAgICAgICAgZml+Ci0tICAgICAgICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLS0gICAgICAgIGVsc2UKLS0gICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotLSAgICAgICAgZmkKLS0gICAgICAgIDs7Ci0rCWNhc2UgJEdYWCwkY2NfYmFzZW5hbWUgaW4KLSsJLGNsKiB8IG5vLGNsKikKLSsJICAjIE5hdGl2ZSBNU1ZDCi0rCSAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcwotKwkgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0rCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCi0rCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0rCSAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKLSsJICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9J0AnCi0rCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KLSsJICBsaWJleHQ9bGliCi0rCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0rCSAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0rCSAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JwotKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotKwkgICAgICAkU0VEIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKLSsJICAgIGVsc2UKLSsJICAgICAgJFNFRCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7Ci0rCSAgICBmaX4KLSsJICAgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KLSsJICAgIGxpbmtuYW1lcz0nCi0rCSAgIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgotKwkgICMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCi0rCSAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCi0rCSAgIyBEb24ndCB1c2UgcmFubGliCi0rCSAgX0xUX1RBR1ZBUihvbGRfcG9zdGluc3RhbGxfY21kcywgJDEpPSdjaG1vZCA2NDQgJG9sZGxpYicKLSsJICBfTFRfVEFHVkFSKHBvc3RsaW5rX2NtZHMsICQxKT0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgotKwkgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KLSsJICAgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KLSsJICAgICAgKi5leGV8Ki5FWEUpIDs7Ci0rCSAgICAgICopCi0rCQlsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCi0rCQlsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgotKwkJOzsKLSsJICAgIGVzYWN+Ci0rCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGx0X291dHB1dGZpbGUifgotKwkgICAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KLSsJICAgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKLSsJICAgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7Ci0rCSAgICBmaScKLSsJICA7OwotKwkqKQotKwkgICMgZysrCi0rCSAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKLSsJICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0rCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1hbGwtc3ltYm9scycKLSsJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLSsJICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCi0rCSAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCi0rCi0rCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgotKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotKwkgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQotKwkgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KLSsJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotKwkgICAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0rCSAgICBlbHNlCi0rCSAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotKwkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotKwkgICAgZml+Ci0rCSAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0rCSAgZWxzZQotKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotKwkgIGZpCi0rCSAgOzsKLSsJZXNhYwotKwk7OwotICAgICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICAgICBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUygkMSkKLSAJOzsKLUBAIC01ODE4LDcgKzYxOTcsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgotICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICopCi0gICAgICAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLS0gICAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotKyAgICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgICAgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotQEAgLTU4ODksMTAgKzYyNjgsMTAgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KLSAJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotIAkgICAgICAgICAgICA7OwotIAkgICAgICAgICAgaWE2NCopCi0tCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLSsJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLSAJICAgICAgICAgICAgOzsKLSAJICAgICAgICAgICopCi0tCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0gCSAgICAgICAgICAgIDs7Ci0gCSAgICAgICAgZXNhYwotIAkgICAgICBmaQotQEAgLTU5MzMsOSArNjMxMiw5IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCi0gICAgICAgICAgICopCi0gCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotIAkgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLS0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0rCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAJICAgICAgZWxzZQotLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgLW8gJGxpYicKLSsJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAtbyAkbGliJwotIAkgICAgICBmaQotIAkgICAgZmkKLSAJICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotQEAgLTYwMDUsMjAgKzYzODQsMjAgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KLSAJICAgICAgX0xUX1RBR1ZBUihwcmVsaW5rX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KLSAJCXJtIC1yZiAkdHBsZGlyfgotIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgotLQkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAiJwotKwkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKLSAJICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+Ci0gCQlybSAtcmYgJHRwbGRpcn4KLSAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+Ci0tCQkkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgfgotKwkJJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGB+Ci0gCQkkUkFOTElCICRvbGRsaWInCi0gCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+Ci0gCQlybSAtcmYgJHRwbGRpcn4KLSAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgotLQkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKLSsJCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJwotIAkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KLSAJCXJtIC1yZiAkdHBsZGlyfgotIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+Ci0tCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0rCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotIAkgICAgICA7OwotIAkgICAgKikgIyBWZXJzaW9uIDYgYW5kIGFib3ZlIHVzZSB3ZWFrIHN5bWJvbHMKLSAJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCi1AQCAtNjIxMyw3ICs2NTkyLDcgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KLSAJICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAJCSAgOzsKLSAJICAgICAgICAqKQotLQkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0rCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gCQkgIDs7Ci0gCSAgICAgIGVzYWMKLSAKLUBAIC02MjU5LDcgKzY2MzgsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgotIAotICAgICAgIHNvbGFyaXMqKQotICAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLS0gICAgICAgICAgQ0MqKQotKyAgICAgICAgICBDQyogfCBzdW5DQyopCi0gCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCi0gICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywkMSk9eWVzCi0gCSAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtemRlZnMnCi1AQCAtNjMwMCw5ICs2Njc5LDkgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KLSAJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotIAkgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS16ICR7d2x9ZGVmcycKLSAJICAgICAgaWYgJENDIC0tdmVyc2lvbiB8ICRHUkVQIC12ICdeMlwuNycgPiAvZGV2L251bGw7IHRoZW4KLS0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJwotKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJwotIAkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0tCQkgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKLSsJCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKLSAKLSAJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0gCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi1AQCAtNjQzMSw2ICs2ODEwLDcgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KLSAgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgotIAotICAgQ0M9JGx0X3NhdmVfQ0MKLSsgIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKLSAgIExEQ1hYPSRMRAotICAgTEQ9JGx0X3NhdmVfTEQKLSAgIEdDQz0kbHRfc2F2ZV9HQ0MKLUBAIC02NDQ1LDYgKzY4MjUsMjkgQEAgQUNfTEFOR19QT1AKLSBdKSMgX0xUX0xBTkdfQ1hYX0NPTkZJRwotIAotIAotKyMgX0xUX0ZVTkNfU1RSSVBOQU1FX0NORgotKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKyMgZnVuY19zdHJpcG5hbWVfY25mIHByZWZpeCBzdWZmaXggbmFtZQotKyMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCi0rIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKLSsjIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKLSsjIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCi0rIwotKyMgVGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gdGhlIChub24tWFNJKSB2ZXJzaW9uIG9mIGZ1bmNfc3RyaXBuYW1lLAotKyMgZXhjZXB0IHRoaXMgb25lIGNhbiBiZSB1c2VkIGJ5IG00IGNvZGUgdGhhdCBtYXkgYmUgZXhlY3V0ZWQgYnkgY29uZmlndXJlLAotKyMgcmF0aGVyIHRoYW4gdGhlIGxpYnRvb2wgc2NyaXB0LgotK200X2RlZnVuKFtfTFRfRlVOQ19TVFJJUE5BTUVfQ05GXSxbZG5sCi0rQUNfUkVRVUlSRShbX0xUX0RFQ0xfU0VEXSkKLStBQ19SRVFVSVJFKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pCi0rZnVuY19zdHJpcG5hbWVfY25mICgpCi0rewotKyAgY2FzZSAkezJ9IGluCi0rICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OwotKyAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OwotKyAgZXNhYwotK30gIyBmdW5jX3N0cmlwbmFtZV9jbmYKLStdKSMgX0xUX0ZVTkNfU1RSSVBOQU1FX0NORgotKwotICMgX0xUX1NZU19ISURERU5fTElCREVQUyhbVEFHTkFNRV0pCi0gIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAjIEZpZ3VyZSBvdXQgImhpZGRlbiIgbGlicmFyeSBkZXBlbmRlbmNpZXMgZnJvbSB2ZXJib3NlCi1AQCAtNjQ1Myw2ICs2ODU2LDcgQEAgQUNfTEFOR19QT1AKLSAjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KLSBtNF9kZWZ1bihbX0xUX1NZU19ISURERU5fTElCREVQU10sCi0gW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAotK0FDX1JFUVVJUkUoW19MVF9GVU5DX1NUUklQTkFNRV9DTkZdKWRubAotICMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdCBiZWluZyBsaW5rZWQ6Ci0gX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPQotIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9Ci1AQCAtNjUwMyw2ICs2OTA3LDEzIEBAIHB1YmxpYyBjbGFzcyBmb28gewotIH07Ci0gX0xUX0VPRgotIF0pCi0rCi0rX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1M9JENGTEFHUwotK2Nhc2UgIiRDQyAkQ0ZMQUdTICIgaW4gIygKLSsqXCAtZmx0bypcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLWx0byIgOzsKLSsqXCAtZndob3ByKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8td2hvcHIiIDs7Ci0rZXNhYwotKwotIGRubCBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKLSBkbmwgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgotIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCi1AQCAtNjUxNCw3ICs2OTI1LDcgQEAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KLSAgIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9bm8KLSAKLSAgIGZvciBwIGluIGBldmFsICIkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiYDsgZG8KLS0gICAgY2FzZSAkcCBpbgotKyAgICBjYXNlICR7cHJldn0ke3B9IGluCi0gCi0gICAgIC1MKiB8IC1SKiB8IC1sKikKLSAgICAgICAgIyBTb21lIGNvbXBpbGVycyBwbGFjZSBzcGFjZSBiZXR3ZWVuICIte0wsUn0iIGFuZCB0aGUgcGF0aC4KLUBAIC02NTIzLDEzICs2OTM0LDIyIEBAIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCi0gICAgICAgICAgIHRlc3QgJHAgPSAiLVIiOyB0aGVuCi0gCSBwcmV2PSRwCi0gCSBjb250aW51ZQotLSAgICAgICBlbHNlCi0tCSBwcmV2PQotICAgICAgICBmaQotIAotKyAgICAgICAjIEV4cGFuZCB0aGUgc3lzcm9vdCB0byBlYXNlIGV4dHJhY3RpbmcgdGhlIGRpcmVjdG9yaWVzIGxhdGVyLgotKyAgICAgICBpZiB0ZXN0IC16ICIkcHJldiI7IHRoZW4KLSsgICAgICAgICBjYXNlICRwIGluCi0rICAgICAgICAgLUwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1MJyAnJyAiJHAiOyBwcmV2PS1MOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKLSsgICAgICAgICAtUiopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLVInICcnICIkcCI7IHByZXY9LVI7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OwotKyAgICAgICAgIC1sKikgZnVuY19zdHJpcG5hbWVfY25mICctbCcgJycgIiRwIjsgcHJldj0tbDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7Ci0rICAgICAgICAgZXNhYwotKyAgICAgICBmaQotKyAgICAgICBjYXNlICRwIGluCi0rICAgICAgID0qKSBmdW5jX3N0cmlwbmFtZV9jbmYgJz0nICcnICIkcCI7IHA9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7Ci0rICAgICAgIGVzYWMKLSAgICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KLS0JIGNhc2UgJHAgaW4KLS0JIC1MKiB8IC1SKikKLSsJIGNhc2UgJHtwcmV2fSBpbgotKwkgLUwgfCAtUikKLSAJICAgIyBJbnRlcm5hbCBjb21waWxlciBsaWJyYXJ5IHBhdGhzIHNob3VsZCBjb21lIGFmdGVyIHRob3NlCi0gCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQotIAkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KLUBAIC02NTQ5LDggKzY5NjksMTAgQEAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KLSAJICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke19MVF9UQUdWQVIocG9zdGRlcHMsICQxKX0gJHtwcmV2fSR7cH0iCi0gCSBmaQotICAgICAgICBmaQotKyAgICAgICBwcmV2PQotICAgICAgICA7OwotIAotKyAgICAqLmx0by4kb2JqZXh0KSA7OyAjIElnbm9yZSBHQ0MgTFRPIG9iamVjdHMKLSAgICAgKi4kb2JqZXh0KQotICAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB0ZXN0IG9iamVjdCBmaWxlIG9ubHkgc2hvd3MgdXAKLSAgICAgICAgIyBvbmNlIGluIHRoZSBjb21waWxlciBvdXRwdXQuCi1AQCAtNjU4Niw2ICs3MDA4LDcgQEAgZWxzZQotIGZpCi0gCi0gJFJNIC1mIGNvbmZlc3QuJG9iamV4dAotK0NGTEFHUz0kX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1MKLSAKLSAjIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgotIG00X2lmKFskMV0sIFtDWFhdLAotQEAgLTY2MjIsNyArNzA0NSw3IEBAIGxpbnV4KikKLSAKLSBzb2xhcmlzKikKLSAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0tICBDQyopCi0rICBDQyogfCBzdW5DQyopCi0gICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcwotICAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKLSAgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcwotQEAgLTY3MzUsNyArNzE1OCw5IEBAIGlmIHRlc3QgIiRfbHRfZGlzYWJsZV9GNzciICE9IHllczsgdGhlbgotICAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLSAgIGx0X3NhdmVfQ0M9IiRDQyIKLSAgIGx0X3NhdmVfR0NDPSRHQ0MKLSsgIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgIENDPSR7Rjc3LSJmNzcifQotKyAgQ0ZMQUdTPSRGRkxBR1MKLSAgIGNvbXBpbGVyPSRDQwotICAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQwotICAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQotQEAgLTY3ODksNiArNzIxNCw3IEBAIGlmIHRlc3QgIiRfbHRfZGlzYWJsZV9GNzciICE9IHllczsgdGhlbgotIAotICAgR0NDPSRsdF9zYXZlX0dDQwotICAgQ0M9IiRsdF9zYXZlX0NDIgotKyAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCi0gZmkgIyB0ZXN0ICIkX2x0X2Rpc2FibGVfRjc3IiAhPSB5ZXMKLSAKLSBBQ19MQU5HX1BPUAotQEAgLTY4NjUsNyArNzI5MSw5IEBAIGlmIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzOyB0aGVuCi0gICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotICAgbHRfc2F2ZV9DQz0iJENDIgotICAgbHRfc2F2ZV9HQ0M9JEdDQwotKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUwotICAgQ0M9JHtGQy0iZjk1In0KLSsgIENGTEFHUz0kRkNGTEFHUwotICAgY29tcGlsZXI9JENDCi0gICBHQ0M9JGFjX2N2X2ZjX2NvbXBpbGVyX2dudQotIAotQEAgLTY5MjEsNyArNzM0OSw4IEBAIGlmIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzOyB0aGVuCi0gICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKLSAKLSAgIEdDQz0kbHRfc2F2ZV9HQ0MKLS0gIENDPSIkbHRfc2F2ZV9DQyIKLSsgIENDPSRsdF9zYXZlX0NDCi0rICBDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCi0gZmkgIyB0ZXN0ICIkX2x0X2Rpc2FibGVfRkMiICE9IHllcwotIAotIEFDX0xBTkdfUE9QCi1AQCAtNjk1OCwxMCArNzM4NywxMiBAQCBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKLSBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0gCi0gIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLS1sdF9zYXZlX0NDPSIkQ0MiCi0rbHRfc2F2ZV9DQz0kQ0MKLStsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCi0gbHRfc2F2ZV9HQ0M9JEdDQwotIEdDQz15ZXMKLSBDQz0ke0dDSi0iZ2NqIn0KLStDRkxBR1M9JEdDSkZMQUdTCi0gY29tcGlsZXI9JENDCi0gX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQwotIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgotQEAgLTY5OTIsNyArNzQyMyw4IEBAIGZpCi0gQUNfTEFOR19SRVNUT1JFCi0gCi0gR0NDPSRsdF9zYXZlX0dDQwotLUNDPSIkbHRfc2F2ZV9DQyIKLStDQz0kbHRfc2F2ZV9DQwotK0NGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKLSBdKSMgX0xUX0xBTkdfR0NKX0NPTkZJRwotIAotIAotQEAgLTcwMjcsOSArNzQ1OSwxMSBAQCBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0gCi0gIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLSBsdF9zYXZlX0NDPSIkQ0MiCi0rbHRfc2F2ZV9DRkxBR1M9JENGTEFHUwotIGx0X3NhdmVfR0NDPSRHQ0MKLSBHQ0M9Ci0gQ0M9JHtSQy0id2luZHJlcyJ9Ci0rQ0ZMQUdTPQotIGNvbXBpbGVyPSRDQwotIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKLSBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCi1AQCAtNzA0Miw3ICs3NDc2LDggQEAgZmkKLSAKLSBHQ0M9JGx0X3NhdmVfR0NDCi0gQUNfTEFOR19SRVNUT1JFCi0tQ0M9IiRsdF9zYXZlX0NDIgotK0NDPSRsdF9zYXZlX0NDCi0rQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUwotIF0pIyBfTFRfTEFOR19SQ19DT05GSUcKLSAKLSAKLUBAIC03MTAxLDYgKzc1MzYsMTUgQEAgX0xUX0RFQ0woW10sIFtPQkpEVU1QXSwgWzFdLCBbQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXJdKQotIEFDX1NVQlNUKFtPQkpEVU1QXSkKLSBdKQotIAotKyMgX0xUX0RFQ0xfRExMVE9PTAotKyMgLS0tLS0tLS0tLS0tLS0tLQotKyMgRW5zdXJlIERMTFRPT0wgdmFyaWFibGUgaXMgc2V0LgotK200X2RlZnVuKFtfTFRfREVDTF9ETExUT09MXSwKLStbQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKLSt0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCi0rX0xUX0RFQ0woW10sIFtETExUT09MXSwgWzFdLCBbRExMIGNyZWF0aW9uIHByb2dyYW1dKQotK0FDX1NVQlNUKFtETExUT09MXSkKLStdKQotIAotICMgX0xUX0RFQ0xfU0VECi0gIyAtLS0tLS0tLS0tLS0KLUBAIC03MTk0LDggKzc2MzgsOCBAQCBtNF9kZWZ1bihbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSwKLSAjIFRyeSBzb21lIFhTSSBmZWF0dXJlcwotIHhzaV9zaGVsbD1ubwotICggX2x0X2R1bW15PSJhL2IvYyIKLS0gIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCi0tICAgICAgPSBjLGEvYiwsIFwKLSsgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCi0rICAgICAgPSBjLGEvYixiL2MsIFwKLSAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAotICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAotICAgJiYgeHNpX3NoZWxsPXllcwotQEAgLTcyMzQsMjA2ICs3Njc4LDE2MiBAQCBfTFRfREVDTChbTkwyU1BdLCBbbHRfTkwyU1BdLCBbMV0sIFt0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzXSlkbmwKLSBdKSMgX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTCi0gCi0gCi0tIyBfTFRfUFJPR19YU0lfU0hFTExGTlMKLS0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLSMgQm91cm5lIGFuZCBYU0kgY29tcGF0aWJsZSB2YXJpYW50cyBvZiBzb21lIHVzZWZ1bCBzaGVsbCBmdW5jdGlvbnMuCi0tbTRfZGVmdW4oW19MVF9QUk9HX1hTSV9TSEVMTEZOU10sCi0tW2Nhc2UgJHhzaV9zaGVsbCBpbgotLSAgeWVzKQotLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgotLQotLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAotLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKLS0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KLS1mdW5jX2Rpcm5hbWUgKCkKLS17Ci0tICBjYXNlICR7MX0gaW4KLS0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKLS0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OwotLSAgZXNhYwotLX0KLS0KLS0jIGZ1bmNfYmFzZW5hbWUgZmlsZQotLWZ1bmNfYmFzZW5hbWUgKCkKLS17Ci0tICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCi0tfQotLQotLSMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKLS0jIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCi0tIyBjYWxsOgotLSMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCi0tIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0Ci0tIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCi0tIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCi0tIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCi0tIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0tIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCi0tIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bwotLSMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgotLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKLS17Ci0tICBjYXNlICR7MX0gaW4KLS0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKLS0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OwotLSAgZXNhYwotLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgotLX0KLS0KLS0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQotLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCi0tIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKLS0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKLS0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCi0tZnVuY19zdHJpcG5hbWUgKCkKLS17Ci0tICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCi0tICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCi0tICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQotLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KLS0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9Ci0tfQotLQotLSMgZnVuY19vcHRfc3BsaXQKLS1mdW5jX29wdF9zcGxpdCAoKQotLXsKLS0gIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQotLSAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KLS19Ci0tCi0tIyBmdW5jX2xvMm8gb2JqZWN0Ci0tZnVuY19sbzJvICgpCi0tewotLSAgY2FzZSAkezF9IGluCi0tICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7Ci0tICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OwotLSAgZXNhYwotLX0KLS0KLS0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQotLWZ1bmNfeGZvcm0gKCkKLS17Ci0tICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCi0tfQotLQotLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KLS1mdW5jX2FyaXRoICgpCi0tewotLSAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICRbKl0gKSkKLS19Ci0tCi0tIyBmdW5jX2xlbiBzdHJpbmcKLS0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCi0tZnVuY19sZW4gKCkKLS17Ci0tICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KLS19Ci0rIyBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFIChGVU5DTkFNRSwgUkVQTEFDRU1FTlQtQk9EWSkKLSsjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKyMgSW4gYCRjZmdmaWxlJywgbG9vayBmb3IgZnVuY3Rpb24gRlVOQ05BTUUgZGVsaW1pdGVkIGJ5IGBeRlVOQ05BTUUgKCkkJyBhbmQKLSsjICdefSBGVU5DTkFNRSAnLCBhbmQgcmVwbGFjZSBpdHMgYm9keSB3aXRoIFJFUExBQ0VNRU5ULUJPRFkuCi0rbTRfZGVmdW4oW19MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0VdLAotK1tkbmwgewotK3NlZCAtZSAnL14kMSAoKSQvLC9efSAjICQxIC9jXAotKyQxICgpXAotK3tcCi0rbTRfYnBhdHN1YnN0cyhbJDJdLCBbJF0sIFtcXF0sIFteXChbCSBdXCldLCBbXFxcMV0pCi0rfSAjIEV4dGVuZGVkLXNoZWxsICQxIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rXSkKLSAKLS1fTFRfRU9GCi0tICAgIDs7Ci0tICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KLS0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKLSAKLS0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKLS0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCi0tIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCi0tZnVuY19kaXJuYW1lICgpCi0tewotLSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KLS0gIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKLS0gIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCi0tICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCi0tICBlbHNlCi0tICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKLS0gIGZpCi0tfQotKyMgX0xUX1BST0dfUkVQTEFDRV9TSEVMTEZOUwotKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKyMgUmVwbGFjZSBleGlzdGluZyBwb3J0YWJsZSBpbXBsZW1lbnRhdGlvbnMgb2Ygc2V2ZXJhbCBzaGVsbCBmdW5jdGlvbnMgd2l0aAotKyMgZXF1aXZhbGVudCBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbnMgd2hlcmUgdGhvc2UgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZS4uCi0rbTRfZGVmdW4oW19MVF9QUk9HX1JFUExBQ0VfU0hFTExGTlNdLAotK1tpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCi0rICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2Rpcm5hbWVdLCBbZG5sCi0rICAgIGNhc2UgJHsxfSBpbgotKyAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7Ci0rICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OwotKyAgICBlc2FjXSkKLSsKLSsgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYmFzZW5hbWVdLCBbZG5sCi0rICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJdKQotKwotKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZV0sIFtkbmwKLSsgICAgY2FzZSAkezF9IGluCi0rICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKLSsgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7Ci0rICAgIGVzYWMKLSsgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99Il0pCi0gCi0tIyBmdW5jX2Jhc2VuYW1lIGZpbGUKLS1mdW5jX2Jhc2VuYW1lICgpCi0tewotLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCi0tfQotKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zdHJpcG5hbWVdLCBbZG5sCi0rICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKLSsgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgotKyAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQotKyAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQotKyAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifV0pCi0gCi0tZG5sIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUKLS1kbmwgQSBwb3J0YWJsZSB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gaXMgYWxyZWFkeSBkZWZpbmVkIGluIGdlbmVyYWwubTRzaAotLWRubCBzbyB0aGVyZSBpcyBubyBuZWVkIGZvciBpdCBoZXJlLgotKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zcGxpdF9sb25nX29wdF0sIFtkbmwKLSsgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9Ci0rICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1dKQotIAotLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCi0tIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KLS0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAotLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZwotLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KLS0jIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCi0tZnVuY19zdHJpcG5hbWUgKCkKLS17Ci0tICBjYXNlICR7Mn0gaW4KLS0gICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKLS0gICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OwotLSAgZXNhYwotLX0KLSsgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfc3BsaXRfc2hvcnRfb3B0XSwgW2RubAotKyAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fQotKyAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XSkKLSAKLS0jIHNlZCBzY3JpcHRzOgotLW15X3NlZF9sb25nX29wdD0nMXMvXlwoLVtbXj1dXSpcKT0uKi9cMS87cScKLS1teV9zZWRfbG9uZ19hcmc9JzFzL14tW1tePV1dKj0vLycKLSsgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfbG8yb10sIFtkbmwKLSsgICAgY2FzZSAkezF9IGluCi0rICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKLSsgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKLSsgICAgZXNhY10pCi0gCi0tIyBmdW5jX29wdF9zcGxpdAotLWZ1bmNfb3B0X3NwbGl0ICgpCi0tewotLSAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKLS0gIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCi0tfQotKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY194Zm9ybV0sIFsgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb10pCi0gCi0tIyBmdW5jX2xvMm8gb2JqZWN0Ci0tZnVuY19sbzJvICgpCi0tewotLSAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAotLX0KLSsgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYXJpdGhdLCBbICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkWypdICkpXSkKLSAKLS0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQotLWZ1bmNfeGZvcm0gKCkKLS17Ci0tICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLltbXi5dXSokLy5sby8nYAotLX0KLSsgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfbGVuXSwgWyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1dKQotK2ZpCi0gCi0tIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgotLWZ1bmNfYXJpdGggKCkKLS17Ci0tICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJFtAXSJgCi0tfQotK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KLSsgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYXBwZW5kXSwgWyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXSkKLSAKLS0jIGZ1bmNfbGVuIHN0cmluZwotLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KLS1mdW5jX2xlbiAoKQotLXsKLS0gIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJFsxXSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAotLX0KLSsgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYXBwZW5kX3F1b3RlZF0sIFtkbmwKLSsgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSIKLStkbmwgbTQgZXhwYW5zaW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHRoZW4gdGhlIHNoZWxsIGV2YWwgdHVybnMgdGhhdCBpbnRvIFwKLSsgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJdKQotIAotLV9MVF9FT0YKLS1lc2FjCi0rICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCi0rICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbW2EtekEtWl9dXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAotKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLStlbHNlCi0rICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQotKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW1thLXpBLVpfXV1cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAotKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLStmaQotIAotLWNhc2UgJGx0X3NoZWxsX2FwcGVuZCBpbgotLSAgeWVzKQotLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgotK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCi0rICBBQ19NU0dfV0FSTihbVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZV0pCi0rZmkKLStdKQotIAotLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCi0tIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCi0tZnVuY19hcHBlbmQgKCkKLS17Ci0tICBldmFsICIkWzFdKz1cJFsyXSIKLS19Ci0tX0xUX0VPRgotKyMgX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlMKLSsjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rIyBEZXRlcm1pbmUgd2hpY2ggZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb25zIHNob3VsZCBiZSB1c2VkIGJ5Ci0rIyBmdW5jX3RvX2hvc3RfZmlsZSAoYW5kLCBpbXBsaWNpdGx5LCBieSBmdW5jX3RvX2hvc3RfcGF0aCkuICBUaGVzZSBhcmUgbmVlZGVkCi0rIyBmb3IgY2VydGFpbiBjcm9zcy1jb21waWxlIGNvbmZpZ3VyYXRpb25zIGFuZCBuYXRpdmUgbWluZ3cuCi0rbTRfZGVmdW4oW19MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TXSwKLStbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAotK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCi0rQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXRdKQotK0FDX0NBQ0hFX1ZBTChsdF9jdl90b19ob3N0X2ZpbGVfY21kLAotK1tjYXNlICRob3N0IGluCi0rICAqLSotbWluZ3cqICkKLSsgICAgY2FzZSAkYnVpbGQgaW4KLSsgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCi0rICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0rICAgICAgICA7OwotKyAgICAgICotKi1jeWd3aW4qICkKLSsgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgotKyAgICAgICAgOzsKLSsgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4Ci0rICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKLSsgICAgICAgIDs7Ci0rICAgIGVzYWMKLSAgICAgOzsKLS0gICopCi0tICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCi0tCi0tIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKLS0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KLS1mdW5jX2FwcGVuZCAoKQotLXsKLS0gIGV2YWwgIiRbMV09XCQkWzFdXCRbMl0iCi0tfQotLQotLV9MVF9FT0YKLSsgICotKi1jeWd3aW4qICkKLSsgICAgY2FzZSAkYnVpbGQgaW4KLSsgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCi0rICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCi0rICAgICAgICA7OwotKyAgICAgICotKi1jeWd3aW4qICkKLSsgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAotKyAgICAgICAgOzsKLSsgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4Ci0rICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KLSsgICAgICAgIDs7Ci0rICAgIGVzYWMKLSAgICAgOzsKLS0gIGVzYWMKLSsgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCi0rICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAotKyAgICA7OwotK2VzYWMKLStdKQotK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKLStBQ19NU0dfUkVTVUxUKFskbHRfY3ZfdG9faG9zdF9maWxlX2NtZF0pCi0rX0xUX0RFQ0woW3RvX2hvc3RfZmlsZV9jbWRdLCBbbHRfY3ZfdG9faG9zdF9maWxlX2NtZF0sCi0rICAgICAgICAgWzBdLCBbY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXRdKWRubAotKwotK0FDX01TR19DSEVDS0lORyhbaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdF0pCi0rQUNfQ0FDSEVfVkFMKGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQsCi0rWyNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KLStsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKLStjYXNlICRob3N0IGluCi0rICAqLSotbWluZ3cqICkKLSsgICAgY2FzZSAkYnVpbGQgaW4KLSsgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCi0rICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0rICAgICAgICA7OwotKyAgICBlc2FjCi0rICAgIDs7Ci0rZXNhYwotIF0pCi0rdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAotK0FDX01TR19SRVNVTFQoWyRsdF9jdl90b190b29sX2ZpbGVfY21kXSkKLStfTFRfREVDTChbdG9fdG9vbF9maWxlX2NtZF0sIFtsdF9jdl90b190b29sX2ZpbGVfY21kXSwKLSsgICAgICAgICBbMF0sIFtjb252ZXJ0ICRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0XSlkbmwKLStdKSMgX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlMKLWRpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKLWluZGV4IDk1MDNlYzg1ZDcuLjcwZTg1NmUwNjUgMTAwNjQ0Ci0tLS0gYS9sdG1haW4uc2gKLSsrKyBiL2x0bWFpbi5zaAotQEAgLTEsMTAgKzEsOSBAQAotLSMgR2VuZXJhdGVkIGZyb20gbHRtYWluLm00c2guCi0gCi0tIyBsaWJ0b29sIChHTlUgbGlidG9vbCAxLjMxMzQgMjAwOS0xMS0yOSkgMi4yLjdhCi0rIyBsaWJ0b29sIChHTlUgbGlidG9vbCkgMi40Ci0gIyBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgotIAotICMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LAotLSMgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsjIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0gIyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTwotICMgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gCi1AQCAtMzgsNyArMzcsNiBAQAotICMgICAtbiwgLS1kcnktcnVuICAgICAgICAgICAgZGlzcGxheSBjb21tYW5kcyB3aXRob3V0IG1vZGlmeWluZyBhbnkgZmlsZXMKLSAjICAgICAgIC0tZmVhdHVyZXMgICAgICAgICAgIGRpc3BsYXkgYmFzaWMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAotICMgICAgICAgLS1tb2RlPU1PREUgICAgICAgICAgdXNlIG9wZXJhdGlvbiBtb2RlIE1PREUKLS0jICAgICAgIC0tbm8tZmluaXNoICAgICAgICAgIGxldCBpbnN0YWxsIG1vZGUgYXZvaWQgZmluaXNoIGNvbW1hbmRzCi0gIyAgICAgICAtLXByZXNlcnZlLWR1cC1kZXBzICBkb24ndCByZW1vdmUgZHVwbGljYXRlIGRlcGVuZGVuY3kgbGlicmFyaWVzCi0gIyAgICAgICAtLXF1aWV0LCAtLXNpbGVudCAgICBkb24ndCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCi0gIyAgICAgICAtLW5vLXF1aWV0LCAtLW5vLXNpbGVudAotQEAgLTcxLDE3ICs2OSwxOSBAQAotICMgICAgICAgICBjb21waWxlcjoJCSRMVENDCi0gIyAgICAgICAgIGNvbXBpbGVyIGZsYWdzOgkJJExUQ0ZMQUdTCi0gIyAgICAgICAgIGxpbmtlcjoJCSRMRCAoZ251PyAkd2l0aF9nbnVfbGQpCi0tIyAgICAgICAgICRwcm9nbmFtZToJKEdOVSBsaWJ0b29sIDEuMzEzNCAyMDA5LTExLTI5KSAyLjIuN2EKLSsjICAgICAgICAgJHByb2duYW1lOgkoR05VIGxpYnRvb2wpIDIuNAotICMgICAgICAgICBhdXRvbWFrZToJJGF1dG9tYWtlX3ZlcnNpb24KLSAjICAgICAgICAgYXV0b2NvbmY6CSRhdXRvY29uZl92ZXJzaW9uCi0gIwotICMgUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LgotKyMgR05VIGxpYnRvb2wgaG9tZSBwYWdlOiA8aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYnRvb2wvPi4KLSsjIEdlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LgotIAotIFBST0dSQU09bGlidG9vbAotIFBBQ0tBR0U9bGlidG9vbAotLVZFUlNJT049Mi4yLjdhCi0tVElNRVNUQU1QPSIgMS4zMTM0IDIwMDktMTEtMjkiCi0tcGFja2FnZV9yZXZpc2lvbj0xLjMxMzQKLStWRVJTSU9OPTIuNAotK1RJTUVTVEFNUD0iIgotK3BhY2thZ2VfcmV2aXNpb249MS4zMjkzCi0gCi0gIyBCZSBCb3VybmUgY29tcGF0aWJsZQotIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgotQEAgLTEwNiw5ICsxMDYsNiBAQCBfTFRFQ0hPX0VPRicKLSB9Ci0gCi0gIyBOTFMgbnVpc2FuY2VzOiBXZSBzYXZlIHRoZSBvbGQgdmFsdWVzIHRvIHJlc3RvcmUgZHVyaW5nIGV4ZWN1dGUgbW9kZS4KLS0jIE9ubHkgc2V0IExBTkcgYW5kIExDX0FMTCB0byBDIGlmIGFscmVhZHkgc2V0LgotLSMgVGhlc2UgbXVzdCBub3QgYmUgc2V0IHVuY29uZGl0aW9uYWxseSBiZWNhdXNlIG5vdCBhbGwgc3lzdGVtcyB1bmRlcnN0YW5kCi0tIyBlLmcuIExBTkc9QyAobm90YWJseSBTQ08pLgotIGx0X3VzZXJfbG9jYWxlPQotIGx0X3NhZmVfbG9jYWxlPQotIGZvciBsdF92YXIgaW4gTEFORyBMQU5HVUFHRSBMQ19BTEwgTENfQ1RZUEUgTENfQ09MTEFURSBMQ19NRVNTQUdFUwotQEAgLTEyMSwxNSArMTE4LDEzIEBAIGRvCi0gCSAgbHRfc2FmZV9sb2NhbGU9XCIkbHRfdmFyPUM7IFwkbHRfc2FmZV9sb2NhbGVcIgotIAlmaSIKLSBkb25lCi0rTENfQUxMPUMKLStMQU5HVUFHRT1DCi0rZXhwb3J0IExBTkdVQUdFIExDX0FMTAotIAotICRsdF91bnNldCBDRFBBVEgKLSAKLSAKLS0KLS0KLS0KLS0KLS0KLSAjIFdvcmsgYXJvdW5kIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaXNzdWUgb24gSVJJWCA2LjUuIE9uIElSSVggNi40Kywgc2gKLSAjIGlzIGtzaCBidXQgd2hlbiB0aGUgc2hlbGwgaXMgaW52b2tlZCBhcyAic2giIGFuZCB0aGUgY3VycmVudCB2YWx1ZSBvZgotICMgdGhlIF9YUEcgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IGVxdWFsIHRvIDEgKG9uZSksIHRoZSBzcGVjaWFsCi1AQCAtMTQwLDcgKzEzNSw3IEBAIHByb2dwYXRoPSIkMCIKLSAKLSAKLSA6ICR7Q1A9ImNwIC1mIn0KLS06ICR7RUNITz0kYXNfZWNob30KLSt0ZXN0ICIke0VDSE8rc2V0fSIgPSBzZXQgfHwgRUNITz0ke2FzX2VjaG8tJ3ByaW50ZiAlc1xuJ30KLSA6ICR7RUdSRVA9Ii9iaW4vZ3JlcCAtRSJ9Ci0gOiAke0ZHUkVQPSIvYmluL2dyZXAgLUYifQotIDogJHtHUkVQPSIvYmluL2dyZXAifQotQEAgLTE0OSw3ICsxNDQsNyBAQCBwcm9ncGF0aD0iJDAiCi0gOiAke01LRElSPSJta2RpciJ9Ci0gOiAke01WPSJtdiAtZiJ9Ci0gOiAke1JNPSJybSAtZiJ9Ci0tOiAke1NFRD0iL21vdW50L2VuZG9yL3dpbGRlbmh1L2xvY2FsLXg4Nl82NC9iaW4vc2VkIn0KLSs6ICR7U0VEPSIvYmluL3NlZCJ9Ci0gOiAke1NIRUxMPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSJ9Ci0gOiAke1hzZWQ9IiRTRUQgLWUgMXMvXlgvLyJ9Ci0gCi1AQCAtMTY5LDYgKzE2NCwyNyBAQCBJRlM9IiAJJGx0X25sIgotIGRpcm5hbWU9InMsL1teL10qJCwsIgotIGJhc2VuYW1lPSJzLF4uKi8sLCIKLSAKLSsjIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKLSsjIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCi0rIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCi0rZnVuY19kaXJuYW1lICgpCi0rewotKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCi0rICAgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCi0rICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKLSsgICAgZWxzZQotKyAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKLSsgICAgZmkKLSt9ICMgZnVuY19kaXJuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgotKwotKwotKyMgZnVuY19iYXNlbmFtZSBmaWxlCi0rZnVuY19iYXNlbmFtZSAoKQotK3sKLSsgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCi0rfSAjIGZ1bmNfYmFzZW5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCi0rCi0rCi0gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAotICMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KLSAjIGNhbGw6Ci1AQCAtMTgzLDE3ICsxOTksMzEgQEAgYmFzZW5hbWU9InMsXi4qLywsIgotICMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgotIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKLSB7Ci0tICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgotLSAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAtZSAiJGRpcm5hbWUiYAotLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KLS0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKLS0gIGVsc2UKLS0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgotLSAgZmkKLS0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEIC1lICIkYmFzZW5hbWUiYAotLX0KLSsgICAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KLSsgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAtZSAiJGRpcm5hbWUiYAotKyAgICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgotKyAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCi0rICAgIGVsc2UKLSsgICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCi0rICAgIGZpCi0rICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEIC1lICIkYmFzZW5hbWUiYAotK30gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgotKwotKwotKyMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCi0rIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KLSsjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAotKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZwotKyMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KLSsjIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCi0rZnVuY19zdHJpcG5hbWUgKCkKLSt7Ci0rICAgIGNhc2UgJHsyfSBpbgotKyAgICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7Ci0rICAgICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OwotKyAgICBlc2FjCi0rfSAjIGZ1bmNfc3RyaXBuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgotIAotLSMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLgotIAotICMgVGhlc2UgU0VEIHNjcmlwdHMgcHJlc3VwcG9zZSBhbiBhYnNvbHV0ZSBwYXRoIHdpdGggYSB0cmFpbGluZyBzbGFzaC4KLSBwYXRoY2FyPSdzLF4vXChbXi9dKlwpLiokLFwxLCcKLUBAIC0zNzYsNiArNDA2LDE1IEBAIHNlZF9xdW90ZV9zdWJzdD0ncy9cKFtgIiRcXF1cKS9cXFwxL2cnCi0gIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCi0gZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woWyJgXFxdXCkvXFxcMS9nJwotIAotKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IHR1cm5zIGEgc3RyaW5nIGludG8gYSByZWdleCBtYXRjaGluZyBmb3IgdGhlCi0rIyBzdHJpbmcgbGl0ZXJhbGx5LgotK3NlZF9tYWtlX2xpdGVyYWxfcmVnZXg9J3MsW10uW14kXFwqXC9dLFxcJixnJwotKwotKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGNvbnZlcnRzIGEgdzMyIGZpbGUgbmFtZSBvciBwYXRoCi0rIyB3aGljaCBjb250YWlucyBmb3J3YXJkIHNsYXNoZXMsIGludG8gb25lIHRoYXQgY29udGFpbnMKLSsjIChlc2NhcGVkKSBiYWNrc2xhc2hlcy4gIEEgdmVyeSBuYWl2ZSBpbXBsZW1lbnRhdGlvbi4KLStsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5PSdzfFxcXFwqfFxcfGc7c3wvfFxcfGc7c3xcXHxcXFxcfGcnCi0rCi0gIyBSZS1gXCcgcGFyYW1ldGVyIGV4cGFuc2lvbnMgaW4gb3V0cHV0IG9mIGRvdWJsZV9xdW90ZV9zdWJzdCB0aGF0IHdlcmUKLSAjIGBcJy1lZCBpbiBpbnB1dCB0byB0aGUgc2FtZS4gIElmIGFuIG9kZCBudW1iZXIgb2YgYFwnIHByZWNlZGVkIGEgJyQnCi0gIyBpbiBpbnB1dCB0byBkb3VibGVfcXVvdGVfc3Vic3QsIHRoYXQgJyQnIHdhcyBwcm90ZWN0ZWQgZnJvbSBleHBhbnNpb24uCi1AQCAtNDA0LDcgKzQ0Myw3IEBAIG9wdF93YXJuaW5nPToKLSAjIG5hbWUgaWYgaXQgaGFzIGJlZW4gc2V0IHlldC4KLSBmdW5jX2VjaG8gKCkKLSB7Ci0tICAgICRFQ0hPICIkcHJvZ25hbWUke21vZGUrOiB9JG1vZGU6ICQqIgotKyAgICAkRUNITyAiJHByb2duYW1lOiAke29wdF9tb2RlKyRvcHRfbW9kZTogfSQqIgotIH0KLSAKLSAjIGZ1bmNfdmVyYm9zZSBhcmcuLi4KLUBAIC00MzAsMTQgKzQ2OSwxNCBAQCBmdW5jX2VjaG9fYWxsICgpCi0gIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgotIGZ1bmNfZXJyb3IgKCkKLSB7Ci0tICAgICRFQ0hPICIkcHJvZ25hbWUke21vZGUrOiB9JG1vZGU6ICIkezErIiRAIn0gMT4mMgotKyAgICAkRUNITyAiJHByb2duYW1lOiAke29wdF9tb2RlKyRvcHRfbW9kZTogfSIkezErIiRAIn0gMT4mMgotIH0KLSAKLSAjIGZ1bmNfd2FybmluZyBhcmcuLi4KLSAjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIHdhcm5pbmcgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4KLSBmdW5jX3dhcm5pbmcgKCkKLSB7Ci0tICAgICRvcHRfd2FybmluZyAmJiAkRUNITyAiJHByb2duYW1lJHttb2RlKzogfSRtb2RlOiB3YXJuaW5nOiAiJHsxKyIkQCJ9IDE+JjIKLSsgICAgJG9wdF93YXJuaW5nICYmICRFQ0hPICIkcHJvZ25hbWU6ICR7b3B0X21vZGUrJG9wdF9tb2RlOiB9d2FybmluZzogIiR7MSsiJEAifSAxPiYyCi0gCi0gICAgICMgYmFzaCBidWcgYWdhaW46Ci0gICAgIDoKLUBAIC02NTYsMTkgKzY5NSwzNSBAQCBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgKCkKLSAgICAgZmkKLSB9Ci0gCi0tCi0tCi0rIyBmdW5jX3RyX3NoCi0rIyBUdXJuICQxIGludG8gYSBzdHJpbmcgc3VpdGFibGUgZm9yIGEgc2hlbGwgdmFyaWFibGUgbmFtZS4KLSsjIFJlc3VsdCBpcyBzdG9yZWQgaW4gJGZ1bmNfdHJfc2hfcmVzdWx0LiAgQWxsIGNoYXJhY3RlcnMKLSsjIG5vdCBpbiB0aGUgc2V0IGEtekEtWjAtOV8gYXJlIHJlcGxhY2VkIHdpdGggJ18nLiBGdXJ0aGVyLAotKyMgaWYgJDEgYmVnaW5zIHdpdGggYSBkaWdpdCwgYSAnXycgaXMgcHJlcGVuZGVkIGFzIHdlbGwuCi0rZnVuY190cl9zaCAoKQotK3sKLSsgIGNhc2UgJDEgaW4KLSsgIFswLTldKiB8ICpbIWEtekEtWjAtOV9dKikKLSsgICAgZnVuY190cl9zaF9yZXN1bHQ9YCRFQ0hPICIkMSIgfCAkU0VEICdzL15cKFswLTldXCkvX1wxLzsgcy9bXmEtekEtWjAtOV9dL18vZydgCi0rICAgIDs7Ci0rICAqICkKLSsgICAgZnVuY190cl9zaF9yZXN1bHQ9JDEKLSsgICAgOzsKLSsgIGVzYWMKLSt9Ci0gCi0gCi0gIyBmdW5jX3ZlcnNpb24KLSAjIEVjaG8gdmVyc2lvbiBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KLSBmdW5jX3ZlcnNpb24gKCkKLSB7Ci0rICAgICRvcHRfZGVidWcKLSsKLSAgICAgJFNFRCAtbiAnLyhDKS8hYiBnbwotIAk6bW9yZQotIAkvXC4vIXsKLSAJICBOCi0tCSAgcy9cbiMgLy8KLSsJICBzL1xuIyAvIC8KLSAJICBiIG1vcmUKLSAJfQotIAk6Z28KLUBAIC02ODUsNyArNzQwLDkgQEAgZnVuY192ZXJzaW9uICgpCi0gIyBFY2hvIHNob3J0IGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCi0gZnVuY191c2FnZSAoKQotIHsKLS0gICAgJFNFRCAtbiAnL14jIFVzYWdlOi8sL14jICAqLWgvIHsKLSsgICAgJG9wdF9kZWJ1ZwotKwotKyAgICAkU0VEIC1uICcvXiMgVXNhZ2U6LywvXiMgICouKi0taGVscC8gewotICAgICAgICAgcy9eIyAvLwotIAlzL14jICokLy8KLSAJcy9cJHByb2duYW1lLyckcHJvZ25hbWUnLwotQEAgLTcwMSw3ICs3NTgsMTAgQEAgZnVuY191c2FnZSAoKQotICMgdW5sZXNzICdub2V4aXQnIGlzIHBhc3NlZCBhcyBhcmd1bWVudC4KLSBmdW5jX2hlbHAgKCkKLSB7Ci0rICAgICRvcHRfZGVidWcKLSsKLSAgICAgJFNFRCAtbiAnL14jIFVzYWdlOi8sLyMgUmVwb3J0IGJ1Z3MgdG8vIHsKLSsJOnByaW50Ci0gICAgICAgICBzL14jIC8vCi0gCXMvXiMgKiQvLwotIAlzKlwkcHJvZ25hbWUqJyRwcm9nbmFtZScqCi1AQCAtNzE0LDcgKzc3NCwxMSBAQCBmdW5jX2hlbHAgKCkKLSAJcy9cJGF1dG9tYWtlX3ZlcnNpb24vJyJgKGF1dG9tYWtlIC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCRTRUQgMXFgIicvCi0gCXMvXCRhdXRvY29uZl92ZXJzaW9uLyciYChhdXRvY29uZiAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwkU0VEIDFxYCInLwotIAlwCi0tICAgICB9JyA8ICIkcHJvZ3BhdGgiCi0rCWQKLSsgICAgIH0KLSsgICAgIC9eIyAuKiBob21lIHBhZ2U6L2IgcHJpbnQKLSsgICAgIC9eIyBHZW5lcmFsIGhlbHAgdXNpbmcvYiBwcmludAotKyAgICAgJyA8ICIkcHJvZ3BhdGgiCi0gICAgIHJldD0kPwotICAgICBpZiB0ZXN0IC16ICIkMSI7IHRoZW4KLSAgICAgICBleGl0ICRyZXQKLUBAIC03MjYsMTIgKzc5MCwzOSBAQCBmdW5jX2hlbHAgKCkKLSAjIGV4aXRfY21kLgotIGZ1bmNfbWlzc2luZ19hcmcgKCkKLSB7Ci0tICAgIGZ1bmNfZXJyb3IgIm1pc3NpbmcgYXJndW1lbnQgZm9yICQxIgotKyAgICAkb3B0X2RlYnVnCi0rCi0rICAgIGZ1bmNfZXJyb3IgIm1pc3NpbmcgYXJndW1lbnQgZm9yICQxLiIKLSAgICAgZXhpdF9jbWQ9ZXhpdAotIH0KLSAKLS1leGl0X2NtZD06Ci0gCi0rIyBmdW5jX3NwbGl0X3Nob3J0X29wdCBzaG9ydG9wdAotKyMgU2V0IGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUgYW5kIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyBzaGVsbAotKyMgdmFyaWFibGVzIGFmdGVyIHNwbGl0dGluZyBTSE9SVE9QVCBhZnRlciB0aGUgMm5kIGNoYXJhY3Rlci4KLStmdW5jX3NwbGl0X3Nob3J0X29wdCAoKQotK3sKLSsgICAgbXlfc2VkX3Nob3J0X29wdD0nMXMvXlwoLi5cKS4qJC9cMS87cScKLSsgICAgbXlfc2VkX3Nob3J0X3Jlc3Q9JzFzL14uLlwoLipcKSQvXDEvO3EnCi0rCi0rICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX3Nob3J0X29wdCJgCi0rICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfc2hvcnRfcmVzdCJgCi0rfSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgotKwotKwotKyMgZnVuY19zcGxpdF9sb25nX29wdCBsb25nb3B0Ci0rIyBTZXQgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lIGFuZCBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZyBzaGVsbAotKyMgdmFyaWFibGVzIGFmdGVyIHNwbGl0dGluZyBMT05HT1BUIGF0IHRoZSBgPScgc2lnbi4KLStmdW5jX3NwbGl0X2xvbmdfb3B0ICgpCi0rewotKyAgICBteV9zZWRfbG9uZ19vcHQ9JzFzL15cKC0tW149XSpcKT0uKi9cMS87cScKLSsgICAgbXlfc2VkX2xvbmdfYXJnPScxcy9eLS1bXj1dKj0vLycKLSsKLSsgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCi0rICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCi0rfSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCi0rCi0rZXhpdF9jbWQ9OgotIAotIAotIAotQEAgLTc0MSwyNiArODMyLDY0IEBAIG1hZ2ljPSIlJSVNQUdJQyB2YXJpYWJsZSUlJSIKLSBtYWdpY19leGU9IiUlJU1BR0lDIEVYRSB2YXJpYWJsZSUlJSIKLSAKLSAjIEdsb2JhbCB2YXJpYWJsZXMuCi0tIyAkbW9kZSBpcyB1bnNldAotIG5vbm9wdD0KLS1leGVjdXRlX2RsZmlsZXM9Ci0gcHJlc2VydmVfYXJncz0KLSBsbzJvPSJzL1xcLmxvXCQvLiR7b2JqZXh0fS8iCi0gbzJsbz0icy9cXC4ke29iamV4dH1cJC8ubG8vIgotIGV4dHJhY3RlZF9hcmNoaXZlcz0KLSBleHRyYWN0ZWRfc2VyaWFsPTAKLSAKLS1vcHRfZHJ5X3J1bj1mYWxzZQotLW9wdF9maW5pc2g9OgotLW9wdF9kdXBsaWNhdGVfZGVwcz1mYWxzZQotLW9wdF9zaWxlbnQ9ZmFsc2UKLS1vcHRfZGVidWc9OgotLQotICMgSWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gYW55IG9mIHRoZSBhY3Rpb25zLCB0aGUgY29tbWFuZCBpbiBpdAotICMgd2lsbCBiZSBleGVjZWQgYXQgdGhlIGVuZC4gIFRoaXMgcHJldmVudHMgaGVyZS1kb2N1bWVudHMgZnJvbSBiZWluZwotICMgbGVmdCBvdmVyIGJ5IHNoZWxscy4KLSBleGVjX2NtZD0KLSAKLSsjIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQotKyMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgotK2Z1bmNfYXBwZW5kICgpCi0rewotKyAgICBldmFsICIkezF9PVwkJHsxfVwkezJ9IgotK30gIyBmdW5jX2FwcGVuZCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KLSsKLSsjIGZ1bmNfYXBwZW5kX3F1b3RlZCB2YXIgdmFsdWUKLSsjIFF1b3RlIFZBTFVFIGFuZCBhcHBlbmQgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIsIHNlcGFyYXRlZAotKyMgYnkgYSBzcGFjZS4KLStmdW5jX2FwcGVuZF9xdW90ZWQgKCkKLSt7Ci0rICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iCi0rICAgIGV2YWwgIiR7MX09XCQkezF9XFwgXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKLSt9ICMgZnVuY19hcHBlbmRfcXVvdGVkIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgotKwotKwotKyMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KLStmdW5jX2FyaXRoICgpCi0rewotKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJHtAfSJgCi0rfSAjIGZ1bmNfYXJpdGggbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCi0rCi0rCi0rIyBmdW5jX2xlbiBzdHJpbmcKLSsjIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCi0rZnVuY19sZW4gKCkKLSt7Ci0rICAgIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJHsxfSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAotK30gIyBmdW5jX2xlbiBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KLSsKLSsKLSsjIGZ1bmNfbG8ybyBvYmplY3QKLStmdW5jX2xvMm8gKCkKLSt7Ci0rICAgIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKLSt9ICMgZnVuY19sbzJvIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgotKwotKwotKyMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCi0rZnVuY194Zm9ybSAoKQotK3sKLSsgICAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCi0rfSAjIGZ1bmNfeGZvcm0gbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCi0rCi0rCi0gIyBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gYXJnLi4uCi0gIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dlZCBieQotICMgYSBjb25maWd1cmF0aW9uIGZhaWx1cmUgaGludCwgYW5kIGV4aXQuCi1AQCAtODUwLDEzMCArOTc5LDIwNCBAQCBmdW5jX2VuYWJsZV90YWcgKCkKLSAgIGVzYWMKLSB9Ci0gCi0tIyBQYXJzZSBvcHRpb25zIG9uY2UsIHRob3JvdWdobHkuICBUaGlzIGNvbWVzIGFzIHNvb24gYXMgcG9zc2libGUgaW4KLS0jIHRoZSBzY3JpcHQgdG8gbWFrZSB0aGluZ3MgbGlrZSBgbGlidG9vbCAtLXZlcnNpb24nIGhhcHBlbiBxdWlja2x5LgotKyMgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCi0rIyBFbnN1cmUgdGhhdCB3ZSBhcmUgdXNpbmcgbTQgbWFjcm9zLCBhbmQgbGlidG9vbCBzY3JpcHQgZnJvbSB0aGUgc2FtZQotKyMgcmVsZWFzZSBvZiBsaWJ0b29sLgotK2Z1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaCAoKQotIHsKLSsgIGlmIHRlc3QgIiRwYWNrYWdlX3JldmlzaW9uIiAhPSAiJG1hY3JvX3JldmlzaW9uIjsgdGhlbgotKyAgICBpZiB0ZXN0ICIkVkVSU0lPTiIgIT0gIiRtYWNyb192ZXJzaW9uIjsgdGhlbgotKyAgICAgIGlmIHRlc3QgLXogIiRtYWNyb192ZXJzaW9uIjsgdGhlbgotKyAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKLSskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCi0rJHByb2duYW1lOiBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIGFuIG9sZGVyIHJlbGVhc2UuCi0rJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSAkUEFDS0FHRSAkVkVSU0lPTgotKyRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KLStfTFRfRU9GCi0rICAgICAgZWxzZQotKyAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKLSskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCi0rJHByb2duYW1lOiBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tICRQQUNLQUdFICRtYWNyb192ZXJzaW9uLgotKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KLSskcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCi0rX0xUX0VPRgotKyAgICAgIGZpCi0rICAgIGVsc2UKLSsgICAgICBjYXQgPiYyIDw8X0xUX0VPRgotKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uLAotKyRwcm9nbmFtZTogYnV0IHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIHJldmlzaW9uICRtYWNyb19yZXZpc2lvbi4KLSskcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uCi0rJHByb2duYW1lOiBvZiAkUEFDS0FHRSAkVkVSU0lPTiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgotK19MVF9FT0YKLSsgICAgZmkKLSAKLS0gICMgU2hvcnRoYW5kIGZvciAtLW1vZGU9Zm9vLCBvbmx5IHZhbGlkIGFzIHRoZSBmaXJzdCBhcmd1bWVudAotLSAgY2FzZSAkMSBpbgotLSAgY2xlYW58Y2xlYXxjbGV8Y2wpCi0tICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNsZWFuICR7MSsiJEAifTsgc2hpZnQKLS0gICAgOzsKLS0gIGNvbXBpbGV8Y29tcGlsfGNvbXBpfGNvbXB8Y29tfGNvfGMpCi0tICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNvbXBpbGUgJHsxKyIkQCJ9OyBzaGlmdAotLSAgICA7OwotLSAgZXhlY3V0ZXxleGVjdXR8ZXhlY3V8ZXhlY3xleGV8ZXh8ZSkKLS0gICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZXhlY3V0ZSAkezErIiRAIn07IHNoaWZ0Ci0tICAgIDs7Ci0tICBmaW5pc2h8ZmluaXN8ZmluaXxmaW58Zml8ZikKLS0gICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZmluaXNoICR7MSsiJEAifTsgc2hpZnQKLS0gICAgOzsKLS0gIGluc3RhbGx8aW5zdGFsfGluc3RhfGluc3R8aW5zfGlufGkpCi0tICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAotLSAgICA7OwotLSAgbGlua3xsaW58bGl8bCkKLS0gICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgbGluayAkezErIiRAIn07IHNoaWZ0Ci0tICAgIDs7Ci0tICB1bmluc3RhbGx8dW5pbnN0YWx8dW5pbnN0YXx1bmluc3R8dW5pbnN8dW5pbnx1bml8dW58dSkKLS0gICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgdW5pbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKLS0gICAgOzsKLS0gIGVzYWMKLSsgICAgZXhpdCAkRVhJVF9NSVNNQVRDSAotKyAgZmkKLSt9Ci0rCi0rCi0rIyBTaG9ydGhhbmQgZm9yIC0tbW9kZT1mb28sIG9ubHkgdmFsaWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50Ci0rY2FzZSAkMSBpbgotK2NsZWFufGNsZWF8Y2xlfGNsKQotKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY2xlYW4gJHsxKyIkQCJ9OyBzaGlmdAotKyAgOzsKLStjb21waWxlfGNvbXBpbHxjb21waXxjb21wfGNvbXxjb3xjKQotKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY29tcGlsZSAkezErIiRAIn07IHNoaWZ0Ci0rICA7OwotK2V4ZWN1dGV8ZXhlY3V0fGV4ZWN1fGV4ZWN8ZXhlfGV4fGUpCi0rICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBleGVjdXRlICR7MSsiJEAifTsgc2hpZnQKLSsgIDs7Ci0rZmluaXNofGZpbmlzfGZpbml8ZmlufGZpfGYpCi0rICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAotKyAgOzsKLStpbnN0YWxsfGluc3RhbHxpbnN0YXxpbnN0fGluc3xpbnxpKQotKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0Ci0rICA7OwotK2xpbmt8bGlufGxpfGwpCi0rICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBsaW5rICR7MSsiJEAifTsgc2hpZnQKLSsgIDs7Ci0rdW5pbnN0YWxsfHVuaW5zdGFsfHVuaW5zdGF8dW5pbnN0fHVuaW5zfHVuaW58dW5pfHVufHUpCi0rICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSB1bmluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAotKyAgOzsKLStlc2FjCi0gCi0tICAjIFBhcnNlIG5vbi1tb2RlIHNwZWNpZmljIGFyZ3VtZW50czoKLS0gIHdoaWxlIHRlc3QgIiQjIiAtZ3QgMDsgZG8KLSsKLSsKLSsjIE9wdGlvbiBkZWZhdWx0czoKLStvcHRfZGVidWc9OgotK29wdF9kcnlfcnVuPWZhbHNlCi0rb3B0X2NvbmZpZz1mYWxzZQotK29wdF9wcmVzZXJ2ZV9kdXBfZGVwcz1mYWxzZQotK29wdF9mZWF0dXJlcz1mYWxzZQotK29wdF9maW5pc2g9ZmFsc2UKLStvcHRfaGVscD1mYWxzZQotK29wdF9oZWxwX2FsbD1mYWxzZQotK29wdF9zaWxlbnQ9OgotK29wdF92ZXJib3NlPToKLStvcHRfc2lsZW50PWZhbHNlCi0rb3B0X3ZlcmJvc2U9ZmFsc2UKLSsKLSsKLSsjIFBhcnNlIG9wdGlvbnMgb25jZSwgdGhvcm91Z2hseS4gIFRoaXMgY29tZXMgYXMgc29vbiBhcyBwb3NzaWJsZSBpbiB0aGUKLSsjIHNjcmlwdCB0byBtYWtlIHRoaW5ncyBsaWtlIGAtLXZlcnNpb24nIGhhcHBlbiBhcyBxdWlja2x5IGFzIHdlIGNhbi4KLSt7Ci0rICAjIHRoaXMganVzdCBlYXNlcyBleGl0IGhhbmRsaW5nCi0rICB3aGlsZSB0ZXN0ICQjIC1ndCAwOyBkbwotICAgICBvcHQ9IiQxIgotICAgICBzaGlmdAotLQotICAgICBjYXNlICRvcHQgaW4KLS0gICAgICAtLWNvbmZpZykJCWZ1bmNfY29uZmlnCQkJCQk7OwotLQotLSAgICAgIC0tZGVidWcpCQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0IgotKyAgICAgIC0tZGVidWd8LXgpCW9wdF9kZWJ1Zz0nc2V0IC14JwotIAkJCWZ1bmNfZWNobyAiZW5hYmxpbmcgc2hlbGwgdHJhY2UgbW9kZSIKLS0JCQlvcHRfZGVidWc9J3NldCAteCcKLSAJCQkkb3B0X2RlYnVnCi0gCQkJOzsKLS0KLS0gICAgICAtZGxvcGVuKQkJdGVzdCAiJCMiIC1lcSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgIiRvcHQiICYmIGJyZWFrCi0tCQkJZXhlY3V0ZV9kbGZpbGVzPSIkZXhlY3V0ZV9kbGZpbGVzICQxIgotLQkJCXNoaWZ0Ci0rICAgICAgLS1kcnktcnVufC0tZHJ5cnVufC1uKQotKwkJCW9wdF9kcnlfcnVuPToKLSAJCQk7OwotLQotLSAgICAgIC0tZHJ5LXJ1biB8IC1uKQlvcHRfZHJ5X3J1bj06CQkJCQk7OwotLSAgICAgIC0tZmVhdHVyZXMpICAgICAgIGZ1bmNfZmVhdHVyZXMJCQkJCTs7Ci0tICAgICAgLS1maW5pc2gpCQltb2RlPSJmaW5pc2giCQkJCQk7OwotLSAgICAgIC0tbm8tZmluaXNoKQlvcHRfZmluaXNoPWZhbHNlCQkJCTs7Ci0tCi0tICAgICAgLS1tb2RlKQkJdGVzdCAiJCMiIC1lcSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgIiRvcHQiICYmIGJyZWFrCi0tCQkJY2FzZSAkMSBpbgotLQkJCSAgIyBWYWxpZCBtb2RlIGFyZ3VtZW50czoKLS0JCQkgIGNsZWFuKQk7OwotLQkJCSAgY29tcGlsZSkJOzsKLS0JCQkgIGV4ZWN1dGUpCTs7Ci0tCQkJICBmaW5pc2gpCTs7Ci0tCQkJICBpbnN0YWxsKQk7OwotLQkJCSAgbGluaykJCTs7Ci0tCQkJICByZWxpbmspCTs7Ci0tCQkJICB1bmluc3RhbGwpCTs7Ci0tCi0tCQkJICAjIENhdGNoIGFueXRoaW5nIGVsc2UgYXMgYW4gZXJyb3IKLS0JCQkgICopIGZ1bmNfZXJyb3IgImludmFsaWQgYXJndW1lbnQgZm9yICRvcHQiCi0tCQkJICAgICBleGl0X2NtZD1leGl0Ci0tCQkJICAgICBicmVhawotLQkJCSAgICAgOzsKLS0JCSAgICAgICAgZXNhYwotLQotLQkJCW1vZGU9IiQxIgotKyAgICAgIC0tY29uZmlnKQotKwkJCW9wdF9jb25maWc9OgotK2Z1bmNfY29uZmlnCi0rCQkJOzsKLSsgICAgICAtLWRsb3BlbnwtZGxvcGVuKQotKwkJCW9wdGFyZz0iJDEiCi0rCQkJb3B0X2Rsb3Blbj0iJHtvcHRfZGxvcGVuKyRvcHRfZGxvcGVuCi0rfSRvcHRhcmciCi0gCQkJc2hpZnQKLSAJCQk7OwotLQotICAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMpCi0tCQkJb3B0X2R1cGxpY2F0ZV9kZXBzPToJCQkJOzsKLS0KLS0gICAgICAtLXF1aWV0fC0tc2lsZW50KQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0IgotLQkJCW9wdF9zaWxlbnQ9OgotLQkJCW9wdF92ZXJib3NlPWZhbHNlCi0rCQkJb3B0X3ByZXNlcnZlX2R1cF9kZXBzPToKLSAJCQk7OwotLQotLSAgICAgIC0tbm8tcXVpZXR8LS1uby1zaWxlbnQpCi0tCQkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCIKLS0JCQlvcHRfc2lsZW50PWZhbHNlCi0rICAgICAgLS1mZWF0dXJlcykKLSsJCQlvcHRfZmVhdHVyZXM9OgotK2Z1bmNfZmVhdHVyZXMKLSAJCQk7OwotLQotLSAgICAgIC0tdmVyYm9zZXwgLXYpCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQiCi0rICAgICAgLS1maW5pc2gpCi0rCQkJb3B0X2ZpbmlzaD06Ci0rc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAotKwkJCTs7Ci0rICAgICAgLS1oZWxwKQotKwkJCW9wdF9oZWxwPToKLSsJCQk7OwotKyAgICAgIC0taGVscC1hbGwpCi0rCQkJb3B0X2hlbHBfYWxsPToKLStvcHRfaGVscD0nOiBoZWxwLWFsbCcKLSsJCQk7OwotKyAgICAgIC0tbW9kZSkKLSsJCQl0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRvcHQgJiYgYnJlYWsKLSsJCQlvcHRhcmc9IiQxIgotKwkJCW9wdF9tb2RlPSIkb3B0YXJnIgotK2Nhc2UgJG9wdGFyZyBpbgotKyAgIyBWYWxpZCBtb2RlIGFyZ3VtZW50czoKLSsgIGNsZWFufGNvbXBpbGV8ZXhlY3V0ZXxmaW5pc2h8aW5zdGFsbHxsaW5rfHJlbGlua3x1bmluc3RhbGwpIDs7Ci0rCi0rICAjIENhdGNoIGFueXRoaW5nIGVsc2UgYXMgYW4gZXJyb3IKLSsgICopIGZ1bmNfZXJyb3IgImludmFsaWQgYXJndW1lbnQgZm9yICRvcHQiCi0rICAgICBleGl0X2NtZD1leGl0Ci0rICAgICBicmVhawotKyAgICAgOzsKLStlc2FjCi0rCQkJc2hpZnQKLSsJCQk7OwotKyAgICAgIC0tbm8tc2lsZW50fC0tbm8tcXVpZXQpCi0gCQkJb3B0X3NpbGVudD1mYWxzZQotLQkJCW9wdF92ZXJib3NlPToKLStmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKLSAJCQk7OwotLQotLSAgICAgIC0tbm8tdmVyYm9zZSkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCIKLSsgICAgICAtLW5vLXZlcmJvc2UpCi0gCQkJb3B0X3ZlcmJvc2U9ZmFsc2UKLStmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKLSAJCQk7OwotLQotLSAgICAgIC0tdGFnKQkJdGVzdCAiJCMiIC1lcSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgIiRvcHQiICYmIGJyZWFrCi0tCQkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCAkMSIKLS0JCQlmdW5jX2VuYWJsZV90YWcgIiQxIgkjIHRhZ25hbWUgaXMgc2V0IGhlcmUKLSsgICAgICAtLXNpbGVudHwtLXF1aWV0KQotKwkJCW9wdF9zaWxlbnQ9OgotK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgotKyAgICAgICAgb3B0X3ZlcmJvc2U9ZmFsc2UKLSsJCQk7OwotKyAgICAgIC0tdmVyYm9zZXwtdikKLSsJCQlvcHRfdmVyYm9zZT06Ci0rZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCi0rb3B0X3NpbGVudD1mYWxzZQotKwkJCTs7Ci0rICAgICAgLS10YWcpCi0rCQkJdGVzdCAkIyA9IDAgJiYgZnVuY19taXNzaW5nX2FyZyAkb3B0ICYmIGJyZWFrCi0rCQkJb3B0YXJnPSIkMSIKLSsJCQlvcHRfdGFnPSIkb3B0YXJnIgotK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0ICRvcHRhcmciCi0rZnVuY19lbmFibGVfdGFnICIkb3B0YXJnIgotIAkJCXNoaWZ0Ci0gCQkJOzsKLSAKLSsgICAgICAtXD98LWgpCQlmdW5jX3VzYWdlCQkJCTs7Ci0rICAgICAgLS1oZWxwKQkJZnVuY19oZWxwCQkJCTs7Ci0rICAgICAgLS12ZXJzaW9uKQlmdW5jX3ZlcnNpb24JCQkJOzsKLSsKLSAgICAgICAjIFNlcGFyYXRlIG9wdGFyZ3MgdG8gbG9uZyBvcHRpb25zOgotLSAgICAgIC1kbG9wZW49KnwtLW1vZGU9KnwtLXRhZz0qKQotLQkJCWZ1bmNfb3B0X3NwbGl0ICIkb3B0IgotLQkJCXNldCBkdW1teSAiJGZ1bmNfb3B0X3NwbGl0X29wdCIgIiRmdW5jX29wdF9zcGxpdF9hcmciICR7MSsiJEAifQotKyAgICAgIC0tKj0qKQotKwkJCWZ1bmNfc3BsaXRfbG9uZ19vcHQgIiRvcHQiCi0rCQkJc2V0IGR1bW15ICIkZnVuY19zcGxpdF9sb25nX29wdF9uYW1lIiAiJGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnIiAkezErIiRAIn0KLSAJCQlzaGlmdAotIAkJCTs7Ci0gCi0tICAgICAgLVw/fC1oKQkJZnVuY191c2FnZQkJCQkJOzsKLS0gICAgICAtLWhlbHApCQlvcHRfaGVscD06CQkJCQk7OwotLSAgICAgIC0taGVscC1hbGwpCW9wdF9oZWxwPSc6IGhlbHAtYWxsJwkJCQk7OwotLSAgICAgIC0tdmVyc2lvbikJZnVuY192ZXJzaW9uCQkJCQk7OwotLQotLSAgICAgIC0qKQkJZnVuY19mYXRhbF9oZWxwICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgJG9wdCciCTs7Ci0tCi0tICAgICAgKikJCW5vbm9wdD0iJG9wdCIKLS0JCQlicmVhawotKyAgICAgICMgU2VwYXJhdGUgbm9uLWFyZ3VtZW50IHNob3J0IG9wdGlvbnM6Ci0rICAgICAgLVw/KnwtaCp8LW4qfC12KikKLSsJCQlmdW5jX3NwbGl0X3Nob3J0X29wdCAiJG9wdCIKLSsJCQlzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiAiLSRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmciICR7MSsiJEAifQotKwkJCXNoaWZ0Ci0gCQkJOzsKLSsKLSsgICAgICAtLSkJCWJyZWFrCQkJCQk7OwotKyAgICAgIC0qKQkJZnVuY19mYXRhbF9oZWxwICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgJG9wdCciIDs7Ci0rICAgICAgKikJCXNldCBkdW1teSAiJG9wdCIgJHsxKyIkQCJ9OwlzaGlmdDsgYnJlYWsgIDs7Ci0gICAgIGVzYWMKLSAgIGRvbmUKLSAKLSsgICMgVmFsaWRhdGUgb3B0aW9uczoKLSsKLSsgICMgc2F2ZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50Ci0rICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KLSsgICAgbm9ub3B0PSIkb3B0IgotKyAgICBzaGlmdAotKyAgZmkKLSsKLSsgICMgcHJlc2VydmUgLS1kZWJ1ZwotKyAgdGVzdCAiJG9wdF9kZWJ1ZyIgPSA6IHx8IGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAtLWRlYnVnIgotIAotICAgY2FzZSAkaG9zdCBpbgotICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqcHczMiogfCAqY2VnY2MqIHwgKnNvbGFyaXMyKiApCi1AQCAtOTgxLDgyICsxMTg0LDQ0IEBAIGZ1bmNfZW5hYmxlX3RhZyAoKQotICAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9OgotICAgICAgIDs7Ci0gICAgICopCi0tICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz0kb3B0X2R1cGxpY2F0ZV9kZXBzCi0rICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz0kb3B0X3ByZXNlcnZlX2R1cF9kZXBzCi0gICAgICAgOzsKLSAgIGVzYWMKLSAKLS0gICMgSGF2aW5nIHdhcm5lZCBhYm91dCBhbGwgbWlzLXNwZWNpZmllZCBvcHRpb25zLCBiYWlsIG91dCBpZgotLSAgIyBhbnl0aGluZyB3YXMgd3JvbmcuCi0tICAkZXhpdF9jbWQgJEVYSVRfRkFJTFVSRQotLX0KLSsgICRvcHRfaGVscCB8fCB7Ci0rICAgICMgU2FuaXR5IGNoZWNrcyBmaXJzdDoKLSsgICAgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCi0gCi0tIyBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKLS0jIEVuc3VyZSB0aGF0IHdlIGFyZSB1c2luZyBtNCBtYWNyb3MsIGFuZCBsaWJ0b29sIHNjcmlwdCBmcm9tIHRoZSBzYW1lCi0tIyByZWxlYXNlIG9mIGxpYnRvb2wuCi0tZnVuY19jaGVja192ZXJzaW9uX21hdGNoICgpCi0tewotLSAgaWYgdGVzdCAiJHBhY2thZ2VfcmV2aXNpb24iICE9ICIkbWFjcm9fcmV2aXNpb24iOyB0aGVuCi0tICAgIGlmIHRlc3QgIiRWRVJTSU9OIiAhPSAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCi0tICAgICAgaWYgdGVzdCAteiAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCi0tICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgotLSRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKLS0kcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gYW4gb2xkZXIgcmVsZWFzZS4KLS0kcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCi0tJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgotLV9MVF9FT0YKLS0gICAgICBlbHNlCi0tICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgotLSRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKLS0kcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gJFBBQ0tBR0UgJG1hY3JvX3ZlcnNpb24uCi0tJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSAkUEFDS0FHRSAkVkVSU0lPTgotLSRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KLS1fTFRfRU9GCi0tICAgICAgZmkKLS0gICAgZWxzZQotLSAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCi0tJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24sCi0tJHByb2duYW1lOiBidXQgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gcmV2aXNpb24gJG1hY3JvX3JldmlzaW9uLgotLSRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24KLS0kcHJvZ25hbWU6IG9mICRQQUNLQUdFICRWRVJTSU9OIGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCi0tX0xUX0VPRgotKyAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiAhPSB5ZXM7IHRoZW4KLSsgICAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gIm5vdCBjb25maWd1cmVkIHRvIGJ1aWxkIGFueSBraW5kIG9mIGxpYnJhcnkiCi0gICAgIGZpCi0gCi0tICAgIGV4aXQgJEVYSVRfTUlTTUFUQ0gKLS0gIGZpCi0tfQotLQotKyAgICAjIERhcndpbiBzdWNrcwotKyAgICBldmFsIHN0ZF9zaHJleHQ9XCIkc2hyZXh0X2NtZHNcIgotIAotLSMjIC0tLS0tLS0tLS0tICMjCi0tIyMgICAgTWFpbi4gICAgIyMKLS0jIyAtLS0tLS0tLS0tLSAjIwotLQotLSRvcHRfaGVscCB8fCB7Ci0tICAjIFNhbml0eSBjaGVja3MgZmlyc3Q6Ci0tICBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKLS0KLS0gIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiICE9IHllczsgdGhlbgotLSAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gIm5vdCBjb25maWd1cmVkIHRvIGJ1aWxkIGFueSBraW5kIG9mIGxpYnJhcnkiCi0tICBmaQotKyAgICAjIE9ubHkgZXhlY3V0ZSBtb2RlIGlzIGFsbG93ZWQgdG8gaGF2ZSAtZGxvcGVuIGZsYWdzLgotKyAgICBpZiB0ZXN0IC1uICIkb3B0X2Rsb3BlbiIgJiYgdGVzdCAiJG9wdF9tb2RlIiAhPSBleGVjdXRlOyB0aGVuCi0rICAgICAgZnVuY19lcnJvciAidW5yZWNvZ25pemVkIG9wdGlvbiBcYC1kbG9wZW4nIgotKyAgICAgICRFQ0hPICIkaGVscCIgMT4mMgotKyAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotKyAgICBmaQotIAotLSAgdGVzdCAteiAiJG1vZGUiICYmIGZ1bmNfZmF0YWxfZXJyb3IgImVycm9yOiB5b3UgbXVzdCBzcGVjaWZ5IGEgTU9ERS4iCi0rICAgICMgQ2hhbmdlIHRoZSBoZWxwIG1lc3NhZ2UgdG8gYSBtb2RlLXNwZWNpZmljIG9uZS4KLSsgICAgZ2VuZXJpY19oZWxwPSIkaGVscCIKLSsgICAgaGVscD0iVHJ5IFxgJHByb2duYW1lIC0taGVscCAtLW1vZGU9JG9wdF9tb2RlJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCi0rICB9Ci0gCi0gCi0tICAjIERhcndpbiBzdWNrcwotLSAgZXZhbCAic3RkX3NocmV4dD1cIiRzaHJleHRfY21kc1wiIgotKyAgIyBCYWlsIGlmIHRoZSBvcHRpb25zIHdlcmUgc2NyZXdlZAotKyAgJGV4aXRfY21kICRFWElUX0ZBSUxVUkUKLSt9Ci0gCi0gCi0tICAjIE9ubHkgZXhlY3V0ZSBtb2RlIGlzIGFsbG93ZWQgdG8gaGF2ZSAtZGxvcGVuIGZsYWdzLgotLSAgaWYgdGVzdCAtbiAiJGV4ZWN1dGVfZGxmaWxlcyIgJiYgdGVzdCAiJG1vZGUiICE9IGV4ZWN1dGU7IHRoZW4KLS0gICAgZnVuY19lcnJvciAidW5yZWNvZ25pemVkIG9wdGlvbiBcYC1kbG9wZW4nIgotLSAgICAkRUNITyAiJGhlbHAiIDE+JjIKLS0gICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0tICBmaQotIAotLSAgIyBDaGFuZ2UgdGhlIGhlbHAgbWVzc2FnZSB0byBhIG1vZGUtc3BlY2lmaWMgb25lLgotLSAgZ2VuZXJpY19oZWxwPSIkaGVscCIKLS0gIGhlbHA9IlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPSRtb2RlJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCi0tfQotIAotKyMjIC0tLS0tLS0tLS0tICMjCi0rIyMgICAgTWFpbi4gICAgIyMKLSsjIyAtLS0tLS0tLS0tLSAjIwotIAotICMgZnVuY19sYWxpYl9wIGZpbGUKLSAjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIGAubGEnIGxpYnJhcnkgb3IgYC5sbycgb2JqZWN0IGZpbGUuCi1AQCAtMTEyMSwxMiArMTI4Niw5IEBAIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAoKQotICMgdGVtcG9yYXJ5IGx0d3JhcHBlcl9zY3JpcHQuCi0gZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAoKQotIHsKLS0gICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ9IiIKLS0gICAgaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkMSI7IHRoZW4KLS0JZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJDEiICIiICIuIgotLQlmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLS0JZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0LyRvYmpkaXIvJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9X2x0c2h3cmFwcGVyIgotLSAgICBmaQotKyAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkMSIgIiIgIi4iCi0rICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotKyAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQvJG9iamRpci8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH1fbHRzaHdyYXBwZXIiCi0gfQotIAotICMgZnVuY19sdHdyYXBwZXJfcCBmaWxlCi1AQCAtMTE0OSw3ICsxMzExLDcgQEAgZnVuY19leGVjdXRlX2NtZHMgKCkKLSAgICAgc2F2ZV9pZnM9JElGUzsgSUZTPSd+JwotICAgICBmb3IgY21kIGluICQxOyBkbwotICAgICAgIElGUz0kc2F2ZV9pZnMKLS0gICAgICBldmFsICJjbWQ9XCIkY21kXCIiCi0rICAgICAgZXZhbCBjbWQ9XCIkY21kXCIKLSAgICAgICBmdW5jX3Nob3dfZXZhbCAiJGNtZCIgIiR7Mi06fSIKLSAgICAgZG9uZQotICAgICBJRlM9JHNhdmVfaWZzCi1AQCAtMTE3Miw2ICsxMzM0LDM3IEBAIGZ1bmNfc291cmNlICgpCi0gfQotIAotIAotKyMgZnVuY19yZXNvbHZlX3N5c3Jvb3QgUEFUSAotKyMgUmVwbGFjZSBhIGxlYWRpbmcgPSBpbiBQQVRIIHdpdGggYSBzeXNyb290LiAgU3RvcmUgdGhlIHJlc3VsdCBpbnRvCi0rIyBmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKLStmdW5jX3Jlc29sdmVfc3lzcm9vdCAoKQotK3sKLSsgIGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdD0kMQotKyAgY2FzZSAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IGluCi0rICA9KikKLSsgICAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgotKyAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQ9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0rICAgIDs7Ci0rICBlc2FjCi0rfQotKwotKyMgZnVuY19yZXBsYWNlX3N5c3Jvb3QgUEFUSAotKyMgSWYgUEFUSCBiZWdpbnMgd2l0aCB0aGUgc3lzcm9vdCwgcmVwbGFjZSBpdCB3aXRoID0gYW5kCi0rIyBzdG9yZSB0aGUgcmVzdWx0IGludG8gZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0LgotK2Z1bmNfcmVwbGFjZV9zeXNyb290ICgpCi0rewotKyAgY2FzZSAiJGx0X3N5c3Jvb3Q6JDEiIGluCi0rICA/KjoiJGx0X3N5c3Jvb3QiKikKLSsgICAgZnVuY19zdHJpcG5hbWUgIiRsdF9zeXNyb290IiAnJyAiJDEiCi0rICAgIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdD0iPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCi0rICAgIDs7Ci0rICAqKQotKyAgICAjIEluY2x1ZGluZyBubyBzeXNyb290LgotKyAgICBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQ9JDEKLSsgICAgOzsKLSsgIGVzYWMKLSt9Ci0rCi0gIyBmdW5jX2luZmVyX3RhZyBhcmcKLSAjIEluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIHRvIHVzZSBpZiBhbnkgYXJlIGF2YWlsYWJsZSBhbmQKLSAjIGlmIG9uZSB3YXNuJ3QgY2hvc2VuIHZpYSB0aGUgIi0tdGFnIiBjb21tYW5kIGxpbmUgb3B0aW9uLgotQEAgLTExODQsOCArMTM3Nyw3IEBAIGZ1bmNfaW5mZXJfdGFnICgpCi0gICAgIGlmIHRlc3QgLW4gIiRhdmFpbGFibGVfdGFncyIgJiYgdGVzdCAteiAiJHRhZ25hbWUiOyB0aGVuCi0gICAgICAgQ0NfcXVvdGVkPQotICAgICAgIGZvciBhcmcgaW4gJENDOyBkbwotLSAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKLS0JQ0NfcXVvdGVkPSIkQ0NfcXVvdGVkICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKLSsJZnVuY19hcHBlbmRfcXVvdGVkIENDX3F1b3RlZCAiJGFyZyIKLSAgICAgICBkb25lCi0gICAgICAgQ0NfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDYAotICAgICAgIENDX3F1b3RlZF9leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NfcXVvdGVkYAotQEAgLTEyMDQsOCArMTM5Niw3IEBAIGZ1bmNfaW5mZXJfdGFnICgpCi0gCSAgICBDQ19xdW90ZWQ9Ci0gCSAgICBmb3IgYXJnIGluICRDQzsgZG8KLSAJICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIG90aGVyIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLgotLQkgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgotLQkgICAgICBDQ19xdW90ZWQ9IiRDQ19xdW90ZWQgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotKwkgICAgICBmdW5jX2FwcGVuZF9xdW90ZWQgQ0NfcXVvdGVkICIkYXJnIgotIAkgICAgZG9uZQotIAkgICAgQ0NfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDYAotIAkgICAgQ0NfcXVvdGVkX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ19xdW90ZWRgCi1AQCAtMTI3NCw2ICsxNDY1LDQ4NiBAQCBFT0YKLSAgICAgfQotIH0KLSAKLSsKLSsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotKyMgRklMRSBOQU1FIEFORCBQQVRIIENPTlZFUlNJT04gSEVMUEVSIEZVTkNUSU9OUyAjCi0rIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSsKLSsjIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgQVJHCi0rIyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgd2hlbiAkYnVpbGQgaXMgKm5peCwKLSsjIGFuZCAkaG9zdCBpcyBtaW5ndywgY3lnd2luLCBvciBzb21lIG90aGVyIHczMiBlbnZpcm9ubWVudC4gUmVsaWVzIG9uIGEKLSsjIGNvcnJlY3RseSBjb25maWd1cmVkIHdpbmUgZW52aXJvbm1lbnQgYXZhaWxhYmxlLCB3aXRoIHRoZSB3aW5lcGF0aCBwcm9ncmFtCi0rIyBpbiAkYnVpbGQncyAkUEFUSC4KLSsjCi0rIyBBUkcgaXMgdGhlICRidWlsZCBmaWxlIG5hbWUgdG8gYmUgY29udmVydGVkIHRvIHczMiBmb3JtYXQuCi0rIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluICRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCwgYW5kIHdpbGwKLSsjIGJlIGVtcHR5IG9uIGVycm9yIChvciB3aGVuIEFSRyBpcyBlbXB0eSkKLStmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICgpCi0rewotKyAgJG9wdF9kZWJ1ZwotKyAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9IiQxIgotKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCi0rICAgICMgVW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lcyBub3QgZXhpdCB3aXRoIGEgbm9uLXplcm8gZXJyb3IgY29kZSwgc28gd2UKLSsgICAgIyBhcmUgZm9yY2VkIHRvIGNoZWNrIHRoZSBjb250ZW50cyBvZiBzdGRvdXQuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUKLSsgICAgIyBjb21tYW5kIGlzIG5vdCBmb3VuZCwgdGhlIHNoZWxsIHdpbGwgc2V0IGFuIGV4aXQgY29kZSBvZiAxMjcgYW5kIHByaW50Ci0rICAgICMgKmFuIGVycm9yIG1lc3NhZ2UqIHRvIHN0ZG91dC4gU28gd2UgbXVzdCBjaGVjayBmb3IgYm90aCBlcnJvciBjb2RlIG9mCi0rICAgICMgemVybyBBTkQgbm9uLWVtcHR5IHN0ZG91dCwgd2hpY2ggZXhwbGFpbnMgdGhlIG9kZCBjb25zdHJ1Y3Rpb246Ci0rICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wPWB3aW5lcGF0aCAtdyAiJDEiIDI+L2Rldi9udWxsYAotKyAgICBpZiB0ZXN0ICIkPyIgLWVxIDAgJiYgdGVzdCAtbiAiJHtmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcH0iOyB0aGVuCi0rICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9YCRFQ0hPICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXAiIHwKLSsgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKLSsgICAgZWxzZQotKyAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0PQotKyAgICBmaQotKyAgZmkKLSt9Ci0rIyBlbmQ6IGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIKLSsKLSsKLSsjIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgQVJHCi0rIyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBwYXRoIGNvbnZlcnNpb24gZnVuY3Rpb25zIHdoZW4gJGJ1aWxkIGlzICpuaXgsIGFuZAotKyMgJGhvc3QgaXMgbWluZ3csIGN5Z3dpbiwgb3Igc29tZSBvdGhlciB3MzIgZW52aXJvbm1lbnQuIFJlbGllcyBvbiBhIGNvcnJlY3RseQotKyMgY29uZmlndXJlZCB3aW5lIGVudmlyb25tZW50IGF2YWlsYWJsZSwgd2l0aCB0aGUgd2luZXBhdGggcHJvZ3JhbSBpbiAkYnVpbGQncwotKyMgJFBBVEguIEFzc3VtZXMgQVJHIGhhcyBubyBsZWFkaW5nIG9yIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMuCi0rIwotKyMgQVJHIGlzIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIGZvcm1hdCB0byB3aW4zMi4KLSsjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0LgotKyMgVW5jb252ZXJ0aWJsZSBmaWxlIChkaXJlY3RvcnkpIG5hbWVzIGluIEFSRyBhcmUgc2tpcHBlZDsgaWYgbm8gZGlyZWN0b3J5IG5hbWVzCi0rIyBhcmUgY29udmVydGlibGUsIHRoZW4gdGhlIHJlc3VsdCBtYXkgYmUgZW1wdHkuCi0rZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAoKQotK3sKLSsgICRvcHRfZGVidWcKLSsgICMgdW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lc24ndCBjb252ZXJ0IHBhdGhzLCBvbmx5IGZpbGUgbmFtZXMKLSsgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0PSIiCi0rICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLSsgICAgb2xkSUZTPSRJRlMKLSsgICAgSUZTPToKLSsgICAgZm9yIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfZiBpbiAkMTsgZG8KLSsgICAgICBJRlM9JG9sZElGUwotKyAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX2YiCi0rICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IiA7IHRoZW4KLSsgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCI7IHRoZW4KLSsgICAgICAgICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKLSsgICAgICAgIGVsc2UKLSsgICAgICAgICAgZnVuY19hcHBlbmQgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQgIjskZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCi0rICAgICAgICBmaQotKyAgICAgIGZpCi0rICAgIGRvbmUKLSsgICAgSUZTPSRvbGRJRlMKLSsgIGZpCi0rfQotKyMgZW5kOiBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyCi0rCi0rCi0rIyBmdW5jX2N5Z3BhdGggQVJHUy4uLgotKyMgV3JhcHBlciBhcm91bmQgY2FsbGluZyB0aGUgY3lncGF0aCBwcm9ncmFtIHZpYSBMVF9DWUdQQVRILiBUaGlzIGlzIHVzZWQgd2hlbgotKyMgd2hlbiAoMSkgJGJ1aWxkIGlzICpuaXggYW5kIEN5Z3dpbiBpcyBob3N0ZWQgdmlhIGEgd2luZSBlbnZpcm9ubWVudDsgb3IgKDIpCi0rIyAkYnVpbGQgaXMgTVNZUyBhbmQgJGhvc3QgaXMgQ3lnd2luLCBvciAoMykgJGJ1aWxkIGlzIEN5Z3dpbi4gSW4gY2FzZSAoMSkgb3IKLSsjICgyKSwgcmV0dXJucyB0aGUgQ3lnd2luIGZpbGUgbmFtZSBvciBwYXRoIGluIGZ1bmNfY3lncGF0aF9yZXN1bHQgKGlucHV0Ci0rIyBmaWxlIG5hbWUgb3IgcGF0aCBpcyBhc3N1bWVkIHRvIGJlIGluIHczMiBmb3JtYXQsIGFzIHByZXZpb3VzbHkgY29udmVydGVkCi0rIyBmcm9tICRidWlsZCdzICpuaXggb3IgTVNZUyBmb3JtYXQpLiBJbiBjYXNlICgzKSwgcmV0dXJucyB0aGUgdzMyIGZpbGUgbmFtZQotKyMgb3IgcGF0aCBpbiBmdW5jX2N5Z3BhdGhfcmVzdWx0IChpbnB1dCBmaWxlIG5hbWUgb3IgcGF0aCBpcyBhc3N1bWVkIHRvIGJlIGluCi0rIyBDeWd3aW4gZm9ybWF0KS4gUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgb24gZXJyb3IuCi0rIwotKyMgQVJHUyBhcmUgcGFzc2VkIHRvIGN5Z3BhdGgsIHdpdGggdGhlIGxhc3Qgb25lIGJlaW5nIHRoZSBmaWxlIG5hbWUgb3IgcGF0aCB0bwotKyMgYmUgY29udmVydGVkLgotKyMKLSsjIFNwZWNpZnkgdGhlIGFic29sdXRlICpuaXggKG9yIHczMikgbmFtZSB0byBjeWdwYXRoIGluIHRoZSBMVF9DWUdQQVRICi0rIyBlbnZpcm9ubWVudCB2YXJpYWJsZTsgZG8gbm90IHB1dCBpdCBpbiAkUEFUSC4KLStmdW5jX2N5Z3BhdGggKCkKLSt7Ci0rICAkb3B0X2RlYnVnCi0rICBpZiB0ZXN0IC1uICIkTFRfQ1lHUEFUSCIgJiYgdGVzdCAtZiAiJExUX0NZR1BBVEgiOyB0aGVuCi0rICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9YCRMVF9DWUdQQVRIICIkQCIgMj4vZGV2L251bGxgCi0rICAgIGlmIHRlc3QgIiQ/IiAtbmUgMDsgdGhlbgotKyAgICAgICMgb24gZmFpbHVyZSwgZW5zdXJlIHJlc3VsdCBpcyBlbXB0eQotKyAgICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9Ci0rICAgIGZpCi0rICBlbHNlCi0rICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9Ci0rICAgIGZ1bmNfZXJyb3IgIkxUX0NZR1BBVEggaXMgZW1wdHkgb3Igc3BlY2lmaWVzIG5vbi1leGlzdGVudCBmaWxlOiBcYCRMVF9DWUdQQVRIJyIKLSsgIGZpCi0rfQotKyNlbmQ6IGZ1bmNfY3lncGF0aAotKwotKwotKyMgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgQVJHCi0rIyBDb252ZXJ0IGZpbGUgbmFtZSBvciBwYXRoIEFSRyBmcm9tIE1TWVMgZm9ybWF0IHRvIHczMiBmb3JtYXQuICBSZXR1cm4KLSsjIHJlc3VsdCBpbiBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQuCi0rZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgKCkKLSt7Ci0rICAkb3B0X2RlYnVnCi0rICAjIGF3a3dhcmQ6IGNtZCBhcHBlbmRzIHNwYWNlcyB0byByZXN1bHQKLSsgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdD1gKCBjbWQgLy9jIGVjaG8gIiQxIiApIDI+L2Rldi9udWxsIHwKLSsgICAgJFNFRCAtZSAncy9bIF0qJC8vJyAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAotK30KLSsjZW5kOiBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMgotKwotKwotKyMgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgQVJHMSBBUkcyCi0rIyBWZXJpZnkgdGhhdCBBUkcxIChhIGZpbGUgbmFtZSBpbiAkYnVpbGQgZm9ybWF0KSB3YXMgY29udmVydGVkIHRvICRob3N0Ci0rIyBmb3JtYXQgaW4gQVJHMi4gT3RoZXJ3aXNlLCBlbWl0IGFuIGVycm9yIG1lc3NhZ2UsIGJ1dCBjb250aW51ZSAocmVzZXR0aW5nCi0rIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQgdG8gQVJHMSkuCi0rZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgKCkKLSt7Ci0rICAkb3B0X2RlYnVnCi0rICBpZiB0ZXN0IC16ICIkMiIgJiYgdGVzdCAtbiAiJDEiIDsgdGhlbgotKyAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIGhvc3QgZmlsZSBuYW1lIGNvcnJlc3BvbmRpbmcgdG8iCi0rICAgIGZ1bmNfZXJyb3IgIiAgXGAkMSciCi0rICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgotKyAgICAjIEZhbGxiYWNrOgotKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgotKyAgZmkKLSt9Ci0rIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sKLSsKLSsKLSsjIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIEZST01fUEFUSFNFUCBUT19QQVRIU0VQIEZST01fUEFUSCBUT19QQVRICi0rIyBWZXJpZnkgdGhhdCBGUk9NX1BBVEggKGEgcGF0aCBpbiAkYnVpbGQgZm9ybWF0KSB3YXMgY29udmVydGVkIHRvICRob3N0Ci0rIyBmb3JtYXQgaW4gVE9fUEFUSC4gT3RoZXJ3aXNlLCBlbWl0IGFuIGVycm9yIG1lc3NhZ2UsIGJ1dCBjb250aW51ZSwgcmVzZXR0aW5nCi0rIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQgdG8gYSBzaW1wbGlzdGljIGZhbGxiYWNrIHZhbHVlIChzZWUgYmVsb3cpLgotK2Z1bmNfY29udmVydF9wYXRoX2NoZWNrICgpCi0rewotKyAgJG9wdF9kZWJ1ZwotKyAgaWYgdGVzdCAteiAiJDQiICYmIHRlc3QgLW4gIiQzIjsgdGhlbgotKyAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBob3N0IHBhdGggY29ycmVzcG9uZGluZyB0byIKLSsgICAgZnVuY19lcnJvciAiICBcYCQzJyIKLSsgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCi0rICAgICMgRmFsbGJhY2suICBUaGlzIGlzIGEgZGVsaWJlcmF0ZWx5IHNpbXBsaXN0aWMgImNvbnZlcnNpb24iIGFuZAotKyAgICAjIHNob3VsZCBub3QgYmUgImltcHJvdmVkIi4gIFNlZSBsaWJ0b29sLmluZm8uCi0rICAgIGlmIHRlc3QgIngkMSIgIT0gIngkMiI7IHRoZW4KLSsgICAgICBsdF9yZXBsYWNlX3BhdGhzZXBfY2hhcnM9InN8JDF8JDJ8ZyIKLSsgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YGVjaG8gIiQzIiB8Ci0rICAgICAgICAkU0VEIC1lICIkbHRfcmVwbGFjZV9wYXRoc2VwX2NoYXJzImAKLSsgICAgZWxzZQotKyAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDMiCi0rICAgIGZpCi0rICBmaQotK30KLSsjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjawotKwotKwotKyMgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwIEZST05UUEFUIEJBQ0tQQVQgUkVQTCBPUklHCi0rIyBNb2RpZmllcyBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQgYnkgcHJlcGVuZGluZyBSRVBMIGlmIE9SSUcgbWF0Y2hlcyBGUk9OVFBBVAotKyMgYW5kIGFwcGVuZGluZyBSRVBMIGlmIE9SSUcgbWF0Y2hlcyBCQUNLUEFULgotK2Z1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAoKQotK3sKLSsgICRvcHRfZGVidWcKLSsgIGNhc2UgJDQgaW4KLSsgICQxICkgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMyRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCi0rICAgIDs7Ci0rICBlc2FjCi0rICBjYXNlICQ0IGluCi0rICAkMiApIGZ1bmNfYXBwZW5kIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCAiJDMiCi0rICAgIDs7Ci0rICBlc2FjCi0rfQotKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcAotKwotKwotKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0rIyAkYnVpbGQgdG8gJGhvc3QgRklMRSBOQU1FIENPTlZFUlNJT04gRlVOQ1RJT05TICMKLSsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotKyMgaW52b2tlZCB2aWEgYCR0b19ob3N0X2ZpbGVfY21kIEFSRycKLSsjCi0rIyBJbiBlYWNoIGNhc2UsIEFSRyBpcyB0aGUgcGF0aCB0byBiZSBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgdG8gJGhvc3QgZm9ybWF0LgotKyMgUmVzdWx0IHdpbGwgYmUgYXZhaWxhYmxlIGluICRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCi0rCi0rCi0rIyBmdW5jX3RvX2hvc3RfZmlsZSBBUkcKLSsjIENvbnZlcnRzIHRoZSBmaWxlIG5hbWUgQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuIFJldHVybiByZXN1bHQKLSsjIGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KLStmdW5jX3RvX2hvc3RfZmlsZSAoKQotK3sKLSsgICRvcHRfZGVidWcKLSsgICR0b19ob3N0X2ZpbGVfY21kICIkMSIKLSt9Ci0rIyBlbmQgZnVuY190b19ob3N0X2ZpbGUKLSsKLSsKLSsjIGZ1bmNfdG9fdG9vbF9maWxlIEFSRyBMQVpZCi0rIyBjb252ZXJ0cyB0aGUgZmlsZSBuYW1lIEFSRyBmcm9tICRidWlsZCBmb3JtYXQgdG8gdG9vbGNoYWluIGZvcm1hdC4gUmV0dXJuCi0rIyByZXN1bHQgaW4gZnVuY190b190b29sX2ZpbGVfcmVzdWx0LiAgSWYgdGhlIGNvbnZlcnNpb24gaW4gdXNlIGlzIGxpc3RlZAotKyMgaW4gKHRoZSBjb21tYSBzZXBhcmF0ZWQpIExBWlksIG5vIGNvbnZlcnNpb24gdGFrZXMgcGxhY2UuCi0rZnVuY190b190b29sX2ZpbGUgKCkKLSt7Ci0rICAkb3B0X2RlYnVnCi0rICBjYXNlICwkMiwgaW4KLSsgICAgKiwiJHRvX3Rvb2xfZmlsZV9jbWQiLCopCi0rICAgICAgZnVuY190b190b29sX2ZpbGVfcmVzdWx0PSQxCi0rICAgICAgOzsKLSsgICAgKikKLSsgICAgICAkdG9fdG9vbF9maWxlX2NtZCAiJDEiCi0rICAgICAgZnVuY190b190b29sX2ZpbGVfcmVzdWx0PSRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQKLSsgICAgICA7OwotKyAgZXNhYwotK30KLSsjIGVuZCBmdW5jX3RvX3Rvb2xfZmlsZQotKwotKwotKyMgZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCBBUkcKLSsjIENvcHkgQVJHIHRvIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KLStmdW5jX2NvbnZlcnRfZmlsZV9ub29wICgpCi0rewotKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKLSt9Ci0rIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAotKwotKwotKyMgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgQVJHCi0rIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSAobWluZ3cpIE1TWVMgdG8gKG1pbmd3KSB3MzIgZm9ybWF0OyBhdXRvbWF0aWMKLSsjIGNvbnZlcnNpb24gdG8gdzMyIGlzIG5vdCBhdmFpbGFibGUgaW5zaWRlIHRoZSBjd3JhcHBlci4gIFJldHVybnMgcmVzdWx0IGluCi0rIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCi0rZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgKCkKLSt7Ci0rICAkb3B0X2RlYnVnCi0rICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgotKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCi0rICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkMSIKLSsgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgotKyAgZmkKLSsgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCi0rfQotKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0rCi0rCi0rIyBmdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyIEFSRwotKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gQ3lnd2luIHRvIHczMiBmb3JtYXQuICBSZXR1cm5zIHJlc3VsdCBpbgotKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgotK2Z1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIgKCkKLSt7Ci0rICAkb3B0X2RlYnVnCi0rICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgotKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCi0rICAgICMgYmVjYXVzZSAkYnVpbGQgaXMgY3lnd2luLCB3ZSBjYWxsICJ0aGUiIGN5Z3BhdGggaW4gJFBBVEg7IG5vIG5lZWQgdG8gdXNlCi0rICAgICMgTFRfQ1lHUEFUSCBpbiB0aGlzIGNhc2UuCi0rICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD1gY3lncGF0aCAtbSAiJDEiYAotKyAgZmkKLSsgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCi0rfQotKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKLSsKLSsKLSsjIGZ1bmNfY29udmVydF9maWxlX25peF90b193MzIgQVJHCi0rIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSAqbml4IHRvIHczMiBmb3JtYXQuICBSZXF1aXJlcyBhIHdpbmUgZW52aXJvbm1lbnQKLSsjIGFuZCBhIHdvcmtpbmcgd2luZXBhdGguIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KLStmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyICgpCi0rewotKyAgJG9wdF9kZWJ1ZwotKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKLSsgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgotKyAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICIkMSIKLSsgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCi0rICBmaQotKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKLSt9Ci0rIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgotKwotKwotKyMgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4gQVJHCi0rIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSBNU1lTIHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBMVF9DWUdQQVRIIHNldC4KLSsjIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KLStmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbiAoKQotK3sKLSsgICRvcHRfZGVidWcKLSsgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCi0rICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLSsgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiQxIgotKyAgICBmdW5jX2N5Z3BhdGggLXUgIiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCi0rICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY3lncGF0aF9yZXN1bHQiCi0rICBmaQotKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKLSt9Ci0rIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KLSsKLSsKLSsjIGZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4gQVJHCi0rIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSAqbml4IHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBDeWd3aW4gaW5zdGFsbGVkCi0rIyBpbiBhIHdpbmUgZW52aXJvbm1lbnQsIHdvcmtpbmcgd2luZXBhdGgsIGFuZCBMVF9DWUdQQVRIIHNldC4gIFJldHVybnMgcmVzdWx0Ci0rIyBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCi0rZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbiAoKQotK3sKLSsgICRvcHRfZGVidWcKLSsgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCi0rICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLSsgICAgIyBjb252ZXJ0IGZyb20gKm5peCB0byB3MzIsIHRoZW4gdXNlIGN5Z3BhdGggdG8gY29udmVydCBmcm9tIHczMiB0byBjeWd3aW4uCi0rICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiQxIgotKyAgICBmdW5jX2N5Z3BhdGggLXUgIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKLSsgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKLSsgIGZpCi0rICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgotK30KLSsjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCi0rCi0rCi0rIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0rIyAkYnVpbGQgdG8gJGhvc3QgUEFUSCBDT05WRVJTSU9OIEZVTkNUSU9OUyAjCi0rIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0rIyBpbnZva2VkIHZpYSBgJHRvX2hvc3RfcGF0aF9jbWQgQVJHJwotKyMKLSsjIEluIGVhY2ggY2FzZSwgQVJHIGlzIHRoZSBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCB0byAkaG9zdCBmb3JtYXQuCi0rIyBUaGUgcmVzdWx0IHdpbGwgYmUgYXZhaWxhYmxlIGluICRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCi0rIwotKyMgUGF0aCBzZXBhcmF0b3JzIGFyZSBhbHNvIGNvbnZlcnRlZCBmcm9tICRidWlsZCBmb3JtYXQgdG8gJGhvc3QgZm9ybWF0LiAgSWYKLSsjIEFSRyBiZWdpbnMgb3IgZW5kcyB3aXRoIGEgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVyLCBpdCBpcyBwcmVzZXJ2ZWQgKGJ1dAotKyMgY29udmVydGVkIHRvICRob3N0IGZvcm1hdCkgb24gb3V0cHV0LgotKyMKLSsjIEFsbCBwYXRoIGNvbnZlcnNpb24gZnVuY3Rpb25zIGFyZSBuYW1lZCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbnZlbnRpb246Ci0rIyAgIGZpbGUgbmFtZSBjb252ZXJzaW9uIGZ1bmN0aW9uICAgIDogZnVuY19jb252ZXJ0X2ZpbGVfWF90b19ZICgpCi0rIyAgIHBhdGggY29udmVyc2lvbiBmdW5jdGlvbiAgICAgICAgIDogZnVuY19jb252ZXJ0X3BhdGhfWF90b19ZICgpCi0rIyB3aGVyZSwgZm9yIGFueSBnaXZlbiAkYnVpbGQvJGhvc3QgY29tYmluYXRpb24gdGhlICdYX3RvX1knIHZhbHVlIGlzIHRoZQotKyMgc2FtZS4gIElmIGNvbnZlcnNpb24gZnVuY3Rpb25zIGFyZSBhZGRlZCBmb3IgbmV3ICRidWlsZC8kaG9zdCBjb21iaW5hdGlvbnMsCi0rIyB0aGUgdHdvIG5ldyBmdW5jdGlvbnMgbXVzdCBmb2xsb3cgdGhpcyBwYXR0ZXJuLCBvciBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAotKyMgd2lsbCBicmVhay4KLSsKLSsKLSsjIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCi0rIyBFbnN1cmVzIHRoYXQgZnVuY3Rpb24gInBvaW50ZXIiIHZhcmlhYmxlICR0b19ob3N0X3BhdGhfY21kIGlzIHNldCB0byB0aGUKLSsjIGFwcHJvcHJpYXRlIHZhbHVlLCBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgJHRvX2hvc3RfZmlsZV9jbWQuCi0rdG9faG9zdF9wYXRoX2NtZD0KLStmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZCAoKQotK3sKLSsgICRvcHRfZGVidWcKLSsgIGlmIHRlc3QgLXogIiR0b19ob3N0X3BhdGhfY21kIjsgdGhlbgotKyAgICBmdW5jX3N0cmlwbmFtZSAnZnVuY19jb252ZXJ0X2ZpbGVfJyAnJyAiJHRvX2hvc3RfZmlsZV9jbWQiCi0rICAgIHRvX2hvc3RfcGF0aF9jbWQ9ImZ1bmNfY29udmVydF9wYXRoXyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fSIKLSsgIGZpCi0rfQotKwotKwotKyMgZnVuY190b19ob3N0X3BhdGggQVJHCi0rIyBDb252ZXJ0cyB0aGUgcGF0aCBBUkcgZnJvbSAkYnVpbGQgZm9ybWF0IHRvICRob3N0IGZvcm1hdC4gUmV0dXJuIHJlc3VsdAotKyMgaW4gZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgotK2Z1bmNfdG9faG9zdF9wYXRoICgpCi0rewotKyAgJG9wdF9kZWJ1ZwotKyAgZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQKLSsgICR0b19ob3N0X3BhdGhfY21kICIkMSIKLSt9Ci0rIyBlbmQgZnVuY190b19ob3N0X3BhdGgKLSsKLSsKLSsjIGZ1bmNfY29udmVydF9wYXRoX25vb3AgQVJHCi0rIyBDb3B5IEFSRyB0byBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCi0rZnVuY19jb252ZXJ0X3BhdGhfbm9vcCAoKQotK3sKLSsgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCi0rfQotKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX25vb3AKLSsKLSsKLSsjIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyIEFSRwotKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tIChtaW5ndykgTVNZUyB0byAobWluZ3cpIHczMiBmb3JtYXQ7IGF1dG9tYXRpYwotKyMgY29udmVyc2lvbiB0byB3MzIgaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgdGhlIGN3cmFwcGVyLiAgUmV0dXJucyByZXN1bHQgaW4KLSsjIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KLStmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMiAoKQotK3sKLSsgICRvcHRfZGVidWcKLSsgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCi0rICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLSsgICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tIEFSRy4gIE1TWVMKLSsgICAgIyBiZWhhdmlvciBpcyBpbmNvbnNpc3RlbnQgaGVyZTsgY3lncGF0aCB0dXJucyB0aGVtIGludG8gJy47JyBhbmQgJzsuJzsKLSsgICAgIyBhbmQgd2luZXBhdGggaWdub3JlcyB0aGVtIGNvbXBsZXRlbHkuCi0rICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCi0rICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCi0rICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKLSsgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAotKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCi0rICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKLSsgIGZpCi0rfQotKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyCi0rCi0rCi0rIyBmdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyIEFSRwotKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tIEN5Z3dpbiB0byB3MzIgZm9ybWF0LiAgUmV0dXJucyByZXN1bHQgaW4KLSsjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KLStmdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyICgpCi0rewotKyAgJG9wdF9kZWJ1ZwotKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKLSsgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgotKyAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKLSsgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKLSsgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0rICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gY3lncGF0aCAtbSAtcCAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiYAotKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCi0rICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKLSsgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiAiOyIgIiQxIgotKyAgZmkKLSt9Ci0rIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfY3lnd2luX3RvX3czMgotKwotKwotKyMgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX3czMiBBUkcKLSsjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSAqbml4IHRvIHczMiBmb3JtYXQuICBSZXF1aXJlcyBhIHdpbmUgZW52aXJvbm1lbnQgYW5kCi0rIyBhIHdvcmtpbmcgd2luZXBhdGguICBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCi0rZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX3czMiAoKQotK3sKLSsgICRvcHRfZGVidWcKLSsgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCi0rICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLSsgICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6Ci0rICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCi0rICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotKyAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKLSsgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQiCi0rICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogIjsiIFwKLSsgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgotKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCi0rICBmaQotK30KLSsjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyCi0rCi0rCi0rIyBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbiBBUkcKLSsjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSBNU1lTIHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBMVF9DWUdQQVRIIHNldC4KLSsjIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KLStmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbiAoKQotK3sKLSsgICRvcHRfZGVidWcKLSsgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCi0rICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLSsgICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6Ci0rICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCi0rICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCi0rICAgIGZ1bmNfY3lncGF0aCAtdSAtcCAiJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKLSsgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKLSsgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiA6IFwKLSsgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgotKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiIDogIiQxIgotKyAgZmkKLSt9Ci0rIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b19jeWd3aW4KLSsKLSsKLSsjIGZ1bmNfY29udmVydF9wYXRoX25peF90b19jeWd3aW4gQVJHCi0rIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gKm5peCB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgQ3lnd2luIGluc3RhbGxlZCBpbiBhCi0rIyBhIHdpbmUgZW52aXJvbm1lbnQsIHdvcmtpbmcgd2luZXBhdGgsIGFuZCBMVF9DWUdQQVRIIHNldC4gIFJldHVybnMgcmVzdWx0IGluCi0rIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCi0rZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbiAoKQotK3sKLSsgICRvcHRfZGVidWcKLSsgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCi0rICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLSsgICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tCi0rICAgICMgQVJHLiBtc3lzIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBoZXJlLCBjeWdwYXRoIHR1cm5zIHRoZW0KLSsgICAgIyBpbnRvICcuOycgYW5kICc7LicsIGFuZCB3aW5lcGF0aCBpZ25vcmVzIHRoZW0gY29tcGxldGVseS4KLSsgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKLSsgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0rICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgotKyAgICBmdW5jX2N5Z3BhdGggLXUgLXAgIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCIKLSsgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKLSsgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiA6IFwKLSsgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgotKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiIDogIiQxIgotKyAgZmkKLSt9Ci0rIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbgotKwotKwotICMgZnVuY19tb2RlX2NvbXBpbGUgYXJnLi4uCi0gZnVuY19tb2RlX2NvbXBpbGUgKCkKLSB7Ci1AQCAtMTMxNCwxMiArMTk4NSwxMiBAQCBmdW5jX21vZGVfY29tcGlsZSAoKQotIAkgIDs7Ci0gCi0gCS1waWUgfCAtZnBpZSB8IC1mUElFKQotLSAgICAgICAgICBwaWVfZmxhZz0iJHBpZV9mbGFnICRhcmciCi0rICAgICAgICAgIGZ1bmNfYXBwZW5kIHBpZV9mbGFnICIgJGFyZyIKLSAJICBjb250aW51ZQotIAkgIDs7Ci0gCi0gCS1zaGFyZWQgfCAtc3RhdGljIHwgLXByZWZlci1waWMgfCAtcHJlZmVyLW5vbi1waWMpCi0tCSAgbGF0ZXI9IiRsYXRlciAkYXJnIgotKwkgIGZ1bmNfYXBwZW5kIGxhdGVyICIgJGFyZyIKLSAJICBjb250aW51ZQotIAkgIDs7Ci0gCi1AQCAtMTM0MCwxNSArMjAxMSwxNCBAQCBmdW5jX21vZGVfY29tcGlsZSAoKQotIAkgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJwotIAkgIGZvciBhcmcgaW4gJGFyZ3M7IGRvCi0gCSAgICBJRlM9IiRzYXZlX2lmcyIKLS0JICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCi0tCSAgICBsYXN0YXJnPSIkbGFzdGFyZyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCi0rCSAgICBmdW5jX2FwcGVuZF9xdW90ZWQgbGFzdGFyZyAiJGFyZyIKLSAJICBkb25lCi0gCSAgSUZTPSIkc2F2ZV9pZnMiCi0gCSAgZnVuY19zdHJpcG5hbWUgJyAnICcnICIkbGFzdGFyZyIKLSAJICBsYXN0YXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLSAKLSAJICAjIEFkZCB0aGUgYXJndW1lbnRzIHRvIGJhc2VfY29tcGlsZS4KLS0JICBiYXNlX2NvbXBpbGU9IiRiYXNlX2NvbXBpbGUgJGxhc3RhcmciCi0rCSAgZnVuY19hcHBlbmQgYmFzZV9jb21waWxlICIgJGxhc3RhcmciCi0gCSAgY29udGludWUKLSAJICA7OwotIAotQEAgLTEzNjQsOCArMjAzNCw3IEBAIGZ1bmNfbW9kZV9jb21waWxlICgpCi0gICAgICAgZXNhYyAgICAjICBjYXNlICRhcmdfbW9kZQotIAotICAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSB0aGUgcHJldmlvdXMgYXJndW1lbnQuCi0tICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGxhc3RhcmciCi0tICAgICAgYmFzZV9jb21waWxlPSIkYmFzZV9jb21waWxlICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKLSsgICAgICBmdW5jX2FwcGVuZF9xdW90ZWQgYmFzZV9jb21waWxlICIkbGFzdGFyZyIKLSAgICAgZG9uZSAjIGZvciBhcmcKLSAKLSAgICAgY2FzZSAkYXJnX21vZGUgaW4KLUBAIC0xNDk2LDE3ICsyMTY1LDE2IEBAIGNvbXBpbGVyLiIKLSAJJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAotIAlleGl0ICRFWElUX0ZBSUxVUkUKLSAgICAgICBmaQotLSAgICAgIHJlbW92ZWxpc3Q9IiRyZW1vdmVsaXN0ICRvdXRwdXRfb2JqIgotKyAgICAgIGZ1bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkb3V0cHV0X29iaiIKLSAgICAgICAkRUNITyAiJHNyY2ZpbGUiID4gIiRsb2NrZmlsZSIKLSAgICAgZmkKLSAKLSAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAotLSAgICByZW1vdmVsaXN0PSIkcmVtb3ZlbGlzdCAkbG9ja2ZpbGUiCi0rICAgIGZ1bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkbG9ja2ZpbGUiCi0gICAgIHRyYXAgJyRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScgMSAyIDE1Ci0gCi0tICAgIGlmIHRlc3QgLW4gIiRmaXhfc3JjZmlsZV9wYXRoIjsgdGhlbgotLSAgICAgIGV2YWwgInNyY2ZpbGU9XCIkZml4X3NyY2ZpbGVfcGF0aFwiIgotLSAgICBmaQotKyAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJHNyY2ZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0rICAgIHNyY2ZpbGU9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAotICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkc3JjZmlsZSIKLSAgICAgcXNyY2ZpbGU9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Ci0gCi1AQCAtMTUyNiw3ICsyMTk0LDcgQEAgY29tcGlsZXIuIgotIAotICAgICAgIGlmIHRlc3QgLXogIiRvdXRwdXRfb2JqIjsgdGhlbgotIAkjIFBsYWNlIFBJQyBvYmplY3RzIGluICRvYmpkaXIKLS0JY29tbWFuZD0iJGNvbW1hbmQgLW8gJGxvYmoiCi0rCWZ1bmNfYXBwZW5kIGNvbW1hbmQgIiAtbyAkbG9iaiIKLSAgICAgICBmaQotIAotICAgICAgIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAiJGNvbW1hbmQiCVwKLUBAIC0xNTczLDExICsyMjQxLDExIEBAIGNvbXBpbGVyLiIKLSAJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUgJHBpY19mbGFnIgotICAgICAgIGZpCi0gICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX2NfbyIgPSB5ZXM7IHRoZW4KLS0JY29tbWFuZD0iJGNvbW1hbmQgLW8gJG9iaiIKLSsJZnVuY19hcHBlbmQgY29tbWFuZCAiIC1vICRvYmoiCi0gICAgICAgZmkKLSAKLSAgICAgICAjIFN1cHByZXNzIGNvbXBpbGVyIG91dHB1dCBpZiB3ZSBhbHJlYWR5IGRpZCBhIFBJQyBjb21waWxhdGlvbi4KLS0gICAgICBjb21tYW5kPSIkY29tbWFuZCRzdXBwcmVzc19vdXRwdXQiCi0rICAgICAgZnVuY19hcHBlbmQgY29tbWFuZCAiJHN1cHByZXNzX291dHB1dCIKLSAgICAgICBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgIiRjb21tYW5kIiBcCi0gICAgICAgICAnJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJwotIAotQEAgLTE2MjIsMTMgKzIyOTAsMTMgQEAgY29tcGlsZXIuIgotIH0KLSAKLSAkb3B0X2hlbHAgfHwgewotLSAgdGVzdCAiJG1vZGUiID0gY29tcGlsZSAmJiBmdW5jX21vZGVfY29tcGlsZSAkezErIiRAIn0KLSsgIHRlc3QgIiRvcHRfbW9kZSIgPSBjb21waWxlICYmIGZ1bmNfbW9kZV9jb21waWxlICR7MSsiJEAifQotIH0KLSAKLSBmdW5jX21vZGVfaGVscCAoKQotIHsKLSAgICAgIyBXZSBuZWVkIHRvIGRpc3BsYXkgaGVscCBmb3IgZWFjaCBvZiB0aGUgbW9kZXMuCi0tICAgIGNhc2UgJG1vZGUgaW4KLSsgICAgY2FzZSAkb3B0X21vZGUgaW4KLSAgICAgICAiIikKLSAgICAgICAgICMgR2VuZXJpYyBoZWxwIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSB1c2FnZSBjb21tZW50cwotICAgICAgICAgIyBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmaWxlLgotQEAgLTE2NTksOCArMjMyNyw4IEBAIFRoaXMgbW9kZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBvcHRpb25zOgotIAotICAgLW8gT1VUUFVULUZJTEUgICAgc2V0IHRoZSBvdXRwdXQgZmlsZSBuYW1lIHRvIE9VVFBVVC1GSUxFCi0gICAtbm8tc3VwcHJlc3MgICAgICBkbyBub3Qgc3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGZvciBtdWx0aXBsZSBwYXNzZXMKLS0gIC1wcmVmZXItcGljICAgICAgIHRyeSB0byBidWlsZGluZyBQSUMgb2JqZWN0cyBvbmx5Ci0tICAtcHJlZmVyLW5vbi1waWMgICB0cnkgdG8gYnVpbGRpbmcgbm9uLVBJQyBvYmplY3RzIG9ubHkKLSsgIC1wcmVmZXItcGljICAgICAgIHRyeSB0byBidWlsZCBQSUMgb2JqZWN0cyBvbmx5Ci0rICAtcHJlZmVyLW5vbi1waWMgICB0cnkgdG8gYnVpbGQgbm9uLVBJQyBvYmplY3RzIG9ubHkKLSAgIC1zaGFyZWQgICAgICAgICAgIGRvIG5vdCBidWlsZCBhIFxgLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCi0gICAtc3RhdGljICAgICAgICAgICBvbmx5IGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKLSAgIC1XYyxGTEFHICAgICAgICAgIHBhc3MgRkxBRyBkaXJlY3RseSB0byB0aGUgY29tcGlsZXIKLUBAIC0xODA0LDcgKzI0NzIsNyBAQCBPdGhlcndpc2UsIG9ubHkgRklMRSBpdHNlbGYgaXMgZGVsZXRlZCB1c2luZyBSTS4iCi0gICAgICAgICA7OwotIAotICAgICAgICopCi0tICAgICAgICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkbW9kZSciCi0rICAgICAgICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkb3B0X21vZGUnIgotICAgICAgICAgOzsKLSAgICAgZXNhYwotIAotQEAgLTE4MTksMTMgKzI0ODcsMTMgQEAgaWYgJG9wdF9oZWxwOyB0aGVuCi0gICBlbHNlCi0gICAgIHsKLSAgICAgICBmdW5jX2hlbHAgbm9leGl0Ci0tICAgICAgZm9yIG1vZGUgaW4gY29tcGlsZSBsaW5rIGV4ZWN1dGUgaW5zdGFsbCBmaW5pc2ggdW5pbnN0YWxsIGNsZWFuOyBkbwotKyAgICAgIGZvciBvcHRfbW9kZSBpbiBjb21waWxlIGxpbmsgZXhlY3V0ZSBpbnN0YWxsIGZpbmlzaCB1bmluc3RhbGwgY2xlYW47IGRvCi0gCWZ1bmNfbW9kZV9oZWxwCi0gICAgICAgZG9uZQotICAgICB9IHwgc2VkIC1uICcxcDsgMiwkcy9eVXNhZ2U6LyAgb3I6IC9wJwotICAgICB7Ci0gICAgICAgZnVuY19oZWxwIG5vZXhpdAotLSAgICAgIGZvciBtb2RlIGluIGNvbXBpbGUgbGluayBleGVjdXRlIGluc3RhbGwgZmluaXNoIHVuaW5zdGFsbCBjbGVhbjsgZG8KLSsgICAgICBmb3Igb3B0X21vZGUgaW4gY29tcGlsZSBsaW5rIGV4ZWN1dGUgaW5zdGFsbCBmaW5pc2ggdW5pbnN0YWxsIGNsZWFuOyBkbwotIAllY2hvCi0gCWZ1bmNfbW9kZV9oZWxwCi0gICAgICAgZG9uZQotQEAgLTE4NTQsMTMgKzI1MjIsMTYgQEAgZnVuY19tb2RlX2V4ZWN1dGUgKCkKLSAgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBDT01NQU5EIgotIAotICAgICAjIEhhbmRsZSAtZGxvcGVuIGZsYWdzIGltbWVkaWF0ZWx5LgotLSAgICBmb3IgZmlsZSBpbiAkZXhlY3V0ZV9kbGZpbGVzOyBkbwotKyAgICBmb3IgZmlsZSBpbiAkb3B0X2Rsb3BlbjsgZG8KLSAgICAgICB0ZXN0IC1mICIkZmlsZSIgXAotIAl8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGZpbGUnIGlzIG5vdCBhIGZpbGUiCi0gCi0gICAgICAgZGlyPQotICAgICAgIGNhc2UgJGZpbGUgaW4KLSAgICAgICAqLmxhKQotKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZpbGUiCi0rCWZpbGU9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAotKwotIAkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgotIAlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAotIAkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCi1AQCAtMTg4Miw3ICsyNTUzLDcgQEAgZnVuY19tb2RlX2V4ZWN1dGUgKCkKLSAJZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKLSAKLSAJaWYgdGVzdCAtZiAiJGRpci8kb2JqZGlyLyRkbG5hbWUiOyB0aGVuCi0tCSAgZGlyPSIkZGlyLyRvYmpkaXIiCi0rCSAgZnVuY19hcHBlbmQgZGlyICIvJG9iamRpciIKLSAJZWxzZQotIAkgIGlmIHRlc3QgISAtZiAiJGRpci8kZGxuYW1lIjsgdGhlbgotIAkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgXGAkZGxuYW1lJyBpbiBcYCRkaXInIG9yIFxgJGRpci8kb2JqZGlyJyIKLUBAIC0xOTA3LDEwICsyNTc4LDEwIEBAIGZ1bmNfbW9kZV9leGVjdXRlICgpCi0gICAgICAgdGVzdCAtbiAiJGFic2RpciIgJiYgZGlyPSIkYWJzZGlyIgotIAotICAgICAgICMgTm93IGFkZCB0aGUgZGlyZWN0b3J5IHRvIHNobGlicGF0aF92YXIuCi0tICAgICAgaWYgZXZhbCB0ZXN0IC16IFwiXCQkc2hsaWJwYXRoX3ZhclwiOyB0aGVuCi0tCWV2YWwgJHNobGlicGF0aF92YXI9XCRkaXIKLSsgICAgICBpZiBldmFsICJ0ZXN0IC16IFwiXCQkc2hsaWJwYXRoX3ZhclwiIjsgdGhlbgotKwlldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyXCIiCi0gICAgICAgZWxzZQotLQlldmFsICRzaGxpYnBhdGhfdmFyPVwkZGlyOlwkJHNobGlicGF0aF92YXIKLSsJZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpcjpcJCRzaGxpYnBhdGhfdmFyXCIiCi0gICAgICAgZmkKLSAgICAgZG9uZQotIAotQEAgLTE5MzksOCArMjYxMCw3IEBAIGZ1bmNfbW9kZV9leGVjdXRlICgpCi0gCTs7Ci0gICAgICAgZXNhYwotICAgICAgICMgUXVvdGUgYXJndW1lbnRzICh0byBwcmVzZXJ2ZSBzaGVsbCBtZXRhY2hhcmFjdGVycykuCi0tICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZpbGUiCi0tICAgICAgYXJncz0iJGFyZ3MgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotKyAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBhcmdzICIkZmlsZSIKLSAgICAgZG9uZQotIAotICAgICBpZiB0ZXN0ICJYJG9wdF9kcnlfcnVuIiA9IFhmYWxzZTsgdGhlbgotQEAgLTE5NzIsMjIgKzI2NDIsNTkgQEAgZnVuY19tb2RlX2V4ZWN1dGUgKCkKLSAgICAgZmkKLSB9Ci0gCi0tdGVzdCAiJG1vZGUiID0gZXhlY3V0ZSAmJiBmdW5jX21vZGVfZXhlY3V0ZSAkezErIiRAIn0KLSt0ZXN0ICIkb3B0X21vZGUiID0gZXhlY3V0ZSAmJiBmdW5jX21vZGVfZXhlY3V0ZSAkezErIiRAIn0KLSAKLSAKLSAjIGZ1bmNfbW9kZV9maW5pc2ggYXJnLi4uCi0gZnVuY19tb2RlX2ZpbmlzaCAoKQotIHsKLSAgICAgJG9wdF9kZWJ1ZwotLSAgICBsaWJkaXJzPSIkbm9ub3B0IgotKyAgICBsaWJzPQotKyAgICBsaWJkaXJzPQotICAgICBhZG1pbmNtZHM9Ci0gCi0tICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCi0tICAgICAgZm9yIGRpcgotLSAgICAgIGRvCi0tCWxpYmRpcnM9IiRsaWJkaXJzICRkaXIiCi0tICAgICAgZG9uZQotKyAgICBmb3Igb3B0IGluICIkbm9ub3B0IiAkezErIiRAIn0KLSsgICAgZG8KLSsgICAgICBpZiB0ZXN0IC1kICIkb3B0IjsgdGhlbgotKwlmdW5jX2FwcGVuZCBsaWJkaXJzICIgJG9wdCIKLSAKLSsgICAgICBlbGlmIHRlc3QgLWYgIiRvcHQiOyB0aGVuCi0rCWlmIGZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRvcHQiOyB0aGVuCi0rCSAgZnVuY19hcHBlbmQgbGlicyAiICRvcHQiCi0rCWVsc2UKLSsJICBmdW5jX3dhcm5pbmcgIlxgJG9wdCcgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgotKwlmaQotKwotKyAgICAgIGVsc2UKLSsJZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCBhcmd1bWVudCBcYCRvcHQnIgotKyAgICAgIGZpCi0rICAgIGRvbmUKLSsKLSsgICAgaWYgdGVzdCAtbiAiJGxpYnMiOyB0aGVuCi0rICAgICAgaWYgdGVzdCAtbiAiJGx0X3N5c3Jvb3QiOyB0aGVuCi0rICAgICAgICBzeXNyb290X3JlZ2V4PWAkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJHNlZF9tYWtlX2xpdGVyYWxfcmVnZXgiYAotKyAgICAgICAgc3lzcm9vdF9jbWQ9InMvXChbICddXCkkc3lzcm9vdF9yZWdleC9cMS9nOyIKLSsgICAgICBlbHNlCi0rICAgICAgICBzeXNyb290X2NtZD0KLSsgICAgICBmaQotKwotKyAgICAgICMgUmVtb3ZlIHN5c3Jvb3QgcmVmZXJlbmNlcwotKyAgICAgIGlmICRvcHRfZHJ5X3J1bjsgdGhlbgotKyAgICAgICAgZm9yIGxpYiBpbiAkbGliczsgZG8KLSsgICAgICAgICAgZWNobyAicmVtb3ZpbmcgcmVmZXJlbmNlcyB0byAkbHRfc3lzcm9vdCBhbmQgXGA9JyBwcmVmaXhlcyBmcm9tICRsaWIiCi0rICAgICAgICBkb25lCi0rICAgICAgZWxzZQotKyAgICAgICAgdG1wZGlyPWBmdW5jX21rdGVtcGRpcmAKLSsgICAgICAgIGZvciBsaWIgaW4gJGxpYnM7IGRvCi0rCSAgc2VkIC1lICIke3N5c3Jvb3RfY21kfSBzL1woWyAnXS1bTFJdXCk9L1wxL2c7IHMvXChbICddXCk9L1wxL2ciICRsaWIgXAotKwkgICAgPiAkdG1wZGlyL3RtcC1sYQotKwkgIG12IC1mICR0bXBkaXIvdG1wLWxhICRsaWIKLSsJZG9uZQotKyAgICAgICAgJHtSTX1yICIkdG1wZGlyIgotKyAgICAgIGZpCi0rICAgIGZpCi0rCi0rICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCi0gICAgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KLSAJaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzIjsgdGhlbgotIAkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBmaW5pc2ggY29tbWFuZHMuCi1AQCAtMTk5Nyw3ICsyNzA0LDcgQEAgZnVuY19tb2RlX2ZpbmlzaCAoKQotIAlpZiB0ZXN0IC1uICIkZmluaXNoX2V2YWwiOyB0aGVuCi0gCSAgIyBEbyB0aGUgc2luZ2xlIGZpbmlzaF9ldmFsLgotIAkgIGV2YWwgY21kcz1cIiRmaW5pc2hfZXZhbFwiCi0tCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiRjbWRzIiB8fCBhZG1pbmNtZHM9IiRhZG1pbmNtZHMKLSsJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZHMiIHx8IGZ1bmNfYXBwZW5kIGFkbWluY21kcyAiCi0gICAgICAgICRjbWRzIgotIAlmaQotICAgICAgIGRvbmUKLUBAIC0yMDA2LDUzICsyNzEzLDU1IEBAIGZ1bmNfbW9kZV9maW5pc2ggKCkKLSAgICAgIyBFeGl0IGhlcmUgaWYgdGhleSB3YW50ZWQgc2lsZW50IG1vZGUuCi0gICAgICRvcHRfc2lsZW50ICYmIGV4aXQgJEVYSVRfU1VDQ0VTUwotIAotLSAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgotLSAgICBlY2hvICJMaWJyYXJpZXMgaGF2ZSBiZWVuIGluc3RhbGxlZCBpbjoiCi0tICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCi0tICAgICAgJEVDSE8gIiAgICRsaWJkaXIiCi0tICAgIGRvbmUKLS0gICAgZWNobwotLSAgICBlY2hvICJJZiB5b3UgZXZlciBoYXBwZW4gdG8gd2FudCB0byBsaW5rIGFnYWluc3QgaW5zdGFsbGVkIGxpYnJhcmllcyIKLS0gICAgZWNobyAiaW4gYSBnaXZlbiBkaXJlY3RvcnksIExJQkRJUiwgeW91IG11c3QgZWl0aGVyIHVzZSBsaWJ0b29sLCBhbmQiCi0tICAgIGVjaG8gInNwZWNpZnkgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGxpYnJhcnksIG9yIHVzZSB0aGUgXGAtTExJQkRJUiciCi0tICAgIGVjaG8gImZsYWcgZHVyaW5nIGxpbmtpbmcgYW5kIGRvIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nOiIKLS0gICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCi0tICAgICAgZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRzaGxpYnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKLS0gICAgICBlY2hvICIgICAgIGR1cmluZyBleGVjdXRpb24iCi0tICAgIGZpCi0tICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KLS0gICAgICBlY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHJ1bnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKLS0gICAgICBlY2hvICIgICAgIGR1cmluZyBsaW5raW5nIgotLSAgICBmaQotLSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KLS0gICAgICBsaWJkaXI9TElCRElSCi0tICAgICAgZXZhbCAiZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCi0rICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCi0rICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKLSsgICAgICBlY2hvICJMaWJyYXJpZXMgaGF2ZSBiZWVuIGluc3RhbGxlZCBpbjoiCi0rICAgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KLSsJJEVDSE8gIiAgICRsaWJkaXIiCi0rICAgICAgZG9uZQotKyAgICAgIGVjaG8KLSsgICAgICBlY2hvICJJZiB5b3UgZXZlciBoYXBwZW4gdG8gd2FudCB0byBsaW5rIGFnYWluc3QgaW5zdGFsbGVkIGxpYnJhcmllcyIKLSsgICAgICBlY2hvICJpbiBhIGdpdmVuIGRpcmVjdG9yeSwgTElCRElSLCB5b3UgbXVzdCBlaXRoZXIgdXNlIGxpYnRvb2wsIGFuZCIKLSsgICAgICBlY2hvICJzcGVjaWZ5IHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBsaWJyYXJ5LCBvciB1c2UgdGhlIFxgLUxMSUJESVInIgotKyAgICAgIGVjaG8gImZsYWcgZHVyaW5nIGxpbmtpbmcgYW5kIGRvIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nOiIKLSsgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KLSsJZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRzaGxpYnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKLSsJZWNobyAiICAgICBkdXJpbmcgZXhlY3V0aW9uIgotKyAgICAgIGZpCi0rICAgICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgotKwllY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHJ1bnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKLSsJZWNobyAiICAgICBkdXJpbmcgbGlua2luZyIKLSsgICAgICBmaQotKyAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgotKwlsaWJkaXI9TElCRElSCi0rCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKLSAKLS0gICAgICAkRUNITyAiICAgLSB1c2UgdGhlIFxgJGZsYWcnIGxpbmtlciBmbGFnIgotLSAgICBmaQotLSAgICBpZiB0ZXN0IC1uICIkYWRtaW5jbWRzIjsgdGhlbgotLSAgICAgICRFQ0hPICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBydW4gdGhlc2UgY29tbWFuZHM6JGFkbWluY21kcyIKLS0gICAgZmkKLS0gICAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KLS0gICAgICBlY2hvICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBhZGQgTElCRElSIHRvIFxgL2V0Yy9sZC5zby5jb25mJyIKLS0gICAgZmkKLS0gICAgZWNobwotKwkkRUNITyAiICAgLSB1c2UgdGhlIFxgJGZsYWcnIGxpbmtlciBmbGFnIgotKyAgICAgIGZpCi0rICAgICAgaWYgdGVzdCAtbiAiJGFkbWluY21kcyI7IHRoZW4KLSsJJEVDSE8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHJ1biB0aGVzZSBjb21tYW5kczokYWRtaW5jbWRzIgotKyAgICAgIGZpCi0rICAgICAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KLSsJZWNobyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgYWRkIExJQkRJUiB0byBcYC9ldGMvbGQuc28uY29uZiciCi0rICAgICAgZmkKLSsgICAgICBlY2hvCi0gCi0tICAgIGVjaG8gIlNlZSBhbnkgb3BlcmF0aW5nIHN5c3RlbSBkb2N1bWVudGF0aW9uIGFib3V0IHNoYXJlZCBsaWJyYXJpZXMgZm9yIgotLSAgICBjYXNlICRob3N0IGluCi0tICAgICAgc29sYXJpczIuWzY3ODldfHNvbGFyaXMyLjFbMC05XSkKLS0gICAgICAgIGVjaG8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpLCBjcmxlKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwiCi0tCWVjaG8gInBhZ2VzLiIKLS0JOzsKLS0gICAgICAqKQotLSAgICAgICAgZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCBwYWdlcy4iCi0tICAgICAgICA7OwotLSAgICBlc2FjCi0tICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCi0rICAgICAgZWNobyAiU2VlIGFueSBvcGVyYXRpbmcgc3lzdGVtIGRvY3VtZW50YXRpb24gYWJvdXQgc2hhcmVkIGxpYnJhcmllcyBmb3IiCi0rICAgICAgY2FzZSAkaG9zdCBpbgotKwlzb2xhcmlzMi5bNjc4OV18c29sYXJpczIuMVswLTldKQotKwkgIGVjaG8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpLCBjcmxlKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwiCi0rCSAgZWNobyAicGFnZXMuIgotKwkgIDs7Ci0rCSopCi0rCSAgZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCBwYWdlcy4iCi0rCSAgOzsKLSsgICAgICBlc2FjCi0rICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKLSsgICAgZmkKLSAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCi0gfQotIAotLXRlc3QgIiRtb2RlIiA9IGZpbmlzaCAmJiBmdW5jX21vZGVfZmluaXNoICR7MSsiJEAifQotK3Rlc3QgIiRvcHRfbW9kZSIgPSBmaW5pc2ggJiYgZnVuY19tb2RlX2ZpbmlzaCAkezErIiRAIn0KLSAKLSAKLSAjIGZ1bmNfbW9kZV9pbnN0YWxsIGFyZy4uLgotQEAgLTIwNzcsNyArMjc4Niw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCi0gICAgICMgVGhlIHJlYWwgZmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBpbnN0YWxsYXRpb24gcHJvZ3JhbS4KLSAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgotICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgotLSAgICBpbnN0YWxsX3Byb2c9IiRpbnN0YWxsX3Byb2ckZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCi0rICAgIGZ1bmNfYXBwZW5kIGluc3RhbGxfcHJvZyAiJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotICAgICBpbnN0YWxsX3NoYXJlZF9wcm9nPSRpbnN0YWxsX3Byb2cKLSAgICAgY2FzZSAiICRpbnN0YWxsX3Byb2cgIiBpbgotICAgICAgICpbXFxcIC9dY3BcICopIGluc3RhbGxfY3A9OiA7OwotQEAgLTIwOTcsNyArMjgwNiw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCi0gICAgIGRvCi0gICAgICAgYXJnMj0KLSAgICAgICBpZiB0ZXN0IC1uICIkZGVzdCI7IHRoZW4KLS0JZmlsZXM9IiRmaWxlcyAkZGVzdCIKLSsJZnVuY19hcHBlbmQgZmlsZXMgIiAkZGVzdCIKLSAJZGVzdD0kYXJnCi0gCWNvbnRpbnVlCi0gICAgICAgZmkKLUBAIC0yMTM1LDExICsyODQ0LDExIEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCi0gCi0gICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBhcmd1bWVudC4KLSAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgotLSAgICAgIGluc3RhbGxfcHJvZz0iJGluc3RhbGxfcHJvZyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCi0rICAgICAgZnVuY19hcHBlbmQgaW5zdGFsbF9wcm9nICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotICAgICAgIGlmIHRlc3QgLW4gIiRhcmcyIjsgdGhlbgotIAlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnMiIKLSAgICAgICBmaQotLSAgICAgIGluc3RhbGxfc2hhcmVkX3Byb2c9IiRpbnN0YWxsX3NoYXJlZF9wcm9nICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKLSsgICAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3NoYXJlZF9wcm9nICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotICAgICBkb25lCi0gCi0gICAgIHRlc3QgLXogIiRpbnN0YWxsX3Byb2ciICYmIFwKLUBAIC0yMTUxLDcgKzI4NjAsNyBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQotICAgICBpZiB0ZXN0IC1uICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIiAmJiAkbm9fbW9kZTsgdGhlbgotICAgICAgIGlmICRpbnN0YWxsX2NwOyB0aGVuIDo7IGVsc2UKLSAJZnVuY19xdW90ZV9mb3JfZXZhbCAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSIKLS0JaW5zdGFsbF9zaGFyZWRfcHJvZz0iJGluc3RhbGxfc2hhcmVkX3Byb2cgLW0gJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotKwlmdW5jX2FwcGVuZCBpbnN0YWxsX3NoYXJlZF9wcm9nICIgLW0gJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotICAgICAgIGZpCi0gICAgIGZpCi0gCi1AQCAtMjIwOSwxMCArMjkxOCwxMyBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQotICAgICAgIGNhc2UgJGZpbGUgaW4KLSAgICAgICAqLiRsaWJleHQpCi0gCSMgRG8gdGhlIHN0YXRpYyBsaWJyYXJpZXMgbGF0ZXIuCi0tCXN0YXRpY2xpYnM9IiRzdGF0aWNsaWJzICRmaWxlIgotKwlmdW5jX2FwcGVuZCBzdGF0aWNsaWJzICIgJGZpbGUiCi0gCTs7Ci0gCi0gICAgICAgKi5sYSkKLSsJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmaWxlIgotKwlmaWxlPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKLSsKLSAJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KLSAJZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKLSAJICB8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGZpbGUnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKLUBAIC0yMjI2LDIzICsyOTM4LDMwIEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCi0gCWlmIHRlc3QgIlgkZGVzdGRpciIgPSAiWCRsaWJkaXIiOyB0aGVuCi0gCSAgY2FzZSAiJGN1cnJlbnRfbGliZGlycyAiIGluCi0gCSAgKiIgJGxpYmRpciAiKikgOzsKLS0JICAqKSBjdXJyZW50X2xpYmRpcnM9IiRjdXJyZW50X2xpYmRpcnMgJGxpYmRpciIgOzsKLSsJICAqKSBmdW5jX2FwcGVuZCBjdXJyZW50X2xpYmRpcnMgIiAkbGliZGlyIiA7OwotIAkgIGVzYWMKLSAJZWxzZQotIAkgICMgTm90ZSB0aGUgbGliZGlyIGFzIGEgZnV0dXJlIGxpYmRpci4KLSAJICBjYXNlICIkZnV0dXJlX2xpYmRpcnMgIiBpbgotIAkgICoiICRsaWJkaXIgIiopIDs7Ci0tCSAgKikgZnV0dXJlX2xpYmRpcnM9IiRmdXR1cmVfbGliZGlycyAkbGliZGlyIiA7OwotKwkgICopIGZ1bmNfYXBwZW5kIGZ1dHVyZV9saWJkaXJzICIgJGxpYmRpciIgOzsKLSAJICBlc2FjCi0gCWZpCi0gCi0gCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIvIiAiIgotIAlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgotLQlkaXI9IiRkaXIkb2JqZGlyIgotKwlmdW5jX2FwcGVuZCBkaXIgIiRvYmpkaXIiCi0gCi0gCWlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KLSsgICAgICAjIFN0cmlwIGFueSB0cmFpbGluZyBzbGFzaCBmcm9tIHRoZSBkZXN0aW5hdGlvbi4KLSsgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRsaWJkaXIiCi0rICAgICAgZGVzdGxpYmRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0rCi0rICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkZGVzdGRpciIKLSsgICAgICBzX2Rlc3RkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotKwotIAkgICMgRGV0ZXJtaW5lIHRoZSBwcmVmaXggdGhlIHVzZXIgaGFzIGFwcGxpZWQgdG8gb3VyIGZ1dHVyZSBkaXIuCi0tCSAgaW5zdF9wcmVmaXhfZGlyPWAkRUNITyAiJGRlc3RkaXIiIHwgJFNFRCAtZSAicyUkbGliZGlyXCQlJSJgCi0rCSAgaW5zdF9wcmVmaXhfZGlyPWAkRUNITyAiWCRzX2Rlc3RkaXIiIHwgJFhzZWQgLWUgInMlJGRlc3RsaWJkaXJcJCUlImAKLSAKLSAJICAjIERvbid0IGFsbG93IHRoZSB1c2VyIHRvIHBsYWNlIHVzIG91dHNpZGUgb2Ygb3VyIGV4cGVjdGVkCi0gCSAgIyBsb2NhdGlvbiBiL2MgdGhpcyBwcmV2ZW50cyBmaW5kaW5nIGRlcGVuZGVudCBsaWJyYXJpZXMgdGhhdAotQEAgLTIzMTUsNyArMzAzNCw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCi0gCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRpbnN0bmFtZSAkZGVzdGRpci8kbmFtZSIgJ2V4aXQgJD8nCi0gCi0gCSMgTWF5YmUgaW5zdGFsbCB0aGUgc3RhdGljIGxpYnJhcnksIHRvby4KLS0JdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBzdGF0aWNsaWJzPSIkc3RhdGljbGlicyAkZGlyLyRvbGRfbGlicmFyeSIKLSsJdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBmdW5jX2FwcGVuZCBzdGF0aWNsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCi0gCTs7Ci0gCi0gICAgICAgKi5sbykKLUBAIC0yNTAzLDcgKzMyMjIsNyBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQotICAgICB0ZXN0IC1uICIkZnV0dXJlX2xpYmRpcnMiICYmIFwKLSAgICAgICBmdW5jX3dhcm5pbmcgInJlbWVtYmVyIHRvIHJ1biBcYCRwcm9nbmFtZSAtLWZpbmlzaCRmdXR1cmVfbGliZGlycyciCi0gCi0tICAgIGlmIHRlc3QgLW4gIiRjdXJyZW50X2xpYmRpcnMiICYmICRvcHRfZmluaXNoOyB0aGVuCi0rICAgIGlmIHRlc3QgLW4gIiRjdXJyZW50X2xpYmRpcnMiOyB0aGVuCi0gICAgICAgIyBNYXliZSBqdXN0IGRvIGEgZHJ5IHJ1bi4KLSAgICAgICAkb3B0X2RyeV9ydW4gJiYgY3VycmVudF9saWJkaXJzPSIgLW4kY3VycmVudF9saWJkaXJzIgotICAgICAgIGV4ZWNfY21kPSckU0hFTEwgJHByb2dwYXRoICRwcmVzZXJ2ZV9hcmdzIC0tZmluaXNoJGN1cnJlbnRfbGliZGlycycKLUBAIC0yNTEyLDcgKzMyMzEsNyBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQotICAgICBmaQotIH0KLSAKLS10ZXN0ICIkbW9kZSIgPSBpbnN0YWxsICYmIGZ1bmNfbW9kZV9pbnN0YWxsICR7MSsiJEAifQotK3Rlc3QgIiRvcHRfbW9kZSIgPSBpbnN0YWxsICYmIGZ1bmNfbW9kZV9pbnN0YWxsICR7MSsiJEAifQotIAotIAotICMgZnVuY19nZW5lcmF0ZV9kbHN5bXMgb3V0cHV0bmFtZSBvcmlnaW5hdG9yIHBpY19wCi1AQCAtMjU1OSw2ICszMjc4LDE4IEBAIGV4dGVybiBcIkNcIiB7Ci0gI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdzdHJpY3QtcHJvdG90eXBlc1wiCi0gI2VuZGlmCi0gCi0rLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCi0rI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKLSsvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKLSsgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCi0rIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKLSsjZWxpZiBkZWZpbmVkKF9fb3NmX18pCi0rLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCi0rIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKLSsjZWxzZQotKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0Ci0rI2VuZGlmCi0rCi0gLyogRXh0ZXJuYWwgc3ltYm9sIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGNvbXBpbGVyLiAqL1wKLSAiCi0gCi1AQCAtMjU3MCwyMSArMzMwMSwyMiBAQCBleHRlcm4gXCJDXCIgewotIAkgICMgQWRkIG91ciBvd24gcHJvZ3JhbSBvYmplY3RzIHRvIHRoZSBzeW1ib2wgbGlzdC4KLSAJICBwcm9nZmlsZXM9YCRFQ0hPICIkb2JqcyRvbGRfZGVwbGlicyIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCi0gCSAgZm9yIHByb2dmaWxlIGluICRwcm9nZmlsZXM7IGRvCi0tCSAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tIFxgJHByb2dmaWxlJyIKLS0JICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkTk0gJHByb2dmaWxlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKLSsJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkcHJvZ2ZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0rCSAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tIFxgJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCciCi0rCSAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJE5NICRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgotIAkgIGRvbmUKLSAKLSAJICBpZiB0ZXN0IC1uICIkZXhjbHVkZV9leHBzeW1zIjsgdGhlbgotIAkgICAgJG9wdF9kcnlfcnVuIHx8IHsKLS0JICAgICAgJEVHUkVQIC12ICIgKCRleGNsdWRlX2V4cHN5bXMpJCIgIiRubGlzdCIgPiAiJG5saXN0IlQKLS0JICAgICAgJE1WICIkbmxpc3QiVCAiJG5saXN0IgotKwkgICAgICBldmFsICckRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKLSsJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKLSAJICAgIH0KLSAJICBmaQotIAotIAkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KLSAJICAgICRvcHRfZHJ5X3J1biB8fCB7Ci0tCSAgICAgICRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJG5saXN0IiA+ICIkbmxpc3QiVAotLQkgICAgICAkTVYgIiRubGlzdCJUICIkbmxpc3QiCi0rCSAgICAgIGV2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKLSsJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKLSAJICAgIH0KLSAJICBmaQotIAotQEAgLTI1OTMsMjMgKzMzMjUsMjMgQEAgZXh0ZXJuIFwiQ1wiIHsKLSAJICAgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiCi0gCSAgICAkb3B0X2RyeV9ydW4gfHwgewotIAkgICAgICAkUk0gJGV4cG9ydF9zeW1ib2xzCi0tCSAgICAgICR7U0VEfSAtbiAtZSAnL146IEBQUk9HUkFNQCAkL2QnIC1lICdzL14uKiBcKC4qXCkkL1wxL3AnIDwgIiRubGlzdCIgPiAiJGV4cG9ydF9zeW1ib2xzIgotKwkgICAgICBldmFsICIke1NFRH0gLW4gLWUgJy9eOiBAUFJPR1JBTUAgJC9kJyAtZSAncy9eLiogXCguKlwpJC9cMS9wJyAiJzwgIiRubGlzdCIgPiAiJGV4cG9ydF9zeW1ib2xzIicKLSAJICAgICAgY2FzZSAkaG9zdCBpbgotIAkgICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKLS0gICAgICAgICAgICAgICAgZWNobyBFWFBPUlRTID4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiIKLS0gICAgICAgICAgICAgICAgY2F0ICIkZXhwb3J0X3N5bWJvbHMiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiCi0rICAgICAgICAgICAgICAgIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCi0rICAgICAgICAgICAgICAgIGV2YWwgJ2NhdCAiJGV4cG9ydF9zeW1ib2xzIiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKLSAJICAgICAgICA7OwotIAkgICAgICBlc2FjCi0gCSAgICB9Ci0gCSAgZWxzZQotIAkgICAgJG9wdF9kcnlfcnVuIHx8IHsKLS0JICAgICAgJHtTRUR9IC1lICdzL1woW10uWypeJF1cKS9cXFwxL2cnIC1lICdzL14vIC8nIC1lICdzLyQvJC8nIDwgIiRleHBvcnRfc3ltYm9scyIgPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIgotLQkgICAgICAkR1JFUCAtZiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIiA8ICIkbmxpc3QiID4gIiRubGlzdCJUCi0tCSAgICAgICRNViAiJG5saXN0IlQgIiRubGlzdCIKLSsJICAgICAgZXZhbCAiJHtTRUR9IC1lICdzL1woW10uWypeJF1cKS9cXFxcXDEvZycgLWUgJ3MvXi8gLycgLWUgJ3MvJC8kLyciJyA8ICIkZXhwb3J0X3N5bWJvbHMiID4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCInCi0rCSAgICAgIGV2YWwgJyRHUkVQIC1mICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlQnCi0rCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCi0gCSAgICAgIGNhc2UgJGhvc3QgaW4KLSAJICAgICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKLS0JICAgICAgICAgIGVjaG8gRVhQT1JUUyA+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiCi0tCSAgICAgICAgICBjYXQgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiIKLSsJICAgICAgICAgIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCi0rCSAgICAgICAgICBldmFsICdjYXQgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCi0gCSAgICAgICAgICA7OwotIAkgICAgICBlc2FjCi0gCSAgICB9Ci1AQCAtMjYyMCwxMCArMzM1Miw1MiBAQCBleHRlcm4gXCJDXCIgewotIAkgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkZGxwcmVmaWxlJyIKLSAJICBmdW5jX2Jhc2VuYW1lICIkZGxwcmVmaWxlIgotIAkgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLS0JICAkb3B0X2RyeV9ydW4gfHwgewotLQkgICAgJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IgotLQkgICAgZXZhbCAiJE5NICRkbHByZWZpbGUgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgotLQkgIH0KLSsgICAgICAgICAgY2FzZSAkaG9zdCBpbgotKwkgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCi0rCSAgICAgICMgaWYgYW4gaW1wb3J0IGxpYnJhcnksIHdlIG5lZWQgdG8gb2J0YWluIGRsbmFtZQotKwkgICAgICBpZiBmdW5jX3dpbjMyX2ltcG9ydF9saWJfcCAiJGRscHJlZmlsZSI7IHRoZW4KLSsJICAgICAgICBmdW5jX3RyX3NoICIkZGxwcmVmaWxlIgotKwkgICAgICAgIGV2YWwgImN1cnJfbGFmaWxlPVwkbGliZmlsZV8kZnVuY190cl9zaF9yZXN1bHQiCi0rCSAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9IiIKLSsJICAgICAgICBpZiB0ZXN0IC1uICIkY3Vycl9sYWZpbGUiICYmIGZ1bmNfbGFsaWJfcCAiJGN1cnJfbGFmaWxlIjsgdGhlbgotKwkgICAgICAgICAgIyBVc2Ugc3Vic2hlbGwsIHRvIGF2b2lkIGNsb2JiZXJpbmcgY3VycmVudCB2YXJpYWJsZSB2YWx1ZXMKLSsJICAgICAgICAgIGRscHJlZmlsZV9kbG5hbWU9YHNvdXJjZSAiJGN1cnJfbGFmaWxlIiAmJiBlY2hvICIkZGxuYW1lImAKLSsJICAgICAgICAgIGlmIHRlc3QgLW4gIiRkbHByZWZpbGVfZGxuYW1lIiA7IHRoZW4KLSsJICAgICAgICAgICAgZnVuY19iYXNlbmFtZSAiJGRscHJlZmlsZV9kbG5hbWUiCi0rCSAgICAgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0rCSAgICAgICAgICBlbHNlCi0rCSAgICAgICAgICAgICMgbm8gbGFmaWxlLiB1c2VyIGV4cGxpY2l0bHkgcmVxdWVzdGVkIC1kbHByZW9wZW4gPGltcG9ydCBsaWJyYXJ5Pi4KLSsJICAgICAgICAgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kICIkZGxwcmVmaWxlIgotKwkgICAgICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0kc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKLSsJICAgICAgICAgIGZpCi0rCSAgICAgICAgZmkKLSsJICAgICAgICAkb3B0X2RyeV9ydW4gfHwgewotKwkgICAgICAgICAgaWYgdGVzdCAtbiAiJGRscHJlZmlsZV9kbGJhc2VuYW1lIiA7IHRoZW4KLSsJICAgICAgICAgICAgZXZhbCAnJEVDSE8gIjogJGRscHJlZmlsZV9kbGJhc2VuYW1lIiA+PiAiJG5saXN0IicKLSsJICAgICAgICAgIGVsc2UKLSsJICAgICAgICAgICAgZnVuY193YXJuaW5nICJDb3VsZCBub3QgY29tcHV0ZSBETEwgbmFtZSBmcm9tICRuYW1lIgotKwkgICAgICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJwotKwkgICAgICAgICAgZmkKLSsJICAgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkZGxwcmVmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgotKwkgICAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8Ci0rCSAgICAgICAgICAgICRTRUQgLWUgJy9JIF9faW1wL2QnIC1lICdzL0kgX19ubV8vRCAvO3MvX25tX18vLycgPj4gJyRubGlzdCciCi0rCSAgICAgICAgfQotKwkgICAgICBlbHNlICMgbm90IGFuIGltcG9ydCBsaWIKLSsJICAgICAgICAkb3B0X2RyeV9ydW4gfHwgewotKwkgICAgICAgICAgZXZhbCAnJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IicKLSsJICAgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkZGxwcmVmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgotKwkgICAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKLSsJICAgICAgICB9Ci0rCSAgICAgIGZpCi0rCSAgICA7OwotKwkgICAgKikKLSsJICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKLSsJICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJwotKwkgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkZGxwcmVmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgotKwkgICAgICAgIGV2YWwgIiROTSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCi0rCSAgICAgIH0KLSsJICAgIDs7Ci0rICAgICAgICAgIGVzYWMKLSAJZG9uZQotIAotIAkkb3B0X2RyeV9ydW4gfHwgewotQEAgLTI2NjEsMjYgKzM0MzUsOSBAQCB0eXBlZGVmIHN0cnVjdCB7Ci0gICBjb25zdCBjaGFyICpuYW1lOwotICAgdm9pZCAqYWRkcmVzczsKLSB9IGx0X2Rsc3ltbGlzdDsKLS0iCi0tCSAgY2FzZSAkaG9zdCBpbgotLQkgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQotLQkgICAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKLS0vKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlCi0tICAgcnVudGltZSByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24KLS0gICBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8iCi0tCSAgICBsdF9kbHN5bV9jb25zdD0gOzsKLS0JICAqb3NmNSopCi0tCSAgICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAotLS8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEgKi8iCi0tCSAgICBsdF9kbHN5bV9jb25zdD0gOzsKLS0JICAqKQotLQkgICAgbHRfZGxzeW1fY29uc3Q9Y29uc3QgOzsKLS0JICBlc2FjCi0tCi0tCSAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKLS1leHRlcm4gJGx0X2Rsc3ltX2NvbnN0IGx0X2Rsc3ltbGlzdAotK2V4dGVybiBMVF9ETFNZTV9DT05TVCBsdF9kbHN5bWxpc3QKLSBsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW107Ci0tJGx0X2Rsc3ltX2NvbnN0IGx0X2Rsc3ltbGlzdAotK0xUX0RMU1lNX0NPTlNUIGx0X2Rsc3ltbGlzdAotIGx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXSA9Ci0ge1wKLSAgIHsgXCIkbXlfb3JpZ2luYXRvclwiLCAodm9pZCAqKSAwIH0sIgotQEAgLTI3MzYsNyArMzQ5Myw3IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7Ci0gCWZvciBhcmcgaW4gJExUQ0ZMQUdTOyBkbwotIAkgIGNhc2UgJGFyZyBpbgotIAkgIC1waWUgfCAtZnBpZSB8IC1mUElFKSA7OwotLQkgICopIHN5bXRhYl9jZmxhZ3M9IiRzeW10YWJfY2ZsYWdzICRhcmciIDs7Ci0rCSAgKikgZnVuY19hcHBlbmQgc3ltdGFiX2NmbGFncyAiICRhcmciIDs7Ci0gCSAgZXNhYwotIAlkb25lCi0gCi1AQCAtMjc5Niw5ICszNTUzLDExIEBAIGZ1bmNfd2luMzJfbGliaWQgKCkKLSAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0IgotICAgICA7OwotICAgKmFyXCBhcmNoaXZlKikgIyBjb3VsZCBiZSBhbiBpbXBvcnQsIG9yIHN0YXRpYwotLSAgICBpZiAkT0JKRFVNUCAtZiAiJDEiIHwgJFNFRCAtZSAnMTBxJyAyPi9kZXYvbnVsbCB8Ci0tICAgICAgICRFR1JFUCAnZmlsZSBmb3JtYXQgKHBlLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScgPi9kZXYvbnVsbDsgdGhlbgotLSAgICAgIHdpbjMyX25tcmVzPWAkTk0gLWYgcG9zaXggLUEgIiQxIiB8Ci0rICAgICMgS2VlcCB0aGUgZWdyZXAgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9ELgotKyAgICBpZiBldmFsICRPQkpEVU1QIC1mICQxIHwgJFNFRCAtZSAnMTBxJyAyPi9kZXYvbnVsbCB8Ci0rICAgICAgICRFR1JFUCAnZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJyA+L2Rldi9udWxsOyB0aGVuCi0rICAgICAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgotKyAgICAgIHdpbjMyX25tcmVzPWBldmFsICROTSAtZiBwb3NpeCAtQSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiB8Ci0gCSRTRUQgLW4gLWUgJwotIAkgICAgMSwxMDB7Ci0gCQkvIEkgL3sKLUBAIC0yODI3LDYgKzM1ODYsMTMxIEBAIGZ1bmNfd2luMzJfbGliaWQgKCkKLSAgICRFQ0hPICIkd2luMzJfbGliaWRfdHlwZSIKLSB9Ci0gCi0rIyBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIgQVJHCi0rIwotKyMgUGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUKLSsjIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZAotKyMgaW1wb3J0IGxpYnJhcnkgQVJHLgotKyMgSW52b2tlZCBieSBldmFsJ2luZyB0aGUgbGlidG9vbCB2YXJpYWJsZQotKyMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCi0rIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluIHRoZSB2YXJpYWJsZQotKyMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0Ci0rZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliICgpCi0rewotKyAgJG9wdF9kZWJ1ZwotKyAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YCRETExUT09MIC0taWRlbnRpZnktc3RyaWN0IC0taWRlbnRpZnkgIiQxImAKLSt9Ci0rCi0rIyBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSBTRUNUSU9OX05BTUUgTElCTkFNRXMKLSsjCi0rIyBUaGUgaXMgdGhlIGNvcmUgb2YgYSBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBvZiBhCi0rIyBwbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSBuYW1lIG9mIHRoZQotKyMgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGltcG9ydCBsaWJyYXJ5IExJQk5BTUUuCi0rIwotKyMgU0VDVElPTl9OQU1FIGlzIGVpdGhlciAuaWRhdGEkNiBvciAuaWRhdGEkNywgZGVwZW5kaW5nCi0rIyBvbiB0aGUgcGxhdGZvcm0gYW5kIGNvbXBpbGVyIHRoYXQgY3JlYXRlZCB0aGUgaW1wbGliLgotKyMKLSsjIEVjaG9zIHRoZSBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZQotKyMgc3BlY2lmaWVkIGltcG9ydCBsaWJyYXJ5LgotK2Z1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICgpCi0rewotKyAgJG9wdF9kZWJ1ZwotKyAgbWF0Y2hfbGl0ZXJhbD1gJEVDSE8gIiQxIiB8ICRTRUQgIiRzZWRfbWFrZV9saXRlcmFsX3JlZ2V4ImAKLSsgICRPQkpEVU1QIC1zIC0tc2VjdGlvbiAiJDEiICIkMiIgMj4vZGV2L251bGwgfAotKyAgICAkU0VEICcvXkNvbnRlbnRzIG9mIHNlY3Rpb24gJyIkbWF0Y2hfbGl0ZXJhbCInOi97Ci0rICAgICAgIyBQbGFjZSBtYXJrZXIgYXQgYmVnaW5uaW5nIG9mIGFyY2hpdmUgbWVtYmVyIGRsbG5hbWUgc2VjdGlvbgotKyAgICAgIHMvLiovPT09PU1BUks9PT09LwotKyAgICAgIHAKLSsgICAgICBkCi0rICAgIH0KLSsgICAgIyBUaGVzZSBsaW5lcyBjYW4gc29tZXRpbWVzIGJlIGxvbmdlciB0aGFuIDQzIGNoYXJhY3RlcnMsIGJ1dAotKyAgICAjIGFyZSBhbHdheXMgdW5pbnRlcmVzdGluZwotKyAgICAvOlsJIF0qZmlsZSBmb3JtYXQgcGVbaV1ceywxXH0tL2QKLSsgICAgL15JbiBhcmNoaXZlIFteOl0qOi9kCi0rICAgICMgRW5zdXJlIG1hcmtlciBpcyBwcmludGVkCi0rICAgIC9ePT09PU1BUks9PT09L3AKLSsgICAgIyBSZW1vdmUgYWxsIGxpbmVzIHdpdGggbGVzcyB0aGFuIDQzIGNoYXJhY3RlcnMKLSsgICAgL14uXHs0M1x9LyFkCi0rICAgICMgRnJvbSByZW1haW5pbmcgbGluZXMsIHJlbW92ZSBmaXJzdCA0MyBjaGFyYWN0ZXJzCi0rICAgIHMvXi5cezQzXH0vLycgfAotKyAgICAkU0VEIC1uICcKLSsgICAgICAjIEpvaW4gbWFya2VyIGFuZCBhbGwgbGluZXMgdW50aWwgbmV4dCBtYXJrZXIgaW50byBhIHNpbmdsZSBsaW5lCi0rICAgICAgL149PT09TUFSSz09PT0vIGIgcGFyYQotKyAgICAgIEgKLSsgICAgICAkIGIgcGFyYQotKyAgICAgIGIKLSsgICAgICA6cGFyYQotKyAgICAgIHgKLSsgICAgICBzL1xuLy9nCi0rICAgICAgIyBSZW1vdmUgdGhlIG1hcmtlcgotKyAgICAgIHMvXj09PT1NQVJLPT09PS8vCi0rICAgICAgIyBSZW1vdmUgdHJhaWxpbmcgZG90cyBhbmQgd2hpdGVzcGFjZQotKyAgICAgIHMvW1wuIFx0XSokLy8KLSsgICAgICAjIFByaW50Ci0rICAgICAgLy4vcCcgfAotKyAgICAjIHdlIG5vdyBoYXZlIGEgbGlzdCwgb25lIGVudHJ5IHBlciBsaW5lLCBvZiB0aGUgc3RyaW5naWZpZWQKLSsgICAgIyBjb250ZW50cyBvZiB0aGUgYXBwcm9wcmlhdGUgc2VjdGlvbiBvZiBhbGwgbWVtYmVycyBvZiB0aGUKLSsgICAgIyBhcmNoaXZlIHdoaWNoIHBvc3Nlc3MgdGhhdCBzZWN0aW9uLiBIZXVyaXN0aWM6IGVsaW1pbmF0ZQotKyAgICAjIGFsbCB0aG9zZSB3aGljaCBoYXZlIGEgZmlyc3Qgb3Igc2Vjb25kIGNoYXJhY3RlciB0aGF0IGlzCi0rICAgICMgYSAnLicgKHRoYXQgaXMsIG9iamR1bXAncyByZXByZXNlbnRhdGlvbiBvZiBhbiB1bnByaW50YWJsZQotKyAgICAjIGNoYXJhY3Rlci4pIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGFsbCBhcmNoaXZlcyB3aXRoIGxlc3MgdGhhbgotKyAgICAjIDB4MzAyZiBleHBvcnRzIC0tIGJ1dCB3aWxsIGZhaWwgZm9yIERMTHMgd2hvc2UgbmFtZSBhY3R1YWxseQotKyAgICAjIGJlZ2lucyB3aXRoIGEgbGl0ZXJhbCAnLicgb3IgYSBzaW5nbGUgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5Ci0rICAgICMgYSAnLicuCi0rICAgICMKLSsgICAgIyBPZiB0aG9zZSB0aGF0IHJlbWFpbiwgcHJpbnQgdGhlIGZpcnN0IG9uZS4KLSsgICAgJFNFRCAtZSAnL15cLi9kOy9eLlwuL2Q7cScKLSt9Ci0rCi0rIyBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wIEFSRwotKyMgVGhpcyBwcmVkaWNhdGUgcmV0dXJucyB3aXRoIHplcm8gc3RhdHVzIChUUlVFKSBpZgotKyMgQVJHIGlzIGEgR05VL2JpbnV0aWxzLXN0eWxlIGltcG9ydCBsaWJyYXJ5LiBSZXR1cm5zCi0rIyB3aXRoIG5vbnplcm8gc3RhdHVzIChGQUxTRSkgb3RoZXJ3aXNlLgotK2Z1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgKCkKLSt7Ci0rICAkb3B0X2RlYnVnCi0rICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0rICBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl90bXA9YCROTSAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgfCBldmFsICIkZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRFR1JFUCAnIChfaGVhZF9bQS1aYS16MC05X10rX1thZF1sKnxbQS1aYS16MC05X10rX1thZF1sKl9pbmFtZSkkJ2AKLSsgIHRlc3QgLW4gIiRmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl90bXAiCi0rfQotKwotKyMgZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wIEFSRwotKyMgVGhpcyBwcmVkaWNhdGUgcmV0dXJucyB3aXRoIHplcm8gc3RhdHVzIChUUlVFKSBpZgotKyMgQVJHIGlzIGFuIE1TLXN0eWxlIGltcG9ydCBsaWJyYXJ5LiBSZXR1cm5zCi0rIyB3aXRoIG5vbnplcm8gc3RhdHVzIChGQUxTRSkgb3RoZXJ3aXNlLgotK2Z1bmNfY3lnbWluZ19tc19pbXBsaWJfcCAoKQotK3sKLSsgICRvcHRfZGVidWcKLSsgIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLSsgIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfdG1wPWAkTk0gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiIHwgZXZhbCAiJGdsb2JhbF9zeW1ib2xfcGlwZSIgfCAkR1JFUCAnX05VTExfSU1QT1JUX0RFU0NSSVBUT1InYAotKyAgdGVzdCAtbiAiJGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfdG1wIgotK30KLSsKLSsjIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjayBBUkcKLSsjIFBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlCi0rIyBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQKLSsjIGltcG9ydCBsaWJyYXJ5IEFSRy4KLSsjCi0rIyBUaGlzIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uIGlzIGZvciB1c2Ugd2hlbiAkRExMVE9PTAotKyMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgLS1pZGVudGlmeS1zdHJpY3Qgb3B0aW9uLgotKyMgSW52b2tlZCBieSBldmFsJ2luZyB0aGUgbGlidG9vbCB2YXJpYWJsZQotKyMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCi0rIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluIHRoZSB2YXJpYWJsZQotKyMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0Ci0rZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrICgpCi0rewotKyAgJG9wdF9kZWJ1ZwotKyAgaWYgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCAiJDEiIDsgdGhlbgotKyAgICAjIGJpbnV0aWxzIGltcG9ydCBsaWJyYXJ5Ci0rICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAnLmlkYXRhJDcnICIkMSJgCi0rICBlbGlmIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfcCAiJDEiIDsgdGhlbgotKyAgICAjIG1zLWdlbmVyYXRlZCBpbXBvcnQgbGlicmFyeQotKyAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgJy5pZGF0YSQ2JyAiJDEiYAotKyAgZWxzZQotKyAgICAjIHVua25vd24KLSsgICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9IiIKLSsgIGZpCi0rfQotIAotIAotICMgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgZGlyIG9sZGxpYgotQEAgLTI5MTcsNyArMzgwMSw3IEBAIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAoKQotIAkgICAgZGFyd2luX2ZpbGU9Ci0gCSAgICBkYXJ3aW5fZmlsZXM9Ci0gCSAgICBmb3IgZGFyd2luX2ZpbGUgaW4gJGRhcndpbl9maWxlbGlzdDsgZG8KLS0JICAgICAgZGFyd2luX2ZpbGVzPWBmaW5kIHVuZmF0LSQkIC1uYW1lICRkYXJ3aW5fZmlsZSAtcHJpbnQgfCAkTkwyU1BgCi0rCSAgICAgIGRhcndpbl9maWxlcz1gZmluZCB1bmZhdC0kJCAtbmFtZSAkZGFyd2luX2ZpbGUgLXByaW50IHwgc29ydCB8ICROTDJTUGAKLSAJICAgICAgJExJUE8gLWNyZWF0ZSAtb3V0cHV0ICIkZGFyd2luX2ZpbGUiICRkYXJ3aW5fZmlsZXMKLSAJICAgIGRvbmUgIyAkZGFyd2luX2ZpbGVsaXN0Ci0gCSAgICAkUk0gLXJmIHVuZmF0LSQkCi1AQCAtMjkzMiw3ICszODE2LDcgQEAgZnVuY19leHRyYWN0X2FyY2hpdmVzICgpCi0gICAgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiJG15X3hkaXIiICIkbXlfeGFicyIKLSAJOzsKLSAgICAgICBlc2FjCi0tICAgICAgbXlfb2xkb2Jqcz0iJG15X29sZG9ianMgImBmaW5kICRteV94ZGlyIC1uYW1lIFwqLiRvYmpleHQgLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8ICROTDJTUGAKLSsgICAgICBteV9vbGRvYmpzPSIkbXlfb2xkb2JqcyAiYGZpbmQgJG15X3hkaXIgLW5hbWUgXCouJG9iamV4dCAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgc29ydCB8ICROTDJTUGAKLSAgICAgZG9uZQotIAotICAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0PSIkbXlfb2xkb2JqcyIKLUBAIC0zMDE0LDcgKzM4OTgsMTEwIEBAIGZ1bmNfZmFsbGJhY2tfZWNobyAoKQotIF9MVEVDSE9fRU9GJwotIH0KLSAgICAgRUNITz1cIiRxRUNIT1wiCi0tICBmaVwKLSsgIGZpCi0rCi0rIyBWZXJ5IGJhc2ljIG9wdGlvbiBwYXJzaW5nLiBUaGVzZSBvcHRpb25zIGFyZSAoYSkgc3BlY2lmaWMgdG8KLSsjIHRoZSBsaWJ0b29sIHdyYXBwZXIsIChiKSBhcmUgaWRlbnRpY2FsIGJldHdlZW4gdGhlIHdyYXBwZXIKLSsjIC9zY3JpcHQvIGFuZCB0aGUgd3JhcHBlciAvZXhlY3V0YWJsZS8gd2hpY2ggaXMgdXNlZCBvbmx5IG9uCi0rIyB3aW5kb3dzIHBsYXRmb3JtcywgYW5kIChjKSBhbGwgYmVnaW4gd2l0aCB0aGUgc3RyaW5nICItLWx0LSIKLSsjIChhcHBsaWNhdGlvbiBwcm9ncmFtcyBhcmUgdW5saWtlbHkgdG8gaGF2ZSBvcHRpb25zIHdoaWNoIG1hdGNoCi0rIyB0aGlzIHBhdHRlcm4pLgotKyMKLSsjIFRoZXJlIGFyZSBvbmx5IHR3byBzdXBwb3J0ZWQgb3B0aW9uczogLS1sdC1kZWJ1ZyBhbmQKLSsjIC0tbHQtZHVtcC1zY3JpcHQuIFRoZXJlIGlzLCBkZWxpYmVyYXRlbHksIG5vIC0tbHQtaGVscC4KLSsjCi0rIyBUaGUgZmlyc3QgYXJndW1lbnQgdG8gdGhpcyBwYXJzaW5nIGZ1bmN0aW9uIHNob3VsZCBiZSB0aGUKLSsjIHNjcmlwdCdzICQwIHZhbHVlLCBmb2xsb3dlZCBieSAiJEAiLgotK2x0X29wdGlvbl9kZWJ1Zz0KLStmdW5jX3BhcnNlX2x0X29wdGlvbnMgKCkKLSt7Ci0rICBsdF9zY3JpcHRfYXJnMD1cJDAKLSsgIHNoaWZ0Ci0rICBmb3IgbHRfb3B0Ci0rICBkbwotKyAgICBjYXNlIFwiXCRsdF9vcHRcIiBpbgotKyAgICAtLWx0LWRlYnVnKSBsdF9vcHRpb25fZGVidWc9MSA7OwotKyAgICAtLWx0LWR1bXAtc2NyaXB0KQotKyAgICAgICAgbHRfZHVtcF9EPVxgXCRFQ0hPIFwiWFwkbHRfc2NyaXB0X2FyZzBcIiB8ICRTRUQgLWUgJ3MvXlgvLycgLWUgJ3MlL1teL10qJCUlJ1xgCi0rICAgICAgICB0ZXN0IFwiWFwkbHRfZHVtcF9EXCIgPSBcIlhcJGx0X3NjcmlwdF9hcmcwXCIgJiYgbHRfZHVtcF9EPS4KLSsgICAgICAgIGx0X2R1bXBfRj1cYFwkRUNITyBcIlhcJGx0X3NjcmlwdF9hcmcwXCIgfCAkU0VEIC1lICdzL15YLy8nIC1lICdzJV4uKi8lJSdcYAotKyAgICAgICAgY2F0IFwiXCRsdF9kdW1wX0QvXCRsdF9kdW1wX0ZcIgotKyAgICAgICAgZXhpdCAwCi0rICAgICAgOzsKLSsgICAgLS1sdC0qKQotKyAgICAgICAgXCRFQ0hPIFwiVW5yZWNvZ25pemVkIC0tbHQtIG9wdGlvbjogJ1wkbHRfb3B0J1wiIDE+JjIKLSsgICAgICAgIGV4aXQgMQotKyAgICAgIDs7Ci0rICAgIGVzYWMKLSsgIGRvbmUKLSsKLSsgICMgUHJpbnQgdGhlIGRlYnVnIGJhbm5lciBpbW1lZGlhdGVseToKLSsgIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCi0rICAgIGVjaG8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBsaWJ0b29sIHdyYXBwZXIgKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OXCIgMT4mMgotKyAgZmkKLSt9Ci0rCi0rIyBVc2VkIHdoZW4gLS1sdC1kZWJ1Zy4gUHJpbnRzIGl0cyBhcmd1bWVudHMgdG8gc3Rkb3V0Ci0rIyAocmVkaXJlY3Rpb24gaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIpCi0rZnVuY19sdF9kdW1wX2FyZ3MgKCkKLSt7Ci0rICBsdF9kdW1wX2FyZ3NfTj0xOwotKyAgZm9yIGx0X2FyZwotKyAgZG8KLSsgICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndltcJGx0X2R1bXBfYXJnc19OXTogXCRsdF9hcmdcIgotKyAgICBsdF9kdW1wX2FyZ3NfTj1cYGV4cHIgXCRsdF9kdW1wX2FyZ3NfTiArIDFcYAotKyAgZG9uZQotK30KLSsKLSsjIENvcmUgZnVuY3Rpb24gZm9yIGxhdW5jaGluZyB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uCi0rZnVuY19leGVjX3Byb2dyYW1fY29yZSAoKQotK3sKLSsiCi0rICBjYXNlICRob3N0IGluCi0rICAjIEJhY2tzbGFzaGVzIHNlcGFyYXRlIGRpcmVjdG9yaWVzIG9uIHBsYWluIHdpbmRvd3MKLSsgICotKi1taW5ndyB8ICotKi1vczIqIHwgKi1jZWdjYyopCi0rICAgICRFQ0hPICJcCi0rICAgICAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KLSsgICAgICAgIFwkRUNITyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IG5ld2FyZ3ZbMF06IFwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiAxPiYyCi0rICAgICAgICBmdW5jX2x0X2R1bXBfYXJncyBcJHsxK1wiXCRAXCJ9IDE+JjIKLSsgICAgICBmaQotKyAgICAgIGV4ZWMgXCJcJHByb2dkaXJcXFxcXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQotKyIKLSsgICAgOzsKLSsKLSsgICopCi0rICAgICRFQ0hPICJcCi0rICAgICAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KLSsgICAgICAgIFwkRUNITyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IG5ld2FyZ3ZbMF06IFwkcHJvZ2Rpci9cJHByb2dyYW1cIiAxPiYyCi0rICAgICAgICBmdW5jX2x0X2R1bXBfYXJncyBcJHsxK1wiXCRAXCJ9IDE+JjIKLSsgICAgICBmaQotKyAgICAgIGV4ZWMgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQotKyIKLSsgICAgOzsKLSsgIGVzYWMKLSsgICRFQ0hPICJcCi0rICAgICAgXCRFQ0hPIFwiXCQwOiBjYW5ub3QgZXhlYyBcJHByb2dyYW0gXCQqXCIgMT4mMgotKyAgICAgIGV4aXQgMQotK30KLSsKLSsjIEEgZnVuY3Rpb24gdG8gZW5jYXBzdWxhdGUgbGF1bmNoaW5nIHRoZSB0YXJnZXQgYXBwbGljYXRpb24KLSsjIFN0cmlwcyBvcHRpb25zIGluIHRoZSAtLWx0LSogbmFtZXNwYWNlIGZyb20gXCRAIGFuZAotKyMgbGF1bmNoZXMgdGFyZ2V0IGFwcGxpY2F0aW9uIHdpdGggdGhlIHJlbWFpbmluZyBhcmd1bWVudHMuCi0rZnVuY19leGVjX3Byb2dyYW0gKCkKLSt7Ci0rICBmb3IgbHRfd3JfYXJnCi0rICBkbwotKyAgICBjYXNlIFwkbHRfd3JfYXJnIGluCi0rICAgIC0tbHQtKikgOzsKLSsgICAgKikgc2V0IHggXCJcJEBcIiBcIlwkbHRfd3JfYXJnXCI7IHNoaWZ0OzsKLSsgICAgZXNhYwotKyAgICBzaGlmdAotKyAgZG9uZQotKyAgZnVuY19leGVjX3Byb2dyYW1fY29yZSBcJHsxK1wiXCRAXCJ9Ci0rfQotKwotKyAgIyBQYXJzZSBvcHRpb25zCi0rICBmdW5jX3BhcnNlX2x0X29wdGlvbnMgXCJcJDBcIiBcJHsxK1wiXCRAXCJ9Ci0gCi0gICAjIEZpbmQgdGhlIGRpcmVjdG9yeSB0aGF0IHRoaXMgc2NyaXB0IGxpdmVzIGluLgotICAgdGhpc2Rpcj1cYFwkRUNITyBcIlwkZmlsZVwiIHwgJFNFRCAncyUvW14vXSokJSUnXGAKLUBAIC0zMDc4LDcgKzQwNjUsNyBAQCBfTFRFQ0hPX0VPRicKLSAKLSAgICAgIyByZWxpbmsgZXhlY3V0YWJsZSBpZiBuZWNlc3NhcnkKLSAgICAgaWYgdGVzdCAtbiBcIlwkcmVsaW5rX2NvbW1hbmRcIjsgdGhlbgotLSAgICAgIGlmIHJlbGlua19jb21tYW5kX291dHB1dD1cYGV2YWwgXCJcJHJlbGlua19jb21tYW5kXCIgMj4mMVxgOyB0aGVuIDoKLSsgICAgICBpZiByZWxpbmtfY29tbWFuZF9vdXRwdXQ9XGBldmFsIFwkcmVsaW5rX2NvbW1hbmQgMj4mMVxgOyB0aGVuIDoKLSAgICAgICBlbHNlCi0gCSRFQ0hPIFwiXCRyZWxpbmtfY29tbWFuZF9vdXRwdXRcIiA+JjIKLSAJJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCi1AQCAtMzEwMiw2ICs0MDg5LDE4IEBAIF9MVEVDSE9fRU9GJwotIAotICAgaWYgdGVzdCAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgdGhlbiIKLSAKLSsJIyBmaXh1cCB0aGUgZGxsIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0by4KLSsJIwotKwkjIEZpeCB0aGUgRExMIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0by4gIERvIHRoaXMgYmVmb3JlIHByZXBlbmRpbmcKLSsJIyB0byBzaGxpYnBhdGgsIGJlY2F1c2Ugb24gV2luZG93cywgYm90aCBhcmUgUEFUSCBhbmQgdW5pbnN0YWxsZWQKLSsJIyBsaWJyYXJpZXMgbXVzdCBjb21lIGZpcnN0LgotKwlpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KLSsJICAkRUNITyAiXAotKyAgICAjIEFkZCB0aGUgZGxsIHNlYXJjaCBwYXRoIGNvbXBvbmVudHMgdG8gdGhlIGV4ZWN1dGFibGUgUEFUSAotKyAgICBQQVRIPSRkbGxzZWFyY2hwYXRoOlwkUEFUSAotKyIKLSsJZmkKLSsKLSAJIyBFeHBvcnQgb3VyIHNobGlicGF0aF92YXIgaWYgd2UgaGF2ZSBvbmUuCi0gCWlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KLSAJICAkRUNITyAiXAotQEAgLTMxMTYsMzUgKzQxMTUsMTAgQEAgX0xURUNIT19FT0YnCi0gIgotIAlmaQotIAotLQkjIGZpeHVwIHRoZSBkbGwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLgotLQlpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KLS0JICAkRUNITyAiXAotLSAgICAjIEFkZCB0aGUgZGxsIHNlYXJjaCBwYXRoIGNvbXBvbmVudHMgdG8gdGhlIGV4ZWN1dGFibGUgUEFUSAotLSAgICBQQVRIPSRkbGxzZWFyY2hwYXRoOlwkUEFUSAotLSIKLS0JZmkKLS0KLSAJJEVDSE8gIlwKLSAgICAgaWYgdGVzdCBcIlwkbGlidG9vbF9leGVjdXRlX21hZ2ljXCIgIT0gXCIkbWFnaWNcIjsgdGhlbgotICAgICAgICMgUnVuIHRoZSBhY3R1YWwgcHJvZ3JhbSB3aXRoIG91ciBhcmd1bWVudHMuCi0tIgotLQljYXNlICRob3N0IGluCi0tCSMgQmFja3NsYXNoZXMgc2VwYXJhdGUgZGlyZWN0b3JpZXMgb24gcGxhaW4gd2luZG93cwotLQkqLSotbWluZ3cgfCAqLSotb3MyKiB8ICotY2VnY2MqKQotLQkgICRFQ0hPICJcCi0tICAgICAgZXhlYyBcIlwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9Ci0tIgotLQkgIDs7Ci0tCi0tCSopCi0tCSAgJEVDSE8gIlwKLS0gICAgICBleGVjIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KLS0iCi0tCSAgOzsKLS0JZXNhYwotLQkkRUNITyAiXAotLSAgICAgIFwkRUNITyBcIlwkMDogY2Fubm90IGV4ZWMgXCRwcm9ncmFtIFwkKlwiIDE+JjIKLS0gICAgICBleGl0IDEKLSsgICAgICBmdW5jX2V4ZWNfcHJvZ3JhbSBcJHsxK1wiXCRAXCJ9Ci0gICAgIGZpCi0gICBlbHNlCi0gICAgICMgVGhlIHByb2dyYW0gZG9lc24ndCBleGlzdC4KLUBAIC0zMTU4LDE2NiArNDEzMiw2IEBAIGZpXAotIH0KLSAKLSAKLS0jIGZ1bmNfdG9faG9zdF9wYXRoIGFyZwotLSMKLS0jIENvbnZlcnQgcGF0aHMgdG8gaG9zdCBmb3JtYXQgd2hlbiB1c2VkIHdpdGggYnVpbGQgdG9vbHMuCi0tIyBJbnRlbmRlZCBmb3IgdXNlIHdpdGggIm5hdGl2ZSIgbWluZ3cgKHdoZXJlIGxpYnRvb2wgaXRzZWxmCi0tIyBpcyBydW5uaW5nIHVuZGVyIHRoZSBtc3lzIHNoZWxsKSwgb3IgaW4gdGhlIGZvbGxvd2luZyBjcm9zcy0KLS0jIGJ1aWxkIGVudmlyb25tZW50czoKLS0jICAgICRidWlsZCAgICAgICAgICAkaG9zdAotLSMgICAgbWluZ3cgKG1zeXMpICAgIG1pbmd3ICBbZS5nLiBuYXRpdmVdCi0tIyAgICBjeWd3aW4gICAgICAgICAgbWluZ3cKLS0jICAgICpuaXggKyB3aW5lICAgICBtaW5ndwotLSMgd2hlcmUgd2luZSBpcyBlcXVpcHBlZCB3aXRoIHRoZSBgd2luZXBhdGgnIGV4ZWN1dGFibGUuCi0tIyBJbiB0aGUgbmF0aXZlIG1pbmd3IGNhc2UsIHRoZSAobXN5cykgc2hlbGwgYXV0b21hdGljYWxseQotLSMgY29udmVydHMgcGF0aHMgZm9yIGFueSBub24tbXN5cyBhcHBsaWNhdGlvbnMgaXQgbGF1bmNoZXMsCi0tIyBidXQgdGhhdCBmYWNpbGl0eSBpc24ndCBhdmFpbGFibGUgZnJvbSBpbnNpZGUgdGhlIGN3cmFwcGVyLgotLSMgU2ltaWxhciBhY2NvbW1vZGF0aW9ucyBhcmUgbmVjZXNzYXJ5IGZvciAkaG9zdCBtaW5ndyBhbmQKLS0jICRidWlsZCBjeWd3aW4uICBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gZG9lcyBubyBoYXJtIGZvciBvdGhlcgotLSMgJGhvc3QvJGJ1aWxkIGNvbWJpbmF0aW9ucyBub3QgbGlzdGVkIGFib3ZlLgotLSMKLS0jIEFSRyBpcyB0aGUgcGF0aCAob24gJGJ1aWxkKSB0aGF0IHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8KLS0jIHRoZSBwcm9wZXIgcmVwcmVzZW50YXRpb24gZm9yICRob3N0LiBUaGUgcmVzdWx0IGlzIHN0b3JlZAotLSMgaW4gJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KLS1mdW5jX3RvX2hvc3RfcGF0aCAoKQotLXsKLS0gIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCi0tICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLS0gICAgY2FzZSAkaG9zdCBpbgotLSAgICAgICptaW5ndyogKQotLSAgICAgICAgbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeT0nc3xcXFxcKnxcXHxnO3N8L3xcXHxnO3N8XFx8XFxcXHxnJwotLSAgICAgICAgY2FzZSAkYnVpbGQgaW4KLS0gICAgICAgICAgKm1pbmd3KiApICMgYWN0dWFsbHksIG1zeXMKLS0gICAgICAgICAgICAjIGF3a3dhcmQ6IGNtZCBhcHBlbmRzIHNwYWNlcyB0byByZXN1bHQKLS0gICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YCggY21kIC8vYyBlY2hvICIkMSIgKSAyPi9kZXYvbnVsbCB8Ci0tICAgICAgICAgICAgICAkU0VEIC1lICdzL1sgXSokLy8nIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCi0tICAgICAgICAgICAgOzsKLS0gICAgICAgICAgKmN5Z3dpbiogKQotLSAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gY3lncGF0aCAtdyAiJDEiIHwKLS0JICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAotLSAgICAgICAgICAgIDs7Ci0tICAgICAgICAgICogKQotLSAgICAgICAgICAgICMgVW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lcyBub3QgZXhpdCB3aXRoIGEgbm9uLXplcm8KLS0gICAgICAgICAgICAjIGVycm9yIGNvZGUsIHNvIHdlIGFyZSBmb3JjZWQgdG8gY2hlY2sgdGhlIGNvbnRlbnRzIG9mCi0tICAgICAgICAgICAgIyBzdGRvdXQuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgY29tbWFuZCBpcyBub3QKLS0gICAgICAgICAgICAjIGZvdW5kLCB0aGUgc2hlbGwgd2lsbCBzZXQgYW4gZXhpdCBjb2RlIG9mIDEyNyBhbmQgcHJpbnQKLS0gICAgICAgICAgICAjICphbiBlcnJvciBtZXNzYWdlKiB0byBzdGRvdXQuIFNvIHdlIG11c3QgY2hlY2sgZm9yIGJvdGgKLS0gICAgICAgICAgICAjIGVycm9yIGNvZGUgb2YgemVybyBBTkQgbm9uLWVtcHR5IHN0ZG91dCwgd2hpY2ggZXhwbGFpbnMKLS0gICAgICAgICAgICAjIHRoZSBvZGQgY29uc3RydWN0aW9uOgotLSAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9YHdpbmVwYXRoIC13ICIkMSIgMj4vZGV2L251bGxgCi0tICAgICAgICAgICAgaWYgdGVzdCAiJD8iIC1lcSAwICYmIHRlc3QgLW4gIiR7ZnVuY190b19ob3N0X3BhdGhfdG1wMX0iOyB0aGVuCi0tICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YCRFQ0hPICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgfAotLSAgICAgICAgICAgICAgICAkU0VEIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCi0tICAgICAgICAgICAgZWxzZQotLSAgICAgICAgICAgICAgIyBBbGxvdyB3YXJuaW5nIGJlbG93LgotLSAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PQotLSAgICAgICAgICAgIGZpCi0tICAgICAgICAgICAgOzsKLS0gICAgICAgIGVzYWMKLS0gICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiIDsgdGhlbgotLSAgICAgICAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIGhvc3QgcGF0aCBjb3JyZXNwb25kaW5nIHRvIgotLSAgICAgICAgICBmdW5jX2Vycm9yICIgIFxgJDEnIgotLSAgICAgICAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKLS0gICAgICAgICAgIyBGYWxsYmFjazoKLS0gICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKLS0gICAgICAgIGZpCi0tICAgICAgICA7OwotLSAgICBlc2FjCi0tICBmaQotLX0KLS0jIGVuZDogZnVuY190b19ob3N0X3BhdGgKLS0KLS0jIGZ1bmNfdG9faG9zdF9wYXRobGlzdCBhcmcKLS0jCi0tIyBDb252ZXJ0IHBhdGhsaXN0cyB0byBob3N0IGZvcm1hdCB3aGVuIHVzZWQgd2l0aCBidWlsZCB0b29scy4KLS0jIFNlZSBmdW5jX3RvX2hvc3RfcGF0aCgpLCBhYm92ZS4gVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyB0aGUKLS0jIGZvbGxvd2luZyAkYnVpbGQvJGhvc3QgY29tYmluYXRpb25zIChidXQgZG9lcyBubyBoYXJtIGZvcgotLSMgY29tYmluYXRpb25zIG5vdCBsaXN0ZWQgaGVyZSk6Ci0tIyAgICAkYnVpbGQgICAgICAgICAgJGhvc3QKLS0jICAgIG1pbmd3IChtc3lzKSAgICBtaW5ndyAgW2UuZy4gbmF0aXZlXQotLSMgICAgY3lnd2luICAgICAgICAgIG1pbmd3Ci0tIyAgICAqbml4ICsgd2luZSAgICAgbWluZ3cKLS0jCi0tIyBQYXRoIHNlcGFyYXRvcnMgYXJlIGFsc28gY29udmVydGVkIGZyb20gJGJ1aWxkIGZvcm1hdCB0bwotLSMgJGhvc3QgZm9ybWF0LiBJZiBBUkcgYmVnaW5zIG9yIGVuZHMgd2l0aCBhIHBhdGggc2VwYXJhdG9yCi0tIyBjaGFyYWN0ZXIsIGl0IGlzIHByZXNlcnZlZCAoYnV0IGNvbnZlcnRlZCB0byAkaG9zdCBmb3JtYXQpCi0tIyBvbiBvdXRwdXQuCi0tIwotLSMgQVJHIGlzIGEgcGF0aGxpc3QgKG9uICRidWlsZCkgdGhhdCBzaG91bGQgYmUgY29udmVydGVkIHRvCi0tIyB0aGUgcHJvcGVyIHJlcHJlc2VudGF0aW9uIG9uICRob3N0LiBUaGUgcmVzdWx0IGlzIHN0b3JlZAotLSMgaW4gJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQuCi0tZnVuY190b19ob3N0X3BhdGhsaXN0ICgpCi0tewotLSAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD0iJDEiCi0tICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLS0gICAgY2FzZSAkaG9zdCBpbgotLSAgICAgICptaW5ndyogKQotLSAgICAgICAgbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeT0nc3xcXFxcKnxcXHxnO3N8L3xcXHxnO3N8XFx8XFxcXHxnJwotLSAgICAgICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tCi0tICAgICAgICAjIEFSRy4gbXN5cyBiZWhhdmlvciBpcyBpbmNvbnNpc3RlbnQgaGVyZSwgY3lncGF0aCB0dXJucyB0aGVtCi0tICAgICAgICAjIGludG8gJy47JyBhbmQgJzsuJywgYW5kIHdpbmVwYXRoIGlnbm9yZXMgdGhlbSBjb21wbGV0ZWx5LgotLQlmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgotLSAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotLSAgICAgICAgY2FzZSAkYnVpbGQgaW4KLS0gICAgICAgICAgKm1pbmd3KiApICMgQWN0dWFsbHksIG1zeXMuCi0tICAgICAgICAgICAgIyBBd2t3YXJkOiBjbWQgYXBwZW5kcyBzcGFjZXMgdG8gcmVzdWx0LgotLSAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9YAotLQkgICAgICAoIGNtZCAvL2MgZWNobyAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAxIiApIDI+L2Rldi9udWxsIHwKLS0JICAgICAgJFNFRCAtZSAncy9bIF0qJC8vJyAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAotLSAgICAgICAgICAgIDs7Ci0tICAgICAgICAgICpjeWd3aW4qICkKLS0gICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PWBjeWdwYXRoIC13IC1wICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEiIHwKLS0gICAgICAgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKLS0gICAgICAgICAgICA7OwotLSAgICAgICAgICAqICkKLS0gICAgICAgICAgICAjIHVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXNuJ3QgY29udmVydCBwYXRobGlzdHMKLS0gICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSIiCi0tICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X29sZElGUz0kSUZTCi0tICAgICAgICAgICAgSUZTPToKLS0gICAgICAgICAgICBmb3IgZnVuY190b19ob3N0X3BhdGhsaXN0X2YgaW4gJGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAxIDsgZG8KLS0gICAgICAgICAgICAgIElGUz0kZnVuY190b19ob3N0X3BhdGhsaXN0X29sZElGUwotLSAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9mIiA7IHRoZW4KLS0gICAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGggIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfZiIKLS0gICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIgOyB0aGVuCi0tICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiIDsgdGhlbgotLSAgICAgICAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD0iJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKLS0gICAgICAgICAgICAgICAgICBlbHNlCi0tICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0ICI7JGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKLS0gICAgICAgICAgICAgICAgICBmaQotLSAgICAgICAgICAgICAgICBmaQotLSAgICAgICAgICAgICAgZmkKLS0gICAgICAgICAgICBkb25lCi0tICAgICAgICAgICAgSUZTPSRmdW5jX3RvX2hvc3RfcGF0aGxpc3Rfb2xkSUZTCi0tICAgICAgICAgICAgOzsKLS0gICAgICAgIGVzYWMKLS0gICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0IjsgdGhlbgotLSAgICAgICAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBob3N0IHBhdGgocykgY29ycmVzcG9uZGluZyB0byIKLS0gICAgICAgICAgZnVuY19lcnJvciAiICBcYCQxJyIKLS0gICAgICAgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCi0tICAgICAgICAgICMgRmFsbGJhY2suIFRoaXMgbWF5IGJyZWFrIGlmICQxIGNvbnRhaW5zIERPUy1zdHlsZSBkcml2ZQotLSAgICAgICAgICAjIHNwZWNpZmljYXRpb25zLiBUaGUgZml4IGlzIG5vdCB0byBjb21wbGljYXRlIHRoZSBleHByZXNzaW9uCi0tICAgICAgICAgICMgYmVsb3csIGJ1dCBmb3IgdGhlIHVzZXIgdG8gcHJvdmlkZSBhIHdvcmtpbmcgd2luZSBpbnN0YWxsYXRpb24KLS0gICAgICAgICAgIyB3aXRoIHdpbmVwYXRoIHNvIHRoYXQgcGF0aCB0cmFuc2xhdGlvbiBpbiB0aGUgY3Jvc3MtdG8tbWluZ3cKLS0gICAgICAgICAgIyBjYXNlIHdvcmtzIHByb3Blcmx5LgotLSAgICAgICAgICBsdF9yZXBsYWNlX3BhdGhzZXBfbml4X3RvX2Rvcz0ic3w6fDt8ZyIKLS0gICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD1gZWNobyAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAxIiB8XAotLSAgICAgICAgICAgICRTRUQgLWUgIiRsdF9yZXBsYWNlX3BhdGhzZXBfbml4X3RvX2RvcyJgCi0tICAgICAgICBmaQotLSAgICAgICAgIyBOb3csIGFkZCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3JzIGJhY2sKLS0gICAgICAgIGNhc2UgIiQxIiBpbgotLSAgICAgICAgICA6KiApIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9IjskZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCIKLS0gICAgICAgICAgICA7OwotLSAgICAgICAgZXNhYwotLSAgICAgICAgY2FzZSAiJDEiIGluCi0tICAgICAgICAgICo6ICkgZnVuY19hcHBlbmQgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCAiOyIKLS0gICAgICAgICAgICA7OwotLSAgICAgICAgZXNhYwotLSAgICAgICAgOzsKLS0gICAgZXNhYwotLSAgZmkKLS19Ci0tIyBlbmQ6IGZ1bmNfdG9faG9zdF9wYXRobGlzdAotLQotICMgZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYwotICMgZW1pdCB0aGUgc291cmNlIGNvZGUgZm9yIGEgd3JhcHBlciBleGVjdXRhYmxlIG9uIHN0ZG91dAotICMgTXVzdCBPTkxZIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBmdW5jX21vZGVfbGluayBiZWNhdXNlCi1AQCAtMzMzNCwxMCArNDE0OCw2IEBAIGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMgKCkKLSAKLSAgICBUaGlzIHdyYXBwZXIgZXhlY3V0YWJsZSBzaG91bGQgbmV2ZXIgYmUgbW92ZWQgb3V0IG9mIHRoZSBidWlsZCBkaXJlY3RvcnkuCi0gICAgSWYgaXQgaXMsIGl0IHdpbGwgbm90IG9wZXJhdGUgY29ycmVjdGx5LgotLQotLSAgIEN1cnJlbnRseSwgaXQgc2ltcGx5IGV4ZWNzIHRoZSB3cmFwcGVyICpzY3JpcHQqICIkU0hFTEwgJG91dHB1dCIsCi0tICAgYnV0IGNvdWxkIGV2ZW50dWFsbHkgYWJzb3JiIGFsbCBvZiB0aGUgc2NyaXB0cyBmdW5jdGlvbmFsaXR5IGFuZAotLSAgIGV4ZWMgJG9iamRpci8kb3V0cHV0bmFtZSBkaXJlY3RseS4KLSAqLwotIEVPRgotIAkgICAgY2F0IDw8IkVPRiIKLUBAIC0zNDYyLDIyICs0MjcyLDEzIEBAIGludCBzZXRlbnYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOwotICAgaWYgKHN0YWxlKSB7IGZyZWUgKCh2b2lkICopIHN0YWxlKTsgc3RhbGUgPSAwOyB9IFwKLSB9IHdoaWxlICgwKQotIAotLSN1bmRlZiBMVFdSQVBQRVJfREVCVUdQUklOVEYKLS0jaWYgZGVmaW5lZCBMVF9ERUJVR1dSQVBQRVIKLS0jIGRlZmluZSBMVFdSQVBQRVJfREVCVUdQUklOVEYoYXJncykgbHR3cmFwcGVyX2RlYnVncHJpbnRmIGFyZ3MKLS1zdGF0aWMgdm9pZAotLWx0d3JhcHBlcl9kZWJ1Z3ByaW50ZiAoY29uc3QgY2hhciAqZm10LCAuLi4pCi0tewotLSAgICB2YV9saXN0IGFyZ3M7Ci0tICAgIHZhX3N0YXJ0IChhcmdzLCBmbXQpOwotLSAgICAodm9pZCkgdmZwcmludGYgKHN0ZGVyciwgZm10LCBhcmdzKTsKLS0gICAgdmFfZW5kIChhcmdzKTsKLS19Ci0rI2lmIGRlZmluZWQoTFRfREVCVUdXUkFQUEVSKQotK3N0YXRpYyBpbnQgbHRfZGVidWcgPSAxOwotICNlbHNlCi0tIyBkZWZpbmUgTFRXUkFQUEVSX0RFQlVHUFJJTlRGKGFyZ3MpCi0rc3RhdGljIGludCBsdF9kZWJ1ZyA9IDA7Ci0gI2VuZGlmCi0gCi0tY29uc3QgY2hhciAqcHJvZ3JhbV9uYW1lID0gTlVMTDsKLStjb25zdCBjaGFyICpwcm9ncmFtX25hbWUgPSAibGlidG9vbC13cmFwcGVyIjsgLyogaW4gY2FzZSB4c3RyZHVwIGZhaWxzICovCi0gCi0gdm9pZCAqeG1hbGxvYyAoc2l6ZV90IG51bSk7Ci0gY2hhciAqeHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKTsKLUBAIC0zNDg3LDcgKzQyODgsMTAgQEAgY2hhciAqY2hhc2Vfc3ltbGlua3MgKGNvbnN0IGNoYXIgKnBhdGhzcGVjKTsKLSBpbnQgbWFrZV9leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKTsKLSBpbnQgY2hlY2tfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCk7Ci0gY2hhciAqc3RyZW5kemFwIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCk7Ci0tdm9pZCBsdF9mYXRhbCAoY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKTsKLSt2b2lkIGx0X2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pOwotK3ZvaWQgbHRfZmF0YWwgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pOwotK3N0YXRpYyBjb25zdCBjaGFyICpub25udWxsIChjb25zdCBjaGFyICpzKTsKLStzdGF0aWMgY29uc3QgY2hhciAqbm9uZW1wdHkgKGNvbnN0IGNoYXIgKnMpOwotIHZvaWQgbHRfc2V0ZW52IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7Ci0gY2hhciAqbHRfZXh0ZW5kX3N0ciAoY29uc3QgY2hhciAqb3JpZ192YWx1ZSwgY29uc3QgY2hhciAqYWRkLCBpbnQgdG9fZW5kKTsKLSB2b2lkIGx0X3VwZGF0ZV9leGVfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOwotQEAgLTM0OTcsMTQgKzQzMDEsMTQgQEAgdm9pZCBsdF9kdW1wX3NjcmlwdCAoRklMRSAqZik7Ci0gRU9GCi0gCi0gCSAgICBjYXQgPDxFT0YKLS1jb25zdCBjaGFyICogTUFHSUNfRVhFID0gIiRtYWdpY19leGUiOwotK3ZvbGF0aWxlIGNvbnN0IGNoYXIgKiBNQUdJQ19FWEUgPSAiJG1hZ2ljX2V4ZSI7Ci0gY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBUk5BTUUgPSAiJHNobGlicGF0aF92YXIiOwotIEVPRgotIAotIAkgICAgaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgotLSAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0ICIkdGVtcF9ycGF0aCIKLSsgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoICIkdGVtcF9ycGF0aCIKLSAJICAgICAgY2F0IDw8RU9GCi0tY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiOwotK2NvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiOwotIEVPRgotIAkgICAgZWxzZQotIAkgICAgICBjYXQgPDwiRU9GIgotQEAgLTM1MTMsMTAgKzQzMTcsMTAgQEAgRU9GCi0gCSAgICBmaQotIAotIAkgICAgaWYgdGVzdCAtbiAiJGRsbHNlYXJjaHBhdGgiOyB0aGVuCi0tICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3QgIiRkbGxzZWFyY2hwYXRoOiIKLSsgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoICIkZGxsc2VhcmNocGF0aDoiCi0gCSAgICAgIGNhdCA8PEVPRgotIGNvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQVJOQU1FID0gIlBBVEgiOwotLWNvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0IjsKLStjb25zdCBjaGFyICogRVhFX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IjsKLSBFT0YKLSAJICAgIGVsc2UKLSAJICAgICAgY2F0IDw8IkVPRiIKLUBAIC0zNTM5LDEyICs0MzQzLDEwIEBAIEVPRgotIAkgICAgY2F0IDw8IkVPRiIKLSAKLSAjZGVmaW5lIExUV1JBUFBFUl9PUFRJT05fUFJFRklYICAgICAgICAgIi0tbHQtIgotLSNkZWZpbmUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVhfTEVOR1RIICA1Ci0gCi0tc3RhdGljIGNvbnN0IHNpemVfdCBvcHRfcHJlZml4X2xlbiAgICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVhfTEVOR1RIOwotIHN0YXRpYyBjb25zdCBjaGFyICpsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYOwotLQotIHN0YXRpYyBjb25zdCBjaGFyICpkdW1wc2NyaXB0X29wdCAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJkdW1wLXNjcmlwdCI7Ci0rc3RhdGljIGNvbnN0IGNoYXIgKmRlYnVnX29wdCAgICAgICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImRlYnVnIjsKLSAKLSBpbnQKLSBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotQEAgLTM1NjEsMTAgKzQzNjMsMTMgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSAgIGludCBpOwotIAotICAgcHJvZ3JhbV9uYW1lID0gKGNoYXIgKikgeHN0cmR1cCAoYmFzZV9uYW1lIChhcmd2WzBdKSk7Ci0tICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIGFyZ3ZbMF0gICAgICA6ICVzXG4iLCBhcmd2WzBdKSk7Ci0tICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIHByb2dyYW1fbmFtZSA6ICVzXG4iLCBwcm9ncmFtX25hbWUpKTsKLSsgIG5ld2FyZ3ogPSBYTUFMTE9DIChjaGFyICosIGFyZ2MgKyAxKTsKLSAKLS0gIC8qIHZlcnkgc2ltcGxlIGFyZyBwYXJzaW5nOyBkb24ndCB3YW50IHRvIHJlbHkgb24gZ2V0b3B0ICovCi0rICAvKiB2ZXJ5IHNpbXBsZSBhcmcgcGFyc2luZzsgZG9uJ3Qgd2FudCB0byByZWx5IG9uIGdldG9wdAotKyAgICogYWxzbywgY29weSBhbGwgbm9uIGN3cmFwcGVyIG9wdGlvbnMgdG8gbmV3YXJneiwgZXhjZXB0Ci0rICAgKiBhcmd6WzBdLCB3aGljaCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5Ci0rICAgKi8KLSsgIG5ld2FyZ2M9MDsKLSAgIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCi0gICAgIHsKLSAgICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBkdW1wc2NyaXB0X29wdCkgPT0gMCkKLUBAIC0zNTgxLDIxICs0Mzg2LDU0IEBAIEVPRgotIAkgIGx0X2R1bXBfc2NyaXB0IChzdGRvdXQpOwotIAkgIHJldHVybiAwOwotIAl9Ci0rICAgICAgaWYgKHN0cmNtcCAoYXJndltpXSwgZGVidWdfb3B0KSA9PSAwKQotKwl7Ci0rICAgICAgICAgIGx0X2RlYnVnID0gMTsKLSsgICAgICAgICAgY29udGludWU7Ci0rCX0KLSsgICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCkgPT0gMCkKLSsgICAgICAgIHsKLSsgICAgICAgICAgLyogaG93ZXZlciwgaWYgdGhlcmUgaXMgYW4gb3B0aW9uIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAotKyAgICAgICAgICAgICBuYW1lc3BhY2UsIGJ1dCBpdCBpcyBub3Qgb25lIG9mIHRoZSBvbmVzIHdlIGtub3cgYWJvdXQgYW5kCi0rICAgICAgICAgICAgIGhhdmUgYWxyZWFkeSBkZWFsdCB3aXRoLCBhYm92ZSAoaW5sdWRpbmcgZHVtcC1zY3JpcHQpLCB0aGVuCi0rICAgICAgICAgICAgIHJlcG9ydCBhbiBlcnJvci4gT3RoZXJ3aXNlLCB0YXJnZXRzIG1pZ2h0IGJlZ2luIHRvIGJlbGlldmUKLSsgICAgICAgICAgICAgdGhleSBhcmUgYWxsb3dlZCB0byB1c2Ugb3B0aW9ucyBpbiB0aGUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVgKLSsgICAgICAgICAgICAgbmFtZXNwYWNlLiBUaGUgZmlyc3QgdGltZSBhbnkgdXNlciBjb21wbGFpbnMgYWJvdXQgdGhpcywgd2UnbGwKLSsgICAgICAgICAgICAgbmVlZCB0byBtYWtlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYIGEgY29uZmlndXJlLXRpbWUgb3B0aW9uCi0rICAgICAgICAgICAgIG9yIGEgY29uZmlndXJlLmFjLXNldHRhYmxlIHZhbHVlLgotKyAgICAgICAgICAgKi8KLSsgICAgICAgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywKLSsJCSAgICAidW5yZWNvZ25pemVkICVzIG9wdGlvbjogJyVzJyIsCi0rICAgICAgICAgICAgICAgICAgICBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCwgYXJndltpXSk7Ci0rICAgICAgICB9Ci0rICAgICAgLyogb3RoZXJ3aXNlIC4uLiAqLwotKyAgICAgIG5ld2FyZ3pbKytuZXdhcmdjXSA9IHhzdHJkdXAgKGFyZ3ZbaV0pOwotICAgICB9Ci0rICBuZXdhcmd6WysrbmV3YXJnY10gPSBOVUxMOwotKwotK0VPRgotKwkgICAgY2F0IDw8RU9GCi0rICAvKiBUaGUgR05VIGJhbm5lciBtdXN0IGJlIHRoZSBmaXJzdCBub24tZXJyb3IgZGVidWcgbWVzc2FnZSAqLwotKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgImxpYnRvb2wgd3JhcHBlciAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT05cbiIpOwotK0VPRgotKwkgICAgY2F0IDw8IkVPRiIKLSsgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgYXJndlswXTogJXNcbiIsIGFyZ3ZbMF0pOwotKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBwcm9ncmFtX25hbWU6ICVzXG4iLCBwcm9ncmFtX25hbWUpOwotIAotLSAgbmV3YXJneiA9IFhNQUxMT0MgKGNoYXIgKiwgYXJnYyArIDEpOwotICAgdG1wX3BhdGhzcGVjID0gZmluZF9leGVjdXRhYmxlIChhcmd2WzBdKTsKLSAgIGlmICh0bXBfcGF0aHNwZWMgPT0gTlVMTCkKLS0gICAgbHRfZmF0YWwgKCJDb3VsZG4ndCBmaW5kICVzIiwgYXJndlswXSk7Ci0tICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIGZvdW5kIGV4ZSAoYmVmb3JlIHN5bWxpbmsgY2hhc2UpIGF0IDogJXNcbiIsCi0tCQkJICB0bXBfcGF0aHNwZWMpKTsKLSsgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgImNvdWxkbid0IGZpbmQgJXMiLCBhcmd2WzBdKTsKLSsgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCi0rICAgICAgICAgICAgICAgICAgIihtYWluKSBmb3VuZCBleGUgKGJlZm9yZSBzeW1saW5rIGNoYXNlKSBhdDogJXNcbiIsCi0rCQkgIHRtcF9wYXRoc3BlYyk7Ci0gCi0gICBhY3R1YWxfY3dyYXBwZXJfcGF0aCA9IGNoYXNlX3N5bWxpbmtzICh0bXBfcGF0aHNwZWMpOwotLSAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBmb3VuZCBleGUgKGFmdGVyIHN5bWxpbmsgY2hhc2UpIGF0IDogJXNcbiIsCi0tCQkJICBhY3R1YWxfY3dyYXBwZXJfcGF0aCkpOwotKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKLSsgICAgICAgICAgICAgICAgICAiKG1haW4pIGZvdW5kIGV4ZSAoYWZ0ZXIgc3ltbGluayBjaGFzZSkgYXQ6ICVzXG4iLAotKwkJICBhY3R1YWxfY3dyYXBwZXJfcGF0aCk7Ci0gICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKLSAKLS0gIGFjdHVhbF9jd3JhcHBlcl9uYW1lID0geHN0cmR1cCggYmFzZV9uYW1lIChhY3R1YWxfY3dyYXBwZXJfcGF0aCkpOwotKyAgYWN0dWFsX2N3cmFwcGVyX25hbWUgPSB4c3RyZHVwIChiYXNlX25hbWUgKGFjdHVhbF9jd3JhcHBlcl9wYXRoKSk7Ci0gICBzdHJlbmR6YXAgKGFjdHVhbF9jd3JhcHBlcl9wYXRoLCBhY3R1YWxfY3dyYXBwZXJfbmFtZSk7Ci0gCi0gICAvKiB3cmFwcGVyIG5hbWUgdHJhbnNmb3JtcyAqLwotQEAgLTM2MTMsOCArNDQ1MSw5IEBAIEVPRgotICAgdGFyZ2V0X25hbWUgPSB0bXBfcGF0aHNwZWM7Ci0gICB0bXBfcGF0aHNwZWMgPSAwOwotIAotLSAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBsaWJ0b29sIHRhcmdldCBuYW1lOiAlc1xuIiwKLS0JCQkgIHRhcmdldF9uYW1lKSk7Ci0rICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAotKwkJICAiKG1haW4pIGxpYnRvb2wgdGFyZ2V0IG5hbWU6ICVzXG4iLAotKwkJICB0YXJnZXRfbmFtZSk7Ci0gRU9GCi0gCi0gCSAgICBjYXQgPDxFT0YKLUBAIC0zNjY0LDM1ICs0NTAzLDE5IEBAIEVPRgotIAotICAgbHRfc2V0ZW52ICgiQklOX1NIIiwgInhwZzQiKTsgLyogZm9yIFRydTY0ICovCi0gICBsdF9zZXRlbnYgKCJEVUFMQ0FTRSIsICIxIik7ICAvKiBmb3IgTVNLIHNoICovCi0tICBsdF91cGRhdGVfbGliX3BhdGggKExJQl9QQVRIX1ZBUk5BTUUsIExJQl9QQVRIX1ZBTFVFKTsKLSsgIC8qIFVwZGF0ZSB0aGUgRExMIHNlYXJjaHBhdGguICBFWEVfUEFUSF9WQUxVRSAoJGRsbHNlYXJjaHBhdGgpIG11c3QKLSsgICAgIGJlIHByZXBlbmRlZCBiZWZvcmUgKHRoYXQgaXMsIGFwcGVhciBhZnRlcikgTElCX1BBVEhfVkFMVUUgKCR0ZW1wX3JwYXRoKQotKyAgICAgYmVjYXVzZSBvbiBXaW5kb3dzLCBib3RoICpfVkFSTkFNRXMgYXJlIFBBVEggYnV0IHVuaW5zdGFsbGVkCi0rICAgICBsaWJyYXJpZXMgbXVzdCBjb21lIGZpcnN0LiAqLwotICAgbHRfdXBkYXRlX2V4ZV9wYXRoIChFWEVfUEFUSF9WQVJOQU1FLCBFWEVfUEFUSF9WQUxVRSk7Ci0rICBsdF91cGRhdGVfbGliX3BhdGggKExJQl9QQVRIX1ZBUk5BTUUsIExJQl9QQVRIX1ZBTFVFKTsKLSAKLS0gIG5ld2FyZ2M9MDsKLS0gIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCi0tICAgIHsKLS0gICAgICBpZiAoc3RybmNtcCAoYXJndltpXSwgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgsIG9wdF9wcmVmaXhfbGVuKSA9PSAwKQotLSAgICAgICAgewotLSAgICAgICAgICAvKiBob3dldmVyLCBpZiB0aGVyZSBpcyBhbiBvcHRpb24gaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCi0tICAgICAgICAgICAgIG5hbWVzcGFjZSwgYnV0IGl0IGlzIG5vdCBvbmUgb2YgdGhlIG9uZXMgd2Uga25vdyBhYm91dCBhbmQKLS0gICAgICAgICAgICAgaGF2ZSBhbHJlYWR5IGRlYWx0IHdpdGgsIGFib3ZlIChpbmx1ZGluZyBkdW1wLXNjcmlwdCksIHRoZW4KLS0gICAgICAgICAgICAgcmVwb3J0IGFuIGVycm9yLiBPdGhlcndpc2UsIHRhcmdldHMgbWlnaHQgYmVnaW4gdG8gYmVsaWV2ZQotLSAgICAgICAgICAgICB0aGV5IGFyZSBhbGxvd2VkIHRvIHVzZSBvcHRpb25zIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAotLSAgICAgICAgICAgICBuYW1lc3BhY2UuIFRoZSBmaXJzdCB0aW1lIGFueSB1c2VyIGNvbXBsYWlucyBhYm91dCB0aGlzLCB3ZSdsbAotLSAgICAgICAgICAgICBuZWVkIHRvIG1ha2UgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggYSBjb25maWd1cmUtdGltZSBvcHRpb24KLS0gICAgICAgICAgICAgb3IgYSBjb25maWd1cmUuYWMtc2V0dGFibGUgdmFsdWUuCi0tICAgICAgICAgICAqLwotLSAgICAgICAgICBsdF9mYXRhbCAoIlVucmVjb2duaXplZCBvcHRpb24gaW4gJXMgbmFtZXNwYWNlOiAnJXMnIiwKLS0gICAgICAgICAgICAgICAgICAgIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4LCBhcmd2W2ldKTsKLS0gICAgICAgIH0KLS0gICAgICAvKiBvdGhlcndpc2UgLi4uICovCi0tICAgICAgbmV3YXJnelsrK25ld2FyZ2NdID0geHN0cmR1cCAoYXJndltpXSk7Ci0tICAgIH0KLS0gIG5ld2FyZ3pbKytuZXdhcmdjXSA9IE5VTEw7Ci0tCi0tICBMVFdSQVBQRVJfREVCVUdQUklOVEYgICAgICgoIihtYWluKSBsdF9hcmd2X3plcm8gOiAlc1xuIiwgKGx0X2FyZ3ZfemVybyA/IGx0X2FyZ3ZfemVybyA6ICI8TlVMTD4iKSkpOwotKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBsdF9hcmd2X3plcm86ICVzXG4iLAotKwkJICBub25udWxsIChsdF9hcmd2X3plcm8pKTsKLSAgIGZvciAoaSA9IDA7IGkgPCBuZXdhcmdjOyBpKyspCi0gICAgIHsKLS0gICAgICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIG5ld2FyZ3pbJWRdICAgOiAlc1xuIiwgaSwgKG5ld2FyZ3pbaV0gPyBuZXdhcmd6W2ldIDogIjxOVUxMPiIpKSk7Ci0rICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBuZXdhcmd6WyVkXTogJXNcbiIsCi0rCQkgICAgICBpLCBub25udWxsIChuZXdhcmd6W2ldKSk7Ci0gICAgIH0KLSAKLSBFT0YKLUBAIC0zNzA2LDcgKzQ1MjksOSBAQCBFT0YKLSAgIGlmIChydmFsID09IC0xKQotICAgICB7Ci0gICAgICAgLyogZmFpbGVkIHRvIHN0YXJ0IHByb2Nlc3MgKi8KLS0gICAgICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIGZhaWxlZCB0byBsYXVuY2ggdGFyZ2V0IFwiJXNcIjogZXJybm8gPSAlZFxuIiwgbHRfYXJndl96ZXJvLCBlcnJubykpOwotKyAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCi0rCQkgICAgICAiKG1haW4pIGZhaWxlZCB0byBsYXVuY2ggdGFyZ2V0IFwiJXNcIjogJXNcbiIsCi0rCQkgICAgICBsdF9hcmd2X3plcm8sIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKLSAgICAgICByZXR1cm4gMTI3OwotICAgICB9Ci0gICByZXR1cm4gcnZhbDsKLUBAIC0zNzI4LDcgKzQ1NTMsNyBAQCB4bWFsbG9jIChzaXplX3QgbnVtKQotIHsKLSAgIHZvaWQgKnAgPSAodm9pZCAqKSBtYWxsb2MgKG51bSk7Ci0gICBpZiAoIXApCi0tICAgIGx0X2ZhdGFsICgiTWVtb3J5IGV4aGF1c3RlZCIpOwotKyAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAibWVtb3J5IGV4aGF1c3RlZCIpOwotIAotICAgcmV0dXJuIHA7Ci0gfQotQEAgLTM3NjIsOCArNDU4Nyw4IEBAIGNoZWNrX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpCi0gewotICAgc3RydWN0IHN0YXQgc3Q7Ci0gCi0tICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKGNoZWNrX2V4ZWN1dGFibGUpICA6ICVzXG4iLAotLQkJCSAgcGF0aCA/ICgqcGF0aCA/IHBhdGggOiAiRU1QVFkhIikgOiAiTlVMTCEiKSk7Ci0rICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKGNoZWNrX2V4ZWN1dGFibGUpOiAlc1xuIiwKLSsgICAgICAgICAgICAgICAgICBub25lbXB0eSAocGF0aCkpOwotICAgaWYgKCghcGF0aCkgfHwgKCEqcGF0aCkpCi0gICAgIHJldHVybiAwOwotIAotQEAgLTM3ODAsOCArNDYwNSw4IEBAIG1ha2VfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCkKLSAgIGludCBydmFsID0gMDsKLSAgIHN0cnVjdCBzdGF0IHN0OwotIAotLSAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWtlX2V4ZWN1dGFibGUpICAgOiAlc1xuIiwKLS0JCQkgIHBhdGggPyAoKnBhdGggPyBwYXRoIDogIkVNUFRZISIpIDogIk5VTEwhIikpOwotKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWtlX2V4ZWN1dGFibGUpOiAlc1xuIiwKLSsgICAgICAgICAgICAgICAgICBub25lbXB0eSAocGF0aCkpOwotICAgaWYgKCghcGF0aCkgfHwgKCEqcGF0aCkpCi0gICAgIHJldHVybiAwOwotIAotQEAgLTM4MDcsOCArNDYzMiw4IEBAIGZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqd3JhcHBlcikKLSAgIGludCB0bXBfbGVuOwotICAgY2hhciAqY29uY2F0X25hbWU7Ci0gCi0tICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKGZpbmRfZXhlY3V0YWJsZSkgICA6ICVzXG4iLAotLQkJCSAgd3JhcHBlciA/ICgqd3JhcHBlciA/IHdyYXBwZXIgOiAiRU1QVFkhIikgOiAiTlVMTCEiKSk7Ci0rICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKGZpbmRfZXhlY3V0YWJsZSk6ICVzXG4iLAotKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5ICh3cmFwcGVyKSk7Ci0gCi0gICBpZiAoKHdyYXBwZXIgPT0gTlVMTCkgfHwgKCp3cmFwcGVyID09ICdcMCcpKQotICAgICByZXR1cm4gTlVMTDsKLUBAIC0zODYxLDcgKzQ2ODYsOCBAQCBmaW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKndyYXBwZXIpCi0gCQl7Ci0gCQkgIC8qIGVtcHR5IHBhdGg6IGN1cnJlbnQgZGlyZWN0b3J5ICovCi0gCQkgIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKLS0JCSAgICBsdF9mYXRhbCAoImdldGN3ZCBmYWlsZWQiKTsKLSsJCSAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiZ2V0Y3dkIGZhaWxlZDogJXMiLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKLSAJCSAgdG1wX2xlbiA9IHN0cmxlbiAodG1wKTsKLSAJCSAgY29uY2F0X25hbWUgPQotIAkJICAgIFhNQUxMT0MgKGNoYXIsIHRtcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOwotQEAgLTM4ODYsNyArNDcxMiw4IEBAIGZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqd3JhcHBlcikKLSAgICAgfQotICAgLyogUmVsYXRpdmUgcGF0aCB8IG5vdCBmb3VuZCBpbiBwYXRoOiBwcmVwZW5kIGN3ZCAqLwotICAgaWYgKGdldGN3ZCAodG1wLCBMVF9QQVRITUFYKSA9PSBOVUxMKQotLSAgICBsdF9mYXRhbCAoImdldGN3ZCBmYWlsZWQiKTsKLSsgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgImdldGN3ZCBmYWlsZWQ6ICVzIiwKLSsgICAgICAgICAgICAgIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKLSAgIHRtcF9sZW4gPSBzdHJsZW4gKHRtcCk7Ci0gICBjb25jYXRfbmFtZSA9IFhNQUxMT0MgKGNoYXIsIHRtcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOwotICAgbWVtY3B5IChjb25jYXRfbmFtZSwgdG1wLCB0bXBfbGVuKTsKLUBAIC0zOTEyLDggKzQ3MzksOSBAQCBjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpCi0gICBpbnQgaGFzX3N5bWxpbmtzID0gMDsKLSAgIHdoaWxlIChzdHJsZW4gKHRtcF9wYXRoc3BlYykgJiYgIWhhc19zeW1saW5rcykKLSAgICAgewotLSAgICAgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCJjaGVja2luZyBwYXRoIGNvbXBvbmVudCBmb3Igc3ltbGlua3M6ICVzXG4iLAotLQkJCSAgICAgIHRtcF9wYXRoc3BlYykpOwotKyAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCi0rCQkgICAgICAiY2hlY2tpbmcgcGF0aCBjb21wb25lbnQgZm9yIHN5bWxpbmtzOiAlc1xuIiwKLSsJCSAgICAgIHRtcF9wYXRoc3BlYyk7Ci0gICAgICAgaWYgKGxzdGF0ICh0bXBfcGF0aHNwZWMsICZzKSA9PSAwKQotIAl7Ci0gCSAgaWYgKFNfSVNMTksgKHMuc3RfbW9kZSkgIT0gMCkKLUBAIC0zOTM1LDggKzQ3NjMsOSBAQCBjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpCi0gCX0KLSAgICAgICBlbHNlCi0gCXsKLS0JICBjaGFyICplcnJzdHIgPSBzdHJlcnJvciAoZXJybm8pOwotLQkgIGx0X2ZhdGFsICgiRXJyb3IgYWNjZXNzaW5nIGZpbGUgJXMgKCVzKSIsIHRtcF9wYXRoc3BlYywgZXJyc3RyKTsKLSsJICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAotKwkJICAgICJlcnJvciBhY2Nlc3NpbmcgZmlsZSBcIiVzXCI6ICVzIiwKLSsJCSAgICB0bXBfcGF0aHNwZWMsIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKLSAJfQotICAgICB9Ci0gICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKLUBAIC0zOTQ5LDcgKzQ3NzgsOCBAQCBjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpCi0gICB0bXBfcGF0aHNwZWMgPSByZWFscGF0aCAocGF0aHNwZWMsIGJ1Zik7Ci0gICBpZiAodG1wX3BhdGhzcGVjID09IDApCi0gICAgIHsKLS0gICAgICBsdF9mYXRhbCAoIkNvdWxkIG5vdCBmb2xsb3cgc3ltbGlua3MgZm9yICVzIiwgcGF0aHNwZWMpOwotKyAgICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCi0rCQkiY291bGQgbm90IGZvbGxvdyBzeW1saW5rcyBmb3IgJXMiLCBwYXRoc3BlYyk7Ci0gICAgIH0KLSAgIHJldHVybiB4c3RyZHVwICh0bXBfcGF0aHNwZWMpOwotICNlbmRpZgotQEAgLTM5NzUsMTEgKzQ4MDUsMjUgQEAgc3RyZW5kemFwIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCkKLSAgIHJldHVybiBzdHI7Ci0gfQotIAotK3ZvaWQKLStsdF9kZWJ1Z3ByaW50ZiAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotK3sKLSsgIHZhX2xpc3QgYXJnczsKLSsgIGlmIChsdF9kZWJ1ZykKLSsgICAgewotKyAgICAgICh2b2lkKSBmcHJpbnRmIChzdGRlcnIsICIlczolczolZDogIiwgcHJvZ3JhbV9uYW1lLCBmaWxlLCBsaW5lKTsKLSsgICAgICB2YV9zdGFydCAoYXJncywgZm10KTsKLSsgICAgICAodm9pZCkgdmZwcmludGYgKHN0ZGVyciwgZm10LCBhcmdzKTsKLSsgICAgICB2YV9lbmQgKGFyZ3MpOwotKyAgICB9Ci0rfQotKwotIHN0YXRpYyB2b2lkCi0tbHRfZXJyb3JfY29yZSAoaW50IGV4aXRfc3RhdHVzLCBjb25zdCBjaGFyICptb2RlLAotK2x0X2Vycm9yX2NvcmUgKGludCBleGl0X3N0YXR1cywgY29uc3QgY2hhciAqZmlsZSwKLSsJICAgICAgIGludCBsaW5lLCBjb25zdCBjaGFyICptb2RlLAotIAkgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSwgdmFfbGlzdCBhcCkKLSB7Ci0tICBmcHJpbnRmIChzdGRlcnIsICIlczogJXM6ICIsIHByb2dyYW1fbmFtZSwgbW9kZSk7Ci0rICBmcHJpbnRmIChzdGRlcnIsICIlczolczolZDogJXM6ICIsIHByb2dyYW1fbmFtZSwgZmlsZSwgbGluZSwgbW9kZSk7Ci0gICB2ZnByaW50ZiAoc3RkZXJyLCBtZXNzYWdlLCBhcCk7Ci0gICBmcHJpbnRmIChzdGRlcnIsICIuXG4iKTsKLSAKLUBAIC0zOTg4LDIwICs0ODMyLDMyIEBAIGx0X2Vycm9yX2NvcmUgKGludCBleGl0X3N0YXR1cywgY29uc3QgY2hhciAqbW9kZSwKLSB9Ci0gCi0gdm9pZAotLWx0X2ZhdGFsIChjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCi0rbHRfZmF0YWwgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCi0gewotICAgdmFfbGlzdCBhcDsKLSAgIHZhX3N0YXJ0IChhcCwgbWVzc2FnZSk7Ci0tICBsdF9lcnJvcl9jb3JlIChFWElUX0ZBSUxVUkUsICJGQVRBTCIsIG1lc3NhZ2UsIGFwKTsKLSsgIGx0X2Vycm9yX2NvcmUgKEVYSVRfRkFJTFVSRSwgZmlsZSwgbGluZSwgIkZBVEFMIiwgbWVzc2FnZSwgYXApOwotICAgdmFfZW5kIChhcCk7Ci0gfQotIAotK3N0YXRpYyBjb25zdCBjaGFyICoKLStub25udWxsIChjb25zdCBjaGFyICpzKQotK3sKLSsgIHJldHVybiBzID8gcyA6ICIobnVsbCkiOwotK30KLSsKLStzdGF0aWMgY29uc3QgY2hhciAqCi0rbm9uZW1wdHkgKGNvbnN0IGNoYXIgKnMpCi0rewotKyAgcmV0dXJuIChzICYmICEqcykgPyAiKGVtcHR5KSIgOiBub25udWxsIChzKTsKLSt9Ci0rCi0gdm9pZAotIGx0X3NldGVudiAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCi0gewotLSAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihsdF9zZXRlbnYpIHNldHRpbmcgJyVzJyB0byAnJXMnXG4iLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUgPyBuYW1lIDogIjxOVUxMPiIpLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlID8gdmFsdWUgOiAiPE5VTEw+IikpKTsKLSsgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCi0rCQkgICIobHRfc2V0ZW52KSBzZXR0aW5nICclcycgdG8gJyVzJ1xuIiwKLSsgICAgICAgICAgICAgICAgICBub25udWxsIChuYW1lKSwgbm9ubnVsbCAodmFsdWUpKTsKLSAgIHsKLSAjaWZkZWYgSEFWRV9TRVRFTlYKLSAgICAgLyogYWx3YXlzIG1ha2UgYSBjb3B5LCBmb3IgY29uc2lzdGVuY3kgd2l0aCAhSEFWRV9TRVRFTlYgKi8KLUBAIC00MDQ5LDkgKzQ5MDUsOSBAQCBsdF9leHRlbmRfc3RyIChjb25zdCBjaGFyICpvcmlnX3ZhbHVlLCBjb25zdCBjaGFyICphZGQsIGludCB0b19lbmQpCi0gdm9pZAotIGx0X3VwZGF0ZV9leGVfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCi0gewotLSAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihsdF91cGRhdGVfZXhlX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lID8gbmFtZSA6ICI8TlVMTD4iKSwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSA/IHZhbHVlIDogIjxOVUxMPiIpKSk7Ci0rICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAotKwkJICAiKGx0X3VwZGF0ZV9leGVfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAotKyAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOwotIAotICAgaWYgKG5hbWUgJiYgKm5hbWUgJiYgdmFsdWUgJiYgKnZhbHVlKQotICAgICB7Ci1AQCAtNDA3MCw5ICs0OTI2LDkgQEAgbHRfdXBkYXRlX2V4ZV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKLSB2b2lkCi0gbHRfdXBkYXRlX2xpYl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKLSB7Ci0tICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKGx0X3VwZGF0ZV9saWJfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUgPyBuYW1lIDogIjxOVUxMPiIpLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlID8gdmFsdWUgOiAiPE5VTEw+IikpKTsKLSsgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCi0rCQkgICIobHRfdXBkYXRlX2xpYl9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCi0rICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7Ci0gCi0gICBpZiAobmFtZSAmJiAqbmFtZSAmJiB2YWx1ZSAmJiAqdmFsdWUpCi0gICAgIHsKLUBAIC00MjIyLDcgKzUwNzgsNyBAQCBFT0YKLSBmdW5jX3dpbjMyX2ltcG9ydF9saWJfcCAoKQotIHsKLSAgICAgJG9wdF9kZWJ1ZwotLSAgICBjYXNlIGBldmFsICIkZmlsZV9tYWdpY19jbWQgXCJcJDFcIiAyPi9kZXYvbnVsbCIgfCAkU0VEIC1lIDEwcWAgaW4KLSsgICAgY2FzZSBgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCJcJDFcIiAyPi9kZXYvbnVsbCB8ICRTRUQgLWUgMTBxYCBpbgotICAgICAqaW1wb3J0KikgOiA7OwotICAgICAqKSBmYWxzZSA7OwotICAgICBlc2FjCi1AQCAtNDQwMSw5ICs1MjU3LDkgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAJICAgIDs7Ci0gCSAgKikKLSAJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KLS0JICAgICAgZGxmaWxlcz0iJGRsZmlsZXMgJGFyZyIKLSsJICAgICAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRhcmciCi0gCSAgICBlbHNlCi0tCSAgICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRhcmciCi0rCSAgICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkYXJnIgotIAkgICAgZmkKLSAJICAgIHByZXY9Ci0gCSAgICBjb250aW51ZQotQEAgLTQ0MjcsNyArNTI4Myw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCSAgICAqLSotZGFyd2luKikKLSAJICAgICAgY2FzZSAiJGRlcGxpYnMgIiBpbgotIAkJKiIgJHFhcmcubHRmcmFtZXdvcmsgIiopIDs7Ci0tCQkqKSBkZXBsaWJzPSIkZGVwbGlicyAkcWFyZy5sdGZyYW1ld29yayIgIyB0aGlzIGlzIGZpeGVkIGxhdGVyCi0rCQkqKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJHFhcmcubHRmcmFtZXdvcmsiICMgdGhpcyBpcyBmaXhlZCBsYXRlcgotIAkJICAgOzsKLSAJICAgICAgZXNhYwotIAkgICAgICA7OwotQEAgLTQ0NDYsNyArNTMwMiw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCSAgICBtb3JlYXJncz0KLSAJICAgIGZvciBmaWwgaW4gYGNhdCAiJHNhdmVfYXJnImAKLSAJICAgIGRvCi0tIwkgICAgICBtb3JlYXJncz0iJG1vcmVhcmdzICRmaWwiCi0rIwkgICAgICBmdW5jX2FwcGVuZCBtb3JlYXJncyAiICRmaWwiCi0gCSAgICAgIGFyZz0kZmlsCi0gCSAgICAgICMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgb2JqZWN0LgotIAotQEAgLTQ0NzUsNyArNTMzMSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCi0gCQkgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KLSAJCSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0geWVzOyB0aGVuCi0tCQkgICAgICBkbGZpbGVzPSIkZGxmaWxlcyAkcGljX29iamVjdCIKLSsJCSAgICAgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkcGljX29iamVjdCIKLSAJCSAgICAgIHByZXY9Ci0gCQkgICAgICBjb250aW51ZQotIAkJICAgIGVsc2UKLUBAIC00NDg3LDcgKzUzNDMsNyBAQCBmdW5jX21vZGVfbGluayAoKQotIAkJICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQotIAkJICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCi0gCQkgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgotLQkJICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRwaWNfb2JqZWN0IgotKwkJICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkcGljX29iamVjdCIKLSAJCSAgICBwcmV2PQotIAkJICBmaQotIAotQEAgLTQ1NTcsMTIgKzU0MTMsMTIgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAJICBpZiB0ZXN0ICIkcHJldiIgPSBycGF0aDsgdGhlbgotIAkgICAgY2FzZSAiJHJwYXRoICIgaW4KLSAJICAgICoiICRhcmcgIiopIDs7Ci0tCSAgICAqKSBycGF0aD0iJHJwYXRoICRhcmciIDs7Ci0rCSAgICAqKSBmdW5jX2FwcGVuZCBycGF0aCAiICRhcmciIDs7Ci0gCSAgICBlc2FjCi0gCSAgZWxzZQotIAkgICAgY2FzZSAiJHhycGF0aCAiIGluCi0gCSAgICAqIiAkYXJnICIqKSA7OwotLQkgICAgKikgeHJwYXRoPSIkeHJwYXRoICRhcmciIDs7Ci0rCSAgICAqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkYXJnIiA7OwotIAkgICAgZXNhYwotIAkgIGZpCi0gCSAgcHJldj0KLUBAIC00NTc0LDI4ICs1NDMwLDI4IEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCSAgY29udGludWUKLSAJICA7OwotIAl3ZWFrKQotLQkgIHdlYWtfbGlicz0iJHdlYWtfbGlicyAkYXJnIgotKwkgIGZ1bmNfYXBwZW5kIHdlYWtfbGlicyAiICRhcmciCi0gCSAgcHJldj0KLSAJICBjb250aW51ZQotIAkgIDs7Ci0gCXhjY2xpbmtlcikKLS0JICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJHFhcmciCi0tCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkcWFyZyIKLSsJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkcWFyZyIKLSsJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRxYXJnIgotIAkgIHByZXY9Ci0gCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCi0gCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRxYXJnIgotIAkgIGNvbnRpbnVlCi0gCSAgOzsKLSAJeGNvbXBpbGVyKQotLQkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHFhcmciCi0rCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkcWFyZyIKLSAJICBwcmV2PQotIAkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRxYXJnIgotIAkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkcWFyZyIKLSAJICBjb250aW51ZQotIAkgIDs7Ci0gCXhsaW5rZXIpCi0tCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRxYXJnIgotLQkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHdsJHFhcmciCi0rCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJHFhcmciCi0rCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkd2wkcWFyZyIKLSAJICBwcmV2PQotIAkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICR3bCRxYXJnIgotIAkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkd2wkcWFyZyIKLUBAIC00Njg2LDE1ICs1NTQyLDE2IEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCTs7Ci0gCi0gICAgICAgLUwqKQotLQlmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkYXJnIgotLQlkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotLQlpZiB0ZXN0IC16ICIkZGlyIjsgdGhlbgotKwlmdW5jX3N0cmlwbmFtZSAiLUwiICcnICIkYXJnIgotKwlpZiB0ZXN0IC16ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IjsgdGhlbgotIAkgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgotIAkgICAgZnVuY19mYXRhbF9lcnJvciAicmVxdWlyZSBubyBzcGFjZSBiZXR3ZWVuIFxgLUwnIGFuZCBcYCQxJyIKLSAJICBlbHNlCi0gCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJuZWVkIHBhdGggZm9yIFxgLUwnIG9wdGlvbiIKLSAJICBmaQotIAlmaQotKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKLSsJZGlyPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKLSAJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCi0gCWNhc2UgJGRpciBpbgotIAlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7Ci1AQCAtNDcwNiwxMCArNTU2MywxNiBAQCBmdW5jX21vZGVfbGluayAoKQotIAkgIDs7Ci0gCWVzYWMKLSAJY2FzZSAiJGRlcGxpYnMgIiBpbgotLQkqIiAtTCRkaXIgIiopIDs7Ci0rCSoiIC1MJGRpciAiKiB8ICoiICRhcmcgIiopCi0rCSAgIyBXaWxsIG9ubHkgaGFwcGVuIGZvciBhYnNvbHV0ZSBvciBzeXNyb290IGFyZ3VtZW50cwotKwkgIDs7Ci0gCSopCi0tCSAgZGVwbGlicz0iJGRlcGxpYnMgLUwkZGlyIgotLQkgIGxpYl9zZWFyY2hfcGF0aD0iJGxpYl9zZWFyY2hfcGF0aCAkZGlyIgotKwkgICMgUHJlc2VydmUgc3lzcm9vdCwgYnV0IG5ldmVyIGluY2x1ZGUgcmVsYXRpdmUgZGlyZWN0b3JpZXMKLSsJICBjYXNlICRkaXIgaW4KLSsJICAgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKiB8ID0qKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGFyZyIgOzsKLSsJICAgICopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAtTCRkaXIiIDs7Ci0rCSAgZXNhYwotKwkgIGZ1bmNfYXBwZW5kIGxpYl9zZWFyY2hfcGF0aCAiICRkaXIiCi0gCSAgOzsKLSAJZXNhYwotIAljYXNlICRob3N0IGluCi1AQCAtNDcxOCwxMiArNTU4MSwxMiBAQCBmdW5jX21vZGVfbGluayAoKQotIAkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgotIAkgICoiOiRkaXI6IiopIDs7Ci0gCSAgOjopIGRsbHNlYXJjaHBhdGg9JGRpcjs7Ci0tCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JGRpciI7OwotKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokZGlyIjs7Ci0gCSAgZXNhYwotIAkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgotIAkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OwotIAkgIDo6KSBkbGxzZWFyY2hwYXRoPSR0ZXN0YmluZGlyOzsKLS0JICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokdGVzdGJpbmRpciI7OwotKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokdGVzdGJpbmRpciI7OwotIAkgIGVzYWMKLSAJICA7OwotIAllc2FjCi1AQCAtNDc0Nyw3ICs1NjEwLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAJICAgIDs7Ci0gCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQotIAkgICAgIyBSaGFwc29keSBDIGFuZCBtYXRoIGxpYnJhcmllcyBhcmUgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKLS0JICAgIGRlcGxpYnM9IiRkZXBsaWJzIFN5c3RlbS5sdGZyYW1ld29yayIKLSsJICAgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiBTeXN0ZW0ubHRmcmFtZXdvcmsiCi0gCSAgICBjb250aW51ZQotIAkgICAgOzsKLSAJICAqLSotc2NvMy4ydjUqIHwgKi0qLXNjbzV2NiopCi1AQCAtNDc1OCw5ICs1NjIxLDYgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAJICAgICMgQ29tcGlsZXIgaW5zZXJ0cyBsaWJjIGluIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aHJlYWRzIHRvIHdvcmsKLSAJICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQotIAkgICAgOzsKLS0JICAqLSotbGludXgqKQotLQkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCi0tCSAgICA7OwotIAkgIGVzYWMKLSAJZWxpZiB0ZXN0ICJYJGFyZyIgPSAiWC1sY19yIjsgdGhlbgotIAkgY2FzZSAkaG9zdCBpbgotQEAgLTQ3NzAsNyArNTYzMCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCSAgIDs7Ci0gCSBlc2FjCi0gCWZpCi0tCWRlcGxpYnM9IiRkZXBsaWJzICRhcmciCi0rCWZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkYXJnIgotIAljb250aW51ZQotIAk7OwotIAotQEAgLTQ3ODIsOCArNTY0Miw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gICAgICAgIyBUcnU2NCBVTklYIHVzZXMgLW1vZGVsIFthcmddIHRvIGRldGVybWluZSB0aGUgbGF5b3V0IG9mIEMrKwotICAgICAgICMgY2xhc3NlcywgbmFtZSBtYW5nbGluZywgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZy4KLSAgICAgICAjIERhcndpbiB1c2VzIHRoZSAtYXJjaCBmbGFnIHRvIGRldGVybWluZSBvdXRwdXQgYXJjaGl0ZWN0dXJlLgotLSAgICAgIC1tb2RlbHwtYXJjaHwtaXN5c3Jvb3QpCi0tCWNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKLSsgICAgICAtbW9kZWx8LWFyY2h8LWlzeXNyb290fC0tc3lzcm9vdCkKLSsJZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgotIAlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgotIAlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKLSAJcHJldj14Y29tcGlsZXIKLUBAIC00NzkxLDEyICs1NjUxLDEyIEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCTs7Ci0gCi0gICAgICAgLW10fC1tdGhyZWFkc3wta3RocmVhZHwtS3RocmVhZHwtcHRocmVhZHwtcHRocmVhZHN8LS10aHJlYWQtc2FmZXwtdGhyZWFkcykKLS0JY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgotKwlmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCi0gCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCi0gCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgotIAljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgotIAkgICAgKiIgJGFyZyAiKikgOzsKLS0JICAgICogKSBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRhcmciIDs7Ci0rCSAgICAqICkgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkYXJnIiA7OwotIAllc2FjCi0gCWNvbnRpbnVlCi0gCTs7Ci1AQCAtNDg2MywxMyArNTcyMywxNyBAQCBmdW5jX21vZGVfbGluayAoKQotIAkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KLSAJY2FzZSAkZGlyIGluCi0gCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKLSsJPSopCi0rCSAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkZGlyIgotKwkgIGRpcj0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLSsJICA7OwotIAkqKQotIAkgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIgotIAkgIDs7Ci0gCWVzYWMKLSAJY2FzZSAiJHhycGF0aCAiIGluCi0gCSoiICRkaXIgIiopIDs7Ci0tCSopIHhycGF0aD0iJHhycGF0aCAkZGlyIiA7OwotKwkqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkZGlyIiA7OwotIAllc2FjCi0gCWNvbnRpbnVlCi0gCTs7Ci1AQCAtNDkyMiw4ICs1Nzg2LDggQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCi0gCSAgSUZTPSIkc2F2ZV9pZnMiCi0gICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgotLQkgIGFyZz0iJGFyZyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCi0tCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCi0rCSAgZnVuY19hcHBlbmQgYXJnICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotIAlkb25lCi0gCUlGUz0iJHNhdmVfaWZzIgotIAlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCi1AQCAtNDkzOCw5ICs1ODAyLDkgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCi0gCSAgSUZTPSIkc2F2ZV9pZnMiCi0gICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgotLQkgIGFyZz0iJGFyZyAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCi0tCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCi0tCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKLSsJICBmdW5jX2FwcGVuZCBhcmcgIiAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCi0rCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCi0rCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotIAlkb25lCi0gCUlGUz0iJHNhdmVfaWZzIgotIAlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCi1AQCAtNDk2OCwyNCArNTgzMiwyNyBAQCBmdW5jX21vZGVfbGluayAoKQotIAlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKLSAJOzsKLSAKLS0gICAgICAjIC02NCwgLW1pcHNbMC05XSBlbmFibGUgNjQtYml0IG1vZGUgb24gdGhlIFNHSSBjb21waWxlcgotLSAgICAgICMgLXJbMC05XVswLTldKiBzcGVjaWZpZXMgdGhlIHByb2Nlc3NvciBvbiB0aGUgU0dJIGNvbXBpbGVyCi0tICAgICAgIyAteGFyY2g9KiwgLXh0YXJnZXQ9KiBlbmFibGUgNjQtYml0IG1vZGUgb24gdGhlIFN1biBjb21waWxlcgotLSAgICAgICMgK0RBKiwgK0REKiBlbmFibGUgNjQtYml0IG1vZGUgb24gdGhlIEhQIGNvbXBpbGVyCi0tICAgICAgIyAtcSogcGFzcyB0aHJvdWdoIGNvbXBpbGVyIGFyZ3MgZm9yIHRoZSBJQk0gY29tcGlsZXIKLS0gICAgICAjIC1tKiwgLXRbNDVdKiwgLXR4c2NhbGUqIHBhc3MgdGhyb3VnaCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMKLS0gICAgICAjIGNvbXBpbGVyIGFyZ3MgZm9yIEdDQwotLSAgICAgICMgLUYvcGF0aCBnaXZlcyBwYXRoIHRvIHVuaW5zdGFsbGVkIGZyYW1ld29ya3MsIGdjYyBvbiBkYXJ3aW4KLS0gICAgICAjIC1wLCAtcGcsIC0tY292ZXJhZ2UsIC1mcHJvZmlsZS0qIHBhc3MgdGhyb3VnaCBwcm9maWxpbmcgZmxhZyBmb3IgR0NDCi0tICAgICAgIyBAZmlsZSBHQ0MgcmVzcG9uc2UgZmlsZXMKLS0gICAgICAjIC10cD0qIFBvcnRsYW5kIHBnY2MgdGFyZ2V0IHByb2Nlc3NvciBzZWxlY3Rpb24KLSsgICAgICAjIEZsYWdzIHRvIGJlIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZCwgd2l0aCByYXRpb25hbGU6Ci0rICAgICAgIyAtNjQsIC1taXBzWzAtOV0gICAgICBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBTR0kgY29tcGlsZXIKLSsgICAgICAjIC1yWzAtOV1bMC05XSogICAgICAgIHNwZWNpZnkgcHJvY2Vzc29yIGZvciB0aGUgU0dJIGNvbXBpbGVyCi0rICAgICAgIyAteGFyY2g9KiwgLXh0YXJnZXQ9KiBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBTdW4gY29tcGlsZXIKLSsgICAgICAjICtEQSosICtERCogICAgICAgICAgIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIEhQIGNvbXBpbGVyCi0rICAgICAgIyAtcSogICAgICAgICAgICAgICAgICBjb21waWxlciBhcmdzIGZvciB0aGUgSUJNIGNvbXBpbGVyCi0rICAgICAgIyAtbSosIC10WzQ1XSosIC10eHNjYWxlKiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmxhZ3MgZm9yIEdDQwotKyAgICAgICMgLUYvcGF0aCAgICAgICAgICAgICAgcGF0aCB0byB1bmluc3RhbGxlZCBmcmFtZXdvcmtzLCBnY2Mgb24gZGFyd2luCi0rICAgICAgIyAtcCwgLXBnLCAtLWNvdmVyYWdlLCAtZnByb2ZpbGUtKiAgcHJvZmlsaW5nIGZsYWdzIGZvciBHQ0MKLSsgICAgICAjIEBmaWxlICAgICAgICAgICAgICAgIEdDQyByZXNwb25zZSBmaWxlcwotKyAgICAgICMgLXRwPSogICAgICAgICAgICAgICAgUG9ydGxhbmQgcGdjYyB0YXJnZXQgcHJvY2Vzc29yIHNlbGVjdGlvbgotKyAgICAgICMgLS1zeXNyb290PSogICAgICAgICAgZm9yIHN5c3Jvb3Qgc3VwcG9ydAotKyAgICAgICMgLU8qLCAtZmx0byosIC1md2hvcHIqLCAtZnVzZS1saW5rZXItcGx1Z2luIEdDQyBsaW5rLXRpbWUgb3B0aW1pemF0aW9uCi0gICAgICAgLTY0fC1taXBzWzAtOV18LXJbMC05XVswLTldKnwteGFyY2g9KnwteHRhcmdldD0qfCtEQSp8K0REKnwtcSp8LW0qfCBcCi0tICAgICAgLXRbNDVdKnwtdHhzY2FsZSp8LXB8LXBnfC0tY292ZXJhZ2V8LWZwcm9maWxlLSp8LUYqfEAqfC10cD0qKQotKyAgICAgIC10WzQ1XSp8LXR4c2NhbGUqfC1wfC1wZ3wtLWNvdmVyYWdlfC1mcHJvZmlsZS0qfC1GKnxAKnwtdHA9KnwtLXN5c3Jvb3Q9KnwgXAotKyAgICAgIC1PKnwtZmx0byp8LWZ3aG9wcip8LWZ1c2UtbGlua2VyLXBsdWdpbikKLSAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCi0gCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotICAgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKLSAgICAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgotLSAgICAgICAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgotKyAgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgotICAgICAgICAgY29udGludWUKLSAgICAgICAgIDs7Ci0gCi1AQCAtNDk5Nyw3ICs1ODY0LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAKLSAgICAgICAqLiRvYmpleHQpCi0gCSMgQSBzdGFuZGFyZCBvYmplY3QuCi0tCW9ianM9IiRvYmpzICRhcmciCi0rCWZ1bmNfYXBwZW5kIG9ianMgIiAkYXJnIgotIAk7OwotIAotICAgICAgICoubG8pCi1AQCAtNTAyOCw3ICs1ODk1LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAKLSAJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KLSAJICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHllczsgdGhlbgotLQkJZGxmaWxlcz0iJGRsZmlsZXMgJHBpY19vYmplY3QiCi0rCQlmdW5jX2FwcGVuZCBkbGZpbGVzICIgJHBpY19vYmplY3QiCi0gCQlwcmV2PQotIAkJY29udGludWUKLSAJICAgICAgZWxzZQotQEAgLTUwNDAsNyArNTkwNyw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCSAgICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQotIAkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgotIAkgICAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCi0tCSAgICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRwaWNfb2JqZWN0IgotKwkgICAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJHBpY19vYmplY3QiCi0gCSAgICAgIHByZXY9Ci0gCSAgICBmaQotIAotQEAgLTUwODUsMjQgKzU5NTIsMjUgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAKLSAgICAgICAqLiRsaWJleHQpCi0gCSMgQW4gYXJjaGl2ZS4KLS0JZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKLS0Jb2xkX2RlcGxpYnM9IiRvbGRfZGVwbGlicyAkYXJnIgotKwlmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGFyZyIKLSsJZnVuY19hcHBlbmQgb2xkX2RlcGxpYnMgIiAkYXJnIgotIAljb250aW51ZQotIAk7OwotIAotICAgICAgICoubGEpCi0gCSMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgbGlicmFyeS4KLSAKLSsJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRhcmciCi0gCWlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KLSAJICAjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRsb3Blbi4KLS0JICBkbGZpbGVzPSIkZGxmaWxlcyAkYXJnIgotKwkgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgotIAkgIHByZXY9Ci0gCWVsaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgotIAkgICMgVGhlIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbHByZW9wZW4uCi0tCSAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGFyZyIKLSsJICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKLSAJICBwcmV2PQotIAllbHNlCi0tCSAgZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKLSsJICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKLSAJZmkKLSAJY29udGludWUKLSAJOzsKLUBAIC01MTI3LDcgKzU5OTUsNyBAQCBmdW5jX21vZGVfbGluayAoKQotICAgICAgIGZ1bmNfZmF0YWxfaGVscCAidGhlIFxgJHByZXZhcmcnIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIKLSAKLSAgICAgaWYgdGVzdCAiJGV4cG9ydF9keW5hbWljIiA9IHllcyAmJiB0ZXN0IC1uICIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIjsgdGhlbgotLSAgICAgIGV2YWwgImFyZz1cIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIiIKLSsgICAgICBldmFsIGFyZz1cIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgotICAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCi0gICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCi0gICAgIGZpCi1AQCAtNTE0NCwxMSArNjAxMiwxMyBAQCBmdW5jX21vZGVfbGluayAoKQotICAgICBlbHNlCi0gICAgICAgc2hsaWJfc2VhcmNoX3BhdGg9Ci0gICAgIGZpCi0tICAgIGV2YWwgInN5c19saWJfc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXCIiCi0tICAgIGV2YWwgInN5c19saWJfZGxzZWFyY2hfcGF0aD1cIiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY1wiIgotKyAgICBldmFsIHN5c19saWJfc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXCIKLSsgICAgZXZhbCBzeXNfbGliX2Rsc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWNcIgotIAotICAgICBmdW5jX2Rpcm5hbWUgIiRvdXRwdXQiICIvIiAiIgotICAgICBvdXRwdXRfb2JqZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCRvYmpkaXIiCi0rICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0X29iamRpci8iCi0rICAgIHRvb2xfb3V0cHV0X29iamRpcj0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0Ci0gICAgICMgQ3JlYXRlIHRoZSBvYmplY3QgZGlyZWN0b3J5LgotICAgICBmdW5jX21rZGlyX3AgIiRvdXRwdXRfb2JqZGlyIgotIAotQEAgLTUxNjksMTIgKzYwMzksMTIgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAgICAgIyBGaW5kIGFsbCBpbnRlcmRlcGVuZGVudCBkZXBsaWJzIGJ5IHNlYXJjaGluZyBmb3IgbGlicmFyaWVzCi0gICAgICMgdGhhdCBhcmUgbGlua2VkIG1vcmUgdGhhbiBvbmNlIChlLmcuIC1sYSAtbGIgLWxhKQotICAgICBmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbwotLSAgICAgIGlmICRvcHRfZHVwbGljYXRlX2RlcHMgOyB0aGVuCi0rICAgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KLSAJY2FzZSAiJGxpYnMgIiBpbgotLQkqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7Ci0rCSoiICRkZXBsaWIgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRlcGxpYiIgOzsKLSAJZXNhYwotICAgICAgIGZpCi0tICAgICAgbGlicz0iJGxpYnMgJGRlcGxpYiIKLSsgICAgICBmdW5jX2FwcGVuZCBsaWJzICIgJGRlcGxpYiIKLSAgICAgZG9uZQotIAotICAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCi1AQCAtNTE4Nyw5ICs2MDU3LDkgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAgICAgICBpZiAkb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwczsgdGhlbgotIAlmb3IgcHJlX3Bvc3RfZGVwIGluICRwcmVkZXBzICRwb3N0ZGVwczsgZG8KLSAJICBjYXNlICIkcHJlX3Bvc3RfZGVwcyAiIGluCi0tCSAgKiIgJHByZV9wb3N0X2RlcCAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkcHJlX3Bvc3RfZGVwcyIgOzsKLSsJICAqIiAkcHJlX3Bvc3RfZGVwICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRwcmVfcG9zdF9kZXBzIiA7OwotIAkgIGVzYWMKLS0JICBwcmVfcG9zdF9kZXBzPSIkcHJlX3Bvc3RfZGVwcyAkcHJlX3Bvc3RfZGVwIgotKwkgIGZ1bmNfYXBwZW5kIHByZV9wb3N0X2RlcHMgIiAkcHJlX3Bvc3RfZGVwIgotIAlkb25lCi0gICAgICAgZmkKLSAgICAgICBwcmVfcG9zdF9kZXBzPQotQEAgLTUyNTYsOCArNjEyNiw5IEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCWZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCi0gCSAgIyBJZ25vcmUgbm9uLWxpYnRvb2wtbGlicwotIAkgIGRlcGVuZGVuY3lfbGlicz0KLSsJICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGxpYiIKLSAJICBjYXNlICRsaWIgaW4KLS0JICAqLmxhKQlmdW5jX3NvdXJjZSAiJGxpYiIgOzsKLSsJICAqLmxhKQlmdW5jX3NvdXJjZSAiJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIgOzsKLSAJICBlc2FjCi0gCi0gCSAgIyBDb2xsZWN0IHByZW9wZW5lZCBsaWJ0b29sIGRlcGxpYnMsIGV4Y2VwdCBhbnkgdGhpcyBsaWJyYXJ5Ci1AQCAtNTI2Nyw3ICs2MTM4LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAgICAgICAgICAgICBkZXBsaWJfYmFzZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKLSAJICAgIGNhc2UgIiAkd2Vha19saWJzICIgaW4KLSAJICAgICoiICRkZXBsaWJfYmFzZSAiKikgOzsKLS0JICAgICopIGRlcGxpYnM9IiRkZXBsaWJzICRkZXBsaWIiIDs7Ci0rCSAgICAqKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGRlcGxpYiIgOzsKLSAJICAgIGVzYWMKLSAJICBkb25lCi0gCWRvbmUKLUBAIC01Mjg4LDExICs2MTU5LDExIEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKLSAJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCi0gCSAgZWxzZQotLQkgICAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkZGVwbGliIgotKwkgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkZGVwbGliIgotIAkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiA7IHRoZW4KLSAJCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCi0gCQkgICAgKiIgJGRlcGxpYiAiKikgOzsKLS0JCSAgICAqICkgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkZGVwbGliIiA7OwotKwkJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRkZXBsaWIiIDs7Ci0gCQllc2FjCi0gCSAgICBmaQotIAkgIGZpCi1AQCAtNTM3Nyw3ICs2MjQ4LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgOyB0aGVuCi0gCQljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgotIAkJICAgICoiICRkZXBsaWIgIiopIDs7Ci0tCQkgICAgKiApIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGRlcGxpYiIgOzsKLSsJCSAgICAqICkgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkZGVwbGliIiA7OwotIAkJZXNhYwotIAkgICAgZmkKLSAJICBmaQotQEAgLTUzOTAsNyArNjI2MSw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCSAgICB0ZXN0ICIkcGFzcyIgPSBjb252ICYmIGNvbnRpbnVlCi0gCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKLSAJICAgIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCi0tCSAgICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKLSsJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgotKwkgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKLSAJICAgIDs7Ci0gCSAgcHJvZykKLSAJICAgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KLUBAIC01NDA0LDcgKzYyNzYsOCBAQCBmdW5jX21vZGVfbGluayAoKQotIAkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgotIAkgICAgZmkKLSAJICAgIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCi0tCSAgICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKLSsJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgotKwkgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKLSAJICAgIDs7Ci0gCSAgKikKLSAJICAgIGZ1bmNfd2FybmluZyAiXGAtTCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIKLUBAIC01NDE1LDE3ICs2Mjg4LDIxIEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCS1SKikKLSAJICBpZiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCi0gCSAgICBmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkZGVwbGliIgotLQkgICAgZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLSsJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgotKwkgICAgZGlyPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKLSAJICAgICMgTWFrZSBzdXJlIHRoZSB4cnBhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCi0gCSAgICBjYXNlICIkeHJwYXRoICIgaW4KLSAJICAgICoiICRkaXIgIiopIDs7Ci0tCSAgICAqKSB4cnBhdGg9IiR4cnBhdGggJGRpciIgOzsKLSsJICAgICopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICRkaXIiIDs7Ci0gCSAgICBlc2FjCi0gCSAgZmkKLSAJICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgotIAkgIGNvbnRpbnVlCi0gCSAgOzsKLS0JKi5sYSkgbGliPSIkZGVwbGliIiA7OwotKwkqLmxhKQotKwkgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIgotKwkgIGxpYj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0Ci0rCSAgOzsKLSAJKi4kbGliZXh0KQotIAkgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KLSAJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi1AQCAtNTQ4OCwxMSArNjM2NSwxMSBAQCBmdW5jX21vZGVfbGluayAoKQotIAkgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuIHx8IHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbm87IHRoZW4KLSAJICAgICAgIyBJZiB0aGVyZSBpcyBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nIHN0YXRpY2FsbHksCi0gCSAgICAgICMgd2UgbmVlZCB0byBwcmVsb2FkLgotLQkgICAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGVwbGliIgotKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRlcGxpYiIKLSAJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCi0gCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCi0gCSAgICBlbHNlCi0tCSAgICAgIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRkZXBsaWIiCi0rCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkZGVwbGliIgotIAkgICAgZmkKLSAJICBmaQotIAkgIGNvbnRpbnVlCi1AQCAtNTUzOCw3ICs2NDE1LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAJICBmb3IgdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyBpbiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZ3M7IGRvCi0gCSAgICBjYXNlICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KLSAJICAgICAgKiIgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWcgIiopIDs7Ci0tCSAgICAgICopIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWciOzsKLSsJICAgICAgKikgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyI7OwotIAkgICAgZXNhYwotIAkgIGRvbmUKLSAJZmkKLUBAIC01NTQ2LDggKzY0MjMsOCBAQCBmdW5jX21vZGVfbGluayAoKQotIAlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIiB8fAotIAkgICB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csc2NhbiIgfHwKLSAJICAgeyB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IH07IHRoZW4KLS0JICB0ZXN0IC1uICIkZGxvcGVuIiAmJiBkbGZpbGVzPSIkZGxmaWxlcyAkZGxvcGVuIgotLQkgIHRlc3QgLW4gIiRkbHByZW9wZW4iICYmIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRkbHByZW9wZW4iCi0rCSAgdGVzdCAtbiAiJGRsb3BlbiIgJiYgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRkbG9wZW4iCi0rCSAgdGVzdCAtbiAiJGRscHJlb3BlbiIgJiYgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRkbHByZW9wZW4iCi0gCWZpCi0gCi0gCWlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KLUBAIC01NTU4LDIwICs2NDM1LDIwIEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCSAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRsaWInIgotIAkgICAgZmkKLSAJICAgICMgSXQgaXMgYSBsaWJ0b29sIGNvbnZlbmllbmNlIGxpYnJhcnksIHNvIGFkZCBpbiBpdHMgb2JqZWN0cy4KLS0JICAgIGNvbnZlbmllbmNlPSIkY29udmVuaWVuY2UgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgotLQkgICAgb2xkX2NvbnZlbmllbmNlPSIkb2xkX2NvbnZlbmllbmNlICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKLSsJICAgIGZ1bmNfYXBwZW5kIGNvbnZlbmllbmNlICIgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgotKwkgICAgZnVuY19hcHBlbmQgb2xkX2NvbnZlbmllbmNlICIgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgotIAkgIGVsaWYgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliOyB0aGVuCi0gCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIGNvbnZlbmllbmNlIGxpYnJhcnkiCi0gCSAgZmkKLSAJICB0bXBfbGlicz0KLSAJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCi0gCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgotLQkgICAgaWYgJG9wdF9kdXBsaWNhdGVfZGVwcyA7IHRoZW4KLSsJICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCi0gCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCi0tCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKLSsJICAgICAgKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OwotIAkgICAgICBlc2FjCi0gCSAgICBmaQotLQkgICAgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIgotKwkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIgotIAkgIGRvbmUKLSAJICBjb250aW51ZQotIAlmaSAjICRwYXNzID0gY29udgotQEAgLTU1NzksOSArNjQ1NiwxNSBAQCBmdW5jX21vZGVfbGluayAoKQotIAotIAkjIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSB3ZSBsaW5rIGFnYWluc3QuCi0gCWxpbmtsaWI9Ci0tCWZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KLS0JICBsaW5rbGliPSIkbCIKLS0JZG9uZQotKwlpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmCi0rCSAgIHsgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicyIgPSB5ZXMgfHwKLSsJICAgICB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzLCRpbnN0YWxsZWQiID0gImJ1aWx0LG5vIjsgfTsgdGhlbgotKwkgIGxpbmtsaWI9JG9sZF9saWJyYXJ5Ci0rCWVsc2UKLSsJICBmb3IgbCBpbiAkb2xkX2xpYnJhcnkgJGxpYnJhcnlfbmFtZXM7IGRvCi0rCSAgICBsaW5rbGliPSIkbCIKLSsJICBkb25lCi0rCWZpCi0gCWlmIHRlc3QgLXogIiRsaW5rbGliIjsgdGhlbgotIAkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRsaWInIgotIAlmaQotQEAgLTU1OTgsOSArNjQ4MSw5IEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCSAgICAjIHN0YXRpY2FsbHksIHdlIG5lZWQgdG8gcHJlbG9hZC4gIFdlIGFsc28gbmVlZCB0byBwcmVsb2FkIGFueQotIAkgICAgIyBkZXBlbmRlbnQgbGlicmFyaWVzIHNvIGxpYmx0ZGwncyBkZXBsaWIgcHJlbG9hZGVyIGRvZXNuJ3QKLSAJICAgICMgYm9tYiBvdXQgaW4gdGhlIGxvYWQgZGVwbGlicyBwaGFzZS4KLS0JICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRsaWIgJGRlcGVuZGVuY3lfbGlicyIKLSsJICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkbGliICRkZXBlbmRlbmN5X2xpYnMiCi0gCSAgZWxzZQotLQkgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGxpYiIKLSsJICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkbGliIgotIAkgIGZpCi0gCSAgY29udGludWUKLSAJZmkgIyAkcGFzcyA9IGRsb3BlbgotQEAgLTU2MjIsMTQgKzY1MDUsMTQgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAKLSAJIyBGaW5kIHRoZSByZWxldmFudCBvYmplY3QgZGlyZWN0b3J5IGFuZCBsaWJyYXJ5IG5hbWUuCi0gCWlmIHRlc3QgIlgkaW5zdGFsbGVkIiA9IFh5ZXM7IHRoZW4KLS0JICBpZiB0ZXN0ICEgLWYgIiRsaWJkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCi0rCSAgaWYgdGVzdCAhIC1mICIkbHRfc3lzcm9vdCRsaWJkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCi0gCSAgICBmdW5jX3dhcm5pbmcgImxpYnJhcnkgXGAkbGliJyB3YXMgbW92ZWQuIgotIAkgICAgZGlyPSIkbGFkaXIiCi0gCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCi0gCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCi0gCSAgZWxzZQotLQkgICAgZGlyPSIkbGliZGlyIgotLQkgICAgYWJzZGlyPSIkbGliZGlyIgotKwkgICAgZGlyPSIkbHRfc3lzcm9vdCRsaWJkaXIiCi0rCSAgICBhYnNkaXI9IiRsdF9zeXNyb290JGxpYmRpciIKLSAJICBmaQotIAkgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljIiA9IFh5ZXMgJiYgYXZvaWR0ZW1wcnBhdGg9eWVzCi0gCWVsc2UKLUBAIC01NjM3LDEyICs2NTIwLDEyIEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCSAgICBkaXI9IiRsYWRpciIKLSAJICAgIGFic2Rpcj0iJGFic19sYWRpciIKLSAJICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKLS0JICAgIG5vdGluc3RfcGF0aD0iJG5vdGluc3RfcGF0aCAkYWJzX2xhZGlyIgotKwkgICAgZnVuY19hcHBlbmQgbm90aW5zdF9wYXRoICIgJGFic19sYWRpciIKLSAJICBlbHNlCi0gCSAgICBkaXI9IiRsYWRpci8kb2JqZGlyIgotIAkgICAgYWJzZGlyPSIkYWJzX2xhZGlyLyRvYmpkaXIiCi0gCSAgICAjIFJlbW92ZSB0aGlzIHNlYXJjaCBwYXRoIGxhdGVyCi0tCSAgICBub3RpbnN0X3BhdGg9IiRub3RpbnN0X3BhdGggJGFic19sYWRpciIKLSsJICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfcGF0aCAiICRhYnNfbGFkaXIiCi0gCSAgZmkKLSAJZmkgIyAkaW5zdGFsbGVkID0geWVzCi0gCWZ1bmNfc3RyaXBuYW1lICdsaWInICcubGEnICIkbGFuYW1lIgotQEAgLTU2NTMsMjAgKzY1MzYsNDYgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAJICBpZiB0ZXN0IC16ICIkbGliZGlyIiAmJiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgotIAkgICAgZnVuY19mYXRhbF9lcnJvciAib25seSBsaWJyYXJpZXMgbWF5IC1kbHByZW9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiBcYCRsaWInIgotIAkgIGZpCi0tCSAgIyBQcmVmZXIgdXNpbmcgYSBzdGF0aWMgbGlicmFyeSAoc28gdGhhdCBubyBzaWxseSBfRFlOQU1JQyBzeW1ib2xzCi0tCSAgIyBhcmUgcmVxdWlyZWQgdG8gbGluaykuCi0tCSAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgotLQkgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRpci8kb2xkX2xpYnJhcnkiCi0tCSAgICAjIEtlZXAgYSBsaXN0IG9mIHByZW9wZW5lZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMgdG8gY2hlY2sKLS0JICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgotLQkgICAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAotLQkJZGxwcmVjb252ZW5pZW5jZWxpYnM9IiRkbHByZWNvbnZlbmllbmNlbGlicyAkZGlyLyRvbGRfbGlicmFyeSIKLS0JICAjIE90aGVyd2lzZSwgdXNlIHRoZSBkbG5hbWUsIHNvIHRoYXQgbHRfZGxvcGVuIGZpbmRzIGl0LgotLQkgIGVsaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KLS0JICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkaXIvJGRsbmFtZSIKLS0JICBlbHNlCi0tCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRsaW5rbGliIgotLQkgIGZpCi0rCSAgY2FzZSAiJGhvc3QiIGluCi0rCSAgICAjIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHBsYXRmb3JtcyB3aXRoIFBFLURMTHMuCi0rCSAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKLSsJICAgICAgIyBMaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGxpbmsgYWdhaW5zdCBzaGFyZWQgbGlicmFyeSBpZiBib3RoCi0rCSAgICAgICMgc3RhdGljIGFuZCBzaGFyZWQgYXJlIHByZXNlbnQuICBUaGVyZWZvcmUsIGVuc3VyZSB3ZSBleHRyYWN0Ci0rCSAgICAgICMgc3ltYm9scyBmcm9tIHRoZSBpbXBvcnQgbGlicmFyeSBpZiBhIHNoYXJlZCBsaWJyYXJ5IGlzIHByZXNlbnQKLSsJICAgICAgIyAob3RoZXJ3aXNlLCB0aGUgZGxvcGVuIG1vZHVsZSBuYW1lIHdpbGwgYmUgaW5jb3JyZWN0KS4gIFdlIGRvCi0rCSAgICAgICMgdGhpcyBieSBwdXR0aW5nIHRoZSBpbXBvcnQgbGlicmFyeSBuYW1lIGludG8gJG5ld2RscHJlZmlsZXMuCi0rCSAgICAgICMgV2UgcmVjb3ZlciB0aGUgZGxvcGVuIG1vZHVsZSBuYW1lIGJ5ICdzYXZpbmcnIHRoZSBsYSBmaWxlCi0rCSAgICAgICMgbmFtZSBpbiBhIHNwZWNpYWwgcHVycG9zZSB2YXJpYWJsZSwgYW5kIChsYXRlcikgZXh0cmFjdGluZyB0aGUKLSsJICAgICAgIyBkbG5hbWUgZnJvbSB0aGUgbGEgZmlsZS4KLSsJICAgICAgaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KLSsJICAgICAgICBmdW5jX3RyX3NoICIkZGlyLyRsaW5rbGliIgotKwkgICAgICAgIGV2YWwgImxpYmZpbGVfJGZ1bmNfdHJfc2hfcmVzdWx0PVwkYWJzX2xhZGlyL1wkbGFuYW1lIgotKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRsaW5rbGliIgotKwkgICAgICBlbHNlCi0rCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJG9sZF9saWJyYXJ5IgotKwkgICAgICAgICMgS2VlcCBhIGxpc3Qgb2YgcHJlb3BlbmVkIGNvbnZlbmllbmNlIGxpYnJhcmllcyB0byBjaGVjawotKwkgICAgICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgotKwkgICAgICAgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKLSsJICAgICAgICAgIGZ1bmNfYXBwZW5kIGRscHJlY29udmVuaWVuY2VsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCi0rCSAgICAgIGZpCi0rCSAgICA7OwotKwkgICAgKiApCi0rCSAgICAgICMgUHJlZmVyIHVzaW5nIGEgc3RhdGljIGxpYnJhcnkgKHNvIHRoYXQgbm8gc2lsbHkgX0RZTkFNSUMgc3ltYm9scwotKwkgICAgICAjIGFyZSByZXF1aXJlZCB0byBsaW5rKS4KLSsJICAgICAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgotKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRvbGRfbGlicmFyeSIKLSsJICAgICAgICAjIEtlZXAgYSBsaXN0IG9mIHByZW9wZW5lZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMgdG8gY2hlY2sKLSsJICAgICAgICAjIHRoYXQgdGhleSBhcmUgYmVpbmcgdXNlZCBjb3JyZWN0bHkgaW4gdGhlIGxpbmsgcGFzcy4KLSsJICAgICAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCi0rCSAgICAgICAgICBmdW5jX2FwcGVuZCBkbHByZWNvbnZlbmllbmNlbGlicyAiICRkaXIvJG9sZF9saWJyYXJ5IgotKwkgICAgICAjIE90aGVyd2lzZSwgdXNlIHRoZSBkbG5hbWUsIHNvIHRoYXQgbHRfZGxvcGVuIGZpbmRzIGl0LgotKwkgICAgICBlbGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCi0rCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGRsbmFtZSIKLSsJICAgICAgZWxzZQotKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRsaW5rbGliIgotKwkgICAgICBmaQotKwkgICAgOzsKLSsJICBlc2FjCi0gCWZpICMgJHBhc3MgPSBkbHByZW9wZW4KLSAKLSAJaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KLUBAIC01Njg0LDcgKzY1OTMsNyBAQCBmdW5jX21vZGVfbGluayAoKQotIAotIAotIAlpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyAmJiB0ZXN0ICIkcGFzcyIgIT0gbGluazsgdGhlbgotLQkgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGFkaXIiCi0rCSAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGxhZGlyIgotIAkgIGRlcGxpYnM9IiRsaWIgJGRlcGxpYnMiCi0gCi0gCSAgbGlua2FsbGRlcGxpYnM9bm8KLUBAIC01Njk3LDcgKzY2MDYsOCBAQCBmdW5jX21vZGVfbGluayAoKQotIAkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KLSAJICAgIGNhc2UgJGRlcGxpYiBpbgotIAkgICAgLUwqKSBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgotLQkgICAgICAgICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKLSsJICAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCi0rCSAgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCi0gCQkgOzsKLSAJICAgIGVzYWMKLSAJICAgICMgTmVlZCB0byBsaW5rIGFnYWluc3QgYWxsIGRlcGVuZGVuY3lfbGlicz8KLUBAIC01NzA4LDEyICs2NjE4LDEyIEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCSAgICAgICMgb3IvYW5kIGxpbmsgYWdhaW5zdCBzdGF0aWMgbGlicmFyaWVzCi0gCSAgICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgotIAkgICAgZmkKLS0JICAgIGlmICRvcHRfZHVwbGljYXRlX2RlcHMgOyB0aGVuCi0rCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgotIAkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgotLQkgICAgICAqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7Ci0rCSAgICAgICoiICRkZXBsaWIgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRlcGxpYiIgOzsKLSAJICAgICAgZXNhYwotIAkgICAgZmkKLS0JICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKLSsJICAgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIKLSAJICBkb25lICMgZm9yIGRlcGxpYgotIAkgIGNvbnRpbnVlCi0gCWZpICMgJGxpbmttb2RlID0gcHJvZy4uLgotQEAgLTU3MjgsNyArNjYzOCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCSAgICAgICMgTWFrZSBzdXJlIHRoZSBycGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KLSAJICAgICAgY2FzZSAiJHRlbXBfcnBhdGg6IiBpbgotIAkgICAgICAqIiRhYnNkaXI6IiopIDs7Ci0tCSAgICAgICopIHRlbXBfcnBhdGg9IiR0ZW1wX3JwYXRoJGFic2RpcjoiIDs7Ci0rCSAgICAgICopIGZ1bmNfYXBwZW5kIHRlbXBfcnBhdGggIiRhYnNkaXI6IiA7OwotIAkgICAgICBlc2FjCi0gCSAgICBmaQotIAotQEAgLTU3NDAsNyArNjY1MCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCSAgICAqKQotIAkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCi0gCSAgICAgICoiICRhYnNkaXIgIiopIDs7Ci0tCSAgICAgICopIGNvbXBpbGVfcnBhdGg9IiRjb21waWxlX3JwYXRoICRhYnNkaXIiCi0rCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OwotIAkgICAgICBlc2FjCi0gCSAgICAgIDs7Ci0gCSAgICBlc2FjCi1AQCAtNTc0OSw3ICs2NjU5LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAJICAgICopCi0gCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCi0gCSAgICAgICoiICRsaWJkaXIgIiopIDs7Ci0tCSAgICAgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIKLSsJICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OwotIAkgICAgICBlc2FjCi0gCSAgICAgIDs7Ci0gCSAgICBlc2FjCi1AQCAtNTc3NCwxMiArNjY4NCwxMiBAQCBmdW5jX21vZGVfbGluayAoKQotIAkgIGNhc2UgJGhvc3QgaW4KLSAJICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqKQotIAkgICAgICAjIE5vIHBvaW50IGluIHJlbGlua2luZyBETExzIGJlY2F1c2UgcGF0aHMgYXJlIG5vdCBlbmNvZGVkCi0tCSAgICAgIG5vdGluc3RfZGVwbGlicz0iJG5vdGluc3RfZGVwbGlicyAkbGliIgotKwkgICAgICBmdW5jX2FwcGVuZCBub3RpbnN0X2RlcGxpYnMgIiAkbGliIgotIAkgICAgICBuZWVkX3JlbGluaz1ubwotIAkgICAgOzsKLSAJICAqKQotIAkgICAgaWYgdGVzdCAiJGluc3RhbGxlZCIgPSBubzsgdGhlbgotLQkgICAgICBub3RpbnN0X2RlcGxpYnM9IiRub3RpbnN0X2RlcGxpYnMgJGxpYiIKLSsJICAgICAgZnVuY19hcHBlbmQgbm90aW5zdF9kZXBsaWJzICIgJGxpYiIKLSAJICAgICAgbmVlZF9yZWxpbms9eWVzCi0gCSAgICBmaQotIAkgICAgOzsKLUBAIC01ODE0LDcgKzY3MjQsNyBAQCBmdW5jX21vZGVfbGluayAoKQotIAkgICAgKikKLSAJICAgICAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgotIAkgICAgICAqIiAkYWJzZGlyICIqKSA7OwotLQkgICAgICAqKSBjb21waWxlX3JwYXRoPSIkY29tcGlsZV9ycGF0aCAkYWJzZGlyIgotKwkgICAgICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3JwYXRoICIgJGFic2RpciIgOzsKLSAJICAgICAgZXNhYwotIAkgICAgICA7OwotIAkgICAgZXNhYwotQEAgLTU4MjMsNyArNjczMyw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCSAgICAqKQotIAkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgotIAkgICAgICAqIiAkbGliZGlyICIqKSA7OwotLQkgICAgICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiCi0rCSAgICAgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKLSAJICAgICAgZXNhYwotIAkgICAgICA7OwotIAkgICAgZXNhYwotQEAgLTU4MzUsNyArNjc0NSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCSAgICBzaGlmdAotIAkgICAgcmVhbG5hbWU9IiQxIgotIAkgICAgc2hpZnQKLS0JICAgIGV2YWwgImxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIiCi0rCSAgICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKLSAJICAgICMgdXNlIGRsbmFtZSBpZiB3ZSBnb3QgaXQuIGl0J3MgcGVyZmVjdGx5IGdvb2QsIG5vPwotIAkgICAgaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KLSAJICAgICAgc29uYW1lPSIkZGxuYW1lIgotQEAgLTU4NDgsNyArNjc1OCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCQl2ZXJzdWZmaXg9Ii0kbWFqb3IiCi0gCQk7OwotIAkgICAgICBlc2FjCi0tCSAgICAgIGV2YWwgInNvbmFtZT1cIiRzb25hbWVfc3BlY1wiIgotKwkgICAgICBldmFsIHNvbmFtZT1cIiRzb25hbWVfc3BlY1wiCi0gCSAgICBlbHNlCi0gCSAgICAgIHNvbmFtZT0iJHJlYWxuYW1lIgotIAkgICAgZmkKLUBAIC01ODc3LDcgKzY3ODcsNyBAQCBmdW5jX21vZGVfbGluayAoKQotIAkgICAgbGlua2xpYj0kbmV3bGliCi0gCSAgZmkgIyB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiCi0gCi0tCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG1vZGUiICE9IHJlbGluazsgdGhlbgotKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rOyB0aGVuCi0gCSAgICBhZGRfc2hsaWJwYXRoPQotIAkgICAgYWRkX2Rpcj0KLSAJICAgIGFkZD0KLUBAIC01OTMzLDcgKzY4NDMsNyBAQCBmdW5jX21vZGVfbGluayAoKQotIAkJaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KLSAJCSAgY2FzZSAkbGliZGlyIGluCi0gCQkgICAgW1xcL10qKQotLQkJICAgICAgYWRkX2Rpcj0iJGFkZF9kaXIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKLSsJCSAgICAgIGZ1bmNfYXBwZW5kIGFkZF9kaXIgIiAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgotIAkJICAgICAgOzsKLSAJCSAgZXNhYwotIAkJZmkKLUBAIC01OTU1LDcgKzY4NjUsNyBAQCBmdW5jX21vZGVfbGluayAoKQotIAkgICAgaWYgdGVzdCAtbiAiJGFkZF9zaGxpYnBhdGgiOyB0aGVuCi0gCSAgICAgIGNhc2UgOiRjb21waWxlX3NobGlicGF0aDogaW4KLSAJICAgICAgKiI6JGFkZF9zaGxpYnBhdGg6IiopIDs7Ci0tCSAgICAgICopIGNvbXBpbGVfc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkYWRkX3NobGlicGF0aDoiIDs7Ci0rCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfc2hsaWJwYXRoICIkYWRkX3NobGlicGF0aDoiIDs7Ci0gCSAgICAgIGVzYWMKLSAJICAgIGZpCi0gCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgotQEAgLTU5NjksMTMgKzY4NzksMTMgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAJCSB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KLSAJCWNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCi0gCQkqIjokbGliZGlyOiIqKSA7OwotLQkJKikgZmluYWxpemVfc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoJGxpYmRpcjoiIDs7Ci0rCQkqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9zaGxpYnBhdGggIiRsaWJkaXI6IiA7OwotIAkJZXNhYwotIAkgICAgICBmaQotIAkgICAgZmkKLSAJICBmaQotIAotLQkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgotKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KLSAJICAgIGFkZF9zaGxpYnBhdGg9Ci0gCSAgICBhZGRfZGlyPQotIAkgICAgYWRkPQotQEAgLTU5ODksNyArNjg5OSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgotIAkgICAgICBjYXNlIDokZmluYWxpemVfc2hsaWJwYXRoOiBpbgotIAkgICAgICAqIjokbGliZGlyOiIqKSA7OwotLQkgICAgICAqKSBmaW5hbGl6ZV9zaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgkbGliZGlyOiIgOzsKLSsJICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfc2hsaWJwYXRoICIkbGliZGlyOiIgOzsKLSAJICAgICAgZXNhYwotIAkgICAgICBhZGQ9Ii1sJG5hbWUiCi0gCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9hdXRvbWF0aWMiID0geWVzOyB0aGVuCi1AQCAtNjAwMSwxMiArNjkxMSwxMiBAQCBmdW5jX21vZGVfbGluayAoKQotIAkgICAgICBmaQotIAkgICAgZWxzZQotIAkgICAgICAjIFdlIGNhbm5vdCBzZWVtIHRvIGhhcmRjb2RlIGl0LCBndWVzcyB3ZSdsbCBmYWtlIGl0LgotLQkgICAgICBhZGRfZGlyPSItTCRsaWJkaXIiCi0rCSAgICAgIGFkZF9kaXI9Ii1MJGx0X3N5c3Jvb3QkbGliZGlyIgotIAkgICAgICAjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCi0gCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCi0gCQljYXNlICRsaWJkaXIgaW4KLSAJCSAgW1xcL10qKQotLQkJICAgIGFkZF9kaXI9IiRhZGRfZGlyIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCi0rCQkgICAgZnVuY19hcHBlbmQgYWRkX2RpciAiIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCi0gCQkgICAgOzsKLSAJCWVzYWMKLSAJICAgICAgZmkKLUBAIC02MDgzLDI3ICs2OTkzLDMzIEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCSAgICAgICAgICAgdGVtcF94cnBhdGg9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotIAkJICAgY2FzZSAiICR4cnBhdGggIiBpbgotIAkJICAgKiIgJHRlbXBfeHJwYXRoICIqKSA7OwotLQkJICAgKikgeHJwYXRoPSIkeHJwYXRoICR0ZW1wX3hycGF0aCI7OwotKwkJICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJHRlbXBfeHJwYXRoIjs7Ci0gCQkgICBlc2FjOzsKLS0JICAgICAgKikgdGVtcF9kZXBsaWJzPSIkdGVtcF9kZXBsaWJzICRsaWJkaXIiOzsKLSsJICAgICAgKikgZnVuY19hcHBlbmQgdGVtcF9kZXBsaWJzICIgJGxpYmRpciI7OwotIAkgICAgICBlc2FjCi0gCSAgICBkb25lCi0gCSAgICBkZXBlbmRlbmN5X2xpYnM9IiR0ZW1wX2RlcGxpYnMiCi0gCSAgZmkKLSAKLS0JICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGFic2RpciIKLSsJICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkYWJzZGlyIgotIAkgICMgTGluayBhZ2FpbnN0IHRoaXMgbGlicmFyeQotIAkgIHRlc3QgIiRsaW5rX3N0YXRpYyIgPSBubyAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRhYnNfbGFkaXIvJGxhbmFtZSAkbmV3ZGVwZW5kZW5jeV9saWJzIgotIAkgICMgLi4uIGFuZCBpdHMgZGVwZW5kZW5jeV9saWJzCi0gCSAgdG1wX2xpYnM9Ci0gCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwotIAkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCi0tCSAgICBpZiAkb3B0X2R1cGxpY2F0ZV9kZXBzIDsgdGhlbgotKwkgICAgY2FzZSAkZGVwbGliIGluCi0rICAgICAgICAgICAgICAtTCopIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCi0rICAgICAgICAgICAgICAgICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0Ijs7Ci0rICAgICAgICAgICAgICAqKSBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIgOzsKLSsgICAgICAgICAgICBlc2FjCi0rCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgotIAkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgotLQkgICAgICAqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7Ci0rCSAgICAgICoiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQgIiopCi0rICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIgOzsKLSAJICAgICAgZXNhYwotIAkgICAgZmkKLS0JICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKLSsJICAgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKLSAJICBkb25lCi0gCi0gCSAgaWYgdGVzdCAiJGxpbmtfYWxsX2RlcGxpYnMiICE9IG5vOyB0aGVuCi1AQCAtNjExMyw4ICs3MDI5LDEwIEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCSAgICAgIGNhc2UgJGRlcGxpYiBpbgotIAkgICAgICAtTCopIHBhdGg9IiRkZXBsaWIiIDs7Ci0gCSAgICAgICoubGEpCi0rCSAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCi0rCSAgICAgICAgZGVwbGliPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKLSAJICAgICAgICBmdW5jX2Rpcm5hbWUgIiRkZXBsaWIiICIiICIuIgotLQkJZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKLSsJCWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAotIAkJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCi0gCQljYXNlICRkaXIgaW4KLSAJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzZGlyPSIkZGlyIiA7OwotQEAgLTYxMzAsNyArNzA0OCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCQljYXNlICRob3N0IGluCi0gCQkqLSotZGFyd2luKikKLSAJCSAgZGVwZGVwbD0KLS0JCSAgZGVwbGlicmFyeV9uYW1lcz1gJHtTRUR9IC1uIC1lICdzL15saWJyYXJ5X25hbWVzPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKLSsJCSAgZXZhbCBkZXBsaWJyYXJ5X25hbWVzPWAke1NFRH0gLW4gLWUgJ3MvXmxpYnJhcnlfbmFtZXM9XCguKlwpJC9cMS9wJyAkZGVwbGliYAotIAkJICBpZiB0ZXN0IC1uICIkZGVwbGlicmFyeV9uYW1lcyIgOyB0aGVuCi0gCQkgICAgZm9yIHRtcCBpbiAkZGVwbGlicmFyeV9uYW1lcyA7IGRvCi0gCQkgICAgICBkZXBkZXBsPSR0bXAKLUBAIC02MTQxLDggKzcwNTksOCBAQCBmdW5jX21vZGVfbGluayAoKQotICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkZGFyd2luX2luc3RhbGxfbmFtZSI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCR7T1RPT0w2NH0gLUwgJGRlcGRlcGwgIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAotICAgICAgICAgICAgICAgICAgICAgICBmaQotLQkJICAgICAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAke3dsfS1keWxpYl9maWxlICR7d2x9JHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgotLQkJICAgICAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzIC1keWxpYl9maWxlICR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKLSsJCSAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHt3bH0tZHlsaWJfZmlsZSAke3dsfSR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKLSsJCSAgICAgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiIC1keWxpYl9maWxlICR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKLSAJCSAgICAgIHBhdGg9Ci0gCQkgICAgZmkKLSAJCSAgZmkKLUBAIC02MTUyLDcgKzcwNzAsNyBAQCBmdW5jX21vZGVfbGluayAoKQotIAkJICA7OwotIAkJZXNhYwotIAkJZWxzZQotLQkJICBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKLSsJCSAgZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKLSAJCSAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAotIAkJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgotIAkJICB0ZXN0ICIkYWJzZGlyIiAhPSAiJGxpYmRpciIgJiYgXAotQEAgLTYxOTIsNyArNzExMCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCSAgZm9yIGRpciBpbiAkbmV3bGliX3NlYXJjaF9wYXRoOyBkbwotIAkgICAgY2FzZSAiJGxpYl9zZWFyY2hfcGF0aCAiIGluCi0gCSAgICAqIiAkZGlyICIqKSA7OwotLQkgICAgKikgbGliX3NlYXJjaF9wYXRoPSIkbGliX3NlYXJjaF9wYXRoICRkaXIiIDs7Ci0rCSAgICAqKSBmdW5jX2FwcGVuZCBsaWJfc2VhcmNoX3BhdGggIiAkZGlyIiA7OwotIAkgICAgZXNhYwotIAkgIGRvbmUKLSAJICBuZXdsaWJfc2VhcmNoX3BhdGg9Ci1AQCAtNjIwNSw3ICs3MTIzLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAJZmkKLSAJZm9yIHZhciBpbiAkdmFycyBkZXBlbmRlbmN5X2xpYnM7IGRvCi0gCSAgIyBBZGQgbGlicmFyaWVzIHRvICR2YXIgaW4gcmV2ZXJzZSBvcmRlcgotLQkgIGV2YWwgdG1wX2xpYnM9XCQkdmFyCi0rCSAgZXZhbCB0bXBfbGlicz1cIlwkJHZhclwiCi0gCSAgbmV3X2xpYnM9Ci0gCSAgZm9yIGRlcGxpYiBpbiAkdG1wX2xpYnM7IGRvCi0gCSAgICAjIEZJWE1FOiBQZWRhbnRpY2FsbHksIHRoaXMgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLCBzbwotQEAgLTYyNTAsMTMgKzcxNjgsMTMgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAJICAgIC1MKikKLSAJICAgICAgY2FzZSAiICR0bXBfbGlicyAiIGluCi0gCSAgICAgICoiICRkZXBsaWIgIiopIDs7Ci0tCSAgICAgICopIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIgOzsKLSsJICAgICAgKikgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIiA7OwotIAkgICAgICBlc2FjCi0gCSAgICAgIDs7Ci0tCSAgICAqKSB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiIDs7Ci0rCSAgICAqKSBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiIDs7Ci0gCSAgICBlc2FjCi0gCSAgZG9uZQotLQkgIGV2YWwgJHZhcj1cJHRtcF9saWJzCi0rCSAgZXZhbCAkdmFyPVwiJHRtcF9saWJzXCIKLSAJZG9uZSAjIGZvciB2YXIKLSAgICAgICBmaQotICAgICAgICMgTGFzdCBzdGVwOiByZW1vdmUgcnVudGltZSBsaWJzIGZyb20gZGVwZW5kZW5jeV9saWJzCi1AQCAtNjI2OSw3ICs3MTg3LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAJICA7OwotIAllc2FjCi0gCWlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KLS0JICB0bXBfbGlicz0iJHRtcF9saWJzICRpIgotKwkgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGkiCi0gCWZpCi0gICAgICAgZG9uZQotICAgICAgIGRlcGVuZGVuY3lfbGlicz0kdG1wX2xpYnMKLUBAIC02MzEwLDcgKzcyMjgsNyBAQCBmdW5jX21vZGVfbGluayAoKQotICAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgotICAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubwotICAgICAgIG9sZGxpYnM9IiRvdXRwdXQiCi0tICAgICAgb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMiCi0rICAgICAgZnVuY19hcHBlbmQgb2JqcyAiJG9sZF9kZXBsaWJzIgotICAgICAgIDs7Ci0gCi0gICAgIGxpYikKLUBAIC02MzE5LDggKzcyMzcsOCBAQCBmdW5jX21vZGVfbGluayAoKQotICAgICAgIGxpYiopCi0gCWZ1bmNfc3RyaXBuYW1lICdsaWInICcubGEnICIkb3V0cHV0bmFtZSIKLSAJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0tCWV2YWwgInNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIiIKLS0JZXZhbCAibGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIiIKLSsJZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKLSsJZXZhbCBsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiCi0gCTs7Ci0gICAgICAgKikKLSAJdGVzdCAiJG1vZHVsZSIgPSBubyAmJiBcCi1AQCAtNjMzMCw4ICs3MjQ4LDggQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAJICAjIEFkZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzIGlmIHJlcXVpcmVkCi0gCSAgZnVuY19zdHJpcG5hbWUgJycgJy5sYScgIiRvdXRwdXRuYW1lIgotIAkgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotLQkgIGV2YWwgInNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIiIKLS0JICBldmFsICJsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiIgotKwkgIGV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCi0rCSAgZXZhbCBsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiCi0gCWVsc2UKLSAJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCi0gCSAgbGlibmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci1AQCAtNjM0Niw3ICs3MjY0LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAJICBlY2hvCi0gCSAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIG5vbi1saWJ0b29sIgotIAkgICRFQ0hPICIqKiogb2JqZWN0cyAkb2JqcyBpcyBub3QgcG9ydGFibGUhIgotLQkgIGxpYm9ianM9IiRsaWJvYmpzICRvYmpzIgotKwkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkb2JqcyIKLSAJZmkKLSAgICAgICBmaQotIAotQEAgLTY1NDQsNyArNzQ2Miw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCSAgZG9uZQotIAotIAkgICMgTWFrZSBleGVjdXRhYmxlcyBkZXBlbmQgb24gb3VyIGN1cnJlbnQgdmVyc2lvbi4KLS0JICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmc6JHtjdXJyZW50fS4wIgotKwkgIGZ1bmNfYXBwZW5kIHZlcnN0cmluZyAiOiR7Y3VycmVudH0uMCIKLSAJICA7OwotIAotIAlxbngpCi1AQCAtNjYxMiwxMCArNzUzMCwxMCBAQCBmdW5jX21vZGVfbGluayAoKQotICAgICAgIGZpCi0gCi0gICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRsaWJuYW1lIiAiJGxpYm5hbWUiICJ5ZXMiCi0tICAgICAgbGlib2Jqcz0iJGxpYm9ianMgJHN5bWZpbGVvYmoiCi0rICAgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRzeW1maWxlb2JqIgotICAgICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9Ci0gCi0tICAgICAgaWYgdGVzdCAiJG1vZGUiICE9IHJlbGluazsgdGhlbgotKyAgICAgIGlmIHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rOyB0aGVuCi0gCSMgUmVtb3ZlIG91ciBvdXRwdXRzLCBidXQgZG9uJ3QgcmVtb3ZlIG9iamVjdCBmaWxlcyBzaW5jZSB0aGV5Ci0gCSMgbWF5IGhhdmUgYmVlbiBjcmVhdGVkIHdoZW4gY29tcGlsaW5nIFBJQyBvYmplY3RzLgotIAlyZW1vdmVsaXN0PQotQEAgLTY2MzEsNyArNzU0OSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCQkgICBjb250aW51ZQotIAkJIGZpCi0gCSAgICAgICBmaQotLQkgICAgICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJHAiCi0rCSAgICAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJHAiCi0gCSAgICAgICA7OwotIAkgICAgKikgOzsKLSAJICBlc2FjCi1AQCAtNjY0Miw3ICs3NTYwLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAKLSAgICAgICAjIE5vdyBzZXQgdGhlIHZhcmlhYmxlcyBmb3IgYnVpbGRpbmcgb2xkIGxpYnJhcmllcy4KLSAgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzICYmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IGNvbnZlbmllbmNlIDsgdGhlbgotLQlvbGRsaWJzPSIkb2xkbGlicyAkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgotKwlmdW5jX2FwcGVuZCBvbGRsaWJzICIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKLSAKLSAJIyBUcmFuc2Zvcm0gLmxvIGZpbGVzIHRvIC5vIGZpbGVzLgotIAlvbGRvYmpzPSIkb2JqcyAiYCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIvXC4ke2xpYmV4dH0kL2Q7ICRsbzJvIiB8ICROTDJTUGAKLUBAIC02NjU5LDEwICs3NTc3LDExIEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCSMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGFueSBycGF0aCBmbGFncywgdGhlbiBhZGQgdGhlbS4KLSAJdGVtcF94cnBhdGg9Ci0gCWZvciBsaWJkaXIgaW4gJHhycGF0aDsgZG8KLS0JICB0ZW1wX3hycGF0aD0iJHRlbXBfeHJwYXRoIC1SJGxpYmRpciIKLSsJICBmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKLSsJICBmdW5jX2FwcGVuZCB0ZW1wX3hycGF0aCAiIC1SJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKLSAJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgotIAkgICoiICRsaWJkaXIgIiopIDs7Ci0tCSAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIiA7OwotKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKLSAJICBlc2FjCi0gCWRvbmUKLSAJaWYgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KLUBAIC02Njc2LDcgKzc1OTUsNyBAQCBmdW5jX21vZGVfbGluayAoKQotICAgICAgIGZvciBsaWIgaW4gJG9sZF9kbGZpbGVzOyBkbwotIAljYXNlICIgJGRscHJlZmlsZXMgJGRsZmlsZXMgIiBpbgotIAkqIiAkbGliICIqKSA7OwotLQkqKSBkbGZpbGVzPSIkZGxmaWxlcyAkbGliIiA7OwotKwkqKSBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGxpYiIgOzsKLSAJZXNhYwotICAgICAgIGRvbmUKLSAKLUBAIC02Njg2LDcgKzc2MDUsNyBAQCBmdW5jX21vZGVfbGluayAoKQotICAgICAgIGZvciBsaWIgaW4gJG9sZF9kbHByZWZpbGVzOyBkbwotIAljYXNlICIkZGxwcmVmaWxlcyAiIGluCi0gCSoiICRsaWIgIiopIDs7Ci0tCSopIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRsaWIiIDs7Ci0rCSopIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkbGliIiA7OwotIAllc2FjCi0gICAgICAgZG9uZQotIAotQEAgLTY2OTgsNyArNzYxNyw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCSAgICA7OwotIAkgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKLSAJICAgICMgUmhhcHNvZHkgQyBsaWJyYXJ5IGlzIGluIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCi0tCSAgICBkZXBsaWJzPSIkZGVwbGlicyBTeXN0ZW0ubHRmcmFtZXdvcmsiCi0rCSAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgU3lzdGVtLmx0ZnJhbWV3b3JrIgotIAkgICAgOzsKLSAJICAqLSotbmV0YnNkKikKLSAJICAgICMgRG9uJ3QgbGluayB3aXRoIGxpYmMgdW50aWwgdGhlIGEub3V0IGxkLnNvIGlzIGZpeGVkLgotQEAgLTY3MTUsNyArNzYzNCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCSAgKikKLSAJICAgICMgQWRkIGxpYmMgdG8gZGVwbGlicyBvbiBhbGwgb3RoZXIgc3lzdGVtcyBpZiBuZWNlc3NhcnkuCi0gCSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9uZWVkX2xjIiA9ICJ5ZXMiOyB0aGVuCi0tCSAgICAgIGRlcGxpYnM9IiRkZXBsaWJzIC1sYyIKLSsJICAgICAgZnVuY19hcHBlbmQgZGVwbGlicyAiIC1sYyIKLSAJICAgIGZpCi0gCSAgICA7OwotIAkgIGVzYWMKLUBAIC02NzY0LDE4ICs3NjgzLDE4IEBAIEVPRgotIAkJaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgotIAkJICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KLSAJCSAgKiIgJGkgIiopCi0tCQkgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCi0rCQkgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgotIAkJICAgIGk9IiIKLSAJCSAgICA7OwotIAkJICBlc2FjCi0gCQlmaQotIAkJaWYgdGVzdCAtbiAiJGkiIDsgdGhlbgotLQkJICBldmFsICJsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiIgotLQkJICBldmFsICJkZXBsaWJfbWF0Y2hlcz1cIiRsaWJyYXJ5X25hbWVzX3NwZWNcIiIKLSsJCSAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCi0rCQkgIGRlcGxpYl9tYXRjaGVzPWBldmFsICJcXCRFQ0hPIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiImAKLSAJCSAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlczsgc2hpZnQKLSAJCSAgZGVwbGliX21hdGNoPSQxCi0gCQkgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMCA7IHRoZW4KLS0JCSAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKLSsJCSAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCi0gCQkgIGVsc2UKLSAJCSAgICBkcm9wcGVkZGVwcz15ZXMKLSAJCSAgICBlY2hvCi1AQCAtNjc4OSw3ICs3NzA4LDcgQEAgRU9GCi0gCQlmaQotIAkJOzsKLSAJICAgICAgKikKLS0JCW5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgotKwkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgotIAkJOzsKLSAJICAgICAgZXNhYwotIAkgICAgZG9uZQotQEAgLTY4MDcsMTggKzc3MjYsMTggQEAgRU9GCi0gCQkgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KLSAJCSAgICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KLSAJCSAgICAqIiAkaSAiKikKLS0JCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgotKwkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgotIAkJICAgICAgaT0iIgotIAkJICAgICAgOzsKLSAJCSAgICBlc2FjCi0gCQkgIGZpCi0gCQkgIGlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KLS0JCSAgICBldmFsICJsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiIgotLQkJICAgIGV2YWwgImRlcGxpYl9tYXRjaGVzPVwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiIgotKwkJICAgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAotKwkJICAgIGRlcGxpYl9tYXRjaGVzPWBldmFsICJcXCRFQ0hPIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiImAKLSAJCSAgICBzZXQgZHVtbXkgJGRlcGxpYl9tYXRjaGVzOyBzaGlmdAotIAkJICAgIGRlcGxpYl9tYXRjaD0kMQotIAkJICAgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMCA7IHRoZW4KLS0JCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgotKwkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgotIAkJICAgIGVsc2UKLSAJCSAgICAgIGRyb3BwZWRkZXBzPXllcwotIAkJICAgICAgZWNobwotQEAgLTY4NDAsNyArNzc1OSw3IEBAIEVPRgotIAkJZmkKLSAJCTs7Ci0gCSAgICAgICopCi0tCQluZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKLSsJCWZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKLSAJCTs7Ci0gCSAgICAgIGVzYWMKLSAJICAgIGRvbmUKLUBAIC02ODU3LDE1ICs3Nzc2LDI3IEBAIEVPRgotIAkgICAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCi0gCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KLSAJCSoiICRhX2RlcGxpYiAiKikKLS0JCSAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgotKwkJICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgotIAkJICBhX2RlcGxpYj0iIgotIAkJICA7OwotIAkJZXNhYwotIAkgICAgICBmaQotIAkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgotLQkJZXZhbCAibGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIiIKLSsJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAotKwkJaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfZ2xvYiI7IHRoZW4KLSsJCSAgbGlibmFtZWdsb2I9YGZ1bmNfZWNob19hbGwgIiRsaWJuYW1lIiB8ICRTRUQgLWUgJGZpbGVfbWFnaWNfZ2xvYmAKLSsJCWVsc2UKLSsJCSAgbGlibmFtZWdsb2I9JGxpYm5hbWUKLSsJCWZpCi0rCQl0ZXN0ICIkd2FudF9ub2Nhc2VnbG9iIiA9IHllcyAmJiBub2Nhc2VnbG9iPWBzaG9wdCAtcCBub2Nhc2VnbG9iYAotIAkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCi0tCQkgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZVsuLV0qIDI+L2Rldi9udWxsYAotKwkJICBpZiB0ZXN0ICIkd2FudF9ub2Nhc2VnbG9iIiA9IHllczsgdGhlbgotKwkJICAgIHNob3B0IC1zIG5vY2FzZWdsb2IKLSsJCSAgICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVnbG9iWy4tXSogMj4vZGV2L251bGxgCi0rCQkgICAgJG5vY2FzZWdsb2IKLSsJCSAgZWxzZQotKwkJICAgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZWdsb2JbLi1dKiAyPi9kZXYvbnVsbGAKLSsJCSAgZmkKLSAJCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbwotIAkJICAgICAgIyBGb2xsb3cgc29mdCBsaW5rcy4KLSAJCSAgICAgIGlmIGxzIC1sTGQgIiRwb3RlbnRfbGliIiAyPi9kZXYvbnVsbCB8Ci1AQCAtNjg4NSwxMCArNzgxNiwxMCBAQCBFT0YKLSAJCQkqKSBwb3RsaWI9YCRFQ0hPICIkcG90bGliIiB8ICRTRUQgJ3MsW14vXSokLCwnYCIkcG90bGlibGluayI7OwotIAkJCWVzYWMKLSAJCSAgICAgIGRvbmUKLS0JCSAgICAgIGlmIGV2YWwgIiRmaWxlX21hZ2ljX2NtZCBcIlwkcG90bGliXCIiIDI+L2Rldi9udWxsIHwKLSsJCSAgICAgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwiXCRwb3RsaWJcIiAyPi9kZXYvbnVsbCB8Ci0gCQkJICRTRUQgLWUgMTBxIHwKLSAJCQkgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KLS0JCQluZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCi0rCQkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKLSAJCQlhX2RlcGxpYj0iIgotIAkJCWJyZWFrIDIKLSAJCSAgICAgIGZpCi1AQCAtNjkxMyw3ICs3ODQ0LDcgQEAgRU9GCi0gCSAgICAgIDs7Ci0gCSAgICAqKQotIAkgICAgICAjIEFkZCBhIC1MIGFyZ3VtZW50LgotLQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCi0rCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCi0gCSAgICAgIDs7Ci0gCSAgICBlc2FjCi0gCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KLUBAIC02OTI5LDIwICs3ODYwLDIwIEBAIEVPRgotIAkgICAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCi0gCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KLSAJCSoiICRhX2RlcGxpYiAiKikKLS0JCSAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgotKwkJICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgotIAkJICBhX2RlcGxpYj0iIgotIAkJICA7OwotIAkJZXNhYwotIAkgICAgICBmaQotIAkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgotLQkJZXZhbCAibGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIiIKLSsJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAotIAkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCi0gCQkgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZVsuLV0qIDI+L2Rldi9udWxsYAotIAkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCi0gCQkgICAgcG90bGliPSIkcG90ZW50X2xpYiIgIyBzZWUgc3ltbGluay1jaGVjayBhYm92ZSBpbiBmaWxlX21hZ2ljIHRlc3QKLSAJCSAgICBpZiBldmFsICJcJEVDSE8gXCIkcG90ZW50X2xpYlwiIiAyPi9kZXYvbnVsbCB8ICRTRUQgMTBxIHwgXAotIAkJICAgICAgICRFR1JFUCAiJG1hdGNoX3BhdHRlcm5fcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCi0tCQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCi0rCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgotIAkJICAgICAgYV9kZXBsaWI9IiIKLSAJCSAgICAgIGJyZWFrIDIKLSAJCSAgICBmaQotQEAgLTY5NjcsNyArNzg5OCw3IEBAIEVPRgotIAkgICAgICA7OwotIAkgICAgKikKLSAJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KLS0JICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgotKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgotIAkgICAgICA7OwotIAkgICAgZXNhYwotIAkgIGRvbmUgIyBHb25lIHRocm91Z2ggYWxsIGRlcGxpYnMuCi1AQCAtNzA3MSw3ICs4MDAyLDcgQEAgRU9GCi0gCSopCi0gCSAgY2FzZSAiICRkZXBsaWJzICIgaW4KLSAJICAqIiAtTCRwYXRoLyRvYmpkaXIgIiopCi0tCSAgICBuZXdfbGlicz0iJG5ld19saWJzIC1MJHBhdGgvJG9iamRpciIgOzsKLSsJICAgIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgLUwkcGF0aC8kb2JqZGlyIiA7OwotIAkgIGVzYWMKLSAJICA7OwotIAllc2FjCi1AQCAtNzA4MSwxMCArODAxMiwxMCBAQCBFT0YKLSAJLUwqKQotIAkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgotIAkgICoiICRkZXBsaWIgIiopIDs7Ci0tCSAgKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OwotKwkgICopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKLSAJICBlc2FjCi0gCSAgOzsKLS0JKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OwotKwkqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7Ci0gCWVzYWMKLSAgICAgICBkb25lCi0gICAgICAgZGVwbGlicz0iJG5ld19saWJzIgotQEAgLTcxMDEsMTAgKzgwMzIsMTIgQEAgRU9GCi0gCSAgaGFyZGNvZGVfbGliZGlycz0KLSAJICBkZXBfcnBhdGg9Ci0gCSAgcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCIKLS0JICB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rICYmIHJwYXRoPSIkY29tcGlsZV9ycGF0aCRycGF0aCIKLSsJICB0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluayAmJiBycGF0aD0iJGNvbXBpbGVfcnBhdGgkcnBhdGgiCi0gCSAgZm9yIGxpYmRpciBpbiAkcnBhdGg7IGRvCi0gCSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KLSAJICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCi0rCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKLSsJCWxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0Ci0gCQlpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KLSAJCSAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKLSAJCWVsc2UKLUBAIC03MTEzLDE4ICs4MDQ2LDE4IEBAIEVPRgotIAkJICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCi0gCQkgICAgOzsKLSAJCSAgKikKLS0JCSAgICBoYXJkY29kZV9saWJkaXJzPSIkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKLSsJCSAgICBmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJzICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCi0gCQkgICAgOzsKLSAJCSAgZXNhYwotIAkJZmkKLSAJICAgICAgZWxzZQotLQkJZXZhbCAiZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCi0tCQlkZXBfcnBhdGg9IiRkZXBfcnBhdGggJGZsYWciCi0rCQlldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCi0rCQlmdW5jX2FwcGVuZCBkZXBfcnBhdGggIiAkZmxhZyIKLSAJICAgICAgZmkKLSAJICAgIGVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgotIAkgICAgICBjYXNlICIkcGVybV9ycGF0aCAiIGluCi0gCSAgICAgICoiICRsaWJkaXIgIiopIDs7Ci0tCSAgICAgICopIHBlcm1fcnBhdGg9IiRwZXJtX3JwYXRoICRsaWJkaXIiIDs7Ci0rCSAgICAgICopIGZ1bmNfYXBwZWQgcGVybV9ycGF0aCAiICRsaWJkaXIiIDs7Ci0gCSAgICAgIGVzYWMKLSAJICAgIGZpCi0gCSAgZG9uZQotQEAgLTcxMzMsNDAgKzgwNjYsMzggQEAgRU9GCi0gCSAgICAgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCi0gCSAgICBsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgotIAkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQiOyB0aGVuCi0tCSAgICAgIGV2YWwgImRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkXCIiCi0rCSAgICAgIGV2YWwgZGVwX3JwYXRoPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRcIgotIAkgICAgZWxzZQotLQkgICAgICBldmFsICJkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgotKwkgICAgICBldmFsIGRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKLSAJICAgIGZpCi0gCSAgZmkKLSAJICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiICYmIHRlc3QgLW4gIiRwZXJtX3JwYXRoIjsgdGhlbgotIAkgICAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KLSAJICAgIHJwYXRoPQotIAkgICAgZm9yIGRpciBpbiAkcGVybV9ycGF0aDsgZG8KLS0JICAgICAgcnBhdGg9IiRycGF0aCRkaXI6IgotKwkgICAgICBmdW5jX2FwcGVuZCBycGF0aCAiJGRpcjoiCi0gCSAgICBkb25lCi0tCSAgICBldmFsICRydW5wYXRoX3Zhcj1cJHJwYXRoXCQkcnVucGF0aF92YXIKLS0JICAgIGV4cG9ydCAkcnVucGF0aF92YXIKLSsJICAgIGV2YWwgIiRydW5wYXRoX3Zhcj0nJHJwYXRoXCQkcnVucGF0aF92YXInOyBleHBvcnQgJHJ1bnBhdGhfdmFyIgotIAkgIGZpCi0gCSAgdGVzdCAtbiAiJGRlcF9ycGF0aCIgJiYgZGVwbGlicz0iJGRlcF9ycGF0aCAkZGVwbGlicyIKLSAJZmkKLSAKLSAJc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoIgotLQl0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rICYmIHNobGlicGF0aD0iJGNvbXBpbGVfc2hsaWJwYXRoJHNobGlicGF0aCIKLSsJdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbmsgJiYgc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkc2hsaWJwYXRoIgotIAlpZiB0ZXN0IC1uICIkc2hsaWJwYXRoIjsgdGhlbgotLQkgIGV2YWwgJHNobGlicGF0aF92YXI9XCRzaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyCi0tCSAgZXhwb3J0ICRzaGxpYnBhdGhfdmFyCi0rCSAgZXZhbCAiJHNobGlicGF0aF92YXI9JyRzaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyJzsgZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgotIAlmaQotIAotIAkjIEdldCB0aGUgcmVhbCBhbmQgbGluayBuYW1lcyBvZiB0aGUgbGlicmFyeS4KLS0JZXZhbCAic2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiIgotLQlldmFsICJsaWJyYXJ5X25hbWVzPVwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiIgotKwlldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgotKwlldmFsIGxpYnJhcnlfbmFtZXM9XCIkbGlicmFyeV9uYW1lc19zcGVjXCIKLSAJc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCi0gCXNoaWZ0Ci0gCXJlYWxuYW1lPSIkMSIKLSAJc2hpZnQKLSAKLSAJaWYgdGVzdCAtbiAiJHNvbmFtZV9zcGVjIjsgdGhlbgotLQkgIGV2YWwgInNvbmFtZT1cIiRzb25hbWVfc3BlY1wiIgotKwkgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKLSAJZWxzZQotIAkgIHNvbmFtZT0iJHJlYWxuYW1lIgotIAlmaQotQEAgLTcxNzgsNyArODEwOSw3IEBAIEVPRgotIAlsaW5rbmFtZXM9Ci0gCWZvciBsaW5rCi0gCWRvCi0tCSAgbGlua25hbWVzPSIkbGlua25hbWVzICRsaW5rIgotKwkgIGZ1bmNfYXBwZW5kIGxpbmtuYW1lcyAiICRsaW5rIgotIAlkb25lCi0gCi0gCSMgVXNlIHN0YW5kYXJkIG9iamVjdHMgaWYgdGhleSBhcmUgcGljCi1AQCAtNzE4OSw3ICs4MTIwLDcgQEAgRU9GCi0gCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KLSAJICAkb3B0X2RyeV9ydW4gfHwgY3AgIiRleHBvcnRfc3ltYm9scyIgIiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnVleHAiCi0gCSAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnVleHAiCi0tCSAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkZXhwb3J0X3N5bWJvbHMiCi0rCSAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMiCi0gCWZpCi0gCi0gCW9yaWdfZXhwb3J0X3N5bWJvbHM9Ci1AQCAtNzIyMCwxMyArODE1MSw0NSBAQCBFT0YKLSAJICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJGV4cG9ydF9zeW1ib2xzCi0gCSAgICBjbWRzPSRleHBvcnRfc3ltYm9sc19jbWRzCi0gCSAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKLS0JICAgIGZvciBjbWQgaW4gJGNtZHM7IGRvCi0rCSAgICBmb3IgY21kMSBpbiAkY21kczsgZG8KLSAJICAgICAgSUZTPSIkc2F2ZV9pZnMiCi0tCSAgICAgIGV2YWwgImNtZD1cIiRjbWRcIiIKLS0JICAgICAgZnVuY19sZW4gIiAkY21kIgotLQkgICAgICBsZW49JGZ1bmNfbGVuX3Jlc3VsdAotLQkgICAgICBpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KLSsJICAgICAgIyBUYWtlIHRoZSBub3JtYWwgYnJhbmNoIGlmIHRoZSBubV9maWxlX2xpc3Rfc3BlYyBicmFuY2gKLSsJICAgICAgIyBkb2Vzbid0IHdvcmsgb3IgaWYgdG9vbCBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQuCi0rCSAgICAgIGNhc2UgJG5tX2ZpbGVfbGlzdF9zcGVjfiR0b190b29sX2ZpbGVfY21kIGluCi0rCQkqfmZ1bmNfY29udmVydF9maWxlX25vb3AgfCAqfmZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyIHwgfiopCi0rCQkgIHRyeV9ub3JtYWxfYnJhbmNoPXllcwotKwkJICBldmFsIGNtZD1cIiRjbWQxXCIKLSsJCSAgZnVuY19sZW4gIiAkY21kIgotKwkJICBsZW49JGZ1bmNfbGVuX3Jlc3VsdAotKwkJICA7OwotKwkJKikKLSsJCSAgdHJ5X25vcm1hbF9icmFuY2g9bm8KLSsJCSAgOzsKLSsJICAgICAgZXNhYwotKwkgICAgICBpZiB0ZXN0ICIkdHJ5X25vcm1hbF9icmFuY2giID0geWVzIFwKLSsJCSAmJiB7IHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiBcCi0rCQkgICAgICB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgfQotKwkgICAgICB0aGVuCi0rCQlmdW5jX3Nob3dfZXZhbCAiJGNtZCIgJ2V4aXQgJD8nCi0rCQlza2lwcGVkX2V4cG9ydD1mYWxzZQotKwkgICAgICBlbGlmIHRlc3QgLW4gIiRubV9maWxlX2xpc3Rfc3BlYyI7IHRoZW4KLSsJCWZ1bmNfYmFzZW5hbWUgIiRvdXRwdXQiCi0rCQlvdXRwdXRfbGE9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0Ci0rCQlzYXZlX2xpYm9ianM9JGxpYm9ianMKLSsJCXNhdmVfb3V0cHV0PSRvdXRwdXQKLSsJCW91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5ubQotKwkJZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCi0rCQlsaWJvYmpzPSRubV9maWxlX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKLSsJCWZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKLSsJCWZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJE5NIGlucHV0IGZpbGUgbGlzdDogJG91dHB1dCIKLSsJCWZvciBvYmogaW4gJHNhdmVfbGlib2JqczsgZG8KLSsJCSAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCi0rCQkgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IgotKwkJZG9uZSA+ICIkb3V0cHV0IgotKwkJZXZhbCBjbWQ9XCIkY21kMVwiCi0gCQlmdW5jX3Nob3dfZXZhbCAiJGNtZCIgJ2V4aXQgJD8nCi0rCQlvdXRwdXQ9JHNhdmVfb3V0cHV0Ci0rCQlsaWJvYmpzPSRzYXZlX2xpYm9ianMKLSAJCXNraXBwZWRfZXhwb3J0PWZhbHNlCi0gCSAgICAgIGVsc2UKLSAJCSMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBleGVjdXRlIGluIG9uZSBzdGVwLgotQEAgLTcyNDgsNyArODIxMSw3IEBAIEVPRgotIAlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCi0gCSAgdG1wX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCi0gCSAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0iJG9yaWdfZXhwb3J0X3N5bWJvbHMiCi0tCSAgJG9wdF9kcnlfcnVuIHx8ICRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyIKLSsJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKLSAJZmkKLSAKLSAJaWYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KLUBAIC03MjYwLDcgKzgyMjMsNyBAQCBFT0YKLSAJICAjIGdsb2JhbCB2YXJpYWJsZXMuIGpvaW4oMSkgd291bGQgYmUgbmljZSBoZXJlLCBidXQgdW5mb3J0dW5hdGVseQotIAkgICMgaXNuJ3QgYSBibGVzc2VkIHRvb2wuCi0gCSAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWUgJy9bICxdREFUQS8hZDtzLFwoLipcKVwoWyBcLF0uKlwpLHN8XlwxJHxcMVwyfCwnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyCi0tCSAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgotKwkgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKLSAJICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYKLSAJICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scwotIAlmaQotQEAgLTcyNzAsNyArODIzMyw3IEBAIEVPRgotIAkgIGNhc2UgIiAkY29udmVuaWVuY2UgIiBpbgotIAkgICoiICR0ZXN0X2RlcGxpYiAiKikgOzsKLSAJICAqKQotLQkgICAgdG1wX2RlcGxpYnM9IiR0bXBfZGVwbGlicyAkdGVzdF9kZXBsaWIiCi0rCSAgICBmdW5jX2FwcGVuZCB0bXBfZGVwbGlicyAiICR0ZXN0X2RlcGxpYiIKLSAJICAgIDs7Ci0gCSAgZXNhYwotIAlkb25lCi1AQCAtNzI4Niw0MyArODI0OSw0MyBAQCBFT0YKLSAJICBmaQotIAkgIGlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KLSAJICAgIHNhdmVfbGlib2Jqcz0kbGlib2JqcwotLQkgICAgZXZhbCAibGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIiIKLSsJICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgotIAkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KLSAJICBlbHNlCi0gCSAgICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgotLQkgICAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCi0rCSAgICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgotIAotIAkgICAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCi0tCSAgICBsaWJvYmpzPSIkbGlib2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKLSsJICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKLSAJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9Ci0gCSAgZmkKLSAJZmkKLSAKLSAJaWYgdGVzdCAiJHRocmVhZF9zYWZlIiA9IHllcyAmJiB0ZXN0IC1uICIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjIjsgdGhlbgotLQkgIGV2YWwgImZsYWc9XCIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjXCIiCi0tCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRmbGFnIgotKwkgIGV2YWwgZmxhZz1cIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWNcIgotKwkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRmbGFnIgotIAlmaQotIAotIAkjIE1ha2UgYSBiYWNrdXAgb2YgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgd2hlbiByZWxpbmtpbmcKLS0JaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCi0tCSAgJG9wdF9kcnlfcnVuIHx8IChjZCAkb3V0cHV0X29iamRpciAmJiAkUk0gJHtyZWFsbmFtZX1VICYmICRNViAkcmVhbG5hbWUgJHtyZWFsbmFtZX1VKSB8fCBleGl0ICQ/Ci0rCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KLSsJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVUgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVUpJyB8fCBleGl0ICQ/Ci0gCWZpCi0gCi0gCSMgRG8gZWFjaCBvZiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KLSAJaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJG1vZHVsZV9jbWRzIiA7IHRoZW4KLSAJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRtb2R1bGVfZXhwc3ltX2NtZHMiOyB0aGVuCi0tCSAgICBldmFsICJ0ZXN0X2NtZHM9XCIkbW9kdWxlX2V4cHN5bV9jbWRzXCIiCi0rCSAgICBldmFsIHRlc3RfY21kcz1cIiRtb2R1bGVfZXhwc3ltX2NtZHNcIgotIAkgICAgY21kcz0kbW9kdWxlX2V4cHN5bV9jbWRzCi0gCSAgZWxzZQotLQkgICAgZXZhbCAidGVzdF9jbWRzPVwiJG1vZHVsZV9jbWRzXCIiCi0rCSAgICBldmFsIHRlc3RfY21kcz1cIiRtb2R1bGVfY21kc1wiCi0gCSAgICBjbWRzPSRtb2R1bGVfY21kcwotIAkgIGZpCi0gCWVsc2UKLSAJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIjsgdGhlbgotLQkgICAgZXZhbCAidGVzdF9jbWRzPVwiJGFyY2hpdmVfZXhwc3ltX2NtZHNcIiIKLSsJICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfZXhwc3ltX2NtZHNcIgotIAkgICAgY21kcz0kYXJjaGl2ZV9leHBzeW1fY21kcwotIAkgIGVsc2UKLS0JICAgIGV2YWwgInRlc3RfY21kcz1cIiRhcmNoaXZlX2NtZHNcIiIKLSsJICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfY21kc1wiCi0gCSAgICBjbWRzPSRhcmNoaXZlX2NtZHMKLSAJICBmaQotIAlmaQotQEAgLTczNjYsMTAgKzgzMjksMTMgQEAgRU9GCi0gCSAgICBlY2hvICdJTlBVVCAoJyA+ICRvdXRwdXQKLSAJICAgIGZvciBvYmogaW4gJHNhdmVfbGlib2JqcwotIAkgICAgZG8KLS0JICAgICAgJEVDSE8gIiRvYmoiID4+ICRvdXRwdXQKLSsJICAgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCi0rCSAgICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiA+PiAkb3V0cHV0Ci0gCSAgICBkb25lCi0gCSAgICBlY2hvICcpJyA+PiAkb3V0cHV0Ci0tCSAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRvdXRwdXQiCi0rCSAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCi0rCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKLSsJICAgIG91dHB1dD0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0Ci0gCSAgZWxpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgIlgkZmlsZV9saXN0X3NwZWMiICE9IFg7IHRoZW4KLSAJICAgIG91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5sbmsKLSAJICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgbGlua2VyIGlucHV0IGZpbGUgbGlzdDogJG91dHB1dCIKLUBAIC03MzgzLDE1ICs4MzQ5LDE3IEBAIEVPRgotIAkgICAgZmkKLSAJICAgIGZvciBvYmoKLSAJICAgIGRvCi0tCSAgICAgICRFQ0hPICIkb2JqIiA+PiAkb3V0cHV0Ci0rCSAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgotKwkgICAgICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgPj4gJG91dHB1dAotIAkgICAgZG9uZQotLQkgICAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkb3V0cHV0IgotLQkgICAgb3V0cHV0PSRmaXJzdG9ialwiJGZpbGVfbGlzdF9zcGVjJG91dHB1dFwiCi0rCSAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCi0rCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKLSsJICAgIG91dHB1dD0kZmlyc3RvYmpcIiRmaWxlX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIgotIAkgIGVsc2UKLSAJICAgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiOyB0aGVuCi0gCSAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuLi4iCi0gCSAgICAgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAotLQkgICAgICBldmFsICJ0ZXN0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIiIKLSsJICAgICAgZXZhbCB0ZXN0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIgotIAkgICAgICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiCi0gCSAgICAgIGxlbjA9JGZ1bmNfbGVuX3Jlc3VsdAotIAkgICAgICBsZW49JGxlbjAKLUBAIC03NDExLDEyICs4Mzc5LDEyIEBAIEVPRgotIAkJICBpZiB0ZXN0ICIkayIgLWVxIDEgOyB0aGVuCi0gCQkgICAgIyBUaGUgZmlyc3QgZmlsZSBkb2Vzbid0IGhhdmUgYSBwcmV2aW91cyBjb21tYW5kIHRvIGFkZC4KLSAJCSAgICByZWxvYWRfb2Jqcz0kb2JqbGlzdAotLQkJICAgIGV2YWwgImNvbmNhdF9jbWRzPVwiJHJlbG9hZF9jbWRzXCIiCi0rCQkgICAgZXZhbCBjb25jYXRfY21kcz1cIiRyZWxvYWRfY21kc1wiCi0gCQkgIGVsc2UKLSAJCSAgICAjIEFsbCBzdWJzZXF1ZW50IHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzIHdpbGwgbGluayBpbgotIAkJICAgICMgdGhlIGxhc3Qgb25lIGNyZWF0ZWQuCi0gCQkgICAgcmVsb2FkX29ianM9IiRvYmpsaXN0ICRsYXN0X3JvYmoiCi0tCQkgICAgZXZhbCAiY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzfiRyZWxvYWRfY21kc35cJFJNICRsYXN0X3JvYmpcIiIKLSsJCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc34kcmVsb2FkX2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKLSAJCSAgZmkKLSAJCSAgbGFzdF9yb2JqPSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0Ci0gCQkgIGZ1bmNfYXJpdGggJGsgKyAxCi1AQCAtNzQzMywxMSArODQwMSwxMSBAQCBFT0YKLSAJICAgICAgIyBmaWxlcyB3aWxsIGxpbmsgaW4gdGhlIGxhc3Qgb25lIGNyZWF0ZWQuCi0gCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgotIAkgICAgICByZWxvYWRfb2Jqcz0iJG9iamxpc3QgJGxhc3Rfcm9iaiIKLS0JICAgICAgZXZhbCAiY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kcmVsb2FkX2NtZHNcIiIKLSsJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRyZWxvYWRfY21kc1wiCi0gCSAgICAgIGlmIHRlc3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCi0tCSAgICAgICAgZXZhbCAiY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc31+XCRSTSAkbGFzdF9yb2JqXCIiCi0rCSAgICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfX5cJFJNICRsYXN0X3JvYmpcIgotIAkgICAgICBmaQotLQkgICAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRvdXRwdXQiCi0rCSAgICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKLSAKLSAJICAgIGVsc2UKLSAJICAgICAgb3V0cHV0PQotQEAgLTc0NTAsOSArODQxOCw5IEBAIEVPRgotIAkgICAgICBsaWJvYmpzPSRvdXRwdXQKLSAJICAgICAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gY3JlYXRlIHRoZSBleHBvcnQgZmlsZS4KLSAJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+Ci0tCSAgICAgIGV2YWwgImNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kcyRleHBvcnRfc3ltYm9sc19jbWRzXCIiCi0rCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzJGV4cG9ydF9zeW1ib2xzX2NtZHNcIgotIAkgICAgICBpZiB0ZXN0IC1uICIkbGFzdF9yb2JqIjsgdGhlbgotLQkJZXZhbCAiY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiIgotKwkJZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKLSAJICAgICAgZmkKLSAJICAgIGZpCi0gCi1AQCAtNzQ3MSw3ICs4NDM5LDcgQEAgRU9GCi0gCQlsdF9leGl0PSQ/Ci0gCi0gCQkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKLS0JCWlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgotKwkJaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgotIAkJICAoIGNkICIkb3V0cHV0X29iamRpciIgJiYgXAotIAkJICAgICRSTSAiJHtyZWFsbmFtZX1UIiAmJiBcCi0gCQkgICAgJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKLUBAIC03NDkyLDcgKzg0NjAsNyBAQCBFT0YKLSAJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KLSAJICAgICAgdG1wX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCi0gCSAgICAgIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIiAmJiB0bXBfZXhwb3J0X3N5bWJvbHM9IiRvcmlnX2V4cG9ydF9zeW1ib2xzIgotLQkgICAgICAkb3B0X2RyeV9ydW4gfHwgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIgotKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKLSAJICAgIGZpCi0gCi0gCSAgICBpZiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KLUBAIC03NTA0LDcgKzg0NzIsNyBAQCBFT0YKLSAJICAgICAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKLSAJICAgICAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KLSAJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWUgJy9bICxdREFUQS8hZDtzLFwoLipcKVwoWyBcLF0uKlwpLHN8XlwxJHxcMVwyfCwnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyCi0tCSAgICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKLSsJICAgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgotIAkgICAgICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYKLSAJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWYgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIDwgJG9yaWdfZXhwb3J0X3N5bWJvbHMgPiAkZXhwb3J0X3N5bWJvbHMKLSAJICAgIGZpCi1AQCAtNzUxNSw3ICs4NDgzLDcgQEAgRU9GCi0gCSAgb3V0cHV0PSRzYXZlX291dHB1dAotIAotIAkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSIgJiYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgotLQkgICAgZXZhbCAibGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIiIKLSsJICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgotIAkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KLSAJICBmaQotIAkgICMgRXhwYW5kIHRoZSBsaWJyYXJ5IGxpbmtpbmcgY29tbWFuZHMgYWdhaW4gdG8gcmVzZXQgdGhlCi1AQCAtNzUzOSwyMyArODUwNywyMyBAQCBFT0YKLSAKLSAJaWYgdGVzdCAtbiAiJGRlbGZpbGVzIjsgdGhlbgotIAkgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMgdG8gJGNtZHMuCi0tCSAgZXZhbCAiY21kcz1cIlwkY21kc35cJFJNICRkZWxmaWxlc1wiIgotKwkgIGV2YWwgY21kcz1cIlwkY21kc35cJFJNICRkZWxmaWxlc1wiCi0gCWZpCi0gCi0gCSMgQWRkIGFueSBvYmplY3RzIGZyb20gcHJlbG9hZGVkIGNvbnZlbmllbmNlIGxpYnJhcmllcwotIAlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KLSAJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgotLQkgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgotKwkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCi0gCi0gCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKLS0JICBsaWJvYmpzPSIkbGlib2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKLSsJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCi0gCSAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KLSAJZmkKLSAKLSAJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCi0gCWZvciBjbWQgaW4gJGNtZHM7IGRvCi0gCSAgSUZTPSIkc2F2ZV9pZnMiCi0tCSAgZXZhbCAiY21kPVwiJGNtZFwiIgotKwkgIGV2YWwgY21kPVwiJGNtZFwiCi0gCSAgJG9wdF9zaWxlbnQgfHwgewotIAkgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkY21kIgotIAkgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgotQEAgLTc1NjQsNyArODUzMiw3IEBAIEVPRgotIAkgICAgbHRfZXhpdD0kPwotIAotIAkgICAgIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0Ci0tCSAgICBpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KLSsJICAgIGlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KLSAJICAgICAgKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmIFwKLSAJICAgICAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAotIAkJJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKLUBAIC03NTc2LDggKzg1NDQsOCBAQCBFT0YKLSAJSUZTPSIkc2F2ZV9pZnMiCi0gCi0gCSMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAotLQlpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KLS0JICAkb3B0X2RyeV9ydW4gfHwgKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVQgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVQgJiYgJE1WICR7cmVhbG5hbWV9VSAkcmVhbG5hbWUpIHx8IGV4aXQgJD8KLSsJaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgotKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VCAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VCAmJiAkTVYgJHtyZWFsbmFtZX1VICRyZWFsbmFtZSknIHx8IGV4aXQgJD8KLSAKLSAJICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCi0gCSAgICBpZiB0ZXN0IC16ICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCi1AQCAtNzY1NiwxNyArODYyNCwyMCBAQCBFT0YKLSAKLSAgICAgICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCi0gCWlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KLS0JICBldmFsICJ0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncz1cIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiIgotKwkgIGV2YWwgdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3M9XCIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgotIAkgIHJlbG9hZF9jb252X29ianM9JHJlbG9hZF9vYmpzXCBgJEVDSE8gIiR0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncyIgfCAkU0VEICdzfCx8IHxnJ2AKLSAJZWxzZQotIAkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvYmp9eCIKLS0JICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKLSsJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgotIAotIAkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQotIAkgIHJlbG9hZF9jb252X29ianM9IiRyZWxvYWRfb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKLSAJZmkKLSAgICAgICBmaQotIAotKyAgICAgICMgSWYgd2UncmUgbm90IGJ1aWxkaW5nIHNoYXJlZCwgd2UgbmVlZCB0byB1c2Ugbm9uX3BpY19vYmpzCi0rICAgICAgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIGxpYm9ianM9IiRub25fcGljX29iamVjdHMiCi0rCi0gICAgICAgIyBDcmVhdGUgdGhlIG9sZC1zdHlsZSBvYmplY3QuCi0gICAgICAgcmVsb2FkX29ianM9IiRvYmpzJG9sZF9kZXBsaWJzICJgJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIi9cLiR7bGliZXh0fSQvZDsgL1wubGliJC9kOyAkbG8ybyIgfCAkTkwyU1BgIiAkcmVsb2FkX2NvbnZfb2JqcyIgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0Ci0gCi1AQCAtNzY5MCw3ICs4NjYxLDcgQEAgRU9GCi0gCSMgQ3JlYXRlIGFuIGludmFsaWQgbGlidG9vbCBvYmplY3QgaWYgbm8gUElDLCBzbyB0aGF0IHdlIGRvbid0Ci0gCSMgYWNjaWRlbnRhbGx5IGxpbmsgaXQgaW50byBhIHByb2dyYW0uCi0gCSMgJHNob3cgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIKLS0JIyAkb3B0X2RyeV9ydW4gfHwgZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIHx8IGV4aXQgJD8KLSsJIyAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIiB8fCBleGl0ICQ/Ci0gCWV4aXQgJEVYSVRfU1VDQ0VTUwotICAgICAgIGZpCi0gCi1AQCAtNzc0MCw4ICs4NzExLDggQEAgRU9GCi0gCWlmIHRlc3QgIiR0YWduYW1lIiA9IENYWCA7IHRoZW4KLSAJICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9IGluCi0gCSAgICAxMC5bMDEyM10pCi0tCSAgICAgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAke3dsfS1iaW5kX2F0X2xvYWQiCi0tCSAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICR7d2x9LWJpbmRfYXRfbG9hZCIKLSsJICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHt3bH0tYmluZF9hdF9sb2FkIgotKwkgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHt3bH0tYmluZF9hdF9sb2FkIgotIAkgICAgOzsKLSAJICBlc2FjCi0gCWZpCi1AQCAtNzc2MSw3ICs4NzMyLDcgQEAgRU9GCi0gCSopCi0gCSAgY2FzZSAiICRjb21waWxlX2RlcGxpYnMgIiBpbgotIAkgICoiIC1MJHBhdGgvJG9iamRpciAiKikKLS0JICAgIG5ld19saWJzPSIkbmV3X2xpYnMgLUwkcGF0aC8kb2JqZGlyIiA7OwotKwkgICAgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAtTCRwYXRoLyRvYmpkaXIiIDs7Ci0gCSAgZXNhYwotIAkgIDs7Ci0gCWVzYWMKLUBAIC03NzcxLDE3ICs4NzQyLDE3IEBAIEVPRgotIAktTCopCi0gCSAgY2FzZSAiICRuZXdfbGlicyAiIGluCi0gCSAgKiIgJGRlcGxpYiAiKikgOzsKLS0JICAqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7Ci0rCSAgKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OwotIAkgIGVzYWMKLSAJICA7OwotLQkqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7Ci0rCSopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKLSAJZXNhYwotICAgICAgIGRvbmUKLSAgICAgICBjb21waWxlX2RlcGxpYnM9IiRuZXdfbGlicyIKLSAKLSAKLS0gICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGNvbXBpbGVfZGVwbGlicyIKLS0gICAgICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkZmluYWxpemVfZGVwbGlicyIKLSsgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkY29tcGlsZV9kZXBsaWJzIgotKyAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkZmluYWxpemVfZGVwbGlicyIKLSAKLSAgICAgICBpZiB0ZXN0IC1uICIkcnBhdGgkeHJwYXRoIjsgdGhlbgotIAkjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxhZ3MsIHRoZW4gYWRkIHRoZW0uCi1AQCAtNzc4OSw3ICs4NzYwLDcgQEAgRU9GCi0gCSAgIyBUaGlzIGlzIHRoZSBtYWdpYyB0byB1c2UgLXJwYXRoLgotIAkgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCi0gCSAgKiIgJGxpYmRpciAiKikgOzsKLS0JICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiIDs7Ci0rCSAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OwotIAkgIGVzYWMKLSAJZG9uZQotICAgICAgIGZpCi1AQCAtNzgwOCwxOCArODc3OSwxOCBAQCBFT0YKLSAJICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQotIAkJOzsKLSAJICAgICAgKikKLS0JCWhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgotKwkJZnVuY19hcHBlbmQgaGFyZGNvZGVfbGliZGlycyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgotIAkJOzsKLSAJICAgICAgZXNhYwotIAkgICAgZmkKLSAJICBlbHNlCi0tCSAgICBldmFsICJmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKLS0JICAgIHJwYXRoPSIkcnBhdGggJGZsYWciCi0rCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCi0rCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgotIAkgIGZpCi0gCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgotIAkgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KLSAJICAqIiAkbGliZGlyICIqKSA7OwotLQkgICopIHBlcm1fcnBhdGg9IiRwZXJtX3JwYXRoICRsaWJkaXIiIDs7Ci0rCSAgKikgZnVuY19hcHBlbmQgcGVybV9ycGF0aCAiICRsaWJkaXIiIDs7Ci0gCSAgZXNhYwotIAlmaQotIAljYXNlICRob3N0IGluCi1AQCAtNzgyOCwxMiArODc5OSwxMiBAQCBFT0YKLSAJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KLSAJICAqIjokbGliZGlyOiIqKSA7OwotIAkgIDo6KSBkbGxzZWFyY2hwYXRoPSRsaWJkaXI7OwotLQkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiRsaWJkaXIiOzsKLSsJICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JGxpYmRpciI7OwotIAkgIGVzYWMKLSAJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KLSAJICAqIjokdGVzdGJpbmRpcjoiKikgOzsKLSAJICA6OikgZGxsc2VhcmNocGF0aD0kdGVzdGJpbmRpcjs7Ci0tCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JHRlc3RiaW5kaXIiOzsKLSsJICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JHRlc3RiaW5kaXIiOzsKLSAJICBlc2FjCi0gCSAgOzsKLSAJZXNhYwotQEAgLTc4NDIsNyArODgxMyw3IEBAIEVPRgotICAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgotIAkgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCi0gCWxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCi0tCWV2YWwgInJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCi0rCWV2YWwgcnBhdGg9XCIgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgotICAgICAgIGZpCi0gICAgICAgY29tcGlsZV9ycGF0aD0iJHJwYXRoIgotIAotQEAgLTc4NTksMTggKzg4MzAsMTggQEAgRU9GCi0gCSAgICAgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKLSAJCTs7Ci0gCSAgICAgICopCi0tCQloYXJkY29kZV9saWJkaXJzPSIkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKLSsJCWZ1bmNfYXBwZW5kIGhhcmRjb2RlX2xpYmRpcnMgIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKLSAJCTs7Ci0gCSAgICAgIGVzYWMKLSAJICAgIGZpCi0gCSAgZWxzZQotLQkgICAgZXZhbCAiZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCi0tCSAgICBycGF0aD0iJHJwYXRoICRmbGFnIgotKwkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgotKwkgICAgZnVuY19hcHBlbmQgcnBhdGggIiAkZmxhZyIKLSAJICBmaQotIAllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KLSAJICBjYXNlICIkZmluYWxpemVfcGVybV9ycGF0aCAiIGluCi0gCSAgKiIgJGxpYmRpciAiKikgOzsKLS0JICAqKSBmaW5hbGl6ZV9wZXJtX3JwYXRoPSIkZmluYWxpemVfcGVybV9ycGF0aCAkbGliZGlyIiA7OwotKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3Blcm1fcnBhdGggIiAkbGliZGlyIiA7OwotIAkgIGVzYWMKLSAJZmkKLSAgICAgICBkb25lCi1AQCAtNzg3OCw3ICs4ODQ5LDcgQEAgRU9GCi0gICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCi0gCSB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KLSAJbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKLS0JZXZhbCAicnBhdGg9XCIgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKLSsJZXZhbCBycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCi0gICAgICAgZmkKLSAgICAgICBmaW5hbGl6ZV9ycGF0aD0iJHJwYXRoIgotIAotQEAgLTc5MjEsNiArODg5MiwxMiBAQCBFT0YKLSAJZXhpdF9zdGF0dXM9MAotIAlmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXRfc3RhdHVzPSQ/JwotIAotKwlpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KLSsJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKLSsJICBwb3N0bGlua19jbWRzPWBmdW5jX2VjaG9fYWxsICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnIC1lICdzJUBUT09MX09VVFBVVEAlJyIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiclZydgCi0rCSAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0bGlua19jbWRzIiAnZXhpdCAkPycKLSsJZmkKLSsKLSAJIyBEZWxldGUgdGhlIGdlbmVyYXRlZCBmaWxlcy4KLSAJaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IjsgdGhlbgotIAkgIGZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSInCi1AQCAtNzk0Myw3ICs4OTIwLDcgQEAgRU9GCi0gCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KLSAJICBycGF0aD0KLSAJICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbwotLQkgICAgcnBhdGg9IiRycGF0aCRkaXI6IgotKwkgICAgZnVuY19hcHBlbmQgcnBhdGggIiRkaXI6IgotIAkgIGRvbmUKLSAJICBjb21waWxlX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCi0gCWZpCi1AQCAtNzk1MSw3ICs4OTI4LDcgQEAgRU9GCi0gCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KLSAJICBycGF0aD0KLSAJICBmb3IgZGlyIGluICRmaW5hbGl6ZV9wZXJtX3JwYXRoOyBkbwotLQkgICAgcnBhdGg9IiRycGF0aCRkaXI6IgotKwkgICAgZnVuY19hcHBlbmQgcnBhdGggIiRkaXI6IgotIAkgIGRvbmUKLSAJICBmaW5hbGl6ZV92YXI9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgIgotIAlmaQotQEAgLTc5NjYsNiArODk0MywxMyBAQCBFT0YKLSAJJG9wdF9kcnlfcnVuIHx8ICRSTSAkb3V0cHV0Ci0gCSMgTGluayB0aGUgZXhlY3V0YWJsZSBhbmQgZXhpdAotIAlmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXQgJD8nCi0rCi0rCWlmIHRlc3QgLW4gIiRwb3N0bGlua19jbWRzIjsgdGhlbgotKwkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgotKwkgIHBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKLSsJICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JwotKwlmaQotKwotIAlleGl0ICRFWElUX1NVQ0NFU1MKLSAgICAgICBmaQotIAotQEAgLTc5OTksNiArODk4MywxMiBAQCBFT0YKLSAKLSAgICAgICBmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXQgJD8nCi0gCi0rICAgICAgaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCi0rCWZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSIKLSsJcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKLSsJZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0bGlua19jbWRzIiAnZXhpdCAkPycKLSsgICAgICBmaQotKwotICAgICAgICMgTm93IGNyZWF0ZSB0aGUgd3JhcHBlciBzY3JpcHQuCi0gICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0IgotIAotQEAgLTgwOTYsNyArOTA4Niw3IEBAIEVPRgotIAllbHNlCi0gCSAgb2xkb2Jqcz0iJG9sZF9kZXBsaWJzICRub25fcGljX29iamVjdHMiCi0gCSAgaWYgdGVzdCAiJHByZWxvYWQiID0geWVzICYmIHRlc3QgLWYgIiRzeW1maWxlb2JqIjsgdGhlbgotLQkgICAgb2xkb2Jqcz0iJG9sZG9ianMgJHN5bWZpbGVvYmoiCi0rCSAgICBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJHN5bWZpbGVvYmoiCi0gCSAgZmkKLSAJZmkKLSAJYWRkbGlicz0iJG9sZF9jb252ZW5pZW5jZSIKLUBAIC04MTA0LDEwICs5MDk0LDEwIEBAIEVPRgotIAotICAgICAgIGlmIHRlc3QgLW4gIiRhZGRsaWJzIjsgdGhlbgotIAlnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgotLQlnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKLSsJZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKLSAKLSAJZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGFkZGxpYnMKLS0Jb2xkb2Jqcz0iJG9sZG9ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCi0rCWZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKLSAgICAgICBmaQotIAotICAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgotQEAgLTgxMTgsMTAgKzkxMDgsMTAgQEAgRU9GCi0gCSMgQWRkIGFueSBvYmplY3RzIGZyb20gcHJlbG9hZGVkIGNvbnZlbmllbmNlIGxpYnJhcmllcwotIAlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KLSAJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgotLQkgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgotKwkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCi0gCi0gCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKLS0JICBvbGRvYmpzPSIkb2xkb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKLSsJICBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCi0gCWZpCi0gCi0gCSMgUE9TSVggZGVtYW5kcyBubyBwYXRocyB0byBiZSBlbmNvZGVkIGluIGFyY2hpdmVzLiAgV2UgaGF2ZQotQEAgLTgxMzksNyArOTEyOSw3IEBAIEVPRgotIAllbHNlCi0gCSAgZWNobyAiY29weWluZyBzZWxlY3RlZCBvYmplY3QgZmlsZXMgdG8gYXZvaWQgYmFzZW5hbWUgY29uZmxpY3RzLi4uIgotIAkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCi0tCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCi0rCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKLSAJICBmdW5jX21rZGlyX3AgIiRnZW50b3AiCi0gCSAgc2F2ZV9vbGRvYmpzPSRvbGRvYmpzCi0gCSAgb2xkb2Jqcz0KLUBAIC04MTYzLDE4ICs5MTUzLDI4IEBAIEVPRgotIAkJZXNhYwotIAkgICAgICBkb25lCi0gCSAgICAgIGZ1bmNfc2hvd19ldmFsICJsbiAkb2JqICRnZW50b3AvJG5ld29iaiB8fCBjcCAkb2JqICRnZW50b3AvJG5ld29iaiIKLS0JICAgICAgb2xkb2Jqcz0iJG9sZG9ianMgJGdlbnRvcC8kbmV3b2JqIgotKwkgICAgICBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJGdlbnRvcC8kbmV3b2JqIgotIAkgICAgICA7OwotLQkgICAgKikgb2xkb2Jqcz0iJG9sZG9ianMgJG9iaiIgOzsKLSsJICAgICopIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkb2JqIiA7OwotIAkgICAgZXNhYwotIAkgIGRvbmUKLSAJZmkKLS0JZXZhbCAiY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIiCi0rCWV2YWwgY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKLSAKLSAJZnVuY19sZW4gIiAkY21kcyIKLSAJbGVuPSRmdW5jX2xlbl9yZXN1bHQKLSAJaWYgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCi0gCSAgY21kcz0kb2xkX2FyY2hpdmVfY21kcwotKwllbGlmIHRlc3QgLW4gIiRhcmNoaXZlcl9saXN0X3NwZWMiOyB0aGVuCi0rCSAgZnVuY192ZXJib3NlICJ1c2luZyBjb21tYW5kIGZpbGUgYXJjaGl2ZSBsaW5raW5nLi4uIgotKwkgIGZvciBvYmogaW4gJG9sZG9ianMKLSsJICBkbwotKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCi0rCSAgICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIKLSsJICBkb25lID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUubGliY21kCi0rCSAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmxpYmNtZCIKLSsJICBvbGRvYmpzPSIgJGFyY2hpdmVyX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiCi0rCSAgY21kcz0kb2xkX2FyY2hpdmVfY21kcwotIAllbHNlCi0gCSAgIyB0aGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGxpbmsgaW4gb25lIHN0ZXAsIGxpbmsgaW4gcGFydHMKLSAJICBmdW5jX3ZlcmJvc2UgInVzaW5nIHBpZWNld2lzZSBhcmNoaXZlIGxpbmtpbmcuLi4iCi1AQCAtODE4OSw3ICs5MTg5LDcgQEAgRU9GCi0gCSAgZG8KLSAJICAgIGxhc3Rfb2xkb2JqPSRvYmoKLSAJICBkb25lCi0tCSAgZXZhbCAidGVzdF9jbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIiIKLSsJICBldmFsIHRlc3RfY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKLSAJICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiCi0gCSAgbGVuMD0kZnVuY19sZW5fcmVzdWx0Ci0gCSAgbGVuPSRsZW4wCi1AQCAtODIwOCw3ICs5MjA4LDcgQEAgRU9GCi0gCQlSQU5MSUI9JHNhdmVfUkFOTElCCi0gCSAgICAgIGZpCi0gCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgotLQkgICAgICBldmFsICJjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRvbGRfYXJjaGl2ZV9jbWRzXCIiCi0rCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kb2xkX2FyY2hpdmVfY21kc1wiCi0gCSAgICAgIG9iamxpc3Q9Ci0gCSAgICAgIGxlbj0kbGVuMAotIAkgICAgZmkKLUBAIC04MjE2LDkgKzkyMTYsOSBAQCBFT0YKLSAJICBSQU5MSUI9JHNhdmVfUkFOTElCCi0gCSAgb2xkb2Jqcz0kb2JqbGlzdAotIAkgIGlmIHRlc3QgIlgkb2xkb2JqcyIgPSAiWCIgOyB0aGVuCi0tCSAgICBldmFsICJjbWRzPVwiXCRjb25jYXRfY21kc1wiIgotKwkgICAgZXZhbCBjbWRzPVwiXCRjb25jYXRfY21kc1wiCi0gCSAgZWxzZQotLQkgICAgZXZhbCAiY21kcz1cIlwkY29uY2F0X2NtZHN+XCRvbGRfYXJjaGl2ZV9jbWRzXCIiCi0rCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzflwkb2xkX2FyY2hpdmVfY21kc1wiCi0gCSAgZmkKLSAJZmkKLSAgICAgICBmaQotQEAgLTgyNjgsMTIgKzkyNjgsMjMgQEAgRU9GCi0gCSAgICAgICoubGEpCi0gCQlmdW5jX2Jhc2VuYW1lICIkZGVwbGliIgotIAkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotLQkJbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCi0rCQlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIKLSsJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHRgCi0gCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCi0gCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgotLQkJbmV3ZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzICRsaWJkaXIvJG5hbWUiCi0rCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAke2x0X3N5c3Jvb3Q6Kz19JGxpYmRpci8kbmFtZSIKLSsJCTs7Ci0rCSAgICAgIC1MKikKLSsJCWZ1bmNfc3RyaXBuYW1lIC1MICcnICIkZGVwbGliIgotKwkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCi0rCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAtTCRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCi0gCQk7OwotLQkgICAgICAqKSBuZXdkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMgJGRlcGxpYiIgOzsKLSsJICAgICAgLVIqKQotKwkJZnVuY19zdHJpcG5hbWUgLVIgJycgIiRkZXBsaWIiCi0rCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKLSsJCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiIC1SJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKLSsJCTs7Ci0rCSAgICAgICopIGZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiICRkZXBsaWIiIDs7Ci0gCSAgICAgIGVzYWMKLSAJICAgIGRvbmUKLSAJICAgIGRlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyIKLUBAIC04Mjg0LDEyICs5Mjk1LDE0IEBAIEVPRgotIAkgICAgICAqLmxhKQotIAkgICAgICAgIGZ1bmNfYmFzZW5hbWUgIiRsaWIiCi0gCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0tCQlsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGxpYmAKLSsJCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkbGliIgotKwkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdGAKLSsKLSAJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKLSAJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCi0tCQluZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkbGliZGlyLyRuYW1lIgotKwkJZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgotIAkJOzsKLS0JICAgICAgKikgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGxpYiIgOzsKLSsJICAgICAgKikgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRsaWIiIDs7Ci0gCSAgICAgIGVzYWMKLSAJICAgIGRvbmUKLSAJICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgotQEAgLTgzMDMsMTAgKzkzMTYsMTEgQEAgRU9GCi0gCQkjIHRoZSBsaWJyYXJ5OgotIAkJZnVuY19iYXNlbmFtZSAiJGxpYiIKLSAJCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLS0JCWxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAotKwkJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRsaWIiCi0rCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0YAotIAkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAotIAkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKLS0JCW5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRsaWJkaXIvJG5hbWUiCi0rCQlmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCi0gCQk7OwotIAkgICAgICBlc2FjCi0gCSAgICBkb25lCi1AQCAtODMxOCw3ICs5MzMyLDcgQEAgRU9GCi0gCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0iJGxpYiIgOzsKLSAJCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKLSAJICAgICAgZXNhYwotLQkgICAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkYWJzIgotKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGFicyIKLSAJICAgIGRvbmUKLSAJICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgotIAkgICAgbmV3ZGxwcmVmaWxlcz0KLUBAIC04MzI3LDcgKzkzNDEsNyBAQCBFT0YKLSAJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSIkbGliIiA7OwotIAkJKikgYWJzPWBwd2RgIi8kbGliIiA7OwotIAkgICAgICBlc2FjCi0tCSAgICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRhYnMiCi0rCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkYWJzIgotIAkgICAgZG9uZQotIAkgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCi0gCSAgZmkKLUBAIC04NDEyLDcgKzk0MjYsNyBAQCByZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiIgotICAgICBleGl0ICRFWElUX1NVQ0NFU1MKLSB9Ci0gCi0teyB0ZXN0ICIkbW9kZSIgPSBsaW5rIHx8IHRlc3QgIiRtb2RlIiA9IHJlbGluazsgfSAmJgotK3sgdGVzdCAiJG9wdF9tb2RlIiA9IGxpbmsgfHwgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgfSAmJgotICAgICBmdW5jX21vZGVfbGluayAkezErIiRAIn0KLSAKLSAKLUBAIC04NDMyLDkgKzk0NDYsOSBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCi0gICAgIGZvciBhcmcKLSAgICAgZG8KLSAgICAgICBjYXNlICRhcmcgaW4KLS0gICAgICAtZikgUk09IiRSTSAkYXJnIjsgcm1mb3JjZT15ZXMgOzsKLS0gICAgICAtKikgUk09IiRSTSAkYXJnIiA7OwotLSAgICAgICopIGZpbGVzPSIkZmlsZXMgJGFyZyIgOzsKLSsgICAgICAtZikgZnVuY19hcHBlbmQgUk0gIiAkYXJnIjsgcm1mb3JjZT15ZXMgOzsKLSsgICAgICAtKikgZnVuY19hcHBlbmQgUk0gIiAkYXJnIiA7OwotKyAgICAgICopIGZ1bmNfYXBwZW5kIGZpbGVzICIgJGFyZyIgOzsKLSAgICAgICBlc2FjCi0gICAgIGRvbmUKLSAKLUBAIC04NDQzLDI0ICs5NDU3LDIzIEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKLSAKLSAgICAgcm1kaXJzPQotIAotLSAgICBvcmlnb2JqZGlyPSIkb2JqZGlyIgotICAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCi0gICAgICAgZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCi0gICAgICAgZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKLSAgICAgICBpZiB0ZXN0ICJYJGRpciIgPSBYLjsgdGhlbgotLQlvYmpkaXI9IiRvcmlnb2JqZGlyIgotKwlvZGlyPSIkb2JqZGlyIgotICAgICAgIGVsc2UKLS0Jb2JqZGlyPSIkZGlyLyRvcmlnb2JqZGlyIgotKwlvZGlyPSIkZGlyLyRvYmpkaXIiCi0gICAgICAgZmkKLSAgICAgICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKLSAgICAgICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0tICAgICAgdGVzdCAiJG1vZGUiID0gdW5pbnN0YWxsICYmIG9iamRpcj0iJGRpciIKLSsgICAgICB0ZXN0ICIkb3B0X21vZGUiID0gdW5pbnN0YWxsICYmIG9kaXI9IiRkaXIiCi0gCi0tICAgICAgIyBSZW1lbWJlciBvYmpkaXIgZm9yIHJlbW92YWwgbGF0ZXIsIGJlaW5nIGNhcmVmdWwgdG8gYXZvaWQgZHVwbGljYXRlcwotLSAgICAgIGlmIHRlc3QgIiRtb2RlIiA9IGNsZWFuOyB0aGVuCi0rICAgICAgIyBSZW1lbWJlciBvZGlyIGZvciByZW1vdmFsIGxhdGVyLCBiZWluZyBjYXJlZnVsIHRvIGF2b2lkIGR1cGxpY2F0ZXMKLSsgICAgICBpZiB0ZXN0ICIkb3B0X21vZGUiID0gY2xlYW47IHRoZW4KLSAJY2FzZSAiICRybWRpcnMgIiBpbgotLQkgICoiICRvYmpkaXIgIiopIDs7Ci0tCSAgKikgcm1kaXJzPSIkcm1kaXJzICRvYmpkaXIiIDs7Ci0rCSAgKiIgJG9kaXIgIiopIDs7Ci0rCSAgKikgZnVuY19hcHBlbmQgcm1kaXJzICIgJG9kaXIiIDs7Ci0gCWVzYWMKLSAgICAgICBmaQotIAotQEAgLTg0ODYsMTggKzk0OTksMTcgQEAgZnVuY19tb2RlX3VuaW5zdGFsbCAoKQotIAotIAkgICMgRGVsZXRlIHRoZSBsaWJ0b29sIGxpYnJhcmllcyBhbmQgc3ltbGlua3MuCi0gCSAgZm9yIG4gaW4gJGxpYnJhcnlfbmFtZXM7IGRvCi0tCSAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRuIgotKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuIgotIAkgIGRvbmUKLS0JICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG9sZF9saWJyYXJ5IgotKwkgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRvbGRfbGlicmFyeSIKLSAKLS0JICBjYXNlICIkbW9kZSIgaW4KLSsJICBjYXNlICIkb3B0X21vZGUiIGluCi0gCSAgY2xlYW4pCi0tCSAgICBjYXNlICIgICRsaWJyYXJ5X25hbWVzICIgaW4KLS0JICAgICMgIiAgIiBpbiB0aGUgYmVnaW5uaW5nIGNhdGNoZXMgZW1wdHkgJGRsbmFtZQotKwkgICAgY2FzZSAiICRsaWJyYXJ5X25hbWVzICIgaW4KLSAJICAgICoiICRkbG5hbWUgIiopIDs7Ci0tCSAgICAqKSBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRkbG5hbWUiIDs7Ci0rCSAgICAqKSB0ZXN0IC1uICIkZGxuYW1lIiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGRsbmFtZSIgOzsKLSAJICAgIGVzYWMKLS0JICAgIHRlc3QgLW4gIiRsaWJkaXIiICYmIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG5hbWUgJG9iamRpci8ke25hbWV9aSIKLSsJICAgIHRlc3QgLW4gIiRsaWJkaXIiICYmIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kbmFtZSAkb2Rpci8ke25hbWV9aSIKLSAJICAgIDs7Ci0gCSAgdW5pbnN0YWxsKQotIAkgICAgaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiOyB0aGVuCi1AQCAtODUyNSwxOSArOTUzNywxOSBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCi0gCSAgIyBBZGQgUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCi0gCSAgaWYgdGVzdCAtbiAiJHBpY19vYmplY3QiICYmCi0gCSAgICAgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KLS0JICAgIHJtZmlsZXM9IiRybWZpbGVzICRkaXIvJHBpY19vYmplY3QiCi0rCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGRpci8kcGljX29iamVjdCIKLSAJICBmaQotIAotIAkgICMgQWRkIG5vbi1QSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KLSAJICBpZiB0ZXN0IC1uICIkbm9uX3BpY19vYmplY3QiICYmCi0gCSAgICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCi0tCSAgICBybWZpbGVzPSIkcm1maWxlcyAkZGlyLyRub25fcGljX29iamVjdCIKLSsJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZGlyLyRub25fcGljX29iamVjdCIKLSAJICBmaQotIAlmaQotIAk7OwotIAotICAgICAgICopCi0tCWlmIHRlc3QgIiRtb2RlIiA9IGNsZWFuIDsgdGhlbgotKwlpZiB0ZXN0ICIkb3B0X21vZGUiID0gY2xlYW4gOyB0aGVuCi0gCSAgbm9leGVuYW1lPSRuYW1lCi0gCSAgY2FzZSAkZmlsZSBpbgotIAkgICouZXhlKQotQEAgLTg1NDcsNyArOTU1OSw3IEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKLSAJICAgIG5vZXhlbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0gCSAgICAjICRmaWxlIHdpdGggLmV4ZSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHJtZmlsZXMsCi0gCSAgICAjIGFkZCAkZmlsZSB3aXRob3V0IC5leGUKLS0JICAgIHJtZmlsZXM9IiRybWZpbGVzICRmaWxlIgotKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRmaWxlIgotIAkgICAgOzsKLSAJICBlc2FjCi0gCSAgIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgYSBsaWJ0b29sIHByb2dyYW0uCi1AQCAtODU1Niw3ICs5NTY4LDcgQEAgZnVuY19tb2RlX3VuaW5zdGFsbCAoKQotIAkgICAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKLSAJICAgICAgcmVsaW5rX2NvbW1hbmQ9Ci0gCSAgICAgIGZ1bmNfc291cmNlICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAotLQkgICAgICBybWZpbGVzPSIkcm1maWxlcyAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQiCi0rCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQiCi0gCSAgICBlbHNlCi0gCSAgICAgIHJlbGlua19jb21tYW5kPQotIAkgICAgICBmdW5jX3NvdXJjZSAkZGlyLyRub2V4ZW5hbWUKLUBAIC04NTY0LDEyICs5NTc2LDEyIEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKLSAKLSAJICAgICMgbm90ZSAkbmFtZSBzdGlsbCBjb250YWlucyAuZXhlIGlmIGl0IHdhcyBpbiAkZmlsZSBvcmlnaW5hbGx5Ci0gCSAgICAjIGFzIGRvZXMgdGhlIHZlcnNpb24gb2YgJGZpbGUgdGhhdCB3YXMgYWRkZWQgaW50byAkcm1maWxlcwotLQkgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbmFtZSAkb2JqZGlyLyR7bmFtZX1TLiR7b2JqZXh0fSIKLSsJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kbmFtZSAkb2Rpci8ke25hbWV9Uy4ke29iamV4dH0iCi0gCSAgICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllcyAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCi0tCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvbHQtJG5hbWUiCi0rCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci9sdC0kbmFtZSIKLSAJICAgIGZpCi0gCSAgICBpZiB0ZXN0ICJYJG5vZXhlbmFtZSIgIT0gIlgkbmFtZSIgOyB0aGVuCi0tCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvbHQtJHtub2V4ZW5hbWV9LmMiCi0rCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci9sdC0ke25vZXhlbmFtZX0uYyIKLSAJICAgIGZpCi0gCSAgZmkKLSAJZmkKLUBAIC04NTc3LDcgKzk1ODksNiBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCi0gICAgICAgZXNhYwotICAgICAgIGZ1bmNfc2hvd19ldmFsICIkUk0gJHJtZmlsZXMiICdleGl0X3N0YXR1cz0xJwotICAgICBkb25lCi0tICAgIG9iamRpcj0iJG9yaWdvYmpkaXIiCi0gCi0gICAgICMgVHJ5IHRvIHJlbW92ZSB0aGUgJHtvYmpkaXJ9cyBpbiB0aGUgZGlyZWN0b3JpZXMgd2hlcmUgd2UgZGVsZXRlZCBmaWxlcwotICAgICBmb3IgZGlyIGluICRybWRpcnM7IGRvCi1AQCAtODU4OSwxNiArOTYwMCwxNiBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCi0gICAgIGV4aXQgJGV4aXRfc3RhdHVzCi0gfQotIAotLXsgdGVzdCAiJG1vZGUiID0gdW5pbnN0YWxsIHx8IHRlc3QgIiRtb2RlIiA9IGNsZWFuOyB9ICYmCi0reyB0ZXN0ICIkb3B0X21vZGUiID0gdW5pbnN0YWxsIHx8IHRlc3QgIiRvcHRfbW9kZSIgPSBjbGVhbjsgfSAmJgotICAgICBmdW5jX21vZGVfdW5pbnN0YWxsICR7MSsiJEAifQotIAotLXRlc3QgLXogIiRtb2RlIiAmJiB7Ci0rdGVzdCAteiAiJG9wdF9tb2RlIiAmJiB7Ci0gICBoZWxwPSIkZ2VuZXJpY19oZWxwIgotICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgTU9ERSIKLSB9Ci0gCi0gdGVzdCAteiAiJGV4ZWNfY21kIiAmJiBcCi0tICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkbW9kZSciCi0rICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkb3B0X21vZGUnIgotIAotIGlmIHRlc3QgLW4gIiRleGVjX2NtZCI7IHRoZW4KLSAgIGV2YWwgZXhlYyAiJGV4ZWNfY21kIgotZGlmZiAtLWdpdCBhL2x0b3B0aW9ucy5tNCBiL2x0b3B0aW9ucy5tNAotaW5kZXggNWVmMTJjZWQyYS4uMTdjZmQ1MWMwYiAxMDA2NDQKLS0tLSBhL2x0b3B0aW9ucy5tNAotKysrIGIvbHRvcHRpb25zLm00Ci1AQCAtOCw3ICs4LDcgQEAKLSAjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAotICMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0gCi0tIyBzZXJpYWwgNiBsdG9wdGlvbnMubTQKLSsjIHNlcmlhbCA3IGx0b3B0aW9ucy5tNAotIAotICMgVGhpcyBpcyB0byBoZWxwIGFjbG9jYWwgZmluZCB0aGVzZSBtYWNyb3MsIGFzIGl0IGNhbid0IHNlZSBtNF9kZWZpbmUuCi0gQUNfREVGVU4oW0xUT1BUSU9OU19WRVJTSU9OXSwgW200X2lmKFsxXSldKQotZGlmZiAtLWdpdCBhL2x0dmVyc2lvbi5tNCBiL2x0dmVyc2lvbi5tNAotaW5kZXggYmY4N2Y3NzEzMi4uOWM3YjVkNDExOCAxMDA2NDQKLS0tLSBhL2x0dmVyc2lvbi5tNAotKysrIGIvbHR2ZXJzaW9uLm00Ci1AQCAtNywxNyArNywxNyBAQAotICMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0Ci0gIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLSAKLS0jIEdlbmVyYXRlZCBmcm9tIGx0dmVyc2lvbi5pbi4KLSsjIEBjb25maWd1cmVfaW5wdXRACi0gCi0tIyBzZXJpYWwgMzEzNCBsdHZlcnNpb24ubTQKLSsjIHNlcmlhbCAzMjkzIGx0dmVyc2lvbi5tNAotICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wKLSAKLS1tNF9kZWZpbmUoW0xUX1BBQ0tBR0VfVkVSU0lPTl0sIFsyLjIuN2FdKQotLW00X2RlZmluZShbTFRfUEFDS0FHRV9SRVZJU0lPTl0sIFsxLjMxMzRdKQotK200X2RlZmluZShbTFRfUEFDS0FHRV9WRVJTSU9OXSwgWzIuNF0pCi0rbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1JFVklTSU9OXSwgWzEuMzI5M10pCi0gCi0gQUNfREVGVU4oW0xUVkVSU0lPTl9WRVJTSU9OXSwKLS1bbWFjcm9fdmVyc2lvbj0nMi4yLjdhJwotLW1hY3JvX3JldmlzaW9uPScxLjMxMzQnCi0rW21hY3JvX3ZlcnNpb249JzIuNCcKLSttYWNyb19yZXZpc2lvbj0nMS4zMjkzJwotIF9MVF9ERUNMKCwgbWFjcm9fdmVyc2lvbiwgMCwgW1doaWNoIHJlbGVhc2Ugb2YgbGlidG9vbC5tNCB3YXMgdXNlZD9dKQotIF9MVF9ERUNMKCwgbWFjcm9fcmV2aXNpb24sIDApCi0gXSkKLWRpZmYgLS1naXQgYS9sdH5vYnNvbGV0ZS5tNCBiL2x0fm9ic29sZXRlLm00Ci1pbmRleCBiZjkyYjVlMDc5Li5jNTczZGE5MGM1IDEwMDY0NAotLS0tIGEvbHR+b2Jzb2xldGUubTQKLSsrKyBiL2x0fm9ic29sZXRlLm00Ci1AQCAtNyw3ICs3LDcgQEAKLSAjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAotICMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0gCi0tIyBzZXJpYWwgNCBsdH5vYnNvbGV0ZS5tNAotKyMgc2VyaWFsIDUgbHR+b2Jzb2xldGUubTQKLSAKLSAjIFRoZXNlIGV4aXN0IGVudGlyZWx5IHRvIGZvb2wgYWNsb2NhbCB3aGVuIGJvb3RzdHJhcHBpbmcgbGlidG9vbC4KLSAjCi1kaWZmIC0tZ2l0IGEvb3Bjb2Rlcy9jb25maWd1cmUgYi9vcGNvZGVzL2NvbmZpZ3VyZQotaW5kZXggMGIzNTJhNDU0ZC4uN2VhZWE3ZGI3MyAxMDA3NTUKLS0tLSBhL29wY29kZXMvY29uZmlndXJlCi0rKysgYi9vcGNvZGVzL2NvbmZpZ3VyZQotQEAgLTY1MCw2ICs2NTAsOSBAQCBPVE9PTAotIExJUE8KLSBOTUVESVQKLSBEU1lNVVRJTAotK01BTklGRVNUX1RPT0wKLSthY19jdF9BUgotK0RMTFRPT0wKLSBPQkpEVU1QCi0gTE5fUwotIE5NCi1AQCAtNzYzLDYgKzc2Niw3IEBAIGVuYWJsZV9zdGF0aWMKLSB3aXRoX3BpYwotIGVuYWJsZV9mYXN0X2luc3RhbGwKLSB3aXRoX2dudV9sZAotK3dpdGhfbGlidG9vbF9zeXNyb290Ci0gZW5hYmxlX2xpYnRvb2xfbG9jawotIGVuYWJsZV90YXJnZXRzCi0gZW5hYmxlX3dlcnJvcgotQEAgLTE0MjMsNiArMTQyNyw4IEBAIE9wdGlvbmFsIFBhY2thZ2VzOgotICAgLS13aXRoLXBpYyAgICAgICAgICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBib3RoXQotICAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQotKyAgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD1ESVIgU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKLSsgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS4KLSAKLSBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKLSAgIENDICAgICAgICAgIEMgY29tcGlsZXIgY29tbWFuZAotQEAgLTUxMTUsOCArNTEyMSw4IEBAIGVzYWMKLSAKLSAKLSAKLS1tYWNyb192ZXJzaW9uPScyLjIuN2EnCi0tbWFjcm9fcmV2aXNpb249JzEuMzEzNCcKLSttYWNyb192ZXJzaW9uPScyLjQnCi0rbWFjcm9fcmV2aXNpb249JzEuMzI5MycKLSAKLSAKLSAKLUBAIC01MTU2LDcgKzUxNjIsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITwotIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MiID4mNQotICRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9Ci0gIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCi0taWYgdGVzdCAiWGBwcmludCAtciAtLSAtbiAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKLStpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKLSAgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgotICAgRUNITz0ncHJpbnQgLXIgLS0nCi0gZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KLUBAIC01ODQyLDggKzU4NDgsOCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OwotICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCi0geHNpX3NoZWxsPW5vCi0gKCBfbHRfZHVtbXk9ImEvYi9jIgotLSAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKLS0gICAgICA9IGMsYS9iLCwgXAotKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKLSsgICAgICA9IGMsYS9iLGIvYywgXAotICAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCi0gICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCi0gICAmJiB4c2lfc2hlbGw9eWVzCi1AQCAtNTg5Miw2ICs1ODk4LDgwIEBAIGVzYWMKLSAKLSAKLSAKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0Li4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHtsdF9jdl90b19ob3N0X2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgY2FzZSAkaG9zdCBpbgotKyAgKi0qLW1pbmd3KiApCi0rICAgIGNhc2UgJGJ1aWxkIGluCi0rICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cwotKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgotKyAgICAgICAgOzsKLSsgICAgICAqLSotY3lnd2luKiApCi0rICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKLSsgICAgICAgIDs7Ci0rICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAotKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCi0rICAgICAgICA7OwotKyAgICBlc2FjCi0rICAgIDs7Ci0rICAqLSotY3lnd2luKiApCi0rICAgIGNhc2UgJGJ1aWxkIGluCi0rICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cwotKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgotKyAgICAgICAgOzsKLSsgICAgICAqLSotY3lnd2luKiApCi0rICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKLSsgICAgICAgIDs7Ci0rICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAotKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCi0rICAgICAgICA7OwotKyAgICBlc2FjCi0rICAgIDs7Ci0rICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQotKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKLSsgICAgOzsKLStlc2FjCi0rCi0rZmkKLSsKLSt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjUKLSskYXNfZWNobyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNjsgfQotKwotKwotKwotKwotKwotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4uLiAiID4mNjsgfQotK2lmIHRlc3QgIiR7bHRfY3ZfdG9fdG9vbF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgICNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KLStsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKLStjYXNlICRob3N0IGluCi0rICAqLSotbWluZ3cqICkKLSsgICAgY2FzZSAkYnVpbGQgaW4KLSsgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCi0rICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0rICAgICAgICA7OwotKyAgICBlc2FjCi0rICAgIDs7Ci0rZXNhYwotKwotK2ZpCi0rCi0rdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY1Ci0rJGFzX2VjaG8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjY7IH0KLSsKLSsKLSsKLSsKLSsKLSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQotICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KLSBpZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuIDoKLUBAIC01OTA4LDYgKzU5ODgsMTEgQEAgY2FzZSAkcmVsb2FkX2ZsYWcgaW4KLSBlc2FjCi0gcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotIGNhc2UgJGhvc3Rfb3MgaW4KLSsgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSsgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCi0rICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKLSsgICAgZmkKLSsgICAgOzsKLSAgIGRhcndpbiopCi0gICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotQEAgLTYwNzYsNyArNjE2MSw4IEBAIG1pbmd3KiB8IHB3MzIqKQotICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJwotICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKLSAgIGVsc2UKLS0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCi0rICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KLSsgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJwotICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCi0gICBmaQotICAgOzsKLUBAIC02MjMwLDYgKzYzMTYsMjEgQEAgZXNhYwotIGZpCi0geyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1Ci0gJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9Ci0rCi0rZmlsZV9tYWdpY19nbG9iPQotK3dhbnRfbm9jYXNlZ2xvYj1ubwotK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCi0rICBjYXNlICRob3N0X29zIGluCi0rICBtaW5ndyogfCBwdzMyKikKLSsgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgotKyAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKLSsgICAgZWxzZQotKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1wxXVwvW1wxXVwvZzsvZyJgCi0rICAgIGZpCi0rICAgIDs7Ci0rICBlc2FjCi0rZmkKLSsKLSBmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKLSBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKLSB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KLUBAIC02MjQ1LDkgKzYzNDYsMTYyIEBAIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgotIAotIAotIAotKwotKwotKwotKwotKwotKwotKwotKwotKwotKwotIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLS0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi0tc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKLSsgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLStzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCi0rICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLStlbHNlCi0rYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotK2ZvciBhc19kaXIgaW4gJFBBVEgKLStkbwotKyAgSUZTPSRhc19zYXZlX0lGUwotKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSsgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0rICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0rICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgotKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSsgICAgYnJlYWsgMgotKyAgZmkKLStkb25lCi0rICBkb25lCi0rSUZTPSRhc19zYXZlX0lGUwotKwotK2ZpCi0rZmkKLStETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKLStpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KLSsgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1Ci0rJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KLStlbHNlCi0rICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotKyRhc19lY2hvICJubyIgPiY2OyB9Ci0rZmkKLSsKLSsKLStmaQotK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCi0rICBhY19jdF9ETExUT09MPSRETExUT09MCi0rICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCi0rICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLStlbHNlCi0rYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotK2ZvciBhc19kaXIgaW4gJFBBVEgKLStkbwotKyAgSUZTPSRhc19zYXZlX0lGUwotKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSsgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0rICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0rICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKLSsgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0rICAgIGJyZWFrIDIKLSsgIGZpCi0rZG9uZQotKyAgZG9uZQotK0lGUz0kYXNfc2F2ZV9JRlMKLSsKLStmaQotK2ZpCi0rYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCi0raWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCi0rICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQotKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9Ci0rZWxzZQotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSskYXNfZWNobyAibm8iID4mNjsgfQotK2ZpCi0rCi0rICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgotKyAgICBETExUT09MPSJmYWxzZSIKLSsgIGVsc2UKLSsgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgotK3llczopCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLSthY190b29sX3dhcm5lZD15ZXMgOzsKLStlc2FjCi0rICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKLSsgIGZpCi0rZWxzZQotKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKLStmaQotKwotK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCi0rCi0rY2FzZSAkaG9zdF9vcyBpbgotK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSsgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKLSsgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKLSsgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgotKyAgKi0taWRlbnRpZnktc3RyaWN0KikKLSsgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCi0rICAgIDs7Ci0rICAqKQotKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKLSsgICAgOzsKLSsgIGVzYWMKLSsgIDs7Ci0rKikKLSsgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgotKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgotKyAgOzsKLStlc2FjCi0rCi0rZmkKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjUKLSskYXNfZWNobyAiJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjY7IH0KLStzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKLSt0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0raWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotKyAgZm9yIGFjX3Byb2cgaW4gYXIKLSsgIGRvCi0rICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgotIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLSBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgotQEAgLTYyNjMsNyArNjUxNyw3IEBAIGRvCi0gICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLS0gICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKLSsgICAgYWNfY3ZfcHJvZ19BUj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCi0gICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgICBicmVhayAyCi0gICBmaQotQEAgLTYyODMsMTEgKzY1MzcsMTUgQEAgJGFzX2VjaG8gIm5vIiA+JjY7IH0KLSBmaQotIAotIAotKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCi0rICBkb25lCi0gZmkKLS1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KLStpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCi0gICBhY19jdF9BUj0kQVIKLS0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotLXNldCBkdW1teSBhcjsgYWNfd29yZD0kMgotKyAgZm9yIGFjX3Byb2cgaW4gYXIKLStkbwotKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi0rc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi0geyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbiA6Ci1AQCAtNjMwMyw3ICs2NTYxLDcgQEAgZG8KLSAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotLSAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKLSsgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCi0gICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgICBicmVhayAyCi0gICBmaQotQEAgLTYzMjIsNiArNjU4MCwxMCBAQCBlbHNlCi0gJGFzX2VjaG8gIm5vIiA+JjY7IH0KLSBmaQotIAotKwotKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhawotK2RvbmUKLSsKLSAgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgotICAgICBBUj0iZmFsc2UiCi0gICBlbHNlCi1AQCAtNjMzMywxNiArNjU5NSw3MiBAQCBhY190b29sX3dhcm5lZD15ZXMgOzsKLSBlc2FjCi0gICAgIEFSPSRhY19jdF9BUgotICAgZmkKLS1lbHNlCi0tICBBUj0iJGFjX2N2X3Byb2dfQVIiCi0gZmkKLSAKLS10ZXN0IC16ICIkQVIiICYmIEFSPWFyCi0tdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKLSs6ICR7QVI9YXJ9Ci0rOiAke0FSX0ZMQUdTPWNydX0KLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0IiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydC4uLiAiID4mNjsgfQotK2lmIHRlc3QgIiR7bHRfY3ZfYXJfYXRfZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGx0X2N2X2FyX2F0X2ZpbGU9bm8KLSsgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0rLyogZW5kIGNvbmZkZWZzLmguICAqLwotKwotK2ludAotK21haW4gKCkKLSt7Ci0gCi0rICA7Ci0rICByZXR1cm4gMDsKLSt9Ci0rX0FDRU9GCi0raWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotKyAgZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0Ci0rICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JjUnCi0rICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKLSsgIChldmFsICRsdF9hcl90cnkpIDI+JjUKLSsgIGFjX3N0YXR1cz0kPwotKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0rICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9Ci0rICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KLSsJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KLSsJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCi0rCXsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1Ci0rICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1Ci0rICBhY19zdGF0dXM9JD8KLSsgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQotKwlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgotKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKLSsgICAgICAgIGZpCi0rICAgICAgZmkKLSsgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKLSAKLStmaQotK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotIAotK2ZpCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcl9hdF9maWxlIiA+JjUKLSskYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQotIAotK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KLSsgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KLStlbHNlCi0rICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKLStmaQotIAotIAotIAotQEAgLTY2ODQsOCArNzAwMiw4IEBAIGVzYWMKLSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgotIAotICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcwotLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCi0tbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCi0rbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKLStsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKLSAKLSAjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KLSBvcHRfY3I9Ci1AQCAtNjcyMSw2ICs3MDM5LDcgQEAgZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbwotICAgZWxzZQotICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgotICAgZmkKLSsgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKLSAKLSAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgotICAgcGlwZV93b3Jrcz1ubwotQEAgLTY3NjIsNiArNzA4MSwxOCBAQCBfTFRfRU9GCi0gICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KLSAJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCi0gCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKLSsvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KLSsjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQotKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQotKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KLSsjIGRlZmluZSBMVF9ETFNZTV9DT05TVAotKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKLSsvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KLSsjIGRlZmluZSBMVF9ETFNZTV9DT05TVAotKyNlbHNlCi0rIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKLSsjZW5kaWYKLSsKLSAjaWZkZWYgX19jcGx1c3BsdXMKLSBleHRlcm4gIkMiIHsKLSAjZW5kaWYKLUBAIC02NzczLDcgKzcxMDQsNyBAQCBfTFRfRU9GCi0gCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0gCi0gLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLwotLWNvbnN0IHN0cnVjdCB7Ci0rTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKLSAgIGNvbnN0IGNoYXIgKm5hbWU7Ci0gICB2b2lkICAgICAgICphZGRyZXNzOwotIH0KLUBAIC02Nzk5LDggKzcxMzAsOCBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgewotIF9MVF9FT0YKLSAJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgotIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAotLQkgIGx0X3NhdmVfTElCUz0iJExJQlMiCi0tCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0rCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKLSsJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgotIAkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKLSAJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKLUBAIC02ODEwLDggKzcxNDEsOCBAQCBfTFRfRU9GCi0gICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KLSAJICAgIHBpcGVfd29ya3M9eWVzCi0gCSAgZmkKLS0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgotLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgotKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCi0rCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCi0gCWVsc2UKLSAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKLSAJZmkKLUBAIC02ODQ4LDYgKzcxNzksMTYgQEAgZWxzZQotICRhc19lY2hvICJvayIgPiY2OyB9Ci0gZmkKLSAKLSsjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KLStpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgotKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCi0rZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgotKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCi0rZmkKLSsKLSsKLSsKLSsKLSAKLSAKLSAKLUBAIC02ODY5LDYgKzcyMTAsNDUgQEAgZmkKLSAKLSAKLSAKLSsKLSsKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzcm9vdC4uLiAiID4mNjsgfQotKwotKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlidG9vbC1zeXNyb290IHdhcyBnaXZlbi4KLStpZiB0ZXN0ICIke3dpdGhfbGlidG9vbF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuIDoKLSsgIHdpdGh2YWw9JHdpdGhfbGlidG9vbF9zeXNyb290OwotK2Vsc2UKLSsgIHdpdGhfbGlidG9vbF9zeXNyb290PW5vCi0rZmkKLSsKLSsKLStsdF9zeXNyb290PQotK2Nhc2UgJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0gaW4gIygKLSsgeWVzKQotKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0rICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAotKyAgIGZpCi0rICAgOzsgIygKLSsgLyopCi0rICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi0rICAgOzsgIygKLSsgbm98JycpCi0rICAgOzsgIygKLSsgKikKLSsgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNQotKyRhc19lY2hvICIke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY2OyB9Ci0rICAgYXNfZm5fZXJyb3IgIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1Ci0rICAgOzsKLStlc2FjCi0rCi0rIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke2x0X3N5c3Jvb3Q6LW5vfSIgPiY1Ci0rJGFzX2VjaG8gIiR7bHRfc3lzcm9vdDotbm99IiA+JjY7IH0KLSsKLSsKLSsKLSsKLSsKLSAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KLSBpZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4gOgotICAgZW5hYmxldmFsPSRlbmFibGVfbGlidG9vbF9sb2NrOwotQEAgLTcwNzUsNiArNzQ1NSwxMjMgQEAgZXNhYwotIAotIG5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgotIAotK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSsgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1tdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi0rc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bXQ7IGFjX3dvcmQ9JDIKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHthY19jdl9wcm9nX01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KLSsgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJE1BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotK2Vsc2UKLSthc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0rZm9yIGFzX2RpciBpbiAkUEFUSAotK2RvCi0rICBJRlM9JGFzX3NhdmVfSUZTCi0rICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSsgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSsgICAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIke2FjX3Rvb2xfcHJlZml4fW10IgotKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSsgICAgYnJlYWsgMgotKyAgZmkKLStkb25lCi0rICBkb25lCi0rSUZTPSRhc19zYXZlX0lGUwotKwotK2ZpCi0rZmkKLStNQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wKLStpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KLSsgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFOSUZFU1RfVE9PTCIgPiY1Ci0rJGFzX2VjaG8gIiRNQU5JRkVTVF9UT09MIiA+JjY7IH0KLStlbHNlCi0rICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotKyRhc19lY2hvICJubyIgPiY2OyB9Ci0rZmkKLSsKLSsKLStmaQotK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiOyB0aGVuCi0rICBhY19jdF9NQU5JRkVTVF9UT09MPSRNQU5JRkVTVF9UT09MCi0rICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLStzZXQgZHVtbXkgbXQ7IGFjX3dvcmQ9JDIKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KLSsgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0iJGFjX2N0X01BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotK2Vsc2UKLSthc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0rZm9yIGFzX2RpciBpbiAkUEFUSAotK2RvCi0rICBJRlM9JGFzX3NhdmVfSUZTCi0rICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSsgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSsgICAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSJtdCIKLSsgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0rICAgIGJyZWFrIDIKLSsgIGZpCi0rZG9uZQotKyAgZG9uZQotK0lGUz0kYXNfc2F2ZV9JRlMKLSsKLStmaQotK2ZpCi0rYWNfY3RfTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MCi0raWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCi0rICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNQotKyRhc19lY2hvICIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY2OyB9Ci0rZWxzZQotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSskYXNfZWNobyAibm8iID4mNjsgfQotK2ZpCi0rCi0rICBpZiB0ZXN0ICJ4JGFjX2N0X01BTklGRVNUX1RPT0wiID0geDsgdGhlbgotKyAgICBNQU5JRkVTVF9UT09MPSI6IgotKyAgZWxzZQotKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi0reWVzOikKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0rJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotK2FjX3Rvb2xfd2FybmVkPXllcyA7OwotK2VzYWMKLSsgICAgTUFOSUZFU1RfVE9PTD0kYWNfY3RfTUFOSUZFU1RfVE9PTAotKyAgZmkKLStlbHNlCi0rICBNQU5JRkVTVF9UT09MPSIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIgotK2ZpCi0rCi0rdGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sLi4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KLSsgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JjUKLSsgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKLSsgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0rICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCi0rICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKLSsgIGZpCi0rICBybSAtZiBjb25mdGVzdCoKLStmaQotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjUKLSskYXNfZWNobyAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY2OyB9Ci0raWYgdGVzdCAieCRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiICE9IHh5ZXM7IHRoZW4KLSsgIE1BTklGRVNUX1RPT0w9OgotK2ZpCi0rCi0rCi0rCi0rCi0rCi0gCi0gICBjYXNlICRob3N0X29zIGluCi0gICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCi1AQCAtNzYzOCw2ICs4MTM1LDggQEAgX0xUX0VPRgotICAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mNQotICAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JjUKLSAgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiY1Ci0rICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JjUKLSsgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mNQotICAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgotIGludCBtYWluKCkgeyByZXR1cm4gMDt9Ci0gX0xUX0VPRgotQEAgLTc4MDMsNyArODMwMiw4IEBAIGZpCi0gTElCVE9PTF9ERVBTPSIkbHRtYWluIgotIAotICMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCi0tTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCi0rTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpJwotK0xJQlRPT0w9IiRMSUJUT09MLyR7aG9zdF9hbGlhc30tbGlidG9vbCIKLSAKLSAKLSAKLUBAIC03ODkyLDcgKzgzOTIsNyBAQCBhaXgzKikKLSBlc2FjCi0gCi0gIyBHbG9iYWwgdmFyaWFibGVzOgotLW9maWxlPWxpYnRvb2wKLStvZmlsZT0ke2hvc3RfYWxpYXN9LWxpYnRvb2wKLSBjYW5fYnVpbGRfc2hhcmVkPXllcwotIAotICMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAotQEAgLTgxOTAsOCArODY5MCw2IEBAIGZpCi0gbHRfcHJvZ19jb21waWxlcl9waWM9Ci0gbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Ci0gCi0teyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1Ci0tJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KLSAKLSAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi1AQCAtODM1Nyw2ICs4ODU1LDEyIEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9Ci0gCWx0X3Byb2dfY29tcGlsZXJfcGljPSctLXNoYXJlZCcKLSAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy0tc3RhdGljJwotIAk7OwotKyAgICAgIG5hZ2ZvciopCi0rCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKLSsJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLC1XbCwsJwotKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKLSsJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotKwk7OwotICAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKLSAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCi0gCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCi1AQCAtODQxOSw3ICs4OTIzLDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KLSAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCi0gICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0tICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQotKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKLSAJbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJzs7Ci0gICAgICAgKikKLSAJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OwotQEAgLTg0NzYsMTMgKzg5ODAsMTcgQEAgY2FzZSAkaG9zdF9vcyBpbgotICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgotICAgICA7OwotIGVzYWMKLS17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKLS0kYXNfZWNobyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KLS0KLS0KLS0KLS0KLSAKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQotK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfcHJvZ19jb21waWxlcl9waWMKLStmaQotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNQotKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQotK2x0X3Byb2dfY29tcGlsZXJfcGljPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYwotIAotICMKLSAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCi1AQCAtODU0Myw2ICs5MDUxLDExIEBAIGZpCi0gCi0gCi0gCi0rCi0rCi0rCi0rCi0rCi0gIwotICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSAjCi1AQCAtODg5Myw3ICs5NDA2LDggQEAgX0xUX0VPRgotICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCi0gICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCi0gICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKLS0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0rICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotKyAgICAgIGV4Y2x1ZGVfZXhwc3ltcz0nW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJwotIAotICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi1AQCAtODk5MiwxMiArOTUwNiwxMiBAQCBfTFRfRU9GCi0gCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCi0gCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KLSAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSctcnBhdGggJGxpYmRpcicKLS0JICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKLSsJICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCi0gCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgotIAkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotIAkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLS0JICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCi0rCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLSAJICBmaQotIAkgIDs7Ci0gCWVzYWMKLUBAIC05MDExLDggKzk1MjUsOCBAQCBfTFRfRU9GCi0gCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKLSAJd2xhcmM9Ci0gICAgICAgZWxzZQotLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSsJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0rCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgICBmaQotICAgICAgIDs7Ci0gCi1AQCAtOTAzMCw4ICs5NTQ0LDggQEAgX0xUX0VPRgotIAotIF9MVF9FT0YKLSAgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLS0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLS0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0rCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICAgZWxzZQotIAlsZF9zaGxpYnM9bm8KLSAgICAgICBmaQotQEAgLTkwNzcsOCArOTU5MSw4IEBAIF9MVF9FT0YKLSAKLSAgICAgKikKLSAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0tCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0tCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSsJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgIGVsc2UKLSAJbGRfc2hsaWJzPW5vCi0gICAgICAgZmkKLUBAIC05MjA4LDcgKzk3MjIsMTMgQEAgX0xUX0VPRgotIAlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJwotICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCi0gICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCi0tICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0rICAgICAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCi0rICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKLStlbHNlCi0rICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLSAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0gCi0gaW50Ci1AQCAtOTIyMSwyMiArOTc0MSwyOSBAQCBtYWluICgpCi0gX0FDRU9GCi0gaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotIAotLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0tICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLS0JL14wLyB7Ci0tCSAgICBzL14wICAqXCguKlwpJC9cMS8KLS0JICAgIHAKLS0JfQotLSAgICB9JwotLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLS1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0tICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLS1maQotKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKLSsgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7Ci0rCSAgL14wLyB7Ci0rCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCi0rCSAgICAgIHAKLSsJICB9Ci0rICAgICAgfScKLSsgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSsgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLSsgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCi0rICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSsgIGZpCi0gZmkKLSBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLS1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLSsgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCi0rICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKLSsgIGZpCi0rCi0rZmkKLSsKLSsgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KLStmaQotIAotICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLSAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCi1AQCAtOTI0OCw3ICs5Nzc1LDEzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotIAllbHNlCi0gCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KLSAJICMgZW1wdHkgZXhlY3V0YWJsZS4KLS0JIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLSsJIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KLSsgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAotK2Vsc2UKLSsgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSAKLSBpbnQKLUBAIC05MjYxLDIyICs5Nzk0LDI5IEBAIG1haW4gKCkKLSBfQUNFT0YKLSBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gCi0tbHRfYWl4X2xpYnBhdGhfc2VkPScKLS0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotLQkvXjAvIHsKLS0JICAgIHMvXjAgICpcKC4qXCkkL1wxLwotLQkgICAgcAotLQl9Ci0tICAgIH0nCi0tYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0tIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KLS0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotLWZpCi0rICBsdF9haXhfbGlicGF0aF9zZWQ9JwotKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLSsJICAvXjAvIHsKLSsJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KLSsJICAgICAgcAotKwkgIH0KLSsgICAgICB9JwotKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KLSsgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotKyAgZmkKLSBmaQotIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KLSsgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgotKyAgZmkKLSsKLStmaQotKwotKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXwotK2ZpCi0gCi0gCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotIAkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCi1AQCAtOTMyMSwyMCArOTg2MSw2MyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLSAgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgotICAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKLSAgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCi0tICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKLS0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotLSAgICAgIGxpYmV4dD1saWIKLS0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLS0gICAgICBzaHJleHRfY21kcz0iLmRsbCIKLS0gICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCi0tICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKLS0gICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgotLSAgICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCi0tICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KLS0gICAgICBvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCi0tICAgICAgZml4X3NyY2ZpbGVfcGF0aD0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCi0tICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKLSsgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotKyAgICAgIGNsKikKLSsJIyBOYXRpdmUgTVNWQwotKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJwotKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAotKwlhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCi0rCWZpbGVfbGlzdF9zcGVjPSdAJwotKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotKwlsaWJleHQ9bGliCi0rCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgotKwlzaHJleHRfY21kcz0iLmRsbCIKLSsJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JwotKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotKwkgICAgc2VkIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKLSsJICBlbHNlCi0rCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOwotKwkgIGZpfgotKwkgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KLSsJICBsaW5rbmFtZXM9JwotKwkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCi0rCSMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCApPSd0cnVlJwotKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcwotKwlleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0rCSMgRG9uJ3QgdXNlIHJhbmxpYgotKwlvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCi0rCXBvc3RsaW5rX2NtZHM9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KLSsJICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgotKwkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KLSsJICAgICouZXhlfCouRVhFKSA7OwotKwkgICAgKikKLSsJICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgotKwkgICAgICBsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgotKwkgICAgICA7OwotKwkgIGVzYWN+Ci0rCSAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KLSsJICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7Ci0rCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKLSsJICBmaScKLSsJOzsKLSsgICAgICAqKQotKwkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKLSsJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKLSsJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKLSsJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KLSsJbGliZXh0PWxpYgotKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLSsJc2hyZXh0X2NtZHM9Ii5kbGwiCi0rCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KLSsJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKLSsJIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KLSsJb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKLSsJIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KLSsJb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJwotKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcwotKwk7OwotKyAgICAgIGVzYWMKLSAgICAgICA7OwotIAotICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotQEAgLTkzOTUsNyArOTk3OCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotIAotICAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLS0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKLSAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotQEAgLTk0MDMsNyArOTk4Niw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotIAotICAgICBocHV4OSopCi0gICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLS0JYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgIGVsc2UKLSAJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgICBmaQotQEAgLTk0MTksNyArMTAwMDIsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLSAKLSAgICAgaHB1eDEwKikKLSAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLS0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgIGVsc2UKLSAJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgIGZpCi1AQCAtOTQ0MywxMCArMTAwMjYsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0gCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAJICA7OwotIAlpYTY0KikKLS0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotIAkgIDs7Ci0gCSopCi0tCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gCSAgOzsKLSAJZXNhYwotICAgICAgIGVsc2UKLUBAIC05NTI1LDIzICsxMDEwOCwzNiBAQCBmaQotIAotICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0tCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0rCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotIAkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAotIAkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCi0gCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCi0tICAgICAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotLSAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgotLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgotKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKLSsJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgotKwkgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0gLyogZW5kIGNvbmZkZWZzLmguICAqLwotLWludCBmb28odm9pZCkge30KLStpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9Ci0gX0FDRU9GCi0gaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotLSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotLQotKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzCi0rZWxzZQotKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm8KLSBmaQotIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotLSAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKLSsgICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCi0rZmkKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjUKLSskYXNfZWNobyAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjY7IH0KLSsJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgotKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotKwlmaQotICAgICAgIGVsc2UKLSAJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi1AQCAtOTYyNiw3ICsxMDIyMiw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKLSAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0tCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgICBlbHNlCi0gCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotQEAgLTk2NDUsOSArMTAyNDEsOSBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCi0gICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAJd2xhcmM9JyR7d2x9JwotLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotLQkgICRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCi0rCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCi0gICAgICAgZWxzZQotIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KLSAJKiJDb21waWxlcnMgNS4wIiopCi1AQCAtMTAyMjMsOCArMTA4MTksOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICBuZWVkX3ZlcnNpb249bm8KLSAgIG5lZWRfbGliX3ByZWZpeD1ubwotIAotLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCi0tICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQotKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgotKyAgeWVzLCopCi0rICAgICMgZ2NjCi0gICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCi0gICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKLSAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci1AQCAtMTAyNTcsMTMgKzEwODU0LDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICAgOzsKLSAgICAgZXNhYwotKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwotKyAgICA7OwotKwotKyAgKixjbCopCi0rICAgICMgTmF0aXZlIE1TVkMKLSsgICAgbGlibmFtZV9zcGVjPSckbmFtZScKLSsgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKLSsKLSsgICAgY2FzZSAkYnVpbGRfb3MgaW4KLSsgICAgbWluZ3cqKQotKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KLSsgICAgICBsdF9zYXZlX2lmcz0kSUZTCi0rICAgICAgSUZTPSc7JwotKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKLSsgICAgICBkbwotKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcwotKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KLSsgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAotKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgotKyAgICAgIGRvbmUKLSsgICAgICBJRlM9JGx0X3NhdmVfaWZzCi0rICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCi0rICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCi0rICAgICAgOzsKLSsgICAgY3lnd2luKikKLSsgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCi0rICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCi0rICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgotKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKLSsgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKLSsgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotKyAgICAgIDs7Ci0rICAgICopCi0rICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgotKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgotKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KLSsgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCi0rICAgICAgZWxzZQotKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotKyAgICAgIGZpCi0rICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCi0rICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQotKyAgICAgIDs7Ci0rICAgIGVzYWMKLSsKLSsgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KLSsgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgotKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KLSsgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KLSsgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCi0rICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0rICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KLSsgICAgICAgJFJNIFwkZGxwYXRoJwotKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0rICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKLSAgICAgOzsKLSAKLSAgICopCi0rICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgotICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKLSsgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKLSAgICAgOzsKLSAgIGVzYWMKLS0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KLSAgIHNobGlicGF0aF92YXI9UEFUSAotICAgOzsKLUBAIC0xMDM1NSw3ICsxMTAxMCw3IEBAIGhhaWt1KikKLSAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAotICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L2Jlb3Mvc3lzdGVtL2xpYicKLSsgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJwotICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgOzsKLSAKLUBAIC0xMTE5NSwxMCArMTE4NTAsMTAgQEAgZWxzZQotIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKLSAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCi0gI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCi0tdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKLStpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7Ci0gI2VuZGlmCi0gCi0tdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9Ci0raW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9Ci0gaW50IG1haW4gKCkKLSB7Ci0gICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKLUBAIC0xMTMwMSwxMCArMTE5NTYsMTAgQEAgZWxzZQotIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKLSAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCi0gI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCi0tdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKLStpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7Ci0gI2VuZGlmCi0gCi0tdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9Ci0raW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9Ci0gaW50IG1haW4gKCkKLSB7Ci0gICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKLUBAIC0xMjU0Myw3ICsxMzE5OCw3IEBAIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9ICJ5ZXMiOyB0aGVuCi0gIyBzaW5jZSBsaWJiZmQgbWF5IG5vdCBwdWxsIGluIHRoZSBlbnRpcmV0eSBvZiBsaWJpYmVydHkuCi0gICB4PWBzZWQgLW4gLWUgJ3MvXlsgCV0qUElDRkxBR1sgCV0qPVsgCV0qLy9wJyA8IC4uL2xpYmliZXJ0eS9NYWtlZmlsZSB8IHNlZCAtbiAnJHAnYAotICAgaWYgdGVzdCAtbiAiJHgiOyB0aGVuCi0tICAgIFNIQVJFRF9MSUJBREQ9Ii1MYHB3ZGAvLi4vbGliaWJlcnR5L3BpYyAtbGliZXJ0eSIKLSsgICAgU0hBUkVEX0xJQkFERD0iYHB3ZGAvLi4vbGliaWJlcnR5L3BpYy9saWJpYmVydHkuYSIKLSAgIGZpCi0gCi0gICBjYXNlICIke2hvc3R9IiBpbgotQEAgLTEzNTE4LDEzICsxNDE3MywyMCBAQCBleGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbHRfdW5zZXQ9J2AkRUNITyAiJGx0X3Vuc2V0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBsdF9TUDJOTD0nYCRFQ0hPICIkbHRfU1AyTkwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGx0X05MMlNQPSdgJEVDSE8gIiRsdF9OTDJTUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rbHRfY3ZfdG9faG9zdF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gcmVsb2FkX2ZsYWc9J2AkRUNITyAiJHJlbG9hZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSByZWxvYWRfY21kcz0nYCRFQ0hPICIkcmVsb2FkX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIE9CSkRVTVA9J2AkRUNITyAiJE9CSkRVTVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSdgJEVDSE8gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gZmlsZV9tYWdpY19jbWQ9J2AkRUNITyAiJGZpbGVfbWFnaWNfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLStmaWxlX21hZ2ljX2dsb2I9J2AkRUNITyAiJGZpbGVfbWFnaWNfZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rd2FudF9ub2Nhc2VnbG9iPSdgJEVDSE8gIiR3YW50X25vY2FzZWdsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK0RMTFRPT0w9J2AkRUNITyAiJERMTFRPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSdgJEVDSE8gIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gQVI9J2AkRUNITyAiJEFSIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBBUl9GTEFHUz0nYCRFQ0hPICIkQVJfRkxBR1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK2FyY2hpdmVyX2xpc3Rfc3BlYz0nYCRFQ0hPICIkYXJjaGl2ZXJfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBTVFJJUD0nYCRFQ0hPICIkU1RSSVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIFJBTkxJQj0nYCRFQ0hPICIkUkFOTElCIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBvbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotQEAgLTEzNTM5LDE0ICsxNDIwMSwxNyBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZQotIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLStubV9maWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkbm1fZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK2x0X3N5c3Jvb3Q9J2AkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIG9iamRpcj0nYCRFQ0hPICIkb2JqZGlyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBNQUdJQ19DTUQ9J2AkRUNITyAiJE1BR0lDX0NNRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLS1sdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK2x0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbHRfY3ZfcHJvZ19jb21waWxlcl9jX289J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBuZWVkX2xvY2tzPSdgJEVDSE8gIiRuZWVkX2xvY2tzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLStNQU5JRkVTVF9UT09MPSdgJEVDSE8gIiRNQU5JRkVTVF9UT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBEU1lNVVRJTD0nYCRFQ0hPICIkRFNZTVVUSUwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIE5NRURJVD0nYCRFQ0hPICIkTk1FRElUIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBMSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUBAIC0xMzU3OSwxMiArMTQyNDQsMTIgQEAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3EKLSBoYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gaW5oZXJpdF9ycGF0aD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbGlua19hbGxfZGVwbGlicz0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0tZml4X3NyY2ZpbGVfcGF0aD0nYCRFQ0hPICIkZml4X3NyY2ZpbGVfcGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGV4cG9ydF9zeW1ib2xzX2NtZHM9J2AkRUNITyAiJGV4cG9ydF9zeW1ib2xzX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGV4Y2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBpbmNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gcHJlbGlua19jbWRzPSdgJEVDSE8gIiRwcmVsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK3Bvc3RsaW5rX2NtZHM9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9J2AkRUNITyAiJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBuZWVkX2xpYl9wcmVmaXg9J2AkRUNITyAiJG5lZWRfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1AQCAtMTM2MzksOCArMTQzMDQsMTMgQEAgcmVsb2FkX2ZsYWcgXAotIE9CSkRVTVAgXAotIGRlcGxpYnNfY2hlY2tfbWV0aG9kIFwKLSBmaWxlX21hZ2ljX2NtZCBcCi0rZmlsZV9tYWdpY19nbG9iIFwKLSt3YW50X25vY2FzZWdsb2IgXAotK0RMTFRPT0wgXAotK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIFwKLSBBUiBcCi0gQVJfRkxBR1MgXAotK2FyY2hpdmVyX2xpc3Rfc3BlYyBcCi0gU1RSSVAgXAotIFJBTkxJQiBcCi0gQ0MgXAotQEAgLTEzNjUwLDEyICsxNDMyMCwxNCBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKLSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCi0gbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAotIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXAotK25tX2ZpbGVfbGlzdF9zcGVjIFwKLSBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCi0tbHRfcHJvZ19jb21waWxlcl93bCBcCi0gbHRfcHJvZ19jb21waWxlcl9waWMgXAotK2x0X3Byb2dfY29tcGlsZXJfd2wgXAotIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKLSBsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCi0gbmVlZF9sb2NrcyBcCi0rTUFOSUZFU1RfVE9PTCBcCi0gRFNZTVVUSUwgXAotIE5NRURJVCBcCi0gTElQTyBcCi1AQCAtMTM2NzEsNyArMTQzNDMsNiBAQCBub191bmRlZmluZWRfZmxhZyBcCi0gaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCi0gaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCBcCi0gaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCi0tZml4X3NyY2ZpbGVfcGF0aCBcCi0gZXhjbHVkZV9leHBzeW1zIFwKLSBpbmNsdWRlX2V4cHN5bXMgXAotIGZpbGVfbGlzdF9zcGVjIFwKLUBAIC0xMzcwNyw2ICsxNDM3OCw3IEBAIG1vZHVsZV9jbWRzIFwKLSBtb2R1bGVfZXhwc3ltX2NtZHMgXAotIGV4cG9ydF9zeW1ib2xzX2NtZHMgXAotIHByZWxpbmtfY21kcyBcCi0rcG9zdGxpbmtfY21kcyBcCi0gcG9zdGluc3RhbGxfY21kcyBcCi0gcG9zdHVuaW5zdGFsbF9jbWRzIFwKLSBmaW5pc2hfY21kcyBcCi1AQCAtMTQ0NjMsNyArMTUxMzUsOCBAQCAkYXNfZWNobyBYIiRmaWxlIiB8Ci0gIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCi0gIwotICMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCi0tIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSsjICAgICAgICAgICAgICAgICBJbmMuCi0gIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKLSAjCi0gIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgotQEAgLTE0NTY2LDE5ICsxNTIzOSw0MiBAQCBTUDJOTD0kbHRfbHRfU1AyTkwKLSAjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCi0gTkwyU1A9JGx0X2x0X05MMlNQCi0gCi0rIyBjb252ZXJ0IFwkYnVpbGQgZmlsZSBuYW1lcyB0byBcJGhvc3QgZm9ybWF0LgotK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKLSsKLSsjIGNvbnZlcnQgXCRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0LgotK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKLSsKLSAjIEFuIG9iamVjdCBzeW1ib2wgZHVtcGVyLgotIE9CSkRVTVA9JGx0X09CSkRVTVAKLSAKLSAjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgotIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAotIAotLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSAiZmlsZV9tYWdpYyIuCi0rIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgotIGZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAotIAotKyMgSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCi0rZmlsZV9tYWdpY19nbG9iPSRsdF9maWxlX21hZ2ljX2dsb2IKLSsKLSsjIEZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KLSt3YW50X25vY2FzZWdsb2I9JGx0X3dhbnRfbm9jYXNlZ2xvYgotKwotKyMgRExMIGNyZWF0aW9uIHByb2dyYW0uCi0rRExMVE9PTD0kbHRfRExMVE9PTAotKwotKyMgQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllcy4KLStzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKLSsKLSAjIFRoZSBhcmNoaXZlci4KLSBBUj0kbHRfQVIKLSsKLSsjIEZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlLgotIEFSX0ZMQUdTPSRsdF9BUl9GTEFHUwotIAotKyMgSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyLgotK2FyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfYXJjaGl2ZXJfbGlzdF9zcGVjCi0rCi0gIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KLSBTVFJJUD0kbHRfU1RSSVAKLSAKLUBAIC0xNDYwOCw2ICsxNTMwNCwxMiBAQCBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcwotICMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCi0gZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4Ci0gCi0rIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCi0rbm1fZmlsZV9saXN0X3NwZWM9JGx0X25tX2ZpbGVfbGlzdF9zcGVjCi0rCi0rIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KLStsdF9zeXNyb290PSRsdF9zeXNyb290Ci0rCi0gIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCi0gb2JqZGlyPSRvYmpkaXIKLSAKLUBAIC0xNDYxNyw2ICsxNTMxOSw5IEBAIE1BR0lDX0NNRD0kTUFHSUNfQ01ECi0gIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KLSBuZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCi0gCi0rIyBNYW5pZmVzdCB0b29sLgotK01BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKLSsKLSAjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCi0gRFNZTVVUSUw9JGx0X0RTWU1VVElMCi0gCi1AQCAtMTQ3MzEsMTIgKzE1NDM2LDEyIEBAIHdpdGhfZ2NjPSRHQ0MKLSAjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCi0gbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZwotIAotLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KLS13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAotLQotICMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgotIHBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYwotIAotKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KLSt3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAotKwotICMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KLSBsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYwotIAotQEAgLTE0ODIzLDkgKzE1NTI4LDYgQEAgaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAotICMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgotIGxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKLSAKLS0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCi0tZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAotLQotICMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgotIGFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCi0gCi1AQCAtMTQ4NDEsNiArMTU1NDMsOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcwotICMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCi0gcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHMKLSAKLSsjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCi0rcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kcwotKwotICMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgotIGZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYwotIAotQEAgLTE0ODczLDIxMCArMTU1NzgsMTY5IEBAIGx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgotICAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgotICAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KLSAgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/Ci0tICBzZWQgJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAotLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQotLQotLSAgY2FzZSAkeHNpX3NoZWxsIGluCi0tICB5ZXMpCi0tICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCi0tCi0tIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50Ci0tIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAotLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgotLWZ1bmNfZGlybmFtZSAoKQotLXsKLS0gIGNhc2UgJHsxfSBpbgotLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OwotLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7Ci0tICBlc2FjCi0tfQotLQotLSMgZnVuY19iYXNlbmFtZSBmaWxlCi0tZnVuY19iYXNlbmFtZSAoKQotLXsKLS0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKLS19Ci0tCi0tIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAotLSMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KLS0jIGNhbGw6Ci0tIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKLS0jICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKLS0jICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KLS0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKLS0jICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KLS0jICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLS0jIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKLS0jIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCi0tIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCi0tZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQotLXsKLS0gIGNhc2UgJHsxfSBpbgotLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OwotLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7Ci0tICBlc2FjCi0tICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCi0tfQotLQotLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCi0tIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KLS0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAotLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZwotLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KLS1mdW5jX3N0cmlwbmFtZSAoKQotLXsKLS0gICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKLS0gICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KLS0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9Ci0tICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQotLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In0KLS19Ci0tCi0tIyBmdW5jX29wdF9zcGxpdAotLWZ1bmNfb3B0X3NwbGl0ICgpCi0tewotLSAgZnVuY19vcHRfc3BsaXRfb3B0PSR7MSUlPSp9Ci0tICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQotLX0KLS0KLS0jIGZ1bmNfbG8ybyBvYmplY3QKLS1mdW5jX2xvMm8gKCkKLS17Ci0tICBjYXNlICR7MX0gaW4KLS0gICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKLS0gICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7Ci0tICBlc2FjCi0tfQotLQotLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCi0tZnVuY194Zm9ybSAoKQotLXsKLS0gIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KLS19Ci0tCi0tIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgotLWZ1bmNfYXJpdGggKCkKLS17Ci0tICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKLS19Ci0tCi0tIyBmdW5jX2xlbiBzdHJpbmcKLS0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCi0tZnVuY19sZW4gKCkKLS17Ci0tICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KLS19Ci0tCi0tX0xUX0VPRgotLSAgICA7OwotLSAgKikgIyBCb3VybmUgY29tcGF0aWJsZSBmdW5jdGlvbnMuCi0tICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCi0tCi0tIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50Ci0tIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAotLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgotLWZ1bmNfZGlybmFtZSAoKQotLXsKLS0gICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCi0tICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCi0tICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgotLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgotLSAgZWxzZQotLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCi0tICBmaQotLX0KLS0KLS0jIGZ1bmNfYmFzZW5hbWUgZmlsZQotLWZ1bmNfYmFzZW5hbWUgKCkKLS17Ci0tICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKLS19Ci0tCi0tCi0tIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKLS0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgotLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCi0tIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCi0tIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgotLSMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKLS1mdW5jX3N0cmlwbmFtZSAoKQotLXsKLS0gIGNhc2UgJHsyfSBpbgotLSAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OwotLSAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7Ci0tICBlc2FjCi0tfQotLQotLSMgc2VkIHNjcmlwdHM6Ci0tbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW149XSpcKT0uKi9cMS87cScKLS1teV9zZWRfbG9uZ19hcmc9JzFzL14tW149XSo9Ly8nCi0tCi0tIyBmdW5jX29wdF9zcGxpdAotLWZ1bmNfb3B0X3NwbGl0ICgpCi0tewotLSAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKLS0gIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCi0tfQotLQotLSMgZnVuY19sbzJvIG9iamVjdAotLWZ1bmNfbG8ybyAoKQotLXsKLS0gIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKLS19Ci0tCi0tIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKLS1mdW5jX3hmb3JtICgpCi0tewotLSAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCi0tfQotLQotLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KLS1mdW5jX2FyaXRoICgpCi0tewotLSAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKLS19Ci0tCi0tIyBmdW5jX2xlbiBzdHJpbmcKLS0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCi0tZnVuY19sZW4gKCkKLS17Ci0tICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiQxIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCi0tfQotLQotLV9MVF9FT0YKLS1lc2FjCi0tCi0tY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCi0tICB5ZXMpCi0tICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCi0tCi0tIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKLS0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KLS1mdW5jX2FwcGVuZCAoKQotLXsKLS0gIGV2YWwgIiQxKz1cJDIiCi0tfQotLV9MVF9FT0YKLS0gICAgOzsKLS0gICopCi0tICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCi0tCi0tIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKLS0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KLS1mdW5jX2FwcGVuZCAoKQotLXsKLS0gIGV2YWwgIiQxPVwkJDFcJDIiCi0tfQotLQotLV9MVF9FT0YKLS0gICAgOzsKLS0gIGVzYWMKLS0KLS0KLS0gIHNlZCAtbiAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS8sJHAnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKLS0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKLS0KLS0gIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKLSsgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKLSsgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCi0rCi0rICBpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCi0rICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lIC9jXAotK2Z1bmNfZGlybmFtZSAoKVwKLSt7XAotK1wgICAgY2FzZSAkezF9IGluXAotK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKLStcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKLStcICAgIGVzYWNcCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Jhc2VuYW1lIC9jXAotK2Z1bmNfYmFzZW5hbWUgKClcCi0re1wKLStcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAvY1wKLStmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpXAotK3tcCi0rXCAgICBjYXNlICR7MX0gaW5cCi0rXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAotK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAotK1wgICAgZXNhY1wKLStcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgIHNlZCAtZSAnL15mdW5jX3N0cmlwbmFtZSAoKSQvLC9efSAjIGZ1bmNfc3RyaXBuYW1lIC9jXAotK2Z1bmNfc3RyaXBuYW1lICgpXAotK3tcCi0rXCAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlXAotK1wgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LlwKLStcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9XAotK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In1cCi0rXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifVwKLSt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zdHJpcG5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgIHNlZCAtZSAnL15mdW5jX3NwbGl0X2xvbmdfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9sb25nX29wdCAvY1wKLStmdW5jX3NwbGl0X2xvbmdfb3B0ICgpXAotK3tcCi0rXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn1cCi0rXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz0kezEjKj19XAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X2xvbmdfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rCi0rCi0rICBzZWQgLWUgJy9eZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCAvY1wKLStmdW5jX3NwbGl0X3Nob3J0X29wdCAoKVwKLSt7XAotK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P31cCi0rXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X3Nob3J0X29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfbG8ybyAoKSQvLC9efSAjIGZ1bmNfbG8ybyAvY1wKLStmdW5jX2xvMm8gKClcCi0re1wKLStcICAgIGNhc2UgJHsxfSBpblwKLStcICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOztcCi0rXCAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7O1wKLStcICAgIGVzYWNcCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbG8ybyBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfeGZvcm0gKCkkLywvXn0gIyBmdW5jX3hmb3JtIC9jXAotK2Z1bmNfeGZvcm0gKClcCi0re1wKLSsgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb1wKLSt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY194Zm9ybSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfYXJpdGggKCkkLywvXn0gIyBmdW5jX2FyaXRoIC9jXAotK2Z1bmNfYXJpdGggKClcCi0re1wKLSsgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpXAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FyaXRoIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rCi0rCi0rICBzZWQgLWUgJy9eZnVuY19sZW4gKCkkLywvXn0gIyBmdW5jX2xlbiAvY1wKLStmdW5jX2xlbiAoKVwKLSt7XAotKyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1cCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbGVuIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rCi0rZmkKLSsKLStpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCi0rICBzZWQgLWUgJy9eZnVuY19hcHBlbmQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZCAvY1wKLStmdW5jX2FwcGVuZCAoKVwKLSt7XAotKyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kX3F1b3RlZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCAvY1wKLStmdW5jX2FwcGVuZF9xdW90ZWQgKClcCi0re1wKLStcICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iXAotK1wgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJcCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kX3F1b3RlZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JwotKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCi0rICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotK2Vsc2UKLSsgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCi0rICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAotKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLStmaQotKwotK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCi0rICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mNQotKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mMjt9Ci0rZmkKLSsKLSsKLSsgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8Ci0gICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCi0gICBjaG1vZCAreCAiJG9maWxlIgotIAotZGlmZiAtLWdpdCBhL29wY29kZXMvY29uZmlndXJlLmFjIGIvb3Bjb2Rlcy9jb25maWd1cmUuYWMKLWluZGV4IGI5ZjVlYjhhNGYuLmEzMWI2NmEyZjAgMTAwNjQ0Ci0tLS0gYS9vcGNvZGVzL2NvbmZpZ3VyZS5hYwotKysrIGIvb3Bjb2Rlcy9jb25maWd1cmUuYWMKLUBAIC0xNjcsNyArMTY3LDcgQEAgY2hhbmdlcXVvdGUoLClkbmwKLSAgIHg9YHNlZCAtbiAtZSAncy9eWyAJXSpQSUNGTEFHWyAJXSo9WyAJXSovL3AnIDwgLi4vbGliaWJlcnR5L01ha2VmaWxlIHwgc2VkIC1uICckcCdgCi0gY2hhbmdlcXVvdGUoWyxdKWRubAotICAgaWYgdGVzdCAtbiAiJHgiOyB0aGVuCi0tICAgIFNIQVJFRF9MSUJBREQ9Ii1MYHB3ZGAvLi4vbGliaWJlcnR5L3BpYyAtbGliZXJ0eSIKLSsgICAgU0hBUkVEX0xJQkFERD0iYHB3ZGAvLi4vbGliaWJlcnR5L3BpYy9saWJpYmVydHkuYSIKLSAgIGZpCi0gCi0gICBjYXNlICIke2hvc3R9IiBpbgotZGlmZiAtLWdpdCBhL3psaWIvY29uZmlndXJlIGIvemxpYi9jb25maWd1cmUKLWluZGV4IGJlZDllM2VhMmIuLmNhZWYwYjY3NGUgMTAwNzU1Ci0tLS0gYS96bGliL2NvbmZpZ3VyZQotKysrIGIvemxpYi9jb25maWd1cmUKLUBAIC02MTQsOCArNjE0LDExIEBAIE9UT09MCi0gTElQTwotIE5NRURJVAotIERTWU1VVElMCi0rTUFOSUZFU1RfVE9PTAotIFJBTkxJQgotK2FjX2N0X0FSCi0gQVIKLStETExUT09MCi0gT0JKRFVNUAotIExOX1MKLSBOTQotQEAgLTczNyw2ICs3NDAsNyBAQCBlbmFibGVfc3RhdGljCi0gd2l0aF9waWMKLSBlbmFibGVfZmFzdF9pbnN0YWxsCi0gd2l0aF9nbnVfbGQKLSt3aXRoX2xpYnRvb2xfc3lzcm9vdAotIGVuYWJsZV9saWJ0b29sX2xvY2sKLSBlbmFibGVfaG9zdF9zaGFyZWQKLSAnCi1AQCAtMTM4NSw2ICsxMzg5LDggQEAgT3B0aW9uYWwgUGFja2FnZXM6Ci0gICAtLXdpdGgtcGljICAgICAgICAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCi0gICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCi0rICAtLXdpdGgtbGlidG9vbC1zeXNyb290PURJUiBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUgotKyAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLgotIAotIFNvbWUgaW5mbHVlbnRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzOgotICAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCi1AQCAtMzkxMCw4ICszOTE2LDggQEAgZXNhYwotIAotIAotIAotLW1hY3JvX3ZlcnNpb249JzIuMi43YScKLS1tYWNyb19yZXZpc2lvbj0nMS4zMTM0JwotK21hY3JvX3ZlcnNpb249JzIuNCcKLSttYWNyb19yZXZpc2lvbj0nMS4zMjkzJwotIAotIAotIAotQEAgLTM5NTEsNyArMzk1Nyw3IEBAIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCi0geyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1Ci0gJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MuLi4gIiA+JjY7IH0KLSAjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KLS1pZiB0ZXN0ICJYYHByaW50IC1yIC0tIC1uIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAotK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAotICAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCi0gICBFQ0hPPSdwcmludCAtciAtLScKLSBlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgotQEAgLTQ3NjcsOCArNDc3Myw4IEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7Ci0gIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKLSB4c2lfc2hlbGw9bm8KLSAoIF9sdF9kdW1teT0iYS9iL2MiCi0tICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwiJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAotLSAgICAgID0gYyxhL2IsLCBcCi0rICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAotKyAgICAgID0gYyxhL2IsYi9jLCBcCi0gICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKLSAgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKLSAgICYmIHhzaV9zaGVsbD15ZXMKLUBAIC00ODE3LDYgKzQ4MjMsODAgQEAgZXNhYwotIAotIAotIAotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0IiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQuLi4gIiA+JjY7IH0KLStpZiB0ZXN0ICIke2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBjYXNlICRob3N0IGluCi0rICAqLSotbWluZ3cqICkKLSsgICAgY2FzZSAkYnVpbGQgaW4KLSsgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCi0rICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0rICAgICAgICA7OwotKyAgICAgICotKi1jeWd3aW4qICkKLSsgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgotKyAgICAgICAgOzsKLSsgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4Ci0rICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKLSsgICAgICAgIDs7Ci0rICAgIGVzYWMKLSsgICAgOzsKLSsgICotKi1jeWd3aW4qICkKLSsgICAgY2FzZSAkYnVpbGQgaW4KLSsgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCi0rICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCi0rICAgICAgICA7OwotKyAgICAgICotKi1jeWd3aW4qICkKLSsgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAotKyAgICAgICAgOzsKLSsgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4Ci0rICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KLSsgICAgICAgIDs7Ci0rICAgIGVzYWMKLSsgICAgOzsKLSsgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCi0rICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAotKyAgICA7OwotK2VzYWMKLSsKLStmaQotKwotK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNQotKyRhc19lY2hvICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY2OyB9Ci0rCi0rCi0rCi0rCi0rCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0IiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0Li4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHtsdF9jdl90b190b29sX2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgotK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAotK2Nhc2UgJGhvc3QgaW4KLSsgICotKi1taW5ndyogKQotKyAgICBjYXNlICRidWlsZCBpbgotKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKLSsgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLSsgICAgICAgIDs7Ci0rICAgIGVzYWMKLSsgICAgOzsKLStlc2FjCi0rCi0rZmkKLSsKLSt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjUKLSskYXNfZWNobyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNjsgfQotKwotKwotKwotKwotKwotIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1Ci0gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQotIGlmIHRlc3QgIiR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgotQEAgLTQ4MzMsNiArNDkxMywxMSBAQCBjYXNlICRyZWxvYWRfZmxhZyBpbgotIGVzYWMKLSByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi0gY2FzZSAkaG9zdF9vcyBpbgotKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KLSsgICAgICByZWxvYWRfY21kcz1mYWxzZQotKyAgICBmaQotKyAgICA7OwotICAgZGFyd2luKikKLSAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi1AQCAtNTAwMSw3ICs1MDg2LDggQEAgbWluZ3cqIHwgcHczMiopCi0gICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCi0gICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJwotICAgZWxzZQotLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKLSsgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgotKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCi0gICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKLSAgIGZpCi0gICA7OwotQEAgLTUxNTUsNiArNTI0MSwyMSBAQCBlc2FjCi0gZmkKLSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKLSAkYXNfZWNobyAiJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KLSsKLStmaWxlX21hZ2ljX2dsb2I9Ci0rd2FudF9ub2Nhc2VnbG9iPW5vCi0raWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KLSsgIGNhc2UgJGhvc3Rfb3MgaW4KLSsgIG1pbmd3KiB8IHB3MzIqKQotKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0rICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcwotKyAgICBlbHNlCi0rICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bXDFdXC9bXDFdXC9nOy9nImAKLSsgICAgZmkKLSsgICAgOzsKLSsgIGVzYWMKLStmaQotKwotIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAotIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAotIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgotQEAgLTUxNzAsOSArNTI3MSwxNjMgQEAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCi0gCi0gCi0gCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0rCi0gaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLS1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgotKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHthY19jdl9wcm9nX0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KLSsgIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotK2Vsc2UKLSthc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0rZm9yIGFzX2RpciBpbiAkUEFUSAotK2RvCi0rICBJRlM9JGFzX3NhdmVfSUZTCi0rICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSsgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSsgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCi0rICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotKyAgICBicmVhayAyCi0rICBmaQotK2RvbmUKLSsgIGRvbmUKLStJRlM9JGFzX3NhdmVfSUZTCi0rCi0rZmkKLStmaQotK0RMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAotK2lmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKLSskYXNfZWNobyAiJERMTFRPT0wiID4mNjsgfQotK2Vsc2UKLSsgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0rJGFzX2VjaG8gIm5vIiA+JjY7IH0KLStmaQotKwotKwotK2ZpCi0raWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KLSsgIGFjX2N0X0RMTFRPT0w9JERMTFRPT0wKLSsgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi0rc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KLSsgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iJGFjX2N0X0RMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotK2Vsc2UKLSthc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0rZm9yIGFzX2RpciBpbiAkUEFUSAotK2RvCi0rICBJRlM9JGFzX3NhdmVfSUZTCi0rICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSsgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSsgICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgotKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSsgICAgYnJlYWsgMgotKyAgZmkKLStkb25lCi0rICBkb25lCi0rSUZTPSRhc19zYXZlX0lGUwotKwotK2ZpCi0rZmkKLSthY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKLStpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KLSsgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1Ci0rJGFzX2VjaG8gIiRhY19jdF9ETExUT09MIiA+JjY7IH0KLStlbHNlCi0rICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotKyRhc19lY2hvICJubyIgPiY2OyB9Ci0rZmkKLSsKLSsgIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCi0rICAgIERMTFRPT0w9ImZhbHNlIgotKyAgZWxzZQotKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi0reWVzOikKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0rJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotK2FjX3Rvb2xfd2FybmVkPXllcyA7OwotK2VzYWMKLSsgICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAotKyAgZmkKLStlbHNlCi0rICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgotK2ZpCi0rCi0rdGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAotKwotKwotKwotKwotKwotKwotKwotKwotKwotKwotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcyIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcy4uLiAiID4mNjsgfQotK2lmIHRlc3QgIiR7bHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKLSsKLStjYXNlICRob3N0X29zIGluCi0rY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAotKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAotKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCi0rICAqLS1pZGVudGlmeS1zdHJpY3QqKQotKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKLSsgICAgOzsKLSsgICopCi0rICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjawotKyAgICA7OwotKyAgZXNhYwotKyAgOzsKLSsqKQotKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCi0rICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCi0rICA7OwotK2VzYWMKLSsKLStmaQotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNQotKyRhc19lY2hvICIkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNjsgfQotK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAotK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KLSsKLSsKLSsKLSsKLSsKLSsKLSsKLSsKLStpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0rICBmb3IgYWNfcHJvZyBpbiBhcgotKyAgZG8KLSsgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi0rc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCi0geyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUitzZXR9IiA9IHNldDsgdGhlbiA6Ci1AQCAtNTE4OCw3ICs1NDQzLDcgQEAgZG8KLSAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotLSAgICBhY19jdl9wcm9nX0FSPSIke2FjX3Rvb2xfcHJlZml4fWFyIgotKyAgICBhY19jdl9wcm9nX0FSPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKLSAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgIGJyZWFrIDIKLSAgIGZpCi1AQCAtNTIwOCwxMSArNTQ2MywxNSBAQCAkYXNfZWNobyAibm8iID4mNjsgfQotIGZpCi0gCi0gCi0rICAgIHRlc3QgLW4gIiRBUiIgJiYgYnJlYWsKLSsgIGRvbmUKLSBmaQotLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FSIjsgdGhlbgotK2lmIHRlc3QgLXogIiRBUiI7IHRoZW4KLSAgIGFjX2N0X0FSPSRBUgotLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi0tc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCi0rICBmb3IgYWNfcHJvZyBpbiBhcgotK2RvCi0rICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLStzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKLSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci0gaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuIDoKLUBAIC01MjI4LDcgKzU0ODcsNyBAQCBkbwotICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0tICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgotKyAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfcHJvZyIKLSAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgIGJyZWFrIDIKLSAgIGZpCi1AQCAtNTI0Nyw2ICs1NTA2LDEwIEBAIGVsc2UKLSAkYXNfZWNobyAibm8iID4mNjsgfQotIGZpCi0gCi0rCi0rICB0ZXN0IC1uICIkYWNfY3RfQVIiICYmIGJyZWFrCi0rZG9uZQotKwotICAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCi0gICAgIEFSPSJmYWxzZSIKLSAgIGVsc2UKLUBAIC01MjU4LDE2ICs1NTIxLDcyIEBAIGFjX3Rvb2xfd2FybmVkPXllcyA7OwotIGVzYWMKLSAgICAgQVI9JGFjX2N0X0FSCi0gICBmaQotLWVsc2UKLS0gIEFSPSIkYWNfY3ZfcHJvZ19BUiIKLSBmaQotIAotLXRlc3QgLXogIiRBUiIgJiYgQVI9YXIKLS10ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQotKzogJHtBUj1hcn0KLSs6ICR7QVJfRkxBR1M9Y3J1fQotKwotKwotKwotKwotKwotKwotKwotKwotKwotKwotKwotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0Li4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHtsdF9jdl9hcl9hdF9maWxlK3NldH0iID0gc2V0OyB0aGVuIDoKLSsgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci0rZWxzZQotKyAgbHRfY3ZfYXJfYXRfZmlsZT1ubwotKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLSsvKiBlbmQgY29uZmRlZnMuaC4gICovCi0rCi0raW50Ci0rbWFpbiAoKQotK3sKLSAKLSsgIDsKLSsgIHJldHVybiAwOwotK30KLStfQUNFT0YKLStpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0rICBlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKLSsgICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mNScKLSsgICAgICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQotKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQotKyAgYWNfc3RhdHVzPSQ/Ci0rICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSsgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KLSsgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgotKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgotKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKLSsJeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKLSsgIChldmFsICRsdF9hcl90cnkpIDI+JjUKLSsgIGFjX3N0YXR1cz0kPwotKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0rICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9Ci0rCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCi0rICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAotKyAgICAgICAgZmkKLSsgICAgICBmaQotKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQotIAotK2ZpCi0rcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gCi0rZmkKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyX2F0X2ZpbGUiID4mNQotKyRhc19lY2hvICIkbHRfY3ZfYXJfYXRfZmlsZSIgPiY2OyB9Ci0gCi0raWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgotKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQotK2Vsc2UKLSsgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQotK2ZpCi0gCi0gCi0gCi1AQCAtNTYwOSw4ICs1OTI4LDggQEAgZXNhYwotIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCi0gCi0gIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCi0tbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKLS1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKLStsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgotK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgotIAotICMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgotIG9wdF9jcj0KLUBAIC01NjQ2LDYgKzU5NjUsNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCi0gICBlbHNlCi0gICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCi0gICBmaQotKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgotIAotICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCi0gICBwaXBlX3dvcmtzPW5vCi1AQCAtNTY4Nyw2ICs2MDA3LDE4IEBAIF9MVF9FT0YKLSAgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgotIAlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KLSAJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAotKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLwotKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCi0rLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCi0rICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLwotKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCi0rI2VsaWYgZGVmaW5lZChfX29zZl9fKQotKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLwotKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCi0rI2Vsc2UKLSsjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAotKyNlbmRpZgotKwotICNpZmRlZiBfX2NwbHVzcGx1cwotIGV4dGVybiAiQyIgewotICNlbmRpZgotQEAgLTU2OTgsNyArNjAzMCw3IEBAIF9MVF9FT0YKLSAJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKLSAKLSAvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCi0tY29uc3Qgc3RydWN0IHsKLStMVF9ETFNZTV9DT05TVCBzdHJ1Y3QgewotICAgY29uc3QgY2hhciAqbmFtZTsKLSAgIHZvaWQgICAgICAgKmFkZHJlc3M7Ci0gfQotQEAgLTU3MjQsOCArNjA1Niw4IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7Ci0gX0xUX0VPRgotIAkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCi0gCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0Ci0tCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKLS0JICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKLSsJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUwotKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUwotIAkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCi0gCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgotIAkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQotQEAgLTU3MzUsOCArNjA2Nyw4IEBAIF9MVF9FT0YKLSAgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgotIAkgICAgcGlwZV93b3Jrcz15ZXMKLSAJICBmaQotLQkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCi0tCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCi0rCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKLSsJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKLSAJZWxzZQotIAkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQotIAlmaQotQEAgLTU3NzMsNiArNjEwNSwxOSBAQCBlbHNlCi0gJGFzX2VjaG8gIm9rIiA+JjY7IH0KLSBmaQotIAotKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgotK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCi0rICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKLStlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbQF1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCi0rICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKLStmaQotKwotKwotKwotKwotKwotKwotKwotIAotIAotIAotQEAgLTU3OTMsNiArNjEzOCw0MSBAQCBmaQotIAotIAotIAotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5c3Jvb3QiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNyb290Li4uICIgPiY2OyB9Ci0rCi0rIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Qgd2FzIGdpdmVuLgotK2lmIHRlc3QgIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgd2l0aHZhbD0kd2l0aF9saWJ0b29sX3N5c3Jvb3Q7Ci0rZWxzZQotKyAgd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm8KLStmaQotKwotKwotK2x0X3N5c3Jvb3Q9Ci0rY2FzZSAke3dpdGhfbGlidG9vbF9zeXNyb290fSBpbiAjKAotKyB5ZXMpCi0rICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSsgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCi0rICAgZmkKLSsgICA7OyAjKAotKyAvKikKLSsgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9saWJ0b29sX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKLSsgICA7OyAjKAotKyBub3wnJykKLSsgICA7OyAjKAotKyAqKQotKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY1Ci0rJGFzX2VjaG8gIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjY7IH0KLSsgICBhc19mbl9lcnJvciAiVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIgIiRMSU5FTk8iIDUKLSsgICA7OwotK2VzYWMKLSsKLSsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7bHRfc3lzcm9vdDotbm99IiA+JjUKLSskYXNfZWNobyAiJHtsdF9zeXNyb290Oi1ub30iID4mNjsgfQotKwotKwotKwotIAotIAotICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgotQEAgLTYwMDQsNiArNjM4NCwxMjMgQEAgZXNhYwotIAotIG5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgotIAotK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSsgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1tdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi0rc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bXQ7IGFjX3dvcmQ9JDIKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHthY19jdl9wcm9nX01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KLSsgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJE1BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotK2Vsc2UKLSthc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0rZm9yIGFzX2RpciBpbiAkUEFUSAotK2RvCi0rICBJRlM9JGFzX3NhdmVfSUZTCi0rICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSsgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSsgICAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIke2FjX3Rvb2xfcHJlZml4fW10IgotKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSsgICAgYnJlYWsgMgotKyAgZmkKLStkb25lCi0rICBkb25lCi0rSUZTPSRhc19zYXZlX0lGUwotKwotK2ZpCi0rZmkKLStNQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wKLStpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KLSsgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFOSUZFU1RfVE9PTCIgPiY1Ci0rJGFzX2VjaG8gIiRNQU5JRkVTVF9UT09MIiA+JjY7IH0KLStlbHNlCi0rICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotKyRhc19lY2hvICJubyIgPiY2OyB9Ci0rZmkKLSsKLSsKLStmaQotK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiOyB0aGVuCi0rICBhY19jdF9NQU5JRkVTVF9UT09MPSRNQU5JRkVTVF9UT09MCi0rICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLStzZXQgZHVtbXkgbXQ7IGFjX3dvcmQ9JDIKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KLSsgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0iJGFjX2N0X01BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotK2Vsc2UKLSthc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0rZm9yIGFzX2RpciBpbiAkUEFUSAotK2RvCi0rICBJRlM9JGFzX3NhdmVfSUZTCi0rICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSsgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSsgICAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSJtdCIKLSsgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0rICAgIGJyZWFrIDIKLSsgIGZpCi0rZG9uZQotKyAgZG9uZQotK0lGUz0kYXNfc2F2ZV9JRlMKLSsKLStmaQotK2ZpCi0rYWNfY3RfTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MCi0raWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCi0rICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNQotKyRhc19lY2hvICIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY2OyB9Ci0rZWxzZQotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSskYXNfZWNobyAibm8iID4mNjsgfQotK2ZpCi0rCi0rICBpZiB0ZXN0ICJ4JGFjX2N0X01BTklGRVNUX1RPT0wiID0geDsgdGhlbgotKyAgICBNQU5JRkVTVF9UT09MPSI6IgotKyAgZWxzZQotKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi0reWVzOikKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0rJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotK2FjX3Rvb2xfd2FybmVkPXllcyA7OwotK2VzYWMKLSsgICAgTUFOSUZFU1RfVE9PTD0kYWNfY3RfTUFOSUZFU1RfVE9PTAotKyAgZmkKLStlbHNlCi0rICBNQU5JRkVTVF9UT09MPSIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIgotK2ZpCi0rCi0rdGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sLi4uICIgPiY2OyB9Ci0raWYgdGVzdCAiJHtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KLSsgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JjUKLSsgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKLSsgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0rICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCi0rICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKLSsgIGZpCi0rICBybSAtZiBjb25mdGVzdCoKLStmaQotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjUKLSskYXNfZWNobyAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY2OyB9Ci0raWYgdGVzdCAieCRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiICE9IHh5ZXM7IHRoZW4KLSsgIE1BTklGRVNUX1RPT0w9OgotK2ZpCi0rCi0rCi0rCi0rCi0rCi0gCi0gICBjYXNlICRob3N0X29zIGluCi0gICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCi1AQCAtNjU3MCw2ICs3MDY3LDggQEAgX0xUX0VPRgotICAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mNQotICAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JjUKLSAgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiY1Ci0rICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JjUKLSsgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mNQotICAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgotIGludCBtYWluKCkgeyByZXR1cm4gMDt9Ci0gX0xUX0VPRgotQEAgLTcwMzMsNyArNzUzMiw4IEBAIGZpCi0gTElCVE9PTF9ERVBTPSIkbHRtYWluIgotIAotICMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCi0tTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCi0rTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpJwotK0xJQlRPT0w9IiRMSUJUT09MLyR7aG9zdF9hbGlhc30tbGlidG9vbCIKLSAKLSAKLSAKLUBAIC03MTIyLDcgKzc2MjIsNyBAQCBhaXgzKikKLSBlc2FjCi0gCi0gIyBHbG9iYWwgdmFyaWFibGVzOgotLW9maWxlPWxpYnRvb2wKLStvZmlsZT0ke2hvc3RfYWxpYXN9LWxpYnRvb2wKLSBjYW5fYnVpbGRfc2hhcmVkPXllcwotIAotICMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAotQEAgLTc0MjAsOCArNzkyMCw2IEBAIGZpCi0gbHRfcHJvZ19jb21waWxlcl9waWM9Ci0gbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Ci0gCi0teyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1Ci0tJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KLSAKLSAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi1AQCAtNzU4Nyw2ICs4MDg1LDEyIEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9Ci0gCWx0X3Byb2dfY29tcGlsZXJfcGljPSctLXNoYXJlZCcKLSAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy0tc3RhdGljJwotIAk7OwotKyAgICAgIG5hZ2ZvciopCi0rCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKLSsJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLC1XbCwsJwotKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKLSsJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotKwk7OwotICAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKLSAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCi0gCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCi1AQCAtNzY0OSw3ICs4MTUzLDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KLSAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCi0gICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0tICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQotKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKLSAJbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJzs7Ci0gICAgICAgKikKLSAJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OwotQEAgLTc3MDYsMTMgKzgyMTAsMTcgQEAgY2FzZSAkaG9zdF9vcyBpbgotICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgotICAgICA7OwotIGVzYWMKLS17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKLS0kYXNfZWNobyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KLS0KLS0KLS0KLS0KLSAKLSt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKLSskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQotK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfcHJvZ19jb21waWxlcl9waWMKLStmaQotK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNQotKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQotK2x0X3Byb2dfY29tcGlsZXJfcGljPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYwotIAotICMKLSAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCi1AQCAtNzc3Myw2ICs4MjgxLDExIEBAIGZpCi0gCi0gCi0gCi0rCi0rCi0rCi0rCi0rCi0gIwotICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSAjCi1AQCAtODEyMyw3ICs4NjM2LDggQEAgX0xUX0VPRgotICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCi0gICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCi0gICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKLS0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0rICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotKyAgICAgIGV4Y2x1ZGVfZXhwc3ltcz0nW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJwotIAotICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi1AQCAtODIyMiwxMiArODczNiwxMiBAQCBfTFRfRU9GCi0gCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCi0gCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KLSAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSctcnBhdGggJGxpYmRpcicKLS0JICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKLSsJICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCi0gCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgotIAkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotIAkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLS0JICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCi0rCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLSAJICBmaQotIAkgIDs7Ci0gCWVzYWMKLUBAIC04MjQxLDggKzg3NTUsOCBAQCBfTFRfRU9GCi0gCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKLSAJd2xhcmM9Ci0gICAgICAgZWxzZQotLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSsJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0rCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgICBmaQotICAgICAgIDs7Ci0gCi1AQCAtODI2MCw4ICs4Nzc0LDggQEAgX0xUX0VPRgotIAotIF9MVF9FT0YKLSAgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLS0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLS0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0rCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICAgZWxzZQotIAlsZF9zaGxpYnM9bm8KLSAgICAgICBmaQotQEAgLTgzMDcsOCArODgyMSw4IEBAIF9MVF9FT0YKLSAKLSAgICAgKikKLSAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0tCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0tCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSsJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgIGVsc2UKLSAJbGRfc2hsaWJzPW5vCi0gICAgICAgZmkKLUBAIC04NDM4LDcgKzg5NTIsMTMgQEAgX0xUX0VPRgotIAlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJwotICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCi0gICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCi0tICAgICAgICBpZiB0ZXN0IHgkZ2NjX25vX2xpbmsgPSB4eWVzOyB0aGVuCi0rICAgICAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCi0rICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKLStlbHNlCi0rICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGlmIHRlc3QgeCRnY2Nfbm9fbGluayA9IHh5ZXM7IHRoZW4KLSAgIGFzX2ZuX2Vycm9yICJMaW5rIHRlc3RzIGFyZSBub3QgYWxsb3dlZCBhZnRlciBHQ0NfTk9fRVhFQ1VUQUJMRVMuIiAiJExJTkVOTyIgNQotIGZpCi0gY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotQEAgLTg0NTQsMjIgKzg5NzQsMjkgQEAgbWFpbiAoKQotIF9BQ0VPRgotIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAKLS1sdF9haXhfbGlicGF0aF9zZWQ9JwotLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7Ci0tCS9eMC8gewotLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCi0tCSAgICBwCi0tCX0KLS0gICAgfScKLS1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLS0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi0taWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgotLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0tZmkKLSsgIGx0X2FpeF9saWJwYXRoX3NlZD0nCi0rICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotKwkgIC9eMC8gewotKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLwotKwkgICAgICBwCi0rCSAgfQotKyAgICAgIH0nCi0rICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0rICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi0rICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgotKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0rICBmaQotIGZpCi0gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0taWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0rICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgotKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCi0rICBmaQotKwotK2ZpCi0rCi0rICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCi0rZmkKLSAKLSAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0gICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgotQEAgLTg0ODEsNyArOTAwOCwxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLSAJZWxzZQotIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCi0gCSAjIGVtcHR5IGV4ZWN1dGFibGUuCi0tCSBpZiB0ZXN0IHgkZ2NjX25vX2xpbmsgPSB4eWVzOyB0aGVuCi0rCSBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCi0rICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKLStlbHNlCi0rICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotK2Vsc2UKLSsgIGlmIHRlc3QgeCRnY2Nfbm9fbGluayA9IHh5ZXM7IHRoZW4KLSAgIGFzX2ZuX2Vycm9yICJMaW5rIHRlc3RzIGFyZSBub3QgYWxsb3dlZCBhZnRlciBHQ0NfTk9fRVhFQ1VUQUJMRVMuIiAiJExJTkVOTyIgNQotIGZpCi0gY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotQEAgLTg0OTcsMjIgKzkwMzAsMjkgQEAgbWFpbiAoKQotIF9BQ0VPRgotIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAKLS1sdF9haXhfbGlicGF0aF9zZWQ9JwotLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7Ci0tCS9eMC8gewotLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCi0tCSAgICBwCi0tCX0KLS0gICAgfScKLS1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLS0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi0taWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgotLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0tZmkKLSsgIGx0X2FpeF9saWJwYXRoX3NlZD0nCi0rICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotKwkgIC9eMC8gewotKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLwotKwkgICAgICBwCi0rCSAgfQotKyAgICAgIH0nCi0rICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0rICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi0rICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgotKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0rICBmaQotIGZpCi0gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0taWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0rICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgotKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCi0rICBmaQotKwotK2ZpCi0rCi0rICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCi0rZmkKLSAKLSAJIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0gCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKLUBAIC04NTU3LDIwICs5MDk3LDYzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCi0gICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcwotICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0tICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKLS0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAotLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCi0tICAgICAgbGliZXh0PWxpYgotLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgotLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgotLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KLS0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JwotLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCi0tICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKLS0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgotLSAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKLS0gICAgICBmaXhfc3JjZmlsZV9wYXRoPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKLS0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcwotKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0rICAgICAgY2wqKQotKwkjIE5hdGl2ZSBNU1ZDCi0rCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCi0rCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCi0rCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKLSsJZmlsZV9saXN0X3NwZWM9J0AnCi0rCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCi0rCWxpYmV4dD1saWIKLSsJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0rCXNocmV4dF9jbWRzPSIuZGxsIgotKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCi0rCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCi0rCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0rCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOwotKwkgIGVsc2UKLSsJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7Ci0rCSAgZml+Ci0rCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgotKwkgIGxpbmtuYW1lcz0nCi0rCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KLSsJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCi0rCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCi0rCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSsJIyBEb24ndCB1c2UgcmFubGliCi0rCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKLSsJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgotKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+Ci0rCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgotKwkgICAgKi5leGV8Ki5FWEUpIDs7Ci0rCSAgICAqKQotKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCi0rCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCi0rCSAgICAgIDs7Ci0rCSAgZXNhY34KLSsJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgotKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKLSsJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOwotKwkgIGZpJwotKwk7OwotKyAgICAgICopCi0rCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgotKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJwotKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAotKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotKwlsaWJleHQ9bGliCi0rCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgotKwlzaHJleHRfY21kcz0iLmRsbCIKLSsJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JwotKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgotKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJwotKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgotKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCi0rCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCi0rCTs7Ci0rICAgICAgZXNhYwotICAgICAgIDs7Ci0gCi0gICAgIGRhcndpbiogfCByaGFwc29keSopCi1AQCAtODYzMSw3ICs5MjE0LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0gCi0gICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KLSAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0rICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwotICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi1AQCAtODYzOSw3ICs5MjIyLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0gCi0gICAgIGhwdXg5KikKLSAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotLQlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0rCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICAgZWxzZQotIAlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgIGZpCi1AQCAtODY1NSw3ICs5MjM4LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0gCi0gICAgIGhwdXgxMCopCi0gICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0tCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSsJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgICBlbHNlCi0gCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgICBmaQotQEAgLTg2NzksMTAgKzkyNjIsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0gCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAJICA7OwotIAlpYTY0KikKLS0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotIAkgIDs7Ci0gCSopCi0tCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gCSAgOzsKLSAJZXNhYwotICAgICAgIGVsc2UKLUBAIC04NzYxLDI2ICs5MzQ0LDM5IEBAIGZpCi0gCi0gICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLS0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSsJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90Ci0gCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKLSAJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KLS0gICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCi0tICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCi0tICAgICAgICBpZiB0ZXN0IHgkZ2NjX25vX2xpbmsgPSB4eWVzOyB0aGVuCi0rCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCi0rCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbCIgPiY1Ci0rJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbC4uLiAiID4mNjsgfQotK2lmIHRlc3QgIiR7bHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotKwkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCi0rCSAgIGlmIHRlc3QgeCRnY2Nfbm9fbGluayA9IHh5ZXM7IHRoZW4KLSAgIGFzX2ZuX2Vycm9yICJMaW5rIHRlc3RzIGFyZSBub3QgYWxsb3dlZCBhZnRlciBHQ0NfTk9fRVhFQ1VUQUJMRVMuIiAiJExJTkVOTyIgNQotIGZpCi0gY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS1pbnQgZm9vKHZvaWQpIHt9Ci0raW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQotIF9BQ0VPRgotIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLS0gIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLS0KLSsgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllcwotK2Vsc2UKLSsgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCi0gZmkKLSBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLS0gICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCi0rICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotK2ZpCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1Ci0rJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9Ci0rCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KLSsgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSsJZmkKLSAgICAgICBlbHNlCi0gCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotQEAgLTg4NjUsNyArOTQ2MSw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKLSAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0tCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgICBlbHNlCi0gCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotQEAgLTg4ODQsOSArOTQ4MCw5IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKLSAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotIAl3bGFyYz0nJHt3bH0nCi0tCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0rCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0tCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKLSsJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKLSAgICAgICBlbHNlCi0gCWNhc2UgYCRDQyAtViAyPiYxYCBpbgotIAkqIkNvbXBpbGVycyA1LjAiKikKLUBAIC05NDYyLDggKzEwMDU4LDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAgbmVlZF92ZXJzaW9uPW5vCi0gICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAKLS0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgotLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKLSsgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KLSsgIHllcywqKQotKyAgICAjIGdjYwotICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJwotICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCi0gICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgotQEAgLTk0OTYsMTMgKzEwMDkzLDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICAgOzsKLSAgICAgZXNhYwotKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwotKyAgICA7OwotKwotKyAgKixjbCopCi0rICAgICMgTmF0aXZlIE1TVkMKLSsgICAgbGlibmFtZV9zcGVjPSckbmFtZScKLSsgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKLSsKLSsgICAgY2FzZSAkYnVpbGRfb3MgaW4KLSsgICAgbWluZ3cqKQotKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KLSsgICAgICBsdF9zYXZlX2lmcz0kSUZTCi0rICAgICAgSUZTPSc7JwotKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKLSsgICAgICBkbwotKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcwotKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KLSsgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAotKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgotKyAgICAgIGRvbmUKLSsgICAgICBJRlM9JGx0X3NhdmVfaWZzCi0rICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCi0rICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCi0rICAgICAgOzsKLSsgICAgY3lnd2luKikKLSsgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCi0rICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCi0rICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgotKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKLSsgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKLSsgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotKyAgICAgIDs7Ci0rICAgICopCi0rICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgotKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgotKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KLSsgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCi0rICAgICAgZWxzZQotKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotKyAgICAgIGZpCi0rICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCi0rICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQotKyAgICAgIDs7Ci0rICAgIGVzYWMKLSsKLSsgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KLSsgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgotKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KLSsgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KLSsgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCi0rICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0rICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KLSsgICAgICAgJFJNIFwkZGxwYXRoJwotKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0rICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKLSAgICAgOzsKLSAKLSAgICopCi0rICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgotICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKLSsgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKLSAgICAgOzsKLSAgIGVzYWMKLS0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KLSAgIHNobGlicGF0aF92YXI9UEFUSAotICAgOzsKLUBAIC05NTk0LDcgKzEwMjQ5LDcgQEAgaGFpa3UqKQotICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICi0gICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0tICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3QvYmVvcy9zeXN0ZW0vbGliJwotKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCi0gICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICA7OwotIAotQEAgLTEwNDUyLDEwICsxMTEwNywxMCBAQCBlbHNlCi0gLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAotICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KLSAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKLS12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOwotK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKLSAjZW5kaWYKLSAKLS12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KLStpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KLSBpbnQgbWFpbiAoKQotIHsKLSAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOwotQEAgLTEwNTU4LDEwICsxMTIxMywxMCBAQCBlbHNlCi0gLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAotICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KLSAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKLS12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOwotK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKLSAjZW5kaWYKLSAKLS12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KLStpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KLSBpbnQgbWFpbiAoKQotIHsKLSAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOwotQEAgLTExOTkyLDEzICsxMjY0NywyMCBAQCBleGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbHRfdW5zZXQ9J2AkRUNITyAiJGx0X3Vuc2V0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBsdF9TUDJOTD0nYCRFQ0hPICIkbHRfU1AyTkwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGx0X05MMlNQPSdgJEVDSE8gIiRsdF9OTDJTUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rbHRfY3ZfdG9faG9zdF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gcmVsb2FkX2ZsYWc9J2AkRUNITyAiJHJlbG9hZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSByZWxvYWRfY21kcz0nYCRFQ0hPICIkcmVsb2FkX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIE9CSkRVTVA9J2AkRUNITyAiJE9CSkRVTVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSdgJEVDSE8gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gZmlsZV9tYWdpY19jbWQ9J2AkRUNITyAiJGZpbGVfbWFnaWNfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLStmaWxlX21hZ2ljX2dsb2I9J2AkRUNITyAiJGZpbGVfbWFnaWNfZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0rd2FudF9ub2Nhc2VnbG9iPSdgJEVDSE8gIiR3YW50X25vY2FzZWdsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK0RMTFRPT0w9J2AkRUNITyAiJERMTFRPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSdgJEVDSE8gIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gQVI9J2AkRUNITyAiJEFSIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBBUl9GTEFHUz0nYCRFQ0hPICIkQVJfRkxBR1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK2FyY2hpdmVyX2xpc3Rfc3BlYz0nYCRFQ0hPICIkYXJjaGl2ZXJfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBTVFJJUD0nYCRFQ0hPICIkU1RSSVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIFJBTkxJQj0nYCRFQ0hPICIkUkFOTElCIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBvbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotQEAgLTEyMDEzLDE0ICsxMjY3NSwxNyBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZQotIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLStubV9maWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkbm1fZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK2x0X3N5c3Jvb3Q9J2AkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIG9iamRpcj0nYCRFQ0hPICIkb2JqZGlyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBNQUdJQ19DTUQ9J2AkRUNITyAiJE1BR0lDX0NNRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLS1sdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK2x0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbHRfY3ZfcHJvZ19jb21waWxlcl9jX289J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBuZWVkX2xvY2tzPSdgJEVDSE8gIiRuZWVkX2xvY2tzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLStNQU5JRkVTVF9UT09MPSdgJEVDSE8gIiRNQU5JRkVTVF9UT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBEU1lNVVRJTD0nYCRFQ0hPICIkRFNZTVVUSUwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIE5NRURJVD0nYCRFQ0hPICIkTk1FRElUIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBMSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUBAIC0xMjA1MywxMiArMTI3MTgsMTIgQEAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3EKLSBoYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gaW5oZXJpdF9ycGF0aD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gbGlua19hbGxfZGVwbGlicz0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0tZml4X3NyY2ZpbGVfcGF0aD0nYCRFQ0hPICIkZml4X3NyY2ZpbGVfcGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGV4cG9ydF9zeW1ib2xzX2NtZHM9J2AkRUNITyAiJGV4cG9ydF9zeW1ib2xzX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGV4Y2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBpbmNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gcHJlbGlua19jbWRzPSdgJEVDSE8gIiRwcmVsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotK3Bvc3RsaW5rX2NtZHM9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotIGZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0gdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9J2AkRUNITyAiJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLSBuZWVkX2xpYl9wcmVmaXg9J2AkRUNITyAiJG5lZWRfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1AQCAtMTIxMTMsOCArMTI3NzgsMTMgQEAgcmVsb2FkX2ZsYWcgXAotIE9CSkRVTVAgXAotIGRlcGxpYnNfY2hlY2tfbWV0aG9kIFwKLSBmaWxlX21hZ2ljX2NtZCBcCi0rZmlsZV9tYWdpY19nbG9iIFwKLSt3YW50X25vY2FzZWdsb2IgXAotK0RMTFRPT0wgXAotK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIFwKLSBBUiBcCi0gQVJfRkxBR1MgXAotK2FyY2hpdmVyX2xpc3Rfc3BlYyBcCi0gU1RSSVAgXAotIFJBTkxJQiBcCi0gQ0MgXAotQEAgLTEyMTI0LDEyICsxMjc5NCwxNCBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKLSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCi0gbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAotIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXAotK25tX2ZpbGVfbGlzdF9zcGVjIFwKLSBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCi0tbHRfcHJvZ19jb21waWxlcl93bCBcCi0gbHRfcHJvZ19jb21waWxlcl9waWMgXAotK2x0X3Byb2dfY29tcGlsZXJfd2wgXAotIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKLSBsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCi0gbmVlZF9sb2NrcyBcCi0rTUFOSUZFU1RfVE9PTCBcCi0gRFNZTVVUSUwgXAotIE5NRURJVCBcCi0gTElQTyBcCi1AQCAtMTIxNDUsNyArMTI4MTcsNiBAQCBub191bmRlZmluZWRfZmxhZyBcCi0gaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCi0gaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCBcCi0gaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCi0tZml4X3NyY2ZpbGVfcGF0aCBcCi0gZXhjbHVkZV9leHBzeW1zIFwKLSBpbmNsdWRlX2V4cHN5bXMgXAotIGZpbGVfbGlzdF9zcGVjIFwKLUBAIC0xMjE4MSw2ICsxMjg1Miw3IEBAIG1vZHVsZV9jbWRzIFwKLSBtb2R1bGVfZXhwc3ltX2NtZHMgXAotIGV4cG9ydF9zeW1ib2xzX2NtZHMgXAotIHByZWxpbmtfY21kcyBcCi0rcG9zdGxpbmtfY21kcyBcCi0gcG9zdGluc3RhbGxfY21kcyBcCi0gcG9zdHVuaW5zdGFsbF9jbWRzIFwKLSBmaW5pc2hfY21kcyBcCi1AQCAtMTI3NzAsNyArMTM0NDIsOCBAQCAkYXNfZWNobyBYIiRmaWxlIiB8Ci0gIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCi0gIwotICMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCi0tIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSsjICAgICAgICAgICAgICAgICBJbmMuCi0gIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKLSAjCi0gIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgotQEAgLTEyODczLDE5ICsxMzU0Niw0MiBAQCBTUDJOTD0kbHRfbHRfU1AyTkwKLSAjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCi0gTkwyU1A9JGx0X2x0X05MMlNQCi0gCi0rIyBjb252ZXJ0IFwkYnVpbGQgZmlsZSBuYW1lcyB0byBcJGhvc3QgZm9ybWF0LgotK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKLSsKLSsjIGNvbnZlcnQgXCRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0LgotK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKLSsKLSAjIEFuIG9iamVjdCBzeW1ib2wgZHVtcGVyLgotIE9CSkRVTVA9JGx0X09CSkRVTVAKLSAKLSAjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgotIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAotIAotLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSAiZmlsZV9tYWdpYyIuCi0rIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgotIGZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAotIAotKyMgSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCi0rZmlsZV9tYWdpY19nbG9iPSRsdF9maWxlX21hZ2ljX2dsb2IKLSsKLSsjIEZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KLSt3YW50X25vY2FzZWdsb2I9JGx0X3dhbnRfbm9jYXNlZ2xvYgotKwotKyMgRExMIGNyZWF0aW9uIHByb2dyYW0uCi0rRExMVE9PTD0kbHRfRExMVE9PTAotKwotKyMgQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllcy4KLStzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKLSsKLSAjIFRoZSBhcmNoaXZlci4KLSBBUj0kbHRfQVIKLSsKLSsjIEZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlLgotIEFSX0ZMQUdTPSRsdF9BUl9GTEFHUwotIAotKyMgSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyLgotK2FyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfYXJjaGl2ZXJfbGlzdF9zcGVjCi0rCi0gIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KLSBTVFJJUD0kbHRfU1RSSVAKLSAKLUBAIC0xMjkxNSw2ICsxMzYxMSwxMiBAQCBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcwotICMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCi0gZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4Ci0gCi0rIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCi0rbm1fZmlsZV9saXN0X3NwZWM9JGx0X25tX2ZpbGVfbGlzdF9zcGVjCi0rCi0rIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KLStsdF9zeXNyb290PSRsdF9zeXNyb290Ci0rCi0gIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCi0gb2JqZGlyPSRvYmpkaXIKLSAKLUBAIC0xMjkyNCw2ICsxMzYyNiw5IEBAIE1BR0lDX0NNRD0kTUFHSUNfQ01ECi0gIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KLSBuZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCi0gCi0rIyBNYW5pZmVzdCB0b29sLgotK01BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKLSsKLSAjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCi0gRFNZTVVUSUw9JGx0X0RTWU1VVElMCi0gCi1AQCAtMTMwMzgsMTIgKzEzNzQzLDEyIEBAIHdpdGhfZ2NjPSRHQ0MKLSAjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCi0gbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZwotIAotLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KLS13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAotLQotICMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgotIHBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYwotIAotKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KLSt3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAotKwotICMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KLSBsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYwotIAotQEAgLTEzMTMwLDkgKzEzODM1LDYgQEAgaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAotICMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgotIGxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKLSAKLS0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCi0tZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAotLQotICMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgotIGFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCi0gCi1AQCAtMTMxNDgsNiArMTM4NTAsOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcwotICMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCi0gcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHMKLSAKLSsjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCi0rcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kcwotKwotICMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgotIGZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYwotIAotQEAgLTEzMTgwLDIxMCArMTM4ODUsMTY5IEBAIGx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgotICAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgotICAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KLSAgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/Ci0tICBzZWQgJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAotLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQotLQotLSAgY2FzZSAkeHNpX3NoZWxsIGluCi0tICB5ZXMpCi0tICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCi0tCi0tIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50Ci0tIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAotLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgotLWZ1bmNfZGlybmFtZSAoKQotLXsKLS0gIGNhc2UgJHsxfSBpbgotLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OwotLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7Ci0tICBlc2FjCi0tfQotLQotLSMgZnVuY19iYXNlbmFtZSBmaWxlCi0tZnVuY19iYXNlbmFtZSAoKQotLXsKLS0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKLS19Ci0tCi0tIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAotLSMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KLS0jIGNhbGw6Ci0tIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKLS0jICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKLS0jICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KLS0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKLS0jICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KLS0jICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLS0jIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKLS0jIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCi0tIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCi0tZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQotLXsKLS0gIGNhc2UgJHsxfSBpbgotLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OwotLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7Ci0tICBlc2FjCi0tICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCi0tfQotLQotLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCi0tIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KLS0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAotLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZwotLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KLS1mdW5jX3N0cmlwbmFtZSAoKQotLXsKLS0gICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKLS0gICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KLS0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9Ci0tICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQotLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In0KLS19Ci0tCi0tIyBmdW5jX29wdF9zcGxpdAotLWZ1bmNfb3B0X3NwbGl0ICgpCi0tewotLSAgZnVuY19vcHRfc3BsaXRfb3B0PSR7MSUlPSp9Ci0tICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQotLX0KLS0KLS0jIGZ1bmNfbG8ybyBvYmplY3QKLS1mdW5jX2xvMm8gKCkKLS17Ci0tICBjYXNlICR7MX0gaW4KLS0gICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKLS0gICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7Ci0tICBlc2FjCi0tfQotLQotLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCi0tZnVuY194Zm9ybSAoKQotLXsKLS0gIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KLS19Ci0tCi0tIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgotLWZ1bmNfYXJpdGggKCkKLS17Ci0tICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKLS19Ci0tCi0tIyBmdW5jX2xlbiBzdHJpbmcKLS0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCi0tZnVuY19sZW4gKCkKLS17Ci0tICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KLS19Ci0tCi0tX0xUX0VPRgotLSAgICA7OwotLSAgKikgIyBCb3VybmUgY29tcGF0aWJsZSBmdW5jdGlvbnMuCi0tICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCi0tCi0tIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50Ci0tIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAotLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgotLWZ1bmNfZGlybmFtZSAoKQotLXsKLS0gICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCi0tICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCi0tICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgotLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgotLSAgZWxzZQotLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCi0tICBmaQotLX0KLS0KLS0jIGZ1bmNfYmFzZW5hbWUgZmlsZQotLWZ1bmNfYmFzZW5hbWUgKCkKLS17Ci0tICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKLS19Ci0tCi0tCi0tIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKLS0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgotLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCi0tIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCi0tIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgotLSMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKLS1mdW5jX3N0cmlwbmFtZSAoKQotLXsKLS0gIGNhc2UgJHsyfSBpbgotLSAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OwotLSAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7Ci0tICBlc2FjCi0tfQotLQotLSMgc2VkIHNjcmlwdHM6Ci0tbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW149XSpcKT0uKi9cMS87cScKLS1teV9zZWRfbG9uZ19hcmc9JzFzL14tW149XSo9Ly8nCi0tCi0tIyBmdW5jX29wdF9zcGxpdAotLWZ1bmNfb3B0X3NwbGl0ICgpCi0tewotLSAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKLS0gIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCi0tfQotLQotLSMgZnVuY19sbzJvIG9iamVjdAotLWZ1bmNfbG8ybyAoKQotLXsKLS0gIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKLS19Ci0tCi0tIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKLS1mdW5jX3hmb3JtICgpCi0tewotLSAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCi0tfQotLQotLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KLS1mdW5jX2FyaXRoICgpCi0tewotLSAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKLS19Ci0tCi0tIyBmdW5jX2xlbiBzdHJpbmcKLS0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCi0tZnVuY19sZW4gKCkKLS17Ci0tICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiQxIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCi0tfQotLQotLV9MVF9FT0YKLS1lc2FjCi0tCi0tY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCi0tICB5ZXMpCi0tICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCi0tCi0tIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKLS0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KLS1mdW5jX2FwcGVuZCAoKQotLXsKLS0gIGV2YWwgIiQxKz1cJDIiCi0tfQotLV9MVF9FT0YKLS0gICAgOzsKLS0gICopCi0tICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCi0tCi0tIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKLS0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KLS1mdW5jX2FwcGVuZCAoKQotLXsKLS0gIGV2YWwgIiQxPVwkJDFcJDIiCi0tfQotLQotLV9MVF9FT0YKLS0gICAgOzsKLS0gIGVzYWMKLS0KLS0KLS0gIHNlZCAtbiAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS8sJHAnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKLS0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKLS0KLS0gIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKLSsgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKLSsgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCi0rCi0rICBpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCi0rICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lIC9jXAotK2Z1bmNfZGlybmFtZSAoKVwKLSt7XAotK1wgICAgY2FzZSAkezF9IGluXAotK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKLStcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKLStcICAgIGVzYWNcCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Jhc2VuYW1lIC9jXAotK2Z1bmNfYmFzZW5hbWUgKClcCi0re1wKLStcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAvY1wKLStmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpXAotK3tcCi0rXCAgICBjYXNlICR7MX0gaW5cCi0rXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAotK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAotK1wgICAgZXNhY1wKLStcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgIHNlZCAtZSAnL15mdW5jX3N0cmlwbmFtZSAoKSQvLC9efSAjIGZ1bmNfc3RyaXBuYW1lIC9jXAotK2Z1bmNfc3RyaXBuYW1lICgpXAotK3tcCi0rXCAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlXAotK1wgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LlwKLStcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9XAotK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In1cCi0rXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifVwKLSt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zdHJpcG5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0rICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLSsKLSsKLSsgIHNlZCAtZSAnL15mdW5jX3NwbGl0X2xvbmdfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9sb25nX29wdCAvY1wKLStmdW5jX3NwbGl0X2xvbmdfb3B0ICgpXAotK3tcCi0rXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn1cCi0rXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz0kezEjKj19XAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X2xvbmdfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rCi0rCi0rICBzZWQgLWUgJy9eZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCAvY1wKLStmdW5jX3NwbGl0X3Nob3J0X29wdCAoKVwKLSt7XAotK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P31cCi0rXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X3Nob3J0X29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfbG8ybyAoKSQvLC9efSAjIGZ1bmNfbG8ybyAvY1wKLStmdW5jX2xvMm8gKClcCi0re1wKLStcICAgIGNhc2UgJHsxfSBpblwKLStcICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOztcCi0rXCAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7O1wKLStcICAgIGVzYWNcCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbG8ybyBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfeGZvcm0gKCkkLywvXn0gIyBmdW5jX3hmb3JtIC9jXAotK2Z1bmNfeGZvcm0gKClcCi0re1wKLSsgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb1wKLSt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY194Zm9ybSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfYXJpdGggKCkkLywvXn0gIyBmdW5jX2FyaXRoIC9jXAotK2Z1bmNfYXJpdGggKClcCi0re1wKLSsgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpXAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FyaXRoIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rCi0rCi0rICBzZWQgLWUgJy9eZnVuY19sZW4gKCkkLywvXn0gIyBmdW5jX2xlbiAvY1wKLStmdW5jX2xlbiAoKVwKLSt7XAotKyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1cCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbGVuIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSsgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0rCi0rZmkKLSsKLStpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCi0rICBzZWQgLWUgJy9eZnVuY19hcHBlbmQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZCAvY1wKLStmdW5jX2FwcGVuZCAoKVwKLSt7XAotKyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXAotK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kX3F1b3RlZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCAvY1wKLStmdW5jX2FwcGVuZF9xdW90ZWQgKClcCi0re1wKLStcICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iXAotK1wgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJcCi0rfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kX3F1b3RlZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0rICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotKwotKwotKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JwotKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCi0rICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0rICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotK2Vsc2UKLSsgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCi0rICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAotKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSsgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLStmaQotKwotK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCi0rICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mNQotKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mMjt9Ci0rZmkKLSsKLSsKLSsgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8Ci0gICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCi0gICBjaG1vZCAreCAiJG9maWxlIgotIAotLS0gCi0yLjEyLjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA4LUFkZC10aGUtYXJtdjVlLWFyY2hpdGVjdHVyZS10by1iaW51dGlscy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwOC1BZGQtdGhlLWFybXY1ZS1hcmNoaXRlY3R1cmUtdG8tYmludXRpbHMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0OTIyNWEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA4LUFkZC10aGUtYXJtdjVlLWFyY2hpdGVjdHVyZS10by1iaW51dGlscy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLUZyb20gOWMzMTNlOGExNWE3ZTdjNWMwZjI5MDZlMzIxOGVkMjExNTYzYWMyYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6Mzc6MTAgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAwOC8xNV0gQWRkIHRoZSBhcm12NWUgYXJjaGl0ZWN0dXJlIHRvIGJpbnV0aWxzCi0KLUJpbnV0aWxzIGhhcyBhIGNvbW1lbnQgdGhhdCBpbmRpY2F0ZXMgaXQgaXMgc3VwcG9zZWQgdG8gbWF0Y2ggZ2NjIGZvcgotYWxsIG9mIHRoZSBzdXBwb3J0ICItbWFyY2g9IiBzZXR0aW5ncywgYnV0IGl0IHdhcyBsYWNraW5nIHRoZSBhcm12NWUgc2V0dGluZy4KLVRoaXMgd2FzIGEgc2ltcGxlIHdheSB0byBhZGQgaXQsIGFzIHRodW1iIGluc3RydWN0aW9ucyBzaG91bGRuJ3QgYmUgZ2VuZXJhdGVkCi1ieSB0aGUgY29tcGlsZXIgYW55d2F5LgotCi1VcHN0cmVhbS1TdGF0dXM6IERlbmllZAotVXBzdHJlYW0gbWFpbnRhaW5lciBpbmRpY2F0ZWQgdGhhdCB3ZSBzaG91bGQgbm90IGJlIHVzaW5nIGFybXY1ZSwgZXZlbgotdGhvdWdoIGl0IGlzIGEgbGVnYWwgYXJjaGljdHVyZSBkZWZpbmVkIGJ5IG91ciBnY2MuCi0KLVNpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBnYXMvY29uZmlnL3RjLWFybS5jIHwgMSArCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCi0KLWRpZmYgLS1naXQgYS9nYXMvY29uZmlnL3RjLWFybS5jIGIvZ2FzL2NvbmZpZy90Yy1hcm0uYwotaW5kZXggNjBiZGE1MTA3MC4uZWI2ZDBhZmQ2ZSAxMDA2NDQKLS0tLSBhL2dhcy9jb25maWcvdGMtYXJtLmMKLSsrKyBiL2dhcy9jb25maWcvdGMtYXJtLmMKLUBAIC0yNTYzMyw2ICsyNTYzMyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtX2FyY2hfb3B0aW9uX3RhYmxlIGFybV9hcmNoc1tdID0KLSAgIEFSTV9BUkNIX09QVCAoImFybXY0dCIsCUFSTV9BUkNIX1Y0VCwJIEZQVV9BUkNIX0ZQQSksCi0gICBBUk1fQVJDSF9PUFQgKCJhcm12NHR4bSIsCUFSTV9BUkNIX1Y0VHhNLAkgRlBVX0FSQ0hfRlBBKSwKLSAgIEFSTV9BUkNIX09QVCAoImFybXY1IiwJQVJNX0FSQ0hfVjUsCSBGUFVfQVJDSF9WRlApLAotKyAgQVJNX0FSQ0hfT1BUICgiYXJtdjVlIiwJQVJNX0FSQ0hfVjVURSwJIEZQVV9BUkNIX1ZGUCksCi0gICBBUk1fQVJDSF9PUFQgKCJhcm12NXQiLAlBUk1fQVJDSF9WNVQsCSBGUFVfQVJDSF9WRlApLAotICAgQVJNX0FSQ0hfT1BUICgiYXJtdjV0eG0iLAlBUk1fQVJDSF9WNVR4TSwJIEZQVV9BUkNIX1ZGUCksCi0gICBBUk1fQVJDSF9PUFQgKCJhcm12NXRlIiwJQVJNX0FSQ0hfVjVURSwJIEZQVV9BUkNIX1ZGUCksCi0tLSAKLTIuMTIuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDgtZG9uLXQtbGV0LXRoZS1kaXN0cm8tY29tcGlsZXItcG9pbnQtdG8tdGhlLXdyb25nLWlucy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwOC1kb24tdC1sZXQtdGhlLWRpc3Ryby1jb21waWxlci1wb2ludC10by10aGUtd3JvbmctaW5zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYTIyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDgtZG9uLXQtbGV0LXRoZS1kaXN0cm8tY29tcGlsZXItcG9pbnQtdG8tdGhlLXdyb25nLWlucy5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDMzMTQ0M2E4N2EzMWVjNTA0ZTU2NTJmYzA5OWQ5MTI5YTlhNGRlYjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjM5OjAxICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDgvMTVdIGRvbid0IGxldCB0aGUgZGlzdHJvIGNvbXBpbGVyIHBvaW50IHRvIHRoZSB3cm9uZworIGluc3RhbGxhdGlvbiBsb2NhdGlvbgorCitUaGFua3MgdG8gUlAgZm9yIGhlbHBpbmcgZmluZCB0aGUgc291cmNlIGNvZGUgY2F1c2luZyB0aGUgaXNzdWUuCisKKzIwMTAvMDgvMTMKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWJpYmVydHkvTWFrZWZpbGUuaW4gfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYmliZXJ0eS9NYWtlZmlsZS5pbiBiL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgoraW5kZXggMjVjZmEyOWFkNS4uY2U2N2E3MTBlMyAxMDA2NDQKKy0tLSBhL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgorKysrIGIvbGliaWJlcnR5L01ha2VmaWxlLmluCitAQCAtMzY0LDcgKzM2NCw4IEBAIGluc3RhbGwtc3RyaXA6IGluc3RhbGwKKyAjIG11bHRpbGliLXNwZWNpZmljIGZsYWdzLCBpdCdzIG92ZXJyaWRkZW4gYnkgRkxBR1NfVE9fUEFTUyBmcm9tIHRoZQorICMgZGVmYXVsdCBtdWx0aWxpYiwgc28gd2UgaGF2ZSB0byB0YWtlIENGTEFHUyBpbnRvIGFjY291bnQgYXMgd2VsbCwKKyAjIHNpbmNlIGl0IHdpbGwgYmUgcGFzc2VkIHRoZSBtdWx0aWxpYiBmbGFncy4KKy1NVUxUSU9TRElSID0gYCQoQ0MpICQoQ0ZMQUdTKSAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5YAorKyNNVUxUSU9TRElSID0gYCQoQ0MpICQoQ0ZMQUdTKSAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5YAorK01VTFRJT1NESVIgPSAiIgorIGluc3RhbGxfdG9fbGliZGlyOiBhbGwKKyAJaWYgdGVzdCAtbiAiJHt0YXJnZXRfaGVhZGVyX2Rpcn0iOyB0aGVuIFwKKyAJCSR7bWtpbnN0YWxsZGlyc30gJChERVNURElSKSQobGliZGlyKS8kKE1VTFRJT1NESVIpOyBcCistLSAKKzIuMTQuMAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDktZG9uLXQtbGV0LXRoZS1kaXN0cm8tY29tcGlsZXItcG9pbnQtdG8tdGhlLXdyb25nLWlucy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwOS1kb24tdC1sZXQtdGhlLWRpc3Ryby1jb21waWxlci1wb2ludC10by10aGUtd3JvbmctaW5zLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzQwNTkzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwOS1kb24tdC1sZXQtdGhlLWRpc3Ryby1jb21waWxlci1wb2ludC10by10aGUtd3JvbmctaW5zLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotRnJvbSAyYmU5YjQ0YTRhMzA4ZTNlYTQyYTAyN2M0YzMyMTExNzBmMTBjOWMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTozOTowMSArMDAwMAotU3ViamVjdDogW1BBVENIIDA5LzE1XSBkb24ndCBsZXQgdGhlIGRpc3RybyBjb21waWxlciBwb2ludCB0byB0aGUgd3JvbmcKLSBpbnN0YWxsYXRpb24gbG9jYXRpb24KLQotVGhhbmtzIHRvIFJQIGZvciBoZWxwaW5nIGZpbmQgdGhlIHNvdXJjZSBjb2RlIGNhdXNpbmcgdGhlIGlzc3VlLgotCi0yMDEwLzA4LzEzCi1OaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi0gbGliaWJlcnR5L01ha2VmaWxlLmluIHwgMyArKy0KLSAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9saWJpYmVydHkvTWFrZWZpbGUuaW4gYi9saWJpYmVydHkvTWFrZWZpbGUuaW4KLWluZGV4IDBmZjllNDVlNDUuLjQyYzMyNjQyYjIgMTAwNjQ0Ci0tLS0gYS9saWJpYmVydHkvTWFrZWZpbGUuaW4KLSsrKyBiL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgotQEAgLTM2Niw3ICszNjYsOCBAQCBpbnN0YWxsLXN0cmlwOiBpbnN0YWxsCi0gIyBtdWx0aWxpYi1zcGVjaWZpYyBmbGFncywgaXQncyBvdmVycmlkZGVuIGJ5IEZMQUdTX1RPX1BBU1MgZnJvbSB0aGUKLSAjIGRlZmF1bHQgbXVsdGlsaWIsIHNvIHdlIGhhdmUgdG8gdGFrZSBDRkxBR1MgaW50byBhY2NvdW50IGFzIHdlbGwsCi0gIyBzaW5jZSBpdCB3aWxsIGJlIHBhc3NlZCB0aGUgbXVsdGlsaWIgZmxhZ3MuCi0tTVVMVElPU0RJUiA9IGAkKENDKSAkKENGTEFHUykgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeWAKLSsjTVVMVElPU0RJUiA9IGAkKENDKSAkKENGTEFHUykgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeWAKLStNVUxUSU9TRElSID0gIiIKLSBpbnN0YWxsX3RvX2xpYmRpcjogYWxsCi0gCWlmIHRlc3QgLW4gIiR7dGFyZ2V0X2hlYWRlcl9kaXJ9IjsgdGhlbiBcCi0gCQkke21raW5zdGFsbGRpcnN9ICQoREVTVERJUikkKGxpYmRpcikvJChNVUxUSU9TRElSKTsgXAotLS0gCi0yLjEyLjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA5LXdhcm4tZm9yLXVzZXMtb2Ytc3lzdGVtLWRpcmVjdG9yaWVzLXdoZW4tY3Jvc3MtbGlua2kucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDktd2Fybi1mb3ItdXNlcy1vZi1zeXN0ZW0tZGlyZWN0b3JpZXMtd2hlbi1jcm9zcy1saW5raS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGUyNTc4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA5LXdhcm4tZm9yLXVzZXMtb2Ytc3lzdGVtLWRpcmVjdG9yaWVzLXdoZW4tY3Jvc3MtbGlua2kucGF0Y2gKQEAgLTAsMCArMSwyNzMgQEAKK0Zyb20gMGE0YWZkY2YwNzAwZWZkNDU5NjM1NjhlMmQwMDQ5MTI3Y2RmNDQzNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDE1IEphbiAyMDE2IDA2OjMxOjA5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDkvMTVdIHdhcm4gZm9yIHVzZXMgb2Ygc3lzdGVtIGRpcmVjdG9yaWVzIHdoZW4gY3Jvc3MgbGlua2luZworCisyMDA4LTA3LTAyICBKb3NlcGggTXllcnMgIDxqb3NlcGhAY29kZXNvdXJjZXJ5LmNvbT4KKworICAgIGxkLworICAgICogbGQuaCAoYXJnc190eXBlKTogQWRkIGVycm9yX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMuCisgICAgKiBsZC50ZXhpbmZvICgtLWVycm9yLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMpOiBEb2N1bWVudC4KKyAgICAqIGxkZmlsZS5jIChsZGZpbGVfYWRkX2xpYnJhcnlfcGF0aCk6IENoZWNrCisgICAgY29tbWFuZF9saW5lLmVycm9yX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMuCisgICAgKiBsZG1haW4uYyAobWFpbik6IEluaXRpYWxpemUKKyAgICBjb21tYW5kX2xpbmUuZXJyb3JfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcy4KKyAgICAqIGxleHN1cC5jIChlbnVtIG9wdGlvbl92YWx1ZXMpOiBBZGQKKyAgICBPUFRJT05fRVJST1JfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUy4KKyAgICAobGRfb3B0aW9ucyk6IEFkZCAtLWVycm9yLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMuCisgICAgKHBhcnNlX2FyZ3MpOiBIYW5kbGUgbmV3IG9wdGlvbi4KKworMjAwNy0wNi0xMyAgSm9zZXBoIE15ZXJzICA8am9zZXBoQGNvZGVzb3VyY2VyeS5jb20+CisKKyAgICBsZC8KKyAgICAqIGNvbmZpZy5pbjogUmVnZW5lcmF0ZS4KKyAgICAqIGxkLmggKGFyZ3NfdHlwZSk6IEFkZCBwb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLgorICAgICogbGQudGV4aW5mbyAoLS1uby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzKTogRG9jdW1lbnQuCisgICAgKiBsZGZpbGUuYyAobGRmaWxlX2FkZF9saWJyYXJ5X3BhdGgpOiBDaGVjaworICAgIGNvbW1hbmRfbGluZS5wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLgorICAgICogbGRtYWluLmMgKG1haW4pOiBJbml0aWFsaXplCisgICAgY29tbWFuZF9saW5lLnBvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMuCisgICAgKiBsZXhzdXAuYyAoZW51bSBvcHRpb25fdmFsdWVzKTogQWRkCisgICAgT1BUSU9OX05PX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMuCisgICAgKGxkX29wdGlvbnMpOiBBZGQgLS1uby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLgorICAgIChwYXJzZV9hcmdzKTogSGFuZGxlIG5ldyBvcHRpb24uCisKKzIwMDctMDQtMjAgIEpvc2VwaCBNeWVycyAgPGpvc2VwaEBjb2Rlc291cmNlcnkuY29tPgorCisgICAgTWVyZ2UgZnJvbSBTb3VyY2VyeSBHKysgYmludXRpbHMgMi4xNzoKKworICAgIDIwMDctMDMtMjAgIEpvc2VwaCBNeWVycyAgPGpvc2VwaEBjb2Rlc291cmNlcnkuY29tPgorICAgIEJhc2VkIG9uIHBhdGNoIGJ5IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4uCisgICAgbGQvCisgICAgKiBjb25maWd1cmUuaW4gKC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMpOiBOZXcgb3B0aW9uLgorICAgICogY29uZmlndXJlLCBjb25maWcuaW46IFJlZ2VuZXJhdGUuCisgICAgKiBsZGZpbGUuYyAobGRmaWxlX2FkZF9saWJyYXJ5X3BhdGgpOiBJZgorICAgIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTIGRlZmluZWQsIHdhcm4gZm9yIHVzZSBvZiAvbGliLAorICAgIC91c3IvbGliLCAvdXNyL2xvY2FsL2xpYiBvciAvdXNyL1gxMVI2L2xpYi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxkL2NvbmZpZy5pbiAgICB8ICAzICsrKworIGxkL2NvbmZpZ3VyZSAgICB8IDE2ICsrKysrKysrKysrKysrKysKKyBsZC9jb25maWd1cmUuYWMgfCAxMCArKysrKysrKysrCisgbGQvbGQuaCAgICAgICAgIHwgIDggKysrKysrKysKKyBsZC9sZC50ZXhpbmZvICAgfCAxMiArKysrKysrKysrKysKKyBsZC9sZGZpbGUuYyAgICAgfCAxNyArKysrKysrKysrKysrKysrKworIGxkL2xkbGV4LmggICAgICB8ICAyICsrCisgbGQvbGRtYWluLmMgICAgIHwgIDIgKysKKyBsZC9sZXhzdXAuYyAgICAgfCAxNiArKysrKysrKysrKysrKysrCisgOSBmaWxlcyBjaGFuZ2VkLCA4NiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9sZC9jb25maWcuaW4gYi9sZC9jb25maWcuaW4KK2luZGV4IGE4NDY3NDNkYTYuLmRmM2NkNWZiNjAgMTAwNjQ0CistLS0gYS9sZC9jb25maWcuaW4KKysrKyBiL2xkL2NvbmZpZy5pbgorQEAgLTI3LDYgKzI3LDkgQEAKKyAgICBsYW5ndWFnZSBpcyByZXF1ZXN0ZWQuICovCisgI3VuZGVmIEVOQUJMRV9OTFMKKyAKKysvKiBEZWZpbmUgdG8gd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gbGlicmFyeSBkaXJlY3RvcmllcyAqLworKyN1bmRlZiBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUworKworIC8qIEFkZGl0aW9uYWwgZXh0ZW5zaW9uIGEgc2hhcmVkIG9iamVjdCBtaWdodCBoYXZlLiAqLworICN1bmRlZiBFWFRSQV9TSExJQl9FWFRFTlNJT04KKyAKK2RpZmYgLS1naXQgYS9sZC9jb25maWd1cmUgYi9sZC9jb25maWd1cmUKK2luZGV4IDRlNzE1MTFiZDEuLjcxYzZhZDFmZDEgMTAwNzU1CistLS0gYS9sZC9jb25maWd1cmUKKysrKyBiL2xkL2NvbmZpZ3VyZQorQEAgLTc4OSw2ICs3ODksNyBAQCB3aXRoX2xpYl9wYXRoCisgZW5hYmxlX3RhcmdldHMKKyBlbmFibGVfNjRfYml0X2JmZAorIHdpdGhfc3lzcm9vdAorK2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzCisgZW5hYmxlX2dvbGQKKyBlbmFibGVfZ290CisgZW5hYmxlX2NvbXByZXNzZWRfZGVidWdfc2VjdGlvbnMKK0BAIC0xNDQ4LDYgKzE0NDksOCBAQCBPcHRpb25hbCBGZWF0dXJlczoKKyAgIC0tZGlzYWJsZS1sYXJnZWZpbGUgICAgIG9taXQgc3VwcG9ydCBmb3IgbGFyZ2UgZmlsZXMKKyAgIC0tZW5hYmxlLXRhcmdldHMgICAgICAgIGFsdGVybmF0aXZlIHRhcmdldCBjb25maWd1cmF0aW9ucworICAgLS1lbmFibGUtNjQtYml0LWJmZCAgICAgNjQtYml0IHN1cHBvcnQgKG9uIGhvc3RzIHdpdGggbmFycm93ZXIgd29yZCBzaXplcykKKysgIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGxpYnJhcnkgZGlyZWN0b3JpZXMKKyAgIC0tZW5hYmxlLWdvbGRbPUFSR10gICAgIGJ1aWxkIGdvbGQgW0FSRz17ZGVmYXVsdCx5ZXMsbm99XQorICAgLS1lbmFibGUtZ290PTx0eXBlPiAgICAgR09UIGhhbmRsaW5nIHNjaGVtZSAodGFyZ2V0LCBzaW5nbGUsIG5lZ2F0aXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlnb3QpCitAQCAtMTYzMTUsNiArMTYzMTgsMTkgQEAgZmkKKyAKKyAKKyAKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcytzZXR9IiA9IHNldDsgdGhlbiA6CisrICBlbmFibGV2YWw9JGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzOworK2Vsc2UKKysgIGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vCisrZmkKKysKKytpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCisrCisrJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMgMSIgPj5jb25mZGVmcy5oCisrCisrZmkKKysKKyAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ29sZCB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfZ29sZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICBlbmFibGV2YWw9JGVuYWJsZV9nb2xkOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCitkaWZmIC0tZ2l0IGEvbGQvY29uZmlndXJlLmFjIGIvbGQvY29uZmlndXJlLmFjCitpbmRleCAwMDA4MGY4NWZkLi4zYWE5OGUzN2ZiIDEwMDY0NAorLS0tIGEvbGQvY29uZmlndXJlLmFjCisrKysgYi9sZC9jb25maWd1cmUuYWMKK0BAIC05NSw2ICs5NSwxNiBAQCBBQ19TVUJTVCh1c2Vfc3lzcm9vdCkKKyBBQ19TVUJTVChUQVJHRVRfU1lTVEVNX1JPT1QpCisgQUNfU1VCU1QoVEFSR0VUX1NZU1RFTV9ST09UX0RFRklORSkKKyAKKytBQ19BUkdfRU5BQkxFKFtwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXSwKKysgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc10sCisrICAgICAgICAgICAgICAgIFt3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBsaWJyYXJ5IGRpcmVjdG9yaWVzXSksLAorKyAgICAgICAgIFtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcz1ub10pCisraWYgdGVzdCAieCR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXN9IiA9ICJ4eWVzIjsgdGhlbgorKyAgQUNfREVGSU5FKFtFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFU10sCisrICAgICAgIFsxXSwKKysgICAgICAgW0RlZmluZSB0byB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBsaWJyYXJ5IGRpcmVjdG9yaWVzXSkKKytmaQorKworIGRubCBVc2UgLS1lbmFibGUtZ29sZCB0byBkZWNpZGUgaWYgdGhpcyBsaW5rZXIgc2hvdWxkIGJlIHRoZSBkZWZhdWx0LgorIGRubCAiaW5zdGFsbF9hc19kZWZhdWx0IiBpcyBzZXQgdG8gZmFsc2UgaWYgZ29sZCBpcyB0aGUgZGVmYXVsdCBsaW5rZXIuCisgZG5sICJpbnN0YWxsZWRfbGlua2VyIiBpcyB0aGUgaW5zdGFsbGVkIEJGRCBsaW5rZXIgbmFtZS4KK2RpZmYgLS1naXQgYS9sZC9sZC5oIGIvbGQvbGQuaAoraW5kZXggYzZmYTEyNDdmMC4uMDFjMzczNDk4ZiAxMDA2NDQKKy0tLSBhL2xkL2xkLmgKKysrKyBiL2xkL2xkLmgKK0BAIC0xNzQsNiArMTc0LDE0IEBAIHR5cGVkZWYgc3RydWN0CisgICAgICBpbiB0aGUgbGlua2VyIHNjcmlwdC4gICovCisgICBiZmRfYm9vbGVhbiBmb3JjZV9ncm91cF9hbGxvY2F0aW9uOworIAorKyAgLyogSWYgVFJVRSAodGhlIGRlZmF1bHQpIHdhcm4gZm9yIHVzZXMgb2Ygc3lzdGVtIGRpcmVjdG9yaWVzIHdoZW4KKysgICAgIGNyb3NzIGxpbmtpbmcuICAqLworKyAgYmZkX2Jvb2xlYW4gcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllczsKKysKKysgIC8qIElmIFRSVUUgKGRlZmF1bHQgRkFMU0UpIGdpdmUgYW4gZXJyb3IgZm9yIHVzZXMgb2Ygc3lzdGVtCisrICAgICBkaXJlY3RvcmllcyB3aGVuIGNyb3NzIGxpbmtpbmcgaW5zdGVhZCBvZiBhIHdhcm5pbmcuICAqLworKyAgYmZkX2Jvb2xlYW4gZXJyb3JfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllczsKKysKKyAgIC8qIEJpZyBvciBsaXR0bGUgZW5kaWFuIGFzIHNldCBvbiBjb21tYW5kIGxpbmUuICAqLworICAgZW51bSBlbmRpYW5fZW51bSBlbmRpYW47CisgCitkaWZmIC0tZ2l0IGEvbGQvbGQudGV4aW5mbyBiL2xkL2xkLnRleGluZm8KK2luZGV4IGViZTdlN2I3YmQuLjMzYWEyYzYyZmEgMTAwNjQ0CistLS0gYS9sZC9sZC50ZXhpbmZvCisrKysgYi9sZC9sZC50ZXhpbmZvCitAQCAtMjQ4MCw2ICsyNDgwLDE4IEBAIHN0cmluZyBpZGVudGlmeWluZyB0aGUgb3JpZ2luYWwgbGlua2VkIGZpbGUgZG9lcyBub3QgY2hhbmdlLgorIAorIFBhc3NpbmcgQGNvZGV7bm9uZX0gZm9yIEB2YXJ7c3R5bGV9IGRpc2FibGVzIHRoZSBzZXR0aW5nIGZyb20gYW55CisgQGNvZGV7LS1idWlsZC1pZH0gb3B0aW9ucyBlYXJsaWVyIG9uIHRoZSBjb21tYW5kIGxpbmUuCisrCisrQGtpbmRleCAtLW5vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytAaXRlbSAtLW5vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytEbyBub3Qgd2FybiBmb3IgQG9wdGlvbnstTH0gb3B0aW9ucyB1c2luZyBzeXN0ZW0gZGlyZWN0b3JpZXMgc3VjaCBhcworK0BmaWxley91c3IvbGlifSB3aGVuIGNyb3NzIGxpbmtpbmcuICBUaGlzIG9wdGlvbiBpcyBpbnRlbmRlZCBmb3IgdXNlCisraW4gY2hyb290IGVudmlyb25tZW50cyB3aGVuIHN1Y2ggZGlyZWN0b3JpZXMgY29udGFpbiB0aGUgY29ycmVjdAorK2xpYnJhcmllcyBmb3IgdGhlIHRhcmdldCBzeXN0ZW0gcmF0aGVyIHRoYW4gdGhlIGhvc3QuCisrCisrQGtpbmRleCAtLWVycm9yLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytAaXRlbSAtLWVycm9yLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytHaXZlIGFuIGVycm9yIGluc3RlYWQgb2YgYSB3YXJuaW5nIGZvciBAb3B0aW9uey1MfSBvcHRpb25zIHVzaW5nCisrc3lzdGVtIGRpcmVjdG9yaWVzIHdoZW4gY3Jvc3MgbGlua2luZy4KKyBAZW5kIHRhYmxlCisgCisgQGMgbWFuIGVuZAorZGlmZiAtLWdpdCBhL2xkL2xkZmlsZS5jIGIvbGQvbGRmaWxlLmMKK2luZGV4IDNiMzdhMGEzZTIuLjVjODViMDE4NDkgMTAwNjQ0CistLS0gYS9sZC9sZGZpbGUuYworKysrIGIvbGQvbGRmaWxlLmMKK0BAIC0xMTYsNiArMTE2LDIzIEBAIGxkZmlsZV9hZGRfbGlicmFyeV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBiZmRfYm9vbGVhbiBjbWRsaW5lKQorICAgICBuZXdfZGlycy0+bmFtZSA9IGNvbmNhdCAobGRfc3lzcm9vdCwgbmFtZSArIHN0cmxlbiAoIiRTWVNST09UIiksIChjb25zdCBjaGFyICopIE5VTEwpOworICAgZWxzZQorICAgICBuZXdfZGlycy0+bmFtZSA9IHhzdHJkdXAgKG5hbWUpOworKworKyNpZmRlZiBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUworKyAgaWYgKGNvbW1hbmRfbGluZS5wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzCisrICAmJiAoKCFzdHJuY21wIChuYW1lLCAiL2xpYiIsIDQpKQorKyAgICAgIHx8ICghc3RybmNtcCAobmFtZSwgIi91c3IvbGliIiwgOCkpCisrICAgICAgfHwgKCFzdHJuY21wIChuYW1lLCAiL3Vzci9sb2NhbC9saWIiLCAxNCkpCisrICAgICAgfHwgKCFzdHJuY21wIChuYW1lLCAiL3Vzci9YMTFSNi9saWIiLCAxNCkpKSkKKysgICB7CisrICAgICBpZiAoY29tbWFuZF9saW5lLmVycm9yX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMpCisrICAgICAgIGVpbmZvIChfKCIlWCVQOiBlcnJvcjogbGlicmFyeSBzZWFyY2ggcGF0aCBcIiVzXCIgaXMgdW5zYWZlIGZvciAiCisrICAgICAgICAgICAgImNyb3NzLWNvbXBpbGF0aW9uXG4iKSwgbmFtZSk7CisrICAgICBlbHNlCisrICAgICAgIGVpbmZvIChfKCIlUDogd2FybmluZzogbGlicmFyeSBzZWFyY2ggcGF0aCBcIiVzXCIgaXMgdW5zYWZlIGZvciAiCisrICAgICAgICAgICAgImNyb3NzLWNvbXBpbGF0aW9uXG4iKSwgbmFtZSk7CisrICAgfQorKyNlbmRpZgorKworIH0KKyAKKyAvKiBUcnkgdG8gb3BlbiBhIEJGRCBmb3IgYSBsYW5nX2lucHV0X3N0YXRlbWVudC4gICovCitkaWZmIC0tZ2l0IGEvbGQvbGRsZXguaCBiL2xkL2xkbGV4LmgKK2luZGV4IDVhYTdmNmJjM2UuLmNiNjU1ZTAzOTkgMTAwNjQ0CistLS0gYS9sZC9sZGxleC5oCisrKysgYi9sZC9sZGxleC5oCitAQCAtMTQ3LDYgKzE0Nyw4IEBAIGVudW0gb3B0aW9uX3ZhbHVlcworICAgT1BUSU9OX1JFUVVJUkVfREVGSU5FRF9TWU1CT0wsCisgICBPUFRJT05fT1JQSEFOX0hBTkRMSU5HLAorICAgT1BUSU9OX0ZPUkNFX0dST1VQX0FMTE9DQVRJT04sCisrICBPUFRJT05fTk9fUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUywKKysgIE9QVElPTl9FUlJPUl9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTLAorIH07CisgCisgLyogVGhlIGluaXRpYWwgcGFyc2VyIHN0YXRlcy4gICovCitkaWZmIC0tZ2l0IGEvbGQvbGRtYWluLmMgYi9sZC9sZG1haW4uYworaW5kZXggMmIwOWYyMDQxMy4uODllMmEzYTgwNSAxMDA2NDQKKy0tLSBhL2xkL2xkbWFpbi5jCisrKysgYi9sZC9sZG1haW4uYworQEAgLTI2MSw2ICsyNjEsOCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICBjb21tYW5kX2xpbmUud2Fybl9taXNtYXRjaCA9IFRSVUU7CisgICBjb21tYW5kX2xpbmUud2Fybl9zZWFyY2hfbWlzbWF0Y2ggPSBUUlVFOworICAgY29tbWFuZF9saW5lLmNoZWNrX3NlY3Rpb25fYWRkcmVzc2VzID0gLTE7CisrICBjb21tYW5kX2xpbmUucG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcyA9IFRSVUU7CisrICBjb21tYW5kX2xpbmUuZXJyb3JfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcyA9IEZBTFNFOworIAorICAgLyogV2UgaW5pdGlhbGl6ZSBERU1BTkdMSU5HIGJhc2VkIG9uIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgICAgQ09MTEVDVF9OT19ERU1BTkdMRS4gIFRoZSBnY2MgY29sbGVjdDIgcHJvZ3JhbSB3aWxsIGRlbWFuZ2xlIHRoZQorZGlmZiAtLWdpdCBhL2xkL2xleHN1cC5jIGIvbGQvbGV4c3VwLmMKK2luZGV4IGVmZmEyNzdiMTYuLmU0OTI5NjA3ZTkgMTAwNjQ0CistLS0gYS9sZC9sZXhzdXAuYworKysrIGIvbGQvbGV4c3VwLmMKK0BAIC01MzgsNiArNTM4LDE0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbGRfb3B0aW9uIGxkX29wdGlvbnNbXSA9CisgICB7IHsib3JwaGFuLWhhbmRsaW5nIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIE9QVElPTl9PUlBIQU5fSEFORExJTkd9LAorICAgICAnXDAnLCBOXygiPU1PREUiKSwgTl8oIkNvbnRyb2wgaG93IG9ycGhhbiBzZWN0aW9ucyBhcmUgaGFuZGxlZC4iKSwKKyAgICAgVFdPX0RBU0hFUyB9LAorKyAgeyB7Im5vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMiLCBub19hcmd1bWVudCwgTlVMTCwKKysgICAgIE9QVElPTl9OT19QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTfSwKKysgICAgJ1wwJywgTlVMTCwgTl8oIkRvIG5vdCB3YXJuIGZvciAtTCBvcHRpb25zIHVzaW5nIHN5c3RlbSBkaXJlY3RvcmllcyIpLAorKyAgICBUV09fREFTSEVTIH0sCisrICB7IHsiZXJyb3ItcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyIsIG5vX2FyZ3VtZW50LCBOVUxMLAorKyAgICArICAgICBPUFRJT05fRVJST1JfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFU30sCisrICAgICdcMCcsIE5VTEwsIE5fKCJHaXZlIGFuIGVycm9yIGZvciAtTCBvcHRpb25zIHVzaW5nIHN5c3RlbSBkaXJlY3RvcmllcyIpLAorKyAgICBUV09fREFTSEVTIH0sCisgfTsKKyAKKyAjZGVmaW5lIE9QVElPTl9DT1VOVCBBUlJBWV9TSVpFIChsZF9vcHRpb25zKQorQEAgLTE1NjgsNiArMTU3NiwxNCBAQCBwYXJzZV9hcmdzICh1bnNpZ25lZCBhcmdjLCBjaGFyICoqYXJndikKKyAJICAgIGVpbmZvIChfKCIlUCVGOiBpbnZhbGlkIGFyZ3VtZW50IHRvIG9wdGlvbiIKKyAJCSAgICAgIiBcIi0tb3JwaGFuLWhhbmRsaW5nXCJcbiIpKTsKKyAJICBicmVhazsKKysKKysJY2FzZSBPUFRJT05fTk9fUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUzoKKysJICBjb21tYW5kX2xpbmUucG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcyA9IEZBTFNFOworKwkgIGJyZWFrOworKworKwljYXNlIE9QVElPTl9FUlJPUl9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTOgorKwkgIGNvbW1hbmRfbGluZS5lcnJvcl9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzID0gVFJVRTsKKysJICBicmVhazsKKyAJfQorICAgICB9CisgCistLSAKKzIuMTQuMAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTAtRml4LXJwYXRoLWluLWxpYnRvb2wtd2hlbi1zeXNyb290LWlzLWVuYWJsZWQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTAtRml4LXJwYXRoLWluLWxpYnRvb2wtd2hlbi1zeXNyb290LWlzLWVuYWJsZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk2MjQyZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMC1GaXgtcnBhdGgtaW4tbGlidG9vbC13aGVuLXN5c3Jvb3QtaXMtZW5hYmxlZC5wYXRjaApAQCAtMCwwICsxLDUyIEBACitGcm9tIDg4ZmFjMDhmMWM0NzJjNjEyZjM4MWNiYjk0MDg3NTZmMmY1OGI0ZmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjQyOjM4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvMTVdIEZpeCBycGF0aCBpbiBsaWJ0b29sIHdoZW4gc3lzcm9vdCBpcyBlbmFibGVkCisKK0VuYWJsaW5nIHN5c3Jvb3Qgc3VwcG9ydCBpbiBsaWJ0b29sIGV4cG9zZWQgYSBidWcgd2hlcmUgdGhlIGZpbmFsCitsaWJyYXJ5IGhhZCBhbiBSUEFUSCBlbmNvZGVkIGludG8gaXQgd2hpY2ggc3RpbGwgcG9pbnRlZCB0byB0aGUKK3N5c3Jvb3QuIFRoaXMgd29ya3MgYXJvdW5kIHRoZSBpc3N1ZSB1bnRpbCBpdCBnZXRzIHNvcnRlZCBvdXQKK3Vwc3RyZWFtLgorCitGaXggc3VnZ2VzdGVkIGJ5IFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsdG1haW4uc2ggfCAxMCArKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2x0bWFpbi5zaCBiL2x0bWFpbi5zaAoraW5kZXggNzBlODU2ZTA2NS4uMTFlZTY4NGNjYyAxMDA2NDQKKy0tLSBhL2x0bWFpbi5zaAorKysrIGIvbHRtYWluLnNoCitAQCAtODAzNSw5ICs4MDM1LDExIEBAIEVPRgorIAkgIHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rICYmIHJwYXRoPSIkY29tcGlsZV9ycGF0aCRycGF0aCIKKyAJICBmb3IgbGliZGlyIGluICRycGF0aDsgZG8KKyAJICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorKwkJICBmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKKysJCSAgbGliZGlyPSRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQKKysJCSAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkbGliZGlyIgorKwkJICBsaWJkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorIAkgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKy0JCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorLQkJbGliZGlyPSRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQKKyAJCWlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorIAkJICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorIAkJZWxzZQorQEAgLTg3NzAsNiArODc3MiwxMCBAQCBFT0YKKyAgICAgICBoYXJkY29kZV9saWJkaXJzPQorICAgICAgIGZvciBsaWJkaXIgaW4gJGNvbXBpbGVfcnBhdGggJGZpbmFsaXplX3JwYXRoOyBkbworIAlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKysJICBmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKKysJICBsaWJkaXI9JGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdAorKwkgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGxpYmRpciIKKysJICBsaWJkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorIAkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorIAkgICAgaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisgCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCistLSAKKzIuMTQuMAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTAtd2Fybi1mb3ItdXNlcy1vZi1zeXN0ZW0tZGlyZWN0b3JpZXMtd2hlbi1jcm9zcy1saW5raS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMC13YXJuLWZvci11c2VzLW9mLXN5c3RlbS1kaXJlY3Rvcmllcy13aGVuLWNyb3NzLWxpbmtpLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzc0YWQ2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMC13YXJuLWZvci11c2VzLW9mLXN5c3RlbS1kaXJlY3Rvcmllcy13aGVuLWNyb3NzLWxpbmtpLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjczICswLDAgQEAKLUZyb20gYjFhYjE3YWJlNDEyODY4NGYxOTc3NTQ0ODU0NTE3NmZiMmE1ZTI3ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDE1IEphbiAyMDE2IDA2OjMxOjA5ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMTAvMTVdIHdhcm4gZm9yIHVzZXMgb2Ygc3lzdGVtIGRpcmVjdG9yaWVzIHdoZW4gY3Jvc3MgbGlua2luZwotCi0yMDA4LTA3LTAyICBKb3NlcGggTXllcnMgIDxqb3NlcGhAY29kZXNvdXJjZXJ5LmNvbT4KLQotICAgIGxkLwotICAgICogbGQuaCAoYXJnc190eXBlKTogQWRkIGVycm9yX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMuCi0gICAgKiBsZC50ZXhpbmZvICgtLWVycm9yLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMpOiBEb2N1bWVudC4KLSAgICAqIGxkZmlsZS5jIChsZGZpbGVfYWRkX2xpYnJhcnlfcGF0aCk6IENoZWNrCi0gICAgY29tbWFuZF9saW5lLmVycm9yX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMuCi0gICAgKiBsZG1haW4uYyAobWFpbik6IEluaXRpYWxpemUKLSAgICBjb21tYW5kX2xpbmUuZXJyb3JfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcy4KLSAgICAqIGxleHN1cC5jIChlbnVtIG9wdGlvbl92YWx1ZXMpOiBBZGQKLSAgICBPUFRJT05fRVJST1JfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUy4KLSAgICAobGRfb3B0aW9ucyk6IEFkZCAtLWVycm9yLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMuCi0gICAgKHBhcnNlX2FyZ3MpOiBIYW5kbGUgbmV3IG9wdGlvbi4KLQotMjAwNy0wNi0xMyAgSm9zZXBoIE15ZXJzICA8am9zZXBoQGNvZGVzb3VyY2VyeS5jb20+Ci0KLSAgICBsZC8KLSAgICAqIGNvbmZpZy5pbjogUmVnZW5lcmF0ZS4KLSAgICAqIGxkLmggKGFyZ3NfdHlwZSk6IEFkZCBwb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLgotICAgICogbGQudGV4aW5mbyAoLS1uby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzKTogRG9jdW1lbnQuCi0gICAgKiBsZGZpbGUuYyAobGRmaWxlX2FkZF9saWJyYXJ5X3BhdGgpOiBDaGVjawotICAgIGNvbW1hbmRfbGluZS5wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLgotICAgICogbGRtYWluLmMgKG1haW4pOiBJbml0aWFsaXplCi0gICAgY29tbWFuZF9saW5lLnBvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMuCi0gICAgKiBsZXhzdXAuYyAoZW51bSBvcHRpb25fdmFsdWVzKTogQWRkCi0gICAgT1BUSU9OX05PX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMuCi0gICAgKGxkX29wdGlvbnMpOiBBZGQgLS1uby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLgotICAgIChwYXJzZV9hcmdzKTogSGFuZGxlIG5ldyBvcHRpb24uCi0KLTIwMDctMDQtMjAgIEpvc2VwaCBNeWVycyAgPGpvc2VwaEBjb2Rlc291cmNlcnkuY29tPgotCi0gICAgTWVyZ2UgZnJvbSBTb3VyY2VyeSBHKysgYmludXRpbHMgMi4xNzoKLQotICAgIDIwMDctMDMtMjAgIEpvc2VwaCBNeWVycyAgPGpvc2VwaEBjb2Rlc291cmNlcnkuY29tPgotICAgIEJhc2VkIG9uIHBhdGNoIGJ5IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4uCi0gICAgbGQvCi0gICAgKiBjb25maWd1cmUuaW4gKC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMpOiBOZXcgb3B0aW9uLgotICAgICogY29uZmlndXJlLCBjb25maWcuaW46IFJlZ2VuZXJhdGUuCi0gICAgKiBsZGZpbGUuYyAobGRmaWxlX2FkZF9saWJyYXJ5X3BhdGgpOiBJZgotICAgIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTIGRlZmluZWQsIHdhcm4gZm9yIHVzZSBvZiAvbGliLAotICAgIC91c3IvbGliLCAvdXNyL2xvY2FsL2xpYiBvciAvdXNyL1gxMVI2L2xpYi4KLQotU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgotU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotIGxkL2NvbmZpZy5pbiAgICB8ICAzICsrKwotIGxkL2NvbmZpZ3VyZSAgICB8IDE2ICsrKysrKysrKysrKysrKysKLSBsZC9jb25maWd1cmUuYWMgfCAxMCArKysrKysrKysrCi0gbGQvbGQuaCAgICAgICAgIHwgIDggKysrKysrKysKLSBsZC9sZC50ZXhpbmZvICAgfCAxMiArKysrKysrKysrKysKLSBsZC9sZGZpbGUuYyAgICAgfCAxNyArKysrKysrKysrKysrKysrKwotIGxkL2xkbGV4LmggICAgICB8ICAyICsrCi0gbGQvbGRtYWluLmMgICAgIHwgIDIgKysKLSBsZC9sZXhzdXAuYyAgICAgfCAxNiArKysrKysrKysrKysrKysrCi0gOSBmaWxlcyBjaGFuZ2VkLCA4NiBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9sZC9jb25maWcuaW4gYi9sZC9jb25maWcuaW4KLWluZGV4IDJjNmQ2OThiNmMuLmQzY2I3ZTg4MmQgMTAwNjQ0Ci0tLS0gYS9sZC9jb25maWcuaW4KLSsrKyBiL2xkL2NvbmZpZy5pbgotQEAgLTE3LDYgKzE3LDkgQEAKLSAgICBsYW5ndWFnZSBpcyByZXF1ZXN0ZWQuICovCi0gI3VuZGVmIEVOQUJMRV9OTFMKLSAKLSsvKiBEZWZpbmUgdG8gd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gbGlicmFyeSBkaXJlY3RvcmllcyAqLwotKyN1bmRlZiBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUwotKwotIC8qIEFkZGl0aW9uYWwgZXh0ZW5zaW9uIGEgc2hhcmVkIG9iamVjdCBtaWdodCBoYXZlLiAqLwotICN1bmRlZiBFWFRSQV9TSExJQl9FWFRFTlNJT04KLSAKLWRpZmYgLS1naXQgYS9sZC9jb25maWd1cmUgYi9sZC9jb25maWd1cmUKLWluZGV4IDQyNzdiNzRiYWQuLjYzMTA5NjQ0YjYgMTAwNzU1Ci0tLS0gYS9sZC9jb25maWd1cmUKLSsrKyBiL2xkL2NvbmZpZ3VyZQotQEAgLTc5Myw2ICs3OTMsNyBAQCB3aXRoX2xpYl9wYXRoCi0gZW5hYmxlX3RhcmdldHMKLSBlbmFibGVfNjRfYml0X2JmZAotIHdpdGhfc3lzcm9vdAotK2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzCi0gZW5hYmxlX2dvbGQKLSBlbmFibGVfZ290Ci0gZW5hYmxlX2NvbXByZXNzZWRfZGVidWdfc2VjdGlvbnMKLUBAIC0xNDUwLDYgKzE0NTEsOCBAQCBPcHRpb25hbCBGZWF0dXJlczoKLSAgIC0tZGlzYWJsZS1sYXJnZWZpbGUgICAgIG9taXQgc3VwcG9ydCBmb3IgbGFyZ2UgZmlsZXMKLSAgIC0tZW5hYmxlLXRhcmdldHMgICAgICAgIGFsdGVybmF0aXZlIHRhcmdldCBjb25maWd1cmF0aW9ucwotICAgLS1lbmFibGUtNjQtYml0LWJmZCAgICAgNjQtYml0IHN1cHBvcnQgKG9uIGhvc3RzIHdpdGggbmFycm93ZXIgd29yZCBzaXplcykKLSsgIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGxpYnJhcnkgZGlyZWN0b3JpZXMKLSAgIC0tZW5hYmxlLWdvbGRbPUFSR10gICAgIGJ1aWxkIGdvbGQgW0FSRz17ZGVmYXVsdCx5ZXMsbm99XQotICAgLS1lbmFibGUtZ290PTx0eXBlPiAgICAgR09UIGhhbmRsaW5nIHNjaGVtZSAodGFyZ2V0LCBzaW5nbGUsIG5lZ2F0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlnb3QpCi1AQCAtMTYzMTQsNiArMTYzMTcsMTkgQEAgZmkKLSAKLSAKLSAKLSsjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyB3YXMgZ2l2ZW4uCi0raWYgdGVzdCAiJHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcytzZXR9IiA9IHNldDsgdGhlbiA6Ci0rICBlbmFibGV2YWw9JGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzOwotK2Vsc2UKLSsgIGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vCi0rZmkKLSsKLStpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCi0rCi0rJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMgMSIgPj5jb25mZGVmcy5oCi0rCi0rZmkKLSsKLSAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ29sZCB3YXMgZ2l2ZW4uCi0gaWYgdGVzdCAiJHtlbmFibGVfZ29sZCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gICBlbmFibGV2YWw9JGVuYWJsZV9nb2xkOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCi1kaWZmIC0tZ2l0IGEvbGQvY29uZmlndXJlLmFjIGIvbGQvY29uZmlndXJlLmFjCi1pbmRleCAzNmE5ZjUwODNhLi40N2YxZDMzZmE1IDEwMDY0NAotLS0tIGEvbGQvY29uZmlndXJlLmFjCi0rKysgYi9sZC9jb25maWd1cmUuYWMKLUBAIC05NSw2ICs5NSwxNiBAQCBBQ19TVUJTVCh1c2Vfc3lzcm9vdCkKLSBBQ19TVUJTVChUQVJHRVRfU1lTVEVNX1JPT1QpCi0gQUNfU1VCU1QoVEFSR0VUX1NZU1RFTV9ST09UX0RFRklORSkKLSAKLStBQ19BUkdfRU5BQkxFKFtwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXSwKLSsgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc10sCi0rICAgICAgICAgICAgICAgIFt3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBsaWJyYXJ5IGRpcmVjdG9yaWVzXSksLAotKyAgICAgICAgIFtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcz1ub10pCi0raWYgdGVzdCAieCR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXN9IiA9ICJ4eWVzIjsgdGhlbgotKyAgQUNfREVGSU5FKFtFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFU10sCi0rICAgICAgIFsxXSwKLSsgICAgICAgW0RlZmluZSB0byB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBsaWJyYXJ5IGRpcmVjdG9yaWVzXSkKLStmaQotKwotIGRubCBVc2UgLS1lbmFibGUtZ29sZCB0byBkZWNpZGUgaWYgdGhpcyBsaW5rZXIgc2hvdWxkIGJlIHRoZSBkZWZhdWx0LgotIGRubCAiaW5zdGFsbF9hc19kZWZhdWx0IiBpcyBzZXQgdG8gZmFsc2UgaWYgZ29sZCBpcyB0aGUgZGVmYXVsdCBsaW5rZXIuCi0gZG5sICJpbnN0YWxsZWRfbGlua2VyIiBpcyB0aGUgaW5zdGFsbGVkIEJGRCBsaW5rZXIgbmFtZS4KLWRpZmYgLS1naXQgYS9sZC9sZC5oIGIvbGQvbGQuaAotaW5kZXggMTA0YmI4ZTIzNy4uNzRjOTE0YmRkNSAxMDA2NDQKLS0tLSBhL2xkL2xkLmgKLSsrKyBiL2xkL2xkLmgKLUBAIC0xNzIsNiArMTcyLDE0IEBAIHR5cGVkZWYgc3RydWN0Ci0gICAvKiBJZiBzZXQsIGRpc3BsYXkgdGhlIHRhcmdldCBtZW1vcnkgdXNhZ2UgKHBlciBtZW1vcnkgcmVnaW9uKS4gICovCi0gICBiZmRfYm9vbGVhbiBwcmludF9tZW1vcnlfdXNhZ2U7Ci0gCi0rICAvKiBJZiBUUlVFICh0aGUgZGVmYXVsdCkgd2FybiBmb3IgdXNlcyBvZiBzeXN0ZW0gZGlyZWN0b3JpZXMgd2hlbgotKyAgICAgY3Jvc3MgbGlua2luZy4gICovCi0rICBiZmRfYm9vbGVhbiBwb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzOwotKwotKyAgLyogSWYgVFJVRSAoZGVmYXVsdCBGQUxTRSkgZ2l2ZSBhbiBlcnJvciBmb3IgdXNlcyBvZiBzeXN0ZW0KLSsgICAgIGRpcmVjdG9yaWVzIHdoZW4gY3Jvc3MgbGlua2luZyBpbnN0ZWFkIG9mIGEgd2FybmluZy4gICovCi0rICBiZmRfYm9vbGVhbiBlcnJvcl9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzOwotKwotICAgLyogQmlnIG9yIGxpdHRsZSBlbmRpYW4gYXMgc2V0IG9uIGNvbW1hbmQgbGluZS4gICovCi0gICBlbnVtIGVuZGlhbl9lbnVtIGVuZGlhbjsKLSAKLWRpZmYgLS1naXQgYS9sZC9sZC50ZXhpbmZvIGIvbGQvbGQudGV4aW5mbwotaW5kZXggZDM5M2FjZGQ5NC4uYmE5OTViMWUzYSAxMDA2NDQKLS0tLSBhL2xkL2xkLnRleGluZm8KLSsrKyBiL2xkL2xkLnRleGluZm8KLUBAIC0yNDAzLDYgKzI0MDMsMTggQEAgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSBvcmlnaW5hbCBsaW5rZWQgZmlsZSBkb2VzIG5vdCBjaGFuZ2UuCi0gCi0gUGFzc2luZyBAY29kZXtub25lfSBmb3IgQHZhcntzdHlsZX0gZGlzYWJsZXMgdGhlIHNldHRpbmcgZnJvbSBhbnkKLSBAY29kZXstLWJ1aWxkLWlkfSBvcHRpb25zIGVhcmxpZXIgb24gdGhlIGNvbW1hbmQgbGluZS4KLSsKLStAa2luZGV4IC0tbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcwotK0BpdGVtIC0tbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcwotK0RvIG5vdCB3YXJuIGZvciBAb3B0aW9uey1MfSBvcHRpb25zIHVzaW5nIHN5c3RlbSBkaXJlY3RvcmllcyBzdWNoIGFzCi0rQGZpbGV7L3Vzci9saWJ9IHdoZW4gY3Jvc3MgbGlua2luZy4gIFRoaXMgb3B0aW9uIGlzIGludGVuZGVkIGZvciB1c2UKLStpbiBjaHJvb3QgZW52aXJvbm1lbnRzIHdoZW4gc3VjaCBkaXJlY3RvcmllcyBjb250YWluIHRoZSBjb3JyZWN0Ci0rbGlicmFyaWVzIGZvciB0aGUgdGFyZ2V0IHN5c3RlbSByYXRoZXIgdGhhbiB0aGUgaG9zdC4KLSsKLStAa2luZGV4IC0tZXJyb3ItcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcwotK0BpdGVtIC0tZXJyb3ItcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcwotK0dpdmUgYW4gZXJyb3IgaW5zdGVhZCBvZiBhIHdhcm5pbmcgZm9yIEBvcHRpb257LUx9IG9wdGlvbnMgdXNpbmcKLStzeXN0ZW0gZGlyZWN0b3JpZXMgd2hlbiBjcm9zcyBsaW5raW5nLgotIEBlbmQgdGFibGUKLSAKLSBAYyBtYW4gZW5kCi1kaWZmIC0tZ2l0IGEvbGQvbGRmaWxlLmMgYi9sZC9sZGZpbGUuYwotaW5kZXggMDk0M2JiMmRmYS4uOTU4NzRjNzVkZSAxMDA2NDQKLS0tLSBhL2xkL2xkZmlsZS5jCi0rKysgYi9sZC9sZGZpbGUuYwotQEAgLTExNCw2ICsxMTQsMjMgQEAgbGRmaWxlX2FkZF9saWJyYXJ5X3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGJmZF9ib29sZWFuIGNtZGxpbmUpCi0gICAgIG5ld19kaXJzLT5uYW1lID0gY29uY2F0IChsZF9zeXNyb290LCBuYW1lICsgMSwgKGNvbnN0IGNoYXIgKikgTlVMTCk7Ci0gICBlbHNlCi0gICAgIG5ld19kaXJzLT5uYW1lID0geHN0cmR1cCAobmFtZSk7Ci0rCi0rI2lmZGVmIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTCi0rICBpZiAoY29tbWFuZF9saW5lLnBvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMKLSsgICYmICgoIXN0cm5jbXAgKG5hbWUsICIvbGliIiwgNCkpCi0rICAgICAgfHwgKCFzdHJuY21wIChuYW1lLCAiL3Vzci9saWIiLCA4KSkKLSsgICAgICB8fCAoIXN0cm5jbXAgKG5hbWUsICIvdXNyL2xvY2FsL2xpYiIsIDE0KSkKLSsgICAgICB8fCAoIXN0cm5jbXAgKG5hbWUsICIvdXNyL1gxMVI2L2xpYiIsIDE0KSkpKQotKyAgIHsKLSsgICAgIGlmIChjb21tYW5kX2xpbmUuZXJyb3JfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcykKLSsgICAgICAgZWluZm8gKF8oIiVYJVA6IGVycm9yOiBsaWJyYXJ5IHNlYXJjaCBwYXRoIFwiJXNcIiBpcyB1bnNhZmUgZm9yICIKLSsgICAgICAgICAgICAiY3Jvc3MtY29tcGlsYXRpb25cbiIpLCBuYW1lKTsKLSsgICAgIGVsc2UKLSsgICAgICAgZWluZm8gKF8oIiVQOiB3YXJuaW5nOiBsaWJyYXJ5IHNlYXJjaCBwYXRoIFwiJXNcIiBpcyB1bnNhZmUgZm9yICIKLSsgICAgICAgICAgICAiY3Jvc3MtY29tcGlsYXRpb25cbiIpLCBuYW1lKTsKLSsgICB9Ci0rI2VuZGlmCi0rCi0gfQotIAotIC8qIFRyeSB0byBvcGVuIGEgQkZEIGZvciBhIGxhbmdfaW5wdXRfc3RhdGVtZW50LiAgKi8KLWRpZmYgLS1naXQgYS9sZC9sZGxleC5oIGIvbGQvbGRsZXguaAotaW5kZXggM2VjYWMyYmM4Ni4uMzQxMTdmNDNhNSAxMDA2NDQKLS0tLSBhL2xkL2xkbGV4LmgKLSsrKyBiL2xkL2xkbGV4LmgKLUBAIC0xNDYsNiArMTQ2LDggQEAgZW51bSBvcHRpb25fdmFsdWVzCi0gICBPUFRJT05fUFJJTlRfTUVNT1JZX1VTQUdFLAotICAgT1BUSU9OX1JFUVVJUkVfREVGSU5FRF9TWU1CT0wsCi0gICBPUFRJT05fT1JQSEFOX0hBTkRMSU5HLAotKyAgT1BUSU9OX05PX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMsCi0rICBPUFRJT05fRVJST1JfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUywKLSB9OwotIAotIC8qIFRoZSBpbml0aWFsIHBhcnNlciBzdGF0ZXMuICAqLwotZGlmZiAtLWdpdCBhL2xkL2xkbWFpbi5jIGIvbGQvbGRtYWluLmMKLWluZGV4IDFlNDhiMWEyZGIuLjIxZjI3YmFjZjEgMTAwNjQ0Ci0tLS0gYS9sZC9sZG1haW4uYwotKysrIGIvbGQvbGRtYWluLmMKLUBAIC0yNzAsNiArMjcwLDggQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotICAgY29tbWFuZF9saW5lLndhcm5fbWlzbWF0Y2ggPSBUUlVFOwotICAgY29tbWFuZF9saW5lLndhcm5fc2VhcmNoX21pc21hdGNoID0gVFJVRTsKLSAgIGNvbW1hbmRfbGluZS5jaGVja19zZWN0aW9uX2FkZHJlc3NlcyA9IC0xOwotKyAgY29tbWFuZF9saW5lLnBvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMgPSBUUlVFOwotKyAgY29tbWFuZF9saW5lLmVycm9yX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMgPSBGQUxTRTsKLSAKLSAgIC8qIFdlIGluaXRpYWxpemUgREVNQU5HTElORyBiYXNlZCBvbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKLSAgICAgIENPTExFQ1RfTk9fREVNQU5HTEUuICBUaGUgZ2NjIGNvbGxlY3QyIHByb2dyYW0gd2lsbCBkZW1hbmdsZSB0aGUKLWRpZmYgLS1naXQgYS9sZC9sZXhzdXAuYyBiL2xkL2xleHN1cC5jCi1pbmRleCAwYjdkNDk3NmFjLi5kZWRjMDdhMTQzIDEwMDY0NAotLS0tIGEvbGQvbGV4c3VwLmMKLSsrKyBiL2xkL2xleHN1cC5jCi1AQCAtNTM1LDYgKzUzNSwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGxkX29wdGlvbiBsZF9vcHRpb25zW10gPQotICAgeyB7Im9ycGhhbi1oYW5kbGluZyIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fT1JQSEFOX0hBTkRMSU5HfSwKLSAgICAgJ1wwJywgTl8oIj1NT0RFIiksIE5fKCJDb250cm9sIGhvdyBvcnBoYW4gc2VjdGlvbnMgYXJlIGhhbmRsZWQuIiksCi0gICAgIFRXT19EQVNIRVMgfSwKLSsgIHsgeyJuby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIiwgbm9fYXJndW1lbnQsIE5VTEwsCi0rICAgICBPUFRJT05fTk9fUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFU30sCi0rICAgICdcMCcsIE5VTEwsIE5fKCJEbyBub3Qgd2FybiBmb3IgLUwgb3B0aW9ucyB1c2luZyBzeXN0ZW0gZGlyZWN0b3JpZXMiKSwKLSsgICAgVFdPX0RBU0hFUyB9LAotKyAgeyB7ImVycm9yLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMiLCBub19hcmd1bWVudCwgTlVMTCwKLSsgICAgKyAgICAgT1BUSU9OX0VSUk9SX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVN9LAotKyAgICAnXDAnLCBOVUxMLCBOXygiR2l2ZSBhbiBlcnJvciBmb3IgLUwgb3B0aW9ucyB1c2luZyBzeXN0ZW0gZGlyZWN0b3JpZXMiKSwKLSsgICAgVFdPX0RBU0hFUyB9LAotIH07Ci0gCi0gI2RlZmluZSBPUFRJT05fQ09VTlQgQVJSQVlfU0laRSAobGRfb3B0aW9ucykKLUBAIC0xNTYyLDYgKzE1NzAsMTQgQEAgcGFyc2VfYXJncyAodW5zaWduZWQgYXJnYywgY2hhciAqKmFyZ3YpCi0gCSAgICBlaW5mbyAoXygiJVAlRjogaW52YWxpZCBhcmd1bWVudCB0byBvcHRpb24iCi0gCQkgICAgICIgXCItLW9ycGhhbi1oYW5kbGluZ1wiXG4iKSk7Ci0gCSAgYnJlYWs7Ci0rCi0rCWNhc2UgT1BUSU9OX05PX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVM6Ci0rCSAgY29tbWFuZF9saW5lLnBvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMgPSBGQUxTRTsKLSsJICBicmVhazsKLSsKLSsJY2FzZSBPUFRJT05fRVJST1JfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUzoKLSsJICBjb21tYW5kX2xpbmUuZXJyb3JfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcyA9IFRSVUU7Ci0rCSAgYnJlYWs7Ci0gCX0KLSAgICAgfQotIAotLS0gCi0yLjEyLjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDExLUNoYW5nZS1kZWZhdWx0LWVtdWxhdGlvbi1mb3ItbWlwczY0LWxpbnV4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDExLUNoYW5nZS1kZWZhdWx0LWVtdWxhdGlvbi1mb3ItbWlwczY0LWxpbnV4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjODdhMmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTEtQ2hhbmdlLWRlZmF1bHQtZW11bGF0aW9uLWZvci1taXBzNjQtbGludXgucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorRnJvbSA0OTc2NjBiZGJlYjY3ODg3ODY1NTNhNWQ3MzMxMDVmN2Y4OThkYzYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTo0NDoxNCArMDAwMAorU3ViamVjdDogW1BBVENIIDExLzE1XSBDaGFuZ2UgZGVmYXVsdCBlbXVsYXRpb24gZm9yIG1pcHM2NCotKi1saW51eAorCit3ZSBjaGFuZ2UgdGhlIGRlZmF1bHQgZW11bGF0aW9ucyB0byBiZSBONjQgaW5zdGVhZCBvZiBOMzIKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFsgT0UgY29uZmlndXJhdGlvbiBTcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGJmZC9jb25maWcuYmZkICAgfCA4ICsrKystLS0tCisgbGQvY29uZmlndXJlLnRndCB8IDggKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2JmZC9jb25maWcuYmZkIGIvYmZkL2NvbmZpZy5iZmQKK2luZGV4IGRjMjRhYWJhZDUuLjQ1MTEwMjRmMjIgMTAwNjQ0CistLS0gYS9iZmQvY29uZmlnLmJmZAorKysrIGIvYmZkL2NvbmZpZy5iZmQKK0BAIC0xMTg2LDEyICsxMTg2LDEyIEBAIGNhc2UgIiR7dGFyZ30iIGluCisgICAgIHRhcmdfc2VsdmVjcz0ibWlwc19lbGYzMl9sZV92ZWMgbWlwc19lbGY2NF9iZV92ZWMgbWlwc19lbGY2NF9sZV92ZWMgbWlwc19lY29mZl9iZV92ZWMgbWlwc19lY29mZl9sZV92ZWMiCisgICAgIDs7CisgICBtaXBzNjQqZWwtKi1saW51eCopCistICAgIHRhcmdfZGVmdmVjPW1pcHNfZWxmMzJfbnRyYWRfbGVfdmVjCistICAgIHRhcmdfc2VsdmVjcz0ibWlwc19lbGYzMl9udHJhZF9iZV92ZWMgbWlwc19lbGYzMl90cmFkX2xlX3ZlYyBtaXBzX2VsZjMyX3RyYWRfYmVfdmVjIG1pcHNfZWxmNjRfdHJhZF9sZV92ZWMgbWlwc19lbGY2NF90cmFkX2JlX3ZlYyIKKysgICAgdGFyZ19kZWZ2ZWM9bWlwc19lbGY2NF90cmFkX2xlX3ZlYworKyAgICB0YXJnX3NlbHZlY3M9Im1pcHNfZWxmMzJfbnRyYWRfYmVfdmVjIG1pcHNfZWxmMzJfbnRyYWRfbGVfdmVjIG1pcHNfZWxmMzJfdHJhZF9sZV92ZWMgbWlwc19lbGYzMl90cmFkX2JlX3ZlYyBtaXBzX2VsZjY0X3RyYWRfYmVfdmVjIgorICAgICA7OworICAgbWlwczY0Ki0qLWxpbnV4KikKKy0gICAgdGFyZ19kZWZ2ZWM9bWlwc19lbGYzMl9udHJhZF9iZV92ZWMKKy0gICAgdGFyZ19zZWx2ZWNzPSJtaXBzX2VsZjMyX250cmFkX2xlX3ZlYyBtaXBzX2VsZjMyX3RyYWRfYmVfdmVjIG1pcHNfZWxmMzJfdHJhZF9sZV92ZWMgbWlwc19lbGY2NF90cmFkX2JlX3ZlYyBtaXBzX2VsZjY0X3RyYWRfbGVfdmVjIgorKyAgICB0YXJnX2RlZnZlYz1taXBzX2VsZjY0X3RyYWRfYmVfdmVjCisrICAgIHRhcmdfc2VsdmVjcz0ibWlwc19lbGYzMl9udHJhZF9iZV92ZWMgbWlwc19lbGYzMl9udHJhZF9iZV92ZWMgbWlwc19lbGYzMl90cmFkX2JlX3ZlYyBtaXBzX2VsZjMyX3RyYWRfbGVfdmVjIG1pcHNfZWxmNjRfdHJhZF9sZV92ZWMiCisgICAgIDs7CisgICBtaXBzKmVsLSotbGludXgqKQorICAgICB0YXJnX2RlZnZlYz1taXBzX2VsZjMyX3RyYWRfbGVfdmVjCitkaWZmIC0tZ2l0IGEvbGQvY29uZmlndXJlLnRndCBiL2xkL2NvbmZpZ3VyZS50Z3QKK2luZGV4IDQ3YzcxOWNkMDUuLmZlN2I5MjM4YjIgMTAwNjQ0CistLS0gYS9sZC9jb25maWd1cmUudGd0CisrKysgYi9sZC9jb25maWd1cmUudGd0CitAQCAtNTMwLDExICs1MzAsMTEgQEAgbWlwcyplbC0qLXZ4d29ya3MqKQl0YXJnX2VtdWw9ZWxmMzJlbG1pcHZ4d29ya3MKKyBtaXBzKi0qLXZ4d29ya3MqKQl0YXJnX2VtdWw9ZWxmMzJlYm1pcHZ4d29ya3MKKyAJCSAgICAgICAgdGFyZ19leHRyYV9lbXVscz0iZWxmMzJlbG1pcHZ4d29ya3MiIDs7CisgbWlwcyotKi13aW5kaXNzKQl0YXJnX2VtdWw9ZWxmMzJtaXBzd2luZGlzcyA7OworLW1pcHM2NCplbC0qLWxpbnV4LSopCXRhcmdfZW11bD1lbGYzMmx0c21pcG4zMgorLQkJCXRhcmdfZXh0cmFfZW11bHM9ImVsZjMyYnRzbWlwbjMyIGVsZjMybHRzbWlwIGVsZjMyYnRzbWlwIGVsZjY0bHRzbWlwIGVsZjY0YnRzbWlwIgorK21pcHM2NCplbC0qLWxpbnV4LSopCXRhcmdfZW11bD1lbGY2NGx0c21pcAorKwkJCXRhcmdfZXh0cmFfZW11bHM9ImVsZjMyYnRzbWlwbjMyIGVsZjMybHRzbWlwbjMyIGVsZjMybHRzbWlwIGVsZjMyYnRzbWlwIGVsZjY0YnRzbWlwIgorIAkJCXRhcmdfZXh0cmFfbGlicGF0aD0kdGFyZ19leHRyYV9lbXVscyA7OworLW1pcHM2NCotKi1saW51eC0qKQl0YXJnX2VtdWw9ZWxmMzJidHNtaXBuMzIKKy0JCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmx0c21pcG4zMiBlbGYzMmJ0c21pcCBlbGYzMmx0c21pcCBlbGY2NGJ0c21pcCBlbGY2NGx0c21pcCIKKyttaXBzNjQqLSotbGludXgtKikJdGFyZ19lbXVsPWVsZjY0YnRzbWlwCisrCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJidHNtaXBuMzIgZWxmMzJsdHNtaXBuMzIgZWxmMzJidHNtaXAgZWxmMzJsdHNtaXAgZWxmNjRsdHNtaXAiCisgCQkJdGFyZ19leHRyYV9saWJwYXRoPSR0YXJnX2V4dHJhX2VtdWxzIDs7CisgbWlwcyplbC0qLWxpbnV4LSopCXRhcmdfZW11bD1lbGYzMmx0c21pcAorIAkJCXRhcmdfZXh0cmFfZW11bHM9ImVsZjMyYnRzbWlwIGVsZjMybHRzbWlwbjMyIGVsZjY0bHRzbWlwIGVsZjMyYnRzbWlwbjMyIGVsZjY0YnRzbWlwIgorLS0gCisyLjE0LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDExLUZpeC1ycGF0aC1pbi1saWJ0b29sLXdoZW4tc3lzcm9vdC1pcy1lbmFibGVkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDExLUZpeC1ycGF0aC1pbi1saWJ0b29sLXdoZW4tc3lzcm9vdC1pcy1lbmFibGVkLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDllZjUxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMS1GaXgtcnBhdGgtaW4tbGlidG9vbC13aGVuLXN5c3Jvb3QtaXMtZW5hYmxlZC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLUZyb20gNGZlMTNhMzY5OTcyNTNhNWM5MWJjYjA4NmFlYjM5MmFiMjA5NWY2NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6NDI6MzggKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAxMS8xNV0gRml4IHJwYXRoIGluIGxpYnRvb2wgd2hlbiBzeXNyb290IGlzIGVuYWJsZWQKLQotRW5hYmxpbmcgc3lzcm9vdCBzdXBwb3J0IGluIGxpYnRvb2wgZXhwb3NlZCBhIGJ1ZyB3aGVyZSB0aGUgZmluYWwKLWxpYnJhcnkgaGFkIGFuIFJQQVRIIGVuY29kZWQgaW50byBpdCB3aGljaCBzdGlsbCBwb2ludGVkIHRvIHRoZQotc3lzcm9vdC4gVGhpcyB3b3JrcyBhcm91bmQgdGhlIGlzc3VlIHVudGlsIGl0IGdldHMgc29ydGVkIG91dAotdXBzdHJlYW0uCi0KLUZpeCBzdWdnZXN0ZWQgYnkgUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+Ci0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCi0KLVNpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotIGx0bWFpbi5zaCB8IDEwICsrKysrKysrLS0KLSAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCi1pbmRleCA3MGU4NTZlMDY1Li4xMWVlNjg0Y2NjIDEwMDY0NAotLS0tIGEvbHRtYWluLnNoCi0rKysgYi9sdG1haW4uc2gKLUBAIC04MDM1LDkgKzgwMzUsMTEgQEAgRU9GCi0gCSAgdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbmsgJiYgcnBhdGg9IiRjb21waWxlX3JwYXRoJHJwYXRoIgotIAkgIGZvciBsaWJkaXIgaW4gJHJwYXRoOyBkbwotIAkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCi0rCQkgIGZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgotKwkJICBsaWJkaXI9JGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdAotKwkJICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRsaWJkaXIiCi0rCQkgIGxpYmRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0gCSAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgotLQkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCi0tCQlsaWJkaXI9JGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdAotIAkJaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCi0gCQkgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCi0gCQllbHNlCi1AQCAtODc3MCw2ICs4NzcyLDEwIEBAIEVPRgotICAgICAgIGhhcmRjb2RlX2xpYmRpcnM9Ci0gICAgICAgZm9yIGxpYmRpciBpbiAkY29tcGlsZV9ycGF0aCAkZmluYWxpemVfcnBhdGg7IGRvCi0gCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgotKwkgIGZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgotKwkgIGxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0Ci0rCSAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkbGliZGlyIgotKwkgIGxpYmRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0gCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCi0gCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KLSAJICAgICAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKLS0tIAotMi4xMi4wCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMi1BZGQtc3VwcG9ydC1mb3ItTmV0bG9naWMtWExQLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEyLUFkZC1zdXBwb3J0LWZvci1OZXRsb2dpYy1YTFAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM1ZTU4MAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMi1BZGQtc3VwcG9ydC1mb3ItTmV0bG9naWMtWExQLnBhdGNoCkBAIC0wLDAgKzEsMzkzIEBACitGcm9tIDhjNjBhNTVkMzY3ODU4OWQ5MzczOWJkMjdmZWMyMTY5MTFkODA5NjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCAxNCBGZWIgMjAxNiAxNzowNjoxOSArMDAwMAorU3ViamVjdDogW1BBVENIIDEyLzE1XSBBZGQgc3VwcG9ydCBmb3IgTmV0bG9naWMgWExQCisKK1BhdGNoIEZyb206IE5lYnUgUGhpbGlwcyA8bnBoaWxpcHNAbmV0bG9naWNtaWNyby5jb20+CisKK1VzaW5nIHRoZSBtaXBzaXNhNjRyMm5sbSB0YXJnZXQsIGFkZCBzdXBwb3J0IGZvciBYTFAgZnJvbQorTmV0bG9naWMuIEFsc28sIHVwZGF0ZSB2ZW5kb3IgbmFtZSB0byBOTE0gd2hlcmV2ZXIgYXBwbGljYWJsZS4KKworVXNlIDB4MDAwMDAwODAgZm9yIElOU05fWExQLCB0aGUgdmFsdWUgMHgwMDAwMDA0MCBoYXMgYWxyZWFkeSBiZWVuCithc3NpZ25lZCB0byBJTlNOX09DVEVPTjMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBCYW9zaGFuIFBhbmcgPGJhb3NoYW4ucGFuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorLS0tCisgYmZkL2FvdXR4LmggICAgICAgICAgIHwgIDEgKworIGJmZC9hcmNodXJlcy5jICAgICAgICB8ICAxICsKKyBiZmQvYmZkLWluMi5oICAgICAgICAgfCAgMSArCisgYmZkL2NvbmZpZy5iZmQgICAgICAgIHwgIDUgKysrKysKKyBiZmQvY3B1LW1pcHMuYyAgICAgICAgfCAgNiArKysrLS0KKyBiZmQvZWxmeHgtbWlwcy5jICAgICAgfCAgOCArKysrKysrKworIGJpbnV0aWxzL3JlYWRlbGYuYyAgICB8ICAxICsKKyBnYXMvY29uZmlnL3RjLW1pcHMuYyAgfCAgNCArKystCisgZ2FzL2NvbmZpZ3VyZSAgICAgICAgIHwgIDMgKysrCisgaW5jbHVkZS9lbGYvbWlwcy5oICAgIHwgIDEgKworIGluY2x1ZGUvb3Bjb2RlL21pcHMuaCB8ICA2ICsrKysrKworIGxkL2NvbmZpZ3VyZS50Z3QgICAgICB8ICAyICsrCisgb3Bjb2Rlcy9taXBzLWRpcy5jICAgIHwgMTIgKysrKystLS0tLS0tCisgb3Bjb2Rlcy9taXBzLW9wYy5jICAgIHwgMzEgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQorIDE0IGZpbGVzIGNoYW5nZWQsIDYxIGluc2VydGlvbnMoKyksIDIxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYmZkL2FvdXR4LmggYi9iZmQvYW91dHguaAoraW5kZXggM2QzOGZkYTE0Yi4uMGFlYzQ5YmJiMyAxMDA2NDQKKy0tLSBhL2JmZC9hb3V0eC5oCisrKysgYi9iZmQvYW91dHguaAorQEAgLTgxNCw2ICs4MTQsNyBAQCBOQU1FIChhb3V0LCBtYWNoaW5lX3R5cGUpIChlbnVtIGJmZF9hcmNoaXRlY3R1cmUgYXJjaCwKKyAJY2FzZSBiZmRfbWFjaF9taXBzaXNhNjRyNjoKKyAJY2FzZSBiZmRfbWFjaF9taXBzX3NiMToKKyAJY2FzZSBiZmRfbWFjaF9taXBzX3hscjoKKysJY2FzZSBiZmRfbWFjaF9taXBzX3hscDoKKyAJICAvKiBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIE1JUFMzLCBNSVBTNCwgTUlQUzE2LCBNSVBTMzIsIGV0Yy4gICovCisgCSAgYXJjaF9mbGFncyA9IE1fTUlQUzI7CisgCSAgYnJlYWs7CitkaWZmIC0tZ2l0IGEvYmZkL2FyY2h1cmVzLmMgYi9iZmQvYXJjaHVyZXMuYworaW5kZXggNDMzYjk1ZmEwOC4uMDYzYjc5NDNhMSAxMDA2NDQKKy0tLSBhL2JmZC9hcmNodXJlcy5jCisrKysgYi9iZmQvYXJjaHVyZXMuYworQEAgLTIwMSw2ICsyMDEsNyBAQCBERVNDUklQVElPTgorIC4jZGVmaW5lIGJmZF9tYWNoX21pcHNfb2N0ZW9uMyAgICAgICAgICA2NTAzCisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc194bHIgICAgICAgICAgICAgIDg4NzY4MiAgIHsqIGRlY2ltYWwgJ1hMUicgICp9CisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc19pbnRlcmFwdGl2X21yMiAgIDczNjU1MCAgIHsqIGRlY2ltYWwgJ0lBMicgICp9CisrLiNkZWZpbmUgYmZkX21hY2hfbWlwc194bHAgICAgICAgICAgICAgIDg4NzY4MCAgIHsqIGRlY2ltYWwgJ1hMUCcgICp9CisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTMyICAgICAgICAgICAgIDMyCisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTMycjIgICAgICAgICAgIDMzCisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTMycjMgICAgICAgICAgIDM0CitkaWZmIC0tZ2l0IGEvYmZkL2JmZC1pbjIuaCBiL2JmZC9iZmQtaW4yLmgKK2luZGV4IGQxMjZhZWQwODYuLjJiNzUzYjNhOTMgMTAwNjQ0CistLS0gYS9iZmQvYmZkLWluMi5oCisrKysgYi9iZmQvYmZkLWluMi5oCitAQCAtMjA2MCw2ICsyMDYwLDcgQEAgZW51bSBiZmRfYXJjaGl0ZWN0dXJlCisgI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbjMgICAgICAgICAgNjUwMworICNkZWZpbmUgYmZkX21hY2hfbWlwc194bHIgICAgICAgICAgICAgIDg4NzY4MiAgIC8qIGRlY2ltYWwgJ1hMUicgICovCisgI2RlZmluZSBiZmRfbWFjaF9taXBzX2ludGVyYXB0aXZfbXIyICAgNzM2NTUwICAgLyogZGVjaW1hbCAnSUEyJyAgKi8KKysjZGVmaW5lIGJmZF9tYWNoX21pcHNfeGxwICAgICAgICAgICAgICA4ODc2ODAgICAvKiBkZWNpbWFsICdYTFAnICAqLworICNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTMyICAgICAgICAgICAgIDMyCisgI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzJyMiAgICAgICAgICAgMzMKKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNpc2EzMnIzICAgICAgICAgICAzNAorZGlmZiAtLWdpdCBhL2JmZC9jb25maWcuYmZkIGIvYmZkL2NvbmZpZy5iZmQKK2luZGV4IDQ1MTEwMjRmMjIuLmYwZjkwNzJmMTAgMTAwNjQ0CistLS0gYS9iZmQvY29uZmlnLmJmZAorKysrIGIvYmZkL2NvbmZpZy5iZmQKK0BAIC0xMTY5LDYgKzExNjksMTEgQEAgY2FzZSAiJHt0YXJnfSIgaW4KKyAgICAgdGFyZ19kZWZ2ZWM9bWlwc19lbGYzMl9sZV92ZWMKKyAgICAgdGFyZ19zZWx2ZWNzPSJtaXBzX2VsZjMyX2JlX3ZlYyBtaXBzX2VsZjY0X2JlX3ZlYyBtaXBzX2VsZjY0X2xlX3ZlYyIKKyAgICAgOzsKKysgIG1pcHNpc2E2NCotKi1lbGYqKQorKwl0YXJnX2RlZnZlYz1taXBzX2VsZjMyX3RyYWRfYmVfdmVjCisrCXRhcmdfc2VsdmVjcz0ibWlwc19lbGYzMl90cmFkX2xlX3ZlYyBtaXBzX2VsZjY0X3RyYWRfYmVfdmVjIG1pcHNfZWxmNjRfdHJhZF9sZV92ZWMiCisrCXdhbnQ2ND10cnVlCisrCTs7CisgICBtaXBzKi0qLWVsZiogfCBtaXBzKi0qLXJ0ZW1zKiB8IG1pcHMqLSotd2luZGlzcyB8IG1pcHMqLSotbm9uZSkKKyAgICAgdGFyZ19kZWZ2ZWM9bWlwc19lbGYzMl9iZV92ZWMKKyAgICAgdGFyZ19zZWx2ZWNzPSJtaXBzX2VsZjMyX2xlX3ZlYyBtaXBzX2VsZjY0X2JlX3ZlYyBtaXBzX2VsZjY0X2xlX3ZlYyIKK2RpZmYgLS1naXQgYS9iZmQvY3B1LW1pcHMuYyBiL2JmZC9jcHUtbWlwcy5jCitpbmRleCAyNDkzMDk0YmVmLi44Mzc1ZDFhZTk2IDEwMDY0NAorLS0tIGEvYmZkL2NwdS1taXBzLmMKKysrKyBiL2JmZC9jcHUtbWlwcy5jCitAQCAtMTA1LDcgKzEwNSw4IEBAIGVudW0KKyAgIElfbWlwc29jdGVvbjMsCisgICBJX3hsciwKKyAgIElfaW50ZXJhcHRpdl9tcjIsCistICBJX21pY3JvbWlwcworKyAgSV9taWNyb21pcHMsCisrICBJX3hscAorIH07CisgCisgI2RlZmluZSBOTihpbmRleCkgKCZhcmNoX2luZm9fc3RydWN0WyhpbmRleCkgKyAxXSkKK0BAIC0xNTgsNyArMTU5LDggQEAgc3RhdGljIGNvbnN0IGJmZF9hcmNoX2luZm9fdHlwZSBhcmNoX2luZm9fc3RydWN0W10gPQorICAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX3hsciwgIm1pcHM6eGxyIiwgICAgICAgRkFMU0UsIE5OKElfeGxyKSksCisgICBOICgzMiwgMzIsIGJmZF9tYWNoX21pcHNfaW50ZXJhcHRpdl9tcjIsICJtaXBzOmludGVyYXB0aXYtbXIyIiwgRkFMU0UsCisgICAgICBOTihJX2ludGVyYXB0aXZfbXIyKSksCistICBOICg2NCwgNjQsIGJmZF9tYWNoX21pcHNfbWljcm9taXBzLCJtaXBzOm1pY3JvbWlwcyIsRkFMU0UsMCkKKysgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc19taWNyb21pcHMsIm1pcHM6bWljcm9taXBzIixGQUxTRSxOTihJX21pY3JvbWlwcykpLAorKyAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX3hscCwgIm1pcHM6eGxwIiwgICAgICBGQUxTRSwgMCkKKyB9OworIAorIC8qIFRoZSBkZWZhdWx0IGFyY2hpdGVjdHVyZSBpcyBtaXBzOjMwMDAsIGJ1dCB3aXRoIGEgbWFjaGluZSBudW1iZXIgb2YKK2RpZmYgLS1naXQgYS9iZmQvZWxmeHgtbWlwcy5jIGIvYmZkL2VsZnh4LW1pcHMuYworaW5kZXggZmRkZjY4YzgxNi4uMzU0Yzg1ZDAwYiAxMDA2NDQKKy0tLSBhL2JmZC9lbGZ4eC1taXBzLmMKKysrKyBiL2JmZC9lbGZ4eC1taXBzLmMKK0BAIC02Nzk2LDYgKzY3OTYsOSBAQCBfYmZkX2VsZl9taXBzX21hY2ggKGZsYWd3b3JkIGZsYWdzKQorICAgICBjYXNlIEVfTUlQU19NQUNIX0lBTVIyOgorICAgICAgIHJldHVybiBiZmRfbWFjaF9taXBzX2ludGVyYXB0aXZfbXIyOworIAorKyAgICBjYXNlIEVfTUlQU19NQUNIX1hMUDoKKysgICAgICByZXR1cm4gYmZkX21hY2hfbWlwc194bHA7CisrCisgICAgIGRlZmF1bHQ6CisgICAgICAgc3dpdGNoIChmbGFncyAmIEVGX01JUFNfQVJDSCkKKyAJeworQEAgLTExOTU2LDYgKzExOTU5LDEwIEBAIG1pcHNfc2V0X2lzYV9mbGFncyAoYmZkICphYmZkKQorICAgICAgIHZhbCA9IEVfTUlQU19BUkNIXzY0UjIgfCBFX01JUFNfTUFDSF9PQ1RFT04yOworICAgICAgIGJyZWFrOworIAorKwljYXNlIGJmZF9tYWNoX21pcHNfeGxwOgorKwkgIHZhbCA9IEVfTUlQU19BUkNIXzY0UjIgfCBFX01JUFNfTUFDSF9YTFA7CisrCSAgYnJlYWs7CisrCisgICAgIGNhc2UgYmZkX21hY2hfbWlwc2lzYTMyOgorICAgICAgIHZhbCA9IEVfTUlQU19BUkNIXzMyOworICAgICAgIGJyZWFrOworQEAgLTEzOTg5LDYgKzEzOTk2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtaXBzX21hY2hfZXh0ZW5zaW9uIG1pcHNfbWFjaF9leHRlbnNpb25zW10gPQorICAgeyBiZmRfbWFjaF9taXBzX29jdGVvbnAsIGJmZF9tYWNoX21pcHNfb2N0ZW9uIH0sCisgICB7IGJmZF9tYWNoX21pcHNfb2N0ZW9uLCBiZmRfbWFjaF9taXBzaXNhNjRyMiB9LAorICAgeyBiZmRfbWFjaF9taXBzX2xvb25nc29uXzNhLCBiZmRfbWFjaF9taXBzaXNhNjRyMiB9LAorKyAgeyBiZmRfbWFjaF9taXBzX3hscCwgYmZkX21hY2hfbWlwc2lzYTY0cjIgfSwKKyAKKyAgIC8qIE1JUFM2NCBleHRlbnNpb25zLiAgKi8KKyAgIHsgYmZkX21hY2hfbWlwc2lzYTY0cjIsIGJmZF9tYWNoX21pcHNpc2E2NCB9LAorZGlmZiAtLWdpdCBhL2JpbnV0aWxzL3JlYWRlbGYuYyBiL2JpbnV0aWxzL3JlYWRlbGYuYworaW5kZXggMmIxNWYwZjJjYi4uMDkyNzQ0NzA4ZSAxMDA2NDQKKy0tLSBhL2JpbnV0aWxzL3JlYWRlbGYuYworKysrIGIvYmludXRpbHMvcmVhZGVsZi5jCitAQCAtMzMzNSw2ICszMzM1LDcgQEAgZ2V0X21hY2hpbmVfZmxhZ3MgKHVuc2lnbmVkIGVfZmxhZ3MsIHVuc2lnbmVkIGVfbWFjaGluZSkKKyAJICAgIGNhc2UgRV9NSVBTX01BQ0hfT0NURU9OMzogc3RyY2F0IChidWYsICIsIG9jdGVvbjMiKTsgYnJlYWs7CisgCSAgICBjYXNlIEVfTUlQU19NQUNIX1hMUjogIHN0cmNhdCAoYnVmLCAiLCB4bHIiKTsgYnJlYWs7CisgCSAgICBjYXNlIEVfTUlQU19NQUNIX0lBTVIyOiAgc3RyY2F0IChidWYsICIsIGludGVyYXB0aXYtbXIyIik7IGJyZWFrOworKwkgICAgY2FzZSBFX01JUFNfTUFDSF9YTFA6ICBzdHJjYXQgKGJ1ZiwgIiwgeGxwIik7IGJyZWFrOworIAkgICAgY2FzZSAwOgorIAkgICAgLyogV2Ugc2ltcGx5IGlnbm9yZSB0aGUgZmllbGQgaW4gdGhpcyBjYXNlIHRvIGF2b2lkIGNvbmZ1c2lvbjoKKyAJICAgICAgIE1JUFMgRUxGIGRvZXMgbm90IHNwZWNpZnkgRUZfTUlQU19NQUNILCBpdCBpcyBhIEdOVQorZGlmZiAtLWdpdCBhL2dhcy9jb25maWcvdGMtbWlwcy5jIGIvZ2FzL2NvbmZpZy90Yy1taXBzLmMKK2luZGV4IDM4MDRkZjI5NTguLjk1NzZjOTg2ZGIgMTAwNjQ0CistLS0gYS9nYXMvY29uZmlnL3RjLW1pcHMuYworKysrIGIvZ2FzL2NvbmZpZy90Yy1taXBzLmMKK0BAIC01NTIsNiArNTUyLDcgQEAgc3RhdGljIGludCBtaXBzXzMyYml0bW9kZSA9IDA7CisgICAgfHwgbWlwc19vcHRzLmFyY2ggPT0gQ1BVX1JNNzAwMCAgICAgICAgICAgICAgICAgICAgXAorICAgIHx8IG1pcHNfb3B0cy5hcmNoID09IENQVV9WUjU1MDAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB8fCBtaXBzX29wdHMubWljcm9taXBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgfHwgbWlwc19vcHRzLmFyY2ggPT0gQ1BVX1hMUCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICkKKyAKKyAvKiBXaGV0aGVyIHRoZSBwcm9jZXNzb3IgdXNlcyBoYXJkd2FyZSBpbnRlcmxvY2tzIHRvIHByb3RlY3QgcmVhZHMKK0BAIC01ODEsNiArNTgyLDcgQEAgc3RhdGljIGludCBtaXBzXzMyYml0bW9kZSA9IDA7CisgICAgICYmIG1pcHNfb3B0cy5pc2EgIT0gSVNBX01JUFMzKSAgICAgICAgICAgICAgICAgICAgXAorICAgIHx8IG1pcHNfb3B0cy5hcmNoID09IENQVV9SNDMwMCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB8fCBtaXBzX29wdHMubWljcm9taXBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgfHwgbWlwc19vcHRzLmFyY2ggPT0gQ1BVX1hMUCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICkKKyAKKyAvKiBXaGV0aGVyIHRoZSBwcm9jZXNzb3IgdXNlcyBoYXJkd2FyZSBpbnRlcmxvY2tzIHRvIHByb3RlY3QgcmVhZHMKK0BAIC0xOTczOCw3ICsxOTc0MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWlwc19jcHVfaW5mbyBtaXBzX2NwdV9pbmZvX3RhYmxlW10gPQorICAgLyogQnJvYWRjb20gWExQLgorICAgICAgWExQIGlzIG1vc3RseSBsaWtlIFhMUiwgd2l0aCB0aGUgcHJvbWluZW50IGV4Y2VwdGlvbiB0aGF0IGl0IGlzCisgICAgICBNSVBTNjRSMiByYXRoZXIgdGhhbiBNSVBTNjQuICAqLworLSAgeyAieGxwIiwJICAgICAgMCwgMCwJCQlJU0FfTUlQUzY0UjIsIENQVV9YTFIgfSwKKysgIHsgInhscCIsCSAgICAgIDAsIDAsCQkJSVNBX01JUFM2NFIyLCBDUFVfWExQIH0sCisgCisgICAvKiBNSVBTIDY0IFJlbGVhc2UgNiAqLworICAgeyAiaTY0MDAiLAkgICAgICAwLCBBU0VfTVNBLAkJSVNBX01JUFM2NFI2LCBDUFVfTUlQUzY0UjZ9LAorZGlmZiAtLWdpdCBhL2dhcy9jb25maWd1cmUgYi9nYXMvY29uZmlndXJlCitpbmRleCA4MWRkNGNiZDk3Li45NWJkZjNiMTliIDEwMDc1NQorLS0tIGEvZ2FzL2NvbmZpZ3VyZQorKysrIGIvZ2FzL2NvbmZpZ3VyZQorQEAgLTEyOTg5LDYgKzEyOTg5LDkgQEAgX0FDRU9GCisgCSAgbWlwc2lzYTY0cjYgfCBtaXBzaXNhNjRyNmVsKQorIAkgICAgbWlwc19jcHU9bWlwczY0cjYKKyAJICAgIDs7CisrCSAgbWlwc2lzYTY0cjJubG0gfCBtaXBzaXNhNjRyMm5sbWVsKQorKwkJbWlwc19jcHU9eGxwCisrCQk7OworIAkgIG1pcHN0eDM5IHwgbWlwc3R4MzllbCkKKyAJICAgIG1pcHNfY3B1PXIzOTAwCisgCSAgICA7OworZGlmZiAtLWdpdCBhL2luY2x1ZGUvZWxmL21pcHMuaCBiL2luY2x1ZGUvZWxmL21pcHMuaAoraW5kZXggYTRiZWE0M2ZmOC4uNzNkOTA0ZTI1ZiAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvZWxmL21pcHMuaAorKysrIGIvaW5jbHVkZS9lbGYvbWlwcy5oCitAQCAtMjkwLDYgKzI5MCw3IEBAIEVORF9SRUxPQ19OVU1CRVJTIChSX01JUFNfbWF4ZXh0KQorICNkZWZpbmUgRV9NSVBTX01BQ0hfU0IxICAgICAgICAgMHgwMDhhMDAwMAorICNkZWZpbmUgRV9NSVBTX01BQ0hfT0NURU9OCTB4MDA4YjAwMDAKKyAjZGVmaW5lIEVfTUlQU19NQUNIX1hMUiAgICAgCTB4MDA4YzAwMDAKKysjZGVmaW5lIEVfTUlQU19NQUNIX1hMUCAgICAgICAgIDB4MDA4ZjAwMDAKKyAjZGVmaW5lIEVfTUlQU19NQUNIX09DVEVPTjIJMHgwMDhkMDAwMAorICNkZWZpbmUgRV9NSVBTX01BQ0hfT0NURU9OMwkweDAwOGUwMDAwCisgI2RlZmluZSBFX01JUFNfTUFDSF81NDAwCTB4MDA5MTAwMDAKK2RpZmYgLS1naXQgYS9pbmNsdWRlL29wY29kZS9taXBzLmggYi9pbmNsdWRlL29wY29kZS9taXBzLmgKK2luZGV4IGNlYWU5ZWM1MGEuLjI3NmVlM2M2YzEgMTAwNjQ0CistLS0gYS9pbmNsdWRlL29wY29kZS9taXBzLmgKKysrKyBiL2luY2x1ZGUvb3Bjb2RlL21pcHMuaAorQEAgLTEyNTksNiArMTI1OSw4IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWlwc19pc2FfdGFibGVbXSA9IHsKKyAjZGVmaW5lIElOU05fWExSICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisgLyogSW1hZ2luYXRpb24gaW50ZXJBcHRpdiBNUjIuICAqLworICNkZWZpbmUgSU5TTl9JTlRFUkFQVElWX01SMgkgIDB4MDQwMDAwMDAKKysvKiBOZXRsb2dpYyBYbFAgaW5zdHJ1Y3Rpb24gKi8KKysjZGVmaW5lIElOU05fWExQCQkweDAwMDAwMDgwCisgCisgLyogRFNQIEFTRSAqLworICNkZWZpbmUgQVNFX0RTUAkJCTB4MDAwMDAwMDEKK0BAIC0xMzY1LDYgKzEzNjcsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1pcHNfaXNhX3RhYmxlW10gPSB7CisgI2RlZmluZSBDUFVfT0NURU9OMwk2NTAzCisgI2RlZmluZSBDUFVfWExSICAgICAJODg3NjgyICAgCS8qIGRlY2ltYWwgJ1hMUicgICAqLworICNkZWZpbmUgQ1BVX0lOVEVSQVBUSVZfTVIyIDczNjU1MAkvKiBkZWNpbWFsICdJQTInICAqLworKyNkZWZpbmUgQ1BVX1hMUCAgICAgICAgIDg4NzY4MCAgICAgIC8qIGRlY2ltYWwgJ1hMUCcgICAqLworIAorIC8qIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBDUFUgaXMgaW5jbHVkZWQgaW4gSU5TTl8qIG1hc2sgTUFTSy4gICovCisgCitAQCAtMTQ0NSw2ICsxNDQ4LDkgQEAgY3B1X2lzX21lbWJlciAoaW50IGNwdSwgdW5zaWduZWQgaW50IG1hc2spCisgICAgICAgcmV0dXJuICgobWFzayAmIElOU05fSVNBX01BU0spID09IElOU05fSVNBMzJSNikKKyAJICAgICB8fCAoKG1hc2sgJiBJTlNOX0lTQV9NQVNLKSA9PSBJTlNOX0lTQTY0UjYpOworIAorKyAgICBjYXNlIENQVV9YTFA6CisrICAgICAgcmV0dXJuIChtYXNrICYgSU5TTl9YTFApICE9IDA7CisrCisgICAgIGRlZmF1bHQ6CisgICAgICAgcmV0dXJuIEZBTFNFOworICAgICB9CitkaWZmIC0tZ2l0IGEvbGQvY29uZmlndXJlLnRndCBiL2xkL2NvbmZpZ3VyZS50Z3QKK2luZGV4IGZlN2I5MjM4YjIuLjJhZGYxMDhiMTcgMTAwNjQ0CistLS0gYS9sZC9jb25maWd1cmUudGd0CisrKysgYi9sZC9jb25maWd1cmUudGd0CitAQCAtNTE2LDYgKzUxNiw4IEBAIG1pcHMqZWwtc2RlLWVsZiogfCBtaXBzKmVsLW10aS1lbGYqIHwgbWlwcyplbC1pbWctZWxmKikKKyBtaXBzKi1zZGUtZWxmKiB8IG1pcHMqLW10aS1lbGYqIHwgbWlwcyotaW1nLWVsZiopCisgCQkJdGFyZ19lbXVsPWVsZjMyYnRzbWlwCisgCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJsdHNtaXAgZWxmMzJidHNtaXBuMzIgZWxmNjRidHNtaXAgZWxmMzJsdHNtaXBuMzIgZWxmNjRsdHNtaXAiIDs7CisrbWlwc2lzYTY0Ki0qLWVsZiopCXRhcmdfZW11bD1lbGYzMmJ0c21pcAorKwkJCXRhcmdfZXh0cmFfZW11bHM9ImVsZjMybHRzbWlwIGVsZjY0YnRzbWlwIGVsZjY0bHRzbWlwIiA7OworIG1pcHM2NCplbC1wczItZWxmKikJdGFyZ19lbXVsPWVsZjMybHI1OTAwbjMyCisgCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJscjU5MDAiCisgCQkJdGFyZ19leHRyYV9saWJwYXRoPSR0YXJnX2V4dHJhX2VtdWxzIDs7CitkaWZmIC0tZ2l0IGEvb3Bjb2Rlcy9taXBzLWRpcy5jIGIvb3Bjb2Rlcy9taXBzLWRpcy5jCitpbmRleCA0NTE5NTAwN2MxLi40YTgwYTA1ZDE5IDEwMDY0NAorLS0tIGEvb3Bjb2Rlcy9taXBzLWRpcy5jCisrKysgYi9vcGNvZGVzL21pcHMtZGlzLmMKK0BAIC02NTUsMTMgKzY1NSwxMSBAQCBjb25zdCBzdHJ1Y3QgbWlwc19hcmNoX2Nob2ljZSBtaXBzX2FyY2hfY2hvaWNlc1tdID0KKyAgICAgbWlwc19jcDBzZWxfbmFtZXNfeGxyLCBBUlJBWV9TSVpFIChtaXBzX2NwMHNlbF9uYW1lc194bHIpLAorICAgICBtaXBzX2NwMV9uYW1lc19taXBzMzI2NCwgbWlwc19od3JfbmFtZXNfbnVtZXJpYyB9LAorIAorLSAgLyogWExQIGlzIG1vc3RseSBsaWtlIFhMUiwgd2l0aCB0aGUgcHJvbWluZW50IGV4Y2VwdGlvbiBpdCBpcyBiZWluZworLSAgICAgTUlQUzY0UjIuICAqLworLSAgeyAieGxwIiwgMSwgYmZkX21hY2hfbWlwc194bHIsIENQVV9YTFIsCistICAgIElTQV9NSVBTNjRSMiB8IElOU05fWExSLCAwLAorLSAgICBtaXBzX2NwMF9uYW1lc194bHIsCistICAgIG1pcHNfY3Awc2VsX25hbWVzX3hsciwgQVJSQVlfU0laRSAobWlwc19jcDBzZWxfbmFtZXNfeGxyKSwKKy0gICAgbWlwc19jcDFfbmFtZXNfbWlwczMyNjQsIG1pcHNfaHdyX25hbWVzX251bWVyaWMgfSwKKysgIHsgInhscCIsIDEsIGJmZF9tYWNoX21pcHNfeGxwLCBDUFVfWExQLAorKyAgICBJU0FfTUlQUzY0UjIgfCBJTlNOX1hMUCwgMCwKKysgICAgbWlwc19jcDBfbmFtZXNfbWlwczMyNjRyMiwKKysgICAgbWlwc19jcDBzZWxfbmFtZXNfbWlwczMyNjRyMiwgQVJSQVlfU0laRSAobWlwc19jcDBzZWxfbmFtZXNfbWlwczMyNjRyMiksCisrICAgIG1pcHNfY3AxX25hbWVzX21pcHMzMjY0LCBtaXBzX2h3cl9uYW1lc19taXBzMzI2NHIyIH0sCisgCisgICAvKiBUaGlzIGVudHJ5LCBtaXBzMTYsIGlzIGhlcmUgb25seSBmb3IgSVNBL3Byb2Nlc3NvciBzZWxlY3Rpb247IGRvCisgICAgICBub3QgcHJpbnQgaXRzIG5hbWUuICAqLworZGlmZiAtLWdpdCBhL29wY29kZXMvbWlwcy1vcGMuYyBiL29wY29kZXMvbWlwcy1vcGMuYworaW5kZXggMTlmY2E0MDhjOS4uZDAyMDY5YzUyOCAxMDA2NDQKKy0tLSBhL29wY29kZXMvbWlwcy1vcGMuYworKysrIGIvb3Bjb2Rlcy9taXBzLW9wYy5jCitAQCAtMzI4LDYgKzMyOCw3IEBAIGRlY29kZV9taXBzX29wZXJhbmQgKGNvbnN0IGNoYXIgKnApCisgI2RlZmluZSBJT0NUMwlJTlNOX09DVEVPTjMKKyAjZGVmaW5lIFhMUiAgICAgSU5TTl9YTFIKKyAjZGVmaW5lIElBTVIyCUlOU05fSU5URVJBUFRJVl9NUjIKKysjZGVmaW5lIFhMUAlJTlNOX1hMUAorICNkZWZpbmUgSVZJUlQJQVNFX1ZJUlQKKyAjZGVmaW5lIElWSVJUNjQJQVNFX1ZJUlQ2NAorIAorQEAgLTk2Niw2ICs5NjcsNyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgeyJjbG8iLAkJCSJVLHMiLAkJMHg3MDAwMDAyMSwgMHhmYzAwMDdmZiwgV1JfMXxSRF8yLAkJMCwJCUkzMnxONTUsCTAsCUkzNyB9LAorIHsiY2x6IiwJCQkiZCxzIiwJCTB4MDAwMDAwNTAsIDB4ZmMxZjA3ZmYsIFdSXzF8UkRfMiwJCTAsCQlJMzcsCQkwLAkwIH0sCisgeyJjbHoiLAkJCSJVLHMiLAkJMHg3MDAwMDAyMCwgMHhmYzAwMDdmZiwgV1JfMXxSRF8yLAkJMCwJCUkzMnxONTUsCTAsCUkzNyB9LAorK3siY3JjIiwJCQkiZCxzLHQiLAkweDcwMDAwMDFjLCAweGZjMDAwN2ZmLAlXUl8xfFJEXzJ8UkRfMywJMCwJCVhMUCwgCQkwLAkwIH0sCisgLyogY3RjMCBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSB0YWJsZS4gICovCisgeyJjdGMxIiwJCSJ0LEciLAkJMHg0NGMwMDAwMCwgMHhmZmUwMDdmZiwJUkRfMXxXUl9DQ3xDTSwJCTAsCQlJMSwJCTAsCTAgfSwKKyB7ImN0YzEiLAkJInQsUyIsCQkweDQ0YzAwMDAwLCAweGZmZTAwN2ZmLAlSRF8xfFdSX0NDfENNLAkJMCwJCUkxLAkJMCwJMCB9LAorQEAgLTk5OCwxMiArMTAwMCwxMyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgeyJkYWRkaXUiLAkJInQscixqIiwJMHg2NDAwMDAwMCwgMHhmYzAwMDAwMCwgV1JfMXxSRF8yLAkJMCwJCUkzLAkJMCwJMCB9LAorIHsiZGFkZHUiLAkJImQsdix0IiwJMHgwMDAwMDAyZCwgMHhmYzAwMDdmZiwgV1JfMXxSRF8yfFJEXzMsCQkwLAkJSTMsCQkwLAkwIH0sCisgeyJkYWRkdSIsCQkidCxyLEkiLAkwLCAgICAoaW50KSBNX0RBRERVX0ksCUlOU05fTUFDUk8sCQkwLAkJSTMsCQkwLAkwIH0sCisteyJkYWRkd2MiLAkJImQscyx0IiwgCTB4NzAwMDAwMzgsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMnxSRF8zfFdSX0MwfFJEX0MwLCAwLAkJWExSLAkJMCwJMCB9LAorK3siZGFkZHdjIiwJCSJkLHMsdCIsIAkweDcwMDAwMDM4LCAweGZjMDAwN2ZmLCBXUl8xfFJEXzJ8UkRfM3xXUl9DMHxSRF9DMCwgMCwJCVhMUnxYTFAsCTAsCTAgfSwKKyB7ImRicmVhayIsCQkiIiwJCTB4NzAwMDAwM2YsIDB4ZmZmZmZmZmYsCTAsCQkJMCwJCU41LAkJMCwJMCB9LAorIHsiZGNsbyIsCQkiZCxzIiwJCTB4MDAwMDAwNTMsIDB4ZmMxZjA3ZmYsIFdSXzF8UkRfMiwJCTAsCQlJNjksCQkwLAkwIH0sCisgeyJkY2xvIiwJCSJVLHMiLAkgCTB4NzAwMDAwMjUsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMiwgCTAsCQlJNjR8TjU1LAkwLAlJNjkgfSwKKyB7ImRjbHoiLAkJImQscyIsCQkweDAwMDAwMDUyLCAweGZjMWYwN2ZmLCBXUl8xfFJEXzIsCQkwLAkJSTY5LAkJMCwJMCB9LAorIHsiZGNseiIsCQkiVSxzIiwJIAkweDcwMDAwMDI0LCAweGZjMDAwN2ZmLCBXUl8xfFJEXzIsIAkwLAkJSTY0fE41NSwJMCwJSTY5IH0sCisreyJkY3JjIiwJCSJkLHMsdCIsCTB4NzAwMDAwMWQsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMnxSRF8zLAkwLAkJWExQLCAJCTAsCTAgfSwKKyAvKiBkY3RyIGFuZCBkY3R3IGFyZSB1c2VkIG9uIHRoZSByNTAwMC4gICovCisgeyJkY3RyIiwJCSJvKGIpIiwJIAkweGJjMDUwMDAwLCAweGZjMWYwMDAwLCBSRF8yLAkJCTAsCQlJMywJCTAsCTAgfSwKKyB7ImRjdHciLAkJIm8oYikiLAkJMHhiYzA5MDAwMCwgMHhmYzFmMDAwMCwgUkRfMiwJCQkwLAkJSTMsCQkwLAkwIH0sCitAQCAtMTA3NSw2ICsxMDc4LDcgQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQorIHsiZG1mYzAiLAkJInQsRyxIIiwJMHg0MDIwMDAwMCwgMHhmZmUwMDdmOCwJV1JfMXxSRF9DMHxMQywJCTAsCQlJNjQsCQkwLAkwIH0sCisgeyJkbWZnYzAiLAkJInQsRyIsCQkweDQwNjAwMTAwLCAweGZmZTAwN2ZmLCBXUl8xfFJEX0MwfExDLAkJMCwJCTAsCQlJVklSVDY0LCAwIH0sCisgeyJkbWZnYzAiLAkJInQsRyxIIiwJMHg0MDYwMDEwMCwgMHhmZmUwMDdmOCwgV1JfMXxSRF9DMHxMQywJCTAsCQkwLAkJSVZJUlQ2NCwgMCB9LAorK3siZG1mdXIiLAkJInQsZCIsCQkweDcwMDAwMDFlLCAweGZmZTAwN2ZmLCBXUl8xLAkJCTAsCQlYTFAsCQkwLAkwIH0sCisgeyJkbXQiLAkJCSIiLAkJMHg0MTYwMGJjMSwgMHhmZmZmZmZmZiwgVFJBUCwJCQkwLAkJMCwJCU1UMzIsCTAgfSwKKyB7ImRtdCIsCQkJInQiLAkJMHg0MTYwMGJjMSwgMHhmZmUwZmZmZiwgV1JfMXxUUkFQLAkJMCwJCTAsCQlNVDMyLAkwIH0sCisgeyJkbXRjMCIsCQkidCxHIiwJCTB4NDBhMDAwMDAsIDB4ZmZlMDA3ZmYsCVJEXzF8V1JfQzB8V1JfQ0N8Q00sCTAsCQlJMywJCTAsCUVFIH0sCitAQCAtMTA5MCw2ICsxMDk0LDggQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQorIC8qIGRtZmMzIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHRhYmxlLiAgKi8KKyAvKiBkbXRjMyBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSB0YWJsZS4gICovCisgeyJkbXVoIiwJCSJkLHMsdCIsCTB4MDAwMDAwZGMsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMnxSRF8zLAkJMCwJCUk2OSwJCTAsCTAgfSwKKyt7ImRtdHVyIiwJCSJ0LGQiLAkJMHg3MDAwMDAxZiwgMHhmZmUwMDdmZiwJUkRfMSwJCQkwLAkJWExQLAkJMCwJMCB9LAorK3siZG11bCIsCQkiZCxzLHQiLAkweDcwMDAwMDA2LCAweGZjMDAwN2ZmLAlXUl8xfFJEXzJ8UkRfMywJCTAsCQlYTFAsCQkwLAkwIH0sCisgeyJkbXVsIiwJCSJkLHMsdCIsCTB4MDAwMDAwOWMsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMnxSRF8zLAkJMCwJCUk2OSwJCTAsCTAgfSwKKyB7ImRtdWwiLAkJImQsdix0IiwJMHg3MDAwMDAwMywgMHhmYzAwMDdmZiwgV1JfMXxSRF8yfFJEXzN8V1JfSElMTywJMCwJCUlPQ1QsCQkwLAkwIH0sCisgeyJkbXVsIiwJCSJkLHYsdCIsCTAsICAgIChpbnQpIE1fRE1VTCwJSU5TTl9NQUNSTywJCTAsCQlJMywJCTAsCU0zMnxJNjkgfSwKK0BAIC0xMjQzLDkgKzEyNDksOSBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgeyJsZCIsCQkJInMsLWIoK1IpIiwJMHhlYzE4MDAwMCwgMHhmYzFjMDAwMCwgV1JfMSwJCQlSRF9wYywJCUk2OSwJCTAsCTAgfSwKKyB7ImxkIiwJCQkidCxBKGIpIiwJMCwgICAgKGludCkgTV9MRF9BQiwJSU5TTl9NQUNSTywJCTAsCQlJMSwJCTAsCTAgfSwKKyB7ImxkIiwJCQkidCxvKGIpIiwJMHhkYzAwMDAwMCwgMHhmYzAwMDAwMCwgV1JfMXxSRF8zfExNLAkJMCwJCUkzLAkJMCwJMCB9LAorLXsibGRhZGR3IiwJCSJ0LGIiLAkJMHg3MDAwMDAxMCwgMHhmYzAwZmZmZiwJTU9EXzF8UkRfMnxMTXxTTSwJMCwJCVhMUiwJCTAsCTAgfSwKKy17ImxkYWRkd3UiLAkJInQsYiIsCQkweDcwMDAwMDExLCAweGZjMDBmZmZmLAlNT0RfMXxSRF8yfExNfFNNLAkwLAkJWExSLAkJMCwJMCB9LAorLXsibGRhZGRkIiwJCSJ0LGIiLAkJMHg3MDAwMDAxMiwgMHhmYzAwZmZmZiwJTU9EXzF8UkRfMnxMTXxTTSwJMCwJCVhMUiwJCTAsCTAgfSwKKyt7ImxkYWRkdyIsCQkidCxiIiwJCTB4NzAwMDAwMTAsIDB4ZmMwMGZmZmYsCU1PRF8xfFJEXzJ8U00sCQkwLAkJWExSfFhMUCwJMCwJMCB9LAorK3sibGRhZGR3dSIsCQkidCxiIiwJCTB4NzAwMDAwMTEsIDB4ZmMwMGZmZmYsCU1PRF8xfFJEXzJ8U00sCQkwLAkJWExSfFhMUCwJMCwJMCB9LAorK3sibGRhZGRkIiwJCSJ0LGIiLAkJMHg3MDAwMDAxMiwgMHhmYzAwZmZmZiwJTU9EXzF8UkRfMnxTTSwJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisgeyJsZGMxIiwJCSJULG8oYikiLAkweGQ0MDAwMDAwLCAweGZjMDAwMDAwLCBXUl8xfFJEXzN8Q0xEfEZQX0QsCTAsCQlJMiwJCTAsCVNGIH0sCisgeyJsZGMxIiwJCSJFLG8oYikiLAkweGQ0MDAwMDAwLCAweGZjMDAwMDAwLCBXUl8xfFJEXzN8Q0xEfEZQX0QsCTAsCQlJMiwJCTAsCVNGIH0sCisgeyJsZGMxIiwJCSJULEEoYikiLAkwLCAgICAoaW50KSBNX0xEQzFfQUIsCUlOU05fTUFDUk8sCQlJTlNOMl9NX0ZQX0QsCUkyLAkJMCwJU0YgfSwKK0BAIC0xNDEwLDcgKzE0MTYsNyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgeyJtZmxvIiwJCSJkLDkiLAkJMHgwMDAwMDAxMiwgMHhmZjlmMDdmZiwgV1JfMXxSRF9MTywJCTAsCQkwLAkJRDMyLAkwIH0sCisgeyJtZmxvMSIsCQkiZCIsCQkweDcwMDAwMDEyLCAweGZmZmYwN2ZmLAlXUl8xfFJEX0xPLAkJMCwJCUVFLAkJMCwJMCB9LAorIHsibWZsaHh1IiwJCSJkIiwJCTB4MDAwMDAwNTIsIDB4ZmZmZjA3ZmYsCVdSXzF8TU9EX0hJTE8sCQkwLAkJMCwJCVNNVCwJMCB9LAorLXsibWZjciIsCQkidCxzIiwJCTB4NzAwMDAwMTgsIDB4ZmMwMGZmZmYsIFdSXzF8UkRfMiwJCTAsCQlYTFIsCQkwLAkwIH0sCisreyJtZmNyIiwJCSJ0LHMiLAkJMHg3MDAwMDAxOCwgMHhmYzAwZmZmZiwgV1JfMSwJCQkwLAkJWExSfFhMUCwJMCwJMCB9LAorIHsibWZzYSIsCQkiZCIsCQkweDAwMDAwMDI4LCAweGZmZmYwN2ZmLAlXUl8xLAkJCTAsCQlFRSwJCTAsCTAgfSwKKyB7Im1pbi5vYiIsCQkiWCxZLFEiLAkweDc4MDAwMDA2LCAweGZjMjAwMDNmLAlXUl8xfFJEXzJ8UkRfM3xGUF9ELAkwLAkJU0IxLAkJTVgsCTAgfSwKKyB7Im1pbi5vYiIsCQkiRCxTLFEiLAkweDQ4MDAwMDA2LCAweGZjMjAwMDNmLAlXUl8xfFJEXzJ8UkRfM3xGUF9ELAkwLAkJTjU0LAkJMCwJMCB9LAorQEAgLTE0NTUsMTAgKzE0NjEsMTMgQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQorIC8qIG1vdmUgaXMgYXQgdGhlIHRvcCBvZiB0aGUgdGFibGUuICAqLworIHsibXNnbi5xaCIsCQkiWCxZLFEiLAkweDc4MjAwMDAwLCAweGZjMjAwMDNmLAlXUl8xfFJEXzJ8UkRfM3xGUF9ELAkwLAkJMCwJCU1YLAkwIH0sCisgeyJtc2dzbmQiLAkJInQiLAkJMCwgICAgKGludCkgTV9NU0dTTkQsCUlOU05fTUFDUk8sCQkwLAkJWExSLAkJMCwJMCB9LAorK3sibXNnc25kcyIsCQkiZCx0IiwJCTB4NGEwMDAwMDEsIDB4ZmZlMDA3ZmYsCVdSXzF8UkRfMnxSRF9DMHxXUl9DMCwJMCwJCVhMUCwJCTAsCTAgfSwKKyB7Im1zZ2xkIiwJCSIiLCAJCTAsICAgIChpbnQpIE1fTVNHTEQsCUlOU05fTUFDUk8sCQkwLAkJWExSLAkJMCwJMCB9LAorIHsibXNnbGQiLAkJInQiLAkJMCwgICAgKGludCkgTV9NU0dMRF9ULAlJTlNOX01BQ1JPLAkJMCwJCVhMUiwJCTAsCTAgfSwKKy17Im1zZ3dhaXQiLAkJIiIsIAkJMCwgICAgKGludCkgTV9NU0dXQUlULAlJTlNOX01BQ1JPLAkJMCwJCVhMUiwJCTAsCTAgfSwKKy17Im1zZ3dhaXQiLAkJInQiLAkJMCwgICAgKGludCkgTV9NU0dXQUlUX1QsSU5TTl9NQUNSTywJCTAsCQlYTFIsCQkwLAkwIH0sCisreyJtc2dsZHMiLAkJImQsdCIsCQkweDRhMDAwMDAyLCAweGZmZTAwN2ZmLAlXUl8xfFJEXzJ8UkRfQzB8V1JfQzAsCTAsCQlYTFAsCQkwLAkwIH0sCisreyJtc2d3YWl0IiwJCSIiLAkJMCwgICAgKGludCkgTV9NU0dXQUlULCAgSU5TTl9NQUNSTywJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisreyJtc2d3YWl0IiwJCSJ0IiwJCTAsICAgIChpbnQpIE1fTVNHV0FJVF9ULElOU05fTUFDUk8sCQkwLAkJWExSfFhMUCwJMCwJMCB9LAorK3sibXNnc3luYyIsCQkiIiwJCTB4NGEwMDAwMDQsIDB4ZmZmZmZmZmYsMCwJCQkwLAkJWExQLAkJMCwJMCB9LAorIHsibXN1Yi5kIiwJCSJELFIsUyxUIiwJMHg0YzAwMDAyOSwgMHhmYzAwMDAzZiwgV1JfMXxSRF8yfFJEXzN8UkRfNHxGUF9ELCAwLAkJSTRfMzMsCQkwLAlJMzcgfSwKKyB7Im1zdWIuZCIsCQkiRCxTLFQiLAkweDQ2MjAwMDE5LCAweGZmZTAwMDNmLAlXUl8xfFJEXzJ8UkRfM3xGUF9ELAkwLAkJSUwyRSwJCTAsCTAgfSwKKyB7Im1zdWIuZCIsCQkiRCxTLFQiLAkweDcyMjAwMDE5LCAweGZmZTAwMDNmLAlXUl8xfFJEXzJ8UkRfM3xGUF9ELAkwLAkJSUwyRiwJCTAsCTAgfSwKK0BAIC0xNTA4LDcgKzE1MTcsNyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgeyJtdGxvIiwJCSJzLDciLAkJMHgwMDAwMDAxMywgMHhmYzFmZTdmZiwgUkRfMXxXUl9MTywJCTAsCQkwLAkJRDMyLAkwIH0sCisgeyJtdGxvMSIsCQkicyIsCQkweDcwMDAwMDEzLCAweGZjMWZmZmZmLAlSRF8xfFdSX0xPLAkJMCwJCUVFLAkJMCwJMCB9LAorIHsibXRsaHgiLAkJInMiLAkJMHgwMDAwMDA1MywgMHhmYzFmZmZmZiwJUkRfMXxNT0RfSElMTywJCTAsCQkwLAkJU01ULAkwIH0sCisteyJtdGNyIiwJCSJ0LHMiLAkJMHg3MDAwMDAxOSwgMHhmYzAwZmZmZiwgUkRfMXxSRF8yLAkJMCwJCVhMUiwJCTAsCTAgfSwKKyt7Im10Y3IiLAkJInQscyIsCQkweDcwMDAwMDE5LCAweGZjMDBmZmZmLCBSRF8xLAkJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisgeyJtdG0wIiwJCSJzIiwJCTB4NzAwMDAwMDgsIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCisgeyJtdG0wIiwgICAgCQkicyx0IiwJCTB4NzAwMDAwMDgsIDB4ZmMwMGZmZmYsIFJEXzF8UkRfMiwJCTAsCQlJT0NUMywJCTAsCTAgfSwKKyB7Im10bTEiLAkJInMiLAkJMHg3MDAwMDAwYywgMHhmYzFmZmZmZiwgUkRfMSwJCQkwLAkJSU9DVCwJCTAsCTAgfSwKK0BAIC0xOTQ1LDkgKzE5NTQsOSBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgeyJzdXhjMSIsCQkiUyx0KGIpIiwJMHg0YzAwMDAwZCwgMHhmYzAwMDdmZiwgUkRfMXxSRF8yfFJEXzN8U018RlBfRCwJMCwJCUk1XzMzfE41NSwJMCwJSTM3fSwKKyB7InN3IiwJCQkidCxvKGIpIiwJMHhhYzAwMDAwMCwgMHhmYzAwMDAwMCwJUkRfMXxSRF8zfFNNLAkJMCwJCUkxLAkJMCwJMCB9LAorIHsic3ciLAkJCSJ0LEEoYikiLAkwLCAgICAoaW50KSBNX1NXX0FCLAlJTlNOX01BQ1JPLAkJMCwJCUkxLAkJMCwJMCB9LAorLXsic3dhcHciLAkJInQsYiIsCQkweDcwMDAwMDE0LCAweGZjMDBmZmZmLCBNT0RfMXxSRF8yfExNfFNNLAkwLAkJWExSLAkJMCwJMCB9LAorLXsic3dhcHd1IiwJCSJ0LGIiLAkJMHg3MDAwMDAxNSwgMHhmYzAwZmZmZiwgTU9EXzF8UkRfMnxMTXxTTSwJMCwJCVhMUiwJCTAsCTAgfSwKKy17InN3YXBkIiwJCSJ0LGIiLAkJMHg3MDAwMDAxNiwgMHhmYzAwZmZmZiwgTU9EXzF8UkRfMnxMTXxTTSwJMCwJCVhMUiwJCTAsCTAgfSwKKyt7InN3YXB3IiwJCSJ0LGIiLAkJMHg3MDAwMDAxNCwgMHhmYzAwZmZmZiwgTU9EXzF8UkRfMnxTTSwJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisreyJzd2Fwd3UiLAkJInQsYiIsCQkweDcwMDAwMDE1LCAweGZjMDBmZmZmLCBNT0RfMXxSRF8yfFNNLAkJMCwJCVhMUnxYTFAsCTAsCTAgfSwKKyt7InN3YXBkIiwJCSJ0LGIiLAkJMHg3MDAwMDAxNiwgMHhmYzAwZmZmZiwgTU9EXzF8UkRfMnxTTSwJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisgeyJzd2MwIiwJCSJFLG8oYikiLAkweGUwMDAwMDAwLCAweGZjMDAwMDAwLAlSRF8zfFJEX0MwfFNNLAkJMCwJCUkxLAkJMCwJSU9DVHxJT0NUUHxJT0NUMnxJMzcgfSwKKyB7InN3YzAiLAkJIkUsQShiKSIsCTAsICAgIChpbnQpIE1fU1dDMF9BQiwJSU5TTl9NQUNSTywJCTAsCQlJMSwJCTAsCUlPQ1R8SU9DVFB8SU9DVDJ8STM3IH0sCisgeyJzd2MxIiwJCSJULG8oYikiLAkweGU0MDAwMDAwLCAweGZjMDAwMDAwLAlSRF8xfFJEXzN8U018RlBfUywJMCwJCUkxLAkJMCwJMCB9LAorLS0gCisyLjE0LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEyLUNoYW5nZS1kZWZhdWx0LWVtdWxhdGlvbi1mb3ItbWlwczY0LWxpbnV4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEyLUNoYW5nZS1kZWZhdWx0LWVtdWxhdGlvbi1mb3ItbWlwczY0LWxpbnV4LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWMxMDFjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMi1DaGFuZ2UtZGVmYXVsdC1lbXVsYXRpb24tZm9yLW1pcHM2NC1saW51eC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLUZyb20gZjQzZjgzMmUwMDA5Y2FlYTZhM2Q1YmNhYThmMGE2NGQ5NDMwNzJlYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6NDQ6MTQgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAxMi8xNV0gQ2hhbmdlIGRlZmF1bHQgZW11bGF0aW9uIGZvciBtaXBzNjQqLSotbGludXgKLQotd2UgY2hhbmdlIHRoZSBkZWZhdWx0IGVtdWxhdGlvbnMgdG8gYmUgTjY0IGluc3RlYWQgb2YgTjMyCi0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbIE9FIGNvbmZpZ3VyYXRpb24gU3BlY2lmaWNdCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBiZmQvY29uZmlnLmJmZCAgIHwgOCArKysrLS0tLQotIGxkL2NvbmZpZ3VyZS50Z3QgfCA4ICsrKystLS0tCi0gMiBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9iZmQvY29uZmlnLmJmZCBiL2JmZC9jb25maWcuYmZkCi1pbmRleCAxYjI4MDE2YjkxLi42MzU5NmMyZWJjIDEwMDY0NAotLS0tIGEvYmZkL2NvbmZpZy5iZmQKLSsrKyBiL2JmZC9jb25maWcuYmZkCi1AQCAtMTE4MywxMiArMTE4MywxMiBAQCBjYXNlICIke3Rhcmd9IiBpbgotICAgICB0YXJnX3NlbHZlY3M9Im1pcHNfZWxmMzJfbGVfdmVjIG1pcHNfZWxmNjRfYmVfdmVjIG1pcHNfZWxmNjRfbGVfdmVjIG1pcHNfZWNvZmZfYmVfdmVjIG1pcHNfZWNvZmZfbGVfdmVjIgotICAgICA7OwotICAgbWlwczY0KmVsLSotbGludXgqKQotLSAgICB0YXJnX2RlZnZlYz1taXBzX2VsZjMyX250cmFkX2xlX3ZlYwotLSAgICB0YXJnX3NlbHZlY3M9Im1pcHNfZWxmMzJfbnRyYWRfYmVfdmVjIG1pcHNfZWxmMzJfdHJhZF9sZV92ZWMgbWlwc19lbGYzMl90cmFkX2JlX3ZlYyBtaXBzX2VsZjY0X3RyYWRfbGVfdmVjIG1pcHNfZWxmNjRfdHJhZF9iZV92ZWMiCi0rICAgIHRhcmdfZGVmdmVjPW1pcHNfZWxmNjRfdHJhZF9sZV92ZWMKLSsgICAgdGFyZ19zZWx2ZWNzPSJtaXBzX2VsZjMyX250cmFkX2JlX3ZlYyBtaXBzX2VsZjMyX250cmFkX2xlX3ZlYyBtaXBzX2VsZjMyX3RyYWRfbGVfdmVjIG1pcHNfZWxmMzJfdHJhZF9iZV92ZWMgbWlwc19lbGY2NF90cmFkX2JlX3ZlYyIKLSAgICAgOzsKLSAgIG1pcHM2NCotKi1saW51eCopCi0tICAgIHRhcmdfZGVmdmVjPW1pcHNfZWxmMzJfbnRyYWRfYmVfdmVjCi0tICAgIHRhcmdfc2VsdmVjcz0ibWlwc19lbGYzMl9udHJhZF9sZV92ZWMgbWlwc19lbGYzMl90cmFkX2JlX3ZlYyBtaXBzX2VsZjMyX3RyYWRfbGVfdmVjIG1pcHNfZWxmNjRfdHJhZF9iZV92ZWMgbWlwc19lbGY2NF90cmFkX2xlX3ZlYyIKLSsgICAgdGFyZ19kZWZ2ZWM9bWlwc19lbGY2NF90cmFkX2JlX3ZlYwotKyAgICB0YXJnX3NlbHZlY3M9Im1pcHNfZWxmMzJfbnRyYWRfYmVfdmVjIG1pcHNfZWxmMzJfbnRyYWRfYmVfdmVjIG1pcHNfZWxmMzJfdHJhZF9iZV92ZWMgbWlwc19lbGYzMl90cmFkX2xlX3ZlYyBtaXBzX2VsZjY0X3RyYWRfbGVfdmVjIgotICAgICA7OwotICAgbWlwcyplbC0qLWxpbnV4KikKLSAgICAgdGFyZ19kZWZ2ZWM9bWlwc19lbGYzMl90cmFkX2xlX3ZlYwotZGlmZiAtLWdpdCBhL2xkL2NvbmZpZ3VyZS50Z3QgYi9sZC9jb25maWd1cmUudGd0Ci1pbmRleCBiODVjNmJiMzVhLi40ZTc3MzgzYTE5IDEwMDY0NAotLS0tIGEvbGQvY29uZmlndXJlLnRndAotKysrIGIvbGQvY29uZmlndXJlLnRndAotQEAgLTUxOCwxMSArNTE4LDExIEBAIG1pcHMqZWwtKi12eHdvcmtzKikJdGFyZ19lbXVsPWVsZjMyZWxtaXB2eHdvcmtzCi0gbWlwcyotKi12eHdvcmtzKikJdGFyZ19lbXVsPWVsZjMyZWJtaXB2eHdvcmtzCi0gCQkgICAgICAgIHRhcmdfZXh0cmFfZW11bHM9ImVsZjMyZWxtaXB2eHdvcmtzIiA7OwotIG1pcHMqLSotd2luZGlzcykJdGFyZ19lbXVsPWVsZjMybWlwc3dpbmRpc3MgOzsKLS1taXBzNjQqZWwtKi1saW51eC0qKQl0YXJnX2VtdWw9ZWxmMzJsdHNtaXBuMzIKLS0JCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmJ0c21pcG4zMiBlbGYzMmx0c21pcCBlbGYzMmJ0c21pcCBlbGY2NGx0c21pcCBlbGY2NGJ0c21pcCIKLSttaXBzNjQqZWwtKi1saW51eC0qKQl0YXJnX2VtdWw9ZWxmNjRsdHNtaXAKLSsJCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmJ0c21pcG4zMiBlbGYzMmx0c21pcG4zMiBlbGYzMmx0c21pcCBlbGYzMmJ0c21pcCBlbGY2NGJ0c21pcCIKLSAJCQl0YXJnX2V4dHJhX2xpYnBhdGg9JHRhcmdfZXh0cmFfZW11bHMgOzsKLS1taXBzNjQqLSotbGludXgtKikJdGFyZ19lbXVsPWVsZjMyYnRzbWlwbjMyCi0tCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJsdHNtaXBuMzIgZWxmMzJidHNtaXAgZWxmMzJsdHNtaXAgZWxmNjRidHNtaXAgZWxmNjRsdHNtaXAiCi0rbWlwczY0Ki0qLWxpbnV4LSopCXRhcmdfZW11bD1lbGY2NGJ0c21pcAotKwkJCXRhcmdfZXh0cmFfZW11bHM9ImVsZjMyYnRzbWlwbjMyIGVsZjMybHRzbWlwbjMyIGVsZjMyYnRzbWlwIGVsZjMybHRzbWlwIGVsZjY0bHRzbWlwIgotIAkJCXRhcmdfZXh0cmFfbGlicGF0aD0kdGFyZ19leHRyYV9lbXVscyA7OwotIG1pcHMqZWwtKi1saW51eC0qKQl0YXJnX2VtdWw9ZWxmMzJsdHNtaXAKLSAJCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmJ0c21pcCBlbGYzMmx0c21pcG4zMiBlbGY2NGx0c21pcCBlbGYzMmJ0c21pcG4zMiBlbGY2NGJ0c21pcCIKLS0tIAotMi4xMi4wCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMy1BZGQtc3VwcG9ydC1mb3ItTmV0bG9naWMtWExQLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEzLUFkZC1zdXBwb3J0LWZvci1OZXRsb2dpYy1YTFAucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwM2UwNDYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEzLUFkZC1zdXBwb3J0LWZvci1OZXRsb2dpYy1YTFAucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzOTkgKzAsMCBAQAotRnJvbSBmYzZmYTZhNmU2ZTllNmU1YWQ3MDgwNzg1YWYzMWI0ZWE2OGY2MGM0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFN1biwgMTQgRmViIDIwMTYgMTc6MDY6MTkgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAxMy8xNV0gQWRkIHN1cHBvcnQgZm9yIE5ldGxvZ2ljIFhMUAotCi1QYXRjaCBGcm9tOiBOZWJ1IFBoaWxpcHMgPG5waGlsaXBzQG5ldGxvZ2ljbWljcm8uY29tPgotCi1Vc2luZyB0aGUgbWlwc2lzYTY0cjJubG0gdGFyZ2V0LCBhZGQgc3VwcG9ydCBmb3IgWExQIGZyb20KLU5ldGxvZ2ljLiBBbHNvLCB1cGRhdGUgdmVuZG9yIG5hbWUgdG8gTkxNIHdoZXJldmVyIGFwcGxpY2FibGUuCi0KLVVzZSAweDAwMDAwMDgwIGZvciBJTlNOX1hMUCwgdGhlIHZhbHVlIDB4MDAwMDAwNDAgaGFzIGFscmVhZHkgYmVlbgotYXNzaWduZWQgdG8gSU5TTl9PQ1RFT04zCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBCYW9zaGFuIFBhbmcgPGJhb3NoYW4ucGFuZ0B3aW5kcml2ZXIuY29tPgotU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgotLS0tCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotIGJmZC9hb3V0eC5oICAgICAgICAgICB8ICAxICsKLSBiZmQvYXJjaHVyZXMuYyAgICAgICAgfCAgMSArCi0gYmZkL2JmZC1pbjIuaCAgICAgICAgIHwgIDEgKwotIGJmZC9jb25maWcuYmZkICAgICAgICB8ICA1ICsrKysrCi0gYmZkL2NwdS1taXBzLmMgICAgICAgIHwgIDYgKysrKy0tCi0gYmZkL2VsZnh4LW1pcHMuYyAgICAgIHwgIDggKysrKysrKysKLSBiaW51dGlscy9yZWFkZWxmLmMgICAgfCAgMSArCi0gZ2FzL2NvbmZpZy90Yy1taXBzLmMgIHwgIDQgKysrLQotIGdhcy9jb25maWd1cmUgICAgICAgICB8ICAzICsrKwotIGluY2x1ZGUvZWxmL21pcHMuaCAgICB8ICAxICsKLSBpbmNsdWRlL29wY29kZS9taXBzLmggfCAxMCArKysrKysrKy0tCi0gbGQvY29uZmlndXJlLnRndCAgICAgIHwgIDIgKysKLSBvcGNvZGVzL21pcHMtZGlzLmMgICAgfCAxMiArKysrKy0tLS0tLS0KLSBvcGNvZGVzL21pcHMtb3BjLmMgICAgfCAzMyArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KLSAxNCBmaWxlcyBjaGFuZ2VkLCA2NCBpbnNlcnRpb25zKCspLCAyNCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2JmZC9hb3V0eC5oIGIvYmZkL2FvdXR4LmgKLWluZGV4IGQzMGU4YjhmYmMuLjkxM2I0OTk3NDQgMTAwNjQ0Ci0tLS0gYS9iZmQvYW91dHguaAotKysrIGIvYmZkL2FvdXR4LmgKLUBAIC04MTIsNiArODEyLDcgQEAgTkFNRSAoYW91dCwgbWFjaGluZV90eXBlKSAoZW51bSBiZmRfYXJjaGl0ZWN0dXJlIGFyY2gsCi0gCWNhc2UgYmZkX21hY2hfbWlwc2lzYTY0cjY6Ci0gCWNhc2UgYmZkX21hY2hfbWlwc19zYjE6Ci0gCWNhc2UgYmZkX21hY2hfbWlwc194bHI6Ci0rCWNhc2UgYmZkX21hY2hfbWlwc194bHA6Ci0gCSAgLyogRklYTUU6IFRoZXNlIHNob3VsZCBiZSBNSVBTMywgTUlQUzQsIE1JUFMxNiwgTUlQUzMyLCBldGMuICAqLwotIAkgIGFyY2hfZmxhZ3MgPSBNX01JUFMyOwotIAkgIGJyZWFrOwotZGlmZiAtLWdpdCBhL2JmZC9hcmNodXJlcy5jIGIvYmZkL2FyY2h1cmVzLmMKLWluZGV4IDZmMzVhNWIyYTcuLmQxMmNkZjYwOWEgMTAwNjQ0Ci0tLS0gYS9iZmQvYXJjaHVyZXMuYwotKysrIGIvYmZkL2FyY2h1cmVzLmMKLUBAIC0xOTcsNiArMTk3LDcgQEAgREVTQ1JJUFRJT04KLSAuI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbjIJCTY1MDIKLSAuI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbjMgICAgICAgICAgNjUwMwotIC4jZGVmaW5lIGJmZF9tYWNoX21pcHNfeGxyICAgICAgICAgICAgICA4ODc2ODIgICB7KiBkZWNpbWFsICdYTFInICAqfQotKy4jZGVmaW5lIGJmZF9tYWNoX21pcHNfeGxwICAgICAgICAgICAgICA4ODc2ODAgICB7KiBkZWNpbWFsICdYTFAnICAqfQotIC4jZGVmaW5lIGJmZF9tYWNoX21pcHNpc2EzMiAgICAgICAgICAgICAzMgotIC4jZGVmaW5lIGJmZF9tYWNoX21pcHNpc2EzMnIyICAgICAgICAgICAzMwotIC4jZGVmaW5lIGJmZF9tYWNoX21pcHNpc2EzMnIzICAgICAgICAgICAzNAotZGlmZiAtLWdpdCBhL2JmZC9iZmQtaW4yLmggYi9iZmQvYmZkLWluMi5oCi1pbmRleCA2Mjg4YzNiYjRhLi5lOWY5ODU5YTdiIDEwMDY0NAotLS0tIGEvYmZkL2JmZC1pbjIuaAotKysrIGIvYmZkL2JmZC1pbjIuaAotQEAgLTIwNDEsNiArMjA0MSw3IEBAIGVudW0gYmZkX2FyY2hpdGVjdHVyZQotICNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb24yICAgICAgICAgIDY1MDIKLSAjZGVmaW5lIGJmZF9tYWNoX21pcHNfb2N0ZW9uMyAgICAgICAgICA2NTAzCi0gI2RlZmluZSBiZmRfbWFjaF9taXBzX3hsciAgICAgICAgICAgICAgODg3NjgyICAgLyogZGVjaW1hbCAnWExSJyAgKi8KLSsjZGVmaW5lIGJmZF9tYWNoX21pcHNfeGxwICAgICAgICAgICAgICA4ODc2ODAgICAvKiBkZWNpbWFsICdYTFAnICAqLwotICNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTMyICAgICAgICAgICAgIDMyCi0gI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzJyMiAgICAgICAgICAgMzMKLSAjZGVmaW5lIGJmZF9tYWNoX21pcHNpc2EzMnIzICAgICAgICAgICAzNAotZGlmZiAtLWdpdCBhL2JmZC9jb25maWcuYmZkIGIvYmZkL2NvbmZpZy5iZmQKLWluZGV4IDYzNTk2YzJlYmMuLjZlOTIzZmIwZWQgMTAwNjQ0Ci0tLS0gYS9iZmQvY29uZmlnLmJmZAotKysrIGIvYmZkL2NvbmZpZy5iZmQKLUBAIC0xMTY2LDYgKzExNjYsMTEgQEAgY2FzZSAiJHt0YXJnfSIgaW4KLSAgICAgdGFyZ19kZWZ2ZWM9bWlwc19lbGYzMl9sZV92ZWMKLSAgICAgdGFyZ19zZWx2ZWNzPSJtaXBzX2VsZjMyX2JlX3ZlYyBtaXBzX2VsZjY0X2JlX3ZlYyBtaXBzX2VsZjY0X2xlX3ZlYyIKLSAgICAgOzsKLSsgIG1pcHNpc2E2NCotKi1lbGYqKQotKwl0YXJnX2RlZnZlYz1taXBzX2VsZjMyX3RyYWRfYmVfdmVjCi0rCXRhcmdfc2VsdmVjcz0ibWlwc19lbGYzMl90cmFkX2xlX3ZlYyBtaXBzX2VsZjY0X3RyYWRfYmVfdmVjIG1pcHNfZWxmNjRfdHJhZF9sZV92ZWMiCi0rCXdhbnQ2ND10cnVlCi0rCTs7Ci0gICBtaXBzKi0qLWVsZiogfCBtaXBzKi0qLXJ0ZW1zKiB8IG1pcHMqLSotd2luZGlzcyB8IG1pcHMqLSotbm9uZSkKLSAgICAgdGFyZ19kZWZ2ZWM9bWlwc19lbGYzMl9iZV92ZWMKLSAgICAgdGFyZ19zZWx2ZWNzPSJtaXBzX2VsZjMyX2xlX3ZlYyBtaXBzX2VsZjY0X2JlX3ZlYyBtaXBzX2VsZjY0X2xlX3ZlYyIKLWRpZmYgLS1naXQgYS9iZmQvY3B1LW1pcHMuYyBiL2JmZC9jcHUtbWlwcy5jCi1pbmRleCBiOWVjZGQ2ZTU1Li5kZjFiZmZjMjViIDEwMDY0NAotLS0tIGEvYmZkL2NwdS1taXBzLmMKLSsrKyBiL2JmZC9jcHUtbWlwcy5jCi1AQCAtMTA0LDcgKzEwNCw4IEBAIGVudW0KLSAgIElfbWlwc29jdGVvbjIsCi0gICBJX21pcHNvY3Rlb24zLAotICAgSV94bHIsCi0tICBJX21pY3JvbWlwcwotKyAgSV9taWNyb21pcHMsCi0rICBJX3hscAotIH07Ci0gCi0gI2RlZmluZSBOTihpbmRleCkgKCZhcmNoX2luZm9fc3RydWN0WyhpbmRleCkgKyAxXSkKLUBAIC0xNTUsNyArMTU2LDggQEAgc3RhdGljIGNvbnN0IGJmZF9hcmNoX2luZm9fdHlwZSBhcmNoX2luZm9fc3RydWN0W10gPQotICAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX29jdGVvbjIsIm1pcHM6b2N0ZW9uMiIsICBGQUxTRSwgTk4oSV9taXBzb2N0ZW9uMikpLAotICAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX29jdGVvbjMsICJtaXBzOm9jdGVvbjMiLCAgRkFMU0UsIE5OKElfbWlwc29jdGVvbjMpKSwKLSAgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc194bHIsICJtaXBzOnhsciIsICAgICAgIEZBTFNFLCBOTihJX3hscikpLAotLSAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX21pY3JvbWlwcywibWlwczptaWNyb21pcHMiLEZBTFNFLDApCi0rICBOICg2NCwgNjQsIGJmZF9tYWNoX21pcHNfbWljcm9taXBzLCJtaXBzOm1pY3JvbWlwcyIsRkFMU0UsTk4oSV9taWNyb21pcHMpKSwKLSsgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc194bHAsICJtaXBzOnhscCIsICAgICAgRkFMU0UsIDApCi0gfTsKLSAKLSAvKiBUaGUgZGVmYXVsdCBhcmNoaXRlY3R1cmUgaXMgbWlwczozMDAwLCBidXQgd2l0aCBhIG1hY2hpbmUgbnVtYmVyIG9mCi1kaWZmIC0tZ2l0IGEvYmZkL2VsZnh4LW1pcHMuYyBiL2JmZC9lbGZ4eC1taXBzLmMKLWluZGV4IDcyMzg1M2Y4MjEuLjdiNDY0MjExYzMgMTAwNjQ0Ci0tLS0gYS9iZmQvZWxmeHgtbWlwcy5jCi0rKysgYi9iZmQvZWxmeHgtbWlwcy5jCi1AQCAtNjc4Nyw2ICs2Nzg3LDkgQEAgX2JmZF9lbGZfbWlwc19tYWNoIChmbGFnd29yZCBmbGFncykKLSAgICAgY2FzZSBFX01JUFNfTUFDSF9YTFI6Ci0gICAgICAgcmV0dXJuIGJmZF9tYWNoX21pcHNfeGxyOwotIAotKwljYXNlIEVfTUlQU19NQUNIX1hMUDoKLSsgICAgICByZXR1cm4gYmZkX21hY2hfbWlwc194bHA7Ci0rCi0gICAgIGRlZmF1bHQ6Ci0gICAgICAgc3dpdGNoIChmbGFncyAmIEVGX01JUFNfQVJDSCkKLSAJewotQEAgLTEyMTA2LDYgKzEyMTA5LDEwIEBAIG1pcHNfc2V0X2lzYV9mbGFncyAoYmZkICphYmZkKQotICAgICAgIHZhbCA9IEVfTUlQU19BUkNIXzY0UjIgfCBFX01JUFNfTUFDSF9PQ1RFT04yOwotICAgICAgIGJyZWFrOwotIAotKwljYXNlIGJmZF9tYWNoX21pcHNfeGxwOgotKwkgIHZhbCA9IEVfTUlQU19BUkNIXzY0UjIgfCBFX01JUFNfTUFDSF9YTFA7Ci0rCSAgYnJlYWs7Ci0rCi0gICAgIGNhc2UgYmZkX21hY2hfbWlwc2lzYTMyOgotICAgICAgIHZhbCA9IEVfTUlQU19BUkNIXzMyOwotICAgICAgIGJyZWFrOwotQEAgLTE0MTM1LDYgKzE0MTQyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtaXBzX21hY2hfZXh0ZW5zaW9uIG1pcHNfbWFjaF9leHRlbnNpb25zW10gPQotICAgeyBiZmRfbWFjaF9taXBzX29jdGVvbnAsIGJmZF9tYWNoX21pcHNfb2N0ZW9uIH0sCi0gICB7IGJmZF9tYWNoX21pcHNfb2N0ZW9uLCBiZmRfbWFjaF9taXBzaXNhNjRyMiB9LAotICAgeyBiZmRfbWFjaF9taXBzX2xvb25nc29uXzNhLCBiZmRfbWFjaF9taXBzaXNhNjRyMiB9LAotKyAgeyBiZmRfbWFjaF9taXBzX3hscCwgYmZkX21hY2hfbWlwc2lzYTY0cjIgfSwKLSAKLSAgIC8qIE1JUFM2NCBleHRlbnNpb25zLiAgKi8KLSAgIHsgYmZkX21hY2hfbWlwc2lzYTY0cjIsIGJmZF9tYWNoX21pcHNpc2E2NCB9LAotZGlmZiAtLWdpdCBhL2JpbnV0aWxzL3JlYWRlbGYuYyBiL2JpbnV0aWxzL3JlYWRlbGYuYwotaW5kZXggOGRjYTQ5MDIyNi4uYjVmNTc3ZjVhMSAxMDA2NDQKLS0tLSBhL2JpbnV0aWxzL3JlYWRlbGYuYwotKysrIGIvYmludXRpbHMvcmVhZGVsZi5jCi1AQCAtMzI2MSw2ICszMjYxLDcgQEAgZ2V0X21hY2hpbmVfZmxhZ3MgKHVuc2lnbmVkIGVfZmxhZ3MsIHVuc2lnbmVkIGVfbWFjaGluZSkKLSAJICAgIGNhc2UgRV9NSVBTX01BQ0hfT0NURU9OMjogc3RyY2F0IChidWYsICIsIG9jdGVvbjIiKTsgYnJlYWs7Ci0gCSAgICBjYXNlIEVfTUlQU19NQUNIX09DVEVPTjM6IHN0cmNhdCAoYnVmLCAiLCBvY3Rlb24zIik7IGJyZWFrOwotIAkgICAgY2FzZSBFX01JUFNfTUFDSF9YTFI6ICBzdHJjYXQgKGJ1ZiwgIiwgeGxyIik7IGJyZWFrOwotKwkJY2FzZSBFX01JUFNfTUFDSF9YTFA6ICBzdHJjYXQgKGJ1ZiwgIiwgeGxwIik7IGJyZWFrOwotIAkgICAgY2FzZSAwOgotIAkgICAgLyogV2Ugc2ltcGx5IGlnbm9yZSB0aGUgZmllbGQgaW4gdGhpcyBjYXNlIHRvIGF2b2lkIGNvbmZ1c2lvbjoKLSAJICAgICAgIE1JUFMgRUxGIGRvZXMgbm90IHNwZWNpZnkgRUZfTUlQU19NQUNILCBpdCBpcyBhIEdOVQotZGlmZiAtLWdpdCBhL2dhcy9jb25maWcvdGMtbWlwcy5jIGIvZ2FzL2NvbmZpZy90Yy1taXBzLmMKLWluZGV4IGUyNGU4NGRmNTQuLmJhZjg0ZTQxOWQgMTAwNjQ0Ci0tLS0gYS9nYXMvY29uZmlnL3RjLW1pcHMuYwotKysrIGIvZ2FzL2NvbmZpZy90Yy1taXBzLmMKLUBAIC01NTIsNiArNTUyLDcgQEAgc3RhdGljIGludCBtaXBzXzMyYml0bW9kZSA9IDA7Ci0gICAgfHwgbWlwc19vcHRzLmFyY2ggPT0gQ1BVX1JNNzAwMCAgICAgICAgICAgICAgICAgICAgXAotICAgIHx8IG1pcHNfb3B0cy5hcmNoID09IENQVV9WUjU1MDAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB8fCBtaXBzX29wdHMubWljcm9taXBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgfHwgbWlwc19vcHRzLmFyY2ggPT0gQ1BVX1hMUCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICkKLSAKLSAvKiBXaGV0aGVyIHRoZSBwcm9jZXNzb3IgdXNlcyBoYXJkd2FyZSBpbnRlcmxvY2tzIHRvIHByb3RlY3QgcmVhZHMKLUBAIC01ODEsNiArNTgyLDcgQEAgc3RhdGljIGludCBtaXBzXzMyYml0bW9kZSA9IDA7Ci0gICAgICYmIG1pcHNfb3B0cy5pc2EgIT0gSVNBX01JUFMzKSAgICAgICAgICAgICAgICAgICAgXAotICAgIHx8IG1pcHNfb3B0cy5hcmNoID09IENQVV9SNDMwMCAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB8fCBtaXBzX29wdHMubWljcm9taXBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgfHwgbWlwc19vcHRzLmFyY2ggPT0gQ1BVX1hMUCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICkKLSAKLSAvKiBXaGV0aGVyIHRoZSBwcm9jZXNzb3IgdXNlcyBoYXJkd2FyZSBpbnRlcmxvY2tzIHRvIHByb3RlY3QgcmVhZHMKLUBAIC0xOTQwOSw3ICsxOTQxMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWlwc19jcHVfaW5mbyBtaXBzX2NwdV9pbmZvX3RhYmxlW10gPQotICAgLyogQnJvYWRjb20gWExQLgotICAgICAgWExQIGlzIG1vc3RseSBsaWtlIFhMUiwgd2l0aCB0aGUgcHJvbWluZW50IGV4Y2VwdGlvbiB0aGF0IGl0IGlzCi0gICAgICBNSVBTNjRSMiByYXRoZXIgdGhhbiBNSVBTNjQuICAqLwotLSAgeyAieGxwIiwJICAgICAgMCwgMCwJCQlJU0FfTUlQUzY0UjIsIENQVV9YTFIgfSwKLSsgIHsgInhscCIsCSAgICAgIDAsIDAsCQkJSVNBX01JUFM2NFIyLCBDUFVfWExQIH0sCi0gCi0gICAvKiBNSVBTIDY0IFJlbGVhc2UgNiAqLwotICAgeyAiaTY0MDAiLAkgICAgICAwLCBBU0VfTVNBLAkJSVNBX01JUFM2NFI2LCBDUFVfTUlQUzY0UjZ9LAotZGlmZiAtLWdpdCBhL2dhcy9jb25maWd1cmUgYi9nYXMvY29uZmlndXJlCi1pbmRleCBhMzZmMWFlMTYxLi45OWYwYTk0ZTIwIDEwMDc1NQotLS0tIGEvZ2FzL2NvbmZpZ3VyZQotKysrIGIvZ2FzL2NvbmZpZ3VyZQotQEAgLTEyOTg5LDYgKzEyOTg5LDkgQEAgX0FDRU9GCi0gCSAgbWlwc2lzYTY0cjYgfCBtaXBzaXNhNjRyNmVsKQotIAkgICAgbWlwc19jcHU9bWlwczY0cjYKLSAJICAgIDs7Ci0rCSAgbWlwc2lzYTY0cjJubG0gfCBtaXBzaXNhNjRyMm5sbWVsKQotKwkJbWlwc19jcHU9eGxwCi0rCQk7OwotIAkgIG1pcHN0eDM5IHwgbWlwc3R4MzllbCkKLSAJICAgIG1pcHNfY3B1PXIzOTAwCi0gCSAgICA7OwotZGlmZiAtLWdpdCBhL2luY2x1ZGUvZWxmL21pcHMuaCBiL2luY2x1ZGUvZWxmL21pcHMuaAotaW5kZXggM2UyN2IwNTEyMi4uODFlYTc4YTgxNyAxMDA2NDQKLS0tLSBhL2luY2x1ZGUvZWxmL21pcHMuaAotKysrIGIvaW5jbHVkZS9lbGYvbWlwcy5oCi1AQCAtMjkwLDYgKzI5MCw3IEBAIEVORF9SRUxPQ19OVU1CRVJTIChSX01JUFNfbWF4ZXh0KQotICNkZWZpbmUgRV9NSVBTX01BQ0hfU0IxICAgICAgICAgMHgwMDhhMDAwMAotICNkZWZpbmUgRV9NSVBTX01BQ0hfT0NURU9OCTB4MDA4YjAwMDAKLSAjZGVmaW5lIEVfTUlQU19NQUNIX1hMUiAgICAgCTB4MDA4YzAwMDAKLSsjZGVmaW5lIEVfTUlQU19NQUNIX1hMUCAgICAgICAgIDB4MDA4ZjAwMDAKLSAjZGVmaW5lIEVfTUlQU19NQUNIX09DVEVPTjIJMHgwMDhkMDAwMAotICNkZWZpbmUgRV9NSVBTX01BQ0hfT0NURU9OMwkweDAwOGUwMDAwCi0gI2RlZmluZSBFX01JUFNfTUFDSF81NDAwCTB4MDA5MTAwMDAKLWRpZmYgLS1naXQgYS9pbmNsdWRlL29wY29kZS9taXBzLmggYi9pbmNsdWRlL29wY29kZS9taXBzLmgKLWluZGV4IDBkMDQzZDk1MjAuLjQ1MGU5YzJkNjcgMTAwNjQ0Ci0tLS0gYS9pbmNsdWRlL29wY29kZS9taXBzLmgKLSsrKyBiL2luY2x1ZGUvb3Bjb2RlL21pcHMuaAotQEAgLTEyNDQsOCArMTI0NCwxMCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1pcHNfaXNhX3RhYmxlW10gPSB7Ci0gI2RlZmluZSBJTlNOX0xPT05HU09OXzJGICAgICAgICAgIDB4ODAwMDAwMDAKLSAvKiBMb29uZ3NvbiAzQS4gICovCi0gI2RlZmluZSBJTlNOX0xPT05HU09OXzNBICAgICAgICAgIDB4MDAwMDA0MDAKLS0vKiBSTUkgWGxyIGluc3RydWN0aW9uICovCi0tI2RlZmluZSBJTlNOX1hMUiAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAotKy8qIE5ldGxvZ2ljIFhsciBpbnN0cnVjdGlvbiAqLwotKyNkZWZpbmUgSU5TTl9YTFIJCTB4MDAwMDAwMjAKLSsvKiBOZXRsb2dpYyBYbFAgaW5zdHJ1Y3Rpb24gKi8KLSsjZGVmaW5lIElOU05fWExQCQkweDAwMDAwMDgwCi0gCi0gLyogRFNQIEFTRSAqLwotICNkZWZpbmUgQVNFX0RTUAkJCTB4MDAwMDAwMDEKLUBAIC0xMzQ0LDYgKzEzNDYsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1pcHNfaXNhX3RhYmxlW10gPSB7Ci0gI2RlZmluZSBDUFVfT0NURU9OMgk2NTAyCi0gI2RlZmluZSBDUFVfT0NURU9OMwk2NTAzCi0gI2RlZmluZSBDUFVfWExSICAgICAJODg3NjgyICAgCS8qIGRlY2ltYWwgJ1hMUicgICAqLwotKyNkZWZpbmUgQ1BVX1hMUCAgICAgICAgIDg4NzY4MCAgICAgIC8qIGRlY2ltYWwgJ1hMUCcgICAqLwotIAotIC8qIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBDUFUgaXMgaW5jbHVkZWQgaW4gSU5TTl8qIG1hc2sgTUFTSy4gICovCi0gCi1AQCAtMTQyMSw2ICsxNDI0LDkgQEAgY3B1X2lzX21lbWJlciAoaW50IGNwdSwgdW5zaWduZWQgaW50IG1hc2spCi0gICAgICAgcmV0dXJuICgobWFzayAmIElOU05fSVNBX01BU0spID09IElOU05fSVNBMzJSNikKLSAJICAgICB8fCAoKG1hc2sgJiBJTlNOX0lTQV9NQVNLKSA9PSBJTlNOX0lTQTY0UjYpOwotIAotKyAgICBjYXNlIENQVV9YTFA6Ci0rICAgICAgcmV0dXJuIChtYXNrICYgSU5TTl9YTFApICE9IDA7Ci0rCi0gICAgIGRlZmF1bHQ6Ci0gICAgICAgcmV0dXJuIEZBTFNFOwotICAgICB9Ci1kaWZmIC0tZ2l0IGEvbGQvY29uZmlndXJlLnRndCBiL2xkL2NvbmZpZ3VyZS50Z3QKLWluZGV4IDRlNzczODNhMTkuLjhhODFmN2FjMzkgMTAwNjQ0Ci0tLS0gYS9sZC9jb25maWd1cmUudGd0Ci0rKysgYi9sZC9jb25maWd1cmUudGd0Ci1AQCAtNTA0LDYgKzUwNCw4IEBAIG1pcHMqZWwtc2RlLWVsZiogfCBtaXBzKmVsLW10aS1lbGYqIHwgbWlwcyplbC1pbWctZWxmKikKLSBtaXBzKi1zZGUtZWxmKiB8IG1pcHMqLW10aS1lbGYqIHwgbWlwcyotaW1nLWVsZiopCi0gCQkJdGFyZ19lbXVsPWVsZjMyYnRzbWlwCi0gCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJsdHNtaXAgZWxmMzJidHNtaXBuMzIgZWxmNjRidHNtaXAgZWxmMzJsdHNtaXBuMzIgZWxmNjRsdHNtaXAiIDs7Ci0rbWlwc2lzYTY0Ki0qLWVsZiopCXRhcmdfZW11bD1lbGYzMmJ0c21pcAotKwkJCXRhcmdfZXh0cmFfZW11bHM9ImVsZjMybHRzbWlwIGVsZjY0YnRzbWlwIGVsZjY0bHRzbWlwIiA7OwotIG1pcHM2NCplbC1wczItZWxmKikJdGFyZ19lbXVsPWVsZjMybHI1OTAwbjMyCi0gCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJscjU5MDAiCi0gCQkJdGFyZ19leHRyYV9saWJwYXRoPSR0YXJnX2V4dHJhX2VtdWxzIDs7Ci1kaWZmIC0tZ2l0IGEvb3Bjb2Rlcy9taXBzLWRpcy5jIGIvb3Bjb2Rlcy9taXBzLWRpcy5jCi1pbmRleCBiYjk5MTJlNDYyLi43MGVjYzUxNzE3IDEwMDY0NAotLS0tIGEvb3Bjb2Rlcy9taXBzLWRpcy5jCi0rKysgYi9vcGNvZGVzL21pcHMtZGlzLmMKLUBAIC02NDgsMTMgKzY0OCwxMSBAQCBjb25zdCBzdHJ1Y3QgbWlwc19hcmNoX2Nob2ljZSBtaXBzX2FyY2hfY2hvaWNlc1tdID0KLSAgICAgbWlwc19jcDBzZWxfbmFtZXNfeGxyLCBBUlJBWV9TSVpFIChtaXBzX2NwMHNlbF9uYW1lc194bHIpLAotICAgICBtaXBzX2NwMV9uYW1lc19taXBzMzI2NCwgbWlwc19od3JfbmFtZXNfbnVtZXJpYyB9LAotIAotLSAgLyogWExQIGlzIG1vc3RseSBsaWtlIFhMUiwgd2l0aCB0aGUgcHJvbWluZW50IGV4Y2VwdGlvbiBpdCBpcyBiZWluZwotLSAgICAgTUlQUzY0UjIuICAqLwotLSAgeyAieGxwIiwgMSwgYmZkX21hY2hfbWlwc194bHIsIENQVV9YTFIsCi0tICAgIElTQV9NSVBTNjRSMiB8IElOU05fWExSLCAwLAotLSAgICBtaXBzX2NwMF9uYW1lc194bHIsCi0tICAgIG1pcHNfY3Awc2VsX25hbWVzX3hsciwgQVJSQVlfU0laRSAobWlwc19jcDBzZWxfbmFtZXNfeGxyKSwKLS0gICAgbWlwc19jcDFfbmFtZXNfbWlwczMyNjQsIG1pcHNfaHdyX25hbWVzX251bWVyaWMgfSwKLSsgIHsgInhscCIsIDEsIGJmZF9tYWNoX21pcHNfeGxwLCBDUFVfWExQLAotKyAgICBJU0FfTUlQUzY0UjIgfCBJTlNOX1hMUCwgMCwKLSsgICAgbWlwc19jcDBfbmFtZXNfbWlwczMyNjRyMiwKLSsgICAgbWlwc19jcDBzZWxfbmFtZXNfbWlwczMyNjRyMiwgQVJSQVlfU0laRSAobWlwc19jcDBzZWxfbmFtZXNfbWlwczMyNjRyMiksCi0rICAgIG1pcHNfY3AxX25hbWVzX21pcHMzMjY0LCBtaXBzX2h3cl9uYW1lc19taXBzMzI2NHIyIH0sCi0gCi0gICAvKiBUaGlzIGVudHJ5LCBtaXBzMTYsIGlzIGhlcmUgb25seSBmb3IgSVNBL3Byb2Nlc3NvciBzZWxlY3Rpb247IGRvCi0gICAgICBub3QgcHJpbnQgaXRzIG5hbWUuICAqLwotZGlmZiAtLWdpdCBhL29wY29kZXMvbWlwcy1vcGMuYyBiL29wY29kZXMvbWlwcy1vcGMuYwotaW5kZXggNWNiOGU3MzY1Zi4uZjIwNzQ4NTZhMiAxMDA2NDQKLS0tLSBhL29wY29kZXMvbWlwcy1vcGMuYwotKysrIGIvb3Bjb2Rlcy9taXBzLW9wYy5jCi1AQCAtMzIwLDcgKzMyMCw4IEBAIGRlY29kZV9taXBzX29wZXJhbmQgKGNvbnN0IGNoYXIgKnApCi0gI2RlZmluZSBJT0NUUAkoSU5TTl9PQ1RFT05QIHwgSU5TTl9PQ1RFT04yIHwgSU5TTl9PQ1RFT04zKQotICNkZWZpbmUgSU9DVDIJKElOU05fT0NURU9OMiB8IElOU05fT0NURU9OMykKLSAjZGVmaW5lIElPQ1QzCUlOU05fT0NURU9OMwotLSNkZWZpbmUgWExSICAgICBJTlNOX1hMUgotKyNkZWZpbmUgWExSCUlOU05fWExSCi0rI2RlZmluZSBYTFAJSU5TTl9YTFAKLSAjZGVmaW5lIElWSVJUCUFTRV9WSVJUCi0gI2RlZmluZSBJVklSVDY0CUFTRV9WSVJUNjQKLSAKLUBAIC05NTgsNiArOTU5LDcgQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQotIHsiY2xvIiwJCQkiVSxzIiwJCTB4NzAwMDAwMjEsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMiwJCTAsCQlJMzJ8TjU1LAkwLAlJMzcgfSwKLSB7ImNseiIsCQkJImQscyIsCQkweDAwMDAwMDUwLCAweGZjMWYwN2ZmLCBXUl8xfFJEXzIsCQkwLAkJSTM3LAkJMCwJMCB9LAotIHsiY2x6IiwJCQkiVSxzIiwJCTB4NzAwMDAwMjAsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMiwJCTAsCQlJMzJ8TjU1LAkwLAlJMzcgfSwKLSt7ImNyYyIsCQkJImQscyx0IiwJMHg3MDAwMDAxYywgMHhmYzAwMDdmZiwJV1JfMXxSRF8yfFJEXzMsCTAsCQlYTFAsIAkJMCwJMCB9LAotIC8qIGN0YzAgaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdGFibGUuICAqLwotIHsiY3RjMSIsCQkidCxHIiwJCTB4NDRjMDAwMDAsIDB4ZmZlMDA3ZmYsCVJEXzF8V1JfQ0N8Q00sCQkwLAkJSTEsCQkwLAkwIH0sCi0geyJjdGMxIiwJCSJ0LFMiLAkJMHg0NGMwMDAwMCwgMHhmZmUwMDdmZiwJUkRfMXxXUl9DQ3xDTSwJCTAsCQlJMSwJCTAsCTAgfSwKLUBAIC05OTAsMTIgKzk5MiwxMyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9Ci0geyJkYWRkaXUiLAkJInQscixqIiwJMHg2NDAwMDAwMCwgMHhmYzAwMDAwMCwgV1JfMXxSRF8yLAkJMCwJCUkzLAkJMCwJMCB9LAotIHsiZGFkZHUiLAkJImQsdix0IiwJMHgwMDAwMDAyZCwgMHhmYzAwMDdmZiwgV1JfMXxSRF8yfFJEXzMsCQkwLAkJSTMsCQkwLAkwIH0sCi0geyJkYWRkdSIsCQkidCxyLEkiLAkwLCAgICAoaW50KSBNX0RBRERVX0ksCUlOU05fTUFDUk8sCQkwLAkJSTMsCQkwLAkwIH0sCi0teyJkYWRkd2MiLAkJImQscyx0IiwgCTB4NzAwMDAwMzgsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMnxSRF8zfFdSX0MwfFJEX0MwLCAwLAkJWExSLAkJMCwJMCB9LAotK3siZGFkZHdjIiwJCSJkLHMsdCIsIAkweDcwMDAwMDM4LCAweGZjMDAwN2ZmLCBXUl8xfFJEXzJ8UkRfM3xXUl9DMHxSRF9DMCwgMCwJCVhMUnxYTFAsCTAsCTAgfSwKLSB7ImRicmVhayIsCQkiIiwJCTB4NzAwMDAwM2YsIDB4ZmZmZmZmZmYsCTAsCQkJMCwJCU41LAkJMCwJMCB9LAotIHsiZGNsbyIsCQkiZCxzIiwJCTB4MDAwMDAwNTMsIDB4ZmMxZjA3ZmYsIFdSXzF8UkRfMiwJCTAsCQlJNjksCQkwLAkwIH0sCi0geyJkY2xvIiwJCSJVLHMiLAkgCTB4NzAwMDAwMjUsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMiwgCTAsCQlJNjR8TjU1LAkwLAlJNjkgfSwKLSB7ImRjbHoiLAkJImQscyIsCQkweDAwMDAwMDUyLCAweGZjMWYwN2ZmLCBXUl8xfFJEXzIsCQkwLAkJSTY5LAkJMCwJMCB9LAotIHsiZGNseiIsCQkiVSxzIiwJIAkweDcwMDAwMDI0LCAweGZjMDAwN2ZmLCBXUl8xfFJEXzIsIAkwLAkJSTY0fE41NSwJMCwJSTY5IH0sCi0reyJkY3JjIiwJCSJkLHMsdCIsCTB4NzAwMDAwMWQsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMnxSRF8zLAkwLAkJWExQLCAJCTAsCTAgfSwKLSAvKiBkY3RyIGFuZCBkY3R3IGFyZSB1c2VkIG9uIHRoZSByNTAwMC4gICovCi0geyJkY3RyIiwJCSJvKGIpIiwJIAkweGJjMDUwMDAwLCAweGZjMWYwMDAwLCBSRF8yLAkJCTAsCQlJMywJCTAsCTAgfSwKLSB7ImRjdHciLAkJIm8oYikiLAkJMHhiYzA5MDAwMCwgMHhmYzFmMDAwMCwgUkRfMiwJCQkwLAkJSTMsCQkwLAkwIH0sCi1AQCAtMTA2Nyw2ICsxMDcwLDcgQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQotIHsiZG1mYzAiLAkJInQsRyxIIiwJMHg0MDIwMDAwMCwgMHhmZmUwMDdmOCwJV1JfMXxSRF9DMHxMQywJCTAsCQlJNjQsCQkwLAkwIH0sCi0geyJkbWZnYzAiLAkJInQsRyIsCQkweDQwNjAwMTAwLCAweGZmZTAwN2ZmLCBXUl8xfFJEX0MwfExDLAkJMCwJCTAsCQlJVklSVDY0LCAwIH0sCi0geyJkbWZnYzAiLAkJInQsRyxIIiwJMHg0MDYwMDEwMCwgMHhmZmUwMDdmOCwgV1JfMXxSRF9DMHxMQywJCTAsCQkwLAkJSVZJUlQ2NCwgMCB9LAotK3siZG1mdXIiLAkJInQsZCIsCQkweDcwMDAwMDFlLCAweGZmZTAwN2ZmLCBXUl8xLAkJCTAsCQlYTFAsCQkwLAkwIH0sCi0geyJkbXQiLAkJCSIiLAkJMHg0MTYwMGJjMSwgMHhmZmZmZmZmZiwgVFJBUCwJCQkwLAkJMCwJCU1UMzIsCTAgfSwKLSB7ImRtdCIsCQkJInQiLAkJMHg0MTYwMGJjMSwgMHhmZmUwZmZmZiwgV1JfMXxUUkFQLAkJMCwJCTAsCQlNVDMyLAkwIH0sCi0geyJkbXRjMCIsCQkidCxHIiwJCTB4NDBhMDAwMDAsIDB4ZmZlMDA3ZmYsCVJEXzF8V1JfQzB8V1JfQ0N8Q00sCTAsCQlJMywJCTAsCUVFIH0sCi1AQCAtMTA4Miw2ICsxMDg2LDggQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQotIC8qIGRtZmMzIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHRhYmxlLiAgKi8KLSAvKiBkbXRjMyBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSB0YWJsZS4gICovCi0geyJkbXVoIiwJCSJkLHMsdCIsCTB4MDAwMDAwZGMsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMnxSRF8zLAkJMCwJCUk2OSwJCTAsCTAgfSwKLSt7ImRtdHVyIiwJCSJ0LGQiLAkJMHg3MDAwMDAxZiwgMHhmZmUwMDdmZiwJUkRfMSwJCQkwLAkJWExQLAkJMCwJMCB9LAotK3siZG11bCIsCQkiZCxzLHQiLAkweDcwMDAwMDA2LCAweGZjMDAwN2ZmLAlXUl8xfFJEXzJ8UkRfMywJCTAsCQlYTFAsCQkwLAkwIH0sCi0geyJkbXVsIiwJCSJkLHMsdCIsCTB4MDAwMDAwOWMsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMnxSRF8zLAkJMCwJCUk2OSwJCTAsCTAgfSwKLSB7ImRtdWwiLAkJImQsdix0IiwJMHg3MDAwMDAwMywgMHhmYzAwMDdmZiwgV1JfMXxSRF8yfFJEXzN8V1JfSElMTywJMCwJCUlPQ1QsCQkwLAkwIH0sCi0geyJkbXVsIiwJCSJkLHYsdCIsCTAsICAgIChpbnQpIE1fRE1VTCwJSU5TTl9NQUNSTywJCTAsCQlJMywJCTAsCU0zMnxJNjkgfSwKLUBAIC0xMjM1LDkgKzEyNDEsOSBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9Ci0geyJsZCIsCQkJInMsLWIoK1IpIiwJMHhlYzE4MDAwMCwgMHhmYzFjMDAwMCwgV1JfMSwJCQlSRF9wYywJCUk2OSwJCTAsCTAgfSwKLSB7ImxkIiwJCQkidCxBKGIpIiwJMCwgICAgKGludCkgTV9MRF9BQiwJSU5TTl9NQUNSTywJCTAsCQlJMSwJCTAsCTAgfSwKLSB7ImxkIiwJCQkidCxvKGIpIiwJMHhkYzAwMDAwMCwgMHhmYzAwMDAwMCwgV1JfMXxSRF8zfExNLAkJMCwJCUkzLAkJMCwJMCB9LAotLXsibGRhZGR3IiwJCSJ0LGIiLAkJMHg3MDAwMDAxMCwgMHhmYzAwZmZmZiwJTU9EXzF8UkRfMnxMTXxTTSwJMCwJCVhMUiwJCTAsCTAgfSwKLS17ImxkYWRkd3UiLAkJInQsYiIsCQkweDcwMDAwMDExLCAweGZjMDBmZmZmLAlNT0RfMXxSRF8yfExNfFNNLAkwLAkJWExSLAkJMCwJMCB9LAotLXsibGRhZGRkIiwJCSJ0LGIiLAkJMHg3MDAwMDAxMiwgMHhmYzAwZmZmZiwJTU9EXzF8UkRfMnxMTXxTTSwJMCwJCVhMUiwJCTAsCTAgfSwKLSt7ImxkYWRkdyIsCQkidCxiIiwJCTB4NzAwMDAwMTAsIDB4ZmMwMGZmZmYsCU1PRF8xfFJEXzJ8U00sCQkwLAkJWExSfFhMUCwJMCwJMCB9LAotK3sibGRhZGR3dSIsCQkidCxiIiwJCTB4NzAwMDAwMTEsIDB4ZmMwMGZmZmYsCU1PRF8xfFJEXzJ8U00sCQkwLAkJWExSfFhMUCwJMCwJMCB9LAotK3sibGRhZGRkIiwJCSJ0LGIiLAkJMHg3MDAwMDAxMiwgMHhmYzAwZmZmZiwJTU9EXzF8UkRfMnxTTSwJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCi0geyJsZGMxIiwJCSJULG8oYikiLAkweGQ0MDAwMDAwLCAweGZjMDAwMDAwLCBXUl8xfFJEXzN8Q0xEfEZQX0QsCTAsCQlJMiwJCTAsCVNGIH0sCi0geyJsZGMxIiwJCSJFLG8oYikiLAkweGQ0MDAwMDAwLCAweGZjMDAwMDAwLCBXUl8xfFJEXzN8Q0xEfEZQX0QsCTAsCQlJMiwJCTAsCVNGIH0sCi0geyJsZGMxIiwJCSJULEEoYikiLAkwLCAgICAoaW50KSBNX0xEQzFfQUIsCUlOU05fTUFDUk8sCQlJTlNOMl9NX0ZQX0QsCUkyLAkJMCwJU0YgfSwKLUBAIC0xNDAyLDcgKzE0MDgsNyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9Ci0geyJtZmxvIiwJCSJkLDkiLAkJMHgwMDAwMDAxMiwgMHhmZjlmMDdmZiwgV1JfMXxSRF9MTywJCTAsCQkwLAkJRDMyLAkwIH0sCi0geyJtZmxvMSIsCQkiZCIsCQkweDcwMDAwMDEyLCAweGZmZmYwN2ZmLAlXUl8xfFJEX0xPLAkJMCwJCUVFLAkJMCwJMCB9LAotIHsibWZsaHh1IiwJCSJkIiwJCTB4MDAwMDAwNTIsIDB4ZmZmZjA3ZmYsCVdSXzF8TU9EX0hJTE8sCQkwLAkJMCwJCVNNVCwJMCB9LAotLXsibWZjciIsCQkidCxzIiwJCTB4NzAwMDAwMTgsIDB4ZmMwMGZmZmYsIFdSXzF8UkRfMiwJCTAsCQlYTFIsCQkwLAkwIH0sCi0reyJtZmNyIiwJCSJ0LHMiLAkJMHg3MDAwMDAxOCwgMHhmYzAwZmZmZiwgV1JfMSwJCQkwLAkJWExSfFhMUCwJMCwJMCB9LAotIHsibWZzYSIsCQkiZCIsCQkweDAwMDAwMDI4LCAweGZmZmYwN2ZmLAlXUl8xLAkJCTAsCQlFRSwJCTAsCTAgfSwKLSB7Im1pbi5vYiIsCQkiWCxZLFEiLAkweDc4MDAwMDA2LCAweGZjMjAwMDNmLAlXUl8xfFJEXzJ8UkRfM3xGUF9ELAkwLAkJU0IxLAkJTVgsCTAgfSwKLSB7Im1pbi5vYiIsCQkiRCxTLFEiLAkweDQ4MDAwMDA2LCAweGZjMjAwMDNmLAlXUl8xfFJEXzJ8UkRfM3xGUF9ELAkwLAkJTjU0LAkJMCwJMCB9LAotQEAgLTE0NDcsMTAgKzE0NTMsMTMgQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQotIC8qIG1vdmUgaXMgYXQgdGhlIHRvcCBvZiB0aGUgdGFibGUuICAqLwotIHsibXNnbi5xaCIsCQkiWCxZLFEiLAkweDc4MjAwMDAwLCAweGZjMjAwMDNmLAlXUl8xfFJEXzJ8UkRfM3xGUF9ELAkwLAkJMCwJCU1YLAkwIH0sCi0geyJtc2dzbmQiLAkJInQiLAkJMCwgICAgKGludCkgTV9NU0dTTkQsCUlOU05fTUFDUk8sCQkwLAkJWExSLAkJMCwJMCB9LAotK3sibXNnc25kcyIsCQkiZCx0IiwJCTB4NGEwMDAwMDEsIDB4ZmZlMDA3ZmYsCVdSXzF8UkRfMnxSRF9DMHxXUl9DMCwJMCwJCVhMUCwJCTAsCTAgfSwKLSB7Im1zZ2xkIiwJCSIiLCAJCTAsICAgIChpbnQpIE1fTVNHTEQsCUlOU05fTUFDUk8sCQkwLAkJWExSLAkJMCwJMCB9LAotIHsibXNnbGQiLAkJInQiLAkJMCwgICAgKGludCkgTV9NU0dMRF9ULAlJTlNOX01BQ1JPLAkJMCwJCVhMUiwJCTAsCTAgfSwKLS17Im1zZ3dhaXQiLAkJIiIsIAkJMCwgICAgKGludCkgTV9NU0dXQUlULAlJTlNOX01BQ1JPLAkJMCwJCVhMUiwJCTAsCTAgfSwKLS17Im1zZ3dhaXQiLAkJInQiLAkJMCwgICAgKGludCkgTV9NU0dXQUlUX1QsSU5TTl9NQUNSTywJCTAsCQlYTFIsCQkwLAkwIH0sCi0reyJtc2dsZHMiLAkJImQsdCIsCQkweDRhMDAwMDAyLCAweGZmZTAwN2ZmLAlXUl8xfFJEXzJ8UkRfQzB8V1JfQzAsCTAsCQlYTFAsCQkwLAkwIH0sCi0reyJtc2d3YWl0IiwJCSIiLAkJMCwgICAgKGludCkgTV9NU0dXQUlULCAgSU5TTl9NQUNSTywJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCi0reyJtc2d3YWl0IiwJCSJ0IiwJCTAsICAgIChpbnQpIE1fTVNHV0FJVF9ULElOU05fTUFDUk8sCQkwLAkJWExSfFhMUCwJMCwJMCB9LAotK3sibXNnc3luYyIsCQkiIiwJCTB4NGEwMDAwMDQsIDB4ZmZmZmZmZmYsMCwJCQkwLAkJWExQLAkJMCwJMCB9LAotIHsibXN1Yi5kIiwJCSJELFIsUyxUIiwJMHg0YzAwMDAyOSwgMHhmYzAwMDAzZiwgV1JfMXxSRF8yfFJEXzN8UkRfNHxGUF9ELCAwLAkJSTRfMzMsCQkwLAlJMzcgfSwKLSB7Im1zdWIuZCIsCQkiRCxTLFQiLAkweDQ2MjAwMDE5LCAweGZmZTAwMDNmLAlXUl8xfFJEXzJ8UkRfM3xGUF9ELAkwLAkJSUwyRSwJCTAsCTAgfSwKLSB7Im1zdWIuZCIsCQkiRCxTLFQiLAkweDcyMjAwMDE5LCAweGZmZTAwMDNmLAlXUl8xfFJEXzJ8UkRfM3xGUF9ELAkwLAkJSUwyRiwJCTAsCTAgfSwKLUBAIC0xNTAwLDcgKzE1MDksNyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9Ci0geyJtdGxvIiwJCSJzLDciLAkJMHgwMDAwMDAxMywgMHhmYzFmZTdmZiwgUkRfMXxXUl9MTywJCTAsCQkwLAkJRDMyLAkwIH0sCi0geyJtdGxvMSIsCQkicyIsCQkweDcwMDAwMDEzLCAweGZjMWZmZmZmLAlSRF8xfFdSX0xPLAkJMCwJCUVFLAkJMCwJMCB9LAotIHsibXRsaHgiLAkJInMiLAkJMHgwMDAwMDA1MywgMHhmYzFmZmZmZiwJUkRfMXxNT0RfSElMTywJCTAsCQkwLAkJU01ULAkwIH0sCi0teyJtdGNyIiwJCSJ0LHMiLAkJMHg3MDAwMDAxOSwgMHhmYzAwZmZmZiwgUkRfMXxSRF8yLAkJMCwJCVhMUiwJCTAsCTAgfSwKLSt7Im10Y3IiLAkJInQscyIsCQkweDcwMDAwMDE5LCAweGZjMDBmZmZmLCBSRF8xLAkJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCi0geyJtdG0wIiwJCSJzIiwJCTB4NzAwMDAwMDgsIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCi0geyJtdG0wIiwgICAgCQkicyx0IiwJCTB4NzAwMDAwMDgsIDB4ZmMwMGZmZmYsIFJEXzF8UkRfMiwJCTAsCQlJT0NUMywJCTAsCTAgfSwKLSB7Im10bTEiLAkJInMiLAkJMHg3MDAwMDAwYywgMHhmYzFmZmZmZiwgUkRfMSwJCQkwLAkJSU9DVCwJCTAsCTAgfSwKLUBAIC0xOTM3LDkgKzE5NDYsOSBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9Ci0geyJzdXhjMSIsCQkiUyx0KGIpIiwJMHg0YzAwMDAwZCwgMHhmYzAwMDdmZiwgUkRfMXxSRF8yfFJEXzN8U018RlBfRCwJMCwJCUk1XzMzfE41NSwJMCwJSTM3fSwKLSB7InN3IiwJCQkidCxvKGIpIiwJMHhhYzAwMDAwMCwgMHhmYzAwMDAwMCwJUkRfMXxSRF8zfFNNLAkJMCwJCUkxLAkJMCwJMCB9LAotIHsic3ciLAkJCSJ0LEEoYikiLAkwLCAgICAoaW50KSBNX1NXX0FCLAlJTlNOX01BQ1JPLAkJMCwJCUkxLAkJMCwJMCB9LAotLXsic3dhcHciLAkJInQsYiIsCQkweDcwMDAwMDE0LCAweGZjMDBmZmZmLCBNT0RfMXxSRF8yfExNfFNNLAkwLAkJWExSLAkJMCwJMCB9LAotLXsic3dhcHd1IiwJCSJ0LGIiLAkJMHg3MDAwMDAxNSwgMHhmYzAwZmZmZiwgTU9EXzF8UkRfMnxMTXxTTSwJMCwJCVhMUiwJCTAsCTAgfSwKLS17InN3YXBkIiwJCSJ0LGIiLAkJMHg3MDAwMDAxNiwgMHhmYzAwZmZmZiwgTU9EXzF8UkRfMnxMTXxTTSwJMCwJCVhMUiwJCTAsCTAgfSwKLSt7InN3YXB3IiwJCSJ0LGIiLAkJMHg3MDAwMDAxNCwgMHhmYzAwZmZmZiwgTU9EXzF8UkRfMnxTTSwJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCi0reyJzd2Fwd3UiLAkJInQsYiIsCQkweDcwMDAwMDE1LCAweGZjMDBmZmZmLCBNT0RfMXxSRF8yfFNNLAkJMCwJCVhMUnxYTFAsCTAsCTAgfSwKLSt7InN3YXBkIiwJCSJ0LGIiLAkJMHg3MDAwMDAxNiwgMHhmYzAwZmZmZiwgTU9EXzF8UkRfMnxTTSwJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCi0geyJzd2MwIiwJCSJFLG8oYikiLAkweGUwMDAwMDAwLCAweGZjMDAwMDAwLAlSRF8zfFJEX0MwfFNNLAkJMCwJCUkxLAkJMCwJSU9DVHxJT0NUUHxJT0NUMnxJMzcgfSwKLSB7InN3YzAiLAkJIkUsQShiKSIsCTAsICAgIChpbnQpIE1fU1dDMF9BQiwJSU5TTl9NQUNSTywJCTAsCQlJMSwJCTAsCUlPQ1R8SU9DVFB8SU9DVDJ8STM3IH0sCi0geyJzd2MxIiwJCSJULG8oYikiLAkweGU0MDAwMDAwLCAweGZjMDAwMDAwLAlSRF8xfFJEXzN8U018RlBfUywJMCwJCUkxLAkJMCwJMCB9LAotLS0gCi0yLjEyLjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEzLWZpeC10aGUtaW5jb3JyZWN0LWFzc2VtYmxpbmctZm9yLXBwYy13YWl0LW1uZW1vbmljLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEzLWZpeC10aGUtaW5jb3JyZWN0LWFzc2VtYmxpbmctZm9yLXBwYy13YWl0LW1uZW1vbmljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NzM3NmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTMtZml4LXRoZS1pbmNvcnJlY3QtYXNzZW1ibGluZy1mb3ItcHBjLXdhaXQtbW5lbW9uaWMucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRnJvbSBlNDYyMDJiZWNhYjYyNWM2YzA4Y2FmOTFlMDhjY2JiYzFiZjc5OWM0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogWmhlbmh1YSBMdW8gPHpoZW5odWEubHVvQG54cC5jb20+CitEYXRlOiBTYXQsIDExIEp1biAyMDE2IDIyOjA4OjI5IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMTMvMTVdIGZpeCB0aGUgaW5jb3JyZWN0IGFzc2VtYmxpbmcgZm9yIHBwYyB3YWl0IG1uZW1vbmljCisKK1NpZ25lZC1vZmYtYnk6IFpoZW5odWEgTHVvIDx6aGVuaHVhLmx1b0BueHAuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIG9wY29kZXMvcHBjLW9wYy5jIHwgMyArLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9vcGNvZGVzL3BwYy1vcGMuYyBiL29wY29kZXMvcHBjLW9wYy5jCitpbmRleCA0MjYyNjFhYjIxLi4wZDM1OTE2Y2RkIDEwMDY0NAorLS0tIGEvb3Bjb2Rlcy9wcGMtb3BjLmMKKysrKyBiL29wY29kZXMvcHBjLW9wYy5jCitAQCAtNDg4MSw3ICs0ODgxLDYgQEAgY29uc3Qgc3RydWN0IHBvd2VycGNfb3Bjb2RlIHBvd2VycGNfb3Bjb2Rlc1tdID0geworIHsibGRlcHgiLAlYKDMxLDI5KSwJWF9NQVNLLAkgIEU1MDBNQ3xQUENBMiwgMCwJCXtSVCwgUkEwLCBSQn19LAorIAorIHsid2FpdGFzZWMiLAlYKDMxLDMwKSwgICAgICBYUlRSQVJCX01BU0ssIFBPV0VSOCwJUE9XRVI5LAkJezB9fSwKKy17IndhaXQiLAlYKDMxLDMwKSwJWFdDX01BU0ssICAgIFBPV0VSOSwJMCwJCXtXQ319LAorIAorIHsibHdlcHgiLAlYKDMxLDMxKSwJWF9NQVNLLAkgIEU1MDBNQ3xQUENBMiwgMCwJCXtSVCwgUkEwLCBSQn19LAorIAorQEAgLTQ5MzUsNyArNDkzNCw3IEBAIGNvbnN0IHN0cnVjdCBwb3dlcnBjX29wY29kZSBwb3dlcnBjX29wY29kZXNbXSA9IHsKKyAKKyB7IndhaXRyc3YiLAlYKDMxLDYyKXwoMTw8MjEpLCAweGZmZmZmZmZmLCBFNTAwTUN8UFBDQTIsIDAsCQl7MH19LAorIHsid2FpdGltcGwiLAlYKDMxLDYyKXwoMjw8MjEpLCAweGZmZmZmZmZmLCBFNTAwTUN8UFBDQTIsIDAsCQl7MH19LAorLXsid2FpdCIsCVgoMzEsNjIpLAlYV0NfTUFTSywgICAgRTUwME1DfFBQQ0EyLCAwLAkJe1dDfX0sCisreyJ3YWl0IiwJWCgzMSw2MiksCVhXQ19NQVNLLCAgICBFNTAwTUN8UFBDQTJ8UE9XRVI5LCAwLAl7V0N9fSwKKyAKKyB7ImRjYnN0ZXAiLAlYUlQoMzEsNjMsMCksCVhSVF9NQVNLLCAgICBFNTAwTUN8UFBDQTIsIDAsCQl7UkEwLCBSQn19LAorIAorLS0gCisyLjE0LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE0LURldGVjdC02NC1iaXQtTUlQUy10YXJnZXRzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE0LURldGVjdC02NC1iaXQtTUlQUy10YXJnZXRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYjEwNjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTQtRGV0ZWN0LTY0LWJpdC1NSVBTLXRhcmdldHMucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorRnJvbSBiZjIwZDU4MjM2NjJkMWYyZWI0N2RlMmNkZmQxNzM2MjdhMjA1YjE3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMzEgTWFyIDIwMTcgMTE6NDI6MDMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAxNC8xNV0gRGV0ZWN0IDY0LWJpdCBNSVBTIHRhcmdldHMKKworQWRkIG1pcHM2NCB0YXJnZXQgdHJpcGxldHMgYW5kIGRlZmF1bHQgdG8gTjY0CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCitodHRwczovL3NvdXJjZXdhcmUub3JnL21sL2JpbnV0aWxzLzIwMTYtMDgvbXNnMDAwNDguaHRtbAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ29sZC9jb25maWd1cmUudGd0IHwgMTQgKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ29sZC9jb25maWd1cmUudGd0IGIvZ29sZC9jb25maWd1cmUudGd0CitpbmRleCAzZDYzMDI3Mjk3Li5jMWY5MmExMzYwIDEwMDY0NAorLS0tIGEvZ29sZC9jb25maWd1cmUudGd0CisrKysgYi9nb2xkL2NvbmZpZ3VyZS50Z3QKK0BAIC0xNTMsNiArMTUzLDEzIEBAIGFhcmNoNjQqLSopCisgIHRhcmdfYmlnX2VuZGlhbj1mYWxzZQorICB0YXJnX2V4dHJhX2JpZ19lbmRpYW49dHJ1ZQorICA7OworK21pcHMqNjQqZWwqLSotKnxtaXBzKjY0KmxlKi0qLSopCisrIHRhcmdfb2JqPW1pcHMKKysgdGFyZ19tYWNoaW5lPUVNX01JUFNfUlMzX0xFCisrIHRhcmdfc2l6ZT02NAorKyB0YXJnX2JpZ19lbmRpYW49ZmFsc2UKKysgdGFyZ19leHRyYV9iaWdfZW5kaWFuPXRydWUKKysgOzsKKyBtaXBzKmVsKi0qLSp8bWlwcypsZSotKi0qKQorICB0YXJnX29iaj1taXBzCisgIHRhcmdfbWFjaGluZT1FTV9NSVBTX1JTM19MRQorQEAgLTE2MCw2ICsxNjcsMTMgQEAgbWlwcyplbCotKi0qfG1pcHMqbGUqLSotKikKKyAgdGFyZ19iaWdfZW5kaWFuPWZhbHNlCisgIHRhcmdfZXh0cmFfYmlnX2VuZGlhbj10cnVlCisgIDs7CisrbWlwcyo2NCotKi0qKQorKyB0YXJnX29iaj1taXBzCisrIHRhcmdfbWFjaGluZT1FTV9NSVBTCisrIHRhcmdfc2l6ZT02NAorKyB0YXJnX2JpZ19lbmRpYW49dHJ1ZQorKyB0YXJnX2V4dHJhX2JpZ19lbmRpYW49ZmFsc2UKKysgOzsKKyBtaXBzKi0qLSopCisgIHRhcmdfb2JqPW1pcHMKKyAgdGFyZ19tYWNoaW5lPUVNX01JUFMKKy0tIAorMi4xNC4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxNC1maXgtdGhlLWluY29ycmVjdC1hc3NlbWJsaW5nLWZvci1wcGMtd2FpdC1tbmVtb25pYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxNC1maXgtdGhlLWluY29ycmVjdC1hc3NlbWJsaW5nLWZvci1wcGMtd2FpdC1tbmVtb25pYy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI5NWEwYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTQtZml4LXRoZS1pbmNvcnJlY3QtYXNzZW1ibGluZy1mb3ItcHBjLXdhaXQtbW5lbW9uaWMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi1Gcm9tIGE5MTc3MTUwZjgwOGQ3ZTYyODVlMTAxMWM4NWQwY2U4OTAzN2I1NTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBaaGVuaHVhIEx1byA8emhlbmh1YS5sdW9AbnhwLmNvbT4KLURhdGU6IFNhdCwgMTEgSnVuIDIwMTYgMjI6MDg6MjkgLTA1MDAKLVN1YmplY3Q6IFtQQVRDSCAxNC8xNV0gZml4IHRoZSBpbmNvcnJlY3QgYXNzZW1ibGluZyBmb3IgcHBjIHdhaXQgbW5lbW9uaWMKLQotU2lnbmVkLW9mZi1ieTogWmhlbmh1YSBMdW8gPHpoZW5odWEubHVvQG54cC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gb3Bjb2Rlcy9wcGMtb3BjLmMgfCAzICstLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL29wY29kZXMvcHBjLW9wYy5jIGIvb3Bjb2Rlcy9wcGMtb3BjLmMKLWluZGV4IDMwZmQ3ODkxODIuLmYyNzA4ZTIyNzYgMTAwNjQ0Ci0tLS0gYS9vcGNvZGVzL3BwYy1vcGMuYwotKysrIGIvb3Bjb2Rlcy9wcGMtb3BjLmMKLUBAIC00ODc2LDcgKzQ4NzYsNiBAQCBjb25zdCBzdHJ1Y3QgcG93ZXJwY19vcGNvZGUgcG93ZXJwY19vcGNvZGVzW10gPSB7Ci0geyJsZGVweCIsCVgoMzEsMjkpLAlYX01BU0ssCSAgRTUwME1DfFBQQ0EyLCAwLAkJe1JULCBSQTAsIFJCfX0sCi0gCi0geyJ3YWl0YXNlYyIsCVgoMzEsMzApLCAgICAgIFhSVFJBUkJfTUFTSywgUE9XRVI4LAlQT1dFUjksCQl7MH19LAotLXsid2FpdCIsCVgoMzEsMzApLAlYV0NfTUFTSywgICAgUE9XRVI5LAkwLAkJe1dDfX0sCi0gCi0geyJsd2VweCIsCVgoMzEsMzEpLAlYX01BU0ssCSAgRTUwME1DfFBQQ0EyLCAwLAkJe1JULCBSQTAsIFJCfX0sCi0gCi1AQCAtNDkzMCw3ICs0OTI5LDcgQEAgY29uc3Qgc3RydWN0IHBvd2VycGNfb3Bjb2RlIHBvd2VycGNfb3Bjb2Rlc1tdID0gewotIAotIHsid2FpdHJzdiIsCVgoMzEsNjIpfCgxPDwyMSksIDB4ZmZmZmZmZmYsIEU1MDBNQ3xQUENBMiwgMCwJCXswfX0sCi0geyJ3YWl0aW1wbCIsCVgoMzEsNjIpfCgyPDwyMSksIDB4ZmZmZmZmZmYsIEU1MDBNQ3xQUENBMiwgMCwJCXswfX0sCi0teyJ3YWl0IiwJWCgzMSw2MiksCVhXQ19NQVNLLCAgICBFNTAwTUN8UFBDQTIsIDAsCQl7V0N9fSwKLSt7IndhaXQiLAlYKDMxLDYyKSwJWFdDX01BU0ssICAgIEU1MDBNQ3xQUENBMnxQT1dFUjksIDAsCXtXQ319LAotIAotIHsiZGNic3RlcCIsCVhSVCgzMSw2MywwKSwJWFJUX01BU0ssICAgIEU1MDBNQ3xQUENBMiwgMCwJCXtSQTAsIFJCfX0sCi0gCi0tLSAKLTIuMTIuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTUtc3luYy13aXRoLU9FLWxpYnRvb2wtY2hhbmdlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxNS1zeW5jLXdpdGgtT0UtbGlidG9vbC1jaGFuZ2VzLnBhdGNoCmluZGV4IDE1NTkwMzguLjJjODkwMGMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxNS1zeW5jLXdpdGgtT0UtbGlidG9vbC1jaGFuZ2VzLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxNS1zeW5jLXdpdGgtT0UtbGlidG9vbC1jaGFuZ2VzLnBhdGNoCkBAIC0xLDQgKzEsNCBAQAotRnJvbSA1OGNkYjI4ZWQ3MWNiNTdiNGEwZWExYjQxMmE3MDhmZGIwZjg0YzI3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSA5YjQ1NmEwZTRmMjg0ZmQ0MWFjMzY1OTUxNDRlZDQ0ZGM4MjQxMGVlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KIERhdGU6IE1vbiwgNiBNYXIgMjAxNyAyMzozMzoyNyAtMDgwMAogU3ViamVjdDogW1BBVENIIDE1LzE1XSBzeW5jIHdpdGggT0UgbGlidG9vbCBjaGFuZ2VzCkBAIC04NSw1ICs4NSw1IEBACiAgCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgogIAkgIGNhc2UgIiRmaW5hbGl6ZV9wZXJtX3JwYXRoICIgaW4KIC0tIAotMi4xMi4wCisyLjE0LjAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE2LURldGVjdC02NC1iaXQtTUlQUy10YXJnZXRzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE2LURldGVjdC02NC1iaXQtTUlQUy10YXJnZXRzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjJlYjg0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxNi1EZXRlY3QtNjQtYml0LU1JUFMtdGFyZ2V0cy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLUZyb20gYzNlYmRlNWQ4Y2MzYjAwOTI5NjZiNGQ3MjVjYWQ3Y2ZkMDc0ZmQ4ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDMxIE1hciAyMDE3IDExOjQyOjAzIC0wNzAwCi1TdWJqZWN0OiBbUEFUQ0ggMTYvMTZdIERldGVjdCA2NC1iaXQgTUlQUyB0YXJnZXRzCi0KLUFkZCBtaXBzNjQgdGFyZ2V0IHRyaXBsZXRzIGFuZCBkZWZhdWx0IHRvIE42NAotCi1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAotaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9tbC9iaW51dGlscy8yMDE2LTA4L21zZzAwMDQ4Lmh0bWwKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotIGdvbGQvY29uZmlndXJlLnRndCB8IDE0ICsrKysrKysrKysrKysrCi0gMSBmaWxlIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL2dvbGQvY29uZmlndXJlLnRndCBiL2dvbGQvY29uZmlndXJlLnRndAotaW5kZXggM2Q2MzAyNzI5Ny4uYzFmOTJhMTM2MCAxMDA2NDQKLS0tLSBhL2dvbGQvY29uZmlndXJlLnRndAotKysrIGIvZ29sZC9jb25maWd1cmUudGd0Ci1AQCAtMTUzLDYgKzE1MywxMyBAQCBhYXJjaDY0Ki0qKQotICB0YXJnX2JpZ19lbmRpYW49ZmFsc2UKLSAgdGFyZ19leHRyYV9iaWdfZW5kaWFuPXRydWUKLSAgOzsKLSttaXBzKjY0KmVsKi0qLSp8bWlwcyo2NCpsZSotKi0qKQotKyB0YXJnX29iaj1taXBzCi0rIHRhcmdfbWFjaGluZT1FTV9NSVBTX1JTM19MRQotKyB0YXJnX3NpemU9NjQKLSsgdGFyZ19iaWdfZW5kaWFuPWZhbHNlCi0rIHRhcmdfZXh0cmFfYmlnX2VuZGlhbj10cnVlCi0rIDs7Ci0gbWlwcyplbCotKi0qfG1pcHMqbGUqLSotKikKLSAgdGFyZ19vYmo9bWlwcwotICB0YXJnX21hY2hpbmU9RU1fTUlQU19SUzNfTEUKLUBAIC0xNjAsNiArMTY3LDEzIEBAIG1pcHMqZWwqLSotKnxtaXBzKmxlKi0qLSopCi0gIHRhcmdfYmlnX2VuZGlhbj1mYWxzZQotICB0YXJnX2V4dHJhX2JpZ19lbmRpYW49dHJ1ZQotICA7OwotK21pcHMqNjQqLSotKikKLSsgdGFyZ19vYmo9bWlwcwotKyB0YXJnX21hY2hpbmU9RU1fTUlQUwotKyB0YXJnX3NpemU9NjQKLSsgdGFyZ19iaWdfZW5kaWFuPXRydWUKLSsgdGFyZ19leHRyYV9iaWdfZW5kaWFuPWZhbHNlCi0rIDs7Ci0gbWlwcyotKi0qKQotICB0YXJnX29iaj1taXBzCi0gIHRhcmdfbWFjaGluZT1FTV9NSVBTCi0tLSAKLTIuMTIuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTctYmZkLUltcHJvdmUtbG9va3VwLW9mLWZpbGUtbGluZS1pbmZvcm1hdGlvbi1mb3ItZXJyby5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxNy1iZmQtSW1wcm92ZS1sb29rdXAtb2YtZmlsZS1saW5lLWluZm9ybWF0aW9uLWZvci1lcnJvLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2FkMTBhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxNy1iZmQtSW1wcm92ZS1sb29rdXAtb2YtZmlsZS1saW5lLWluZm9ybWF0aW9uLWZvci1lcnJvLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotRnJvbSAzMjM5YTQyMzFmZjc5YmY4YjY3YjhmYWFmNDE0YjE2Njc0ODYxNjdjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQW5kcmV3IEJ1cmdlc3MgPGFuZHJldy5idXJnZXNzQGVtYmVjb3NtLmNvbT4KLURhdGU6IE1vbiwgMTkgRGVjIDIwMTYgMTU6Mjc6NTkgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gYmZkOiBJbXByb3ZlIGxvb2t1cCBvZiBmaWxlIC8gbGluZSBpbmZvcm1hdGlvbiBmb3IgZXJyb3JzCi0KLVdoZW4gbG9va2luZyB1cCBmaWxlIGFuZCBsaW5lIGluZm9ybWF0aW9uICh1c2VkIGZyb20gdGhlIGxpbmtlciB0bwotcmVwb3J0IGVycm9yIG1lc3NhZ2VzKSBpZiBubyBzeW1ib2wgaXMgcGFzc2VkIGluLCB0aGVuIHVzZSB0aGUgc3ltYm9sCi1saXN0IHRvIGxvb2sgZm9yIGEgbWF0Y2hpbmcgc3ltYm9sLgotCi1JZiBhIG1hdGNoaW5nIHN5bWJvbCBpcyBmb3VuZCB0aGVuIHVzZSB0aGlzIHRvIGxvb2sgdXAgdGhlIGZpbGUgLyBsaW5lCi1pbmZvcm1hdGlvbi4KLQotVGhpcyBzaG91bGQgaW1wcm92ZSBlcnJvcnMgd2hlbiBsb29raW5nIHVwIGZpbGUgLyBsaW5lIGluZm9ybWF0aW9uIGZvcgotZGF0YSBzZWN0aW9ucy4gIEhvcGVmdWxseSB3ZSBzaG91bGQgZmluZCBhIG1hdGNoaW5nIGRhdGEgc3ltYm9sLCB3aGljaAotc2hvdWxkLCBpbiB0dXJuICh3ZSBob3BlKSBtYXRjaCBhIERXX1RBR192YXJpYWJsZSBpbiB0aGUgRFdBUkYsIHRoaXMKLXNob3VsZCBhbGxvdyB1cyB0byBnaXZlIGFjY3VyYXRlIGZpbGUgLyBsaW5lIGVycm9ycyBmb3IgZGF0YSBzeW1ib2xzLgotCi1BcyB0aGUgaG9wZSBpcyB0byBmaW5kIGEgbWF0Y2hpbmcgRFdfVEFHX3ZhcmlhYmxlIGluIHRoZSBEV0FSRiB0aGVuIHdlCi1pZ25vcmUgc2VjdGlvbiBzeW1ib2xzLCBhbmQgcHJlZmVyIGdsb2JhbCBzeW1ib2xzIHRvIGxvY2Fscy4KLQotQ1ZFOiBDVkUtMjAxNy04MzkyCi1VcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkCi0KLVNpZ25lZC1vZmYtYnk6IEZhbiBYaW4gPGZhbi54aW5AanAuZnVqaXRzdS5jb20+Ci0tLS0KLSBiZmQvZHdhcmYyLmMgICAgICAgICAgICAgICAgICAgfCAzMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotIDEgZmlsZXMgY2hhbmdlZCwgMzIgaW5zZXJ0aW9ucygrKQotCi0KLWRpZmYgLS1naXQgYS9iZmQvZHdhcmYyLmMgYi9iZmQvZHdhcmYyLmMKLWluZGV4IDAzNDQ3YTkuLjliYjgxMjYgMTAwNjQ0Ci0tLS0gYS9iZmQvZHdhcmYyLmMKLSsrKyBiL2JmZC9kd2FyZjIuYwotQEAgLTQxNTUsNiArNDE1NSwzOCBAQCBfYmZkX2R3YXJmMl9maW5kX25lYXJlc3RfbGluZSAoYmZkICphYmZkLAotICAgICB7Ci0gICAgICAgQkZEX0FTU0VSVCAoc2VjdGlvbiAhPSBOVUxMICYmIGZ1bmN0aW9ubmFtZV9wdHIgIT0gTlVMTCk7Ci0gICAgICAgYWRkciA9IG9mZnNldDsKLSsKLSsgICAgICAvKiBJZiB3ZSBoYXZlIG5vIFNZTUJPTCBidXQgdGhlIHNlY3Rpb24gd2UncmUgbG9va2luZyBhdCBpcyBub3QgYQotKyAgICAgICAgIGNvZGUgc2VjdGlvbiwgdGhlbiB0YWtlIGEgbG9vayB0aHJvdWdoIHRoZSBsaXN0IG9mIHN5bWJvbHMgdG8gc2VlCi0rICAgICAgICAgaWYgd2UgaGF2ZSBhIHN5bWJvbCBhdCB0aGUgYWRkcmVzcyB3ZSdyZSBsb29raW5nIGZvci4gIElmIHdlIGRvCi0rICAgICAgICAgdGhlbiB1c2UgdGhpcyB0byBsb29rIHVwIGxpbmUgaW5mb3JtYXRpb24uICBUaGlzIHdpbGwgYWxsb3cgdXMgdG8KLSsgICAgICAgICBnaXZlIGZpbGUgYW5kIGxpbmUgcmVzdWx0cyBmb3IgZGF0YSBzeW1ib2xzLiAgV2UgZXhjbHVkZSBjb2RlCi0rICAgICAgICAgc3ltYm9scyBoZXJlLCBpZiB3ZSBsb29rIHVwIGEgZnVuY3Rpb24gc3ltYm9sIGFuZCB0aGVuIGxvb2sgdXAgdGhlCi0rICAgICAgICAgbGluZSBpbmZvcm1hdGlvbiB3ZSdsbCBhY3R1YWxseSByZXR1cm4gdGhlIGxpbmUgbnVtYmVyIGZvciB0aGUKLSsgICAgICAgICBvcGVuaW5nICd7JyByYXRoZXIgdGhhbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBsaW5lLiAgVGhpcyBpcwotKyAgICAgICAgIGJlY2F1c2UgbG9va2luZyB1cCBieSBzeW1ib2wgdXNlcyB0aGUgbGluZSB0YWJsZSwgaW4gd2hpY2ggdGhlCi0rICAgICAgICAgZmlyc3QgbGluZSBmb3IgYSBmdW5jdGlvbiBpcyB1c3VhbGx5IHRoZSBvcGVuaW5nICd7Jywgd2hpbGUKLSsgICAgICAgICBsb29raW5nIHVwIHRoZSBmdW5jdGlvbiBieSBzZWN0aW9uICsgb2Zmc2V0IHVzZXMgdGhlCi0rICAgICAgICAgRFdfQVRfZGVjbF9saW5lIGZyb20gdGhlIGZ1bmN0aW9uIERXX1RBR19zdWJwcm9ncmFtIGZvciB0aGUgbGluZSwKLSsgICAgICAgICB3aGljaCB3aWxsIGJlIHRoZSBsaW5lIG9mIHRoZSBmdW5jdGlvbiBuYW1lLiAgKi8KLSsgICAgICBpZiAoKHNlY3Rpb24tPmZsYWdzICYgU0VDX0NPREUpID09IDApCi0rCXsKLSsJICBhc3ltYm9sICoqdG1wOwotKwotKwkgIGZvciAodG1wID0gc3ltYm9sczsgKCp0bXApICE9IE5VTEw7ICsrdG1wKQotKwkgICAgaWYgKCgqdG1wKS0+dGhlX2JmZCA9PSBhYmZkCi0rCQkmJiAoKnRtcCktPnNlY3Rpb24gPT0gc2VjdGlvbgotKwkJJiYgKCp0bXApLT52YWx1ZSA9PSBvZmZzZXQKLSsJCSYmICgoKnRtcCktPmZsYWdzICYgQlNGX1NFQ1RJT05fU1lNKSA9PSAwKQotKwkgICAgICB7Ci0rCQlzeW1ib2wgPSAqdG1wOwotKwkJZG9fbGluZSA9IFRSVUU7Ci0rICAgICAgICAgICAgICAgIC8qIEZvciBsb2NhbCBzeW1ib2xzLCBrZWVwIGdvaW5nIGluIHRoZSBob3BlIHdlIGZpbmQgYQotKyAgICAgICAgICAgICAgICAgICBnbG9iYWwuICAqLwotKyAgICAgICAgICAgICAgICBpZiAoKHN5bWJvbC0+ZmxhZ3MgJiBCU0ZfR0xPQkFMKSAhPSAwKQotKyAgICAgICAgICAgICAgICAgIGJyZWFrOwotKwkgICAgICB9Ci0rCX0KLSAgICAgfQotIAotICAgaWYgKHNlY3Rpb24tPm91dHB1dF9zZWN0aW9uKQotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTgtUFItMjE0MDktc2VnZmF1bHQtaW4tX2JmZF9kd2FyZjJfZmluZF9uZWFyZXN0X2xpbmUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTgtUFItMjE0MDktc2VnZmF1bHQtaW4tX2JmZF9kd2FyZjJfZmluZF9uZWFyZXN0X2xpbmUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjYjM3ZGYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE4LVBSLTIxNDA5LXNlZ2ZhdWx0LWluLV9iZmRfZHdhcmYyX2ZpbmRfbmVhcmVzdF9saW5lLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotRnJvbSA5N2U4M2ExMDBhYTgyNTBiZTc4MzMwNGJmZTA0Mjk3NjFjNmU2YjZiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQWxhbiBNb2RyYSA8YW1vZHJhQGdtYWlsLmNvbT4KLURhdGU6IFN1biwgMjMgQXByIDIwMTcgMTM6NTU6NDkgKzA5MzAKLVN1YmplY3Q6IFtQQVRDSF0gUFIgMjE0MDksIHNlZ2ZhdWx0IGluIF9iZmRfZHdhcmYyX2ZpbmRfbmVhcmVzdF9saW5lCi0KLQlQUiAyMTQwOQotCSogZHdhcmYyLmMgKF9iZmRfZHdhcmYyX2ZpbmRfbmVhcmVzdF9saW5lKTogRG9uJ3Qgc2VnZmF1bHQgd2hlbgotCW5vIHN5bWJvbHMuCi0KLUNWRTogQ1ZFLTIwMTctODM5MgotVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZAotCi1TaWduZWQtb2ZmLWJ5OiBGYW4gWGluIDxmYW4ueGluQGpwLmZ1aml0c3UuY29tPgotLS0tCi0gYmZkL2R3YXJmMi5jICB8IDIgKy0KLSAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvYmZkL2R3YXJmMi5jIGIvYmZkL2R3YXJmMi5jCi1pbmRleCAxMzJhNjc0Li4wZWYzZTFmIDEwMDY0NAotLS0tIGEvYmZkL2R3YXJmMi5jCi0rKysgYi9iZmQvZHdhcmYyLmMKLUBAIC00MjA1LDcgKzQyMDUsNyBAQCBfYmZkX2R3YXJmMl9maW5kX25lYXJlc3RfbGluZSAoYmZkICphYmZkLAotICAgICAgICAgIGxvb2tpbmcgdXAgdGhlIGZ1bmN0aW9uIGJ5IHNlY3Rpb24gKyBvZmZzZXQgdXNlcyB0aGUKLSAgICAgICAgICBEV19BVF9kZWNsX2xpbmUgZnJvbSB0aGUgZnVuY3Rpb24gRFdfVEFHX3N1YnByb2dyYW0gZm9yIHRoZSBsaW5lLAotICAgICAgICAgIHdoaWNoIHdpbGwgYmUgdGhlIGxpbmUgb2YgdGhlIGZ1bmN0aW9uIG5hbWUuICAqLwotLSAgICAgIGlmICgoc2VjdGlvbi0+ZmxhZ3MgJiBTRUNfQ09ERSkgPT0gMCkKLSsgICAgICBpZiAoc3ltYm9scyAhPSBOVUxMICYmIChzZWN0aW9uLT5mbGFncyAmIFNFQ19DT0RFKSA9PSAwKQotIAl7Ci0gCSAgYXN5bWJvbCAqKnRtcDsKLSAKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy02OTY1LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy02OTY1LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzM0Yzk0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctNjk2NS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi1Gcm9tIGJkYzUxNjZjMjc0Yjg0MmY4M2Y4MzI4ZTdjZmFhZjgwZmQyOTkzNGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBOaWNrIENsaWZ0b24gPG5pY2tjQHJlZGhhdC5jb20+Ci1EYXRlOiBNb24sIDEzIEZlYiAyMDE3IDEzOjA4OjMyICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMS8yXSBGaXggcmVhZGVsZiB3cml0aW5nIHRvIGlsbGVnYWwgYWRkcmVzc2VzIHdoaWxzdAotIHByb2Nlc3NpbmcgY29ycnVwdCBpbnB1dCBmaWxlcyBjb250YWluaW5nIHN5bWJvbC1kaWZmZXJlbmNlIHJlbG9jYXRpb25zLgotCi0JUFIgYmludXRpbHMvMjExMzcKLQkqIHJlYWRlbGYuYyAodGFyZ2V0X3NwZWNpZmljX3JlbG9jX2hhbmRsaW5nKTogQWRkIGVuZCBwYXJhbWV0ZXIuCi0JQ2hlY2sgZm9yIGJ1ZmZlciBvdmVyZmxvdyBiZWZvcmUgd3JpdGluZyByZWxvY2F0ZWQgdmFsdWVzLgotCShhcHBseV9yZWxvY2F0aW9ucyk6IFBhc3MgZW5kIHRvIHRhcmdldF9zcGVjaWZpY19yZWxvY19oYW5kbGluZy4KLQotKGNoZXJyeSBwaWNrIGZyb20gY29tbWl0IDAzZjc3ODZlMmY0NDBiOTg5MmIxYzM0YTU4ZmIyNjIyMmNlMWI0OTMpCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFttYXN0ZXJdCi1DVkU6IENWRS0yMDE3LTY5NjUKLQotU2lnbmVkLW9mZi1ieTogWXVhbmppZSBIdWFuZyA8eXVhbmppZS5odWFuZ0B3aW5kcml2ZXIuY29tPgotLS0tCi0gYmludXRpbHMvQ2hhbmdlTG9nIHwgIDcgKysrKysrKwotIGJpbnV0aWxzL3JlYWRlbGYuYyB8IDMwICsrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQotIDIgZmlsZXMgY2hhbmdlZCwgMzIgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2JpbnV0aWxzL0NoYW5nZUxvZyBiL2JpbnV0aWxzL0NoYW5nZUxvZwotaW5kZXggZjIxODY3Zjk4Yy4uZTc4OWEzYjk5YiAxMDA2NDQKLS0tLSBhL2JpbnV0aWxzL0NoYW5nZUxvZwotKysrIGIvYmludXRpbHMvQ2hhbmdlTG9nCi1AQCAtMSwzICsxLDEwIEBACi0rMjAxNy0wMi0xMyAgTmljayBDbGlmdG9uICA8bmlja2NAcmVkaGF0LmNvbT4KLSsKLSsJUFIgYmludXRpbHMvMjExMzcKLSsJKiByZWFkZWxmLmMgKHRhcmdldF9zcGVjaWZpY19yZWxvY19oYW5kbGluZyk6IEFkZCBlbmQgcGFyYW1ldGVyLgotKwlDaGVjayBmb3IgYnVmZmVyIG92ZXJmbG93IGJlZm9yZSB3cml0aW5nIHJlbG9jYXRlZCB2YWx1ZXMuCi0rCShhcHBseV9yZWxvY2F0aW9ucyk6IFBhc3MgZW5kIHRvIHRhcmdldF9zcGVjaWZpY19yZWxvY19oYW5kbGluZy4KLSsKLSAyMDE3LTAzLTAyICBUcmlzdGFuIEdpbmdvbGQgIDxnaW5nb2xkQGFkYWNvcmUuY29tPgotIAotIAkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KLWRpZmYgLS1naXQgYS9iaW51dGlscy9yZWFkZWxmLmMgYi9iaW51dGlscy9yZWFkZWxmLmMKLWluZGV4IGI1ZjU3N2Y1YTEuLjhjZGFhZTNiOGMgMTAwNjQ0Ci0tLS0gYS9iaW51dGlscy9yZWFkZWxmLmMKLSsrKyBiL2JpbnV0aWxzL3JlYWRlbGYuYwotQEAgLTExNTg1LDYgKzExNTg1LDcgQEAgcHJvY2Vzc19zeW1pbmZvIChGSUxFICogZmlsZSBBVFRSSUJVVEVfVU5VU0VEKQotIHN0YXRpYyBiZmRfYm9vbGVhbgotIHRhcmdldF9zcGVjaWZpY19yZWxvY19oYW5kbGluZyAoRWxmX0ludGVybmFsX1JlbGEgKiByZWxvYywKLSAJCQkJdW5zaWduZWQgY2hhciAqICAgICBzdGFydCwKLSsJCQkJdW5zaWduZWQgY2hhciAqICAgICBlbmQsCi0gCQkJCUVsZl9JbnRlcm5hbF9TeW0gKiAgc3ltdGFiKQotIHsKLSAgIHVuc2lnbmVkIGludCByZWxvY190eXBlID0gZ2V0X3JlbG9jX3R5cGUgKHJlbG9jLT5yX2luZm8pOwotQEAgLTExNjI1LDEzICsxMTYyNiwxOSBAQCB0YXJnZXRfc3BlY2lmaWNfcmVsb2NfaGFuZGxpbmcgKEVsZl9JbnRlcm5hbF9SZWxhICogcmVsb2MsCi0gCSAgaGFuZGxlX3N5bV9kaWZmOgotIAkgICAgaWYgKHNhdmVkX3N5bSAhPSBOVUxMKQotIAkgICAgICB7Ci0rCQlpbnQgcmVsb2Nfc2l6ZSA9IHJlbG9jX3R5cGUgPT0gMSA/IDQgOiAyOwotIAkJYmZkX3ZtYSB2YWx1ZTsKLSAKLSAJCXZhbHVlID0gcmVsb2MtPnJfYWRkZW5kCi0gCQkgICsgKHN5bXRhYltnZXRfcmVsb2Nfc3ltaW5kZXggKHJlbG9jLT5yX2luZm8pXS5zdF92YWx1ZQotIAkJICAgICAtIHNhdmVkX3N5bS0+c3RfdmFsdWUpOwotIAotLQkJYnl0ZV9wdXQgKHN0YXJ0ICsgcmVsb2MtPnJfb2Zmc2V0LCB2YWx1ZSwgcmVsb2NfdHlwZSA9PSAxID8gNCA6IDIpOwotKwkJaWYgKHN0YXJ0ICsgcmVsb2MtPnJfb2Zmc2V0ICsgcmVsb2Nfc2l6ZSA+PSBlbmQpCi0rCQkgIC8qIFBSIDIxMTM3ICovCi0rCQkgIGVycm9yIChfKCJNU1A0MzAgc3ltIGRpZmYgcmVsb2Mgd3JpdGVzIHBhc3QgZW5kIG9mIHNlY3Rpb24gKCVwIHZzICVwKVxuIiksCi0rCQkJIHN0YXJ0ICsgcmVsb2MtPnJfb2Zmc2V0ICsgcmVsb2Nfc2l6ZSwgZW5kKTsKLSsJCWVsc2UKLSsJCSAgYnl0ZV9wdXQgKHN0YXJ0ICsgcmVsb2MtPnJfb2Zmc2V0LCB2YWx1ZSwgcmVsb2Nfc2l6ZSk7Ci0gCi0gCQlzYXZlZF9zeW0gPSBOVUxMOwotIAkJcmV0dXJuIFRSVUU7Ci1AQCAtMTE2NjIsMTMgKzExNjY5LDE4IEBAIHRhcmdldF9zcGVjaWZpY19yZWxvY19oYW5kbGluZyAoRWxmX0ludGVybmFsX1JlbGEgKiByZWxvYywKLSAJICBjYXNlIDI6IC8qIFJfTU4xMDMwMF8xNiAqLwotIAkgICAgaWYgKHNhdmVkX3N5bSAhPSBOVUxMKQotIAkgICAgICB7Ci0rCQlpbnQgcmVsb2Nfc2l6ZSA9IHJlbG9jX3R5cGUgPT0gMSA/IDQgOiAyOwotIAkJYmZkX3ZtYSB2YWx1ZTsKLSAKLSAJCXZhbHVlID0gcmVsb2MtPnJfYWRkZW5kCi0gCQkgICsgKHN5bXRhYltnZXRfcmVsb2Nfc3ltaW5kZXggKHJlbG9jLT5yX2luZm8pXS5zdF92YWx1ZQotIAkJICAgICAtIHNhdmVkX3N5bS0+c3RfdmFsdWUpOwotIAotLQkJYnl0ZV9wdXQgKHN0YXJ0ICsgcmVsb2MtPnJfb2Zmc2V0LCB2YWx1ZSwgcmVsb2NfdHlwZSA9PSAxID8gNCA6IDIpOwotKwkJaWYgKHN0YXJ0ICsgcmVsb2MtPnJfb2Zmc2V0ICsgcmVsb2Nfc2l6ZSA+PSBlbmQpCi0rCQkgIGVycm9yIChfKCJNTjEwMzAwIHN5bSBkaWZmIHJlbG9jIHdyaXRlcyBwYXN0IGVuZCBvZiBzZWN0aW9uICglcCB2cyAlcClcbiIpLAotKwkJCSBzdGFydCArIHJlbG9jLT5yX29mZnNldCArIHJlbG9jX3NpemUsIGVuZCk7Ci0rCQllbHNlCi0rCQkgIGJ5dGVfcHV0IChzdGFydCArIHJlbG9jLT5yX29mZnNldCwgdmFsdWUsIHJlbG9jX3NpemUpOwotIAotIAkJc2F2ZWRfc3ltID0gTlVMTDsKLSAJCXJldHVybiBUUlVFOwotQEAgLTExNzAzLDEyICsxMTcxNSwyMCBAQCB0YXJnZXRfc3BlY2lmaWNfcmVsb2NfaGFuZGxpbmcgKEVsZl9JbnRlcm5hbF9SZWxhICogcmVsb2MsCi0gCSAgICBicmVhazsKLSAKLSAJICBjYXNlIDB4NDE6IC8qIFJfUkw3OF9BQlMzMi4gICovCi0tCSAgICBieXRlX3B1dCAoc3RhcnQgKyByZWxvYy0+cl9vZmZzZXQsIHZhbHVlLCA0KTsKLSsJICAgIGlmIChzdGFydCArIHJlbG9jLT5yX29mZnNldCArIDQgPj0gZW5kKQotKwkgICAgICBlcnJvciAoXygiUkw3OCBzeW0gZGlmZiByZWxvYyB3cml0ZXMgcGFzdCBlbmQgb2Ygc2VjdGlvbiAoJXAgdnMgJXApXG4iKSwKLSsJCSAgICAgc3RhcnQgKyByZWxvYy0+cl9vZmZzZXQgKyAyLCBlbmQpOwotKwkgICAgZWxzZQotKwkgICAgICBieXRlX3B1dCAoc3RhcnQgKyByZWxvYy0+cl9vZmZzZXQsIHZhbHVlLCA0KTsKLSAJICAgIHZhbHVlID0gMDsKLSAJICAgIHJldHVybiBUUlVFOwotIAotIAkgIGNhc2UgMHg0MzogLyogUl9STDc4X0FCUzE2LiAgKi8KLS0JICAgIGJ5dGVfcHV0IChzdGFydCArIHJlbG9jLT5yX29mZnNldCwgdmFsdWUsIDIpOwotKwkgICAgaWYgKHN0YXJ0ICsgcmVsb2MtPnJfb2Zmc2V0ICsgMiA+PSBlbmQpCi0rCSAgICAgIGVycm9yIChfKCJSTDc4IHN5bSBkaWZmIHJlbG9jIHdyaXRlcyBwYXN0IGVuZCBvZiBzZWN0aW9uICglcCB2cyAlcClcbiIpLAotKwkJICAgICBzdGFydCArIHJlbG9jLT5yX29mZnNldCArIDIsIGVuZCk7Ci0rCSAgICBlbHNlCi0rCSAgICAgIGJ5dGVfcHV0IChzdGFydCArIHJlbG9jLT5yX29mZnNldCwgdmFsdWUsIDIpOwotIAkgICAgdmFsdWUgPSAwOwotIAkgICAgcmV0dXJuIFRSVUU7Ci0gCi1AQCAtMTIzMjUsNyArMTIzNDUsNyBAQCBhcHBseV9yZWxvY2F0aW9ucyAodm9pZCAqICAgICAgICAgICAgICAgICAgICAgZmlsZSwKLSAKLSAJICByZWxvY190eXBlID0gZ2V0X3JlbG9jX3R5cGUgKHJwLT5yX2luZm8pOwotIAotLQkgIGlmICh0YXJnZXRfc3BlY2lmaWNfcmVsb2NfaGFuZGxpbmcgKHJwLCBzdGFydCwgc3ltdGFiKSkKLSsJICBpZiAodGFyZ2V0X3NwZWNpZmljX3JlbG9jX2hhbmRsaW5nIChycCwgc3RhcnQsIGVuZCwgc3ltdGFiKSkKLSAJICAgIGNvbnRpbnVlOwotIAkgIGVsc2UgaWYgKGlzX25vbmVfcmVsb2MgKHJlbG9jX3R5cGUpKQotIAkgICAgY29udGludWU7Ci0tLSAKLTIuMTEuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTY5NjYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTY5NjYucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkNThkZjUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy02OTY2LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjQxICswLDAgQEAKLUZyb20gMzgzZWM3NTdkMjc2NTI0NDhkMTUxMTE2OWUxMTMzZjQ4NmFiZjU0ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IE5pY2sgQ2xpZnRvbiA8bmlja2NAcmVkaGF0LmNvbT4KLURhdGU6IE1vbiwgMTMgRmViIDIwMTcgMTQ6MDM6MjIgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gRml4IHJlYWQtYWZ0ZXItZnJlZSBlcnJvciBpbiByZWFkZWxmIHdoZW4gcHJvY2Vzc2luZwotIG11bHRpcGxlLCByZWxvY2F0ZWQgc2VjdGlvbnMgaW4gYW4gTVNQNDMwIGJpbmFyeS4KLQotCVBSIGJpbnV0aWxzLzIxMTM5Ci0JKiByZWFkZWxmLmMgKHRhcmdldF9zcGVjaWZpY19yZWxvY19oYW5kbGluZyk6IEFkZCBudW1fc3ltcwotCXBhcmFtZXRlci4gIENoZWNrIGZvciBzeW1ib2wgdGFibGUgb3ZlcmZsb3cgYmVmb3JlIGFjY2Vzc2luZwotCXN5bWJvbCB2YWx1ZS4gIElmIHJlbG9jIHBvaW50ZXIgaXMgTlVMTCwgZGlzY2FyZCBhbGwgc2F2ZWQgc3RhdGUuCi0JKGFwcGx5X3JlbG9jYXRpb25zKTogUGFzcyBudW1fc3ltcyB0byB0YXJnZXRfc3BlY2lmaWNfcmVsb2NfaGFuZGxpbmcuCi0JQ2FsbCB0YXJnZXRfc3BlY2lmaWNfcmVsb2NfaGFuZGxpbmcgd2l0aCBhIE5VTEwgcmVsb2MgcG9pbnRlcgotCWFmdGVyIHByb2Nlc3NpbmcgYWxsIG9mIHRoZSByZWxvY3MuCi0KLShjaGVycnkgcGljayBmcm9tIGNvbW1pdCBmODRjZTEzYjY3MDg4MDFjYTFkNjI4OWI3YzQwMDNlMmY1YTZkN2Y5KQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbbWFzdGVyXQotQ1ZFOiBDVkUtMjAxNy02OTY2Ci0KLVNpZ25lZC1vZmYtYnk6IFl1YW5qaWUgSHVhbmcgPHl1YW5qaWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KLS0tLQotIGJpbnV0aWxzL0NoYW5nZUxvZyB8ICAxMCArKysrKwotIGJpbnV0aWxzL3JlYWRlbGYuYyB8IDEwOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQotIDIgZmlsZXMgY2hhbmdlZCwgOTQgaW5zZXJ0aW9ucygrKSwgMjUgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9iaW51dGlscy9DaGFuZ2VMb2cgYi9iaW51dGlscy9DaGFuZ2VMb2cKLWluZGV4IGU3ODlhM2I5OWIuLmJkNjNjOGEwZDggMTAwNjQ0Ci0tLS0gYS9iaW51dGlscy9DaGFuZ2VMb2cKLSsrKyBiL2JpbnV0aWxzL0NoYW5nZUxvZwotQEAgLTEsNSArMSwxNSBAQAotIDIwMTctMDItMTMgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQHJlZGhhdC5jb20+Ci0gCi0rCVBSIGJpbnV0aWxzLzIxMTM5Ci0rCSogcmVhZGVsZi5jICh0YXJnZXRfc3BlY2lmaWNfcmVsb2NfaGFuZGxpbmcpOiBBZGQgbnVtX3N5bXMKLSsJcGFyYW1ldGVyLiAgQ2hlY2sgZm9yIHN5bWJvbCB0YWJsZSBvdmVyZmxvdyBiZWZvcmUgYWNjZXNzaW5nCi0rCXN5bWJvbCB2YWx1ZS4gIElmIHJlbG9jIHBvaW50ZXIgaXMgTlVMTCwgZGlzY2FyZCBhbGwgc2F2ZWQgc3RhdGUuCi0rCShhcHBseV9yZWxvY2F0aW9ucyk6IFBhc3MgbnVtX3N5bXMgdG8gdGFyZ2V0X3NwZWNpZmljX3JlbG9jX2hhbmRsaW5nLgotKwlDYWxsIHRhcmdldF9zcGVjaWZpY19yZWxvY19oYW5kbGluZyB3aXRoIGEgTlVMTCByZWxvYyBwb2ludGVyCi0rCWFmdGVyIHByb2Nlc3NpbmcgYWxsIG9mIHRoZSByZWxvY3MuCi0rCi0rMjAxNy0wMi0xMyAgTmljayBDbGlmdG9uICA8bmlja2NAcmVkaGF0LmNvbT4KLSsKLSAJUFIgYmludXRpbHMvMjExMzcKLSAJKiByZWFkZWxmLmMgKHRhcmdldF9zcGVjaWZpY19yZWxvY19oYW5kbGluZyk6IEFkZCBlbmQgcGFyYW1ldGVyLgotIAlDaGVjayBmb3IgYnVmZmVyIG92ZXJmbG93IGJlZm9yZSB3cml0aW5nIHJlbG9jYXRlZCB2YWx1ZXMuCi1kaWZmIC0tZ2l0IGEvYmludXRpbHMvcmVhZGVsZi5jIGIvYmludXRpbHMvcmVhZGVsZi5jCi1pbmRleCA4Y2RhYWUzYjhjLi43YzE1OGM2MzQyIDEwMDY0NAotLS0tIGEvYmludXRpbHMvcmVhZGVsZi5jCi0rKysgYi9iaW51dGlscy9yZWFkZWxmLmMKLUBAIC0xMTU4MCwxNSArMTE1ODAsMjcgQEAgcHJvY2Vzc19zeW1pbmZvIChGSUxFICogZmlsZSBBVFRSSUJVVEVfVU5VU0VEKQotIAotIC8qIENoZWNrIHRvIHNlZSBpZiB0aGUgZ2l2ZW4gcmVsb2MgbmVlZHMgdG8gYmUgaGFuZGxlZCBpbiBhIHRhcmdldCBzcGVjaWZpYwotICAgIG1hbm5lci4gIElmIHNvIHRoZW4gcHJvY2VzcyB0aGUgcmVsb2MgYW5kIHJldHVybiBUUlVFIG90aGVyd2lzZSByZXR1cm4KLS0gICBGQUxTRS4gICovCi0rICAgRkFMU0UuCi0rCi0rICAgSWYgY2FsbGVkIHdpdGggcmVsb2MgPT0gTlVMTCwgdGhlbiB0aGlzIGlzIGEgc2lnbmFsIHRoYXQgcmVsb2MgcHJvY2Vzc2luZwotKyAgIGZvciB0aGUgY3VycmVudCBzZWN0aW9uIGhhcyBmaW5pc2hlZCwgYW5kIGFueSBzYXZlZCBzdGF0ZSBzaG91bGQgYmUKLSsgICBkaXNjYXJkZWQuICAqLwotIAotIHN0YXRpYyBiZmRfYm9vbGVhbgotIHRhcmdldF9zcGVjaWZpY19yZWxvY19oYW5kbGluZyAoRWxmX0ludGVybmFsX1JlbGEgKiByZWxvYywKLSAJCQkJdW5zaWduZWQgY2hhciAqICAgICBzdGFydCwKLSAJCQkJdW5zaWduZWQgY2hhciAqICAgICBlbmQsCi0tCQkJCUVsZl9JbnRlcm5hbF9TeW0gKiAgc3ltdGFiKQotKwkJCQlFbGZfSW50ZXJuYWxfU3ltICogIHN5bXRhYiwKLSsJCQkJdW5zaWduZWQgbG9uZyAgICAgICBudW1fc3ltcykKLSB7Ci0tICB1bnNpZ25lZCBpbnQgcmVsb2NfdHlwZSA9IGdldF9yZWxvY190eXBlIChyZWxvYy0+cl9pbmZvKTsKLSsgIHVuc2lnbmVkIGludCByZWxvY190eXBlID0gMDsKLSsgIHVuc2lnbmVkIGxvbmcgc3ltX2luZGV4ID0gMDsKLSsKLSsgIGlmIChyZWxvYykKLSsgICAgewotKyAgICAgIHJlbG9jX3R5cGUgPSBnZXRfcmVsb2NfdHlwZSAocmVsb2MtPnJfaW5mbyk7Ci0rICAgICAgc3ltX2luZGV4ID0gZ2V0X3JlbG9jX3N5bWluZGV4IChyZWxvYy0+cl9pbmZvKTsKLSsgICAgfQotIAotICAgc3dpdGNoIChlbGZfaGVhZGVyLmVfbWFjaGluZSkKLSAgICAgewotQEAgLTExNTk3LDYgKzExNjA5LDEyIEBAIHRhcmdldF9zcGVjaWZpY19yZWxvY19oYW5kbGluZyAoRWxmX0ludGVybmFsX1JlbGEgKiByZWxvYywKLSAgICAgICB7Ci0gCXN0YXRpYyBFbGZfSW50ZXJuYWxfU3ltICogc2F2ZWRfc3ltID0gTlVMTDsKLSAKLSsJaWYgKHJlbG9jID09IE5VTEwpCi0rCSAgewotKwkgICAgc2F2ZWRfc3ltID0gTlVMTDsKLSsJICAgIHJldHVybiBUUlVFOwotKwkgIH0KLSsKLSAJc3dpdGNoIChyZWxvY190eXBlKQotIAkgIHsKLSAJICBjYXNlIDEwOiAvKiBSX01TUDQzMF9TWU1fRElGRiAqLwotQEAgLTExNjA0LDcgKzExNjIyLDEyIEBAIHRhcmdldF9zcGVjaWZpY19yZWxvY19oYW5kbGluZyAoRWxmX0ludGVybmFsX1JlbGEgKiByZWxvYywKLSAJICAgICAgYnJlYWs7Ci0gCSAgICAvKiBGYWxsIHRocm91Z2guICAqLwotIAkgIGNhc2UgMjE6IC8qIFJfTVNQNDMwWF9TWU1fRElGRiAqLwotLQkgICAgc2F2ZWRfc3ltID0gc3ltdGFiICsgZ2V0X3JlbG9jX3N5bWluZGV4IChyZWxvYy0+cl9pbmZvKTsKLSsJICAgIC8qIFBSIDIxMTM5LiAgKi8KLSsJICAgIGlmIChzeW1faW5kZXggPj0gbnVtX3N5bXMpCi0rCSAgICAgIGVycm9yIChfKCJNU1A0MzAgU1lNX0RJRkYgcmVsb2MgY29udGFpbnMgaW52YWxpZCBzeW1ib2wgaW5kZXggJWx1XG4iKSwKLSsJCSAgICAgc3ltX2luZGV4KTsKLSsJICAgIGVsc2UKLSsJICAgICAgc2F2ZWRfc3ltID0gc3ltdGFiICsgc3ltX2luZGV4OwotIAkgICAgcmV0dXJuIFRSVUU7Ci0gCi0gCSAgY2FzZSAxOiAvKiBSX01TUDQzMF8zMiBvciBSX01TUDQzMF9BQlMzMiAqLwotQEAgLTExNjI5LDE2ICsxMTY1MiwyMSBAQCB0YXJnZXRfc3BlY2lmaWNfcmVsb2NfaGFuZGxpbmcgKEVsZl9JbnRlcm5hbF9SZWxhICogcmVsb2MsCi0gCQlpbnQgcmVsb2Nfc2l6ZSA9IHJlbG9jX3R5cGUgPT0gMSA/IDQgOiAyOwotIAkJYmZkX3ZtYSB2YWx1ZTsKLSAKLS0JCXZhbHVlID0gcmVsb2MtPnJfYWRkZW5kCi0tCQkgICsgKHN5bXRhYltnZXRfcmVsb2Nfc3ltaW5kZXggKHJlbG9jLT5yX2luZm8pXS5zdF92YWx1ZQotLQkJICAgICAtIHNhdmVkX3N5bS0+c3RfdmFsdWUpOwotLQotLQkJaWYgKHN0YXJ0ICsgcmVsb2MtPnJfb2Zmc2V0ICsgcmVsb2Nfc2l6ZSA+PSBlbmQpCi0tCQkgIC8qIFBSIDIxMTM3ICovCi0tCQkgIGVycm9yIChfKCJNU1A0MzAgc3ltIGRpZmYgcmVsb2Mgd3JpdGVzIHBhc3QgZW5kIG9mIHNlY3Rpb24gKCVwIHZzICVwKVxuIiksCi0tCQkJIHN0YXJ0ICsgcmVsb2MtPnJfb2Zmc2V0ICsgcmVsb2Nfc2l6ZSwgZW5kKTsKLSsJCWlmIChzeW1faW5kZXggPj0gbnVtX3N5bXMpCi0rCQkgIGVycm9yIChfKCJNU1A0MzAgcmVsb2MgY29udGFpbnMgaW52YWxpZCBzeW1ib2wgaW5kZXggJWx1XG4iKSwKLSsJCQkgc3ltX2luZGV4KTsKLSAJCWVsc2UKLS0JCSAgYnl0ZV9wdXQgKHN0YXJ0ICsgcmVsb2MtPnJfb2Zmc2V0LCB2YWx1ZSwgcmVsb2Nfc2l6ZSk7Ci0rCQkgIHsKLSsJCSAgICB2YWx1ZSA9IHJlbG9jLT5yX2FkZGVuZCArIChzeW10YWJbc3ltX2luZGV4XS5zdF92YWx1ZQotKwkJCQkJICAgICAgIC0gc2F2ZWRfc3ltLT5zdF92YWx1ZSk7Ci0rCi0rCQkgICAgaWYgKHN0YXJ0ICsgcmVsb2MtPnJfb2Zmc2V0ICsgcmVsb2Nfc2l6ZSA+PSBlbmQpCi0rCQkgICAgICAvKiBQUiAyMTEzNyAqLwotKwkJICAgICAgZXJyb3IgKF8oIk1TUDQzMCBzeW0gZGlmZiByZWxvYyB3cml0ZXMgcGFzdCBlbmQgb2Ygc2VjdGlvbiAoJXAgdnMgJXApXG4iKSwKLSsJCQkgICAgIHN0YXJ0ICsgcmVsb2MtPnJfb2Zmc2V0ICsgcmVsb2Nfc2l6ZSwgZW5kKTsKLSsJCSAgICBlbHNlCi0rCQkgICAgICBieXRlX3B1dCAoc3RhcnQgKyByZWxvYy0+cl9vZmZzZXQsIHZhbHVlLCByZWxvY19zaXplKTsKLSsJCSAgfQotIAotIAkJc2F2ZWRfc3ltID0gTlVMTDsKLSAJCXJldHVybiBUUlVFOwotQEAgLTExNjU4LDEzICsxMTY4NiwyNCBAQCB0YXJnZXRfc3BlY2lmaWNfcmVsb2NfaGFuZGxpbmcgKEVsZl9JbnRlcm5hbF9SZWxhICogcmVsb2MsCi0gICAgICAgewotIAlzdGF0aWMgRWxmX0ludGVybmFsX1N5bSAqIHNhdmVkX3N5bSA9IE5VTEw7Ci0gCi0rCWlmIChyZWxvYyA9PSBOVUxMKQotKwkgIHsKLSsJICAgIHNhdmVkX3N5bSA9IE5VTEw7Ci0rCSAgICByZXR1cm4gVFJVRTsKLSsJICB9Ci0rCi0gCXN3aXRjaCAocmVsb2NfdHlwZSkKLSAJICB7Ci0gCSAgY2FzZSAzNDogLyogUl9NTjEwMzAwX0FMSUdOICovCi0gCSAgICByZXR1cm4gVFJVRTsKLSAJICBjYXNlIDMzOiAvKiBSX01OMTAzMDBfU1lNX0RJRkYgKi8KLS0JICAgIHNhdmVkX3N5bSA9IHN5bXRhYiArIGdldF9yZWxvY19zeW1pbmRleCAocmVsb2MtPnJfaW5mbyk7Ci0rCSAgICBpZiAoc3ltX2luZGV4ID49IG51bV9zeW1zKQotKwkgICAgICBlcnJvciAoXygiTU4xMDMwMF9TWU1fRElGRiByZWxvYyBjb250YWlucyBpbnZhbGlkIHN5bWJvbCBpbmRleCAlbHVcbiIpLAotKwkJICAgICBzeW1faW5kZXgpOwotKwkgICAgZWxzZQotKwkgICAgICBzYXZlZF9zeW0gPSBzeW10YWIgKyBzeW1faW5kZXg7Ci0gCSAgICByZXR1cm4gVFJVRTsKLSsKLSAJICBjYXNlIDE6IC8qIFJfTU4xMDMwMF8zMiAqLwotIAkgIGNhc2UgMjogLyogUl9NTjEwMzAwXzE2ICovCi0gCSAgICBpZiAoc2F2ZWRfc3ltICE9IE5VTEwpCi1AQCAtMTE2NzIsMTUgKzExNzExLDIwIEBAIHRhcmdldF9zcGVjaWZpY19yZWxvY19oYW5kbGluZyAoRWxmX0ludGVybmFsX1JlbGEgKiByZWxvYywKLSAJCWludCByZWxvY19zaXplID0gcmVsb2NfdHlwZSA9PSAxID8gNCA6IDI7Ci0gCQliZmRfdm1hIHZhbHVlOwotIAotLQkJdmFsdWUgPSByZWxvYy0+cl9hZGRlbmQKLS0JCSAgKyAoc3ltdGFiW2dldF9yZWxvY19zeW1pbmRleCAocmVsb2MtPnJfaW5mbyldLnN0X3ZhbHVlCi0tCQkgICAgIC0gc2F2ZWRfc3ltLT5zdF92YWx1ZSk7Ci0tCi0tCQlpZiAoc3RhcnQgKyByZWxvYy0+cl9vZmZzZXQgKyByZWxvY19zaXplID49IGVuZCkKLS0JCSAgZXJyb3IgKF8oIk1OMTAzMDAgc3ltIGRpZmYgcmVsb2Mgd3JpdGVzIHBhc3QgZW5kIG9mIHNlY3Rpb24gKCVwIHZzICVwKVxuIiksCi0tCQkJIHN0YXJ0ICsgcmVsb2MtPnJfb2Zmc2V0ICsgcmVsb2Nfc2l6ZSwgZW5kKTsKLSsJCWlmIChzeW1faW5kZXggPj0gbnVtX3N5bXMpCi0rCQkgIGVycm9yIChfKCJNTjEwMzAwIHJlbG9jIGNvbnRhaW5zIGludmFsaWQgc3ltYm9sIGluZGV4ICVsdVxuIiksCi0rCQkJIHN5bV9pbmRleCk7Ci0gCQllbHNlCi0tCQkgIGJ5dGVfcHV0IChzdGFydCArIHJlbG9jLT5yX29mZnNldCwgdmFsdWUsIHJlbG9jX3NpemUpOwotKwkJICB7Ci0rCQkgICAgdmFsdWUgPSByZWxvYy0+cl9hZGRlbmQgKyAoc3ltdGFiW3N5bV9pbmRleF0uc3RfdmFsdWUKLSsJCQkJCSAgICAgICAtIHNhdmVkX3N5bS0+c3RfdmFsdWUpOwotKwotKwkJICAgIGlmIChzdGFydCArIHJlbG9jLT5yX29mZnNldCArIHJlbG9jX3NpemUgPj0gZW5kKQotKwkJICAgICAgZXJyb3IgKF8oIk1OMTAzMDAgc3ltIGRpZmYgcmVsb2Mgd3JpdGVzIHBhc3QgZW5kIG9mIHNlY3Rpb24gKCVwIHZzICVwKVxuIiksCi0rCQkJICAgICBzdGFydCArIHJlbG9jLT5yX29mZnNldCArIHJlbG9jX3NpemUsIGVuZCk7Ci0rCQkgICAgZWxzZQotKwkJICAgICAgYnl0ZV9wdXQgKHN0YXJ0ICsgcmVsb2MtPnJfb2Zmc2V0LCB2YWx1ZSwgcmVsb2Nfc2l6ZSk7Ci0rCQkgIH0KLSAKLSAJCXNhdmVkX3N5bSA9IE5VTEw7Ci0gCQlyZXR1cm4gVFJVRTsKLUBAIC0xMTcwMCwxMiArMTE3NDQsMjQgQEAgdGFyZ2V0X3NwZWNpZmljX3JlbG9jX2hhbmRsaW5nIChFbGZfSW50ZXJuYWxfUmVsYSAqIHJlbG9jLAotIAlzdGF0aWMgYmZkX3ZtYSBzYXZlZF9zeW0yID0gMDsKLSAJc3RhdGljIGJmZF92bWEgdmFsdWU7Ci0gCi0rCWlmIChyZWxvYyA9PSBOVUxMKQotKwkgIHsKLSsJICAgIHNhdmVkX3N5bTEgPSBzYXZlZF9zeW0yID0gMDsKLSsJICAgIHJldHVybiBUUlVFOwotKwkgIH0KLSsKLSAJc3dpdGNoIChyZWxvY190eXBlKQotIAkgIHsKLSAJICBjYXNlIDB4ODA6IC8qIFJfUkw3OF9TWU0uICAqLwotIAkgICAgc2F2ZWRfc3ltMSA9IHNhdmVkX3N5bTI7Ci0tCSAgICBzYXZlZF9zeW0yID0gc3ltdGFiW2dldF9yZWxvY19zeW1pbmRleCAocmVsb2MtPnJfaW5mbyldLnN0X3ZhbHVlOwotLQkgICAgc2F2ZWRfc3ltMiArPSByZWxvYy0+cl9hZGRlbmQ7Ci0rCSAgICBpZiAoc3ltX2luZGV4ID49IG51bV9zeW1zKQotKwkgICAgICBlcnJvciAoXygiUkw3OF9TWU0gcmVsb2MgY29udGFpbnMgaW52YWxpZCBzeW1ib2wgaW5kZXggJWx1XG4iKSwKLSsJCSAgICAgc3ltX2luZGV4KTsKLSsJICAgIGVsc2UKLSsJICAgICAgewotKwkJc2F2ZWRfc3ltMiA9IHN5bXRhYltzeW1faW5kZXhdLnN0X3ZhbHVlOwotKwkJc2F2ZWRfc3ltMiArPSByZWxvYy0+cl9hZGRlbmQ7Ci0rCSAgICAgIH0KLSAJICAgIHJldHVybiBUUlVFOwotIAotIAkgIGNhc2UgMHg4MzogLyogUl9STDc4X09Qc3ViLiAgKi8KLUBAIC0xMjM0NSw3ICsxMjQwMSw3IEBAIGFwcGx5X3JlbG9jYXRpb25zICh2b2lkICogICAgICAgICAgICAgICAgICAgICBmaWxlLAotIAotIAkgIHJlbG9jX3R5cGUgPSBnZXRfcmVsb2NfdHlwZSAocnAtPnJfaW5mbyk7Ci0gCi0tCSAgaWYgKHRhcmdldF9zcGVjaWZpY19yZWxvY19oYW5kbGluZyAocnAsIHN0YXJ0LCBlbmQsIHN5bXRhYikpCi0rCSAgaWYgKHRhcmdldF9zcGVjaWZpY19yZWxvY19oYW5kbGluZyAocnAsIHN0YXJ0LCBlbmQsIHN5bXRhYiwgbnVtX3N5bXMpKQotIAkgICAgY29udGludWU7Ci0gCSAgZWxzZSBpZiAoaXNfbm9uZV9yZWxvYyAocmVsb2NfdHlwZSkpCi0gCSAgICBjb250aW51ZTsKLUBAIC0xMjQ0MSw2ICsxMjQ5Nyw5IEBAIGFwcGx5X3JlbG9jYXRpb25zICh2b2lkICogICAgICAgICAgICAgICAgICAgICBmaWxlLAotIAl9Ci0gCi0gICAgICAgZnJlZSAoc3ltdGFiKTsKLSsgICAgICAvKiBMZXQgdGhlIHRhcmdldCBzcGVjaWZpYyByZWxvYyBwcm9jZXNzaW5nIGNvZGUga25vdyB0aGF0Ci0rCSB3ZSBoYXZlIGZpbmlzaGVkIHdpdGggdGhlc2UgcmVsb2NzLiAgKi8KLSsgICAgICB0YXJnZXRfc3BlY2lmaWNfcmVsb2NfaGFuZGxpbmcgKE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIDApOwotIAotICAgICAgIGlmIChyZWxvY3NfcmV0dXJuKQotIAl7Ci0tLSAKLTIuMTEuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTY5NjkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTY5NjkucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNTQwMzQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy02OTY5LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotRnJvbSAxZDlhMjY5NjkwM2ZjNTlkNmE5MzZmNGFiNGU0NDA3ZWYzMjlkMDY2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTmljayBDbGlmdG9uIDxuaWNrY0ByZWRoYXQuY29tPgotRGF0ZTogRnJpLCAxNyBGZWIgMjAxNyAxNTo1OTo0NSArMDAwMAotU3ViamVjdDogRml4IGlsbGVnYWwgbWVtb3J5IGFjY2Vzc2VzIGluIHJlYWRlbGYgd2hlbiBwYXJzaW5nCi0gYSBjb3JydXB0IGJpbmFyeS4KLQotCVBSIGJpbnV0aWxzLzIxMTU2Ci0JKiByZWFkZWxmLmMgKGZpbmRfc2VjdGlvbl9pbl9zZXQpOiBUZXN0IGZvciBpbnZhbGlkIHNlY3Rpb24KLQlpbmRpY2llcy4KLQotQ1ZFOiBDVkUtMjAxNy02OTY5Ci1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFttYXN0ZXJdCi0KLVNpZ25lZC1vZmYtYnk6IFl1YW5qaWUgSHVhbmcgPHl1YW5qaWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KLS0tLQotIGJpbnV0aWxzL0NoYW5nZUxvZyB8ICA2ICsrKysrKwotIGJpbnV0aWxzL3JlYWRlbGYuYyB8IDEwICsrKysrKysrLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9iaW51dGlscy9DaGFuZ2VMb2cgYi9iaW51dGlscy9DaGFuZ2VMb2cKLWluZGV4IGJkNjNjOGEwZDguLjFkODQwYjQyZjkgMTAwNjQ0Ci0tLS0gYS9iaW51dGlscy9DaGFuZ2VMb2cKLSsrKyBiL2JpbnV0aWxzL0NoYW5nZUxvZwotQEAgLTEsMyArMSw5IEBACi0rMjAxNy0wMi0xNyAgTmljayBDbGlmdG9uICA8bmlja2NAcmVkaGF0LmNvbT4KLSsKLSsJUFIgYmludXRpbHMvMjExNTYKLSsJKiByZWFkZWxmLmMgKGZpbmRfc2VjdGlvbl9pbl9zZXQpOiBUZXN0IGZvciBpbnZhbGlkIHNlY3Rpb24KLSsJaW5kaWNpZXMuCi0rCi0gMjAxNy0wMi0xMyAgTmljayBDbGlmdG9uICA8bmlja2NAcmVkaGF0LmNvbT4KLSAKLSAJUFIgYmludXRpbHMvMjExMzkKLWRpZmYgLS1naXQgYS9iaW51dGlscy9yZWFkZWxmLmMgYi9iaW51dGlscy9yZWFkZWxmLmMKLWluZGV4IDdjMTU4YzYzNDIuLjQ5NjA0OTFjNWMgMTAwNjQ0Ci0tLS0gYS9iaW51dGlscy9yZWFkZWxmLmMKLSsrKyBiL2JpbnV0aWxzL3JlYWRlbGYuYwotQEAgLTY3NSw4ICs2NzUsMTQgQEAgZmluZF9zZWN0aW9uX2luX3NldCAoY29uc3QgY2hhciAqIG5hbWUsIHVuc2lnbmVkIGludCAqIHNldCkKLSAgIGlmIChzZXQgIT0gTlVMTCkKLSAgICAgewotICAgICAgIHdoaWxlICgoaSA9ICpzZXQrKykgPiAwKQotLQlpZiAoc3RyZXEgKFNFQ1RJT05fTkFNRSAoc2VjdGlvbl9oZWFkZXJzICsgaSksIG5hbWUpKQotLQkgIHJldHVybiBzZWN0aW9uX2hlYWRlcnMgKyBpOwotKwl7Ci0rCSAgLyogU2VlIFBSIDIxMTU2IGZvciBhIHJlcHJvZHVjZXIuICAqLwotKwkgIGlmIChpID49IGVsZl9oZWFkZXIuZV9zaG51bSkKLSsJICAgIGNvbnRpbnVlOyAvKiBGSVhNRTogU2hvdWxkIHdlIGlzc3VlIGFuIGVycm9yIG1lc3NhZ2UgPyAgKi8KLSsKLSsJICBpZiAoc3RyZXEgKFNFQ1RJT05fTkFNRSAoc2VjdGlvbl9oZWFkZXJzICsgaSksIG5hbWUpKQotKwkgICAgcmV0dXJuIHNlY3Rpb25faGVhZGVycyArIGk7Ci0rCX0KLSAgICAgfQotIAotICAgcmV0dXJuIGZpbmRfc2VjdGlvbiAobmFtZSk7Ci0tLSAKLTIuMTEuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTY5NjlfMi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctNjk2OV8yLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWE1ZGVjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctNjk2OV8yLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLUZyb20gZWY4MTEyNjMxNGY2NzQ3MmE0NmRiOTU4MTUzMGZiZjVjY2I2YjNmMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IE5pY2sgQ2xpZnRvbiA8bmlja2NAcmVkaGF0LmNvbT4KLURhdGU6IE1vbiwgMjAgRmViIDIwMTcgMTQ6NDA6MzkgKzAwMDAKLVN1YmplY3Q6IEZpeCBhbm90aGVyIG1lbW9yeSBhY2Nlc3MgZXJyb3IgaW4gcmVhZGVsZiB3aGVuCi0gcGFyc2luZyBhIGNvcnJ1cHQgYmluYXJ5LgotCi0JUFIgYmludXRpbHMvMjExNTYKLQkqIGR3YXJmLmMgKGN1X3R1X2luZGV4ZXNfcmVhZCk6IE1vdmUgaW50by4uLgotCShsb2FkX2N1X3R1X2luZGV4ZXMpOiAuLi4gaGVyZS4gIENoYW5nZSB0aGUgdmFyaWFibGUgaW50bwotCXRyaS1zdGF0ZS4gIENoYW5nZSB0aGUgZnVuY3Rpb24gaW50byBib29sZWFuLCByZXR1cm5pbmcKLQlmYWxzZSBpZiB0aGUgaW5kaWNpZXMgY291bGQgbm90IGJlIGxvYWRlZC4KLQkoZmluZF9jdV90dV9zZXQpOiBSZXR1cm4gTlVMTCBpZiB0aGUgaW5kaWNpZXMgY291bGQgbm90IGJlCi0JbG9hZGVkLgotCi1DVkU6IENWRS0yMDE3LTY5NjkKLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW21hc3Rlcl0KLQotU2lnbmVkLW9mZi1ieTogWXVhbmppZSBIdWFuZyA8eXVhbmppZS5odWFuZ0B3aW5kcml2ZXIuY29tPgotLS0tCi0gYmludXRpbHMvQ2hhbmdlTG9nIHwgMTAgKysrKysrKysrKwotIGJpbnV0aWxzL2R3YXJmLmMgICB8IDM0ICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDMwIGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvYmludXRpbHMvQ2hhbmdlTG9nIGIvYmludXRpbHMvQ2hhbmdlTG9nCi1pbmRleCAxZDg0MGI0MmY5Li41MzM1MmMxODAxIDEwMDY0NAotLS0tIGEvYmludXRpbHMvQ2hhbmdlTG9nCi0rKysgYi9iaW51dGlscy9DaGFuZ2VMb2cKLUBAIC0xLDMgKzEsMTMgQEAKLSsyMDE3LTAyLTIwICBOaWNrIENsaWZ0b24gIDxuaWNrY0ByZWRoYXQuY29tPgotKwotKwlQUiBiaW51dGlscy8yMTE1NgotKwkqIGR3YXJmLmMgKGN1X3R1X2luZGV4ZXNfcmVhZCk6IE1vdmUgaW50by4uLgotKwkobG9hZF9jdV90dV9pbmRleGVzKTogLi4uIGhlcmUuICBDaGFuZ2UgdGhlIHZhcmlhYmxlIGludG8KLSsJdHJpLXN0YXRlLiAgQ2hhbmdlIHRoZSBmdW5jdGlvbiBpbnRvIGJvb2xlYW4sIHJldHVybmluZwotKwlmYWxzZSBpZiB0aGUgaW5kaWNpZXMgY291bGQgbm90IGJlIGxvYWRlZC4KLSsJKGZpbmRfY3VfdHVfc2V0KTogUmV0dXJuIE5VTEwgaWYgdGhlIGluZGljaWVzIGNvdWxkIG5vdCBiZQotKwlsb2FkZWQuCi0rCi0gMjAxNy0wMi0xNyAgTmljayBDbGlmdG9uICA8bmlja2NAcmVkaGF0LmNvbT4KLSAKLSAJUFIgYmludXRpbHMvMjExNTYKLWRpZmYgLS1naXQgYS9iaW51dGlscy9kd2FyZi5jIGIvYmludXRpbHMvZHdhcmYuYwotaW5kZXggMDE4NGE3YWIyZS4uNmQ4NzljOWI2MSAxMDA2NDQKLS0tLSBhL2JpbnV0aWxzL2R3YXJmLmMKLSsrKyBiL2JpbnV0aWxzL2R3YXJmLmMKLUBAIC03Niw3ICs3Niw2IEBAIGludCBkd2FyZl9jaGVjayA9IDA7Ci0gICAgYXMgYSB6ZXJvLXRlcm1pbmF0ZWQgbGlzdCBvZiBzZWN0aW9uIGluZGV4ZXMgY29tcHJpc2luZyBvbmUgc2V0IG9mIGRlYnVnCi0gICAgc2VjdGlvbnMgZnJvbSBhIC5kd28gZmlsZS4gICovCi0gCi0tc3RhdGljIGludCBjdV90dV9pbmRleGVzX3JlYWQgPSAwOwotIHN0YXRpYyB1bnNpZ25lZCBpbnQgKnNobmR4X3Bvb2wgPSBOVUxMOwotIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2huZHhfcG9vbF9zaXplID0gMDsKLSBzdGF0aWMgdW5zaWduZWQgaW50IHNobmR4X3Bvb2xfdXNlZCA9IDA7Ci1AQCAtOTksNyArOTgsNyBAQCBzdGF0aWMgaW50IHR1X2NvdW50ID0gMDsKLSBzdGF0aWMgc3RydWN0IGN1X3R1X3NldCAqY3Vfc2V0cyA9IE5VTEw7Ci0gc3RhdGljIHN0cnVjdCBjdV90dV9zZXQgKnR1X3NldHMgPSBOVUxMOwotIAotLXN0YXRpYyB2b2lkIGxvYWRfY3VfdHVfaW5kZXhlcyAodm9pZCAqZmlsZSk7Ci0rc3RhdGljIGJmZF9ib29sZWFuIGxvYWRfY3VfdHVfaW5kZXhlcyAodm9pZCAqKTsKLSAKLSAvKiBWYWx1ZXMgZm9yIGRvX2RlYnVnX2xpbmVzLiAgKi8KLSAjZGVmaW5lIEZMQUdfREVCVUdfTElORVNfUkFXCSAxCi1AQCAtMjcxNSw3ICsyNzE0LDcgQEAgbG9hZF9kZWJ1Z19pbmZvICh2b2lkICogZmlsZSkKLSAgICAgcmV0dXJuIG51bV9kZWJ1Z19pbmZvX2VudHJpZXM7Ci0gCi0gICAvKiBJZiB0aGlzIGlzIGEgRFdBUkYgcGFja2FnZSBmaWxlLCBsb2FkIHRoZSBDVSBhbmQgVFUgaW5kZXhlcy4gICovCi0tICBsb2FkX2N1X3R1X2luZGV4ZXMgKGZpbGUpOwotKyAgKHZvaWQpIGxvYWRfY3VfdHVfaW5kZXhlcyAoZmlsZSk7Ci0gCi0gICBpZiAobG9hZF9kZWJ1Z19zZWN0aW9uIChpbmZvLCBmaWxlKQotICAgICAgICYmIHByb2Nlc3NfZGVidWdfaW5mbyAoJmRlYnVnX2Rpc3BsYXlzIFtpbmZvXS5zZWN0aW9uLCBmaWxlLCBhYmJyZXYsIDEsIDApKQotQEAgLTczNzgsMjEgKzczNzcsMjcgQEAgcHJvY2Vzc19jdV90dV9pbmRleCAoc3RydWN0IGR3YXJmX3NlY3Rpb24gKnNlY3Rpb24sIGludCBkb19kaXNwbGF5KQotICAgIHNlY3Rpb24gc2V0cyB0aGF0IHdlIGNhbiB1c2UgdG8gYXNzb2NpYXRlIGEgLmRlYnVnX2luZm8uZHdvIHNlY3Rpb24KLSAgICB3aXRoIGl0cyBhc3NvY2lhdGVkIC5kZWJ1Z19hYmJyZXYuZHdvIHNlY3Rpb24gaW4gYSAuZHdwIGZpbGUuICAqLwotIAotLXN0YXRpYyB2b2lkCi0rc3RhdGljIGJmZF9ib29sZWFuCi0gbG9hZF9jdV90dV9pbmRleGVzICh2b2lkICpmaWxlKQotIHsKLSsgIHN0YXRpYyBpbnQgY3VfdHVfaW5kZXhlc19yZWFkID0gLTE7IC8qIFRyaS1zdGF0ZSB2YXJpYWJsZS4gICovCi0rCi0gICAvKiBJZiB3ZSBoYXZlIGFscmVhZHkgbG9hZGVkIChvciB0cmllZCB0byBsb2FkKSB0aGUgQ1UgYW5kIFRVIGluZGV4ZXMKLSAgICAgIHRoZW4gZG8gbm90IGJvdGhlciB0byByZXBlYXQgdGhlIHRhc2suICAqLwotLSAgaWYgKGN1X3R1X2luZGV4ZXNfcmVhZCkKLS0gICAgcmV0dXJuOwotLQotLSAgaWYgKGxvYWRfZGVidWdfc2VjdGlvbiAoZHdwX2N1X2luZGV4LCBmaWxlKSkKLS0gICAgcHJvY2Vzc19jdV90dV9pbmRleCAoJmRlYnVnX2Rpc3BsYXlzIFtkd3BfY3VfaW5kZXhdLnNlY3Rpb24sIDApOwotLQotLSAgaWYgKGxvYWRfZGVidWdfc2VjdGlvbiAoZHdwX3R1X2luZGV4LCBmaWxlKSkKLS0gICAgcHJvY2Vzc19jdV90dV9pbmRleCAoJmRlYnVnX2Rpc3BsYXlzIFtkd3BfdHVfaW5kZXhdLnNlY3Rpb24sIDApOwotKyAgaWYgKGN1X3R1X2luZGV4ZXNfcmVhZCA9PSAtMSkKLSsgICAgewotKyAgICAgIGN1X3R1X2luZGV4ZXNfcmVhZCA9IFRSVUU7Ci0rICAKLSsgICAgICBpZiAobG9hZF9kZWJ1Z19zZWN0aW9uIChkd3BfY3VfaW5kZXgsIGZpbGUpKQotKwlpZiAoISBwcm9jZXNzX2N1X3R1X2luZGV4ICgmZGVidWdfZGlzcGxheXMgW2R3cF9jdV9pbmRleF0uc2VjdGlvbiwgMCkpCi0rCSAgY3VfdHVfaW5kZXhlc19yZWFkID0gRkFMU0U7Ci0rCi0rICAgICAgaWYgKGxvYWRfZGVidWdfc2VjdGlvbiAoZHdwX3R1X2luZGV4LCBmaWxlKSkKLSsJaWYgKCEgcHJvY2Vzc19jdV90dV9pbmRleCAoJmRlYnVnX2Rpc3BsYXlzIFtkd3BfdHVfaW5kZXhdLnNlY3Rpb24sIDApKQotKwkgIGN1X3R1X2luZGV4ZXNfcmVhZCA9IEZBTFNFOwotKyAgICB9Ci0gCi0tICBjdV90dV9pbmRleGVzX3JlYWQgPSAxOwotKyAgcmV0dXJuIChiZmRfYm9vbGVhbikgY3VfdHVfaW5kZXhlc19yZWFkOwotIH0KLSAKLSAvKiBGaW5kIHRoZSBzZXQgb2Ygc2VjdGlvbnMgdGhhdCBpbmNsdWRlcyBzZWN0aW9uIFNITkRYLiAgKi8KLUBAIC03NDAyLDcgKzc0MDcsOCBAQCBmaW5kX2N1X3R1X3NldCAodm9pZCAqZmlsZSwgdW5zaWduZWQgaW50IHNobmR4KQotIHsKLSAgIHVuc2lnbmVkIGludCBpOwotIAotLSAgbG9hZF9jdV90dV9pbmRleGVzIChmaWxlKTsKLSsgIGlmICghIGxvYWRfY3VfdHVfaW5kZXhlcyAoZmlsZSkpCi0rICAgIHJldHVybiBOVUxMOwotIAotICAgLyogRmluZCBTSE5EWCBpbiB0aGUgc2huZHggcG9vbC4gICovCi0gICBmb3IgKGkgPSAwOyBpIDwgc2huZHhfcG9vbF91c2VkOyBpKyspCi0tLSAKLTIuMTEuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTcyMDkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTcyMDkucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNTdhMTIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy03MjA5LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotRnJvbSBiMjcwNmNlYWRhYzcyMzllN2IwMmQ0M2YwNTEwMGZjNjUzOGIwZDY1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTmljayBDbGlmdG9uIDxuaWNrY0ByZWRoYXQuY29tPgotRGF0ZTogTW9uLCAxMyBGZWIgMjAxNyAxNTowNDozNyArMDAwMAotU3ViamVjdDogRml4IGludmFsaWQgcmVhZCBvZiBzZWN0aW9uIGNvbnRlbnRzIHdoaWxzdCBwcm9jZXNzaW5nIGEgY29ycnVwdCBiaW5hcnkuCi0KLQlQUiBiaW51dGlscy8yMTEzNQotCSogcmVhZGVsZi5jIChkdW1wX3NlY3Rpb25fYXNfYnl0ZXMpOiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUKLQl1bmNvbXByZXNzX3NlY3Rpb25fY29udGVudHMgcmV0dXJucyBmYWxzZS4KLQotQ1ZFOiBDVkUtMjAxNy03MjA5Ci1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0W21hc3Rlcl0KLQotU2lnbmVkLW9mZi1ieTogWXVhbmppZSBIdWFuZyA8eXVhbmppZS5odWFuZ0B3aW5kcml2ZXIuY29tPgotLS0tCi0gYmludXRpbHMvQ2hhbmdlTG9nIHwgIDYgKysrKysrCi0gYmludXRpbHMvcmVhZGVsZi5jIHwgMTYgKysrKysrKysrKysrLS0tLQotIDIgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2JpbnV0aWxzL0NoYW5nZUxvZyBiL2JpbnV0aWxzL0NoYW5nZUxvZwotaW5kZXggNTMzNTJjMTgwMS4uY2Y5Mjc0NGMxMiAxMDA2NDQKLS0tLSBhL2JpbnV0aWxzL0NoYW5nZUxvZwotKysrIGIvYmludXRpbHMvQ2hhbmdlTG9nCi1AQCAtMSwzICsxLDkgQEAKLSsyMDE3LTAyLTEzICBOaWNrIENsaWZ0b24gIDxuaWNrY0ByZWRoYXQuY29tPgotKwotKwlQUiBiaW51dGlscy8yMTEzNQotKwkqIHJlYWRlbGYuYyAoZHVtcF9zZWN0aW9uX2FzX2J5dGVzKTogSGFuZGxlIHRoZSBjYXNlIHdoZXJlCi0rCXVuY29tcHJlc3Nfc2VjdGlvbl9jb250ZW50cyByZXR1cm5zIGZhbHNlLgotKwotIDIwMTctMDItMjAgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQHJlZGhhdC5jb20+Ci0gCi0gCVBSIGJpbnV0aWxzLzIxMTU2Ci1kaWZmIC0tZ2l0IGEvYmludXRpbHMvcmVhZGVsZi5jIGIvYmludXRpbHMvcmVhZGVsZi5jCi1pbmRleCA0OTYwNDkxYzVjLi5mMGU3YjA4MGU4IDEwMDY0NAotLS0tIGEvYmludXRpbHMvcmVhZGVsZi5jCi0rKysgYi9iaW51dGlscy9yZWFkZWxmLmMKLUBAIC0xMjgwMywxMCArMTI4MDMsMTggQEAgZHVtcF9zZWN0aW9uX2FzX2J5dGVzIChFbGZfSW50ZXJuYWxfU2hkciAqIHNlY3Rpb24sCi0gCSAgbmV3X3NpemUgLT0gMTI7Ci0gCX0KLSAKLS0gICAgICBpZiAodW5jb21wcmVzc2VkX3NpemUKLS0JICAmJiB1bmNvbXByZXNzX3NlY3Rpb25fY29udGVudHMgKCYgc3RhcnQsIHVuY29tcHJlc3NlZF9zaXplLAotLQkJCQkJICAmIG5ld19zaXplKSkKLS0Jc2VjdGlvbl9zaXplID0gbmV3X3NpemU7Ci0rICAgICAgaWYgKHVuY29tcHJlc3NlZF9zaXplKQotKwl7Ci0rCSAgaWYgKHVuY29tcHJlc3Nfc2VjdGlvbl9jb250ZW50cyAoJiBzdGFydCwgdW5jb21wcmVzc2VkX3NpemUsCi0rCQkJCQkgICAmIG5ld19zaXplKSkKLSsJICAgIHNlY3Rpb25fc2l6ZSA9IG5ld19zaXplOwotKwkgIGVsc2UKLSsJICAgIHsKLSsJICAgICAgZXJyb3IgKF8oIlVuYWJsZSB0byBkZWNvbXByZXNzIHNlY3Rpb24gJXNcbiIpLAotKwkJICAgICBwcmludGFibGVfc2VjdGlvbl9uYW1lIChzZWN0aW9uKSk7Ci0rCSAgICAgIHJldHVybjsKLSsJICAgIH0KLSsJfQotICAgICB9Ci0gCi0gICBpZiAocmVsb2NhdGUpCi0tLSAKLTIuMTEuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTcyMTAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTcyMTAucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3OTE3OTIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy03MjEwLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotRnJvbSA0ZGE1OThhNDcyZTFkMjk4ODI1MDM1ZTQ1MmUzYmM2OGY3MTQzMTFjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTmljayBDbGlmdG9uIDxuaWNrY0ByZWRoYXQuY29tPgotRGF0ZTogVHVlLCAxNCBGZWIgMjAxNyAxNDowNzoyOSArMDAwMAotU3ViamVjdDogRml4IGhhbmRsaW5nIG9mIGNvcnJ1cHQgU1RBQlMgZW51bSB0eXBlIHN0cmluZ3MuCi0KLQlQUiBiaW51dGlscy8yMTE1NwotCSogc3RhYnMuYyAocGFyc2Vfc3RhYl9lbnVtX3R5cGUpOiBDaGVjayBmb3IgY29ycnVwdCBOQU1FOlZBTFVFCi0JcGFpcnMuCi0JKHBhcnNlX251bWJlcik6IEV4aXQgZWFybHkgaWYgcGFzc2VkIGFuIGVtcHR5IHN0cmluZy4KLQotQ1ZFOiBDVkUtMjAxNy03MjEwCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFttYXN0ZXJdCi0KLVNpZ25lZC1vZmYtYnk6IFl1YW5qaWUgSHVhbmcgPHl1YW5qaWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KLS0tLQotIGJpbnV0aWxzL0NoYW5nZUxvZyB8ICA3ICsrKysrKysKLSBiaW51dGlscy9zdGFicy5jICAgfCAxNCArKysrKysrKysrKysrLQotIDIgZmlsZXMgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvYmludXRpbHMvQ2hhbmdlTG9nIGIvYmludXRpbHMvQ2hhbmdlTG9nCi1pbmRleCBjZjkyNzQ0YzEyLi4wMDQ1ZmJhYWE2IDEwMDY0NAotLS0tIGEvYmludXRpbHMvQ2hhbmdlTG9nCi0rKysgYi9iaW51dGlscy9DaGFuZ2VMb2cKLUBAIC0xLDMgKzEsMTAgQEAKLSsyMDE3LTAyLTE0ICBOaWNrIENsaWZ0b24gIDxuaWNrY0ByZWRoYXQuY29tPgotKwotKwlQUiBiaW51dGlscy8yMTE1NwotKwkqIHN0YWJzLmMgKHBhcnNlX3N0YWJfZW51bV90eXBlKTogQ2hlY2sgZm9yIGNvcnJ1cHQgTkFNRTpWQUxVRQotKwlwYWlycy4KLSsJKHBhcnNlX251bWJlcik6IEV4aXQgZWFybHkgaWYgcGFzc2VkIGFuIGVtcHR5IHN0cmluZy4KLSsKLSAyMDE3LTAyLTEzICBOaWNrIENsaWZ0b24gIDxuaWNrY0ByZWRoYXQuY29tPgotIAotIAlQUiBiaW51dGlscy8yMTEzNQotZGlmZiAtLWdpdCBhL2JpbnV0aWxzL3N0YWJzLmMgYi9iaW51dGlscy9zdGFicy5jCi1pbmRleCBmNWM1ZDJkOGUwLi41ZDAxM2NjMzYxIDEwMDY0NAotLS0tIGEvYmludXRpbHMvc3RhYnMuYwotKysrIGIvYmludXRpbHMvc3RhYnMuYwotQEAgLTIzMiw2ICsyMzIsMTAgQEAgcGFyc2VfbnVtYmVyIChjb25zdCBjaGFyICoqcHAsIGJmZF9ib29sZWFuICpwb3ZlcmZsb3cpCi0gCi0gICBvcmlnID0gKnBwOwotIAotKyAgLyogU3RvcCBlYXJseSBpZiB3ZSBhcmUgcGFzc2VkIGFuIGVtcHR5IHN0cmluZy4gICovCi0rICBpZiAoKm9yaWcgPT0gMCkKLSsgICAgcmV0dXJuIChiZmRfdm1hKSAwOwotKwotICAgZXJybm8gPSAwOwotICAgdWwgPSBzdHJ0b3VsICgqcHAsIChjaGFyICoqKSBwcCwgMCk7Ci0gICBpZiAodWwgKyAxICE9IDAgfHwgZXJybm8gPT0gMCkKLUBAIC0xOTc1LDkgKzE5NzksMTcgQEAgcGFyc2Vfc3RhYl9lbnVtX3R5cGUgKHZvaWQgKmRoYW5kbGUsIGNvbnN0IGNoYXIgKipwcCkKLSAgICAgICBiZmRfc2lnbmVkX3ZtYSB2YWw7Ci0gCi0gICAgICAgcCA9ICpwcDsKLS0gICAgICB3aGlsZSAoKnAgIT0gJzonKQotKyAgICAgIHdoaWxlICgqcCAhPSAnOicgJiYgKnAgIT0gMCkKLSAJKytwOwotIAotKyAgICAgIGlmICgqcCA9PSAwKQotKwl7Ci0rCSAgYmFkX3N0YWIgKG9yaWcpOwotKwkgIGZyZWUgKG5hbWVzKTsKLSsJICBmcmVlICh2YWx1ZXMpOwotKwkgIHJldHVybiBERUJVR19UWVBFX05VTEw7Ci0rCX0KLSsKLSAgICAgICBuYW1lID0gc2F2ZXN0cmluZyAoKnBwLCBwIC0gKnBwKTsKLSAKLSAgICAgICAqcHAgPSBwICsgMTsKLS0tIAotMi4xMS4wCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctNzIyMy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctNzIyMy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc4YzhiZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTcyMjMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi1Gcm9tIDY5YWNlMjIwMDEwNjM0OGExYjAwZDUwOWE2YTIzNDMzN2MxMDRjMTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBOaWNrIENsaWZ0b24gPG5pY2tjQHJlZGhhdC5jb20+Ci1EYXRlOiBUaHUsIDEgRGVjIDIwMTYgMTU6MjA6MTkgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gRml4IHNlZyBmYXVsdCBhdHRlbXB0aW5nIHRvIHVuZ2V0IGFuIEVPRiBjaGFyYWN0ZXIuCi0KLQlQUiBnYXMvMjA4OTgKLQkqIGFwcC5jIChkb19zY3J1Yl9jaGFycyk6IERvIG5vdCBhdHRlbXB0IHRvIHVuZ2V0IEVPRi4KLQotQWZmZWN0czogPD0gMi4yOAotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQ1ZFOiBDVkUtMjAxNy03MjIzCi1TaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KLQotLS0tCi0gZ2FzL0NoYW5nZUxvZyB8IDMgKysrCi0gZ2FzL2FwcC5jICAgICB8IDIgKy0KLSAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQotCi1JbmRleDogZ2l0L2dhcy9DaGFuZ2VMb2cKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9nYXMvQ2hhbmdlTG9nCi0rKysgZ2l0L2dhcy9DaGFuZ2VMb2cKLUBAIC0xLDMgKzEsOCBAQAotKzIwMTYtMTItMDEgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQHJlZGhhdC5jb20+Ci0rIAotKyAgICAgICBQUiBnYXMvMjA4OTgKLSsgICAgICAgKiBhcHAuYyAoZG9fc2NydWJfY2hhcnMpOiBEbyBub3QgYXR0ZW1wdCB0byB1bmdldCBFT0YuCi0rCi0gMjAxNy0wMy0wMiAgVHJpc3RhbiBHaW5nb2xkICA8Z2luZ29sZEBhZGFjb3JlLmNvbT4KLSAKLSAJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCi1AQCAtMTk4LDcgKzIwMyw2IEBACi0gCSogY29uZmlnL3RjLXBydS5jIChtZF9udW1iZXJfdG9fY2hhcnMpOiBGaXggcGFyYW1ldGVyIHRvIGJlCi0gCXZhbHVlVCwgYXMgZGVjbGFyZWQgaW4gdGMuaC4KLSAJKG1kX2FwcGx5X2ZpeCk6IEZpeCB0byB3b3JrIG9uIDMyLWJpdCBob3N0cy4KLS0+Pj4+Pj4+IDAxMTU2MTEuLi4gUklTQy1WL0dBUzogQ29ycmVjdCBicmFuY2ggcmVsYXhhdGlvbiBmb3Igd2VhayBzeW1ib2xzLgotIAotIDIwMTctMDEtMDIgIEFsYW4gTW9kcmEgIDxhbW9kcmFAZ21haWwuY29tPgotIAotSW5kZXg6IGdpdC9nYXMvYXBwLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9nYXMvYXBwLmMKLSsrKyBnaXQvZ2FzL2FwcC5jCi1AQCAtMTM1MCw3ICsxMzUwLDcgQEAgZG9fc2NydWJfY2hhcnMgKHNpemVfdCAoKmdldCkgKGNoYXIgKiwgcwotIAkJICBQVVQgKGNoKTsKLSAJCSAgYnJlYWs7Ci0gCQl9Ci0tCSAgICAgIGVsc2UKLSsJICAgICAgZWxzZSBpZiAoY2gyICE9IEVPRikKLSAJCXsKLSAJCSAgc3RhdGUgPSA5OwotIAkJICBpZiAoY2ggPT0gRU9GIHx8ICFJU19TWU1CT0xfQ09NUE9ORU5UIChjaCkpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTc2MTQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTc2MTQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlODYzMWEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy03NjE0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLUZyb20gYWQzMjk4NmZkZjlkYTFjODc0OGU0N2I4YjQ1MTAwMzk4MjIzZGJhOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IE5pY2sgQ2xpZnRvbiA8bmlja2NAcmVkaGF0LmNvbT4KLURhdGU6IFR1ZSwgNCBBcHIgMjAxNyAxMToyMzozNiArMDEwMAotU3ViamVjdDogW1BBVENIXSBGaXggbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcyB3aGVuIHVzaW5nIGEgbGluayBidWlsdCB3aXRoCi0gY2xhbmcuCi0KLQlQUiBiaW51dGlscy8yMTM0MgotCSogZWxmbGluay5jIChfYmZkX2VsZl9kZWZpbmVfbGlua2FnZV9zeW0pOiBQcmV2ZW50IG51bGwgcG9pbnRlcgotCWRlcmVmZXJlbmNlLgotCShiZmRfZWxmX2ZpbmFsX2xpbmspOiBPbmx5IGluaXRpYWxpemUgdGhlIGV4dGVuZGVkIHN5bWJvbCBpbmRleAotCXNlY3Rpb24gaWYgdGhlcmUgYXJlIGV4dGVuZGVkIHN5bWJvbCB0YWJsZXMgdG8gbGlzdC4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQ1ZFOiBDVkUtMjAxNy03NjE0Ci1TaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KLQotLS0tCi0gYmZkL0NoYW5nZUxvZyB8ICA4ICsrKysrKysrCi0gYmZkL2VsZmxpbmsuYyB8IDM1ICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCi0gMiBmaWxlcyBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKLQotSW5kZXg6IGdpdC9iZmQvZWxmbGluay5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmZkL2VsZmxpbmsuYwotKysrIGdpdC9iZmQvZWxmbGluay5jCi1AQCAtMTE5LDE1ICsxMTksMTggQEAgX2JmZF9lbGZfZGVmaW5lX2xpbmthZ2Vfc3ltIChiZmQgKmFiZmQsCi0gCSBkZWZpbmVkIGluIHNoYXJlZCBsaWJyYXJpZXMgY2FuJ3QgYmUgb3ZlcnJpZGRlbiwgYmVjYXVzZSB3ZQotIAkgbG9zZSB0aGUgbGluayB0byB0aGUgYmZkIHdoaWNoIGlzIHZpYSB0aGUgc3ltYm9sIHNlY3Rpb24uICAqLwotICAgICAgIGgtPnJvb3QudHlwZSA9IGJmZF9saW5rX2hhc2hfbmV3OwotKyAgICAgIGJoID0gJmgtPnJvb3Q7Ci0gICAgIH0KLSsgIGVsc2UKLSsgICAgYmggPSBOVUxMOwotIAotLSAgYmggPSAmaC0+cm9vdDsKLSAgIGJlZCA9IGdldF9lbGZfYmFja2VuZF9kYXRhIChhYmZkKTsKLSAgIGlmICghX2JmZF9nZW5lcmljX2xpbmtfYWRkX29uZV9zeW1ib2wgKGluZm8sIGFiZmQsIG5hbWUsIEJTRl9HTE9CQUwsCi0gCQkJCQkgc2VjLCAwLCBOVUxMLCBGQUxTRSwgYmVkLT5jb2xsZWN0LAotIAkJCQkJICZiaCkpCi0gICAgIHJldHVybiBOVUxMOwotICAgaCA9IChzdHJ1Y3QgZWxmX2xpbmtfaGFzaF9lbnRyeSAqKSBiaDsKLSsgIEJGRF9BU1NFUlQgKGggIT0gTlVMTCk7Ci0gICBoLT5kZWZfcmVndWxhciA9IDE7Ci0gICBoLT5ub25fZWxmID0gMDsKLSAgIGgtPnJvb3QubGlua2VyX2RlZiA9IDE7Ci1AQCAtMTE5NzMsMjQgKzExOTc2LDI4IEBAIGJmZF9lbGZfZmluYWxfbGluayAoYmZkICphYmZkLCBzdHJ1Y3QgYmYKLSAgICAgewotICAgICAgIC8qIEZpbmlzaCB1cCBhbmQgd3JpdGUgb3V0IHRoZSBzeW1ib2wgc3RyaW5nIHRhYmxlICguc3RydGFiKQotIAkgc2VjdGlvbi4gICovCi0tICAgICAgRWxmX0ludGVybmFsX1NoZHIgKnN5bXN0cnRhYl9oZHI7Ci0rICAgICAgRWxmX0ludGVybmFsX1NoZHIgKnN5bXN0cnRhYl9oZHIgPSBOVUxMOwotICAgICAgIGZpbGVfcHRyIG9mZiA9IHN5bXRhYl9oZHItPnNoX29mZnNldCArIHN5bXRhYl9oZHItPnNoX3NpemU7Ci0gCi0tICAgICAgc3ltdGFiX3NobmR4X2hkciA9ICYgZWxmX3N5bXRhYl9zaG5keF9saXN0IChhYmZkKS0+aGRyOwotLSAgICAgIGlmIChzeW10YWJfc2huZHhfaGRyICE9IE5VTEwgJiYgc3ltdGFiX3NobmR4X2hkci0+c2hfbmFtZSAhPSAwKQotKyAgICAgIGlmIChlbGZfc3ltdGFiX3NobmR4X2xpc3QgKGFiZmQpKQotIAl7Ci0tCSAgc3ltdGFiX3NobmR4X2hkci0+c2hfdHlwZSA9IFNIVF9TWU1UQUJfU0hORFg7Ci0tCSAgc3ltdGFiX3NobmR4X2hkci0+c2hfZW50c2l6ZSA9IHNpemVvZiAoRWxmX0V4dGVybmFsX1N5bV9TaG5keCk7Ci0tCSAgc3ltdGFiX3NobmR4X2hkci0+c2hfYWRkcmFsaWduID0gc2l6ZW9mIChFbGZfRXh0ZXJuYWxfU3ltX1NobmR4KTsKLS0JICBhbXQgPSBiZmRfZ2V0X3N5bWNvdW50IChhYmZkKSAqIHNpemVvZiAoRWxmX0V4dGVybmFsX1N5bV9TaG5keCk7Ci0tCSAgc3ltdGFiX3NobmR4X2hkci0+c2hfc2l6ZSA9IGFtdDsKLSsJICBzeW10YWJfc2huZHhfaGRyID0gJiBlbGZfc3ltdGFiX3NobmR4X2xpc3QgKGFiZmQpLT5oZHI7Ci0gCi0tCSAgb2ZmID0gX2JmZF9lbGZfYXNzaWduX2ZpbGVfcG9zaXRpb25fZm9yX3NlY3Rpb24gKHN5bXRhYl9zaG5keF9oZHIsCi0tCQkJCQkJCSAgIG9mZiwgVFJVRSk7Ci0rCSAgaWYgKHN5bXRhYl9zaG5keF9oZHIgIT0gTlVMTCAmJiBzeW10YWJfc2huZHhfaGRyLT5zaF9uYW1lICE9IDApCi0rCSAgICB7Ci0rCSAgICAgIHN5bXRhYl9zaG5keF9oZHItPnNoX3R5cGUgPSBTSFRfU1lNVEFCX1NITkRYOwotKwkgICAgICBzeW10YWJfc2huZHhfaGRyLT5zaF9lbnRzaXplID0gc2l6ZW9mIChFbGZfRXh0ZXJuYWxfU3ltX1NobmR4KTsKLSsJICAgICAgc3ltdGFiX3NobmR4X2hkci0+c2hfYWRkcmFsaWduID0gc2l6ZW9mIChFbGZfRXh0ZXJuYWxfU3ltX1NobmR4KTsKLSsJICAgICAgYW10ID0gYmZkX2dldF9zeW1jb3VudCAoYWJmZCkgKiBzaXplb2YgKEVsZl9FeHRlcm5hbF9TeW1fU2huZHgpOwotKwkgICAgICBzeW10YWJfc2huZHhfaGRyLT5zaF9zaXplID0gYW10OwotIAotLQkgIGlmIChiZmRfc2VlayAoYWJmZCwgc3ltdGFiX3NobmR4X2hkci0+c2hfb2Zmc2V0LCBTRUVLX1NFVCkgIT0gMAotLQkgICAgICB8fCAoYmZkX2J3cml0ZSAoZmxpbmZvLnN5bXNobmR4YnVmLCBhbXQsIGFiZmQpICE9IGFtdCkpCi0tCSAgICByZXR1cm4gRkFMU0U7Ci0rCSAgICAgIG9mZiA9IF9iZmRfZWxmX2Fzc2lnbl9maWxlX3Bvc2l0aW9uX2Zvcl9zZWN0aW9uIChzeW10YWJfc2huZHhfaGRyLAotKwkJCQkJCQkgICAgICAgb2ZmLCBUUlVFKTsKLSsKLSsJICAgICAgaWYgKGJmZF9zZWVrIChhYmZkLCBzeW10YWJfc2huZHhfaGRyLT5zaF9vZmZzZXQsIFNFRUtfU0VUKSAhPSAwCi0rCQkgIHx8IChiZmRfYndyaXRlIChmbGluZm8uc3ltc2huZHhidWYsIGFtdCwgYWJmZCkgIT0gYW10KSkKLSsJCXJldHVybiBGQUxTRTsKLSsJICAgIH0KLSAJfQotIAotICAgICAgIHN5bXN0cnRhYl9oZHIgPSAmZWxmX3RkYXRhIChhYmZkKS0+c3RydGFiX2hkcjsKLUluZGV4OiBnaXQvYmZkL0NoYW5nZUxvZwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL2JmZC9DaGFuZ2VMb2cKLSsrKyBnaXQvYmZkL0NoYW5nZUxvZwotQEAgLTEsMyArMSwxMSBAQAotKzIwMTctMDQtMDQgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQHJlZGhhdC5jb20+Ci0rCi0rICAgICAgIFBSIGJpbnV0aWxzLzIxMzQyCi0rICAgICAgICogZWxmbGluay5jIChfYmZkX2VsZl9kZWZpbmVfbGlua2FnZV9zeW0pOiBQcmV2ZW50IG51bGwgcG9pbnRlcgotKyAgICAgICBkZXJlZmVyZW5jZS4KLSsgICAgICAgKGJmZF9lbGZfZmluYWxfbGluayk6IE9ubHkgaW5pdGlhbGl6ZSB0aGUgZXh0ZW5kZWQgc3ltYm9sIGluZGV4Ci0rICAgICAgIHNlY3Rpb24gaWYgdGhlcmUgYXJlIGV4dGVuZGVkIHN5bWJvbCB0YWJsZXMgdG8gbGlzdC4KLSsKLSAyMDE3LTAzLTA3ICBBbGFuIE1vZHJhICA8YW1vZHJhQGdtYWlsLmNvbT4KLSAKLSAJUFIgMjEyMjQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctODM5My5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctODM5My5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUwMGEwMy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTgzOTMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMDUgKzAsMCBAQAotRnJvbSBiY2U5NjRhYTZjNzc3ZDIzNmZiZDY0MWYyYmM3YmI5MzFjZmU0YmYzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQWxhbiBNb2RyYSA8YW1vZHJhQGdtYWlsLmNvbT4KLURhdGU6IFN1biwgMjMgQXByIDIwMTcgMTE6MDM6MzQgKzA5MzAKLVN1YmplY3Q6IFtQQVRDSF0gUFIgMjE0MTIsIGdldF9yZWxvY19zZWN0aW9uIGFzc3VtZXMgLnJlbC8ucmVsYSBuYW1lIGZvcgotIFNIVF9SRUwvUkVMQS4KLQotVGhpcyBwYXRjaCBmaXhlcyBhbiBhc3N1bXB0aW9uIG1hZGUgYnkgY29kZSB0aGF0IHJ1bnMgZm9yIG9iamNvcHkgYW5kCi1zdHJpcCwgdGhhdCBTSFRfUkVML1NIUl9SRUxBIHNlY3Rpb25zIGFyZSBhbHdheXMgbmFtZWQgc3RhcnRpbmcgd2l0aCBhCi0ucmVsLy5yZWxhIHByZWZpeC4gIEknbSBhbHNvIG1vZGlmeWluZyB0aGUgaW50ZXJmYWNlIGZvcgotZWxmX2JhY2tlbmRfZ2V0X3JlbG9jX3NlY3Rpb24sIHNvIGFueSBiYWNrZW5kIGZ1bmN0aW9uIGp1c3QgbmVlZHMgdG8KLWhhbmRsZSBuYW1lIG1hcHBpbmcuCi0KLQlQUiAyMTQxMgotCSogZWxmLWJmZC5oIChzdHJ1Y3QgZWxmX2JhY2tlbmRfZGF0YSA8Z2V0X3JlbG9jX3NlY3Rpb24+KTogQ2hhbmdlCi0JcGFyYW1ldGVycyBhbmQgY29tbWVudC4KLQkoX2JmZF9lbGZfZ2V0X3JlbG9jX3NlY3Rpb24pOiBEZWxldGUuCi0JKF9iZmRfZWxmX3BsdF9nZXRfcmVsb2Nfc2VjdGlvbik6IERlY2xhcmUuCi0JKiBlbGYuYyAoX2JmZF9lbGZfcGx0X2dldF9yZWxvY19zZWN0aW9uLCBlbGZfZ2V0X3JlbG9jX3NlY3Rpb24pOgotCU5ldyBmdW5jdGlvbnMuICBEb24ndCBibGluZGx5IHNraXAgb3ZlciBhc3N1bWVkIC5yZWwvLnJlbGEgcHJlZml4LgotCUV4dHJhY3RlZCBmcm9tLi4KLQkoX2JmZF9lbGZfZ2V0X3JlbG9jX3NlY3Rpb24pOiAuLmhlcmUuICBEZWxldGUuCi0JKGFzc2lnbl9zZWN0aW9uX251bWJlcnMpOiBDYWxsIGVsZl9nZXRfcmVsb2Nfc2VjdGlvbi4KLQkqIGVsZjY0LXBwYy5jIChlbGZfYmFja2VuZF9nZXRfcmVsb2Nfc2VjdGlvbik6IERlZmluZS4KLQkqIGVsZnh4LXRhcmdldC5oIChlbGZfYmFja2VuZF9nZXRfcmVsb2Nfc2VjdGlvbik6IFVwZGF0ZS4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQ1ZFOiBDVkUtMjAxNy04MzkzCi1TaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KLQotLS0tCi0gYmZkL0NoYW5nZUxvZyAgICAgIHwgMTUgKysrKysrKysrKysrKysKLSBiZmQvZWxmLWJmZC5oICAgICAgfCAgOCArKysrLS0tCi0gYmZkL2VsZi5jICAgICAgICAgIHwgNjEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gYmZkL2VsZjY0LXBwYy5jICAgIHwgIDEgKwotIGJmZC9lbGZ4eC10YXJnZXQuaCB8ICAyICstCi0gNSBmaWxlcyBjaGFuZ2VkLCA1NyBpbnNlcnRpb25zKCspLCAzMCBkZWxldGlvbnMoLSkKLQotSW5kZXg6IGdpdC9iZmQvZWxmLWJmZC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmZkL2VsZi1iZmQuaAotKysrIGdpdC9iZmQvZWxmLWJmZC5oCi1AQCAtMTMyMiw4ICsxMzIyLDEwIEBAIHN0cnVjdCBlbGZfYmFja2VuZF9kYXRhCi0gICBiZmRfc2l6ZV90eXBlICgqbWF5YmVfZnVuY3Rpb25fc3ltKSAoY29uc3QgYXN5bWJvbCAqc3ltLCBhc2VjdGlvbiAqc2VjLAotIAkJCQkgICAgICAgYmZkX3ZtYSAqY29kZV9vZmYpOwotIAotLSAgLyogUmV0dXJuIHRoZSBzZWN0aW9uIHdoaWNoIFJFTE9DX1NFQyBhcHBsaWVzIHRvLiAgKi8KLS0gIGFzZWN0aW9uICooKmdldF9yZWxvY19zZWN0aW9uKSAoYXNlY3Rpb24gKnJlbG9jX3NlYyk7Ci0rICAvKiBHaXZlbiBOQU1FLCB0aGUgbmFtZSBvZiBhIHJlbG9jYXRpb24gc2VjdGlvbiBzdHJpcHBlZCBvZiBpdHMKLSsgICAgIC5yZWwvLnJlbGEgcHJlZml4LCByZXR1cm4gdGhlIHNlY3Rpb24gaW4gQUJGRCB0byB3aGljaCB0aGUKLSsgICAgIHJlbG9jYXRpb25zIGFwcGx5LiAgKi8KLSsgIGFzZWN0aW9uICooKmdldF9yZWxvY19zZWN0aW9uKSAoYmZkICphYmZkLCBjb25zdCBjaGFyICpuYW1lKTsKLSAKLSAgIC8qIENhbGxlZCB0byBzZXQgdGhlIHNoX2ZsYWdzLCBzaF9saW5rIGFuZCBzaF9pbmZvIGZpZWxkcyBvZiBPU0VDVElPTiB3aGljaAotICAgICAgaGFzIGEgdHlwZSA+PSBTSFRfTE9PUy4gIFJldHVybnMgVFJVRSBpZiB0aGUgZmllbGRzIHdlcmUgaW5pdGlhbGlzZWQsCi1AQCAtMjM5Miw3ICsyMzk0LDcgQEAgZXh0ZXJuIGJmZF9ib29sZWFuIF9iZmRfZWxmX2lzX2Z1bmN0aW9uXwotIGV4dGVybiBiZmRfc2l6ZV90eXBlIF9iZmRfZWxmX21heWJlX2Z1bmN0aW9uX3N5bSAoY29uc3QgYXN5bWJvbCAqLCBhc2VjdGlvbiAqLAotIAkJCQkJCSAgYmZkX3ZtYSAqKTsKLSAKLS1leHRlcm4gYXNlY3Rpb24gKl9iZmRfZWxmX2dldF9yZWxvY19zZWN0aW9uIChhc2VjdGlvbiAqKTsKLStleHRlcm4gYXNlY3Rpb24gKl9iZmRfZWxmX3BsdF9nZXRfcmVsb2Nfc2VjdGlvbiAoYmZkICosIGNvbnN0IGNoYXIgKik7Ci0gCi0gZXh0ZXJuIGludCBiZmRfZWxmX2dldF9kZWZhdWx0X3NlY3Rpb25fdHlwZSAoZmxhZ3dvcmQpOwotIAotSW5kZXg6IGdpdC9iZmQvZWxmLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9iZmQvZWxmLmMKLSsrKyBnaXQvYmZkL2VsZi5jCi1AQCAtMzUzMiwxNyArMzUzMiwzOSBAQCBiZmRfZWxmX3NldF9ncm91cF9jb250ZW50cyAoYmZkICphYmZkLCBhCi0gICBIX1BVVF8zMiAoYWJmZCwgc2VjLT5mbGFncyAmIFNFQ19MSU5LX09OQ0UgPyBHUlBfQ09NREFUIDogMCwgbG9jKTsKLSB9Ci0gCi0tLyogUmV0dXJuIHRoZSBzZWN0aW9uIHdoaWNoIFJFTE9DX1NFQyBhcHBsaWVzIHRvLiAgKi8KLSsvKiBHaXZlbiBOQU1FLCB0aGUgbmFtZSBvZiBhIHJlbG9jYXRpb24gc2VjdGlvbiBzdHJpcHBlZCBvZiBpdHMKLSsgICAucmVsLy5yZWxhIHByZWZpeCwgcmV0dXJuIHRoZSBzZWN0aW9uIGluIEFCRkQgdG8gd2hpY2ggdGhlCi0rICAgcmVsb2NhdGlvbnMgYXBwbHkuICAqLwotIAotIGFzZWN0aW9uICoKLS1fYmZkX2VsZl9nZXRfcmVsb2Nfc2VjdGlvbiAoYXNlY3Rpb24gKnJlbG9jX3NlYykKLStfYmZkX2VsZl9wbHRfZ2V0X3JlbG9jX3NlY3Rpb24gKGJmZCAqYWJmZCwgY29uc3QgY2hhciAqbmFtZSkKLSt7Ci0rICAvKiBJZiBhIHRhcmdldCBuZWVkcyAuZ290LnBsdCBzZWN0aW9uLCByZWxvY2F0aW9ucyBpbiByZWxhLnBsdC9yZWwucGx0Ci0rICAgICBzZWN0aW9uIGxpa2VseSBhcHBseSB0byAuZ290LnBsdCBvciAuZ290IHNlY3Rpb24uICAqLwotKyAgaWYgKGdldF9lbGZfYmFja2VuZF9kYXRhIChhYmZkKS0+d2FudF9nb3RfcGx0Ci0rICAgICAgJiYgc3RyY21wIChuYW1lLCAiLnBsdCIpID09IDApCi0rICAgIHsKLSsgICAgICBhc2VjdGlvbiAqc2VjOwotKwotKyAgICAgIG5hbWUgPSAiLmdvdC5wbHQiOwotKyAgICAgIHNlYyA9IGJmZF9nZXRfc2VjdGlvbl9ieV9uYW1lIChhYmZkLCBuYW1lKTsKLSsgICAgICBpZiAoc2VjICE9IE5VTEwpCi0rCXJldHVybiBzZWM7Ci0rICAgICAgbmFtZSA9ICIuZ290IjsKLSsgICAgfQotKwotKyAgcmV0dXJuIGJmZF9nZXRfc2VjdGlvbl9ieV9uYW1lIChhYmZkLCBuYW1lKTsKLSt9Ci0rCi0rLyogUmV0dXJuIHRoZSBzZWN0aW9uIHRvIHdoaWNoIFJFTE9DX1NFQyBhcHBsaWVzLiAgKi8KLSsKLStzdGF0aWMgYXNlY3Rpb24gKgotK2VsZl9nZXRfcmVsb2Nfc2VjdGlvbiAoYXNlY3Rpb24gKnJlbG9jX3NlYykKLSB7Ci0gICBjb25zdCBjaGFyICpuYW1lOwotICAgdW5zaWduZWQgaW50IHR5cGU7Ci0gICBiZmQgKmFiZmQ7Ci0tCi0tICBpZiAocmVsb2Nfc2VjID09IE5VTEwpCi0tICAgIHJldHVybiBOVUxMOwotKyAgY29uc3Qgc3RydWN0IGVsZl9iYWNrZW5kX2RhdGEgKmJlZDsKLSAKLSAgIHR5cGUgPSBlbGZfc2VjdGlvbl9kYXRhIChyZWxvY19zZWMpLT50aGlzX2hkci5zaF90eXBlOwotICAgaWYgKHR5cGUgIT0gU0hUX1JFTCAmJiB0eXBlICE9IFNIVF9SRUxBKQotQEAgLTM1NTAsMjggKzM1NzIsMTUgQEAgX2JmZF9lbGZfZ2V0X3JlbG9jX3NlY3Rpb24gKGFzZWN0aW9uICpyZQotIAotICAgLyogV2UgbG9vayB1cCB0aGUgc2VjdGlvbiB0aGUgcmVsb2NzIGFwcGx5IHRvIGJ5IG5hbWUuICAqLwotICAgbmFtZSA9IHJlbG9jX3NlYy0+bmFtZTsKLS0gIGlmICh0eXBlID09IFNIVF9SRUwpCi0tICAgIG5hbWUgKz0gNDsKLS0gIGVsc2UKLS0gICAgbmFtZSArPSA1OwotKyAgaWYgKHN0cm5jbXAgKG5hbWUsICIucmVsIiwgNCkgIT0gMCkKLSsgICAgcmV0dXJuIE5VTEw7Ci0rICBuYW1lICs9IDQ7Ci0rICBpZiAodHlwZSA9PSBTSFRfUkVMQSAmJiAqbmFtZSsrICE9ICdhJykKLSsgICAgcmV0dXJuIE5VTEw7Ci0gCi0tICAvKiBJZiBhIHRhcmdldCBuZWVkcyAuZ290LnBsdCBzZWN0aW9uLCByZWxvY2F0aW9ucyBpbiByZWxhLnBsdC9yZWwucGx0Ci0tICAgICBzZWN0aW9uIGFwcGx5IHRvIC5nb3QucGx0IHNlY3Rpb24uICAqLwotICAgYWJmZCA9IHJlbG9jX3NlYy0+b3duZXI7Ci0tICBpZiAoZ2V0X2VsZl9iYWNrZW5kX2RhdGEgKGFiZmQpLT53YW50X2dvdF9wbHQKLS0gICAgICAmJiBzdHJjbXAgKG5hbWUsICIucGx0IikgPT0gMCkKLS0gICAgewotLSAgICAgIC8qIC5nb3QucGx0IGlzIGEgbGlua2VyIGNyZWF0ZWQgaW5wdXQgc2VjdGlvbi4gIEl0IG1heSBiZSBtYXBwZWQKLS0JIHRvIHNvbWUgb3RoZXIgb3V0cHV0IHNlY3Rpb24uICBUcnkgdHdvIGxpa2VseSBzZWN0aW9ucy4gICovCi0tICAgICAgbmFtZSA9ICIuZ290LnBsdCI7Ci0tICAgICAgcmVsb2Nfc2VjID0gYmZkX2dldF9zZWN0aW9uX2J5X25hbWUgKGFiZmQsIG5hbWUpOwotLSAgICAgIGlmIChyZWxvY19zZWMgIT0gTlVMTCkKLS0JcmV0dXJuIHJlbG9jX3NlYzsKLS0gICAgICBuYW1lID0gIi5nb3QiOwotLSAgICB9Ci0tCi0tICByZWxvY19zZWMgPSBiZmRfZ2V0X3NlY3Rpb25fYnlfbmFtZSAoYWJmZCwgbmFtZSk7Ci0tICByZXR1cm4gcmVsb2Nfc2VjOwotKyAgYmVkID0gZ2V0X2VsZl9iYWNrZW5kX2RhdGEgKGFiZmQpOwotKyAgcmV0dXJuIGJlZC0+Z2V0X3JlbG9jX3NlY3Rpb24gKGFiZmQsIG5hbWUpOwotIH0KLSAKLSAvKiBBc3NpZ24gYWxsIEVMRiBzZWN0aW9uIG51bWJlcnMuICBUaGUgZHVtbXkgZmlyc3Qgc2VjdGlvbiBpcyBoYW5kbGVkIGhlcmUKLUBAIC0zODMzLDcgKzM4NDIsNyBAQCBhc3NpZ25fc2VjdGlvbl9udW1iZXJzIChiZmQgKmFiZmQsIHN0cnVjCi0gCSAgaWYgKHMgIT0gTlVMTCkKLSAJICAgIGQtPnRoaXNfaGRyLnNoX2xpbmsgPSBlbGZfc2VjdGlvbl9kYXRhIChzKS0+dGhpc19pZHg7Ci0gCi0tCSAgcyA9IGdldF9lbGZfYmFja2VuZF9kYXRhIChhYmZkKS0+Z2V0X3JlbG9jX3NlY3Rpb24gKHNlYyk7Ci0rCSAgcyA9IGVsZl9nZXRfcmVsb2Nfc2VjdGlvbiAoc2VjKTsKLSAJICBpZiAocyAhPSBOVUxMKQotIAkgICAgewotIAkgICAgICBkLT50aGlzX2hkci5zaF9pbmZvID0gZWxmX3NlY3Rpb25fZGF0YSAocyktPnRoaXNfaWR4OwotSW5kZXg6IGdpdC9iZmQvZWxmNjQtcHBjLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9iZmQvZWxmNjQtcHBjLmMKLSsrKyBnaXQvYmZkL2VsZjY0LXBwYy5jCi1AQCAtMTIxLDYgKzEyMSw3IEBAIHN0YXRpYyBiZmRfdm1hIG9wZF9lbnRyeV92YWx1ZQotICNkZWZpbmUgZWxmX2JhY2tlbmRfc3BlY2lhbF9zZWN0aW9ucwkgICAgICBwcGM2NF9lbGZfc3BlY2lhbF9zZWN0aW9ucwotICNkZWZpbmUgZWxmX2JhY2tlbmRfbWVyZ2Vfc3ltYm9sX2F0dHJpYnV0ZSAgICBwcGM2NF9lbGZfbWVyZ2Vfc3ltYm9sX2F0dHJpYnV0ZQotICNkZWZpbmUgZWxmX2JhY2tlbmRfbWVyZ2Vfc3ltYm9sCSAgICAgIHBwYzY0X2VsZl9tZXJnZV9zeW1ib2wKLSsjZGVmaW5lIGVsZl9iYWNrZW5kX2dldF9yZWxvY19zZWN0aW9uCSAgICAgIGJmZF9nZXRfc2VjdGlvbl9ieV9uYW1lCi0gCi0gLyogVGhlIG5hbWUgb2YgdGhlIGR5bmFtaWMgaW50ZXJwcmV0ZXIuICBUaGlzIGlzIHB1dCBpbiB0aGUgLmludGVycAotICAgIHNlY3Rpb24uICAqLwotSW5kZXg6IGdpdC9iZmQvZWxmeHgtdGFyZ2V0LmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9iZmQvZWxmeHgtdGFyZ2V0LmgKLSsrKyBnaXQvYmZkL2VsZnh4LXRhcmdldC5oCi1AQCAtNzA2LDcgKzcwNiw3IEBACi0gI2VuZGlmCi0gCi0gI2lmbmRlZiBlbGZfYmFja2VuZF9nZXRfcmVsb2Nfc2VjdGlvbgotLSNkZWZpbmUgZWxmX2JhY2tlbmRfZ2V0X3JlbG9jX3NlY3Rpb24gX2JmZF9lbGZfZ2V0X3JlbG9jX3NlY3Rpb24KLSsjZGVmaW5lIGVsZl9iYWNrZW5kX2dldF9yZWxvY19zZWN0aW9uIF9iZmRfZWxmX3BsdF9nZXRfcmVsb2Nfc2VjdGlvbgotICNlbmRpZgotIAotICNpZm5kZWYgZWxmX2JhY2tlbmRfY29weV9zcGVjaWFsX3NlY3Rpb25fZmllbGRzCi1JbmRleDogZ2l0L2JmZC9DaGFuZ2VMb2cKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9iZmQvQ2hhbmdlTG9nCi0rKysgZ2l0L2JmZC9DaGFuZ2VMb2cKLUBAIC0xLDMgKzEsMTggQEAKLSsyMDE3LTA0LTIzICBBbGFuIE1vZHJhICA8YW1vZHJhQGdtYWlsLmNvbT4KLSsgCi0rICAgICAgIFBSIDIxNDEyCi0rICAgICAgICogZWxmLWJmZC5oIChzdHJ1Y3QgZWxmX2JhY2tlbmRfZGF0YSA8Z2V0X3JlbG9jX3NlY3Rpb24+KTogQ2hhbmdlCi0rICAgICAgIHBhcmFtZXRlcnMgYW5kIGNvbW1lbnQuCi0rICAgICAgIChfYmZkX2VsZl9nZXRfcmVsb2Nfc2VjdGlvbik6IERlbGV0ZS4KLSsgICAgICAgKF9iZmRfZWxmX3BsdF9nZXRfcmVsb2Nfc2VjdGlvbik6IERlY2xhcmUuCi0rICAgICAgICogZWxmLmMgKF9iZmRfZWxmX3BsdF9nZXRfcmVsb2Nfc2VjdGlvbiwgZWxmX2dldF9yZWxvY19zZWN0aW9uKToKLSsgICAgICAgTmV3IGZ1bmN0aW9ucy4gIERvbid0IGJsaW5kbHkgc2tpcCBvdmVyIGFzc3VtZWQgLnJlbC8ucmVsYSBwcmVmaXguCi0rICAgICAgIEV4dHJhY3RlZCBmcm9tLi4KLSsgICAgICAgKF9iZmRfZWxmX2dldF9yZWxvY19zZWN0aW9uKTogLi5oZXJlLiAgRGVsZXRlLgotKyAgICAgICAoYXNzaWduX3NlY3Rpb25fbnVtYmVycyk6IENhbGwgZWxmX2dldF9yZWxvY19zZWN0aW9uLgotKyAgICAgICAqIGVsZjY0LXBwYy5jIChlbGZfYmFja2VuZF9nZXRfcmVsb2Nfc2VjdGlvbik6IERlZmluZS4KLSsgICAgICAgKiBlbGZ4eC10YXJnZXQuaCAoZWxmX2JhY2tlbmRfZ2V0X3JlbG9jX3NlY3Rpb24pOiBVcGRhdGUuCi0rCi0gMjAxNy0wNC0wNCAgTmljayBDbGlmdG9uICA8bmlja2NAcmVkaGF0LmNvbT4KLSAKLSAgICAgICAgUFIgYmludXRpbHMvMjEzNDIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctODM5NC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctODM5NC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZjNmIxNy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTgzOTQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotRnJvbSA3ZWFjZDY2YjA4NmNhYmIxZGFhYjIwODkwZDU0ODE4OTRkNGY1NmIyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQWxhbiBNb2RyYSA8YW1vZHJhQGdtYWlsLmNvbT4KLURhdGU6IFN1biwgMjMgQXByIDIwMTcgMTU6MjE6MTEgKzA5MzAKLVN1YmplY3Q6IFtQQVRDSF0gUFIgMjE0MTQsIG51bGwgcG9pbnRlciBkZXJlZiBvZiBfYmZkX2VsZl9sYXJnZV9jb21fc2VjdGlvbgotIHN5bQotCi0JUFIgMjE0MTQKLQkqIHNlY3Rpb24uYyAoR0xPQkFMX1NZTV9JTklUKTogTWFrZSBhdmFpbGFibGUgaW4gYmZkLmguCi0JKiBlbGYuYyAobGNvbW1fc3ltKTogTmV3LgotCShfYmZkX2VsZl9sYXJnZV9jb21fc2VjdGlvbik6IFVzZSBsY29tbV9zeW0gc2VjdGlvbiBzeW1ib2wuCi0JKiBiZmQtaW4yLmg6IFJlZ2VuZXJhdGUuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLUNWRTogQ1ZFLTIwMTctODM5NAotU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+Ci0KLS0tLQotIGJmZC9DaGFuZ2VMb2cgfCAgOCArKysrKysrKwotIGJmZC9iZmQtaW4yLmggfCAxMiArKysrKysrKysrKysKLSBiZmQvZWxmLmMgICAgIHwgIDYgKysrKy0tCi0gYmZkL3NlY3Rpb24uYyB8IDI0ICsrKysrKysrKysrKy0tLS0tLS0tLS0tLQotIDQgZmlsZXMgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCi0KLUluZGV4OiBnaXQvYmZkL2JmZC1pbjIuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL2JmZC9iZmQtaW4yLmgKLSsrKyBnaXQvYmZkL2JmZC1pbjIuaAotQEAgLTE4MzgsNiArMTgzOCwxOCBAQCBleHRlcm4gYXNlY3Rpb24gX2JmZF9zdGRfc2VjdGlvbls0XTsKLSAgICAgIHsgTlVMTCB9LCB7IE5VTEwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgfQotIAotKy8qIFdlIHVzZSBhIG1hY3JvIHRvIGluaXRpYWxpemUgdGhlIHN0YXRpYyBhc3ltYm9sIHN0cnVjdHVyZXMgYmVjYXVzZQotKyAgIHRyYWRpdGlvbmFsIEMgZG9lcyBub3QgcGVybWl0IHVzIHRvIGluaXRpYWxpemUgYSB1bmlvbiBtZW1iZXIgd2hpbGUKLSsgICBnY2Mgd2FybnMgaWYgd2UgZG9uJ3QgaW5pdGlhbGl6ZSBpdC4KLSsgICB0aGVfYmZkLCBuYW1lLCB2YWx1ZSwgYXR0ciwgc2VjdGlvbiBbLCB1ZGF0YV0gICovCi0rI2lmZGVmIF9fU1REQ19fCi0rI2RlZmluZSBHTE9CQUxfU1lNX0lOSVQoTkFNRSwgU0VDVElPTikgXAotKyAgeyAwLCBOQU1FLCAwLCBCU0ZfU0VDVElPTl9TWU0sIFNFQ1RJT04sIHsgMCB9fQotKyNlbHNlCi0rI2RlZmluZSBHTE9CQUxfU1lNX0lOSVQoTkFNRSwgU0VDVElPTikgXAotKyAgeyAwLCBOQU1FLCAwLCBCU0ZfU0VDVElPTl9TWU0sIFNFQ1RJT04gfQotKyNlbmRpZgotKwotIHZvaWQgYmZkX3NlY3Rpb25fbGlzdF9jbGVhciAoYmZkICopOwotIAotIGFzZWN0aW9uICpiZmRfZ2V0X3NlY3Rpb25fYnlfbmFtZSAoYmZkICphYmZkLCBjb25zdCBjaGFyICpuYW1lKTsKLUluZGV4OiBnaXQvYmZkL2VsZi5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmZkL2VsZi5jCi0rKysgZ2l0L2JmZC9lbGYuYwotQEAgLTExMTY0LDkgKzExMTY0LDExIEBAIF9iZmRfZWxmX2dldF9zeW50aGV0aWNfc3ltdGFiIChiZmQgKmFiZmQKLSAKLSAvKiBJdCBpcyBvbmx5IHVzZWQgYnkgeDg2LTY0IHNvIGZhci4KLSAgICA/Pz8gVGhpcyByZXBlYXRzICpDT00qIGlkIG9mIHplcm8uICBzZWMtPmlkIGlzIHN1cHBvc2VkIHRvIGJlIHVuaXF1ZSwKLS0gICBidXQgY3VycmVudCB1c2FnZSB3b3VsZCBhbGxvdyBhbGwgb2YgX2JmZF9zdGRfc2VjdGlvbiB0byBiZSB6ZXJvLiAgdCovCi0rICAgYnV0IGN1cnJlbnQgdXNhZ2Ugd291bGQgYWxsb3cgYWxsIG9mIF9iZmRfc3RkX3NlY3Rpb24gdG8gYmUgemVyby4gICovCi0rc3RhdGljIGNvbnN0IGFzeW1ib2wgbGNvbW1fc3ltCi0rICA9IEdMT0JBTF9TWU1fSU5JVCAoIkxBUkdFX0NPTU1PTiIsICZfYmZkX2VsZl9sYXJnZV9jb21fc2VjdGlvbik7Ci0gYXNlY3Rpb24gX2JmZF9lbGZfbGFyZ2VfY29tX3NlY3Rpb24KLS0gID0gQkZEX0ZBS0VfU0VDVElPTiAoX2JmZF9lbGZfbGFyZ2VfY29tX3NlY3Rpb24sIE5VTEwsCi0rICA9IEJGRF9GQUtFX1NFQ1RJT04gKF9iZmRfZWxmX2xhcmdlX2NvbV9zZWN0aW9uLCAmbGNvbW1fc3ltLAotIAkJICAgICAgIkxBUkdFX0NPTU1PTiIsIDAsIFNFQ19JU19DT01NT04pOwotIAotIHZvaWQKLUluZGV4OiBnaXQvYmZkL3NlY3Rpb24uYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL2JmZC9zZWN0aW9uLmMKLSsrKyBnaXQvYmZkL3NlY3Rpb24uYwotQEAgLTczOCwyMCArNzM4LDIwIEBAIENPREVfRlJBR01FTlQKLSAuICAgICB7IE5VTEwgfSwgeyBOVUxMIH0JCQkJCQlcCi0gLiAgICB9Ci0gLgotKy57KiBXZSB1c2UgYSBtYWNybyB0byBpbml0aWFsaXplIHRoZSBzdGF0aWMgYXN5bWJvbCBzdHJ1Y3R1cmVzIGJlY2F1c2UKLSsuICAgdHJhZGl0aW9uYWwgQyBkb2VzIG5vdCBwZXJtaXQgdXMgdG8gaW5pdGlhbGl6ZSBhIHVuaW9uIG1lbWJlciB3aGlsZQotKy4gICBnY2Mgd2FybnMgaWYgd2UgZG9uJ3QgaW5pdGlhbGl6ZSBpdC4KLSsuICAgdGhlX2JmZCwgbmFtZSwgdmFsdWUsIGF0dHIsIHNlY3Rpb24gWywgdWRhdGFdICAqfQotKy4jaWZkZWYgX19TVERDX18KLSsuI2RlZmluZSBHTE9CQUxfU1lNX0lOSVQoTkFNRSwgU0VDVElPTikgXAotKy4gIHsgMCwgTkFNRSwgMCwgQlNGX1NFQ1RJT05fU1lNLCBTRUNUSU9OLCB7IDAgfX0KLSsuI2Vsc2UKLSsuI2RlZmluZSBHTE9CQUxfU1lNX0lOSVQoTkFNRSwgU0VDVElPTikgXAotKy4gIHsgMCwgTkFNRSwgMCwgQlNGX1NFQ1RJT05fU1lNLCBTRUNUSU9OIH0KLSsuI2VuZGlmCi0rLgotICovCi0gCi0tLyogV2UgdXNlIGEgbWFjcm8gdG8gaW5pdGlhbGl6ZSB0aGUgc3RhdGljIGFzeW1ib2wgc3RydWN0dXJlcyBiZWNhdXNlCi0tICAgdHJhZGl0aW9uYWwgQyBkb2VzIG5vdCBwZXJtaXQgdXMgdG8gaW5pdGlhbGl6ZSBhIHVuaW9uIG1lbWJlciB3aGlsZQotLSAgIGdjYyB3YXJucyBpZiB3ZSBkb24ndCBpbml0aWFsaXplIGl0LiAgKi8KLS0gLyogdGhlX2JmZCwgbmFtZSwgdmFsdWUsIGF0dHIsIHNlY3Rpb24gWywgdWRhdGFdICovCi0tI2lmZGVmIF9fU1REQ19fCi0tI2RlZmluZSBHTE9CQUxfU1lNX0lOSVQoTkFNRSwgU0VDVElPTikgXAotLSAgeyAwLCBOQU1FLCAwLCBCU0ZfU0VDVElPTl9TWU0sIFNFQ1RJT04sIHsgMCB9fQotLSNlbHNlCi0tI2RlZmluZSBHTE9CQUxfU1lNX0lOSVQoTkFNRSwgU0VDVElPTikgXAotLSAgeyAwLCBOQU1FLCAwLCBCU0ZfU0VDVElPTl9TWU0sIFNFQ1RJT04gfQotLSNlbmRpZgotLQotIC8qIFRoZXNlIHN5bWJvbHMgYXJlIGdsb2JhbCwgbm90IHNwZWNpZmljIHRvIGFueSBCRkQuICBUaGVyZWZvcmUsIGFueXRoaW5nCi0gICAgdGhhdCB0cmllcyB0byBjaGFuZ2UgdGhlbSBpcyBicm9rZW4sIGFuZCBzaG91bGQgYmUgcmVwYWlyZWQuICAqLwotIAotSW5kZXg6IGdpdC9iZmQvQ2hhbmdlTG9nCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmZkL0NoYW5nZUxvZwotKysrIGdpdC9iZmQvQ2hhbmdlTG9nCi1AQCAtMSw0ICsxLDEyIEBACi0rCi0gMjAxNy0wNC0yMyAgQWxhbiBNb2RyYSAgPGFtb2RyYUBnbWFpbC5jb20+Ci0rICAgICAgIFBSIDIxNDE0Ci0rICAgICAgICogc2VjdGlvbi5jIChHTE9CQUxfU1lNX0lOSVQpOiBNYWtlIGF2YWlsYWJsZSBpbiBiZmQuaC4KLSsgICAgICAgKiBlbGYuYyAobGNvbW1fc3ltKTogTmV3LgotKyAgICAgICAoX2JmZF9lbGZfbGFyZ2VfY29tX3NlY3Rpb24pOiBVc2UgbGNvbW1fc3ltIHNlY3Rpb24gc3ltYm9sLgotKyAgICAgICAqIGJmZC1pbjIuaDogUmVnZW5lcmF0ZS4KLSsKLSsrMjAxNy0wNC0yMyAgQWxhbiBNb2RyYSAgPGFtb2RyYUBnbWFpbC5jb20+Ci0gIAotICAgICAgICBQUiAyMTQxMgotICAgICAgICAqIGVsZi1iZmQuaCAoc3RydWN0IGVsZl9iYWNrZW5kX2RhdGEgPGdldF9yZWxvY19zZWN0aW9uPik6IENoYW5nZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy04Mzk1LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy04Mzk1LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTliY2UzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctODM5NS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLUZyb20gZTYzZDEyMzI2OGYyM2E0Y2JjNDVlZTU1ZmI2ZGJjN2Q4NDcyOWRhMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IE5pY2sgQ2xpZnRvbiA8bmlja2NAcmVkaGF0LmNvbT4KLURhdGU6IFdlZCwgMjYgQXByIDIwMTcgMTM6MDc6NDkgKzAxMDAKLVN1YmplY3Q6IFtQQVRDSF0gRml4IHNlZy1mYXVsdCBhdHRlbXB0aW5nIHRvIGNvbXByZXNzIGEgZGVidWcgc2VjdGlvbiBpbiBhCi0gY29ycnVwdCBiaW5hcnkuCi0KLQlQUiBiaW51dGlscy8yMTQzMQotCSogY29tcHJlc3MuYyAoYmZkX2luaXRfc2VjdGlvbl9jb21wcmVzc19zdGF0dXMpOiBDaGVjayB0aGUgcmV0dXJuCi0JdmFsdWUgZnJvbSBiZmRfbWFsbG9jLgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1DVkU6IENWRS0yMDE3LTgzOTUKLVNpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgotCi0tLS0KLSBiZmQvQ2hhbmdlTG9nICB8ICA2ICsrKysrKwotIGJmZC9jb21wcmVzcy5jIHwgMTkgKysrKysrKysrLS0tLS0tLS0tLQotIDIgZmlsZXMgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCi0KLUluZGV4OiBnaXQvYmZkL2NvbXByZXNzLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9iZmQvY29tcHJlc3MuYwotKysrIGdpdC9iZmQvY29tcHJlc3MuYwotQEAgLTU0Miw3ICs1NDIsNiBAQCBiZmRfaW5pdF9zZWN0aW9uX2NvbXByZXNzX3N0YXR1cyAoYmZkICphCi0gewotICAgYmZkX3NpemVfdHlwZSB1bmNvbXByZXNzZWRfc2l6ZTsKLSAgIGJmZF9ieXRlICp1bmNvbXByZXNzZWRfYnVmZmVyOwotLSAgYmZkX2Jvb2xlYW4gcmV0OwotIAotICAgLyogRXJyb3IgaWYgbm90IG9wZW5lZCBmb3IgcmVhZC4gICovCi0gICBpZiAoYWJmZC0+ZGlyZWN0aW9uICE9IHJlYWRfZGlyZWN0aW9uCi1AQCAtNTU4LDE4ICs1NTcsMTggQEAgYmZkX2luaXRfc2VjdGlvbl9jb21wcmVzc19zdGF0dXMgKGJmZCAqYQotICAgLyogUmVhZCBpbiB0aGUgZnVsbCBzZWN0aW9uIGNvbnRlbnRzIGFuZCBjb21wcmVzcyBpdC4gICovCi0gICB1bmNvbXByZXNzZWRfc2l6ZSA9IHNlYy0+c2l6ZTsKLSAgIHVuY29tcHJlc3NlZF9idWZmZXIgPSAoYmZkX2J5dGUgKikgYmZkX21hbGxvYyAodW5jb21wcmVzc2VkX3NpemUpOwotKyAgLyogUFIgMjE0MzEgKi8KLSsgIGlmICh1bmNvbXByZXNzZWRfYnVmZmVyID09IE5VTEwpCi0rICAgIHJldHVybiBGQUxTRTsKLSsKLSAgIGlmICghYmZkX2dldF9zZWN0aW9uX2NvbnRlbnRzIChhYmZkLCBzZWMsIHVuY29tcHJlc3NlZF9idWZmZXIsCi0gCQkJCSAwLCB1bmNvbXByZXNzZWRfc2l6ZSkpCi0tICAgIHJldCA9IEZBTFNFOwotLSAgZWxzZQotLSAgICB7Ci0tICAgICAgdW5jb21wcmVzc2VkX3NpemUgPSBiZmRfY29tcHJlc3Nfc2VjdGlvbl9jb250ZW50cyAoYWJmZCwgc2VjLAotLQkJCQkJCQkgdW5jb21wcmVzc2VkX2J1ZmZlciwKLS0JCQkJCQkJIHVuY29tcHJlc3NlZF9zaXplKTsKLS0gICAgICByZXQgPSB1bmNvbXByZXNzZWRfc2l6ZSAhPSAwOwotLSAgICB9Ci0rICAgIHJldHVybiBGQUxTRTsKLSAKLS0gIHJldHVybiByZXQ7Ci0rICB1bmNvbXByZXNzZWRfc2l6ZSA9IGJmZF9jb21wcmVzc19zZWN0aW9uX2NvbnRlbnRzIChhYmZkLCBzZWMsCi0rCQkJCQkJICAgICB1bmNvbXByZXNzZWRfYnVmZmVyLAotKwkJCQkJCSAgICAgdW5jb21wcmVzc2VkX3NpemUpOwotKyAgcmV0dXJuIHVuY29tcHJlc3NlZF9zaXplICE9IDA7Ci0gfQotIAotIC8qCi1JbmRleDogZ2l0L2JmZC9DaGFuZ2VMb2cKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9iZmQvQ2hhbmdlTG9nCi0rKysgZ2l0L2JmZC9DaGFuZ2VMb2cKLUBAIC0xLDMgKzEsOCBAQAotKzIwMTctMDQtMjYgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQHJlZGhhdC5jb20+Ci0rCi0rICAgICAgIFBSIGJpbnV0aWxzLzIxNDMxCi0rICAgICAgICogY29tcHJlc3MuYyAoYmZkX2luaXRfc2VjdGlvbl9jb21wcmVzc19zdGF0dXMpOiBDaGVjayB0aGUgcmV0dXJuCi0rICAgICAgIHZhbHVlIGZyb20gYmZkX21hbGxvYy4KLSAKLSAyMDE3LTA0LTIzICBBbGFuIE1vZHJhICA8YW1vZHJhQGdtYWlsLmNvbT4KLSAgICAgICAgUFIgMjE0MTQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctODM5Nl84Mzk3LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy04Mzk2XzgzOTcucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZjQyODIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy04Mzk2XzgzOTcucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotRnJvbSBhOTQxMjkxY2FiNzFiOWFjMzU2ZTFjMDM5NjhjMTc3YzAzZTYwMmFiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQWxhbiBNb2RyYSA8YW1vZHJhQGdtYWlsLmNvbT4KLURhdGU6IFNhdCwgMjkgQXByIDIwMTcgMTQ6NDg6MTYgKzA5MzAKLVN1YmplY3Q6IFtQQVRDSF0gUFIyMTQzMiwgYnVmZmVyIG92ZXJmbG93IGluIHBlcmZvcm1fcmVsb2NhdGlvbgotCi1UaGUgZXhpc3RpbmcgcmVsb2Mgb2Zmc2V0IHJhbmdlIHRlc3RzIGRpZG4ndCBjYXRjaCBzbWFsbCBuZWdhdGl2ZQotb2Zmc2V0cyBsZXNzIHRoYW4gdGhlIHNpemUgb2YgdGhlIHJlbG9jIGZpZWxkLgotCi0JUFIgMjE0MzIKLQkqIHJlbG9jLmMgKHJlbG9jX29mZnNldF9pbl9yYW5nZSk6IE5ldyBmdW5jdGlvbi4KLQkoYmZkX3BlcmZvcm1fcmVsb2NhdGlvbiwgYmZkX2luc3RhbGxfcmVsb2NhdGlvbik6IFVzZSBpdC4KLQkoX2JmZF9maW5hbF9saW5rX3JlbG9jYXRlKTogTGlrZXdpc2UuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLUNWRTogQ1ZFLTIwMTctODM5NgotQ1ZFOiBDVkUtMjAxNy04Mzk3Ci1TaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KLQotLS0tCi0gYmZkL0NoYW5nZUxvZyB8ICA3ICsrKysrKysKLSBiZmQvcmVsb2MuYyAgIHwgMzIgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDI3IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQotCi1JbmRleDogZ2l0L2JmZC9yZWxvYy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmZkL3JlbG9jLmMKLSsrKyBnaXQvYmZkL3JlbG9jLmMKLUBAIC01MzgsNiArNTM4LDIyIEBAIGJmZF9jaGVja19vdmVyZmxvdyAoZW51bSBjb21wbGFpbl9vdmVyZmwKLSAgIHJldHVybiBmbGFnOwotIH0KLSAKLSsvKiBIT1dUTyBkZXNjcmliZXMgYSByZWxvY2F0aW9uLCBhdCBvZmZzZXQgT0NURVQuICBSZXR1cm4gd2hldGhlciB0aGUKLSsgICByZWxvY2F0aW9uIGZpZWxkIGlzIHdpdGhpbiBTRUNUSU9OIG9mIEFCRkQuICAqLwotKwotK3N0YXRpYyBiZmRfYm9vbGVhbgotK3JlbG9jX29mZnNldF9pbl9yYW5nZSAocmVsb2NfaG93dG9fdHlwZSAqaG93dG8sIGJmZCAqYWJmZCwKLSsJCSAgICAgICBhc2VjdGlvbiAqc2VjdGlvbiwgYmZkX3NpemVfdHlwZSBvY3RldCkKLSt7Ci0rICBiZmRfc2l6ZV90eXBlIG9jdGV0X2VuZCA9IGJmZF9nZXRfc2VjdGlvbl9saW1pdF9vY3RldHMgKGFiZmQsIHNlY3Rpb24pOwotKyAgYmZkX3NpemVfdHlwZSByZWxvY19zaXplID0gYmZkX2dldF9yZWxvY19zaXplIChob3d0byk7Ci0rCi0rICAvKiBUaGUgcmVsb2MgZmllbGQgbXVzdCBiZSBjb250YWluZWQgZW50aXJlbHkgd2l0aGluIHRoZSBzZWN0aW9uLgotKyAgICAgQWxsb3cgemVybyBsZW5ndGggZmllbGRzIChtYXJrZXIgcmVsb2NzIG9yIE5PTkUgcmVsb2NzIHdoZXJlIG5vCi0rICAgICByZWxvY2F0aW9uIHdpbGwgYmUgcGVyZm9ybWVkKSBhdCB0aGUgZW5kIG9mIHRoZSBzZWN0aW9uLiAgKi8KLSsgIHJldHVybiBvY3RldCA8PSBvY3RldF9lbmQgJiYgb2N0ZXQgKyByZWxvY19zaXplIDw9IG9jdGV0X2VuZDsKLSt9Ci0rCi0gLyoKLSBGVU5DVElPTgotIAliZmRfcGVyZm9ybV9yZWxvY2F0aW9uCi1AQCAtNjE4LDEzICs2MzQsMTAgQEAgYmZkX3BlcmZvcm1fcmVsb2NhdGlvbiAoYmZkICphYmZkLAotICAgLyogUFIgMTc1MTI6IGZpbGU6IDBmNjdmNjlkLiAgKi8KLSAgIGlmIChob3d0byA9PSBOVUxMKQotICAgICByZXR1cm4gYmZkX3JlbG9jX3VuZGVmaW5lZDsKLS0KLS0gIC8qIElzIHRoZSBhZGRyZXNzIG9mIHRoZSByZWxvY2F0aW9uIHJlYWxseSB3aXRoaW4gdGhlIHNlY3Rpb24/Ci0tICAgICBJbmNsdWRlIHRoZSBzaXplIG9mIHRoZSByZWxvYyBpbiB0aGUgdGVzdCBmb3Igb3V0IG9mIHJhbmdlIGFkZHJlc3Nlcy4KLS0gICAgIFBSIDE3NTEyOiBmaWxlOiBjMTQ2YWI4YiwgNDZkZmYyN2YsIDM4ZTUzZWJmLiAgKi8KLSsgIAotKyAgLyogSXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHJlbG9jYXRpb24gcmVhbGx5IHdpdGhpbiB0aGUgc2VjdGlvbj8gICovCi0gICBvY3RldHMgPSByZWxvY19lbnRyeS0+YWRkcmVzcyAqIGJmZF9vY3RldHNfcGVyX2J5dGUgKGFiZmQpOwotLSAgaWYgKG9jdGV0cyArIGJmZF9nZXRfcmVsb2Nfc2l6ZSAoaG93dG8pCi0tICAgICAgPiBiZmRfZ2V0X3NlY3Rpb25fbGltaXRfb2N0ZXRzIChhYmZkLCBpbnB1dF9zZWN0aW9uKSkKLSsgIGlmICghcmVsb2Nfb2Zmc2V0X2luX3JhbmdlIChob3d0bywgYWJmZCwgaW5wdXRfc2VjdGlvbiwgb2N0ZXRzKSkKLSAgICAgcmV0dXJuIGJmZF9yZWxvY19vdXRvZnJhbmdlOwotIAotICAgLyogV29yayBvdXQgd2hpY2ggc2VjdGlvbiB0aGUgcmVsb2NhdGlvbiBpcyB0YXJnZXRlZCBhdCBhbmQgdGhlCi1AQCAtMTAxMiw4ICsxMDI1LDcgQEAgYmZkX2luc3RhbGxfcmVsb2NhdGlvbiAoYmZkICphYmZkLAotIAotICAgLyogSXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHJlbG9jYXRpb24gcmVhbGx5IHdpdGhpbiB0aGUgc2VjdGlvbj8gICovCi0gICBvY3RldHMgPSByZWxvY19lbnRyeS0+YWRkcmVzcyAqIGJmZF9vY3RldHNfcGVyX2J5dGUgKGFiZmQpOwotLSAgaWYgKG9jdGV0cyArIGJmZF9nZXRfcmVsb2Nfc2l6ZSAoaG93dG8pCi0tICAgICAgPiBiZmRfZ2V0X3NlY3Rpb25fbGltaXRfb2N0ZXRzIChhYmZkLCBpbnB1dF9zZWN0aW9uKSkKLSsgIGlmICghcmVsb2Nfb2Zmc2V0X2luX3JhbmdlIChob3d0bywgYWJmZCwgaW5wdXRfc2VjdGlvbiwgb2N0ZXRzKSkKLSAgICAgcmV0dXJuIGJmZF9yZWxvY19vdXRvZnJhbmdlOwotIAotICAgLyogV29yayBvdXQgd2hpY2ggc2VjdGlvbiB0aGUgcmVsb2NhdGlvbiBpcyB0YXJnZXRlZCBhdCBhbmQgdGhlCi1AQCAtMTM1MSw4ICsxMzYzLDcgQEAgX2JmZF9maW5hbF9saW5rX3JlbG9jYXRlIChyZWxvY19ob3d0b190eQotICAgYmZkX3NpemVfdHlwZSBvY3RldHMgPSBhZGRyZXNzICogYmZkX29jdGV0c19wZXJfYnl0ZSAoaW5wdXRfYmZkKTsKLSAKLSAgIC8qIFNhbml0eSBjaGVjayB0aGUgYWRkcmVzcy4gICovCi0tICBpZiAob2N0ZXRzICsgYmZkX2dldF9yZWxvY19zaXplIChob3d0bykKLS0gICAgICA+IGJmZF9nZXRfc2VjdGlvbl9saW1pdF9vY3RldHMgKGlucHV0X2JmZCwgaW5wdXRfc2VjdGlvbikpCi0rICBpZiAoIXJlbG9jX29mZnNldF9pbl9yYW5nZSAoaG93dG8sIGlucHV0X2JmZCwgaW5wdXRfc2VjdGlvbiwgb2N0ZXRzKSkKLSAgICAgcmV0dXJuIGJmZF9yZWxvY19vdXRvZnJhbmdlOwotIAotICAgLyogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIGJhc2ljIHJlbG9jYXRpb24KLUluZGV4OiBnaXQvYmZkL0NoYW5nZUxvZwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL2JmZC9DaGFuZ2VMb2cKLSsrKyBnaXQvYmZkL0NoYW5nZUxvZwotQEAgLTEsMyArMSwxMCBAQAotKzIwMTctMDQtMjkgIEFsYW4gTW9kcmEgIDxhbW9kcmFAZ21haWwuY29tPgotKwotKyAgICAgICBQUiAyMTQzMgotKyAgICAgICAqIHJlbG9jLmMgKHJlbG9jX29mZnNldF9pbl9yYW5nZSk6IE5ldyBmdW5jdGlvbi4KLSsgICAgICAgKGJmZF9wZXJmb3JtX3JlbG9jYXRpb24sIGJmZF9pbnN0YWxsX3JlbG9jYXRpb24pOiBVc2UgaXQuCi0rICAgICAgIChfYmZkX2ZpbmFsX2xpbmtfcmVsb2NhdGUpOiBMaWtld2lzZS4KLSsKLSAyMDE3LTA0LTI2ICBOaWNrIENsaWZ0b24gIDxuaWNrY0ByZWRoYXQuY29tPgotIAotICAgICAgICBQUiBiaW51dGlscy8yMTQzMQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy04Mzk4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy04Mzk4LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjlhY2M4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctODM5OC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi1Gcm9tIGQ5NDlmZjU2MDdiOWY1OTVlMGVlZDJmZjE1ZmJlNWViODRlYjNhMzQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBOaWNrIENsaWZ0b24gPG5pY2tjQHJlZGhhdC5jb20+Ci1EYXRlOiBGcmksIDI4IEFwciAyMDE3IDEwOjI4OjA0ICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIEZpeCBoZWFwLWJ1ZmZlciBvdmVyZmxvdyBidWdzIGNhdXNlZCB3aGVuIGR1bXBpbmcgZGVidWcKLSBpbmZvcm1hdGlvbiBmcm9tIGEgY29ycnVwdCBiaW5hcnkuCi0KLQlQUiBiaW51dGlscy8yMTQzOAotCSogZHdhcmYuYyAocHJvY2Vzc19leHRlbmRlZF9saW5lX29wKTogRG8gbm90IGFzc3VtZSB0aGF0IHRoZQotCXN0cmluZyBleHRyYWN0ZWQgZnJvbSB0aGUgc2VjdGlvbiBpcyBOVUwgdGVybWluYXRlZC4KLQkoZmV0Y2hfaW5kaXJlY3Rfc3RyaW5nKTogSWYgdGhlIHN0cmluZyByZXRyaWV2ZWQgZnJvbSB0aGUgc2VjdGlvbgotCWlzIG5vdCBOVUwgdGVybWluYXRlZCwgcmV0dXJuIGFuIGVycm9yIG1lc3NhZ2UuCi0JKGZldGNoX2luZGlyZWN0X2xpbmVfc3RyaW5nKTogTGlrZXdpc2UuCi0JKGZldGNoX2luZGV4ZWRfc3RyaW5nKTogTGlrZXdpc2UuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLUNWRTogQ1ZFLTIwMTctODM5OAotU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+Ci0KLS0tLQotIGJpbnV0aWxzL0NoYW5nZUxvZyB8IDEwICsrKysrKysrKwotIGJpbnV0aWxzL2R3YXJmLmMgICB8IDY2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQotIDIgZmlsZXMgY2hhbmdlZCwgNjAgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCi0KLUluZGV4OiBnaXQvYmludXRpbHMvZHdhcmYuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL2JpbnV0aWxzL2R3YXJmLmMKLSsrKyBnaXQvYmludXRpbHMvZHdhcmYuYwotQEAgLTQ3MiwxNSArNDcyLDIwIEBAIHByb2Nlc3NfZXh0ZW5kZWRfbGluZV9vcCAodW5zaWduZWQgY2hhcgotICAgICAgIHByaW50ZiAoXygiICBFbnRyeVx0RGlyXHRUaW1lXHRTaXplXHROYW1lXG4iKSk7Ci0gICAgICAgcHJpbnRmICgiICAgJWRcdCIsICsrc3RhdGVfbWFjaGluZV9yZWdzLmxhc3RfZmlsZV9lbnRyeSk7Ci0gCi0tICAgICAgbmFtZSA9IGRhdGE7Ci0tICAgICAgZGF0YSArPSBzdHJubGVuICgoY2hhciAqKSBkYXRhLCBlbmQgLSBkYXRhKSArIDE7Ci0tICAgICAgcHJpbnRmICgiJXNcdCIsIGR3YXJmX3ZtYXRvYSAoInUiLCByZWFkX3VsZWIxMjggKGRhdGEsICYgYnl0ZXNfcmVhZCwgZW5kKSkpOwotLSAgICAgIGRhdGEgKz0gYnl0ZXNfcmVhZDsKLS0gICAgICBwcmludGYgKCIlc1x0IiwgZHdhcmZfdm1hdG9hICgidSIsIHJlYWRfdWxlYjEyOCAoZGF0YSwgJiBieXRlc19yZWFkLCBlbmQpKSk7Ci0tICAgICAgZGF0YSArPSBieXRlc19yZWFkOwotLSAgICAgIHByaW50ZiAoIiVzXHQiLCBkd2FyZl92bWF0b2EgKCJ1IiwgcmVhZF91bGViMTI4IChkYXRhLCAmIGJ5dGVzX3JlYWQsIGVuZCkpKTsKLS0gICAgICBkYXRhICs9IGJ5dGVzX3JlYWQ7Ci0tICAgICAgcHJpbnRmICgiJXNcblxuIiwgbmFtZSk7Ci0rICAgICAgewotKwlzaXplX3QgbDsKLSsKLSsJbmFtZSA9IGRhdGE7Ci0rCWwgPSBzdHJubGVuICgoY2hhciAqKSBkYXRhLCBlbmQgLSBkYXRhKTsKLSsJZGF0YSArPSBsZW4gKyAxOwotKwlwcmludGYgKCIlc1x0IiwgZHdhcmZfdm1hdG9hICgidSIsIHJlYWRfdWxlYjEyOCAoZGF0YSwgJiBieXRlc19yZWFkLCBlbmQpKSk7Ci0rCWRhdGEgKz0gYnl0ZXNfcmVhZDsKLSsJcHJpbnRmICgiJXNcdCIsIGR3YXJmX3ZtYXRvYSAoInUiLCByZWFkX3VsZWIxMjggKGRhdGEsICYgYnl0ZXNfcmVhZCwgZW5kKSkpOwotKwlkYXRhICs9IGJ5dGVzX3JlYWQ7Ci0rCXByaW50ZiAoIiVzXHQiLCBkd2FyZl92bWF0b2EgKCJ1IiwgcmVhZF91bGViMTI4IChkYXRhLCAmIGJ5dGVzX3JlYWQsIGVuZCkpKTsKLSsJZGF0YSArPSBieXRlc19yZWFkOwotKwlwcmludGYgKCIlLipzXG5cbiIsIChpbnQpIGwsIG5hbWUpOwotKyAgICAgIH0KLSAKLSAgICAgICBpZiAoKCh1bnNpZ25lZCBpbnQpIChkYXRhIC0gb3JpZ19kYXRhKSAhPSBsZW4pIHx8IGRhdGEgPT0gZW5kKQotIAl3YXJuIChfKCJEV19MTkVfZGVmaW5lX2ZpbGU6IEJhZCBvcGNvZGUgbGVuZ3RoXG4iKSk7Ci1AQCAtNTk3LDE4ICs2MDIsMjcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKgotIGZldGNoX2luZGlyZWN0X3N0cmluZyAoZHdhcmZfdm1hIG9mZnNldCkKLSB7Ci0gICBzdHJ1Y3QgZHdhcmZfc2VjdGlvbiAqc2VjdGlvbiA9ICZkZWJ1Z19kaXNwbGF5cyBbc3RyXS5zZWN0aW9uOwotKyAgY29uc3QgdW5zaWduZWQgY2hhciAqIHJldDsKLSAKLSAgIGlmIChzZWN0aW9uLT5zdGFydCA9PSBOVUxMKQotICAgICByZXR1cm4gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgXygiPG5vIC5kZWJ1Z19zdHIgc2VjdGlvbj4iKTsKLSAKLS0gIGlmIChvZmZzZXQgPiBzZWN0aW9uLT5zaXplKQotKyAgaWYgKG9mZnNldCA+PSBzZWN0aW9uLT5zaXplKQotICAgICB7Ci0gICAgICAgd2FybiAoXygiRFdfRk9STV9zdHJwIG9mZnNldCB0b28gYmlnOiAlc1xuIiksCi0gCSAgICBkd2FyZl92bWF0b2EgKCJ4Iiwgb2Zmc2V0KSk7Ci0gICAgICAgcmV0dXJuIChjb25zdCB1bnNpZ25lZCBjaGFyICopIF8oIjxvZmZzZXQgaXMgdG9vIGJpZz4iKTsKLSAgICAgfQotKyAgcmV0ID0gc2VjdGlvbi0+c3RhcnQgKyBvZmZzZXQ7Ci0rICAvKiBVbmZvcnR1bmF0ZWx5IHdlIGNhbm5vdCByZWx5IHVwb24gdGhlIC5kZWJ1Z19zdHIgc2VjdGlvbiBlbmRpbmcgd2l0aCBhCi0rICAgICBOVUwgYnl0ZS4gIFNpbmNlIG91ciBjYWxsZXIgaXMgZXhwZWN0aW5nIHRvIHJlY2VpdmUgYSB3ZWxsIGZvcm1lZCBDCi0rICAgICBzdHJpbmcgd2UgdGVzdCBmb3IgdGhlIGxhY2sgb2YgYSB0ZXJtaW5hdGluZyBieXRlIGhlcmUuICAqLwotKyAgaWYgKHN0cm5sZW4gKChjb25zdCBjaGFyICopIHJldCwgc2VjdGlvbi0+c2l6ZSAtIG9mZnNldCkKLSsgICAgICA9PSBzZWN0aW9uLT5zaXplIC0gb2Zmc2V0KQotKyAgICByZXQgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQotKyAgICAgIF8oIjxubyBOVUwgYnl0ZSBhdCBlbmQgb2YgLmRlYnVnX3N0ciBzZWN0aW9uPiIpOwotIAotLSAgcmV0dXJuIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHNlY3Rpb24tPnN0YXJ0ICsgb2Zmc2V0OwotKyAgcmV0dXJuIHJldDsgCi0gfQotIAotIHN0YXRpYyBjb25zdCBjaGFyICoKLUBAIC02MjEsNiArNjM1LDcgQEAgZmV0Y2hfaW5kZXhlZF9zdHJpbmcgKGR3YXJmX3ZtYSBpZHgsIHN0cgotICAgc3RydWN0IGR3YXJmX3NlY3Rpb24gKnN0cl9zZWN0aW9uID0gJmRlYnVnX2Rpc3BsYXlzIFtzdHJfc2VjX2lkeF0uc2VjdGlvbjsKLSAgIGR3YXJmX3ZtYSBpbmRleF9vZmZzZXQgPSBpZHggKiBvZmZzZXRfc2l6ZTsKLSAgIGR3YXJmX3ZtYSBzdHJfb2Zmc2V0OwotKyAgY29uc3QgY2hhciAqIHJldDsKLSAKLSAgIGlmIChpbmRleF9zZWN0aW9uLT5zdGFydCA9PSBOVUxMKQotICAgICByZXR1cm4gKGR3byA/IF8oIjxubyAuZGVidWdfc3RyX29mZnNldHMuZHdvIHNlY3Rpb24+IikKLUBAIC02MjgsNyArNjQzLDcgQEAgZmV0Y2hfaW5kZXhlZF9zdHJpbmcgKGR3YXJmX3ZtYSBpZHgsIHN0cgotIAotICAgaWYgKHRoaXNfc2V0ICE9IE5VTEwpCi0gICAgIGluZGV4X29mZnNldCArPSB0aGlzX3NldC0+c2VjdGlvbl9vZmZzZXRzIFtEV19TRUNUX1NUUl9PRkZTRVRTXTsKLS0gIGlmIChpbmRleF9vZmZzZXQgPiBpbmRleF9zZWN0aW9uLT5zaXplKQotKyAgaWYgKGluZGV4X29mZnNldCA+PSBpbmRleF9zZWN0aW9uLT5zaXplKQotICAgICB7Ci0gICAgICAgd2FybiAoXygiRFdfRk9STV9HTlVfc3RyX2luZGV4IG9mZnNldCB0b28gYmlnOiAlc1xuIiksCi0gCSAgICBkd2FyZl92bWF0b2EgKCJ4IiwgaW5kZXhfb2Zmc2V0KSk7Ci1AQCAtNjQxLDE0ICs2NTYsMjIgQEAgZmV0Y2hfaW5kZXhlZF9zdHJpbmcgKGR3YXJmX3ZtYSBpZHgsIHN0cgotIAotICAgc3RyX29mZnNldCA9IGJ5dGVfZ2V0IChpbmRleF9zZWN0aW9uLT5zdGFydCArIGluZGV4X29mZnNldCwgb2Zmc2V0X3NpemUpOwotICAgc3RyX29mZnNldCAtPSBzdHJfc2VjdGlvbi0+YWRkcmVzczsKLS0gIGlmIChzdHJfb2Zmc2V0ID4gc3RyX3NlY3Rpb24tPnNpemUpCi0rICBpZiAoc3RyX29mZnNldCA+PSBzdHJfc2VjdGlvbi0+c2l6ZSkKLSAgICAgewotICAgICAgIHdhcm4gKF8oIkRXX0ZPUk1fR05VX3N0cl9pbmRleCBpbmRpcmVjdCBvZmZzZXQgdG9vIGJpZzogJXNcbiIpLAotIAkgICAgZHdhcmZfdm1hdG9hICgieCIsIHN0cl9vZmZzZXQpKTsKLSAgICAgICByZXR1cm4gXygiPGluZGlyZWN0IGluZGV4IG9mZnNldCBpcyB0b28gYmlnPiIpOwotICAgICB9Ci0gCi0tICByZXR1cm4gKGNvbnN0IGNoYXIgKikgc3RyX3NlY3Rpb24tPnN0YXJ0ICsgc3RyX29mZnNldDsKLSsgIHJldCA9IChjb25zdCBjaGFyICopIHN0cl9zZWN0aW9uLT5zdGFydCArIHN0cl9vZmZzZXQ7Ci0rICAvKiBVbmZvcnR1bmF0ZWx5IHdlIGNhbm5vdCByZWx5IHVwb24gc3RyX3NlY3Rpb24gZW5kaW5nIHdpdGggYSBOVUwgYnl0ZS4KLSsgICAgIFNpbmNlIG91ciBjYWxsZXIgaXMgZXhwZWN0aW5nIHRvIHJlY2VpdmUgYSB3ZWxsIGZvcm1lZCBDIHN0cmluZyB3ZSB0ZXN0Ci0rICAgICBmb3IgdGhlIGxhY2sgb2YgYSB0ZXJtaW5hdGluZyBieXRlIGhlcmUuICAqLwotKyAgaWYgKHN0cm5sZW4gKHJldCwgc3RyX3NlY3Rpb24tPnNpemUgLSBzdHJfb2Zmc2V0KQotKyAgICAgID09IHN0cl9zZWN0aW9uLT5zaXplIC0gc3RyX29mZnNldCkKLSsgICAgcmV0ID0gKGNvbnN0IGNoYXIgKikgXygiPG5vIE5VTCBieXRlIGF0IGVuZCBvZiBzZWN0aW9uPiIpOwotKwotKyAgcmV0dXJuIHJldDsKLSB9Ci0gCi0gc3RhdGljIGNvbnN0IGNoYXIgKgotSW5kZXg6IGdpdC9iaW51dGlscy9DaGFuZ2VMb2cKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9iaW51dGlscy9DaGFuZ2VMb2cKLSsrKyBnaXQvYmludXRpbHMvQ2hhbmdlTG9nCi1AQCAtMSwzICsxLDEzIEBACi0rMjAxNy0wNC0yOCAgTmljayBDbGlmdG9uICA8bmlja2NAcmVkaGF0LmNvbT4KLSsKLSsgICAgICAgUFIgYmludXRpbHMvMjE0MzgKLSsgICAgICAgKiBkd2FyZi5jIChwcm9jZXNzX2V4dGVuZGVkX2xpbmVfb3ApOiBEbyBub3QgYXNzdW1lIHRoYXQgdGhlCi0rICAgICAgIHN0cmluZyBleHRyYWN0ZWQgZnJvbSB0aGUgc2VjdGlvbiBpcyBOVUwgdGVybWluYXRlZC4KLSsgICAgICAgKGZldGNoX2luZGlyZWN0X3N0cmluZyk6IElmIHRoZSBzdHJpbmcgcmV0cmlldmVkIGZyb20gdGhlIHNlY3Rpb24KLSsgICAgICAgaXMgbm90IE5VTCB0ZXJtaW5hdGVkLCByZXR1cm4gYW4gZXJyb3IgbWVzc2FnZS4KLSsgICAgICAgKGZldGNoX2luZGlyZWN0X2xpbmVfc3RyaW5nKTogTGlrZXdpc2UuCi0rICAgICAgIChmZXRjaF9pbmRleGVkX3N0cmluZyk6IExpa2V3aXNlLgotKwotIDIwMTctMDItMTQgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQHJlZGhhdC5jb20+Ci0gCi0gCVBSIGJpbnV0aWxzLzIxMTU3CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTg0MjEucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTg0MjEucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NjljNjYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy04NDIxLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotRnJvbSAzOWZmMWI3OWY2ODdiNjVmNDE0NGRkYjM3OWYyMjU4NzAwMzQ0M2ZiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTmljayBDbGlmdG9uIDxuaWNrY0ByZWRoYXQuY29tPgotRGF0ZTogVHVlLCAyIE1heSAyMDE3IDExOjU0OjUzICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIFByZXZlbnQgbWVtb3J5IGV4aGF1c3Rpb24gZnJvbSBhIGNvcnJ1cHQgUEUgYmluYXJ5IHdpdGggYW4KLSBvdmVybGFyZ2UgbnVtYmVyIG9mIHJlbG9jcy4KLQotCVBSIDIxNDQwCi0JKiBvYmpkdW1wLmMgKGR1bXBfcmVsb2NzX2luX3NlY3Rpb24pOiBDaGVjayBmb3IgYW4gZXhjZXNzaXZlCi0JbnVtYmVyIG9mIHJlbG9jcyBiZWZvcmUgYXR0ZW1wdGluZyB0byBkdW1wIHRoZW0uCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLUNWRTogQ1ZFLTIwMTctODQyMQotU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+Ci0KLS0tLQotIGJpbnV0aWxzL0NoYW5nZUxvZyB8IDYgKysrKysrCi0gYmludXRpbHMvb2JqZHVtcC5jIHwgOCArKysrKysrKwotIDIgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKQotCi1JbmRleDogZ2l0L2JpbnV0aWxzL29iamR1bXAuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL2JpbnV0aWxzL29iamR1bXAuYwotKysrIGdpdC9iaW51dGlscy9vYmpkdW1wLmMKLUBAIC0zMzExLDYgKzMzMTEsMTQgQEAgZHVtcF9yZWxvY3NfaW5fc2VjdGlvbiAoYmZkICphYmZkLAotICAgICAgIHJldHVybjsKLSAgICAgfQotIAotKyAgaWYgKChiZmRfZ2V0X2ZpbGVfZmxhZ3MgKGFiZmQpICYgKEJGRF9JTl9NRU1PUlkgfCBCRkRfTElOS0VSX0NSRUFURUQpKSA9PSAwCi0rICAgICAgJiYgcmVsc2l6ZSA+IGdldF9maWxlX3NpemUgKGJmZF9nZXRfZmlsZW5hbWUgKGFiZmQpKSkKLSsgICAgewotKyAgICAgIHByaW50ZiAoIiAodG9vIG1hbnk6IDB4JXgpXG4iLCBzZWN0aW9uLT5yZWxvY19jb3VudCk7Ci0rICAgICAgYmZkX3NldF9lcnJvciAoYmZkX2Vycm9yX2ZpbGVfdHJ1bmNhdGVkKTsKLSsgICAgICBiZmRfZmF0YWwgKGJmZF9nZXRfZmlsZW5hbWUgKGFiZmQpKTsKLSsgICAgfQotKwotICAgcmVscHAgPSAoYXJlbGVudCAqKikgeG1hbGxvYyAocmVsc2l6ZSk7Ci0gICByZWxjb3VudCA9IGJmZF9jYW5vbmljYWxpemVfcmVsb2MgKGFiZmQsIHNlY3Rpb24sIHJlbHBwLCBzeW1zKTsKLSAKLUluZGV4OiBnaXQvYmludXRpbHMvQ2hhbmdlTG9nCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmludXRpbHMvQ2hhbmdlTG9nCi0rKysgZ2l0L2JpbnV0aWxzL0NoYW5nZUxvZwotQEAgLTEsMyArMSw5IEBACi0rMjAxNy0wNS0wMiAgTmljayBDbGlmdG9uICA8bmlja2NAcmVkaGF0LmNvbT4KLSsKLSsgICAgICAgUFIgMjE0NDAKLSsgICAgICAgKiBvYmpkdW1wLmMgKGR1bXBfcmVsb2NzX2luX3NlY3Rpb24pOiBDaGVjayBmb3IgYW4gZXhjZXNzaXZlCi0rICAgICAgIG51bWJlciBvZiByZWxvY3MgYmVmb3JlIGF0dGVtcHRpbmcgdG8gZHVtcCB0aGVtLgotKwotIDIwMTctMDQtMjggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQHJlZGhhdC5jb20+Ci0gCi0gICAgICAgIFBSIGJpbnV0aWxzLzIxNDM4CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTkwMzhfOTA0NC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTAzOF85MDQ0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzVlZmMzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTAzOF85MDQ0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotRnJvbSBmMzJiYTcyOTkxZDI0MDZiMjFhYjE3ZWRjMjM0YTJmM2ZhN2ZiMjNkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTmljayBDbGlmdG9uIDxuaWNrY0ByZWRoYXQuY29tPgotRGF0ZTogTW9uLCAzIEFwciAyMDE3IDExOjAxOjQ1ICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIHJlYWRlbGY6IFVwZGF0ZSBjaGVjayBmb3IgaW52YWxpZCB3b3JkIG9mZnNldHMgaW4gQVJNIHVud2luZAotIGluZm9ybWF0aW9uLgotCi0JUFIgYmludXRpbHMvMjEzNDMKLQkqIHJlYWRlbGYuYyAoZ2V0X3Vud2luZF9zZWN0aW9uX3dvcmQpOiBGaXggc25hZnUgY2hlY2tpbmcgZm9yCi0JaW52YWxpZCB3b3JkIG9mZnNldHMgaW4gQVJNIHVud2luZCBpbmZvcm1hdGlvbi4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQ1ZFOiBDVkUtMjAxNy05MDM4Ci1DVkU6IENWRS0yMDE3LTkwNDQKLVNpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgotCi0tLS0KLSBiaW51dGlscy9DaGFuZ2VMb2cgfCA2ICsrKysrKwotIGJpbnV0aWxzL3JlYWRlbGYuYyB8IDYgKysrLS0tCi0gMiBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCi0KLUluZGV4OiBnaXQvYmludXRpbHMvcmVhZGVsZi5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmludXRpbHMvcmVhZGVsZi5jCi0rKysgZ2l0L2JpbnV0aWxzL3JlYWRlbGYuYwotQEAgLTc5NzIsOSArNzk3Miw5IEBAIGdldF91bndpbmRfc2VjdGlvbl93b3JkIChzdHJ1Y3QgYXJtX3Vud18KLSAgICAgcmV0dXJuIEZBTFNFOwotIAotICAgLyogSWYgdGhlIG9mZnNldCBpcyBpbnZhbGlkIHRoZW4gZmFpbC4gICovCi0tICBpZiAod29yZF9vZmZzZXQgPiAoc2VjLT5zaF9zaXplIC0gNCkKLS0gICAgICAvKiBQUiAxODg3OSAqLwotLSAgICAgIHx8IChzZWMtPnNoX3NpemUgPCA1ICYmIHdvcmRfb2Zmc2V0ID49IHNlYy0+c2hfc2l6ZSkKLSsgIGlmICgvKiBQUiAyMTM0MyAqLy8qIFBSIDE4ODc5ICovCi0rICAgICAgc2VjLT5zaF9zaXplIDwgNAotKyAgICAgIHx8IHdvcmRfb2Zmc2V0ID4gKHNlYy0+c2hfc2l6ZSAtIDQpCi0gICAgICAgfHwgKChiZmRfc2lnbmVkX3ZtYSkgd29yZF9vZmZzZXQpIDwgMCkKLSAgICAgcmV0dXJuIEZBTFNFOwotIAotSW5kZXg6IGdpdC9iaW51dGlscy9DaGFuZ2VMb2cKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9iaW51dGlscy9DaGFuZ2VMb2cKLSsrKyBnaXQvYmludXRpbHMvQ2hhbmdlTG9nCi1AQCAtMSwzICsxLDkgQEAKLSsyMDE3LTA0LTAzICBOaWNrIENsaWZ0b24gIDxuaWNrY0ByZWRoYXQuY29tPgotKwotKyAgICAgICBQUiBiaW51dGlscy8yMTM0MwotKyAgICAgICAqIHJlYWRlbGYuYyAoZ2V0X3Vud2luZF9zZWN0aW9uX3dvcmQpOiBGaXggc25hZnUgY2hlY2tpbmcgZm9yCi0rICAgICAgIGludmFsaWQgd29yZCBvZmZzZXRzIGluIEFSTSB1bndpbmQgaW5mb3JtYXRpb24uCi0rCi0gMjAxNy0wNS0wMiAgTmljayBDbGlmdG9uICA8bmlja2NAcmVkaGF0LmNvbT4KLSAKLSAgICAgICAgUFIgMjE0NDAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTAzOS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTAzOS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVkOGY3Zi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTkwMzkucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi1Gcm9tIDgyMTU2YWI3MDRiMDhiMTI0ZDMxOWMwZGVjZGJkNDhiM2NhMmRhYzUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBOaWNrIENsaWZ0b24gPG5pY2tjQHJlZGhhdC5jb20+Ci1EYXRlOiBNb24sIDMgQXByIDIwMTcgMTI6MTQ6MDYgKzAxMDAKLVN1YmplY3Q6IFtQQVRDSF0gcmVhZGVsZjogRml4IG92ZXJsYXJnZSBtZW1vcnkgYWxsb2NhdGlvbiB3aGVuIHJlYWRpbmcgYQotIGJpbmFyeSB3aXRoIGFuIGV4Y2Vzc2l2ZSBudW1iZXIgb2YgcHJvZ3JhbSBoZWFkZXJzLgotCi0JUFIgYmludXRpbHMvMjEzNDUKLQkqIHJlYWRlbGYuYyAoZ2V0X3Byb2dyYW1faGVhZGVycyk6IENoZWNrIGZvciB0aGVyZSBiZWluZyB0b28gbWFueQotCXByb2dyYW0gaGVhZGVycyBiZWZvcmUgYXR0ZW1wdGluZyB0byBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlbS4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQ1ZFOiBDVkUtMjAxNy05MDM5Ci1TaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KLQotLS0tCi0gYmludXRpbHMvQ2hhbmdlTG9nIHwgIDYgKysrKysrCi0gYmludXRpbHMvcmVhZGVsZi5jIHwgMTcgKysrKysrKysrKysrKystLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCi0KLUluZGV4OiBnaXQvYmludXRpbHMvcmVhZGVsZi5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmludXRpbHMvcmVhZGVsZi5jCi0rKysgZ2l0L2JpbnV0aWxzL3JlYWRlbGYuYwotQEAgLTQ3NjUsOSArNDc2NSwxOSBAQCBnZXRfcHJvZ3JhbV9oZWFkZXJzIChGSUxFICogZmlsZSkKLSAgIGlmIChwcm9ncmFtX2hlYWRlcnMgIT0gTlVMTCkKLSAgICAgcmV0dXJuIDE7Ci0gCi0tICBwaGRycyA9IChFbGZfSW50ZXJuYWxfUGhkciAqKSBjbWFsbG9jIChlbGZfaGVhZGVyLmVfcGhudW0sCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKEVsZl9JbnRlcm5hbF9QaGRyKSk7Ci0rICAvKiBCZSBraW5kIHRvIG1lbW9yeSBjaGVja2VycyBieSBsb29raW5nIGZvcgotKyAgICAgZV9waG51bSB2YWx1ZXMgd2hpY2ggd2Uga25vdyBtdXN0IGJlIGludmFsaWQuICAqLwotKyAgaWYgKGVsZl9oZWFkZXIuZV9waG51bQotKyAgICAgICogKGlzXzMyYml0X2VsZiA/IHNpemVvZiAoRWxmMzJfRXh0ZXJuYWxfUGhkcikgOiBzaXplb2YgKEVsZjY0X0V4dGVybmFsX1BoZHIpKQotKyAgICAgID49IGN1cnJlbnRfZmlsZV9zaXplKQotKyAgICB7Ci0rICAgICAgZXJyb3IgKF8oIlRvbyBtYW55IHByb2dyYW0gaGVhZGVycyAtICUjeCAtIHRoZSBmaWxlIGlzIG5vdCB0aGF0IGJpZ1xuIiksCi0rCSAgICAgZWxmX2hlYWRlci5lX3BobnVtKTsKLSsgICAgICByZXR1cm4gRkFMU0U7Ci0rICAgIH0KLSAKLSsgIHBoZHJzID0gKEVsZl9JbnRlcm5hbF9QaGRyICopIGNtYWxsb2MgKGVsZl9oZWFkZXIuZV9waG51bSwKLSsJCQkJCSBzaXplb2YgKEVsZl9JbnRlcm5hbF9QaGRyKSk7Ci0gICBpZiAocGhkcnMgPT0gTlVMTCkKLSAgICAgewotICAgICAgIGVycm9yIChfKCJPdXQgb2YgbWVtb3J5IHJlYWRpbmcgJXUgcHJvZ3JhbSBoZWFkZXJzXG4iKSwKLUluZGV4OiBnaXQvYmludXRpbHMvQ2hhbmdlTG9nCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmludXRpbHMvQ2hhbmdlTG9nCi0rKysgZ2l0L2JpbnV0aWxzL0NoYW5nZUxvZwotQEAgLTEsNSArMSwxMSBAQAotIDIwMTctMDQtMDMgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQHJlZGhhdC5jb20+Ci0gCi0rICAgICAgIFBSIGJpbnV0aWxzLzIxMzQ1Ci0rICAgICAgICogcmVhZGVsZi5jIChnZXRfcHJvZ3JhbV9oZWFkZXJzKTogQ2hlY2sgZm9yIHRoZXJlIGJlaW5nIHRvbyBtYW55Ci0rICAgICAgIHByb2dyYW0gaGVhZGVycyBiZWZvcmUgYXR0ZW1wdGluZyB0byBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlbS4KLSsKLSsyMDE3LTA0LTAzICBOaWNrIENsaWZ0b24gIDxuaWNrY0ByZWRoYXQuY29tPgotKwotICAgICAgICBQUiBiaW51dGlscy8yMTM0MwotICAgICAgICAqIHJlYWRlbGYuYyAoZ2V0X3Vud2luZF9zZWN0aW9uX3dvcmQpOiBGaXggc25hZnUgY2hlY2tpbmcgZm9yCi0gICAgICAgIGludmFsaWQgd29yZCBvZmZzZXRzIGluIEFSTSB1bndpbmQgaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTkwNDBfOTA0Mi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTA0MF85MDQyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWM2YTdkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTA0MF85MDQyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotRnJvbSA3Mjk2YTYyYTJhMjM3ZjZiMWFkOGRiOGMzOGIwOTBlOWY1OTJjOGNmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTmljayBDbGlmdG9uIDxuaWNrY0ByZWRoYXQuY29tPgotRGF0ZTogVGh1LCAxMyBBcHIgMjAxNyAxNjowNjozMCArMDEwMAotU3ViamVjdDogW1BBVENIXSByZWFkZWxmOiBmaXggb3V0IG9mIHJhbmdlIHN1YnRyYWN0aW9uLCBzZWcgZmF1bHQgZnJvbSBhIE5VTEwKLSBwb2ludGVyIGFuZCBtZW1vcnkgZXhoYXVzdGlvbiwgYWxsIGZyb20gcGFyc2luZyBjb3JydXB0IGJpbmFyaWVzLgotCi0JUFIgYmludXRpbHMvMjEzNzkKLQkqIHJlYWRlbGYuYyAocHJvY2Vzc19keW5hbWljX3NlY3Rpb24pOiBEZXRlY3Qgb3ZlciBsYXJnZSBzZWN0aW9uCi0Jb2Zmc2V0cyBpbiB0aGUgRFRfU1lNVEFCIGVudHJ5LgotCi0JUFIgYmludXRpbHMvMjEzNDUKLQkqIHJlYWRlbGYuYyAocHJvY2Vzc19taXBzX3NwZWNpZmljKTogQ2F0Y2ggYW4gdW5mZWFzaWJsZSBtZW1vcnkKLQlhbGxvY2F0aW9uIGJlZm9yZSBpdCBoYXBwZW5zIGFuZCBwcmludCBhIHN1aXRhYmxlIGVycm9yIG1lc3NhZ2UuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLUNWRTogQ1ZFLTIwMTctOTA0MAotQ1ZFOiBDVkUtMjAxNy05MDQyCi1TaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KLQotLS0tCi0gYmludXRpbHMvQ2hhbmdlTG9nIHwgMTIgKysrKysrKysrKysrCi0gYmludXRpbHMvcmVhZGVsZi5jIHwgMjYgKysrKysrKysrKysrKysrKysrKysrLS0tLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCi0KLUluZGV4OiBnaXQvYmludXRpbHMvcmVhZGVsZi5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmludXRpbHMvcmVhZGVsZi5jCi0rKysgZ2l0L2JpbnV0aWxzL3JlYWRlbGYuYwotQEAgLTkzMDYsNiArOTMwNiwxMiBAQCBwcm9jZXNzX2R5bmFtaWNfc2VjdGlvbiAoRklMRSAqIGZpbGUpCi0gCSAgICAgcHJvY2Vzc2luZyB0aGF0LiAgVGhpcyBpcyBvdmVya2lsbCwgSSBrbm93LCBidXQgaXQKLSAJICAgICBzaG91bGQgd29yay4gICovCi0gCSAgc2VjdGlvbi5zaF9vZmZzZXQgPSBvZmZzZXRfZnJvbV92bWEgKGZpbGUsIGVudHJ5LT5kX3VuLmRfdmFsLCAwKTsKLSsJICBpZiAoKGJmZF9zaXplX3R5cGUpIHNlY3Rpb24uc2hfb2Zmc2V0ID4gY3VycmVudF9maWxlX3NpemUpCi0rCSAgICB7Ci0rCSAgICAgIC8qIFNlZSBQUiAyMTM3OSBmb3IgYSByZXByb2R1Y2VyLiAgKi8KLSsJICAgICAgZXJyb3IgKF8oIkludmFsaWQgRFRfU1lNVEFCIGVudHJ5OiAlbHgiKSwgKGxvbmcpIHNlY3Rpb24uc2hfb2Zmc2V0KTsKLSsJICAgICAgcmV0dXJuIEZBTFNFOwotKwkgICAgfQotIAotIAkgIGlmIChhcmNoaXZlX2ZpbGVfb2Zmc2V0ICE9IDApCi0gCSAgICBzZWN0aW9uLnNoX3NpemUgPSBhcmNoaXZlX2ZpbGVfc2l6ZSAtIHNlY3Rpb24uc2hfb2Zmc2V0OwotQEAgLTE1MTc1LDYgKzE1MTgxLDE1IEBAIHByb2Nlc3NfbWlwc19zcGVjaWZpYyAoRklMRSAqIGZpbGUpCi0gCSAgcmV0dXJuIDA7Ci0gCX0KLSAKLSsgICAgICAvKiBQUiAyMTM0NSAtIHByaW50IGEgc2xpZ2h0bHkgbW9yZSBoZWxwZnVsIGVycm9yIG1lc3NhZ2UKLSsJIGlmIHdlIGFyZSBzdXJlIHRoYXQgdGhlIGNtYWxsb2Mgd2lsbCBmYWlsLiAgKi8KLSsgICAgICBpZiAoY29uZmxpY3Rzbm8gKiBzaXplb2YgKCogaWNvbmYpID4gY3VycmVudF9maWxlX3NpemUpCi0rCXsKLSsJICBlcnJvciAoXygiT3ZlcmxhcmdlIG51bWJlciBvZiBjb25mbGljdHMgZGV0ZWN0ZWQ6ICVseFxuIiksCi0rCQkgKGxvbmcpIGNvbmZsaWN0c25vKTsKLSsJICByZXR1cm4gRkFMU0U7Ci0rCX0KLSsKLSAgICAgICBpY29uZiA9IChFbGYzMl9Db25mbGljdCAqKSBjbWFsbG9jIChjb25mbGljdHNubywgc2l6ZW9mICgqIGljb25mKSk7Ci0gICAgICAgaWYgKGljb25mID09IE5VTEwpCi0gCXsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTc0Mi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTc0Mi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM5ZWQwZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTk3NDIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi1Gcm9tIGU2NDUxOWQxZWQ3ZmQ4Zjk5MGYwNWE1NTYyZDViNWMwYzQ0YjdkN2UgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBOaWNrIENsaWZ0b24gPG5pY2tjQHJlZGhhdC5jb20+Ci1EYXRlOiBXZWQsIDE0IEp1biAyMDE3IDE3OjEwOjI4ICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIEZpeCBzZWctZmF1bHQgd2hlbiB0cnlpbmcgdG8gZGlzYXNzZW1ibGUgYSBjb3JydXB0IHNjb3JlCi0gYmluYXJ5LgotCi0JUFIgYmludXRpbHMvMjE1NzYKLQkqIHNjb3JlNy1kaXMuYyAoc2NvcmVfb3Bjb2Rlcyk6IEFkZCBzZW50aW5lbC4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQ1ZFOiBDVkUtMjAxNy05NzQyCi1TaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KLQotLS0tCi0gb3Bjb2Rlcy9DaGFuZ2VMb2cgICAgfCA1ICsrKysrCi0gb3Bjb2Rlcy9zY29yZTctZGlzLmMgfCAzICsrLQotIDIgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCi0KLUluZGV4OiBnaXQvb3Bjb2Rlcy9zY29yZTctZGlzLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9vcGNvZGVzL3Njb3JlNy1kaXMuYwotKysrIGdpdC9vcGNvZGVzL3Njb3JlNy1kaXMuYwotQEAgLTUxMyw3ICs1MTMsOCBAQCBzdGF0aWMgc3RydWN0IHNjb3JlX29wY29kZSBzY29yZV9vcGNvZGVzCi0gICB7MHgwMDAwMGQwNSwgMHgwMDAwN2YwZiwgInR2YyEifSwKLSAgIHsweDAwMDAwMDI2LCAweDNlMDAwM2ZmLCAieG9yXHRcdCUyMC0yNHIsICUxNS0xOXIsICUxMC0xNHIifSwKLSAgIHsweDAwMDAwMDI3LCAweDNlMDAwM2ZmLCAieG9yLmNcdFx0JTIwLTI0ciwgJTE1LTE5ciwgJTEwLTE0ciJ9LAotLSAgezB4MDAwMDIwMDcsIDB4MDAwMDcwMGYsICJ4b3IhXHRcdCU4LTExciwgJTQtN3IifQotKyAgezB4MDAwMDIwMDcsIDB4MDAwMDcwMGYsICJ4b3IhXHRcdCU4LTExciwgJTQtN3IifSwKLSsgIHsgMCwgMCwgTlVMTCB9Ci0gfTsKLSAKLSB0eXBlZGVmIHN0cnVjdAotSW5kZXg6IGdpdC9vcGNvZGVzL0NoYW5nZUxvZwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL29wY29kZXMvQ2hhbmdlTG9nCi0rKysgZ2l0L29wY29kZXMvQ2hhbmdlTG9nCi1AQCAtMSwzICsxLDggQEAKLSsyMDE3LTA2LTE0ICBOaWNrIENsaWZ0b24gIDxuaWNrY0ByZWRoYXQuY29tPgotKwotKyAgICAgICBQUiBiaW51dGlscy8yMTU3NgotKyAgICAgICAqIHNjb3JlNy1kaXMuYyAoc2NvcmVfb3Bjb2Rlcyk6IEFkZCBzZW50aW5lbC4KLSsKLSAyMDE3LTAzLTA3ICBBbGFuIE1vZHJhICA8YW1vZHJhQGdtYWlsLmNvbT4KLSAKLSAJQXBwbHkgZnJvbSBtYXN0ZXIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTc0NC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTc0NC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM0YTVhNi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTk3NDQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi1Gcm9tIGY0NjFiYmQ4NDdmMTU2NTdmM2RkMmYzMTdjMzBjNzVhNzUyMGRhMWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBOaWNrIENsaWZ0b24gPG5pY2tjQHJlZGhhdC5jb20+Ci1EYXRlOiBXZWQsIDE0IEp1biAyMDE3IDE3OjAxOjU0ICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIEZpeCBhZGRyZXNzIHZpb2xhdGlvbiBidWcgd2hlbiBkaXNhc3NlbWJsaW5nIGEgY29ycnVwdCBTSAotIGJpbmFyeS4KLQotCVBSIGJpbnV0aWxzLzIxNTc4Ci0JKiBlbGYzMi1zaC5jIChzaF9lbGZfc2V0X21hY2hfZnJvbV9mbGFncyk6IEZpeCBjaGVjayBmb3IgaW52YWxpZAotCWZsYWcgdmFsdWUuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLUNWRTogQ1ZFLTIwMTctOTc0NAotU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+Ci0KLS0tLQotIGJmZC9DaGFuZ2VMb2cgIHwgNiArKysrKysKLSBiZmQvZWxmMzItc2guYyB8IDIgKy0KLSAyIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQotCi1JbmRleDogZ2l0L2JmZC9lbGYzMi1zaC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmZkL2VsZjMyLXNoLmMKLSsrKyBnaXQvYmZkL2VsZjMyLXNoLmMKLUBAIC02MzQ0LDcgKzYzNDQsNyBAQCBzaF9lbGZfc2V0X21hY2hfZnJvbV9mbGFncyAoYmZkICphYmZkKQotIHsKLSAgIGZsYWd3b3JkIGZsYWdzID0gZWxmX2VsZmhlYWRlciAoYWJmZCktPmVfZmxhZ3MgJiBFRl9TSF9NQUNIX01BU0s7Ci0gCi0tICBpZiAoZmxhZ3MgPj0gc2l6ZW9mKHNoX2VmX2JmZF90YWJsZSkpCi0rICBpZiAoZmxhZ3MgPj0gQVJSQVlfU0laRSAoc2hfZWZfYmZkX3RhYmxlKSkKLSAgICAgcmV0dXJuIEZBTFNFOwotIAotICAgaWYgKHNoX2VmX2JmZF90YWJsZVtmbGFnc10gPT0gMCkKLUluZGV4OiBnaXQvYmZkL0NoYW5nZUxvZwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL2JmZC9DaGFuZ2VMb2cKLSsrKyBnaXQvYmZkL0NoYW5nZUxvZwotQEAgLTEsMyArMSw5IEBACi0rMjAxNy0wNi0xNCAgTmljayBDbGlmdG9uICA8bmlja2NAcmVkaGF0LmNvbT4KLSsgCi0rICAgICAgIFBSIGJpbnV0aWxzLzIxNTc4Ci0rICAgICAgICogZWxmMzItc2guYyAoc2hfZWxmX3NldF9tYWNoX2Zyb21fZmxhZ3MpOiBGaXggY2hlY2sgZm9yIGludmFsaWQKLSsgICAgICAgZmxhZyB2YWx1ZS4KLSsKLSAyMDE3LTA0LTI5ICBBbGFuIE1vZHJhICA8YW1vZHJhQGdtYWlsLmNvbT4KLSAKLSAgICAgICAgUFIgMjE0MzIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTc0NS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTc0NS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIzODg1Yi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTk3NDUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1Gcm9tIDc2ODAwY2JhNTk1ZWZjM2ZlOTVhNDQ2YzJkNjY0ZTQyYWU0ZWU4NjkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBOaWNrIENsaWZ0b24gPG5pY2tjQHJlZGhhdC5jb20+Ci1EYXRlOiBUaHUsIDE1IEp1biAyMDE3IDEyOjA4OjU3ICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIEhhbmRsZSBFSVRSIHJlY29yZHMgaW4gVk1TIEFscGhhIGJpbmFyaWVzIHdpdGggb3ZlcmxhcmdlCi0gY29tbWFuZCBsZW5ndGggcGFyYW1ldGVycy4KLQotCVBSIGJpbnV0aWxzLzIxNTc5Ci0JKiB2bXMtYWxwaGEuYyAoX2JmZF92bXNfc2x1cnBfZXRpcik6IEV4dGVuZCBjaGVjayBvZiBjbWRfbGVuZ3RoLgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1DVkU6IENWRS0yMDE3LTk3NDUKLVNpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgotCi0tLS0KLSBiZmQvQ2hhbmdlTG9nICAgfCAgNSArKysrKwotIGJmZC92bXMtYWxwaGEuYyB8IDE2ICsrKysrKysrLS0tLS0tLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCi0KLUluZGV4OiBnaXQvYmZkL3Ztcy1hbHBoYS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmZkL3Ztcy1hbHBoYS5jCi0rKysgZ2l0L2JmZC92bXMtYWxwaGEuYwotQEAgLTE3NDEsNiArMTc0MSwxMiBAQCBfYmZkX3Ztc19zbHVycF9ldGlyIChiZmQgKmFiZmQsIHN0cnVjdCBiCi0gICAgICAgX2JmZF9oZXhkdW1wICg4LCBwdHIsIGNtZF9sZW5ndGggLSA0LCAwKTsKLSAjZW5kaWYKLSAKLSsjaWYgVk1TX0RFQlVHCi0rICAgICAgX2JmZF92bXNfZGVidWcgKDQsICJldGlyOiAlcyglZClcbiIsCi0rICAgICAgICAgICAgICAgICAgICAgIF9iZmRfdm1zX2V0aXJfbmFtZSAoY21kKSwgY21kKTsKLSsgICAgICBfYmZkX2hleGR1bXAgKDgsIHB0ciwgY21kX2xlbmd0aCAtIDQsIDApOwotKyNlbmRpZgotKwotICAgICAgIHN3aXRjaCAoY21kKQotICAgICAgICAgewotICAgICAgICAgICAvKiBTdGFjayBnbG9iYWwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTc0Ni5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTc0Ni5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ0YTQwYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTk3NDYucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi1Gcm9tIGFlODdmN2U3M2ViYTI5YmQzOGIzYTk2ODRhMTBiOTQ4ZWQ3MTU2MTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBOaWNrIENsaWZ0b24gPG5pY2tjQHJlZGhhdC5jb20+Ci1EYXRlOiBXZWQsIDE0IEp1biAyMDE3IDE2OjUwOjAzICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIEZpeCBhZGRyZXNzIHZpb2xhdGlvbiB3aGVuIGRpc2Fzc2VtYmxpbmcgYSBjb3JydXB0IGJpbmFyeS4KLQotCVBSIGJpbnV0aWxzLzIxNTgwCi1iaW51dGlscyAqIG9iamR1bXAuYyAoZGlzYXNzZW1ibGVfYnl0ZXMpOiBDaGVjayBmb3IgYnVmZmVyIG92ZXJydW4gd2hlbgotCXByaW50aW5nIG91dCByYWUgaW5zbnMuCi0KLWxkCSogdGVzdHN1aXRlL2xkLW5kczMyL2RpZmYuZDogQWRqdXN0IGV4cGVjdGVkIG91dHB1dC4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQ1ZFOiBDVkUtMjAxNy05NzQ2Ci1TaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KLQotLS0tCi0gYmludXRpbHMvb2JqZHVtcC5jICAgICAgICAgICB8IDI3ICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQotIGxkL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgfCAgNSArKysrKwotIGxkL3Rlc3RzdWl0ZS9sZC1uZHMzMi9kaWZmLmQgfCAgNiArKystLS0KLSAzIGZpbGVzIGNoYW5nZWQsIDIzIGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQotCi1JbmRleDogZ2l0L2JpbnV0aWxzL29iamR1bXAuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL2JpbnV0aWxzL29iamR1bXAuYwotKysrIGdpdC9iaW51dGlscy9vYmpkdW1wLmMKLUBAIC0xODU1LDIwICsxODU1LDIzIEBAIGRpc2Fzc2VtYmxlX2J5dGVzIChzdHJ1Y3QgZGlzYXNzZW1ibGVfaW4KLSAKLSAJICAgICAgZm9yIChqID0gYWRkcl9vZmZzZXQgKiBvcGI7IGogPCBhZGRyX29mZnNldCAqIG9wYiArIHBiOyBqICs9IGJwYykKLSAJCXsKLS0JCSAgaW50IGs7Ci0tCi0tCQkgIGlmIChicGMgPiAxICYmIGluZi0+ZGlzcGxheV9lbmRpYW4gPT0gQkZEX0VORElBTl9MSVRUTEUpCi0tCQkgICAgewotLQkJICAgICAgZm9yIChrID0gYnBjIC0gMTsgayA+PSAwOyBrLS0pCi0tCQkJcHJpbnRmICgiJTAyeCIsICh1bnNpZ25lZCkgZGF0YVtqICsga10pOwotLQkJICAgICAgcHV0Y2hhciAoJyAnKTsKLS0JCSAgICB9Ci0tCQkgIGVsc2UKLSsJCSAgLyogUFIgMjE1ODA6IENoZWNrIGZvciBhIGJ1ZmZlciBlbmRpbmcgZWFybHkuICAqLwotKwkJICBpZiAoaiArIGJwYyA8PSBzdG9wX29mZnNldCAqIG9wYikKLSAJCSAgICB7Ci0tCQkgICAgICBmb3IgKGsgPSAwOyBrIDwgYnBjOyBrKyspCi0tCQkJcHJpbnRmICgiJTAyeCIsICh1bnNpZ25lZCkgZGF0YVtqICsga10pOwotLQkJICAgICAgcHV0Y2hhciAoJyAnKTsKLSsJCSAgICAgIGludCBrOwotKwotKwkJICAgICAgaWYgKGluZi0+ZGlzcGxheV9lbmRpYW4gPT0gQkZEX0VORElBTl9MSVRUTEUpCi0rCQkJewotKwkJCSAgZm9yIChrID0gYnBjIC0gMTsgayA+PSAwOyBrLS0pCi0rCQkJICAgIHByaW50ZiAoIiUwMngiLCAodW5zaWduZWQpIGRhdGFbaiArIGtdKTsKLSsJCQl9Ci0rCQkgICAgICBlbHNlCi0rCQkJewotKwkJCSAgZm9yIChrID0gMDsgayA8IGJwYzsgaysrKQotKwkJCSAgICBwcmludGYgKCIlMDJ4IiwgKHVuc2lnbmVkKSBkYXRhW2ogKyBrXSk7Ci0rCQkJfQotIAkJICAgIH0KLSsJCSAgcHV0Y2hhciAoJyAnKTsKLSAJCX0KLSAKLSAJICAgICAgZm9yICg7IHBiIDwgb2N0ZXRzX3Blcl9saW5lOyBwYiArPSBicGMpCi1JbmRleDogZ2l0L2xkL3Rlc3RzdWl0ZS9sZC1uZHMzMi9kaWZmLmQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9sZC90ZXN0c3VpdGUvbGQtbmRzMzIvZGlmZi5kCi0rKysgZ2l0L2xkL3Rlc3RzdWl0ZS9sZC1uZHMzMi9kaWZmLmQKLUBAIC03LDkgKzcsOSBAQAotIAotIERpc2Fzc2VtYmx5IG9mIHNlY3Rpb24gLmRhdGE6Ci0gMDAwMDgwMDAgPFdPUkQ+ICg3ZSAwMCAwMCAwMHwwMCAwMCAwMCA3ZSkuKgotLTAwMDA4MDA0IDxIQUxGPiAoN2UgMDAgN2UgZmV8MDAgN2UgN2UgZmUpLioKLS0wMDAwODAwNiA8QllURT4gN2UgZmUgMDAgZmUuKgotLTAwMDA4MDA3IDxVTEVCMTI4PiBmZSAwMC4qCi0rMDAwMDgwMDQgPEhBTEY+ICg3ZSAwMHwwMCA3ZSkuKgotKzAwMDA4MDA2IDxCWVRFPiA3ZS4qCi0rMDAwMDgwMDcgPFVMRUIxMjg+IGZlLioKLSAJLi4uCi0gMDAwMDgwMDkgPFVMRUIxMjhfMj4gZmUgMDAuKgotIC4qCi1JbmRleDogZ2l0L2xkL0NoYW5nZUxvZwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL2xkL0NoYW5nZUxvZwotKysrIGdpdC9sZC9DaGFuZ2VMb2cKLUBAIC0xLDMgKzEsOCBAQAotKzIwMTctMDYtMTQgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQHJlZGhhdC5jb20+Ci0rCi0rICAgICAgIFBSIGJpbnV0aWxzLzIxNTgwCi0rICAgICAgICogdGVzdHN1aXRlL2xkLW5kczMyL2RpZmYuZDogQWRqdXN0IGV4cGVjdGVkIG91dHB1dC4KLSsKLSAyMDE3LTAzLTA3ICBBbGFuIE1vZHJhICA8YW1vZHJhQGdtYWlsLmNvbT4KLSAKLSAJKiBsZGxhbmcuYyAob3Blbl9pbnB1dF9iZmRzKTogQ2hlY2sgdGhhdCBsYW5nX2Fzc2lnbm1lbnRfc3RhdGVtZW50CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTk3NDcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTk3NDcucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxZWFkNTQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy05NzQ3LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotRnJvbSA2MmI3NmU0YjZlMGI0Y2I1YjNlMDA1M2QxZGU0MDk3YjMyNTc3MDQ5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTmljayBDbGlmdG9uIDxuaWNrY0ByZWRoYXQuY29tPgotRGF0ZTogVGh1LCAxNSBKdW4gMjAxNyAxMzowODo0NyArMDEwMAotU3ViamVjdDogW1BBVENIXSBGaXggYWRkcmVzcyB2aW9sYXRpb24gcGFyc2luZyBhIGNvcnJ1cHQgaWVlZSBiaW5hcnkuCi0KLQlQUiBiaW51dGlscy8yMTU4MQotCShpZWVlX2FyY2hpdmVfcCk6IFVzZSBhIHN0YXRpYyBidWZmZXIgdG8gYXZvaWQgY29tcGlsZXIgYnVncy4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQ1ZFOiBDVkUtMjAxNy05NzQ3Ci1TaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KLQotLS0tCi0gYmZkL0NoYW5nZUxvZyB8IDIgKysKLSBiZmQvaWVlZS5jICAgIHwgMiArLQotIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCi0KLUluZGV4OiBnaXQvYmZkL2llZWUuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL2JmZC9pZWVlLmMKLSsrKyBnaXQvYmZkL2llZWUuYwotQEAgLTEzNTcsNyArMTM1Nyw3IEBAIGllZWVfYXJjaGl2ZV9wIChiZmQgKmFiZmQpCi0gewotICAgY2hhciAqbGlicmFyeTsKLSAgIHVuc2lnbmVkIGludCBpOwotLSAgdW5zaWduZWQgY2hhciBidWZmZXJbNTEyXTsKLSsgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls1MTJdOwotICAgZmlsZV9wdHIgYnVmZmVyX29mZnNldCA9IDA7Ci0gICBpZWVlX2FyX2RhdGFfdHlwZSAqc2F2ZSA9IGFiZmQtPnRkYXRhLmllZWVfYXJfZGF0YTsKLSAgIGllZWVfYXJfZGF0YV90eXBlICppZWVlOwotSW5kZXg6IGdpdC9iZmQvQ2hhbmdlTG9nCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmZkL0NoYW5nZUxvZwotKysrIGdpdC9iZmQvQ2hhbmdlTG9nCi1AQCAtMSwzICsxLDggQEAKLSsyMDE3LTA2LTE1ICBOaWNrIENsaWZ0b24gIDxuaWNrY0ByZWRoYXQuY29tPgotKwotKyAgICAgICBQUiBiaW51dGlscy8yMTU4MQotKyAgICAgICAoaWVlZV9hcmNoaXZlX3ApOiBMaWtld2lzZS4KLSsKLSAyMDE3LTA2LTE0ICBOaWNrIENsaWZ0b24gIDxuaWNrY0ByZWRoYXQuY29tPgotICAKLSAgICAgICAgUFIgYmludXRpbHMvMjE1NzgKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTc0OC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTc0OC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIwNzAyMy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTk3NDgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi1Gcm9tIDYzNjM0YmI0YTEwNzg3N2RkMDhiNjI4MmUyOGUxMWNmZDFhMTY0OWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBOaWNrIENsaWZ0b24gPG5pY2tjQHJlZGhhdC5jb20+Ci1EYXRlOiBUaHUsIDE1IEp1biAyMDE3IDEyOjQ0OjIzICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIEF2b2lkIGEgcG9zc2libGUgY29tcGlsZXIgYnVnIGJ5IHVzaW5nIGEgc3RhdGljIGJ1ZmZlcgotIGluc3RlYWQgb2YgYSBzdGFjayBsb2NhbCBidWZmZXIuCi0KLQlQUiBiaW51dGlscy8yMTU4MgotCSogaWVlZS5jIChpZWVlX29iamVjdF9wKTogVXNlIGEgc3RhdGljIGJ1ZmZlciB0byBhdm9pZCBjb21waWxlcgotCWJ1Z3MuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLUNWRTogQ1ZFLTIwMTctOTc0OAotU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+Ci0KLS0tLQotIGJmZC9DaGFuZ2VMb2cgfCA2ICsrKysrKwotIGJmZC9pZWVlLmMgICAgfCAyICstCi0gMiBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotSW5kZXg6IGdpdC9iZmQvaWVlZS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmZkL2llZWUuYwotKysrIGdpdC9iZmQvaWVlZS5jCi1AQCAtMTg3NSw3ICsxODc1LDcgQEAgaWVlZV9vYmplY3RfcCAoYmZkICphYmZkKQotICAgY2hhciAqcHJvY2Vzc29yOwotICAgdW5zaWduZWQgaW50IHBhcnQ7Ci0gICBpZWVlX2RhdGFfdHlwZSAqaWVlZTsKLS0gIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzMwMF07Ci0rICBzdGF0aWMgdW5zaWduZWQgY2hhciBidWZmZXJbMzAwXTsKLSAgIGllZWVfZGF0YV90eXBlICpzYXZlID0gSUVFRV9EQVRBIChhYmZkKTsKLSAgIGJmZF9zaXplX3R5cGUgYW10OwotIAotSW5kZXg6IGdpdC9iZmQvQ2hhbmdlTG9nCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmZkL0NoYW5nZUxvZwotKysrIGdpdC9iZmQvQ2hhbmdlTG9nCi1AQCAtMSw1ICsxLDkgQEAKLSAyMDE3LTA2LTE1ICBOaWNrIENsaWZ0b24gIDxuaWNrY0ByZWRoYXQuY29tPgotIAotKyAgICAgICBQUiBiaW51dGlscy8yMTU4MgotKyAgICAgICAqIGllZWUuYyAoaWVlZV9vYmplY3RfcCk6IFVzZSBhIHN0YXRpYyBidWZmZXIgdG8gYXZvaWQgY29tcGlsZXIKLSsgICAgICAgYnVncy4KLSsKLSAgICAgICAgUFIgYmludXRpbHMvMjE1ODEKLSAgICAgICAgKGllZWVfYXJjaGl2ZV9wKTogTGlrZXdpc2UuCi0gCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTk3NDkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTk3NDkucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjYzJhZmMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy05NzQ5LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotRnJvbSAwOGM3ODgxYjgxNGM1NDZlZmMzOTk2ZmQxZGVjZGYwODc3ZjdhNzc5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTmljayBDbGlmdG9uIDxuaWNrY0ByZWRoYXQuY29tPgotRGF0ZTogVGh1LCAxNSBKdW4gMjAxNyAxMTo1MjowMiArMDEwMAotU3ViamVjdDogW1BBVENIXSBQcmV2ZW50IGludmFsaWQgYXJyYXkgYWNjZXNzZXMgd2hlbiBkaXNhc3NlbWJsaW5nIGEgY29ycnVwdAotIGJmaW4gYmluYXJ5LgotCi0JUFIgYmludXRpbHMvMjE1ODYKLQkqIGJmaW4tZGlzLmMgKGdyZWdzKTogQ2xpcCBpbmRleCB0byBwcmV2ZW50IG92ZXJmbG93LgotCShyZWdzKTogTGlrZXdpc2UuCi0JKHJlZ3NfbG8pOiBMaWtld2lzZS4KLQkocmVnc19oaSk6IExpa2V3aXNlLgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1DVkU6IENWRS0yMDE3LTk3NDkKLVNpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgotCi0tLS0KLSBvcGNvZGVzL0NoYW5nZUxvZyAgfCA4ICsrKysrKysrCi0gb3Bjb2Rlcy9iZmluLWRpcy5jIHwgOCArKysrLS0tLQotIDIgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKLQotSW5kZXg6IGdpdC9vcGNvZGVzL0NoYW5nZUxvZwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL29wY29kZXMvQ2hhbmdlTG9nCi0rKysgZ2l0L29wY29kZXMvQ2hhbmdlTG9nCi1AQCAtMSwzICsxLDExIEBACi0rMjAxNy0wNi0xNSAgTmljayBDbGlmdG9uICA8bmlja2NAcmVkaGF0LmNvbT4KLSsKLSsJUFIgYmludXRpbHMvMjE1ODYKLSsJKiBiZmluLWRpcy5jIChncmVncyk6IENsaXAgaW5kZXggdG8gcHJldmVudCBvdmVyZmxvdy4KLSsJKHJlZ3MpOiBMaWtld2lzZS4KLSsJKHJlZ3NfbG8pOiBMaWtld2lzZS4KLSsJKHJlZ3NfaGkpOiBMaWtld2lzZS4KLSsKLSAyMDE3LTA2LTE0ICBOaWNrIENsaWZ0b24gIDxuaWNrY0ByZWRoYXQuY29tPgotIAotICAgICAgICBQUiBiaW51dGlscy8yMTU3NgotSW5kZXg6IGdpdC9vcGNvZGVzL2JmaW4tZGlzLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9vcGNvZGVzL2JmaW4tZGlzLmMKLSsrKyBnaXQvb3Bjb2Rlcy9iZmluLWRpcy5jCi1AQCAtMzUwLDcgKzM1MCw3IEBAIHN0YXRpYyBjb25zdCBlbnVtIG1hY2hpbmVfcmVnaXN0ZXJzIGRlY28KLSAgIFJFR19QMCwgUkVHX1AxLCBSRUdfUDIsIFJFR19QMywgUkVHX1A0LCBSRUdfUDUsIFJFR19TUCwgUkVHX0ZQLAotIH07Ci0gCi0tI2RlZmluZSBncmVncyh4LCBpKSBSRUdOQU1FIChkZWNvZGVfZ3JlZ3NbKChpKSA8PCAzKSB8ICh4KV0pCi0rI2RlZmluZSBncmVncyh4LCBpKSBSRUdOQU1FIChkZWNvZGVfZ3JlZ3NbKCgoaSkgPDwgMykgfCAoeCkpICYgMTVdKQotIAotIC8qIFtkcmVncyBwcmVncyAoaXJlZ3MgbXJlZ3MpIChicmVncyBscmVncyldLiAgKi8KLSBzdGF0aWMgY29uc3QgZW51bSBtYWNoaW5lX3JlZ2lzdGVycyBkZWNvZGVfcmVnc1tdID0KLUBAIC0zNjEsNyArMzYxLDcgQEAgc3RhdGljIGNvbnN0IGVudW0gbWFjaGluZV9yZWdpc3RlcnMgZGVjbwotICAgUkVHX0IwLCBSRUdfQjEsIFJFR19CMiwgUkVHX0IzLCBSRUdfTDAsIFJFR19MMSwgUkVHX0wyLCBSRUdfTDMsCi0gfTsKLSAKLS0jZGVmaW5lIHJlZ3MoeCwgaSkgUkVHTkFNRSAoZGVjb2RlX3JlZ3NbKChpKSA8PCAzKSB8ICh4KV0pCi0rI2RlZmluZSByZWdzKHgsIGkpIFJFR05BTUUgKGRlY29kZV9yZWdzWygoKGkpIDw8IDMpIHwgKHgpKSAmIDMxXSkKLSAKLSAvKiBbZHJlZ3MgcHJlZ3MgKGlyZWdzIG1yZWdzKSAoYnJlZ3MgbHJlZ3MpIExvdyBIYWxmXS4gICovCi0gc3RhdGljIGNvbnN0IGVudW0gbWFjaGluZV9yZWdpc3RlcnMgZGVjb2RlX3JlZ3NfbG9bXSA9Ci1AQCAtMzcyLDcgKzM3Miw3IEBAIHN0YXRpYyBjb25zdCBlbnVtIG1hY2hpbmVfcmVnaXN0ZXJzIGRlY28KLSAgIFJFR19CTDAsIFJFR19CTDEsIFJFR19CTDIsIFJFR19CTDMsIFJFR19MTDAsIFJFR19MTDEsIFJFR19MTDIsIFJFR19MTDMsCi0gfTsKLSAKLS0jZGVmaW5lIHJlZ3NfbG8oeCwgaSkgUkVHTkFNRSAoZGVjb2RlX3JlZ3NfbG9bKChpKSA8PCAzKSB8ICh4KV0pCi0rI2RlZmluZSByZWdzX2xvKHgsIGkpIFJFR05BTUUgKGRlY29kZV9yZWdzX2xvWygoKGkpIDw8IDMpIHwgKHgpKSAmIDMxXSkKLSAKLSAvKiBbZHJlZ3MgcHJlZ3MgKGlyZWdzIG1yZWdzKSAoYnJlZ3MgbHJlZ3MpIEhpZ2ggSGFsZl0uICAqLwotIHN0YXRpYyBjb25zdCBlbnVtIG1hY2hpbmVfcmVnaXN0ZXJzIGRlY29kZV9yZWdzX2hpW10gPQotQEAgLTM4Myw3ICszODMsNyBAQCBzdGF0aWMgY29uc3QgZW51bSBtYWNoaW5lX3JlZ2lzdGVycyBkZWNvCi0gICBSRUdfQkgwLCBSRUdfQkgxLCBSRUdfQkgyLCBSRUdfQkgzLCBSRUdfTEgwLCBSRUdfTEgxLCBSRUdfTEgyLCBSRUdfTEgzLAotIH07Ci0gCi0tI2RlZmluZSByZWdzX2hpKHgsIGkpIFJFR05BTUUgKGRlY29kZV9yZWdzX2hpWygoaSkgPDwgMykgfCAoeCldKQotKyNkZWZpbmUgcmVnc19oaSh4LCBpKSBSRUdOQU1FIChkZWNvZGVfcmVnc19oaVsoKChpKSA8PCAzKSB8ICh4KSkgJiAzMV0pCi0gCi0gc3RhdGljIGNvbnN0IGVudW0gbWFjaGluZV9yZWdpc3RlcnMgZGVjb2RlX3N0YXRiaXRzW10gPQotIHsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTc1MC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTc1MC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU4ZmE2OS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTk3NTAucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNDcgKzAsMCBAQAotRnJvbSBkYjVmYTc3MDI2OGJhZjhjYzgyY2Y5YjE0MWQ2OTc5OWZkNDg1ZmUyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTmljayBDbGlmdG9uIDxuaWNrY0ByZWRoYXQuY29tPgotRGF0ZTogV2VkLCAxNCBKdW4gMjAxNyAxMzozNTowNiArMDEwMAotU3ViamVjdDogW1BBVENIXSBGaXggYWRkcmVzcyB2aW9sYXRpb24gcHJvYmxlbXMgd2hlbiBkaXNhc3NlbWJsaW5nIGEgY29ycnVwdAotIFJYIGJpbmFyeS4KLQotCVBSIGJpbnV0aWxzLzIxNTg3Ci0JKiByeC1kZWNvZGUub3BjOiBJbmNsdWRlIGxpYmliZXJ0eS5oCi0JKEdFVF9TQ0FMRSk6IE5ldyBtYWNybyAtIHZhbGlkYXRlcyBhY2Nlc3MgdG8gU0NBTEUgYXJyYXkuCi0JKEdFVF9QU0NBTEUpOiBOZXcgbWFjcm8gLSB2YWxpZGF0ZXMgYWNjZXNzIHRvIFBTQ0FMRSBhcnJheS4KLQkoRElzLCBTSXMsIFMySXMsIHJ4X2Rpc3ApOiBVc2UgbmV3IG1hY3Jvcy4KLQkqIHJ4LWRlY29kZS5jOiBSZWdlbmVyYXRlLgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1DVkU6IENWRS0yMDE3LTk3NTAKLVNpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgotCi0tLS0KLSBvcGNvZGVzL0NoYW5nZUxvZyAgICAgfCAgOSArKysrKysrKysKLSBvcGNvZGVzL3J4LWRlY29kZS5jICAgfCAyNCArKysrKysrKysrKysrKy0tLS0tLS0tLS0KLSBvcGNvZGVzL3J4LWRlY29kZS5vcGMgfCAyNCArKysrKysrKysrKysrKy0tLS0tLS0tLS0KLSAzIGZpbGVzIGNoYW5nZWQsIDM3IGluc2VydGlvbnMoKyksIDIwIGRlbGV0aW9ucygtKQotCi1JbmRleDogZ2l0L29wY29kZXMvcngtZGVjb2RlLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9vcGNvZGVzL3J4LWRlY29kZS5jCi0rKysgZ2l0L29wY29kZXMvcngtZGVjb2RlLmMKLUBAIC0yNyw2ICsyNyw3IEBACi0gI2luY2x1ZGUgPHN0cmluZy5oPgotICNpbmNsdWRlICJhbnNpZGVjbC5oIgotICNpbmNsdWRlICJvcGNvZGUvcnguaCIKLSsjaW5jbHVkZSAibGliaWJlcnR5LmgiCi0gCi0gI2RlZmluZSBSWF9PUENPREVfQklHX0VORElBTiAwCi0gCi1AQCAtNDUsNyArNDYsNyBAQCBzdGF0aWMgaW50IHRyYWNlID0gMDsKLSAjZGVmaW5lIExTSVpFIDIKLSAKLSAvKiBUaGVzZSBhcmUgZm9yIHdoZW4gdGhlIHVwcGVyIGJpdHMgYXJlICJkb24ndCBjYXJlIiBvciAidW5kZWZpbmVkIi4gICovCi0tc3RhdGljIGludCBid2xbXSA9Ci0rc3RhdGljIGludCBid2xbNF0gPQotIHsKLSAgIFJYX0J5dGUsCi0gICBSWF9Xb3JkLAotQEAgLTUzLDcgKzU0LDcgQEAgc3RhdGljIGludCBid2xbXSA9Ci0gICBSWF9CYWRfU2l6ZSAvKiBCb2d1cyBpbnN0cnVjdGlvbnMgY2FuIGhhdmUgYSBzaXplIGZpZWxkIHNldCB0byAzLiAgKi8KLSB9OwotIAotLXN0YXRpYyBpbnQgc2J3bFtdID0KLStzdGF0aWMgaW50IHNid2xbNF0gPQotIHsKLSAgIFJYX1NCeXRlLAotICAgUlhfU1dvcmQsCi1AQCAtNjEsNyArNjIsNyBAQCBzdGF0aWMgaW50IHNid2xbXSA9Ci0gICBSWF9CYWRfU2l6ZSAvKiBCb2d1cyBpbnN0cnVjdGlvbnMgY2FuIGhhdmUgYSBzaXplIGZpZWxkIHNldCB0byAzLiAgKi8KLSB9OwotIAotLXN0YXRpYyBpbnQgdWJ3W10gPQotK3N0YXRpYyBpbnQgdWJ3WzRdID0KLSB7Ci0gICBSWF9VQnl0ZSwKLSAgIFJYX1VXb3JkLAotQEAgLTY5LDcgKzcwLDcgQEAgc3RhdGljIGludCB1YndbXSA9Ci0gICBSWF9CYWRfU2l6ZSAvKiBCb2d1cyBpbnN0cnVjdGlvbnMgY2FuIGhhdmUgYSBzaXplIGZpZWxkIHNldCB0byAzLiAgKi8KLSB9OwotIAotLXN0YXRpYyBpbnQgbWVtZXhbXSA9Ci0rc3RhdGljIGludCBtZW1leFs0XSA9Ci0gewotICAgUlhfU0J5dGUsCi0gICBSWF9TV29yZCwKLUBAIC04OSw2ICs5MCw5IEBAIHN0YXRpYyBpbnQgU0NBTEVbXSA9IHsgMSwgMiwgNCwgMCB9OwotIC8qIFRoaXMgaXMgZm9yIHRoZSBwcmVmaXggc2l6ZSBlbnVtLiAgKi8KLSBzdGF0aWMgaW50IFBTQ0FMRVtdID0geyA0LCAxLCAxLCAxLCAyLCAyLCAyLCAzLCA0IH07Ci0gCi0rI2RlZmluZSBHRVRfU0NBTEUoX2luZHgpICAoKHVuc2lnbmVkKShfaW5keCkgPCBBUlJBWV9TSVpFIChTQ0FMRSkgPyBTQ0FMRVsoX2luZHgpXSA6IDApCi0rI2RlZmluZSBHRVRfUFNDQUxFKF9pbmR4KSAoKHVuc2lnbmVkKShfaW5keCkgPCBBUlJBWV9TSVpFIChQU0NBTEUpID8gUFNDQUxFWyhfaW5keCldIDogMCkKLSsKLSBzdGF0aWMgaW50IGZsYWdtYXBbXSA9IHswLCAxLCAyLCAzLCAwLCAwLCAwLCAwLAotIAkJICAgICAgIDE2LCAxNywgMCwgMCwgMCwgMCwgMCwgMCB9OwotIAotQEAgLTEwNyw3ICsxMTEsNyBAQCBzdGF0aWMgaW50IGRzcDNtYXBbXSA9IHsgOCwgOSwgMTAsIDMsIDQsCi0gI2RlZmluZSBEQyhjKSAgICAgICBPUCAoMCwgUlhfT3BlcmFuZF9JbW1lZGlhdGUsIDAsIGMpCi0gI2RlZmluZSBEUihyKSAgICAgICBPUCAoMCwgUlhfT3BlcmFuZF9SZWdpc3RlciwgIHIsIDApCi0gI2RlZmluZSBESShyLGEpICAgICBPUCAoMCwgUlhfT3BlcmFuZF9JbmRpcmVjdCwgIHIsIGEpCi0tI2RlZmluZSBESXMocixhLHMpICBPUCAoMCwgUlhfT3BlcmFuZF9JbmRpcmVjdCwgIHIsIChhKSAqIFNDQUxFW3NdKQotKyNkZWZpbmUgRElzKHIsYSxzKSAgT1AgKDAsIFJYX09wZXJhbmRfSW5kaXJlY3QsICByLCAoYSkgKiBHRVRfU0NBTEUgKHMpKQotICNkZWZpbmUgREQodCxyLHMpICAgcnhfZGlzcCAoMCwgdCwgciwgYndsW3NdLCBsZCk7Ci0gI2RlZmluZSBERihyKSAgICAgICBPUCAoMCwgUlhfT3BlcmFuZF9GbGFnLCAgZmxhZ21hcFtyXSwgMCkKLSAKLUBAIC0xMTUsNyArMTE5LDcgQEAgc3RhdGljIGludCBkc3AzbWFwW10gPSB7IDgsIDksIDEwLCAzLCA0LAotICNkZWZpbmUgU1IocikgICAgICAgT1AgKDEsIFJYX09wZXJhbmRfUmVnaXN0ZXIsICByLCAwKQotICNkZWZpbmUgU1JSKHIpICAgICAgT1AgKDEsIFJYX09wZXJhbmRfVHdvUmVnLCAgciwgMCkKLSAjZGVmaW5lIFNJKHIsYSkgICAgIE9QICgxLCBSWF9PcGVyYW5kX0luZGlyZWN0LCAgciwgYSkKLS0jZGVmaW5lIFNJcyhyLGEscykgIE9QICgxLCBSWF9PcGVyYW5kX0luZGlyZWN0LCAgciwgKGEpICogU0NBTEVbc10pCi0rI2RlZmluZSBTSXMocixhLHMpICBPUCAoMSwgUlhfT3BlcmFuZF9JbmRpcmVjdCwgIHIsIChhKSAqIEdFVF9TQ0FMRSAocykpCi0gI2RlZmluZSBTRCh0LHIscykgICByeF9kaXNwICgxLCB0LCByLCBid2xbc10sIGxkKTsKLSAjZGVmaW5lIFNQKHQscikgICAgIHJ4X2Rpc3AgKDEsIHQsIHIsICh0IT0zKSA/IFJYX1VCeXRlIDogUlhfTG9uZywgbGQpOyBQKHQsIDEpOwotICNkZWZpbmUgU1BtKHQscixtKSAgcnhfZGlzcCAoMSwgdCwgciwgbWVtZXhbbV0sIGxkKTsgcngtPm9wWzFdLnNpemUgPSBtZW1leFttXTsKLUBAIC0xMjQsNyArMTI4LDcgQEAgc3RhdGljIGludCBkc3AzbWFwW10gPSB7IDgsIDksIDEwLCAzLCA0LAotICNkZWZpbmUgUzJDKGkpICAgICAgT1AgKDIsIFJYX09wZXJhbmRfSW1tZWRpYXRlLCAwLCBpKQotICNkZWZpbmUgUzJSKHIpICAgICAgT1AgKDIsIFJYX09wZXJhbmRfUmVnaXN0ZXIsICByLCAwKQotICNkZWZpbmUgUzJJKHIsYSkgICAgT1AgKDIsIFJYX09wZXJhbmRfSW5kaXJlY3QsICByLCBhKQotLSNkZWZpbmUgUzJJcyhyLGEscykgT1AgKDIsIFJYX09wZXJhbmRfSW5kaXJlY3QsICByLCAoYSkgKiBTQ0FMRVtzXSkKLSsjZGVmaW5lIFMySXMocixhLHMpIE9QICgyLCBSWF9PcGVyYW5kX0luZGlyZWN0LCAgciwgKGEpICogR0VUX1NDQUxFIChzKSkKLSAjZGVmaW5lIFMyRCh0LHIscykgIHJ4X2Rpc3AgKDIsIHQsIHIsIGJ3bFtzXSwgbGQpOwotICNkZWZpbmUgUzJQKHQscikgICAgcnhfZGlzcCAoMiwgdCwgciwgKHQhPTMpID8gUlhfVUJ5dGUgOiBSWF9Mb25nLCBsZCk7IFAodCwgMik7Ci0gI2RlZmluZSBTMlBtKHQscixtKSByeF9kaXNwICgyLCB0LCByLCBtZW1leFttXSwgbGQpOyByeC0+b3BbMl0uc2l6ZSA9IG1lbWV4W21dOwotQEAgLTIxMSw3ICsyMTUsNyBAQCBpbW1lZGlhdGUgKGludCBzZmllbGQsIGludCBleCwgTG9jYWxEYXRhCi0gfQotIAotIHN0YXRpYyB2b2lkCi0tcnhfZGlzcCAoaW50IG4sIGludCB0eXBlLCBpbnQgcmVnLCBpbnQgc2l6ZSwgTG9jYWxEYXRhICogbGQpCi0rcnhfZGlzcCAoaW50IG4sIGludCB0eXBlLCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgc2l6ZSwgTG9jYWxEYXRhICogbGQpCi0gewotICAgaW50IGRpc3A7Ci0gCi1AQCAtMjI4LDcgKzIzMiw3IEBAIHJ4X2Rpc3AgKGludCBuLCBpbnQgdHlwZSwgaW50IHJlZywgaW50IHMKLSAgICAgY2FzZSAxOgotICAgICAgIGxkLT5yeC0+b3Bbbl0udHlwZSA9IFJYX09wZXJhbmRfSW5kaXJlY3Q7Ci0gICAgICAgZGlzcCA9IEdFVEJZVEUgKCk7Ci0tICAgICAgbGQtPnJ4LT5vcFtuXS5hZGRlbmQgPSBkaXNwICogUFNDQUxFW3NpemVdOwotKyAgICAgIGxkLT5yeC0+b3Bbbl0uYWRkZW5kID0gZGlzcCAqIEdFVF9QU0NBTEUgKHNpemUpOwotICAgICAgIGJyZWFrOwotICAgICBjYXNlIDI6Ci0gICAgICAgbGQtPnJ4LT5vcFtuXS50eXBlID0gUlhfT3BlcmFuZF9JbmRpcmVjdDsKLUBAIC0yMzgsNyArMjQyLDcgQEAgcnhfZGlzcCAoaW50IG4sIGludCB0eXBlLCBpbnQgcmVnLCBpbnQgcwotICNlbHNlCi0gICAgICAgZGlzcCA9IGRpc3AgKyBHRVRCWVRFICgpICogMjU2OwotICNlbmRpZgotLSAgICAgIGxkLT5yeC0+b3Bbbl0uYWRkZW5kID0gZGlzcCAqIFBTQ0FMRVtzaXplXTsKLSsgICAgICBsZC0+cngtPm9wW25dLmFkZGVuZCA9IGRpc3AgKiBHRVRfUFNDQUxFIChzaXplKTsKLSAgICAgICBicmVhazsKLSAgICAgZGVmYXVsdDoKLSAgICAgICBhYm9ydCAoKTsKLUluZGV4OiBnaXQvb3Bjb2Rlcy9yeC1kZWNvZGUub3BjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvb3Bjb2Rlcy9yeC1kZWNvZGUub3BjCi0rKysgZ2l0L29wY29kZXMvcngtZGVjb2RlLm9wYwotQEAgLTI2LDYgKzI2LDcgQEAKLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1ZGUgImFuc2lkZWNsLmgiCi0gI2luY2x1ZGUgIm9wY29kZS9yeC5oIgotKyNpbmNsdWRlICJsaWJpYmVydHkuaCIKLSAKLSAjZGVmaW5lIFJYX09QQ09ERV9CSUdfRU5ESUFOIDAKLSAKLUBAIC00NCw3ICs0NSw3IEBAIHN0YXRpYyBpbnQgdHJhY2UgPSAwOwotICNkZWZpbmUgTFNJWkUgMgotIAotIC8qIFRoZXNlIGFyZSBmb3Igd2hlbiB0aGUgdXBwZXIgYml0cyBhcmUgImRvbid0IGNhcmUiIG9yICJ1bmRlZmluZWQiLiAgKi8KLS1zdGF0aWMgaW50IGJ3bFtdID0KLStzdGF0aWMgaW50IGJ3bFs0XSA9Ci0gewotICAgUlhfQnl0ZSwKLSAgIFJYX1dvcmQsCi1AQCAtNTIsNyArNTMsNyBAQCBzdGF0aWMgaW50IGJ3bFtdID0KLSAgIFJYX0JhZF9TaXplIC8qIEJvZ3VzIGluc3RydWN0aW9ucyBjYW4gaGF2ZSBhIHNpemUgZmllbGQgc2V0IHRvIDMuICAqLwotIH07Ci0gCi0tc3RhdGljIGludCBzYndsW10gPQotK3N0YXRpYyBpbnQgc2J3bFs0XSA9Ci0gewotICAgUlhfU0J5dGUsCi0gICBSWF9TV29yZCwKLUBAIC02MCw3ICs2MSw3IEBAIHN0YXRpYyBpbnQgc2J3bFtdID0KLSAgIFJYX0JhZF9TaXplIC8qIEJvZ3VzIGluc3RydWN0aW9ucyBjYW4gaGF2ZSBhIHNpemUgZmllbGQgc2V0IHRvIDMuICAqLwotIH07Ci0gCi0tc3RhdGljIGludCB1YndbXSA9Ci0rc3RhdGljIGludCB1YndbNF0gPQotIHsKLSAgIFJYX1VCeXRlLAotICAgUlhfVVdvcmQsCi1AQCAtNjgsNyArNjksNyBAQCBzdGF0aWMgaW50IHVid1tdID0KLSAgIFJYX0JhZF9TaXplIC8qIEJvZ3VzIGluc3RydWN0aW9ucyBjYW4gaGF2ZSBhIHNpemUgZmllbGQgc2V0IHRvIDMuICAqLwotIH07Ci0gCi0tc3RhdGljIGludCBtZW1leFtdID0KLStzdGF0aWMgaW50IG1lbWV4WzRdID0KLSB7Ci0gICBSWF9TQnl0ZSwKLSAgIFJYX1NXb3JkLAotQEAgLTg4LDYgKzg5LDkgQEAgc3RhdGljIGludCBTQ0FMRVtdID0geyAxLCAyLCA0LCAwIH07Ci0gLyogVGhpcyBpcyBmb3IgdGhlIHByZWZpeCBzaXplIGVudW0uICAqLwotIHN0YXRpYyBpbnQgUFNDQUxFW10gPSB7IDQsIDEsIDEsIDEsIDIsIDIsIDIsIDMsIDQgfTsKLSAKLSsjZGVmaW5lIEdFVF9TQ0FMRShfaW5keCkgICgodW5zaWduZWQpKF9pbmR4KSA8IEFSUkFZX1NJWkUgKFNDQUxFKSA/IFNDQUxFWyhfaW5keCldIDogMCkKLSsjZGVmaW5lIEdFVF9QU0NBTEUoX2luZHgpICgodW5zaWduZWQpKF9pbmR4KSA8IEFSUkFZX1NJWkUgKFBTQ0FMRSkgPyBQU0NBTEVbKF9pbmR4KV0gOiAwKQotKwotIHN0YXRpYyBpbnQgZmxhZ21hcFtdID0gezAsIDEsIDIsIDMsIDAsIDAsIDAsIDAsCi0gCQkgICAgICAgMTYsIDE3LCAwLCAwLCAwLCAwLCAwLCAwIH07Ci0gCi1AQCAtMTA2LDcgKzExMCw3IEBAIHN0YXRpYyBpbnQgZHNwM21hcFtdID0geyA4LCA5LCAxMCwgMywgNCwKLSAjZGVmaW5lIERDKGMpICAgICAgIE9QICgwLCBSWF9PcGVyYW5kX0ltbWVkaWF0ZSwgMCwgYykKLSAjZGVmaW5lIERSKHIpICAgICAgIE9QICgwLCBSWF9PcGVyYW5kX1JlZ2lzdGVyLCAgciwgMCkKLSAjZGVmaW5lIERJKHIsYSkgICAgIE9QICgwLCBSWF9PcGVyYW5kX0luZGlyZWN0LCAgciwgYSkKLS0jZGVmaW5lIERJcyhyLGEscykgIE9QICgwLCBSWF9PcGVyYW5kX0luZGlyZWN0LCAgciwgKGEpICogU0NBTEVbc10pCi0rI2RlZmluZSBESXMocixhLHMpICBPUCAoMCwgUlhfT3BlcmFuZF9JbmRpcmVjdCwgIHIsIChhKSAqIEdFVF9TQ0FMRSAocykpCi0gI2RlZmluZSBERCh0LHIscykgICByeF9kaXNwICgwLCB0LCByLCBid2xbc10sIGxkKTsKLSAjZGVmaW5lIERGKHIpICAgICAgIE9QICgwLCBSWF9PcGVyYW5kX0ZsYWcsICBmbGFnbWFwW3JdLCAwKQotIAotQEAgLTExNCw3ICsxMTgsNyBAQCBzdGF0aWMgaW50IGRzcDNtYXBbXSA9IHsgOCwgOSwgMTAsIDMsIDQsCi0gI2RlZmluZSBTUihyKSAgICAgICBPUCAoMSwgUlhfT3BlcmFuZF9SZWdpc3RlciwgIHIsIDApCi0gI2RlZmluZSBTUlIocikgICAgICBPUCAoMSwgUlhfT3BlcmFuZF9Ud29SZWcsICByLCAwKQotICNkZWZpbmUgU0kocixhKSAgICAgT1AgKDEsIFJYX09wZXJhbmRfSW5kaXJlY3QsICByLCBhKQotLSNkZWZpbmUgU0lzKHIsYSxzKSAgT1AgKDEsIFJYX09wZXJhbmRfSW5kaXJlY3QsICByLCAoYSkgKiBTQ0FMRVtzXSkKLSsjZGVmaW5lIFNJcyhyLGEscykgIE9QICgxLCBSWF9PcGVyYW5kX0luZGlyZWN0LCAgciwgKGEpICogR0VUX1NDQUxFIChzKSkKLSAjZGVmaW5lIFNEKHQscixzKSAgIHJ4X2Rpc3AgKDEsIHQsIHIsIGJ3bFtzXSwgbGQpOwotICNkZWZpbmUgU1AodCxyKSAgICAgcnhfZGlzcCAoMSwgdCwgciwgKHQhPTMpID8gUlhfVUJ5dGUgOiBSWF9Mb25nLCBsZCk7IFAodCwgMSk7Ci0gI2RlZmluZSBTUG0odCxyLG0pICByeF9kaXNwICgxLCB0LCByLCBtZW1leFttXSwgbGQpOyByeC0+b3BbMV0uc2l6ZSA9IG1lbWV4W21dOwotQEAgLTEyMyw3ICsxMjcsNyBAQCBzdGF0aWMgaW50IGRzcDNtYXBbXSA9IHsgOCwgOSwgMTAsIDMsIDQsCi0gI2RlZmluZSBTMkMoaSkgICAgICBPUCAoMiwgUlhfT3BlcmFuZF9JbW1lZGlhdGUsIDAsIGkpCi0gI2RlZmluZSBTMlIocikgICAgICBPUCAoMiwgUlhfT3BlcmFuZF9SZWdpc3RlciwgIHIsIDApCi0gI2RlZmluZSBTMkkocixhKSAgICBPUCAoMiwgUlhfT3BlcmFuZF9JbmRpcmVjdCwgIHIsIGEpCi0tI2RlZmluZSBTMklzKHIsYSxzKSBPUCAoMiwgUlhfT3BlcmFuZF9JbmRpcmVjdCwgIHIsIChhKSAqIFNDQUxFW3NdKQotKyNkZWZpbmUgUzJJcyhyLGEscykgT1AgKDIsIFJYX09wZXJhbmRfSW5kaXJlY3QsICByLCAoYSkgKiBHRVRfU0NBTEUgKHMpKQotICNkZWZpbmUgUzJEKHQscixzKSAgcnhfZGlzcCAoMiwgdCwgciwgYndsW3NdLCBsZCk7Ci0gI2RlZmluZSBTMlAodCxyKSAgICByeF9kaXNwICgyLCB0LCByLCAodCE9MykgPyBSWF9VQnl0ZSA6IFJYX0xvbmcsIGxkKTsgUCh0LCAyKTsKLSAjZGVmaW5lIFMyUG0odCxyLG0pIHJ4X2Rpc3AgKDIsIHQsIHIsIG1lbWV4W21dLCBsZCk7IHJ4LT5vcFsyXS5zaXplID0gbWVtZXhbbV07Ci1AQCAtMjEwLDcgKzIxNCw3IEBAIGltbWVkaWF0ZSAoaW50IHNmaWVsZCwgaW50IGV4LCBMb2NhbERhdGEKLSB9Ci0gCi0gc3RhdGljIHZvaWQKLS1yeF9kaXNwIChpbnQgbiwgaW50IHR5cGUsIGludCByZWcsIGludCBzaXplLCBMb2NhbERhdGEgKiBsZCkKLStyeF9kaXNwIChpbnQgbiwgaW50IHR5cGUsIGludCByZWcsIHVuc2lnbmVkIGludCBzaXplLCBMb2NhbERhdGEgKiBsZCkKLSB7Ci0gICBpbnQgZGlzcDsKLSAKLUBAIC0yMjcsNyArMjMxLDcgQEAgcnhfZGlzcCAoaW50IG4sIGludCB0eXBlLCBpbnQgcmVnLCBpbnQgcwotICAgICBjYXNlIDE6Ci0gICAgICAgbGQtPnJ4LT5vcFtuXS50eXBlID0gUlhfT3BlcmFuZF9JbmRpcmVjdDsKLSAgICAgICBkaXNwID0gR0VUQllURSAoKTsKLS0gICAgICBsZC0+cngtPm9wW25dLmFkZGVuZCA9IGRpc3AgKiBQU0NBTEVbc2l6ZV07Ci0rICAgICAgbGQtPnJ4LT5vcFtuXS5hZGRlbmQgPSBkaXNwICogR0VUX1BTQ0FMRSAoc2l6ZSk7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGNhc2UgMjoKLSAgICAgICBsZC0+cngtPm9wW25dLnR5cGUgPSBSWF9PcGVyYW5kX0luZGlyZWN0OwotQEAgLTIzNyw3ICsyNDEsNyBAQCByeF9kaXNwIChpbnQgbiwgaW50IHR5cGUsIGludCByZWcsIGludCBzCi0gI2Vsc2UKLSAgICAgICBkaXNwID0gZGlzcCArIEdFVEJZVEUgKCkgKiAyNTY7Ci0gI2VuZGlmCi0tICAgICAgbGQtPnJ4LT5vcFtuXS5hZGRlbmQgPSBkaXNwICogUFNDQUxFW3NpemVdOwotKyAgICAgIGxkLT5yeC0+b3Bbbl0uYWRkZW5kID0gZGlzcCAqIEdFVF9QU0NBTEUgKHNpemUpOwotICAgICAgIGJyZWFrOwotICAgICBkZWZhdWx0OgotICAgICAgIGFib3J0ICgpOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy05NzUxLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy05NzUxLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2MxOGNmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTc1MS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM3NDggKzAsMCBAQAotRnJvbSA2MzMyM2I1YjIzYmQ4M2ZhN2IwNGVhMDBkZmY1OTNjOTMzZTliMGUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTmljayBDbGlmdG9uIDxuaWNrY0ByZWRoYXQuY29tPgotRGF0ZTogVGh1LCAxNSBKdW4gMjAxNyAxMjozNzowMSArMDEwMAotU3ViamVjdDogW1BBVENIXSBGaXggYWRkcmVzcyB2aW9sYXRpb24gd2hlbiBkaXNhc3NlbWJsaW5nIGEgY29ycnVwdCBSTDc4Ci0gYmluYXJ5LgotCi0JUFIgYmludXRpbHMvMjE1ODgKLQkqIHJsNzgtZGVjb2RlLm9wYyAoT1BfQlVGX0xFTik6IERlZmluZS4KLQkoR0VUQllURSk6IENoZWNrIGZvciB0aGUgaW5kZXggZXhjZWVkaW5nIE9QX0JVRl9MRU4uCi0JKHJsNzhfZGVjb2RlX29wY29kZSk6IFVzZSBPUF9CVUZfTEVOIGFzIHRoZSBsZW5ndGggb2YgdGhlIG9wX2J1ZgotCWFycmF5LgotCSogcmw3OC1kZWNvZGUuYzogUmVnZW5lcmF0ZS4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQ1ZFOiBDVkUtMjAxNy05NzUxCi1TaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KLQotLS0tCi0gb3Bjb2Rlcy9DaGFuZ2VMb2cgICAgICAgfCAgIDkgKwotIG9wY29kZXMvcmw3OC1kZWNvZGUuYyAgIHwgODIwICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIG9wY29kZXMvcmw3OC1kZWNvZGUub3BjIHwgICA2ICstCi0gMyBmaWxlcyBjaGFuZ2VkLCA0MjQgaW5zZXJ0aW9ucygrKSwgNDExIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvb3Bjb2Rlcy9DaGFuZ2VMb2cgYi9vcGNvZGVzL0NoYW5nZUxvZwotaW5kZXggMzRiMTg0NC4uYzc3ZjAwYSAxMDA2NDQKLS0tLSBhL29wY29kZXMvQ2hhbmdlTG9nCi0rKysgYi9vcGNvZGVzL0NoYW5nZUxvZwotQEAgLTEsNSArMSwxNCBAQAotIDIwMTctMDYtMTUgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQHJlZGhhdC5jb20+Ci0gCi0rCVBSIGJpbnV0aWxzLzIxNTg4Ci0rCSogcmw3OC1kZWNvZGUub3BjIChPUF9CVUZfTEVOKTogRGVmaW5lLgotKwkoR0VUQllURSk6IENoZWNrIGZvciB0aGUgaW5kZXggZXhjZWVkaW5nIE9QX0JVRl9MRU4uCi0rCShybDc4X2RlY29kZV9vcGNvZGUpOiBVc2UgT1BfQlVGX0xFTiBhcyB0aGUgbGVuZ3RoIG9mIHRoZSBvcF9idWYKLSsJYXJyYXkuCi0rCSogcmw3OC1kZWNvZGUuYzogUmVnZW5lcmF0ZS4KLSsKLSsyMDE3LTA2LTE1ICBOaWNrIENsaWZ0b24gIDxuaWNrY0ByZWRoYXQuY29tPgotKwotIAlQUiBiaW51dGlscy8yMTU4NgotIAkqIGJmaW4tZGlzLmMgKGdyZWdzKTogQ2xpcCBpbmRleCB0byBwcmV2ZW50IG92ZXJmbG93LgotIAkocmVncyk6IExpa2V3aXNlLgotZGlmZiAtLWdpdCBhL29wY29kZXMvcmw3OC1kZWNvZGUuYyBiL29wY29kZXMvcmw3OC1kZWNvZGUuYwotaW5kZXggZDA1NjZlYS4uYjJkNGJkNiAxMDA2NDQKLS0tLSBhL29wY29kZXMvcmw3OC1kZWNvZGUuYwotKysrIGIvb3Bjb2Rlcy9ybDc4LWRlY29kZS5jCi1AQCAtNTEsNyArNTEsOSBAQCB0eXBlZGVmIHN0cnVjdAotICNkZWZpbmUgVygpIHJsNzgtPnNpemUgPSBSTDc4X1dvcmQKLSAKLSAjZGVmaW5lIEFVIEFUVFJJQlVURV9VTlVTRUQKLS0jZGVmaW5lIEdFVEJZVEUoKSAobGQtPm9wIFtsZC0+cmw3OC0+bl9ieXRlcysrXSA9IGxkLT5nZXRieXRlIChsZC0+cHRyKSkKLSsKLSsjZGVmaW5lIE9QX0JVRl9MRU4gMjAKLSsjZGVmaW5lIEdFVEJZVEUoKSAobGQtPnJsNzgtPm5fYnl0ZXMgPCAoT1BfQlVGX0xFTiAtIDEpID8gbGQtPm9wIFtsZC0+cmw3OC0+bl9ieXRlcysrXSA9IGxkLT5nZXRieXRlIChsZC0+cHRyKTogMCkKLSAjZGVmaW5lIEIgKCh1bnNpZ25lZCBsb25nKSBHRVRCWVRFKCkpCi0gCi0gI2RlZmluZSBTWU5UQVgoeCkgcmw3OC0+c3ludGF4ID0geAotQEAgLTE2OSw3ICsxNzEsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gCQkgIFJMNzhfRGlzX0lzYSBpc2EpCi0gewotICAgTG9jYWxEYXRhIGxkcywgKiBsZCA9ICZsZHM7Ci0tICB1bnNpZ25lZCBjaGFyIG9wX2J1ZlsyMF0gPSB7MH07Ci0rICB1bnNpZ25lZCBjaGFyIG9wX2J1ZltPUF9CVUZfTEVOXSA9IHswfTsKLSAgIHVuc2lnbmVkIGNoYXIgKm9wID0gb3BfYnVmOwotICAgaW50IG9wMCwgb3AxOwotIAotQEAgLTIwMSw3ICsyMDMsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJub3AiKTsKLS0jbGluZSA5MTEgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA5MTMgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQobm9wKTsKLSAKLSAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1AQCAtMjE0LDcgKzIxNiw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgY2FzZSAweDA3OgotICAgICAgICAgewotICAgICAgICAgICAvKiogMDAwMCAwcncxCQkJYWRkdwklMCwgJTEJCQkJKi8KLS0jbGluZSAyNzQgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAyNzYgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgaW50IHJ3IEFVID0gKG9wWzBdID4+IDEpICYgMHgwMzsKLSAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgIHsKLUBAIC0yMjQsNyArMjI2LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgcHJpbnRmICgiICBydyA9IDB4JXhcbiIsIHJ3KTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiYWRkdwklMCwgJTEiKTsKLS0jbGluZSAyNzQgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAyNzYgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoYWRkKTsgVygpOyBEUihBWCk7IFNSVyhydyk7IEZ6YWM7Ci0gCi0gICAgICAgICB9Ci1AQCAtMjM5LDcgKzI0MSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoImFkZHcJJTAsICVlITEiKTsKLS0jbGluZSAyNjUgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAyNjcgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoYWRkKTsgVygpOyBEUihBWCk7IFNNKE5vbmUsIElNTVUoMikpOyBGemFjOwotIAotICAgICAgICAgfQotQEAgLTI1NCw3ICsyNTYsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJhZGR3CSUwLCAjJTEiKTsKLS0jbGluZSAyNzEgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAyNzMgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoYWRkKTsgVygpOyBEUihBWCk7IFNDKElNTVUoMikpOyBGemFjOwotIAotICAgICAgICAgfQotQEAgLTI2OSw3ICsyNzEsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJhZGR3CSUwLCAlMSIpOwotLSNsaW5lIDI3NyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDI3OSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChhZGQpOyBXKCk7IERSKEFYKTsgU00oTm9uZSwgU0FERFIpOyBGemFjOwotIAotICAgICAgICAgfQotQEAgLTI4NCw3ICsyODYsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJ4Y2gJYSwgeCIpOwotLSNsaW5lIDEyMzQgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMjM2ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKHhjaCk7IERSKEEpOyBTUihYKTsKLSAKLSAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1AQCAtMzAxLDcgKzMwMyw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdgklMCwgJWUxIik7Ci0tI2xpbmUgNjc4ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNjgwICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IERSKEEpOyBTTShCLCBJTU1VKDIpKTsKLSAKLSAgICAgICAgIH0KLUBAIC0zMTYsNyArMzE4LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiYWRkCSUwLCAjJTEiKTsKLS0jbGluZSAyMjggInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAyMzAgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoYWRkKTsgRE0oTm9uZSwgU0FERFIpOyBTQyhJTU1VKDEpKTsgRnphYzsKLSAKLSAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1AQCAtMzMzLDcgKzMzNSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoImFkZAklMCwgJTEiKTsKLS0jbGluZSAyMjIgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAyMjQgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoYWRkKTsgRFIoQSk7IFNNKE5vbmUsIFNBRERSKTsgRnphYzsKLSAKLSAgICAgICAgIH0KLUBAIC0zNDgsNyArMzUwLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiYWRkCSUwLCAjJTEiKTsKLS0jbGluZSAyMTYgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAyMTggInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoYWRkKTsgRFIoQSk7IFNDKElNTVUoMSkpOyBGemFjOwotIAotICAgICAgICAgfQotQEAgLTM2Myw3ICszNjUsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJhZGQJJTAsICVlMSIpOwotLSNsaW5lIDIwNCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDIwNiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChhZGQpOyBEUihBKTsgU00oSEwsIDApOyBGemFjOwotIAotICAgICAgICAgfQotQEAgLTM3OCw3ICszODAsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJhZGQJJTAsICVlYTEiKTsKLS0jbGluZSAyMTAgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAyMTIgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoYWRkKTsgRFIoQSk7IFNNKEhMLCBJTU1VKDEpKTsgRnphYzsKLSAKLSAgICAgICAgIH0KLUBAIC0zOTMsNyArMzk1LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiYWRkCSUwLCAlZSExIik7Ci0tI2xpbmUgMjAxICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMjAzICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKGFkZCk7IERSKEEpOyBTTShOb25lLCBJTU1VKDIpKTsgRnphYzsKLSAKLSAgICAgICAgIH0KLUBAIC00MDgsNyArNDEwLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiYWRkdwklMCwgIyUxIik7Ci0tI2xpbmUgMjgwICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMjgyICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKGFkZCk7IFcoKTsgRFIoU1ApOyBTQyhJTU1VKDEpKTsgRnphYzsKLSAKLSAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1AQCAtNDI1LDcgKzQyNyw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoImVzOiIpOwotLSNsaW5lIDE5MyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDE5NSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBERSgpOyBTRSgpOwotICAgICAgICAgICBvcCArKzsKLSAgICAgICAgICAgcGMgKys7Ci1AQCAtNDQwLDcgKzQ0Miw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgY2FzZSAweDE2OgotICAgICAgICAgewotICAgICAgICAgICAvKiogMDAwMSAwcmEwCQkJbW92dwklMCwgJTEJCQkJKi8KLS0jbGluZSA4NTkgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA4NjEgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgaW50IHJhIEFVID0gKG9wWzBdID4+IDEpICYgMHgwMzsKLSAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgIHsKLUBAIC00NTAsNyArNDUyLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgcHJpbnRmICgiICByYSA9IDB4JXhcbiIsIHJhKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92dwklMCwgJTEiKTsKLS0jbGluZSA4NTkgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA4NjEgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQobW92KTsgVygpOyBEUlcocmEpOyBTUihBWCk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNDYwLDcgKzQ2Miw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgY2FzZSAweDE3OgotICAgICAgICAgewotICAgICAgICAgICAvKiogMDAwMSAwcmExCQkJbW92dwklMCwgJTEJCQkJKi8KLS0jbGluZSA4NTYgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA4NTggInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgaW50IHJhIEFVID0gKG9wWzBdID4+IDEpICYgMHgwMzsKLSAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgIHsKLUBAIC00NzAsNyArNDcyLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgcHJpbnRmICgiICByYSA9IDB4JXhcbiIsIHJhKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92dwklMCwgJTEiKTsKLS0jbGluZSA4NTYgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA4NTggInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQobW92KTsgVygpOyBEUihBWCk7IFNSVyhyYSk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNDg1LDcgKzQ4Nyw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdgklZTAsICUxIik7Ci0tI2xpbmUgNzI5ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNzMxICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IERNKEIsIElNTVUoMikpOyBTUihBKTsKLSAKLSAgICAgICAgIH0KLUBAIC01MDAsNyArNTAyLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92CSVlMCwgIyUxIik7Ci0tI2xpbmUgNzI2ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNzI4ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IERNKEIsIElNTVUoMikpOyBTQyhJTU1VKDEpKTsKLSAKLSAgICAgICAgIH0KLUBAIC01MTUsNyArNTE3LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiYWRkYwklMCwgIyUxIik7Ci0tI2xpbmUgMjYwICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMjYyICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKGFkZGMpOyBETShOb25lLCBTQUREUik7IFNDKElNTVUoMSkpOyBGemFjOwotIAotICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLUBAIC01MzIsNyArNTM0LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiYWRkYwklMCwgJTEiKTsKLS0jbGluZSAyNTcgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAyNTkgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoYWRkYyk7IERSKEEpOyBTTShOb25lLCBTQUREUik7IEZ6YWM7Ci0gCi0gICAgICAgICB9Ci1AQCAtNTQ3LDcgKzU0OSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoImFkZGMJJTAsICMlMSIpOwotLSNsaW5lIDI0OCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDI1MCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChhZGRjKTsgRFIoQSk7IFNDKElNTVUoMSkpOyBGemFjOwotIAotICAgICAgICAgfQotQEAgLTU2Miw3ICs1NjQsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJhZGRjCSUwLCAlZTEiKTsKLS0jbGluZSAyMzYgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAyMzggInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoYWRkYyk7IERSKEEpOyBTTShITCwgMCk7IEZ6YWM7Ci0gCi0gICAgICAgICB9Ci1AQCAtNTc3LDcgKzU3OSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoImFkZGMJJTAsICVlYTEiKTsKLS0jbGluZSAyNDUgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAyNDcgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoYWRkYyk7IERSKEEpOyBTTShITCwgSU1NVSgxKSk7IEZ6YWM7Ci0gCi0gICAgICAgICB9Ci1AQCAtNTkyLDcgKzU5NCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoImFkZGMJJTAsICVlITEiKTsKLS0jbGluZSAyMzMgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAyMzUgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoYWRkYyk7IERSKEEpOyBTTShOb25lLCBJTU1VKDIpKTsgRnphYzsKLSAKLSAgICAgICAgIH0KLUBAIC02MDcsNyArNjA5LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgic3VidwklMCwgIyUxIik7Ci0tI2xpbmUgMTE5OCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEyMDAgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoc3ViKTsgVygpOyBEUihTUCk7IFNDKElNTVUoMSkpOyBGemFjOwotIAotICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLUBAIC02MjAsNyArNjIyLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICBjYXNlIDB4Mjc6Ci0gICAgICAgICB7Ci0gICAgICAgICAgIC8qKiAwMDEwIDBydzEJCQlzdWJ3CSUwLCAlMQkJCQkqLwotLSNsaW5lIDExOTIgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMTk0ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIGludCBydyBBVSA9IChvcFswXSA+PiAxKSAmIDB4MDM7Ci0gICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICB7Ci1AQCAtNjMwLDcgKzYzMiw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgIHByaW50ZiAoIiAgcncgPSAweCV4XG4iLCBydyk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoInN1YncJJTAsICUxIik7Ci0tI2xpbmUgMTE5MiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDExOTQgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoc3ViKTsgVygpOyBEUihBWCk7IFNSVyhydyk7IEZ6YWM7Ci0gCi0gICAgICAgICB9Ci1AQCAtNjQ1LDcgKzY0Nyw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoInN1YncJJTAsICVlITEiKTsKLS0jbGluZSAxMTgzICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTE4NSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChzdWIpOyBXKCk7IERSKEFYKTsgU00oTm9uZSwgSU1NVSgyKSk7IEZ6YWM7Ci0gCi0gICAgICAgICB9Ci1AQCAtNjYwLDcgKzY2Miw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoInN1YncJJTAsICMlMSIpOwotLSNsaW5lIDExODkgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMTkxICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKHN1Yik7IFcoKTsgRFIoQVgpOyBTQyhJTU1VKDIpKTsgRnphYzsKLSAKLSAgICAgICAgIH0KLUBAIC02NzUsNyArNjc3LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgic3VidwklMCwgJTEiKTsKLS0jbGluZSAxMTk1ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTE5NyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChzdWIpOyBXKCk7IERSKEFYKTsgU00oTm9uZSwgU0FERFIpOyBGemFjOwotIAotICAgICAgICAgfQotQEAgLTY5MCw3ICs2OTIsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJtb3YJJWUwLCAlMSIpOwotLSNsaW5lIDc0MSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDc0MyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBETShDLCBJTU1VKDIpKTsgU1IoQSk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNzA1LDcgKzcwNyw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdgklMCwgJWUxIik7Ci0tI2xpbmUgNjg0ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNjg2ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IERSKEEpOyBTTShDLCBJTU1VKDIpKTsKLSAKLSAgICAgICAgIH0KLUBAIC03MjAsNyArNzIyLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgic3ViCSUwLCAjJTEiKTsKLS0jbGluZSAxMTQ2ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTE0OCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChzdWIpOyBETShOb25lLCBTQUREUik7IFNDKElNTVUoMSkpOyBGemFjOwotIAotICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLUBAIC03MzcsNyArNzM5LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgic3ViCSUwLCAlMSIpOwotLSNsaW5lIDExNDAgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMTQyICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKHN1Yik7IERSKEEpOyBTTShOb25lLCBTQUREUik7IEZ6YWM7Ci0gCi0gICAgICAgICB9Ci1AQCAtNzUyLDcgKzc1NCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoInN1YgklMCwgIyUxIik7Ci0tI2xpbmUgMTEzNCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDExMzYgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoc3ViKTsgRFIoQSk7IFNDKElNTVUoMSkpOyBGemFjOwotIAotICAgICAgICAgfQotQEAgLTc2Nyw3ICs3NjksNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJzdWIJJTAsICVlMSIpOwotLSNsaW5lIDExMjIgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMTI0ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKHN1Yik7IERSKEEpOyBTTShITCwgMCk7IEZ6YWM7Ci0gCi0gICAgICAgICB9Ci1AQCAtNzgyLDcgKzc4NCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoInN1YgklMCwgJWVhMSIpOwotLSNsaW5lIDExMjggInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMTMwICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKHN1Yik7IERSKEEpOyBTTShITCwgSU1NVSgxKSk7IEZ6YWM7Ci0gCi0gICAgICAgICB9Ci1AQCAtNzk3LDcgKzc5OSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoInN1YgklMCwgJWUhMSIpOwotLSNsaW5lIDExMTkgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMTIxICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKHN1Yik7IERSKEEpOyBTTShOb25lLCBJTU1VKDIpKTsgRnphYzsKLSAKLSAgICAgICAgIH0KLUBAIC04MDgsNyArODEwLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICBjYXNlIDB4MzY6Ci0gICAgICAgICB7Ci0gICAgICAgICAgIC8qKiAwMDExIDByZzAJCQltb3Z3CSUwLCAjJTEJCQkJKi8KLS0jbGluZSA4NTMgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA4NTUgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgaW50IHJnIEFVID0gKG9wWzBdID4+IDEpICYgMHgwMzsKLSAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgIHsKLUBAIC04MTgsNyArODIwLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgcHJpbnRmICgiICByZyA9IDB4JXhcbiIsIHJnKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92dwklMCwgIyUxIik7Ci0tI2xpbmUgODUzICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgODU1ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IFcoKTsgRFJXKHJnKTsgU0MoSU1NVSgyKSk7Ci0gCi0gICAgICAgICB9Ci1AQCAtODMwLDcgKzgzMiw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgY2FzZSAweDAwOgotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAvKiogMDAxMSAwMDAxIDBiaXQgMDAwMAkJYnRjbHIJJXMxLCAkJWEwCQkJKi8KLS0jbGluZSA0MTYgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA0MTggInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IGJpdCBBVSA9IChvcFsxXSA+PiA0KSAmIDB4MDc7Ci0gICAgICAgICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICAgICAgICB7Ci1AQCAtODQwLDcgKzg0Miw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgYml0ID0gMHgleFxuIiwgYml0KTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgiYnRjbHIJJXMxLCAkJWEwIik7Ci0tI2xpbmUgNDE2ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNDE4ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKGJyYW5jaF9jb25kX2NsZWFyKTsgU00oTm9uZSwgU0FERFIpOyBTQihiaXQpOyBEQyhwYytJTU1TKDEpKzQpOyBDT05EKFQpOwotIAotICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLUBAIC04NTAsNyArODUyLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4MDE6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMDExIDAwMDEgMGJpdCAwMDAxCQlidGNscgklMSwgJCVhMAkJCSovCi0tI2xpbmUgNDEwICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNDEyICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIGludCBiaXQgQVUgPSAob3BbMV0gPj4gNCkgJiAweDA3OwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTg2MCw3ICs4NjIsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIGJpdCA9IDB4JXhcbiIsIGJpdCk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoImJ0Y2xyCSUxLCAkJWEwIik7Ci0tI2xpbmUgNDEwICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNDEyICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKGJyYW5jaF9jb25kX2NsZWFyKTsgREMocGMrSU1NUygxKSszKTsgU1IoQSk7IFNCKGJpdCk7IENPTkQoVCk7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtODY4LDcgKzg3MCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgY2FzZSAweDAyOgotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAvKiogMDAxMSAwMDAxIDBiaXQgMDAxMAkJYnQJJXMxLCAkJWEwCQkJKi8KLS0jbGluZSA0MDIgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA0MDQgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IGJpdCBBVSA9IChvcFsxXSA+PiA0KSAmIDB4MDc7Ci0gICAgICAgICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICAgICAgICB7Ci1AQCAtODc4LDcgKzg4MCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgYml0ID0gMHgleFxuIiwgYml0KTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgiYnQJJXMxLCAkJWEwIik7Ci0tI2xpbmUgNDAyICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNDA0ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKGJyYW5jaF9jb25kKTsgU00oTm9uZSwgU0FERFIpOyBTQihiaXQpOyBEQyhwYytJTU1TKDEpKzQpOyBDT05EKFQpOwotIAotICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLUBAIC04ODgsNyArODkwLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4MDM6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMDExIDAwMDEgMGJpdCAwMDExCQlidAklMSwgJCVhMAkJCSovCi0tI2xpbmUgMzk2ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMzk4ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIGludCBiaXQgQVUgPSAob3BbMV0gPj4gNCkgJiAweDA3OwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTg5OCw3ICs5MDAsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIGJpdCA9IDB4JXhcbiIsIGJpdCk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoImJ0CSUxLCAkJWEwIik7Ci0tI2xpbmUgMzk2ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMzk4ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKGJyYW5jaF9jb25kKTsgREMocGMrSU1NUygxKSszKTsgU1IoQSk7IFNCKGJpdCk7IENPTkQoVCk7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtOTA2LDcgKzkwOCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgY2FzZSAweDA0OgotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAvKiogMDAxMSAwMDAxIDBiaXQgMDEwMAkJYmYJJXMxLCAkJWEwCQkJKi8KLS0jbGluZSAzNjMgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAzNjUgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IGJpdCBBVSA9IChvcFsxXSA+PiA0KSAmIDB4MDc7Ci0gICAgICAgICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICAgICAgICB7Ci1AQCAtOTE2LDcgKzkxOCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgYml0ID0gMHgleFxuIiwgYml0KTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgiYmYJJXMxLCAkJWEwIik7Ci0tI2xpbmUgMzYzICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMzY1ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKGJyYW5jaF9jb25kKTsgU00oTm9uZSwgU0FERFIpOyBTQihiaXQpOyBEQyhwYytJTU1TKDEpKzQpOyBDT05EKEYpOwotIAotICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLUBAIC05MjYsNyArOTI4LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4MDU6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMDExIDAwMDEgMGJpdCAwMTAxCQliZgklMSwgJCVhMAkJCSovCi0tI2xpbmUgMzU3ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMzU5ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIGludCBiaXQgQVUgPSAob3BbMV0gPj4gNCkgJiAweDA3OwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTkzNiw3ICs5MzgsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIGJpdCA9IDB4JXhcbiIsIGJpdCk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoImJmCSUxLCAkJWEwIik7Ci0tI2xpbmUgMzU3ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMzU5ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKGJyYW5jaF9jb25kKTsgREMocGMrSU1NUygxKSszKTsgU1IoQSk7IFNCKGJpdCk7IENPTkQoRik7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtOTQ0LDcgKzk0Niw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgY2FzZSAweDA3OgotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAvKiogMDAxMSAwMDAxIDBjbnQgMDExMQkJc2hsCSUwLCAlMQkJCQkqLwotLSNsaW5lIDEwNzUgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMDc3ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIGludCBjbnQgQVUgPSAob3BbMV0gPj4gNCkgJiAweDA3OwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTk1NCw3ICs5NTYsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIGNudCA9IDB4JXhcbiIsIGNudCk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoInNobAklMCwgJTEiKTsKLS0jbGluZSAxMDc1ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTA3NyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChzaGwpOyBEUihDKTsgU0MoY250KTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC05NjIsNyArOTY0LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4MDg6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMDExIDAwMDEgMGNudCAxMDAwCQlzaGwJJTAsICUxCQkJCSovCi0tI2xpbmUgMTA3MiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEwNzQgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IGNudCBBVSA9IChvcFsxXSA+PiA0KSAmIDB4MDc7Ci0gICAgICAgICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICAgICAgICB7Ci1AQCAtOTcyLDcgKzk3NCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgY250ID0gMHgleFxuIiwgY250KTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgic2hsCSUwLCAlMSIpOwotLSNsaW5lIDEwNzIgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMDc0ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKHNobCk7IERSKEIpOyBTQyhjbnQpOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTk4MCw3ICs5ODIsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHgwOToKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAwMTEgMDAwMSAwY250IDEwMDEJCXNobAklMCwgJTEJCQkJKi8KLS0jbGluZSAxMDY5ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTA3MSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBpbnQgY250IEFVID0gKG9wWzFdID4+IDQpICYgMHgwNzsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC05OTAsNyArOTkyLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiICBjbnQgPSAweCV4XG4iLCBjbnQpOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJzaGwJJTAsICUxIik7Ci0tI2xpbmUgMTA2OSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEwNzEgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoc2hsKTsgRFIoQSk7IFNDKGNudCk7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtOTk4LDcgKzEwMDAsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHgwYToKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAwMTEgMDAwMSAwY250IDEwMTAJCXNocgklMCwgJTEJCQkJKi8KLS0jbGluZSAxMDg2ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTA4OCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBpbnQgY250IEFVID0gKG9wWzFdID4+IDQpICYgMHgwNzsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC0xMDA4LDcgKzEwMTAsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIGNudCA9IDB4JXhcbiIsIGNudCk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoInNocgklMCwgJTEiKTsKLS0jbGluZSAxMDg2ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTA4OCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChzaHIpOyBEUihBKTsgU0MoY250KTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0xMDE2LDcgKzEwMTgsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHgwYjoKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAwMTEgMDAwMSAwY250IDEwMTEJCXNhcgklMCwgJTEJCQkJKi8KLS0jbGluZSAxMDMzICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTAzNSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBpbnQgY250IEFVID0gKG9wWzFdID4+IDQpICYgMHgwNzsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC0xMDI2LDcgKzEwMjgsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIGNudCA9IDB4JXhcbiIsIGNudCk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoInNhcgklMCwgJTEiKTsKLS0jbGluZSAxMDMzICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTAzNSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChzYXIpOyBEUihBKTsgU0MoY250KTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0xMDM1LDcgKzEwMzcsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHg4YzoKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAwMTEgMDAwMSB3Y250IDExMDAJCXNobHcJJTAsICUxCQkJCSovCi0tI2xpbmUgMTA4MSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEwODMgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IHdjbnQgQVUgPSAob3BbMV0gPj4gNCkgJiAweDBmOwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTEwNDUsNyArMTA0Nyw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgd2NudCA9IDB4JXhcbiIsIHdjbnQpOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJzaGx3CSUwLCAlMSIpOwotLSNsaW5lIDEwODEgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMDgzICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKHNobCk7IFcoKTsgRFIoQkMpOyBTQyh3Y250KTsKLSAKLSAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1AQCAtMTA1Niw3ICsxMDU4LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4OGQ6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMDExIDAwMDEgd2NudCAxMTAxCQlzaGx3CSUwLCAlMQkJCQkqLwotLSNsaW5lIDEwNzggInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMDgwICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIGludCB3Y250IEFVID0gKG9wWzFdID4+IDQpICYgMHgwZjsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC0xMDY2LDcgKzEwNjgsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIHdjbnQgPSAweCV4XG4iLCB3Y250KTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgic2hsdwklMCwgJTEiKTsKLS0jbGluZSAxMDc4ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTA4MCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChzaGwpOyBXKCk7IERSKEFYKTsgU0Mod2NudCk7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMTA3NSw3ICsxMDc3LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4OGU6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMDExIDAwMDEgd2NudCAxMTEwCQlzaHJ3CSUwLCAlMQkJCQkqLwotLSNsaW5lIDEwODkgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMDkxICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIGludCB3Y250IEFVID0gKG9wWzFdID4+IDQpICYgMHgwZjsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC0xMDg1LDcgKzEwODcsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIHdjbnQgPSAweCV4XG4iLCB3Y250KTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgic2hydwklMCwgJTEiKTsKLS0jbGluZSAxMDg5ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTA5MSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChzaHIpOyBXKCk7IERSKEFYKTsgU0Mod2NudCk7Ci0gCi0gICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotQEAgLTEwOTYsNyArMTA5OCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgY2FzZSAweDhmOgotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAvKiogMDAxMSAwMDAxIHdjbnQgMTExMQkJc2FydwklMCwgJTEJCQkJKi8KLS0jbGluZSAxMDM2ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTAzOCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBpbnQgd2NudCBBVSA9IChvcFsxXSA+PiA0KSAmIDB4MGY7Ci0gICAgICAgICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICAgICAgICB7Ci1AQCAtMTEwNiw3ICsxMTA4LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiICB3Y250ID0gMHgleFxuIiwgd2NudCk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoInNhcncJJTAsICUxIik7Ci0tI2xpbmUgMTAzNiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEwMzggInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoc2FyKTsgVygpOyBEUihBWCk7IFNDKHdjbnQpOwotIAotICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLUBAIC0xMTE2LDcgKzExMTgsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHg4MDoKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAwMTEgMDAwMSAxYml0IDAwMDAJCWJ0Y2xyCSVzMSwgJCVhMAkJCSovCi0tI2xpbmUgNDEzICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNDE1ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIGludCBiaXQgQVUgPSAob3BbMV0gPj4gNCkgJiAweDA3OwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTExMjYsNyArMTEyOCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgYml0ID0gMHgleFxuIiwgYml0KTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgiYnRjbHIJJXMxLCAkJWEwIik7Ci0tI2xpbmUgNDEzICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNDE1ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKGJyYW5jaF9jb25kX2NsZWFyKTsgU00oTm9uZSwgU0ZSKTsgU0IoYml0KTsgREMocGMrSU1NUygxKSs0KTsgQ09ORChUKTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0xMTM0LDcgKzExMzYsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHg4MToKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAwMTEgMDAwMSAxYml0IDAwMDEJCWJ0Y2xyCSVlMSwgJCVhMAkJCSovCi0tI2xpbmUgNDA3ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNDA5ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIGludCBiaXQgQVUgPSAob3BbMV0gPj4gNCkgJiAweDA3OwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTExNDQsNyArMTE0Niw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgYml0ID0gMHgleFxuIiwgYml0KTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgiYnRjbHIJJWUxLCAkJWEwIik7Ci0tI2xpbmUgNDA3ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNDA5ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKGJyYW5jaF9jb25kX2NsZWFyKTsgREMocGMrSU1NUygxKSszKTsgU00oSEwsMCk7IFNCKGJpdCk7IENPTkQoVCk7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMTE1Miw3ICsxMTU0LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4ODI6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMDExIDAwMDEgMWJpdCAwMDEwCQlidAklczEsICQlYTAJCQkqLwotLSNsaW5lIDM5OSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDQwMSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBpbnQgYml0IEFVID0gKG9wWzFdID4+IDQpICYgMHgwNzsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC0xMTYyLDcgKzExNjQsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIGJpdCA9IDB4JXhcbiIsIGJpdCk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoImJ0CSVzMSwgJCVhMCIpOwotLSNsaW5lIDM5OSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDQwMSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChicmFuY2hfY29uZCk7IFNNKE5vbmUsIFNGUik7IFNCKGJpdCk7IERDKHBjK0lNTVMoMSkrNCk7IENPTkQoVCk7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMTE3MCw3ICsxMTcyLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4ODM6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMDExIDAwMDEgMWJpdCAwMDExCQlidAklZTEsICQlYTAJCQkqLwotLSNsaW5lIDM5MyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDM5NSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBpbnQgYml0IEFVID0gKG9wWzFdID4+IDQpICYgMHgwNzsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC0xMTgwLDcgKzExODIsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIGJpdCA9IDB4JXhcbiIsIGJpdCk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoImJ0CSVlMSwgJCVhMCIpOwotLSNsaW5lIDM5MyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDM5NSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChicmFuY2hfY29uZCk7IERDKHBjK0lNTVMoMSkrMyk7IFNNKEhMLDApOyBTQihiaXQpOyBDT05EKFQpOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTExODgsNyArMTE5MCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgY2FzZSAweDg0OgotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAvKiogMDAxMSAwMDAxIDFiaXQgMDEwMAkJYmYJJXMxLCAkJWEwCQkJKi8KLS0jbGluZSAzNjAgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAzNjIgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IGJpdCBBVSA9IChvcFsxXSA+PiA0KSAmIDB4MDc7Ci0gICAgICAgICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICAgICAgICB7Ci1AQCAtMTE5OCw3ICsxMjAwLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiICBiaXQgPSAweCV4XG4iLCBiaXQpOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJiZgklczEsICQlYTAiKTsKLS0jbGluZSAzNjAgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAzNjIgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoYnJhbmNoX2NvbmQpOyBTTShOb25lLCBTRlIpOyBTQihiaXQpOyBEQyhwYytJTU1TKDEpKzQpOyBDT05EKEYpOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTEyMDYsNyArMTIwOCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgY2FzZSAweDg1OgotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAvKiogMDAxMSAwMDAxIDFiaXQgMDEwMQkJYmYJJWUxLCAkJWEwCQkJKi8KLS0jbGluZSAzNTQgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAzNTYgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IGJpdCBBVSA9IChvcFsxXSA+PiA0KSAmIDB4MDc7Ci0gICAgICAgICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICAgICAgICB7Ci1AQCAtMTIxNiw3ICsxMjE4LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiICBiaXQgPSAweCV4XG4iLCBiaXQpOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJiZgklZTEsICQlYTAiKTsKLS0jbGluZSAzNTQgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAzNTYgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoYnJhbmNoX2NvbmQpOyBEQyhwYytJTU1TKDEpKzMpOyBTTShITCwwKTsgU0IoYml0KTsgQ09ORChGKTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0xMjI5LDcgKzEyMzEsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgIGNhc2UgMHgzNzoKLSAgICAgICAgIHsKLSAgICAgICAgICAgLyoqIDAwMTEgMHJhMQkJCXhjaHcJJTAsICUxCQkJCSovCi0tI2xpbmUgMTIzOSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEyNDEgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgaW50IHJhIEFVID0gKG9wWzBdID4+IDEpICYgMHgwMzsKLSAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgIHsKLUBAIC0xMjM5LDcgKzEyNDEsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICBwcmludGYgKCIgIHJhID0gMHgleFxuIiwgcmEpOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJ4Y2h3CSUwLCAlMSIpOwotLSNsaW5lIDEyMzkgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMjQxICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKHhjaCk7IFcoKTsgRFIoQVgpOyBTUlcocmEpOwotIAotICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLUBAIC0xMjU2LDcgKzEyNTgsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJtb3YJJWUwLCAjJTEiKTsKLS0jbGluZSA3MzggInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA3NDAgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQobW92KTsgRE0oQywgSU1NVSgyKSk7IFNDKElNTVUoMSkpOwotIAotICAgICAgICAgfQotQEAgLTEyNzEsNyArMTI3Myw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdgklZTAsICMlMSIpOwotLSNsaW5lIDczMiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDczNCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBETShCQywgSU1NVSgyKSk7IFNDKElNTVUoMSkpOwotIAotICAgICAgICAgfQotQEAgLTEyODYsNyArMTI4OCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoInN1YmMJJTAsICMlMSIpOwotLSNsaW5lIDExNzggInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMTgwICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKHN1YmMpOyBETShOb25lLCBTQUREUik7IFNDKElNTVUoMSkpOyBGemFjOwotIAotICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLUBAIC0xMzAzLDcgKzEzMDUsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJzdWJjCSUwLCAlMSIpOwotLSNsaW5lIDExNzUgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMTc3ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKHN1YmMpOyBEUihBKTsgU00oTm9uZSwgU0FERFIpOyBGemFjOwotIAotICAgICAgICAgfQotQEAgLTEzMTgsNyArMTMyMCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoInN1YmMJJTAsICMlMSIpOwotLSNsaW5lIDExNjYgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMTY4ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKHN1YmMpOyBEUihBKTsgU0MoSU1NVSgxKSk7IEZ6YWM7Ci0gCi0gICAgICAgICB9Ci1AQCAtMTMzMyw3ICsxMzM1LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgic3ViYwklMCwgJWUxIik7Ci0tI2xpbmUgMTE1NCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDExNTYgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoc3ViYyk7IERSKEEpOyBTTShITCwgMCk7IEZ6YWM7Ci0gCi0gICAgICAgICB9Ci1AQCAtMTM0OCw3ICsxMzUwLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgic3ViYwklMCwgJWVhMSIpOwotLSNsaW5lIDExNjMgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMTY1ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKHN1YmMpOyBEUihBKTsgU00oSEwsIElNTVUoMSkpOyBGemFjOwotIAotICAgICAgICAgfQotQEAgLTEzNjMsNyArMTM2NSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoInN1YmMJJTAsICVlITEiKTsKLS0jbGluZSAxMTUxICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTE1MyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChzdWJjKTsgRFIoQSk7IFNNKE5vbmUsIElNTVUoMikpOyBGemFjOwotIAotICAgICAgICAgfQotQEAgLTEzNzgsNyArMTM4MCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoImNtcAklZSEwLCAjJTEiKTsKLS0jbGluZSA0ODAgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA0ODIgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoY21wKTsgRE0oTm9uZSwgSU1NVSgyKSk7IFNDKElNTVUoMSkpOyBGemFjOwotIAotICAgICAgICAgfQotQEAgLTEzOTMsNyArMTM5NSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdgklMCwgIyUxIik7Ci0tI2xpbmUgNzE3ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNzE5ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IERSKEVTKTsgU0MoSU1NVSgxKSk7Ci0gCi0gICAgICAgICB9Ci1AQCAtMTQwOCw3ICsxNDEwLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiY21wdwklMCwgJWUhMSIpOwotLSNsaW5lIDUzMSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDUzMyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChjbXApOyBXKCk7IERSKEFYKTsgU00oTm9uZSwgSU1NVSgyKSk7IEZ6YWM7Ci0gCi0gICAgICAgICB9Ci1AQCAtMTQxOCw3ICsxNDIwLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICBjYXNlIDB4NDc6Ci0gICAgICAgICB7Ci0gICAgICAgICAgIC8qKiAwMTAwIDByYTEJCQljbXB3CSUwLCAlMQkJCQkqLwotLSNsaW5lIDU0MCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDU0MiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBpbnQgcmEgQVUgPSAob3BbMF0gPj4gMSkgJiAweDAzOwotICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgewotQEAgLTE0MjgsNyArMTQzMCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgIHByaW50ZiAoIiAgcmEgPSAweCV4XG4iLCByYSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoImNtcHcJJTAsICUxIik7Ci0tI2xpbmUgNTQwICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNTQyICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKGNtcCk7IFcoKTsgRFIoQVgpOyBTUlcocmEpOyBGemFjOwotIAotICAgICAgICAgfQotQEAgLTE0NDMsNyArMTQ0NSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoImNtcHcJJTAsICMlMSIpOwotLSNsaW5lIDUzNyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDUzOSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChjbXApOyBXKCk7IERSKEFYKTsgU0MoSU1NVSgyKSk7IEZ6YWM7Ci0gCi0gICAgICAgICB9Ci1AQCAtMTQ1OCw3ICsxNDYwLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiY21wdwklMCwgJTEiKTsKLS0jbGluZSA1NDMgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA1NDUgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoY21wKTsgVygpOyBEUihBWCk7IFNNKE5vbmUsIFNBRERSKTsgRnphYzsKLSAKLSAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1AQCAtMTQ3NSw3ICsxNDc3LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92CSVlMCwgJTEiKTsKLS0jbGluZSA3MzUgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA3MzcgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQobW92KTsgRE0oQkMsIElNTVUoMikpOyBTUihBKTsKLSAKLSAgICAgICAgIH0KLUBAIC0xNDkwLDcgKzE0OTIsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJtb3YJJTAsICVlMSIpOwotLSNsaW5lIDY4MSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDY4MyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBEUihBKTsgU00oQkMsIElNTVUoMikpOwotIAotICAgICAgICAgfQotQEAgLTE1MDUsNyArMTUwNyw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoImNtcAklMCwgIyUxIik7Ci0tI2xpbmUgNDgzICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNDg1ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKGNtcCk7IERNKE5vbmUsIFNBRERSKTsgU0MoSU1NVSgxKSk7IEZ6YWM7Ci0gCi0gICAgICAgICB9Ci1AQCAtMTUyMCw3ICsxNTIyLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiY21wCSUwLCAlMSIpOwotLSNsaW5lIDUxMCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDUxMiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChjbXApOyBEUihBKTsgU00oTm9uZSwgU0FERFIpOyBGemFjOwotIAotICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLUBAIC0xNTM3LDcgKzE1MzksNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJjbXAJJTAsICMlMSIpOwotLSNsaW5lIDUwMSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDUwMyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChjbXApOyBEUihBKTsgU0MoSU1NVSgxKSk7IEZ6YWM7Ci0gCi0gICAgICAgICB9Ci1AQCAtMTU1Miw3ICsxNTU0LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiY21wCSUwLCAlZTEiKTsKLS0jbGluZSA0ODkgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA0OTEgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoY21wKTsgRFIoQSk7IFNNKEhMLCAwKTsgRnphYzsKLSAKLSAgICAgICAgIH0KLUBAIC0xNTY3LDcgKzE1NjksNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJjbXAJJTAsICVlYTEiKTsKLS0jbGluZSA0OTggInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA1MDAgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoY21wKTsgRFIoQSk7IFNNKEhMLCBJTU1VKDEpKTsgRnphYzsKLSAKLSAgICAgICAgIH0KLUBAIC0xNTgyLDcgKzE1ODQsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJjbXAJJTAsICVlITEiKTsKLS0jbGluZSA0ODYgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA0ODggInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoY21wKTsgRFIoQSk7IFNNKE5vbmUsIElNTVUoMikpOyBGemFjOwotIAotICAgICAgICAgfQotQEAgLTE1OTcsNyArMTU5OSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgY2FzZSAweDU3OgotICAgICAgICAgewotICAgICAgICAgICAvKiogMDEwMSAwcmVnCQkJbW92CSUwLCAjJTEJCQkJKi8KLS0jbGluZSA2NjkgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA2NzEgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgaW50IHJlZyBBVSA9IG9wWzBdICYgMHgwNzsKLSAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgIHsKLUBAIC0xNjA3LDcgKzE2MDksNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICBwcmludGYgKCIgIHJlZyA9IDB4JXhcbiIsIHJlZyk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdgklMCwgIyUxIik7Ci0tI2xpbmUgNjY5ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNjcxICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IERSQihyZWcpOyBTQyhJTU1VKDEpKTsKLSAKLSAgICAgICAgIH0KLUBAIC0xNjIyLDcgKzE2MjQsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJtb3Z3CSVlMCwgJTEiKTsKLS0jbGluZSA4NzEgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA4NzMgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQobW92KTsgVygpOyBETShCLCBJTU1VKDIpKTsgU1IoQVgpOwotIAotICAgICAgICAgfQotQEAgLTE2MzcsNyArMTYzOSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdncJJTAsICVlMSIpOwotLSNsaW5lIDg2MiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDg2NCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBXKCk7IERSKEFYKTsgU00oQiwgSU1NVSgyKSk7Ci0gCi0gICAgICAgICB9Ci1AQCAtMTY1Miw3ICsxNjU0LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiYW5kCSUwLCAjJTEiKTsKLS0jbGluZSAzMTIgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAzMTQgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoYW5kKTsgRE0oTm9uZSwgU0FERFIpOyBTQyhJTU1VKDEpKTsgRno7Ci0gCi0gICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotQEAgLTE2NjksNyArMTY3MSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoImFuZAklMCwgJTEiKTsKLS0jbGluZSAzMDkgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAzMTEgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoYW5kKTsgRFIoQSk7IFNNKE5vbmUsIFNBRERSKTsgRno7Ci0gCi0gICAgICAgICB9Ci1AQCAtMTY4NCw3ICsxNjg2LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiYW5kCSUwLCAjJTEiKTsKLS0jbGluZSAzMDAgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAzMDIgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoYW5kKTsgRFIoQSk7IFNDKElNTVUoMSkpOyBGejsKLSAKLSAgICAgICAgIH0KLUBAIC0xNjk5LDcgKzE3MDEsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJhbmQJJTAsICVlMSIpOwotLSNsaW5lIDI4OCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDI5MCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChhbmQpOyBEUihBKTsgU00oSEwsIDApOyBGejsKLSAKLSAgICAgICAgIH0KLUBAIC0xNzE0LDcgKzE3MTYsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJhbmQJJTAsICVlYTEiKTsKLS0jbGluZSAyOTQgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAyOTYgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoYW5kKTsgRFIoQSk7IFNNKEhMLCBJTU1VKDEpKTsgRno7Ci0gCi0gICAgICAgICB9Ci1AQCAtMTcyOSw3ICsxNzMxLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiYW5kCSUwLCAlZSExIik7Ci0tI2xpbmUgMjg1ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMjg3ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKGFuZCk7IERSKEEpOyBTTShOb25lLCBJTU1VKDIpKTsgRno7Ci0gCi0gICAgICAgICB9Ci1AQCAtMTc0Myw3ICsxNzQ1LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICBjYXNlIDB4Njc6Ci0gICAgICAgICB7Ci0gICAgICAgICAgIC8qKiAwMTEwIDByYmEJCQltb3YJJTAsICUxCQkJCSovCi0tI2xpbmUgNjcyICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNjc0ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIGludCByYmEgQVUgPSBvcFswXSAmIDB4MDc7Ci0gICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICB7Ci1AQCAtMTc1Myw3ICsxNzU1LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgcHJpbnRmICgiICByYmEgPSAweCV4XG4iLCByYmEpOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJtb3YJJTAsICUxIik7Ci0tI2xpbmUgNjcyICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNjc0ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IERSKEEpOyBTUkIocmJhKTsKLSAKLSAgICAgICAgIH0KLUBAIC0xNzcyLDcgKzE3NzQsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHgwNzoKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAxMTAgMDAwMSAwMDAwIDByZWcJCWFkZAklMCwgJTEJCQkJKi8KLS0jbGluZSAyMjUgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAyMjcgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IHJlZyBBVSA9IG9wWzFdICYgMHgwNzsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC0xNzgyLDcgKzE3ODQsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIHJlZyA9IDB4JXhcbiIsIHJlZyk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoImFkZAklMCwgJTEiKTsKLS0jbGluZSAyMjUgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAyMjcgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoYWRkKTsgRFJCKHJlZyk7IFNSKEEpOyBGemFjOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTE3OTYsNyArMTc5OCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgY2FzZSAweDBmOgotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAvKiogMDExMCAwMDAxIDAwMDAgMXJiYQkJYWRkCSUwLCAlMQkJCQkqLwotLSNsaW5lIDIxOSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDIyMSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBpbnQgcmJhIEFVID0gb3BbMV0gJiAweDA3OwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTE4MDYsNyArMTgwOCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgcmJhID0gMHgleFxuIiwgcmJhKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgiYWRkCSUwLCAlMSIpOwotLSNsaW5lIDIxOSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDIyMSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChhZGQpOyBEUihBKTsgU1JCKHJiYSk7IEZ6YWM7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMTgyMSw3ICsxODIzLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wWzBdLCBvcFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoImFkZHcJJTAsICVlYTEiKTsKLS0jbGluZSAyNjggInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAyNzAgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoYWRkKTsgVygpOyBEUihBWCk7IFNNKEhMLCBJTU1VKDEpKTsgRnphYzsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0xODM2LDcgKzE4MzgsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHgxNzoKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAxMTAgMDAwMSAwMDAxIDByZWcJCWFkZGMJJTAsICUxCQkJCSovCi0tI2xpbmUgMjU0ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMjU2ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIGludCByZWcgQVUgPSBvcFsxXSAmIDB4MDc7Ci0gICAgICAgICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICAgICAgICB7Ci1AQCAtMTg0Niw3ICsxODQ4LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiICByZWcgPSAweCV4XG4iLCByZWcpOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJhZGRjCSUwLCAlMSIpOwotLSNsaW5lIDI1NCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDI1NiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChhZGRjKTsgRFJCKHJlZyk7IFNSKEEpOyBGemFjOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTE4NjAsNyArMTg2Miw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgY2FzZSAweDFmOgotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAvKiogMDExMCAwMDAxIDAwMDEgMXJiYQkJYWRkYwklMCwgJTEJCQkJKi8KLS0jbGluZSAyNTEgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAyNTMgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IHJiYSBBVSA9IG9wWzFdICYgMHgwNzsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC0xODcwLDcgKzE4NzIsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIHJiYSA9IDB4JXhcbiIsIHJiYSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoImFkZGMJJTAsICUxIik7Ci0tI2xpbmUgMjUxICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMjUzICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKGFkZGMpOyBEUihBKTsgU1JCKHJiYSk7IEZ6YWM7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMTg4NSw3ICsxODg3LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4Mjc6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMTEwIDAwMDEgMDAxMCAwcmVnCQlzdWIJJTAsICUxCQkJCSovCi0tI2xpbmUgMTE0MyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDExNDUgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IHJlZyBBVSA9IG9wWzFdICYgMHgwNzsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC0xODk1LDcgKzE4OTcsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIHJlZyA9IDB4JXhcbiIsIHJlZyk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoInN1YgklMCwgJTEiKTsKLS0jbGluZSAxMTQzICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTE0NSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChzdWIpOyBEUkIocmVnKTsgU1IoQSk7IEZ6YWM7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMTkwOSw3ICsxOTExLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4MmY6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMTEwIDAwMDEgMDAxMCAxcmJhCQlzdWIJJTAsICUxCQkJCSovCi0tI2xpbmUgMTEzNyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDExMzkgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IHJiYSBBVSA9IG9wWzFdICYgMHgwNzsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC0xOTE5LDcgKzE5MjEsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIHJiYSA9IDB4JXhcbiIsIHJiYSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoInN1YgklMCwgJTEiKTsKLS0jbGluZSAxMTM3ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTEzOSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChzdWIpOyBEUihBKTsgU1JCKHJiYSk7IEZ6YWM7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMTkzNCw3ICsxOTM2LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wWzBdLCBvcFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoInN1YncJJTAsICVlYTEiKTsKLS0jbGluZSAxMTg2ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTE4OCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChzdWIpOyBXKCk7IERSKEFYKTsgU00oSEwsIElNTVUoMSkpOyBGemFjOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTE5NDksNyArMTk1MSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgY2FzZSAweDM3OgotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAvKiogMDExMCAwMDAxIDAwMTEgMHJlZwkJc3ViYwklMCwgJTEJCQkJKi8KLS0jbGluZSAxMTcyICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTE3NCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBpbnQgcmVnIEFVID0gb3BbMV0gJiAweDA3OwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTE5NTksNyArMTk2MSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgcmVnID0gMHgleFxuIiwgcmVnKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgic3ViYwklMCwgJTEiKTsKLS0jbGluZSAxMTcyICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTE3NCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChzdWJjKTsgRFJCKHJlZyk7IFNSKEEpOyBGemFjOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTE5NzMsNyArMTk3NSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgY2FzZSAweDNmOgotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAvKiogMDExMCAwMDAxIDAwMTEgMXJiYQkJc3ViYwklMCwgJTEJCQkJKi8KLS0jbGluZSAxMTY5ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTE3MSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBpbnQgcmJhIEFVID0gb3BbMV0gJiAweDA3OwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTE5ODMsNyArMTk4NSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgcmJhID0gMHgleFxuIiwgcmJhKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgic3ViYwklMCwgJTEiKTsKLS0jbGluZSAxMTY5ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTE3MSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChzdWJjKTsgRFIoQSk7IFNSQihyYmEpOyBGemFjOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTE5OTgsNyArMjAwMCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgY2FzZSAweDQ3OgotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAvKiogMDExMCAwMDAxIDAxMDAgMHJlZwkJY21wCSUwLCAlMQkJCQkqLwotLSNsaW5lIDUwNyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDUwOSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBpbnQgcmVnIEFVID0gb3BbMV0gJiAweDA3OwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTIwMDgsNyArMjAxMCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgcmVnID0gMHgleFxuIiwgcmVnKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgiY21wCSUwLCAlMSIpOwotLSNsaW5lIDUwNyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDUwOSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChjbXApOyBEUkIocmVnKTsgU1IoQSk7IEZ6YWM7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMjAyMiw3ICsyMDI0LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4NGY6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMTEwIDAwMDEgMDEwMCAxcmJhCQljbXAJJTAsICUxCQkJCSovCi0tI2xpbmUgNTA0ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNTA2ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIGludCByYmEgQVUgPSBvcFsxXSAmIDB4MDc7Ci0gICAgICAgICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICAgICAgICB7Ci1AQCAtMjAzMiw3ICsyMDM0LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiICByYmEgPSAweCV4XG4iLCByYmEpOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJjbXAJJTAsICUxIik7Ci0tI2xpbmUgNTA0ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNTA2ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKGNtcCk7IERSKEEpOyBTUkIocmJhKTsgRnphYzsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0yMDQ3LDcgKzIwNDksNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BbMF0sIG9wWzFdKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgiY21wdwklMCwgJWVhMSIpOwotLSNsaW5lIDUzNCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDUzNiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChjbXApOyBXKCk7IERSKEFYKTsgU00oSEwsIElNTVUoMSkpOyBGemFjOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTIwNjIsNyArMjA2NCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgY2FzZSAweDU3OgotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAvKiogMDExMCAwMDAxIDAxMDEgMHJlZwkJYW5kCSUwLCAlMQkJCQkqLwotLSNsaW5lIDMwNiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDMwOCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBpbnQgcmVnIEFVID0gb3BbMV0gJiAweDA3OwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTIwNzIsNyArMjA3NCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgcmVnID0gMHgleFxuIiwgcmVnKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgiYW5kCSUwLCAlMSIpOwotLSNsaW5lIDMwNiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDMwOCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChhbmQpOyBEUkIocmVnKTsgU1IoQSk7IEZ6OwotIAotICAgICAgICAgICAgICAgfQotQEAgLTIwODYsNyArMjA4OCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgY2FzZSAweDVmOgotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAvKiogMDExMCAwMDAxIDAxMDEgMXJiYQkJYW5kCSUwLCAlMQkJCQkqLwotLSNsaW5lIDMwMyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDMwNSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBpbnQgcmJhIEFVID0gb3BbMV0gJiAweDA3OwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTIwOTYsNyArMjA5OCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgcmJhID0gMHgleFxuIiwgcmJhKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgiYW5kCSUwLCAlMSIpOwotLSNsaW5lIDMwMyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDMwNSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChhbmQpOyBEUihBKTsgU1JCKHJiYSk7IEZ6OwotIAotICAgICAgICAgICAgICAgfQotQEAgLTIxMTEsNyArMjExMyw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJpbmMJJWVhMCIpOwotLSNsaW5lIDU4NCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDU4NiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChhZGQpOyBETShITCwgSU1NVSgxKSk7IFNDKDEpOyBGemE7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMjEyNiw3ICsyMTI4LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4Njc6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMTEwIDAwMDEgMDExMCAwcmVnCQlvcgklMCwgJTEJCQkJKi8KLS0jbGluZSA5NjEgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA5NjMgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IHJlZyBBVSA9IG9wWzFdICYgMHgwNzsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC0yMTM2LDcgKzIxMzgsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIHJlZyA9IDB4JXhcbiIsIHJlZyk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoIm9yCSUwLCAlMSIpOwotLSNsaW5lIDk2MSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDk2MyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChvcik7IERSQihyZWcpOyBTUihBKTsgRno7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMjE1MCw3ICsyMTUyLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4NmY6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMTEwIDAwMDEgMDExMCAxcmJhCQlvcgklMCwgJTEJCQkJKi8KLS0jbGluZSA5NTggInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA5NjAgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IHJiYSBBVSA9IG9wWzFdICYgMHgwNzsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC0yMTYwLDcgKzIxNjIsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIHJiYSA9IDB4JXhcbiIsIHJiYSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoIm9yCSUwLCAlMSIpOwotLSNsaW5lIDk1OCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDk2MCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChvcik7IERSKEEpOyBTUkIocmJhKTsgRno7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMjE3NSw3ICsyMTc3LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wWzBdLCBvcFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoImRlYwklZWEwIik7Ci0tI2xpbmUgNTUxICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNTUzICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKHN1Yik7IERNKEhMLCBJTU1VKDEpKTsgU0MoMSk7IEZ6YTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0yMTkwLDcgKzIxOTIsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHg3NzoKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAxMTAgMDAwMSAwMTExIDByZWcJCXhvcgklMCwgJTEJCQkJKi8KLS0jbGluZSAxMjY1ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTI2NyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBpbnQgcmVnIEFVID0gb3BbMV0gJiAweDA3OwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTIyMDAsNyArMjIwMiw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgcmVnID0gMHgleFxuIiwgcmVnKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgieG9yCSUwLCAlMSIpOwotLSNsaW5lIDEyNjUgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMjY3ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKHhvcik7IERSQihyZWcpOyBTUihBKTsgRno7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMjIxNCw3ICsyMjE2LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4N2Y6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMTEwIDAwMDEgMDExMSAxcmJhCQl4b3IJJTAsICUxCQkJCSovCi0tI2xpbmUgMTI2MiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEyNjQgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IHJiYSBBVSA9IG9wWzFdICYgMHgwNzsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC0yMjI0LDcgKzIyMjYsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIHJiYSA9IDB4JXhcbiIsIHJiYSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoInhvcgklMCwgJTEiKTsKLS0jbGluZSAxMjYyICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTI2NCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRCh4b3IpOyBEUihBKTsgU1JCKHJiYSk7IEZ6OwotIAotICAgICAgICAgICAgICAgfQotQEAgLTIyMzksNyArMjI0MSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJpbmN3CSVlYTAiKTsKLS0jbGluZSA1OTggInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA2MDAgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoYWRkKTsgVygpOyBETShITCwgSU1NVSgxKSk7IFNDKDEpOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTIyNTUsNyArMjI1Nyw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJhZGQJJTAsICVlMSIpOwotLSNsaW5lIDIwNyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDIwOSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChhZGQpOyBEUihBKTsgU00yKEhMLCBCLCAwKTsgRnphYzsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0yMjcwLDcgKzIyNzIsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BbMF0sIG9wWzFdKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgiYWRkCSUwLCAlZTEiKTsKLS0jbGluZSAyMTMgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAyMTUgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoYWRkKTsgRFIoQSk7IFNNMihITCwgQywgMCk7IEZ6YWM7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMjMwOSw5ICsyMzExLDkgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4Zjc6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMTEwIDAwMDEgMW5ubiAwMW1tCQljYWxsdAlbJXgwXQkJCQkqLwotLSNsaW5lIDQzMyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDQzNSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBpbnQgbm5uIEFVID0gKG9wWzFdID4+IDQpICYgMHgwNzsKLS0jbGluZSA0MzMgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA0MzUgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IG1tIEFVID0gb3BbMV0gJiAweDAzOwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTIzMjIsNyArMjMyNCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgbW0gPSAweCV4XG4iLCBtbSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoImNhbGx0CVsleDBdIik7Ci0tI2xpbmUgNDMzICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNDM1ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKGNhbGwpOyBETShOb25lLCAweDgwICsgbW0qMTYgKyBubm4qMik7Ci0gCi0gICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotQEAgLTIzMzgsNyArMjM0MCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgY2FzZSAweDhmOgotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAvKiogMDExMCAwMDAxIDEwMDAgMXJlZwkJeGNoCSUwLCAlMQkJCQkqLwotLSNsaW5lIDEyMjQgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMjI2ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIGludCByZWcgQVUgPSBvcFsxXSAmIDB4MDc7Ci0gICAgICAgICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICAgICAgICB7Ci1AQCAtMjM0OCw3ICsyMzUwLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiICByZWcgPSAweCV4XG4iLCByZWcpOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJ4Y2gJJTAsICUxIik7Ci0tI2xpbmUgMTIyNCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEyMjYgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgLyogTm90ZTogREVDVyB1c2VzIHJlZyA9PSBYLCBzbyB0aGlzIG11c3QgZm9sbG93IERFQ1cgKi8KLSAgICAgICAgICAgICAgICAgSUQoeGNoKTsgRFIoQSk7IFNSQihyZWcpOwotIAotQEAgLTIzNjQsNyArMjM2Niw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJkZWN3CSVlYTAiKTsKLS0jbGluZSA1NjUgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA1NjcgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoc3ViKTsgVygpOyBETShITCwgSU1NVSgxKSk7IFNDKDEpOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTIzNzksNyArMjM4MSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJhZGRjCSUwLCAlZTEiKTsKLS0jbGluZSAyMzkgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAyNDEgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoYWRkYyk7IERSKEEpOyBTTTIoSEwsIEIsIDApOyBGemFjOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTIzOTQsNyArMjM5Niw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJhZGRjCSUwLCAlZTEiKTsKLS0jbGluZSAyNDIgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAyNDQgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoYWRkYyk7IERSKEEpOyBTTTIoSEwsIEMsIDApOyBGemFjOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTI0MTAsNyArMjQxMiw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJzdWIJJTAsICVlMSIpOwotLSNsaW5lIDExMjUgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMTI3ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKHN1Yik7IERSKEEpOyBTTTIoSEwsIEIsIDApOyBGemFjOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTI0MjUsNyArMjQyNyw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJzdWIJJTAsICVlMSIpOwotLSNsaW5lIDExMzEgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMTMzICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKHN1Yik7IERSKEEpOyBTTTIoSEwsIEMsIDApOyBGemFjOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTI0NDAsNyArMjQ0Miw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJ4Y2gJJTAsICUxIik7Ci0tI2xpbmUgMTIyOCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEyMzAgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoeGNoKTsgRFIoQSk7IFNNKE5vbmUsIFNBRERSKTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0yNDU1LDcgKzI0NTcsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BbMF0sIG9wWzFdKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgieGNoCSUwLCAlZTEiKTsKLS0jbGluZSAxMjIxICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTIyMyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRCh4Y2gpOyBEUihBKTsgU00yKEhMLCBDLCAwKTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0yNDcwLDcgKzI0NzIsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BbMF0sIG9wWzFdKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgieGNoCSUwLCAlZSExIik7Ci0tI2xpbmUgMTIwMyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEyMDUgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoeGNoKTsgRFIoQSk7IFNNKE5vbmUsIElNTVUoMikpOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTI0ODUsNyArMjQ4Nyw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJ4Y2gJJTAsICVzMSIpOwotLSNsaW5lIDEyMzEgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMjMzICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKHhjaCk7IERSKEEpOyBTTShOb25lLCBTRlIpOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTI1MDAsNyArMjUwMiw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJ4Y2gJJTAsICVlMSIpOwotLSNsaW5lIDEyMTIgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMjE0ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKHhjaCk7IERSKEEpOyBTTShITCwgMCk7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMjUxNSw3ICsyNTE3LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wWzBdLCBvcFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoInhjaAklMCwgJWVhMSIpOwotLSNsaW5lIDEyMTggInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMjIwICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKHhjaCk7IERSKEEpOyBTTShITCwgSU1NVSgxKSk7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMjUzMCw3ICsyNTMyLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wWzBdLCBvcFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoInhjaAklMCwgJWUxIik7Ci0tI2xpbmUgMTIwNiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEyMDggInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoeGNoKTsgRFIoQSk7IFNNKERFLCAwKTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0yNTQ1LDcgKzI1NDcsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BbMF0sIG9wWzFdKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgieGNoCSUwLCAlZWExIik7Ci0tI2xpbmUgMTIwOSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEyMTEgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoeGNoKTsgRFIoQSk7IFNNKERFLCBJTU1VKDEpKTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0yNTYwLDcgKzI1NjIsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BbMF0sIG9wWzFdKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgic3ViYwklMCwgJWUxIik7Ci0tI2xpbmUgMTE1NyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDExNTkgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoc3ViYyk7IERSKEEpOyBTTTIoSEwsIEIsIDApOyBGemFjOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTI1NzUsNyArMjU3Nyw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJzdWJjCSUwLCAlZTEiKTsKLS0jbGluZSAxMTYwICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTE2MiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChzdWJjKTsgRFIoQSk7IFNNMihITCwgQywgMCk7IEZ6YWM7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMjU5MCw3ICsyNTkyLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wWzBdLCBvcFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoIm1vdgklMCwgJTEiKTsKLS0jbGluZSA3MjMgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA3MjUgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQobW92KTsgRFIoRVMpOyBTTShOb25lLCBTQUREUik7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMjYwNSw3ICsyNjA3LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wWzBdLCBvcFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoInhjaAklMCwgJWUxIik7Ci0tI2xpbmUgMTIxNSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEyMTcgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoeGNoKTsgRFIoQSk7IFNNMihITCwgQiwgMCk7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMjYyMCw3ICsyNjIyLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wWzBdLCBvcFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoImNtcAklMCwgJWUxIik7Ci0tI2xpbmUgNDkyICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNDk0ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKGNtcCk7IERSKEEpOyBTTTIoSEwsIEIsIDApOyBGemFjOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTI2MzUsNyArMjYzNyw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJjbXAJJTAsICVlMSIpOwotLSNsaW5lIDQ5NSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDQ5NyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChjbXApOyBEUihBKTsgU00yKEhMLCBDLCAwKTsgRnphYzsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0yNjUwLDcgKzI2NTIsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BbMF0sIG9wWzFdKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgiYmgJJCVhMCIpOwotLSNsaW5lIDM0MCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDM0MiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChicmFuY2hfY29uZCk7IERDKHBjK0lNTVMoMSkrMyk7IFNSKE5vbmUpOyBDT05EKEgpOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTI2NjUsNyArMjY2Nyw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJzayVjMSIpOwotLSNsaW5lIDEwOTQgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMDk2ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKHNraXApOyBDT05EKEMpOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTI2ODAsNyArMjY4Miw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJtb3YJJTAsICVlMSIpOwotLSNsaW5lIDY2MCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDY2MiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChtb3YpOyBEUihBKTsgU00yKEhMLCBCLCAwKTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0yNjkxLDcgKzI2OTMsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHhmYToKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAxMTAgMDAwMSAxMXJnIDEwMTAJCWNhbGwJJTAJCQkJKi8KLS0jbGluZSA0MzAgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA0MzIgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IHJnIEFVID0gKG9wWzFdID4+IDQpICYgMHgwMzsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC0yNzAxLDcgKzI3MDMsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIHJnID0gMHgleFxuIiwgcmcpOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJjYWxsCSUwIik7Ci0tI2xpbmUgNDMwICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNDMyICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKGNhbGwpOyBEUlcocmcpOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTI3MTYsNyArMjcxOCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJicglheCIpOwotLSNsaW5lIDM4MCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDM4MiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChicmFuY2gpOyBEUihBWCk7Ci0gCi0gICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotQEAgLTI3MzMsNyArMjczNSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJicmsiKTsKLS0jbGluZSAzODggInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAzOTAgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoYnJlYWspOwotIAotICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLUBAIC0yNzUwLDcgKzI3NTIsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BbMF0sIG9wWzFdKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgicG9wCSVzMCIpOwotLSNsaW5lIDk4OSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDk5MSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChtb3YpOyBXKCk7IERSKFBTVyk7IFNQT1AoKTsKLSAKLSAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1AQCAtMjc2Nyw3ICsyNzY5LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wWzBdLCBvcFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoIm1vdnMJJWVhMCwgJTEiKTsKLS0jbGluZSA4MTEgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA4MTMgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQobW92KTsgRE0oSEwsIElNTVUoMSkpOyBTUihYKTsgRnpjOwotIAotICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLUBAIC0yNzgwLDcgKzI3ODIsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHhmZjoKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAxMTAgMDAwMSAxMXJiIDExMTEJCXNlbAlyYiUxCQkJCSovCi0tI2xpbmUgMTA0MSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEwNDMgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IHJiIEFVID0gKG9wWzFdID4+IDQpICYgMHgwMzsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC0yNzkwLDcgKzI3OTIsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIHJiID0gMHgleFxuIiwgcmIpOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJzZWwJcmIlMSIpOwotLSNsaW5lIDEwNDEgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMDQzICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKHNlbCk7IFNDKHJiKTsKLSAKLSAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1AQCAtMjgwNyw3ICsyODA5LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wWzBdLCBvcFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoImFuZAklMCwgJWUxIik7Ci0tI2xpbmUgMjkxICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMjkzICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKGFuZCk7IERSKEEpOyBTTTIoSEwsIEIsIDApOyBGejsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0yODIyLDcgKzI4MjQsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BbMF0sIG9wWzFdKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgiYW5kCSUwLCAlZTEiKTsKLS0jbGluZSAyOTcgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAyOTkgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoYW5kKTsgRFIoQSk7IFNNMihITCwgQywgMCk7IEZ6OwotIAotICAgICAgICAgICAgICAgfQotQEAgLTI4MzcsNyArMjgzOSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJibmgJJCVhMCIpOwotLSNsaW5lIDM0MyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDM0NSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChicmFuY2hfY29uZCk7IERDKHBjK0lNTVMoMSkrMyk7IFNSKE5vbmUpOyBDT05EKE5IKTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0yODUyLDcgKzI4NTQsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BbMF0sIG9wWzFdKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgic2slYzEiKTsKLS0jbGluZSAxMTAwICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTEwMiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChza2lwKTsgQ09ORChOQyk7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMjg2Nyw3ICsyODY5LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wWzBdLCBvcFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoIm1vdgklZTAsICUxIik7Ci0tI2xpbmUgNjI3ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNjI5ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKG1vdik7IERNMihITCwgQiwgMCk7IFNSKEEpOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTI4ODIsNyArMjg4NCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJyb3IJJTAsICUxIik7Ci0tI2xpbmUgMTAyMiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEwMjQgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQocm9yKTsgRFIoQSk7IFNDKDEpOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTI4OTcsNyArMjg5OSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJyb2xjCSUwLCAlMSIpOwotLSNsaW5lIDEwMTYgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMDE4ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKHJvbGMpOyBEUihBKTsgU0MoMSk7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMjkxMiw3ICsyOTE0LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wWzBdLCBvcFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoInB1c2gJJXMxIik7Ci0tI2xpbmUgOTk3ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgOTk5ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKG1vdik7IFcoKTsgRFBVU0goKTsgU1IoUFNXKTsKLSAKLSAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1AQCAtMjkyOSw3ICsyOTMxLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wWzBdLCBvcFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoImNtcHMJJTAsICVlYTEiKTsKLS0jbGluZSA1MjYgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA1MjggInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoY21wKTsgRFIoWCk7IFNNKEhMLCBJTU1VKDEpKTsgRnphYzsKLSAKLSAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1AQCAtMjk0Niw3ICsyOTQ4LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wWzBdLCBvcFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoIm9yCSUwLCAlZTEiKTsKLS0jbGluZSA5NDYgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA5NDggInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQob3IpOyBEUihBKTsgU00yKEhMLCBCLCAwKTsgRno7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMjk2MSw3ICsyOTYzLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wWzBdLCBvcFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoIm9yCSUwLCAlZTEiKTsKLS0jbGluZSA5NTIgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA5NTQgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQob3IpOyBEUihBKTsgU00yKEhMLCBDLCAwKTsgRno7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMjk3Niw3ICsyOTc4LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wWzBdLCBvcFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoInNrJWMxIik7Ci0tI2xpbmUgMTA5NyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEwOTkgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoc2tpcCk7IENPTkQoSCk7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMjk5MSw3ICsyOTkzLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wWzBdLCBvcFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoInNrJWMxIik7Ci0tI2xpbmUgMTEwOSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDExMTEgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoc2tpcCk7IENPTkQoWik7Ci0gCi0gICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotQEAgLTMwMDgsNyArMzAxMCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJtb3YJJTAsICVlMSIpOwotLSNsaW5lIDY2MyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDY2NSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChtb3YpOyBEUihBKTsgU00yKEhMLCBDLCAwKTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0zMDIzLDcgKzMwMjUsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BbMF0sIG9wWzFdKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgicm9sCSUwLCAlMSIpOwotLSNsaW5lIDEwMTMgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMDE1ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKHJvbCk7IERSKEEpOyBTQygxKTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0zMDM4LDcgKzMwNDAsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BbMF0sIG9wWzFdKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgicmV0YiIpOwotLSNsaW5lIDEwMDggInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMDEwICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKHJldGkpOwotIAotICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLUBAIC0zMDU1LDcgKzMwNTcsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BbMF0sIG9wWzFdKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgiaGFsdCIpOwotLSNsaW5lIDU3NiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDU3OCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChoYWx0KTsKLSAKLSAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1AQCAtMzA2Niw3ICszMDY4LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4ZmU6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMTEwIDAwMDEgMTExciAxMTEwCQlyb2x3YwklMCwgJTEJCQkJKi8KLS0jbGluZSAxMDE5ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTAyMSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBpbnQgciBBVSA9IChvcFsxXSA+PiA0KSAmIDB4MDE7Ci0gICAgICAgICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICAgICAgICB7Ci1AQCAtMzA3Niw3ICszMDc4LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiICByID0gMHgleFxuIiwgcik7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoInJvbHdjCSUwLCAlMSIpOwotLSNsaW5lIDEwMTkgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMDIxICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKHJvbGMpOyBXKCk7IERSVyhyKTsgU0MoMSk7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMzA5MSw3ICszMDkzLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wWzBdLCBvcFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoInhvcgklMCwgJWUxIik7Ci0tI2xpbmUgMTI1MCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEyNTIgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoeG9yKTsgRFIoQSk7IFNNMihITCwgQiwgMCk7IEZ6OwotIAotICAgICAgICAgICAgICAgfQotQEAgLTMxMDYsNyArMzEwOCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJ4b3IJJTAsICVlMSIpOwotLSNsaW5lIDEyNTYgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMjU4ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKHhvcik7IERSKEEpOyBTTTIoSEwsIEMsIDApOyBGejsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0zMTIxLDcgKzMxMjMsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BbMF0sIG9wWzFdKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgic2slYzEiKTsKLS0jbGluZSAxMTAzICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTEwNSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChza2lwKTsgQ09ORChOSCk7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMzEzNiw3ICszMTM4LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wWzBdLCBvcFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoInNrJWMxIik7Ci0tI2xpbmUgMTEwNiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDExMDggInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoc2tpcCk7IENPTkQoTlopOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTMxNTEsNyArMzE1Myw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJtb3YJJWUwLCAlMSIpOwotLSNsaW5lIDYzNiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDYzOCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChtb3YpOyBETTIoSEwsIEMsIDApOyBTUihBKTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0zMTY2LDcgKzMxNjgsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BbMF0sIG9wWzFdKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgicm9yYwklMCwgJTEiKTsKLS0jbGluZSAxMDI1ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTAyNyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChyb3JjKTsgRFIoQSk7IFNDKDEpOwotIAotICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLUBAIC0zMTg2LDcgKzMxODgsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BbMF0sIG9wWzFdKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgicmV0aSIpOwotLSNsaW5lIDEwMDUgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMDA3ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKHJldGkpOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTMyMDEsNyArMzIwMyw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJzdG9wIik7Ci0tI2xpbmUgMTExNCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDExMTYgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoc3RvcCk7Ci0gCi0gICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotQEAgLTMyMjEsNyArMzIyMyw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdncJJWUwLCAlMSIpOwotLSNsaW5lIDg3NCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDg3NiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBXKCk7IERNKEMsIElNTVUoMikpOyBTUihBWCk7Ci0gCi0gICAgICAgICB9Ci1AQCAtMzIzNiw3ICszMjM4LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92dwklMCwgJWUxIik7Ci0tI2xpbmUgODY1ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgODY3ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IFcoKTsgRFIoQVgpOyBTTShDLCBJTU1VKDIpKTsKLSAKLSAgICAgICAgIH0KLUBAIC0zMjUxLDcgKzMyNTMsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJvcgklMCwgIyUxIik7Ci0tI2xpbmUgOTY3ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgOTY5ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG9yKTsgRE0oTm9uZSwgU0FERFIpOyBTQyhJTU1VKDEpKTsgRno7Ci0gCi0gICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotQEAgLTMyNjgsNyArMzI3MCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm9yCSUwLCAlMSIpOwotLSNsaW5lIDk2NCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDk2NiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChvcik7IERSKEEpOyBTTShOb25lLCBTQUREUik7IEZ6OwotIAotICAgICAgICAgfQotQEAgLTMyODMsNyArMzI4NSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm9yCSUwLCAjJTEiKTsKLS0jbGluZSA5NTUgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA5NTcgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQob3IpOyBEUihBKTsgU0MoSU1NVSgxKSk7IEZ6OwotIAotICAgICAgICAgfQotQEAgLTMyOTgsNyArMzMwMCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm9yCSUwLCAlZTEiKTsKLS0jbGluZSA5NDMgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA5NDUgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQob3IpOyBEUihBKTsgU00oSEwsIDApOyBGejsKLSAKLSAgICAgICAgIH0KLUBAIC0zMzEzLDcgKzMzMTUsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJvcgklMCwgJWVhMSIpOwotLSNsaW5lIDk0OSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDk1MSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChvcik7IERSKEEpOyBTTShITCwgSU1NVSgxKSk7IEZ6OwotIAotICAgICAgICAgfQotQEAgLTMzMjgsNyArMzMzMCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm9yCSUwLCAlZSExIik7Ci0tI2xpbmUgOTQwICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgOTQyICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG9yKTsgRFIoQSk7IFNNKE5vbmUsIElNTVUoMikpOyBGejsKLSAKLSAgICAgICAgIH0KLUBAIC0zMzQyLDcgKzMzNDQsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgIGNhc2UgMHg3NzoKLSAgICAgICAgIHsKLSAgICAgICAgICAgLyoqIDAxMTEgMHJiYQkJCW1vdgklMCwgJTEJCQkJKi8KLS0jbGluZSA2OTYgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA2OTggInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgaW50IHJiYSBBVSA9IG9wWzBdICYgMHgwNzsKLSAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgIHsKLUBAIC0zMzUyLDcgKzMzNTQsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICBwcmludGYgKCIgIHJiYSA9IDB4JXhcbiIsIHJiYSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdgklMCwgJTEiKTsKLS0jbGluZSA2OTYgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA2OTggInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQobW92KTsgRFJCKHJiYSk7IFNSKEEpOwotIAotICAgICAgICAgfQotQEAgLTMzNzEsNyArMzM3Myw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgY2FzZSAweDcwOgotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAvKiogMDExMSAwMDAxIDBiaXQgMDAwMAkJc2V0MQklZSEwCQkJCSovCi0tI2xpbmUgMTA0NiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEwNDggInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IGJpdCBBVSA9IChvcFsxXSA+PiA0KSAmIDB4MDc7Ci0gICAgICAgICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICAgICAgICB7Ci1AQCAtMzM4MSw3ICszMzgzLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiICBiaXQgPSAweCV4XG4iLCBiaXQpOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJzZXQxCSVlITAiKTsKLS0jbGluZSAxMDQ2ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTA0OCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChtb3YpOyBETShOb25lLCBJTU1VKDIpKTsgREIoYml0KTsgU0MoMSk7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMzM5Niw3ICszMzk4LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4NzE6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMTExIDAwMDEgMGJpdCAwMDAxCQltb3YxCSUwLCBjeQkJCQkqLwotLSNsaW5lIDgwMyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDgwNSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBpbnQgYml0IEFVID0gKG9wWzFdID4+IDQpICYgMHgwNzsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC0zNDA2LDcgKzM0MDgsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIGJpdCA9IDB4JXhcbiIsIGJpdCk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoIm1vdjEJJTAsIGN5Iik7Ci0tI2xpbmUgODAzICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgODA1ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKG1vdik7IERNKE5vbmUsIFNBRERSKTsgREIoYml0KTsgU0NZKCk7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMzQyMSw3ICszNDIzLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4NzI6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMTExIDAwMDEgMGJpdCAwMDEwCQlzZXQxCSUwCQkJCSovCi0tI2xpbmUgMTA2NCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEwNjYgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IGJpdCBBVSA9IChvcFsxXSA+PiA0KSAmIDB4MDc7Ci0gICAgICAgICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICAgICAgICB7Ci1AQCAtMzQzMSw3ICszNDMzLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiICBiaXQgPSAweCV4XG4iLCBiaXQpOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJzZXQxCSUwIik7Ci0tI2xpbmUgMTA2NCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEwNjYgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQobW92KTsgRE0oTm9uZSwgU0FERFIpOyBEQihiaXQpOyBTQygxKTsKLSAKLSAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1AQCAtMzQ0OCw3ICszNDUwLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4NzM6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMTExIDAwMDEgMGJpdCAwMDExCQljbHIxCSUwCQkJCSovCi0tI2xpbmUgNDU2ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNDU4ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIGludCBiaXQgQVUgPSAob3BbMV0gPj4gNCkgJiAweDA3OwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTM0NTgsNyArMzQ2MCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgYml0ID0gMHgleFxuIiwgYml0KTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgiY2xyMQklMCIpOwotLSNsaW5lIDQ1NiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDQ1OCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChtb3YpOyBETShOb25lLCBTQUREUik7IERCKGJpdCk7IFNDKDApOwotIAotICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLUBAIC0zNDc1LDcgKzM0NzcsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHg3NDoKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAxMTEgMDAwMSAwYml0IDAxMDAJCW1vdjEJY3ksICUxCQkJCSovCi0tI2xpbmUgNzk3ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNzk5ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIGludCBiaXQgQVUgPSAob3BbMV0gPj4gNCkgJiAweDA3OwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTM0ODUsNyArMzQ4Nyw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgYml0ID0gMHgleFxuIiwgYml0KTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgibW92MQljeSwgJTEiKTsKLS0jbGluZSA3OTcgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA3OTkgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQobW92KTsgRENZKCk7IFNNKE5vbmUsIFNBRERSKTsgU0IoYml0KTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0zNTAwLDcgKzM1MDIsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHg3NToKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAxMTEgMDAwMSAwYml0IDAxMDEJCWFuZDEJY3ksICVzMQkJCQkqLwotLSNsaW5lIDMyNiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDMyOCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBpbnQgYml0IEFVID0gKG9wWzFdID4+IDQpICYgMHgwNzsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC0zNTEwLDcgKzM1MTIsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIGJpdCA9IDB4JXhcbiIsIGJpdCk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoImFuZDEJY3ksICVzMSIpOwotLSNsaW5lIDMyNiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDMyOCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChhbmQpOyBEQ1koKTsgU00oTm9uZSwgU0FERFIpOyBTQihiaXQpOwotIAotICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLUBAIC0zNTMwLDcgKzM1MzIsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHg3NjoKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAxMTEgMDAwMSAwYml0IDAxMTAJCW9yMQljeSwgJXMxCQkJCSovCi0tI2xpbmUgOTgxICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgOTgzICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIGludCBiaXQgQVUgPSAob3BbMV0gPj4gNCkgJiAweDA3OwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTM1NDAsNyArMzU0Miw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgYml0ID0gMHgleFxuIiwgYml0KTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgib3IxCWN5LCAlczEiKTsKLS0jbGluZSA5ODEgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA5ODMgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQob3IpOyBEQ1koKTsgU00oTm9uZSwgU0FERFIpOyBTQihiaXQpOwotIAotICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLUBAIC0zNTU3LDcgKzM1NTksNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHg3NzoKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAxMTEgMDAwMSAwYml0IDAxMTEJCXhvcjEJY3ksICVzMQkJCQkqLwotLSNsaW5lIDEyODUgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMjg3ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIGludCBiaXQgQVUgPSAob3BbMV0gPj4gNCkgJiAweDA3OwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTM1NjcsNyArMzU2OSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgYml0ID0gMHgleFxuIiwgYml0KTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgieG9yMQljeSwgJXMxIik7Ci0tI2xpbmUgMTI4NSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEyODcgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoeG9yKTsgRENZKCk7IFNNKE5vbmUsIFNBRERSKTsgU0IoYml0KTsKLSAKLSAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1AQCAtMzU4NCw3ICszNTg2LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4Nzg6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMTExIDAwMDEgMGJpdCAxMDAwCQljbHIxCSVlITAJCQkJKi8KLS0jbGluZSA0MzggInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA0NDAgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IGJpdCBBVSA9IChvcFsxXSA+PiA0KSAmIDB4MDc7Ci0gICAgICAgICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICAgICAgICB7Ci1AQCAtMzU5NCw3ICszNTk2LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiICBiaXQgPSAweCV4XG4iLCBiaXQpOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJjbHIxCSVlITAiKTsKLS0jbGluZSA0MzggInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA0NDAgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQobW92KTsgRE0oTm9uZSwgSU1NVSgyKSk7IERCKGJpdCk7IFNDKDApOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTM2MDksNyArMzYxMSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgY2FzZSAweDc5OgotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAvKiogMDExMSAwMDAxIDBiaXQgMTAwMQkJbW92MQklczAsIGN5CQkJCSovCi0tI2xpbmUgODA2ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgODA4ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIGludCBiaXQgQVUgPSAob3BbMV0gPj4gNCkgJiAweDA3OwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTM2MTksNyArMzYyMSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgYml0ID0gMHgleFxuIiwgYml0KTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgibW92MQklczAsIGN5Iik7Ci0tI2xpbmUgODA2ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgODA4ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKG1vdik7IERNKE5vbmUsIFNGUik7IERCKGJpdCk7IFNDWSgpOwotIAotICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLUBAIC0zNjM2LDcgKzM2MzgsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHg3YToKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAxMTEgMDAwMSAwYml0IDEwMTAJCXNldDEJJXMwCQkJCSovCi0tI2xpbmUgMTA1OCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEwNjAgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IGJpdCBBVSA9IChvcFsxXSA+PiA0KSAmIDB4MDc7Ci0gICAgICAgICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICAgICAgICB7Ci1AQCAtMzY0Niw3ICszNjQ4LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiICBiaXQgPSAweCV4XG4iLCBiaXQpOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJzZXQxCSVzMCIpOwotLSNsaW5lIDEwNTggInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMDYwICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIG9wMCA9IFNGUjsKLSAgICAgICAgICAgICAgICAgSUQobW92KTsgRE0oTm9uZSwgb3AwKTsgREIoYml0KTsgU0MoMSk7Ci0gICAgICAgICAgICAgICAgIGlmIChvcDAgPT0gUkw3OF9TRlJfUFNXICYmIGJpdCA9PSA3KQotQEAgLTM2NjQsNyArMzY2Niw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgY2FzZSAweDdiOgotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAvKiogMDExMSAwMDAxIDBiaXQgMTAxMQkJY2xyMQklczAJCQkJKi8KLS0jbGluZSA0NTAgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA0NTIgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IGJpdCBBVSA9IChvcFsxXSA+PiA0KSAmIDB4MDc7Ci0gICAgICAgICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICAgICAgICB7Ci1AQCAtMzY3NCw3ICszNjc2LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiICBiaXQgPSAweCV4XG4iLCBiaXQpOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJjbHIxCSVzMCIpOwotLSNsaW5lIDQ1MCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDQ1MiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBvcDAgPSBTRlI7Ci0gICAgICAgICAgICAgICAgIElEKG1vdik7IERNKE5vbmUsIG9wMCk7IERCKGJpdCk7IFNDKDApOwotICAgICAgICAgICAgICAgICBpZiAob3AwID09IFJMNzhfU0ZSX1BTVyAmJiBiaXQgPT0gNykKLUBAIC0zNjkyLDcgKzM2OTQsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHg3YzoKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAxMTEgMDAwMSAwYml0IDExMDAJCW1vdjEJY3ksICVzMQkJCQkqLwotLSNsaW5lIDgwMCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDgwMiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBpbnQgYml0IEFVID0gKG9wWzFdID4+IDQpICYgMHgwNzsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC0zNzAyLDcgKzM3MDQsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIGJpdCA9IDB4JXhcbiIsIGJpdCk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoIm1vdjEJY3ksICVzMSIpOwotLSNsaW5lIDgwMCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDgwMiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChtb3YpOyBEQ1koKTsgU00oTm9uZSwgU0ZSKTsgU0IoYml0KTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0zNzE3LDcgKzM3MTksNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHg3ZDoKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAxMTEgMDAwMSAwYml0IDExMDEJCWFuZDEJY3ksICVzMQkJCQkqLwotLSNsaW5lIDMyMyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDMyNSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBpbnQgYml0IEFVID0gKG9wWzFdID4+IDQpICYgMHgwNzsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC0zNzI3LDcgKzM3MjksNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIGJpdCA9IDB4JXhcbiIsIGJpdCk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoImFuZDEJY3ksICVzMSIpOwotLSNsaW5lIDMyMyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDMyNSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChhbmQpOyBEQ1koKTsgU00oTm9uZSwgU0ZSKTsgU0IoYml0KTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0zNzQyLDcgKzM3NDQsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHg3ZToKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAxMTEgMDAwMSAwYml0IDExMTAJCW9yMQljeSwgJXMxCQkJCSovCi0tI2xpbmUgOTc4ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgOTgwICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIGludCBiaXQgQVUgPSAob3BbMV0gPj4gNCkgJiAweDA3OwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTM3NTIsNyArMzc1NCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgYml0ID0gMHgleFxuIiwgYml0KTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgib3IxCWN5LCAlczEiKTsKLS0jbGluZSA5NzggInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA5ODAgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQob3IpOyBEQ1koKTsgU00oTm9uZSwgU0ZSKTsgU0IoYml0KTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0zNzY3LDcgKzM3NjksNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHg3ZjoKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAxMTEgMDAwMSAwYml0IDExMTEJCXhvcjEJY3ksICVzMQkJCQkqLwotLSNsaW5lIDEyODIgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMjg0ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIGludCBiaXQgQVUgPSAob3BbMV0gPj4gNCkgJiAweDA3OwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTM3NzcsNyArMzc3OSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgYml0ID0gMHgleFxuIiwgYml0KTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgieG9yMQljeSwgJXMxIik7Ci0tI2xpbmUgMTI4MiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEyODQgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoeG9yKTsgRENZKCk7IFNNKE5vbmUsIFNGUik7IFNCKGJpdCk7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMzc5Miw3ICszNzk0LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wWzBdLCBvcFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoInNldDEJY3kiKTsKLS0jbGluZSAxMDU1ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTA1NyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChtb3YpOyBEQ1koKTsgU0MoMSk7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMzgwNyw3ICszODA5LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4ZjE6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMTExIDAwMDEgMWJpdCAwMDAxCQltb3YxCSVlMCwgY3kJCQkJKi8KLS0jbGluZSA3ODUgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA3ODcgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IGJpdCBBVSA9IChvcFsxXSA+PiA0KSAmIDB4MDc7Ci0gICAgICAgICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICAgICAgICB7Ci1AQCAtMzgxNyw3ICszODE5LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiICBiaXQgPSAweCV4XG4iLCBiaXQpOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJtb3YxCSVlMCwgY3kiKTsKLS0jbGluZSA3ODUgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA3ODcgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQobW92KTsgRE0oSEwsIDApOyBEQihiaXQpOyBTQ1koKTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0zODMyLDcgKzM4MzQsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHhmMjoKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAxMTEgMDAwMSAxYml0IDAwMTAJCXNldDEJJWUwCQkJCSovCi0tI2xpbmUgMTA0OSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEwNTEgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IGJpdCBBVSA9IChvcFsxXSA+PiA0KSAmIDB4MDc7Ci0gICAgICAgICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICAgICAgICB7Ci1AQCAtMzg0Miw3ICszODQ0LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiICBiaXQgPSAweCV4XG4iLCBiaXQpOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJzZXQxCSVlMCIpOwotLSNsaW5lIDEwNDkgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMDUxICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKG1vdik7IERNKEhMLCAwKTsgREIoYml0KTsgU0MoMSk7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMzg1Nyw3ICszODU5LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4ZjM6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMTExIDAwMDEgMWJpdCAwMDExCQljbHIxCSVlMAkJCQkqLwotLSNsaW5lIDQ0MSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDQ0MyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBpbnQgYml0IEFVID0gKG9wWzFdID4+IDQpICYgMHgwNzsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC0zODY3LDcgKzM4NjksNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIGJpdCA9IDB4JXhcbiIsIGJpdCk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoImNscjEJJWUwIik7Ci0tI2xpbmUgNDQxICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNDQzICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKG1vdik7IERNKEhMLCAwKTsgREIoYml0KTsgU0MoMCk7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMzg4Miw3ICszODg0LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4ZjQ6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMTExIDAwMDEgMWJpdCAwMTAwCQltb3YxCWN5LCAlZTEJCQkJKi8KLS0jbGluZSA3OTEgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA3OTMgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IGJpdCBBVSA9IChvcFsxXSA+PiA0KSAmIDB4MDc7Ci0gICAgICAgICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICAgICAgICB7Ci1AQCAtMzg5Miw3ICszODk0LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiICBiaXQgPSAweCV4XG4iLCBiaXQpOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJtb3YxCWN5LCAlZTEiKTsKLS0jbGluZSA3OTEgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA3OTMgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQobW92KTsgRENZKCk7IFNNKEhMLCAwKTsgU0IoYml0KTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0zOTA3LDcgKzM5MDksNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHhmNToKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAxMTEgMDAwMSAxYml0IDAxMDEJCWFuZDEJY3ksICVlMQkJCSovCi0tI2xpbmUgMzE3ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMzE5ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIGludCBiaXQgQVUgPSAob3BbMV0gPj4gNCkgJiAweDA3OwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTM5MTcsNyArMzkxOSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgYml0ID0gMHgleFxuIiwgYml0KTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgiYW5kMQljeSwgJWUxIik7Ci0tI2xpbmUgMzE3ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMzE5ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKGFuZCk7IERDWSgpOyBTTShITCwgMCk7IFNCKGJpdCk7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMzkzMiw3ICszOTM0LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4ZjY6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMTExIDAwMDEgMWJpdCAwMTEwCQlvcjEJY3ksICVlMQkJCQkqLwotLSNsaW5lIDk3MiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDk3NCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBpbnQgYml0IEFVID0gKG9wWzFdID4+IDQpICYgMHgwNzsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC0zOTQyLDcgKzM5NDQsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIGJpdCA9IDB4JXhcbiIsIGJpdCk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoIm9yMQljeSwgJWUxIik7Ci0tI2xpbmUgOTcyICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgOTc0ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKG9yKTsgRENZKCk7IFNNKEhMLCAwKTsgU0IoYml0KTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0zOTU3LDcgKzM5NTksNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHhmNzoKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAxMTEgMDAwMSAxYml0IDAxMTEJCXhvcjEJY3ksICVlMQkJCQkqLwotLSNsaW5lIDEyNzYgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMjc4ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIGludCBiaXQgQVUgPSAob3BbMV0gPj4gNCkgJiAweDA3OwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTM5NjcsNyArMzk2OSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgYml0ID0gMHgleFxuIiwgYml0KTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgieG9yMQljeSwgJWUxIik7Ci0tI2xpbmUgMTI3NiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEyNzggInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoeG9yKTsgRENZKCk7IFNNKEhMLCAwKTsgU0IoYml0KTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC0zOTgyLDcgKzM5ODQsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BbMF0sIG9wWzFdKTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgiY2xyMQljeSIpOwotLSNsaW5lIDQ0NyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDQ0OSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChtb3YpOyBEQ1koKTsgU0MoMCk7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtMzk5Nyw3ICszOTk5LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4Zjk6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMTExIDAwMDEgMWJpdCAxMDAxCQltb3YxCSVlMCwgY3kJCQkJKi8KLS0jbGluZSA3ODggInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA3OTAgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IGJpdCBBVSA9IChvcFsxXSA+PiA0KSAmIDB4MDc7Ci0gICAgICAgICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICAgICAgICB7Ci1AQCAtNDAwNyw3ICs0MDA5LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiICBiaXQgPSAweCV4XG4iLCBiaXQpOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJtb3YxCSVlMCwgY3kiKTsKLS0jbGluZSA3ODggInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA3OTAgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQobW92KTsgRFIoQSk7IERCKGJpdCk7IFNDWSgpOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTQwMjIsNyArNDAyNCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgY2FzZSAweGZhOgotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAvKiogMDExMSAwMDAxIDFiaXQgMTAxMAkJc2V0MQklMAkJCQkqLwotLSNsaW5lIDEwNTIgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMDU0ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIGludCBiaXQgQVUgPSAob3BbMV0gPj4gNCkgJiAweDA3OwotICAgICAgICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgICAgICAgewotQEAgLTQwMzIsNyArNDAzNCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgYml0ID0gMHgleFxuIiwgYml0KTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIFNZTlRBWCgic2V0MQklMCIpOwotLSNsaW5lIDEwNTIgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMDU0ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKG1vdik7IERSKEEpOyBEQihiaXQpOyBTQygxKTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC00MDQ3LDcgKzQwNDksNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHhmYjoKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAxMTEgMDAwMSAxYml0IDEwMTEJCWNscjEJJTAJCQkJKi8KLS0jbGluZSA0NDQgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA0NDYgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IGJpdCBBVSA9IChvcFsxXSA+PiA0KSAmIDB4MDc7Ci0gICAgICAgICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICAgICAgICB7Ci1AQCAtNDA1Nyw3ICs0MDU5LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiICBiaXQgPSAweCV4XG4iLCBiaXQpOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJjbHIxCSUwIik7Ci0tI2xpbmUgNDQ0ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNDQ2ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKG1vdik7IERSKEEpOyBEQihiaXQpOyBTQygwKTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC00MDcyLDcgKzQwNzQsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHhmYzoKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAxMTEgMDAwMSAxYml0IDExMDAJCW1vdjEJY3ksICVlMQkJCQkqLwotLSNsaW5lIDc5NCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDc5NiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBpbnQgYml0IEFVID0gKG9wWzFdID4+IDQpICYgMHgwNzsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC00MDgyLDcgKzQwODQsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIGJpdCA9IDB4JXhcbiIsIGJpdCk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoIm1vdjEJY3ksICVlMSIpOwotLSNsaW5lIDc5NCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDc5NiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBJRChtb3YpOyBEQ1koKTsgU1IoQSk7IFNCKGJpdCk7Ci0gCi0gICAgICAgICAgICAgICB9Ci1AQCAtNDA5Nyw3ICs0MDk5LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICBjYXNlIDB4ZmQ6Ci0gICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC8qKiAwMTExIDAwMDEgMWJpdCAxMTAxCQlhbmQxCWN5LCAlMQkJCQkqLwotLSNsaW5lIDMyMCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDMyMiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBpbnQgYml0IEFVID0gKG9wWzFdID4+IDQpICYgMHgwNzsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC00MTA3LDcgKzQxMDksNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIGJpdCA9IDB4JXhcbiIsIGJpdCk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoImFuZDEJY3ksICUxIik7Ci0tI2xpbmUgMzIwICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMzIyICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKGFuZCk7IERDWSgpOyBTUihBKTsgU0IoYml0KTsKLSAKLSAgICAgICAgICAgICAgIH0KLUBAIC00MTIyLDcgKzQxMjQsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgIGNhc2UgMHhmZToKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgLyoqIDAxMTEgMDAwMSAxYml0IDExMTAJCW9yMQljeSwgJTEJCQkJKi8KLS0jbGluZSA5NzUgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA5NzcgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgaW50IGJpdCBBVSA9IChvcFsxXSA+PiA0KSAmIDB4MDc7Ci0gICAgICAgICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICAgICAgICB7Ci1AQCAtNDEzMiw3ICs0MTM0LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiICBiaXQgPSAweCV4XG4iLCBiaXQpOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJvcjEJY3ksICUxIik7Ci0tI2xpbmUgOTc1ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgOTc3ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKG9yKTsgRENZKCk7IFNSKEEpOyBTQihiaXQpOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTQxNDcsNyArNDE0OSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgY2FzZSAweGZmOgotICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAvKiogMDExMSAwMDAxIDFiaXQgMTExMQkJeG9yMQljeSwgJTEJCQkJKi8KLS0jbGluZSAxMjc5ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTI4MSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICAgICAgICBpbnQgYml0IEFVID0gKG9wWzFdID4+IDQpICYgMHgwNzsKLSAgICAgICAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgICAgICAgIHsKLUBAIC00MTU3LDcgKzQxNTksNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgIGJpdCA9IDB4JXhcbiIsIGJpdCk7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBTWU5UQVgoInhvcjEJY3ksICUxIik7Ci0tI2xpbmUgMTI3OSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEyODEgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgICAgICAgSUQoeG9yKTsgRENZKCk7IFNSKEEpOyBTQihiaXQpOwotIAotICAgICAgICAgICAgICAgfQotQEAgLTQxNzIsNyArNDE3NCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFswXSwgb3BbMV0pOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgU1lOVEFYKCJub3QxCWN5Iik7Ci0tI2xpbmUgOTE2ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgOTE4ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgICAgICAgIElEKHhvcik7IERDWSgpOyBTQygxKTsKLSAKLSAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1AQCAtNDE5Miw3ICs0MTk0LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92dwklZTAsICUxIik7Ci0tI2xpbmUgODc3ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgODc5ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IFcoKTsgRE0oQkMsIElNTVUoMikpOyBTUihBWCk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNDIwNyw3ICs0MjA5LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92dwklMCwgJWUxIik7Ci0tI2xpbmUgODY4ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgODcwICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IFcoKTsgRFIoQVgpOyBTTShCQywgSU1NVSgyKSk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNDIyMiw3ICs0MjI0LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgieG9yCSUwLCAjJTEiKTsKLS0jbGluZSAxMjcxICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMTI3MyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRCh4b3IpOyBETShOb25lLCBTQUREUik7IFNDKElNTVUoMSkpOyBGejsKLSAKLSAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1AQCAtNDIzOSw3ICs0MjQxLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgieG9yCSUwLCAlMSIpOwotLSNsaW5lIDEyNjggInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMjcwICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKHhvcik7IERSKEEpOyBTTShOb25lLCBTQUREUik7IEZ6OwotIAotICAgICAgICAgfQotQEAgLTQyNTQsNyArNDI1Niw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoInhvcgklMCwgIyUxIik7Ci0tI2xpbmUgMTI1OSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEyNjEgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoeG9yKTsgRFIoQSk7IFNDKElNTVUoMSkpOyBGejsKLSAKLSAgICAgICAgIH0KLUBAIC00MjY5LDcgKzQyNzEsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJ4b3IJJTAsICVlMSIpOwotLSNsaW5lIDEyNDcgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMjQ5ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKHhvcik7IERSKEEpOyBTTShITCwgMCk7IEZ6OwotIAotICAgICAgICAgfQotQEAgLTQyODQsNyArNDI4Niw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoInhvcgklMCwgJWVhMSIpOwotLSNsaW5lIDEyNTMgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMjU1ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKHhvcik7IERSKEEpOyBTTShITCwgSU1NVSgxKSk7IEZ6OwotIAotICAgICAgICAgfQotQEAgLTQyOTksNyArNDMwMSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoInhvcgklMCwgJWUhMSIpOwotLSNsaW5lIDEyNDQgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMjQ2ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKHhvcik7IERSKEEpOyBTTShOb25lLCBJTU1VKDIpKTsgRno7Ci0gCi0gICAgICAgICB9Ci1AQCAtNDMxNCw3ICs0MzE2LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICBjYXNlIDB4ODc6Ci0gICAgICAgICB7Ci0gICAgICAgICAgIC8qKiAxMDAwIDByZWcJCQlpbmMJJTAJCQkJKi8KLS0jbGluZSA1ODcgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA1ODkgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgaW50IHJlZyBBVSA9IG9wWzBdICYgMHgwNzsKLSAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgIHsKLUBAIC00MzI0LDcgKzQzMjYsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICBwcmludGYgKCIgIHJlZyA9IDB4JXhcbiIsIHJlZyk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoImluYwklMCIpOwotLSNsaW5lIDU4NyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDU4OSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChhZGQpOyBEUkIocmVnKTsgU0MoMSk7IEZ6YTsKLSAKLSAgICAgICAgIH0KLUBAIC00MzM5LDcgKzQzNDEsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJtb3YJJTAsICVlYTEiKTsKLS0jbGluZSA2NjYgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA2NjggInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQobW92KTsgRFIoQSk7IFNNKFNQLCBJTU1VKDEpKTsKLSAKLSAgICAgICAgIH0KLUBAIC00MzU0LDcgKzQzNTYsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJtb3YJJTAsICVlMSIpOwotLSNsaW5lIDY0OCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDY1MCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBEUihBKTsgU00oREUsIDApOwotIAotICAgICAgICAgfQotQEAgLTQzNjksNyArNDM3MSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdgklMCwgJWVhMSIpOwotLSNsaW5lIDY1MSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDY1MyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBEUihBKTsgU00oREUsIElNTVUoMSkpOwotIAotICAgICAgICAgfQotQEAgLTQzODQsNyArNDM4Niw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdgklMCwgJWUxIik7Ci0tI2xpbmUgNjU0ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNjU2ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IERSKEEpOyBTTShITCwgMCk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNDM5OSw3ICs0NDAxLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92CSUwLCAlZWExIik7Ci0tI2xpbmUgNjU3ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNjU5ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IERSKEEpOyBTTShITCwgSU1NVSgxKSk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNDQxNCw3ICs0NDE2LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92CSUwLCAlMSIpOwotLSNsaW5lIDY5MCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDY5MiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBEUihBKTsgU00oTm9uZSwgU0FERFIpOwotIAotICAgICAgICAgfQotQEAgLTQ0MjksNyArNDQzMSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdgklMCwgJXMxIik7Ci0tI2xpbmUgNjg3ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNjg5ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IERSKEEpOyBTTShOb25lLCBTRlIpOwotIAotICAgICAgICAgfQotQEAgLTQ0NDQsNyArNDQ0Niw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdgklMCwgJWUhMSIpOwotLSNsaW5lIDY0NSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDY0NyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBEUihBKTsgU00oTm9uZSwgSU1NVSgyKSk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNDQ1OSw3ICs0NDYxLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICBjYXNlIDB4OTc6Ci0gICAgICAgICB7Ci0gICAgICAgICAgIC8qKiAxMDAxIDByZWcJCQlkZWMJJTAJCQkJKi8KLS0jbGluZSA1NTQgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA1NTYgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgaW50IHJlZyBBVSA9IG9wWzBdICYgMHgwNzsKLSAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgIHsKLUBAIC00NDY5LDcgKzQ0NzEsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICBwcmludGYgKCIgIHJlZyA9IDB4JXhcbiIsIHJlZyk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoImRlYwklMCIpOwotLSNsaW5lIDU1NCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDU1NiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChzdWIpOyBEUkIocmVnKTsgU0MoMSk7IEZ6YTsKLSAKLSAgICAgICAgIH0KLUBAIC00NDg0LDcgKzQ0ODYsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJtb3YJJWEwLCAlMSIpOwotLSNsaW5lIDY0MiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDY0NCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBETShTUCwgSU1NVSgxKSk7IFNSKEEpOwotIAotICAgICAgICAgfQotQEAgLTQ0OTksNyArNDUwMSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdgklZTAsICUxIik7Ci0tI2xpbmUgNjE1ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNjE3ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IERNKERFLCAwKTsgU1IoQSk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNDUxNCw3ICs0NTE2LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92CSVlYTAsICUxIik7Ci0tI2xpbmUgNjIxICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNjIzICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IERNKERFLCBJTU1VKDEpKTsgU1IoQSk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNDUyOSw3ICs0NTMxLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92CSVlMCwgJTEiKTsKLS0jbGluZSA2MjQgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA2MjYgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQobW92KTsgRE0oSEwsIDApOyBTUihBKTsKLSAKLSAgICAgICAgIH0KLUBAIC00NTQ0LDcgKzQ1NDYsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJtb3YJJWVhMCwgJTEiKTsKLS0jbGluZSA2MzMgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA2MzUgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQobW92KTsgRE0oSEwsIElNTVUoMSkpOyBTUihBKTsKLSAKLSAgICAgICAgIH0KLUBAIC00NTU5LDcgKzQ1NjEsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJtb3YJJTAsICUxIik7Ci0tI2xpbmUgNzQ3ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNzQ5ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IERNKE5vbmUsIFNBRERSKTsgU1IoQSk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNDU3NCw3ICs0NTc2LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92CSVzMCwgJTEiKTsKLS0jbGluZSA3ODAgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA3ODIgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQobW92KTsgRE0oTm9uZSwgU0ZSKTsgU1IoQSk7Ci0gCi0gICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotQEAgLTQ1OTEsNyArNDU5Myw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdgklZSEwLCAlMSIpOwotLSNsaW5lIDYxMiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDYxNCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBETShOb25lLCBJTU1VKDIpKTsgU1IoQSk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNDYwNiw3ICs0NjA4LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiaW5jCSVlITAiKTsKLS0jbGluZSA1ODEgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA1ODMgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoYWRkKTsgRE0oTm9uZSwgSU1NVSgyKSk7IFNDKDEpOyBGemE7Ci0gCi0gICAgICAgICB9Ci1AQCAtNDYxNyw3ICs0NjE5LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICBjYXNlIDB4YTc6Ci0gICAgICAgICB7Ci0gICAgICAgICAgIC8qKiAxMDEwIDByZzEJCQlpbmN3CSUwCQkJCSovCi0tI2xpbmUgNjAxICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNjAzICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIGludCByZyBBVSA9IChvcFswXSA+PiAxKSAmIDB4MDM7Ci0gICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICB7Ci1AQCAtNDYyNyw3ICs0NjI5LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgcHJpbnRmICgiICByZyA9IDB4JXhcbiIsIHJnKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiaW5jdwklMCIpOwotLSNsaW5lIDYwMSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDYwMyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChhZGQpOyBXKCk7IERSVyhyZyk7IFNDKDEpOwotIAotICAgICAgICAgfQotQEAgLTQ2NDIsNyArNDY0NCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoImluY3cJJWUhMCIpOwotLSNsaW5lIDU5NSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDU5NyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChhZGQpOyBXKCk7IERNKE5vbmUsIElNTVUoMikpOyBTQygxKTsKLSAKLSAgICAgICAgIH0KLUBAIC00NjU3LDcgKzQ2NTksNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJpbmMJJTAiKTsKLS0jbGluZSA1OTAgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA1OTIgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoYWRkKTsgRE0oTm9uZSwgU0FERFIpOyBTQygxKTsgRnphOwotIAotICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLUBAIC00Njc0LDcgKzQ2NzYsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJpbmN3CSUwIik7Ci0tI2xpbmUgNjA0ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNjA2ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKGFkZCk7IFcoKTsgRE0oTm9uZSwgU0FERFIpOyBTQygxKTsKLSAKLSAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1AQCAtNDY5MSw3ICs0NjkzLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92dwklMCwgJWExIik7Ci0tI2xpbmUgODUwICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgODUyICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IFcoKTsgRFIoQVgpOyBTTShTUCwgSU1NVSgxKSk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNDcwNiw3ICs0NzA4LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92dwklMCwgJWUxIik7Ci0tI2xpbmUgODM4ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgODQwICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IFcoKTsgRFIoQVgpOyBTTShERSwgMCk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNDcyMSw3ICs0NzIzLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92dwklMCwgJWVhMSIpOwotLSNsaW5lIDg0MSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDg0MyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBXKCk7IERSKEFYKTsgU00oREUsIElNTVUoMSkpOwotIAotICAgICAgICAgfQotQEAgLTQ3MzYsNyArNDczOCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdncJJTAsICVlMSIpOwotLSNsaW5lIDg0NCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDg0NiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBXKCk7IERSKEFYKTsgU00oSEwsIDApOwotIAotICAgICAgICAgfQotQEAgLTQ3NTEsNyArNDc1Myw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdncJJTAsICVlYTEiKTsKLS0jbGluZSA4NDcgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA4NDkgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQobW92KTsgVygpOyBEUihBWCk7IFNNKEhMLCBJTU1VKDEpKTsKLSAKLSAgICAgICAgIH0KLUBAIC00NzY2LDcgKzQ3NjgsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJtb3Z3CSUwLCAlMSIpOwotLSNsaW5lIDg4MCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDg4MiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBXKCk7IERSKEFYKTsgU00oTm9uZSwgU0FERFIpOwotIAotICAgICAgICAgfQotQEAgLTQ3ODEsNyArNDc4Myw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdncJJTAsICVzMSIpOwotLSNsaW5lIDg4MyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDg4NSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBXKCk7IERSKEFYKTsgU00oTm9uZSwgU0ZSKTsKLSAKLSAgICAgICAgIH0KLUBAIC00Nzk2LDcgKzQ3OTgsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJtb3Z3CSUwLCAlZSExIik7Ci0tI2xpbmUgODM0ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgODM2ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IFcoKTsgRFIoQVgpOyBTTShOb25lLCBJTU1VKDIpKTsKLSAKLSAKLUBAIC00ODEyLDcgKzQ4MTQsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJkZWMJJWUhMCIpOwotLSNsaW5lIDU0OCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDU1MCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChzdWIpOyBETShOb25lLCBJTU1VKDIpKTsgU0MoMSk7IEZ6YTsKLSAKLSAgICAgICAgIH0KLUBAIC00ODIzLDcgKzQ4MjUsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgIGNhc2UgMHhiNzoKLSAgICAgICAgIHsKLSAgICAgICAgICAgLyoqIDEwMTEgMHJnMSAJCQlkZWN3CSUwCQkJCSovCi0tI2xpbmUgNTY4ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNTcwICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIGludCByZyBBVSA9IChvcFswXSA+PiAxKSAmIDB4MDM7Ci0gICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICB7Ci1AQCAtNDgzMyw3ICs0ODM1LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgcHJpbnRmICgiICByZyA9IDB4JXhcbiIsIHJnKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiZGVjdwklMCIpOwotLSNsaW5lIDU2OCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDU3MCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChzdWIpOyBXKCk7IERSVyhyZyk7IFNDKDEpOwotIAotICAgICAgICAgfQotQEAgLTQ4NDgsNyArNDg1MCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoImRlY3cJJWUhMCIpOwotLSNsaW5lIDU2MiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDU2NCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChzdWIpOyBXKCk7IERNKE5vbmUsIElNTVUoMikpOyBTQygxKTsKLSAKLSAgICAgICAgIH0KLUBAIC00ODYzLDcgKzQ4NjUsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJkZWMJJTAiKTsKLS0jbGluZSA1NTcgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA1NTkgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoc3ViKTsgRE0oTm9uZSwgU0FERFIpOyBTQygxKTsgRnphOwotIAotICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLUBAIC00ODgwLDcgKzQ4ODIsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJkZWN3CSUwIik7Ci0tI2xpbmUgNTcxICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNTczICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKHN1Yik7IFcoKTsgRE0oTm9uZSwgU0FERFIpOyBTQygxKTsKLSAKLSAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1AQCAtNDg5Nyw3ICs0ODk5LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92dwklYTAsICUxIik7Ci0tI2xpbmUgODMxICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgODMzICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IFcoKTsgRE0oU1AsIElNTVUoMSkpOyBTUihBWCk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNDkxMiw3ICs0OTE0LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92dwklZTAsICUxIik7Ci0tI2xpbmUgODE5ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgODIxICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IFcoKTsgRE0oREUsIDApOyBTUihBWCk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNDkyNyw3ICs0OTI5LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92dwklZWEwLCAlMSIpOwotLSNsaW5lIDgyMiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDgyNCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBXKCk7IERNKERFLCBJTU1VKDEpKTsgU1IoQVgpOwotIAotICAgICAgICAgfQotQEAgLTQ5NDIsNyArNDk0NCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdncJJWUwLCAlMSIpOwotLSNsaW5lIDgyNSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDgyNyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBXKCk7IERNKEhMLCAwKTsgU1IoQVgpOwotIAotICAgICAgICAgfQotQEAgLTQ5NTcsNyArNDk1OSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdncJJWVhMCwgJTEiKTsKLS0jbGluZSA4MjggInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA4MzAgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQobW92KTsgVygpOyBETShITCwgSU1NVSgxKSk7IFNSKEFYKTsKLSAKLSAgICAgICAgIH0KLUBAIC00OTcyLDcgKzQ5NzQsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJtb3Z3CSUwLCAlMSIpOwotLSNsaW5lIDg5NSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDg5NyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBXKCk7IERNKE5vbmUsIFNBRERSKTsgU1IoQVgpOwotIAotICAgICAgICAgfQotQEAgLTQ5ODcsNyArNDk4OSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdncJJXMwLCAlMSIpOwotLSNsaW5lIDkwMSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDkwMyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBXKCk7IERNKE5vbmUsIFNGUik7IFNSKEFYKTsKLSAKLSAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1AQCAtNTAwNCw3ICs1MDA2LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92dwklZSEwLCAlMSIpOwotLSNsaW5lIDgxNiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDgxOCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBXKCk7IERNKE5vbmUsIElNTVUoMikpOyBTUihBWCk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNTAxNSw3ICs1MDE3LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICBjYXNlIDB4YzY6Ci0gICAgICAgICB7Ci0gICAgICAgICAgIC8qKiAxMTAwIDByZzAJCQlwb3AJJTAJCQkJKi8KLS0jbGluZSA5ODYgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA5ODggInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgaW50IHJnIEFVID0gKG9wWzBdID4+IDEpICYgMHgwMzsKLSAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgIHsKLUBAIC01MDI1LDcgKzUwMjcsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICBwcmludGYgKCIgIHJnID0gMHgleFxuIiwgcmcpOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJwb3AJJTAiKTsKLS0jbGluZSA5ODYgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA5ODggInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQobW92KTsgVygpOyBEUlcocmcpOyBTUE9QKCk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNTAzNiw3ICs1MDM4LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICBjYXNlIDB4Yzc6Ci0gICAgICAgICB7Ci0gICAgICAgICAgIC8qKiAxMTAwIDByZzEJCQlwdXNoCSUxCQkJCSovCi0tI2xpbmUgOTk0ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgOTk2ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIGludCByZyBBVSA9IChvcFswXSA+PiAxKSAmIDB4MDM7Ci0gICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICB7Ci1AQCAtNTA0Niw3ICs1MDQ4LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgcHJpbnRmICgiICByZyA9IDB4JXhcbiIsIHJnKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgicHVzaAklMSIpOwotLSNsaW5lIDk5NCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDk5NiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBXKCk7IERQVVNIKCk7IFNSVyhyZyk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNTA2MSw3ICs1MDYzLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92CSVhMCwgIyUxIik7Ci0tI2xpbmUgNjM5ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNjQxICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IERNKFNQLCBJTU1VKDEpKTsgU0MoSU1NVSgxKSk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNTA3Niw3ICs1MDc4LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92dwklMCwgIyUxIik7Ci0tI2xpbmUgODkyICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgODk0ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IFcoKTsgRE0oTm9uZSwgU0FERFIpOyBTQyhJTU1VKDIpKTsKLSAKLSAgICAgICAgIH0KLUBAIC01MDkxLDcgKzUwOTMsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJtb3YJJWVhMCwgIyUxIik7Ci0tI2xpbmUgNjE4ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNjIwICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IERNKERFLCBJTU1VKDEpKTsgU0MoSU1NVSgxKSk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNTEwNiw3ICs1MTA4LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92dwklczAsICMlMSIpOwotLSNsaW5lIDg5OCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDkwMCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBXKCk7IERNKE5vbmUsIFNGUik7IFNDKElNTVUoMikpOwotIAotICAgICAgICAgfQotQEAgLTUxMjEsNyArNTEyMyw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdgklZWEwLCAjJTEiKTsKLS0jbGluZSA2MzAgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA2MzIgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQobW92KTsgRE0oSEwsIElNTVUoMSkpOyBTQyhJTU1VKDEpKTsKLSAKLSAgICAgICAgIH0KLUBAIC01MTM2LDcgKzUxMzgsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJtb3YJJTAsICMlMSIpOwotLSNsaW5lIDc0NCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDc0NiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBETShOb25lLCBTQUREUik7IFNDKElNTVUoMSkpOwotIAotICAgICAgICAgfQotQEAgLTUxNTEsNyArNTE1Myw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdgklczAsICMlMSIpOwotLSNsaW5lIDc1MCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDc1MiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBvcDAgPSBTRlI7Ci0gICAgICAgICAgIG9wMSA9IElNTVUoMSk7Ci0gICAgICAgICAgIElEKG1vdik7IERNKE5vbmUsIG9wMCk7IFNDKG9wMSk7Ci1AQCAtNTE5Myw3ICs1MTk1LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92CSVlITAsICMlMSIpOwotLSNsaW5lIDYwOSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDYxMSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBETShOb25lLCBJTU1VKDIpKTsgU0MoSU1NVSgxKSk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNTIwNCw3ICs1MjA2LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICBjYXNlIDB4ZDM6Ci0gICAgICAgICB7Ci0gICAgICAgICAgIC8qKiAxMTAxIDAwcmcJCQljbXAwCSUwCQkJCSovCi0tI2xpbmUgNTE4ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNTIwICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIGludCByZyBBVSA9IG9wWzBdICYgMHgwMzsKLSAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgIHsKLUBAIC01MjE0LDcgKzUyMTYsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICBwcmludGYgKCIgIHJnID0gMHgleFxuIiwgcmcpOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJjbXAwCSUwIik7Ci0tI2xpbmUgNTE4ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNTIwICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKGNtcCk7IERSQihyZyk7IFNDKDApOyBGemFjOwotIAotICAgICAgICAgfQotQEAgLTUyMjksNyArNTIzMSw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoImNtcDAJJTAiKTsKLS0jbGluZSA1MjEgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA1MjMgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoY21wKTsgRE0oTm9uZSwgU0FERFIpOyBTQygwKTsgRnphYzsKLSAKLSAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1AQCAtNTI0Niw3ICs1MjQ4LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiY21wMAklZSEwIik7Ci0tI2xpbmUgNTE1ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNTE3ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKGNtcCk7IERNKE5vbmUsIElNTVUoMikpOyBTQygwKTsgRnphYzsKLSAKLSAgICAgICAgIH0KLUBAIC01MjYxLDcgKzUyNjMsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJtdWx1CXgiKTsKLS0jbGluZSA5MDYgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA5MDggInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQobXVsdSk7Ci0gCi0gICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotQEAgLTUyNzgsNyArNTI4MCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoInJldCIpOwotLSNsaW5lIDEwMDIgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAxMDA0ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKHJldCk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNTI5Myw3ICs1Mjk1LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92CSUwLCAlMSIpOwotLSNsaW5lIDcxMSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDcxMyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBEUihYKTsgU00oTm9uZSwgU0FERFIpOwotIAotICAgICAgICAgfQotQEAgLTUzMDgsNyArNTMxMCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdgklMCwgJWUhMSIpOwotLSNsaW5lIDcwOCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDcxMCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBEUihYKTsgU00oTm9uZSwgSU1NVSgyKSk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNTMxOCw3ICs1MzIwLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICBjYXNlIDB4ZmE6Ci0gICAgICAgICB7Ci0gICAgICAgICAgIC8qKiAxMXJhIDEwMTAJCQltb3Z3CSUwLCAlMQkJCQkqLwotLSNsaW5lIDg4OSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDg5MSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBpbnQgcmEgQVUgPSAob3BbMF0gPj4gNCkgJiAweDAzOwotICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgewotQEAgLTUzMjgsNyArNTMzMCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgIHByaW50ZiAoIiAgcmEgPSAweCV4XG4iLCByYSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdncJJTAsICUxIik7Ci0tI2xpbmUgODg5ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgODkxICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IFcoKTsgRFJXKHJhKTsgU00oTm9uZSwgU0FERFIpOwotIAotICAgICAgICAgfQotQEAgLTUzMzgsNyArNTM0MCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgY2FzZSAweGZiOgotICAgICAgICAgewotICAgICAgICAgICAvKiogMTFyYSAxMDExCQkJbW92dwklMCwgJWVzITEJCQkqLwotLSNsaW5lIDg4NiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDg4OCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBpbnQgcmEgQVUgPSAob3BbMF0gPj4gNCkgJiAweDAzOwotICAgICAgICAgICBpZiAodHJhY2UpCi0gICAgICAgICAgICAgewotQEAgLTUzNDgsNyArNTM1MCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgIHByaW50ZiAoIiAgcmEgPSAweCV4XG4iLCByYSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdncJJTAsICVlcyExIik7Ci0tI2xpbmUgODg2ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgODg4ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IFcoKTsgRFJXKHJhKTsgU00oTm9uZSwgSU1NVSgyKSk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNTM2Myw3ICs1MzY1LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiYmMJJCVhMCIpOwotLSNsaW5lIDMzNCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDMzNiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChicmFuY2hfY29uZCk7IERDKHBjK0lNTVMoMSkrMik7IFNSKE5vbmUpOyBDT05EKEMpOwotIAotICAgICAgICAgfQotQEAgLTUzNzgsNyArNTM4MCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoImJ6CSQlYTAiKTsKLS0jbGluZSAzNDYgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSAzNDggInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQoYnJhbmNoX2NvbmQpOyBEQyhwYytJTU1TKDEpKzIpOyBTUihOb25lKTsgQ09ORChaKTsKLSAKLSAgICAgICAgIH0KLUBAIC01MzkzLDcgKzUzOTUsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJibmMJJCVhMCIpOwotLSNsaW5lIDMzNyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDMzOSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChicmFuY2hfY29uZCk7IERDKHBjK0lNTVMoMSkrMik7IFNSKE5vbmUpOyBDT05EKE5DKTsKLSAKLSAgICAgICAgIH0KLUBAIC01NDA4LDcgKzU0MTAsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJibnoJJCVhMCIpOwotLSNsaW5lIDM0OSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDM1MSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChicmFuY2hfY29uZCk7IERDKHBjK0lNTVMoMSkrMik7IFNSKE5vbmUpOyBDT05EKE5aKTsKLSAKLSAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1AQCAtNTQyMSw3ICs1NDIzLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICBjYXNlIDB4ZTM6Ci0gICAgICAgICB7Ci0gICAgICAgICAgIC8qKiAxMTEwIDAwcmcJCQlvbmViCSUwCQkJCSovCi0tI2xpbmUgOTI0ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgOTI2ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIGludCByZyBBVSA9IG9wWzBdICYgMHgwMzsKLSAgICAgICAgICAgaWYgKHRyYWNlKQotICAgICAgICAgICAgIHsKLUBAIC01NDMxLDcgKzU0MzMsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICBwcmludGYgKCIgIHJnID0gMHgleFxuIiwgcmcpOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJvbmViCSUwIik7Ci0tI2xpbmUgOTI0ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgOTI2ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IERSQihyZyk7IFNDKDEpOwotIAotICAgICAgICAgfQotQEAgLTU0NDYsNyArNTQ0OCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm9uZWIJJTAiKTsKLS0jbGluZSA5MjcgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA5MjkgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQobW92KTsgRE0oTm9uZSwgU0FERFIpOyBTQygxKTsKLSAKLSAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1AQCAtNTQ2Myw3ICs1NDY1LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgib25lYgklZSEwIik7Ci0tI2xpbmUgOTIxICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgOTIzICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IERNKE5vbmUsIElNTVUoMikpOyBTQygxKTsKLSAKLSAgICAgICAgIH0KLUBAIC01NDc4LDcgKzU0ODAsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJvbmV3CSUwIik7Ci0tI2xpbmUgOTMyICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgOTM0ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IERSKEFYKTsgU0MoMSk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNTQ5Myw3ICs1NDk1LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgib25ldwklMCIpOwotLSNsaW5lIDkzNSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDkzNyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBEUihCQyk7IFNDKDEpOwotIAotICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLUBAIC01NTEwLDcgKzU1MTIsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJtb3YJJTAsICUxIik7Ci0tI2xpbmUgNjk5ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNzAxICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IERSKEIpOyBTTShOb25lLCBTQUREUik7Ci0gCi0gICAgICAgICB9Ci1AQCAtNTUyNSw3ICs1NTI3LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92CSUwLCAlZSExIik7Ci0tI2xpbmUgNjkzICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNjk1ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IERSKEIpOyBTTShOb25lLCBJTU1VKDIpKTsKLSAKLSAgICAgICAgIH0KLUBAIC01NTQwLDcgKzU1NDIsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJicgkhJSFhMCIpOwotLSNsaW5lIDM2OCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDM3MCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChicmFuY2gpOyBEQyhJTU1VKDMpKTsKLSAKLSAgICAgICAgIH0KLUBAIC01NTU1LDcgKzU1NTcsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJicgklIWEwIik7Ci0tI2xpbmUgMzcxICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMzczICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKGJyYW5jaCk7IERDKElNTVUoMikpOwotIAotICAgICAgICAgfQotQEAgLTU1NzAsNyArNTU3Miw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoImJyCSQlIWEwIik7Ci0tI2xpbmUgMzc0ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgMzc2ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKGJyYW5jaCk7IERDKHBjK0lNTVMoMikrMyk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNTU4NSw3ICs1NTg3LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiYnIJJCVhMCIpOwotLSNsaW5lIDM3NyAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDM3OSAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChicmFuY2gpOyBEQyhwYytJTU1TKDEpKzIpOwotIAotICAgICAgICAgfQotQEAgLTU1OTYsNyArNTU5OCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgY2FzZSAweGYzOgotICAgICAgICAgewotICAgICAgICAgICAvKiogMTExMSAwMHJnCQkJY2xyYgklMAkJCQkqLwotLSNsaW5lIDQ2NCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDQ2NiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBpbnQgcmcgQVUgPSBvcFswXSAmIDB4MDM7Ci0gICAgICAgICAgIGlmICh0cmFjZSkKLSAgICAgICAgICAgICB7Ci1AQCAtNTYwNiw3ICs1NjA4LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgcHJpbnRmICgiICByZyA9IDB4JXhcbiIsIHJnKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiY2xyYgklMCIpOwotLSNsaW5lIDQ2NCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDQ2NiAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBEUkIocmcpOyBTQygwKTsKLSAKLSAgICAgICAgIH0KLUBAIC01NjIxLDcgKzU2MjMsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJjbHJiCSUwIik7Ci0tI2xpbmUgNDY3ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNDY5ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKG1vdik7IERNKE5vbmUsIFNBRERSKTsgU0MoMCk7Ci0gCi0gICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotQEAgLTU2MzgsNyArNTY0MCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoImNscmIJJWUhMCIpOwotLSNsaW5lIDQ2MSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDQ2MyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBETShOb25lLCBJTU1VKDIpKTsgU0MoMCk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNTY1Myw3ICs1NjU1LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiY2xydwklMCIpOwotLSNsaW5lIDQ3MiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDQ3NCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBEUihBWCk7IFNDKDApOwotIAotICAgICAgICAgfQotQEAgLTU2NjgsNyArNTY3MCw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoImNscncJJTAiKTsKLS0jbGluZSA0NzUgInJsNzgtZGVjb2RlLm9wYyIKLSsjbGluZSA0NzcgInJsNzgtZGVjb2RlLm9wYyIKLSAgICAgICAgICAgSUQobW92KTsgRFIoQkMpOyBTQygwKTsKLSAKLSAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1AQCAtNTY4NSw3ICs1Njg3LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgibW92CSUwLCAlMSIpOwotLSNsaW5lIDcwNSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDcwNyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBEUihDKTsgU00oTm9uZSwgU0FERFIpOwotIAotICAgICAgICAgfQotQEAgLTU3MDAsNyArNTcwMiw3IEBAIHJsNzhfZGVjb2RlX29wY29kZSAodW5zaWduZWQgbG9uZyBwYyBBVSwKLSAgICAgICAgICAgICAgICAgICAgICBvcFswXSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICBTWU5UQVgoIm1vdgklMCwgJWUhMSIpOwotLSNsaW5lIDcwMiAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDcwNCAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChtb3YpOyBEUihDKTsgU00oTm9uZSwgSU1NVSgyKSk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNTcxNSw3ICs1NzE3LDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiY2FsbAkhJSFhMCIpOwotLSNsaW5lIDQyMSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDQyMyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChjYWxsKTsgREMoSU1NVSgzKSk7Ci0gCi0gICAgICAgICB9Ci1AQCAtNTczMCw3ICs1NzMyLDcgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiY2FsbAklIWEwIik7Ci0tI2xpbmUgNDI0ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNDI2ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKGNhbGwpOyBEQyhJTU1VKDIpKTsKLSAKLSAgICAgICAgIH0KLUBAIC01NzQ1LDcgKzU3NDcsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BbMF0pOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgU1lOVEFYKCJjYWxsCSQlIWEwIik7Ci0tI2xpbmUgNDI3ICJybDc4LWRlY29kZS5vcGMiCi0rI2xpbmUgNDI5ICJybDc4LWRlY29kZS5vcGMiCi0gICAgICAgICAgIElEKGNhbGwpOyBEQyhwYytJTU1TKDIpKzMpOwotIAotICAgICAgICAgfQotQEAgLTU3NjAsMTMgKzU3NjIsMTMgQEAgcmw3OF9kZWNvZGVfb3Bjb2RlICh1bnNpZ25lZCBsb25nIHBjIEFVLAotICAgICAgICAgICAgICAgICAgICAgIG9wWzBdKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgIFNZTlRBWCgiYnJrMSIpOwotLSNsaW5lIDM4NSAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDM4NyAicmw3OC1kZWNvZGUub3BjIgotICAgICAgICAgICBJRChicmVhayk7Ci0gCi0gICAgICAgICB9Ci0gICAgICAgYnJlYWs7Ci0gICB9Ci0tI2xpbmUgMTI5MCAicmw3OC1kZWNvZGUub3BjIgotKyNsaW5lIDEyOTIgInJsNzgtZGVjb2RlLm9wYyIKLSAKLSAgIHJldHVybiBybDc4LT5uX2J5dGVzOwotIH0KLWRpZmYgLS1naXQgYS9vcGNvZGVzL3JsNzgtZGVjb2RlLm9wYyBiL29wY29kZXMvcmw3OC1kZWNvZGUub3BjCi1pbmRleCA2MjEyZjA4Li5iMjVlNDQxIDEwMDY0NAotLS0tIGEvb3Bjb2Rlcy9ybDc4LWRlY29kZS5vcGMKLSsrKyBiL29wY29kZXMvcmw3OC1kZWNvZGUub3BjCi1AQCAtNTAsNyArNTAsOSBAQCB0eXBlZGVmIHN0cnVjdAotICNkZWZpbmUgVygpIHJsNzgtPnNpemUgPSBSTDc4X1dvcmQKLSAKLSAjZGVmaW5lIEFVIEFUVFJJQlVURV9VTlVTRUQKLS0jZGVmaW5lIEdFVEJZVEUoKSAobGQtPm9wIFtsZC0+cmw3OC0+bl9ieXRlcysrXSA9IGxkLT5nZXRieXRlIChsZC0+cHRyKSkKLSsKLSsjZGVmaW5lIE9QX0JVRl9MRU4gMjAKLSsjZGVmaW5lIEdFVEJZVEUoKSAobGQtPnJsNzgtPm5fYnl0ZXMgPCAoT1BfQlVGX0xFTiAtIDEpID8gbGQtPm9wIFtsZC0+cmw3OC0+bl9ieXRlcysrXSA9IGxkLT5nZXRieXRlIChsZC0+cHRyKTogMCkKLSAjZGVmaW5lIEIgKCh1bnNpZ25lZCBsb25nKSBHRVRCWVRFKCkpCi0gCi0gI2RlZmluZSBTWU5UQVgoeCkgcmw3OC0+c3ludGF4ID0geAotQEAgLTE2OCw3ICsxNzAsNyBAQCBybDc4X2RlY29kZV9vcGNvZGUgKHVuc2lnbmVkIGxvbmcgcGMgQVUsCi0gCQkgIFJMNzhfRGlzX0lzYSBpc2EpCi0gewotICAgTG9jYWxEYXRhIGxkcywgKiBsZCA9ICZsZHM7Ci0tICB1bnNpZ25lZCBjaGFyIG9wX2J1ZlsyMF0gPSB7MH07Ci0rICB1bnNpZ25lZCBjaGFyIG9wX2J1ZltPUF9CVUZfTEVOXSA9IHswfTsKLSAgIHVuc2lnbmVkIGNoYXIgKm9wID0gb3BfYnVmOwotICAgaW50IG9wMCwgb3AxOwotIAotLS0gCi0yLjcuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTk3NTIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTk3NTIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2M2E5OTMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy05NzUyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLUZyb20gYzUzZDJlNmQ3NDRkYTAwMGFhYWZlMDIzN2JjZWQwOTBhYWI2MjgxOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IE5pY2sgQ2xpZnRvbiA8bmlja2NAcmVkaGF0LmNvbT4KLURhdGU6IFdlZCwgMTQgSnVuIDIwMTcgMTE6Mjc6MTUgKzAxMDAKLVN1YmplY3Q6IFtQQVRDSF0gRml4IHBvdGVudGlhbCBhZGRyZXNzIHZpb2xhdGlvbnMgd2hlbiBwcm9jZXNzaW5nIGEgY29ycnVwdAotIEFscGhhIFZNQSBiaW5hcnkuCi0KLQlQUiBiaW51dGlscy8yMTU4OQotCSogdm1zLWFscGhhLmMgKF9iZmRfdm1zX2dldF92YWx1ZSk6IEFkZCBhbiBleHRyYSBwYXJhbWV0ZXIgLSB0aGUKLQltYXhpbXVtIHZhbHVlIGZvciB0aGUgYXNjaWMgcG9pbnRlci4gIENoZWNrIHRoYXQgbmFtZSBwcm9jZXNzaW5nCi0JZG9lcyBub3QgcmVhZCBiZXlvbmQgdGhpcyB2YWx1ZS4KLQkoX2JmZF92bXNfc2x1cnBfZXRpcik6IEFkZCBjaGVja3MgZm9yIGF0dGVtcHRzIHRvIHJlYWQgYmV5b25kIHRoZQotCWVuZCBvZiBldGlyIHJlY29yZC4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQ1ZFOiBDVkUtMjAxNy05NzUyCi1TaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KLQotLS0tCi0gYmZkL0NoYW5nZUxvZyAgIHwgIDkgKysrKysrKysrCi0gYmZkL3Ztcy1hbHBoYS5jIHwgNTEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCi0gMiBmaWxlcyBjaGFuZ2VkLCA1MCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKLQotSW5kZXg6IGdpdC9iZmQvQ2hhbmdlTG9nCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmZkL0NoYW5nZUxvZwotKysrIGdpdC9iZmQvQ2hhbmdlTG9nCi1AQCAtOSw2ICs5LDE1IEBACi0gCi0gMjAxNy0wNi0xNCAgTmljayBDbGlmdG9uICA8bmlja2NAcmVkaGF0LmNvbT4KLSAgCi0rICAgICAgIFBSIGJpbnV0aWxzLzIxNTg5Ci0rICAgICAgICogdm1zLWFscGhhLmMgKF9iZmRfdm1zX2dldF92YWx1ZSk6IEFkZCBhbiBleHRyYSBwYXJhbWV0ZXIgLSB0aGUKLSsgICAgICAgbWF4aW11bSB2YWx1ZSBmb3IgdGhlIGFzY2ljIHBvaW50ZXIuICBDaGVjayB0aGF0IG5hbWUgcHJvY2Vzc2luZwotKyAgICAgICBkb2VzIG5vdCByZWFkIGJleW9uZCB0aGlzIHZhbHVlLgotKyAgICAgICAoX2JmZF92bXNfc2x1cnBfZXRpcik6IEFkZCBjaGVja3MgZm9yIGF0dGVtcHRzIHRvIHJlYWQgYmV5b25kIHRoZQotKyAgICAgICBlbmQgb2YgZXRpciByZWNvcmQuCi0rCi0rMjAxNy0wNi0xNCAgTmljayBDbGlmdG9uICA8bmlja2NAcmVkaGF0LmNvbT4KLSsgCi0gICAgICAgIFBSIGJpbnV0aWxzLzIxNTc4Ci0gICAgICAgICogZWxmMzItc2guYyAoc2hfZWxmX3NldF9tYWNoX2Zyb21fZmxhZ3MpOiBGaXggY2hlY2sgZm9yIGludmFsaWQKLSAgICAgICAgZmxhZyB2YWx1ZS4KLUluZGV4OiBnaXQvYmZkL3Ztcy1hbHBoYS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmZkL3Ztcy1hbHBoYS5jCi0rKysgZ2l0L2JmZC92bXMtYWxwaGEuYwotQEAgLTE0NTYsNyArMTQ1Niw3IEBAIGRzdF9yZXRyaWV2ZV9sb2NhdGlvbiAoYmZkICphYmZkLCB1bnNpZ24KLSAvKiBXcml0ZSBtdWx0aXBsZSBieXRlcyB0byBzZWN0aW9uIGltYWdlLiAgKi8KLSAKLSBzdGF0aWMgYmZkX2Jvb2xlYW4KLS1pbWFnZV93cml0ZSAoYmZkICphYmZkLCB1bnNpZ25lZCBjaGFyICpwdHIsIGludCBzaXplKQotK2ltYWdlX3dyaXRlIChiZmQgKmFiZmQsIHVuc2lnbmVkIGNoYXIgKnB0ciwgdW5zaWduZWQgaW50IHNpemUpCi0gewotICNpZiBWTVNfREVCVUcKLSAgIF9iZmRfdm1zX2RlYnVnICg4LCAiaW1hZ2Vfd3JpdGUgZnJvbSAoJXAsICVkKSB0byAoJWxkKVxuIiwgcHRyLCBzaXplLAotQEAgLTE2MDMsMTQgKzE2MDMsMTYgQEAgX2JmZF92bXNfZXRpcl9uYW1lIChpbnQgY21kKQotICNkZWZpbmUgSElHSEJJVChvcCkgKChvcCAmIDB4ODAwMDAwMDBMKSA9PSAweDgwMDAwMDAwTCkKLSAKLSBzdGF0aWMgdm9pZAotLV9iZmRfdm1zX2dldF92YWx1ZSAoYmZkICphYmZkLCBjb25zdCB1bnNpZ25lZCBjaGFyICphc2NpYywKLStfYmZkX3Ztc19nZXRfdmFsdWUgKGJmZCAqYWJmZCwKLSsJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphc2NpYywKLSsJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICptYXhfYXNjaWMsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgICAgICAgIGJmZF92bWEgKnZtYSwKLSAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhbHBoYV92bXNfbGlua19oYXNoX2VudHJ5ICoqaHApCi0gewotICAgY2hhciBuYW1lWzI1N107Ci0tICBpbnQgbGVuOwotLSAgaW50IGk7Ci0rICB1bnNpZ25lZCBpbnQgbGVuOwotKyAgdW5zaWduZWQgaW50IGk7Ci0gICBzdHJ1Y3QgYWxwaGFfdm1zX2xpbmtfaGFzaF9lbnRyeSAqaDsKLSAKLSAgIC8qIE5vdCBsaW5raW5nLiAgRG8gbm90IHRyeSB0byByZXNvbHZlIHRoZSBzeW1ib2wuICAqLwotQEAgLTE2MjIsNiArMTYyNCwxNCBAQCBfYmZkX3Ztc19nZXRfdmFsdWUgKGJmZCAqYWJmZCwgY29uc3QgdW5zCi0gICAgIH0KLSAKLSAgIGxlbiA9ICphc2NpYzsKLSsgIGlmIChhc2NpYyArIGxlbiA+PSBtYXhfYXNjaWMpCi0rICAgIHsKLSsgICAgICBfYmZkX2Vycm9yX2hhbmRsZXIgKF8oIkNvcnJ1cHQgdm1zIHZhbHVlIikpOwotKyAgICAgICp2bWEgPSAwOwotKyAgICAgICpocCA9IE5VTEw7Ci0rICAgICAgcmV0dXJuOwotKyAgICB9Ci0rCi0gICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0gICAgIG5hbWVbaV0gPSBhc2NpY1tpICsgMV07Ci0gICBuYW1lW2ldID0gMDsKLUBAIC0xNzQxLDYgKzE3NTEsMTUgQEAgX2JmZF92bXNfc2x1cnBfZXRpciAoYmZkICphYmZkLCBzdHJ1Y3QgYgotICAgICAgIF9iZmRfaGV4ZHVtcCAoOCwgcHRyLCBjbWRfbGVuZ3RoIC0gNCwgMCk7Ci0gI2VuZGlmCi0gCi0rICAgICAgLyogUFIgMjE1ODk6IENoZWNrIGZvciBhIGNvcnJ1cHQgRVRJUiByZWNvcmQuICAqLwotKyAgICAgIGlmIChjbWRfbGVuZ3RoIDwgNCkKLSsJewotKwljb3JydXB0X2V0aXI6Ci0rCSAgX2JmZF9lcnJvcl9oYW5kbGVyIChfKCJDb3JydXB0IEVUSVIgcmVjb3JkIGVuY291bnRlcmVkIikpOwotKwkgIGJmZF9zZXRfZXJyb3IgKGJmZF9lcnJvcl9iYWRfdmFsdWUpOwotKwkgIHJldHVybiBGQUxTRTsKLSsJfQotKwotICAgICAgIHN3aXRjaCAoY21kKQotICAgICAgICAgewotICAgICAgICAgICAvKiBTdGFjayBnbG9iYWwKLUBAIC0xNzQ4LDcgKzE3NjcsNyBAQCBfYmZkX3Ztc19zbHVycF9ldGlyIChiZmQgKmFiZmQsIHN0cnVjdCBiCi0gCi0gICAgICAgICAgICAgIHN0YWNrIDMyIGJpdCB2YWx1ZSBvZiBzeW1ib2wgKGhpZ2ggYml0cyBzZXQgdG8gMCkuICAqLwotICAgICAgICAgY2FzZSBFVElSX19DX1NUQV9HQkw6Ci0tICAgICAgICAgIF9iZmRfdm1zX2dldF92YWx1ZSAoYWJmZCwgcHRyLCBpbmZvLCAmb3AxLCAmaCk7Ci0rICAgICAgICAgIF9iZmRfdm1zX2dldF92YWx1ZSAoYWJmZCwgcHRyLCBtYXhwdHIsIGluZm8sICZvcDEsICZoKTsKLSAgICAgICAgICAgX2JmZF92bXNfcHVzaCAoYWJmZCwgb3AxLCBhbHBoYV92bXNfc3ltX3RvX2N0eHQgKGgpKTsKLSAgICAgICAgICAgYnJlYWs7Ci0gCi1AQCAtMTc1Nyw2ICsxNzc2LDggQEAgX2JmZF92bXNfc2x1cnBfZXRpciAoYmZkICphYmZkLCBzdHJ1Y3QgYgotIAotICAgICAgICAgICAgICBzdGFjayAzMiBiaXQgdmFsdWUsIHNpZ24gZXh0ZW5kIHRvIDY0IGJpdC4gICovCi0gICAgICAgICBjYXNlIEVUSVJfX0NfU1RBX0xXOgotKwkgIGlmIChwdHIgKyA0ID49IG1heHB0cikKLSsJICAgIGdvdG8gY29ycnVwdF9ldGlyOwotICAgICAgICAgICBfYmZkX3Ztc19wdXNoIChhYmZkLCBiZmRfZ2V0bDMyIChwdHIpLCBSRUxDX05PTkUpOwotICAgICAgICAgICBicmVhazsKLSAKLUBAIC0xNzY1LDYgKzE3ODYsOCBAQCBfYmZkX3Ztc19zbHVycF9ldGlyIChiZmQgKmFiZmQsIHN0cnVjdCBiCi0gCi0gICAgICAgICAgICAgIHN0YWNrIDY0IGJpdCB2YWx1ZSBvZiBzeW1ib2wuICAqLwotICAgICAgICAgY2FzZSBFVElSX19DX1NUQV9RVzoKLSsJICBpZiAocHRyICsgOCA+PSBtYXhwdHIpCi0rCSAgICBnb3RvIGNvcnJ1cHRfZXRpcjsKLSAgICAgICAgICAgX2JmZF92bXNfcHVzaCAoYWJmZCwgYmZkX2dldGw2NCAocHRyKSwgUkVMQ19OT05FKTsKLSAgICAgICAgICAgYnJlYWs7Ci0gCi1AQCAtMTc3OCw2ICsxODAxLDggQEAgX2JmZF92bXNfc2x1cnBfZXRpciAoYmZkICphYmZkLCBzdHJ1Y3QgYgotICAgICAgICAgICB7Ci0gICAgICAgICAgICAgaW50IHBzZWN0OwotIAotKwkgICAgaWYgKHB0ciArIDEyID49IG1heHB0cikKLSsJICAgICAgZ290byBjb3JydXB0X2V0aXI7Ci0gICAgICAgICAgICAgcHNlY3QgPSBiZmRfZ2V0bDMyIChwdHIpOwotICAgICAgICAgICAgIGlmICgodW5zaWduZWQgaW50KSBwc2VjdCA+PSBQUklWIChzZWN0aW9uX2NvdW50KSkKLSAgICAgICAgICAgICAgIHsKLUBAIC0xODY3LDYgKzE4OTIsOCBAQCBfYmZkX3Ztc19zbHVycF9ldGlyIChiZmQgKmFiZmQsIHN0cnVjdCBiCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgICBpbnQgc2l6ZTsKLSAKLSsJICAgIGlmIChwdHIgKyA0ID49IG1heHB0cikKLSsJICAgICAgZ290byBjb3JydXB0X2V0aXI7Ci0gICAgICAgICAgICAgc2l6ZSA9IGJmZF9nZXRsMzIgKHB0cik7Ci0gICAgICAgICAgICAgX2JmZF92bXNfcG9wIChhYmZkLCAmb3AxLCAmcmVsMSk7Ci0gICAgICAgICAgICAgaWYgKHJlbDEgIT0gUkVMQ19OT05FKQotQEAgLTE4NzksNyArMTkwNiw3IEBAIF9iZmRfdm1zX3NsdXJwX2V0aXIgKGJmZCAqYWJmZCwgc3RydWN0IGIKLSAgICAgICAgICAgLyogU3RvcmUgZ2xvYmFsOiB3cml0ZSBzeW1ib2wgdmFsdWUKLSAgICAgICAgICAgICAgYXJnOiBjcwlnbG9iYWwgc3ltYm9sIG5hbWUuICAqLwotICAgICAgICAgY2FzZSBFVElSX19DX1NUT19HQkw6Ci0tICAgICAgICAgIF9iZmRfdm1zX2dldF92YWx1ZSAoYWJmZCwgcHRyLCBpbmZvLCAmb3AxLCAmaCk7Ci0rICAgICAgICAgIF9iZmRfdm1zX2dldF92YWx1ZSAoYWJmZCwgcHRyLCBtYXhwdHIsIGluZm8sICZvcDEsICZoKTsKLSAgICAgICAgICAgaWYgKGggJiYgaC0+c3ltKQotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIGlmIChoLT5zeW0tPnR5cCA9PSBFR1NEX19DX1NZTUcpCi1AQCAtMTkwMSw3ICsxOTI4LDcgQEAgX2JmZF92bXNfc2x1cnBfZXRpciAoYmZkICphYmZkLCBzdHJ1Y3QgYgotICAgICAgICAgICAvKiBTdG9yZSBjb2RlIGFkZHJlc3M6IHdyaXRlIGFkZHJlc3Mgb2YgZW50cnkgcG9pbnQKLSAgICAgICAgICAgICAgYXJnOiBjcwlnbG9iYWwgc3ltYm9sIG5hbWUgKHByb2NlZHVyZSkuICAqLwotICAgICAgICAgY2FzZSBFVElSX19DX1NUT19DQToKLS0gICAgICAgICAgX2JmZF92bXNfZ2V0X3ZhbHVlIChhYmZkLCBwdHIsIGluZm8sICZvcDEsICZoKTsKLSsgICAgICAgICAgX2JmZF92bXNfZ2V0X3ZhbHVlIChhYmZkLCBwdHIsIG1heHB0ciwgaW5mbywgJm9wMSwgJmgpOwotICAgICAgICAgICBpZiAoaCAmJiBoLT5zeW0pCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgaWYgKGgtPnN5bS0+ZmxhZ3MgJiBFR1NZX19WX05PUk0pCi1AQCAtMTk0Niw4ICsxOTczLDEwIEBAIF9iZmRfdm1zX3NsdXJwX2V0aXIgKGJmZCAqYWJmZCwgc3RydWN0IGIKLSAgICAgICAgICAgICAgZGEJZGF0YS4gICovCi0gICAgICAgICBjYXNlIEVUSVJfX0NfU1RPX0lNTToKLSAgICAgICAgICAgewotLSAgICAgICAgICAgIGludCBzaXplOwotKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBzaXplOwotIAotKwkgICAgaWYgKHB0ciArIDQgPj0gbWF4cHRyKQotKwkgICAgICBnb3RvIGNvcnJ1cHRfZXRpcjsKLSAgICAgICAgICAgICBzaXplID0gYmZkX2dldGwzMiAocHRyKTsKLSAgICAgICAgICAgICBpbWFnZV93cml0ZSAoYWJmZCwgcHRyICsgNCwgc2l6ZSk7Ci0gICAgICAgICAgIH0KLUBAIC0xOTYwLDcgKzE5ODksNyBAQCBfYmZkX3Ztc19zbHVycF9ldGlyIChiZmQgKmFiZmQsIHN0cnVjdCBiCi0gICAgICAgICAgICAgIHN0b3JlIGdsb2JhbCBsb25nd29yZDogc3RvcmUgMzJiaXQgdmFsdWUgb2Ygc3ltYm9sCi0gICAgICAgICAgICAgIGFyZzogY3MJc3ltYm9sIG5hbWUuICAqLwotICAgICAgICAgY2FzZSBFVElSX19DX1NUT19HQkxfTFc6Ci0tICAgICAgICAgIF9iZmRfdm1zX2dldF92YWx1ZSAoYWJmZCwgcHRyLCBpbmZvLCAmb3AxLCAmaCk7Ci0rICAgICAgICAgIF9iZmRfdm1zX2dldF92YWx1ZSAoYWJmZCwgcHRyLCBtYXhwdHIsIGluZm8sICZvcDEsICZoKTsKLSAjaWYgMAotICAgICAgICAgICBhYm9ydCAoKTsKLSAjZW5kaWYKLUBAIC0yMDEzLDcgKzIwNDIsNyBAQCBfYmZkX3Ztc19zbHVycF9ldGlyIChiZmQgKmFiZmQsIHN0cnVjdCBiCi0gICAgICAgICAgICAgIGRhCXNpZ25hdHVyZS4gICovCi0gCi0gICAgICAgICBjYXNlIEVUSVJfX0NfU1RDX0xQX1BTQjoKLS0gICAgICAgICAgX2JmZF92bXNfZ2V0X3ZhbHVlIChhYmZkLCBwdHIgKyA0LCBpbmZvLCAmb3AxLCAmaCk7Ci0rICAgICAgICAgIF9iZmRfdm1zX2dldF92YWx1ZSAoYWJmZCwgcHRyICsgNCwgbWF4cHRyLCBpbmZvLCAmb3AxLCAmaCk7Ci0gICAgICAgICAgIGlmIChoICYmIGgtPnN5bSkKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBpZiAoaC0+c3ltLT50eXAgPT0gRUdTRF9fQ19TWU1HKQotQEAgLTIxMDksNiArMjEzOCw4IEBAIF9iZmRfdm1zX3NsdXJwX2V0aXIgKGJmZCAqYWJmZCwgc3RydWN0IGIKLSAgICAgICAgICAgLyogQXVnbWVudCByZWxvY2F0aW9uIGJhc2U6IGluY3JlbWVudCBpbWFnZSBsb2NhdGlvbiBjb3VudGVyIGJ5IG9mZnNldAotICAgICAgICAgICAgICBhcmc6IGx3CW9mZnNldCB2YWx1ZS4gICovCi0gICAgICAgICBjYXNlIEVUSVJfX0NfQ1RMX0FVR1JCOgotKwkgIGlmIChwdHIgKyA0ID49IG1heHB0cikKLSsJICAgIGdvdG8gY29ycnVwdF9ldGlyOwotICAgICAgICAgICBvcDEgPSBiZmRfZ2V0bDMyIChwdHIpOwotICAgICAgICAgICBpbWFnZV9pbmNfcHRyIChhYmZkLCBvcDEpOwotICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTc1My5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTc1My5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQxMTQyYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTk3NTMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi1Gcm9tIDA0Zjk2M2ZkNDg5Y2FlNzI0YTYwMTQwZTEzOTg0NDE1YzIwNWY0YWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBOaWNrIENsaWZ0b24gPG5pY2tjQHJlZGhhdC5jb20+Ci1EYXRlOiBXZWQsIDE0IEp1biAyMDE3IDEwOjM1OjE2ICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIEZpeCBzZWctZmF1bHRzIGluIG9iamR1bXAgd2hlbiBkaXNhc3NlbWJsaW5nIGEgY29ycnVwdAotIHZlcnNhZG9zIGJpbmFyeS4KLQotCVBSIGJpbnV0aWxzLzIxNTkxCi0JKiB2ZXJzYWRvcy5jICh2ZXJzYWRvc19ta29iamVjdCk6IFplcm8gdGhlIGFsbG9jYXRlZCB0ZGF0YSBzdHJ1Y3R1cmUuCi0JKHByb2Nlc3Nfb3RyKTogQ2hlY2sgZm9yIGFuIGludmFsaWQgb2Zmc2V0IGluIHRoZSBvdHIgc3RydWN0dXJlLgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1DVkU6IENWRS0yMDE3LTk3NTMKLUNWRTogQ1ZFLTIwMTctOTc1NAotU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+Ci0KLS0tLQotIGJmZC9DaGFuZ2VMb2cgIHwgIDYgKysrKysrCi0gYmZkL3ZlcnNhZG9zLmMgfCAxMiArKysrKysrKy0tLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCi0KLUluZGV4OiBnaXQvYmZkL3ZlcnNhZG9zLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9iZmQvdmVyc2Fkb3MuYwotKysrIGdpdC9iZmQvdmVyc2Fkb3MuYwotQEAgLTE0OSw3ICsxNDksNyBAQCB2ZXJzYWRvc19ta29iamVjdCAoYmZkICphYmZkKQotICAgaWYgKGFiZmQtPnRkYXRhLnZlcnNhZG9zX2RhdGEgPT0gTlVMTCkKLSAgICAgewotICAgICAgIGJmZF9zaXplX3R5cGUgYW10ID0gc2l6ZW9mICh0ZGF0YV90eXBlKTsKLS0gICAgICB0ZGF0YV90eXBlICp0ZGF0YSA9IGJmZF9hbGxvYyAoYWJmZCwgYW10KTsKLSsgICAgICB0ZGF0YV90eXBlICp0ZGF0YSA9IGJmZF96YWxsb2MgKGFiZmQsIGFtdCk7Ci0gCi0gICAgICAgaWYgKHRkYXRhID09IE5VTEwpCi0gCXJldHVybiBGQUxTRTsKLUBAIC0zNDUsMTMgKzM0NSwxMyBAQCByZWxvY19ob3d0b190eXBlIHZlcnNhZG9zX2hvd3RvX3RhYmxlW10KLSB9OwotIAotIHN0YXRpYyBpbnQKLS1nZXRfb2Zmc2V0IChpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpwdHIpCi0rZ2V0X29mZnNldCAodW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgY2hhciAqcHRyKQotIHsKLSAgIGludCB2YWwgPSAwOwotIAotICAgaWYgKGxlbikKLSAgICAgewotLSAgICAgIGludCBpOwotKyAgICAgIHVuc2lnbmVkIGludCBpOwotIAotICAgICAgIHZhbCA9ICpwdHIrKzsKLSAgICAgICBpZiAodmFsICYgMHg4MCkKLUBAIC0zOTQsOSArMzk0LDEzIEBAIHByb2Nlc3Nfb3RyIChiZmQgKmFiZmQsIHN0cnVjdCBleHRfb3RyICoKLSAJICBpbnQgZmxhZyA9ICpzcmNwKys7Ci0gCSAgaW50IGVzZGlkcyA9IChmbGFnID4+IDUpICYgMHg3OwotIAkgIGludCBzaXplaW53b3JkcyA9ICgoZmxhZyA+PiAzKSAmIDEpID8gMiA6IDE7Ci0tCSAgaW50IG9mZnNldGxlbiA9IGZsYWcgJiAweDc7Ci0rCSAgdW5zaWduZWQgaW50IG9mZnNldGxlbiA9IGZsYWcgJiAweDc7Ci0gCSAgaW50IGo7Ci0gCi0rCSAgLyogUFIgMjE1OTE6IENoZWNrIGZvciBpbnZhbGlkIGxlbmd0aHMuICAqLwotKwkgIGlmIChzcmNwICsgZXNkaWRzICsgb2Zmc2V0bGVuID49IGVuZHApCi0rCSAgICByZXR1cm47Ci0rCi0gCSAgaWYgKGVzZGlkcyA9PSAwKQotIAkgICAgewotIAkgICAgICAvKiBBIHplcm8gZXNkaWQgbWVhbnMgdGhlIG5ldyBwYyBpcyB0aGUgb2Zmc2V0IGdpdmVuLiAgKi8KLUluZGV4OiBnaXQvYmZkL0NoYW5nZUxvZwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL2JmZC9DaGFuZ2VMb2cKLSsrKyBnaXQvYmZkL0NoYW5nZUxvZwotQEAgLTgsNiArOCwxMCBAQAotICAgICAgICAoaWVlZV9hcmNoaXZlX3ApOiBMaWtld2lzZS4KLSAKLSAyMDE3LTA2LTE0ICBOaWNrIENsaWZ0b24gIDxuaWNrY0ByZWRoYXQuY29tPgotKwotKyAgICAgICBQUiBiaW51dGlscy8yMTU5MQotKyAgICAgICAqIHZlcnNhZG9zLmMgKHZlcnNhZG9zX21rb2JqZWN0KTogWmVybyB0aGUgYWxsb2NhdGVkIHRkYXRhIHN0cnVjdHVyZS4KLSsgICAgICAgKHByb2Nlc3Nfb3RyKTogQ2hlY2sgZm9yIGFuIGludmFsaWQgb2Zmc2V0IGluIHRoZSBvdHIgc3RydWN0dXJlLgotICAKLSAgICAgICAgUFIgYmludXRpbHMvMjE1ODkKLSAgICAgICAgKiB2bXMtYWxwaGEuYyAoX2JmZF92bXNfZ2V0X3ZhbHVlKTogQWRkIGFuIGV4dHJhIHBhcmFtZXRlciAtIHRoZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy05NzU1LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy05NzU1LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWRjOTA5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTc1NS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLUZyb20gMGQ5NmU0ZGY0ODEyYzNiYWQ3N2MyMjlkZmVmNDdhOWJjMTE1YWMxMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206ICJILkouIEx1IiA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KLURhdGU6IFRodSwgMTUgSnVuIDIwMTcgMDY6NDA6MTcgLTA3MDAKLVN1YmplY3Q6IFtQQVRDSF0gaTM4Ni1kaXM6IENoZWNrIHZhbGlkIGJuZCByZWdpc3RlcgotCi1TaW5jZSB0aGVyZSBhcmUgb25seSA0IGJuZCByZWdpc3RlcnMsIHJldHVybiAiKGJhZCkiIGZvciByZWdpc3RlcgotbnVtYmVyID4gMy4KLQotCVBSIGJpbnV0aWxzLzIxNTk0Ci0JKiBpMzg2LWRpcy5jIChPUF9FX3JlZ2lzdGVyKTogQ2hlY2sgdmFsaWQgYm5kIHJlZ2lzdGVyLgotCShPUF9HKTogTGlrZXdpc2UuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgCi1DVkU6IENWRS0yMDE3LTk3NTUKLVNpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgotCi0tLS0KLSBvcGNvZGVzL0NoYW5nZUxvZyAgfCAgNiArKysrKysKLSBvcGNvZGVzL2kzODYtZGlzLmMgfCAxMCArKysrKysrKysrCi0gMiBmaWxlcyBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspCi0KLUluZGV4OiBnaXQvb3Bjb2Rlcy9DaGFuZ2VMb2cKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9vcGNvZGVzL0NoYW5nZUxvZwotKysrIGdpdC9vcGNvZGVzL0NoYW5nZUxvZwotQEAgLTEsMyArMSw5IEBACi0rMjAxNy0wNi0xNSAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgotKwotKwlQUiBiaW51dGlscy8yMTU5NAotKwkqIGkzODYtZGlzLmMgKE9QX0VfcmVnaXN0ZXIpOiBDaGVjayB2YWxpZCBibmQgcmVnaXN0ZXIuCi0rCShPUF9HKTogTGlrZXdpc2UuCi0rCi0gMjAxNy0wNi0xNSAgTmljayBDbGlmdG9uICA8bmlja2NAcmVkaGF0LmNvbT4KLSAKLSAJUFIgYmludXRpbHMvMjE1ODgKLUluZGV4OiBnaXQvb3Bjb2Rlcy9pMzg2LWRpcy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvb3Bjb2Rlcy9pMzg2LWRpcy5jCi0rKysgZ2l0L29wY29kZXMvaTM4Ni1kaXMuYwotQEAgLTE0OTM5LDYgKzE0OTM5LDExIEBAIE9QX0VfcmVnaXN0ZXIgKGludCBieXRlbW9kZSwgaW50IHNpemVmbGEKLSAgICAgICBuYW1lcyA9IGFkZHJlc3NfbW9kZSA9PSBtb2RlXzY0Yml0ID8gbmFtZXM2NCA6IG5hbWVzMzI7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGNhc2UgYm5kX21vZGU6Ci0rICAgICAgaWYgKHJlZyA+IDB4MykKLSsJewotKwkgIG9hcHBlbmQgKCIoYmFkKSIpOwotKwkgIHJldHVybjsKLSsJfQotICAgICAgIG5hbWVzID0gbmFtZXNfYm5kOwotICAgICAgIGJyZWFrOwotICAgICBjYXNlIGluZGlyX3ZfbW9kZToKLUBAIC0xNTQ4Myw2ICsxNTQ4OCwxMSBAQCBPUF9HIChpbnQgYnl0ZW1vZGUsIGludCBzaXplZmxhZykKLSAgICAgICBvYXBwZW5kIChuYW1lczY0W21vZHJtLnJlZyArIGFkZF0pOwotICAgICAgIGJyZWFrOwotICAgICBjYXNlIGJuZF9tb2RlOgotKyAgICAgIGlmIChtb2RybS5yZWcgPiAweDMpCi0rCXsKLSsJICBvYXBwZW5kICgiKGJhZCkiKTsKLSsJICByZXR1cm47Ci0rCX0KLSAgICAgICBvYXBwZW5kIChuYW1lc19ibmRbbW9kcm0ucmVnXSk7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGNhc2Ugdl9tb2RlOgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy05NzU2LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy05NzU2LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTFkMGJlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTc1Ni5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLUZyb20gY2QzZWE3YzY5YWNjNTA0NWViMjhmOWJmODBkOTIzMTE2ZTE1ZTRmNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IE5pY2sgQ2xpZnRvbiA8bmlja2NAcmVkaGF0LmNvbT4KLURhdGU6IFRodSwgMTUgSnVuIDIwMTcgMTM6MjY6NTQgKzAxMDAKLVN1YmplY3Q6IFtQQVRDSF0gUHJldmVudCBhZGRyZXNzIHZpb2xhdGlvbiBwcm9ibGVtIHdoZW4gZGlzYXNzZW1ibGluZyBjb3JydXB0Ci0gYWFyY2g2NCBiaW5hcnkuCi0KLQlQUiBiaW51dGlscy8yMTU5NQotCSogYWFyY2g2NC1kaXMuYyAoYWFyY2g2NF9leHRfbGRzdF9yZWdsaXN0KTogQ2hlY2sgZm9yIGFuIG91dCBvZgotCXJhbmdlIHZhbHVlLgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1DVkU6IENWRS0yMDE3LTk3NTYKLVNpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgotCi0tLS0KLSBvcGNvZGVzL0NoYW5nZUxvZyAgICAgfCA2ICsrKysrKwotIG9wY29kZXMvYWFyY2g2NC1kaXMuYyB8IDMgKysrCi0gMiBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKLQotSW5kZXg6IGdpdC9vcGNvZGVzL0NoYW5nZUxvZwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL29wY29kZXMvQ2hhbmdlTG9nCi0rKysgZ2l0L29wY29kZXMvQ2hhbmdlTG9nCi1AQCAtNiw2ICs2LDEyIEBACi0gCi0gMjAxNy0wNi0xNSAgTmljayBDbGlmdG9uICA8bmlja2NAcmVkaGF0LmNvbT4KLSAKLSsJUFIgYmludXRpbHMvMjE1OTUKLSsJKiBhYXJjaDY0LWRpcy5jIChhYXJjaDY0X2V4dF9sZHN0X3JlZ2xpc3QpOiBDaGVjayBmb3IgYW4gb3V0IG9mCi0rCXJhbmdlIHZhbHVlLgotKwotKzIwMTctMDYtMTUgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQHJlZGhhdC5jb20+Ci0rCi0gCVBSIGJpbnV0aWxzLzIxNTg4Ci0gCSogcmw3OC1kZWNvZGUub3BjIChPUF9CVUZfTEVOKTogRGVmaW5lLgotIAkoR0VUQllURSk6IENoZWNrIGZvciB0aGUgaW5kZXggZXhjZWVkaW5nIE9QX0JVRl9MRU4uCi1JbmRleDogZ2l0L29wY29kZXMvYWFyY2g2NC1kaXMuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL29wY29kZXMvYWFyY2g2NC1kaXMuYwotKysrIGdpdC9vcGNvZGVzL2FhcmNoNjQtZGlzLmMKLUBAIC00MDksNiArNDA5LDkgQEAgYWFyY2g2NF9leHRfbGRzdF9yZWdsaXN0IChjb25zdCBhYXJjaDY0XwotICAgaW5mby0+cmVnbGlzdC5maXJzdF9yZWdubyA9IGV4dHJhY3RfZmllbGQgKEZMRF9SdCwgY29kZSwgMCk7Ci0gICAvKiBvcGNvZGUgKi8KLSAgIHZhbHVlID0gZXh0cmFjdF9maWVsZCAoRkxEX29wY29kZSwgY29kZSwgMCk7Ci0rICAvKiBQUiAyMTU5NTogQ2hlY2sgZm9yIGEgYm9ndXMgdmFsdWUuICAqLwotKyAgaWYgKHZhbHVlID49IEFSUkFZX1NJWkUgKGRhdGEpKQotKyAgICByZXR1cm4gMDsKLSAgIGlmIChleHBlY3RlZF9udW0gIT0gZGF0YVt2YWx1ZV0ubnVtX2VsZW1lbnRzIHx8IGRhdGFbdmFsdWVdLmlzX3Jlc2VydmVkKQotICAgICByZXR1cm4gMDsKLSAgIGluZm8tPnJlZ2xpc3QubnVtX3JlZ3MgPSBkYXRhW3ZhbHVlXS5udW1fcmVnczsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTk1NC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTk1NC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE5ZDdlYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTk5NTQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi1Gcm9tIDA0ZTE1YjRhOTQ2MmNiMWFlODE5ZTg3OGE2MDA5ODI5YWFiODAyMGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBOaWNrIENsaWZ0b24gPG5pY2tjQHJlZGhhdC5jb20+Ci1EYXRlOiBNb24sIDI2IEp1biAyMDE3IDE1OjQ2OjM0ICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIEZpeCBhZGRyZXNzIHZpb2xhdGlvbiBwYXJzaW5nIGEgY29ycnVwdCB0ZXhoZXggZm9ybWF0IGZpbGUuCi0KLQlQUiBiaW51dGlscy8yMTY3MAotCSogdGVraGV4LmMgKGdldHZhbHVlKTogQ2hlY2sgZm9yIHRoZSBzb3VyY2UgcG9pbnRlciBleGNlZWRpbmcgdGhlCi0JZW5kIHBvaW50ZXIgYmVmb3JlIHRoZSBmaXJzdCBieXRlIGlzIHJlYWQuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLUNWRTogQ1ZFXzIwMTctOTk1NAotU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+Ci0KLS0tLQotIGJmZC9DaGFuZ2VMb2cgfCA2ICsrKysrKwotIGJmZC90ZWtoZXguYyAgfCA2ICsrKysrLQotIDIgZmlsZXMgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQotCi1JbmRleDogZ2l0L2JmZC90ZWtoZXguYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL2JmZC90ZWtoZXguYwotKysrIGdpdC9iZmQvdGVraGV4LmMKLUBAIC0yNzMsNiArMjczLDkgQEAgZ2V0dmFsdWUgKGNoYXIgKipzcmNwLCBiZmRfdm1hICp2YWx1ZXAsCi0gICBiZmRfdm1hIHZhbHVlID0gMDsKLSAgIHVuc2lnbmVkIGludCBsZW47Ci0gCi0rICBpZiAoc3JjID49IGVuZHApCi0rICAgIHJldHVybiBGQUxTRTsKLSsKLSAgIGlmICghSVNIRVggKCpzcmMpKQotICAgICByZXR1cm4gRkFMU0U7Ci0gCi1AQCAtNTE0LDkgKzUxNywxMCBAQCBwYXNzX292ZXIgKGJmZCAqYWJmZCwgYmZkX2Jvb2xlYW4gKCpmdW5jCi0gICAvKiBUbyB0aGUgZnJvbnQgb2YgdGhlIGZpbGUuICAqLwotICAgaWYgKGJmZF9zZWVrIChhYmZkLCAoZmlsZV9wdHIpIDAsIFNFRUtfU0VUKSAhPSAwKQotICAgICByZXR1cm4gRkFMU0U7Ci0rCi0gICB3aGlsZSAoISBpc19lb2YpCi0gICAgIHsKLS0gICAgICBjaGFyIHNyY1tNQVhDSFVOS107Ci0rICAgICAgc3RhdGljIGNoYXIgc3JjW01BWENIVU5LXTsKLSAgICAgICBjaGFyIHR5cGU7Ci0gCi0gICAgICAgLyogRmluZCBmaXJzdCAnJScuICAqLwotSW5kZXg6IGdpdC9iZmQvQ2hhbmdlTG9nCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmZkL0NoYW5nZUxvZwotKysrIGdpdC9iZmQvQ2hhbmdlTG9nCi1AQCAtMSwzICsxLDkgQEAKLSsyMDE3LTA2LTI2ICBOaWNrIENsaWZ0b24gIDxuaWNrY0ByZWRoYXQuY29tPgotKyAKLSsgICAgICAgUFIgYmludXRpbHMvMjE2NzAKLSsgICAgICAgKiB0ZWtoZXguYyAoZ2V0dmFsdWUpOiBDaGVjayBmb3IgdGhlIHNvdXJjZSBwb2ludGVyIGV4Y2VlZGluZyB0aGUKLSsgICAgICAgZW5kIHBvaW50ZXIgYmVmb3JlIHRoZSBmaXJzdCBieXRlIGlzIHJlYWQuCi0rCi0gMjAxNy0wNi0xNSAgTmljayBDbGlmdG9uICA8bmlja2NAcmVkaGF0LmNvbT4KLSAKLSAgICAgICAgUFIgYmludXRpbHMvMjE1ODIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTk1NV8xLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy05OTU1XzEucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3NDY3MGYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy05OTU1XzEucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNjggKzAsMCBAQAotRnJvbSBjZmQxNGE1MDBlMDQ4NTM3NDU5NjIzNGRlNGRiMTBlODhlYmM3NjE4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTmljayBDbGlmdG9uIDxuaWNrY0ByZWRoYXQuY29tPgotRGF0ZTogTW9uLCAyNiBKdW4gMjAxNyAxNToyNTowOCArMDEwMAotU3ViamVjdDogW1BBVENIXSBGaXggYWRkcmVzcyB2aW9sYXRpb25zIHdoZW4gYXRlbXB0aW5nIHRvIHBhcnNlIGZ1enplZAotIGJpbmFyaWVzLgotCi0JUFIgYmludXRpbHMvMjE2NjUKLWJmZAkqIG9wbmNscy5jIChnZXRfYnVpbGRfaWQpOiBDaGVjayB0aGF0IHRoZSBzZWN0aW9uIGlzIGJlaWcgZW5vdWdoCi0JdG8gY29udGFpbiB0aGUgd2hvbGUgbm90ZS4KLQkqIGNvbXByZXNzLmMgKGJmZF9nZXRfZnVsbF9zZWN0aW9uX2NvbnRlbnRzKTogQ2hlY2sgZm9yIGFuZCByZWplY3QKLQlhIHNlY3Rpb24gd2hvZXMgc2l6ZSBpcyBncmVhdGVyIHRoYW4gdGhlIHNpemUgb2YgdGhlIGVudGlyZSBmaWxlLgotCSogZWxmMzItdjg1MC5jICh2ODUwX2VsZl9jb3B5X25vdGVzKTogQWxsb3cgZm9yIHRoZSBvdXB1dCB0byBub3QKLQljb250YWluIGEgbm90ZXMgc2VjdGlvbi4KLQotYmludXRpbHMqIG9iamR1bXAuYyAoZGlzYXNzZW1ibGVfc2VjdGlvbik6IFNraXAgYW55IHNlY3Rpb24gdGhhdCBpcyBiaWdnZXIKLQl0aGFuIHRoZSBlbnRpcmUgZmlsZS4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCAKLUNWRTogQ1ZFLTIwMTctOTk1NSAjMQotU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+Ci0KLS0tLQotIGJmZC9DaGFuZ2VMb2cgICAgICB8IDEwICsrKysrKysrKysKLSBiZmQvY29tcHJlc3MuYyAgICAgfCAgNiArKysrKysKLSBiZmQvZWxmMzItdjg1MC5jICAgfCAgNCArKystCi0gYmZkL29wbmNscy5jICAgICAgIHwgMTggKysrKysrKysrKysrKysrKy0tCi0gYmludXRpbHMvQ2hhbmdlTG9nIHwgIDYgKysrKysrCi0gYmludXRpbHMvb2JqZHVtcC5jIHwgIDQgKystLQotIDYgZmlsZXMgY2hhbmdlZCwgNDMgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKLQotSW5kZXg6IGdpdC9iZmQvY29tcHJlc3MuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL2JmZC9jb21wcmVzcy5jCi0rKysgZ2l0L2JmZC9jb21wcmVzcy5jCi1AQCAtMjM5LDYgKzIzOSwxMiBAQCBiZmRfZ2V0X2Z1bGxfc2VjdGlvbl9jb250ZW50cyAoYmZkICphYmZkCi0gICAgICAgKnB0ciA9IE5VTEw7Ci0gICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgIH0KLSsgIGVsc2UgaWYgKGJmZF9nZXRfZmlsZV9zaXplIChhYmZkKSA+IDAKLSsJICAgJiYgc3ogPiAoYmZkX3NpemVfdHlwZSkgYmZkX2dldF9maWxlX3NpemUgKGFiZmQpKQotKyAgICB7Ci0rICAgICAgKnB0ciA9IE5VTEw7Ci0rICAgICAgcmV0dXJuIEZBTFNFOwotKyAgICB9Ci0gCi0gICBzd2l0Y2ggKHNlYy0+Y29tcHJlc3Nfc3RhdHVzKQotICAgICB7Ci1JbmRleDogZ2l0L2JmZC9lbGYzMi12ODUwLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9iZmQvZWxmMzItdjg1MC5jCi0rKysgZ2l0L2JmZC9lbGYzMi12ODUwLmMKLUBAIC0yNDUwLDcgKzI0NTAsOSBAQCB2ODUwX2VsZl9jb3B5X25vdGVzIChiZmQgKmliZmQsIGJmZCAqb2JmCi0gCUJGRF9BU1NFUlQgKGJmZF9tYWxsb2NfYW5kX2dldF9zZWN0aW9uIChpYmZkLCBpbm90ZXMsICYgaWNvbnQpKTsKLSAKLSAgICAgICBpZiAoKG9jb250ID0gZWxmX3NlY3Rpb25fZGF0YSAob25vdGVzKS0+dGhpc19oZHIuY29udGVudHMpID09IE5VTEwpCi0tCUJGRF9BU1NFUlQgKGJmZF9tYWxsb2NfYW5kX2dldF9zZWN0aW9uIChvYmZkLCBvbm90ZXMsICYgb2NvbnQpKTsKLSsJLyogSWYgdGhlIG91dHB1dCBpcyBiZWluZyBzdHJpcHBlZCB0aGVuIGl0IGlzIHBvc3NpYmxlIGZvcgotKwkgICB0aGUgbm90ZXMgc2VjdGlvbiB0byBkaXNhcHBlYXIuICBJbiB0aGlzIGNhc2UgZG8gbm90aGluZy4gICovCi0rCXJldHVybjsKLSAKLSAgICAgICAvKiBDb3B5L292ZXJ3cml0ZSBub3RlcyBmcm9tIHRoZSBpbnB1dCB0byB0aGUgb3V0cHV0LiAgKi8KLSAgICAgICBtZW1jcHkgKG9jb250LCBpY29udCwgYmZkX3NlY3Rpb25fc2l6ZSAob2JmZCwgb25vdGVzKSk7Ci1JbmRleDogZ2l0L2JmZC9vcG5jbHMuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL2JmZC9vcG5jbHMuYwotKysrIGdpdC9iZmQvb3BuY2xzLmMKLUBAIC0xNzc2LDYgKzE3NzYsNyBAQCBnZXRfYnVpbGRfaWQgKGJmZCAqYWJmZCkKLSAgIEVsZl9FeHRlcm5hbF9Ob3RlICplbm90ZTsKLSAgIGJmZF9ieXRlICpjb250ZW50czsKLSAgIGFzZWN0aW9uICpzZWN0OwotKyAgYmZkX3NpemVfdHlwZSBzaXplOwotIAotICAgQkZEX0FTU0VSVCAoYWJmZCk7Ci0gCi1AQCAtMTc5MCw4ICsxNzkxLDkgQEAgZ2V0X2J1aWxkX2lkIChiZmQgKmFiZmQpCi0gICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgIH0KLSAKLSsgIHNpemUgPSBiZmRfZ2V0X3NlY3Rpb25fc2l6ZSAoc2VjdCk7Ci0gICAvKiBGSVhNRTogU2hvdWxkIHdlIHN1cHBvcnQgc21hbGxlciBidWlsZC1pZCBub3RlcyA/ICAqLwotLSAgaWYgKGJmZF9nZXRfc2VjdGlvbl9zaXplIChzZWN0KSA8IDB4MjQpCi0rICBpZiAoc2l6ZSA8IDB4MjQpCi0gICAgIHsKLSAgICAgICBiZmRfc2V0X2Vycm9yIChiZmRfZXJyb3JfaW52YWxpZF9vcGVyYXRpb24pOwotICAgICAgIHJldHVybiBOVUxMOwotQEAgLTE4MDQsNiArMTgwNiwxNyBAQCBnZXRfYnVpbGRfaWQgKGJmZCAqYWJmZCkKLSAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgfQotIAotKyAgLyogRklYTUU6IFBhcmFub2lhIC0gYWxsb3cgZm9yIGNvbXByZXNzZWQgYnVpbGQtaWQgc2VjdGlvbnMuCi0rICAgICBNYXliZSB3ZSBzaG91bGQgY29tcGxhaW4gaWYgdGhpcyBzaXplIGlzIGRpZmZlcmVudCBmcm9tCi0rICAgICB0aGUgb25lIG9idGFpbmVkIGFib3ZlLi4uICAqLwotKyAgc2l6ZSA9IGJmZF9nZXRfc2VjdGlvbl9zaXplIChzZWN0KTsKLSsgIGlmIChzaXplIDwgc2l6ZW9mIChFbGZfRXh0ZXJuYWxfTm90ZSkpCi0rICAgIHsKLSsgICAgICBiZmRfc2V0X2Vycm9yIChiZmRfZXJyb3JfaW52YWxpZF9vcGVyYXRpb24pOwotKyAgICAgIGZyZWUgKGNvbnRlbnRzKTsKLSsgICAgICByZXR1cm4gTlVMTDsKLSsgICAgfQotKwotICAgZW5vdGUgPSAoRWxmX0V4dGVybmFsX05vdGUgKikgY29udGVudHM7Ci0gICBpbm90ZS50eXBlID0gSF9HRVRfMzIgKGFiZmQsIGVub3RlLT50eXBlKTsKLSAgIGlub3RlLm5hbWVzeiA9IEhfR0VUXzMyIChhYmZkLCBlbm90ZS0+bmFtZXN6KTsKLUBAIC0xODE1LDcgKzE4MjgsOCBAQCBnZXRfYnVpbGRfaWQgKGJmZCAqYWJmZCkKLSAgIGlmIChpbm90ZS5kZXNjc3ogPT0gMAotICAgICAgIHx8IGlub3RlLnR5cGUgIT0gTlRfR05VX0JVSUxEX0lECi0gICAgICAgfHwgaW5vdGUubmFtZXN6ICE9IDQgLyogc2l6ZW9mICJHTlUiICAqLwotLSAgICAgIHx8IHN0cmNtcCAoaW5vdGUubmFtZWRhdGEsICJHTlUiKSAhPSAwKQotKyAgICAgIHx8IHN0cm5jbXAgKGlub3RlLm5hbWVkYXRhLCAiR05VIiwgNCkgIT0gMAotKyAgICAgIHx8IHNpemUgPCAoMTIgKyBCRkRfQUxJR04gKGlub3RlLm5hbWVzeiwgNCkgKyBpbm90ZS5kZXNjc3opKQotICAgICB7Ci0gICAgICAgZnJlZSAoY29udGVudHMpOwotICAgICAgIGJmZF9zZXRfZXJyb3IgKGJmZF9lcnJvcl9pbnZhbGlkX29wZXJhdGlvbik7Ci1JbmRleDogZ2l0L2JpbnV0aWxzL29iamR1bXAuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL2JpbnV0aWxzL29iamR1bXAuYwotKysrIGdpdC9iaW51dGlscy9vYmpkdW1wLmMKLUBAIC0yMDQ4LDcgKzIwNDgsNyBAQCBkaXNhc3NlbWJsZV9zZWN0aW9uIChiZmQgKmFiZmQsIGFzZWN0aW9uCi0gICAgIHJldHVybjsKLSAKLSAgIGRhdGFzaXplID0gYmZkX2dldF9zZWN0aW9uX3NpemUgKHNlY3Rpb24pOwotLSAgaWYgKGRhdGFzaXplID09IDApCi0rICBpZiAoZGF0YXNpemUgPT0gMCB8fCBkYXRhc2l6ZSA+PSAoYmZkX3NpemVfdHlwZSkgYmZkX2dldF9maWxlX3NpemUgKGFiZmQpKQotICAgICByZXR1cm47Ci0gCi0gICBpZiAoc3RhcnRfYWRkcmVzcyA9PSAoYmZkX3ZtYSkgLTEKLUBAIC0yOTEyLDcgKzI5MTIsNyBAQCBkdW1wX3RhcmdldF9zcGVjaWZpYyAoYmZkICphYmZkKQotIHN0YXRpYyB2b2lkCi0gZHVtcF9zZWN0aW9uIChiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWN0aW9uLCB2b2lkICpkdW1teSBBVFRSSUJVVEVfVU5VU0VEKQotIHsKLS0gIGJmZF9ieXRlICpkYXRhID0gMDsKLSsgIGJmZF9ieXRlICpkYXRhID0gTlVMTDsKLSAgIGJmZF9zaXplX3R5cGUgZGF0YXNpemU7Ci0gICBiZmRfdm1hIGFkZHJfb2Zmc2V0OwotICAgYmZkX3ZtYSBzdGFydF9vZmZzZXQ7Ci1JbmRleDogZ2l0L2JmZC9DaGFuZ2VMb2cKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9iZmQvQ2hhbmdlTG9nCi0rKysgZ2l0L2JmZC9DaGFuZ2VMb2cKLUBAIC0xLDQgKzEsMTQgQEAKLSAyMDE3LTA2LTI2ICBOaWNrIENsaWZ0b24gIDxuaWNrY0ByZWRoYXQuY29tPgotKwotKyAgICAgICBQUiBiaW51dGlscy8yMTY2NQotKyAgICAgICAqIG9wbmNscy5jIChnZXRfYnVpbGRfaWQpOiBDaGVjayB0aGF0IHRoZSBzZWN0aW9uIGlzIGJlaWcgZW5vdWdoCi0rICAgICAgIHRvIGNvbnRhaW4gdGhlIHdob2xlIG5vdGUuCi0rICAgICAgICogY29tcHJlc3MuYyAoYmZkX2dldF9mdWxsX3NlY3Rpb25fY29udGVudHMpOiBDaGVjayBmb3IgYW5kIHJlamVjdAotKyAgICAgICBhIHNlY3Rpb24gd2hvZXMgc2l6ZSBpcyBncmVhdGVyIHRoYW4gdGhlIHNpemUgb2YgdGhlIGVudGlyZSBmaWxlLgotKyAgICAgICAqIGVsZjMyLXY4NTAuYyAodjg1MF9lbGZfY29weV9ub3Rlcyk6IEFsbG93IGZvciB0aGUgb3VwdXQgdG8gbm90Ci0rICAgICAgIGNvbnRhaW4gYSBub3RlcyBzZWN0aW9uLgotKwotKzIwMTctMDYtMjYgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQHJlZGhhdC5jb20+Ci0gIAotICAgICAgICBQUiBiaW51dGlscy8yMTY3MAotICAgICAgICAqIHRla2hleC5jIChnZXR2YWx1ZSk6IENoZWNrIGZvciB0aGUgc291cmNlIHBvaW50ZXIgZXhjZWVkaW5nIHRoZQotSW5kZXg6IGdpdC9iaW51dGlscy9DaGFuZ2VMb2cKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9iaW51dGlscy9DaGFuZ2VMb2cKLSsrKyBnaXQvYmludXRpbHMvQ2hhbmdlTG9nCi1AQCAtMSwzICsxLDkgQEAKLSsyMDE3LTA2LTI2ICBOaWNrIENsaWZ0b24gIDxuaWNrY0ByZWRoYXQuY29tPgotKyAKLSsgICAgICAgUFIgYmludXRpbHMvMjE2NjUKLSsgICAgICAgKiBvYmpkdW1wLmMgKGRpc2Fzc2VtYmxlX3NlY3Rpb24pOiBTa2lwIGFueSBzZWN0aW9uIHRoYXQgaXMgYmlnZ2VyCi0rICAgICAgIHRoYW4gdGhlIGVudGlyZSBmaWxlLgotKwotIDIwMTctMDQtMDMgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQHJlZGhhdC5jb20+Ci0gCi0gICAgICAgIFBSIGJpbnV0aWxzLzIxMzQ1CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTk5NTVfMi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTk1NV8yLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTUyOTVmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTk1NV8yLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLUZyb20gMDYzMGI0OWM0NzBjYTJlM2MzZjc0ZGE0YzdlNGZmNjM0NDBkZDcxZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206ICJILkouIEx1IiA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KLURhdGU6IE1vbiwgMjYgSnVuIDIwMTcgMDk6MjQ6NDkgLTA3MDAKLVN1YmplY3Q6IFtQQVRDSF0gQ2hlY2sgZmlsZSBzaXplIGJlZm9yZSBnZXR0aW5nIHNlY3Rpb24gY29udGVudHMKLQotRG9uJ3QgY2hlY2sgdGhlIHNlY3Rpb24gc2l6ZSBpbiBiZmRfZ2V0X2Z1bGxfc2VjdGlvbl9jb250ZW50cyBzaW5jZQotdGhlIHNpemUgb2YgYSBkZWNvbXByZXNzZWQgc2VjdGlvbiBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlIGZpbGUgc2l6ZS4KLUluc3RlYWQsIGNoZWNrIGZpbGUgc2l6ZSBpbiBfYmZkX2dlbmVyaWNfZ2V0X3NlY3Rpb25fY29udGVudHMuCi0KLQlQUiBiaW51dGlscy8yMTY2NQotCSogY29tcHJlc3MuYyAoYmZkX2dldF9mdWxsX3NlY3Rpb25fY29udGVudHMpOiBEb24ndCBjaGVjayB0aGUKLQlmaWxlIHNpemUgaGVyZS4KLQkqIGxpYmJmZC5jIChfYmZkX2dlbmVyaWNfZ2V0X3NlY3Rpb25fY29udGVudHMpOiBDaGVjayBmb3IgYW5kCi0JcmVqZWN0IGEgc2VjdGlvbiB3aG9lcyBzaXplICsgb2Zmc2V0IGlzIGdyZWF0ZXIgdGhhbiB0aGUgc2l6ZQotCW9mIHRoZSBlbnRpcmUgZmlsZS4KLQkoX2JmZF9nZW5lcmljX2dldF9zZWN0aW9uX2NvbnRlbnRzX2luX3dpbmRvdyk6IExpa2V3aXNlLgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1DVkU6IENWRS0yMDE3LTk5NTUgIzIKLVNpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgotCi0tLS0KLSBiZmQvQ2hhbmdlTG9nICB8IDEwICsrKysrKysrKy0KLSBiZmQvY29tcHJlc3MuYyB8ICA4ICstLS0tLS0tCi0gYmZkL2xpYmJmZC5jICAgfCAxNyArKysrKysrKysrKysrKysrLQotIDMgZmlsZXMgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKLQotSW5kZXg6IGdpdC9iZmQvY29tcHJlc3MuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL2JmZC9jb21wcmVzcy5jCi0rKysgZ2l0L2JmZC9jb21wcmVzcy5jCi1AQCAtMjM5LDEyICsyMzksNiBAQCBiZmRfZ2V0X2Z1bGxfc2VjdGlvbl9jb250ZW50cyAoYmZkICphYmZkCi0gICAgICAgKnB0ciA9IE5VTEw7Ci0gICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgIH0KLS0gIGVsc2UgaWYgKGJmZF9nZXRfZmlsZV9zaXplIChhYmZkKSA+IDAKLS0JICAgJiYgc3ogPiAoYmZkX3NpemVfdHlwZSkgYmZkX2dldF9maWxlX3NpemUgKGFiZmQpKQotLSAgICB7Ci0tICAgICAgKnB0ciA9IE5VTEw7Ci0tICAgICAgcmV0dXJuIEZBTFNFOwotLSAgICB9Ci0gCi0gICBzd2l0Y2ggKHNlYy0+Y29tcHJlc3Nfc3RhdHVzKQotICAgICB7Ci1AQCAtMjYwLDcgKzI1NCw3IEBAIGJmZF9nZXRfZnVsbF9zZWN0aW9uX2NvbnRlbnRzIChiZmQgKmFiZmQKLSAJCSAgLyogeGdldHRleHQ6Yy1mb3JtYXQgKi8KLSAJCSAgKF8oImVycm9yOiAlQiglQSkgaXMgdG9vIGxhcmdlICglI2x4IGJ5dGVzKSIpLAotIAkJICBhYmZkLCBzZWMsIChsb25nKSBzeik7Ci0tCSAgICByZXR1cm4gRkFMU0U7Ci0rCSAgICAgIHJldHVybiBGQUxTRTsKLSAJICAgIH0KLSAJfQotIAotSW5kZXg6IGdpdC9iZmQvbGliYmZkLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9iZmQvbGliYmZkLmMKLSsrKyBnaXQvYmZkL2xpYmJmZC5jCi1AQCAtNzgwLDYgKzc4MCw3IEBAIF9iZmRfZ2VuZXJpY19nZXRfc2VjdGlvbl9jb250ZW50cyAoYmZkICoKLSAJCQkJICAgYmZkX3NpemVfdHlwZSBjb3VudCkKLSB7Ci0gICBiZmRfc2l6ZV90eXBlIHN6OwotKyAgZmlsZV9wdHIgZmlsZXN6OwotICAgaWYgKGNvdW50ID09IDApCi0gICAgIHJldHVybiBUUlVFOwotIAotQEAgLTgwMiw4ICs4MDMsMTUgQEAgX2JmZF9nZW5lcmljX2dldF9zZWN0aW9uX2NvbnRlbnRzIChiZmQgKgotICAgICBzeiA9IHNlY3Rpb24tPnJhd3NpemU7Ci0gICBlbHNlCi0gICAgIHN6ID0gc2VjdGlvbi0+c2l6ZTsKLSsgIGZpbGVzeiA9IGJmZF9nZXRfZmlsZV9zaXplIChhYmZkKTsKLSsgIGlmIChmaWxlc3ogPCAwKQotKyAgICB7Ci0rICAgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgKi8KLSsgICAgICBhYm9ydCAoKTsKLSsgICAgfQotICAgaWYgKG9mZnNldCArIGNvdW50IDwgY291bnQKLS0gICAgICB8fCBvZmZzZXQgKyBjb3VudCA+IHN6KQotKyAgICAgIHx8IG9mZnNldCArIGNvdW50ID4gc3oKLSsgICAgICB8fCAoc2VjdGlvbi0+ZmlsZXBvcyArIG9mZnNldCArIHN6KSA+IChiZmRfc2l6ZV90eXBlKSBmaWxlc3opCi0gICAgIHsKLSAgICAgICBiZmRfc2V0X2Vycm9yIChiZmRfZXJyb3JfaW52YWxpZF9vcGVyYXRpb24pOwotICAgICAgIHJldHVybiBGQUxTRTsKLUBAIC04MjYsNiArODM0LDcgQEAgX2JmZF9nZW5lcmljX2dldF9zZWN0aW9uX2NvbnRlbnRzX2luX3dpbgotIHsKLSAjaWZkZWYgVVNFX01NQVAKLSAgIGJmZF9zaXplX3R5cGUgc3o7Ci0rICBmaWxlX3B0ciBmaWxlc3o7Ci0gCi0gICBpZiAoY291bnQgPT0gMCkKLSAgICAgcmV0dXJuIFRSVUU7Ci1AQCAtODU4LDcgKzg2NywxMyBAQCBfYmZkX2dlbmVyaWNfZ2V0X3NlY3Rpb25fY29udGVudHNfaW5fd2luCi0gICAgIHN6ID0gc2VjdGlvbi0+cmF3c2l6ZTsKLSAgIGVsc2UKLSAgICAgc3ogPSBzZWN0aW9uLT5zaXplOwotKyAgZmlsZXN6ID0gYmZkX2dldF9maWxlX3NpemUgKGFiZmQpOwotKyAgICB7Ci0rICAgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgKi8KLSsgICAgICBhYm9ydCAoKTsKLSsgICAgfQotICAgaWYgKG9mZnNldCArIGNvdW50ID4gc3oKLSsgICAgICB8fCAoc2VjdGlvbi0+ZmlsZXBvcyArIG9mZnNldCArIHN6KSA+IChiZmRfc2l6ZV90eXBlKSBmaWxlc3oKLSAgICAgICB8fCAhIGJmZF9nZXRfZmlsZV93aW5kb3cgKGFiZmQsIHNlY3Rpb24tPmZpbGVwb3MgKyBvZmZzZXQsIGNvdW50LCB3LAotIAkJCQlUUlVFKSkKLSAgICAgcmV0dXJuIEZBTFNFOwotSW5kZXg6IGdpdC9iZmQvQ2hhbmdlTG9nCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmZkL0NoYW5nZUxvZwotKysrIGdpdC9iZmQvQ2hhbmdlTG9nCi1AQCAtMSwzICsxLDEzIEBACi0rMjAxNy0wNi0yNiAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgotKwotKyAgICAgICBQUiBiaW51dGlscy8yMTY2NQotKyAgICAgICAqIGNvbXByZXNzLmMgKGJmZF9nZXRfZnVsbF9zZWN0aW9uX2NvbnRlbnRzKTogRG9uJ3QgY2hlY2sgdGhlCi0rICAgICAgIGZpbGUgc2l6ZSBoZXJlLgotKyAgICAgICAqIGxpYmJmZC5jIChfYmZkX2dlbmVyaWNfZ2V0X3NlY3Rpb25fY29udGVudHMpOiBDaGVjayBmb3IgYW5kCi0rICAgICAgIHJlamVjdCBhIHNlY3Rpb24gd2hvZXMgc2l6ZSArIG9mZnNldCBpcyBncmVhdGVyIHRoYW4gdGhlIHNpemUKLSsgICAgICAgb2YgdGhlIGVudGlyZSBmaWxlLgotKyAgICAgICAoX2JmZF9nZW5lcmljX2dldF9zZWN0aW9uX2NvbnRlbnRzX2luX3dpbmRvdyk6IExpa2V3aXNlLgotKwotIDIwMTctMDYtMjYgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQHJlZGhhdC5jb20+Ci0gCi0gICAgICAgIFBSIGJpbnV0aWxzLzIxNjY1CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTk5NTVfMy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTk1NV8zLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjY3YzRlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTk1NV8zLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotRnJvbSAxZjQ3M2UzZDBhZDI4NTE5NTkzNGU2YTA3N2M3ZWQzMmFmZTY2NDM3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogIkguSi4gTHUiIDxoamwudG9vbHNAZ21haWwuY29tPgotRGF0ZTogTW9uLCAyNiBKdW4gMjAxNyAxNTo0NzoxNiAtMDcwMAotU3ViamVjdDogW1BBVENIXSBBZGQgYSBtaXNzaW5nIGxpbmUgdG8KLSBfYmZkX2dlbmVyaWNfZ2V0X3NlY3Rpb25fY29udGVudHNfaW5fd2luZG93Ci0KLQlQUiBiaW51dGlscy8yMTY2NQotCSogbGliYmZkLmMgKF9iZmRfZ2VuZXJpY19nZXRfc2VjdGlvbl9jb250ZW50c19pbl93aW5kb3cpOiBBZGQKLQlhIG1pc3NpbmcgbGluZS4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQ1ZFOiBDVkUtMjAxNy05OTU1ICMzCi1TaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KLQotLS0tCi0gYmZkL0NoYW5nZUxvZyB8IDYgKysrKysrCi0gYmZkL2xpYmJmZC5jICB8IDEgKwotIDIgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspCi0KLUluZGV4OiBnaXQvYmZkL2xpYmJmZC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmZkL2xpYmJmZC5jCi0rKysgZ2l0L2JmZC9saWJiZmQuYwotQEAgLTg2OCw2ICs4NjgsNyBAQCBfYmZkX2dlbmVyaWNfZ2V0X3NlY3Rpb25fY29udGVudHNfaW5fd2luCi0gICBlbHNlCi0gICAgIHN6ID0gc2VjdGlvbi0+c2l6ZTsKLSAgIGZpbGVzeiA9IGJmZF9nZXRfZmlsZV9zaXplIChhYmZkKTsKLSsgIGlmIChmaWxlc3ogPCAwKQotICAgICB7Ci0gICAgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgKi8KLSAgICAgICBhYm9ydCAoKTsKLUluZGV4OiBnaXQvYmZkL0NoYW5nZUxvZwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL2JmZC9DaGFuZ2VMb2cKLSsrKyBnaXQvYmZkL0NoYW5nZUxvZwotQEAgLTEsNiArMSwxMiBAQAotIDIwMTctMDYtMjYgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KLSAKLSAgICAgICAgUFIgYmludXRpbHMvMjE2NjUKLSsgICAgICAgKiBsaWJiZmQuYyAoX2JmZF9nZW5lcmljX2dldF9zZWN0aW9uX2NvbnRlbnRzX2luX3dpbmRvdyk6IEFkZAotKyAgICAgICBhIG1pc3NpbmcgbGluZS4KLSsKLSsyMDE3LTA2LTI2ICBILkouIEx1ICA8aG9uZ2ppdS5sdUBpbnRlbC5jb20+Ci0rCi0rICAgICAgIFBSIGJpbnV0aWxzLzIxNjY1Ci0gICAgICAgICogY29tcHJlc3MuYyAoYmZkX2dldF9mdWxsX3NlY3Rpb25fY29udGVudHMpOiBEb24ndCBjaGVjayB0aGUKLSAgICAgICAgZmlsZSBzaXplIGhlcmUuCi0gICAgICAgICogbGliYmZkLmMgKF9iZmRfZ2VuZXJpY19nZXRfc2VjdGlvbl9jb250ZW50cyk6IENoZWNrIGZvciBhbmQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTk1NV80LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy05OTU1XzQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZDUyOWEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy05OTU1XzQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi1Gcm9tIGFiMjdmODBjNWRjZWFhMjNjNGJhN2Y2MmMwZDVkMjJhNWQ1ZGQ3YTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBQZWRybyBBbHZlcyA8cGFsdmVzQHJlZGhhdC5jb20+Ci1EYXRlOiBUdWUsIDI3IEp1biAyMDE3IDAwOjIxOjI1ICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIEZpeCBHREIgcmVncmVzc2lvbnMgY2F1c2VkIGJ5IHByZXZpb3VzCi0gYmZkX2dldF9zZWN0aW9uX2NvbnRlbnRzIGNoYW5nZXMKLQotUmVmOiBodHRwczovL3NvdXJjZXdhcmUub3JnL21sL2JpbnV0aWxzLzIwMTctMDYvbXNnMDAzNDMuaHRtbAotCi1iZmQvQ2hhbmdlTG9nOgotMjAxNy0wNi0yNiAgUGVkcm8gQWx2ZXMgIDxwYWx2ZXNAcmVkaGF0LmNvbT4KLQotCVBSIGJpbnV0aWxzLzIxNjY1Ci0JKiBsaWJiZmQuYyAoX2JmZF9nZW5lcmljX2dldF9zZWN0aW9uX2NvbnRlbnRzKTogQWRkICJjb3VudCIsIG5vdAotCSJzeiIuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLUNWRTogQ1ZFLTIwMTctOTk1NSAjNAotU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+Ci0KLS0tLQotIGJmZC9DaGFuZ2VMb2cgfCA2ICsrKysrKwotIGJmZC9saWJiZmQuYyAgfCAyICstCi0gMiBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotSW5kZXg6IGdpdC9iZmQvQ2hhbmdlTG9nCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmZkL0NoYW5nZUxvZwotKysrIGdpdC9iZmQvQ2hhbmdlTG9nCi1AQCAtMSwzICsxLDkgQEAKLSsyMDE3LTA2LTI2ICBQZWRybyBBbHZlcyAgPHBhbHZlc0ByZWRoYXQuY29tPgotKwotKwlQUiBiaW51dGlscy8yMTY2NQotKwkqIGxpYmJmZC5jIChfYmZkX2dlbmVyaWNfZ2V0X3NlY3Rpb25fY29udGVudHMpOiBBZGQgImNvdW50Iiwgbm90Ci0rCSJzeiIuCi0rCi0gMjAxNy0wNi0yNiAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgotIAotICAgICAgICBQUiBiaW51dGlscy8yMTY2NQotSW5kZXg6IGdpdC9iZmQvbGliYmZkLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9iZmQvbGliYmZkLmMKLSsrKyBnaXQvYmZkL2xpYmJmZC5jCi1AQCAtODExLDcgKzgxMSw3IEBAIF9iZmRfZ2VuZXJpY19nZXRfc2VjdGlvbl9jb250ZW50cyAoYmZkICoKLSAgICAgfQotICAgaWYgKG9mZnNldCArIGNvdW50IDwgY291bnQKLSAgICAgICB8fCBvZmZzZXQgKyBjb3VudCA+IHN6Ci0tICAgICAgfHwgKHNlY3Rpb24tPmZpbGVwb3MgKyBvZmZzZXQgKyBzeikgPiAoYmZkX3NpemVfdHlwZSkgZmlsZXN6KQotKyAgICAgIHx8IChzZWN0aW9uLT5maWxlcG9zICsgb2Zmc2V0ICsgY291bnQpID4gKGJmZF9zaXplX3R5cGUpIGZpbGVzeikKLSAgICAgewotICAgICAgIGJmZF9zZXRfZXJyb3IgKGJmZF9lcnJvcl9pbnZhbGlkX29wZXJhdGlvbik7Ci0gICAgICAgcmV0dXJuIEZBTFNFOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy05OTU1XzUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTk5NTVfNS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEzYmQzNy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTk5NTVfNS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLUZyb20gNzIxMWFlNTAxZWIwZGUxMDQ0OTgzZjJkZmIwMDA5MWE1OGZiZDY2YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEFsYW4gTW9kcmEgPGFtb2RyYUBnbWFpbC5jb20+Ci1EYXRlOiBUdWUsIDI3IEp1biAyMDE3IDA5OjQ1OjA0ICswOTMwCi1TdWJqZWN0OiBbUEFUQ0hdIE1vcmUgZml4ZXMgZm9yIGJmZF9nZXRfc2VjdGlvbl9jb250ZW50cyBjaGFuZ2UKLQotCVBSIGJpbnV0aWxzLzIxNjY1Ci0JKiBsaWJiZmQuYyAoX2JmZF9nZW5lcmljX2dldF9zZWN0aW9uX2NvbnRlbnRzKTogRGVsZXRlIGFib3J0LgotCVVzZSB1bnNpZ25lZCBmaWxlIHBvaW50ZXIgdHlwZSwgYW5kIHJlbW92ZSBjYXN0LgotCSogbGliYmZkLmMgKF9iZmRfZ2VuZXJpY19nZXRfc2VjdGlvbl9jb250ZW50c19pbl93aW5kb3cpOiBMaWtld2lzZS4KLQlBZGQgImNvdW50Iiwgbm90ICJzeiIuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLUNWRTogQ1ZFLTIwMTctOTk1NSAjNQotU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+Ci0KLS0tLQotIGJmZC9DaGFuZ2VMb2cgfCAgOCArKysrKysrKwotIGJmZC9saWJiZmQuYyAgfCAxOCArKysrLS0tLS0tLS0tLS0tLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQotCi1JbmRleDogZ2l0L2JmZC9DaGFuZ2VMb2cKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9iZmQvQ2hhbmdlTG9nCi0rKysgZ2l0L2JmZC9DaGFuZ2VMb2cKLUBAIC0xLDMgKzEsMTEgQEAKLSsyMDE3LTA2LTI3ICBBbGFuIE1vZHJhICA8YW1vZHJhQGdtYWlsLmNvbT4KLSsKLSsJUFIgYmludXRpbHMvMjE2NjUKLSsJKiBsaWJiZmQuYyAoX2JmZF9nZW5lcmljX2dldF9zZWN0aW9uX2NvbnRlbnRzKTogRGVsZXRlIGFib3J0LgotKwlVc2UgdW5zaWduZWQgZmlsZSBwb2ludGVyIHR5cGUsIGFuZCByZW1vdmUgY2FzdC4KLSsJKiBsaWJiZmQuYyAoX2JmZF9nZW5lcmljX2dldF9zZWN0aW9uX2NvbnRlbnRzX2luX3dpbmRvdyk6IExpa2V3aXNlLgotKwlBZGQgImNvdW50Iiwgbm90ICJzeiIuCi0rCi0gMjAxNy0wNi0yNiAgUGVkcm8gQWx2ZXMgIDxwYWx2ZXNAcmVkaGF0LmNvbT4KLSAKLSAJUFIgYmludXRpbHMvMjE2NjUKLUluZGV4OiBnaXQvYmZkL2xpYmJmZC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmZkL2xpYmJmZC5jCi0rKysgZ2l0L2JmZC9saWJiZmQuYwotQEAgLTc4MCw3ICs3ODAsNyBAQCBfYmZkX2dlbmVyaWNfZ2V0X3NlY3Rpb25fY29udGVudHMgKGJmZCAqCi0gCQkJCSAgIGJmZF9zaXplX3R5cGUgY291bnQpCi0gewotICAgYmZkX3NpemVfdHlwZSBzejsKLS0gIGZpbGVfcHRyIGZpbGVzejsKLSsgIHVmaWxlX3B0ciBmaWxlc3o7Ci0gICBpZiAoY291bnQgPT0gMCkKLSAgICAgcmV0dXJuIFRSVUU7Ci0gCi1AQCAtODA0LDE0ICs4MDQsOSBAQCBfYmZkX2dlbmVyaWNfZ2V0X3NlY3Rpb25fY29udGVudHMgKGJmZCAqCi0gICBlbHNlCi0gICAgIHN6ID0gc2VjdGlvbi0+c2l6ZTsKLSAgIGZpbGVzeiA9IGJmZF9nZXRfZmlsZV9zaXplIChhYmZkKTsKLS0gIGlmIChmaWxlc3ogPCAwKQotLSAgICB7Ci0tICAgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgKi8KLS0gICAgICBhYm9ydCAoKTsKLS0gICAgfQotICAgaWYgKG9mZnNldCArIGNvdW50IDwgY291bnQKLSAgICAgICB8fCBvZmZzZXQgKyBjb3VudCA+IHN6Ci0tICAgICAgfHwgKHNlY3Rpb24tPmZpbGVwb3MgKyBvZmZzZXQgKyBjb3VudCkgPiAoYmZkX3NpemVfdHlwZSkgZmlsZXN6KQotKyAgICAgIHx8IHNlY3Rpb24tPmZpbGVwb3MgKyBvZmZzZXQgKyBjb3VudCA+IGZpbGVzeikKLSAgICAgewotICAgICAgIGJmZF9zZXRfZXJyb3IgKGJmZF9lcnJvcl9pbnZhbGlkX29wZXJhdGlvbik7Ci0gICAgICAgcmV0dXJuIEZBTFNFOwotQEAgLTgzNCw3ICs4MjksNyBAQCBfYmZkX2dlbmVyaWNfZ2V0X3NlY3Rpb25fY29udGVudHNfaW5fd2luCi0gewotICNpZmRlZiBVU0VfTU1BUAotICAgYmZkX3NpemVfdHlwZSBzejsKLS0gIGZpbGVfcHRyIGZpbGVzejsKLSsgIHVmaWxlX3B0ciBmaWxlc3o7Ci0gCi0gICBpZiAoY291bnQgPT0gMCkKLSAgICAgcmV0dXJuIFRSVUU7Ci1AQCAtODY4LDEzICs4NjMsOCBAQCBfYmZkX2dlbmVyaWNfZ2V0X3NlY3Rpb25fY29udGVudHNfaW5fd2luCi0gICBlbHNlCi0gICAgIHN6ID0gc2VjdGlvbi0+c2l6ZTsKLSAgIGZpbGVzeiA9IGJmZF9nZXRfZmlsZV9zaXplIChhYmZkKTsKLS0gIGlmIChmaWxlc3ogPCAwKQotLSAgICB7Ci0tICAgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgKi8KLS0gICAgICBhYm9ydCAoKTsKLS0gICAgfQotICAgaWYgKG9mZnNldCArIGNvdW50ID4gc3oKLS0gICAgICB8fCAoc2VjdGlvbi0+ZmlsZXBvcyArIG9mZnNldCArIHN6KSA+IChiZmRfc2l6ZV90eXBlKSBmaWxlc3oKLSsgICAgICB8fCBzZWN0aW9uLT5maWxlcG9zICsgb2Zmc2V0ICsgY291bnQgPiBmaWxlc3oKLSAgICAgICB8fCAhIGJmZF9nZXRfZmlsZV93aW5kb3cgKGFiZmQsIHNlY3Rpb24tPmZpbGVwb3MgKyBvZmZzZXQsIGNvdW50LCB3LAotIAkJCQlUUlVFKSkKLSAgICAgcmV0dXJuIEZBTFNFOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy05OTU1XzYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTk5NTVfNi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM2NDI5YS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTk5NTVfNi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLUZyb20gZWE5YWFmYzQxYTc2NGU0ZTJkYmI4OGE3YjAzMWU4ODZiNDgxYjk5YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEFsYW4gTW9kcmEgPGFtb2RyYUBnbWFpbC5jb20+Ci1EYXRlOiBUdWUsIDI3IEp1biAyMDE3IDE0OjQzOjQ5ICswOTMwCi1TdWJqZWN0OiBbUEFUQ0hdIFdhcm5pbmcgZml4Ci0KLQlQUiBiaW51dGlscy8yMTY2NQotCSogbGliYmZkLmMgKF9iZmRfZ2VuZXJpY19nZXRfc2VjdGlvbl9jb250ZW50cyk6IFdhcm5pbmcgZml4LgotCShfYmZkX2dlbmVyaWNfZ2V0X3NlY3Rpb25fY29udGVudHNfaW5fd2luZG93KTogTGlrZXdpc2UuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLUNWRTogQ1ZFLTIwMTctOTk1NSAjNgotU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+Ci0KLS0tLQotIGJmZC9DaGFuZ2VMb2cgfCAxMiArKysrKysrKystLS0KLSBiZmQvbGliYmZkLmMgIHwgIDQgKystLQotIDIgZmlsZXMgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKLQotSW5kZXg6IGdpdC9iZmQvbGliYmZkLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9iZmQvbGliYmZkLmMKLSsrKyBnaXQvYmZkL2xpYmJmZC5jCi1AQCAtODA2LDcgKzgwNiw3IEBAIF9iZmRfZ2VuZXJpY19nZXRfc2VjdGlvbl9jb250ZW50cyAoYmZkICoKLSAgIGZpbGVzeiA9IGJmZF9nZXRfZmlsZV9zaXplIChhYmZkKTsKLSAgIGlmIChvZmZzZXQgKyBjb3VudCA8IGNvdW50Ci0gICAgICAgfHwgb2Zmc2V0ICsgY291bnQgPiBzegotLSAgICAgIHx8IHNlY3Rpb24tPmZpbGVwb3MgKyBvZmZzZXQgKyBjb3VudCA+IGZpbGVzeikKLSsgICAgICB8fCAodWZpbGVfcHRyKSBzZWN0aW9uLT5maWxlcG9zICsgb2Zmc2V0ICsgY291bnQgPiBmaWxlc3opCi0gICAgIHsKLSAgICAgICBiZmRfc2V0X2Vycm9yIChiZmRfZXJyb3JfaW52YWxpZF9vcGVyYXRpb24pOwotICAgICAgIHJldHVybiBGQUxTRTsKLUBAIC04NjQsNyArODY0LDcgQEAgX2JmZF9nZW5lcmljX2dldF9zZWN0aW9uX2NvbnRlbnRzX2luX3dpbgotICAgICBzeiA9IHNlY3Rpb24tPnNpemU7Ci0gICBmaWxlc3ogPSBiZmRfZ2V0X2ZpbGVfc2l6ZSAoYWJmZCk7Ci0gICBpZiAob2Zmc2V0ICsgY291bnQgPiBzegotLSAgICAgIHx8IHNlY3Rpb24tPmZpbGVwb3MgKyBvZmZzZXQgKyBjb3VudCA+IGZpbGVzegotKyAgICAgIHx8ICh1ZmlsZV9wdHIpIHNlY3Rpb24tPmZpbGVwb3MgKyBvZmZzZXQgKyBjb3VudCA+IGZpbGVzegotICAgICAgIHx8ICEgYmZkX2dldF9maWxlX3dpbmRvdyAoYWJmZCwgc2VjdGlvbi0+ZmlsZXBvcyArIG9mZnNldCwgY291bnQsIHcsCi0gCQkJCVRSVUUpKQotICAgICByZXR1cm4gRkFMU0U7Ci1JbmRleDogZ2l0L2JmZC9DaGFuZ2VMb2cKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9iZmQvQ2hhbmdlTG9nCi0rKysgZ2l0L2JmZC9DaGFuZ2VMb2cKLUBAIC0xLDUgKzEsMTEgQEAKLSAyMDE3LTA2LTI3ICBBbGFuIE1vZHJhICA8YW1vZHJhQGdtYWlsLmNvbT4KLSAKLSsgICAgICAgUFIgYmludXRpbHMvMjE2NjUKLSsgICAgICAgKiBsaWJiZmQuYyAoX2JmZF9nZW5lcmljX2dldF9zZWN0aW9uX2NvbnRlbnRzKTogV2FybmluZyBmaXguCi0rICAgICAgIChfYmZkX2dlbmVyaWNfZ2V0X3NlY3Rpb25fY29udGVudHNfaW5fd2luZG93KTogTGlrZXdpc2UuCi0rCi0rMjAxNy0wNi0yNyAgQWxhbiBNb2RyYSAgPGFtb2RyYUBnbWFpbC5jb20+Ci0rCi0gCVBSIGJpbnV0aWxzLzIxNjY1Ci0gCSogbGliYmZkLmMgKF9iZmRfZ2VuZXJpY19nZXRfc2VjdGlvbl9jb250ZW50cyk6IERlbGV0ZSBhYm9ydC4KLSAJVXNlIHVuc2lnbmVkIGZpbGUgcG9pbnRlciB0eXBlLCBhbmQgcmVtb3ZlIGNhc3QuCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL0NWRS0yMDE3LTk5NTVfNy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTk1NV83LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2FlNjNiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTk1NV83LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotRnJvbSA2MGEwMjA0MmJhY2Y4ZDI1ODE0NDMwMDgwYWRkYTYxZWQwODZiY2E2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTmljayBDbGlmdG9uIDxuaWNrY0ByZWRoYXQuY29tPgotRGF0ZTogRnJpLCAzMCBKdW4gMjAxNyAxMTowMzozNyArMDEwMAotU3ViamVjdDogW1BBVENIXSBGaXggZmFpbHVyZXMgaW4gTU1JWCBsaW5rZXIgdGVzdHMgaW50cm9kdWNlZCBieSBmaXggZm9yIFBSCi0gMjE2NjUuCi0KLQlQUiBiaW51dGlscy8yMTY2NQotCSogb2JqZHVtcC5jIChkaXNhc3NlbWJsZV9zZWN0aW9uKTogTW92ZSBjaGVjayBmb3IgYW4gb3ZlcmxhcmdlCi0Jc2VjdGlvbiB0byBqdXN0IGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBvZiBtZW1vcnkuICBEbyBub3QgY2hlY2sKLQlzZWN0aW9uIHNpemUgYWdhaW5zdCBmaWxlIHNpemUsIGJ1dCBpbnN0ZWFkIHVzZSBhbiBhcmJpdHJhcnkgMkdiCi0JbGltaXQuICBJc3N1ZSBhIHdhcm5pbmcgbWVzc2FnZSBpZiB0aGUgc2VjdGlvbiBpcyB0b28gYmlnLgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1DVkU6IENWRS0yMDE3LTk5NTUgIzcKLVNpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgotCi0tLS0KLSBiaW51dGlscy9DaGFuZ2VMb2cgfCAgOCArKysrKysrKwotIGJpbnV0aWxzL29iamR1bXAuYyB8IDI1ICsrKysrKysrKysrKysrKysrKysrKysrKy0KLSAyIGZpbGVzIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotSW5kZXg6IGdpdC9iaW51dGlscy9vYmpkdW1wLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9iaW51dGlscy9vYmpkdW1wLmMKLSsrKyBnaXQvYmludXRpbHMvb2JqZHVtcC5jCi1AQCAtMjA0OCw3ICsyMDQ4LDcgQEAgZGlzYXNzZW1ibGVfc2VjdGlvbiAoYmZkICphYmZkLCBhc2VjdGlvbgotICAgICByZXR1cm47Ci0gCi0gICBkYXRhc2l6ZSA9IGJmZF9nZXRfc2VjdGlvbl9zaXplIChzZWN0aW9uKTsKLS0gIGlmIChkYXRhc2l6ZSA9PSAwIHx8IGRhdGFzaXplID49IChiZmRfc2l6ZV90eXBlKSBiZmRfZ2V0X2ZpbGVfc2l6ZSAoYWJmZCkpCi0rICBpZiAoZGF0YXNpemUgPT0gMCkKLSAgICAgcmV0dXJuOwotIAotICAgaWYgKHN0YXJ0X2FkZHJlc3MgPT0gKGJmZF92bWEpIC0xCi1AQCAtMjExMiw2ICsyMTEyLDI5IEBAIGRpc2Fzc2VtYmxlX3NlY3Rpb24gKGJmZCAqYWJmZCwgYXNlY3Rpb24KLSAgICAgfQotICAgcmVsX3BwZW5kID0gcmVsX3BwICsgcmVsX2NvdW50OwotIAotKyAgLyogUFIgMjE2NjU6IENoZWNrIGZvciBvdmVybGFyZ2UgZGF0YXNpemVzLgotKyAgICAgTm90ZSAtIHdlIHVzZWQgdG8gY2hlY2sgZm9yICJkYXRhc2l6ZSA+IGJmZF9nZXRfZmlsZV9zaXplIChhYmZkKSIgYnV0Ci0rICAgICB0aGlzIGZhaWxzIHdoZW4gdXNpbmcgY29tcHJlc3NlZCBzZWN0aW9ucyBvciBjb21wcmVzc2VkIGZpbGUgZm9ybWF0cwotKyAgICAgKGVnIE1NTywgdGVraGV4KS4KLSsKLSsgICAgIFRoZSBjYWxsIHRvIHhtYWxsb2MgYmVsb3cgd2lsbCBmYWlsIGlmIHRvbyBtdWNoIG1lbW9yeSBpcyByZXF1ZXN0ZWQsCi0rICAgICB3aGljaCB3aWxsIGNhdGNoIHRoZSBwcm9ibGVtIGluIHRoZSBub3JtYWwgdXNlIGNhc2UuICBCdXQgaWYgYSBtZW1vcnkKLSsgICAgIGNoZWNrZXIgaXMgaW4gdXNlLCBlZyB2YWxncmluZCBvciBzYW5pdGl6ZSwgdGhlbiBhbiBleGNlcHRpb24gd2lsbAotKyAgICAgYmUgc3RpbGwgZ2VuZXJhdGVkLCBzbyB3ZSB0cnkgdG8gY2F0Y2ggdGhlIHByb2JsZW0gZmlyc3QuCi0rCi0rICAgICBVbmZvcnR1bmF0ZWx5IHRoZXJlIGlzIG5vIHNpbXBsZSB3YXkgdG8gZGV0ZXJtaW5lIGhvdyBtdWNoIG1lbW9yeSBjYW4KLSsgICAgIGJlIGFsbG9jYXRlZCBieSBjYWxsaW5nIHhtYWxsb2MuICBTbyBpbnN0ZWFkIHdlIHVzZSBhIHNpbXBsZSwgYXJiaXRyYXJ5Ci0rICAgICBsaW1pdCBvZiAyR2IuICBIb3BlZnVsbHkgdGhpcyBzaG91bGQgYmUgZW5vdWdoIGZvciBtb3N0IHVzZXJzLiAgSWYKLSsgICAgIHNvbWVvbmUgZG9lcyBzdGFydCB0cnlpbmcgdG8gZGlzYXNzZW1ibGUgc2VjdGlvbnMgbGFyZ2VyIHRoZW4gMkdiIGluCi0rICAgICBzaXplIHRoZXkgd2lsbCBkb3VidGxlc3MgY29tcGxhaW4gYW5kIHdlIGNhbiBpbmNyZWFzZSB0aGUgbGltaXQuICAqLwotKyNkZWZpbmUgTUFYX1hNQUxMT0MgKDEwMjQgKiAxMDI0ICogMTAyNCAqIDJVTCkgLyogMkdiICovCi0rICBpZiAoZGF0YXNpemUgPiBNQVhfWE1BTExPQykKLSsgICAgewotKyAgICAgIG5vbl9mYXRhbCAoXygiUmVhZGluZyBzZWN0aW9uICVzIGZhaWxlZCBiZWNhdXNlIGl0IGlzIHRvbyBiaWcgKCUjbHgpIiksCi0rCQkgc2VjdGlvbi0+bmFtZSwgKHVuc2lnbmVkIGxvbmcpIGRhdGFzaXplKTsKLSsgICAgICByZXR1cm47Ci0rICAgIH0KLSsKLSAgIGRhdGEgPSAoYmZkX2J5dGUgKikgeG1hbGxvYyAoZGF0YXNpemUpOwotIAotICAgYmZkX2dldF9zZWN0aW9uX2NvbnRlbnRzIChhYmZkLCBzZWN0aW9uLCBkYXRhLCAwLCBkYXRhc2l6ZSk7Ci1JbmRleDogZ2l0L2JpbnV0aWxzL0NoYW5nZUxvZwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL2JpbnV0aWxzL0NoYW5nZUxvZwotKysrIGdpdC9iaW51dGlscy9DaGFuZ2VMb2cKLUBAIC0xLDMgKzEsMTEgQEAKLSsyMDE3LTA2LTMwICBOaWNrIENsaWZ0b24gIDxuaWNrY0ByZWRoYXQuY29tPgotKwotKyAgICAgICBQUiBiaW51dGlscy8yMTY2NQotKyAgICAgICAqIG9iamR1bXAuYyAoZGlzYXNzZW1ibGVfc2VjdGlvbik6IE1vdmUgY2hlY2sgZm9yIGFuIG92ZXJsYXJnZQotKyAgICAgICBzZWN0aW9uIHRvIGp1c3QgYmVmb3JlIHRoZSBhbGxvY2F0aW9uIG9mIG1lbW9yeS4gIERvIG5vdCBjaGVjawotKyAgICAgICBzZWN0aW9uIHNpemUgYWdhaW5zdCBmaWxlIHNpemUsIGJ1dCBpbnN0ZWFkIHVzZSBhbiBhcmJpdHJhcnkgMkdiCi0rICAgICAgIGxpbWl0LiAgSXNzdWUgYSB3YXJuaW5nIG1lc3NhZ2UgaWYgdGhlIHNlY3Rpb24gaXMgdG9vIGJpZy4KLSsKLSAyMDE3LTA2LTI2ICBOaWNrIENsaWZ0b24gIDxuaWNrY0ByZWRoYXQuY29tPgotICAKLSAgICAgICAgUFIgYmludXRpbHMvMjE2NjUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTk1NV84LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy05OTU1XzgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ZGQ5NzQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy05OTU1XzgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotRnJvbSBiYWU3NTAxZTg3YWI2MTQxMTVkOWQzMjEzYjRkZDE4ZDk2ZTYwNGRiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQWxhbiBNb2RyYSA8YW1vZHJhQGdtYWlsLmNvbT4KLURhdGU6IFNhdCwgMSBKdWwgMjAxNyAyMTo1ODoxMCArMDkzMAotU3ViamVjdDogW1BBVENIXSBVc2UgYmZkX21hbGxvY19hbmRfZ2V0X3NlY3Rpb24KLQotSXQncyBuaWNlciB0aGFuIHhtYWxsb2MgZm9sbG93ZWQgYnkgYmZkX2dldF9zZWN0aW9uX2NvbnRlbnRzLCBzaW5jZQoteG1hbGxvYyBleGl0cyBvbiBmYWlsdXJlIGFuZCBuZWVkcyBhIGNoZWNrIHRoYXQgaXRzIHNpemVfdCBhcmcgZG9lc24ndAotbG9zZSBoaWdoIGJpdHMgd2hlbiBjb252ZXJ0ZWQgZnJvbSBiZmRfc2l6ZV90eXBlLgotCi0JUFIgYmludXRpbHMvMjE2NjUKLQkqIG9iamR1bXAuYyAoc3RydGFiKTogTWFrZSB2YXIgYSBiZmRfYnl0ZSouCi0JKGRpc2Fzc2VtYmxlX3NlY3Rpb24pOiBEb24ndCBsaW1pdCBtYWxsb2Mgc2l6ZS4gIEluc3RlYWQsIHVzZQotCWJmZF9tYWxsb2NfYW5kX2dldF9zZWN0aW9uLgotCShyZWFkX3NlY3Rpb25fc3RhYnMpOiBVc2UgYmZkX21hbGxvY19hbmRfZ2V0X3NlY3Rpb24uICBSZXR1cm4KLQliZmRfYnl0ZSouCi0JKGZpbmRfc3RhYnNfc2VjdGlvbik6IFJlbW92ZSBub3cgdW5uZWNlc3NhcnkgY2FzdC4KLQkqIG9iamNvcHkuYyAoY29weV9vYmplY3QpOiBVc2UgYmZkX21hbGxvY19hbmRfZ2V0X3NlY3Rpb24uICBGcmVlCi0JY29udGVudHMgb24gZXJyb3IgcmV0dXJuLgotCSogbmxtY29udi5jIChjb3B5X3NlY3Rpb25zKTogVXNlIGJmZF9tYWxsb2NfYW5kX2dldF9zZWN0aW9uLgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1DVkU6IENWRS0yMDE3LTk5NTUgIzgKLVNpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgotCi0tLS0KLSBiaW51dGlscy9DaGFuZ2VMb2cgfCAxMyArKysrKysrKysrKysrCi0gYmludXRpbHMvbmxtY29udi5jIHwgIDYgKystLS0tCi0gYmludXRpbHMvb2JqY29weS5jIHwgIDUgKysrLS0KLSBiaW51dGlscy9vYmpkdW1wLmMgfCA0NCArKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIDQgZmlsZXMgY2hhbmdlZCwgMjUgaW5zZXJ0aW9ucygrKSwgNDMgZGVsZXRpb25zKC0pCi0KLUluZGV4OiBnaXQvYmludXRpbHMvQ2hhbmdlTG9nCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmludXRpbHMvQ2hhbmdlTG9nCi0rKysgZ2l0L2JpbnV0aWxzL0NoYW5nZUxvZwotQEAgLTEsMyArMSwxNiBAQAotKzIwMTctMDctMDEgIEFsYW4gTW9kcmEgIDxhbW9kcmFAZ21haWwuY29tPgotKwotKwlQUiBiaW51dGlscy8yMTY2NQotKwkqIG9iamR1bXAuYyAoc3RydGFiKTogTWFrZSB2YXIgYSBiZmRfYnl0ZSouCi0rCShkaXNhc3NlbWJsZV9zZWN0aW9uKTogRG9uJ3QgbGltaXQgbWFsbG9jIHNpemUuICBJbnN0ZWFkLCB1c2UKLSsJYmZkX21hbGxvY19hbmRfZ2V0X3NlY3Rpb24uCi0rCShyZWFkX3NlY3Rpb25fc3RhYnMpOiBVc2UgYmZkX21hbGxvY19hbmRfZ2V0X3NlY3Rpb24uICBSZXR1cm4KLSsJYmZkX2J5dGUqLgotKwkoZmluZF9zdGFic19zZWN0aW9uKTogUmVtb3ZlIG5vdyB1bm5lY2Vzc2FyeSBjYXN0LgotKwkqIG9iamNvcHkuYyAoY29weV9vYmplY3QpOiBVc2UgYmZkX21hbGxvY19hbmRfZ2V0X3NlY3Rpb24uICBGcmVlCi0rCWNvbnRlbnRzIG9uIGVycm9yIHJldHVybi4KLSsJKiBubG1jb252LmMgKGNvcHlfc2VjdGlvbnMpOiBVc2UgYmZkX21hbGxvY19hbmRfZ2V0X3NlY3Rpb24uCi0rCi0gMjAxNy0wNi0zMCAgTmljayBDbGlmdG9uICA8bmlja2NAcmVkaGF0LmNvbT4KLSAKLSAgICAgICAgUFIgYmludXRpbHMvMjE2NjUKLUluZGV4OiBnaXQvYmludXRpbHMvbmxtY29udi5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmludXRpbHMvbmxtY29udi5jCi0rKysgZ2l0L2JpbnV0aWxzL25sbWNvbnYuYwotQEAgLTEyMjQsNyArMTIyNCw3IEBAIGNvcHlfc2VjdGlvbnMgKGJmZCAqaW5iZmQsIGFzZWN0aW9uICppbnMKLSAgIGNvbnN0IGNoYXIgKmlubmFtZTsKLSAgIGFzZWN0aW9uICpvdXRzZWM7Ci0gICBiZmRfc2l6ZV90eXBlIHNpemU7Ci0tICB2b2lkICpjb250ZW50czsKLSsgIGJmZF9ieXRlICpjb250ZW50czsKLSAgIGxvbmcgcmVsb2Nfc2l6ZTsKLSAgIGJmZF9ieXRlIGJ1Zls0XTsKLSAgIGJmZF9zaXplX3R5cGUgYWRkOwotQEAgLTEyNDAsOSArMTI0MCw3IEBAIGNvcHlfc2VjdGlvbnMgKGJmZCAqaW5iZmQsIGFzZWN0aW9uICppbnMKLSAgICAgY29udGVudHMgPSBOVUxMOwotICAgZWxzZQotICAgICB7Ci0tICAgICAgY29udGVudHMgPSB4bWFsbG9jIChzaXplKTsKLS0gICAgICBpZiAoISBiZmRfZ2V0X3NlY3Rpb25fY29udGVudHMgKGluYmZkLCBpbnNlYywgY29udGVudHMsCi0tCQkJCSAgICAgIChmaWxlX3B0cikgMCwgc2l6ZSkpCi0rICAgICAgaWYgKCFiZmRfbWFsbG9jX2FuZF9nZXRfc2VjdGlvbiAoaW5iZmQsIGluc2VjLCAmY29udGVudHMpKQotIAliZmRfZmF0YWwgKGJmZF9nZXRfZmlsZW5hbWUgKGluYmZkKSk7Ci0gICAgIH0KLSAKLUluZGV4OiBnaXQvYmludXRpbHMvb2JqZHVtcC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmludXRpbHMvb2JqZHVtcC5jCi0rKysgZ2l0L2JpbnV0aWxzL29iamR1bXAuYwotQEAgLTE4MCw3ICsxODAsNyBAQCBzdGF0aWMgbG9uZyBkeW5zeW1jb3VudCA9IDA7Ci0gc3RhdGljIGJmZF9ieXRlICpzdGFiczsKLSBzdGF0aWMgYmZkX3NpemVfdHlwZSBzdGFiX3NpemU7Ci0gCi0tc3RhdGljIGNoYXIgKnN0cnRhYjsKLStzdGF0aWMgYmZkX2J5dGUgKnN0cnRhYjsKLSBzdGF0aWMgYmZkX3NpemVfdHlwZSBzdGFic3RyX3NpemU7Ci0gCi0gc3RhdGljIGJmZF9ib29sZWFuIGlzX3JlbG9jYXRhYmxlID0gRkFMU0U7Ci1AQCAtMjExMiwyOSArMjExMiw2IEBAIGRpc2Fzc2VtYmxlX3NlY3Rpb24gKGJmZCAqYWJmZCwgYXNlY3Rpb24KLSAgICAgfQotICAgcmVsX3BwZW5kID0gcmVsX3BwICsgcmVsX2NvdW50OwotIAotLSAgLyogUFIgMjE2NjU6IENoZWNrIGZvciBvdmVybGFyZ2UgZGF0YXNpemVzLgotLSAgICAgTm90ZSAtIHdlIHVzZWQgdG8gY2hlY2sgZm9yICJkYXRhc2l6ZSA+IGJmZF9nZXRfZmlsZV9zaXplIChhYmZkKSIgYnV0Ci0tICAgICB0aGlzIGZhaWxzIHdoZW4gdXNpbmcgY29tcHJlc3NlZCBzZWN0aW9ucyBvciBjb21wcmVzc2VkIGZpbGUgZm9ybWF0cwotLSAgICAgKGVnIE1NTywgdGVraGV4KS4KLS0KLS0gICAgIFRoZSBjYWxsIHRvIHhtYWxsb2MgYmVsb3cgd2lsbCBmYWlsIGlmIHRvbyBtdWNoIG1lbW9yeSBpcyByZXF1ZXN0ZWQsCi0tICAgICB3aGljaCB3aWxsIGNhdGNoIHRoZSBwcm9ibGVtIGluIHRoZSBub3JtYWwgdXNlIGNhc2UuICBCdXQgaWYgYSBtZW1vcnkKLS0gICAgIGNoZWNrZXIgaXMgaW4gdXNlLCBlZyB2YWxncmluZCBvciBzYW5pdGl6ZSwgdGhlbiBhbiBleGNlcHRpb24gd2lsbAotLSAgICAgYmUgc3RpbGwgZ2VuZXJhdGVkLCBzbyB3ZSB0cnkgdG8gY2F0Y2ggdGhlIHByb2JsZW0gZmlyc3QuCi0tCi0tICAgICBVbmZvcnR1bmF0ZWx5IHRoZXJlIGlzIG5vIHNpbXBsZSB3YXkgdG8gZGV0ZXJtaW5lIGhvdyBtdWNoIG1lbW9yeSBjYW4KLS0gICAgIGJlIGFsbG9jYXRlZCBieSBjYWxsaW5nIHhtYWxsb2MuICBTbyBpbnN0ZWFkIHdlIHVzZSBhIHNpbXBsZSwgYXJiaXRyYXJ5Ci0tICAgICBsaW1pdCBvZiAyR2IuICBIb3BlZnVsbHkgdGhpcyBzaG91bGQgYmUgZW5vdWdoIGZvciBtb3N0IHVzZXJzLiAgSWYKLS0gICAgIHNvbWVvbmUgZG9lcyBzdGFydCB0cnlpbmcgdG8gZGlzYXNzZW1ibGUgc2VjdGlvbnMgbGFyZ2VyIHRoZW4gMkdiIGluCi0tICAgICBzaXplIHRoZXkgd2lsbCBkb3VidGxlc3MgY29tcGxhaW4gYW5kIHdlIGNhbiBpbmNyZWFzZSB0aGUgbGltaXQuICAqLwotLSNkZWZpbmUgTUFYX1hNQUxMT0MgKDEwMjQgKiAxMDI0ICogMTAyNCAqIDJVTCkgLyogMkdiICovCi0tICBpZiAoZGF0YXNpemUgPiBNQVhfWE1BTExPQykKLS0gICAgewotLSAgICAgIG5vbl9mYXRhbCAoXygiUmVhZGluZyBzZWN0aW9uICVzIGZhaWxlZCBiZWNhdXNlIGl0IGlzIHRvbyBiaWcgKCUjbHgpIiksCi0tCQkgc2VjdGlvbi0+bmFtZSwgKHVuc2lnbmVkIGxvbmcpIGRhdGFzaXplKTsKLS0gICAgICByZXR1cm47Ci0tICAgIH0KLS0KLSAgIGRhdGEgPSAoYmZkX2J5dGUgKikgeG1hbGxvYyAoZGF0YXNpemUpOwotIAotICAgYmZkX2dldF9zZWN0aW9uX2NvbnRlbnRzIChhYmZkLCBzZWN0aW9uLCBkYXRhLCAwLCBkYXRhc2l6ZSk7Ci1AQCAtMjY1MiwxMiArMjYyOSwxMSBAQCBkdW1wX2R3YXJmIChiZmQgKmFiZmQpCi0gLyogUmVhZCBBQkZEJ3Mgc3RhYnMgc2VjdGlvbiBTVEFCU0VDVF9OQU1FLCBhbmQgcmV0dXJuIGEgcG9pbnRlciB0bwotICAgIGl0LiAgUmV0dXJuIE5VTEwgb24gZmFpbHVyZS4gICAqLwotIAotLXN0YXRpYyBjaGFyICoKLStzdGF0aWMgYmZkX2J5dGUgKgotIHJlYWRfc2VjdGlvbl9zdGFicyAoYmZkICphYmZkLCBjb25zdCBjaGFyICpzZWN0X25hbWUsIGJmZF9zaXplX3R5cGUgKnNpemVfcHRyKQotIHsKLSAgIGFzZWN0aW9uICpzdGFic2VjdDsKLS0gIGJmZF9zaXplX3R5cGUgc2l6ZTsKLS0gIGNoYXIgKmNvbnRlbnRzOwotKyAgYmZkX2J5dGUgKmNvbnRlbnRzOwotIAotICAgc3RhYnNlY3QgPSBiZmRfZ2V0X3NlY3Rpb25fYnlfbmFtZSAoYWJmZCwgc2VjdF9uYW1lKTsKLSAgIGlmIChzdGFic2VjdCA9PSBOVUxMKQotQEAgLTI2NjYsMTAgKzI2NDIsNyBAQCByZWFkX3NlY3Rpb25fc3RhYnMgKGJmZCAqYWJmZCwgY29uc3QgY2hhCi0gICAgICAgcmV0dXJuIEZBTFNFOwotICAgICB9Ci0gCi0tICBzaXplID0gYmZkX3NlY3Rpb25fc2l6ZSAoYWJmZCwgc3RhYnNlY3QpOwotLSAgY29udGVudHMgID0gKGNoYXIgKikgeG1hbGxvYyAoc2l6ZSk7Ci0tCi0tICBpZiAoISBiZmRfZ2V0X3NlY3Rpb25fY29udGVudHMgKGFiZmQsIHN0YWJzZWN0LCBjb250ZW50cywgMCwgc2l6ZSkpCi0rICBpZiAoIWJmZF9tYWxsb2NfYW5kX2dldF9zZWN0aW9uIChhYmZkLCBzdGFic2VjdCwgJmNvbnRlbnRzKSkKLSAgICAgewotICAgICAgIG5vbl9mYXRhbCAoXygicmVhZGluZyAlcyBzZWN0aW9uIG9mICVzIGZhaWxlZDogJXMiKSwKLSAJCSBzZWN0X25hbWUsIGJmZF9nZXRfZmlsZW5hbWUgKGFiZmQpLAotQEAgLTI2NzksNyArMjY1Miw3IEBAIHJlYWRfc2VjdGlvbl9zdGFicyAoYmZkICphYmZkLCBjb25zdCBjaGEKLSAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgfQotIAotLSAgKnNpemVfcHRyID0gc2l6ZTsKLSsgICpzaXplX3B0ciA9IGJmZF9zZWN0aW9uX3NpemUgKGFiZmQsIHN0YWJzZWN0KTsKLSAKLSAgIHJldHVybiBjb250ZW50czsKLSB9Ci1AQCAtMjgwNiw4ICsyNzc5LDcgQEAgZmluZF9zdGFic19zZWN0aW9uIChiZmQgKmFiZmQsIGFzZWN0aW9uCi0gCi0gICAgICAgaWYgKHN0cnRhYikKLSAJewotLQkgIHN0YWJzID0gKGJmZF9ieXRlICopIHJlYWRfc2VjdGlvbl9zdGFicyAoYWJmZCwgc2VjdGlvbi0+bmFtZSwKLS0JCQkJCQkgICAmc3RhYl9zaXplKTsKLSsJICBzdGFicyA9IHJlYWRfc2VjdGlvbl9zdGFicyAoYWJmZCwgc2VjdGlvbi0+bmFtZSwgJnN0YWJfc2l6ZSk7Ci0gCSAgaWYgKHN0YWJzKQotIAkgICAgcHJpbnRfc2VjdGlvbl9zdGFicyAoYWJmZCwgc2VjdGlvbi0+bmFtZSwgJnNvdWdodC0+c3RyaW5nX29mZnNldCk7Ci0gCX0KLUluZGV4OiBnaXQvYmludXRpbHMvb2JqY29weS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmludXRpbHMvb2JqY29weS5jCi0rKysgZ2l0L2JpbnV0aWxzL29iamNvcHkuYwotQEAgLTIxODYsMTQgKzIxODYsMTUgQEAgY29weV9vYmplY3QgKGJmZCAqaWJmZCwgYmZkICpvYmZkLCBjb25zdAotIAkgICAgICBjb250aW51ZTsKLSAJICAgIH0KLSAKLS0JICBiZmRfYnl0ZSAqIGNvbnRlbnRzID0geG1hbGxvYyAoc2l6ZSk7Ci0tCSAgaWYgKGJmZF9nZXRfc2VjdGlvbl9jb250ZW50cyAoaWJmZCwgc2VjLCBjb250ZW50cywgMCwgc2l6ZSkpCi0rCSAgYmZkX2J5dGUgKmNvbnRlbnRzOwotKyAgICAgICAgICBpZiAoYmZkX21hbGxvY19hbmRfZ2V0X3NlY3Rpb24gKGliZmQsIHNlYywgJmNvbnRlbnRzKSkKLSAJICAgIHsKLSAJICAgICAgaWYgKGZ3cml0ZSAoY29udGVudHMsIDEsIHNpemUsIGYpICE9IHNpemUpCi0gCQl7Ci0gCQkgIG5vbl9mYXRhbCAoXygiZXJyb3Igd3JpdGluZyBzZWN0aW9uIGNvbnRlbnRzIHRvICVzIChlcnJvcjogJXMpIiksCi0gCQkJICAgICBwZHVtcC0+ZmlsZW5hbWUsCi0gCQkJICAgICBzdHJlcnJvciAoZXJybm8pKTsKLSsgICAgICAgICAgICAgICAgICBmcmVlIChjb250ZW50cyk7Ci0gCQkgIHJldHVybiBGQUxTRTsKLSAJCX0KLSAJICAgIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvQ1ZFLTIwMTctOTk1NV85LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy05OTU1XzkucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2MzUzZDguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9DVkUtMjAxNy05OTU1XzkucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNjEgKzAsMCBAQAotRnJvbSA4ZTJmNTRiY2VlN2UzZTgzMTVkNGEzOWEzMDJlYWY4ZTQzODllMDdkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogIkguSi4gTHUiIDxoamwudG9vbHNAZ21haWwuY29tPgotRGF0ZTogVHVlLCAzMCBNYXkgMjAxNyAwNjozNDowNSAtMDcwMAotU3ViamVjdDogW1BBVENIXSBBZGQgYmZkX2dldF9maWxlX3NpemUgdG8gZ2V0IGFyY2hpdmUgZWxlbWVudCBzaXplCi0KLVdlIGNhbid0IHVzZSBzdGF0KCkgdG8gZ2V0IGFyY2hpdmUgZWxlbWVudCBzaXplLiAgQWRkIGJmZF9nZXRfZmlsZV9zaXplCi10byBnZXQgc2l6ZSBmb3IgYm90aCBub3JtYWwgZmlsZXMgYW5kIGFyY2hpdmUgZWxlbWVudHMuCi0KLWJmZC8KLQotCVBSIGJpbnV0aWxzLzIxNTE5Ci0JKiBiZmRpby5jIChiZmRfZ2V0X2ZpbGVfc2l6ZSk6IE5ldyBmdW5jdGlvbi4KLQkqIGJmZC1pbjIuaDogUmVnZW5lcmF0ZWQuCi0KLWJpbnV0aWxzLwotCi0JUFIgYmludXRpbHMvMjE1MTkKLQkqIG9iamR1bXAuYyAoZHVtcF9yZWxvY3NfaW5fc2VjdGlvbik6IFJlcGxhY2UgZ2V0X2ZpbGVfc2l6ZQotCXdpdGggYmZkX2dldF9maWxlX3NpemUgdG8gZ2V0IGFyY2hpdmUgZWxlbWVudCBzaXplLgotCSogdGVzdHN1aXRlL2JpbnV0aWxzLWFsbC9vYmpkdW1wLmV4cCAodGVzdF9vYmpkdW1wX2YpOiBOZXcKLQlwcm9jLgotCSh0ZXN0X29iamR1bXBfaCk6IExpa2V3aXNlLgotCSh0ZXN0X29iamR1bXBfdCk6IExpa2V3aXNlLgotCSh0ZXN0X29iamR1bXBfcik6IExpa2V3aXNlLgotCSh0ZXN0X29iamR1bXBfcyk6IExpa2V3aXNlLgotCUFkZCBvYmpkdW1wIHRlc3RzIG9uIGFyY2hpdmUuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLUNWRTogQ1ZFLTIwMTctOTk1NQotU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+Ci0KLS0tLQotIGJmZC9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYgKwotIGJmZC9iZmQtaW4yLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwotIGJmZC9iZmRpby5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMjMgKysrKwotIGJpbnV0aWxzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTMgKysKLSBiaW51dGlscy9vYmpkdW1wLmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICstCi0gYmludXRpbHMvdGVzdHN1aXRlL2JpbnV0aWxzLWFsbC9vYmpkdW1wLmV4cCB8IDE3OCArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCi0gNiBmaWxlcyBjaGFuZ2VkLCAxNzAgaW5zZXJ0aW9ucygrKSwgNTQgZGVsZXRpb25zKC0pCi0KLUluZGV4OiBnaXQvYmZkL2JmZC1pbjIuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdpdC5vcmlnL2JmZC9iZmQtaW4yLmgKLSsrKyBnaXQvYmZkL2JmZC1pbjIuaAotQEAgLTEyNDEsNiArMTI0MSw4IEBAIGxvbmcgYmZkX2dldF9tdGltZSAoYmZkICphYmZkKTsKLSAKLSBmaWxlX3B0ciBiZmRfZ2V0X3NpemUgKGJmZCAqYWJmZCk7Ci0gCi0rZmlsZV9wdHIgYmZkX2dldF9maWxlX3NpemUgKGJmZCAqYWJmZCk7Ci0rCi0gdm9pZCAqYmZkX21tYXAgKGJmZCAqYWJmZCwgdm9pZCAqYWRkciwgYmZkX3NpemVfdHlwZSBsZW4sCi0gICAgIGludCBwcm90LCBpbnQgZmxhZ3MsIGZpbGVfcHRyIG9mZnNldCwKLSAgICAgdm9pZCAqKm1hcF9hZGRyLCBiZmRfc2l6ZV90eXBlICptYXBfbGVuKTsKLUluZGV4OiBnaXQvYmZkL2JmZGlvLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9iZmQvYmZkaW8uYwotKysrIGdpdC9iZmQvYmZkaW8uYwotQEAgLTQzNCw2ICs0MzQsMjkgQEAgYmZkX2dldF9zaXplIChiZmQgKmFiZmQpCi0gICByZXR1cm4gYnVmLnN0X3NpemU7Ci0gfQotIAotKy8qCi0rRlVOQ1RJT04KLSsJYmZkX2dldF9maWxlX3NpemUKLSsKLStTWU5PUFNJUwotKwlmaWxlX3B0ciBiZmRfZ2V0X2ZpbGVfc2l6ZSAoYmZkICphYmZkKTsKLSsKLStERVNDUklQVElPTgotKwlSZXR1cm4gdGhlIGZpbGUgc2l6ZSAoYXMgcmVhZCBmcm9tIGZpbGUgc3lzdGVtKSBmb3IgdGhlIGZpbGUKLSsJYXNzb2NpYXRlZCB3aXRoIEJGRCBAdmFye2FiZmR9LiAgSXQgc3VwcG9ydHMgYm90aCBub3JtYWwgZmlsZXMKLSsJYW5kIGFyY2hpdmUgZWxlbWVudHMuCi0rCi0rKi8KLSsKLStmaWxlX3B0cgotK2JmZF9nZXRfZmlsZV9zaXplIChiZmQgKmFiZmQpCi0rewotKyAgaWYgKGFiZmQtPm15X2FyY2hpdmUgIT0gTlVMTAotKyAgICAgICYmICFiZmRfaXNfdGhpbl9hcmNoaXZlIChhYmZkLT5teV9hcmNoaXZlKSkKLSsgICAgcmV0dXJuIGFyZWx0X3NpemUgKGFiZmQpOwotKwotKyAgcmV0dXJuIGJmZF9nZXRfc2l6ZSAoYWJmZCk7Ci0rfQotIAotIC8qCi0gRlVOQ1RJT04KLUluZGV4OiBnaXQvYmludXRpbHMvb2JqZHVtcC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmludXRpbHMvb2JqZHVtcC5jCi0rKysgZ2l0L2JpbnV0aWxzL29iamR1bXAuYwotQEAgLTMzMTAsNyArMzMxMCw3IEBAIGR1bXBfcmVsb2NzX2luX3NlY3Rpb24gKGJmZCAqYWJmZCwKLSAgICAgfQotIAotICAgaWYgKChiZmRfZ2V0X2ZpbGVfZmxhZ3MgKGFiZmQpICYgKEJGRF9JTl9NRU1PUlkgfCBCRkRfTElOS0VSX0NSRUFURUQpKSA9PSAwCi0tICAgICAgJiYgcmVsc2l6ZSA+IGdldF9maWxlX3NpemUgKGJmZF9nZXRfZmlsZW5hbWUgKGFiZmQpKSkKLSsgICAgICAmJiByZWxzaXplID4gYmZkX2dldF9maWxlX3NpemUgKGFiZmQpKQotICAgICB7Ci0gICAgICAgcHJpbnRmICgiICh0b28gbWFueTogMHgleClcbiIsIHNlY3Rpb24tPnJlbG9jX2NvdW50KTsKLSAgICAgICBiZmRfc2V0X2Vycm9yIChiZmRfZXJyb3JfZmlsZV90cnVuY2F0ZWQpOwotSW5kZXg6IGdpdC9iaW51dGlscy90ZXN0c3VpdGUvYmludXRpbHMtYWxsL29iamR1bXAuZXhwCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvYmludXRpbHMvdGVzdHN1aXRlL2JpbnV0aWxzLWFsbC9vYmpkdW1wLmV4cAotKysrIGdpdC9iaW51dGlscy90ZXN0c3VpdGUvYmludXRpbHMtYWxsL29iamR1bXAuZXhwCi1AQCAtNjQsOTYgKzY0LDE2OCBAQCBpZiBbcmVnZXhwICR3YW50ICRnb3RdIHRoZW4gewotIGlmIHshW2JpbnV0aWxzX2Fzc2VtYmxlICRzcmNkaXIvJHN1YmRpci9iaW50ZXN0LnMgdG1wZGlyL2JpbnRlc3Qub119IHRoZW4gewotICAgICByZXR1cm4KLSB9Ci0raWYgeyFbYmludXRpbHNfYXNzZW1ibGUgJHNyY2Rpci8kc3ViZGlyL2JpbnRlc3QucyB0bXBkaXIvYmludGVzdDIub119IHRoZW4gewotKyAgICByZXR1cm4KLSt9Ci0gaWYgW2lzX3JlbW90ZSBob3N0XSB7Ci0gICAgIHNldCB0ZXN0ZmlsZSBbcmVtb3RlX2Rvd25sb2FkIGhvc3QgdG1wZGlyL2JpbnRlc3Qub10KLSsgICAgc2V0IHRlc3RmaWxlMiBbcmVtb3RlX2Rvd25sb2FkIGhvc3QgdG1wZGlyL2JpbnRlc3QyLm9dCi0gfSBlbHNlIHsKLSAgICAgc2V0IHRlc3RmaWxlIHRtcGRpci9iaW50ZXN0Lm8KLSsgICAgc2V0IHRlc3RmaWxlMiB0bXBkaXIvYmludGVzdDIubwotK30KLSsKLStpZiB7ICFbaXN0YXJnZXQgImFscGhhLSotKiJdIHx8IFtpc19lbGZfZm9ybWF0XSB9IHRoZW4gewotKyAgICByZW1vdGVfZmlsZSBob3N0IGZpbGUgZGVsZXRlIHRtcGRpci9iaW50ZXN0LmEKLSsgICAgc2V0IGdvdCBbYmludXRpbHNfcnVuICRBUiAicmMgdG1wZGlyL2JpbnRlc3QuYSAkdGVzdGZpbGUyIl0KLSsgICAgaWYgIVtzdHJpbmcgbWF0Y2ggIiIgJGdvdF0gdGhlbiB7Ci0rCWZhaWwgImJpbnRlc3QuYSIKLSsJcmVtb3RlX2ZpbGUgaG9zdCBkZWxldGUgdG1wZGlyL2JpbnRlc3QuYQotKyAgICB9IGVsc2UgewotKwlpZiBbaXNfcmVtb3RlIGhvc3RdIHsKLSsJICAgIHNldCB0ZXN0YXJjaGl2ZSBbcmVtb3RlX2Rvd25sb2FkIGhvc3QgdG1wZGlyL2JpbnRlc3QuYV0KLSsJfSBlbHNlIHsKLSsJICAgIHNldCB0ZXN0YXJjaGl2ZSB0bXBkaXIvYmludGVzdC5hCi0rCX0KLSsgICAgfQotKyAgICByZW1vdGVfZmlsZSBob3N0IGRlbGV0ZSB0bXBkaXIvYmludGVzdDIubwotIH0KLSAKLSAjIFRlc3Qgb2JqZHVtcCAtZgotIAotLXNldCBnb3QgW2JpbnV0aWxzX3J1biAkT0JKRFVNUCAiJE9CSkRVTVBGTEFHUyAtZiAkdGVzdGZpbGUiXQotK3Byb2MgdGVzdF9vYmpkdW1wX2YgeyB0ZXN0ZmlsZSBkdW1wZmlsZSB9IHsKLSsgICAgZ2xvYmFsIE9CSkRVTVAKLSsgICAgZ2xvYmFsIE9CSkRVTVBGTEFHUwotKyAgICBnbG9iYWwgY3B1c19yZWdleAotIAotLXNldCB3YW50ICIkdGVzdGZpbGU6XFsgCVxdKmZpbGUgZm9ybWF0LiphcmNoaXRlY3R1cmU6XFsgCVxdKiR7Y3B1c19yZWdleH0uKkhBU19SRUxPQy4qSEFTX1NZTVMiCi0rICAgIHNldCBnb3QgW2JpbnV0aWxzX3J1biAkT0JKRFVNUCAiJE9CSkRVTVBGTEFHUyAtZiAkdGVzdGZpbGUiXQotIAotLWlmICFbcmVnZXhwICR3YW50ICRnb3RdIHRoZW4gewotLSAgICBmYWlsICJvYmpkdW1wIC1mIgotLX0gZWxzZSB7Ci0tICAgIHBhc3MgIm9iamR1bXAgLWYiCi0rICAgIHNldCB3YW50ICIkZHVtcGZpbGU6XFsgCVxdKmZpbGUgZm9ybWF0LiphcmNoaXRlY3R1cmU6XFsgCVxdKiR7Y3B1c19yZWdleH0uKkhBU19SRUxPQy4qSEFTX1NZTVMiCi0rCi0rICAgIGlmICFbcmVnZXhwICR3YW50ICRnb3RdIHRoZW4gewotKwlmYWlsICJvYmpkdW1wIC1mICgkdGVzdGZpbGUsICRkdW1wZmlsZSkiCi0rICAgIH0gZWxzZSB7Ci0rCXBhc3MgIm9iamR1bXAgLWYgKCR0ZXN0ZmlsZSwgJGR1bXBmaWxlKSIKLSsgICAgfQotK30KLSsKLSt0ZXN0X29iamR1bXBfZiAkdGVzdGZpbGUgJHRlc3RmaWxlCi0raWYgeyBbIHJlbW90ZV9maWxlIGhvc3QgZXhpc3RzICR0ZXN0YXJjaGl2ZSBdIH0gdGhlbiB7Ci0rICAgIHRlc3Rfb2JqZHVtcF9mICR0ZXN0YXJjaGl2ZSBiaW50ZXN0Mi5vCi0gfQotIAotICMgVGVzdCBvYmpkdW1wIC1oCi0gCi0tc2V0IGdvdCBbYmludXRpbHNfcnVuICRPQkpEVU1QICIkT0JKRFVNUEZMQUdTIC1oICR0ZXN0ZmlsZSJdCi0rcHJvYyB0ZXN0X29iamR1bXBfaCB7IHRlc3RmaWxlIGR1bXBmaWxlIH0gewotKyAgICBnbG9iYWwgT0JKRFVNUAotKyAgICBnbG9iYWwgT0JKRFVNUEZMQUdTCi0gCi0tc2V0IHdhbnQgIiR0ZXN0ZmlsZTpcWyAJXF0qZmlsZSBmb3JtYXQuKlNlY3Rpb25zLipcWzAtOVxdK1xbIAlcXStcW14gCVxdKih0ZXh0fFRFWFR8UHxcXFwkQ09ERVxcXCQpXFteIAlcXSpcWyAJXF0qKFxbMC05YS1mQS1GXF0rKS4qXFswLTlcXStcWyAJXF0rXFteIAlcXSooXFwuZGF0YXxEQVRBfERfMSlcW14gCVxdKlxbIAlcXSooXFswLTlhLWZBLUZcXSspIgotKyAgICBzZXQgZ290IFtiaW51dGlsc19ydW4gJE9CSkRVTVAgIiRPQkpEVU1QRkxBR1MgLWggJHRlc3RmaWxlIl0KLSAKLS1pZiAhW3JlZ2V4cCAkd2FudCAkZ290IGFsbCB0ZXh0X25hbWUgdGV4dF9zaXplIGRhdGFfbmFtZSBkYXRhX3NpemVdIHRoZW4gewotLSAgICBmYWlsICJvYmpkdW1wIC1oIgotLX0gZWxzZSB7Ci0tICAgIHZlcmJvc2UgInRleHQgbmFtZSBpcyAkdGV4dF9uYW1lIHNpemUgaXMgJHRleHRfc2l6ZSIKLS0gICAgdmVyYm9zZSAiZGF0YSBuYW1lIGlzICRkYXRhX25hbWUgc2l6ZSBpcyAkZGF0YV9zaXplIgotLSAgICBzZXQgZXRzIDgKLS0gICAgc2V0IGVkcyA0Ci0tICAgICMgVGhlIFt0aV1jNHggdGFyZ2V0IGhhcyB0aGUgcHJvcGVydHkgc2l6ZW9mKGNoYXIpPXNpemVvZihsb25nKT0xCi0tICAgIGlmIFtpc3RhcmdldCAqYzR4Ki0qLSpdIHRoZW4gewotLSAgICAgICAgc2V0IGV0cyAyCi0tICAgICAgICBzZXQgZWRzIDEKLS0gICAgfQotLSAgICAjIGM1NHggc2VjdGlvbiBzaXplcyBhcmUgaW4gYnl0ZXMsIG5vdCBvY3RldHM7IGFkanVzdCBhY2NvcmRpbmdseQotLSAgICBpZiBbaXN0YXJnZXQgKmM1NHgqLSotKl0gdGhlbiB7Ci0tCXNldCBldHMgNAotLQlzZXQgZWRzIDIKLS0gICAgfQotLSAgICBpZiB7W2V4cHIgIjB4JHRleHRfc2l6ZSJdIDwgJGV0cyB8fCBbZXhwciAiMHgkZGF0YV9zaXplIl0gPCAkZWRzfSB0aGVuIHsKLS0Jc2VuZF9sb2cgInNpemVzIHRvbyBzbWFsbFxuIgotLQlmYWlsICJvYmpkdW1wIC1oIgotKyAgICBzZXQgd2FudCAiJGR1bXBmaWxlOlxbIAlcXSpmaWxlIGZvcm1hdC4qU2VjdGlvbnMuKlxbMC05XF0rXFsgCVxdK1xbXiAJXF0qKHRleHR8VEVYVHxQfFxcXCRDT0RFXFxcJClcW14gCVxdKlxbIAlcXSooXFswLTlhLWZBLUZcXSspLipcWzAtOVxdK1xbIAlcXStcW14gCVxdKihcXC5kYXRhfERBVEF8RF8xKVxbXiAJXF0qXFsgCVxdKihcWzAtOWEtZkEtRlxdKykiCi0rCi0rICAgIGlmICFbcmVnZXhwICR3YW50ICRnb3QgYWxsIHRleHRfbmFtZSB0ZXh0X3NpemUgZGF0YV9uYW1lIGRhdGFfc2l6ZV0gdGhlbiB7Ci0rCWZhaWwgIm9iamR1bXAgLWggKCR0ZXN0ZmlsZSwgJGR1bXBmaWxlKSIKLSAgICAgfSBlbHNlIHsKLS0JcGFzcyAib2JqZHVtcCAtaCIKLSsJdmVyYm9zZSAidGV4dCBuYW1lIGlzICR0ZXh0X25hbWUgc2l6ZSBpcyAkdGV4dF9zaXplIgotKwl2ZXJib3NlICJkYXRhIG5hbWUgaXMgJGRhdGFfbmFtZSBzaXplIGlzICRkYXRhX3NpemUiCi0rCXNldCBldHMgOAotKwlzZXQgZWRzIDQKLSsJIyBUaGUgW3RpXWM0eCB0YXJnZXQgaGFzIHRoZSBwcm9wZXJ0eSBzaXplb2YoY2hhcik9c2l6ZW9mKGxvbmcpPTEKLSsJaWYgW2lzdGFyZ2V0ICpjNHgqLSotKl0gdGhlbiB7Ci0rICAgICAgICAgICAgc2V0IGV0cyAyCi0rICAgICAgICAgICAgc2V0IGVkcyAxCi0rCX0KLSsJIyBjNTR4IHNlY3Rpb24gc2l6ZXMgYXJlIGluIGJ5dGVzLCBub3Qgb2N0ZXRzOyBhZGp1c3QgYWNjb3JkaW5nbHkKLSsJaWYgW2lzdGFyZ2V0ICpjNTR4Ki0qLSpdIHRoZW4gewotKwkgICAgc2V0IGV0cyA0Ci0rCSAgICBzZXQgZWRzIDIKLSsgICAgICAgIH0KLSsJaWYge1tleHByICIweCR0ZXh0X3NpemUiXSA8ICRldHMgfHwgW2V4cHIgIjB4JGRhdGFfc2l6ZSJdIDwgJGVkc30gdGhlbiB7Ci0rCSAgICBzZW5kX2xvZyAic2l6ZXMgdG9vIHNtYWxsXG4iCi0rCSAgICBmYWlsICJvYmpkdW1wIC1oICgkdGVzdGZpbGUsICRkdW1wZmlsZSkiCi0rCX0gZWxzZSB7Ci0rCSAgICBwYXNzICJvYmpkdW1wIC1oICgkdGVzdGZpbGUsICRkdW1wZmlsZSkiCi0rCX0KLSAgICAgfQotIH0KLSAKLSt0ZXN0X29iamR1bXBfaCAkdGVzdGZpbGUgJHRlc3RmaWxlCi0raWYgeyBbIHJlbW90ZV9maWxlIGhvc3QgZXhpc3RzICR0ZXN0YXJjaGl2ZSBdIH0gdGhlbiB7Ci0rICAgIHRlc3Rfb2JqZHVtcF9oICR0ZXN0YXJjaGl2ZSBiaW50ZXN0Mi5vCi0rfQotKwotICMgVGVzdCBvYmpkdW1wIC10Ci0gCi0tc2V0IGdvdCBbYmludXRpbHNfcnVuICRPQkpEVU1QICIkT0JKRFVNUEZMQUdTIC10ICR0ZXN0ZmlsZSJdCi0rcHJvYyB0ZXN0X29iamR1bXBfdCB7IHRlc3RmaWxlfSB7Ci0rICAgIGdsb2JhbCBPQkpEVU1QCi0rICAgIGdsb2JhbCBPQkpEVU1QRkxBR1MKLSsKLSsgICAgc2V0IGdvdCBbYmludXRpbHNfcnVuICRPQkpEVU1QICIkT0JKRFVNUEZMQUdTIC10ICR0ZXN0ZmlsZSJdCi0rCi0rICAgIGlmIFtpbmZvIGV4aXN0cyB2YXJzXSB0aGVuIHsgdW5zZXQgdmFycyB9Ci0rICAgIHdoaWxlIHtbcmVnZXhwICIoXFthLXpcXSpfc3ltYm9sKSguKikiICRnb3QgYWxsIHN5bWJvbCByZXN0XX0gewotKwlzZXQgdmFycygkc3ltYm9sKSAxCi0rCXNldCBnb3QgJHJlc3QKLSsgICAgfQotIAotLWlmIFtpbmZvIGV4aXN0cyB2YXJzXSB0aGVuIHsgdW5zZXQgdmFycyB9Ci0td2hpbGUge1tyZWdleHAgIihcW2EtelxdKl9zeW1ib2wpKC4qKSIgJGdvdCBhbGwgc3ltYm9sIHJlc3RdfSB7Ci0tICAgIHNldCB2YXJzKCRzeW1ib2wpIDEKLS0gICAgc2V0IGdvdCAkcmVzdAotKyAgICBpZiB7IVtpbmZvIGV4aXN0cyB2YXJzKHRleHRfc3ltYm9sKV0gXAotKwkgfHwgIVtpbmZvIGV4aXN0cyB2YXJzKGRhdGFfc3ltYm9sKV0gXAotKwkgfHwgIVtpbmZvIGV4aXN0cyB2YXJzKGNvbW1vbl9zeW1ib2wpXSBcCi0rCSB8fCAhW2luZm8gZXhpc3RzIHZhcnMoZXh0ZXJuYWxfc3ltYm9sKV19IHRoZW4gewotKwlmYWlsICJvYmpkdW1wIC10ICgkdGVzdGZpbGUpIgotKyAgICB9IGVsc2UgewotKwlwYXNzICJvYmpkdW1wIC10ICgkdGVzdGZpbGUpIgotKyAgICB9Ci0gfQotIAotLWlmIHshW2luZm8gZXhpc3RzIHZhcnModGV4dF9zeW1ib2wpXSBcCi0tICAgICB8fCAhW2luZm8gZXhpc3RzIHZhcnMoZGF0YV9zeW1ib2wpXSBcCi0tICAgICB8fCAhW2luZm8gZXhpc3RzIHZhcnMoY29tbW9uX3N5bWJvbCldIFwKLS0gICAgIHx8ICFbaW5mbyBleGlzdHMgdmFycyhleHRlcm5hbF9zeW1ib2wpXX0gdGhlbiB7Ci0tICAgIGZhaWwgIm9iamR1bXAgLXQiCi0tfSBlbHNlIHsKLS0gICAgcGFzcyAib2JqZHVtcCAtdCIKLSt0ZXN0X29iamR1bXBfdCAkdGVzdGZpbGUKLStpZiB7IFsgcmVtb3RlX2ZpbGUgaG9zdCBleGlzdHMgJHRlc3RhcmNoaXZlIF0gfSB0aGVuIHsKLSsgICAgdGVzdF9vYmpkdW1wX3QgJHRlc3RhcmNoaXZlCi0gfQotIAotICMgVGVzdCBvYmpkdW1wIC1yCi0gCi0tc2V0IGdvdCBbYmludXRpbHNfcnVuICRPQkpEVU1QICIkT0JKRFVNUEZMQUdTIC1yICR0ZXN0ZmlsZSJdCi0rcHJvYyB0ZXN0X29iamR1bXBfciB7IHRlc3RmaWxlIGR1bXBmaWxlIH0gewotKyAgICBnbG9iYWwgT0JKRFVNUAotKyAgICBnbG9iYWwgT0JKRFVNUEZMQUdTCi0gCi0tc2V0IHdhbnQgIiR0ZXN0ZmlsZTpcWyAJXF0qZmlsZSBmb3JtYXQuKlJFTE9DQVRJT04gUkVDT1JEUyBGT1IgXFxcW1xbXlxdXF0qKHRleHR8VEVYVHxQfFxcXCRDT0RFXFxcJClcW15cXVxdKlxcXF0uKmV4dGVybmFsX3N5bWJvbCIKLSsgICAgc2V0IGdvdCBbYmludXRpbHNfcnVuICRPQkpEVU1QICIkT0JKRFVNUEZMQUdTIC1yICR0ZXN0ZmlsZSJdCi0gCi0taWYgW3JlZ2V4cCAkd2FudCAkZ290XSB0aGVuIHsKLS0gICAgcGFzcyAib2JqZHVtcCAtciIKLS19IGVsc2UgewotLSAgICBmYWlsICJvYmpkdW1wIC1yIgotKyAgICBzZXQgd2FudCAiJGR1bXBmaWxlOlxbIAlcXSpmaWxlIGZvcm1hdC4qUkVMT0NBVElPTiBSRUNPUkRTIEZPUiBcXFxbXFteXF1cXSoodGV4dHxURVhUfFB8XFxcJENPREVcXFwkKVxbXlxdXF0qXFxcXS4qZXh0ZXJuYWxfc3ltYm9sIgotKwotKyAgICBpZiBbcmVnZXhwICR3YW50ICRnb3RdIHRoZW4gewotKwlwYXNzICJvYmpkdW1wIC1yICgkdGVzdGZpbGUsICRkdW1wZmlsZSkiCi0rICAgIH0gZWxzZSB7Ci0rCWZhaWwgIm9iamR1bXAgLXIgKCR0ZXN0ZmlsZSwgJGR1bXBmaWxlKSIKLSsgICAgfQotK30KLSsKLSt0ZXN0X29iamR1bXBfciAkdGVzdGZpbGUgJHRlc3RmaWxlCi0raWYgeyBbIHJlbW90ZV9maWxlIGhvc3QgZXhpc3RzICR0ZXN0YXJjaGl2ZSBdIH0gdGhlbiB7Ci0rICAgIHRlc3Rfb2JqZHVtcF9yICR0ZXN0YXJjaGl2ZSBiaW50ZXN0Mi5vCi0gfQotIAotICMgVGVzdCBvYmpkdW1wIC1zCi0gCi0tc2V0IGdvdCBbYmludXRpbHNfcnVuICRPQkpEVU1QICIkT0JKRFVNUEZMQUdTIC1zICR0ZXN0ZmlsZSJdCi0rcHJvYyB0ZXN0X29iamR1bXBfcyB7IHRlc3RmaWxlIGR1bXBmaWxlIH0gewotKyAgICBnbG9iYWwgT0JKRFVNUAotKyAgICBnbG9iYWwgT0JKRFVNUEZMQUdTCi0gCi0tc2V0IHdhbnQgIiR0ZXN0ZmlsZTpcWyAJXF0qZmlsZSBmb3JtYXQuKkNvbnRlbnRzLioodGV4dHxURVhUfFB8XFxcJENPREVcXFwkKVxbXjAtOVxdKlxbIAlcXSpcWzAtOWEtZkEtRlxdKlxbIAlcXSooMDAwMDAwMDF8MDEwMDAwMDB8MDAwMDAxMDApLipDb250ZW50cy4qKGRhdGF8REFUQXxEXzEpXFteMC05XF0qXFsgCVxdKlxbMC05YS1mQS1GXF0qXFsgCVxdKigwMDAwMDAwMnwwMjAwMDAwMHwwMDAwMDIwMCkiCi0rICAgIHNldCBnb3QgW2JpbnV0aWxzX3J1biAkT0JKRFVNUCAiJE9CSkRVTVBGTEFHUyAtcyAkdGVzdGZpbGUiXQotIAotLWlmIFtyZWdleHAgJHdhbnQgJGdvdF0gdGhlbiB7Ci0tICAgIHBhc3MgIm9iamR1bXAgLXMiCi0tfSBlbHNlIHsKLS0gICAgZmFpbCAib2JqZHVtcCAtcyIKLSsgICAgc2V0IHdhbnQgIiRkdW1wZmlsZTpcWyAJXF0qZmlsZSBmb3JtYXQuKkNvbnRlbnRzLioodGV4dHxURVhUfFB8XFxcJENPREVcXFwkKVxbXjAtOVxdKlxbIAlcXSpcWzAtOWEtZkEtRlxdKlxbIAlcXSooMDAwMDAwMDF8MDEwMDAwMDB8MDAwMDAxMDApLipDb250ZW50cy4qKGRhdGF8REFUQXxEXzEpXFteMC05XF0qXFsgCVxdKlxbMC05YS1mQS1GXF0qXFsgCVxdKigwMDAwMDAwMnwwMjAwMDAwMHwwMDAwMDIwMCkiCi0rCi0rICAgIGlmIFtyZWdleHAgJHdhbnQgJGdvdF0gdGhlbiB7Ci0rCXBhc3MgIm9iamR1bXAgLXMgKCR0ZXN0ZmlsZSwgJGR1bXBmaWxlKSIKLSsgICAgfSBlbHNlIHsKLSsJZmFpbCAib2JqZHVtcCAtcyAoJHRlc3RmaWxlLCAkZHVtcGZpbGUpIgotKyAgICB9Ci0rfQotKwotK3Rlc3Rfb2JqZHVtcF9zICR0ZXN0ZmlsZSAkdGVzdGZpbGUKLStpZiB7IFsgcmVtb3RlX2ZpbGUgaG9zdCBleGlzdHMgJHRlc3RhcmNoaXZlIF0gfSB0aGVuIHsKLSsgICAgdGVzdF9vYmpkdW1wX3MgJHRlc3RhcmNoaXZlIGJpbnRlc3QyLm8KLSB9Ci0gCi0gIyBUZXN0IG9iamR1bXAgLXMgb24gYSBmaWxlIHRoYXQgY29udGFpbnMgYSBjb21wcmVzc2VkIC5kZWJ1ZyBzZWN0aW9uCi1JbmRleDogZ2l0L2JmZC9DaGFuZ2VMb2cKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9iZmQvQ2hhbmdlTG9nCi0rKysgZ2l0L2JmZC9DaGFuZ2VMb2cKLUBAIC0xLDMgKzEsOSBAQAotKzIwMTctMDUtMzAgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KLSsKLSsgICAgICAgUFIgYmludXRpbHMvMjE1MTkKLSsgICAgICAgKiBiZmRpby5jIChiZmRfZ2V0X2ZpbGVfc2l6ZSk6IE5ldyBmdW5jdGlvbi4KLSsgICAgICAgKiBiZmQtaW4yLmg6IFJlZ2VuZXJhdGVkLgotKwotIDIwMTctMDYtMjcgIEFsYW4gTW9kcmEgIDxhbW9kcmFAZ21haWwuY29tPgotIAotICAgICAgICBQUiBiaW51dGlscy8yMTY2NQotSW5kZXg6IGdpdC9iaW51dGlscy9DaGFuZ2VMb2cKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9iaW51dGlscy9DaGFuZ2VMb2cKLSsrKyBnaXQvYmludXRpbHMvQ2hhbmdlTG9nCi1AQCAtMSwzICsxLDE2IEBACi0rMjAxNy0wNS0zMCAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgotKwotKyAgICAgICBQUiBiaW51dGlscy8yMTUxOQotKyAgICAgICAqIG9iamR1bXAuYyAoZHVtcF9yZWxvY3NfaW5fc2VjdGlvbik6IFJlcGxhY2UgZ2V0X2ZpbGVfc2l6ZQotKyAgICAgICB3aXRoIGJmZF9nZXRfZmlsZV9zaXplIHRvIGdldCBhcmNoaXZlIGVsZW1lbnQgc2l6ZS4KLSsgICAgICAgKiB0ZXN0c3VpdGUvYmludXRpbHMtYWxsL29iamR1bXAuZXhwICh0ZXN0X29iamR1bXBfZik6IE5ldwotKyAgICAgICBwcm9jLgotKyAgICAgICAodGVzdF9vYmpkdW1wX2gpOiBMaWtld2lzZS4KLSsgICAgICAgKHRlc3Rfb2JqZHVtcF90KTogTGlrZXdpc2UuCi0rICAgICAgICh0ZXN0X29iamR1bXBfcik6IExpa2V3aXNlLgotKyAgICAgICAodGVzdF9vYmpkdW1wX3MpOiBMaWtld2lzZS4KLSsgICAgICAgQWRkIG9iamR1bXAgdGVzdHMgb24gYXJjaGl2ZS4KLSsKLSAyMDE3LTA3LTAxICBBbGFuIE1vZHJhICA8YW1vZHJhQGdtYWlsLmNvbT4KLSAKLSAJUFIgYmludXRpbHMvMjE2NjUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHNfMi4yOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHNfMi4yOC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUxNDM3Yi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzXzIuMjguYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi1yZXF1aXJlIGJpbnV0aWxzLmluYwotcmVxdWlyZSBiaW51dGlscy0ke1BWfS5pbmMKLQotREVQRU5EUyArPSAiZmxleCBiaXNvbiB6bGliIgotCi1FWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1zeXNyb290PS8gXAotICAgICAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGwtbGliYmZkIFwKLSAgICAgICAgICAgICAgICAtLWVuYWJsZS1pbnN0YWxsLWxpYmliZXJ0eSBcCi0gICAgICAgICAgICAgICAgLS1lbmFibGUtc2hhcmVkIFwKLSAgICAgICAgICAgICAgICAtLXdpdGgtc3lzdGVtLXpsaWIgXAotICAgICAgICAgICAgICAgICIKLQotRVhUUkFfT0VNQUtFX2FwcGVuZF9saWJjLW11c2wgPSAiXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0MV9saWJjPXllcyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndF9jdl9mdW5jX2dudWdldHRleHQyX2xpYmM9eWVzIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgotRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLWVuYWJsZS10YXJnZXRzPWFsbCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZW5hYmxlLTY0LWJpdC1iZmQgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWVuYWJsZS1pbnN0YWxsLWxpYmliZXJ0eSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGwtbGliYmZkIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXdlcnJvciIKLQotZG9faW5zdGFsbF9jbGFzcy1uYXRpdmUgKCkgewotCWF1dG90b29sc19kb19pbnN0YWxsCi0KLQkjIEluc3RhbGwgdGhlIGxpYmliZXJ0eSBoZWFkZXIKLQlpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9Ci0JaW5zdGFsbCAtbSA2NDQgJHtTfS9pbmNsdWRlL2Fuc2lkZWNsLmggJHtEfSR7aW5jbHVkZWRpcn0KLQlpbnN0YWxsIC1tIDY0NCAke1N9L2luY2x1ZGUvbGliaWJlcnR5LmggJHtEfSR7aW5jbHVkZWRpcn0KLQotCSMgV2Ugb25seSB3YW50IGxpYmliZXJ0eSwgbGliYmZkIGFuZCBsaWJvcGNvZGVzCi0Jcm0gLXJmICR7RH0ke2JpbmRpcn0KLQlybSAtcmYgJHtEfSR7cHJlZml4fS8ke1RBUkdFVF9TWVN9Ci0Jcm0gLXJmICR7RH0ke3ByZWZpeH0vbGliL2xkc2NyaXB0cwotCXJtIC1yZiAke0R9JHtwcmVmaXh9L3NoYXJlL2luZm8KLQlybSAtcmYgJHtEfSR7cHJlZml4fS9zaGFyZS9sb2NhbGUKLQlybSAtcmYgJHtEfSR7cHJlZml4fS9zaGFyZS9tYW4KLQlybWRpciAke0R9JHtwcmVmaXh9L3NoYXJlIHx8IDoKLQlybWRpciAke0R9LyR7bGliZGlyfS9nY2MtbGliIHx8IDoKLQlybWRpciAke0R9LyR7bGliZGlyfTY0L2djYy1saWIgfHwgOgotCXJtZGlyICR7RH0vJHtsaWJkaXJ9IHx8IDoKLQlybWRpciAke0R9LyR7bGliZGlyfTY0IHx8IDoKLX0KLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlsc18yLjI5LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzXzIuMjkuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWE5NzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlsc18yLjI5LjEuYmIKQEAgLTAsMCArMSw0OSBAQAorcmVxdWlyZSBiaW51dGlscy5pbmMKK3JlcXVpcmUgYmludXRpbHMtJHtQVn0uaW5jCisKK0RFUEVORFMgKz0gImZsZXggYmlzb24gemxpYiIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtc3lzcm9vdD0vIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1pbnN0YWxsLWxpYmJmZCBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtaW5zdGFsbC1saWJpYmVydHkgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLXNoYXJlZCBcCisgICAgICAgICAgICAgICAgLS13aXRoLXN5c3RlbS16bGliIFwKKyAgICAgICAgICAgICAgICAiCisKK0VYVFJBX09FTUFLRV9hcHBlbmRfbGliYy1tdXNsID0gIlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0X2N2X2Z1bmNfZ251Z2V0dGV4dDFfbGliYz15ZXMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0Ml9saWJjPXllcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS1lbmFibGUtdGFyZ2V0cz1hbGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWVuYWJsZS02NC1iaXQtYmZkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtaW5zdGFsbC1saWJpYmVydHkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWVuYWJsZS1pbnN0YWxsLWxpYmJmZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS13ZXJyb3IiCisKK2RvX2luc3RhbGxfY2xhc3MtbmF0aXZlICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBJbnN0YWxsIHRoZSBsaWJpYmVydHkgaGVhZGVyCisJaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfQorCWluc3RhbGwgLW0gNjQ0ICR7U30vaW5jbHVkZS9hbnNpZGVjbC5oICR7RH0ke2luY2x1ZGVkaXJ9CisJaW5zdGFsbCAtbSA2NDQgJHtTfS9pbmNsdWRlL2xpYmliZXJ0eS5oICR7RH0ke2luY2x1ZGVkaXJ9CisKKwkjIFdlIG9ubHkgd2FudCBsaWJpYmVydHksIGxpYmJmZCBhbmQgbGlib3Bjb2RlcworCXJtIC1yZiAke0R9JHtiaW5kaXJ9CisJcm0gLXJmICR7RH0ke3ByZWZpeH0vJHtUQVJHRVRfU1lTfQorCXJtIC1yZiAke0R9JHtwcmVmaXh9L2xpYi9sZHNjcmlwdHMKKwlybSAtcmYgJHtEfSR7cHJlZml4fS9zaGFyZS9pbmZvCisJcm0gLXJmICR7RH0ke3ByZWZpeH0vc2hhcmUvbG9jYWxlCisJcm0gLXJmICR7RH0ke3ByZWZpeH0vc2hhcmUvbWFuCisJcm1kaXIgJHtEfSR7cHJlZml4fS9zaGFyZSB8fCA6CisJcm1kaXIgJHtEfS8ke2xpYmRpcn0vZ2NjLWxpYiB8fCA6CisJcm1kaXIgJHtEfS8ke2xpYmRpcn02NC9nY2MtbGliIHx8IDoKKwlybWRpciAke0R9LyR7bGliZGlyfSB8fCA6CisJcm1kaXIgJHtEfS8ke2xpYmRpcn02NCB8fCA6Cit9CisKKyMgU3BsaXQgb3V0IGxpYmJmZC0qLnNvIHNvIGluY2x1ZGluZyBwZXJmIGRvZXNuJ3QgaW5jbHVkZSBleHRyYSBzdHVmZgorUEFDS0FHRV9CRUZPUkVfUE4gKz0gImxpYmJmZCIKK0ZJTEVTX2xpYmJmZCA9ICIke2xpYmRpcn0vbGliYmZkLSouc28iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vMDAwMS1zcmMtbG9jYWwubWstZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi8wMDAxLXNyYy1sb2NhbC5tay1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2gKaW5kZXggOTU0M2E1Ni4uMWU4NmY1NSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi8wMDAxLXNyYy1sb2NhbC5tay1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi8wMDAxLXNyYy1sb2NhbC5tay1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2gKQEAgLTEsNCArMSw0IEBACi1Gcm9tIDNhMTVmN2M5YWNlNmMwMjk0ZWRjMzEzYTE4NDhjYWZjYzMxYjJhOTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDViOTIwNGVlZTRiMDZiNDhkNTRlY2MzZWYzYTBiNTZmYzVjYzg0ZjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KIERhdGU6IEZyaSwgMjQgQXByIDIwMTUgMDA6Mzg6MzIgLTA3MDAKIFN1YmplY3Q6IFtQQVRDSF0gc3JjL2xvY2FsLm1rOiBmaXggcGFyYWxsZWwgaXNzdWUKQEAgLTksMTEgKzksMTIgQEAKIC9iaW4vYmFzaDogc3JjL3lhY2MudG1wOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CiBNYWtlZmlsZTo2NjcwOiByZWNpcGUgZm9yIHRhcmdldCAnc3JjL3lhY2MnIGZhaWxlZAogCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFsgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2Jpc29uLXBhdGNoZXMvMjAxNy0wNy9tc2cwMDAwMC5odG1sIF0KIAogU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPgogLS0tCi0gc3JjL2xvY2FsLm1rIHwgICAgMSArCisgc3JjL2xvY2FsLm1rIHwgMSArCiAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCiAKIGRpZmYgLS1naXQgYS9zcmMvbG9jYWwubWsgYi9zcmMvbG9jYWwubWsKQEAgLTI5LDUgKzMwLDUgQEAKICAJJChBTV9WX2F0KWVjaG8gImV4ZWMgJyQoYmluZGlyKS9iaXNvbicgLXkgIiciJCRAIicgPj4kQC50bXAKICAJJChBTV9WX2F0KWNobW9kIGEreCAkQC50bXAKIC0tIAotMS43LjkuNQorMi44LjEKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbl8zLjAuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb25fMy4wLjQuYmIKaW5kZXggY2ZmY2Q4OC4uN2QwNjZiZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbl8zLjAuNC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uXzMuMC40LmJiCkBAIC0yMyw3ICsyMyw2IEBACiBTUkNfVVJJW21kNXN1bV0gPSAiYzM0MjIwMWRlMTA0Y2M5Y2UwYTIxZTBhZDEwZDQwMjEiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTcyNDI4Yzc5MTdiZGY5ZmE5M2NiODE4MWM5NzFiNmUyMjgzNDEyNTg0OGNmMWQwM2NlMTBiMWJiMDcxNmZlMSIKIAotTERGTEFHU19wcmVwZW5kX2xpYmMtdWNsaWJjID0gIiAtbHJ0ICIKIERFUEVORFNfY2xhc3MtbmF0aXZlID0gImdldHRleHQtbWluaW1hbC1uYXRpdmUiCiAKIGluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ib290Y2hhcnQyL2Jvb3RjaGFydDJfMC4xNC44LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ib290Y2hhcnQyL2Jvb3RjaGFydDJfMC4xNC44LmJiCmluZGV4IDRmMDE3MzQuLmEzMTAxMzUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYm9vdGNoYXJ0Mi9ib290Y2hhcnQyXzAuMTQuOC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jvb3RjaGFydDIvYm9vdGNoYXJ0Ml8wLjE0LjguYmIKQEAgLTEzNCw3ICsxMzQsNyBAQAogICAgIGVjaG8gJ0VYSVRfUFJPQz0iJEVYSVRfUFJPQyBtYXRjaGJveC13aW5kb3ctbWFuYWdlciInID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2Jvb3RjaGFydGQuY29uZgogCiAgICAjIFVzZSBweXRob24gMyBpbnN0ZWFkIG9mIHB5dGhvbiAyCi0gICBzZWQgLWkgLWUgJzFzLCMhLipweXRob24uKiwjISR7YmluZGlyfS9weXRob24zLCcgJHtEfSR7YmluZGlyfS9weWJvb3RjaGFydGd1aQorICAgc2VkIC1pIC1lICcxcywjIS4qcHl0aG9uLiosIyEke1VTUkJJTlBBVEh9L2VudiBweXRob24zLCcgJHtEfSR7YmluZGlyfS9weWJvb3RjaGFydGd1aQogfQogCiBQQUNLQUdFUyA9KyAicHlib290Y2hhcnRndWkiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J0cmZzLXRvb2xzL2J0cmZzLXRvb2xzLzAwMDEtTWFrZWZpbGUtYnVpbGQtbWt0YWJsZXMtdXNpbmctbmF0aXZlLWdjYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnRyZnMtdG9vbHMvYnRyZnMtdG9vbHMvMDAwMS1NYWtlZmlsZS1idWlsZC1ta3RhYmxlcy11c2luZy1uYXRpdmUtZ2NjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MTkwMGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J0cmZzLXRvb2xzL2J0cmZzLXRvb2xzLzAwMDEtTWFrZWZpbGUtYnVpbGQtbWt0YWJsZXMtdXNpbmctbmF0aXZlLWdjYy5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIGU1ODM2OWY2ZDM2YmM1MWViNTlkNmFmYTM0YzFjYWUzZmYwODEwZWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNyBBdWcgMjAxNyAxNDoxMDozOCArMDMwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZTogYnVpbGQgbWt0YWJsZXMgdXNpbmcgbmF0aXZlIGdjYworCitJdCdzIGEgdGhyb3dhd2F5IGhlbHBlciBiaW5hcnkgdXNlZCBkdXJpbmcgYnVpbGQsIGFuZCBzbyBpdCBuZWVkcyB0bworYmUgbmF0aXZlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lIHNwZWNpZmljXQorU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CistLS0KKyBNYWtlZmlsZSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IGIzZTJiNjMuLjM0N2FhZjEgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0zMjMsNyArMzIzLDcgQEAgdmVyc2lvbi5oOiB2ZXJzaW9uLnNoIHZlcnNpb24uaC5pbiBjb25maWd1cmUuYWMKKyAKKyBta3RhYmxlczoga2VybmVsLWxpYi9ta3RhYmxlcy5jCisgCUBlY2hvICIgICAgW0NDXSAgICAgJEAiCistCSQoUSkkKENDKSAkKENGTEFHUykgJDwgLW8gJEAKKysJJChRKSQoQlVJTERfQ0MpICQoQlVJTERfQ0ZMQUdTKSAkPCAtbyAkQAorIAorIGtlcm5lbC1saWIvdGFibGVzLmM6IG1rdGFibGVzCisgCUBlY2hvICIgICAgW1RBQkxFXSAgJEAiCistLSAKKzIuMTMuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J0cmZzLXRvb2xzL2J0cmZzLXRvb2xzXzQuMTIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J0cmZzLXRvb2xzL2J0cmZzLXRvb2xzXzQuMTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNjYzg5YwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnRyZnMtdG9vbHMvYnRyZnMtdG9vbHNfNC4xMi5iYgpAQCAtMCwwICsxLDM1IEBACitTVU1NQVJZID0gIkNoZWNrc3VtbWluZyBDb3B5IG9uIFdyaXRlIEZpbGVzeXN0ZW0gdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiQnRyZnMgaXMgYSBuZXcgY29weSBvbiB3cml0ZSBmaWxlc3lzdGVtIGZvciBMaW51eCBhaW1lZCBhdCBcCitpbXBsZW1lbnRpbmcgYWR2YW5jZWQgZmVhdHVyZXMgd2hpbGUgZm9jdXNpbmcgb24gZmF1bHQgdG9sZXJhbmNlLCByZXBhaXIgYW5kIFwKK2Vhc3kgYWRtaW5pc3RyYXRpb24uIFwKK1RoaXMgcGFja2FnZSBjb250YWlucyB1dGlsaXRpZXMgKG1rZnMsIGZzY2ssIGJ0cmZzY3RsKSB1c2VkIHRvIHdvcmsgd2l0aCBcCitidHJmcyBhbmQgYW4gdXRpbGl0eSAoYnRyZnMtY29udmVydCkgdG8gbWFrZSBhIGJ0cmZzIGZpbGVzeXN0ZW0gZnJvbSBhbiBleHQzLiIKKworSE9NRVBBR0UgPSAiaHR0cHM6Ly9idHJmcy53aWtpLmtlcm5lbC5vcmciCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mY2IwMmRjNTUyYTA0MWRlZTI3ZTRiODVjNzM5NjA2NyIKK1NFQ1RJT04gPSAiYmFzZSIKK0RFUEVORFMgPSAidXRpbC1saW51eCBhdHRyIGUyZnNwcm9ncyBsem8gYWNsIgorREVQRU5EU19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiB1ZGV2IgorUkRFUEVORFNfJHtQTn0gPSAibGliZ2NjIgorCitTUkNSRVYgPSAiMDYwNzEzMmMzMjAwYmNlYWQxNDI2ZTZkYzY4NTQzMjAwOGRlOTVkZSIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2tkYXZlL2J0cmZzLXByb2dzLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLU1ha2VmaWxlLWJ1aWxkLW1rdGFibGVzLXVzaW5nLW5hdGl2ZS1nY2MucGF0Y2ggXAorICAgICAgICAgICAiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwa2djb25maWcgbWFucGFnZXMKKworUEFDS0FHRUNPTkZJR1ttYW5wYWdlc10gPSAiLS1lbmFibGUtZG9jdW1lbnRhdGlvbiwgLS1kaXNhYmxlLWRvY3VtZW50YXRpb24sIGFzY2lpZG9jLW5hdGl2ZSB4bWx0by1uYXRpdmUiCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtbXVzbCA9ICIgLS1kaXNhYmxlLWJhY2t0cmFjZSAiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCSMgVXBzdHJlYW0gZG9lc24ndCBzaGlwIHRoaXMgYW5kIGF1dG9yZWNvbmYgd29uJ3QgaW5zdGFsbCBpdCBhcyBhdXRvbWFrZSBpc24ndCB1c2VkLgorCW1rZGlyIC1wICR7U30vY29uZmlnCisJY3AgLWYgJChhdXRvbWFrZSAtLXByaW50LWxpYmRpcikvaW5zdGFsbC1zaCAke1N9L2NvbmZpZy8KK30KKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J0cmZzLXRvb2xzL2J0cmZzLXRvb2xzXzQuOS4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idHJmcy10b29scy9idHJmcy10b29sc180LjkuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVlOWUyMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J0cmZzLXRvb2xzL2J0cmZzLXRvb2xzXzQuOS4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotU1VNTUFSWSA9ICJDaGVja3N1bW1pbmcgQ29weSBvbiBXcml0ZSBGaWxlc3lzdGVtIHV0aWxpdGllcyIKLURFU0NSSVBUSU9OID0gIkJ0cmZzIGlzIGEgbmV3IGNvcHkgb24gd3JpdGUgZmlsZXN5c3RlbSBmb3IgTGludXggYWltZWQgYXQgXAotaW1wbGVtZW50aW5nIGFkdmFuY2VkIGZlYXR1cmVzIHdoaWxlIGZvY3VzaW5nIG9uIGZhdWx0IHRvbGVyYW5jZSwgcmVwYWlyIGFuZCBcCi1lYXN5IGFkbWluaXN0cmF0aW9uLiBcCi1UaGlzIHBhY2thZ2UgY29udGFpbnMgdXRpbGl0aWVzIChta2ZzLCBmc2NrLCBidHJmc2N0bCkgdXNlZCB0byB3b3JrIHdpdGggXAotYnRyZnMgYW5kIGFuIHV0aWxpdHkgKGJ0cmZzLWNvbnZlcnQpIHRvIG1ha2UgYSBidHJmcyBmaWxlc3lzdGVtIGZyb20gYW4gZXh0My4iCi0KLUhPTUVQQUdFID0gImh0dHBzOi8vYnRyZnMud2lraS5rZXJuZWwub3JnIgotCi1MSUNFTlNFID0gIkdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZmNiMDJkYzU1MmEwNDFkZWUyN2U0Yjg1YzczOTYwNjciCi1TRUNUSU9OID0gImJhc2UiCi1ERVBFTkRTID0gInV0aWwtbGludXggYXR0ciBlMmZzcHJvZ3MgbHpvIGFjbCIKLURFUEVORFNfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgdWRldiIKLVJERVBFTkRTXyR7UE59ID0gImxpYmdjYyIKLQotU1JDUkVWID0gIjk2NDg1YzM0YWMwMzI5ZmIwMDczNDc2ZjE2ZDIwODNjNjQ3MDFmMjkiCi1TUkNfVVJJID0gImdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9rZGF2ZS9idHJmcy1wcm9ncy5naXQiCi0KLWluaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwa2djb25maWcgbWFucGFnZXMKLQotUEFDS0FHRUNPTkZJR1ttYW5wYWdlc10gPSAiLS1lbmFibGUtZG9jdW1lbnRhdGlvbiwgLS1kaXNhYmxlLWRvY3VtZW50YXRpb24sIGFzY2lpZG9jLW5hdGl2ZSB4bWx0by1uYXRpdmUiCi1FWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtbXVzbCA9ICIgLS1kaXNhYmxlLWJhY2t0cmFjZSAiCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgewotCSMgVXBzdHJlYW0gZG9lc24ndCBzaGlwIHRoaXMgYW5kIGF1dG9yZWNvbmYgd29uJ3QgaW5zdGFsbCBpdCBhcyBhdXRvbWFrZSBpc24ndCB1c2VkLgotCW1rZGlyIC1wICR7U30vY29uZmlnCi0JY3AgLWYgJChhdXRvbWFrZSAtLXByaW50LWxpYmRpcikvaW5zdGFsbC1zaCAke1N9L2NvbmZpZy8KLX0KLQotUyA9ICIke1dPUktESVJ9L2dpdCIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvYnVpbGQtY29tcGFyZV9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvYnVpbGQtY29tcGFyZV9naXQuYmIKaW5kZXggYzYwYzE2NC4uODRkMDRjZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2J1aWxkLWNvbXBhcmVfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9idWlsZC1jb21wYXJlX2dpdC5iYgpAQCAtMjIsNiArMjIsNyBAQAogU1JDUkVWID0gImM1MzUyYzA1NGM2ZWYxNTczNWRhMzFiNzZkNmQ4ODYyMGY0YWZmMGEiCiBQRSA9ICIxIgogUFYgPSAiMjAxNS4wMi4xMCtnaXQke1NSQ1BWfSIKK1VQU1RSRUFNX1ZFUlNJT05fVU5LTk9XTiA9ICIxIgogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NocnBhdGgvY2hycGF0aC9zdGFuZGFyZGRvYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2hycGF0aC9jaHJwYXRoL3N0YW5kYXJkZG9jLnBhdGNoCmluZGV4IGY5NmYxMDQuLjNkMzAzZmIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2hycGF0aC9jaHJwYXRoL3N0YW5kYXJkZG9jLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2hycGF0aC9jaHJwYXRoL3N0YW5kYXJkZG9jLnBhdGNoCkBAIC0xLDE0ICsxLDI0IEBACi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK0Zyb20gMjg1YjVmYmYxZDZiMjVmZjU1ZDMwNWMxN2VkZjRkMzI3YmYxOWRkMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPgorRGF0ZTogVHVlLCA1IEp1bCAyMDExIDIzOjQyOjI5ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNocnBhdGg6IEVuc3VyZSB0aGUgcGFja2FnZSByZXNwZWN0cyB0aGUgZG9jZGlyIHZhcmlhYmxlCiAKLWF1dG9jb25mL2F1dG9tYWtlIHNldCBkb2NkaXIgYXV0b21hdGljYWxseSwgdXNlIHRoZWlyIHZhbHVlIGVuc3VyaW5nIAorYXV0b2NvbmYvYXV0b21ha2Ugc2V0IGRvY2RpciBhdXRvbWF0aWNhbGx5LCB1c2UgdGhlaXIgdmFsdWUgZW5zdXJpbmcKIGRvYyBmaWxlcyBhcmUgcGxhY2VkIGludG8gJGRhdGFkaXIvZG9jLCBub3QgJHByZWZpeC9kb2MuCiAKIFJQIDUvNy8yMDExCiAKLUluZGV4OiBjaHJwYXRoLTAuMTMvTWFrZWZpbGUuYW0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBjaHJwYXRoLTAuMTMub3JpZy9NYWtlZmlsZS5hbQkyMDExLTA3LTA1IDIzOjQwOjE0Ljc2OTkyMDI1NCArMDEwMAotKysrIGNocnBhdGgtMC4xMy9NYWtlZmlsZS5hbQkyMDExLTA3LTA1IDIzOjQwOjE5LjgxOTkyMDYzNSArMDEwMAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgWyBodHRwOi8vbGlzdHMuYWxpb3RoLmRlYmlhbi5vcmcvcGlwZXJtYWlsL2NocnBhdGgtZGV2ZWwvV2Vlay1vZi1Nb24tMjAxNzA3MTAvMDAwMDEzLmh0bWwgXQorCitTaWduZWQtb2ZmLWJ5OiBEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuYW0gfCAyIC0tCisgMSBmaWxlIGNoYW5nZWQsIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCBiNTBhZDIxLi41ZjdlODYxIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCiBAQCAtMSw3ICsxLDUgQEAKICBTVUJESVJTID0gdGVzdHN1aXRlIGRlYgogIApAQCAtMTcsMyArMjcsNiBAQAogIGRvY19EQVRBID0gQVVUSE9SUyBDT1BZSU5HIENoYW5nZUxvZyBJTlNUQUxMIE5FV1MgUkVBRE1FCiAgCiAgYmluX1BST0dSQU1TID0gY2hycGF0aAorLS0gCisyLjguMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlLW5hdGl2ZV8zLjcuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UtbmF0aXZlXzMuNy4yLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWQ0MzQ1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UtbmF0aXZlXzMuNy4yLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotcmVxdWlyZSBjbWFrZS5pbmMKLWluaGVyaXQgbmF0aXZlCi0KLURFUEVORFMgKz0gImJ6aXAyLXJlcGxhY2VtZW50LW5hdGl2ZSBleHBhdC1uYXRpdmUgeHotbmF0aXZlIHpsaWItbmF0aXZlIGN1cmwtbmF0aXZlIgotCi1TUkNfVVJJICs9ICJcCi0gICAgZmlsZTovL2NtbGliYXJjaGl2ZS1kaXNhYmxlLWV4dDJmcy5wYXRjaCBcCi0iCi0KLUIgPSAiJHtXT1JLRElSfS9idWlsZCIKLWRvX2NvbmZpZ3VyZVtjbGVhbmRpcnNdID0gIiR7Qn0iCi0KLSMgRGlzYWJsZSBjY21ha2Ugc2luY2Ugd2UgZG9uJ3QgZGVwZW5kIG9uIG5jdXJzZXMKLUNNQUtFX0VYVFJBQ09ORiA9ICJcCi0gICAgLURDTUFLRV9MSUJSQVJZX1BBVEg9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IFwKLSAgICAtREJVSUxEX0N1cnNlc0RpYWxvZz0wIFwKLSAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSSUVTPTEgXAotICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX0pTT05DUFA9MCBcCi0gICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfTElCQVJDSElWRT0wIFwKLSAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9MSUJVVj0wIFwKLSAgICAtREVOQUJMRV9BQ0w9MCAtREhBVkVfQUNMX0xJQkFDTF9IPTAgXAotICAgIC1ESEFWRV9TWVNfQUNMX0g9MCBcCi0iCi0KLWRvX2NvbmZpZ3VyZSAoKSB7Ci0JJHtTfS9jb25maWd1cmUgLS12ZXJib3NlIC0tcHJlZml4PSR7cHJlZml4fSAtLSAke0NNQUtFX0VYVFJBQ09ORn0KLX0KLQotZG9fY29tcGlsZSgpIHsKLQlvZV9ydW5tYWtlCi19Ci0KLWRvX2luc3RhbGwoKSB7Ci0Jb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCi19Ci0KLWRvX2NvbXBpbGVbcHJvZ3Jlc3NdID0gInBlcmNlbnQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlLW5hdGl2ZV8zLjguMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UtbmF0aXZlXzMuOC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NWU4YjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlLW5hdGl2ZV8zLjguMi5iYgpAQCAtMCwwICsxLDM4IEBACityZXF1aXJlIGNtYWtlLmluYworaW5oZXJpdCBuYXRpdmUKKworREVQRU5EUyArPSAiYnppcDItcmVwbGFjZW1lbnQtbmF0aXZlIGV4cGF0LW5hdGl2ZSB4ei1uYXRpdmUgemxpYi1uYXRpdmUgY3VybC1uYXRpdmUiCisKK1NSQ19VUkkgKz0gIlwKKyAgICBmaWxlOi8vY21saWJhcmNoaXZlLWRpc2FibGUtZXh0MmZzLnBhdGNoIFwKKyIKKworQiA9ICIke1dPUktESVJ9L2J1aWxkIgorZG9fY29uZmlndXJlW2NsZWFuZGlyc10gPSAiJHtCfSIKKworIyBEaXNhYmxlIGNjbWFrZSBzaW5jZSB3ZSBkb24ndCBkZXBlbmQgb24gbmN1cnNlcworQ01BS0VfRVhUUkFDT05GID0gIlwKKyAgICAtRENNQUtFX0xJQlJBUllfUEFUSD0ke1NUQUdJTkdfTElCRElSX05BVElWRX0gXAorICAgIC1EQlVJTERfQ3Vyc2VzRGlhbG9nPTAgXAorICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJJRVM9MSBcCisgICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfSlNPTkNQUD0wIFwKKyAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9MSUJBUkNISVZFPTAgXAorICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX0xJQlVWPTAgXAorICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX0xJQlJIQVNIPTAgXAorICAgIC1ERU5BQkxFX0FDTD0wIC1ESEFWRV9BQ0xfTElCQUNMX0g9MCBcCisgICAgLURIQVZFX1NZU19BQ0xfSD0wIFwKKyIKKworZG9fY29uZmlndXJlICgpIHsKKwkke1N9L2NvbmZpZ3VyZSAtLXZlcmJvc2UgLS1wcmVmaXg9JHtwcmVmaXh9IC0tICR7Q01BS0VfRVhUUkFDT05GfQorfQorCitkb19jb21waWxlKCkgeworCW9lX3J1bm1ha2UKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKK30KKworZG9fY29tcGlsZVtwcm9ncmVzc10gPSAicGVyY2VudCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS5pbmMKaW5kZXggNmM4YjM2ZC4uNmFlYjI1ZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS5pbmMKQEAgLTYsNyArNiw3IEBACiBCVUdUUkFDS0VSID0gImh0dHA6Ly9wdWJsaWMua2l0d2FyZS5jb20vQnVnL215X3ZpZXdfcGFnZS5waHAiCiBTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCiBMSUNFTlNFID0gIkJTRCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NvcHlyaWdodC50eHQ7bWQ1PTdhNjRiYzU2NDIwMmJmNzQwMWQ5YThlZjMzYzk1NjRkIFwKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NvcHlyaWdodC50eHQ7bWQ1PThkOGM3YmMzMmY4Nzk3ZDIzZjVjZjYwNWQ5MzM5ZDJkIFwKICAgICAgICAgICAgICAgICAgICAgZmlsZTovL1NvdXJjZS9jbWFrZS5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MzttZDU9NDQ5NGRlZTE4NDIxMmZjODljNDY5YzNhY2Q1NTVhMTQiCiAKIENNQUtFX01BSk9SX1ZFUlNJT04gPSAiJHtAJy4nLmpvaW4oZC5nZXRWYXIoJ1BWJykuc3BsaXQoJy4nKVswOjJdKX0iCkBAIC0xNCwxMiArMTQsMTEgQEAKIFNSQ19VUkkgPSAiaHR0cHM6Ly9jbWFrZS5vcmcvZmlsZXMvdiR7Q01BS0VfTUFKT1JfVkVSU0lPTn0vY21ha2UtJHtQVn0udGFyLmd6IFwKICAgICAgICAgICAgZmlsZTovL3N1cHBvcnQtb2UtcXQ0LXRvb2xzLW5hbWVzLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL3F0NC1mYWlsLXNpbGVudC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9hdm9pZC1nY2Mtd2FybmluZ3Mtd2l0aC1Xc3RyaWN0LXByb3RvdHlwZXMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1LV0lNTC10ZXN0cy1SZW1vdmUtZm9ybWF0LXNlY3VyaXR5LWZyb20tZmxhZ3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1GaW5kQ1VEQS1Vc2UtZmluZF9wcm9ncmFtLWlmLWZpbmRfaG9zdF9wcm9ncmFtLWlzLW5vLnBhdGNoIFwKICAgICAgICAgICAgIgogCi1TUkNfVVJJW21kNXN1bV0gPSAiNzliZDdlNjVjZDgxZWEzYWEyNjE5NDg0YWQ2ZmYyNWEiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGMxMjQ2YzRlNmQxNjhlYTRkNmUwNDJjZmJhNTc3YzFhY2Q2NWZlZWEyN2U1NmY1ZmYzN2RmOTIwYzMwY2FlMCIKK1NSQ19VUklbbWQ1c3VtXSA9ICJiNWRmZjYxZjZhN2YxMzA1MjcxYWIzZjZhZTI2MTQxOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkYTMwNzI3OTRlYjRjMDlmMmQ3ODJmY2VlMDQzODQ3Yjk5YmI0Y2Y4ZDQ1NzM5NzhkOWIyMDI0MjE0ZDZlOTJkIgogCiBVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJjbWFrZS0oP1A8cHZlcj5cZCsoXC5cZCspKylcLnRhciIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS8wMDAxLUZpbmRDVURBLVVzZS1maW5kX3Byb2dyYW0taWYtZmluZF9ob3N0X3Byb2dyYW0taXMtbm8ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlLzAwMDEtRmluZENVREEtVXNlLWZpbmRfcHJvZ3JhbS1pZi1maW5kX2hvc3RfcHJvZ3JhbS1pcy1uby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjgyMGRiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS8wMDAxLUZpbmRDVURBLVVzZS1maW5kX3Byb2dyYW0taWYtZmluZF9ob3N0X3Byb2dyYW0taXMtbm8ucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSA0NmQyNWU3ODJlYmQ5YjZjNTA3NzFiNmYzMDQzM2M1OGZhZTAzYTUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWF4aW1lIFJvdXNzaW4tQsOpbGFuZ2VyIDxtYXhpbWUucm91c3NpbmJlbGFuZ2VyQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMTcgMTE6MzA6MDcgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gY21ha2U6IFVzZSBmaW5kX3Byb2dyYW0gaWYgZmluZF9ob3N0X3Byb2dyYW0gaXMgbm90CisgYXZhaWxhYmxlCisKK0NNYWtlIGRvZXMgbm90IGRlZmluZSB0aGUgYGZpbmRfaG9zdF9wcm9ncmFtYCBjb21tYW5kIHdlJ3ZlIGJlZW4gdXNpbmcKK2luIHRoZSBjcm9zcy1jb21waWxpbmcgY29kZSBwYXRoLiAgSXQgd2FzIHByb3ZpZGVkIGJ5IGEgd2lkZWx5IHVzZWQKK0FuZHJvaWQgdG9vbGNoYWluIGZpbGUuICBGb3IgY29tcGF0aWJpbGl0eSwgY29udGludWUgdG8gdXNlCitgZmluZF9ob3N0X3Byb2dyYW1gIGlmIGF2YWlsYWJsZSwgYnV0IG90aGVyd2lzZSB1c2UganVzdCBgZmluZF9wcm9ncmFtYC4KKworVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZAorW2h0dHBzOi8vZ2l0bGFiLmtpdHdhcmUuY29tL2NtYWtlL2NtYWtlL21lcmdlX3JlcXVlc3RzLzEwMDldCisgICAgICAgIC0gV2lsbCBiZSBpbiAzLjEwCisKK1NpZ25lZC1vZmYtYnk6IE1heGltZSBSb3Vzc2luLULDqWxhbmdlciA8bWF4aW1lLnJvdXNzaW5iZWxhbmdlckBnbWFpbC5jb20+CistLS0KKyBNb2R1bGVzL0ZpbmRDVURBLmNtYWtlIHwgNiArKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRDVURBLmNtYWtlIGIvTW9kdWxlcy9GaW5kQ1VEQS5jbWFrZQoraW5kZXggYTRkY2E1NC4uNzdjYTM1MSAxMDA2NDQKKy0tLSBhL01vZHVsZXMvRmluZENVREEuY21ha2UKKysrKyBiL01vZHVsZXMvRmluZENVREEuY21ha2UKK0BAIC02NzksNyArNjc5LDExIEBAIGlmKENNQUtFX0NST1NTQ09NUElMSU5HKQorICAgIyBhZGQga25vd24gQ1VEQSB0YXJnZXRyIHJvb3QgcGF0aCB0byB0aGUgc2V0IG9mIGRpcmVjdG9yaWVzIHdlIHNlYXJjaCBmb3IgcHJvZ3JhbXMsIGxpYnJhcmllcyBhbmQgaGVhZGVycworICAgc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSCAiJHtDVURBX1RPT0xLSVRfVEFSR0VUX0RJUn07JHtDTUFLRV9GSU5EX1JPT1RfUEFUSH0iKQorICAgbWFjcm8oIGN1ZGFfZmluZF9ob3N0X3Byb2dyYW0gKQorLSAgICBmaW5kX2hvc3RfcHJvZ3JhbSggJHtBUkdOfSApCisrICAgIGlmIChDT01NQU5EIGZpbmRfaG9zdF9wcm9ncmFtKQorKyAgICAgIGZpbmRfaG9zdF9wcm9ncmFtKCAke0FSR059ICkKKysgICAgZWxzZSgpCisrICAgICAgZmluZF9wcm9ncmFtKCAke0FSR059ICkKKysgICAgZW5kaWYoKQorICAgZW5kbWFjcm8oKQorIGVsc2UoKQorICAgIyBmb3Igbm9uLWNyb3NzLWNvbXBpbGUsIGZpbmRfaG9zdF9wcm9ncmFtID09IGZpbmRfcHJvZ3JhbSBhbmQgQ1VEQV9UT09MS0lUX1RBUkdFVF9ESVIgPT0gQ1VEQV9UT09MS0lUX1JPT1RfRElSCistLQorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS8wMDAxLUtXSU1MLXRlc3RzLVJlbW92ZS1mb3JtYXQtc2VjdXJpdHktZnJvbS1mbGFncy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvMDAwMS1LV0lNTC10ZXN0cy1SZW1vdmUtZm9ybWF0LXNlY3VyaXR5LWZyb20tZmxhZ3MucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MDEzM2IuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS8wMDAxLUtXSU1MLXRlc3RzLVJlbW92ZS1mb3JtYXQtc2VjdXJpdHktZnJvbS1mbGFncy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLUZyb20gMDk0MTM5NWIxNDY4MDRhYmNkODcwMDQ1ODlmZjZlN2EyOTUzNDEyZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+Ci1EYXRlOiBUaHUsIDE2IE1hciAyMDE3IDE0OjM5OjA0ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0hdIEtXSU1MIHRlc3RzOiBSZW1vdmUgZm9ybWF0LXNlY3VyaXR5IGZyb20gZmxhZ3MKLQotRm9yIHRoZSB0ZXN0cyB3aGVyZSAiZm9ybWF0IiBpcyByZW1vdmVkIGZyb20gZmxhZ3MsICJmb3JtYXQtc2VjdXJpdHkiCi1zaG91bGQgYmUgcmVtb3ZlZCBhcyB3ZWxsLiBPdGhlcndpc2UgYnVpbGRpbmcgY21ha2Ugd2l0aAotIi1XZm9ybWF0IC1XZm9ybWF0LXNlY3VyaXR5IiBmYWlsczoKLQotfCBjYzE6IGVycm9yOiAtV2Zvcm1hdC1zZWN1cml0eSBpZ25vcmVkIHdpdGhvdXQgLVdmb3JtYXQgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtwYXJ0IG9mIGNvbW1pdCBmNzc0MjBjZmM5XQotU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KLS0tLQotIFV0aWxpdGllcy9LV0lNTC90ZXN0L0NNYWtlTGlzdHMudHh0IHwgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvVXRpbGl0aWVzL0tXSU1ML3Rlc3QvQ01ha2VMaXN0cy50eHQgYi9VdGlsaXRpZXMvS1dJTUwvdGVzdC9DTWFrZUxpc3RzLnR4dAotaW5kZXggNGY2ZjM3Yi4uMWJmOTNiYiAxMDA2NDQKLS0tLSBhL1V0aWxpdGllcy9LV0lNTC90ZXN0L0NNYWtlTGlzdHMudHh0Ci0rKysgYi9VdGlsaXRpZXMvS1dJTUwvdGVzdC9DTWFrZUxpc3RzLnR4dAotQEAgLTEwLDcgKzEwLDcgQEAgZW5kaWYoKQotICMgU3VwcHJlc3MgcHJpbnRmL3NjYW5mIGZvcm1hdCB3YXJuaW5nczsgd2UgdGVzdCBpZiB0aGUgc2l6ZXMgbWF0Y2guCi0gZm9yZWFjaChsYW5nIEMgQ1hYKQotICAgaWYoS1dJTUxfTEFOR1VBR0VfJHtsYW5nfSBBTkQgQ01BS0VfJHtsYW5nfV9DT01QSUxFUl9JRCBTVFJFUVVBTCAiR05VIikKLS0gICAgc2V0KENNQUtFXyR7bGFuZ31fRkxBR1MgIiR7Q01BS0VfJHtsYW5nfV9GTEFHU30gLVduby1mb3JtYXQiKQotKyAgICBzZXQoQ01BS0VfJHtsYW5nfV9GTEFHUyAiJHtDTUFLRV8ke2xhbmd9X0ZMQUdTfSAtV25vLWZvcm1hdCAtV25vLWZvcm1hdC1zZWN1cml0eSIpCi0gICBlbmRpZigpCi0gZW5kZm9yZWFjaCgpCi0gCi0tLSAKLTIuMS40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvT0VUb29sY2hhaW5Db25maWcuY21ha2UgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL09FVG9vbGNoYWluQ29uZmlnLmNtYWtlCmluZGV4IDY1MTg0MDguLmRjODQ3N2UgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvT0VUb29sY2hhaW5Db25maWcuY21ha2UKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9PRVRvb2xjaGFpbkNvbmZpZy5jbWFrZQpAQCAtMSw3ICsxLDcgQEAKIHNldCggQ01BS0VfU1lTVEVNX05BTUUgTGludXggKQogc2V0KCBDTUFLRV9DX0ZMQUdTICRFTlZ7Q0ZMQUdTfSBDQUNIRSBTVFJJTkcgIiIgRk9SQ0UgKQogc2V0KCBDTUFLRV9DWFhfRkxBR1MgJEVOVntDWFhGTEFHU30gIENBQ0hFIFNUUklORyAiIiBGT1JDRSApCi1zZXQoIENNQUtFIEFTTV9GTEFHUyAke0NNQUtFX0NfRkxBR1N9IENBQ0hFIFNUUklORyAiIiBGT1JDRSApCitzZXQoIENNQUtFX0FTTV9GTEFHUyAke0NNQUtFX0NfRkxBR1N9IENBQ0hFIFNUUklORyAiIiBGT1JDRSApCiBzZXQoIENNQUtFX0xERkxBR1NfRkxBR1MgJHtDTUFLRV9DWFhfRkxBR1N9IENBQ0hFIFNUUklORyAiIiBGT1JDRSApCiAKIHNldCggQ01BS0VfRklORF9ST09UX1BBVEggJEVOVntPRUNPUkVfVEFSR0VUX1NZU1JPT1R9ICRFTlZ7T0VDT1JFX05BVElWRV9TWVNST09UfSApCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL2F2b2lkLWdjYy13YXJuaW5ncy13aXRoLVdzdHJpY3QtcHJvdG90eXBlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvYXZvaWQtZ2NjLXdhcm5pbmdzLXdpdGgtV3N0cmljdC1wcm90b3R5cGVzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjhkNDgwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvYXZvaWQtZ2NjLXdhcm5pbmdzLXdpdGgtV3N0cmljdC1wcm90b3R5cGVzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotRnJvbSA0YmMxNzM0NWMwMWVhNDY3MDk5ZTI4YzdkZjMwYzIzYWNlOWU3ODExIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQW5kcmUgTWNDdXJkeSA8YXJtY2N1cmR5QGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMTQgT2N0IDIwMTYgMTY6MjY6NTggLTA3MDAKLVN1YmplY3Q6IFtQQVRDSF0gQ2hlY2tGdW5jdGlvbkV4aXN0cy5jOiBhdm9pZCBnY2Mgd2FybmluZ3Mgd2l0aAotIC1Xc3RyaWN0LXByb3RvdHlwZXMKLQotQXZvaWQgd2FybmluZ3MgKGFuZCB0aGVyZWZvcmUgYnVpbGQgZmFpbHVyZXMgZXRjKSBpZiBhIHVzZXIgaGFwcGVucwotdG8gYWRkIC1Xc3RyaWN0LXByb3RvdHlwZXMgdG8gQ0ZMQUdTLgotCi0gfCAkIGdjYyAtLXZlcnNpb24KLSB8IGdjYyAoVWJ1bnR1IDQuOC40LTJ1YnVudHUxfjE0LjA0LjMpIDQuOC40Ci0gfAotIHwgJCBnY2MgLVdzdHJpY3QtcHJvdG90eXBlcyAtV2Vycm9yIC1EQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTPXB0aHJlYWRfY3JlYXRlIC1vIGZvby5vIC1jIE1vZHVsZXMvQ2hlY2tGdW5jdGlvbkV4aXN0cy5jCi0gfCBNb2R1bGVzL0NoZWNrRnVuY3Rpb25FeGlzdHMuYzo3OjM6IGVycm9yOiBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpc24ndCBhIHByb3RvdHlwZSBbLVdlcnJvcj1zdHJpY3QtcHJvdG90eXBlc10KLSB8ICAgIENIRUNLX0ZVTkNUSU9OX0VYSVNUUygpOwotIHwgICAgXgotIHwgY2MxOiBhbGwgd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMKLSB8Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgotLS0tCi0gTW9kdWxlcy9DaGVja0Z1bmN0aW9uRXhpc3RzLmMgfCAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9Nb2R1bGVzL0NoZWNrRnVuY3Rpb25FeGlzdHMuYyBiL01vZHVsZXMvQ2hlY2tGdW5jdGlvbkV4aXN0cy5jCi1pbmRleCAyMzA0MDAwLi4yMjRlMzQwIDEwMDY0NAotLS0tIGEvTW9kdWxlcy9DaGVja0Z1bmN0aW9uRXhpc3RzLmMKLSsrKyBiL01vZHVsZXMvQ2hlY2tGdW5jdGlvbkV4aXN0cy5jCi1AQCAtNCw3ICs0LDcgQEAKLSBleHRlcm4gIkMiCi0gI2VuZGlmCi0gICBjaGFyCi0tICBDSEVDS19GVU5DVElPTl9FWElTVFMoKTsKLSsgIENIRUNLX0ZVTkNUSU9OX0VYSVNUUyh2b2lkKTsKLSAjaWZkZWYgX19DTEFTU0lDX0NfXwotIGludCBtYWluKCkKLSB7Ci0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2VfMy43LjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlXzMuNy4yLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTY2YTQ4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2VfMy43LjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi1yZXF1aXJlIGNtYWtlLmluYwotCi1pbmhlcml0IGNtYWtlCi0KLURFUEVORFMgKz0gImN1cmwgZXhwYXQgemxpYiBsaWJhcmNoaXZlIHh6IG5jdXJzZXMgYnppcDIiCi0KLVNSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgXAotICAgIGZpbGU6Ly9PRVRvb2xjaGFpbkNvbmZpZy5jbWFrZSBcCi0gICAgZmlsZTovL2Vudmlyb25tZW50LmQtY21ha2Uuc2giCi0KLSMgU3RyaXAgJHtwcmVmaXh9IGZyb20gJHtkb2NkaXJ9LCBzZXQgcmVzdWx0IGludG8gZG9jZGlyX3N0cmlwcGVkCi1weXRob24gKCkgewotICAgIHByZWZpeD1kLmdldFZhcigicHJlZml4IikKLSAgICBkb2NkaXI9ZC5nZXRWYXIoImRvY2RpciIpCi0KLSAgICBpZiBub3QgZG9jZGlyLnN0YXJ0c3dpdGgocHJlZml4KToKLSAgICAgICAgYmIuZmF0YWwoJ2RvY2RpciBtdXN0IGNvbnRhaW4gcHJlZml4IGFzIGl0cyBwcmVmaXgnKQotCi0gICAgZG9jZGlyX3N0cmlwcGVkID0gZG9jZGlyW2xlbihwcmVmaXgpOl0KLSAgICBpZiBsZW4oZG9jZGlyX3N0cmlwcGVkKSA+IDAgYW5kIGRvY2Rpcl9zdHJpcHBlZFswXSA9PSAnLyc6Ci0gICAgICAgIGRvY2Rpcl9zdHJpcHBlZCA9IGRvY2Rpcl9zdHJpcHBlZFsxOl0KLQotICAgIGQuc2V0VmFyKCJkb2NkaXJfc3RyaXBwZWQiLCBkb2NkaXJfc3RyaXBwZWQpCi19Ci0KLUVYVFJBX09FQ01BS0U9IiBcCi0gICAgLURDTUFLRV9ET0NfRElSPSR7ZG9jZGlyX3N0cmlwcGVkfS9jbWFrZS0ke0NNQUtFX01BSk9SX1ZFUlNJT059IFwKLSAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSSUVTPTEgXAotICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX0pTT05DUFA9MCBcCi0gICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfTElCVVY9MCBcCi0gICAgLURLV1NZU19DSEFSX0lTX1NJR05FRD0xIFwKLSAgICAtREJVSUxEX0N1cnNlc0RpYWxvZz0wIFwKLSAgICAtREtXU1lTX0xGU19XT1JLUz0xIFwKLSIKLQotZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgewotICAgIG1rZGlyIC1wICR7RH0ke2RhdGFkaXJ9L2NtYWtlCi0gICAgaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9PRVRvb2xjaGFpbkNvbmZpZy5jbWFrZSAke0R9JHtkYXRhZGlyfS9jbWFrZS8KLQotICAgIG1rZGlyIC1wICR7RH0ke1NES1BBVEhOQVRJVkV9L2Vudmlyb25tZW50LXNldHVwLmQKLSAgICBpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L2Vudmlyb25tZW50LmQtY21ha2Uuc2ggJHtEfSR7U0RLUEFUSE5BVElWRX0vZW52aXJvbm1lbnQtc2V0dXAuZC9jbWFrZS5zaAotfQotCi1GSUxFU18ke1BOfV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiAke1NES1BBVEhOQVRJVkV9IgotCi1GSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9jbWFrZS0ke0NNQUtFX01BSk9SX1ZFUlNJT059IgotRklMRVNfJHtQTn0tZG9jICs9ICIke2RvY2Rpcn0vY21ha2UtJHtDTUFLRV9NQUpPUl9WRVJTSU9OfSIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlXzMuOC4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZV8zLjguMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjhmZDdhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZV8zLjguMi5iYgpAQCAtMCwwICsxLDUwIEBACityZXF1aXJlIGNtYWtlLmluYworCitpbmhlcml0IGNtYWtlCisKK0RFUEVORFMgKz0gImN1cmwgZXhwYXQgemxpYiBsaWJhcmNoaXZlIHh6IG5jdXJzZXMgYnppcDIiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgXAorICAgIGZpbGU6Ly9PRVRvb2xjaGFpbkNvbmZpZy5jbWFrZSBcCisgICAgZmlsZTovL2Vudmlyb25tZW50LmQtY21ha2Uuc2giCisKKyMgU3RyaXAgJHtwcmVmaXh9IGZyb20gJHtkb2NkaXJ9LCBzZXQgcmVzdWx0IGludG8gZG9jZGlyX3N0cmlwcGVkCitweXRob24gKCkgeworICAgIHByZWZpeD1kLmdldFZhcigicHJlZml4IikKKyAgICBkb2NkaXI9ZC5nZXRWYXIoImRvY2RpciIpCisKKyAgICBpZiBub3QgZG9jZGlyLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgYmIuZmF0YWwoJ2RvY2RpciBtdXN0IGNvbnRhaW4gcHJlZml4IGFzIGl0cyBwcmVmaXgnKQorCisgICAgZG9jZGlyX3N0cmlwcGVkID0gZG9jZGlyW2xlbihwcmVmaXgpOl0KKyAgICBpZiBsZW4oZG9jZGlyX3N0cmlwcGVkKSA+IDAgYW5kIGRvY2Rpcl9zdHJpcHBlZFswXSA9PSAnLyc6CisgICAgICAgIGRvY2Rpcl9zdHJpcHBlZCA9IGRvY2Rpcl9zdHJpcHBlZFsxOl0KKworICAgIGQuc2V0VmFyKCJkb2NkaXJfc3RyaXBwZWQiLCBkb2NkaXJfc3RyaXBwZWQpCit9CisKK0VYVFJBX09FQ01BS0U9IiBcCisgICAgLURDTUFLRV9ET0NfRElSPSR7ZG9jZGlyX3N0cmlwcGVkfS9jbWFrZS0ke0NNQUtFX01BSk9SX1ZFUlNJT059IFwKKyAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSSUVTPTEgXAorICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX0pTT05DUFA9MCBcCisgICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfTElCVVY9MCBcCisgICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfTElCUkhBU0g9MCBcCisgICAgLURLV1NZU19DSEFSX0lTX1NJR05FRD0xIFwKKyAgICAtREJVSUxEX0N1cnNlc0RpYWxvZz0wIFwKKyAgICAtREtXU1lTX0xGU19XT1JLUz0xIFwKKyIKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworICAgIG1rZGlyIC1wICR7RH0ke2RhdGFkaXJ9L2NtYWtlCisgICAgaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9PRVRvb2xjaGFpbkNvbmZpZy5jbWFrZSAke0R9JHtkYXRhZGlyfS9jbWFrZS8KKworICAgIG1rZGlyIC1wICR7RH0ke1NES1BBVEhOQVRJVkV9L2Vudmlyb25tZW50LXNldHVwLmQKKyAgICBpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L2Vudmlyb25tZW50LmQtY21ha2Uuc2ggJHtEfSR7U0RLUEFUSE5BVElWRX0vZW52aXJvbm1lbnQtc2V0dXAuZC9jbWFrZS5zaAorfQorCitGSUxFU18ke1BOfV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiAke1NES1BBVEhOQVRJVkV9IgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9jbWFrZS0ke0NNQUtFX01BSk9SX1ZFUlNJT059IgorRklMRVNfJHtQTn0tZG9jICs9ICIke2RvY2Rpcn0vY21ha2UtJHtDTUFLRV9NQUpPUl9WRVJTSU9OfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NyZWF0ZXJlcG8tYy9jcmVhdGVyZXBvLWMvMDAwMS1Db3JyZWN0bHktaW5zdGFsbC10aGUtc2hhcmVkLWxpYnJhcnkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NyZWF0ZXJlcG8tYy9jcmVhdGVyZXBvLWMvMDAwMS1Db3JyZWN0bHktaW5zdGFsbC10aGUtc2hhcmVkLWxpYnJhcnkucGF0Y2gKaW5kZXggMDEyNzEyNC4uY2Q3MjA4NCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jcmVhdGVyZXBvLWMvY3JlYXRlcmVwby1jLzAwMDEtQ29ycmVjdGx5LWluc3RhbGwtdGhlLXNoYXJlZC1saWJyYXJ5LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY3JlYXRlcmVwby1jL2NyZWF0ZXJlcG8tYy8wMDAxLUNvcnJlY3RseS1pbnN0YWxsLXRoZS1zaGFyZWQtbGlicmFyeS5wYXRjaApAQCAtMyw3ICszLDcgQEAKIERhdGU6IE1vbiwgMiBKYW4gMjAxNyAxNzoyMzo1OSArMDIwMAogU3ViamVjdDogW1BBVENIXSBDb3JyZWN0bHkgaW5zdGFsbCB0aGUgc2hhcmVkIGxpYnJhcnkKIAotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL3JwbS1zb2Z0d2FyZS1tYW5hZ2VtZW50L2NyZWF0ZXJlcG9fYy9wdWxsLzc4XQogU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CiAtLS0KICBzcmMvQ01ha2VMaXN0cy50eHQgfCAzICsrLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jdmUtY2hlY2stdG9vbC9jdmUtY2hlY2stdG9vbF81LjYuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY3ZlLWNoZWNrLXRvb2wvY3ZlLWNoZWNrLXRvb2xfNS42LjQuYmIKaW5kZXggMWY5MDZlZS4uN2I3MGRhYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jdmUtY2hlY2stdG9vbC9jdmUtY2hlY2stdG9vbF81LjYuNC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2N2ZS1jaGVjay10b29sL2N2ZS1jaGVjay10b29sXzUuNi40LmJiCkBAIC0xMSw2ICsxMSw3IEBACiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXByaW50LXByb2dyZXNzLWluLXBlcmNlbnQtd2hlbi1kb3dubG9hZGluZy1DVkUtZGIucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1jdXJsLWFsbG93LW92ZXJyaWRpbmctZGVmYXVsdC1DQS1jZXJ0aWZpY2F0ZS1maWxlLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtdXBkYXRlLUNvbXBhcmUtY29tcHV0ZWQtdnMtZXhwZWN0ZWQtc2hhMjU2LWRpZ2l0LXN0ci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1mcmVlaW5nLW1lbW9yeS1hbGxvY2F0ZWQtYnktc3FsaXRlLnBhdGNoIFwKICAgICAgICAgICAiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICJjNWY0MjQ3MTQwZmM5YmUzYmY0MTQ5MWQzMWEzNDE1NSIKQEAgLTI5LDcgKzMwLDcgQEAKIAogZG9fcG9wdWxhdGVfY3ZlX2RiKCkgewogICAgIGlmIFsgIiR7QkJfTk9fTkVUV09SS30iID0gIjEiIF0gOyB0aGVuCi0gICAgICAgIGJiZXJyb3IgIkJCX05PX05FVFdPUksgaXMgc2V0OyBDYW4ndCB1cGRhdGUgY3ZlLWNoZWNrLXRvb2wgZGF0YWJhc2UsIENWRXMgd29uJ3QgYmUgY2hlY2tlZCIKKyAgICAgICAgYmJ3YXJuICJCQl9OT19ORVRXT1JLIGlzIHNldDsgQ2FuJ3QgdXBkYXRlIGN2ZS1jaGVjay10b29sIGRhdGFiYXNlLCBuZXcgQ1ZFcyB3b24ndCBiZSBkZXRlY3RlZCIKICAgICAgICAgcmV0dXJuCiAgICAgZmkKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jdmUtY2hlY2stdG9vbC9maWxlcy8wMDAxLUZpeC1mcmVlaW5nLW1lbW9yeS1hbGxvY2F0ZWQtYnktc3FsaXRlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jdmUtY2hlY2stdG9vbC9maWxlcy8wMDAxLUZpeC1mcmVlaW5nLW1lbW9yeS1hbGxvY2F0ZWQtYnktc3FsaXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhODJjZjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2N2ZS1jaGVjay10b29sL2ZpbGVzLzAwMDEtRml4LWZyZWVpbmctbWVtb3J5LWFsbG9jYXRlZC1ieS1zcWxpdGUucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorRnJvbSBhMzM1MzQyOTY1MmY4M2JiOGIwMzE2NTAwZmFhODhmYTI1NTU1NDJkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGV0ZXIgTWFya28gPHBldGVyLm1hcmtvQHNpZW1lbnMuY29tPgorRGF0ZTogVGh1LCAxMyBBcHIgMjAxNyAyMzowOTo1MiArMDIwMAorU3ViamVjdDogW1BBVENIXSBGaXggZnJlZWluZyBtZW1vcnkgYWxsb2NhdGVkIGJ5IHNxbGl0ZQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBQZXRlciBNYXJrbyA8cGV0ZXIubWFya29Ac2llbWVucy5jb20+CistLS0KKyBzcmMvY29yZS5jIHwgOCArKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvY29yZS5jIGIvc3JjL2NvcmUuYworaW5kZXggNjI2MzAzMS4uNjc4OGYxNiAxMDA2NDQKKy0tLSBhL3NyYy9jb3JlLmMKKysrKyBiL3NyYy9jb3JlLmMKK0BAIC04Miw3ICs4Miw3IEBAIHN0YXRpYyBib29sIGVuc3VyZV90YWJsZShDdmVEQiAqc2VsZikKKyAgICAgICAgIHJjID0gc3FsaXRlM19leGVjKHNlbGYtPmRiLCBxdWVyeSwgTlVMTCwgTlVMTCwgJmVycik7CisgICAgICAgICBpZiAocmMgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZW5zdXJlX3RhYmxlKCk6ICVzXG4iLCBlcnIpOworLSAgICAgICAgICAgICAgICBmcmVlKGVycik7CisrICAgICAgICAgICAgICAgIHNxbGl0ZTNfZnJlZShlcnIpOworICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICB9CisgICAgICAgICAKK0BAIC05MSw3ICs5MSw3IEBAIHN0YXRpYyBib29sIGVuc3VyZV90YWJsZShDdmVEQiAqc2VsZikKKyAgICAgICAgIHJjID0gc3FsaXRlM19leGVjKHNlbGYtPmRiLCBxdWVyeSwgTlVMTCwgTlVMTCwgJmVycik7CisgICAgICAgICBpZiAocmMgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZW5zdXJlX3RhYmxlKCk6ICVzXG4iLCBlcnIpOworLSAgICAgICAgICAgICAgICBmcmVlKGVycik7CisrICAgICAgICAgICAgICAgIHNxbGl0ZTNfZnJlZShlcnIpOworICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICB9CisgCitAQCAtOTksMTEgKzk5LDExIEBAIHN0YXRpYyBib29sIGVuc3VyZV90YWJsZShDdmVEQiAqc2VsZikKKyAgICAgICAgIHJjID0gc3FsaXRlM19leGVjKHNlbGYtPmRiLCBxdWVyeSwgTlVMTCwgTlVMTCwgJmVycik7CisgICAgICAgICBpZiAocmMgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZW5zdXJlX3RhYmxlKCk6ICVzXG4iLCBlcnIpOworLSAgICAgICAgICAgICAgICBmcmVlKGVycik7CisrICAgICAgICAgICAgICAgIHNxbGl0ZTNfZnJlZShlcnIpOworICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICB9CisgICAgICAgICBpZiAoZXJyKSB7CistICAgICAgICAgICAgICAgIGZyZWUoZXJyKTsKKysgICAgICAgICAgICAgICAgc3FsaXRlM19mcmVlKGVycik7CisgICAgICAgICB9CisgCisgICAgICAgICByZXR1cm4gdHJ1ZTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jdmUtY2hlY2stdG9vbC9maWxlcy8wMDAxLXByaW50LXByb2dyZXNzLWluLXBlcmNlbnQtd2hlbi1kb3dubG9hZGluZy1DVkUtZGIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2N2ZS1jaGVjay10b29sL2ZpbGVzLzAwMDEtcHJpbnQtcHJvZ3Jlc3MtaW4tcGVyY2VudC13aGVuLWRvd25sb2FkaW5nLUNWRS1kYi5wYXRjaAppbmRleCAwNTEwZTNhLi44ZWE2ZjY4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2N2ZS1jaGVjay10b29sL2ZpbGVzLzAwMDEtcHJpbnQtcHJvZ3Jlc3MtaW4tcGVyY2VudC13aGVuLWRvd25sb2FkaW5nLUNWRS1kYi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2N2ZS1jaGVjay10b29sL2ZpbGVzLzAwMDEtcHJpbnQtcHJvZ3Jlc3MtaW4tcGVyY2VudC13aGVuLWRvd25sb2FkaW5nLUNWRS1kYi5wYXRjaApAQCAtMzgsNyArMzgsNyBAQAogKyAgICAgICAgaWYgKGRsdG90YWwgJiYgcGVyY2VudCAmJiBwZXJjZW50LT5lbmQgPj0gcGVyY2VudC0+c3RhcnQpIHsKICsgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRpZmYgPSBwZXJjZW50LT5lbmQgLSBwZXJjZW50LT5zdGFydDsKICsgICAgICAgICAgICAgICAgaWYgKGRpZmYpIHsKLSsgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiY29tcGxldGVkOiAiQ1VSTF9GT1JNQVRfT0ZGX1QiJSVcciIsIHBlcmNlbnQtPnN0YXJ0ICsgKGRpZmYgKiBkbG5vdyAvIGRsdG90YWwpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiY29tcGxldGVkOiAlIkNVUkxfRk9STUFUX0NVUkxfT0ZGX1QiJSVcciIsIHBlcmNlbnQtPnN0YXJ0ICsgKGRpZmYgKiBkbG5vdyAvIGRsdG90YWwpKTsKICsgICAgICAgICAgICAgICAgfQogKyAgICAgICAgfQogKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaWZmc3RhdC9kaWZmc3RhdF8xLjYxLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaWZmc3RhdC9kaWZmc3RhdF8xLjYxLmJiCmluZGV4IDU4M2IzODcuLmY4YjdiMDYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlmZnN0YXQvZGlmZnN0YXRfMS42MS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RpZmZzdGF0L2RpZmZzdGF0XzEuNjEuYmIKQEAgLTE4LDE0ICsxOCw5IEBACiAKIGluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcHRlc3QKIAotTERGTEFHUyArPSAiJHtUT09MQ0hBSU5fT1BUSU9OU30iCitFWFRSQV9BVVRPUkVDT05GICs9ICItLWV4Y2x1ZGU9YWNsb2NhbCIKIAotZG9fY29uZmlndXJlICgpIHsKLQlpZiBbICEgLWUgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgotCQltdiAke1N9L2FjbG9jYWwubTQgJHtTfS9hY2luY2x1ZGUubTQKLQlmaQotCWF1dG90b29sc19kb19jb25maWd1cmUKLX0KK0xERkxBR1MgKz0gIiR7VE9PTENIQUlOX09QVElPTlN9IgogCiBkb19pbnN0YWxsX3B0ZXN0KCkgewogCWNwIC1yICR7U30vdGVzdGluZyAke0R9JHtQVEVTVF9QQVRIfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZGlzdGNjXzMuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2Rpc3RjY18zLjIuYmIKaW5kZXggZWEzZDdjMS4uYjZkYTY1YSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZGlzdGNjXzMuMi5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9kaXN0Y2NfMy4yLmJiCkBAIC0yMyw2ICsyMyw3IEBACiAgICAgICAgICAgIGZpbGU6Ly9kaXN0Y2Muc2VydmljZSIKIFNSQ1JFViA9ICJkOGIxOGRmM2U5ZGNiZTRmMDkyYmVkNTY1ODM1ZDM5NzVlOTk0MzJjIgogUyA9ICIke1dPUktESVJ9L2dpdCIKK1VQU1RSRUFNX1ZFUlNJT05fVU5LTk9XTiA9ICIxIgogCiBpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXBkYXRlLXJjLmQgdXNlcmFkZCBzeXN0ZW1kCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG1pZGVjb2RlL2RtaWRlY29kZV8zLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RtaWRlY29kZS9kbWlkZWNvZGVfMy4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDlhOWQyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG1pZGVjb2RlL2RtaWRlY29kZV8zLjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1TVU1NQVJZID0gIkRNSSAoRGVza3RvcCBNYW5hZ2VtZW50IEludGVyZmFjZSkgdGFibGUgcmVsYXRlZCB1dGlsaXRpZXMiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3Lm5vbmdudS5vcmcvZG1pZGVjb2RlLyIKLUxJQ0VOU0UgPSAiR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKLQotU1JDX1VSSSA9ICIke1NBVkFOTkFIX05PTkdOVV9NSVJST1J9L2RtaWRlY29kZS8ke0JQfS50YXIueHoiCi0KLUNPTVBBVElCTEVfSE9TVCA9ICIoaS44Nnx4ODZfNjR8YWFyY2g2NHxhcm18cG93ZXJwY3xwb3dlcnBjNjQpLiotbGludXgiCi0KLUVYVFJBX09FTUFLRSA9ICItZSBNQUtFRkxBR1M9IgotCi1kb19pbnN0YWxsKCkgewotCW9lX3J1bm1ha2UgREVTVERJUj0iJHtEfSIgaW5zdGFsbAotfQotCi1kb191bnBhY2tfZXh0cmEoKSB7Ci0Jc2VkIC1pIC1lICcvXnByZWZpeC9zOi91c3IvbG9jYWw6JHtleGVjX3ByZWZpeH06JyAke1N9L01ha2VmaWxlCi19Ci1hZGR0YXNrIHVucGFja19leHRyYSBhZnRlciBkb191bnBhY2sgYmVmb3JlIGRvX3BhdGNoCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIyODFlZTU3MmQ0NWM3OGVjYTczYTE0ODM0YzQ5NWZmZCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI3ZWMzNWJiMTkzNzI5YzFkNTkzYTE0NjBiNTlkODJkMjRiODkxMDJhYjIzZmQwNDE2ZTZjZjQzMjVkMDc3ZTQ1IgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RtaWRlY29kZS9kbWlkZWNvZGVfMy4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kbWlkZWNvZGUvZG1pZGVjb2RlXzMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODMyODFlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kbWlkZWNvZGUvZG1pZGVjb2RlXzMuMS5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIkRNSSAoRGVza3RvcCBNYW5hZ2VtZW50IEludGVyZmFjZSkgdGFibGUgcmVsYXRlZCB1dGlsaXRpZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm5vbmdudS5vcmcvZG1pZGVjb2RlLyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworU1JDX1VSSSA9ICIke1NBVkFOTkFIX05PTkdOVV9NSVJST1J9L2RtaWRlY29kZS8ke0JQfS50YXIueHoiCisKK0NPTVBBVElCTEVfSE9TVCA9ICIoaS44Nnx4ODZfNjR8YWFyY2g2NHxhcm18cG93ZXJwY3xwb3dlcnBjNjQpLiotbGludXgiCisKK0VYVFJBX09FTUFLRSA9ICItZSBNQUtFRkxBR1M9IgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgREVTVERJUj0iJHtEfSIgaW5zdGFsbAorfQorCitkb191bnBhY2tfZXh0cmEoKSB7CisJc2VkIC1pIC1lICcvXnByZWZpeC9zOi91c3IvbG9jYWw6JHtleGVjX3ByZWZpeH06JyAke1N9L01ha2VmaWxlCit9CithZGR0YXNrIHVucGFja19leHRyYSBhZnRlciBkb191bnBhY2sgYmVmb3JlIGRvX3BhdGNoCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2NzljMmMwMTVjNTE1YWE2Y2E1ZjIyOWFlZTQ5YzEwMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkNzY2Y2U5YjI1NTQ4YzU5YjFlN2U5MzA1MDViNGNhZDlhN2JiMGI5MDRhMWEzOTFmYmI2MDRkNTI5NzgxYWMwIgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RuZi9kbmYvMDAwMS1DaGVjay1jb25mLnJlbGVhc2V2ZXItaW5zdGVhZC1vZi1yZWxlYXNldmVyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kbmYvZG5mLzAwMDEtQ2hlY2stY29uZi5yZWxlYXNldmVyLWluc3RlYWQtb2YtcmVsZWFzZXZlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWYzMTQxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kbmYvZG5mLzAwMDEtQ2hlY2stY29uZi5yZWxlYXNldmVyLWluc3RlYWQtb2YtcmVsZWFzZXZlci5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDE2NjgzM2E4OGE5MjhhNTc0YmY5MTQzYjliNjVmNTQ0YmU0ODJjNzcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMTggQXVnIDIwMTcgMTU6NTU6MTUgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gQ2hlY2sgY29uZi5yZWxlYXNldmVyIGluc3RlYWQgb2YgcmVsZWFzZXZlcgorCitUaGUgc3Vic3RpdHV0aW9ucyBtYXkgYWN0dWFsbHkgc2V0IHRoZSBjb25mLnJlbGVhc2V2ZXIgY29ycmVjdGx5LAorYW5kIHNvIHRoZSBjaGVjayBzaG91bGQgdXNlIHRoYXQgaW5zdGVhZCBvZiB0aGUgcGFzc2VkLWluIGZ1bmN0aW9uCitwYXJhbWV0ZXIuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vcnBtLXNvZnR3YXJlLW1hbmFnZW1lbnQvZG5mL3B1bGwvOTAxXQorU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CistLS0KKyBkbmYvY2xpL2NsaS5weSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2RuZi9jbGkvY2xpLnB5IGIvZG5mL2NsaS9jbGkucHkKK2luZGV4IDJkNjM0MjBjLi4xNjc5NDNiOCAxMDA2NDQKKy0tLSBhL2RuZi9jbGkvY2xpLnB5CisrKysgYi9kbmYvY2xpL2NsaS5weQorQEAgLTkxNCw3ICs5MTQsNyBAQCBjbGFzcyBDbGkob2JqZWN0KToKKyAgICAgICAgIGNvbmYucmVsZWFzZXZlciA9IHJlbGVhc2V2ZXIKKyAgICAgICAgIHN1YnN0ID0gY29uZi5zdWJzdGl0dXRpb25zCisgICAgICAgICBzdWJzdC51cGRhdGVfZnJvbV9ldGMoY29uZi5pbnN0YWxscm9vdCkKKy0gICAgICAgIGlmIHJlbGVhc2V2ZXIgaXMgTm9uZToKKysgICAgICAgIGlmIGNvbmYucmVsZWFzZXZlciBpcyBOb25lOgorICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKF8oIlVuYWJsZSB0byBkZXRlY3QgcmVsZWFzZSB2ZXJzaW9uICh1c2UgJy0tcmVsZWFzZXZlcicgdG8gc3BlY2lmeSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVsZWFzZSB2ZXJzaW9uKSIpKQorIAorLS0gCisyLjE0LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kbmYvZG5mLzAwMzAtUnVuLXB5dGhvbi1zY3JpcHRzLXVzaW5nLWVudi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG5mL2RuZi8wMDMwLVJ1bi1weXRob24tc2NyaXB0cy11c2luZy1lbnYucGF0Y2gKaW5kZXggNjEzMjhlNi4uMWFiZDg4MCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kbmYvZG5mLzAwMzAtUnVuLXB5dGhvbi1zY3JpcHRzLXVzaW5nLWVudi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RuZi9kbmYvMDAzMC1SdW4tcHl0aG9uLXNjcmlwdHMtdXNpbmctZW52LnBhdGNoCkBAIC0xMCw4ICsxMCw3IEBACiAtLS0KICBiaW4vZG5mLWF1dG9tYXRpYy5pbiB8IDIgKy0KICBiaW4vZG5mLmluICAgICAgICAgICB8IDIgKy0KLSBiaW4veXVtLmluICAgICAgICAgICB8IDIgKy0KLSAzIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL2Jpbi9kbmYtYXV0b21hdGljLmluIGIvYmluL2RuZi1hdXRvbWF0aWMuaW4KIGluZGV4IDViMDZhYTI2Li45ZjZmNzAzZSAxMDA3NTUKQEAgLTMzLDE2ICszMiw2IEBACiAgIyBUaGUgZG5mIGV4ZWN1dGFibGUgc2NyaXB0LgogICMKICAjIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IFJlZCBIYXQsIEluYy4KLWRpZmYgLS1naXQgYS9iaW4veXVtLmluIGIvYmluL3l1bS5pbgotaW5kZXggZjFmZWUwNzEuLjAxM2RjOGM1IDEwMDc1NQotLS0tIGEvYmluL3l1bS5pbgotKysrIGIvYmluL3l1bS5pbgotQEAgLTEsNCArMSw0IEBACi0tIyFAUFlUSE9OX0VYRUNVVEFCTEVACi0rIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwotICMgVGhlIGRuZiBleGVjdXRhYmxlIHNjcmlwdC4KLSAjCi0gIyBDb3B5cmlnaHQgKEMpIDIwMTYgUmVkIEhhdCwgSW5jLgogLS0gCiAyLjExLjAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kbmYvZG5mXzIuNi4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kbmYvZG5mXzIuNi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZDZhNzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RuZi9kbmZfMi42LjMuYmIKQEAgLTAsMCArMSw1MiBAQAorU1VNTUFSWSA9ICJQYWNrYWdlIG1hbmFnZXIgZm9ya2VkIGZyb20gWXVtLCB1c2luZyBsaWJzb2x2IGFzIGEgZGVwZW5kZW5jeSByZXNvbHZlciIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9QQUNLQUdFLUxJQ0VOU0lORzttZDU9YmZjMjk5MTZlMTEzMjFiZTA2OTI0YzRmYjA5NmZkY2MgXAorICAgICAgICAgICAgICAgICAgICIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3JwbS1zb2Z0d2FyZS1tYW5hZ2VtZW50L2RuZi5naXQgXAorICAgICAgICAgICBmaWxlOi8vMDAyOS1Eby1ub3Qtc2V0LVBZVEhPTl9JTlNUQUxMX0RJUi1ieS1ydW5uaW5nLXB5dGhvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDMwLVJ1bi1weXRob24tc2NyaXB0cy11c2luZy1lbnYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1Eby1ub3QtcHJlcGVuZC1pbnN0YWxscm9vdC10by1sb2dkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1Eby1ub3QtaGFyZGNvZGUtZXRjLWFuZC1zeXN0ZW1kLXVuaXQtZGlyZWN0b3JpZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1Db3JyZXRseS1pbnN0YWxsLXRtcGZpbGVzLmQtY29uZmlndXJhdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUNoZWNrLWNvbmYucmVsZWFzZXZlci1pbnN0ZWFkLW9mLXJlbGVhc2V2ZXIucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ1JFViA9ICJiZTI1ODUxODNlYzQ0ODVlZTRkNWUxMjFmMjQyZDg2NjkyOTZmMDY1IgorVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAiKD9QPHB2ZXI+XGQrKFwuXGQrKSspIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGNtYWtlIGdldHRleHQgYmFzaC1jb21wbGV0aW9uIGRpc3R1dGlsczMtYmFzZSBzeXN0ZW1kCisKK0RFUEVORFMgKz0gImxpYmRuZiBsaWJyZXBvIGxpYmNvbXBzIHB5dGhvbjMtaW5pcGFyc2UiCisKKyMgbWFucGFnZXMgZ2VuZXJhdGlvbiByZXF1aXJlcyBodHRwOi8vd3d3LnNwaGlueC1kb2Mub3JnLworRVhUUkFfT0VDTUFLRSA9ICIgLURXSVRIX01BTj0wIC1EUFlUSE9OX0lOU1RBTExfRElSPSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IC1EUFlUSE9OX0RFU0lSRUQ9MyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtdGFyZ2V0ICs9ICJweXRob24zLWNvcmUgcHl0aG9uMy1jb2RlY3MgcHl0aG9uMy1uZXRjbGllbnQgcHl0aG9uMy1lbWFpbCBweXRob24zLXRocmVhZGluZyBweXRob24zLWRpc3R1dGlscyBsaWJyZXBvIHB5dGhvbjMtc2hlbGwgcHl0aG9uMy1zdWJwcm9jZXNzIGxpYmNvbXBzIGxpYmRuZiBweXRob24zLXNxbGl0ZTMgcHl0aG9uMy1jb21wcmVzc2lvbiBweXRob24zLXJwbSBweXRob24zLWluaXBhcnNlIHB5dGhvbjMtanNvbiBweXRob24zLWltcG9ydGxpYiBweXRob24zLWN1cnNlcyBweXRob24zLWFyZ3BhcnNlIHB5dGhvbjMtbWlzYyBweXRob24zLWdwZyIKKyMgUmVjb21tZW5kIGdudXBnIHNvIHRoYXQgR1BHIHNpZ25hdHVyZSBjaGVjayBvbiByZXBvc2l0b3J5IG1ldGFkYXRhIGlzIHBvc3NpYmxlCitSUkVDT01NRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgKz0gImdudXBnIgorCisjIENyZWF0ZSBhIHN5bWxpbmsgY2FsbGVkICdkbmYnIGFzICdtYWtlIGluc3RhbGwnIGRvZXMgbm90IGRvIGl0LCBidXQKKyMgLnNwZWMgZmlsZSBpbiBkbmYgc291cmNlIHRyZWUgZG9lcyAoYW5kIHRoZW4gRmVkb3JhIGFuZCBkbmYgZG9jdW1lbnRhdGlvbgorIyBzYXlzIHRoYXQgZG5mIGJpbmFyeSBpcyBwbGFpbiAnZG5mJykuCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICAgICAgbG5yICR7RH0vJHtiaW5kaXJ9L2RuZi0zICR7RH0vJHtiaW5kaXJ9L2RuZgorICAgICAgICBsbnIgJHtEfS8ke2JpbmRpcn0vZG5mLWF1dG9tYXRpYy0zICR7RH0vJHtiaW5kaXJ9L2RuZi1hdXRvbWF0aWMKK30KKworIyBEaXJlY3QgZG5mLW5hdGl2ZSB0byByZWFkIHJwbSBjb25maWd1cmF0aW9uIGZyb20gb3VyIHN5c3Jvb3QsIG5vdCB0aGUgb25lIGl0IHdhcyBjb21waWxlZCBpbgorZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9kbmYgXAorICAgICAgICAgICAgICAgIFJQTV9DT05GSUdESVI9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3JwbSBcCisgICAgICAgICAgICAgICAgUlBNX05PX0NIUk9PVF9GT1JfU0NSSVBUUz0xCit9CisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJkbmYtbWFrZWNhY2hlLnNlcnZpY2UgZG5mLW1ha2VjYWNoZS50aW1lciBcCisgICAgICAgICAgICAgICAgICAgICAgICAgZG5mLWF1dG9tYXRpYy1kb3dubG9hZC5zZXJ2aWNlIGRuZi1hdXRvbWF0aWMtZG93bmxvYWQudGltZXIgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGRuZi1hdXRvbWF0aWMtaW5zdGFsbC5zZXJ2aWNlIGRuZi1hdXRvbWF0aWMtaW5zdGFsbC50aW1lciBcCisgICAgICAgICAgICAgICAgICAgICAgICAgZG5mLWF1dG9tYXRpYy1ub3RpZnlvbmx5LnNlcnZpY2UgZG5mLWF1dG9tYXRpYy1ub3RpZnlvbmx5LnRpbWVyIFwKKyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG5mL2RuZl9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RuZi9kbmZfZ2l0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjgxNGZiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG5mL2RuZl9naXQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi1TVU1NQVJZID0gIlBhY2thZ2UgbWFuYWdlciBmb3JrZWQgZnJvbSBZdW0sIHVzaW5nIGxpYnNvbHYgYXMgYSBkZXBlbmRlbmN5IHJlc29sdmVyIgotTElDRU5TRSA9ICJHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL1BBQ0tBR0UtTElDRU5TSU5HO21kNT1iZmMyOTkxNmUxMTMyMWJlMDY5MjRjNGZiMDk2ZmRjYyBcCi0gICAgICAgICAgICAgICAgICAgIgotCi1TUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vcnBtLXNvZnR3YXJlLW1hbmFnZW1lbnQvZG5mLmdpdCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDI5LURvLW5vdC1zZXQtUFlUSE9OX0lOU1RBTExfRElSLWJ5LXJ1bm5pbmctcHl0aG9uLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMzAtUnVuLXB5dGhvbi1zY3JpcHRzLXVzaW5nLWVudi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLURvLW5vdC1wcmVwZW5kLWluc3RhbGxyb290LXRvLWxvZ2Rpci5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLURvLW5vdC1oYXJkY29kZS1ldGMtYW5kLXN5c3RlbWQtdW5pdC1kaXJlY3Rvcmllcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLUNvcnJldGx5LWluc3RhbGwtdG1wZmlsZXMuZC1jb25maWd1cmF0aW9uLnBhdGNoIFwKLSAgICAgICAgICAgIgotCi1QViA9ICIyLjAuMCtnaXQke1NSQ1BWfSIKLVNSQ1JFViA9ICJmMDA5M2Q2NzJkMzA2OWNmZWU4NDQ3OTczYWU3MGVmNjE1ZmQ4ODg2IgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1pbmhlcml0IGNtYWtlIGdldHRleHQgYmFzaC1jb21wbGV0aW9uIGRpc3R1dGlsczMtYmFzZSBzeXN0ZW1kCi0KLURFUEVORFMgKz0gImxpYmRuZiBsaWJyZXBvIGxpYmNvbXBzIHB5dGhvbjMtcHlncGdtZSBweXRob24zLWluaXBhcnNlIgotCi0jIG1hbnBhZ2VzIGdlbmVyYXRpb24gcmVxdWlyZXMgaHR0cDovL3d3dy5zcGhpbngtZG9jLm9yZy8KLUVYVFJBX09FQ01BS0UgPSAiIC1EV0lUSF9NQU49MCAtRFBZVEhPTl9JTlNUQUxMX0RJUj0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSAtRFBZVEhPTl9ERVNJUkVEPTMiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKLVJERVBFTkRTXyR7UE59X2NsYXNzLXRhcmdldCArPSAicHl0aG9uMy1jb3JlIHB5dGhvbjMtY29kZWNzIHB5dGhvbjMtbmV0Y2xpZW50IHB5dGhvbjMtZW1haWwgcHl0aG9uMy10aHJlYWRpbmcgcHl0aG9uMy1kaXN0dXRpbHMgbGlicmVwbyBweXRob24zLXNoZWxsIHB5dGhvbjMtc3VicHJvY2VzcyBsaWJjb21wcyBsaWJkbmYgcHl0aG9uMy1zcWxpdGUzIHB5dGhvbjMtY29tcHJlc3Npb24gcHl0aG9uMy1weWdwZ21lIHB5dGhvbjMtcnBtIHB5dGhvbjMtaW5pcGFyc2UgcHl0aG9uMy1qc29uIHB5dGhvbjMtaW1wb3J0bGliIHB5dGhvbjMtY3Vyc2VzIHB5dGhvbjMtYXJncGFyc2UgcHl0aG9uMy1taXNjIgotCi0jIENyZWF0ZSBhIHN5bWxpbmsgY2FsbGVkICdkbmYnIGFzICdtYWtlIGluc3RhbGwnIGRvZXMgbm90IGRvIGl0LCBidXQKLSMgLnNwZWMgZmlsZSBpbiBkbmYgc291cmNlIHRyZWUgZG9lcyAoYW5kIHRoZW4gRmVkb3JhIGFuZCBkbmYgZG9jdW1lbnRhdGlvbgotIyBzYXlzIHRoYXQgZG5mIGJpbmFyeSBpcyBwbGFpbiAnZG5mJykuCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLSAgICAgICAgbG5yICR7RH0vJHtiaW5kaXJ9L2RuZi0zICR7RH0vJHtiaW5kaXJ9L2RuZgotICAgICAgICBsbnIgJHtEfS8ke2JpbmRpcn0vZG5mLWF1dG9tYXRpYy0zICR7RH0vJHtiaW5kaXJ9L2RuZi1hdXRvbWF0aWMKLX0KLQotIyBEaXJlY3QgZG5mLW5hdGl2ZSB0byByZWFkIHJwbSBjb25maWd1cmF0aW9uIGZyb20gb3VyIHN5c3Jvb3QsIG5vdCB0aGUgb25lIGl0IHdhcyBjb21waWxlZCBpbgotZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgewotICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9kbmYgXAotICAgICAgICAgICAgICAgIFJQTV9DT05GSUdESVI9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3JwbSBcCi0gICAgICAgICAgICAgICAgUlBNX05PX0NIUk9PVF9GT1JfU0NSSVBUUz0xCi19Ci0KLVNZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJkbmYtbWFrZWNhY2hlLnNlcnZpY2UgZG5mLW1ha2VjYWNoZS50aW1lciBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgZG5mLWF1dG9tYXRpYy1kb3dubG9hZC5zZXJ2aWNlIGRuZi1hdXRvbWF0aWMtZG93bmxvYWQudGltZXIgXAotICAgICAgICAgICAgICAgICAgICAgICAgIGRuZi1hdXRvbWF0aWMtaW5zdGFsbC5zZXJ2aWNlIGRuZi1hdXRvbWF0aWMtaW5zdGFsbC50aW1lciBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgZG5mLWF1dG9tYXRpYy1ub3RpZnlvbmx5LnNlcnZpY2UgZG5mLWF1dG9tYXRpYy1ub3RpZnlvbmx5LnRpbWVyIFwKLSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDEtZHBrZy1TdXBwb3J0LW11c2x4MzItYnVpbGQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAxLWRwa2ctU3VwcG9ydC1tdXNseDMyLWJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZTY4OTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAxLWRwa2ctU3VwcG9ydC1tdXNseDMyLWJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb20gYTMyOGM4YmVjMGJmODA3MWFlOGYyMGZlZTRjNzQ3NTIwNTA2NGJhMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IHN3ZWVhdW4gPHN3ZWUuYXVuLmtob3JAaW50ZWwuY29tPgorRGF0ZTogU3VuLCAxMCBTZXAgMjAxNyAwMDoxNDoxNSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBkcGtnOiBTdXBwb3J0IG11c2x4MzIgYnVpbGQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nLgorQ2hhbmdlcyBtYWRlIG9uIG9zdGFibGUgYW5kIHR1cGxldGFibGUgdG8gZW5hYmxlIG11c2x4MzIgYnVpbGQuCisKK1NpZ25lZC1vZmYtYnk6IHN3ZWVhdW4gPHN3ZWUuYXVuLmtob3JAaW50ZWwuY29tPgorLS0tCisgZGF0YS9vc3RhYmxlICAgIHwgMSArCisgZGF0YS90dXBsZXRhYmxlIHwgMSArCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2RhdGEvb3N0YWJsZSBiL2RhdGEvb3N0YWJsZQoraW5kZXggYmU2NDM0Mi4uODdkYjI3MyAxMDA2NDQKKy0tLSBhL2RhdGEvb3N0YWJsZQorKysrIGIvZGF0YS9vc3RhYmxlCitAQCAtMTksNiArMTksNyBAQCBiYXNlLXVjbGliYy1saW51eAlsaW51eC11Y2xpYmMJCWxpbnV4W14tXSotdWNsaWJjCisgZWFiaWhmLW11c2wtbGludXgJbGludXgtbXVzbGVhYmloZglsaW51eFteLV0qLW11c2xlYWJpaGYKKyBlYWJpLW11c2wtbGludXgJCWxpbnV4LW11c2xlYWJpCQlsaW51eFteLV0qLW11c2xlYWJpCisgYmFzZS1tdXNsLWxpbnV4CQlsaW51eC1tdXNsCQlsaW51eFteLV0qLW11c2wKKyt4MzItbXVzbC1saW51eAkJbGludXgtbXVzbHgzMgkJbGludXhbXi1dKi1tdXNseDMyCisgZWFiaWhmLWdudS1saW51eAlsaW51eC1nbnVlYWJpaGYJCWxpbnV4W14tXSotZ251ZWFiaWhmCisgZWFiaS1nbnUtbGludXgJCWxpbnV4LWdudWVhYmkJCWxpbnV4W14tXSotZ251ZWFiaQorIGFiaW4zMi1nbnUtbGludXgJbGludXgtZ251YWJpbjMyCQlsaW51eFteLV0qLWdudWFiaW4zMgorZGlmZiAtLWdpdCBhL2RhdGEvdHVwbGV0YWJsZSBiL2RhdGEvdHVwbGV0YWJsZQoraW5kZXggMjhmMDBiZi4uNzQ4ZmZhYiAxMDA2NDQKKy0tLSBhL2RhdGEvdHVwbGV0YWJsZQorKysrIGIvZGF0YS90dXBsZXRhYmxlCitAQCAtMTAsNiArMTAsNyBAQCBiYXNlLXVjbGliYy1saW51eC08Y3B1PgkJdWNsaWJjLWxpbnV4LTxjcHU+CisgZWFiaWhmLW11c2wtbGludXgtYXJtCQltdXNsLWxpbnV4LWFybWhmCisgZWFiaS1tdXNsLWxpbnV4LWFybQkJbXVzbC1saW51eC1hcm1lbAorIGJhc2UtbXVzbC1saW51eC08Y3B1PgkJbXVzbC1saW51eC08Y3B1PgorK3gzMi1tdXNsLWxpbnV4LWFtZDY0CQl4MzIKKyBpbHAzMi1nbnUtbGludXgtYXJtNjQJCWFybTY0aWxwMzIKKyBlYWJpaGYtZ251LWxpbnV4LWFybQkJYXJtaGYKKyBlYWJpLWdudS1saW51eC1hcm0JCWFybWVsCistLSAKKzIuNy40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDItQWRhcHQtdG8tbGludXgtd3JzLWtlcm5lbC12ZXJzaW9uLXdoaWNoLWhhcy1jaGFyYWN0ZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDItQWRhcHQtdG8tbGludXgtd3JzLWtlcm5lbC12ZXJzaW9uLXdoaWNoLWhhcy1jaGFyYWN0ZS5wYXRjaAppbmRleCAyMzFhNmEyLi45ZmUwY2E3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAyLUFkYXB0LXRvLWxpbnV4LXdycy1rZXJuZWwtdmVyc2lvbi13aGljaC1oYXMtY2hhcmFjdGUucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwMi1BZGFwdC10by1saW51eC13cnMta2VybmVsLXZlcnNpb24td2hpY2gtaGFzLWNoYXJhY3RlLnBhdGNoCkBAIC0xMywxMyArMTMsMTMgQEAKICAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvbGliL2Rwa2cvcGFyc2VoZWxwLmMgYi9saWIvZHBrZy9wYXJzZWhlbHAuYwotaW5kZXggNzliMjkwOC4uNzc1OGFhNSAxMDA2NDQKK2luZGV4IDQ1MzA3N2ZkOS4uZjQyZWEyODgyIDEwMDY0NAogLS0tIGEvbGliL2Rwa2cvcGFyc2VoZWxwLmMKICsrKyBiL2xpYi9kcGtnL3BhcnNlaGVscC5jCi1AQCAtMjM1LDE0ICsyMzUsMTIgQEAgcGFyc2V2ZXJzaW9uKHN0cnVjdCBkcGtnX3ZlcnNpb24gKnJ2ZXJzaW9uLCBjb25zdCBjaGFyICpzdHJpbmcsCi0gCi0gICAvKiBYWFg6IFdvdWxkIGJlIGZhc3RlciB0byB1c2Ugc29tZXRoaW5nIGxpa2UgY2lzdmVyc2lvbiBhbmQgY2lzcmV2aXNpb24uICovCitAQCAtMjQzLDE0ICsyNDMsMTIgQEAgcGFyc2V2ZXJzaW9uKHN0cnVjdCBkcGtnX3ZlcnNpb24gKnJ2ZXJzaW9uLCBjb25zdCBjaGFyICpzdHJpbmcsCiAgICBwdHIgPSBydmVyc2lvbi0+dmVyc2lvbjsKKyAgIGlmICghKnB0cikKKyAgICAgcmV0dXJuIGRwa2dfcHV0X2Vycm9yKGVyciwgXygidmVyc2lvbiBudW1iZXIgaXMgZW1wdHkiKSk7CiAtICBpZiAoKnB0ciAmJiAhY19pc2RpZ2l0KCpwdHIrKykpCiAtICAgIHJldHVybiBkcGtnX3B1dF93YXJuKGVyciwgXygidmVyc2lvbiBudW1iZXIgZG9lcyBub3Qgc3RhcnQgd2l0aCBkaWdpdCIpKTsKICAgIGZvciAoOyAqcHRyOyBwdHIrKykgewpAQCAtMzMsNiArMzMsNiBAQAogICAgICAgIHJldHVybiBkcGtnX3B1dF93YXJuKGVyciwgXygiaW52YWxpZCBjaGFyYWN0ZXIgaW4gcmV2aXNpb24gbnVtYmVyIikpOwogICAgfQogIAotLS0gCi0yLjEuNAogCistLSAKKzIuMTEuMApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwNi1hZGQtbXVzbGVhYmktdG8ta25vd24tdGFyZ2V0LXRyaXBldHMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDA2LWFkZC1tdXNsZWFiaS10by1rbm93bi10YXJnZXQtdHJpcGV0cy5wYXRjaAppbmRleCBhNmIwMDg4Li5kOTI5NDY2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDA2LWFkZC1tdXNsZWFiaS10by1rbm93bi10YXJnZXQtdHJpcGV0cy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDA2LWFkZC1tdXNsZWFiaS10by1rbm93bi10YXJnZXQtdHJpcGV0cy5wYXRjaApAQCAtNiwzNyArNiwzNiBAQAogaGVscHMgY29tcGlsaW5nIGRwa2cgZm9yIG11c2wvYXJtLXNvZnRmbG9hdAogCiBTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CiAtLS0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi0gb3N0YWJsZSAgICAgIHwgMSArCi0gdHJpcGxldHRhYmxlIHwgMSArCisgZGF0YS9vc3RhYmxlICAgIHwgMSArCisgZGF0YS90dXBsZXRhYmxlIHwgMSArCiAgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKIAotZGlmZiAtLWdpdCBhL29zdGFibGUgYi9vc3RhYmxlCi1pbmRleCAzYmI2ODE5Li5kMGZmZGM3IDEwMDY0NAotLS0tIGEvb3N0YWJsZQotKysrIGIvb3N0YWJsZQotQEAgLTE1LDYgKzE1LDcgQEAKLSB1Y2xpYmNlYWJpLWxpbnV4CWxpbnV4LXVjbGliY2VhYmkJbGludXhbXi1dKi11Y2xpYmNlYWJpCi0gdWNsaWJjLWxpbnV4CQlsaW51eC11Y2xpYmMJCWxpbnV4W14tXSotdWNsaWJjCi0gbXVzbGVhYmloZi1saW51eAlsaW51eC1tdXNsZWFiaWhmCWxpbnV4W14tXSotbXVzbGVhYmloZgotK211c2xlYWJpLWxpbnV4CQlsaW51eC1tdXNsZWFiaQkJbGludXhbXi1dKi1tdXNsZWFiaQotIG11c2wtbGludXgJCWxpbnV4LW11c2wJCWxpbnV4W14tXSotbXVzbAotIGdudWVhYmloZi1saW51eAkJbGludXgtZ251ZWFiaWhmCQlsaW51eFteLV0qLWdudWVhYmloZgotIGdudWVhYmktbGludXgJCWxpbnV4LWdudWVhYmkJCWxpbnV4W14tXSotZ251ZWFiaQotZGlmZiAtLWdpdCBhL3RyaXBsZXR0YWJsZSBiL3RyaXBsZXR0YWJsZQotaW5kZXggMTIxMzU4NC4uNzBkMjRjMSAxMDA2NDQKLS0tLSBhL3RyaXBsZXR0YWJsZQotKysrIGIvdHJpcGxldHRhYmxlCi1AQCAtNiw2ICs2LDcgQEAKLSB1Y2xpYmNlYWJpLWxpbnV4LWFybQl1Y2xpYmMtbGludXgtYXJtZWwKLSB1Y2xpYmMtbGludXgtPGNwdT4JdWNsaWJjLWxpbnV4LTxjcHU+Ci0gbXVzbGVhYmloZi1saW51eC1hcm0JbXVzbC1saW51eC1hcm1oZgotK211c2xlYWJpLWxpbnV4LWFybQltdXNsLWxpbnV4LWFybWVsCi0gbXVzbC1saW51eC08Y3B1PgltdXNsLWxpbnV4LTxjcHU+Ci0gZ251ZWFiaWhmLWxpbnV4LWFybQlhcm1oZgotIGdudWVhYmktbGludXgtYXJtCWFybWVsCitkaWZmIC0tZ2l0IGEvZGF0YS9vc3RhYmxlIGIvZGF0YS9vc3RhYmxlCitpbmRleCA5OWMxZjg4OWQuLmJlNjQzNDI3MSAxMDA2NDQKKy0tLSBhL2RhdGEvb3N0YWJsZQorKysrIGIvZGF0YS9vc3RhYmxlCitAQCAtMTcsNiArMTcsNyBAQAorIGVhYmktdWNsaWJjLWxpbnV4CWxpbnV4LXVjbGliY2VhYmkJbGludXhbXi1dKi11Y2xpYmNlYWJpCisgYmFzZS11Y2xpYmMtbGludXgJbGludXgtdWNsaWJjCQlsaW51eFteLV0qLXVjbGliYworIGVhYmloZi1tdXNsLWxpbnV4CWxpbnV4LW11c2xlYWJpaGYJbGludXhbXi1dKi1tdXNsZWFiaWhmCisrZWFiaS1tdXNsLWxpbnV4CQlsaW51eC1tdXNsZWFiaQkJbGludXhbXi1dKi1tdXNsZWFiaQorIGJhc2UtbXVzbC1saW51eAkJbGludXgtbXVzbAkJbGludXhbXi1dKi1tdXNsCisgZWFiaWhmLWdudS1saW51eAlsaW51eC1nbnVlYWJpaGYJCWxpbnV4W14tXSotZ251ZWFiaWhmCisgZWFiaS1nbnUtbGludXgJCWxpbnV4LWdudWVhYmkJCWxpbnV4W14tXSotZ251ZWFiaQorZGlmZiAtLWdpdCBhL2RhdGEvdHVwbGV0YWJsZSBiL2RhdGEvdHVwbGV0YWJsZQoraW5kZXggNWY1MDBmNmNhLi4yOGYwMGJmZTYgMTAwNjQ0CistLS0gYS9kYXRhL3R1cGxldGFibGUKKysrKyBiL2RhdGEvdHVwbGV0YWJsZQorQEAgLTgsNiArOCw3IEBACisgZWFiaS11Y2xpYmMtbGludXgtYXJtCQl1Y2xpYmMtbGludXgtYXJtZWwKKyBiYXNlLXVjbGliYy1saW51eC08Y3B1PgkJdWNsaWJjLWxpbnV4LTxjcHU+CisgZWFiaWhmLW11c2wtbGludXgtYXJtCQltdXNsLWxpbnV4LWFybWhmCisrZWFiaS1tdXNsLWxpbnV4LWFybQkJbXVzbC1saW51eC1hcm1lbAorIGJhc2UtbXVzbC1saW51eC08Y3B1PgkJbXVzbC1saW51eC08Y3B1PgorIGlscDMyLWdudS1saW51eC1hcm02NAkJYXJtNjRpbHAzMgorIGVhYmloZi1nbnUtbGludXgtYXJtCQlhcm1oZgogLS0gCi0yLjYuNAorMi4xMS4wCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDctZHBrZy1kZWItYnVpbGQuYy1SZW1vdmUtdXNhZ2Utb2YtY2xhbXAtbXRpbWUtaW4tdGFyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwNy1kcGtnLWRlYi1idWlsZC5jLVJlbW92ZS11c2FnZS1vZi1jbGFtcC1tdGltZS1pbi10YXIucGF0Y2gKaW5kZXggOGJmYWFkMS4uMWI5ODVkZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwNy1kcGtnLWRlYi1idWlsZC5jLVJlbW92ZS11c2FnZS1vZi1jbGFtcC1tdGltZS1pbi10YXIucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwNy1kcGtnLWRlYi1idWlsZC5jLVJlbW92ZS11c2FnZS1vZi1jbGFtcC1tdGltZS1pbi10YXIucGF0Y2gKQEAgLTIzLDE4ICsyMywxNyBAQAogIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQogCiBkaWZmIC0tZ2l0IGEvZHBrZy1kZWIvYnVpbGQuYyBiL2Rwa2ctZGViL2J1aWxkLmMKLWluZGV4IDY1NWFhNTUuLjkyN2Y1NmYgMTAwNjQ0CitpbmRleCBhOTJiNThlLi5hM2QxOTEyIDEwMDY0NAogLS0tIGEvZHBrZy1kZWIvYnVpbGQuYwogKysrIGIvZHBrZy1kZWIvYnVpbGQuYwotQEAgLTQ0Nyw3ICs0NDcsNyBAQCB0YXJiYWxsX3BhY2soY29uc3QgY2hhciAqZGlyLCBmaWxlbmFtZXNfZmVlZF9mdW5jICp0YXJfZmlsZW5hbWVzX2ZlZWRlciwKLSAgICAgc25wcmludGYobXRpbWUsIHNpemVvZihtdGltZSksICJAJWxkIiwgdGltZXN0YW1wKTsKK0BAIC00NTAsNyArNDUwLDcgQEAgdGFyYmFsbF9wYWNrKGNvbnN0IGNoYXIgKmRpciwgZmlsZW5hbWVzX2ZlZWRfZnVuYyAqdGFyX2ZpbGVuYW1lc19mZWVkZXIsCiAgCi0gICAgIGV4ZWNscChUQVIsICJ0YXIiLCAiLWNmIiwgIi0iLCAiLS1mb3JtYXQ9Z251IiwKLS0gICAgICAgICAgICAgICAgICAgICAgICItLW10aW1lIiwgbXRpbWUsICItLWNsYW1wLW10aW1lIiwKLSsgICAgICAgICAgICAgICAgICAgICAgICItLW10aW1lIiwgbXRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAiLS1udWxsIiwgIi0tbm8tdW5xdW90ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiLS1uby1yZWN1cnNpb24iLCAiLVQiLCAiLSIsIE5VTEwpOwotICAgICBvaHNoaXRlKF8oInVuYWJsZSB0byBleGVjdXRlICVzICglcykiKSwgInRhciAtY2YiLCBUQVIpOworICAgICBjb21tYW5kX2luaXQoJmNtZCwgVEFSLCAidGFyIC1jZiIpOworICAgICBjb21tYW5kX2FkZF9hcmdzKCZjbWQsICJ0YXIiLCAiLWNmIiwgIi0iLCAiLS1mb3JtYXQ9Z251IiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1tdGltZSIsIG10aW1lLCAiLS1jbGFtcC1tdGltZSIsIE5VTEwpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICItLW10aW1lIiwgbXRpbWUsIE5VTEwpOworICAgICAvKiBNb2RlIG1pZ2h0IGJlY29tZSBhIHBvc2l0aW9uYWwgYXJndW1lbnQsIHBhc3MgaXQgYmVmb3JlIC1ULiAqLworICAgICBpZiAobW9kZSkKKyAgICAgICBjb21tYW5kX2FkZF9hcmdzKCZjbWQsICItLW1vZGUiLCBtb2RlLCBOVUxMKTsKIC0tIAotMi4xLjQKLQorMi4xMS4wCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9hZGRfYXJtZWJfdHJpcGxldF9lbnRyeS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2FkZF9hcm1lYl90cmlwbGV0X2VudHJ5LnBhdGNoCmluZGV4IGRjNjllYjIuLmQxNjU2MTYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2FkZF9hcm1lYl90cmlwbGV0X2VudHJ5LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2FkZF9hcm1lYl90cmlwbGV0X2VudHJ5LnBhdGNoCkBAIC0yNCwyMyArMjQsMjUgQEAKIFVwc3RyZWFtLVN0YXR1czogUGVuZGluZwogCiBTaWduZWQtb2ZmLWJ5OiBLcmlzaG5hbmphbmFwcGEsIEphZ2FkZWVzaCA8amFnYWRlZXNoLmtyaXNobmFuamFuYXBwYUBjYXZpdW1uZXR3b3Jrcy5jb20+CitTaWduZWQtb2ZmLWJ5OiBBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KIAogLS0tCi0gdHJpcGxldHRhYmxlIHwgMSArCisgZGF0YS90dXBsZXRhYmxlIHwgMSArCiAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCiAKLWRpZmYgLS1naXQgYS90cmlwbGV0dGFibGUgYi90cmlwbGV0dGFibGUKLWluZGV4IGFiZTQ3MjYuLjFlOWMyNDcgMTAwNjQ0Ci0tLS0gYS90cmlwbGV0dGFibGUKLSsrKyBiL3RyaXBsZXR0YWJsZQotQEAgLTExLDYgKzExLDcgQEAgZ251ZWFiaWhmLWxpbnV4LWFybQlhcm1oZgotIGdudWVhYmktbGludXgtYXJtCWFybWVsCi0gZ251YWJpbjMyLWxpbnV4LW1pcHM2NHI2ZWwJbWlwc24zMnI2ZWwKLSBnbnVhYmluMzItbGludXgtbWlwczY0cjYJbWlwc24zMnI2Ci0rZ251ZWFiaS1saW51eC1hcm1lYglhcm1lYgotIGdudWFiaW4zMi1saW51eC1taXBzNjRlbAltaXBzbjMyZWwKLSBnbnVhYmluMzItbGludXgtbWlwczY0CW1pcHNuMzIKLSBnbnVhYmk2NC1saW51eC1taXBzNjRyNmVsCW1pcHM2NHI2ZWwKK2RpZmYgLS1naXQgYS9kYXRhL3R1cGxldGFibGUgYi9kYXRhL3R1cGxldGFibGUKK2luZGV4IGI3ODAyYmVjMy4uNWY1MDBmNmNhIDEwMDY0NAorLS0tIGEvZGF0YS90dXBsZXRhYmxlCisrKysgYi9kYXRhL3R1cGxldGFibGUKK0BAIC0xMiw2ICsxMiw3IEBAIGJhc2UtbXVzbC1saW51eC08Y3B1PgkJbXVzbC1saW51eC08Y3B1PgorIGlscDMyLWdudS1saW51eC1hcm02NAkJYXJtNjRpbHAzMgorIGVhYmloZi1nbnUtbGludXgtYXJtCQlhcm1oZgorIGVhYmktZ251LWxpbnV4LWFybQkJYXJtZWwKKytlYWJpLWdudS1saW51eC1hcm1lYgkJYXJtZWIKKyBhYmluMzItZ251LWxpbnV4LW1pcHM2NHI2ZWwJbWlwc24zMnI2ZWwKKyBhYmluMzItZ251LWxpbnV4LW1pcHM2NHI2CW1pcHNuMzJyNgorIGFiaW4zMi1nbnUtbGludXgtbWlwczY0ZWwJbWlwc24zMmVsCiAtLSAKLTIuMS40CisyLjExLjAKKwogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9hcmNoX3BtLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvYXJjaF9wbS5wYXRjaAppbmRleCBjYWQ0YzBmLi40ZTBkMjJhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9hcmNoX3BtLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2FyY2hfcG0ucGF0Y2gKQEAgLTcsMTYgKzcsMjMgQEAKIAogU2lnbmVkLW9mZi1ieTogSm9lIFNsYXRlciA8anNsYXRlckB3aW5kcml2ZXIuY29tPgogCistLS0KKyBzY3JpcHRzL0Rwa2cvQXJjaC5wbSB8IDMgLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgZGVsZXRpb25zKC0pCiAKK2RpZmYgLS1naXQgYS9zY3JpcHRzL0Rwa2cvQXJjaC5wbSBiL3NjcmlwdHMvRHBrZy9BcmNoLnBtCitpbmRleCAxNzIwODQ3YjguLjYzNDVjZTNiOSAxMDA2NDQKIC0tLSBhL3NjcmlwdHMvRHBrZy9BcmNoLnBtCiArKysgYi9zY3JpcHRzL0Rwa2cvQXJjaC5wbQotQEAgLTIzMyw5ICsyMzMsNiBAQCBzdWIgcmVhZF90cmlwbGV0dGFibGUoKQotIAkJICAgIChteSAkZHQgPSAkZGVidHJpcGxldCkgPX4gcy88Y3B1Pi8kX2NwdS87CitAQCAtMzIzLDkgKzMyMyw2IEBAIHN1YiBfbG9hZF90dXBsZXRhYmxlKCkKKyAJCSAgICAobXkgJGR0ID0gJGRlYnR1cGxlKSA9fiBzLzxjcHU+LyRfY3B1LzsKICAJCSAgICAobXkgJGRhID0gJGRlYmFyY2gpID1+IHMvPGNwdT4vJF9jcHUvOwogIAotLQkJICAgIG5leHQgaWYgZXhpc3RzICRkZWJhcmNoX3RvX2RlYnRyaXBsZXR7JGRhfQotLQkJICAgICAgICAgb3IgZXhpc3RzICRkZWJ0cmlwbGV0X3RvX2RlYmFyY2h7JGR0fTsKKy0JCSAgICBuZXh0IGlmIGV4aXN0cyAkZGViYXJjaF90b19kZWJ0dXBsZXskZGF9CistCQkgICAgICAgICBvciBleGlzdHMgJGRlYnR1cGxlX3RvX2RlYmFyY2h7JGR0fTsKIC0KLSAJCSAgICAkZGViYXJjaF90b19kZWJ0cmlwbGV0eyRkYX0gPSAkZHQ7Ci0gCQkgICAgJGRlYnRyaXBsZXRfdG9fZGViYXJjaHskZHR9ID0gJGRhOworIAkJICAgICRkZWJhcmNoX3RvX2RlYnR1cGxleyRkYX0gPSAkZHQ7CisgCQkgICAgJGRlYnR1cGxlX3RvX2RlYmFyY2h7JGR0fSA9ICRkYTsKICAJCX0KKy0tIAorMi4xMS4wCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9kcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvZHBrZy1jb25maWd1cmUuc2VydmljZQppbmRleCBmMGIwNzg5Li45YTI0OGNjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9kcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2Rwa2ctY29uZmlndXJlLnNlcnZpY2UKQEAgLTgsNyArOCw3IEBACiBUeXBlPW9uZXNob3QKIEVudmlyb25tZW50RmlsZT0tQFNZU0NPTkZESVJAL2RlZmF1bHQvcG9zdGluc3QKIEV4ZWNTdGFydD0tQEJBU0VfQklORElSQC9zaCAtYyAiIGlmIFsgJFBPU1RJTlNUX0xPR0dJTkcgPSAnMScgXTsgdGhlbiBAQklORElSQC9kcGtnIC0tY29uZmlndXJlIC1hID4gJExPR0ZJTEUgMj4mMTsgZWxzZSBAQklORElSQC9kcGtnIC0tY29uZmlndXJlIC1hOyBmaSIKLUV4ZWNTdGFydFBvc3Q9QEJBU0VfQklORElSQC9zeXN0ZW1jdGwgZGlzYWJsZSBkcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlCitFeGVjU3RhcnRQb3N0PUBCQVNFX0JJTkRJUkAvc3lzdGVtY3RsIC0tbm8tcmVsb2FkIGRpc2FibGUgZHBrZy1jb25maWd1cmUuc2VydmljZQogU3RhbmRhcmRPdXRwdXQ9c3lzbG9nCiBSZW1haW5BZnRlckV4aXQ9Tm8KIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvbm9tYW4ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9ub21hbi5wYXRjaAppbmRleCBkMzBjMTUwLi5hN2YzY2I4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9ub21hbi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9ub21hbi5wYXRjaApAQCAtMSwxNCArMSwyMiBAQAogVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCiAKLWRpZmYgLXJ1TiBkcGtnLTEuMTUuOC41LW9yaWcvTWFrZWZpbGUuYW0gZHBrZy0xLjE1LjguNS9NYWtlZmlsZS5hbQotLS0tIGRwa2ctMS4xNS44LjUtb3JpZy9NYWtlZmlsZS5hbQkyMDEwLTEwLTA4IDEyOjI3OjE1LjA0MjA4MzcwMyArMDgwMAotKysrIGRwa2ctMS4xNS44LjUvTWFrZWZpbGUuYW0JMjAxMC0xMC0wOCAxMjoyNzoyNy43NTUxNDgyMjggKzA4MDAKLUBAIC0xMiw4ICsxMiw3IEBACi0gCXV0aWxzIFwKKy0tLQorIE1ha2VmaWxlLmFtIHwgMyArLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCAwZGE1MmNiMTYuLmExZjc5ZTBhMiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTEzLDggKzEzLDcgQEAgU1VCRElSUyA9IFwKICAJJChNQVlCRV9EU0VMRUNUKSBcCiAgCXNjcmlwdHMgXAorIAl0LWZ1bmMgXAogLQlwbyBcCiAtCW1hbgogKwlwbwogIAogIEFDTE9DQUxfQU1GTEFHUyA9IC1JIG00CisgCistLSAKKzIuMTEuMApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2dfMS4xOC4xMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnXzEuMTguMTAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMzg1YWYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2dfMS4xOC4xMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLXJlcXVpcmUgZHBrZy5pbmMKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgotCi1TUkNfVVJJID0gImh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLzIwMTYwNzMxVDIyMTkzMVovcG9vbC9tYWluL2QvJHtCUE59LyR7QlBOfV8ke1BWfS50YXIueHogXAotICAgICAgICAgICBmaWxlOi8vbm9tYW4ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXRhci1uby10aW1lc3RhbXAucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vYXJjaF9wbS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9kcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlIFwKLSAgICAgICAgICAgZmlsZTovL2FkZF9hcm1lYl90cmlwbGV0X2VudHJ5LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDItQWRhcHQtdG8tbGludXgtd3JzLWtlcm5lbC12ZXJzaW9uLXdoaWNoLWhhcy1jaGFyYWN0ZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAzLU91ci1wcmUtcG9zdGluc3RzLWV4cGVjdC1ELXRvLWJlLXNldC13aGVuLXJ1bm5pbmctaW4ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwNC1UaGUtbHV0aW1lcy1mdW5jdGlvbi1kb2Vzbi10LXdvcmstcHJvcGVybHktZm9yLWFsbC1zLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDUtZHBrZy1jb21waWxlci5tNC1yZW1vdmUtV3ZsYS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA2LWFkZC1tdXNsZWFiaS10by1rbm93bi10YXJnZXQtdHJpcGV0cy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA3LWRwa2ctZGViLWJ1aWxkLmMtUmVtb3ZlLXVzYWdlLW9mLWNsYW1wLW10aW1lLWluLXRhci5wYXRjaCBcCi0gICAgICAgICAgICIKLVNSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZmlsZTovL2dsaWJjMi41LXN5bmNfZmlsZV9yYW5nZS5wYXRjaCAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJjY2ZmMTc3MzBjMDk2NDQyOGZjMTg2ZGVkMmYyZjQwMSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIwMjU1MjRkYTQxYmExOGIxODNmZjExZTM4OGViODY4NmY3Y2M1OGVlODM1ZWQ3ZDQ4YmQxNTljNDZhOGI2ZGM1IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2dfMS4xOC4yNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnXzEuMTguMjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBjNTlmMQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnXzEuMTguMjQuYmIKQEAgLTAsMCArMSwyMSBAQAorcmVxdWlyZSBkcGtnLmluYworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4vMjAxNzA1MThUMDkzODM4Wi9wb29sL21haW4vZC9kcGtnL2Rwa2dfMS4xOC4yNC50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vbm9tYW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXRhci1uby10aW1lc3RhbXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXJjaF9wbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL2FkZF9hcm1lYl90cmlwbGV0X2VudHJ5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItQWRhcHQtdG8tbGludXgtd3JzLWtlcm5lbC12ZXJzaW9uLXdoaWNoLWhhcy1jaGFyYWN0ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLU91ci1wcmUtcG9zdGluc3RzLWV4cGVjdC1ELXRvLWJlLXNldC13aGVuLXJ1bm5pbmctaW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC1UaGUtbHV0aW1lcy1mdW5jdGlvbi1kb2Vzbi10LXdvcmstcHJvcGVybHktZm9yLWFsbC1zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtZHBrZy1jb21waWxlci5tNC1yZW1vdmUtV3ZsYS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA2LWFkZC1tdXNsZWFiaS10by1rbm93bi10YXJnZXQtdHJpcGV0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA3LWRwa2ctZGViLWJ1aWxkLmMtUmVtb3ZlLXVzYWdlLW9mLWNsYW1wLW10aW1lLWluLXRhci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWRwa2ctU3VwcG9ydC1tdXNseDMyLWJ1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBmaWxlOi8vZ2xpYmMyLjUtc3luY19maWxlX3JhbmdlLnBhdGNoICIKKworU1JDX1VSSVttZDVzdW1dID0gIjAyZThhZjhmYWYxZTY4OTIyOGRhODA2YzNlOGM2ODgyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQ4NTMwODFkM2UwNmJmZDQ2YTIyNzA1NmU1OTFmMDk0ZTQyZTc4ZmE4YTU3OTNiMDA5M2JhZDMwYjcxMGQ3YjQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1lMmZzY2stZXhpdC13aXRoLWV4aXQtc3RhdHVzLTAtaWYtbm8tZXJyb3JzLXdlcmUtZml4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDEtZTJmc2NrLWV4aXQtd2l0aC1leGl0LXN0YXR1cy0wLWlmLW5vLWVycm9ycy13ZXJlLWZpeC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQxNzUyMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1lMmZzY2stZXhpdC13aXRoLWV4aXQtc3RhdHVzLTAtaWYtbm8tZXJyb3JzLXdlcmUtZml4LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjU1ICswLDAgQEAKLUZyb20gYmY5ZjNiNmQ1YjEwZDE5MjE4YjRlZDkwNGMxMmIyMmUzNmVjNTdkZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+Ci1EYXRlOiBUaHUsIDE2IEZlYiAyMDE3IDIyOjAyOjM1IC0wNTAwCi1TdWJqZWN0OiBbUEFUQ0hdIGUyZnNjazogZXhpdCB3aXRoIGV4aXQgc3RhdHVzIDAgaWYgbm8gZXJyb3JzIHdlcmUgZml4ZWQKLQotUHJldmlvdXNseSwgZTJmc2NrIHdvdWxkIGV4aXQgd2l0aCBhIHN0YXR1cyBjb2RlIG9mIDEgZXZlbiB0aG91Z2ggdGhlCi1vbmx5IGNoYW5nZXMgdGhhdCBpdCBtYWRlIHRvIHRoZSBmaWxlIHN5c3RlbSB3ZXJlIHZhcmlvdXMKLW9wdGltemlhdGlvbnMgYW5kIG5vdCBmaXhpbmcgZmlsZSBzeXN0ZW0gY29ycnVwdGlvbi4gIFNpbmNlIHRoZSBtYW4KLXBhZ2Ugc3RhdGVzIHRoYXQgYW4gZXhpdCBzdGF0dXMgb2YgMSBtZWFucyAiZmlsZSBzeXN0ZW0gZXJyb3JzCi1jb3JydXB0ZWQiLCBmaXggZTJmc2NrIHRvIHJldHVybiBhbiBleGl0IHN0YXR1cyBvZiAwLgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0KLVNpZ25lZC1vZmYtYnk6IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+Ci1TaWduZWQtb2ZmLWJ5OiBEYW5pZWwgU2NodWx0eiA8ZC5zY2h1bHR6QHBoeXRlYy5kZT4KLS0tLQotIGUyZnNjay9lMmZzY2suY29uZi41LmluICAgICAgICAgICAgICAgICAgICAgfCAgNyArKysrKysrCi0gZTJmc2NrL2pvdXJuYWwuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxICsKLSBlMmZzY2svcHJvYmxlbS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDggKysrKystLS0KLSBlMmZzY2svcHJvYmxlbVAuaCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEgKwotIGUyZnNjay91bml4LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyMCArKysrKysrKysrKysrKysrLS0tLQotIHRlc3RzL2ZfY29sbGFwc2VfZXh0ZW50X3RyZWUvZXhwZWN0LjEgICAgICAgfCAgMiArLQotIHRlc3RzL2ZfY29tcHJlc3NfZXh0ZW50X3RyZWVfbGV2ZWwvZXhwZWN0LjEgfCAgMiArLQotIHRlc3RzL2ZfY29udmVydF9ibWFwL2V4cGVjdC4xICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2ZfY29udmVydF9ibWFwX2FuZF9leHRlbnQvZXhwZWN0LjEgICAgfCAgMiArLQotIHRlc3RzL2ZfZXh0ZW50X2h0cmVlL2V4cGVjdC4xICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2Zfam5sX2Vycm5vL2V4cGVjdC4xICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2Zfam91cm5hbC9leHBlY3QuMSAgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2Zfb3JwaGFuL2V4cGVjdC4xICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2Zfb3JwaGFuX2V4dGVudHNfaW5vZGUvZXhwZWN0LjEgICAgICAgfCAgMiArLQotIHRlc3RzL2ZfcmVoYXNoX2Rpci9leHBlY3QuMSAgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2ZfdW5zb3J0ZWRfRUFzL2V4cGVjdC4xICAgICAgICAgICAgICAgfCAgMiArLQotIDE2IGZpbGVzIGNoYW5nZWQsIDQxIGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvZTJmc2NrL2UyZnNjay5jb25mLjUuaW4gYi9lMmZzY2svZTJmc2NrLmNvbmYuNS5pbgotaW5kZXggMTg0OGJkYi4uMGJmYzc2YSAxMDA2NDQKLS0tLSBhL2UyZnNjay9lMmZzY2suY29uZi41LmluCi0rKysgYi9lMmZzY2svZTJmc2NrLmNvbmYuNS5pbgotQEAgLTMwMyw2ICszMDMsMTMgQEAgb2YgJ3Nob3VsZCB0aGlzIHByb2JsZW0gYmUgZml4ZWQ/Jy4gIFRoZQotIG9wdGlvbiBldmVuIG92ZXJyaWRlcyB0aGUKLSAuQiAteQotIG9wdGlvbiBnaXZlbiBvbiB0aGUgY29tbWFuZC1saW5lIChqdXN0IGZvciB0aGUgc3BlY2lmaWMgcHJvYmxlbSwgb2YgY291cnNlKS4KLSsuVFAKLSsuSSBub3RfYV9maXgKLStUaGlzIGJvb2xlYW4gb3B0aW9uLCBpdCBzZXQgdG8gdHJ1ZSwgbWFya3MgdGhlIHByb2JsZW0gYXMKLStvbmUgd2hlcmUgaWYgdGhlIHVzZXIgZ2l2ZXMgcGVybWlzc2lvbiB0byBtYWtlIHRoZSByZXF1ZXN0ZWQgY2hhbmdlLAotK2l0IGRvZXMgbm90IG1lYW4gdGhhdCB0aGUgZmlsZSBzeXN0ZW0gaGFkIGEgcHJvYmxlbSB3aGljaCBoYXMgc2luY2UKLStiZWVuIGZpeGVkLiAgVGhpcyBpcyB1c2VkIGZvciByZXF1ZXN0cyB0byBvcHRpbWl6ZSB0aGUgZmlsZSBzeXN0ZW0ncwotK2RhdGEgc3RydWN0dXJlLCBzdWNoIGFzIHBydW5pbmcgYW4gZXh0ZW50IHRyZWUuCi0gQFREQl9NQU5fQ09NTUVOVEAuU0ggVEhFIFtzY3JhdGNoX2ZpbGVzXSBTVEFOWkEKLSBAVERCX01BTl9DT01NRU5UQFRoZSBmb2xsb3dpbmcgcmVsYXRpb25zIGFyZSBkZWZpbmVkIGluIHRoZQotIEBUREJfTUFOX0NPTU1FTlRALkkgW3NjcmF0Y2hfZmlsZXNdCi1kaWZmIC0tZ2l0IGEvZTJmc2NrL2pvdXJuYWwuYyBiL2UyZnNjay9qb3VybmFsLmMKLWluZGV4IDQ2ZmU3YjQuLmM0ZjU4ZjEgMTAwNjQ0Ci0tLS0gYS9lMmZzY2svam91cm5hbC5jCi0rKysgYi9lMmZzY2svam91cm5hbC5jCi1AQCAtNTcyLDYgKzU3Miw3IEBAIHN0YXRpYyB2b2lkIGNsZWFyX3YyX2pvdXJuYWxfZmllbGRzKGpvdXJuYWxfdCAqam91cm5hbCkKLSAJaWYgKCFmaXhfcHJvYmxlbShjdHgsIFBSXzBfQ0xFQVJfVjJfSk9VUk5BTCwgJnBjdHgpKQotIAkJcmV0dXJuOwotIAotKwljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX1BST0JMRU1TX0ZJWEVEOwotIAltZW1zZXQoKChjaGFyICopIGpvdXJuYWwtPmpfc3VwZXJibG9jaykgKyBWMV9TQl9TSVpFLCAwLAotIAkgICAgICAgY3R4LT5mcy0+YmxvY2tzaXplLVYxX1NCX1NJWkUpOwotIAltYXJrX2J1ZmZlcl9kaXJ0eShqb3VybmFsLT5qX3NiX2J1ZmZlcik7Ci1kaWZmIC0tZ2l0IGEvZTJmc2NrL3Byb2JsZW0uYyBiL2UyZnNjay9wcm9ibGVtLmMKLWluZGV4IDM0YTY3MWUuLjRiMjUwNjkgMTAwNjQ0Ci0tLS0gYS9lMmZzY2svcHJvYmxlbS5jCi0rKysgYi9lMmZzY2svcHJvYmxlbS5jCi1AQCAtMTI3NiwxMiArMTI3NiwxMiBAQCBzdGF0aWMgc3RydWN0IGUyZnNja19wcm9ibGVtIHByb2JsZW1fdGFibGVbXSA9IHsKLSAJLyogSW5vZGUgZXh0ZW50IHRyZWUgY291bGQgYmUgc2hvcnRlciAqLwotIAl7IFBSXzFFX0NBTl9DT0xMQVBTRV9FWFRFTlRfVFJFRSwKLSAJICBOXygiQGkgJWkgQHggdHJlZSAoYXQgbGV2ZWwgJWIpIGNvdWxkIGJlIHNob3J0ZXIuICAiKSwKLS0JICBQUk9NUFRfRklYLCBQUl9OT19PSyB8IFBSX1BSRUVOX05PIHwgUFJfUFJFRU5fT0sgfSwKLSsJICBQUk9NUFRfRklYLCBQUl9OT19PSyB8IFBSX1BSRUVOX05PIHwgUFJfUFJFRU5fT0sgfCBQUl9OT1RfQV9GSVggfSwKLSAKLSAJLyogSW5vZGUgZXh0ZW50IHRyZWUgY291bGQgYmUgbmFycm93ZXIgKi8KLSAJeyBQUl8xRV9DQU5fTkFSUk9XX0VYVEVOVF9UUkVFLAotIAkgIE5fKCJAaSAlaSBAeCB0cmVlIChhdCBsZXZlbCAlYikgY291bGQgYmUgbmFycm93ZXIuICAiKSwKLS0JICBQUk9NUFRfRklYLCBQUl9OT19PSyB8IFBSX1BSRUVOX05PIHwgUFJfUFJFRU5fT0sgfSwKLSsJICBQUk9NUFRfRklYLCBQUl9OT19PSyB8IFBSX1BSRUVOX05PIHwgUFJfUFJFRU5fT0sgfCBQUl9OT1RfQV9GSVggfSwKLSAKLSAJLyogUGFzcyAyIGVycm9ycyAqLwotIAotQEAgLTIxNjYsNiArMjE2Niw3IEBAIGludCBmaXhfcHJvYmxlbShlMmZzY2tfdCBjdHgsIHByb2JsZW1fdCBjb2RlLCBzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4KQotIAkJcmVjb25maWd1cmVfYm9vbChjdHgsIHB0ciwga2V5LCBQUl9OT19OT01TRywgIm5vX25vbXNnIik7Ci0gCQlyZWNvbmZpZ3VyZV9ib29sKGN0eCwgcHRyLCBrZXksIFBSX1BSRUVOX05PSERSLCAicHJlZW5fbm9oZWFkZXIiKTsKLSAJCXJlY29uZmlndXJlX2Jvb2woY3R4LCBwdHIsIGtleSwgUFJfRk9SQ0VfTk8sICJmb3JjZV9ubyIpOwotKwkJcmVjb25maWd1cmVfYm9vbChjdHgsIHB0ciwga2V5LCBQUl9OT1RfQV9GSVgsICJub3RfYV9maXgiKTsKLSAJCXByb2ZpbGVfZ2V0X2ludGVnZXIoY3R4LT5wcm9maWxlLCAib3B0aW9ucyIsCi0gCQkJCSAgICAibWF4X2NvdW50X3Byb2JsZW1zIiwgMCwgMCwKLSAJCQkJICAgICZwdHItPm1heF9jb3VudCk7Ci1AQCAtMjI4Myw3ICsyMjg0LDggQEAgaW50IGZpeF9wcm9ibGVtKGUyZnNja190IGN0eCwgcHJvYmxlbV90IGNvZGUsIHN0cnVjdCBwcm9ibGVtX2NvbnRleHQgKnBjdHgpCi0gCWlmIChwdHItPmZsYWdzICYgUFJfQUZURVJfQ09ERSkKLSAJCWFuc3dlciA9IGZpeF9wcm9ibGVtKGN0eCwgcHRyLT5zZWNvbmRfY29kZSwgcGN0eCk7Ci0gCi0tCWlmIChhbnN3ZXIgJiYgKHB0ci0+cHJvbXB0ICE9IFBST01QVF9OT05FKSkKLSsJaWYgKGFuc3dlciAmJiAocHRyLT5wcm9tcHQgIT0gUFJPTVBUX05PTkUpICYmCi0rCSAgICAhKHB0ci0+ZmxhZ3MgJiBQUl9OT1RfQV9GSVgpKQotIAkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19QUk9CTEVNU19GSVhFRDsKLSAKLSAJcmV0dXJuIGFuc3dlcjsKLWRpZmYgLS1naXQgYS9lMmZzY2svcHJvYmxlbVAuaCBiL2UyZnNjay9wcm9ibGVtUC5oCi1pbmRleCA3OTQ0Y2Q2Li42M2JiOGRmIDEwMDY0NAotLS0tIGEvZTJmc2NrL3Byb2JsZW1QLmgKLSsrKyBiL2UyZnNjay9wcm9ibGVtUC5oCi1AQCAtNDQsMyArNDQsNCBAQCBzdHJ1Y3QgbGF0Y2hfZGVzY3IgewotICNkZWZpbmUgUFJfQ09ORklHCTB4MDgwMDAwIC8qIFRoaXMgcHJvYmxlbSBoYXMgYmVlbiBjdXN0b21pemVkCi0gCQkJCSAgICBmcm9tIHRoZSBjb25maWcgZmlsZSAqLwotICNkZWZpbmUgUFJfRk9SQ0VfTk8JMHgxMDAwMDAgLyogRm9yY2UgdGhlIGFuc3dlciB0byBiZSBubyAqLwotKyNkZWZpbmUgUFJfTk9UX0FfRklYCTB4MjAwMDAwIC8qIFllcyBkb2Vzbid0IG1lYW4gYSBwcm9ibGVtIHdhcyBmaXhlZCAqLwotZGlmZiAtLWdpdCBhL2UyZnNjay91bml4LmMgYi9lMmZzY2svdW5peC5jCi1pbmRleCBlYjlmMzExLi45ZTRkMzFhIDEwMDY0NAotLS0tIGEvZTJmc2NrL3VuaXguYwotKysrIGIvZTJmc2NrL3VuaXguYwotQEAgLTE5MDEsMTEgKzE5MDEsMjMgQEAgbm9fam91cm5hbDoKLSAJCWZpeF9wcm9ibGVtKGN0eCwgUFJfNl9JT19GTFVTSCwgJnBjdHgpOwotIAotIAlpZiAod2FzX2NoYW5nZWQpIHsKLS0JCWV4aXRfdmFsdWUgfD0gRlNDS19OT05ERVNUUlVDVDsKLS0JCWlmICghKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUFJFRU4pKQotLQkJCWxvZ19vdXQoY3R4LCBfKCJcbiVzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgIgotLQkJCQkgICAgICAgIk1PRElGSUVEICoqKioqXG4iKSwKLSsJCWludCBmc19maXhlZCA9IChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfUFJPQkxFTVNfRklYRUQpOwotKwotKwkJaWYgKGZzX2ZpeGVkKQotKwkJCWV4aXRfdmFsdWUgfD0gRlNDS19OT05ERVNUUlVDVDsKLSsJCWlmICghKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUFJFRU4pKSB7Ci0rI2lmIDAJLyogRG8gdGhpcyBsYXRlcjsgaXQgYnJlYWtzIHRvbyBtYW55IHRlc3RzJyBnb2xkZW4gb3V0cHV0cyAqLwotKwkJCWxvZ19vdXQoY3R4LCBmc19maXhlZCA/Ci0rCQkJCV8oIlxuJXM6ICoqKioqIEZJTEUgU1lTVEVNIEVSUk9SUyAiCi0rCQkJCSAgIkNPUlJFQ1RFRCAqKioqKlxuIikgOgotKwkJCQlfKCIlczogRmlsZSBzeXN0ZW0gd2FzIG1vZGlmaWVkLlxuIiksCi0gCQkJCWN0eC0+ZGV2aWNlX25hbWUpOwotKyNlbHNlCi0rCQkJbG9nX291dChjdHgsCi0rCQkJCV8oIlxuJXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKlxuIiksCi0rCQkJCWN0eC0+ZGV2aWNlX25hbWUpOwotKyNlbmRpZgotKwkJfQotIAkJaWYgKGN0eC0+bW91bnRfZmxhZ3MgJiBFWFQyX01GX0lTUk9PVCkgewotIAkJCWxvZ19vdXQoY3R4LCBfKCIlczogKioqKiogUkVCT09UIFNZU1RFTSAqKioqKlxuIiksCi0gCQkJCWN0eC0+ZGV2aWNlX25hbWUpOwotZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfY29sbGFwc2VfZXh0ZW50X3RyZWUvZXhwZWN0LjEgYi90ZXN0cy9mX2NvbGxhcHNlX2V4dGVudF90cmVlL2V4cGVjdC4xCi1pbmRleCBlMmViNjVlLi44MTY1YTU4IDEwMDY0NAotLS0tIGEvdGVzdHMvZl9jb2xsYXBzZV9leHRlbnRfdHJlZS9leHBlY3QuMQotKysrIGIvdGVzdHMvZl9jb2xsYXBzZV9leHRlbnRfdHJlZS9leHBlY3QuMQotQEAgLTEzLDQgKzEzLDQgQEAgUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCi0gCi0gdGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKLSB0ZXN0X2ZpbGVzeXM6IDEyLzEyOCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDE5LzUxMiBibG9ja3MKLS1FeGl0IHN0YXR1cyBpcyAxCi0rRXhpdCBzdGF0dXMgaXMgMAotZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfY29tcHJlc3NfZXh0ZW50X3RyZWVfbGV2ZWwvZXhwZWN0LjEgYi90ZXN0cy9mX2NvbXByZXNzX2V4dGVudF90cmVlX2xldmVsL2V4cGVjdC4xCi1pbmRleCBhMzU5Yzk5Li5kZDMzZjYzIDEwMDY0NAotLS0tIGEvdGVzdHMvZl9jb21wcmVzc19leHRlbnRfdHJlZV9sZXZlbC9leHBlY3QuMQotKysrIGIvdGVzdHMvZl9jb21wcmVzc19leHRlbnRfdHJlZV9sZXZlbC9leHBlY3QuMQotQEAgLTIwLDQgKzIwLDQgQEAgUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCi0gCi0gdGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKLSB0ZXN0X2ZpbGVzeXM6IDEyLzEyOCBmaWxlcyAoOC4zJSBub24tY29udGlndW91cyksIDI2LzUxMiBibG9ja3MKLS1FeGl0IHN0YXR1cyBpcyAxCi0rRXhpdCBzdGF0dXMgaXMgMAotZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfY29udmVydF9ibWFwL2V4cGVjdC4xIGIvdGVzdHMvZl9jb252ZXJ0X2JtYXAvZXhwZWN0LjEKLWluZGV4IDdkMmNhODYuLmMzODc5NjIgMTAwNjQ0Ci0tLS0gYS90ZXN0cy9mX2NvbnZlcnRfYm1hcC9leHBlY3QuMQotKysrIGIvdGVzdHMvZl9jb252ZXJ0X2JtYXAvZXhwZWN0LjEKLUBAIC0yMyw0ICsyMyw0IEBAIFBhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgotIAotIHRlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCi0gdGVzdF9maWxlc3lzOiAxMi8xMjggZmlsZXMgKDguMyUgbm9uLWNvbnRpZ3VvdXMpLCA1NzAvMjA0OCBibG9ja3MKLS1FeGl0IHN0YXR1cyBpcyAxCi0rRXhpdCBzdGF0dXMgaXMgMAotZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfY29udmVydF9ibWFwX2FuZF9leHRlbnQvZXhwZWN0LjEgYi90ZXN0cy9mX2NvbnZlcnRfYm1hcF9hbmRfZXh0ZW50L2V4cGVjdC4xCi1pbmRleCA3YWY5MWFhLi5jODZjNTcxIDEwMDY0NAotLS0tIGEvdGVzdHMvZl9jb252ZXJ0X2JtYXBfYW5kX2V4dGVudC9leHBlY3QuMQotKysrIGIvdGVzdHMvZl9jb252ZXJ0X2JtYXBfYW5kX2V4dGVudC9leHBlY3QuMQotQEAgLTMwLDQgKzMwLDQgQEAgUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCi0gCi0gdGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKLSB0ZXN0X2ZpbGVzeXM6IDEzLzEyOCBmaWxlcyAoMTUuNCUgbm9uLWNvbnRpZ3VvdXMpLCA1NzQvMjA0OCBibG9ja3MKLS1FeGl0IHN0YXR1cyBpcyAxCi0rRXhpdCBzdGF0dXMgaXMgMAotZGlmZiAtLWdpdCBhL3Rlc3RzL2ZfZXh0ZW50X2h0cmVlL2V4cGVjdC4xIGIvdGVzdHMvZl9leHRlbnRfaHRyZWUvZXhwZWN0LjEKLWluZGV4IDIyM2NhNjkuLmVhNDg0MDUgMTAwNjQ0Ci0tLS0gYS90ZXN0cy9mX2V4dGVudF9odHJlZS9leHBlY3QuMQotKysrIGIvdGVzdHMvZl9leHRlbnRfaHRyZWUvZXhwZWN0LjEKLUBAIC0yNiw0ICsyNiw0IEBAIHRlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCi0gICAgICAgICAgICAwIHNvY2tldHMKLSAtLS0tLS0tLS0tLS0KLSAgICAgICAgICAzNDMgZmlsZXMKLS1FeGl0IHN0YXR1cyBpcyAxCi0rRXhpdCBzdGF0dXMgaXMgMAotZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfam5sX2Vycm5vL2V4cGVjdC4xIGIvdGVzdHMvZl9qbmxfZXJybm8vZXhwZWN0LjEKLWluZGV4IGM1NzI5NTEuLjQxMzQyMzQgMTAwNjQ0Ci0tLS0gYS90ZXN0cy9mX2pubF9lcnJuby9leHBlY3QuMQotKysrIGIvdGVzdHMvZl9qbmxfZXJybm8vZXhwZWN0LjEKLUBAIC02LDQgKzYsNCBAQCBQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KLSAKLSB0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgotIHRlc3RfZmlsZXN5czogMTEvMjA0OCBmaWxlcyAoOS4xJSBub24tY29udGlndW91cyksIDEzMzAvODE5MiBibG9ja3MKLS1FeGl0IHN0YXR1cyBpcyAxCi0rRXhpdCBzdGF0dXMgaXMgMAotZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfam91cm5hbC9leHBlY3QuMSBiL3Rlc3RzL2Zfam91cm5hbC9leHBlY3QuMQotaW5kZXggYTIwMmM4MC4uMGExODY1NCAxMDA2NDQKLS0tLSBhL3Rlc3RzL2Zfam91cm5hbC9leHBlY3QuMQotKysrIGIvdGVzdHMvZl9qb3VybmFsL2V4cGVjdC4xCi1AQCAtNTksNCArNTksNCBAQCBQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KLSAKLSB0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgotIHRlc3RfZmlsZXN5czogNTMvMjA0OCBmaWxlcyAoMS45JSBub24tY29udGlndW91cyksIDE0MDkvODE5MiBibG9ja3MKLS1FeGl0IHN0YXR1cyBpcyAxCi0rRXhpdCBzdGF0dXMgaXMgMAotZGlmZiAtLWdpdCBhL3Rlc3RzL2Zfb3JwaGFuL2V4cGVjdC4xIGIvdGVzdHMvZl9vcnBoYW4vZXhwZWN0LjEKLWluZGV4IGVkZGMxZjguLjA4N2ViZWUgMTAwNjQ0Ci0tLS0gYS90ZXN0cy9mX29ycGhhbi9leHBlY3QuMQotKysrIGIvdGVzdHMvZl9vcnBoYW4vZXhwZWN0LjEKLUBAIC0xMSw0ICsxMSw0IEBAIFBhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgotIAotIHRlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCi0gdGVzdF9maWxlc3lzOiAxMi8yMDQ4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTMwMy84MTkyIGJsb2NrcwotLUV4aXQgc3RhdHVzIGlzIDEKLStFeGl0IHN0YXR1cyBpcyAwCi1kaWZmIC0tZ2l0IGEvdGVzdHMvZl9vcnBoYW5fZXh0ZW50c19pbm9kZS9leHBlY3QuMSBiL3Rlc3RzL2Zfb3JwaGFuX2V4dGVudHNfaW5vZGUvZXhwZWN0LjEKLWluZGV4IDJlYWFiNzguLjVkNzEzYjMgMTAwNjQ0Ci0tLS0gYS90ZXN0cy9mX29ycGhhbl9leHRlbnRzX2lub2RlL2V4cGVjdC4xCi0rKysgYi90ZXN0cy9mX29ycGhhbl9leHRlbnRzX2lub2RlL2V4cGVjdC4xCi1AQCAtNyw0ICs3LDQgQEAgUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCi0gCi0gdGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKLSB0ZXN0X2ZpbGVzeXM6IDEyLzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjEvMTAwIGJsb2NrcwotLUV4aXQgc3RhdHVzIGlzIDEKLStFeGl0IHN0YXR1cyBpcyAwCi1kaWZmIC0tZ2l0IGEvdGVzdHMvZl9yZWhhc2hfZGlyL2V4cGVjdC4xIGIvdGVzdHMvZl9yZWhhc2hfZGlyL2V4cGVjdC4xCi1pbmRleCA2MDc2NzY1Li5jMTQ0OWJhIDEwMDY0NAotLS0tIGEvdGVzdHMvZl9yZWhhc2hfZGlyL2V4cGVjdC4xCi0rKysgYi90ZXN0cy9mX3JlaGFzaF9kaXIvZXhwZWN0LjEKLUBAIC03LDQgKzcsNCBAQCBQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KLSAKLSB0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgotIHRlc3RfZmlsZXN5czogMTA1LzIwNDggZmlsZXMgKDIuOSUgbm9uLWNvbnRpZ3VvdXMpLCAzMzYvNTEyIGJsb2NrcwotLUV4aXQgc3RhdHVzIGlzIDEKLStFeGl0IHN0YXR1cyBpcyAwCi1kaWZmIC0tZ2l0IGEvdGVzdHMvZl91bnNvcnRlZF9FQXMvZXhwZWN0LjEgYi90ZXN0cy9mX3Vuc29ydGVkX0VBcy9leHBlY3QuMQotaW5kZXggN2Q1ODhkNy4uNjRiOTA0NSAxMDA2NDQKLS0tLSBhL3Rlc3RzL2ZfdW5zb3J0ZWRfRUFzL2V4cGVjdC4xCi0rKysgYi90ZXN0cy9mX3Vuc29ydGVkX0VBcy9leHBlY3QuMQotQEAgLTgsNCArOCw0IEBAIFBhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgotIAotIHRlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCi0gdGVzdF9maWxlc3lzOiAxMi8yMDQ4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTI5NC8yMDQ4IGJsb2NrcwotLUV4aXQgc3RhdHVzIGlzIDEKLStFeGl0IHN0YXR1cyBpcyAwCi0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAxLW1pc2MtY3JlYXRlX2lub2RlLmMtc2V0LWRpci1zLW1vZGUtY29ycmVjdGx5LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDEtbWlzYy1jcmVhdGVfaW5vZGUuYy1zZXQtZGlyLXMtbW9kZS1jb3JyZWN0bHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM0YTU0MAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAxLW1pc2MtY3JlYXRlX2lub2RlLmMtc2V0LWRpci1zLW1vZGUtY29ycmVjdGx5LnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb20gZjZkMTg4NTgwYzJjOTU5OTMxOTA3NmZlZTIyZjI0MjQ2NTJjNzExYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxMyBTZXAgMjAxNyAxOTo1NTozNSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBtaXNjL2NyZWF0ZV9pbm9kZS5jOiBzZXQgZGlyJ3MgbW9kZSBjb3JyZWN0bHkKKworVGhlIGRpcidzIG1vZGUgaGFzIGJlZW4gc2V0IGJ5IGV4dDJmc19ta2RpcigpIHdpdGggdW1hc2ssIHNvCityZXNldCBpdCB0byB0aGUgc291cmNlJ3MgbW9kZSBpbiBzZXRfaW5vZGVfZXh0cmEoKS4KKworRml4ZWQgd2hlbiBzb3VyY2UgZGlyJ3MgbW9kZSBpcyA1MjEsIGJ1dCB0YXJiYWxsIHdvdWxkIGJlIDcyMSwgdGhpcyB3YXMKK2luY29ycmVjdC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBtaXNjL2NyZWF0ZV9pbm9kZS5jIHwgOSArKysrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5jIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworaW5kZXggOGNlM2ZhZi4uNTBmYmFhOCAxMDA2NDQKKy0tLSBhL21pc2MvY3JlYXRlX2lub2RlLmMKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK0BAIC0xMTYsNyArMTE2LDE0IEBAIHN0YXRpYyBlcnJjb2RlX3Qgc2V0X2lub2RlX2V4dHJhKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKyAKKyAJaW5vZGUuaV91aWQgPSBzdC0+c3RfdWlkOworIAlpbm9kZS5pX2dpZCA9IHN0LT5zdF9naWQ7CistCWlub2RlLmlfbW9kZSB8PSBzdC0+c3RfbW9kZTsKKysJLyoKKysJICogVGhlIGRpcidzIG1vZGUgaGFzIGJlZW4gc2V0IGJ5IGV4dDJmc19ta2RpcigpIHdpdGggdW1hc2ssIHNvCisrCSAqIHJlc2V0IGl0IHRvIHRoZSBzb3VyY2UncyBtb2RlCisrCSAqLworKwlpZiBTX0lTRElSKHN0LT5zdF9tb2RlKQorKwkJaW5vZGUuaV9tb2RlID0gTElOVVhfU19JRkRJUiB8IHN0LT5zdF9tb2RlOworKwllbHNlCisrCQlpbm9kZS5pX21vZGUgfD0gc3QtPnN0X21vZGU7CisgCWlub2RlLmlfYXRpbWUgPSBzdC0+c3RfYXRpbWU7CisgCWlub2RlLmlfbXRpbWUgPSBzdC0+c3RfbXRpbWU7CisgCWlub2RlLmlfY3RpbWUgPSBzdC0+c3RfY3RpbWU7CistLSAKKzIuMTAuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvZTJmc3Byb2dzLTEuNDMtc3lzbWFjcm9zLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL2UyZnNwcm9ncy0xLjQzLXN5c21hY3Jvcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJiZjJiYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvZTJmc3Byb2dzLTEuNDMtc3lzbWFjcm9zLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLUZyb20gMzBlZjQxZjY4NzAzYjZhMTYwMjdjYzg3ODcxMThiODdmMTQ2MmRmZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IE1pa2UgRnJ5c2luZ2VyIDx2YXBpZXJAZ2VudG9vLm9yZz4KLURhdGU6IE1vbiwgMjggTWFyIDIwMTYgMjA6MzE6MzMgLTA0MDAKLVN1YmplY3Q6IFtQQVRDSCBlMmZzcHJvZ3NdIGluY2x1ZGUgc3lzL3N5c21hY3Jvcy5oIGFzIG5lZWRlZAotCi1UaGUgbWlub3IvbWFqb3IvbWFrZWRldiBtYWNyb3MgYXJlIG5vdCBlbnRpcmVseSBzdGFuZGFyZC4gIGdsaWJjIGhhcyBoYWQKLXRoZSBkZWZpbml0aW9ucyBpbiBzeXMvc3lzbWFjcm9zLmggc2luY2UgdGhlIHN0YXJ0LCBhbmQgd2FudHMgdG8gbW92ZSBhd2F5Ci1mcm9tIGFsd2F5cyBkZWZpbmluZyB0aGVtIGltcGxpY2l0bHkgdmlhIHN5cy90eXBlcy5oIChhcyB0aGlzIHBvbGx1dGVzIHRoZQotbmFtZXNwYWNlIGluIHZpb2xhdGlvbiBvZiBQT1NJWCkuICBPdGhlciBDIGxpYnJhcmllcyBoYXZlIGFscmVhZHkgZHJvcHBlZAotdGhlbS4gIFNpbmNlIHRoZSBjb25maWd1cmUgc2NyaXB0IGFscmVhZHkgY2hlY2tzIGZvciB0aGlzIGhlYWRlciwgdXNlIHRoYXQKLXRvIHB1bGwgaW4gdGhlIGhlYWRlciBpbiBmaWxlcyB0aGF0IHVzZSB0aGVzZSBtYWNyb3MuCi0KLVNpZ25lZC1vZmYtYnk6IE1pa2UgRnJ5c2luZ2VyIDx2YXBpZXJAZ2VudG9vLm9yZz4KLQotVGFrZW4gZnJvbSBnZW50b28gcG9ydGFnZS4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLS0tLQotIGRlYnVnZnMvZGVidWdmcy5jICAgICAgfCAzICsrKwotIGxpYi9ibGtpZC9kZXZuYW1lLmMgICAgfCAzICsrKwotIGxpYi9ibGtpZC9kZXZuby5jICAgICAgfCAzICsrKwotIGxpYi9leHQyZnMvZmluZGRldi5jICAgfCAzICsrKwotIGxpYi9leHQyZnMvaXNtb3VudGVkLmMgfCAzICsrKwotIG1pc2MvY3JlYXRlX2lub2RlLmMgICAgfCA0ICsrKysKLSBtaXNjL21rX2h1Z2VmaWxlcy5jICAgIHwgMyArKysKLSA3IGZpbGVzIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL2RlYnVnZnMvZGVidWdmcy5jIGIvZGVidWdmcy9kZWJ1Z2ZzLmMKLWluZGV4IGJhOGJlNDAuLjdkNDgxYmMgMTAwNjQ0Ci0tLS0gYS9kZWJ1Z2ZzL2RlYnVnZnMuYwotKysrIGIvZGVidWdmcy9kZWJ1Z2ZzLmMKLUBAIC0yNiw2ICsyNiw5IEBAIGV4dGVybiBjaGFyICpvcHRhcmc7Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0gI2VuZGlmCi0gI2luY2x1ZGUgPGZjbnRsLmg+Ci0rI2lmZGVmIEhBVkVfU1lTX1NZU01BQ1JPU19ICi0rI2luY2x1ZGUgPHN5cy9zeXNtYWNyb3MuaD4KLSsjZW5kaWYKLSAKLSAjaW5jbHVkZSAiZGVidWdmcy5oIgotICNpbmNsdWRlICJ1dWlkL3V1aWQuaCIKLWRpZmYgLS1naXQgYS9saWIvYmxraWQvZGV2bmFtZS5jIGIvbGliL2Jsa2lkL2Rldm5hbWUuYwotaW5kZXggM2UyZWZhOS4uNjcxZTc4MSAxMDA2NDQKLS0tLSBhL2xpYi9ibGtpZC9kZXZuYW1lLmMKLSsrKyBiL2xpYi9ibGtpZC9kZXZuYW1lLmMKLUBAIC0zNiw2ICszNiw5IEBACi0gI2lmIEhBVkVfU1lTX01LREVWX0gKLSAjaW5jbHVkZSA8c3lzL21rZGV2Lmg+Ci0gI2VuZGlmCi0rI2lmZGVmIEhBVkVfU1lTX1NZU01BQ1JPU19ICi0rI2luY2x1ZGUgPHN5cy9zeXNtYWNyb3MuaD4KLSsjZW5kaWYKLSAjaW5jbHVkZSA8dGltZS5oPgotIAotICNpbmNsdWRlICJibGtpZFAuaCIKLWRpZmYgLS1naXQgYS9saWIvYmxraWQvZGV2bm8uYyBiL2xpYi9ibGtpZC9kZXZuby5jCi1pbmRleCA0NzlkOTc3Li42MWU2ZmM3IDEwMDY0NAotLS0tIGEvbGliL2Jsa2lkL2Rldm5vLmMKLSsrKyBiL2xpYi9ibGtpZC9kZXZuby5jCi1AQCAtMzEsNiArMzEsOSBAQAotICNpZiBIQVZFX1NZU19NS0RFVl9ICi0gI2luY2x1ZGUgPHN5cy9ta2Rldi5oPgotICNlbmRpZgotKyNpZmRlZiBIQVZFX1NZU19TWVNNQUNST1NfSAotKyNpbmNsdWRlIDxzeXMvc3lzbWFjcm9zLmg+Ci0rI2VuZGlmCi0gCi0gI2luY2x1ZGUgImJsa2lkUC5oIgotIAotZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvZmluZGRldi5jIGIvbGliL2V4dDJmcy9maW5kZGV2LmMKLWluZGV4IDMxMTYwOGQuLjYyZmEwZGIgMTAwNjQ0Ci0tLS0gYS9saWIvZXh0MmZzL2ZpbmRkZXYuYwotKysrIGIvbGliL2V4dDJmcy9maW5kZGV2LmMKLUBAIC0zMSw2ICszMSw5IEBACi0gI2lmIEhBVkVfU1lTX01LREVWX0gKLSAjaW5jbHVkZSA8c3lzL21rZGV2Lmg+Ci0gI2VuZGlmCi0rI2lmZGVmIEhBVkVfU1lTX1NZU01BQ1JPU19ICi0rI2luY2x1ZGUgPHN5cy9zeXNtYWNyb3MuaD4KLSsjZW5kaWYKLSAKLSAjaW5jbHVkZSAiZXh0Ml9mcy5oIgotICNpbmNsdWRlICJleHQyZnMuaCIKLWRpZmYgLS1naXQgYS9saWIvZXh0MmZzL2lzbW91bnRlZC5jIGIvbGliL2V4dDJmcy9pc21vdW50ZWQuYwotaW5kZXggZTBmNjlkZC4uNzQwNDk5NiAxMDA2NDQKLS0tLSBhL2xpYi9leHQyZnMvaXNtb3VudGVkLmMKLSsrKyBiL2xpYi9leHQyZnMvaXNtb3VudGVkLmMKLUBAIC00OSw2ICs0OSw5IEBACi0gI2lmIEhBVkVfU1lTX1RZUEVTX0gKLSAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0gI2VuZGlmCi0rI2lmZGVmIEhBVkVfU1lTX1NZU01BQ1JPU19ICi0rI2luY2x1ZGUgPHN5cy9zeXNtYWNyb3MuaD4KLSsjZW5kaWYKLSAKLSAjaW5jbHVkZSAiZXh0Ml9mcy5oIgotICNpbmNsdWRlICJleHQyZnMuaCIKLWRpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5jIGIvbWlzYy9jcmVhdGVfaW5vZGUuYwotaW5kZXggNGRiZDhlNS4uOThhZWI0MSAxMDA2NDQKLS0tLSBhL21pc2MvY3JlYXRlX2lub2RlLmMKLSsrKyBiL21pc2MvY3JlYXRlX2lub2RlLmMKLUBAIC0yMiw2ICsyMiwxMCBAQAotICNpbmNsdWRlIDxhdHRyL3hhdHRyLmg+Ci0gI2VuZGlmCi0gI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotKyNpZmRlZiBIQVZFX1NZU19TWVNNQUNST1NfSAotKyNpbmNsdWRlIDxzeXMvc3lzbWFjcm9zLmg+Ci0rI2VuZGlmCi0rCi0gI2luY2x1ZGUgPGV4dDJmcy9leHQyZnMuaD4KLSAjaW5jbHVkZSA8ZXh0MmZzL2V4dDJfdHlwZXMuaD4KLSAjaW5jbHVkZSA8ZXh0MmZzL2ZpZW1hcC5oPgotZGlmZiAtLWdpdCBhL21pc2MvbWtfaHVnZWZpbGVzLmMgYi9taXNjL21rX2h1Z2VmaWxlcy5jCi1pbmRleCA3MWExNWM1Li4wMGU5NWNkIDEwMDY0NAotLS0tIGEvbWlzYy9ta19odWdlZmlsZXMuYwotKysrIGIvbWlzYy9ta19odWdlZmlsZXMuYwotQEAgLTM1LDYgKzM1LDkgQEAgZXh0ZXJuIGludCBvcHRpbmQ7Ci0gI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSsjaWZkZWYgSEFWRV9TWVNfU1lTTUFDUk9TX0gKLSsjaW5jbHVkZSA8c3lzL3N5c21hY3Jvcy5oPgotKyNlbmRpZgotICNpbmNsdWRlIDxsaWJnZW4uaD4KLSAjaW5jbHVkZSA8bGltaXRzLmg+Ci0gI2luY2x1ZGUgPGJsa2lkL2Jsa2lkLmg+Ci0tLSAKLTIuOC4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9wdGVzdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9wdGVzdC5wYXRjaAppbmRleCA4NzlkOTM2Li43ZGYwOTY3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvcHRlc3QucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3B0ZXN0LnBhdGNoCkBAIC0xLDMgKzEsNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKIGRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5pbiBiL3Rlc3RzL01ha2VmaWxlLmluCiBpbmRleCBjMTMwZjRhLi5kMmFkZTAzIDEwMDY0NAogLS0tIGEvdGVzdHMvTWFrZWZpbGUuaW4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9yZXByb2R1Y2libGUtZG9jLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3JlcHJvZHVjaWJsZS1kb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU1ZDFkMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9yZXByb2R1Y2libGUtZG9jLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKKworU3VwcHBvcnQgZm9yIGJpbmFyeSByZXByb2R1Y2liaWxpdHkuCitXaGVuIGNvbXByZXNzaW5nLCBkbyBub3Qgc2F2ZSB0aGUgb3JpZ2luYWwgZmlsZSBuYW1lIGFuZCB0aW1lIHN0YW1wLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbVGhlb2RvcmUgVHMnbyB0eXRzb0BtaXQuZWR1IChtYWludGFpbmVyKV0KKworU2lnbmVkLW9mZi1ieTogSnVybyBCeXN0cmlja3kgPGp1cm8uYnlzdHJpY2t5QGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2RvYy9NYWtlZmlsZS5pbiBiL2RvYy9NYWtlZmlsZS5pbgoraW5kZXggOWNiNTg0Yy4uMGJlZTRlNCAxMDA2NDQKKy0tLSBhL2RvYy9NYWtlZmlsZS5pbgorKysrIGIvZG9jL01ha2VmaWxlLmluCitAQCAtMjgsNyArMjgsNyBAQCBpbnN0YWxsLWRvYy1saWJzOiBsaWJleHQyZnMuaW5mbyBsaWJleHQyZnMuZHZpCisgCQkkKElOU1RBTExfREFUQSkgJCRpICQoREVTVERJUikkKGluZm9kaXIpLyQkaSA7IFwKKyAJZG9uZQorIAkkKEUpICIJR1pJUCAkKGluZm9kaXIpL2xpYmV4dDJmcy5pbmZvKiIKKy0JLSQoUSkgZ3ppcCAtOSAkKERFU1RESVIpJChpbmZvZGlyKS9saWJleHQyZnMuaW5mbyoKKysJLSQoUSkgZ3ppcCAtOSAtbiAkKERFU1RESVIpJChpbmZvZGlyKS9saWJleHQyZnMuaW5mbyoKKyAKKyB1bmluc3RhbGwtZG9jLWxpYnM6CisgCSQoUk0pIC1yZiAkKERFU1RESVIpJChpbmZvZGlyKS9saWJleHQyZnMuaW5mbyoKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9ydW4tcHRlc3QgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvcnVuLXB0ZXN0CmluZGV4IGUwMmZjN2YuLmVmMTBiMDggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9ydW4tcHRlc3QKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3J1bi1wdGVzdApAQCAtMSwxMSArMSwxMCBAQAogIyEvYmluL3NoCiAKIGNkIC4vdGVzdAotLi90ZXN0X3NjcmlwdCAmPi4uL3Rlc3QubG9nCi1pZiBbICQ/IC1lcSAwIF0KLXRoZW4KLQllY2hvICJQQVNTOiBlMmZzcHJvZ3MiCi0Jcm0gLi4vdGVzdC5sb2cKLWVsc2UKLQllY2hvICJGQUlMOiBlMmZzcHJvZ3MiCi1maQorLi90ZXN0X3NjcmlwdCB8IHNlZCAtdSAtZSAnLzpbWzpzcGFjZTpdXW9rL3MvXi9QQVNTOiAvJyAtZSAnLzpbWzpzcGFjZTpdXWZhaWxlZC9zL14vRkFJTDogLycgLWUgJy86W1s6c3BhY2U6XV1za2lwcGVkL3MvXi9TS0lQOiAvJworcm0gLXJmIC92YXIvdm9sYXRpbGUvdG1wLyplMmZzcHJvZ3MqCitybSAtZiB0bXAtKgorcm0gLWYgKi50bXAKK3JtIC1mICoub2sKK3JtIC1mICouZmFpbGVkCitybSAtZiAqLmxvZwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzXzEuNDMuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9nc18xLjQzLjQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMTZjNzAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzXzEuNDMuNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi1yZXF1aXJlIGUyZnNwcm9ncy5pbmMKLQotU1JDX1VSSSArPSAiZmlsZTovL2FjaW5jbHVkZS5tNCBcCi0gICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLmxkY29uZmlnLmNhbGwucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3F1aWV0LWRlYnVnZnMucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCi0gICAgICAgICAgICBmaWxlOi8vcHRlc3QucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL21rZGlyLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9SZXZlcnQtbWtlMmZzLWVuYWJsZS10aGUtbWV0YWRhdGFfY3N1bS1hbmQtNjRiaXQtZmVhLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9lMmZzcHJvZ3MtMS40My1zeXNtYWNyb3MucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL21rZGlyX3AucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovLzAwMDEtZTJmc2NrLWV4aXQtd2l0aC1leGl0LXN0YXR1cy0wLWlmLW5vLWVycm9ycy13ZXJlLWZpeC5wYXRjaCBcCi0iCi0KLVNSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZmlsZTovL2UyZnNwcm9ncy1maXgtbWlzc2luZy1jaGVjay1mb3ItcGVybWlzc2lvbi1kZW5pZWQucGF0Y2giCi0KLVNSQ1JFViA9ICIzZDY2YzRiMjBmMDlmOTIzMDc4YzFlNmViOWI1NDk4NjViNTQ5Njc0IgotVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAidig/UDxwdmVyPlxkK1wuXGQrKFwuXGQrKSopJCIKLQotRVhUUkFfT0VDT05GICs9ICItLWxpYmRpcj0ke2Jhc2VfbGliZGlyfSAtLXNiaW5kaXI9JHtiYXNlX3NiaW5kaXJ9IFwKLSAgICAgICAgICAgICAgICAtLWVuYWJsZS1lbGYtc2hsaWJzIC0tZGlzYWJsZS1saWJ1dWlkIC0tZGlzYWJsZS11dWlkZCBcCi0gICAgICAgICAgICAgICAgLS1kaXNhYmxlLWxpYmJsa2lkIC0tZW5hYmxlLXZlcmJvc2UtbWFrZWNtZHMiCi0KLUVYVFJBX09FQ09ORl9kYXJ3aW4gPSAiLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0gLS1zYmluZGlyPSR7YmFzZV9zYmluZGlyfSAtLWVuYWJsZS1ic2Qtc2hsaWJzIgotCi1QQUNLQUdFQ09ORklHID8/PSAiIgotUEFDS0FHRUNPTkZJR1tmdXNlXSA9ICctLWVuYWJsZS1mdXNlMmZzLC0tZGlzYWJsZS1mdXNlMmZzLGZ1c2UnCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKLQljcCAke1dPUktESVJ9L2FjaW5jbHVkZS5tNCAke1N9LwotfQotCi1kb19pbnN0YWxsICgpIHsKLQlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKLQlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwtbGlicwotCSMgV2UgdXNlIGJsa2lkIGZyb20gdXRpbC1saW51eCBub3cgc28gcmVtb3ZlIGZyb20gaGVyZQotCXJtIC1mICR7RH0ke2Jhc2VfbGliZGlyfS9saWJibGtpZCoKLQlybSAtcmYgJHtEfSR7aW5jbHVkZWRpcn0vYmxraWQKLQlybSAtZiAke0R9JHtiYXNlX2xpYmRpcn0vcGtnY29uZmlnL2Jsa2lkLnBjCi0Jcm0gLWYgJHtEfSR7YmFzZV9zYmluZGlyfS9ibGtpZAotCXJtIC1mICR7RH0ke2Jhc2Vfc2JpbmRpcn0vZnNjawotCXJtIC1mICR7RH0ke2Jhc2Vfc2JpbmRpcn0vZmluZGZzCi0KLQkjIGUyaW5pdHJkX2hlbHBlciBhbmQgdGhlIHBrZ2NvbmZpZyBmaWxlcyBiZWxvbmcgaW4gbGliZGlyCi0JaWYgWyAhICR7RH0ke2xpYmRpcn0gLWVmICR7RH0ke2Jhc2VfbGliZGlyfSBdOyB0aGVuCi0JCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfQotCQltdiAke0R9JHtiYXNlX2xpYmRpcn0vZTJpbml0cmRfaGVscGVyICR7RH0ke2xpYmRpcn0KLQkJbXYgJHtEfSR7YmFzZV9saWJkaXJ9L3BrZ2NvbmZpZyAke0R9JHtsaWJkaXJ9Ci0JZmkKLQotCW9lX211bHRpbGliX2hlYWRlciBleHQyZnMvZXh0Ml90eXBlcy5oCi0JaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KLQltdiAke0R9JHtiaW5kaXJ9L2NoYXR0ciAke0R9JHtiYXNlX2JpbmRpcn0vY2hhdHRyLmUyZnNwcm9ncwotCi0JaW5zdGFsbCAtdiAtbSA3NTUgJHtTfS9jb250cmliL3BvcHVsYXRlLWV4dGZzLnNoICR7RH0ke2Jhc2Vfc2JpbmRpcn0vCi0KLQkjIENsZWFuIGhvc3QgcGF0aCAoYnVpbGQgZGlyZWN0b3J5KSBpbiBjb21waWxlX2V0LCBta19jbWRzCi0Jc2VkIC1pIC1lICJzLFwoRVRfRElSPS4qXCkke1N9L2xpYi9ldFwoLipcKSxcMSR7ZGF0YWRpcn0vZXRcMixnIiAke0R9JHtiaW5kaXJ9L2NvbXBpbGVfZXQKLQlzZWQgLWkgLWUgInMsXChTU19ESVI9LipcKSR7U30vbGliL3NzXCguKlwpLFwxJHtkYXRhZGlyfS9zc1wyLGciICR7RH0ke2JpbmRpcn0vbWtfY21kcwotfQotCi0jIE5lZWQgdG8gZmluZCB0aGUgcmlnaHQgbWtlMmZzLmNvbmYgZmlsZQotZTJmc3Byb2dzX2NvbmZfZml4dXAgKCkgewotCWZvciBpIGluIG1rZTJmcyBta2ZzLmV4dDIgbWtmcy5leHQzIG1rZnMuZXh0NDsgZG8KLQkJY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmFzZV9zYmluZGlyfS8kaSBNS0UyRlNfQ09ORklHPSR7c3lzY29uZmRpcn0vbWtlMmZzLmNvbmYKLQlkb25lCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKLQllMmZzcHJvZ3NfY29uZl9maXh1cAotfQotCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7Ci0JZTJmc3Byb2dzX2NvbmZfZml4dXAKLX0KLQotUkRFUEVORFNfZTJmc3Byb2dzID0gImUyZnNwcm9ncy1iYWRibG9ja3MiCi1SUkVDT01NRU5EU19lMmZzcHJvZ3MgPSAiZTJmc3Byb2dzLW1rZTJmcyBlMmZzcHJvZ3MtZTJmc2NrIgotCi1QQUNLQUdFUyA9KyAiZTJmc3Byb2dzLWUyZnNjayBlMmZzcHJvZ3MtbWtlMmZzIGUyZnNwcm9ncy10dW5lMmZzIGUyZnNwcm9ncy1iYWRibG9ja3MgZTJmc3Byb2dzLXJlc2l6ZTJmcyIKLVBBQ0tBR0VTID0rICJsaWJjb21lcnIgbGlic3MgbGliZTJwIGxpYmV4dDJmcyIKLQotRklMRVNfZTJmc3Byb2dzLXJlc2l6ZTJmcyA9ICIke2Jhc2Vfc2JpbmRpcn0vcmVzaXplMmZzKiIKLUZJTEVTX2UyZnNwcm9ncy1lMmZzY2sgPSAiJHtiYXNlX3NiaW5kaXJ9L2UyZnNjayAke2Jhc2Vfc2JpbmRpcn0vZnNjay5leHQqIgotRklMRVNfZTJmc3Byb2dzLW1rZTJmcyA9ICIke2Jhc2Vfc2JpbmRpcn0vbWtlMmZzICR7YmFzZV9zYmluZGlyfS9ta2ZzLmV4dCogJHtzeXNjb25mZGlyfS9ta2UyZnMuY29uZiIKLUZJTEVTX2UyZnNwcm9ncy10dW5lMmZzID0gIiR7YmFzZV9zYmluZGlyfS90dW5lMmZzICR7YmFzZV9zYmluZGlyfS9lMmxhYmVsIgotRklMRVNfZTJmc3Byb2dzLWJhZGJsb2NrcyA9ICIke2Jhc2Vfc2JpbmRpcn0vYmFkYmxvY2tzIgotRklMRVNfbGliY29tZXJyID0gIiR7YmFzZV9saWJkaXJ9L2xpYmNvbV9lcnIuc28uKiIKLUZJTEVTX2xpYnNzID0gIiR7YmFzZV9saWJkaXJ9L2xpYnNzLnNvLioiCi1GSUxFU19saWJlMnAgPSAiJHtiYXNlX2xpYmRpcn0vbGliZTJwLnNvLioiCi1GSUxFU19saWJleHQyZnMgPSAiJHtsaWJkaXJ9L2UyaW5pdHJkX2hlbHBlciAke2Jhc2VfbGliZGlyfS9saWJleHQyZnMuc28uKiIKLUZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS8qLyouYXdrICR7ZGF0YWRpcn0vKi8qLnNlZCAke2Jhc2VfbGliZGlyfS8qLnNvICR7YmluZGlyfS9jb21waWxlX2V0ICR7YmluZGlyfS9ta19jbWRzIgotCi1BTFRFUk5BVElWRV8ke1BOfSA9ICJjaGF0dHIiCi1BTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbY2hhdHRyXSA9ICIke2Jhc2VfYmluZGlyfS9jaGF0dHIiCi1BTFRFUk5BVElWRV9UQVJHRVRbY2hhdHRyXSA9ICIke2Jhc2VfYmluZGlyfS9jaGF0dHIuZTJmc3Byb2dzIgotCi1BTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAiZnNjay44IgotQUxURVJOQVRJVkVfTElOS19OQU1FW2ZzY2suOF0gPSAiJHttYW5kaXJ9L21hbjgvZnNjay44IgotCi1SREVQRU5EU18ke1BOfS1wdGVzdCArPSAiJHtQTn0gJHtQTn0tdHVuZTJmcyBjb3JldXRpbHMgcHJvY3BzIGJhc2giCi0KLWRvX2NvbXBpbGVfcHRlc3QoKSB7Ci0Jb2VfcnVubWFrZSAtQyAke0J9L3Rlc3RzCi19Ci0KLWRvX2luc3RhbGxfcHRlc3QoKSB7Ci0JY3AgLWEgJHtCfS90ZXN0cyAke0R9JHtQVEVTVF9QQVRIfS90ZXN0Ci0JY3AgLWEgJHtTfS90ZXN0cy8qICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKLQlzZWQgLWUgJ3MhLi4vZTJmc2NrL2UyZnNjayFlMmZzY2shZycgLWkgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdC8qL2V4cGVjdCoKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9nc18xLjQzLjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3NfMS40My41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMDkzY2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3NfMS40My41LmJiCkBAIC0wLDAgKzEsMTE3IEBACityZXF1aXJlIGUyZnNwcm9ncy5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL2FjaW5jbHVkZS5tNCBcCisgICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLmxkY29uZmlnLmNhbGwucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3F1aWV0LWRlYnVnZnMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgICBmaWxlOi8vcHRlc3QucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL21rZGlyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9SZXZlcnQtbWtlMmZzLWVuYWJsZS10aGUtbWV0YWRhdGFfY3N1bS1hbmQtNjRiaXQtZmVhLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ta2Rpcl9wLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9yZXByb2R1Y2libGUtZG9jLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLW1pc2MtY3JlYXRlX2lub2RlLmMtc2V0LWRpci1zLW1vZGUtY29ycmVjdGx5LnBhdGNoIFwKKyIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBmaWxlOi8vZTJmc3Byb2dzLWZpeC1taXNzaW5nLWNoZWNrLWZvci1wZXJtaXNzaW9uLWRlbmllZC5wYXRjaCIKKworU1JDUkVWID0gIjJhMTNjODRiNTEzYWEwOTRkMWNkYTcyN2U5MmQzNWE4OWRkNzc3ZGEiCitVUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICJ2KD9QPHB2ZXI+XGQrXC5cZCsoXC5cZCspKikkIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tbGliZGlyPSR7YmFzZV9saWJkaXJ9IC0tc2JpbmRpcj0ke2Jhc2Vfc2JpbmRpcn0gXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWVsZi1zaGxpYnMgLS1kaXNhYmxlLWxpYnV1aWQgLS1kaXNhYmxlLXV1aWRkIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtbGliYmxraWQgLS1lbmFibGUtdmVyYm9zZS1tYWtlY21kcyIKKworRVhUUkFfT0VDT05GX2RhcndpbiA9ICItLWxpYmRpcj0ke2Jhc2VfbGliZGlyfSAtLXNiaW5kaXI9JHtiYXNlX3NiaW5kaXJ9IC0tZW5hYmxlLWJzZC1zaGxpYnMiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2Z1c2VdID0gJy0tZW5hYmxlLWZ1c2UyZnMsLS1kaXNhYmxlLWZ1c2UyZnMsZnVzZScKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCWNwICR7V09SS0RJUn0vYWNpbmNsdWRlLm00ICR7U30vCit9CisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbC1saWJzCisJIyBXZSB1c2UgYmxraWQgZnJvbSB1dGlsLWxpbnV4IG5vdyBzbyByZW1vdmUgZnJvbSBoZXJlCisJcm0gLWYgJHtEfSR7YmFzZV9saWJkaXJ9L2xpYmJsa2lkKgorCXJtIC1yZiAke0R9JHtpbmNsdWRlZGlyfS9ibGtpZAorCXJtIC1mICR7RH0ke2Jhc2VfbGliZGlyfS9wa2djb25maWcvYmxraWQucGMKKwlybSAtZiAke0R9JHtiYXNlX3NiaW5kaXJ9L2Jsa2lkCisJcm0gLWYgJHtEfSR7YmFzZV9zYmluZGlyfS9mc2NrCisJcm0gLWYgJHtEfSR7YmFzZV9zYmluZGlyfS9maW5kZnMKKworCSMgZTJpbml0cmRfaGVscGVyIGFuZCB0aGUgcGtnY29uZmlnIGZpbGVzIGJlbG9uZyBpbiBsaWJkaXIKKwlpZiBbICEgJHtEfSR7bGliZGlyfSAtZWYgJHtEfSR7YmFzZV9saWJkaXJ9IF07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9CisJCW12ICR7RH0ke2Jhc2VfbGliZGlyfS9lMmluaXRyZF9oZWxwZXIgJHtEfSR7bGliZGlyfQorCQltdiAke0R9JHtiYXNlX2xpYmRpcn0vcGtnY29uZmlnICR7RH0ke2xpYmRpcn0KKwlmaQorCisJb2VfbXVsdGlsaWJfaGVhZGVyIGV4dDJmcy9leHQyX3R5cGVzLmgKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCW12ICR7RH0ke2JpbmRpcn0vY2hhdHRyICR7RH0ke2Jhc2VfYmluZGlyfS9jaGF0dHIuZTJmc3Byb2dzCisKKwlpbnN0YWxsIC12IC1tIDc1NSAke1N9L2NvbnRyaWIvcG9wdWxhdGUtZXh0ZnMuc2ggJHtEfSR7YmFzZV9zYmluZGlyfS8KKworCSMgQ2xlYW4gaG9zdCBwYXRoIChidWlsZCBkaXJlY3RvcnkpIGluIGNvbXBpbGVfZXQsIG1rX2NtZHMKKwlzZWQgLWkgLWUgInMsXChFVF9ESVI9LipcKSR7U30vbGliL2V0XCguKlwpLFwxJHtkYXRhZGlyfS9ldFwyLGciICR7RH0ke2JpbmRpcn0vY29tcGlsZV9ldAorCXNlZCAtaSAtZSAicyxcKFNTX0RJUj0uKlwpJHtTfS9saWIvc3NcKC4qXCksXDEke2RhdGFkaXJ9L3NzXDIsZyIgJHtEfSR7YmluZGlyfS9ta19jbWRzCit9CisKKyMgTmVlZCB0byBmaW5kIHRoZSByaWdodCBta2UyZnMuY29uZiBmaWxlCitlMmZzcHJvZ3NfY29uZl9maXh1cCAoKSB7CisJZm9yIGkgaW4gbWtlMmZzIG1rZnMuZXh0MiBta2ZzLmV4dDMgbWtmcy5leHQ0OyBkbworCQljcmVhdGVfd3JhcHBlciAke0R9JHtiYXNlX3NiaW5kaXJ9LyRpIE1LRTJGU19DT05GSUc9JHtzeXNjb25mZGlyfS9ta2UyZnMuY29uZgorCWRvbmUKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWUyZnNwcm9nc19jb25mX2ZpeHVwCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKwllMmZzcHJvZ3NfY29uZl9maXh1cAorfQorCitSREVQRU5EU19lMmZzcHJvZ3MgPSAiZTJmc3Byb2dzLWJhZGJsb2NrcyIKK1JSRUNPTU1FTkRTX2UyZnNwcm9ncyA9ICJlMmZzcHJvZ3MtbWtlMmZzIGUyZnNwcm9ncy1lMmZzY2siCisKK1BBQ0tBR0VTID0rICJlMmZzcHJvZ3MtZTJmc2NrIGUyZnNwcm9ncy1ta2UyZnMgZTJmc3Byb2dzLXR1bmUyZnMgZTJmc3Byb2dzLWJhZGJsb2NrcyBlMmZzcHJvZ3MtcmVzaXplMmZzIgorUEFDS0FHRVMgPSsgImxpYmNvbWVyciBsaWJzcyBsaWJlMnAgbGliZXh0MmZzIgorCitGSUxFU19lMmZzcHJvZ3MtcmVzaXplMmZzID0gIiR7YmFzZV9zYmluZGlyfS9yZXNpemUyZnMqIgorRklMRVNfZTJmc3Byb2dzLWUyZnNjayA9ICIke2Jhc2Vfc2JpbmRpcn0vZTJmc2NrICR7YmFzZV9zYmluZGlyfS9mc2NrLmV4dCoiCitGSUxFU19lMmZzcHJvZ3MtbWtlMmZzID0gIiR7YmFzZV9zYmluZGlyfS9ta2UyZnMgJHtiYXNlX3NiaW5kaXJ9L21rZnMuZXh0KiAke3N5c2NvbmZkaXJ9L21rZTJmcy5jb25mIgorRklMRVNfZTJmc3Byb2dzLXR1bmUyZnMgPSAiJHtiYXNlX3NiaW5kaXJ9L3R1bmUyZnMgJHtiYXNlX3NiaW5kaXJ9L2UybGFiZWwiCitGSUxFU19lMmZzcHJvZ3MtYmFkYmxvY2tzID0gIiR7YmFzZV9zYmluZGlyfS9iYWRibG9ja3MiCitGSUxFU19saWJjb21lcnIgPSAiJHtiYXNlX2xpYmRpcn0vbGliY29tX2Vyci5zby4qIgorRklMRVNfbGlic3MgPSAiJHtiYXNlX2xpYmRpcn0vbGlic3Muc28uKiIKK0ZJTEVTX2xpYmUycCA9ICIke2Jhc2VfbGliZGlyfS9saWJlMnAuc28uKiIKK0ZJTEVTX2xpYmV4dDJmcyA9ICIke2xpYmRpcn0vZTJpbml0cmRfaGVscGVyICR7YmFzZV9saWJkaXJ9L2xpYmV4dDJmcy5zby4qIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9LyovKi5hd2sgJHtkYXRhZGlyfS8qLyouc2VkICR7YmFzZV9saWJkaXJ9Lyouc28gJHtiaW5kaXJ9L2NvbXBpbGVfZXQgJHtiaW5kaXJ9L21rX2NtZHMiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImNoYXR0ciIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtjaGF0dHJdID0gIiR7YmFzZV9iaW5kaXJ9L2NoYXR0ciIKK0FMVEVSTkFUSVZFX1RBUkdFVFtjaGF0dHJdID0gIiR7YmFzZV9iaW5kaXJ9L2NoYXR0ci5lMmZzcHJvZ3MiCisKK0FMVEVSTkFUSVZFXyR7UE59LWRvYyA9ICJmc2NrLjgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZnNjay44XSA9ICIke21hbmRpcn0vbWFuOC9mc2NrLjgiCisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICIke1BOfSAke1BOfS10dW5lMmZzIGNvcmV1dGlscyBwcm9jcHMgYmFzaCIKKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIC1DICR7Qn0vdGVzdHMKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwljcCAtUiAtLW5vLWRlcmVmZXJlbmNlIC0tcHJlc2VydmU9bW9kZSxsaW5rcyAtdiAke0J9L3Rlc3RzICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKKwljcCAtUiAtLW5vLWRlcmVmZXJlbmNlIC0tcHJlc2VydmU9bW9kZSxsaW5rcyAtdiAke1N9L3Rlc3RzLyogJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCXNlZCAtZSAncyEuLi9lMmZzY2svZTJmc2NrIWUyZnNjayFnJyAtaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0LyovZXhwZWN0KgorCisJIyBSZW1vdmUgdmFyaW91cyBmaWxlcworCWZpbmQgIiR7RH0ke1BURVNUX1BBVEh9IiAtdHlwZSBmIFwKKwkgICAgXCggLW5hbWUgJ01ha2VmaWxlJyAtbyAtbmFtZSAnTWFrZWZpbGUuaW4nIC1vIC1uYW1lICcqLm8nIC1vIC1uYW1lICcqLmMnIC1vIC1uYW1lICcqLmgnIFwpXAorCSAgICAtZXhlYyAgcm0gLWYge30gKworfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2OC8wMDAxLWJ1aWxkLVByb3ZpZGUtYWx0ZXJuYXRpdmVzLWZvci1nbGliYy1hc3N1bXB0aW9ucy1oZWwucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY4LzAwMDEtYnVpbGQtUHJvdmlkZS1hbHRlcm5hdGl2ZXMtZm9yLWdsaWJjLWFzc3VtcHRpb25zLWhlbC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIwZmZhMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY4LzAwMDEtYnVpbGQtUHJvdmlkZS1hbHRlcm5hdGl2ZXMtZm9yLWdsaWJjLWFzc3VtcHRpb25zLWhlbC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNTEgKzAsMCBAQAotRnJvbSAwNTRmZWRkYTVhYjliODQxNjBkNDBkOTBjYjk2N2YyZjU4MjJiODg5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFRodSwgMzEgRGVjIDIwMTUgMDY6MzU6MzQgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gYnVpbGQ6IFByb3ZpZGUgYWx0ZXJuYXRpdmVzIGZvciBnbGliYyBhc3N1bXB0aW9ucyBoZWxwcwotIGNvbXBpbGluZyBpdCBvbiBtdXNsCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotUmViYXNlIHRvIDAuNjgKLVNpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KLS0tLQotIE1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBsaWIvY29sb3IuYyAgICAgICAgICAgICAgICAgICAgICB8ICAzICsrLQotIGxpYi9jcmMzMl9maWxlLmMgICAgICAgICAgICAgICAgIHwgIDEgKwotIGxpYi9maXhlZHNpemVoYXNoLmggICAgICAgICAgICAgIHwgIDEgLQotIGxpYi9zeXN0ZW0uaCAgICAgICAgICAgICAgICAgICAgIHwgMTAgKysrKysrKysrKwotIGxpYi94bWFsbG9jLmMgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBsaWJhc20vYXNtX2VuZC5jICAgICAgICAgICAgICAgICB8ICAyICstCi0gbGliYXNtL2FzbV9uZXdzY24uYyAgICAgICAgICAgICAgfCAgMiArLQotIGxpYmNwdS9pMzg2X2dlbmRpcy5jICAgICAgICAgICAgIHwgIDIgKy0KLSBsaWJjcHUvaTM4Nl9sZXguYyAgICAgICAgICAgICAgICB8ICAyICstCi0gbGliY3B1L2kzODZfcGFyc2UuYyAgICAgICAgICAgICAgfCAgMiArLQotIGxpYmR3L01ha2VmaWxlLmFtICAgICAgICAgICAgICAgIHwgIDQgKysrLQotIGxpYmR3L2xpYmR3X2FsbG9jLmMgICAgICAgICAgICAgIHwgIDIgKy0KLSBsaWJkd2ZsL2R3ZmxfYnVpbGRfaWRfZmluZF9lbGYuYyB8ICAzICsrLQotIGxpYmR3ZmwvZHdmbF9lcnJvci5jICAgICAgICAgICAgIHwgIDQgKysrLQotIGxpYmR3ZmwvZHdmbF9tb2R1bGVfZ2V0ZHdhcmYuYyAgIHwgIDEgKwotIGxpYmR3ZmwvZmluZC1kZWJ1Z2luZm8uYyAgICAgICAgIHwgIDIgKy0KLSBsaWJkd2ZsL2xpYmR3ZmxfY3JjMzJfZmlsZS5jICAgICB8IDEwICsrKysrKysrKysKLSBsaWJkd2ZsL2xpbnV4LWtlcm5lbC1tb2R1bGVzLmMgICB8ICAxICsKLSBsaWJlYmwvZWJsb3BlbmJhY2tlbmQuYyAgICAgICAgICB8ICAyICstCi0gbGliZWxmL2VsZi5oICAgICAgICAgICAgICAgICAgICAgfCAgOCArKysrKystLQotIGxpYmVsZi9saWJlbGYuaCAgICAgICAgICAgICAgICAgIHwgIDEgKwotIGxpYmVsZi9saWJlbGZQLmggICAgICAgICAgICAgICAgIHwgIDEgKwotIHNyYy9hZGRyMmxpbmUuYyAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBzcmMvYXIuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCi0gc3JjL2FybGliLmMgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHNyYy9hcmxpYjIuYyAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBzcmMvZWxmY21wLmMgICAgICAgICAgICAgICAgICAgICB8ICAyICstCi0gc3JjL2VsZmxpbnQuYyAgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHNyYy9maW5kdGV4dHJlbC5jICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBzcmMvbm0uYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCi0gc3JjL29iamR1bXAuYyAgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHNyYy9yYW5saWIuYyAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBzcmMvcmVhZGVsZi5jICAgICAgICAgICAgICAgICAgICB8ICAyICstCi0gc3JjL3NpemUuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHNyYy9zdGFjay5jICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBzcmMvc3RyaW5ncy5jICAgICAgICAgICAgICAgICAgICB8ICAyICstCi0gc3JjL3N0cmlwLmMgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHNyYy91bnN0cmlwLmMgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9hZGRyc2NvcGVzLmMgICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdHMvYWxscmVncy5jICAgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2JhY2t0cmFjZS1kYXRhLmMgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9iYWNrdHJhY2UtZHdhcmYuYyAgICAgICAgICB8ICAyICstCi0gdGVzdHMvYmFja3RyYWNlLmMgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2J1aWxkaWQuYyAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9kZWJ1Z2FsdGxpbmsuYyAgICAgICAgICAgICB8ICAyICstCi0gdGVzdHMvZGVidWdsaW5rLmMgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2RlbGV0ZWQuYyAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9kd2ZsLWFkZHItc2VjdC5jICAgICAgICAgICB8ICAyICstCi0gdGVzdHMvZHdmbC1idWctYWRkci1vdmVyZmxvdy5jICAgfCAgMiArLQotIHRlc3RzL2R3ZmwtYnVnLWZkLWxlYWsuYyAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9kd2ZsLWJ1Zy1nZXRtb2R1bGVzLmMgICAgICB8ICAyICstCi0gdGVzdHMvZHdmbC1yZXBvcnQtZWxmLWFsaWduLmMgICAgfCAgMiArLQotIHRlc3RzL2R3ZmxsaW5lcy5jICAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9kd2ZsbW9kdGVzdC5jICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdHMvZHdmbHN5bXMuYyAgICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2Vhcmx5LW9mZnNjbi5jICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9lY3AuYyAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdHMvZmluZC1wcm9sb2d1ZXMuYyAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2Z1bmNyZXR2YWwuYyAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9mdW5jc2NvcGVzLmMgICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdHMvZ2V0c3JjX2RpZS5jICAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL2xpbmUyYWRkci5jICAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9sb3dfaGlnaF9wYy5jICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdHMvbWQ1LXNoYTEtdGVzdC5jICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL3Jkd3JtbWFwLmMgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy9zYXJpZHguYyAgICAgICAgICAgICAgICAgICB8ICAyICstCi0gdGVzdHMvc2VjdGlvbmR1bXAuYyAgICAgICAgICAgICAgfCAgMiArLQotIHRlc3RzL3ZhcmxvY3MuYyAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSB0ZXN0cy92ZHNvc3ltcy5jICAgICAgICAgICAgICAgICB8ICAyICstCi0gNzAgZmlsZXMgY2hhbmdlZCwgOTggaW5zZXJ0aW9ucygrKSwgNjQgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCi1pbmRleCAyZmY0NDRlLi40MWY3N2RmIDEwMDY0NAotLS0tIGEvTWFrZWZpbGUuYW0KLSsrKyBiL01ha2VmaWxlLmFtCi1AQCAtMjgsNyArMjgsNyBAQCBwa2dpbmNsdWRlX0hFQURFUlMgPSB2ZXJzaW9uLmgKLSAKLSAjIEFkZCBkb2MgYmFjayB3aGVuIHdlIGhhdmUgc29tZSByZWFsIGNvbnRlbnQuCi0gU1VCRElSUyA9IGNvbmZpZyBtNCBsaWIgbGliZWxmIGxpYmVibCBsaWJkd2VsZiBsaWJkd2ZsIGxpYmR3IGxpYmNwdSBsaWJhc20gXAotLQkgIGJhY2tlbmRzIHNyYyBwbyB0ZXN0cwotKwkgIGJhY2tlbmRzIHBvIHRlc3RzCi0gCi0gRVhUUkFfRElTVCA9IGVsZnV0aWxzLnNwZWMgR1BHLUtFWSBOT1RFUyBDT05UUklCVVRJTkcgXAotIAkgICAgIENPUFlJTkcgQ09QWUlORy1HUExWMiBDT1BZSU5HLUxHUExWMwotZGlmZiAtLWdpdCBhL2xpYi9jb2xvci5jIGIvbGliL2NvbG9yLmMKLWluZGV4IGZkZTJkOWQuLjczMjkyYWMgMTAwNjQ0Ci0tLS0gYS9saWIvY29sb3IuYwotKysrIGIvbGliL2NvbG9yLmMKLUBAIC0zMiwxMiArMzIsMTMgQEAKLSAjZW5kaWYKLSAKLSAjaW5jbHVkZSA8YXJncC5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8bGliaW50bC5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotICNpbmNsdWRlICJsaWJldS5oIgotKyNpbmNsdWRlICJzeXN0ZW0uaCIKLSAKLSAKLSAvKiBQcm90b3R5cGUgZm9yIG9wdGlvbiBoYW5kbGVyLiAgKi8KLWRpZmYgLS1naXQgYS9saWIvY3JjMzJfZmlsZS5jIGIvbGliL2NyYzMyX2ZpbGUuYwotaW5kZXggYTg0MzRkNC4uNTdlNDI5OCAxMDA2NDQKLS0tLSBhL2xpYi9jcmMzMl9maWxlLmMKLSsrKyBiL2xpYi9jcmMzMl9maWxlLmMKLUBAIC0zNSw2ICszNSw3IEBACi0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotICNpbmNsdWRlIDxzeXMvc3RhdC5oPgotICNpbmNsdWRlIDxzeXMvbW1hbi5oPgotKyNpbmNsdWRlICJzeXN0ZW0uaCIKLSAKLSBpbnQKLSBjcmMzMl9maWxlIChpbnQgZmQsIHVpbnQzMl90ICpyZXNwKQotZGlmZiAtLWdpdCBhL2xpYi9maXhlZHNpemVoYXNoLmggYi9saWIvZml4ZWRzaXplaGFzaC5oCi1pbmRleCBkYWMyYTVmLi40MzAxNmZjIDEwMDY0NAotLS0tIGEvbGliL2ZpeGVkc2l6ZWhhc2guaAotKysrIGIvbGliL2ZpeGVkc2l6ZWhhc2guaAotQEAgLTMwLDcgKzMwLDYgQEAKLSAjaW5jbHVkZSA8ZXJybm8uaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSAKLSAjaW5jbHVkZSA8c3lzdGVtLmg+Ci0gCi1kaWZmIC0tZ2l0IGEvbGliL3N5c3RlbS5oIGIvbGliL3N5c3RlbS5oCi1pbmRleCBjY2Q5OWQ2Li4wZTkzZTYwIDEwMDY0NAotLS0tIGEvbGliL3N5c3RlbS5oCi0rKysgYi9saWIvc3lzdGVtLmgKLUBAIC01NSw2ICs1NSwxNiBAQAotICNlbHNlCi0gIyBlcnJvciAiVW5rbm93biBieXRlIG9yZGVyIgotICNlbmRpZgotKyNpZm5kZWYgVEVNUF9GQUlMVVJFX1JFVFJZCi0rI2RlZmluZSBURU1QX0ZBSUxVUkVfUkVUUlkoZXhwcmVzc2lvbikgXAotKyAgKF9fZXh0ZW5zaW9uX18JCQkJCQkJICAgICAgXAotKyAgICAoeyBsb25nIGludCBfX3Jlc3VsdDsJCQkJCQkgICAgICBcCi0rICAgICAgIGRvIF9fcmVzdWx0ID0gKGxvbmcgaW50KSAoZXhwcmVzc2lvbik7CQkJCSAgICAgIFwKLSsgICAgICAgd2hpbGUgKF9fcmVzdWx0ID09IC0xTCAmJiBlcnJubyA9PSBFSU5UUik7CQkJICAgICAgXAotKyAgICAgICBfX3Jlc3VsdDsgfSkpCi0rI2VuZGlmCi0rCi0rI2RlZmluZSBlcnJvcihzdGF0dXMsIGVycm5vLCAuLi4pIGVycihzdGF0dXMsIF9fVkFfQVJHU19fKQotIAotICNpZm5kZWYgTUFYCi0gI2RlZmluZSBNQVgobSwgbikgKChtKSA8IChuKSA/IChuKSA6IChtKSkKLWRpZmYgLS1naXQgYS9saWIveG1hbGxvYy5jIGIvbGliL3htYWxsb2MuYwotaW5kZXggMGNkZTM4NC4uMjE3YjA1NCAxMDA2NDQKLS0tLSBhL2xpYi94bWFsbG9jLmMKLSsrKyBiL2xpYi94bWFsbG9jLmMKLUBAIC0zMCw3ICszMCw3IEBACi0gIyBpbmNsdWRlIDxjb25maWcuaD4KLSAjZW5kaWYKLSAKLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGxpYmludGwuaD4KLSAjaW5jbHVkZSA8c3RkZGVmLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotZGlmZiAtLWdpdCBhL2xpYmFzbS9hc21fZW5kLmMgYi9saWJhc20vYXNtX2VuZC5jCi1pbmRleCAxOTFhNTM1Li5iZjVhYjA2IDEwMDY0NAotLS0tIGEvbGliYXNtL2FzbV9lbmQuYwotKysrIGIvbGliYXNtL2FzbV9lbmQuYwotQEAgLTMyLDcgKzMyLDcgQEAKLSAjZW5kaWYKLSAKLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxsaWJpbnRsLmg+Ci0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotZGlmZiAtLWdpdCBhL2xpYmFzbS9hc21fbmV3c2NuLmMgYi9saWJhc20vYXNtX25ld3Njbi5jCi1pbmRleCBkZGJiMjVkLi43NGE1OThkIDEwMDY0NAotLS0tIGEvbGliYXNtL2FzbV9uZXdzY24uYwotKysrIGIvbGliYXNtL2FzbV9uZXdzY24uYwotQEAgLTMyLDcgKzMyLDcgQEAKLSAjZW5kaWYKLSAKLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxsaWJpbnRsLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLWRpZmYgLS1naXQgYS9saWJjcHUvaTM4Nl9nZW5kaXMuYyBiL2xpYmNwdS9pMzg2X2dlbmRpcy5jCi1pbmRleCBhYWU1ZWFlLi42ZDc2MDE2IDEwMDY0NAotLS0tIGEvbGliY3B1L2kzODZfZ2VuZGlzLmMKLSsrKyBiL2xpYmNwdS9pMzg2X2dlbmRpcy5jCi1AQCAtMzEsNyArMzEsNyBAQAotICMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gI2VuZGlmCi0gCi0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxlcnJuby5oPgotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLWRpZmYgLS1naXQgYS9saWJjcHUvaTM4Nl9sZXguYyBiL2xpYmNwdS9pMzg2X2xleC5jCi1pbmRleCBiNjcwNjA4Li5iODQyYzI1IDEwMDY0NAotLS0tIGEvbGliY3B1L2kzODZfbGV4LmMKLSsrKyBiL2xpYmNwdS9pMzg2X2xleC5jCi1AQCAtNTkyLDcgKzU5Miw3IEBAIGNoYXIgKmkzODZfdGV4dDsKLSAjZW5kaWYKLSAKLSAjaW5jbHVkZSA8Y3R5cGUuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGxpYmludGwuaD4KLSAKLSAjaW5jbHVkZSA8bGliZXUuaD4KLWRpZmYgLS1naXQgYS9saWJjcHUvaTM4Nl9wYXJzZS5jIGIvbGliY3B1L2kzODZfcGFyc2UuYwotaW5kZXggNzI0YWRkZi4uNWI2NzgwMiAxMDA2NDQKLS0tLSBhL2xpYmNwdS9pMzg2X3BhcnNlLmMKLSsrKyBiL2xpYmNwdS9pMzg2X3BhcnNlLmMKLUBAIC0xMDcsNyArMTA3LDcgQEAKLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0gI2luY2x1ZGUgPGN0eXBlLmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxpbnR0eXBlcy5oPgotICNpbmNsdWRlIDxsaWJpbnRsLmg+Ci0gI2luY2x1ZGUgPG1hdGguaD4KLWRpZmYgLS1naXQgYS9saWJkdy9NYWtlZmlsZS5hbSBiL2xpYmR3L01ha2VmaWxlLmFtCi1pbmRleCAwODJkOTZjLi41MWNiZWEwIDEwMDY0NAotLS0tIGEvbGliZHcvTWFrZWZpbGUuYW0KLSsrKyBiL2xpYmR3L01ha2VmaWxlLmFtCi1AQCAtMTAyLDYgKzEwMiw4IEBAIGVuZGlmCi0gbGliZHdfcGljX2FfU09VUkNFUyA9Ci0gYW1fbGliZHdfcGljX2FfT0JKRUNUUyA9ICQobGliZHdfYV9TT1VSQ0VTOi5jPS5vcykKLSAKLStmdHNfTERBREQgPSAtbGZ0cwotKwotIGxpYmR3X3NvX1NPVVJDRVMgPQotIGxpYmR3LnNvJChFWEVFWFQpOiAkKHNyY2RpcikvbGliZHcubWFwIGxpYmR3X3BpYy5hIC4uL2xpYmR3ZWxmL2xpYmR3ZWxmX3BpYy5hIFwKLSAJICAuLi9saWJkd2ZsL2xpYmR3ZmxfcGljLmEgLi4vbGliZWJsL2xpYmVibC5hIFwKLUBAIC0xMTIsNyArMTE0LDcgQEAgbGliZHcuc28kKEVYRUVYVCk6ICQoc3JjZGlyKS9saWJkdy5tYXAgbGliZHdfcGljLmEgLi4vbGliZHdlbGYvbGliZHdlbGZfcGljLmEgXAotIAkJLVdsLC0tZW5hYmxlLW5ldy1kdGFncywtcnBhdGgsJChwa2dsaWJkaXIpIFwKLSAJCS1XbCwtLXZlcnNpb24tc2NyaXB0LCQ8LC0tbm8tdW5kZWZpbmVkIFwKLSAJCS1XbCwtLXdob2xlLWFyY2hpdmUgJChmaWx0ZXItb3V0ICQ8LCReKSAtV2wsLS1uby13aG9sZS1hcmNoaXZlXAotLQkJLWxkbCAtbHogJChhcmdwX0xEQUREKSAkKHppcF9MSUJTKQotKwkJLWxkbCAtbHogJChhcmdwX0xEQUREKSAkKHppcF9MSUJTKSAkKGZ0c19MREFERCkKLSAJQCQodGV4dHJlbF9jaGVjaykKLSAJJChBTV9WX2F0KWxuIC1mcyAkQCAkQC4kKFZFUlNJT04pCi0gCi1kaWZmIC0tZ2l0IGEvbGliZHcvbGliZHdfYWxsb2MuYyBiL2xpYmR3L2xpYmR3X2FsbG9jLmMKLWluZGV4IDI4YThjZjYuLjI5YWViM2YgMTAwNjQ0Ci0tLS0gYS9saWJkdy9saWJkd19hbGxvYy5jCi0rKysgYi9saWJkdy9saWJkd19hbGxvYy5jCi1AQCAtMzEsNyArMzEsNyBAQAotICMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0gI2VuZGlmCi0gCi0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxlcnJuby5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSAibGliZHdQLmgiCi1kaWZmIC0tZ2l0IGEvbGliZHdmbC9kd2ZsX2J1aWxkX2lkX2ZpbmRfZWxmLmMgYi9saWJkd2ZsL2R3ZmxfYnVpbGRfaWRfZmluZF9lbGYuYwotaW5kZXggOTAzZTE5My4uYjAwZDEwYyAxMDA2NDQKLS0tLSBhL2xpYmR3ZmwvZHdmbF9idWlsZF9pZF9maW5kX2VsZi5jCi0rKysgYi9saWJkd2ZsL2R3ZmxfYnVpbGRfaWRfZmluZF9lbGYuYwotQEAgLTI3LDYgKzI3LDcgQEAKLSAgICBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotIAotICNpbmNsdWRlICJsaWJkd2ZsUC5oIgotKyNpbmNsdWRlICJzeXN0ZW0uaCIKLSAjaW5jbHVkZSA8aW50dHlwZXMuaD4KLSAjaW5jbHVkZSA8ZmNudGwuaD4KLSAjaW5jbHVkZSA8dW5pc3RkLmg+Ci1AQCAtOTQsNyArOTUsNyBAQCBfX2xpYmR3Zmxfb3Blbl9ieV9idWlsZF9pZCAoRHdmbF9Nb2R1bGUgKm1vZCwgYm9vbCBkZWJ1ZywgY2hhciAqKmZpbGVfbmFtZSwKLSAJewotIAkgIGlmICgqZmlsZV9uYW1lICE9IE5VTEwpCi0gCSAgICBmcmVlICgqZmlsZV9uYW1lKTsKLS0JICAqZmlsZV9uYW1lID0gY2Fub25pY2FsaXplX2ZpbGVfbmFtZSAobmFtZSk7Ci0rCSAgKmZpbGVfbmFtZSA9IHJlYWxwYXRoIChuYW1lLCBOVUxMKTsKLSAJICBpZiAoKmZpbGVfbmFtZSA9PSBOVUxMKQotIAkgICAgewotIAkgICAgICAqZmlsZV9uYW1lID0gbmFtZTsKLWRpZmYgLS1naXQgYS9saWJkd2ZsL2R3ZmxfZXJyb3IuYyBiL2xpYmR3ZmwvZHdmbF9lcnJvci5jCi1pbmRleCA3YmNmNjFjLi5jMzQ1Nzk3IDEwMDY0NAotLS0tIGEvbGliZHdmbC9kd2ZsX2Vycm9yLmMKLSsrKyBiL2xpYmR3ZmwvZHdmbF9lcnJvci5jCi1AQCAtMTQwLDYgKzE0MCw3IEBAIF9fbGliZHdmbF9zZXRlcnJubyAoRHdmbF9FcnJvciBlcnJvcikKLSBjb25zdCBjaGFyICoKLSBkd2ZsX2Vycm1zZyAoaW50IGVycm9yKQotIHsKLSsgIHN0YXRpYyBfX3RocmVhZCBjaGFyIHNbNjRdID0gIiI7Ci0gICBpZiAoZXJyb3IgPT0gMCB8fCBlcnJvciA9PSAtMSkKLSAgICAgewotICAgICAgIGludCBsYXN0X2Vycm9yID0gZ2xvYmFsX2Vycm9yOwotQEAgLTE1NCw3ICsxNTUsOCBAQCBkd2ZsX2Vycm1zZyAoaW50IGVycm9yKQotICAgc3dpdGNoIChlcnJvciAmfiAweGZmZmYpCi0gICAgIHsKLSAgICAgY2FzZSBPVEhFUl9FUlJPUiAoRVJSTk8pOgotLSAgICAgIHJldHVybiBzdHJlcnJvcl9yIChlcnJvciAmIDB4ZmZmZiwgImJhZCIsIDApOwotKyAgICAgIHN0cmVycm9yX3IgKGVycm9yICYgMHhmZmZmLCBzLCBzaXplb2YocykpOwotKyAgICAgIHJldHVybiBzOwotICAgICBjYXNlIE9USEVSX0VSUk9SIChMSUJFTEYpOgotICAgICAgIHJldHVybiBlbGZfZXJybXNnIChlcnJvciAmIDB4ZmZmZik7Ci0gICAgIGNhc2UgT1RIRVJfRVJST1IgKExJQkRXKToKLWRpZmYgLS1naXQgYS9saWJkd2ZsL2R3ZmxfbW9kdWxlX2dldGR3YXJmLmMgYi9saWJkd2ZsL2R3ZmxfbW9kdWxlX2dldGR3YXJmLmMKLWluZGV4IDBlODgxMGIuLjgyYWQ2NjUgMTAwNjQ0Ci0tLS0gYS9saWJkd2ZsL2R3ZmxfbW9kdWxlX2dldGR3YXJmLmMKLSsrKyBiL2xpYmR3ZmwvZHdmbF9tb2R1bGVfZ2V0ZHdhcmYuYwotQEAgLTMxLDYgKzMxLDcgQEAKLSAjaW5jbHVkZSA8ZmNudGwuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotKyNpbmNsdWRlICJzeXN0ZW0uaCIKLSAjaW5jbHVkZSAiLi4vbGliZHcvbGliZHdQLmgiCS8qIERXQVJGX0VfKiB2YWx1ZXMgYXJlIGhlcmUuICAqLwotICNpbmNsdWRlICIuLi9saWJlbGYvbGliZWxmUC5oIgotIAotZGlmZiAtLWdpdCBhL2xpYmR3ZmwvZmluZC1kZWJ1Z2luZm8uYyBiL2xpYmR3ZmwvZmluZC1kZWJ1Z2luZm8uYwotaW5kZXggODA1MTVkYi4uODBiMDE0OCAxMDA2NDQKLS0tLSBhL2xpYmR3ZmwvZmluZC1kZWJ1Z2luZm8uYwotKysrIGIvbGliZHdmbC9maW5kLWRlYnVnaW5mby5jCi1AQCAtMzg1LDcgKzM4NSw3IEBAIGR3Zmxfc3RhbmRhcmRfZmluZF9kZWJ1Z2luZm8gKER3ZmxfTW9kdWxlICptb2QsCi0gICAgICAgLyogSWYgRklMRV9OQU1FIGlzIGEgc3ltbGluaywgdGhlIGRlYnVnIGZpbGUgbWlnaHQgYmUgYXNzb2NpYXRlZAotIAkgd2l0aCB0aGUgc3ltbGluayB0YXJnZXQgbmFtZSBpbnN0ZWFkLiAgKi8KLSAKLS0gICAgICBjaGFyICpjYW5vbiA9IGNhbm9uaWNhbGl6ZV9maWxlX25hbWUgKGZpbGVfbmFtZSk7Ci0rICAgICAgY2hhciAqY2Fub24gPSByZWFscGF0aCAoZmlsZV9uYW1lLCBOVUxMKTsKLSAgICAgICBpZiAoY2Fub24gIT0gTlVMTCAmJiBzdHJjbXAgKGZpbGVfbmFtZSwgY2Fub24pKQotIAlmZCA9IGZpbmRfZGVidWdpbmZvX2luX3BhdGggKG1vZCwgY2Fub24sCi0gCQkJCSAgICAgZGVidWdsaW5rX2ZpbGUsIGRlYnVnbGlua19jcmMsCi1kaWZmIC0tZ2l0IGEvbGliZHdmbC9saWJkd2ZsX2NyYzMyX2ZpbGUuYyBiL2xpYmR3ZmwvbGliZHdmbF9jcmMzMl9maWxlLmMKLWluZGV4IDZiNmI3ZDMuLmRlYmM0YTQgMTAwNjQ0Ci0tLS0gYS9saWJkd2ZsL2xpYmR3ZmxfY3JjMzJfZmlsZS5jCi0rKysgYi9saWJkd2ZsL2xpYmR3ZmxfY3JjMzJfZmlsZS5jCi1AQCAtMzEsNiArMzEsMTYgQEAKLSAKLSAjZGVmaW5lIGNyYzMyX2ZpbGUgYXR0cmlidXRlX2hpZGRlbiBfX2xpYmR3ZmxfY3JjMzJfZmlsZQotICNkZWZpbmUgY3JjMzIgX19saWJkd2ZsX2NyYzMyCi0rCi0rI2lmbmRlZiBURU1QX0ZBSUxVUkVfUkVUUlkKLSsjZGVmaW5lIFRFTVBfRkFJTFVSRV9SRVRSWShleHByZXNzaW9uKSBcCi0rICAoX19leHRlbnNpb25fXwkJCQkJCQkgICAgICBcCi0rICAgICh7IGxvbmcgaW50IF9fcmVzdWx0OwkJCQkJCSAgICAgIFwKLSsgICAgICAgZG8gX19yZXN1bHQgPSAobG9uZyBpbnQpIChleHByZXNzaW9uKTsJCQkJICAgICAgXAotKyAgICAgICB3aGlsZSAoX19yZXN1bHQgPT0gLTFMICYmIGVycm5vID09IEVJTlRSKTsJCQkgICAgICBcCi0rICAgICAgIF9fcmVzdWx0OyB9KSkKLSsjZW5kaWYKLSsKLSAjZGVmaW5lIExJQl9TWVNURU1fSAkxCi0gI2luY2x1ZGUgPGxpYmR3ZmxQLmg+Ci0gI2luY2x1ZGUgIi4uL2xpYi9jcmMzMl9maWxlLmMiCi1kaWZmIC0tZ2l0IGEvbGliZHdmbC9saW51eC1rZXJuZWwtbW9kdWxlcy5jIGIvbGliZHdmbC9saW51eC1rZXJuZWwtbW9kdWxlcy5jCi1pbmRleCA5Y2Q4ZWE5Li40ZGJmNGM1IDEwMDY0NAotLS0tIGEvbGliZHdmbC9saW51eC1rZXJuZWwtbW9kdWxlcy5jCi0rKysgYi9saWJkd2ZsL2xpbnV4LWtlcm5lbC1tb2R1bGVzLmMKLUBAIC0zNiw2ICszNiw3IEBACi0gI2luY2x1ZGUgPGNvbmZpZy5oPgotIAotICNpbmNsdWRlICJsaWJkd2ZsUC5oIgotKyNpbmNsdWRlICJzeXN0ZW0uaCIKLSAjaW5jbHVkZSA8aW50dHlwZXMuaD4KLSAjaW5jbHVkZSA8ZXJybm8uaD4KLSAjaW5jbHVkZSA8c3RkaW8uaD4KLWRpZmYgLS1naXQgYS9saWJlYmwvZWJsb3BlbmJhY2tlbmQuYyBiL2xpYmVibC9lYmxvcGVuYmFja2VuZC5jCi1pbmRleCAzNGQ0MzlhLi41NmQyMzQ1IDEwMDY0NAotLS0tIGEvbGliZWJsL2VibG9wZW5iYWNrZW5kLmMKLSsrKyBiL2xpYmVibC9lYmxvcGVuYmFja2VuZC5jCi1AQCAtMzIsNyArMzIsNyBAQAotIAotICNpbmNsdWRlIDxhc3NlcnQuaD4KLSAjaW5jbHVkZSA8ZGxmY24uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGxpYmVsZlAuaD4KLSAjaW5jbHVkZSA8ZHdhcmYuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci1kaWZmIC0tZ2l0IGEvbGliZWxmL2VsZi5oIGIvbGliZWxmL2VsZi5oCi1pbmRleCA3NDY1NGQ2Li44MWVlZThiIDEwMDY0NAotLS0tIGEvbGliZWxmL2VsZi5oCi0rKysgYi9saWJlbGYvZWxmLmgKLUBAIC0yMSw3ICsyMSw5IEBACi0gCi0gI2luY2x1ZGUgPGZlYXR1cmVzLmg+Ci0gCi0tX19CRUdJTl9ERUNMUwotKyNpZmRlZiBfX2NwbHVzcGx1cwotK2V4dGVybiAiQyIgewotKyNlbmRpZgotIAotIC8qIFN0YW5kYXJkIEVMRiB0eXBlcy4gICovCi0gCi1AQCAtMzcwNCw2ICszNzA2LDggQEAgZW51bQotICNkZWZpbmUgUl9CUEZfTk9ORQkJMAkvKiBObyByZWxvYyAqLwotICNkZWZpbmUgUl9CUEZfTUFQX0ZECQkxCS8qIE1hcCBmZCB0byBwb2ludGVyICovCi0gCi0tX19FTkRfREVDTFMKLSsjaWZkZWYgX19jcGx1c3BsdXMKLSt9Ci0rI2VuZGlmCi0gCi0gI2VuZGlmCS8qIGVsZi5oICovCi1kaWZmIC0tZ2l0IGEvbGliZWxmL2xpYmVsZi5oIGIvbGliZWxmL2xpYmVsZi5oCi1pbmRleCBjMGQ2Mzg5Li4zOGE2OGZkIDEwMDY0NAotLS0tIGEvbGliZWxmL2xpYmVsZi5oCi0rKysgYi9saWJlbGYvbGliZWxmLmgKLUBAIC0yOSw2ICsyOSw3IEBACi0gI2lmbmRlZiBfTElCRUxGX0gKLSAjZGVmaW5lIF9MSUJFTEZfSCAxCi0gCi0rI2luY2x1ZGUgPGZjbnRsLmg+Ci0gI2luY2x1ZGUgPHN0ZGludC5oPgotICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSAKLWRpZmYgLS1naXQgYS9saWJlbGYvbGliZWxmUC5oIGIvbGliZWxmL2xpYmVsZlAuaAotaW5kZXggNDQ1OTk4Mi4uMTI5NmYyMCAxMDA2NDQKLS0tLSBhL2xpYmVsZi9saWJlbGZQLmgKLSsrKyBiL2xpYmVsZi9saWJlbGZQLmgKLUBAIC0zNiw2ICszNiw3IEBACi0gCi0gI2luY2x1ZGUgPGFyLmg+Ci0gI2luY2x1ZGUgPGdlbGYuaD4KLSsjaW5jbHVkZSA8bGliZWxmLmg+Ci0gCi0gI2luY2x1ZGUgPGVycm5vLmg+Ci0gI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLWRpZmYgLS1naXQgYS9zcmMvYWRkcjJsaW5lLmMgYi9zcmMvYWRkcjJsaW5lLmMKLWluZGV4IDAyMjIwODguLmNkNmE5YTYgMTAwNjQ0Ci0tLS0gYS9zcmMvYWRkcjJsaW5lLmMKLSsrKyBiL3NyYy9hZGRyMmxpbmUuYwotQEAgLTIzLDcgKzIzLDcgQEAKLSAjaW5jbHVkZSA8YXJncC5oPgotICNpbmNsdWRlIDxhc3NlcnQuaD4KLSAjaW5jbHVkZSA8ZXJybm8uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGZjbnRsLmg+Ci0gI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0gI2luY2x1ZGUgPGxpYmR3ZmwuaD4KLWRpZmYgLS1naXQgYS9zcmMvYXIuYyBiL3NyYy9hci5jCi1pbmRleCBmMmYzMjJiLi42ZTcwMDMxIDEwMDY0NAotLS0tIGEvc3JjL2FyLmMKLSsrKyBiL3NyYy9hci5jCi1AQCAtMjIsNyArMjIsNyBAQAotIAotICNpbmNsdWRlIDxhcmdwLmg+Ci0gI2luY2x1ZGUgPGFzc2VydC5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8ZmNudGwuaD4KLSAjaW5jbHVkZSA8Z2VsZi5oPgotICNpbmNsdWRlIDxsaWJpbnRsLmg+Ci1kaWZmIC0tZ2l0IGEvc3JjL2FybGliLmMgYi9zcmMvYXJsaWIuYwotaW5kZXggZTA4MzlhYS4uMTE0MzY1OCAxMDA2NDQKLS0tLSBhL3NyYy9hcmxpYi5jCi0rKysgYi9zcmMvYXJsaWIuYwotQEAgLTIxLDcgKzIxLDcgQEAKLSAjZW5kaWYKLSAKLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxnZWxmLmg+Ci0gI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0gI2luY2x1ZGUgPGxpYmludGwuaD4KLWRpZmYgLS1naXQgYS9zcmMvYXJsaWIyLmMgYi9zcmMvYXJsaWIyLmMKLWluZGV4IDU1M2ZjNTcuLjQ2NDQzZDAgMTAwNjQ0Ci0tLS0gYS9zcmMvYXJsaWIyLmMKLSsrKyBiL3NyYy9hcmxpYjIuYwotQEAgLTIwLDcgKzIwLDcgQEAKLSAjIGluY2x1ZGUgPGNvbmZpZy5oPgotICNlbmRpZgotIAotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8bGliaW50bC5oPgotICNpbmNsdWRlIDxsaW1pdHMuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci1kaWZmIC0tZ2l0IGEvc3JjL2VsZmNtcC5jIGIvc3JjL2VsZmNtcC5jCi1pbmRleCA0MDFhYjMxLi44NzNkMjUzIDEwMDY0NAotLS0tIGEvc3JjL2VsZmNtcC5jCi0rKysgYi9zcmMvZWxmY21wLmMKLUBAIC0yMyw3ICsyMyw3IEBACi0gI2luY2x1ZGUgPGFyZ3AuaD4KLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxsb2NhbGUuaD4KLSAjaW5jbHVkZSA8bGliaW50bC5oPgotZGlmZiAtLWdpdCBhL3NyYy9lbGZsaW50LmMgYi9zcmMvZWxmbGludC5jCi1pbmRleCA3ZDNmMjI3Li4wNzRkMjFjIDEwMDY0NAotLS0tIGEvc3JjL2VsZmxpbnQuYwotKysrIGIvc3JjL2VsZmxpbnQuYwotQEAgLTI0LDcgKzI0LDcgQEAKLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0gI2luY2x1ZGUgPGJ5dGVzd2FwLmg+Ci0gI2luY2x1ZGUgPGVuZGlhbi5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8ZmNudGwuaD4KLSAjaW5jbHVkZSA8Z2VsZi5oPgotICNpbmNsdWRlIDxpbnR0eXBlcy5oPgotZGlmZiAtLWdpdCBhL3NyYy9maW5kdGV4dHJlbC5jIGIvc3JjL2ZpbmR0ZXh0cmVsLmMKLWluZGV4IGRjNDE1MDIuLjMyNTg4OGMgMTAwNjQ0Ci0tLS0gYS9zcmMvZmluZHRleHRyZWwuYwotKysrIGIvc3JjL2ZpbmR0ZXh0cmVsLmMKLUBAIC0yMyw3ICsyMyw3IEBACi0gI2luY2x1ZGUgPGFyZ3AuaD4KLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxnZWxmLmg+Ci0gI2luY2x1ZGUgPGxpYmR3Lmg+Ci1kaWZmIC0tZ2l0IGEvc3JjL25tLmMgYi9zcmMvbm0uYwotaW5kZXggYzU0ZTk2Zi4uOWUwMzFkOSAxMDA2NDQKLS0tLSBhL3NyYy9ubS5jCi0rKysgYi9zcmMvbm0uYwotQEAgLTI2LDcgKzI2LDcgQEAKLSAjaW5jbHVkZSA8Y3R5cGUuaD4KLSAjaW5jbHVkZSA8ZHdhcmYuaD4KLSAjaW5jbHVkZSA8ZXJybm8uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGZjbnRsLmg+Ci0gI2luY2x1ZGUgPGdlbGYuaD4KLSAjaW5jbHVkZSA8aW50dHlwZXMuaD4KLWRpZmYgLS1naXQgYS9zcmMvb2JqZHVtcC5jIGIvc3JjL29iamR1bXAuYwotaW5kZXggZmZmNGI4MS4uNGIxZjk2NiAxMDA2NDQKLS0tLSBhL3NyYy9vYmpkdW1wLmMKLSsrKyBiL3NyYy9vYmpkdW1wLmMKLUBAIC0yMSw3ICsyMSw3IEBACi0gI2VuZGlmCi0gCi0gI2luY2x1ZGUgPGFyZ3AuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGZjbnRsLmg+Ci0gI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0gI2luY2x1ZGUgPGxpYmludGwuaD4KLWRpZmYgLS1naXQgYS9zcmMvcmFubGliLmMgYi9zcmMvcmFubGliLmMKLWluZGV4IDQxYTNiY2YuLjBjN2RhMmMgMTAwNjQ0Ci0tLS0gYS9zcmMvcmFubGliLmMKLSsrKyBiL3NyYy9yYW5saWIuYwotQEAgLTI0LDcgKzI0LDcgQEAKLSAjaW5jbHVkZSA8YXJncC5oPgotICNpbmNsdWRlIDxhc3NlcnQuaD4KLSAjaW5jbHVkZSA8ZXJybm8uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGZjbnRsLmg+Ci0gI2luY2x1ZGUgPGdlbGYuaD4KLSAjaW5jbHVkZSA8bGliaW50bC5oPgotZGlmZiAtLWdpdCBhL3NyYy9yZWFkZWxmLmMgYi9zcmMvcmVhZGVsZi5jCi1pbmRleCBkMThhNGI3Li5hNmNmYjM1IDEwMDY0NAotLS0tIGEvc3JjL3JlYWRlbGYuYwotKysrIGIvc3JjL3JlYWRlbGYuYwotQEAgLTI1LDcgKzI1LDcgQEAKLSAjaW5jbHVkZSA8Y3R5cGUuaD4KLSAjaW5jbHVkZSA8ZHdhcmYuaD4KLSAjaW5jbHVkZSA8ZXJybm8uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGZjbnRsLmg+Ci0gI2luY2x1ZGUgPGdlbGYuaD4KLSAjaW5jbHVkZSA8aW50dHlwZXMuaD4KLWRpZmYgLS1naXQgYS9zcmMvc2l6ZS5jIGIvc3JjL3NpemUuYwotaW5kZXggZGUwZDc5MS4uNDYzOWQ0MiAxMDA2NDQKLS0tLSBhL3NyYy9zaXplLmMKLSsrKyBiL3NyYy9zaXplLmMKLUBAIC0yMSw3ICsyMSw3IEBACi0gI2VuZGlmCi0gCi0gI2luY2x1ZGUgPGFyZ3AuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGZjbnRsLmg+Ci0gI2luY2x1ZGUgPGdlbGYuaD4KLSAjaW5jbHVkZSA8aW50dHlwZXMuaD4KLWRpZmYgLS1naXQgYS9zcmMvc3RhY2suYyBiL3NyYy9zdGFjay5jCi1pbmRleCBhNWE3YmViLi40YzA3NWJjIDEwMDY0NAotLS0tIGEvc3JjL3N0YWNrLmMKLSsrKyBiL3NyYy9zdGFjay5jCi1AQCAtMTgsNyArMTgsNyBAQAotICNpbmNsdWRlIDxjb25maWcuaD4KLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0gI2luY2x1ZGUgPGFyZ3AuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotICNpbmNsdWRlIDxpbnR0eXBlcy5oPgotICNpbmNsdWRlIDxzdGRpby5oPgotZGlmZiAtLWdpdCBhL3NyYy9zdHJpbmdzLmMgYi9zcmMvc3RyaW5ncy5jCi1pbmRleCA0OWFhYjhiLi4wOWQ1YjFjIDEwMDY0NAotLS0tIGEvc3JjL3N0cmluZ3MuYwotKysrIGIvc3JjL3N0cmluZ3MuYwotQEAgLTI1LDcgKzI1LDcgQEAKLSAjaW5jbHVkZSA8Y3R5cGUuaD4KLSAjaW5jbHVkZSA8ZW5kaWFuLmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxnZWxmLmg+Ci0gI2luY2x1ZGUgPGludHR5cGVzLmg+Ci1kaWZmIC0tZ2l0IGEvc3JjL3N0cmlwLmMgYi9zcmMvc3RyaXAuYwotaW5kZXggYTg3NWRkZi4uZmQ3NmY3ZiAxMDA2NDQKLS0tLSBhL3NyYy9zdHJpcC5jCi0rKysgYi9zcmMvc3RyaXAuYwotQEAgLTI0LDcgKzI0LDcgQEAKLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0gI2luY2x1ZGUgPGJ5dGVzd2FwLmg+Ci0gI2luY2x1ZGUgPGVuZGlhbi5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8ZmNudGwuaD4KLSAjaW5jbHVkZSA8Z2VsZi5oPgotICNpbmNsdWRlIDxsaWJlbGYuaD4KLWRpZmYgLS1naXQgYS9zcmMvdW5zdHJpcC5jIGIvc3JjL3Vuc3RyaXAuYwotaW5kZXggZDgzOGFlOS4uMDEwODI3MiAxMDA2NDQKLS0tLSBhL3NyYy91bnN0cmlwLmMKLSsrKyBiL3NyYy91bnN0cmlwLmMKLUBAIC0zMSw3ICszMSw3IEBACi0gI2luY2x1ZGUgPGFyZ3AuaD4KLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxmbm1hdGNoLmg+Ci0gI2luY2x1ZGUgPGxpYmludGwuaD4KLWRpZmYgLS1naXQgYS90ZXN0cy9hZGRyc2NvcGVzLmMgYi90ZXN0cy9hZGRyc2NvcGVzLmMKLWluZGV4IDc5MTU2OWYuLjU0ZjQzMTEgMTAwNjQ0Ci0tLS0gYS90ZXN0cy9hZGRyc2NvcGVzLmMKLSsrKyBiL3Rlc3RzL2FkZHJzY29wZXMuYwotQEAgLTI1LDcgKzI1LDcgQEAKLSAjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+Ci0gI2luY2x1ZGUgPGxvY2FsZS5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotIAotIAotZGlmZiAtLWdpdCBhL3Rlc3RzL2FsbHJlZ3MuYyBiL3Rlc3RzL2FsbHJlZ3MuYwotaW5kZXggMjg2ZjdlMy4uYzlkZTA4OSAxMDA2NDQKLS0tLSBhL3Rlc3RzL2FsbHJlZ3MuYwotKysrIGIvdGVzdHMvYWxscmVncy5jCi1AQCAtMjEsNyArMjEsNyBAQAotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxsb2NhbGUuaD4KLSAjaW5jbHVkZSA8YXJncC5oPgotICNpbmNsdWRlIDxhc3NlcnQuaD4KLWRpZmYgLS1naXQgYS90ZXN0cy9iYWNrdHJhY2UtZGF0YS5jIGIvdGVzdHMvYmFja3RyYWNlLWRhdGEuYwotaW5kZXggYjcxNThkYS4uMzU0ZmE2YSAxMDA2NDQKLS0tLSBhL3Rlc3RzL2JhY2t0cmFjZS1kYXRhLmMKLSsrKyBiL3Rlc3RzL2JhY2t0cmFjZS1kYXRhLmMKLUBAIC0yNyw3ICsyNyw3IEBACi0gI2luY2x1ZGUgPGRpcmVudC5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8ZXJybm8uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotICNpbmNsdWRlIDxkd2FyZi5oPgotICNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQoX19saW51eF9fKQotZGlmZiAtLWdpdCBhL3Rlc3RzL2JhY2t0cmFjZS1kd2FyZi5jIGIvdGVzdHMvYmFja3RyYWNlLWR3YXJmLmMKLWluZGV4IGE2NDRjOGEuLmI4Y2JlMjcgMTAwNjQ0Ci0tLS0gYS90ZXN0cy9iYWNrdHJhY2UtZHdhcmYuYwotKysrIGIvdGVzdHMvYmFja3RyYWNlLWR3YXJmLmMKLUBAIC0yMiw3ICsyMiw3IEBACi0gI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgotICNpbmNsdWRlIDxsb2NhbGUuaD4KLSAjaW5jbHVkZSA8ZXJybm8uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotICNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+Ci0gI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotZGlmZiAtLWdpdCBhL3Rlc3RzL2JhY2t0cmFjZS5jIGIvdGVzdHMvYmFja3RyYWNlLmMKLWluZGV4IDFmZjYzNTMuLjQ3ZTNmN2IgMTAwNjQ0Ci0tLS0gYS90ZXN0cy9iYWNrdHJhY2UuYwotKysrIGIvdGVzdHMvYmFja3RyYWNlLmMKLUBAIC0yNCw3ICsyNCw3IEBACi0gI2luY2x1ZGUgPGRpcmVudC5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8ZXJybm8uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotICNpbmNsdWRlIDxkd2FyZi5oPgotICNpZmRlZiBfX2xpbnV4X18KLWRpZmYgLS1naXQgYS90ZXN0cy9idWlsZGlkLmMgYi90ZXN0cy9idWlsZGlkLmMKLWluZGV4IDg3YzE4NzcuLjI5NTNlNmIgMTAwNjQ0Ci0tLS0gYS90ZXN0cy9idWlsZGlkLmMKLSsrKyBiL3Rlc3RzL2J1aWxkaWQuYwotQEAgLTIzLDcgKzIzLDcgQEAKLSAjaW5jbHVkZSBFTEZVVElMU19IRUFERVIoZWxmKQotICNpbmNsdWRlIEVMRlVUSUxTX0hFQURFUihkd2VsZikKLSAjaW5jbHVkZSA8c3RkaW8uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci1kaWZmIC0tZ2l0IGEvdGVzdHMvZGVidWdhbHRsaW5rLmMgYi90ZXN0cy9kZWJ1Z2FsdGxpbmsuYwotaW5kZXggNmQ5N2Q1MC4uZWU3ZTU1OSAxMDA2NDQKLS0tLSBhL3Rlc3RzL2RlYnVnYWx0bGluay5jCi0rKysgYi90ZXN0cy9kZWJ1Z2FsdGxpbmsuYwotQEAgLTIzLDcgKzIzLDcgQEAKLSAjaW5jbHVkZSBFTEZVVElMU19IRUFERVIoZHcpCi0gI2luY2x1ZGUgRUxGVVRJTFNfSEVBREVSKGR3ZWxmKQotICNpbmNsdWRlIDxzdGRpby5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLWRpZmYgLS1naXQgYS90ZXN0cy9kZWJ1Z2xpbmsuYyBiL3Rlc3RzL2RlYnVnbGluay5jCi1pbmRleCA5MzVkMTAyLi43NDFjYjgxIDEwMDY0NAotLS0tIGEvdGVzdHMvZGVidWdsaW5rLmMKLSsrKyBiL3Rlc3RzL2RlYnVnbGluay5jCi1AQCAtMjEsNyArMjEsNyBAQAotICNpbmNsdWRlIDxlcnJuby5oPgotICNpbmNsdWRlIEVMRlVUSUxTX0hFQURFUihkd2VsZikKLSAjaW5jbHVkZSA8c3RkaW8uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci1kaWZmIC0tZ2l0IGEvdGVzdHMvZGVsZXRlZC5jIGIvdGVzdHMvZGVsZXRlZC5jCi1pbmRleCA2YmUzNWJjLi4wMTkwNzExIDEwMDY0NAotLS0tIGEvdGVzdHMvZGVsZXRlZC5jCi0rKysgYi90ZXN0cy9kZWxldGVkLmMKLUBAIC0yMSw3ICsyMSw3IEBACi0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotICNpbmNsdWRlIDxhc3NlcnQuaD4KLSAjaW5jbHVkZSA8c3RkaW8uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0gI2lmZGVmIF9fbGludXhfXwotICNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KLWRpZmYgLS1naXQgYS90ZXN0cy9kd2ZsLWFkZHItc2VjdC5jIGIvdGVzdHMvZHdmbC1hZGRyLXNlY3QuYwotaW5kZXggMjFlNDcwYS4uMWVhMWUzYiAxMDA2NDQKLS0tLSBhL3Rlc3RzL2R3ZmwtYWRkci1zZWN0LmMKLSsrKyBiL3Rlc3RzL2R3ZmwtYWRkci1zZWN0LmMKLUBAIC0yMyw3ICsyMyw3IEBACi0gI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxsb2NhbGUuaD4KLSAjaW5jbHVkZSA8YXJncC5oPgotICNpbmNsdWRlIEVMRlVUSUxTX0hFQURFUihkd2ZsKQotZGlmZiAtLWdpdCBhL3Rlc3RzL2R3ZmwtYnVnLWFkZHItb3ZlcmZsb3cuYyBiL3Rlc3RzL2R3ZmwtYnVnLWFkZHItb3ZlcmZsb3cuYwotaW5kZXggYWE4MDMwZS4uMDJjOGJlZiAxMDA2NDQKLS0tLSBhL3Rlc3RzL2R3ZmwtYnVnLWFkZHItb3ZlcmZsb3cuYwotKysrIGIvdGVzdHMvZHdmbC1idWctYWRkci1vdmVyZmxvdy5jCi1AQCAtMjAsNyArMjAsNyBAQAotICNpbmNsdWRlIDxpbnR0eXBlcy5oPgotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlIDxzdGRpb19leHQuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGxvY2FsZS5oPgotICNpbmNsdWRlIEVMRlVUSUxTX0hFQURFUihkd2ZsKQotIAotZGlmZiAtLWdpdCBhL3Rlc3RzL2R3ZmwtYnVnLWZkLWxlYWsuYyBiL3Rlc3RzL2R3ZmwtYnVnLWZkLWxlYWsuYwotaW5kZXggNjg5Y2RkNy4uNTk3M2RhMyAxMDA2NDQKLS0tLSBhL3Rlc3RzL2R3ZmwtYnVnLWZkLWxlYWsuYwotKysrIGIvdGVzdHMvZHdmbC1idWctZmQtbGVhay5jCi1AQCAtMjQsNyArMjQsNyBAQAotICNpbmNsdWRlIDxkaXJlbnQuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDx1bmlzdGQuaD4KLSAjaW5jbHVkZSA8ZHdhcmYuaD4KLSAKLWRpZmYgLS1naXQgYS90ZXN0cy9kd2ZsLWJ1Zy1nZXRtb2R1bGVzLmMgYi90ZXN0cy9kd2ZsLWJ1Zy1nZXRtb2R1bGVzLmMKLWluZGV4IDFlZTk4OWYuLmZkNjJlNjUgMTAwNjQ0Ci0tLS0gYS90ZXN0cy9kd2ZsLWJ1Zy1nZXRtb2R1bGVzLmMKLSsrKyBiL3Rlc3RzL2R3ZmwtYnVnLWdldG1vZHVsZXMuYwotQEAgLTE4LDcgKzE4LDcgQEAKLSAjaW5jbHVkZSA8Y29uZmlnLmg+Ci0gI2luY2x1ZGUgRUxGVVRJTFNfSEVBREVSKGR3ZmwpCi0gCi0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotIAotIHN0YXRpYyBjb25zdCBEd2ZsX0NhbGxiYWNrcyBjYWxsYmFja3MgPQotICAgewotZGlmZiAtLWdpdCBhL3Rlc3RzL2R3ZmwtcmVwb3J0LWVsZi1hbGlnbi5jIGIvdGVzdHMvZHdmbC1yZXBvcnQtZWxmLWFsaWduLmMKLWluZGV4IGE0ZTk3ZDMuLmY0NzE1ODcgMTAwNjQ0Ci0tLS0gYS90ZXN0cy9kd2ZsLXJlcG9ydC1lbGYtYWxpZ24uYwotKysrIGIvdGVzdHMvZHdmbC1yZXBvcnQtZWxmLWFsaWduLmMKLUBAIC0yMCw3ICsyMCw3IEBACi0gI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8bG9jYWxlLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLWRpZmYgLS1naXQgYS90ZXN0cy9kd2ZsbGluZXMuYyBiL3Rlc3RzL2R3ZmxsaW5lcy5jCi1pbmRleCA5MDM3OWRkLi5jYmRmNmM0IDEwMDY0NAotLS0tIGEvdGVzdHMvZHdmbGxpbmVzLmMKLSsrKyBiL3Rlc3RzL2R3ZmxsaW5lcy5jCi1AQCAtMjcsNyArMjcsNyBAQAotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotIAotIGludAotIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi1kaWZmIC0tZ2l0IGEvdGVzdHMvZHdmbG1vZHRlc3QuYyBiL3Rlc3RzL2R3Zmxtb2R0ZXN0LmMKLWluZGV4IDAwMjdmOTYuLmU2OGQzYmMgMTAwNjQ0Ci0tLS0gYS90ZXN0cy9kd2ZsbW9kdGVzdC5jCi0rKysgYi90ZXN0cy9kd2ZsbW9kdGVzdC5jCi1AQCAtMjMsNyArMjMsNyBAQAotICNpbmNsdWRlIDxzdGRpb19leHQuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8bG9jYWxlLmg+Ci0gI2luY2x1ZGUgPGFyZ3AuaD4KLSAjaW5jbHVkZSBFTEZVVElMU19IRUFERVIoZHdmbCkKLWRpZmYgLS1naXQgYS90ZXN0cy9kd2Zsc3ltcy5jIGIvdGVzdHMvZHdmbHN5bXMuYwotaW5kZXggNDlhYzMzNC4uY2YwNzgzMCAxMDA2NDQKLS0tLSBhL3Rlc3RzL2R3ZmxzeW1zLmMKLSsrKyBiL3Rlc3RzL2R3ZmxzeW1zLmMKLUBAIC0yNSw3ICsyNSw3IEBACi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotIAotIHN0YXRpYyBjb25zdCBjaGFyICoKLWRpZmYgLS1naXQgYS90ZXN0cy9lYXJseS1vZmZzY24uYyBiL3Rlc3RzL2Vhcmx5LW9mZnNjbi5jCi1pbmRleCA5MjRjYjllLi42ZjYwZDVhIDEwMDY0NAotLS0tIGEvdGVzdHMvZWFybHktb2Zmc2NuLmMKLSsrKyBiL3Rlc3RzL2Vhcmx5LW9mZnNjbi5jCi1AQCAtMTksNyArMTksNyBAQAotICNlbmRpZgotIAotICNpbmNsdWRlIDxlcnJuby5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8ZmNudGwuaD4KLSAjaW5jbHVkZSA8Z2VsZi5oPgotICNpbmNsdWRlIDxzdGRpby5oPgotZGlmZiAtLWdpdCBhL3Rlc3RzL2VjcC5jIGIvdGVzdHMvZWNwLmMKLWluZGV4IDM4YTY4NTkuLjc0M2NlYTUgMTAwNjQ0Ci0tLS0gYS90ZXN0cy9lY3AuYwotKysrIGIvdGVzdHMvZWNwLmMKLUBAIC0yMCw3ICsyMCw3IEBACi0gI2VuZGlmCi0gCi0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxnZWxmLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotZGlmZiAtLWdpdCBhL3Rlc3RzL2ZpbmQtcHJvbG9ndWVzLmMgYi90ZXN0cy9maW5kLXByb2xvZ3Vlcy5jCi1pbmRleCBiYThhZTM3Li43NmY1ZjA0IDEwMDY0NAotLS0tIGEvdGVzdHMvZmluZC1wcm9sb2d1ZXMuYwotKysrIGIvdGVzdHMvZmluZC1wcm9sb2d1ZXMuYwotQEAgLTI1LDcgKzI1LDcgQEAKLSAjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+Ci0gI2luY2x1ZGUgPGxvY2FsZS5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotICNpbmNsdWRlIDxmbm1hdGNoLmg+Ci0gCi1kaWZmIC0tZ2l0IGEvdGVzdHMvZnVuY3JldHZhbC5jIGIvdGVzdHMvZnVuY3JldHZhbC5jCi1pbmRleCA4ZDE5ZDExLi5jOGFhYTkzIDEwMDY0NAotLS0tIGEvdGVzdHMvZnVuY3JldHZhbC5jCi0rKysgYi90ZXN0cy9mdW5jcmV0dmFsLmMKLUBAIC0yNSw3ICsyNSw3IEBACi0gI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgotICNpbmNsdWRlIDxsb2NhbGUuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8Zm5tYXRjaC5oPgotIAotZGlmZiAtLWdpdCBhL3Rlc3RzL2Z1bmNzY29wZXMuYyBiL3Rlc3RzL2Z1bmNzY29wZXMuYwotaW5kZXggOWM5MDE4NS4uZGJjY2I4OSAxMDA2NDQKLS0tLSBhL3Rlc3RzL2Z1bmNzY29wZXMuYwotKysrIGIvdGVzdHMvZnVuY3Njb3Blcy5jCi1AQCAtMjUsNyArMjUsNyBAQAotICNpbmNsdWRlIDxzdGRpb19leHQuaD4KLSAjaW5jbHVkZSA8bG9jYWxlLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1ZGUgPGZubWF0Y2guaD4KLSAKLWRpZmYgLS1naXQgYS90ZXN0cy9nZXRzcmNfZGllLmMgYi90ZXN0cy9nZXRzcmNfZGllLmMKLWluZGV4IDA1NWFlZGUuLjljMzk0ZGQgMTAwNjQ0Ci0tLS0gYS90ZXN0cy9nZXRzcmNfZGllLmMKLSsrKyBiL3Rlc3RzL2dldHNyY19kaWUuYwotQEAgLTE5LDcgKzE5LDcgQEAKLSAjZW5kaWYKLSAKLSAjaW5jbHVkZSA8ZXJybm8uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPGZjbnRsLmg+Ci0gI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0gI2luY2x1ZGUgPGxpYmVsZi5oPgotZGlmZiAtLWdpdCBhL3Rlc3RzL2xpbmUyYWRkci5jIGIvdGVzdHMvbGluZTJhZGRyLmMKLWluZGV4IGUwZDY1ZDMuLjliZjAwMjMgMTAwNjQ0Ci0tLS0gYS90ZXN0cy9saW5lMmFkZHIuYwotKysrIGIvdGVzdHMvbGluZTJhZGRyLmMKLUBAIC0yNiw3ICsyNiw3IEBACi0gI2luY2x1ZGUgPGxvY2FsZS5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotIAotIAotIHN0YXRpYyB2b2lkCi1kaWZmIC0tZ2l0IGEvdGVzdHMvbG93X2hpZ2hfcGMuYyBiL3Rlc3RzL2xvd19oaWdoX3BjLmMKLWluZGV4IGQwZjQzMDIuLjhkYTRmYmQgMTAwNjQ0Ci0tLS0gYS90ZXN0cy9sb3dfaGlnaF9wYy5jCi0rKysgYi90ZXN0cy9sb3dfaGlnaF9wYy5jCi1AQCAtMjUsNyArMjUsNyBAQAotICNpbmNsdWRlIDxzdGRpb19leHQuaD4KLSAjaW5jbHVkZSA8bG9jYWxlLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1ZGUgPGZubWF0Y2guaD4KLSAKLWRpZmYgLS1naXQgYS90ZXN0cy9tZDUtc2hhMS10ZXN0LmMgYi90ZXN0cy9tZDUtc2hhMS10ZXN0LmMKLWluZGV4IGQ1MDM1NWUuLjNjNDFmNDAgMTAwNjQ0Ci0tLS0gYS90ZXN0cy9tZDUtc2hhMS10ZXN0LmMKLSsrKyBiL3Rlc3RzL21kNS1zaGExLXRlc3QuYwotQEAgLTE5LDcgKzE5LDcgQEAKLSAjZW5kaWYKLSAKLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotIAotICNpbmNsdWRlICJtZDUuaCIKLSAjaW5jbHVkZSAic2hhMS5oIgotZGlmZiAtLWdpdCBhL3Rlc3RzL3Jkd3JtbWFwLmMgYi90ZXN0cy9yZHdybW1hcC5jCi1pbmRleCA2ZjAyN2RmLi4xY2U1ZTZlIDEwMDY0NAotLS0tIGEvdGVzdHMvcmR3cm1tYXAuYwotKysrIGIvdGVzdHMvcmR3cm1tYXAuYwotQEAgLTE5LDcgKzE5LDcgQEAKLSAjZW5kaWYKLSAKLSAjaW5jbHVkZSA8ZXJybm8uaD4KLS0jaW5jbHVkZSA8ZXJyb3IuaD4KLSsjaW5jbHVkZSA8ZXJyLmg+Ci0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgPGZjbnRsLmg+Ci0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotZGlmZiAtLWdpdCBhL3Rlc3RzL3NhcmlkeC5jIGIvdGVzdHMvc2FyaWR4LmMKLWluZGV4IDhhNDUwZDguLmIzODc4MDEgMTAwNjQ0Ci0tLS0gYS90ZXN0cy9zYXJpZHguYwotKysrIGIvdGVzdHMvc2FyaWR4LmMKLUBAIC0xNyw3ICsxNyw3IEBACi0gCi0gI2luY2x1ZGUgPGNvbmZpZy5oPgotIAotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8ZmNudGwuaD4KLSAjaW5jbHVkZSA8Z2VsZi5oPgotICNpbmNsdWRlIDxzdGRpby5oPgotZGlmZiAtLWdpdCBhL3Rlc3RzL3NlY3Rpb25kdW1wLmMgYi90ZXN0cy9zZWN0aW9uZHVtcC5jCi1pbmRleCAzMDMzZmVkLi44ZTg4OGRiIDEwMDY0NAotLS0tIGEvdGVzdHMvc2VjdGlvbmR1bXAuYwotKysrIGIvdGVzdHMvc2VjdGlvbmR1bXAuYwotQEAgLTE4LDcgKzE4LDcgQEAKLSAjaW5jbHVkZSA8Y29uZmlnLmg+Ci0gCi0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tI2luY2x1ZGUgPGVycm9yLmg+Ci0rI2luY2x1ZGUgPGVyci5oPgotICNpbmNsdWRlIDxmY250bC5oPgotICNpbmNsdWRlIDxnZWxmLmg+Ci0gI2luY2x1ZGUgPGludHR5cGVzLmg+Ci1kaWZmIC0tZ2l0IGEvdGVzdHMvdmFybG9jcy5jIGIvdGVzdHMvdmFybG9jcy5jCi1pbmRleCBjM2ZiYTg5Li5lMDQzZWEyIDEwMDY0NAotLS0tIGEvdGVzdHMvdmFybG9jcy5jCi0rKysgYi90ZXN0cy92YXJsb2NzLmMKLUBAIC0yNSw3ICsyNSw3IEBACi0gI2luY2x1ZGUgPGR3YXJmLmg+Ci0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotICNpbmNsdWRlIDxzeXMvc3RhdC5oPgotZGlmZiAtLWdpdCBhL3Rlc3RzL3Zkc29zeW1zLmMgYi90ZXN0cy92ZHNvc3ltcy5jCi1pbmRleCBiODc2YzEwLi5hZmIyODIzIDEwMDY0NAotLS0tIGEvdGVzdHMvdmRzb3N5bXMuYwotKysrIGIvdGVzdHMvdmRzb3N5bXMuYwotQEAgLTE4LDcgKzE4LDcgQEAKLSAjaW5jbHVkZSA8Y29uZmlnLmg+Ci0gI2luY2x1ZGUgPGFzc2VydC5oPgotICNpbmNsdWRlIDxlcnJuby5oPgotLSNpbmNsdWRlIDxlcnJvci5oPgotKyNpbmNsdWRlIDxlcnIuaD4KLSAjaW5jbHVkZSA8aW50dHlwZXMuaD4KLSAjaW5jbHVkZSA8c3RkaW8uaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0tLSAKLTIuOC4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjgvMDAwMS1lbGZfZ2V0YXJzeW0tU2lsZW5jZS1XZXJyb3ItbWF5YmUtdW5pbml0aWFsaXplZC1mYWxzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2OC8wMDAxLWVsZl9nZXRhcnN5bS1TaWxlbmNlLVdlcnJvci1tYXliZS11bmluaXRpYWxpemVkLWZhbHMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NTRjMWMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2OC8wMDAxLWVsZl9nZXRhcnN5bS1TaWxlbmNlLVdlcnJvci1tYXliZS11bmluaXRpYWxpemVkLWZhbHMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1Gcm9tIDY2OGFjY2YzMjJmZDcxODVlMjczYmZkNTBiODQzMjBlNzFkOWRlNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDEwIEFwciAyMDE1IDAwOjI5OjE4ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0hdIGVsZl9nZXRhcnN5bTogU2lsZW5jZSAtV2Vycm9yPW1heWJlLXVuaW5pdGlhbGl6ZWQgZmFsc2UKLSBwb3NpdGl2ZQotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLVNpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KLS0tLQotIGxpYmVsZi9lbGZfZ2V0YXJzeW0uYyB8IDkgKysrKysrKy0tCi0gMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2xpYmVsZi9lbGZfZ2V0YXJzeW0uYyBiL2xpYmVsZi9lbGZfZ2V0YXJzeW0uYwotaW5kZXggZDBiYjI4YS4uMDg5NTRkMiAxMDA2NDQKLS0tLSBhL2xpYmVsZi9lbGZfZ2V0YXJzeW0uYwotKysrIGIvbGliZWxmL2VsZl9nZXRhcnN5bS5jCi1AQCAtMTY1LDggKzE2NSwxMyBAQCBlbGZfZ2V0YXJzeW0gKGVsZiwgcHRyKQotICAgICAgIGludCB3ID0gaW5kZXg2NF9wID8gOCA6IDQ7Ci0gCi0gICAgICAgLyogV2UgaGF2ZSBhbiBhcmNoaXZlLiAgVGhlIGZpcnN0IHdvcmQgaW4gdGhlcmUgaXMgdGhlIG51bWJlciBvZgotLQkgZW50cmllcyBpbiB0aGUgdGFibGUuICAqLwotLSAgICAgIHVpbnQ2NF90IG47Ci0rCSBlbnRyaWVzIGluIHRoZSB0YWJsZS4KLSsJIFNldCB0byBTSVpFX01BWCBqdXN0IHRvIHNpbGVuY2UgLVdlcnJvcj1tYXliZS11bmluaXRpYWxpemVkCi0rCSBlbGZfZ2V0YXJzeW0uYzoyOTA6OTogZXJyb3I6ICduJyBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkIGluIHRoaXMgZnVuY3Rpb24KLSsJIFRoZSByZWFkX251bWJlcl9lbnRyaWVzIGZ1bmN0aW9uIGRvZXNuJ3QgaW5pdGlhbGl6ZSBuIG9ubHkgd2hlbiByZXR1cm5pbmcKLSsJIC0xIHdoaWNoIGluIHR1cm4gZW5zdXJlcyB0byBqdW1wIG92ZXIgdXNhZ2Ugb2YgdGhpcyB1bmluaXRpYWxpemVkIHZhcmlhYmxlLgotKwkgKi8KLSsgICAgICB1aW50NjRfdCBuID0gU0laRV9NQVg7Ci0gICAgICAgc2l6ZV90IG9mZiA9IGVsZi0+c3RhcnRfb2Zmc2V0ICsgU0FSTUFHICsgc2l6ZW9mIChzdHJ1Y3QgYXJfaGRyKTsKLSAgICAgICBpZiAocmVhZF9udW1iZXJfZW50cmllcyAoJm4sIGVsZiwgJm9mZiwgaW5kZXg2NF9wKSA8IDApCi0gCXsKLS0tIAotMi4zLjUKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2OC8wMDAxLWZpeC1hLXN0YWNrLXVzYWdlLXdhcm5pbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY4LzAwMDEtZml4LWEtc3RhY2stdXNhZ2Utd2FybmluZy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjkyM2JmNy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY4LzAwMDEtZml4LWEtc3RhY2stdXNhZ2Utd2FybmluZy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLVtQQVRDSF0gZml4IGEgc3RhY2stdXNhZ2Ugd2FybmluZwotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotbm90IHVzZSBhIHZhcmlhYmxlIHRvIGFzIGEgYXJyYXkgc2l6ZSwgb3RoZXJ3aXNlIHRoZSB3YXJuaW5nIHRvIGVycm9yIHRoYXQKLXN0YWNrIHVzYWdlIG1pZ2h0IGJlIHVuYm91bmRlZCBbLVdlcnJvcj1zdGFjay11c2FnZT1dIHdpbGwgaGFwcGVuCi0KLVNpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KLS0tLQotIGJhY2tlbmRzL3BwY19pbml0cmVnLmMgfCAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9iYWNrZW5kcy9wcGNfaW5pdHJlZy5jIGIvYmFja2VuZHMvcHBjX2luaXRyZWcuYwotaW5kZXggNjRmNTM3OS4uNTJkZGUzZSAxMDA2NDQKLS0tLSBhL2JhY2tlbmRzL3BwY19pbml0cmVnLmMKLSsrKyBiL2JhY2tlbmRzL3BwY19pbml0cmVnLmMKLUBAIC05Myw3ICs5Myw3IEBAIHBwY19zZXRfaW5pdGlhbF9yZWdpc3RlcnNfdGlkIChwaWRfdCB0aWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAotIAlyZXR1cm4gZmFsc2U7Ci0gICAgIH0KLSAgIGNvbnN0IHNpemVfdCBncHJzID0gc2l6ZW9mICh1c2VyX3JlZ3Muci5ncHIpIC8gc2l6ZW9mICgqdXNlcl9yZWdzLnIuZ3ByKTsKLS0gIER3YXJmX1dvcmQgZHdhcmZfcmVnc1tncHJzXTsKLSsgIER3YXJmX1dvcmQgZHdhcmZfcmVnc1tzaXplb2YgKHVzZXJfcmVncy5yLmdwcikgLyBzaXplb2YgKCp1c2VyX3JlZ3Muci5ncHIpXTsKLSAgIGZvciAodW5zaWduZWQgZ3ByID0gMDsgZ3ByIDwgZ3ByczsgZ3ByKyspCi0gICAgIGR3YXJmX3JlZ3NbZ3ByXSA9IHVzZXJfcmVncy5yLmdwcltncHJdOwotICAgaWYgKCEgc2V0ZnVuYyAoMCwgZ3BycywgZHdhcmZfcmVncywgYXJnKSkKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2OC8wMDAxLXJlbW92ZS10aGUtdW5uZWVkLWNoZWNraW5nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2OC8wMDAxLXJlbW92ZS10aGUtdW5uZWVkLWNoZWNraW5nLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmU5MmQ3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjgvMDAwMS1yZW1vdmUtdGhlLXVubmVlZC1jaGVja2luZy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLURpc2FibGUgdGhlIHRlc3QgdG8gY29udmVydCBldWMtanAKLQotUmVtb3ZlIHRoZSB0ZXN0ICJUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOgotTm8gY29udmVydGVyIGZyb20gRVVDLUpQIHRvIFVURi04IGlzIHByb3ZpZGVkIgotc2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydCBIUC1VWCBhbmQgaWYgdGhlIGV1Yy1qcCBpcyBub3QKLWluc3RhbGxlZCBvbiB0aGUgaG9zdCwgdGhlIGRlcGVuZGVuY2Ugd2lsbCBiZSBidWlsdCB3aXRob3V0Ci1pY29udiBzdXBwb3J0IGFuZCB3aWxsIGNhdXNlIGd1aWxkLW5hdGl2ZSBidWlsZGluZyBmYWlsLgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQotCi1TaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+Ci0tLS0KLSBtNC9pY29udi5tNCB8IDIgKysKLSAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9tNC9pY29udi5tNCBiL200L2ljb252Lm00Ci1pbmRleCBhNTAzNjQ2Li4yOTlmMWViIDEwMDY0NAotLS0tIGEvbTQvaWNvbnYubTQKLSsrKyBiL200L2ljb252Lm00Ci1AQCAtMTU5LDYgKzE1OSw3IEBAIGludCBtYWluICgpCi0gICAgICAgfQotICAgfQotICNlbmRpZgotKyNpZiAwCi0gICAvKiBUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOiBObyBjb252ZXJ0ZXIgZnJvbSBFVUMtSlAgdG8gVVRGLTggaXMKLSAgICAgIHByb3ZpZGVkLiAgKi8KLSAgIGlmICgvKiBUcnkgc3RhbmRhcmRpemVkIG5hbWVzLiAgKi8KLUBAIC0xNzAsNiArMTcxLDcgQEAgaW50IG1haW4gKCkKLSAgICAgICAvKiBUcnkgSFAtVVggbmFtZXMuICAqLwotICAgICAgICYmIGljb252X29wZW4gKCJ1dGY4IiwgImV1Y0pQIikgPT0gKGljb252X3QpKC0xKSkKLSAgICAgcmVzdWx0IHw9IDE2OwotKyNlbmRpZgotICAgcmV0dXJuIHJlc3VsdDsKLSB9XV0pXSwKLSAgICAgICAgIFthbV9jdl9mdW5jX2ljb252X3dvcmtzPXllc10sCi0tLSAKLTIuMC4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjgvRml4X29uZV9HQ0M3X3dhcm5pbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY4L0ZpeF9vbmVfR0NDN193YXJuaW5nLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODhmNGViLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjgvRml4X29uZV9HQ0M3X3dhcm5pbmcucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi1Gcm9tIDkzYzUxMTQ0YzNmNjY0ZDRlOTcwOWRhNzVhMWQwZmEwMGVhMGZlOTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBNYXJrIFdpZWxhYXJkIDxtYXJrQGtsb21wLm9yZz4KLURhdGU6IFN1biwgMTIgRmViIDIwMTcgMjE6NTE6MzQgKzAxMDAKLVN1YmplY3Q6IFtQQVRDSF0gbGliYXNtOiBGaXggb25lIEdDQzcgLVdmb3JtYXQtdHJ1bmNhdGlvbj0yIHdhcm5pbmcuCi0KLU1ha2Ugc3VyZSB0aGF0IGlmIHdlIGhhdmUgcmVhbGx5IGxvdHMgb2YgbGFiZWxzIHRoZSB0ZW1wc3ltIGRvZXNuJ3QgZ2V0Ci10cnVuY2F0ZWQgYmVjYXVzZSBpdCBpcyB0b28gc21hbGwgdG8gaG9sZCB0aGUgd2hvbGUgbmFtZS4KLQotVGhpcyBkb2Vzbid0IGVuYWJsZSAtV2Zvcm1hdC10cnVuY2F0aW9uPTIgb3IgZml4IG90aGVyICJpc3N1ZXMiIHBvaW50ZWQKLW91dCBieSBlbmFibGluZyB0aGlzIHdhcm5pbmcgYmVjYXVzZSB0aGVyZSBhcmUgY3VycmVudGx5IHNvbWUgaXNzdWVzCi13aXRoIGl0LiBodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD03OTQ0OAotCi1TaWduZWQtb2ZmLWJ5OiBNYXJrIFdpZWxhYXJkIDxtYXJrQGtsb21wLm9yZz4KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCAoaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9naXQvP3A9ZWxmdXRpbHMuZ2l0O2E9Y29tbWl0O2g9OTNjNTExNDRjM2Y2NjRkNGU5NzA5ZGE3NWExZDBmYTAwZWEwZmU5NSkKLVNpZ25lZC1vZmYtYnk6IEpvc2h1YSBMb2NrIDxqb3NodWEuZy5sb2NrQGludGVsLmNvbT4KLQotLS0tCi0gbGliYXNtL0NoYW5nZUxvZyAgICB8IDYgKysrKystCi0gbGliYXNtL2FzbV9uZXdzeW0uYyB8IDYgKysrKy0tCi0gMiBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCi0KLUluZGV4OiBlbGZ1dGlscy0wLjE2OC9saWJhc20vYXNtX25ld3N5bS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjgub3JpZy9saWJhc20vYXNtX25ld3N5bS5jCi0rKysgZWxmdXRpbHMtMC4xNjgvbGliYXNtL2FzbV9uZXdzeW0uYwotQEAgLTEsNSArMSw1IEBACi0gLyogRGVmaW5lIG5ldyBzeW1ib2wgZm9yIGN1cnJlbnQgcG9zaXRpb24gaW4gZ2l2ZW4gc2VjdGlvbi4KLS0gICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUsIDIwMTYgUmVkIEhhdCwgSW5jLgotKyAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAxNiwgMjAxNyBSZWQgSGF0LCBJbmMuCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgZWxmdXRpbHMuCi0gICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMi4KLSAKLUBAIC00NCw3ICs0NCw5IEBAIEFzbVN5bV90ICoKLSBhc21fbmV3c3ltIChBc21TY25fdCAqYXNtc2NuLCBjb25zdCBjaGFyICpuYW1lLCBHRWxmX1h3b3JkIHNpemUsCi0gCSAgICBpbnQgdHlwZSwgaW50IGJpbmRpbmcpCi0gewotLSNkZWZpbmUgVEVNUFNZTUxFTiAxMAotKy8qIFdlIGRvbid0IHJlYWxseSBleHBlY3QgbGFiZWxzIHdpdGggbWFueSBkaWdpdHMsIGJ1dCBpbiB0aGVvcnkgaXQgY291bGQKLSsgICBiZSAxMCBkaWdpdHMgKHBsdXMgIi5MIiBhbmQgYSB6ZXJvIHRlcm1pbmF0b3IpLiAgKi8KLSsjZGVmaW5lIFRFTVBTWU1MRU4gMTMKLSAgIGNoYXIgdGVtcHN5bVtURU1QU1lNTEVOXTsKLSAgIEFzbVN5bV90ICpyZXN1bHQ7Ci0gCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY4L2FhcmNoNjRfdWlvLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2OC9hYXJjaDY0X3Vpby5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhkYzU3Yi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY4L2FhcmNoNjRfdWlvLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotRml4IGJ1aWxkIG9uIGFhcmNoNjQvbXVzbAotCi1FcnJvcnMKLQotaW52YWxpZCBvcGVyYW5kcyB0byBiaW5hcnkgJiAoaGF2ZSAnbG9uZyBkb3VibGUnIGFuZCAndW5zaWduZWQgaW50JykKLQotZXJyb3I6IHJlZGVmaW5pdGlvbgotIG9mICdzdHJ1Y3QgaW92ZWMnCi0gc3RydWN0IGlvdmVjIHsgdm9pZCAqaW92X2Jhc2U7IHNpemVfdCBpb3ZfbGVuOyB9OwotICAgICAgICBeCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1JbmRleDogZWxmdXRpbHMtMC4xNjMvYmFja2VuZHMvYWFyY2g2NF9pbml0cmVnLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2My5vcmlnL2JhY2tlbmRzL2FhcmNoNjRfaW5pdHJlZy5jCi0rKysgZWxmdXRpbHMtMC4xNjMvYmFja2VuZHMvYWFyY2g2NF9pbml0cmVnLmMKLUBAIC0zMyw3ICszMyw3IEBACi0gI2luY2x1ZGUgInN5c3RlbS5oIgotICNpbmNsdWRlIDxhc3NlcnQuaD4KLSAjaWZkZWYgX19hYXJjaDY0X18KLS0jIGluY2x1ZGUgPGxpbnV4L3Vpby5oPgotKyMgaW5jbHVkZSA8c3lzL3Vpby5oPgotICMgaW5jbHVkZSA8c3lzL3VzZXIuaD4KLSAjIGluY2x1ZGUgPHN5cy9wdHJhY2UuaD4KLSAvKiBEZWFsIHdpdGggb2xkIGdsaWJjIGRlZmluaW5nIHVzZXJfcHRfcmVncyBpbnN0ZWFkIG9mIHVzZXJfcmVnc19zdHJ1Y3QuICAqLwotQEAgLTgyLDcgKzgyLDcgQEAgYWFyY2g2NF9zZXRfaW5pdGlhbF9yZWdpc3RlcnNfdGlkIChwaWRfdAotIAotICAgRHdhcmZfV29yZCBkd2FyZl9mcmVnc1szMl07Ci0gICBmb3IgKGludCByID0gMDsgciA8IDMyOyByKyspCi0tICAgIGR3YXJmX2ZyZWdzW3JdID0gZnJlZ3MudnJlZ3Nbcl0gJiAweEZGRkZGRkZGOwotKyAgICBkd2FyZl9mcmVnc1tyXSA9ICh1bnNpZ25lZCBpbnQpZnJlZ3MudnJlZ3Nbcl0gJiAweEZGRkZGRkZGOwotIAotICAgaWYgKCEgc2V0ZnVuYyAoNjQsIDMyLCBkd2FyZl9mcmVncywgYXJnKSkKLSAgICAgcmV0dXJuIGZhbHNlOwotSW5kZXg6IGVsZnV0aWxzLTAuMTYzL2JhY2tlbmRzL2FybV9pbml0cmVnLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2My5vcmlnL2JhY2tlbmRzL2FybV9pbml0cmVnLmMKLSsrKyBlbGZ1dGlscy0wLjE2My9iYWNrZW5kcy9hcm1faW5pdHJlZy5jCi1AQCAtMzcsNyArMzcsNyBAQAotICNlbmRpZgotIAotICNpZmRlZiBfX2FhcmNoNjRfXwotLSMgaW5jbHVkZSA8bGludXgvdWlvLmg+Ci0rIyBpbmNsdWRlIDxzeXMvdWlvLmg+Ci0gIyBpbmNsdWRlIDxzeXMvdXNlci5oPgotICMgaW5jbHVkZSA8c3lzL3B0cmFjZS5oPgotIC8qIERlYWwgd2l0aCBvbGQgZ2xpYmMgZGVmaW5pbmcgdXNlcl9wdF9yZWdzIGluc3RlYWQgb2YgdXNlcl9yZWdzX3N0cnVjdC4gICovCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY4L2RlYmlhbi9odXJkX3BhdGgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY4L2RlYmlhbi9odXJkX3BhdGgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0ZDU2OGIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2OC9kZWJpYW4vaHVyZF9wYXRoLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZnJvbSBkZWJpYW5dCi1TaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+Ci0KLUluZGV4OiBlbGZ1dGlscy0wLjE2NS90ZXN0cy9ydW4tbmF0aXZlLXRlc3Quc2gKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBlbGZ1dGlscy0wLjE2NS5vcmlnL3Rlc3RzL3J1bi1uYXRpdmUtdGVzdC5zaAotKysrIGVsZnV0aWxzLTAuMTY1L3Rlc3RzL3J1bi1uYXRpdmUtdGVzdC5zaAotQEAgLTgzLDYgKzgzLDkgQEAgbmF0aXZlX3Rlc3QoKQotICMgImNhbm5vdCBhdHRhY2ggdG8gcHJvY2VzczogRnVuY3Rpb24gbm90IGltcGxlbWVudGVkIi4KLSBbICIkKHVuYW1lKSIgPSAiR05VL2tGcmVlQlNEIiBdICYmIGV4aXQgNzcKLSAKLSsjIGh1cmQncyAvcHJvYy8kUElEL21hcHMgZG9lcyBub3QgZ2l2ZSBwYXRocyB5ZXQuCi0rWyAiJCh1bmFtZSkiID0gIkdOVSIgXSAmJiBleGl0IDc3Ci0rCi0gbmF0aXZlX3Rlc3QgJHthYnNfYnVpbGRkaXJ9L2FsbHJlZ3MKLSBuYXRpdmVfdGVzdCAke2Fic19idWlsZGRpcn0vZnVuY3JldHZhbAotIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2OC9kZWJpYW4vaWdub3JlX3N0cm1lcmdlLmRpZmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY4L2RlYmlhbi9pZ25vcmVfc3RybWVyZ2UuZGlmZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU3MGRlYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY4L2RlYmlhbi9pZ25vcmVfc3RybWVyZ2UuZGlmZgorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2Zyb20gZGViaWFuXQotU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotCi0tLS0gZWxmdXRpbHMtMC4xNjUub3JpZy90ZXN0cy9ydW4tc3RyaXAtc3RybWVyZ2Uuc2gKLSsrKyBlbGZ1dGlscy0wLjE2NS90ZXN0cy9ydW4tc3RyaXAtc3RybWVyZ2Uuc2gKLUBAIC0zMCw3ICszMCw3IEBAIHJlbWVyZ2VkPXJlbWVyZ2VkLmVsZgotIHRlbXBmaWxlcyAkbWVyZ2VkICRzdHJpcHBlZCAkZGVidWdmaWxlICRyZW1lcmdlZAotIAotIGVjaG8gZWxmbGludCAkaW5wdXQKLS10ZXN0cnVuICR7YWJzX3RvcF9idWlsZGRpcn0vc3JjL2VsZmxpbnQgLS1nbnUgJGlucHV0Ci0rdGVzdHJ1bl9vbl9zZWxmX3NraXAgJHthYnNfdG9wX2J1aWxkZGlyfS9zcmMvZWxmbGludCAtLWdudSAkaW5wdXQKLSBlY2hvIGVsZnN0cm1lcmdlCi0gdGVzdHJ1biAke2Fic190b3BfYnVpbGRkaXJ9L3Rlc3RzL2VsZnN0cm1lcmdlIC1vICRtZXJnZWQgJGlucHV0Ci0gZWNobyBlbGZsaW50ICRtZXJnZWQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjgvZGViaWFuL2tmcmVlYnNkX3BhdGgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY4L2RlYmlhbi9rZnJlZWJzZF9wYXRoLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTA4NWQxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjgvZGViaWFuL2tmcmVlYnNkX3BhdGgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtmcm9tIGRlYmlhbl0KLVNpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KLQotSW5kZXg6IGIvdGVzdHMvcnVuLW5hdGl2ZS10ZXN0LnNoCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gYS90ZXN0cy9ydW4tbmF0aXZlLXRlc3Quc2gKLSsrKyBiL3Rlc3RzL3J1bi1uYXRpdmUtdGVzdC5zaAotQEAgLTc3LDYgKzc3LDEyIEBAIG5hdGl2ZV90ZXN0KCkKLSAgIHRlc3QgJG5hdGl2ZSAtZXEgMCB8fCB0ZXN0cnVuICIkQCIgLXAgJG5hdGl2ZSA+IC9kZXYvbnVsbAotIH0KLSAKLSsjIE9uIHRoZSBEZWJpYW4gYnVpbGRkcywgR05VL2tGcmVlQlNEIGxpbnByb2NmcyAvcHJvYy8kUElEL21hcHMgZG9lcwotKyMgbm90IGdpdmUgYWJzb2x1dGUgcGF0aHMgZHVlIHRvIHNidWlsZCdzIGJpbmQgbW91bnRzIChidWcgIzU3MDgwNSkKLSsjIHRoZXJlZm9yZSB0aGUgbmV4dCB0d28gdGVzdCBwcm9ncmFtcyBhcmUgZXhwZWN0ZWQgdG8gZmFpbCB3aXRoCi0rIyAiY2Fubm90IGF0dGFjaCB0byBwcm9jZXNzOiBGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQiLgotK1sgIiQodW5hbWUpIiA9ICJHTlUva0ZyZWVCU0QiIF0gJiYgZXhpdCA3NwotKwotIG5hdGl2ZV90ZXN0ICR7YWJzX2J1aWxkZGlyfS9hbGxyZWdzCi0gbmF0aXZlX3Rlc3QgJHthYnNfYnVpbGRkaXJ9L2Z1bmNyZXR2YWwKLSAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjgvZGViaWFuL21pcHNfYmFja2VuZC5kaWZmIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2OC9kZWJpYW4vbWlwc19iYWNrZW5kLmRpZmYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1ZTc2ZGQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2OC9kZWJpYW4vbWlwc19iYWNrZW5kLmRpZmYKKysrIC9kZXYvbnVsbApAQCAtMSw2ODYgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZnJvbSBkZWJpYW5dCi1TaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+Ci0KLUluZGV4OiBiL2JhY2tlbmRzL21pcHNfaW5pdC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9iYWNrZW5kcy9taXBzX2luaXQuYwotQEAgLTAsMCArMSw1OSBAQAotKy8qIEluaXRpYWxpemF0aW9uIG9mIG1pcHMgc3BlY2lmaWMgYmFja2VuZCBsaWJyYXJ5LgotKyAgIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0LCBJbmMuCi0rICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KLSsKLSsgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSsgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSsgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KLSsKLSsgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLSsgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KLSsKLSsgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCi0rICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCi0rICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50Ci0rICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KLSsgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgotKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCi0rICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCi0rCi0rI2lmZGVmIEhBVkVfQ09ORklHX0gKLSsjIGluY2x1ZGUgPGNvbmZpZy5oPgotKyNlbmRpZgotKwotKyNkZWZpbmUgQkFDS0VORAkJbWlwc18KLSsjZGVmaW5lIFJFTE9DX1BSRUZJWAlSX01JUFNfCi0rI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKLSsKLSsvKiBUaGlzIGRlZmluZXMgdGhlIGNvbW1vbiByZWxvYyBob29rcyBiYXNlZCBvbiBtaXBzX3JlbG9jLmRlZi4gICovCi0rI2luY2x1ZGUgImNvbW1vbi1yZWxvYy5jIgotKwotK2NvbnN0IGNoYXIgKgotK21pcHNfaW5pdCAoRWxmICplbGYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAotKyAgICAgR0VsZl9IYWxmIG1hY2hpbmUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAotKyAgICAgRWJsICplaCwKLSsgICAgIHNpemVfdCBlaGxlbikKLSt7Ci0rICAvKiBDaGVjayB3aGV0aGVyIHRoZSBFbGZfQkggb2JqZWN0IGhhcyBhIHN1ZmZpY2VudCBzaXplLiAgKi8KLSsgIGlmIChlaGxlbiA8IHNpemVvZiAoRWJsKSkKLSsgICAgcmV0dXJuIE5VTEw7Ci0rCi0rICAvKiBXZSBoYW5kbGUgaXQuICAqLwotKyAgaWYgKG1hY2hpbmUgPT0gRU1fTUlQUykKLSsgICAgZWgtPm5hbWUgPSAiTUlQUyBSMzAwMCBiaWctZW5kaWFuIjsKLSsgIGVsc2UgaWYgKG1hY2hpbmUgPT0gRU1fTUlQU19SUzNfTEUpCi0rICAgIGVoLT5uYW1lID0gIk1JUFMgUjMwMDAgbGl0dGxlLWVuZGlhbiI7Ci0rCi0rICBtaXBzX2luaXRfcmVsb2MgKGVoKTsKLSsgIEhPT0sgKGVoLCByZWxvY19zaW1wbGVfdHlwZSk7Ci0rICBIT09LIChlaCwgcmV0dXJuX3ZhbHVlX2xvY2F0aW9uKTsKLSsgIEhPT0sgKGVoLCByZWdpc3Rlcl9pbmZvKTsKLSsKLSsgIHJldHVybiBNT0RWRVJTSU9OOwotK30KLUluZGV4OiBiL2JhY2tlbmRzL21pcHNfcmVncy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9iYWNrZW5kcy9taXBzX3JlZ3MuYwotQEAgLTAsMCArMSwxMDQgQEAKLSsvKiBSZWdpc3RlciBuYW1lcyBhbmQgbnVtYmVycyBmb3IgTUlQUyBEV0FSRi4KLSsgICBDb3B5cmlnaHQgKEMpIDIwMDYgUmVkIEhhdCwgSW5jLgotKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCi0rCi0rICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0rICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0rICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCi0rCi0rICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSsgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSsgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSsgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSsgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCi0rCi0rICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgotKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAotKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAotKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCi0rICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KLSsgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQotKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLwotKwotKyNpZmRlZiBIQVZFX0NPTkZJR19ICi0rIyBpbmNsdWRlIDxjb25maWcuaD4KLSsjZW5kaWYKLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGR3YXJmLmg+Ci0rCi0rI2RlZmluZSBCQUNLRU5EIG1pcHNfCi0rI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKLSsKLStzc2l6ZV90Ci0rbWlwc19yZWdpc3Rlcl9pbmZvIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSwKLSsJCSAgICBpbnQgcmVnbm8sIGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAotKwkJICAgIGNvbnN0IGNoYXIgKipwcmVmaXgsIGNvbnN0IGNoYXIgKipzZXRuYW1lLAotKwkJICAgIGludCAqYml0cywgaW50ICp0eXBlKQotK3sKLSsgIGlmIChuYW1lID09IE5VTEwpCi0rICAgIHJldHVybiA2NjsKLSsKLSsgIGlmIChyZWdubyA8IDAgfHwgcmVnbm8gPiA2NSB8fCBuYW1lbGVuIDwgNCkKLSsgICAgcmV0dXJuIC0xOwotKwotKyAgKnByZWZpeCA9ICIkIjsKLSsKLSsgIGlmIChyZWdubyA8IDMyKQotKyAgICB7Ci0rICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7Ci0rICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOwotKyAgICAgICpiaXRzID0gMzI7Ci0rICAgICAgaWYgKHJlZ25vIDwgMzIgKyAxMCkKLSsgICAgICAgIHsKLSsgICAgICAgICAgbmFtZVswXSA9IHJlZ25vICsgJzAnOwotKyAgICAgICAgICBuYW1lbGVuID0gMTsKLSsgICAgICAgIH0KLSsgICAgICBlbHNlCi0rICAgICAgICB7Ci0rICAgICAgICAgIG5hbWVbMF0gPSAocmVnbm8gLyAxMCkgKyAnMCc7Ci0rICAgICAgICAgIG5hbWVbMV0gPSAocmVnbm8gJSAxMCkgKyAnMCc7Ci0rICAgICAgICAgIG5hbWVsZW4gPSAyOwotKyAgICAgICAgfQotKyAgICB9Ci0rICBlbHNlIGlmIChyZWdubyA8IDY0KQotKyAgICB7Ci0rICAgICAgKnNldG5hbWUgPSAiRlBVIjsKLSsgICAgICAqdHlwZSA9IERXX0FURV9mbG9hdDsKLSsgICAgICAqYml0cyA9IDMyOwotKyAgICAgIG5hbWVbMF0gPSAnZic7Ci0rICAgICAgaWYgKHJlZ25vIDwgMzIgKyAxMCkKLSsJewotKwkgIG5hbWVbMV0gPSAocmVnbm8gLSAzMikgKyAnMCc7Ci0rCSAgbmFtZWxlbiA9IDI7Ci0rCX0KLSsgICAgICBlbHNlCi0rCXsKLSsJICBuYW1lWzFdID0gKHJlZ25vIC0gMzIpIC8gMTAgKyAnMCc7Ci0rCSAgbmFtZVsyXSA9IChyZWdubyAtIDMyKSAlIDEwICsgJzAnOwotKwkgIG5hbWVsZW4gPSAzOwotKwl9Ci0rICAgIH0KLSsgIGVsc2UgaWYgKHJlZ25vID09IDY0KQotKyAgICB7Ci0rICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOwotKyAgICAgICpiaXRzID0gMzI7Ci0rICAgICAgbmFtZVswXSA9ICdoJzsKLSsgICAgICBuYW1lWzFdID0gJ2knOwotKyAgICAgIG5hbWVsZW4gPSAyOwotKyAgICB9Ci0rICBlbHNlCi0rICAgIHsKLSsgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7Ci0rICAgICAgKmJpdHMgPSAzMjsKLSsgICAgICBuYW1lWzBdID0gJ2wnOwotKyAgICAgIG5hbWVbMV0gPSAnbyc7Ci0rICAgICAgbmFtZWxlbiA9IDI7Ci0rICAgIH0KLSsKLSsgIG5hbWVbbmFtZWxlbisrXSA9ICdcMCc7Ci0rICByZXR1cm4gbmFtZWxlbjsKLSt9Ci1JbmRleDogYi9iYWNrZW5kcy9taXBzX3JlbG9jLmRlZgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIC9kZXYvbnVsbAotKysrIGIvYmFja2VuZHMvbWlwc19yZWxvYy5kZWYKLUBAIC0wLDAgKzEsNzkgQEAKLSsvKiBMaXN0IHRoZSByZWxvY2F0aW9uIHR5cGVzIGZvciBtaXBzLiAgLSotIEMgLSotCi0rICAgQ29weXJpZ2h0IChDKSAyMDA2IFJlZCBIYXQsIEluYy4KLSsgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgotKwotKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgotKwotKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0rICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0rICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0rICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0rICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgotKwotKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KLSsgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKLSsgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKLSsgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgotKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCi0rICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KLSsgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KLSsKLSsvKiAJICAgIE5BTUUsCQlSRUx8RVhFQ3xEWU4JKi8KLSsKLStSRUxPQ19UWVBFIChOT05FLCAgICAgICAgICAgICAgIDApCi0rUkVMT0NfVFlQRSAoMTYsICAgICAgICAgICAgICAgICAwKQotK1JFTE9DX1RZUEUgKDMyLCAgICAgICAgICAgICAgICAgMCkKLStSRUxPQ19UWVBFIChSRUwzMiwgICAgICAgICAgICAgIDApCi0rUkVMT0NfVFlQRSAoMjYsICAgICAgICAgICAgICAgICAwKQotK1JFTE9DX1RZUEUgKEhJMTYsICAgICAgICAgICAgICAgMCkKLStSRUxPQ19UWVBFIChMTzE2LCAgICAgICAgICAgICAgIDApCi0rUkVMT0NfVFlQRSAoR1BSRUwxNiwgICAgICAgICAgICAwKQotK1JFTE9DX1RZUEUgKExJVEVSQUwsICAgICAgICAgICAgMCkKLStSRUxPQ19UWVBFIChHT1QxNiwgICAgICAgICAgICAgIDApCi0rUkVMT0NfVFlQRSAoUEMxNiwgICAgICAgICAgICAgICAwKQotK1JFTE9DX1RZUEUgKENBTEwxNiwgICAgICAgICAgICAgMCkKLStSRUxPQ19UWVBFIChHUFJFTDMyLCAgICAgICAgICAgIDApCi0rCi0rUkVMT0NfVFlQRSAoU0hJRlQ1LCAgICAgICAgICAgICAwKQotK1JFTE9DX1RZUEUgKFNISUZUNiwgICAgICAgICAgICAgMCkKLStSRUxPQ19UWVBFICg2NCwgICAgICAgICAgICAgICAgIDApCi0rUkVMT0NfVFlQRSAoR09UX0RJU1AsICAgICAgICAgICAwKQotK1JFTE9DX1RZUEUgKEdPVF9QQUdFLCAgICAgICAgICAgMCkKLStSRUxPQ19UWVBFIChHT1RfT0ZTVCwgICAgICAgICAgIDApCi0rUkVMT0NfVFlQRSAoR09UX0hJMTYsICAgICAgICAgICAwKQotK1JFTE9DX1RZUEUgKEdPVF9MTzE2LCAgICAgICAgICAgMCkKLStSRUxPQ19UWVBFIChTVUIsICAgICAgICAgICAgICAgIDApCi0rUkVMT0NfVFlQRSAoSU5TRVJUX0EsICAgICAgICAgICAwKQotK1JFTE9DX1RZUEUgKElOU0VSVF9CLCAgICAgICAgICAgMCkKLStSRUxPQ19UWVBFIChERUxFVEUsICAgICAgICAgICAgIDApCi0rUkVMT0NfVFlQRSAoSElHSEVSLCAgICAgICAgICAgICAwKQotK1JFTE9DX1RZUEUgKEhJR0hFU1QsICAgICAgICAgICAgMCkKLStSRUxPQ19UWVBFIChDQUxMX0hJMTYsICAgICAgICAgIDApCi0rUkVMT0NfVFlQRSAoQ0FMTF9MTzE2LCAgICAgICAgICAwKQotK1JFTE9DX1RZUEUgKFNDTl9ESVNQLCAgICAgICAgICAgMCkKLStSRUxPQ19UWVBFIChSRUwxNiwgICAgICAgICAgICAgIDApCi0rUkVMT0NfVFlQRSAoQUREX0lNTUVESUFURSwgICAgICAwKQotK1JFTE9DX1RZUEUgKFBKVU1QLCAgICAgICAgICAgICAgMCkKLStSRUxPQ19UWVBFIChSRUxHT1QsICAgICAgICAgICAgIDApCi0rUkVMT0NfVFlQRSAoSkFMUiwgICAgICAgICAgICAgICAwKQotK1JFTE9DX1RZUEUgKFRMU19EVFBNT0QzMiwgICAgICAgMCkKLStSRUxPQ19UWVBFIChUTFNfRFRQUkVMMzIsICAgICAgIDApCi0rUkVMT0NfVFlQRSAoVExTX0RUUE1PRDY0LCAgICAgICAwKQotK1JFTE9DX1RZUEUgKFRMU19EVFBSRUw2NCwgICAgICAgMCkKLStSRUxPQ19UWVBFIChUTFNfR0QsICAgICAgICAgICAgIDApCi0rUkVMT0NfVFlQRSAoVExTX0xETSwgICAgICAgICAgICAwKQotK1JFTE9DX1RZUEUgKFRMU19EVFBSRUxfSEkxNiwgICAgMCkKLStSRUxPQ19UWVBFIChUTFNfRFRQUkVMX0xPMTYsICAgIDApCi0rUkVMT0NfVFlQRSAoVExTX0dPVFRQUkVMLCAgICAgICAwKQotK1JFTE9DX1RZUEUgKFRMU19UUFJFTDMyLCAgICAgICAgMCkKLStSRUxPQ19UWVBFIChUTFNfVFBSRUw2NCwgICAgICAgIDApCi0rUkVMT0NfVFlQRSAoVExTX1RQUkVMX0hJMTYsICAgICAwKQotK1JFTE9DX1RZUEUgKFRMU19UUFJFTF9MTzE2LCAgICAgMCkKLSsKLSsjZGVmaW5lIE5PX0NPUFlfUkVMT0MgMQotKyNkZWZpbmUgTk9fUkVMQVRJVkVfUkVMT0MgMQotSW5kZXg6IGIvYmFja2VuZHMvbWlwc19yZXR2YWwuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIC9kZXYvbnVsbAotKysrIGIvYmFja2VuZHMvbWlwc19yZXR2YWwuYwotQEAgLTAsMCArMSwzMjEgQEAKLSsvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgbG9jYXRpb24gZm9yIExpbnV4L21pcHMgQUJJLgotKyAgIENvcHlyaWdodCAoQykgMjAwNSBSZWQgSGF0LCBJbmMuCi0rICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KLSsKLSsgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSsgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSsgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KLSsKLSsgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLSsgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KLSsKLSsgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCi0rICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCi0rICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50Ci0rICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KLSsgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgotKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCi0rICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCi0rCi0rI2lmZGVmIEhBVkVfQ09ORklHX0gKLSsjIGluY2x1ZGUgPGNvbmZpZy5oPgotKyNlbmRpZgotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0rI2luY2x1ZGUgPGR3YXJmLmg+Ci0rI2luY2x1ZGUgPGVsZi5oPgotKwotKyNpbmNsdWRlICIuLi9saWJlYmwvbGliZWJsUC5oIgotKyNpbmNsdWRlICIuLi9saWJkdy9saWJkd1AuaCIKLSsKLSsjZGVmaW5lIEJBQ0tFTkQgbWlwc18KLSsjaW5jbHVkZSAibGliZWJsX0NQVS5oIgotKwotKy8qIFRoZSBBQkkgb2YgdGhlIGZpbGUuICBBbHNvIHNlZSBFRl9NSVBTX0FCSTIgYWJvdmUuICovCi0rI2RlZmluZSBFRl9NSVBTX0FCSQkJMHgwMDAwRjAwMAotKwotKy8qIFRoZSBvcmlnaW5hbCBvMzIgYWJpLiAqLwotKyNkZWZpbmUgRV9NSVBTX0FCSV9PMzIgICAgICAgICAgMHgwMDAwMTAwMAotKwotKy8qIE8zMiBleHRlbmRlZCB0byB3b3JrIG9uIDY0IGJpdCBhcmNoaXRlY3R1cmVzICovCi0rI2RlZmluZSBFX01JUFNfQUJJX082NCAgICAgICAgICAweDAwMDAyMDAwCi0rCi0rLyogRUFCSSBpbiAzMiBiaXQgbW9kZSAqLwotKyNkZWZpbmUgRV9NSVBTX0FCSV9FQUJJMzIgICAgICAgMHgwMDAwMzAwMAotKwotKy8qIEVBQkkgaW4gNjQgYml0IG1vZGUgKi8KLSsjZGVmaW5lIEVfTUlQU19BQklfRUFCSTY0ICAgICAgIDB4MDAwMDQwMDAKLSsKLSsvKiBBbGwgdGhlIHBvc3NpYmxlIE1JUFMgQUJJcy4gKi8KLStlbnVtIG1pcHNfYWJpCi0rICB7Ci0rICAgIE1JUFNfQUJJX1VOS05PV04gPSAwLAotKyAgICBNSVBTX0FCSV9OMzIsCi0rICAgIE1JUFNfQUJJX08zMiwKLSsgICAgTUlQU19BQklfTjY0LAotKyAgICBNSVBTX0FCSV9PNjQsCi0rICAgIE1JUFNfQUJJX0VBQkkzMiwKLSsgICAgTUlQU19BQklfRUFCSTY0LAotKyAgICBNSVBTX0FCSV9MQVNUCi0rICB9OwotKwotKy8qIEZpbmQgdGhlIG1pcHMgQUJJIG9mIHRoZSBjdXJyZW50IGZpbGUgKi8KLStlbnVtIG1pcHNfYWJpIGZpbmRfbWlwc19hYmkoRWxmICplbGYpCi0rewotKyAgR0VsZl9FaGRyIGVoZHJfbWVtOwotKyAgR0VsZl9FaGRyICplaGRyID0gZ2VsZl9nZXRlaGRyIChlbGYsICZlaGRyX21lbSk7Ci0rCi0rICBpZiAoZWhkciA9PSBOVUxMKQotKyAgICByZXR1cm4gTUlQU19BQklfTEFTVDsKLSsKLSsgIEdFbGZfV29yZCBlbGZfZmxhZ3MgPSBlaGRyLT5lX2ZsYWdzOwotKwotKyAgLyogQ2hlY2sgZWxmX2ZsYWdzIHRvIHNlZSBpZiBpdCBzcGVjaWZpZXMgdGhlIEFCSSBiZWluZyB1c2VkLiAgKi8KLSsgIHN3aXRjaCAoKGVsZl9mbGFncyAmIEVGX01JUFNfQUJJKSkKLSsgICAgewotKyAgICBjYXNlIEVfTUlQU19BQklfTzMyOgotKyAgICAgIHJldHVybiBNSVBTX0FCSV9PMzI7Ci0rICAgIGNhc2UgRV9NSVBTX0FCSV9PNjQ6Ci0rICAgICAgcmV0dXJuIE1JUFNfQUJJX082NDsKLSsgICAgY2FzZSBFX01JUFNfQUJJX0VBQkkzMjoKLSsgICAgICByZXR1cm4gTUlQU19BQklfRUFCSTMyOwotKyAgICBjYXNlIEVfTUlQU19BQklfRUFCSTY0OgotKyAgICAgIHJldHVybiBNSVBTX0FCSV9FQUJJNjQ7Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgaWYgKChlbGZfZmxhZ3MgJiBFRl9NSVBTX0FCSTIpKQotKwlyZXR1cm4gTUlQU19BQklfTjMyOwotKyAgICB9Ci0rCi0rICAvKiBHQ0MgY3JlYXRlcyBhIHBzZXVkby1zZWN0aW9uIHdob3NlIG5hbWUgZGVzY3JpYmVzIHRoZSBBQkkuICAqLwotKyAgc2l6ZV90IHNoc3RybmR4OwotKyAgaWYgKGVsZl9nZXRzaGRyc3RybmR4IChlbGYsICZzaHN0cm5keCkgPCAwKQotKyAgICByZXR1cm4gTUlQU19BQklfTEFTVDsKLSsKLSsgIGNvbnN0IGNoYXIgKm5hbWU7Ci0rICBFbGZfU2NuICpzY24gPSBOVUxMOwotKyAgd2hpbGUgKChzY24gPSBlbGZfbmV4dHNjbiAoZWxmLCBzY24pKSAhPSBOVUxMKQotKyAgICB7Ci0rICAgICAgR0VsZl9TaGRyIHNoZHJfbWVtOwotKyAgICAgIEdFbGZfU2hkciAqc2hkciA9IGdlbGZfZ2V0c2hkciAoc2NuLCAmc2hkcl9tZW0pOwotKyAgICAgIGlmIChzaGRyID09IE5VTEwpCi0rICAgICAgICByZXR1cm4gTUlQU19BQklfTEFTVDsKLSsKLSsgICAgICBuYW1lID0gZWxmX3N0cnB0ciAoZWxmLCBzaHN0cm5keCwgc2hkci0+c2hfbmFtZSkgPzogIiI7Ci0rICAgICAgaWYgKHN0cm5jbXAgKG5hbWUsICIubWRlYnVnLiIsIDgpICE9IDApCi0rICAgICAgICBjb250aW51ZTsKLSsKLSsgICAgICBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5hYmkzMiIpID09IDApCi0rICAgICAgICByZXR1cm4gTUlQU19BQklfTzMyOwotKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuYWJpTjMyIikgPT0gMCkKLSsgICAgICAgIHJldHVybiBNSVBTX0FCSV9OMzI7Ci0rICAgICAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5hYmk2NCIpID09IDApCi0rICAgICAgICByZXR1cm4gTUlQU19BQklfTjY0OwotKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuYWJpTzY0IikgPT0gMCkKLSsgICAgICAgIHJldHVybiBNSVBTX0FCSV9PNjQ7Ci0rICAgICAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5lYWJpMzIiKSA9PSAwKQotKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX0VBQkkzMjsKLSsgICAgICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmVhYmk2NCIpID09IDApCi0rICAgICAgICByZXR1cm4gTUlQU19BQklfRUFCSTY0OwotKyAgICAgIGVsc2UKLSsgICAgICAgIHJldHVybiBNSVBTX0FCSV9VTktOT1dOOwotKyAgICB9Ci0rCi0rICByZXR1cm4gTUlQU19BQklfVU5LTk9XTjsKLSt9Ci0rCi0rdW5zaWduZWQgaW50Ci0rbWlwc19hYmlfcmVnc2l6ZSAoZW51bSBtaXBzX2FiaSBhYmkpCi0rewotKyAgc3dpdGNoIChhYmkpCi0rICAgIHsKLSsgICAgY2FzZSBNSVBTX0FCSV9FQUJJMzI6Ci0rICAgIGNhc2UgTUlQU19BQklfTzMyOgotKyAgICAgIHJldHVybiA0OwotKyAgICBjYXNlIE1JUFNfQUJJX04zMjoKLSsgICAgY2FzZSBNSVBTX0FCSV9ONjQ6Ci0rICAgIGNhc2UgTUlQU19BQklfTzY0OgotKyAgICBjYXNlIE1JUFNfQUJJX0VBQkk2NDoKLSsgICAgICByZXR1cm4gODsKLSsgICAgY2FzZSBNSVBTX0FCSV9VTktOT1dOOgotKyAgICBjYXNlIE1JUFNfQUJJX0xBU1Q6Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSt9Ci0rCi0rCi0rLyogJHYwIG9yIHBhaXIgJHYwLCAkdjEgKi8KLStzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZ19vMzJbXSA9Ci0rICB7Ci0rICAgIHsgLmF0b20gPSBEV19PUF9yZWcyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKLSsgICAgeyAuYXRvbSA9IERXX09QX3JlZzMgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAotKyAgfTsKLSsKLStzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZ1tdID0KLSsgIHsKLSsgICAgeyAuYXRvbSA9IERXX09QX3JlZzIgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAotKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMyB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCi0rICB9OwotKyNkZWZpbmUgbmxvY19pbnRyZWcJMQotKyNkZWZpbmUgbmxvY19pbnRyZWdwYWlyCTQKLSsKLSsvKiAkZjAgKGZsb2F0KSwgb3IgcGFpciAkZjAsICRmMSAoZG91YmxlKS4KLSsgKiBmMi9mMyBhcmUgdXNlZCBmb3IgQ09NUExFWCAoPSAyIGRvdWJsZXMpIHJldHVybnMgaW4gRm9ydHJhbiAqLwotK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWdfbzMyW10gPQotKyAgewotKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDMyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKLSsgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzMyB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCi0rICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzQgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAotKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDM1IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKLSsgIH07Ci0rCi0rLyogJGYwLCBvciBwYWlyICRmMCwgJGYyLiAgKi8KLStzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ZwcmVnW10gPQotKyAgewotKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDMyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKLSsgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzNCB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCi0rICB9OwotKyNkZWZpbmUgbmxvY19mcHJlZyAgMQotKyNkZWZpbmUgbmxvY19mcHJlZ3BhaXIgNAotKyNkZWZpbmUgbmxvY19mcHJlZ3F1YWQgOAotKwotKy8qIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3R1cmUgYW5kIGlzIGFjdHVhbGx5IHN0b3JlZCBpbiBzdGFjayBzcGFjZQotKyAgIHBhc3NlZCBpbiBhIGhpZGRlbiBhcmd1bWVudCBieSB0aGUgY2FsbGVyLiAgQnV0LCB0aGUgY29tcGlsZXIKLSsgICBoZWxwZnVsbHkgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGF0IHNwYWNlIGluICR2MC4gICovCi0rc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19hZ2dyZWdhdGVbXSA9Ci0rICB7Ci0rICAgIHsgLmF0b20gPSBEV19PUF9icmVnMiwgLm51bWJlciA9IDAgfQotKyAgfTsKLSsjZGVmaW5lIG5sb2NfYWdncmVnYXRlIDEKLSsKLStpbnQKLSttaXBzX3JldHVybl92YWx1ZV9sb2NhdGlvbiAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQotK3sKLSsgIC8qIEZpcnN0IGZpbmQgdGhlIEFCSSB1c2VkIGJ5IHRoZSBlbGYgb2JqZWN0ICovCi0rICBlbnVtIG1pcHNfYWJpIGFiaSA9IGZpbmRfbWlwc19hYmkoZnVuY3R5cGVkaWUtPmN1LT5kYmctPmVsZik7Ci0rCi0rICAvKiBTb21ldGhpbmcgd2VudCBzZXJpb3VzbHkgd3Jvbmcgd2hpbGUgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIEFCSSAqLwotKyAgaWYgKGFiaSA9PSBNSVBTX0FCSV9MQVNUKQotKyAgICByZXR1cm4gLTE7Ci0rCi0rICAvKiBXZSBjb3VsZG4ndCBpZGVudGlmeSB0aGUgQUJJLCBidXQgdGhlIGZpbGUgc2VlbXMgdmFsaWQgKi8KLSsgIGlmIChhYmkgPT0gTUlQU19BQklfVU5LTk9XTikKLSsgICAgcmV0dXJuIC0yOwotKwotKyAgLyogQ2FuJ3QgaGFuZGxlIEVBQkkgdmFyaWFudHMgKi8KLSsgIGlmICgoYWJpID09IE1JUFNfQUJJX0VBQkkzMikgfHwgKGFiaSA9PSBNSVBTX0FCSV9FQUJJNjQpKQotKyAgICByZXR1cm4gLTI7Ci0rCi0rICB1bnNpZ25lZCBpbnQgcmVnc2l6ZSA9IG1pcHNfYWJpX3JlZ3NpemUgKGFiaSk7Ci0rICBpZiAoIXJlZ3NpemUpCi0rICAgIHJldHVybiAtMjsKLSsKLSsgIC8qIFN0YXJ0IHdpdGggdGhlIGZ1bmN0aW9uJ3MgdHlwZSwgYW5kIGdldCB0aGUgRFdfQVRfdHlwZSBhdHRyaWJ1dGUsCi0rICAgICB3aGljaCBpcyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgKi8KLSsKLSsgIER3YXJmX0F0dHJpYnV0ZSBhdHRyX21lbTsKLSsgIER3YXJmX0F0dHJpYnV0ZSAqYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlIChmdW5jdHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKLSsgIGlmIChhdHRyID09IE5VTEwpCi0rICAgIC8qIFRoZSBmdW5jdGlvbiBoYXMgbm8gcmV0dXJuIHZhbHVlLCBsaWtlIGEgYHZvaWQnIGZ1bmN0aW9uIGluIEMuICAqLwotKyAgICByZXR1cm4gMDsKLSsKLSsgIER3YXJmX0RpZSBkaWVfbWVtOwotKyAgRHdhcmZfRGllICp0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKLSsgIGludCB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOwotKwotKyAgLyogRm9sbG93IHR5cGVkZWZzIGFuZCBxdWFsaWZpZXJzIHRvIGdldCB0byB0aGUgYWN0dWFsIHR5cGUuICAqLwotKyAgd2hpbGUgKHRhZyA9PSBEV19UQUdfdHlwZWRlZgotKwkgfHwgdGFnID09IERXX1RBR19jb25zdF90eXBlIHx8IHRhZyA9PSBEV19UQUdfdm9sYXRpbGVfdHlwZQotKwkgfHwgdGFnID09IERXX1RBR19yZXN0cmljdF90eXBlKQotKyAgICB7Ci0rICAgICAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOwotKyAgICAgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOwotKyAgICAgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7Ci0rICAgIH0KLSsKLSsgIHN3aXRjaCAodGFnKQotKyAgICB7Ci0rICAgIGNhc2UgLTE6Ci0rICAgICAgcmV0dXJuIC0xOwotKwotKyAgICBjYXNlIERXX1RBR19zdWJyYW5nZV90eXBlOgotKyAgICAgIGlmICghIGR3YXJmX2hhc2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9ieXRlX3NpemUpKQotKwl7Ci0rCSAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOwotKwkgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOwotKwkgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7Ci0rCX0KLSsgICAgICAvKiBGYWxsIHRocm91Z2guICAqLwotKwotKyAgICBjYXNlIERXX1RBR19iYXNlX3R5cGU6Ci0rICAgIGNhc2UgRFdfVEFHX2VudW1lcmF0aW9uX3R5cGU6Ci0rICAgIGNhc2UgRFdfVEFHX3BvaW50ZXJfdHlwZToKLSsgICAgY2FzZSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlOgotKyAgICAgIHsKLSsgICAgICAgIER3YXJmX1dvcmQgc2l6ZTsKLSsJaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2J5dGVfc2l6ZSwKLSsJCQkJCSAmYXR0cl9tZW0pLCAmc2l6ZSkgIT0gMCkKLSsJICB7Ci0rCSAgICBpZiAodGFnID09IERXX1RBR19wb2ludGVyX3R5cGUgfHwgdGFnID09IERXX1RBR19wdHJfdG9fbWVtYmVyX3R5cGUpCi0rCSAgICAgIHNpemUgPSByZWdzaXplOwotKwkgICAgZWxzZQotKwkgICAgICByZXR1cm4gLTE7Ci0rCSAgfQotKwlpZiAodGFnID09IERXX1RBR19iYXNlX3R5cGUpCi0rCSAgewotKwkgICAgRHdhcmZfV29yZCBlbmNvZGluZzsKLSsJICAgIGlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9lbmNvZGluZywKLSsJCQkJCSAgICAgJmF0dHJfbWVtKSwgJmVuY29kaW5nKSAhPSAwKQotKwkgICAgICByZXR1cm4gLTE7Ci0rCi0rI2RlZmluZSBBQklfTE9DKGxvYywgcmVnc2l6ZSkgKChyZWdzaXplKSA9PSA0ID8gKGxvYyAjIyBfbzMyKSA6IChsb2MpKQotKwotKwkgICAgaWYgKGVuY29kaW5nID09IERXX0FURV9mbG9hdCkKLSsJICAgICAgewotKwkJKmxvY3AgPSBBQklfTE9DKGxvY19mcHJlZywgcmVnc2l6ZSk7Ci0rCQlpZiAoc2l6ZSA8PSByZWdzaXplKQotKwkJICAgIHJldHVybiBubG9jX2ZwcmVnOwotKwotKwkJaWYgKHNpemUgPD0gMipyZWdzaXplKQotKyAgICAgICAgICAgICAgICAgIHJldHVybiBubG9jX2ZwcmVncGFpcjsKLSsKLSsJCWlmIChzaXplIDw9IDQqcmVnc2l6ZSAmJiBhYmkgPT0gTUlQU19BQklfTzMyKQotKyAgICAgICAgICAgICAgICAgIHJldHVybiBubG9jX2ZwcmVncXVhZDsKLSsKLSsJCWdvdG8gYWdncmVnYXRlOwotKwkgICAgICB9Ci0rCSAgfQotKwkqbG9jcCA9IEFCSV9MT0MobG9jX2ludHJlZywgcmVnc2l6ZSk7Ci0rCWlmIChzaXplIDw9IHJlZ3NpemUpCi0rCSAgcmV0dXJuIG5sb2NfaW50cmVnOwotKwlpZiAoc2l6ZSA8PSAyKnJlZ3NpemUpCi0rCSAgcmV0dXJuIG5sb2NfaW50cmVncGFpcjsKLSsKLSsJLyogRWxzZSBmYWxsIHRocm91Z2guIFNob3VsZG4ndCBoYXBwZW4gdGhvdWdoIChhdCBsZWFzdCB3aXRoIGdjYykgKi8KLSsgICAgICB9Ci0rCi0rICAgIGNhc2UgRFdfVEFHX3N0cnVjdHVyZV90eXBlOgotKyAgICBjYXNlIERXX1RBR19jbGFzc190eXBlOgotKyAgICBjYXNlIERXX1RBR191bmlvbl90eXBlOgotKyAgICBjYXNlIERXX1RBR19hcnJheV90eXBlOgotKyAgICBhZ2dyZWdhdGU6Ci0rICAgICAgLyogWFhYIFRPRE86IENhbid0IGhhbmRsZSBzdHJ1Y3R1cmUgcmV0dXJuIHdpdGggb3RoZXIgQUJJJ3MgeWV0IDotLyAqLwotKyAgICAgIGlmICgoYWJpICE9IE1JUFNfQUJJX08zMikgJiYgKGFiaSAhPSBNSVBTX0FCSV9PNjQpKQotKyAgICAgICAgcmV0dXJuIC0yOwotKwotKyAgICAgICpsb2NwID0gbG9jX2FnZ3JlZ2F0ZTsKLSsgICAgICByZXR1cm4gbmxvY19hZ2dyZWdhdGU7Ci0rICAgIH0KLSsKLSsgIC8qIFhYWCBXZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9ycyBmcm9tIGVibCBjYWxscy4KLSsgICAgIFRoaXMgdmFsdWUgbWVhbnMgd2UgZG8gbm90IHVuZGVyc3RhbmQgdGhlIHR5cGUsIGJ1dCBpdCBpcyB3ZWxsLWZvcm1lZAotKyAgICAgRFdBUkYgYW5kIG1pZ2h0IGJlIHZhbGlkLiAgKi8KLSsgIHJldHVybiAtMjsKLSt9Ci1JbmRleDogYi9iYWNrZW5kcy9taXBzX3N5bWJvbC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9iYWNrZW5kcy9taXBzX3N5bWJvbC5jCi1AQCAtMCwwICsxLDUyIEBACi0rLyogTUlQUyBzcGVjaWZpYyBzeW1ib2xpYyBuYW1lIGhhbmRsaW5nLgotKyAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNSBSZWQgSGF0LCBJbmMuCi0rICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KLSsgICBXcml0dGVuIGJ5IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+LCAyMDAyLgotKwotKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgotKwotKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0rICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0rICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0rICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0rICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgotKwotKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KLSsgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKLSsgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKLSsgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgotKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCi0rICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KLSsgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KLSsKLSsjaWZkZWYgSEFWRV9DT05GSUdfSAotKyMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0rI2VuZGlmCi0rCi0rI2luY2x1ZGUgPGVsZi5oPgotKyNpbmNsdWRlIDxzdGRkZWYuaD4KLSsKLSsjZGVmaW5lIEJBQ0tFTkQJCW1pcHNfCi0rI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKLSsKLSsvKiBDaGVjayBmb3IgdGhlIHNpbXBsZSByZWxvYyB0eXBlcy4gICovCi0rRWxmX1R5cGUKLSttaXBzX3JlbG9jX3NpbXBsZV90eXBlIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksIGludCB0eXBlKQotK3sKLSsgIHN3aXRjaCAodHlwZSkKLSsgICAgewotKyAgICBjYXNlIFJfTUlQU18xNjoKLSsgICAgICByZXR1cm4gRUxGX1RfSEFMRjsKLSsgICAgY2FzZSBSX01JUFNfMzI6Ci0rICAgICAgcmV0dXJuIEVMRl9UX1dPUkQ7Ci0rICAgIGNhc2UgUl9NSVBTXzY0OgotKyAgICAgIHJldHVybiBFTEZfVF9YV09SRDsKLSsgICAgZGVmYXVsdDoKLSsgICAgICByZXR1cm4gRUxGX1RfTlVNOwotKyAgICB9Ci0rfQotSW5kZXg6IGIvbGliZWJsL2VibG9wZW5iYWNrZW5kLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBhL2xpYmVibC9lYmxvcGVuYmFja2VuZC5jCi0rKysgYi9saWJlYmwvZWJsb3BlbmJhY2tlbmQuYwotQEAgLTcxLDYgKzcxLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdAotICAgeyAic3BhcmMiLCAiZWxmX3NwYXJjIiwgInNwYXJjIiwgNSwgRU1fU1BBUkMsIDAsIDAgfSwKLSAgIHsgInNwYXJjIiwgImVsZl9zcGFyY3Y4cGx1cyIsICJzcGFyYyIsIDUsIEVNX1NQQVJDMzJQTFVTLCAwLCAwIH0sCi0gICB7ICJzMzkwIiwgImVibF9zMzkwIiwgInMzOTAiLCA0LCBFTV9TMzkwLCAwLCAwIH0sCi0rICB7ICJtaXBzIiwgImVsZl9taXBzIiwgIm1pcHMiLCA0LCBFTV9NSVBTLCAwLCAwIH0sCi0rICB7ICJtaXBzIiwgImVsZl9taXBzZWwiLCAibWlwc2VsIiwgNCwgRU1fTUlQU19SUzNfTEUsIDAsIDAgfSwKLSAKLSAgIHsgIm0zMiIsICJlbGZfbTMyIiwgIm0zMiIsIDMsIEVNX00zMiwgMCwgMCB9LAotICAgeyAibTY4ayIsICJlbGZfbTY4ayIsICJtNjhrIiwgNCwgRU1fNjhLLCBFTEZDTEFTUzMyLCBFTEZEQVRBMk1TQiB9LAotSW5kZXg6IGIvYmFja2VuZHMvTWFrZWZpbGUuYW0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBhL2JhY2tlbmRzL01ha2VmaWxlLmFtCi0rKysgYi9iYWNrZW5kcy9NYWtlZmlsZS5hbQotQEAgLTMzLDEyICszMywxMiBAQCBBTV9DUFBGTEFHUyArPSAtSSQodG9wX3NyY2RpcikvbGliZWJsIC1JCi0gCi0gCi0gbW9kdWxlcyA9IGkzODYgc2ggeDg2XzY0IGlhNjQgYWxwaGEgYXJtIGFhcmNoNjQgc3BhcmMgcHBjIHBwYzY0IHMzOTAgXAotLQkgIHRpbGVneCBtNjhrIGJwZiBwYXJpc2MKLSsJICB0aWxlZ3ggbTY4ayBicGYgcGFyaXNjIG1pcHMKLSBsaWJlYmxfcGljID0gbGliZWJsX2kzODZfcGljLmEgbGliZWJsX3NoX3BpYy5hIGxpYmVibF94ODZfNjRfcGljLmEgICAgXAotIAkgICAgIGxpYmVibF9pYTY0X3BpYy5hIGxpYmVibF9hbHBoYV9waWMuYSBsaWJlYmxfYXJtX3BpYy5hICAgIFwKLSAJICAgICBsaWJlYmxfYWFyY2g2NF9waWMuYSBsaWJlYmxfc3BhcmNfcGljLmEgbGliZWJsX3BwY19waWMuYSBcCi0gCSAgICAgbGliZWJsX3BwYzY0X3BpYy5hIGxpYmVibF9zMzkwX3BpYy5hIGxpYmVibF90aWxlZ3hfcGljLmEgXAotLQkgICAgIGxpYmVibF9tNjhrX3BpYy5hIGxpYmVibF9icGZfcGljLmEgbGliZWJsX3BhcmlzY19waWMuYQotKwkgICAgIGxpYmVibF9tNjhrX3BpYy5hIGxpYmVibF9icGZfcGljLmEgbGliZWJsX3BhcmlzY19waWMuYSBsaWJlYmxfbWlwc19waWMuYQotIG5vaW5zdF9MSUJSQVJJRVMgPSAkKGxpYmVibF9waWMpCi0gbm9pbnN0X0RBVEEgPSAkKGxpYmVibF9waWM6X3BpYy5hPS5zbykKLSAKLUBAIC0xMzIsNiArMTMyLDEwIEBAIHBhcmlzY19TUkNTID0gcGFyaXNjX2luaXQuYyBwYXJpc2Nfc3ltYm8KLSBsaWJlYmxfcGFyaXNjX3BpY19hX1NPVVJDRVMgPSAkKHBhcmlzY19TUkNTKQotIGFtX2xpYmVibF9wYXJpc2NfcGljX2FfT0JKRUNUUyA9ICQocGFyaXNjX1NSQ1M6LmM9Lm9zKQotIAotK21pcHNfU1JDUyA9IG1pcHNfaW5pdC5jIG1pcHNfc3ltYm9sLmMgbWlwc19yZWdzLmMgbWlwc19yZXR2YWwuYwotK2xpYmVibF9taXBzX3BpY19hX1NPVVJDRVMgPSAkKG1pcHNfU1JDUykKLSthbV9saWJlYmxfbWlwc19waWNfYV9PQkpFQ1RTID0gJChtaXBzX1NSQ1M6LmM9Lm9zKQotKwotIGxpYmVibF8lLnNvIGxpYmVibF8lLm1hcDogbGliZWJsXyVfcGljLmEgJChsaWJlbGYpICQobGliZHcpCi0gCUBybSAtZiAkKEA6LnNvPS5tYXApCi0gCSQoQU1fVl9hdCllY2hvICdFTEZVVElMU18kKFBBQ0tBR0VfVkVSU0lPTikgeyBnbG9iYWw6ICQqX2luaXQ7IGxvY2FsOiAqOyB9OycgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2OC9kZWJpYW4vdGVzdHN1aXRlLWlnbm9yZS1lbGZsaW50LmRpZmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY4L2RlYmlhbi90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RmMzU3Ni4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY4L2RlYmlhbi90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZgorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLU9uIG1hbnkgYXJjaGl0ZWN0dXJlcyB0aGlzIHRlc3QgZmFpbHMgYmVjYXVzZSBiaW5hcmllcy9saWJzIHByb2R1Y2VkIGJ5Ci1iaW51dGlscyBkb24ndCBwYXNzIGVsZmxpbnQuIEhvd2V2ZXIgZWxmdXRpbHMgc2hvdWxkbid0IEZUQkZTIGJlY2F1c2Ugb2YgdGhpcy4KLQotU28gd2UgcnVuIHRoZSB0ZXN0cyBvbiBhbGwgYXJjaHMgdG8gc2VlIHdoYXQgYnJlYWtzLCBidXQgaWYgaXQgYnJlYWtzIHdlIGlnbm9yZQotdGhlIHJlc3VsdCAoZXhpdGNvZGUgNzcgbWVhbnM6IHRoaXMgdGVzdCB3YXMgc2tpcHBlZCkuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2Zyb20gZGViaWFuXQotU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotCi1JbmRleDogYi90ZXN0cy9ydW4tZWxmbGludC1zZWxmLnNoCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gYS90ZXN0cy9ydW4tZWxmbGludC1zZWxmLnNoCi0rKysgYi90ZXN0cy9ydW4tZWxmbGludC1zZWxmLnNoCi1AQCAtMTgsNCArMTgsNCBAQAotIAotIC4gJHNyY2Rpci90ZXN0LXN1YnIuc2gKLSAKLS10ZXN0cnVuX29uX3NlbGYgJHthYnNfdG9wX2J1aWxkZGlyfS9zcmMvZWxmbGludCAtLXF1aWV0IC0tZ251LWxkCi0rdGVzdHJ1bl9vbl9zZWxmX3NraXAgJHthYnNfdG9wX2J1aWxkZGlyfS9zcmMvZWxmbGludCAtLXF1aWV0IC0tZ251LWxkCi1JbmRleDogYi90ZXN0cy90ZXN0LXN1YnIuc2gKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBhL3Rlc3RzL3Rlc3Qtc3Vici5zaAotKysrIGIvdGVzdHMvdGVzdC1zdWJyLnNoCi1AQCAtMTUyLDMgKzE1MiwxOCBAQCB0ZXN0cnVuX29uX3NlbGZfcXVpZXQoKQotICAgIyBPbmx5IGV4aXQgaWYgc29tZXRoaW5nIGZhaWxlZAotICAgaWYgdGVzdCAkZXhpdF9zdGF0dXMgIT0gMDsgdGhlbiBleGl0ICRleGl0X3N0YXR1czsgZmkKLSB9Ci0rCi0rIyBTYW1lIGFzIHRlc3RydW5fb25fc2VsZigpLCBidXQgc2tpcCBvbiBmYWlsdXJlLgotK3Rlc3RydW5fb25fc2VsZl9za2lwKCkKLSt7Ci0rICBleGl0X3N0YXR1cz0wCi0rCi0rICBmb3IgZmlsZSBpbiAkc2VsZl90ZXN0X2ZpbGVzOyBkbwotKyAgICAgIHRlc3RydW4gJCogJGZpbGUgXAotKwkgIHx8IHsgZWNobyAiKioqIGZhaWx1cmUgaW4gJCogJGZpbGUiOyBleGl0X3N0YXR1cz03NzsgfQotKyAgZG9uZQotKwotKyAgIyBPbmx5IGV4aXQgaWYgc29tZXRoaW5nIGZhaWxlZAotKyAgaWYgdGVzdCAkZXhpdF9zdGF0dXMgIT0gMDsgdGhlbiBleGl0ICRleGl0X3N0YXR1czsgZmkKLSt9Ci0rCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY4L2ZpeGhlYWRlcmNoZWNrLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2OC9maXhoZWFkZXJjaGVjay5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRlM2IyNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY4L2ZpeGhlYWRlcmNoZWNrLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotRm9yIHNvbWUgYmluYXJpZXMgd2UgY2FuIGdldCBhIGludmFsaWQgc2VjdGlvbiBhbGlnbm1lbnQsIGZvciBleGFtcGxlIGlmIAotc2hfYWxpZ24gPSAxIGFuZCBzaF9hZGRyYWxpZ24gaXMgMC4gSW4gdGhlIGNhc2Ugb2YgYSB6ZXJvIHNpemUgc2VjdGlvbiBsaWtlIAotIi5ub3RlLkdOVS1zdGFjayIsIHRoaXMgaXMgaXJyZWxhdmVudCBhcyBmYXIgYXMgSSBjYW4gdGVsbCBhbmQgd2Ugc2hvdWxkbid0Ci1lcnJvciBpbiB0aGlzIGNhc2UuCi0KLVJQIDIwMTQvNi8xMQotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotZGlmZiAtLWdpdCBhL2xpYmVsZi9lbGYzMl91cGRhdGVudWxsLmMgYi9saWJlbGYvZWxmMzJfdXBkYXRlbnVsbC5jCi0tLS0gYS9saWJlbGYvZWxmMzJfdXBkYXRlbnVsbC5jCi0rKysgYi9saWJlbGYvZWxmMzJfdXBkYXRlbnVsbC5jCi1AQCAtMzM5LDggKzMzOSw4IEBAIF9fZWxmdzIoTElCRUxGQklUUyx1cGRhdGVudWxsX3dybG9jaykgKEVsZiAqZWxmLCBpbnQgKmNoYW5nZV9ib3AsIHNpemVfdCBzaG51bSkKLSAJCSAgICAgd2UgdGVzdCBmb3IgdGhlIGFsaWdubWVudCBvZiB0aGUgc2VjdGlvbiBiZWluZyBsYXJnZQotIAkJICAgICBlbm91Z2ggZm9yIHRoZSBsYXJnZXN0IGFsaWdubWVudCByZXF1aXJlZCBieSBhIGRhdGEKLSAJCSAgICAgYmxvY2suICAqLwotLQkJICBpZiAodW5saWtlbHkgKCEgcG93ZXJvZjIgKHNoZHItPnNoX2FkZHJhbGlnbikpCi0tCQkgICAgICB8fCB1bmxpa2VseSAoKHNoZHItPnNoX2FkZHJhbGlnbiA/OiAxKSA8IHNoX2FsaWduKSkKLSsJCSAgaWYgKHNoZHItPnNoX3NpemUgJiYgKHVubGlrZWx5ICghIHBvd2Vyb2YyIChzaGRyLT5zaF9hZGRyYWxpZ24pKQotKwkJICAgICAgfHwgdW5saWtlbHkgKChzaGRyLT5zaF9hZGRyYWxpZ24gPzogMSkgPCBzaF9hbGlnbikpKQotIAkJICAgIHsKLSAJCSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0FMSUdOKTsKLSAJCSAgICAgIHJldHVybiAtMTsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjgvc2hhZG93LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2OC9zaGFkb3cucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzMTk2MWYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2OC9zaGFkb3cucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1GaXggY29udHJvbCBwYXRoIHdoZXJlIHdlIGhhdmUgc3RyIGFzIHVuaW5pdGlhbGl6ZWQgc3RyaW5nCi0KLXwgL2hvbWUvdWJ1bnR1L3dvcmsvb2Uvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLW11c2wvd29yay9pNTg2LW9lLWxpbnV4LW11c2wvZWxmdXRpbHMvMC4xNjQtcjAvZWxmdXRpbHMtMC4xNjQvbGliY3B1L2kzODZfZGlzYXNtLmM6IEluIGZ1bmN0aW9uICdpMzg2X2Rpc2FzbSc6Ci18IC9ob21lL3VidW50dS93b3JrL29lL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1tdXNsL3dvcmsvaTU4Ni1vZS1saW51eC1tdXNsL2VsZnV0aWxzLzAuMTY0LXIwL2VsZnV0aWxzLTAuMTY0L2xpYmNwdS9pMzg2X2Rpc2FzbS5jOjMxMDo1OiBlcnJvcjogJ3N0cicgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZCBpbiB0aGlzIGZ1bmN0aW9uIFstV2Vycm9yPW1heWJlLXVuaW5pdGlhbGl6ZWRdCi18ICAgICAgbWVtY3B5IChidWYgKyBidWZjbnQsIF9zdHIsIF9sZW4pOyAgICAgICAgICAgXAotfCAgICAgIF4KLXwgL2hvbWUvdWJ1bnR1L3dvcmsvb2Uvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLW11c2wvd29yay9pNTg2LW9lLWxpbnV4LW11c2wvZWxmdXRpbHMvMC4xNjQtcjAvZWxmdXRpbHMtMC4xNjQvbGliY3B1L2kzODZfZGlzYXNtLmM6NzA5OjE3OiBub3RlOiAnc3RyJyB3YXMgZGVjbGFyZWQgaGVyZQotfCAgICAgIGNvbnN0IGNoYXIgKnN0cjsKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotSW5kZXg6IGVsZnV0aWxzLTAuMTY0L2xpYmNwdS9pMzg2X2Rpc2FzbS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZWxmdXRpbHMtMC4xNjQub3JpZy9saWJjcHUvaTM4Nl9kaXNhc20uYwotKysrIGVsZnV0aWxzLTAuMTY0L2xpYmNwdS9pMzg2X2Rpc2FzbS5jCi1AQCAtODIxLDYgKzgyMSw3IEBAIGkzODZfZGlzYXNtIChjb25zdCB1aW50OF90ICoqc3RhcnRwLCBjb24KLSAJCQkgICAgfQotIAotIAkJCWRlZmF1bHQ6Ci0rCQkJICBzdHIgPSAiIjsKLSAJCQkgIGFzc2VydCAoISAiSU5WQUxJRCBub3QgaGFuZGxlZCIpOwotIAkJCX0KLSAJCSAgICB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzL0ZpeF9lbGZfY3Z0X2d1bmhhc2gucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzL0ZpeF9lbGZfY3Z0X2d1bmhhc2gucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NjFlODkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy9GaXhfZWxmX2N2dF9ndW5oYXNoLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotRml4IGVsZl9jdnRfZ3VuaGFzaCBpZiBkZXN0IGFuZCBzcmMgYXJlIHNhbWUuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1UaGUgJ2Rlc3QnIGFuZCAnc3JjJyBjYW4gYmUgc2FtZSwgd2UgbmVlZCB0byBzYXZlIHRoZSB2YWx1ZSBvZiBzcmMzMlsyXQotYmVmb3JlIHN3YXBpbmcgaXQuCi0KLVNpZ25lZC1vZmYtYnk6IEJhb3NoYW4gUGFuZyA8QmFvU2hhbi5QYW5nQHdpbmRyaXZlci5jb20+Ci1kaWZmIC0tZ2l0IGEvbGliZWxmL2dudWhhc2hfeGxhdGUuaCBiL2xpYmVsZi9nbnVoYXNoX3hsYXRlLmgKLWluZGV4IDZmYWYxMTMuLjA0ZDljYTEgMTAwNjQ0Ci0tLS0gYS9saWJlbGYvZ251aGFzaF94bGF0ZS5oCi0rKysgYi9saWJlbGYvZ251aGFzaF94bGF0ZS5oCi1AQCAtNDAsNiArNDAsNyBAQCBlbGZfY3Z0X2dudWhhc2ggKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGxlbiwgaW50IGVuY29kZSkKLSAgICAgIHdvcmRzLiAgV2UgbXVzdCBkZXRhbmdsZSB0aGVtIGhlcmUuICAgKi8KLSAgIEVsZjMyX1dvcmQgKmRlc3QzMiA9IGRlc3Q7Ci0gICBjb25zdCBFbGYzMl9Xb3JkICpzcmMzMiA9IHNyYzsKLSsgIEVsZjMyX1dvcmQgc2F2ZV9zcmMzMl8yID0gc3JjMzJbMl07IC8vIGRlc3QgY291bGQgYmUgZXF1YWwgdG8gc3JjCi0gCi0gICAvKiBGaXJzdCBmb3VyIGNvbnRyb2wgd29yZHMsIDMyIGJpdHMuICAqLwotICAgZm9yICh1bnNpZ25lZCBpbnQgY250ID0gMDsgY250IDwgNDsgKytjbnQpCi1AQCAtNTAsNyArNTEsNyBAQCBlbGZfY3Z0X2dudWhhc2ggKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGxlbiwgaW50IGVuY29kZSkKLSAgICAgICBsZW4gLT0gNDsKLSAgICAgfQotIAotLSAgRWxmMzJfV29yZCBiaXRtYXNrX3dvcmRzID0gZW5jb2RlID8gc3JjMzJbMl0gOiBkZXN0MzJbMl07Ci0rICBFbGYzMl9Xb3JkIGJpdG1hc2tfd29yZHMgPSBlbmNvZGUgPyBzYXZlX3NyYzMyXzIgOiBkZXN0MzJbMl07Ci0gCi0gICAvKiBOb3cgdGhlIDY0IGJpdCB3b3Jkcy4gICovCi0gICBFbGY2NF9Yd29yZCAqZGVzdDY0ID0gKEVsZjY0X1h3b3JkICopICZkZXN0MzJbNF07CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzL2Rzby1saW5rLWNoYW5nZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvZHNvLWxpbmstY2hhbmdlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGNkM2VkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvZHNvLWxpbmstY2hhbmdlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLSMgVGhpcyBwYXRjaCBtYWtlcyB0aGUgbGluayB0byB0aGUgZGVwZW5kZW5jaWVzIG9mIGxpYmR3IGV4cGxpY2l0LCBhcyByZWNlbnQKLSMgbGQgbm8gbG9uZ2VyIGltcGxpY2l0bHkgbGlua3MgdGhlbS4gU2VlCi0jIGh0dHA6Ly9saXN0cy5mZWRvcmFwcm9qZWN0Lm9yZy9waXBlcm1haWwvZGV2ZWwvMjAxMC1NYXJjaC8xMzM2MDEuaHRtbCBhcwotIyBhIHNpbWlsYXIgZXhhbXBsZSBvZiB0aGUgZXJyb3IgbWVzc2FnZSB5b3UgY2FuIGVuY291bnRlciB3aXRob3V0IHRoaXMgcGF0Y2gsCi0jIGFuZCBodHRwczovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvVW5kZXJzdGFuZGluZ0RTT0xpbmtDaGFuZ2UgYW5kCi0jIGh0dHBzOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9GZWF0dXJlcy9DaGFuZ2VJbkltcGxpY2l0RFNPTGlua2luZyBmb3IgbW9yZQotIyBkZXRhaWxzLgotCi0tLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvTWFrZWZpbGUuYW0KLSsrKyBlbGZ1dGlscy0wLjE0OC9zcmMvTWFrZWZpbGUuYW0KLUBAIC04Niw3ICs4Niw3IEBAIGxpYmR3ID0gLi4vbGliZHcvbGliZHcuYSAkKHppcF9MSUJTKSAkKGwKLSBsaWJlbGYgPSAuLi9saWJlbGYvbGliZWxmLmEKLSBlbHNlCi0gbGliYXNtID0gLi4vbGliYXNtL2xpYmFzbS5zbwotLWxpYmR3ID0gLi4vbGliZHcvbGliZHcuc28KLStsaWJkdyA9IC4uL2xpYmR3L2xpYmR3LnNvICQoemlwX0xJQlMpICQobGliZWxmKSAkKGxpYmVibCkgLWxkbAotIGxpYmVsZiA9IC4uL2xpYmVsZi9saWJlbGYuc28KLSBlbmRpZgotIGxpYmVibCA9IC4uL2xpYmVibC9saWJlYmwuYQotLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvdGVzdHMvTWFrZWZpbGUuYW0KLSsrKyBlbGZ1dGlscy0wLjE0OC90ZXN0cy9NYWtlZmlsZS5hbQotQEAgLTE3Miw3ICsxNzIsNyBAQCBsaWJkdyA9IC4uL2xpYmR3L2xpYmR3LmEgJCh6aXBfTElCUykgJChsCi0gbGliZWxmID0gLi4vbGliZWxmL2xpYmVsZi5hCi0gbGliYXNtID0gLi4vbGliYXNtL2xpYmFzbS5hCi0gZWxzZQotLWxpYmR3ID0gLi4vbGliZHcvbGliZHcuc28KLStsaWJkdyA9IC4uL2xpYmR3L2xpYmR3LnNvICQoemlwX0xJQlMpICQobGliZWxmKSAkKGxpYmVibCkgLWxkbAotIGxpYmVsZiA9IC4uL2xpYmVsZi9saWJlbGYuc28KLSBsaWJhc20gPSAuLi9saWJhc20vbGliYXNtLnNvCi0gZW5kaWYKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNjguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzXzAuMTY4LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTc3Y2UwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNjguYmIKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi1TVU1NQVJZID0gIlV0aWxpdGllcyBhbmQgbGlicmFyaWVzIGZvciBoYW5kbGluZyBjb21waWxlZCBvYmplY3QgZmlsZXMiCi1IT01FUEFHRSA9ICJodHRwczovL3NvdXJjZXdhcmUub3JnL2VsZnV0aWxzIgotU0VDVElPTiA9ICJiYXNlIgotTElDRU5TRSA9ICIoR1BMdjMgJiBFbGZ1dGlscy1FeGNlcHRpb24pIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCi1ERVBFTkRTID0gImxpYnRvb2wgYnppcDIgemxpYiB2aXJ0dWFsL2xpYmludGwiCi1ERVBFTkRTX2FwcGVuZF9saWJjLW11c2wgPSAiIGFyZ3Atc3RhbmRhbG9uZSBmdHMgIgotU1JDX1VSSSA9ICJodHRwczovL3NvdXJjZXdhcmUub3JnL2VsZnV0aWxzL2Z0cC8ke1BWfS8ke0JQfS50YXIuYnoyIgotU1JDX1VSSVttZDVzdW1dID0gIjUyYWRmYTQwNzU4ZDBkMzllNWQ1YzU3Njg5YmYzOGQ2IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImI4OGQwNzg5M2JhMTM3M2M3ZGQ2OWE3ODU1OTc0NzA2ZDA1Mzc3NzY2NTY4YTdkOTAwMjcwNmQ1ZGU3MmMyNzYiCi0KLVNSQ19VUkkgKz0gIlwKLSAgICAgICAgZmlsZTovL2Rzby1saW5rLWNoYW5nZS5wYXRjaCBcCi0gICAgICAgIGZpbGU6Ly9GaXhfZWxmX2N2dF9ndW5oYXNoLnBhdGNoIFwKLSAgICAgICAgZmlsZTovL2ZpeGhlYWRlcmNoZWNrLnBhdGNoIFwKLSAgICAgICAgZmlsZTovLzAwMDEtZWxmX2dldGFyc3ltLVNpbGVuY2UtV2Vycm9yLW1heWJlLXVuaW5pdGlhbGl6ZWQtZmFscy5wYXRjaCBcCi0gICAgICAgIGZpbGU6Ly8wMDAxLXJlbW92ZS10aGUtdW5uZWVkLWNoZWNraW5nLnBhdGNoIFwKLSAgICAgICAgZmlsZTovLzAwMDEtZml4LWEtc3RhY2stdXNhZ2Utd2FybmluZy5wYXRjaCBcCi0gICAgICAgIGZpbGU6Ly9hYXJjaDY0X3Vpby5wYXRjaCBcCi0gICAgICAgIGZpbGU6Ly9GaXhfb25lX0dDQzdfd2FybmluZy5wYXRjaCBcCi0gICAgICAgIGZpbGU6Ly9zaGFkb3cucGF0Y2ggXAotIgotCi0jIHBpY2sgdGhlIHBhdGNoIGZyb20gZGViaWFuCi0jIGh0dHA6Ly9mdHAuZGUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2UvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNjgtMC4yLmRlYmlhbi50YXIueHoKLVNSQ19VUkkgKz0gIlwKLSAgICAgICAgZmlsZTovL2RlYmlhbi9ocHBhX2JhY2tlbmQuZGlmZiBcCi0gICAgICAgIGZpbGU6Ly9kZWJpYW4vYXJtX2JhY2tlbmQuZGlmZiBcCi0gICAgICAgIGZpbGU6Ly9kZWJpYW4vbWlwc19iYWNrZW5kLmRpZmYgXAotICAgICAgICBmaWxlOi8vZGViaWFuL3Rlc3RzdWl0ZS1pZ25vcmUtZWxmbGludC5kaWZmIFwKLSAgICAgICAgZmlsZTovL2RlYmlhbi9taXBzX3JlYWRlbGZfdy5wYXRjaCBcCi0gICAgICAgIGZpbGU6Ly9kZWJpYW4va2ZyZWVic2RfcGF0aC5wYXRjaCBcCi0gICAgICAgIGZpbGU6Ly9kZWJpYW4vMDAwMS1JZ25vcmUtZGlmZmVyZW5jZXMtYmV0d2Vlbi1taXBzLW1hY2hpbmUtaWRlbnRpZmllcnMucGF0Y2ggXAotICAgICAgICBmaWxlOi8vZGViaWFuLzAwMDItQWRkLXN1cHBvcnQtZm9yLW1pcHM2NC1hYmlzLWluLW1pcHNfcmV0dmFsLmMucGF0Y2ggXAotICAgICAgICBmaWxlOi8vZGViaWFuLzAwMDMtQWRkLW1pcHMtbjY0LXJlbG9jYXRpb24tZm9ybWF0LWhhY2sucGF0Y2ggXAotICAgICAgICBmaWxlOi8vZGViaWFuL2h1cmRfcGF0aC5wYXRjaCBcCi0gICAgICAgIGZpbGU6Ly9kZWJpYW4vaWdub3JlX3N0cm1lcmdlLmRpZmYgXAotIgotIyBGaXggdGhlIHBhdGNoZXMgZnJvbSBEZWJpYW4gd2l0aCBHQ0M3Ci1TUkNfVVJJICs9ICJmaWxlOi8vZmFsbHRocm91Z2gucGF0Y2giCi1TUkNfVVJJX2FwcGVuZF9saWJjLW11c2wgPSAiIGZpbGU6Ly8wMDAxLWJ1aWxkLVByb3ZpZGUtYWx0ZXJuYXRpdmVzLWZvci1nbGliYy1hc3N1bXB0aW9ucy1oZWwucGF0Y2ggIgotCi0jIFRoZSBidWlsZHN5c3RlbSB3YW50cyB0byBnZW5lcmF0ZSAyIC5oIGZpbGVzIGZyb20gc291cmNlIHVzaW5nIGEgYmluYXJ5IGl0IGp1c3QgYnVpbHQsCi0jIHdoaWNoIGNhbiBub3QgcGFzcyB0aGUgY3Jvc3MgY29tcGlsaW5nLCBzbyBsZXQncyB3b3JrIGFyb3VuZCBpdCBieSBhZGRpbmcgMiAuaCBmaWxlcwotIyBhbG9uZyB3aXRoIHRoZSBkb19jb25maWd1cmVfcHJlcGVuZCgpCi0KLWluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKLQotRVhUUkFfT0VDT05GID0gIi0tcHJvZ3JhbS1wcmVmaXg9ZXUtIC0td2l0aG91dC1sem1hIgotRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC0td2l0aG91dC1iemxpYiIKLUVYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZW5hYmxlLXVjbGliYyIKLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0JaWYgWyAiJHtUQVJHRVRfQVJDSH0iICE9ICJ4ODZfNjQiIF0gJiYgWyAteiBgZWNobyAiJHtUQVJHRVRfQVJDSH0ifGdyZXAgJ2kuODYnYCBdO3RoZW4KLQkJcm0gLWYgJHtEfSR7YmluZGlyfS9ldS1vYmpkdW1wCi0JZmkKLX0KLQotIyB3ZSBjYW4gbm90IGJ1aWxkIGNvbXBsZXRlIGVsZnV0aWxzIHdoZW4gdXNpbmcgdWNsaWJjCi0jIGJ1dCBzb21lIHJlY2lwZXMgZS5nLiBnY2MgNC41IGRlcGVuZHMgb24gbGliZWxmIHNvIHdlCi0jIGJ1aWxkIG9ubHkgbGliZWxmIGZvciB1Y2xpYmMgY2FzZQotCi1FWFRSQV9PRU1BS0VfbGliYy11Y2xpYmMgPSAiLUMgbGliZWxmIgotRVhUUkFfT0VNQUtFX2NsYXNzLW5hdGl2ZSA9ICIiCi1FWFRSQV9PRU1BS0VfY2xhc3MtbmF0aXZlc2RrID0gIiIKLQotQUxMT1dfRU1QVFlfJHtQTn1fbGliYy1tdXNsID0gIjEiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKLQotIyBQYWNrYWdlIHV0aWxpdGllcyBzZXBhcmF0ZWx5Ci1QQUNLQUdFUyA9KyAiJHtQTn0tYmludXRpbHMgbGliZWxmIGxpYmFzbSBsaWJkdyIKLUZJTEVTXyR7UE59LWJpbnV0aWxzID0gIlwKLSAgICAke2JpbmRpcn0vZXUtYWRkcjJsaW5lIFwKLSAgICAke2JpbmRpcn0vZXUtbGQgXAotICAgICR7YmluZGlyfS9ldS1ubSBcCi0gICAgJHtiaW5kaXJ9L2V1LXJlYWRlbGYgXAotICAgICR7YmluZGlyfS9ldS1zaXplIFwKLSAgICAke2JpbmRpcn0vZXUtc3RyaXAiCi0KLUZJTEVTX2xpYmVsZiA9ICIke2xpYmRpcn0vbGliZWxmLSR7UFZ9LnNvICR7bGliZGlyfS9saWJlbGYuc28uKiIKLUZJTEVTX2xpYmFzbSA9ICIke2xpYmRpcn0vbGliYXNtLSR7UFZ9LnNvICR7bGliZGlyfS9saWJhc20uc28uKiIKLUZJTEVTX2xpYmR3ICA9ICIke2xpYmRpcn0vbGliZHctJHtQVn0uc28gJHtsaWJkaXJ9L2xpYmR3LnNvLiogJHtsaWJkaXJ9L2VsZnV0aWxzL2xpYioiCi0jIFNvbWUgcGFja2FnZXMgaGF2ZSB0aGUgdmVyc2lvbiBwcmVjZWVkaW5nIHRoZSAuc28gaW5zdGVhZCBwcm9wZXJseQotIyB2ZXJzaW9uZWQgLnNvLjx2ZXJzaW9uPiwgc28gd2UgbmVlZCB0byByZW9yZGVyIGFuZCByZXBhY2thZ2UuCi0jRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8qLSR7UFZ9LnNvICR7YmFzZV9saWJkaXJ9LyotJHtQVn0uc28iCi0jRklMRVNfU09MSUJTREVWID0gIiR7bGliZGlyfS9saWJhc20uc28gJHtsaWJkaXJ9L2xpYmR3LnNvICR7bGliZGlyfS9saWJlbGYuc28iCi0KLSMgVGhlIHBhY2thZ2UgY29udGFpbnMgc3ltbGlua3MgdGhhdCB0cmlwIHVwIGluc2FuZQotSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJkdyA9ICJkZXYtc28iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzXzAuMTcwLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE3MC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjgxZTI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE3MC5iYgpAQCAtMCwwICsxLDc5IEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBhbmQgbGlicmFyaWVzIGZvciBoYW5kbGluZyBjb21waWxlZCBvYmplY3QgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwczovL3NvdXJjZXdhcmUub3JnL2VsZnV0aWxzIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICIoR1BMdjMgJiBFbGZ1dGlscy1FeGNlcHRpb24pIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCitERVBFTkRTID0gImxpYnRvb2wgYnppcDIgemxpYiB2aXJ0dWFsL2xpYmludGwiCitERVBFTkRTX2FwcGVuZF9saWJjLW11c2wgPSAiIGFyZ3Atc3RhbmRhbG9uZSBmdHMgIgorU1JDX1VSSSA9ICJodHRwczovL3NvdXJjZXdhcmUub3JnL2VsZnV0aWxzL2Z0cC8ke1BWfS8ke0JQfS50YXIuYnoyIgorU1JDX1VSSVttZDVzdW1dID0gIjAzNTk5YWVlOThjOWI3MjZjN2E3MzJhMmRkMDI0NWQ1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFmODQ0Nzc1NTc2Yjc5YmRjOWY5YzcxN2E1MDA1OGQwODYyMDMyM2MxZTkzNTQ1ODIyM2ExMmYyNDljOWUwNjYiCisKK1NSQ19VUkkgKz0gIlwKKyAgICAgICAgZmlsZTovLzAwMDEtZHNvLWxpbmstY2hhbmdlLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDItRml4LWVsZl9jdnRfZ3VuaGFzaC1pZi1kZXN0LWFuZC1zcmMtYXJlLXNhbWUucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMy1maXhoZWFkZXJjaGVjay5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDA0LURpc2FibGUtdGhlLXRlc3QtdG8tY29udmVydC1ldWMtanAucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwNS1maXgtYS1zdGFjay11c2FnZS13YXJuaW5nLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDYtRml4LWJ1aWxkLW9uLWFhcmNoNjQtbXVzbC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDA3LUZpeC1jb250cm9sLXBhdGgtd2hlcmUtd2UtaGF2ZS1zdHItYXMtdW5pbml0aWFsaXplZC0ucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMS1saWJhc20tbWF5LWxpbmstd2l0aC1saWJiejItaWYtZm91bmQucGF0Y2ggXAorIgorU1JDX1VSSV9hcHBlbmRfbGliYy1tdXNsID0gIiBmaWxlOi8vMDAwOC1idWlsZC1Qcm92aWRlLWFsdGVybmF0aXZlcy1mb3ItZ2xpYmMtYXNzdW1wdGlvbnMtaGVsLnBhdGNoIgorCisjIFBpY2sgcGF0Y2hlcyBmcm9tIGRlYmlhbgorIyBodHRwOi8vZnRwLmRlLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9lL2VsZnV0aWxzL2VsZnV0aWxzXzAuMTY4LTAuMi5kZWJpYW4udGFyLnh6CitTUkNfVVJJICs9ICJcCisgICAgICAgIGZpbGU6Ly9kZWJpYW4vaHBwYV9iYWNrZW5kLmRpZmYgXAorICAgICAgICBmaWxlOi8vZGViaWFuL2FybV9iYWNrZW5kLmRpZmYgXAorICAgICAgICBmaWxlOi8vZGViaWFuL21pcHNfYmFja2VuZC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9kZWJpYW4vbWlwc19yZWFkZWxmX3cucGF0Y2ggXAorICAgICAgICBmaWxlOi8vZGViaWFuLzAwMDEtSWdub3JlLWRpZmZlcmVuY2VzLWJldHdlZW4tbWlwcy1tYWNoaW5lLWlkZW50aWZpZXJzLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2RlYmlhbi8wMDAyLUFkZC1zdXBwb3J0LWZvci1taXBzNjQtYWJpcy1pbi1taXBzX3JldHZhbC5jLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2RlYmlhbi8wMDAzLUFkZC1taXBzLW42NC1yZWxvY2F0aW9uLWZvcm1hdC1oYWNrLnBhdGNoIFwKKyIKKyMgRml4IHRoZSBwYXRjaGVzIGZyb20gRGViaWFuIHdpdGggR0NDNworU1JDX1VSSSArPSAiZmlsZTovL2RlYmlhbi9mYWxsdGhyb3VnaC5wYXRjaCIKKworIyBUaGUgYnVpbGRzeXN0ZW0gd2FudHMgdG8gZ2VuZXJhdGUgMiAuaCBmaWxlcyBmcm9tIHNvdXJjZSB1c2luZyBhIGJpbmFyeSBpdCBqdXN0IGJ1aWx0LAorIyB3aGljaCBjYW4gbm90IHBhc3MgdGhlIGNyb3NzIGNvbXBpbGluZywgc28gbGV0J3Mgd29yayBhcm91bmQgaXQgYnkgYWRkaW5nIDIgLmggZmlsZXMKKyMgYWxvbmcgd2l0aCB0aGUgZG9fY29uZmlndXJlX3ByZXBlbmQoKQorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK0VYVFJBX09FQ09ORiA9ICItLXByb2dyYW0tcHJlZml4PWV1LSAtLXdpdGhvdXQtbHptYSIKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLXdpdGhvdXQtYnpsaWIiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiAhPSAieDg2XzY0IiBdICYmIFsgLXogYGVjaG8gIiR7VEFSR0VUX0FSQ0h9InxncmVwICdpLjg2J2AgXTt0aGVuCisJCXJtIC1mICR7RH0ke2JpbmRpcn0vZXUtb2JqZHVtcAorCWZpCit9CisKK0VYVFJBX09FTUFLRV9jbGFzcy1uYXRpdmUgPSAiIgorRVhUUkFfT0VNQUtFX2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKK0FMTE9XX0VNUFRZXyR7UE59X2xpYmMtbXVzbCA9ICIxIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKKyMgUGFja2FnZSB1dGlsaXRpZXMgc2VwYXJhdGVseQorUEFDS0FHRVMgPSsgIiR7UE59LWJpbnV0aWxzIGxpYmVsZiBsaWJhc20gbGliZHciCitGSUxFU18ke1BOfS1iaW51dGlscyA9ICJcCisgICAgJHtiaW5kaXJ9L2V1LWFkZHIybGluZSBcCisgICAgJHtiaW5kaXJ9L2V1LWxkIFwKKyAgICAke2JpbmRpcn0vZXUtbm0gXAorICAgICR7YmluZGlyfS9ldS1yZWFkZWxmIFwKKyAgICAke2JpbmRpcn0vZXUtc2l6ZSBcCisgICAgJHtiaW5kaXJ9L2V1LXN0cmlwIgorCitGSUxFU19saWJlbGYgPSAiJHtsaWJkaXJ9L2xpYmVsZi0ke1BWfS5zbyAke2xpYmRpcn0vbGliZWxmLnNvLioiCitGSUxFU19saWJhc20gPSAiJHtsaWJkaXJ9L2xpYmFzbS0ke1BWfS5zbyAke2xpYmRpcn0vbGliYXNtLnNvLioiCitGSUxFU19saWJkdyAgPSAiJHtsaWJkaXJ9L2xpYmR3LSR7UFZ9LnNvICR7bGliZGlyfS9saWJkdy5zby4qICR7bGliZGlyfS9lbGZ1dGlscy9saWIqIgorIyBTb21lIHBhY2thZ2VzIGhhdmUgdGhlIHZlcnNpb24gcHJlY2VlZGluZyB0aGUgLnNvIGluc3RlYWQgcHJvcGVybHkKKyMgdmVyc2lvbmVkIC5zby48dmVyc2lvbj4sIHNvIHdlIG5lZWQgdG8gcmVvcmRlciBhbmQgcmVwYWNrYWdlLgorI0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vKi0ke1BWfS5zbyAke2Jhc2VfbGliZGlyfS8qLSR7UFZ9LnNvIgorI0ZJTEVTX1NPTElCU0RFViA9ICIke2xpYmRpcn0vbGliYXNtLnNvICR7bGliZGlyfS9saWJkdy5zbyAke2xpYmRpcn0vbGliZWxmLnNvIgorCisjIFRoZSBwYWNrYWdlIGNvbnRhaW5zIHN5bWxpbmtzIHRoYXQgdHJpcCB1cCBpbnNhbmUKK0lOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliZHcgPSAiZGV2LXNvIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9maWxlcy8wMDAxLWRzby1saW5rLWNoYW5nZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZmlsZXMvMDAwMS1kc28tbGluay1jaGFuZ2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhjNTdmMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZmlsZXMvMDAwMS1kc28tbGluay1jaGFuZ2UucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorRnJvbSAwYTY5YTI2YzlmNzQ4N2RhY2E5MDBkYjg3Y2QxMTk1ODU3YTQ2MDNmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAxNSBBdWcgMjAxNyAxNzoxMDo1NyArMDgwMAorU3ViamVjdDogW1BBVENIIDEvN10gZHNvIGxpbmsgY2hhbmdlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGlzIHBhdGNoIG1ha2VzIHRoZSBsaW5rIHRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgbGliZHcgZXhwbGljaXQsIGFzCityZWNlbnQgbGQgbm8gbG9uZ2VyIGltcGxpY2l0bHkgbGlua3MgdGhlbS4gU2VlCitodHRwOi8vbGlzdHMuZmVkb3JhcHJvamVjdC5vcmcvcGlwZXJtYWlsL2RldmVsLzIwMTAtTWFyY2gvMTMzNjAxLmh0bWwKK2FzIGEgc2ltaWxhciBleGFtcGxlIG9mIHRoZSBlcnJvciBtZXNzYWdlIHlvdSBjYW4gZW5jb3VudGVyIHdpdGhvdXQgdGhpcworcGF0Y2gsIGFuZCBodHRwczovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvVW5kZXJzdGFuZGluZ0RTT0xpbmtDaGFuZ2UgYW5kCitodHRwczovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvRmVhdHVyZXMvQ2hhbmdlSW5JbXBsaWNpdERTT0xpbmtpbmcgZm9yCittb3JlIGRldGFpbHMuCisKK1JlYmFzZSB0byAwLjE3MAorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvTWFrZWZpbGUuYW0gICB8IDIgKy0KKyB0ZXN0cy9NYWtlZmlsZS5hbSB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5hbSBiL3NyYy9NYWtlZmlsZS5hbQoraW5kZXggMmIxYzBkYy4uOTMwNWI4NCAxMDA2NDQKKy0tLSBhL3NyYy9NYWtlZmlsZS5hbQorKysrIGIvc3JjL01ha2VmaWxlLmFtCitAQCAtNDQsNyArNDQsNyBAQCBsaWJkdyA9IC4uL2xpYmR3L2xpYmR3LmEgLWx6ICQoemlwX0xJQlMpICQobGliZWxmKSAkKGxpYmVibCkgLWxkbAorIGxpYmVsZiA9IC4uL2xpYmVsZi9saWJlbGYuYSAtbHoKKyBlbHNlCisgbGliYXNtID0gLi4vbGliYXNtL2xpYmFzbS5zbworLWxpYmR3ID0gLi4vbGliZHcvbGliZHcuc28KKytsaWJkdyA9IC4uL2xpYmR3L2xpYmR3LnNvICQoemlwX0xJQlMpICQobGliZWxmKSAkKGxpYmVibCkgLWxkbAorIGxpYmVsZiA9IC4uL2xpYmVsZi9saWJlbGYuc28KKyBlbmRpZgorIGxpYmVibCA9IC4uL2xpYmVibC9saWJlYmwuYQorZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IDM3MzUwODQuLjUyODYxNWQgMTAwNjQ0CistLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC00MDAsNyArNDAwLDcgQEAgbGliZHcgPSAuLi9saWJkdy9saWJkdy5hIC1seiAkKHppcF9MSUJTKSAkKGxpYmVsZikgJChsaWJlYmwpIC1sZGwKKyBsaWJlbGYgPSAuLi9saWJlbGYvbGliZWxmLmEgLWx6CisgbGliYXNtID0gLi4vbGliYXNtL2xpYmFzbS5hCisgZWxzZQorLWxpYmR3ID0gLi4vbGliZHcvbGliZHcuc28KKytsaWJkdyA9IC4uL2xpYmR3L2xpYmR3LnNvICQoemlwX0xJQlMpICQobGliZWxmKSAkKGxpYmVibCkgLWxkbAorIGxpYmVsZiA9IC4uL2xpYmVsZi9saWJlbGYuc28KKyBsaWJhc20gPSAuLi9saWJhc20vbGliYXNtLnNvCisgZW5kaWYKKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2ZpbGVzLzAwMDEtbGliYXNtLW1heS1saW5rLXdpdGgtbGliYnoyLWlmLWZvdW5kLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9maWxlcy8wMDAxLWxpYmFzbS1tYXktbGluay13aXRoLWxpYmJ6Mi1pZi1mb3VuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjBiMDYwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9maWxlcy8wMDAxLWxpYmFzbS1tYXktbGluay13aXRoLWxpYmJ6Mi1pZi1mb3VuZC5wYXRjaApAQCAtMCwwICsxLDM5IEBACitGcm9tIDc2NzJlMzYzNDY4MjcxYjRjNjNmZjU4NzcwYzVhYWMxNWFiOGY3MjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCA0IE9jdCAyMDE3IDIyOjMwOjQ2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpYmFzbSBtYXkgbGluayB3aXRoIGxpYmJ6MiBpZiBmb3VuZAorCitUaGlzIGNhbiBmYWlsIHRvIGxpbmsgYmluYXJpZXMgbGlrZSBvYmpkdW1wCit3aGVyZSBpbmRpcmVjdCBsaWJyYXJpZXMgbWF5IGJlIG5vdCBmb3VuZCBieSBsaW5rZXIKKworfCAvbW50L2Evb2UvYnVpbGQvdG1wL3dvcmsvcmlzY3Y2NC1iZWMtbGludXgvZWxmdXRpbHMvMC4xNzAtcjAvcmVjaXBlLXN5c3Jvb3QvdXNyL2xpYi9saWJiejIuc28uMTogZXJyb3IgYWRkaW5nIHN5bWJvbHM6IERTTyBtaXNzaW5nIGZyb20gY29tbWFuZCBsaW5lCit8IGNvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIHNyYy9NYWtlZmlsZS5hbSB8IDYgKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5hbSBiL3NyYy9NYWtlZmlsZS5hbQoraW5kZXggZTAzYmMzMi4uOWI3ZTg1MyAxMDA2NDQKKy0tLSBhL3NyYy9NYWtlZmlsZS5hbQorKysrIGIvc3JjL01ha2VmaWxlLmFtCitAQCAtMzksMTEgKzM5LDExIEBAIEVYVFJBX0RJU1QgKz0gbWFrZS1kZWJ1Zy1hcmNoaXZlLmluCisgQ0xFQU5GSUxFUyArPSBtYWtlLWRlYnVnLWFyY2hpdmUKKyAKKyBpZiBCVUlMRF9TVEFUSUMKKy1saWJhc20gPSAuLi9saWJhc20vbGliYXNtLmEKKytsaWJhc20gPSAuLi9saWJhc20vbGliYXNtLmEgJCh6aXBfTElCUykKKyBsaWJkdyA9IC4uL2xpYmR3L2xpYmR3LmEgLWx6ICQoemlwX0xJQlMpICQobGliZWxmKSAkKGxpYmVibCkgLWxkbAorIGxpYmVsZiA9IC4uL2xpYmVsZi9saWJlbGYuYSAtbHoKKyBlbHNlCistbGliYXNtID0gLi4vbGliYXNtL2xpYmFzbS5zbworK2xpYmFzbSA9IC4uL2xpYmFzbS9saWJhc20uc28gJCh6aXBfTElCUykKKyBsaWJkdyA9IC4uL2xpYmR3L2xpYmR3LnNvICQoemlwX0xJQlMpICQobGliZWxmKSAkKGxpYmVibCkgLWxkbAorIGxpYmVsZiA9IC4uL2xpYmVsZi9saWJlbGYuc28KKyBlbmRpZgorLS0gCisyLjE0LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9maWxlcy8wMDAyLUZpeC1lbGZfY3Z0X2d1bmhhc2gtaWYtZGVzdC1hbmQtc3JjLWFyZS1zYW1lLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9maWxlcy8wMDAyLUZpeC1lbGZfY3Z0X2d1bmhhc2gtaWYtZGVzdC1hbmQtc3JjLWFyZS1zYW1lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNzE4ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2ZpbGVzLzAwMDItRml4LWVsZl9jdnRfZ3VuaGFzaC1pZi1kZXN0LWFuZC1zcmMtYXJlLXNhbWUucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSBlOTg2NzBmN2M3YjRjNzNmYjY1NTM0OTQ5NzE2ZmQ4ZDA0Mzk2MGQ1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAxNSBBdWcgMjAxNyAxNzoxMzo1OSArMDgwMAorU3ViamVjdDogW1BBVENIIDIvN10gRml4IGVsZl9jdnRfZ3VuaGFzaCBpZiBkZXN0IGFuZCBzcmMgYXJlIHNhbWUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGUgJ2Rlc3QnIGFuZCAnc3JjJyBjYW4gYmUgc2FtZSwgd2UgbmVlZCB0byBzYXZlIHRoZSB2YWx1ZSBvZiBzcmMzMlsyXQorYmVmb3JlIHN3YXBpbmcgaXQuCisKK1NpZ25lZC1vZmYtYnk6IEJhb3NoYW4gUGFuZyA8QmFvU2hhbi5QYW5nQHdpbmRyaXZlci5jb20+CisKK1JlYmFzZSB0byAwLjE3MAorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgbGliZWxmL2dudWhhc2hfeGxhdGUuaCB8IDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliZWxmL2dudWhhc2hfeGxhdGUuaCBiL2xpYmVsZi9nbnVoYXNoX3hsYXRlLmgKK2luZGV4IDZmYWYxMTMuLjA0ZDljYTEgMTAwNjQ0CistLS0gYS9saWJlbGYvZ251aGFzaF94bGF0ZS5oCisrKysgYi9saWJlbGYvZ251aGFzaF94bGF0ZS5oCitAQCAtNDAsNiArNDAsNyBAQCBlbGZfY3Z0X2dudWhhc2ggKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGxlbiwgaW50IGVuY29kZSkKKyAgICAgIHdvcmRzLiAgV2UgbXVzdCBkZXRhbmdsZSB0aGVtIGhlcmUuICAgKi8KKyAgIEVsZjMyX1dvcmQgKmRlc3QzMiA9IGRlc3Q7CisgICBjb25zdCBFbGYzMl9Xb3JkICpzcmMzMiA9IHNyYzsKKysgIEVsZjMyX1dvcmQgc2F2ZV9zcmMzMl8yID0gc3JjMzJbMl07IC8vIGRlc3QgY291bGQgYmUgZXF1YWwgdG8gc3JjCisgCisgICAvKiBGaXJzdCBmb3VyIGNvbnRyb2wgd29yZHMsIDMyIGJpdHMuICAqLworICAgZm9yICh1bnNpZ25lZCBpbnQgY250ID0gMDsgY250IDwgNDsgKytjbnQpCitAQCAtNTAsNyArNTEsNyBAQCBlbGZfY3Z0X2dudWhhc2ggKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGxlbiwgaW50IGVuY29kZSkKKyAgICAgICBsZW4gLT0gNDsKKyAgICAgfQorIAorLSAgRWxmMzJfV29yZCBiaXRtYXNrX3dvcmRzID0gZW5jb2RlID8gc3JjMzJbMl0gOiBkZXN0MzJbMl07CisrICBFbGYzMl9Xb3JkIGJpdG1hc2tfd29yZHMgPSBlbmNvZGUgPyBzYXZlX3NyYzMyXzIgOiBkZXN0MzJbMl07CisgCisgICAvKiBOb3cgdGhlIDY0IGJpdCB3b3Jkcy4gICovCisgICBFbGY2NF9Yd29yZCAqZGVzdDY0ID0gKEVsZjY0X1h3b3JkICopICZkZXN0MzJbNF07CistLSAKKzEuOC4zLjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9maWxlcy8wMDAzLWZpeGhlYWRlcmNoZWNrLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9maWxlcy8wMDAzLWZpeGhlYWRlcmNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNDlmY2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2ZpbGVzLzAwMDMtZml4aGVhZGVyY2hlY2sucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSA1NjVkNTkzNWFiZjViNTg3NzNmOWM4Mzg1YzAwMTg5MjIxOTgwZDk4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAxNSBBdWcgMjAxNyAxNzoxNzoyMCArMDgwMAorU3ViamVjdDogW1BBVENIIDMvN10gZml4aGVhZGVyY2hlY2sKKworRm9yIHNvbWUgYmluYXJpZXMgd2UgY2FuIGdldCBhIGludmFsaWQgc2VjdGlvbiBhbGlnbm1lbnQsIGZvciBleGFtcGxlIGlmCitzaF9hbGlnbiA9IDEgYW5kIHNoX2FkZHJhbGlnbiBpcyAwLiBJbiB0aGUgY2FzZSBvZiBhIHplcm8gc2l6ZSBzZWN0aW9uCitsaWtlCisiLm5vdGUuR05VLXN0YWNrIiwgdGhpcyBpcyBpcnJlbGF2ZW50IGFzIGZhciBhcyBJIGNhbiB0ZWxsIGFuZCB3ZQorc2hvdWxkbid0CitlcnJvciBpbiB0aGlzIGNhc2UuCisKK1JQIDIwMTQvNi8xMQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUmViYXNlIHRvIDAuMTcwCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWJlbGYvZWxmMzJfdXBkYXRlbnVsbC5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmVsZi9lbGYzMl91cGRhdGVudWxsLmMgYi9saWJlbGYvZWxmMzJfdXBkYXRlbnVsbC5jCitpbmRleCBkODNjMGIzLi5hNTFiZjcwIDEwMDY0NAorLS0tIGEvbGliZWxmL2VsZjMyX3VwZGF0ZW51bGwuYworKysrIGIvbGliZWxmL2VsZjMyX3VwZGF0ZW51bGwuYworQEAgLTMzOSw4ICszMzksOCBAQCBfX2VsZncyKExJQkVMRkJJVFMsdXBkYXRlbnVsbF93cmxvY2spIChFbGYgKmVsZiwgaW50ICpjaGFuZ2VfYm9wLCBzaXplX3Qgc2hudW0pCisgCQkgICAgIHdlIHRlc3QgZm9yIHRoZSBhbGlnbm1lbnQgb2YgdGhlIHNlY3Rpb24gYmVpbmcgbGFyZ2UKKyAJCSAgICAgZW5vdWdoIGZvciB0aGUgbGFyZ2VzdCBhbGlnbm1lbnQgcmVxdWlyZWQgYnkgYSBkYXRhCisgCQkgICAgIGJsb2NrLiAgKi8KKy0JCSAgaWYgKHVubGlrZWx5ICghIHBvd2Vyb2YyIChzaGRyLT5zaF9hZGRyYWxpZ24pKQorLQkJICAgICAgfHwgdW5saWtlbHkgKChzaGRyLT5zaF9hZGRyYWxpZ24gPzogMSkgPCBzaF9hbGlnbikpCisrCQkgIGlmIChzaGRyLT5zaF9zaXplICYmICh1bmxpa2VseSAoISBwb3dlcm9mMiAoc2hkci0+c2hfYWRkcmFsaWduKSkKKysJCSAgICAgIHx8IHVubGlrZWx5ICgoc2hkci0+c2hfYWRkcmFsaWduID86IDEpIDwgc2hfYWxpZ24pKSkKKyAJCSAgICB7CisgCQkgICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9BTElHTik7CisgCQkgICAgICByZXR1cm4gLTE7CistLSAKKzEuOC4zLjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9maWxlcy8wMDA0LURpc2FibGUtdGhlLXRlc3QtdG8tY29udmVydC1ldWMtanAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2ZpbGVzLzAwMDQtRGlzYWJsZS10aGUtdGVzdC10by1jb252ZXJ0LWV1Yy1qcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODkzYWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9maWxlcy8wMDA0LURpc2FibGUtdGhlLXRlc3QtdG8tY29udmVydC1ldWMtanAucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorRnJvbSBiYjdlZDExOTUwMTAxNzk4YWFlODJmN2ZkYThiM2RjYjA1Zjc1NWM1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAxNSBBdWcgMjAxNyAxNzoyNDowNiArMDgwMAorU3ViamVjdDogW1BBVENIIDQvN10gRGlzYWJsZSB0aGUgdGVzdCB0byBjb252ZXJ0IGV1Yy1qcAorCitSZW1vdmUgdGhlIHRlc3QgIlRlc3QgYWdhaW5zdCBIUC1VWCAxMS4xMSBidWc6CitObyBjb252ZXJ0ZXIgZnJvbSBFVUMtSlAgdG8gVVRGLTggaXMgcHJvdmlkZWQiCitzaW5jZSB3ZSBkb24ndCBzdXBwb3J0IEhQLVVYIGFuZCBpZiB0aGUgZXVjLWpwIGlzIG5vdAoraW5zdGFsbGVkIG9uIHRoZSBob3N0LCB0aGUgZGVwZW5kZW5jZSB3aWxsIGJlIGJ1aWx0IHdpdGhvdXQKK2ljb252IHN1cHBvcnQgYW5kIHdpbGwgY2F1c2UgZ3VpbGQtbmF0aXZlIGJ1aWxkaW5nIGZhaWwuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKworUmViYXNlIHRvIDAuMTcwCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBtNC9pY29udi5tNCB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9tNC9pY29udi5tNCBiL200L2ljb252Lm00CitpbmRleCBhNTAzNjQ2Li4yOTlmMWViIDEwMDY0NAorLS0tIGEvbTQvaWNvbnYubTQKKysrKyBiL200L2ljb252Lm00CitAQCAtMTU5LDYgKzE1OSw3IEBAIGludCBtYWluICgpCisgICAgICAgfQorICAgfQorICNlbmRpZgorKyNpZiAwCisgICAvKiBUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOiBObyBjb252ZXJ0ZXIgZnJvbSBFVUMtSlAgdG8gVVRGLTggaXMKKyAgICAgIHByb3ZpZGVkLiAgKi8KKyAgIGlmICgvKiBUcnkgc3RhbmRhcmRpemVkIG5hbWVzLiAgKi8KK0BAIC0xNzAsNiArMTcxLDcgQEAgaW50IG1haW4gKCkKKyAgICAgICAvKiBUcnkgSFAtVVggbmFtZXMuICAqLworICAgICAgICYmIGljb252X29wZW4gKCJ1dGY4IiwgImV1Y0pQIikgPT0gKGljb252X3QpKC0xKSkKKyAgICAgcmVzdWx0IHw9IDE2OworKyNlbmRpZgorICAgcmV0dXJuIHJlc3VsdDsKKyB9XV0pXSwKKyAgICAgICAgIFthbV9jdl9mdW5jX2ljb252X3dvcmtzPXllc10sCistLSAKKzEuOC4zLjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9maWxlcy8wMDA1LWZpeC1hLXN0YWNrLXVzYWdlLXdhcm5pbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2ZpbGVzLzAwMDUtZml4LWEtc3RhY2stdXNhZ2Utd2FybmluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmEwMWNmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9maWxlcy8wMDA1LWZpeC1hLXN0YWNrLXVzYWdlLXdhcm5pbmcucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSBkZDZkYmY2YWYzOTY1MTkzODBmNDhjMGVmMWNlNmNmNGRkNzdmNmQ3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAxNSBBdWcgMjAxNyAxNzoyNToxNiArMDgwMAorU3ViamVjdDogW1BBVENIIDUvN10gZml4IGEgc3RhY2stdXNhZ2Ugd2FybmluZworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworbm90IHVzZSBhIHZhcmlhYmxlIHRvIGFzIGEgYXJyYXkgc2l6ZSwgb3RoZXJ3aXNlIHRoZSB3YXJuaW5nIHRvIGVycm9yCit0aGF0CitzdGFjayB1c2FnZSBtaWdodCBiZSB1bmJvdW5kZWQgWy1XZXJyb3I9c3RhY2stdXNhZ2U9XSB3aWxsIGhhcHBlbgorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CisKK1JlYmFzZSB0byAwLjE3MAorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgYmFja2VuZHMvcHBjX2luaXRyZWcuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2JhY2tlbmRzL3BwY19pbml0cmVnLmMgYi9iYWNrZW5kcy9wcGNfaW5pdHJlZy5jCitpbmRleCA2OWQ2MjNiLi5kZTQxZGVjIDEwMDY0NAorLS0tIGEvYmFja2VuZHMvcHBjX2luaXRyZWcuYworKysrIGIvYmFja2VuZHMvcHBjX2luaXRyZWcuYworQEAgLTkzLDcgKzkzLDcgQEAgcHBjX3NldF9pbml0aWFsX3JlZ2lzdGVyc190aWQgKHBpZF90IHRpZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisgCXJldHVybiBmYWxzZTsKKyAgICAgfQorICAgY29uc3Qgc2l6ZV90IGdwcnMgPSBzaXplb2YgKHVzZXJfcmVncy5yLmdwcikgLyBzaXplb2YgKCp1c2VyX3JlZ3Muci5ncHIpOworLSAgRHdhcmZfV29yZCBkd2FyZl9yZWdzW2dwcnNdOworKyAgRHdhcmZfV29yZCBkd2FyZl9yZWdzW3NpemVvZiAodXNlcl9yZWdzLnIuZ3ByKSAvIHNpemVvZiAoKnVzZXJfcmVncy5yLmdwcildOworICAgZm9yICh1bnNpZ25lZCBncHIgPSAwOyBncHIgPCBncHJzOyBncHIrKykKKyAgICAgZHdhcmZfcmVnc1tncHJdID0gdXNlcl9yZWdzLnIuZ3ByW2dwcl07CisgICBpZiAoISBzZXRmdW5jICgwLCBncHJzLCBkd2FyZl9yZWdzLCBhcmcpKQorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZmlsZXMvMDAwNi1GaXgtYnVpbGQtb24tYWFyY2g2NC1tdXNsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9maWxlcy8wMDA2LUZpeC1idWlsZC1vbi1hYXJjaDY0LW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYyOWEwMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZmlsZXMvMDAwNi1GaXgtYnVpbGQtb24tYWFyY2g2NC1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK0Zyb20gZTU3YWQ0N2ZjODU0OTM1M2NhODBjMjNiOWI0ZjM4ZjMxZmRlMTNlNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTUgQXVnIDIwMTcgMTc6Mjc6MzAgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCA2LzddIEZpeCBidWlsZCBvbiBhYXJjaDY0L211c2wKKworRXJyb3JzCisKK2ludmFsaWQgb3BlcmFuZHMgdG8gYmluYXJ5ICYgKGhhdmUgJ2xvbmcgZG91YmxlJyBhbmQgJ3Vuc2lnbmVkIGludCcpCisKK2Vycm9yOiByZWRlZmluaXRpb24KKyBvZiAnc3RydWN0IGlvdmVjJworIHN0cnVjdCBpb3ZlYyB7IHZvaWQgKmlvdl9iYXNlOyBzaXplX3QgaW92X2xlbjsgfTsKKyAgICAgICAgXgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitSZWJhc2UgdG8gMC4xNzAKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGJhY2tlbmRzL2FhcmNoNjRfaW5pdHJlZy5jIHwgNCArKy0tCisgYmFja2VuZHMvYXJtX2luaXRyZWcuYyAgICAgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9hYXJjaDY0X2luaXRyZWcuYyBiL2JhY2tlbmRzL2FhcmNoNjRfaW5pdHJlZy5jCitpbmRleCBkYWY2ZjM3Li42NDQ1Mjc2IDEwMDY0NAorLS0tIGEvYmFja2VuZHMvYWFyY2g2NF9pbml0cmVnLmMKKysrKyBiL2JhY2tlbmRzL2FhcmNoNjRfaW5pdHJlZy5jCitAQCAtMzMsNyArMzMsNyBAQAorICNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2lmIGRlZmluZWQoX19hYXJjaDY0X18pICYmIGRlZmluZWQoX19saW51eF9fKQorLSMgaW5jbHVkZSA8bGludXgvdWlvLmg+CisrIyBpbmNsdWRlIDxzeXMvdWlvLmg+CisgIyBpbmNsdWRlIDxzeXMvdXNlci5oPgorICMgaW5jbHVkZSA8c3lzL3B0cmFjZS5oPgorIC8qIERlYWwgd2l0aCBvbGQgZ2xpYmMgZGVmaW5pbmcgdXNlcl9wdF9yZWdzIGluc3RlYWQgb2YgdXNlcl9yZWdzX3N0cnVjdC4gICovCitAQCAtODIsNyArODIsNyBAQCBhYXJjaDY0X3NldF9pbml0aWFsX3JlZ2lzdGVyc190aWQgKHBpZF90IHRpZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisgCisgICBEd2FyZl9Xb3JkIGR3YXJmX2ZyZWdzWzMyXTsKKyAgIGZvciAoaW50IHIgPSAwOyByIDwgMzI7IHIrKykKKy0gICAgZHdhcmZfZnJlZ3Nbcl0gPSBmcmVncy52cmVnc1tyXSAmIDB4RkZGRkZGRkY7CisrICAgIGR3YXJmX2ZyZWdzW3JdID0gKHVuc2lnbmVkIGludClmcmVncy52cmVnc1tyXSAmIDB4RkZGRkZGRkY7CisgCisgICBpZiAoISBzZXRmdW5jICg2NCwgMzIsIGR3YXJmX2ZyZWdzLCBhcmcpKQorICAgICByZXR1cm4gZmFsc2U7CitkaWZmIC0tZ2l0IGEvYmFja2VuZHMvYXJtX2luaXRyZWcuYyBiL2JhY2tlbmRzL2FybV9pbml0cmVnLmMKK2luZGV4IGVmY2FiYWYuLjA2MmJiOWUgMTAwNjQ0CistLS0gYS9iYWNrZW5kcy9hcm1faW5pdHJlZy5jCisrKysgYi9iYWNrZW5kcy9hcm1faW5pdHJlZy5jCitAQCAtMzgsNyArMzgsNyBAQAorICNlbmRpZgorIAorICNpZmRlZiBfX2FhcmNoNjRfXworLSMgaW5jbHVkZSA8bGludXgvdWlvLmg+CisrIyBpbmNsdWRlIDxzeXMvdWlvLmg+CisgIyBpbmNsdWRlIDxzeXMvdXNlci5oPgorICMgaW5jbHVkZSA8c3lzL3B0cmFjZS5oPgorIC8qIERlYWwgd2l0aCBvbGQgZ2xpYmMgZGVmaW5pbmcgdXNlcl9wdF9yZWdzIGluc3RlYWQgb2YgdXNlcl9yZWdzX3N0cnVjdC4gICovCistLSAKKzEuOC4zLjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9maWxlcy8wMDA3LUZpeC1jb250cm9sLXBhdGgtd2hlcmUtd2UtaGF2ZS1zdHItYXMtdW5pbml0aWFsaXplZC0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2ZpbGVzLzAwMDctRml4LWNvbnRyb2wtcGF0aC13aGVyZS13ZS1oYXZlLXN0ci1hcy11bmluaXRpYWxpemVkLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjQ3NzA0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9maWxlcy8wMDA3LUZpeC1jb250cm9sLXBhdGgtd2hlcmUtd2UtaGF2ZS1zdHItYXMtdW5pbml0aWFsaXplZC0ucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorRnJvbSAxZTkxYzFkNGUzN2MwNWNmOTUwNThiNGIzYzNmMzUyZDcyODg2ZjU4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAxNSBBdWcgMjAxNyAxNzozMTozOCArMDgwMAorU3ViamVjdDogW1BBVENIIDcvN10gRml4IGNvbnRyb2wgcGF0aCB3aGVyZSB3ZSBoYXZlIHN0ciBhcyB1bmluaXRpYWxpemVkCisgc3RyaW5nCisKK3wKKy9ob21lL3VidW50dS93b3JrL29lL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1tdXNsL3dvcmsvaTU4Ni1vZS1saW51eC1tdXNsL2VsZnV0aWxzLzAuMTY0LXIwL2VsZnV0aWxzLTAuMTY0L2xpYmNwdS9pMzg2X2Rpc2FzbS5jOgorSW4gZnVuY3Rpb24gJ2kzODZfZGlzYXNtJzoKK3wKKy9ob21lL3VidW50dS93b3JrL29lL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1tdXNsL3dvcmsvaTU4Ni1vZS1saW51eC1tdXNsL2VsZnV0aWxzLzAuMTY0LXIwL2VsZnV0aWxzLTAuMTY0L2xpYmNwdS9pMzg2X2Rpc2FzbS5jOjMxMDo1OgorZXJyb3I6ICdzdHInIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaW4gdGhpcyBmdW5jdGlvbgorWy1XZXJyb3I9bWF5YmUtdW5pbml0aWFsaXplZF0KK3wgICAgICBtZW1jcHkgKGJ1ZiArIGJ1ZmNudCwgX3N0ciwgX2xlbik7ICAgICAgICAgICBcCit8ICAgICAgXgorfAorL2hvbWUvdWJ1bnR1L3dvcmsvb2Uvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLW11c2wvd29yay9pNTg2LW9lLWxpbnV4LW11c2wvZWxmdXRpbHMvMC4xNjQtcjAvZWxmdXRpbHMtMC4xNjQvbGliY3B1L2kzODZfZGlzYXNtLmM6NzA5OjE3Ogorbm90ZTogJ3N0cicgd2FzIGRlY2xhcmVkIGhlcmUKK3wgICAgICBjb25zdCBjaGFyICpzdHI7CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUmViYXNlIHRvIDAuMTcwCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYmNwdS9pMzg2X2Rpc2FzbS5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9saWJjcHUvaTM4Nl9kaXNhc20uYyBiL2xpYmNwdS9pMzg2X2Rpc2FzbS5jCitpbmRleCA4MzFhZmJlLi42MGZkNmQ0IDEwMDY0NAorLS0tIGEvbGliY3B1L2kzODZfZGlzYXNtLmMKKysrKyBiL2xpYmNwdS9pMzg2X2Rpc2FzbS5jCitAQCAtODIxLDYgKzgyMSw3IEBAIGkzODZfZGlzYXNtIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSwKKyAJCQkgICAgfQorIAkJCSAgLyogRmFsbHRocm91Z2ggKi8KKyAJCQlkZWZhdWx0OgorKwkJCSAgc3RyID0gIiI7CisgCQkJICBhc3NlcnQgKCEgIklOVkFMSUQgbm90IGhhbmRsZWQiKTsKKyAJCQl9CisgCQkgICAgfQorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZmlsZXMvMDAwOC1idWlsZC1Qcm92aWRlLWFsdGVybmF0aXZlcy1mb3ItZ2xpYmMtYXNzdW1wdGlvbnMtaGVsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9maWxlcy8wMDA4LWJ1aWxkLVByb3ZpZGUtYWx0ZXJuYXRpdmVzLWZvci1nbGliYy1hc3N1bXB0aW9ucy1oZWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg2NGQ0NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZmlsZXMvMDAwOC1idWlsZC1Qcm92aWRlLWFsdGVybmF0aXZlcy1mb3ItZ2xpYmMtYXNzdW1wdGlvbnMtaGVsLnBhdGNoCkBAIC0wLDAgKzEsMTAzMSBAQAorRnJvbSAwMTBiMGM1N2U3NDg0NDBlYjFjZWIzZDk3Nzg3NWYyNDg4ZDJiNGNlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTYgQXVnIDIwMTcgMTA6MDY6MjYgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gYnVpbGQ6IFByb3ZpZGUgYWx0ZXJuYXRpdmVzIGZvciBnbGliYyBhc3N1bXB0aW9ucyBoZWxwcworIGNvbXBpbGluZyBpdCBvbiBtdXNsCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworUmViYXNlIHRvIDAuMTcwCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBsaWIvY29sb3IuYyAgICAgICAgICAgICAgICAgICAgICB8ICAzICsrLQorIGxpYi9maXhlZHNpemVoYXNoLmggICAgICAgICAgICAgIHwgIDEgLQorIGxpYi9zeXN0ZW0uaCAgICAgICAgICAgICAgICAgICAgIHwgMTAgKysrKysrKysrKworIGxpYi94bWFsbG9jLmMgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBsaWJhc20vYXNtX2VuZC5jICAgICAgICAgICAgICAgICB8ICAyICstCisgbGliYXNtL2FzbV9uZXdzY24uYyAgICAgICAgICAgICAgfCAgMiArLQorIGxpYmNwdS9pMzg2X2dlbmRpcy5jICAgICAgICAgICAgIHwgIDIgKy0KKyBsaWJjcHUvaTM4Nl9sZXguYyAgICAgICAgICAgICAgICB8ICAyICstCisgbGliY3B1L2kzODZfcGFyc2UuYyAgICAgICAgICAgICAgfCAgMiArLQorIGxpYmR3L01ha2VmaWxlLmFtICAgICAgICAgICAgICAgIHwgIDMgKystCisgbGliZHcvbGliZHdfYWxsb2MuYyAgICAgICAgICAgICAgfCAgMiArLQorIGxpYmR3ZmwvZHdmbF9idWlsZF9pZF9maW5kX2VsZi5jIHwgIDMgKystCisgbGliZHdmbC9kd2ZsX2Vycm9yLmMgICAgICAgICAgICAgfCAgNCArKystCisgbGliZHdmbC9kd2ZsX21vZHVsZV9nZXRkd2FyZi5jICAgfCAgMSArCisgbGliZHdmbC9maW5kLWRlYnVnaW5mby5jICAgICAgICAgfCAgMiArLQorIGxpYmR3ZmwvbGliZHdmbF9jcmMzMl9maWxlLmMgICAgIHwgIDkgKysrKysrKysrCisgbGliZHdmbC9saW51eC1rZXJuZWwtbW9kdWxlcy5jICAgfCAgMSArCisgbGliZWJsL2VibG9wZW5iYWNrZW5kLmMgICAgICAgICAgfCAgMiArLQorIGxpYmVsZi9lbGYuaCAgICAgICAgICAgICAgICAgICAgIHwgIDggKysrKysrLS0KKyBsaWJlbGYvbGliZWxmLmggICAgICAgICAgICAgICAgICB8ICAxICsKKyBsaWJlbGYvbGliZWxmUC5oICAgICAgICAgICAgICAgICB8ICAxICsKKyBzcmMvYWRkcjJsaW5lLmMgICAgICAgICAgICAgICAgICB8ICAyICstCisgc3JjL2FyLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHNyYy9hcmxpYi5jICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvYXJsaWIyLmMgICAgICAgICAgICAgICAgICAgICB8ICAyICstCisgc3JjL2VsZmNtcC5jICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHNyYy9lbGZsaW50LmMgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvZmluZHRleHRyZWwuYyAgICAgICAgICAgICAgICB8ICAyICstCisgc3JjL25tLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHNyYy9vYmpkdW1wLmMgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvcmFubGliLmMgICAgICAgICAgICAgICAgICAgICB8ICAyICstCisgc3JjL3JlYWRlbGYuYyAgICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHNyYy9zaXplLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvc3RhY2suYyAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCisgc3JjL3N0cmluZ3MuYyAgICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHNyYy9zdHJpcC5jICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvdW5zdHJpcC5jICAgICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvYWRkcnNjb3Blcy5jICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL2FsbHJlZ3MuYyAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy9iYWNrdHJhY2UtZGF0YS5jICAgICAgICAgICB8ICAyICstCisgdGVzdHMvYmFja3RyYWNlLWR3YXJmLmMgICAgICAgICAgfCAgMiArLQorIHRlc3RzL2JhY2t0cmFjZS5jICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy9idWlsZGlkLmMgICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvZGVidWdhbHRsaW5rLmMgICAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL2RlYnVnbGluay5jICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy9kZWxldGVkLmMgICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvZHdmbC1hZGRyLXNlY3QuYyAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL2R3ZmwtYnVnLWFkZHItb3ZlcmZsb3cuYyAgIHwgIDIgKy0KKyB0ZXN0cy9kd2ZsLWJ1Zy1mZC1sZWFrLmMgICAgICAgICB8ICAyICstCisgdGVzdHMvZHdmbC1idWctZ2V0bW9kdWxlcy5jICAgICAgfCAgMiArLQorIHRlc3RzL2R3ZmwtcmVwb3J0LWVsZi1hbGlnbi5jICAgIHwgIDIgKy0KKyB0ZXN0cy9kd2ZsbGluZXMuYyAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvZHdmbG1vZHRlc3QuYyAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL2R3ZmxzeW1zLmMgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy9lYXJseS1vZmZzY24uYyAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvZWNwLmMgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL2ZpbmQtcHJvbG9ndWVzLmMgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy9mdW5jcmV0dmFsLmMgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvZnVuY3Njb3Blcy5jICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL2dldHNyY19kaWUuYyAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy9saW5lMmFkZHIuYyAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvbG93X2hpZ2hfcGMuYyAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL21kNS1zaGExLXRlc3QuYyAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy9yZHdybW1hcC5jICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvc2FyaWR4LmMgICAgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3RzL3NlY3Rpb25kdW1wLmMgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0cy92YXJsb2NzLmMgICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvdmRzb3N5bXMuYyAgICAgICAgICAgICAgICAgfCAgMiArLQorIDY5IGZpbGVzIGNoYW5nZWQsIDk1IGluc2VydGlvbnMoKyksIDY0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggMmZmNDQ0ZS4uNDFmNzdkZiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTI4LDcgKzI4LDcgQEAgcGtnaW5jbHVkZV9IRUFERVJTID0gdmVyc2lvbi5oCisgCisgIyBBZGQgZG9jIGJhY2sgd2hlbiB3ZSBoYXZlIHNvbWUgcmVhbCBjb250ZW50LgorIFNVQkRJUlMgPSBjb25maWcgbTQgbGliIGxpYmVsZiBsaWJlYmwgbGliZHdlbGYgbGliZHdmbCBsaWJkdyBsaWJjcHUgbGliYXNtIFwKKy0JICBiYWNrZW5kcyBzcmMgcG8gdGVzdHMKKysJICBiYWNrZW5kcyBwbyB0ZXN0cworIAorIEVYVFJBX0RJU1QgPSBlbGZ1dGlscy5zcGVjIEdQRy1LRVkgTk9URVMgQ09OVFJJQlVUSU5HIFwKKyAJICAgICBDT1BZSU5HIENPUFlJTkctR1BMVjIgQ09QWUlORy1MR1BMVjMKK2RpZmYgLS1naXQgYS9saWIvY29sb3IuYyBiL2xpYi9jb2xvci5jCitpbmRleCBmNjIzODlkLi5hMmE4NGI0IDEwMDY0NAorLS0tIGEvbGliL2NvbG9yLmMKKysrKyBiL2xpYi9jb2xvci5jCitAQCAtMzIsMTMgKzMyLDE0IEBACisgI2VuZGlmCisgCisgI2luY2x1ZGUgPGFyZ3AuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGxpYmludGwuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSAibGliZXUuaCIKKyAjaW5jbHVkZSAiY29sb3IuaCIKKysjaW5jbHVkZSAic3lzdGVtLmgiCisgCisgLyogUHJvdG90eXBlIGZvciBvcHRpb24gaGFuZGxlci4gICovCisgc3RhdGljIGVycm9yX3QgcGFyc2Vfb3B0IChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSk7CitkaWZmIC0tZ2l0IGEvbGliL2ZpeGVkc2l6ZWhhc2guaCBiL2xpYi9maXhlZHNpemVoYXNoLmgKK2luZGV4IGRhYzJhNWYuLjQzMDE2ZmMgMTAwNjQ0CistLS0gYS9saWIvZml4ZWRzaXplaGFzaC5oCisrKysgYi9saWIvZml4ZWRzaXplaGFzaC5oCitAQCAtMzAsNyArMzAsNiBAQAorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CistI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorIAorICNpbmNsdWRlIDxzeXN0ZW0uaD4KKyAKK2RpZmYgLS1naXQgYS9saWIvc3lzdGVtLmggYi9saWIvc3lzdGVtLmgKK2luZGV4IDkyMDMzMzUuLjFhNjAxMzEgMTAwNjQ0CistLS0gYS9saWIvc3lzdGVtLmgKKysrKyBiL2xpYi9zeXN0ZW0uaAorQEAgLTUwLDYgKzUwLDE2IEBACisgI2Vsc2UKKyAjIGVycm9yICJVbmtub3duIGJ5dGUgb3JkZXIiCisgI2VuZGlmCisrI2lmbmRlZiBURU1QX0ZBSUxVUkVfUkVUUlkKKysjZGVmaW5lIFRFTVBfRkFJTFVSRV9SRVRSWShleHByZXNzaW9uKSBcCisrICAoX19leHRlbnNpb25fXwkJCQkJCQkgICAgICBcCisrICAgICh7IGxvbmcgaW50IF9fcmVzdWx0OwkJCQkJCSAgICAgIFwKKysgICAgICAgZG8gX19yZXN1bHQgPSAobG9uZyBpbnQpIChleHByZXNzaW9uKTsJCQkJICAgICAgXAorKyAgICAgICB3aGlsZSAoX19yZXN1bHQgPT0gLTFMICYmIGVycm5vID09IEVJTlRSKTsJCQkgICAgICBcCisrICAgICAgIF9fcmVzdWx0OyB9KSkKKysjZW5kaWYKKysKKysjZGVmaW5lIGVycm9yKHN0YXR1cywgZXJybm8sIC4uLikgZXJyKHN0YXR1cywgX19WQV9BUkdTX18pCisgCisgI2lmbmRlZiBNQVgKKyAjZGVmaW5lIE1BWChtLCBuKSAoKG0pIDwgKG4pID8gKG4pIDogKG0pKQorZGlmZiAtLWdpdCBhL2xpYi94bWFsbG9jLmMgYi9saWIveG1hbGxvYy5jCitpbmRleCAwY2RlMzg0Li4yMTdiMDU0IDEwMDY0NAorLS0tIGEvbGliL3htYWxsb2MuYworKysrIGIvbGliL3htYWxsb2MuYworQEAgLTMwLDcgKzMwLDcgQEAKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8bGliaW50bC5oPgorICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CitkaWZmIC0tZ2l0IGEvbGliYXNtL2FzbV9lbmQuYyBiL2xpYmFzbS9hc21fZW5kLmMKK2luZGV4IGNlZDI0ZjUuLjRhZDkxOGMgMTAwNjQ0CistLS0gYS9saWJhc20vYXNtX2VuZC5jCisrKysgYi9saWJhc20vYXNtX2VuZC5jCitAQCAtMzIsNyArMzIsNyBAQAorICNlbmRpZgorIAorICNpbmNsdWRlIDxhc3NlcnQuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGxpYmludGwuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CitkaWZmIC0tZ2l0IGEvbGliYXNtL2FzbV9uZXdzY24uYyBiL2xpYmFzbS9hc21fbmV3c2NuLmMKK2luZGV4IGRkYmIyNWQuLjc0YTU5OGQgMTAwNjQ0CistLS0gYS9saWJhc20vYXNtX25ld3Njbi5jCisrKysgYi9saWJhc20vYXNtX25ld3Njbi5jCitAQCAtMzIsNyArMzIsNyBAQAorICNlbmRpZgorIAorICNpbmNsdWRlIDxhc3NlcnQuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGxpYmludGwuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorZGlmZiAtLWdpdCBhL2xpYmNwdS9pMzg2X2dlbmRpcy5jIGIvbGliY3B1L2kzODZfZ2VuZGlzLmMKK2luZGV4IGFhZTVlYWUuLjZkNzYwMTYgMTAwNjQ0CistLS0gYS9saWJjcHUvaTM4Nl9nZW5kaXMuYworKysrIGIvbGliY3B1L2kzODZfZ2VuZGlzLmMKK0BAIC0zMSw3ICszMSw3IEBACisgIyBpbmNsdWRlIDxjb25maWcuaD4KKyAjZW5kaWYKKyAKKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorZGlmZiAtLWdpdCBhL2xpYmNwdS9pMzg2X2xleC5jIGIvbGliY3B1L2kzODZfbGV4LmMKK2luZGV4IGJhNWY0YWEuLmIxZTQxOTEgMTAwNjQ0CistLS0gYS9saWJjcHUvaTM4Nl9sZXguYworKysrIGIvbGliY3B1L2kzODZfbGV4LmMKK0BAIC01NzcsNyArNTc3LDcgQEAgY2hhciAqaTM4Nl90ZXh0OworICNlbmRpZgorIAorICNpbmNsdWRlIDxjdHlwZS5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8bGliaW50bC5oPgorIAorICNpbmNsdWRlIDxsaWJldS5oPgorZGlmZiAtLWdpdCBhL2xpYmNwdS9pMzg2X3BhcnNlLmMgYi9saWJjcHUvaTM4Nl9wYXJzZS5jCitpbmRleCBlZjFhYzM1Li40OGYyZTY0IDEwMDY0NAorLS0tIGEvbGliY3B1L2kzODZfcGFyc2UuYworKysrIGIvbGliY3B1L2kzODZfcGFyc2UuYworQEAgLTEwNyw3ICsxMDcsNyBAQAorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGludHR5cGVzLmg+CisgI2luY2x1ZGUgPGxpYmludGwuaD4KKyAjaW5jbHVkZSA8bWF0aC5oPgorZGlmZiAtLWdpdCBhL2xpYmR3L01ha2VmaWxlLmFtIGIvbGliZHcvTWFrZWZpbGUuYW0KK2luZGV4IGZmOGMyOTEuLjg5ZTc5MmEgMTAwNjQ0CistLS0gYS9saWJkdy9NYWtlZmlsZS5hbQorKysrIGIvbGliZHcvTWFrZWZpbGUuYW0KK0BAIC0xMDUsNyArMTA1LDggQEAgYW1fbGliZHdfcGljX2FfT0JKRUNUUyA9ICQobGliZHdfYV9TT1VSQ0VTOi5jPS5vcykKKyBsaWJkd19zb19MSUJTID0gbGliZHdfcGljLmEgLi4vbGliZHdlbGYvbGliZHdlbGZfcGljLmEgXAorIAkgIC4uL2xpYmR3ZmwvbGliZHdmbF9waWMuYSAuLi9saWJlYmwvbGliZWJsLmEKKyBsaWJkd19zb19ERVBTID0gLi4vbGliL2xpYmV1LmEgLi4vbGliZWxmL2xpYmVsZi5zbworLWxpYmR3X3NvX0xETElCUyA9ICQobGliZHdfc29fREVQUykgLWxkbCAtbHogJChhcmdwX0xEQUREKSAkKHppcF9MSUJTKQorK2Z0c19MREFERCA9IC1sZnRzCisrbGliZHdfc29fTERMSUJTID0gJChsaWJkd19zb19ERVBTKSAtbGRsIC1seiAkKGFyZ3BfTERBREQpICQoemlwX0xJQlMpICQoZnRzX0xEQUREKQorIGxpYmR3X3NvX1NPVVJDRVMgPQorIGxpYmR3LnNvJChFWEVFWFQpOiAkKHNyY2RpcikvbGliZHcubWFwICQobGliZHdfc29fTElCUykgJChsaWJkd19zb19ERVBTKQorICMgVGhlIHJwYXRoIGlzIG5lY2Vzc2FyeSBmb3IgbGliZWJsIGJlY2F1c2UgaXRzICRPUklHSU4gdXNlIHdpbGwKK2RpZmYgLS1naXQgYS9saWJkdy9saWJkd19hbGxvYy5jIGIvbGliZHcvbGliZHdfYWxsb2MuYworaW5kZXggMjhhOGNmNi4uMjlhZWIzZiAxMDA2NDQKKy0tLSBhL2xpYmR3L2xpYmR3X2FsbG9jLmMKKysrKyBiL2xpYmR3L2xpYmR3X2FsbG9jLmMKK0BAIC0zMSw3ICszMSw3IEBACisgIyBpbmNsdWRlIDxjb25maWcuaD4KKyAjZW5kaWYKKyAKKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlICJsaWJkd1AuaCIKK2RpZmYgLS1naXQgYS9saWJkd2ZsL2R3ZmxfYnVpbGRfaWRfZmluZF9lbGYuYyBiL2xpYmR3ZmwvZHdmbF9idWlsZF9pZF9maW5kX2VsZi5jCitpbmRleCBlZTBjMTY0Li5iMDZhYjU5IDEwMDY0NAorLS0tIGEvbGliZHdmbC9kd2ZsX2J1aWxkX2lkX2ZpbmRfZWxmLmMKKysrKyBiL2xpYmR3ZmwvZHdmbF9idWlsZF9pZF9maW5kX2VsZi5jCitAQCAtMzEsNiArMzEsNyBAQAorICNlbmRpZgorIAorICNpbmNsdWRlICJsaWJkd2ZsUC5oIgorKyNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CitAQCAtOTksNyArMTAwLDcgQEAgX19saWJkd2ZsX29wZW5fYnlfYnVpbGRfaWQgKER3ZmxfTW9kdWxlICptb2QsIGJvb2wgZGVidWcsIGNoYXIgKipmaWxlX25hbWUsCisgCXsKKyAJICBpZiAoKmZpbGVfbmFtZSAhPSBOVUxMKQorIAkgICAgZnJlZSAoKmZpbGVfbmFtZSk7CistCSAgKmZpbGVfbmFtZSA9IGNhbm9uaWNhbGl6ZV9maWxlX25hbWUgKG5hbWUpOworKwkgICpmaWxlX25hbWUgPSByZWFscGF0aCAobmFtZSwgTlVMTCk7CisgCSAgaWYgKCpmaWxlX25hbWUgPT0gTlVMTCkKKyAJICAgIHsKKyAJICAgICAgKmZpbGVfbmFtZSA9IG5hbWU7CitkaWZmIC0tZ2l0IGEvbGliZHdmbC9kd2ZsX2Vycm9yLmMgYi9saWJkd2ZsL2R3ZmxfZXJyb3IuYworaW5kZXggN2JjZjYxYy4uYzM0NTc5NyAxMDA2NDQKKy0tLSBhL2xpYmR3ZmwvZHdmbF9lcnJvci5jCisrKysgYi9saWJkd2ZsL2R3ZmxfZXJyb3IuYworQEAgLTE0MCw2ICsxNDAsNyBAQCBfX2xpYmR3Zmxfc2V0ZXJybm8gKER3ZmxfRXJyb3IgZXJyb3IpCisgY29uc3QgY2hhciAqCisgZHdmbF9lcnJtc2cgKGludCBlcnJvcikKKyB7CisrICBzdGF0aWMgX190aHJlYWQgY2hhciBzWzY0XSA9ICIiOworICAgaWYgKGVycm9yID09IDAgfHwgZXJyb3IgPT0gLTEpCisgICAgIHsKKyAgICAgICBpbnQgbGFzdF9lcnJvciA9IGdsb2JhbF9lcnJvcjsKK0BAIC0xNTQsNyArMTU1LDggQEAgZHdmbF9lcnJtc2cgKGludCBlcnJvcikKKyAgIHN3aXRjaCAoZXJyb3IgJn4gMHhmZmZmKQorICAgICB7CisgICAgIGNhc2UgT1RIRVJfRVJST1IgKEVSUk5PKToKKy0gICAgICByZXR1cm4gc3RyZXJyb3JfciAoZXJyb3IgJiAweGZmZmYsICJiYWQiLCAwKTsKKysgICAgICBzdHJlcnJvcl9yIChlcnJvciAmIDB4ZmZmZiwgcywgc2l6ZW9mKHMpKTsKKysgICAgICByZXR1cm4gczsKKyAgICAgY2FzZSBPVEhFUl9FUlJPUiAoTElCRUxGKToKKyAgICAgICByZXR1cm4gZWxmX2Vycm1zZyAoZXJyb3IgJiAweGZmZmYpOworICAgICBjYXNlIE9USEVSX0VSUk9SIChMSUJEVyk6CitkaWZmIC0tZ2l0IGEvbGliZHdmbC9kd2ZsX21vZHVsZV9nZXRkd2FyZi5jIGIvbGliZHdmbC9kd2ZsX21vZHVsZV9nZXRkd2FyZi5jCitpbmRleCA5Nzc1YWNlLi41MTFjNGE2IDEwMDY0NAorLS0tIGEvbGliZHdmbC9kd2ZsX21vZHVsZV9nZXRkd2FyZi5jCisrKysgYi9saWJkd2ZsL2R3ZmxfbW9kdWxlX2dldGR3YXJmLmMKK0BAIC0zNSw2ICszNSw3IEBACisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSAic3lzdGVtLmgiCisgI2luY2x1ZGUgIi4uL2xpYmR3L2xpYmR3UC5oIgkvKiBEV0FSRl9FXyogdmFsdWVzIGFyZSBoZXJlLiAgKi8KKyAjaW5jbHVkZSAiLi4vbGliZWxmL2xpYmVsZlAuaCIKKyAjaW5jbHVkZSAic3lzdGVtLmgiCitkaWZmIC0tZ2l0IGEvbGliZHdmbC9maW5kLWRlYnVnaW5mby5jIGIvbGliZHdmbC9maW5kLWRlYnVnaW5mby5jCitpbmRleCA2ZDVhNDJhLi45MjY3Nzg4IDEwMDY0NAorLS0tIGEvbGliZHdmbC9maW5kLWRlYnVnaW5mby5jCisrKysgYi9saWJkd2ZsL2ZpbmQtZGVidWdpbmZvLmMKK0BAIC0zODksNyArMzg5LDcgQEAgZHdmbF9zdGFuZGFyZF9maW5kX2RlYnVnaW5mbyAoRHdmbF9Nb2R1bGUgKm1vZCwKKyAgICAgICAvKiBJZiBGSUxFX05BTUUgaXMgYSBzeW1saW5rLCB0aGUgZGVidWcgZmlsZSBtaWdodCBiZSBhc3NvY2lhdGVkCisgCSB3aXRoIHRoZSBzeW1saW5rIHRhcmdldCBuYW1lIGluc3RlYWQuICAqLworIAorLSAgICAgIGNoYXIgKmNhbm9uID0gY2Fub25pY2FsaXplX2ZpbGVfbmFtZSAoZmlsZV9uYW1lKTsKKysgICAgICBjaGFyICpjYW5vbiA9IHJlYWxwYXRoIChmaWxlX25hbWUsIE5VTEwpOworICAgICAgIGlmIChjYW5vbiAhPSBOVUxMICYmIHN0cmNtcCAoZmlsZV9uYW1lLCBjYW5vbikpCisgCWZkID0gZmluZF9kZWJ1Z2luZm9faW5fcGF0aCAobW9kLCBjYW5vbiwKKyAJCQkJICAgICBkZWJ1Z2xpbmtfZmlsZSwgZGVidWdsaW5rX2NyYywKK2RpZmYgLS1naXQgYS9saWJkd2ZsL2xpYmR3ZmxfY3JjMzJfZmlsZS5jIGIvbGliZHdmbC9saWJkd2ZsX2NyYzMyX2ZpbGUuYworaW5kZXggZjg0OTEyOC4uNmYwYWNhMSAxMDA2NDQKKy0tLSBhL2xpYmR3ZmwvbGliZHdmbF9jcmMzMl9maWxlLmMKKysrKyBiL2xpYmR3ZmwvbGliZHdmbF9jcmMzMl9maWxlLmMKK0BAIC0yOSw2ICsyOSwxNSBAQAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCisrI2lmbmRlZiBURU1QX0ZBSUxVUkVfUkVUUlkKKysjZGVmaW5lIFRFTVBfRkFJTFVSRV9SRVRSWShleHByZXNzaW9uKSBcCisrICAoX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICh7IGxvbmcgaW50IF9fcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgIGRvIF9fcmVzdWx0ID0gKGxvbmcgaW50KSAoZXhwcmVzc2lvbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgIHdoaWxlIChfX3Jlc3VsdCA9PSAtMUwgJiYgZXJybm8gPT0gRUlOVFIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgIF9fcmVzdWx0OyB9KSkKKysjZW5kaWYKKysKKyAjZGVmaW5lIGNyYzMyX2ZpbGUgYXR0cmlidXRlX2hpZGRlbiBfX2xpYmR3ZmxfY3JjMzJfZmlsZQorICNkZWZpbmUgY3JjMzIgX19saWJkd2ZsX2NyYzMyCisgI2luY2x1ZGUgPGxpYmR3ZmxQLmg+CitkaWZmIC0tZ2l0IGEvbGliZHdmbC9saW51eC1rZXJuZWwtbW9kdWxlcy5jIGIvbGliZHdmbC9saW51eC1rZXJuZWwtbW9kdWxlcy5jCitpbmRleCA5ZDBmZWYyLi45ZmMwOWI4IDEwMDY0NAorLS0tIGEvbGliZHdmbC9saW51eC1rZXJuZWwtbW9kdWxlcy5jCisrKysgYi9saWJkd2ZsL2xpbnV4LWtlcm5lbC1tb2R1bGVzLmMKK0BAIC00MCw2ICs0MCw3IEBACisgI2luY2x1ZGUgPHN5c3RlbS5oPgorIAorICNpbmNsdWRlICJsaWJkd2ZsUC5oIgorKyNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KK2RpZmYgLS1naXQgYS9saWJlYmwvZWJsb3BlbmJhY2tlbmQuYyBiL2xpYmVibC9lYmxvcGVuYmFja2VuZC5jCitpbmRleCA1MzcxMzk2Li4yZTY2ZGZkIDEwMDY0NAorLS0tIGEvbGliZWJsL2VibG9wZW5iYWNrZW5kLmMKKysrKyBiL2xpYmVibC9lYmxvcGVuYmFja2VuZC5jCitAQCAtMzIsNyArMzIsNyBAQAorIAorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8ZGxmY24uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGxpYmVsZlAuaD4KKyAjaW5jbHVkZSA8ZHdhcmYuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CitkaWZmIC0tZ2l0IGEvbGliZWxmL2VsZi5oIGIvbGliZWxmL2VsZi5oCitpbmRleCA1Y2YyYjkzLi45OTBiM2FmIDEwMDY0NAorLS0tIGEvbGliZWxmL2VsZi5oCisrKysgYi9saWJlbGYvZWxmLmgKK0BAIC0yMSw3ICsyMSw5IEBACisgCisgI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisgCistX19CRUdJTl9ERUNMUworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyNlbmRpZgorIAorIC8qIFN0YW5kYXJkIEVMRiB0eXBlcy4gICovCisgCitAQCAtMzcwNSw2ICszNzA3LDggQEAgZW51bQorICNkZWZpbmUgUl9CUEZfTk9ORQkJMAkvKiBObyByZWxvYyAqLworICNkZWZpbmUgUl9CUEZfTUFQX0ZECQkxCS8qIE1hcCBmZCB0byBwb2ludGVyICovCisgCistX19FTkRfREVDTFMKKysjaWZkZWYgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisgCisgI2VuZGlmCS8qIGVsZi5oICovCitkaWZmIC0tZ2l0IGEvbGliZWxmL2xpYmVsZi5oIGIvbGliZWxmL2xpYmVsZi5oCitpbmRleCA1NDdjMGY1Li5kZDc4Nzk5IDEwMDY0NAorLS0tIGEvbGliZWxmL2xpYmVsZi5oCisrKysgYi9saWJlbGYvbGliZWxmLmgKK0BAIC0yOSw2ICsyOSw3IEBACisgI2lmbmRlZiBfTElCRUxGX0gKKyAjZGVmaW5lIF9MSUJFTEZfSCAxCisgCisrI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPHN0ZGludC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAKK2RpZmYgLS1naXQgYS9saWJlbGYvbGliZWxmUC5oIGIvbGliZWxmL2xpYmVsZlAuaAoraW5kZXggN2VlNjYyNS4uNTg0MDg5OSAxMDA2NDQKKy0tLSBhL2xpYmVsZi9saWJlbGZQLmgKKysrKyBiL2xpYmVsZi9saWJlbGZQLmgKK0BAIC0zMiw2ICszMiw3IEBACisgCisgI2luY2x1ZGUgPGFyLmg+CisgI2luY2x1ZGUgPGdlbGYuaD4KKysjaW5jbHVkZSA8bGliZWxmLmg+CisgCisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KK2RpZmYgLS1naXQgYS9zcmMvYWRkcjJsaW5lLmMgYi9zcmMvYWRkcjJsaW5lLmMKK2luZGV4IGJhNDE0YTcuLjA0YjcxMTYgMTAwNjQ0CistLS0gYS9zcmMvYWRkcjJsaW5lLmMKKysrKyBiL3NyYy9hZGRyMmxpbmUuYworQEAgLTIzLDcgKzIzLDcgQEAKKyAjaW5jbHVkZSA8YXJncC5oPgorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGludHR5cGVzLmg+CisgI2luY2x1ZGUgPGxpYmR3ZmwuaD4KK2RpZmYgLS1naXQgYS9zcmMvYXIuYyBiL3NyYy9hci5jCitpbmRleCBlYzMyY2VlLi40ZWZkNzI5IDEwMDY0NAorLS0tIGEvc3JjL2FyLmMKKysrKyBiL3NyYy9hci5jCitAQCAtMjIsNyArMjIsNyBAQAorIAorICNpbmNsdWRlIDxhcmdwLmg+CisgI2luY2x1ZGUgPGFzc2VydC5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8Z2VsZi5oPgorICNpbmNsdWRlIDxsaWJpbnRsLmg+CitkaWZmIC0tZ2l0IGEvc3JjL2FybGliLmMgYi9zcmMvYXJsaWIuYworaW5kZXggZTA4MzlhYS4uMTE0MzY1OCAxMDA2NDQKKy0tLSBhL3NyYy9hcmxpYi5jCisrKysgYi9zcmMvYXJsaWIuYworQEAgLTIxLDcgKzIxLDcgQEAKKyAjZW5kaWYKKyAKKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxnZWxmLmg+CisgI2luY2x1ZGUgPGludHR5cGVzLmg+CisgI2luY2x1ZGUgPGxpYmludGwuaD4KK2RpZmYgLS1naXQgYS9zcmMvYXJsaWIyLmMgYi9zcmMvYXJsaWIyLmMKK2luZGV4IDU1M2ZjNTcuLjQ2NDQzZDAgMTAwNjQ0CistLS0gYS9zcmMvYXJsaWIyLmMKKysrKyBiL3NyYy9hcmxpYjIuYworQEAgLTIwLDcgKzIwLDcgQEAKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8bGliaW50bC5oPgorICNpbmNsdWRlIDxsaW1pdHMuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CitkaWZmIC0tZ2l0IGEvc3JjL2VsZmNtcC5jIGIvc3JjL2VsZmNtcC5jCitpbmRleCA1MDQ2NDIwLi5jZmYxODNmIDEwMDY0NAorLS0tIGEvc3JjL2VsZmNtcC5jCisrKysgYi9zcmMvZWxmY21wLmMKK0BAIC0yMyw3ICsyMyw3IEBACisgI2luY2x1ZGUgPGFyZ3AuaD4KKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAjaW5jbHVkZSA8bGliaW50bC5oPgorZGlmZiAtLWdpdCBhL3NyYy9lbGZsaW50LmMgYi9zcmMvZWxmbGludC5jCitpbmRleCA1MWU1M2MyLi5kYTBiMGRjIDEwMDY0NAorLS0tIGEvc3JjL2VsZmxpbnQuYworKysrIGIvc3JjL2VsZmxpbnQuYworQEAgLTI0LDcgKzI0LDcgQEAKKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CisgI2luY2x1ZGUgPGVuZGlhbi5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8Z2VsZi5oPgorICNpbmNsdWRlIDxpbnR0eXBlcy5oPgorZGlmZiAtLWdpdCBhL3NyYy9maW5kdGV4dHJlbC5jIGIvc3JjL2ZpbmR0ZXh0cmVsLmMKK2luZGV4IDhmMWUyMzkuLjcxNDYzYWYgMTAwNjQ0CistLS0gYS9zcmMvZmluZHRleHRyZWwuYworKysrIGIvc3JjL2ZpbmR0ZXh0cmVsLmMKK0BAIC0yMyw3ICsyMyw3IEBACisgI2luY2x1ZGUgPGFyZ3AuaD4KKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxnZWxmLmg+CisgI2luY2x1ZGUgPGxpYmR3Lmg+CitkaWZmIC0tZ2l0IGEvc3JjL25tLmMgYi9zcmMvbm0uYworaW5kZXggOTY5YzZkMy4uMzExM2MwNCAxMDA2NDQKKy0tLSBhL3NyYy9ubS5jCisrKysgYi9zcmMvbm0uYworQEAgLTI2LDcgKzI2LDcgQEAKKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8ZHdhcmYuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGdlbGYuaD4KKyAjaW5jbHVkZSA8aW50dHlwZXMuaD4KK2RpZmYgLS1naXQgYS9zcmMvb2JqZHVtcC5jIGIvc3JjL29iamR1bXAuYworaW5kZXggODYwY2ZhYy4uNjFlNjdiZiAxMDA2NDQKKy0tLSBhL3NyYy9vYmpkdW1wLmMKKysrKyBiL3NyYy9vYmpkdW1wLmMKK0BAIC0yMSw3ICsyMSw3IEBACisgI2VuZGlmCisgCisgI2luY2x1ZGUgPGFyZ3AuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGludHR5cGVzLmg+CisgI2luY2x1ZGUgPGxpYmludGwuaD4KK2RpZmYgLS1naXQgYS9zcmMvcmFubGliLmMgYi9zcmMvcmFubGliLmMKK2luZGV4IGNjMGVlMjMuLmFlODUxZTQgMTAwNjQ0CistLS0gYS9zcmMvcmFubGliLmMKKysrKyBiL3NyYy9yYW5saWIuYworQEAgLTI0LDcgKzI0LDcgQEAKKyAjaW5jbHVkZSA8YXJncC5oPgorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGdlbGYuaD4KKyAjaW5jbHVkZSA8bGliaW50bC5oPgorZGlmZiAtLWdpdCBhL3NyYy9yZWFkZWxmLmMgYi9zcmMvcmVhZGVsZi5jCitpbmRleCAzNDZlY2NkLi5jODMxYWE4IDEwMDY0NAorLS0tIGEvc3JjL3JlYWRlbGYuYworKysrIGIvc3JjL3JlYWRlbGYuYworQEAgLTI1LDcgKzI1LDcgQEAKKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8ZHdhcmYuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGdlbGYuaD4KKyAjaW5jbHVkZSA8aW50dHlwZXMuaD4KK2RpZmYgLS1naXQgYS9zcmMvc2l6ZS5jIGIvc3JjL3NpemUuYworaW5kZXggYWQ4ZGJjYi4uZmQ4M2JlMCAxMDA2NDQKKy0tLSBhL3NyYy9zaXplLmMKKysrKyBiL3NyYy9zaXplLmMKK0BAIC0yMSw3ICsyMSw3IEBACisgI2VuZGlmCisgCisgI2luY2x1ZGUgPGFyZ3AuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGdlbGYuaD4KKyAjaW5jbHVkZSA8aW50dHlwZXMuaD4KK2RpZmYgLS1naXQgYS9zcmMvc3RhY2suYyBiL3NyYy9zdGFjay5jCitpbmRleCA2ZjJmZjY5Li42ZGEwMjQzIDEwMDY0NAorLS0tIGEvc3JjL3N0YWNrLmMKKysrKyBiL3NyYy9zdGFjay5jCitAQCAtMTgsNyArMTgsNyBAQAorICNpbmNsdWRlIDxjb25maWcuaD4KKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPGFyZ3AuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxpbnR0eXBlcy5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorZGlmZiAtLWdpdCBhL3NyYy9zdHJpbmdzLmMgYi9zcmMvc3RyaW5ncy5jCitpbmRleCBkMjE0MzU2Li43NmNiMjZiIDEwMDY0NAorLS0tIGEvc3JjL3N0cmluZ3MuYworKysrIGIvc3JjL3N0cmluZ3MuYworQEAgLTI1LDcgKzI1LDcgQEAKKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8ZW5kaWFuLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxnZWxmLmg+CisgI2luY2x1ZGUgPGludHR5cGVzLmg+CitkaWZmIC0tZ2l0IGEvc3JjL3N0cmlwLmMgYi9zcmMvc3RyaXAuYworaW5kZXggYzc4MzBlYy4uMGQ3ZjE0OCAxMDA2NDQKKy0tLSBhL3NyYy9zdHJpcC5jCisrKysgYi9zcmMvc3RyaXAuYworQEAgLTI0LDcgKzI0LDcgQEAKKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CisgI2luY2x1ZGUgPGVuZGlhbi5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8Zm5tYXRjaC5oPgorICNpbmNsdWRlIDxnZWxmLmg+CitkaWZmIC0tZ2l0IGEvc3JjL3Vuc3RyaXAuYyBiL3NyYy91bnN0cmlwLmMKK2luZGV4IDUwNzQ5MDkuLjNkNGY5NTIgMTAwNjQ0CistLS0gYS9zcmMvdW5zdHJpcC5jCisrKysgYi9zcmMvdW5zdHJpcC5jCitAQCAtMzEsNyArMzEsNyBAQAorICNpbmNsdWRlIDxhcmdwLmg+CisgI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8Zm5tYXRjaC5oPgorICNpbmNsdWRlIDxsaWJpbnRsLmg+CitkaWZmIC0tZ2l0IGEvdGVzdHMvYWRkcnNjb3Blcy5jIGIvdGVzdHMvYWRkcnNjb3Blcy5jCitpbmRleCA3OTE1NjlmLi41NGY0MzExIDEwMDY0NAorLS0tIGEvdGVzdHMvYWRkcnNjb3Blcy5jCisrKysgYi90ZXN0cy9hZGRyc2NvcGVzLmMKK0BAIC0yNSw3ICsyNSw3IEBACisgI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKyAKK2RpZmYgLS1naXQgYS90ZXN0cy9hbGxyZWdzLmMgYi90ZXN0cy9hbGxyZWdzLmMKK2luZGV4IDI4NmY3ZTMuLmM5ZGUwODkgMTAwNjQ0CistLS0gYS90ZXN0cy9hbGxyZWdzLmMKKysrKyBiL3Rlc3RzL2FsbHJlZ3MuYworQEAgLTIxLDcgKzIxLDcgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgI2luY2x1ZGUgPGFyZ3AuaD4KKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CitkaWZmIC0tZ2l0IGEvdGVzdHMvYmFja3RyYWNlLWRhdGEuYyBiL3Rlc3RzL2JhY2t0cmFjZS1kYXRhLmMKK2luZGV4IGEzODdkOGYuLjk1NWMyN2QgMTAwNjQ0CistLS0gYS90ZXN0cy9iYWNrdHJhY2UtZGF0YS5jCisrKysgYi90ZXN0cy9iYWNrdHJhY2UtZGF0YS5jCitAQCAtMjcsNyArMjcsNyBAQAorICNpbmNsdWRlIDxkaXJlbnQuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8ZHdhcmYuaD4KKyAjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiBkZWZpbmVkKF9fbGludXhfXykKK2RpZmYgLS1naXQgYS90ZXN0cy9iYWNrdHJhY2UtZHdhcmYuYyBiL3Rlc3RzL2JhY2t0cmFjZS1kd2FyZi5jCitpbmRleCAyZGM4YTlhLi4yNGNhN2ZiIDEwMDY0NAorLS0tIGEvdGVzdHMvYmFja3RyYWNlLWR3YXJmLmMKKysrKyBiL3Rlc3RzL2JhY2t0cmFjZS1kd2FyZi5jCitAQCAtMjIsNyArMjIsNyBAQAorICNpbmNsdWRlIDxzdGRpb19leHQuaD4KKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy93YWl0Lmg+CitkaWZmIC0tZ2l0IGEvdGVzdHMvYmFja3RyYWNlLmMgYi90ZXN0cy9iYWNrdHJhY2UuYworaW5kZXggMjFhYmU4YS4uZDczMzI0OCAxMDA2NDQKKy0tLSBhL3Rlc3RzL2JhY2t0cmFjZS5jCisrKysgYi90ZXN0cy9iYWNrdHJhY2UuYworQEAgLTI0LDcgKzI0LDcgQEAKKyAjaW5jbHVkZSA8ZGlyZW50Lmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPGR3YXJmLmg+CisgI2lmZGVmIF9fbGludXhfXworZGlmZiAtLWdpdCBhL3Rlc3RzL2J1aWxkaWQuYyBiL3Rlc3RzL2J1aWxkaWQuYworaW5kZXggODdjMTg3Ny4uMjk1M2U2YiAxMDA2NDQKKy0tLSBhL3Rlc3RzL2J1aWxkaWQuYworKysrIGIvdGVzdHMvYnVpbGRpZC5jCitAQCAtMjMsNyArMjMsNyBAQAorICNpbmNsdWRlIEVMRlVUSUxTX0hFQURFUihlbGYpCisgI2luY2x1ZGUgRUxGVVRJTFNfSEVBREVSKGR3ZWxmKQorICNpbmNsdWRlIDxzdGRpby5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK2RpZmYgLS1naXQgYS90ZXN0cy9kZWJ1Z2FsdGxpbmsuYyBiL3Rlc3RzL2RlYnVnYWx0bGluay5jCitpbmRleCA2ZDk3ZDUwLi5lZTdlNTU5IDEwMDY0NAorLS0tIGEvdGVzdHMvZGVidWdhbHRsaW5rLmMKKysrKyBiL3Rlc3RzL2RlYnVnYWx0bGluay5jCitAQCAtMjMsNyArMjMsNyBAQAorICNpbmNsdWRlIEVMRlVUSUxTX0hFQURFUihkdykKKyAjaW5jbHVkZSBFTEZVVElMU19IRUFERVIoZHdlbGYpCisgI2luY2x1ZGUgPHN0ZGlvLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorZGlmZiAtLWdpdCBhL3Rlc3RzL2RlYnVnbGluay5jIGIvdGVzdHMvZGVidWdsaW5rLmMKK2luZGV4IDkzNWQxMDIuLjc0MWNiODEgMTAwNjQ0CistLS0gYS90ZXN0cy9kZWJ1Z2xpbmsuYworKysrIGIvdGVzdHMvZGVidWdsaW5rLmMKK0BAIC0yMSw3ICsyMSw3IEBACisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgRUxGVVRJTFNfSEVBREVSKGR3ZWxmKQorICNpbmNsdWRlIDxzdGRpby5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK2RpZmYgLS1naXQgYS90ZXN0cy9kZWxldGVkLmMgYi90ZXN0cy9kZWxldGVkLmMKK2luZGV4IDZiZTM1YmMuLjAxOTA3MTEgMTAwNjQ0CistLS0gYS90ZXN0cy9kZWxldGVkLmMKKysrKyBiL3Rlc3RzL2RlbGV0ZWQuYworQEAgLTIxLDcgKzIxLDcgQEAKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaWZkZWYgX19saW51eF9fCisgI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgorZGlmZiAtLWdpdCBhL3Rlc3RzL2R3ZmwtYWRkci1zZWN0LmMgYi90ZXN0cy9kd2ZsLWFkZHItc2VjdC5jCitpbmRleCAyMWU0NzBhLi4xZWExZTNiIDEwMDY0NAorLS0tIGEvdGVzdHMvZHdmbC1hZGRyLXNlY3QuYworKysrIGIvdGVzdHMvZHdmbC1hZGRyLXNlY3QuYworQEAgLTIzLDcgKzIzLDcgQEAKKyAjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGxvY2FsZS5oPgorICNpbmNsdWRlIDxhcmdwLmg+CisgI2luY2x1ZGUgRUxGVVRJTFNfSEVBREVSKGR3ZmwpCitkaWZmIC0tZ2l0IGEvdGVzdHMvZHdmbC1idWctYWRkci1vdmVyZmxvdy5jIGIvdGVzdHMvZHdmbC1idWctYWRkci1vdmVyZmxvdy5jCitpbmRleCBhYTgwMzBlLi4wMmM4YmVmIDEwMDY0NAorLS0tIGEvdGVzdHMvZHdmbC1idWctYWRkci1vdmVyZmxvdy5jCisrKysgYi90ZXN0cy9kd2ZsLWJ1Zy1hZGRyLW92ZXJmbG93LmMKK0BAIC0yMCw3ICsyMCw3IEBACisgI2luY2x1ZGUgPGludHR5cGVzLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgI2luY2x1ZGUgRUxGVVRJTFNfSEVBREVSKGR3ZmwpCisgCitkaWZmIC0tZ2l0IGEvdGVzdHMvZHdmbC1idWctZmQtbGVhay5jIGIvdGVzdHMvZHdmbC1idWctZmQtbGVhay5jCitpbmRleCA2ODljZGQ3Li41OTczZGEzIDEwMDY0NAorLS0tIGEvdGVzdHMvZHdmbC1idWctZmQtbGVhay5jCisrKysgYi90ZXN0cy9kd2ZsLWJ1Zy1mZC1sZWFrLmMKK0BAIC0yNCw3ICsyNCw3IEBACisgI2luY2x1ZGUgPGRpcmVudC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxkd2FyZi5oPgorIAorZGlmZiAtLWdpdCBhL3Rlc3RzL2R3ZmwtYnVnLWdldG1vZHVsZXMuYyBiL3Rlc3RzL2R3ZmwtYnVnLWdldG1vZHVsZXMuYworaW5kZXggMWVlOTg5Zi4uZmQ2MmU2NSAxMDA2NDQKKy0tLSBhL3Rlc3RzL2R3ZmwtYnVnLWdldG1vZHVsZXMuYworKysrIGIvdGVzdHMvZHdmbC1idWctZ2V0bW9kdWxlcy5jCitAQCAtMTgsNyArMTgsNyBAQAorICNpbmNsdWRlIDxjb25maWcuaD4KKyAjaW5jbHVkZSBFTEZVVElMU19IRUFERVIoZHdmbCkKKyAKKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgCisgc3RhdGljIGNvbnN0IER3ZmxfQ2FsbGJhY2tzIGNhbGxiYWNrcyA9CisgICB7CitkaWZmIC0tZ2l0IGEvdGVzdHMvZHdmbC1yZXBvcnQtZWxmLWFsaWduLmMgYi90ZXN0cy9kd2ZsLXJlcG9ydC1lbGYtYWxpZ24uYworaW5kZXggYTRlOTdkMy4uZjQ3MTU4NyAxMDA2NDQKKy0tLSBhL3Rlc3RzL2R3ZmwtcmVwb3J0LWVsZi1hbGlnbi5jCisrKysgYi90ZXN0cy9kd2ZsLXJlcG9ydC1lbGYtYWxpZ24uYworQEAgLTIwLDcgKzIwLDcgQEAKKyAjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorZGlmZiAtLWdpdCBhL3Rlc3RzL2R3ZmxsaW5lcy5jIGIvdGVzdHMvZHdmbGxpbmVzLmMKK2luZGV4IDkwMzc5ZGQuLmNiZGY2YzQgMTAwNjQ0CistLS0gYS90ZXN0cy9kd2ZsbGluZXMuYworKysrIGIvdGVzdHMvZHdmbGxpbmVzLmMKK0BAIC0yNyw3ICsyNyw3IEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgCisgaW50CisgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK2RpZmYgLS1naXQgYS90ZXN0cy9kd2ZsbW9kdGVzdC5jIGIvdGVzdHMvZHdmbG1vZHRlc3QuYworaW5kZXggMDAyN2Y5Ni4uZTY4ZDNiYyAxMDA2NDQKKy0tLSBhL3Rlc3RzL2R3Zmxtb2R0ZXN0LmMKKysrKyBiL3Rlc3RzL2R3Zmxtb2R0ZXN0LmMKK0BAIC0yMyw3ICsyMyw3IEBACisgI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAjaW5jbHVkZSA8YXJncC5oPgorICNpbmNsdWRlIEVMRlVUSUxTX0hFQURFUihkd2ZsKQorZGlmZiAtLWdpdCBhL3Rlc3RzL2R3ZmxzeW1zLmMgYi90ZXN0cy9kd2Zsc3ltcy5jCitpbmRleCA0OWFjMzM0Li5jZjA3ODMwIDEwMDY0NAorLS0tIGEvdGVzdHMvZHdmbHN5bXMuYworKysrIGIvdGVzdHMvZHdmbHN5bXMuYworQEAgLTI1LDcgKzI1LDcgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgCisgc3RhdGljIGNvbnN0IGNoYXIgKgorZGlmZiAtLWdpdCBhL3Rlc3RzL2Vhcmx5LW9mZnNjbi5jIGIvdGVzdHMvZWFybHktb2Zmc2NuLmMKK2luZGV4IDkyNGNiOWUuLjZmNjBkNWEgMTAwNjQ0CistLS0gYS90ZXN0cy9lYXJseS1vZmZzY24uYworKysrIGIvdGVzdHMvZWFybHktb2Zmc2NuLmMKK0BAIC0xOSw3ICsxOSw3IEBACisgI2VuZGlmCisgCisgI2luY2x1ZGUgPGVycm5vLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxnZWxmLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CitkaWZmIC0tZ2l0IGEvdGVzdHMvZWNwLmMgYi90ZXN0cy9lY3AuYworaW5kZXggMzhhNjg1OS4uNzQzY2VhNSAxMDA2NDQKKy0tLSBhL3Rlc3RzL2VjcC5jCisrKysgYi90ZXN0cy9lY3AuYworQEAgLTIwLDcgKzIwLDcgQEAKKyAjZW5kaWYKKyAKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGdlbGYuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CitkaWZmIC0tZ2l0IGEvdGVzdHMvZmluZC1wcm9sb2d1ZXMuYyBiL3Rlc3RzL2ZpbmQtcHJvbG9ndWVzLmMKK2luZGV4IGJhOGFlMzcuLjc2ZjVmMDQgMTAwNjQ0CistLS0gYS90ZXN0cy9maW5kLXByb2xvZ3Vlcy5jCisrKysgYi90ZXN0cy9maW5kLXByb2xvZ3Vlcy5jCitAQCAtMjUsNyArMjUsNyBAQAorICNpbmNsdWRlIDxzdGRpb19leHQuaD4KKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPGZubWF0Y2guaD4KKyAKK2RpZmYgLS1naXQgYS90ZXN0cy9mdW5jcmV0dmFsLmMgYi90ZXN0cy9mdW5jcmV0dmFsLmMKK2luZGV4IDhkMTlkMTEuLmM4YWFhOTMgMTAwNjQ0CistLS0gYS90ZXN0cy9mdW5jcmV0dmFsLmMKKysrKyBiL3Rlc3RzL2Z1bmNyZXR2YWwuYworQEAgLTI1LDcgKzI1LDcgQEAKKyAjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+CisgI2luY2x1ZGUgPGxvY2FsZS5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxmbm1hdGNoLmg+CisgCitkaWZmIC0tZ2l0IGEvdGVzdHMvZnVuY3Njb3Blcy5jIGIvdGVzdHMvZnVuY3Njb3Blcy5jCitpbmRleCA5YzkwMTg1Li5kYmNjYjg5IDEwMDY0NAorLS0tIGEvdGVzdHMvZnVuY3Njb3Blcy5jCisrKysgYi90ZXN0cy9mdW5jc2NvcGVzLmMKK0BAIC0yNSw3ICsyNSw3IEBACisgI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8Zm5tYXRjaC5oPgorIAorZGlmZiAtLWdpdCBhL3Rlc3RzL2dldHNyY19kaWUuYyBiL3Rlc3RzL2dldHNyY19kaWUuYworaW5kZXggMDU1YWVkZS4uOWMzOTRkZCAxMDA2NDQKKy0tLSBhL3Rlc3RzL2dldHNyY19kaWUuYworKysrIGIvdGVzdHMvZ2V0c3JjX2RpZS5jCitAQCAtMTksNyArMTksNyBAQAorICNlbmRpZgorIAorICNpbmNsdWRlIDxlcnJuby5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyAjaW5jbHVkZSA8bGliZWxmLmg+CitkaWZmIC0tZ2l0IGEvdGVzdHMvbGluZTJhZGRyLmMgYi90ZXN0cy9saW5lMmFkZHIuYworaW5kZXggZTBkNjVkMy4uOWJmMDAyMyAxMDA2NDQKKy0tLSBhL3Rlc3RzL2xpbmUyYWRkci5jCisrKysgYi90ZXN0cy9saW5lMmFkZHIuYworQEAgLTI2LDcgKzI2LDcgQEAKKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgCisgCisgc3RhdGljIHZvaWQKK2RpZmYgLS1naXQgYS90ZXN0cy9sb3dfaGlnaF9wYy5jIGIvdGVzdHMvbG93X2hpZ2hfcGMuYworaW5kZXggZDBmNDMwMi4uOGRhNGZiZCAxMDA2NDQKKy0tLSBhL3Rlc3RzL2xvd19oaWdoX3BjLmMKKysrKyBiL3Rlc3RzL2xvd19oaWdoX3BjLmMKK0BAIC0yNSw3ICsyNSw3IEBACisgI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8Zm5tYXRjaC5oPgorIAorZGlmZiAtLWdpdCBhL3Rlc3RzL21kNS1zaGExLXRlc3QuYyBiL3Rlc3RzL21kNS1zaGExLXRlc3QuYworaW5kZXggZDUwMzU1ZS4uM2M0MWY0MCAxMDA2NDQKKy0tLSBhL3Rlc3RzL21kNS1zaGExLXRlc3QuYworKysrIGIvdGVzdHMvbWQ1LXNoYTEtdGVzdC5jCitAQCAtMTksNyArMTksNyBAQAorICNlbmRpZgorIAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgCisgI2luY2x1ZGUgIm1kNS5oIgorICNpbmNsdWRlICJzaGExLmgiCitkaWZmIC0tZ2l0IGEvdGVzdHMvcmR3cm1tYXAuYyBiL3Rlc3RzL3Jkd3JtbWFwLmMKK2luZGV4IDZmMDI3ZGYuLjFjZTVlNmUgMTAwNjQ0CistLS0gYS90ZXN0cy9yZHdybW1hcC5jCisrKysgYi90ZXN0cy9yZHdybW1hcC5jCitAQCAtMTksNyArMTksNyBAQAorICNlbmRpZgorIAorICNpbmNsdWRlIDxlcnJuby5oPgorLSNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxlcnIuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CitkaWZmIC0tZ2l0IGEvdGVzdHMvc2FyaWR4LmMgYi90ZXN0cy9zYXJpZHguYworaW5kZXggOGE0NTBkOC4uYjM4NzgwMSAxMDA2NDQKKy0tLSBhL3Rlc3RzL3NhcmlkeC5jCisrKysgYi90ZXN0cy9zYXJpZHguYworQEAgLTE3LDcgKzE3LDcgQEAKKyAKKyAjaW5jbHVkZSA8Y29uZmlnLmg+CisgCistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxnZWxmLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CitkaWZmIC0tZ2l0IGEvdGVzdHMvc2VjdGlvbmR1bXAuYyBiL3Rlc3RzL3NlY3Rpb25kdW1wLmMKK2luZGV4IDMwMzNmZWQuLjhlODg4ZGIgMTAwNjQ0CistLS0gYS90ZXN0cy9zZWN0aW9uZHVtcC5jCisrKysgYi90ZXN0cy9zZWN0aW9uZHVtcC5jCitAQCAtMTgsNyArMTgsNyBAQAorICNpbmNsdWRlIDxjb25maWcuaD4KKyAKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0jaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8ZXJyLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGdlbGYuaD4KKyAjaW5jbHVkZSA8aW50dHlwZXMuaD4KK2RpZmYgLS1naXQgYS90ZXN0cy92YXJsb2NzLmMgYi90ZXN0cy92YXJsb2NzLmMKK2luZGV4IGMzZmJhODkuLmUwNDNlYTIgMTAwNjQ0CistLS0gYS90ZXN0cy92YXJsb2NzLmMKKysrKyBiL3Rlc3RzL3ZhcmxvY3MuYworQEAgLTI1LDcgKzI1LDcgQEAKKyAjaW5jbHVkZSA8ZHdhcmYuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CitkaWZmIC0tZ2l0IGEvdGVzdHMvdmRzb3N5bXMuYyBiL3Rlc3RzL3Zkc29zeW1zLmMKK2luZGV4IGI4NzZjMTAuLmFmYjI4MjMgMTAwNjQ0CistLS0gYS90ZXN0cy92ZHNvc3ltcy5jCisrKysgYi90ZXN0cy92ZHNvc3ltcy5jCitAQCAtMTgsNyArMTgsNyBAQAorICNpbmNsdWRlIDxjb25maWcuaD4KKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CistI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGVyci5oPgorICNpbmNsdWRlIDxpbnR0eXBlcy5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY4L2RlYmlhbi8wMDAxLUlnbm9yZS1kaWZmZXJlbmNlcy1iZXR3ZWVuLW1pcHMtbWFjaGluZS1pZGVudGlmaWVycy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZmlsZXMvZGViaWFuLzAwMDEtSWdub3JlLWRpZmZlcmVuY2VzLWJldHdlZW4tbWlwcy1tYWNoaW5lLWlkZW50aWZpZXJzLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY4L2RlYmlhbi8wMDAxLUlnbm9yZS1kaWZmZXJlbmNlcy1iZXR3ZWVuLW1pcHMtbWFjaGluZS1pZGVudGlmaWVycy5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9maWxlcy9kZWJpYW4vMDAwMS1JZ25vcmUtZGlmZmVyZW5jZXMtYmV0d2Vlbi1taXBzLW1hY2hpbmUtaWRlbnRpZmllcnMucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjgvZGViaWFuLzAwMDItQWRkLXN1cHBvcnQtZm9yLW1pcHM2NC1hYmlzLWluLW1pcHNfcmV0dmFsLmMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2ZpbGVzL2RlYmlhbi8wMDAyLUFkZC1zdXBwb3J0LWZvci1taXBzNjQtYWJpcy1pbi1taXBzX3JldHZhbC5jLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY4L2RlYmlhbi8wMDAyLUFkZC1zdXBwb3J0LWZvci1taXBzNjQtYWJpcy1pbi1taXBzX3JldHZhbC5jLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2ZpbGVzL2RlYmlhbi8wMDAyLUFkZC1zdXBwb3J0LWZvci1taXBzNjQtYWJpcy1pbi1taXBzX3JldHZhbC5jLnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTY4L2RlYmlhbi8wMDAzLUFkZC1taXBzLW42NC1yZWxvY2F0aW9uLWZvcm1hdC1oYWNrLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9maWxlcy9kZWJpYW4vMDAwMy1BZGQtbWlwcy1uNjQtcmVsb2NhdGlvbi1mb3JtYXQtaGFjay5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2OC9kZWJpYW4vMDAwMy1BZGQtbWlwcy1uNjQtcmVsb2NhdGlvbi1mb3JtYXQtaGFjay5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9maWxlcy9kZWJpYW4vMDAwMy1BZGQtbWlwcy1uNjQtcmVsb2NhdGlvbi1mb3JtYXQtaGFjay5wYXRjaApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2OC9kZWJpYW4vYXJtX2JhY2tlbmQuZGlmZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZmlsZXMvZGViaWFuL2FybV9iYWNrZW5kLmRpZmYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjgvZGViaWFuL2FybV9iYWNrZW5kLmRpZmYKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZmlsZXMvZGViaWFuL2FybV9iYWNrZW5kLmRpZmYKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjgvZmFsbHRocm91Z2gucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2ZpbGVzL2RlYmlhbi9mYWxsdGhyb3VnaC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2OC9mYWxsdGhyb3VnaC5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9maWxlcy9kZWJpYW4vZmFsbHRocm91Z2gucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjgvZGViaWFuL2hwcGFfYmFja2VuZC5kaWZmIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9maWxlcy9kZWJpYW4vaHBwYV9iYWNrZW5kLmRpZmYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjgvZGViaWFuL2hwcGFfYmFja2VuZC5kaWZmCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2ZpbGVzL2RlYmlhbi9ocHBhX2JhY2tlbmQuZGlmZgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9maWxlcy9kZWJpYW4vbWlwc19iYWNrZW5kLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9maWxlcy9kZWJpYW4vbWlwc19iYWNrZW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMGU1NGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2ZpbGVzL2RlYmlhbi9taXBzX2JhY2tlbmQucGF0Y2gKQEAgLTAsMCArMSw3MTUgQEAKK0Zyb20gNDZkMGQwY2E3MTgwOTM0ODZlZWVlZGYxYjQ0MTM0ZTllMjliNTZmNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMTYgQXVnIDIwMTcgMDk6MTg6NTkgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gbWlwcyBiYWNrZW5kcworCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtmcm9tIGRlYmlhbl0KKworUmViYXNlIHRvIDAuMTcwCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBiYWNrZW5kcy9NYWtlZmlsZS5hbSAgICB8ICAgOCArLQorIGJhY2tlbmRzL21pcHNfaW5pdC5jICAgIHwgIDU5ICsrKysrKysrKworIGJhY2tlbmRzL21pcHNfcmVncy5jICAgIHwgMTA0ICsrKysrKysrKysrKysrKysKKyBiYWNrZW5kcy9taXBzX3JlbG9jLmRlZiB8ICA3OSArKysrKysrKysrKysKKyBiYWNrZW5kcy9taXBzX3JldHZhbC5jICB8IDMyMSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBiYWNrZW5kcy9taXBzX3N5bWJvbC5jICB8ICA1MiArKysrKysrKworIGxpYmVibC9lYmxvcGVuYmFja2VuZC5jIHwgICAyICsKKyA3IGZpbGVzIGNoYW5nZWQsIDYyMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBiYWNrZW5kcy9taXBzX2luaXQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBiYWNrZW5kcy9taXBzX3JlZ3MuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBiYWNrZW5kcy9taXBzX3JlbG9jLmRlZgorIGNyZWF0ZSBtb2RlIDEwMDY0NCBiYWNrZW5kcy9taXBzX3JldHZhbC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGJhY2tlbmRzL21pcHNfc3ltYm9sLmMKKworZGlmZiAtLWdpdCBhL2JhY2tlbmRzL01ha2VmaWxlLmFtIGIvYmFja2VuZHMvTWFrZWZpbGUuYW0KK2luZGV4IDdmMWY1ZDQuLjkxYmFmNmUgMTAwNjQ0CistLS0gYS9iYWNrZW5kcy9NYWtlZmlsZS5hbQorKysrIGIvYmFja2VuZHMvTWFrZWZpbGUuYW0KK0BAIC0zMywxMiArMzMsMTIgQEAgQU1fQ1BQRkxBR1MgKz0gLUkkKHRvcF9zcmNkaXIpL2xpYmVibCAtSSQodG9wX3NyY2RpcikvbGliYXNtIFwKKyAKKyAKKyBtb2R1bGVzID0gaTM4NiBzaCB4ODZfNjQgaWE2NCBhbHBoYSBhcm0gYWFyY2g2NCBzcGFyYyBwcGMgcHBjNjQgczM5MCBcCistCSAgdGlsZWd4IG02OGsgYnBmIHBhcmlzYworKwkgIHRpbGVneCBtNjhrIGJwZiBwYXJpc2MgbWlwcworIGxpYmVibF9waWMgPSBsaWJlYmxfaTM4Nl9waWMuYSBsaWJlYmxfc2hfcGljLmEgbGliZWJsX3g4Nl82NF9waWMuYSAgICBcCisgCSAgICAgbGliZWJsX2lhNjRfcGljLmEgbGliZWJsX2FscGhhX3BpYy5hIGxpYmVibF9hcm1fcGljLmEgICAgXAorIAkgICAgIGxpYmVibF9hYXJjaDY0X3BpYy5hIGxpYmVibF9zcGFyY19waWMuYSBsaWJlYmxfcHBjX3BpYy5hIFwKKyAJICAgICBsaWJlYmxfcHBjNjRfcGljLmEgbGliZWJsX3MzOTBfcGljLmEgbGliZWJsX3RpbGVneF9waWMuYSBcCistCSAgICAgbGliZWJsX202OGtfcGljLmEgbGliZWJsX2JwZl9waWMuYSBsaWJlYmxfcGFyaXNjX3BpYy5hCisrCSAgICAgbGliZWJsX202OGtfcGljLmEgbGliZWJsX2JwZl9waWMuYSBsaWJlYmxfcGFyaXNjX3BpYy5hIGxpYmVibF9taXBzX3BpYy5hCisgbm9pbnN0X0xJQlJBUklFUyA9ICQobGliZWJsX3BpYykKKyBub2luc3RfREFUQSA9ICQobGliZWJsX3BpYzpfcGljLmE9LnNvKQorIAorQEAgLTEyOCw2ICsxMjgsMTAgQEAgcGFyaXNjX1NSQ1MgPSBwYXJpc2NfaW5pdC5jIHBhcmlzY19zeW1ib2wuYyBwYXJpc2NfcmVncy5jIHBhcmlzY19yZXR2YWwuYworIGxpYmVibF9wYXJpc2NfcGljX2FfU09VUkNFUyA9ICQocGFyaXNjX1NSQ1MpCisgYW1fbGliZWJsX3BhcmlzY19waWNfYV9PQkpFQ1RTID0gJChwYXJpc2NfU1JDUzouYz0ub3MpCisgCisrbWlwc19TUkNTID0gbWlwc19pbml0LmMgbWlwc19zeW1ib2wuYyBtaXBzX3JlZ3MuYyBtaXBzX3JldHZhbC5jCisrbGliZWJsX21pcHNfcGljX2FfU09VUkNFUyA9ICQobWlwc19TUkNTKQorK2FtX2xpYmVibF9taXBzX3BpY19hX09CSkVDVFMgPSAkKG1pcHNfU1JDUzouYz0ub3MpCisrCisgbGliZWJsXyUuc28gbGliZWJsXyUubWFwOiBsaWJlYmxfJV9waWMuYSAkKGxpYmVsZikgJChsaWJkdykgJChsaWJldSkKKyAJQHJtIC1mICQoQDouc289Lm1hcCkKKyAJJChBTV9WX2F0KWVjaG8gJ0VMRlVUSUxTXyQoUEFDS0FHRV9WRVJTSU9OKSB7IGdsb2JhbDogJCpfaW5pdDsgbG9jYWw6ICo7IH07JyBcCitkaWZmIC0tZ2l0IGEvYmFja2VuZHMvbWlwc19pbml0LmMgYi9iYWNrZW5kcy9taXBzX2luaXQuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjk3NWMwNGUKKy0tLSAvZGV2L251bGwKKysrKyBiL2JhY2tlbmRzL21pcHNfaW5pdC5jCitAQCAtMCwwICsxLDU5IEBACisrLyogSW5pdGlhbGl6YXRpb24gb2YgbWlwcyBzcGVjaWZpYyBiYWNrZW5kIGxpYnJhcnkuCisrICAgQ29weXJpZ2h0IChDKSAyMDA2IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2RlZmluZSBCQUNLRU5ECQltaXBzXworKyNkZWZpbmUgUkVMT0NfUFJFRklYCVJfTUlQU18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworKy8qIFRoaXMgZGVmaW5lcyB0aGUgY29tbW9uIHJlbG9jIGhvb2tzIGJhc2VkIG9uIG1pcHNfcmVsb2MuZGVmLiAgKi8KKysjaW5jbHVkZSAiY29tbW9uLXJlbG9jLmMiCisrCisrY29uc3QgY2hhciAqCisrbWlwc19pbml0IChFbGYgKmVsZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrICAgICBHRWxmX0hhbGYgbWFjaGluZSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrICAgICBFYmwgKmVoLAorKyAgICAgc2l6ZV90IGVobGVuKQorK3sKKysgIC8qIENoZWNrIHdoZXRoZXIgdGhlIEVsZl9CSCBvYmplY3QgaGFzIGEgc3VmZmljZW50IHNpemUuICAqLworKyAgaWYgKGVobGVuIDwgc2l6ZW9mIChFYmwpKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIC8qIFdlIGhhbmRsZSBpdC4gICovCisrICBpZiAobWFjaGluZSA9PSBFTV9NSVBTKQorKyAgICBlaC0+bmFtZSA9ICJNSVBTIFIzMDAwIGJpZy1lbmRpYW4iOworKyAgZWxzZSBpZiAobWFjaGluZSA9PSBFTV9NSVBTX1JTM19MRSkKKysgICAgZWgtPm5hbWUgPSAiTUlQUyBSMzAwMCBsaXR0bGUtZW5kaWFuIjsKKysKKysgIG1pcHNfaW5pdF9yZWxvYyAoZWgpOworKyAgSE9PSyAoZWgsIHJlbG9jX3NpbXBsZV90eXBlKTsKKysgIEhPT0sgKGVoLCByZXR1cm5fdmFsdWVfbG9jYXRpb24pOworKyAgSE9PSyAoZWgsIHJlZ2lzdGVyX2luZm8pOworKworKyAgcmV0dXJuIE1PRFZFUlNJT047CisrfQorZGlmZiAtLWdpdCBhL2JhY2tlbmRzL21pcHNfcmVncy5jIGIvYmFja2VuZHMvbWlwc19yZWdzLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi40NGY4NmNiCistLS0gL2Rldi9udWxsCisrKysgYi9iYWNrZW5kcy9taXBzX3JlZ3MuYworQEAgLTAsMCArMSwxMDQgQEAKKysvKiBSZWdpc3RlciBuYW1lcyBhbmQgbnVtYmVycyBmb3IgTUlQUyBEV0FSRi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDYgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrCisrI2RlZmluZSBCQUNLRU5EIG1pcHNfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKytzc2l6ZV90CisrbWlwc19yZWdpc3Rlcl9pbmZvIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSwKKysJCSAgICBpbnQgcmVnbm8sIGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAorKwkJICAgIGNvbnN0IGNoYXIgKipwcmVmaXgsIGNvbnN0IGNoYXIgKipzZXRuYW1lLAorKwkJICAgIGludCAqYml0cywgaW50ICp0eXBlKQorK3sKKysgIGlmIChuYW1lID09IE5VTEwpCisrICAgIHJldHVybiA2NjsKKysKKysgIGlmIChyZWdubyA8IDAgfHwgcmVnbm8gPiA2NSB8fCBuYW1lbGVuIDwgNCkKKysgICAgcmV0dXJuIC0xOworKworKyAgKnByZWZpeCA9ICIkIjsKKysKKysgIGlmIChyZWdubyA8IDMyKQorKyAgICB7CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgaWYgKHJlZ25vIDwgMzIgKyAxMCkKKysgICAgICAgIHsKKysgICAgICAgICAgbmFtZVswXSA9IHJlZ25vICsgJzAnOworKyAgICAgICAgICBuYW1lbGVuID0gMTsKKysgICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgIG5hbWVbMF0gPSAocmVnbm8gLyAxMCkgKyAnMCc7CisrICAgICAgICAgIG5hbWVbMV0gPSAocmVnbm8gJSAxMCkgKyAnMCc7CisrICAgICAgICAgIG5hbWVsZW4gPSAyOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChyZWdubyA8IDY0KQorKyAgICB7CisrICAgICAgKnNldG5hbWUgPSAiRlBVIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9mbG9hdDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIG5hbWVbMF0gPSAnZic7CisrICAgICAgaWYgKHJlZ25vIDwgMzIgKyAxMCkKKysJeworKwkgIG5hbWVbMV0gPSAocmVnbm8gLSAzMikgKyAnMCc7CisrCSAgbmFtZWxlbiA9IDI7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICBuYW1lWzFdID0gKHJlZ25vIC0gMzIpIC8gMTAgKyAnMCc7CisrCSAgbmFtZVsyXSA9IChyZWdubyAtIDMyKSAlIDEwICsgJzAnOworKwkgIG5hbWVsZW4gPSAzOworKwl9CisrICAgIH0KKysgIGVsc2UgaWYgKHJlZ25vID09IDY0KQorKyAgICB7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgbmFtZVswXSA9ICdoJzsKKysgICAgICBuYW1lWzFdID0gJ2knOworKyAgICAgIG5hbWVsZW4gPSAyOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICBuYW1lWzBdID0gJ2wnOworKyAgICAgIG5hbWVbMV0gPSAnbyc7CisrICAgICAgbmFtZWxlbiA9IDI7CisrICAgIH0KKysKKysgIG5hbWVbbmFtZWxlbisrXSA9ICdcMCc7CisrICByZXR1cm4gbmFtZWxlbjsKKyt9CitkaWZmIC0tZ2l0IGEvYmFja2VuZHMvbWlwc19yZWxvYy5kZWYgYi9iYWNrZW5kcy9taXBzX3JlbG9jLmRlZgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjQ1Nzk5NzAKKy0tLSAvZGV2L251bGwKKysrKyBiL2JhY2tlbmRzL21pcHNfcmVsb2MuZGVmCitAQCAtMCwwICsxLDc5IEBACisrLyogTGlzdCB0aGUgcmVsb2NhdGlvbiB0eXBlcyBmb3IgbWlwcy4gIC0qLSBDIC0qLQorKyAgIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrLyogCSAgICBOQU1FLAkJUkVMfEVYRUN8RFlOCSovCisrCisrUkVMT0NfVFlQRSAoTk9ORSwgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKDE2LCAgICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFICgzMiwgICAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoUkVMMzIsICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKDI2LCAgICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChISTE2LCAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoTE8xNiwgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTYsICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChMSVRFUkFMLCAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UMTYsICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFBDMTYsICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChDQUxMMTYsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR1BSRUwzMiwgICAgICAgICAgICAwKQorKworK1JFTE9DX1RZUEUgKFNISUZUNSwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChTSElGVDYsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoNjQsICAgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVF9ESVNQLCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1RfUEFHRSwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UX09GU1QsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVF9ISTE2LCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1RfTE8xNiwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoU1VCLCAgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKElOU0VSVF9BLCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChJTlNFUlRfQiwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoREVMRVRFLCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEhJR0hFUiwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChISUdIRVNULCAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoQ0FMTF9ISTE2LCAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKENBTExfTE8xNiwgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChTQ05fRElTUCwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoUkVMMTYsICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEFERF9JTU1FRElBVEUsICAgICAgMCkKKytSRUxPQ19UWVBFIChQSlVNUCwgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoUkVMR09ULCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEpBTFIsICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQTU9EMzIsICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUFJFTDMyLCAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBNT0Q2NCwgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQUkVMNjQsICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0dELCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19MRE0sICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQUkVMX0hJMTYsICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUFJFTF9MTzE2LCAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19HT1RUUFJFTCwgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfVFBSRUwzMiwgICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX1RQUkVMNjQsICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19UUFJFTF9ISTE2LCAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfVFBSRUxfTE8xNiwgICAgIDApCisrCisrI2RlZmluZSBOT19DT1BZX1JFTE9DIDEKKysjZGVmaW5lIE5PX1JFTEFUSVZFX1JFTE9DIDEKK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9taXBzX3JldHZhbC5jIGIvYmFja2VuZHMvbWlwc19yZXR2YWwuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjY1NmNkMWYKKy0tLSAvZGV2L251bGwKKysrKyBiL2JhY2tlbmRzL21pcHNfcmV0dmFsLmMKK0BAIC0wLDAgKzEsMzIxIEBACisrLyogRnVuY3Rpb24gcmV0dXJuIHZhbHVlIGxvY2F0aW9uIGZvciBMaW51eC9taXBzIEFCSS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDUgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxkd2FyZi5oPgorKyNpbmNsdWRlIDxlbGYuaD4KKysKKysjaW5jbHVkZSAiLi4vbGliZWJsL2xpYmVibFAuaCIKKysjaW5jbHVkZSAiLi4vbGliZHcvbGliZHdQLmgiCisrCisrI2RlZmluZSBCQUNLRU5EIG1pcHNfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKysvKiBUaGUgQUJJIG9mIHRoZSBmaWxlLiAgQWxzbyBzZWUgRUZfTUlQU19BQkkyIGFib3ZlLiAqLworKyNkZWZpbmUgRUZfTUlQU19BQkkJCTB4MDAwMEYwMDAKKysKKysvKiBUaGUgb3JpZ2luYWwgbzMyIGFiaS4gKi8KKysjZGVmaW5lIEVfTUlQU19BQklfTzMyICAgICAgICAgIDB4MDAwMDEwMDAKKysKKysvKiBPMzIgZXh0ZW5kZWQgdG8gd29yayBvbiA2NCBiaXQgYXJjaGl0ZWN0dXJlcyAqLworKyNkZWZpbmUgRV9NSVBTX0FCSV9PNjQgICAgICAgICAgMHgwMDAwMjAwMAorKworKy8qIEVBQkkgaW4gMzIgYml0IG1vZGUgKi8KKysjZGVmaW5lIEVfTUlQU19BQklfRUFCSTMyICAgICAgIDB4MDAwMDMwMDAKKysKKysvKiBFQUJJIGluIDY0IGJpdCBtb2RlICovCisrI2RlZmluZSBFX01JUFNfQUJJX0VBQkk2NCAgICAgICAweDAwMDA0MDAwCisrCisrLyogQWxsIHRoZSBwb3NzaWJsZSBNSVBTIEFCSXMuICovCisrZW51bSBtaXBzX2FiaQorKyAgeworKyAgICBNSVBTX0FCSV9VTktOT1dOID0gMCwKKysgICAgTUlQU19BQklfTjMyLAorKyAgICBNSVBTX0FCSV9PMzIsCisrICAgIE1JUFNfQUJJX042NCwKKysgICAgTUlQU19BQklfTzY0LAorKyAgICBNSVBTX0FCSV9FQUJJMzIsCisrICAgIE1JUFNfQUJJX0VBQkk2NCwKKysgICAgTUlQU19BQklfTEFTVAorKyAgfTsKKysKKysvKiBGaW5kIHRoZSBtaXBzIEFCSSBvZiB0aGUgY3VycmVudCBmaWxlICovCisrZW51bSBtaXBzX2FiaSBmaW5kX21pcHNfYWJpKEVsZiAqZWxmKQorK3sKKysgIEdFbGZfRWhkciBlaGRyX21lbTsKKysgIEdFbGZfRWhkciAqZWhkciA9IGdlbGZfZ2V0ZWhkciAoZWxmLCAmZWhkcl9tZW0pOworKworKyAgaWYgKGVoZHIgPT0gTlVMTCkKKysgICAgcmV0dXJuIE1JUFNfQUJJX0xBU1Q7CisrCisrICBHRWxmX1dvcmQgZWxmX2ZsYWdzID0gZWhkci0+ZV9mbGFnczsKKysKKysgIC8qIENoZWNrIGVsZl9mbGFncyB0byBzZWUgaWYgaXQgc3BlY2lmaWVzIHRoZSBBQkkgYmVpbmcgdXNlZC4gICovCisrICBzd2l0Y2ggKChlbGZfZmxhZ3MgJiBFRl9NSVBTX0FCSSkpCisrICAgIHsKKysgICAgY2FzZSBFX01JUFNfQUJJX08zMjoKKysgICAgICByZXR1cm4gTUlQU19BQklfTzMyOworKyAgICBjYXNlIEVfTUlQU19BQklfTzY0OgorKyAgICAgIHJldHVybiBNSVBTX0FCSV9PNjQ7CisrICAgIGNhc2UgRV9NSVBTX0FCSV9FQUJJMzI6CisrICAgICAgcmV0dXJuIE1JUFNfQUJJX0VBQkkzMjsKKysgICAgY2FzZSBFX01JUFNfQUJJX0VBQkk2NDoKKysgICAgICByZXR1cm4gTUlQU19BQklfRUFCSTY0OworKyAgICBkZWZhdWx0OgorKyAgICAgIGlmICgoZWxmX2ZsYWdzICYgRUZfTUlQU19BQkkyKSkKKysJcmV0dXJuIE1JUFNfQUJJX04zMjsKKysgICAgfQorKworKyAgLyogR0NDIGNyZWF0ZXMgYSBwc2V1ZG8tc2VjdGlvbiB3aG9zZSBuYW1lIGRlc2NyaWJlcyB0aGUgQUJJLiAgKi8KKysgIHNpemVfdCBzaHN0cm5keDsKKysgIGlmIChlbGZfZ2V0c2hkcnN0cm5keCAoZWxmLCAmc2hzdHJuZHgpIDwgMCkKKysgICAgcmV0dXJuIE1JUFNfQUJJX0xBU1Q7CisrCisrICBjb25zdCBjaGFyICpuYW1lOworKyAgRWxmX1NjbiAqc2NuID0gTlVMTDsKKysgIHdoaWxlICgoc2NuID0gZWxmX25leHRzY24gKGVsZiwgc2NuKSkgIT0gTlVMTCkKKysgICAgeworKyAgICAgIEdFbGZfU2hkciBzaGRyX21lbTsKKysgICAgICBHRWxmX1NoZHIgKnNoZHIgPSBnZWxmX2dldHNoZHIgKHNjbiwgJnNoZHJfbWVtKTsKKysgICAgICBpZiAoc2hkciA9PSBOVUxMKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX0xBU1Q7CisrCisrICAgICAgbmFtZSA9IGVsZl9zdHJwdHIgKGVsZiwgc2hzdHJuZHgsIHNoZHItPnNoX25hbWUpID86ICIiOworKyAgICAgIGlmIChzdHJuY21wIChuYW1lLCAiLm1kZWJ1Zy4iLCA4KSAhPSAwKQorKyAgICAgICAgY29udGludWU7CisrCisrICAgICAgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuYWJpMzIiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX08zMjsKKysgICAgICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmFiaU4zMiIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfTjMyOworKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuYWJpNjQiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX042NDsKKysgICAgICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmFiaU82NCIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfTzY0OworKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuZWFiaTMyIikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9FQUJJMzI7CisrICAgICAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5lYWJpNjQiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX0VBQkk2NDsKKysgICAgICBlbHNlCisrICAgICAgICByZXR1cm4gTUlQU19BQklfVU5LTk9XTjsKKysgICAgfQorKworKyAgcmV0dXJuIE1JUFNfQUJJX1VOS05PV047CisrfQorKworK3Vuc2lnbmVkIGludAorK21pcHNfYWJpX3JlZ3NpemUgKGVudW0gbWlwc19hYmkgYWJpKQorK3sKKysgIHN3aXRjaCAoYWJpKQorKyAgICB7CisrICAgIGNhc2UgTUlQU19BQklfRUFCSTMyOgorKyAgICBjYXNlIE1JUFNfQUJJX08zMjoKKysgICAgICByZXR1cm4gNDsKKysgICAgY2FzZSBNSVBTX0FCSV9OMzI6CisrICAgIGNhc2UgTUlQU19BQklfTjY0OgorKyAgICBjYXNlIE1JUFNfQUJJX082NDoKKysgICAgY2FzZSBNSVBTX0FCSV9FQUJJNjQ6CisrICAgICAgcmV0dXJuIDg7CisrICAgIGNhc2UgTUlQU19BQklfVU5LTk9XTjoKKysgICAgY2FzZSBNSVBTX0FCSV9MQVNUOgorKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiAwOworKyAgICB9CisrfQorKworKworKy8qICR2MCBvciBwYWlyICR2MCwgJHYxICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19pbnRyZWdfbzMyW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMiB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWczIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgIH07CisrCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19pbnRyZWdbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzMgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfaW50cmVnCTEKKysjZGVmaW5lIG5sb2NfaW50cmVncGFpcgk0CisrCisrLyogJGYwIChmbG9hdCksIG9yIHBhaXIgJGYwLCAkZjEgKGRvdWJsZSkuCisrICogZjIvZjMgYXJlIHVzZWQgZm9yIENPTVBMRVggKD0gMiBkb3VibGVzKSByZXR1cm5zIGluIEZvcnRyYW4gKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ZwcmVnX28zMltdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzMiB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzMgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDM0IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzNSB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICB9OworKworKy8qICRmMCwgb3IgcGFpciAkZjAsICRmMi4gICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19mcHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzMiB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzQgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfZnByZWcgIDEKKysjZGVmaW5lIG5sb2NfZnByZWdwYWlyIDQKKysjZGVmaW5lIG5sb2NfZnByZWdxdWFkIDgKKysKKysvKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RydWN0dXJlIGFuZCBpcyBhY3R1YWxseSBzdG9yZWQgaW4gc3RhY2sgc3BhY2UKKysgICBwYXNzZWQgaW4gYSBoaWRkZW4gYXJndW1lbnQgYnkgdGhlIGNhbGxlci4gIEJ1dCwgdGhlIGNvbXBpbGVyCisrICAgaGVscGZ1bGx5IHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhhdCBzcGFjZSBpbiAkdjAuICAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfYWdncmVnYXRlW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfYnJlZzIsIC5udW1iZXIgPSAwIH0KKysgIH07CisrI2RlZmluZSBubG9jX2FnZ3JlZ2F0ZSAxCisrCisraW50CisrbWlwc19yZXR1cm5fdmFsdWVfbG9jYXRpb24gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyt7CisrICAvKiBGaXJzdCBmaW5kIHRoZSBBQkkgdXNlZCBieSB0aGUgZWxmIG9iamVjdCAqLworKyAgZW51bSBtaXBzX2FiaSBhYmkgPSBmaW5kX21pcHNfYWJpKGZ1bmN0eXBlZGllLT5jdS0+ZGJnLT5lbGYpOworKworKyAgLyogU29tZXRoaW5nIHdlbnQgc2VyaW91c2x5IHdyb25nIHdoaWxlIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBBQkkgKi8KKysgIGlmIChhYmkgPT0gTUlQU19BQklfTEFTVCkKKysgICAgcmV0dXJuIC0xOworKworKyAgLyogV2UgY291bGRuJ3QgaWRlbnRpZnkgdGhlIEFCSSwgYnV0IHRoZSBmaWxlIHNlZW1zIHZhbGlkICovCisrICBpZiAoYWJpID09IE1JUFNfQUJJX1VOS05PV04pCisrICAgIHJldHVybiAtMjsKKysKKysgIC8qIENhbid0IGhhbmRsZSBFQUJJIHZhcmlhbnRzICovCisrICBpZiAoKGFiaSA9PSBNSVBTX0FCSV9FQUJJMzIpIHx8IChhYmkgPT0gTUlQU19BQklfRUFCSTY0KSkKKysgICAgcmV0dXJuIC0yOworKworKyAgdW5zaWduZWQgaW50IHJlZ3NpemUgPSBtaXBzX2FiaV9yZWdzaXplIChhYmkpOworKyAgaWYgKCFyZWdzaXplKQorKyAgICByZXR1cm4gLTI7CisrCisrICAvKiBTdGFydCB3aXRoIHRoZSBmdW5jdGlvbidzIHR5cGUsIGFuZCBnZXQgdGhlIERXX0FUX3R5cGUgYXR0cmlidXRlLAorKyAgICAgd2hpY2ggaXMgdGhlIHR5cGUgb2YgdGhlIHJldHVybiB2YWx1ZS4gICovCisrCisrICBEd2FyZl9BdHRyaWJ1dGUgYXR0cl9tZW07CisrICBEd2FyZl9BdHRyaWJ1dGUgKmF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAoZnVuY3R5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrICBpZiAoYXR0ciA9PSBOVUxMKQorKyAgICAvKiBUaGUgZnVuY3Rpb24gaGFzIG5vIHJldHVybiB2YWx1ZSwgbGlrZSBhIGB2b2lkJyBmdW5jdGlvbiBpbiBDLiAgKi8KKysgICAgcmV0dXJuIDA7CisrCisrICBEd2FyZl9EaWUgZGllX21lbTsKKysgIER3YXJmX0RpZSAqdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrICBpbnQgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysKKysgIC8qIEZvbGxvdyB0eXBlZGVmcyBhbmQgcXVhbGlmaWVycyB0byBnZXQgdG8gdGhlIGFjdHVhbCB0eXBlLiAgKi8KKysgIHdoaWxlICh0YWcgPT0gRFdfVEFHX3R5cGVkZWYKKysJIHx8IHRhZyA9PSBEV19UQUdfY29uc3RfdHlwZSB8fCB0YWcgPT0gRFdfVEFHX3ZvbGF0aWxlX3R5cGUKKysJIHx8IHRhZyA9PSBEV19UQUdfcmVzdHJpY3RfdHlwZSkKKysgICAgeworKyAgICAgIGF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysgICAgICB0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysgICAgICB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKyAgICB9CisrCisrICBzd2l0Y2ggKHRhZykKKysgICAgeworKyAgICBjYXNlIC0xOgorKyAgICAgIHJldHVybiAtMTsKKysKKysgICAgY2FzZSBEV19UQUdfc3VicmFuZ2VfdHlwZToKKysgICAgICBpZiAoISBkd2FyZl9oYXNhdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfYnl0ZV9zaXplKSkKKysJeworKwkgIGF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysJICB0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysJICB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKwl9CisrICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKysKKysgICAgY2FzZSBEV19UQUdfYmFzZV90eXBlOgorKyAgICBjYXNlIERXX1RBR19lbnVtZXJhdGlvbl90eXBlOgorKyAgICBjYXNlIERXX1RBR19wb2ludGVyX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3B0cl90b19tZW1iZXJfdHlwZToKKysgICAgICB7CisrICAgICAgICBEd2FyZl9Xb3JkIHNpemU7CisrCWlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9ieXRlX3NpemUsCisrCQkJCQkgJmF0dHJfbWVtKSwgJnNpemUpICE9IDApCisrCSAgeworKwkgICAgaWYgKHRhZyA9PSBEV19UQUdfcG9pbnRlcl90eXBlIHx8IHRhZyA9PSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlKQorKwkgICAgICBzaXplID0gcmVnc2l6ZTsKKysJICAgIGVsc2UKKysJICAgICAgcmV0dXJuIC0xOworKwkgIH0KKysJaWYgKHRhZyA9PSBEV19UQUdfYmFzZV90eXBlKQorKwkgIHsKKysJICAgIER3YXJmX1dvcmQgZW5jb2Rpbmc7CisrCSAgICBpZiAoZHdhcmZfZm9ybXVkYXRhIChkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfZW5jb2RpbmcsCisrCQkJCQkgICAgICZhdHRyX21lbSksICZlbmNvZGluZykgIT0gMCkKKysJICAgICAgcmV0dXJuIC0xOworKworKyNkZWZpbmUgQUJJX0xPQyhsb2MsIHJlZ3NpemUpICgocmVnc2l6ZSkgPT0gNCA/IChsb2MgIyMgX28zMikgOiAobG9jKSkKKysKKysJICAgIGlmIChlbmNvZGluZyA9PSBEV19BVEVfZmxvYXQpCisrCSAgICAgIHsKKysJCSpsb2NwID0gQUJJX0xPQyhsb2NfZnByZWcsIHJlZ3NpemUpOworKwkJaWYgKHNpemUgPD0gcmVnc2l6ZSkKKysJCSAgICByZXR1cm4gbmxvY19mcHJlZzsKKysKKysJCWlmIChzaXplIDw9IDIqcmVnc2l6ZSkKKysgICAgICAgICAgICAgICAgICByZXR1cm4gbmxvY19mcHJlZ3BhaXI7CisrCisrCQlpZiAoc2l6ZSA8PSA0KnJlZ3NpemUgJiYgYWJpID09IE1JUFNfQUJJX08zMikKKysgICAgICAgICAgICAgICAgICByZXR1cm4gbmxvY19mcHJlZ3F1YWQ7CisrCisrCQlnb3RvIGFnZ3JlZ2F0ZTsKKysJICAgICAgfQorKwkgIH0KKysJKmxvY3AgPSBBQklfTE9DKGxvY19pbnRyZWcsIHJlZ3NpemUpOworKwlpZiAoc2l6ZSA8PSByZWdzaXplKQorKwkgIHJldHVybiBubG9jX2ludHJlZzsKKysJaWYgKHNpemUgPD0gMipyZWdzaXplKQorKwkgIHJldHVybiBubG9jX2ludHJlZ3BhaXI7CisrCisrCS8qIEVsc2UgZmFsbCB0aHJvdWdoLiBTaG91bGRuJ3QgaGFwcGVuIHRob3VnaCAoYXQgbGVhc3Qgd2l0aCBnY2MpICovCisrICAgICAgfQorKworKyAgICBjYXNlIERXX1RBR19zdHJ1Y3R1cmVfdHlwZToKKysgICAgY2FzZSBEV19UQUdfY2xhc3NfdHlwZToKKysgICAgY2FzZSBEV19UQUdfdW5pb25fdHlwZToKKysgICAgY2FzZSBEV19UQUdfYXJyYXlfdHlwZToKKysgICAgYWdncmVnYXRlOgorKyAgICAgIC8qIFhYWCBUT0RPOiBDYW4ndCBoYW5kbGUgc3RydWN0dXJlIHJldHVybiB3aXRoIG90aGVyIEFCSSdzIHlldCA6LS8gKi8KKysgICAgICBpZiAoKGFiaSAhPSBNSVBTX0FCSV9PMzIpICYmIChhYmkgIT0gTUlQU19BQklfTzY0KSkKKysgICAgICAgIHJldHVybiAtMjsKKysKKysgICAgICAqbG9jcCA9IGxvY19hZ2dyZWdhdGU7CisrICAgICAgcmV0dXJuIG5sb2NfYWdncmVnYXRlOworKyAgICB9CisrCisrICAvKiBYWFggV2UgZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IHRvIHJldHVybiBzcGVjaWZpYyBlcnJvcnMgZnJvbSBlYmwgY2FsbHMuCisrICAgICBUaGlzIHZhbHVlIG1lYW5zIHdlIGRvIG5vdCB1bmRlcnN0YW5kIHRoZSB0eXBlLCBidXQgaXQgaXMgd2VsbC1mb3JtZWQKKysgICAgIERXQVJGIGFuZCBtaWdodCBiZSB2YWxpZC4gICovCisrICByZXR1cm4gLTI7CisrfQorZGlmZiAtLWdpdCBhL2JhY2tlbmRzL21pcHNfc3ltYm9sLmMgYi9iYWNrZW5kcy9taXBzX3N5bWJvbC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYmE0NjVmZQorLS0tIC9kZXYvbnVsbAorKysrIGIvYmFja2VuZHMvbWlwc19zeW1ib2wuYworQEAgLTAsMCArMSw1MiBAQAorKy8qIE1JUFMgc3BlY2lmaWMgc3ltYm9saWMgbmFtZSBoYW5kbGluZy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDUgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrICAgV3JpdHRlbiBieSBKYWt1YiBKZWxpbmVrIDxqYWt1YkByZWRoYXQuY29tPiwgMjAwMi4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxlbGYuaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrI2RlZmluZSBCQUNLRU5ECQltaXBzXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogQ2hlY2sgZm9yIHRoZSBzaW1wbGUgcmVsb2MgdHlwZXMuICAqLworK0VsZl9UeXBlCisrbWlwc19yZWxvY19zaW1wbGVfdHlwZSAoRWJsICplYmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBpbnQgdHlwZSkKKyt7CisrICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgY2FzZSBSX01JUFNfMTY6CisrICAgICAgcmV0dXJuIEVMRl9UX0hBTEY7CisrICAgIGNhc2UgUl9NSVBTXzMyOgorKyAgICAgIHJldHVybiBFTEZfVF9XT1JEOworKyAgICBjYXNlIFJfTUlQU182NDoKKysgICAgICByZXR1cm4gRUxGX1RfWFdPUkQ7CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEVMRl9UX05VTTsKKysgICAgfQorK30KK2RpZmYgLS1naXQgYS9saWJlYmwvZWJsb3BlbmJhY2tlbmQuYyBiL2xpYmVibC9lYmxvcGVuYmFja2VuZC5jCitpbmRleCAxZjgxNDc3Li41MzcxMzk2IDEwMDY0NAorLS0tIGEvbGliZWJsL2VibG9wZW5iYWNrZW5kLmMKKysrKyBiL2xpYmVibC9lYmxvcGVuYmFja2VuZC5jCitAQCAtNzIsNiArNzIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0CisgICB7ICJzcGFyYyIsICJlbGZfc3BhcmMiLCAic3BhcmMiLCA1LCBFTV9TUEFSQywgMCwgMCB9LAorICAgeyAic3BhcmMiLCAiZWxmX3NwYXJjdjhwbHVzIiwgInNwYXJjIiwgNSwgRU1fU1BBUkMzMlBMVVMsIDAsIDAgfSwKKyAgIHsgInMzOTAiLCAiZWJsX3MzOTAiLCAiczM5MCIsIDQsIEVNX1MzOTAsIDAsIDAgfSwKKysgIHsgIm1pcHMiLCAiZWxmX21pcHMiLCAibWlwcyIsIDQsIEVNX01JUFMsIDAsIDAgfSwKKysgIHsgIm1pcHMiLCAiZWxmX21pcHNlbCIsICJtaXBzZWwiLCA0LCBFTV9NSVBTX1JTM19MRSwgMCwgMCB9LAorIAorICAgeyAibTMyIiwgImVsZl9tMzIiLCAibTMyIiwgMywgRU1fTTMyLCAwLCAwIH0sCisgICB7ICJtNjhrIiwgImVsZl9tNjhrIiwgIm02OGsiLCA0LCBFTV82OEssIEVMRkNMQVNTMzIsIEVMRkRBVEEyTVNCIH0sCistLSAKKzEuOC4zLjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2OC9kZWJpYW4vbWlwc19yZWFkZWxmX3cucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2ZpbGVzL2RlYmlhbi9taXBzX3JlYWRlbGZfdy5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2OC9kZWJpYW4vbWlwc19yZWFkZWxmX3cucGF0Y2gKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZmlsZXMvZGViaWFuL21pcHNfcmVhZGVsZl93LnBhdGNoCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3RfNS40NS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdF81LjQ1LmJiCmluZGV4IDYzMGYyZTQuLmUyZDI0ZTggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdF81LjQ1LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdF81LjQ1LmJiCkBAIC0xNiw3ICsxNiw3IEBACiBERVBFTkRTICs9ICJ0Y2wiCiBSREVQRU5EU18ke1BOfSA9ICJ0Y2wiCiAKLWluaGVyaXQgYXV0b3Rvb2xzCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtYWx0ZXJuYXRpdmVzCiAKIFBSID0gInIxIgogCkBAIC01Nyw2ICs1NywxMSBAQAogICAgICAgICAgICAgICAgICIKIEVYVFJBX09FTUFLRV9pbnN0YWxsID0gIiAnU0NSSVBUUz0nICIKIAorQUxURVJOQVRJVkVfJHtQTn0gID0gIm1rcGFzc3dkIgorQUxURVJOQVRJVkVfTElOS19OQU1FW21rcGFzc3dkXSA9ICIke2JpbmRpcn0vbWtwYXNzd2QiCisjIFVzZSBsb3dlciBwcmlvcml0eSB0aGFuIGJ1c3lib3gncyBta3Bhc3N3ZCAoY3JlYXRlZCB3aGVuIGJ1aWx0IHdpdGggQ09ORklHX0NSWVBUUFcpCitBTFRFUk5BVElWRV9QUklPUklUWVtta3Bhc3N3ZF0gPSAiNDAiCisKIEZJTEVTXyR7UE59LWRldiA9ICIke2xpYmRpcl9uYXRpdmV9L2V4cGVjdCR7UFZ9L2xpYmV4cGVjdCouc28gXAogICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vZXhwZWN0LmggXAogICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vZXhwZWN0X3RjbC5oIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmRpc2svZ3B0ZmRpc2tfMS4wLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZkaXNrL2dwdGZkaXNrXzEuMC4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjJhOTAzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmRpc2svZ3B0ZmRpc2tfMS4wLjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi1TVU1NQVJZID0gIlV0aWxpdHkgZm9yIG1vZGlmeWluZyBHUFQgZGlzayBwYXJ0aXRpb25pbmciCi1ERVNDUklQVElPTiA9ICJHUFQgZmRpc2sgaXMgYSBkaXNrIHBhcnRpdGlvbmluZyB0b29sIGxvb3NlbHkgbW9kZWxlZCBvbiBMaW51eCBmZGlzaywgYnV0IHVzZWQgZm9yIG1vZGlmeWluZyBHVUlEIFBhcnRpdGlvbiBUYWJsZSAoR1BUKSBkaXNrcy4gVGhlIHJlbGF0ZWQgRml4UGFydHMgdXRpbGl0eSBmaXhlcyBzb21lIGNvbW1vbiBwcm9ibGVtcyBvbiBNYXN0ZXIgQm9vdCBSZWNvcmQgKE1CUikgZGlza3MuIgotCi1MSUNFTlNFID0gIkdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIiCi0KLURFUEVORFMgPSAidXRpbC1saW51eCBwb3B0IG5jdXJzZXMiCi0KLVNSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9LyR7QlBOfS8ke1BWfS8ke0JQfS50YXIuZ3oiCi1TUkNfVVJJW21kNXN1bV0gPSAiZDdmM2QzMDZiMDgzMTIzYmNjNmY1OTQxZWZhZGU1ODYiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiODY0YzhhZWUyZWZkZGE1MDM0NjgwNGQ3ZTYyMzA0MDdkNWY0MmE4YWU3NTRkZjcwNDA0ZGQ4YjJmZGZhZWFjNyIKLQotVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ3B0ZmRpc2svZmlsZXMvZ3B0ZmRpc2svIgotVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiL2dwdGZkaXNrLyg/UDxwdmVyPihcZCtbXC5cLV9dKikrKS8iCi0KLUVYVFJBX09FTUFLRSA9ICInQ0M9JHtDQ30nICdDWFg9JHtDWFh9JyIKLQotZG9faW5zdGFsbCgpIHsKLSAgICBpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9Ci0gICAgaW5zdGFsbCAtbSAwNzU1IGNnZGlzayAke0R9JHtzYmluZGlyfQotICAgIGluc3RhbGwgLW0gMDc1NSBnZGlzayAke0R9JHtzYmluZGlyfQotICAgIGluc3RhbGwgLW0gMDc1NSBzZ2Rpc2sgJHtEfSR7c2JpbmRpcn0KLSAgICBpbnN0YWxsIC1tIDA3NTUgZml4cGFydHMgJHtEfSR7c2JpbmRpcn0KLX0KLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9mZGlzay9ncHRmZGlza18xLjAuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmRpc2svZ3B0ZmRpc2tfMS4wLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ2MTdlMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmRpc2svZ3B0ZmRpc2tfMS4wLjMuYmIKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJVdGlsaXR5IGZvciBtb2RpZnlpbmcgR1BUIGRpc2sgcGFydGl0aW9uaW5nIgorREVTQ1JJUFRJT04gPSAiR1BUIGZkaXNrIGlzIGEgZGlzayBwYXJ0aXRpb25pbmcgdG9vbCBsb29zZWx5IG1vZGVsZWQgb24gTGludXggZmRpc2ssIGJ1dCB1c2VkIGZvciBtb2RpZnlpbmcgR1VJRCBQYXJ0aXRpb24gVGFibGUgKEdQVCkgZGlza3MuIFRoZSByZWxhdGVkIEZpeFBhcnRzIHV0aWxpdHkgZml4ZXMgc29tZSBjb21tb24gcHJvYmxlbXMgb24gTWFzdGVyIEJvb3QgUmVjb3JkIChNQlIpIGRpc2tzLiIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIgorCitERVBFTkRTID0gInV0aWwtbGludXggcG9wdCBuY3Vyc2VzIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS8ke0JQTn0vJHtQVn0vJHtCUH0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjA3YjYyNWE1ODNiNjZjOGM1ODQwYmU1OTIzZjNlM2ZlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg5ZmQ1YWVjMzVjNDA5ZDYxMGEzNmNiNDljNjViNDQyMDU4NTY1ZWQ4NDA0MmY3NjdiYmE2MTRiOGZjOTFiNWMiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dwdGZkaXNrL2ZpbGVzL2dwdGZkaXNrLyIKK1VQU1RSRUFNX0NIRUNLX1JFR0VYID0gIi9ncHRmZGlzay8oP1A8cHZlcj4oXGQrW1wuXC1fXSopKykvIgorCitFWFRSQV9PRU1BS0UgPSAiJ0NDPSR7Q0N9JyAnQ1hYPSR7Q1hYfSciCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSBjZ2Rpc2sgJHtEfSR7c2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgZ2Rpc2sgJHtEfSR7c2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgc2dkaXNrICR7RH0ke3NiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSAwNzU1IGZpeHBhcnRzICR7RH0ke3NiaW5kaXJ9Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlL2RlYmlhbi03NDIyNjIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZpbGUvZmlsZS9kZWJpYW4tNzQyMjYyLnBhdGNoCmluZGV4IDFlZjQ4NWUuLmQzMWFjNTkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlL2RlYmlhbi03NDIyNjIucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGUvZGViaWFuLTc0MjI2Mi5wYXRjaApAQCAtMSwxOSArMSwzMCBAQAotVGhlIGF3ayBwYXR0ZXJuIHdhcyBjaGVja2VkICpiZWZvcmUqIHRoZSBQZXJsIHBhdHRlcm4sIHNvIHRoZSBwZXJsCi1zY3JpcHQgd2l0aCBCRUdJTnsuLi59IHdvdWxkIGJlIHJlcG9ydGVkIGFzIGF3aywgdGhpcyBwYXRjaCBmaXhlcyBpdC4KK1RoZSBhd2sgcGF0dGVybiB3YXMgY2hlY2tlZCAqYmVmb3JlKiB0aGUgUGVybCBwYXR0ZXJuLCBzbyB0aGUKK3Blcmwgc2NyaXB0IHdpdGggQkVHSU57Li4ufSB3b3VsZCBiZSByZXBvcnRlZCBhcyBhd2ssIHRoaXMgcGF0Y2ggZml4ZXMgaXQuCiAKIFVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KIAogU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoIEJpZWRsIDxkZWJpYW4uYXhobkBtYW5jaG1hbC5pbi11bG0uZGU+CiBTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworUmViYXNlIG9uIDUuMzEKKworU2lnbmVkLW9mZi1ieTogRmFuIFhpbiA8ZmFuLnhpbkBqcC5mdWppdHN1LmNvbT4KIC0tLQorIG1hZ2ljL01hZ2Rpci9jb21tYW5kcyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCiBkaWZmIC0tZ2l0IGEvbWFnaWMvTWFnZGlyL2NvbW1hbmRzIGIvbWFnaWMvTWFnZGlyL2NvbW1hbmRzCitpbmRleCAxYTQ2ZWZkLi4yNTVjMDRiIDEwMDY0NAogLS0tIGEvbWFnaWMvTWFnZGlyL2NvbW1hbmRzCiArKysgYi9tYWdpYy9NYWdkaXIvY29tbWFuZHMKIEBAIC01Nyw2ICs1Nyw3IEBACiAgMAlzdHJpbmcvd3QJIyFcIC91c3IvYmluL2F3awlhd2sgc2NyaXB0IHRleHQgZXhlY3V0YWJsZQogICE6bWltZQl0ZXh0L3gtYXdrCi0gMAlyZWdleC80MDk2CT1eXFxzezAsMTAwfUJFR0lOXFxzezAsMTAwfVt7XQlhd2sgb3IgcGVybCBzY3JpcHQgdGV4dAorIDAJcmVnZXgvNDA5Ngk9XltBLVphLXowLTlfXXswLDEwMH1CRUdJTltBLVphLXowLTlfXXswLDEwMH1be10JYXdrIG9yIHBlcmwgc2NyaXB0IHRleHQKICshOnN0cmVuZ3RoIC0gMTIKICAKICAjIEFUJlQgQmVsbCBMYWJzJyBQbGFuIDkgc2hlbGwKICAwCXN0cmluZy93dAkjIVwgL2Jpbi9yYwlQbGFuIDkgcmMgc2hlbGwgc2NyaXB0IHRleHQgZXhlY3V0YWJsZQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZpbGUvZmlsZV81LjMwLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGVfNS4zMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk5OGZjZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZpbGUvZmlsZV81LjMwLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotU1VNTUFSWSA9ICJGaWxlIGNsYXNzaWZpY2F0aW9uIHRvb2wiCi1ERVNDUklQVElPTiA9ICJGaWxlIGF0dGVtcHRzIHRvIGNsYXNzaWZ5IGZpbGVzIGRlcGVuZGluZyBcCi1vbiB0aGVpciBjb250ZW50cyBhbmQgcHJpbnRzIGEgZGVzY3JpcHRpb24gaWYgYSBtYXRjaCBpcyBmb3VuZC4iCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmRhcndpbnN5cy5jb20vZmlsZS8iCi1TRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCi0KLSMgdHdvIGNsYXVzZSBCU0QKLUxJQ0VOU0UgPSAiQlNEIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORztiZWdpbmxpbmU9MjttZDU9NmE3MzgyODcyZWRiNjhkMzNlMWE5Mzk4YjZlMDMxODgiCi0KLURFUEVORFMgPSAiemxpYiBmaWxlLXJlcGxhY2VtZW50LW5hdGl2ZSIKLURFUEVORFNfY2xhc3MtbmF0aXZlID0gInpsaWItbmF0aXZlIgotCi0jIEJsYWNrbGlzdCBhIGJvZ3VzIHRhZyBpbiB1cHN0cmVhbSBjaGVjawotVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAiRklMRSg/UDxwdmVyPig/ITZfMjMpLispIgotCi1TUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vZmlsZS9maWxlLmdpdCBcCi0gICAgICAgIGZpbGU6Ly9kZWJpYW4tNzQyMjYyLnBhdGNoIFwKLSAgICAgICAgZmlsZTovLzAwMDEtQWRkLVAtcHJvbXB0LWludG8tVXNhZ2UtaW5mby5wYXRjaCBcCi0gICAgICAgICIKLQotU1JDUkVWID0gIjc5ODE0OTUwYWFmYjgxZWNkNmE5MTBjMmE4YTNiOGVjMTJmM2U0YTYiCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1pbmhlcml0IGF1dG90b29scwotCi1FWFRSQV9PRU1BS0VfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICItZSBGSUxFX0NPTVBJTEU9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2ZpbGUtbmF0aXZlL2ZpbGUiCi1FWFRSQV9PRU1BS0VfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICItZSBGSUxFX0NPTVBJTEU9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2ZpbGUtbmF0aXZlL2ZpbGUiCi0KLUNGTEFHU19hcHBlbmQgPSAiIC1zdGQ9Yzk5IgotCi1GSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9taXNjLyoubWdjIgotCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7Ci0JY3JlYXRlX2NtZGxpbmVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9maWxlIFwKLQkJLS1tYWdpYy1maWxlICR7ZGF0YWRpcn0vbWlzYy9tYWdpYy5tZ2MKLX0KLQotZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgewotCWNyZWF0ZV9jbWRsaW5lX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZmlsZSBcCi0JCS0tbWFnaWMtZmlsZSAke2RhdGFkaXJ9L21pc2MvbWFnaWMubWdjCi19Ci0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKLVBST1ZJREVTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGZpbGUtcmVwbGFjZW1lbnQtbmF0aXZlIgotIyBEb24ndCB1c2UgTkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVggYXMgdGhhdCBoaWRlcyBsaWJtYWdpYyBmcm9tIGFueW9uZSB3aG8KLSMgZGVwZW5kcyBvbiBmaWxlLXJlcGxhY2VtZW50LW5hdGl2ZS4KLWJpbmRpcl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIi9maWxlLW5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlXzUuMzEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZpbGUvZmlsZV81LjMxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMWY1MDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZpbGUvZmlsZV81LjMxLmJiCkBAIC0wLDAgKzEsNDggQEAKK1NVTU1BUlkgPSAiRmlsZSBjbGFzc2lmaWNhdGlvbiB0b29sIgorREVTQ1JJUFRJT04gPSAiRmlsZSBhdHRlbXB0cyB0byBjbGFzc2lmeSBmaWxlcyBkZXBlbmRpbmcgXAorb24gdGhlaXIgY29udGVudHMgYW5kIHByaW50cyBhIGRlc2NyaXB0aW9uIGlmIGEgbWF0Y2ggaXMgZm91bmQuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5kYXJ3aW5zeXMuY29tL2ZpbGUvIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCisjIHR3byBjbGF1c2UgQlNECitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7YmVnaW5saW5lPTI7bWQ1PTZhNzM4Mjg3MmVkYjY4ZDMzZTFhOTM5OGI2ZTAzMTg4IgorCitERVBFTkRTID0gInpsaWIgZmlsZS1yZXBsYWNlbWVudC1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJ6bGliLW5hdGl2ZSIKKworIyBCbGFja2xpc3QgYSBib2d1cyB0YWcgaW4gdXBzdHJlYW0gY2hlY2sKK1VQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gIkZJTEUoP1A8cHZlcj4oPyE2XzIzKS4rKSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2ZpbGUvZmlsZS5naXQgXAorICAgICAgICBmaWxlOi8vZGViaWFuLTc0MjI2Mi5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDAxLUFkZC1QLXByb21wdC1pbnRvLVVzYWdlLWluZm8ucGF0Y2ggXAorICAgICAgICAiCisKK1NSQ1JFViA9ICI3MGM1ZjE1MDYwYzdhZDgxMTUwMTc3ZGU4M2EzZTY0NTAwYTU0YzlmIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworRVhUUkFfT0VNQUtFX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiLWUgRklMRV9DT01QSUxFPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9maWxlLW5hdGl2ZS9maWxlIgorRVhUUkFfT0VNQUtFX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiLWUgRklMRV9DT01QSUxFPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9maWxlLW5hdGl2ZS9maWxlIgorCitDRkxBR1NfYXBwZW5kID0gIiAtc3RkPWM5OSIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vbWlzYy8qLm1nYyIKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWNyZWF0ZV9jbWRsaW5lX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZmlsZSBcCisJCS0tbWFnaWMtZmlsZSAke2RhdGFkaXJ9L21pc2MvbWFnaWMubWdjCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKwljcmVhdGVfY21kbGluZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2ZpbGUgXAorCQktLW1hZ2ljLWZpbGUgJHtkYXRhZGlyfS9taXNjL21hZ2ljLm1nYworfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCitQUk9WSURFU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBmaWxlLXJlcGxhY2VtZW50LW5hdGl2ZSIKKyMgRG9uJ3QgdXNlIE5BVElWRV9QQUNLQUdFX1BBVEhfU1VGRklYIGFzIHRoYXQgaGlkZXMgbGlibWFnaWMgZnJvbSBhbnlvbmUgd2hvCisjIGRlcGVuZHMgb24gZmlsZS1yZXBsYWNlbWVudC1uYXRpdmUuCitiaW5kaXJfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIvZmlsZS1uYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmxleF8yLjYuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9mbGV4XzIuNi4wLmJiCmluZGV4IGFiMzViMDkuLmE5MDZmZTggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9mbGV4XzIuNi4wLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9mbGV4XzIuNi4wLmJiCkBAIC01NSw3ICs1NSwxMSBAQAogCWNwICR7U30vYnVpbGQtYXV4L3Rlc3QtZHJpdmVyICR7RH0ke1BURVNUX1BBVEh9L2J1aWxkLWF1eC8KIAljcCAtciAke1N9L3Rlc3RzLyogJHtEfSR7UFRFU1RfUEFUSH0KIAljcCAtciAke0J9L3Rlc3RzLyogJHtEfSR7UFRFU1RfUEFUSH0KLQlzZWQgLWUgJ3MvXk1ha2VmaWxlOi9fTWFrZWZpbGU6LycgXAorCXNlZCAtZSAncywtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9LCxnJyBcCisJICAgIC1lICdzfCR7REVCVUdfUFJFRklYX01BUH18fGcnIFwKKwkgICAgLWUgJ3M6JHtIT1NUVE9PTFNfRElSfS86OmcnIFwKKwkgICAgLWUgJ3M6JHtSRUNJUEVfU1lTUk9PVF9OQVRJVkV9OjpnJyBcCisJICAgIC1lICdzOiR7QkFTRV9XT1JLRElSfS8ke01VTFRJTUFDSF9UQVJHRVRfU1lTfTo6ZycgXC1lICdzL15NYWtlZmlsZTovX01ha2VmaWxlOi8nIFwKIAkgICAgLWUgJ3MvXnNyY2RpciA9IFwoLipcKS9zcmNkaXIgPSAuLycgLWUgJ3MvXnRvcF9zcmNkaXIgPSBcKC4qXCkvdG9wX3NyY2RpciA9IC4vJyBcCiAJICAgIC1lICdzL15idWlsZGRpciA9IFwoLipcKS9idWlsZGRpciA9IC4vJyAtZSAncy9edG9wX2J1aWxkZGlyID0gXCguKlwpL3RvcF9idWlsZGRpciA9IC4vJyBcCiAJICAgIC1pICR7RH0ke1BURVNUX1BBVEh9L01ha2VmaWxlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzY5Njc1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLXJlcXVpcmUgZ2NjLWNvbW1vbi5pbmMKLQotIyBUaGlyZCBkaWdpdCBpbiBQViBzaG91bGQgYmUgaW5jcmVtZW50ZWQgYWZ0ZXIgYSBtaW5vciByZWxlYXNlCi0KLVBWID0gIjUuNC4wIgotCi0jU05BUCA9ICI1LTIwMTUwNDA1IgotCi0jIEJJTlYgc2hvdWxkIGJlIGluY3JlbWVudGVkIHRvIGEgcmV2aXNpb24gYWZ0ZXIgYSBtaW5vciBnY2MgcmVsZWFzZQotCi1CSU5WID0gIjUuNC4wIgotCi1GSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9nY2MtNS40OiR7RklMRV9ESVJOQU1FfS9nY2MtNS40L2JhY2twb3J0OiIKLQotREVQRU5EUyA9KyAibXBmciBnbXAgbGlibXBjIHpsaWIiCi1OQVRJVkVERVBTID0gIm1wZnItbmF0aXZlIGdtcC1uYXRpdmUgbGlibXBjLW5hdGl2ZSB6bGliLW5hdGl2ZSIKLQotTElDRU5TRSA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiAmIEdQTHYzIgotCi1MSUNfRklMRVNfQ0hLU1VNID0gIlwKLSAgICBmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAotICAgIGZpbGU6Ly9DT1BZSU5HMzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAotICAgIGZpbGU6Ly9DT1BZSU5HMy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IFwKLSAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKLSAgICBmaWxlOi8vQ09QWUlORy5SVU5USU1FO21kNT1mZTYwZDg3MDQ4NTY3ZDRmZThjOGEwZWQyNDQ4YmNjOCBcCi0iCi0jQkFTRVVSSSA9ICJodHRwOi8vd3d3Lm5ldGd1bGwuY29tL2djYy9zbmFwc2hvdHMvJHtTTkFQfS9nY2MtJHtTTkFQfS50YXIuYnoyIgotQkFTRVVSSSA9ICIke0dOVV9NSVJST1J9L2djYy9nY2MtJHtQVn0vZ2NjLSR7UFZ9LnRhci5iejIiCi0KLVNSQ19VUkkgPSAiXAotICAgICAgICAgICAke0JBU0VVUkl9IFwKLSAgICAgICAgICAgJHtCQUNLUE9SVFN9IFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAyLXVjbGliYy1jb25mLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDktYzk5LXNucHJpbnRmLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTAtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxMS1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxMi1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDEzLTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTQtb3B0aW9uYWwtbGlic3RkYy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDE1LWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDE2LUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxNy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDE4LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTktbGliZ2NjLXNqbGotY2hlY2sucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAyMC1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDIxLU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAyMi1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjMtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjQtRGlzYWJsZS1zZHQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAyNS1saWJ0b29sLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjYtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDI3LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAyOC1Bdm9pZC11c2luZy1saWJkaXItZnJvbS0ubGEtd2hpY2gtdXN1YWxseS1wb2ludHMtdG8tLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjktZXhwb3J0LUNQUC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDMwLUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAzMS1EaXNhYmxlLXRoZS1NVUxUSUxJQl9PU0RJUk5BTUVTLWFuZC1vdGhlci1tdWx0aWxpYi1vLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMzItRW5zdXJlLXRhcmdldC1nY2MtaGVhZGVycy1jYW4tYmUtaW5jbHVkZWQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAzMy1nY2MtNC44LXdvbi10LWJ1aWxkLXdpdGgtZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMzQtRG9uLXQtc2VhcmNoLWhvc3QtZGlyZWN0b3J5LWR1cmluZy1yZWxpbmstaWYtaW5zdF9wci5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDM1LURvbnQtbGluay10aGUtcGx1Z2lucy13aXRoLWxpYmdvbXAtZXhwbGljaXRseS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDM2LVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAzNy1hYXJjaDY0LUFkZC1zdXBwb3J0LWZvci1tdXNsLWxkc28ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAzOC1maXgtZy1zeXNyb290LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMzktbGliY2MxLWZpeC1saWJjYzEtcy1pbnN0YWxsLXBhdGgtYW5kLXJwYXRoLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwNDAtaGFuZGxlLXN5c3Jvb3Qtc3VwcG9ydC1mb3ItbmF0aXZlc2RrLWdjYy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDQxLVNlYXJjaC10YXJnZXQtc3lzcm9vdC1nY2MtdmVyc2lvbi1zcGVjaWZpYy1kaXJzLXdpdGgucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDA0Mi1GaXgtdmFyaW91cy1fRk9SX0JVSUxELWFuZC1yZWxhdGVkLXZhcmlhYmxlcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDQzLWxpYnN0ZGMtU3VwcG9ydC1tdXNsLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwNDQtQWRkaW5nLW1tdXNsLWFzLWEtbXVzbC1saWJjLXNwZWNpZmllci1hbmQtdGhlLW5lY2Vzcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDQ1LVN1cHBvcnQtZm9yLWFybS1saW51eC1tdXNsLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwNDYtR2V0LXJpZC1vZi1ldmVyLWJyb2tlbi1maXhpbmNsdWRlcy1vbi1tdXNsLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwNDctbmlvczItRGVmaW5lLU1VU0xfRFlOQU1JQ19MSU5LRVIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDA0OC1zc3Bfbm9uc2hhcmVkLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwNDktRGlzYWJsZS10aGUtd2Vhay1yZWZlcmVuY2UtbG9naWMtaW4tZ3Roci5oLWZvci1vcy1nZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDUwLXBvd2VycGMtcGFzcy1zZWN1cmUtcGx0LXRvLXRoZS1saW5rZXIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDA1MS1JZ25vcmUtZmRlYnVnLXByZWZpeC1tYXAtaW4tcHJvZHVjZXItc3RyaW5nLWJ5LURhbmllLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwNTItbmlvczItdXNlLXJldC13aXRoLXIzMS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDUzLWV4cHIuYy1QUi10YXJnZXQtNjUzNTgtQXZvaWQtY2xvYmJlcmluZy1wYXJ0aWFsLWFyZ3UucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDA1NC1zdXBwb3J0LWZmaWxlLXByZWZpeC1tYXAucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDA1NS1SZXVzZS1mZGVidWctcHJlZml4LW1hcC10by1yZXBsYWNlLWZmaWxlLXByZWZpeC1tYXAucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDA1Ni1FbmFibGUtbGliYy1wcm92aWRlLXNzcC1hbmQtZ2NjX2N2X3RhcmdldF9kbF9pdGVyYXRlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwNTctdW53aW5kLWZpeC1mb3ItbXVzbC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDU4LWZkZWJ1Zy1wcmVmaXgtbWFwLXN1cHBvcnQtdG8tcmVtYXAtcmVsYXRpdmUtcGF0aC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDU5LWxpYmdjYy11c2UtbGRmbGFncy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi02MTMxLnBhdGNoIFwKLSIKLQotQkFDS1BPUlRTID0gIiIKLQotU1JDX1VSSVttZDVzdW1dID0gIjRjNjI2YWMyYTgzZWYzMGRmYjkyNjBlNmY1OWMyYjMwIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYwOGRmNzZkZWMyZDM0ZGU2NTU4MjQ5ZDhhZjRjYmVlMjFlY2VkZGJjYjU4MGQ2NjZmN2E1YTU4M2NhMzMwM2EiCi0KLVVQU1RSRUFNX0NIRUNLX1JFR0VYID0gImdjYy0oP1A8cHZlcj41XC5cZCtcLlxkKykudGFyIgotCi0jUyA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvZ2NjLSR7UFZ9LSR7UFJ9L2djYy0ke1NOQVB9IgotUyA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvZ2NjLSR7UFZ9LSR7UFJ9L2djYy0ke1BWfSIKLUIgPSAiJHtXT1JLRElSfS9nY2MtJHtQVn0vYnVpbGQuJHtIT1NUX1NZU30uJHtUQVJHRVRfU1lTfSIKLQotIyBMYW5ndWFnZSBPdmVycmlkZXMKLUZPUlRSQU4gPSAiIgotSkFWQSA9ICIiCi0KLUxUTyA9ICItLWVuYWJsZS1sdG8iCi0KLUVYVFJBX09FQ09ORl9CQVNFID0gIlwKLSAgICAke0xUT30gXAotICAgIC0tZW5hYmxlLWxpYnNzcCBcCi0gICAgLS1lbmFibGUtbGliaXRtIFwKLSAgICAtLWRpc2FibGUtYm9vdHN0cmFwIFwKLSAgICAtLWRpc2FibGUtbGlibXVkZmxhcCBcCi0gICAgLS13aXRoLXN5c3RlbS16bGliIFwKLSAgICAtLXdpdGgtbGlua2VyLWhhc2gtc3R5bGU9JHtMSU5LRVJfSEFTSF9TVFlMRX0gXAotICAgIC0tZW5hYmxlLWxpbmtlci1idWlsZC1pZCBcCi0gICAgLS13aXRoLXBwbD1ubyBcCi0gICAgLS13aXRoLWNsb29nPW5vIFwKLSAgICAtLWVuYWJsZS1jaGVja2luZz1yZWxlYXNlIFwKLSAgICAtLWVuYWJsZS1jaGVhZGVycz1jX2dsb2JhbCBcCi0gICAgLS13aXRob3V0LWlzbCBcCi0iCi0KLUVYVFJBX09FQ09ORl9JTklUSUFMID0gIlwKLSAgICAtLWRpc2FibGUtbGlibXVkZmxhcCBcCi0gICAgLS1kaXNhYmxlLWxpYmdvbXAgXAotICAgIC0tZGlzYWJsZS1saWJpdG0gXAotICAgIC0tZGlzYWJsZS1saWJxdWFkbWF0aCBcCi0gICAgLS13aXRoLXN5c3RlbS16bGliIFwKLSAgICAtLWRpc2FibGUtbHRvIFwKLSAgICAtLWRpc2FibGUtcGx1Z2luIFwKLSAgICAtLWVuYWJsZS1kZWNpbWFsLWZsb2F0PW5vIFwKLSAgICAtLXdpdGhvdXQtaXNsIFwKLSAgICBnY2NfY3ZfbGliY19wcm92aWRlc19zc3A9eWVzIFwKLSIKLQotRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS1kaXNhYmxlLWRlY2ltYWwtZmxvYXQgIgotCi1FWFRSQV9PRUNPTkZfUEFUSFMgPSAiXAotICAgIC0td2l0aC1neHgtaW5jbHVkZS1kaXI9L25vdC9leGlzdHt0YXJnZXRfaW5jbHVkZWRpcn0vYysrLyR7QklOVn0gXAotICAgIC0td2l0aC1zeXNyb290PS9ub3QvZXhpc3QgXAotICAgIC0td2l0aC1idWlsZC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCi0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWVhZDk2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotRnJvbSA2MDI5YmIzMzgzMDVhNWQxNDAzZWUyMzQyN2VkOGQ1OGVhZTFmZjUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6Mzc6MTEgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAwMS80Nl0gZ2NjLTQuMy4xOiBBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KLS0tLQotIGNvbmZpZ3VyZSAgICB8IDIgKy0KLSBjb25maWd1cmUuYWMgfCAyICstCi0gMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKLWluZGV4IGEzZjY2YmEuLjFjYmEzYTkgMTAwNzU1Ci0tLS0gYS9jb25maWd1cmUKLSsrKyBiL2NvbmZpZ3VyZQotQEAgLTc0NjQsNyArNzQ2NCw3IEBAIGZpCi0gIyBmb3IgdGFyZ2V0X2FsaWFzIGFuZCBnY2MgZG9lc24ndCBtYW5hZ2UgaXQgY29uc2lzdGVudGx5LgotIHRhcmdldF9jb25maWdhcmdzPSItLWNhY2hlLWZpbGU9Li9jb25maWcuY2FjaGUgJHt0YXJnZXRfY29uZmlnYXJnc30iCi0gCi0tRkxBR1NfRk9SX1RBUkdFVD0KLStGTEFHU19GT1JfVEFSR0VUPSIkQVJDSF9GTEFHU19GT1JfVEFSR0VUIgotIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2RpcnMgIiBpbgotICAqIiBuZXdsaWIgIiopCi0gICBjYXNlICIgJHRhcmdldF9jb25maWdhcmdzICIgaW4KLWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IDk4N2RmYWIuLmQzYWRiOTUgMTAwNjQ0Ci0tLS0gYS9jb25maWd1cmUuYWMKLSsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTMxMDQsNyArMzEwNCw3IEBAIGZpCi0gIyBmb3IgdGFyZ2V0X2FsaWFzIGFuZCBnY2MgZG9lc24ndCBtYW5hZ2UgaXQgY29uc2lzdGVudGx5LgotIHRhcmdldF9jb25maWdhcmdzPSItLWNhY2hlLWZpbGU9Li9jb25maWcuY2FjaGUgJHt0YXJnZXRfY29uZmlnYXJnc30iCi0gCi0tRkxBR1NfRk9SX1RBUkdFVD0KLStGTEFHU19GT1JfVEFSR0VUPSIkQVJDSF9GTEFHU19GT1JfVEFSR0VUIgotIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2RpcnMgIiBpbgotICAqIiBuZXdsaWIgIiopCi0gICBjYXNlICIgJHRhcmdldF9jb25maWdhcmdzICIgaW4KLS0tIAotMi42LjMKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDAyLXVjbGliYy1jb25mLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDAyLXVjbGliYy1jb25mLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDZhZWI1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwMi11Y2xpYmMtY29uZi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLUZyb20gYjY3YzNhODQ0YmNjZWMxNzY2YTdlYzEyMGUyZDE4Y2RjYmM1ZjExNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjM4OjI1ICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMDIvNDZdIHVjbGliYy1jb25mCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoIHwgNCArKysrCi0gbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcgICAgIHwgNCArKy0tCi0gMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2ggYi9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKLWluZGV4IDYwYjA0OTcuLjZkYzdlYWQgMTAwNzU1Ci0tLS0gYS9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKLSsrKyBiL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAotQEAgLTEwNiw2ICsxMDYsMTAgQEAgaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCAtYSAkSF9SRUFMX1RBUkdFVCA9IGk2ODYtcGMtbGludXgtZ251IF0KLSAgdGhlbgotICAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKLSAgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCi0rZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIC1hICRIX1JFQUxfVEFSR0VUID0gaTY4Ni1wYy1saW51eC11Y2xpYmMgXQotKyB0aGVuCi0rICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQotKyAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKLSBlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgXSA7IHRoZW4KLSAgIG1ha2UgYm9vdHN0cmFwIHx8IGV4aXQgMQotICAgbWFrZSBpbnN0YWxsIHx8IGV4aXQgMQotZGlmZiAtLWdpdCBhL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnIGIvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKLWluZGV4IDc0M2Q5NTEuLmFlNGVhNjAgMTAwNzU1Ci0tLS0gYS9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZwotKysrIGIvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKLUBAIC02MDMsNyArNjAzLDcgQEAgaG9zdF9vcz1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCi0gCi0gIyBUcmFuc2Zvcm0gbGludXgqIHRvICotKi1saW51eC1nbnUqLCB0byBzdXBwb3J0IG9sZCBjb25maWd1cmUgc2NyaXB0cy4KLSBjYXNlICRob3N0X29zIGluCi0tbGludXgtZ251KikgOzsKLStsaW51eC1nbnUqfGxpbnV4LXVjbGliYyopIDs7Ci0gbGludXgqKSBob3N0PWBlY2hvICRob3N0IHwgc2VkICdzL15cKC4qLS4qLWxpbnV4XClcKC4qXCkkL1wxLWdudVwyLydgCi0gZXNhYwotIAotQEAgLTEyNDcsNyArMTI0Nyw3IEBAIGxpbnV4LWdudW9sZGxkKiB8IGxpbnV4LWdudWFvdXQqIHwgbGludXgtZ251Y29mZiopCi0gICA7OwotIAotICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KLS1saW51eC1nbnUqKQotK2xpbnV4KikKLSAgIHZlcnNpb25fdHlwZT1saW51eAotICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICBuZWVkX3ZlcnNpb249bm8KLS0tIAotMi42LjMKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkMDMyNjMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLUZyb20gOWJjYjNhMTg0OGZmMGY4OTkwMzAxY2EwOWEyNWIxNWMyY2Y5MGM2ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQwOjEyICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMDMvNDZdIGdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdAotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLS0tLQotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MgfCA1ICsrKysrCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oICB8IDkgKysrKysrKysrCi0gbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oICB8IDkgKysrKysrKysrCi0gMyBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYwotaW5kZXggNmRhNWYyMi4uMmY4NWMyZiAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKLUBAIC0yNjMsNSArMjYzLDEwIEBAIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgotICNpZmRlZiBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQKLSAjZGVmaW5lIF9HTElCQ1hYX0xEQkxfQ09NUEFUKGRibCwgbGRibCkgXAotICAgZXh0ZXJuICJDIiB2b2lkIGxkYmwgKHZvaWQpIF9fYXR0cmlidXRlX18gKChhbGlhcyAoI2RibCkpKQotKyNpZmRlZiBfX1VDTElCQ19fCi0rLy8gVGhpcyBpcyBiZWNhdXNlIF9fY19sb2NhbGUgaXMgb2YgdHlwZSBfX2N0eXBlX3RvdXBsb3dfdCogd2hpY2ggaXMgc2hvcnQgb24gdWNsaWJjLiBmb3IgZ2xpYmMgaXRzIGludCoKLStfR0xJQkNYWF9MREJMX0NPTVBBVChfWlN0MTRfX2NvbnZlcnRfdG9fdklkRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUHMsIF9aU3QxNF9fY29udmVydF90b192SWVFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQcyk7Ci0rI2Vsc2UKLSBfR0xJQkNYWF9MREJMX0NPTVBBVChfWlN0MTRfX2NvbnZlcnRfdG9fdklkRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUGksIF9aU3QxNF9fY29udmVydF90b192SWVFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQaSk7Ci0rI2VuZGlmCi0gI2VuZGlmIC8vIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVAotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAotaW5kZXggZWUzZWY4Ni4uN2ZkNTQ4NSAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCi1AQCAtNDAsMTMgKzQwLDIyIEBACi0gCi0gI2luY2x1ZGUgPGNsb2NhbGU+Ci0gCi0rI2lmZGVmIF9fVUNMSUJDX18KLSsjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjZW5kaWYKLSsKLSAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDAKLSAKLSBuYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKLSB7Ci0gX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KLSAKLSsjaWZkZWYgX19VQ0xJQkNfXwotKyAgdHlwZWRlZiBfX2N0eXBlX3RvdXBsb3dfdCoJX19jX2xvY2FsZTsKLSsjZWxzZQotICAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKLSsjZW5kaWYKLSAKLSAgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIGRvdWJsZSBhbmQgbG9uZyBkb3VibGUgdG8gc3RyaW5nIGFuZAotICAgLy8gcmV0dXJuIGxlbmd0aCBvZiBzdHJpbmcuICBJZiB2c25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCi1pbmRleCBmZDUyYjczLi4yNjI3Y2YzIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgKLUBAIC0zMyw2ICszMywxMSBAQAotIAotIC8vIEluZm9ybWF0aW9uIGFzIGdsZWFuZWQgZnJvbSAvdXNyL2luY2x1ZGUvY3R5cGUuaAotIAotKyNpZmRlZiBfX1VDTElCQ19fCi0rI2luY2x1ZGUgPGZlYXR1cmVzLmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rI2VuZGlmCi0rCi0gbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCi0gewotIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCi1AQCAtNDEsNyArNDYsMTEgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KLSAgIHN0cnVjdCBjdHlwZV9iYXNlCi0gICB7Ci0gICAgIC8vIE5vbi1zdGFuZGFyZCB0eXBlZGVmcy4KLSsjaWZkZWYgX19VQ0xJQkNfXwotKyAgICB0eXBlZGVmIGNvbnN0IF9fY3R5cGVfdG91cGxvd190KglfX3RvX3R5cGU7Ci0rI2Vsc2UKLSAgICAgdHlwZWRlZiBjb25zdCBpbnQqIAkJX190b190eXBlOwotKyNlbmRpZgotIAotICAgICAvLyBOQjogT2Zmc2V0cyBpbnRvIGN0eXBlPGNoYXI+OjpfTV90YWJsZSBmb3JjZSBhIHBhcnRpY3VsYXIgc2l6ZQotICAgICAvLyBvbiB0aGUgbWFzayB0eXBlLiBCZWNhdXNlIG9mIHRoaXMsIHdlIGRvbid0IHVzZSBhbiBlbnVtLgotLS0gCi0yLjYuMwotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTYyNjVhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjg2MiArMCwwIEBACi1Gcm9tIGJkOWRkNDcyZDE2MmZjNzI1MjJmOTZmNzBmNjM5MWM3YzYzZDJiZjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MTozOSArMDQwMAotU3ViamVjdDogW1BBVENIIDA0LzQ2XSB1Y2xpYmMtbG9jYWxlCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzcgKysKLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggICAgICB8ICA2MyArKwotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyAgICAgIHwgMTYwICsrKysrCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAxMTcgKysrKwotIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MgICAgICAgIHwgMzA4ICsrKysrKysrKwotIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgICAgICAgIHwgIDgwICsrKwotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgMzAwICsrKysrKysrKwotIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjICAgICAgIHwgMTAwICsrKwotIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggICAgICAgIHwgMTE4ICsrKysKLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8IDY5MiArKysrKysrKysrKysrKysrKysrKysKLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8IDE2MCArKysrKwotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgNDA2ICsrKysrKysrKysrKwotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCAgIHwgIDY4ICsrCi0gbGlic3RkYysrLXYzL2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNzUgKysrCi0gbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmggICAgICAgfCAgIDIgKwotIGxpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhciAgICAgICAgICAgICAgICAgIHwgICAyICsKLSAxNiBmaWxlcyBjaGFuZ2VkLCAyNjg4IGluc2VydGlvbnMoKykKLSBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKLSBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKLSBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKLSBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKLSBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCi0KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00IGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAotaW5kZXggODI2ZWY4Ni4uNzljYzcxNiAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKLSsrKyBiL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKLUBAIC0yMDI5LDYgKzIwMjksOSBAQCBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKLSAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCi0gICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgotICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgotKyAgICAgICotdWNsaWJjKikKLSsgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCi0rICAgICAgICA7OwotICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQotIAllbmFibGVfY2xvY2FsZV9mbGFnPWdudQotIAk7OwotQEAgLTIyMTMsNiArMjIxNiw0MCBAQCBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKLSAgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCi0gICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jKytsb2NhbGVfaW50ZXJuYWwuaAotICAgICAgIDs7Ci0rICAgIHVjbGliYykKLSsgICAgICBBQ19NU0dfUkVTVUxUKHVjbGliYykKLSsKLSsgICAgICAjIERlY2xhcmUgaW50ZW50aW9uIHRvIHVzZSBnZXR0ZXh0LCBhbmQgYWRkIHN1cHBvcnQgZm9yIHNwZWNpZmljCi0rICAgICAgIyBsYW5ndWFnZXMuCi0rICAgICAgIyBGb3Igc29tZSByZWFzb24sIEFMTF9MSU5HVUFTIGhhcyB0byBiZSBiZWZvcmUgQU0tR05VLUdFVFRFWFQKLSsgICAgICBBTExfTElOR1VBUz0iZGUgZnIiCi0rCi0rICAgICAgIyBEb24ndCBjYWxsIEFNLUdOVS1HRVRURVhUIGhlcmUuIEluc3RlYWQsIGFzc3VtZSBnbGliYy4KLSsgICAgICBBQ19DSEVDS19QUk9HKGNoZWNrX21zZ2ZtdCwgbXNnZm10LCB5ZXMsIG5vKQotKyAgICAgIGlmIHRlc3QgeCIkY2hlY2tfbXNnZm10IiA9IHgieWVzIiAmJiB0ZXN0IHgiJGVuYWJsZV9ubHMiID0geCJ5ZXMiOyB0aGVuCi0rICAgICAgICBVU0VfTkxTPXllcwotKyAgICAgIGZpCi0rICAgICAgIyBFeHBvcnQgdGhlIGJ1aWxkIG9iamVjdHMuCi0rICAgICAgZm9yIGxpbmcgaW4gJEFMTF9MSU5HVUFTOyBkbyBcCi0rICAgICAgICBnbGliY3h4X01PRklMRVM9IiRnbGliY3h4X01PRklMRVMgJGxpbmcubW8iOyBcCi0rICAgICAgICBnbGliY3h4X1BPRklMRVM9IiRnbGliY3h4X1BPRklMRVMgJGxpbmcucG8iOyBcCi0rICAgICAgZG9uZQotKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfTU9GSUxFUykKLSsgICAgICBBQ19TVUJTVChnbGliY3h4X1BPRklMRVMpCi0rCi0rICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKLSsgICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCi0rICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCi0rICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCi0rICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKLSsgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKLSsgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYwotKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCi0rICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi0rICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAotKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYwotKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAotKyAgICAgIDs7Ci0gICBlc2FjCi0gCi0gICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi4yYWUzZTRhCi0tLS0gL2Rldi9udWxsCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKLUBAIC0wLDAgKzEsNjMgQEAKLSsvLyBQcm90b3R5cGVzIGZvciBHTElCQyB0aHJlYWQgbG9jYWxlIF9fLXByZWZpeGVkIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQotKwotKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsvLwotKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKLSsvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKLSsvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotKy8vIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSsvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0rLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCi0rLy8gVVNBLgotKwotKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQotKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKLSsvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQotKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcwotKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgotKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSsKLSsvLyBXcml0dGVuIGJ5IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+Ci0rCi0rI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+Ci0rI2luY2x1ZGUgPGNsb2NhbGU+Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi0rI3dhcm5pbmcgY2xlYW4gdGhpcyB1cAotKyNlbmRpZgotKwotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rCi0rZXh0ZXJuICJDIiBfX3R5cGVvZihubF9sYW5naW5mb19sKSBfX25sX2xhbmdpbmZvX2w7Ci0rZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJjb2xsX2wpIF9fc3RyY29sbF9sOwotK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyZnRpbWVfbCkgX19zdHJmdGltZV9sOwotK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9kX2wpIF9fc3RydG9kX2w7Ci0rZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2ZfbCkgX19zdHJ0b2ZfbDsKLStleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvbGRfbCkgX19zdHJ0b2xkX2w7Ci0rZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ4ZnJtX2wpIF9fc3RyeGZybV9sOwotK2V4dGVybiAiQyIgX190eXBlb2YobmV3bG9jYWxlKSBfX25ld2xvY2FsZTsKLStleHRlcm4gIkMiIF9fdHlwZW9mKGZyZWVsb2NhbGUpIF9fZnJlZWxvY2FsZTsKLStleHRlcm4gIkMiIF9fdHlwZW9mKGR1cGxvY2FsZSkgX19kdXBsb2NhbGU7Ci0rZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOwotKwotKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAotK2V4dGVybiAiQyIgX190eXBlb2YoaXN3Y3R5cGVfbCkgX19pc3djdHlwZV9sOwotK2V4dGVybiAiQyIgX190eXBlb2YodG93bG93ZXJfbCkgX190b3dsb3dlcl9sOwotK2V4dGVybiAiQyIgX190eXBlb2YodG93dXBwZXJfbCkgX190b3d1cHBlcl9sOwotK2V4dGVybiAiQyIgX190eXBlb2Yod2NzY29sbF9sKSBfX3djc2NvbGxfbDsKLStleHRlcm4gIkMiIF9fdHlwZW9mKHdjc2Z0aW1lX2wpIF9fd2NzZnRpbWVfbDsKLStleHRlcm4gIkMiIF9fdHlwZW9mKHdjc3hmcm1fbCkgX193Y3N4ZnJtX2w7Ci0rZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3R5cGVfbCkgX193Y3R5cGVfbDsKLSsjZW5kaWYKLSsKLSsjZW5kaWYgLy8gR0xJQkMgMi4zIGFuZCBsYXRlcgotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjUwODFkYzEKLS0tLSAvZGV2L251bGwKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwotQEAgLTAsMCArMSwxNjAgQEAKLSsvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCi0rCi0rLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKy8vCi0rLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQotKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQotKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0rLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0rLy8gYW55IGxhdGVyIHZlcnNpb24uCi0rCi0rLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLSsvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSsvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKLSsvLyBVU0EuCi0rCi0rLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCi0rLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQotKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCi0rLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCi0rLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCi0rLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotKwotKy8vCi0rLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCi0rLy8KLSsKLSsvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgotKwotKyNpbmNsdWRlIDxjZXJybm8+ICAvLyBGb3IgZXJybm8KLSsjaW5jbHVkZSA8bG9jYWxlPgotKyNpbmNsdWRlIDxzdGRleGNlcHQ+Ci0rI2luY2x1ZGUgPGxhbmdpbmZvLmg+Ci0rI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+Ci0rCi0rI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rI2RlZmluZSBfX3N0cnRvbF9sKFMsIEUsIEIsIEwpICAgICAgc3RydG9sKChTKSwgKEUpLCAoQikpCi0rI2RlZmluZSBfX3N0cnRvdWxfbChTLCBFLCBCLCBMKSAgICAgc3RydG91bCgoUyksIChFKSwgKEIpKQotKyNkZWZpbmUgX19zdHJ0b2xsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvbGwoKFMpLCAoRSksIChCKSkKLSsjZGVmaW5lIF9fc3RydG91bGxfbChTLCBFLCBCLCBMKSAgICBzdHJ0b3VsbCgoUyksIChFKSwgKEIpKQotKyNkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKLSsjZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCi0rI2RlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKLSsjd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPwotKyNkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKLSsjZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKLSsjZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKLSsjZW5kaWYKLSsKLStuYW1lc3BhY2Ugc3RkCi0rewotKyAgdGVtcGxhdGU8PgotKyAgICB2b2lkCi0rICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZmxvYXQmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAotKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQotKyAgICB7Ci0rICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCi0rCXsKLSsJICBjaGFyKiBfX3Nhbml0eTsKLSsJICBlcnJubyA9IDA7Ci0rCSAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKLSsgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCi0rCSAgICBfX3YgPSBfX2Y7Ci0rCSAgZWxzZQotKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7Ci0rCX0KLSsgICAgfQotKwotKyAgdGVtcGxhdGU8PgotKyAgICB2b2lkCi0rICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKLSsJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKLSsgICAgewotKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQotKwl7Ci0rCSAgY2hhciogX19zYW5pdHk7Ci0rCSAgZXJybm8gPSAwOwotKwkgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOwotKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKLSsJICAgIF9fdiA9IF9fZDsKLSsJICBlbHNlCi0rCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKLSsJfQotKyAgICB9Ci0rCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIHZvaWQKLSsgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBsb25nIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCi0rCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCi0rICAgIHsKLSsgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKLSsJewotKwkgIGNoYXIqIF9fc2FuaXR5OwotKwkgIGVycm5vID0gMDsKLSsJICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7Ci0rICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQotKwkgICAgX192ID0gX19sZDsKLSsJICBlbHNlCi0rCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKLSsJfQotKyAgICB9Ci0rCi0rICB2b2lkCi0rICBsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCi0rCQkJCSAgICBfX2NfbG9jYWxlIF9fb2xkKQotKyAgewotKyAgICBfX2Nsb2MgPSBfX25ld2xvY2FsZSgxIDw8IExDX0FMTCwgX19zLCBfX29sZCk7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgaWYgKCFfX2Nsb2MpCi0rICAgICAgewotKwkvLyBUaGlzIG5hbWVkIGxvY2FsZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIE9TLgotKwlfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUgIgotKwkJCSAgICAgICJuYW1lIG5vdCB2YWxpZCIpKTsKLSsgICAgICB9Ci0rI2VuZGlmCi0rICB9Ci0rCi0rICB2b2lkCi0rICBsb2NhbGU6OmZhY2V0OjpfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKLSsgIHsKLSsgICAgaWYgKF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKLSsgICAgICBfX2ZyZWVsb2NhbGUoX19jbG9jKTsKLSsgIH0KLSsKLSsgIF9fY19sb2NhbGUKLSsgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKLSsgIHsgcmV0dXJuIF9fZHVwbG9jYWxlKF9fY2xvYyk7IH0KLSt9IC8vIG5hbWVzcGFjZSBzdGQKLSsKLStuYW1lc3BhY2UgX19nbnVfY3h4Ci0rewotKyAgY29uc3QgY2hhciogY29uc3QgY2F0ZWdvcnlfbmFtZXNbNiArIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTXSA9Ci0rICAgIHsKLSsgICAgICAiTENfQ1RZUEUiLAotKyAgICAgICJMQ19OVU1FUklDIiwKLSsgICAgICAiTENfVElNRSIsCi0rICAgICAgIkxDX0NPTExBVEUiLAotKyAgICAgICJMQ19NT05FVEFSWSIsCi0rICAgICAgIkxDX01FU1NBR0VTIiwKLSsjaWYgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgIT0gMAotKyAgICAgICJMQ19QQVBFUiIsCi0rICAgICAgIkxDX05BTUUiLAotKyAgICAgICJMQ19BRERSRVNTIiwKLSsgICAgICAiTENfVEVMRVBIT05FIiwKLSsgICAgICAiTENfTUVBU1VSRU1FTlQiLAotKyAgICAgICJMQ19JREVOVElGSUNBVElPTiIKLSsjZW5kaWYKLSsgICAgfTsKLSt9Ci0rCi0rbmFtZXNwYWNlIHN0ZAotK3sKLSsgIGNvbnN0IGNoYXIqIGNvbnN0KiBjb25zdCBsb2NhbGU6Ol9TX2NhdGVnb3JpZXMgPSBfX2dudV9jeHg6OmNhdGVnb3J5X25hbWVzOwotK30gIC8vIG5hbWVzcGFjZSBzdGQKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uZGEwN2MxZgotLS0tIC9kZXYvbnVsbAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKLUBAIC0wLDAgKzEsMTE3IEBACi0rLy8gV3JhcHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdlIGxvY2FsaXphdGlvbiAtKi0gQysrIC0qLQotKwotKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsvLwotKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKLSsvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKLSsvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotKy8vIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSsvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0rLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCi0rLy8gVVNBLgotKwotKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQotKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKLSsvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQotKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcwotKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgotKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSsKLSsvLwotKy8vIElTTyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29yaWVzLgotKy8vCi0rCi0rLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KLSsKLSsjaWZuZGVmIF9DX0xPQ0FMRV9ICi0rI2RlZmluZSBfQ19MT0NBTEVfSCAxCi0rCi0rI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgotKwotKyNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCi0rI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKLSsjaW5jbHVkZSA8Y2xvY2FsZT4KLSsjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0Ci0rI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi0rI3dhcm5pbmcgZml4IHRoaXMKLSsjZW5kaWYKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCi0rI2luY2x1ZGUgPGljb252Lmg+CQkvLyBGb3IgY29kZWN2dCB1c2luZyBpY29udiwgaWNvbnZfdAotKyNlbmRpZgotKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXwotKyNpbmNsdWRlIDxsaWJpbnRsLmg+IAkJLy8gRm9yIG1lc3NhZ2VzCi0rI2VuZGlmCi0rCi0rI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi0rI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCi0rI2VuZGlmCi0rI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQotKwotKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotKyN3YXJuaW5nIGZpeCBjYXRlZ29yaWVzCi0rI2VuZGlmCi0rLy8gI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyA2Ci0rI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCi0rCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLStuYW1lc3BhY2UgX19nbnVfY3h4Ci0rewotKyAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOwotK30KLSsjZW5kaWYKLSsKLStuYW1lc3BhY2Ugc3RkCi0rewotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICB0eXBlZGVmIF9fbG9jYWxlX3QJCV9fY19sb2NhbGU7Ci0rI2Vsc2UKLSsgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7Ci0rI2VuZGlmCi0rCi0rICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBfVHYgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCi0rICAvLyBzdHJpbmcuICBJZiBzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCi0rICAvLyB0aGUgdW5zYWZlIHNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAotKyAgLy8gYmUgYXZvaWRlZC4KLSsgIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KLSsgICAgaW50Ci0rICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsCi0rCQkgICAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKLSsJCSAgICAgY29uc3QgY2hhciogX19mbXQsCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCi0rCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fcHJlYykKLSsgICAgewotKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fY2xvYyk7Ci0rI2Vsc2UKLSsJCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMpCi0rICAgIHsKLSsjIGlmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXwotKyAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKLSsgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fb2xkKSArIDFdOwotKyAgICAgIHN0ZDo6c3RyY3B5KF9fc2F2LCBfX29sZCk7Ci0rICAgICAgc3RkOjpzZXRsb2NhbGUoTENfQUxMLCAiQyIpOwotKyMgZW5kaWYKLSsjZW5kaWYKLSsKLSsgICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCi0rICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2VsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KLSsgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKLSsgICAgICBkZWxldGUgW10gX19zYXY7Ci0rI2VuZGlmCi0rICAgICAgcmV0dXJuIF9fcmV0OwotKyAgICB9Ci0rfQotKwotKyNlbmRpZgotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uNjRhYTk2MgotLS0tIC9kZXYvbnVsbAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYwotQEAgLTAsMCArMSwzMDggQEAKLSsvLyBzdGQ6OmNvZGVjdnQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KLSsKLSsvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rLy8KLSsvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCi0rLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCi0rLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSsvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSsvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0rLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAotKy8vIFVTQS4KLSsKLSsvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKLSsvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCi0rLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKLSsvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKLSsvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKLSsvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0rCi0rLy8KLSsvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuNSAtIFRlbXBsYXRlIGNsYXNzIGNvZGVjdnQKLSsvLwotKwotKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+Ci0rCi0rI2luY2x1ZGUgPGxvY2FsZT4KLSsjaW5jbHVkZSA8Y3N0ZGxpYj4gIC8vIEZvciBNQl9DVVJfTUFYCi0rI2luY2x1ZGUgPGNsaW1pdHM+ICAvLyBGb3IgTUJfTEVOX01BWAotKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgotKwotK25hbWVzcGFjZSBzdGQKLSt7Ci0rICAvLyBTcGVjaWFsaXphdGlvbnMuCi0rI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCi0rICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAotKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKLSsgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAotKwkgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCi0rCSBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAotKwkgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0Ci0rICB7Ci0rICAgIHJlc3VsdCBfX3JldCA9IG9rOwotKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOwotKwotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKLSsjZW5kaWYKLSsKLSsgICAgLy8gd2NzbnJ0b21icyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKLSsgICAgLy8gaW4gY2FzZSB3ZSBmYWxsIGJhY2sgdG8gd2NydG9tYiBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgotKyAgICAvLyBOQjogd2NzbnJ0b21icyBpcyBhIEdOVSBleHRlbnNpb24KLSsgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKLSsJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAotKwkgJiYgX19yZXQgPT0gb2s7KQotKyAgICAgIHsKLSsJY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQgPSB3bWVtY2hyKF9fZnJvbV9uZXh0LCBMJ1wwJywKLSsJCQkJCQkgICAgICBfX2Zyb21fZW5kIC0gX19mcm9tX25leHQpOwotKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCi0rCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7Ci0rCi0rCV9fZnJvbSA9IF9fZnJvbV9uZXh0OwotKwljb25zdCBzaXplX3QgX19jb252ID0gd2NzbnJ0b21icyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKLSsJCQkJCSBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCi0rCQkJCQkgX190b19lbmQgLSBfX3RvX25leHQsICZfX3N0YXRlKTsKLSsJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKLSsJICB7Ci0rCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQotKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgotKwkgICAgLy8gd2NydG9tYi4KLSsJICAgIGZvciAoOyBfX2Zyb20gPCBfX2Zyb21fbmV4dDsgKytfX2Zyb20pCi0rCSAgICAgIF9fdG9fbmV4dCArPSB3Y3J0b21iKF9fdG9fbmV4dCwgKl9fZnJvbSwgJl9fdG1wX3N0YXRlKTsKLSsJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKLSsJICAgIF9fcmV0ID0gZXJyb3I7Ci0rCSAgfQotKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCi0rCSAgewotKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKLSsJICAgIF9fcmV0ID0gcGFydGlhbDsKLSsJICB9Ci0rCWVsc2UKLSsJICB7Ci0rCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7Ci0rCSAgICBfX3RvX25leHQgKz0gX19jb252OwotKwkgIH0KLSsKLSsJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKLSsJICB7Ci0rCSAgICBleHRlcm5fdHlwZSBfX2J1ZltNQl9MRU5fTUFYXTsKLSsJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKLSsJICAgIGNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3J0b21iKF9fYnVmLCAqX19mcm9tX25leHQsICZfX3RtcF9zdGF0ZSk7Ci0rCSAgICBpZiAoX19jb252ID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihfX3RvX2VuZCAtIF9fdG9fbmV4dCkpCi0rCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKLSsJICAgIGVsc2UKLSsJICAgICAgewotKwkJbWVtY3B5KF9fdG9fbmV4dCwgX19idWYsIF9fY29udik7Ci0rCQlfX3N0YXRlID0gX190bXBfc3RhdGU7Ci0rCQlfX3RvX25leHQgKz0gX19jb252OwotKwkJKytfX2Zyb21fbmV4dDsKLSsJICAgICAgfQotKwkgIH0KLSsgICAgICB9Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgX191c2Vsb2NhbGUoX19vbGQpOwotKyNlbmRpZgotKwotKyAgICByZXR1cm4gX19yZXQ7Ci0rICB9Ci0rCi0rICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAotKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKLSsgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCi0rCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAotKwlpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAotKwlpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKLSsgIHsKLSsgICAgcmVzdWx0IF9fcmV0ID0gb2s7Ci0rICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOwotKyNlbmRpZgotKwotKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgotKyAgICAvLyBpbiBjYXNlIHdlIHN0b3JlIGEgTCdcMCcgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KLSsgICAgLy8gTkI6IG1ic25ydG93Y3MgaXMgYSBHTlUgZXh0ZW5zaW9uCi0rICAgIGZvciAoX19mcm9tX25leHQgPSBfX2Zyb20sIF9fdG9fbmV4dCA9IF9fdG87Ci0rCSBfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX190b19uZXh0IDwgX190b19lbmQKLSsJICYmIF9fcmV0ID09IG9rOykKLSsgICAgICB7Ci0rCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOwotKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tX25leHQsICdcMCcsCi0rCQkJCQkJCQkgIF9fZnJvbV9lbmQKLSsJCQkJCQkJCSAgLSBfX2Zyb21fbmV4dCkpOwotKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCi0rCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7Ci0rCi0rCV9fZnJvbSA9IF9fZnJvbV9uZXh0OwotKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKLSsJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbV9uZXh0LAotKwkJCQkgICBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOwotKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQotKwkgIHsKLSsJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCi0rCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCi0rCSAgICAvLyBtYnJ0b3djLgotKwkgICAgZm9yICg7OyArK19fdG9fbmV4dCwgX19mcm9tICs9IF9fY29udikKLSsJICAgICAgewotKwkJX19jb252ID0gbWJydG93YyhfX3RvX25leHQsIF9fZnJvbSwgX19mcm9tX2VuZCAtIF9fZnJvbSwKLSsJCQkJICZfX3RtcF9zdGF0ZSk7Ci0rCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCi0rCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQotKwkJICBicmVhazsKLSsJICAgICAgfQotKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb207Ci0rCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7Ci0rCSAgICBfX3JldCA9IGVycm9yOwotKwkgIH0KLSsJZWxzZSBpZiAoX19mcm9tX25leHQgJiYgX19mcm9tX25leHQgPCBfX2Zyb21fY2h1bmtfZW5kKQotKwkgIHsKLSsJICAgIC8vIEl0IGlzIHVuY2xlYXIgd2hhdCB0byByZXR1cm4gaW4gdGhpcyBjYXNlIChzZWUgRFIgMzgyKS4KLSsJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7Ci0rCSAgICBfX3JldCA9IHBhcnRpYWw7Ci0rCSAgfQotKwllbHNlCi0rCSAgewotKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb21fY2h1bmtfZW5kOwotKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKLSsJICB9Ci0rCi0rCWlmIChfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX19yZXQgPT0gb2spCi0rCSAgewotKwkgICAgaWYgKF9fdG9fbmV4dCA8IF9fdG9fZW5kKQotKwkgICAgICB7Ci0rCQkvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncwotKwkJX190bXBfc3RhdGUgPSBfX3N0YXRlOwotKwkJKytfX2Zyb21fbmV4dDsKLSsJCSpfX3RvX25leHQrKyA9IEwnXDAnOwotKwkgICAgICB9Ci0rCSAgICBlbHNlCi0rCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKLSsJICB9Ci0rICAgICAgfQotKwotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSsjZW5kaWYKLSsKLSsgICAgcmV0dXJuIF9fcmV0OwotKyAgfQotKwotKyAgaW50Ci0rICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgotKyAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCi0rICB7Ci0rICAgIC8vIFhYWCBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCB0aGUgZW5jb2RpbmcgaXMKLSsgICAgLy8gc3RhdGVsZXNzIGFuZCBpcyBlaXRoZXIgc2luZ2xlLWJ5dGUgb3IgdmFyaWFibGUtd2lkdGguCi0rICAgIGludCBfX3JldCA9IDA7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOwotKyNlbmRpZgotKyAgICBpZiAoTUJfQ1VSX01BWCA9PSAxKQotKyAgICAgIF9fcmV0ID0gMTsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2VuZGlmCi0rICAgIHJldHVybiBfX3JldDsKLSsgIH0KLSsKLSsgIGludAotKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKLSsgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCi0rICB7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOwotKyNlbmRpZgotKyAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncy4KLSsgICAgaW50IF9fcmV0ID0gTUJfQ1VSX01BWDsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2VuZGlmCi0rICAgIHJldHVybiBfX3JldDsKLSsgIH0KLSsKLSsgIGludAotKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKLSsgIGRvX2xlbmd0aChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAotKwkgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0Ci0rICB7Ci0rICAgIGludCBfX3JldCA9IDA7Ci0rICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOwotKyNlbmRpZgotKwotKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgotKyAgICAvLyBpbiBjYXNlIHdlIGFkdmFuY2UgcGFzdCBpdCBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgotKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KLSsKLSsgICAgLy8gQSBkdW1teSBpbnRlcm5hbCBidWZmZXIgaXMgbmVlZGVkIGluIG9yZGVyIGZvciBtYnNucnRvY3dzIHRvIGNvbnNpZGVyCi0rICAgIC8vIGl0cyBmb3VydGggcGFyYW1ldGVyIChpdCB3b3VsZG4ndCB3aXRoIE5VTEwgYXMgZmlyc3QgcGFyYW1ldGVyKS4KLSsgICAgd2NoYXJfdCogX190byA9IHN0YXRpY19jYXN0PHdjaGFyX3QqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZih3Y2hhcl90KQotKwkJCQkJCQkgICAqIF9fbWF4KSk7Ci0rICAgIHdoaWxlIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKLSsgICAgICB7Ci0rCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOwotKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tLCAnXDAnLAotKwkJCQkJCQkJICBfX2VuZAotKwkJCQkJCQkJICAtIF9fZnJvbSkpOwotKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCi0rCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZW5kOwotKwotKwljb25zdCBleHRlcm5fdHlwZSogX190bXBfZnJvbSA9IF9fZnJvbTsKLSsJc2l6ZV90IF9fY29udiA9IG1ic25ydG93Y3MoX190bywgJl9fZnJvbSwKLSsJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbSwKLSsJCQkJICAgX19tYXgsICZfX3N0YXRlKTsKLSsJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKLSsJICB7Ci0rCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQotKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgotKwkgICAgLy8gbWJydG93Yy4KLSsJICAgIGZvciAoX19mcm9tID0gX190bXBfZnJvbTs7IF9fZnJvbSArPSBfX2NvbnYpCi0rCSAgICAgIHsKLSsJCV9fY29udiA9IG1icnRvd2MoTlVMTCwgX19mcm9tLCBfX2VuZCAtIF9fZnJvbSwKLSsJCQkJICZfX3RtcF9zdGF0ZSk7Ci0rCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCi0rCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQotKwkJICBicmVhazsKLSsJICAgICAgfQotKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOwotKwkgICAgX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKLSsJICAgIGJyZWFrOwotKwkgIH0KLSsJaWYgKCFfX2Zyb20pCi0rCSAgX19mcm9tID0gX19mcm9tX2NodW5rX2VuZDsKLSsKLSsJX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKLSsJX19tYXggLT0gX19jb252OwotKwotKwlpZiAoX19mcm9tIDwgX19lbmQgJiYgX19tYXgpCi0rCSAgewotKwkgICAgLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MKLSsJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKLSsJICAgICsrX19mcm9tOwotKwkgICAgKytfX3JldDsKLSsJICAgIC0tX19tYXg7Ci0rCSAgfQotKyAgICAgIH0KLSsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2VuZGlmCi0rCi0rICAgIHJldHVybiBfX3JldDsKLSsgIH0KLSsjZW5kaWYKLSt9Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi5jMjY2NGE3Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCi1AQCAtMCwwICsxLDgwIEBACi0rLy8gc3RkOjpjb2xsYXRlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCi0rCi0rLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKy8vCi0rLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQotKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQotKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0rLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0rLy8gYW55IGxhdGVyIHZlcnNpb24uCi0rCi0rLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLSsvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSsvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKLSsvLyBVU0EuCi0rCi0rLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCi0rLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQotKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCi0rLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCi0rLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCi0rLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotKwotKy8vCi0rLy8gSVNPIEMrKyAxNDg4MjogMjIuMi40LjEuMiAgY29sbGF0ZSB2aXJ0dWFsIGZ1bmN0aW9ucwotKy8vCi0rCi0rLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KLSsKLSsjaW5jbHVkZSA8bG9jYWxlPgotKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgotKwotKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyNkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKLSsjZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKLSsjZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCi0rI2RlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCi0rI2VuZGlmCi0rCi0rbmFtZXNwYWNlIHN0ZAotK3sKLSsgIC8vIFRoZXNlIGFyZSBiYXNpY2FsbHkgZXh0ZW5zaW9ucyB0byBjaGFyX3RyYWl0cywgYW5kIHBlcmhhcHMgc2hvdWxkCi0rICAvLyBiZSBwdXQgdGhlcmUgaW5zdGVhZCBvZiBoZXJlLgotKyAgdGVtcGxhdGU8PgotKyAgICBpbnQKLSsgICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiBfX29uZSwgY29uc3QgY2hhciogX190d28pIGNvbnN0Ci0rICAgIHsKLSsgICAgICBpbnQgX19jbXAgPSBfX3N0cmNvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOwotKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7Ci0rICAgIH0KLSsKLSsgIHRlbXBsYXRlPD4KLSsgICAgc2l6ZV90Ci0rICAgIGNvbGxhdGU8Y2hhcj46Ol9NX3RyYW5zZm9ybShjaGFyKiBfX3RvLCBjb25zdCBjaGFyKiBfX2Zyb20sCi0rCQkJCXNpemVfdCBfX24pIGNvbnN0Ci0rICAgIHsgcmV0dXJuIF9fc3RyeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQotKwotKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAotKyAgdGVtcGxhdGU8PgotKyAgICBpbnQKLSsgICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fY29tcGFyZShjb25zdCB3Y2hhcl90KiBfX29uZSwKLSsJCQkJIGNvbnN0IHdjaGFyX3QqIF9fdHdvKSBjb25zdAotKyAgICB7Ci0rICAgICAgaW50IF9fY21wID0gX193Y3Njb2xsX2woX19vbmUsIF9fdHdvLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsKLSsgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDApOwotKyAgICB9Ci0rCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIHNpemVfdAotKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV90cmFuc2Zvcm0od2NoYXJfdCogX190bywgY29uc3Qgd2NoYXJfdCogX19mcm9tLAotKwkJCQkgICBzaXplX3QgX19uKSBjb25zdAotKyAgICB7IHJldHVybiBfX3djc3hmcm1fbChfX3RvLCBfX2Zyb20sIF9fbiwgX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KLSsjZW5kaWYKLSt9Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjcyOTRlM2EKLS0tLSAvZGV2L251bGwKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCi1AQCAtMCwwICsxLDMwMCBAQAotKy8vIHN0ZDo6Y3R5cGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KLSsKLSsvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rLy8KLSsvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCi0rLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCi0rLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSsvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSsvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0rLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAotKy8vIFVTQS4KLSsKLSsvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKLSsvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCi0rLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKLSsvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKLSsvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKLSsvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0rCi0rLy8KLSsvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuMS4yICBjdHlwZSB2aXJ0dWFsIGZ1bmN0aW9ucy4KLSsvLwotKwotKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+Ci0rCi0rI2RlZmluZSBfTElCQwotKyNpbmNsdWRlIDxsb2NhbGU+Ci0rI3VuZGVmIF9MSUJDCi0rI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+Ci0rCi0rI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rI2RlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICB3Y3R5cGUoKFMpKQotKyNkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgdG93dXBwZXIoKEMpKQotKyNkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgdG93bG93ZXIoKEMpKQotKyNkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCi0rI2VuZGlmCi0rCi0rbmFtZXNwYWNlIHN0ZAotK3sKLSsgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAotKyAgLy8gdmFyaW91cyAvY29uZmlnL29zLyogZmlsZXMuCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKLSsgICAgOiBjdHlwZTxjaGFyPigwLCBmYWxzZSwgX19yZWZzKQotKyAgICB7Ci0rICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKLSsJewotKwkgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY3R5cGUpOwotKwkgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSwgX19zKTsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKwkgIHRoaXMtPl9NX3RvdXBwZXIgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b3VwcGVyOwotKwkgIHRoaXMtPl9NX3RvbG93ZXIgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b2xvd2VyOwotKwkgIHRoaXMtPl9NX3RhYmxlID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfYjsKLSsjZW5kaWYKLSsJfQotKyAgICB9Ci0rCi0rI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCi0rICBjdHlwZTx3Y2hhcl90Pjo6X193bWFza190eXBlCi0rICBjdHlwZTx3Y2hhcl90Pjo6X01fY29udmVydF90b193bWFzayhjb25zdCBtYXNrIF9fbSkgY29uc3QKLSsgIHsKLSsgICAgX193bWFza190eXBlIF9fcmV0OwotKyAgICBzd2l0Y2ggKF9fbSkKLSsgICAgICB7Ci0rICAgICAgY2FzZSBzcGFjZToKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJzcGFjZSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsJYnJlYWs7Ci0rICAgICAgY2FzZSBwcmludDoKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJwcmludCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsJYnJlYWs7Ci0rICAgICAgY2FzZSBjbnRybDoKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJjbnRybCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsJYnJlYWs7Ci0rICAgICAgY2FzZSB1cHBlcjoKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJ1cHBlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsJYnJlYWs7Ci0rICAgICAgY2FzZSBsb3dlcjoKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJsb3dlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsJYnJlYWs7Ci0rICAgICAgY2FzZSBhbHBoYToKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJhbHBoYSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsJYnJlYWs7Ci0rICAgICAgY2FzZSBkaWdpdDoKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJkaWdpdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsJYnJlYWs7Ci0rICAgICAgY2FzZSBwdW5jdDoKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJwdW5jdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsJYnJlYWs7Ci0rICAgICAgY2FzZSB4ZGlnaXQ6Ci0rCV9fcmV0ID0gX193Y3R5cGVfbCgieGRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOwotKwlicmVhazsKLSsgICAgICBjYXNlIGFsbnVtOgotKwlfX3JldCA9IF9fd2N0eXBlX2woImFsbnVtIiwgX01fY19sb2NhbGVfY3R5cGUpOwotKwlicmVhazsKLSsgICAgICBjYXNlIGdyYXBoOgotKwlfX3JldCA9IF9fd2N0eXBlX2woImdyYXBoIiwgX01fY19sb2NhbGVfY3R5cGUpOwotKwlicmVhazsKLSsgICAgICBkZWZhdWx0OgotKwlfX3JldCA9IF9fd21hc2tfdHlwZSgpOwotKyAgICAgIH0KLSsgICAgcmV0dXJuIF9fcmV0OwotKyAgfQotKwotKyAgd2NoYXJfdAotKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvdXBwZXIod2NoYXJfdCBfX2MpIGNvbnN0Ci0rICB7IHJldHVybiBfX3Rvd3VwcGVyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KLSsKLSsgIGNvbnN0IHdjaGFyX3QqCi0rICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAotKyAgewotKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCi0rICAgICAgewotKyAgICAgICAgKl9fbG8gPSBfX3Rvd3VwcGVyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsgICAgICAgICsrX19sbzsKLSsgICAgICB9Ci0rICAgIHJldHVybiBfX2hpOwotKyAgfQotKwotKyAgd2NoYXJfdAotKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvbG93ZXIod2NoYXJfdCBfX2MpIGNvbnN0Ci0rICB7IHJldHVybiBfX3Rvd2xvd2VyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KLSsKLSsgIGNvbnN0IHdjaGFyX3QqCi0rICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAotKyAgewotKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCi0rICAgICAgewotKyAgICAgICAgKl9fbG8gPSBfX3Rvd2xvd2VyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsgICAgICAgICsrX19sbzsKLSsgICAgICB9Ci0rICAgIHJldHVybiBfX2hpOwotKyAgfQotKwotKyAgYm9vbAotKyAgY3R5cGU8d2NoYXJfdD46OgotKyAgZG9faXMobWFzayBfX20sIHdjaGFyX3QgX19jKSBjb25zdAotKyAgewotKyAgICAvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgotKyAgICAvLyBsaWJyYXJ5IGZvciBibGFuay4KLSsgICAgYm9vbCBfX3JldCA9IGZhbHNlOwotKyAgICBjb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOwotKyAgICBmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCi0rICAgICAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0KLSsJICAmJiBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKLSsJewotKwkgIF9fcmV0ID0gdHJ1ZTsKLSsJICBicmVhazsKLSsJfQotKyAgICByZXR1cm4gX19yZXQ7Ci0rICB9Ci0rCi0rICBjb25zdCB3Y2hhcl90KgotKyAgY3R5cGU8d2NoYXJfdD46OgotKyAgZG9faXMoY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgbWFzayogX192ZWMpIGNvbnN0Ci0rICB7Ci0rICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX3ZlYywgKytfX2xvKQotKyAgICAgIHsKLSsJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKLSsJLy8gbGlicmFyeSBmb3IgYmxhbmsuCi0rCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7Ci0rCW1hc2sgX19tID0gMDsKLSsJZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQotKwkgIGlmIChfX2lzd2N0eXBlX2woKl9fbG8sIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQotKwkgICAgX19tIHw9IF9NX2JpdFtfX2JpdGN1cl07Ci0rCSpfX3ZlYyA9IF9fbTsKLSsgICAgICB9Ci0rICAgIHJldHVybiBfX2hpOwotKyAgfQotKwotKyAgY29uc3Qgd2NoYXJfdCoKLSsgIGN0eXBlPHdjaGFyX3Q+OjoKLSsgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0Ci0rICB7Ci0rICAgIHdoaWxlIChfX2xvIDwgX19oaSAmJiAhdGhpcy0+ZG9faXMoX19tLCAqX19sbykpCi0rICAgICAgKytfX2xvOwotKyAgICByZXR1cm4gX19sbzsKLSsgIH0KLSsKLSsgIGNvbnN0IHdjaGFyX3QqCi0rICBjdHlwZTx3Y2hhcl90Pjo6Ci0rICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0Ci0rICB7Ci0rICAgIHdoaWxlIChfX2xvIDwgX19oaSAmJiB0aGlzLT5kb19pcyhfX20sICpfX2xvKSAhPSAwKQotKyAgICAgICsrX19sbzsKLSsgICAgcmV0dXJuIF9fbG87Ci0rICB9Ci0rCi0rICB3Y2hhcl90Ci0rICBjdHlwZTx3Y2hhcl90Pjo6Ci0rICBkb193aWRlbihjaGFyIF9fYykgY29uc3QKLSsgIHsgcmV0dXJuIF9NX3dpZGVuW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldOyB9Ci0rCi0rICBjb25zdCBjaGFyKgotKyAgY3R5cGU8d2NoYXJfdD46OgotKyAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgd2NoYXJfdCogX19kZXN0KSBjb25zdAotKyAgewotKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCi0rICAgICAgewotKwkqX19kZXN0ID0gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG8pXTsKLSsJKytfX2xvOwotKwkrK19fZGVzdDsKLSsgICAgICB9Ci0rICAgIHJldHVybiBfX2hpOwotKyAgfQotKwotKyAgY2hhcgotKyAgY3R5cGU8d2NoYXJfdD46OgotKyAgZG9fbmFycm93KHdjaGFyX3QgX193YywgY2hhciBfX2RmYXVsdCkgY29uc3QKLSsgIHsKLSsgICAgaWYgKF9fd2MgPj0gMCAmJiBfX3djIDwgMTI4ICYmIF9NX25hcnJvd19vaykKLSsgICAgICByZXR1cm4gX01fbmFycm93W19fd2NdOwotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7Ci0rI2VuZGlmCi0rICAgIGNvbnN0IGludCBfX2MgPSB3Y3RvYihfX3djKTsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2VuZGlmCi0rICAgIHJldHVybiAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7Ci0rICB9Ci0rCi0rICBjb25zdCB3Y2hhcl90KgotKyAgY3R5cGU8d2NoYXJfdD46OgotKyAgZG9fbmFycm93KGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIGNoYXIgX19kZmF1bHQsCi0rCSAgICBjaGFyKiBfX2Rlc3QpIGNvbnN0Ci0rICB7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsjZW5kaWYKLSsgICAgaWYgKF9NX25hcnJvd19vaykKLSsgICAgICB3aGlsZSAoX19sbyA8IF9faGkpCi0rCXsKLSsJICBpZiAoKl9fbG8gPj0gMCAmJiAqX19sbyA8IDEyOCkKLSsJICAgICpfX2Rlc3QgPSBfTV9uYXJyb3dbKl9fbG9dOwotKwkgIGVsc2UKLSsJICAgIHsKLSsJICAgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKCpfX2xvKTsKLSsJICAgICAgKl9fZGVzdCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKLSsJICAgIH0KLSsJICArK19fbG87Ci0rCSAgKytfX2Rlc3Q7Ci0rCX0KLSsgICAgZWxzZQotKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKLSsJewotKwkgIGNvbnN0IGludCBfX2MgPSB3Y3RvYigqX19sbyk7Ci0rCSAgKl9fZGVzdCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKLSsJICArK19fbG87Ci0rCSAgKytfX2Rlc3Q7Ci0rCX0KLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2VuZGlmCi0rICAgIHJldHVybiBfX2hpOwotKyAgfQotKwotKyAgdm9pZAotKyAgY3R5cGU8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfY3R5cGUoKQotKyAgewotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7Ci0rI2VuZGlmCi0rICAgIHdpbnRfdCBfX2k7Ci0rICAgIGZvciAoX19pID0gMDsgX19pIDwgMTI4OyArK19faSkKLSsgICAgICB7Ci0rCWNvbnN0IGludCBfX2MgPSB3Y3RvYihfX2kpOwotKwlpZiAoX19jID09IEVPRikKLSsJICBicmVhazsKLSsJZWxzZQotKwkgIF9NX25hcnJvd1tfX2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKTsKLSsgICAgICB9Ci0rICAgIGlmIChfX2kgPT0gMTI4KQotKyAgICAgIF9NX25hcnJvd19vayA9IHRydWU7Ci0rICAgIGVsc2UKLSsgICAgICBfTV9uYXJyb3dfb2sgPSBmYWxzZTsKLSsgICAgZm9yIChzaXplX3QgX19qID0gMDsKLSsJIF9faiA8IHNpemVvZihfTV93aWRlbikgLyBzaXplb2Yod2ludF90KTsgKytfX2opCi0rICAgICAgX01fd2lkZW5bX19qXSA9IGJ0b3djKF9faik7Ci0rCi0rICAgIGZvciAoc2l6ZV90IF9fayA9IDA7IF9fayA8PSAxMTsgKytfX2spCi0rICAgICAgewotKwlfTV9iaXRbX19rXSA9IHN0YXRpY19jYXN0PG1hc2s+KF9JU2JpdChfX2spKTsKLSsJX01fd21hc2tbX19rXSA9IF9NX2NvbnZlcnRfdG9fd21hc2soX01fYml0W19fa10pOwotKyAgICAgIH0KLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2VuZGlmCi0rICB9Ci0rI2VuZGlmIC8vICBfR0xJQkNYWF9VU0VfV0NIQVJfVAotK30KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uMTM1OTRkOQotLS0tIC9kZXYvbnVsbAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKLUBAIC0wLDAgKzEsMTAwIEBACi0rLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQotKwotKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsvLwotKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKLSsvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKLSsvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotKy8vIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSsvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0rLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCi0rLy8gVVNBLgotKwotKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQotKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKLSsvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQotKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcwotKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgotKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSsKLSsvLwotKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIHZpcnR1YWwgZnVuY3Rpb25zCi0rLy8KLSsKLSsvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgotKwotKyNpbmNsdWRlIDxsb2NhbGU+Ci0rI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi0rI3dhcm5pbmcgZml4IGdldHRleHQgc3R1ZmYKLSsjZW5kaWYKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KLStleHRlcm4gIkMiIGNoYXIgKl9fZGNnZXR0ZXh0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCi0rCQkJICAgICBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KTsKLSsjdW5kZWYgZ2V0dGV4dAotKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQotKyNlbHNlCi0rI3VuZGVmIGdldHRleHQKLSsjZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKLSsjZW5kaWYKLSsKLStuYW1lc3BhY2Ugc3RkCi0rewotKyAgLy8gU3BlY2lhbGl6YXRpb25zLgotKyAgdGVtcGxhdGU8PgotKyAgICBzdHJpbmcKLSsgICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKLSsgICAgewotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKLSsgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KGdldHRleHQoX19kZmF1bHQuY19zdHIoKSkpOwotKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSsgICAgICByZXR1cm4gc3RyaW5nKF9fbXNnKTsKLSsjZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXwotKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKLSsgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKLSsgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7Ci0rICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOwotKyAgICAgIGZyZWUoX19vbGQpOwotKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOwotKyNlbHNlCi0rICAgICAgY29uc3QgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9fZGZhdWx0LmNfc3RyKCkpOwotKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOwotKyNlbmRpZgotKyAgICB9Ci0rCi0rI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIHdzdHJpbmcKLSsgICAgbWVzc2FnZXM8d2NoYXJfdD46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgd3N0cmluZyYgX19kZmF1bHQpIGNvbnN0Ci0rICAgIHsKLSsjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOwotKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKLSsgICAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKLSsjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KLSsgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7Ci0rICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV9tZXNzYWdlcyk7Ci0rICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOwotKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKLSsgICAgICBmcmVlKF9fb2xkKTsKLSsgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOwotKyMgZWxzZQotKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKLSsgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOwotKyMgZW5kaWYKLSsgICAgfQotKyNlbmRpZgotK30KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjE0MjQwNzgKLS0tLSAvZGV2L251bGwKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKLUBAIC0wLDAgKzEsMTE4IEBACi0rLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQotKwotKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsvLwotKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKLSsvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKLSsvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotKy8vIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSsvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0rLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCi0rLy8gVVNBLgotKwotKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQotKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKLSsvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQotKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcwotKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgotKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSsKLSsvLwotKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIGZ1bmN0aW9ucwotKy8vCi0rCi0rLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KLSsKLSsjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSsjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKLSsjZW5kaWYKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KLStleHRlcm4gIkMiIGNoYXIgKl9fdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKLStleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKLSsJCQkJICBjb25zdCBjaGFyICpkaXJuYW1lKTsKLSsjZWxzZQotKyN1bmRlZiBfX3RleHRkb21haW4KLSsjdW5kZWYgX19iaW5kdGV4dGRvbWFpbgotKyNkZWZpbmUgX190ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKLSsjZGVmaW5lIF9fYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCi0rI2VuZGlmCi0rCi0rICAvLyBOb24tdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgotKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgotKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoc2l6ZV90IF9fcmVmcykKLSsgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfZ2V0X2NfbG9jYWxlKCkpLAotKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfU19nZXRfY19uYW1lKCkpCi0rICAgICB7IH0KLSsKLSsgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KLSsgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCi0rCQkJCXNpemVfdCBfX3JlZnMpCi0rICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYykpLAotKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfX3MpCi0rICAgICB7Ci0rICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOwotKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKLSsgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOwotKyAgICAgfQotKwotKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgotKyAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCi0rICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCi0rCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0Ci0rICAgIHsKLSsgICAgICBfX2JpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7Ci0rICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7Ci0rICAgIH0KLSsKLSsgIC8vIFZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KLSsgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KLSsgICAgbWVzc2FnZXM8X0NoYXJUPjo6fm1lc3NhZ2VzKCkKLSsgICAgewotKyAgICAgIGlmIChfTV9uYW1lX21lc3NhZ2VzICE9IF9TX2dldF9jX25hbWUoKSkKLSsJZGVsZXRlIFtdIF9NX25hbWVfbWVzc2FnZXM7Ci0rICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7Ci0rICAgIH0KLSsKLSsgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KLSsgICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZwotKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLAotKwkJCSAgICAgIGNvbnN0IGxvY2FsZSYpIGNvbnN0Ci0rICAgIHsKLSsgICAgICAvLyBObyBlcnJvciBjaGVja2luZyBpcyBkb25lLCBhc3N1bWUgdGhlIGNhdGFsb2cgZXhpc3RzIGFuZCBjYW4KLSsgICAgICAvLyBiZSB1c2VkLgotKyAgICAgIF9fdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7Ci0rICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KLSsgICAgdm9pZAotKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdAotKyAgICB7IH0KLSsKLSsgICAvLyBtZXNzYWdlc19ieW5hbWUKLSsgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+Ci0rICAgICBtZXNzYWdlc19ieW5hbWU8X0NoYXJUPjo6bWVzc2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKLSsgICAgIDogbWVzc2FnZXM8X0NoYXJUPihfX3JlZnMpCi0rICAgICB7Ci0rICAgICAgIGlmICh0aGlzLT5fTV9uYW1lX21lc3NhZ2VzICE9IGxvY2FsZTo6ZmFjZXQ6Ol9TX2dldF9jX25hbWUoKSkKLSsJIGRlbGV0ZSBbXSB0aGlzLT5fTV9uYW1lX21lc3NhZ2VzOwotKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKLSsgICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7Ci0rICAgICAgIHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKLSsKLSsgICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKLSsJIHsKLSsJICAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcyk7Ci0rCSAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsKLSsJIH0KLSsgICAgIH0KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uYWE1MjczMQotLS0tIC9kZXYvbnVsbAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKLUBAIC0wLDAgKzEsNjkyIEBACi0rLy8gc3RkOjptb25leXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCi0rCi0rLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKy8vCi0rLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQotKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQotKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0rLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0rLy8gYW55IGxhdGVyIHZlcnNpb24uCi0rCi0rLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLSsvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSsvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKLSsvLyBVU0EuCi0rCi0rLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCi0rLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQotKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCi0rLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCi0rLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCi0rLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotKwotKy8vCi0rLy8gSVNPIEMrKyAxNDg4MjogMjIuMi42LjMuMiAgbW9uZXlwdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucwotKy8vCi0rCi0rLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KLSsKLSsjZGVmaW5lIF9MSUJDCi0rI2luY2x1ZGUgPGxvY2FsZT4KLSsjdW5kZWYgX0xJQkMKLSsjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KLSsKLSsjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSsjd2FybmluZyBvcHRpbWl6ZSB0aGlzIGZvciB1Y2xpYmMKLSsjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKLSsjZW5kaWYKLSsKLSsjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKLSsjZW5kaWYKLSsKLStuYW1lc3BhY2Ugc3RkCi0rewotKyAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6Ci0rICAvLyBzcGFjZSBub25lIHN5bWJvbCBzaWduIHZhbHVlCi0rICBtb25leV9iYXNlOjpwYXR0ZXJuCi0rICBtb25leV9iYXNlOjpfU19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VkZXMsIGNoYXIgX19zcGFjZSwgY2hhciBfX3Bvc24pCi0rICB7Ci0rICAgIHBhdHRlcm4gX19yZXQ7Ci0rCi0rICAgIC8vIFRoaXMgaW5zYW5lbHkgY29tcGxpY2F0ZWQgcm91dGluZSBhdHRlbXB0cyB0byBjb25zdHJ1Y3QgYSB2YWxpZAotKyAgICAvLyBwYXR0ZXJuIGZvciB1c2Ugd2l0aCBtb255ZXB1bmN0LiBBIGNvdXBsZSBvZiBpbnZhcmlhbnRzOgotKwotKyAgICAvLyBpZiAoX19wcmVjZWRlcykgc3ltYm9sIC0+IHZhbHVlCi0rICAgIC8vIGVsc2UgdmFsdWUgLT4gc3ltYm9sCi0rCi0rICAgIC8vIGlmIChfX3NwYWNlKSBzcGFjZQotKyAgICAvLyBlbHNlIG5vbmUKLSsKLSsgICAgLy8gbm9uZSA9PSBuZXZlciBmaXJzdAotKyAgICAvLyBzcGFjZSBuZXZlciBmaXJzdCBvciBsYXN0Ci0rCi0rICAgIC8vIEFueSBlbGVnYW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGFyZSB3ZWxjb21lLgotKyAgICBzd2l0Y2ggKF9fcG9zbikKLSsgICAgICB7Ci0rICAgICAgY2FzZSAwOgotKyAgICAgIGNhc2UgMToKLSsJLy8gMSBUaGUgc2lnbiBwcmVjZWRlcyB0aGUgdmFsdWUgYW5kIHN5bWJvbC4KLSsJX19yZXQuZmllbGRbMF0gPSBzaWduOwotKwlpZiAoX19zcGFjZSkKLSsJICB7Ci0rCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24uCi0rCSAgICBpZiAoX19wcmVjZWRlcykKLSsJICAgICAgewotKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7Ci0rCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOwotKwkgICAgICB9Ci0rCSAgICBlbHNlCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7Ci0rCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsKLSsJICAgICAgfQotKwkgICAgX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKLSsJICB9Ci0rCWVsc2UKLSsJICB7Ci0rCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24gYW5kIGVuZHMgd2l0aCBub25lLgotKwkgICAgaWYgKF9fcHJlY2VkZXMpCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOwotKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKLSsJICAgICAgfQotKwkgICAgZWxzZQotKwkgICAgICB7Ci0rCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOwotKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7Ci0rCSAgICAgIH0KLSsJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKLSsJICB9Ci0rCWJyZWFrOwotKyAgICAgIGNhc2UgMjoKLSsJLy8gMiBUaGUgc2lnbiBmb2xsb3dzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgotKwlpZiAoX19zcGFjZSkKLSsJICB7Ci0rCSAgICAvLyBQYXR0ZXJuIGVpdGhlciBlbmRzIHdpdGggc2lnbi4KLSsJICAgIGlmIChfX3ByZWNlZGVzKQotKwkgICAgICB7Ci0rCQlfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKLSsJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7Ci0rCSAgICAgIH0KLSsJICAgIGVsc2UKLSsJICAgICAgewotKwkJX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKLSsJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOwotKwkgICAgICB9Ci0rCSAgICBfX3JldC5maWVsZFsxXSA9IHNwYWNlOwotKwkgICAgX19yZXQuZmllbGRbM10gPSBzaWduOwotKwkgIH0KLSsJZWxzZQotKwkgIHsKLSsJICAgIC8vIFBhdHRlcm4gZW5kcyB3aXRoIHNpZ24gdGhlbiBub25lLgotKwkgICAgaWYgKF9fcHJlY2VkZXMpCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOwotKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKLSsJICAgICAgfQotKwkgICAgZWxzZQotKwkgICAgICB7Ci0rCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOwotKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7Ci0rCSAgICAgIH0KLSsJICAgIF9fcmV0LmZpZWxkWzJdID0gc2lnbjsKLSsJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKLSsJICB9Ci0rCWJyZWFrOwotKyAgICAgIGNhc2UgMzoKLSsJLy8gMyBUaGUgc2lnbiBpbW1lZGlhdGVseSBwcmVjZWRlcyB0aGUgc3ltYm9sLgotKwlpZiAoX19wcmVjZWRlcykKLSsJICB7Ci0rCSAgICBfX3JldC5maWVsZFswXSA9IHNpZ247Ci0rCSAgICBfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKLSsJICAgIGlmIChfX3NwYWNlKQotKwkgICAgICB7Ci0rCQlfX3JldC5maWVsZFsyXSA9IHNwYWNlOwotKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKLSsJICAgICAgfQotKwkgICAgZWxzZQotKwkgICAgICB7Ci0rCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOwotKwkJX19yZXQuZmllbGRbM10gPSBub25lOwotKwkgICAgICB9Ci0rCSAgfQotKwllbHNlCi0rCSAgewotKwkgICAgX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKLSsJICAgIGlmIChfX3NwYWNlKQotKwkgICAgICB7Ci0rCQlfX3JldC5maWVsZFsxXSA9IHNwYWNlOwotKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOwotKwkJX19yZXQuZmllbGRbM10gPSBzeW1ib2w7Ci0rCSAgICAgIH0KLSsJICAgIGVsc2UKLSsJICAgICAgewotKwkJX19yZXQuZmllbGRbMV0gPSBzaWduOwotKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7Ci0rCQlfX3JldC5maWVsZFszXSA9IG5vbmU7Ci0rCSAgICAgIH0KLSsJICB9Ci0rCWJyZWFrOwotKyAgICAgIGNhc2UgNDoKLSsJLy8gNCBUaGUgc2lnbiBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBzeW1ib2wuCi0rCWlmIChfX3ByZWNlZGVzKQotKwkgIHsKLSsJICAgIF9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOwotKwkgICAgX19yZXQuZmllbGRbMV0gPSBzaWduOwotKwkgICAgaWYgKF9fc3BhY2UpCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7Ci0rCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOwotKwkgICAgICB9Ci0rCSAgICBlbHNlCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7Ci0rCQlfX3JldC5maWVsZFszXSA9IG5vbmU7Ci0rCSAgICAgIH0KLSsJICB9Ci0rCWVsc2UKLSsJICB7Ci0rCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOwotKwkgICAgaWYgKF9fc3BhY2UpCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7Ci0rCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKLSsJCV9fcmV0LmZpZWxkWzNdID0gc2lnbjsKLSsJICAgICAgfQotKwkgICAgZWxzZQotKwkgICAgICB7Ci0rCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKLSsJCV9fcmV0LmZpZWxkWzJdID0gc2lnbjsKLSsJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKLSsJICAgICAgfQotKwkgIH0KLSsJYnJlYWs7Ci0rICAgICAgZGVmYXVsdDoKLSsJOwotKyAgICAgIH0KLSsgICAgcmV0dXJuIF9fcmV0OwotKyAgfQotKwotKyAgdGVtcGxhdGU8PgotKyAgICB2b2lkCi0rICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKLSsJCQkJCQkgICAgIGNvbnN0IGNoYXIqKQotKyAgICB7Ci0rICAgICAgaWYgKCFfTV9kYXRhKQotKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCB0cnVlPjsKLSsKLSsgICAgICBpZiAoIV9fY2xvYykKLSsJewotKwkgIC8vICJDIiBsb2NhbGUKLSsJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOwotKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOwotKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOwotKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOwotKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOwotKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKLSsJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOwotKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47Ci0rCi0rCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKLSsJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOwotKwl9Ci0rICAgICAgZWxzZQotKwl7Ci0rCSAgLy8gTmFtZWQgbG9jYWxlLgotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULAotKwkJCQkJCQlfX2Nsb2MpKTsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fVEhPVVNBTkRTX1NFUCwKLSsJCQkJCQkJX19jbG9jKSk7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7Ci0rCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOwotKwotKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKLSsJICBpZiAoIV9fbnBvc24pCi0rCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKLSsJICBlbHNlCi0rCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwKLSsJCQkJCQkJX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7Ci0rCi0rCSAgLy8gX0ludGwgPT0gdHJ1ZQotKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOwotKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsCi0rCQkJCQkJICAgICAgX19jbG9jKSk7Ci0rCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOwotKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7Ci0rCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOwotKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCi0rCQkJCQkJCV9fcHBvc24pOwotKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKLSsJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOwotKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCi0rCQkJCQkJCV9fbnBvc24pOwotKwl9Ci0rICAgIH0KLSsKLSsgIHRlbXBsYXRlPD4KLSsgICAgdm9pZAotKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAotKwkJCQkJCSAgICAgIGNvbnN0IGNoYXIqKQotKyAgICB7Ci0rICAgICAgaWYgKCFfTV9kYXRhKQotKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCBmYWxzZT47Ci0rCi0rICAgICAgaWYgKCFfX2Nsb2MpCi0rCXsKLSsJICAvLyAiQyIgbG9jYWxlCi0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOwotKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7Ci0rCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gIiI7Ci0rCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIiI7Ci0rCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7Ci0rCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKLSsJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOwotKwotKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCi0rCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsKLSsJfQotKyAgICAgIGVsc2UKLSsJewotKwkgIC8vIE5hbWVkIGxvY2FsZS4KLSsJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fREVDSU1BTF9QT0lOVCwKLSsJCQkJCQkJX19jbG9jKSk7Ci0rCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX1RIT1VTQU5EU19TRVAsCi0rCQkJCQkJCV9fY2xvYykpOwotKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOwotKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKLSsKLSsJICBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKLSsJICBpZiAoIV9fbnBvc24pCi0rCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKLSsJICBlbHNlCi0rCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwKLSsJCQkJCQkJX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7Ci0rCi0rCSAgLy8gX0ludGwgPT0gZmFsc2UKLSsJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKLSsJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOwotKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOwotKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKLSsJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKLSsJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAotKwkJCQkJCQlfX3Bwb3NuKTsKLSsJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKLSsJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7Ci0rCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKLSsJCQkJCQkJX19ucG9zbik7Ci0rCX0KLSsgICAgfQotKwotKyAgdGVtcGxhdGU8PgotKyAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCi0rICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KLSsKLSsgIHRlbXBsYXRlPD4KLSsgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCkKLSsgICAgeyBkZWxldGUgX01fZGF0YTsgfQotKwotKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAotKyAgdGVtcGxhdGU8PgotKyAgICB2b2lkCi0rICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKwkJCQkJCQljb25zdCBjaGFyKikKLSsjZWxzZQotKwkJCQkJCQljb25zdCBjaGFyKiBfX25hbWUpCi0rI2VuZGlmCi0rICAgIHsKLSsgICAgICBpZiAoIV9NX2RhdGEpCi0rCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIHRydWU+OwotKwotKyAgICAgIGlmICghX19jbG9jKQotKwl7Ci0rCSAgLy8gIkMiIGxvY2FsZQotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOwotKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOwotKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7Ci0rCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7Ci0rCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7Ci0rCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKLSsJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOwotKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7Ci0rCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7Ci0rCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKLSsJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOwotKwotKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgotKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCi0rCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KLSsJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7Ci0rCX0KLSsgICAgICBlbHNlCi0rCXsKLSsJICAvLyBOYW1lZCBsb2NhbGUuCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKLSsjZWxzZQotKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgotKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKLSsJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOwotKyNlbmRpZgotKwotKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQotKyNlbmRpZgotKyNpZmRlZiBfX1VDTElCQ19fCi0rIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOwotKyMgZWxzZQotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7Ci0rCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKLSsjIGVuZGlmCi0rI2Vsc2UKLSsJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7Ci0rCi0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKLSsjZW5kaWYKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKLSsKLSsJICBjb25zdCBjaGFyKiBfX2Nwb3NzaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKLSsJICBjb25zdCBjaGFyKiBfX2NuZWdzaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwgX19jbG9jKTsKLSsJICBjb25zdCBjaGFyKiBfX2NjdXJyID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOwotKwotKwkgIHdjaGFyX3QqIF9fd2NzX3BzID0gMDsKLSsJICB3Y2hhcl90KiBfX3djc19ucyA9IDA7Ci0rCSAgY29uc3QgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOwotKwkgIHRyeQotKwkgICAgewotKwkgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKLSsJICAgICAgc2l6ZV90IF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOwotKwkgICAgICBpZiAoX19sZW4pCi0rCQl7Ci0rCQkgICsrX19sZW47Ci0rCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOwotKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKLSsJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKLSsJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOwotKwkJfQotKwkgICAgICBlbHNlCi0rCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOwotKwkgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7Ci0rCi0rCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOwotKwkgICAgICBpZiAoIV9fbnBvc24pCi0rCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7Ci0rCSAgICAgIGVsc2UgaWYgKF9fbGVuKQotKwkJewotKwkJICArK19fbGVuOwotKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKLSsJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xlbl07Ci0rCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7Ci0rCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKLSsJCX0KLSsJICAgICAgZWxzZQotKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKLSsJICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOwotKwotKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgotKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsKLSsJICAgICAgaWYgKF9fbGVuKQotKwkJewotKwkJICArK19fbGVuOwotKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKLSsJCSAgd2NoYXJfdCogX193Y3MgPSBuZXcgd2NoYXJfdFtfX2xlbl07Ci0rCQkgIG1ic3J0b3djcyhfX3djcywgJl9fY2N1cnIsIF9fbGVuLCAmX19zdGF0ZSk7Ci0rCQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX193Y3M7Ci0rCQl9Ci0rCSAgICAgIGVsc2UKLSsJCV9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOwotKwkgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKLSsJICAgIH0KLSsJICBjYXRjaCAoLi4uKQotKwkgICAgewotKwkgICAgICBkZWxldGUgX01fZGF0YTsKLSsJICAgICAgX01fZGF0YSA9IDA7Ci0rCSAgICAgIGRlbGV0ZSBfX3djc19wczsKLSsJICAgICAgZGVsZXRlIF9fd2NzX25zOwotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSsjZWxzZQotKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7Ci0rCSAgICAgIGZyZWUoX19vbGQpOwotKyNlbmRpZgotKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKLSsJICAgIH0KLSsKLSsJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX0ZSQUNfRElHSVRTLAotKwkJCQkJCSAgICAgIF9fY2xvYykpOwotKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKLSsJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOwotKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKLSsJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAotKwkJCQkJCQlfX3Bwb3NuKTsKLSsJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9DU19QUkVDRURFUywgX19jbG9jKSk7Ci0rCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKLSsJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAotKwkJCQkJCQlfX25wb3NuKTsKLSsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKwkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSsjZWxzZQotKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKLSsJICBmcmVlKF9fb2xkKTsKLSsjZW5kaWYKLSsJfQotKyAgICB9Ci0rCi0rICB0ZW1wbGF0ZTw+Ci0rICB2b2lkCi0rICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rCQkJCQkJICAgICAgIGNvbnN0IGNoYXIqKQotKyNlbHNlCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbmFtZSkKLSsjZW5kaWYKLSsgIHsKLSsgICAgaWYgKCFfTV9kYXRhKQotKyAgICAgIF9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIGZhbHNlPjsKLSsKLSsgICAgaWYgKCFfX2Nsb2MpCi0rCXsKLSsJICAvLyAiQyIgbG9jYWxlCi0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7Ci0rCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKLSsgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7Ci0rCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7Ci0rCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7Ci0rCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKLSsJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOwotKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7Ci0rCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7Ci0rCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKLSsJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOwotKwotKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgotKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCi0rCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KLSsJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7Ci0rCX0KLSsgICAgICBlbHNlCi0rCXsKLSsJICAvLyBOYW1lZCBsb2NhbGUuCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKLSsjZWxzZQotKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgotKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKLSsJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOwotKyNlbmRpZgotKwotKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQotKyNlbmRpZgotKyNpZmRlZiBfX1VDTElCQ19fCi0rIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOwotKyMgZWxzZQotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7Ci0rCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKLSsjIGVuZGlmCi0rI2Vsc2UKLSsgICAgICAgICAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OwotKwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7Ci0rI2VuZGlmCi0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7Ci0rICAgICAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOwotKwotKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOwotKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOwotKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19DVVJSRU5DWV9TWU1CT0wsIF9fY2xvYyk7Ci0rCi0rCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOwotKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKLSsJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKLSsJICB0cnkKLSsgICAgICAgICAgICB7Ci0rICAgICAgICAgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKLSsgICAgICAgICAgICAgIHNpemVfdCBfX2xlbjsKLSsgICAgICAgICAgICAgIF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOwotKyAgICAgICAgICAgICAgaWYgKF9fbGVuKQotKyAgICAgICAgICAgICAgICB7Ci0rCQkgICsrX19sZW47Ci0rCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOwotKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKLSsJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKLSsJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOwotKwkJfQotKwkgICAgICBlbHNlCi0rCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOwotKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOwotKwotKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NuZWdzaWduKTsKLSsJICAgICAgaWYgKCFfX25wb3NuKQotKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiKCkiOwotKwkgICAgICBlbHNlIGlmIChfX2xlbikKLSsJCXsKLSsJCSAgKytfX2xlbjsKLSsJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7Ci0rCQkgIF9fd2NzX25zID0gbmV3IHdjaGFyX3RbX19sZW5dOwotKwkJICBtYnNydG93Y3MoX193Y3NfbnMsICZfX2NuZWdzaWduLCBfX2xlbiwgJl9fc3RhdGUpOwotKwkJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX193Y3NfbnM7Ci0rCQl9Ci0rCSAgICAgIGVsc2UKLSsJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7Ci0rICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7Ci0rCi0rCSAgICAgIC8vIF9JbnRsID09IHRydWUuCi0rCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOwotKwkgICAgICBpZiAoX19sZW4pCi0rCQl7Ci0rCQkgICsrX19sZW47Ci0rCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOwotKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKLSsJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKLSsJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKLSsJCX0KLSsJICAgICAgZWxzZQotKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7Ci0rICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKLSsJICAgIH0KLSsgICAgICAgICAgY2F0Y2ggKC4uLikKLSsJICAgIHsKLSsJICAgICAgZGVsZXRlIF9NX2RhdGE7Ci0rICAgICAgICAgICAgICBfTV9kYXRhID0gMDsKLSsJICAgICAgZGVsZXRlIF9fd2NzX3BzOwotKwkgICAgICBkZWxldGUgX193Y3NfbnM7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOwotKyNlbHNlCi0rCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKLSsJICAgICAgZnJlZShfX29sZCk7Ci0rI2VuZGlmCi0rICAgICAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKLSsJICAgIH0KLSsKLSsJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOwotKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOwotKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKLSsJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKLSsJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAotKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bwb3NuKTsKLSsJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKLSsJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7Ci0rCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKLSsJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ucG9zbik7Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsJICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2Vsc2UKLSsJICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7Ci0rCSAgZnJlZShfX29sZCk7Ci0rI2VuZGlmCi0rCX0KLSsgICAgfQotKwotKyAgdGVtcGxhdGU8PgotKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCi0rICAgIHsKLSsgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQotKwlkZWxldGUgW10gX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsKLSsgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCi0rICAgICAgICAgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkKLSsJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247Ci0rICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpCi0rCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsKLSsgICAgICBkZWxldGUgX01fZGF0YTsKLSsgICAgfQotKwotKyAgdGVtcGxhdGU8PgotKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQotKyAgICB7Ci0rICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSkKLSsJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247Ci0rICAgICAgaWYgKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQotKyAgICAgICAgICAmJiB3Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9IDApCi0rCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOwotKyAgICAgIGlmIChfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQotKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7Ci0rICAgICAgZGVsZXRlIF9NX2RhdGE7Ci0rICAgIH0KLSsjZW5kaWYKLSt9Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi44ODNlYzFhCi0tLS0gL2Rldi9udWxsCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi1AQCAtMCwwICsxLDE2MCBAQAotKy8vIHN0ZDo6bnVtcHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KLSsKLSsvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rLy8KLSsvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCi0rLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCi0rLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSsvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSsvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0rLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAotKy8vIFVTQS4KLSsKLSsvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKLSsvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCi0rLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKLSsvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKLSsvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKLSsvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0rCi0rLy8KLSsvLyBJU08gQysrIDE0ODgyOiAyMi4yLjMuMS4yICBudW1wdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucwotKy8vCi0rCi0rLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KLSsKLSsjZGVmaW5lIF9MSUJDCi0rI2luY2x1ZGUgPGxvY2FsZT4KLSsjdW5kZWYgX0xJQkMKLSsjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KLSsKLSsjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSsjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKLSsjZW5kaWYKLSsjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKLSsjZW5kaWYKLSsKLStuYW1lc3BhY2Ugc3RkCi0rewotKyAgdGVtcGxhdGU8PgotKyAgICB2b2lkCi0rICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQotKyAgICB7Ci0rICAgICAgaWYgKCFfTV9kYXRhKQotKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8Y2hhcj47Ci0rCi0rICAgICAgaWYgKCFfX2Nsb2MpCi0rCXsKLSsJICAvLyAiQyIgbG9jYWxlCi0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKLSsKLSsJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOwotKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7Ci0rCi0rCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpCi0rCSAgICBfTV9kYXRhLT5fTV9hdG9tc19vdXRbX19pXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX291dFtfX2ldOwotKwotKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQotKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal07Ci0rCX0KLSsgICAgICBlbHNlCi0rCXsKLSsJICAvLyBOYW1lZCBsb2NhbGUuCi0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKERFQ0lNQUxfUE9JTlQsCi0rCQkJCQkJCV9fY2xvYykpOwotKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChUSE9VU0FORFNfU0VQLAotKwkJCQkJCQlfX2Nsb2MpKTsKLSsKLSsJICAvLyBDaGVjayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBncm91cGluZy4KLSsJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSAnXDAnKQotKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKLSsJICBlbHNlCi0rCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChHUk9VUElORywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKLSsJfQotKwotKyAgICAgIC8vIE5COiBUaGVyZSBpcyBubyB3YXkgdG8gZXh0YWN0IHRoaXMgaW5mbyBmcm9tIHBvc2l4IGxvY2FsZXMuCi0rICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woWUVTU1RSLCBfX2Nsb2MpOwotKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lID0gInRydWUiOwotKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lX3NpemUgPSA0OwotKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChOT1NUUiwgX19jbG9jKTsKLSsgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWUgPSAiZmFsc2UiOwotKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKLSsgICAgfQotKwotKyAgdGVtcGxhdGU8PgotKyAgICBudW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCkKLSsgICAgeyBkZWxldGUgX01fZGF0YTsgfQotKwotKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAotKyAgdGVtcGxhdGU8PgotKyAgICB2b2lkCi0rICAgIG51bXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQotKyAgICB7Ci0rICAgICAgaWYgKCFfTV9kYXRhKQotKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8d2NoYXJfdD47Ci0rCi0rICAgICAgaWYgKCFfX2Nsb2MpCi0rCXsKLSsJICAvLyAiQyIgbG9jYWxlCi0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKLSsKLSsJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKLSsKLSsJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KLSsJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKLSsJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0KLSsJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV0pOwotKwotKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQotKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9Ci0rCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal0pOwotKwl9Ci0rICAgICAgZWxzZQotKwl7Ci0rCSAgLy8gTmFtZWQgbG9jYWxlLgotKwkgIC8vIE5COiBJbiB0aGUgR05VIG1vZGVsIHdjaGFyX3QgaXMgYWx3YXlzIDMyIGJpdCB3aWRlLgotKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OwotKwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKLSsKLSsJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKLSsJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7Ci0rCSAgZWxzZQotKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woR1JPVVBJTkcsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7Ci0rCX0KLSsKLSsgICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3NpeCBsb2NhbGVzLgotKyAgICAgIC8vIF9NX3RydWVuYW1lID0gX19ubF9sYW5naW5mb19sKFlFU1NUUiwgX19jbG9jKTsKLSsgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZSA9IEwidHJ1ZSI7Ci0rICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7Ci0rICAgICAgLy8gX01fZmFsc2VuYW1lID0gX19ubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOwotKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZSA9IEwiZmFsc2UiOwotKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKLSsgICAgfQotKwotKyAgdGVtcGxhdGU8PgotKyAgICBudW1wdW5jdDx3Y2hhcl90Pjo6fm51bXB1bmN0KCkKLSsgICAgeyBkZWxldGUgX01fZGF0YTsgfQotKyAjZW5kaWYKLSt9Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi5lMDcwN2Q3Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCi1AQCAtMCwwICsxLDQwNiBAQAotKy8vIHN0ZDo6dGltZV9nZXQsIHN0ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCi0rCi0rLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKy8vCi0rLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQotKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQotKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0rLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0rLy8gYW55IGxhdGVyIHZlcnNpb24uCi0rCi0rLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLSsvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSsvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKLSsvLyBVU0EuCi0rCi0rLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCi0rLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQotKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCi0rLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCi0rLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCi0rLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotKwotKy8vCi0rLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IHZpcnR1YWwgZnVuY3Rpb25zCi0rLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IHZpcnR1YWwgZnVuY3Rpb25zCi0rLy8KLSsKLSsvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgotKwotKyNpbmNsdWRlIDxsb2NhbGU+Ci0rI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi0rI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0Ci0rI2VuZGlmCi0rI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCi0rI2VuZGlmCi0rCi0rbmFtZXNwYWNlIHN0ZAotK3sKLSsgIHRlbXBsYXRlPD4KLSsgICAgdm9pZAotKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6Ci0rICAgIF9NX3B1dChjaGFyKiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3QgY2hhciogX19mb3JtYXQsCi0rCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdAotKyAgICB7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3N0cmZ0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCi0rCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOwotKyNlbHNlCi0rICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOwotKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKLSsgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdHJmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7Ci0rICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOwotKyAgICAgIGZyZWUoX19vbGQpOwotKyNlbmRpZgotKyAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgotKyAgICAgIGlmIChfX2xlbiA9PSAwKQotKwlfX3NbMF0gPSAnXDAnOwotKyAgICB9Ci0rCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIHZvaWQKLSsgICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQotKyAgICB7Ci0rICAgICAgaWYgKCFfTV9kYXRhKQotKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPGNoYXI+OwotKwotKyAgICAgIGlmICghX19jbG9jKQotKwl7Ci0rCSAgLy8gIkMiIGxvY2FsZQotKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOwotKwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gIiVtLyVkLyV5IjsKLSsJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSAiJW0vJWQvJXkiOwotKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gIiVIOiVNOiVTIjsKLSsJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSAiJUg6JU06JVMiOwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9ICIiOwotKwkgIF9NX2RhdGEtPl9NX2FtID0gIkFNIjsKLSsJICBfTV9kYXRhLT5fTV9wbSA9ICJQTSI7Ci0rCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gIiI7Ci0rCi0rCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KLSsJICBfTV9kYXRhLT5fTV9kYXkxID0gIlN1bmRheSI7Ci0rCSAgX01fZGF0YS0+X01fZGF5MiA9ICJNb25kYXkiOwotKwkgIF9NX2RhdGEtPl9NX2RheTMgPSAiVHVlc2RheSI7Ci0rCSAgX01fZGF0YS0+X01fZGF5NCA9ICJXZWRuZXNkYXkiOwotKwkgIF9NX2RhdGEtPl9NX2RheTUgPSAiVGh1cnNkYXkiOwotKwkgIF9NX2RhdGEtPl9NX2RheTYgPSAiRnJpZGF5IjsKLSsJICBfTV9kYXRhLT5fTV9kYXk3ID0gIlNhdHVyZGF5IjsKLSsKLSsJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgotKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gIlN1biI7Ci0rCSAgX01fZGF0YS0+X01fYWRheTIgPSAiTW9uIjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5MyA9ICJUdWUiOwotKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gIldlZCI7Ci0rCSAgX01fZGF0YS0+X01fYWRheTUgPSAiVGh1IjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NiA9ICJGcmkiOwotKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gIlNhdCI7Ci0rCi0rCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KLSsJICBfTV9kYXRhLT5fTV9tb250aDAxID0gIkphbnVhcnkiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSAiRmVicnVhcnkiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSAiTWFyY2giOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSAiQXByaWwiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSAiTWF5IjsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gIkp1bmUiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSAiSnVseSI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwOCA9ICJBdWd1c3QiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSAiU2VwdGVtYmVyIjsKLSsJICBfTV9kYXRhLT5fTV9tb250aDEwID0gIk9jdG9iZXIiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSAiTm92ZW1iZXIiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSAiRGVjZW1iZXIiOwotKwotKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9ICJKYW4iOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gIkZlYiI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSAiTWFyIjsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9ICJBcHIiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gIk1heSI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSAiSnVuIjsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9ICJKdWwiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gIkF1ZyI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSAiU2VwIjsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9ICJPY3QiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gIk5vdiI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSAiRGVjIjsKLSsJfQotKyAgICAgIGVsc2UKLSsJewotKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7Ci0rCi0rCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9GTVQsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChUX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX1RfRk1ULCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9UX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfRF9UX0ZNVCwKLSsJCQkJCQkJICAgICBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2FtID0gX19ubF9sYW5naW5mb19sKEFNX1NUUiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9wbSA9IF9fbmxfbGFuZ2luZm9fbChQTV9TVFIsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1UX0FNUE0sIF9fY2xvYyk7Ci0rCi0rCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KLSsJICBfTV9kYXRhLT5fTV9kYXkxID0gX19ubF9sYW5naW5mb19sKERBWV8xLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBfX25sX2xhbmdpbmZvX2woREFZXzIsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXk0ID0gX19ubF9sYW5naW5mb19sKERBWV80LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBfX25sX2xhbmdpbmZvX2woREFZXzUsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXk3ID0gX19ubF9sYW5naW5mb19sKERBWV83LCBfX2Nsb2MpOwotKwotKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCi0rCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8yLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gX19ubF9sYW5naW5mb19sKEFCREFZXzMsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV81LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzYsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNywgX19jbG9jKTsKLSsKLSsJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDAzID0gX19ubF9sYW5naW5mb19sKE1PTl8zLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX25sX2xhbmdpbmZvX2woTU9OXzQsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fbmxfbGFuZ2luZm9fbChNT05fNSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gX19ubF9sYW5naW5mb19sKE1PTl82LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX25sX2xhbmdpbmZvX2woTU9OXzcsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fbmxfbGFuZ2luZm9fbChNT05fOCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gX19ubF9sYW5naW5mb19sKE1PTl85LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEwLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzExLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEyLCBfX2Nsb2MpOwotKwotKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzIsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl80LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzUsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl83LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzgsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMiwgX19jbG9jKTsKLSsJfQotKyAgICB9Ci0rCi0rI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIHZvaWQKLSsgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46OgotKyAgICBfTV9wdXQod2NoYXJfdCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IHdjaGFyX3QqIF9fZm9ybWF0LAotKwkgICBjb25zdCB0bSogX190bSkgY29uc3QKLSsgICAgewotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICAgICAgX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QpOwotKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKLSsJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7Ci0rI2Vsc2UKLSsgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7Ci0rICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOwotKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHdjc2Z0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKLSsgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7Ci0rICAgICAgZnJlZShfX29sZCk7Ci0rI2VuZGlmCi0rICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCi0rICAgICAgaWYgKF9fbGVuID09IDApCi0rCV9fc1swXSA9IEwnXDAnOwotKyAgICB9Ci0rCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIHZvaWQKLSsgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQotKyAgICB7Ci0rICAgICAgaWYgKCFfTV9kYXRhKQotKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPHdjaGFyX3Q+OwotKwotKyN3YXJuaW5nIHdpZGUgdGltZSBzdHVmZgotKy8vICAgICAgIGlmICghX19jbG9jKQotKwl7Ci0rCSAgLy8gIkMiIGxvY2FsZQotKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOwotKwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gTCIlbS8lZC8leSI7Ci0rCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gTCIlbS8lZC8leSI7Ci0rCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKLSsJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKLSsJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gTCIiOwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gTCIiOwotKwkgIF9NX2RhdGEtPl9NX2FtID0gTCJBTSI7Ci0rCSAgX01fZGF0YS0+X01fcG0gPSBMIlBNIjsKLSsJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBMIiI7Ci0rCi0rCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KLSsJICBfTV9kYXRhLT5fTV9kYXkxID0gTCJTdW5kYXkiOwotKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBMIk1vbmRheSI7Ci0rCSAgX01fZGF0YS0+X01fZGF5MyA9IEwiVHVlc2RheSI7Ci0rCSAgX01fZGF0YS0+X01fZGF5NCA9IEwiV2VkbmVzZGF5IjsKLSsJICBfTV9kYXRhLT5fTV9kYXk1ID0gTCJUaHVyc2RheSI7Ci0rCSAgX01fZGF0YS0+X01fZGF5NiA9IEwiRnJpZGF5IjsKLSsJICBfTV9kYXRhLT5fTV9kYXk3ID0gTCJTYXR1cmRheSI7Ci0rCi0rCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KLSsJICBfTV9kYXRhLT5fTV9hZGF5MSA9IEwiU3VuIjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5MiA9IEwiTW9uIjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5MyA9IEwiVHVlIjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NCA9IEwiV2VkIjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NSA9IEwiVGh1IjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NiA9IEwiRnJpIjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NyA9IEwiU2F0IjsKLSsKLSsJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBMIkphbnVhcnkiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBMIkZlYnJ1YXJ5IjsKLSsJICBfTV9kYXRhLT5fTV9tb250aDAzID0gTCJNYXJjaCI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IEwiQXByaWwiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBMIk1heSI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IEwiSnVuZSI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IEwiSnVseSI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IEwiQXVndXN0IjsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gTCJTZXB0ZW1iZXIiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBMIk9jdG9iZXIiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBMIk5vdmVtYmVyIjsKLSsJICBfTV9kYXRhLT5fTV9tb250aDEyID0gTCJEZWNlbWJlciI7Ci0rCi0rCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gTCJKYW4iOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gTCJGZWIiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gTCJNYXIiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gTCJBcHIiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gTCJNYXkiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gTCJKdW4iOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gTCJKdWwiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gTCJBdWciOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gTCJTZXAiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gTCJPY3QiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gTCJOb3YiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gTCJEZWMiOwotKwl9Ci0rI2lmIDAKLSsgICAgICBlbHNlCi0rCXsKLSsJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOwotKwotKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90ICpfX3c7IH0gX191OwotKwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dUX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9UX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX1RfRk1ULCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfRF9UX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FNX1NUUiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbSA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1BNX1NUUiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9wbSA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1UX0FNUE0sIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX191Ll9fdzsKLSsKLSsJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXkxID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzIsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8zLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXk0ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzUsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV82LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXk3ID0gX191Ll9fdzsKLSsKLSsJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8xLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzMsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV80LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzYsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV83LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX191Ll9fdzsKLSsKLSsJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDAxID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzIsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8zLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzUsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl82LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzgsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl85LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTAsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDExID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEyLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX3UuX193OwotKwotKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzIsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8zLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzUsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl82LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzgsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl85LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTAsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEyLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX191Ll9fdzsKLSsJfQotKyNlbmRpZiAvLyAwCi0rICAgIH0KLSsjZW5kaWYKLSt9Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uYmE4ZTg1OAotLS0tIC9kZXYvbnVsbAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCi1AQCAtMCwwICsxLDY4IEBACi0rLy8gc3RkOjp0aW1lX2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KLSsKLSsvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rLy8KLSsvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCi0rLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCi0rLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSsvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSsvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0rLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAotKy8vIFVTQS4KLSsKLSsvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKLSsvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCi0rLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKLSsvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKLSsvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKLSsvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0rCi0rLy8KLSsvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgZnVuY3Rpb25zCi0rLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IGZ1bmN0aW9ucwotKy8vCi0rCi0rLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KLSsKLSsgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KLSsgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcykKLSsgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCi0rICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKLSsgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9Ci0rCi0rICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+Ci0rICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY2FjaGVfdHlwZSogX19jYWNoZSwgc2l6ZV90IF9fcmVmcykKLSsgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKF9fY2FjaGUpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCi0rICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKLSsgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9Ci0rCi0rICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+Ci0rICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCi0rCQkJCSAgICAgc2l6ZV90IF9fcmVmcykKLSsgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCi0rICAgIF9NX25hbWVfdGltZXB1bmN0KF9fcykKLSsgICAgewotKyAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOwotKyAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOwotKyAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7Ci0rICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsKLSsgICAgfQotKwotKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgotKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+Ojp+X190aW1lcHVuY3QoKQotKyAgICB7Ci0rICAgICAgaWYgKF9NX25hbWVfdGltZXB1bmN0ICE9IF9TX2dldF9jX25hbWUoKSkKLSsJZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OwotKyAgICAgIGRlbGV0ZSBfTV9kYXRhOwotKyAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsKLSsgICAgfQotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUgYi9saWJzdGRjKystdjMvY29uZmlndXJlCi1pbmRleCA4Y2Q0Yzc2Li4yMTcwMTJlIDEwMDc1NQotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQotQEAgLTE1OTE4LDYgKzE1OTE4LDkgQEAgZmkKLSAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCi0gICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgotICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgotKyAgICAgICotdWNsaWJjKikKLSsgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCi0rICAgICAgICA7OwotICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQotIAllbmFibGVfY2xvY2FsZV9mbGFnPWdudQotIAk7OwotQEAgLTE2MTk2LDYgKzE2MTk5LDc4IEBAICRhc19lY2hvICJuZXdsaWIiID4mNjsgfQotICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKLSAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCi0gICAgICAgOzsKLSsgICAgdWNsaWJjKQotKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1Y2xpYmMiID4mNQotKyRhc19lY2hvICJ1Y2xpYmMiID4mNjsgfQotKwotKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKLSsgICAgICAjIGxhbmd1YWdlcy4KLSsgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAotKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKLSsKLSsgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgotKyAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXNnZm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLStzZXQgZHVtbXkgbXNnZm10OyBhY193b3JkPSQyCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jaGVja19tc2dmbXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgotKyAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9IiRjaGVja19tc2dmbXQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotK2Vsc2UKLSthc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0rZm9yIGFzX2RpciBpbiAkUEFUSAotK2RvCi0rICBJRlM9JGFzX3NhdmVfSUZTCi0rICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSsgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSsgICAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9InllcyIKLSsgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0rICAgIGJyZWFrIDIKLSsgIGZpCi0rZG9uZQotKyAgZG9uZQotK0lGUz0kYXNfc2F2ZV9JRlMKLSsKLSsgIHRlc3QgLXogIiRhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCIgJiYgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9Im5vIgotK2ZpCi0rZmkKLStjaGVja19tc2dmbXQ9JGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10Ci0raWYgdGVzdCAtbiAiJGNoZWNrX21zZ2ZtdCI7IHRoZW4KLSsgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY2hlY2tfbXNnZm10IiA+JjUKLSskYXNfZWNobyAiJGNoZWNrX21zZ2ZtdCIgPiY2OyB9Ci0rZWxzZQotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSskYXNfZWNobyAibm8iID4mNjsgfQotK2ZpCi0rCi0rCi0rICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KLSsgICAgICAgIFVTRV9OTFM9eWVzCi0rICAgICAgZmkKLSsgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KLSsgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKLSsgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKLSsgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKLSsgICAgICBkb25lCi0rCi0rCi0rCi0rICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKLSsgICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCi0rICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCi0rICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCi0rICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKLSsgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKLSsgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYwotKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCi0rICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi0rICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAotKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYwotKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAotKyAgICAgIDs7Ci0gICBlc2FjCi0gCi0gICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCi1pbmRleCAwNmI1ZDQ3Li43ZDNmODM1IDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKLSsrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCi1AQCAtMTAxLDcgKzEwMSw5IEBAIHVzaW5nIHN0ZDo6d21lbWNtcDsKLSB1c2luZyBzdGQ6OndtZW1jcHk7Ci0gdXNpbmcgc3RkOjp3bWVtbW92ZTsKLSB1c2luZyBzdGQ6OndtZW1zZXQ7Ci0rI2lmIF9HTElCQ1hYX0hBVkVfV0NTRlRJTUUKLSB1c2luZyBzdGQ6Ondjc2Z0aW1lOwotKyNlbmRpZgotIAotICNpZiBfR0xJQkNYWF9VU0VfQzk5Ci0gdXNpbmcgc3RkOjp3Y3N0b2xkOwotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhciBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgotaW5kZXggYWExYjJmYS4uNDVjNDYxNyAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgotKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCi1AQCAtMTc1LDcgKzE3NSw5IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCi0gICB1c2luZyA6Ondjc2NvbGw7Ci0gICB1c2luZyA6Ondjc2NweTsKLSAgIHVzaW5nIDo6d2NzY3NwbjsKLSsjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQotICAgdXNpbmcgOjp3Y3NmdGltZTsKLSsjZW5kaWYKLSAgIHVzaW5nIDo6d2NzbGVuOwotICAgdXNpbmcgOjp3Y3NuY2F0OwotICAgdXNpbmcgOjp3Y3NuY21wOwotLS0gCi0yLjYuMwotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWE4NmE0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjU3ICswLDAgQEAKLUZyb20gNzJhMWE0YWYzYzE4NjI3ZjU5YWE1YmExZjc1M2E4OTAxMWI0ZTRmMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQyOjM2ICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMDUvNDZdIHVjbGliYy1sb2NhbGUtbm9fX3gKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggICAgICB8IDQ1ICsrKysrKysrKysrKysrKysrKysrKysKLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgICAgICB8IDE0IC0tLS0tLS0KLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8ICAxICsKLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjICAgICAgICB8ICA3IC0tLS0KLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyB8ICA3IC0tLS0KLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyAgICAgICB8ICA3ICstLS0KLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oICAgICAgICB8IDE4ICsrKystLS0tLQotIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgIDQgLS0KLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8ICAzIC0tCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyAgfCAgMyAtLQotIDEwIGZpbGVzIGNoYW5nZWQsIDU1IGluc2VydGlvbnMoKyksIDU0IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCi1pbmRleCAyYWUzZTRhLi5lNzRmZGRmIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKLUBAIC02MCw0ICs2MCw0OSBAQCBleHRlcm4gIkMiIF9fdHlwZW9mKHdjc3hmcm1fbCkgX193Y3N4ZnJtX2w7Ci0gZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3R5cGVfbCkgX193Y3R5cGVfbDsKLSAjZW5kaWYKLSAKLSsjIGRlZmluZSBfX25sX2xhbmdpbmZvX2wgbmxfbGFuZ2luZm9fbAotKyMgZGVmaW5lIF9fc3RyY29sbF9sIHN0cmNvbGxfbAotKyMgZGVmaW5lIF9fc3RyZnRpbWVfbCBzdHJmdGltZV9sCi0rIyBkZWZpbmUgX19zdHJ0b2RfbCBzdHJ0b2RfbAotKyMgZGVmaW5lIF9fc3RydG9mX2wgc3RydG9mX2wKLSsjIGRlZmluZSBfX3N0cnRvbGRfbCBzdHJ0b2xkX2wKLSsjIGRlZmluZSBfX3N0cnhmcm1fbCBzdHJ4ZnJtX2wKLSsjIGRlZmluZSBfX25ld2xvY2FsZSBuZXdsb2NhbGUKLSsjIGRlZmluZSBfX2ZyZWVsb2NhbGUgZnJlZWxvY2FsZQotKyMgZGVmaW5lIF9fZHVwbG9jYWxlIGR1cGxvY2FsZQotKyMgZGVmaW5lIF9fdXNlbG9jYWxlIHVzZWxvY2FsZQotKwotKyMgaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKLSsjICBkZWZpbmUgX19pc3djdHlwZV9sIGlzd2N0eXBlX2wKLSsjICBkZWZpbmUgX190b3dsb3dlcl9sIHRvd2xvd2VyX2wKLSsjICBkZWZpbmUgX190b3d1cHBlcl9sIHRvd3VwcGVyX2wKLSsjICBkZWZpbmUgX193Y3Njb2xsX2wgd2NzY29sbF9sCi0rIyAgZGVmaW5lIF9fd2NzZnRpbWVfbCB3Y3NmdGltZV9sCi0rIyAgZGVmaW5lIF9fd2NzeGZybV9sIHdjc3hmcm1fbAotKyMgIGRlZmluZSBfX3djdHlwZV9sIHdjdHlwZV9sCi0rIyBlbmRpZgotKwotKyNlbHNlCi0rIyBkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgIG5sX2xhbmdpbmZvKChOKSkKLSsjIGRlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQotKyMgZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCi0rIyBkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKLSsjIGRlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKLSsjIGRlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCi0rIyB3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/Ci0rIyBkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKLSsjIGRlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCi0rIyBkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQotKy8vIyBkZWZpbmUgX191c2Vsb2NhbGUgPwotKy8vCi0rIyBpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAotKyMgIGRlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCi0rIyAgZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgICB0b3dsb3dlcigoQykpCi0rIyAgZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgICB0b3d1cHBlcigoQykpCi0rIyAgZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCi0rLy8jICBkZWZpbmUgX193Y3NmdGltZV9sKFMsIE0sIEYsIFQsIEwpICB3Y3NmdGltZSgoUyksIChNKSwgKEYpLCAoVCkpCi0rIyAgZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKLSsjICBkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgIHdjdHlwZSgoUykpCi0rIyBlbmRpZgotKwotICNlbmRpZiAvLyBHTElCQyAyLjMgYW5kIGxhdGVyCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCi1pbmRleCA1MDgxZGMxLi4yMTQzMGQwIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKLUBAIC0zOSwyMCArMzksNiBAQAotICNpbmNsdWRlIDxsYW5naW5mby5oPgotICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgotIAotLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotLSNkZWZpbmUgX19zdHJ0b2xfbChTLCBFLCBCLCBMKSAgICAgIHN0cnRvbCgoUyksIChFKSwgKEIpKQotLSNkZWZpbmUgX19zdHJ0b3VsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvdWwoKFMpLCAoRSksIChCKSkKLS0jZGVmaW5lIF9fc3RydG9sbF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b2xsKChTKSwgKEUpLCAoQikpCi0tI2RlZmluZSBfX3N0cnRvdWxsX2woUywgRSwgQiwgTCkgICAgc3RydG91bGwoKFMpLCAoRSksIChCKSkKLS0jZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCi0tI2RlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQotLSNkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCi0tI3dhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KLS0jZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCi0tI2RlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCi0tI2RlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCi0tI2VuZGlmCi0tCi0gbmFtZXNwYWNlIHN0ZAotIHsKLSAgIHRlbXBsYXRlPD4KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCi1pbmRleCBkYTA3YzFmLi40YmNhNWYxIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCi1AQCAtNjgsNiArNjgsNyBAQCBuYW1lc3BhY2UgX19nbnVfY3h4Ci0gewotICAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOwotIH0KLSsjZGVmaW5lIF9fdXNlbG9jYWxlIHVzZWxvY2FsZQotICNlbmRpZgotIAotIG5hbWVzcGFjZSBzdGQKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYwotaW5kZXggYzI2NjRhNy4uZWM1YzMyOSAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKLUBAIC0zNiwxMyArMzYsNiBAQAotICNpbmNsdWRlIDxsb2NhbGU+Ci0gI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+Ci0gCi0tI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0tI2RlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQotLSNkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQotLSNkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKLS0jZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKLS0jZW5kaWYKLS0KLSBuYW1lc3BhY2Ugc3RkCi0gewotICAgLy8gVGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFwcyBzaG91bGQKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCi1pbmRleCA3Mjk0ZTNhLi43YjEyODYxIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCi1AQCAtMzgsMTMgKzM4LDYgQEAKLSAjdW5kZWYgX0xJQkMKLSAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KLSAKLS0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLS0jZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgIHdjdHlwZSgoUykpCi0tI2RlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICB0b3d1cHBlcigoQykpCi0tI2RlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICB0b3dsb3dlcigoQykpCi0tI2RlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICBpc3djdHlwZSgoQyksIChNKSkKLS0jZW5kaWYKLS0KLSBuYW1lc3BhY2Ugc3RkCi0gewotICAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYwotaW5kZXggMTM1OTRkOS4uZDc2OTNiNCAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYwotQEAgLTM5LDEzICszOSwxMCBAQAotICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotICN3YXJuaW5nIGZpeCBnZXR0ZXh0IHN0dWZmCi0gI2VuZGlmCi0tI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCi0tZXh0ZXJuICJDIiBjaGFyICpfX2RjZ2V0dGV4dChjb25zdCBjaGFyICpkb21haW5uYW1lLAotLQkJCSAgICAgY29uc3QgY2hhciAqbXNnaWQsIGludCBjYXRlZ29yeSk7Ci0gI3VuZGVmIGdldHRleHQKLS0jZGVmaW5lIGdldHRleHQobXNnaWQpIF9fZGNnZXR0ZXh0KE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUykKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KLSsjZGVmaW5lIGdldHRleHQobXNnaWQpIGRjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCi0gI2Vsc2UKLS0jdW5kZWYgZ2V0dGV4dAotICNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQotICNlbmRpZgotIAotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCi1pbmRleCAxNDI0MDc4Li5kODlkYTMzIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAotQEAgLTM2LDE1ICszNiwxMSBAQAotICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotICN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcwotICNlbmRpZgotLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXwotLWV4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOwotLWV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAotLQkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOwotLSNlbHNlCi0tI3VuZGVmIF9fdGV4dGRvbWFpbgotLSN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCi0tI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQotLSNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKLSsjaWZuZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCi0rI3VuZGVmIHRleHRkb21haW4KLSsjdW5kZWYgYmluZHRleHRkb21haW4KLSsjZGVmaW5lIHRleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQotKyNkZWZpbmUgYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCi0gI2VuZGlmCi0gCi0gICAvLyBOb24tdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgotQEAgLTcwLDcgKzY2LDcgQEAgZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCi0gICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCi0gCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0Ci0gICAgIHsKLS0gICAgICBfX2JpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7Ci0rICAgICAgYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKLSAgICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsKLSAgICAgfQotIAotQEAgLTkwLDcgKzg2LDcgQEAgZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCi0gICAgIHsKLSAgICAgICAvLyBObyBlcnJvciBjaGVja2luZyBpcyBkb25lLCBhc3N1bWUgdGhlIGNhdGFsb2cgZXhpc3RzIGFuZCBjYW4KLSAgICAgICAvLyBiZSB1c2VkLgotLSAgICAgIF9fdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7Ci0rICAgICAgdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7Ci0gICAgICAgcmV0dXJuIDA7Ci0gICAgIH0KLSAKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCi1pbmRleCBhYTUyNzMxLi4yZTZmODBhIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCi1AQCAtNDMsMTAgKzQzLDYgQEAKLSAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKLSAjZW5kaWYKLSAKLS0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLS0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKLS0jZW5kaWYKLS0KLSBuYW1lc3BhY2Ugc3RkCi0gewotICAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKLWluZGV4IDg4M2VjMWEuLjJjNzA2NDIgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi1AQCAtNDEsOSArNDEsNiBAQAotICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAotICNlbmRpZgotLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQotLSNlbmRpZgotIAotIG5hbWVzcGFjZSBzdGQKLSB7Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKLWluZGV4IGUwNzA3ZDcuLmQ4NDhlZDUgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCi1AQCAtNDAsOSArNDAsNiBAQAotICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAotICNlbmRpZgotLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQotLSNlbmRpZgotIAotIG5hbWVzcGFjZSBzdGQKLSB7Ci0tLSAKLTIuNi4zCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdkYmU2OC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi1Gcm9tIGIxMjk4MzQ0ZjBjMjIxYzM4MmE5NWFmNjg5ZjdmM2VjZDg2NGY1MzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0NTo1NyArMDQwMAotU3ViamVjdDogW1BBVENIIDA2LzQ2XSB1Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeAotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLS0tLQotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIHwgIDQgKystLQotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgIHwgMTMgKysrKysrKysrKysrKwotIDIgZmlsZXMgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKLWluZGV4IDJlNmY4MGEuLjMxZWJiOWYgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYwotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKLUBAIC00MDEsNyArNDAxLDcgQEAgbmFtZXNwYWNlIHN0ZAotICMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7Ci0gCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKLS0jIGVsc2UKLSsjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KLSAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOwotIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7Ci0gIyBlbmRpZgotQEAgLTU1Niw3ICs1NTYsNyBAQCBuYW1lc3BhY2Ugc3RkCi0gIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0gCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKLSAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOwotLSMgZWxzZQotKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXwotIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7Ci0gCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKLSAjIGVuZGlmCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKLWluZGV4IDJjNzA2NDIuLmQ1Yzg5NjEgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi1AQCAtMTI3LDEyICsxMjcsMjUgQEAgbmFtZXNwYWNlIHN0ZAotIAl7Ci0gCSAgLy8gTmFtZWQgbG9jYWxlLgotIAkgIC8vIE5COiBJbiB0aGUgR05VIG1vZGVsIHdjaGFyX3QgaXMgYWx3YXlzIDMyIGJpdCB3aWRlLgotKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBudW1lcmljCi0rI2VuZGlmCi0rI2lmZGVmIF9fVUNMSUJDX18KLSsjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOwotKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7Ci0rIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCi0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOwotKyMgZW5kaWYKLSsjZWxzZQotIAkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7Ci0gCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOwotIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OwotIAotIAkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKLSAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKLSsjZW5kaWYKLSAKLSAJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKLSAJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7Ci0tLSAKLTIuNi4zCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RlNzQ5OS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1NDIgKzAsMCBAQAotRnJvbSBlOWQ3Y2I2Mjc0MWMyMmQ2NjdmZTU2ZTk4ZDUwNzUzZDg5YWVmZGMzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDY6NTggKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAwNy80Nl0gdWNsaWJjLWxvY2FsZS11cGRhdGUKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggICAgICB8ICAzICsKLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgICAgICB8IDc0ICsrKysrKysrKystLS0tLS0tLS0tLS0KLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8IDQyICsrKysrKy0tLS0tLQotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgNTEgKysrKysrKysrKystLS0tCi0gLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAxMiArKy0tCi0gLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgICAgICAgfCAzNCArKysrKystLS0tCi0gLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgICAgICAgfCAgNSArKwotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgMTggKysrKy0tCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgfCAxNyArKystLQotIDkgZmlsZXMgY2hhbmdlZCwgMTU4IGluc2VydGlvbnMoKyksIDk4IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCi1pbmRleCBlNzRmZGRmLi45NzFhNmI0IDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKLUBAIC0zMSw2ICszMSw5IEBACi0gCi0gI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+Ci0gI2luY2x1ZGUgPGNsb2NhbGU+Ci0rI2luY2x1ZGUgPGNzdGRsaWI+Ci0rI2luY2x1ZGUgPGNzdHJpbmc+Ci0rI2luY2x1ZGUgPGNzdGRkZWY+Ci0gCi0gI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi0gI3dhcm5pbmcgY2xlYW4gdGhpcyB1cAotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwotaW5kZXggMjE0MzBkMC4uMWI5ZDhlMSAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCi1AQCAtMzksMjMgKzM5LDIwIEBACi0gI2luY2x1ZGUgPGxhbmdpbmZvLmg+Ci0gI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+Ci0gCi0tbmFtZXNwYWNlIHN0ZAotLXsKLStfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQotKwotICAgdGVtcGxhdGU8PgotICAgICB2b2lkCi0gICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZmxvYXQmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAotIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQotICAgICB7Ci0tICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCi0tCXsKLS0JICBjaGFyKiBfX3Nhbml0eTsKLS0JICBlcnJubyA9IDA7Ci0tCSAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKLS0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCi0tCSAgICBfX3YgPSBfX2Y7Ci0tCSAgZWxzZQotLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7Ci0tCX0KLSsgICAgICBjaGFyKiBfX3Nhbml0eTsKLSsgICAgICBlcnJubyA9IDA7Ci0rICAgICAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKLSsgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKLSsJX192ID0gX19mOwotKyAgICAgIGVsc2UKLSsJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7Ci0gICAgIH0KLSAKLSAgIHRlbXBsYXRlPD4KLUBAIC02MywxNiArNjAsMTMgQEAgbmFtZXNwYWNlIHN0ZAotICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCi0gCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCi0gICAgIHsKLS0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKLS0JewotLQkgIGNoYXIqIF9fc2FuaXR5OwotLQkgIGVycm5vID0gMDsKLS0JICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKLS0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCi0tCSAgICBfX3YgPSBfX2Q7Ci0tCSAgZWxzZQotLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7Ci0tCX0KLSsgICAgICBjaGFyKiBfX3Nhbml0eTsKLSsgICAgICBlcnJubyA9IDA7Ci0rICAgICAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7Ci0rICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCi0rCV9fdiA9IF9fZDsKLSsgICAgICBlbHNlCi0rCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwotICAgICB9Ci0gCi0gICB0ZW1wbGF0ZTw+Ci1AQCAtODAsMTYgKzc0LDEzIEBAIG5hbWVzcGFjZSBzdGQKLSAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBsb25nIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCi0gCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCi0gICAgIHsKLS0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKLS0JewotLQkgIGNoYXIqIF9fc2FuaXR5OwotLQkgIGVycm5vID0gMDsKLS0JICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7Ci0tICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQotLQkgICAgX192ID0gX19sZDsKLS0JICBlbHNlCi0tCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKLS0JfQotKyAgICAgIGNoYXIqIF9fc2FuaXR5OwotKyAgICAgIGVycm5vID0gMDsKLSsgICAgICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7Ci0rICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCi0rCV9fdiA9IF9fbGQ7Ci0rICAgICAgZWxzZQotKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKLSAgICAgfQotIAotICAgdm9pZAotQEAgLTExMCwxNyArMTAxLDE4IEBAIG5hbWVzcGFjZSBzdGQKLSAgIHZvaWQKLSAgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQotICAgewotLSAgICBpZiAoX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQotKyAgICBpZiAoX19jbG9jICYmIF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKLSAgICAgICBfX2ZyZWVsb2NhbGUoX19jbG9jKTsKLSAgIH0KLSAKLSAgIF9fY19sb2NhbGUKLSAgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKLSAgIHsgcmV0dXJuIF9fZHVwbG9jYWxlKF9fY2xvYyk7IH0KLS19IC8vIG5hbWVzcGFjZSBzdGQKLSAKLS1uYW1lc3BhY2UgX19nbnVfY3h4Ci0tewotK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKLSsKLStfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQotKwotICAgY29uc3QgY2hhciogY29uc3QgY2F0ZWdvcnlfbmFtZXNbNiArIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTXSA9Ci0gICAgIHsKLSAgICAgICAiTENfQ1RZUEUiLAotQEAgLTEzOCw5ICsxMzAsMTEgQEAgbmFtZXNwYWNlIF9fZ251X2N4eAotICAgICAgICJMQ19JREVOVElGSUNBVElPTiIKLSAjZW5kaWYKLSAgICAgfTsKLS19Ci0gCi0tbmFtZXNwYWNlIHN0ZAotLXsKLStfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCi0rCi0rX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKLSsKLSAgIGNvbnN0IGNoYXIqIGNvbnN0KiBjb25zdCBsb2NhbGU6Ol9TX2NhdGVnb3JpZXMgPSBfX2dudV9jeHg6OmNhdGVnb3J5X25hbWVzOwotLX0gIC8vIG5hbWVzcGFjZSBzdGQKLSsKLStfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAotaW5kZXggNGJjYTVmMS4uNjRhNmQ0NiAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAotQEAgLTM5LDIxICszOSwyMyBAQAotICNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKLSAKLSAjaW5jbHVkZSA8Y3N0cmluZz4gICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnN0cmxlbgotLSNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c25wcmludGYgb3Igc3RkOjpzcHJpbnRmCi0rI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjp2c25wcmludGYgb3Igc3RkOjp2c3ByaW50ZgotICNpbmNsdWRlIDxjbG9jYWxlPgotICNpbmNsdWRlIDxsYW5naW5mby5oPgkJLy8gRm9yIGNvZGVjdnQKLSAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSAjd2FybmluZyBmaXggdGhpcwotICNlbmRpZgotLSNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KLSsjaWZkZWYgX0dMSUJDWFhfVVNFX0lDT05WCi0gI2luY2x1ZGUgPGljb252Lmg+CQkvLyBGb3IgY29kZWN2dCB1c2luZyBpY29udiwgaWNvbnZfdAotICNlbmRpZgotLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXwotLSNpbmNsdWRlIDxsaWJpbnRsLmg+IAkJLy8gRm9yIG1lc3NhZ2VzCi0rI2lmZGVmIEhBVkVfTElCSU5UTF9ICi0rI2luY2x1ZGUgPGxpYmludGwuaD4JCS8vIEZvciBtZXNzYWdlcwotICNlbmRpZgotKyNpbmNsdWRlIDxjc3RkYXJnPgotIAotICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotICN3YXJuaW5nIHdoYXQgaXMgX0dMSUJDWFhfQ19MT0NBTEVfR05VIGZvcgotKy8vIHBzbTogdXNlZCBpbiBvcy9nbnUtbGludXgvY3R5cGVfbm9uaW5saW5lLmgKLSAjZW5kaWYKLSAjZGVmaW5lIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSAxCi0gCi1AQCAtNzgsMjMgKzgwLDI1IEBAIG5hbWVzcGFjZSBzdGQKLSAjZWxzZQotICAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKLSAjZW5kaWYKLS0KLS0gIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIF9UdiB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKLS0gIC8vIHN0cmluZy4gIElmIHNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KLS0gIC8vIHRoZSB1bnNhZmUgc3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCi0rICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBkb3VibGUgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCi0rICAvLyBzdHJpbmcuICBJZiB2c25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bwotKyAgLy8gdGhlIHVuc2FmZSB2c3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCi0gICAvLyBiZSBhdm9pZGVkLgotLSAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgotLSAgICBpbnQKLS0gICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwKLS0JCSAgICAgY29uc3QgaW50IF9fc2l6ZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLAotLQkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwKLS0jaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KLS0JCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19wcmVjKQotKyAgICBpbmxpbmUgaW50Ci0rICAgIF9fY29udmVydF9mcm9tX3YoY29uc3QgX19jX2xvY2FsZSYKLSsjaWZuZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCi0rCV9fY2xvYyBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCi0rI2VuZGlmCi0rCQkgICAgICwKLSsJCSAgICAgY2hhciogX19vdXQsCi0rCQkgICAgIGNvbnN0IGludCBfX3NpemUsCi0rCQkgICAgIGNvbnN0IGNoYXIqIF9fZm10LCAuLi4pCi0gICAgIHsKLSsgICAgICB2YV9saXN0IF9fYXJnczsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KLSsKLSAgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX2Nsb2MpOwotICNlbHNlCi0tCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjKQotLSAgICB7Ci0gIyBpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KLSAgICAgICBjaGFyKiBfX29sZCA9IHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7Ci0gICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX29sZCkgKyAxXTsKLUBAIC0xMDMsNyArMTA3LDkgQEAgbmFtZXNwYWNlIHN0ZAotICMgZW5kaWYKLSAjZW5kaWYKLSAKLS0gICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7Ci0rICAgICAgdmFfc3RhcnQoX19hcmdzLCBfX2ZtdCk7Ci0rICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjp2c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fYXJncyk7Ci0rICAgICAgdmFfZW5kKF9fYXJncyk7Ci0gCi0gI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCi0gICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYwotaW5kZXggN2IxMjg2MS4uMTNlMDExZCAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYwotQEAgLTMzLDE2ICszMywyMCBAQAotIAotIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+Ci0gCi0rI2luY2x1ZGUgPGZlYXR1cmVzLmg+Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXwotICNkZWZpbmUgX0xJQkMKLSAjaW5jbHVkZSA8bG9jYWxlPgotICN1bmRlZiBfTElCQwotKyNlbHNlCi0rI2luY2x1ZGUgPGxvY2FsZT4KLSsjZW5kaWYKLSAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KLSAKLS1uYW1lc3BhY2Ugc3RkCi0tewotK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCi0rCi0gICAvLyBOQjogVGhlIG90aGVyIGN0eXBlPGNoYXI+IHNwZWNpYWxpemF0aW9ucyBhcmUgaW4gc3JjL2xvY2FsZS5jYyBhbmQKLSAgIC8vIHZhcmlvdXMgL2NvbmZpZy9vcy8qIGZpbGVzLgotLSAgdGVtcGxhdGU8PgotICAgICBjdHlwZV9ieW5hbWU8Y2hhcj46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCi0gICAgIDogY3R5cGU8Y2hhcj4oMCwgZmFsc2UsIF9fcmVmcykKLSAgICAgewotQEAgLTU3LDYgKzYxLDggQEAgbmFtZXNwYWNlIHN0ZAotICNlbmRpZgotIAl9Ci0gICAgIH0KLSsgICAgY3R5cGVfYnluYW1lPGNoYXI+Ojp+Y3R5cGVfYnluYW1lKCkKLSsgICAgeyB9Ci0gCi0gI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCi0gICBjdHlwZTx3Y2hhcl90Pjo6X193bWFza190eXBlCi1AQCAtMTM4LDE3ICsxNDQsMzMgQEAgbmFtZXNwYWNlIHN0ZAotICAgY3R5cGU8d2NoYXJfdD46OgotICAgZG9faXMobWFzayBfX20sIHdjaGFyX3QgX19jKSBjb25zdAotICAgewotLSAgICAvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgotLSAgICAvLyBsaWJyYXJ5IGZvciBibGFuay4KLSsgICAgLy8gVGhlIGNhc2Ugb2YgX19tID09IGN0eXBlX2Jhc2U6OnNwYWNlIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQsCi0rICAgIC8vIGR1ZSB0byBpdHMgdXNlIGluIG1hbnkgaXN0cmVhbSBmdW5jdGlvbnMuICBUaGVyZWZvcmUgd2UgZGVhbCB3aXRoCi0rICAgIC8vIGl0IGZpcnN0LCBleHBsb2l0aW5nIHRoZSBrbm93bGVkZ2UgdGhhdCBvbiBHTlUgc3lzdGVtcyBfTV9iaXRbNV0KLSsgICAgLy8gaXMgdGhlIG1hc2sgY29ycmVzcG9uZGluZyB0byBjdHlwZV9iYXNlOjpzcGFjZS4gIE5COiBhbiBlbmNvZGluZwotKyAgICAvLyBjaGFuZ2Ugd291bGQgbm90IGFmZmVjdCBjb3JyZWN0bmVzcyEKLSsKLSAgICAgYm9vbCBfX3JldCA9IGZhbHNlOwotLSAgICBjb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOwotLSAgICBmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCi0tICAgICAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0KLS0JICAmJiBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKLS0JewotLQkgIF9fcmV0ID0gdHJ1ZTsKLS0JICBicmVhazsKLS0JfQotKyAgICBpZiAoX19tID09IF9NX2JpdFs1XSkKLSsgICAgICBfX3JldCA9IF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrWzVdLCBfTV9jX2xvY2FsZV9jdHlwZSk7Ci0rICAgIGVsc2UKLSsgICAgICB7Ci0rCS8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCi0rCS8vIGxpYnJhcnkgZm9yIGJsYW5rLgotKwljb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOwotKwlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCi0rCSAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0pCi0rCSAgICB7Ci0rCSAgICAgIGlmIChfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKLSsJCXsKLSsJCSAgX19yZXQgPSB0cnVlOwotKwkJICBicmVhazsKLSsJCX0KLSsJICAgICAgZWxzZSBpZiAoX19tID09IF9NX2JpdFtfX2JpdGN1cl0pCi0rCQlicmVhazsKLSsJICAgIH0KLSsgICAgICB9Ci0rCi0gICAgIHJldHVybiBfX3JldDsKLSAgIH0KLSAKLUBAIC0yOTAsNCArMzEyLDUgQEAgbmFtZXNwYWNlIHN0ZAotICNlbmRpZgotICAgfQotICNlbmRpZiAvLyAgX0dMSUJDWFhfVVNFX1dDSEFSX1QKLS19Ci0rCi0rX0dMSUJDWFhfRU5EX05BTUVTUEFDRQotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCi1pbmRleCBkODlkYTMzLi4wNjc2NTdhIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAotQEAgLTUzLDEyICs1MywxNiBAQAotICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgotICAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKLSAJCQkJc2l6ZV90IF9fcmVmcykKLS0gICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKSksCi0tICAgICBfTV9uYW1lX21lc3NhZ2VzKF9fcykKLSsgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoTlVMTCksCi0rICAgICBfTV9uYW1lX21lc3NhZ2VzKE5VTEwpCi0gICAgICB7Ci0tICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOwotLSAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKLSsgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RkOjpzdHJsZW4oX19zKSArIDE7Ci0rICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbX19sZW5dOwotKyAgICAgICBzdGQ6Om1lbWNweShfX3RtcCwgX19zLCBfX2xlbik7Ci0gICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKLSsKLSsgICAgICAgLy8gTGFzdCB0byBhdm9pZCBsZWFraW5nIG1lbW9yeSBpZiBuZXcgdGhyb3dzLgotKyAgICAgICBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7Ci0gICAgICB9Ci0gCi0gICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYwotaW5kZXggMzFlYmI5Zi4uNzY3OWI5YyAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYwotQEAgLTMzLDkgKzMzLDE0IEBACi0gCi0gLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KLSAKLSsjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KLSsjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCi0gI2RlZmluZSBfTElCQwotICNpbmNsdWRlIDxsb2NhbGU+Ci0gI3VuZGVmIF9MSUJDCi0rI2Vsc2UKLSsjaW5jbHVkZSA8bG9jYWxlPgotKyNlbmRpZgotICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgotIAotICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotQEAgLTIwNiw3ICsyMTEsNyBAQCBuYW1lc3BhY2Ugc3RkCi0gCSAgfQotIAlicmVhazsKLSAgICAgICBkZWZhdWx0OgotLQk7Ci0rCV9fcmV0ID0gcGF0dGVybigpOwotICAgICAgIH0KLSAgICAgcmV0dXJuIF9fcmV0OwotICAgfQotQEAgLTM5MCw3ICszOTUsOSBAQCBuYW1lc3BhY2Ugc3RkCi0gCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7Ci0gI2Vsc2UKLSAJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KLS0JICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7Ci0rICAJICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOwotKyAgICAgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7Ci0rICAgICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKLSAJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOwotICNlbmRpZgotIAotQEAgLTQ3Nyw4ICs0ODQsOCBAQCBuYW1lc3BhY2Ugc3RkCi0gI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSAJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOwotICNlbHNlCi0tCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKLS0JICAgICAgZnJlZShfX29sZCk7Ci0rCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKLSsJICAgICAgZGVsZXRlIFtdIF9fc2F2OwotICNlbmRpZgotIAkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKLSAJICAgIH0KLUBAIC00OTgsOCArNTA1LDggQEAgbmFtZXNwYWNlIHN0ZAotICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0gCSAgX191c2Vsb2NhbGUoX19vbGQpOwotICNlbHNlCi0tCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOwotLQkgIGZyZWUoX19vbGQpOwotKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKLSsJICBkZWxldGUgW10gX19zYXY7Ci0gI2VuZGlmCi0gCX0KLSAgICAgfQotQEAgLTU0NSw4ICs1NTIsMTEgQEAgbmFtZXNwYWNlIHN0ZAotIAkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOwotICNlbHNlCi0gCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCi0tCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOwotLQkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7Ci0rICAgICAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7Ci0rICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKLSsgICAgICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOwotKyAgICAgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xsZW4pOwotKyAgICAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOwotICNlbmRpZgotIAotICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotQEAgLTYzMyw4ICs2NDMsOCBAQCBuYW1lc3BhY2Ugc3RkCi0gI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSAJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOwotICNlbHNlCi0tCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKLS0JICAgICAgZnJlZShfX29sZCk7Ci0rCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKLSsJICAgICAgZGVsZXRlIFtdIF9fc2F2OwotICNlbmRpZgotICAgICAgICAgICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47Ci0gCSAgICB9Ci1AQCAtNjUzLDggKzY2Myw4IEBAIG5hbWVzcGFjZSBzdGQKLSAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotIAkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSAjZWxzZQotLQkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKLS0JICBmcmVlKF9fb2xkKTsKLSsJICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7Ci0rCSAgZGVsZXRlIFtdIF9fc2F2OwotICNlbmRpZgotIAl9Ci0gICAgIH0KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwotaW5kZXggZDVjODk2MS4uOGFlODk2OSAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKLUBAIC0zMyw5ICszMywxNCBAQAotIAotIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+Ci0gCi0rI2luY2x1ZGUgPGZlYXR1cmVzLmg+Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXwotICNkZWZpbmUgX0xJQkMKLSAjaW5jbHVkZSA8bG9jYWxlPgotICN1bmRlZiBfTElCQwotKyNlbHNlCi0rI2luY2x1ZGUgPGxvY2FsZT4KLSsjZW5kaWYKLSAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KLSAKLSAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYwotaW5kZXggZDg0OGVkNS4uZjI0ZDUzZSAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKLUBAIC01MywxMSArNTMsMTQgQEAgbmFtZXNwYWNlIHN0ZAotICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fc3RyZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKLSAJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7Ci0gI2Vsc2UKLS0gICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7Ci0rICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKLSsgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7Ci0rICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOwotKyAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGxlbik7Ci0gICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOwotICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0cmZ0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKLS0gICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7Ci0tICAgICAgZnJlZShfX29sZCk7Ci0rICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOwotKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKLSAjZW5kaWYKLSAgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KLSAgICAgICBpZiAoX19sZW4gPT0gMCkKLUBAIC0yMDcsMTEgKzIxMCwxNCBAQCBuYW1lc3BhY2Ugc3RkCi0gICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAotIAkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKLSAjZWxzZQotLSAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKLSsgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOwotKyAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKLSsgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07Ci0rICAgICAgbWVtY3B5KF9fc2F2LCBfX29sZCwgX19sbGVuKTsKLSAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7Ci0gICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gd2NzZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOwotLSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKLS0gICAgICBmcmVlKF9fb2xkKTsKLSsgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7Ci0rICAgICAgZGVsZXRlIFtdIF9fc2F2OwotICNlbmRpZgotICAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgotICAgICAgIGlmIChfX2xlbiA9PSAwKQotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAotaW5kZXggYmE4ZTg1OC4uMTY2NWRkZSAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCi1AQCAtNTAsMTIgKzUwLDIxIEBACi0gICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCi0gCQkJCSAgICAgc2l6ZV90IF9fcmVmcykKLSAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCi0tICAgIF9NX25hbWVfdGltZXB1bmN0KF9fcykKLSsgICAgX01fbmFtZV90aW1lcHVuY3QoTlVMTCkKLSAgICAgewotLSAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOwotLSAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOwotKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0ZDo6c3RybGVuKF9fcykgKyAxOwotKyAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbX19sZW5dOwotKyAgICAgIHN0ZDo6bWVtY3B5KF9fdG1wLCBfX3MsIF9fbGVuKTsKLSAgICAgICBfTV9uYW1lX3RpbWVwdW5jdCA9IF9fdG1wOwotLSAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7Ci0rCi0rICAgICAgdHJ5Ci0rCXsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsgfQotKyAgICAgIGNhdGNoKC4uLikKLSsJewotKwkgIGRlbGV0ZSBbXSBfTV9uYW1lX3RpbWVwdW5jdDsKLSsJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKLSsJfQotKwotICAgICB9Ci0gCi0gICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+Ci0tLSAKLTIuNi4zCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Zjg3OTMxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi1Gcm9tIDliNzQ0MjA2OWViNjhhNDJkMjQzNzE4MWMxYjJlNzEwZGQwNzdlOGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0ODoxMCArMDQwMAotU3ViamVjdDogW1BBVENIIDA4LzQ2XSBtaXNzaW5nLWV4ZWNpbmZvX2gKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLSBib2VobS1nYy9pbmNsdWRlL2djLmggfCAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9ib2VobS1nYy9pbmNsdWRlL2djLmggYi9ib2VobS1nYy9pbmNsdWRlL2djLmgKLWluZGV4IDZiMzhmMmQuLmZjYTk4ZmYgMTAwNjQ0Ci0tLS0gYS9ib2VobS1nYy9pbmNsdWRlL2djLmgKLSsrKyBiL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAotQEAgLTUwMyw3ICs1MDMsNyBAQCBHQ19BUEkgR0NfUFRSIEdDX21hbGxvY19hdG9taWNfaWdub3JlX29mZl9wYWdlIEdDX1BST1RPKChzaXplX3QgbGIpKTsKLSAjaWYgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoX19HTElCQ19fKQotICMgaW5jbHVkZSA8ZmVhdHVyZXMuaD4KLSAjIGlmIChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMSB8fCBfX0dMSUJDX18gPiAyKSBcCi0tICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykKLSsgICAgICYmICFkZWZpbmVkKF9faWE2NF9fKSAmJiAhZGVmaW5lZChfX1VDTElCQ19fKQotICMgICBpZm5kZWYgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQotICMgICAgIGRlZmluZSBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCi0gIyAgIGVuZGlmCi0tLSAKLTIuNi4zCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwOS1jOTktc25wcmludGYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMDktYzk5LXNucHJpbnRmLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjIzNmM2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAwOS1jOTktc25wcmludGYucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi1Gcm9tIGZkZTk3ZjgwZDJkOTMxZWQzZmE0YTg2Mjk0Nzk5MzY2YjIzNTkzMzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0OTowMyArMDQwMAotU3ViamVjdDogW1BBVENIIDA5LzQ2XSBjOTktc25wcmludGYKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLSBsaWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8gfCAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8gYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KLWluZGV4IDM3ZjAxY2EuLmYwMGMwNmQgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KLSsrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbwotQEAgLTE0NCw3ICsxNDQsNyBAQCBuYW1lc3BhY2Ugc3RkCi0gICB1c2luZyA6OnZzcHJpbnRmOwotIH0gLy8gbmFtZXNwYWNlIHN0ZAotIAotLSNpZiBfR0xJQkNYWF9VU0VfQzk5Ci0rI2lmIF9HTElCQ1hYX1VTRV9DOTkgfHwgZGVmaW5lZChfX1VDTElCQ19fKQotIAotICN1bmRlZiBzbnByaW50ZgotICN1bmRlZiB2ZnNjYW5mCi0tLSAKLTIuNi4zCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxMC1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxMC1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRhODg3Ny4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMTAtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotRnJvbSA3YTkwZTYyZDU1N2M3OGFlNTIwMDZkZmYzMGM5OTAwNmUxMGQ5MzU3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTk6MDAgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAxMC80Nl0gZ2NjOiBwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uOiBjb2Rlc291cmNlcnldCi0tLS0KLSBnY2MvY29tbW9uLm9wdCAgICAgIHwgIDQgKysrKwotIGdjYy9jb25maWcuaW4gICAgICAgfCAgNiArKysrKysKLSBnY2MvY29uZmlndXJlICAgICAgIHwgMTYgKysrKysrKysrKysrKysrKwotIGdjYy9jb25maWd1cmUuYWMgICAgfCAxMCArKysrKysrKysrCi0gZ2NjL2RvYy9pbnZva2UudGV4aSB8ICA5ICsrKysrKysrKwotIGdjYy9nY2MuYyAgICAgICAgICAgfCAgMiArKwotIGdjYy9pbmNwYXRoLmMgICAgICAgfCAxOSArKysrKysrKysrKysrKysrKysrCi0gNyBmaWxlcyBjaGFuZ2VkLCA2NiBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9nY2MvY29tbW9uLm9wdCBiL2djYy9jb21tb24ub3B0Ci1pbmRleCAxMjE4YTcxLi5iZmJhMTE0IDEwMDY0NAotLS0tIGEvZ2NjL2NvbW1vbi5vcHQKLSsrKyBiL2djYy9jb21tb24ub3B0Ci1AQCAtNjIzLDYgKzYyMywxMCBAQCBXcmV0dXJuLWxvY2FsLWFkZHIKLSBDb21tb24gVmFyKHdhcm5fcmV0dXJuX2xvY2FsX2FkZHIpIEluaXQoMSkgV2FybmluZwotIFdhcm4gYWJvdXQgcmV0dXJuaW5nIGEgcG9pbnRlci9yZWZlcmVuY2UgdG8gYSBsb2NhbCBvciB0ZW1wb3JhcnkgdmFyaWFibGUuCi0gCi0rV3BvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKLStDb21tb24gVmFyKGZsYWdfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcykgSW5pdCgxKSBXYXJuaW5nCi0rV2FybiBmb3IgLUkgYW5kIC1MIG9wdGlvbnMgdXNpbmcgc3lzdGVtIGRpcmVjdG9yaWVzIGlmIGNyb3NzIGNvbXBpbGluZwotKwotIFdzaGFkb3cKLSBDb21tb24gVmFyKHdhcm5fc2hhZG93KSBXYXJuaW5nCi0gV2FybiB3aGVuIG9uZSBsb2NhbCB2YXJpYWJsZSBzaGFkb3dzIGFub3RoZXIKLWRpZmYgLS1naXQgYS9nY2MvY29uZmlnLmluIGIvZ2NjL2NvbmZpZy5pbgotaW5kZXggNTMzNTI1OC4uZjA3OTgyNiAxMDA2NDQKLS0tLSBhL2djYy9jb25maWcuaW4KLSsrKyBiL2djYy9jb25maWcuaW4KLUBAIC0xNjgsNiArMTY4LDEyIEBACi0gI2VuZGlmCi0gCi0gCi0rLyogRGVmaW5lIHRvIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3RvcmllcyAqLwotKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCi0rI3VuZGVmIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTCi0rI2VuZGlmCi0rCi0rCi0gLyogRGVmaW5lIGlmIHlvdSB3YW50IGFsbCBvcGVyYXRpb25zIG9uIFJUTCAodGhlIGJhc2ljIGRhdGEgc3RydWN0dXJlIG9mIHRoZQotICAgIG9wdGltaXplciBhbmQgYmFjayBlbmQpIHRvIGJlIGNoZWNrZWQgZm9yIGR5bmFtaWMgdHlwZSBzYWZldHkgYXQgcnVudGltZS4KLSAgICBUaGlzIGlzIHF1aXRlIGV4cGVuc2l2ZS4gKi8KLWRpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQotaW5kZXggM2M5Mjc5NS4uMzQzNzFhMyAxMDA3NTUKLS0tLSBhL2djYy9jb25maWd1cmUKLSsrKyBiL2djYy9jb25maWd1cmUKLUBAIC05MzMsNiArOTMzLDcgQEAgd2l0aF9zeXN0ZW1femxpYgotIGVuYWJsZV9tYWludGFpbmVyX21vZGUKLSBlbmFibGVfbGlua19tdXRleAotIGVuYWJsZV92ZXJzaW9uX3NwZWNpZmljX3J1bnRpbWVfbGlicwotK2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzCi0gZW5hYmxlX3BsdWdpbgotIGVuYWJsZV9ob3N0X3NoYXJlZAotIGVuYWJsZV9saWJxdWFkbWF0aF9zdXBwb3J0Ci1AQCAtMTY3MCw2ICsxNjcxLDggQEAgT3B0aW9uYWwgRmVhdHVyZXM6Ci0gICAtLWVuYWJsZS12ZXJzaW9uLXNwZWNpZmljLXJ1bnRpbWUtbGlicwotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGF0IHJ1bnRpbWUgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgY29tcGlsZXItc3BlY2lmaWMgZGlyZWN0b3J5Ci0rICAtLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCi0rICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXMKLSAgIC0tZW5hYmxlLXBsdWdpbiAgICAgICAgIGVuYWJsZSBwbHVnaW4gc3VwcG9ydAotICAgLS1lbmFibGUtaG9zdC1zaGFyZWQgICAgYnVpbGQgaG9zdCBjb2RlIGFzIHNoYXJlZCBsaWJyYXJpZXMKLSAgIC0tZGlzYWJsZS1saWJxdWFkbWF0aC1zdXBwb3J0Ci1AQCAtMjgyMTEsNiArMjgyMTQsMTkgQEAgaWYgdGVzdCAiJHtlbmFibGVfdmVyc2lvbl9zcGVjaWZpY19ydW50aW1lX2xpYnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgotIGZpCi0gCi0gCi0rIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMgd2FzIGdpdmVuLgotK2lmIHRlc3QgIiR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgZW5hYmxldmFsPSRlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllczsKLStlbHNlCi0rICBlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcz1ubwotK2ZpCi0rCi0raWYgdGVzdCAieCR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXN9IiA9ICJ4eWVzIjsgdGhlbgotKwotKyRhc19lY2hvICIjZGVmaW5lIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTIDEiID4+Y29uZmRlZnMuaAotKwotK2ZpCi0rCi0gIyBTdWJzdGl0dXRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCi0gCi0gCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKLWluZGV4IGQ0MTQwODEuLjI0MGQzMjIgMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlndXJlLmFjCi0rKysgYi9nY2MvY29uZmlndXJlLmFjCi1AQCAtNTY1NCw2ICs1NjU0LDE2IEBAIEFDX0FSR19FTkFCTEUodmVyc2lvbi1zcGVjaWZpYy1ydW50aW1lLWxpYnMsCi0gICAgICAgICAgICAgICAgIFtzcGVjaWZ5IHRoYXQgcnVudGltZSBsaWJyYXJpZXMgc2hvdWxkIGJlCi0gICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgaW4gYSBjb21waWxlci1zcGVjaWZpYyBkaXJlY3RvcnldKV0pCi0gCi0rQUNfQVJHX0VOQUJMRShbcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc10sCi0rICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3Rvcmllc10pLCwKLSsgICAgICAgICAgICAgW2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vXSkKLStpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCi0rICBBQ19ERUZJTkUoW0VOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTXSwKLSsgICAgICAgICAgIFsxXSwKLSsgICAgICAgICAgIFtEZWZpbmUgdG8gd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzXSkKLStmaQotKwotICMgU3Vic3RpdHV0ZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcwotIEFDX1NVQlNUKHN1YmRpcnMpCi0gQUNfU1VCU1Qoc3JjZGlyKQotZGlmZiAtLWdpdCBhL2djYy9kb2MvaW52b2tlLnRleGkgYi9nY2MvZG9jL2ludm9rZS50ZXhpCi1pbmRleCBkM2JlNTg5Li5jODFiNTViIDEwMDY0NAotLS0tIGEvZ2NjL2RvYy9pbnZva2UudGV4aQotKysrIGIvZ2NjL2RvYy9pbnZva2UudGV4aQotQEAgLTI2OSw2ICsyNjksNyBAQCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0c30uCi0gLVdvdmVybGVuZ3RoLXN0cmluZ3MgIC1XcGFja2VkICAtV3BhY2tlZC1iaXRmaWVsZC1jb21wYXQgIC1XcGFkZGVkIEBnb2wKLSAtV3BhcmVudGhlc2VzICAtV3BlZGFudGljLW1zLWZvcm1hdCAtV25vLXBlZGFudGljLW1zLWZvcm1hdCBAZ29sCi0gLVdwb2ludGVyLWFyaXRoICAtV25vLXBvaW50ZXItdG8taW50LWNhc3QgQGdvbAotKy1Xbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyBAZ29sCi0gLVdyZWR1bmRhbnQtZGVjbHMgIC1Xbm8tcmV0dXJuLWxvY2FsLWFkZHIgQGdvbAotIC1XcmV0dXJuLXR5cGUgIC1Xc2VxdWVuY2UtcG9pbnQgIC1Xc2hhZG93ICAtV25vLXNoYWRvdy1pdmFyIEBnb2wKLSAtV3NoaWZ0LWNvdW50LW5lZ2F0aXZlIC1Xc2hpZnQtY291bnQtb3ZlcmZsb3cgQGdvbAotQEAgLTQ0MzMsNiArNDQzNCwxNCBAQCBtYWRlIHVwIG9mIGRhdGEgb25seSBhbmQgdGh1cyByZXF1aXJlcyBubyBzcGVjaWFsIHRyZWF0bWVudC4gIEJ1dCwgZm9yCi0gbW9zdCB0YXJnZXRzLCBpdCBpcyBtYWRlIHVwIG9mIGNvZGUgYW5kIHRodXMgcmVxdWlyZXMgdGhlIHN0YWNrIHRvIGJlCi0gbWFkZSBleGVjdXRhYmxlIGluIG9yZGVyIGZvciB0aGUgcHJvZ3JhbSB0byB3b3JrIHByb3Blcmx5LgotIAotK0BpdGVtIC1Xbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcwotK0BvcGluZGV4IFduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCi0rRG8gbm90IHdhcm4gZm9yIEBvcHRpb257LUl9IG9yIEBvcHRpb257LUx9IG9wdGlvbnMgdXNpbmcgc3lzdGVtCi0rZGlyZWN0b3JpZXMgc3VjaCBhcyBAZmlsZXsvdXNyL2luY2x1ZGV9IHdoZW4gY3Jvc3MgY29tcGlsaW5nLiAgVGhpcwotK29wdGlvbiBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIGNocm9vdCBlbnZpcm9ubWVudHMgd2hlbiBzdWNoCi0rZGlyZWN0b3JpZXMgY29udGFpbiB0aGUgY29ycmVjdCBoZWFkZXJzIGFuZCBsaWJyYXJpZXMgZm9yIHRoZSB0YXJnZXQKLStzeXN0ZW0gcmF0aGVyIHRoYW4gdGhlIGhvc3QuCi0rCi0gQGl0ZW0gLVdmbG9hdC1lcXVhbAotIEBvcGluZGV4IFdmbG9hdC1lcXVhbAotIEBvcGluZGV4IFduby1mbG9hdC1lcXVhbAotZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYwotaW5kZXggZDk1NmMzNi4uNjc1YmNjMSAxMDA2NDQKLS0tLSBhL2djYy9nY2MuYwotKysrIGIvZ2NjL2djYy5jCi1AQCAtODM1LDYgKzgzNSw4IEBAIHByb3BlciBwb3NpdGlvbiBhbW9uZyB0aGUgb3RoZXIgb3V0cHV0IGZpbGVzLiAgKi8KLSAgICAiJXtmdXNlLWxkPSo6LWZ1c2UtbGQ9JSp9ICIgTElOS19DT01QUkVTU19ERUJVR19TUEVDIFwKLSAgICAiJVggJXtvKn0gJXtlKn0gJXtOfSAle259ICV7cn1cCi0gICAgICV7c30gJXt0fSAle3UqfSAle3p9ICV7Wn0gJXshbm9zdGRsaWI6JXshbm9zdGFydGZpbGVzOiVTfX0gIiBWVEFCTEVfVkVSSUZJQ0FUSU9OX1NQRUMgIiBcCi0rICAgICV7V25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXM6LS1uby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzfVwKLSsgICAgJXtXZXJyb3I9cG9pc29uLXN5c3RlbS1kaXJlY3RvcmllczotLWVycm9yLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXN9XAotICAgICAle3N0YXRpYzp9ICV7TCp9ICUobWZ3cmFwKSAlKGxpbmtfbGliZ2NjKSAiIFNBTklUSVpFUl9FQVJMWV9TUEVDICIgJW9cCi0gICAgICIgQ0hLUF9TUEVDICIgXAotICAgICAle2ZvcGVuYWNjfGZvcGVubXB8ZnRyZWUtcGFyYWxsZWxpemUtbG9vcHM9KjolOmluY2x1ZGUobGliZ29tcC5zcGVjKSUobGlua19nb21wKX1cCi1kaWZmIC0tZ2l0IGEvZ2NjL2luY3BhdGguYyBiL2djYy9pbmNwYXRoLmMKLWluZGV4IDZjNTRjYTYuLmNjMGM5MjEgMTAwNjQ0Ci0tLS0gYS9nY2MvaW5jcGF0aC5jCi0rKysgYi9nY2MvaW5jcGF0aC5jCi1AQCAtMjgsNiArMjgsNyBAQAotICNpbmNsdWRlICJpbnRsLmgiCi0gI2luY2x1ZGUgImluY3BhdGguaCIKLSAjaW5jbHVkZSAiY3BwZGVmYXVsdC5oIgotKyNpbmNsdWRlICJkaWFnbm9zdGljLWNvcmUuaCIKLSAKLSAvKiBNaWNyb3NvZnQgV2luZG93cyBkb2VzIG5vdCBuYXRpdmVseSBzdXBwb3J0IGlub2Rlcy4KLSAgICBWTVMgaGFzIG5vbi1udW1lcmljIGlub2Rlcy4gICovCi1AQCAtMzgzLDYgKzM4NCwyNCBAQCBtZXJnZV9pbmNsdWRlX2NoYWlucyAoY29uc3QgY2hhciAqc3lzcm9vdCwgY3BwX3JlYWRlciAqcGZpbGUsIGludCB2ZXJib3NlKQotIAl9Ci0gICAgICAgZnByaW50ZiAoc3RkZXJyLCBfKCJFbmQgb2Ygc2VhcmNoIGxpc3QuXG4iKSk7Ci0gICAgIH0KLSsKLSsjaWZkZWYgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMKLSsgIGlmIChmbGFnX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMpCi0rICAgIHsKLSsgICAgICAgc3RydWN0IGNwcF9kaXIgKnA7Ci0rCi0rICAgICAgIGZvciAocCA9IGhlYWRzW1FVT1RFXTsgcDsgcCA9IHAtPm5leHQpCi0rICAgICAgICAgewotKyAgICAgICAgICBpZiAoKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9pbmNsdWRlIiwgMTIpKQotKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9sb2NhbC9pbmNsdWRlIiwgMTgpKQotKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKSkKLSsgICAgICAgICAgICB3YXJuaW5nIChPUFRfV3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMsCi0rICAgICAgICAgICAgICAgICAgICAgImluY2x1ZGUgbG9jYXRpb24gXCIlc1wiIGlzIHVuc2FmZSBmb3IgIgotKyAgICAgICAgICAgICAgICAgICAgICJjcm9zcy1jb21waWxhdGlvbiIsCi0rICAgICAgICAgICAgICAgICAgICAgcC0+bmFtZSk7Ci0rICAgICAgICAgfQotKyAgICB9Ci0rI2VuZGlmCi0gfQotIAotIC8qIFVzZSBnaXZlbiAtSSBwYXRocyBmb3IgI2luY2x1ZGUgIi4uLiIgYnV0IG5vdCAjaW5jbHVkZSA8Li4uPiwgYW5kCi0tLSAKLTIuNi4zCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxMS1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMTEtZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTFlNjk0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxMS1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi1Gcm9tIGRiNDA2MDU0ZGU2YjA5NjdjZDc2Y2JiOTk4ZjA1YjBjNWFmMGJkOTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTowMDozNCArMDQwMAotU3ViamVjdDogW1BBVENIIDExLzQ2XSBnY2MtcG9pc29uLWRpci1leHRlbmQKLQotQWRkIC9zdy9pbmNsdWRlIGFuZCAvb3B0L2luY2x1ZGUgYmFzZWQgb24gdGhlIG9yaWdpbmFsCi16ZWNrZS1uby1ob3N0LWluY2x1ZGVzLnBhdGNoIHBhdGNoLiAgVGhlIG9yaWdpbmFsIHBhdGNoIGNoZWNrZWQgZm9yCi0vdXNyL2luY2x1ZGUsIC9zdy9pbmNsdWRlIGFuZCAvb3B0L2luY2x1ZGUgYW5kIHRoZW4gdHJpZ2dlcmVkIGEgZmFpbHVyZSBhbmQKLWFib3J0ZWQuCi0KLUluc3RlYWQsIHdlIGFkZCB0aGUgdHdvIG1pc3NpbmcgaXRlbXMgdG8gdGhlIGN1cnJlbnQgc2Nhbi4gIElmIHRoZSB1c2VyCi13YW50cyB0aGlzIHRvIGJlIGEgZmFpbHVyZSwgdGhleSBjYW4gYWRkICItV2Vycm9yPXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMiLgotCi1TaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLS0tLQotIGdjYy9pbmNwYXRoLmMgfCA0ICsrKy0KLSAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9nY2MvaW5jcGF0aC5jIGIvZ2NjL2luY3BhdGguYwotaW5kZXggY2MwYzkyMS4uMGJjMWY2NyAxMDA2NDQKLS0tLSBhL2djYy9pbmNwYXRoLmMKLSsrKyBiL2djYy9pbmNwYXRoLmMKLUBAIC0zOTQsNyArMzk0LDkgQEAgbWVyZ2VfaW5jbHVkZV9jaGFpbnMgKGNvbnN0IGNoYXIgKnN5c3Jvb3QsIGNwcF9yZWFkZXIgKnBmaWxlLCBpbnQgdmVyYm9zZSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgIGlmICgoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2luY2x1ZGUiLCAxMikpCi0gICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2xvY2FsL2luY2x1ZGUiLCAxOCkpCi0tICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL1gxMVI2L2luY2x1ZGUiLCAxOCkpKQotKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKQotKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3N3L2luY2x1ZGUiLCAxMSkpCi0rICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvb3B0L2luY2x1ZGUiLCAxMikpKQotICAgICAgICAgICAgIHdhcm5pbmcgKE9QVF9XcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcywKLSAgICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZSBsb2NhdGlvbiBcIiVzXCIgaXMgdW5zYWZlIGZvciAiCi0gICAgICAgICAgICAgICAgICAgICAgImNyb3NzLWNvbXBpbGF0aW9uIiwKLS0tIAotMi42LjMKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDEyLWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDEyLWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTBiYmM4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxMi1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLUZyb20gMjc4ZDI5M2M0Y2VlOTQ4MmEyM2FhMzQ0Mzc0MTg2MWZmMmY2NzIxMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjA4OjMxICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMTIvNDZdIGdjYy00LjMuMzogU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVAotCi1CZWZvcmUgY29tbWl0dGluZywgSSBub3RpY2VkIHRoYXQgUFIvMzIxNjEgd2FzIG1hcmtlZCBhcyBhIGR1cCBvZiBQUi8zMjAwOSwgYnV0IG15IHByZXZpb3VzIHBhdGNoIGRpZCBub3QgZml4IGl0LgotCi1UaGlzIGFsdGVybmF0aXZlIHBhdGNoIGlzIGJldHRlciBiZWNhdXNlIGl0IGxldHMgeW91IGp1c3QgdXNlIENGTEFHU19GT1JfVEFSR0VUIHRvIHNldCB0aGUgY29tcGlsYXRpb24gZmxhZ3MgZm9yIGxpYmdjYy4gU2luY2UgYm9vdHN0cmFwcGVkIHRhcmdldCBsaWJyYXJpZXMgYXJlIG5ldmVyIGNvbXBpbGVkIHdpdGggdGhlIG5hdGl2ZSBjb21waWxlciwgaXQgbWFrZXMgbGl0dGxlIHNlbnNlIHRvIHVzZSBkaWZmZXJlbnQgZmxhZ3MgZm9yIHN0YWdlMSBhbmQgbGF0ZXIgc3RhZ2VzLiBBbmQgaXQgYWxzbyBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gdXNlIGEgZGlmZmVyZW50IHZhcmlhYmxlIHRoYW4gQ0ZMQUdTX0ZPUl9UQVJHRVQuCi0KLU90aGVyIGNoYW5nZXMgSSBoYWQgdG8gZG8gaW5jbHVkZToKLQotLSBtb3ZpbmcgdGhlIGNyZWF0aW9uIG9mIGRlZmF1bHQgQ0ZMQUdTX0ZPUl9UQVJHRVQgZnJvbSBNYWtlZmlsZS5hbSB0byBjb25maWd1cmUuYWMsIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBCT09UX0NGTEFHUyBhcmUgc3Vic3RpdHV0ZWQgaW50byBDRkxBR1NfRk9SX1RBUkdFVCAod2hpY2ggaXMgIi1PMiAtZyAkKENGTEFHUykiKSB2aWEgJChDRkxBR1MpLiBJdCBpcyBhbHNvIGNsZWFuZXIgdGhpcyB3YXkgdGhvdWdoLgotCi0tIHBhc3NpbmcgdGhlIHJpZ2h0IENGTEFHUyB0byBjb25maWd1cmUgc2NyaXB0cyBhcyBleHBvcnRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKLQotSSBhbHNvIHN0b3BwZWQgcGFzc2luZyBMSUJDRkxBR1MgdG8gY29uZmlndXJlIHNjcmlwdHMgc2luY2UgdGhleSBhcmUgdW51c2VkIGluIHRoZSB3aG9sZSBzcmMgdHJlZS4gQW5kIEkgdXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbiBhcyBILVAgcmVtaW5kZWQgbWUgdG8gZG8uCi0KLUJvb3RzdHJhcHBlZC9yZWd0ZXN0ZWQgaTY4Ni1wYy1saW51eC1nbnUsIHdpbGwgY29tbWl0IHRvIDQuNCBzaG9ydGx5LiBPayBmb3IgNC4zPwotCi1TaWduZWQtb2ZmLWJ5OiBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLSBjb25maWd1cmUgfCAzMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotIDEgZmlsZSBjaGFuZ2VkLCAzMiBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKLWluZGV4IDFjYmEzYTkuLjljYWU4ZGEgMTAwNzU1Ci0tLS0gYS9jb25maWd1cmUKLSsrKyBiL2NvbmZpZ3VyZQotQEAgLTY3MzMsNiArNjczMywzOCBAQCBmaQotIAotIAotIAotKyMgRHVyaW5nIGdjYyBib290c3RyYXAsIGlmIHdlIHVzZSBzb21lIHJhbmRvbSBjYyBmb3Igc3RhZ2UxIHRoZW4gQ0ZMQUdTCi0rIyBtaWdodCBiZSBlbXB0eSBvciAiLWciLiAgV2UgZG9uJ3QgcmVxdWlyZSBhIEMrKyBjb21waWxlciwgc28gQ1hYRkxBR1MKLSsjIG1pZ2h0IGFsc28gYmUgZW1wdHkgKG9yICItZyIsIGlmIGEgbm9uLUdDQyBDKysgY29tcGlsZXIgaXMgaW4gdGhlIHBhdGgpLgotKyMgV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBUQVJHRVQgbGlicmFyaWVzICh3aGljaCB3ZSBrbm93IGFyZSBidWlsdCB3aXRoCi0rIyBnY2MpIGFyZSBidWlsdCB3aXRoICItTzIgLWciLCBzbyBpbmNsdWRlIHRob3NlIG9wdGlvbnMgd2hlbiBzZXR0aW5nCi0rIyBDRkxBR1NfRk9SX1RBUkdFVCBhbmQgQ1hYRkxBR1NfRk9SX1RBUkdFVC4KLStpZiB0ZXN0ICJ4JENGTEFHU19GT1JfVEFSR0VUIiA9IHg7IHRoZW4KLSsgIENGTEFHU19GT1JfVEFSR0VUPSRDRkxBR1MKLSsgIGNhc2UgIiAkQ0ZMQUdTICIgaW4KLSsgICAgKiIgLU8yICIqKSA7OwotKyAgICAqKSBDRkxBR1NfRk9SX1RBUkdFVD0iLU8yICRDRkxBR1MiIDs7Ci0rICBlc2FjCi0rICBjYXNlICIgJENGTEFHUyAiIGluCi0rICAgICoiIC1nICIqIHwgKiIgLWczICIqKSA7OwotKyAgICAqKSBDRkxBR1NfRk9SX1RBUkdFVD0iLWcgJENGTEFHUyIgOzsKLSsgIGVzYWMKLStmaQotKwotKwotK2lmIHRlc3QgIngkQ1hYRkxBR1NfRk9SX1RBUkdFVCIgPSB4OyB0aGVuCi0rICBDWFhGTEFHU19GT1JfVEFSR0VUPSRDWFhGTEFHUwotKyAgY2FzZSAiICRDWFhGTEFHUyAiIGluCi0rICAgICoiIC1PMiAiKikgOzsKLSsgICAgKikgQ1hYRkxBR1NfRk9SX1RBUkdFVD0iLU8yICRDWFhGTEFHUyIgOzsKLSsgIGVzYWMKLSsgIGNhc2UgIiAkQ1hYRkxBR1MgIiBpbgotKyAgICAqIiAtZyAiKiB8ICoiIC1nMyAiKikgOzsKLSsgICAgKikgQ1hYRkxBR1NfRk9SX1RBUkdFVD0iLWcgJENYWEZMQUdTIiA7OwotKyAgZXNhYwotK2ZpCi0rCi0rCi0gIyBIYW5kbGUgLS13aXRoLWhlYWRlcnM9WFhYLiAgSWYgdGhlIHZhbHVlIGlzIG5vdCAieWVzIiwgdGhlIGNvbnRlbnRzIG9mCi0gIyB0aGUgbmFtZWQgZGlyZWN0b3J5IGFyZSBjb3BpZWQgdG8gJCh0b29sZGlyKS9zeXMtaW5jbHVkZS4KLSBpZiB0ZXN0IHgiJHt3aXRoX2hlYWRlcnN9IiAhPSB4ICYmIHRlc3QgeCIke3dpdGhfaGVhZGVyc30iICE9IHhubyA7IHRoZW4KLS0tIAotMi42LjMKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDEzLTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDEzLTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWFhZjRjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxMy02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLUZyb20gYmRkZTRmNWVmYTNjODlhYzdlZTBiYzA1ZjMyMmYyN2UzZGFiZWFiOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjEwOjA2ICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMTMvNDZdIDY0LWJpdCBtdWx0aWxpYiBoYWNrLgotCi1HQ0MgaGFzIGludGVybmFsIG11bHRpbGliIGhhbmRsaW5nIGNvZGUgYnV0IGl0IGFzc3VtZXMgYSB2ZXJ5IHNwZWNpZmljIHJpZ2lkIGRpcmVjdG9yeQotbGF5b3V0LiBUaGUgYnVpbGQgc3lzdGVtIGltcGxlbWVudGF0aW9uIG9mIG11bHRpbGliIGxheW91dCBpcyB2ZXJ5IGdlbmVyaWMgYW5kIGFsbG93cwotY29tcGxldGUgY3VzdG9taXNhdGlvbiBvZiB0aGUgbGlicmFyeSBkaXJlY3Rvcmllcy4KLQotVGhpcyBwYXRjaCBpcyBhIHBhcnRpYWwgc29sdXRpb24gdG8gYWxsb3cgYW55IGN1c3RvbSBkaXJlY3RvcmllcyB0byBiZSBwYXNzZWQgaW50byBnY2MKLWFuZCBoYW5kbGVkIGNvcnJlY3RseS4gSXQgZm9yY2VzIGdjYyB0byB1c2UgdGhlIGJhc2VfbGliZGlyICh3aGljaCBpcyB0aGUgY3VycmVudAotZGlyZWN0b3J5LCAiLiIpLiBXZSBuZWVkIHRvIGRvIHRoaXMgZm9yIGVhY2ggbXVsdGlsaWIgdGhhdCBpcyBjb25maWd1cmVkIGFzIHdlIGRvbid0Ci1rbm93IHdoaWNoIGNvbXBpbGVyIG9wdGlvbnMgbWF5IGJlIGJlaW5nIHBhc3NlZCBpbnRvIHRoZSBjb21waWxlci4gU2luY2Ugd2UgaGF2ZSBhIGNvbXBpbGVyCi1wZXIgbXVsaXRsaWIgYXQgdGhpcyBwb2ludCB0aGF0IGlzbid0IGFuIGlzc3VlLgotCi1UaGUgb25lIHByb2JsZW0gaXMgdGhlIHRhcmdldCBjb21waWxlciBpcyBvbmx5IGdvaW5nIHRvIHdvcmsgZm9yIHRoZSBkZWZhdWx0IG11bHRsaWxpYiBhdAotdGhpcyBwb2ludC4gSWRlYWxseSB3ZSdkIGZpZ3VyZSBvdXQgd2hpY2ggbXVsdGlsaWJzIHdlcmUgYmVpbmcgZW5hYmxlZCB3aXRoIHdoaWNoIHBhdGhzCi1hbmQgYmUgYWJsZSB0byBwYXRjaCB0aGVzZSBlbnRyaWVzIHdpdGggYSBjb21wbGV0ZSBzZXQgb2YgY29ycmVjdCBwYXRocyBidXQgdGhpcyB3ZQotZG9uJ3QgaGF2ZSBzdWNoIGNvZGUgYXQgdGhpcyBwb2ludC4gVGhpcyBpcyBzb21ldGhpbmcgdGhlIHRhcmdldCBnY2MgcmVjaXBlIHNob3VsZCBkbwotYW5kIG92ZXJyaWRlIHRoZXNlIHBsYXRmb3JtIGRlZmF1bHRzIGluIGl0cyBidWlsZCBjb25maWcuCi0KLVJQIDE1LzgvMTEKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLVNpZ25lZC1vZmYtYnk6IEVsdmlzIERvd3NvbiA8ZWx2aXMuZG93c29uQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLSBnY2MvY29uZmlnL2kzODYvdC1saW51eDY0ICAgfCAgNiArKy0tLS0KLSBnY2MvY29uZmlnL21pcHMvdC1saW51eDY0ICAgfCAxMCArKystLS0tLS0tCi0gZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0IHwgIDUgKystLS0KLSAzIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvdC1saW51eDY0IGIvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAotaW5kZXggZjZkYmI3OC4uZDc3MGRhNSAxMDA2NDQKLS0tLSBhL2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKLSsrKyBiL2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKLUBAIC0zMiw3ICszMiw1IEBACi0gIwotIGNvbW1hPSwKLSBNVUxUSUxJQl9PUFRJT05TICAgID0gJChzdWJzdCAkKGNvbW1hKSwvLCQoVE1fTVVMVElMSUJfQ09ORklHKSkKLS1NVUxUSUxJQl9ESVJOQU1FUyAgID0gJChwYXRzdWJzdCBtJSwgJSwgJChzdWJzdCAvLCAsJChNVUxUSUxJQl9PUFRJT05TKSkpCi0tTVVMVElMSUJfT1NESVJOQU1FUyA9IG02ND0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOng4Nl82NC1saW51eC1nbnUpCi0tTVVMVElMSUJfT1NESVJOQU1FUys9IG0zMj0kKGlmICQod2lsZGNhcmQgJChzaGVsbCBlY2hvICQoU1lTVEVNX0hFQURFUl9ESVIpKS8uLi8uLi91c3IvbGliMzIpLC4uL2xpYjMyLC4uL2xpYikkKGNhbGwgaWZfbXVsdGlhcmNoLDppMzg2LWxpbnV4LWdudSkKLS1NVUxUSUxJQl9PU0RJUk5BTUVTKz0gbXgzMj0uLi9saWJ4MzIkKGNhbGwgaWZfbXVsdGlhcmNoLDp4ODZfNjQtbGludXgtZ251eDMyKQotK01VTFRJTElCX0RJUk5BTUVTID0gLiAuCi0rTVVMVElMSUJfT1NESVJOQU1FUyA9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NCBiL2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKLWluZGV4IDdlOTY0MDYuLmI3MmRjYjAgMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlnL21pcHMvdC1saW51eDY0Ci0rKysgYi9nY2MvY29uZmlnL21pcHMvdC1saW51eDY0Ci1AQCAtMTcsMTAgKzE3LDYgQEAKLSAjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSAKLSBNVUxUSUxJQl9PUFRJT05TID0gbWFiaT1uMzIvbWFiaT0zMi9tYWJpPTY0Ci0tTVVMVElMSUJfRElSTkFNRVMgPSBuMzIgMzIgNjQKLS1NSVBTX0VMID0gJChpZiAkKGZpbHRlciAlZWwsICQoZmlyc3R3b3JkICQoc3Vic3QgLSwgLCQodGFyZ2V0KSkpKSxlbCkKLS1NSVBTX1NPRlQgPSAkKGlmICQoc3RyaXAgJChmaWx0ZXIgTUFTS19TT0ZUX0ZMT0FUX0FCSSwgJCh0YXJnZXRfY3B1X2RlZmF1bHQpKSAkKGZpbHRlciBzb2Z0LCAkKHdpdGhfZmxvYXQpKSksc29mdCkKLS1NVUxUSUxJQl9PU0RJUk5BTUVTID0gXAotLQkuLi9saWIzMiQoY2FsbCBpZl9tdWx0aWFyY2gsOm1pcHM2NCQoTUlQU19FTCktbGludXgtZ251YWJpbjMyJChNSVBTX1NPRlQpKSBcCi0tCS4uL2xpYiQoY2FsbCBpZl9tdWx0aWFyY2gsOm1pcHMkKE1JUFNfRUwpLWxpbnV4LWdudSQoTUlQU19TT0ZUKSkgXAotLQkuLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOm1pcHM2NCQoTUlQU19FTCktbGludXgtZ251YWJpNjQkKE1JUFNfU09GVCkpCi0rTVVMVElMSUJfRElSTkFNRVMgPSAuIC4gLgotK01VTFRJTElCX09TRElSTkFNRVMgPSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKQotKwotZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NCBiL2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAotaW5kZXggYjZiMzUxZC4uMWQ1YjM3YSAxMDA2NDQKLS0tLSBhL2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAotKysrIGIvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0Ci1AQCAtMjYsMTAgKzI2LDkgQEAKLSAjIE1VTFRJTElCX09TRElSTkFNRVMgYWNjb3JkaW5nIHRvIHdoYXQgaXMgZm91bmQgb24gdGhlIHRhcmdldC4KLSAKLSBNVUxUSUxJQl9PUFRJT05TICAgIDo9IG02NC9tMzIKLS1NVUxUSUxJQl9ESVJOQU1FUyAgIDo9IDY0IDMyCi0rTVVMVElMSUJfRElSTkFNRVMgICA6PSAuIC4KLSBNVUxUSUxJQl9FWFRSQV9PUFRTIDo9IAotLU1VTFRJTElCX09TRElSTkFNRVMgOj0gbTY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6cG93ZXJwYzY0LWxpbnV4LWdudSkKLS1NVUxUSUxJQl9PU0RJUk5BTUVTICs9IG0zMj0kKGlmICQod2lsZGNhcmQgJChzaGVsbCBlY2hvICQoU1lTVEVNX0hFQURFUl9ESVIpKS8uLi8uLi91c3IvbGliMzIpLC4uL2xpYjMyLC4uL2xpYikkKGNhbGwgaWZfbXVsdGlhcmNoLDpwb3dlcnBjLWxpbnV4LWdudSkKLStNVUxUSUxJQl9PU0RJUk5BTUVTIDo9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCi0gCi0gcnM2MDAwLWxpbnV4Lm86ICQoc3JjZGlyKS9jb25maWcvcnM2MDAwL3JzNjAwMC1saW51eC5jCi0gCSQoQ09NUElMRSkgJDwKLS0tIAotMi42LjMKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDE0LW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMTQtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM3NDFmOC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMTQtb3B0aW9uYWwtbGlic3RkYy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi1Gcm9tIGExMzc2M2Y4YTFkNDEzYTQzMmU3YjQwODM1YTA2MmY4NjIwOGYyOWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxMjo1NiArMDQwMAotU3ViamVjdDogW1BBVENIIDE0LzQ2XSBvcHRpb25hbCBsaWJzdGRjCi0KLWdjYy1ydW50aW1lIGJ1aWxkcyBsaWJzdGRjKysgc2VwYXJhdGVseSBmcm9tIGdjYy1jcm9zcy0qLiBJdHMgY29uZmlndXJlIHRlc3RzIHVzaW5nIGcrKwotd2lsbCBub3QgcnVuIGNvcnJlY3RseSBzaW5jZSBieSBkZWZhdWx0IHRoZSBsaW5rZXIgd2lsbCB0cnkgdG8gbGluayBhZ2FpbnN0IGxpYnN0ZGMrKwotd2hpY2ggc2hvdWxkbid0IGV4aXN0IHlldC4gV2UgbmVlZCBhbiBvcHRpb24gdG8gZGlzYWJsZSAtbHN0ZGMrKwotb3B0aW9uIHdoaWxzdCBsZWF2aW5nIC1sYywgLWxnY2MgYW5kIG90aGVyIGF1dG9tYXRpYyBsaWJyYXJ5IGRlcGVuZGVuY2llcyBhZGRlZCBieSBnY2MKLWRyaXZlci4gVGhpcyBwYXRjaCBhZGRzIHN1Y2ggYW4gb3B0aW9uIHdoaWNoIG9ubHkgZGlzYWJsZXMgdGhlIC1sc3RkYysrLgotCi1BICJzdGFuZGFyZCIgZ2NjIGJ1aWxkIHVzZXMgeGdjYyBhbmQgaGVuY2UgYXZvaWRzIHRoaXMuIFdlIHNob3VsZCBhc2sgdXBzdHJlYW0gaG93IHRvCi1kbyB0aGlzIG9mZmljaWFsbHksIHRoZSBsaWtlbHkgYW5zd2VyIGlzIGRvbid0IGJ1aWxkIGxpYnN0ZGMrKyBzZXBhcmF0ZWx5LgotCi1SUCAyOS82LzEwCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCi0tLS0KLSBnY2MvYy1mYW1pbHkvYy5vcHQgIHwgNCArKysrCi0gZ2NjL2NwL2crK3NwZWMuYyAgICB8IDEgKwotIGdjYy9kb2MvaW52b2tlLnRleGkgfCA4ICsrKysrKystCi0gZ2NjL2djYy5jICAgICAgICAgICB8IDEgKwotIDQgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvZ2NjL2MtZmFtaWx5L2Mub3B0IGIvZ2NjL2MtZmFtaWx5L2Mub3B0Ci1pbmRleCA0MTYyNTY2Li40NTNlYzhlIDEwMDY0NAotLS0tIGEvZ2NjL2MtZmFtaWx5L2Mub3B0Ci0rKysgYi9nY2MvYy1mYW1pbHkvYy5vcHQKLUBAIC0xNTQzLDYgKzE1NDMsMTAgQEAgbm9zdGRpbmMrKwotIEMrKyBPYmpDKysKLSBEbyBub3Qgc2VhcmNoIHN0YW5kYXJkIHN5c3RlbSBpbmNsdWRlIGRpcmVjdG9yaWVzIGZvciBDKysKLSAKLStub3N0ZGxpYisrCi0rRHJpdmVyCi0rRG8gbm90IGxpbmsgc3RhbmRhcmQgQysrIHJ1bnRpbWUgbGlicmFyeQotKwotIG8KLSBDIE9iakMgQysrIE9iakMrKyBKb2luZWQgU2VwYXJhdGUKLSA7IERvY3VtZW50ZWQgaW4gY29tbW9uLm9wdAotZGlmZiAtLWdpdCBhL2djYy9jcC9nKytzcGVjLmMgYi9nY2MvY3AvZysrc3BlYy5jCi1pbmRleCA2NTM2ZDdlLi5mNTdhNWQ0IDEwMDY0NAotLS0tIGEvZ2NjL2NwL2crK3NwZWMuYwotKysrIGIvZ2NjL2NwL2crK3NwZWMuYwotQEAgLTEzOCw2ICsxMzgsNyBAQCBsYW5nX3NwZWNpZmljX2RyaXZlciAoc3RydWN0IGNsX2RlY29kZWRfb3B0aW9uICoqaW5fZGVjb2RlZF9vcHRpb25zLAotICAgICAgIHN3aXRjaCAoZGVjb2RlZF9vcHRpb25zW2ldLm9wdF9pbmRleCkKLSAJewotIAljYXNlIE9QVF9ub3N0ZGxpYjoKLSsJY2FzZSBPUFRfbm9zdGRsaWJfXzoKLSAJY2FzZSBPUFRfbm9kZWZhdWx0bGliczoKLSAJICBsaWJyYXJ5ID0gLTE7Ci0gCSAgYnJlYWs7Ci1kaWZmIC0tZ2l0IGEvZ2NjL2RvYy9pbnZva2UudGV4aSBiL2djYy9kb2MvaW52b2tlLnRleGkKLWluZGV4IGM4MWI1NWIuLjZkM2Y2OGMgMTAwNjQ0Ci0tLS0gYS9nY2MvZG9jL2ludm9rZS50ZXhpCi0rKysgYi9nY2MvZG9jL2ludm9rZS50ZXhpCi1AQCAtMTk1LDYgKzE5NSw3IEBAIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCi0gLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIEBnb2wKLSAtZnZ0YWJsZS12ZXJpZnk9QHJ7W31zdGRAcnt8fXByZWluaXRAcnt8fW5vbmVAcntdfSBAZ29sCi0gLWZ2dHYtY291bnRzIC1mdnR2LWRlYnVnIEBnb2wKLSstbm9zdGRsaWIrKyBAZ29sCi0gLWZ2aXNpYmlsaXR5LW1zLWNvbXBhdCBAZ29sCi0gLWZleHQtbnVtZXJpYy1saXRlcmFscyBAZ29sCi0gLVdhYmk9QHZhcntufSAgLVdhYmktdGFnICAtV2NvbnZlcnNpb24tbnVsbCAgLVdjdG9yLWR0b3ItcHJpdmFjeSBAZ29sCi1AQCAtNDg4LDcgKzQ4OSw3IEBAIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3RzfS4KLSAtcyAgLXN0YXRpYyAtc3RhdGljLWxpYmdjYyAtc3RhdGljLWxpYnN0ZGMrKyBAZ29sCi0gLXN0YXRpYy1saWJhc2FuIC1zdGF0aWMtbGlidHNhbiAtc3RhdGljLWxpYmxzYW4gLXN0YXRpYy1saWJ1YnNhbiBAZ29sCi0gLXN0YXRpYy1saWJtcHggLXN0YXRpYy1saWJtcHh3cmFwcGVycyBAZ29sCi0tLXNoYXJlZCAtc2hhcmVkLWxpYmdjYyAgLXN5bWJvbGljIEBnb2wKLSstc2hhcmVkIC1zaGFyZWQtbGliZ2NjICAtc3ltYm9saWMgLW5vc3RkbGliKysgQGdvbAotIC1UIEB2YXJ7c2NyaXB0fSAgLVdsLEB2YXJ7b3B0aW9ufSAgLVhsaW5rZXIgQHZhcntvcHRpb259IEBnb2wKLSAtdSBAdmFye3N5bWJvbH0gLXogQHZhcntrZXl3b3JkfX0KLSAKLUBAIC0xMTE4Nyw2ICsxMTE4OCwxMSBAQCBUaGVzZSBlbnRyaWVzIGFyZSB1c3VhbGx5IHJlc29sdmVkIGJ5IGVudHJpZXMgaW4KLSBsaWJjLiAgVGhlc2UgZW50cnkgcG9pbnRzIHNob3VsZCBiZSBzdXBwbGllZCB0aHJvdWdoIHNvbWUgb3RoZXIKLSBtZWNoYW5pc20gd2hlbiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQuCi0gCi0rQGl0ZW0gLW5vc3RkbGliKysKLStAb3BpbmRleCBub3N0ZGxpYisrCi0rRG8gbm90IHVzZSB0aGUgc3RhbmRhcmQgc3lzdGVtIEMrKyBydW50aW1lIGxpYnJhcmllcyB3aGVuIGxpbmtpbmcuCi0rT25seSB0aGUgbGlicmFyaWVzIHlvdSBzcGVjaWZ5IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBsaW5rZXIuCi0rCi0gQGNpbmRleCBAb3B0aW9uey1sZ2NjfSwgdXNlIHdpdGggQG9wdGlvbnstbm9zdGRsaWJ9Ci0gQGNpbmRleCBAb3B0aW9uey1ub3N0ZGxpYn0gYW5kIHVucmVzb2x2ZWQgcmVmZXJlbmNlcwotIEBjaW5kZXggdW5yZXNvbHZlZCByZWZlcmVuY2VzIGFuZCBAb3B0aW9uey1ub3N0ZGxpYn0KLWRpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKLWluZGV4IDY3NWJjYzEuLmEzN2VjOGIgMTAwNjQ0Ci0tLS0gYS9nY2MvZ2NjLmMKLSsrKyBiL2djYy9nY2MuYwotQEAgLTg0NSw2ICs4NDUsNyBAQCBwcm9wZXIgcG9zaXRpb24gYW1vbmcgdGhlIG90aGVyIG91dHB1dCBmaWxlcy4gICovCi0gICAgICUobWZsaWIpICIgU1RBQ0tfU1BMSVRfU1BFQyAiXAotICAgICAle2Zwcm9maWxlLWFyY3N8ZnByb2ZpbGUtZ2VuZXJhdGUqfGNvdmVyYWdlOi1sZ2Nvdn0gIiBTQU5JVElaRVJfU1BFQyAiIFwKLSAgICAgJXshbm9zdGRsaWI6JXshbm9kZWZhdWx0bGliczolKGxpbmtfc3NwKSAlKGxpbmtfZ2NjX2Nfc2VxdWVuY2UpfX1cCi0rICAgICV7IW5vc3RkbGliKys6fVwKLSAgICAgJXshbm9zdGRsaWI6JXshbm9zdGFydGZpbGVzOiVFfX0gJXtUKn0gfX19fX19IgotICNlbmRpZgotIAotLS0gCi0yLjYuMwotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMTUtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDE1LWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI2MmVmOC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMTUtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotRnJvbSA0YmQyMWExZDYzY2ZiMTRlMjYxZDkwYWRjMGM1ZDRmOTQ2MmRjNTU1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTQ6MjAgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAxNS80Nl0gZ2NjOiBkaXNhYmxlIE1BU0tfUkVMQVhfUElDX0NBTExTIGJpdAotCi1UaGUgbmV3IGZlYXR1cmUgYWRkZWQgYWZ0ZXIgNC4zLjMKLSJodHRwOi8vd3d3LnB1YmJzLm5ldC8yMDA5MDkvZ2NjLzk0MDQ4LXBhdGNoLWFkZC1zdXBwb3J0LWZvci1ybWlwc2phbHIuaHRtbCIKLXdpbGwgY2F1c2UgY2MxcGx1cyBlYXQgdXAgYWxsIHRoZSBzeXN0ZW0gbWVtb3J5IHdoZW4gYnVpbGQgd2Via2l0LWd0ay4KLVRoZSBmdW5jdGlvbiBtaXBzX2dldF9waWNfY2FsbF9zeW1ib2wga2VlcHMgb24gcmVjdXJzaXZlbHkgY2FsbGluZyBpdHNlbGYuCi1EaXNhYmxlIHRoaXMgZmVhdHVyZSB0byB3YWxrIGFzaWRlIHRoZSBidWcuCi0KLVNpZ25lZC1vZmYtYnk6IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCi0tLS0KLSBnY2MvY29uZmlndXJlICAgIHwgNyAtLS0tLS0tCi0gZ2NjL2NvbmZpZ3VyZS5hYyB8IDcgLS0tLS0tLQotIDIgZmlsZXMgY2hhbmdlZCwgMTQgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQotaW5kZXggMzQzNzFhMy4uOGNhZWNkYyAxMDA3NTUKLS0tLSBhL2djYy9jb25maWd1cmUKLSsrKyBiL2djYy9jb25maWd1cmUKLUBAIC0yNjQ3OSwxMyArMjY0NzksNiBAQCAkYXNfZWNob19uICJjaGVja2luZyBhc3NlbWJsZXIgYW5kIGxpbmtlciBmb3IgZXhwbGljaXQgSkFMUiByZWxvY2F0aW9uLi4uICIgPiY2OwotICAgICAgICAgcm0gLWYgY29uZnRlc3QuKgotICAgICAgIGZpCi0gICAgIGZpCi0tICAgIGlmIHRlc3QgJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jID0geWVzOyB0aGVuCi0tICAgICAgaWYgdGVzdCB4JHRhcmdldF9jcHVfZGVmYXVsdCA9IHg7IHRoZW4KLS0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD1NQVNLX1JFTEFYX1BJQ19DQUxMUwotLSAgICAgIGVsc2UKLS0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD0iKCR0YXJnZXRfY3B1X2RlZmF1bHQpfE1BU0tfUkVMQVhfUElDX0NBTExTIgotLSAgICAgIGZpCi0tICAgIGZpCi0gICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MiID4mNQotICRhc19lY2hvICIkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MiID4mNjsgfQotIAotZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCi1pbmRleCAyNDBkMzIyLi41NzgxOWZmIDEwMDY0NAotLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYwotKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYwotQEAgLTQzODQsMTMgKzQzODQsNiBAQCB4OgotICAgICAgICAgcm0gLWYgY29uZnRlc3QuKgotICAgICAgIGZpCi0gICAgIGZpCi0tICAgIGlmIHRlc3QgJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jID0geWVzOyB0aGVuCi0tICAgICAgaWYgdGVzdCB4JHRhcmdldF9jcHVfZGVmYXVsdCA9IHg7IHRoZW4KLS0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD1NQVNLX1JFTEFYX1BJQ19DQUxMUwotLSAgICAgIGVsc2UKLS0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD0iKCR0YXJnZXRfY3B1X2RlZmF1bHQpfE1BU0tfUkVMQVhfUElDX0NBTExTIgotLSAgICAgIGZpCi0tICAgIGZpCi0gICAgIEFDX01TR19SRVNVTFQoJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jKQotIAotICAgICBBQ19DQUNIRV9DSEVDSyhbbGlua2VyIGZvciAuZWhfZnJhbWUgcGVyc29uYWxpdHkgcmVsYXhhdGlvbl0sCi0tLSAKLTIuNi4zCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxNi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDE2LUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2YWUyNjIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDE2LUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi1Gcm9tIDkyNDI3ZWJiOTRkYzY2ZjhlNjRlYmYzZmZiY2Q2ZGQ1Y2UwOTM1YzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxNjoyOCArMDQwMAotU3ViamVjdDogW1BBVENIIDE2LzQ2XSBDT0xMRUNUX0dDQ19PUFRJT05TCi0KLVRoaXMgcGF0Y2ggYWRkcyAtLXN5c3Jvb3QgaW50byBDT0xMRUNUX0dDQ19PUFRJT05TIHdoaWNoIGlzIHVzZWQgdG8KLWludm9rZSBjb2xsZWN0Mi4KLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLSBnY2MvZ2NjLmMgfCA5ICsrKysrKysrKwotIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYwotaW5kZXggYTM3ZWM4Yi4uODdiNDdjNSAxMDA2NDQKLS0tLSBhL2djYy9nY2MuYwotKysrIGIvZ2NjL2djYy5jCi1AQCAtNDM1Miw2ICs0MzUyLDE1IEBAIHNldF9jb2xsZWN0X2djY19vcHRpb25zICh2b2lkKQotIAkJc2l6ZW9mICgiQ09MTEVDVF9HQ0NfT1BUSU9OUz0iKSAtIDEpOwotIAotICAgZmlyc3RfdGltZSA9IFRSVUU7Ci0rI2lmZGVmIEhBVkVfTERfU1lTUk9PVAotKyAgaWYgKHRhcmdldF9zeXN0ZW1fcm9vdF9jaGFuZ2VkICYmIHRhcmdldF9zeXN0ZW1fcm9vdCkKLSsgICAgewotKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgIictLXN5c3Jvb3Q9Iiwgc2l6ZW9mKCInLS1zeXNyb290PSIpLTEpOwotKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgdGFyZ2V0X3N5c3RlbV9yb290LHN0cmxlbih0YXJnZXRfc3lzdGVtX3Jvb3QpKTsKLSsgICAgICBvYnN0YWNrX2dyb3cgKCZjb2xsZWN0X29ic3RhY2ssICInIiwgMSk7Ci0rICAgICAgZmlyc3RfdGltZSA9IEZBTFNFOwotKyAgICB9Ci0rI2VuZGlmCi0gICBmb3IgKGkgPSAwOyAoaW50KSBpIDwgbl9zd2l0Y2hlczsgaSsrKQotICAgICB7Ci0gICAgICAgY29uc3QgY2hhciAqY29uc3QgKmFyZ3M7Ci0tLSAKLTIuNi4zCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxNy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxNy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg5YTI3OS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMTctVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi1Gcm9tIGIxZjMxMThlNDM5NDU5YzI2YTNlMTljNjE3YjdiMGM5Mzc0NWU3N2EgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxNzoyNSArMDQwMAotU3ViamVjdDogW1BBVENIIDE3LzQ2XSBVc2UgdGhlIGRlZmF1bHRzLmggaW4gJHtCfSBpbnN0ZWFkIG9mICR7U30sIGFuZCB0LW9lIGluCi0gJHtCfQotCi1Vc2UgdGhlIGRlZmF1bHRzLmggaW4gJHtCfSBpbnN0ZWFkIG9mICR7U30sIGFuZCB0LW9lIGluICR7Qn0sIHNvIHRoYXQKLXRoZSBzb3VyY2UgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGdjYy1jcm9zcy1pbml0aWFsLAotZ2NjLWNyb3NzLWludGVybWVkaWF0ZSwgZ2NjLWNyb3NzLCBnY2MtcnVudGltZSwgYW5kIGFsc28gdGhlIHNkayBidWlsZC4KLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVdoaWxlIGNvbXBpbGluZyBnY2MtY3Jvc3NzZGstaW5pdGlhbC14ODZfNjQgb24gc29tZSBob3N0LCB0aGVyZSBpcwotb2NjYXNpb25hbGx5IGZhaWx1cmUgdGhhdCB0ZXN0IHRoZSBleGlzdGFuY2Ugb2YgZGVmYXVsdC5oIGRvZXNuJ3QKLXdvcmssIHRoZSByZWFzb24gaXMgdG1faW5jbHVkZV9saXN0PScqKiBkZWZhdWx0cy5oJyByYXRoZXIgdGhhbgotdG1faW5jbHVkZV9saXN0PScqKiAuL2RlZmF1bHRzLmgnCi0KLVNvIHdlIGFkZCB0aGUgdGVzdCBjb25kaXRpb24gZm9yIHRoaXMgc2l0dWF0aW9uLgotU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotLS0tCi0gZ2NjL01ha2VmaWxlLmluICB8IDIgKy0KLSBnY2MvY29uZmlndXJlICAgIHwgNCArKy0tCi0gZ2NjL2NvbmZpZ3VyZS5hYyB8IDQgKystLQotIGdjYy9ta2NvbmZpZy5zaCAgfCA0ICsrLS0KLSA0IGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5pbgotaW5kZXggMDdjNmYwYS4uZTFlNjNlOCAxMDA2NDQKLS0tLSBhL2djYy9NYWtlZmlsZS5pbgotKysrIGIvZ2NjL01ha2VmaWxlLmluCi1AQCAtNTAyLDcgKzUwMiw3IEBAIFRBUkdFVF9TWVNURU1fUk9PVCA9IEBUQVJHRVRfU1lTVEVNX1JPT1RACi0gVEFSR0VUX1NZU1RFTV9ST09UX0RFRklORSA9IEBUQVJHRVRfU1lTVEVNX1JPT1RfREVGSU5FQAotIAotIHhtYWtlX2ZpbGU9QHhtYWtlX2ZpbGVACi0tdG1ha2VfZmlsZT1AdG1ha2VfZmlsZUAKLSt0bWFrZV9maWxlPUB0bWFrZV9maWxlQCAuL3Qtb2UKLSBUTV9FTkRJQU5fQ09ORklHPUBUTV9FTkRJQU5fQ09ORklHQAotIFRNX01VTFRJTElCX0NPTkZJRz1AVE1fTVVMVElMSUJfQ09ORklHQAotIFRNX01VTFRJTElCX0VYQ0VQVElPTlNfQ09ORklHPUBUTV9NVUxUSUxJQl9FWENFUFRJT05TX0NPTkZJR0AKLWRpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQotaW5kZXggOGNhZWNkYy4uOGVjM2Q0MCAxMDA3NTUKLS0tLSBhL2djYy9jb25maWd1cmUKLSsrKyBiL2djYy9jb25maWd1cmUKLUBAIC0xMTg1MCw4ICsxMTg1MCw4IEBAIGZvciBmIGluICR0bV9maWxlOyBkbwotICAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKLSAgICAgICAgOzsKLSAgICAgZGVmYXVsdHMuaCApCi0tICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvJGYiCi0tICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgotKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuLyRmIgotKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuLyRmIgotICAgICAgICA7OwotICAgICAqICkKLSAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS9jb25maWcvJGYiCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKLWluZGV4IDU3ODE5ZmYuLjY0M2E0N2UgMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlndXJlLmFjCi0rKysgYi9nY2MvY29uZmlndXJlLmFjCi1AQCAtMTgzMiw4ICsxODMyLDggQEAgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCi0gICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgotICAgICAgICA7OwotICAgICBkZWZhdWx0cy5oICkKLS0gICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS8kZiIKLS0gICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCi0rICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vJGYiCi0rICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vJGYiCi0gICAgICAgIDs7Ci0gICAgICogKQotICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKLWRpZmYgLS1naXQgYS9nY2MvbWtjb25maWcuc2ggYi9nY2MvbWtjb25maWcuc2gKLWluZGV4IGMzMmYwODcuLjY4MDNhYjkgMTAwNjQ0Ci0tLS0gYS9nY2MvbWtjb25maWcuc2gKLSsrKyBiL2djYy9ta2NvbmZpZy5zaAotQEAgLTc3LDcgKzc3LDcgQEAgaWYgWyAtbiAiJEhFQURFUlMiIF07IHRoZW4KLSAgICAgaWYgWyAkIyAtZ2UgMSBdOyB0aGVuCi0gCWVjaG8gJyNpZmRlZiBJTl9HQ0MnID4+ICR7b3V0cHV0fVQKLSAJZm9yIGZpbGUgaW4gIiRAIjsgZG8KLS0JICAgIGlmIHRlc3QgeCIkZmlsZSIgPSB4ImRlZmF1bHRzLmgiOyB0aGVuCi0rCSAgICBpZiB0ZXN0IHgiJGZpbGUiID0geCIuL2RlZmF1bHRzLmgiIC1vIHgiJGZpbGUiID0geCJkZWZhdWx0cy5oIjsgdGhlbgotIAkJcG9zdHBvbmVfZGVmYXVsdHNfaD0ieWVzIgotIAkgICAgZWxzZQotIAkJZWNobyAiIyBpbmNsdWRlIFwiJGZpbGVcIiIgPj4gJHtvdXRwdXR9VAotQEAgLTEwOSw3ICsxMDksNyBAQCBlc2FjCi0gCi0gIyBJZiB3ZSBwb3N0cG9uZWQgaW5jbHVkaW5nIGRlZmF1bHRzLmgsIGFkZCB0aGUgI2luY2x1ZGUgbm93LgotIGlmIHRlc3QgeCIkcG9zdHBvbmVfZGVmYXVsdHNfaCIgPSB4InllcyI7IHRoZW4KLS0gICAgZWNobyAiIyBpbmNsdWRlIFwiZGVmYXVsdHMuaFwiIiA+PiAke291dHB1dH1UCi0rICAgIGVjaG8gIiMgaW5jbHVkZSBcIi4vZGVmYXVsdHMuaFwiIiA+PiAke291dHB1dH1UCi0gZmkKLSAKLSAjIEFkZCBtdWx0aXBsZSBpbmNsdXNpb24gcHJvdGVjdGlvbiBndWFyZCwgcGFydCB0d28uCi0tLSAKLTIuNi4zCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxOC1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxOC1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThiYTMyNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMTgtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi1Gcm9tIGQxMWM3M2MxMjk1NTY1ZmYzNzY2YWUwNGUyYTQxMGE4OWZjODRkZDUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMDowMSArMDQwMAotU3ViamVjdDogW1BBVENIIDE4LzQ2XSBmb3J0cmFuIGNyb3NzLWNvbXBpbGUgaGFjay4KLQotKiBGb3J0cmFuIHdvdWxkIGhhdmUgc2VhcmNoZWQgZm9yIGFybS1hbmdzdHJvbS1nbnVlYWJpLWdmb3J0cmFuIGJ1dCB3b3VsZCBoYXZlIHVzZWQKLXVzZWQgZ2ZvcnRhbi4gRm9yIGdjY180LjIuMi5iYiB3ZSB3YW50IHRvIHVzZSB0aGUgZ2ZvcnRyYW4gY29tcGlsZXIgZnJvbSBvdXIgY3Jvc3MKLWRpcmVjdG9yeS4KLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KLS0tLQotIGxpYmdmb3J0cmFuL2NvbmZpZ3VyZSAgICB8IDIgKy0KLSBsaWJnZm9ydHJhbi9jb25maWd1cmUuYWMgfCAyICstCi0gMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9saWJnZm9ydHJhbi9jb25maWd1cmUgYi9saWJnZm9ydHJhbi9jb25maWd1cmUKLWluZGV4IGJiMzEwN2IuLjVkNDdlNjUgMTAwNzU1Ci0tLS0gYS9saWJnZm9ydHJhbi9jb25maWd1cmUKLSsrKyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQotQEAgLTEyNzQ3LDcgKzEyNzQ3LDcgQEAgZXNhYwotIAotICMgV2UgbmVlZCBnZm9ydHJhbiB0byBjb21waWxlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5Ci0gI0FDX1BST0dfRkMoZ2ZvcnRyYW4pCi0tRkM9IiRHRk9SVFJBTiIKLSsjRkM9IiRHRk9SVFJBTiIKLSBhY19leHQ9JHthY19mY19zcmNleHQtZn0KLSBhY19jb21waWxlPSckRkMgLWMgJEZDRkxBR1MgJGFjX2ZjZmxhZ3Nfc3JjZXh0IGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotIGFjX2xpbms9JyRGQyAtbyBjb25mdGVzdCRhY19leGVleHQgJEZDRkxBR1MgJExERkxBR1MgJGFjX2ZjZmxhZ3Nfc3JjZXh0IGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotZGlmZiAtLWdpdCBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYwotaW5kZXggYWRhZmIzZi4uYjRhZGUyOCAxMDA2NDQKLS0tLSBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYwotKysrIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjCi1AQCAtMjQwLDcgKzI0MCw3IEBAIEFDX1NVQlNUKGVuYWJsZV9zdGF0aWMpCi0gCi0gIyBXZSBuZWVkIGdmb3J0cmFuIHRvIGNvbXBpbGUgcGFydHMgb2YgdGhlIGxpYnJhcnkKLSAjQUNfUFJPR19GQyhnZm9ydHJhbikKLS1GQz0iJEdGT1JUUkFOIgotKyNGQz0iJEdGT1JUUkFOIgotIEFDX1BST0dfRkMoZ2ZvcnRyYW4pCi0gCi0gIyBleHRyYSBMRCBGbGFncyB3aGljaCBhcmUgcmVxdWlyZWQgZm9yIHRhcmdldHMKLS0tIAotMi42LjMKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDE5LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDE5LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWE0ZDFmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAxOS1saWJnY2Mtc2psai1jaGVjay5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLUZyb20gN2I0MDIxMmVkNmMwYzlmZTRlZmU1MWYzMWJjY2QzZDlmODkyZjIzOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIwOjUwICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMTkvNDZdIGxpYmdjYy1zamxqLWNoZWNrCi0KLWFjX2ZuX2NfdHJ5X2NvbXBpbGUgZG9lc250IHNlZW0gdG8ga2VlcCB0aGUgaW50ZXJtZWRpYXRlIGZpbGVzCi13aGljaCBhcmUgbmVlZGVkIGZvciBzamxqIHRlc3QgdG8gcGFzcyBzaW5jZSBpdCBncmVwcyBpbnRvIHRoZQotZ2VuZXJhdGVkIGZpbGUuIFNvIHdlIHJ1biB0aGUgY29tcGlsZXIgY29tbWFuZCB1c2luZyBBQ19UUllfQ09NTUFORAotd2hpY2ggdGhlbiBnZW5lcmF0ZXMgdGhlIG5lZWRlZCAucyBmaWxlCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gbGliZ2NjL2NvbmZpZ3VyZSAgICB8IDEwICsrKysrKy0tLS0KLSBsaWJnY2MvY29uZmlndXJlLmFjIHwgMTAgKysrKy0tLS0tLQotIDIgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9saWJnY2MvY29uZmlndXJlIGIvbGliZ2NjL2NvbmZpZ3VyZQotaW5kZXggMjAzZDM4NC4uNmFlZjNlNyAxMDA2NDQKLS0tLSBhL2xpYmdjYy9jb25maWd1cmUKLSsrKyBiL2xpYmdjYy9jb25maWd1cmUKLUBAIC00NTcwLDE3ICs0NTcwLDE5IEBAIHZvaWQgZm9vICgpCi0gfQotIAotIF9BQ0VPRgotLUNGTEFHU19ob2xkPSRDRkxBR1MKLS1DRkxBR1M9Ii0tc2F2ZS10ZW1wcyAtZmV4Y2VwdGlvbnMiCi0gbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9dW5rbm93bgotLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGU7IHRoZW4gOgotK2lmIHsgYWNfdHJ5PScke0NDLWNjfSAtZmV4Y2VwdGlvbnMgLVMgY29uZnRlc3QuYyAtbyBjb25mdGVzdC5zIDE+JjUnCi0rICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfdHJ5XCIiOyB9ID4mNQotKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQotKyAgYWNfc3RhdHVzPSQ/Ci0rICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSsgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IH07IHRoZW4KLSAgIGlmIGdyZXAgX1Vud2luZF9TakxqX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz15ZXMKLSAgIGVsaWYgZ3JlcCBfVW53aW5kX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz1ubwotICAgZmkKLSBmaQotLUNGTEFHUz0kQ0ZMQUdTX2hvbGQKLSBybSAtZiBjb25mdGVzdCoKLSAKLSBmaQotZGlmZiAtLWdpdCBhL2xpYmdjYy9jb25maWd1cmUuYWMgYi9saWJnY2MvY29uZmlndXJlLmFjCi1pbmRleCBhMTBhOTUyLi5jYzMyNGYzIDEwMDY0NAotLS0tIGEvbGliZ2NjL2NvbmZpZ3VyZS5hYwotKysrIGIvbGliZ2NjL2NvbmZpZ3VyZS5hYwotQEAgLTI1NSwxNiArMjU1LDE0IEBAIHZvaWQgZm9vICgpCi0gICBiYXIoKTsKLSB9Ci0gXSldKQotLUNGTEFHU19ob2xkPSRDRkxBR1MKLS1DRkxBR1M9Ii0tc2F2ZS10ZW1wcyAtZmV4Y2VwdGlvbnMiCi0gbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9dW5rbm93bgotLUFTX0lGKFthY19mbl9jX3RyeV9jb21waWxlXSwKLS0gIFtpZiBncmVwIF9VbndpbmRfU2pMal9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLStpZiBBQ19UUllfQ09NTUFORCgke0NDLWNjfSAtZmV4Y2VwdGlvbnMgLVMgY29uZnRlc3QuYyAtbyBjb25mdGVzdC5zIDE+JkFTX01FU1NBR0VfTE9HX0ZEKTsgdGhlbgotKyAgaWYgZ3JlcCBfVW53aW5kX1NqTGpfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXllcwotICAgZWxpZiBncmVwIF9VbndpbmRfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPW5vCi0tICBmaV0pCi0tQ0ZMQUdTPSRDRkxBR1NfaG9sZAotKyAgZmkKLStmaQotIHJtIC1mIGNvbmZ0ZXN0KgotIF0pCi0gCi0tLSAKLTIuNi4zCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyMC1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyMC1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNmNjZkNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMjAtY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi1Gcm9tIDVmOTc1OWE4NWZmZjNkNzhlM2Y3MWFlMDFjOTcwYjEwZDMyNmM0MDYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMjowMCArMDQwMAotU3ViamVjdDogW1BBVENIIDIwLzQ2XSBjcHA6IGhvbm9yIHN5c3Jvb3QuCi0KLUN1cnJlbnRseSwgaWYgdGhlIGdjYyB0b29sY2hhaW4gaXMgcmVsb2NhdGVkIGFuZCBpbnN0YWxsZWQgZnJvbSBzc3RhdGUsIHRoZW4geW91IHRyeSBhbmQgY29tcGlsZQotcHJlcHJvY2Vzc2VkIHNvdXJjZSAoLmkgb3IgLmlpIGZpbGVzKSwgdGhlIGNvbXBpbGVyIHdpbGwgdHJ5IGFuZCBhY2Nlc3MgdGhlIGJ1aWx0aW4gc3lzcm9vdCBsb2NhdGlvbgotcmF0aGVyIHRoYW4gdGhlIC0tc3lzcm9vdCBvcHRpb24gc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kbGluZS4gSWYgYWNjZXNzIHRvIHRoYXQgZGlyZWN0b3J5IGlzCi1wZXJtaXNzaW9uIGRlbmllZCAodW5yZWFkYWJsZSksIGdjYyB3aWxsIGVycm9yLgotCi1UaGlzIGhhcHBlbnMgd2hlbiBjY2FjaGUgaXMgaW4gdXNlIGR1ZSB0byB0aGUgZmFjdCBpdCB1c2VzIHByZXByb2Nlc3NlZCBzb3VyY2UgZmlsZXMuCi0KLVRoZSBmaXggYmVsb3cgYWRkcyAlSSB0byB0aGUgY3BwLW91dHB1dCBzcGVjIG1hY3JvIHNvIHRoZSBkZWZhdWx0IHN1YnN0aXR1dGlvbnMgZm9yIC1pcHJlZml4LAotLWlzeXN0ZW0sIC1pc3lzcm9vdCBoYXBwZW4gYW5kIHRoZSBjb3JyZWN0IHN5c3Jvb3QgaXMgdXNlZC4KLQotW1lPQ1RPICMyMDc0XQotCi1SUCAyMDEyLzA0LzEzCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gZ2NjL2NwL2xhbmctc3BlY3MuaCB8IDIgKy0KLSBnY2MvZ2NjLmMgICAgICAgICAgIHwgMiArLQotIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvZ2NjL2NwL2xhbmctc3BlY3MuaCBiL2djYy9jcC9sYW5nLXNwZWNzLmgKLWluZGV4IGIwNzI4ZjAuLmU2OWVlN2QgMTAwNjQ0Ci0tLS0gYS9nY2MvY3AvbGFuZy1zcGVjcy5oCi0rKysgYi9nY2MvY3AvbGFuZy1zcGVjcy5oCi1AQCAtNjMsNSArNjMsNSBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQotICAgeyIuaWkiLCAiQGMrKy1jcHAtb3V0cHV0IiwgMCwgMCwgMH0sCi0gICB7IkBjKystY3BwLW91dHB1dCIsCi0gICAgIiV7IU06JXshTU06JXshRTpcCi0tICAgIGNjMXBsdXMgLWZwcmVwcm9jZXNzZWQgJWkgJShjYzFfb3B0aW9ucykgJTJcCi0rICAgIGNjMXBsdXMgLWZwcmVwcm9jZXNzZWQgJWkgJUkgJShjYzFfb3B0aW9ucykgJTJcCi0gICAgICV7IWZzeW50YXgtb25seTolKGludm9rZV9hcyl9fX19IiwgMCwgMCwgMH0sCi1kaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCi1pbmRleCA4N2I0N2M1Li5lNmVmYWU3IDEwMDY0NAotLS0tIGEvZ2NjL2djYy5jCi0rKysgYi9nY2MvZ2NjLmMKLUBAIC0xMTQyLDcgKzExNDIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBpbGVyIGRlZmF1bHRfY29tcGlsZXJzW10gPQotICAgICAgICAgICAgICAgICAgICAgJVd7byo6LS1vdXRwdXQtcGNoPSUqfX0lVn19fX19fSIsIDAsIDAsIDB9LAotICAgeyIuaSIsICJAY3BwLW91dHB1dCIsIDAsIDAsIDB9LAotICAgeyJAY3BwLW91dHB1dCIsCi0tICAgIiV7IU06JXshTU06JXshRTpjYzEgLWZwcmVwcm9jZXNzZWQgJWkgJShjYzFfb3B0aW9ucykgJXshZnN5bnRheC1vbmx5OiUoaW52b2tlX2FzKX19fX0iLCAwLCAwLCAwfSwKLSsgICAiJXshTToleyFNTToleyFFOmNjMSAtZnByZXByb2Nlc3NlZCAlaSAlSSAlKGNjMV9vcHRpb25zKSAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAotICAgeyIucyIsICJAYXNzZW1ibGVyIiwgMCwgMCwgMH0sCi0gICB7IkBhc3NlbWJsZXIiLAotICAgICIleyFNOiV7IU1NOiV7IUU6JXshUzphcyAlKGFzbV9kZWJ1ZykgJShhc21fb3B0aW9ucykgJWkgJUEgfX19fSIsIDAsIDAsIDB9LAotLS0gCi0yLjYuMwotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMjEtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyMS1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2NmZmU0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyMS1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotRnJvbSAzNGQyMmFiNmNmZDJkZmU2ZGQxNzFjOGQwYjMxY2FmY2RlYjg2Mjk4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjM6MDggKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAyMS80Nl0gTUlQUzY0OiBEZWZhdWx0IHRvIE42NCBBQkkKLQotTUlQUzY0IGRlZmF1bHRzIHRvIG4zMiBBQkksIHRoaXMgcGF0Y2ggbWFrZXMgaXQKLXNvIHRoYXQgaXQgZGVmYXVsdHMgdG8gTjY0IEFCSQotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZyBzcGVjaWZpY10KLS0tLQotIGdjYy9jb25maWcuZ2NjIHwgMTAgKysrKystLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9nY2MvY29uZmlnLmdjYyBiL2djYy9jb25maWcuZ2NjCi1pbmRleCBjODM1NzM0Li5kZDA3MzlkIDEwMDY0NAotLS0tIGEvZ2NjL2NvbmZpZy5nY2MKLSsrKyBiL2djYy9jb25maWcuZ2NjCi1AQCAtMjAxNywyOSArMjAxNywyOSBAQCBtaXBzKi0qLWxpbnV4KikJCQkJIyBMaW51eCBNSVBTLCBlaXRoZXIgZW5kaWFuLgotIAkJCWRlZmF1bHRfbWlwc19hcmNoPW1pcHMzMgotIAkJCTs7Ci0gCQltaXBzNjRlbC1zdC1saW51eC1nbnUpCi0tCQkJZGVmYXVsdF9taXBzX2FiaT1uMzIKLSsJCQlkZWZhdWx0X21pcHNfYWJpPTY0Ci0gCQkJdG1fZmlsZT0iJHt0bV9maWxlfSBtaXBzL3N0LmgiCi0gCQkJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSBtaXBzL3Qtc3QiCi0gCQkJZW5hYmxlX21pcHNfbXVsdGlsaWJzPSJ5ZXMiCi0gCQkJOzsKLSAJCW1pcHM2NG9jdGVvbiotKi1saW51eCopCi0tCQkJZGVmYXVsdF9taXBzX2FiaT1uMzIKLSsJCQlkZWZhdWx0X21pcHNfYWJpPTY0Ci0gCQkJdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBNSVBTX0NQVV9TVFJJTkdfREVGQVVMVD1cXFwib2N0ZW9uXFxcIiIKLSAJCQl0YXJnZXRfY3B1X2RlZmF1bHQ9TUFTS19TT0ZUX0ZMT0FUX0FCSQotIAkJCWVuYWJsZV9taXBzX211bHRpbGlicz0ieWVzIgotIAkJCTs7Ci0gCQltaXBzaXNhNjRyNiotKi1saW51eCopCi0tCQkJZGVmYXVsdF9taXBzX2FiaT1uMzIKLSsJCQlkZWZhdWx0X21pcHNfYWJpPTY0Ci0gCQkJZGVmYXVsdF9taXBzX2FyY2g9bWlwczY0cjYKLSAJCQllbmFibGVfbWlwc19tdWx0aWxpYnM9InllcyIKLSAJCQk7OwotIAkJbWlwc2lzYTY0cjIqLSotbGludXgqKQotLQkJCWRlZmF1bHRfbWlwc19hYmk9bjMyCi0rCQkJZGVmYXVsdF9taXBzX2FiaT02NAotIAkJCWRlZmF1bHRfbWlwc19hcmNoPW1pcHM2NHIyCi0gCQkJZW5hYmxlX21pcHNfbXVsdGlsaWJzPSJ5ZXMiCi0gCQkJOzsKLSAJCW1pcHM2NCotKi1saW51eCogfCBtaXBzaXNhNjQqLSotbGludXgqKQotLQkJCWRlZmF1bHRfbWlwc19hYmk9bjMyCi0rCQkJZGVmYXVsdF9taXBzX2FiaT02NAotIAkJCWVuYWJsZV9taXBzX211bHRpbGlicz0ieWVzIgotIAkJCTs7Ci0gCWVzYWMKLS0tIAotMi42LjMKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDIyLURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMjItRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjIwODM1MS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMjItRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi1Gcm9tIGY2YjQxYjYyZWE2MmEwZjE0NDdkOWZjMjM1ZjdmZDJiYmYzZmU3YzIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyNDo1MCArMDQwMAotU3ViamVjdDogW1BBVENIIDIyLzQ2XSBEZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgYW5kIFVDTElCQ19EWU5BTUlDX0xJTktFUgotIHJlbGF0aXZlIHRvIFNZU1RFTUxJQlNfRElSCi0KLVRoaXMgcGF0Y2ggZGVmaW5lcyBHTElCQ19EWU5BTUlDX0xJTktFUiBhbmQgVUNMSUJDX0RZTkFNSUNfTElOS0VSCi1yZWxhdGl2ZSB0byBTWVNURU1MSUJTX0RJUiB3aGljaCBjYW4gYmUgc2V0IGluIGdlbmVyYXRlZCBoZWFkZXJzCi1UaGlzIGJyZWFrcyB0aGUgYXNzdW1wdGlvbiBvZiBoYXJkY29kZWQgbXVsdGlsaWIgaW4gZ2NjCi1DaGFuZ2UgaXMgb25seSBmb3IgdGhlIHN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzIGluIE9FIGluY2x1ZGluZwotU0gsIHNwYXJjLCBhbHBoYSBmb3IgcG9zc2libGUgZnV0dXJlIHN1cHBvcnQgKGlmIGFueSkKLQotUmVtb3ZlcyB0aGUgZG9faGVhZGVyZml4IHRhc2sgaW4gbWV0YWRhdGEKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBjb25maWd1cmF0aW9uXQotLS0tCi0gZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaCB8ICA0ICsrLS0KLSBnY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggIHwgIDQgKystLQotIGdjYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oICAgfCAgMiArLQotIGdjYy9jb25maWcvaTM4Ni9saW51eC5oICAgICAgfCAgMiArLQotIGdjYy9jb25maWcvaTM4Ni9saW51eDY0LmggICAgfCAgNiArKystLS0KLSBnY2MvY29uZmlnL2xpbnV4LmggICAgICAgICAgIHwgIDggKysrKy0tLS0KLSBnY2MvY29uZmlnL21pcHMvbGludXguaCAgICAgIHwgMTIgKysrKysrLS0tLS0tCi0gZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oICB8IDEwICsrKysrLS0tLS0KLSBnY2MvY29uZmlnL3NoL2xpbnV4LmggICAgICAgIHwgIDIgKy0KLSBnY2MvY29uZmlnL3NwYXJjL2xpbnV4LmggICAgIHwgIDIgKy0KLSBnY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaCAgIHwgIDQgKystLQotIDExIGZpbGVzIGNoYW5nZWQsIDI4IGluc2VydGlvbnMoKyksIDI4IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaCBiL2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmgKLWluZGV4IDJjNzBhMmYuLmRkMDQ4ZGIgMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCi0rKysgYi9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCi1AQCAtMjMsOCArMjMsOCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQotICNkZWZpbmUgRVhUUkFfU1BFQ1MgXAotIHsgImVsZl9keW5hbWljX2xpbmtlciIsIEVMRl9EWU5BTUlDX0xJTktFUiB9LAotIAotLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIJIi9saWIvbGQtbGludXguc28uMiIKLS0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKLSsjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSCVNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgotKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSICBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCi0gI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX1VDTElCQwotICNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUpICIle21nbGliYzoiIEcgIjs6IiBVICJ9IgotICNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCi1pbmRleCBlOWQ2NWRjLi5jZmRmM2YwIDEwMDY0NAotLS0tIGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCi0rKysgYi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKLUBAIC02OCw4ICs2OCw4IEBACi0gICAgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCBhbmQgVEFSR0VUX0RFRkFVTFRfRkxPQVRfQUJJLiAgKi8KLSAKLSAjdW5kZWYgIEdMSUJDX0RZTkFNSUNfTElOS0VSCi0tI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUICIvbGliL2xkLWxpbnV4LnNvLjMiCi0tI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9IQVJEX0ZMT0FUICIvbGliL2xkLWxpbnV4LWFybWhmLnNvLjMiCi0rI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4zIgotKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfSEFSRF9GTE9BVCBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtYXJtaGYuc28uMyIKLSAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVAotIAotICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgXAotZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKLWluZGV4IDQ5YWQ5NTQuLmE1YWI1NTkgMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAotKysrIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKLUBAIC02Miw3ICs2Miw3IEBACi0gCi0gI2RlZmluZSBMSUJHQ0NfU1BFQyAiJXttZmxvYXQtYWJpPXNvZnQqOi1sZmxvYXR9IC1sZ2NjIgotIAotLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKLSsjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgotIAotICNkZWZpbmUgTElOVVhfVEFSR0VUX0xJTktfU1BFQyAgIiV7aCp9IFwKLSAgICAle3N0YXRpYzotQnN0YXRpY30gXAotZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9saW51eC5oIGIvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgKLWluZGV4IGExMDA5NjMuLjIxYmEyYjIgMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlnL2kzODYvbGludXguaAotKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgKLUBAIC0yMCw0ICsyMCw0IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCi0gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLSAKLSAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OICJlbGZfaTM4NiIKLS0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCi0rI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKLWRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oIGIvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAotaW5kZXggYTI3ZDNiZS4uNjE4NWNjZSAxMDA2NDQKLS0tLSBhL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgKLSsrKyBiL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgKLUBAIC0yNyw2ICsyNyw2IEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQotICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT042NCAiZWxmX3g4Nl82NCIKLSAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OWDMyICJlbGYzMl94ODZfNjQiCi0gCi0tI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLWxpbnV4LnNvLjIiCi0tI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliNjQvbGQtbGludXgteDg2LTY0LnNvLjIiCi0tI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUlgzMiAiL2xpYngzMi9sZC1saW51eC14MzIuc28uMiIKLSsjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCi0rI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1saW51eC14ODYtNjQuc28uMiIKLSsjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSWDMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC14MzIuc28uMiIKLWRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2xpbnV4LmggYi9nY2MvY29uZmlnL2xpbnV4LmgKLWluZGV4IDg1NzM4OWEuLjIyYjliZTUgMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlnL2xpbnV4LmgKLSsrKyBiL2djYy9jb25maWcvbGludXguaAotQEAgLTczLDEwICs3MywxMCBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKLSAgICBHTElCQ19EWU5BTUlDX0xJTktFUiBtdXN0IGJlIGRlZmluZWQgZm9yIGVhY2ggdGFyZ2V0IHVzaW5nIHRoZW0sIG9yCi0gICAgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBhbmQgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBmb3IgdGFyZ2V0cwotICAgIHN1cHBvcnRpbmcgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBjb21waWxhdGlvbi4gICovCi0tI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCi0tI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKLS0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliL2xkNjQtdUNsaWJjLnNvLjAiCi0tI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgIi9saWIvbGR4MzItdUNsaWJjLnNvLjAiCi0rI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgotKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgotKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLnNvLjAiCi0rI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgU1lTVEVNTElCU19ESVIgImxkeDMyLXVDbGliYy5zby4wIgotICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSICIvc3lzdGVtL2Jpbi9saW5rZXIiCi0gI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIzMiAiL3N5c3RlbS9iaW4vbGlua2VyIgotICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSNjQgIi9zeXN0ZW0vYmluL2xpbmtlcjY0IgotZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbWlwcy9saW51eC5oIGIvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgKLWluZGV4IDkxZGYyNjEuLmMzMDZhZmIgMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlnL21pcHMvbGludXguaAotKysrIGIvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgKLUBAIC0yMiwyMCArMjIsMjAgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKLSAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OTjMyICJlbGYzMiV7RUI6Yn0le0VMOmx9dHNtaXBuMzIiCi0gCi0gI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFwKLS0gICIle21uYW49MjAwODovbGliL2xkLWxpbnV4LW1pcHNuOC5zby4xOzovbGliL2xkLnNvLjF9IgotKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LW1pcHNuOC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZC5zby4xfSIKLSAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgXAotLSAgIiV7bW5hbj0yMDA4Oi9saWI2NC9sZC1saW51eC1taXBzbjguc28uMTs6L2xpYjY0L2xkLnNvLjF9IgotKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LW1pcHNuOC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZC5zby4xfSIKLSAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSTjMyIFwKLS0gICIle21uYW49MjAwODovbGliMzIvbGQtbGludXgtbWlwc244LnNvLjE7Oi9saWIzMi9sZC5zby4xfSIKLSsgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1taXBzbjguc28uMTs6IiBTWVNURU1MSUJTX0RJUiAibGQuc28uMX0iCi0gCi0gI3VuZGVmIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyCi0gI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBcCi0tICAiJXttbmFuPTIwMDg6L2xpYi9sZC11Q2xpYmMtbWlwc244LnNvLjA7Oi9saWIvbGQtdUNsaWJjLnNvLjB9IgotKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy1taXBzbjguc28uMDs6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjB9IgotICN1bmRlZiBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NAotICNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgXAotLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQ2NC11Q2xpYmMtbWlwc244LnNvLjA7Oi9saWIvbGQ2NC11Q2xpYmMuc28uMH0iCi0rICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMtbWlwc244LnNvLjA7OiIgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLnNvLjB9IgotICNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSTjMyIFwKLS0gICIle21uYW49MjAwODovbGliMzIvbGQtdUNsaWJjLW1pcHNuOC5zby4wOzovbGliMzIvbGQtdUNsaWJjLnNvLjB9IgotKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy1taXBzbjguc28uMDs6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjB9IgotIAotICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSTjMyICIvc3lzdGVtL2Jpbi9saW5rZXIzMiIKLSAjZGVmaW5lIEdOVV9VU0VSX0RZTkFNSUNfTElOS0VSTjMyIFwKLWRpZmYgLS1naXQgYS9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmggYi9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKLWluZGV4IDA4NzllN2UuLjMxYzQzMzggMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKLSsrKyBiL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAotQEAgLTM1NywxNCArMzU3LDE0IEBAIGV4dGVybiBpbnQgZG90X3N5bWJvbHM7Ci0gI3VuZGVmCUxJTktfT1NfREVGQVVMVF9TUEVDCi0gI2RlZmluZSBMSU5LX09TX0RFRkFVTFRfU1BFQyAiJShsaW5rX29zX2xpbnV4KSIKLSAKLS0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQuc28uMSIKLSsjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLnNvLjEiCi0gI2lmZGVmIExJTlVYNjRfREVGQVVMVF9BQklfRUxGdjIKLS0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIiV7bWFiaT1lbGZ2MTovbGliNjQvbGQ2NC5zby4xOzovbGliNjQvbGQ2NC5zby4yfSIKLSsjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIiV7bWFiaT1lbGZ2MToiIFNZU1RFTUxJQlNfRElSICJsZDY0LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkNjQuc28uMn0iCi0gI2Vsc2UKLS0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIiV7bWFiaT1lbGZ2MjovbGliNjQvbGQ2NC5zby4yOzovbGliNjQvbGQ2NC5zby4xfSIKLSsjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIiV7bWFiaT1lbGZ2MjoiIFNZU1RFTUxJQlNfRElSICJsZDY0LnNvLjI7OiIgU1lTVEVNTElCU19ESVIgImxkNjQuc28uMX0iCi0gI2VuZGlmCi0tI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKLS0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliL2xkNjQtdUNsaWJjLnNvLjAiCi0rI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCi0rI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMCIKLSAjaWYgREVGQVVMVF9MSUJDID09IExJQkNfVUNMSUJDCi0gI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSkgIiV7bWdsaWJjOiIgRyAiOzoiIFUgIn0iCi0gI2VsaWYgREVGQVVMVF9MSUJDID09IExJQkNfR0xJQkMKLWRpZmYgLS1naXQgYS9nY2MvY29uZmlnL3NoL2xpbnV4LmggYi9nY2MvY29uZmlnL3NoL2xpbnV4LmgKLWluZGV4IDBmNWQ2MTQuLjE2ODQxNmMgMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlnL3NoL2xpbnV4LmgKLSsrKyBiL2djYy9jb25maWcvc2gvbGludXguaAotQEAgLTQzLDcgKzQzLDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKLSAKLSAjZGVmaW5lIFRBUkdFVF9BU01fRklMRV9FTkQgZmlsZV9lbmRfaW5kaWNhdGVfZXhlY19zdGFjawotIAotLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKLSsjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgotIAotICN1bmRlZiBTVUJUQVJHRVRfTElOS19FTVVMX1NVRkZJWAotICNkZWZpbmUgU1VCVEFSR0VUX0xJTktfRU1VTF9TVUZGSVggIl9saW51eCIKLWRpZmYgLS1naXQgYS9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmggYi9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgKLWluZGV4IDU2ZGVmNGIuLjAwYjU2NGMgMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgKLSsrKyBiL2djYy9jb25maWcvc3BhcmMvbGludXguaAotQEAgLTgzLDcgKzgzLDcgQEAgZXh0ZXJuIGNvbnN0IGNoYXIgKmhvc3RfZGV0ZWN0X2xvY2FsX2NwdSAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKLSAgICBXaGVuIHRoZSAtc2hhcmVkIGxpbmsgb3B0aW9uIGlzIHVzZWQgYSBmaW5hbCBsaW5rIGlzIG5vdCBiZWluZwotICAgIGRvbmUuICAqLwotIAotLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKLSsjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgotIAotICN1bmRlZiAgTElOS19TUEVDCi0gI2RlZmluZSBMSU5LX1NQRUMgIi1tIGVsZjMyX3NwYXJjICV7c2hhcmVkOi1zaGFyZWR9IFwKLWRpZmYgLS1naXQgYS9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaCBiL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCi1pbmRleCBmYTgwNWZkLi4wZWI0YWNkIDEwMDY0NAotLS0tIGEvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgKLSsrKyBiL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCi1AQCAtODQsOCArODQsOCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQotICAgIFdoZW4gdGhlIC1zaGFyZWQgbGluayBvcHRpb24gaXMgdXNlZCBhIGZpbmFsIGxpbmsgaXMgbm90IGJlaW5nCi0gICAgZG9uZS4gICovCi0gCi0tI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLWxpbnV4LnNvLjIiCi0tI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliNjQvbGQtbGludXguc28uMiIKLSsjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCi0rI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgotIAotICNpZmRlZiBTUEFSQ19CSV9BUkNICi0gCi0tLSAKLTIuNi4zCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyMy1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMjMtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTkxYzllLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyMy1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi1Gcm9tIDk3MDFmNTk2YmJlNWJmNTFiYmY0ODY2MWJjNTE1YjQ1ZDRiNmY0ZDIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyNjozNyArMDQwMAotU3ViamVjdDogW1BBVENIIDIzLzQ2XSBnY2M6IEZpeCBhcmd1bWVudCBsaXN0IHRvbyBsb25nIGVycm9yLgotCi1UaGVyZSB3b3VsZCBiZSBhbiAiQXJndW1lbnQgbGlzdCB0b28gbG9uZyIgZXJyb3Igd2hlbiB0aGUKLWJ1aWxkIGRpcmVjdG9yeSBpcyBsb25nZXIgdGhhbiAyMDAsIHRoaXMgaXMgY2F1c2VkIGJ5OgotCi1oZWFkZXJzPWBlY2hvICQoUExVR0lOX0hFQURFUlMpIHwgdHIgJyAnICdcMDEyJyB8IHNvcnQgLXVgCi0KLVRoZSBQTFVHSU5fSEVBREVSUyBpcyB0b28gbG9uZyBiZWZvcmUgc29ydCwgc28gdGhlICJlY2hvIiBjYW4ndCBoYW5kbGUKLWl0LCB1c2UgdGhlICQoc29ydCBsaXN0KSBvZiBHTlUgbWFrZSB3aGljaCBjYW4gaGFuZGxlIHRoZSB0b28gbG9uZyBsaXN0Ci13b3VsZCBmaXggdGhlIHByb2JsZW0sIHRoZSBoZWFkZXIgd291bGQgYmUgc2hvcnQgZW5vdWdoIGFmdGVyIHNvcnRlZC4KLVRoZSAidHIgJyAnICdcMDEyJyIgd2FzIHVzZWQgZm9yIHRyYW5zbGF0aW5nIHRoZSBzcGFjZSB0byAiXG4iLCB0aGUKLSQoc29ydCBsaXN0KSBkb2Vzbid0IG5lZWQgdGhpcy4KLQotU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLS0tLQotIGdjYy9NYWtlZmlsZS5pbiB8IDIgKy0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5pbgotaW5kZXggZTFlNjNlOC4uN2I0OWY4OCAxMDA2NDQKLS0tLSBhL2djYy9NYWtlZmlsZS5pbgotKysrIGIvZ2NjL01ha2VmaWxlLmluCi1AQCAtMzI2Miw3ICszMjYyLDcgQEAgaW5zdGFsbC1wbHVnaW46IGluc3RhbGxkaXJzIGxhbmcuaW5zdGFsbC1wbHVnaW4gcy1oZWFkZXItdmFycyBpbnN0YWxsLWdlbmd0eXBlCi0gIyBXZSBrZWVwIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBmaWxlcyBpbiBjb25maWcgb3IgYy1mYW1pbHkgYW5kIC5kZWYKLSAjIGZpbGVzLiBBbGwgb3RoZXIgZmlsZXMgYXJlIGZsYXR0ZW5lZCB0byBhIHNpbmdsZSBkaXJlY3RvcnkuCi0gCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQocGx1Z2luX2luY2x1ZGVkaXIpCi0tCWhlYWRlcnM9YGVjaG8gJChQTFVHSU5fSEVBREVSUykgJCQoY2QgJChzcmNkaXIpOyBlY2hvICouaCAqLmRlZikgfCB0ciAnICcgJ1wwMTInIHwgc29ydCAtdWA7IFwKLSsJaGVhZGVycz0iJChzb3J0ICQoUExVR0lOX0hFQURFUlMpICQkKGNkICQoc3JjZGlyKTsgZWNobyAqLmggKi5kZWYpKSI7IFwKLSAJc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYDsgXAotIAlmb3IgZmlsZSBpbiAkJGhlYWRlcnM7IGRvIFwKLSAJICBpZiBbIC1mICQkZmlsZSBdIDsgdGhlbiBcCi0tLSAKLTIuNi4zCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyNC1EaXNhYmxlLXNkdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyNC1EaXNhYmxlLXNkdC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjIzY2U5Ny4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMjQtRGlzYWJsZS1zZHQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotRnJvbSA5NDZlMDQ3NjE0MTAzZTFmMjk4MjYxM2M3YWE1Zjc2NTg3NTAwYzBlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6Mjg6MTAgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAyNC80Nl0gRGlzYWJsZSBzZHQuCi0KLVdlIGRvbid0IGxpc3QgZHRyYWNlIGluIERFUEVORFMgc28gd2Ugc2hvdWxkbid0IGJlIGRlcGVuZGluZyBvbiB0aGlzIGhlYWRlci4KLUl0IG1heSBvciBtYXkgbm90IGV4aXN0IGZyb20gcHJlaXZvdXMgYnVpbGRzIHRob3VnaC4gVG8gYmUgZGV0ZXJtaW5zdGljLCBkaXNhYmxlCi1zZHQuaCB1c2FnZSBhbHdheXMuIFRoaXMgYXZvaWRzIGJ1aWxkIGZhaWx1cmVzIGlmIHRoZSBoZWFkZXIgaXMgcmVtb3ZlZCBhZnRlciBjb25maWd1cmUKLWJ1dCBiZWZvcmUgbGliZ2NjIGlzIGNvbXBpbGVkIGZvciBleGFtcGxlLgotCi1SUCAyMDEyLzgvNwotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1EaXNhYmxlIHNkdCBmb3IgbGlic3RkYysrLXYzLgotCi1TaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtoYWNrXQotLS0tCi0gZ2NjL2NvbmZpZ3VyZSAgICAgICAgICAgICB8IDEyICsrKysrKy0tLS0tLQotIGdjYy9jb25maWd1cmUuYWMgICAgICAgICAgfCAxOCArKysrKysrKystLS0tLS0tLS0KLSBsaWJzdGRjKystdjMvY29uZmlndXJlICAgIHwgIDYgKysrLS0tCi0gbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYyB8ICAyICstCi0gNCBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCi1pbmRleCA4ZWMzZDQwLi5lYWEzYjA3IDEwMDc1NQotLS0tIGEvZ2NjL2NvbmZpZ3VyZQotKysrIGIvZ2NjL2NvbmZpZ3VyZQotQEAgLTI3ODU3LDEyICsyNzg1NywxMiBAQCBmaQotIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5IiA+JjUKLSAkYXNfZWNob19uICJjaGVja2luZyBzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkuLi4gIiA+JjY7IH0KLSBoYXZlX3N5c19zZHRfaD1ubwotLWlmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgotLSAgaGF2ZV9zeXNfc2R0X2g9eWVzCi0tCi0tJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCi0tCi0tZmkKLSsjaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCi0rIyAgaGF2ZV9zeXNfc2R0X2g9eWVzCi0rIwotKyMkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKLSsjCi0rI2ZpCi0geyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXZlX3N5c19zZHRfaCIgPiY1Ci0gJGFzX2VjaG8gIiRoYXZlX3N5c19zZHRfaCIgPiY2OyB9Ci0gCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKLWluZGV4IDY0M2E0N2UuLjlmNmNhY2IgMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlndXJlLmFjCi0rKysgYi9nY2MvY29uZmlndXJlLmFjCi1AQCAtNTMxNSwxNSArNTMxNSwxNSBAQCBpZiB0ZXN0IHgkZ2NjX2N2X2xpYmNfcHJvdmlkZXNfc3NwID0geHllczsgdGhlbgotIGZpCi0gCi0gIyBUZXN0IGZvciA8c3lzL3NkdC5oPiBvbiB0aGUgdGFyZ2V0LgotLUdDQ19UQVJHRVRfVEVNUExBVEUoW0hBVkVfU1lTX1NEVF9IXSkKLS1BQ19NU0dfQ0hFQ0tJTkcoc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5KQotLWhhdmVfc3lzX3NkdF9oPW5vCi0taWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCi0tICBoYXZlX3N5c19zZHRfaD15ZXMKLS0gIEFDX0RFRklORShIQVZFX1NZU19TRFRfSCwgMSwKLS0gICAgICAgICAgICBbRGVmaW5lIGlmIHlvdXIgdGFyZ2V0IEMgbGlicmFyeSBwcm92aWRlcyBzeXMvc2R0LmhdKQotLWZpCi0tQUNfTVNHX1JFU1VMVCgkaGF2ZV9zeXNfc2R0X2gpCi0rI0dDQ19UQVJHRVRfVEVNUExBVEUoW0hBVkVfU1lTX1NEVF9IXSkKLSsjQUNfTVNHX0NIRUNLSU5HKHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSkKLSsjaGF2ZV9zeXNfc2R0X2g9bm8KLSsjaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCi0rIyAgaGF2ZV9zeXNfc2R0X2g9eWVzCi0rIyAgQUNfREVGSU5FKEhBVkVfU1lTX1NEVF9ILCAxLAotKyMgICAgICAgICAgICBbRGVmaW5lIGlmIHlvdXIgdGFyZ2V0IEMgbGlicmFyeSBwcm92aWRlcyBzeXMvc2R0LmhdKQotKyNmaQotKyNBQ19NU0dfUkVTVUxUKCRoYXZlX3N5c19zZHRfaCkKLSAKLSAjIENoZWNrIGlmIFRGbW9kZSBsb25nIGRvdWJsZSBzaG91bGQgYmUgdXNlZCBieSBkZWZhdWx0IG9yIG5vdC4KLSAjIFNvbWUgZ2xpYmMgdGFyZ2V0cyB1c2VkIERGbW9kZSBsb25nIGRvdWJsZSwgYnV0IHdpdGggZ2xpYmMgMi40Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKLWluZGV4IDIxNzAxMmUuLjgxMjQwYjkgMTAwNzU1Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCi1AQCAtMjA5NjQsMTEgKzIwOTY0LDExIEBAIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLSBhY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotIGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLSAKLS0gIGlmIHRlc3QgJGdsaWJjeHhfY3Zfc3lzX3NkdF9oID0geWVzOyB0aGVuCi0rIyAgaWYgdGVzdCAkZ2xpYmN4eF9jdl9zeXNfc2R0X2ggPSB5ZXM7IHRoZW4KLSAKLS0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKLSsjJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCi0gCi0tICBmaQotKyMgIGZpCi0gICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsaWJjeHhfY3Zfc3lzX3NkdF9oIiA+JjUKLSAkYXNfZWNobyAiJGdsaWJjeHhfY3Zfc3lzX3NkdF9oIiA+JjY7IH0KLSAKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlLmFjIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYwotaW5kZXggNTgwZmI4Yi4uNWE0MTA4MyAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMKLUBAIC0yMzAsNyArMjMwLDcgQEAgR0xJQkNYWF9DSEVDS19TQ19OUFJPQ0VTU09SU19PTkxOCi0gR0xJQkNYWF9DSEVDS19TQ19OUFJPQ19PTkxOCi0gR0xJQkNYWF9DSEVDS19QVEhSRUFEU19OVU1fUFJPQ0VTU09SU19OUAotIEdMSUJDWFhfQ0hFQ0tfU1lTQ1RMX0hXX05DUFUKLS1HTElCQ1hYX0NIRUNLX1NEVF9ICi0rI0dMSUJDWFhfQ0hFQ0tfU0RUX0gKLSAKLSAjIENoZWNrIGZvciBhdmFpbGFibGUgaGVhZGVycy4KLSBBQ19DSEVDS19IRUFERVJTKFtlbmRpYW4uaCBleGVjaW5mby5oIGZsb2F0LmggZnAuaCBpZWVlZnAuaCBpbnR0eXBlcy5oIFwKLS0tIAotMi42LjMKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDI1LWxpYnRvb2wucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMjUtbGlidG9vbC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ1ZWI5Ny4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMjUtbGlidG9vbC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLUZyb20gZjY4YzViNzg3NTE2NjA1MDViMjJiNDZkYWQ5OTI0MGRiMGRmMzQ1NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI5OjExICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMjUvNDZdIGxpYnRvb2wKLQotbGlic3RkYysrIGZyb20gZ2NjLXJ1bnRpbWUgZ2V0cyBjcmVhdGVkIHdpdGggLXJwYXRoPS91c3IvbGliLy4uL2xpYiBmb3IgcWVtdXg4Ni02NAotd2hlbiBydW5uaW5nIG9uIGFtIHg4Nl82NCBidWlsZCBob3N0LgotCi1UaGlzIHBhdGNoIHN0b3BzIHRoaXMgc3BlYWRpbmcgdG8gbGliZGlyIGluIHRoZSBsaWJzdGRjKysubGEgZmlsZSB3aXRoaW4gbGlidG9vbC4KLUFyZ3VhYmx5LCBpdCBzaG91bGRuJ3QgYmUgcGFzc2luZyB0aGlzIGludG8gbGlidG9vbCBpbiB0aGUgZmlyc3QgcGxhY2UgYnV0Ci1mb3Igbm93IHRoaXMgcmVzb2x2ZXMgdGhlIG5hc3RpZXN0IHByb2JsZW1zIHRoaXMgY2F1c2VzLgotCi1mdW5jX25vcm1hbF9hYnNwYXRoIHdvdWxkIHJlc29sdmUgYW4gZW1wdHkgcGF0aCB0byBgcHdkYCBzbyB3ZSBuZWVkCi10byBmaWx0ZXIgdGhlIHplcm8gY2FzZS4KLQotUlAgMjAxMi84LzI0Ci0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gbHRtYWluLnNoIHwgNCArKysrCi0gMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCi1pbmRleCA5NTAzZWM4Li4wMTIxZmJhIDEwMDY0NAotLS0tIGEvbHRtYWluLnNoCi0rKysgYi9sdG1haW4uc2gKLUBAIC02MzU5LDYgKzYzNTksMTAgQEAgZnVuY19tb2RlX2xpbmsgKCkKLSAJZnVuY193YXJuaW5nICJpZ25vcmluZyBtdWx0aXBsZSBcYC1ycGF0aCdzIGZvciBhIGxpYnRvb2wgbGlicmFyeSIKLSAKLSAgICAgICBpbnN0YWxsX2xpYmRpcj0iJDEiCi0rICAgICAgaWYgdGVzdCAtbiAiJGluc3RhbGxfbGliZGlyIjsgdGhlbgotKwlmdW5jX25vcm1hbF9hYnNwYXRoICIkaW5zdGFsbF9saWJkaXIiCi0rCWluc3RhbGxfbGliZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAotKyAgICAgIGZpCi0gCi0gICAgICAgb2xkbGlicz0KLSAgICAgICBpZiB0ZXN0IC16ICIkcnBhdGgiOyB0aGVuCi0tLSAKLTIuNi4zCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyNi1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDI2LWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMmQ5NWYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDI2LWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi1Gcm9tIDRjNzVlMzQ5YWE3YWJkMWUyODU3MjAzMjhiMjM2OTA2MzZiZWEyNDIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTozMDozMiArMDQwMAotU3ViamVjdDogW1BBVENIIDI2LzQ2XSBnY2M6IGFybXY0OiBwYXNzIGZpeC12NGJ4IHRvIGxpbmtlciB0byBzdXBwb3J0IEVBQkkuCi0KLVRoZSBMSU5LX1NQRUMgZm9yIGxpbnV4IGdldHMgb3ZlcndyaXR0ZW4gYnkgbGludXgtZWFiaS5oIHdoaWNoCi1tZWFucyB0aGUgdmFsdWUgb2YgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgZ2V0cyBsb3N0IGFuZCBhcyBhIHJlc3VsdAotdGhlIG9wdGlvbiBpcyBub3QgcGFzc2VkIHRvIGxpbmtlciB3aGVuIGNob3NpbmcgbWFyY2g9YXJtdjQKLVRoaXMgcGF0Y2ggcmVkZWZpbmVzIHRoaXMgaW4gbGludXgtZWFiaS5oIGFuZCByZWluc2VydHMgaXQKLWZvciBlYWJpIGRlZmF1bHRpbmcgdG9vbGNoYWlucy4KLQotV2UgbWlnaHQgd2FudCB0byBzZW5kIGl0IHVwc3RyZWFtLgotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLS0tLQotIGdjYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCB8IDYgKysrKystCi0gMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCi1pbmRleCBjZmRmM2YwLi4wNDhhMDYyIDEwMDY0NAotLS0tIGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCi0rKysgYi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKLUBAIC03NywxMCArNzcsMTQgQEAKLSAgICAgJXttZmxvYXQtYWJpPXNvZnQqOiIgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVCAifSBcCi0gICAgICV7IW1mbG9hdC1hYmk9KjoiIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgIn0iCi0gCi0rLyogRm9yIGFybXY0IHdlIHBhc3MgLS1maXgtdjRieCB0byBsaW5rZXIgdG8gc3VwcG9ydCBFQUJJICovCi0rI3VuZGVmIFRBUkdFVF9GSVhfVjRCWF9TUEVDCi0rI2RlZmluZSBUQVJHRVRfRklYX1Y0QlhfU1BFQyAiJXttY3B1PWFybTh8bWNwdT1hcm04MTB8bWNwdT1zdHJvbmdhcm0qfG1hcmNoPWFybXY0OiAtLWZpeC12NGJ4fSIKLSsKLSAvKiBBdCB0aGlzIHBvaW50LCBicGFiaS5oIHdpbGwgaGF2ZSBjbG9iYmVyZWQgTElOS19TUEVDLiAgV2Ugd2FudCB0bwotICAgIHVzZSB0aGUgR05VL0xpbnV4IHZlcnNpb24sIG5vdCB0aGUgZ2VuZXJpYyBCUEFCSSB2ZXJzaW9uLiAgKi8KLSAjdW5kZWYgIExJTktfU1BFQwotLSNkZWZpbmUgTElOS19TUEVDIEVBQklfTElOS19TUEVDCQkJCQlcCi0rI2RlZmluZSBMSU5LX1NQRUMgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgRUFCSV9MSU5LX1NQRUMJCQlcCi0gICBMSU5VWF9PUl9BTkRST0lEX0xEIChMSU5VWF9UQVJHRVRfTElOS19TUEVDLAkJCQlcCi0gCQkgICAgICAgTElOVVhfVEFSR0VUX0xJTktfU1BFQyAiICIgQU5EUk9JRF9MSU5LX1NQRUMpCi0gCi0tLSAKLTIuNi4zCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyNy1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDI3LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ODE1ZDEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDI3LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotRnJvbSA4MjE3ZGQ3ZmIzMThmOWFiYzY1NjRmNjdiNDI0YzQzM2Q4Mzk4ZDYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MzM6MDQgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAyNy80Nl0gVXNlIHRoZSBtdWx0aWxpYiBjb25maWcgZmlsZXMgZnJvbSAke0J9IGluc3RlYWQgb2YKLSB1c2luZyB0aGUgb25lcyBmcm9tICR7U30KLQotVXNlIHRoZSBtdWx0aWxpYiBjb25maWcgZmlsZXMgZnJvbSAke0J9IGluc3RlYWQgb2YgdXNpbmcgdGhlIG9uZXMgZnJvbSAke1N9Ci1zbyB0aGF0IHRoZSBzb3VyY2UgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGdjYy1jcm9zcy1pbml0aWFsLAotZ2NjLWNyb3NzLWludGVybWVkaWF0ZSwgZ2NjLWNyb3NzLCBnY2MtcnVudGltZSwgYW5kIGFsc28gdGhlIHNkayBidWlsZC4KLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLVNpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQotLS0tCi0gZ2NjL2NvbmZpZ3VyZSAgICB8IDIyICsrKysrKysrKysrKysrKysrKy0tLS0KLSBnY2MvY29uZmlndXJlLmFjIHwgMjIgKysrKysrKysrKysrKysrKysrLS0tLQotIDIgZmlsZXMgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCi1pbmRleCBlYWEzYjA3Li45YjYwYWFkIDEwMDc1NQotLS0tIGEvZ2NjL2NvbmZpZ3VyZQotKysrIGIvZ2NjL2NvbmZpZ3VyZQotQEAgLTExODMwLDEwICsxMTgzMCwyMCBAQCBkb25lCi0gdG1ha2VfZmlsZV89Ci0gZm9yIGYgaW4gJHt0bWFrZV9maWxlfQotIGRvCi0tCWlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgotLQl0aGVuCi0tCQl0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCi0tCWZpCi0rICBjYXNlICRmIGluCi0rICAgICovdC1saW51eDY0ICkKLSsgICAgICAgaWYgdGVzdCAtZiAuL2NvbmZpZy8kZgotKyAgICAgICB0aGVuCi0rICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IC4vY29uZmlnLyRmIgotKyAgICAgICBmaQotKyAgICAgICA7OwotKyAgICAqICkKLSsgICAgICAgaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCi0rICAgICAgIHRoZW4KLSsgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCi0rICAgICAgIGZpCi0rICAgICAgIDs7Ci0rICBlc2FjCi0gZG9uZQotIHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZV99IgotIAotQEAgLTExODQ0LDYgKzExODU0LDEwIEBAIHRtX2ZpbGVfbGlzdD0ib3B0aW9ucy5oIgotIHRtX2luY2x1ZGVfbGlzdD0ib3B0aW9ucy5oIGluc24tY29uc3RhbnRzLmgiCi0gZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCi0gICBjYXNlICRmIGluCi0rICAgICovbGludXg2NC5oICkKLSsgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi9jb25maWcvJGYiCi0rICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vY29uZmlnLyRmIgotKyAgICAgICA7OwotICAgICAuLyogKQotICAgICAgICBmPWBlY2hvICRmIHwgc2VkICdzL14uLi8vJ2AKLSAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gJGYiCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKLWluZGV4IDlmNmNhY2IuLmUxZTU0ZjIgMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlndXJlLmFjCi0rKysgYi9nY2MvY29uZmlndXJlLmFjCi1AQCAtMTgxMiwxMCArMTgxMiwyMCBAQCBkb25lCi0gdG1ha2VfZmlsZV89Ci0gZm9yIGYgaW4gJHt0bWFrZV9maWxlfQotIGRvCi0tCWlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgotLQl0aGVuCi0tCQl0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCi0tCWZpCi0rICBjYXNlICRmIGluCi0rICAgICovdC1saW51eDY0ICkKLSsgICAgICAgaWYgdGVzdCAtZiAuL2NvbmZpZy8kZgotKyAgICAgICB0aGVuCi0rICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IC4vY29uZmlnLyRmIgotKyAgICAgICBmaQotKyAgICAgICA7OwotKyAgICAqICkKLSsgICAgICAgaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCi0rICAgICAgIHRoZW4KLSsgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCi0rICAgICAgIGZpCi0rICAgICAgIDs7Ci0rICBlc2FjCi0gZG9uZQotIHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZV99IgotIAotQEAgLTE4MjYsNiArMTgzNiwxMCBAQCB0bV9maWxlX2xpc3Q9Im9wdGlvbnMuaCIKLSB0bV9pbmNsdWRlX2xpc3Q9Im9wdGlvbnMuaCBpbnNuLWNvbnN0YW50cy5oIgotIGZvciBmIGluICR0bV9maWxlOyBkbwotICAgY2FzZSAkZiBpbgotKyAgICAqL2xpbnV4NjQuaCApCi0rICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vY29uZmlnLyRmIgotKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuL2NvbmZpZy8kZiIKLSsgICAgICAgOzsKLSAgICAgLi8qICkKLSAgICAgICAgZj1gZWNobyAkZiB8IHNlZCAncy9eLi4vLydgCi0gICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9ICRmIgotLS0gCi0yLjYuMwotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMjgtQXZvaWQtdXNpbmctbGliZGlyLWZyb20tLmxhLXdoaWNoLXVzdWFsbHktcG9pbnRzLXRvLS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyOC1Bdm9pZC11c2luZy1saWJkaXItZnJvbS0ubGEtd2hpY2gtdXN1YWxseS1wb2ludHMtdG8tLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGRkZDljLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyOC1Bdm9pZC11c2luZy1saWJkaXItZnJvbS0ubGEtd2hpY2gtdXN1YWxseS1wb2ludHMtdG8tLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotRnJvbSAwOGEwZTQ1YjMwOGZjOTdkMDZmNWMzZWY3N2EyNTdlN2E2YmQxYTQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjAgRmViIDIwMTUgMDk6Mzk6MzggKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAyOC80Nl0gQXZvaWQgdXNpbmcgbGliZGlyIGZyb20gLmxhIHdoaWNoIHVzdWFsbHkgcG9pbnRzIHRvIGEKLSBob3N0IHBhdGgKLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KLQotU2lnbmVkLW9mZi1ieTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotIGx0bWFpbi5zaCB8IDMgKysrCi0gMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCi1pbmRleCAwMTIxZmJhLi41MmJkYmRiIDEwMDY0NAotLS0tIGEvbHRtYWluLnNoCi0rKysgYi9sdG1haW4uc2gKLUBAIC01NjI4LDYgKzU2MjgsOSBAQCBmdW5jX21vZGVfbGluayAoKQotIAkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgotIAkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgotIAkgIGVsc2UKLSsJICAgICMgSW5zdGVhZCBvZiB1c2luZyBsaWJkaXIgZnJvbSAubGEgd2hpY2ggdXN1YWxseSBwb2ludHMgdG8gYSBob3N0IHBhdGgsCi0rCSAgICAjIHVzZSB0aGUgcGF0aCB0aGUgLmxhIGlzIGNvbnRhaW5lZCBpbi4KLSsJICAgIGxpYmRpcj0iJGFic19sYWRpciIKLSAJICAgIGRpcj0iJGxpYmRpciIKLSAJICAgIGFic2Rpcj0iJGxpYmRpciIKLSAJICBmaQotLS0gCi0yLjYuMwotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMjktZXhwb3J0LUNQUC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyOS1leHBvcnQtQ1BQLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjE5NWFhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAyOS1leHBvcnQtQ1BQLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotRnJvbSA5NWY0OTRkMTU0NDg1N2FkMzg5NDlhN2RhMzdlMmQ3MjY0NDc1MjMzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjAgRmViIDIwMTUgMDk6NDA6NTkgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAyOS80Nl0gZXhwb3J0IENQUAotCi1UaGUgT0UgZW52aXJvbm1lbnQgc2V0cyBhbmQgZXhwb3J0cyBDUFAgYXMgYmVpbmcgdGhlIHRhcmdldCBnY2MuIFdoZW4KLWJ1aWxkaW5nIGdjYy1jcm9zcy1jYW5hZGlhbiBmb3IgYSBtaW5ndyB0YXJnZXR0ZWQgc2RrLCB0aGUgZm9sbG93aW5nIGNhbiBiZSBmb3VuZAotaW4gYnVpbGQueDg2XzY0LXBva3lzZGstbWluZ3czMi5pNTg2LXBva3ktbGludXgvYnVpbGQteDg2XzY0LWxpbnV4L2xpYmliZXJ0eS9jb25maWcubG9nOgotCi1jb25maWd1cmU6MzY0MTogY2hlY2tpbmcgZm9yIF9GSUxFX09GRlNFVF9CSVRTIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMKLWNvbmZpZ3VyZTozNjY2OiBnY2MgIC1jIC1pc3lzdGVtL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLU8yIC1waXBlICBjb25mdGVzdC5jID4mNQotY29uZmlndXJlOjM2NjY6ICQ/ID0gMAotY29uZmlndXJlOjM2OTg6IHJlc3VsdDogbm8KLWNvbmZpZ3VyZTozNzg2OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvcgotY29uZmlndXJlOjM4NTY6IHJlc3VsdDogeDg2XzY0LXBva3lzZGstbWluZ3czMi1nY2MgLUUgLS1zeXNyb290PS9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LW5hdGl2ZXNkay1taW5ndzMyLXBva3lzZGstbWluZ3czMgotY29uZmlndXJlOjM4NzY6IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjIC1FIC0tc3lzcm9vdD0vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1uYXRpdmVzZGstbWluZ3czMi1wb2t5c2RrLW1pbmd3MzIgY29uZnRlc3QuYwotY29uZmlndXJlOjM4NzY6ICQ/ID0gMAotCi1Ob3RlIHRoaXMgaXMgYSAqYnVpbGQqIHRhcmdldCAoaW4gYnVpbGQteDg2XzY0LWxpbnV4KSBzbyBpdCBzaG91bGQgYmUKLXVzaW5nIHRoZSBob3N0ICJnY2MiLCBub3QgeDg2XzY0LXBva3lzZGstbWluZ3czMi1nY2MuIFNpbmNlIHRoZSBtaW5ndzMyCi1oZWFkZXJzIGFyZSB2ZXJ5IGRpZmZlcmVudCwgdXNpbmcgdGhlIHdyb25nIGNwcCBpcyBhIHJlYWwgcHJvYmxlbS4gSXQgaXMgbGVha2luZwotaW50byBjb25maWd1cmUgdGhyb3VnaCB0aGUgQ1BQIHZhcmlhYmxlLiBVbHRpbWF0ZWx5IHRoaXMgbGVhZHMgdG8gYnVpbGQKLWZhaWx1cmVzIHJlbGF0ZWQgdG8gbm90IGJlaW5nIGFibGUgdG8gaW5jbHVkZSBhIHByb2Nlc3MuaCBmaWxlIGZvciBwZW0tdW5peC5jLgotCi1UaGUgZml4IGlzIHRvIGVuc3VyZSB3ZSBleHBvcnQgYSBzYW5lIENQUCB2YWx1ZSBpbnRvIHRoZSBidWlsZAotZW52aXJvbm1lbnQgd2hlbiB1c2luZyBidWlsZCB0YXJnZXRzLiBXZSBjb3VsZCBkZWZpbmUgYSBDUFBfRk9SX0JVSUxEIHZhbHVlIHdoaWNoIG1heSBiZQotdGhlIHZlcnNpb24gd2hpY2ggbmVlZHMgdG8gYmUgdXBzdHJlYW1lZCBidXQgZm9yIG5vdywgdGhpcyBmaXggaXMgZ29vZCBlbm91Z2ggdG8KLWF2b2lkIHRoZSBwcm9ibGVtLgotCi1SUCAyMi8wOC8yMDEzCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi0gTWFrZWZpbGUuaW4gfCAxICsKLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKLQotZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KLWluZGV4IDM2YjQwMDguLmE3ODNlMWUgMTAwNjQ0Ci0tLS0gYS9NYWtlZmlsZS5pbgotKysrIGIvTWFrZWZpbGUuaW4KLUBAIC0xNDksNiArMTQ5LDcgQEAgQlVJTERfRVhQT1JUUyA9IFwKLSAJQVI9IiQoQVJfRk9SX0JVSUxEKSI7IGV4cG9ydCBBUjsgXAotIAlBUz0iJChBU19GT1JfQlVJTEQpIjsgZXhwb3J0IEFTOyBcCi0gCUNDPSIkKENDX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0M7IFwKLSsJQ1BQPSIkKENDX0ZPUl9CVUlMRCkgLUUiOyBleHBvcnQgQ1BQOyBcCi0gCUNGTEFHUz0iJChDRkxBR1NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDRkxBR1M7IFwKLSAJQ09ORklHX1NIRUxMPSIkKFNIRUxMKSI7IGV4cG9ydCBDT05GSUdfU0hFTEw7IFwKLSAJQ1hYPSIkKENYWF9GT1JfQlVJTEQpIjsgZXhwb3J0IENYWDsgXAotLS0gCi0yLjYuMwotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzAtRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAzMC1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzA1MTg3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAzMC1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotRnJvbSA0ZWQ4YzFmZDlkYzA1ZjdhOWRiOTI5OGE1NTM5NmM4ZjBmZjU0OWE3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQWxleGFuZHJ1LUNlemFyIFNhcmRhbiA8YWxleGFuZHJ1LnNhcmRhbkBmcmVlc2NhbGUuY29tPgotRGF0ZTogV2VkLCA1IEZlYiAyMDE0IDE2OjUyOjMxICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggMzAvNDZdIEVuYWJsZSBTUEUgJiBBbHRpVmVjIGdlbmVyYXRpb24gb24gcG93ZXBjKmxpbnV4IHRhcmdldAotCi1XaGVuIGlzIGNvbmZpZ3VyZWQgd2l0aCAtLXRhcmdldD1wb3dlcnBjLWxpbnV4LCB0aGUgcmVzdWx0aW5nIEdDQyB3aWxsCi1ub3QgYmUgYWJsZSB0byBnZW5lcmF0ZSBjb2RlIGZvciBTUEUgdGFyZ2V0cyAoZTUwMHYxL3YyKS4KLUdDQyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eHNwZSB3aWxsIG5vdCBiZSBhYmxlIHRvCi1nZW5lcmF0ZSBBbHRpVmVjIGluc3RydWN0aW9ucyAoZm9yIGU2NTAwKS4KLVRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmZpZ3VyZWQgZmlsZSBzdWNoIHRoYXQgU1BFIG9yIEFsdGlWZWMgY29kZQotY2FuIGJlIGdlbmVyYXRlZCB3aGVuIGdjYyBpcyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eC4KLVRoZSBBQkkgYW5kIHNwZWNpZmZpYyBpbnN0cnVjdGlvbnMgY2FuIGJlIHNlbGVjdGVkIHRocm91Z2ggdGhlCi0iLW1hYmk9c3BlIG9yIC1tYWJpPWFsdGl2ZWMiIGFuZCB0aGUgIi1tc3BlIG9yIC1tYWx0aXZlYyIgcGFyYW1ldGVycy4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQotCi1TaWduZWQtb2ZmLWJ5OiBBbGV4YW5kcnUtQ2V6YXIgU2FyZGFuIDxhbGV4YW5kcnUuc2FyZGFuQGZyZWVzY2FsZS5jb20+Ci0tLS0KLSBnY2MvY29uZmlnLmdjYyB8IDkgKysrKysrKystCi0gMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQotCi1JbmRleDogZ2NjLTUuMy4wL2djYy9jb25maWcuZ2NjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTUuMy4wLm9yaWcvZ2NjL2NvbmZpZy5nY2MKLSsrKyBnY2MtNS4zLjAvZ2NjL2NvbmZpZy5nY2MKLUBAIC0yMzQ2LDcgKzIzNDYsMTQgQEAgcG93ZXJwYy0qLXJ0ZW1zKikKLSAJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSByczYwMDAvdC1mcHJ1bGVzIHJzNjAwMC90LXJ0ZW1zIHJzNjAwMC90LXBwY2NvbW0iCi0gCTs7Ci0gcG93ZXJwYyotKi1saW51eCopCi0tCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBnbnUtdXNlci5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIgotKwljYXNlICR7dGFyZ2V0fSBpbgotKwkgICAgcG93ZXJwYyotKi1saW51eCpzcGUqIHwgcG93ZXJwYyotKi1saW51eCphbHRpdmVjKikKLSsJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBnbnUtdXNlci5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIgotKwkJOzsKLSsJICAgICopCi0rCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieGVsZi5oIGVsZm9zLmggZ251LXVzZXIuaCBmcmVlYnNkLXNwZWMuaCByczYwMDAvc3lzdjQuaCByczYwMDAvbGludXhhbHRpdmVjLmggcnM2MDAwL2xpbnV4c3BlLmggcnM2MDAwL2U1MDAuaCIKLSsJCTs7Ci0rCWVzYWMKLSAJZXh0cmFfb3B0aW9ucz0iJHtleHRyYV9vcHRpb25zfSByczYwMDAvc3lzdjQub3B0IgotIAl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IHJzNjAwMC90LWZwcnVsZXMgcnM2MDAwL3QtcHBjY29tbSIKLSAJZXh0cmFfb2Jqcz0iJGV4dHJhX29ianMgcnM2MDAwLWxpbnV4Lm8iCi1JbmRleDogZ2NjLTUuMy4wL2djYy9jb25maWcvcnM2MDAwL2xpbnV4c3BlLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNS4zLjAub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9saW51eHNwZS5oCi0rKysgZ2NjLTUuMy4wL2djYy9jb25maWcvcnM2MDAwL2xpbnV4c3BlLmgKLUBAIC0yNyw2ICsyNywzIEBACi0gI3VuZGVmCVRBUkdFVF9ERUZBVUxUCi0gI2RlZmluZSBUQVJHRVRfREVGQVVMVCBNQVNLX1NUUklDVF9BTElHTgotICNlbmRpZgotLQotLSN1bmRlZiAgQVNNX0RFRkFVTFRfU1BFQwotLSNkZWZpbmUJQVNNX0RFRkFVTFRfU1BFQyAiLW1wcGMgLW1zcGUgLW1lNTAwIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDMxLURpc2FibGUtdGhlLU1VTFRJTElCX09TRElSTkFNRVMtYW5kLW90aGVyLW11bHRpbGliLW8ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzEtRGlzYWJsZS10aGUtTVVMVElMSUJfT1NESVJOQU1FUy1hbmQtb3RoZXItbXVsdGlsaWItby5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJiYzY2NC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzEtRGlzYWJsZS10aGUtTVVMVElMSUJfT1NESVJOQU1FUy1hbmQtb3RoZXItbXVsdGlsaWItby5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLUZyb20gYmI2ZmVhODIxNDgzYWEzMjU5YjM0ZTEwMWEzOWM5OTNlZGQwMTQxMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDIwIEZlYiAyMDE1IDEwOjIxOjU1ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMzEvNDZdIERpc2FibGUgdGhlIE1VTFRJTElCX09TRElSTkFNRVMgYW5kIG90aGVyIG11bHRpbGliCi0gb3B0aW9ucy4KLQotSGFyZCBjb2RpbmcgdGhlIE1VTFRJTElCX09TRElSTkFNRVMgd2l0aCAuLi9saWI2NCBpcyBjYXVzaW5nIHByb2JsZW1zIG9uCi1zeXN0ZW1zIHdoZXJlIHRoZSBsaWJkaXIgaXMgTk9UIHNldCB0byAvbGliNjQuICBUaGlzIGlzIGFsbG93ZWQgYnkgdGhlCi1BQkksIGFzCi1sb25nIGFzIHRoZSBkeW5hbWljIGxvYWRlciBpcyBwcmVzZW50IGluIC9saWIuCi0KLVdlIHNpbXBseSB3YW50IHRvIHVzZSB0aGUgZGVmYXVsdCBydWxlcyBpbiBnY2MgdG8gZmluZCBhbmQgY29uZmlndXJlIHRoZQotbm9ybWFsIGxpYmRpci4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlW09FLVNwZWNpZmljXQotCi1TaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi0gZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eCB8IDggKysrKy0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eCBiL2djYy9jb25maWcvYWFyY2g2NC90LWFhcmNoNjQtbGludXgKLWluZGV4IGMyOTYzNzYuLjNiYjU5YmYgMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvdC1hYXJjaDY0LWxpbnV4Ci0rKysgYi9nY2MvY29uZmlnL2FhcmNoNjQvdC1hYXJjaDY0LWxpbnV4Ci1AQCAtMjEsOCArMjEsOCBAQAotIExJQjFBU01TUkMgICA9IGFhcmNoNjQvbGliMWZ1bmNzLmFzbQotIExJQjFBU01GVU5DUyA9IF9hYXJjaDY0X3N5bmNfY2FjaGVfcmFuZ2UKLSAKLS1BQVJDSF9CRSA9ICQoaWYgJChmaW5kc3RyaW5nIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQ9MSwgJCh0bV9kZWZpbmVzKSksX2JlKQotLU1VTFRJTElCX09TRElSTkFNRVMgPSBtYWJpLmxwNjQ9Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDphYXJjaDY0JChBQVJDSF9CRSktbGludXgtZ251KQotLU1VTFRJQVJDSF9ESVJOQU1FID0gJChjYWxsIGlmX211bHRpYXJjaCxhYXJjaDY0JChBQVJDSF9CRSktbGludXgtZ251KQotKyNBQVJDSF9CRSA9ICQoaWYgJChmaW5kc3RyaW5nIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQ9MSwgJCh0bV9kZWZpbmVzKSksX2JlKQotKyNNVUxUSUxJQl9PU0RJUk5BTUVTID0gbWFiaS5scDY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6YWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKLSsjTVVMVElBUkNIX0RJUk5BTUUgPSAkKGNhbGwgaWZfbXVsdGlhcmNoLGFhcmNoNjQkKEFBUkNIX0JFKS1saW51eC1nbnUpCi0gCi0tTVVMVElMSUJfT1NESVJOQU1FUyArPSBtYWJpLmlscDMyPS4uL2xpYmlscDMyCi0rI01VTFRJTElCX09TRElSTkFNRVMgKz0gbWFiaS5pbHAzMj0uLi9saWJpbHAzMgotLS0gCi0yLjYuMwotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzItRW5zdXJlLXRhcmdldC1nY2MtaGVhZGVycy1jYW4tYmUtaW5jbHVkZWQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzItRW5zdXJlLXRhcmdldC1nY2MtaGVhZGVycy1jYW4tYmUtaW5jbHVkZWQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NTAzZmYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDMyLUVuc3VyZS10YXJnZXQtZ2NjLWhlYWRlcnMtY2FuLWJlLWluY2x1ZGVkLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotRnJvbSBiYjI2ZjkwZjVlMGFjY2MzNTM5ZjYyYjZmZWM2NjM2ODI5NTlkZDM2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjAgRmViIDIwMTUgMTA6MjU6MTEgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAzMi80Nl0gRW5zdXJlIHRhcmdldCBnY2MgaGVhZGVycyBjYW4gYmUgaW5jbHVkZWQKLQotVGhlcmUgYXJlIGEgZmV3IGhlYWRlcnMgaW5zdGFsbGVkIGFzIHBhcnQgb2YgdGhlIE9wZW5FbWJlZGRlZAotZ2NjLXJ1bnRpbWUgdGFyZ2V0IChvbXAuaCwgc3NwLyouaCkuIEJlaW5nIGluc3RhbGxlZCBmcm9tIGEgcmVjaXBlCi1idWlsdCBmb3IgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUsIHRoZXNlIGFyZSB3aXRoaW4gdGhlIHRhcmdldAotc3lzcm9vdCBhbmQgbm90IGNyb3NzL25hdGl2ZXNkazsgdGh1cyB0aGV5IHdlcmVuJ3QgYWJsZSB0byBiZQotZm91bmQgYnkgZ2NjIHdpdGggdGhlIGV4aXN0aW5nIHNlYXJjaCBwYXRocy4gQWRkIHN1cHBvcnQgZm9yCi1waWNraW5nIHVwIHRoZXNlIGhlYWRlcnMgdW5kZXIgdGhlIHN5c3Jvb3Qgc3VwcGxpZWQgb24gdGhlIGdjYwotY29tbWFuZCBsaW5lIGluIG9yZGVyIHRvIHJlc29sdmUgdGhpcy4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotIGdjYy9NYWtlZmlsZS5pbiAgfCAyICsrCi0gZ2NjL2NwcGRlZmF1bHQuYyB8IDQgKysrKwotIGdjYy9kZWZhdWx0cy5oICAgfCA5ICsrKysrKysrKwotIGdjYy9nY2MuYyAgICAgICAgfCA3IC0tLS0tLS0KLSA0IGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KLWluZGV4IDdiNDlmODguLmNkNWJjNGEgMTAwNjQ0Ci0tLS0gYS9nY2MvTWFrZWZpbGUuaW4KLSsrKyBiL2djYy9NYWtlZmlsZS5pbgotQEAgLTU4Miw2ICs1ODIsNyBAQCBsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi0gCi0gIyBEaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGNvbXBpbGVyIGZpbmRzIGxpYnJhcmllcyBldGMuCi0gbGlic3ViZGlyID0gJChsaWJkaXIpL2djYy8kKHJlYWxfdGFyZ2V0X25vbmNhbm9uaWNhbCkvJCh2ZXJzaW9uKSQoYWNjZWxfZGlyX3N1ZmZpeCkKLStsaWJzdWJkaXJfdGFyZ2V0ID0gZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJCh2ZXJzaW9uKQotICMgRGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21waWxlciBmaW5kcyBleGVjdXRhYmxlcwotIGxpYmV4ZWNzdWJkaXIgPSAkKGxpYmV4ZWNkaXIpL2djYy8kKHJlYWxfdGFyZ2V0X25vbmNhbm9uaWNhbCkvJCh2ZXJzaW9uKSQoYWNjZWxfZGlyX3N1ZmZpeCkKLSAjIERpcmVjdG9yeSBpbiB3aGljaCBhbGwgcGx1Z2luIHJlc291cmNlcyBhcmUgaW5zdGFsbGVkCi1AQCAtMjYxMCw2ICsyNjExLDcgQEAgQ0ZMQUdTLWludGwubyArPSAtRExPQ0FMRURJUj1cIiQobG9jYWxlZGlyKVwiCi0gCi0gUFJFUFJPQ0VTU09SX0RFRklORVMgPSBcCi0gICAtREdDQ19JTkNMVURFX0RJUj1cIiQobGlic3ViZGlyKS9pbmNsdWRlXCIgXAotKyAgLURHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUPVwiJChsaWJzdWJkaXJfdGFyZ2V0KS9pbmNsdWRlXCIgXAotICAgLURGSVhFRF9JTkNMVURFX0RJUj1cIiQobGlic3ViZGlyKS9pbmNsdWRlLWZpeGVkXCIgXAotICAgLURHUExVU1BMVVNfSU5DTFVERV9ESVI9XCIkKGdjY19neHhfaW5jbHVkZV9kaXIpXCIgXAotICAgLURHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1Q9JChnY2NfZ3h4X2luY2x1ZGVfZGlyX2FkZF9zeXNyb290KSBcCi1kaWZmIC0tZ2l0IGEvZ2NjL2NwcGRlZmF1bHQuYyBiL2djYy9jcHBkZWZhdWx0LmMKLWluZGV4IDU4MGMxYmEuLjAzYTAyODcgMTAwNjQ0Ci0tLS0gYS9nY2MvY3BwZGVmYXVsdC5jCi0rKysgYi9nY2MvY3BwZGVmYXVsdC5jCi1AQCAtNTksNiArNTksMTAgQEAgY29uc3Qgc3RydWN0IGRlZmF1bHRfaW5jbHVkZSBjcHBfaW5jbHVkZV9kZWZhdWx0c1tdCi0gICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzLiAgKi8KLSAgICAgeyBHQ0NfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCi0gI2VuZGlmCi0rI2lmZGVmIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQKLSsgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMgdW5kZXIgdGhlIHNwZWNpZmllZCBzeXNyb290LiAgKi8KLSsgICAgeyBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVCwgIkdDQyIsIDAsIDAsIDEsIDAgfSwKLSsjZW5kaWYKLSAjaWZkZWYgTE9DQUxfSU5DTFVERV9ESVIKLSAgICAgLyogL3Vzci9sb2NhbC9pbmNsdWRlIGNvbWVzIGJlZm9yZSB0aGUgZml4aW5jbHVkZWQgaGVhZGVyIGZpbGVzLiAgKi8KLSAgICAgeyBMT0NBTF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMSwgMiB9LAotZGlmZiAtLWdpdCBhL2djYy9kZWZhdWx0cy5oIGIvZ2NjL2RlZmF1bHRzLmgKLWluZGV4IDFkNTQ3OTguLjk4M2Q0NWUgMTAwNjQ0Ci0tLS0gYS9nY2MvZGVmYXVsdHMuaAotKysrIGIvZ2NjL2RlZmF1bHRzLmgKLUBAIC0xMzYxLDQgKzEzNjEsMTMgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCi0gCi0gI2VuZGlmIC8qIEdDQ19JTlNOX0ZMQUdTX0ggICovCi0gCi0rLyogRGVmYXVsdCBwcmVmaXhlcyB0byBhdHRhY2ggdG8gY29tbWFuZCBuYW1lcy4gICovCi0rCi0rI2lmbmRlZiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEKLSsjZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMSAiL2xpYi8iCi0rI2VuZGlmCi0rI2lmbmRlZiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIKLSsjZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiAiL3Vzci9saWIvIgotKyNlbmRpZgotKwotICNlbmRpZiAgLyogISBHQ0NfREVGQVVMVFNfSCAqLwotZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYwotaW5kZXggZTZlZmFlNy4uM2NhMjdiOSAxMDA2NDQKLS0tLSBhL2djYy9nY2MuYwotKysrIGIvZ2NjL2djYy5jCi1AQCAtMTI2MywxMyArMTI2Myw2IEBAIHN0YXRpYyBjb25zdCBjaGFyICpnY2NfbGliZXhlY19wcmVmaXg7Ci0gCi0gLyogRGVmYXVsdCBwcmVmaXhlcyB0byBhdHRhY2ggdG8gY29tbWFuZCBuYW1lcy4gICovCi0gCi0tI2lmbmRlZiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEKLS0jZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMSAiL2xpYi8iCi0tI2VuZGlmCi0tI2lmbmRlZiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIKLS0jZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiAiL3Vzci9saWIvIgotLSNlbmRpZgotLQotICNpZmRlZiBDUk9TU19ESVJFQ1RPUllfU1RSVUNUVVJFICAvKiBEb24ndCB1c2UgdGhlc2UgcHJlZml4ZXMgZm9yIGEgY3Jvc3MgY29tcGlsZXIuICAqLwotICN1bmRlZiBNRF9FWEVDX1BSRUZJWAotICN1bmRlZiBNRF9TVEFSVEZJTEVfUFJFRklYCi0tLSAKLTIuNi4zCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAzMy1nY2MtNC44LXdvbi10LWJ1aWxkLXdpdGgtZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDMzLWdjYy00Ljgtd29uLXQtYnVpbGQtd2l0aC1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZDQ4MGYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDMzLWdjYy00Ljgtd29uLXQtYnVpbGQtd2l0aC1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi1Gcm9tIDYyOWZjYzdkMDA3NWM5YjQyNjFkYTY0MzVlMTIyNDI5ZmIwMjhlYzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAxMToxNzoxOSArMDAwMAotU3ViamVjdDogW1BBVENIIDMzLzQ2XSBnY2MgNC44KyB3b24ndCBidWlsZCB3aXRoIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nCi0KLXNpbmNlIHRoZSAqLlBwbyBmaWxlcyBkb24ndCBnZXQgY3JlYXRlZCB1bmxlc3MgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyBpcyB0cnVlLgotCi1UaGlzIHBhdGNoIGVuc3VyZXMgd2Ugb25seSB1c2UgdGhvc2UgY29tcGlsZXIgb3B0aW9ucyB3aGVuIGl0cyBlbmFibGVkLgotCi1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAotCi0oUHJvYmxlbSB3YXMgYWxyZWFkeSByZXBvcnRlZCB1cHN0cmVhbSwgYXR0YWNoZWQgdGhpcyBwYXRjaCB0aGVyZQotaHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01NTkzMCkKLQotUlAKLTIwMTIvMDkvMjIKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotIGxpYmF0b21pYy9NYWtlZmlsZS5hbSB8IDMgKystCi0gbGliYXRvbWljL01ha2VmaWxlLmluIHwgMyArKy0KLSAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2xpYmF0b21pYy9NYWtlZmlsZS5hbSBiL2xpYmF0b21pYy9NYWtlZmlsZS5hbQotaW5kZXggM2Q4YWI2Mi4uMjNkZmY3ZSAxMDA2NDQKLS0tLSBhL2xpYmF0b21pYy9NYWtlZmlsZS5hbQotKysrIGIvbGliYXRvbWljL01ha2VmaWxlLmFtCi1AQCAtMTAxLDcgKzEwMSw4IEBAIFBBVF9TCQk9ICQod29yZCAzLCQoUEFUX1NQTElUKSkKLSBJRlVOQ19ERUYJPSAtRElGVU5DX0FMVD0kKFBBVF9TKQotIElGVU5DX09QVAk9ICQod29yZCAkKFBBVF9TKSwkKElGVU5DX09QVElPTlMpKQotIAotLU1fREVQUwkJPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbwotK0BBTURFUF9UUlVFQE1fREVQUwkJPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbwotK0BBTURFUF9GQUxTRUBNX0RFUFMJCT0KLSBNX1NJWkUJCT0gLUROPSQoUEFUX04pCi0gTV9JRlVOQwkJPSAkKGlmICQoUEFUX1MpLCQoSUZVTkNfREVGKSAkKElGVU5DX09QVCkpCi0gTV9GSUxFCQk9ICQoUEFUX0JBU0UpX24uYwotZGlmZiAtLWdpdCBhL2xpYmF0b21pYy9NYWtlZmlsZS5pbiBiL2xpYmF0b21pYy9NYWtlZmlsZS5pbgotaW5kZXggOTI4ODY1Mi4uMzcyMDI1NiAxMDA2NDQKLS0tLSBhL2xpYmF0b21pYy9NYWtlZmlsZS5pbgotKysrIGIvbGliYXRvbWljL01ha2VmaWxlLmluCi1AQCAtMzMwLDcgKzMzMCw4IEBAIFBBVF9OID0gJCh3b3JkIDIsJChQQVRfU1BMSVQpKQotIFBBVF9TID0gJCh3b3JkIDMsJChQQVRfU1BMSVQpKQotIElGVU5DX0RFRiA9IC1ESUZVTkNfQUxUPSQoUEFUX1MpCi0gSUZVTkNfT1BUID0gJCh3b3JkICQoUEFUX1MpLCQoSUZVTkNfT1BUSU9OUykpCi0tTV9ERVBTID0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KLStAQU1ERVBfVFJVRUBNX0RFUFMgPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbwotK0BBTURFUF9GQUxTRUBNX0RFUFMgPQotIE1fU0laRSA9IC1ETj0kKFBBVF9OKQotIE1fSUZVTkMgPSAkKGlmICQoUEFUX1MpLCQoSUZVTkNfREVGKSAkKElGVU5DX09QVCkpCi0gTV9GSUxFID0gJChQQVRfQkFTRSlfbi5jCi0tLSAKLTIuNi4zCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAzNC1Eb24tdC1zZWFyY2gtaG9zdC1kaXJlY3RvcnktZHVyaW5nLXJlbGluay1pZi1pbnN0X3ByLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDM0LURvbi10LXNlYXJjaC1ob3N0LWRpcmVjdG9yeS1kdXJpbmctcmVsaW5rLWlmLWluc3RfcHIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NTNmYTYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDM0LURvbi10LXNlYXJjaC1ob3N0LWRpcmVjdG9yeS1kdXJpbmctcmVsaW5rLWlmLWluc3RfcHIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi1Gcm9tIGE0ZWZjOWNhODU3MzRjMjgzZDRkYTA5YjYyODEyMWUxYzFmNDljNGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogVHVlLCAzIE1hciAyMDE1IDA4OjIxOjE5ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMzQvNDZdIERvbid0IHNlYXJjaCBob3N0IGRpcmVjdG9yeSBkdXJpbmcgInJlbGluayIgaWYKLSAkaW5zdF9wcmVmaXggaXMgcHJvdmlkZWQKLQotaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2xpYnRvb2wtcGF0Y2hlcy8yMDExLTAxL21zZzAwMDI2Lmh0bWwKLQotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotIGx0bWFpbi5zaCB8IDUgKysrLS0KLSAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCi1pbmRleCA1MmJkYmRiLi44MmJjZWMzIDEwMDY0NAotLS0tIGEvbHRtYWluLnNoCi0rKysgYi9sdG1haW4uc2gKLUBAIC02MDA0LDEyICs2MDA0LDEzIEBAIGZ1bmNfbW9kZV9saW5rICgpCi0gCSAgICAgIGZpCi0gCSAgICBlbHNlCi0gCSAgICAgICMgV2UgY2Fubm90IHNlZW0gdG8gaGFyZGNvZGUgaXQsIGd1ZXNzIHdlJ2xsIGZha2UgaXQuCi0rCSAgICAgICMgRGVmYXVsdCBpZiAkbGliZGlyIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcHJlZml4OgotIAkgICAgICBhZGRfZGlyPSItTCRsaWJkaXIiCi0tCSAgICAgICMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KLSsKLSAJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KLSAJCWNhc2UgJGxpYmRpciBpbgotIAkJICBbXFwvXSopCi0tCQkgICAgYWRkX2Rpcj0iJGFkZF9kaXIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKLSsJCSAgICBhZGRfZGlyPSItTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgotIAkJICAgIDs7Ci0gCQllc2FjCi0gCSAgICAgIGZpCi0tLSAKLTIuNi4zCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAzNS1Eb250LWxpbmstdGhlLXBsdWdpbnMtd2l0aC1saWJnb21wLWV4cGxpY2l0bHkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzUtRG9udC1saW5rLXRoZS1wbHVnaW5zLXdpdGgtbGliZ29tcC1leHBsaWNpdGx5LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZWQ1ODliLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAzNS1Eb250LWxpbmstdGhlLXBsdWdpbnMtd2l0aC1saWJnb21wLWV4cGxpY2l0bHkucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi1Gcm9tIDViMDEyNWE3OTI4NDJhZTAyZGY1MDdiYzU1NTU1NjYxY2IxMGY5YTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogU3VuLCA4IE1hciAyMDE1IDAzOjQxOjM5ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMzUvNDZdIERvbnQgbGluayB0aGUgcGx1Z2lucyB3aXRoIGxpYmdvbXAgZXhwbGljaXRseQotCi1UaGV5IGFyZSBkbG9wZW5lZCBieSBsaWJnb21wIGFueXdheS4gVGhpcyBmaXhlcwotdGhlIGxpYnRvb2wgcmVsaW5rIGlzc3VlIHdoaWNoIGNhdXNlcyBpc3N1ZXMgZHVyaW5nCi1jcm9zcyBjb21waWxhdGlvbgotCi1saWJ0b29sOiBpbnN0YWxsOiAvdXNyL2Jpbi9pbnN0YWxsIC1jIC5saWJzL2xpYmdvbXAubGFpCi0vaG9tZS91YnVudHUvd29yay9ibGVlZGluZy9idWlsZC1xZW11eDg2LTY0bWMvdG1wL3dvcmsvY29yZTItNjQtcmRrLWxpbnV4L2djYy1ydW50aW1lLzUuMC1yMC9pbWFnZS91c3IvbGliLy4uL2xpYi9saWJnb21wLmxhCi1saWJ0b29sOiBpbnN0YWxsOiBlcnJvcjogY2Fubm90IGluc3RhbGwgYGxpYmdvbXAtcGx1Z2luLWhvc3Rfbm9uc2htLmxhJwotdG8gYSBkaXJlY3Rvcnkgbm90IGVuZGluZyBpbiAvdXNyL2xpYgotTWFrZWZpbGU6NTE3OiByZWNpcGUgZm9yIHRhcmdldCAnaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTJyBmYWlsZWQKLW1ha2VbMl06ICoqKiBbaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTXSBFcnJvciAxCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBsaWJnb21wL01ha2VmaWxlLmluICAgICAgICB8IDcgKysrLS0tLQotIGxpYmdvbXAvcGx1Z2luL01ha2VmcmFnLmFtIHwgMyArLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2xpYmdvbXAvTWFrZWZpbGUuaW4gYi9saWJnb21wL01ha2VmaWxlLmluCi1pbmRleCBiNjFiMTA4Li43MWIyNjI3IDEwMDY0NAotLS0tIGEvbGliZ29tcC9NYWtlZmlsZS5pbgotKysrIGIvbGliZ29tcC9NYWtlZmlsZS5pbgotQEAgLTEyMyw3ICsxMjMsNyBAQCBhbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQodG9vbGV4ZWNsaWJkaXIpIiAiJChERVNURElSKSQoaW5mb2RpcikiIFwKLSAJIiQoREVTVERJUikkKGZpbmNsdWRlZGlyKSIgIiQoREVTVERJUikkKGxpYnN1YmluY2x1ZGVkaXIpIiBcCi0gCSIkKERFU1RESVIpJCh0b29sZXhlY2xpYmRpcikiCi0gTFRMSUJSQVJJRVMgPSAkKHRvb2xleGVjbGliX0xUTElCUkFSSUVTKQotLWxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0RFUEVOREVOQ0lFUyA9IGxpYmdvbXAubGEKLStsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9MSUJBREQgPQotIGFtX2xpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX09CSkVDVFMgPSAgXAotIAlsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYS1wbHVnaW4taG9zdC5sbwotIGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX09CSkVDVFMgPSAgXAotQEAgLTEzMyw3ICsxMzMsNyBAQCBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9MSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyBcCi0gCS0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0gCSQobGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotIGFtX19ERVBFTkRFTkNJRVNfMSA9Ci0tQFBMVUdJTl9OVlBUWF9UUlVFQGxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0RFUEVOREVOQ0lFUyA9IGxpYmdvbXAubGEgXAotK0BQTFVHSU5fTlZQVFhfVFJVRUBsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9ERVBFTkRFTkNJRVMgPSAgXAotIEBQTFVHSU5fTlZQVFhfVFJVRUAJJChhbV9fREVQRU5ERU5DSUVTXzEpCi0gQFBMVUdJTl9OVlBUWF9UUlVFQGFtX2xpYmdvbXBfcGx1Z2luX252cHR4X2xhX09CSkVDVFMgPSAgXAotIEBQTFVHSU5fTlZQVFhfVFJVRUAJbGliZ29tcF9wbHVnaW5fbnZwdHhfbGEtcGx1Z2luLW52cHR4LmxvCi1AQCAtNDA3LDcgKzQwNyw3IEBAIGxpYmdvbXBfbGFfU09VUkNFUyA9IGFsbG9jLmMgYmFycmllci5jIGNyaXRpY2FsLmMgZW52LmMgZXJyb3IuYyBpdGVyLmMgXAotIEBQTFVHSU5fTlZQVFhfVFJVRUBsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9MREZMQUdTID0gIFwKLSBAUExVR0lOX05WUFRYX1RSVUVACSQobGliZ29tcF9wbHVnaW5fbnZwdHhfdmVyc2lvbl9pbmZvKSBcCi0gQFBMVUdJTl9OVlBUWF9UUlVFQAkkKGx0X2hvc3RfZmxhZ3MpICQoUExVR0lOX05WUFRYX0xERkxBR1MpCi0tQFBMVUdJTl9OVlBUWF9UUlVFQGxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0xJQkFERCA9IGxpYmdvbXAubGEgJChQTFVHSU5fTlZQVFhfTElCUykKLStAUExVR0lOX05WUFRYX1RSVUVAbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfTElCQUREID0gJChQTFVHSU5fTlZQVFhfTElCUykKLSBAUExVR0lOX05WUFRYX1RSVUVAbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfTElCVE9PTEZMQUdTID0gLS10YWc9ZGlzYWJsZS1zdGF0aWMKLSBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV92ZXJzaW9uX2luZm8gPSAtdmVyc2lvbi1pbmZvICQobGlidG9vbF9WRVJTSU9OKQotIGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX1NPVVJDRVMgPSBwbHVnaW4vcGx1Z2luLWhvc3QuYwotQEAgLTQxNSw3ICs0MTUsNiBAQCBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpIC1ESE9TVF9OT05TSE1fUExVR0lOCi0gbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfTERGTEFHUyA9IFwKLSAJJChsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV92ZXJzaW9uX2luZm8pICQobHRfaG9zdF9mbGFncykKLSAKLS1saWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9MSUJBREQgPSBsaWJnb21wLmxhCi0gbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfTElCVE9PTEZMQUdTID0gLS10YWc9ZGlzYWJsZS1zdGF0aWMKLSBub2Rpc3Rfbm9pbnN0X0hFQURFUlMgPSBsaWJnb21wX2YuaAotIG5vZGlzdF9saWJzdWJpbmNsdWRlX0hFQURFUlMgPSBvbXAuaCBvcGVuYWNjLmgKLWRpZmYgLS1naXQgYS9saWJnb21wL3BsdWdpbi9NYWtlZnJhZy5hbSBiL2xpYmdvbXAvcGx1Z2luL01ha2VmcmFnLmFtCi1pbmRleCAxNjc0ODVmLi5kMmM1NDI4IDEwMDY0NAotLS0tIGEvbGliZ29tcC9wbHVnaW4vTWFrZWZyYWcuYW0KLSsrKyBiL2xpYmdvbXAvcGx1Z2luL01ha2VmcmFnLmFtCi1AQCAtMzUsNyArMzUsNyBAQCBsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpICQoUExVR0lOX05WUFRYX0NQUEZMQUdTKQotIGxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0xERkxBR1MgPSAkKGxpYmdvbXBfcGx1Z2luX252cHR4X3ZlcnNpb25faW5mbykgXAotIAkkKGx0X2hvc3RfZmxhZ3MpCi0gbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfTERGTEFHUyArPSAkKFBMVUdJTl9OVlBUWF9MREZMQUdTKQotLWxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0xJQkFERCA9IGxpYmdvbXAubGEgJChQTFVHSU5fTlZQVFhfTElCUykKLStsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9MSUJBREQgPSAkKFBMVUdJTl9OVlBUWF9MSUJTKQotIGxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0xJQlRPT0xGTEFHUyA9IC0tdGFnPWRpc2FibGUtc3RhdGljCi0gZW5kaWYKLSAKLUBAIC00NSw1ICs0NSw0IEBAIGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX1NPVVJDRVMgPSBwbHVnaW4vcGx1Z2luLWhvc3QuYwotIGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgLURIT1NUX05PTlNITV9QTFVHSU4KLSBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9MREZMQUdTID0gXAotIAkkKGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX3ZlcnNpb25faW5mbykgJChsdF9ob3N0X2ZsYWdzKQotLWxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0xJQkFERCA9IGxpYmdvbXAubGEKLSBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9MSUJUT09MRkxBR1MgPSAtLXRhZz1kaXNhYmxlLXN0YXRpYwotLS0gCi0yLjYuMwotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzYtVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAzNi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWMwMjk0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAzNi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotRnJvbSBiMGIwNjg4MTc2YTk0ODI3NzdlOWIyZTk4NDA4YmZjNDUwNWQzMWFmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFR1ZSwgMjggQXByIDIwMTUgMjM6MTU6MjcgLTA3MDAKLVN1YmplY3Q6IFtQQVRDSCAzNi80Nl0gVXNlIFNZU1RFTUxJQlNfRElSIHJlcGxhY2VtZW50IGluc3RlYWQgb2YgaGFyZGNvZGluZwotIGJhc2VfbGliZGlyCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBnY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oIHwgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaCBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmgKLWluZGV4IDI1N2FjZjAuLmFiZWI5NDggMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCi0rKysgYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCi1AQCAtMjEsNyArMjEsNyBAQAotICNpZm5kZWYgR0NDX0FBUkNINjRfTElOVVhfSAotICNkZWZpbmUgR0NDX0FBUkNINjRfTElOVVhfSAotIAotLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXgtYWFyY2g2NCV7bWJpZy1lbmRpYW46X2JlfSV7bWFiaT1pbHAzMjpfaWxwMzJ9LnNvLjEiCi0rI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LWFhcmNoNjQle21iaWctZW5kaWFuOl9iZX0le21hYmk9aWxwMzI6X2lscDMyfS5zby4xIgotIAotICN1bmRlZiAgQVNBTl9DQzFfU1BFQwotICNkZWZpbmUgQVNBTl9DQzFfU1BFQyAiJXslOnNhbml0aXplKGFkZHJlc3MpOi1mdW53aW5kLXRhYmxlc30iCi0tLSAKLTIuNi4zCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAzNy1hYXJjaDY0LUFkZC1zdXBwb3J0LWZvci1tdXNsLWxkc28ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzctYWFyY2g2NC1BZGQtc3VwcG9ydC1mb3ItbXVzbC1sZHNvLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGRiZTc0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAzNy1hYXJjaDY0LUFkZC1zdXBwb3J0LWZvci1tdXNsLWxkc28ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi1Gcm9tIDQyMGNhNjRhODZkNTYwYTc3ZWU1OTZhOTc3NGQ2NzJiMDhjYTgyNzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogVHVlLCAyOCBBcHIgMjAxNSAyMzoxODozOSAtMDcwMAotU3ViamVjdDogW1BBVENIIDM3LzQ2XSBhYXJjaDY0OiBBZGQgc3VwcG9ydCBmb3IgbXVzbCBsZHNvCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBnY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oIHwgMiArKwotIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmggYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCi1pbmRleCBhYmViOTQ4Li5mOWU2NWZjIDEwMDY0NAotLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAotKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAotQEAgLTIzLDYgKzIzLDggQEAKLSAKLSAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtYWFyY2g2NCV7bWJpZy1lbmRpYW46X2JlfSV7bWFiaT1pbHAzMjpfaWxwMzJ9LnNvLjEiCi0gCi0rI2RlZmluZSBNVVNMX0RZTkFNSUNfTElOS0VSICBTWVNURU1MSUJTX0RJUiAibGQtbXVzbC1hYXJjaDY0LnNvLjEiCi0rCi0gI3VuZGVmICBBU0FOX0NDMV9TUEVDCi0gI2RlZmluZSBBU0FOX0NDMV9TUEVDICIleyU6c2FuaXRpemUoYWRkcmVzcyk6LWZ1bndpbmQtdGFibGVzfSIKLSAKLS0tIAotMi42LjMKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDM4LWZpeC1nLXN5c3Jvb3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzgtZml4LWctc3lzcm9vdC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhNTc0YS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzgtZml4LWctc3lzcm9vdC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLUZyb20gOGRmM2U3MDA3YTIyYzlkNmJlNWQ1YWU0YjliMTY5YzVjODQzMTkxNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBXZWQsIDI3IE1heSAyMDE1IDE3OjA2OjA2IC0wNzAwCi1TdWJqZWN0OiBbUEFUQ0ggMzgvNDZdIGZpeCBnKysgc3lzcm9vdAotCi1Qb3J0aW9ucyBvZgotCi1odHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmcvbXNnMjYwMTMuaHRtbAotCi1hcmUgbm90IHVwc3RyZWFtZWQgeWV0LiBTbyBsZXRzIGtlZXAgbWlzc2luZyBwaWVjZXMuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1XaXRob3V0IHRoaXMsIGNvbXBpbGluZyBzb21ldGhpbmcgc2ltcGxlIGxpa2UgI2luY2x1ZGUgPGxpbWl0cz4gb24gdGFyZ2V0Ci13aXRoIGMrKyB0ZXN0LmNwcCBmYWlscyB1bmFibGUgdG8gZmluZCB0aGUgaGVhZGVyLiBzdHJhY2Ugc2hvd3MgaXQgbG9va2luZyBpbgotdXNyL2luY2x1ZGUveHh4eCByYXRoZXIgdGhhbiAvdXNyL2luY2x1ZGUveHh4eAotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi0gZ2NjL2NvbmZpZ3VyZSAgICB8IDQgKysrLQotIGdjYy9jb25maWd1cmUuYWMgfCA0ICsrKy0KLSAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCi1pbmRleCA5YjYwYWFkLi42ZGY1OTRjIDEwMDc1NQotLS0tIGEvZ2NjL2NvbmZpZ3VyZQotKysrIGIvZ2NjL2NvbmZpZ3VyZQotQEAgLTMzNzUsNyArMzM3NSw5IEBAIGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3Q9MAotIGlmIHRlc3QgIiR7d2l0aF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuCi0gICBnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdD1gZXhwciAiJHtnY2NfZ3h4X2luY2x1ZGVfZGlyfSIgOiAiJHt3aXRoX3N5c3Jvb3R9IidcKC4qXCknYAotICAgaWYgdGVzdCAiJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iOyB0aGVuCi0tICAgIGdjY19neHhfaW5jbHVkZV9kaXI9IiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IgotKyAgICBpZiB0ZXN0IHgke3dpdGhfc3lzcm9vdH0gIT0geC87IHRoZW4KLSsgICAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKLSsgICAgZmkKLSAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcl9hZGRfc3lzcm9vdD0xCi0gICBmaQotIGZpCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKLWluZGV4IGUxZTU0ZjIuLjNiYjIxNzMgMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlndXJlLmFjCi0rKysgYi9nY2MvY29uZmlndXJlLmFjCi1AQCAtMTUyLDcgKzE1Miw5IEBAIGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3Q9MAotIGlmIHRlc3QgIiR7d2l0aF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuCi0gICBnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdD1gZXhwciAiJHtnY2NfZ3h4X2luY2x1ZGVfZGlyfSIgOiAiJHt3aXRoX3N5c3Jvb3R9IidcKC4qXCknYAotICAgaWYgdGVzdCAiJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iOyB0aGVuCi0tICAgIGdjY19neHhfaW5jbHVkZV9kaXI9IiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IgotKyAgICBpZiB0ZXN0IHgke3dpdGhfc3lzcm9vdH0gIT0geC87IHRoZW4KLSsgICAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKLSsgICAgZmkKLSAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcl9hZGRfc3lzcm9vdD0xCi0gICBmaQotIGZpCi0tLSAKLTIuNi4zCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAzOS1saWJjYzEtZml4LWxpYmNjMS1zLWluc3RhbGwtcGF0aC1hbmQtcnBhdGgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwMzktbGliY2MxLWZpeC1saWJjYzEtcy1pbnN0YWxsLXBhdGgtYW5kLXJwYXRoLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTBkZjk2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDAzOS1saWJjYzEtZml4LWxpYmNjMS1zLWluc3RhbGwtcGF0aC1hbmQtcnBhdGgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi1Gcm9tIDFlZWRlOWU0YTEwZDM1MzJkYjgyNmE2ZWVjZWQ2OTVkZjNhZDViODkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KLURhdGU6IFN1biwgNSBKdWwgMjAxNSAyMDoyNToxOCAtMDcwMAotU3ViamVjdDogW1BBVENIIDM5LzQ2XSBsaWJjYzE6IGZpeCBsaWJjYzEncyBpbnN0YWxsIHBhdGggYW5kIHJwYXRoCi0KLSogSW5zdGFsbCBsaWJjYzEuc28gYW5kIGxpYmNjMXBsdWdpbi5zbyBpbnRvCi0gICQobGliZXhlY2RpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJChnY2NfdmVyc2lvbiksIGFzIHdoYXQgd2UKLSAgaGFkIGRvbmUgdG8gbHRvLXBsdWdpbi4KLSogRml4IGJhZCBSUEFUSCBpdXNzdWU6Ci0gIGdjYy01LjIuMDogcGFja2FnZSBnY2MtcGx1Z2lucyBjb250YWlucyBiYWQgUlBBVEggL3BhdGh0L3RvL3RtcC9zeXNyb290cy9xZW11eDg2LTY0L3Vzci9saWI2NC8uLi9saWI2NCBpbiBmaWxlCi0gL3BhdGgvdG8vZ2NjLzUuMi4wLXIwL3BhY2thZ2VzLXNwbGl0L2djYy1wbHVnaW5zL3Vzci9saWI2NC9nY2MveDg2XzY0LXBva3ktbGludXgvNS4yLjAvcGx1Z2luL2xpYmNjMXBsdWdpbi5zby4wLjAuMAotIFtycGF0aHNdCi0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgY29uZmlndXJhdGlvbl0KLQotU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+Ci0tLS0KLSBsaWJjYzEvTWFrZWZpbGUuYW0gfCA0ICsrLS0KLSBsaWJjYzEvTWFrZWZpbGUuaW4gfCA0ICsrLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2xpYmNjMS9NYWtlZmlsZS5hbSBiL2xpYmNjMS9NYWtlZmlsZS5hbQotaW5kZXggN2EyNzRiMy4uZGI2OWJlYSAxMDA2NDQKLS0tLSBhL2xpYmNjMS9NYWtlZmlsZS5hbQotKysrIGIvbGliY2MxL01ha2VmaWxlLmFtCi1AQCAtMzUsOCArMzUsOCBAQCBsaWJpYmVydHkgPSAkKGlmICQod2lsZGNhcmQgJChsaWJpYmVydHlfbm9hc2FuKSksJChXYykkKGxpYmliZXJ0eV9ub2FzYW4pLCBcCi0gCSAgICAkKFdjKSQobGliaWJlcnR5X25vcm1hbCkpKQotIGxpYmliZXJ0eV9kZXAgPSAkKHBhdHN1YnN0ICQoV2MpJSwlLCQobGliaWJlcnR5KSkKLSAKLS1wbHVnaW5kaXIgPSAkKGxpYmRpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJChnY2NfdmVyc2lvbikvcGx1Z2luCi0tY2MxbGliZGlyID0gJChsaWJkaXIpLyQobGlic3VmZml4KQotK2NjMWxpYmRpciA9ICQobGliZXhlY2RpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJChnY2NfdmVyc2lvbikKLStwbHVnaW5kaXIgPSAkKGNjMWxpYmRpcikKLSAKLSBpZiBFTkFCTEVfUExVR0lOCi0gcGx1Z2luX0xUTElCUkFSSUVTID0gbGliY2MxcGx1Z2luLmxhCi1kaWZmIC0tZ2l0IGEvbGliY2MxL01ha2VmaWxlLmluIGIvbGliY2MxL01ha2VmaWxlLmluCi1pbmRleCAxOTE2MTM0Li5jODk5NWQyIDEwMDY0NAotLS0tIGEvbGliY2MxL01ha2VmaWxlLmluCi0rKysgYi9saWJjYzEvTWFrZWZpbGUuaW4KLUBAIC0yNjIsOCArMjYyLDggQEAgbGliaWJlcnR5ID0gJChpZiAkKHdpbGRjYXJkICQobGliaWJlcnR5X25vYXNhbikpLCQoV2MpJChsaWJpYmVydHlfbm9hc2FuKSwgXAotIAkgICAgJChXYykkKGxpYmliZXJ0eV9ub3JtYWwpKSkKLSAKLSBsaWJpYmVydHlfZGVwID0gJChwYXRzdWJzdCAkKFdjKSUsJSwkKGxpYmliZXJ0eSkpCi0tcGx1Z2luZGlyID0gJChsaWJkaXIpL2djYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQoZ2NjX3ZlcnNpb24pL3BsdWdpbgotLWNjMWxpYmRpciA9ICQobGliZGlyKS8kKGxpYnN1ZmZpeCkKLStjYzFsaWJkaXIgPSAkKGxpYmV4ZWNkaXIpL2djYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQoZ2NjX3ZlcnNpb24pCi0rcGx1Z2luZGlyID0gJChjYzFsaWJkaXIpCi0gQEVOQUJMRV9QTFVHSU5fVFJVRUBwbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJjYzFwbHVnaW4ubGEKLSBARU5BQkxFX1BMVUdJTl9UUlVFQGNjMWxpYl9MVExJQlJBUklFUyA9IGxpYmNjMS5sYQotIEJVSUxUX1NPVVJDRVMgPSBjb21waWxlci1uYW1lLmgKLS0tIAotMi42LjMKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQwLWhhbmRsZS1zeXNyb290LXN1cHBvcnQtZm9yLW5hdGl2ZXNkay1nY2MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDAtaGFuZGxlLXN5c3Jvb3Qtc3VwcG9ydC1mb3ItbmF0aXZlc2RrLWdjYy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFlMTMxMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDAtaGFuZGxlLXN5c3Jvb3Qtc3VwcG9ydC1mb3ItbmF0aXZlc2RrLWdjYy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIxMyArMCwwIEBACi1Gcm9tIGI0MTY3NGQzNTdjNGJhMzIwYjk4NjBlMGYzMTNkMmY1YTMzMmYyN2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogTW9uLCA3IERlYyAyMDE1IDIzOjM5OjU0ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggNDAvNDZdIGhhbmRsZSBzeXNyb290IHN1cHBvcnQgZm9yIG5hdGl2ZXNkay1nY2MKLQotQmVpbmcgYWJsZSB0byBidWlsZCBhIG5hdGl2ZXNkayBnY2MgaXMgdXNlZnVsLCBwYXJ0aWN1bGFybHkgaW4gY2FzZXMKLXdoZXJlIHRoZSBob3N0IGNvbXBpbGVyIG1heSBiZSBvZiBhbiBpbmNvbXBhdGlibGUgdmVyc2lvbiAob3IgYSAzMgotYml0IGNvbXBpbGVyIGlzIG5lZWRlZCkuCi0KLVNhZGx5LCBidWlsZGluZyBuYXRpdmVzZGstZ2NjIGlzIG5vdCBzdHJhaWdodCBmb3J3YXJkLiBXZSBpbnN0YWxsCi1uYXRpdmVzZGstZ2NjIGludG8gYSByZWxvY2F0YWJsZSBsb2NhdGlvbiBhbmQgdGhpcyBtZWFucyB0aGF0IGl0cwotbGlicmFyeSBsb2NhdGlvbnMgY2FuIGNoYW5nZS4gIk5vcm1hbCIgc3lzcm9vdCBzdXBwb3J0IGRvZXNuJ3QgaGVscAotaW4gdGhpcyBjYXNlIHNpbmNlIHRoZSB2YWx1ZXMgb2YgcGF0aHMgbGlrZSAibGliZGlyIiBjaGFuZ2UsIG5vdCBqdXN0Ci1iYXNlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBzeXN0ZW0uCi0KLUluIG9yZGVyIHRvIGhhbmRsZSB0aGlzIHdlIGRvIHR3byB0aGluZ3M6Ci0KLWEpIEFkZCAlciBpbnRvIHNwZWMgZmlsZSBtYXJrdXAgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGluamVjdGVkIHBhdGhzCi0gICBzdWNoIGFzIFNZU1RFTUxJQlNfRElSIChzZWUgZ2NjX211bHRpbGliX3NldHVwKCkpLgotYikgQWRkIG90aGVyIHBhdGhzIHdoaWNoIG5lZWQgcmVsb2NhdGlvbiBpbnRvIGEgLmdjY3JlbG9jcHJlZml4IHNlY3Rpb24KLSAgIHdoaWNoIHRoZSByZWxvY2F0aW9uIGNvZGUgd2lsbCBub3RpY2UgYW5kIGFkanVzdCBhdXRvbWF0aWNhbGx5LgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKLVJQIDIwMTUvNy8yOAotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi0gZ2NjL2NwcGRlZmF1bHQuYyB8IDUwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCi0gZ2NjL2NwcGRlZmF1bHQuaCB8ICAzICsrLQotIGdjYy9nY2MuYyAgICAgICAgfCAyMCArKysrKysrKysrKysrKy0tLS0tLQotIDMgZmlsZXMgY2hhbmdlZCwgNTMgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9nY2MvY3BwZGVmYXVsdC5jIGIvZ2NjL2NwcGRlZmF1bHQuYwotaW5kZXggMDNhMDI4Ny4uZjQ0YzFkOCAxMDA2NDQKLS0tLSBhL2djYy9jcHBkZWZhdWx0LmMKLSsrKyBiL2djYy9jcHBkZWZhdWx0LmMKLUBAIC0zNSw2ICszNSwzMCBAQAotICMgdW5kZWYgQ1JPU1NfSU5DTFVERV9ESVIKLSAjZW5kaWYKLSAKLStzdGF0aWMgY2hhciBHUExVU1BMVVNfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR1BMVVNQTFVTX0lOQ0xVREVfRElSOwotK3N0YXRpYyBjaGFyIEdDQ19JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBHQ0NfSU5DTFVERV9ESVI7Ci0rc3RhdGljIGNoYXIgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVI7Ci0rc3RhdGljIGNoYXIgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUjsKLStzdGF0aWMgY2hhciBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQ7Ci0rI2lmZGVmIExPQ0FMX0lOQ0xVREVfRElSCi0rc3RhdGljIGNoYXIgTE9DQUxfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gTE9DQUxfSU5DTFVERV9ESVI7Ci0rI2VuZGlmCi0rI2lmZGVmIFBSRUZJWF9JTkNMVURFX0RJUgotK3N0YXRpYyBjaGFyIFBSRUZJWF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBQUkVGSVhfSU5DTFVERV9ESVI7Ci0rI2VuZGlmCi0rI2lmZGVmIEZJWEVEX0lOQ0xVREVfRElSCi0rc3RhdGljIGNoYXIgRklYRURfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gRklYRURfSU5DTFVERV9ESVI7Ci0rI2VuZGlmCi0rI2lmZGVmIENST1NTX0lOQ0xVREVfRElSCi0rc3RhdGljIGNoYXIgQ1JPU1NfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gQ1JPU1NfSU5DTFVERV9ESVI7Ci0rI2VuZGlmCi0rI2lmZGVmIFRPT0xfSU5DTFVERV9ESVIKLStzdGF0aWMgY2hhciBUT09MX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFRPT0xfSU5DTFVERV9ESVI7Ci0rI2VuZGlmCi0rI2lmZGVmIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUgotK3N0YXRpYyBjaGFyIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVI7Ci0rI2VuZGlmCi0rCi0gY29uc3Qgc3RydWN0IGRlZmF1bHRfaW5jbHVkZSBjcHBfaW5jbHVkZV9kZWZhdWx0c1tdCi0gI2lmZGVmIElOQ0xVREVfREVGQVVMVFMKLSA9IElOQ0xVREVfREVGQVVMVFM7Ci1AQCAtNDIsMzggKzY2LDM4IEBAIGNvbnN0IHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUgY3BwX2luY2x1ZGVfZGVmYXVsdHNbXQotID0gewotICNpZmRlZiBHUExVU1BMVVNfSU5DTFVERV9ESVIKLSAgICAgLyogUGljayB1cCBHTlUgQysrIGdlbmVyaWMgaW5jbHVkZSBmaWxlcy4gICovCi0tICAgIHsgR1BMVVNQTFVTX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwKLSsgICAgeyBHUExVU1BMVVNfSU5DTFVERV9ESVJWQVIsICJHKysiLCAxLCAxLAotICAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMCB9LAotICNlbmRpZgotICNpZmRlZiBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUgotICAgICAvKiBQaWNrIHVwIEdOVSBDKysgdGFyZ2V0LWRlcGVuZGVudCBpbmNsdWRlIGZpbGVzLiAgKi8KLS0gICAgeyBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCi0rICAgIHsgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVJWQVIsICJHKysiLCAxLCAxLAotICAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMSB9LAotICNlbmRpZgotICNpZmRlZiBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVIKLSAgICAgLyogUGljayB1cCBHTlUgQysrIGJhY2t3YXJkIGFuZCBkZXByZWNhdGVkIGluY2x1ZGUgZmlsZXMuICAqLwotLSAgICB7IEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCi0rICAgIHsgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSVkFSLCAiRysrIiwgMSwgMSwKLSAgICAgICBHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1QsIDAgfSwKLSAjZW5kaWYKLSAjaWZkZWYgR0NDX0lOQ0xVREVfRElSCi0gICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzLiAgKi8KLS0gICAgeyBHQ0NfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCi0rICAgIHsgR0NDX0lOQ0xVREVfRElSVkFSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAotICNlbmRpZgotICNpZmRlZiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUCi0gICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzIHVuZGVyIHRoZSBzcGVjaWZpZWQgc3lzcm9vdC4gICovCi0tICAgIHsgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQsICJHQ0MiLCAwLCAwLCAxLCAwIH0sCi0rICAgIHsgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yVkFSLCAiR0NDIiwgMCwgMCwgMSwgMCB9LAotICNlbmRpZgotICNpZmRlZiBMT0NBTF9JTkNMVURFX0RJUgotICAgICAvKiAvdXNyL2xvY2FsL2luY2x1ZGUgY29tZXMgYmVmb3JlIHRoZSBmaXhpbmNsdWRlZCBoZWFkZXIgZmlsZXMuICAqLwotLSAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAyIH0sCi0tICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDAgfSwKLSsgICAgeyBMT0NBTF9JTkNMVURFX0RJUlZBUiwgMCwgMCwgMSwgMSwgMiB9LAotKyAgICB7IExPQ0FMX0lOQ0xVREVfRElSVkFSLCAwLCAwLCAxLCAxLCAwIH0sCi0gI2VuZGlmCi0gI2lmZGVmIFBSRUZJWF9JTkNMVURFX0RJUgotLSAgICB7IFBSRUZJWF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMCwgMCB9LAotKyAgICB7IFBSRUZJWF9JTkNMVURFX0RJUlZBUiwgMCwgMCwgMSwgMCwgMCB9LAotICNlbmRpZgotICNpZmRlZiBGSVhFRF9JTkNMVURFX0RJUgotICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGZpeGluY2x1ZGVzLiAgKi8KLS0gICAgeyBGSVhFRF9JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsCi0rICAgIHsgRklYRURfSU5DTFVERV9ESVJWQVIsICJHQ0MiLCAwLCAwLCAwLAotICAgICAgIC8qIEEgbXVsdGlsaWIgc3VmZml4IG5lZWRzIGFkZGluZyBpZiBkaWZmZXJlbnQgbXVsdGlsaWJzIHVzZQotIAkgZGlmZmVyZW50IGhlYWRlcnMuICAqLwotICNpZmRlZiBTWVNST09UX0hFQURFUlNfU1VGRklYX1NQRUMKLUBAIC04NSwxNiArMTA5LDE2IEBAIGNvbnN0IHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUgY3BwX2luY2x1ZGVfZGVmYXVsdHNbXQotICNlbmRpZgotICNpZmRlZiBDUk9TU19JTkNMVURFX0RJUgotICAgICAvKiBPbmUgcGxhY2UgdGhlIHRhcmdldCBzeXN0ZW0ncyBoZWFkZXJzIG1pZ2h0IGJlLiAgKi8KLS0gICAgeyBDUk9TU19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKLSsgICAgeyBDUk9TU19JTkNMVURFX0RJUlZBUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKLSAjZW5kaWYKLSAjaWZkZWYgVE9PTF9JTkNMVURFX0RJUgotICAgICAvKiBBbm90aGVyIHBsYWNlIHRoZSB0YXJnZXQgc3lzdGVtJ3MgaGVhZGVycyBtaWdodCBiZS4gICovCi0tICAgIHsgVE9PTF9JTkNMVURFX0RJUiwgIkJJTlVUSUxTIiwgMCwgMSwgMCwgMCB9LAotKyAgICB7IFRPT0xfSU5DTFVERV9ESVJWQVIsICJCSU5VVElMUyIsIDAsIDEsIDAsIDAgfSwKLSAjZW5kaWYKLSAjaWZkZWYgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSCi0gICAgIC8qIC91c3IvaW5jbHVkZSBjb21lcyBkZWFkIGxhc3QuICAqLwotLSAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAyIH0sCi0tICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSLCBOQVRJVkVfU1lTVEVNX0hFQURFUl9DT01QT05FTlQsIDAsIDAsIDEsIDAgfSwKLSsgICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVJWQVIsIE5BVElWRV9TWVNURU1fSEVBREVSX0NPTVBPTkVOVCwgMCwgMCwgMSwgMiB9LAotKyAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUlZBUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAwIH0sCi0gI2VuZGlmCi0gICAgIHsgMCwgMCwgMCwgMCwgMCwgMCB9Ci0gICB9OwotZGlmZiAtLWdpdCBhL2djYy9jcHBkZWZhdWx0LmggYi9nY2MvY3BwZGVmYXVsdC5oCi1pbmRleCBjOTg2NDRmLi40MTk4NjY5IDEwMDY0NAotLS0tIGEvZ2NjL2NwcGRlZmF1bHQuaAotKysrIGIvZ2NjL2NwcGRlZmF1bHQuaAotQEAgLTMzLDcgKzMzLDggQEAKLSAKLSBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlCi0gewotLSAgY29uc3QgY2hhciAqY29uc3QgZm5hbWU7CS8qIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkuICAqLwotKyAgY29uc3QgY2hhciAqZm5hbWU7ICAgICAvKiBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5LiAgKi8KLSsKLSAgIGNvbnN0IGNoYXIgKmNvbnN0IGNvbXBvbmVudDsJLyogVGhlIGNvbXBvbmVudCBjb250YWluaW5nIHRoZSBkaXJlY3RvcnkKLSAJCQkJICAgKHNlZSB1cGRhdGVfcGF0aCBpbiBwcmVmaXguYykgKi8KLSAgIGNvbnN0IGNoYXIgY3BsdXNwbHVzOwkJLyogT25seSBsb29rIGhlcmUgaWYgd2UncmUgY29tcGlsaW5nIEMrKy4gICovCi1kaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCi1pbmRleCAzY2EyN2I5Li4yYjc3NTZlIDEwMDY0NAotLS0tIGEvZ2NjL2djYy5jCi0rKysgYi9nY2MvZ2NjLmMKLUBAIC0xMjAsNiArMTIwLDggQEAgc3RhdGljIGNvbnN0IGNoYXIgKnRhcmdldF9zeXN0ZW1fcm9vdCA9IFRBUkdFVF9TWVNURU1fUk9PVDsKLSAjZWxzZQotIHN0YXRpYyBjb25zdCBjaGFyICp0YXJnZXRfc3lzdGVtX3Jvb3QgPSAwOwotICNlbmRpZgotKyAKLStzdGF0aWMgY2hhciB0YXJnZXRfcmVsb2NhdGFibGVfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNZU1RFTUxJQlNfRElSOwotIAotIC8qIE5vbnplcm8gbWVhbnMgcGFzcyB0aGUgdXBkYXRlZCB0YXJnZXRfc3lzdGVtX3Jvb3QgdG8gdGhlIGNvbXBpbGVyLiAgKi8KLSAKLUBAIC0zOTAsNiArMzkyLDcgQEAgb3Igd2l0aCBjb25zdGFudCB0ZXh0IGluIGEgc2luZ2xlIGFyZ3VtZW50LgotICAlRyAgICAgcHJvY2VzcyBMSUJHQ0NfU1BFQyBhcyBhIHNwZWMuCi0gICVSICAgICBPdXRwdXQgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGFyZ2V0X3N5c3RlbV9yb290IGFuZAotICAgICAgICAgdGFyZ2V0X3N5c3Jvb3Rfc3VmZml4LgotKyAlciAgICAgT3V0cHV0IHRoZSBiYXNlIHBhdGggdGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeAotICAlUyAgICAgcHJvY2VzcyBTVEFSVEZJTEVfU1BFQyBhcyBhIHNwZWMuICBBIGNhcGl0YWwgUyBpcyBhY3R1YWxseSB1c2VkIGhlcmUuCi0gICVFICAgICBwcm9jZXNzIEVOREZJTEVfU1BFQyBhcyBhIHNwZWMuICBBIGNhcGl0YWwgRSBpcyBhY3R1YWxseSB1c2VkIGhlcmUuCi0gICVDICAgICBwcm9jZXNzIENQUF9TUEVDIGFzIGEgc3BlYy4KLUBAIC0xMjg2LDEwICsxMjg5LDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyICpnY2NfbGliZXhlY19wcmVmaXg7Ci0gICAgZ2NjX2V4ZWNfcHJlZml4IGlzIHNldCBiZWNhdXNlLCBpbiB0aGF0IGNhc2UsIHdlIGtub3cgd2hlcmUgdGhlCi0gICAgY29tcGlsZXIgaGFzIGJlZW4gaW5zdGFsbGVkLCBhbmQgdXNlIHBhdGhzIHJlbGF0aXZlIHRvIHRoYXQKLSAgICBsb2NhdGlvbiBpbnN0ZWFkLiAgKi8KLS1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfZXhlY19wcmVmaXggPSBTVEFOREFSRF9FWEVDX1BSRUZJWDsKLS1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfbGliZXhlY19wcmVmaXggPSBTVEFOREFSRF9MSUJFWEVDX1BSRUZJWDsKLS1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfYmluZGlyX3ByZWZpeCA9IFNUQU5EQVJEX0JJTkRJUl9QUkVGSVg7Ci0tc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXggPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYOwotK3N0YXRpYyBjaGFyIHN0YW5kYXJkX2V4ZWNfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNUQU5EQVJEX0VYRUNfUFJFRklYOwotK3N0YXRpYyBjaGFyIHN0YW5kYXJkX2xpYmV4ZWNfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNUQU5EQVJEX0xJQkVYRUNfUFJFRklYOwotK3N0YXRpYyBjaGFyIHN0YW5kYXJkX2JpbmRpcl9wcmVmaXhbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfQklORElSX1BSRUZJWDsKLStzdGF0aWMgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeCA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVg7Ci0gCi0gLyogRm9yIG5hdGl2ZSBjb21waWxlcnMsIHRoZXNlIGFyZSB3ZWxsLWtub3duIHBhdGhzIGNvbnRhaW5pbmcKLSAgICBjb21wb25lbnRzIHRoYXQgbWF5IGJlIHByb3ZpZGVkIGJ5IHRoZSBzeXN0ZW0uICBGb3IgY3Jvc3MKLUBAIC0xMjk3LDkgKzEzMDAsOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeCA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVg7Ci0gc3RhdGljIGNvbnN0IGNoYXIgKm1kX2V4ZWNfcHJlZml4ID0gTURfRVhFQ19QUkVGSVg7Ci0gc3RhdGljIGNvbnN0IGNoYXIgKm1kX3N0YXJ0ZmlsZV9wcmVmaXggPSBNRF9TVEFSVEZJTEVfUFJFRklYOwotIHN0YXRpYyBjb25zdCBjaGFyICptZF9zdGFydGZpbGVfcHJlZml4XzEgPSBNRF9TVEFSVEZJTEVfUFJFRklYXzE7Ci0tc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMQotK3N0YXRpYyBjaGFyIHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMVs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkKLSAgID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xOwotLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzIKLStzdGF0aWMgY2hhciBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpCi0gICA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMjsKLSAKLSAvKiBBIHJlbGF0aXZlIHBhdGggdG8gYmUgdXNlZCBpbiBmaW5kaW5nIHRoZSBsb2NhdGlvbiBvZiB0b29scwotQEAgLTU1MjMsNiArNTUyNiwxMSBAQCBkb19zcGVjXzEgKGNvbnN0IGNoYXIgKnNwZWMsIGludCBpbnN3aXRjaCwgY29uc3QgY2hhciAqc29mdF9tYXRjaGVkX3BhcnQpCi0gCSAgICAgIH0KLSAJICAgIGJyZWFrOwotIAotKyAgICAgICAgICBjYXNlICdyJzoKLSsgICAgICAgICAgICAgIG9ic3RhY2tfZ3JvdyAoJm9ic3RhY2ssIHRhcmdldF9yZWxvY2F0YWJsZV9wcmVmaXgsCi0rCQkgICAgICBzdHJsZW4gKHRhcmdldF9yZWxvY2F0YWJsZV9wcmVmaXgpKTsKLSsgICAgICAgICAgICBicmVhazsKLSsKLSAJICBjYXNlICdTJzoKLSAJICAgIHZhbHVlID0gZG9fc3BlY18xIChzdGFydGZpbGVfc3BlYywgMCwgTlVMTCk7Ci0gCSAgICBpZiAodmFsdWUgIT0gMCkKLS0tIAotMi42LjMKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQxLVNlYXJjaC10YXJnZXQtc3lzcm9vdC1nY2MtdmVyc2lvbi1zcGVjaWZpYy1kaXJzLXdpdGgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDEtU2VhcmNoLXRhcmdldC1zeXNyb290LWdjYy12ZXJzaW9uLXNwZWNpZmljLWRpcnMtd2l0aC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE1MDRhMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDEtU2VhcmNoLXRhcmdldC1zeXNyb290LWdjYy12ZXJzaW9uLXNwZWNpZmljLWRpcnMtd2l0aC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi1Gcm9tIDk5Y2FkYjRkODQxNWRkNWEyNzVkN2Q2NDEwZjIwZGIzM2QwZjg0MzMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogTW9uLCA3IERlYyAyMDE1IDIzOjQxOjQ1ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggNDEvNDZdIFNlYXJjaCB0YXJnZXQgc3lzcm9vdCBnY2MgdmVyc2lvbiBzcGVjaWZpYyBkaXJzIHdpdGgKLSBtdWx0aWxpYi4KLQotV2UgaW5zdGFsbCB0aGUgZ2NjIGxpYnJhcmllcyAoc3VjaCBhcyBjcnRiZWdpbi5wKSBpbnRvCi08c3lzcm9vdD48bGliZGlyPi88dGFyZ2V0LXN5cz4vNS4yLjAvCi13aGljaCBpcyBhIGRlZmF1bHQgc2VhcmNoIHBhdGggZm9yIEdDQyAoYWthIG11bHRpX3N1ZmZpeCBpbiB0aGUKLWNvZGUgYmVsb3cpLiA8dGFyZ2V0LXN5cz4gaXMgJ21hY2hpbmUnIGluIGdjYydzIHRlcm1pbm9sb2d5LiBXZSB1c2UKLXRoZXNlIGRpcmVjdG9yaWVzIHNvIHRoYXQgbXVsdGlwbGUgZ2NjIHZlcnNpb25zIGNvdWxkIGluIHRoZW9yeQotY28tZXhpc3Qgb24gdGFyZ2V0LgotCi1XZSBvbmx5IHdhbnQgdG8gYnVpbGQgb25lIGdjYy1jcm9zcy1jYW5hZGlhbiBwZXIgYXJjaCBhbmQgaGF2ZSB0aGlzIHdvcmsKLWZvciBhbGwgbXVsdGlsaWJzLiA8dGFyZ2V0LXN5cz4gY2FuIGJlIGhhbmRsZWQgYnkgbWFwcGluZyB0aGUgbXVsdGlsaWIKLTx0YXJnZXQtc3lzPiB0byB0aGUgb25lIHVzZWQgYnkgZ2NjLWNyb3NzLWNhbmFkaWFuLCBlLmcuCi1taXBzNjQtcG9sa21sbGliMzItbGludXgKLWlzIHN5bWxpbmtlZCB0byBieSBtaXBzNjQtcG9reS1saW51eC4KLQotVGhlIGRlZmF1bHQgZ2NjIHNlYXJjaCBwYXRoIGluIHRoZSB0YXJnZXQgc3lzcm9vdCBmb3IgYSAibGliNjQiIG11dGxpbGliCi1pczoKLQotPHN5c3Jvb3Q+L2xpYjMyL21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLwotPHN5c3Jvb3Q+L2xpYjMyLy4uL2xpYjY0LwotPHN5c3Jvb3Q+L3Vzci9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KLTxzeXNyb290Pi91c3IvbGliMzIvLi4vbGliNjQvCi08c3lzcm9vdD4vbGliMzIvCi08c3lzcm9vdD4vdXNyL2xpYjMyLwotCi13aGljaCBtZWFucyB0aGF0IHRoZSBsaWIzMiBjcnRiZWdpbi5vIHdpbGwgYmUgZm91bmQgYW5kIHRoZSBsaWI2NCBvbmVzCi13aWxsIG5vdCB3aGljaCBsZWFkcyB0byBjb21waWxlciBmYWlsdXJlcy4KLQotVGhpcyBwYXRjaCBpbmplY3RzIGEgbXVsdGlsaWIgdmVyc2lvbiBvZiB0aGF0IHBhdGggZmlyc3Qgc28gdGhlIGxpYjY0Ci1iaW5hcmllcyBjYW4gYmUgZm91bmQgZmlyc3QuIFdpdGggdGhpcyBjaGFuZ2UgdGhlIHNlYXJjaCBwYXRoIGJlY29tZXM6Ci0KLTxzeXNyb290Pi9saWIzMi8uLi9saWI2NC9taXBzNjQtcG9reS1saW51eC81LjIuMC8KLTxzeXNyb290Pi9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KLTxzeXNyb290Pi9saWIzMi8uLi9saWI2NC8KLTxzeXNyb290Pi91c3IvbGliMzIvLi4vbGliNjQvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCi08c3lzcm9vdD4vdXNyL2xpYjMyL21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLwotPHN5c3Jvb3Q+L3Vzci9saWIzMi8uLi9saWI2NC8KLTxzeXNyb290Pi9saWIzMi8KLTxzeXNyb290Pi91c3IvbGliMzIvCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotUlAgMjAxNS83LzMxCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBnY2MvZ2NjLmMgfCAyOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrLQotIDEgZmlsZSBjaGFuZ2VkLCAyOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKLWluZGV4IDJiNzc1NmUuLjhmNTNhZWEgMTAwNjQ0Ci0tLS0gYS9nY2MvZ2NjLmMKLSsrKyBiL2djYy9nY2MuYwotQEAgLTIzMDUsNyArMjMwNSw3IEBAIGZvcl9lYWNoX3BhdGggKGNvbnN0IHN0cnVjdCBwYXRoX3ByZWZpeCAqcGF0aHMsCi0gICAgICAgaWYgKHBhdGggPT0gTlVMTCkKLSAJewotIAkgIGxlbiA9IHBhdGhzLT5tYXhfbGVuICsgZXh0cmFfc3BhY2UgKyAxOwotLQkgIGxlbiArPSBNQVggKE1BWCAoc3VmZml4X2xlbiwgbXVsdGlfb3NfZGlyX2xlbiksIG11bHRpYXJjaF9sZW4pOwotKwkgIGxlbiArPSBNQVggKChzdWZmaXhfbGVuICsgbXVsdGlfb3NfZGlyX2xlbiksIG11bHRpYXJjaF9sZW4pOwotIAkgIHBhdGggPSBYTkVXVkVDIChjaGFyLCBsZW4pOwotIAl9Ci0gCi1AQCAtMjMxNyw2ICsyMzE3LDMzIEBAIGZvcl9lYWNoX3BhdGggKGNvbnN0IHN0cnVjdCBwYXRoX3ByZWZpeCAqcGF0aHMsCi0gCSAgLyogTG9vayBmaXJzdCBpbiBNQUNISU5FL1ZFUlNJT04gc3ViZGlyZWN0b3J5LiAgKi8KLSAJICBpZiAoIXNraXBfbXVsdGlfZGlyKQotIAkgICAgewotKwkgICAgICBpZiAoIShwbC0+b3NfbXVsdGlsaWIgPyBza2lwX211bHRpX29zX2RpciA6IHNraXBfbXVsdGlfZGlyKSkKLSsJICAgICAgICB7Ci0rCSAgICAgICAgICBjb25zdCBjaGFyICp0aGlzX211bHRpOwotKwkgICAgICAgICAgc2l6ZV90IHRoaXNfbXVsdGlfbGVuOwotKwotKwkgICAgICAgICAgaWYgKHBsLT5vc19tdWx0aWxpYikKLSsJCSAgICB7Ci0rCQkgICAgICB0aGlzX211bHRpID0gbXVsdGlfb3NfZGlyOwotKwkJICAgICAgdGhpc19tdWx0aV9sZW4gPSBtdWx0aV9vc19kaXJfbGVuOwotKwkJICAgIH0KLSsJICAgICAgICAgIGVsc2UKLSsJCSAgICB7Ci0rCQkgICAgICB0aGlzX211bHRpID0gbXVsdGlfZGlyOwotKwkJICAgICAgdGhpc19tdWx0aV9sZW4gPSBtdWx0aV9kaXJfbGVuOwotKwkJICAgIH0KLSsKLSsJICAgICAgICAgIC8qIExvb2sgaW4gbXVsdGlsaWIgTUFDSElORS9WRVJTSU9OIHN1YmRpcmVjdG9yeSBmaXJzdCAqLwotKwkgICAgICAgICAgaWYgKHRoaXNfbXVsdGlfbGVuKQotKwkgICAgICAgICAgICB7Ci0rCQkgICAgICBtZW1jcHkgKHBhdGggKyBsZW4sIHRoaXNfbXVsdGksIHRoaXNfbXVsdGlfbGVuICsgMSk7Ci0rCSAgICAgICAgICAgICAgbWVtY3B5IChwYXRoICsgbGVuICsgdGhpc19tdWx0aV9sZW4sIG11bHRpX3N1ZmZpeCwgc3VmZml4X2xlbiArIDEpOwotKwkgICAgICAgICAgICAgIHJldCA9IGNhbGxiYWNrIChwYXRoLCBjYWxsYmFja19pbmZvKTsKLSsJICAgICAgICAgICAgICAgIGlmIChyZXQpCi0rCQkgICAgICAgICAgYnJlYWs7Ci0rCSAgICAgICAgICAgIH0KLSsJICAgICAgICB9Ci0rCi0gCSAgICAgIG1lbWNweSAocGF0aCArIGxlbiwgbXVsdGlfc3VmZml4LCBzdWZmaXhfbGVuICsgMSk7Ci0gCSAgICAgIHJldCA9IGNhbGxiYWNrIChwYXRoLCBjYWxsYmFja19pbmZvKTsKLSAJICAgICAgaWYgKHJldCkKLS0tIAotMi42LjMKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQyLUZpeC12YXJpb3VzLV9GT1JfQlVJTEQtYW5kLXJlbGF0ZWQtdmFyaWFibGVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQyLUZpeC12YXJpb3VzLV9GT1JfQlVJTEQtYW5kLXJlbGF0ZWQtdmFyaWFibGVzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWY3NjRiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA0Mi1GaXgtdmFyaW91cy1fRk9SX0JVSUxELWFuZC1yZWxhdGVkLXZhcmlhYmxlcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi1Gcm9tIDc4ZTc3MjA2OTAyMzQ5YzkyNTZmMDZjM2RkMTc5MTk3YTM5YWYyZTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogTW9uLCA3IERlYyAyMDE1IDIzOjQyOjQ1ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggNDIvNDZdIEZpeCB2YXJpb3VzIF9GT1JfQlVJTEQgYW5kIHJlbGF0ZWQgdmFyaWFibGVzCi0KLVdoZW4gZG9pbmcgYSBGT1JfQlVJTEQgdGhpbmcsIHlvdSBoYXZlIHRvIG92ZXJyaWRlIENGTEFHUyB3aXRoCi1DRkxBR1NfRk9SX0JVSUxELiBBbmQgaWYgeW91IHVzZSBDKyssIHlvdSBhbHNvIGhhdmUgdG8gb3ZlcnJpZGUKLUNYWEZMQUdTIHdpdGggQ1hYRkxBR1NfRk9SX0JVSUxELgotV2l0aG91dCB0aGlzLCB3aGVuIGJ1aWxkaW5nIGZvciBtaW5ndywgeW91IGVuZCB1cCB0cnlpbmcgdG8gdXNlCi10aGUgbWluZ3cgaGVhZGVycyBmb3IgYSBob3N0IGJ1aWxkLgotCi1UaGUgc2FtZSBnb2VzIGZvciBvdGhlciB2YXJpYWJsZXMgYXMgd2VsbCwgc3VjaCBhcyBDUFBGTEFHUywKLUNQUCwgYW5kIEdNUElOQy4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IFBldGVyIFNlZWJhY2ggPHBldGVyLnNlZWJhY2hAd2luZHJpdmVyLmNvbT4KLVNpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBNYWtlZmlsZS5pbiAgICAgIHwgNiArKysrKysKLSBNYWtlZmlsZS50cGwgICAgIHwgNSArKysrKwotIGdjYy9NYWtlZmlsZS5pbiAgfCAyICstCi0gZ2NjL2NvbmZpZ3VyZSAgICB8IDIgKy0KLSBnY2MvY29uZmlndXJlLmFjIHwgMiArLQotIDUgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KLWluZGV4IGE3ODNlMWUuLjhiNmQzZDIgMTAwNjQ0Ci0tLS0gYS9NYWtlZmlsZS5pbgotKysrIGIvTWFrZWZpbGUuaW4KLUBAIC0xNTIsNiArMTUyLDcgQEAgQlVJTERfRVhQT1JUUyA9IFwKLSAJQ1BQPSIkKENDX0ZPUl9CVUlMRCkgLUUiOyBleHBvcnQgQ1BQOyBcCi0gCUNGTEFHUz0iJChDRkxBR1NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDRkxBR1M7IFwKLSAJQ09ORklHX1NIRUxMPSIkKFNIRUxMKSI7IGV4cG9ydCBDT05GSUdfU0hFTEw7IFwKLSsJQ1BQRkxBR1M9IiQoQ1BQRkxBR1NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDUFBGTEFHUzsgXAotIAlDWFg9IiQoQ1hYX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ1hYOyBcCi0gCUNYWEZMQUdTPSIkKENYWEZMQUdTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ1hYRkxBR1M7IFwKLSAJR0NKPSIkKEdDSl9GT1JfQlVJTEQpIjsgZXhwb3J0IEdDSjsgXAotQEAgLTE3MCw2ICsxNzEsOSBAQCBCVUlMRF9FWFBPUlRTID0gXAotICMgYnVpbHQgZm9yIHRoZSBidWlsZCBzeXN0ZW0gdG8gb3ZlcnJpZGUgdGhvc2UgaW4gQkFTRV9GTEFHU19UT19QQVNTLgotIEVYVFJBX0JVSUxEX0ZMQUdTID0gXAotIAlDRkxBR1M9IiQoQ0ZMQUdTX0ZPUl9CVUlMRCkiIFwKLSsJQ1hYRkxBR1M9IiQoQ1hYRkxBR1NfRk9SX0JVSUxEKSIgXAotKwlDUFA9IiQoQ0NfRk9SX0JVSUxEKSAtRSIgXAotKwlDUFBGTEFHUz0iJChDUFBGTEFHU19GT1JfQlVJTEQpIiBcCi0gCUxERkxBR1M9IiQoTERGTEFHU19GT1JfQlVJTEQpIgotIAotICMgVGhpcyBpcyB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBidWlsdCBmb3IgdGhlIGhvc3Qgc3lzdGVtLgotQEAgLTE4Nyw2ICsxOTEsNyBAQCBIT1NUX1NVQkRJUiA9IEBob3N0X3N1YmRpckAKLSBIT1NUX0VYUE9SVFMgPSBcCi0gCSQoQkFTRV9FWFBPUlRTKSBcCi0gCUNDPSIkKENDKSI7IGV4cG9ydCBDQzsgXAotKwlDUFA9IiQoQ0MpIC1FIjsgZXhwb3J0IENQUDsgXAotIAlBREFfQ0ZMQUdTPSIkKEFEQV9DRkxBR1MpIjsgZXhwb3J0IEFEQV9DRkxBR1M7IFwKLSAJQ0ZMQUdTPSIkKENGTEFHUykiOyBleHBvcnQgQ0ZMQUdTOyBcCi0gCUNPTkZJR19TSEVMTD0iJChTSEVMTCkiOyBleHBvcnQgQ09ORklHX1NIRUxMOyBcCi1AQCAtNzEwLDYgKzcxNSw3IEBAIEJBU0VfRkxBR1NfVE9fUEFTUyA9IFwKLSAJIkNDX0ZPUl9CVUlMRD0kKENDX0ZPUl9CVUlMRCkiIFwKLSAJIkNGTEFHU19GT1JfQlVJTEQ9JChDRkxBR1NfRk9SX0JVSUxEKSIgXAotIAkiQ1hYX0ZPUl9CVUlMRD0kKENYWF9GT1JfQlVJTEQpIiBcCi0rCSJDWFhGTEFHU19GT1JfQlVJTEQ9JChDWFhGTEFHU19GT1JfQlVJTEQpIiBcCi0gCSJFWFBFQ1Q9JChFWFBFQ1QpIiBcCi0gCSJGTEVYPSQoRkxFWCkiIFwKLSAJIklOU1RBTEw9JChJTlNUQUxMKSIgXAotZGlmZiAtLWdpdCBhL01ha2VmaWxlLnRwbCBiL01ha2VmaWxlLnRwbAotaW5kZXggMWVhMTk1NC4uNzhhNTljMyAxMDA2NDQKLS0tLSBhL01ha2VmaWxlLnRwbAotKysrIGIvTWFrZWZpbGUudHBsCi1AQCAtMTU0LDYgKzE1NCw3IEBAIEJVSUxEX0VYUE9SVFMgPSBcCi0gCUNDPSIkKENDX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0M7IFwKLSAJQ0ZMQUdTPSIkKENGTEFHU19GT1JfQlVJTEQpIjsgZXhwb3J0IENGTEFHUzsgXAotIAlDT05GSUdfU0hFTEw9IiQoU0hFTEwpIjsgZXhwb3J0IENPTkZJR19TSEVMTDsgXAotKwlDUFBGTEFHUz0iJChDUFBGTEFHU19GT1JfQlVJTEQpIjsgZXhwb3J0IENQUEZMQUdTOyBcCi0gCUNYWD0iJChDWFhfRk9SX0JVSUxEKSI7IGV4cG9ydCBDWFg7IFwKLSAJQ1hYRkxBR1M9IiQoQ1hYRkxBR1NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDWFhGTEFHUzsgXAotIAlHQ0o9IiQoR0NKX0ZPUl9CVUlMRCkiOyBleHBvcnQgR0NKOyBcCi1AQCAtMTcyLDYgKzE3Myw5IEBAIEJVSUxEX0VYUE9SVFMgPSBcCi0gIyBidWlsdCBmb3IgdGhlIGJ1aWxkIHN5c3RlbSB0byBvdmVycmlkZSB0aG9zZSBpbiBCQVNFX0ZMQUdTX1RPX1BBU1MuCi0gRVhUUkFfQlVJTERfRkxBR1MgPSBcCi0gCUNGTEFHUz0iJChDRkxBR1NfRk9SX0JVSUxEKSIgXAotKwlDWFhGTEFHUz0iJChDWFhGTEFHU19GT1JfQlVJTEQpIiBcCi0rCUNQUD0iJChDQ19GT1JfQlVJTEQpIC1FIiBcCi0rCUNQUEZMQUdTPSIkKENQUEZMQUdTX0ZPUl9CVUlMRCkiIFwKLSAJTERGTEFHUz0iJChMREZMQUdTX0ZPUl9CVUlMRCkiCi0gCi0gIyBUaGlzIGlzIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIGJ1aWx0IGZvciB0aGUgaG9zdCBzeXN0ZW0uCi1AQCAtMTg5LDYgKzE5Myw3IEBAIEhPU1RfU1VCRElSID0gQGhvc3Rfc3ViZGlyQAotIEhPU1RfRVhQT1JUUyA9IFwKLSAJJChCQVNFX0VYUE9SVFMpIFwKLSAJQ0M9IiQoQ0MpIjsgZXhwb3J0IENDOyBcCi0rCUNQUD0iJChDQykgLUUiOyBleHBvcnQgQ1BQOyBcCi0gCUFEQV9DRkxBR1M9IiQoQURBX0NGTEFHUykiOyBleHBvcnQgQURBX0NGTEFHUzsgXAotIAlDRkxBR1M9IiQoQ0ZMQUdTKSI7IGV4cG9ydCBDRkxBR1M7IFwKLSAJQ09ORklHX1NIRUxMPSIkKFNIRUxMKSI7IGV4cG9ydCBDT05GSUdfU0hFTEw7IFwKLWRpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KLWluZGV4IGNkNWJjNGEuLjk4YWU0ZjQgMTAwNjQ0Ci0tLS0gYS9nY2MvTWFrZWZpbGUuaW4KLSsrKyBiL2djYy9NYWtlZmlsZS5pbgotQEAgLTc2Miw3ICs3NjIsNyBAQCBCVUlMRF9MSU5LRVJGTEFHUyA9ICQoQlVJTERfQ1hYRkxBR1MpCi0gIyBOYXRpdmUgbGlua2VyIGFuZCBwcmVwcm9jZXNzb3IgZmxhZ3MuICBGb3IgeC1mcmFnbWVudCBvdmVycmlkZXMuCi0gQlVJTERfTERGTEFHUz1AQlVJTERfTERGTEFHU0AKLSBCVUlMRF9DUFBGTEFHUz0gLUkuIC1JJChARCkgLUkkKHNyY2RpcikgLUkkKHNyY2RpcikvJChARCkgXAotLQkJLUkkKHNyY2RpcikvLi4vaW5jbHVkZSBASU5DSU5UTEAgJChDUFBJTkMpICQoQ1BQRkxBR1MpCi0rCQktSSQoc3JjZGlyKS8uLi9pbmNsdWRlIEBJTkNJTlRMQCAkKENQUElOQykgJChDUFBGTEFHU19GT1JfQlVJTEQpCi0gCi0gIyBBY3R1YWwgbmFtZSB0byB1c2Ugd2hlbiBpbnN0YWxsaW5nIGEgbmF0aXZlIGNvbXBpbGVyLgotIEdDQ19JTlNUQUxMX05BTUUgOj0gJChzaGVsbCBlY2hvIGdjY3xzZWQgJyQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSknKQotZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCi1pbmRleCA2ZGY1OTRjLi5mY2IwNWU3IDEwMDc1NQotLS0tIGEvZ2NjL2NvbmZpZ3VyZQotKysrIGIvZ2NjL2NvbmZpZ3VyZQotQEAgLTExNTIxLDcgKzExNTIxLDcgQEAgZWxzZQotIAlDQz0iJHtDQ19GT1JfQlVJTER9IiBDRkxBR1M9IiR7Q0ZMQUdTX0ZPUl9CVUlMRH0iIFwKLSAJQ1hYPSIke0NYWF9GT1JfQlVJTER9IiBDWFhGTEFHUz0iJHtDWFhGTEFHU19GT1JfQlVJTER9IiBcCi0gCUxEPSIke0xEX0ZPUl9CVUlMRH0iIExERkxBR1M9IiR7TERGTEFHU19GT1JfQlVJTER9IiBcCi0tCUdNUElOQz0iIiBDUFBGTEFHUz0iJHtDUFBGTEFHU30gLURHRU5FUkFUT1JfRklMRSIgXAotKwlHTVBJTkM9IiIgQ1BQRkxBR1M9IiR7Q1BQRkxBR1NfRk9SX0JVSUxEfSAtREdFTkVSQVRPUl9GSUxFIiBcCi0gCSR7cmVhbHNyY2Rpcn0vY29uZmlndXJlIFwKLSAJCS0tZW5hYmxlLWxhbmd1YWdlcz0ke2VuYWJsZV9sYW5ndWFnZXMtYWxsfSBcCi0gCQktLXRhcmdldD0kdGFyZ2V0X2FsaWFzIC0taG9zdD0kYnVpbGRfYWxpYXMgLS1idWlsZD0kYnVpbGRfYWxpYXMKLWRpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYwotaW5kZXggM2JiMjE3My4uOTIzYmM5YSAxMDA2NDQKLS0tLSBhL2djYy9jb25maWd1cmUuYWMKLSsrKyBiL2djYy9jb25maWd1cmUuYWMKLUBAIC0xNjMzLDcgKzE2MzMsNyBAQCBlbHNlCi0gCUNDPSIke0NDX0ZPUl9CVUlMRH0iIENGTEFHUz0iJHtDRkxBR1NfRk9SX0JVSUxEfSIgXAotIAlDWFg9IiR7Q1hYX0ZPUl9CVUlMRH0iIENYWEZMQUdTPSIke0NYWEZMQUdTX0ZPUl9CVUlMRH0iIFwKLSAJTEQ9IiR7TERfRk9SX0JVSUxEfSIgTERGTEFHUz0iJHtMREZMQUdTX0ZPUl9CVUlMRH0iIFwKLS0JR01QSU5DPSIiIENQUEZMQUdTPSIke0NQUEZMQUdTfSAtREdFTkVSQVRPUl9GSUxFIiBcCi0rCUdNUElOQz0iIiBDUFBGTEFHUz0iJHtDUFBGTEFHU19GT1JfQlVJTER9IC1ER0VORVJBVE9SX0ZJTEUiIFwKLSAJJHtyZWFsc3JjZGlyfS9jb25maWd1cmUgXAotIAkJLS1lbmFibGUtbGFuZ3VhZ2VzPSR7ZW5hYmxlX2xhbmd1YWdlcy1hbGx9IFwKLSAJCS0tdGFyZ2V0PSR0YXJnZXRfYWxpYXMgLS1ob3N0PSRidWlsZF9hbGlhcyAtLWJ1aWxkPSRidWlsZF9hbGlhcwotLS0gCi0yLjYuMwotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDMtbGlic3RkYy1TdXBwb3J0LW11c2wucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDMtbGlic3RkYy1TdXBwb3J0LW11c2wucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhZDg0MDIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQzLWxpYnN0ZGMtU3VwcG9ydC1tdXNsLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotRnJvbSBkZjQzMGI5NDNhMmRmNmI3MjA1NGM4MDhkNGI5MzMzOGE4MjU2MmRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFR1ZSwgOCBEZWMgMjAxNSAwODoyMzozNCArMDAwMAotU3ViamVjdDogW1BBVENIIDQzLzQ2XSBsaWJzdGRjKys6IFN1cHBvcnQgbXVzbAotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotIGxpYnN0ZGMrKy12My9jb25maWd1cmUuaG9zdCB8IDEwICsrKysrKysrKysKLSAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5ob3N0IGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5ob3N0Ci1pbmRleCA2NDAxOTljLi4xNzU2NDQ0IDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5ob3N0Ci0rKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlLmhvc3QKLUBAIC0yNzQsMTQgKzI3NCwyNCBAQCBjYXNlICIke2hvc3Rfb3N9IiBpbgotICAgICBvc19pbmNsdWRlX2Rpcj0ib3MvYnNkL2ZyZWVic2QiCi0gICAgIDs7Ci0gICBnbnUqIHwgbGludXgqIHwga2ZyZWVic2QqLWdudSB8IGtuZXRic2QqLWdudSkKLSsgICAgIyBjaGVjayBmb3IgbXVzbCBieSB0YXJnZXQKLSsgICAgY2FzZSAiJHtob3N0X29zfSIgaW4KLSsgICAgICAqLW11c2wqKQotKyAgICAgICAgb3NfaW5jbHVkZV9kaXI9Im9zL2dlbmVyaWMiCi0rICAgICAgICA7OwotKyAgICAgICopCi0gICAgIGlmIFsgIiR1Y2xpYmMiID0gInllcyIgXTsgdGhlbgotICAgICAgIG9zX2luY2x1ZGVfZGlyPSJvcy91Y2xpYmMiCi0gICAgIGVsaWYgWyAiJGJpb25pYyIgPSAieWVzIiBdOyB0aGVuCi0gICAgICAgb3NfaW5jbHVkZV9kaXI9Im9zL2Jpb25pYyIKLSsgICAgZWxpZiBbICIkbXVzbCIgPSAieWVzIiBdOyB0aGVuCi0rICAgICAgb3NfaW5jbHVkZV9kaXI9Im9zL2dlbmVyaWMiCi0gICAgIGVsc2UKLSAgICAgICBvc19pbmNsdWRlX2Rpcj0ib3MvZ251LWxpbnV4IgotICAgICBmaQotICAgICA7OwotKyAgICBlc2FjCi0rICAgIDs7Ci0gICBocHV4KikKLSAgICAgb3NfaW5jbHVkZV9kaXI9Im9zL2hwdXgiCi0gICAgIDs7Ci0tLSAKLTIuNi4zCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA0NC1BZGRpbmctbW11c2wtYXMtYS1tdXNsLWxpYmMtc3BlY2lmaWVyLWFuZC10aGUtbmVjZXNzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQ0LUFkZGluZy1tbXVzbC1hcy1hLW11c2wtbGliYy1zcGVjaWZpZXItYW5kLXRoZS1uZWNlc3MucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2YWE5NmMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQ0LUFkZGluZy1tbXVzbC1hcy1hLW11c2wtbGliYy1zcGVjaWZpZXItYW5kLXRoZS1uZWNlc3MucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNzAgKzAsMCBAQAotRnJvbSAwYjU0Nzk5ZDgwZmI4NTljN2IxNDI0NjdlNGQ0MmM5OWRiNTlkZjUwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFR1ZSwgOCBEZWMgMjAxNSAwODozMDozNSArMDAwMAotU3ViamVjdDogW1BBVENIIDQ0LzQ2XSBBZGRpbmcgLW1tdXNsIGFzIGEgbXVzbCBsaWJjIHNwZWNpZmllciwgYW5kIHRoZQotIG5lY2Vzc2FyeSBoYWNrcyBmb3IgaXQgdG8ga25vdyBob3cgdG8gZmluZCBtdXNsJ3MgZHluYW1pYyBsaW5rZXIuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW3BhcnRpYWxdCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi0gZ2NjL2NvbmZpZy5nY2MgICAgICAgICAgICAgICAgfCAgMTAgKysrKy0KLSBnY2MvY29uZmlnL2xpbnV4LmggICAgICAgICAgICB8IDEwMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0KLSBnY2MvY29uZmlnL2xpbnV4Lm9wdCAgICAgICAgICB8ICAgNCArKwotIGdjYy9jb25maWcvcnM2MDAwL3NlY3VyZXBsdC5oIHwgICAxICsKLSBnY2MvY29uZmlnL3JzNjAwMC9zeXN2NC5oICAgICB8ICAgNSArKysKLSBnY2MvZ2luY2x1ZGUvc3RkZGVmLmggICAgICAgICB8ICAgMyArKwotIDYgZmlsZXMgY2hhbmdlZCwgMTEwIGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQotCi1JbmRleDogZ2NjLTUuNC4wL2djYy9jb25maWcuZ2NjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTUuNC4wLm9yaWcvZ2NjL2NvbmZpZy5nY2MKLSsrKyBnY2MtNS40LjAvZ2NjL2NvbmZpZy5nY2MKLUBAIC01NzUsNyArNTc1LDcgQEAgY2FzZSAke3RhcmdldH0gaW4KLSBlc2FjCi0gCi0gIyBDb21tb24gQyBsaWJyYXJpZXMuCi0tdG1fZGVmaW5lcz0iJHRtX2RlZmluZXMgTElCQ19HTElCQz0xIExJQkNfVUNMSUJDPTIgTElCQ19CSU9OSUM9MyIKLSt0bV9kZWZpbmVzPSIkdG1fZGVmaW5lcyBMSUJDX0dMSUJDPTEgTElCQ19VQ0xJQkM9MiBMSUJDX0JJT05JQz0zIExJQkNfTVVTTD00IgotIAotICMgMzItYml0IHg4NiBwcm9jZXNzb3JzIHN1cHBvcnRlZCBieSAtLXdpdGgtYXJjaD0uICBFYWNoIHByb2Nlc3NvcgotICMgTVVTVCBiZSBzZXBhcmF0ZWQgYnkgZXhhY3RseSBvbmUgc3BhY2UuCi1AQCAtNzIwLDYgKzcyMCw5IEBAIGNhc2UgJHt0YXJnZXR9IGluCi0gICAgICotKi0qdWNsaWJjKikKLSAgICAgICB0bV9kZWZpbmVzPSIkdG1fZGVmaW5lcyBERUZBVUxUX0xJQkM9TElCQ19VQ0xJQkMiCi0gICAgICAgOzsKLSsgICAgKi0qLSptdXNsKikKLSsgICAgICB0bV9kZWZpbmVzPSIkdG1fZGVmaW5lcyBERUZBVUxUX0xJQkM9TElCQ19NVVNMIgotKyAgICAgIDs7Ci0gICAgICopCi0gICAgICAgdG1fZGVmaW5lcz0iJHRtX2RlZmluZXMgREVGQVVMVF9MSUJDPUxJQkNfR0xJQkMiCi0gICAgICAgOzsKLUBAIC0yNDIwLDYgKzI0MjMsMTEgQEAgcG93ZXJwYyotKi1saW51eCopCi0gCSAgICBwb3dlcnBjKi0qLWxpbnV4KnBhaXJlZCopCi0gCQl0bV9maWxlPSIke3RtX2ZpbGV9IHJzNjAwMC83NTBjbC5oIiA7OwotIAllc2FjCi0rICAgICAgICBjYXNlICR7dGFyZ2V0fSBpbgotKwkgICAgKi1saW51eCotbXVzbCopCi0rCQllbmFibGVfc2VjdXJlcGx0PXllcyA7OwotKwllc2FjCi0rCi0gCWlmIHRlc3QgeCR7ZW5hYmxlX3NlY3VyZXBsdH0gPSB4eWVzOyB0aGVuCi0gCQl0bV9maWxlPSJyczYwMDAvc2VjdXJlcGx0LmggJHt0bV9maWxlfSIKLSAJZmkKLUluZGV4OiBnY2MtNS40LjAvZ2NjL2NvbmZpZy9saW51eC5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTUuNC4wLm9yaWcvZ2NjL2NvbmZpZy9saW51eC5oCi0rKysgZ2NjLTUuNC4wL2djYy9jb25maWcvbGludXguaAotQEAgLTMyLDEwICszMiwxMiBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJCi0gI2RlZmluZSBPUFRJT05fR0xJQkMgIChERUZBVUxUX0xJQkMgPT0gTElCQ19HTElCQykKLSAjZGVmaW5lIE9QVElPTl9VQ0xJQkMgKERFRkFVTFRfTElCQyA9PSBMSUJDX1VDTElCQykKLSAjZGVmaW5lIE9QVElPTl9CSU9OSUMgKERFRkFVTFRfTElCQyA9PSBMSUJDX0JJT05JQykKLSsjZGVmaW5lIE9QVElPTl9NVVNMICAgKERFRkFVTFRfTElCQyA9PSBMSUJDX01VU0wpCi0gI2Vsc2UKLSAjZGVmaW5lIE9QVElPTl9HTElCQyAgKGxpbnV4X2xpYmMgPT0gTElCQ19HTElCQykKLSAjZGVmaW5lIE9QVElPTl9VQ0xJQkMgKGxpbnV4X2xpYmMgPT0gTElCQ19VQ0xJQkMpCi0gI2RlZmluZSBPUFRJT05fQklPTklDIChsaW51eF9saWJjID09IExJQkNfQklPTklDKQotKyNkZWZpbmUgT1BUSU9OX01VU0wgICAobGludXhfbGliYyA9PSBMSUJDX01VU0wpCi0gI2VuZGlmCi0gCi0gI2RlZmluZSBHTlVfVVNFUl9UQVJHRVRfT1NfQ1BQX0JVSUxUSU5TKCkJCQlcCi1AQCAtNTMsMTggKzU1LDIxIEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVEkKLSAgICB1Q2xpYmMgb3IgQmlvbmljIGlzIHRoZSBkZWZhdWx0IEMgbGlicmFyeSBhbmQgd2hldGhlcgotICAgIC1tdWNsaWJjIG9yIC1tZ2xpYmMgb3IgLW1iaW9uaWMgaGFzIGJlZW4gcGFzc2VkIHRvIGNoYW5nZSB0aGUgZGVmYXVsdC4gICovCi0gCi0tI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIxKExJQkMxLCBMSUJDMiwgTElCQzMsIExEMSwgTEQyLCBMRDMpCVwKLS0gICIleyIgTElCQzIgIjoiIExEMiAiOzoleyIgTElCQzMgIjoiIExEMyAiOzoiIExEMSAifX0iCi0rI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIxKExJQkMxLCBMSUJDMiwgTElCQzMsIExJQkM0LCBMRDEsIExEMiwgTEQzLCBMRDQpCVwKLSsgICIleyIgTElCQzIgIjoiIExEMiAiOzoleyIgTElCQzMgIjoiIExEMyAiOzoleyIgTElCQzQgIjoiIExENCAiOzoiIExEMSAifX19IgotIAotICNpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19HTElCQwotLSNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUsIEIpIFwKLS0gIENIT09TRV9EWU5BTUlDX0xJTktFUjEgKCJtZ2xpYmMiLCAibXVjbGliYyIsICJtYmlvbmljIiwgRywgVSwgQikKLSsjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVLCBCLCBNKSBcCi0rICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIxICgibWdsaWJjIiwgIm11Y2xpYmMiLCAibWJpb25pYyIsICJtbXVzbCIsIEcsIFUsIEIsIE0pCi0gI2VsaWYgREVGQVVMVF9MSUJDID09IExJQkNfVUNMSUJDCi0tI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSwgQikgXAotLSAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSMSAoIm11Y2xpYmMiLCAibWdsaWJjIiwgIm1iaW9uaWMiLCBVLCBHLCBCKQotKyNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUsIEIsIE0pIFwKLSsgIENIT09TRV9EWU5BTUlDX0xJTktFUjEgKCJtdWNsaWJjIiwgIm1nbGliYyIsICJtYmlvbmljIiwgIm1tdXNsIiwgVSwgRywgQiwgTSkKLSAjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19CSU9OSUMKLS0jZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVLCBCKSBcCi0tICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIxICgibWJpb25pYyIsICJtZ2xpYmMiLCAibXVjbGliYyIsIEIsIEcsIFUpCi0rI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSwgQiwgTSkgXAotKyAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSMSAoIm1iaW9uaWMiLCAibWdsaWJjIiwgIm11Y2xpYmMiLCAibW11c2wiLCBCLCBHLCBVLCBNKQotKyNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX01VU0wKLSsjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVLCBCLCBNKSBcCi0rICBDSE9PU0VfRFlOQU1JQ19MSU5LRVIxICgibW11c2wiLCAibWdsaWJjIiwgIm11Y2xpYmMiLCAibWJpb25pYyIsIE0sIEcsIFUsIEIpCi0gI2Vsc2UKLSAjZXJyb3IgIlVuc3VwcG9ydGVkIERFRkFVTFRfTElCQyIKLSAjZW5kaWYgLyogREVGQVVMVF9MSUJDICovCi1AQCAtODQsMTYgKzg5LDE2IEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVEkKLSAKLSAjZGVmaW5lIEdOVV9VU0VSX0RZTkFNSUNfTElOS0VSCQkJCQkJXAotICAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSIChHTElCQ19EWU5BTUlDX0xJTktFUiwgVUNMSUJDX0RZTkFNSUNfTElOS0VSLAlcCi0tCQkJIEJJT05JQ19EWU5BTUlDX0xJTktFUikKLSsJCQkgQklPTklDX0RZTkFNSUNfTElOS0VSLCBNVVNMX0RZTkFNSUNfTElOS0VSKQotICNkZWZpbmUgR05VX1VTRVJfRFlOQU1JQ19MSU5LRVIzMgkJCQkJXAotICAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSIChHTElCQ19EWU5BTUlDX0xJTktFUjMyLCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiwgXAotLQkJCSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIzMikKLSsJCQkgQklPTklDX0RZTkFNSUNfTElOS0VSMzIsIE1VU0xfRFlOQU1JQ19MSU5LRVIzMikKLSAjZGVmaW5lIEdOVV9VU0VSX0RZTkFNSUNfTElOS0VSNjQJCQkJCVwKLSAgIENIT09TRV9EWU5BTUlDX0xJTktFUiAoR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCwgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQsIFwKLS0JCQkgQklPTklDX0RZTkFNSUNfTElOS0VSNjQpCi0rCQkJIEJJT05JQ19EWU5BTUlDX0xJTktFUjY0LCBNVVNMX0RZTkFNSUNfTElOS0VSNjQpCi0gI2RlZmluZSBHTlVfVVNFUl9EWU5BTUlDX0xJTktFUlgzMgkJCQkJXAotICAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSIChHTElCQ19EWU5BTUlDX0xJTktFUlgzMiwgVUNMSUJDX0RZTkFNSUNfTElOS0VSWDMyLCBcCi0tCQkJIEJJT05JQ19EWU5BTUlDX0xJTktFUlgzMikKLSsJCQkgQklPTklDX0RZTkFNSUNfTElOS0VSWDMyLCBNVVNMX0RZTkFNSUNfTElOS0VSWDMyKQotIAotIC8qIFdoZXRoZXIgd2UgaGF2ZSBCaW9uaWMgbGliYyBydW50aW1lICovCi0gI3VuZGVmIFRBUkdFVF9IQVNfQklPTklDCi1AQCAtMTIzLDMgKzEyOCw3NCBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJCi0gIyBkZWZpbmUgVEFSR0VUX0xJQkNfSEFTX0ZVTkNUSU9OIGxpbnV4X2xpYmNfaGFzX2Z1bmN0aW9uCi0gCi0gI2VuZGlmCi0rCi0rLyogbXVzbCBhdm9pZHMgcHJvYmxlbWF0aWMgaW5jbHVkZXMgYnkgcmVhcnJhbmdpbmcgdGhlIGluY2x1ZGUgZGlyZWN0b3JpZXMuCi0rICogVW5mb3J0dW5hdGVseSwgdGhpcyBpcyBtb3N0bHkgZHVwbGljYXRlZCBmcm9tIGNwcGRlZmF1bHQuYyAqLwotKyNpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19NVVNMCi0rI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfR1BQCQkJXAotKyAgICB7IEdQTFVTUExVU19JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCQlcCi0rICAgICAgR1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09ULCAwIH0sCQlcCi0rICAgIHsgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVIsICJHKysiLCAxLCAxLAkJXAotKyAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMSB9LAkJXAotKyAgICB7IEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCVwKLSsgICAgICBHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1QsIDAgfSwKLSsKLSsjaWZkZWYgTE9DQUxfSU5DTFVERV9ESVIKLSsjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9MT0NBTAkJCVwKLSsgICAgeyBMT0NBTF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMSwgMiB9LAkJXAotKyAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAwIH0sCi0rI2Vsc2UKLSsjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9MT0NBTAotKyNlbmRpZgotKwotKyNpZmRlZiBQUkVGSVhfSU5DTFVERV9ESVIKLSsjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9QUkVGSVgJCQlcCi0rICAgIHsgUFJFRklYX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAwLCAwfSwKLSsjZWxzZQotKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX1BSRUZJWAotKyNlbmRpZgotKwotKyNpZmRlZiBDUk9TU19JTkNMVURFX0RJUgotKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX0NST1NTCQkJXAotKyAgICB7IENST1NTX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwgMH0sCi0rI2Vsc2UKLSsjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9DUk9TUwotKyNlbmRpZgotKwotKyNpZmRlZiBUT09MX0lOQ0xVREVfRElSCi0rI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfVE9PTAkJCVwKLSsgICAgeyBUT09MX0lOQ0xVREVfRElSLCAiQklOVVRJTFMiLCAwLCAxLCAwLCAwfSwKLSsjZWxzZQotKyNkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX1RPT0wKLSsjZW5kaWYKLSsKLSsjaWZkZWYgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSCi0rI2RlZmluZSBJTkNMVURFX0RFRkFVTFRTX01VU0xfTkFUSVZFCQkJXAotKyAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUiwgMCwgMCwgMCwgMSwgMiB9LAlcCi0rICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSLCAwLCAwLCAwLCAxLCAwIH0sCi0rI2Vsc2UKLSsjZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9OQVRJVkUKLSsjZW5kaWYKLSsKLSsjaWYgZGVmaW5lZCAoQ1JPU1NfRElSRUNUT1JZX1NUUlVDVFVSRSkgJiYgIWRlZmluZWQgKFRBUkdFVF9TWVNURU1fUk9PVCkKLSsjIHVuZGVmIElOQ0xVREVfREVGQVVMVFNfTVVTTF9MT0NBTAotKyMgZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9MT0NBTAotKyMgdW5kZWYgSU5DTFVERV9ERUZBVUxUU19NVVNMX05BVElWRQotKyMgZGVmaW5lIElOQ0xVREVfREVGQVVMVFNfTVVTTF9OQVRJVkUKLSsjZWxzZQotKyMgdW5kZWYgSU5DTFVERV9ERUZBVUxUU19NVVNMX0NST1NTCi0rIyBkZWZpbmUgSU5DTFVERV9ERUZBVUxUU19NVVNMX0NST1NTCi0rI2VuZGlmCi0rCi0rI3VuZGVmIElOQ0xVREVfREVGQVVMVFMKLSsjZGVmaW5lIElOQ0xVREVfREVGQVVMVFMJCQkJXAotKyAgewkJCQkJCQlcCi0rICAgIElOQ0xVREVfREVGQVVMVFNfTVVTTF9HUFAJCQkJXAotKyAgICBJTkNMVURFX0RFRkFVTFRTX01VU0xfUFJFRklYCQkJXAotKyAgICBJTkNMVURFX0RFRkFVTFRTX01VU0xfQ1JPU1MJCQkJXAotKyAgICBJTkNMVURFX0RFRkFVTFRTX01VU0xfVE9PTAkJCQlcCi0rICAgIElOQ0xVREVfREVGQVVMVFNfTVVTTF9OQVRJVkUJCQlcCi0rICAgIHsgR0NDX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMSwgMCwgMCB9LAkJXAotKyAgICB7IDAsIDAsIDAsIDAsIDAsIDAgfQkJCQlcCi0rICB9Ci0rI2VuZGlmCi1JbmRleDogZ2NjLTUuNC4wL2djYy9jb25maWcvbGludXgub3B0Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2NjLTUuNC4wLm9yaWcvZ2NjL2NvbmZpZy9saW51eC5vcHQKLSsrKyBnY2MtNS40LjAvZ2NjL2NvbmZpZy9saW51eC5vcHQKLUBAIC0yOCw1ICsyOCw5IEBAIFRhcmdldCBSZXBvcnQgUmVqZWN0TmVnYXRpdmUgVmFyKGxpbnV4X2wKLSBVc2UgR05VIEMgbGlicmFyeQotIAotIG11Y2xpYmMKLS1UYXJnZXQgUmVwb3J0IFJlamVjdE5lZ2F0aXZlIFZhcihsaW51eF9saWJjLExJQkNfVUNMSUJDKSBOZWdhdGl2ZShtYmlvbmljKQotK1RhcmdldCBSZXBvcnQgUmVqZWN0TmVnYXRpdmUgVmFyKGxpbnV4X2xpYmMsTElCQ19VQ0xJQkMpIE5lZ2F0aXZlKG1tdXNsKQotIFVzZSB1Q2xpYmMgQyBsaWJyYXJ5Ci0rCi0rbW11c2wKLStUYXJnZXQgUmVwb3J0IFJlamVjdE5lZ2F0aXZlIFZhcihsaW51eF9saWJjLExJQkNfTVVTTCkgTmVnYXRpdmUobWJpb25pYykKLStVc2UgbXVzbCBDIGxpYnJhcnkKLUluZGV4OiBnY2MtNS40LjAvZ2NjL2NvbmZpZy9yczYwMDAvc2VjdXJlcGx0LmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNS40LjAub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9zZWN1cmVwbHQuaAotKysrIGdjYy01LjQuMC9nY2MvY29uZmlnL3JzNjAwMC9zZWN1cmVwbHQuaAotQEAgLTE4LDMgKzE4LDQgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4KLSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotIAotICNkZWZpbmUgQ0MxX1NFQ1VSRV9QTFRfREVGQVVMVF9TUEVDICItbXNlY3VyZS1wbHQiCi0rI2RlZmluZSBMSU5LX1NFQ1VSRV9QTFRfREVGQVVMVF9TUEVDICItLXNlY3VyZS1wbHQiCi1JbmRleDogZ2NjLTUuNC4wL2djYy9jb25maWcvcnM2MDAwL3N5c3Y0LmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnY2MtNS40LjAub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9zeXN2NC5oCi0rKysgZ2NjLTUuNC4wL2djYy9jb25maWcvcnM2MDAwL3N5c3Y0LmgKLUBAIC01MzgsNiArNTM4LDEwIEBAIEVORElBTl9TRUxFQ1QoIiAtbWJpZyIsICIgLW1saXR0bGUiLCBERUYKLSAjZGVmaW5lIENDMV9TRUNVUkVfUExUX0RFRkFVTFRfU1BFQyAiIgotICNlbmRpZgotIAotKyNpZm5kZWYgTElOS19TRUNVUkVfUExUX0RFRkFVTFRfU1BFQwotKyNkZWZpbmUgTElOS19TRUNVUkVfUExUX0RFRkFVTFRfU1BFQyAiIgotKyNlbmRpZgotKwotIC8qIFBhc3MgLUcgeHh4IHRvIHRoZSBjb21waWxlci4gICovCi0gI3VuZGVmIENDMV9TUEVDCi0gI2RlZmluZQlDQzFfU1BFQyAiJXtHKn0gJShjYzFfY3B1KSIgXAotQEAgLTg4OSw2ICs4OTMsNyBAQCBuY3J0bi5vJXMiCi0gICB7ICJsaW5rX29zX29wZW5ic2QiLAkJTElOS19PU19PUEVOQlNEX1NQRUMgfSwJCQlcCi0gICB7ICJsaW5rX29zX2RlZmF1bHQiLAkJTElOS19PU19ERUZBVUxUX1NQRUMgfSwJCQlcCi0gICB7ICJjYzFfc2VjdXJlX3BsdF9kZWZhdWx0IiwJQ0MxX1NFQ1VSRV9QTFRfREVGQVVMVF9TUEVDIH0sCQlcCi0rICB7ICJsaW5rX3NlY3VyZV9wbHRfZGVmYXVsdCIsCUxJTktfU0VDVVJFX1BMVF9ERUZBVUxUX1NQRUMgfSwJCVwKLSAgIHsgImNwcF9vc19hZHMiLAkJQ1BQX09TX0FEU19TUEVDIH0sCQkJXAotICAgeyAiY3BwX29zX3llbGxvd2tuaWZlIiwJQ1BQX09TX1lFTExPV0tOSUZFX1NQRUMgfSwJCVwKLSAgIHsgImNwcF9vc19tdm1lIiwJCUNQUF9PU19NVk1FX1NQRUMgfSwJCQlcCi1JbmRleDogZ2NjLTUuNC4wL2djYy9naW5jbHVkZS9zdGRkZWYuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdjYy01LjQuMC5vcmlnL2djYy9naW5jbHVkZS9zdGRkZWYuaAotKysrIGdjYy01LjQuMC9nY2MvZ2luY2x1ZGUvc3RkZGVmLmgKLUBAIC0xODQsNiArMTg0LDcgQEAgdHlwZWRlZiBfX1BUUkRJRkZfVFlQRV9fIHB0cmRpZmZfdDsKLSAjaWZuZGVmIF9HQ0NfU0laRV9UCi0gI2lmbmRlZiBfU0laRVRfCi0gI2lmbmRlZiBfX3NpemVfdAotKyNpZm5kZWYgX19ERUZJTkVEX3NpemVfdCAvKiBtdXNsICovCi0gI2RlZmluZSBfX3NpemVfdF9fCS8qIEJlT1MgKi8KLSAjZGVmaW5lIF9fU0laRV9UX18JLyogQ3JheSBVbmljb3MvTWsgKi8KLSAjZGVmaW5lIF9TSVpFX1QKLUBAIC0yMDAsNiArMjAxLDcgQEAgdHlwZWRlZiBfX1BUUkRJRkZfVFlQRV9fIHB0cmRpZmZfdDsKLSAjZGVmaW5lIF9fX2ludF9zaXplX3RfaAotICNkZWZpbmUgX0dDQ19TSVpFX1QKLSAjZGVmaW5lIF9TSVpFVF8KLSsjZGVmaW5lIF9fREVGSU5FRF9zaXplX3QgLyogbXVzbCAqLwotICNpZiAoZGVmaW5lZCAoX19GcmVlQlNEX18pICYmIChfX0ZyZWVCU0RfXyA+PSA1KSkgXAotICAgfHwgZGVmaW5lZChfX0RyYWdvbkZseV9fKSBcCi0gICB8fCBkZWZpbmVkKF9fRnJlZUJTRF9rZXJuZWxfXykKLUBAIC0yMTgsNiArMjIwLDcgQEAgdHlwZWRlZiBfX1NJWkVfVFlQRV9fIHNpemVfdDsKLSB0eXBlZGVmIGxvbmcgc3NpemVfdDsKLSAjZW5kaWYgLyogX19CRU9TX18gKi8KLSAjZW5kaWYgLyogIShkZWZpbmVkIChfX0dOVUdfXykgJiYgZGVmaW5lZCAoc2l6ZV90KSkgKi8KLSsjZW5kaWYgLyogX19ERUZJTkVEX3NpemVfdCAqLwotICNlbmRpZiAvKiBfX3NpemVfdCAqLwotICNlbmRpZiAvKiBfU0laRVRfICovCi0gI2VuZGlmIC8qIF9HQ0NfU0laRV9UICovCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDUtU3VwcG9ydC1mb3ItYXJtLWxpbnV4LW11c2wucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDUtU3VwcG9ydC1mb3ItYXJtLWxpbnV4LW11c2wucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjMTExNWEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQ1LVN1cHBvcnQtZm9yLWFybS1saW51eC1tdXNsLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLUZyb20gYTZjNjQ5NTcxZDQ5Yzk3MmU2ZDIwNzU3Nzc4MGFkYTdlOWI2YmFkNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBUdWUsIDggRGVjIDIwMTUgMDg6MzE6NTIgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCA0NS81N10gU3VwcG9ydCBmb3IgYXJtLWxpbnV4LW11c2wuCi0KLUZpeCBtdXNsIGxkc28gZm9yIGFsbCBhcmNoZXMKLQotVXBzdHJlYW0tU3RhdHVzOiBiYWNrcG9ydCBbcGFydGlhbF0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBnY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oIHwgIDEgKwotIGdjYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCAgICAgICAgfCAxNyArKysrKysrKysrKysrKysrKwotIGdjYy9jb25maWcvaTM4Ni9saW51eC5oICAgICAgICAgICAgfCAgMSArCi0gZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaCAgICAgICAgICB8ICA1ICsrKysrCi0gZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmggICAgICAgICAgICB8ICA4ICsrKysrKystCi0gZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oICAgICAgICB8IDEzICsrKysrKysrKy0tLS0KLSBnY2MvY29uZmlnL3JzNjAwMC9zeXN2NC5oICAgICAgICAgIHwgMTAgKysrKysrKy0tLQotIGxpYml0bS9jb25maWcvYXJtL2h3Y2FwLmNjICAgICAgICAgfCAgNCArKysrCi0gbGliaXRtL2NvbmZpZy9saW51eC94ODYvdGxzLmggICAgICB8ICA4ICsrKysrKy0tCi0gOSBmaWxlcyBjaGFuZ2VkLCA1NyBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmggYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCi1pbmRleCBmOWU2NWZjLi4xYjJkMGMwIDEwMDY0NAotLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAotKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAotQEAgLTIyLDYgKzIyLDcgQEAKLSAjZGVmaW5lIEdDQ19BQVJDSDY0X0xJTlVYX0gKLSAKLSAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtYWFyY2g2NCV7bWJpZy1lbmRpYW46X2JlfSV7bWFiaT1pbHAzMjpfaWxwMzJ9LnNvLjEiCi0rI2RlZmluZSBNVVNMX0RZTkFNSUNfTElOS0VSICBTWVNURU1MSUJTX0RJUiAibGQtbXVzbC1hYXJjaDY0LnNvLjEiCi0gCi0gI2RlZmluZSBNVVNMX0RZTkFNSUNfTElOS0VSICBTWVNURU1MSUJTX0RJUiAibGQtbXVzbC1hYXJjaDY0LnNvLjEiCi0gCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCi1pbmRleCAwNDhhMDYyLi5hZGI5YzQ0IDEwMDY0NAotLS0tIGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCi0rKysgYi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKLUBAIC04MSw2ICs4MSwyMyBAQAotICN1bmRlZiBUQVJHRVRfRklYX1Y0QlhfU1BFQwotICNkZWZpbmUgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgIiV7bWNwdT1hcm04fG1jcHU9YXJtODEwfG1jcHU9c3Ryb25nYXJtKnxtYXJjaD1hcm12NDogLS1maXgtdjRieH0iCi0gCi0rLyogRm9yIEFSTSBtdXNsIGN1cnJlbnRseSBzdXBwb3J0cyBmb3VyIGR5bmFtaWMgbGlua2VyczoKLSsgICAtIGxkLW11c2wtYXJtLnNvLjEgLSBmb3IgdGhlIEVBQkktZGVyaXZlZCBzb2Z0LWZsb2F0IEFCSQotKyAgIC0gbGQtbXVzbC1hcm1oZi5zby4xIC0gZm9yIHRoZSBFQUJJLWRlcml2ZWQgaGFyZC1mbG9hdCBBQkkKLSsgICAtIGxkLW11c2wtYXJtZWIuc28uMSAtIGZvciB0aGUgRUFCSS1kZXJpdmVkIHNvZnQtZmxvYXQgQUJJLCBFQgotKyAgIC0gbGQtbXVzbC1hcm1lYmhmLnNvLjEgLSBmb3IgdGhlIEVBQkktZGVyaXZlZCBoYXJkLWZsb2F0IEFCSSwgRUIKLSsgICBtdXNsIGRvZXMgbm90IHN1cHBvcnQgdGhlIGxlZ2FjeSBPQUJJIG1vZGUuCi0rICAgQWxsIHRoZSBkeW5hbWljIGxpbmtlcnMgbGl2ZSBpbiAvbGliLgotKyAgIFdlIGRlZmF1bHQgdG8gc29mdC1mbG9hdCwgRUwuICovCi0rI3VuZGVmICBNVVNMX0RZTkFNSUNfTElOS0VSCi0rI2lmIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQKLSsjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVJfRSAiJXttbGl0dGxlLWVuZGlhbjo7OmVifSIKLSsjZWxzZQotKyNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUl9FICIle21iaWctZW5kaWFuOmVifSIKLSsjZW5kaWYKLSsjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVIgXAotKyAgU1lTVEVNTElCU19ESVIgImxkLW11c2wtYXJtIiBNVVNMX0RZTkFNSUNfTElOS0VSX0UgIiV7bWZsb2F0LWFiaT1oYXJkOmhmfS5zby4xIgotKwotIC8qIEF0IHRoaXMgcG9pbnQsIGJwYWJpLmggd2lsbCBoYXZlIGNsb2JiZXJlZCBMSU5LX1NQRUMuICBXZSB3YW50IHRvCi0gICAgdXNlIHRoZSBHTlUvTGludXggdmVyc2lvbiwgbm90IHRoZSBnZW5lcmljIEJQQUJJIHZlcnNpb24uICAqLwotICN1bmRlZiAgTElOS19TUEVDCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmggYi9nY2MvY29uZmlnL2kzODYvbGludXguaAotaW5kZXggMjFiYTJiMi4uZTJiODFlNSAxMDA2NDQKLS0tLSBhL2djYy9jb25maWcvaTM4Ni9saW51eC5oCi0rKysgYi9nY2MvY29uZmlnL2kzODYvbGludXguaAotQEAgLTIxLDMgKzIxLDQgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKLSAKLSAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OICJlbGZfaTM4NiIKLSAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgotKyNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbXVzbC1pMzg2LnNvLjEiCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaCBiL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgKLWluZGV4IDYxODVjY2UuLjVhM2E5NzcgMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCi0rKysgYi9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCi1AQCAtMzAsMyArMzAsOCBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKLSAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCi0gI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1saW51eC14ODYtNjQuc28uMiIKLSAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSWDMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC14MzIuc28uMiIKLSsKLSsjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtbXVzbC1pMzg2LnNvLjEiCi0rI2RlZmluZSBNVVNMX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkLW11c2wteDg2XzY0LnNvLjEiCi0rI2RlZmluZSBNVVNMX0RZTkFNSUNfTElOS0VSWDMyIFNZU1RFTUxJQlNfRElSICJsZC1tdXNsLXgzMi5zby4xIgotKwotZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbWlwcy9saW51eC5oIGIvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgKLWluZGV4IGMzMDZhZmIuLmI4OTkzODggMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlnL21pcHMvbGludXguaAotKysrIGIvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgKLUBAIC0yMSw2ICsyMSwxMiBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQotICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT042NCAiZWxmNjQle0VCOmJ9JXtFTDpsfXRzbWlwIgotICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT05OMzIgImVsZjMyJXtFQjpifSV7RUw6bH10c21pcG4zMiIKLSAKLSsjdW5kZWYgTVVTTF9EWU5BTUlDX0xJTktFUjMyCi0rI2RlZmluZSBNVVNMX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLW11c2wtbWlwcyV7RUw6ZWx9JXttc29mdC1mbG9hdDotc2Z9LnNvLjEiCi0rI3VuZGVmIE1VU0xfRFlOQU1JQ19MSU5LRVI2NAotKyNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1tdXNsLW1pcHM2NCV7RUw6ZWx9JXttc29mdC1mbG9hdDotc2Z9LnNvLjEiCi0rI2RlZmluZSBNVVNMX0RZTkFNSUNfTElOS0VSTjMyIFNZU1RFTUxJQlNfRElSICJsZC1tdXNsLW1pcHNuMzIle0VMOmVsfSV7bXNvZnQtZmxvYXQ6LXNmfS5zby4xIgotKwotICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBcCi0gICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgotICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBcCi1AQCAtNDAsNCArNDYsNCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQotICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSTjMyICIvc3lzdGVtL2Jpbi9saW5rZXIzMiIKLSAjZGVmaW5lIEdOVV9VU0VSX0RZTkFNSUNfTElOS0VSTjMyIFwKLSAgIENIT09TRV9EWU5BTUlDX0xJTktFUiAoR0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIsIFVDTElCQ19EWU5BTUlDX0xJTktFUk4zMiwgXAotLSAgICAgICAgICAgICAgICAgICAgICAgICBCSU9OSUNfRFlOQU1JQ19MSU5LRVJOMzIpCi0rICAgICAgICAgICAgICAgICAgICAgICAgIEJJT05JQ19EWU5BTUlDX0xJTktFUk4zMiwgIE1VU0xfRFlOQU1JQ19MSU5LRVJOMzIpCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oIGIvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCi1pbmRleCAzMWM0MzM4Li42NzlkYTRiIDEwMDY0NAotLS0tIGEvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCi0rKysgYi9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKLUBAIC0zNjUsMTcgKzM2NSwyMiBAQCBleHRlcm4gaW50IGRvdF9zeW1ib2xzOwotICNlbmRpZgotICNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgotICNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLnNvLjAiCi0rI2RlZmluZSBNVVNMX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLW11c2wtcG93ZXJwYy5zby4xIgotKyNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1tdXNsLXBvd2VycGM2NC5zby4xIgotKwotICNpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMKLS0jZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVKSAiJXttZ2xpYmM6IiBHICI7OiIgVSAifSIKLSsjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVLCBNKSAiJXttZ2xpYmM6IiBHICI7OiV7bW11c2w6IiBNICI7OiIgVSAifX0iCi0gI2VsaWYgREVGQVVMVF9MSUJDID09IExJQkNfR0xJQkMKLS0jZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVKSAiJXttdWNsaWJjOiIgVSAiOzoiIEcgIn0iCi0rI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSwgTSkgIiV7bXVjbGliYzoiIFUgIjs6JXttbXVzbDoiIE0gIjs6IiBHICJ9fSIKLSsjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19NVVNMCi0rI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSwgTSkgIiV7bWdsaWJjOiIgRyAiOzole211Y2xpYmM6IiBVICI7OiIgTSAifX0iCi0gI2Vsc2UKLSAjZXJyb3IgIlVuc3VwcG9ydGVkIERFRkFVTFRfTElCQyIKLSAjZW5kaWYKLSAjZGVmaW5lIEdOVV9VU0VSX0RZTkFNSUNfTElOS0VSMzIgXAotLSAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSIChHTElCQ19EWU5BTUlDX0xJTktFUjMyLCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMikKLSsgIENIT09TRV9EWU5BTUlDX0xJTktFUiAoR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiwgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIsIE1VU0xfRFlOQU1JQ19MSU5LRVIzMikKLSAjZGVmaW5lIEdOVV9VU0VSX0RZTkFNSUNfTElOS0VSNjQgXAotLSAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSIChHTElCQ19EWU5BTUlDX0xJTktFUjY0LCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCkKLSsgIENIT09TRV9EWU5BTUlDX0xJTktFUiAoR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCwgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQsIE1VU0xfRFlOQU1JQ19MSU5LRVI2NCkKLSAKLSAjdW5kZWYgIERFRkFVTFRfQVNNX0VORElBTgotICNpZiAoVEFSR0VUX0RFRkFVTFQgJiBNQVNLX0xJVFRMRV9FTkRJQU4pCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yczYwMDAvc3lzdjQuaCBiL2djYy9jb25maWcvcnM2MDAwL3N5c3Y0LmgKLWluZGV4IDdjZDA3ZTAuLjg3OTRmYTUgMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlnL3JzNjAwMC9zeXN2NC5oCi0rKysgYi9nY2MvY29uZmlnL3JzNjAwMC9zeXN2NC5oCi1AQCAtNzYzLDE1ICs3NjMsMTkgQEAgRU5ESUFOX1NFTEVDVCgiIC1tYmlnIiwgIiAtbWxpdHRsZSIsIERFRkFVTFRfQVNNX0VORElBTikKLSAKLSAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLnNvLjEiCi0gI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCi0rI2RlZmluZSBNVVNMX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLW11c2wtcG93ZXJwYy5zby4xIgotKwotICNpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMKLS0jZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVKSAiJXttZ2xpYmM6IiBHICI7OiIgVSAifSIKLSsjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVLCBNKSAiJXttZ2xpYmM6IiBHICI7OiV7bW11c2w6IiBNICI7OiIgVSAifX0iCi0rI2VsaWYgREVGQVVMVF9MSUJDID09IExJQkNfTVVTTAotKyNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUsIE0pICIle21nbGliYzoiIEcgIjs6JXttdWNsaWJjOiIgVSAiOzoiIE0gIn19IgotICNlbGlmICFkZWZpbmVkIChERUZBVUxUX0xJQkMpIHx8IERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDCi0tI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSkgIiV7bXVjbGliYzoiIFUgIjs6IiBHICJ9IgotKyNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUsIE0pICIle211Y2xpYmM6IiBVICI7OiV7bW11c2w6IiBNICI7OiIgRyAifX0iCi0gI2Vsc2UKLSAjZXJyb3IgIlVuc3VwcG9ydGVkIERFRkFVTFRfTElCQyIKLSAjZW5kaWYKLSAjZGVmaW5lIEdOVV9VU0VSX0RZTkFNSUNfTElOS0VSIFwKLS0gIENIT09TRV9EWU5BTUlDX0xJTktFUiAoR0xJQkNfRFlOQU1JQ19MSU5LRVIsIFVDTElCQ19EWU5BTUlDX0xJTktFUikKLSsgIENIT09TRV9EWU5BTUlDX0xJTktFUiAoR0xJQkNfRFlOQU1JQ19MSU5LRVIsIFVDTElCQ19EWU5BTUlDX0xJTktFUiwgTVVTTF9EWU5BTUlDX0xJTktFUikKLSAKLSAjZGVmaW5lIExJTktfT1NfTElOVVhfU1BFQyAiLW0gZWxmMzJwcGNsaW51eCAleyFzaGFyZWQ6ICV7IXN0YXRpYzogXAotICAgJXtyZHluYW1pYzotZXhwb3J0LWR5bmFtaWN9IFwKLWRpZmYgLS1naXQgYS9saWJpdG0vY29uZmlnL2FybS9od2NhcC5jYyBiL2xpYml0bS9jb25maWcvYXJtL2h3Y2FwLmNjCi1pbmRleCBhMWMyY2ZkLi5kZDRmYWQyIDEwMDY0NAotLS0tIGEvbGliaXRtL2NvbmZpZy9hcm0vaHdjYXAuY2MKLSsrKyBiL2xpYml0bS9jb25maWcvYXJtL2h3Y2FwLmNjCi1AQCAtNDAsNyArNDAsMTEgQEAgaW50IEdUTV9od2NhcCBISURERU4gPSAwCi0gCi0gI2lmZGVmIF9fbGludXhfXwotICNpbmNsdWRlIDx1bmlzdGQuaD4KLSsjaWZkZWYgX19HTElCQ19fCi0gI2luY2x1ZGUgPHN5cy9mY250bC5oPgotKyNlbHNlCi0rI2luY2x1ZGUgPGZjbnRsLmg+Ci0rI2VuZGlmCi0gI2luY2x1ZGUgPGVsZi5oPgotIAotIHN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKGNvbnN0cnVjdG9yKSkKLWRpZmYgLS1naXQgYS9saWJpdG0vY29uZmlnL2xpbnV4L3g4Ni90bHMuaCBiL2xpYml0bS9jb25maWcvbGludXgveDg2L3Rscy5oCi1pbmRleCBlNzMxYWI3Li41NGFkOGI2IDEwMDY0NAotLS0tIGEvbGliaXRtL2NvbmZpZy9saW51eC94ODYvdGxzLmgKLSsrKyBiL2xpYml0bS9jb25maWcvbGludXgveDg2L3Rscy5oCi1AQCAtMjUsMTYgKzI1LDE5IEBACi0gI2lmbmRlZiBMSUJJVE1fWDg2X1RMU19ICi0gI2RlZmluZSBMSUJJVE1fWDg2X1RMU19IIDEKLSAKLS0jaWYgZGVmaW5lZChfX0dMSUJDX1BSRVJFUSkgJiYgX19HTElCQ19QUkVSRVEoMiwgMTApCi0rI2lmIGRlZmluZWQoX19HTElCQ19QUkVSRVEpCi0rI2lmIF9fR0xJQkNfUFJFUkVRKDIsIDEwKQotIC8qIFVzZSBzbG90cyBpbiB0aGUgVENCIGhlYWQgcmF0aGVyIHRoYW4gX190aHJlYWQgbG9va3Vwcy4KLSAgICBHTElCQyBoYXMgcmVzZXJ2ZWQgd29yZHMgMTAgdGhyb3VnaCAxMyBmb3IgVE0uICAqLwotICNkZWZpbmUgSEFWRV9BUkNIX0dUTV9USFJFQUQgMQotICNkZWZpbmUgSEFWRV9BUkNIX0dUTV9USFJFQURfRElTUCAxCi0gI2VuZGlmCi0rI2VuZGlmCi0gCi0gI2luY2x1ZGUgImNvbmZpZy9nZW5lcmljL3Rscy5oIgotIAotLSNpZiBkZWZpbmVkKF9fR0xJQkNfUFJFUkVRKSAmJiBfX0dMSUJDX1BSRVJFUSgyLCAxMCkKLSsjaWYgZGVmaW5lZChfX0dMSUJDX1BSRVJFUSkKLSsjaWYgX19HTElCQ19QUkVSRVEoMiwgMTApCi0gbmFtZXNwYWNlIEdUTSBISURERU4gewotIAotICNpZmRlZiBfX3g4Nl82NF9fCi1AQCAtMTAxLDUgKzEwNCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYWJpX2Rpc3Aoc3RydWN0IGFiaV9kaXNwYXRjaCAqeCkKLSAKLSB9IC8vIG5hbWVzcGFjZSBHVE0KLSAjZW5kaWYgLyogPj0gR0xJQkMgMi4xMCAqLwotKyNlbmRpZgotIAotICNlbmRpZiAvLyBMSUJJVE1fWDg2X1RMU19ICi0tLSAKLTIuNy40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA0Ni1HZXQtcmlkLW9mLWV2ZXItYnJva2VuLWZpeGluY2x1ZGVzLW9uLW11c2wucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDYtR2V0LXJpZC1vZi1ldmVyLWJyb2tlbi1maXhpbmNsdWRlcy1vbi1tdXNsLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGIwZmM0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA0Ni1HZXQtcmlkLW9mLWV2ZXItYnJva2VuLWZpeGluY2x1ZGVzLW9uLW11c2wucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi1Gcm9tIDA0NzExNmU4YzljYmIzNDAyNjRmNGYyOGRiM2YyMWE2OGJhNTdmZjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogVHVlLCA4IERlYyAyMDE1IDA4OjMyOjI0ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggNDYvNDZdIEdldCByaWQgb2YgZXZlci1icm9rZW4gZml4aW5jbHVkZXMgb24gbXVzbC4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi0gZml4aW5jbHVkZXMvbWtmaXhpbmMuc2ggfCAzICsrLQotIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2ZpeGluY2x1ZGVzL21rZml4aW5jLnNoIGIvZml4aW5jbHVkZXMvbWtmaXhpbmMuc2gKLWluZGV4IDY2NTNmZWRiLi4wZDk2YzhjIDEwMDc1NQotLS0tIGEvZml4aW5jbHVkZXMvbWtmaXhpbmMuc2gKLSsrKyBiL2ZpeGluY2x1ZGVzL21rZml4aW5jLnNoCi1AQCAtMTksNyArMTksOCBAQCBjYXNlICRtYWNoaW5lIGluCi0gICAgIHBvd2VycGMtKi1lYWJpKiAgICB8IFwKLSAgICAgcG93ZXJwYy0qLXJ0ZW1zKiAgIHwgXAotICAgICBwb3dlcnBjbGUtKi1lYWJpc2ltKiB8IFwKLS0gICAgcG93ZXJwY2xlLSotZWFiaSogKQotKyAgICBwb3dlcnBjbGUtKi1lYWJpKiB8IFwKLSsgICAgKi1tdXNsKiApCi0gCSMgIElGIHRoZXJlIGlzIG5vIGluY2x1ZGUgZml4aW5nLAotIAkjICBUSEVOIGNyZWF0ZSBhIG5vLW9wIGZpeGVyIGFuZCBleGl0Ci0gCShlY2hvICIjISAvYmluL3NoIiA7IGVjaG8gImV4aXQgMCIgKSA+ICR7dGFyZ2V0fQotLS0gCi0yLjYuMwotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDctbmlvczItRGVmaW5lLU1VU0xfRFlOQU1JQ19MSU5LRVIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDctbmlvczItRGVmaW5lLU1VU0xfRFlOQU1JQ19MSU5LRVIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExY2ZiOWMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQ3LW5pb3MyLURlZmluZS1NVVNMX0RZTkFNSUNfTElOS0VSLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotRnJvbSBmNWNhMDcxMzJiOTI5MmQyMDQ1Y2E3MjA0ZTljYmZkZTJlNTlkMGJmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFR1ZSwgMiBGZWIgMjAxNiAxMDoyNjoxMCAtMDgwMAotU3ViamVjdDogW1BBVENIIDQ3LzQ4XSBuaW9zMjogRGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVIKLQotU2lnbmVkLW9mZi1ieTogTWFyZWsgVmFzdXQgPG1hcmV4QGRlbnguZGU+Ci1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotIGdjYy9jb25maWcvbmlvczIvbGludXguaCB8IDEgKwotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQotCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9uaW9zMi9saW51eC5oIGIvZ2NjL2NvbmZpZy9uaW9zMi9saW51eC5oCi1pbmRleCBmNDNmNjU1Li41NTg3YWIzIDEwMDY0NAotLS0tIGEvZ2NjL2NvbmZpZy9uaW9zMi9saW51eC5oCi0rKysgYi9nY2MvY29uZmlnL25pb3MyL2xpbnV4LmgKLUBAIC0zMCw2ICszMCw3IEBACi0gI2RlZmluZSBDUFBfU1BFQyAiJXtwb3NpeDotRF9QT1NJWF9TT1VSQ0V9ICV7cHRocmVhZDotRF9SRUVOVFJBTlR9IgotIAotICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXgtbmlvczIuc28uMSIKLSsjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVIgICIvbGliL2xkLW11c2wtbmlvczIuc28uMSIKLSAKLSAjdW5kZWYgTElOS19TUEVDCi0gI2RlZmluZSBMSU5LX1NQRUMgTElOS19TUEVDX0VORElBTiBcCi0tLSAKLTIuNy4wCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA0OC1zc3Bfbm9uc2hhcmVkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQ4LXNzcF9ub25zaGFyZWQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkZGQ0MGEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQ4LXNzcF9ub25zaGFyZWQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1Gcm9tIDNjYjYwMTNjZjI4N2VkOWIxMjQ3ZWEzNzU0MWU2NGI5ODEwYTEyMWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBTemFib2xjcyBOYWd5IDxuc3pAcG9ydDcwLm5ldD4KLURhdGU6IFNhdCwgNyBOb3YgMjAxNSAxNDo1ODo0MCArMDAwMAotU3ViamVjdDogW1BBVENIIDQ4LzQ4XSBzc3Bfbm9uc2hhcmVkCi0KLS0tLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi0gZ2NjL2djYy5jIHwgMyArKy0KLSAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKLWluZGV4IDhmNTNhZWEuLjNkZGM2NTggMTAwNjQ0Ci0tLS0gYS9nY2MvZ2NjLmMKLSsrKyBiL2djYy9nY2MuYwotQEAgLTczMiw3ICs3MzIsOCBAQCBwcm9wZXIgcG9zaXRpb24gYW1vbmcgdGhlIG90aGVyIG91dHB1dCBmaWxlcy4gICovCi0gI2lmbmRlZiBMSU5LX1NTUF9TUEVDCi0gI2lmZGVmIFRBUkdFVF9MSUJDX1BST1ZJREVTX1NTUAotICNkZWZpbmUgTElOS19TU1BfU1BFQyAiJXtmc3RhY2stcHJvdGVjdG9yfGZzdGFjay1wcm90ZWN0b3ItYWxsIiBcCi0tCQkgICAgICAgInxmc3RhY2stcHJvdGVjdG9yLXN0cm9uZ3xmc3RhY2stcHJvdGVjdG9yLWV4cGxpY2l0On0iCi0rCQkgICAgICAgInxmc3RhY2stcHJvdGVjdG9yLXN0cm9uZ3xmc3RhY2stcHJvdGVjdG9yLWV4cGxpY2l0IiBcCi0rCQkgICAgICAgIjotbHNzcF9ub25zaGFyZWR9IgotICNlbHNlCi0gI2RlZmluZSBMSU5LX1NTUF9TUEVDICIle2ZzdGFjay1wcm90ZWN0b3J8ZnN0YWNrLXByb3RlY3Rvci1hbGwiIFwKLSAJCSAgICAgICAifGZzdGFjay1wcm90ZWN0b3Itc3Ryb25nfGZzdGFjay1wcm90ZWN0b3ItZXhwbGljaXQiIFwKLS0tIAotMi43LjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDQ5LURpc2FibGUtdGhlLXdlYWstcmVmZXJlbmNlLWxvZ2ljLWluLWd0aHIuaC1mb3Itb3MtZ2UucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDktRGlzYWJsZS10aGUtd2Vhay1yZWZlcmVuY2UtbG9naWMtaW4tZ3Roci5oLWZvci1vcy1nZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVhNTE0My4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNDktRGlzYWJsZS10aGUtd2Vhay1yZWZlcmVuY2UtbG9naWMtaW4tZ3Roci5oLWZvci1vcy1nZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLUZyb20gNTUzZDhlM2I5MDczZmYzZTBhOWQyZmFjOWIxODIzZmIxN2FkMjQ3YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBUdWUsIDIgRmViIDIwMTYgMjE6MDA6MTggLTA4MDAKLVN1YmplY3Q6IFtQQVRDSCA0OS81MV0gRGlzYWJsZSB0aGUgd2VhayByZWZlcmVuY2UgbG9naWMgaW4gZ3Roci5oIGZvcgotIG9zL2dlbmVyaWMKLQotSXQgZG9lcyBub3Qgd29yayB1bmxlc3Mgd29yayBhcm91bmRzIGFyZSB0aGVyZSBpbiBndGhyLXBvc2l4LmgKLQotb3JpZ2luIG9mIHBhdGNoCi1odHRwOi8vcG9ydDcwLm5ldC9+bnN6L211c2wvZ2NjLTUuMy4wLzAwMDQtZ3Roci5wYXRjaAotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotIGxpYmdmb3J0cmFuL2FjaW5jbHVkZS5tNCAgICAgICAgICAgICAgICAgICAgfCAyICstCi0gbGliZ2ZvcnRyYW4vY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICB8IDIgKy0KLSBsaWJzdGRjKystdjMvY29uZmlnL29zL2dlbmVyaWMvb3NfZGVmaW5lcy5oIHwgNSArKysrKwotIGxpYnN0ZGMrKy12My9jb25maWd1cmUuaG9zdCAgICAgICAgICAgICAgICAgfCAzICsrKwotIDQgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2xpYmdmb3J0cmFuL2FjaW5jbHVkZS5tNCBiL2xpYmdmb3J0cmFuL2FjaW5jbHVkZS5tNAotaW5kZXggYmE4OTBmOS4uMzBiOGIxYTYgMTAwNjQ0Ci0tLS0gYS9saWJnZm9ydHJhbi9hY2luY2x1ZGUubTQKLSsrKyBiL2xpYmdmb3J0cmFuL2FjaW5jbHVkZS5tNAotQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIGZvbyAodm9pZCk7Ci0gCSAgICAgIFtEZWZpbmUgdG8gMSBpZiB0aGUgdGFyZ2V0IHN1cHBvcnRzICNwcmFnbWEgd2Vha10pCi0gICBmaQotICAgY2FzZSAiJGhvc3QiIGluCi0tICAgICotKi1kYXJ3aW4qIHwgKi0qLWhwdXgqIHwgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqICkKLSsgICAgKi0qLWRhcndpbiogfCAqLSotaHB1eCogfCAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotbXVzbCogKQotICAgICAgIEFDX0RFRklORShHVEhSRUFEX1VTRV9XRUFLLCAwLAotIAkJW0RlZmluZSB0byAwIGlmIHRoZSB0YXJnZXQgc2hvdWxkbid0IHVzZSAjcHJhZ21hIHdlYWtdKQotICAgICAgIDs7Ci1kaWZmIC0tZ2l0IGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlCi1pbmRleCA1ZDQ3ZTY1Li5jZGY5Njk1IDEwMDc1NQotLS0tIGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlCi0rKysgYi9saWJnZm9ydHJhbi9jb25maWd1cmUKLUBAIC0yNjQ1Niw3ICsyNjQ1Niw3IEBAICRhc19lY2hvICIjZGVmaW5lIFNVUFBPUlRTX1dFQUsgMSIgPj5jb25mZGVmcy5oCi0gCi0gICBmaQotICAgY2FzZSAiJGhvc3QiIGluCi0tICAgICotKi1kYXJ3aW4qIHwgKi0qLWhwdXgqIHwgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqICkKLSsgICAgKi0qLWRhcndpbiogfCAqLSotaHB1eCogfCAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotbXVzbCogKQotIAotICRhc19lY2hvICIjZGVmaW5lIEdUSFJFQURfVVNFX1dFQUsgMCIgPj5jb25mZGVmcy5oCi0gCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nZW5lcmljL29zX2RlZmluZXMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ2VuZXJpYy9vc19kZWZpbmVzLmgKLWluZGV4IDQ1YmY1MmEuLjEwM2VjMGUgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL29zL2dlbmVyaWMvb3NfZGVmaW5lcy5oCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL29zL2dlbmVyaWMvb3NfZGVmaW5lcy5oCi1AQCAtMzMsNCArMzMsOSBAQAotIC8vIFN5c3RlbS1zcGVjaWZpYyAjZGVmaW5lLCB0eXBlZGVmcywgY29ycmVjdGlvbnMsIGV0YywgZ28gaGVyZS4gIFRoaXMKLSAvLyBmaWxlIHdpbGwgY29tZSBiZWZvcmUgYWxsIG90aGVycy4KLSAKLSsvLyBEaXNhYmxlIHRoZSB3ZWFrIHJlZmVyZW5jZSBsb2dpYyBpbiBndGhyLmggZm9yIG9zL2dlbmVyaWMgYmVjYXVzZSBpdAotKy8vIGlzIGJyb2tlbiBvbiBldmVyeSBwbGF0Zm9ybSB1bmxlc3MgdGhlcmUgaXMgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMKLSsvLyB3b3JrYXJvdW5kIGluIGd0aHItcG9zaXguaCBhbmQgYXQgbGluay10aW1lIGZvciBzdGF0aWMgbGlua2luZy4KLSsjZGVmaW5lIF9HTElCQ1hYX0dUSFJFQURfVVNFX1dFQUsgMAotKwotICNlbmRpZgotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUuaG9zdCBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUuaG9zdAotaW5kZXggMTc1NjQ0NC4uMmE4N2JiOCAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUuaG9zdAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5ob3N0Ci1AQCAtMjczLDYgKzI3Myw5IEBAIGNhc2UgIiR7aG9zdF9vc30iIGluCi0gICBmcmVlYnNkKikKLSAgICAgb3NfaW5jbHVkZV9kaXI9Im9zL2JzZC9mcmVlYnNkIgotICAgICA7OwotKyAgbGludXgtbXVzbCopCi0rICAgIG9zX2luY2x1ZGVfZGlyPSJvcy9nZW5lcmljIgotKyAgICA7OwotICAgZ251KiB8IGxpbnV4KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCi0gICAgICMgY2hlY2sgZm9yIG11c2wgYnkgdGFyZ2V0Ci0gICAgIGNhc2UgIiR7aG9zdF9vc30iIGluCi0tLSAKLTIuNy4wCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA1MC1wb3dlcnBjLXBhc3Mtc2VjdXJlLXBsdC10by10aGUtbGlua2VyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDUwLXBvd2VycGMtcGFzcy1zZWN1cmUtcGx0LXRvLXRoZS1saW5rZXIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZjJiYmQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDUwLXBvd2VycGMtcGFzcy1zZWN1cmUtcGx0LXRvLXRoZS1saW5rZXIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi1Gcm9tIDRmYTBjZjAzNjc4Zjg0OTkxN2RjYzNkMTQ5OTg5YjdmZWNkYmUyNzYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogVHVlLCAyIEZlYiAyMDE2IDIxOjEwOjAwIC0wODAwCi1TdWJqZWN0OiBbUEFUQ0ggNTAvNTFdIHBvd2VycGMgcGFzcyAtLXNlY3VyZS1wbHQgdG8gdGhlIGxpbmtlcgotCi1TZWN1cmUtcGx0IHdoZW4gZW5hYmxlZCBkb2VzIG5vdCBwYXNzIHJpZ2h0IG9wdGlvbnMgdG8gbGlua2VyCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotIGdjYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaCB8IDQgKysrKwotIGdjYy9jb25maWcvcnM2MDAwL3N5c3Y0LmggICB8IDIgKysKLSAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oIGIvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCi1pbmRleCA2NzlkYTRiLi4zY2E3Y2Q3IDEwMDY0NAotLS0tIGEvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCi0rKysgYi9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKLUBAIC0xNzQsMjAgKzE3NCwyNCBAQCBleHRlcm4gaW50IGRvdF9zeW1ib2xzOwotICN1bmRlZglBU01fREVGQVVMVF9TUEVDCi0gI3VuZGVmCUFTTV9TUEVDCi0gI3VuZGVmCUxJTktfT1NfTElOVVhfU1BFQwotKyN1bmRlZglMSU5LX1NFQ1VSRV9QTFRfU1BFQwotIAotICNpZm5kZWYJUlM2MDAwX0JJX0FSQ0gKLSAjZGVmaW5lCUFTTV9ERUZBVUxUX1NQRUMgIi1tcHBjNjQiCi0gI2RlZmluZQlBU01fU1BFQwkgIiUoYXNtX3NwZWM2NCkgJShhc21fc3BlY19jb21tb24pIgotICNkZWZpbmUJTElOS19PU19MSU5VWF9TUEVDICIlKGxpbmtfb3NfbGludXhfc3BlYzY0KSIKLSsjZGVmaW5lCUxJTktfU0VDVVJFX1BMVF9TUEVDICIiCi0gI2Vsc2UKLSAjaWYgREVGQVVMVF9BUkNINjRfUAotICNkZWZpbmUJQVNNX0RFRkFVTFRfU1BFQyAiLW1wcGMleyFtMzI6NjR9IgotICNkZWZpbmUJQVNNX1NQRUMJICIle20zMjolKGFzbV9zcGVjMzIpfSV7IW0zMjolKGFzbV9zcGVjNjQpfSAlKGFzbV9zcGVjX2NvbW1vbikiCi0gI2RlZmluZQlMSU5LX09TX0xJTlVYX1NQRUMgIiV7bTMyOiUobGlua19vc19saW51eF9zcGVjMzIpfSV7IW0zMjolKGxpbmtfb3NfbGludXhfc3BlYzY0KX0iCi0rI2RlZmluZQlMSU5LX1NFQ1VSRV9QTFRfU1BFQyAiJXttMzI6ICIgTElOS19TRUNVUkVfUExUX0RFRkFVTFRfU1BFQyAifSIKLSAjZWxzZQotICNkZWZpbmUJQVNNX0RFRkFVTFRfU1BFQyAiLW1wcGMle202NDo2NH0iCi0gI2RlZmluZQlBU01fU1BFQwkgIiV7IW02NDolKGFzbV9zcGVjMzIpfSV7bTY0OiUoYXNtX3NwZWM2NCl9ICUoYXNtX3NwZWNfY29tbW9uKSIKLSAjZGVmaW5lCUxJTktfT1NfTElOVVhfU1BFQyAiJXshbTY0OiUobGlua19vc19saW51eF9zcGVjMzIpfSV7bTY0OiUobGlua19vc19saW51eF9zcGVjNjQpfSIKLSsjZGVmaW5lCUxJTktfU0VDVVJFX1BMVF9TUEVDICIleyFtNjQ6ICIgTElOS19TRUNVUkVfUExUX0RFRkFVTFRfU1BFQyAifSIKLSAjZW5kaWYKLSAjZW5kaWYKLSAKLWRpZmYgLS1naXQgYS9nY2MvY29uZmlnL3JzNjAwMC9zeXN2NC5oIGIvZ2NjL2NvbmZpZy9yczYwMDAvc3lzdjQuaAotaW5kZXggODc5NGZhNS4uMDgzNTU1MSAxMDA2NDQKLS0tLSBhL2djYy9jb25maWcvcnM2MDAwL3N5c3Y0LmgKLSsrKyBiL2djYy9jb25maWcvcnM2MDAwL3N5c3Y0LmgKLUBAIC01NzEsNiArNTcxLDcgQEAgRU5ESUFOX1NFTEVDVCgiIC1tYmlnIiwgIiAtbWxpdHRsZSIsIERFRkFVTFRfQVNNX0VORElBTikKLSAgICAgICAgICAgICAgICA6ICUobGlua19zdGFydF9kZWZhdWx0KSAgICAgfSIKLSAKLSAjZGVmaW5lIExJTktfU1RBUlRfREVGQVVMVF9TUEVDICIiCi0rI2RlZmluZSBMSU5LX1NFQ1VSRV9QTFRfU1BFQyBMSU5LX1NFQ1VSRV9QTFRfREVGQVVMVF9TUEVDCi0gCi0gI3VuZGVmCUxJTktfU1BFQwotICNkZWZpbmUJTElOS19TUEVDICJcCi1AQCAtNTc4LDYgKzU3OSw3IEBAIEVORElBTl9TRUxFQ1QoIiAtbWJpZyIsICIgLW1saXR0bGUiLCBERUZBVUxUX0FTTV9FTkRJQU4pCi0gJXtSKn0gXAotICUobGlua19zaGxpYikgXAotICV7IVQqOiAlKGxpbmtfc3RhcnQpIH0gXAotKyV7IXN0YXRpYzogJXshbWJzcy1wbHQ6ICUobGlua19zZWN1cmVfcGx0X2RlZmF1bHQpfX0gXAotICUobGlua19vcykiCi0gCi0gLyogU2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IGRlZmF1bHQuICAqLwotLS0gCi0yLjcuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTEtSWdub3JlLWZkZWJ1Zy1wcmVmaXgtbWFwLWluLXByb2R1Y2VyLXN0cmluZy1ieS1EYW5pZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA1MS1JZ25vcmUtZmRlYnVnLXByZWZpeC1tYXAtaW4tcHJvZHVjZXItc3RyaW5nLWJ5LURhbmllLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGY3OWI1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA1MS1JZ25vcmUtZmRlYnVnLXByZWZpeC1tYXAtaW4tcHJvZHVjZXItc3RyaW5nLWJ5LURhbmllLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotRnJvbSAzMjU5M2IzODA4MmVhNjVmNGM4MjE1OTI1NGFkZjFlMGRjMjQyM2JlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogYmVybmRzIDxiZXJuZHNAMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0PgotRGF0ZTogVHVlLCAxNiBGZWIgMjAxNiAwMzoxNToxNSAtMDUwMAotU3ViamVjdDogW1BBVENIXSBJZ25vcmUgLWZkZWJ1Zy1wcmVmaXgtbWFwIGluIHByb2R1Y2VyIHN0cmluZyAoYnkgRGFuaWVsIEthaG4KLSBHaWxsbW9yKQotCi0qIGR3YXJmMm91dC5jIChnZW5fcHJvZHVjZXJfc3RyaW5nKTogSWdub3JlIC1mZGVidWctcHJlZml4LW1hcC4KLQotZ2l0LXN2bi1pZDogc3ZuK3NzaDovL2djYy5nbnUub3JnL3N2bi9nY2MvdHJ1bmtAMjMxODM1IDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhNAotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1TaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+Ci0tLS0KLSBnY2MvZHdhcmYyb3V0LmMgfCAxICsKLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKLQotZGlmZiAtLWdpdCBhL2djYy9kd2FyZjJvdXQuYyBiL2djYy9kd2FyZjJvdXQuYwotaW5kZXggMzYxNGMxMC4uNTI2ZjExNCAxMDA2NDQKLS0tLSBhL2djYy9kd2FyZjJvdXQuYwotKysrIGIvZ2NjL2R3YXJmMm91dC5jCi1AQCAtMTk2NzAsNiArMTk2NzAsNyBAQCBnZW5fcHJvZHVjZXJfc3RyaW5nICh2b2lkKQotICAgICAgIGNhc2UgT1BUX2ZwcmVwcm9jZXNzZWQ6Ci0gICAgICAgY2FzZSBPUFRfZmx0cmFuc19vdXRwdXRfbGlzdF86Ci0gICAgICAgY2FzZSBPUFRfZnJlc29sdXRpb25fOgotKyAgICAgIGNhc2UgT1BUX2ZkZWJ1Z19wcmVmaXhfbWFwXzoKLSAJLyogSWdub3JlIHRoZXNlLiAgKi8KLSAJY29udGludWU7Ci0gICAgICAgZGVmYXVsdDoKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDUyLW5pb3MyLXVzZS1yZXQtd2l0aC1yMzEucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTItbmlvczItdXNlLXJldC13aXRoLXIzMS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNjYjQ3Zi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTItbmlvczItdXNlLXJldC13aXRoLXIzMS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi1Gcm9tIDFkNjcxMjBkOTVjMmM2ZTBlZDRmNzM1N2QxY2M2Mjg4N2VhYmE0NjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBzYW5kcmEgPHNhbmRyYUAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQ+Ci1EYXRlOiBUdWUsIDEyIE1heSAyMDE1IDE1OjU3OjIyICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIDIwMTUtMDUtMTIgIENodW5nLUxpbiBUYW5nICA8Y2x0YW5nQGNvZGVzb3VyY2VyeS5jb20+Ci0gU2FuZHJhIExvb3NlbW9yZSA8c2FuZHJhQGNvZGVzb3VyY2VyeS5jb20+Ci0KLQlnY2MvCi0JKiBjb25maWcvbmlvczIvbmlvczIuaCAoZW51bSByZWdfY2xhc3MpOiBBZGQgSUpNUF9SRUdTIGVudW0KLQl2YWx1ZS4KLQkoUkVHX0NMQVNTX05BTUVTKTogQWRkICJJSk1QX1JFR1MiLgotCShSRUdfQ0xBU1NfQ09OVEVOVFMpOiBBZGQgbmV3IGVudHJ5IGZvciBJSk1QX1JFR1MuCi0JKiBjb25maWcvbmlvczIvbmlvczIubWQgKGluZGlyZWN0X2p1bXAsKnRhYmxlanVtcCk6IEFkanVzdCB0bwotCXVzZSBuZXcgImMiIHJlZ2lzdGVyIGNvbnN0cmFpbnQuCi0JKiBjb25maWcvbmlvczIvY29uc3RyYWludC5tZCAoYyk6IE5ldyByZWdpc3RlciBjb25zdHJhaW50Ci0JY29ycmVzcG9uZGluZyB0byBJSk1QX1JFR1MuCi0KLQotCi1naXQtc3ZuLWlkOiBzdm4rc3NoOi8vZ2NjLmdudS5vcmcvc3ZuL2djYy90cnVua0AyMjMwODIgMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0Ci1TaWduZWQtb2ZmLWJ5OiBNYXJlayBWYXN1dCA8bWFyZXhAZGVueC5kZT4KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgWyBnaXQ6Ly9nY2MuZ251Lm9yZy9naXQvZ2NjLmdpdCAxZDY3MTIwZDk1YzJjNmUwZWQ0ZjczNTdkMWNjNjI4ODdlYWJhNDYzIF0KLS0tLQotIGdjYy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgfCAxMiArKysrKysrKysrKysKLSBnY2MvY29uZmlnL25pb3MyL2NvbnN0cmFpbnRzLm1kIHwgIDMgKysrCi0gZ2NjL2NvbmZpZy9uaW9zMi9uaW9zMi5oICAgICAgICB8IDExICsrKysrKystLS0tCi0gZ2NjL2NvbmZpZy9uaW9zMi9uaW9zMi5tZCAgICAgICB8ICA0ICsrLS0KLSA0IGZpbGVzIGNoYW5nZWQsIDI0IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9nY2MvY29uZmlnL25pb3MyL2NvbnN0cmFpbnRzLm1kIGIvZ2NjL2NvbmZpZy9uaW9zMi9jb25zdHJhaW50cy5tZAotaW5kZXggZjRiZDlmNy4uNzM1Zjg5MiAxMDA2NDQKLS0tLSBhL2djYy9jb25maWcvbmlvczIvY29uc3RyYWludHMubWQKLSsrKyBiL2djYy9jb25maWcvbmlvczIvY29uc3RyYWludHMubWQKLUBAIC0zOSw2ICszOSw5IEBACi0gCi0gOzsgUmVnaXN0ZXIgY29uc3RyYWludHMKLSAKLSsoZGVmaW5lX3JlZ2lzdGVyX2NvbnN0cmFpbnQgImMiICJJSk1QX1JFR1MiCi0rICAiQSByZWdpc3RlciBzdWl0YWJsZSBmb3IgYW4gaW5kaXJlY3QganVtcC4iKQotKwotIChkZWZpbmVfcmVnaXN0ZXJfY29uc3RyYWludCAiaiIgIlNJQl9SRUdTIgotICAgIkEgcmVnaXN0ZXIgc3VpdGFibGUgZm9yIGFuIGluZGlyZWN0IHNpYmNhbGwuIikKLSAKLWRpZmYgLS1naXQgYS9nY2MvY29uZmlnL25pb3MyL25pb3MyLmggYi9nY2MvY29uZmlnL25pb3MyL25pb3MyLmgKLWluZGV4IDUxMGFiNWYuLmFjMzM5NzggMTAwNjQ0Ci0tLS0gYS9nY2MvY29uZmlnL25pb3MyL25pb3MyLmgKLSsrKyBiL2djYy9jb25maWcvbmlvczIvbmlvczIuaAotQEAgLTE3Myw2ICsxNzMsNyBAQCBlbnVtIHJlZ19jbGFzcwotIHsKLSAgIE5PX1JFR1MsCi0gICBTSUJfUkVHUywKLSsgIElKTVBfUkVHUywKLSAgIEdQX1JFR1MsCi0gICBBTExfUkVHUywKLSAgIExJTV9SRUdfQ0xBU1NFUwotQEAgLTE4Myw2ICsxODQsNyBAQCBlbnVtIHJlZ19jbGFzcwotICNkZWZpbmUgUkVHX0NMQVNTX05BTUVTICAgXAotICAgeyAgIk5PX1JFR1MiLAkJICBcCi0gICAgICAiU0lCX1JFR1MiLAkgIFwKLSsgICAgICJJSk1QX1JFR1MiLAkgIFwKLSAgICAgICJHUF9SRUdTIiwgICAgICAgICAgIFwKLSAgICAgICJBTExfUkVHUyIgfQotIAotQEAgLTE5MCwxMCArMTkyLDExIEBAIGVudW0gcmVnX2NsYXNzCi0gCi0gI2RlZmluZSBSRUdfQ0xBU1NfQ09OVEVOVFMJCQlcCi0gICB7CQkJCQkJXAotLSAgICAvKiBOT19SRUdTICAqLyB7IDAsIDB9LAkJCVwKLS0gICAgLyogU0lCX1JFR1MgKi8geyAweGZlMGMsIDB9LAkJXAotLSAgICAvKiBHUF9SRUdTICAqLyB7fjAsIDB9LAkJCVwKLS0gICAgLyogQUxMX1JFR1MgKi8ge34wLH4wfQkJCVwKLSsgICAgLyogTk9fUkVHUyAgICAqLyB7IDAsIDB9LAkJCVwKLSsgICAgLyogU0lCX1JFR1MgICAqLyB7IDB4ZmUwYywgMH0sCQlcCi0rICAgIC8qIElKTVBfUkVHUyAgKi8geyAweDdmZmZmZmZmLCAwfSwJCVwKLSsgICAgLyogR1BfUkVHUyAgICAqLyB7fjAsIDB9LAkJCVwKLSsgICAgLyogQUxMX1JFR1MgICAqLyB7fjAsfjB9CQkJXAotICAgfQotIAotIAotZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbmlvczIvbmlvczIubWQgYi9nY2MvY29uZmlnL25pb3MyL25pb3MyLm1kCi1pbmRleCA3YjM1ZDI2OS4uMzZlZjEwMSAxMDA2NDQKLS0tLSBhL2djYy9jb25maWcvbmlvczIvbmlvczIubWQKLSsrKyBiL2djYy9jb25maWcvbmlvczIvbmlvczIubWQKLUBAIC02OTcsNyArNjk3LDcgQEAKLSA7IGNoZWNrIG9yIGFkanVzdCBmb3Igb3ZlcmZsb3cuCi0gCi0gKGRlZmluZV9pbnNuICJpbmRpcmVjdF9qdW1wIgotLSAgWyhzZXQgKHBjKSAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKV0KLSsgIFsoc2V0IChwYykgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgImMiKSldCi0gICAiIgotICAgImptcFxcdCUwIgotICAgWyhzZXRfYXR0ciAidHlwZSIgImNvbnRyb2wiKV0pCi1AQCAtODExLDcgKzgxMSw3IEBACi0gCi0gKGRlZmluZV9pbnNuICIqdGFibGVqdW1wIgotICAgWyhzZXQgKHBjKQotLSAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkKLSsgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICJjIikpCi0gICAgKHVzZSAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDEgIiIgIiIpKSldCi0gICAiIgotICAgImptcFxcdCUwIgotLS0gCi0yLjcuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTMtZXhwci5jLVBSLXRhcmdldC02NTM1OC1Bdm9pZC1jbG9iYmVyaW5nLXBhcnRpYWwtYXJndS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA1My1leHByLmMtUFItdGFyZ2V0LTY1MzU4LUF2b2lkLWNsb2JiZXJpbmctcGFydGlhbC1hcmd1LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMThmNDBlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA1My1leHByLmMtUFItdGFyZ2V0LTY1MzU4LUF2b2lkLWNsb2JiZXJpbmctcGFydGlhbC1hcmd1LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzA3ICswLDAgQEAKLUZyb20gNTM2YjgzMTg5NzQ0OTVjZGUyYjQyYzNjMjc0Mjc0OGUyYjI3MWJlMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IGt0a2FjaG92IDxrdGthY2hvdkAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQ+Ci1EYXRlOiBXZWQsIDI3IE1heSAyMDE1IDEzOjI1OjAxICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIFBSIHRhcmdldC82NTM1OCBBdm9pZCBjbG9iYmVyaW5nIHBhcnRpYWwgYXJndW1lbnQgZHVyaW5nCi0gc2liY2FsbAotCi0JUFIgdGFyZ2V0LzY1MzU4Ci0JKiBleHByLmMgKG1lbW9yeV9sb2FkX292ZXJsYXApOiBOZXcgZnVuY3Rpb24uCi0JKGVtaXRfcHVzaF9pbnNuKTogV2hlbiBwdXNoaW5nIHBhcnRpYWwgYXJncyB0byB0aGUgc3RhY2sgd291bGQKLQljbG9iYmVyIHRoZSByZWdpc3RlciBwYXJ0IGxvYWQgdGhlIG92ZXJsYXBwaW5nIHBhcnQgaW50byBhIHBzZXVkbwotCWFuZCBwdXQgaXQgaW50byB0aGUgaGFyZCByZWcgYWZ0ZXIgcHVzaGluZy4gIENoYW5nZSByZXR1cm4gdHlwZQotCXRvIGJvb2wuICBBZGQgYm9vbCBhcmd1bWVudC4KLQkqIGV4cHIuaCAoZW1pdF9wdXNoX2luc24pOiBDaGFuZ2UgcmV0dXJuIHR5cGUgdG8gYm9vbC4KLQlBZGQgYm9vbCBhcmd1bWVudC4KLQkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogQ2FuY2VsIHNpYmNhbGwgb3B0aW1pemF0aW9uIHdoZW4gZW5jb3VudGVyaW5nCi0JcGFydGlhbCBhcmd1bWVudCBvbiB0YXJnZXRzIHdpdGggQVJHU19HUk9XX0RPV05XQVJEIGFuZAotCSFTVEFDS19HUk9XU19ET1dOV0FSRC4KLQkoZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWVfMSk6IFVwZGF0ZSBjYWxsc2l0ZSBvZiBlbWl0X3B1c2hfaW5zbi4KLQkoc3RvcmVfb25lX2FyZyk6IExpa2V3aXNlLgotCi0JUFIgdGFyZ2V0LzY1MzU4Ci0JKiBnY2MuZGcvcHI2NTM1OC5jOiBOZXcgdGVzdC4KLQotZ2l0LXN2bi1pZDogc3ZuK3NzaDovL2djYy5nbnUub3JnL3N2bi9nY2MvdHJ1bmtAMjIzNzUzIDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhNAotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IGZyb20gNi4wCi1TaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+Ci0tLS0KLSBnY2MvY2FsbHMuYyAgICAgICAgICAgICAgICAgICAgfCAxNyArKysrKystLQotIGdjYy9leHByLmMgICAgICAgICAgICAgICAgICAgICB8IDkwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQotIGdjYy9leHByLmggICAgICAgICAgICAgICAgICAgICB8ICA0ICstCi0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI2NTM1OC5jIHwgMzMgKysrKysrKysrKysrKysrKwotIDQgZmlsZXMgY2hhbmdlZCwgMTI5IGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQotIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy5kZy9wcjY1MzU4LmMKLQotZGlmZiAtLWdpdCBhL2djYy9jYWxscy5jIGIvZ2NjL2NhbGxzLmMKLWluZGV4IGVlOGVhNWYuLjIzMzQzODEgMTAwNjQ0Ci0tLS0gYS9nY2MvY2FsbHMuYwotKysrIGIvZ2NjL2NhbGxzLmMKLUBAIC0zMjM2LDYgKzMyMzYsMTQgQEAgZXhwYW5kX2NhbGwgKHRyZWUgZXhwLCBydHggdGFyZ2V0LCBpbnQgaWdub3JlKQotIAkgICAgewotIAkgICAgICBydHhfaW5zbiAqYmVmb3JlX2FyZyA9IGdldF9sYXN0X2luc24gKCk7Ci0gCi0rCSAgICAgLyogT24gdGFyZ2V0cyB3aXRoIHdlaXJkIGNhbGxpbmcgY29udmVudGlvbnMgKGUuZy4gUEEpIGl0J3MKLSsJCWhhcmQgdG8gZW5zdXJlIHRoYXQgYWxsIGNhc2VzIG9mIGFyZ3VtZW50IG92ZXJsYXAgYmV0d2VlbgotKwkJc3RhY2sgYW5kIHJlZ2lzdGVycyB3b3JrLiAgUGxheSBpdCBzYWZlIGFuZCBiYWlsIG91dC4gICovCi0rI2lmIGRlZmluZWQoQVJHU19HUk9XX0RPV05XQVJEKSAmJiAhZGVmaW5lZChTVEFDS19HUk9XU19ET1dOV0FSRCkKLSsJCSAgc2liY2FsbF9mYWlsdXJlID0gMTsKLSsJCSAgYnJlYWs7Ci0rI2VuZGlmCi0rCi0gCSAgICAgIGlmIChzdG9yZV9vbmVfYXJnICgmYXJnc1tpXSwgYXJnYmxvY2ssIGZsYWdzLAotIAkJCQkgYWRqdXN0ZWRfYXJnc19zaXplLnZhciAhPSAwLAotIAkJCQkgcmVnX3Bhcm1fc3RhY2tfc3BhY2UpCi1AQCAtNDI3OSw3ICs0Mjg3LDcgQEAgZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWVfMSAoaW50IHJldHZhbCwgcnR4IG9yZ2Z1biwgcnR4IHZhbHVlLAotIAkJCSAgcGFydGlhbCwgcmVnLCAwLCBhcmdibG9jaywKLSAJCQkgIEdFTl9JTlQgKGFyZ3ZlY1thcmdudW1dLmxvY2F0ZS5vZmZzZXQuY29uc3RhbnQpLAotIAkJCSAgcmVnX3Bhcm1fc3RhY2tfc3BhY2UsCi0tCQkJICBBUkdTX1NJWkVfUlRYIChhcmd2ZWNbYXJnbnVtXS5sb2NhdGUuYWxpZ25tZW50X3BhZCkpOwotKwkJCSAgQVJHU19TSVpFX1JUWCAoYXJndmVjW2FyZ251bV0ubG9jYXRlLmFsaWdubWVudF9wYWQpLCBmYWxzZSk7Ci0gCi0gCSAgLyogTm93IG1hcmsgdGhlIHNlZ21lbnQgd2UganVzdCB1c2VkLiAgKi8KLSAJICBpZiAoQUNDVU1VTEFURV9PVVRHT0lOR19BUkdTKQotQEAgLTQ4ODYsMTAgKzQ4OTQsMTEgQEAgc3RvcmVfb25lX2FyZyAoc3RydWN0IGFyZ19kYXRhICphcmcsIHJ0eCBhcmdibG9jaywgaW50IGZsYWdzLAotIAotICAgICAgIC8qIFRoaXMgaXNuJ3QgYWxyZWFkeSB3aGVyZSB3ZSB3YW50IGl0IG9uIHRoZSBzdGFjaywgc28gcHV0IGl0IHRoZXJlLgotIAkgVGhpcyBjYW4gZWl0aGVyIGJlIGRvbmUgd2l0aCBwdXNoIG9yIGNvcHkgaW5zbnMuICAqLwotLSAgICAgIGVtaXRfcHVzaF9pbnNuIChhcmctPnZhbHVlLCBhcmctPm1vZGUsIFRSRUVfVFlQRSAocHZhbCksIE5VTExfUlRYLAotKyAgICAgIGlmICghZW1pdF9wdXNoX2luc24gKGFyZy0+dmFsdWUsIGFyZy0+bW9kZSwgVFJFRV9UWVBFIChwdmFsKSwgTlVMTF9SVFgsCi0gCQkgICAgICBwYXJtX2FsaWduLCBwYXJ0aWFsLCByZWcsIHVzZWQgLSBzaXplLCBhcmdibG9jaywKLSAJCSAgICAgIEFSR1NfU0laRV9SVFggKGFyZy0+bG9jYXRlLm9mZnNldCksIHJlZ19wYXJtX3N0YWNrX3NwYWNlLAotLQkJICAgICAgQVJHU19TSVpFX1JUWCAoYXJnLT5sb2NhdGUuYWxpZ25tZW50X3BhZCkpOwotKwkJICAgICAgQVJHU19TSVpFX1JUWCAoYXJnLT5sb2NhdGUuYWxpZ25tZW50X3BhZCksIHRydWUpKQotKwlzaWJjYWxsX2ZhaWx1cmUgPSAxOwotIAotICAgICAgIC8qIFVubGVzcyB0aGlzIGlzIGEgcGFydGlhbGx5LWluLXJlZ2lzdGVyIGFyZ3VtZW50LCB0aGUgYXJndW1lbnQgaXMgbm93Ci0gCSBpbiB0aGUgc3RhY2suICAqLwotQEAgLTUwMDEsNyArNTAxMCw3IEBAIHN0b3JlX29uZV9hcmcgKHN0cnVjdCBhcmdfZGF0YSAqYXJnLCBydHggYXJnYmxvY2ssIGludCBmbGFncywKLSAgICAgICBlbWl0X3B1c2hfaW5zbiAoYXJnLT52YWx1ZSwgYXJnLT5tb2RlLCBUUkVFX1RZUEUgKHB2YWwpLCBzaXplX3J0eCwKLSAJCSAgICAgIHBhcm1fYWxpZ24sIHBhcnRpYWwsIHJlZywgZXhjZXNzLCBhcmdibG9jaywKLSAJCSAgICAgIEFSR1NfU0laRV9SVFggKGFyZy0+bG9jYXRlLm9mZnNldCksIHJlZ19wYXJtX3N0YWNrX3NwYWNlLAotLQkJICAgICAgQVJHU19TSVpFX1JUWCAoYXJnLT5sb2NhdGUuYWxpZ25tZW50X3BhZCkpOwotKwkJICAgICAgQVJHU19TSVpFX1JUWCAoYXJnLT5sb2NhdGUuYWxpZ25tZW50X3BhZCksIGZhbHNlKTsKLSAKLSAgICAgICAvKiBVbmxlc3MgdGhpcyBpcyBhIHBhcnRpYWxseS1pbi1yZWdpc3RlciBhcmd1bWVudCwgdGhlIGFyZ3VtZW50IGlzIG5vdwotIAkgaW4gdGhlIHN0YWNrLgotZGlmZiAtLWdpdCBhL2djYy9leHByLmMgYi9nY2MvZXhwci5jCi1pbmRleCA1YzA5NTUwLi4yNGE2MjkzIDEwMDY0NAotLS0tIGEvZ2NjL2V4cHIuYwotKysrIGIvZ2NjL2V4cHIuYwotQEAgLTQxMjEsMTIgKzQxMjEsMzUgQEAgZW1pdF9zaW5nbGVfcHVzaF9pbnNuIChtYWNoaW5lX21vZGUgbW9kZSwgcnR4IHgsIHRyZWUgdHlwZSkKLSB9Ci0gI2VuZGlmCi0gCi0rLyogSWYgcmVhZGluZyBTSVpFIGJ5dGVzIGZyb20gWCB3aWxsIGVuZCB1cCByZWFkaW5nIGZyb20KLSsgICBZIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgb3ZlcmxhcC4gIFJldHVybiAtMQotKyAgIGlmIHRoZXJlIGlzIG5vIG92ZXJsYXAgb3IgLTIgaWYgd2UgY2FuJ3QgZGV0ZXJtaW5lCi0rICAgKGZvciBleGFtcGxlIHdoZW4gWCBhbmQgWSBoYXZlIGRpZmZlcmVudCBiYXNlIHJlZ2lzdGVycykuICAqLwotKwotK3N0YXRpYyBpbnQKLSttZW1vcnlfbG9hZF9vdmVybGFwIChydHggeCwgcnR4IHksIEhPU1RfV0lERV9JTlQgc2l6ZSkKLSt7Ci0rICBydHggdG1wID0gcGx1c19jb25zdGFudCAoUG1vZGUsIHgsIHNpemUpOwotKyAgcnR4IHN1YiA9IHNpbXBsaWZ5X2dlbl9iaW5hcnkgKE1JTlVTLCBQbW9kZSwgdG1wLCB5KTsKLSsKLSsgIGlmICghQ09OU1RfSU5UX1AgKHN1YikpCi0rICAgIHJldHVybiAtMjsKLSsKLSsgIEhPU1RfV0lERV9JTlQgdmFsID0gSU5UVkFMIChzdWIpOwotKwotKyAgcmV0dXJuIElOX1JBTkdFICh2YWwsIDEsIHNpemUpID8gdmFsIDogLTE7Ci0rfQotKwotIC8qIEdlbmVyYXRlIGNvZGUgdG8gcHVzaCBYIG9udG8gdGhlIHN0YWNrLCBhc3N1bWluZyBpdCBoYXMgbW9kZSBNT0RFIGFuZAotICAgIHR5cGUgVFlQRS4KLSAgICBNT0RFIGlzIHJlZHVuZGFudCBleGNlcHQgd2hlbiBYIGlzIGEgQ09OU1RfSU5UIChzaW5jZSB0aGV5IGRvbid0Ci0gICAgY2FycnkgbW9kZSBpbmZvKS4KLSAgICBTSVpFIGlzIGFuIHJ0eCBmb3IgdGhlIHNpemUgb2YgZGF0YSB0byBiZSBjb3BpZWQgKGluIGJ5dGVzKSwKLSAgICBuZWVkZWQgb25seSBpZiBYIGlzIEJMS21vZGUuCi0rICAgUmV0dXJuIHRydWUgaWYgc3VjY2Vzc2Z1bC4gIE1heSByZXR1cm4gZmFsc2UgaWYgYXNrZWQgdG8gcHVzaCBhCi0rICAgcGFydGlhbCBhcmd1bWVudCBkdXJpbmcgYSBzaWJjYWxsIG9wdGltaXphdGlvbiAoYXMgc3BlY2lmaWVkIGJ5Ci0rICAgU0lCQ0FMTF9QKSBhbmQgdGhlIGluY29taW5nIGFuZCBvdXRnb2luZyBwb2ludGVycyBjYW5ub3QgYmUgc2hvd24KLSsgICB0byBub3Qgb3ZlcmxhcC4KLSAKLSAgICBBTElHTiAoaW4gYml0cykgaXMgbWF4aW11bSBhbGlnbm1lbnQgd2UgY2FuIGFzc3VtZS4KLSAKLUBAIC00MTUyLDExICs0MTc1LDExIEBAIGVtaXRfc2luZ2xlX3B1c2hfaW5zbiAobWFjaGluZV9tb2RlIG1vZGUsIHJ0eCB4LCB0cmVlIHR5cGUpCi0gICAgZm9yIGFyZ3VtZW50cyBwYXNzZWQgaW4gcmVnaXN0ZXJzLiAgSWYgbm9uemVybywgaXQgd2lsbCBiZSB0aGUgbnVtYmVyCi0gICAgb2YgYnl0ZXMgcmVxdWlyZWQuICAqLwotIAotLXZvaWQKLStib29sCi0gZW1pdF9wdXNoX2luc24gKHJ0eCB4LCBtYWNoaW5lX21vZGUgbW9kZSwgdHJlZSB0eXBlLCBydHggc2l6ZSwKLSAJCXVuc2lnbmVkIGludCBhbGlnbiwgaW50IHBhcnRpYWwsIHJ0eCByZWcsIGludCBleHRyYSwKLSAJCXJ0eCBhcmdzX2FkZHIsIHJ0eCBhcmdzX3NvX2ZhciwgaW50IHJlZ19wYXJtX3N0YWNrX3NwYWNlLAotLQkJcnR4IGFsaWdubWVudF9wYWQpCi0rCQlydHggYWxpZ25tZW50X3BhZCwgYm9vbCBzaWJjYWxsX3ApCi0gewotICAgcnR4IHhpbm5lcjsKLSAgIGVudW0gZGlyZWN0aW9uIHN0YWNrX2RpcmVjdGlvbgotQEAgLTQxNzksNiArNDIwMiwxMCBAQCBlbWl0X3B1c2hfaW5zbiAocnR4IHgsIG1hY2hpbmVfbW9kZSBtb2RlLCB0cmVlIHR5cGUsIHJ0eCBzaXplLAotIAotICAgeGlubmVyID0geDsKLSAKLSsgIGludCBucmVncyA9IHBhcnRpYWwgLyBVTklUU19QRVJfV09SRDsKLSsgIHJ0eCAqdG1wX3JlZ3MgPSBOVUxMOwotKyAgaW50IG92ZXJsYXBwaW5nID0gMDsKLSsKLSAgIGlmIChtb2RlID09IEJMS21vZGUKLSAgICAgICB8fCAoU1RSSUNUX0FMSUdOTUVOVCAmJiBhbGlnbiA8IEdFVF9NT0RFX0FMSUdOTUVOVCAobW9kZSkpKQotICAgICB7Ci1AQCAtNDMwOSw2ICs0MzM2LDQzIEBAIGVtaXRfcHVzaF9pbnNuIChydHggeCwgbWFjaGluZV9tb2RlIG1vZGUsIHRyZWUgdHlwZSwgcnR4IHNpemUsCi0gCSAgICAgUEFSTV9CT1VOREFSWS4gIEFzc3VtZSB0aGUgY2FsbGVyIGlzbid0IGx5aW5nLiAgKi8KLSAJICBzZXRfbWVtX2FsaWduICh0YXJnZXQsIGFsaWduKTsKLSAKLSsJICAvKiBJZiBwYXJ0IHNob3VsZCBnbyBpbiByZWdpc3RlcnMgYW5kIHB1c2hpbmcgdG8gdGhhdCBwYXJ0IHdvdWxkCi0rCSAgICAgb3ZlcndyaXRlIHNvbWUgb2YgdGhlIHZhbHVlcyB0aGF0IG5lZWQgdG8gZ28gaW50byByZWdzLCBsb2FkIHRoZQotKwkgICAgIG92ZXJsYXBwaW5nIHZhbHVlcyBpbnRvIHRlbXBvcmFyeSBwc2V1ZG9zIHRvIGJlIG1vdmVkIGludG8gdGhlIGhhcmQKLSsJICAgICByZWdzIGF0IHRoZSBlbmQgYWZ0ZXIgdGhlIHN0YWNrIHB1c2hpbmcgaGFzIGNvbXBsZXRlZC4KLSsJICAgICBXZSBjYW5ub3QgbG9hZCB0aGVtIGRpcmVjdGx5IGludG8gdGhlIGhhcmQgcmVncyBoZXJlIGJlY2F1c2UKLSsJICAgICB0aGV5IGNhbiBiZSBjbG9iYmVyZWQgYnkgdGhlIGJsb2NrIG1vdmUgZXhwYW5zaW9ucy4KLSsJICAgICBTZWUgUFIgNjUzNTguICAqLwotKwotKwkgIGlmIChwYXJ0aWFsID4gMCAmJiByZWcgIT0gMCAmJiBtb2RlID09IEJMS21vZGUKLSsJICAgICAgJiYgR0VUX0NPREUgKHJlZykgIT0gUEFSQUxMRUwpCi0rCSAgICB7Ci0rCSAgICAgIG92ZXJsYXBwaW5nID0gbWVtb3J5X2xvYWRfb3ZlcmxhcCAoWEVYUCAoeCwgMCksIHRlbXAsIHBhcnRpYWwpOwotKwkgICAgICBpZiAob3ZlcmxhcHBpbmcgPiAwKQotKwkgICAgICAgIHsKLSsJCSAgZ2NjX2Fzc2VydCAob3ZlcmxhcHBpbmcgJSBVTklUU19QRVJfV09SRCA9PSAwKTsKLSsJCSAgb3ZlcmxhcHBpbmcgLz0gVU5JVFNfUEVSX1dPUkQ7Ci0rCi0rCQkgIHRtcF9yZWdzID0gWEFMTE9DQVZFQyAocnR4LCBvdmVybGFwcGluZyk7Ci0rCi0rCQkgIGZvciAoaW50IGkgPSAwOyBpIDwgb3ZlcmxhcHBpbmc7IGkrKykKLSsJCSAgICB0bXBfcmVnc1tpXSA9IGdlbl9yZWdfcnR4ICh3b3JkX21vZGUpOwotKwotKwkJICBmb3IgKGludCBpID0gMDsgaSA8IG92ZXJsYXBwaW5nOyBpKyspCi0rCQkgICAgZW1pdF9tb3ZlX2luc24gKHRtcF9yZWdzW2ldLAotKwkJCQkgICAgb3BlcmFuZF9zdWJ3b3JkX2ZvcmNlICh0YXJnZXQsIGksIG1vZGUpKTsKLSsJICAgICAgICB9Ci0rCSAgICAgIGVsc2UgaWYgKG92ZXJsYXBwaW5nID09IC0xKQotKwkJb3ZlcmxhcHBpbmcgPSAwOwotKwkgICAgICAvKiBDb3VsZCBub3QgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlcmUgaXMgb3ZlcmxhcC4KLSsJICAgICAgICAgRmFpbCB0aGUgc2liY2FsbC4gICovCi0rCSAgICAgIGVsc2UKLSsJCXsKLSsJCSAgb3ZlcmxhcHBpbmcgPSAwOwotKwkJICBpZiAoc2liY2FsbF9wKQotKwkJICAgIHJldHVybiBmYWxzZTsKLSsJCX0KLSsJICAgIH0KLSAJICBlbWl0X2Jsb2NrX21vdmUgKHRhcmdldCwgeGlubmVyLCBzaXplLCBCTE9DS19PUF9DQUxMX1BBUk0pOwotIAl9Ci0gICAgIH0KLUBAIC00MzYzLDEyICs0NDI3LDEzIEBAIGVtaXRfcHVzaF9pbnNuIChydHggeCwgbWFjaGluZV9tb2RlIG1vZGUsIHRyZWUgdHlwZSwgcnR4IHNpemUsCi0gCSBoYXMgYSBzaXplIGEgbXVsdGlwbGUgb2YgYSB3b3JkLiAgKi8KLSAgICAgICBmb3IgKGkgPSBzaXplIC0gMTsgaSA+PSBub3Rfc3RhY2s7IGktLSkKLSAJaWYgKGkgPj0gbm90X3N0YWNrICsgb2Zmc2V0KQotLQkgIGVtaXRfcHVzaF9pbnNuIChvcGVyYW5kX3N1YndvcmRfZm9yY2UgKHgsIGksIG1vZGUpLAotKwkgIGlmICghZW1pdF9wdXNoX2luc24gKG9wZXJhbmRfc3Vid29yZF9mb3JjZSAoeCwgaSwgbW9kZSksCi0gCQkJICB3b3JkX21vZGUsIE5VTExfVFJFRSwgTlVMTF9SVFgsIGFsaWduLCAwLCBOVUxMX1JUWCwKLSAJCQkgIDAsIGFyZ3NfYWRkciwKLSAJCQkgIEdFTl9JTlQgKGFyZ3Nfb2Zmc2V0ICsgKChpIC0gbm90X3N0YWNrICsgc2tpcCkKLSAJCQkJCQkgICogVU5JVFNfUEVSX1dPUkQpKSwKLS0JCQkgIHJlZ19wYXJtX3N0YWNrX3NwYWNlLCBhbGlnbm1lbnRfcGFkKTsKLSsJCQkgIHJlZ19wYXJtX3N0YWNrX3NwYWNlLCBhbGlnbm1lbnRfcGFkLCBzaWJjYWxsX3ApKQotKwkgICAgcmV0dXJuIGZhbHNlOwotICAgICB9Ci0gICBlbHNlCi0gICAgIHsKLUBAIC00NDExLDkgKzQ0NzYsOCBAQCBlbWl0X3B1c2hfaW5zbiAocnR4IHgsIG1hY2hpbmVfbW9kZSBtb2RlLCB0cmVlIHR5cGUsIHJ0eCBzaXplLAotIAl9Ci0gICAgIH0KLSAKLS0gIC8qIElmIHBhcnQgc2hvdWxkIGdvIGluIHJlZ2lzdGVycywgY29weSB0aGF0IHBhcnQKLS0gICAgIGludG8gdGhlIGFwcHJvcHJpYXRlIHJlZ2lzdGVycy4gIERvIHRoaXMgbm93LCBhdCB0aGUgZW5kLAotLSAgICAgc2luY2UgbWVtLXRvLW1lbSBjb3BpZXMgYWJvdmUgbWF5IGRvIGZ1bmN0aW9uIGNhbGxzLiAgKi8KLSsgIC8qIE1vdmUgdGhlIHBhcnRpYWwgYXJndW1lbnRzIGludG8gdGhlIHJlZ2lzdGVycyBhbmQgYW55IG92ZXJsYXBwaW5nCi0rICAgICB2YWx1ZXMgdGhhdCB3ZSBtb3ZlZCBpbnRvIHRoZSBwc2V1ZG9zIGluIHRtcF9yZWdzLiAgKi8KLSAgIGlmIChwYXJ0aWFsID4gMCAmJiByZWcgIT0gMCkKLSAgICAgewotICAgICAgIC8qIEhhbmRsZSBjYWxscyB0aGF0IHBhc3MgdmFsdWVzIGluIG11bHRpcGxlIG5vbi1jb250aWd1b3VzIGxvY2F0aW9ucy4KLUBAIC00NDIxLDkgKzQ0ODUsMTUgQEAgZW1pdF9wdXNoX2luc24gKHJ0eCB4LCBtYWNoaW5lX21vZGUgbW9kZSwgdHJlZSB0eXBlLCBydHggc2l6ZSwKLSAgICAgICBpZiAoR0VUX0NPREUgKHJlZykgPT0gUEFSQUxMRUwpCi0gCWVtaXRfZ3JvdXBfbG9hZCAocmVnLCB4LCB0eXBlLCAtMSk7Ci0gICAgICAgZWxzZQotLQl7Ci0rICAgICAgICB7Ci0gCSAgZ2NjX2Fzc2VydCAocGFydGlhbCAlIFVOSVRTX1BFUl9XT1JEID09IDApOwotLQkgIG1vdmVfYmxvY2tfdG9fcmVnIChSRUdOTyAocmVnKSwgeCwgcGFydGlhbCAvIFVOSVRTX1BFUl9XT1JELCBtb2RlKTsKLSsJICBtb3ZlX2Jsb2NrX3RvX3JlZyAoUkVHTk8gKHJlZyksIHgsIG5yZWdzIC0gb3ZlcmxhcHBpbmcsIG1vZGUpOwotKwotKwkgIGZvciAoaW50IGkgPSAwOyBpIDwgb3ZlcmxhcHBpbmc7IGkrKykKLSsJICAgIGVtaXRfbW92ZV9pbnNuIChnZW5fcnR4X1JFRyAod29yZF9tb2RlLCBSRUdOTyAocmVnKQotKwkJCQkJCSAgICArIG5yZWdzIC0gb3ZlcmxhcHBpbmcgKyBpKSwKLSsJCQkgICAgdG1wX3JlZ3NbaV0pOwotKwotIAl9Ci0gICAgIH0KLSAKLUBAIC00NDMyLDYgKzQ1MDIsOCBAQCBlbWl0X3B1c2hfaW5zbiAocnR4IHgsIG1hY2hpbmVfbW9kZSBtb2RlLCB0cmVlIHR5cGUsIHJ0eCBzaXplLAotIAotICAgaWYgKGFsaWdubWVudF9wYWQgJiYgYXJnc19hZGRyID09IDApCi0gICAgIGFudGlfYWRqdXN0X3N0YWNrIChhbGlnbm1lbnRfcGFkKTsKLSsKLSsgIHJldHVybiB0cnVlOwotIH0KLSAMCi0gLyogUmV0dXJuIFggaWYgWCBjYW4gYmUgdXNlZCBhcyBhIHN1YnRhcmdldCBpbiBhIHNlcXVlbmNlIG9mIGFyaXRobWV0aWMKLWRpZmYgLS1naXQgYS9nY2MvZXhwci5oIGIvZ2NjL2V4cHIuaAotaW5kZXggODY3ODUyZS4uNWZjYzEzZiAxMDA2NDQKLS0tLSBhL2djYy9leHByLmgKLSsrKyBiL2djYy9leHByLmgKLUBAIC0yMTgsOCArMjE4LDggQEAgZXh0ZXJuIHJ0eCBlbWl0X21vdmVfcmVzb2x2ZV9wdXNoIChtYWNoaW5lX21vZGUsIHJ0eCk7Ci0gZXh0ZXJuIHJ0eCBwdXNoX2Jsb2NrIChydHgsIGludCwgaW50KTsKLSAKLSAvKiBHZW5lcmF0ZSBjb2RlIHRvIHB1c2ggc29tZXRoaW5nIG9udG8gdGhlIHN0YWNrLCBnaXZlbiBpdHMgbW9kZSBhbmQgdHlwZS4gICovCi0tZXh0ZXJuIHZvaWQgZW1pdF9wdXNoX2luc24gKHJ0eCwgbWFjaGluZV9tb2RlLCB0cmVlLCBydHgsIHVuc2lnbmVkIGludCwKLS0JCQkgICAgaW50LCBydHgsIGludCwgcnR4LCBydHgsIGludCwgcnR4KTsKLStleHRlcm4gYm9vbCBlbWl0X3B1c2hfaW5zbiAocnR4LCBtYWNoaW5lX21vZGUsIHRyZWUsIHJ0eCwgdW5zaWduZWQgaW50LAotKwkJCSAgICBpbnQsIHJ0eCwgaW50LCBydHgsIHJ0eCwgaW50LCBydHgsIGJvb2wpOwotIAotIC8qIEV4cGFuZCBhbiBhc3NpZ25tZW50IHRoYXQgc3RvcmVzIHRoZSB2YWx1ZSBvZiBGUk9NIGludG8gVE8uICAqLwotIGV4dGVybiB2b2lkIGV4cGFuZF9hc3NpZ25tZW50ICh0cmVlLCB0cmVlLCBib29sKTsKLWRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9wcjY1MzU4LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9wcjY1MzU4LmMKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi5iYTg5ZmQ0Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9wcjY1MzU4LmMKLUBAIC0wLDAgKzEsMzMgQEAKLSsvKiB7IGRnLWRvIHJ1biB9ICovCi0rLyogeyBkZy1vcHRpb25zICItTzIiIH0gKi8KLSsKLStzdHJ1Y3QgcGFjawotK3sKLSsgIGludCBmaW5lOwotKyAgaW50IHZpY3RpbTsKLSsgIGludCBraWxsZXI7Ci0rfTsKLSsKLStpbnQgX19hdHRyaWJ1dGVfXyAoKF9fbm9pbmxpbmVfXywgX19ub2Nsb25lX18pKQotK2JhciAoaW50IGEsIGludCBiLCBzdHJ1Y3QgcGFjayBwKQotK3sKLSsgIGlmIChhICE9IDIwIHx8IGIgIT0gMzApCi0rICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsKLSsgIGlmIChwLmZpbmUgIT0gNDAgfHwgcC52aWN0aW0gIT0gNTAgfHwgcC5raWxsZXIgIT0gNjApCi0rICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsKLSsgIHJldHVybiAwOwotK30KLSsKLStpbnQgX19hdHRyaWJ1dGVfXyAoKF9fbm9pbmxpbmVfXywgX19ub2Nsb25lX18pKQotK2ZvbyAoaW50IGFyZzEsIGludCBhcmcyLCBpbnQgYXJnMywgc3RydWN0IHBhY2sgcCkKLSt7Ci0rICByZXR1cm4gYmFyIChhcmcyLCBhcmczLCBwKTsKLSt9Ci0rCi0raW50IG1haW4gKHZvaWQpCi0rewotKyAgc3RydWN0IHBhY2sgcCA9IHsgNDAsIDUwLCA2MCB9OwotKwotKyAgKHZvaWQpIGZvbyAoMTAsIDIwLCAzMCwgcCk7Ci0rICByZXR1cm4gMDsKLSt9Ci0tLSAKLTIuNy4wCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA1NC1zdXBwb3J0LWZmaWxlLXByZWZpeC1tYXAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTQtc3VwcG9ydC1mZmlsZS1wcmVmaXgtbWFwLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTE2ODc5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA1NC1zdXBwb3J0LWZmaWxlLXByZWZpeC1tYXAucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyODQgKzAsMCBAQAotRnJvbSBlZjdjMmJkYTZiNGM4OGY4MDA3ZWQ2NjNiMTEwOGNkNDY1MTU5OGM4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotRGF0ZTogV2VkLCAxNiBNYXIgMjAxNiAwMjoyNzo0MyAtMDQwMAotU3ViamVjdDogW1BBVENIXSBnY2MvbGliY3BwOiBzdXBwb3J0IC1mZmlsZS1wcmVmaXgtbWFwPTxvbGQ+PTxuZXc+Ci0KLVNpbWlsYXIgLWZkZWJ1Zy1wcmVmaXgtbWFwLCBhZGQgb3B0aW9uIC1mZmlsZS1wcmVmaXgtbWFwIHRvIG1hcCBvbmUKLWRpcmVjdG9yeSBuYW1lIChvbGQpIHRvIGFub3RoZXIgKG5ldykgaW4gX19GSUxFX18sIF9fQkFTRV9GSUxFX18gYW5kCi1fX2J1aWx0aW5fRklMRSAoKS4KLQotaHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NzAyNjgKLQotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2djYy1wYXRjaGVzQGdjYy5nbnUub3JnXQotU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotLS0tCi0gZ2NjL2MtZmFtaWx5L2Mtb3B0cy5jICAgICB8ICA2ICsrKysKLSBnY2MvYy1mYW1pbHkvYy5vcHQgICAgICAgIHwgIDQgKysrCi0gZ2NjL2R3YXJmMm91dC5jICAgICAgICAgICB8ICAxICsKLSBnY2MvZ2ltcGxpZnkuYyAgICAgICAgICAgIHwgIDIgKysKLSBsaWJjcHAvTWFrZWZpbGUuaW4gICAgICAgIHwgMTAgKysrLS0tCi0gbGliY3BwL2ZpbGUtbWFwLmMgICAgICAgICB8IDkyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCi0gbGliY3BwL2luY2x1ZGUvZmlsZS1tYXAuaCB8IDMwICsrKysrKysrKysrKysrKysKLSBsaWJjcHAvbWFjcm8uYyAgICAgICAgICAgIHwgIDIgKysKLSA4IGZpbGVzIGNoYW5nZWQsIDE0MiBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQotIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJjcHAvZmlsZS1tYXAuYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJjcHAvaW5jbHVkZS9maWxlLW1hcC5oCi0KLWRpZmYgLS1naXQgYS9nY2MvYy1mYW1pbHkvYy1vcHRzLmMgYi9nY2MvYy1mYW1pbHkvYy1vcHRzLmMKLWluZGV4IDcxOGEwNTIuLjNmOTNjNTYgMTAwNjQ0Ci0tLS0gYS9nY2MvYy1mYW1pbHkvYy1vcHRzLmMKLSsrKyBiL2djYy9jLWZhbWlseS9jLW9wdHMuYwotQEAgLTQ2LDYgKzQ2LDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKLSAjaW5jbHVkZSAib3B0cy5oIgotICNpbmNsdWRlICJwbHVnaW4uaCIJCS8qIEZvciBQTFVHSU5fSU5DTFVERV9GSUxFIGV2ZW50LiAgKi8KLSAjaW5jbHVkZSAibWtkZXBzLmgiCi0rI2luY2x1ZGUgImZpbGUtbWFwLmgiCi0gI2luY2x1ZGUgImMtdGFyZ2V0LmgiCi0gI2luY2x1ZGUgInRtLmgiCQkJLyogRm9yIEJZVEVTX0JJR19FTkRJQU4sCi0gCQkJCSAgIERPTExBUlNfSU5fSURFTlRJRklFUlMsCi1AQCAtNTEwLDYgKzUxMSwxMSBAQCBjX2NvbW1vbl9oYW5kbGVfb3B0aW9uIChzaXplX3Qgc2NvZGUsIGNvbnN0IGNoYXIgKmFyZywgaW50IHZhbHVlLAotICAgICAgIGNwcF9vcHRzLT5uYXJyb3dfY2hhcnNldCA9IGFyZzsKLSAgICAgICBicmVhazsKLSAKLSsgICAgY2FzZSBPUFRfZmZpbGVfcHJlZml4X21hcF86Ci0rICAgICAgaWYgKGFkZF9maWxlX3ByZWZpeF9tYXAgKGFyZykgPCAwKQotKyAgICAgICAgZXJyb3IgKCJpbnZhbGlkIGFyZ3VtZW50ICVxcyB0byAtZmZpbGUtcHJlZml4LW1hcCIsIGFyZyk7Ci0rICAgICAgYnJlYWs7Ci0rCi0gICAgIGNhc2UgT1BUX2Z3aWRlX2V4ZWNfY2hhcnNldF86Ci0gICAgICAgY3BwX29wdHMtPndpZGVfY2hhcnNldCA9IGFyZzsKLSAgICAgICBicmVhazsKLWRpZmYgLS1naXQgYS9nY2MvYy1mYW1pbHkvYy5vcHQgYi9nY2MvYy1mYW1pbHkvYy5vcHQKLWluZGV4IDQ1M2VjOGUuLjMwYWQwNTMgMTAwNjQ0Ci0tLS0gYS9nY2MvYy1mYW1pbHkvYy5vcHQKLSsrKyBiL2djYy9jLWZhbWlseS9jLm9wdAotQEAgLTExMTcsNiArMTExNywxMCBAQCBmZXhlYy1jaGFyc2V0PQotIEMgT2JqQyBDKysgT2JqQysrIEpvaW5lZCBSZWplY3ROZWdhdGl2ZQotIC1mZXhlYy1jaGFyc2V0PTxjc2V0PglDb252ZXJ0IGFsbCBzdHJpbmdzIGFuZCBjaGFyYWN0ZXIgY29uc3RhbnRzIHRvIGNoYXJhY3RlciBzZXQgPGNzZXQ+Ci0gCi0rZmZpbGUtcHJlZml4LW1hcD0KLStDIE9iakMgQysrIE9iakMrKyBKb2luZWQgUmVqZWN0TmVnYXRpdmUKLSstZmZpbGUtcHJlZml4LW1hcD08b2xkPW5ldz4JTWFwIG9uZSBkaXJlY3RvcnkgbmFtZSB0byBhbm90aGVyIGluIF9fRklMRV9fLCBfX0JBU0VfRklMRV9fIGFuZCBfX2J1aWx0aW5fRklMRSAoKQotKwotIGZleHRlbmRlZC1pZGVudGlmaWVycwotIEMgT2JqQyBDKysgT2JqQysrCi0gUGVybWl0IHVuaXZlcnNhbCBjaGFyYWN0ZXIgbmFtZXMgKFxcdSBhbmQgXFxVKSBpbiBpZGVudGlmaWVycwotZGlmZiAtLWdpdCBhL2djYy9kd2FyZjJvdXQuYyBiL2djYy9kd2FyZjJvdXQuYwotaW5kZXggNTI2ZjExNC4uNDM4YTQ3NSAxMDA2NDQKLS0tLSBhL2djYy9kd2FyZjJvdXQuYwotKysrIGIvZ2NjL2R3YXJmMm91dC5jCi1AQCAtMTk2NzEsNiArMTk2NzEsNyBAQCBnZW5fcHJvZHVjZXJfc3RyaW5nICh2b2lkKQotICAgICAgIGNhc2UgT1BUX2ZsdHJhbnNfb3V0cHV0X2xpc3RfOgotICAgICAgIGNhc2UgT1BUX2ZyZXNvbHV0aW9uXzoKLSAgICAgICBjYXNlIE9QVF9mZGVidWdfcHJlZml4X21hcF86Ci0rICAgICAgY2FzZSBPUFRfZmZpbGVfcHJlZml4X21hcF86Ci0gCS8qIElnbm9yZSB0aGVzZS4gICovCi0gCWNvbnRpbnVlOwotICAgICAgIGRlZmF1bHQ6Ci1kaWZmIC0tZ2l0IGEvZ2NjL2dpbXBsaWZ5LmMgYi9nY2MvZ2ltcGxpZnkuYwotaW5kZXggYzg1ZjgzYS4uMWZmZTFlMSAxMDA2NDQKLS0tLSBhL2djYy9naW1wbGlmeS5jCi0rKysgYi9nY2MvZ2ltcGxpZnkuYwotQEAgLTg3LDYgKzg3LDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKLSAjaW5jbHVkZSAiZ2ltcGxlLWxvdy5oIgotICNpbmNsdWRlICJjaWxrLmgiCi0gI2luY2x1ZGUgImdvbXAtY29uc3RhbnRzLmgiCi0rI2luY2x1ZGUgImZpbGUtbWFwLmgiCi0gCi0gI2luY2x1ZGUgImxhbmdob29rcy1kZWYuaCIJLyogRklYTUU6IGZvciBsaGRfc2V0X2RlY2xfYXNzZW1ibGVyX25hbWUgKi8KLSAjaW5jbHVkZSAidHJlZS1wYXNzLmgiCQkvKiBGSVhNRTogb25seSBmb3IgUFJPUF9naW1wbGVfYW55ICovCi1AQCAtMjM3MCw2ICsyMzcxLDcgQEAgZ2ltcGxpZnlfY2FsbF9leHByICh0cmVlICpleHByX3AsIGdpbXBsZV9zZXEgKnByZV9wLCBib29sIHdhbnRfdmFsdWUpCi0gICAgICAgY2FzZSBCVUlMVF9JTl9GSUxFOgotIAl7Ci0gCSAgY29uc3QgY2hhciAqbG9jZmlsZSA9IExPQ0FUSU9OX0ZJTEUgKEVYUFJfTE9DQVRJT04gKCpleHByX3ApKTsKLSsJICBsb2NmaWxlID0gcmVtYXBfZmlsZV9maWxlbmFtZSAobG9jZmlsZSk7Ci0gCSAgKmV4cHJfcCA9IGJ1aWxkX3N0cmluZ19saXRlcmFsIChzdHJsZW4gKGxvY2ZpbGUpICsgMSwgbG9jZmlsZSk7Ci0gCSAgcmV0dXJuIEdTX09LOwotIAl9Ci1kaWZmIC0tZ2l0IGEvbGliY3BwL01ha2VmaWxlLmluIGIvbGliY3BwL01ha2VmaWxlLmluCi1pbmRleCBhZDM1NTYzLi5jMjEwZmY5IDEwMDY0NAotLS0tIGEvbGliY3BwL01ha2VmaWxlLmluCi0rKysgYi9saWJjcHAvTWFrZWZpbGUuaW4KLUBAIC04NCwxMiArODQsMTIgQEAgREVQTU9ERSA9ICQoQ1hYREVQTU9ERSkKLSAKLSAKLSBsaWJjcHBfYV9PQkpTID0gY2hhcnNldC5vIGRpcmVjdGl2ZXMubyBkaXJlY3RpdmVzLW9ubHkubyBlcnJvcnMubyBcCi0tCWV4cHIubyBmaWxlcy5vIGlkZW50aWZpZXJzLm8gaW5pdC5vIGxleC5vIGxpbmUtbWFwLm8gbWFjcm8ubyBcCi0tCW1rZGVwcy5vIHBjaC5vIHN5bXRhYi5vIHRyYWRpdGlvbmFsLm8KLSsJZXhwci5vIGZpbGUtbWFwLm8gZmlsZXMubyBpZGVudGlmaWVycy5vIGluaXQubyBsZXgubyBsaW5lLW1hcC5vIFwKLSsJbWFjcm8ubyBta2RlcHMubyBwY2gubyBzeW10YWIubyB0cmFkaXRpb25hbC5vCi0gCi0gbGliY3BwX2FfU09VUkNFUyA9IGNoYXJzZXQuYyBkaXJlY3RpdmVzLmMgZGlyZWN0aXZlcy1vbmx5LmMgZXJyb3JzLmMgXAotLQlleHByLmMgZmlsZXMuYyBpZGVudGlmaWVycy5jIGluaXQuYyBsZXguYyBsaW5lLW1hcC5jIG1hY3JvLmMgXAotLQlta2RlcHMuYyBwY2guYyBzeW10YWIuYyB0cmFkaXRpb25hbC5jCi0rCWV4cHIuYyBmaWxlLW1hcC5jIGZpbGVzLmMgaWRlbnRpZmllcnMuYyBpbml0LmMgbGV4LmMgbGluZS1tYXAuYyBcCi0rCW1hY3JvLmMgbWtkZXBzLmMgcGNoLmMgc3ltdGFiLmMgdHJhZGl0aW9uYWwuYwotIAotIGFsbDogbGliY3BwLmEgJChVU0VEX0NBVEFMT0dTKQotIAotQEAgLTI2Myw3ICsyNjMsNyBAQCBwby8kKFBBQ0tBR0UpLnBvdDogJChsaWJjcHBfYV9TT1VSQ0VTKQotIAotIFRBR1NfU09VUkNFUyA9ICQobGliY3BwX2FfU09VUkNFUykgaW50ZXJuYWwuaCB1Y25pZC5oIFwKLSAgICAgaW5jbHVkZS9saW5lLW1hcC5oIGluY2x1ZGUvc3ltdGFiLmggaW5jbHVkZS9jcHAtaWQtZGF0YS5oIFwKLS0gICAgaW5jbHVkZS9jcHBsaWIuaCBpbmNsdWRlL21rZGVwcy5oIHN5c3RlbS5oCi0rICAgIGluY2x1ZGUvY3BwbGliLmggaW5jbHVkZS9ta2RlcHMuaCBzeXN0ZW0uaCBpbmNsdWRlL2ZpbGUtbWFwLmgKLSAKLSBUQUdTOiAkKFRBR1NfU09VUkNFUykKLSAJY2QgJChzcmNkaXIpICYmIGV0YWdzICQoVEFHU19TT1VSQ0VTKQotZGlmZiAtLWdpdCBhL2xpYmNwcC9maWxlLW1hcC5jIGIvbGliY3BwL2ZpbGUtbWFwLmMKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi4wNGU4NTFiCi0tLS0gL2Rldi9udWxsCi0rKysgYi9saWJjcHAvZmlsZS1tYXAuYwotQEAgLTAsMCArMSw5MiBAQAotKy8qIE1hcCBvbmUgZGlyZWN0b3J5IG5hbWUgdG8gYW5vdGhlciBpbiBfX0ZJTEVfXywgX19CQVNFX0ZJTEVfXwotKyAgIGFuZCBfX2J1aWx0aW5fRklMRSAoKS4KLSsgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsKLStUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLStsYXRlciB2ZXJzaW9uLgotKwotK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSthbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQotKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSsKLSsgSW4gb3RoZXIgd29yZHMsIHlvdSBhcmUgd2VsY29tZSB0byB1c2UsIHNoYXJlIGFuZCBpbXByb3ZlIHRoaXMgcHJvZ3JhbS4KLSsgWW91IGFyZSBmb3JiaWRkZW4gdG8gZm9yYmlkIGFueW9uZSBlbHNlIHRvIHVzZSwgc2hhcmUgYW5kIGltcHJvdmUKLSsgd2hhdCB5b3UgZ2l2ZSB0aGVtLiAgIEhlbHAgc3RhbXAgb3V0IHNvZnR3YXJlLWhvYXJkaW5nISAgKi8KLSsKLSsjaW5jbHVkZSAiY29uZmlnLmgiCi0rI2luY2x1ZGUgInN5c3RlbS5oIgotKyNpbmNsdWRlICJmaWxlLW1hcC5oIgotKwotKy8qIFN0cnVjdHVyZSByZWNvcmRpbmcgdGhlIG1hcHBpbmcgZnJvbSBzb3VyY2UgZmlsZSBhbmQgZGlyZWN0b3J5Ci0rICAgbmFtZXMgYXQgY29tcGlsZSB0aW1lIHRvIF9fRklMRV9fICovCi0rdHlwZWRlZiBzdHJ1Y3QgZmlsZV9wcmVmaXhfbWFwCi0rewotKyAgY29uc3QgY2hhciAqb2xkX3ByZWZpeDsKLSsgIGNvbnN0IGNoYXIgKm5ld19wcmVmaXg7Ci0rICBzaXplX3Qgb2xkX2xlbjsKLSsgIHNpemVfdCBuZXdfbGVuOwotKyAgc3RydWN0IGZpbGVfcHJlZml4X21hcCAqbmV4dDsKLSt9IGZpbGVfcHJlZml4X21hcDsKLSsKLSsvKiBMaW5rZWQgbGlzdCBvZiBzdWNoIHN0cnVjdHVyZXMuICAqLwotK3N0YXRpYyBmaWxlX3ByZWZpeF9tYXAgKmZpbGVfcHJlZml4X21hcHM7Ci0rCi0rLyogUmVjb3JkIHByZWZpeCBtYXBwaW5nIG9mIF9fRklMRV9fLiAgQVJHIGlzIHRoZSBhcmd1bWVudCB0bwotKyAgIC1mZmlsZS1wcmVmaXgtbWFwIGFuZCBtdXN0IGJlIG9mIHRoZSBmb3JtIE9MRD1ORVcuICAqLwotK2ludAotK2FkZF9maWxlX3ByZWZpeF9tYXAgKGNvbnN0IGNoYXIgKmFyZykKLSt7Ci0rICBmaWxlX3ByZWZpeF9tYXAgKm1hcDsKLSsgIGNvbnN0IGNoYXIgKnA7Ci0rCi0rICBwID0gc3RyY2hyIChhcmcsICc9Jyk7Ci0rICBpZiAoIXApCi0rICB7Ci0rICAgICAgZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIGFyZ3VtZW50ICVxcyB0byAtZmZpbGUtcHJlZml4LW1hcCIsIGFyZyk7Ci0rICAgICAgcmV0dXJuIC0xOwotKyAgfQotKyAgbWFwID0gWE5FVyAoZmlsZV9wcmVmaXhfbWFwKTsKLSsgIG1hcC0+b2xkX3ByZWZpeCA9IHhzdHJuZHVwIChhcmcsIHAgLSBhcmcpOwotKyAgbWFwLT5vbGRfbGVuID0gcCAtIGFyZzsKLSsgIHArKzsKLSsgIG1hcC0+bmV3X3ByZWZpeCA9IHhzdHJkdXAgKHApOwotKyAgbWFwLT5uZXdfbGVuID0gc3RybGVuIChwKTsKLSsgIG1hcC0+bmV4dCA9IGZpbGVfcHJlZml4X21hcHM7Ci0rICBmaWxlX3ByZWZpeF9tYXBzID0gbWFwOwotKwotKyAgcmV0dXJuIDA7Ci0rfQotKwotKy8qIFBlcmZvcm0gdXNlci1zcGVjaWZpZWQgbWFwcGluZyBvZiBfX0ZJTEVfXyBwcmVmaXhlcy4gIFJldHVybgotKyAgIHRoZSBuZXcgbmFtZSBjb3JyZXNwb25kaW5nIHRvIGZpbGVuYW1lLiAgKi8KLSsKLStjb25zdCBjaGFyICoKLStyZW1hcF9maWxlX2ZpbGVuYW1lIChjb25zdCBjaGFyICpmaWxlbmFtZSkKLSt7Ci0rICBmaWxlX3ByZWZpeF9tYXAgKm1hcDsKLSsgIGNoYXIgKnM7Ci0rICBjb25zdCBjaGFyICpuYW1lOwotKyAgc2l6ZV90IG5hbWVfbGVuOwotKwotKyAgZm9yIChtYXAgPSBmaWxlX3ByZWZpeF9tYXBzOyBtYXA7IG1hcCA9IG1hcC0+bmV4dCkKLSsgICAgaWYgKGZpbGVuYW1lX25jbXAgKGZpbGVuYW1lLCBtYXAtPm9sZF9wcmVmaXgsIG1hcC0+b2xkX2xlbikgPT0gMCkKLSsgICAgICBicmVhazsKLSsgIGlmICghbWFwKQotKyAgICByZXR1cm4gZmlsZW5hbWU7Ci0rICBuYW1lID0gZmlsZW5hbWUgKyBtYXAtPm9sZF9sZW47Ci0rICBuYW1lX2xlbiA9IHN0cmxlbiAobmFtZSkgKyAxOwotKyAgcyA9IChjaGFyICopIGFsbG9jYSAobmFtZV9sZW4gKyBtYXAtPm5ld19sZW4pOwotKyAgbWVtY3B5IChzLCBtYXAtPm5ld19wcmVmaXgsIG1hcC0+bmV3X2xlbik7Ci0rICBtZW1jcHkgKHMgKyBtYXAtPm5ld19sZW4sIG5hbWUsIG5hbWVfbGVuKTsKLSsKLSsgIHJldHVybiB4c3RyZHVwIChzKTsKLSt9Ci0rCi0rCi1kaWZmIC0tZ2l0IGEvbGliY3BwL2luY2x1ZGUvZmlsZS1tYXAuaCBiL2xpYmNwcC9pbmNsdWRlL2ZpbGUtbWFwLmgKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi5lNmY4Y2JmCi0tLS0gL2Rldi9udWxsCi0rKysgYi9saWJjcHAvaW5jbHVkZS9maWxlLW1hcC5oCi1AQCAtMCwwICsxLDMwIEBACi0rLyogTWFwIG9uZSBkaXJlY3RvcnkgbmFtZSB0byBhbm90aGVyIGluIF9fRklMRV9fLCBfX0JBU0VfRklMRV9fCi0rICAgYW5kIF9fYnVpbHRpbl9GSUxFICgpLgotKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKwotK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0rdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0rRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotK2xhdGVyIHZlcnNpb24uCi0rCi0rVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLStNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLStZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotK2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCi0rPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotKwotKyBJbiBvdGhlciB3b3JkcywgeW91IGFyZSB3ZWxjb21lIHRvIHVzZSwgc2hhcmUgYW5kIGltcHJvdmUgdGhpcyBwcm9ncmFtLgotKyBZb3UgYXJlIGZvcmJpZGRlbiB0byBmb3JiaWQgYW55b25lIGVsc2UgdG8gdXNlLCBzaGFyZSBhbmQgaW1wcm92ZQotKyB3aGF0IHlvdSBnaXZlIHRoZW0uICAgSGVscCBzdGFtcCBvdXQgc29mdHdhcmUtaG9hcmRpbmchICAqLwotKwotKyNpZm5kZWYgTElCQ1BQX0ZJTEVfTUFQX0gKLSsjZGVmaW5lIExJQkNQUF9GSUxFX01BUF9ICi0rCi0rY29uc3QgY2hhciAqIHJlbWFwX2ZpbGVfZmlsZW5hbWUgKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKLSsKLStpbnQgYWRkX2ZpbGVfcHJlZml4X21hcCAoY29uc3QgY2hhciAqYXJnKTsKLSsKLSsjZW5kaWYgLyogIUxJQkNQUF9GSUxFX01BUF9IICAqLwotZGlmZiAtLWdpdCBhL2xpYmNwcC9tYWNyby5jIGIvbGliY3BwL21hY3JvLmMKLWluZGV4IDFlMGEwYjUuLmMzZDMzMGMgMTAwNjQ0Ci0tLS0gYS9saWJjcHAvbWFjcm8uYwotKysrIGIvbGliY3BwL21hY3JvLmMKLUBAIC0yNiw2ICsyNiw3IEBAIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCi0gI2luY2x1ZGUgInN5c3RlbS5oIgotICNpbmNsdWRlICJjcHBsaWIuaCIKLSAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKLSsjaW5jbHVkZSAiZmlsZS1tYXAuaCIKLSAKLSB0eXBlZGVmIHN0cnVjdCBtYWNyb19hcmcgbWFjcm9fYXJnOwotIC8qIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgdGhlIHRva2VucyBvZiBhIG1hY3JvIGFyZ3VtZW50LiAgVGhlc2UKLUBAIC0yOTcsNiArMjk4LDcgQEAgX2NwcF9idWlsdGluX21hY3JvX3RleHQgKGNwcF9yZWFkZXIgKnBmaWxlLCBjcHBfaGFzaG5vZGUgKm5vZGUpCi0gCSAgICBpZiAoIW5hbWUpCi0gCSAgICAgIGFib3J0ICgpOwotIAkgIH0KLSsJbmFtZSA9IHJlbWFwX2ZpbGVfZmlsZW5hbWUgKG5hbWUpOwotIAlsZW4gPSBzdHJsZW4gKG5hbWUpOwotIAlidWYgPSBfY3BwX3VuYWxpZ25lZF9hbGxvYyAocGZpbGUsIGxlbiAqIDIgKyAzKTsKLSAJcmVzdWx0ID0gYnVmOwotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTUtUmV1c2UtZmRlYnVnLXByZWZpeC1tYXAtdG8tcmVwbGFjZS1mZmlsZS1wcmVmaXgtbWFwLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDU1LVJldXNlLWZkZWJ1Zy1wcmVmaXgtbWFwLXRvLXJlcGxhY2UtZmZpbGUtcHJlZml4LW1hcC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdjYWVkOC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTUtUmV1c2UtZmRlYnVnLXByZWZpeC1tYXAtdG8tcmVwbGFjZS1mZmlsZS1wcmVmaXgtbWFwLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotRnJvbSAxNGI3OTY0MWZmNmIwMDA4YWVmN2ZiZjdhYTMwMGRhZWMxMWQxZTc4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotRGF0ZTogV2VkLCAxNiBNYXIgMjAxNiAwNTozOTo1OSAtMDQwMAotU3ViamVjdDogW1BBVENIXSBSZXVzZSAtZmRlYnVnLXByZWZpeC1tYXAgdG8gcmVwbGFjZSAtZmZpbGUtcHJlZml4LW1hcAotCi1UaGUgb2UtY29yZSBtYXkgdXNlIGV4dGVybmFsIHRvb2xjaGFpbiB0byBjb21waWxlLAotd2hpY2ggbWF5IG5vdCBzdXBwb3J0IC1mZmlsZS1wcmVmaXgtbWFwLgotCi1TaW5jZSB3ZSB1c2UgLWZkZWJ1Zy1wcmVmaXgtbWFwIHRvIGRvIHRoZSBzYW1lIHRoaW5nLAotc28gd2UgY291bGQgcmV1c2UgaXQgdG8gcmVwbGFjZSAtZmZpbGUtcHJlZml4LW1hcC4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlW29lLWNvcmUgc3BlY2lmaWNdCi0KLVNpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KLS0tLQotIGdjYy9vcHRzLWdsb2JhbC5jIHwgNCArKysrCi0gMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvZ2NjL29wdHMtZ2xvYmFsLmMgYi9nY2Mvb3B0cy1nbG9iYWwuYwotaW5kZXggYjYxYmRjZi4uNTFiYjE3NyAxMDA2NDQKLS0tLSBhL2djYy9vcHRzLWdsb2JhbC5jCi0rKysgYi9nY2Mvb3B0cy1nbG9iYWwuYwotQEAgLTUwLDYgKzUwLDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKLSAjaW5jbHVkZSAicnRsLmgiCi0gI2luY2x1ZGUgImRiZ2NudC5oIgotICNpbmNsdWRlICJkZWJ1Zy5oIgotKyNpbmNsdWRlICJmaWxlLW1hcC5oIgotICNpbmNsdWRlICJoYXNoLW1hcC5oIgotICNpbmNsdWRlICJwbHVnaW4tYXBpLmgiCi0gI2luY2x1ZGUgImlwYS1yZWYuaCIKLUBAIC0zNzgsNiArMzc5LDkgQEAgaGFuZGxlX2NvbW1vbl9kZWZlcnJlZF9vcHRpb25zICh2b2lkKQotIAotIAljYXNlIE9QVF9mZGVidWdfcHJlZml4X21hcF86Ci0gCSAgYWRkX2RlYnVnX3ByZWZpeF9tYXAgKG9wdC0+YXJnKTsKLSsKLSsJICAvKiBSZXVzZSAtZmRlYnVnLXByZWZpeC1tYXAgdG8gcmVwbGFjZSAtZmZpbGUtcHJlZml4LW1hcCAqLwotKwkgIGFkZF9maWxlX3ByZWZpeF9tYXAgKG9wdC0+YXJnKTsKLSAJICBicmVhazsKLSAKLSAJY2FzZSBPUFRfZmR1bXBfOgotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTYtRW5hYmxlLWxpYmMtcHJvdmlkZS1zc3AtYW5kLWdjY19jdl90YXJnZXRfZGxfaXRlcmF0ZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA1Ni1FbmFibGUtbGliYy1wcm92aWRlLXNzcC1hbmQtZ2NjX2N2X3RhcmdldF9kbF9pdGVyYXRlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzkxMzQyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvMDA1Ni1FbmFibGUtbGliYy1wcm92aWRlLXNzcC1hbmQtZ2NjX2N2X3RhcmdldF9kbF9pdGVyYXRlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotRnJvbSA1YzdiZDg1M2M4NzAzZjY1OTA0MDgzNzc4NzEyZWY2MjVjM2YzODE0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFN1biwgMjcgTWFyIDIwMTYgMjA6MzE6NTAgLTA3MDAKLVN1YmplY3Q6IFtQQVRDSCA1Ni81N10gRW5hYmxlIGxpYmMgcHJvdmlkZSBzc3AgYW5kCi0gZ2NjX2N2X3RhcmdldF9kbF9pdGVyYXRlX3BoZHIgZm9yIG11c2wKLQotICAgICAgICAqIGNvbmZpZ3VyZS5hYyAoZ2NjX2N2X2xpYmNfcHJvdmlkZXNfc3NwKTogQWRkICotKi1tdXNsKi4KLSAgICAgICAgKGdjY19jdl90YXJnZXRfZGxfaXRlcmF0ZV9waGRyKTogQWRkICotbGludXgtbXVzbCouCi0gICAgICAgICogY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0KLSBnY2MvY29uZmlndXJlICAgIHwgNyArKysrKysrCi0gZ2NjL2NvbmZpZ3VyZS5hYyB8IDcgKysrKysrKwotIDIgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKLWluZGV4IGZjYjA1ZTcuLjgxYTQ0OWMgMTAwNzU1Ci0tLS0gYS9nY2MvY29uZmlndXJlCi0rKysgYi9nY2MvY29uZmlndXJlCi1AQCAtMjc4MTQsNiArMjc4MTQsOSBAQCBpZiB0ZXN0ICIke2djY19jdl9saWJjX3Byb3ZpZGVzX3NzcCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gZWxzZQotICAgZ2NjX2N2X2xpYmNfcHJvdmlkZXNfc3NwPW5vCi0gICAgIGNhc2UgIiR0YXJnZXQiIGluCi0rICAgICAgICotKi1tdXNsKikKLSsgICAgICAgICMgQWxsIHZlcnNpb25zIG9mIG11c2wgcHJvdmlkZSBzdGFjayBwcm90ZWN0b3IKLSsgICAgICAgIGdjY19jdl9saWJjX3Byb3ZpZGVzX3NzcD15ZXM7OwotICAgICAgICAqLSotbGludXgqIHwgKi0qLWtmcmVlYnNkKi1nbnUgfCAqLSota25ldGJzZCotZ251KQotICAgICAgICMgZ2xpYmMgMi40IGFuZCBsYXRlciBwcm92aWRlcyBfX3N0YWNrX2Noa19mYWlsIGFuZAotICAgICAgICMgZWl0aGVyIF9fc3RhY2tfY2hrX2d1YXJkLCBvciBUTFMgYWNjZXNzIHRvIHN0YWNrIGd1YXJkIGNhbmFyeS4KLUBAIC0yNzg0Niw2ICsyNzg0OSw3IEBAIGZpCi0gCSAjIDxodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLzIwMDgtMTAvbXNnMDAxMzAuaHRtbD4pIGFuZCBmb3Igbm93Ci0gCSAjIHNpbXBseSBhc3NlcnQgdGhhdCBnbGliYyBkb2VzIHByb3ZpZGUgdGhpcywgd2hpY2ggaXMgdHJ1ZSBmb3IgYWxsCi0gCSAjIHJlYWxpc3RpY2FsbHkgdXNhYmxlIEdOVS9IdXJkIGNvbmZpZ3VyYXRpb25zLgotKwkgIyBBbGwgc3VwcG9ydGVkIHZlcnNpb25zIG9mIG11c2wgcHJvdmlkZSBpdCBhcyB3ZWxsCi0gCSBnY2NfY3ZfbGliY19wcm92aWRlc19zc3A9eWVzOzsKLSAgICAgICAgKi0qLWRhcndpbiogfCAqLSotZnJlZWJzZCopCi0gCSBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJfX3N0YWNrX2Noa19mYWlsIiAiYWNfY3ZfZnVuY19fX3N0YWNrX2Noa19mYWlsIgotQEAgLTI3OTQyLDYgKzI3OTQ2LDkgQEAgY2FzZSAiJHRhcmdldCIgaW4KLSAgICAgICBnY2NfY3ZfdGFyZ2V0X2RsX2l0ZXJhdGVfcGhkcj1ubwotICAgICBmaQotICAgICA7OwotKyAgKi1saW51eC1tdXNsKikKLSsgICAgZ2NjX2N2X3RhcmdldF9kbF9pdGVyYXRlX3BoZHI9eWVzCi0rICAgIDs7Ci0gZXNhYwotIAotIGlmIHRlc3QgeCRnY2NfY3ZfdGFyZ2V0X2RsX2l0ZXJhdGVfcGhkciA9IHh5ZXM7IHRoZW4KLWRpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYwotaW5kZXggOTIzYmM5YS4uYjA4ZTNkYyAxMDA2NDQKLS0tLSBhL2djYy9jb25maWd1cmUuYWMKLSsrKyBiL2djYy9jb25maWd1cmUuYWMKLUBAIC01MjkxLDYgKzUyOTEsOSBAQCBBQ19DQUNIRV9DSEVDSyhfX3N0YWNrX2Noa19mYWlsIGluIHRhcmdldCBDIGxpYnJhcnksCi0gICAgICAgZ2NjX2N2X2xpYmNfcHJvdmlkZXNfc3NwLAotICAgICAgIFtnY2NfY3ZfbGliY19wcm92aWRlc19zc3A9bm8KLSAgICAgY2FzZSAiJHRhcmdldCIgaW4KLSsgICAgICAgKi0qLW11c2wqKQotKyAgICAgICAgIyBBbGwgdmVyc2lvbnMgb2YgbXVzbCBwcm92aWRlIHN0YWNrIHByb3RlY3RvcgotKyAgICAgICAgZ2NjX2N2X2xpYmNfcHJvdmlkZXNfc3NwPXllczs7Ci0gICAgICAgICotKi1saW51eCogfCAqLSota2ZyZWVic2QqLWdudSB8ICotKi1rbmV0YnNkKi1nbnUpCi0gICAgICAgIyBnbGliYyAyLjQgYW5kIGxhdGVyIHByb3ZpZGVzIF9fc3RhY2tfY2hrX2ZhaWwgYW5kCi0gICAgICAgIyBlaXRoZXIgX19zdGFja19jaGtfZ3VhcmQsIG9yIFRMUyBhY2Nlc3MgdG8gc3RhY2sgZ3VhcmQgY2FuYXJ5LgotQEAgLTUzMTcsNiArNTMyMCw3IEBAIEFDX0NBQ0hFX0NIRUNLKF9fc3RhY2tfY2hrX2ZhaWwgaW4gdGFyZ2V0IEMgbGlicmFyeSwKLSAJICMgPGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MvMjAwOC0xMC9tc2cwMDEzMC5odG1sPikgYW5kIGZvciBub3cKLSAJICMgc2ltcGx5IGFzc2VydCB0aGF0IGdsaWJjIGRvZXMgcHJvdmlkZSB0aGlzLCB3aGljaCBpcyB0cnVlIGZvciBhbGwKLSAJICMgcmVhbGlzdGljYWxseSB1c2FibGUgR05VL0h1cmQgY29uZmlndXJhdGlvbnMuCi0rCSAjIEFsbCBzdXBwb3J0ZWQgdmVyc2lvbnMgb2YgbXVzbCBwcm92aWRlIGl0IGFzIHdlbGwKLSAJIGdjY19jdl9saWJjX3Byb3ZpZGVzX3NzcD15ZXM7OwotICAgICAgICAqLSotZGFyd2luKiB8ICotKi1mcmVlYnNkKikKLSAJIEFDX0NIRUNLX0ZVTkMoX19zdGFja19jaGtfZmFpbCxbZ2NjX2N2X2xpYmNfcHJvdmlkZXNfc3NwPXllc10sCi1AQCAtNTM5MCw2ICs1Mzk0LDkgQEAgY2FzZSAiJHRhcmdldCIgaW4KLSAgICAgICBnY2NfY3ZfdGFyZ2V0X2RsX2l0ZXJhdGVfcGhkcj1ubwotICAgICBmaQotICAgICA7OwotKyAgKi1saW51eC1tdXNsKikKLSsgICAgZ2NjX2N2X3RhcmdldF9kbF9pdGVyYXRlX3BoZHI9eWVzCi0rICAgIDs7Ci0gZXNhYwotIEdDQ19UQVJHRVRfVEVNUExBVEUoW1RBUkdFVF9ETF9JVEVSQVRFX1BIRFJdKQotIGlmIHRlc3QgeCRnY2NfY3ZfdGFyZ2V0X2RsX2l0ZXJhdGVfcGhkciA9IHh5ZXM7IHRoZW4KLS0tIAotMi43LjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDU3LXVud2luZC1maXgtZm9yLW11c2wucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTctdW53aW5kLWZpeC1mb3ItbXVzbC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE5MzU4Ny4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTctdW53aW5kLWZpeC1mb3ItbXVzbC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLUZyb20gYzVjMzNiZjg4MWEyYWVhMzU1MzEwZGQ5MDg3M2VkMzliYzI3MmIzYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IGt0a2FjaG92IDxrdGthY2hvdkAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQ+Ci1EYXRlOiBXZWQsIDIyIEFwciAyMDE1IDE0OjIwOjAxICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggNTcvNTddIHVud2luZCBmaXggZm9yIG11c2wKLQotT24gYmVoYWxmIG9mIHN6YWJvbGNzLm5hZ3lAYXJtLmNvbQotCi0yMDE1LTA0LTIyICBHcmVnb3IgUmljaGFyZHMgIDxncmVnb3IucmljaGFyZHNAdXdhdGVybG9vLmNhPgotCSAgICBTemFib2xjcyBOYWd5ICA8c3phYm9sY3MubmFneUBhcm0uY29tPgotCi0JKiB1bndpbmQtZHcyLWZkZS1kaXAuYyAoVVNFX1BUX0dOVV9FSF9GUkFNRSk6IERlZmluZSBpdCBvbgotCUxpbnV4IGlmIHRhcmdldCBwcm92aWRlcyBkbF9pdGVyYXRlX3BoZHIuCi0KLWdpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rQDIyMjMyOCAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi0gbGliZ2NjL3Vud2luZC1kdzItZmRlLWRpcC5jIHwgNiArKysrKysKLSAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9saWJnY2MvdW53aW5kLWR3Mi1mZGUtZGlwLmMgYi9saWJnY2MvdW53aW5kLWR3Mi1mZGUtZGlwLmMKLWluZGV4IGUxZTU2NmIuLjEzN2RjZWQgMTAwNjQ0Ci0tLS0gYS9saWJnY2MvdW53aW5kLWR3Mi1mZGUtZGlwLmMKLSsrKyBiL2xpYmdjYy91bndpbmQtZHcyLWZkZS1kaXAuYwotQEAgLTU5LDYgKzU5LDEyIEBACi0gCi0gI2lmICFkZWZpbmVkKGluaGliaXRfbGliYykgJiYgZGVmaW5lZChIQVZFX0xEX0VIX0ZSQU1FX0hEUikgXAotICAgICAmJiBkZWZpbmVkKFRBUkdFVF9ETF9JVEVSQVRFX1BIRFIpIFwKLSsgICAgJiYgZGVmaW5lZChfX2xpbnV4X18pCi0rIyBkZWZpbmUgVVNFX1BUX0dOVV9FSF9GUkFNRQotKyNlbmRpZgotKwotKyNpZiAhZGVmaW5lZChpbmhpYml0X2xpYmMpICYmIGRlZmluZWQoSEFWRV9MRF9FSF9GUkFNRV9IRFIpIFwKLSsgICAgJiYgZGVmaW5lZChUQVJHRVRfRExfSVRFUkFURV9QSERSKSBcCi0gICAgICYmIChkZWZpbmVkKF9fRHJhZ29uRmx5X18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pKQotICMgZGVmaW5lIEVsZlcgX19FbGZOCi0gIyBkZWZpbmUgVVNFX1BUX0dOVV9FSF9GUkFNRQotLS0gCi0yLjcuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTgtZmRlYnVnLXByZWZpeC1tYXAtc3VwcG9ydC10by1yZW1hcC1yZWxhdGl2ZS1wYXRoLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDU4LWZkZWJ1Zy1wcmVmaXgtbWFwLXN1cHBvcnQtdG8tcmVtYXAtcmVsYXRpdmUtcGF0aC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI5MWZkYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTgtZmRlYnVnLXByZWZpeC1tYXAtc3VwcG9ydC10by1yZW1hcC1yZWxhdGl2ZS1wYXRoLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotRnJvbSAyODlhZDI5NjlhNTk2NmM2MDNiZjY5MjhjZTQ0MmRiNzRjNGNiYjI1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotRGF0ZTogVGh1LCAyNCBNYXIgMjAxNiAxMToyMzoxNCAtMDQwMAotU3ViamVjdDogW1BBVENIXSBnY2MvZmluYWwuYzogLWZkZWJ1Zy1wcmVmaXgtbWFwIHN1cHBvcnQgdG8gcmVtYXAgc291cmNlcyB3aXRoCi0gcmVsYXRpdmUgcGF0aAotCi1QUiBvdGhlci83MDQyOAotKiBmaW5hbC5jIChyZW1hcF9kZWJ1Z19maWxlbmFtZSk6IFVzZSBscmVhbHBhdGggdG8gdHJhbnNsYXRlCi1yZWxhdGl2ZSBwYXRoIGJlZm9yZSByZW1hcHBpbmcKLQotaHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NzA0MjgKLVVwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtnY2MtcGF0Y2hlc0BnY2MuZ251Lm9yZ10KLQotU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotLS0tCi1kaWZmIC0tZ2l0IGEvZ2NjL2ZpbmFsLmMgYi9nY2MvZmluYWwuYwotaW5kZXggNTVjZjUwOS4uYzM1OTRjMiAxMDA2NDQKLS0tLSBhL2djYy9maW5hbC5jCi0rKysgYi9nY2MvZmluYWwuYwotQEAgLTE1NTQsMTYgKzE1NTQsMjUgQEAgcmVtYXBfZGVidWdfZmlsZW5hbWUgKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQotICAgY29uc3QgY2hhciAqbmFtZTsKLSAgIHNpemVfdCBuYW1lX2xlbjsKLSAKLSsgIC8qIFN1cHBvcnQgdG8gcmVtYXAgZmlsZW5hbWUgd2l0aCByZWxhdGl2ZSBwYXRoICAqLwotKyAgY2hhciAqcmVhbHBhdGggPSBscmVhbHBhdGggKGZpbGVuYW1lKTsKLSsgIGlmIChyZWFscGF0aCA9PSBOVUxMKQotKyAgICByZXR1cm4gZmlsZW5hbWU7Ci0rCi0gICBmb3IgKG1hcCA9IGRlYnVnX3ByZWZpeF9tYXBzOyBtYXA7IG1hcCA9IG1hcC0+bmV4dCkKLS0gICAgaWYgKGZpbGVuYW1lX25jbXAgKGZpbGVuYW1lLCBtYXAtPm9sZF9wcmVmaXgsIG1hcC0+b2xkX2xlbikgPT0gMCkKLSsgICAgaWYgKGZpbGVuYW1lX25jbXAgKHJlYWxwYXRoLCBtYXAtPm9sZF9wcmVmaXgsIG1hcC0+b2xkX2xlbikgPT0gMCkKLSAgICAgICBicmVhazsKLSAgIGlmICghbWFwKQotLSAgICByZXR1cm4gZmlsZW5hbWU7Ci0tICBuYW1lID0gZmlsZW5hbWUgKyBtYXAtPm9sZF9sZW47Ci0rICAgIHsKLSsgICAgICBmcmVlIChyZWFscGF0aCk7Ci0rICAgICAgcmV0dXJuIGZpbGVuYW1lOwotKyAgICB9Ci0rICBuYW1lID0gcmVhbHBhdGggKyBtYXAtPm9sZF9sZW47Ci0gICBuYW1lX2xlbiA9IHN0cmxlbiAobmFtZSkgKyAxOwotICAgcyA9IChjaGFyICopIGFsbG9jYSAobmFtZV9sZW4gKyBtYXAtPm5ld19sZW4pOwotICAgbWVtY3B5IChzLCBtYXAtPm5ld19wcmVmaXgsIG1hcC0+bmV3X2xlbik7Ci0gICBtZW1jcHkgKHMgKyBtYXAtPm5ld19sZW4sIG5hbWUsIG5hbWVfbGVuKTsKLSsgIGZyZWUgKHJlYWxwYXRoKTsKLSAgIHJldHVybiBnZ2Nfc3RyZHVwIChzKTsKLSB9Ci0gDAotLS0gCi0yLjcuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTktbGliZ2NjLXVzZS1sZGZsYWdzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC8wMDU5LWxpYmdjYy11c2UtbGRmbGFncy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI1YjcyYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS40LzAwNTktbGliZ2NjLXVzZS1sZGZsYWdzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotTGluayBsaWJnY2MgdXNpbmcgTERGTEFHUywgbm90IGp1c3QgU0hMSUJfTERGTEFHUwotCi1TaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLS0tLSBnY2MtNS4zLjAub3JpZy9saWJnY2MvY29uZmlnL3Qtc2xpYmdjYwotKysrIGdjYy01LjMuMC9saWJnY2MvY29uZmlnL3Qtc2xpYmdjYwotQEAgLTMyLDcgKzMyLDcgQEAgU0hMSUJfSU5TVEFMTF9TT0xJTksgPSAkKExOX1MpICQoU0hMSUJfUwotIAkkKERFU1RESVIpJChzbGliZGlyKSQoU0hMSUJfU0xJQkRJUl9RVUFMKS8kKFNITElCX1NPTElOSykKLSAKLSBTSExJQl9MSU5LID0gJChDQykgJChMSUJHQ0MyX0NGTEFHUykgLXNoYXJlZCAtbm9kZWZhdWx0bGlicyBcCi0tCSQoU0hMSUJfTERGTEFHUykgXAotKwkkKExERkxBR1MpICQoU0hMSUJfTERGTEFHUykgXAotIAktbyAkKFNITElCX0RJUikvJChTSExJQl9TT05BTUUpLnRtcCBAbXVsdGlsaWJfZmxhZ3NAIFwKLSAJJChTSExJQl9PQkpTKSAkKFNITElCX0xDKSAmJiBcCi0gCXJtIC1mICQoU0hMSUJfRElSKS8kKFNITElCX1NPTElOSykgJiYgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC9DVkUtMjAxNi02MTMxLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuNC9DVkUtMjAxNi02MTMxLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODUyNGMzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjQvQ1ZFLTIwMTYtNjEzMS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI1MSArMCwwIEBACi1Gcm9tIGIzZjZiMzIxNjVkM2Y0MzdiZDBhYzYyNjljM2M0OTliNjhlY2YwMzYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBsYXcgPGxhd0AxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQ+Ci1EYXRlOiBUaHUsIDQgQXVnIDIwMTYgMTY6NTM6MTggKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gRml4IGZvciBQUjcxNjk2IGluIExpYmliZXJ0eSBEZW1hbmdsZXIKLU1JTUUtVmVyc2lvbjogMS4wCi1Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKLUNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKLQotW0JaICM3MTY5Nl0gLS0gaHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NzE2OTYKLQotMjAxNi0wOC0wNCAgTWFyY2VsIELDtmhtZSAgPGJvZWhtZS5tYXJjZWxAZ21haWwuY29tPgotCi0JUFIgYysrLzcxNjk2Ci0JKiBjcGx1cy1kZW0uYzogUHJldmVudCBpbmZpbml0ZSByZWN1cnNpb24gd2hlbiB0aGVyZSBpcyBhIGN5Y2xlCi0JaW4gdGhlIHJlZmVyZW5jaW5nIG9mIHJlbWVtYmVyZWQgbWFuZ2xlZCB0eXBlcy4KLQkod29ya19zdHVmZik6IE5ldyBzdGFjayB0byBrZWVwIHRyYWNrIG9mIHRoZSByZW1lbWJlcmVkIG1hbmdsZWQKLQl0eXBlcyB0aGF0IGFyZSBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLgotCShwdXNoX3Byb2Nlc3NlZF90eXBlKTogTmV3IG1ldGhvZCB0byBwdXNoIGN1cnJlbnRseSBwcm9jZXNzZWQKLQlyZW1lbWJlcmVkIHR5cGUgb250byB0aGUgc3RhY2suCi0JKHBvcF9wcm9jZXNzZWRfdHlwZSk6IE5ldyBtZXRob2QgdG8gcG9wIGN1cnJlbnRseSBwcm9jZXNzZWQKLQlyZW1lbWJlcmVkIHR5cGUgZnJvbSB0aGUgc3RhY2suCi0JKHdvcmtfc3R1ZmZfY29weV90b19mcm9tKTogQ29weSB2YWx1ZXMgb2YgbmV3IHZhcmlhYmxlcy4KLQkoZGVsZXRlX25vbl9CX0tfd29ya19zdHVmZik6IEZyZWUgc3RhY2sgbWVtb3J5LgotCShkZW1hbmdsZV9hcmdzKTogUHVzaC9Qb3AgY3VycmVudGx5IHByb2Nlc3NlZCByZW1lbWJlcmVkIHR5cGUuCi0JKGRvX3R5cGUpOiBEbyBub3QgZGVtYW5nbGUgYSBjeWNsaWMgcmVmZXJlbmNlIGFuZCBwdXNoL3BvcAotCXJlZmVyZW5jZWQgcmVtZW1iZXJlZCB0eXBlLgotCi1jaGVycnktcGlja2VkIGZyb20gY29tbWl0IG9mCi1naXQtc3ZuLWlkOiBzdm4rc3NoOi8vZ2NjLmdudS5vcmcvc3ZuL2djYy90cnVua0AyMzkxNDMgMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0Ci0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW21hc3Rlcl0KLUNWRTogQ1ZFLTIwMTYtNjEzMQotU2lnbmVkLW9mZi1ieTogWXVhbmppZSBIdWFuZyA8eXVhbmppZS5odWFuZ0B3aW5kcml2ZXIuY29tPgotLS0tCi0gbGliaWJlcnR5L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICB8IDE3ICsrKysrKysrCi0gbGliaWJlcnR5L2NwbHVzLWRlbS5jICAgICAgICAgICAgICAgICB8IDc4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCi0gbGliaWJlcnR5L3Rlc3RzdWl0ZS9kZW1hbmdsZS1leHBlY3RlZCB8IDE4ICsrKysrKysrCi0gMyBmaWxlcyBjaGFuZ2VkLCAxMDggaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2xpYmliZXJ0eS9DaGFuZ2VMb2cgYi9saWJpYmVydHkvQ2hhbmdlTG9nCi1pbmRleCA5ODU5YWQzLi43OTM5NDgwIDEwMDY0NAotLS0tIGEvbGliaWJlcnR5L0NoYW5nZUxvZwotKysrIGIvbGliaWJlcnR5L0NoYW5nZUxvZwotQEAgLTEsMyArMSwyMCBAQAotKzIwMTYtMDgtMDQgIE1hcmNlbCBCw7ZobWUgIDxib2VobWUubWFyY2VsQGdtYWlsLmNvbT4KLSsKLSsJUFIgYysrLzcxNjk2Ci0rCSogY3BsdXMtZGVtLmM6IFByZXZlbnQgaW5maW5pdGUgcmVjdXJzaW9uIHdoZW4gdGhlcmUgaXMgYSBjeWNsZQotKwlpbiB0aGUgcmVmZXJlbmNpbmcgb2YgcmVtZW1iZXJlZCBtYW5nbGVkIHR5cGVzLgotKwkod29ya19zdHVmZik6IE5ldyBzdGFjayB0byBrZWVwIHRyYWNrIG9mIHRoZSByZW1lbWJlcmVkIG1hbmdsZWQKLSsJdHlwZXMgdGhhdCBhcmUgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC4KLSsJKHB1c2hfcHJvY2Vzc2VkX3R5cGUpOiBOZXcgbWV0aG9kIHRvIHB1c2ggY3VycmVudGx5IHByb2Nlc3NlZAotKwlyZW1lbWJlcmVkIHR5cGUgb250byB0aGUgc3RhY2suCi0rCShwb3BfcHJvY2Vzc2VkX3R5cGUpOiBOZXcgbWV0aG9kIHRvIHBvcCBjdXJyZW50bHkgcHJvY2Vzc2VkCi0rCXJlbWVtYmVyZWQgdHlwZSBmcm9tIHRoZSBzdGFjay4KLSsJKHdvcmtfc3R1ZmZfY29weV90b19mcm9tKTogQ29weSB2YWx1ZXMgb2YgbmV3IHZhcmlhYmxlcy4KLSsJKGRlbGV0ZV9ub25fQl9LX3dvcmtfc3R1ZmYpOiBGcmVlIHN0YWNrIG1lbW9yeS4KLSsJKGRlbWFuZ2xlX2FyZ3MpOiBQdXNoL1BvcCBjdXJyZW50bHkgcHJvY2Vzc2VkIHJlbWVtYmVyZWQgdHlwZS4KLSsJKGRvX3R5cGUpOiBEbyBub3QgZGVtYW5nbGUgYSBjeWNsaWMgcmVmZXJlbmNlIGFuZCBwdXNoL3BvcAotKwlyZWZlcmVuY2VkIHJlbWVtYmVyZWQgdHlwZS4KLSsKLSAyMDE2LTA2LTAzICBSZWxlYXNlIE1hbmFnZXIKLSAKLSAJKiBHQ0MgNS40LjAgcmVsZWFzZWQuCi1kaWZmIC0tZ2l0IGEvbGliaWJlcnR5L2NwbHVzLWRlbS5jIGIvbGliaWJlcnR5L2NwbHVzLWRlbS5jCi1pbmRleCA3NTE0ZTU3Li5mMjFlNjMwIDEwMDY0NAotLS0tIGEvbGliaWJlcnR5L2NwbHVzLWRlbS5jCi0rKysgYi9saWJpYmVydHkvY3BsdXMtZGVtLmMKLUBAIC0xNDQsNiArMTQ0LDkgQEAgc3RydWN0IHdvcmtfc3R1ZmYKLSAgIHN0cmluZyogcHJldmlvdXNfYXJndW1lbnQ7IC8qIFRoZSBsYXN0IGZ1bmN0aW9uIGFyZ3VtZW50IGRlbWFuZ2xlZC4gICovCi0gICBpbnQgbnJlcGVhdHM7ICAgICAgICAgLyogVGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHByZXZpb3VzCi0gCQkJICAgYXJndW1lbnQuICAqLwotKyAgaW50ICpwcm9jdHlwZXZlYzsgICAgIC8qIEluZGljZXMgb2YgY3VycmVudGx5IHByb2Nlc3NlZCByZW1lbWJlcmVkIHR5cGV2ZWNzLiAgKi8KLSsgIGludCBwcm9jdHlwZXZlY19zaXplOwotKyAgaW50IG5wcm9jdHlwZXM7Ci0gfTsKLSAKLSAjZGVmaW5lIFBSSU5UX0FOU0lfUVVBTElGSUVSUyAod29yayAtPiBvcHRpb25zICYgRE1HTF9BTlNJKQotQEAgLTQzNSw2ICs0MzgsMTAgQEAgaXRlcmF0ZV9kZW1hbmdsZV9mdW5jdGlvbiAoc3RydWN0IHdvcmtfc3R1ZmYgKiwKLSAKLSBzdGF0aWMgdm9pZCByZW1lbWJlcl90eXBlIChzdHJ1Y3Qgd29ya19zdHVmZiAqLCBjb25zdCBjaGFyICosIGludCk7Ci0gCi0rc3RhdGljIHZvaWQgcHVzaF9wcm9jZXNzZWRfdHlwZSAoc3RydWN0IHdvcmtfc3R1ZmYgKiwgaW50KTsKLSsKLStzdGF0aWMgdm9pZCBwb3BfcHJvY2Vzc2VkX3R5cGUgKHN0cnVjdCB3b3JrX3N0dWZmICopOwotKwotIHN0YXRpYyB2b2lkIHJlbWVtYmVyX0J0eXBlIChzdHJ1Y3Qgd29ya19zdHVmZiAqLCBjb25zdCBjaGFyICosIGludCwgaW50KTsKLSAKLSBzdGF0aWMgaW50IHJlZ2lzdGVyX0J0eXBlIChzdHJ1Y3Qgd29ya19zdHVmZiAqKTsKLUBAIC0xMzAxLDYgKzEzMDgsMTAgQEAgd29ya19zdHVmZl9jb3B5X3RvX2Zyb20gKHN0cnVjdCB3b3JrX3N0dWZmICp0bywgc3RydWN0IHdvcmtfc3R1ZmYgKmZyb20pCi0gICAgICAgbWVtY3B5ICh0by0+YnR5cGV2ZWNbaV0sIGZyb20tPmJ0eXBldmVjW2ldLCBsZW4pOwotICAgICB9Ci0gCi0rICBpZiAoZnJvbS0+cHJvY3R5cGV2ZWMpCi0rICAgIHRvLT5wcm9jdHlwZXZlYyA9Ci0rICAgICAgWERVUFZFQyAoaW50LCBmcm9tLT5wcm9jdHlwZXZlYywgZnJvbS0+cHJvY3R5cGV2ZWNfc2l6ZSk7Ci0rCi0gICBpZiAoZnJvbS0+bnRtcGxfYXJncykKLSAgICAgdG8tPnRtcGxfYXJndmVjID0gWE5FV1ZFQyAoY2hhciAqLCBmcm9tLT5udG1wbF9hcmdzKTsKLSAKLUBAIC0xMzI5LDExICsxMzQwLDE3IEBAIGRlbGV0ZV9ub25fQl9LX3dvcmtfc3R1ZmYgKHN0cnVjdCB3b3JrX3N0dWZmICp3b3JrKQotICAgLyogRGlzY2FyZCB0aGUgcmVtZW1iZXJlZCB0eXBlcywgaWYgYW55LiAgKi8KLSAKLSAgIGZvcmdldF90eXBlcyAod29yayk7Ci0tICBpZiAod29yayAtPiB0eXBldmVjICE9IE5VTEwpCi0rICBpZiAod29yay0+dHlwZXZlYyAhPSBOVUxMKQotICAgICB7Ci0tICAgICAgZnJlZSAoKGNoYXIgKikgd29yayAtPiB0eXBldmVjKTsKLS0gICAgICB3b3JrIC0+IHR5cGV2ZWMgPSBOVUxMOwotLSAgICAgIHdvcmsgLT4gdHlwZXZlY19zaXplID0gMDsKLSsgICAgICBmcmVlICgoY2hhciAqKSB3b3JrLT50eXBldmVjKTsKLSsgICAgICB3b3JrLT50eXBldmVjID0gTlVMTDsKLSsgICAgICB3b3JrLT50eXBldmVjX3NpemUgPSAwOwotKyAgICB9Ci0rICBpZiAod29yay0+cHJvY3R5cGV2ZWMgIT0gTlVMTCkKLSsgICAgewotKyAgICAgIGZyZWUgKHdvcmstPnByb2N0eXBldmVjKTsKLSsgICAgICB3b3JrLT5wcm9jdHlwZXZlYyA9IE5VTEw7Ci0rICAgICAgd29yay0+cHJvY3R5cGV2ZWNfc2l6ZSA9IDA7Ci0gICAgIH0KLSAgIGlmICh3b3JrLT50bXBsX2FyZ3ZlYykKLSAgICAgewotQEAgLTM1NTIsNiArMzU2OSw4IEBAIHN0YXRpYyBpbnQKLSBkb190eXBlIChzdHJ1Y3Qgd29ya19zdHVmZiAqd29yaywgY29uc3QgY2hhciAqKm1hbmdsZWQsIHN0cmluZyAqcmVzdWx0KQotIHsKLSAgIGludCBuOwotKyAgaW50IGk7Ci0rICBpbnQgaXNfcHJvY3R5cGV2ZWM7Ci0gICBpbnQgZG9uZTsKLSAgIGludCBzdWNjZXNzOwotICAgc3RyaW5nIGRlY2w7Ci1AQCAtMzU2NCw2ICszNTgzLDcgQEAgZG9fdHlwZSAoc3RydWN0IHdvcmtfc3R1ZmYgKndvcmssIGNvbnN0IGNoYXIgKiptYW5nbGVkLCBzdHJpbmcgKnJlc3VsdCkKLSAKLSAgIGRvbmUgPSAwOwotICAgc3VjY2VzcyA9IDE7Ci0rICBpc19wcm9jdHlwZXZlYyA9IDA7Ci0gICB3aGlsZSAoc3VjY2VzcyAmJiAhZG9uZSkKLSAgICAgewotICAgICAgIGludCBtZW1iZXI7Ci1AQCAtMzYxNiw4ICszNjM2LDE1IEBAIGRvX3R5cGUgKHN0cnVjdCB3b3JrX3N0dWZmICp3b3JrLCBjb25zdCBjaGFyICoqbWFuZ2xlZCwgc3RyaW5nICpyZXN1bHQpCi0gCSAgICAgIHN1Y2Nlc3MgPSAwOwotIAkgICAgfQotIAkgIGVsc2UKLSsJICAgIGZvciAoaSA9IDA7IGkgPCB3b3JrLT5ucHJvY3R5cGVzOyBpKyspCi0rCSAgICAgIGlmICh3b3JrIC0+IHByb2N0eXBldmVjIFtpXSA9PSBuKQotKwkgICAgICAgIHN1Y2Nlc3MgPSAwOwotKwotKwkgIGlmIChzdWNjZXNzKQotIAkgICAgewotLQkgICAgICByZW1lbWJlcmVkX3R5cGUgPSB3b3JrIC0+IHR5cGV2ZWNbbl07Ci0rCSAgICAgIGlzX3Byb2N0eXBldmVjID0gMTsKLSsJICAgICAgcHVzaF9wcm9jZXNzZWRfdHlwZSAod29yaywgbik7Ci0rCSAgICAgIHJlbWVtYmVyZWRfdHlwZSA9IHdvcmstPnR5cGV2ZWNbbl07Ci0gCSAgICAgIG1hbmdsZWQgPSAmcmVtZW1iZXJlZF90eXBlOwotIAkgICAgfQotIAkgIGJyZWFrOwotQEAgLTM4NDAsNiArMzg2Nyw5IEBAIGRvX3R5cGUgKHN0cnVjdCB3b3JrX3N0dWZmICp3b3JrLCBjb25zdCBjaGFyICoqbWFuZ2xlZCwgc3RyaW5nICpyZXN1bHQpCi0gICAgIHN0cmluZ19kZWxldGUgKHJlc3VsdCk7Ci0gICBzdHJpbmdfZGVsZXRlICgmZGVjbCk7Ci0gCi0rICBpZiAoaXNfcHJvY3R5cGV2ZWMpCi0rICAgIHBvcF9wcm9jZXNzZWRfdHlwZSAod29yayk7Ci0rCi0gICBpZiAoc3VjY2VzcykKLSAgICAgLyogQXNzdW1lIGFuIGludGVncmFsIHR5cGUsIGlmIHdlJ3JlIG5vdCBzdXJlLiAgKi8KLSAgICAgcmV0dXJuIChpbnQpICgodGsgPT0gdGtfbm9uZSkgPyB0a19pbnRlZ3JhbCA6IHRrKTsKLUBAIC00MjUyLDYgKzQyODIsNDEgQEAgZG9fYXJnIChzdHJ1Y3Qgd29ya19zdHVmZiAqd29yaywgY29uc3QgY2hhciAqKm1hbmdsZWQsIHN0cmluZyAqcmVzdWx0KQotIH0KLSAKLSBzdGF0aWMgdm9pZAotK3B1c2hfcHJvY2Vzc2VkX3R5cGUgKHN0cnVjdCB3b3JrX3N0dWZmICp3b3JrLCBpbnQgdHlwZXZlY19pbmRleCkKLSt7Ci0rICBpZiAod29yay0+bnByb2N0eXBlcyA+PSB3b3JrLT5wcm9jdHlwZXZlY19zaXplKQotKyAgICB7Ci0rICAgICAgaWYgKCF3b3JrLT5wcm9jdHlwZXZlY19zaXplKQotKwl7Ci0rCSAgd29yay0+cHJvY3R5cGV2ZWNfc2l6ZSA9IDQ7Ci0rCSAgd29yay0+cHJvY3R5cGV2ZWMgPSBYTkVXVkVDIChpbnQsIHdvcmstPnByb2N0eXBldmVjX3NpemUpOwotKwl9Ci0rICAgICAgZWxzZQotKwl7Ci0rCSAgaWYgKHdvcmstPnByb2N0eXBldmVjX3NpemUgPCAxNikKLSsJICAgIC8qIERvdWJsZSB3aGVuIHNtYWxsLiAgKi8KLSsJICAgIHdvcmstPnByb2N0eXBldmVjX3NpemUgKj0gMjsKLSsJICBlbHNlCi0rCSAgICB7Ci0rCSAgICAgIC8qIEdyb3cgc2xvd2VyIHdoZW4gbGFyZ2UuICAqLwotKwkgICAgICBpZiAod29yay0+cHJvY3R5cGV2ZWNfc2l6ZSA+IChJTlRfTUFYIC8gMykgKiAyKQotKyAgICAgICAgICAgICAgICB4bWFsbG9jX2ZhaWxlZCAoSU5UX01BWCk7Ci0rICAgICAgICAgICAgICB3b3JrLT5wcm9jdHlwZXZlY19zaXplID0gKHdvcmstPnByb2N0eXBldmVjX3NpemUgKiAzIC8gMik7Ci0rCSAgICB9Ci0rICAgICAgICAgIHdvcmstPnByb2N0eXBldmVjCi0rICAgICAgICAgICAgPSBYUkVTSVpFVkVDIChpbnQsIHdvcmstPnByb2N0eXBldmVjLCB3b3JrLT5wcm9jdHlwZXZlY19zaXplKTsKLSsJfQotKyAgICB9Ci0rICAgIHdvcmstPnByb2N0eXBldmVjIFt3b3JrLT5ucHJvY3R5cGVzKytdID0gdHlwZXZlY19pbmRleDsKLSt9Ci0rCi0rc3RhdGljIHZvaWQKLStwb3BfcHJvY2Vzc2VkX3R5cGUgKHN0cnVjdCB3b3JrX3N0dWZmICp3b3JrKQotK3sKLSsgIHdvcmstPm5wcm9jdHlwZXMtLTsKLSt9Ci0rCi0rc3RhdGljIHZvaWQKLSByZW1lbWJlcl90eXBlIChzdHJ1Y3Qgd29ya19zdHVmZiAqd29yaywgY29uc3QgY2hhciAqc3RhcnQsIGludCBsZW4pCi0gewotICAgY2hhciAqdGVtOwotQEAgLTQ1MTUsMTAgKzQ1ODAsMTMgQEAgZGVtYW5nbGVfYXJncyAoc3RydWN0IHdvcmtfc3R1ZmYgKndvcmssIGNvbnN0IGNoYXIgKiptYW5nbGVkLAotIAkJewotIAkJICBzdHJpbmdfYXBwZW5kIChkZWNscCwgIiwgIik7Ci0gCQl9Ci0rCSAgICAgIHB1c2hfcHJvY2Vzc2VkX3R5cGUgKHdvcmssIHQpOwotIAkgICAgICBpZiAoIWRvX2FyZyAod29yaywgJnRlbSwgJmFyZykpCi0gCQl7Ci0rCQkgIHBvcF9wcm9jZXNzZWRfdHlwZSAod29yayk7Ci0gCQkgIHJldHVybiAoMCk7Ci0gCQl9Ci0rCSAgICAgIHBvcF9wcm9jZXNzZWRfdHlwZSAod29yayk7Ci0gCSAgICAgIGlmIChQUklOVF9BUkdfVFlQRVMpCi0gCQl7Ci0gCQkgIHN0cmluZ19hcHBlbmRzIChkZWNscCwgJmFyZyk7Ci1kaWZmIC0tZ2l0IGEvbGliaWJlcnR5L3Rlc3RzdWl0ZS9kZW1hbmdsZS1leHBlY3RlZCBiL2xpYmliZXJ0eS90ZXN0c3VpdGUvZGVtYW5nbGUtZXhwZWN0ZWQKLWluZGV4IDFkOGI3NzEuLmQ2OTBiMjMgMTAwNjQ0Ci0tLS0gYS9saWJpYmVydHkvdGVzdHN1aXRlL2RlbWFuZ2xlLWV4cGVjdGVkCi0rKysgYi9saWJpYmVydHkvdGVzdHN1aXRlL2RlbWFuZ2xlLWV4cGVjdGVkCi1AQCAtNDQyOSwzICs0NDI5LDIxIEBAIF9fdnRfOTAwMDAwMDAwMDBjYWZlYmFiZQotIAotIF9aODA4MDAwMDAwMDAwMDAwMDAwMDAwMDAKLSBfWjgwODAwMDAwMDAwMDAwMDAwMDAwMDAwCi0rIwotKyMgVGVzdHMgd3JpdGUgYWNjZXNzIHZpb2xhdGlvbiBQUjcwOTI2Ci0rCi0rMF9fT3QybTAyUjVUMDAwMDUwMDAwMAotKzBfX090Mm0wMlI1VDAwMDA1MDAwMDAKLSsjCi0rCi0rMF9fR1Q1MDAwMDAwMDAwMF8KLSswX19HVDUwMDAwMDAwMDAwXwotKyMKLSsKLStfX3QybTA1QjUwMDAwMDAwMDAwMDAwMDAwMF8KLStfX3QybTA1QjUwMDAwMDAwMDAwMDAwMDAwMF8KLSsjCi0rIyBUZXN0cyBzdGFjayBvdmVyZmxvdyBQUjcxNjk2Ci0rCi0rX18xMCUwX19TNF8wVDBUMAotKyUwPD46OiUwKCUwPD4pCi0tLSAKLTIuOS4zCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjMuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMy5pbmMKaW5kZXggNWM4MWEzMy4uZTU2OWUwMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMy5pbmMKQEAgLTMyLDEyICszMiw2IEBACiBTUkNfVVJJID0gIlwKICAgICAgICAgICAgJHtCQVNFVVJJfSBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMi11Y2xpYmMtY29uZi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDA4LW1pc3NpbmctZXhlY2luZm9faC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDEwLWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoIFwKQEAgLTcxLDcgKzY1LDcgQEAKICAgICAgICAgICAgZmlsZTovLzAwMzgtU2VhcmNoLXRhcmdldC1zeXNyb290LWdjYy12ZXJzaW9uLXNwZWNpZmljLWRpcnMtd2l0aC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDM5LUZpeC12YXJpb3VzLV9GT1JfQlVJTEQtYW5kLXJlbGF0ZWQtdmFyaWFibGVzLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwNDAtbmlvczItRGVmaW5lLU1VU0xfRFlOQU1JQ19MSU5LRVIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDA0MS1BZGQtc3NwX25vbnNoYXJlZC10by1saW5rLWNvbW1hbmRsaW5lLWZvci1tdXNsLXRhcmdlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNDEtc3NwX25vbnNoYXJlZC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDQyLWdjYy1saWJjcHAtc3VwcG9ydC1mZmlsZS1wcmVmaXgtbWFwLW9sZC1uZXcucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDA0My1SZXVzZS1mZGVidWctcHJlZml4LW1hcC10by1yZXBsYWNlLWZmaWxlLXByZWZpeC1tYXAucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDA0NC1nY2MtZmluYWwuYy1mZGVidWctcHJlZml4LW1hcC1zdXBwb3J0LXRvLXJlbWFwLXNvdXJjLnBhdGNoIFwKQEAgLTgxLDYgKzc1LDcgQEAKICAgICAgICAgICAgZmlsZTovLzAwNDgtc3luYy1nY2Mtc3RkZGVmLmgtd2l0aC1tdXNsLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwNTRfYWxsX25vcGllLWFsbC1mbGFncy5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDU1LXVud2luZF9oLWdsaWJjMjYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA1Ni1MUkEtUFI3MDkwNC1yZWxheC10aGUtcmVzdHJpY3Rpb24tb24tc3VicmVnLXJlbG9hZC1mLnBhdGNoIFwKICAgICAgICAgICAgJHtCQUNLUE9SVFN9IFwKICIKIEJBQ0tQT1JUUyA9ICJcCkBAIC0xMjksOCArMTI0LDYgQEAKICAgICBnY2NfY3ZfbGliY19wcm92aWRlc19zc3A9eWVzIFwKICIKIAotRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS1kaXNhYmxlLWRlY2ltYWwtZmxvYXQgIgotCiBFWFRSQV9PRUNPTkZfUEFUSFMgPSAiXAogICAgIC0td2l0aC1neHgtaW5jbHVkZS1kaXI9L25vdC9leGlzdHt0YXJnZXRfaW5jbHVkZWRpcn0vYysrLyR7QklOVn0gXAogICAgIC0td2l0aC1zeXNyb290PS9ub3QvZXhpc3QgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMy8wMDAyLXVjbGliYy1jb25mLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMy8wMDAyLXVjbGliYy1jb25mLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDI4NGVmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjMvMDAwMi11Y2xpYmMtY29uZi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLUZyb20gNGVmYzVhMjU4YzgxMjg3NTc0MzY0N2Q3NTZmNzVjOTNjNGQ1MTRhNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjM4OjI1ICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMDIvNDZdIHVjbGliYy1jb25mCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoIHwgNCArKysrCi0gbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcgICAgIHwgNCArKy0tCi0gMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2ggYi9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKLWluZGV4IDYwYjA0OTcuLjZkYzdlYWQgMTAwNzU1Ci0tLS0gYS9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKLSsrKyBiL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAotQEAgLTEwNiw2ICsxMDYsMTAgQEAgaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCAtYSAkSF9SRUFMX1RBUkdFVCA9IGk2ODYtcGMtbGludXgtZ251IF0KLSAgdGhlbgotICAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKLSAgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCi0rZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIC1hICRIX1JFQUxfVEFSR0VUID0gaTY4Ni1wYy1saW51eC11Y2xpYmMgXQotKyB0aGVuCi0rICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQotKyAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKLSBlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgXSA7IHRoZW4KLSAgIG1ha2UgYm9vdHN0cmFwIHx8IGV4aXQgMQotICAgbWFrZSBpbnN0YWxsIHx8IGV4aXQgMQotZGlmZiAtLWdpdCBhL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnIGIvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKLWluZGV4IGQzMTg5NTcuLmRmNTU5NTAgMTAwNzU1Ci0tLS0gYS9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZwotKysrIGIvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKLUBAIC02MDMsNyArNjAzLDcgQEAgaG9zdF9vcz1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCi0gCi0gIyBUcmFuc2Zvcm0gbGludXgqIHRvICotKi1saW51eC1nbnUqLCB0byBzdXBwb3J0IG9sZCBjb25maWd1cmUgc2NyaXB0cy4KLSBjYXNlICRob3N0X29zIGluCi0tbGludXgtZ251KikgOzsKLStsaW51eC1nbnUqfGxpbnV4LXVjbGliYyopIDs7Ci0gbGludXgqKSBob3N0PWBlY2hvICRob3N0IHwgc2VkICdzL15cKC4qLS4qLWxpbnV4XClcKC4qXCkkL1wxLWdudVwyLydgCi0gZXNhYwotIAotQEAgLTEyNDcsNyArMTI0Nyw3IEBAIGxpbnV4LWdudW9sZGxkKiB8IGxpbnV4LWdudWFvdXQqIHwgbGludXgtZ251Y29mZiopCi0gICA7OwotIAotICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KLS1saW51eC1nbnUqKQotK2xpbnV4KikKLSAgIHZlcnNpb25fdHlwZT1saW51eAotICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICBuZWVkX3ZlcnNpb249bm8KLS0tIAotMi44LjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMy8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjMvMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmMDdmZWIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMy8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLUZyb20gYWQ1ZmQyODNmYzdlZjA0ZjY2YzdmYjAwMzgwNTM2NGVhM2JkMzRlOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQwOjEyICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMDMvNDZdIGdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdAotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLS0tLQotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MgfCA1ICsrKysrCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oICB8IDkgKysrKysrKysrCi0gbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oICB8IDkgKysrKysrKysrCi0gMyBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYwotaW5kZXggZWY2Y2U4Zi4uNDc0MDYzNiAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKLUBAIC0yNzMsNSArMjczLDEwIEBAIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgotICNpZmRlZiBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQKLSAjZGVmaW5lIF9HTElCQ1hYX0xEQkxfQ09NUEFUKGRibCwgbGRibCkgXAotICAgZXh0ZXJuICJDIiB2b2lkIGxkYmwgKHZvaWQpIF9fYXR0cmlidXRlX18gKChhbGlhcyAoI2RibCkpKQotKyNpZmRlZiBfX1VDTElCQ19fCi0rLy8gVGhpcyBpcyBiZWNhdXNlIF9fY19sb2NhbGUgaXMgb2YgdHlwZSBfX2N0eXBlX3RvdXBsb3dfdCogd2hpY2ggaXMgc2hvcnQgb24gdWNsaWJjLiBmb3IgZ2xpYmMgaXRzIGludCoKLStfR0xJQkNYWF9MREJMX0NPTVBBVChfWlN0MTRfX2NvbnZlcnRfdG9fdklkRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUHMsIF9aU3QxNF9fY29udmVydF90b192SWVFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQcyk7Ci0rI2Vsc2UKLSBfR0xJQkNYWF9MREJMX0NPTVBBVChfWlN0MTRfX2NvbnZlcnRfdG9fdklkRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUGksIF9aU3QxNF9fY29udmVydF90b192SWVFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQaSk7Ci0rI2VuZGlmCi0gI2VuZGlmIC8vIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVAotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAotaW5kZXggNzk0NDcxZS4uZDY1Zjk1NSAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCi1AQCAtNDAsMTMgKzQwLDIyIEBACi0gCi0gI2luY2x1ZGUgPGNsb2NhbGU+Ci0gCi0rI2lmZGVmIF9fVUNMSUJDX18KLSsjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjZW5kaWYKLSsKLSAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDAKLSAKLSBuYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKLSB7Ci0gX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KLSAKLSsjaWZkZWYgX19VQ0xJQkNfXwotKyAgdHlwZWRlZiBfX2N0eXBlX3RvdXBsb3dfdCoJX19jX2xvY2FsZTsKLSsjZWxzZQotICAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKLSsjZW5kaWYKLSAKLSAgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIGRvdWJsZSBhbmQgbG9uZyBkb3VibGUgdG8gc3RyaW5nIGFuZAotICAgLy8gcmV0dXJuIGxlbmd0aCBvZiBzdHJpbmcuICBJZiB2c25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCi1pbmRleCA1OTFjNzkzLi41NWViMGU5IDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgKLUBAIC0zMyw2ICszMywxMSBAQAotIAotIC8vIEluZm9ybWF0aW9uIGFzIGdsZWFuZWQgZnJvbSAvdXNyL2luY2x1ZGUvY3R5cGUuaAotIAotKyNpZmRlZiBfX1VDTElCQ19fCi0rI2luY2x1ZGUgPGZlYXR1cmVzLmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rI2VuZGlmCi0rCi0gbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCi0gewotIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCi1AQCAtNDEsNyArNDYsMTEgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KLSAgIHN0cnVjdCBjdHlwZV9iYXNlCi0gICB7Ci0gICAgIC8vIE5vbi1zdGFuZGFyZCB0eXBlZGVmcy4KLSsjaWZkZWYgX19VQ0xJQkNfXwotKyAgICB0eXBlZGVmIGNvbnN0IF9fY3R5cGVfdG91cGxvd190KglfX3RvX3R5cGU7Ci0rI2Vsc2UKLSAgICAgdHlwZWRlZiBjb25zdCBpbnQqIAkJX190b190eXBlOwotKyNlbmRpZgotIAotICAgICAvLyBOQjogT2Zmc2V0cyBpbnRvIGN0eXBlPGNoYXI+OjpfTV90YWJsZSBmb3JjZSBhIHBhcnRpY3VsYXIgc2l6ZQotICAgICAvLyBvbiB0aGUgbWFzayB0eXBlLiBCZWNhdXNlIG9mIHRoaXMsIHdlIGRvbid0IHVzZSBhbiBlbnVtLgotLS0gCi0yLjguMgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4zLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjMvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTI2MjdjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjMvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjg2MiArMCwwIEBACi1Gcm9tIDY4YmQwODMzNTdlNzg2NzhhOWJhYWM3NjBiZWIyYTMxZjAwOTU0YTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MTozOSArMDQwMAotU3ViamVjdDogW1BBVENIIDA0LzQ2XSB1Y2xpYmMtbG9jYWxlCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzcgKysKLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggICAgICB8ICA2MyArKwotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyAgICAgIHwgMTYwICsrKysrCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAxMTcgKysrKwotIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MgICAgICAgIHwgMzA4ICsrKysrKysrKwotIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgICAgICAgIHwgIDgwICsrKwotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgMzAwICsrKysrKysrKwotIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjICAgICAgIHwgMTAwICsrKwotIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggICAgICAgIHwgMTE4ICsrKysKLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8IDY5MiArKysrKysrKysrKysrKysrKysrKysKLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8IDE2MCArKysrKwotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgNDA2ICsrKysrKysrKysrKwotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCAgIHwgIDY4ICsrCi0gbGlic3RkYysrLXYzL2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNzUgKysrCi0gbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmggICAgICAgfCAgIDIgKwotIGxpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhciAgICAgICAgICAgICAgICAgIHwgICAyICsKLSAxNiBmaWxlcyBjaGFuZ2VkLCAyNjg4IGluc2VydGlvbnMoKykKLSBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKLSBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKLSBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKLSBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKLSBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCi0KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00IGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAotaW5kZXggYjBmODhjYi4uYTBlZTM2YiAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKLSsrKyBiL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKLUBAIC0yMzU4LDYgKzIzNTgsOSBAQCBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKLSAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCi0gICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgotICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgotKyAgICAgICotdWNsaWJjKikKLSsgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCi0rICAgICAgICA7OwotICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQotIAllbmFibGVfY2xvY2FsZV9mbGFnPWdudQotIAk7OwotQEAgLTI1NDIsNiArMjU0NSw0MCBAQCBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKLSAgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCi0gICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jKytsb2NhbGVfaW50ZXJuYWwuaAotICAgICAgIDs7Ci0rICAgIHVjbGliYykKLSsgICAgICBBQ19NU0dfUkVTVUxUKHVjbGliYykKLSsKLSsgICAgICAjIERlY2xhcmUgaW50ZW50aW9uIHRvIHVzZSBnZXR0ZXh0LCBhbmQgYWRkIHN1cHBvcnQgZm9yIHNwZWNpZmljCi0rICAgICAgIyBsYW5ndWFnZXMuCi0rICAgICAgIyBGb3Igc29tZSByZWFzb24sIEFMTF9MSU5HVUFTIGhhcyB0byBiZSBiZWZvcmUgQU0tR05VLUdFVFRFWFQKLSsgICAgICBBTExfTElOR1VBUz0iZGUgZnIiCi0rCi0rICAgICAgIyBEb24ndCBjYWxsIEFNLUdOVS1HRVRURVhUIGhlcmUuIEluc3RlYWQsIGFzc3VtZSBnbGliYy4KLSsgICAgICBBQ19DSEVDS19QUk9HKGNoZWNrX21zZ2ZtdCwgbXNnZm10LCB5ZXMsIG5vKQotKyAgICAgIGlmIHRlc3QgeCIkY2hlY2tfbXNnZm10IiA9IHgieWVzIiAmJiB0ZXN0IHgiJGVuYWJsZV9ubHMiID0geCJ5ZXMiOyB0aGVuCi0rICAgICAgICBVU0VfTkxTPXllcwotKyAgICAgIGZpCi0rICAgICAgIyBFeHBvcnQgdGhlIGJ1aWxkIG9iamVjdHMuCi0rICAgICAgZm9yIGxpbmcgaW4gJEFMTF9MSU5HVUFTOyBkbyBcCi0rICAgICAgICBnbGliY3h4X01PRklMRVM9IiRnbGliY3h4X01PRklMRVMgJGxpbmcubW8iOyBcCi0rICAgICAgICBnbGliY3h4X1BPRklMRVM9IiRnbGliY3h4X1BPRklMRVMgJGxpbmcucG8iOyBcCi0rICAgICAgZG9uZQotKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfTU9GSUxFUykKLSsgICAgICBBQ19TVUJTVChnbGliY3h4X1BPRklMRVMpCi0rCi0rICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKLSsgICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCi0rICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCi0rICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCi0rICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKLSsgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKLSsgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYwotKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCi0rICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi0rICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAotKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYwotKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAotKyAgICAgIDs7Ci0gICBlc2FjCi0gCi0gICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi4yYWUzZTRhCi0tLS0gL2Rldi9udWxsCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKLUBAIC0wLDAgKzEsNjMgQEAKLSsvLyBQcm90b3R5cGVzIGZvciBHTElCQyB0aHJlYWQgbG9jYWxlIF9fLXByZWZpeGVkIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQotKwotKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsvLwotKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKLSsvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKLSsvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotKy8vIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSsvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0rLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCi0rLy8gVVNBLgotKwotKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQotKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKLSsvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQotKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcwotKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgotKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSsKLSsvLyBXcml0dGVuIGJ5IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+Ci0rCi0rI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+Ci0rI2luY2x1ZGUgPGNsb2NhbGU+Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi0rI3dhcm5pbmcgY2xlYW4gdGhpcyB1cAotKyNlbmRpZgotKwotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rCi0rZXh0ZXJuICJDIiBfX3R5cGVvZihubF9sYW5naW5mb19sKSBfX25sX2xhbmdpbmZvX2w7Ci0rZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJjb2xsX2wpIF9fc3RyY29sbF9sOwotK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyZnRpbWVfbCkgX19zdHJmdGltZV9sOwotK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9kX2wpIF9fc3RydG9kX2w7Ci0rZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2ZfbCkgX19zdHJ0b2ZfbDsKLStleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvbGRfbCkgX19zdHJ0b2xkX2w7Ci0rZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ4ZnJtX2wpIF9fc3RyeGZybV9sOwotK2V4dGVybiAiQyIgX190eXBlb2YobmV3bG9jYWxlKSBfX25ld2xvY2FsZTsKLStleHRlcm4gIkMiIF9fdHlwZW9mKGZyZWVsb2NhbGUpIF9fZnJlZWxvY2FsZTsKLStleHRlcm4gIkMiIF9fdHlwZW9mKGR1cGxvY2FsZSkgX19kdXBsb2NhbGU7Ci0rZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOwotKwotKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAotK2V4dGVybiAiQyIgX190eXBlb2YoaXN3Y3R5cGVfbCkgX19pc3djdHlwZV9sOwotK2V4dGVybiAiQyIgX190eXBlb2YodG93bG93ZXJfbCkgX190b3dsb3dlcl9sOwotK2V4dGVybiAiQyIgX190eXBlb2YodG93dXBwZXJfbCkgX190b3d1cHBlcl9sOwotK2V4dGVybiAiQyIgX190eXBlb2Yod2NzY29sbF9sKSBfX3djc2NvbGxfbDsKLStleHRlcm4gIkMiIF9fdHlwZW9mKHdjc2Z0aW1lX2wpIF9fd2NzZnRpbWVfbDsKLStleHRlcm4gIkMiIF9fdHlwZW9mKHdjc3hmcm1fbCkgX193Y3N4ZnJtX2w7Ci0rZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3R5cGVfbCkgX193Y3R5cGVfbDsKLSsjZW5kaWYKLSsKLSsjZW5kaWYgLy8gR0xJQkMgMi4zIGFuZCBsYXRlcgotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjUwODFkYzEKLS0tLSAvZGV2L251bGwKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwotQEAgLTAsMCArMSwxNjAgQEAKLSsvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCi0rCi0rLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKy8vCi0rLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQotKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQotKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0rLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0rLy8gYW55IGxhdGVyIHZlcnNpb24uCi0rCi0rLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLSsvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSsvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKLSsvLyBVU0EuCi0rCi0rLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCi0rLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQotKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCi0rLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCi0rLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCi0rLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotKwotKy8vCi0rLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCi0rLy8KLSsKLSsvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgotKwotKyNpbmNsdWRlIDxjZXJybm8+ICAvLyBGb3IgZXJybm8KLSsjaW5jbHVkZSA8bG9jYWxlPgotKyNpbmNsdWRlIDxzdGRleGNlcHQ+Ci0rI2luY2x1ZGUgPGxhbmdpbmZvLmg+Ci0rI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+Ci0rCi0rI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rI2RlZmluZSBfX3N0cnRvbF9sKFMsIEUsIEIsIEwpICAgICAgc3RydG9sKChTKSwgKEUpLCAoQikpCi0rI2RlZmluZSBfX3N0cnRvdWxfbChTLCBFLCBCLCBMKSAgICAgc3RydG91bCgoUyksIChFKSwgKEIpKQotKyNkZWZpbmUgX19zdHJ0b2xsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvbGwoKFMpLCAoRSksIChCKSkKLSsjZGVmaW5lIF9fc3RydG91bGxfbChTLCBFLCBCLCBMKSAgICBzdHJ0b3VsbCgoUyksIChFKSwgKEIpKQotKyNkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKLSsjZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCi0rI2RlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKLSsjd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPwotKyNkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKLSsjZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKLSsjZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKLSsjZW5kaWYKLSsKLStuYW1lc3BhY2Ugc3RkCi0rewotKyAgdGVtcGxhdGU8PgotKyAgICB2b2lkCi0rICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZmxvYXQmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAotKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQotKyAgICB7Ci0rICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCi0rCXsKLSsJICBjaGFyKiBfX3Nhbml0eTsKLSsJICBlcnJubyA9IDA7Ci0rCSAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKLSsgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCi0rCSAgICBfX3YgPSBfX2Y7Ci0rCSAgZWxzZQotKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7Ci0rCX0KLSsgICAgfQotKwotKyAgdGVtcGxhdGU8PgotKyAgICB2b2lkCi0rICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKLSsJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKLSsgICAgewotKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQotKwl7Ci0rCSAgY2hhciogX19zYW5pdHk7Ci0rCSAgZXJybm8gPSAwOwotKwkgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOwotKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKLSsJICAgIF9fdiA9IF9fZDsKLSsJICBlbHNlCi0rCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKLSsJfQotKyAgICB9Ci0rCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIHZvaWQKLSsgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBsb25nIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCi0rCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCi0rICAgIHsKLSsgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKLSsJewotKwkgIGNoYXIqIF9fc2FuaXR5OwotKwkgIGVycm5vID0gMDsKLSsJICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7Ci0rICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQotKwkgICAgX192ID0gX19sZDsKLSsJICBlbHNlCi0rCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKLSsJfQotKyAgICB9Ci0rCi0rICB2b2lkCi0rICBsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCi0rCQkJCSAgICBfX2NfbG9jYWxlIF9fb2xkKQotKyAgewotKyAgICBfX2Nsb2MgPSBfX25ld2xvY2FsZSgxIDw8IExDX0FMTCwgX19zLCBfX29sZCk7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgaWYgKCFfX2Nsb2MpCi0rICAgICAgewotKwkvLyBUaGlzIG5hbWVkIGxvY2FsZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIE9TLgotKwlfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUgIgotKwkJCSAgICAgICJuYW1lIG5vdCB2YWxpZCIpKTsKLSsgICAgICB9Ci0rI2VuZGlmCi0rICB9Ci0rCi0rICB2b2lkCi0rICBsb2NhbGU6OmZhY2V0OjpfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKLSsgIHsKLSsgICAgaWYgKF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKLSsgICAgICBfX2ZyZWVsb2NhbGUoX19jbG9jKTsKLSsgIH0KLSsKLSsgIF9fY19sb2NhbGUKLSsgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKLSsgIHsgcmV0dXJuIF9fZHVwbG9jYWxlKF9fY2xvYyk7IH0KLSt9IC8vIG5hbWVzcGFjZSBzdGQKLSsKLStuYW1lc3BhY2UgX19nbnVfY3h4Ci0rewotKyAgY29uc3QgY2hhciogY29uc3QgY2F0ZWdvcnlfbmFtZXNbNiArIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTXSA9Ci0rICAgIHsKLSsgICAgICAiTENfQ1RZUEUiLAotKyAgICAgICJMQ19OVU1FUklDIiwKLSsgICAgICAiTENfVElNRSIsCi0rICAgICAgIkxDX0NPTExBVEUiLAotKyAgICAgICJMQ19NT05FVEFSWSIsCi0rICAgICAgIkxDX01FU1NBR0VTIiwKLSsjaWYgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgIT0gMAotKyAgICAgICJMQ19QQVBFUiIsCi0rICAgICAgIkxDX05BTUUiLAotKyAgICAgICJMQ19BRERSRVNTIiwKLSsgICAgICAiTENfVEVMRVBIT05FIiwKLSsgICAgICAiTENfTUVBU1VSRU1FTlQiLAotKyAgICAgICJMQ19JREVOVElGSUNBVElPTiIKLSsjZW5kaWYKLSsgICAgfTsKLSt9Ci0rCi0rbmFtZXNwYWNlIHN0ZAotK3sKLSsgIGNvbnN0IGNoYXIqIGNvbnN0KiBjb25zdCBsb2NhbGU6Ol9TX2NhdGVnb3JpZXMgPSBfX2dudV9jeHg6OmNhdGVnb3J5X25hbWVzOwotK30gIC8vIG5hbWVzcGFjZSBzdGQKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uZGEwN2MxZgotLS0tIC9kZXYvbnVsbAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKLUBAIC0wLDAgKzEsMTE3IEBACi0rLy8gV3JhcHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdlIGxvY2FsaXphdGlvbiAtKi0gQysrIC0qLQotKwotKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsvLwotKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKLSsvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKLSsvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotKy8vIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSsvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0rLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCi0rLy8gVVNBLgotKwotKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQotKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKLSsvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQotKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcwotKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgotKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSsKLSsvLwotKy8vIElTTyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29yaWVzLgotKy8vCi0rCi0rLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KLSsKLSsjaWZuZGVmIF9DX0xPQ0FMRV9ICi0rI2RlZmluZSBfQ19MT0NBTEVfSCAxCi0rCi0rI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgotKwotKyNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCi0rI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKLSsjaW5jbHVkZSA8Y2xvY2FsZT4KLSsjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0Ci0rI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi0rI3dhcm5pbmcgZml4IHRoaXMKLSsjZW5kaWYKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCi0rI2luY2x1ZGUgPGljb252Lmg+CQkvLyBGb3IgY29kZWN2dCB1c2luZyBpY29udiwgaWNvbnZfdAotKyNlbmRpZgotKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXwotKyNpbmNsdWRlIDxsaWJpbnRsLmg+IAkJLy8gRm9yIG1lc3NhZ2VzCi0rI2VuZGlmCi0rCi0rI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi0rI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCi0rI2VuZGlmCi0rI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQotKwotKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotKyN3YXJuaW5nIGZpeCBjYXRlZ29yaWVzCi0rI2VuZGlmCi0rLy8gI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyA2Ci0rI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCi0rCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLStuYW1lc3BhY2UgX19nbnVfY3h4Ci0rewotKyAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOwotK30KLSsjZW5kaWYKLSsKLStuYW1lc3BhY2Ugc3RkCi0rewotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICB0eXBlZGVmIF9fbG9jYWxlX3QJCV9fY19sb2NhbGU7Ci0rI2Vsc2UKLSsgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7Ci0rI2VuZGlmCi0rCi0rICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBfVHYgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCi0rICAvLyBzdHJpbmcuICBJZiBzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCi0rICAvLyB0aGUgdW5zYWZlIHNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAotKyAgLy8gYmUgYXZvaWRlZC4KLSsgIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KLSsgICAgaW50Ci0rICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsCi0rCQkgICAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKLSsJCSAgICAgY29uc3QgY2hhciogX19mbXQsCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCi0rCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fcHJlYykKLSsgICAgewotKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fY2xvYyk7Ci0rI2Vsc2UKLSsJCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMpCi0rICAgIHsKLSsjIGlmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXwotKyAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKLSsgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fb2xkKSArIDFdOwotKyAgICAgIHN0ZDo6c3RyY3B5KF9fc2F2LCBfX29sZCk7Ci0rICAgICAgc3RkOjpzZXRsb2NhbGUoTENfQUxMLCAiQyIpOwotKyMgZW5kaWYKLSsjZW5kaWYKLSsKLSsgICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCi0rICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2VsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KLSsgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKLSsgICAgICBkZWxldGUgW10gX19zYXY7Ci0rI2VuZGlmCi0rICAgICAgcmV0dXJuIF9fcmV0OwotKyAgICB9Ci0rfQotKwotKyNlbmRpZgotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uNjRhYTk2MgotLS0tIC9kZXYvbnVsbAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYwotQEAgLTAsMCArMSwzMDggQEAKLSsvLyBzdGQ6OmNvZGVjdnQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KLSsKLSsvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rLy8KLSsvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCi0rLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCi0rLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSsvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSsvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0rLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAotKy8vIFVTQS4KLSsKLSsvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKLSsvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCi0rLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKLSsvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKLSsvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKLSsvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0rCi0rLy8KLSsvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuNSAtIFRlbXBsYXRlIGNsYXNzIGNvZGVjdnQKLSsvLwotKwotKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+Ci0rCi0rI2luY2x1ZGUgPGxvY2FsZT4KLSsjaW5jbHVkZSA8Y3N0ZGxpYj4gIC8vIEZvciBNQl9DVVJfTUFYCi0rI2luY2x1ZGUgPGNsaW1pdHM+ICAvLyBGb3IgTUJfTEVOX01BWAotKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgotKwotK25hbWVzcGFjZSBzdGQKLSt7Ci0rICAvLyBTcGVjaWFsaXphdGlvbnMuCi0rI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCi0rICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAotKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKLSsgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAotKwkgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCi0rCSBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAotKwkgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0Ci0rICB7Ci0rICAgIHJlc3VsdCBfX3JldCA9IG9rOwotKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOwotKwotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKLSsjZW5kaWYKLSsKLSsgICAgLy8gd2NzbnJ0b21icyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKLSsgICAgLy8gaW4gY2FzZSB3ZSBmYWxsIGJhY2sgdG8gd2NydG9tYiBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgotKyAgICAvLyBOQjogd2NzbnJ0b21icyBpcyBhIEdOVSBleHRlbnNpb24KLSsgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKLSsJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAotKwkgJiYgX19yZXQgPT0gb2s7KQotKyAgICAgIHsKLSsJY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQgPSB3bWVtY2hyKF9fZnJvbV9uZXh0LCBMJ1wwJywKLSsJCQkJCQkgICAgICBfX2Zyb21fZW5kIC0gX19mcm9tX25leHQpOwotKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCi0rCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7Ci0rCi0rCV9fZnJvbSA9IF9fZnJvbV9uZXh0OwotKwljb25zdCBzaXplX3QgX19jb252ID0gd2NzbnJ0b21icyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKLSsJCQkJCSBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCi0rCQkJCQkgX190b19lbmQgLSBfX3RvX25leHQsICZfX3N0YXRlKTsKLSsJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKLSsJICB7Ci0rCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQotKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgotKwkgICAgLy8gd2NydG9tYi4KLSsJICAgIGZvciAoOyBfX2Zyb20gPCBfX2Zyb21fbmV4dDsgKytfX2Zyb20pCi0rCSAgICAgIF9fdG9fbmV4dCArPSB3Y3J0b21iKF9fdG9fbmV4dCwgKl9fZnJvbSwgJl9fdG1wX3N0YXRlKTsKLSsJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKLSsJICAgIF9fcmV0ID0gZXJyb3I7Ci0rCSAgfQotKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCi0rCSAgewotKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKLSsJICAgIF9fcmV0ID0gcGFydGlhbDsKLSsJICB9Ci0rCWVsc2UKLSsJICB7Ci0rCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7Ci0rCSAgICBfX3RvX25leHQgKz0gX19jb252OwotKwkgIH0KLSsKLSsJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKLSsJICB7Ci0rCSAgICBleHRlcm5fdHlwZSBfX2J1ZltNQl9MRU5fTUFYXTsKLSsJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKLSsJICAgIGNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3J0b21iKF9fYnVmLCAqX19mcm9tX25leHQsICZfX3RtcF9zdGF0ZSk7Ci0rCSAgICBpZiAoX19jb252ID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihfX3RvX2VuZCAtIF9fdG9fbmV4dCkpCi0rCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKLSsJICAgIGVsc2UKLSsJICAgICAgewotKwkJbWVtY3B5KF9fdG9fbmV4dCwgX19idWYsIF9fY29udik7Ci0rCQlfX3N0YXRlID0gX190bXBfc3RhdGU7Ci0rCQlfX3RvX25leHQgKz0gX19jb252OwotKwkJKytfX2Zyb21fbmV4dDsKLSsJICAgICAgfQotKwkgIH0KLSsgICAgICB9Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgX191c2Vsb2NhbGUoX19vbGQpOwotKyNlbmRpZgotKwotKyAgICByZXR1cm4gX19yZXQ7Ci0rICB9Ci0rCi0rICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAotKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKLSsgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCi0rCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAotKwlpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAotKwlpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKLSsgIHsKLSsgICAgcmVzdWx0IF9fcmV0ID0gb2s7Ci0rICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOwotKyNlbmRpZgotKwotKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgotKyAgICAvLyBpbiBjYXNlIHdlIHN0b3JlIGEgTCdcMCcgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KLSsgICAgLy8gTkI6IG1ic25ydG93Y3MgaXMgYSBHTlUgZXh0ZW5zaW9uCi0rICAgIGZvciAoX19mcm9tX25leHQgPSBfX2Zyb20sIF9fdG9fbmV4dCA9IF9fdG87Ci0rCSBfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX190b19uZXh0IDwgX190b19lbmQKLSsJICYmIF9fcmV0ID09IG9rOykKLSsgICAgICB7Ci0rCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOwotKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tX25leHQsICdcMCcsCi0rCQkJCQkJCQkgIF9fZnJvbV9lbmQKLSsJCQkJCQkJCSAgLSBfX2Zyb21fbmV4dCkpOwotKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCi0rCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7Ci0rCi0rCV9fZnJvbSA9IF9fZnJvbV9uZXh0OwotKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKLSsJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbV9uZXh0LAotKwkJCQkgICBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOwotKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQotKwkgIHsKLSsJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCi0rCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCi0rCSAgICAvLyBtYnJ0b3djLgotKwkgICAgZm9yICg7OyArK19fdG9fbmV4dCwgX19mcm9tICs9IF9fY29udikKLSsJICAgICAgewotKwkJX19jb252ID0gbWJydG93YyhfX3RvX25leHQsIF9fZnJvbSwgX19mcm9tX2VuZCAtIF9fZnJvbSwKLSsJCQkJICZfX3RtcF9zdGF0ZSk7Ci0rCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCi0rCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQotKwkJICBicmVhazsKLSsJICAgICAgfQotKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb207Ci0rCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7Ci0rCSAgICBfX3JldCA9IGVycm9yOwotKwkgIH0KLSsJZWxzZSBpZiAoX19mcm9tX25leHQgJiYgX19mcm9tX25leHQgPCBfX2Zyb21fY2h1bmtfZW5kKQotKwkgIHsKLSsJICAgIC8vIEl0IGlzIHVuY2xlYXIgd2hhdCB0byByZXR1cm4gaW4gdGhpcyBjYXNlIChzZWUgRFIgMzgyKS4KLSsJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7Ci0rCSAgICBfX3JldCA9IHBhcnRpYWw7Ci0rCSAgfQotKwllbHNlCi0rCSAgewotKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb21fY2h1bmtfZW5kOwotKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKLSsJICB9Ci0rCi0rCWlmIChfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX19yZXQgPT0gb2spCi0rCSAgewotKwkgICAgaWYgKF9fdG9fbmV4dCA8IF9fdG9fZW5kKQotKwkgICAgICB7Ci0rCQkvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncwotKwkJX190bXBfc3RhdGUgPSBfX3N0YXRlOwotKwkJKytfX2Zyb21fbmV4dDsKLSsJCSpfX3RvX25leHQrKyA9IEwnXDAnOwotKwkgICAgICB9Ci0rCSAgICBlbHNlCi0rCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKLSsJICB9Ci0rICAgICAgfQotKwotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSsjZW5kaWYKLSsKLSsgICAgcmV0dXJuIF9fcmV0OwotKyAgfQotKwotKyAgaW50Ci0rICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgotKyAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCi0rICB7Ci0rICAgIC8vIFhYWCBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCB0aGUgZW5jb2RpbmcgaXMKLSsgICAgLy8gc3RhdGVsZXNzIGFuZCBpcyBlaXRoZXIgc2luZ2xlLWJ5dGUgb3IgdmFyaWFibGUtd2lkdGguCi0rICAgIGludCBfX3JldCA9IDA7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOwotKyNlbmRpZgotKyAgICBpZiAoTUJfQ1VSX01BWCA9PSAxKQotKyAgICAgIF9fcmV0ID0gMTsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2VuZGlmCi0rICAgIHJldHVybiBfX3JldDsKLSsgIH0KLSsKLSsgIGludAotKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKLSsgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCi0rICB7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOwotKyNlbmRpZgotKyAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncy4KLSsgICAgaW50IF9fcmV0ID0gTUJfQ1VSX01BWDsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2VuZGlmCi0rICAgIHJldHVybiBfX3JldDsKLSsgIH0KLSsKLSsgIGludAotKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKLSsgIGRvX2xlbmd0aChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAotKwkgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0Ci0rICB7Ci0rICAgIGludCBfX3JldCA9IDA7Ci0rICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOwotKyNlbmRpZgotKwotKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgotKyAgICAvLyBpbiBjYXNlIHdlIGFkdmFuY2UgcGFzdCBpdCBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgotKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KLSsKLSsgICAgLy8gQSBkdW1teSBpbnRlcm5hbCBidWZmZXIgaXMgbmVlZGVkIGluIG9yZGVyIGZvciBtYnNucnRvY3dzIHRvIGNvbnNpZGVyCi0rICAgIC8vIGl0cyBmb3VydGggcGFyYW1ldGVyIChpdCB3b3VsZG4ndCB3aXRoIE5VTEwgYXMgZmlyc3QgcGFyYW1ldGVyKS4KLSsgICAgd2NoYXJfdCogX190byA9IHN0YXRpY19jYXN0PHdjaGFyX3QqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZih3Y2hhcl90KQotKwkJCQkJCQkgICAqIF9fbWF4KSk7Ci0rICAgIHdoaWxlIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKLSsgICAgICB7Ci0rCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOwotKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tLCAnXDAnLAotKwkJCQkJCQkJICBfX2VuZAotKwkJCQkJCQkJICAtIF9fZnJvbSkpOwotKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCi0rCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZW5kOwotKwotKwljb25zdCBleHRlcm5fdHlwZSogX190bXBfZnJvbSA9IF9fZnJvbTsKLSsJc2l6ZV90IF9fY29udiA9IG1ic25ydG93Y3MoX190bywgJl9fZnJvbSwKLSsJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbSwKLSsJCQkJICAgX19tYXgsICZfX3N0YXRlKTsKLSsJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKLSsJICB7Ci0rCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQotKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgotKwkgICAgLy8gbWJydG93Yy4KLSsJICAgIGZvciAoX19mcm9tID0gX190bXBfZnJvbTs7IF9fZnJvbSArPSBfX2NvbnYpCi0rCSAgICAgIHsKLSsJCV9fY29udiA9IG1icnRvd2MoTlVMTCwgX19mcm9tLCBfX2VuZCAtIF9fZnJvbSwKLSsJCQkJICZfX3RtcF9zdGF0ZSk7Ci0rCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCi0rCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQotKwkJICBicmVhazsKLSsJICAgICAgfQotKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOwotKwkgICAgX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKLSsJICAgIGJyZWFrOwotKwkgIH0KLSsJaWYgKCFfX2Zyb20pCi0rCSAgX19mcm9tID0gX19mcm9tX2NodW5rX2VuZDsKLSsKLSsJX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKLSsJX19tYXggLT0gX19jb252OwotKwotKwlpZiAoX19mcm9tIDwgX19lbmQgJiYgX19tYXgpCi0rCSAgewotKwkgICAgLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MKLSsJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKLSsJICAgICsrX19mcm9tOwotKwkgICAgKytfX3JldDsKLSsJICAgIC0tX19tYXg7Ci0rCSAgfQotKyAgICAgIH0KLSsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2VuZGlmCi0rCi0rICAgIHJldHVybiBfX3JldDsKLSsgIH0KLSsjZW5kaWYKLSt9Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi5jMjY2NGE3Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCi1AQCAtMCwwICsxLDgwIEBACi0rLy8gc3RkOjpjb2xsYXRlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCi0rCi0rLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKy8vCi0rLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQotKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQotKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0rLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0rLy8gYW55IGxhdGVyIHZlcnNpb24uCi0rCi0rLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLSsvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSsvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKLSsvLyBVU0EuCi0rCi0rLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCi0rLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQotKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCi0rLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCi0rLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCi0rLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotKwotKy8vCi0rLy8gSVNPIEMrKyAxNDg4MjogMjIuMi40LjEuMiAgY29sbGF0ZSB2aXJ0dWFsIGZ1bmN0aW9ucwotKy8vCi0rCi0rLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KLSsKLSsjaW5jbHVkZSA8bG9jYWxlPgotKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgotKwotKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyNkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKLSsjZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKLSsjZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCi0rI2RlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCi0rI2VuZGlmCi0rCi0rbmFtZXNwYWNlIHN0ZAotK3sKLSsgIC8vIFRoZXNlIGFyZSBiYXNpY2FsbHkgZXh0ZW5zaW9ucyB0byBjaGFyX3RyYWl0cywgYW5kIHBlcmhhcHMgc2hvdWxkCi0rICAvLyBiZSBwdXQgdGhlcmUgaW5zdGVhZCBvZiBoZXJlLgotKyAgdGVtcGxhdGU8PgotKyAgICBpbnQKLSsgICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiBfX29uZSwgY29uc3QgY2hhciogX190d28pIGNvbnN0Ci0rICAgIHsKLSsgICAgICBpbnQgX19jbXAgPSBfX3N0cmNvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOwotKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7Ci0rICAgIH0KLSsKLSsgIHRlbXBsYXRlPD4KLSsgICAgc2l6ZV90Ci0rICAgIGNvbGxhdGU8Y2hhcj46Ol9NX3RyYW5zZm9ybShjaGFyKiBfX3RvLCBjb25zdCBjaGFyKiBfX2Zyb20sCi0rCQkJCXNpemVfdCBfX24pIGNvbnN0Ci0rICAgIHsgcmV0dXJuIF9fc3RyeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQotKwotKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAotKyAgdGVtcGxhdGU8PgotKyAgICBpbnQKLSsgICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fY29tcGFyZShjb25zdCB3Y2hhcl90KiBfX29uZSwKLSsJCQkJIGNvbnN0IHdjaGFyX3QqIF9fdHdvKSBjb25zdAotKyAgICB7Ci0rICAgICAgaW50IF9fY21wID0gX193Y3Njb2xsX2woX19vbmUsIF9fdHdvLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsKLSsgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDApOwotKyAgICB9Ci0rCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIHNpemVfdAotKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV90cmFuc2Zvcm0od2NoYXJfdCogX190bywgY29uc3Qgd2NoYXJfdCogX19mcm9tLAotKwkJCQkgICBzaXplX3QgX19uKSBjb25zdAotKyAgICB7IHJldHVybiBfX3djc3hmcm1fbChfX3RvLCBfX2Zyb20sIF9fbiwgX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KLSsjZW5kaWYKLSt9Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjcyOTRlM2EKLS0tLSAvZGV2L251bGwKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCi1AQCAtMCwwICsxLDMwMCBAQAotKy8vIHN0ZDo6Y3R5cGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KLSsKLSsvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rLy8KLSsvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCi0rLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCi0rLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSsvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSsvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0rLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAotKy8vIFVTQS4KLSsKLSsvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKLSsvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCi0rLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKLSsvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKLSsvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKLSsvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0rCi0rLy8KLSsvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuMS4yICBjdHlwZSB2aXJ0dWFsIGZ1bmN0aW9ucy4KLSsvLwotKwotKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+Ci0rCi0rI2RlZmluZSBfTElCQwotKyNpbmNsdWRlIDxsb2NhbGU+Ci0rI3VuZGVmIF9MSUJDCi0rI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+Ci0rCi0rI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rI2RlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICB3Y3R5cGUoKFMpKQotKyNkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgdG93dXBwZXIoKEMpKQotKyNkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgdG93bG93ZXIoKEMpKQotKyNkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCi0rI2VuZGlmCi0rCi0rbmFtZXNwYWNlIHN0ZAotK3sKLSsgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAotKyAgLy8gdmFyaW91cyAvY29uZmlnL29zLyogZmlsZXMuCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKLSsgICAgOiBjdHlwZTxjaGFyPigwLCBmYWxzZSwgX19yZWZzKQotKyAgICB7Ci0rICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKLSsJewotKwkgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY3R5cGUpOwotKwkgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSwgX19zKTsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKwkgIHRoaXMtPl9NX3RvdXBwZXIgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b3VwcGVyOwotKwkgIHRoaXMtPl9NX3RvbG93ZXIgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b2xvd2VyOwotKwkgIHRoaXMtPl9NX3RhYmxlID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfYjsKLSsjZW5kaWYKLSsJfQotKyAgICB9Ci0rCi0rI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCi0rICBjdHlwZTx3Y2hhcl90Pjo6X193bWFza190eXBlCi0rICBjdHlwZTx3Y2hhcl90Pjo6X01fY29udmVydF90b193bWFzayhjb25zdCBtYXNrIF9fbSkgY29uc3QKLSsgIHsKLSsgICAgX193bWFza190eXBlIF9fcmV0OwotKyAgICBzd2l0Y2ggKF9fbSkKLSsgICAgICB7Ci0rICAgICAgY2FzZSBzcGFjZToKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJzcGFjZSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsJYnJlYWs7Ci0rICAgICAgY2FzZSBwcmludDoKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJwcmludCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsJYnJlYWs7Ci0rICAgICAgY2FzZSBjbnRybDoKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJjbnRybCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsJYnJlYWs7Ci0rICAgICAgY2FzZSB1cHBlcjoKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJ1cHBlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsJYnJlYWs7Ci0rICAgICAgY2FzZSBsb3dlcjoKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJsb3dlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsJYnJlYWs7Ci0rICAgICAgY2FzZSBhbHBoYToKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJhbHBoYSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsJYnJlYWs7Ci0rICAgICAgY2FzZSBkaWdpdDoKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJkaWdpdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsJYnJlYWs7Ci0rICAgICAgY2FzZSBwdW5jdDoKLSsJX19yZXQgPSBfX3djdHlwZV9sKCJwdW5jdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsJYnJlYWs7Ci0rICAgICAgY2FzZSB4ZGlnaXQ6Ci0rCV9fcmV0ID0gX193Y3R5cGVfbCgieGRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOwotKwlicmVhazsKLSsgICAgICBjYXNlIGFsbnVtOgotKwlfX3JldCA9IF9fd2N0eXBlX2woImFsbnVtIiwgX01fY19sb2NhbGVfY3R5cGUpOwotKwlicmVhazsKLSsgICAgICBjYXNlIGdyYXBoOgotKwlfX3JldCA9IF9fd2N0eXBlX2woImdyYXBoIiwgX01fY19sb2NhbGVfY3R5cGUpOwotKwlicmVhazsKLSsgICAgICBkZWZhdWx0OgotKwlfX3JldCA9IF9fd21hc2tfdHlwZSgpOwotKyAgICAgIH0KLSsgICAgcmV0dXJuIF9fcmV0OwotKyAgfQotKwotKyAgd2NoYXJfdAotKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvdXBwZXIod2NoYXJfdCBfX2MpIGNvbnN0Ci0rICB7IHJldHVybiBfX3Rvd3VwcGVyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KLSsKLSsgIGNvbnN0IHdjaGFyX3QqCi0rICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAotKyAgewotKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCi0rICAgICAgewotKyAgICAgICAgKl9fbG8gPSBfX3Rvd3VwcGVyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsgICAgICAgICsrX19sbzsKLSsgICAgICB9Ci0rICAgIHJldHVybiBfX2hpOwotKyAgfQotKwotKyAgd2NoYXJfdAotKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvbG93ZXIod2NoYXJfdCBfX2MpIGNvbnN0Ci0rICB7IHJldHVybiBfX3Rvd2xvd2VyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KLSsKLSsgIGNvbnN0IHdjaGFyX3QqCi0rICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAotKyAgewotKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCi0rICAgICAgewotKyAgICAgICAgKl9fbG8gPSBfX3Rvd2xvd2VyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsgICAgICAgICsrX19sbzsKLSsgICAgICB9Ci0rICAgIHJldHVybiBfX2hpOwotKyAgfQotKwotKyAgYm9vbAotKyAgY3R5cGU8d2NoYXJfdD46OgotKyAgZG9faXMobWFzayBfX20sIHdjaGFyX3QgX19jKSBjb25zdAotKyAgewotKyAgICAvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgotKyAgICAvLyBsaWJyYXJ5IGZvciBibGFuay4KLSsgICAgYm9vbCBfX3JldCA9IGZhbHNlOwotKyAgICBjb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOwotKyAgICBmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCi0rICAgICAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0KLSsJICAmJiBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKLSsJewotKwkgIF9fcmV0ID0gdHJ1ZTsKLSsJICBicmVhazsKLSsJfQotKyAgICByZXR1cm4gX19yZXQ7Ci0rICB9Ci0rCi0rICBjb25zdCB3Y2hhcl90KgotKyAgY3R5cGU8d2NoYXJfdD46OgotKyAgZG9faXMoY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgbWFzayogX192ZWMpIGNvbnN0Ci0rICB7Ci0rICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX3ZlYywgKytfX2xvKQotKyAgICAgIHsKLSsJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKLSsJLy8gbGlicmFyeSBmb3IgYmxhbmsuCi0rCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7Ci0rCW1hc2sgX19tID0gMDsKLSsJZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQotKwkgIGlmIChfX2lzd2N0eXBlX2woKl9fbG8sIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQotKwkgICAgX19tIHw9IF9NX2JpdFtfX2JpdGN1cl07Ci0rCSpfX3ZlYyA9IF9fbTsKLSsgICAgICB9Ci0rICAgIHJldHVybiBfX2hpOwotKyAgfQotKwotKyAgY29uc3Qgd2NoYXJfdCoKLSsgIGN0eXBlPHdjaGFyX3Q+OjoKLSsgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0Ci0rICB7Ci0rICAgIHdoaWxlIChfX2xvIDwgX19oaSAmJiAhdGhpcy0+ZG9faXMoX19tLCAqX19sbykpCi0rICAgICAgKytfX2xvOwotKyAgICByZXR1cm4gX19sbzsKLSsgIH0KLSsKLSsgIGNvbnN0IHdjaGFyX3QqCi0rICBjdHlwZTx3Y2hhcl90Pjo6Ci0rICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0Ci0rICB7Ci0rICAgIHdoaWxlIChfX2xvIDwgX19oaSAmJiB0aGlzLT5kb19pcyhfX20sICpfX2xvKSAhPSAwKQotKyAgICAgICsrX19sbzsKLSsgICAgcmV0dXJuIF9fbG87Ci0rICB9Ci0rCi0rICB3Y2hhcl90Ci0rICBjdHlwZTx3Y2hhcl90Pjo6Ci0rICBkb193aWRlbihjaGFyIF9fYykgY29uc3QKLSsgIHsgcmV0dXJuIF9NX3dpZGVuW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldOyB9Ci0rCi0rICBjb25zdCBjaGFyKgotKyAgY3R5cGU8d2NoYXJfdD46OgotKyAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgd2NoYXJfdCogX19kZXN0KSBjb25zdAotKyAgewotKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCi0rICAgICAgewotKwkqX19kZXN0ID0gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG8pXTsKLSsJKytfX2xvOwotKwkrK19fZGVzdDsKLSsgICAgICB9Ci0rICAgIHJldHVybiBfX2hpOwotKyAgfQotKwotKyAgY2hhcgotKyAgY3R5cGU8d2NoYXJfdD46OgotKyAgZG9fbmFycm93KHdjaGFyX3QgX193YywgY2hhciBfX2RmYXVsdCkgY29uc3QKLSsgIHsKLSsgICAgaWYgKF9fd2MgPj0gMCAmJiBfX3djIDwgMTI4ICYmIF9NX25hcnJvd19vaykKLSsgICAgICByZXR1cm4gX01fbmFycm93W19fd2NdOwotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7Ci0rI2VuZGlmCi0rICAgIGNvbnN0IGludCBfX2MgPSB3Y3RvYihfX3djKTsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2VuZGlmCi0rICAgIHJldHVybiAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7Ci0rICB9Ci0rCi0rICBjb25zdCB3Y2hhcl90KgotKyAgY3R5cGU8d2NoYXJfdD46OgotKyAgZG9fbmFycm93KGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIGNoYXIgX19kZmF1bHQsCi0rCSAgICBjaGFyKiBfX2Rlc3QpIGNvbnN0Ci0rICB7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKLSsjZW5kaWYKLSsgICAgaWYgKF9NX25hcnJvd19vaykKLSsgICAgICB3aGlsZSAoX19sbyA8IF9faGkpCi0rCXsKLSsJICBpZiAoKl9fbG8gPj0gMCAmJiAqX19sbyA8IDEyOCkKLSsJICAgICpfX2Rlc3QgPSBfTV9uYXJyb3dbKl9fbG9dOwotKwkgIGVsc2UKLSsJICAgIHsKLSsJICAgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKCpfX2xvKTsKLSsJICAgICAgKl9fZGVzdCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKLSsJICAgIH0KLSsJICArK19fbG87Ci0rCSAgKytfX2Rlc3Q7Ci0rCX0KLSsgICAgZWxzZQotKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKLSsJewotKwkgIGNvbnN0IGludCBfX2MgPSB3Y3RvYigqX19sbyk7Ci0rCSAgKl9fZGVzdCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKLSsJICArK19fbG87Ci0rCSAgKytfX2Rlc3Q7Ci0rCX0KLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2VuZGlmCi0rICAgIHJldHVybiBfX2hpOwotKyAgfQotKwotKyAgdm9pZAotKyAgY3R5cGU8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfY3R5cGUoKQotKyAgewotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7Ci0rI2VuZGlmCi0rICAgIHdpbnRfdCBfX2k7Ci0rICAgIGZvciAoX19pID0gMDsgX19pIDwgMTI4OyArK19faSkKLSsgICAgICB7Ci0rCWNvbnN0IGludCBfX2MgPSB3Y3RvYihfX2kpOwotKwlpZiAoX19jID09IEVPRikKLSsJICBicmVhazsKLSsJZWxzZQotKwkgIF9NX25hcnJvd1tfX2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKTsKLSsgICAgICB9Ci0rICAgIGlmIChfX2kgPT0gMTI4KQotKyAgICAgIF9NX25hcnJvd19vayA9IHRydWU7Ci0rICAgIGVsc2UKLSsgICAgICBfTV9uYXJyb3dfb2sgPSBmYWxzZTsKLSsgICAgZm9yIChzaXplX3QgX19qID0gMDsKLSsJIF9faiA8IHNpemVvZihfTV93aWRlbikgLyBzaXplb2Yod2ludF90KTsgKytfX2opCi0rICAgICAgX01fd2lkZW5bX19qXSA9IGJ0b3djKF9faik7Ci0rCi0rICAgIGZvciAoc2l6ZV90IF9fayA9IDA7IF9fayA8PSAxMTsgKytfX2spCi0rICAgICAgewotKwlfTV9iaXRbX19rXSA9IHN0YXRpY19jYXN0PG1hc2s+KF9JU2JpdChfX2spKTsKLSsJX01fd21hc2tbX19rXSA9IF9NX2NvbnZlcnRfdG9fd21hc2soX01fYml0W19fa10pOwotKyAgICAgIH0KLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKyAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2VuZGlmCi0rICB9Ci0rI2VuZGlmIC8vICBfR0xJQkNYWF9VU0VfV0NIQVJfVAotK30KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uMTM1OTRkOQotLS0tIC9kZXYvbnVsbAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKLUBAIC0wLDAgKzEsMTAwIEBACi0rLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQotKwotKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsvLwotKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKLSsvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKLSsvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotKy8vIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSsvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0rLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCi0rLy8gVVNBLgotKwotKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQotKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKLSsvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQotKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcwotKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgotKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSsKLSsvLwotKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIHZpcnR1YWwgZnVuY3Rpb25zCi0rLy8KLSsKLSsvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgotKwotKyNpbmNsdWRlIDxsb2NhbGU+Ci0rI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi0rI3dhcm5pbmcgZml4IGdldHRleHQgc3R1ZmYKLSsjZW5kaWYKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KLStleHRlcm4gIkMiIGNoYXIgKl9fZGNnZXR0ZXh0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCi0rCQkJICAgICBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KTsKLSsjdW5kZWYgZ2V0dGV4dAotKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQotKyNlbHNlCi0rI3VuZGVmIGdldHRleHQKLSsjZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKLSsjZW5kaWYKLSsKLStuYW1lc3BhY2Ugc3RkCi0rewotKyAgLy8gU3BlY2lhbGl6YXRpb25zLgotKyAgdGVtcGxhdGU8PgotKyAgICBzdHJpbmcKLSsgICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKLSsgICAgewotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKLSsgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KGdldHRleHQoX19kZmF1bHQuY19zdHIoKSkpOwotKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSsgICAgICByZXR1cm4gc3RyaW5nKF9fbXNnKTsKLSsjZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXwotKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKLSsgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKLSsgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7Ci0rICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOwotKyAgICAgIGZyZWUoX19vbGQpOwotKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOwotKyNlbHNlCi0rICAgICAgY29uc3QgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9fZGZhdWx0LmNfc3RyKCkpOwotKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOwotKyNlbmRpZgotKyAgICB9Ci0rCi0rI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIHdzdHJpbmcKLSsgICAgbWVzc2FnZXM8d2NoYXJfdD46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgd3N0cmluZyYgX19kZmF1bHQpIGNvbnN0Ci0rICAgIHsKLSsjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOwotKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKLSsgICAgICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKLSsjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KLSsgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7Ci0rICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV9tZXNzYWdlcyk7Ci0rICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOwotKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKLSsgICAgICBmcmVlKF9fb2xkKTsKLSsgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOwotKyMgZWxzZQotKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKLSsgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOwotKyMgZW5kaWYKLSsgICAgfQotKyNlbmRpZgotK30KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjE0MjQwNzgKLS0tLSAvZGV2L251bGwKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKLUBAIC0wLDAgKzEsMTE4IEBACi0rLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQotKwotKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsvLwotKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKLSsvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKLSsvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotKy8vIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSsvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0rLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCi0rLy8gVVNBLgotKwotKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQotKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKLSsvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQotKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcwotKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgotKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSsKLSsvLwotKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIGZ1bmN0aW9ucwotKy8vCi0rCi0rLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KLSsKLSsjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSsjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKLSsjZW5kaWYKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KLStleHRlcm4gIkMiIGNoYXIgKl9fdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKLStleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKLSsJCQkJICBjb25zdCBjaGFyICpkaXJuYW1lKTsKLSsjZWxzZQotKyN1bmRlZiBfX3RleHRkb21haW4KLSsjdW5kZWYgX19iaW5kdGV4dGRvbWFpbgotKyNkZWZpbmUgX190ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKLSsjZGVmaW5lIF9fYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCi0rI2VuZGlmCi0rCi0rICAvLyBOb24tdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgotKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgotKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoc2l6ZV90IF9fcmVmcykKLSsgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfZ2V0X2NfbG9jYWxlKCkpLAotKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfU19nZXRfY19uYW1lKCkpCi0rICAgICB7IH0KLSsKLSsgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KLSsgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCi0rCQkJCXNpemVfdCBfX3JlZnMpCi0rICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYykpLAotKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfX3MpCi0rICAgICB7Ci0rICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOwotKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKLSsgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOwotKyAgICAgfQotKwotKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgotKyAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCi0rICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCi0rCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0Ci0rICAgIHsKLSsgICAgICBfX2JpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7Ci0rICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7Ci0rICAgIH0KLSsKLSsgIC8vIFZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KLSsgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KLSsgICAgbWVzc2FnZXM8X0NoYXJUPjo6fm1lc3NhZ2VzKCkKLSsgICAgewotKyAgICAgIGlmIChfTV9uYW1lX21lc3NhZ2VzICE9IF9TX2dldF9jX25hbWUoKSkKLSsJZGVsZXRlIFtdIF9NX25hbWVfbWVzc2FnZXM7Ci0rICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7Ci0rICAgIH0KLSsKLSsgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KLSsgICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZwotKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLAotKwkJCSAgICAgIGNvbnN0IGxvY2FsZSYpIGNvbnN0Ci0rICAgIHsKLSsgICAgICAvLyBObyBlcnJvciBjaGVja2luZyBpcyBkb25lLCBhc3N1bWUgdGhlIGNhdGFsb2cgZXhpc3RzIGFuZCBjYW4KLSsgICAgICAvLyBiZSB1c2VkLgotKyAgICAgIF9fdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7Ci0rICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KLSsgICAgdm9pZAotKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdAotKyAgICB7IH0KLSsKLSsgICAvLyBtZXNzYWdlc19ieW5hbWUKLSsgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+Ci0rICAgICBtZXNzYWdlc19ieW5hbWU8X0NoYXJUPjo6bWVzc2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKLSsgICAgIDogbWVzc2FnZXM8X0NoYXJUPihfX3JlZnMpCi0rICAgICB7Ci0rICAgICAgIGlmICh0aGlzLT5fTV9uYW1lX21lc3NhZ2VzICE9IGxvY2FsZTo6ZmFjZXQ6Ol9TX2dldF9jX25hbWUoKSkKLSsJIGRlbGV0ZSBbXSB0aGlzLT5fTV9uYW1lX21lc3NhZ2VzOwotKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKLSsgICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7Ci0rICAgICAgIHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKLSsKLSsgICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKLSsJIHsKLSsJICAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcyk7Ci0rCSAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsKLSsJIH0KLSsgICAgIH0KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uYWE1MjczMQotLS0tIC9kZXYvbnVsbAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKLUBAIC0wLDAgKzEsNjkyIEBACi0rLy8gc3RkOjptb25leXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCi0rCi0rLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKy8vCi0rLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQotKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQotKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0rLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0rLy8gYW55IGxhdGVyIHZlcnNpb24uCi0rCi0rLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLSsvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSsvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKLSsvLyBVU0EuCi0rCi0rLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCi0rLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQotKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCi0rLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCi0rLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCi0rLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotKwotKy8vCi0rLy8gSVNPIEMrKyAxNDg4MjogMjIuMi42LjMuMiAgbW9uZXlwdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucwotKy8vCi0rCi0rLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KLSsKLSsjZGVmaW5lIF9MSUJDCi0rI2luY2x1ZGUgPGxvY2FsZT4KLSsjdW5kZWYgX0xJQkMKLSsjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KLSsKLSsjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSsjd2FybmluZyBvcHRpbWl6ZSB0aGlzIGZvciB1Y2xpYmMKLSsjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKLSsjZW5kaWYKLSsKLSsjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKLSsjZW5kaWYKLSsKLStuYW1lc3BhY2Ugc3RkCi0rewotKyAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6Ci0rICAvLyBzcGFjZSBub25lIHN5bWJvbCBzaWduIHZhbHVlCi0rICBtb25leV9iYXNlOjpwYXR0ZXJuCi0rICBtb25leV9iYXNlOjpfU19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VkZXMsIGNoYXIgX19zcGFjZSwgY2hhciBfX3Bvc24pCi0rICB7Ci0rICAgIHBhdHRlcm4gX19yZXQ7Ci0rCi0rICAgIC8vIFRoaXMgaW5zYW5lbHkgY29tcGxpY2F0ZWQgcm91dGluZSBhdHRlbXB0cyB0byBjb25zdHJ1Y3QgYSB2YWxpZAotKyAgICAvLyBwYXR0ZXJuIGZvciB1c2Ugd2l0aCBtb255ZXB1bmN0LiBBIGNvdXBsZSBvZiBpbnZhcmlhbnRzOgotKwotKyAgICAvLyBpZiAoX19wcmVjZWRlcykgc3ltYm9sIC0+IHZhbHVlCi0rICAgIC8vIGVsc2UgdmFsdWUgLT4gc3ltYm9sCi0rCi0rICAgIC8vIGlmIChfX3NwYWNlKSBzcGFjZQotKyAgICAvLyBlbHNlIG5vbmUKLSsKLSsgICAgLy8gbm9uZSA9PSBuZXZlciBmaXJzdAotKyAgICAvLyBzcGFjZSBuZXZlciBmaXJzdCBvciBsYXN0Ci0rCi0rICAgIC8vIEFueSBlbGVnYW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGFyZSB3ZWxjb21lLgotKyAgICBzd2l0Y2ggKF9fcG9zbikKLSsgICAgICB7Ci0rICAgICAgY2FzZSAwOgotKyAgICAgIGNhc2UgMToKLSsJLy8gMSBUaGUgc2lnbiBwcmVjZWRlcyB0aGUgdmFsdWUgYW5kIHN5bWJvbC4KLSsJX19yZXQuZmllbGRbMF0gPSBzaWduOwotKwlpZiAoX19zcGFjZSkKLSsJICB7Ci0rCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24uCi0rCSAgICBpZiAoX19wcmVjZWRlcykKLSsJICAgICAgewotKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7Ci0rCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOwotKwkgICAgICB9Ci0rCSAgICBlbHNlCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7Ci0rCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsKLSsJICAgICAgfQotKwkgICAgX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKLSsJICB9Ci0rCWVsc2UKLSsJICB7Ci0rCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24gYW5kIGVuZHMgd2l0aCBub25lLgotKwkgICAgaWYgKF9fcHJlY2VkZXMpCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOwotKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKLSsJICAgICAgfQotKwkgICAgZWxzZQotKwkgICAgICB7Ci0rCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOwotKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7Ci0rCSAgICAgIH0KLSsJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKLSsJICB9Ci0rCWJyZWFrOwotKyAgICAgIGNhc2UgMjoKLSsJLy8gMiBUaGUgc2lnbiBmb2xsb3dzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgotKwlpZiAoX19zcGFjZSkKLSsJICB7Ci0rCSAgICAvLyBQYXR0ZXJuIGVpdGhlciBlbmRzIHdpdGggc2lnbi4KLSsJICAgIGlmIChfX3ByZWNlZGVzKQotKwkgICAgICB7Ci0rCQlfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKLSsJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7Ci0rCSAgICAgIH0KLSsJICAgIGVsc2UKLSsJICAgICAgewotKwkJX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKLSsJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOwotKwkgICAgICB9Ci0rCSAgICBfX3JldC5maWVsZFsxXSA9IHNwYWNlOwotKwkgICAgX19yZXQuZmllbGRbM10gPSBzaWduOwotKwkgIH0KLSsJZWxzZQotKwkgIHsKLSsJICAgIC8vIFBhdHRlcm4gZW5kcyB3aXRoIHNpZ24gdGhlbiBub25lLgotKwkgICAgaWYgKF9fcHJlY2VkZXMpCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOwotKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKLSsJICAgICAgfQotKwkgICAgZWxzZQotKwkgICAgICB7Ci0rCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOwotKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7Ci0rCSAgICAgIH0KLSsJICAgIF9fcmV0LmZpZWxkWzJdID0gc2lnbjsKLSsJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKLSsJICB9Ci0rCWJyZWFrOwotKyAgICAgIGNhc2UgMzoKLSsJLy8gMyBUaGUgc2lnbiBpbW1lZGlhdGVseSBwcmVjZWRlcyB0aGUgc3ltYm9sLgotKwlpZiAoX19wcmVjZWRlcykKLSsJICB7Ci0rCSAgICBfX3JldC5maWVsZFswXSA9IHNpZ247Ci0rCSAgICBfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKLSsJICAgIGlmIChfX3NwYWNlKQotKwkgICAgICB7Ci0rCQlfX3JldC5maWVsZFsyXSA9IHNwYWNlOwotKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKLSsJICAgICAgfQotKwkgICAgZWxzZQotKwkgICAgICB7Ci0rCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOwotKwkJX19yZXQuZmllbGRbM10gPSBub25lOwotKwkgICAgICB9Ci0rCSAgfQotKwllbHNlCi0rCSAgewotKwkgICAgX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKLSsJICAgIGlmIChfX3NwYWNlKQotKwkgICAgICB7Ci0rCQlfX3JldC5maWVsZFsxXSA9IHNwYWNlOwotKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOwotKwkJX19yZXQuZmllbGRbM10gPSBzeW1ib2w7Ci0rCSAgICAgIH0KLSsJICAgIGVsc2UKLSsJICAgICAgewotKwkJX19yZXQuZmllbGRbMV0gPSBzaWduOwotKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7Ci0rCQlfX3JldC5maWVsZFszXSA9IG5vbmU7Ci0rCSAgICAgIH0KLSsJICB9Ci0rCWJyZWFrOwotKyAgICAgIGNhc2UgNDoKLSsJLy8gNCBUaGUgc2lnbiBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBzeW1ib2wuCi0rCWlmIChfX3ByZWNlZGVzKQotKwkgIHsKLSsJICAgIF9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOwotKwkgICAgX19yZXQuZmllbGRbMV0gPSBzaWduOwotKwkgICAgaWYgKF9fc3BhY2UpCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7Ci0rCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOwotKwkgICAgICB9Ci0rCSAgICBlbHNlCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7Ci0rCQlfX3JldC5maWVsZFszXSA9IG5vbmU7Ci0rCSAgICAgIH0KLSsJICB9Ci0rCWVsc2UKLSsJICB7Ci0rCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOwotKwkgICAgaWYgKF9fc3BhY2UpCi0rCSAgICAgIHsKLSsJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7Ci0rCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKLSsJCV9fcmV0LmZpZWxkWzNdID0gc2lnbjsKLSsJICAgICAgfQotKwkgICAgZWxzZQotKwkgICAgICB7Ci0rCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKLSsJCV9fcmV0LmZpZWxkWzJdID0gc2lnbjsKLSsJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKLSsJICAgICAgfQotKwkgIH0KLSsJYnJlYWs7Ci0rICAgICAgZGVmYXVsdDoKLSsJOwotKyAgICAgIH0KLSsgICAgcmV0dXJuIF9fcmV0OwotKyAgfQotKwotKyAgdGVtcGxhdGU8PgotKyAgICB2b2lkCi0rICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKLSsJCQkJCQkgICAgIGNvbnN0IGNoYXIqKQotKyAgICB7Ci0rICAgICAgaWYgKCFfTV9kYXRhKQotKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCB0cnVlPjsKLSsKLSsgICAgICBpZiAoIV9fY2xvYykKLSsJewotKwkgIC8vICJDIiBsb2NhbGUKLSsJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOwotKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOwotKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOwotKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOwotKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOwotKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKLSsJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOwotKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47Ci0rCi0rCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKLSsJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOwotKwl9Ci0rICAgICAgZWxzZQotKwl7Ci0rCSAgLy8gTmFtZWQgbG9jYWxlLgotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULAotKwkJCQkJCQlfX2Nsb2MpKTsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fVEhPVVNBTkRTX1NFUCwKLSsJCQkJCQkJX19jbG9jKSk7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7Ci0rCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOwotKwotKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKLSsJICBpZiAoIV9fbnBvc24pCi0rCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKLSsJICBlbHNlCi0rCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwKLSsJCQkJCQkJX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7Ci0rCi0rCSAgLy8gX0ludGwgPT0gdHJ1ZQotKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOwotKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsCi0rCQkJCQkJICAgICAgX19jbG9jKSk7Ci0rCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOwotKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7Ci0rCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOwotKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCi0rCQkJCQkJCV9fcHBvc24pOwotKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKLSsJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOwotKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCi0rCQkJCQkJCV9fbnBvc24pOwotKwl9Ci0rICAgIH0KLSsKLSsgIHRlbXBsYXRlPD4KLSsgICAgdm9pZAotKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAotKwkJCQkJCSAgICAgIGNvbnN0IGNoYXIqKQotKyAgICB7Ci0rICAgICAgaWYgKCFfTV9kYXRhKQotKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCBmYWxzZT47Ci0rCi0rICAgICAgaWYgKCFfX2Nsb2MpCi0rCXsKLSsJICAvLyAiQyIgbG9jYWxlCi0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOwotKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7Ci0rCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gIiI7Ci0rCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIiI7Ci0rCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7Ci0rCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKLSsJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOwotKwotKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCi0rCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsKLSsJfQotKyAgICAgIGVsc2UKLSsJewotKwkgIC8vIE5hbWVkIGxvY2FsZS4KLSsJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fREVDSU1BTF9QT0lOVCwKLSsJCQkJCQkJX19jbG9jKSk7Ci0rCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX1RIT1VTQU5EU19TRVAsCi0rCQkJCQkJCV9fY2xvYykpOwotKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOwotKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKLSsKLSsJICBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKLSsJICBpZiAoIV9fbnBvc24pCi0rCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKLSsJICBlbHNlCi0rCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwKLSsJCQkJCQkJX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7Ci0rCi0rCSAgLy8gX0ludGwgPT0gZmFsc2UKLSsJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKLSsJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOwotKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOwotKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKLSsJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKLSsJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAotKwkJCQkJCQlfX3Bwb3NuKTsKLSsJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKLSsJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7Ci0rCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKLSsJCQkJCQkJX19ucG9zbik7Ci0rCX0KLSsgICAgfQotKwotKyAgdGVtcGxhdGU8PgotKyAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCi0rICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KLSsKLSsgIHRlbXBsYXRlPD4KLSsgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCkKLSsgICAgeyBkZWxldGUgX01fZGF0YTsgfQotKwotKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAotKyAgdGVtcGxhdGU8PgotKyAgICB2b2lkCi0rICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKwkJCQkJCQljb25zdCBjaGFyKikKLSsjZWxzZQotKwkJCQkJCQljb25zdCBjaGFyKiBfX25hbWUpCi0rI2VuZGlmCi0rICAgIHsKLSsgICAgICBpZiAoIV9NX2RhdGEpCi0rCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIHRydWU+OwotKwotKyAgICAgIGlmICghX19jbG9jKQotKwl7Ci0rCSAgLy8gIkMiIGxvY2FsZQotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOwotKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOwotKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7Ci0rCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7Ci0rCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7Ci0rCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKLSsJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOwotKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7Ci0rCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7Ci0rCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKLSsJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOwotKwotKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgotKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCi0rCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KLSsJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7Ci0rCX0KLSsgICAgICBlbHNlCi0rCXsKLSsJICAvLyBOYW1lZCBsb2NhbGUuCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKLSsjZWxzZQotKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgotKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKLSsJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOwotKyNlbmRpZgotKwotKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQotKyNlbmRpZgotKyNpZmRlZiBfX1VDTElCQ19fCi0rIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOwotKyMgZWxzZQotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7Ci0rCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKLSsjIGVuZGlmCi0rI2Vsc2UKLSsJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7Ci0rCi0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKLSsjZW5kaWYKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKLSsKLSsJICBjb25zdCBjaGFyKiBfX2Nwb3NzaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKLSsJICBjb25zdCBjaGFyKiBfX2NuZWdzaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwgX19jbG9jKTsKLSsJICBjb25zdCBjaGFyKiBfX2NjdXJyID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOwotKwotKwkgIHdjaGFyX3QqIF9fd2NzX3BzID0gMDsKLSsJICB3Y2hhcl90KiBfX3djc19ucyA9IDA7Ci0rCSAgY29uc3QgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOwotKwkgIHRyeQotKwkgICAgewotKwkgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKLSsJICAgICAgc2l6ZV90IF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOwotKwkgICAgICBpZiAoX19sZW4pCi0rCQl7Ci0rCQkgICsrX19sZW47Ci0rCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOwotKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKLSsJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKLSsJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOwotKwkJfQotKwkgICAgICBlbHNlCi0rCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOwotKwkgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7Ci0rCi0rCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOwotKwkgICAgICBpZiAoIV9fbnBvc24pCi0rCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7Ci0rCSAgICAgIGVsc2UgaWYgKF9fbGVuKQotKwkJewotKwkJICArK19fbGVuOwotKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKLSsJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xlbl07Ci0rCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7Ci0rCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKLSsJCX0KLSsJICAgICAgZWxzZQotKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKLSsJICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOwotKwotKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgotKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsKLSsJICAgICAgaWYgKF9fbGVuKQotKwkJewotKwkJICArK19fbGVuOwotKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKLSsJCSAgd2NoYXJfdCogX193Y3MgPSBuZXcgd2NoYXJfdFtfX2xlbl07Ci0rCQkgIG1ic3J0b3djcyhfX3djcywgJl9fY2N1cnIsIF9fbGVuLCAmX19zdGF0ZSk7Ci0rCQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX193Y3M7Ci0rCQl9Ci0rCSAgICAgIGVsc2UKLSsJCV9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOwotKwkgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKLSsJICAgIH0KLSsJICBjYXRjaCAoLi4uKQotKwkgICAgewotKwkgICAgICBkZWxldGUgX01fZGF0YTsKLSsJICAgICAgX01fZGF0YSA9IDA7Ci0rCSAgICAgIGRlbGV0ZSBfX3djc19wczsKLSsJICAgICAgZGVsZXRlIF9fd2NzX25zOwotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSsjZWxzZQotKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7Ci0rCSAgICAgIGZyZWUoX19vbGQpOwotKyNlbmRpZgotKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKLSsJICAgIH0KLSsKLSsJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX0ZSQUNfRElHSVRTLAotKwkJCQkJCSAgICAgIF9fY2xvYykpOwotKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKLSsJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOwotKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKLSsJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAotKwkJCQkJCQlfX3Bwb3NuKTsKLSsJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9DU19QUkVDRURFUywgX19jbG9jKSk7Ci0rCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKLSsJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAotKwkJCQkJCQlfX25wb3NuKTsKLSsKLSsjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotKwkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSsjZWxzZQotKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKLSsJICBmcmVlKF9fb2xkKTsKLSsjZW5kaWYKLSsJfQotKyAgICB9Ci0rCi0rICB0ZW1wbGF0ZTw+Ci0rICB2b2lkCi0rICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rCQkJCQkJICAgICAgIGNvbnN0IGNoYXIqKQotKyNlbHNlCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbmFtZSkKLSsjZW5kaWYKLSsgIHsKLSsgICAgaWYgKCFfTV9kYXRhKQotKyAgICAgIF9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIGZhbHNlPjsKLSsKLSsgICAgaWYgKCFfX2Nsb2MpCi0rCXsKLSsJICAvLyAiQyIgbG9jYWxlCi0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7Ci0rCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKLSsgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7Ci0rCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7Ci0rCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7Ci0rCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKLSsJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOwotKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7Ci0rCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7Ci0rCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKLSsJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOwotKwotKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgotKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCi0rCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KLSsJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7Ci0rCX0KLSsgICAgICBlbHNlCi0rCXsKLSsJICAvLyBOYW1lZCBsb2NhbGUuCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKLSsjZWxzZQotKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgotKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKLSsJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOwotKyNlbmRpZgotKwotKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQotKyNlbmRpZgotKyNpZmRlZiBfX1VDTElCQ19fCi0rIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOwotKyMgZWxzZQotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7Ci0rCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKLSsjIGVuZGlmCi0rI2Vsc2UKLSsgICAgICAgICAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OwotKwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7Ci0rI2VuZGlmCi0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7Ci0rICAgICAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOwotKwotKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOwotKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOwotKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19DVVJSRU5DWV9TWU1CT0wsIF9fY2xvYyk7Ci0rCi0rCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOwotKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKLSsJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKLSsJICB0cnkKLSsgICAgICAgICAgICB7Ci0rICAgICAgICAgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKLSsgICAgICAgICAgICAgIHNpemVfdCBfX2xlbjsKLSsgICAgICAgICAgICAgIF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOwotKyAgICAgICAgICAgICAgaWYgKF9fbGVuKQotKyAgICAgICAgICAgICAgICB7Ci0rCQkgICsrX19sZW47Ci0rCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOwotKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKLSsJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKLSsJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOwotKwkJfQotKwkgICAgICBlbHNlCi0rCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOwotKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOwotKwotKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NuZWdzaWduKTsKLSsJICAgICAgaWYgKCFfX25wb3NuKQotKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiKCkiOwotKwkgICAgICBlbHNlIGlmIChfX2xlbikKLSsJCXsKLSsJCSAgKytfX2xlbjsKLSsJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7Ci0rCQkgIF9fd2NzX25zID0gbmV3IHdjaGFyX3RbX19sZW5dOwotKwkJICBtYnNydG93Y3MoX193Y3NfbnMsICZfX2NuZWdzaWduLCBfX2xlbiwgJl9fc3RhdGUpOwotKwkJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX193Y3NfbnM7Ci0rCQl9Ci0rCSAgICAgIGVsc2UKLSsJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7Ci0rICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7Ci0rCi0rCSAgICAgIC8vIF9JbnRsID09IHRydWUuCi0rCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOwotKwkgICAgICBpZiAoX19sZW4pCi0rCQl7Ci0rCQkgICsrX19sZW47Ci0rCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOwotKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKLSsJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKLSsJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKLSsJCX0KLSsJICAgICAgZWxzZQotKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7Ci0rICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKLSsJICAgIH0KLSsgICAgICAgICAgY2F0Y2ggKC4uLikKLSsJICAgIHsKLSsJICAgICAgZGVsZXRlIF9NX2RhdGE7Ci0rICAgICAgICAgICAgICBfTV9kYXRhID0gMDsKLSsJICAgICAgZGVsZXRlIF9fd2NzX3BzOwotKwkgICAgICBkZWxldGUgX193Y3NfbnM7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOwotKyNlbHNlCi0rCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKLSsJICAgICAgZnJlZShfX29sZCk7Ci0rI2VuZGlmCi0rICAgICAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKLSsJICAgIH0KLSsKLSsJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOwotKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOwotKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKLSsJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKLSsJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAotKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bwb3NuKTsKLSsJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKLSsJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7Ci0rCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKLSsJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ucG9zbik7Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsJICBfX3VzZWxvY2FsZShfX29sZCk7Ci0rI2Vsc2UKLSsJICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7Ci0rCSAgZnJlZShfX29sZCk7Ci0rI2VuZGlmCi0rCX0KLSsgICAgfQotKwotKyAgdGVtcGxhdGU8PgotKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCi0rICAgIHsKLSsgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQotKwlkZWxldGUgW10gX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsKLSsgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCi0rICAgICAgICAgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkKLSsJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247Ci0rICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpCi0rCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsKLSsgICAgICBkZWxldGUgX01fZGF0YTsKLSsgICAgfQotKwotKyAgdGVtcGxhdGU8PgotKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQotKyAgICB7Ci0rICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSkKLSsJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247Ci0rICAgICAgaWYgKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQotKyAgICAgICAgICAmJiB3Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9IDApCi0rCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOwotKyAgICAgIGlmIChfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQotKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7Ci0rICAgICAgZGVsZXRlIF9NX2RhdGE7Ci0rICAgIH0KLSsjZW5kaWYKLSt9Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi44ODNlYzFhCi0tLS0gL2Rldi9udWxsCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi1AQCAtMCwwICsxLDE2MCBAQAotKy8vIHN0ZDo6bnVtcHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KLSsKLSsvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rLy8KLSsvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCi0rLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCi0rLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSsvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSsvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0rLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAotKy8vIFVTQS4KLSsKLSsvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKLSsvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCi0rLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKLSsvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKLSsvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKLSsvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0rCi0rLy8KLSsvLyBJU08gQysrIDE0ODgyOiAyMi4yLjMuMS4yICBudW1wdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucwotKy8vCi0rCi0rLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KLSsKLSsjZGVmaW5lIF9MSUJDCi0rI2luY2x1ZGUgPGxvY2FsZT4KLSsjdW5kZWYgX0xJQkMKLSsjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KLSsKLSsjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSsjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKLSsjZW5kaWYKLSsjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKLSsjZW5kaWYKLSsKLStuYW1lc3BhY2Ugc3RkCi0rewotKyAgdGVtcGxhdGU8PgotKyAgICB2b2lkCi0rICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQotKyAgICB7Ci0rICAgICAgaWYgKCFfTV9kYXRhKQotKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8Y2hhcj47Ci0rCi0rICAgICAgaWYgKCFfX2Nsb2MpCi0rCXsKLSsJICAvLyAiQyIgbG9jYWxlCi0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKLSsKLSsJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOwotKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7Ci0rCi0rCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpCi0rCSAgICBfTV9kYXRhLT5fTV9hdG9tc19vdXRbX19pXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX291dFtfX2ldOwotKwotKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQotKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal07Ci0rCX0KLSsgICAgICBlbHNlCi0rCXsKLSsJICAvLyBOYW1lZCBsb2NhbGUuCi0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKERFQ0lNQUxfUE9JTlQsCi0rCQkJCQkJCV9fY2xvYykpOwotKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChUSE9VU0FORFNfU0VQLAotKwkJCQkJCQlfX2Nsb2MpKTsKLSsKLSsJICAvLyBDaGVjayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBncm91cGluZy4KLSsJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSAnXDAnKQotKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKLSsJICBlbHNlCi0rCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChHUk9VUElORywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKLSsJfQotKwotKyAgICAgIC8vIE5COiBUaGVyZSBpcyBubyB3YXkgdG8gZXh0YWN0IHRoaXMgaW5mbyBmcm9tIHBvc2l4IGxvY2FsZXMuCi0rICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woWUVTU1RSLCBfX2Nsb2MpOwotKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lID0gInRydWUiOwotKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lX3NpemUgPSA0OwotKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChOT1NUUiwgX19jbG9jKTsKLSsgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWUgPSAiZmFsc2UiOwotKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKLSsgICAgfQotKwotKyAgdGVtcGxhdGU8PgotKyAgICBudW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCkKLSsgICAgeyBkZWxldGUgX01fZGF0YTsgfQotKwotKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAotKyAgdGVtcGxhdGU8PgotKyAgICB2b2lkCi0rICAgIG51bXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQotKyAgICB7Ci0rICAgICAgaWYgKCFfTV9kYXRhKQotKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8d2NoYXJfdD47Ci0rCi0rICAgICAgaWYgKCFfX2Nsb2MpCi0rCXsKLSsJICAvLyAiQyIgbG9jYWxlCi0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKLSsJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKLSsKLSsJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKLSsKLSsJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KLSsJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKLSsJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0KLSsJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV0pOwotKwotKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQotKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9Ci0rCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal0pOwotKwl9Ci0rICAgICAgZWxzZQotKwl7Ci0rCSAgLy8gTmFtZWQgbG9jYWxlLgotKwkgIC8vIE5COiBJbiB0aGUgR05VIG1vZGVsIHdjaGFyX3QgaXMgYWx3YXlzIDMyIGJpdCB3aWRlLgotKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OwotKwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKLSsKLSsJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKLSsJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7Ci0rCSAgZWxzZQotKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woR1JPVVBJTkcsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7Ci0rCX0KLSsKLSsgICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3NpeCBsb2NhbGVzLgotKyAgICAgIC8vIF9NX3RydWVuYW1lID0gX19ubF9sYW5naW5mb19sKFlFU1NUUiwgX19jbG9jKTsKLSsgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZSA9IEwidHJ1ZSI7Ci0rICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7Ci0rICAgICAgLy8gX01fZmFsc2VuYW1lID0gX19ubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOwotKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZSA9IEwiZmFsc2UiOwotKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKLSsgICAgfQotKwotKyAgdGVtcGxhdGU8PgotKyAgICBudW1wdW5jdDx3Y2hhcl90Pjo6fm51bXB1bmN0KCkKLSsgICAgeyBkZWxldGUgX01fZGF0YTsgfQotKyAjZW5kaWYKLSt9Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi5lMDcwN2Q3Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCi1AQCAtMCwwICsxLDQwNiBAQAotKy8vIHN0ZDo6dGltZV9nZXQsIHN0ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCi0rCi0rLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKy8vCi0rLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQotKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQotKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0rLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0rLy8gYW55IGxhdGVyIHZlcnNpb24uCi0rCi0rLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsKLSsvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSsvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKLSsvLyBVU0EuCi0rCi0rLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCi0rLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQotKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCi0rLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCi0rLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCi0rLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5Ci0rLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotKwotKy8vCi0rLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IHZpcnR1YWwgZnVuY3Rpb25zCi0rLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IHZpcnR1YWwgZnVuY3Rpb25zCi0rLy8KLSsKLSsvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgotKwotKyNpbmNsdWRlIDxsb2NhbGU+Ci0rI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+Ci0rCi0rI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi0rI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0Ci0rI2VuZGlmCi0rI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCi0rI2VuZGlmCi0rCi0rbmFtZXNwYWNlIHN0ZAotK3sKLSsgIHRlbXBsYXRlPD4KLSsgICAgdm9pZAotKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6Ci0rICAgIF9NX3B1dChjaGFyKiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3QgY2hhciogX19mb3JtYXQsCi0rCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdAotKyAgICB7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSsgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3N0cmZ0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCi0rCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOwotKyNlbHNlCi0rICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOwotKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKLSsgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdHJmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7Ci0rICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOwotKyAgICAgIGZyZWUoX19vbGQpOwotKyNlbmRpZgotKyAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgotKyAgICAgIGlmIChfX2xlbiA9PSAwKQotKwlfX3NbMF0gPSAnXDAnOwotKyAgICB9Ci0rCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIHZvaWQKLSsgICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQotKyAgICB7Ci0rICAgICAgaWYgKCFfTV9kYXRhKQotKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPGNoYXI+OwotKwotKyAgICAgIGlmICghX19jbG9jKQotKwl7Ci0rCSAgLy8gIkMiIGxvY2FsZQotKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOwotKwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gIiVtLyVkLyV5IjsKLSsJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSAiJW0vJWQvJXkiOwotKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gIiVIOiVNOiVTIjsKLSsJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSAiJUg6JU06JVMiOwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSAiIjsKLSsJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9ICIiOwotKwkgIF9NX2RhdGEtPl9NX2FtID0gIkFNIjsKLSsJICBfTV9kYXRhLT5fTV9wbSA9ICJQTSI7Ci0rCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gIiI7Ci0rCi0rCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KLSsJICBfTV9kYXRhLT5fTV9kYXkxID0gIlN1bmRheSI7Ci0rCSAgX01fZGF0YS0+X01fZGF5MiA9ICJNb25kYXkiOwotKwkgIF9NX2RhdGEtPl9NX2RheTMgPSAiVHVlc2RheSI7Ci0rCSAgX01fZGF0YS0+X01fZGF5NCA9ICJXZWRuZXNkYXkiOwotKwkgIF9NX2RhdGEtPl9NX2RheTUgPSAiVGh1cnNkYXkiOwotKwkgIF9NX2RhdGEtPl9NX2RheTYgPSAiRnJpZGF5IjsKLSsJICBfTV9kYXRhLT5fTV9kYXk3ID0gIlNhdHVyZGF5IjsKLSsKLSsJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgotKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gIlN1biI7Ci0rCSAgX01fZGF0YS0+X01fYWRheTIgPSAiTW9uIjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5MyA9ICJUdWUiOwotKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gIldlZCI7Ci0rCSAgX01fZGF0YS0+X01fYWRheTUgPSAiVGh1IjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NiA9ICJGcmkiOwotKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gIlNhdCI7Ci0rCi0rCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KLSsJICBfTV9kYXRhLT5fTV9tb250aDAxID0gIkphbnVhcnkiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSAiRmVicnVhcnkiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSAiTWFyY2giOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSAiQXByaWwiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSAiTWF5IjsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gIkp1bmUiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSAiSnVseSI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwOCA9ICJBdWd1c3QiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSAiU2VwdGVtYmVyIjsKLSsJICBfTV9kYXRhLT5fTV9tb250aDEwID0gIk9jdG9iZXIiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSAiTm92ZW1iZXIiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSAiRGVjZW1iZXIiOwotKwotKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9ICJKYW4iOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gIkZlYiI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSAiTWFyIjsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9ICJBcHIiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gIk1heSI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSAiSnVuIjsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9ICJKdWwiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gIkF1ZyI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSAiU2VwIjsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9ICJPY3QiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gIk5vdiI7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSAiRGVjIjsKLSsJfQotKyAgICAgIGVsc2UKLSsJewotKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7Ci0rCi0rCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9GTVQsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChUX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX1RfRk1ULCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9UX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfRF9UX0ZNVCwKLSsJCQkJCQkJICAgICBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2FtID0gX19ubF9sYW5naW5mb19sKEFNX1NUUiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9wbSA9IF9fbmxfbGFuZ2luZm9fbChQTV9TVFIsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1UX0FNUE0sIF9fY2xvYyk7Ci0rCi0rCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KLSsJICBfTV9kYXRhLT5fTV9kYXkxID0gX19ubF9sYW5naW5mb19sKERBWV8xLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBfX25sX2xhbmdpbmZvX2woREFZXzIsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXk0ID0gX19ubF9sYW5naW5mb19sKERBWV80LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBfX25sX2xhbmdpbmZvX2woREFZXzUsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXk3ID0gX19ubF9sYW5naW5mb19sKERBWV83LCBfX2Nsb2MpOwotKwotKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCi0rCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8yLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gX19ubF9sYW5naW5mb19sKEFCREFZXzMsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV81LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzYsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNywgX19jbG9jKTsKLSsKLSsJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDAzID0gX19ubF9sYW5naW5mb19sKE1PTl8zLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX25sX2xhbmdpbmZvX2woTU9OXzQsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fbmxfbGFuZ2luZm9fbChNT05fNSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gX19ubF9sYW5naW5mb19sKE1PTl82LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX25sX2xhbmdpbmZvX2woTU9OXzcsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fbmxfbGFuZ2luZm9fbChNT05fOCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gX19ubF9sYW5naW5mb19sKE1PTl85LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEwLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzExLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEyLCBfX2Nsb2MpOwotKwotKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzIsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl80LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzUsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl83LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzgsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMiwgX19jbG9jKTsKLSsJfQotKyAgICB9Ci0rCi0rI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIHZvaWQKLSsgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46OgotKyAgICBfTV9wdXQod2NoYXJfdCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IHdjaGFyX3QqIF9fZm9ybWF0LAotKwkgICBjb25zdCB0bSogX190bSkgY29uc3QKLSsgICAgewotKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rICAgICAgX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QpOwotKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKLSsJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7Ci0rI2Vsc2UKLSsgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7Ci0rICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOwotKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHdjc2Z0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKLSsgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7Ci0rICAgICAgZnJlZShfX29sZCk7Ci0rI2VuZGlmCi0rICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCi0rICAgICAgaWYgKF9fbGVuID09IDApCi0rCV9fc1swXSA9IEwnXDAnOwotKyAgICB9Ci0rCi0rICB0ZW1wbGF0ZTw+Ci0rICAgIHZvaWQKLSsgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQotKyAgICB7Ci0rICAgICAgaWYgKCFfTV9kYXRhKQotKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPHdjaGFyX3Q+OwotKwotKyN3YXJuaW5nIHdpZGUgdGltZSBzdHVmZgotKy8vICAgICAgIGlmICghX19jbG9jKQotKwl7Ci0rCSAgLy8gIkMiIGxvY2FsZQotKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOwotKwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gTCIlbS8lZC8leSI7Ci0rCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gTCIlbS8lZC8leSI7Ci0rCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKLSsJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKLSsJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gTCIiOwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gTCIiOwotKwkgIF9NX2RhdGEtPl9NX2FtID0gTCJBTSI7Ci0rCSAgX01fZGF0YS0+X01fcG0gPSBMIlBNIjsKLSsJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBMIiI7Ci0rCi0rCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KLSsJICBfTV9kYXRhLT5fTV9kYXkxID0gTCJTdW5kYXkiOwotKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBMIk1vbmRheSI7Ci0rCSAgX01fZGF0YS0+X01fZGF5MyA9IEwiVHVlc2RheSI7Ci0rCSAgX01fZGF0YS0+X01fZGF5NCA9IEwiV2VkbmVzZGF5IjsKLSsJICBfTV9kYXRhLT5fTV9kYXk1ID0gTCJUaHVyc2RheSI7Ci0rCSAgX01fZGF0YS0+X01fZGF5NiA9IEwiRnJpZGF5IjsKLSsJICBfTV9kYXRhLT5fTV9kYXk3ID0gTCJTYXR1cmRheSI7Ci0rCi0rCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KLSsJICBfTV9kYXRhLT5fTV9hZGF5MSA9IEwiU3VuIjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5MiA9IEwiTW9uIjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5MyA9IEwiVHVlIjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NCA9IEwiV2VkIjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NSA9IEwiVGh1IjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NiA9IEwiRnJpIjsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NyA9IEwiU2F0IjsKLSsKLSsJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBMIkphbnVhcnkiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBMIkZlYnJ1YXJ5IjsKLSsJICBfTV9kYXRhLT5fTV9tb250aDAzID0gTCJNYXJjaCI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IEwiQXByaWwiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBMIk1heSI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IEwiSnVuZSI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IEwiSnVseSI7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IEwiQXVndXN0IjsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gTCJTZXB0ZW1iZXIiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBMIk9jdG9iZXIiOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBMIk5vdmVtYmVyIjsKLSsJICBfTV9kYXRhLT5fTV9tb250aDEyID0gTCJEZWNlbWJlciI7Ci0rCi0rCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gTCJKYW4iOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gTCJGZWIiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gTCJNYXIiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gTCJBcHIiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gTCJNYXkiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gTCJKdW4iOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gTCJKdWwiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gTCJBdWciOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gTCJTZXAiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gTCJPY3QiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gTCJOb3YiOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gTCJEZWMiOwotKwl9Ci0rI2lmIDAKLSsgICAgICBlbHNlCi0rCXsKLSsJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOwotKwotKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90ICpfX3c7IH0gX191OwotKwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dUX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9UX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX1RfRk1ULCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfRF9UX0ZNVCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FNX1NUUiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbSA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1BNX1NUUiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9wbSA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1UX0FNUE0sIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX191Ll9fdzsKLSsKLSsJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXkxID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzIsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8zLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXk0ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzUsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV82LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9kYXk3ID0gX191Ll9fdzsKLSsKLSsJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8xLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMiwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzMsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV80LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzYsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV83LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX191Ll9fdzsKLSsKLSsJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDAxID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzIsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8zLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzUsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl82LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzgsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl85LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTAsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9tb250aDExID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEyLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX3UuX193OwotKwotKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzIsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8zLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNCwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzUsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl82LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNywgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzgsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl85LCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gX191Ll9fdzsKLSsJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTAsIF9fY2xvYyk7Ci0rCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBfX3UuX193OwotKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMSwgX19jbG9jKTsKLSsJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fdS5fX3c7Ci0rCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEyLCBfX2Nsb2MpOwotKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX191Ll9fdzsKLSsJfQotKyNlbmRpZiAvLyAwCi0rICAgIH0KLSsjZW5kaWYKLSt9Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uYmE4ZTg1OAotLS0tIC9kZXYvbnVsbAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCi1AQCAtMCwwICsxLDY4IEBACi0rLy8gc3RkOjp0aW1lX2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KLSsKLSsvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rLy8KLSsvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCi0rLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCi0rLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSsvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSsvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0rLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAotKy8vIFVTQS4KLSsKLSsvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKLSsvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCi0rLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKLSsvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKLSsvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQotKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKLSsvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKLSsvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0rCi0rLy8KLSsvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgZnVuY3Rpb25zCi0rLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IGZ1bmN0aW9ucwotKy8vCi0rCi0rLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KLSsKLSsgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KLSsgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcykKLSsgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCi0rICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKLSsgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9Ci0rCi0rICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+Ci0rICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY2FjaGVfdHlwZSogX19jYWNoZSwgc2l6ZV90IF9fcmVmcykKLSsgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKF9fY2FjaGUpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCi0rICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKLSsgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9Ci0rCi0rICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+Ci0rICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCi0rCQkJCSAgICAgc2l6ZV90IF9fcmVmcykKLSsgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCi0rICAgIF9NX25hbWVfdGltZXB1bmN0KF9fcykKLSsgICAgewotKyAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOwotKyAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOwotKyAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7Ci0rICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsKLSsgICAgfQotKwotKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgotKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+Ojp+X190aW1lcHVuY3QoKQotKyAgICB7Ci0rICAgICAgaWYgKF9NX25hbWVfdGltZXB1bmN0ICE9IF9TX2dldF9jX25hbWUoKSkKLSsJZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OwotKyAgICAgIGRlbGV0ZSBfTV9kYXRhOwotKyAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsKLSsgICAgfQotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUgYi9saWJzdGRjKystdjMvY29uZmlndXJlCi1pbmRleCA0MTc5N2E5Li44YTU0ODFjIDEwMDc1NQotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQotQEAgLTE1ODMwLDYgKzE1ODMwLDkgQEAgZmkKLSAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCi0gICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgotICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgotKyAgICAgICotdWNsaWJjKikKLSsgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCi0rICAgICAgICA7OwotICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQotIAllbmFibGVfY2xvY2FsZV9mbGFnPWdudQotIAk7OwotQEAgLTE2MTA4LDYgKzE2MTExLDc4IEBAICRhc19lY2hvICJuZXdsaWIiID4mNjsgfQotICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKLSAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCi0gICAgICAgOzsKLSsgICAgdWNsaWJjKQotKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1Y2xpYmMiID4mNQotKyRhc19lY2hvICJ1Y2xpYmMiID4mNjsgfQotKwotKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKLSsgICAgICAjIGxhbmd1YWdlcy4KLSsgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAotKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKLSsKLSsgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgotKyAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXNnZm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLStzZXQgZHVtbXkgbXNnZm10OyBhY193b3JkPSQyCi0reyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jaGVja19tc2dmbXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgotKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLStlbHNlCi0rICBpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgotKyAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9IiRjaGVja19tc2dmbXQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotK2Vsc2UKLSthc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0rZm9yIGFzX2RpciBpbiAkUEFUSAotK2RvCi0rICBJRlM9JGFzX3NhdmVfSUZTCi0rICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSsgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSsgICAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9InllcyIKLSsgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0rICAgIGJyZWFrIDIKLSsgIGZpCi0rZG9uZQotKyAgZG9uZQotK0lGUz0kYXNfc2F2ZV9JRlMKLSsKLSsgIHRlc3QgLXogIiRhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCIgJiYgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9Im5vIgotK2ZpCi0rZmkKLStjaGVja19tc2dmbXQ9JGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10Ci0raWYgdGVzdCAtbiAiJGNoZWNrX21zZ2ZtdCI7IHRoZW4KLSsgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY2hlY2tfbXNnZm10IiA+JjUKLSskYXNfZWNobyAiJGNoZWNrX21zZ2ZtdCIgPiY2OyB9Ci0rZWxzZQotKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSskYXNfZWNobyAibm8iID4mNjsgfQotK2ZpCi0rCi0rCi0rICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KLSsgICAgICAgIFVTRV9OTFM9eWVzCi0rICAgICAgZmkKLSsgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KLSsgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKLSsgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKLSsgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKLSsgICAgICBkb25lCi0rCi0rCi0rCi0rICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKLSsgICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCi0rICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCi0rICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCi0rICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKLSsgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKLSsgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYwotKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCi0rICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi0rICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAotKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYwotKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAotKyAgICAgIDs7Ci0gICBlc2FjCi0gCi0gICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCi1pbmRleCA1NWEwYjUyLi43ZDhiYjE1IDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKLSsrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCi1AQCAtMTAxLDcgKzEwMSw5IEBAIHVzaW5nIHN0ZDo6d21lbWNtcDsKLSB1c2luZyBzdGQ6OndtZW1jcHk7Ci0gdXNpbmcgc3RkOjp3bWVtbW92ZTsKLSB1c2luZyBzdGQ6OndtZW1zZXQ7Ci0rI2lmIF9HTElCQ1hYX0hBVkVfV0NTRlRJTUUKLSB1c2luZyBzdGQ6Ondjc2Z0aW1lOwotKyNlbmRpZgotIAotICNpZiBfR0xJQkNYWF9VU0VfQzk5X1dDSEFSCi0gdXNpbmcgc3RkOjp3Y3N0b2xkOwotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhciBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgotaW5kZXggZGM0Y2VmMDIuLjI1NmQxMjYgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIKLSsrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgotQEAgLTE3NSw3ICsxNzUsOSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgotICAgdXNpbmcgOjp3Y3Njb2xsOwotICAgdXNpbmcgOjp3Y3NjcHk7Ci0gICB1c2luZyA6Ondjc2NzcG47Ci0rI2lmIF9HTElCQ1hYX0hBVkVfV0NTRlRJTUUKLSAgIHVzaW5nIDo6d2NzZnRpbWU7Ci0rI2VuZGlmCi0gICB1c2luZyA6Ondjc2xlbjsKLSAgIHVzaW5nIDo6d2NzbmNhdDsKLSAgIHVzaW5nIDo6d2NzbmNtcDsKLS0tIAotMi44LjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMy8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4zLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI3NTAxNi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4zLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI1NyArMCwwIEBACi1Gcm9tIGMwMWMxNGU4ZTliZTM4MmVjZDQxMjFlZTcwZjUwMDNiNGNiMGY5MDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MjozNiArMDQwMAotU3ViamVjdDogW1BBVENIIDA1LzQ2XSB1Y2xpYmMtbG9jYWxlLW5vX194Ci0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oICAgICAgfCA0NSArKysrKysrKysrKysrKysrKysrKysrCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCAxNCAtLS0tLS0tCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAgMSArCi0gLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyAgICAgICAgfCAgNyAtLS0tCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCAgNyAtLS0tCi0gLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgICAgICAgfCAgNyArLS0tCi0gLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAxOCArKysrLS0tLS0KLSAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8ICA0IC0tCi0gLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgICAgICAgfCAgMyAtLQotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgIDMgLS0KLSAxMCBmaWxlcyBjaGFuZ2VkLCA1NSBpbnNlcnRpb25zKCspLCA1NCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAotaW5kZXggMmFlM2U0YS4uZTc0ZmRkZiAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCi1AQCAtNjAsNCArNjAsNDkgQEAgZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3N4ZnJtX2wpIF9fd2NzeGZybV9sOwotIGV4dGVybiAiQyIgX190eXBlb2Yod2N0eXBlX2wpIF9fd2N0eXBlX2w7Ci0gI2VuZGlmCi0gCi0rIyBkZWZpbmUgX19ubF9sYW5naW5mb19sIG5sX2xhbmdpbmZvX2wKLSsjIGRlZmluZSBfX3N0cmNvbGxfbCBzdHJjb2xsX2wKLSsjIGRlZmluZSBfX3N0cmZ0aW1lX2wgc3RyZnRpbWVfbAotKyMgZGVmaW5lIF9fc3RydG9kX2wgc3RydG9kX2wKLSsjIGRlZmluZSBfX3N0cnRvZl9sIHN0cnRvZl9sCi0rIyBkZWZpbmUgX19zdHJ0b2xkX2wgc3RydG9sZF9sCi0rIyBkZWZpbmUgX19zdHJ4ZnJtX2wgc3RyeGZybV9sCi0rIyBkZWZpbmUgX19uZXdsb2NhbGUgbmV3bG9jYWxlCi0rIyBkZWZpbmUgX19mcmVlbG9jYWxlIGZyZWVsb2NhbGUKLSsjIGRlZmluZSBfX2R1cGxvY2FsZSBkdXBsb2NhbGUKLSsjIGRlZmluZSBfX3VzZWxvY2FsZSB1c2Vsb2NhbGUKLSsKLSsjIGlmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCi0rIyAgZGVmaW5lIF9faXN3Y3R5cGVfbCBpc3djdHlwZV9sCi0rIyAgZGVmaW5lIF9fdG93bG93ZXJfbCB0b3dsb3dlcl9sCi0rIyAgZGVmaW5lIF9fdG93dXBwZXJfbCB0b3d1cHBlcl9sCi0rIyAgZGVmaW5lIF9fd2NzY29sbF9sIHdjc2NvbGxfbAotKyMgIGRlZmluZSBfX3djc2Z0aW1lX2wgd2NzZnRpbWVfbAotKyMgIGRlZmluZSBfX3djc3hmcm1fbCB3Y3N4ZnJtX2wKLSsjICBkZWZpbmUgX193Y3R5cGVfbCB3Y3R5cGVfbAotKyMgZW5kaWYKLSsKLSsjZWxzZQotKyMgZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICBubF9sYW5naW5mbygoTikpCi0rIyBkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKLSsjIGRlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQotKyMgZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCi0rIyBkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCi0rIyBkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQotKyMgd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPwotKyMgZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCi0rIyBkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQotKyMgZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKLSsvLyMgZGVmaW5lIF9fdXNlbG9jYWxlID8KLSsvLwotKyMgaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKLSsjICBkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgIGlzd2N0eXBlKChDKSwgKE0pKQotKyMgIGRlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICAgdG93bG93ZXIoKEMpKQotKyMgIGRlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICAgdG93dXBwZXIoKEMpKQotKyMgIGRlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQotKy8vIyAgZGVmaW5lIF9fd2NzZnRpbWVfbChTLCBNLCBGLCBULCBMKSAgd2NzZnRpbWUoKFMpLCAoTSksIChGKSwgKFQpKQotKyMgIGRlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCi0rIyAgZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgICB3Y3R5cGUoKFMpKQotKyMgZW5kaWYKLSsKLSAjZW5kaWYgLy8gR0xJQkMgMi4zIGFuZCBsYXRlcgotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwotaW5kZXggNTA4MWRjMS4uMjE0MzBkMCAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCi1AQCAtMzksMjAgKzM5LDYgQEAKLSAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KLSAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KLSAKLS0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLS0jZGVmaW5lIF9fc3RydG9sX2woUywgRSwgQiwgTCkgICAgICBzdHJ0b2woKFMpLCAoRSksIChCKSkKLS0jZGVmaW5lIF9fc3RydG91bF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b3VsKChTKSwgKEUpLCAoQikpCi0tI2RlZmluZSBfX3N0cnRvbGxfbChTLCBFLCBCLCBMKSAgICAgc3RydG9sbCgoUyksIChFKSwgKEIpKQotLSNkZWZpbmUgX19zdHJ0b3VsbF9sKFMsIEUsIEIsIEwpICAgIHN0cnRvdWxsKChTKSwgKEUpLCAoQikpCi0tI2RlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQotLSNkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKLS0jZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQotLSN3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/Ci0tI2RlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAotLSNkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQotLSNkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQotLSNlbmRpZgotLQotIG5hbWVzcGFjZSBzdGQKLSB7Ci0gICB0ZW1wbGF0ZTw+Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAotaW5kZXggZGEwN2MxZi4uNGJjYTVmMSAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAotQEAgLTY4LDYgKzY4LDcgQEAgbmFtZXNwYWNlIF9fZ251X2N4eAotIHsKLSAgIGV4dGVybiAiQyIgX190eXBlb2YodXNlbG9jYWxlKSBfX3VzZWxvY2FsZTsKLSB9Ci0rI2RlZmluZSBfX3VzZWxvY2FsZSB1c2Vsb2NhbGUKLSAjZW5kaWYKLSAKLSBuYW1lc3BhY2Ugc3RkCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKLWluZGV4IGMyNjY0YTcuLmVjNWMzMjkgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCi1AQCAtMzYsMTMgKzM2LDYgQEAKLSAjaW5jbHVkZSA8bG9jYWxlPgotICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgotIAotLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotLSNkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKLS0jZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKLS0jZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCi0tI2RlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCi0tI2VuZGlmCi0tCi0gbmFtZXNwYWNlIHN0ZAotIHsKLSAgIC8vIFRoZXNlIGFyZSBiYXNpY2FsbHkgZXh0ZW5zaW9ucyB0byBjaGFyX3RyYWl0cywgYW5kIHBlcmhhcHMgc2hvdWxkCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYwotaW5kZXggNzI5NGUzYS4uN2IxMjg2MSAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYwotQEAgLTM4LDEzICszOCw2IEBACi0gI3VuZGVmIF9MSUJDCi0gI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+Ci0gCi0tI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0tI2RlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICB3Y3R5cGUoKFMpKQotLSNkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgdG93dXBwZXIoKEMpKQotLSNkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgdG93bG93ZXIoKEMpKQotLSNkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCi0tI2VuZGlmCi0tCi0gbmFtZXNwYWNlIHN0ZAotIHsKLSAgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKLWluZGV4IDEzNTk0ZDkuLmQ3NjkzYjQgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYwotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKLUBAIC0zOSwxMyArMzksMTAgQEAKLSAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSAjd2FybmluZyBmaXggZ2V0dGV4dCBzdHVmZgotICNlbmRpZgotLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXwotLWV4dGVybiAiQyIgY2hhciAqX19kY2dldHRleHQoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKLS0JCQkgICAgIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpOwotICN1bmRlZiBnZXR0ZXh0Ci0tI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCi0rI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCi0rI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBkY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQotICNlbHNlCi0tI3VuZGVmIGdldHRleHQKLSAjZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKLSAjZW5kaWYKLSAKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAotaW5kZXggMTQyNDA3OC4uZDg5ZGEzMyAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKLUBAIC0zNiwxNSArMzYsMTEgQEAKLSAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSAjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKLSAjZW5kaWYKLS0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KLS1leHRlcm4gIkMiIGNoYXIgKl9fdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKLS1leHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKLS0JCQkJICBjb25zdCBjaGFyICpkaXJuYW1lKTsKLS0jZWxzZQotLSN1bmRlZiBfX3RleHRkb21haW4KLS0jdW5kZWYgX19iaW5kdGV4dGRvbWFpbgotLSNkZWZpbmUgX190ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKLS0jZGVmaW5lIF9fYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCi0rI2lmbmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXwotKyN1bmRlZiB0ZXh0ZG9tYWluCi0rI3VuZGVmIGJpbmR0ZXh0ZG9tYWluCi0rI2RlZmluZSB0ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKLSsjZGVmaW5lIGJpbmR0ZXh0ZG9tYWluKEQsUCkgICAgICgodm9pZCkwKQotICNlbmRpZgotIAotICAgLy8gTm9uLXZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KLUBAIC03MCw3ICs2Niw3IEBAIGV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAotICAgICBtZXNzYWdlczxfQ2hhclQ+OjpvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jLAotIAkJCSAgIGNvbnN0IGNoYXIqIF9fZGlyKSBjb25zdAotICAgICB7Ci0tICAgICAgX19iaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOwotKyAgICAgIGJpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7Ci0gICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7Ci0gICAgIH0KLSAKLUBAIC05MCw3ICs4Niw3IEBAIGV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAotICAgICB7Ci0gICAgICAgLy8gTm8gZXJyb3IgY2hlY2tpbmcgaXMgZG9uZSwgYXNzdW1lIHRoZSBjYXRhbG9nIGV4aXN0cyBhbmQgY2FuCi0gICAgICAgLy8gYmUgdXNlZC4KLS0gICAgICBfX3RleHRkb21haW4oX19zLmNfc3RyKCkpOwotKyAgICAgIHRleHRkb21haW4oX19zLmNfc3RyKCkpOwotICAgICAgIHJldHVybiAwOwotICAgICB9Ci0gCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYwotaW5kZXggYWE1MjczMS4uMmU2ZjgwYSAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYwotQEAgLTQzLDEwICs0Myw2IEBACi0gI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0Ci0gI2VuZGlmCi0gCi0tI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0tI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCi0tI2VuZGlmCi0tCi0gbmFtZXNwYWNlIHN0ZAotIHsKLSAgIC8vIENvbnN0cnVjdCBhbmQgcmV0dXJuIHZhbGlkIHBhdHRlcm4gY29uc2lzdGluZyBvZiBzb21lIGNvbWJpbmF0aW9uIG9mOgotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi1pbmRleCA4ODNlYzFhLi4yYzcwNjQyIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwotQEAgLTQxLDkgKzQxLDYgQEAKLSAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKLSAjZW5kaWYKLS0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLS0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKLS0jZW5kaWYKLSAKLSBuYW1lc3BhY2Ugc3RkCi0gewotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCi1pbmRleCBlMDcwN2Q3Li5kODQ4ZWQ1IDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYwotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYwotQEAgLTQwLDkgKzQwLDYgQEAKLSAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKLSAjZW5kaWYKLS0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLS0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKLS0jZW5kaWYKLSAKLSBuYW1lc3BhY2Ugc3RkCi0gewotLS0gCi0yLjguMgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4zLzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4zLzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0NWE0ODIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMy8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotRnJvbSBlN2E0NzYwZmI0MDAwOGNhZTMzZTZmYzdkYzRjZmVmNmMyZmQ1ZjkzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDU6NTcgKzA0MDAKLVN1YmplY3Q6IFtQQVRDSCAwNi80Nl0gdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyB8ICA0ICsrLS0KLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICB8IDEzICsrKysrKysrKysrKysKLSAyIGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCi1pbmRleCAyZTZmODBhLi4zMWViYjlmIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCi1AQCAtNDAxLDcgKzQwMSw3IEBAIG5hbWVzcGFjZSBzdGQKLSAjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOwotIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7Ci0tIyBlbHNlCi0rIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCi0gCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKLSAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOwotICMgZW5kaWYKLUBAIC01NTYsNyArNTU2LDcgQEAgbmFtZXNwYWNlIHN0ZAotICMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7Ci0gCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKLS0jIGVsc2UKLSsjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KLSAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOwotIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7Ci0gIyBlbmRpZgotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi1pbmRleCAyYzcwNjQyLi5kNWM4OTYxIDEwMDY0NAotLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYwotQEAgLTEyNywxMiArMTI3LDI1IEBAIG5hbWVzcGFjZSBzdGQKLSAJewotIAkgIC8vIE5hbWVkIGxvY2FsZS4KLSAJICAvLyBOQjogSW4gdGhlIEdOVSBtb2RlbCB3Y2hhcl90IGlzIGFsd2F5cyAzMiBiaXQgd2lkZS4KLSsjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSsjd2FybmluZyBmaXggdGhpcy4uLiBzaG91bGQgYmUgbnVtZXJpYwotKyNlbmRpZgotKyNpZmRlZiBfX1VDTElCQ19fCi0rIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0rCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKLSsJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOwotKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXwotKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7Ci0rCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKLSsjIGVuZGlmCi0rI2Vsc2UKLSAJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OwotIAkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKLSAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKLSAKLSAJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7Ci0gCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7Ci0rI2VuZGlmCi0gCi0gCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gTCdcMCcpCi0gCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOwotLS0gCi0yLjguMgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4zLzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4zLzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3M2U1OTEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMy8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTQyICswLDAgQEAKLUZyb20gOGQ1M2EzOGEzMDM4MTA0ZTY4MzBlY2VhNWU0YmVhZGNlNTQ0NTdjMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ2OjU4ICswNDAwCi1TdWJqZWN0OiBbUEFUQ0ggMDcvNDZdIHVjbGliYy1sb2NhbGUtdXBkYXRlCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oICAgICAgfCAgMyArCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCA3NCArKysrKysrKysrLS0tLS0tLS0tLS0tCi0gbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCA0MiArKysrKystLS0tLS0KLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyB8IDUxICsrKysrKysrKysrLS0tLQotIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggICAgICAgIHwgMTIgKystLQotIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgMzQgKysrKysrLS0tLQotIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgICAgICAgIHwgIDUgKysKLSBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjICB8IDE4ICsrKystLQotIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCAgIHwgMTcgKysrLS0KLSA5IGZpbGVzIGNoYW5nZWQsIDE1OCBpbnNlcnRpb25zKCspLCA5OCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAotaW5kZXggZTc0ZmRkZi4uOTcxYTZiNCAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCi1AQCAtMzEsNiArMzEsOSBAQAotIAotICNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgotICNpbmNsdWRlIDxjbG9jYWxlPgotKyNpbmNsdWRlIDxjc3RkbGliPgotKyNpbmNsdWRlIDxjc3RyaW5nPgotKyNpbmNsdWRlIDxjc3RkZGVmPgotIAotICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXwotICN3YXJuaW5nIGNsZWFuIHRoaXMgdXAKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKLWluZGV4IDIxNDMwZDAuLjFiOWQ4ZTEgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYwotQEAgLTM5LDIzICszOSwyMCBAQAotICNpbmNsdWRlIDxsYW5naW5mby5oPgotICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgotIAotLW5hbWVzcGFjZSBzdGQKLS17Ci0rX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKLSsKLSAgIHRlbXBsYXRlPD4KLSAgICAgdm9pZAotICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGZsb2F0JiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKLSAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKLSAgICAgewotLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQotLQl7Ci0tCSAgY2hhciogX19zYW5pdHk7Ci0tCSAgZXJybm8gPSAwOwotLQkgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7Ci0tICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQotLQkgICAgX192ID0gX19mOwotLQkgIGVsc2UKLS0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwotLQl9Ci0rICAgICAgY2hhciogX19zYW5pdHk7Ci0rICAgICAgZXJybm8gPSAwOwotKyAgICAgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7Ci0rICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCi0rCV9fdiA9IF9fZjsKLSsgICAgICBlbHNlCi0rCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwotICAgICB9Ci0gCi0gICB0ZW1wbGF0ZTw+Ci1AQCAtNjMsMTYgKzYwLDEzIEBAIG5hbWVzcGFjZSBzdGQKLSAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAotIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQotICAgICB7Ci0tICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCi0tCXsKLS0JICBjaGFyKiBfX3Nhbml0eTsKLS0JICBlcnJubyA9IDA7Ci0tCSAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7Ci0tICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQotLQkgICAgX192ID0gX19kOwotLQkgIGVsc2UKLS0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwotLQl9Ci0rICAgICAgY2hhciogX19zYW5pdHk7Ci0rICAgICAgZXJybm8gPSAwOwotKyAgICAgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOwotKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQotKwlfX3YgPSBfX2Q7Ci0rICAgICAgZWxzZQotKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKLSAgICAgfQotIAotICAgdGVtcGxhdGU8PgotQEAgLTgwLDE2ICs3NCwxMyBAQCBuYW1lc3BhY2Ugc3RkCi0gICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgbG9uZyBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAotIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQotICAgICB7Ci0tICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCi0tCXsKLS0JICBjaGFyKiBfX3Nhbml0eTsKLS0JICBlcnJubyA9IDA7Ci0tCSAgbG9uZyBkb3VibGUgX19sZCA9IF9fc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOwotLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKLS0JICAgIF9fdiA9IF9fbGQ7Ci0tCSAgZWxzZQotLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7Ci0tCX0KLSsgICAgICBjaGFyKiBfX3Nhbml0eTsKLSsgICAgICBlcnJubyA9IDA7Ci0rICAgICAgbG9uZyBkb3VibGUgX19sZCA9IF9fc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOwotKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQotKwlfX3YgPSBfX2xkOwotKyAgICAgIGVsc2UKLSsJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7Ci0gICAgIH0KLSAKLSAgIHZvaWQKLUBAIC0xMTAsMTcgKzEwMSwxOCBAQCBuYW1lc3BhY2Ugc3RkCi0gICB2b2lkCi0gICBsb2NhbGU6OmZhY2V0OjpfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKLSAgIHsKLS0gICAgaWYgKF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKLSsgICAgaWYgKF9fY2xvYyAmJiBfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCi0gICAgICAgX19mcmVlbG9jYWxlKF9fY2xvYyk7Ci0gICB9Ci0gCi0gICBfX2NfbG9jYWxlCi0gICBsb2NhbGU6OmZhY2V0OjpfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCi0gICB7IHJldHVybiBfX2R1cGxvY2FsZShfX2Nsb2MpOyB9Ci0tfSAvLyBuYW1lc3BhY2Ugc3RkCi0gCi0tbmFtZXNwYWNlIF9fZ251X2N4eAotLXsKLStfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCi0rCi0rX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKLSsKLSAgIGNvbnN0IGNoYXIqIGNvbnN0IGNhdGVnb3J5X25hbWVzWzYgKyBfR0xJQkNYWF9OVU1fQ0FURUdPUklFU10gPQotICAgICB7Ci0gICAgICAgIkxDX0NUWVBFIiwKLUBAIC0xMzgsOSArMTMwLDExIEBAIG5hbWVzcGFjZSBfX2dudV9jeHgKLSAgICAgICAiTENfSURFTlRJRklDQVRJT04iCi0gI2VuZGlmCi0gICAgIH07Ci0tfQotIAotLW5hbWVzcGFjZSBzdGQKLS17Ci0rX0dMSUJDWFhfRU5EX05BTUVTUEFDRQotKwotK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCi0rCi0gICBjb25zdCBjaGFyKiBjb25zdCogY29uc3QgbG9jYWxlOjpfU19jYXRlZ29yaWVzID0gX19nbnVfY3h4OjpjYXRlZ29yeV9uYW1lczsKLS19ICAvLyBuYW1lc3BhY2Ugc3RkCi0rCi0rX0dMSUJDWFhfRU5EX05BTUVTUEFDRQotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKLWluZGV4IDRiY2E1ZjEuLjY0YTZkNDYgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKLUBAIC0zOSwyMSArMzksMjMgQEAKLSAjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCi0gCi0gI2luY2x1ZGUgPGNzdHJpbmc+ICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzdHJsZW4KLS0jaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnNucHJpbnRmIG9yIHN0ZDo6c3ByaW50ZgotKyNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6dnNucHJpbnRmIG9yIHN0ZDo6dnNwcmludGYKLSAjaW5jbHVkZSA8Y2xvY2FsZT4KLSAjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0Ci0gI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi0gI3dhcm5pbmcgZml4IHRoaXMKLSAjZW5kaWYKLS0jaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCi0rI2lmZGVmIF9HTElCQ1hYX1VTRV9JQ09OVgotICNpbmNsdWRlIDxpY29udi5oPgkJLy8gRm9yIGNvZGVjdnQgdXNpbmcgaWNvbnYsIGljb252X3QKLSAjZW5kaWYKLS0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KLS0jaW5jbHVkZSA8bGliaW50bC5oPiAJCS8vIEZvciBtZXNzYWdlcwotKyNpZmRlZiBIQVZFX0xJQklOVExfSAotKyNpbmNsdWRlIDxsaWJpbnRsLmg+CQkvLyBGb3IgbWVzc2FnZXMKLSAjZW5kaWYKLSsjaW5jbHVkZSA8Y3N0ZGFyZz4KLSAKLSAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLSAjd2FybmluZyB3aGF0IGlzIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSBmb3IKLSsvLyBwc206IHVzZWQgaW4gb3MvZ251LWxpbnV4L2N0eXBlX25vbmlubGluZS5oCi0gI2VuZGlmCi0gI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQotIAotQEAgLTc4LDIzICs4MCwyNSBAQCBuYW1lc3BhY2Ugc3RkCi0gI2Vsc2UKLSAgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7Ci0gI2VuZGlmCi0tCi0tICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBfVHYgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCi0tICAvLyBzdHJpbmcuICBJZiBzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCi0tICAvLyB0aGUgdW5zYWZlIHNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAotKyAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgZG91YmxlIHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgotKyAgLy8gc3RyaW5nLiAgSWYgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KLSsgIC8vIHRoZSB1bnNhZmUgdnNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAotICAgLy8gYmUgYXZvaWRlZC4KLS0gIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KLS0gICAgaW50Ci0tICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsCi0tCQkgICAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKLS0JCSAgICAgY29uc3QgY2hhciogX19mbXQsCi0tI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCi0tCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fcHJlYykKLSsgICAgaW5saW5lIGludAotKyAgICBfX2NvbnZlcnRfZnJvbV92KGNvbnN0IF9fY19sb2NhbGUmCi0rI2lmbmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXwotKwlfX2Nsb2MgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQotKyNlbmRpZgotKwkJICAgICAsCi0rCQkgICAgIGNoYXIqIF9fb3V0LAotKwkJICAgICBjb25zdCBpbnQgX19zaXplLAotKwkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwgLi4uKQotICAgICB7Ci0rICAgICAgdmFfbGlzdCBfX2FyZ3M7Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCi0rCi0gICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19jbG9jKTsKLSAjZWxzZQotLQkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYykKLS0gICAgewotICMgaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCi0gICAgICAgY2hhciogX19vbGQgPSBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIE5VTEwpOwotICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19vbGQpICsgMV07Ci1AQCAtMTAzLDcgKzEwNyw5IEBAIG5hbWVzcGFjZSBzdGQKLSAjIGVuZGlmCi0gI2VuZGlmCi0gCi0tICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjpzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19wcmVjLCBfX3YpOwotKyAgICAgIHZhX3N0YXJ0KF9fYXJncywgX19mbXQpOwotKyAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6dnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX2FyZ3MpOwotKyAgICAgIHZhX2VuZChfX2FyZ3MpOwotIAotICNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXwotICAgICAgIF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19vbGQpOwotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKLWluZGV4IDdiMTI4NjEuLjEzZTAxMWQgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYwotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKLUBAIC0zMywxNiArMzMsMjAgQEAKLSAKLSAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgotIAotKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgotKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KLSAjZGVmaW5lIF9MSUJDCi0gI2luY2x1ZGUgPGxvY2FsZT4KLSAjdW5kZWYgX0xJQkMKLSsjZWxzZQotKyNpbmNsdWRlIDxsb2NhbGU+Ci0rI2VuZGlmCi0gI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+Ci0gCi0tbmFtZXNwYWNlIHN0ZAotLXsKLStfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQotKwotICAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCi0gICAvLyB2YXJpb3VzIC9jb25maWcvb3MvKiBmaWxlcy4KLS0gIHRlbXBsYXRlPD4KLSAgICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQotICAgICA6IGN0eXBlPGNoYXI+KDAsIGZhbHNlLCBfX3JlZnMpCi0gICAgIHsKLUBAIC01Nyw2ICs2MSw4IEBAIG5hbWVzcGFjZSBzdGQKLSAjZW5kaWYKLSAJfQotICAgICB9Ci0rICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6fmN0eXBlX2J5bmFtZSgpCi0rICAgIHsgfQotIAotICNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAotICAgY3R5cGU8d2NoYXJfdD46Ol9fd21hc2tfdHlwZQotQEAgLTEzOCwxNyArMTQ0LDMzIEBAIG5hbWVzcGFjZSBzdGQKLSAgIGN0eXBlPHdjaGFyX3Q+OjoKLSAgIGRvX2lzKG1hc2sgX19tLCB3Y2hhcl90IF9fYykgY29uc3QKLSAgIHsKLS0gICAgLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKLS0gICAgLy8gbGlicmFyeSBmb3IgYmxhbmsuCi0rICAgIC8vIFRoZSBjYXNlIG9mIF9fbSA9PSBjdHlwZV9iYXNlOjpzcGFjZSBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50LAotKyAgICAvLyBkdWUgdG8gaXRzIHVzZSBpbiBtYW55IGlzdHJlYW0gZnVuY3Rpb25zLiAgVGhlcmVmb3JlIHdlIGRlYWwgd2l0aAotKyAgICAvLyBpdCBmaXJzdCwgZXhwbG9pdGluZyB0aGUga25vd2xlZGdlIHRoYXQgb24gR05VIHN5c3RlbXMgX01fYml0WzVdCi0rICAgIC8vIGlzIHRoZSBtYXNrIGNvcnJlc3BvbmRpbmcgdG8gY3R5cGVfYmFzZTo6c3BhY2UuICBOQjogYW4gZW5jb2RpbmcKLSsgICAgLy8gY2hhbmdlIHdvdWxkIG5vdCBhZmZlY3QgY29ycmVjdG5lc3MhCi0rCi0gICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKLS0gICAgY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKLS0gICAgZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQotLSAgICAgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdCi0tCSAgJiYgX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCi0tCXsKLS0JICBfX3JldCA9IHRydWU7Ci0tCSAgYnJlYWs7Ci0tCX0KLSsgICAgaWYgKF9fbSA9PSBfTV9iaXRbNV0pCi0rICAgICAgX19yZXQgPSBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1s1XSwgX01fY19sb2NhbGVfY3R5cGUpOwotKyAgICBlbHNlCi0rICAgICAgewotKwkvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgotKwkvLyBsaWJyYXJ5IGZvciBibGFuay4KLSsJY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKLSsJZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQotKwkgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdKQotKwkgICAgewotKwkgICAgICBpZiAoX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCi0rCQl7Ci0rCQkgIF9fcmV0ID0gdHJ1ZTsKLSsJCSAgYnJlYWs7Ci0rCQl9Ci0rCSAgICAgIGVsc2UgaWYgKF9fbSA9PSBfTV9iaXRbX19iaXRjdXJdKQotKwkJYnJlYWs7Ci0rCSAgICB9Ci0rICAgICAgfQotKwotICAgICByZXR1cm4gX19yZXQ7Ci0gICB9Ci0gCi1AQCAtMjkwLDQgKzMxMiw1IEBAIG5hbWVzcGFjZSBzdGQKLSAjZW5kaWYKLSAgIH0KLSAjZW5kaWYgLy8gIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCi0tfQotKwotK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAotaW5kZXggZDg5ZGEzMy4uMDY3NjU3YSAxMDA2NDQKLS0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKLUBAIC01MywxMiArNTMsMTYgQEAKLSAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KLSAgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCi0gCQkJCXNpemVfdCBfX3JlZnMpCi0tICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYykpLAotLSAgICAgX01fbmFtZV9tZXNzYWdlcyhfX3MpCi0rICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKE5VTEwpLAotKyAgICAgX01fbmFtZV9tZXNzYWdlcyhOVUxMKQotICAgICAgewotLSAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKLS0gICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7Ci0rICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0ZDo6c3RybGVuKF9fcykgKyAxOwotKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKLSsgICAgICAgc3RkOjptZW1jcHkoX190bXAsIF9fcywgX19sZW4pOwotICAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX190bXA7Ci0rCi0rICAgICAgIC8vIExhc3QgdG8gYXZvaWQgbGVha2luZyBtZW1vcnkgaWYgbmV3IHRocm93cy4KLSsgICAgICAgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOwotICAgICAgfQotIAotICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgotZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKLWluZGV4IDMxZWJiOWYuLjc2NzliOWMgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYwotKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKLUBAIC0zMyw5ICszMywxNCBAQAotIAotIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+Ci0gCi0rI2luY2x1ZGUgPGZlYXR1cmVzLmg+Ci0rI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXwotICNkZWZpbmUgX0xJQkMKLSAjaW5jbHVkZSA8bG9jYWxlPgotICN1bmRlZiBfTElCQwotKyNlbHNlCi0rI2luY2x1ZGUgPGxvY2FsZT4KLSsjZW5kaWYKLSAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KLSAKLSAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLUBAIC0yMDYsNyArMjExLDcgQEAgbmFtZXNwYWNlIHN0ZAotIAkgIH0KLSAJYnJlYWs7Ci0gICAgICAgZGVmYXVsdDoKLS0JOwotKwlfX3JldCA9IHBhdHRlcm4oKTsKLSAgICAgICB9Ci0gICAgIHJldHVybiBfX3JldDsKLSAgIH0KLUBAIC0zOTAsNyArMzk1LDkgQEAgbmFtZXNwYWNlIHN0ZAotIAkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOwotICNlbHNlCi0gCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCi0tCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOwotKyAgCSAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKLSsgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOwotKyAgICAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07Ci0gCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKLSAjZW5kaWYKLSAKLUBAIC00NzcsOCArNDg0LDggQEAgbmFtZXNwYWNlIHN0ZAotICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0gCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSAjZWxzZQotLQkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7Ci0tCSAgICAgIGZyZWUoX19vbGQpOwotKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7Ci0rCSAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKLSAjZW5kaWYKLSAJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47Ci0gCSAgICB9Ci1AQCAtNDk4LDggKzUwNSw4IEBAIG5hbWVzcGFjZSBzdGQKLSAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXwotIAkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSAjZWxzZQotLQkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKLS0JICBmcmVlKF9fb2xkKTsKLSsJICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7Ci0rCSAgZGVsZXRlIFtdIF9fc2F2OwotICNlbmRpZgotIAl9Ci0gICAgIH0KLUBAIC01NDUsOCArNTUyLDExIEBAIG5hbWVzcGFjZSBzdGQKLSAJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKLSAjZWxzZQotIAkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgotLQkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKLS0JICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOwotKyAgICAgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOwotKyAgICAgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7Ci0rICAgICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKLSsgICAgICAgICAgbWVtY3B5KF9fc2F2LCBfX29sZCwgX19sbGVuKTsKLSsgICAgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKLSAjZW5kaWYKLSAKLSAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KLUBAIC02MzMsOCArNjQzLDggQEAgbmFtZXNwYWNlIHN0ZAotICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCi0gCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKLSAjZWxzZQotLQkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7Ci0tCSAgICAgIGZyZWUoX19vbGQpOwotKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7Ci0rCSAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKLSAjZW5kaWYKLSAgICAgICAgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOwotIAkgICAgfQotQEAgLTY1Myw4ICs2NjMsOCBAQCBuYW1lc3BhY2Ugc3RkCi0gI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KLSAJICBfX3VzZWxvY2FsZShfX29sZCk7Ci0gI2Vsc2UKLS0JICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7Ci0tCSAgZnJlZShfX29sZCk7Ci0rCSAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOwotKwkgIGRlbGV0ZSBbXSBfX3NhdjsKLSAjZW5kaWYKLSAJfQotICAgICB9Ci1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKLWluZGV4IGQ1Yzg5NjEuLjhhZTg5NjkgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCi1AQCAtMzMsOSArMzMsMTQgQEAKLSAKLSAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgotIAotKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgotKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KLSAjZGVmaW5lIF9MSUJDCi0gI2luY2x1ZGUgPGxvY2FsZT4KLSAjdW5kZWYgX0xJQkMKLSsjZWxzZQotKyNpbmNsdWRlIDxsb2NhbGU+Ci0rI2VuZGlmCi0gI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+Ci0gCi0gI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCi1kaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKLWluZGV4IGQ4NDhlZDUuLmYyNGQ1M2UgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCi0rKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCi1AQCAtNTMsMTEgKzUzLDE0IEBAIG5hbWVzcGFjZSBzdGQKLSAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3N0cmZ0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCi0gCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOwotICNlbHNlCi0tICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOwotKyAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7Ci0rICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOwotKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKLSsgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xsZW4pOwotICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKLSAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdHJmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7Ci0tICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOwotLSAgICAgIGZyZWUoX19vbGQpOwotKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKLSsgICAgICBkZWxldGUgW10gX19zYXY7Ci0gI2VuZGlmCi0gICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCi0gICAgICAgaWYgKF9fbGVuID09IDApCi1AQCAtMjA3LDExICsyMTAsMTQgQEAgbmFtZXNwYWNlIHN0ZAotICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKLSAJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7Ci0gI2Vsc2UKLS0gICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7Ci0rICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKLSsgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7Ci0rICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOwotKyAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGxlbik7Ci0gICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOwotICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHdjc2Z0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKLS0gICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7Ci0tICAgICAgZnJlZShfX29sZCk7Ci0rICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOwotKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKLSAjZW5kaWYKLSAgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KLSAgICAgICBpZiAoX19sZW4gPT0gMCkKLWRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKLWluZGV4IGJhOGU4NTguLjE2NjVkZGUgMTAwNjQ0Ci0tLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKLSsrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAotQEAgLTUwLDEyICs1MCwyMSBAQAotICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAotIAkJCQkgICAgIHNpemVfdCBfX3JlZnMpCi0gICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAotLSAgICBfTV9uYW1lX3RpbWVwdW5jdChfX3MpCi0rICAgIF9NX25hbWVfdGltZXB1bmN0KE5VTEwpCi0gICAgIHsKLS0gICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKLS0gICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKLSsgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdGQ6OnN0cmxlbihfX3MpICsgMTsKLSsgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKLSsgICAgICBzdGQ6Om1lbWNweShfX3RtcCwgX19zLCBfX2xlbik7Ci0gICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKLS0gICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOwotKwotKyAgICAgIHRyeQotKwl7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7IH0KLSsgICAgICBjYXRjaCguLi4pCi0rCXsKLSsJICBkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7Ci0rCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47Ci0rCX0KLSsKLSAgICAgfQotIAotICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgotLS0gCi0yLjguMgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4zLzAwNDEtc3NwX25vbnNoYXJlZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy02LjMvMDA0MS1zc3Bfbm9uc2hhcmVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NDQ1MjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4zLzAwNDEtc3NwX25vbnNoYXJlZC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDU1MWE1ZGI3YWNiNTZlMDg1YTEwMWYxYzIyMmQ1MWIyYzFiMDM5YTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBTemFib2xjcyBOYWd5IDxuc3pAcG9ydDcwLm5ldD4KK0RhdGU6IFNhdCwgNyBOb3YgMjAxNSAxNDo1ODo0MCArMDAwMAorU3ViamVjdDogW1BBVENIIDQxLzQ2XSBzc3Bfbm9uc2hhcmVkCisKKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBDb25maWd1cmF0aW9uXQorCisgZ2NjL2djYy5jIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IDI4MTI4MTkuLjlkZTk2ZWUgMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTg2Myw3ICs4NjMsOCBAQCBwcm9wZXIgcG9zaXRpb24gYW1vbmcgdGhlIG90aGVyIG91dHB1dCBmaWxlcy4gICovCisgI2lmbmRlZiBMSU5LX1NTUF9TUEVDCisgI2lmZGVmIFRBUkdFVF9MSUJDX1BST1ZJREVTX1NTUAorICNkZWZpbmUgTElOS19TU1BfU1BFQyAiJXtmc3RhY2stcHJvdGVjdG9yfGZzdGFjay1wcm90ZWN0b3ItYWxsIiBcCistCQkgICAgICAgInxmc3RhY2stcHJvdGVjdG9yLXN0cm9uZ3xmc3RhY2stcHJvdGVjdG9yLWV4cGxpY2l0On0iCisrCQkgICAgICAgInxmc3RhY2stcHJvdGVjdG9yLXN0cm9uZ3xmc3RhY2stcHJvdGVjdG9yLWV4cGxpY2l0IiBcCisrCQkgICAgICAgIjotbHNzcF9ub25zaGFyZWR9IgorICNlbHNlCisgI2RlZmluZSBMSU5LX1NTUF9TUEVDICIle2ZzdGFjay1wcm90ZWN0b3J8ZnN0YWNrLXByb3RlY3Rvci1hbGwiIFwKKyAJCSAgICAgICAifGZzdGFjay1wcm90ZWN0b3Itc3Ryb25nfGZzdGFjay1wcm90ZWN0b3ItZXhwbGljaXQiIFwKKy0tIAorMi44LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMy8wMDQ3LWxpYmdjY19zLVVzZS1hbGlhcy1mb3ItX19jcHVfaW5kaWNhdG9yX2luaXQtaW5zdGVhZC0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4zLzAwNDctbGliZ2NjX3MtVXNlLWFsaWFzLWZvci1fX2NwdV9pbmRpY2F0b3JfaW5pdC1pbnN0ZWFkLS5wYXRjaAppbmRleCBlZDZjZDY5Li42YjVkYTAyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4zLzAwNDctbGliZ2NjX3MtVXNlLWFsaWFzLWZvci1fX2NwdV9pbmRpY2F0b3JfaW5pdC1pbnN0ZWFkLS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4zLzAwNDctbGliZ2NjX3MtVXNlLWFsaWFzLWZvci1fX2NwdV9pbmRpY2F0b3JfaW5pdC1pbnN0ZWFkLS5wYXRjaApAQCAtMzEsNyArMzEsNyBAQAogCiBTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogLS0tCi1VcHN0cmVhbS1TdGF0dXM6IFJlamVjdGVkCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZAogCiAgZ2NjL2NvbmZpZy9pMzg2L2kzODYuYyAgICAgICB8IDQgKystLQogIGxpYmdjYy9jb25maWcvaTM4Ni9jcHVpbmZvLmMgfCA2ICsrKy0tLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMy8wMDU2LUxSQS1QUjcwOTA0LXJlbGF4LXRoZS1yZXN0cmljdGlvbi1vbi1zdWJyZWctcmVsb2FkLWYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4zLzAwNTYtTFJBLVBSNzA5MDQtcmVsYXgtdGhlLXJlc3RyaWN0aW9uLW9uLXN1YnJlZy1yZWxvYWQtZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzFmMTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTYuMy8wMDU2LUxSQS1QUjcwOTA0LXJlbGF4LXRoZS1yZXN0cmljdGlvbi1vbi1zdWJyZWctcmVsb2FkLWYucGF0Y2gKQEAgLTAsMCArMSw1MSBAQAorRnJvbSBhNTgyYjBhNTNkMWRjODYwNGEyMDEzNDhiOTljYThkZTQ4Nzg0ZTdlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogaml3YW5nIDxqaXdhbmdAMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0PgorRGF0ZTogVGh1LCAxMiBNYXkgMjAxNiAxNzowMDo1MiArMDAwMAorU3ViamVjdDogW1BBVENIXSBbTFJBXSBQUjcwOTA0LCByZWxheCB0aGUgcmVzdHJpY3Rpb24gb24gc3VicmVnIHJlbG9hZCBmb3IKKyB3aWRlIG1vZGUKKworMjAxNi0wNS0xMiAgSmlvbmcgV2FuZyAgPGppb25nLndhbmdAYXJtLmNvbT4KKworZ2NjLworICBQUiBydGwtb3B0aW1pemF0aW9uLzcwOTA0CisgICogbHJhLWNvbnN0cmFpbnQuYyAocHJvY2Vzc19hZGRyX3JlZyk6IFJlbGF4IHRoZSByZXN0cmljdGlvbiBvbgorICBzdWJyZWcgcmVsb2FkIGZvciB3aWRlIG1vZGUuCisKK2dpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rQDIzNjE4MSAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworIGdjYy9scmEtY29uc3RyYWludHMuYyB8IDE2ICsrKysrKysrKysrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2xyYS1jb25zdHJhaW50cy5jIGIvZ2NjL2xyYS1jb25zdHJhaW50cy5jCitpbmRleCBmOTZmZDQ1OGUyMy4uNzNmYjcyYTJlYTUgMTAwNjQ0CistLS0gYS9nY2MvbHJhLWNvbnN0cmFpbnRzLmMKKysrKyBiL2djYy9scmEtY29uc3RyYWludHMuYworQEAgLTEzMjYsNyArMTMyNiwyMSBAQCBwcm9jZXNzX2FkZHJfcmVnIChydHggKmxvYywgYm9vbCBjaGVja19vbmx5X3AsIHJ0eF9pbnNuICoqYmVmb3JlLCBydHhfaW5zbiAqKmFmdAorIAorICAgc3VicmVnX3AgPSBHRVRfQ09ERSAoKmxvYykgPT0gU1VCUkVHOworICAgaWYgKHN1YnJlZ19wKQorLSAgICBsb2MgPSAmU1VCUkVHX1JFRyAoKmxvYyk7CisrICAgIHsKKysgICAgICByZWcgPSBTVUJSRUdfUkVHICgqbG9jKTsKKysgICAgICBtb2RlID0gR0VUX01PREUgKHJlZyk7CisrCisrICAgICAgLyogRm9yIG1vZGUgd2l0aCBzaXplIGJpZ2dlciB0aGFuIHB0cl9tb2RlLCB0aGVyZSB1bmxpa2VseSB0byBiZSAibW92IgorKwkgYmV0d2VlbiB0d28gcmVnaXN0ZXJzIHdpdGggZGlmZmVyZW50IGNsYXNzZXMsIGJ1dCB0aGVyZSBub3JtYWxseSB3aWxsCisrCSBiZSAibW92IiB3aGljaCB0cmFuc2ZlcnMgZWxlbWVudCBvZiB2ZWN0b3IgcmVnaXN0ZXIgaW50byB0aGUgZ2VuZXJhbAorKwkgcmVnaXN0ZXIsIGFuZCB0aGlzIG5vcm1hbGx5IHdpbGwgYmUgYSBzdWJyZWcgd2hpY2ggc2hvdWxkIGJlIHJlbG9hZGVkCisrCSBhcyBhIHdob2xlLiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgbGlrZWx5IHRvIGJlIHRyaWdnZXJlZCB3aGVuCisrCSAtZm5vLXNwbGl0LXdpZGUtdHlwZXMgc3BlY2lmaWVkLiAgKi8KKysgICAgICBpZiAoaW5fY2xhc3NfcCAocmVnLCBjbCwgJm5ld19jbGFzcykKKysJICB8fCBHRVRfTU9ERV9TSVpFIChtb2RlKSA8PSBHRVRfTU9ERV9TSVpFIChwdHJfbW9kZSkpCisrICAgICAgIGxvYyA9ICZTVUJSRUdfUkVHICgqbG9jKTsKKysgICAgfQorKworICAgcmVnID0gKmxvYzsKKyAgIG1vZGUgPSBHRVRfTU9ERSAocmVnKTsKKyAgIGlmICghIFJFR19QIChyZWcpKQorLS0gCisyLjE0LjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDczODI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy5pbmMKQEAgLTAsMCArMSwxMjggQEAKK3JlcXVpcmUgZ2NjLWNvbW1vbi5pbmMKKworIyBUaGlyZCBkaWdpdCBpbiBQViBzaG91bGQgYmUgaW5jcmVtZW50ZWQgYWZ0ZXIgYSBtaW5vciByZWxlYXNlCisKK1BWID0gIjcuMy4wIgorCisjIEJJTlYgc2hvdWxkIGJlIGluY3JlbWVudGVkIHRvIGEgcmV2aXNpb24gYWZ0ZXIgYSBtaW5vciBnY2MgcmVsZWFzZQorCitCSU5WID0gIjcuMy4wIgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9nY2MtNy4zOiR7RklMRV9ESVJOQU1FfS9nY2MtNy4zL2JhY2twb3J0OiIKKworREVQRU5EUyA9KyAibXBmciBnbXAgbGlibXBjIHpsaWIiCitOQVRJVkVERVBTID0gIm1wZnItbmF0aXZlIGdtcC1uYXRpdmUgbGlibXBjLW5hdGl2ZSB6bGliLW5hdGl2ZSIKKworTElDRU5TRSA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiAmIEdQTHYzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICBmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgIGZpbGU6Ly9DT1BZSU5HMzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgIGZpbGU6Ly9DT1BZSU5HMy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IFwKKyAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICBmaWxlOi8vQ09QWUlORy5SVU5USU1FO21kNT1mZTYwZDg3MDQ4NTY3ZDRmZThjOGEwZWQyNDQ4YmNjOCBcCisiCisKKyNSRUxFQVNFID0gIjctMjAxNzA1MDQiCitCQVNFVVJJID89ICIke0dOVV9NSVJST1J9L2djYy9nY2MtJHtQVn0vZ2NjLSR7UFZ9LnRhci54eiIKKyNTUkNSRVYgPSAiZjdjZjc5OGI3M2ZkMWEwNzA5OGY5YTQ5MGRlZWMxZTJhMzZlMGJlZCIKKyNCQVNFVVJJID89ICJnaXQ6Ly9naXRodWIuY29tL2djYy1taXJyb3IvZ2NjO2JyYW5jaD1nY2MtNi1icmFuY2g7cHJvdG9jb2w9Z2l0IgorI0JBU0VVUkkgPz0gImh0dHA6Ly9taXJyb3JzLmNvbmNlcnRwYXNzLmNvbS9nY2Mvc25hcHNob3RzLyR7UkVMRUFTRX0vZ2NjLSR7UkVMRUFTRX0udGFyLmJ6MiIKKworU1JDX1VSSSA9ICJcCisgICAgICAgICAgICR7QkFTRVVSSX0gXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDgtYzk5LXNucHJpbnRmLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDktZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMC1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMS1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEyLTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTMtb3B0aW9uYWwtbGlic3RkYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE0LWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE1LUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNi1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE3LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTgtY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxOS1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjAtRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIxLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIyLURpc2FibGUtc2R0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjMtbGlidG9vbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI0LWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNS1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjYtQXZvaWQtdXNpbmctbGliZGlyLWZyb20tLmxhLXdoaWNoLXVzdWFsbHktcG9pbnRzLXRvLS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI3LWV4cG9ydC1DUFAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyOC1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjktRGlzYWJsZS10aGUtTVVMVElMSUJfT1NESVJOQU1FUy1hbmQtb3RoZXItbXVsdGlsaWItby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDMwLUVuc3VyZS10YXJnZXQtZ2NjLWhlYWRlcnMtY2FuLWJlLWluY2x1ZGVkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzEtZ2NjLTQuOC13b24tdC1idWlsZC13aXRoLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDMyLURvbi10LXNlYXJjaC1ob3N0LWRpcmVjdG9yeS1kdXJpbmctcmVsaW5rLWlmLWluc3RfcHIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzMy1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzQtYWFyY2g2NC1BZGQtc3VwcG9ydC1mb3ItbXVzbC1sZHNvLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzUtbGliY2MxLWZpeC1saWJjYzEtcy1pbnN0YWxsLXBhdGgtYW5kLXJwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzYtaGFuZGxlLXN5c3Jvb3Qtc3VwcG9ydC1mb3ItbmF0aXZlc2RrLWdjYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDM3LVNlYXJjaC10YXJnZXQtc3lzcm9vdC1nY2MtdmVyc2lvbi1zcGVjaWZpYy1kaXJzLXdpdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzOC1GaXgtdmFyaW91cy1fRk9SX0JVSUxELWFuZC1yZWxhdGVkLXZhcmlhYmxlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDM5LW5pb3MyLURlZmluZS1NVVNMX0RZTkFNSUNfTElOS0VSLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNDAtQWRkLXNzcF9ub25zaGFyZWQtdG8tbGluay1jb21tYW5kbGluZS1mb3ItbXVzbC10YXJnZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDQxLWdjYy1saWJjcHAtc3VwcG9ydC1mZmlsZS1wcmVmaXgtbWFwLW9sZC1uZXcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA0Mi1SZXVzZS1mZGVidWctcHJlZml4LW1hcC10by1yZXBsYWNlLWZmaWxlLXByZWZpeC1tYXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA0My1nY2MtZmluYWwuYy1mZGVidWctcHJlZml4LW1hcC1zdXBwb3J0LXRvLXJlbWFwLXNvdXJjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNDQtbGliZ2NjLUFkZC1rbm9iLXRvLXVzZS1sZGJsLTEyOC1vbi1wcGMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA0NS1MaW5rLWxpYmdjYy11c2luZy1MREZMQUdTLW5vdC1qdXN0LVNITElCX0xERkxBR1MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA0Ny1zeW5jLWdjYy1zdGRkZWYuaC13aXRoLW11c2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA0OC1nY2MtRW5hYmxlLXN0YXRpYy1QSUUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LXNlZ21lbnRhdGlvbi1mYXVsdC1wcmVjb21waWxlZC1oZHIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA1MC1SSVNDLVYtSGFuZGxlLW5vbi1sZWdpdGltYXRlLWFkZHJlc3MtaW4tcmlzY3ZfbGVnaXRpLnBhdGNoIFwKKyAgICAgICAgICAgJHtCQUNLUE9SVFN9IFwKKyIKK0JBQ0tQT1JUUyA9ICJcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiZTJkYTIxNjgwZjI3NjI0ZjNhODcwNTVjNGJhNWFmMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4MzJjYTZhZTA0NjM2YWRiYjQzMGU4NjVhMTQ1MWFkZjY5NzlhYjQ0Y2ExYzgzNzRmNjFmYmE2NTY0NWNlMTVjIgorCitTID0gIiR7VE1QRElSfS93b3JrLXNoYXJlZC9nY2MtJHtQVn0tJHtQUn0vZ2NjLSR7UFZ9IgorI1MgPSAiJHtUTVBESVJ9L3dvcmstc2hhcmVkL2djYy0ke1BWfS0ke1BSfS9naXQiCitCID0gIiR7V09SS0RJUn0vZ2NjLSR7UFZ9L2J1aWxkLiR7SE9TVF9TWVN9LiR7VEFSR0VUX1NZU30iCisKKyMgTGFuZ3VhZ2UgT3ZlcnJpZGVzCitGT1JUUkFOID0gIiIKK0pBVkEgPSAiIgorCitMVE8gPSAiLS1lbmFibGUtbHRvIgorCitFWFRSQV9PRUNPTkZfQkFTRSA9ICJcCisgICAgJHtMVE99IFwKKyAgICAtLWVuYWJsZS1saWJzc3AgXAorICAgIC0tZW5hYmxlLWxpYml0bSBcCisgICAgLS1kaXNhYmxlLWJvb3RzdHJhcCBcCisgICAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAorICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCisgICAgLS13aXRoLWxpbmtlci1oYXNoLXN0eWxlPSR7TElOS0VSX0hBU0hfU1RZTEV9IFwKKyAgICAtLWVuYWJsZS1saW5rZXItYnVpbGQtaWQgXAorICAgIC0td2l0aC1wcGw9bm8gXAorICAgIC0td2l0aC1jbG9vZz1ubyBcCisgICAgLS1lbmFibGUtY2hlY2tpbmc9cmVsZWFzZSBcCisgICAgLS1lbmFibGUtY2hlYWRlcnM9Y19nbG9iYWwgXAorICAgIC0td2l0aG91dC1pc2wgXAorIgorCitFWFRSQV9PRUNPTkZfSU5JVElBTCA9ICJcCisgICAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAorICAgIC0tZGlzYWJsZS1saWJnb21wIFwKKyAgICAtLWRpc2FibGUtbGliaXRtIFwKKyAgICAtLWRpc2FibGUtbGlicXVhZG1hdGggXAorICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCisgICAgLS1kaXNhYmxlLWx0byBcCisgICAgLS1kaXNhYmxlLXBsdWdpbiBcCisgICAgLS1lbmFibGUtZGVjaW1hbC1mbG9hdD1ubyBcCisgICAgLS13aXRob3V0LWlzbCBcCisgICAgZ2NjX2N2X2xpYmNfcHJvdmlkZXNfc3NwPXllcyBcCisiCisKK0VYVFJBX09FQ09ORl9QQVRIUyA9ICJcCisgICAgLS13aXRoLWd4eC1pbmNsdWRlLWRpcj0vbm90L2V4aXN0e3RhcmdldF9pbmNsdWRlZGlyfS9jKysvJHtCSU5WfSBcCisgICAgLS13aXRoLXN5c3Jvb3Q9L25vdC9leGlzdCBcCisgICAgLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKKyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFmMWM3NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gMmZjZjFlMjNlZjRiMmE1YzkzNTI2ZjEyMjEyYWE4OTI1OTUyNjFmNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjM3OjExICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDEvNDddIGdjYy00LjMuMTogQVJDSF9GTEFHU19GT1JfVEFSR0VUCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBjb25maWd1cmUgICAgfCAyICstCisgY29uZmlndXJlLmFjIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCAzMmEzODYzM2FkOC4uYjQ3NjA5NTIwODUgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTc0NzIsNyArNzQ3Miw3IEBAIGZpCisgIyBmb3IgdGFyZ2V0X2FsaWFzIGFuZCBnY2MgZG9lc24ndCBtYW5hZ2UgaXQgY29uc2lzdGVudGx5LgorIHRhcmdldF9jb25maWdhcmdzPSItLWNhY2hlLWZpbGU9Li9jb25maWcuY2FjaGUgJHt0YXJnZXRfY29uZmlnYXJnc30iCisgCistRkxBR1NfRk9SX1RBUkdFVD0KKytGTEFHU19GT1JfVEFSR0VUPSIkQVJDSF9GTEFHU19GT1JfVEFSR0VUIgorIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2RpcnMgIiBpbgorICAqIiBuZXdsaWIgIiopCisgICBjYXNlICIgJHRhcmdldF9jb25maWdhcmdzICIgaW4KK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDEyMzc3NDk5Mjk1Li4xNzZlYmI5MjFlZCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzA2NSw3ICszMDY1LDcgQEAgZmkKKyAjIGZvciB0YXJnZXRfYWxpYXMgYW5kIGdjYyBkb2Vzbid0IG1hbmFnZSBpdCBjb25zaXN0ZW50bHkuCisgdGFyZ2V0X2NvbmZpZ2FyZ3M9Ii0tY2FjaGUtZmlsZT0uL2NvbmZpZy5jYWNoZSAke3RhcmdldF9jb25maWdhcmdzfSIKKyAKKy1GTEFHU19GT1JfVEFSR0VUPQorK0ZMQUdTX0ZPUl9UQVJHRVQ9IiRBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQiCisgY2FzZSAiICR0YXJnZXRfY29uZmlnZGlycyAiIGluCisgICoiIG5ld2xpYiAiKikKKyAgIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2FyZ3MgIiBpbgorLS0gCisyLjEyLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDA4LWM5OS1zbnByaW50Zi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAwOC1jOTktc25wcmludGYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJkNTYyYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAwOC1jOTktc25wcmludGYucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSA3MzJmMTBlZWFkNjE4MzBhOGFlZTFiZjM4Y2NlODkyZGEyNWMzNWIxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDk6MDMgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwOC80N10gYzk5LXNucHJpbnRmCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvCitpbmRleCA0Mzk2OTg5MmFhMi4uMTIxNDg0NTc5MDkgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbworQEAgLTE0NCw3ICsxNDQsNyBAQCBuYW1lc3BhY2Ugc3RkCisgICB1c2luZyA6OnZzcHJpbnRmOworIH0gLy8gbmFtZXNwYWNlIHN0ZAorIAorLSNpZiBfR0xJQkNYWF9VU0VfQzk5X1NURElPCisrI2lmIF9HTElCQ1hYX1VTRV9DOTlfU1RESU8gfHwgZGVmaW5lZChfX1VDTElCQ19fKQorIAorICN1bmRlZiBzbnByaW50ZgorICN1bmRlZiB2ZnNjYW5mCistLSAKKzIuMTIuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMDktZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMDktZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUxM2VkNgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAwOS1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaApAQCAtMCwwICsxLDE5MiBAQAorRnJvbSA0NzkxYTBhMGY0NTk1ZDBhMTg5NzRmNGU4NWE3NTlhMDc4OTk0M2RiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTk6MDAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwOS80N10gZ2NjOiBwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uOiBjb2Rlc291cmNlcnldCistLS0KKyBnY2MvY29tbW9uLm9wdCAgICAgIHwgIDQgKysrKworIGdjYy9jb25maWcuaW4gICAgICAgfCAgNiArKysrKysKKyBnY2MvY29uZmlndXJlICAgICAgIHwgMTYgKysrKysrKysrKysrKysrKworIGdjYy9jb25maWd1cmUuYWMgICAgfCAxMCArKysrKysrKysrCisgZ2NjL2RvYy9pbnZva2UudGV4aSB8ICA5ICsrKysrKysrKworIGdjYy9nY2MuYyAgICAgICAgICAgfCAgMiArKworIGdjYy9pbmNwYXRoLmMgICAgICAgfCAxOSArKysrKysrKysrKysrKysrKysrCisgNyBmaWxlcyBjaGFuZ2VkLCA2NiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nY2MvY29tbW9uLm9wdCBiL2djYy9jb21tb24ub3B0CitpbmRleCBhNWMzYWVhYTMzNi4uZjAyZmU2NjM2N2UgMTAwNjQ0CistLS0gYS9nY2MvY29tbW9uLm9wdAorKysrIGIvZ2NjL2NvbW1vbi5vcHQKK0BAIC02NjIsNiArNjYyLDEwIEBAIFdyZXR1cm4tbG9jYWwtYWRkcgorIENvbW1vbiBWYXIod2Fybl9yZXR1cm5fbG9jYWxfYWRkcikgSW5pdCgxKSBXYXJuaW5nCisgV2FybiBhYm91dCByZXR1cm5pbmcgYSBwb2ludGVyL3JlZmVyZW5jZSB0byBhIGxvY2FsIG9yIHRlbXBvcmFyeSB2YXJpYWJsZS4KKyAKKytXcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0NvbW1vbiBWYXIoZmxhZ19wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzKSBJbml0KDEpIFdhcm5pbmcKKytXYXJuIGZvciAtSSBhbmQgLUwgb3B0aW9ucyB1c2luZyBzeXN0ZW0gZGlyZWN0b3JpZXMgaWYgY3Jvc3MgY29tcGlsaW5nCisrCisgV3NoYWRvdworIENvbW1vbiBWYXIod2Fybl9zaGFkb3cpIFdhcm5pbmcKKyBXYXJuIHdoZW4gb25lIHZhcmlhYmxlIHNoYWRvd3MgYW5vdGhlci4gIFNhbWUgYXMgLVdzaGFkb3c9Z2xvYmFsLgorZGlmZiAtLWdpdCBhL2djYy9jb25maWcuaW4gYi9nY2MvY29uZmlnLmluCitpbmRleCBiZjJhYTdiMmU3ZC4uYjEyMDM5ODdlMTUgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnLmluCisrKysgYi9nY2MvY29uZmlnLmluCitAQCAtMTk0LDYgKzE5NCwxMiBAQAorICNlbmRpZgorIAorIAorKy8qIERlZmluZSB0byB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXMgKi8KKysjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorKyN1bmRlZiBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUworKyNlbmRpZgorKworKworIC8qIERlZmluZSBpZiB5b3Ugd2FudCBhbGwgb3BlcmF0aW9ucyBvbiBSVEwgKHRoZSBiYXNpYyBkYXRhIHN0cnVjdHVyZSBvZiB0aGUKKyAgICBvcHRpbWl6ZXIgYW5kIGJhY2sgZW5kKSB0byBiZSBjaGVja2VkIGZvciBkeW5hbWljIHR5cGUgc2FmZXR5IGF0IHJ1bnRpbWUuCisgICAgVGhpcyBpcyBxdWl0ZSBleHBlbnNpdmUuICovCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IGM4MjNmZmU2MjkwLi40ODk4ZjA0ZmE2YiAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC05NDksNiArOTQ5LDcgQEAgd2l0aF9zeXN0ZW1femxpYgorIGVuYWJsZV9tYWludGFpbmVyX21vZGUKKyBlbmFibGVfbGlua19tdXRleAorIGVuYWJsZV92ZXJzaW9uX3NwZWNpZmljX3J1bnRpbWVfbGlicworK2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzCisgZW5hYmxlX3BsdWdpbgorIGVuYWJsZV9ob3N0X3NoYXJlZAorIGVuYWJsZV9saWJxdWFkbWF0aF9zdXBwb3J0CitAQCAtMTY5MSw2ICsxNjkyLDggQEAgT3B0aW9uYWwgRmVhdHVyZXM6CisgICAtLWVuYWJsZS12ZXJzaW9uLXNwZWNpZmljLXJ1bnRpbWUtbGlicworICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGF0IHJ1bnRpbWUgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgY29tcGlsZXItc3BlY2lmaWMgZGlyZWN0b3J5CisrICAtLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXMKKyAgIC0tZW5hYmxlLXBsdWdpbiAgICAgICAgIGVuYWJsZSBwbHVnaW4gc3VwcG9ydAorICAgLS1lbmFibGUtaG9zdC1zaGFyZWQgICAgYnVpbGQgaG9zdCBjb2RlIGFzIHNoYXJlZCBsaWJyYXJpZXMKKyAgIC0tZGlzYWJsZS1saWJxdWFkbWF0aC1zdXBwb3J0CitAQCAtMjkzNDcsNiArMjkzNTAsMTkgQEAgaWYgdGVzdCAiJHtlbmFibGVfdmVyc2lvbl9zcGVjaWZpY19ydW50aW1lX2xpYnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorIGZpCisgCisgCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgZW5hYmxldmFsPSRlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllczsKKytlbHNlCisrICBlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcz1ubworK2ZpCisrCisraWYgdGVzdCAieCR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXN9IiA9ICJ4eWVzIjsgdGhlbgorKworKyRhc19lY2hvICIjZGVmaW5lIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTIDEiID4+Y29uZmRlZnMuaAorKworK2ZpCisrCisgIyBTdWJzdGl0dXRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisgCisgCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IGFjZmU5Nzk3Mzg5Li45ZGMxZGM3ZmM5NiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC02MTAxLDYgKzYxMDEsMTYgQEAgQUNfQVJHX0VOQUJMRSh2ZXJzaW9uLXNwZWNpZmljLXJ1bnRpbWUtbGlicywKKyAgICAgICAgICAgICAgICAgW3NwZWNpZnkgdGhhdCBydW50aW1lIGxpYnJhcmllcyBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBpbiBhIGNvbXBpbGVyLXNwZWNpZmljIGRpcmVjdG9yeV0pXSkKKyAKKytBQ19BUkdfRU5BQkxFKFtwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXSwKKysgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXNdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzXSksLAorKyAgICAgICAgICAgICBbZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM9bm9dKQorK2lmIHRlc3QgIngke2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzfSIgPSAieHllcyI7IHRoZW4KKysgIEFDX0RFRklORShbRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVNdLAorKyAgICAgICAgICAgWzFdLAorKyAgICAgICAgICAgW0RlZmluZSB0byB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXNdKQorK2ZpCisrCisgIyBTdWJzdGl0dXRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisgQUNfU1VCU1Qoc3ViZGlycykKKyBBQ19TVUJTVChzcmNkaXIpCitkaWZmIC0tZ2l0IGEvZ2NjL2RvYy9pbnZva2UudGV4aSBiL2djYy9kb2MvaW52b2tlLnRleGkKK2luZGV4IDY4YTU1OGU5OTkyLi4wNjBjZDcxNjljNiAxMDA2NDQKKy0tLSBhL2djYy9kb2MvaW52b2tlLnRleGkKKysrKyBiL2djYy9kb2MvaW52b2tlLnRleGkKK0BAIC0yOTgsNiArMjk4LDcgQEAgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdHN9LgorIC1XcGFja2VkICAtV3BhY2tlZC1iaXRmaWVsZC1jb21wYXQgIC1XcGFkZGVkIEBnb2wKKyAtV3BhcmVudGhlc2VzICAtV25vLXBlZGFudGljLW1zLWZvcm1hdCBAZ29sCisgLVdwbGFjZW1lbnQtbmV3ICAtV3BsYWNlbWVudC1uZXc9QHZhcntufSBAZ29sCisrLVduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIEBnb2wKKyAtV3BvaW50ZXItYXJpdGggIC1XcG9pbnRlci1jb21wYXJlICAtV25vLXBvaW50ZXItdG8taW50LWNhc3QgQGdvbAorIC1Xbm8tcHJhZ21hcyAgLVdyZWR1bmRhbnQtZGVjbHMgIC1XcmVzdHJpY3QgIC1Xbm8tcmV0dXJuLWxvY2FsLWFkZHIgQGdvbAorIC1XcmV0dXJuLXR5cGUgIC1Xc2VxdWVuY2UtcG9pbnQgIC1Xc2hhZG93ICAtV25vLXNoYWRvdy1pdmFyIEBnb2wKK0BAIC01Mzk1LDYgKzUzOTYsMTQgQEAgbWFkZSB1cCBvZiBkYXRhIG9ubHkgYW5kIHRodXMgcmVxdWlyZXMgbm8gc3BlY2lhbCB0cmVhdG1lbnQuICBCdXQsIGZvcgorIG1vc3QgdGFyZ2V0cywgaXQgaXMgbWFkZSB1cCBvZiBjb2RlIGFuZCB0aHVzIHJlcXVpcmVzIHRoZSBzdGFjayB0byBiZQorIG1hZGUgZXhlY3V0YWJsZSBpbiBvcmRlciBmb3IgdGhlIHByb2dyYW0gdG8gd29yayBwcm9wZXJseS4KKyAKKytAaXRlbSAtV25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytAb3BpbmRleCBXbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0RvIG5vdCB3YXJuIGZvciBAb3B0aW9uey1JfSBvciBAb3B0aW9uey1MfSBvcHRpb25zIHVzaW5nIHN5c3RlbQorK2RpcmVjdG9yaWVzIHN1Y2ggYXMgQGZpbGV7L3Vzci9pbmNsdWRlfSB3aGVuIGNyb3NzIGNvbXBpbGluZy4gIFRoaXMKKytvcHRpb24gaXMgaW50ZW5kZWQgZm9yIHVzZSBpbiBjaHJvb3QgZW52aXJvbm1lbnRzIHdoZW4gc3VjaAorK2RpcmVjdG9yaWVzIGNvbnRhaW4gdGhlIGNvcnJlY3QgaGVhZGVycyBhbmQgbGlicmFyaWVzIGZvciB0aGUgdGFyZ2V0Cisrc3lzdGVtIHJhdGhlciB0aGFuIHRoZSBob3N0LgorKworIEBpdGVtIC1XZmxvYXQtZXF1YWwKKyBAb3BpbmRleCBXZmxvYXQtZXF1YWwKKyBAb3BpbmRleCBXbm8tZmxvYXQtZXF1YWwKK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IGM0ODE3OGYuLmY2M2Q1M2QgMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTEwMjksNiArMTAyOSw4IEBAIHByb3BlciBwb3NpdGlvbiBhbW9uZyB0aGUgb3RoZXIgb3V0cHV0IGZpbGVzLiAgKi8KKyAgICAiJXtmdXNlLWxkPSo6LWZ1c2UtbGQ9JSp9ICIgTElOS19DT01QUkVTU19ERUJVR19TUEVDIFwKKyAgICAiJVggJXtvKn0gJXtlKn0gJXtOfSAle259ICV7cn1cCisgICAgICV7c30gJXt0fSAle3UqfSAle3p9ICV7Wn0gJXshbm9zdGRsaWI6JXshbm9zdGFydGZpbGVzOiVTfX0gXAorKyAgICAle1duby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzOi0tbm8tcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc30gXAorKyAgICAle1dlcnJvcj1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzOi0tZXJyb3ItcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc30gXAorICAgICAle3N0YXRpY3xuby1waWU6fSAle0wqfSAlKG1md3JhcCkgJShsaW5rX2xpYmdjYykgIiBcCisgICAgIFZUQUJMRV9WRVJJRklDQVRJT05fU1BFQyAiICIgU0FOSVRJWkVSX0VBUkxZX1NQRUMgIiAlbyAiIENIS1BfU1BFQyAiIFwKKyAgICAgJXtmb3BlbmFjY3xmb3Blbm1wfCU6Z3QoJXtmdHJlZS1wYXJhbGxlbGl6ZS1sb29wcz0qOiUqfSAxKTpcCitkaWZmIC0tZ2l0IGEvZ2NjL2luY3BhdGguYyBiL2djYy9pbmNwYXRoLmMKK2luZGV4IDk4ZmU1ZWM5YWIzLi5mOTBlNzRkYmQ3MyAxMDA2NDQKKy0tLSBhL2djYy9pbmNwYXRoLmMKKysrKyBiL2djYy9pbmNwYXRoLmMKK0BAIC0yNiw2ICsyNiw3IEBACisgI2luY2x1ZGUgImludGwuaCIKKyAjaW5jbHVkZSAiaW5jcGF0aC5oIgorICNpbmNsdWRlICJjcHBkZWZhdWx0LmgiCisrI2luY2x1ZGUgImRpYWdub3N0aWMtY29yZS5oIgorIAorIC8qIE1pY3Jvc29mdCBXaW5kb3dzIGRvZXMgbm90IG5hdGl2ZWx5IHN1cHBvcnQgaW5vZGVzLgorICAgIFZNUyBoYXMgbm9uLW51bWVyaWMgaW5vZGVzLiAgKi8KK0BAIC0zODIsNiArMzgzLDI0IEBAIG1lcmdlX2luY2x1ZGVfY2hhaW5zIChjb25zdCBjaGFyICpzeXNyb290LCBjcHBfcmVhZGVyICpwZmlsZSwgaW50IHZlcmJvc2UpCisgCX0KKyAgICAgICBmcHJpbnRmIChzdGRlcnIsIF8oIkVuZCBvZiBzZWFyY2ggbGlzdC5cbiIpKTsKKyAgICAgfQorKworKyNpZmRlZiBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUworKyAgaWYgKGZsYWdfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcykKKysgICAgeworKyAgICAgICBzdHJ1Y3QgY3BwX2RpciAqcDsKKysKKysgICAgICAgZm9yIChwID0gaGVhZHNbUVVPVEVdOyBwOyBwID0gcC0+bmV4dCkKKysgICAgICAgICB7CisrICAgICAgICAgIGlmICgoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2luY2x1ZGUiLCAxMikpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2xvY2FsL2luY2x1ZGUiLCAxOCkpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL1gxMVI2L2luY2x1ZGUiLCAxOCkpKQorKyAgICAgICAgICAgIHdhcm5pbmcgKE9QVF9XcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcywKKysgICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZSBsb2NhdGlvbiBcIiVzXCIgaXMgdW5zYWZlIGZvciAiCisrICAgICAgICAgICAgICAgICAgICAgImNyb3NzLWNvbXBpbGF0aW9uIiwKKysgICAgICAgICAgICAgICAgICAgICBwLT5uYW1lKTsKKysgICAgICAgICB9CisrICAgIH0KKysjZW5kaWYKKyB9CisgCisgLyogVXNlIGdpdmVuIC1JIHBhdGhzIGZvciAjaW5jbHVkZSAiLi4uIiBidXQgbm90ICNpbmNsdWRlIDwuLi4+LCBhbmQKKy0tIAorMi4xMi4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAxMC1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMTAtZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMDZhYTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMTAtZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gZTc0ZWY4NGFkNjA5YjNiNmE1YzM3ZDIwN2ZmYzNjNmU3MGQxZjAyNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjAwOjM0ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvNDddIGdjYy1wb2lzb24tZGlyLWV4dGVuZAorCitBZGQgL3N3L2luY2x1ZGUgYW5kIC9vcHQvaW5jbHVkZSBiYXNlZCBvbiB0aGUgb3JpZ2luYWwKK3plY2tlLW5vLWhvc3QtaW5jbHVkZXMucGF0Y2ggcGF0Y2guICBUaGUgb3JpZ2luYWwgcGF0Y2ggY2hlY2tlZCBmb3IKKy91c3IvaW5jbHVkZSwgL3N3L2luY2x1ZGUgYW5kIC9vcHQvaW5jbHVkZSBhbmQgdGhlbiB0cmlnZ2VyZWQgYSBmYWlsdXJlIGFuZAorYWJvcnRlZC4KKworSW5zdGVhZCwgd2UgYWRkIHRoZSB0d28gbWlzc2luZyBpdGVtcyB0byB0aGUgY3VycmVudCBzY2FuLiAgSWYgdGhlIHVzZXIKK3dhbnRzIHRoaXMgdG8gYmUgYSBmYWlsdXJlLCB0aGV5IGNhbiBhZGQgIi1XZXJyb3I9cG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyIuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2luY3BhdGguYyB8IDQgKysrLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9pbmNwYXRoLmMgYi9nY2MvaW5jcGF0aC5jCitpbmRleCBmOTBlNzRkYmQ3My4uYzU4M2VlNTA2MWQgMTAwNjQ0CistLS0gYS9nY2MvaW5jcGF0aC5jCisrKysgYi9nY2MvaW5jcGF0aC5jCitAQCAtMzkzLDcgKzM5Myw5IEBAIG1lcmdlX2luY2x1ZGVfY2hhaW5zIChjb25zdCBjaGFyICpzeXNyb290LCBjcHBfcmVhZGVyICpwZmlsZSwgaW50IHZlcmJvc2UpCisgICAgICAgICAgeworICAgICAgICAgICBpZiAoKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9pbmNsdWRlIiwgMTIpKQorICAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9sb2NhbC9pbmNsdWRlIiwgMTgpKQorLSAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvWDExUjYvaW5jbHVkZSIsIDE4KSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi9zdy9pbmNsdWRlIiwgMTEpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL29wdC9pbmNsdWRlIiwgMTIpKSkKKyAgICAgICAgICAgICB3YXJuaW5nIChPUFRfV3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMsCisgICAgICAgICAgICAgICAgICAgICAgImluY2x1ZGUgbG9jYXRpb24gXCIlc1wiIGlzIHVuc2FmZSBmb3IgIgorICAgICAgICAgICAgICAgICAgICAgICJjcm9zcy1jb21waWxhdGlvbiIsCistLSAKKzIuMTIuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMTEtZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMTEtZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM5ZmYxZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAxMS1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApAQCAtMCwwICsxLDczIEBACitGcm9tIGE0MWQzYTUzYTRlMzEzYzIwODAyMzMwZDZiNWM3NTM1OGE0ZWQ4ODIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTowODozMSArMDQwMAorU3ViamVjdDogW1BBVENIIDExLzQ3XSBnY2MtNC4zLjM6IFNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQKKworQmVmb3JlIGNvbW1pdHRpbmcsIEkgbm90aWNlZCB0aGF0IFBSLzMyMTYxIHdhcyBtYXJrZWQgYXMgYSBkdXAgb2YgUFIvMzIwMDksIGJ1dCBteSBwcmV2aW91cyBwYXRjaCBkaWQgbm90IGZpeCBpdC4KKworVGhpcyBhbHRlcm5hdGl2ZSBwYXRjaCBpcyBiZXR0ZXIgYmVjYXVzZSBpdCBsZXRzIHlvdSBqdXN0IHVzZSBDRkxBR1NfRk9SX1RBUkdFVCB0byBzZXQgdGhlIGNvbXBpbGF0aW9uIGZsYWdzIGZvciBsaWJnY2MuIFNpbmNlIGJvb3RzdHJhcHBlZCB0YXJnZXQgbGlicmFyaWVzIGFyZSBuZXZlciBjb21waWxlZCB3aXRoIHRoZSBuYXRpdmUgY29tcGlsZXIsIGl0IG1ha2VzIGxpdHRsZSBzZW5zZSB0byB1c2UgZGlmZmVyZW50IGZsYWdzIGZvciBzdGFnZTEgYW5kIGxhdGVyIHN0YWdlcy4gQW5kIGl0IGFsc28gbWFrZXMgbGl0dGxlIHNlbnNlIHRvIHVzZSBhIGRpZmZlcmVudCB2YXJpYWJsZSB0aGFuIENGTEFHU19GT1JfVEFSR0VULgorCitPdGhlciBjaGFuZ2VzIEkgaGFkIHRvIGRvIGluY2x1ZGU6CisKKy0gbW92aW5nIHRoZSBjcmVhdGlvbiBvZiBkZWZhdWx0IENGTEFHU19GT1JfVEFSR0VUIGZyb20gTWFrZWZpbGUuYW0gdG8gY29uZmlndXJlLmFjLCBiZWNhdXNlIG90aGVyd2lzZSB0aGUgQk9PVF9DRkxBR1MgYXJlIHN1YnN0aXR1dGVkIGludG8gQ0ZMQUdTX0ZPUl9UQVJHRVQgKHdoaWNoIGlzICItTzIgLWcgJChDRkxBR1MpIikgdmlhICQoQ0ZMQUdTKS4gSXQgaXMgYWxzbyBjbGVhbmVyIHRoaXMgd2F5IHRob3VnaC4KKworLSBwYXNzaW5nIHRoZSByaWdodCBDRkxBR1MgdG8gY29uZmlndXJlIHNjcmlwdHMgYXMgZXhwb3J0ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzCisKK0kgYWxzbyBzdG9wcGVkIHBhc3NpbmcgTElCQ0ZMQUdTIHRvIGNvbmZpZ3VyZSBzY3JpcHRzIHNpbmNlIHRoZXkgYXJlIHVudXNlZCBpbiB0aGUgd2hvbGUgc3JjIHRyZWUuIEFuZCBJIHVwZGF0ZWQgdGhlIGRvY3VtZW50YXRpb24gYXMgSC1QIHJlbWluZGVkIG1lIHRvIGRvLgorCitCb290c3RyYXBwZWQvcmVndGVzdGVkIGk2ODYtcGMtbGludXgtZ251LCB3aWxsIGNvbW1pdCB0byA0LjQgc2hvcnRseS4gT2sgZm9yIDQuMz8KKworU2lnbmVkLW9mZi1ieTogUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgY29uZmlndXJlIHwgMzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMzIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCBiNDc2MDk1MjA4NS4uNzJhOGJhOTRjNGUgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTY3MzYsNiArNjczNiwzOCBAQCBmaQorIAorIAorIAorKyMgRHVyaW5nIGdjYyBib290c3RyYXAsIGlmIHdlIHVzZSBzb21lIHJhbmRvbSBjYyBmb3Igc3RhZ2UxIHRoZW4gQ0ZMQUdTCisrIyBtaWdodCBiZSBlbXB0eSBvciAiLWciLiAgV2UgZG9uJ3QgcmVxdWlyZSBhIEMrKyBjb21waWxlciwgc28gQ1hYRkxBR1MKKysjIG1pZ2h0IGFsc28gYmUgZW1wdHkgKG9yICItZyIsIGlmIGEgbm9uLUdDQyBDKysgY29tcGlsZXIgaXMgaW4gdGhlIHBhdGgpLgorKyMgV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBUQVJHRVQgbGlicmFyaWVzICh3aGljaCB3ZSBrbm93IGFyZSBidWlsdCB3aXRoCisrIyBnY2MpIGFyZSBidWlsdCB3aXRoICItTzIgLWciLCBzbyBpbmNsdWRlIHRob3NlIG9wdGlvbnMgd2hlbiBzZXR0aW5nCisrIyBDRkxBR1NfRk9SX1RBUkdFVCBhbmQgQ1hYRkxBR1NfRk9SX1RBUkdFVC4KKytpZiB0ZXN0ICJ4JENGTEFHU19GT1JfVEFSR0VUIiA9IHg7IHRoZW4KKysgIENGTEFHU19GT1JfVEFSR0VUPSRDRkxBR1MKKysgIGNhc2UgIiAkQ0ZMQUdTICIgaW4KKysgICAgKiIgLU8yICIqKSA7OworKyAgICAqKSBDRkxBR1NfRk9SX1RBUkdFVD0iLU8yICRDRkxBR1MiIDs7CisrICBlc2FjCisrICBjYXNlICIgJENGTEFHUyAiIGluCisrICAgICoiIC1nICIqIHwgKiIgLWczICIqKSA7OworKyAgICAqKSBDRkxBR1NfRk9SX1RBUkdFVD0iLWcgJENGTEFHUyIgOzsKKysgIGVzYWMKKytmaQorKworKworK2lmIHRlc3QgIngkQ1hYRkxBR1NfRk9SX1RBUkdFVCIgPSB4OyB0aGVuCisrICBDWFhGTEFHU19GT1JfVEFSR0VUPSRDWFhGTEFHUworKyAgY2FzZSAiICRDWFhGTEFHUyAiIGluCisrICAgICoiIC1PMiAiKikgOzsKKysgICAgKikgQ1hYRkxBR1NfRk9SX1RBUkdFVD0iLU8yICRDWFhGTEFHUyIgOzsKKysgIGVzYWMKKysgIGNhc2UgIiAkQ1hYRkxBR1MgIiBpbgorKyAgICAqIiAtZyAiKiB8ICoiIC1nMyAiKikgOzsKKysgICAgKikgQ1hYRkxBR1NfRk9SX1RBUkdFVD0iLWcgJENYWEZMQUdTIiA7OworKyAgZXNhYworK2ZpCisrCisrCisgIyBIYW5kbGUgLS13aXRoLWhlYWRlcnM9WFhYLiAgSWYgdGhlIHZhbHVlIGlzIG5vdCAieWVzIiwgdGhlIGNvbnRlbnRzIG9mCisgIyB0aGUgbmFtZWQgZGlyZWN0b3J5IGFyZSBjb3BpZWQgdG8gJCh0b29sZGlyKS9zeXMtaW5jbHVkZS4KKyBpZiB0ZXN0IHgiJHt3aXRoX2hlYWRlcnN9IiAhPSB4ICYmIHRlc3QgeCIke3dpdGhfaGVhZGVyc30iICE9IHhubyA7IHRoZW4KKy0tIAorMi4xMi4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAxMi02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAxMi02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2IzOTEyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDEyLTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsODUgQEAKK0Zyb20gM2FmOWZiYmQxNGU4MzI0MmFjMmFjYjU0YmJiNGJiNzI2ODQ1ZmQzNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjEwOjA2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTIvNDddIDY0LWJpdCBtdWx0aWxpYiBoYWNrLgorCitHQ0MgaGFzIGludGVybmFsIG11bHRpbGliIGhhbmRsaW5nIGNvZGUgYnV0IGl0IGFzc3VtZXMgYSB2ZXJ5IHNwZWNpZmljIHJpZ2lkIGRpcmVjdG9yeQorbGF5b3V0LiBUaGUgYnVpbGQgc3lzdGVtIGltcGxlbWVudGF0aW9uIG9mIG11bHRpbGliIGxheW91dCBpcyB2ZXJ5IGdlbmVyaWMgYW5kIGFsbG93cworY29tcGxldGUgY3VzdG9taXNhdGlvbiBvZiB0aGUgbGlicmFyeSBkaXJlY3Rvcmllcy4KKworVGhpcyBwYXRjaCBpcyBhIHBhcnRpYWwgc29sdXRpb24gdG8gYWxsb3cgYW55IGN1c3RvbSBkaXJlY3RvcmllcyB0byBiZSBwYXNzZWQgaW50byBnY2MKK2FuZCBoYW5kbGVkIGNvcnJlY3RseS4gSXQgZm9yY2VzIGdjYyB0byB1c2UgdGhlIGJhc2VfbGliZGlyICh3aGljaCBpcyB0aGUgY3VycmVudAorZGlyZWN0b3J5LCAiLiIpLiBXZSBuZWVkIHRvIGRvIHRoaXMgZm9yIGVhY2ggbXVsdGlsaWIgdGhhdCBpcyBjb25maWd1cmVkIGFzIHdlIGRvbid0Citrbm93IHdoaWNoIGNvbXBpbGVyIG9wdGlvbnMgbWF5IGJlIGJlaW5nIHBhc3NlZCBpbnRvIHRoZSBjb21waWxlci4gU2luY2Ugd2UgaGF2ZSBhIGNvbXBpbGVyCitwZXIgbXVsaXRsaWIgYXQgdGhpcyBwb2ludCB0aGF0IGlzbid0IGFuIGlzc3VlLgorCitUaGUgb25lIHByb2JsZW0gaXMgdGhlIHRhcmdldCBjb21waWxlciBpcyBvbmx5IGdvaW5nIHRvIHdvcmsgZm9yIHRoZSBkZWZhdWx0IG11bHRsaWxpYiBhdAordGhpcyBwb2ludC4gSWRlYWxseSB3ZSdkIGZpZ3VyZSBvdXQgd2hpY2ggbXVsdGlsaWJzIHdlcmUgYmVpbmcgZW5hYmxlZCB3aXRoIHdoaWNoIHBhdGhzCithbmQgYmUgYWJsZSB0byBwYXRjaCB0aGVzZSBlbnRyaWVzIHdpdGggYSBjb21wbGV0ZSBzZXQgb2YgY29ycmVjdCBwYXRocyBidXQgdGhpcyB3ZQorZG9uJ3QgaGF2ZSBzdWNoIGNvZGUgYXQgdGhpcyBwb2ludC4gVGhpcyBpcyBzb21ldGhpbmcgdGhlIHRhcmdldCBnY2MgcmVjaXBlIHNob3VsZCBkbworYW5kIG92ZXJyaWRlIHRoZXNlIHBsYXRmb3JtIGRlZmF1bHRzIGluIGl0cyBidWlsZCBjb25maWcuCisKK1JQIDE1LzgvMTEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEVsdmlzIERvd3NvbiA8ZWx2aXMuZG93c29uQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvY29uZmlnL2kzODYvdC1saW51eDY0ICAgfCAgNiArKy0tLS0KKyBnY2MvY29uZmlnL21pcHMvdC1saW51eDY0ICAgfCAxMCArKystLS0tLS0tCisgZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0IHwgIDUgKystLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvdC1saW51eDY0IGIvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAoraW5kZXggZTQyMmM0NDJkYWUuLmNjODg1ZTI0NDU3IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorKysrIGIvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorQEAgLTMyLDcgKzMyLDUgQEAKKyAjCisgY29tbWE9LAorIE1VTFRJTElCX09QVElPTlMgICAgPSAkKHN1YnN0ICQoY29tbWEpLC8sJChUTV9NVUxUSUxJQl9DT05GSUcpKQorLU1VTFRJTElCX0RJUk5BTUVTICAgPSAkKHBhdHN1YnN0IG0lLCAlLCAkKHN1YnN0IC8sICwkKE1VTFRJTElCX09QVElPTlMpKSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTID0gbTY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6eDg2XzY0LWxpbnV4LWdudSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTKz0gbTMyPSQoaWYgJCh3aWxkY2FyZCAkKHNoZWxsIGVjaG8gJChTWVNURU1fSEVBREVSX0RJUikpLy4uLy4uL3Vzci9saWIzMiksLi4vbGliMzIsLi4vbGliKSQoY2FsbCBpZl9tdWx0aWFyY2gsOmkzODYtbGludXgtZ251KQorLU1VTFRJTElCX09TRElSTkFNRVMrPSBteDMyPS4uL2xpYngzMiQoY2FsbCBpZl9tdWx0aWFyY2gsOng4Nl82NC1saW51eC1nbnV4MzIpCisrTVVMVElMSUJfRElSTkFNRVMgPSAuIC4KKytNVUxUSUxJQl9PU0RJUk5BTUVTID0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL21pcHMvdC1saW51eDY0IGIvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAoraW5kZXggMTAwZjlkYTVlMTQuLjYwMWNkZjA4ZDA1IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAorKysrIGIvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAorQEAgLTE3LDEwICsxNyw2IEBACisgIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgCisgTVVMVElMSUJfT1BUSU9OUyA9IG1hYmk9bjMyL21hYmk9MzIvbWFiaT02NAorLU1VTFRJTElCX0RJUk5BTUVTID0gbjMyIDMyIDY0CistTUlQU19FTCA9ICQoaWYgJChmaWx0ZXIgJWVsLCAkKGZpcnN0d29yZCAkKHN1YnN0IC0sICwkKHRhcmdldCkpKSksZWwpCistTUlQU19TT0ZUID0gJChpZiAkKHN0cmlwICQoZmlsdGVyIE1BU0tfU09GVF9GTE9BVF9BQkksICQodGFyZ2V0X2NwdV9kZWZhdWx0KSkgJChmaWx0ZXIgc29mdCwgJCh3aXRoX2Zsb2F0KSkpLHNvZnQpCistTVVMVElMSUJfT1NESVJOQU1FUyA9IFwKKy0JLi4vbGliMzIkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzNjQkKE1JUFNfRUwpLWxpbnV4LWdudWFiaW4zMiQoTUlQU19TT0ZUKSkgXAorLQkuLi9saWIkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzJChNSVBTX0VMKS1saW51eC1nbnUkKE1JUFNfU09GVCkpIFwKKy0JLi4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzNjQkKE1JUFNfRUwpLWxpbnV4LWdudWFiaTY0JChNSVBTX1NPRlQpKQorK01VTFRJTElCX0RJUk5BTUVTID0gLiAuIC4KKytNVUxUSUxJQl9PU0RJUk5BTUVTID0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKKysKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQgYi9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQKK2luZGV4IDI4MzBlZDBkODYxLi5kMDU3ZmFjZDJmZCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAorKysrIGIvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0CitAQCAtMjYsMTAgKzI2LDkgQEAKKyAjIE1VTFRJTElCX09TRElSTkFNRVMgYWNjb3JkaW5nIHRvIHdoYXQgaXMgZm91bmQgb24gdGhlIHRhcmdldC4KKyAKKyBNVUxUSUxJQl9PUFRJT05TICAgIDo9IG02NC9tMzIKKy1NVUxUSUxJQl9ESVJOQU1FUyAgIDo9IDY0IDMyCisrTVVMVElMSUJfRElSTkFNRVMgICA6PSAuIC4KKyBNVUxUSUxJQl9FWFRSQV9PUFRTIDo9IAorLU1VTFRJTElCX09TRElSTkFNRVMgOj0gbTY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6cG93ZXJwYzY0LWxpbnV4LWdudSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTICs9IG0zMj0kKGlmICQod2lsZGNhcmQgJChzaGVsbCBlY2hvICQoU1lTVEVNX0hFQURFUl9ESVIpKS8uLi8uLi91c3IvbGliMzIpLC4uL2xpYjMyLC4uL2xpYikkKGNhbGwgaWZfbXVsdGlhcmNoLDpwb3dlcnBjLWxpbnV4LWdudSkKKytNVUxUSUxJQl9PU0RJUk5BTUVTIDo9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCisgCisgcnM2MDAwLWxpbnV4Lm86ICQoc3JjZGlyKS9jb25maWcvcnM2MDAwL3JzNjAwMC1saW51eC5jCisgCSQoQ09NUElMRSkgJDwKKy0tIAorMi4xMi4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAxMy1vcHRpb25hbC1saWJzdGRjLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDEzLW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQzOWJmNgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAxMy1vcHRpb25hbC1saWJzdGRjLnBhdGNoCkBAIC0wLDAgKzEsMTI1IEBACitGcm9tIDI2YTU4ZDA1ODQ0Mjc0OTE1ZDAxMWVkYmY5MzMwYzYxNTE2ODdiMjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxMjo1NiArMDQwMAorU3ViamVjdDogW1BBVENIIDEzLzQ3XSBvcHRpb25hbCBsaWJzdGRjCisKK2djYy1ydW50aW1lIGJ1aWxkcyBsaWJzdGRjKysgc2VwYXJhdGVseSBmcm9tIGdjYy1jcm9zcy0qLiBJdHMgY29uZmlndXJlIHRlc3RzIHVzaW5nIGcrKword2lsbCBub3QgcnVuIGNvcnJlY3RseSBzaW5jZSBieSBkZWZhdWx0IHRoZSBsaW5rZXIgd2lsbCB0cnkgdG8gbGluayBhZ2FpbnN0IGxpYnN0ZGMrKword2hpY2ggc2hvdWxkbid0IGV4aXN0IHlldC4gV2UgbmVlZCBhbiBvcHRpb24gdG8gZGlzYWJsZSAtbHN0ZGMrKworb3B0aW9uIHdoaWxzdCBsZWF2aW5nIC1sYywgLWxnY2MgYW5kIG90aGVyIGF1dG9tYXRpYyBsaWJyYXJ5IGRlcGVuZGVuY2llcyBhZGRlZCBieSBnY2MKK2RyaXZlci4gVGhpcyBwYXRjaCBhZGRzIHN1Y2ggYW4gb3B0aW9uIHdoaWNoIG9ubHkgZGlzYWJsZXMgdGhlIC1sc3RkYysrLgorCitBICJzdGFuZGFyZCIgZ2NjIGJ1aWxkIHVzZXMgeGdjYyBhbmQgaGVuY2UgYXZvaWRzIHRoaXMuIFdlIHNob3VsZCBhc2sgdXBzdHJlYW0gaG93IHRvCitkbyB0aGlzIG9mZmljaWFsbHksIHRoZSBsaWtlbHkgYW5zd2VyIGlzIGRvbid0IGJ1aWxkIGxpYnN0ZGMrKyBzZXBhcmF0ZWx5LgorCitSUCAyOS82LzEwCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBnY2MvYy1mYW1pbHkvYy5vcHQgIHwgIDQgKysrKworIGdjYy9jcC9nKytzcGVjLmMgICAgfCAgMSArCisgZ2NjL2RvYy9pbnZva2UudGV4aSB8IDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCisgZ2NjL2djYy5jICAgICAgICAgICB8ICAxICsKKyA0IGZpbGVzIGNoYW5nZWQsIDM3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9jLWZhbWlseS9jLm9wdCBiL2djYy9jLWZhbWlseS9jLm9wdAoraW5kZXggOWFkMmY2ZTFmY2MuLmM0ZWY3Nzk2MjgyIDEwMDY0NAorLS0tIGEvZ2NjL2MtZmFtaWx5L2Mub3B0CisrKysgYi9nY2MvYy1mYW1pbHkvYy5vcHQKK0BAIC0xODQ4LDYgKzE4NDgsMTAgQEAgbm9zdGRpbmMrKworIEMrKyBPYmpDKysKKyBEbyBub3Qgc2VhcmNoIHN0YW5kYXJkIHN5c3RlbSBpbmNsdWRlIGRpcmVjdG9yaWVzIGZvciBDKysuCisgCisrbm9zdGRsaWIrKworK0RyaXZlcgorK0RvIG5vdCBsaW5rIHN0YW5kYXJkIEMrKyBydW50aW1lIGxpYnJhcnkKKysKKyBvCisgQyBPYmpDIEMrKyBPYmpDKysgSm9pbmVkIFNlcGFyYXRlCisgOyBEb2N1bWVudGVkIGluIGNvbW1vbi5vcHQKK2RpZmYgLS1naXQgYS9nY2MvY3AvZysrc3BlYy5jIGIvZ2NjL2NwL2crK3NwZWMuYworaW5kZXggZmZjYzg3Yzc5YzkuLjI4ZDhhOWNmNTMwIDEwMDY0NAorLS0tIGEvZ2NjL2NwL2crK3NwZWMuYworKysrIGIvZ2NjL2NwL2crK3NwZWMuYworQEAgLTEzNyw2ICsxMzcsNyBAQCBsYW5nX3NwZWNpZmljX2RyaXZlciAoc3RydWN0IGNsX2RlY29kZWRfb3B0aW9uICoqaW5fZGVjb2RlZF9vcHRpb25zLAorICAgICAgIHN3aXRjaCAoZGVjb2RlZF9vcHRpb25zW2ldLm9wdF9pbmRleCkKKyAJeworIAljYXNlIE9QVF9ub3N0ZGxpYjoKKysJY2FzZSBPUFRfbm9zdGRsaWJfXzoKKyAJY2FzZSBPUFRfbm9kZWZhdWx0bGliczoKKyAJICBsaWJyYXJ5ID0gLTE7CisgCSAgYnJlYWs7CitkaWZmIC0tZ2l0IGEvZ2NjL2RvYy9pbnZva2UudGV4aSBiL2djYy9kb2MvaW52b2tlLnRleGkKK2luZGV4IDA2MGNkNzE2OWM2Li44ZTJhZGMyNTY0NCAxMDA2NDQKKy0tLSBhL2djYy9kb2MvaW52b2tlLnRleGkKKysrKyBiL2djYy9kb2MvaW52b2tlLnRleGkKK0BAIC0yMTEsNiArMjExLDkgQEAgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KKyAtZm5vLXdlYWsgIC1ub3N0ZGluYysrIEBnb2wKKyAtZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4gQGdvbAorIC1mdmlzaWJpbGl0eS1tcy1jb21wYXQgQGdvbAorKy1mdnRhYmxlLXZlcmlmeT1AcntbfXN0ZEBye3x9cHJlaW5pdEBye3x9bm9uZUBye119IEBnb2wKKystZnZ0di1jb3VudHMgLWZ2dHYtZGVidWcgQGdvbAorKy1ub3N0ZGxpYisrIEBnb2wKKyAtZmV4dC1udW1lcmljLWxpdGVyYWxzIEBnb2wKKyAtV2FiaT1AdmFye259ICAtV2FiaS10YWcgIC1XY29udmVyc2lvbi1udWxsICAtV2N0b3ItZHRvci1wcml2YWN5IEBnb2wKKyAtV2RlbGV0ZS1ub24tdmlydHVhbC1kdG9yICAtV2xpdGVyYWwtc3VmZml4ICAtV211bHRpcGxlLWluaGVyaXRhbmNlIEBnb2wKK0BAIC00OTYsNyArNDk5LDcgQEAgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdHN9LgorIC1zICAtc3RhdGljICAtc3RhdGljLWxpYmdjYyAgLXN0YXRpYy1saWJzdGRjKysgQGdvbAorIC1zdGF0aWMtbGliYXNhbiAgLXN0YXRpYy1saWJ0c2FuICAtc3RhdGljLWxpYmxzYW4gIC1zdGF0aWMtbGlidWJzYW4gQGdvbAorIC1zdGF0aWMtbGlibXB4ICAtc3RhdGljLWxpYm1weHdyYXBwZXJzIEBnb2wKKy0tc2hhcmVkICAtc2hhcmVkLWxpYmdjYyAgLXN5bWJvbGljIEBnb2wKKystc2hhcmVkICAtc2hhcmVkLWxpYmdjYyAgLXN5bWJvbGljIC1ub3N0ZGxpYisrIEBnb2wKKyAtVCBAdmFye3NjcmlwdH0gIC1XbCxAdmFye29wdGlvbn0gIC1YbGlua2VyIEB2YXJ7b3B0aW9ufSBAZ29sCisgLXUgQHZhcntzeW1ib2x9ICAteiBAdmFye2tleXdvcmR9fQorIAorQEAgLTExNjA2LDYgKzExNjA5LDMzIEBAIGxpYnJhcnkgc3Vicm91dGluZXMuCisgY29uc3RydWN0b3JzIGFyZSBjYWxsZWQ7IEBweHJlZntDb2xsZWN0MiwsQGNvZGV7Y29sbGVjdDJ9LCBnY2NpbnQsCisgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykgSW50ZXJuYWxzfS4pCisgCisrQGl0ZW0gLW5vc3RkbGliKysKKytAb3BpbmRleCBub3N0ZGxpYisrCisrRG8gbm90IHVzZSB0aGUgc3RhbmRhcmQgc3lzdGVtIEMrKyBydW50aW1lIGxpYnJhcmllcyB3aGVuIGxpbmtpbmcuCisrT25seSB0aGUgbGlicmFyaWVzIHlvdSBzcGVjaWZ5IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBsaW5rZXIuCisrCisrQGNpbmRleCBAb3B0aW9uey1sZ2NjfSwgdXNlIHdpdGggQG9wdGlvbnstbm9zdGRsaWJ9CisrQGNpbmRleCBAb3B0aW9uey1ub3N0ZGxpYn0gYW5kIHVucmVzb2x2ZWQgcmVmZXJlbmNlcworK0BjaW5kZXggdW5yZXNvbHZlZCByZWZlcmVuY2VzIGFuZCBAb3B0aW9uey1ub3N0ZGxpYn0KKytAY2luZGV4IEBvcHRpb257LWxnY2N9LCB1c2Ugd2l0aCBAb3B0aW9uey1ub2RlZmF1bHRsaWJzfQorK0BjaW5kZXggQG9wdGlvbnstbm9kZWZhdWx0bGlic30gYW5kIHVucmVzb2x2ZWQgcmVmZXJlbmNlcworK0BjaW5kZXggdW5yZXNvbHZlZCByZWZlcmVuY2VzIGFuZCBAb3B0aW9uey1ub2RlZmF1bHRsaWJzfQorK09uZSBvZiB0aGUgc3RhbmRhcmQgbGlicmFyaWVzIGJ5cGFzc2VkIGJ5IEBvcHRpb257LW5vc3RkbGlifSBhbmQKKytAb3B0aW9uey1ub2RlZmF1bHRsaWJzfSBpcyBAZmlsZXtsaWJnY2MuYX0sIGEgbGlicmFyeSBvZiBpbnRlcm5hbCBzdWJyb3V0aW5lcworK3doaWNoIEdDQyB1c2VzIHRvIG92ZXJjb21lIHNob3J0Y29taW5ncyBvZiBwYXJ0aWN1bGFyIG1hY2hpbmVzLCBvciBzcGVjaWFsCisrbmVlZHMgZm9yIHNvbWUgbGFuZ3VhZ2VzLgorKyhAeHJlZntJbnRlcmZhY2UsLEludGVyZmFjaW5nIHRvIEdDQyBPdXRwdXQsZ2NjaW50LEdOVSBDb21waWxlcgorK0NvbGxlY3Rpb24gKEdDQykgSW50ZXJuYWxzfSwKKytmb3IgbW9yZSBkaXNjdXNzaW9uIG9mIEBmaWxle2xpYmdjYy5hfS4pCisrSW4gbW9zdCBjYXNlcywgeW91IG5lZWQgQGZpbGV7bGliZ2NjLmF9IGV2ZW4gd2hlbiB5b3Ugd2FudCB0byBhdm9pZAorK290aGVyIHN0YW5kYXJkIGxpYnJhcmllcy4gIEluIG90aGVyIHdvcmRzLCB3aGVuIHlvdSBzcGVjaWZ5IEBvcHRpb257LW5vc3RkbGlifQorK29yIEBvcHRpb257LW5vZGVmYXVsdGxpYnN9IHlvdSBzaG91bGQgdXN1YWxseSBzcGVjaWZ5IEBvcHRpb257LWxnY2N9IGFzIHdlbGwuCisrVGhpcyBlbnN1cmVzIHRoYXQgeW91IGhhdmUgbm8gdW5yZXNvbHZlZCByZWZlcmVuY2VzIHRvIGludGVybmFsIEdDQworK2xpYnJhcnkgc3Vicm91dGluZXMuCisrKEFuIGV4YW1wbGUgb2Ygc3VjaCBhbiBpbnRlcm5hbCBzdWJyb3V0aW5lIGlzIEBjb2Rle19fbWFpbn0sIHVzZWQgdG8gZW5zdXJlIEMrKworK2NvbnN0cnVjdG9ycyBhcmUgY2FsbGVkOyBAcHhyZWZ7Q29sbGVjdDIsLEBjb2Rle2NvbGxlY3QyfSwgZ2NjaW50LAorK0dOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIEludGVybmFsc30uKQorKworIEBpdGVtIC1waWUKKyBAb3BpbmRleCBwaWUKKyBQcm9kdWNlIGEgcG9zaXRpb24gaW5kZXBlbmRlbnQgZXhlY3V0YWJsZSBvbiB0YXJnZXRzIHRoYXQgc3VwcG9ydCBpdC4KK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IDYzMTVhYTBkZDE2Li5hNWZhZmJlNTEwNyAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtMTA0Niw2ICsxMDQ2LDcgQEAgcHJvcGVyIHBvc2l0aW9uIGFtb25nIHRoZSBvdGhlciBvdXRwdXQgZmlsZXMuICAqLworICAgICAlKG1mbGliKSAiIFNUQUNLX1NQTElUX1NQRUMgIlwKKyAgICAgJXtmcHJvZmlsZS1hcmNzfGZwcm9maWxlLWdlbmVyYXRlKnxjb3ZlcmFnZTotbGdjb3Z9ICIgU0FOSVRJWkVSX1NQRUMgIiBcCisgICAgICV7IW5vc3RkbGliOiV7IW5vZGVmYXVsdGxpYnM6JShsaW5rX3NzcCkgJShsaW5rX2djY19jX3NlcXVlbmNlKX19XAorKyAgICAleyFub3N0ZGxpYisrOn1cCisgICAgICV7IW5vc3RkbGliOiV7IW5vc3RhcnRmaWxlczolRX19ICV7VCp9ICBcbiUocG9zdF9saW5rKSB9fX19fX0iCisgI2VuZGlmCisgCistLSAKKzIuMTIuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMTQtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDE0LWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTJiNWZiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDE0LWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaApAQCAtMCwwICsxLDU5IEBACitGcm9tIDcxNmRlNWRiNjg1OWZkMWVhMjEwNzhjOTRhNDFmYWM3YTg4NWI3ZTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxNDoyMCArMDQwMAorU3ViamVjdDogW1BBVENIIDE0LzQ3XSBnY2M6IGRpc2FibGUgTUFTS19SRUxBWF9QSUNfQ0FMTFMgYml0CisKK1RoZSBuZXcgZmVhdHVyZSBhZGRlZCBhZnRlciA0LjMuMworImh0dHA6Ly93d3cucHViYnMubmV0LzIwMDkwOS9nY2MvOTQwNDgtcGF0Y2gtYWRkLXN1cHBvcnQtZm9yLXJtaXBzamFsci5odG1sIgord2lsbCBjYXVzZSBjYzFwbHVzIGVhdCB1cCBhbGwgdGhlIHN5c3RlbSBtZW1vcnkgd2hlbiBidWlsZCB3ZWJraXQtZ3RrLgorVGhlIGZ1bmN0aW9uIG1pcHNfZ2V0X3BpY19jYWxsX3N5bWJvbCBrZWVwcyBvbiByZWN1cnNpdmVseSBjYWxsaW5nIGl0c2VsZi4KK0Rpc2FibGUgdGhpcyBmZWF0dXJlIHRvIHdhbGsgYXNpZGUgdGhlIGJ1Zy4KKworU2lnbmVkLW9mZi1ieTogRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKy0tLQorIGdjYy9jb25maWd1cmUgICAgfCA3IC0tLS0tLS0KKyBnY2MvY29uZmlndXJlLmFjIHwgNyAtLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCA0ODk4ZjA0ZmE2Yi4uNjQwZTQ2NDM4MDUgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMjczMDMsMTMgKzI3MzAzLDYgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgYXNzZW1ibGVyIGFuZCBsaW5rZXIgZm9yIGV4cGxpY2l0IEpBTFIgcmVsb2NhdGlvbi4uLiAiID4mNjsKKyAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgICBmaQorICAgICBmaQorLSAgICBpZiB0ZXN0ICRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyA9IHllczsgdGhlbgorLSAgICAgIGlmIHRlc3QgeCR0YXJnZXRfY3B1X2RlZmF1bHQgPSB4OyB0aGVuCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9TUFTS19SRUxBWF9QSUNfQ0FMTFMKKy0gICAgICBlbHNlCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9IigkdGFyZ2V0X2NwdV9kZWZhdWx0KXxNQVNLX1JFTEFYX1BJQ19DQUxMUyIKKy0gICAgICBmaQorLSAgICBmaQorICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jIiA+JjUKKyAkYXNfZWNobyAiJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggOWRjMWRjN2ZjOTYuLjlhMmRhZTU1YmEyIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTQ2NDEsMTMgKzQ2NDEsNiBAQCB4OgorICAgICAgICAgcm0gLWYgY29uZnRlc3QuKgorICAgICAgIGZpCisgICAgIGZpCistICAgIGlmIHRlc3QgJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jID0geWVzOyB0aGVuCistICAgICAgaWYgdGVzdCB4JHRhcmdldF9jcHVfZGVmYXVsdCA9IHg7IHRoZW4KKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD1NQVNLX1JFTEFYX1BJQ19DQUxMUworLSAgICAgIGVsc2UKKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD0iKCR0YXJnZXRfY3B1X2RlZmF1bHQpfE1BU0tfUkVMQVhfUElDX0NBTExTIgorLSAgICAgIGZpCistICAgIGZpCisgICAgIEFDX01TR19SRVNVTFQoJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jKQorIAorICAgICBBQ19DQUNIRV9DSEVDSyhbbGlua2VyIGZvciAuZWhfZnJhbWUgcGVyc29uYWxpdHkgcmVsYXhhdGlvbl0sCistLSAKKzIuMTIuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMTUtQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAxNS1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNjI5NDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMTUtQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIDA0YTdhNjcyMzAxYmIwN2NhZWE2YTdjYWQ4Mzc4ZjYzZjFmZTMyMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxNjoyOCArMDQwMAorU3ViamVjdDogW1BBVENIIDE1LzQ3XSBDT0xMRUNUX0dDQ19PUFRJT05TCisKK1RoaXMgcGF0Y2ggYWRkcyAtLXN5c3Jvb3QgaW50byBDT0xMRUNUX0dDQ19PUFRJT05TIHdoaWNoIGlzIHVzZWQgdG8KK2ludm9rZSBjb2xsZWN0Mi4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvZ2NjLmMgfCA5ICsrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggYTVmYWZiZTUxMDcuLjA1ODk2ZTE5OTI2IDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC00NjU0LDYgKzQ2NTQsMTUgQEAgc2V0X2NvbGxlY3RfZ2NjX29wdGlvbnMgKHZvaWQpCisgCQlzaXplb2YgKCJDT0xMRUNUX0dDQ19PUFRJT05TPSIpIC0gMSk7CisgCisgICBmaXJzdF90aW1lID0gVFJVRTsKKysjaWZkZWYgSEFWRV9MRF9TWVNST09UCisrICBpZiAodGFyZ2V0X3N5c3RlbV9yb290X2NoYW5nZWQgJiYgdGFyZ2V0X3N5c3RlbV9yb290KQorKyAgICB7CisrICAgICAgb2JzdGFja19ncm93ICgmY29sbGVjdF9vYnN0YWNrLCAiJy0tc3lzcm9vdD0iLCBzaXplb2YoIictLXN5c3Jvb3Q9IiktMSk7CisrICAgICAgb2JzdGFja19ncm93ICgmY29sbGVjdF9vYnN0YWNrLCB0YXJnZXRfc3lzdGVtX3Jvb3Qsc3RybGVuKHRhcmdldF9zeXN0ZW1fcm9vdCkpOworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgIiciLCAxKTsKKysgICAgICBmaXJzdF90aW1lID0gRkFMU0U7CisrICAgIH0KKysjZW5kaWYKKyAgIGZvciAoaSA9IDA7IChpbnQpIGkgPCBuX3N3aXRjaGVzOyBpKyspCisgICAgIHsKKyAgICAgICBjb25zdCBjaGFyICpjb25zdCAqYXJnczsKKy0tIAorMi4xMi4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAxNi1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAxNi1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTkxMjUxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDE2LVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoCkBAIC0wLDAgKzEsOTYgQEAKK0Zyb20gNDcwNzFjYmQ0ZjEzZmY1YTQ5NzRmNzFmMzU5YTA0YWZjZmIxMjVkYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE3OjI1ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTYvNDddIFVzZSB0aGUgZGVmYXVsdHMuaCBpbiAke0J9IGluc3RlYWQgb2YgJHtTfSwgYW5kIHQtb2UgaW4KKyAke0J9CisKK1VzZSB0aGUgZGVmYXVsdHMuaCBpbiAke0J9IGluc3RlYWQgb2YgJHtTfSwgYW5kIHQtb2UgaW4gJHtCfSwgc28gdGhhdAordGhlIHNvdXJjZSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gZ2NjLWNyb3NzLWluaXRpYWwsCitnY2MtY3Jvc3MtaW50ZXJtZWRpYXRlLCBnY2MtY3Jvc3MsIGdjYy1ydW50aW1lLCBhbmQgYWxzbyB0aGUgc2RrIGJ1aWxkLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV2hpbGUgY29tcGlsaW5nIGdjYy1jcm9zc3Nkay1pbml0aWFsLXg4Nl82NCBvbiBzb21lIGhvc3QsIHRoZXJlIGlzCitvY2Nhc2lvbmFsbHkgZmFpbHVyZSB0aGF0IHRlc3QgdGhlIGV4aXN0YW5jZSBvZiBkZWZhdWx0LmggZG9lc24ndAord29yaywgdGhlIHJlYXNvbiBpcyB0bV9pbmNsdWRlX2xpc3Q9JyoqIGRlZmF1bHRzLmgnIHJhdGhlciB0aGFuCit0bV9pbmNsdWRlX2xpc3Q9JyoqIC4vZGVmYXVsdHMuaCcKKworU28gd2UgYWRkIHRoZSB0ZXN0IGNvbmRpdGlvbiBmb3IgdGhpcyBzaXR1YXRpb24uCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBnY2MvTWFrZWZpbGUuaW4gIHwgMiArLQorIGdjYy9jb25maWd1cmUgICAgfCA0ICsrLS0KKyBnY2MvY29uZmlndXJlLmFjIHwgNCArKy0tCisgZ2NjL21rY29uZmlnLnNoICB8IDQgKystLQorIDQgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCitpbmRleCAyNDExNjcxY2VhMy4uN2I1OTBjOWJiZDMgMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTUzMiw3ICs1MzIsNyBAQCBUQVJHRVRfU1lTVEVNX1JPT1QgPSBAVEFSR0VUX1NZU1RFTV9ST09UQAorIFRBUkdFVF9TWVNURU1fUk9PVF9ERUZJTkUgPSBAVEFSR0VUX1NZU1RFTV9ST09UX0RFRklORUAKKyAKKyB4bWFrZV9maWxlPUB4bWFrZV9maWxlQAorLXRtYWtlX2ZpbGU9QHRtYWtlX2ZpbGVACisrdG1ha2VfZmlsZT1AdG1ha2VfZmlsZUAgLi90LW9lCisgVE1fRU5ESUFOX0NPTkZJRz1AVE1fRU5ESUFOX0NPTkZJR0AKKyBUTV9NVUxUSUxJQl9DT05GSUc9QFRNX01VTFRJTElCX0NPTkZJR0AKKyBUTV9NVUxUSUxJQl9FWENFUFRJT05TX0NPTkZJRz1AVE1fTVVMVElMSUJfRVhDRVBUSU9OU19DT05GSUdACitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDY0MGU0NjQzODA1Li5iNWFjMTU1MjU0MSAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0xMjE1MCw4ICsxMjE1MCw4IEBAIGZvciBmIGluICR0bV9maWxlOyBkbworICAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKyAgICAgICAgOzsKKyAgICAgZGVmYXVsdHMuaCApCistICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvJGYiCistICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuLyRmIgorICAgICAgICA7OworICAgICAqICkKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS9jb25maWcvJGYiCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IDlhMmRhZTU1YmEyLi5jYjE0NzlkMWVmNCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC0xOTIyLDggKzE5MjIsOCBAQCBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisgICAgICAgIDs7CisgICAgIGRlZmF1bHRzLmggKQorLSAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpLyRmIgorLSAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi8kZiIKKyAgICAgICAgOzsKKyAgICAgKiApCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvY29uZmlnLyRmIgorZGlmZiAtLWdpdCBhL2djYy9ta2NvbmZpZy5zaCBiL2djYy9ta2NvbmZpZy5zaAoraW5kZXggOWZjN2I1Y2E3MzQuLjA0YWJlY2ZlNjQ4IDEwMDY0NAorLS0tIGEvZ2NjL21rY29uZmlnLnNoCisrKysgYi9nY2MvbWtjb25maWcuc2gKK0BAIC03Nyw3ICs3Nyw3IEBAIGlmIFsgLW4gIiRIRUFERVJTIiBdOyB0aGVuCisgICAgIGlmIFsgJCMgLWdlIDEgXTsgdGhlbgorIAllY2hvICcjaWZkZWYgSU5fR0NDJyA+PiAke291dHB1dH1UCisgCWZvciBmaWxlIGluICIkQCI7IGRvCistCSAgICBpZiB0ZXN0IHgiJGZpbGUiID0geCJkZWZhdWx0cy5oIjsgdGhlbgorKwkgICAgaWYgdGVzdCB4IiRmaWxlIiA9IHgiLi9kZWZhdWx0cy5oIiAtbyB4IiRmaWxlIiA9IHgiZGVmYXVsdHMuaCI7IHRoZW4KKyAJCXBvc3Rwb25lX2RlZmF1bHRzX2g9InllcyIKKyAJICAgIGVsc2UKKyAJCWVjaG8gIiMgaW5jbHVkZSBcIiRmaWxlXCIiID4+ICR7b3V0cHV0fVQKK0BAIC0xMDksNyArMTA5LDcgQEAgZXNhYworIAorICMgSWYgd2UgcG9zdHBvbmVkIGluY2x1ZGluZyBkZWZhdWx0cy5oLCBhZGQgdGhlICNpbmNsdWRlIG5vdy4KKyBpZiB0ZXN0IHgiJHBvc3Rwb25lX2RlZmF1bHRzX2giID0geCJ5ZXMiOyB0aGVuCistICAgIGVjaG8gIiMgaW5jbHVkZSBcImRlZmF1bHRzLmhcIiIgPj4gJHtvdXRwdXR9VAorKyAgICBlY2hvICIjIGluY2x1ZGUgXCIuL2RlZmF1bHRzLmhcIiIgPj4gJHtvdXRwdXR9VAorIGZpCisgCisgIyBBZGQgbXVsdGlwbGUgaW5jbHVzaW9uIHByb3RlY3Rpb24gZ3VhcmQsIHBhcnQgdHdvLgorLS0gCisyLjEyLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDE3LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDE3LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyODMwYzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMTctZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSA0ZmMzNWEyYmI3NjY2YTdkZTM1NTY4ZWI1ZDQ3ZjBjZTZhY2ViZTYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjA6MDEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNy80N10gZm9ydHJhbiBjcm9zcy1jb21waWxlIGhhY2suCisKKyogRm9ydHJhbiB3b3VsZCBoYXZlIHNlYXJjaGVkIGZvciBhcm0tYW5nc3Ryb20tZ251ZWFiaS1nZm9ydHJhbiBidXQgd291bGQgaGF2ZSB1c2VkCit1c2VkIGdmb3J0YW4uIEZvciBnY2NfNC4yLjIuYmIgd2Ugd2FudCB0byB1c2UgdGhlIGdmb3J0cmFuIGNvbXBpbGVyIGZyb20gb3VyIGNyb3NzCitkaXJlY3RvcnkuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBsaWJnZm9ydHJhbi9jb25maWd1cmUgICAgfCAyICstCisgbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlCitpbmRleCA4MTIzOGZjYjc5Yy4uN2RlZDdhYmQ0NTYgMTAwNzU1CistLS0gYS9saWJnZm9ydHJhbi9jb25maWd1cmUKKysrKyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQorQEAgLTEyNzkyLDcgKzEyNzkyLDcgQEAgZXNhYworIAorICMgV2UgbmVlZCBnZm9ydHJhbiB0byBjb21waWxlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5CisgI0FDX1BST0dfRkMoZ2ZvcnRyYW4pCistRkM9IiRHRk9SVFJBTiIKKysjRkM9IiRHRk9SVFJBTiIKKyBhY19leHQ9JHthY19mY19zcmNleHQtZn0KKyBhY19jb21waWxlPSckRkMgLWMgJEZDRkxBR1MgJGFjX2ZjZmxhZ3Nfc3JjZXh0IGNvbmZ0ZXN0LiRhY19leHQgPiY1JworIGFjX2xpbms9JyRGQyAtbyBjb25mdGVzdCRhY19leGVleHQgJEZDRkxBR1MgJExERkxBR1MgJGFjX2ZjZmxhZ3Nfc3JjZXh0IGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworZGlmZiAtLWdpdCBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYworaW5kZXggMzdiMTJkMjk5OGYuLjYzYTQxNjZlZjYyIDEwMDY0NAorLS0tIGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjCisrKysgYi9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKK0BAIC0yNDMsNyArMjQzLDcgQEAgQUNfU1VCU1QoZW5hYmxlX3N0YXRpYykKKyAKKyAjIFdlIG5lZWQgZ2ZvcnRyYW4gdG8gY29tcGlsZSBwYXJ0cyBvZiB0aGUgbGlicmFyeQorICNBQ19QUk9HX0ZDKGdmb3J0cmFuKQorLUZDPSIkR0ZPUlRSQU4iCisrI0ZDPSIkR0ZPUlRSQU4iCisgQUNfUFJPR19GQyhnZm9ydHJhbikKKyAKKyAjIGV4dHJhIExEIEZsYWdzIHdoaWNoIGFyZSByZXF1aXJlZCBmb3IgdGFyZ2V0cworLS0gCisyLjEyLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDE4LWNwcC1ob25vci1zeXNyb290LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDE4LWNwcC1ob25vci1zeXNyb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NTkwNzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMTgtY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSAxYzhhMzMyNDY5Y2E0YmZlZmIxMGRmNzA3MjBlMGRjODNmZjlhNzU2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjI6MDAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxOC80N10gY3BwOiBob25vciBzeXNyb290LgorCitDdXJyZW50bHksIGlmIHRoZSBnY2MgdG9vbGNoYWluIGlzIHJlbG9jYXRlZCBhbmQgaW5zdGFsbGVkIGZyb20gc3N0YXRlLCB0aGVuIHlvdSB0cnkgYW5kIGNvbXBpbGUKK3ByZXByb2Nlc3NlZCBzb3VyY2UgKC5pIG9yIC5paSBmaWxlcyksIHRoZSBjb21waWxlciB3aWxsIHRyeSBhbmQgYWNjZXNzIHRoZSBidWlsdGluIHN5c3Jvb3QgbG9jYXRpb24KK3JhdGhlciB0aGFuIHRoZSAtLXN5c3Jvb3Qgb3B0aW9uIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZGxpbmUuIElmIGFjY2VzcyB0byB0aGF0IGRpcmVjdG9yeSBpcworcGVybWlzc2lvbiBkZW5pZWQgKHVucmVhZGFibGUpLCBnY2Mgd2lsbCBlcnJvci4KKworVGhpcyBoYXBwZW5zIHdoZW4gY2NhY2hlIGlzIGluIHVzZSBkdWUgdG8gdGhlIGZhY3QgaXQgdXNlcyBwcmVwcm9jZXNzZWQgc291cmNlIGZpbGVzLgorCitUaGUgZml4IGJlbG93IGFkZHMgJUkgdG8gdGhlIGNwcC1vdXRwdXQgc3BlYyBtYWNybyBzbyB0aGUgZGVmYXVsdCBzdWJzdGl0dXRpb25zIGZvciAtaXByZWZpeCwKKy1pc3lzdGVtLCAtaXN5c3Jvb3QgaGFwcGVuIGFuZCB0aGUgY29ycmVjdCBzeXNyb290IGlzIHVzZWQuCisKK1tZT0NUTyAjMjA3NF0KKworUlAgMjAxMi8wNC8xMworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jcC9sYW5nLXNwZWNzLmggfCAyICstCisgZ2NjL2djYy5jICAgICAgICAgICB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jcC9sYW5nLXNwZWNzLmggYi9nY2MvY3AvbGFuZy1zcGVjcy5oCitpbmRleCA2YjM4M2UxZDg2ZC4uYzdjN2Q2YTU2ZWMgMTAwNjQ0CistLS0gYS9nY2MvY3AvbGFuZy1zcGVjcy5oCisrKysgYi9nY2MvY3AvbGFuZy1zcGVjcy5oCitAQCAtNjQsNSArNjQsNSBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgeyIuaWkiLCAiQGMrKy1jcHAtb3V0cHV0IiwgMCwgMCwgMH0sCisgICB7IkBjKystY3BwLW91dHB1dCIsCisgICAgIiV7IU06JXshTU06JXshRTpcCistICAgIGNjMXBsdXMgLWZwcmVwcm9jZXNzZWQgJWkgJShjYzFfb3B0aW9ucykgJTJcCisrICAgIGNjMXBsdXMgLWZwcmVwcm9jZXNzZWQgJWkgJUkgJShjYzFfb3B0aW9ucykgJTJcCisgICAgICV7IWZzeW50YXgtb25seTolKGludm9rZV9hcyl9fX19IiwgMCwgMCwgMH0sCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCAwNTg5NmUxOTkyNi4uYzczZDQwMjM5ODcgMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTEzNTEsNyArMTM1MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcGlsZXIgZGVmYXVsdF9jb21waWxlcnNbXSA9CisgCQkJCQkgICAlV3tvKjotLW91dHB1dC1wY2g9JSp9fSVWfX19fX19fSIsIDAsIDAsIDB9LAorICAgeyIuaSIsICJAY3BwLW91dHB1dCIsIDAsIDAsIDB9LAorICAgeyJAY3BwLW91dHB1dCIsCistICAgIiV7IU06JXshTU06JXshRTpjYzEgLWZwcmVwcm9jZXNzZWQgJWkgJShjYzFfb3B0aW9ucykgJXshZnN5bnRheC1vbmx5OiUoaW52b2tlX2FzKX19fX0iLCAwLCAwLCAwfSwKKysgICAiJXshTToleyFNTToleyFFOmNjMSAtZnByZXByb2Nlc3NlZCAlaSAlSSAlKGNjMV9vcHRpb25zKSAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAorICAgeyIucyIsICJAYXNzZW1ibGVyIiwgMCwgMCwgMH0sCisgICB7IkBhc3NlbWJsZXIiLAorICAgICIleyFNOiV7IU1NOiV7IUU6JXshUzphcyAlKGFzbV9kZWJ1ZykgJShhc21fb3B0aW9ucykgJWkgJUEgfX19fSIsIDAsIDAsIDB9LAorLS0gCisyLjEyLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDE5LU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMTktTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDJhNDAxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDE5LU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorRnJvbSAwYTNiM2NjNDVlYTdiYTgzYjQ2ZGY3NDY0YjQxYzM3N2UzOTY2ZDg4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjM6MDggKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxOS80N10gTUlQUzY0OiBEZWZhdWx0IHRvIE42NCBBQkkKKworTUlQUzY0IGRlZmF1bHRzIHRvIG4zMiBBQkksIHRoaXMgcGF0Y2ggbWFrZXMgaXQKK3NvIHRoYXQgaXQgZGVmYXVsdHMgdG8gTjY0IEFCSQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZyBzcGVjaWZpY10KKy0tLQorIGdjYy9jb25maWcuZ2NjIHwgMTAgKysrKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnLmdjYyBiL2djYy9jb25maWcuZ2NjCitpbmRleCBiOGJiNGQ2NTgyNS4uNWU0NWY0YjUxOTkgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnLmdjYworKysrIGIvZ2NjL2NvbmZpZy5nY2MKK0BAIC0yMDg0LDI5ICsyMDg0LDI5IEBAIG1pcHMqLSotbGludXgqKQkJCQkjIExpbnV4IE1JUFMsIGVpdGhlciBlbmRpYW4uCisgCQkJZGVmYXVsdF9taXBzX2FyY2g9bWlwczMyCisgCQkJOzsKKyAJCW1pcHM2NGVsLXN0LWxpbnV4LWdudSkKKy0JCQlkZWZhdWx0X21pcHNfYWJpPW4zMgorKwkJCWRlZmF1bHRfbWlwc19hYmk9NjQKKyAJCQl0bV9maWxlPSIke3RtX2ZpbGV9IG1pcHMvc3QuaCIKKyAJCQl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IG1pcHMvdC1zdCIKKyAJCQllbmFibGVfbWlwc19tdWx0aWxpYnM9InllcyIKKyAJCQk7OworIAkJbWlwczY0b2N0ZW9uKi0qLWxpbnV4KikKKy0JCQlkZWZhdWx0X21pcHNfYWJpPW4zMgorKwkJCWRlZmF1bHRfbWlwc19hYmk9NjQKKyAJCQl0bV9kZWZpbmVzPSIke3RtX2RlZmluZXN9IE1JUFNfQ1BVX1NUUklOR19ERUZBVUxUPVxcXCJvY3Rlb25cXFwiIgorIAkJCXRhcmdldF9jcHVfZGVmYXVsdD1NQVNLX1NPRlRfRkxPQVRfQUJJCisgCQkJZW5hYmxlX21pcHNfbXVsdGlsaWJzPSJ5ZXMiCisgCQkJOzsKKyAJCW1pcHNpc2E2NHI2Ki0qLWxpbnV4KikKKy0JCQlkZWZhdWx0X21pcHNfYWJpPW4zMgorKwkJCWRlZmF1bHRfbWlwc19hYmk9NjQKKyAJCQlkZWZhdWx0X21pcHNfYXJjaD1taXBzNjRyNgorIAkJCWVuYWJsZV9taXBzX211bHRpbGlicz0ieWVzIgorIAkJCTs7CisgCQltaXBzaXNhNjRyMiotKi1saW51eCopCistCQkJZGVmYXVsdF9taXBzX2FiaT1uMzIKKysJCQlkZWZhdWx0X21pcHNfYWJpPTY0CisgCQkJZGVmYXVsdF9taXBzX2FyY2g9bWlwczY0cjIKKyAJCQllbmFibGVfbWlwc19tdWx0aWxpYnM9InllcyIKKyAJCQk7OworIAkJbWlwczY0Ki0qLWxpbnV4KiB8IG1pcHNpc2E2NCotKi1saW51eCopCistCQkJZGVmYXVsdF9taXBzX2FiaT1uMzIKKysJCQlkZWZhdWx0X21pcHNfYWJpPTY0CisgCQkJZW5hYmxlX21pcHNfbXVsdGlsaWJzPSJ5ZXMiCisgCQkJOzsKKyAJZXNhYworLS0gCisyLjEyLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDIwLURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMjAtRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTdiNGRmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDIwLURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2gKQEAgLTAsMCArMSwyMzQgQEAKK0Zyb20gZDZjOTgzYjY4NWVlMDNlOWNmMjExODkxMDhkMzFlZDlmNzYwZmYzZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI0OjUwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjAvNDddIERlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBhbmQgVUNMSUJDX0RZTkFNSUNfTElOS0VSCisgcmVsYXRpdmUgdG8gU1lTVEVNTElCU19ESVIKKworVGhpcyBwYXRjaCBkZWZpbmVzIEdMSUJDX0RZTkFNSUNfTElOS0VSIGFuZCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIKK3JlbGF0aXZlIHRvIFNZU1RFTUxJQlNfRElSIHdoaWNoIGNhbiBiZSBzZXQgaW4gZ2VuZXJhdGVkIGhlYWRlcnMKK1RoaXMgYnJlYWtzIHRoZSBhc3N1bXB0aW9uIG9mIGhhcmRjb2RlZCBtdWx0aWxpYiBpbiBnY2MKK0NoYW5nZSBpcyBvbmx5IGZvciB0aGUgc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXMgaW4gT0UgaW5jbHVkaW5nCitTSCwgc3BhcmMsIGFscGhhIGZvciBwb3NzaWJsZSBmdXR1cmUgc3VwcG9ydCAoaWYgYW55KQorCitSZW1vdmVzIHRoZSBkb19oZWFkZXJmaXggdGFzayBpbiBtZXRhZGF0YQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZ3VyYXRpb25dCistLS0KKyBnY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oIHwgIDQgKystLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCAgfCAgNCArKy0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggICB8ICAyICstCisgZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmggICAgICB8ICAyICstCisgZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaCAgICB8ICA2ICsrKy0tLQorIGdjYy9jb25maWcvbGludXguaCAgICAgICAgICAgfCAgOCArKysrLS0tLQorIGdjYy9jb25maWcvbWlwcy9saW51eC5oICAgICAgfCAxMiArKysrKystLS0tLS0KKyBnY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmggIHwgMTYgKysrKysrLS0tLS0tLS0tLQorIGdjYy9jb25maWcvc2gvbGludXguaCAgICAgICAgfCAgMiArLQorIGdjYy9jb25maWcvc3BhcmMvbGludXguaCAgICAgfCAgMiArLQorIGdjYy9jb25maWcvc3BhcmMvbGludXg2NC5oICAgfCAgNCArKy0tCisgMTEgZmlsZXMgY2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKSwgMzMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oIGIvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAoraW5kZXggMmMzOWZiZTYwMWMuLjZkODhlMjFhYmUyIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAorKysrIGIvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAorQEAgLTIzLDggKzIzLDggQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAjZGVmaW5lIEVYVFJBX1NQRUNTIFwKKyB7ICJlbGZfZHluYW1pY19saW5rZXIiLCBFTEZfRFlOQU1JQ19MSU5LRVIgfSwKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSCSIvbGliL2xkLWxpbnV4LnNvLjIiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUglTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorICNpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMKKyAjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVKSAiJXttZ2xpYmM6IiBHICI7OiIgVSAifSIKKyAjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19HTElCQworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAoraW5kZXggYTA4Y2ZiMzQzNzcuLmZiYWM5YTlkOTk0IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCisrKysgYi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKK0BAIC02Miw4ICs2Miw4IEBACisgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCBhbmQgVEFSR0VUX0RFRkFVTFRfRkxPQVRfQUJJLiAgKi8KKyAKKyAjdW5kZWYgIEdMSUJDX0RZTkFNSUNfTElOS0VSCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUICIvbGliL2xkLWxpbnV4LnNvLjMiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9IQVJEX0ZMT0FUICIvbGliL2xkLWxpbnV4LWFybWhmLnNvLjMiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4zIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfSEFSRF9GTE9BVCBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtYXJtaGYuc28uMyIKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVAorIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgXAorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKK2luZGV4IDNkNjIzNjdhZTY4Li5lOGExNjE5MTg0OSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCisrKysgYi9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorQEAgLTYwLDcgKzYwLDcgQEAKKyAKKyAjZGVmaW5lIExJQkdDQ19TUEVDICIle21mbG9hdC1hYmk9c29mdCo6LWxmbG9hdH0gLWxnY2MiCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI2RlZmluZSBMSU5VWF9UQVJHRVRfTElOS19TUEVDICAiJXtoKn0gXAorICAgICV7c3RhdGljOi1Cc3RhdGljfSBcCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmggYi9nY2MvY29uZmlnL2kzODYvbGludXguaAoraW5kZXggNTkxMzIxMjRkNmIuLjMzNmQxNTg2MjljIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgKKysrKyBiL2djYy9jb25maWcvaTM4Ni9saW51eC5oCitAQCAtMjAsNyArMjAsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTiAiZWxmX2kzODYiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI3VuZGVmIE1VU0xfRFlOQU1JQ19MSU5LRVIKKyAjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbXVzbC1pMzg2LnNvLjEiCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaCBiL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgKK2luZGV4IGU2NWM0MDRmZjkxLi5jMzRkZWQ5ODQ4MSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgKKysrKyBiL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgKK0BAIC0yNyw5ICsyNyw5IEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT042NCAiZWxmX3g4Nl82NCIKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OWDMyICJlbGYzMl94ODZfNjQiCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLWxpbnV4LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliNjQvbGQtbGludXgteDg2LTY0LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUlgzMiAiL2xpYngzMi9sZC1saW51eC14MzIuc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1saW51eC14ODYtNjQuc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSWDMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC14MzIuc28uMiIKKyAKKyAjdW5kZWYgTVVTTF9EWU5BTUlDX0xJTktFUjMyCisgI2RlZmluZSBNVVNMX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtbXVzbC1pMzg2LnNvLjEiCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9saW51eC5oIGIvZ2NjL2NvbmZpZy9saW51eC5oCitpbmRleCBiM2E5ZTg1ZTc3Zi4uMmU2ODNkMGM0MzAgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2xpbnV4LmgKKysrKyBiL2djYy9jb25maWcvbGludXguaAorQEAgLTgxLDEwICs4MSwxMCBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKyAgICBHTElCQ19EWU5BTUlDX0xJTktFUiBtdXN0IGJlIGRlZmluZWQgZm9yIGVhY2ggdGFyZ2V0IHVzaW5nIHRoZW0sIG9yCisgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBhbmQgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBmb3IgdGFyZ2V0cworICAgIHN1cHBvcnRpbmcgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBjb21waWxhdGlvbi4gICovCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliL2xkNjQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgIi9saWIvbGR4MzItdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgU1lTVEVNTElCU19ESVIgImxkeDMyLXVDbGliYy5zby4wIgorICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSICIvc3lzdGVtL2Jpbi9saW5rZXIiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIzMiAiL3N5c3RlbS9iaW4vbGlua2VyIgorICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSNjQgIi9zeXN0ZW0vYmluL2xpbmtlcjY0IgorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbWlwcy9saW51eC5oIGIvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgKK2luZGV4IDQ0MTMyYjhlNDRkLi44MDUwNWFkOWY0OCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvbWlwcy9saW51eC5oCisrKysgYi9nY2MvY29uZmlnL21pcHMvbGludXguaAorQEAgLTIyLDIwICsyMiwyMCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT05OMzIgImVsZjMyJXtFQjpifSV7RUw6bH10c21pcG4zMiIKKyAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQtbGludXgtbWlwc244LnNvLjE7Oi9saWIvbGQuc28uMX0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBcCistICAiJXttbmFuPTIwMDg6L2xpYjY0L2xkLWxpbnV4LW1pcHNuOC5zby4xOzovbGliNjQvbGQuc28uMX0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIzMi9sZC1saW51eC1taXBzbjguc28uMTs6L2xpYjMyL2xkLnNvLjF9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LW1pcHNuOC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZC5zby4xfSIKKyAKKyAjdW5kZWYgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIKKyAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyIFwKKy0gICIle21uYW49MjAwODovbGliL2xkLXVDbGliYy1taXBzbjguc28uMDs6L2xpYi9sZC11Q2xpYmMuc28uMH0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLW1pcHNuOC5zby4wOzoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMH0iCisgI3VuZGVmIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0CisgI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBcCistICAiJXttbmFuPTIwMDg6L2xpYi9sZDY0LXVDbGliYy1taXBzbjguc28uMDs6L2xpYi9sZDY0LXVDbGliYy5zby4wfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy1taXBzbjguc28uMDs6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMH0iCisgI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIzMi9sZC11Q2xpYmMtbWlwc244LnNvLjA7Oi9saWIzMi9sZC11Q2xpYmMuc28uMH0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLW1pcHNuOC5zby4wOzoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMH0iCisgCisgI3VuZGVmIE1VU0xfRFlOQU1JQ19MSU5LRVIzMgorICNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUjMyIFwKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmggYi9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKK2luZGV4IDcxZTM1YjcwOWFkLi4zYjAwZWMwZmNmMCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAorKysrIGIvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCitAQCAtNDEyLDE2ICs0MTIsMTEgQEAgZXh0ZXJuIGludCBkb3Rfc3ltYm9sczsKKyAjdW5kZWYJTElOS19PU19ERUZBVUxUX1NQRUMKKyAjZGVmaW5lIExJTktfT1NfREVGQVVMVF9TUEVDICIlKGxpbmtfb3NfbGludXgpIgorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiJShkeW5hbWljX2xpbmtlcl9wcmVmaXgpL2xpYi9sZC5zby4xIgorLQorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQuc28uMSIKKyAjaWZkZWYgTElOVVg2NF9ERUZBVUxUX0FCSV9FTEZ2MgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBcCistIiV7bWFiaT1lbGZ2MTolKGR5bmFtaWNfbGlua2VyX3ByZWZpeCkvbGliNjQvbGQ2NC5zby4xOyIgXAorLSI6JShkeW5hbWljX2xpbmtlcl9wcmVmaXgpL2xpYjY0L2xkNjQuc28uMn0iCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjE6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZDY0LnNvLjJ9IgorICNlbHNlCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFwKKy0iJXttYWJpPWVsZnYyOiUoZHluYW1pY19saW5rZXJfcHJlZml4KS9saWI2NC9sZDY0LnNvLjI7IiBcCistIjolKGR5bmFtaWNfbGlua2VyX3ByZWZpeCkvbGliNjQvbGQ2NC5zby4xfSIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIiV7bWFiaT1lbGZ2MjoiIFNZU1RFTUxJQlNfRElSICJsZDY0LnNvLjI7OiIgU1lTVEVNTElCU19ESVIgImxkNjQuc28uMX0iCisgI2VuZGlmCisgCisgI2RlZmluZSBNVVNMX0RZTkFNSUNfTElOS0VSMzIgXAorQEAgLTQyOSw4ICs0MjQsOSBAQCBleHRlcm4gaW50IGRvdF9zeW1ib2xzOworICNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUjY0IFwKKyAgICIvbGliL2xkLW11c2wtcG93ZXJwYzY0IiBNVVNMX0RZTkFNSUNfTElOS0VSX0UgIiV7bXNvZnQtZmxvYXQ6LXNmfS5zby4xIgorIAorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYi9sZDY0LXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLnNvLjAiCisrCisgI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX1VDTElCQworICNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUsIE0pIFwKKyAgICIle21nbGliYzoiIEcgIjs6JXttbXVzbDoiIE0gIjs6IiBVICJ9fSIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL3NoL2xpbnV4LmggYi9nY2MvY29uZmlnL3NoL2xpbnV4LmgKK2luZGV4IGMzMDA4MzQyM2YyLi4xOTZiODI3MjVmOCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvc2gvbGludXguaAorKysrIGIvZ2NjL2NvbmZpZy9zaC9saW51eC5oCitAQCAtNjQsNyArNjQsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgIi9saWIvbGQtbXVzbC1zaCIgTVVTTF9EWU5BTUlDX0xJTktFUl9FIE1VU0xfRFlOQU1JQ19MSU5LRVJfRlAgXAorICAgIiV7bWZkcGljOi1mZHBpY30uc28uMSIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjdW5kZWYgU1VCVEFSR0VUX0xJTktfRU1VTF9TVUZGSVgKKyAjZGVmaW5lIFNVQlRBUkdFVF9MSU5LX0VNVUxfU1VGRklYICIle21mZHBpYzpfZmQ7Ol9saW51eH0iCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oIGIvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oCitpbmRleCBjZTA4NDY1NmZjYS4uYmVkNjMwMGNiMmEgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgKKysrKyBiL2djYy9jb25maWcvc3BhcmMvbGludXguaAorQEAgLTgzLDcgKzgzLDcgQEAgZXh0ZXJuIGNvbnN0IGNoYXIgKmhvc3RfZGV0ZWN0X2xvY2FsX2NwdSAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKKyAgICBXaGVuIHRoZSAtc2hhcmVkIGxpbmsgb3B0aW9uIGlzIHVzZWQgYSBmaW5hbCBsaW5rIGlzIG5vdCBiZWluZworICAgIGRvbmUuICAqLworIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICN1bmRlZiAgTElOS19TUEVDCisgI2RlZmluZSBMSU5LX1NQRUMgIi1tIGVsZjMyX3NwYXJjICV7c2hhcmVkOi1zaGFyZWR9IFwKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaCBiL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCitpbmRleCA1NzNjZThhOWE0Yy4uNjc0OWY2YjVkOWMgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaAorKysrIGIvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgKK0BAIC04NCw4ICs4NCw4IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICAgV2hlbiB0aGUgLXNoYXJlZCBsaW5rIG9wdGlvbiBpcyB1c2VkIGEgZmluYWwgbGluayBpcyBub3QgYmVpbmcKKyAgICBkb25lLiAgKi8KKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtbGludXguc28uMiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWI2NC9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI2lmZGVmIFNQQVJDX0JJX0FSQ0gKKyAKKy0tIAorMi4xMi4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAyMS1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMjEtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNTYyMTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMjEtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gODBjMjQyNDdmZWQ1MmMxMjY5NzkxMDg4MDkwYmMwZmE4NTI4MDk4MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI2OjM3ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjEvNDddIGdjYzogRml4IGFyZ3VtZW50IGxpc3QgdG9vIGxvbmcgZXJyb3IuCisKK1RoZXJlIHdvdWxkIGJlIGFuICJBcmd1bWVudCBsaXN0IHRvbyBsb25nIiBlcnJvciB3aGVuIHRoZQorYnVpbGQgZGlyZWN0b3J5IGlzIGxvbmdlciB0aGFuIDIwMCwgdGhpcyBpcyBjYXVzZWQgYnk6CisKK2hlYWRlcnM9YGVjaG8gJChQTFVHSU5fSEVBREVSUykgfCB0ciAnICcgJ1wwMTInIHwgc29ydCAtdWAKKworVGhlIFBMVUdJTl9IRUFERVJTIGlzIHRvbyBsb25nIGJlZm9yZSBzb3J0LCBzbyB0aGUgImVjaG8iIGNhbid0IGhhbmRsZQoraXQsIHVzZSB0aGUgJChzb3J0IGxpc3QpIG9mIEdOVSBtYWtlIHdoaWNoIGNhbiBoYW5kbGUgdGhlIHRvbyBsb25nIGxpc3QKK3dvdWxkIGZpeCB0aGUgcHJvYmxlbSwgdGhlIGhlYWRlciB3b3VsZCBiZSBzaG9ydCBlbm91Z2ggYWZ0ZXIgc29ydGVkLgorVGhlICJ0ciAnICcgJ1wwMTInIiB3YXMgdXNlZCBmb3IgdHJhbnNsYXRpbmcgdGhlIHNwYWNlIHRvICJcbiIsIHRoZQorJChzb3J0IGxpc3QpIGRvZXNuJ3QgbmVlZCB0aGlzLgorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL01ha2VmaWxlLmluIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCitpbmRleCA3YjU5MGM5YmJkMy4uMjNjY2E3ZjBkNWEgMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTM0NTksNyArMzQ1OSw3IEBAIGluc3RhbGwtcGx1Z2luOiBpbnN0YWxsZGlycyBsYW5nLmluc3RhbGwtcGx1Z2luIHMtaGVhZGVyLXZhcnMgaW5zdGFsbC1nZW5ndHlwZQorICMgV2Uga2VlcCB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgZmlsZXMgaW4gY29uZmlnIG9yIGMtZmFtaWx5IGFuZCAuZGVmCisgIyBmaWxlcy4gQWxsIG90aGVyIGZpbGVzIGFyZSBmbGF0dGVuZWQgdG8gYSBzaW5nbGUgZGlyZWN0b3J5LgorIAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKHBsdWdpbl9pbmNsdWRlZGlyKQorLQloZWFkZXJzPWBlY2hvICQoUExVR0lOX0hFQURFUlMpICQkKGNkICQoc3JjZGlyKTsgZWNobyAqLmggKi5kZWYpIHwgdHIgJyAnICdcMDEyJyB8IHNvcnQgLXVgOyBcCisrCWhlYWRlcnM9IiQoc29ydCAkKFBMVUdJTl9IRUFERVJTKSAkJChjZCAkKHNyY2Rpcik7IGVjaG8gKi5oICouZGVmKSkiOyBcCisgCXNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2A7IFwKKyAJZm9yIGZpbGUgaW4gJCRoZWFkZXJzOyBkbyBcCisgCSAgaWYgWyAtZiAkJGZpbGUgXSA7IHRoZW4gXAorLS0gCisyLjEyLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDIyLURpc2FibGUtc2R0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDIyLURpc2FibGUtc2R0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MWYxOTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMjItRGlzYWJsZS1zZHQucGF0Y2gKQEAgLTAsMCArMSwxMTMgQEAKK0Zyb20gMzAyMWZlYzQ4NWY0NDQ3OGEzZDVmZmZiNGFkYWMxM2Q4MzFmY2RjMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI4OjEwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjIvNDddIERpc2FibGUgc2R0LgorCitXZSBkb24ndCBsaXN0IGR0cmFjZSBpbiBERVBFTkRTIHNvIHdlIHNob3VsZG4ndCBiZSBkZXBlbmRpbmcgb24gdGhpcyBoZWFkZXIuCitJdCBtYXkgb3IgbWF5IG5vdCBleGlzdCBmcm9tIHByZWl2b3VzIGJ1aWxkcyB0aG91Z2guIFRvIGJlIGRldGVybWluc3RpYywgZGlzYWJsZQorc2R0LmggdXNhZ2UgYWx3YXlzLiBUaGlzIGF2b2lkcyBidWlsZCBmYWlsdXJlcyBpZiB0aGUgaGVhZGVyIGlzIHJlbW92ZWQgYWZ0ZXIgY29uZmlndXJlCitidXQgYmVmb3JlIGxpYmdjYyBpcyBjb21waWxlZCBmb3IgZXhhbXBsZS4KKworUlAgMjAxMi84LzcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworRGlzYWJsZSBzZHQgZm9yIGxpYnN0ZGMrKy12My4KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbaGFja10KKy0tLQorIGdjYy9jb25maWd1cmUgICAgICAgICAgICAgfCAxMiArKysrKystLS0tLS0KKyBnY2MvY29uZmlndXJlLmFjICAgICAgICAgIHwgMTggKysrKysrKysrLS0tLS0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZSAgICB8ICA2ICsrKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWd1cmUuYWMgfCAgMiArLQorIDQgZmlsZXMgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggYjVhYzE1NTI1NDEuLjA4YjJmNjNjN2ZhIDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTI4OTY3LDEyICsyODk2NywxMiBAQCBmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5IiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkuLi4gIiA+JjY7IH0KKyBoYXZlX3N5c19zZHRfaD1ubworLWlmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgorLSAgaGF2ZV9zeXNfc2R0X2g9eWVzCistCistJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCistCistZmkKKysjaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCisrIyAgaGF2ZV9zeXNfc2R0X2g9eWVzCisrIworKyMkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKysjCisrI2ZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXZlX3N5c19zZHRfaCIgPiY1CisgJGFzX2VjaG8gIiRoYXZlX3N5c19zZHRfaCIgPiY2OyB9CisgCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IGNiMTQ3OWQxZWY0Li4wNTgxZmU5NjNkYyAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC01NzU0LDE1ICs1NzU0LDE1IEBAIGZpCisgQUNfU1VCU1QoW2VuYWJsZV9kZWZhdWx0X3NzcF0pCisgCisgIyBUZXN0IGZvciA8c3lzL3NkdC5oPiBvbiB0aGUgdGFyZ2V0LgorLUdDQ19UQVJHRVRfVEVNUExBVEUoW0hBVkVfU1lTX1NEVF9IXSkKKy1BQ19NU0dfQ0hFQ0tJTkcoc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5KQorLWhhdmVfc3lzX3NkdF9oPW5vCistaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCistICBoYXZlX3N5c19zZHRfaD15ZXMKKy0gIEFDX0RFRklORShIQVZFX1NZU19TRFRfSCwgMSwKKy0gICAgICAgICAgICBbRGVmaW5lIGlmIHlvdXIgdGFyZ2V0IEMgbGlicmFyeSBwcm92aWRlcyBzeXMvc2R0LmhdKQorLWZpCistQUNfTVNHX1JFU1VMVCgkaGF2ZV9zeXNfc2R0X2gpCisrI0dDQ19UQVJHRVRfVEVNUExBVEUoW0hBVkVfU1lTX1NEVF9IXSkKKysjQUNfTVNHX0NIRUNLSU5HKHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSkKKysjaGF2ZV9zeXNfc2R0X2g9bm8KKysjaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCisrIyAgaGF2ZV9zeXNfc2R0X2g9eWVzCisrIyAgQUNfREVGSU5FKEhBVkVfU1lTX1NEVF9ILCAxLAorKyMgICAgICAgICAgICBbRGVmaW5lIGlmIHlvdXIgdGFyZ2V0IEMgbGlicmFyeSBwcm92aWRlcyBzeXMvc2R0LmhdKQorKyNmaQorKyNBQ19NU0dfUkVTVUxUKCRoYXZlX3N5c19zZHRfaCkKKyAKKyAjIENoZWNrIGlmIFRGbW9kZSBsb25nIGRvdWJsZSBzaG91bGQgYmUgdXNlZCBieSBkZWZhdWx0IG9yIG5vdC4KKyAjIFNvbWUgZ2xpYmMgdGFyZ2V0cyB1c2VkIERGbW9kZSBsb25nIGRvdWJsZSwgYnV0IHdpdGggZ2xpYmMgMi40CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK2luZGV4IGZiN2UxMjZjMGIwLi5hMTgwNTdmZWI4OCAxMDA3NTUKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK0BAIC0yMTg1NiwxMSArMjE4NTYsMTEgQEAgYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworIGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisgYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorIAorLSAgaWYgdGVzdCAkZ2xpYmN4eF9jdl9zeXNfc2R0X2ggPSB5ZXM7IHRoZW4KKysjICBpZiB0ZXN0ICRnbGliY3h4X2N2X3N5c19zZHRfaCA9IHllczsgdGhlbgorIAorLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorKyMkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKyAKKy0gIGZpCisrIyAgZmkKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xpYmN4eF9jdl9zeXNfc2R0X2giID4mNQorICRhc19lY2hvICIkZ2xpYmN4eF9jdl9zeXNfc2R0X2giID4mNjsgfQorIAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMgYi9saWJzdGRjKystdjMvY29uZmlndXJlLmFjCitpbmRleCA4ZTk3MzUwM2JlMC4uYTQ2ZDI1ZTc0MGQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlLmFjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlLmFjCitAQCAtMjMwLDcgKzIzMCw3IEBAIEdMSUJDWFhfQ0hFQ0tfU0NfTlBST0NFU1NPUlNfT05MTgorIEdMSUJDWFhfQ0hFQ0tfU0NfTlBST0NfT05MTgorIEdMSUJDWFhfQ0hFQ0tfUFRIUkVBRFNfTlVNX1BST0NFU1NPUlNfTlAKKyBHTElCQ1hYX0NIRUNLX1NZU0NUTF9IV19OQ1BVCistR0xJQkNYWF9DSEVDS19TRFRfSAorKyNHTElCQ1hYX0NIRUNLX1NEVF9ICisgCisgIyBDaGVjayBmb3IgYXZhaWxhYmxlIGhlYWRlcnMuCisgQUNfQ0hFQ0tfSEVBREVSUyhbZW5kaWFuLmggZXhlY2luZm8uaCBmbG9hdC5oIGZwLmggaWVlZWZwLmggaW50dHlwZXMuaCBcCistLSAKKzIuMTIuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMjMtbGlidG9vbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAyMy1saWJ0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZGZiMWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMjMtbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIGU3OWE0ZjgxNjllODM2YzhkZWFiY2E1YTQ1ODg0Y2ZlMTFkMDc4NDcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyOToxMSArMDQwMAorU3ViamVjdDogW1BBVENIIDIzLzQ3XSBsaWJ0b29sCisKK2xpYnN0ZGMrKyBmcm9tIGdjYy1ydW50aW1lIGdldHMgY3JlYXRlZCB3aXRoIC1ycGF0aD0vdXNyL2xpYi8uLi9saWIgZm9yIHFlbXV4ODYtNjQKK3doZW4gcnVubmluZyBvbiBhbSB4ODZfNjQgYnVpbGQgaG9zdC4KKworVGhpcyBwYXRjaCBzdG9wcyB0aGlzIHNwZWFkaW5nIHRvIGxpYmRpciBpbiB0aGUgbGlic3RkYysrLmxhIGZpbGUgd2l0aGluIGxpYnRvb2wuCitBcmd1YWJseSwgaXQgc2hvdWxkbid0IGJlIHBhc3NpbmcgdGhpcyBpbnRvIGxpYnRvb2wgaW4gdGhlIGZpcnN0IHBsYWNlIGJ1dAorZm9yIG5vdyB0aGlzIHJlc29sdmVzIHRoZSBuYXN0aWVzdCBwcm9ibGVtcyB0aGlzIGNhdXNlcy4KKworZnVuY19ub3JtYWxfYWJzcGF0aCB3b3VsZCByZXNvbHZlIGFuIGVtcHR5IHBhdGggdG8gYHB3ZGAgc28gd2UgbmVlZAordG8gZmlsdGVyIHRoZSB6ZXJvIGNhc2UuCisKK1JQIDIwMTIvOC8yNAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGx0bWFpbi5zaCB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2x0bWFpbi5zaCBiL2x0bWFpbi5zaAoraW5kZXggOTUwM2VjODVkNzAuLjAxMjFmYmE3MDdmIDEwMDY0NAorLS0tIGEvbHRtYWluLnNoCisrKysgYi9sdG1haW4uc2gKK0BAIC02MzU5LDYgKzYzNTksMTAgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJZnVuY193YXJuaW5nICJpZ25vcmluZyBtdWx0aXBsZSBcYC1ycGF0aCdzIGZvciBhIGxpYnRvb2wgbGlicmFyeSIKKyAKKyAgICAgICBpbnN0YWxsX2xpYmRpcj0iJDEiCisrICAgICAgaWYgdGVzdCAtbiAiJGluc3RhbGxfbGliZGlyIjsgdGhlbgorKwlmdW5jX25vcm1hbF9hYnNwYXRoICIkaW5zdGFsbF9saWJkaXIiCisrCWluc3RhbGxfbGliZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorKyAgICAgIGZpCisgCisgICAgICAgb2xkbGlicz0KKyAgICAgICBpZiB0ZXN0IC16ICIkcnBhdGgiOyB0aGVuCistLSAKKzIuMTIuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMjQtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAyNC1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMWUxYmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMjQtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaApAQCAtMCwwICsxLDQzIEBACitGcm9tIDc0ZDhkYzQ4Y2IxODVlMzA0YzYwMDY3YjRkOGI1MDQ0N2VjMzI4ZWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTozMDozMiArMDQwMAorU3ViamVjdDogW1BBVENIIDI0LzQ3XSBnY2M6IGFybXY0OiBwYXNzIGZpeC12NGJ4IHRvIGxpbmtlciB0byBzdXBwb3J0IEVBQkkuCisKK1RoZSBMSU5LX1NQRUMgZm9yIGxpbnV4IGdldHMgb3ZlcndyaXR0ZW4gYnkgbGludXgtZWFiaS5oIHdoaWNoCittZWFucyB0aGUgdmFsdWUgb2YgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgZ2V0cyBsb3N0IGFuZCBhcyBhIHJlc3VsdAordGhlIG9wdGlvbiBpcyBub3QgcGFzc2VkIHRvIGxpbmtlciB3aGVuIGNob3NpbmcgbWFyY2g9YXJtdjQKK1RoaXMgcGF0Y2ggcmVkZWZpbmVzIHRoaXMgaW4gbGludXgtZWFiaS5oIGFuZCByZWluc2VydHMgaXQKK2ZvciBlYWJpIGRlZmF1bHRpbmcgdG9vbGNoYWlucy4KKworV2UgbWlnaHQgd2FudCB0byBzZW5kIGl0IHVwc3RyZWFtLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCB8IDYgKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCitpbmRleCBmYmFjOWE5ZDk5NC4uNWE1MWE4YTcwOTUgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKKysrKyBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorQEAgLTg4LDEwICs4OCwxNCBAQAorICNkZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUiBcCisgICAiL2xpYi9sZC1tdXNsLWFybSIgTVVTTF9EWU5BTUlDX0xJTktFUl9FICIle21mbG9hdC1hYmk9aGFyZDpoZn0uc28uMSIKKyAKKysvKiBGb3IgYXJtdjQgd2UgcGFzcyAtLWZpeC12NGJ4IHRvIGxpbmtlciB0byBzdXBwb3J0IEVBQkkgKi8KKysjdW5kZWYgVEFSR0VUX0ZJWF9WNEJYX1NQRUMKKysjZGVmaW5lIFRBUkdFVF9GSVhfVjRCWF9TUEVDICIle21jcHU9YXJtOHxtY3B1PWFybTgxMHxtY3B1PXN0cm9uZ2FybSp8bWFyY2g9YXJtdjQ6IC0tZml4LXY0Ynh9IgorKworIC8qIEF0IHRoaXMgcG9pbnQsIGJwYWJpLmggd2lsbCBoYXZlIGNsb2JiZXJlZCBMSU5LX1NQRUMuICBXZSB3YW50IHRvCisgICAgdXNlIHRoZSBHTlUvTGludXggdmVyc2lvbiwgbm90IHRoZSBnZW5lcmljIEJQQUJJIHZlcnNpb24uICAqLworICN1bmRlZiAgTElOS19TUEVDCistI2RlZmluZSBMSU5LX1NQRUMgRUFCSV9MSU5LX1NQRUMJCQkJCVwKKysjZGVmaW5lIExJTktfU1BFQyBUQVJHRVRfRklYX1Y0QlhfU1BFQyBFQUJJX0xJTktfU1BFQwkJCVwKKyAgIExJTlVYX09SX0FORFJPSURfTEQgKExJTlVYX1RBUkdFVF9MSU5LX1NQRUMsCQkJCVwKKyAJCSAgICAgICBMSU5VWF9UQVJHRVRfTElOS19TUEVDICIgIiBBTkRST0lEX0xJTktfU1BFQykKKyAKKy0tIAorMi4xMi4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAyNS1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDI1LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIzNDEzMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAyNS1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoCkBAIC0wLDAgKzEsMTAyIEBACitGcm9tIGFjNTBkYzMwMTBhNjYyMjBhZDQ4M2MwOWVmZTI3MGJiM2Y0Yzk0MjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTozMzowNCArMDQwMAorU3ViamVjdDogW1BBVENIIDI1LzQ3XSBVc2UgdGhlIG11bHRpbGliIGNvbmZpZyBmaWxlcyBmcm9tICR7Qn0gaW5zdGVhZCBvZgorIHVzaW5nIHRoZSBvbmVzIGZyb20gJHtTfQorCitVc2UgdGhlIG11bHRpbGliIGNvbmZpZyBmaWxlcyBmcm9tICR7Qn0gaW5zdGVhZCBvZiB1c2luZyB0aGUgb25lcyBmcm9tICR7U30KK3NvIHRoYXQgdGhlIHNvdXJjZSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gZ2NjLWNyb3NzLWluaXRpYWwsCitnY2MtY3Jvc3MtaW50ZXJtZWRpYXRlLCBnY2MtY3Jvc3MsIGdjYy1ydW50aW1lLCBhbmQgYWxzbyB0aGUgc2RrIGJ1aWxkLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBnY2MvY29uZmlndXJlICAgIHwgMjIgKysrKysrKysrKysrKysrKysrLS0tLQorIGdjYy9jb25maWd1cmUuYWMgfCAyMiArKysrKysrKysrKysrKysrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAzNiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDA4YjJmNjNjN2ZhLi42YmEzOTFlZDA2OCAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0xMjEzMCwxMCArMTIxMzAsMjAgQEAgZG9uZQorIHRtYWtlX2ZpbGVfPQorIGZvciBmIGluICR7dG1ha2VfZmlsZX0KKyBkbworLQlpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKy0JdGhlbgorLQkJdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorLQlmaQorKyAgY2FzZSAkZiBpbgorKyAgICAqL3QtbGludXg2NCApCisrICAgICAgIGlmIHRlc3QgLWYgLi9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSAuL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgKiApCisrICAgICAgIGlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgZXNhYworIGRvbmUKKyB0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGVffSIKKyAKK0BAIC0xMjE0NCw2ICsxMjE1NCwxMCBAQCB0bV9maWxlX2xpc3Q9Im9wdGlvbnMuaCIKKyB0bV9pbmNsdWRlX2xpc3Q9Im9wdGlvbnMuaCBpbnNuLWNvbnN0YW50cy5oIgorIGZvciBmIGluICR0bV9maWxlOyBkbworICAgY2FzZSAkZiBpbgorKyAgICAqL2xpbnV4NjQuaCApCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgOzsKKyAgICAgLi8qICkKKyAgICAgICAgZj1gZWNobyAkZiB8IHNlZCAncy9eLi4vLydgCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9ICRmIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCAwNTgxZmU5NjNkYy4uODU1MWE0MTJkZjMgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtMTkwMiwxMCArMTkwMiwyMCBAQCBkb25lCisgdG1ha2VfZmlsZV89CisgZm9yIGYgaW4gJHt0bWFrZV9maWxlfQorIGRvCistCWlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorLQl0aGVuCistCQl0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCistCWZpCisrICBjYXNlICRmIGluCisrICAgICovdC1saW51eDY0ICkKKysgICAgICAgaWYgdGVzdCAtZiAuL2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IC4vY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAqICkKKysgICAgICAgaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICBlc2FjCisgZG9uZQorIHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZV99IgorIAorQEAgLTE5MTYsNiArMTkyNiwxMCBAQCB0bV9maWxlX2xpc3Q9Im9wdGlvbnMuaCIKKyB0bV9pbmNsdWRlX2xpc3Q9Im9wdGlvbnMuaCBpbnNuLWNvbnN0YW50cy5oIgorIGZvciBmIGluICR0bV9maWxlOyBkbworICAgY2FzZSAkZiBpbgorKyAgICAqL2xpbnV4NjQuaCApCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgOzsKKyAgICAgLi8qICkKKyAgICAgICAgZj1gZWNobyAkZiB8IHNlZCAncy9eLi4vLydgCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9ICRmIgorLS0gCisyLjEyLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDI2LUF2b2lkLXVzaW5nLWxpYmRpci1mcm9tLS5sYS13aGljaC11c3VhbGx5LXBvaW50cy10by0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMjYtQXZvaWQtdXNpbmctbGliZGlyLWZyb20tLmxhLXdoaWNoLXVzdWFsbHktcG9pbnRzLXRvLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTI0NzEzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDI2LUF2b2lkLXVzaW5nLWxpYmRpci1mcm9tLS5sYS13aGljaC11c3VhbGx5LXBvaW50cy10by0ucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSA5ZmFiNDdkODY2Mjk4NmFkODg3ZDllZGRjMzlmY2JlMjVlNTc2MzgzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMDk6Mzk6MzggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyNi80N10gQXZvaWQgdXNpbmcgbGliZGlyIGZyb20gLmxhIHdoaWNoIHVzdWFsbHkgcG9pbnRzIHRvIGEKKyBob3N0IHBhdGgKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGx0bWFpbi5zaCB8IDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCitpbmRleCAwMTIxZmJhNzA3Zi4uNTJiZGJkYjVmOWMgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTU2MjgsNiArNTYyOCw5IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisgCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisgCSAgZWxzZQorKwkgICAgIyBJbnN0ZWFkIG9mIHVzaW5nIGxpYmRpciBmcm9tIC5sYSB3aGljaCB1c3VhbGx5IHBvaW50cyB0byBhIGhvc3QgcGF0aCwKKysJICAgICMgdXNlIHRoZSBwYXRoIHRoZSAubGEgaXMgY29udGFpbmVkIGluLgorKwkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgorIAkgICAgZGlyPSIkbGliZGlyIgorIAkgICAgYWJzZGlyPSIkbGliZGlyIgorIAkgIGZpCistLSAKKzIuMTIuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMjctZXhwb3J0LUNQUC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAyNy1leHBvcnQtQ1BQLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOWUxZjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMjctZXhwb3J0LUNQUC5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tIGZhNmE0NmZkZjczZGU3ZWFjZDI4OWMwODRiYmRlNjY0M2IyM2Y3M2IgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwOTo0MDo1OSArMDAwMAorU3ViamVjdDogW1BBVENIIDI3LzQ3XSBleHBvcnQgQ1BQCisKK1RoZSBPRSBlbnZpcm9ubWVudCBzZXRzIGFuZCBleHBvcnRzIENQUCBhcyBiZWluZyB0aGUgdGFyZ2V0IGdjYy4gV2hlbgorYnVpbGRpbmcgZ2NjLWNyb3NzLWNhbmFkaWFuIGZvciBhIG1pbmd3IHRhcmdldHRlZCBzZGssIHRoZSBmb2xsb3dpbmcgY2FuIGJlIGZvdW5kCitpbiBidWlsZC54ODZfNjQtcG9reXNkay1taW5ndzMyLmk1ODYtcG9reS1saW51eC9idWlsZC14ODZfNjQtbGludXgvbGliaWJlcnR5L2NvbmZpZy5sb2c6CisKK2NvbmZpZ3VyZTozNjQxOiBjaGVja2luZyBmb3IgX0ZJTEVfT0ZGU0VUX0JJVFMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcworY29uZmlndXJlOjM2NjY6IGdjYyAgLWMgLWlzeXN0ZW0vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtTzIgLXBpcGUgIGNvbmZ0ZXN0LmMgPiY1Citjb25maWd1cmU6MzY2NjogJD8gPSAwCitjb25maWd1cmU6MzY5ODogcmVzdWx0OiBubworY29uZmlndXJlOjM3ODY6IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yCitjb25maWd1cmU6Mzg1NjogcmVzdWx0OiB4ODZfNjQtcG9reXNkay1taW5ndzMyLWdjYyAtRSAtLXN5c3Jvb3Q9L21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbmF0aXZlc2RrLW1pbmd3MzItcG9reXNkay1taW5ndzMyCitjb25maWd1cmU6Mzg3NjogeDg2XzY0LXBva3lzZGstbWluZ3czMi1nY2MgLUUgLS1zeXNyb290PS9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LW5hdGl2ZXNkay1taW5ndzMyLXBva3lzZGstbWluZ3czMiBjb25mdGVzdC5jCitjb25maWd1cmU6Mzg3NjogJD8gPSAwCisKK05vdGUgdGhpcyBpcyBhICpidWlsZCogdGFyZ2V0IChpbiBidWlsZC14ODZfNjQtbGludXgpIHNvIGl0IHNob3VsZCBiZQordXNpbmcgdGhlIGhvc3QgImdjYyIsIG5vdCB4ODZfNjQtcG9reXNkay1taW5ndzMyLWdjYy4gU2luY2UgdGhlIG1pbmd3MzIKK2hlYWRlcnMgYXJlIHZlcnkgZGlmZmVyZW50LCB1c2luZyB0aGUgd3JvbmcgY3BwIGlzIGEgcmVhbCBwcm9ibGVtLiBJdCBpcyBsZWFraW5nCitpbnRvIGNvbmZpZ3VyZSB0aHJvdWdoIHRoZSBDUFAgdmFyaWFibGUuIFVsdGltYXRlbHkgdGhpcyBsZWFkcyB0byBidWlsZAorZmFpbHVyZXMgcmVsYXRlZCB0byBub3QgYmVpbmcgYWJsZSB0byBpbmNsdWRlIGEgcHJvY2Vzcy5oIGZpbGUgZm9yIHBlbS11bml4LmMuCisKK1RoZSBmaXggaXMgdG8gZW5zdXJlIHdlIGV4cG9ydCBhIHNhbmUgQ1BQIHZhbHVlIGludG8gdGhlIGJ1aWxkCitlbnZpcm9ubWVudCB3aGVuIHVzaW5nIGJ1aWxkIHRhcmdldHMuIFdlIGNvdWxkIGRlZmluZSBhIENQUF9GT1JfQlVJTEQgdmFsdWUgd2hpY2ggbWF5IGJlCit0aGUgdmVyc2lvbiB3aGljaCBuZWVkcyB0byBiZSB1cHN0cmVhbWVkIGJ1dCBmb3Igbm93LCB0aGlzIGZpeCBpcyBnb29kIGVub3VnaCB0bworYXZvaWQgdGhlIHByb2JsZW0uCisKK1JQIDIyLzA4LzIwMTMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggYjgyNGUwYTBjYTEuLmUzNGU5NTU1Mzg4IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMTQ5LDYgKzE0OSw3IEBAIEJVSUxEX0VYUE9SVFMgPSBcCisgCUFSPSIkKEFSX0ZPUl9CVUlMRCkiOyBleHBvcnQgQVI7IFwKKyAJQVM9IiQoQVNfRk9SX0JVSUxEKSI7IGV4cG9ydCBBUzsgXAorIAlDQz0iJChDQ19GT1JfQlVJTEQpIjsgZXhwb3J0IENDOyBcCisrCUNQUD0iJChDQ19GT1JfQlVJTEQpIC1FIjsgZXhwb3J0IENQUDsgXAorIAlDRkxBR1M9IiQoQ0ZMQUdTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0ZMQUdTOyBcCisgCUNPTkZJR19TSEVMTD0iJChTSEVMTCkiOyBleHBvcnQgQ09ORklHX1NIRUxMOyBcCisgCUNYWD0iJChDWFhfRk9SX0JVSUxEKSI7IGV4cG9ydCBDWFg7IFwKKy0tIAorMi4xMi4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAyOC1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDI4LUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkwMzM0OQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAyOC1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK0Zyb20gMmMwNWI0MDcyZjk4MmRmODAwMmQ2MTMyNzgzN2UxOGE3MjRlOTM0ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRydS1DZXphciBTYXJkYW4gPGFsZXhhbmRydS5zYXJkYW5AZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFdlZCwgNSBGZWIgMjAxNCAxNjo1MjozMSArMDIwMAorU3ViamVjdDogW1BBVENIIDI4LzQ3XSBFbmFibGUgU1BFICYgQWx0aVZlYyBnZW5lcmF0aW9uIG9uIHBvd2VwYypsaW51eCB0YXJnZXQKKworV2hlbiBpcyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eCwgdGhlIHJlc3VsdGluZyBHQ0Mgd2lsbAorbm90IGJlIGFibGUgdG8gZ2VuZXJhdGUgY29kZSBmb3IgU1BFIHRhcmdldHMgKGU1MDB2MS92MikuCitHQ0MgY29uZmlndXJlZCB3aXRoIC0tdGFyZ2V0PXBvd2VycGMtbGludXhzcGUgd2lsbCBub3QgYmUgYWJsZSB0bworZ2VuZXJhdGUgQWx0aVZlYyBpbnN0cnVjdGlvbnMgKGZvciBlNjUwMCkuCitUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25maWd1cmVkIGZpbGUgc3VjaCB0aGF0IFNQRSBvciBBbHRpVmVjIGNvZGUKK2NhbiBiZSBnZW5lcmF0ZWQgd2hlbiBnY2MgaXMgY29uZmlndXJlZCB3aXRoIC0tdGFyZ2V0PXBvd2VycGMtbGludXguCitUaGUgQUJJIGFuZCBzcGVjaWZmaWMgaW5zdHJ1Y3Rpb25zIGNhbiBiZSBzZWxlY3RlZCB0aHJvdWdoIHRoZQorIi1tYWJpPXNwZSBvciAtbWFiaT1hbHRpdmVjIiBhbmQgdGhlICItbXNwZSBvciAtbWFsdGl2ZWMiIHBhcmFtZXRlcnMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogQWxleGFuZHJ1LUNlemFyIFNhcmRhbiA8YWxleGFuZHJ1LnNhcmRhbkBmcmVlc2NhbGUuY29tPgorLS0tCisgZ2NjL2NvbmZpZy5nY2MgICAgICAgICAgICAgICB8IDkgKysrKysrKystCisgZ2NjL2NvbmZpZy9yczYwMDAvbGludXhzcGUuaCB8IDMgLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnLmdjYyBiL2djYy9jb25maWcuZ2NjCitpbmRleCA1ZTQ1ZjRiNTE5OS4uOWIzODFkZmQ5YWYgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnLmdjYworKysrIGIvZ2NjL2NvbmZpZy5nY2MKK0BAIC0yNDE1LDcgKzI0MTUsMTQgQEAgcG93ZXJwYy0qLXJ0ZW1zKikKKyAJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSByczYwMDAvdC1mcHJ1bGVzIHJzNjAwMC90LXJ0ZW1zIHJzNjAwMC90LXBwY2NvbW0iCisgCTs7CisgcG93ZXJwYyotKi1saW51eCopCistCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBnbnUtdXNlci5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIgorKwljYXNlICR7dGFyZ2V0fSBpbgorKwkgICAgcG93ZXJwYyotKi1saW51eCpzcGUqIHwgcG93ZXJwYyotKi1saW51eCphbHRpdmVjKikKKysJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBnbnUtdXNlci5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIgorKwkJOzsKKysJICAgICopCisrCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieGVsZi5oIGVsZm9zLmggZ251LXVzZXIuaCBmcmVlYnNkLXNwZWMuaCByczYwMDAvc3lzdjQuaCByczYwMDAvbGludXhhbHRpdmVjLmggcnM2MDAwL2xpbnV4c3BlLmggcnM2MDAwL2U1MDAuaCIKKysJCTs7CisrCWVzYWMKKyAJZXh0cmFfb3B0aW9ucz0iJHtleHRyYV9vcHRpb25zfSByczYwMDAvc3lzdjQub3B0IgorIAl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IHJzNjAwMC90LWZwcnVsZXMgcnM2MDAwL3QtcHBjY29tbSIKKyAJZXh0cmFfb2Jqcz0iJGV4dHJhX29ianMgcnM2MDAwLWxpbnV4Lm8iCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yczYwMDAvbGludXhzcGUuaCBiL2djYy9jb25maWcvcnM2MDAwL2xpbnV4c3BlLmgKK2luZGV4IDkyZWZhYmZlNjY0Li42ZDQ4NjQ1MWE3ZSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvcnM2MDAwL2xpbnV4c3BlLmgKKysrKyBiL2djYy9jb25maWcvcnM2MDAwL2xpbnV4c3BlLmgKK0BAIC0yNyw2ICsyNywzIEBACisgI3VuZGVmCVRBUkdFVF9ERUZBVUxUCisgI2RlZmluZSBUQVJHRVRfREVGQVVMVCBNQVNLX1NUUklDVF9BTElHTgorICNlbmRpZgorLQorLSN1bmRlZiAgQVNNX0RFRkFVTFRfU1BFQworLSNkZWZpbmUJQVNNX0RFRkFVTFRfU1BFQyAiLW1wcGMgLW1zcGUgLW1lNTAwIgorLS0gCisyLjEyLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDI5LURpc2FibGUtdGhlLU1VTFRJTElCX09TRElSTkFNRVMtYW5kLW90aGVyLW11bHRpbGliLW8ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMjktRGlzYWJsZS10aGUtTVVMVElMSUJfT1NESVJOQU1FUy1hbmQtb3RoZXItbXVsdGlsaWItby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzA2YTI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDI5LURpc2FibGUtdGhlLU1VTFRJTElCX09TRElSTkFNRVMtYW5kLW90aGVyLW11bHRpbGliLW8ucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSBlYzBmODQzYjg2YzBmNzZiYzVlYmIyMGZhZmJjNGFhZTFiZTRkYjYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMTA6MjE6NTUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyOS80N10gRGlzYWJsZSB0aGUgTVVMVElMSUJfT1NESVJOQU1FUyBhbmQgb3RoZXIgbXVsdGlsaWIKKyBvcHRpb25zLgorCitIYXJkIGNvZGluZyB0aGUgTVVMVElMSUJfT1NESVJOQU1FUyB3aXRoIC4uL2xpYjY0IGlzIGNhdXNpbmcgcHJvYmxlbXMgb24KK3N5c3RlbXMgd2hlcmUgdGhlIGxpYmRpciBpcyBOT1Qgc2V0IHRvIC9saWI2NC4gIFRoaXMgaXMgYWxsb3dlZCBieSB0aGUKK0FCSSwgYXMKK2xvbmcgYXMgdGhlIGR5bmFtaWMgbG9hZGVyIGlzIHByZXNlbnQgaW4gL2xpYi4KKworV2Ugc2ltcGx5IHdhbnQgdG8gdXNlIHRoZSBkZWZhdWx0IHJ1bGVzIGluIGdjYyB0byBmaW5kIGFuZCBjb25maWd1cmUgdGhlCitub3JtYWwgbGliZGlyLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGVbT0UtU3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnY2MvY29uZmlnL2FhcmNoNjQvdC1hYXJjaDY0LWxpbnV4IHwgOCArKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FhcmNoNjQvdC1hYXJjaDY0LWxpbnV4IGIvZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eAoraW5kZXggYWIwNjRhYjZmMjIuLmY0YjFmOThiMjE2IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eAorKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eAorQEAgLTIxLDggKzIxLDggQEAKKyBMSUIxQVNNU1JDICAgPSBhYXJjaDY0L2xpYjFmdW5jcy5hc20KKyBMSUIxQVNNRlVOQ1MgPSBfYWFyY2g2NF9zeW5jX2NhY2hlX3JhbmdlCisgCistQUFSQ0hfQkUgPSAkKGlmICQoZmluZHN0cmluZyBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUPTEsICQodG1fZGVmaW5lcykpLF9iZSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTID0gbWFiaS5scDY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6YWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKKy1NVUxUSUFSQ0hfRElSTkFNRSA9ICQoY2FsbCBpZl9tdWx0aWFyY2gsYWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKKysjQUFSQ0hfQkUgPSAkKGlmICQoZmluZHN0cmluZyBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUPTEsICQodG1fZGVmaW5lcykpLF9iZSkKKysjTVVMVElMSUJfT1NESVJOQU1FUyA9IG1hYmkubHA2ND0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOmFhcmNoNjQkKEFBUkNIX0JFKS1saW51eC1nbnUpCisrI01VTFRJQVJDSF9ESVJOQU1FID0gJChjYWxsIGlmX211bHRpYXJjaCxhYXJjaDY0JChBQVJDSF9CRSktbGludXgtZ251KQorIAorLU1VTFRJTElCX09TRElSTkFNRVMgKz0gbWFiaS5pbHAzMj0uLi9saWJpbHAzMgorKyNNVUxUSUxJQl9PU0RJUk5BTUVTICs9IG1hYmkuaWxwMzI9Li4vbGliaWxwMzIKKy0tIAorMi4xMi4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAzMC1FbnN1cmUtdGFyZ2V0LWdjYy1oZWFkZXJzLWNhbi1iZS1pbmNsdWRlZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAzMC1FbnN1cmUtdGFyZ2V0LWdjYy1oZWFkZXJzLWNhbi1iZS1pbmNsdWRlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjhiYTk1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDMwLUVuc3VyZS10YXJnZXQtZ2NjLWhlYWRlcnMtY2FuLWJlLWluY2x1ZGVkLnBhdGNoCkBAIC0wLDAgKzEsOTggQEAKK0Zyb20gYmY1ODM2OTg5ZTBmZmMxYzFkZjEzNjlkZjA2ODc3ZTk2YzA4ZGY0MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDEwOjI1OjExICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMzAvNDddIEVuc3VyZSB0YXJnZXQgZ2NjIGhlYWRlcnMgY2FuIGJlIGluY2x1ZGVkCisKK1RoZXJlIGFyZSBhIGZldyBoZWFkZXJzIGluc3RhbGxlZCBhcyBwYXJ0IG9mIHRoZSBPcGVuRW1iZWRkZWQKK2djYy1ydW50aW1lIHRhcmdldCAob21wLmgsIHNzcC8qLmgpLiBCZWluZyBpbnN0YWxsZWQgZnJvbSBhIHJlY2lwZQorYnVpbHQgZm9yIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCB0aGVzZSBhcmUgd2l0aGluIHRoZSB0YXJnZXQKK3N5c3Jvb3QgYW5kIG5vdCBjcm9zcy9uYXRpdmVzZGs7IHRodXMgdGhleSB3ZXJlbid0IGFibGUgdG8gYmUKK2ZvdW5kIGJ5IGdjYyB3aXRoIHRoZSBleGlzdGluZyBzZWFyY2ggcGF0aHMuIEFkZCBzdXBwb3J0IGZvcgorcGlja2luZyB1cCB0aGVzZSBoZWFkZXJzIHVuZGVyIHRoZSBzeXNyb290IHN1cHBsaWVkIG9uIHRoZSBnY2MKK2NvbW1hbmQgbGluZSBpbiBvcmRlciB0byByZXNvbHZlIHRoaXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnY2MvTWFrZWZpbGUuaW4gIHwgMiArKworIGdjYy9jcHBkZWZhdWx0LmMgfCA0ICsrKysKKyBnY2MvZGVmYXVsdHMuaCAgIHwgOSArKysrKysrKysKKyBnY2MvZ2NjLmMgICAgICAgIHwgNyAtLS0tLS0tCisgNCBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCitpbmRleCAyM2NjYTdmMGQ1YS4uOTVkMjFlZmZhZDMgMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTYwOCw2ICs2MDgsNyBAQCBsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACisgCisgIyBEaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGNvbXBpbGVyIGZpbmRzIGxpYnJhcmllcyBldGMuCisgbGlic3ViZGlyID0gJChsaWJkaXIpL2djYy8kKHJlYWxfdGFyZ2V0X25vbmNhbm9uaWNhbCkvJCh2ZXJzaW9uKSQoYWNjZWxfZGlyX3N1ZmZpeCkKKytsaWJzdWJkaXJfdGFyZ2V0ID0gZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJCh2ZXJzaW9uKQorICMgRGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21waWxlciBmaW5kcyBleGVjdXRhYmxlcworIGxpYmV4ZWNzdWJkaXIgPSAkKGxpYmV4ZWNkaXIpL2djYy8kKHJlYWxfdGFyZ2V0X25vbmNhbm9uaWNhbCkvJCh2ZXJzaW9uKSQoYWNjZWxfZGlyX3N1ZmZpeCkKKyAjIERpcmVjdG9yeSBpbiB3aGljaCBhbGwgcGx1Z2luIHJlc291cmNlcyBhcmUgaW5zdGFsbGVkCitAQCAtMjc5MSw2ICsyNzkyLDcgQEAgQ0ZMQUdTLWludGwubyArPSAtRExPQ0FMRURJUj1cIiQobG9jYWxlZGlyKVwiCisgCisgUFJFUFJPQ0VTU09SX0RFRklORVMgPSBcCisgICAtREdDQ19JTkNMVURFX0RJUj1cIiQobGlic3ViZGlyKS9pbmNsdWRlXCIgXAorKyAgLURHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUPVwiJChsaWJzdWJkaXJfdGFyZ2V0KS9pbmNsdWRlXCIgXAorICAgLURGSVhFRF9JTkNMVURFX0RJUj1cIiQobGlic3ViZGlyKS9pbmNsdWRlLWZpeGVkXCIgXAorICAgLURHUExVU1BMVVNfSU5DTFVERV9ESVI9XCIkKGdjY19neHhfaW5jbHVkZV9kaXIpXCIgXAorICAgLURHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1Q9JChnY2NfZ3h4X2luY2x1ZGVfZGlyX2FkZF9zeXNyb290KSBcCitkaWZmIC0tZ2l0IGEvZ2NjL2NwcGRlZmF1bHQuYyBiL2djYy9jcHBkZWZhdWx0LmMKK2luZGV4IDEwYjk2ZWNhMGE3Li5jOGRhMDg4NDg3MiAxMDA2NDQKKy0tLSBhL2djYy9jcHBkZWZhdWx0LmMKKysrKyBiL2djYy9jcHBkZWZhdWx0LmMKK0BAIC01OSw2ICs1OSwxMCBAQCBjb25zdCBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlIGNwcF9pbmNsdWRlX2RlZmF1bHRzW10KKyAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMuICAqLworICAgICB7IEdDQ19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKyAjZW5kaWYKKysjaWZkZWYgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVAorKyAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycyB1bmRlciB0aGUgc3BlY2lmaWVkIHN5c3Jvb3QuICAqLworKyAgICB7IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VULCAiR0NDIiwgMCwgMCwgMSwgMCB9LAorKyNlbmRpZgorICNpZmRlZiBMT0NBTF9JTkNMVURFX0RJUgorICAgICAvKiAvdXNyL2xvY2FsL2luY2x1ZGUgY29tZXMgYmVmb3JlIHRoZSBmaXhpbmNsdWRlZCBoZWFkZXIgZmlsZXMuICAqLworICAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAyIH0sCitkaWZmIC0tZ2l0IGEvZ2NjL2RlZmF1bHRzLmggYi9nY2MvZGVmYXVsdHMuaAoraW5kZXggN2FkOTJkOTIwZjguLjM5ODQ4Y2M5YzBlIDEwMDY0NAorLS0tIGEvZ2NjL2RlZmF1bHRzLmgKKysrKyBiL2djYy9kZWZhdWx0cy5oCitAQCAtMTQ3NSw0ICsxNDc1LDEzIEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorICNkZWZpbmUgRFdBUkZfR05BVF9FTkNPRElOR1NfREVGQVVMVCBEV0FSRl9HTkFUX0VOQ09ESU5HU19HREIKKyAjZW5kaWYKKyAKKysvKiBEZWZhdWx0IHByZWZpeGVzIHRvIGF0dGFjaCB0byBjb21tYW5kIG5hbWVzLiAgKi8KKysKKysjaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMQorKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xICIvbGliLyIKKysjZW5kaWYKKysjaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMgorKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yICIvdXNyL2xpYi8iCisrI2VuZGlmCisrCisgI2VuZGlmICAvKiAhIEdDQ19ERUZBVUxUU19IICovCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCBjNzNkNDAyMzk4Ny4uYjI3MjQ1ZGJmNzcgMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTE0NzIsMTMgKzE0NzIsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqZ2NjX2xpYmV4ZWNfcHJlZml4OworIAorIC8qIERlZmF1bHQgcHJlZml4ZXMgdG8gYXR0YWNoIHRvIGNvbW1hbmQgbmFtZXMuICAqLworIAorLSNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xCistI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEgIi9saWIvIgorLSNlbmRpZgorLSNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yCistI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgIi91c3IvbGliLyIKKy0jZW5kaWYKKy0KKyAjaWZkZWYgQ1JPU1NfRElSRUNUT1JZX1NUUlVDVFVSRSAgLyogRG9uJ3QgdXNlIHRoZXNlIHByZWZpeGVzIGZvciBhIGNyb3NzIGNvbXBpbGVyLiAgKi8KKyAjdW5kZWYgTURfRVhFQ19QUkVGSVgKKyAjdW5kZWYgTURfU1RBUlRGSUxFX1BSRUZJWAorLS0gCisyLjEyLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDMxLWdjYy00Ljgtd29uLXQtYnVpbGQtd2l0aC1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMzEtZ2NjLTQuOC13b24tdC1idWlsZC13aXRoLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTg0MDEwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDMxLWdjYy00Ljgtd29uLXQtYnVpbGQtd2l0aC1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSBjN2I0ZDk1N2VkZGE5NTVmYmU0MDVmZDUyOTU4NDY2MTQ1MjlmNTE3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMTE6MTc6MTkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzMS80N10gZ2NjIDQuOCsgd29uJ3QgYnVpbGQgd2l0aCAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZworCitzaW5jZSB0aGUgKi5QcG8gZmlsZXMgZG9uJ3QgZ2V0IGNyZWF0ZWQgdW5sZXNzIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgaXMgdHJ1ZS4KKworVGhpcyBwYXRjaCBlbnN1cmVzIHdlIG9ubHkgdXNlIHRob3NlIGNvbXBpbGVyIG9wdGlvbnMgd2hlbiBpdHMgZW5hYmxlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworKFByb2JsZW0gd2FzIGFscmVhZHkgcmVwb3J0ZWQgdXBzdHJlYW0sIGF0dGFjaGVkIHRoaXMgcGF0Y2ggdGhlcmUKK2h0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTU5MzApCisKK1JQCisyMDEyLzA5LzIyCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWJhdG9taWMvTWFrZWZpbGUuYW0gfCAzICsrLQorIGxpYmF0b21pYy9NYWtlZmlsZS5pbiB8IDMgKystCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJhdG9taWMvTWFrZWZpbGUuYW0gYi9saWJhdG9taWMvTWFrZWZpbGUuYW0KK2luZGV4IGQ3MzE0MDZmZGJkLi4yZmFmYzcyZDJlNyAxMDA2NDQKKy0tLSBhL2xpYmF0b21pYy9NYWtlZmlsZS5hbQorKysrIGIvbGliYXRvbWljL01ha2VmaWxlLmFtCitAQCAtMTAxLDcgKzEwMSw4IEBAIFBBVF9TCQk9ICQod29yZCAzLCQoUEFUX1NQTElUKSkKKyBJRlVOQ19ERUYJPSAtRElGVU5DX0FMVD0kKFBBVF9TKQorIElGVU5DX09QVAk9ICQod29yZCAkKFBBVF9TKSwkKElGVU5DX09QVElPTlMpKQorIAorLU1fREVQUwkJPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9UUlVFQE1fREVQUwkJPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9GQUxTRUBNX0RFUFMJCT0KKyBNX1NJWkUJCT0gLUROPSQoUEFUX04pCisgTV9JRlVOQwkJPSAkKGlmICQoUEFUX1MpLCQoSUZVTkNfREVGKSAkKElGVU5DX09QVCkpCisgTV9GSUxFCQk9ICQoUEFUX0JBU0UpX24uYworZGlmZiAtLWdpdCBhL2xpYmF0b21pYy9NYWtlZmlsZS5pbiBiL2xpYmF0b21pYy9NYWtlZmlsZS5pbgoraW5kZXggZjZlZWFiMzEyZWEuLjNmMDZhODk0MDU4IDEwMDY0NAorLS0tIGEvbGliYXRvbWljL01ha2VmaWxlLmluCisrKysgYi9saWJhdG9taWMvTWFrZWZpbGUuaW4KK0BAIC0zMzEsNyArMzMxLDggQEAgUEFUX04gPSAkKHdvcmQgMiwkKFBBVF9TUExJVCkpCisgUEFUX1MgPSAkKHdvcmQgMywkKFBBVF9TUExJVCkpCisgSUZVTkNfREVGID0gLURJRlVOQ19BTFQ9JChQQVRfUykKKyBJRlVOQ19PUFQgPSAkKHdvcmQgJChQQVRfUyksJChJRlVOQ19PUFRJT05TKSkKKy1NX0RFUFMgPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9UUlVFQE1fREVQUyA9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCisrQEFNREVQX0ZBTFNFQE1fREVQUyA9CisgTV9TSVpFID0gLUROPSQoUEFUX04pCisgTV9JRlVOQyA9ICQoaWYgJChQQVRfUyksJChJRlVOQ19ERUYpICQoSUZVTkNfT1BUKSkKKyBNX0ZJTEUgPSAkKFBBVF9CQVNFKV9uLmMKKy0tIAorMi4xMi4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAzMi1Eb24tdC1zZWFyY2gtaG9zdC1kaXJlY3RvcnktZHVyaW5nLXJlbGluay1pZi1pbnN0X3ByLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDMyLURvbi10LXNlYXJjaC1ob3N0LWRpcmVjdG9yeS1kdXJpbmctcmVsaW5rLWlmLWluc3RfcHIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg5MDVmNQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAzMi1Eb24tdC1zZWFyY2gtaG9zdC1kaXJlY3RvcnktZHVyaW5nLXJlbGluay1pZi1pbnN0X3ByLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gM2JlNmI3NjZhNTg4MWIwYjE4N2MzYzNjNjgyNTBhOWU0ZjdjMGZhMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDMgTWFyIDIwMTUgMDg6MjE6MTkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzMi80N10gRG9uJ3Qgc2VhcmNoIGhvc3QgZGlyZWN0b3J5IGR1cmluZyAicmVsaW5rIiBpZgorICRpbnN0X3ByZWZpeCBpcyBwcm92aWRlZAorCitodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvbGlidG9vbC1wYXRjaGVzLzIwMTEtMDEvbXNnMDAwMjYuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbHRtYWluLnNoIHwgNSArKystLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IDUyYmRiZGI1ZjljLi44MmJjZWMzOWYwNSAxMDA2NDQKKy0tLSBhL2x0bWFpbi5zaAorKysrIGIvbHRtYWluLnNoCitAQCAtNjAwNCwxMiArNjAwNCwxMyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgICBmaQorIAkgICAgZWxzZQorIAkgICAgICAjIFdlIGNhbm5vdCBzZWVtIHRvIGhhcmRjb2RlIGl0LCBndWVzcyB3ZSdsbCBmYWtlIGl0LgorKwkgICAgICAjIERlZmF1bHQgaWYgJGxpYmRpciBpcyBub3QgcmVsYXRpdmUgdG8gdGhlIHByZWZpeDoKKyAJICAgICAgYWRkX2Rpcj0iLUwkbGliZGlyIgorLQkgICAgICAjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCisrCisgCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisgCQljYXNlICRsaWJkaXIgaW4KKyAJCSAgW1xcL10qKQorLQkJICAgIGFkZF9kaXI9IiRhZGRfZGlyIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisrCQkgICAgYWRkX2Rpcj0iLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKyAJCSAgICA7OworIAkJZXNhYworIAkgICAgICBmaQorLS0gCisyLjEyLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDMzLVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMzMtVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGI4ZGYzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDMzLVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSA2ZWRjYWI5MDQ2Yjg2MmNiYjliNDY4OTJmYzM5MGNlNjk5NzY1MzljIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMjggQXByIDIwMTUgMjM6MTU6MjcgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAzMy80N10gVXNlIFNZU1RFTUxJQlNfRElSIHJlcGxhY2VtZW50IGluc3RlYWQgb2YgaGFyZGNvZGluZworIGJhc2VfbGliZGlyCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtU3BlY2lmaWNdCisKKyBnY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaCBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmgKK2luZGV4IGM0NWZjMWQzNWQxLi5hN2FmZTE5NzI2NiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmgKKysrKyBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmgKK0BAIC0yMSw3ICsyMSw3IEBACisgI2lmbmRlZiBHQ0NfQUFSQ0g2NF9MSU5VWF9ICisgI2RlZmluZSBHQ0NfQUFSQ0g2NF9MSU5VWF9ICisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC1hYXJjaDY0JXttYmlnLWVuZGlhbjpfYmV9JXttYWJpPWlscDMyOl9pbHAzMn0uc28uMSIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtYWFyY2g2NCV7bWJpZy1lbmRpYW46X2JlfSV7bWFiaT1pbHAzMjpfaWxwMzJ9LnNvLjEiCisgCisgI3VuZGVmIE1VU0xfRFlOQU1JQ19MSU5LRVIKKyAjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbXVzbC1hYXJjaDY0JXttYmlnLWVuZGlhbjpfYmV9JXttYWJpPWlscDMyOl9pbHAzMn0uc28uMSIKKy0tIAorMi4xMi4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAzNC1hYXJjaDY0LUFkZC1zdXBwb3J0LWZvci1tdXNsLWxkc28ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMzQtYWFyY2g2NC1BZGQtc3VwcG9ydC1mb3ItbXVzbC1sZHNvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkODY2ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMzQtYWFyY2g2NC1BZGQtc3VwcG9ydC1mb3ItbXVzbC1sZHNvLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gYjE0MGQ2ODM5Y2ZiYTljYWM4OTJiYzczNmQ5ODQ1NDA1NTJkNmE1NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDI4IEFwciAyMDE1IDIzOjE4OjM5IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMzQvNDddIGFhcmNoNjQ6IEFkZCBzdXBwb3J0IGZvciBtdXNsIGxkc28KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1TcGVjaWZpY10KKworIGdjYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAoraW5kZXggYTdhZmUxOTcyNjYuLjU4MGMyYzdlYTE1IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAorKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAorQEAgLTI0LDcgKzI0LDcgQEAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtYWFyY2g2NCV7bWJpZy1lbmRpYW46X2JlfSV7bWFiaT1pbHAzMjpfaWxwMzJ9LnNvLjEiCisgCisgI3VuZGVmIE1VU0xfRFlOQU1JQ19MSU5LRVIKKy0jZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbXVzbC1hYXJjaDY0JXttYmlnLWVuZGlhbjpfYmV9JXttYWJpPWlscDMyOl9pbHAzMn0uc28uMSIKKysjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVIgIFNZU1RFTUxJQlNfRElSICJsZC1tdXNsLWFhcmNoNjQle21iaWctZW5kaWFuOl9iZX0le21hYmk9aWxwMzI6X2lscDMyfS5zby4xIgorIAorICN1bmRlZiAgQVNBTl9DQzFfU1BFQworICNkZWZpbmUgQVNBTl9DQzFfU1BFQyAiJXslOnNhbml0aXplKGFkZHJlc3MpOi1mdW53aW5kLXRhYmxlc30iCistLSAKKzIuMTIuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMzUtbGliY2MxLWZpeC1saWJjYzEtcy1pbnN0YWxsLXBhdGgtYW5kLXJwYXRoLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDM1LWxpYmNjMS1maXgtbGliY2MxLXMtaW5zdGFsbC1wYXRoLWFuZC1ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmMxOTU2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDM1LWxpYmNjMS1maXgtbGliY2MxLXMtaW5zdGFsbC1wYXRoLWFuZC1ycGF0aC5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIDYzNjE3ZjJkYTE1M2RiMTBmYTJmZTkzOGNjZTMxYmVlMDFkNDdmZTggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFN1biwgNSBKdWwgMjAxNSAyMDoyNToxOCAtMDcwMAorU3ViamVjdDogW1BBVENIIDM1LzQ3XSBsaWJjYzE6IGZpeCBsaWJjYzEncyBpbnN0YWxsIHBhdGggYW5kIHJwYXRoCisKKyogSW5zdGFsbCBsaWJjYzEuc28gYW5kIGxpYmNjMXBsdWdpbi5zbyBpbnRvCisgICQobGliZXhlY2RpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJChnY2NfdmVyc2lvbiksIGFzIHdoYXQgd2UKKyAgaGFkIGRvbmUgdG8gbHRvLXBsdWdpbi4KKyogRml4IGJhZCBSUEFUSCBpdXNzdWU6CisgIGdjYy01LjIuMDogcGFja2FnZSBnY2MtcGx1Z2lucyBjb250YWlucyBiYWQgUlBBVEggL3BhdGh0L3RvL3RtcC9zeXNyb290cy9xZW11eDg2LTY0L3Vzci9saWI2NC8uLi9saWI2NCBpbiBmaWxlCisgL3BhdGgvdG8vZ2NjLzUuMi4wLXIwL3BhY2thZ2VzLXNwbGl0L2djYy1wbHVnaW5zL3Vzci9saWI2NC9nY2MveDg2XzY0LXBva3ktbGludXgvNS4yLjAvcGx1Z2luL2xpYmNjMXBsdWdpbi5zby4wLjAuMAorIFtycGF0aHNdCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWJjYzEvTWFrZWZpbGUuYW0gfCA0ICsrLS0KKyBsaWJjYzEvTWFrZWZpbGUuaW4gfCA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmNjMS9NYWtlZmlsZS5hbSBiL2xpYmNjMS9NYWtlZmlsZS5hbQoraW5kZXggNWU2MWE5MmEyNmIuLmU4YjYyN2Y5Y2VjIDEwMDY0NAorLS0tIGEvbGliY2MxL01ha2VmaWxlLmFtCisrKysgYi9saWJjYzEvTWFrZWZpbGUuYW0KK0BAIC0zNyw4ICszNyw4IEBAIGxpYmliZXJ0eSA9ICQoaWYgJCh3aWxkY2FyZCAkKGxpYmliZXJ0eV9ub2FzYW4pKSwkKFdjKSQobGliaWJlcnR5X25vYXNhbiksIFwKKyAJICAgICQoV2MpJChsaWJpYmVydHlfbm9ybWFsKSkpCisgbGliaWJlcnR5X2RlcCA9ICQocGF0c3Vic3QgJChXYyklLCUsJChsaWJpYmVydHkpKQorIAorLXBsdWdpbmRpciA9ICQobGliZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKGdjY192ZXJzaW9uKS9wbHVnaW4KKy1jYzFsaWJkaXIgPSAkKGxpYmRpcikvJChsaWJzdWZmaXgpCisrY2MxbGliZGlyID0gJChsaWJleGVjZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKGdjY192ZXJzaW9uKQorK3BsdWdpbmRpciA9ICQoY2MxbGliZGlyKQorIAorIGlmIEVOQUJMRV9QTFVHSU4KKyBwbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJjYzFwbHVnaW4ubGEgbGliY3AxcGx1Z2luLmxhCitkaWZmIC0tZ2l0IGEvbGliY2MxL01ha2VmaWxlLmluIGIvbGliY2MxL01ha2VmaWxlLmluCitpbmRleCA1NGJhYmIwMmE0OS4uZTUxZDg3ZmZkY2UgMTAwNjQ0CistLS0gYS9saWJjYzEvTWFrZWZpbGUuaW4KKysrKyBiL2xpYmNjMS9NYWtlZmlsZS5pbgorQEAgLTMwMyw4ICszMDMsOCBAQCBsaWJpYmVydHkgPSAkKGlmICQod2lsZGNhcmQgJChsaWJpYmVydHlfbm9hc2FuKSksJChXYykkKGxpYmliZXJ0eV9ub2FzYW4pLCBcCisgCSAgICAkKFdjKSQobGliaWJlcnR5X25vcm1hbCkpKQorIAorIGxpYmliZXJ0eV9kZXAgPSAkKHBhdHN1YnN0ICQoV2MpJSwlLCQobGliaWJlcnR5KSkKKy1wbHVnaW5kaXIgPSAkKGxpYmRpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJChnY2NfdmVyc2lvbikvcGx1Z2luCistY2MxbGliZGlyID0gJChsaWJkaXIpLyQobGlic3VmZml4KQorK2NjMWxpYmRpciA9ICQobGliZXhlY2RpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJChnY2NfdmVyc2lvbikKKytwbHVnaW5kaXIgPSAkKGNjMWxpYmRpcikKKyBARU5BQkxFX1BMVUdJTl9UUlVFQHBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmNjMXBsdWdpbi5sYSBsaWJjcDFwbHVnaW4ubGEKKyBARU5BQkxFX1BMVUdJTl9UUlVFQGNjMWxpYl9MVExJQlJBUklFUyA9IGxpYmNjMS5sYQorIEJVSUxUX1NPVVJDRVMgPSBjLWNvbXBpbGVyLW5hbWUuaCBjcC1jb21waWxlci1uYW1lLmgKKy0tIAorMi4xMi4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAzNi1oYW5kbGUtc3lzcm9vdC1zdXBwb3J0LWZvci1uYXRpdmVzZGstZ2NjLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDM2LWhhbmRsZS1zeXNyb290LXN1cHBvcnQtZm9yLW5hdGl2ZXNkay1nY2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEwYjEwOAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAzNi1oYW5kbGUtc3lzcm9vdC1zdXBwb3J0LWZvci1uYXRpdmVzZGstZ2NjLnBhdGNoCkBAIC0wLDAgKzEsMjEzIEBACitGcm9tIGNhMTQ4MjBhZTgzNGE2MmVmMmI4MGIyODNlOGY5MDA3MTQ2MzYyNzIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCA3IERlYyAyMDE1IDIzOjM5OjU0ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMzYvNDddIGhhbmRsZSBzeXNyb290IHN1cHBvcnQgZm9yIG5hdGl2ZXNkay1nY2MKKworQmVpbmcgYWJsZSB0byBidWlsZCBhIG5hdGl2ZXNkayBnY2MgaXMgdXNlZnVsLCBwYXJ0aWN1bGFybHkgaW4gY2FzZXMKK3doZXJlIHRoZSBob3N0IGNvbXBpbGVyIG1heSBiZSBvZiBhbiBpbmNvbXBhdGlibGUgdmVyc2lvbiAob3IgYSAzMgorYml0IGNvbXBpbGVyIGlzIG5lZWRlZCkuCisKK1NhZGx5LCBidWlsZGluZyBuYXRpdmVzZGstZ2NjIGlzIG5vdCBzdHJhaWdodCBmb3J3YXJkLiBXZSBpbnN0YWxsCituYXRpdmVzZGstZ2NjIGludG8gYSByZWxvY2F0YWJsZSBsb2NhdGlvbiBhbmQgdGhpcyBtZWFucyB0aGF0IGl0cworbGlicmFyeSBsb2NhdGlvbnMgY2FuIGNoYW5nZS4gIk5vcm1hbCIgc3lzcm9vdCBzdXBwb3J0IGRvZXNuJ3QgaGVscAoraW4gdGhpcyBjYXNlIHNpbmNlIHRoZSB2YWx1ZXMgb2YgcGF0aHMgbGlrZSAibGliZGlyIiBjaGFuZ2UsIG5vdCBqdXN0CitiYXNlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBzeXN0ZW0uCisKK0luIG9yZGVyIHRvIGhhbmRsZSB0aGlzIHdlIGRvIHR3byB0aGluZ3M6CisKK2EpIEFkZCAlciBpbnRvIHNwZWMgZmlsZSBtYXJrdXAgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGluamVjdGVkIHBhdGhzCisgICBzdWNoIGFzIFNZU1RFTUxJQlNfRElSIChzZWUgZ2NjX211bHRpbGliX3NldHVwKCkpLgorYikgQWRkIG90aGVyIHBhdGhzIHdoaWNoIG5lZWQgcmVsb2NhdGlvbiBpbnRvIGEgLmdjY3JlbG9jcHJlZml4IHNlY3Rpb24KKyAgIHdoaWNoIHRoZSByZWxvY2F0aW9uIGNvZGUgd2lsbCBub3RpY2UgYW5kIGFkanVzdCBhdXRvbWF0aWNhbGx5LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1JQIDIwMTUvNy8yOAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ2NjL2NwcGRlZmF1bHQuYyB8IDUwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCisgZ2NjL2NwcGRlZmF1bHQuaCB8ICAzICsrLQorIGdjYy9nY2MuYyAgICAgICAgfCAyMCArKysrKysrKysrKysrKy0tLS0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNTMgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY3BwZGVmYXVsdC5jIGIvZ2NjL2NwcGRlZmF1bHQuYworaW5kZXggYzhkYTA4ODQ4NzIuLjQzZGM1OTdhMGMzIDEwMDY0NAorLS0tIGEvZ2NjL2NwcGRlZmF1bHQuYworKysrIGIvZ2NjL2NwcGRlZmF1bHQuYworQEAgLTM1LDYgKzM1LDMwIEBACisgIyB1bmRlZiBDUk9TU19JTkNMVURFX0RJUgorICNlbmRpZgorIAorK3N0YXRpYyBjaGFyIEdQTFVTUExVU19JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBHUExVU1BMVVNfSU5DTFVERV9ESVI7Cisrc3RhdGljIGNoYXIgR0NDX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEdDQ19JTkNMVURFX0RJUjsKKytzdGF0aWMgY2hhciBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUjsKKytzdGF0aWMgY2hhciBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSOworK3N0YXRpYyBjaGFyIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVDsKKysjaWZkZWYgTE9DQUxfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBMT0NBTF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBMT0NBTF9JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgUFJFRklYX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgUFJFRklYX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFBSRUZJWF9JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgRklYRURfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBGSVhFRF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBGSVhFRF9JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgQ1JPU1NfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBDUk9TU19JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBDUk9TU19JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgVE9PTF9JTkNMVURFX0RJUgorK3N0YXRpYyBjaGFyIFRPT0xfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gVE9PTF9JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSCisrc3RhdGljIGNoYXIgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUjsKKysjZW5kaWYKKysKKyBjb25zdCBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlIGNwcF9pbmNsdWRlX2RlZmF1bHRzW10KKyAjaWZkZWYgSU5DTFVERV9ERUZBVUxUUworID0gSU5DTFVERV9ERUZBVUxUUzsKK0BAIC00MiwzOCArNjYsMzggQEAgY29uc3Qgc3RydWN0IGRlZmF1bHRfaW5jbHVkZSBjcHBfaW5jbHVkZV9kZWZhdWx0c1tdCisgPSB7CisgI2lmZGVmIEdQTFVTUExVU19JTkNMVURFX0RJUgorICAgICAvKiBQaWNrIHVwIEdOVSBDKysgZ2VuZXJpYyBpbmNsdWRlIGZpbGVzLiAgKi8KKy0gICAgeyBHUExVU1BMVVNfSU5DTFVERV9ESVIsICJHKysiLCAxLCAxLAorKyAgICB7IEdQTFVTUExVU19JTkNMVURFX0RJUlZBUiwgIkcrKyIsIDEsIDEsCisgICAgICAgR1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09ULCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSCisgICAgIC8qIFBpY2sgdXAgR05VIEMrKyB0YXJnZXQtZGVwZW5kZW50IGluY2x1ZGUgZmlsZXMuICAqLworLSAgICB7IEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwKKysgICAgeyBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUlZBUiwgIkcrKyIsIDEsIDEsCisgICAgICAgR1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09ULCAxIH0sCisgI2VuZGlmCisgI2lmZGVmIEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUgorICAgICAvKiBQaWNrIHVwIEdOVSBDKysgYmFja3dhcmQgYW5kIGRlcHJlY2F0ZWQgaW5jbHVkZSBmaWxlcy4gICovCistICAgIHsgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwKKysgICAgeyBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVJWQVIsICJHKysiLCAxLCAxLAorICAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBHQ0NfSU5DTFVERV9ESVIKKyAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMuICAqLworLSAgICB7IEdDQ19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKysgICAgeyBHQ0NfSU5DTFVERV9ESVJWQVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQKKyAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMgdW5kZXIgdGhlIHNwZWNpZmllZCBzeXNyb290LiAgKi8KKy0gICAgeyBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVCwgIkdDQyIsIDAsIDAsIDEsIDAgfSwKKysgICAgeyBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzJWQVIsICJHQ0MiLCAwLCAwLCAxLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIExPQ0FMX0lOQ0xVREVfRElSCisgICAgIC8qIC91c3IvbG9jYWwvaW5jbHVkZSBjb21lcyBiZWZvcmUgdGhlIGZpeGluY2x1ZGVkIGhlYWRlciBmaWxlcy4gICovCistICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDIgfSwKKy0gICAgeyBMT0NBTF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMSwgMCB9LAorKyAgICB7IExPQ0FMX0lOQ0xVREVfRElSVkFSLCAwLCAwLCAxLCAxLCAyIH0sCisrICAgIHsgTE9DQUxfSU5DTFVERV9ESVJWQVIsIDAsIDAsIDEsIDEsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgUFJFRklYX0lOQ0xVREVfRElSCistICAgIHsgUFJFRklYX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAwLCAwIH0sCisrICAgIHsgUFJFRklYX0lOQ0xVREVfRElSVkFSLCAwLCAwLCAxLCAwLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIEZJWEVEX0lOQ0xVREVfRElSCisgICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZml4aW5jbHVkZXMuICAqLworLSAgICB7IEZJWEVEX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwKKysgICAgeyBGSVhFRF9JTkNMVURFX0RJUlZBUiwgIkdDQyIsIDAsIDAsIDAsCisgICAgICAgLyogQSBtdWx0aWxpYiBzdWZmaXggbmVlZHMgYWRkaW5nIGlmIGRpZmZlcmVudCBtdWx0aWxpYnMgdXNlCisgCSBkaWZmZXJlbnQgaGVhZGVycy4gICovCisgI2lmZGVmIFNZU1JPT1RfSEVBREVSU19TVUZGSVhfU1BFQworQEAgLTg1LDE2ICsxMDksMTYgQEAgY29uc3Qgc3RydWN0IGRlZmF1bHRfaW5jbHVkZSBjcHBfaW5jbHVkZV9kZWZhdWx0c1tdCisgI2VuZGlmCisgI2lmZGVmIENST1NTX0lOQ0xVREVfRElSCisgICAgIC8qIE9uZSBwbGFjZSB0aGUgdGFyZ2V0IHN5c3RlbSdzIGhlYWRlcnMgbWlnaHQgYmUuICAqLworLSAgICB7IENST1NTX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorKyAgICB7IENST1NTX0lOQ0xVREVfRElSVkFSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBUT09MX0lOQ0xVREVfRElSCisgICAgIC8qIEFub3RoZXIgcGxhY2UgdGhlIHRhcmdldCBzeXN0ZW0ncyBoZWFkZXJzIG1pZ2h0IGJlLiAgKi8KKy0gICAgeyBUT09MX0lOQ0xVREVfRElSLCAiQklOVVRJTFMiLCAwLCAxLCAwLCAwIH0sCisrICAgIHsgVE9PTF9JTkNMVURFX0RJUlZBUiwgIkJJTlVUSUxTIiwgMCwgMSwgMCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIKKyAgICAgLyogL3Vzci9pbmNsdWRlIGNvbWVzIGRlYWQgbGFzdC4gICovCistICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSLCBOQVRJVkVfU1lTVEVNX0hFQURFUl9DT01QT05FTlQsIDAsIDAsIDEsIDIgfSwKKy0gICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIsIE5BVElWRV9TWVNURU1fSEVBREVSX0NPTVBPTkVOVCwgMCwgMCwgMSwgMCB9LAorKyAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUlZBUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAyIH0sCisrICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSVkFSLCBOQVRJVkVfU1lTVEVNX0hFQURFUl9DT01QT05FTlQsIDAsIDAsIDEsIDAgfSwKKyAjZW5kaWYKKyAgICAgeyAwLCAwLCAwLCAwLCAwLCAwIH0KKyAgIH07CitkaWZmIC0tZ2l0IGEvZ2NjL2NwcGRlZmF1bHQuaCBiL2djYy9jcHBkZWZhdWx0LmgKK2luZGV4IDE3YmJiMGVhZWY3Li5hOTM3ZWMxZDE4NyAxMDA2NDQKKy0tLSBhL2djYy9jcHBkZWZhdWx0LmgKKysrKyBiL2djYy9jcHBkZWZhdWx0LmgKK0BAIC0zMyw3ICszMyw4IEBACisgCisgc3RydWN0IGRlZmF1bHRfaW5jbHVkZQorIHsKKy0gIGNvbnN0IGNoYXIgKmNvbnN0IGZuYW1lOwkvKiBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5LiAgKi8KKysgIGNvbnN0IGNoYXIgKmZuYW1lOyAgICAgLyogVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeS4gICovCisrCisgICBjb25zdCBjaGFyICpjb25zdCBjb21wb25lbnQ7CS8qIFRoZSBjb21wb25lbnQgY29udGFpbmluZyB0aGUgZGlyZWN0b3J5CisgCQkJCSAgIChzZWUgdXBkYXRlX3BhdGggaW4gcHJlZml4LmMpICovCisgICBjb25zdCBjaGFyIGNwbHVzcGx1czsJCS8qIE9ubHkgbG9vayBoZXJlIGlmIHdlJ3JlIGNvbXBpbGluZyBDKysuICAqLworZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggYjI3MjQ1ZGJmNzcuLmUwMTVjNzdmMTVmIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC0yNDcsNiArMjQ3LDggQEAgRklMRSAqcmVwb3J0X3RpbWVzX3RvX2ZpbGUgPSBOVUxMOworICNlbmRpZgorIHN0YXRpYyBjb25zdCBjaGFyICp0YXJnZXRfc3lzdGVtX3Jvb3QgPSBERUZBVUxUX1RBUkdFVF9TWVNURU1fUk9PVDsKKyAKKytzdGF0aWMgY2hhciB0YXJnZXRfcmVsb2NhdGFibGVfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNZU1RFTUxJQlNfRElSOworKworIC8qIE5vbnplcm8gbWVhbnMgcGFzcyB0aGUgdXBkYXRlZCB0YXJnZXRfc3lzdGVtX3Jvb3QgdG8gdGhlIGNvbXBpbGVyLiAgKi8KKyAKKyBzdGF0aWMgaW50IHRhcmdldF9zeXN0ZW1fcm9vdF9jaGFuZ2VkOworQEAgLTUxOCw2ICs1MjAsNyBAQCBvciB3aXRoIGNvbnN0YW50IHRleHQgaW4gYSBzaW5nbGUgYXJndW1lbnQuCisgICVHICAgICBwcm9jZXNzIExJQkdDQ19TUEVDIGFzIGEgc3BlYy4KKyAgJVIgICAgIE91dHB1dCB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0YXJnZXRfc3lzdGVtX3Jvb3QgYW5kCisgICAgICAgICB0YXJnZXRfc3lzcm9vdF9zdWZmaXguCisrICVyICAgICBPdXRwdXQgdGhlIGJhc2UgcGF0aCB0YXJnZXRfcmVsb2NhdGFibGVfcHJlZml4CisgICVTICAgICBwcm9jZXNzIFNUQVJURklMRV9TUEVDIGFzIGEgc3BlYy4gIEEgY2FwaXRhbCBTIGlzIGFjdHVhbGx5IHVzZWQgaGVyZS4KKyAgJUUgICAgIHByb2Nlc3MgRU5ERklMRV9TUEVDIGFzIGEgc3BlYy4gIEEgY2FwaXRhbCBFIGlzIGFjdHVhbGx5IHVzZWQgaGVyZS4KKyAgJUMgICAgIHByb2Nlc3MgQ1BQX1NQRUMgYXMgYSBzcGVjLgorQEAgLTE0OTUsMTAgKzE0OTgsMTAgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmdjY19saWJleGVjX3ByZWZpeDsKKyAgICBnY2NfZXhlY19wcmVmaXggaXMgc2V0IGJlY2F1c2UsIGluIHRoYXQgY2FzZSwgd2Uga25vdyB3aGVyZSB0aGUKKyAgICBjb21waWxlciBoYXMgYmVlbiBpbnN0YWxsZWQsIGFuZCB1c2UgcGF0aHMgcmVsYXRpdmUgdG8gdGhhdAorICAgIGxvY2F0aW9uIGluc3RlYWQuICAqLworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9leGVjX3ByZWZpeCA9IFNUQU5EQVJEX0VYRUNfUFJFRklYOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9saWJleGVjX3ByZWZpeCA9IFNUQU5EQVJEX0xJQkVYRUNfUFJFRklYOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9iaW5kaXJfcHJlZml4ID0gU1RBTkRBUkRfQklORElSX1BSRUZJWDsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeCA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVg7Cisrc3RhdGljIGNoYXIgc3RhbmRhcmRfZXhlY19wcmVmaXhbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfRVhFQ19QUkVGSVg7Cisrc3RhdGljIGNoYXIgc3RhbmRhcmRfbGliZXhlY19wcmVmaXhbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfTElCRVhFQ19QUkVGSVg7Cisrc3RhdGljIGNoYXIgc3RhbmRhcmRfYmluZGlyX3ByZWZpeFs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTVEFOREFSRF9CSU5ESVJfUFJFRklYOworK3N0YXRpYyBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4ID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWDsKKyAKKyAvKiBGb3IgbmF0aXZlIGNvbXBpbGVycywgdGhlc2UgYXJlIHdlbGwta25vd24gcGF0aHMgY29udGFpbmluZworICAgIGNvbXBvbmVudHMgdGhhdCBtYXkgYmUgcHJvdmlkZWQgYnkgdGhlIHN5c3RlbS4gIEZvciBjcm9zcworQEAgLTE1MDYsOSArMTUwOSw5IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4ID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWDsKKyBzdGF0aWMgY29uc3QgY2hhciAqbWRfZXhlY19wcmVmaXggPSBNRF9FWEVDX1BSRUZJWDsKKyBzdGF0aWMgY29uc3QgY2hhciAqbWRfc3RhcnRmaWxlX3ByZWZpeCA9IE1EX1NUQVJURklMRV9QUkVGSVg7Cisgc3RhdGljIGNvbnN0IGNoYXIgKm1kX3N0YXJ0ZmlsZV9wcmVmaXhfMSA9IE1EX1NUQVJURklMRV9QUkVGSVhfMTsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeF8xCisrc3RhdGljIGNoYXIgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeF8xWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKQorICAgPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzE7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMgorK3N0YXRpYyBjaGFyIHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkKKyAgID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yOworIAorIC8qIEEgcmVsYXRpdmUgcGF0aCB0byBiZSB1c2VkIGluIGZpbmRpbmcgdGhlIGxvY2F0aW9uIG9mIHRvb2xzCitAQCAtNTgyNiw2ICs1ODI5LDExIEBAIGRvX3NwZWNfMSAoY29uc3QgY2hhciAqc3BlYywgaW50IGluc3dpdGNoLCBjb25zdCBjaGFyICpzb2Z0X21hdGNoZWRfcGFydCkKKyAJICAgICAgfQorIAkgICAgYnJlYWs7CisgCisrICAgICAgICAgIGNhc2UgJ3InOgorKyAgICAgICAgICAgICAgb2JzdGFja19ncm93ICgmb2JzdGFjaywgdGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeCwKKysJCSAgICAgIHN0cmxlbiAodGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeCkpOworKyAgICAgICAgICAgIGJyZWFrOworKworIAkgIGNhc2UgJ1MnOgorIAkgICAgdmFsdWUgPSBkb19zcGVjXzEgKHN0YXJ0ZmlsZV9zcGVjLCAwLCBOVUxMKTsKKyAJICAgIGlmICh2YWx1ZSAhPSAwKQorLS0gCisyLjEyLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDM3LVNlYXJjaC10YXJnZXQtc3lzcm9vdC1nY2MtdmVyc2lvbi1zcGVjaWZpYy1kaXJzLXdpdGgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMzctU2VhcmNoLXRhcmdldC1zeXNyb290LWdjYy12ZXJzaW9uLXNwZWNpZmljLWRpcnMtd2l0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yzg1YTAzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDM3LVNlYXJjaC10YXJnZXQtc3lzcm9vdC1nY2MtdmVyc2lvbi1zcGVjaWZpYy1kaXJzLXdpdGgucGF0Y2gKQEAgLTAsMCArMSwxMDIgQEAKK0Zyb20gMTZhMzI2YmNkMTI2YjM5NWIyOTAxOTA3MjkwNWJhZTdhNWQ0NzUwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDcgRGVjIDIwMTUgMjM6NDE6NDUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzNy80N10gU2VhcmNoIHRhcmdldCBzeXNyb290IGdjYyB2ZXJzaW9uIHNwZWNpZmljIGRpcnMgd2l0aAorIG11bHRpbGliLgorCitXZSBpbnN0YWxsIHRoZSBnY2MgbGlicmFyaWVzIChzdWNoIGFzIGNydGJlZ2luLnApIGludG8KKzxzeXNyb290PjxsaWJkaXI+Lzx0YXJnZXQtc3lzPi81LjIuMC8KK3doaWNoIGlzIGEgZGVmYXVsdCBzZWFyY2ggcGF0aCBmb3IgR0NDIChha2EgbXVsdGlfc3VmZml4IGluIHRoZQorY29kZSBiZWxvdykuIDx0YXJnZXQtc3lzPiBpcyAnbWFjaGluZScgaW4gZ2NjJ3MgdGVybWlub2xvZ3kuIFdlIHVzZQordGhlc2UgZGlyZWN0b3JpZXMgc28gdGhhdCBtdWx0aXBsZSBnY2MgdmVyc2lvbnMgY291bGQgaW4gdGhlb3J5Citjby1leGlzdCBvbiB0YXJnZXQuCisKK1dlIG9ubHkgd2FudCB0byBidWlsZCBvbmUgZ2NjLWNyb3NzLWNhbmFkaWFuIHBlciBhcmNoIGFuZCBoYXZlIHRoaXMgd29yaworZm9yIGFsbCBtdWx0aWxpYnMuIDx0YXJnZXQtc3lzPiBjYW4gYmUgaGFuZGxlZCBieSBtYXBwaW5nIHRoZSBtdWx0aWxpYgorPHRhcmdldC1zeXM+IHRvIHRoZSBvbmUgdXNlZCBieSBnY2MtY3Jvc3MtY2FuYWRpYW4sIGUuZy4KK21pcHM2NC1wb2xrbWxsaWIzMi1saW51eAoraXMgc3ltbGlua2VkIHRvIGJ5IG1pcHM2NC1wb2t5LWxpbnV4LgorCitUaGUgZGVmYXVsdCBnY2Mgc2VhcmNoIHBhdGggaW4gdGhlIHRhcmdldCBzeXNyb290IGZvciBhICJsaWI2NCIgbXV0bGlsaWIKK2lzOgorCis8c3lzcm9vdD4vbGliMzIvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vbGliMzIvLi4vbGliNjQvCis8c3lzcm9vdD4vdXNyL2xpYjMyL21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L3Vzci9saWIzMi8uLi9saWI2NC8KKzxzeXNyb290Pi9saWIzMi8KKzxzeXNyb290Pi91c3IvbGliMzIvCisKK3doaWNoIG1lYW5zIHRoYXQgdGhlIGxpYjMyIGNydGJlZ2luLm8gd2lsbCBiZSBmb3VuZCBhbmQgdGhlIGxpYjY0IG9uZXMKK3dpbGwgbm90IHdoaWNoIGxlYWRzIHRvIGNvbXBpbGVyIGZhaWx1cmVzLgorCitUaGlzIHBhdGNoIGluamVjdHMgYSBtdWx0aWxpYiB2ZXJzaW9uIG9mIHRoYXQgcGF0aCBmaXJzdCBzbyB0aGUgbGliNjQKK2JpbmFyaWVzIGNhbiBiZSBmb3VuZCBmaXJzdC4gV2l0aCB0aGlzIGNoYW5nZSB0aGUgc2VhcmNoIHBhdGggYmVjb21lczoKKworPHN5c3Jvb3Q+L2xpYjMyLy4uL2xpYjY0L21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L2xpYjMyL21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L2xpYjMyLy4uL2xpYjY0LworPHN5c3Jvb3Q+L3Vzci9saWIzMi8uLi9saWI2NC9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi91c3IvbGliMzIvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vdXNyL2xpYjMyLy4uL2xpYjY0LworPHN5c3Jvb3Q+L2xpYjMyLworPHN5c3Jvb3Q+L3Vzci9saWIzMi8KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitSUCAyMDE1LzcvMzEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdjYy9nY2MuYyB8IDI5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDI4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggZTAxNWM3N2YxNWYuLjg0YWY1ZDVhMmUxIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC0yNTMzLDcgKzI1MzMsNyBAQCBmb3JfZWFjaF9wYXRoIChjb25zdCBzdHJ1Y3QgcGF0aF9wcmVmaXggKnBhdGhzLAorICAgICAgIGlmIChwYXRoID09IE5VTEwpCisgCXsKKyAJICBsZW4gPSBwYXRocy0+bWF4X2xlbiArIGV4dHJhX3NwYWNlICsgMTsKKy0JICBsZW4gKz0gTUFYIChNQVggKHN1ZmZpeF9sZW4sIG11bHRpX29zX2Rpcl9sZW4pLCBtdWx0aWFyY2hfbGVuKTsKKysJICBsZW4gKz0gTUFYICgoc3VmZml4X2xlbiArIG11bHRpX29zX2Rpcl9sZW4pLCBtdWx0aWFyY2hfbGVuKTsKKyAJICBwYXRoID0gWE5FV1ZFQyAoY2hhciwgbGVuKTsKKyAJfQorIAorQEAgLTI1NDUsNiArMjU0NSwzMyBAQCBmb3JfZWFjaF9wYXRoIChjb25zdCBzdHJ1Y3QgcGF0aF9wcmVmaXggKnBhdGhzLAorIAkgIC8qIExvb2sgZmlyc3QgaW4gTUFDSElORS9WRVJTSU9OIHN1YmRpcmVjdG9yeS4gICovCisgCSAgaWYgKCFza2lwX211bHRpX2RpcikKKyAJICAgIHsKKysJICAgICAgaWYgKCEocGwtPm9zX211bHRpbGliID8gc2tpcF9tdWx0aV9vc19kaXIgOiBza2lwX211bHRpX2RpcikpCisrCSAgICAgICAgeworKwkgICAgICAgICAgY29uc3QgY2hhciAqdGhpc19tdWx0aTsKKysJICAgICAgICAgIHNpemVfdCB0aGlzX211bHRpX2xlbjsKKysKKysJICAgICAgICAgIGlmIChwbC0+b3NfbXVsdGlsaWIpCisrCQkgICAgeworKwkJICAgICAgdGhpc19tdWx0aSA9IG11bHRpX29zX2RpcjsKKysJCSAgICAgIHRoaXNfbXVsdGlfbGVuID0gbXVsdGlfb3NfZGlyX2xlbjsKKysJCSAgICB9CisrCSAgICAgICAgICBlbHNlCisrCQkgICAgeworKwkJICAgICAgdGhpc19tdWx0aSA9IG11bHRpX2RpcjsKKysJCSAgICAgIHRoaXNfbXVsdGlfbGVuID0gbXVsdGlfZGlyX2xlbjsKKysJCSAgICB9CisrCisrCSAgICAgICAgICAvKiBMb29rIGluIG11bHRpbGliIE1BQ0hJTkUvVkVSU0lPTiBzdWJkaXJlY3RvcnkgZmlyc3QgKi8KKysJICAgICAgICAgIGlmICh0aGlzX211bHRpX2xlbikKKysJICAgICAgICAgICAgeworKwkJICAgICAgbWVtY3B5IChwYXRoICsgbGVuLCB0aGlzX211bHRpLCB0aGlzX211bHRpX2xlbiArIDEpOworKwkgICAgICAgICAgICAgIG1lbWNweSAocGF0aCArIGxlbiArIHRoaXNfbXVsdGlfbGVuLCBtdWx0aV9zdWZmaXgsIHN1ZmZpeF9sZW4gKyAxKTsKKysJICAgICAgICAgICAgICByZXQgPSBjYWxsYmFjayAocGF0aCwgY2FsbGJhY2tfaW5mbyk7CisrCSAgICAgICAgICAgICAgICBpZiAocmV0KQorKwkJICAgICAgICAgIGJyZWFrOworKwkgICAgICAgICAgICB9CisrCSAgICAgICAgfQorKworIAkgICAgICBtZW1jcHkgKHBhdGggKyBsZW4sIG11bHRpX3N1ZmZpeCwgc3VmZml4X2xlbiArIDEpOworIAkgICAgICByZXQgPSBjYWxsYmFjayAocGF0aCwgY2FsbGJhY2tfaW5mbyk7CisgCSAgICAgIGlmIChyZXQpCistLSAKKzIuMTIuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMzgtRml4LXZhcmlvdXMtX0ZPUl9CVUlMRC1hbmQtcmVsYXRlZC12YXJpYWJsZXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMzgtRml4LXZhcmlvdXMtX0ZPUl9CVUlMRC1hbmQtcmVsYXRlZC12YXJpYWJsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIyNmQxMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAzOC1GaXgtdmFyaW91cy1fRk9SX0JVSUxELWFuZC1yZWxhdGVkLXZhcmlhYmxlcy5wYXRjaApAQCAtMCwwICsxLDEzNyBAQAorRnJvbSA2ZTdmNTI2ZTcxYTc2YWFjM2Q0OWJhOGYxNzQyZmUxYjM1OWMxMDYwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNyBEZWMgMjAxNSAyMzo0Mjo0NSArMDAwMAorU3ViamVjdDogW1BBVENIIDM4LzQ3XSBGaXggdmFyaW91cyBfRk9SX0JVSUxEIGFuZCByZWxhdGVkIHZhcmlhYmxlcworCitXaGVuIGRvaW5nIGEgRk9SX0JVSUxEIHRoaW5nLCB5b3UgaGF2ZSB0byBvdmVycmlkZSBDRkxBR1Mgd2l0aAorQ0ZMQUdTX0ZPUl9CVUlMRC4gQW5kIGlmIHlvdSB1c2UgQysrLCB5b3UgYWxzbyBoYXZlIHRvIG92ZXJyaWRlCitDWFhGTEFHUyB3aXRoIENYWEZMQUdTX0ZPUl9CVUlMRC4KK1dpdGhvdXQgdGhpcywgd2hlbiBidWlsZGluZyBmb3IgbWluZ3csIHlvdSBlbmQgdXAgdHJ5aW5nIHRvIHVzZQordGhlIG1pbmd3IGhlYWRlcnMgZm9yIGEgaG9zdCBidWlsZC4KKworVGhlIHNhbWUgZ29lcyBmb3Igb3RoZXIgdmFyaWFibGVzIGFzIHdlbGwsIHN1Y2ggYXMgQ1BQRkxBR1MsCitDUFAsIGFuZCBHTVBJTkMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQZXRlciBTZWViYWNoIDxwZXRlci5zZWViYWNoQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gICAgICB8IDYgKysrKysrCisgTWFrZWZpbGUudHBsICAgICB8IDUgKysrKysKKyBnY2MvTWFrZWZpbGUuaW4gIHwgMiArLQorIGdjYy9jb25maWd1cmUgICAgfCAyICstCisgZ2NjL2NvbmZpZ3VyZS5hYyB8IDIgKy0KKyA1IGZpbGVzIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCBlMzRlOTU1NTM4OC4uYTAzNzQwZjNmOWQgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0xNTIsNiArMTUyLDcgQEAgQlVJTERfRVhQT1JUUyA9IFwKKyAJQ1BQPSIkKENDX0ZPUl9CVUlMRCkgLUUiOyBleHBvcnQgQ1BQOyBcCisgCUNGTEFHUz0iJChDRkxBR1NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDRkxBR1M7IFwKKyAJQ09ORklHX1NIRUxMPSIkKFNIRUxMKSI7IGV4cG9ydCBDT05GSUdfU0hFTEw7IFwKKysJQ1BQRkxBR1M9IiQoQ1BQRkxBR1NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDUFBGTEFHUzsgXAorIAlDWFg9IiQoQ1hYX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ1hYOyBcCisgCUNYWEZMQUdTPSIkKENYWEZMQUdTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ1hYRkxBR1M7IFwKKyAJR0ZPUlRSQU49IiQoR0ZPUlRSQU5fRk9SX0JVSUxEKSI7IGV4cG9ydCBHRk9SVFJBTjsgXAorQEAgLTE2OSw2ICsxNzAsOSBAQCBCVUlMRF9FWFBPUlRTID0gXAorICMgYnVpbHQgZm9yIHRoZSBidWlsZCBzeXN0ZW0gdG8gb3ZlcnJpZGUgdGhvc2UgaW4gQkFTRV9GTEFHU19UT19QQVNTLgorIEVYVFJBX0JVSUxEX0ZMQUdTID0gXAorIAlDRkxBR1M9IiQoQ0ZMQUdTX0ZPUl9CVUlMRCkiIFwKKysJQ1hYRkxBR1M9IiQoQ1hYRkxBR1NfRk9SX0JVSUxEKSIgXAorKwlDUFA9IiQoQ0NfRk9SX0JVSUxEKSAtRSIgXAorKwlDUFBGTEFHUz0iJChDUFBGTEFHU19GT1JfQlVJTEQpIiBcCisgCUxERkxBR1M9IiQoTERGTEFHU19GT1JfQlVJTEQpIgorIAorICMgVGhpcyBpcyB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBidWlsdCBmb3IgdGhlIGhvc3Qgc3lzdGVtLgorQEAgLTE4Niw2ICsxOTAsNyBAQCBIT1NUX1NVQkRJUiA9IEBob3N0X3N1YmRpckAKKyBIT1NUX0VYUE9SVFMgPSBcCisgCSQoQkFTRV9FWFBPUlRTKSBcCisgCUNDPSIkKENDKSI7IGV4cG9ydCBDQzsgXAorKwlDUFA9IiQoQ0MpIC1FIjsgZXhwb3J0IENQUDsgXAorIAlBREFfQ0ZMQUdTPSIkKEFEQV9DRkxBR1MpIjsgZXhwb3J0IEFEQV9DRkxBR1M7IFwKKyAJQ0ZMQUdTPSIkKENGTEFHUykiOyBleHBvcnQgQ0ZMQUdTOyBcCisgCUNPTkZJR19TSEVMTD0iJChTSEVMTCkiOyBleHBvcnQgQ09ORklHX1NIRUxMOyBcCitAQCAtNzM0LDYgKzczOSw3IEBAIEJBU0VfRkxBR1NfVE9fUEFTUyA9IFwKKyAJIkNDX0ZPUl9CVUlMRD0kKENDX0ZPUl9CVUlMRCkiIFwKKyAJIkNGTEFHU19GT1JfQlVJTEQ9JChDRkxBR1NfRk9SX0JVSUxEKSIgXAorIAkiQ1hYX0ZPUl9CVUlMRD0kKENYWF9GT1JfQlVJTEQpIiBcCisrCSJDWFhGTEFHU19GT1JfQlVJTEQ9JChDWFhGTEFHU19GT1JfQlVJTEQpIiBcCisgCSJFWFBFQ1Q9JChFWFBFQ1QpIiBcCisgCSJGTEVYPSQoRkxFWCkiIFwKKyAJIklOU1RBTEw9JChJTlNUQUxMKSIgXAorZGlmZiAtLWdpdCBhL01ha2VmaWxlLnRwbCBiL01ha2VmaWxlLnRwbAoraW5kZXggZDBmYTA3MDA1YmUuLjk1MzM3NmM2NThkIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUudHBsCisrKysgYi9NYWtlZmlsZS50cGwKK0BAIC0xNTQsNiArMTU0LDcgQEAgQlVJTERfRVhQT1JUUyA9IFwKKyAJQ0M9IiQoQ0NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDQzsgXAorIAlDRkxBR1M9IiQoQ0ZMQUdTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0ZMQUdTOyBcCisgCUNPTkZJR19TSEVMTD0iJChTSEVMTCkiOyBleHBvcnQgQ09ORklHX1NIRUxMOyBcCisrCUNQUEZMQUdTPSIkKENQUEZMQUdTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ1BQRkxBR1M7IFwKKyAJQ1hYPSIkKENYWF9GT1JfQlVJTEQpIjsgZXhwb3J0IENYWDsgXAorIAlDWFhGTEFHUz0iJChDWFhGTEFHU19GT1JfQlVJTEQpIjsgZXhwb3J0IENYWEZMQUdTOyBcCisgCUdGT1JUUkFOPSIkKEdGT1JUUkFOX0ZPUl9CVUlMRCkiOyBleHBvcnQgR0ZPUlRSQU47IFwKK0BAIC0xNzEsNiArMTcyLDkgQEAgQlVJTERfRVhQT1JUUyA9IFwKKyAjIGJ1aWx0IGZvciB0aGUgYnVpbGQgc3lzdGVtIHRvIG92ZXJyaWRlIHRob3NlIGluIEJBU0VfRkxBR1NfVE9fUEFTUy4KKyBFWFRSQV9CVUlMRF9GTEFHUyA9IFwKKyAJQ0ZMQUdTPSIkKENGTEFHU19GT1JfQlVJTEQpIiBcCisrCUNYWEZMQUdTPSIkKENYWEZMQUdTX0ZPUl9CVUlMRCkiIFwKKysJQ1BQPSIkKENDX0ZPUl9CVUlMRCkgLUUiIFwKKysJQ1BQRkxBR1M9IiQoQ1BQRkxBR1NfRk9SX0JVSUxEKSIgXAorIAlMREZMQUdTPSIkKExERkxBR1NfRk9SX0JVSUxEKSIKKyAKKyAjIFRoaXMgaXMgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gYnVpbHQgZm9yIHRoZSBob3N0IHN5c3RlbS4KK0BAIC0xODgsNiArMTkyLDcgQEAgSE9TVF9TVUJESVIgPSBAaG9zdF9zdWJkaXJACisgSE9TVF9FWFBPUlRTID0gXAorIAkkKEJBU0VfRVhQT1JUUykgXAorIAlDQz0iJChDQykiOyBleHBvcnQgQ0M7IFwKKysJQ1BQPSIkKENDKSAtRSI7IGV4cG9ydCBDUFA7IFwKKyAJQURBX0NGTEFHUz0iJChBREFfQ0ZMQUdTKSI7IGV4cG9ydCBBREFfQ0ZMQUdTOyBcCisgCUNGTEFHUz0iJChDRkxBR1MpIjsgZXhwb3J0IENGTEFHUzsgXAorIAlDT05GSUdfU0hFTEw9IiQoU0hFTEwpIjsgZXhwb3J0IENPTkZJR19TSEVMTDsgXAorZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5pbgoraW5kZXggOTVkMjFlZmZhZDMuLmRiZTJiYWNkZTUwIDEwMDY0NAorLS0tIGEvZ2NjL01ha2VmaWxlLmluCisrKysgYi9nY2MvTWFrZWZpbGUuaW4KK0BAIC03OTUsNyArNzk1LDcgQEAgQlVJTERfTERGTEFHUz1AQlVJTERfTERGTEFHU0AKKyBCVUlMRF9OT19QSUVfRkxBRyA9IEBCVUlMRF9OT19QSUVfRkxBR0AKKyBCVUlMRF9MREZMQUdTICs9ICQoQlVJTERfTk9fUElFX0ZMQUcpCisgQlVJTERfQ1BQRkxBR1M9IC1JLiAtSSQoQEQpIC1JJChzcmNkaXIpIC1JJChzcmNkaXIpLyQoQEQpIFwKKy0JCS1JJChzcmNkaXIpLy4uL2luY2x1ZGUgQElOQ0lOVExAICQoQ1BQSU5DKSAkKENQUEZMQUdTKQorKwkJLUkkKHNyY2RpcikvLi4vaW5jbHVkZSBASU5DSU5UTEAgJChDUFBJTkMpICQoQ1BQRkxBR1NfRk9SX0JVSUxEKQorIAorICMgQWN0dWFsIG5hbWUgdG8gdXNlIHdoZW4gaW5zdGFsbGluZyBhIG5hdGl2ZSBjb21waWxlci4KKyBHQ0NfSU5TVEFMTF9OQU1FIDo9ICQoc2hlbGwgZWNobyBnY2N8c2VkICckKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpJykKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggNmJhMzkxZWQwNjguLjcyY2E2ZTVjNTM1IDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTExNzg5LDcgKzExNzg5LDcgQEAgZWxzZQorIAlDQz0iJHtDQ19GT1JfQlVJTER9IiBDRkxBR1M9IiR7Q0ZMQUdTX0ZPUl9CVUlMRH0iIFwKKyAJQ1hYPSIke0NYWF9GT1JfQlVJTER9IiBDWFhGTEFHUz0iJHtDWFhGTEFHU19GT1JfQlVJTER9IiBcCisgCUxEPSIke0xEX0ZPUl9CVUlMRH0iIExERkxBR1M9IiR7TERGTEFHU19GT1JfQlVJTER9IiBcCistCUdNUElOQz0iIiBDUFBGTEFHUz0iJHtDUFBGTEFHU30gLURHRU5FUkFUT1JfRklMRSIgXAorKwlHTVBJTkM9IiIgQ1BQRkxBR1M9IiR7Q1BQRkxBR1NfRk9SX0JVSUxEfSAtREdFTkVSQVRPUl9GSUxFIiBcCisgCSR7cmVhbHNyY2Rpcn0vY29uZmlndXJlIFwKKyAJCS0tZW5hYmxlLWxhbmd1YWdlcz0ke2VuYWJsZV9sYW5ndWFnZXMtYWxsfSBcCisgCQktLXRhcmdldD0kdGFyZ2V0X2FsaWFzIC0taG9zdD0kYnVpbGRfYWxpYXMgLS1idWlsZD0kYnVpbGRfYWxpYXMKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggODU1MWE0MTJkZjMuLjZlZWZiNjFkYzJiIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTE3MDgsNyArMTcwOCw3IEBAIGVsc2UKKyAJQ0M9IiR7Q0NfRk9SX0JVSUxEfSIgQ0ZMQUdTPSIke0NGTEFHU19GT1JfQlVJTER9IiBcCisgCUNYWD0iJHtDWFhfRk9SX0JVSUxEfSIgQ1hYRkxBR1M9IiR7Q1hYRkxBR1NfRk9SX0JVSUxEfSIgXAorIAlMRD0iJHtMRF9GT1JfQlVJTER9IiBMREZMQUdTPSIke0xERkxBR1NfRk9SX0JVSUxEfSIgXAorLQlHTVBJTkM9IiIgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9IC1ER0VORVJBVE9SX0ZJTEUiIFwKKysJR01QSU5DPSIiIENQUEZMQUdTPSIke0NQUEZMQUdTX0ZPUl9CVUlMRH0gLURHRU5FUkFUT1JfRklMRSIgXAorIAkke3JlYWxzcmNkaXJ9L2NvbmZpZ3VyZSBcCisgCQktLWVuYWJsZS1sYW5ndWFnZXM9JHtlbmFibGVfbGFuZ3VhZ2VzLWFsbH0gXAorIAkJLS10YXJnZXQ9JHRhcmdldF9hbGlhcyAtLWhvc3Q9JGJ1aWxkX2FsaWFzIC0tYnVpbGQ9JGJ1aWxkX2FsaWFzCistLSAKKzIuMTIuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMzktbmlvczItRGVmaW5lLU1VU0xfRFlOQU1JQ19MSU5LRVIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwMzktbmlvczItRGVmaW5lLU1VU0xfRFlOQU1JQ19MSU5LRVIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdhZWNjZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDAzOS1uaW9zMi1EZWZpbmUtTVVTTF9EWU5BTUlDX0xJTktFUi5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDZkMDNkZGZiN2EwOTI5NDJiZTZiNThiMTgzMGY2OTg2ZDAxMmQ1ZTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVHVlLCAyIEZlYiAyMDE2IDEwOjI2OjEwIC0wODAwCitTdWJqZWN0OiBbUEFUQ0ggMzkvNDddIG5pb3MyOiBEZWZpbmUgTVVTTF9EWU5BTUlDX0xJTktFUgorCitTaWduZWQtb2ZmLWJ5OiBNYXJlayBWYXN1dCA8bWFyZXhAZGVueC5kZT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtU3BlY2lmaWNdCisKKyBnY2MvY29uZmlnL25pb3MyL2xpbnV4LmggfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbmlvczIvbGludXguaCBiL2djYy9jb25maWcvbmlvczIvbGludXguaAoraW5kZXggNTE3N2ZhNjQxYTQuLjFiOGFjY2RhNmVlIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9uaW9zMi9saW51eC5oCisrKysgYi9nY2MvY29uZmlnL25pb3MyL2xpbnV4LmgKK0BAIC0zMCw2ICszMCw3IEBACisgI2RlZmluZSBDUFBfU1BFQyAiJXtwb3NpeDotRF9QT1NJWF9TT1VSQ0V9ICV7cHRocmVhZDotRF9SRUVOVFJBTlR9IgorIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXgtbmlvczIuc28uMSIKKysjZGVmaW5lIE1VU0xfRFlOQU1JQ19MSU5LRVIgICIvbGliL2xkLW11c2wtbmlvczIuc28uMSIKKyAKKyAjdW5kZWYgTElOS19TUEVDCisgI2RlZmluZSBMSU5LX1NQRUMgTElOS19TUEVDX0VORElBTiBcCistLSAKKzIuMTIuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4zLzAwNDEtQWRkLXNzcF9ub25zaGFyZWQtdG8tbGluay1jb21tYW5kbGluZS1mb3ItbXVzbC10YXJnZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDA0MC1BZGQtc3NwX25vbnNoYXJlZC10by1saW5rLWNvbW1hbmRsaW5lLWZvci1tdXNsLXRhcmdlLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNi4zLzAwNDEtQWRkLXNzcF9ub25zaGFyZWQtdG8tbGluay1jb21tYW5kbGluZS1mb3ItbXVzbC10YXJnZS5wYXRjaApyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDQwLUFkZC1zc3Bfbm9uc2hhcmVkLXRvLWxpbmstY29tbWFuZGxpbmUtZm9yLW11c2wtdGFyZ2UucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDA0MS1nY2MtbGliY3BwLXN1cHBvcnQtZmZpbGUtcHJlZml4LW1hcC1vbGQtbmV3LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDQxLWdjYy1saWJjcHAtc3VwcG9ydC1mZmlsZS1wcmVmaXgtbWFwLW9sZC1uZXcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI2MGUzNgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDA0MS1nY2MtbGliY3BwLXN1cHBvcnQtZmZpbGUtcHJlZml4LW1hcC1vbGQtbmV3LnBhdGNoCkBAIC0wLDAgKzEsMjg0IEBACitGcm9tIDRlYWRjOTliZGQwOTc0NzYxYmY0OGYwZmQzMjk5NGRkOWEzZmZjZmUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDE2IE1hciAyMDE2IDAyOjI3OjQzIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0ggNDEvNDddIGdjYy9saWJjcHA6IHN1cHBvcnQgLWZmaWxlLXByZWZpeC1tYXA9PG9sZD49PG5ldz4KKworU2ltaWxhciAtZmRlYnVnLXByZWZpeC1tYXAsIGFkZCBvcHRpb24gLWZmaWxlLXByZWZpeC1tYXAgdG8gbWFwIG9uZQorZGlyZWN0b3J5IG5hbWUgKG9sZCkgdG8gYW5vdGhlciAobmV3KSBpbiBfX0ZJTEVfXywgX19CQVNFX0ZJTEVfXyBhbmQKK19fYnVpbHRpbl9GSUxFICgpLgorCitodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD03MDI2OAorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmddCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBnY2MvYy1mYW1pbHkvYy1vcHRzLmMgICAgIHwgMTMgKysrKysrKworIGdjYy9jLWZhbWlseS9jLm9wdCAgICAgICAgfCAgNCArKysKKyBnY2MvZHdhcmYyb3V0LmMgICAgICAgICAgIHwgIDEgKworIGdjYy9naW1wbGlmeS5jICAgICAgICAgICAgfCAgMiArKworIGxpYmNwcC9NYWtlZmlsZS5pbiAgICAgICAgfCAxMCArKystLS0KKyBsaWJjcHAvZmlsZS1tYXAuYyAgICAgICAgIHwgOTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBsaWJjcHAvaW5jbHVkZS9maWxlLW1hcC5oIHwgMzAgKysrKysrKysrKysrKysrKworIGxpYmNwcC9tYWNyby5jICAgICAgICAgICAgfCAgMiArKworIDggZmlsZXMgY2hhbmdlZCwgMTQ5IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmNwcC9maWxlLW1hcC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmNwcC9pbmNsdWRlL2ZpbGUtbWFwLmgKKworZGlmZiAtLWdpdCBhL2djYy9jLWZhbWlseS9jLW9wdHMuYyBiL2djYy9jLWZhbWlseS9jLW9wdHMuYworaW5kZXggZWEwZTAxYjEwMWMuLmE3NDFjNzVhNzhmIDEwMDY0NAorLS0tIGEvZ2NjL2MtZmFtaWx5L2Mtb3B0cy5jCisrKysgYi9nY2MvYy1mYW1pbHkvYy1vcHRzLmMKK0BAIC0zOSw2ICszOSwxNCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICNpbmNsdWRlICJvcHRzLmgiCisgI2luY2x1ZGUgInBsdWdpbi5oIgkJLyogRm9yIFBMVUdJTl9JTkNMVURFX0ZJTEUgZXZlbnQuICAqLworICNpbmNsdWRlICJta2RlcHMuaCIKKysjaW5jbHVkZSAiZmlsZS1tYXAuaCIKKysjaW5jbHVkZSAiYy10YXJnZXQuaCIKKysjaW5jbHVkZSAidG0uaCIJCQkvKiBGb3IgQllURVNfQklHX0VORElBTiwKKysJCQkJICAgRE9MTEFSU19JTl9JREVOVElGSUVSUywKKysJCQkJICAgU1REQ18wX0lOX1NZU1RFTV9IRUFERVJTLAorKwkJCQkgICBUQVJHRVRfRkxUX0VWQUxfTUVUSE9EX05PTl9ERUZBVUxUIGFuZAorKwkJCQkgICBUQVJHRVRfT1BURi4gICovCisrI2luY2x1ZGUgInRtX3AuaCIJCS8qIEZvciBDX0NPTU1PTl9PVkVSUklERV9PUFRJT05TLiAgKi8KKyAjaW5jbHVkZSAiZHVtcGZpbGUuaCIKKyAKKyAjaWZuZGVmIERPTExBUlNfSU5fSURFTlRJRklFUlMKK0BAIC01MTcsNiArNTI1LDExIEBAIGNfY29tbW9uX2hhbmRsZV9vcHRpb24gKHNpemVfdCBzY29kZSwgY29uc3QgY2hhciAqYXJnLCBpbnQgdmFsdWUsCisgICAgICAgY3BwX29wdHMtPm5hcnJvd19jaGFyc2V0ID0gYXJnOworICAgICAgIGJyZWFrOworIAorKyAgICBjYXNlIE9QVF9mZmlsZV9wcmVmaXhfbWFwXzoKKysgICAgICBpZiAoYWRkX2ZpbGVfcHJlZml4X21hcCAoYXJnKSA8IDApCisrICAgICAgICBlcnJvciAoImludmFsaWQgYXJndW1lbnQgJXFzIHRvIC1mZmlsZS1wcmVmaXgtbWFwIiwgYXJnKTsKKysgICAgICBicmVhazsKKysKKyAgICAgY2FzZSBPUFRfZndpZGVfZXhlY19jaGFyc2V0XzoKKyAgICAgICBjcHBfb3B0cy0+d2lkZV9jaGFyc2V0ID0gYXJnOworICAgICAgIGJyZWFrOworZGlmZiAtLWdpdCBhL2djYy9jLWZhbWlseS9jLm9wdCBiL2djYy9jLWZhbWlseS9jLm9wdAoraW5kZXggYzRlZjc3OTYyODIuLjczMzMzZGZkNTdjIDEwMDY0NAorLS0tIGEvZ2NjL2MtZmFtaWx5L2Mub3B0CisrKysgYi9nY2MvYy1mYW1pbHkvYy5vcHQKK0BAIC0xMzcyLDYgKzEzNzIsMTAgQEAgZmV4ZWMtY2hhcnNldD0KKyBDIE9iakMgQysrIE9iakMrKyBKb2luZWQgUmVqZWN0TmVnYXRpdmUKKyAtZmV4ZWMtY2hhcnNldD08Y3NldD4JQ29udmVydCBhbGwgc3RyaW5ncyBhbmQgY2hhcmFjdGVyIGNvbnN0YW50cyB0byBjaGFyYWN0ZXIgc2V0IDxjc2V0Pi4KKyAKKytmZmlsZS1wcmVmaXgtbWFwPQorK0MgT2JqQyBDKysgT2JqQysrIEpvaW5lZCBSZWplY3ROZWdhdGl2ZQorKy1mZmlsZS1wcmVmaXgtbWFwPTxvbGQ9bmV3PglNYXAgb25lIGRpcmVjdG9yeSBuYW1lIHRvIGFub3RoZXIgaW4gX19GSUxFX18sIF9fQkFTRV9GSUxFX18gYW5kIF9fYnVpbHRpbl9GSUxFICgpCisrCisgZmV4dGVuZGVkLWlkZW50aWZpZXJzCisgQyBPYmpDIEMrKyBPYmpDKysKKyBQZXJtaXQgdW5pdmVyc2FsIGNoYXJhY3RlciBuYW1lcyAoXFx1IGFuZCBcXFUpIGluIGlkZW50aWZpZXJzLgorZGlmZiAtLWdpdCBhL2djYy9kd2FyZjJvdXQuYyBiL2djYy9kd2FyZjJvdXQuYworaW5kZXggOThjNTE1NzZlYzIuLjc2MmY2OWFlODhlIDEwMDY0NAorLS0tIGEvZ2NjL2R3YXJmMm91dC5jCisrKysgYi9nY2MvZHdhcmYyb3V0LmMKK0BAIC0yMzQyMSw2ICsyMzQyMSw3IEBAIGdlbl9wcm9kdWNlcl9zdHJpbmcgKHZvaWQpCisgICAgICAgY2FzZSBPUFRfZmx0cmFuc19vdXRwdXRfbGlzdF86CisgICAgICAgY2FzZSBPUFRfZnJlc29sdXRpb25fOgorICAgICAgIGNhc2UgT1BUX2ZkZWJ1Z19wcmVmaXhfbWFwXzoKKysgICAgICBjYXNlIE9QVF9mZmlsZV9wcmVmaXhfbWFwXzoKKyAJLyogSWdub3JlIHRoZXNlLiAgKi8KKyAJY29udGludWU7CisgICAgICAgZGVmYXVsdDoKK2RpZmYgLS1naXQgYS9nY2MvZ2ltcGxpZnkuYyBiL2djYy9naW1wbGlmeS5jCitpbmRleCBmZDI3ZWIxNTIzZi4uNTU0MmIzNzlmMjggMTAwNjQ0CistLS0gYS9nY2MvZ2ltcGxpZnkuYworKysrIGIvZ2NjL2dpbXBsaWZ5LmMKK0BAIC01OCw2ICs1OCw4IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgI2luY2x1ZGUgImdvbXAtY29uc3RhbnRzLmgiCisgI2luY2x1ZGUgInRyZWUtZHVtcC5oIgorICNpbmNsdWRlICJnaW1wbGUtd2Fsay5oIgorKyNpbmNsdWRlICJmaWxlLW1hcC5oIgorKworICNpbmNsdWRlICJsYW5naG9va3MtZGVmLmgiCS8qIEZJWE1FOiBmb3IgbGhkX3NldF9kZWNsX2Fzc2VtYmxlcl9uYW1lICovCisgI2luY2x1ZGUgImJ1aWx0aW5zLmgiCisgI2luY2x1ZGUgImFzYW4uaCIKK2RpZmYgLS1naXQgYS9saWJjcHAvTWFrZWZpbGUuaW4gYi9saWJjcHAvTWFrZWZpbGUuaW4KK2luZGV4IDBiZDM3ODdjMjVlLi5kM2I1Mjk1NmI1MiAxMDA2NDQKKy0tLSBhL2xpYmNwcC9NYWtlZmlsZS5pbgorKysrIGIvbGliY3BwL01ha2VmaWxlLmluCitAQCAtODQsMTIgKzg0LDEyIEBAIERFUE1PREUgPSAkKENYWERFUE1PREUpCisgCisgCisgbGliY3BwX2FfT0JKUyA9IGNoYXJzZXQubyBkaXJlY3RpdmVzLm8gZGlyZWN0aXZlcy1vbmx5Lm8gZXJyb3JzLm8gXAorLQlleHByLm8gZmlsZXMubyBpZGVudGlmaWVycy5vIGluaXQubyBsZXgubyBsaW5lLW1hcC5vIG1hY3JvLm8gXAorLQlta2RlcHMubyBwY2gubyBzeW10YWIubyB0cmFkaXRpb25hbC5vCisrCWV4cHIubyBmaWxlLW1hcC5vIGZpbGVzLm8gaWRlbnRpZmllcnMubyBpbml0Lm8gbGV4Lm8gbGluZS1tYXAubyBcCisrCW1hY3JvLm8gbWtkZXBzLm8gcGNoLm8gc3ltdGFiLm8gdHJhZGl0aW9uYWwubworIAorIGxpYmNwcF9hX1NPVVJDRVMgPSBjaGFyc2V0LmMgZGlyZWN0aXZlcy5jIGRpcmVjdGl2ZXMtb25seS5jIGVycm9ycy5jIFwKKy0JZXhwci5jIGZpbGVzLmMgaWRlbnRpZmllcnMuYyBpbml0LmMgbGV4LmMgbGluZS1tYXAuYyBtYWNyby5jIFwKKy0JbWtkZXBzLmMgcGNoLmMgc3ltdGFiLmMgdHJhZGl0aW9uYWwuYworKwlleHByLmMgZmlsZS1tYXAuYyBmaWxlcy5jIGlkZW50aWZpZXJzLmMgaW5pdC5jIGxleC5jIGxpbmUtbWFwLmMgXAorKwltYWNyby5jIG1rZGVwcy5jIHBjaC5jIHN5bXRhYi5jIHRyYWRpdGlvbmFsLmMKKyAKKyBhbGw6IGxpYmNwcC5hICQoVVNFRF9DQVRBTE9HUykKKyAKK0BAIC0yNjMsNyArMjYzLDcgQEAgcG8vJChQQUNLQUdFKS5wb3Q6ICQobGliY3BwX2FfU09VUkNFUykKKyAKKyBUQUdTX1NPVVJDRVMgPSAkKGxpYmNwcF9hX1NPVVJDRVMpIGludGVybmFsLmggdWNuaWQuaCBcCisgICAgIGluY2x1ZGUvbGluZS1tYXAuaCBpbmNsdWRlL3N5bXRhYi5oIGluY2x1ZGUvY3BwLWlkLWRhdGEuaCBcCistICAgIGluY2x1ZGUvY3BwbGliLmggaW5jbHVkZS9ta2RlcHMuaCBzeXN0ZW0uaAorKyAgICBpbmNsdWRlL2NwcGxpYi5oIGluY2x1ZGUvbWtkZXBzLmggc3lzdGVtLmggaW5jbHVkZS9maWxlLW1hcC5oCisgCisgVEFHUzogJChUQUdTX1NPVVJDRVMpCisgCWNkICQoc3JjZGlyKSAmJiBldGFncyAkKFRBR1NfU09VUkNFUykKK2RpZmYgLS1naXQgYS9saWJjcHAvZmlsZS1tYXAuYyBiL2xpYmNwcC9maWxlLW1hcC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLjE4MDM1ZWY2YTcyCistLS0gL2Rldi9udWxsCisrKysgYi9saWJjcHAvZmlsZS1tYXAuYworQEAgLTAsMCArMSw5MiBAQAorKy8qIE1hcCBvbmUgZGlyZWN0b3J5IG5hbWUgdG8gYW5vdGhlciBpbiBfX0ZJTEVfXywgX19CQVNFX0ZJTEVfXworKyAgIGFuZCBfX2J1aWx0aW5fRklMRSAoKS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKytUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKytsYXRlciB2ZXJzaW9uLgorKworK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKythbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKysKKysgSW4gb3RoZXIgd29yZHMsIHlvdSBhcmUgd2VsY29tZSB0byB1c2UsIHNoYXJlIGFuZCBpbXByb3ZlIHRoaXMgcHJvZ3JhbS4KKysgWW91IGFyZSBmb3JiaWRkZW4gdG8gZm9yYmlkIGFueW9uZSBlbHNlIHRvIHVzZSwgc2hhcmUgYW5kIGltcHJvdmUKKysgd2hhdCB5b3UgZ2l2ZSB0aGVtLiAgIEhlbHAgc3RhbXAgb3V0IHNvZnR3YXJlLWhvYXJkaW5nISAgKi8KKysKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrI2luY2x1ZGUgInN5c3RlbS5oIgorKyNpbmNsdWRlICJmaWxlLW1hcC5oIgorKworKy8qIFN0cnVjdHVyZSByZWNvcmRpbmcgdGhlIG1hcHBpbmcgZnJvbSBzb3VyY2UgZmlsZSBhbmQgZGlyZWN0b3J5CisrICAgbmFtZXMgYXQgY29tcGlsZSB0aW1lIHRvIF9fRklMRV9fICovCisrdHlwZWRlZiBzdHJ1Y3QgZmlsZV9wcmVmaXhfbWFwCisreworKyAgY29uc3QgY2hhciAqb2xkX3ByZWZpeDsKKysgIGNvbnN0IGNoYXIgKm5ld19wcmVmaXg7CisrICBzaXplX3Qgb2xkX2xlbjsKKysgIHNpemVfdCBuZXdfbGVuOworKyAgc3RydWN0IGZpbGVfcHJlZml4X21hcCAqbmV4dDsKKyt9IGZpbGVfcHJlZml4X21hcDsKKysKKysvKiBMaW5rZWQgbGlzdCBvZiBzdWNoIHN0cnVjdHVyZXMuICAqLworK3N0YXRpYyBmaWxlX3ByZWZpeF9tYXAgKmZpbGVfcHJlZml4X21hcHM7CisrCisrLyogUmVjb3JkIHByZWZpeCBtYXBwaW5nIG9mIF9fRklMRV9fLiAgQVJHIGlzIHRoZSBhcmd1bWVudCB0bworKyAgIC1mZmlsZS1wcmVmaXgtbWFwIGFuZCBtdXN0IGJlIG9mIHRoZSBmb3JtIE9MRD1ORVcuICAqLworK2ludAorK2FkZF9maWxlX3ByZWZpeF9tYXAgKGNvbnN0IGNoYXIgKmFyZykKKyt7CisrICBmaWxlX3ByZWZpeF9tYXAgKm1hcDsKKysgIGNvbnN0IGNoYXIgKnA7CisrCisrICBwID0gc3RyY2hyIChhcmcsICc9Jyk7CisrICBpZiAoIXApCisrICB7CisrICAgICAgZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIGFyZ3VtZW50ICVxcyB0byAtZmZpbGUtcHJlZml4LW1hcCIsIGFyZyk7CisrICAgICAgcmV0dXJuIC0xOworKyAgfQorKyAgbWFwID0gWE5FVyAoZmlsZV9wcmVmaXhfbWFwKTsKKysgIG1hcC0+b2xkX3ByZWZpeCA9IHhzdHJuZHVwIChhcmcsIHAgLSBhcmcpOworKyAgbWFwLT5vbGRfbGVuID0gcCAtIGFyZzsKKysgIHArKzsKKysgIG1hcC0+bmV3X3ByZWZpeCA9IHhzdHJkdXAgKHApOworKyAgbWFwLT5uZXdfbGVuID0gc3RybGVuIChwKTsKKysgIG1hcC0+bmV4dCA9IGZpbGVfcHJlZml4X21hcHM7CisrICBmaWxlX3ByZWZpeF9tYXBzID0gbWFwOworKworKyAgcmV0dXJuIDA7CisrfQorKworKy8qIFBlcmZvcm0gdXNlci1zcGVjaWZpZWQgbWFwcGluZyBvZiBfX0ZJTEVfXyBwcmVmaXhlcy4gIFJldHVybgorKyAgIHRoZSBuZXcgbmFtZSBjb3JyZXNwb25kaW5nIHRvIGZpbGVuYW1lLiAgKi8KKysKKytjb25zdCBjaGFyICoKKytyZW1hcF9maWxlX2ZpbGVuYW1lIChjb25zdCBjaGFyICpmaWxlbmFtZSkKKyt7CisrICBmaWxlX3ByZWZpeF9tYXAgKm1hcDsKKysgIGNoYXIgKnM7CisrICBjb25zdCBjaGFyICpuYW1lOworKyAgc2l6ZV90IG5hbWVfbGVuOworKworKyAgZm9yIChtYXAgPSBmaWxlX3ByZWZpeF9tYXBzOyBtYXA7IG1hcCA9IG1hcC0+bmV4dCkKKysgICAgaWYgKGZpbGVuYW1lX25jbXAgKGZpbGVuYW1lLCBtYXAtPm9sZF9wcmVmaXgsIG1hcC0+b2xkX2xlbikgPT0gMCkKKysgICAgICBicmVhazsKKysgIGlmICghbWFwKQorKyAgICByZXR1cm4gZmlsZW5hbWU7CisrICBuYW1lID0gZmlsZW5hbWUgKyBtYXAtPm9sZF9sZW47CisrICBuYW1lX2xlbiA9IHN0cmxlbiAobmFtZSkgKyAxOworKyAgcyA9IChjaGFyICopIGFsbG9jYSAobmFtZV9sZW4gKyBtYXAtPm5ld19sZW4pOworKyAgbWVtY3B5IChzLCBtYXAtPm5ld19wcmVmaXgsIG1hcC0+bmV3X2xlbik7CisrICBtZW1jcHkgKHMgKyBtYXAtPm5ld19sZW4sIG5hbWUsIG5hbWVfbGVuKTsKKysKKysgIHJldHVybiB4c3RyZHVwIChzKTsKKyt9CisrCisrCitkaWZmIC0tZ2l0IGEvbGliY3BwL2luY2x1ZGUvZmlsZS1tYXAuaCBiL2xpYmNwcC9pbmNsdWRlL2ZpbGUtbWFwLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uODc1MDMxNTJkMjcKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYmNwcC9pbmNsdWRlL2ZpbGUtbWFwLmgKK0BAIC0wLDAgKzEsMzAgQEAKKysvKiBNYXAgb25lIGRpcmVjdG9yeSBuYW1lIHRvIGFub3RoZXIgaW4gX19GSUxFX18sIF9fQkFTRV9GSUxFX18KKysgICBhbmQgX19idWlsdGluX0ZJTEUgKCkuCisrICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyt1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKytGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisrbGF0ZXIgdmVyc2lvbi4KKysKKytUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKytidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKytHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKys8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrCisrIEluIG90aGVyIHdvcmRzLCB5b3UgYXJlIHdlbGNvbWUgdG8gdXNlLCBzaGFyZSBhbmQgaW1wcm92ZSB0aGlzIHByb2dyYW0uCisrIFlvdSBhcmUgZm9yYmlkZGVuIHRvIGZvcmJpZCBhbnlvbmUgZWxzZSB0byB1c2UsIHNoYXJlIGFuZCBpbXByb3ZlCisrIHdoYXQgeW91IGdpdmUgdGhlbS4gICBIZWxwIHN0YW1wIG91dCBzb2Z0d2FyZS1ob2FyZGluZyEgICovCisrCisrI2lmbmRlZiBMSUJDUFBfRklMRV9NQVBfSAorKyNkZWZpbmUgTElCQ1BQX0ZJTEVfTUFQX0gKKysKKytjb25zdCBjaGFyICogcmVtYXBfZmlsZV9maWxlbmFtZSAoY29uc3QgY2hhciAqZmlsZW5hbWUpOworKworK2ludCBhZGRfZmlsZV9wcmVmaXhfbWFwIChjb25zdCBjaGFyICphcmcpOworKworKyNlbmRpZiAvKiAhTElCQ1BQX0ZJTEVfTUFQX0ggICovCitkaWZmIC0tZ2l0IGEvbGliY3BwL21hY3JvLmMgYi9saWJjcHAvbWFjcm8uYworaW5kZXggZGUxOGMyMjEwY2YuLjI3NDhjNzBkNTIwIDEwMDY0NAorLS0tIGEvbGliY3BwL21hY3JvLmMKKysrKyBiL2xpYmNwcC9tYWNyby5jCitAQCAtMjYsNiArMjYsNyBAQCBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSAiY3BwbGliLmgiCisgI2luY2x1ZGUgImludGVybmFsLmgiCisrI2luY2x1ZGUgImZpbGUtbWFwLmgiCisgCisgdHlwZWRlZiBzdHJ1Y3QgbWFjcm9fYXJnIG1hY3JvX2FyZzsKKyAvKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSB0b2tlbnMgb2YgYSBtYWNybyBhcmd1bWVudC4gIFRoZXNlCitAQCAtMzAxLDYgKzMwMiw3IEBAIF9jcHBfYnVpbHRpbl9tYWNyb190ZXh0IChjcHBfcmVhZGVyICpwZmlsZSwgY3BwX2hhc2hub2RlICpub2RlLAorIAkgICAgaWYgKCFuYW1lKQorIAkgICAgICBhYm9ydCAoKTsKKyAJICB9CisrCW5hbWUgPSByZW1hcF9maWxlX2ZpbGVuYW1lIChuYW1lKTsKKyAJbGVuID0gc3RybGVuIChuYW1lKTsKKyAJYnVmID0gX2NwcF91bmFsaWduZWRfYWxsb2MgKHBmaWxlLCBsZW4gKiAyICsgMyk7CisgCXJlc3VsdCA9IGJ1ZjsKKy0tIAorMi4xMi4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDA0Mi1SZXVzZS1mZGVidWctcHJlZml4LW1hcC10by1yZXBsYWNlLWZmaWxlLXByZWZpeC1tYXAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwNDItUmV1c2UtZmRlYnVnLXByZWZpeC1tYXAtdG8tcmVwbGFjZS1mZmlsZS1wcmVmaXgtbWFwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNDcxNjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwNDItUmV1c2UtZmRlYnVnLXByZWZpeC1tYXAtdG8tcmVwbGFjZS1mZmlsZS1wcmVmaXgtbWFwLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0Zyb20gZGRkZGM3MzM1NTM5ZmI4YTZkMzBiZWJhMjE3ODE3NjJkZjE1OTE4NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMTYgTWFyIDIwMTYgMDU6Mzk6NTkgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSCA0Mi80N10gUmV1c2UgLWZkZWJ1Zy1wcmVmaXgtbWFwIHRvIHJlcGxhY2UgLWZmaWxlLXByZWZpeC1tYXAKKworVGhlIG9lLWNvcmUgbWF5IHVzZSBleHRlcm5hbCB0b29sY2hhaW4gdG8gY29tcGlsZSwKK3doaWNoIG1heSBub3Qgc3VwcG9ydCAtZmZpbGUtcHJlZml4LW1hcC4KKworU2luY2Ugd2UgdXNlIC1mZGVidWctcHJlZml4LW1hcCB0byBkbyB0aGUgc2FtZSB0aGluZywKK3NvIHdlIGNvdWxkIHJldXNlIGl0IHRvIHJlcGxhY2UgLWZmaWxlLXByZWZpeC1tYXAuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZVtvZS1jb3JlIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBnY2Mvb3B0cy1nbG9iYWwuYyB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2djYy9vcHRzLWdsb2JhbC5jIGIvZ2NjL29wdHMtZ2xvYmFsLmMKK2luZGV4IDUwYmFkNzdjMzQ3Li4zMmIxZDI4NjcyMSAxMDA2NDQKKy0tLSBhL2djYy9vcHRzLWdsb2JhbC5jCisrKysgYi9nY2Mvb3B0cy1nbG9iYWwuYworQEAgLTMxLDYgKzMxLDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAjaW5jbHVkZSAibGFuZ2hvb2tzLmgiCisgI2luY2x1ZGUgImRiZ2NudC5oIgorICNpbmNsdWRlICJkZWJ1Zy5oIgorKyNpbmNsdWRlICJmaWxlLW1hcC5oIgorICNpbmNsdWRlICJvdXRwdXQuaCIKKyAjaW5jbHVkZSAicGx1Z2luLmgiCisgI2luY2x1ZGUgInRvcGxldi5oIgorQEAgLTM1Nyw2ICszNTgsOSBAQCBoYW5kbGVfY29tbW9uX2RlZmVycmVkX29wdGlvbnMgKHZvaWQpCisgCisgCWNhc2UgT1BUX2ZkZWJ1Z19wcmVmaXhfbWFwXzoKKyAJICBhZGRfZGVidWdfcHJlZml4X21hcCAob3B0LT5hcmcpOworKworKwkgIC8qIFJldXNlIC1mZGVidWctcHJlZml4LW1hcCB0byByZXBsYWNlIC1mZmlsZS1wcmVmaXgtbWFwICovCisrCSAgYWRkX2ZpbGVfcHJlZml4X21hcCAob3B0LT5hcmcpOworIAkgIGJyZWFrOworIAorIAljYXNlIE9QVF9mZHVtcF86CistLSAKKzIuMTIuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwNDMtZ2NjLWZpbmFsLmMtZmRlYnVnLXByZWZpeC1tYXAtc3VwcG9ydC10by1yZW1hcC1zb3VyYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDA0My1nY2MtZmluYWwuYy1mZGVidWctcHJlZml4LW1hcC1zdXBwb3J0LXRvLXJlbWFwLXNvdXJjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YTVjODYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwNDMtZ2NjLWZpbmFsLmMtZmRlYnVnLXByZWZpeC1tYXAtc3VwcG9ydC10by1yZW1hcC1zb3VyYy5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIDViYzk3YmUzODg0ODVhNWY4ZGQ4NWRiMzQzNzJhMTI5OWJmZmQyNjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitEYXRlOiBUaHUsIDI0IE1hciAyMDE2IDExOjIzOjE0IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0ggNDMvNDddIGdjYy9maW5hbC5jOiAtZmRlYnVnLXByZWZpeC1tYXAgc3VwcG9ydCB0byByZW1hcAorIHNvdXJjZXMgd2l0aCByZWxhdGl2ZSBwYXRoCisKK1BSIG90aGVyLzcwNDI4CisqIGZpbmFsLmMgKHJlbWFwX2RlYnVnX2ZpbGVuYW1lKTogVXNlIGxyZWFscGF0aCB0byB0cmFuc2xhdGUKK3JlbGF0aXZlIHBhdGggYmVmb3JlIHJlbWFwcGluZworCitodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD03MDQyOAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2djYy1wYXRjaGVzQGdjYy5nbnUub3JnXQorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBnY2MvZmluYWwuYyB8IDE1ICsrKysrKysrKysrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2ZpbmFsLmMgYi9nY2MvZmluYWwuYworaW5kZXggODIwMTYyYjJkMjguLmQ3NGNiOTAxYWJkIDEwMDY0NAorLS0tIGEvZ2NjL2ZpbmFsLmMKKysrKyBiL2djYy9maW5hbC5jCitAQCAtMTU1OSwxNiArMTU1OSwyNSBAQCByZW1hcF9kZWJ1Z19maWxlbmFtZSAoY29uc3QgY2hhciAqZmlsZW5hbWUpCisgICBjb25zdCBjaGFyICpuYW1lOworICAgc2l6ZV90IG5hbWVfbGVuOworIAorKyAgLyogU3VwcG9ydCB0byByZW1hcCBmaWxlbmFtZSB3aXRoIHJlbGF0aXZlIHBhdGggICovCisrICBjaGFyICpyZWFscGF0aCA9IGxyZWFscGF0aCAoZmlsZW5hbWUpOworKyAgaWYgKHJlYWxwYXRoID09IE5VTEwpCisrICAgIHJldHVybiBmaWxlbmFtZTsKKysKKyAgIGZvciAobWFwID0gZGVidWdfcHJlZml4X21hcHM7IG1hcDsgbWFwID0gbWFwLT5uZXh0KQorLSAgICBpZiAoZmlsZW5hbWVfbmNtcCAoZmlsZW5hbWUsIG1hcC0+b2xkX3ByZWZpeCwgbWFwLT5vbGRfbGVuKSA9PSAwKQorKyAgICBpZiAoZmlsZW5hbWVfbmNtcCAocmVhbHBhdGgsIG1hcC0+b2xkX3ByZWZpeCwgbWFwLT5vbGRfbGVuKSA9PSAwKQorICAgICAgIGJyZWFrOworICAgaWYgKCFtYXApCistICAgIHJldHVybiBmaWxlbmFtZTsKKy0gIG5hbWUgPSBmaWxlbmFtZSArIG1hcC0+b2xkX2xlbjsKKysgICAgeworKyAgICAgIGZyZWUgKHJlYWxwYXRoKTsKKysgICAgICByZXR1cm4gZmlsZW5hbWU7CisrICAgIH0KKysgIG5hbWUgPSByZWFscGF0aCArIG1hcC0+b2xkX2xlbjsKKyAgIG5hbWVfbGVuID0gc3RybGVuIChuYW1lKSArIDE7CisgICBzID0gKGNoYXIgKikgYWxsb2NhIChuYW1lX2xlbiArIG1hcC0+bmV3X2xlbik7CisgICBtZW1jcHkgKHMsIG1hcC0+bmV3X3ByZWZpeCwgbWFwLT5uZXdfbGVuKTsKKyAgIG1lbWNweSAocyArIG1hcC0+bmV3X2xlbiwgbmFtZSwgbmFtZV9sZW4pOworKyAgZnJlZSAocmVhbHBhdGgpOworICAgcmV0dXJuIGdnY19zdHJkdXAgKHMpOworIH0KKyAMCistLSAKKzIuMTIuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwNDQtbGliZ2NjLUFkZC1rbm9iLXRvLXVzZS1sZGJsLTEyOC1vbi1wcGMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwNDQtbGliZ2NjLUFkZC1rbm9iLXRvLXVzZS1sZGJsLTEyOC1vbi1wcGMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM5YWY5YgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDA0NC1saWJnY2MtQWRkLWtub2ItdG8tdXNlLWxkYmwtMTI4LW9uLXBwYy5wYXRjaApAQCAtMCwwICsxLDEyNCBAQAorRnJvbSA4NDdhZWM3NjQ1NDA2MzZlYzY1NGZkN2EwMTJlMjcxYWZhOGQ0ZTBmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgQXByIDIwMTYgMjA6MDM6MjggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCA0NC80N10gbGliZ2NjOiBBZGQga25vYiB0byB1c2UgbGRibC0xMjggb24gcHBjCisKK211c2wgZG9lcyBub3Qgc3VwcG9ydCBsZGJsIDEyOCBzbyB3ZSBjYW4gbm90IGFzc3VtZQordGhhdCBsaW51eCBhcyBhIHdob2xlIHN1cHBvcnRzIGxkYmwtMTI4IGJpdHMsIGluc3RlYWQKK2FjdCB1cG9uIGNvbmZpZ3VyZSBvcHRpb24gcGFzc2VkIHRvIGdjYyBhbmQgYXNzdW1lIG5vCitvbiBtdXNsIGFuZCB5ZXMgb3RoZXJ3aXNlIGlmIG5vIG9wdGlvbiBpcyBwYXNzZWQgc2luY2UKK2RlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIGFzc3VtZSBsZGJsMTI4IGl0IGRvZXMgbm90CitjaGFuZ2UgdGhlIGRlZmF1bHRzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYmdjYy9NYWtlZmlsZS5pbiAgICAgICAgICAgfCAgMSArCisgbGliZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eCB8ICA1ICsrKystCisgbGliZ2NjL2NvbmZpZ3VyZSAgICAgICAgICAgICB8IDE4ICsrKysrKysrKysrKysrKysrKworIGxpYmdjYy9jb25maWd1cmUuYWMgICAgICAgICAgfCAxMiArKysrKysrKysrKysKKyA0IGZpbGVzIGNoYW5nZWQsIDM1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKyBtb2RlIGNoYW5nZSAxMDA2NDQgPT4gMTAwNzU1IGxpYmdjYy9jb25maWd1cmUKKworZGlmZiAtLWdpdCBhL2xpYmdjYy9NYWtlZmlsZS5pbiBiL2xpYmdjYy9NYWtlZmlsZS5pbgoraW5kZXggYTFhMzkyZGU4OGQuLjJmZTY4ODlhMzQyIDEwMDY0NAorLS0tIGEvbGliZ2NjL01ha2VmaWxlLmluCisrKysgYi9saWJnY2MvTWFrZWZpbGUuaW4KK0BAIC00OCw2ICs0OCw3IEBAIHVud2luZF9oZWFkZXIgPSBAdW53aW5kX2hlYWRlckAKKyBtZF91bndpbmRfaGVhZGVyID0gQG1kX3Vud2luZF9oZWFkZXJACisgc2ZwX21hY2hpbmVfaGVhZGVyID0gQHNmcF9tYWNoaW5lX2hlYWRlckAKKyB0aHJlYWRfaGVhZGVyID0gQHRocmVhZF9oZWFkZXJACisrd2l0aF9sZGJsMTI4ID0gQHdpdGhfbGRibDEyOEAKKyAKKyBob3N0X25vbmNhbm9uaWNhbCA9IEBob3N0X25vbmNhbm9uaWNhbEAKKyByZWFsX2hvc3Rfbm9uY2Fub25pY2FsID0gQHJlYWxfaG9zdF9ub25jYW5vbmljYWxACitkaWZmIC0tZ2l0IGEvbGliZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eCBiL2xpYmdjYy9jb25maWcvcnM2MDAwL3QtbGludXgKK2luZGV4IDRmNmQ0YzRhNGQyLi5jNTBkZDk0YTJkYSAxMDA2NDQKKy0tLSBhL2xpYmdjYy9jb25maWcvcnM2MDAwL3QtbGludXgKKysrKyBiL2xpYmdjYy9jb25maWcvcnM2MDAwL3QtbGludXgKK0BAIC0xLDMgKzEsNiBAQAorIFNITElCX01BUEZJTEVTICs9ICQoc3JjZGlyKS9jb25maWcvcnM2MDAwL2xpYmdjYy1nbGliYy52ZXIKKyAKKy1IT1NUX0xJQkdDQzJfQ0ZMQUdTICs9IC1tbG9uZy1kb3VibGUtMTI4IC1tbm8tbWluaW1hbC10b2MKKytpZmVxICgkKHdpdGhfbGRibDEyOCkseWVzKQorK0hPU1RfTElCR0NDMl9DRkxBR1MgKz0gLW1sb25nLWRvdWJsZS0xMjgKKytlbmRpZgorK0hPU1RfTElCR0NDMl9DRkxBR1MgKz0gLW1uby1taW5pbWFsLXRvYworZGlmZiAtLWdpdCBhL2xpYmdjYy9jb25maWd1cmUgYi9saWJnY2MvY29uZmlndXJlCitvbGQgbW9kZSAxMDA2NDQKK25ldyBtb2RlIDEwMDc1NQoraW5kZXggNDVjNDU5Nzg4YzMuLmUyZDE5YjE0NGI4CistLS0gYS9saWJnY2MvY29uZmlndXJlCisrKysgYi9saWJnY2MvY29uZmlndXJlCitAQCAtNjE4LDYgKzYxOCw3IEBAIGJ1aWxkX3ZlbmRvcgorIGJ1aWxkX2NwdQorIGJ1aWxkCisgd2l0aF9haXhfc29uYW1lCisrd2l0aF9sZGJsMTI4CisgZW5hYmxlX3Z0YWJsZV92ZXJpZnkKKyBlbmFibGVfc2hhcmVkCisgbGliZ2NjX3RvcGRpcgorQEAgLTY2Nyw2ICs2NjgsNyBAQCB3aXRoX2Nyb3NzX2hvc3QKKyB3aXRoX2xkCisgZW5hYmxlX3NoYXJlZAorIGVuYWJsZV92dGFibGVfdmVyaWZ5Cisrd2l0aF9sb25nX2RvdWJsZV8xMjgKKyB3aXRoX2FpeF9zb25hbWUKKyBlbmFibGVfdmVyc2lvbl9zcGVjaWZpY19ydW50aW1lX2xpYnMKKyB3aXRoX3NsaWJkaXIKK0BAIC0xMzI0LDYgKzEzMjYsNyBAQCBPcHRpb25hbCBQYWNrYWdlczoKKyAgIC0td2l0aC10YXJnZXQtc3ViZGlyPVNVQkRJUiAgICAgIENvbmZpZ3VyaW5nIGluIGEgc3ViZGlyZWN0b3J5IGZvciB0YXJnZXQKKyAgIC0td2l0aC1jcm9zcy1ob3N0PUhPU1QgICAgICAgICAgIENvbmZpZ3VyaW5nIHdpdGggYSBjcm9zcyBjb21waWxlcgorICAgLS13aXRoLWxkICAgICAgICAgICAgICAgYXJyYW5nZSB0byB1c2UgdGhlIHNwZWNpZmllZCBsZCAoZnVsbCBwYXRobmFtZSkKKysgIC0td2l0aC1sb25nLWRvdWJsZS0xMjggIHVzZSAxMjgtYml0IGxvbmcgZG91YmxlIGJ5IGRlZmF1bHQKKyAgIC0td2l0aC1haXgtc29uYW1lPWFpeHxzdnI0fGJvdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgKGFrYSAiU09OQU1FIikgdmFyaWFudCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZSBvbiBBSVgKK0BAIC0yMjA4LDYgKzIyMTEsMjEgQEAgZmkKKyAKKyAKKyAKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxvbmctZG91YmxlLTEyOCB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHt3aXRoX2xvbmdfZG91YmxlXzEyOCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICB3aXRodmFsPSR3aXRoX2xvbmdfZG91YmxlXzEyODsgd2l0aF9sZGJsMTI4PSIkd2l0aF9sb25nX2RvdWJsZV8xMjgiCisrZWxzZQorKyAgY2FzZSAiJHtob3N0fSIgaW4KKysgcG93ZXIqLSotbXVzbCopCisrICAgd2l0aF9sZGJsMTI4PSJubyI7OworKyAqKSB3aXRoX2xkYmwxMjg9InllcyI7OworKyBlc2FjCisrCisrZmkKKysKKysKKysKKysKKyAjIENoZWNrIHdoZXRoZXIgLS13aXRoLWFpeC1zb25hbWUgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7d2l0aF9haXhfc29uYW1lK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgIHdpdGh2YWw9JHdpdGhfYWl4X3NvbmFtZTsgY2FzZSAiJHtob3N0fToke2VuYWJsZV9zaGFyZWR9IiBpbgorZGlmZiAtLWdpdCBhL2xpYmdjYy9jb25maWd1cmUuYWMgYi9saWJnY2MvY29uZmlndXJlLmFjCitpbmRleCBhZjE1MTQ3MzcwOS4uZGFkYTUyNDE2ZGEgMTAwNjQ0CistLS0gYS9saWJnY2MvY29uZmlndXJlLmFjCisrKysgYi9saWJnY2MvY29uZmlndXJlLmFjCitAQCAtNzcsNiArNzcsMTggQEAgQUNfQVJHX0VOQUJMRSh2dGFibGUtdmVyaWZ5LAorIFtlbmFibGVfdnRhYmxlX3ZlcmlmeT1ub10pCisgQUNfU1VCU1QoZW5hYmxlX3Z0YWJsZV92ZXJpZnkpCisgCisrQUNfQVJHX1dJVEgobG9uZy1kb3VibGUtMTI4LAorK1tBU19IRUxQX1NUUklORyhbLS13aXRoLWxvbmctZG91YmxlLTEyOF0sCisrICAgIFt1c2UgMTI4LWJpdCBsb25nIGRvdWJsZSBieSBkZWZhdWx0XSldLAorKyAgICAgIHdpdGhfbGRibDEyOD0iJHdpdGhfbG9uZ19kb3VibGVfMTI4IiwKKytbY2FzZSAiJHtob3N0fSIgaW4KKysgcG93ZXIqLSotbXVzbCopCisrICAgd2l0aF9sZGJsMTI4PSJubyI7OworKyAqKSB3aXRoX2xkYmwxMjg9InllcyI7OworKyBlc2FjCisrXSkKKytBQ19TVUJTVCh3aXRoX2xkYmwxMjgpCisrCisgQUNfQVJHX1dJVEgoYWl4LXNvbmFtZSwKKyBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1haXgtc29uYW1lPWFpeHxzdnI0fGJvdGhdLAorICAgICBbc2hhcmVkIGxpYnJhcnkgdmVyc2lvbmluZyAoYWthICJTT05BTUUiKSB2YXJpYW50IHRvIHByb3ZpZGUgb24gQUlYXSldLAorLS0gCisyLjEyLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDQ1LUxpbmstbGliZ2NjLXVzaW5nLUxERkxBR1Mtbm90LWp1c3QtU0hMSUJfTERGTEFHUy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDA0NS1MaW5rLWxpYmdjYy11c2luZy1MREZMQUdTLW5vdC1qdXN0LVNITElCX0xERkxBR1MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FhMDM4YwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDA0NS1MaW5rLWxpYmdjYy11c2luZy1MREZMQUdTLW5vdC1qdXN0LVNITElCX0xERkxBR1MucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSA5MmJlYjg4M2FiNTdhMjNhMzViYTc2YzQ5NmJjMWY0Y2FiYjE2OTBlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgNCBNYXkgMjAxNiAyMToxMTozNCAtMDcwMAorU3ViamVjdDogW1BBVENIIDQ1LzQ3XSBMaW5rIGxpYmdjYyB1c2luZyBMREZMQUdTLCBub3QganVzdCBTSExJQl9MREZMQUdTCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYmdjYy9jb25maWcvdC1zbGliZ2NjIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliZ2NjL2NvbmZpZy90LXNsaWJnY2MgYi9saWJnY2MvY29uZmlnL3Qtc2xpYmdjYworaW5kZXggNzZiZTc3MTA5NjAuLmExZWUyZWUyNmVkIDEwMDY0NAorLS0tIGEvbGliZ2NjL2NvbmZpZy90LXNsaWJnY2MKKysrKyBiL2xpYmdjYy9jb25maWcvdC1zbGliZ2NjCitAQCAtMzIsNyArMzIsNyBAQCBTSExJQl9JTlNUQUxMX1NPTElOSyA9ICQoTE5fUykgJChTSExJQl9TT05BTUUpIFwKKyAJJChERVNURElSKSQoc2xpYmRpcikkKFNITElCX1NMSUJESVJfUVVBTCkvJChTSExJQl9TT0xJTkspCisgCisgU0hMSUJfTElOSyA9ICQoQ0MpICQoTElCR0NDMl9DRkxBR1MpIC1zaGFyZWQgLW5vZGVmYXVsdGxpYnMgXAorLQkkKFNITElCX0xERkxBR1MpIFwKKysJJChMREZMQUdTKSAkKFNITElCX0xERkxBR1MpIFwKKyAJLW8gJChTSExJQl9ESVIpLyQoU0hMSUJfU09OQU1FKS50bXAgQG11bHRpbGliX2ZsYWdzQCBcCisgCSQoU0hMSUJfT0JKUykgJChTSExJQl9MQykgJiYgXAorIAlybSAtZiAkKFNITElCX0RJUikvJChTSExJQl9TT0xJTkspICYmIFwKKy0tIAorMi4xMi4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDA0Ny1zeW5jLWdjYy1zdGRkZWYuaC13aXRoLW11c2wucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwNDctc3luYy1nY2Mtc3RkZGVmLmgtd2l0aC1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZDIyZjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwNDctc3luYy1nY2Mtc3RkZGVmLmgtd2l0aC1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsOTEgQEAKK0Zyb20gOWI5NTFjOGY2YjBhYWZmN2MxNmRjNGRiNzJiNWU1NmVjNzM4MTBiYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDMgRmViIDIwMTcgMTI6NTY6MDAgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSCA0Ny80N10gc3luYyBnY2Mgc3RkZGVmLmggd2l0aCBtdXNsCisKK211c2wgZGVmaW5lcyBwdHJkaWZmX3Qgc2l6ZV90IGFuZCB3Y2hhcl90CitzbyBkb250IGRlZmluZSB0aGVtIGhlcmUgaWYgbXVzbCBpcyBkZWZpbmluaW5nIHRoZW0KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1TcGVjaWZpY10KKworIGdjYy9naW5jbHVkZS9zdGRkZWYuaCB8IDkgKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2dpbmNsdWRlL3N0ZGRlZi5oIGIvZ2NjL2dpbmNsdWRlL3N0ZGRlZi5oCitpbmRleCA4NzJmNDUxY2FjOS4uN2U5MDkzODM4N2MgMTAwNjQ0CistLS0gYS9nY2MvZ2luY2x1ZGUvc3RkZGVmLmgKKysrKyBiL2djYy9naW5jbHVkZS9zdGRkZWYuaAorQEAgLTEzNCw2ICsxMzQsNyBAQCBfVFlQRV93Y2hhcl90OworICNpZm5kZWYgX19faW50X3B0cmRpZmZfdF9oCisgI2lmbmRlZiBfR0NDX1BUUkRJRkZfVAorICNpZm5kZWYgX1BUUkRJRkZfVF9ERUNMQVJFRCAvKiBEcmFnb25GbHkgKi8KKysjaWZuZGVmIF9fREVGSU5FRF9wdHJkaWZmX3QgLyogbXVzbCAqLworICNkZWZpbmUgX1BUUkRJRkZfVAorICNkZWZpbmUgX1RfUFRSRElGRl8KKyAjZGVmaW5lIF9UX1BUUkRJRkYKK0BAIC0xNDMsMTAgKzE0NCwxMiBAQCBfVFlQRV93Y2hhcl90OworICNkZWZpbmUgX19faW50X3B0cmRpZmZfdF9oCisgI2RlZmluZSBfR0NDX1BUUkRJRkZfVAorICNkZWZpbmUgX1BUUkRJRkZfVF9ERUNMQVJFRAorKyNkZWZpbmUgX19ERUZJTkVEX3B0cmRpZmZfdCAvKiBtdXNsICovCisgI2lmbmRlZiBfX1BUUkRJRkZfVFlQRV9fCisgI2RlZmluZSBfX1BUUkRJRkZfVFlQRV9fIGxvbmcgaW50CisgI2VuZGlmCisgdHlwZWRlZiBfX1BUUkRJRkZfVFlQRV9fIHB0cmRpZmZfdDsKKysjZW5kaWYgLyogX19ERUZJTkVEX3B0cmRpZmZfdCAqLworICNlbmRpZiAvKiBfUFRSRElGRl9UX0RFQ0xBUkVEICovCisgI2VuZGlmIC8qIF9HQ0NfUFRSRElGRl9UICovCisgI2VuZGlmIC8qIF9fX2ludF9wdHJkaWZmX3RfaCAqLworQEAgLTE4NCw2ICsxODcsNyBAQCB0eXBlZGVmIF9fUFRSRElGRl9UWVBFX18gcHRyZGlmZl90OworICNpZm5kZWYgX0dDQ19TSVpFX1QKKyAjaWZuZGVmIF9TSVpFVF8KKyAjaWZuZGVmIF9fc2l6ZV90CisrI2lmbmRlZiBfX0RFRklORURfc2l6ZV90IC8qIG11c2wgKi8KKyAjZGVmaW5lIF9fc2l6ZV90X18JLyogQmVPUyAqLworICNkZWZpbmUgX19TSVpFX1RfXwkvKiBDcmF5IFVuaWNvcy9NayAqLworICNkZWZpbmUgX1NJWkVfVAorQEAgLTIwMCw2ICsyMDQsNyBAQCB0eXBlZGVmIF9fUFRSRElGRl9UWVBFX18gcHRyZGlmZl90OworICNkZWZpbmUgX19faW50X3NpemVfdF9oCisgI2RlZmluZSBfR0NDX1NJWkVfVAorICNkZWZpbmUgX1NJWkVUXworKyNkZWZpbmUgX19ERUZJTkVEX3NpemVfdCAvKiBtdXNsICovCisgI2lmIChkZWZpbmVkIChfX0ZyZWVCU0RfXykgJiYgKF9fRnJlZUJTRF9fID49IDUpKSBcCisgICB8fCBkZWZpbmVkKF9fRHJhZ29uRmx5X18pIFwKKyAgIHx8IGRlZmluZWQoX19GcmVlQlNEX2tlcm5lbF9fKQorQEAgLTIzNSw2ICsyNDAsNyBAQCB0eXBlZGVmIGxvbmcgc3NpemVfdDsKKyAjZW5kaWYgLyogX1NJWkVfVCAqLworICNlbmRpZiAvKiBfX1NJWkVfVF9fICovCisgI2VuZGlmIC8qIF9fc2l6ZV90X18gKi8KKysjZW5kaWYgLyogX19ERUZJTkVEX3NpemVfdCAqLworICN1bmRlZglfX25lZWRfc2l6ZV90CisgI2VuZGlmIC8qIF9TVERERUZfSCBvciBfX25lZWRfc2l6ZV90LiAgKi8KKyAKK0BAIC0yNjQsNiArMjcwLDcgQEAgdHlwZWRlZiBsb25nIHNzaXplX3Q7CisgI2lmbmRlZiBfX19pbnRfd2NoYXJfdF9oCisgI2lmbmRlZiBfX0lOVF9XQ0hBUl9UX0gKKyAjaWZuZGVmIF9HQ0NfV0NIQVJfVAorKyNpZm5kZWYgX19ERUZJTkVEX3djaGFyX3QgLyogbXVzbCAqLworICNkZWZpbmUgX193Y2hhcl90X18JLyogQmVPUyAqLworICNkZWZpbmUgX19XQ0hBUl9UX18JLyogQ3JheSBVbmljb3MvTWsgKi8KKyAjZGVmaW5lIF9XQ0hBUl9UCitAQCAtMjc5LDYgKzI4Niw3IEBAIHR5cGVkZWYgbG9uZyBzc2l6ZV90OworICNkZWZpbmUgX19JTlRfV0NIQVJfVF9ICisgI2RlZmluZSBfR0NDX1dDSEFSX1QKKyAjZGVmaW5lIF9XQ0hBUl9UX0RFQ0xBUkVECisrI2RlZmluZSBfX0RFRklORURfd2NoYXJfdCAvKiBtdXNsICovCisgCisgLyogT24gQlNELzM4NiAxLjEsIGF0IGxlYXN0LCBtYWNoaW5lL2Fuc2kuaCBkZWZpbmVzIF9CU0RfV0NIQVJfVF8KKyAgICBpbnN0ZWFkIG9mIF9XQ0hBUl9UXywgYW5kIF9CU0RfUlVORV9UXyAod2hpY2gsIHVubGlrZSB0aGUgb3RoZXIKK0BAIC0zNDQsNiArMzUyLDcgQEAgdHlwZWRlZiBfX1dDSEFSX1RZUEVfXyB3Y2hhcl90OworICNlbmRpZgorICNlbmRpZiAvKiBfX1dDSEFSX1RfXyAqLworICNlbmRpZiAvKiBfX3djaGFyX3RfXyAqLworKyNlbmRpZiAvKiBfX0RFRklORURfd2NoYXJfdCBtdXNsICovCisgI3VuZGVmCV9fbmVlZF93Y2hhcl90CisgI2VuZGlmIC8qIF9TVERERUZfSCBvciBfX25lZWRfd2NoYXJfdC4gICovCisgCistLSAKKzIuMTIuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwNDgtZ2NjLUVuYWJsZS1zdGF0aWMtUElFLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDQ4LWdjYy1FbmFibGUtc3RhdGljLVBJRS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTZlOTEzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTcuMy8wMDQ4LWdjYy1FbmFibGUtc3RhdGljLVBJRS5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIDQ0ZWY4MDY4OGI1NmJlZWE4NWMwMDcwODQwZGVhMWUyYTRlMzRhZWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVHVlLCAxMyBKdW4gMjAxNyAxMjoxMjo1MiAtMDcwMAorU3ViamVjdDogW1BBVENIIDQ5LzQ5XSBnY2M6IEVuYWJsZSBzdGF0aWMgUElFCisKK1N0YXRpYyBQSUUgc3VwcG9ydCBpbiBHQ0MKK3NlZQoraHR0cHM6Ly9nY2MuZ251Lm9yZy9tbC9nY2MvMjAxNS0wNi9tc2cwMDAwOC5odG1sCisKK3N0YXJ0ZmlsZXMgYmVmb3JlIHBhdGNoOgorIC1zdGF0aWMgLT4gY3J0MS5vIGNydGkubyBjcnRiZWdpblQubworIC1zdGF0aWMgLVBJRSAtPiBjcnQxLm8gY3J0aS5vIGNydGJlZ2luVC5vCisgCithZnRlciBwYXRjaDoKKyAtc3RhdGljIC0+IGNydDEubyBjcnRpLm8gY3J0YmVnaW5ULm8KKyAtc3RhdGljIC1QSUUgLT4gcmNydDEubyBjcnRpLm8gY3J0YmVnaW5TLm8KKyAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBKdXJvIEJ5c3RyaWNreSA8anVyby5ieXN0cmlja3lAaW50ZWwuY29tPgorCistLS0KKyBnY2MvY29uZmlnL2dudS11c2VyLmggfCA2ICsrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2dudS11c2VyLmggYi9nY2MvY29uZmlnL2dudS11c2VyLmgKK2luZGV4IGRlNjA1YjAuLmIwMzViYmUgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2dudS11c2VyLmgKKysrKyBiL2djYy9jb25maWcvZ251LXVzZXIuaAorQEAgLTUyLDExICs1MiwxMSBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKyAjZGVmaW5lIEdOVV9VU0VSX1RBUkdFVF9TVEFSVEZJTEVfU1BFQyBcCisgICAiJXtzaGFyZWQ6OyBcCisgICAgICBwZ3xwfHByb2ZpbGU6Z2NydDEubyVzOyBcCistICAgICBzdGF0aWM6Y3J0MS5vJXM7IFwKKysgICAgIHN0YXRpYzogJXsiIFBJRV9TUEVDICI6IHJjcnQxLm8lczsgOmNydDEubyVzfTsgXAorICAgICAgIiBQSUVfU1BFQyAiOlNjcnQxLm8lczsgXAorICAgICAgOmNydDEubyVzfSBcCisgICAgY3J0aS5vJXMgXAorLSAgICV7c3RhdGljOmNydGJlZ2luVC5vJXM7IFwKKysgICAle3N0YXRpYzogJXsiIFBJRV9TUEVDICI6IGNydGJlZ2luUy5vJXM7IDpjcnRiZWdpblQubyVzfTsgXAorICAgICAgc2hhcmVkfCIgUElFX1NQRUMgIjpjcnRiZWdpblMubyVzOyBcCisgICAgICA6Y3J0YmVnaW4ubyVzfSBcCisgICAgJXtmdnRhYmxlLXZlcmlmeT1ub25lOiVzOyBcCisKKzIuMTMuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwNTAtUklTQy1WLUhhbmRsZS1ub24tbGVnaXRpbWF0ZS1hZGRyZXNzLWluLXJpc2N2X2xlZ2l0aS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvMDA1MC1SSVNDLVYtSGFuZGxlLW5vbi1sZWdpdGltYXRlLWFkZHJlc3MtaW4tcmlzY3ZfbGVnaXRpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMTRkMDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zLzAwNTAtUklTQy1WLUhhbmRsZS1ub24tbGVnaXRpbWF0ZS1hZGRyZXNzLWluLXJpc2N2X2xlZ2l0aS5wYXRjaApAQCAtMCwwICsxLDUxIEBACitGcm9tIDE2MjEwZTYyNzBlMjAwY2Q0ODkyYTkwZWNlZjYwODkwNmJlM2ExMzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaXRvIENoZW5nIDxraXRvLmNoZW5nQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgNCBNYXkgMjAxNyAwMjoxMToxMyArMDgwMAorU3ViamVjdDogW1BBVENIXSBSSVNDLVY6IEhhbmRsZSBub24tbGVnaXRpbWF0ZSBhZGRyZXNzIGluCisgcmlzY3ZfbGVnaXRpbWl6ZV9tb3ZlCisKK0dDQyBtYXkgZ2VuZXJhdGUgbm9uLWxlZ2l0aW1hdGUgYWRkcmVzcyBkdWUgdG8gd2UgYWxsb3cgc29tZQorbG9hZC9zdG9yZSB3aXRoIG5vbi1sZWdpdGltYXRlIGFkZHJlc3MgaW4gcGljLm1kLgorCisgIDIwMTctMDUtMTIgIEtpdG8gQ2hlbmcgIDxraXRvLmNoZW5nQGdtYWlsLmNvbT4KKworICAgICAgKiBjb25maWcvcmlzY3YvcmlzY3YuYyAocmlzY3ZfbGVnaXRpbWl6ZV9tb3ZlKTogSGFuZGxlCisgICAgICBub24tbGVnaXRpbWF0ZSBhZGRyZXNzLgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCisgZ2NjL0NoYW5nZUxvZyAgICAgICAgICAgIHwgIDUgKysrKysKKyBnY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LmMgfCAxNiArKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LmMgYi9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LmMKK2luZGV4IGY3ZmVjNGJmY2Y4Li5kNTE5YmUxNjU5YSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvcmlzY3YvcmlzY3YuYworKysrIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5jCitAQCAtMTM4NSw2ICsxMzg1LDIyIEBAIHJpc2N2X2xlZ2l0aW1pemVfbW92ZSAoZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgcnR4IGRlc3QsIHJ0eCBzcmMpCisgICAgICAgcmV0dXJuIHRydWU7CisgICAgIH0KKyAKKysgIC8qIFJJU0MtViBHQ0MgbWF5IGdlbmVyYXRlIG5vbi1sZWdpdGltYXRlIGFkZHJlc3MgZHVlIHRvIHdlIHByb3ZpZGUgc29tZQorKyAgICAgcGF0dGVybiBmb3Igb3B0aW1pemUgYWNjZXNzIFBJQyBsb2NhbCBzeW1ib2wgYW5kIGl0J3MgbWFrZSBHQ0MgZ2VuZXJhdGUKKysgICAgIHVucmVjb2duaXphYmxlIGluc3RydWN0aW9uIGR1cmluZyBvcHRtaXppbmcuICAqLworKworKyAgaWYgKE1FTV9QIChkZXN0KSAmJiAhcmlzY3ZfbGVnaXRpbWF0ZV9hZGRyZXNzX3AgKG1vZGUsIFhFWFAgKGRlc3QsIDApLAorKwkJCQkJCSAgIHJlbG9hZF9jb21wbGV0ZWQpKQorKyAgICB7CisrICAgICAgWEVYUCAoZGVzdCwgMCkgPSByaXNjdl9mb3JjZV9hZGRyZXNzIChYRVhQIChkZXN0LCAwKSwgbW9kZSk7CisrICAgIH0KKysKKysgIGlmIChNRU1fUCAoc3JjKSAmJiAhcmlzY3ZfbGVnaXRpbWF0ZV9hZGRyZXNzX3AgKG1vZGUsIFhFWFAgKHNyYywgMCksCisrCQkJCQkJICByZWxvYWRfY29tcGxldGVkKSkKKysgICAgeworKyAgICAgIFhFWFAgKHNyYywgMCkgPSByaXNjdl9mb3JjZV9hZGRyZXNzIChYRVhQIChzcmMsIDApLCBtb2RlKTsKKysgICAgfQorKworICAgcmV0dXJuIGZhbHNlOworIH0KKyAKKy0tIAorMi4xNC4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy03LjMvZml4LXNlZ21lbnRhdGlvbi1mYXVsdC1wcmVjb21waWxlZC1oZHIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zL2ZpeC1zZWdtZW50YXRpb24tZmF1bHQtcHJlY29tcGlsZWQtaGRyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYWRlZjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNy4zL2ZpeC1zZWdtZW50YXRpb24tZmF1bHQtcHJlY29tcGlsZWQtaGRyLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKKworUHJldmVudCBhIHNlZ21lbnRhdGlvbiBmYXVsdCB3aGljaCBvY2N1cnMgd2hlbiB1c2luZyBpbmNvcnJlY3QKK3N0cnVjdHVyZSB0cnlpbmcgdG8gYWNjZXNzIG5hbWUgb2Ygc29tZSBuYW1lZCBvcGVyYXRvcnMsIHN1Y2ggYXMgCitDUFBfTk9ULCBDUFBfQU5EIGV0Yy4gInRva2VuLT52YWwubm9kZS5zcGVsbGluZyIgY2Fubm90IGJlIHVzZWQgaW4KK3Rob3NlIGNhc2VzLCBhcyBpcyBtYXkgbm90IGJlIGluaXRpYWxpemVkIGF0IGFsbC4KKworCitbWU9DVE8gIzExNzM4XQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSnVybyBCeXN0cmlja3kgPGp1cm8uYnlzdHJpY2t5QGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2xpYmNwcC9sZXguYyBiL2xpYmNwcC9sZXguYworLS0tIGEvbGliY3BwL2xleC5jCisrKysgYi9saWJjcHAvbGV4LmMKK0BAIC0zMjI5LDExICszMjI5LDI3IEBACisgICAgIHNwZWxsX2lkZW50OgorICAgICBjYXNlIFNQRUxMX0lERU5UOgorICAgICAgIGlmIChmb3JzdHJpbmcpCistCXsKKy0JICBtZW1jcHkgKGJ1ZmZlciwgTk9ERV9OQU1FICh0b2tlbi0+dmFsLm5vZGUuc3BlbGxpbmcpLAorLQkJICBOT0RFX0xFTiAodG9rZW4tPnZhbC5ub2RlLnNwZWxsaW5nKSk7CistCSAgYnVmZmVyICs9IE5PREVfTEVOICh0b2tlbi0+dmFsLm5vZGUuc3BlbGxpbmcpOworLQl9CisrICAgICAgICB7CisrICAgICAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSBDUFBfTkFNRSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBtZW1jcHkgKGJ1ZmZlciwgTk9ERV9OQU1FICh0b2tlbi0+dmFsLm5vZGUuc3BlbGxpbmcpLAorKyAgICAgICAgICAgICAgICAgICAgTk9ERV9MRU4gKHRva2VuLT52YWwubm9kZS5zcGVsbGluZykpOworKyAgICAgICAgICAgICAgYnVmZmVyICs9IE5PREVfTEVOICh0b2tlbi0+dmFsLm5vZGUuc3BlbGxpbmcpOworKyAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAvKiBOQU1FRF9PUCwgY2Fubm90IHVzZSBub2RlLnNwZWxsaW5nICovCisrICAgICAgICAgIGlmICh0b2tlbi0+ZmxhZ3MgJiBOQU1FRF9PUCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHIgPSBjcHBfbmFtZWRfb3BlcmF0b3IybmFtZSAodG9rZW4tPnR5cGUpOworKyAgICAgICAgICAgICAgaWYgKHN0cikKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oc3RyKTsKKysgICAgICAgICAgICAgICAgICBtZW1jcHkoYnVmZmVyLCBzdHIsIGxlbik7CisrICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IGxlbjsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorICAgICAgIGVsc2UKKyAJYnVmZmVyID0gX2NwcF9zcGVsbF9pZGVudF91Y25zIChidWZmZXIsIHRva2VuLT52YWwubm9kZS5ub2RlKTsKKyAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jb21tb24uaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNvbW1vbi5pbmMKaW5kZXggODU3YWE4Zi4uYWEzYjUzZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNvbW1vbi5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNvbW1vbi5pbmMKQEAgLTQzLDcgKzQzLDcgQEAKICAgICByZXR1cm4gIiIKIAogZGVmIGdldF9sb25nX2RvdWJsZV9zZXR0aW5nKGJiLCBkKToKLSAgICBpZiBkLmdldFZhcignVFJBTlNMQVRFRF9UQVJHRVRfQVJDSCcpIGluIFsgJ3Bvd2VycGMnLCAncG93ZXJwYzY0JyBdIGFuZCBkLmdldFZhcignVENMSUJDJykgaW4gWyAndWNsaWJjJywgJ2dsaWJjJyBdOgorICAgIGlmIGQuZ2V0VmFyKCdUUkFOU0xBVEVEX1RBUkdFVF9BUkNIJykgaW4gWyAncG93ZXJwYycsICdwb3dlcnBjNjQnIF0gYW5kIGQuZ2V0VmFyKCdUQ0xJQkMnKSBpbiBbICdnbGliYycgXToKICAgICAgICAgcmV0dXJuICItLXdpdGgtbG9uZy1kb3VibGUtMTI4IgogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiAiLS13aXRob3V0LWxvbmctZG91YmxlLTEyOCIKQEAgLTEwNSw2ICsxMDUsNyBAQAogQklOViA9ICIke1BWfSIKICNTID0gIiR7V09SS0RJUn0vZ2NjLSR7UFZ9IgogUyA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvZ2NjLSR7UFZ9LSR7UFJ9L2djYy0ke1BWfSIKKwogQiA9ICIke1dPUktESVJ9L2djYy0ke1BWfS9idWlsZC4ke0hPU1RfU1lTfS4ke1RBUkdFVF9TWVN9IgogCiB0YXJnZXRfaW5jbHVkZWRpciA/PSAiJHtpbmNsdWRlZGlyfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jb25maWd1cmUtY29tbW9uLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jb25maWd1cmUtY29tbW9uLmluYwppbmRleCAwMGVmODllLi5lMmNlMjM0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY29uZmlndXJlLWNvbW1vbi5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNvbmZpZ3VyZS1jb21tb24uaW5jCkBAIC0yMiw2ICsyMiw4IEBACiBHQ0NNVUxUSUxJQiA/PSAiLS1kaXNhYmxlLW11bHRpbGliIgogR0NDVEhSRUFEUyA/PSAicG9zaXgiCiAKK0dDQ1BJRSA/Pz0gIiIKKwogRVhUUkFfT0VDT05GID0gIlwKICAgICAke0BbJy0tZW5hYmxlLWNsb2NhbGU9Z2VuZXJpYycsICcnXVtkLmdldFZhcignVVNFX05MUycpICE9ICdubyddfSBcCiAgICAgLS13aXRoLWdudS1sZCBcCkBAIC0yOSw2ICszMSw3IEBACiAgICAgLS1lbmFibGUtbGFuZ3VhZ2VzPSR7TEFOR1VBR0VTfSBcCiAgICAgLS1lbmFibGUtdGhyZWFkcz0ke0dDQ1RIUkVBRFN9IFwKICAgICAke0dDQ01VTFRJTElCfSBcCisgICAgJHtHQ0NQSUV9IFwKICAgICAtLWVuYWJsZS1jOTkgXAogICAgIC0tZW5hYmxlLWxvbmctbG9uZyBcCiAgICAgLS1lbmFibGUtc3ltdmVycz1nbnUgXApAQCAtNTMsOSArNTYsNyBAQAogIyBpbiB0aGUgY29uZmlnLmxvZyBmaWxlcyAod2hpY2ggbWlnaHQgbm90IGdldCBnZW5lcmF0ZWQgdW50aWwgZG9fY29tcGlsZQogIyBoZW5jZSBiZWluZyBtaXNzZWQgYnkgdGhlIGluc2FuZSBkb19jb25maWd1cmUgY2hlY2spLgogCi0jIEJ1aWxkIHVjbGliYyBjb21waWxlcnMgd2l0aG91dCBjeGFfYXRleGl0IHN1cHBvcnQKIEVYVFJBX09FQ09ORl9hcHBlbmRfbGludXggPSAiIC0tZW5hYmxlLV9fY3hhX2F0ZXhpdCIKLUVYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZW5hYmxlLV9fY3hhX2F0ZXhpdCIKIAogRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzNjQgPSAiIC0td2l0aC1hYmk9NjQgLS13aXRoLWFyY2gtNjQ9bWlwczY0IC0td2l0aC10dW5lLTY0PW1pcHM2NCIKIEVYVFJBX09FQ09ORl9hcHBlbmRfbWlwczY0ZWwgPSAiIC0td2l0aC1hYmk9NjQgLS13aXRoLWFyY2gtNjQ9bWlwczY0IC0td2l0aC10dW5lLTY0PW1pcHM2NCIKQEAgLTY2LDE0ICs2Nyw2IEBACiBFWFRSQV9PRUNPTkZfYXBwZW5kX21pcHNpc2E2NHI2ZWwgPSAiIC0td2l0aC1hYmk9NjQgLS13aXRoLWFyY2gtNjQ9bWlwczY0cjYiCiBFWFRSQV9PRUNPTkZfYXBwZW5kX21pcHNpc2E2NHI2ID0gIiAtLXdpdGgtYWJpPTY0IC0td2l0aC1hcmNoLTY0PW1pcHM2NHI2IgogCi0jIEFSTXY2KyBhZGRzIGF0b21pYyBpbnN0cnVjdGlvbnMgdGhhdCBhZmZlY3QgdGhlIEFCSSBpbiBsaWJyYXJpZXMgYnVpbHQKLSMgd2l0aCBUVU5FX0NDQVJHUyBpbiBnY2MtcnVudGltZS4gIE1ha2UgdGhlIGNvbXBpbGVyIGRlZmF1bHQgdG8gYQotIyBjb21wYXRpYmxlIGFyY2hpdGVjdHVyZS4gIGFybXY2IGFuZCBhcm12N2EgY292ZXIgdGhlIG1pbmltdW0gdHVuZQotIyBmZWF0dXJlcyB1c2VkIGluIE9FLgotRVhUUkFfT0VDT05GX2FwcGVuZF9hcm12NiA9ICIgLS13aXRoLWFyY2g9YXJtdjYiCi1FWFRSQV9PRUNPTkZfYXBwZW5kX2FybXY3YSA9ICIgLS13aXRoLWFyY2g9YXJtdjctYSIKLUVYVFJBX09FQ09ORl9hcHBlbmRfYXJtdjd2ZSA9ICIgLS13aXRoLWFyY2g9YXJtdjctYSIKLQogRVhUUkFfT0VDT05GX0dDQ19GTE9BVCA/Pz0gIiIKIENQUEZMQUdTID0gIiIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbi5pbmMKaW5kZXggZWMxZDI4MS4uNmQ3NzYyMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW4uaW5jCkBAIC02MCw2ICs2MCw3IEBACiAKIGRvX2NvbXBpbGUgKCkgewogCW9lX3J1bm1ha2UgYWxsLWhvc3QgY29uZmlndXJlLXRhcmdldC1saWJnY2MKKwkoY2QgJHtCfS8ke1RBUkdFVF9TWVN9L2xpYmdjYzsgb2VfcnVubWFrZSBlbmFibGUtZXhlY3V0ZS1zdGFjay5jIHVud2luZC5oIG1kLXVud2luZC1zdXBwb3J0Lmggc2ZwLW1hY2hpbmUuaCBndGhyLWRlZmF1bHQuaCkKIH0KIAogIyBIYXZpbmcgYW55dGhpbmcgYXV0byBkZXBlbmRpbmcgb24gZ2NjLWNyb3NzLXNkayBpcyBhIHJlYWxseSBiYWQgaWRlYS4uLgpAQCAtODAsNyArODEsNyBAQAogICAgICR7aW5jbHVkZWRpcn0vYysrLyR7QklOVn0gXAogICAgICR7cHJlZml4fS8ke1RBUkdFVF9TWVN9L2Jpbi8qIFwKICAgICAke3ByZWZpeH0vJHtUQVJHRVRfU1lTfS9saWIvKiBcCi0gICAgJHtwcmVmaXh9LyR7VEFSR0VUX1NZU30vdXNyL2luY2x1ZGUvKiBcCisgICAgJHtwcmVmaXh9LyR7VEFSR0VUX1NZU30ke3RhcmdldF9pbmNsdWRlZGlyfS8qIFwKICIKIElOU0FORV9TS0lQXyR7UE59ICs9ICJkZXYtc28iCiAKQEAgLTk2LDcgKzk3LDcgQEAKIEJJTlJFTFBBVEggPSAiJHtAb3MucGF0aC5yZWxwYXRoKGQuZXhwYW5kKCIke2JpbmRpcn0iKSwgZC5leHBhbmQoIiR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfSIpKX0iCiAKIGRvX2luc3RhbGwgKCkgewotCSggY2QgJHtCfS8ke1RBUkdFVF9TWVN9L2xpYmdjYzsgb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsLXVud2luZF9oICkKKwkoIGNkICR7Qn0vJHtUQVJHRVRfU1lTfS9saWJnY2M7IG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbC11bndpbmRfaC1mb3JidWlsZCBpbnN0YWxsLXVud2luZF9oICkKIAlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwtaG9zdAogCiAJIyBDbGVhbnVwIHNvbWUgb2YgdGhlICR7bGliZGlyfXssZXhlY30vZ2NjIHN0dWZmIC4uLgpAQCAtMTUzLDcgKzE1NCw3IEBACiBERVBFTkRTICs9ICJuYXRpdmVzZGstZ21wIG5hdGl2ZXNkay1tcGZyIG5hdGl2ZXNkay1saWJtcGMgJHtFTEZVVElMU30gbmF0aXZlc2RrLXpsaWIiCiBSREVQRU5EU18ke1BOfSArPSAibmF0aXZlc2RrLW1wZnIgbmF0aXZlc2RrLWxpYm1wYyAke0VMRlVUSUxTfSIKIAotU1lTVEVNSEVBREVSUyA9ICIvdXNyL2luY2x1ZGUiCitTWVNURU1IRUFERVJTID0gIiR7dGFyZ2V0X2luY2x1ZGVkaXJ9LyIKIFNZU1RFTUxJQlMgPSAiJHt0YXJnZXRfYmFzZV9saWJkaXJ9LyIKIFNZU1RFTUxJQlMxID0gIiR7dGFyZ2V0X2xpYmRpcn0vIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW5fNS40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzcuMy5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzUuNC5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzcuMy5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWwuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWwuaW5jCmluZGV4IDk1MDJjMmIuLjg5MmIxZGIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbC5pbmMKQEAgLTM1LDEwICszNSwxMSBAQAogCiBkb19jb21waWxlICgpIHsKICAgICBvZV9ydW5tYWtlIGFsbC1nY2MgY29uZmlndXJlLXRhcmdldC1saWJnY2MKKyAgICAoY2QgJHtCfS8ke1RBUkdFVF9TWVN9L2xpYmdjYzsgb2VfcnVubWFrZSBlbmFibGUtZXhlY3V0ZS1zdGFjay5jIHVud2luZC5oIG1kLXVud2luZC1zdXBwb3J0Lmggc2ZwLW1hY2hpbmUuaCBndGhyLWRlZmF1bHQuaCkKIH0KIAogZG9faW5zdGFsbCAoKSB7Ci0JKCBjZCAke0J9LyR7VEFSR0VUX1NZU30vbGliZ2NjOyBvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwtdW53aW5kX2ggKQorCSggY2QgJHtCfS8ke1RBUkdFVF9TWVN9L2xpYmdjYzsgb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsLXVud2luZF9oLWZvcmJ1aWxkIGluc3RhbGwtdW53aW5kX2gpCiAJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsLWdjYwogCiAJIyBXZSBkb24ndCByZWFsbHkgbmVlZCB0aGlzIChoZXJlIHNoYXJlcy8gY29udGFpbnMgbWFuLywgaW5mby8sIGxvY2FsZS8pLgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNS40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNy4zLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF81LjQuYmIKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzcuMy5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy5pbmMKaW5kZXggNDU5ODVjMy4uMWUxODRhNiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MuaW5jCkBAIC01Nyw2ICs1Nyw3IEBACiAJZXhwb3J0IExERkxBR1NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfTERGTEFHU30iCiAKIAlvZV9ydW5tYWtlIGFsbC1ob3N0IGNvbmZpZ3VyZS10YXJnZXQtbGliZ2NjCisJKGNkICR7Qn0vJHtUQVJHRVRfU1lTfS9saWJnY2M7IG9lX3J1bm1ha2UgZW5hYmxlLWV4ZWN1dGUtc3RhY2suYyB1bndpbmQuaCBtZC11bndpbmQtc3VwcG9ydC5oIHNmcC1tYWNoaW5lLmggZ3Roci1kZWZhdWx0LmgpCiAJIyBub3cgZ2VuZXJhdGUgc2NyaXB0IHRvIGRyaXZlIHRlc3RpbmcKIAllY2hvICIjIS91c3IvYmluL2VudiBzaCIgPiR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKIAlzZXQgPj4gJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYwpAQCAtMTU1LDIyICsxNTYsMjQgQEAKIEJJTlJFTFBBVEggPSAiJHtAb3MucGF0aC5yZWxwYXRoKGQuZXhwYW5kKCIke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9L2Jpbi8ke1RBUkdFVF9TWVN9IiksIGQuZXhwYW5kKCIke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0iKSl9IgogCiBkb19pbnN0YWxsICgpIHsKLQkoIGNkICR7Qn0vJHtUQVJHRVRfU1lTfS9saWJnY2M7IG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbC11bndpbmRfaCApCisJKCBjZCAke0J9LyR7VEFSR0VUX1NZU30vbGliZ2NjOyBvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwtdW53aW5kX2gtZm9yYnVpbGQgaW5zdGFsbC11bndpbmRfaCApCiAJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsLWhvc3QKIAogCWluc3RhbGwgLWQgJHtEfSR7dGFyZ2V0X2Jhc2VfbGliZGlyfQogCWluc3RhbGwgLWQgJHtEfSR7dGFyZ2V0X2xpYmRpcn0KLSAgICAKKwogCSMgTGluayBnZm9ydHJhbiB0byBnNzcgdG8gc2F0aXNmeSBub3Qtc28tc21hcnQgY29uZmlndXJlIG9yIGhhcmQgY29kZWQgZzc3CiAJIyBnZm9ydHJhbiBpcyBmdWxseSBiYWNrd2FyZHMgY29tcGF0aWJsZS4gVGhpcyBpcyBhIHNhZmUgYW5kIHByYWN0aWNhbCBzb2x1dGlvbi4gCi0JbG4gLXNmICR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vYmluLyR7VEFSR0VUX1BSRUZJWH1nZm9ydHJhbiAke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9L2Jpbi8ke1RBUkdFVF9QUkVGSVh9Zzc3IHx8IHRydWUKKwlpZiBbIC1uICIke0BkLmdldFZhcignRk9SVFJBTicpfSIgXTsgdGhlbgorCQlsbiAtc2YgJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS9iaW4vJHtUQVJHRVRfUFJFRklYfWdmb3J0cmFuICR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vYmluLyR7VEFSR0VUX1BSRUZJWH1nNzcgfHwgdHJ1ZQorCQlmb3J0c3ltbGlua3M9Imc3NyBnZm9ydHJhbiIKKwlmaQogCi0JCiAJIyBJbnNlcnQgc3ltbGlua3MgaW50byBsaWJleGVjIHNvIHdoZW4gdG9vbHMgd2l0aG91dCBhIHByZWZpeCBhcmUgc2VhcmNoZWQgZm9yLCB0aGUgY29ycmVjdCBvbmVzIGFyZQogCSMgZm91bmQuIFRoZXNlIG5lZWQgdG8gYmUgcmVsYXRpdmUgcGF0aHMgc28gdGhleSB3b3JrIGluIGRpZmZlcmVudCBsb2NhdGlvbnMuCiAJZGVzdD0ke0R9JHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9LwogCWluc3RhbGwgLWQgJGRlc3QKLQlmb3IgdCBpbiBhciBhcyBsZCBubSBvYmpjb3B5IG9iamR1bXAgcmFubGliIHN0cmlwIGc3NyBnY2MgY3BwIGdmb3J0cmFuOyBkbworCWZvciB0IGluIGFyIGFzIGxkIGxkLmJmZCBsZC5nb2xkIG5tIG9iamNvcHkgb2JqZHVtcCByYW5saWIgc3RyaXAgZ2NjIGNwcCAkZm9ydHN5bWxpbmtzOyBkbwogCQlsbiAtc2YgJHtCSU5SRUxQQVRIfS8ke1RBUkdFVF9QUkVGSVh9JHQgJGRlc3QkdAogCQlsbiAtc2YgJHtCSU5SRUxQQVRIfS8ke1RBUkdFVF9QUkVGSVh9JHQgJHtkZXN0fSR7VEFSR0VUX1BSRUZJWH0kdAogCWRvbmUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc181LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNy4zLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNS40LmJiCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNy4zLmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF81LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF83LjMuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsXzUuNC5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNy4zLmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGtfNS40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzcuMy5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzUuNC5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzcuMy5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWUuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWUuaW5jCmluZGV4IDBkYzQwNWMuLmVlMDg1MjkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZS5pbmMKQEAgLTM0LDcgKzM0LDYgQEAKIAogZG9fY29uZmlndXJlICgpIHsKIAlleHBvcnQgQ1hYPSIke0NYWH0gLW5vc3RkaW5jKysgLW5vc3RkbGliKysiCi0KIAlmb3IgZCBpbiBsaWJnY2MgJHtSVU5USU1FVEFSR0VUfTsgZG8KIAkJZWNobyAiQ29uZmlndXJpbmcgJGQiCiAJCXJtIC1yZiAke0J9LyR7VEFSR0VUX1NZU30vJGQvCkBAIC00Myw2ICs0Miw5IEBACiAJCWNobW9kIGEreCAke1N9LyRkL2NvbmZpZ3VyZQogCQlyZWxwYXRoPSR7QG9zLnBhdGgucmVscGF0aCgiJHtTfS8kZCIsICIke0J9LyR7VEFSR0VUX1NZU30vJGQiKX0KIAkJJHJlbHBhdGgvY29uZmlndXJlICR7Q09ORklHVVJFT1BUU30gJHtFWFRSQV9PRUNPTkZ9CisJCWlmIFsgIiRkIiA9ICJsaWJnY2MiIF07IHRoZW4KKwkJCShjZCAke0J9LyR7VEFSR0VUX1NZU30vbGliZ2NjOyBvZV9ydW5tYWtlIGVuYWJsZS1leGVjdXRlLXN0YWNrLmMgdW53aW5kLmggbWQtdW53aW5kLXN1cHBvcnQuaCBzZnAtbWFjaGluZS5oIGd0aHItZGVmYXVsdC5oKQorCQlmaQogCWRvbmUKIH0KIEVYVFJBQ09ORkZVTkNTICs9ICJleHRyYWN0X3N0YXNoZWRfYnVpbGRkaXIiCkBAIC05OSw4ICsxMDEsOCBAQAogCiAJaWYgWyAiJHtUQ0xJQkN9IiAhPSAiZ2xpYmMiIF07IHRoZW4KIAkJY2FzZSAiJHtUQVJHRVRfT1N9IiBpbgotCQkJImxpbnV4LW11c2wiIHwgImxpbnV4LXVjbGliYyIgfCAibGludXgtKnNwZSIpIGV4dHJhX3RhcmdldF9vcz0ibGludXgiOzsKLQkJCSJsaW51eC1tdXNsZWFiaSIgfCAibGludXgtdWNsaWJjZWFiaSIpIGV4dHJhX3RhcmdldF9vcz0ibGludXgtZ251ZWFiaSI7OworCQkJImxpbnV4LW11c2wiIHwgImxpbnV4LSpzcGUiKSBleHRyYV90YXJnZXRfb3M9ImxpbnV4Ijs7CisJCQkibGludXgtbXVzbGVhYmkiKSBleHRyYV90YXJnZXRfb3M9ImxpbnV4LWdudWVhYmkiOzsKIAkJCSopIGV4dHJhX3RhcmdldF9vcz0ibGludXgiOzsKIAkJZXNhYwogCQlsbiAtcyAke1RBUkdFVF9TWVN9ICR7RH0ke2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9LyR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0kZXh0cmFfdGFyZ2V0X29zCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV81LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV83LjMuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzUuNC5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWVfNy4zLmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVycy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVycy5pbmMKaW5kZXggZjk3ODg1Yi4uMzE4M2IyOSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnMuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzLmluYwpAQCAtOTcsNiArOTcsNyBAQAogRklMRVNfbGlidHNhbi1kZXYgKz0gIlwKICAgICAke2xpYmRpcn0vbGlidHNhbi5zbyBcCiAgICAgJHtsaWJkaXJ9L2xpYnRzYW4ubGEgXAorICAgICR7bGliZGlyfS9saWJ0c2FuXyoubyBcCiAiCiBGSUxFU19saWJ0c2FuLXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2xpYnRzYW4uYSIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNS40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNy4zLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc181LjQuYmIKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzXzcuMy5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV81LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzcuMy5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV81LjQuYmIKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNy4zLmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtdGFyZ2V0LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy10YXJnZXQuaW5jCmluZGV4IGVlZjQ0MzQuLmI2ZTMxZjUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy10YXJnZXQuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy10YXJnZXQuaW5jCkBAIC05LDYgKzksMTQgQEAKIAogRVhUUkFfT0VDT05GX2FwcGVuZF9saW51eHN0ZGJhc2UgPSAiIC0tZW5hYmxlLWNsb2NhbGU9Z251IgogCisjIEFSTXY2KyBhZGRzIGF0b21pYyBpbnN0cnVjdGlvbnMgdGhhdCBhZmZlY3QgdGhlIEFCSSBpbiBsaWJyYXJpZXMgYnVpbHQKKyMgd2l0aCBUVU5FX0NDQVJHUyBpbiBnY2MtcnVudGltZS4gIE1ha2UgdGhlIGNvbXBpbGVyIGRlZmF1bHQgdG8gYQorIyBjb21wYXRpYmxlIGFyY2hpdGVjdHVyZS4gIGFybXY2IGFuZCBhcm12N2EgY292ZXIgdGhlIG1pbmltdW0gdHVuZQorIyBmZWF0dXJlcyB1c2VkIGluIE9FLgorRVhUUkFfT0VDT05GX2FwcGVuZF9hcm12NiA9ICIgLS13aXRoLWFyY2g9YXJtdjYiCitFWFRSQV9PRUNPTkZfYXBwZW5kX2FybXY3YSA9ICIgLS13aXRoLWFyY2g9YXJtdjctYSIKK0VYVFJBX09FQ09ORl9hcHBlbmRfYXJtdjd2ZSA9ICIgLS13aXRoLWFyY2g9YXJtdjctYSIKKwogIyBsaWJjYzEgcmVxdXJlcyBnY2NfY3Zfb2JqZHVtcCB3aGVuIGNyb3NzIGJ1aWxkLCBidXQgZ2NjX2N2X29iamR1bXAgaXMKICMgc2V0IGluIHN1YmRpciBnY2MsIHNvIHN1YmRpciBsaWJjYzEgY2FuJ3QgdXNlIGl0LCBleHBvcnQgaXQgaGVyZSB0bwogIyBmaXggdGhlIHByb2JsZW0uCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNS40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjXzUuNC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM2MThkZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNS40LmJiCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1yZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKLXJlcXVpcmUgZ2NjLXRhcmdldC5pbmMKLQotIyBCdWlsZGluZyB3aXRoIHRodW1iIGVuYWJsZWQgb24gYXJtdjR0IGZhaWxzIHdpdGgKLSMgfCBnY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9jcC9kZWNsLmM6NzQzODooLnRleHQudW5saWtlbHkrMHgyZmEpOiByZWxvY2F0aW9uIHRydW5jYXRlZCB0byBmaXQ6IFJfQVJNX1RITV9DQUxMIGFnYWluc3Qgc3ltYm9sIGBmYW5jeV9hYm9ydChjaGFyIGNvbnN0KiwgaW50LCBjaGFyIGNvbnN0KiknIGRlZmluZWQgaW4gLmdsdWVfNyBzZWN0aW9uIGluIGxpbmtlciBzdHVicwotIyB8IGdjYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL2NwL2RlY2wuYzo3NDQyOigudGV4dC51bmxpa2VseSsweDMxOCk6IGFkZGl0aW9uYWwgcmVsb2NhdGlvbiBvdmVyZmxvd3Mgb21pdHRlZCBmcm9tIHRoZSBvdXRwdXQKLUFSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjQgPSAiYXJtIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY183LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNy4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMjA4ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNy4zLmJiCkBAIC0wLDAgKzEsMTAgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtdGFyZ2V0LmluYworCisjIEJ1aWxkaW5nIHdpdGggdGh1bWIgZW5hYmxlZCBvbiBhcm12NHQgYXJtdjV0IGZhaWxzIHdpdGgKKyMgfCBnY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9jcC9kZWNsLmM6NzQzODooLnRleHQudW5saWtlbHkrMHgyZmEpOiByZWxvY2F0aW9uIHRydW5jYXRlZCB0byBmaXQ6IFJfQVJNX1RITV9DQUxMIGFnYWluc3Qgc3ltYm9sIGBmYW5jeV9hYm9ydChjaGFyIGNvbnN0KiwgaW50LCBjaGFyIGNvbnN0KiknIGRlZmluZWQgaW4gLmdsdWVfNyBzZWN0aW9uIGluIGxpbmtlciBzdHVicworIyB8IGdjYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL2NwL2RlY2wuYzo3NDQyOigudGV4dC51bmxpa2VseSsweDMxOCk6IGFkZGl0aW9uYWwgcmVsb2NhdGlvbiBvdmVyZmxvd3Mgb21pdHRlZCBmcm9tIHRoZSBvdXRwdXQKK0FSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjQgPSAiYXJtIgorQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NSA9ICJhcm0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNS40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNy4zLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF81LjQuYmIKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsXzcuMy5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy5pbmMKaW5kZXggMzhkMTY0My4uMTUwMGZiNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MuaW5jCkBAIC01LDggKzUsOCBAQAogZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0ICgpIHsKIAlpZiBbICIke1RDTElCQ30iICE9ICJnbGliYyIgXTsgdGhlbgogCQljYXNlICIke1RBUkdFVF9PU30iIGluCi0JCQkibGludXgtbXVzbCIgfCAibGludXgtdWNsaWJjIiB8ICJsaW51eC0qc3BlIikgZXh0cmFfdGFyZ2V0X29zPSJsaW51eCI7OwotCQkJImxpbnV4LW11c2xlYWJpIiB8ICJsaW51eC11Y2xpYmNlYWJpIikgZXh0cmFfdGFyZ2V0X29zPSJsaW51eC1nbnVlYWJpIjs7CisJCQkibGludXgtbXVzbCIgfCAibGludXgtKnNwZSIpIGV4dHJhX3RhcmdldF9vcz0ibGludXgiOzsKKwkJCSJsaW51eC1tdXNsZWFiaSIpIGV4dHJhX3RhcmdldF9vcz0ibGludXgtZ251ZWFiaSI7OwogCQkJKikgZXh0cmFfdGFyZ2V0X29zPSJsaW51eCI7OwogCQllc2FjCiAJCWxuIC1zICR7VEFSR0VUX1NZU30gJHtEfSR7bGliZGlyfS8ke1RBUkdFVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJGV4dHJhX3RhcmdldF9vcwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzUuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY183LjMuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY181LjQuYmIKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY183LjMuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuLmluYwppbmRleCA0ODQ2ZGVjLi41ZjVkNGFmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbi5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW4uaW5jCkBAIC0zNyw3ICszNyw3IEBACiB9CiAKIElOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCi1ERVBFTkRTID0gImdjYy1ydW50aW1lIgorREVQRU5EUyA9ICJnY2MtcnVudGltZSBnY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH0iCiAKIEJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgogCkBAIC01NCw2ICs1NCw3IEBACiAgICAgJHtsaWJkaXJ9L2xpYmdmb3J0cmFuLmxhIFwKICAgICAke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9saWJnZm9ydHJhbmJlZ2luLiogXAogICAgICR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2xpYmNhZl9zaW5nbGUqIFwKKyAgICAke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9maW5jbHVkZS8gXAogIgogRklMRVNfJHtQTn0tc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWJnZm9ydHJhbi5hIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl81LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl83LjMuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzUuNC5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW5fNy4zLmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItNy4xMi4xLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi03LjEyLjEuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzQ3NTZjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi03LjEyLjEuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotTElDRU5TRSA9ICJHUEx2MiAmIEdQTHYzICYgTEdQTHYyICYgTEdQTHYzIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAotCQkgICAgZmlsZTovL0NPUFlJTkczO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCi0JCSAgICBmaWxlOi8vQ09QWUlORzMuTElCO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiBcCi0JCSAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTlmNjA0ZDhhNGY4ZTc0ZjRmNTE0MDg0NWEyMWI2Njc0IgotCi1TUkNfVVJJID0gImh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUvZ2RiL2dkYi0ke1BWfS50YXIueHogXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1pbmNsdWRlLXN5cy10eXBlcy5oLWZvci1tb2RlX3QucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMi1tYWtlLW1hbi1pbnN0YWxsLXJlbGF0aXZlLXRvLURFU1RESVIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMy1taXBzLWxpbnV4LW5hdC1EZWZpbmUtX0FCSU8zMi1pZi1ub3QtZGVmaW5lZC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA0LXBwYy1wdHJhY2UtRGVmaW5lLXB0X3JlZ3MtdWFwaV9wdF9yZWdzLW9uLUdMSUJDLXN5c3QucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwNS1BZGQtc3VwcG9ydC1mb3ItUmVuZXNhcy1TSC1zaDQtYXJjaGl0ZWN0dXJlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDYtRG9udC1kaXNhYmxlLWxpYnJlYWRsaW5lLmEtd2hlbi11c2luZy1kaXNhYmxlLXN0YXRpYy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA3LXVzZS1hc20tc2dpZGVmcy5oLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDgtVXNlLWV4b3J0ZWQtZGVmaW5pdGlvbnMtb2YtU0lHUlRNSU4ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwOS1DaGFuZ2Utb3JkZXItb2YtQ0ZMQUdTLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTAtcmVzb2x2ZS1yZXN0cmljdC1rZXl3b3JkLWNvbmZsaWN0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3BhY2thZ2VfZGV2ZWxfZ2RiX3BhdGNoZXNfMTIwLXNpZ3Byb2NtYXNrLWludmFsaWQtY2FsbC5wYXRjaCBcCi0iCi1TUkNfVVJJW21kNXN1bV0gPSAiMTkzNDUzMzQ3ZGRjZWQ3YWNiNmIxY2QyZWU4ZjJlNGIiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDYwNzY4MGI5NzNkM2VjOTJjMzBhZDAyOWYxYjdkYmRlMzg3Njg2OWU2YjNhMTE3ZDhhN2U5MDA4MTExMzE4NiIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLTguMC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItOC4wLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmEzMmNlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLTguMC5pbmMKQEAgLTAsMCArMSwyMiBAQAorTElDRU5TRSA9ICJHUEx2MiAmIEdQTHYzICYgTEdQTHYyICYgTEdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorCQkgICAgZmlsZTovL0NPUFlJTkczO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisJCSAgICBmaWxlOi8vQ09QWUlORzMuTElCO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiBcCisJCSAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTlmNjA0ZDhhNGY4ZTc0ZjRmNTE0MDg0NWEyMWI2Njc0IgorCitTUkNfVVJJID0gImh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUvZ2RiL2dkYi0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1pbmNsdWRlLXN5cy10eXBlcy5oLWZvci1tb2RlX3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1tYWtlLW1hbi1pbnN0YWxsLXJlbGF0aXZlLXRvLURFU1RESVIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1taXBzLWxpbnV4LW5hdC1EZWZpbmUtX0FCSU8zMi1pZi1ub3QtZGVmaW5lZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LXBwYy1wdHJhY2UtRGVmaW5lLXB0X3JlZ3MtdWFwaV9wdF9yZWdzLW9uLUdMSUJDLXN5c3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNS1BZGQtc3VwcG9ydC1mb3ItUmVuZXNhcy1TSC1zaDQtYXJjaGl0ZWN0dXJlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDYtRG9udC1kaXNhYmxlLWxpYnJlYWRsaW5lLmEtd2hlbi11c2luZy1kaXNhYmxlLXN0YXRpYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA3LXVzZS1hc20tc2dpZGVmcy5oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDgtVXNlLWV4b3J0ZWQtZGVmaW5pdGlvbnMtb2YtU0lHUlRNSU4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOS1DaGFuZ2Utb3JkZXItb2YtQ0ZMQUdTLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTAtcmVzb2x2ZS1yZXN0cmljdC1rZXl3b3JkLWNvbmZsaWN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BhY2thZ2VfZGV2ZWxfZ2RiX3BhdGNoZXNfMTIwLXNpZ3Byb2NtYXNrLWludmFsaWQtY2FsbC5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiYzNkMzVjZDk0OTA4NGJlNTNiOTJjYzFlMDM0ODVmODgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjZhMjRmZmU0OTE3ZTY3MDE0ZWY5MjczZWI4YjU0N2NiOTZhMTNlNWNhNzQ4OTViMDZkNjgzYjM5MWYzZjRlZSIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNvbW1vbi5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY29tbW9uLmluYwppbmRleCAyMzliMzc1Li45MTY0YTJiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY29tbW9uLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY29tbW9uLmluYwpAQCAtNSw3ICs1LDYgQEAKIAogTFRUTkdVU1QgPSAibHR0bmctdXN0IgogTFRUTkdVU1RfYWFyY2g2NCA9ICIiCi1MVFROR1VTVF9saWJjLXVjbGliYyA9ICIiCiBMVFROR1VTVF9taXBzYXJjaCA9ICIiCiBMVFROR1VTVF9zaDQgPSAiIgogTFRUTkdVU1RfbGliYy1tdXNsID0gIiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zcy1jYW5hZGlhbl83LjEyLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MtY2FuYWRpYW5fOC4wLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MtY2FuYWRpYW5fNy4xMi4xLmJiCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MtY2FuYWRpYW5fOC4wLmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3NfNy4xMi4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzXzguMC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzXzcuMTIuMS5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzXzguMC5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDEtaW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItbW9kZV90LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDEtaW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItbW9kZV90LnBhdGNoCmluZGV4IGZjNmM5MmYuLjRmMDZkNDYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAxLWluY2x1ZGUtc3lzLXR5cGVzLmgtZm9yLW1vZGVfdC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMS1pbmNsdWRlLXN5cy10eXBlcy5oLWZvci1tb2RlX3QucGF0Y2gKQEAgLTEsNCArMSw0IEBACi1Gcm9tIDJjODFlMTcyMTZiNGU0NzFhMWNlMGJkZGI1MGYzNzRiMDcyMmEyY2UgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDkxZGEwNDU4YjMzMzI0OWViOWMyZjRjMWYxZTUzZmE0YmMwODVjYzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogVHVlLCAxOSBKYW4gMjAxNiAxODoxODo1MiAtMDgwMAogU3ViamVjdDogW1BBVENIIDAxLzEwXSBpbmNsdWRlIHN5cy90eXBlcy5oIGZvciBtb2RlX3QKQEAgLTE0LDcgKzE0LDcgQEAKICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKIAogZGlmZiAtLWdpdCBhL2dkYi9nZGJzZXJ2ZXIvdGFyZ2V0LmggYi9nZGIvZ2Ric2VydmVyL3RhcmdldC5oCi1pbmRleCA0YzE0YzIwNGJiLi5iZGFiMThmN2Y3IDEwMDY0NAoraW5kZXggM2NjMmJjNGJhYi4uZTZiMTliMDZiOSAxMDA2NDQKIC0tLSBhL2dkYi9nZGJzZXJ2ZXIvdGFyZ2V0LmgKICsrKyBiL2dkYi9nZGJzZXJ2ZXIvdGFyZ2V0LmgKIEBAIC0yOCw2ICsyOCw3IEBACkBAIC0yNiw1ICsyNiw1IEBACiAgc3RydWN0IGVtaXRfb3BzOwogIHN0cnVjdCBidWZmZXI7CiAtLSAKLTIuMTEuMAorMi4xMy4xCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAyLW1ha2UtbWFuLWluc3RhbGwtcmVsYXRpdmUtdG8tREVTVERJUi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAyLW1ha2UtbWFuLWluc3RhbGwtcmVsYXRpdmUtdG8tREVTVERJUi5wYXRjaAppbmRleCA5YTkyMDFiLi44M2M0ZGRlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMi1tYWtlLW1hbi1pbnN0YWxsLXJlbGF0aXZlLXRvLURFU1RESVIucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDItbWFrZS1tYW4taW5zdGFsbC1yZWxhdGl2ZS10by1ERVNURElSLnBhdGNoCkBAIC0xLDQgKzEsNCBAQAotRnJvbSBmMzE2ZDYwNGIzMTJiZWFkNzg1OTRmMDJlMTM1NTYzM2VkYTk1MDdiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSA5Y2U2MWY5N2I3NzU4Nzk0ZjA2ODk0ZTkzNGZiYjI1NmZmNjIxNjNlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIERhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMjoyNzo1NSArMDAwMAogU3ViamVjdDogW1BBVENIIDAyLzEwXSBtYWtlIG1hbiBpbnN0YWxsIHJlbGF0aXZlIHRvIERFU1RESVIKQEAgLTExLDcgKzExLDcgQEAKICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKIAogZGlmZiAtLWdpdCBhL3NpbS9jb21tb24vTWFrZWZpbGUuaW4gYi9zaW0vY29tbW9uL01ha2VmaWxlLmluCi1pbmRleCBhMDVmNTA3NjdhLi44ZDBmYTY0ZWE4IDEwMDY0NAoraW5kZXggMzk0NDk1NmI1ZC4uYWEzNTVlODM0NyAxMDA2NDQKIC0tLSBhL3NpbS9jb21tb24vTWFrZWZpbGUuaW4KICsrKyBiL3NpbS9jb21tb24vTWFrZWZpbGUuaW4KIEBAIC0zNSw3ICszNSw3IEBAIHRvb2xkaXIgPSAkKGxpYmRpcikvJCh0YXJnZXRfYWxpYXMpCkBAIC0yNCw1ICsyNCw1IEBACiAgaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAogIAogLS0gCi0yLjExLjAKKzIuMTMuMQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMy1taXBzLWxpbnV4LW5hdC1EZWZpbmUtX0FCSU8zMi1pZi1ub3QtZGVmaW5lZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAzLW1pcHMtbGludXgtbmF0LURlZmluZS1fQUJJTzMyLWlmLW5vdC1kZWZpbmVkLnBhdGNoCmluZGV4IDc0YzAwMDYuLjZmNzk1NWIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAzLW1pcHMtbGludXgtbmF0LURlZmluZS1fQUJJTzMyLWlmLW5vdC1kZWZpbmVkLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAzLW1pcHMtbGludXgtbmF0LURlZmluZS1fQUJJTzMyLWlmLW5vdC1kZWZpbmVkLnBhdGNoCkBAIC0xLDQgKzEsNCBAQAotRnJvbSBmMjkxMmIxZDJlNWM4NTRhMTEyMTc2NjgyOTAzYjY5NmRhMzNlMDAzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSBjYTBlZjA2YjczMjA5MTJkZjM1MGU3MzBlNjNmOWJhZmRhYTZlYTcwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIERhdGU6IFdlZCwgMjMgTWFyIDIwMTYgMDY6MzA6MDkgKzAwMDAKIFN1YmplY3Q6IFtQQVRDSCAwMy8xMF0gbWlwcy1saW51eC1uYXQ6IERlZmluZSBfQUJJTzMyIGlmIG5vdCBkZWZpbmVkCkBAIC0xNywxMCArMTcsMTAgQEAKICAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCiAKIGRpZmYgLS1naXQgYS9nZGIvbWlwcy1saW51eC1uYXQuYyBiL2dkYi9taXBzLWxpbnV4LW5hdC5jCi1pbmRleCAwZjIwZjE2ODE0Li43MjI1MzJiYjZjIDEwMDY0NAoraW5kZXggODA0MWQ4NGJlNy4uZjJkZjFiOTkwNyAxMDA2NDQKIC0tLSBhL2dkYi9taXBzLWxpbnV4LW5hdC5jCiArKysgYi9nZGIvbWlwcy1saW51eC1uYXQuYwotQEAgLTQ2LDYgKzQ2LDExIEBACitAQCAtNDcsNiArNDcsMTEgQEAKICAjZGVmaW5lIFBUUkFDRV9HRVRfVEhSRUFEX0FSRUEgMjUKICAjZW5kaWYKICAKQEAgLTMzLDUgKzMzLDUgQEAKICAgICB3ZSdsbCBjbGVhciB0aGlzIGFuZCB1c2UgUFRSQUNFX1BFRUtVU0VSIGluc3RlYWQuICAqLwogIHN0YXRpYyBpbnQgaGF2ZV9wdHJhY2VfcmVnc2V0cyA9IDE7CiAtLSAKLTIuMTEuMAorMi4xMy4xCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDA0LXBwYy1wdHJhY2UtRGVmaW5lLXB0X3JlZ3MtdWFwaV9wdF9yZWdzLW9uLUdMSUJDLXN5c3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwNC1wcGMtcHRyYWNlLURlZmluZS1wdF9yZWdzLXVhcGlfcHRfcmVncy1vbi1HTElCQy1zeXN0LnBhdGNoCmluZGV4IDg0N2YyNGYuLjM1N2RiMjUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDA0LXBwYy1wdHJhY2UtRGVmaW5lLXB0X3JlZ3MtdWFwaV9wdF9yZWdzLW9uLUdMSUJDLXN5c3QucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDQtcHBjLXB0cmFjZS1EZWZpbmUtcHRfcmVncy11YXBpX3B0X3JlZ3Mtb24tR0xJQkMtc3lzdC5wYXRjaApAQCAtMSw2ICsxLDYgQEAKLUZyb20gN2VmN2I3MDk4ODUzNzgyNzljNDI0ZWFiMDUxMGI5MzIzMzQwMGIyNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gMGY2ZDcxMTE4Y2E5MTQwMDJmY2FkNzhkMmM4YTUxODIyM2QwNmJmYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBTYXQsIDYgQXVnIDIwMTYgMTc6MzI6NTAgLTA3MDAKK0RhdGU6IFNhdCwgMzAgQXByIDIwMTYgMTg6MzI6MTQgLTA3MDAKIFN1YmplY3Q6IFtQQVRDSCAwNC8xMF0gcHBjL3B0cmFjZTogRGVmaW5lIHB0X3JlZ3MgdWFwaV9wdF9yZWdzIG9uICFHTElCQwogIHN5c3RlbXMKIApAQCAtMTMsNyArMTMsNyBAQAogIDIgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKQogCiBkaWZmIC0tZ2l0IGEvZ2RiL2dkYnNlcnZlci9saW51eC1wcGMtbG93LmMgYi9nZGIvZ2Ric2VydmVyL2xpbnV4LXBwYy1sb3cuYwotaW5kZXggMWQwMTNmMTg1Zi4uNjgwOThiM2RiOSAxMDA2NDQKK2luZGV4IDMzYTlmZWIxMmMuLjFhOTE0MWZhZWYgMTAwNjQ0CiAtLS0gYS9nZGIvZ2Ric2VydmVyL2xpbnV4LXBwYy1sb3cuYwogKysrIGIvZ2RiL2dkYnNlcnZlci9saW51eC1wcGMtbG93LmMKIEBAIC0yMSw3ICsyMSwxMyBAQApAQCAtMzEsNyArMzEsNyBAQAogICNpbmNsdWRlICJuYXQvcHBjLWxpbnV4LmgiCiAgI2luY2x1ZGUgImxpbnV4LXBwYy10ZGVzYy5oIgogZGlmZiAtLWdpdCBhL2dkYi9uYXQvcHBjLWxpbnV4LmggYi9nZGIvbmF0L3BwYy1saW51eC5oCi1pbmRleCA4NWZiY2Q4NGJiLi5jYmVjOWM1M2IyIDEwMDY0NAoraW5kZXggNTgzN2VhMTc2Ny4uNzIzMzkyOTE5MiAxMDA2NDQKIC0tLSBhL2dkYi9uYXQvcHBjLWxpbnV4LmgKICsrKyBiL2dkYi9uYXQvcHBjLWxpbnV4LmgKIEBAIC0xOCw3ICsxOCwxMyBAQApAQCAtNDksNSArNDksNSBAQAogIAogIC8qIFRoaXMgc29tZXRpbWVzIGlzbid0IGRlZmluZWQuICAqLwogLS0gCi0yLjExLjAKKzIuMTMuMQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwNS1BZGQtc3VwcG9ydC1mb3ItUmVuZXNhcy1TSC1zaDQtYXJjaGl0ZWN0dXJlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDUtQWRkLXN1cHBvcnQtZm9yLVJlbmVzYXMtU0gtc2g0LWFyY2hpdGVjdHVyZS5wYXRjaAppbmRleCBkMGMxNWY2Li5jYjFiN2FiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwNS1BZGQtc3VwcG9ydC1mb3ItUmVuZXNhcy1TSC1zaDQtYXJjaGl0ZWN0dXJlLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDA1LUFkZC1zdXBwb3J0LWZvci1SZW5lc2FzLVNILXNoNC1hcmNoaXRlY3R1cmUucGF0Y2gKQEAgLTEsNCArMSw0IEBACi1Gcm9tIDY2NDllMmNjY2ZiMTFkZWMwNzZhYmIwMmVhZTBhZmFiOTU2MTQ4MjkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDYwYWM2OGY2MDE4ODVlYTY0ODAyMjlhNWM4YTg5YTAyNTdkYTM3NmMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAyOjMxOjEyICswMDAwCiBTdWJqZWN0OiBbUEFUQ0ggMDUvMTBdIEFkZCBzdXBwb3J0IGZvciBSZW5lc2FzIFNIIChzaDQpIGFyY2hpdGVjdHVyZS4KQEAgLTEzLDcgKzEzLDcgQEAKIFVwc3RyZWFtLVN0YXR1czogUGVuZGluZwogU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIC0tLQotIGdkYi9NYWtlZmlsZS5pbiAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCisgZ2RiL01ha2VmaWxlLmluICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKICBnZGIvY29uZmlndXJlLmhvc3QgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogIGdkYi9zaC1saW51eC10ZGVwLmMgICAgICAgICAgICAgICAgICB8IDUxOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogIGdkYi9zaC10ZGVwLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICA1NCArKy0tCkBAIC0yNCwyNSArMjQsMjYgQEAKICBnZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTMuYyAgICAgfCAgIDQgKwogIGdkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnYWxsLmMgICAgICB8ICAgMyArCiAgZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWduYWxzLmMgICAgIHwgICA0ICsKLSAxMSBmaWxlcyBjaGFuZ2VkLCA2MTcgaW5zZXJ0aW9ucygrKSwgMjkgZGVsZXRpb25zKC0pCisgMTEgZmlsZXMgY2hhbmdlZCwgNjE4IGluc2VydGlvbnMoKyksIDI5IGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvZ2RiL01ha2VmaWxlLmluIGIvZ2RiL01ha2VmaWxlLmluCi1pbmRleCA3YjJkZjg2ODc4Li4xMGYxMjY2ZmUzIDEwMDY0NAoraW5kZXggOGJlNzNiYTQyMy4uZTI4N2ZmNmEyZSAxMDA2NDQKIC0tLSBhL2dkYi9NYWtlZmlsZS5pbgogKysrIGIvZ2RiL01ha2VmaWxlLmluCi1AQCAtMTc1MCw2ICsxNzUwLDcgQEAgQUxMREVQRklMRVMgPSBcCi0gCXNjb3JlLXRkZXAuYyBcCi0gCXNlci1nbzMyLmMgc2VyLXBpcGUuYyBzZXItdGNwLmMgc2VyLW1pbmd3LmMgXAotIAlzaC10ZGVwLmMgc2g2NC10ZGVwLmMgc2huYnNkLXRkZXAuYyBzaG5ic2QtbmF0LmMgXAotKwlzaC1saW51eC10ZGVwLmMgc2gtbGludXgtbmF0LmMgXAorQEAgLTI2MzgsNiArMjYzOCw4IEBAIEFMTERFUEZJTEVTID0gXAorIAlzaC1uYnNkLXRkZXAuYyBcCisgCXNoLXRkZXAuYyBcCisgCXNoNjQtdGRlcC5jIFwKKysJc2gtbGludXgtdGRlcC5jIFwKKysJc2gtbGludXgtbmF0LmMgXAogIAlzb2wyLXRkZXAuYyBcCi0gCXNvbGliLXN2cjQuYyBcCi0gCXNwYXJjLWxpbnV4LW5hdC5jIHNwYXJjLWxpbnV4LXRkZXAuYyBcCisgCXNvbGliLWFpeC5jIFwKKyAJc29saWItc3B1LmMgXAogZGlmZiAtLWdpdCBhL2dkYi9jb25maWd1cmUuaG9zdCBiL2dkYi9jb25maWd1cmUuaG9zdAotaW5kZXggZWYyNjVlYmUyOS4uMzIyYTFlMmM2NyAxMDA2NDQKK2luZGV4IGQ3NGZkMDQ5MzQuLmJlMTJkZTE0NDYgMTAwNjQ0CiAtLS0gYS9nZGIvY29uZmlndXJlLmhvc3QKICsrKyBiL2dkYi9jb25maWd1cmUuaG9zdAotQEAgLTE0OSw2ICsxNDksNyBAQCBwb3dlcnBjKi0qLWxpbnV4KikJZ2RiX2hvc3Q9bGludXggOzsKK0BAIC0xNTAsNiArMTUwLDcgQEAgcG93ZXJwYyotKi1saW51eCopCWdkYl9ob3N0PWxpbnV4IDs7CiAgCiAgczM5MCotKi1saW51eCopCQlnZGJfaG9zdD1saW51eCA7OwogIApAQCAtNTEsNyArNTIsNyBAQAogIAkJCWdkYl9ob3N0PW5ic2QgOzsKICBzaCotKi1vcGVuYnNkKikJCWdkYl9ob3N0PW5ic2QgOzsKIGRpZmYgLS1naXQgYS9nZGIvc2gtbGludXgtdGRlcC5jIGIvZ2RiL3NoLWxpbnV4LXRkZXAuYwotaW5kZXggMjQxOGQyNTAxMC4uYWM4ZWE5ZTJhNCAxMDA2NDQKK2luZGV4IGM1Yzc0NWQyMTguLjg0ZTUzOWFhZDMgMTAwNjQ0CiAtLS0gYS9nZGIvc2gtbGludXgtdGRlcC5jCiArKysgYi9nZGIvc2gtbGludXgtdGRlcC5jCiBAQCAtMTgsMTQgKzE4LDM3IEBACkBAIC01OTksNyArNjAwLDcgQEAKICAKICAgIC8qIEdOVS9MaW51eCB1c2VzIFNWUjQtc3R5bGUgc2hhcmVkIGxpYnJhcmllcy4gICovCiBkaWZmIC0tZ2l0IGEvZ2RiL3NoLXRkZXAuYyBiL2dkYi9zaC10ZGVwLmMKLWluZGV4IDY5NGY1Zjc0MmQuLjhkNTRkZjdhMWEgMTAwNjQ0CitpbmRleCAyYzJiMjY4NDdkLi4xNGY1MjgxZWQ0IDEwMDY0NAogLS0tIGEvZ2RiL3NoLXRkZXAuYwogKysrIGIvZ2RiL3NoLXRkZXAuYwogQEAgLTIxLDYgKzIxLDkgQEAKQEAgLTYyMCw3ICs2MjEsNyBAQAogICNpbmNsdWRlICJkb3VibGVzdC5oIgogICNpbmNsdWRlICJvc2FiaS5oIgogICNpbmNsdWRlICJyZWdncm91cHMuaCIKLUBAIC02NywyMyArNzEsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc2hfY2NfZW51bVtdID0geworQEAgLTY4LDIzICs3Miw2IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzaF9jY19lbnVtW10gPSB7CiAgCiAgc3RhdGljIGNvbnN0IGNoYXIgKnNoX2FjdGl2ZV9jYWxsaW5nX2NvbnZlbnRpb24gPSBzaF9jY19nY2M7CiAgCkBAIC02NDQsNyArNjQ1LDcgQEAKICBzdGF0aWMgaW50CiAgc2hfaXNfcmVuZXNhc19jYWxsaW5nX2NvbnZlbnRpb24gKHN0cnVjdCB0eXBlICpmdW5jX3R5cGUpCiAgewotQEAgLTEwNDMsNyArMTAzMCw3IEBAIHNoX3RyZWF0X2FzX2ZsdF9wIChzdHJ1Y3QgdHlwZSAqdHlwZSkKK0BAIC0xMDUyLDcgKzEwMzksNyBAQCBzaF90cmVhdF9hc19mbHRfcCAoc3RydWN0IHR5cGUgKnR5cGUpCiAgICAgIHJldHVybiAwOwogICAgLyogT3RoZXJ3aXNlIGlmIHRoZSB0eXBlIG9mIHRoYXQgbWVtYmVyIGlzIGZsb2F0LCB0aGUgd2hvbGUgdHlwZSBpcwogICAgICAgdHJlYXRlZCBhcyBmbG9hdC4gICovCkBAIC02NTMsNyArNjU0LDcgQEAKICAgICAgcmV0dXJuIDE7CiAgICAvKiBPdGhlcndpc2UgaXQncyBub3QgdHJlYXRlZCBhcyBmbG9hdC4gICovCiAgICByZXR1cm4gMDsKLUBAIC0xMDkzLDcgKzEwODAsNyBAQCBzaF9wdXNoX2R1bW15X2NhbGxfZnB1IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKK0BAIC0xMTAyLDcgKzEwODksNyBAQCBzaF9wdXNoX2R1bW15X2NhbGxfZnB1IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKICAgICAgIGluIGZvdXIgcmVnaXN0ZXJzIGF2YWlsYWJsZS4gIExvb3AgdGhydSBhcmdzIGZyb20gZmlyc3QgdG8gbGFzdC4gICovCiAgICBmb3IgKGFyZ251bSA9IDA7IGFyZ251bSA8IG5hcmdzOyBhcmdudW0rKykKICAgICAgewpAQCAtNjYyLDcgKzY2Myw3IEBACiAgICAgICAgbGVuID0gVFlQRV9MRU5HVEggKHR5cGUpOwogICAgICAgIHZhbCA9IHNoX2p1c3RpZnlfdmFsdWVfaW5fcmVnIChnZGJhcmNoLCBhcmdzW2FyZ251bV0sIGxlbik7CiAgCi1AQCAtMTgxOSw3ICsxODA2LDcgQEAgc2hfZHdhcmYyX2ZyYW1lX2luaXRfcmVnIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgaW50IHJlZ251bSwKK0BAIC0xODI4LDcgKzE4MTUsNyBAQCBzaF9kd2FyZjJfZnJhbWVfaW5pdF9yZWcgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBpbnQgcmVnbnVtLAogICAgICByZWctPmhvdyA9IERXQVJGMl9GUkFNRV9SRUdfVU5ERUZJTkVEOwogIH0KICAKQEAgLTY3MSw3ICs2NzIsNyBAQAogIHNoX2FsbG9jX2ZyYW1lX2NhY2hlICh2b2lkKQogIHsKICAgIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqY2FjaGU7Ci1AQCAtMTg0Niw3ICsxODMzLDcgQEAgc2hfYWxsb2NfZnJhbWVfY2FjaGUgKHZvaWQpCitAQCAtMTg1NSw3ICsxODQyLDcgQEAgc2hfYWxsb2NfZnJhbWVfY2FjaGUgKHZvaWQpCiAgICByZXR1cm4gY2FjaGU7CiAgfQogIApAQCAtNjgwLDcgKzY4MSw3IEBACiAgc2hfZnJhbWVfY2FjaGUgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSkKICB7CiAgICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IGdldF9mcmFtZV9hcmNoICh0aGlzX2ZyYW1lKTsKLUBAIC0xOTEzLDkgKzE5MDAsOSBAQCBzaF9mcmFtZV9jYWNoZSAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKip0aGlzX2NhY2hlKQorQEAgLTE5MjIsOSArMTkwOSw5IEBAIHNoX2ZyYW1lX2NhY2hlIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUpCiAgICByZXR1cm4gY2FjaGU7CiAgfQogIApAQCAtNjkzLDcgKzY5NCw3IEBACiAgewogICAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBnZXRfZnJhbWVfYXJjaCAodGhpc19mcmFtZSk7CiAgICBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKmNhY2hlID0gc2hfZnJhbWVfY2FjaGUgKHRoaXNfZnJhbWUsIHRoaXNfY2FjaGUpOwotQEAgLTE5MjksNyArMTkxNiw3IEBAIHNoX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLAorQEAgLTE5MzgsNyArMTkyNSw3IEBAIHNoX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLAogICAgICAgdGhlIGN1cnJlbnQgZnJhbWUuICBGcm9iIHJlZ251bSBzbyB0aGF0IHdlIHB1bGwgdGhlIHZhbHVlIGZyb20KICAgICAgIHRoZSBjb3JyZWN0IHBsYWNlLiAgKi8KICAgIGlmIChyZWdudW0gPT0gZ2RiYXJjaF9wY19yZWdudW0gKGdkYmFyY2gpKQpAQCAtNzAyLDcgKzcwMyw3IEBACiAgCiAgICBpZiAocmVnbnVtIDwgU0hfTlVNX1JFR1MgJiYgY2FjaGUtPnNhdmVkX3JlZ3NbcmVnbnVtXSAhPSAtMSkKICAgICAgcmV0dXJuIGZyYW1lX3Vud2luZF9nb3RfbWVtb3J5ICh0aGlzX2ZyYW1lLCByZWdudW0sCi1AQCAtMjIzOCw4ICsyMjI1LDggQEAgc2hfcmV0dXJuX2luX2ZpcnN0X2hpZGRlbl9wYXJhbV9wIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKK0BAIC0yMjQ3LDggKzIyMzQsOCBAQCBzaF9yZXR1cm5faW5fZmlyc3RfaGlkZGVuX3BhcmFtX3AgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAogIHN0YXRpYyBzdHJ1Y3QgZ2RiYXJjaCAqCiAgc2hfZ2RiYXJjaF9pbml0IChzdHJ1Y3QgZ2RiYXJjaF9pbmZvIGluZm8sIHN0cnVjdCBnZGJhcmNoX2xpc3QgKmFyY2hlcykKICB7CkBAIC03MTIsNyArNzEzLDcgQEAKICAKICAgIC8qIFNINSBpcyBoYW5kbGVkIGVudGlyZWx5IGluIHNoNjQtdGRlcC5jLiAgKi8KICAgIGlmIChpbmZvLmJmZF9hcmNoX2luZm8tPm1hY2ggPT0gYmZkX21hY2hfc2g1KQotQEAgLTIyNTUsNiArMjI0MiwxOCBAQCBzaF9nZGJhcmNoX2luaXQgKHN0cnVjdCBnZGJhcmNoX2luZm8gaW5mbywgc3RydWN0IGdkYmFyY2hfbGlzdCAqYXJjaGVzKQorQEAgLTIyNjQsNiArMjI1MSwxOCBAQCBzaF9nZGJhcmNoX2luaXQgKHN0cnVjdCBnZGJhcmNoX2luZm8gaW5mbywgc3RydWN0IGdkYmFyY2hfbGlzdCAqYXJjaGVzKQogICAgdGRlcCA9IFhDTkVXIChzdHJ1Y3QgZ2RiYXJjaF90ZGVwKTsKICAgIGdkYmFyY2ggPSBnZGJhcmNoX2FsbG9jICgmaW5mbywgdGRlcCk7CiAgCkBAIC03MzEsNyArNzMyLDcgQEAKICAgIHNldF9nZGJhcmNoX3Nob3J0X2JpdCAoZ2RiYXJjaCwgMiAqIFRBUkdFVF9DSEFSX0JJVCk7CiAgICBzZXRfZ2RiYXJjaF9pbnRfYml0IChnZGJhcmNoLCA0ICogVEFSR0VUX0NIQVJfQklUKTsKICAgIHNldF9nZGJhcmNoX2xvbmdfYml0IChnZGJhcmNoLCA0ICogVEFSR0VUX0NIQVJfQklUKTsKLUBAIC0yNDA1LDEwICsyNDA0LDExIEBAIHNoX2dkYmFyY2hfaW5pdCAoc3RydWN0IGdkYmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaF9saXN0ICphcmNoZXMpCitAQCAtMjQxOCwxMCArMjQxNywxMSBAQCBzaF9nZGJhcmNoX2luaXQgKHN0cnVjdCBnZGJhcmNoX2luZm8gaW5mbywgc3RydWN0IGdkYmFyY2hfbGlzdCAqYXJjaGVzKQogICAgICAgIGJyZWFrOwogICAgICB9CiAgCkBAIC03NDUsNyArNzQ2LDcgQEAKICAgIGZyYW1lX3Vud2luZF9hcHBlbmRfdW53aW5kZXIgKGdkYmFyY2gsICZzaF9mcmFtZV91bndpbmQpOwogIAogZGlmZiAtLWdpdCBhL2dkYi9zaC10ZGVwLmggYi9nZGIvc2gtdGRlcC5oCi1pbmRleCA2NjY5NjhmNzg3Li42MmM2NWI1NWVhIDEwMDY0NAoraW5kZXggZDE1ZWYwNTBlMC4uYzQ2NDJjZWZhNCAxMDA2NDQKIC0tLSBhL2dkYi9zaC10ZGVwLmgKICsrKyBiL2dkYi9zaC10ZGVwLmgKIEBAIC0yMSw2ICsyMSwxMiBAQApAQCAtODI4LDcgKzgyOSw3IEBACiAgICAgICB3aGVyZSBlYWNoIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBpcyBzdG9yZWQgaW5zaWRlIHRoZSBhc3NvY2lhdGVkCiAgICAgICBjb3JlIGZpbGUgc2VjdGlvbi4gICovCiBkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL2FzbS1zb3VyY2UuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL2FzbS1zb3VyY2UuZXhwCi1pbmRleCA2ZDlhZWY4MWJiLi41YjY2YjQyOWQxIDEwMDY0NAoraW5kZXggZTA3ZTU1NDNmMi4uZjVlNjBlMTAwMiAxMDA2NDQKIC0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9hc20tc291cmNlLmV4cAogKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL2FzbS1zb3VyY2UuZXhwCiBAQCAtMTE2LDYgKzExNiwxMSBAQCBzd2l0Y2ggLWdsb2IgLS0gW2lzdGFyZ2V0XSB7CkBAIC05MTcsNSArOTE4LDUgQEAKICBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAKIC0tIAotMi4xMS4wCisyLjEzLjEKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDYtRG9udC1kaXNhYmxlLWxpYnJlYWRsaW5lLmEtd2hlbi11c2luZy1kaXNhYmxlLXN0YXRpYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDA2LURvbnQtZGlzYWJsZS1saWJyZWFkbGluZS5hLXdoZW4tdXNpbmctZGlzYWJsZS1zdGF0aWMucGF0Y2gKaW5kZXggNWVkOGU4MS4uOGIxMzk1OCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDYtRG9udC1kaXNhYmxlLWxpYnJlYWRsaW5lLmEtd2hlbi11c2luZy1kaXNhYmxlLXN0YXRpYy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwNi1Eb250LWRpc2FibGUtbGlicmVhZGxpbmUuYS13aGVuLXVzaW5nLWRpc2FibGUtc3RhdGljLnBhdGNoCkBAIC0xLDQgKzEsNCBAQAotRnJvbSAyYTZlMjhhZDVjMGNhZDE4OWEzNjk3ZDk2ZGUwMzFlNDcxMzA1MmI4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSA1YzkyZWJkNWUxMTdlNGNmMTE4Yzk4NDE3MWUwNzAzZGZjZmI4Y2Q4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIERhdGU6IFNhdCwgMzAgQXByIDIwMTYgMTU6MjU6MDMgLTA3MDAKIFN1YmplY3Q6IFtQQVRDSCAwNi8xMF0gRG9udCBkaXNhYmxlIGxpYnJlYWRsaW5lLmEgd2hlbiB1c2luZyAtLWRpc2FibGUtc3RhdGljCkBAIC0xOSwxMCArMTksMTAgQEAKICAyIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL01ha2VmaWxlLmRlZiBiL01ha2VmaWxlLmRlZgotaW5kZXggZWE4NDUzZTg1MS4uMGZjNjZjNjk0YiAxMDA2NDQKK2luZGV4IDBkMTNmMDM3ZDAuLjhiY2Q4NmUxM2YgMTAwNjQ0CiAtLS0gYS9NYWtlZmlsZS5kZWYKICsrKyBiL01ha2VmaWxlLmRlZgotQEAgLTEwNCw3ICsxMDQsOCBAQCBob3N0X21vZHVsZXM9IHsgbW9kdWxlPSBsaWJpY29udjsKK0BAIC0xMDUsNyArMTA1LDggQEAgaG9zdF9tb2R1bGVzPSB7IG1vZHVsZT0gbGliaWNvbnY7CiAgCQltaXNzaW5nPSBpbnN0YWxsLWh0bWw7CiAgCQltaXNzaW5nPSBpbnN0YWxsLWluZm87IH07CiAgaG9zdF9tb2R1bGVzPSB7IG1vZHVsZT0gbTQ7IH07CkBAIC0zMywxMCArMzMsMTAgQEAKICBob3N0X21vZHVsZXM9IHsgbW9kdWxlPSBzaW07IH07CiAgaG9zdF9tb2R1bGVzPSB7IG1vZHVsZT0gdGV4aW5mbzsgbm9faW5zdGFsbD0gdHJ1ZTsgfTsKIGRpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCi1pbmRleCBjYjAxMzZlOGY4Li41NWY5MDg1YzE2IDEwMDY0NAoraW5kZXggM2FjYjgzYjhkZS4uZTM0ODkwNzEyOCAxMDA2NDQKIC0tLSBhL01ha2VmaWxlLmluCiArKysgYi9NYWtlZmlsZS5pbgotQEAgLTI1Mzg1LDcgKzI1Mzg1LDcgQEAgY29uZmlndXJlLXJlYWRsaW5lOgorQEAgLTI1NDcwLDcgKzI1NDcwLDcgQEAgY29uZmlndXJlLXJlYWRsaW5lOgogIAkgICQkcy8kJG1vZHVsZV9zcmNkaXIvY29uZmlndXJlIFwKICAJICAtLXNyY2Rpcj0kJHt0b3BkaXJ9LyQkbW9kdWxlX3NyY2RpciBcCiAgCSAgJChIT1NUX0NPTkZJR0FSR1MpIC0tYnVpbGQ9JHtidWlsZF9hbGlhc30gLS1ob3N0PSR7aG9zdF9hbGlhc30gXApAQCAtNDYsNSArNDYsNSBAQAogIEBlbmRpZiByZWFkbGluZQogIAogLS0gCi0yLjExLjAKKzIuMTMuMQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwNy11c2UtYXNtLXNnaWRlZnMuaC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDA3LXVzZS1hc20tc2dpZGVmcy5oLnBhdGNoCmluZGV4IGE0MmM5ZmQuLjMzYjRjMzAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDA3LXVzZS1hc20tc2dpZGVmcy5oLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDA3LXVzZS1hc20tc2dpZGVmcy5oLnBhdGNoCkBAIC0xLDQgKzEsNCBAQAotRnJvbSBkNzU0M2I0NDI1NWRhNGFlNzE0NDdkNGU0ZDYzZTBiNmFhNGVkOTA5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSAxMmEwYjhkODFlMWZkYTZiYTk4YWJkY2U4ZDZmMDlmOTU1NWViY2Y1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogQW5kcmUgTWNDdXJkeSA8YW1jY3VyZHlAZ21haWwuY29tPgogRGF0ZTogU2F0LCAzMCBBcHIgMjAxNiAxNToyOTowNiAtMDcwMAogU3ViamVjdDogW1BBVENIIDA3LzEwXSB1c2UgPGFzbS9zZ2lkZWZzLmg+CkBAIC0xOSw3ICsxOSw3IEBACiAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCiAKIGRpZmYgLS1naXQgYS9nZGIvbWlwcy1saW51eC1uYXQuYyBiL2dkYi9taXBzLWxpbnV4LW5hdC5jCi1pbmRleCA3MjI1MzJiYjZjLi41MWQ4ZmM4ZjY2IDEwMDY0NAoraW5kZXggZjJkZjFiOTkwNy4uZDI0NjY0Y2I1NiAxMDA2NDQKIC0tLSBhL2dkYi9taXBzLWxpbnV4LW5hdC5jCiArKysgYi9nZGIvbWlwcy1saW51eC1uYXQuYwogQEAgLTMxLDcgKzMxLDcgQEAKQEAgLTMwLDcgKzMwLDcgQEAKICsjaW5jbHVkZSA8YXNtL3NnaWRlZnMuaD4KICAjaW5jbHVkZSAibmF0L2dkYl9wdHJhY2UuaCIKICAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotIAorICNpbmNsdWRlICJpbmYtcHRyYWNlLmgiCiAtLSAKLTIuMTEuMAorMi4xMy4xCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDA4LVVzZS1leG9ydGVkLWRlZmluaXRpb25zLW9mLVNJR1JUTUlOLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDgtVXNlLWV4b3J0ZWQtZGVmaW5pdGlvbnMtb2YtU0lHUlRNSU4ucGF0Y2gKaW5kZXggYWU5Y2I4Yy4uNGY2NGRlYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDgtVXNlLWV4b3J0ZWQtZGVmaW5pdGlvbnMtb2YtU0lHUlRNSU4ucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDgtVXNlLWV4b3J0ZWQtZGVmaW5pdGlvbnMtb2YtU0lHUlRNSU4ucGF0Y2gKQEAgLTEsNCArMSw0IEBACi1Gcm9tIGFhY2Q3NzE4NGRhMTMyODkwOGRhNDFjOWZkYjU1YWQ4ODFmYTBlOTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIGQzZjI0MGIzOGVlZDdjZDA4ZjZjNTBlYTg5NjU3MmYxMzI3YjQzN2EgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogRGF0ZTogU2F0LCAzMCBBcHIgMjAxNiAxNTozMTo0MCAtMDcwMAogU3ViamVjdDogW1BBVENIIDA4LzEwXSBVc2UgZXhvcnRlZCBkZWZpbml0aW9ucyBvZiBTSUdSVE1JTgpAQCAtMjAsMTAgKzIwLDEwIEBACiAgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9nZGIvbGludXgtbmF0LmMgYi9nZGIvbGludXgtbmF0LmMKLWluZGV4IDVkNWVmYTBhZjQuLmUzNDIwYjQ5YTAgMTAwNjQ0CitpbmRleCA4YjI5MjQ1YzNkLi5mNDI0YWU5NzExIDEwMDY0NAogLS0tIGEvZ2RiL2xpbnV4LW5hdC5jCiArKysgYi9nZGIvbGludXgtbmF0LmMKLUBAIC01MDIyLDYgKzUwMjIsNiBAQCBsaW5fdGhyZWFkX2dldF90aHJlYWRfc2lnbmFscyAoc2lnc2V0X3QgKnNldCkKK0BAIC01MDIxLDYgKzUwMjEsNiBAQCBsaW5fdGhyZWFkX2dldF90aHJlYWRfc2lnbmFscyAoc2lnc2V0X3QgKnNldCkKICAgIC8qIE5QVEwgcmVzZXJ2ZXMgdGhlIGZpcnN0IHR3byBSVCBzaWduYWxzLCBidXQgZG9lcyBub3QgcHJvdmlkZSBhbnkKICAgICAgIHdheSBmb3IgdGhlIGRlYnVnZ2VyIHRvIHF1ZXJ5IHRoZSBzaWduYWwgbnVtYmVycyAtIGZvcnR1bmF0ZWx5CiAgICAgICB0aGV5IGRvbid0IGNoYW5nZS4gICovCkBAIC0zMywxMiArMzMsMTIgQEAKICsgIHNpZ2FkZHNldCAoc2V0LCBTSUdSVE1JTiArIDEpOwogIH0KIGRpZmYgLS1naXQgYS9nZGIvbmF0L2xpbnV4LW5hdC5oIGIvZ2RiL25hdC9saW51eC1uYXQuaAotaW5kZXggMmI0ODVkYjE0MS4uZDA1OGFmY2RlOCAxMDA2NDQKK2luZGV4IDdkZDE4ZmVmZmYuLjM1MTM3YWIzNGYgMTAwNjQ0CiAtLS0gYS9nZGIvbmF0L2xpbnV4LW5hdC5oCiArKysgYi9nZGIvbmF0L2xpbnV4LW5hdC5oCi1AQCAtODUsNCArODUsOCBAQCBleHRlcm4gZW51bSB0YXJnZXRfc3RvcF9yZWFzb24gbHdwX3N0b3BfcmVhc29uIChzdHJ1Y3QgbHdwX2luZm8gKmx3cCk7CitAQCAtOTAsNCArOTAsOCBAQCBleHRlcm4gdm9pZCBsaW51eF9zdG9wX2x3cCAoc3RydWN0IGx3cF9pbmZvICpsd3ApOwogIAotIGV4dGVybiB2b2lkIGxpbnV4X3N0b3BfbHdwIChzdHJ1Y3QgbHdwX2luZm8gKmx3cCk7CisgZXh0ZXJuIGludCBsd3BfaXNfc3RlcHBpbmcgKHN0cnVjdCBsd3BfaW5mbyAqbHdwKTsKICAKICsjaWZuZGVmIFdfU1RPUENPREUKICsjZGVmaW5lIFdfU1RPUENPREUoc2lnKSAoKHNpZykgPDwgOCB8IDB4N2YpCkBAIC00Niw1ICs0Niw1IEBACiArCiAgI2VuZGlmIC8qIExJTlVYX05BVF9IICovCiAtLSAKLTIuMTEuMAorMi4xMy4xCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDA5LUNoYW5nZS1vcmRlci1vZi1DRkxBR1MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwOS1DaGFuZ2Utb3JkZXItb2YtQ0ZMQUdTLnBhdGNoCmluZGV4IGVkNmUwYWUuLjBjMTAzZWYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDA5LUNoYW5nZS1vcmRlci1vZi1DRkxBR1MucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDktQ2hhbmdlLW9yZGVyLW9mLUNGTEFHUy5wYXRjaApAQCAtMSw0ICsxLDQgQEAKLUZyb20gOGMzNWQ1ZDE4MjVlZDAxN2NjNThlYTkxMDExNDEyZTU0YzAwMmVlYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gM2Y1NDAzNmI4OTEwNTQwNzJiM2U0M2VhOGRhYWE1N2FhMzY3YjJlMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiBEYXRlOiBTYXQsIDMwIEFwciAyMDE2IDE1OjM1OjM5IC0wNzAwCiBTdWJqZWN0OiBbUEFUQ0ggMDkvMTBdIENoYW5nZSBvcmRlciBvZiBDRkxBR1MKQEAgLTksMjYgKzksMjIgQEAKIAogU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIC0tLQotIGdkYi9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4gfCA0ICsrLS0KLSAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorIGdkYi9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCiAKIGRpZmYgLS1naXQgYS9nZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluIGIvZ2RiL2dkYnNlcnZlci9NYWtlZmlsZS5pbgotaW5kZXggZjg0NGFiODg1My4uM2Y4OGRiNTJlMyAxMDA2NDQKK2luZGV4IDAxZGZkYzBiODkuLmY2YWViZWY0NjQgMTAwNjQ0CiAtLS0gYS9nZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluCiArKysgYi9nZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluCi1AQCAtMTM4LDEwICsxMzgsMTAgQEAgQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi0gQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi0gCi0gIyBJTlRFUk5BTF9DRkxBR1MgaXMgdGhlIGFnZ3JlZ2F0ZSBvZiBhbGwgb3RoZXIgKkNGTEFHUyBtYWNyb3MuCi0tSU5URVJOQUxfQ0ZMQUdTX0JBU0UgPSAgJHtDT01QSUxFUl9DRkxBR1N9ICR7R0xPQkFMX0NGTEFHU30gXAotK0lOVEVSTkFMX0NGTEFHU19CQVNFID0gICR7R0xPQkFMX0NGTEFHU30gXAorQEAgLTE0MCw3ICsxNDAsNyBAQCBDUFBGTEFHUyA9IEBDUFBGTEFHU0AKKyBJTlRFUk5BTF9DRkxBR1NfQkFTRSA9ICR7Q1hYRkxBR1N9ICR7R0xPQkFMX0NGTEFHU30gXAogIAkke1BST0ZJTEVfQ0ZMQUdTfSAke0lOQ0xVREVfQ0ZMQUdTfSAke0NQUEZMQUdTfQotIElOVEVSTkFMX1dBUk5fQ0ZMQUdTID0gICR7SU5URVJOQUxfQ0ZMQUdTX0JBU0V9ICQoV0FSTl9DRkxBR1MpCi0tSU5URVJOQUxfQ0ZMQUdTID0gICR7SU5URVJOQUxfV0FSTl9DRkxBR1N9ICQoV0VSUk9SX0NGTEFHUykgLURHREJTRVJWRVIKLStJTlRFUk5BTF9DRkxBR1MgPSAgJHtJTlRFUk5BTF9XQVJOX0NGTEFHU30gJChXRVJST1JfQ0ZMQUdTKSAke0NPTVBJTEVSX0NGTEFHU30gLURHREJTRVJWRVIKKyBJTlRFUk5BTF9XQVJOX0NGTEFHUyA9ICR7SU5URVJOQUxfQ0ZMQUdTX0JBU0V9ICQoV0FSTl9DRkxBR1MpCistSU5URVJOQUxfQ0ZMQUdTID0gJHtJTlRFUk5BTF9XQVJOX0NGTEFHU30gJChXRVJST1JfQ0ZMQUdTKSAtREdEQlNFUlZFUgorK0lOVEVSTkFMX0NGTEFHUyA9ICR7SU5URVJOQUxfV0FSTl9DRkxBR1N9ICQoV0VSUk9SX0NGTEFHUykgJHtDT01QSUxFUl9DRkxBR1N9IC1ER0RCU0VSVkVSCiAgCiAgIyBMREZMQUdTIGlzIHNwZWNpZmljYWxseSByZXNlcnZlZCBmb3Igc2V0dGluZyBmcm9tIHRoZSBjb21tYW5kIGxpbmUKICAjIHdoZW4gcnVubmluZyBtYWtlLgogLS0gCi0yLjExLjAKKzIuMTMuMQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAxMC1yZXNvbHZlLXJlc3RyaWN0LWtleXdvcmQtY29uZmxpY3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAxMC1yZXNvbHZlLXJlc3RyaWN0LWtleXdvcmQtY29uZmxpY3QucGF0Y2gKaW5kZXggMTkzOGJlYi4uYzk1MDcxMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMTAtcmVzb2x2ZS1yZXN0cmljdC1rZXl3b3JkLWNvbmZsaWN0LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDEwLXJlc29sdmUtcmVzdHJpY3Qta2V5d29yZC1jb25mbGljdC5wYXRjaApAQCAtMSw0ICsxLDQgQEAKLUZyb20gNzgxNmQzNDk3MjY2ZTU1YzFjOTIxZDdjYzFjOGJmODFjOGVkMGI0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gM2VhZDBkZDE0MzUyMWIwYmE2OWM5ZTc1M2JjNGEyMzZmOTQ0NWFkOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiBEYXRlOiBUdWUsIDEwIE1heSAyMDE2IDA4OjQ3OjA1IC0wNzAwCiBTdWJqZWN0OiBbUEFUQ0ggMTAvMTBdIHJlc29sdmUgcmVzdHJpY3Qga2V5d29yZCBjb25mbGljdApAQCAtMTUsNyArMTUsNyBAQAogIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9nZGIvZ251bGliL2ltcG9ydC9zeXNfdGltZS5pbi5oIGIvZ2RiL2dudWxpYi9pbXBvcnQvc3lzX3RpbWUuaW4uaAotaW5kZXggYzU1NmM1ZGIyMy4uMmE2MTA3ZmNmOCAxMDA2NDQKK2luZGV4IGQ1MzVhNmE0OGIuLjdjMzRkNWExYWEgMTAwNjQ0CiAtLS0gYS9nZGIvZ251bGliL2ltcG9ydC9zeXNfdGltZS5pbi5oCiArKysgYi9nZGIvZ251bGliL2ltcG9ydC9zeXNfdGltZS5pbi5oCiBAQCAtOTMsMjAgKzkzLDIwIEBAIHN0cnVjdCB0aW1ldmFsCkBAIC00Miw3ICs0Miw3IEBACiArICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QsIHZvaWQgKl9fcmVzdHJpY3QpKTsKICAjIGVuZGlmCiAgX0dMX0NYWEFMSUFTV0FSTiAoZ2V0dGltZW9mZGF5KTsKLSAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgIyBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQogLS0gCi0yLjExLjAKKzIuMTMuMQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGJfNy4xMi4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiXzguMC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiXzcuMTIuMS5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiXzguMC5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9naXQvZ2l0LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2l0L2dpdC5pbmMKaW5kZXggNWMxMmNhOC4uOWI0YzEyOCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9naXQvZ2l0LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dpdC9naXQuaW5jCkBAIC0xMDcsNyArMTA3LDYgQEAKICAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1jdnNzZXJ2ZXIgXAogICAgICR7YmluZGlyfS9naXQtY3Zzc2VydmVyIFwKICAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1kaWZmdG9vbCBcCi0gICAgJHtsaWJleGVjZGlyfS9naXQtY29yZS9naXQtcmVsaW5rIFwKICAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1zZW5kLWVtYWlsIFwKICAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1zdm4gXAogICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LWluc3Rhd2ViIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2l0L2dpdF8yLjExLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dpdC9naXRfMi4xMS4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmYwNzJjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2l0L2dpdF8yLjExLjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1yZXF1aXJlIGdpdC5pbmMKLQotRVhUUkFfT0VDT05GICs9ICJhY19jdl9zbnByaW50Zl9yZXR1cm5zX2JvZ3VzPW5vIFwKLSAgICAgICAgICAgICAgICAgYWNfY3ZfZnJlYWRfcmVhZHNfZGlyZWN0b3JpZXM9JHthY19jdl9mcmVhZF9yZWFkc19kaXJlY3Rvcmllcz15ZXN9IFwKLSAgICAgICAgICAgICAgICAgIgotRVhUUkFfT0VNQUtFICs9ICJOT19HRVRURVhUPTEiCi0KLVNSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gIjZhN2E3M2RiMDc2YmIwNTE0YjYwMjcyMDY2OWQ2ODVjIgotU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiYTFjZGQ3YzgyMGY5MmM0NGFiYjUwMDNiMzZkYzhjYjcyMDFiYTM4ZTg3NDQ4MDIzOTlmNTljOTcyODVjYTA0MyIKLVNSQ19VUklbbWFucGFnZXMubWQ1c3VtXSA9ICJlNDI2OGE2YjUxNGNjZGI2MjRiNjQ1MGZmNTU4ODFhMyIKLVNSQ19VUklbbWFucGFnZXMuc2hhMjU2c3VtXSA9ICJlZTU2N2U3YjBmOTUzMzM4MTY3OTM3MTRiYjMxYzU0ZTI4OGNmODA0MWY3N2EwMDkyYjg1ZTYyYzljMjk3NGY5IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9naXQvZ2l0XzIuMTMuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2l0L2dpdF8yLjEzLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNlMzg4NwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2l0L2dpdF8yLjEzLjMuYmIKQEAgLTAsMCArMSwxMSBAQAorcmVxdWlyZSBnaXQuaW5jCisKK0VYVFJBX09FQ09ORiArPSAiYWNfY3Zfc25wcmludGZfcmV0dXJuc19ib2d1cz1ubyBcCisgICAgICAgICAgICAgICAgIGFjX2N2X2ZyZWFkX3JlYWRzX2RpcmVjdG9yaWVzPSR7YWNfY3ZfZnJlYWRfcmVhZHNfZGlyZWN0b3JpZXM9eWVzfSBcCisgICAgICAgICAgICAgICAgICIKK0VYVFJBX09FTUFLRSArPSAiTk9fR0VUVEVYVD0xIgorCitTUkNfVVJJW3RhcmJhbGwubWQ1c3VtXSA9ICJkMmRjNTUwZjY2OTNiYTdlNWIxNjIxMmIyNzE0ZjU5ZiIKK1NSQ19VUklbdGFyYmFsbC5zaGEyNTZzdW1dID0gIjE0OTcwMDE3NzJmNjMwZDQ5ODA5ZTk4MTY3MmVkZmUzZTNjZTFhMWQxOGU5MDVjZDUzOWM0ZDJmNGRiY2Q3NWEiCitTUkNfVVJJW21hbnBhZ2VzLm1kNXN1bV0gPSAiMzAzN2QxMWE0ZjRjZGQxOTQzNTg3MWMyNjdjYTQ4YjQiCitTUkNfVVJJW21hbnBhZ2VzLnNoYTI1NnN1bV0gPSAiZjliMzAyZWViMDhjZTA4OTM0ZTdhZmI0MjI4MGNlOTI5NDQxMWZiZjVmN2I2YWMzZmNjMjM2ZTgwMzFmMTBjNSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL2NvbmZpZy1ndWVzcy11Y2xpYmMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy9jb25maWctZ3Vlc3MtdWNsaWJjLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDk0MTE2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL2NvbmZpZy1ndWVzcy11Y2xpYmMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVBhdGNoIGNvdXJ0ZXN5IGdlbnRvby1wb3J0YWdlL3N5cy1kZXZlbC9nbnVjb25maWcvZmlsZXMvYXV0b21ha2UtMS44LjUtY29uZmlnLWd1ZXNzLXVjbGliYy5wYXRjaC4KLQotdXBkYXRlZCB0byAyMDA1MDUxNiBieSBNYXJjaW4gJ0hydycgSnVzemtpZXdpY3ogKGJ5IGhhbmQpCi11cGRhdGVkIHRvIDIwMDgwMTIzIGJ5IE5pdGluIEEgS2FtYmxlIChieSBoYW5kKQotdXBkYXRlZCB0byAyMDExMTAwMSBieSBTYXVsIFdvbGQgKGJ5IGhhbmQpCi11cGRhdGVkIHRvIDIwMTIwODE4IGJ5IE1hcmNpbiAnSHJ3JyBKdXN6a2lld2ljeiAoYnkgaGFuZCkKLQotU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgotU2lnbmVkLW9mZi1ieTogTWFyY2luIEp1c3praWV3aWN6IDxtYXJjaW4uanVzemtpZXdpY3pAbGluYXJvLm9yZz4KLQotLS0tCi0gY29uZmlnLmd1ZXNzIHwgICA2NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCA0MCBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlvbnMoLSkKLQotLS0tIGdpdC5vcmlnL2NvbmZpZy5ndWVzcwotKysrIGdpdC9jb25maWcuZ3Vlc3MKLUBAIC0xMzgsNiArMTM4LDE5IEBAIFVOQU1FX1JFTEVBU0U9YCh1bmFtZSAtcikgMj4vZGV2L251bGxgIHwKLSBVTkFNRV9TWVNURU09YCh1bmFtZSAtcykgMj4vZGV2L251bGxgICB8fCBVTkFNRV9TWVNURU09dW5rbm93bgotIFVOQU1FX1ZFUlNJT049YCh1bmFtZSAtdikgMj4vZGV2L251bGxgIHx8IFVOQU1FX1ZFUlNJT049dW5rbm93bgotIAotKyMgRGV0ZWN0IHVjbGliYyBzeXN0ZW1zLgotKwotK0xJQkM9ImdudSIKLStpZiBbIC1mIC91c3IvaW5jbHVkZS9iaXRzL3VDbGliY19jb25maWcuaCBdCi0rdGhlbgotKwlMSUJDPXVjbGliYwotKwlpZiBbIC1uIGBncmVwICIjZGVmaW5lIF9fVUNMSUJDX0NPTkZJR19WRVJTSU9OX18iIC91c3IvaW5jbHVkZS9iaXRzL3VDbGliY19jb25maWcuaGAgXQotKwl0aGVuCi0rCQlVQ0xJQkNfU1VCVkVSPWBzZWQgLW4gIi8jZGVmaW5lIF9fVUNMSUJDX0NPTkZJR19WRVJTSU9OX18gL3MvLy9wIiAvdXNyL2luY2x1ZGUvYml0cy91Q2xpYmNfY29uZmlnLmhgCi0rCQlMSUJDPSRMSUJDJFVDTElCQ19TVUJWRVIKLSsJZmkKLStmaQotKwotICMgTm90ZTogb3JkZXIgaXMgc2lnbmlmaWNhbnQgLSB0aGUgY2FzZSBicmFuY2hlcyBhcmUgbm90IGV4Y2x1c2l2ZS4KLSAKLSBjYXNlICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIGluCi1AQCAtODg2LDE1ICs4OTksMTUgQEAgRU9GCi0gCSAgRVY2OCopIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7Ci0gCWVzYWMKLSAJb2JqZHVtcCAtLXByaXZhdGUtaGVhZGVycyAvYmluL3NoIHwgZ3JlcCAtcSBsZC5zby4xCi0tCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuIExJQkM9ImxpYmMxIiA7IGVsc2UgTElCQz0iIiA7IGZpCi0tCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudSR7TElCQ30KLSsJaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4gTElCQz0iZ251bGliYzEiIDsgZWxzZSBMSUJDPSIiIDsgZmkKLSsJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQotIAlleGl0IDs7Ci0gICAgIGFybSo6TGludXg6KjoqKQotIAlldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0gCWlmIGVjaG8gX19BUk1fRUFCSV9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKLSAJICAgIHwgZ3JlcCAtcSBfX0FSTV9FQUJJX18KLSAJdGhlbgotLQkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251Ci0rCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9Ci0gCWVsc2UKLSAJICAgIGlmIGVjaG8gX19BUk1fUENTX1ZGUCB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCi0gCQl8IGdyZXAgLXEgX19BUk1fUENTX1ZGUAotQEAgLTkwNiwxOSArOTE5LDE5IEBAIEVPRgotIAlmaQotIAlleGl0IDs7Ci0gICAgIGF2cjMyKjpMaW51eDoqOiopCi0tCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQotKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9Ci0gCWV4aXQgOzsKLSAgICAgY3JpczpMaW51eDoqOiopCi0tCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LWdudQotKwllY2hvICR7VU5BTUVfTUFDSElORX0tYXhpcy1saW51eC0ke0xJQkN9Ci0gCWV4aXQgOzsKLSAgICAgY3Jpc3YzMjpMaW51eDoqOiopCi0tCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LWdudQotKwllY2hvICR7VU5BTUVfTUFDSElORX0tYXhpcy1saW51eC0ke0xJQkN9Ci0gCWV4aXQgOzsKLSAgICAgZnJ2OkxpbnV4Oio6KikKLS0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251Ci0rCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KLSAJZXhpdCA7OwotICAgICBoZXhhZ29uOkxpbnV4Oio6KikKLS0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251Ci0rCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KLSAJZXhpdCA7OwotICAgICBpKjg2OkxpbnV4Oio6KikKLSAJTElCQz1nbnUKLUBAIC05MzIsMTMgKzk0NSwxMyBAQCBFT0YKLSAJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC0ke0xJQkN9IgotIAlleGl0IDs7Ci0gICAgIGlhNjQ6TGludXg6KjoqKQotLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKLSsJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQotIAlleGl0IDs7Ci0gICAgIG0zMnIqOkxpbnV4Oio6KikKLS0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251Ci0rCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KLSAJZXhpdCA7OwotICAgICBtNjgqOkxpbnV4Oio6KikKLS0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251Ci0rCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KLSAJZXhpdCA7OwotICAgICBtaXBzOkxpbnV4Oio6KiB8IG1pcHM2NDpMaW51eDoqOiopCi0gCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKLUBAIC05NTcsNTQgKzk3MCw1NCBAQCBFT0YKLSAJI2VuZGlmCi0gRU9GCi0gCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeQ1BVJ2AKLS0JdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LWdudSI7IGV4aXQ7IH0KLSsJdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LSR7TElCQ30iOyBleGl0OyB9Ci0gCTs7Ci0gICAgIG9yMzI6TGludXg6KjoqKQotLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKLSsJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQotIAlleGl0IDs7Ci0gICAgIHBhZHJlOkxpbnV4Oio6KikKLS0JZWNobyBzcGFyYy11bmtub3duLWxpbnV4LWdudQotKwllY2hvIHNwYXJjLXVua25vd24tbGludXgtJHtMSUJDfQotIAlleGl0IDs7Ci0gICAgIHBhcmlzYzY0OkxpbnV4Oio6KiB8IGhwcGE2NDpMaW51eDoqOiopCi0tCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtZ251Ci0rCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtJHtMSUJDfQotIAlleGl0IDs7Ci0gICAgIHBhcmlzYzpMaW51eDoqOiogfCBocHBhOkxpbnV4Oio6KikKLSAJIyBMb29rIGZvciBDUFUgbGV2ZWwKLSAJY2FzZSBgZ3JlcCAnXmNwdVteYS16XSo6JyAvcHJvYy9jcHVpbmZvIDI+L2Rldi9udWxsIHwgY3V0IC1kJyAnIC1mMmAgaW4KLS0JICBQQTcqKSBlY2hvIGhwcGExLjEtdW5rbm93bi1saW51eC1nbnUgOzsKLS0JICBQQTgqKSBlY2hvIGhwcGEyLjAtdW5rbm93bi1saW51eC1nbnUgOzsKLS0JICAqKSAgICBlY2hvIGhwcGEtdW5rbm93bi1saW51eC1nbnUgOzsKLSsJICBQQTcqKSBlY2hvIGhwcGExLjEtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7Ci0rCSAgUEE4KikgZWNobyBocHBhMi4wLXVua25vd24tbGludXgtJHtMSUJDfSA7OwotKwkgICopICAgIGVjaG8gaHBwYS11bmtub3duLWxpbnV4LSR7TElCQ30gOzsKLSAJZXNhYwotIAlleGl0IDs7Ci0gICAgIHBwYzY0OkxpbnV4Oio6KikKLS0JZWNobyBwb3dlcnBjNjQtdW5rbm93bi1saW51eC1nbnUKLSsJZWNobyBwb3dlcnBjNjQtdW5rbm93bi1saW51eC0ke0xJQkN9Ci0gCWV4aXQgOzsKLSAgICAgcHBjOkxpbnV4Oio6KikKLS0JZWNobyBwb3dlcnBjLXVua25vd24tbGludXgtZ251Ci0rCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LSR7TElCQ30KLSAJZXhpdCA7OwotICAgICBzMzkwOkxpbnV4Oio6KiB8IHMzOTB4OkxpbnV4Oio6KikKLSAJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1saW51eAotIAlleGl0IDs7Ci0gICAgIHNoNjQqOkxpbnV4Oio6KikKLS0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251Ci0rCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KLSAJZXhpdCA7OwotICAgICBzaCo6TGludXg6KjoqKQotLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKLSsJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQotIAlleGl0IDs7Ci0gICAgIHNwYXJjOkxpbnV4Oio6KiB8IHNwYXJjNjQ6TGludXg6KjoqKQotLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKLSsJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQotIAlleGl0IDs7Ci0gICAgIHRpbGUqOkxpbnV4Oio6KikKLS0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251Ci0rCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KLSAJZXhpdCA7OwotICAgICB2YXg6TGludXg6KjoqKQotLQllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLWxpbnV4LWdudQotKwllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLWxpbnV4LSR7TElCQ30KLSAJZXhpdCA7OwotICAgICB4ODZfNjQ6TGludXg6KjoqKQotLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKLSsJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQotIAlleGl0IDs7Ci0gICAgIHh0ZW5zYSo6TGludXg6KjoqKQotLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKLSsJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQotIAlleGl0IDs7Ci0gICAgIGkqODY6RFlOSVgvcHR4OjQqOiopCi0gCSMgcHR4IDQuMCBkb2VzIHVuYW1lIC1zIGNvcnJlY3RseSwgd2l0aCBEWU5JWC9wdHggaW4gdGhlcmUuCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy91Y2xpYmMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy91Y2xpYmMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZmUxMDAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWcvdWNsaWJjLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLS0tLSBjb25maWcuc3ViLm9yaWcJMjAwNC0wNS0xNCAxOTozODozNi4wMDAwMDAwMDAgLTA1MDAKLSsrKyBjb25maWcuc3ViCTIwMDQtMDUtMTQgMTk6Mzk6MTcuMDAwMDAwMDAwIC0wNTAwCi1AQCAtMTE4LDcgKzExOCw3IEBACi0gIyBIZXJlIHdlIG11c3QgcmVjb2duaXplIGFsbCB0aGUgdmFsaWQgS0VSTkVMLU9TIGNvbWJpbmF0aW9ucy4KLSBtYXliZV9vcz1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDIvJ2AKLSBjYXNlICRtYXliZV9vcyBpbgotLSAgbnRvLXFueCogfCBsaW51eC1nbnUqIHwga2ZyZWVic2QqLWdudSogfCBuZXRic2QqLWdudSogfCBzdG9ybS1jaGFvcyogfCBvczItZW14KiB8IHJ0bWstbm92YSopCi0rICBudG8tcW54KiB8IGxpbnV4LWdudSogfCBsaW51eC11Y2xpYmMqIHwgZnJlZWJzZCotZ251KiB8IG5ldGJzZCotZ251KiB8IHN0b3JtLWNoYW9zKiB8IG9zMi1lbXgqIHwgcnRtay1ub3ZhKikKLSAgICAgb3M9LSRtYXliZV9vcwotICAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMS8nYAotICAgICA7OwotQEAgLTExMzUsNyArMTEzNSw4IEBACi0gCSAgICAgIHwgLXVkaSogfCAtZWFiaSogfCAtbGl0ZXMqIHwgLWllZWUqIHwgLWdvMzIqIHwgLWF1eCogXAotIAkgICAgICB8IC1jaG9ydXNvcyogfCAtY2hvcnVzcmRiKiBcCi0gCSAgICAgIHwgLWN5Z3dpbiogfCAtcGUqIHwgLXBzb3MqIHwgLW1vc3MqIHwgLXByb2VsZiogfCAtcnRlbXMqIFwKLS0JICAgICAgfCAtbWluZ3czMiogfCAtbGludXgtZ251KiB8IC11eHB2KiB8IC1iZW9zKiB8IC1tcGVpeCogfCAtdWRrKiBcCi0rCSAgICAgIHwgLW1pbmd3MzIqIHwgLWxpbnV4LWdudSogfCAtbGludXgtdWNsaWJjKiBcCi0rCSAgICAgIHwgLXV4cHYqIHwgLWJlb3MqIHwgLW1wZWl4KiB8IC11ZGsqIFwKLSAJICAgICAgfCAtaW50ZXJpeCogfCAtdXdpbiogfCAtbWtzKiB8IC1yaGFwc29keSogfCAtZGFyd2luKiB8IC1vcGVuZWQqIFwKLSAJICAgICAgfCAtb3BlbnN0ZXAqIHwgLW9za2l0KiB8IC1jb25peCogfCAtcHczMiogfCAtbm9uc3RvcHV4KiBcCi0gCSAgICAgIHwgLXN0b3JtLWNoYW9zKiB8IC10b3BzMTAqIHwgLXRlbmV4KiB8IC10b3BzMjAqIHwgLWl0cyogXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWdfMjAxMjA4MTQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZ18yMDEyMDgxNC5iYgppbmRleCAwZDA1ZTc5Li4zZDQyOGI5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZ18yMDEyMDgxNC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZ18yMDEyMDgxNC5iYgpAQCAtMTAsNyArMTAsNiBAQAogCiAKIFNSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2dudS1jb25maWcvZ251LWNvbmZpZy0ke1BWfS50YXIuYnoyIFwKLQkgICBmaWxlOi8vY29uZmlnLWd1ZXNzLXVjbGliYy5wYXRjaCBcCiAJICAgZmlsZTovL211c2wtc3VwcG9ydC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9nbnUtY29uZmlnaXplLmluIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZ19naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZ19naXQuYmIKaW5kZXggZjFjNzc4OC4uNGZkZWQ2MCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWdfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnX2dpdC5iYgpAQCAtMTMsOCArMTMsOCBAQAogCiBTUkNfVVJJID0gImdpdDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NvbmZpZy5naXQgXAogICAgICAgICAgICBmaWxlOi8vZ251LWNvbmZpZ2l6ZS5pbiIKLQogUyA9ICIke1dPUktESVJ9L2dpdCIKK1VQU1RSRUFNX1ZFUlNJT05fVU5LTk9XTiA9ICIxIgogCiBDTEVBTkJST0tFTiA9ICIxIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuNC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuNC5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmNTAwZjMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjQuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotcmVxdWlyZSBnby1jb21tb24uaW5jCi0KLVBWID0gIjEuNC4zIgotR09fQkFTRVZFUlNJT04gPSAiMS40IgotRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7RklMRV9ESVJOQU1FfS9nby0ke0dPX0JBU0VWRVJTSU9OfToiCi0KLVNSQ19VUkkgKz0gIlwKLSAgICAgICAgZmlsZTovLzAxNi1hcm1oZi1lbGYtaGVhZGVyLnBhdGNoIFwKLSAgICAgICAgZmlsZTovL2dvLWNyb3NzLWJhY2twb3J0LWNtZC1saW5rLXN1cHBvcnQtbmV3LTM4Ni1hbWQ2NC1yZWwucGF0Y2ggXAotICAgICAgICBmaWxlOi8vc3lzbG9nLnBhdGNoIFwKLSAgICAgICAgZmlsZTovLzAwMDEtY21kLWxkLXNldC1hbGlnbm1lbnQtZm9yLXRoZS0ucmVsLnBsdC1zZWN0aW9uLW9uLTMyLS5wYXRjaCBcCi0iCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTU5MTc3ODUyNWM4NjljZGRlMGFiNWExYmYyODNjZDgxIgotU1JDX1VSSVttZDVzdW1dID0gImRmYjYwNDUxMTExNWRkNDAyYTc3YTU1M2E1OTIzYTA0IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk5NDdmYzcwNWIwYjg0MWI1OTM4YzQ4YjIyZGMzM2U5NjQ3ZWMwNzUyYmFlNjZlNTAyNzhkZjRmMjNmNjQ5NTkiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuNC8wMDAxLWNtZC1sZC1zZXQtYWxpZ25tZW50LWZvci10aGUtLnJlbC5wbHQtc2VjdGlvbi1vbi0zMi0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuNC8wMDAxLWNtZC1sZC1zZXQtYWxpZ25tZW50LWZvci10aGUtLnJlbC5wbHQtc2VjdGlvbi1vbi0zMi0ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyYWRjMjAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjQvMDAwMS1jbWQtbGQtc2V0LWFsaWdubWVudC1mb3ItdGhlLS5yZWwucGx0LXNlY3Rpb24tb24tMzItLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotRnJvbSA4NTUxNDVkNWMwM2M0YjRmYWY2MDczNmMzOGQ3YTI5OWM2ODJhZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogU2hlbmdob3UgTWEgPG1pbnV4QGdvbGFuZy5vcmc+Ci1EYXRlOiBTYXQsIDcgRmViIDIwMTUgMTQ6MDY6MDIgLTA1MDAKLVN1YmplY3Q6IFtQQVRDSF0gY21kL2xkOiBzZXQgYWxpZ25tZW50IGZvciB0aGUgLnJlbC5wbHQgc2VjdGlvbiBvbiAzMi1iaXQKLSBhcmNoaXRlY3R1cmVzCi0KLUZpeGVzICM5ODAyLgotCi1DaGFuZ2UtSWQ6IEkyMmM1MmEzN2JkYjIzYTE0Y2M0NjE1Yzk1MTk0MzFiYjE0Y2E4MWNhCi1SZXZpZXdlZC1vbjogaHR0cHM6Ly9nby1yZXZpZXcuZ29vZ2xlc291cmNlLmNvbS80MTcwCi1SZXZpZXdlZC1ieTogSWFuIExhbmNlIFRheWxvciA8aWFudEBnb2xhbmcub3JnPgotLS0tCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi0gc3JjL2NtZC9sZC9lbGYuYyB8IDEgKwotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQotCi1kaWZmIC0tZ2l0IGEvc3JjL2NtZC9sZC9lbGYuYyBiL3NyYy9jbWQvbGQvZWxmLmMKLWluZGV4IDEyY2VkOTguLjk3ZWQ0YmQgMTAwNjQ0Ci0tLS0gYS9zcmMvY21kL2xkL2VsZi5jCi0rKysgYi9zcmMvY21kL2xkL2VsZi5jCi1AQCAtMTM2Myw2ICsxMzYzLDcgQEAgYXNtYmVsZih2bG9uZyBzeW1vKQotIAkJCXNoLT50eXBlID0gU0hUX1JFTDsKLSAJCQlzaC0+ZmxhZ3MgPSBTSEZfQUxMT0M7Ci0gCQkJc2gtPmVudHNpemUgPSBFTEYzMlJFTFNJWkU7Ci0rCQkJc2gtPmFkZHJhbGlnbiA9IDQ7Ci0gCQkJc2gtPmxpbmsgPSBlbGZzaG5hbWUoIi5keW5zeW0iKS0+c2hudW07Ci0gCQkJc2hzeW0oc2gsIGxpbmtsb29rdXAoY3R4dCwgIi5yZWwucGx0IiwgMCkpOwotIAotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuNC8wMTYtYXJtaGYtZWxmLWhlYWRlci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS40LzAxNi1hcm1oZi1lbGYtaGVhZGVyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmU0MTRlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS40LzAxNi1hcm1oZi1lbGYtaGVhZGVyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotRGVzY3JpcHRpb246IFVzZSBjb3JyZWN0IEVMRiBoZWFkZXIgZm9yIGFybWhmIGJpbmFyaWVzLgotQXV0aG9yOiBBZGFtIENvbnJhZCA8YWRjb25yYWRAdWJ1bnR1LmNvbT4KLUxhc3QtVXBkYXRlOiAyMDEzLTA3LTA4Ci0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotSW5kZXg6IGdvL3NyYy9jbWQvbGQvZWxmLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnby5vcmlnL3NyYy9jbWQvbGQvZWxmLmMJMjAxNS0wMi0yMCAxMDo0OTo1OC43NjM0NTE1ODYgLTA4MDAKLSsrKyBnby9zcmMvY21kL2xkL2VsZi5jCTIwMTUtMDItMjAgMTA6NDk6MjcuODk1NDc4NTIxIC0wODAwCi1AQCAtNTcsNyArNTcsMTEgQEAKLSAJY2FzZSAnNSc6Ci0gCQkvLyB3ZSB1c2UgRUFCSSBvbiBib3RoIGxpbnV4L2FybSBhbmQgZnJlZWJzZC9hcm0uCi0gCQlpZihIRUFEVFlQRSA9PSBIbGludXggfHwgSEVBRFRZUEUgPT0gSGZyZWVic2QpCi0tCQkJaGRyLmZsYWdzID0gMHg1MDAwMDAyOyAvLyBoYXMgZW50cnkgcG9pbnQsIFZlcnNpb241IEVBQkkKLSsjaWZkZWYgX19BUk1fUENTX1ZGUAotKwkJCWhkci5mbGFncyA9IDB4NTAwMDQwMjsgLy8gaGFzIGVudHJ5IHBvaW50LCBWZXJzaW9uNSBFQUJJLCBoYXJkLWZsb2F0IEFCSQotKyNlbHNlCi0rCQkJaGRyLmZsYWdzID0gMHg1MDAwMjAyOyAvLyBoYXMgZW50cnkgcG9pbnQsIFZlcnNpb241IEVBQkksIHNvZnQtZmxvYXQgQUJJCi0rI2VuZGlmCi0gCQkvLyBmYWxsdGhyb3VnaAotIAlkZWZhdWx0OgotIAkJaGRyLnBob2ZmID0gRUxGMzJIRFJTSVpFOwkvKiBNdXN0IGJlIGJlIEVMRjMySERSU0laRTogZmlyc3QgUEhkciBtdXN0IGZvbGxvdyBFTEYgaGVhZGVyICovCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuNC9nby1jcm9zcy1iYWNrcG9ydC1jbWQtbGluay1zdXBwb3J0LW5ldy0zODYtYW1kNjQtcmVsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjQvZ28tY3Jvc3MtYmFja3BvcnQtY21kLWxpbmstc3VwcG9ydC1uZXctMzg2LWFtZDY0LXJlbC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVjYTlkMy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuNC9nby1jcm9zcy1iYWNrcG9ydC1jbWQtbGluay1zdXBwb3J0LW5ldy0zODYtYW1kNjQtcmVsLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLUZyb20gZDZlZWZhZDQ0NTgzMWMxNjFmY2ExMzBmOWJkZjdiMzg0OGFhYzIzYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgotRGF0ZTogVHVlLCAyOSBNYXIgMjAxNiAyMToxNDozMyAtMDQwMAotU3ViamVjdDogW1BBVENIXSBnby1jcm9zczogYmFja3BvcnQgImNtZC9saW5rOiBzdXBwb3J0IG5ldyAzODYvYW1kNjQKLSByZWxvY2F0aW9ucyIKLQotTmV3ZXIgYmludXRpbHMgd29uJ3Qgc3VwcG9ydCBidWlsZGluZyBvbGRlciBnby0xLjQuMyBhcyBwZXI6Ci0KLWh0dHBzOi8vZ2l0aHViLmNvbS9nb2xhbmcvZ28vaXNzdWVzLzEzMTE0Ci0KLVVwc3RyZWFtIGNvbW1pdCA5MTRkYjlmMDYwYjFmZDNlYjFmNzRkNDhmM2JkNDZhNzNkNGFlOWM3IChzZWUgc3ViaikKLXdhcyBpZGVudGlmaWVkIGFzIHRoZSBmaXggYW5kIG5vbWluYXRlZCBmb3IgMS40LjQgYnV0IHRoYXQgcmVsZWFzZQotbmV2ZXIgaGFwcGVuZWQuICBUaGUgcGF0aHMgaW4gMS40LjMgYXJlbid0IHRoZSBzYW1lIGFzIGdvMS42YmV0YTF+NjYyCi13aGVyZSB0aGlzIGNvbW1pdCBhcHBlYXJlZCwgYnV0IHRoZSBOZXRCU0QgZm9sa3MgaW5kaWNhdGVkIHdoYXQgYQotMS40LjMgYmFja3BvcnQgd291bGQgbG9vayBsaWtlIGhlcmU6IGh0dHBzOi8vZ25hdHMubmV0YnNkLm9yZy81MDc3NwotCi1UaGlzIGlzIGJhc2VkIG9uIHRoYXQsIGJ1dCB3aXRob3V0IHRoZSBCU0Qgd3JhcHBlciBpbmZyYXN0cnVjdHVyZQotbGF5ZXIgdGhhdCBtYWtlcyB0aGluZ3MgbG9vayBsaWtlIHBhdGNoZXMgb2YgcGF0Y2hlcy4KLQotU2lnbmVkLW9mZi1ieTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgWyBQYXJ0aWFsIF0KLQotZGlmZiAtLWdpdCBhL3NyYy9jbWQvNmwvYXNtLmMgYi9zcmMvY21kLzZsL2FzbS5jCi1pbmRleCAxOGI1YWEzMTE5ODEuLjJlOWQzMzlhZWY4NyAxMDA2NDQKLS0tLSBhL3NyYy9jbWQvNmwvYXNtLmMKLSsrKyBiL3NyYy9jbWQvNmwvYXNtLmMKLUBAIC0xMTgsNiArMTE4LDggQEAgYWRkZHlucmVsKExTeW0gKnMsIFJlbG9jICpyKQotIAkJcmV0dXJuOwotIAkKLSAJY2FzZSAyNTYgKyBSX1g4Nl82NF9HT1RQQ1JFTDoKLSsJY2FzZSAyNTYgKyBSX1g4Nl82NF9HT1RQQ1JFTFg6Ci0rCWNhc2UgMjU2ICsgUl9YODZfNjRfUkVYX0dPVFBDUkVMWDoKLSAJCWlmKHRhcmctPnR5cGUgIT0gU0RZTklNUE9SVCkgewotIAkJCS8vIGhhdmUgc3ltYm9sCi0gCQkJaWYoci0+b2ZmID49IDIgJiYgcy0+cFtyLT5vZmYtMl0gPT0gMHg4YikgewotZGlmZiAtLWdpdCBhL3NyYy9jbWQvOGwvYXNtLmMgYi9zcmMvY21kLzhsL2FzbS5jCi1pbmRleCA5OGMwNDI0MDM3NGYuLmNmZjI5NDg4ZThhZiAxMDA2NDQKLS0tLSBhL3NyYy9jbWQvOGwvYXNtLmMKLSsrKyBiL3NyYy9jbWQvOGwvYXNtLmMKLUBAIC0xMTUsNiArMTE1LDcgQEAgYWRkZHlucmVsKExTeW0gKnMsIFJlbG9jICpyKQotIAkJcmV0dXJuOwkJCi0gCQotIAljYXNlIDI1NiArIFJfMzg2X0dPVDMyOgotKwljYXNlIDI1NiArIFJfMzg2X0dPVDMyWDoKLSAJCWlmKHRhcmctPnR5cGUgIT0gU0RZTklNUE9SVCkgewotIAkJCS8vIGhhdmUgc3ltYm9sCi0gCQkJaWYoci0+b2ZmID49IDIgJiYgcy0+cFtyLT5vZmYtMl0gPT0gMHg4YikgewotZGlmZiAtLWdpdCBhL3NyYy9jbWQvbGQvZWxmLmggYi9zcmMvY21kL2xkL2VsZi5oCi1pbmRleCBlODRkOTk2ZjI1OTYuLmJiZjJjZmFhM2NjMCAxMDA2NDQKLS0tLSBhL3NyYy9jbWQvbGQvZWxmLmgKLSsrKyBiL3NyYy9jbWQvbGQvZWxmLmgKLUBAIC00NzgsMzIgKzQ3OCw0NyBAQCB0eXBlZGVmIHN0cnVjdCB7Ci0gICogUmVsb2NhdGlvbiB0eXBlcy4KLSAgKi8KLSAKLS0jZGVmaW5lCVJfWDg2XzY0X05PTkUJMAkvKiBObyByZWxvY2F0aW9uLiAqLwotLSNkZWZpbmUJUl9YODZfNjRfNjQJMQkvKiBBZGQgNjQgYml0IHN5bWJvbCB2YWx1ZS4gKi8KLS0jZGVmaW5lCVJfWDg2XzY0X1BDMzIJMgkvKiBQQy1yZWxhdGl2ZSAzMiBiaXQgc2lnbmVkIHN5bSB2YWx1ZS4gKi8KLS0jZGVmaW5lCVJfWDg2XzY0X0dPVDMyCTMJLyogUEMtcmVsYXRpdmUgMzIgYml0IEdPVCBvZmZzZXQuICovCi0tI2RlZmluZQlSX1g4Nl82NF9QTFQzMgk0CS8qIFBDLXJlbGF0aXZlIDMyIGJpdCBQTFQgb2Zmc2V0LiAqLwotLSNkZWZpbmUJUl9YODZfNjRfQ09QWQk1CS8qIENvcHkgZGF0YSBmcm9tIHNoYXJlZCBvYmplY3QuICovCi0tI2RlZmluZQlSX1g4Nl82NF9HTE9CX0RBVCA2CS8qIFNldCBHT1QgZW50cnkgdG8gZGF0YSBhZGRyZXNzLiAqLwotLSNkZWZpbmUJUl9YODZfNjRfSk1QX1NMT1QgNwkvKiBTZXQgR09UIGVudHJ5IHRvIGNvZGUgYWRkcmVzcy4gKi8KLS0jZGVmaW5lCVJfWDg2XzY0X1JFTEFUSVZFIDgJLyogQWRkIGxvYWQgYWRkcmVzcyBvZiBzaGFyZWQgb2JqZWN0LiAqLwotLSNkZWZpbmUJUl9YODZfNjRfR09UUENSRUwgOQkvKiBBZGQgMzIgYml0IHNpZ25lZCBwY3JlbCBvZmZzZXQgdG8gR09ULiAqLwotLSNkZWZpbmUJUl9YODZfNjRfMzIJMTAJLyogQWRkIDMyIGJpdCB6ZXJvIGV4dGVuZGVkIHN5bWJvbCB2YWx1ZSAqLwotLSNkZWZpbmUJUl9YODZfNjRfMzJTCTExCS8qIEFkZCAzMiBiaXQgc2lnbiBleHRlbmRlZCBzeW1ib2wgdmFsdWUgKi8KLS0jZGVmaW5lCVJfWDg2XzY0XzE2CTEyCS8qIEFkZCAxNiBiaXQgemVybyBleHRlbmRlZCBzeW1ib2wgdmFsdWUgKi8KLS0jZGVmaW5lCVJfWDg2XzY0X1BDMTYJMTMJLyogQWRkIDE2IGJpdCBzaWduZWQgZXh0ZW5kZWQgcGMgcmVsYXRpdmUgc3ltYm9sIHZhbHVlICovCi0tI2RlZmluZQlSX1g4Nl82NF84CTE0CS8qIEFkZCA4IGJpdCB6ZXJvIGV4dGVuZGVkIHN5bWJvbCB2YWx1ZSAqLwotLSNkZWZpbmUJUl9YODZfNjRfUEM4CTE1CS8qIEFkZCA4IGJpdCBzaWduZWQgZXh0ZW5kZWQgcGMgcmVsYXRpdmUgc3ltYm9sIHZhbHVlICovCi0tI2RlZmluZQlSX1g4Nl82NF9EVFBNT0Q2NCAxNgkvKiBJRCBvZiBtb2R1bGUgY29udGFpbmluZyBzeW1ib2wgKi8KLS0jZGVmaW5lCVJfWDg2XzY0X0RUUE9GRjY0IDE3CS8qIE9mZnNldCBpbiBUTFMgYmxvY2sgKi8KLS0jZGVmaW5lCVJfWDg2XzY0X1RQT0ZGNjQgMTgJLyogT2Zmc2V0IGluIHN0YXRpYyBUTFMgYmxvY2sgKi8KLS0jZGVmaW5lCVJfWDg2XzY0X1RMU0dECTE5CS8qIFBDIHJlbGF0aXZlIG9mZnNldCB0byBHRCBHT1QgZW50cnkgKi8KLS0jZGVmaW5lCVJfWDg2XzY0X1RMU0xECTIwCS8qIFBDIHJlbGF0aXZlIG9mZnNldCB0byBMRCBHT1QgZW50cnkgKi8KLS0jZGVmaW5lCVJfWDg2XzY0X0RUUE9GRjMyIDIxCS8qIE9mZnNldCBpbiBUTFMgYmxvY2sgKi8KLS0jZGVmaW5lCVJfWDg2XzY0X0dPVFRQT0ZGIDIyCS8qIFBDIHJlbGF0aXZlIG9mZnNldCB0byBJRSBHT1QgZW50cnkgKi8KLS0jZGVmaW5lCVJfWDg2XzY0X1RQT0ZGMzIgMjMJLyogT2Zmc2V0IGluIHN0YXRpYyBUTFMgYmxvY2sgKi8KLS0KLS0jZGVmaW5lCVJfWDg2XzY0X0NPVU5UCTI0CS8qIENvdW50IG9mIGRlZmluZWQgcmVsb2NhdGlvbiB0eXBlcy4gKi8KLSsjZGVmaW5lCVJfWDg2XzY0X05PTkUgICAgICAgICAgIDAKLSsjZGVmaW5lCVJfWDg2XzY0XzY0ICAgICAgICAgICAgIDEKLSsjZGVmaW5lCVJfWDg2XzY0X1BDMzIgICAgICAgICAgIDIKLSsjZGVmaW5lCVJfWDg2XzY0X0dPVDMyICAgICAgICAgIDMKLSsjZGVmaW5lCVJfWDg2XzY0X1BMVDMyICAgICAgICAgIDQKLSsjZGVmaW5lCVJfWDg2XzY0X0NPUFkgICAgICAgICAgIDUKLSsjZGVmaW5lCVJfWDg2XzY0X0dMT0JfREFUICAgICAgIDYKLSsjZGVmaW5lCVJfWDg2XzY0X0pNUF9TTE9UICAgICAgIDcKLSsjZGVmaW5lCVJfWDg2XzY0X1JFTEFUSVZFICAgICAgIDgKLSsjZGVmaW5lCVJfWDg2XzY0X0dPVFBDUkVMICAgICAgIDkKLSsjZGVmaW5lCVJfWDg2XzY0XzMyICAgICAgICAgICAgIDEwCi0rI2RlZmluZQlSX1g4Nl82NF8zMlMgICAgICAgICAgICAxMQotKyNkZWZpbmUJUl9YODZfNjRfMTYgICAgICAgICAgICAgMTIKLSsjZGVmaW5lCVJfWDg2XzY0X1BDMTYgICAgICAgICAgIDEzCi0rI2RlZmluZQlSX1g4Nl82NF84ICAgICAgICAgICAgICAxNAotKyNkZWZpbmUJUl9YODZfNjRfUEM4ICAgICAgICAgICAgMTUKLSsjZGVmaW5lCVJfWDg2XzY0X0RUUE1PRDY0ICAgICAgIDE2Ci0rI2RlZmluZQlSX1g4Nl82NF9EVFBPRkY2NCAgICAgICAxNwotKyNkZWZpbmUJUl9YODZfNjRfVFBPRkY2NCAgICAgICAgMTgKLSsjZGVmaW5lCVJfWDg2XzY0X1RMU0dEICAgICAgICAgIDE5Ci0rI2RlZmluZQlSX1g4Nl82NF9UTFNMRCAgICAgICAgICAyMAotKyNkZWZpbmUJUl9YODZfNjRfRFRQT0ZGMzIgICAgICAgMjEKLSsjZGVmaW5lCVJfWDg2XzY0X0dPVFRQT0ZGICAgICAgIDIyCi0rI2RlZmluZQlSX1g4Nl82NF9UUE9GRjMyICAgICAgICAyMwotKyNkZWZpbmUJUl9YODZfNjRfUEM2NCAgICAgICAgICAgMjQKLSsjZGVmaW5lCVJfWDg2XzY0X0dPVE9GRjY0ICAgICAgIDI1Ci0rI2RlZmluZQlSX1g4Nl82NF9HT1RQQzMyICAgICAgICAyNgotKyNkZWZpbmUJUl9YODZfNjRfR09UNjQgICAgICAgICAgMjcKLSsjZGVmaW5lCVJfWDg2XzY0X0dPVFBDUkVMNjQgICAgIDI4Ci0rI2RlZmluZQlSX1g4Nl82NF9HT1RQQzY0ICAgICAgICAyOQotKyNkZWZpbmUJUl9YODZfNjRfR09UUExUNjQgICAgICAgMzAKLSsjZGVmaW5lCVJfWDg2XzY0X1BMVE9GRjY0ICAgICAgIDMxCi0rI2RlZmluZQlSX1g4Nl82NF9TSVpFMzIgICAgICAgICAzMgotKyNkZWZpbmUJUl9YODZfNjRfU0laRTY0ICAgICAgICAgMzMKLSsjZGVmaW5lCVJfWDg2XzY0X0dPVFBDMzJfVExTREVDIDM0Ci0rI2RlZmluZQlSX1g4Nl82NF9UTFNERVNDX0NBTEwgICAzNQotKyNkZWZpbmUJUl9YODZfNjRfVExTREVTQyAgICAgICAgMzYKLSsjZGVmaW5lCVJfWDg2XzY0X0lSRUxBVElWRSAgICAgIDM3Ci0rI2RlZmluZQlSX1g4Nl82NF9QQzMyX0JORCAgICAgICA0MAotKyNkZWZpbmUJUl9YODZfNjRfR09UUENSRUxYICAgICAgNDEKLSsjZGVmaW5lCVJfWDg2XzY0X1JFWF9HT1RQQ1JFTFggIDQyCi0gCi0gCi0gI2RlZmluZQlSX0FMUEhBX05PTkUJCTAJLyogTm8gcmVsb2MgKi8KLUBAIC01ODEsMzkgKzU5Niw0MiBAQCB0eXBlZGVmIHN0cnVjdCB7Ci0gI2RlZmluZQlSX0FSTV9DT1VOVAkJMzgJLyogQ291bnQgb2YgZGVmaW5lZCByZWxvY2F0aW9uIHR5cGVzLiAqLwotIAotIAotLSNkZWZpbmUJUl8zODZfTk9ORQkwCS8qIE5vIHJlbG9jYXRpb24uICovCi0tI2RlZmluZQlSXzM4Nl8zMgkxCS8qIEFkZCBzeW1ib2wgdmFsdWUuICovCi0tI2RlZmluZQlSXzM4Nl9QQzMyCTIJLyogQWRkIFBDLXJlbGF0aXZlIHN5bWJvbCB2YWx1ZS4gKi8KLS0jZGVmaW5lCVJfMzg2X0dPVDMyCTMJLyogQWRkIFBDLXJlbGF0aXZlIEdPVCBvZmZzZXQuICovCi0tI2RlZmluZQlSXzM4Nl9QTFQzMgk0CS8qIEFkZCBQQy1yZWxhdGl2ZSBQTFQgb2Zmc2V0LiAqLwotLSNkZWZpbmUJUl8zODZfQ09QWQk1CS8qIENvcHkgZGF0YSBmcm9tIHNoYXJlZCBvYmplY3QuICovCi0tI2RlZmluZQlSXzM4Nl9HTE9CX0RBVAk2CS8qIFNldCBHT1QgZW50cnkgdG8gZGF0YSBhZGRyZXNzLiAqLwotLSNkZWZpbmUJUl8zODZfSk1QX1NMT1QJNwkvKiBTZXQgR09UIGVudHJ5IHRvIGNvZGUgYWRkcmVzcy4gKi8KLS0jZGVmaW5lCVJfMzg2X1JFTEFUSVZFCTgJLyogQWRkIGxvYWQgYWRkcmVzcyBvZiBzaGFyZWQgb2JqZWN0LiAqLwotLSNkZWZpbmUJUl8zODZfR09UT0ZGCTkJLyogQWRkIEdPVC1yZWxhdGl2ZSBzeW1ib2wgYWRkcmVzcy4gKi8KLS0jZGVmaW5lCVJfMzg2X0dPVFBDCTEwCS8qIEFkZCBQQy1yZWxhdGl2ZSBHT1QgdGFibGUgYWRkcmVzcy4gKi8KLS0jZGVmaW5lCVJfMzg2X1RMU19UUE9GRgkxNAkvKiBOZWdhdGl2ZSBvZmZzZXQgaW4gc3RhdGljIFRMUyBibG9jayAqLwotLSNkZWZpbmUJUl8zODZfVExTX0lFCTE1CS8qIEFic29sdXRlIGFkZHJlc3Mgb2YgR09UIGZvciAtdmUgc3RhdGljIFRMUyAqLwotLSNkZWZpbmUJUl8zODZfVExTX0dPVElFCTE2CS8qIEdPVCBlbnRyeSBmb3IgbmVnYXRpdmUgc3RhdGljIFRMUyBibG9jayAqLwotLSNkZWZpbmUJUl8zODZfVExTX0xFCTE3CS8qIE5lZ2F0aXZlIG9mZnNldCByZWxhdGl2ZSB0byBzdGF0aWMgVExTICovCi0tI2RlZmluZQlSXzM4Nl9UTFNfR0QJMTgJLyogMzIgYml0IG9mZnNldCB0byBHT1QgKGluZGV4LG9mZikgcGFpciAqLwotLSNkZWZpbmUJUl8zODZfVExTX0xETQkxOQkvKiAzMiBiaXQgb2Zmc2V0IHRvIEdPVCAoaW5kZXgsemVybykgcGFpciAqLwotLSNkZWZpbmUJUl8zODZfVExTX0dEXzMyCTI0CS8qIDMyIGJpdCBvZmZzZXQgdG8gR09UIChpbmRleCxvZmYpIHBhaXIgKi8KLS0jZGVmaW5lCVJfMzg2X1RMU19HRF9QVVNIIDI1CS8qIHB1c2hsIGluc3RydWN0aW9uIGZvciBTdW4gQUJJIEdEIHNlcXVlbmNlICovCi0tI2RlZmluZQlSXzM4Nl9UTFNfR0RfQ0FMTCAyNgkvKiBjYWxsIGluc3RydWN0aW9uIGZvciBTdW4gQUJJIEdEIHNlcXVlbmNlICovCi0tI2RlZmluZQlSXzM4Nl9UTFNfR0RfUE9QIDI3CS8qIHBvcGwgaW5zdHJ1Y3Rpb24gZm9yIFN1biBBQkkgR0Qgc2VxdWVuY2UgKi8KLS0jZGVmaW5lCVJfMzg2X1RMU19MRE1fMzIgMjgJLyogMzIgYml0IG9mZnNldCB0byBHT1QgKGluZGV4LHplcm8pIHBhaXIgKi8KLS0jZGVmaW5lCVJfMzg2X1RMU19MRE1fUFVTSCAyOQkvKiBwdXNobCBpbnN0cnVjdGlvbiBmb3IgU3VuIEFCSSBMRCBzZXF1ZW5jZSAqLwotLSNkZWZpbmUJUl8zODZfVExTX0xETV9DQUxMIDMwCS8qIGNhbGwgaW5zdHJ1Y3Rpb24gZm9yIFN1biBBQkkgTEQgc2VxdWVuY2UgKi8KLS0jZGVmaW5lCVJfMzg2X1RMU19MRE1fUE9QIDMxCS8qIHBvcGwgaW5zdHJ1Y3Rpb24gZm9yIFN1biBBQkkgTEQgc2VxdWVuY2UgKi8KLS0jZGVmaW5lCVJfMzg2X1RMU19MRE9fMzIgMzIJLyogMzIgYml0IG9mZnNldCBmcm9tIHN0YXJ0IG9mIFRMUyBibG9jayAqLwotLSNkZWZpbmUJUl8zODZfVExTX0lFXzMyCTMzCS8qIDMyIGJpdCBvZmZzZXQgdG8gR09UIHN0YXRpYyBUTFMgb2Zmc2V0IGVudHJ5ICovCi0tI2RlZmluZQlSXzM4Nl9UTFNfTEVfMzIJMzQJLyogMzIgYml0IG9mZnNldCB3aXRoaW4gc3RhdGljIFRMUyBibG9jayAqLwotLSNkZWZpbmUJUl8zODZfVExTX0RUUE1PRDMyIDM1CS8qIEdPVCBlbnRyeSBjb250YWluaW5nIFRMUyBpbmRleCAqLwotLSNkZWZpbmUJUl8zODZfVExTX0RUUE9GRjMyIDM2CS8qIEdPVCBlbnRyeSBjb250YWluaW5nIFRMUyBvZmZzZXQgKi8KLS0jZGVmaW5lCVJfMzg2X1RMU19UUE9GRjMyIDM3CS8qIEdPVCBlbnRyeSBvZiAtdmUgc3RhdGljIFRMUyBvZmZzZXQgKi8KLS0KLS0jZGVmaW5lCVJfMzg2X0NPVU5UCTM4CS8qIENvdW50IG9mIGRlZmluZWQgcmVsb2NhdGlvbiB0eXBlcy4gKi8KLSsjZGVmaW5lCVJfMzg2X05PTkUgICAgICAgICAgMAotKyNkZWZpbmUJUl8zODZfMzIgICAgICAgICAgICAxCi0rI2RlZmluZQlSXzM4Nl9QQzMyICAgICAgICAgIDIKLSsjZGVmaW5lCVJfMzg2X0dPVDMyICAgICAgICAgMwotKyNkZWZpbmUJUl8zODZfUExUMzIgICAgICAgICA0Ci0rI2RlZmluZQlSXzM4Nl9DT1BZICAgICAgICAgIDUKLSsjZGVmaW5lCVJfMzg2X0dMT0JfREFUICAgICAgNgotKyNkZWZpbmUJUl8zODZfSk1QX1NMT1QgICAgICA3Ci0rI2RlZmluZQlSXzM4Nl9SRUxBVElWRSAgICAgIDgKLSsjZGVmaW5lCVJfMzg2X0dPVE9GRiAgICAgICAgOQotKyNkZWZpbmUJUl8zODZfR09UUEMgICAgICAgICAxMAotKyNkZWZpbmUJUl8zODZfVExTX1RQT0ZGICAgICAxNAotKyNkZWZpbmUJUl8zODZfVExTX0lFICAgICAgICAxNQotKyNkZWZpbmUJUl8zODZfVExTX0dPVElFICAgICAxNgotKyNkZWZpbmUJUl8zODZfVExTX0xFICAgICAgICAxNwotKyNkZWZpbmUJUl8zODZfVExTX0dEICAgICAgICAxOAotKyNkZWZpbmUJUl8zODZfVExTX0xETSAgICAgICAxOQotKyNkZWZpbmUJUl8zODZfVExTX0dEXzMyICAgICAyNAotKyNkZWZpbmUJUl8zODZfVExTX0dEX1BVU0ggICAyNQotKyNkZWZpbmUJUl8zODZfVExTX0dEX0NBTEwgICAyNgotKyNkZWZpbmUJUl8zODZfVExTX0dEX1BPUCAgICAyNwotKyNkZWZpbmUJUl8zODZfVExTX0xETV8zMiAgICAyOAotKyNkZWZpbmUJUl8zODZfVExTX0xETV9QVVNIICAyOQotKyNkZWZpbmUJUl8zODZfVExTX0xETV9DQUxMICAzMAotKyNkZWZpbmUJUl8zODZfVExTX0xETV9QT1AgICAzMQotKyNkZWZpbmUJUl8zODZfVExTX0xET18zMiAgICAzMgotKyNkZWZpbmUJUl8zODZfVExTX0lFXzMyICAgICAzMwotKyNkZWZpbmUJUl8zODZfVExTX0xFXzMyICAgICAzNAotKyNkZWZpbmUJUl8zODZfVExTX0RUUE1PRDMyICAzNQotKyNkZWZpbmUJUl8zODZfVExTX0RUUE9GRjMyICAzNgotKyNkZWZpbmUJUl8zODZfVExTX1RQT0ZGMzIgICAzNwotKyNkZWZpbmUJUl8zODZfVExTX0dPVERFU0MgICAzOQotKyNkZWZpbmUJUl8zODZfVExTX0RFU0NfQ0FMTCA0MAotKyNkZWZpbmUJUl8zODZfVExTX0RFU0MgICAgICA0MQotKyNkZWZpbmUJUl8zODZfSVJFTEFUSVZFICAgICA0MgotKyNkZWZpbmUJUl8zODZfR09UMzJYICAgICAgICA0MwotIAotICNkZWZpbmUJUl9QUENfTk9ORQkJMAkvKiBObyByZWxvY2F0aW9uLiAqLwotICNkZWZpbmUJUl9QUENfQUREUjMyCQkxCi1kaWZmIC0tZ2l0IGEvc3JjL2NtZC9sZC9sZGVsZi5jIGIvc3JjL2NtZC9sZC9sZGVsZi5jCi1pbmRleCBkZDVmYTBkMmE4MzkuLjJlMmZiZDE3Mzc3ZiAxMDA2NDQKLS0tLSBhL3NyYy9jbWQvbGQvbGRlbGYuYwotKysrIGIvc3JjL2NtZC9sZC9sZGVsZi5jCi1AQCAtODg4LDEyICs4ODgsMTUgQEAgcmVsdHlwZShjaGFyICpwbiwgaW50IGVsZnR5cGUsIHVjaGFyICpzaXopCi0gCWNhc2UgUignNicsIFJfWDg2XzY0X1BDMzIpOgotIAljYXNlIFIoJzYnLCBSX1g4Nl82NF9QTFQzMik6Ci0gCWNhc2UgUignNicsIFJfWDg2XzY0X0dPVFBDUkVMKToKLSsJY2FzZSBSKCc2JywgUl9YODZfNjRfR09UUENSRUxYKToKLSsJY2FzZSBSKCc2JywgUl9YODZfNjRfUkVYX0dPVFBDUkVMWCk6Ci0gCWNhc2UgUignOCcsIFJfMzg2XzMyKToKLSAJY2FzZSBSKCc4JywgUl8zODZfUEMzMik6Ci0gCWNhc2UgUignOCcsIFJfMzg2X0dPVDMyKToKLSAJY2FzZSBSKCc4JywgUl8zODZfUExUMzIpOgotIAljYXNlIFIoJzgnLCBSXzM4Nl9HT1RPRkYpOgotIAljYXNlIFIoJzgnLCBSXzM4Nl9HT1RQQyk6Ci0rCWNhc2UgUignOCcsIFJfMzg2X0dPVDMyWCk6Ci0gCQkqc2l6ID0gNDsKLSAJCWJyZWFrOwotIAljYXNlIFIoJzYnLCBSX1g4Nl82NF82NCk6Ci0tLSAKLTIuNy4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS40L3N5c2xvZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS40L3N5c2xvZy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjliZTA2Zi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuNC9zeXNsb2cucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi1BZGQgdGltZW91dHMgdG8gbG9nZ2VyCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotZGlmZiAtciAtdSBnby9zcmMvbG9nL3N5c2xvZy9zeXNsb2cuZ28gL2hvbWUvYWNoYW5nL0dPQ09QWS9nby9zcmMvbG9nL3N5c2xvZy9zeXNsb2cuZ28KLS0tLSBnby9zcmMvbG9nL3N5c2xvZy9zeXNsb2cuZ28JMjAxMy0xMS0yOCAxMzozODoyOC4wMDAwMDAwMDAgLTA4MDAKLSsrKyAvaG9tZS9hY2hhbmcvR09DT1BZL2dvL3NyYy9sb2cvc3lzbG9nL3N5c2xvZy5nbwkyMDE0LTEwLTAzIDExOjQ0OjM3LjcxMDQwMzIwMCAtMDcwMAotQEAgLTMzLDYgKzMzLDkgQEAKLSBjb25zdCBzZXZlcml0eU1hc2sgPSAweDA3Ci0gY29uc3QgZmFjaWxpdHlNYXNrID0gMHhmOAotIAotK3ZhciB3cml0ZVRpbWVvdXQgPSAxICogdGltZS5TZWNvbmQKLSt2YXIgY29ubmVjdFRpbWVvdXQgPSAxICogdGltZS5TZWNvbmQKLSsKLSBjb25zdCAoCi0gCS8vIFNldmVyaXR5LgotIAotQEAgLTEwMCw2ICsxMDMsNyBAQAotIHR5cGUgc2VydmVyQ29ubiBpbnRlcmZhY2UgewotIAl3cml0ZVN0cmluZyhwIFByaW9yaXR5LCBob3N0bmFtZSwgdGFnLCBzLCBubCBzdHJpbmcpIGVycm9yCi0gCWNsb3NlKCkgZXJyb3IKLSsJc2V0V3JpdGVEZWFkbGluZSh0IHRpbWUuVGltZSkgZXJyb3IKLSB9Ci0gCi0gdHlwZSBuZXRDb25uIHN0cnVjdCB7Ci1AQCAtMjczLDcgKzI3NywxMSBAQAotIAkJbmwgPSAiXG4iCi0gCX0KLSAKLS0JZXJyIDo9IHcuY29ubi53cml0ZVN0cmluZyhwLCB3Lmhvc3RuYW1lLCB3LnRhZywgbXNnLCBubCkKLSsJZXJyIDo9IHcuY29ubi5zZXRXcml0ZURlYWRsaW5lKHRpbWUuTm93KCkuQWRkKHdyaXRlVGltZW91dCkpCi0rCWlmIGVyciAhPSBuaWwgewotKwkJcmV0dXJuIDAsIGVycgotKwl9Ci0rCWVyciA9IHcuY29ubi53cml0ZVN0cmluZyhwLCB3Lmhvc3RuYW1lLCB3LnRhZywgbXNnLCBubCkKLSAJaWYgZXJyICE9IG5pbCB7Ci0gCQlyZXR1cm4gMCwgZXJyCi0gCX0KLUBAIC0zMDUsNiArMzEzLDEwIEBACi0gCXJldHVybiBuLmNvbm4uQ2xvc2UoKQotIH0KLSAKLStmdW5jIChuICpuZXRDb25uKSBzZXRXcml0ZURlYWRsaW5lKHQgdGltZS5UaW1lKSBlcnJvciB7Ci0rCXJldHVybiBuLmNvbm4uU2V0V3JpdGVEZWFkbGluZSh0KQotK30KLSsKLSAvLyBOZXdMb2dnZXIgY3JlYXRlcyBhIGxvZy5Mb2dnZXIgd2hvc2Ugb3V0cHV0IGlzIHdyaXR0ZW4gdG8KLSAvLyB0aGUgc3lzdGVtIGxvZyBzZXJ2aWNlIHdpdGggdGhlIHNwZWNpZmllZCBwcmlvcml0eS4gVGhlIGxvZ0ZsYWcKLSAvLyBhcmd1bWVudCBpcyB0aGUgZmxhZyBzZXQgcGFzc2VkIHRocm91Z2ggdG8gbG9nLk5ldyB0byBjcmVhdGUKLWRpZmYgLXIgLXUgZ28vc3JjL2xvZy9zeXNsb2cvc3lzbG9nX3VuaXguZ28gL2hvbWUvYWNoYW5nL0dPQ09QWS9nby9zcmMvbG9nL3N5c2xvZy9zeXNsb2dfdW5peC5nbwotLS0tIGdvL3NyYy9sb2cvc3lzbG9nL3N5c2xvZ191bml4LmdvCTIwMTMtMTEtMjggMTM6Mzg6MjguMDAwMDAwMDAwIC0wODAwCi0rKysgL2hvbWUvYWNoYW5nL0dPQ09QWS9nby9zcmMvbG9nL3N5c2xvZy9zeXNsb2dfdW5peC5nbwkyMDE0LTEwLTAzIDExOjQ0OjM5LjAxMDQwMzE3NSAtMDcwMAotQEAgLTE5LDcgKzE5LDcgQEAKLSAJbG9nUGF0aHMgOj0gW11zdHJpbmd7Ii9kZXYvbG9nIiwgIi92YXIvcnVuL3N5c2xvZyJ9Ci0gCWZvciBfLCBuZXR3b3JrIDo9IHJhbmdlIGxvZ1R5cGVzIHsKLSAJCWZvciBfLCBwYXRoIDo9IHJhbmdlIGxvZ1BhdGhzIHsKLS0JCQljb25uLCBlcnIgOj0gbmV0LkRpYWwobmV0d29yaywgcGF0aCkKLSsJCQljb25uLCBlcnIgOj0gbmV0LkRpYWxUaW1lb3V0KG5ldHdvcmssIHBhdGgsIGNvbm5lY3RUaW1lb3V0KQotIAkJCWlmIGVyciAhPSBuaWwgewotIAkJCQljb250aW51ZQotIAkJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuNi5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuNi5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2OWMxZDguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjYuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotcmVxdWlyZSBnby1jb21tb24uaW5jCi0KLVBWID0gIjEuNi4zIgotR09fQkFTRVZFUlNJT04gPSAiMS42IgotRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7RklMRV9ESVJOQU1FfS9nby0ke0dPX0JBU0VWRVJTSU9OfToiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTU5MTc3ODUyNWM4NjljZGRlMGFiNWExYmYyODNjZDgxIgotCi1TUkNfVVJJICs9ICJcCi0gICAgICAgZmlsZTovL2FybWhmLWVsZi1oZWFkZXIucGF0Y2ggXAotICAgICAgIGZpbGU6Ly9zeXNsb2cucGF0Y2ggXAotICAgICAgIGZpbGU6Ly9maXgtdGFyZ2V0LWNjLWZvci1idWlsZC5wYXRjaCBcCi0gICAgICAgZmlsZTovL2ZpeC1jYy1oYW5kbGluZy5wYXRjaCBcCi0gICAgICAgZmlsZTovL3NwbGl0LWhvc3QtYW5kLXRhcmdldC1idWlsZC5wYXRjaCBcCi0gICAgICAgZmlsZTovL2dvdG9vbGRpci5wYXRjaCBcCi0iCi1TUkNfVVJJW21kNXN1bV0gPSAiYmYzZmNlNmNjYWFkZDMxMDE1OWM5ZTg3NDIyMGUyYTIiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjMyNmFlZWQ1Zjg2Y2YxOGYxNmQ2ZGM4MzE0MDU2MTRmODU1ZTJkNDE2YTkxZmQzZmRjMzM0Zjc3MjM0NWIwMCIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjYvYXJtaGYtZWxmLWhlYWRlci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS42L2FybWhmLWVsZi1oZWFkZXIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlM2ExNmIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjYvYXJtaGYtZWxmLWhlYWRlci5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLUVuY29kZSBhcm0gRUFCSSAoIGhhcmQvc29mdCApIGNhbGxpbmcgY29udmVudGlvbiBpbiBFTEYgaGVhZGVyCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLUluZGV4OiBnby9zcmMvY21kL2xpbmsvaW50ZXJuYWwvbGQvZWxmLmdvCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ28ub3JpZy9zcmMvY21kL2xpbmsvaW50ZXJuYWwvbGQvZWxmLmdvCi0rKysgZ28vc3JjL2NtZC9saW5rL2ludGVybmFsL2xkL2VsZi5nbwotQEAgLTgyNyw3ICs4MjcsMTMgQEAKLSAJLy8gMzItYml0IGFyY2hpdGVjdHVyZXMKLSAJY2FzZSAnNSc6Ci0gCQkvLyB3ZSB1c2UgRUFCSSBvbiBib3RoIGxpbnV4L2FybSBhbmQgZnJlZWJzZC9hcm0uCi0tCQlpZiBIRUFEVFlQRSA9PSBvYmouSGxpbnV4IHx8IEhFQURUWVBFID09IG9iai5IZnJlZWJzZCB7Ci0rCQlpZiBIRUFEVFlQRSA9PSBvYmouSGxpbnV4IHsKLSsJCQlpZiBDdHh0LkdvYXJtID09IDcgewotKwkJCQllaGRyLmZsYWdzID0gMHg1MDAwNDAyIC8vIGhhcyBlbnRyeSBwb2ludCwgVmVyc2lvbjUgRUFCSSwgaGFyZCBmbG9hdAotKwkJCX0gZWxzZSB7Ci0rCQkJCWVoZHIuZmxhZ3MgPSAweDUwMDAyMDIgLy8gaGFzIGVudHJ5IHBvaW50LCBWZXJzaW9uNSBFQUJJLCBzb2Z0IGZsb2F0Ci0rCQkJfQotKwkJfSBlbHNlIGlmIEhFQURUWVBFID09IG9iai5IZnJlZWJzZCB7Ci0gCQkJLy8gV2Ugc2V0IGEgdmFsdWUgaGVyZSB0aGF0IG1ha2VzIG5vIGluZGljYXRpb24gb2Ygd2hpY2gKLSAJCQkvLyBmbG9hdCBBQkkgdGhlIG9iamVjdCB1c2VzLCBiZWNhdXNlIHRoaXMgaXMgaW5mb3JtYXRpb24KLSAJCQkvLyB1c2VkIGJ5IHRoZSBkeW5hbWljIGxpbmtlciB0byBjb21wYXJlIGV4ZWN1dGFibGVzIGFuZApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjYvZml4LWNjLWhhbmRsaW5nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjYvZml4LWNjLWhhbmRsaW5nLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODMzMjNhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS42L2ZpeC1jYy1oYW5kbGluZy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLUFjY2VwdCBDQyB3aXRoIG11bHRpcGxlIHdvcmRzIGluIGl0cyBuYW1lCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLUluZGV4OiBnby9zcmMvY21kL2dvL2J1aWxkLmdvCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ28ub3JpZy9zcmMvY21kL2dvL2J1aWxkLmdvCTIwMTUtMDctMjkgMTQ6NDg6NDAuMzIzMTg1ODA3IC0wNzAwCi0rKysgZ28vc3JjL2NtZC9nby9idWlsZC5nbwkyMDE1LTA3LTMwIDA3OjM3OjQwLjUyOTgxODU4NiAtMDcwMAotQEAgLTI4MDUsMTIgKzI4MDUsMjQgQEAKLSAJcmV0dXJuIGIuY2NvbXBpbGVyQ21kKCJDQyIsIGRlZmF1bHRDQywgb2JqZGlyKQotIH0KLSAKLSsvLyBnY2NDbWQgcmV0dXJucyBhIGdjYyBjb21tYW5kIGxpbmUgcHJlZml4Ci0rLy8gZGVmYXVsdENDIGlzIGRlZmluZWQgaW4gemRlZmF1bHRjYy5nbywgd3JpdHRlbiBieSBjbWQvZGlzdC4KLStmdW5jIChiICpidWlsZGVyKSBnY2NDbWRGb3JSZWFsKCkgW11zdHJpbmcgewotKwlyZXR1cm4gZW52TGlzdCgiQ0MiLCBkZWZhdWx0Q0MpCi0rfQotKwotIC8vIGd4eENtZCByZXR1cm5zIGEgZysrIGNvbW1hbmQgbGluZSBwcmVmaXgKLSAvLyBkZWZhdWx0Q1hYIGlzIGRlZmluZWQgaW4gemRlZmF1bHRjYy5nbywgd3JpdHRlbiBieSBjbWQvZGlzdC4KLSBmdW5jIChiICpidWlsZGVyKSBneHhDbWQob2JqZGlyIHN0cmluZykgW11zdHJpbmcgewotIAlyZXR1cm4gYi5jY29tcGlsZXJDbWQoIkNYWCIsIGRlZmF1bHRDWFgsIG9iamRpcikKLSB9Ci0gCi0rLy8gZ3h4Q21kIHJldHVybnMgYSBnKysgY29tbWFuZCBsaW5lIHByZWZpeAotKy8vIGRlZmF1bHRDWFggaXMgZGVmaW5lZCBpbiB6ZGVmYXVsdGNjLmdvLCB3cml0dGVuIGJ5IGNtZC9kaXN0LgotK2Z1bmMgKGIgKmJ1aWxkZXIpIGd4eENtZEZvclJlYWwoKSBbXXN0cmluZyB7Ci0rCXJldHVybiBlbnZMaXN0KCJDWFgiLCBkZWZhdWx0Q1hYKQotK30KLSsKLSAvLyBjY29tcGlsZXJDbWQgcmV0dXJucyBhIGNvbW1hbmQgbGluZSBwcmVmaXggZm9yIHRoZSBnaXZlbiBlbnZpcm9ubWVudAotIC8vIHZhcmlhYmxlIGFuZCB1c2luZyB0aGUgZGVmYXVsdCBjb21tYW5kIHdoZW4gdGhlIHZhcmlhYmxlIGlzIGVtcHR5LgotIGZ1bmMgKGIgKmJ1aWxkZXIpIGNjb21waWxlckNtZChlbnZ2YXIsIGRlZmNtZCwgb2JqZGlyIHN0cmluZykgW11zdHJpbmcgewotSW5kZXg6IGdvL3NyYy9jbWQvZ28vZW52LmdvCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ28ub3JpZy9zcmMvY21kL2dvL2Vudi5nbwkyMDE1LTA3LTI5IDE0OjQ4OjQwLjMyMzE4NTgwNyAtMDcwMAotKysrIGdvL3NyYy9jbWQvZ28vZW52LmdvCTIwMTUtMDctMzAgMDc6NDA6NTQuNDYxNjU1NzIxIC0wNzAwCi1AQCAtNTIsMTAgKzUyLDkgQEAKLSAKLSAJaWYgZ29vcyAhPSAicGxhbjkiIHsKLSAJCWNtZCA6PSBiLmdjY0NtZCgiLiIpCi0tCQllbnYgPSBhcHBlbmQoZW52LCBlbnZWYXJ7IkNDIiwgY21kWzBdfSkKLSsJCWVudiA9IGFwcGVuZChlbnYsIGVudlZhcnsiQ0MiLCBzdHJpbmdzLkpvaW4oYi5nY2NDbWRGb3JSZWFsKCksICIgIil9KQotIAkJZW52ID0gYXBwZW5kKGVudiwgZW52VmFyeyJHT0dDQ0ZMQUdTIiwgc3RyaW5ncy5Kb2luKGNtZFszOl0sICIgIil9KQotLQkJY21kID0gYi5neHhDbWQoIi4iKQotLQkJZW52ID0gYXBwZW5kKGVudiwgZW52VmFyeyJDWFgiLCBjbWRbMF19KQotKwkJZW52ID0gYXBwZW5kKGVudiwgZW52VmFyeyJDWFgiLCBzdHJpbmdzLkpvaW4oYi5neHhDbWRGb3JSZWFsKCksICIgIil9KQotIAl9Ci0gCi0gCWlmIGJ1aWxkQ29udGV4dC5DZ29FbmFibGVkIHsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS42L2ZpeC10YXJnZXQtY2MtZm9yLWJ1aWxkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjYvZml4LXRhcmdldC1jYy1mb3ItYnVpbGQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmNjE1NmUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjYvZml4LXRhcmdldC1jYy1mb3ItYnVpbGQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1QdXQgUXVvdGVzIGFyb3VuZCBDQ19GT1JfVEFSR0VUIHNpbmNlIGl0IGNhbiBiZSBtdXRsaXBsZSB3b3JkcyBlLmcuIGluIE9FCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLUluZGV4OiBnby9zcmMvbWFrZS5iYXNoCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ28ub3JpZy9zcmMvbWFrZS5iYXNoCTIwMTUtMDctMjkgMTM6Mjg6MTEuMzM0MDMxNjk2IC0wNzAwCi0rKysgZ28vc3JjL21ha2UuYmFzaAkyMDE1LTA3LTI5IDEzOjM2OjU1LjgxNDQ2NTYzMCAtMDcwMAotQEAgLTE1OCw3ICsxNTgsNyBAQAotIGZpCi0gCi0gZWNobyAiIyMjIyMgQnVpbGRpbmcgcGFja2FnZXMgYW5kIGNvbW1hbmRzIGZvciAkR09PUy8kR09BUkNILiIKLS1DQz0kQ0NfRk9SX1RBUkdFVCAiJEdPVE9PTERJUiIvZ29fYm9vdHN0cmFwIGluc3RhbGwgJEdPX0ZMQUdTIC1nY2ZsYWdzICIkR09fR0NGTEFHUyIgLWxkZmxhZ3MgIiRHT19MREZMQUdTIiAtdiBzdGQgY21kCi0rQ0M9IiRDQ19GT1JfVEFSR0VUIiAiJEdPVE9PTERJUiIvZ29fYm9vdHN0cmFwIGluc3RhbGwgJEdPX0ZMQUdTIC1nY2ZsYWdzICIkR09fR0NGTEFHUyIgLWxkZmxhZ3MgIiRHT19MREZMQUdTIiAtdiBzdGQgY21kCi0gZWNobwotIAotIHJtIC1mICIkR09UT09MRElSIi9nb19ib290c3RyYXAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS42L2dvdG9vbGRpci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS42L2dvdG9vbGRpci5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ2NzAyNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuNi9nb3Rvb2xkaXIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1EZWZpbmUgdG9vbGRpciBpbiByZWxhdGlvbiB0byBHT1RPT0xESVIgZW52IHZhcgotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi1JbmRleDogZ28vc3JjL2dvL2J1aWxkL2J1aWxkLmdvCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ28ub3JpZy9zcmMvZ28vYnVpbGQvYnVpbGQuZ28KLSsrKyBnby9zcmMvZ28vYnVpbGQvYnVpbGQuZ28KLUBAIC0xMzg4LDcgKzEzODgsNyBAQCBmdW5jIGluaXQoKSB7Ci0gfQotIAotIC8vIFRvb2xEaXIgaXMgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGJ1aWxkIHRvb2xzLgotLXZhciBUb29sRGlyID0gZmlsZXBhdGguSm9pbihydW50aW1lLkdPUk9PVCgpLCAicGtnL3Rvb2wvIitydW50aW1lLkdPT1MrIl8iK3J1bnRpbWUuR09BUkNIKQotK3ZhciBUb29sRGlyID0gZW52T3IoIkdPVE9PTERJUiIsIGZpbGVwYXRoLkpvaW4ocnVudGltZS5HT1JPT1QoKSwgInBrZy90b29sLyIrcnVudGltZS5HT09TKyJfIitydW50aW1lLkdPQVJDSCkpCi0gCi0gLy8gSXNMb2NhbEltcG9ydCByZXBvcnRzIHdoZXRoZXIgdGhlIGltcG9ydCBwYXRoIGlzCi0gLy8gYSBsb2NhbCBpbXBvcnQgcGF0aCwgbGlrZSAiLiIsICIuLiIsICIuL2ZvbyIsIG9yICIuLi9mb28iLgotSW5kZXg6IGdvL3NyYy9jbWQvZ28vYnVpbGQuZ28KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnby5vcmlnL3NyYy9jbWQvZ28vYnVpbGQuZ28KLSsrKyBnby9zcmMvY21kL2dvL2J1aWxkLmdvCi1AQCAtMTMxMiw3ICsxMzEyLDcgQEAgZnVuYyAoYiAqYnVpbGRlcikgYnVpbGQoYSAqYWN0aW9uKSAoZXJyCi0gCQl9Ci0gCi0gCQljZ29FeGUgOj0gdG9vbCgiY2dvIikKLS0JCWlmIGEuY2dvICE9IG5pbCAmJiBhLmNnby50YXJnZXQgIT0gIiIgewotKwkJaWYgYS5jZ28gIT0gbmlsICYmIGEuY2dvLnRhcmdldCAhPSAiIiAmJiBvcy5HZXRlbnYoIkdPVE9PTERJUiIpID09ICIiIHsKLSAJCQljZ29FeGUgPSBhLmNnby50YXJnZXQKLSAJCX0KLSAJCW91dEdvLCBvdXRPYmosIGVyciA6PSBiLmNnbyhhLnAsIGNnb0V4ZSwgb2JqLCBwY0NGTEFHUywgcGNMREZMQUdTLCBjZ29maWxlcywgZ2NjZmlsZXMsIGN4eGZpbGVzLCBhLnAuTUZpbGVzKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjYvc3BsaXQtaG9zdC1hbmQtdGFyZ2V0LWJ1aWxkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjYvc3BsaXQtaG9zdC1hbmQtdGFyZ2V0LWJ1aWxkLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmJhZTAyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS42L3NwbGl0LWhvc3QtYW5kLXRhcmdldC1idWlsZC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLUFkZCBuZXcgb3B0aW9uIC0tdGFyZ2V0LW9ubHkgdG8gYnVpbGQgdGFyZ2V0IGNvbXBvbmVudHMKLVNlcGFyYXRlcyB0aGUgaG9zdCBhbmQgdGFyZ2V0IHBpZWNlcyBvZiBidWlsZAotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi1JbmRleDogZ28vc3JjL21ha2UuYmFzaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdvLm9yaWcvc3JjL21ha2UuYmFzaAotKysrIGdvL3NyYy9tYWtlLmJhc2gKLUBAIC0xNDMsMTIgKzE0MywyMyBAQCBpZiBbICIkMSIgPSAiLS1uby1jbGVhbiIgXTsgdGhlbgotIAlidWlsZGFsbD0iIgotIAlzaGlmdAotIGZpCi0tLi9jbWQvZGlzdC9kaXN0IGJvb3RzdHJhcCAkYnVpbGRhbGwgJEdPX0RJU1RGTEFHUyAtdiAjIGJ1aWxkcyBnb19ib290c3RyYXAKLS0jIERlbGF5IG1vdmUgb2YgZGlzdCB0b29sIHRvIG5vdywgYmVjYXVzZSBib290c3RyYXAgbWF5IGNsZWFyIHRvb2wgZGlyZWN0b3J5LgotLW12IGNtZC9kaXN0L2Rpc3QgIiRHT1RPT0xESVIiL2Rpc3QKLS1lY2hvCi0gCi0taWYgWyAiJEdPSE9TVEFSQ0giICE9ICIkR09BUkNIIiAtbyAiJEdPSE9TVE9TIiAhPSAiJEdPT1MiIF07IHRoZW4KLStkb19ob3N0X2J1aWxkPSJ5ZXMiCi0rZG9fdGFyZ2V0X2J1aWxkPSJ5ZXMiCi0raWYgWyAiJDEiID0gIi0tdGFyZ2V0LW9ubHkiIF07IHRoZW4KLSsJZG9faG9zdF9idWlsZD0ibm8iCi0rCXNoaWZ0Ci0rZWxpZiBbICIkMSIgPSAiLS1ob3N0LW9ubHkiIF07IHRoZW4KLSsJZG9fdGFyZ2V0X2J1aWxkPSJubyIKLSsJc2hpZnQKLStmaQotKwotK2lmIFsgIiRkb19ob3N0X2J1aWxkIiA9ICJ5ZXMiIF07IHRoZW4KLSsJLi9jbWQvZGlzdC9kaXN0IGJvb3RzdHJhcCAkYnVpbGRhbGwgJEdPX0RJU1RGTEFHUyAtdiAjIGJ1aWxkcyBnb19ib290c3RyYXAKLSsJIyBEZWxheSBtb3ZlIG9mIGRpc3QgdG9vbCB0byBub3csIGJlY2F1c2UgYm9vdHN0cmFwIG1heSBjbGVhciB0b29sIGRpcmVjdG9yeS4KLSsJbXYgY21kL2Rpc3QvZGlzdCAiJEdPVE9PTERJUiIvZGlzdAotKwllY2hvCi0rCi0gCWVjaG8gIiMjIyMjIEJ1aWxkaW5nIHBhY2thZ2VzIGFuZCBjb21tYW5kcyBmb3IgaG9zdCwgJEdPSE9TVE9TLyRHT0hPU1RBUkNILiIKLSAJIyBDQ19GT1JfVEFSR0VUIGlzIHJlY29yZGVkIGFzIHRoZSBkZWZhdWx0IGNvbXBpbGVyIGZvciB0aGUgZ28gdG9vbC4gV2hlbiBidWlsZGluZyBmb3IgdGhlIGhvc3QsIGhvd2V2ZXIsCi0gCSMgdXNlIHRoZSBob3N0IGNvbXBpbGVyLCBDQywgZnJvbSBgY21kL2Rpc3QvZGlzdCBlbnZgIGluc3RlYWQuCi1AQCAtMTU3LDExICsxNjgsMjAgQEAgaWYgWyAiJEdPSE9TVEFSQ0giICE9ICIkR09BUkNIIiAtbyAiJEdPSAotIAllY2hvCi0gZmkKLSAKLS1lY2hvICIjIyMjIyBCdWlsZGluZyBwYWNrYWdlcyBhbmQgY29tbWFuZHMgZm9yICRHT09TLyRHT0FSQ0guIgotLUNDPSIkQ0NfRk9SX1RBUkdFVCIgIiRHT1RPT0xESVIiL2dvX2Jvb3RzdHJhcCBpbnN0YWxsICRHT19GTEFHUyAtZ2NmbGFncyAiJEdPX0dDRkxBR1MiIC1sZGZsYWdzICIkR09fTERGTEFHUyIgLXYgc3RkIGNtZAotLWVjaG8KLStpZiBbICIkZG9fdGFyZ2V0X2J1aWxkIiA9ICJ5ZXMiIF07IHRoZW4KLSsgICAgR09fSU5TVEFMTD0iJHtHT19UQVJHRVRfSU5TVEFMTDotc3RkIGNtZH0iCi0rICAgIGVjaG8gIiMjIyMjIEJ1aWxkaW5nIHBhY2thZ2VzIGFuZCBjb21tYW5kcyBmb3IgJEdPT1MvJEdPQVJDSC4iCi0rICAgIGlmIFsgIiRHT0hPU1RPUyIgPSAiJEdPT1MiIC1hICIkR09IT1NUQVJDSCIgPSAiJEdPQVJDSCIgLWEgIiRkb19ob3N0X2J1aWxkIiA9ICJ5ZXMiIF07IHRoZW4KLSsJcm0gLXJmIC4vaG9zdC10b29scwotKwlta2RpciAuL2hvc3QtdG9vbHMKLSsJbXYgIiRHT1RPT0xESVIiLyogLi9ob3N0LXRvb2xzCi0rCUdPVE9PTERJUj0iJFBXRC9ob3N0LXRvb2xzIgotKyAgICBmaQotKyAgICBHT1RPT0xESVI9IiRHT1RPT0xESVIiIENDPSIkQ0NfRk9SX1RBUkdFVCIgIiRHT1RPT0xESVIiL2dvX2Jvb3RzdHJhcCBpbnN0YWxsICRHT19GTEFHUyAtZ2NmbGFncyAiJEdPX0dDRkxBR1MiIC1sZGZsYWdzICIkR09fTERGTEFHUyIgLXYgJHtHT19JTlNUQUxMfQotKyAgICBlY2hvCi0gCi0tcm0gLWYgIiRHT1RPT0xESVIiL2dvX2Jvb3RzdHJhcAotKyAgICBybSAtZiAiJEdPVE9PTERJUiIvZ29fYm9vdHN0cmFwCi0rZmkKLSAKLSBpZiBbICIkMSIgIT0gIi0tbm8tYmFubmVyIiBdOyB0aGVuCi0gCSIkR09UT09MRElSIi9kaXN0IGJhbm5lcgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjYvc3lzbG9nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjYvc3lzbG9nLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWJlMDZmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS42L3N5c2xvZy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLUFkZCB0aW1lb3V0cyB0byBsb2dnZXIKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1kaWZmIC1yIC11IGdvL3NyYy9sb2cvc3lzbG9nL3N5c2xvZy5nbyAvaG9tZS9hY2hhbmcvR09DT1BZL2dvL3NyYy9sb2cvc3lzbG9nL3N5c2xvZy5nbwotLS0tIGdvL3NyYy9sb2cvc3lzbG9nL3N5c2xvZy5nbwkyMDEzLTExLTI4IDEzOjM4OjI4LjAwMDAwMDAwMCAtMDgwMAotKysrIC9ob21lL2FjaGFuZy9HT0NPUFkvZ28vc3JjL2xvZy9zeXNsb2cvc3lzbG9nLmdvCTIwMTQtMTAtMDMgMTE6NDQ6MzcuNzEwNDAzMjAwIC0wNzAwCi1AQCAtMzMsNiArMzMsOSBAQAotIGNvbnN0IHNldmVyaXR5TWFzayA9IDB4MDcKLSBjb25zdCBmYWNpbGl0eU1hc2sgPSAweGY4Ci0gCi0rdmFyIHdyaXRlVGltZW91dCA9IDEgKiB0aW1lLlNlY29uZAotK3ZhciBjb25uZWN0VGltZW91dCA9IDEgKiB0aW1lLlNlY29uZAotKwotIGNvbnN0ICgKLSAJLy8gU2V2ZXJpdHkuCi0gCi1AQCAtMTAwLDYgKzEwMyw3IEBACi0gdHlwZSBzZXJ2ZXJDb25uIGludGVyZmFjZSB7Ci0gCXdyaXRlU3RyaW5nKHAgUHJpb3JpdHksIGhvc3RuYW1lLCB0YWcsIHMsIG5sIHN0cmluZykgZXJyb3IKLSAJY2xvc2UoKSBlcnJvcgotKwlzZXRXcml0ZURlYWRsaW5lKHQgdGltZS5UaW1lKSBlcnJvcgotIH0KLSAKLSB0eXBlIG5ldENvbm4gc3RydWN0IHsKLUBAIC0yNzMsNyArMjc3LDExIEBACi0gCQlubCA9ICJcbiIKLSAJfQotIAotLQllcnIgOj0gdy5jb25uLndyaXRlU3RyaW5nKHAsIHcuaG9zdG5hbWUsIHcudGFnLCBtc2csIG5sKQotKwllcnIgOj0gdy5jb25uLnNldFdyaXRlRGVhZGxpbmUodGltZS5Ob3coKS5BZGQod3JpdGVUaW1lb3V0KSkKLSsJaWYgZXJyICE9IG5pbCB7Ci0rCQlyZXR1cm4gMCwgZXJyCi0rCX0KLSsJZXJyID0gdy5jb25uLndyaXRlU3RyaW5nKHAsIHcuaG9zdG5hbWUsIHcudGFnLCBtc2csIG5sKQotIAlpZiBlcnIgIT0gbmlsIHsKLSAJCXJldHVybiAwLCBlcnIKLSAJfQotQEAgLTMwNSw2ICszMTMsMTAgQEAKLSAJcmV0dXJuIG4uY29ubi5DbG9zZSgpCi0gfQotIAotK2Z1bmMgKG4gKm5ldENvbm4pIHNldFdyaXRlRGVhZGxpbmUodCB0aW1lLlRpbWUpIGVycm9yIHsKLSsJcmV0dXJuIG4uY29ubi5TZXRXcml0ZURlYWRsaW5lKHQpCi0rfQotKwotIC8vIE5ld0xvZ2dlciBjcmVhdGVzIGEgbG9nLkxvZ2dlciB3aG9zZSBvdXRwdXQgaXMgd3JpdHRlbiB0bwotIC8vIHRoZSBzeXN0ZW0gbG9nIHNlcnZpY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHByaW9yaXR5LiBUaGUgbG9nRmxhZwotIC8vIGFyZ3VtZW50IGlzIHRoZSBmbGFnIHNldCBwYXNzZWQgdGhyb3VnaCB0byBsb2cuTmV3IHRvIGNyZWF0ZQotZGlmZiAtciAtdSBnby9zcmMvbG9nL3N5c2xvZy9zeXNsb2dfdW5peC5nbyAvaG9tZS9hY2hhbmcvR09DT1BZL2dvL3NyYy9sb2cvc3lzbG9nL3N5c2xvZ191bml4LmdvCi0tLS0gZ28vc3JjL2xvZy9zeXNsb2cvc3lzbG9nX3VuaXguZ28JMjAxMy0xMS0yOCAxMzozODoyOC4wMDAwMDAwMDAgLTA4MDAKLSsrKyAvaG9tZS9hY2hhbmcvR09DT1BZL2dvL3NyYy9sb2cvc3lzbG9nL3N5c2xvZ191bml4LmdvCTIwMTQtMTAtMDMgMTE6NDQ6MzkuMDEwNDAzMTc1IC0wNzAwCi1AQCAtMTksNyArMTksNyBAQAotIAlsb2dQYXRocyA6PSBbXXN0cmluZ3siL2Rldi9sb2ciLCAiL3Zhci9ydW4vc3lzbG9nIn0KLSAJZm9yIF8sIG5ldHdvcmsgOj0gcmFuZ2UgbG9nVHlwZXMgewotIAkJZm9yIF8sIHBhdGggOj0gcmFuZ2UgbG9nUGF0aHMgewotLQkJCWNvbm4sIGVyciA6PSBuZXQuRGlhbChuZXR3b3JrLCBwYXRoKQotKwkJCWNvbm4sIGVyciA6PSBuZXQuRGlhbFRpbWVvdXQobmV0d29yaywgcGF0aCwgY29ubmVjdFRpbWVvdXQpCi0gCQkJaWYgZXJyICE9IG5pbCB7Ci0gCQkJCWNvbnRpbnVlCi0gCQkJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS43LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS43LmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMzMDA0ZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuNy5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1yZXF1aXJlIGdvLWNvbW1vbi5pbmMKLQotUFYgPSAiMS43LjQiCi1HT19CQVNFVkVSU0lPTiA9ICIxLjciCi1GSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtGSUxFX0RJUk5BTUV9L2dvLSR7R09fQkFTRVZFUlNJT059OiIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NWQ0OTUwZWNiN2IyNmQyYzVlNGU3YjRlMGRkNzQ3MDciCi0KLVNSQ19VUkkgKz0gIlwKLSAgICAgICBmaWxlOi8vYXJtaGYtZWxmLWhlYWRlci5wYXRjaCBcCi0gICAgICAgZmlsZTovL3N5c2xvZy5wYXRjaCBcCi0gICAgICAgZmlsZTovL2ZpeC10YXJnZXQtY2MtZm9yLWJ1aWxkLnBhdGNoIFwKLSAgICAgICBmaWxlOi8vZml4LWNjLWhhbmRsaW5nLnBhdGNoIFwKLSAgICAgICBmaWxlOi8vc3BsaXQtaG9zdC1hbmQtdGFyZ2V0LWJ1aWxkLnBhdGNoIFwKLSAgICAgICBmaWxlOi8vZ290b29sZGlyLnBhdGNoIFwKLSIKLVNSQ19VUklbbWQ1c3VtXSA9ICI0OWMxMDc2NDI4YTVkM2I1YWQ3YWM2NTIzM2ZjY2EyZiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI0YzE4OTExMWU5YmE2NTFhMmJiM2VlODY4YWE4ODFmYWIzNmIyZjJkYTM0MDllODA4ODVjYTc1OGE2YjYxNGNjIgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuNy9hcm1oZi1lbGYtaGVhZGVyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjcvYXJtaGYtZWxmLWhlYWRlci5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUzYTE2Yi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuNy9hcm1oZi1lbGYtaGVhZGVyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotRW5jb2RlIGFybSBFQUJJICggaGFyZC9zb2Z0ICkgY2FsbGluZyBjb252ZW50aW9uIGluIEVMRiBoZWFkZXIKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotSW5kZXg6IGdvL3NyYy9jbWQvbGluay9pbnRlcm5hbC9sZC9lbGYuZ28KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnby5vcmlnL3NyYy9jbWQvbGluay9pbnRlcm5hbC9sZC9lbGYuZ28KLSsrKyBnby9zcmMvY21kL2xpbmsvaW50ZXJuYWwvbGQvZWxmLmdvCi1AQCAtODI3LDcgKzgyNywxMyBAQAotIAkvLyAzMi1iaXQgYXJjaGl0ZWN0dXJlcwotIAljYXNlICc1JzoKLSAJCS8vIHdlIHVzZSBFQUJJIG9uIGJvdGggbGludXgvYXJtIGFuZCBmcmVlYnNkL2FybS4KLS0JCWlmIEhFQURUWVBFID09IG9iai5IbGludXggfHwgSEVBRFRZUEUgPT0gb2JqLkhmcmVlYnNkIHsKLSsJCWlmIEhFQURUWVBFID09IG9iai5IbGludXggewotKwkJCWlmIEN0eHQuR29hcm0gPT0gNyB7Ci0rCQkJCWVoZHIuZmxhZ3MgPSAweDUwMDA0MDIgLy8gaGFzIGVudHJ5IHBvaW50LCBWZXJzaW9uNSBFQUJJLCBoYXJkIGZsb2F0Ci0rCQkJfSBlbHNlIHsKLSsJCQkJZWhkci5mbGFncyA9IDB4NTAwMDIwMiAvLyBoYXMgZW50cnkgcG9pbnQsIFZlcnNpb241IEVBQkksIHNvZnQgZmxvYXQKLSsJCQl9Ci0rCQl9IGVsc2UgaWYgSEVBRFRZUEUgPT0gb2JqLkhmcmVlYnNkIHsKLSAJCQkvLyBXZSBzZXQgYSB2YWx1ZSBoZXJlIHRoYXQgbWFrZXMgbm8gaW5kaWNhdGlvbiBvZiB3aGljaAotIAkJCS8vIGZsb2F0IEFCSSB0aGUgb2JqZWN0IHVzZXMsIGJlY2F1c2UgdGhpcyBpcyBpbmZvcm1hdGlvbgotIAkJCS8vIHVzZWQgYnkgdGhlIGR5bmFtaWMgbGlua2VyIHRvIGNvbXBhcmUgZXhlY3V0YWJsZXMgYW5kCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuNy9maXgtY2MtaGFuZGxpbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuNy9maXgtY2MtaGFuZGxpbmcucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2N2NhZjQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjcvZml4LWNjLWhhbmRsaW5nLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotQWNjZXB0IENDIHdpdGggbXVsdGlwbGUgd29yZHMgaW4gaXRzIG5hbWUKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotSW5kZXg6IGdvL3NyYy9jbWQvZ28vYnVpbGQuZ28KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnby5vcmlnL3NyYy9jbWQvZ28vYnVpbGQuZ28KLSsrKyBnby9zcmMvY21kL2dvL2J1aWxkLmdvCi1AQCAtMjk5MSwxMiArMjk5MSwyNCBAQCBmdW5jIChiICpidWlsZGVyKSBnY2NDbWQob2JqZGlyIHN0cmluZykKLSAJcmV0dXJuIGIuY2NvbXBpbGVyQ21kKCJDQyIsIGRlZmF1bHRDQywgb2JqZGlyKQotIH0KLSAKLSsvLyBnY2NDbWQgcmV0dXJucyBhIGdjYyBjb21tYW5kIGxpbmUgcHJlZml4Ci0rLy8gZGVmYXVsdENDIGlzIGRlZmluZWQgaW4gemRlZmF1bHRjYy5nbywgd3JpdHRlbiBieSBjbWQvZGlzdC4KLStmdW5jIChiICpidWlsZGVyKSBnY2NDbWRGb3JSZWFsKCkgW11zdHJpbmcgewotKwlyZXR1cm4gZW52TGlzdCgiQ0MiLCBkZWZhdWx0Q0MpCi0rfQotKwotIC8vIGd4eENtZCByZXR1cm5zIGEgZysrIGNvbW1hbmQgbGluZSBwcmVmaXgKLSAvLyBkZWZhdWx0Q1hYIGlzIGRlZmluZWQgaW4gemRlZmF1bHRjYy5nbywgd3JpdHRlbiBieSBjbWQvZGlzdC4KLSBmdW5jIChiICpidWlsZGVyKSBneHhDbWQob2JqZGlyIHN0cmluZykgW11zdHJpbmcgewotIAlyZXR1cm4gYi5jY29tcGlsZXJDbWQoIkNYWCIsIGRlZmF1bHRDWFgsIG9iamRpcikKLSB9Ci0gCi0rLy8gZ3h4Q21kIHJldHVybnMgYSBnKysgY29tbWFuZCBsaW5lIHByZWZpeAotKy8vIGRlZmF1bHRDWFggaXMgZGVmaW5lZCBpbiB6ZGVmYXVsdGNjLmdvLCB3cml0dGVuIGJ5IGNtZC9kaXN0LgotK2Z1bmMgKGIgKmJ1aWxkZXIpIGd4eENtZEZvclJlYWwoKSBbXXN0cmluZyB7Ci0rCXJldHVybiBlbnZMaXN0KCJDWFgiLCBkZWZhdWx0Q1hYKQotK30KLSsKLSAvLyBnZm9ydHJhbkNtZCByZXR1cm5zIGEgZ2ZvcnRyYW4gY29tbWFuZCBsaW5lIHByZWZpeC4KLSBmdW5jIChiICpidWlsZGVyKSBnZm9ydHJhbkNtZChvYmpkaXIgc3RyaW5nKSBbXXN0cmluZyB7Ci0gCXJldHVybiBiLmNjb21waWxlckNtZCgiRkMiLCAiZ2ZvcnRyYW4iLCBvYmpkaXIpCi1JbmRleDogZ28vc3JjL2NtZC9nby9lbnYuZ28KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnby5vcmlnL3NyYy9jbWQvZ28vZW52LmdvCi0rKysgZ28vc3JjL2NtZC9nby9lbnYuZ28KLUBAIC01MSwxMCArNTEsOSBAQCBmdW5jIG1rRW52KCkgW11lbnZWYXIgewotIAotIAlpZiBnb29zICE9ICJwbGFuOSIgewotIAkJY21kIDo9IGIuZ2NjQ21kKCIuIikKLS0JCWVudiA9IGFwcGVuZChlbnYsIGVudlZhcnsiQ0MiLCBjbWRbMF19KQotKwkJZW52ID0gYXBwZW5kKGVudiwgZW52VmFyeyJDQyIsIHN0cmluZ3MuSm9pbihiLmdjY0NtZEZvclJlYWwoKSwgIiAiKX0pCi0gCQllbnYgPSBhcHBlbmQoZW52LCBlbnZWYXJ7IkdPR0NDRkxBR1MiLCBzdHJpbmdzLkpvaW4oY21kWzM6XSwgIiAiKX0pCi0tCQljbWQgPSBiLmd4eENtZCgiLiIpCi0tCQllbnYgPSBhcHBlbmQoZW52LCBlbnZWYXJ7IkNYWCIsIGNtZFswXX0pCi0rCQllbnYgPSBhcHBlbmQoZW52LCBlbnZWYXJ7IkNYWCIsIHN0cmluZ3MuSm9pbihiLmd4eENtZEZvclJlYWwoKSwgIiAiKX0pCi0gCX0KLSAKLSAJaWYgYnVpbGRDb250ZXh0LkNnb0VuYWJsZWQgewpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjcvZml4LXRhcmdldC1jYy1mb3ItYnVpbGQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuNy9maXgtdGFyZ2V0LWNjLWZvci1idWlsZC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY2MTU2ZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuNy9maXgtdGFyZ2V0LWNjLWZvci1idWlsZC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLVB1dCBRdW90ZXMgYXJvdW5kIENDX0ZPUl9UQVJHRVQgc2luY2UgaXQgY2FuIGJlIG11dGxpcGxlIHdvcmRzIGUuZy4gaW4gT0UKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotSW5kZXg6IGdvL3NyYy9tYWtlLmJhc2gKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnby5vcmlnL3NyYy9tYWtlLmJhc2gJMjAxNS0wNy0yOSAxMzoyODoxMS4zMzQwMzE2OTYgLTA3MDAKLSsrKyBnby9zcmMvbWFrZS5iYXNoCTIwMTUtMDctMjkgMTM6MzY6NTUuODE0NDY1NjMwIC0wNzAwCi1AQCAtMTU4LDcgKzE1OCw3IEBACi0gZmkKLSAKLSBlY2hvICIjIyMjIyBCdWlsZGluZyBwYWNrYWdlcyBhbmQgY29tbWFuZHMgZm9yICRHT09TLyRHT0FSQ0guIgotLUNDPSRDQ19GT1JfVEFSR0VUICIkR09UT09MRElSIi9nb19ib290c3RyYXAgaW5zdGFsbCAkR09fRkxBR1MgLWdjZmxhZ3MgIiRHT19HQ0ZMQUdTIiAtbGRmbGFncyAiJEdPX0xERkxBR1MiIC12IHN0ZCBjbWQKLStDQz0iJENDX0ZPUl9UQVJHRVQiICIkR09UT09MRElSIi9nb19ib290c3RyYXAgaW5zdGFsbCAkR09fRkxBR1MgLWdjZmxhZ3MgIiRHT19HQ0ZMQUdTIiAtbGRmbGFncyAiJEdPX0xERkxBR1MiIC12IHN0ZCBjbWQKLSBlY2hvCi0gCi0gcm0gLWYgIiRHT1RPT0xESVIiL2dvX2Jvb3RzdHJhcApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjcvZ290b29sZGlyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjcvZ290b29sZGlyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDY3MDI1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS43L2dvdG9vbGRpci5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLURlZmluZSB0b29sZGlyIGluIHJlbGF0aW9uIHRvIEdPVE9PTERJUiBlbnYgdmFyCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLUluZGV4OiBnby9zcmMvZ28vYnVpbGQvYnVpbGQuZ28KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnby5vcmlnL3NyYy9nby9idWlsZC9idWlsZC5nbwotKysrIGdvL3NyYy9nby9idWlsZC9idWlsZC5nbwotQEAgLTEzODgsNyArMTM4OCw3IEBAIGZ1bmMgaW5pdCgpIHsKLSB9Ci0gCi0gLy8gVG9vbERpciBpcyB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYnVpbGQgdG9vbHMuCi0tdmFyIFRvb2xEaXIgPSBmaWxlcGF0aC5Kb2luKHJ1bnRpbWUuR09ST09UKCksICJwa2cvdG9vbC8iK3J1bnRpbWUuR09PUysiXyIrcnVudGltZS5HT0FSQ0gpCi0rdmFyIFRvb2xEaXIgPSBlbnZPcigiR09UT09MRElSIiwgZmlsZXBhdGguSm9pbihydW50aW1lLkdPUk9PVCgpLCAicGtnL3Rvb2wvIitydW50aW1lLkdPT1MrIl8iK3J1bnRpbWUuR09BUkNIKSkKLSAKLSAvLyBJc0xvY2FsSW1wb3J0IHJlcG9ydHMgd2hldGhlciB0aGUgaW1wb3J0IHBhdGggaXMKLSAvLyBhIGxvY2FsIGltcG9ydCBwYXRoLCBsaWtlICIuIiwgIi4uIiwgIi4vZm9vIiwgb3IgIi4uL2ZvbyIuCi1JbmRleDogZ28vc3JjL2NtZC9nby9idWlsZC5nbwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdvLm9yaWcvc3JjL2NtZC9nby9idWlsZC5nbwotKysrIGdvL3NyYy9jbWQvZ28vYnVpbGQuZ28KLUBAIC0xMzEyLDcgKzEzMTIsNyBAQCBmdW5jIChiICpidWlsZGVyKSBidWlsZChhICphY3Rpb24pIChlcnIKLSAJCX0KLSAKLSAJCWNnb0V4ZSA6PSB0b29sKCJjZ28iKQotLQkJaWYgYS5jZ28gIT0gbmlsICYmIGEuY2dvLnRhcmdldCAhPSAiIiB7Ci0rCQlpZiBhLmNnbyAhPSBuaWwgJiYgYS5jZ28udGFyZ2V0ICE9ICIiICYmIG9zLkdldGVudigiR09UT09MRElSIikgPT0gIiIgewotIAkJCWNnb0V4ZSA9IGEuY2dvLnRhcmdldAotIAkJfQotIAkJb3V0R28sIG91dE9iaiwgZXJyIDo9IGIuY2dvKGEucCwgY2dvRXhlLCBvYmosIHBjQ0ZMQUdTLCBwY0xERkxBR1MsIGNnb2ZpbGVzLCBnY2NmaWxlcywgY3h4ZmlsZXMsIGEucC5NRmlsZXMpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuNy9zcGxpdC1ob3N0LWFuZC10YXJnZXQtYnVpbGQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuNy9zcGxpdC1ob3N0LWFuZC10YXJnZXQtYnVpbGQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwZGQ5NWIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjcvc3BsaXQtaG9zdC1hbmQtdGFyZ2V0LWJ1aWxkLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotQWRkIG5ldyBvcHRpb24gLS10YXJnZXQtb25seSB0byBidWlsZCB0YXJnZXQgY29tcG9uZW50cwotU2VwYXJhdGVzIHRoZSBob3N0IGFuZCB0YXJnZXQgcGllY2VzIG9mIGJ1aWxkCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLUluZGV4OiBnby9zcmMvbWFrZS5iYXNoCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ28ub3JpZy9zcmMvbWFrZS5iYXNoCi0rKysgZ28vc3JjL21ha2UuYmFzaAotQEAgLTE1NCwxMyArMTU0LDIyIEBAIGlmIFsgIiQxIiA9ICItLW5vLWNsZWFuIiBdOyB0aGVuCi0gCWJ1aWxkYWxsPSIiCi0gCXNoaWZ0Ci0gZmkKLS0uL2NtZC9kaXN0L2Rpc3QgYm9vdHN0cmFwICRidWlsZGFsbCAkR09fRElTVEZMQUdTIC12ICMgYnVpbGRzIGdvX2Jvb3RzdHJhcAotK2RvX2hvc3RfYnVpbGQ9InllcyIKLStkb190YXJnZXRfYnVpbGQ9InllcyIKLStpZiBbICIkMSIgPSAiLS10YXJnZXQtb25seSIgXTsgdGhlbgotKwlkb19ob3N0X2J1aWxkPSJubyIKLSsJc2hpZnQKLStlbGlmIFsgIiQxIiA9ICItLWhvc3Qtb25seSIgXTsgdGhlbgotKwlkb190YXJnZXRfYnVpbGQ9Im5vIgotKwlzaGlmdAotK2ZpCi0gCi0tIyBEZWxheSBtb3ZlIG9mIGRpc3QgdG9vbCB0byBub3csIGJlY2F1c2UgYm9vdHN0cmFwIG1heSBjbGVhciB0b29sIGRpcmVjdG9yeS4KLS1tdiBjbWQvZGlzdC9kaXN0ICIkR09UT09MRElSIi9kaXN0Ci0tZWNobwotK2lmIFsgIiRkb19ob3N0X2J1aWxkIiA9ICJ5ZXMiIF07IHRoZW4KLSsJLi9jbWQvZGlzdC9kaXN0IGJvb3RzdHJhcCAkYnVpbGRhbGwgJEdPX0RJU1RGTEFHUyAtdiAjIGJ1aWxkcyBnb19ib290c3RyYXAKLSsJIyBEZWxheSBtb3ZlIG9mIGRpc3QgdG9vbCB0byBub3csIGJlY2F1c2UgYm9vdHN0cmFwIG1heSBjbGVhciB0b29sIGRpcmVjdG9yeS4KLSsJbXYgY21kL2Rpc3QvZGlzdCAiJEdPVE9PTERJUiIvZGlzdAotKwllY2hvCi0gCi0taWYgWyAiJEdPSE9TVEFSQ0giICE9ICIkR09BUkNIIiAtbyAiJEdPSE9TVE9TIiAhPSAiJEdPT1MiIF07IHRoZW4KLSAJZWNobyAiIyMjIyMgQnVpbGRpbmcgcGFja2FnZXMgYW5kIGNvbW1hbmRzIGZvciBob3N0LCAkR09IT1NUT1MvJEdPSE9TVEFSQ0guIgotIAkjIENDX0ZPUl9UQVJHRVQgaXMgcmVjb3JkZWQgYXMgdGhlIGRlZmF1bHQgY29tcGlsZXIgZm9yIHRoZSBnbyB0b29sLiBXaGVuIGJ1aWxkaW5nIGZvciB0aGUgaG9zdCwgaG93ZXZlciwKLSAJIyB1c2UgdGhlIGhvc3QgY29tcGlsZXIsIENDLCBmcm9tIGBjbWQvZGlzdC9kaXN0IGVudmAgaW5zdGVhZC4KLUBAIC0xNjksMTEgKzE3OCwyMCBAQCBpZiBbICIkR09IT1NUQVJDSCIgIT0gIiRHT0FSQ0giIC1vICIkR09ICi0gCWVjaG8KLSBmaQotIAotLWVjaG8gIiMjIyMjIEJ1aWxkaW5nIHBhY2thZ2VzIGFuZCBjb21tYW5kcyBmb3IgJEdPT1MvJEdPQVJDSC4iCi0tQ0M9IiRDQ19GT1JfVEFSR0VUIiAiJEdPVE9PTERJUiIvZ29fYm9vdHN0cmFwIGluc3RhbGwgJEdPX0ZMQUdTIC1nY2ZsYWdzICIkR09fR0NGTEFHUyIgLWxkZmxhZ3MgIiRHT19MREZMQUdTIiAtdiBzdGQgY21kCi0tZWNobwotK2lmIFsgIiRkb190YXJnZXRfYnVpbGQiID0gInllcyIgXTsgdGhlbgotKyAgICBHT19JTlNUQUxMPSIke0dPX1RBUkdFVF9JTlNUQUxMOi1zdGQgY21kfSIKLSsgICAgZWNobyAiIyMjIyMgQnVpbGRpbmcgcGFja2FnZXMgYW5kIGNvbW1hbmRzIGZvciAkR09PUy8kR09BUkNILiIKLSsgICAgaWYgWyAiJEdPSE9TVE9TIiA9ICIkR09PUyIgLWEgIiRHT0hPU1RBUkNIIiA9ICIkR09BUkNIIiAtYSAiJGRvX2hvc3RfYnVpbGQiID0gInllcyIgXTsgdGhlbgotKwlybSAtcmYgLi9ob3N0LXRvb2xzCi0rCW1rZGlyIC4vaG9zdC10b29scwotKwltdiAiJEdPVE9PTERJUiIvKiAuL2hvc3QtdG9vbHMKLSsJR09UT09MRElSPSIkUFdEL2hvc3QtdG9vbHMiCi0rICAgIGZpCi0rICAgIEdPVE9PTERJUj0iJEdPVE9PTERJUiIgQ0M9IiRDQ19GT1JfVEFSR0VUIiAiJEdPVE9PTERJUiIvZ29fYm9vdHN0cmFwIGluc3RhbGwgJEdPX0ZMQUdTIC1nY2ZsYWdzICIkR09fR0NGTEFHUyIgLWxkZmxhZ3MgIiRHT19MREZMQUdTIiAtdiAke0dPX0lOU1RBTEx9Ci0rICAgIGVjaG8KLSAKLS1ybSAtZiAiJEdPVE9PTERJUiIvZ29fYm9vdHN0cmFwCi0rICAgIHJtIC1mICIkR09UT09MRElSIi9nb19ib290c3RyYXAKLStmaQotIAotIGlmIFsgIiQxIiAhPSAiLS1uby1iYW5uZXIiIF07IHRoZW4KLSAJIiRHT1RPT0xESVIiL2Rpc3QgYmFubmVyCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuNy9zeXNsb2cucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuNy9zeXNsb2cucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5YmUwNmYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjcvc3lzbG9nLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotQWRkIHRpbWVvdXRzIHRvIGxvZ2dlcgotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLWRpZmYgLXIgLXUgZ28vc3JjL2xvZy9zeXNsb2cvc3lzbG9nLmdvIC9ob21lL2FjaGFuZy9HT0NPUFkvZ28vc3JjL2xvZy9zeXNsb2cvc3lzbG9nLmdvCi0tLS0gZ28vc3JjL2xvZy9zeXNsb2cvc3lzbG9nLmdvCTIwMTMtMTEtMjggMTM6Mzg6MjguMDAwMDAwMDAwIC0wODAwCi0rKysgL2hvbWUvYWNoYW5nL0dPQ09QWS9nby9zcmMvbG9nL3N5c2xvZy9zeXNsb2cuZ28JMjAxNC0xMC0wMyAxMTo0NDozNy43MTA0MDMyMDAgLTA3MDAKLUBAIC0zMyw2ICszMyw5IEBACi0gY29uc3Qgc2V2ZXJpdHlNYXNrID0gMHgwNwotIGNvbnN0IGZhY2lsaXR5TWFzayA9IDB4ZjgKLSAKLSt2YXIgd3JpdGVUaW1lb3V0ID0gMSAqIHRpbWUuU2Vjb25kCi0rdmFyIGNvbm5lY3RUaW1lb3V0ID0gMSAqIHRpbWUuU2Vjb25kCi0rCi0gY29uc3QgKAotIAkvLyBTZXZlcml0eS4KLSAKLUBAIC0xMDAsNiArMTAzLDcgQEAKLSB0eXBlIHNlcnZlckNvbm4gaW50ZXJmYWNlIHsKLSAJd3JpdGVTdHJpbmcocCBQcmlvcml0eSwgaG9zdG5hbWUsIHRhZywgcywgbmwgc3RyaW5nKSBlcnJvcgotIAljbG9zZSgpIGVycm9yCi0rCXNldFdyaXRlRGVhZGxpbmUodCB0aW1lLlRpbWUpIGVycm9yCi0gfQotIAotIHR5cGUgbmV0Q29ubiBzdHJ1Y3QgewotQEAgLTI3Myw3ICsyNzcsMTEgQEAKLSAJCW5sID0gIlxuIgotIAl9Ci0gCi0tCWVyciA6PSB3LmNvbm4ud3JpdGVTdHJpbmcocCwgdy5ob3N0bmFtZSwgdy50YWcsIG1zZywgbmwpCi0rCWVyciA6PSB3LmNvbm4uc2V0V3JpdGVEZWFkbGluZSh0aW1lLk5vdygpLkFkZCh3cml0ZVRpbWVvdXQpKQotKwlpZiBlcnIgIT0gbmlsIHsKLSsJCXJldHVybiAwLCBlcnIKLSsJfQotKwllcnIgPSB3LmNvbm4ud3JpdGVTdHJpbmcocCwgdy5ob3N0bmFtZSwgdy50YWcsIG1zZywgbmwpCi0gCWlmIGVyciAhPSBuaWwgewotIAkJcmV0dXJuIDAsIGVycgotIAl9Ci1AQCAtMzA1LDYgKzMxMywxMCBAQAotIAlyZXR1cm4gbi5jb25uLkNsb3NlKCkKLSB9Ci0gCi0rZnVuYyAobiAqbmV0Q29ubikgc2V0V3JpdGVEZWFkbGluZSh0IHRpbWUuVGltZSkgZXJyb3IgewotKwlyZXR1cm4gbi5jb25uLlNldFdyaXRlRGVhZGxpbmUodCkKLSt9Ci0rCi0gLy8gTmV3TG9nZ2VyIGNyZWF0ZXMgYSBsb2cuTG9nZ2VyIHdob3NlIG91dHB1dCBpcyB3cml0dGVuIHRvCi0gLy8gdGhlIHN5c3RlbSBsb2cgc2VydmljZSB3aXRoIHRoZSBzcGVjaWZpZWQgcHJpb3JpdHkuIFRoZSBsb2dGbGFnCi0gLy8gYXJndW1lbnQgaXMgdGhlIGZsYWcgc2V0IHBhc3NlZCB0aHJvdWdoIHRvIGxvZy5OZXcgdG8gY3JlYXRlCi1kaWZmIC1yIC11IGdvL3NyYy9sb2cvc3lzbG9nL3N5c2xvZ191bml4LmdvIC9ob21lL2FjaGFuZy9HT0NPUFkvZ28vc3JjL2xvZy9zeXNsb2cvc3lzbG9nX3VuaXguZ28KLS0tLSBnby9zcmMvbG9nL3N5c2xvZy9zeXNsb2dfdW5peC5nbwkyMDEzLTExLTI4IDEzOjM4OjI4LjAwMDAwMDAwMCAtMDgwMAotKysrIC9ob21lL2FjaGFuZy9HT0NPUFkvZ28vc3JjL2xvZy9zeXNsb2cvc3lzbG9nX3VuaXguZ28JMjAxNC0xMC0wMyAxMTo0NDozOS4wMTA0MDMxNzUgLTA3MDAKLUBAIC0xOSw3ICsxOSw3IEBACi0gCWxvZ1BhdGhzIDo9IFtdc3RyaW5neyIvZGV2L2xvZyIsICIvdmFyL3J1bi9zeXNsb2cifQotIAlmb3IgXywgbmV0d29yayA6PSByYW5nZSBsb2dUeXBlcyB7Ci0gCQlmb3IgXywgcGF0aCA6PSByYW5nZSBsb2dQYXRocyB7Ci0tCQkJY29ubiwgZXJyIDo9IG5ldC5EaWFsKG5ldHdvcmssIHBhdGgpCi0rCQkJY29ubiwgZXJyIDo9IG5ldC5EaWFsVGltZW91dChuZXR3b3JrLCBwYXRoLCBjb25uZWN0VGltZW91dCkKLSAJCQlpZiBlcnIgIT0gbmlsIHsKLSAJCQkJY29udGludWUKLSAJCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjguaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjguaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzM3NmEyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS44LmluYworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLXJlcXVpcmUgZ28tY29tbW9uLmluYwotCi1HT01JTk9SID0gIiIKLUdPX0JBU0VWRVJTSU9OID0gIjEuOCIKLVBWIC49ICIke0dPTUlOT1J9IgotRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7RklMRV9ESVJOQU1FfS9nby0ke0dPX0JBU0VWRVJTSU9OfToiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTVkNDk1MGVjYjdiMjZkMmM1ZTRlN2I0ZTBkZDc0NzA3IgotCi1TUkNfVVJJICs9ICJcCi0gICAgICAgZmlsZTovL2FybWhmLWVsZi1oZWFkZXIucGF0Y2ggXAotICAgICAgIGZpbGU6Ly9zeXNsb2cucGF0Y2ggXAotICAgICAgIGZpbGU6Ly9maXgtdGFyZ2V0LWNjLWZvci1idWlsZC5wYXRjaCBcCi0gICAgICAgZmlsZTovL2ZpeC1jYy1oYW5kbGluZy5wYXRjaCBcCi0gICAgICAgZmlsZTovL3NwbGl0LWhvc3QtYW5kLXRhcmdldC1idWlsZC5wYXRjaCBcCi0gICAgICAgZmlsZTovL2dvdG9vbGRpci5wYXRjaCBcCi0iCi1TUkNfVVJJW21kNXN1bV0gPSAiNzc0Mzk2MGM5Njg3NjA0MzdiNmUzOTA5M2NmZTZmNjciCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDA2ODY1ZjU4N2I0NGJlNzA5MmYyMDZkNzNmYzFkZTI1MjYwMGI3OWIzY2FjYzU4N2I3NGI1ZWY1YzYyMzU5NiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS44L2FybWhmLWVsZi1oZWFkZXIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuOC9hcm1oZi1lbGYtaGVhZGVyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTA4ODM4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS44L2FybWhmLWVsZi1oZWFkZXIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1FbmNvZGUgYXJtIEVBQkkgKCBoYXJkL3NvZnQgKSBjYWxsaW5nIGNvbnZlbnRpb24gaW4gRUxGIGhlYWRlcgotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi1JbmRleDogZ28vc3JjL2NtZC9saW5rL2ludGVybmFsL2xkL2VsZi5nbwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdvLm9yaWcvc3JjL2NtZC9saW5rL2ludGVybmFsL2xkL2VsZi5nbwotKysrIGdvL3NyYy9jbWQvbGluay9pbnRlcm5hbC9sZC9lbGYuZ28KLUBAIC05NTAsNyArOTUwLDEzIEBAIGZ1bmMgRWxmaW5pdChjdHh0ICpMaW5rKSB7Ci0gCWNhc2Ugc3lzLkFSTSwgc3lzLk1JUFM6Ci0gCQlpZiBTeXNBcmNoLkZhbWlseSA9PSBzeXMuQVJNIHsKLSAJCQkvLyB3ZSB1c2UgRUFCSSBvbiBsaW51eC9hcm0sIGZyZWVic2QvYXJtLCBuZXRic2QvYXJtLgotLQkJCWlmIEhlYWR0eXBlID09IG9iai5IbGludXggfHwgSGVhZHR5cGUgPT0gb2JqLkhmcmVlYnNkIHx8IEhlYWR0eXBlID09IG9iai5IbmV0YnNkIHsKLSsJCQlpZiBIZWFkdHlwZSA9PSBvYmouSGxpbnV4IHsKLSsJCQkJaWYgb2JqLkdPQVJNID09IDcgewotKwkJCQkJZWhkci5mbGFncyA9IDB4NTAwMDQwMiAvLyBoYXMgZW50cnkgcG9pbnQsIFZlcnNpb241IEVBQkksIGhhcmQgZmxvYXQKLSsJCQkJfSBlbHNlIHsKLSsJCQkJCWVoZHIuZmxhZ3MgPSAweDUwMDAyMDIgLy8gaGFzIGVudHJ5IHBvaW50LCBWZXJzaW9uNSBFQUJJLCBzb2Z0IGZsb2F0Ci0rCQkJCX0KLSsJCQl9IGVsc2UgaWYgSGVhZHR5cGUgPT0gb2JqLkhmcmVlYnNkIHx8IEhlYWR0eXBlID09IG9iai5IbmV0YnNkIHsKLSAJCQkJLy8gV2Ugc2V0IGEgdmFsdWUgaGVyZSB0aGF0IG1ha2VzIG5vIGluZGljYXRpb24gb2Ygd2hpY2gKLSAJCQkJLy8gZmxvYXQgQUJJIHRoZSBvYmplY3QgdXNlcywgYmVjYXVzZSB0aGlzIGlzIGluZm9ybWF0aW9uCi0gCQkJCS8vIHVzZWQgYnkgdGhlIGR5bmFtaWMgbGlua2VyIHRvIGNvbXBhcmUgZXhlY3V0YWJsZXMgYW5kCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuOC9maXgtY2MtaGFuZGxpbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuOC9maXgtY2MtaGFuZGxpbmcucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjOWI4MTEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjgvZml4LWNjLWhhbmRsaW5nLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotQWNjZXB0IENDIHdpdGggbXVsdGlwbGUgd29yZHMgaW4gaXRzIG5hbWUKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotSW5kZXg6IGdvL3NyYy9jbWQvZ28vYnVpbGQuZ28KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnby5vcmlnL3NyYy9jbWQvZ28vYnVpbGQuZ28KLSsrKyBnby9zcmMvY21kL2dvL2J1aWxkLmdvCi1AQCAtMzEwMCwxMiArMzEwMCwyNCBAQCBmdW5jIChiICpidWlsZGVyKSBnY2NDbWQob2JqZGlyIHN0cmluZykKLSAJcmV0dXJuIGIuY2NvbXBpbGVyQ21kKCJDQyIsIGRlZmF1bHRDQywgb2JqZGlyKQotIH0KLSAKLSsvLyBnY2NDbWQgcmV0dXJucyBhIGdjYyBjb21tYW5kIGxpbmUgcHJlZml4Ci0rLy8gZGVmYXVsdENDIGlzIGRlZmluZWQgaW4gemRlZmF1bHRjYy5nbywgd3JpdHRlbiBieSBjbWQvZGlzdC4KLStmdW5jIChiICpidWlsZGVyKSBnY2NDbWRGb3JSZWFsKCkgW11zdHJpbmcgewotKwlyZXR1cm4gZW52TGlzdCgiQ0MiLCBkZWZhdWx0Q0MpCi0rfQotKwotIC8vIGd4eENtZCByZXR1cm5zIGEgZysrIGNvbW1hbmQgbGluZSBwcmVmaXgKLSAvLyBkZWZhdWx0Q1hYIGlzIGRlZmluZWQgaW4gemRlZmF1bHRjYy5nbywgd3JpdHRlbiBieSBjbWQvZGlzdC4KLSBmdW5jIChiICpidWlsZGVyKSBneHhDbWQob2JqZGlyIHN0cmluZykgW11zdHJpbmcgewotIAlyZXR1cm4gYi5jY29tcGlsZXJDbWQoIkNYWCIsIGRlZmF1bHRDWFgsIG9iamRpcikKLSB9Ci0gCi0rLy8gZ3h4Q21kIHJldHVybnMgYSBnKysgY29tbWFuZCBsaW5lIHByZWZpeAotKy8vIGRlZmF1bHRDWFggaXMgZGVmaW5lZCBpbiB6ZGVmYXVsdGNjLmdvLCB3cml0dGVuIGJ5IGNtZC9kaXN0LgotK2Z1bmMgKGIgKmJ1aWxkZXIpIGd4eENtZEZvclJlYWwoKSBbXXN0cmluZyB7Ci0rCXJldHVybiBlbnZMaXN0KCJDWFgiLCBkZWZhdWx0Q1hYKQotK30KLSsKLSAvLyBnZm9ydHJhbkNtZCByZXR1cm5zIGEgZ2ZvcnRyYW4gY29tbWFuZCBsaW5lIHByZWZpeC4KLSBmdW5jIChiICpidWlsZGVyKSBnZm9ydHJhbkNtZChvYmpkaXIgc3RyaW5nKSBbXXN0cmluZyB7Ci0gCXJldHVybiBiLmNjb21waWxlckNtZCgiRkMiLCAiZ2ZvcnRyYW4iLCBvYmpkaXIpCi1JbmRleDogZ28vc3JjL2NtZC9nby9lbnYuZ28KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnby5vcmlnL3NyYy9jbWQvZ28vZW52LmdvCi0rKysgZ28vc3JjL2NtZC9nby9lbnYuZ28KLUBAIC02MywxMCArNjMsOSBAQCBmdW5jIG1rRW52KCkgW11lbnZWYXIgewotIAl9Ci0gCi0gCWNtZCA6PSBiLmdjY0NtZCgiLiIpCi0tCWVudiA9IGFwcGVuZChlbnYsIGVudlZhcnsiQ0MiLCBjbWRbMF19KQotKwllbnYgPSBhcHBlbmQoZW52LCBlbnZWYXJ7IkNDIiwgc3RyaW5ncy5Kb2luKGIuZ2NjQ21kRm9yUmVhbCgpLCAiICIpfSkKLSAJZW52ID0gYXBwZW5kKGVudiwgZW52VmFyeyJHT0dDQ0ZMQUdTIiwgc3RyaW5ncy5Kb2luKGNtZFszOl0sICIgIil9KQotLQljbWQgPSBiLmd4eENtZCgiLiIpCi0tCWVudiA9IGFwcGVuZChlbnYsIGVudlZhcnsiQ1hYIiwgY21kWzBdfSkKLSsJZW52ID0gYXBwZW5kKGVudiwgZW52VmFyeyJDWFgiLCBzdHJpbmdzLkpvaW4oYi5neHhDbWRGb3JSZWFsKCksICIgIil9KQotIAotIAlpZiBidWlsZENvbnRleHQuQ2dvRW5hYmxlZCB7Ci0gCQllbnYgPSBhcHBlbmQoZW52LCBlbnZWYXJ7IkNHT19FTkFCTEVEIiwgIjEifSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS44L2ZpeC10YXJnZXQtY2MtZm9yLWJ1aWxkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjgvZml4LXRhcmdldC1jYy1mb3ItYnVpbGQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmNjE1NmUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjgvZml4LXRhcmdldC1jYy1mb3ItYnVpbGQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1QdXQgUXVvdGVzIGFyb3VuZCBDQ19GT1JfVEFSR0VUIHNpbmNlIGl0IGNhbiBiZSBtdXRsaXBsZSB3b3JkcyBlLmcuIGluIE9FCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLUluZGV4OiBnby9zcmMvbWFrZS5iYXNoCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ28ub3JpZy9zcmMvbWFrZS5iYXNoCTIwMTUtMDctMjkgMTM6Mjg6MTEuMzM0MDMxNjk2IC0wNzAwCi0rKysgZ28vc3JjL21ha2UuYmFzaAkyMDE1LTA3LTI5IDEzOjM2OjU1LjgxNDQ2NTYzMCAtMDcwMAotQEAgLTE1OCw3ICsxNTgsNyBAQAotIGZpCi0gCi0gZWNobyAiIyMjIyMgQnVpbGRpbmcgcGFja2FnZXMgYW5kIGNvbW1hbmRzIGZvciAkR09PUy8kR09BUkNILiIKLS1DQz0kQ0NfRk9SX1RBUkdFVCAiJEdPVE9PTERJUiIvZ29fYm9vdHN0cmFwIGluc3RhbGwgJEdPX0ZMQUdTIC1nY2ZsYWdzICIkR09fR0NGTEFHUyIgLWxkZmxhZ3MgIiRHT19MREZMQUdTIiAtdiBzdGQgY21kCi0rQ0M9IiRDQ19GT1JfVEFSR0VUIiAiJEdPVE9PTERJUiIvZ29fYm9vdHN0cmFwIGluc3RhbGwgJEdPX0ZMQUdTIC1nY2ZsYWdzICIkR09fR0NGTEFHUyIgLWxkZmxhZ3MgIiRHT19MREZMQUdTIiAtdiBzdGQgY21kCi0gZWNobwotIAotIHJtIC1mICIkR09UT09MRElSIi9nb19ib290c3RyYXAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS44L2dvdG9vbGRpci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS44L2dvdG9vbGRpci5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ2NzAyNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuOC9nb3Rvb2xkaXIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1EZWZpbmUgdG9vbGRpciBpbiByZWxhdGlvbiB0byBHT1RPT0xESVIgZW52IHZhcgotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi1JbmRleDogZ28vc3JjL2dvL2J1aWxkL2J1aWxkLmdvCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ28ub3JpZy9zcmMvZ28vYnVpbGQvYnVpbGQuZ28KLSsrKyBnby9zcmMvZ28vYnVpbGQvYnVpbGQuZ28KLUBAIC0xMzg4LDcgKzEzODgsNyBAQCBmdW5jIGluaXQoKSB7Ci0gfQotIAotIC8vIFRvb2xEaXIgaXMgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGJ1aWxkIHRvb2xzLgotLXZhciBUb29sRGlyID0gZmlsZXBhdGguSm9pbihydW50aW1lLkdPUk9PVCgpLCAicGtnL3Rvb2wvIitydW50aW1lLkdPT1MrIl8iK3J1bnRpbWUuR09BUkNIKQotK3ZhciBUb29sRGlyID0gZW52T3IoIkdPVE9PTERJUiIsIGZpbGVwYXRoLkpvaW4ocnVudGltZS5HT1JPT1QoKSwgInBrZy90b29sLyIrcnVudGltZS5HT09TKyJfIitydW50aW1lLkdPQVJDSCkpCi0gCi0gLy8gSXNMb2NhbEltcG9ydCByZXBvcnRzIHdoZXRoZXIgdGhlIGltcG9ydCBwYXRoIGlzCi0gLy8gYSBsb2NhbCBpbXBvcnQgcGF0aCwgbGlrZSAiLiIsICIuLiIsICIuL2ZvbyIsIG9yICIuLi9mb28iLgotSW5kZXg6IGdvL3NyYy9jbWQvZ28vYnVpbGQuZ28KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnby5vcmlnL3NyYy9jbWQvZ28vYnVpbGQuZ28KLSsrKyBnby9zcmMvY21kL2dvL2J1aWxkLmdvCi1AQCAtMTMxMiw3ICsxMzEyLDcgQEAgZnVuYyAoYiAqYnVpbGRlcikgYnVpbGQoYSAqYWN0aW9uKSAoZXJyCi0gCQl9Ci0gCi0gCQljZ29FeGUgOj0gdG9vbCgiY2dvIikKLS0JCWlmIGEuY2dvICE9IG5pbCAmJiBhLmNnby50YXJnZXQgIT0gIiIgewotKwkJaWYgYS5jZ28gIT0gbmlsICYmIGEuY2dvLnRhcmdldCAhPSAiIiAmJiBvcy5HZXRlbnYoIkdPVE9PTERJUiIpID09ICIiIHsKLSAJCQljZ29FeGUgPSBhLmNnby50YXJnZXQKLSAJCX0KLSAJCW91dEdvLCBvdXRPYmosIGVyciA6PSBiLmNnbyhhLnAsIGNnb0V4ZSwgb2JqLCBwY0NGTEFHUywgcGNMREZMQUdTLCBjZ29maWxlcywgZ2NjZmlsZXMsIGN4eGZpbGVzLCBhLnAuTUZpbGVzKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjgvc3BsaXQtaG9zdC1hbmQtdGFyZ2V0LWJ1aWxkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjgvc3BsaXQtaG9zdC1hbmQtdGFyZ2V0LWJ1aWxkLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGRkOTViLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS44L3NwbGl0LWhvc3QtYW5kLXRhcmdldC1idWlsZC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLUFkZCBuZXcgb3B0aW9uIC0tdGFyZ2V0LW9ubHkgdG8gYnVpbGQgdGFyZ2V0IGNvbXBvbmVudHMKLVNlcGFyYXRlcyB0aGUgaG9zdCBhbmQgdGFyZ2V0IHBpZWNlcyBvZiBidWlsZAotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi1JbmRleDogZ28vc3JjL21ha2UuYmFzaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdvLm9yaWcvc3JjL21ha2UuYmFzaAotKysrIGdvL3NyYy9tYWtlLmJhc2gKLUBAIC0xNTQsMTMgKzE1NCwyMiBAQCBpZiBbICIkMSIgPSAiLS1uby1jbGVhbiIgXTsgdGhlbgotIAlidWlsZGFsbD0iIgotIAlzaGlmdAotIGZpCi0tLi9jbWQvZGlzdC9kaXN0IGJvb3RzdHJhcCAkYnVpbGRhbGwgJEdPX0RJU1RGTEFHUyAtdiAjIGJ1aWxkcyBnb19ib290c3RyYXAKLStkb19ob3N0X2J1aWxkPSJ5ZXMiCi0rZG9fdGFyZ2V0X2J1aWxkPSJ5ZXMiCi0raWYgWyAiJDEiID0gIi0tdGFyZ2V0LW9ubHkiIF07IHRoZW4KLSsJZG9faG9zdF9idWlsZD0ibm8iCi0rCXNoaWZ0Ci0rZWxpZiBbICIkMSIgPSAiLS1ob3N0LW9ubHkiIF07IHRoZW4KLSsJZG9fdGFyZ2V0X2J1aWxkPSJubyIKLSsJc2hpZnQKLStmaQotIAotLSMgRGVsYXkgbW92ZSBvZiBkaXN0IHRvb2wgdG8gbm93LCBiZWNhdXNlIGJvb3RzdHJhcCBtYXkgY2xlYXIgdG9vbCBkaXJlY3RvcnkuCi0tbXYgY21kL2Rpc3QvZGlzdCAiJEdPVE9PTERJUiIvZGlzdAotLWVjaG8KLStpZiBbICIkZG9faG9zdF9idWlsZCIgPSAieWVzIiBdOyB0aGVuCi0rCS4vY21kL2Rpc3QvZGlzdCBib290c3RyYXAgJGJ1aWxkYWxsICRHT19ESVNURkxBR1MgLXYgIyBidWlsZHMgZ29fYm9vdHN0cmFwCi0rCSMgRGVsYXkgbW92ZSBvZiBkaXN0IHRvb2wgdG8gbm93LCBiZWNhdXNlIGJvb3RzdHJhcCBtYXkgY2xlYXIgdG9vbCBkaXJlY3RvcnkuCi0rCW12IGNtZC9kaXN0L2Rpc3QgIiRHT1RPT0xESVIiL2Rpc3QKLSsJZWNobwotIAotLWlmIFsgIiRHT0hPU1RBUkNIIiAhPSAiJEdPQVJDSCIgLW8gIiRHT0hPU1RPUyIgIT0gIiRHT09TIiBdOyB0aGVuCi0gCWVjaG8gIiMjIyMjIEJ1aWxkaW5nIHBhY2thZ2VzIGFuZCBjb21tYW5kcyBmb3IgaG9zdCwgJEdPSE9TVE9TLyRHT0hPU1RBUkNILiIKLSAJIyBDQ19GT1JfVEFSR0VUIGlzIHJlY29yZGVkIGFzIHRoZSBkZWZhdWx0IGNvbXBpbGVyIGZvciB0aGUgZ28gdG9vbC4gV2hlbiBidWlsZGluZyBmb3IgdGhlIGhvc3QsIGhvd2V2ZXIsCi0gCSMgdXNlIHRoZSBob3N0IGNvbXBpbGVyLCBDQywgZnJvbSBgY21kL2Rpc3QvZGlzdCBlbnZgIGluc3RlYWQuCi1AQCAtMTY5LDExICsxNzgsMjAgQEAgaWYgWyAiJEdPSE9TVEFSQ0giICE9ICIkR09BUkNIIiAtbyAiJEdPSAotIAllY2hvCi0gZmkKLSAKLS1lY2hvICIjIyMjIyBCdWlsZGluZyBwYWNrYWdlcyBhbmQgY29tbWFuZHMgZm9yICRHT09TLyRHT0FSQ0guIgotLUNDPSIkQ0NfRk9SX1RBUkdFVCIgIiRHT1RPT0xESVIiL2dvX2Jvb3RzdHJhcCBpbnN0YWxsICRHT19GTEFHUyAtZ2NmbGFncyAiJEdPX0dDRkxBR1MiIC1sZGZsYWdzICIkR09fTERGTEFHUyIgLXYgc3RkIGNtZAotLWVjaG8KLStpZiBbICIkZG9fdGFyZ2V0X2J1aWxkIiA9ICJ5ZXMiIF07IHRoZW4KLSsgICAgR09fSU5TVEFMTD0iJHtHT19UQVJHRVRfSU5TVEFMTDotc3RkIGNtZH0iCi0rICAgIGVjaG8gIiMjIyMjIEJ1aWxkaW5nIHBhY2thZ2VzIGFuZCBjb21tYW5kcyBmb3IgJEdPT1MvJEdPQVJDSC4iCi0rICAgIGlmIFsgIiRHT0hPU1RPUyIgPSAiJEdPT1MiIC1hICIkR09IT1NUQVJDSCIgPSAiJEdPQVJDSCIgLWEgIiRkb19ob3N0X2J1aWxkIiA9ICJ5ZXMiIF07IHRoZW4KLSsJcm0gLXJmIC4vaG9zdC10b29scwotKwlta2RpciAuL2hvc3QtdG9vbHMKLSsJbXYgIiRHT1RPT0xESVIiLyogLi9ob3N0LXRvb2xzCi0rCUdPVE9PTERJUj0iJFBXRC9ob3N0LXRvb2xzIgotKyAgICBmaQotKyAgICBHT1RPT0xESVI9IiRHT1RPT0xESVIiIENDPSIkQ0NfRk9SX1RBUkdFVCIgIiRHT1RPT0xESVIiL2dvX2Jvb3RzdHJhcCBpbnN0YWxsICRHT19GTEFHUyAtZ2NmbGFncyAiJEdPX0dDRkxBR1MiIC1sZGZsYWdzICIkR09fTERGTEFHUyIgLXYgJHtHT19JTlNUQUxMfQotKyAgICBlY2hvCi0gCi0tcm0gLWYgIiRHT1RPT0xESVIiL2dvX2Jvb3RzdHJhcAotKyAgICBybSAtZiAiJEdPVE9PTERJUiIvZ29fYm9vdHN0cmFwCi0rZmkKLSAKLSBpZiBbICIkMSIgIT0gIi0tbm8tYmFubmVyIiBdOyB0aGVuCi0gCSIkR09UT09MRElSIi9kaXN0IGJhbm5lcgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjgvc3lzbG9nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjgvc3lzbG9nLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWJlMDZmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS44L3N5c2xvZy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLUFkZCB0aW1lb3V0cyB0byBsb2dnZXIKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1kaWZmIC1yIC11IGdvL3NyYy9sb2cvc3lzbG9nL3N5c2xvZy5nbyAvaG9tZS9hY2hhbmcvR09DT1BZL2dvL3NyYy9sb2cvc3lzbG9nL3N5c2xvZy5nbwotLS0tIGdvL3NyYy9sb2cvc3lzbG9nL3N5c2xvZy5nbwkyMDEzLTExLTI4IDEzOjM4OjI4LjAwMDAwMDAwMCAtMDgwMAotKysrIC9ob21lL2FjaGFuZy9HT0NPUFkvZ28vc3JjL2xvZy9zeXNsb2cvc3lzbG9nLmdvCTIwMTQtMTAtMDMgMTE6NDQ6MzcuNzEwNDAzMjAwIC0wNzAwCi1AQCAtMzMsNiArMzMsOSBAQAotIGNvbnN0IHNldmVyaXR5TWFzayA9IDB4MDcKLSBjb25zdCBmYWNpbGl0eU1hc2sgPSAweGY4Ci0gCi0rdmFyIHdyaXRlVGltZW91dCA9IDEgKiB0aW1lLlNlY29uZAotK3ZhciBjb25uZWN0VGltZW91dCA9IDEgKiB0aW1lLlNlY29uZAotKwotIGNvbnN0ICgKLSAJLy8gU2V2ZXJpdHkuCi0gCi1AQCAtMTAwLDYgKzEwMyw3IEBACi0gdHlwZSBzZXJ2ZXJDb25uIGludGVyZmFjZSB7Ci0gCXdyaXRlU3RyaW5nKHAgUHJpb3JpdHksIGhvc3RuYW1lLCB0YWcsIHMsIG5sIHN0cmluZykgZXJyb3IKLSAJY2xvc2UoKSBlcnJvcgotKwlzZXRXcml0ZURlYWRsaW5lKHQgdGltZS5UaW1lKSBlcnJvcgotIH0KLSAKLSB0eXBlIG5ldENvbm4gc3RydWN0IHsKLUBAIC0yNzMsNyArMjc3LDExIEBACi0gCQlubCA9ICJcbiIKLSAJfQotIAotLQllcnIgOj0gdy5jb25uLndyaXRlU3RyaW5nKHAsIHcuaG9zdG5hbWUsIHcudGFnLCBtc2csIG5sKQotKwllcnIgOj0gdy5jb25uLnNldFdyaXRlRGVhZGxpbmUodGltZS5Ob3coKS5BZGQod3JpdGVUaW1lb3V0KSkKLSsJaWYgZXJyICE9IG5pbCB7Ci0rCQlyZXR1cm4gMCwgZXJyCi0rCX0KLSsJZXJyID0gdy5jb25uLndyaXRlU3RyaW5nKHAsIHcuaG9zdG5hbWUsIHcudGFnLCBtc2csIG5sKQotIAlpZiBlcnIgIT0gbmlsIHsKLSAJCXJldHVybiAwLCBlcnIKLSAJfQotQEAgLTMwNSw2ICszMTMsMTAgQEAKLSAJcmV0dXJuIG4uY29ubi5DbG9zZSgpCi0gfQotIAotK2Z1bmMgKG4gKm5ldENvbm4pIHNldFdyaXRlRGVhZGxpbmUodCB0aW1lLlRpbWUpIGVycm9yIHsKLSsJcmV0dXJuIG4uY29ubi5TZXRXcml0ZURlYWRsaW5lKHQpCi0rfQotKwotIC8vIE5ld0xvZ2dlciBjcmVhdGVzIGEgbG9nLkxvZ2dlciB3aG9zZSBvdXRwdXQgaXMgd3JpdHRlbiB0bwotIC8vIHRoZSBzeXN0ZW0gbG9nIHNlcnZpY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHByaW9yaXR5LiBUaGUgbG9nRmxhZwotIC8vIGFyZ3VtZW50IGlzIHRoZSBmbGFnIHNldCBwYXNzZWQgdGhyb3VnaCB0byBsb2cuTmV3IHRvIGNyZWF0ZQotZGlmZiAtciAtdSBnby9zcmMvbG9nL3N5c2xvZy9zeXNsb2dfdW5peC5nbyAvaG9tZS9hY2hhbmcvR09DT1BZL2dvL3NyYy9sb2cvc3lzbG9nL3N5c2xvZ191bml4LmdvCi0tLS0gZ28vc3JjL2xvZy9zeXNsb2cvc3lzbG9nX3VuaXguZ28JMjAxMy0xMS0yOCAxMzozODoyOC4wMDAwMDAwMDAgLTA4MDAKLSsrKyAvaG9tZS9hY2hhbmcvR09DT1BZL2dvL3NyYy9sb2cvc3lzbG9nL3N5c2xvZ191bml4LmdvCTIwMTQtMTAtMDMgMTE6NDQ6MzkuMDEwNDAzMTc1IC0wNzAwCi1AQCAtMTksNyArMTksNyBAQAotIAlsb2dQYXRocyA6PSBbXXN0cmluZ3siL2Rldi9sb2ciLCAiL3Zhci9ydW4vc3lzbG9nIn0KLSAJZm9yIF8sIG5ldHdvcmsgOj0gcmFuZ2UgbG9nVHlwZXMgewotIAkJZm9yIF8sIHBhdGggOj0gcmFuZ2UgbG9nUGF0aHMgewotLQkJCWNvbm4sIGVyciA6PSBuZXQuRGlhbChuZXR3b3JrLCBwYXRoKQotKwkJCWNvbm4sIGVyciA6PSBuZXQuRGlhbFRpbWVvdXQobmV0d29yaywgcGF0aCwgY29ubmVjdFRpbWVvdXQpCi0gCQkJaWYgZXJyICE9IG5pbCB7Ci0gCQkJCWNvbnRpbnVlCi0gCQkJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS45LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS45LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjEyMjQxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjkuaW5jCkBAIC0wLDAgKzEsMjMgQEAKK3JlcXVpcmUgZ28tY29tbW9uLmluYworCitHT19CQVNFVkVSU0lPTiA9ICIxLjkiCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtGSUxFX0RJUk5BTUV9L2dvLSR7R09fQkFTRVZFUlNJT059OiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NWQ0OTUwZWNiN2IyNmQyYzVlNGU3YjRlMGRkNzQ3MDciCisKK1NSQ19VUkkgKz0gIlwKKyAgICAgICAgZmlsZTovLzAwMDEtbWFrZS5iYXNoLXF1b3RlLUNDX0ZPUl9UQVJHRVQucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMi1jbWQtZ28tZml4LUNDLWFuZC1DWFgtZW52aXJvbm1lbnQtdmFyaWFibGUtY29uc3RydWN0LnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDMtbWFrZS5iYXNoLWJldHRlci1zZXBhcmF0ZS1ob3N0LWFuZC10YXJnZXQtYnVpbGRzLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDQtY21kLWdvLWFsbG93LUdPVE9PTERJUi10by1iZS1vdmVycmlkZGVuLWluLXRoZS1lbnZpci5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDA1LWNtZC1nby1tYWtlLUdPUk9PVC1wcmVjaW91cy1ieS1kZWZhdWx0LnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDYtbWFrZS5iYXNoLWFkZC1HT1RPT0xESVJfQk9PVFNUUkFQLWVudmlyb25tZW50LXZhcmlhYi5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDA3LWxkLWFkZC1zb25hbWUtdG8tc2hhcmVhYmxlLW9iamVjdHMucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwOC1tYWtlLmJhc2gtYWRkLUdPSE9TVHh4LWluZGlyZWN0aW9uLWZvci1jcm9zcy1jYW5hZGlhLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDktY21kLWdvLWJ1aWxkbW9kZS1waWUtZm9yY2VzLWV4dGVybmFsLWxpbmtpbmctbW9kZS1vbi5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDEwLW1ha2UuYmFzaC1vdmVycmlkZS1DQy13aGVuLWJ1aWxkaW5nLWRpc3QtYW5kLWdvX2Jvb3QucGF0Y2ggXAorIgorU1JDX1VSSV9hcHBlbmRfbGliYy1tdXNsID0gIiBmaWxlOi8vc2V0LWV4dGVybmFsLWxpbmtlci5wYXRjaCIKKworU1JDX1VSSVttYWluLm1kNXN1bV0gPSAiZGEyZDQ0ZWEzODQwNzZlZmVjNDNlZTFmOGI3ZDQ1ZDIiCitTUkNfVVJJW21haW4uc2hhMjU2c3VtXSA9ICJhNGFiMjI5MDI4ZWQxNjdiYTE5ODY4MjU3NTE0NjM2MDUyNjRlNDQ4NjgzNjJjYThlN2FjY2M4YmUwNTdlOTkzIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjkvMDAwMS1tYWtlLmJhc2gtcXVvdGUtQ0NfRk9SX1RBUkdFVC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS45LzAwMDEtbWFrZS5iYXNoLXF1b3RlLUNDX0ZPUl9UQVJHRVQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgwMDk3NQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS45LzAwMDEtbWFrZS5iYXNoLXF1b3RlLUNDX0ZPUl9UQVJHRVQucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSBkMjQ3MzRhZDQ0MDA2NzkxZmQ0OGZjNDVlYTM0ZmU2MDhmZjY3MmZiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWF0dCBNYWRpc29uIDxtYXR0QG1hZGlzb24uc3lzdGVtcz4KK0RhdGU6IFdlZCwgMTMgU2VwIDIwMTcgMDg6MDQ6MjMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAxLzddIG1ha2UuYmFzaDogcXVvdGUgQ0NfRk9SX1RBUkdFVAorCitGb3IgT0UgY3Jvc3MtYnVpbGRzLCAkQ0NfRk9SX1RBUkdFVCBoYXMgbW9yZSB0aGFuCitvbmUgd29yZCBhbmQgbmVlZHMgdG8gYmUgcXVvdGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hdHQgTWFkaXNvbiA8bWF0dEBtYWRpc29uLnN5c3RlbXM+CistLS0KKyBzcmMvbWFrZS5iYXNoIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL21ha2UuYmFzaCBiL3NyYy9tYWtlLmJhc2gKK2luZGV4IDcxZTc1MzEuLmRjZjMyNTYgMTAwNzU1CistLS0gYS9zcmMvbWFrZS5iYXNoCisrKysgYi9zcmMvbWFrZS5iYXNoCitAQCAtMTc1LDcgKzE3NSw3IEBAIGVjaG8gIiMjIyMjIEJ1aWxkaW5nIHBhY2thZ2VzIGFuZCBjb21tYW5kcyBmb3IgJEdPT1MvJEdPQVJDSC4iCisgCisgb2xkX2Jpbl9maWxlcz0kKGNkICRHT1JPT1QvYmluICYmIGVjaG8gKikKKyAKKy1DQz0kQ0NfRk9SX1RBUkdFVCAiJEdPVE9PTERJUiIvZ29fYm9vdHN0cmFwIGluc3RhbGwgJEdPX0ZMQUdTIC1nY2ZsYWdzICIkR09fR0NGTEFHUyIgLWxkZmxhZ3MgIiRHT19MREZMQUdTIiAtdiBzdGQgY21kCisrQ0M9IiRDQ19GT1JfVEFSR0VUIiAiJEdPVE9PTERJUiIvZ29fYm9vdHN0cmFwIGluc3RhbGwgJEdPX0ZMQUdTIC1nY2ZsYWdzICIkR09fR0NGTEFHUyIgLWxkZmxhZ3MgIiRHT19MREZMQUdTIiAtdiBzdGQgY21kCisgCisgIyBDaGVjayB0aGF0IHRoZXJlIGFyZSBubyBuZXcgZmlsZXMgaW4gJEdPUk9PVC9iaW4gb3RoZXIgdGhhbiBnbyBhbmQgZ29mbXQKKyAjIGFuZCAkR09PU18kR09BUkNIIChhIGRpcmVjdG9yeSB1c2VkIHdoZW4gY3Jvc3MtY29tcGlsaW5nKS4KKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjkvMDAwMi1jbWQtZ28tZml4LUNDLWFuZC1DWFgtZW52aXJvbm1lbnQtdmFyaWFibGUtY29uc3RydWN0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjkvMDAwMi1jbWQtZ28tZml4LUNDLWFuZC1DWFgtZW52aXJvbm1lbnQtdmFyaWFibGUtY29uc3RydWN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZTQyMjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuOS8wMDAyLWNtZC1nby1maXgtQ0MtYW5kLUNYWC1lbnZpcm9ubWVudC12YXJpYWJsZS1jb25zdHJ1Y3QucGF0Y2gKQEAgLTAsMCArMSw2NyBAQAorRnJvbSBhNzE3MGQzMmExM2FlYWQ2MDhhYmQxODk5NmY2ZGFiMmUyYTYzMWI1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWF0dCBNYWRpc29uIDxtYXR0QG1hZGlzb24uc3lzdGVtcz4KK0RhdGU6IFdlZCwgMTMgU2VwIDIwMTcgMDg6MDY6MzcgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAyLzddIGNtZC9nbzogZml4IENDIGFuZCBDWFggZW52aXJvbm1lbnQgdmFyaWFibGUgY29uc3RydWN0aW9uCisKK0ZvciBPRSBjcm9zcy1idWlsZHMsIENDIGFuZCBDWFggaGF2ZSBtdWx0aXBsZSB3b3JkcywgYW5kCit3ZSBuZWVkIHRoZWlyIGNvbXBsZXRlIGRlZmluaXRpb25zIHdoZW4gc2V0dGluZyB1cCB0aGUKK2Vudmlyb25tZW50IGR1cmluZyBHbyBidWlsZHMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogTWF0dCBNYWRpc29uIDxtYXR0QG1hZGlzb24uc3lzdGVtcz4KKy0tLQorIHNyYy9jbWQvZ28vaW50ZXJuYWwvZW52Y21kL2Vudi5nbyB8ICA0ICsrLS0KKyBzcmMvY21kL2dvL2ludGVybmFsL3dvcmsvYnVpbGQuZ28gfCAxMiArKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvY21kL2dvL2ludGVybmFsL2VudmNtZC9lbnYuZ28gYi9zcmMvY21kL2dvL2ludGVybmFsL2VudmNtZC9lbnYuZ28KK2luZGV4IDQzZDQzMzQuLjUyOWQyMWQgMTAwNjQ0CistLS0gYS9zcmMvY21kL2dvL2ludGVybmFsL2VudmNtZC9lbnYuZ28KKysrKyBiL3NyYy9jbWQvZ28vaW50ZXJuYWwvZW52Y21kL2Vudi5nbworQEAgLTc0LDEwICs3NCwxMCBAQCBmdW5jIE1rRW52KCkgW11jZmcuRW52VmFyIHsKKyAJfQorIAorIAljbWQgOj0gYi5HY2NDbWQoIi4iKQorLQllbnYgPSBhcHBlbmQoZW52LCBjZmcuRW52VmFye05hbWU6ICJDQyIsIFZhbHVlOiBjbWRbMF19KQorKwllbnYgPSBhcHBlbmQoZW52LCBjZmcuRW52VmFye05hbWU6ICJDQyIsIFZhbHVlOiBzdHJpbmdzLkpvaW4oYi5HY2NDbWRGb3JSZWFsKCksICIgIil9KQorIAllbnYgPSBhcHBlbmQoZW52LCBjZmcuRW52VmFye05hbWU6ICJHT0dDQ0ZMQUdTIiwgVmFsdWU6IHN0cmluZ3MuSm9pbihjbWRbMzpdLCAiICIpfSkKKyAJY21kID0gYi5HeHhDbWQoIi4iKQorLQllbnYgPSBhcHBlbmQoZW52LCBjZmcuRW52VmFye05hbWU6ICJDWFgiLCBWYWx1ZTogY21kWzBdfSkKKysJZW52ID0gYXBwZW5kKGVudiwgY2ZnLkVudlZhcntOYW1lOiAiQ1hYIiwgVmFsdWU6IHN0cmluZ3MuSm9pbihiLkd4eENtZEZvclJlYWwoKSwgIiAiKX0pCisgCisgCWlmIGNmZy5CdWlsZENvbnRleHQuQ2dvRW5hYmxlZCB7CisgCQllbnYgPSBhcHBlbmQoZW52LCBjZmcuRW52VmFye05hbWU6ICJDR09fRU5BQkxFRCIsIFZhbHVlOiAiMSJ9KQorZGlmZiAtLWdpdCBhL3NyYy9jbWQvZ28vaW50ZXJuYWwvd29yay9idWlsZC5nbyBiL3NyYy9jbWQvZ28vaW50ZXJuYWwvd29yay9idWlsZC5nbworaW5kZXggN2Q2NjdmZi4uODVkZjBiMyAxMDA2NDQKKy0tLSBhL3NyYy9jbWQvZ28vaW50ZXJuYWwvd29yay9idWlsZC5nbworKysrIGIvc3JjL2NtZC9nby9pbnRlcm5hbC93b3JrL2J1aWxkLmdvCitAQCAtMzEyNywxMiArMzEyNywyNCBAQCBmdW5jIChiICpCdWlsZGVyKSBHY2NDbWQob2JqZGlyIHN0cmluZykgW11zdHJpbmcgeworIAlyZXR1cm4gYi5jY29tcGlsZXJDbWQoIkNDIiwgY2ZnLkRlZmF1bHRDQywgb2JqZGlyKQorIH0KKyAKKysvLyBnY2NDbWQgcmV0dXJucyBhIGdjYyBjb21tYW5kIGxpbmUgcHJlZml4CisrLy8gZGVmYXVsdENDIGlzIGRlZmluZWQgaW4gemRlZmF1bHRjYy5nbywgd3JpdHRlbiBieSBjbWQvZGlzdC4KKytmdW5jIChiICpCdWlsZGVyKSBHY2NDbWRGb3JSZWFsKCkgW11zdHJpbmcgeworKwlyZXR1cm4gZW52TGlzdCgiQ0MiLCBjZmcuRGVmYXVsdENDKQorK30KKysKKyAvLyBneHhDbWQgcmV0dXJucyBhIGcrKyBjb21tYW5kIGxpbmUgcHJlZml4CisgLy8gZGVmYXVsdENYWCBpcyBkZWZpbmVkIGluIHpkZWZhdWx0Y2MuZ28sIHdyaXR0ZW4gYnkgY21kL2Rpc3QuCisgZnVuYyAoYiAqQnVpbGRlcikgR3h4Q21kKG9iamRpciBzdHJpbmcpIFtdc3RyaW5nIHsKKyAJcmV0dXJuIGIuY2NvbXBpbGVyQ21kKCJDWFgiLCBjZmcuRGVmYXVsdENYWCwgb2JqZGlyKQorIH0KKyAKKysvLyBneHhDbWQgcmV0dXJucyBhIGcrKyBjb21tYW5kIGxpbmUgcHJlZml4CisrLy8gZGVmYXVsdENYWCBpcyBkZWZpbmVkIGluIHpkZWZhdWx0Y2MuZ28sIHdyaXR0ZW4gYnkgY21kL2Rpc3QuCisrZnVuYyAoYiAqQnVpbGRlcikgR3h4Q21kRm9yUmVhbCgpIFtdc3RyaW5nIHsKKysJcmV0dXJuIGVudkxpc3QoIkNYWCIsIGNmZy5EZWZhdWx0Q1hYKQorK30KKysKKyAvLyBnZm9ydHJhbkNtZCByZXR1cm5zIGEgZ2ZvcnRyYW4gY29tbWFuZCBsaW5lIHByZWZpeC4KKyBmdW5jIChiICpCdWlsZGVyKSBnZm9ydHJhbkNtZChvYmpkaXIgc3RyaW5nKSBbXXN0cmluZyB7CisgCXJldHVybiBiLmNjb21waWxlckNtZCgiRkMiLCAiZ2ZvcnRyYW4iLCBvYmpkaXIpCistLSAKKzIuNy40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS45LzAwMDMtbWFrZS5iYXNoLWJldHRlci1zZXBhcmF0ZS1ob3N0LWFuZC10YXJnZXQtYnVpbGRzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjkvMDAwMy1tYWtlLmJhc2gtYmV0dGVyLXNlcGFyYXRlLWhvc3QtYW5kLXRhcmdldC1idWlsZHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZkOWYyMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS45LzAwMDMtbWFrZS5iYXNoLWJldHRlci1zZXBhcmF0ZS1ob3N0LWFuZC10YXJnZXQtYnVpbGRzLnBhdGNoCkBAIC0wLDAgKzEsOTIgQEAKK0Zyb20gMzFlODhmMDZhZjdhYjc4N2Q4ZmUwYzFjYTYyNTE5M2UxNzk5ZTE2NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hdHQgTWFkaXNvbiA8bWF0dEBtYWRpc29uLnN5c3RlbXM+CitEYXRlOiBXZWQsIDEzIFNlcCAyMDE3IDA4OjEyOjA0IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMy83XSBtYWtlLmJhc2g6IGJldHRlciBzZXBhcmF0ZSBob3N0IGFuZCB0YXJnZXQgYnVpbGRzCisKK0ZvcmUgT0UgY3Jvc3MtYnVpbGRzLCB0aGUgc2ltcGxlIGNoZWNrcyBpbiBtYWtlLmJhc2ggYXJlCitpbnN1ZmZpY2llbnQgZm9yIGRpc3Rpbmd1aXNoaW5nIGhvc3QgYW5kIHRhcmdldCBidWlsZAorZW52aXJvbm1lbnRzLCBzbyBhZGQgc29tZSBvcHRpb25zIGZvciB0ZWxsaW5nIHRoZQorc2NyaXB0IHdoaWNoIHBhcnRzIGFyZSBiZWluZyBidWlsdC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXR0IE1hZGlzb24gPG1hdHRAbWFkaXNvbi5zeXN0ZW1zPgorLS0tCisgc3JjL21ha2UuYmFzaCB8IDUxICsrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyOCBpbnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9tYWtlLmJhc2ggYi9zcmMvbWFrZS5iYXNoCitpbmRleCBkY2YzMjU2Li45NTUzNjIzIDEwMDc1NQorLS0tIGEvc3JjL21ha2UuYmFzaAorKysrIGIvc3JjL21ha2UuYmFzaAorQEAgLTE1NiwxMyArMTU2LDIyIEBAIGlmIFsgIiQxIiA9ICItLW5vLWNsZWFuIiBdOyB0aGVuCisgCWJ1aWxkYWxsPSIiCisgCXNoaWZ0CisgZmkKKy0uL2NtZC9kaXN0L2Rpc3QgYm9vdHN0cmFwICRidWlsZGFsbCAkR09fRElTVEZMQUdTIC12ICMgYnVpbGRzIGdvX2Jvb3RzdHJhcAorK2RvX2hvc3RfYnVpbGQ9InllcyIKKytkb190YXJnZXRfYnVpbGQ9InllcyIKKytpZiBbICIkMSIgPSAiLS10YXJnZXQtb25seSIgXTsgdGhlbgorKwlkb19ob3N0X2J1aWxkPSJubyIKKysJc2hpZnQKKytlbGlmIFsgIiQxIiA9ICItLWhvc3Qtb25seSIgXTsgdGhlbgorKwlkb190YXJnZXRfYnVpbGQ9Im5vIgorKwlzaGlmdAorK2ZpCisgCistIyBEZWxheSBtb3ZlIG9mIGRpc3QgdG9vbCB0byBub3csIGJlY2F1c2UgYm9vdHN0cmFwIG1heSBjbGVhciB0b29sIGRpcmVjdG9yeS4KKy1tdiBjbWQvZGlzdC9kaXN0ICIkR09UT09MRElSIi9kaXN0CistZWNobworK2lmIFsgIiRkb19ob3N0X2J1aWxkIiA9ICJ5ZXMiIF07IHRoZW4KKysJLi9jbWQvZGlzdC9kaXN0IGJvb3RzdHJhcCAkYnVpbGRhbGwgJEdPX0RJU1RGTEFHUyAtdiAjIGJ1aWxkcyBnb19ib290c3RyYXAKKysJIyBEZWxheSBtb3ZlIG9mIGRpc3QgdG9vbCB0byBub3csIGJlY2F1c2UgYm9vdHN0cmFwIG1heSBjbGVhciB0b29sIGRpcmVjdG9yeS4KKysJbXYgY21kL2Rpc3QvZGlzdCAiJEdPVE9PTERJUiIvZGlzdAorKwllY2hvCisgCistaWYgWyAiJEdPSE9TVEFSQ0giICE9ICIkR09BUkNIIiAtbyAiJEdPSE9TVE9TIiAhPSAiJEdPT1MiIF07IHRoZW4KKyAJZWNobyAiIyMjIyMgQnVpbGRpbmcgcGFja2FnZXMgYW5kIGNvbW1hbmRzIGZvciBob3N0LCAkR09IT1NUT1MvJEdPSE9TVEFSQ0guIgorIAkjIENDX0ZPUl9UQVJHRVQgaXMgcmVjb3JkZWQgYXMgdGhlIGRlZmF1bHQgY29tcGlsZXIgZm9yIHRoZSBnbyB0b29sLiBXaGVuIGJ1aWxkaW5nIGZvciB0aGUgaG9zdCwgaG93ZXZlciwKKyAJIyB1c2UgdGhlIGhvc3QgY29tcGlsZXIsIENDLCBmcm9tIGBjbWQvZGlzdC9kaXN0IGVudmAgaW5zdGVhZC4KK0BAIC0xNzEsMjQgKzE4MCwyMCBAQCBpZiBbICIkR09IT1NUQVJDSCIgIT0gIiRHT0FSQ0giIC1vICIkR09IT1NUT1MiICE9ICIkR09PUyIgXTsgdGhlbgorIAllY2hvCisgZmkKKyAKKy1lY2hvICIjIyMjIyBCdWlsZGluZyBwYWNrYWdlcyBhbmQgY29tbWFuZHMgZm9yICRHT09TLyRHT0FSQ0guIgorLQorLW9sZF9iaW5fZmlsZXM9JChjZCAkR09ST09UL2JpbiAmJiBlY2hvICopCistCistQ0M9IiRDQ19GT1JfVEFSR0VUIiAiJEdPVE9PTERJUiIvZ29fYm9vdHN0cmFwIGluc3RhbGwgJEdPX0ZMQUdTIC1nY2ZsYWdzICIkR09fR0NGTEFHUyIgLWxkZmxhZ3MgIiRHT19MREZMQUdTIiAtdiBzdGQgY21kCistCistIyBDaGVjayB0aGF0IHRoZXJlIGFyZSBubyBuZXcgZmlsZXMgaW4gJEdPUk9PVC9iaW4gb3RoZXIgdGhhbiBnbyBhbmQgZ29mbXQKKy0jIGFuZCAkR09PU18kR09BUkNIIChhIGRpcmVjdG9yeSB1c2VkIHdoZW4gY3Jvc3MtY29tcGlsaW5nKS4KKy0oY2QgJEdPUk9PVC9iaW4gJiYgZm9yIGYgaW4gKjsgZG8KKy0JaWYgISBleHByICIgJG9sZF9iaW5fZmlsZXMgZ28gZ29mbXQgJHtHT09TfV8ke0dPQVJDSH0gIiA6ICIuKiAkZiAiID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKy0JCWVjaG8gMT4mMiAiRVJST1I6IHVuZXhwZWN0ZWQgbmV3IGZpbGUgaW4gJEdPUk9PVC9iaW46ICRmIgorLQkJZXhpdCAxCistCWZpCistZG9uZSkKKy0KKy1lY2hvCistCistcm0gLWYgIiRHT1RPT0xESVIiL2dvX2Jvb3RzdHJhcAorK2lmIFsgIiRkb190YXJnZXRfYnVpbGQiID0gInllcyIgXTsgdGhlbgorKyAgICBHT19JTlNUQUxMPSIke0dPX1RBUkdFVF9JTlNUQUxMOi1zdGQgY21kfSIKKysgICAgZWNobyAiIyMjIyMgQnVpbGRpbmcgcGFja2FnZXMgYW5kIGNvbW1hbmRzIGZvciAkR09PUy8kR09BUkNILiIKKysgICAgaWYgWyAiJEdPSE9TVE9TIiA9ICIkR09PUyIgLWEgIiRHT0hPU1RBUkNIIiA9ICIkR09BUkNIIiAtYSAiJGRvX2hvc3RfYnVpbGQiID0gInllcyIgXTsgdGhlbgorKwlybSAtcmYgLi9ob3N0LXRvb2xzCisrCW1rZGlyIC4vaG9zdC10b29scworKwltdiAiJEdPVE9PTERJUiIvKiAuL2hvc3QtdG9vbHMKKysJR09UT09MRElSPSIkUFdEL2hvc3QtdG9vbHMiCisrICAgIGZpCisrICAgIEdPVE9PTERJUj0iJEdPVE9PTERJUiIgQ0M9IiRDQ19GT1JfVEFSR0VUIiAiJEdPVE9PTERJUiIvZ29fYm9vdHN0cmFwIGluc3RhbGwgJEdPX0ZMQUdTIC1nY2ZsYWdzICIkR09fR0NGTEFHUyIgLWxkZmxhZ3MgIiRHT19MREZMQUdTIiAtdiAke0dPX0lOU1RBTEx9CisrICAgIGVjaG8KKysKKysgICAgcm0gLWYgIiRHT1RPT0xESVIiL2dvX2Jvb3RzdHJhcAorK2ZpCisgCisgaWYgWyAiJDEiICE9ICItLW5vLWJhbm5lciIgXTsgdGhlbgorIAkiJEdPVE9PTERJUiIvZGlzdCBiYW5uZXIKKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjkvMDAwNC1jbWQtZ28tYWxsb3ctR09UT09MRElSLXRvLWJlLW92ZXJyaWRkZW4taW4tdGhlLWVudmlyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjkvMDAwNC1jbWQtZ28tYWxsb3ctR09UT09MRElSLXRvLWJlLW92ZXJyaWRkZW4taW4tdGhlLWVudmlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MGIwNmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuOS8wMDA0LWNtZC1nby1hbGxvdy1HT1RPT0xESVItdG8tYmUtb3ZlcnJpZGRlbi1pbi10aGUtZW52aXIucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorRnJvbSAxMzY5MTc4YjQ5N2IxMjA4OGVjNGMyNzk0NjA2Y2M5ZjE0Y2MzMjdjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWF0dCBNYWRpc29uIDxtYXR0QG1hZGlzb24uc3lzdGVtcz4KK0RhdGU6IFdlZCwgMTMgU2VwIDIwMTcgMDg6MTU6MDMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCA0LzddIGNtZC9nbzogYWxsb3cgR09UT09MRElSIHRvIGJlIG92ZXJyaWRkZW4gaW4gdGhlCisgZW52aXJvbm1lbnQKKworRm9yIE9FIGNyb3NzLWJ1aWxkcywgaG9zdC1zaWRlIHRvb2xzIHJlc2lkZSBpbiB0aGUgbmF0aXZlCitHT1JPT1QsIG5vdCB0aGUgdGFyZ2V0IEdPUk9PVC4gIEFsbG93IEdPVE9PTERJUiB0byBiZSBzZXQKK2luIHRoZSBlbnZpcm9ubWVudCB0byBhbGxvdyB0aGF0IHNwbGl0LCByYXRoZXIgdGhhbiBhbHdheXMKK2NvbXB1dGluZyBHT1RPT0xESVIgcmVsYXRpdmUgdG8gdGhlIEdPUk9PVCBzZXR0aW5nLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hdHQgTWFkaXNvbiA8bWF0dEBtYWRpc29uLnN5c3RlbXM+CistLS0KKyBzcmMvY21kL2dvL2ludGVybmFsL2NmZy9jZmcuZ28gICAgfCA3ICsrKysrKy0KKyBzcmMvY21kL2dvL2ludGVybmFsL3dvcmsvYnVpbGQuZ28gfCAyICstCisgc3JjL2dvL2J1aWxkL2J1aWxkLmdvICAgICAgICAgICAgIHwgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2NtZC9nby9pbnRlcm5hbC9jZmcvY2ZnLmdvIGIvc3JjL2NtZC9nby9pbnRlcm5hbC9jZmcvY2ZnLmdvCitpbmRleCBiM2FkMWNlLi5jMWRjOTc0IDEwMDY0NAorLS0tIGEvc3JjL2NtZC9nby9pbnRlcm5hbC9jZmcvY2ZnLmdvCisrKysgYi9zcmMvY21kL2dvL2ludGVybmFsL2NmZy9jZmcuZ28KK0BAIC05MSw3ICs5MSwxMiBAQCBmdW5jIGluaXQoKSB7CisgCS8vIGFzIHRoZSB0b29sIGRpcmVjdG9yeSBkb2VzIG5vdCBtb3ZlIGJhc2VkIG9uIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKyAJLy8gVGhpcyBtYXRjaGVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBUb29sRGlyIGluIGdvL2J1aWxkLAorIAkvLyBleGNlcHQgZm9yIHVzaW5nIEdPUk9PVCByYXRoZXIgdGhhbiBydW50aW1lLkdPUk9PVCgpLgorLQlidWlsZC5Ub29sRGlyID0gZmlsZXBhdGguSm9pbihHT1JPT1QsICJwa2cvdG9vbC8iK3J1bnRpbWUuR09PUysiXyIrcnVudGltZS5HT0FSQ0gpCisrCXMgOj0gb3MuR2V0ZW52KCJHT1RPT0xESVIiKQorKwlpZiBzID09ICIiIHsKKysJCWJ1aWxkLlRvb2xEaXIgPSBmaWxlcGF0aC5Kb2luKEdPUk9PVCwgInBrZy90b29sLyIrcnVudGltZS5HT09TKyJfIitydW50aW1lLkdPQVJDSCkKKysJfSBlbHNlIHsKKysJCWJ1aWxkLlRvb2xEaXIgPSBzCisrCX0KKyB9CisgCisgZnVuYyBmaW5kR09ST09UKCkgc3RyaW5nIHsKK2RpZmYgLS1naXQgYS9zcmMvY21kL2dvL2ludGVybmFsL3dvcmsvYnVpbGQuZ28gYi9zcmMvY21kL2dvL2ludGVybmFsL3dvcmsvYnVpbGQuZ28KK2luZGV4IDg1ZGYwYjMuLjdiOWE2OWUgMTAwNjQ0CistLS0gYS9zcmMvY21kL2dvL2ludGVybmFsL3dvcmsvYnVpbGQuZ28KKysrKyBiL3NyYy9jbWQvZ28vaW50ZXJuYWwvd29yay9idWlsZC5nbworQEAgLTEzMzcsNyArMTMzNyw3IEBAIGZ1bmMgKGIgKkJ1aWxkZXIpIGJ1aWxkKGEgKkFjdGlvbikgKGVyciBlcnJvcikgeworIAkJfQorIAorIAkJdmFyIGNnb0V4ZSBzdHJpbmcKKy0JCWlmIGEuY2dvICE9IG5pbCAmJiBhLmNnby5UYXJnZXQgIT0gIiIgeworKwkJaWYgYS5jZ28gIT0gbmlsICYmIGEuY2dvLlRhcmdldCAhPSAiIiAmJiBvcy5HZXRlbnYoIkdPVE9PTERJUiIpID09ICIiIHsKKyAJCQljZ29FeGUgPSBhLmNnby5UYXJnZXQKKyAJCX0gZWxzZSB7CisgCQkJY2dvRXhlID0gYmFzZS5Ub29sKCJjZ28iKQorZGlmZiAtLWdpdCBhL3NyYy9nby9idWlsZC9idWlsZC5nbyBiL3NyYy9nby9idWlsZC9idWlsZC5nbworaW5kZXggZmQ4OTg3MS4uZTE2MTQ1YiAxMDA2NDQKKy0tLSBhL3NyYy9nby9idWlsZC9idWlsZC5nbworKysrIGIvc3JjL2dvL2J1aWxkL2J1aWxkLmdvCitAQCAtMTU4OCw3ICsxNTg4LDcgQEAgZnVuYyBpbml0KCkgeworIH0KKyAKKyAvLyBUb29sRGlyIGlzIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBidWlsZCB0b29scy4KKy12YXIgVG9vbERpciA9IGZpbGVwYXRoLkpvaW4ocnVudGltZS5HT1JPT1QoKSwgInBrZy90b29sLyIrcnVudGltZS5HT09TKyJfIitydW50aW1lLkdPQVJDSCkKKyt2YXIgVG9vbERpciA9IGVudk9yKCJHT1RPT0xESVIiLCBmaWxlcGF0aC5Kb2luKHJ1bnRpbWUuR09ST09UKCksICJwa2cvdG9vbC8iK3J1bnRpbWUuR09PUysiXyIrcnVudGltZS5HT0FSQ0gpKQorIAorIC8vIElzTG9jYWxJbXBvcnQgcmVwb3J0cyB3aGV0aGVyIHRoZSBpbXBvcnQgcGF0aCBpcworIC8vIGEgbG9jYWwgaW1wb3J0IHBhdGgsIGxpa2UgIi4iLCAiLi4iLCAiLi9mb28iLCBvciAiLi4vZm9vIi4KKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjkvMDAwNS1jbWQtZ28tbWFrZS1HT1JPT1QtcHJlY2lvdXMtYnktZGVmYXVsdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS45LzAwMDUtY21kLWdvLW1ha2UtR09ST09ULXByZWNpb3VzLWJ5LWRlZmF1bHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU5M2JjYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS45LzAwMDUtY21kLWdvLW1ha2UtR09ST09ULXByZWNpb3VzLWJ5LWRlZmF1bHQucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSA0NGY5NjE5NzVkYWM2Y2Y0NjRhNzdiNWY2ZGQwYzQ3Y2MxOTJjNGZkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWF0dCBNYWRpc29uIDxtYXR0QG1hZGlzb24uc3lzdGVtcz4KK0RhdGU6IFdlZCwgMTMgU2VwIDIwMTcgMDg6MTk6NTIgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCA1LzddIGNtZC9nbzogbWFrZSBHT1JPT1QgcHJlY2lvdXMgYnkgZGVmYXVsdAorCitGb3IgT0UgYnVpbGRzLCB3ZSBuZXZlciB3YW50IHBhY2thZ2VzIHRoYXQgaGF2ZQorYWxyZWFkeSBiZWVuIGluc3RhbGxlZCBpbnRvIHRoZSBidWlsZCByb290IHRvIGJlCittb2RpZmllZCwgc28gcHJldmVudCB0aGUgZ28gYnVpbGQgdG9vbCBmcm9tIGNoZWNraW5nCitpZiB0aGV5IHNob3VsZCBiZSByZWJ1aWx0LgorCitBbHNvIGFkZCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBvdmVycmlkZSB0aGlzCitiZWhhdmlvciwganVzdCBmb3IgYnVpbGRpbmcgdGhlIEdvIHJ1bnRpbWUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXR0IE1hZGlzb24gPG1hdHRAbWFkaXNvbi5zeXN0ZW1zPgorLS0tCisgc3JjL2NtZC9nby9pbnRlcm5hbC9sb2FkL3BrZy5nbyB8IDcgKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9jbWQvZ28vaW50ZXJuYWwvbG9hZC9wa2cuZ28gYi9zcmMvY21kL2dvL2ludGVybmFsL2xvYWQvcGtnLmdvCitpbmRleCA2MGRlNjY2Li4yNjYwZDNmIDEwMDY0NAorLS0tIGEvc3JjL2NtZC9nby9pbnRlcm5hbC9sb2FkL3BrZy5nbworKysrIGIvc3JjL2NtZC9nby9pbnRlcm5hbC9sb2FkL3BrZy5nbworQEAgLTE1MzAsNiArMTUzMCwxMyBAQCBmdW5jIGlzU3RhbGUocCAqUGFja2FnZSkgKGJvb2wsIHN0cmluZykgeworIAkJcmV0dXJuIHRydWUsICJidWlsZCBJRCBtaXNtYXRjaCIKKyAJfQorIAorKwkvLyBGb3IgT0UgYnVpbGRzLCBtYWtlIGFueXRoaW5nIGluIEdPUk9PVCBub24tc3RhbGUsCisrCS8vIHRvIHByZXZlbnQgYSBwYWNrYWdlIGJ1aWxkIGZyb20gb3ZlcndyaXRpbmcgdGhlCisrCS8vIGJ1aWxkIHJvb3QuCisrCWlmIHAuR29yb290ICYmIG9zLkdldGVudigiR09ST09UX09WRVJSSURFIikgIT0gIjEiIHsKKysJCXJldHVybiBmYWxzZSwgIkdPUk9PVC1yZXNpZGVudCBwYWNrYWdlcyBkbyBub3QgZ2V0IHJlYnVpbHQiCisrCX0KKysKKyAJLy8gUGFja2FnZSBpcyBzdGFsZSBpZiBhIGRlcGVuZGVuY3kgaXMuCisgCWZvciBfLCBwMSA6PSByYW5nZSBwLkludGVybmFsLkRlcHMgeworIAkJaWYgcDEuU3RhbGUgeworLS0gCisyLjcuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuOS8wMDA2LW1ha2UuYmFzaC1hZGQtR09UT09MRElSX0JPT1RTVFJBUC1lbnZpcm9ubWVudC12YXJpYWIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuOS8wMDA2LW1ha2UuYmFzaC1hZGQtR09UT09MRElSX0JPT1RTVFJBUC1lbnZpcm9ubWVudC12YXJpYWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBmNTY0MAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS45LzAwMDYtbWFrZS5iYXNoLWFkZC1HT1RPT0xESVJfQk9PVFNUUkFQLWVudmlyb25tZW50LXZhcmlhYi5wYXRjaApAQCAtMCwwICsxLDM2IEBACitGcm9tIGFhZTc0ZDEwNDVjYTAzMzA2YmE0MTU5MjA2ZWUzYmFjNzJiY2RmYmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXR0IE1hZGlzb24gPG1hdHRAbWFkaXNvbi5zeXN0ZW1zPgorRGF0ZTogV2VkLCAxMyBTZXAgMjAxNyAwODoyMzoyMyAtMDcwMAorU3ViamVjdDogW1BBVENIIDYvN10gbWFrZS5iYXNoOiBhZGQgR09UT09MRElSX0JPT1RTVFJBUCBlbnZpcm9ubWVudCB2YXJpYWJsZQorCitGb3IgY3Jvc3MtY2FuYWRpYW4gYnVpbGRzLCB3ZSBuZWVkIHRvIHVzZSB0aGUgbmF0aXZlCitHT1RPT0xESVIgZHVyaW5nIHRoZSBib290c3RyYXAgcGhhc2UsIHNvIHByb3ZpZGUgYSB3YXkKK3RvIHBhc3MgdGhhdCBzZXR0aW5nIGludG8gdGhlIGJ1aWxkIHNjcmlwdC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hdHQgTWFkaXNvbiA8bWF0dEBtYWRpc29uLnN5c3RlbXM+CistLS0KKyBzcmMvbWFrZS5iYXNoIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbWFrZS5iYXNoIGIvc3JjL21ha2UuYmFzaAoraW5kZXggOTU1MzYyMy4uMmU2ZmIwNSAxMDA3NTUKKy0tLSBhL3NyYy9tYWtlLmJhc2gKKysrKyBiL3NyYy9tYWtlLmJhc2gKK0BAIC0xNzIsMTAgKzE3MiwxMSBAQCBpZiBbICIkZG9faG9zdF9idWlsZCIgPSAieWVzIiBdOyB0aGVuCisgCW12IGNtZC9kaXN0L2Rpc3QgIiRHT1RPT0xESVIiL2Rpc3QKKyAJZWNobworIAorKwlHT1RPT0xESVJfQk9PVFNUUkFQPSIke0dPVE9PTERJUl9CT09UU1RSQVA6LSRHT1RPT0xESVJ9IgorIAllY2hvICIjIyMjIyBCdWlsZGluZyBwYWNrYWdlcyBhbmQgY29tbWFuZHMgZm9yIGhvc3QsICRHT0hPU1RPUy8kR09IT1NUQVJDSC4iCisgCSMgQ0NfRk9SX1RBUkdFVCBpcyByZWNvcmRlZCBhcyB0aGUgZGVmYXVsdCBjb21waWxlciBmb3IgdGhlIGdvIHRvb2wuIFdoZW4gYnVpbGRpbmcgZm9yIHRoZSBob3N0LCBob3dldmVyLAorIAkjIHVzZSB0aGUgaG9zdCBjb21waWxlciwgQ0MsIGZyb20gYGNtZC9kaXN0L2Rpc3QgZW52YCBpbnN0ZWFkLgorLQlDQz0kQ0MgR09PUz0kR09IT1NUT1MgR09BUkNIPSRHT0hPU1RBUkNIIFwKKysJQ0M9JENDIEdPT1M9JEdPSE9TVE9TIEdPQVJDSD0kR09IT1NUQVJDSCBHT1RPT0xESVI9IiRHT1RPT0xESVJfQk9PVFNUUkFQIiBcCisgCQkiJEdPVE9PTERJUiIvZ29fYm9vdHN0cmFwIGluc3RhbGwgLWdjZmxhZ3MgIiRHT19HQ0ZMQUdTIiAtbGRmbGFncyAiJEdPX0xERkxBR1MiIC12IHN0ZCBjbWQKKyAJZWNobworIGZpCistLSAKKzIuNy40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS45LzAwMDctbGQtYWRkLXNvbmFtZS10by1zaGFyZWFibGUtb2JqZWN0cy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS45LzAwMDctbGQtYWRkLXNvbmFtZS10by1zaGFyZWFibGUtb2JqZWN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDU5NzgyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjkvMDAwNy1sZC1hZGQtc29uYW1lLXRvLXNoYXJlYWJsZS1vYmplY3RzLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gZTk1N2MzNDU4ZDUzZTM3YmY0MTZmNTFkMmY4YmY1NGMxOTVlNTBmNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hdHQgTWFkaXNvbiA8bWF0dEBtYWRpc29uLnN5c3RlbXM+CitEYXRlOiBXZWQsIDEzIFNlcCAyMDE3IDA4OjI3OjAyIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggNy83XSBsZDogYWRkIHNvbmFtZSB0byBzaGFyZWFibGUgb2JqZWN0cworCitTaGFyZWQgbGlicmFyeSBoYW5kbGluZyBpbiBPRSBkZXBlbmRzIG9uIHRoZSBpbmNsdXNpb24KK29mIGFuIHNvbmFtZSBoZWFkZXIsIHNvIHVwZGF0ZSB0aGUgZ28gbGlua2VyIHRvIGFkZCB0aGF0CitoZWFkZXIgZm9yIGJvdGggaW50ZXJuYWwgYW5kIGV4dGVybmFsIGxpbmtpbmcuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXR0IE1hZGlzb24gPG1hdHRAbWFkaXNvbi5zeXN0ZW1zPgorLS0tCisgc3JjL2NtZC9saW5rL2ludGVybmFsL2xkL2xpYi5nbyB8IDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2NtZC9saW5rL2ludGVybmFsL2xkL2xpYi5nbyBiL3NyYy9jbWQvbGluay9pbnRlcm5hbC9sZC9saWIuZ28KK2luZGV4IDAyMzQxMDUuLjBiOWUyZDAgMTAwNjQ0CistLS0gYS9zcmMvY21kL2xpbmsvaW50ZXJuYWwvbGQvbGliLmdvCisrKysgYi9zcmMvY21kL2xpbmsvaW50ZXJuYWwvbGQvbGliLmdvCitAQCAtMTEyNCwxMiArMTEyNCwxNCBAQCBmdW5jIChsICpMaW5rKSBob3N0bGluaygpIHsKKyAJCQkvLyBQYXNzIC16IG5vZGVsZXRlIHRvIG1hcmsgdGhlIHNoYXJlZCBsaWJyYXJ5IGFzCisgCQkJLy8gbm9uLWNsb3NlYWJsZTogYSBkbGNsb3NlIHdpbGwgZG8gbm90aGluZy4KKyAJCQlhcmd2ID0gYXBwZW5kKGFyZ3YsICItc2hhcmVkIiwgIi1XbCwteixub2RlbGV0ZSIpCisrCQkJYXJndiA9IGFwcGVuZChhcmd2LCBmbXQuU3ByaW50ZigiLVdsLC1zb25hbWUsJXMiLCBmaWxlcGF0aC5CYXNlKCpmbGFnT3V0ZmlsZSkpKQorIAkJfQorIAljYXNlIEJ1aWxkbW9kZVNoYXJlZDoKKyAJCWlmIFVzZVJlbHJvKCkgeworIAkJCWFyZ3YgPSBhcHBlbmQoYXJndiwgIi1XbCwteixyZWxybyIpCisgCQl9CisgCQlhcmd2ID0gYXBwZW5kKGFyZ3YsICItc2hhcmVkIikKKysJCWFyZ3YgPSBhcHBlbmQoYXJndiwgZm10LlNwcmludGYoIi1XbCwtc29uYW1lLCVzIiwgZmlsZXBhdGguQmFzZSgqZmxhZ091dGZpbGUpKSkKKyAJY2FzZSBCdWlsZG1vZGVQbHVnaW46CisgCQlpZiBIZWFkdHlwZSA9PSBvYmphYmkuSGRhcndpbiB7CisgCQkJYXJndiA9IGFwcGVuZChhcmd2LCAiLWR5bmFtaWNsaWIiKQorQEAgLTExMzgsNiArMTE0MCw3IEBAIGZ1bmMgKGwgKkxpbmspIGhvc3RsaW5rKCkgeworIAkJCQlhcmd2ID0gYXBwZW5kKGFyZ3YsICItV2wsLXoscmVscm8iKQorIAkJCX0KKyAJCQlhcmd2ID0gYXBwZW5kKGFyZ3YsICItc2hhcmVkIikKKysJCQlhcmd2ID0gYXBwZW5kKGFyZ3YsIGZtdC5TcHJpbnRmKCItV2wsLXNvbmFtZSwlcyIsIGZpbGVwYXRoLkJhc2UoKmZsYWdPdXRmaWxlKSkpCisgCQl9CisgCX0KKyAKKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjkvMDAwOC1tYWtlLmJhc2gtYWRkLUdPSE9TVHh4LWluZGlyZWN0aW9uLWZvci1jcm9zcy1jYW5hZGlhLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjkvMDAwOC1tYWtlLmJhc2gtYWRkLUdPSE9TVHh4LWluZGlyZWN0aW9uLWZvci1jcm9zcy1jYW5hZGlhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NzdjNzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuOS8wMDA4LW1ha2UuYmFzaC1hZGQtR09IT1NUeHgtaW5kaXJlY3Rpb24tZm9yLWNyb3NzLWNhbmFkaWEucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSAwM2U2YzMzOWQ0ZmI3MTJmYmI4YzRjYTZlZjJmYzcxMDBkY2RiM2Q3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWF0dCBNYWRpc29uIDxtYXR0QG1hZGlzb24uc3lzdGVtcz4KK0RhdGU6IFRodSwgMTQgU2VwIDIwMTcgMDU6Mzg6MTAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCA4LzhdIG1ha2UuYmFzaDogYWRkIEdPSE9TVHh4IGluZGlyZWN0aW9uIGZvciBjcm9zcy1jYW5hZGlhbgorIGJ1aWxkcworCitBZGQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBzcGVjaWZ5aW5nIHRoZSBob3N0IE9TL2FyY2gKK3RoYXQgd2UgYXJlIGJ1aWxkaW5nIHRoZSBjb21waWxlciBmb3IsIHNvIGl0IGNhbiBkaWZmZXIgZnJvbQordGhlIGJ1aWxkIGhvc3QgT1MvYXJjaC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hdHQgTWFkaXNvbiA8bWF0dEBtYWRpc29uLnN5c3RlbXM+CistLS0KKyBzcmMvbWFrZS5iYXNoIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9tYWtlLmJhc2ggYi9zcmMvbWFrZS5iYXNoCitpbmRleCAyZTZmYjA1Li4wYmRhZGM2IDEwMDc1NQorLS0tIGEvc3JjL21ha2UuYmFzaAorKysrIGIvc3JjL21ha2UuYmFzaAorQEAgLTE3Myw2ICsxNzMsOCBAQCBpZiBbICIkZG9faG9zdF9idWlsZCIgPSAieWVzIiBdOyB0aGVuCisgCWVjaG8KKyAKKyAJR09UT09MRElSX0JPT1RTVFJBUD0iJHtHT1RPT0xESVJfQk9PVFNUUkFQOi0kR09UT09MRElSfSIKKysJR09IT1NUT1M9IiR7R09IT1NUT1NfQ1JPU1M6LSRHT0hPU1RPU30iCisrCUdPSE9TVEFSQ0g9IiR7R09IT1NUQVJDSF9DUk9TUzotJEdPSE9TVEFSQ0h9IgorIAllY2hvICIjIyMjIyBCdWlsZGluZyBwYWNrYWdlcyBhbmQgY29tbWFuZHMgZm9yIGhvc3QsICRHT0hPU1RPUy8kR09IT1NUQVJDSC4iCisgCSMgQ0NfRk9SX1RBUkdFVCBpcyByZWNvcmRlZCBhcyB0aGUgZGVmYXVsdCBjb21waWxlciBmb3IgdGhlIGdvIHRvb2wuIFdoZW4gYnVpbGRpbmcgZm9yIHRoZSBob3N0LCBob3dldmVyLAorIAkjIHVzZSB0aGUgaG9zdCBjb21waWxlciwgQ0MsIGZyb20gYGNtZC9kaXN0L2Rpc3QgZW52YCBpbnN0ZWFkLgorLS0gCisyLjcuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuOS8wMDA5LWNtZC1nby1idWlsZG1vZGUtcGllLWZvcmNlcy1leHRlcm5hbC1saW5raW5nLW1vZGUtb24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuOS8wMDA5LWNtZC1nby1idWlsZG1vZGUtcGllLWZvcmNlcy1leHRlcm5hbC1saW5raW5nLW1vZGUtb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE1ZmNmZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS45LzAwMDktY21kLWdvLWJ1aWxkbW9kZS1waWUtZm9yY2VzLWV4dGVybmFsLWxpbmtpbmctbW9kZS1vbi5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitGcm9tIGFhZTQ0NTI3YzgwNjVkNTRmNmFjYWY4N2M4MmNiYTFhYzk2ZmFlNTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBJYW4gTGFuY2UgVGF5bG9yIDxpYW50QGdvbGFuZy5vcmc+CitEYXRlOiBGcmksIDE4IEF1ZyAyMDE3IDE3OjQ2OjAzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNtZC9nbzogLWJ1aWxkbW9kZT1waWUgZm9yY2VzIGV4dGVybmFsIGxpbmtpbmcgbW9kZSBvbiBhbGwKKyBzeXN0ZW1zCisKK1RoZSBnbyB0b29sIGFzc3VtZWQgdGhhdCAtYnVpbGRtb2RlPXBpZSBpbXBsaWVkIGludGVybmFsIGxpbmtpbmcgb24KK2xpbnV4LWFtZDY0LiBIb3dldmVyLCB0aGF0IHdhcyBjaGFuZ2VkIGJ5IENMIDM2NDE3IGZvciBpc3N1ZSAjMTg5NjguCisKK0ZpeGVzICMyMTQ1MgorCitDaGFuZ2UtSWQ6IEk4ZWQxM2FlYTUyOTU5Y2M1YzUzMjIzZjRjNDFiYTM1MzI5NDQ1NTQ1CitSZXZpZXdlZC1vbjogaHR0cHM6Ly9nby1yZXZpZXcuZ29vZ2xlc291cmNlLmNvbS81NzIzMQorUnVuLVRyeUJvdDogSWFuIExhbmNlIFRheWxvciA8aWFudEBnb2xhbmcub3JnPgorVHJ5Qm90LVJlc3VsdDogR29ib3QgR29ib3QgPGdvYm90QGdvbGFuZy5vcmc+CitSZXZpZXdlZC1ieTogQXZlbGlubyA8dEBhdmVsaW5vLnh4eD4KK1Jldmlld2VkLWJ5OiBSb2IgUGlrZSA8ckBnb2xhbmcub3JnPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCisgc3JjL2NtZC9nby9pbnRlcm5hbC9sb2FkL3BrZy5nbyB8IDcgKysrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvY21kL2dvL2ludGVybmFsL2xvYWQvcGtnLmdvIGIvc3JjL2NtZC9nby9pbnRlcm5hbC9sb2FkL3BrZy5nbworaW5kZXggMjY2MGQzZi4uZDQwNzczYiAxMDA2NDQKKy0tLSBhL3NyYy9jbWQvZ28vaW50ZXJuYWwvbG9hZC9wa2cuZ28KKysrKyBiL3NyYy9jbWQvZ28vaW50ZXJuYWwvbG9hZC9wa2cuZ28KK0BAIC05NTQsMTEgKzk1NCwxMiBAQCBmdW5jIChwICpQYWNrYWdlKSBsb2FkKHN0ayAqSW1wb3J0U3RhY2ssIGJwICpidWlsZC5QYWNrYWdlLCBlcnIgZXJyb3IpICpQYWNrYWdlCisgCisgCWlmIGNmZy5CdWlsZENvbnRleHQuQ2dvRW5hYmxlZCAmJiBwLk5hbWUgPT0gIm1haW4iICYmICFwLkdvcm9vdCB7CisgCQkvLyBDdXJyZW50bHkgYnVpbGQgbW9kZXMgYy1zaGFyZWQsIHBpZSAob24gc3lzdGVtcyB0aGF0IGRvIG5vdAorLQkJLy8gc3VwcG9ydCBQSUUgd2l0aCBpbnRlcm5hbCBsaW5raW5nIG1vZGUpLCBwbHVnaW4sIGFuZAorLQkJLy8gLWxpbmtzaGFyZWQgZm9yY2UgZXh0ZXJuYWwgbGlua2luZyBtb2RlLCBhcyBvZiBjb3Vyc2UgZG9lcworKwkJLy8gc3VwcG9ydCBQSUUgd2l0aCBpbnRlcm5hbCBsaW5raW5nIG1vZGUgKGN1cnJlbnRseSBhbGwKKysJCS8vIHN5c3RlbXM6IGlzc3VlICMxODk2OCkpLCBwbHVnaW4sIGFuZCAtbGlua3NoYXJlZCBmb3JjZQorKwkJLy8gZXh0ZXJuYWwgbGlua2luZyBtb2RlLCBhcyBvZiBjb3Vyc2UgZG9lcworIAkJLy8gLWxkZmxhZ3M9LWxpbmttb2RlPWV4dGVybmFsLiBFeHRlcm5hbCBsaW5raW5nIG1vZGUgZm9yY2VzCisgCQkvLyBhbiBpbXBvcnQgb2YgcnVudGltZS9jZ28uCistCQlwaWVDZ28gOj0gY2ZnLkJ1aWxkQnVpbGRtb2RlID09ICJwaWUiICYmIChjZmcuQnVpbGRDb250ZXh0LkdPT1MgIT0gImxpbnV4IiB8fCBjZmcuQnVpbGRDb250ZXh0LkdPQVJDSCAhPSAiYW1kNjQiKQorKwkJcGllQ2dvIDo9IGNmZy5CdWlsZEJ1aWxkbW9kZSA9PSAicGllIgorIAkJbGlua21vZGVFeHRlcm5hbCA6PSBmYWxzZQorIAkJZm9yIGksIGEgOj0gcmFuZ2UgY2ZnLkJ1aWxkTGRmbGFncyB7CisgCQkJaWYgYSA9PSAiLWxpbmttb2RlPWV4dGVybmFsIiB7CistLSAKKzIuMTQuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuOS8wMDEwLW1ha2UuYmFzaC1vdmVycmlkZS1DQy13aGVuLWJ1aWxkaW5nLWRpc3QtYW5kLWdvX2Jvb3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuOS8wMDEwLW1ha2UuYmFzaC1vdmVycmlkZS1DQy13aGVuLWJ1aWxkaW5nLWRpc3QtYW5kLWdvX2Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNmZDc4YwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tMS45LzAwMTAtbWFrZS5iYXNoLW92ZXJyaWRlLUNDLXdoZW4tYnVpbGRpbmctZGlzdC1hbmQtZ29fYm9vdC5wYXRjaApAQCAtMCwwICsxLDQzIEBACitGcm9tIDIxZDgzZGQ5NDk5ZTViZTMwZWVhMjhkZDcwMzRkMWVhMmEwMWM4MzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXR0IE1hZGlzb24gPG1hdHRAbWFkaXNvbi5zeXN0ZW1zPgorRGF0ZTogVHVlLCAxNCBOb3YgMjAxNyAwNzozODo0MiAtMDgwMAorU3ViamVjdDogW1BBVENIIDEwLzEwXSBtYWtlLmJhc2g6IG92ZXJyaWRlIENDIHdoZW4gYnVpbGRpbmcgZGlzdCBhbmQKKyBnb19ib290c3RyYXAKKworRm9yIGNyb3NzLWNhbmFkaWFuIGJ1aWxkcywgZGlzdCBhbmQgZ29fYm9vdHN0cmFwCitydW4gb24gdGhlIGJ1aWxkIGhvc3QsIHNvIENDIG5lZWRzIHRvIHBvaW50IHRvIHRoZQorYnVpbGQgaG9zdCdzIEMgY29tcGlsZXIuICBBZGQgYSBCVUlMRF9DQyBlbnZpcm9ubWVudAorZm9yIHRoaXMsIGZhbGxpbmcgYmFjayB0byAkQ0MgaWYgbm90IHByZXNlbnQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXR0IE1hZGlzb24gPG1hdHRAbWFkaXNvbi5zeXN0ZW1zPgorLS0tCisgc3JjL21ha2UuYmFzaCB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbWFrZS5iYXNoIGIvc3JjL21ha2UuYmFzaAoraW5kZXggMGJkYWRjNi4uZjE5OTM0OSAxMDA3NTUKKy0tLSBhL3NyYy9tYWtlLmJhc2gKKysrKyBiL3NyYy9tYWtlLmJhc2gKK0BAIC0xMzEsNyArMTMxLDcgQEAgaWYgWyAiJEdPUk9PVF9CT09UU1RSQVAiID0gIiRHT1JPT1QiIF07IHRoZW4KKyAJZXhpdCAxCisgZmkKKyBybSAtZiBjbWQvZGlzdC9kaXN0CistR09ST09UPSIkR09ST09UX0JPT1RTVFJBUCIgR09PUz0iIiBHT0FSQ0g9IiIgIiRHT1JPT1RfQk9PVFNUUkFQL2Jpbi9nbyIgYnVpbGQgLW8gY21kL2Rpc3QvZGlzdCAuL2NtZC9kaXN0CisrQ0M9JHtCVUlMRF9DQzotJHtDQ319IEdPUk9PVD0iJEdPUk9PVF9CT09UU1RSQVAiIEdPT1M9IiIgR09BUkNIPSIiICIkR09ST09UX0JPT1RTVFJBUC9iaW4vZ28iIGJ1aWxkIC1vIGNtZC9kaXN0L2Rpc3QgLi9jbWQvZGlzdAorIAorICMgLWUgZG9lc24ndCBwcm9wYWdhdGUgb3V0IG9mIGV2YWwsIHNvIGNoZWNrIHN1Y2Nlc3MgYnkgaGFuZC4KKyBldmFsICQoLi9jbWQvZGlzdC9kaXN0IGVudiAtcCB8fCBlY2hvIEZBSUw9dHJ1ZSkKK0BAIC0xNjcsNyArMTY3LDcgQEAgZWxpZiBbICIkMSIgPSAiLS1ob3N0LW9ubHkiIF07IHRoZW4KKyBmaQorIAorIGlmIFsgIiRkb19ob3N0X2J1aWxkIiA9ICJ5ZXMiIF07IHRoZW4KKy0JLi9jbWQvZGlzdC9kaXN0IGJvb3RzdHJhcCAkYnVpbGRhbGwgJEdPX0RJU1RGTEFHUyAtdiAjIGJ1aWxkcyBnb19ib290c3RyYXAKKysJQ0M9JHtCVUlMRF9DQzotJHtDQ319IC4vY21kL2Rpc3QvZGlzdCBib290c3RyYXAgJGJ1aWxkYWxsICRHT19ESVNURkxBR1MgLXYgIyBidWlsZHMgZ29fYm9vdHN0cmFwCisgCSMgRGVsYXkgbW92ZSBvZiBkaXN0IHRvb2wgdG8gbm93LCBiZWNhdXNlIGJvb3RzdHJhcCBtYXkgY2xlYXIgdG9vbCBkaXJlY3RvcnkuCisgCW12IGNtZC9kaXN0L2Rpc3QgIiRHT1RPT0xESVIiL2Rpc3QKKyAJZWNobworLS0gCisyLjcuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLTEuOS9zZXQtZXh0ZXJuYWwtbGlua2VyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjkvc2V0LWV4dGVybmFsLWxpbmtlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmJkN2ZhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby0xLjkvc2V0LWV4dGVybmFsLWxpbmtlci5wYXRjaApAQCAtMCwwICsxLDExMSBAQAorQ2hhbmdlIHRoZSBkeW5hbWljIGxpbmtlciBoYXJkY29kaW5nIHRvIHVzZSBtdXNsIHdoZW4gbm90IHVzaW5nIGdsaWJjCit0aGlzIHNob3VsZCBiZSBhcHBsaWVkIGNvbmRpdGlvbmFsIHRvIG11c2wgYmVpbmcgdGhlIHN5c3RlbSBDIGxpYnJhcnkKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtSZWFsIEZpeCBzaG91bGQgYmUgcG9ydGFibGUgYWNyb3NzIGxpYmNzXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogZ28vc3JjL2NtZC9saW5rL2ludGVybmFsL2FtZDY0L29iai5nbworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdvLm9yaWcvc3JjL2NtZC9saW5rL2ludGVybmFsL2FtZDY0L29iai5nbworKysrIGdvL3NyYy9jbWQvbGluay9pbnRlcm5hbC9hbWQ2NC9vYmouZ28KK0BAIC02Nyw3ICs2Nyw3IEBAIGZ1bmMgSW5pdCgpIHsKKyAJbGQuVGhlYXJjaC5BcHBlbmQ2NCA9IGxkLkFwcGVuZDY0bAorIAlsZC5UaGVhcmNoLlRMU0lFdG9MRSA9IHRsc0lFdG9MRQorIAorLQlsZC5UaGVhcmNoLkxpbnV4ZHlubGQgPSAiL2xpYjY0L2xkLWxpbnV4LXg4Ni02NC5zby4yIgorKwlsZC5UaGVhcmNoLkxpbnV4ZHlubGQgPSAiL2xpYi9sZC1tdXNsLXg4Nl82NC5zby4xIgorIAlsZC5UaGVhcmNoLkZyZWVic2RkeW5sZCA9ICIvbGliZXhlYy9sZC1lbGYuc28uMSIKKyAJbGQuVGhlYXJjaC5PcGVuYnNkZHlubGQgPSAiL3Vzci9saWJleGVjL2xkLnNvIgorIAlsZC5UaGVhcmNoLk5ldGJzZGR5bmxkID0gIi9saWJleGVjL2xkLmVsZl9zbyIKK0luZGV4OiBnby9zcmMvY21kL2xpbmsvaW50ZXJuYWwvYXJtL29iai5nbworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdvLm9yaWcvc3JjL2NtZC9saW5rL2ludGVybmFsL2FybS9vYmouZ28KKysrKyBnby9zcmMvY21kL2xpbmsvaW50ZXJuYWwvYXJtL29iai5nbworQEAgLTYzLDcgKzYzLDcgQEAgZnVuYyBJbml0KCkgeworIAlsZC5UaGVhcmNoLkFwcGVuZDMyID0gbGQuQXBwZW5kMzJsCisgCWxkLlRoZWFyY2guQXBwZW5kNjQgPSBsZC5BcHBlbmQ2NGwKKyAKKy0JbGQuVGhlYXJjaC5MaW51eGR5bmxkID0gIi9saWIvbGQtbGludXguc28uMyIgLy8gMiBmb3IgT0FCSSwgMyBmb3IgRUFCSQorKwlsZC5UaGVhcmNoLkxpbnV4ZHlubGQgPSAiL2xpYi9sZC1tdXNsLWFybWhmLnNvLjEiCisgCWxkLlRoZWFyY2guRnJlZWJzZGR5bmxkID0gIi91c3IvbGliZXhlYy9sZC1lbGYuc28uMSIKKyAJbGQuVGhlYXJjaC5PcGVuYnNkZHlubGQgPSAiL3Vzci9saWJleGVjL2xkLnNvIgorIAlsZC5UaGVhcmNoLk5ldGJzZGR5bmxkID0gIi9saWJleGVjL2xkLmVsZl9zbyIKK0luZGV4OiBnby9zcmMvY21kL2xpbmsvaW50ZXJuYWwvYXJtNjQvb2JqLmdvCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ28ub3JpZy9zcmMvY21kL2xpbmsvaW50ZXJuYWwvYXJtNjQvb2JqLmdvCisrKysgZ28vc3JjL2NtZC9saW5rL2ludGVybmFsL2FybTY0L29iai5nbworQEAgLTYyLDcgKzYyLDcgQEAgZnVuYyBJbml0KCkgeworIAlsZC5UaGVhcmNoLkFwcGVuZDMyID0gbGQuQXBwZW5kMzJsCisgCWxkLlRoZWFyY2guQXBwZW5kNjQgPSBsZC5BcHBlbmQ2NGwKKyAKKy0JbGQuVGhlYXJjaC5MaW51eGR5bmxkID0gIi9saWIvbGQtbGludXgtYWFyY2g2NC5zby4xIgorKwlsZC5UaGVhcmNoLkxpbnV4ZHlubGQgPSAiL2xpYi9sZC1tdXNsLWFhcmNoNjQuc28uMSIKKyAKKyAJbGQuVGhlYXJjaC5GcmVlYnNkZHlubGQgPSAiWFhYIgorIAlsZC5UaGVhcmNoLk9wZW5ic2RkeW5sZCA9ICJYWFgiCitJbmRleDogZ28vc3JjL2NtZC9saW5rL2ludGVybmFsL21pcHMvb2JqLmdvCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ28ub3JpZy9zcmMvY21kL2xpbmsvaW50ZXJuYWwvbWlwcy9vYmouZ28KKysrKyBnby9zcmMvY21kL2xpbmsvaW50ZXJuYWwvbWlwcy9vYmouZ28KK0BAIC03Nyw3ICs3Nyw3IEBAIGZ1bmMgSW5pdCgpIHsKKyAJCWxkLlRoZWFyY2guQXBwZW5kNjQgPSBsZC5BcHBlbmQ2NGIKKyAJfQorIAorLQlsZC5UaGVhcmNoLkxpbnV4ZHlubGQgPSAiL2xpYi9sZC5zby4xIgorKwlsZC5UaGVhcmNoLkxpbnV4ZHlubGQgPSAiL2xpYi9sZC1tdXNsLW1pcHNsZS5zby4xIgorIAorIAlsZC5UaGVhcmNoLkZyZWVic2RkeW5sZCA9ICJYWFgiCisgCWxkLlRoZWFyY2guT3BlbmJzZGR5bmxkID0gIlhYWCIKK0luZGV4OiBnby9zcmMvY21kL2xpbmsvaW50ZXJuYWwvbWlwczY0L29iai5nbworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdvLm9yaWcvc3JjL2NtZC9saW5rL2ludGVybmFsL21pcHM2NC9vYmouZ28KKysrKyBnby9zcmMvY21kL2xpbmsvaW50ZXJuYWwvbWlwczY0L29iai5nbworQEAgLTc1LDcgKzc1LDcgQEAgZnVuYyBJbml0KCkgeworIAkJbGQuVGhlYXJjaC5BcHBlbmQ2NCA9IGxkLkFwcGVuZDY0YgorIAl9CisgCistCWxkLlRoZWFyY2guTGludXhkeW5sZCA9ICIvbGliNjQvbGQ2NC5zby4xIgorKwlsZC5UaGVhcmNoLkxpbnV4ZHlubGQgPSAiL2xpYjY0L2xkLW11c2wtbWlwczY0bGUuc28uMSIKKyAKKyAJbGQuVGhlYXJjaC5GcmVlYnNkZHlubGQgPSAiWFhYIgorIAlsZC5UaGVhcmNoLk9wZW5ic2RkeW5sZCA9ICJYWFgiCitJbmRleDogZ28vc3JjL2NtZC9saW5rL2ludGVybmFsL3BwYzY0L29iai5nbworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdvLm9yaWcvc3JjL2NtZC9saW5rL2ludGVybmFsL3BwYzY0L29iai5nbworKysrIGdvL3NyYy9jbWQvbGluay9pbnRlcm5hbC9wcGM2NC9vYmouZ28KK0BAIC03Nyw3ICs3Nyw3IEBAIGZ1bmMgSW5pdCgpIHsKKyAJfQorIAorIAkvLyBUT0RPKGF1c3Rpbik6IEFCSSB2MSB1c2VzIC91c3IvbGliL2xkLnNvLjEKKy0JbGQuVGhlYXJjaC5MaW51eGR5bmxkID0gIi9saWI2NC9sZDY0LnNvLjEiCisrCWxkLlRoZWFyY2guTGludXhkeW5sZCA9ICIvbGliL2xkLW11c2wtcG93ZXJwYzY0bGUuc28uMSIKKyAKKyAJbGQuVGhlYXJjaC5GcmVlYnNkZHlubGQgPSAiWFhYIgorIAlsZC5UaGVhcmNoLk9wZW5ic2RkeW5sZCA9ICJYWFgiCitJbmRleDogZ28vc3JjL2NtZC9saW5rL2ludGVybmFsL3MzOTB4L29iai5nbworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdvLm9yaWcvc3JjL2NtZC9saW5rL2ludGVybmFsL3MzOTB4L29iai5nbworKysrIGdvL3NyYy9jbWQvbGluay9pbnRlcm5hbC9zMzkweC9vYmouZ28KK0BAIC02Miw3ICs2Miw3IEBAIGZ1bmMgSW5pdCgpIHsKKyAJbGQuVGhlYXJjaC5BcHBlbmQzMiA9IGxkLkFwcGVuZDMyYgorIAlsZC5UaGVhcmNoLkFwcGVuZDY0ID0gbGQuQXBwZW5kNjRiCisgCistCWxkLlRoZWFyY2guTGludXhkeW5sZCA9ICIvbGliNjQvbGQ2NC5zby4xIgorKwlsZC5UaGVhcmNoLkxpbnV4ZHlubGQgPSAiL2xpYi9sZC1tdXNsLXMzOTB4LnNvLjEiCisgCisgCS8vIG5vdCByZWxldmFudCBmb3IgczM5MHgKKyAJbGQuVGhlYXJjaC5GcmVlYnNkZHlubGQgPSAiWFhYIgorSW5kZXg6IGdvL3NyYy9jbWQvbGluay9pbnRlcm5hbC94ODYvb2JqLmdvCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ28ub3JpZy9zcmMvY21kL2xpbmsvaW50ZXJuYWwveDg2L29iai5nbworKysrIGdvL3NyYy9jbWQvbGluay9pbnRlcm5hbC94ODYvb2JqLmdvCitAQCAtNjMsNyArNjMsNyBAQCBmdW5jIEluaXQoKSB7CisgCWxkLlRoZWFyY2guQXBwZW5kMzIgPSBsZC5BcHBlbmQzMmwKKyAJbGQuVGhlYXJjaC5BcHBlbmQ2NCA9IGxkLkFwcGVuZDY0bAorIAorLQlsZC5UaGVhcmNoLkxpbnV4ZHlubGQgPSAiL2xpYi9sZC1saW51eC5zby4yIgorKwlsZC5UaGVhcmNoLkxpbnV4ZHlubGQgPSAiL2xpYi9sZC1tdXNsLWkzODYuc28uMSIKKyAJbGQuVGhlYXJjaC5GcmVlYnNkZHlubGQgPSAiL3Vzci9saWJleGVjL2xkLWVsZi5zby4xIgorIAlsZC5UaGVhcmNoLk9wZW5ic2RkeW5sZCA9ICIvdXNyL2xpYmV4ZWMvbGQuc28iCisgCWxkLlRoZWFyY2guTmV0YnNkZHlubGQgPSAiL3Vzci9saWJleGVjL2xkLmVsZl9zbyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tYm9vdHN0cmFwLW5hdGl2ZV8xLjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLWJvb3RzdHJhcC1uYXRpdmVfMS40LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDQxNDFlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tYm9vdHN0cmFwLW5hdGl2ZV8xLjQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLUJPT1RTVFJBUCA9ICIxLjQiCi1yZXF1aXJlIGdvLW5hdGl2ZS5pbmMKLXJlcXVpcmUgZ28tJHtQVn0uaW5jCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLWNvbW1vbi5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLWNvbW1vbi5pbmMKaW5kZXggZjc0YjhiNy4uOWFmNjg3MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby1jb21tb24uaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tY29tbW9uLmluYwpAQCAtMTQsOSArMTQsMTMgQEAKIAogaW5oZXJpdCBnb2FyY2gKIAotU1JDX1VSSSA9ICJodHRwOi8vZ29sYW5nLm9yZy9kbC9nbyR7UFZ9LnNyYy50YXIuZ3oiCitTUkNfVVJJID0gImh0dHA6Ly9nb2xhbmcub3JnL2RsL2dvJHtQVn0uc3JjLnRhci5nejtuYW1lPW1haW4iCiBTID0gIiR7V09SS0RJUn0vZ28iCiBCID0gIiR7U30iCiAKIElOSElCSVRfUEFDS0FHRV9ERUJVR19TUExJVCA9ICIxIgogU1NUQVRFX1NDQU5fQ01EID0gInRydWUiCisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKwlCVUlMRF9DQz0ke0JVSUxEX0NDfQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby1jcm9zcy1jYW5hZGlhbi5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLWNyb3NzLWNhbmFkaWFuLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWZkYTZiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby1jcm9zcy1jYW5hZGlhbi5pbmMKQEAgLTAsMCArMSw2MiBAQAoraW5oZXJpdCBjcm9zcy1jYW5hZGlhbgorCitERVBFTkRTID0gImdvLW5hdGl2ZSB2aXJ0dWFsLyR7SE9TVF9QUkVGSVh9Z28tY3Jvc3NzZGsgdmlydHVhbC9uYXRpdmVzZGstJHtIT1NUX1BSRUZJWH1nby1ydW50aW1lIFwKKyAgICAgICAgICAgdmlydHVhbC8ke0hPU1RfUFJFRklYfWdjYy1jcm9zc3NkayB2aXJ0dWFsL25hdGl2ZXNkay0ke0hPU1RfUFJFRklYfWxpYmMtZm9yLWdjYyBcCisgICAgICAgICAgIHZpcnR1YWwvbmF0aXZlc2RrLSR7SE9TVF9QUkVGSVh9Y29tcGlsZXJsaWJzIgorUE4gPSAiZ28tY3Jvc3MtY2FuYWRpYW4tJHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfSIKKworZXhwb3J0IEdPSE9TVE9TID0gIiR7QlVJTERfR09PU30iCitleHBvcnQgR09IT1NUQVJDSCA9ICIke0JVSUxEX0dPQVJDSH0iCitleHBvcnQgR09IT1NUT1NfQ1JPU1MgPSAiJHtIT1NUX0dPT1N9IgorZXhwb3J0IEdPSE9TVEFSQ0hfQ1JPU1MgPSAiJHtIT1NUX0dPQVJDSH0iCitleHBvcnQgR09ST09UX0JPT1RTVFJBUCA9ICIke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ28iCitleHBvcnQgR09UT09MRElSX0JPT1RTVFJBUCA9ICIke1NUQUdJTkdfTElCRElSX05BVElWRX0vJHtIT1NUX1NZU30vZ28vcGtnL3Rvb2wvJHtCVUlMRF9HT1RVUExFfSIKK2V4cG9ydCBHT1JPT1RfRklOQUwgPSAiJHtsaWJkaXJ9L2dvIgorZXhwb3J0IENHT19FTkFCTEVEID0gIjEiCitleHBvcnQgQ0NfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9Z2NjIgorZXhwb3J0IENYWF9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1nKysiCitDQyA9ICIke0hPU1RfUFJFRklYfWdjYyIKK2V4cG9ydCBDR09fQ0ZMQUdTID0gIi0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gJHtIT1NUX0NDX0FSQ0h9ICR7Q0ZMQUdTfSIKK2V4cG9ydCBDR09fTERGTEFHUyA9ICItLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9ICR7SE9TVF9DQ19BUkNIfSAke0xERkxBR1N9IgorZXhwb3J0IEdPX0xERkxBR1MgPSAnLWxpbmttb2RlIGV4dGVybmFsIC1leHRsZCAke0hPU1RfUFJFRklYfWdjYyAtZXh0bGRmbGFncyAiLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSAke0hPU1RfQ0NfQVJDSH0gJHtMREZMQUdTfSInCisKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCisKK2RvX2NvbXBpbGUoKSB7CisJZXhwb3J0IEdPQklOPSIke0J9L2JpbiIKKwlybSAtcmYgJHtHT0JJTn0gJHtCfS9wa2cKKwlta2RpciAke0dPQklOfQorCWNkIHNyYworCS4vbWFrZS5iYXNoIC0taG9zdC1vbmx5IC0tbm8tYmFubmVyCisJY2QgJHtCfQorfQorCisKK21ha2Vfd3JhcHBlcigpIHsKKyAgICBybSAtZiAke0R9JHtiaW5kaXJ9LyQyCisgICAgY2F0IDw8RU5EID4ke0R9JHtiaW5kaXJ9LyQyCisjIS9iaW4vc2gKK2hlcmU9XGBkaXJuYW1lIFwkMFxgCituYXRpdmVfZ29yb290PVxgcmVhZGxpbmsgLWYgXCRoZXJlLy4uLy4uL2xpYi8ke1RBUkdFVF9TWVN9L2dvXGAKK2V4cG9ydCBHT0FSQ0g9IiR7VEFSR0VUX0dPQVJDSH0iCitleHBvcnQgR09PUz0iJHtUQVJHRVRfR09PU30iCit0ZXN0IC1uICJcJEdPQVJNIiB8fCBleHBvcnQgR09BUk09IiR7VEFSR0VUX0dPQVJNfSIKK3Rlc3QgLW4gIlwkR08zODYiIHx8IGV4cG9ydCBHTzM4Nj0iJHtUQVJHRVRfR08zODZ9IgorZXhwb3J0IEdPVE9PTERJUj0iXCRuYXRpdmVfZ29yb290L3BrZy90b29sLyR7SE9TVF9HT1RVUExFfSIKK3Rlc3QgLW4gIlwkR09ST09UIiB8fCBleHBvcnQgR09ST09UPSJcJE9FQ09SRV9UQVJHRVRfU1lTUk9PVC8ke3RhcmdldF9saWJkaXJ9L2dvIgorXCRoZXJlLy4uLy4uL2xpYi8ke1RBUkdFVF9TWVN9L2dvL2Jpbi8kMSAiXCRAIgorRU5ECisgICAgY2htb2QgK3ggJHtEfSR7YmluZGlyfS8kMgorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9nby9wa2cvdG9vbAorCWNwIC0tcHJlc2VydmU9bW9kZSx0aW1lc3RhbXBzIC1SICR7Qn0vcGtnL3Rvb2wvJHtIT1NUX0dPVFVQTEV9ICR7RH0ke2xpYmRpcn0vZ28vcGtnL3Rvb2wvCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9ICR7RH0ke2xpYmRpcn0vZ28vYmluCisJZm9yIGYgaW4gJHtCfS8ke0dPX0JVSUxEX0JJTkRJUn0vKgorCWRvCisJCWJhc2U9YGJhc2VuYW1lICRmYAorCQlpbnN0YWxsIC1tNzU1ICRmICR7RH0ke2xpYmRpcn0vZ28vYmluCisJCW1ha2Vfd3JhcHBlciAkYmFzZSAke1RBUkdFVF9QUkVGSVh9JGJhc2UKKwlkb25lCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLWNyb3NzLWNhbmFkaWFuXzEuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tY3Jvc3MtY2FuYWRpYW5fMS45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYzk0NDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLWNyb3NzLWNhbmFkaWFuXzEuOS5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgZ28tY3Jvc3MtY2FuYWRpYW4uaW5jCityZXF1aXJlIGdvLSR7UFZ9LmluYwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby1jcm9zcy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLWNyb3NzLmluYwppbmRleCA5MzIwNmE1Li4zYWM3MjExIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLWNyb3NzLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLWNyb3NzLmluYwpAQCAtMSwxOCArMSw2MiBAQAogaW5oZXJpdCBjcm9zcwogCi1ERVBFTkRTICs9ICJnY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH0iCitQUk9WSURFUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nbyIKK0RFUEVORFMgKz0gImdvLW5hdGl2ZSIKIAogUE4gPSAiZ28tY3Jvc3MtJHtUQVJHRVRfQVJDSH0iCiAKLSMgSWdub3JlIGhvdyBUQVJHRVRfQVJDSCBpcyBjb21wdXRlZC4KLVRBUkdFVF9BUkNIW3ZhcmRlcHZhbHVlXSA9ICIke1RBUkdFVF9BUkNIfSIKK2V4cG9ydCBHT0hPU1RPUyA9ICIke0JVSUxEX0dPT1N9IgorZXhwb3J0IEdPSE9TVEFSQ0ggPSAiJHtCVUlMRF9HT0FSQ0h9IgorZXhwb3J0IEdPT1MgPSAiJHtUQVJHRVRfR09PU30iCitleHBvcnQgR09BUkNIID0gIiR7VEFSR0VUX0dPQVJDSH0iCitleHBvcnQgR09BUk0gPSAiJHtUQVJHRVRfR09BUk19IgorZXhwb3J0IEdPMzg2ID0gIiR7VEFSR0VUX0dPMzg2fSIKK2V4cG9ydCBHT1JPT1RfQk9PVFNUUkFQID0gIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nbyIKK2V4cG9ydCBHT1JPT1RfRklOQUwgPSAiJHtsaWJkaXJ9L2dvIgorZXhwb3J0IENHT19FTkFCTEVEID0gIjEiCitleHBvcnQgQ0NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfUFJFRklYfWdjYyAke1RBUkdFVF9DQ19BUkNIfSAtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IgorZXhwb3J0IENYWF9GT1JfVEFSR0VUPSIke1RBUkdFVF9QUkVGSVh9ZysrICR7VEFSR0VUX0NDX0FSQ0h9IC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0iCitDQyA9ICIke0BkLmdldFZhcignQlVJTERfQ0MnKS5zdHJpcCgpfSIKIAotRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vZ28tY3Jvc3M6IgorZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKIAotR09ST09UX0ZJTkFMID0gIiR7bGliZGlyfS9nbyIKLWV4cG9ydCBHT1JPT1RfRklOQUwKK2RvX2NvbXBpbGUoKSB7CisgICAgZXhwb3J0IEdPQklOPSIke0J9L2JpbiIKKyAgICBybSAtcmYgJHtHT0JJTn0gJHtCfS9wa2cKKyAgICBta2RpciAke0dPQklOfQorICAgIGNkIHNyYworICAgIC4vbWFrZS5iYXNoIC0taG9zdC1vbmx5CisgICAgY2QgJHtCfQorfQogCi0jIHgzMiBBQkkgaXMgbm90IHN1cHBvcnRlZCBvbiBnbyBjb21waWxlciBzbyBmYXIKLUNPTVBBVElCTEVfSE9TVF9saW51eC1nbnV4MzIgPSAibnVsbCIKLSMgcHBjMzIgaXMgbm90IHN1cHBvcnRlZCBpbiBnbyBjb21waWxlcnMKLUNPTVBBVElCTEVfSE9TVF9wb3dlcnBjID0gIm51bGwiCisKK21ha2Vfd3JhcHBlcigpIHsKKyAgICBybSAtZiAke0R9JHtiaW5kaXJ9LyQyCisgICAgY2F0IDw8RU5EID4ke0R9JHtiaW5kaXJ9LyQyCisjIS9iaW4vYmFzaAoraGVyZT1cYGRpcm5hbWUgXCQwXGAKK2V4cG9ydCBHT0FSQ0g9IiR7VEFSR0VUX0dPQVJDSH0iCitleHBvcnQgR09PUz0iJHtUQVJHRVRfR09PU30iCitleHBvcnQgR09BUk09Ilwke0dPQVJNOi0ke1RBUkdFVF9HT0FSTX19IgorZXhwb3J0IEdPMzg2PSJcJHtHTzM4NjotJHtUQVJHRVRfR08zODZ9fSIKK1wkaGVyZS8uLi8uLi9saWIvJHtDUk9TU19UQVJHRVRfU1lTX0RJUn0vZ28vYmluLyQxICJcJEAiCitFTkQKKyAgICBjaG1vZCAreCAke0R9JHtiaW5kaXJ9LyQyCit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L2dvCisgICAgY3AgLS1wcmVzZXJ2ZT1tb2RlLHRpbWVzdGFtcHMgLVIgJHtCfS9wa2cgJHtEfSR7bGliZGlyfS9nby8KKyAgICBpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vZ28vc3JjCisgICAgKGNkICR7U30vc3JjOyBmb3IgZCBpbiAqOyBkbyBcCisgICAgICAgIFsgISAtZCAkZCBdIHx8IGNwIC0tcHJlc2VydmU9bW9kZSx0aW1lc3RhbXBzIC1SICR7U30vc3JjLyRkICR7RH0ke2xpYmRpcn0vZ28vc3JjLzsgXAorICAgIGRvbmUpCisgICAgcm0gLXJmICR7RH0ke2xpYmRpcn0vZ28vc3JjL3J1bnRpbWUvcHByb2YvdGVzdGRhdGEKKyAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0gJHtEfSR7bGliZGlyfS9nby9iaW4KKyAgICBmb3IgZiBpbiAke0J9L2Jpbi8qCisgICAgZG8KKyAgICAgICAgYmFzZT1gYmFzZW5hbWUgJGZgCisgICAgICAgIGluc3RhbGwgLW03NTUgJGYgJHtEfSR7bGliZGlyfS9nby9iaW4KKyAgICAgICAgbWFrZV93cmFwcGVyICRiYXNlICR7VEFSR0VUX1BSRUZJWH0kYmFzZQorICAgIGRvbmUKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tY3Jvc3NfMS43LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby1jcm9zc18xLjcuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ZWUwODQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby1jcm9zc18xLjcuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLXJlcXVpcmUgZ28tY3Jvc3MuaW5jCi1yZXF1aXJlIGdvXyR7UFZ9LmJiCi0KLSMgR28gYmluYXJpZXMgYXJlIG5vdCB1bmRlcnN0b29kIGJ5IHRoZSBzdHJpcCB0b29sLgotSU5ISUJJVF9TWVNST09UX1NUUklQID0gIjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLWNyb3NzXzEuOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tY3Jvc3NfMS44LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmVlMDg0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tY3Jvc3NfMS44LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1yZXF1aXJlIGdvLWNyb3NzLmluYwotcmVxdWlyZSBnb18ke1BWfS5iYgotCi0jIEdvIGJpbmFyaWVzIGFyZSBub3QgdW5kZXJzdG9vZCBieSB0aGUgc3RyaXAgdG9vbC4KLUlOSElCSVRfU1lTUk9PVF9TVFJJUCA9ICIxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby1jcm9zc18xLjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLWNyb3NzXzEuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGI1YTAzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby1jcm9zc18xLjkuYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIGdvLWNyb3NzLmluYworcmVxdWlyZSBnby0ke1BWfS5pbmMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tY3Jvc3NzZGsuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby1jcm9zc3Nkay5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY3ZTRiOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tY3Jvc3NzZGsuaW5jCkBAIC0wLDAgKzEsNTQgQEAKK2luaGVyaXQgY3Jvc3NzZGsKKworREVQRU5EUyA9ICJnby1uYXRpdmUgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjLWNyb3Nzc2RrIHZpcnR1YWwvbmF0aXZlc2RrLSR7VEFSR0VUX1BSRUZJWH1jb21waWxlcmxpYnMgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9YmludXRpbHMtY3Jvc3NzZGsiCitQTiA9ICJnby1jcm9zc3Nkay0ke1RBUkdFVF9BUkNIfSIKK1BST1ZJREVTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdvLWNyb3Nzc2RrIgorCitleHBvcnQgR09IT1NUT1MgPSAiJHtCVUlMRF9HT09TfSIKK2V4cG9ydCBHT0hPU1RBUkNIID0gIiR7QlVJTERfR09BUkNIfSIKK2V4cG9ydCBHT09TID0gIiR7VEFSR0VUX0dPT1N9IgorZXhwb3J0IEdPQVJDSCA9ICIke1RBUkdFVF9HT0FSQ0h9IgorZXhwb3J0IEdPUk9PVF9CT09UU1RSQVAgPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dvIgorZXhwb3J0IEdPUk9PVF9GSU5BTCA9ICIke2xpYmRpcn0vZ28iCitleHBvcnQgQ0dPX0VOQUJMRUQgPSAiMSIKK2V4cG9ydCBDQ19GT1JfVEFSR0VUPSIke1RBUkdFVF9QUkVGSVh9Z2NjICR7VEFSR0VUX0NDX0FSQ0h9IC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke1NES1BBVEhOQVRJVkV9IgorZXhwb3J0IENYWF9GT1JfVEFSR0VUPSIke1RBUkdFVF9QUkVGSVh9ZysrICR7VEFSR0VUX0NDX0FSQ0h9IC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke1NES1BBVEhOQVRJVkV9IgorZXhwb3J0IEdPX0lOU1RBTEwgPSAiY21kIgorQ0MgPSAiJHtAZC5nZXRWYXIoJ0JVSUxEX0NDJykuc3RyaXAoKX0iCisKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCisKK2RvX2NvbXBpbGUoKSB7CisJZXhwb3J0IEdPQklOPSIke0J9L2JpbiIKKwlybSAtcmYgJHtHT0JJTn0gJHtCfS9wa2cKKwlta2RpciAke0dPQklOfQorCWNkIHNyYworCS4vbWFrZS5iYXNoIC0taG9zdC1vbmx5CisJY2QgJHtCfQorfQorCittYWtlX3dyYXBwZXIoKSB7CisgICAgcm0gLWYgJHtEfSR7YmluZGlyfS8kMgorICAgIGNhdCA8PEVORCA+JHtEfSR7YmluZGlyfS8kMgorIyEvYmluL2Jhc2gKK2hlcmU9XGBkaXJuYW1lIFwkMFxgCitleHBvcnQgR09BUkNIPSIke1RBUkdFVF9HT0FSQ0h9IgorZXhwb3J0IEdPT1M9IiR7VEFSR0VUX0dPT1N9IgorXCRoZXJlLy4uLy4uL2xpYi8ke0NST1NTX1RBUkdFVF9TWVNfRElSfS9nby9iaW4vJDEgIlwkQCIKK0VORAorICAgIGNobW9kICt4ICR7RH0ke2JpbmRpcn0vJDIKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vZ28KKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vZ28vYmluCisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L2dvL3BrZy90b29sCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJY3AgLS1wcmVzZXJ2ZT1tb2RlLHRpbWVzdGFtcHMgLVIgJHtTfS9wa2cvdG9vbC8ke0JVSUxEX0dPVFVQTEV9ICR7RH0ke2xpYmRpcn0vZ28vcGtnL3Rvb2wvCisJZm9yIGYgaW4gJHtCfS9iaW4vKgorCWRvCisJCWJhc2U9YGJhc2VuYW1lICRmYAorCQlpbnN0YWxsIC1tNzU1ICRmICR7RH0ke2xpYmRpcn0vZ28vYmluCisJCW1ha2Vfd3JhcHBlciAkYmFzZSAke1RBUkdFVF9QUkVGSVh9JGJhc2UKKwlkb25lCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLWNyb3Nzc2RrXzEuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tY3Jvc3NzZGtfMS45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NTdjOGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLWNyb3Nzc2RrXzEuOS5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgZ28tY3Jvc3NzZGsuaW5jCityZXF1aXJlIGdvLSR7UFZ9LmluYwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby1kZXBfMC4zLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLWRlcF8wLjMuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmZlYjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby1kZXBfMC4zLjAuYmIKQEAgLTAsMCArMSwxNiBAQAorU1VNTUFSWSA9ICJEZXBlbmRlbmN5IG1hbmFnZW1lbnQgdG9vbCBmb3IgR29sYW5nIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL2dvbGFuZy9kZXAiCitMSUNFTlNFID0gIkJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NyYy8ke0dPX0lNUE9SVH0vTElDRU5TRTttZDU9MWJhZDMxNTY0Nzc1MWZhYjAwMDc4MTJmNzBkNDJjMGQiCisKK0dPX0lNUE9SVCA9ICJnaXRodWIuY29tL2dvbGFuZy9kZXAiCitTUkNfVVJJID0gImdpdDovLyR7R09fSU1QT1JUfSIKKworIyBQb2ludHMgdG8gMC4zLjAgdGFnCitTUkNSRVYgPSAiN2E5MWI3OTRiYmZiZjFmM2I4Yjc5ODIzNzk5MzE2NDUxMTI3ODAxYiIKKworaW5oZXJpdCBnbworCitHT19JTlNUQUxMID0gIiR7R09fSU1QT1JUfS9jbWQvZGVwIgorCitSREVQRU5EU18ke1BOfS1kZXYgKz0gImJhc2giCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLW5hdGl2ZS5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLW5hdGl2ZS5pbmMKaW5kZXggYzIxZjhmZC4uOTVkYjFjMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby1uYXRpdmUuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tbmF0aXZlLmluYwpAQCAtMSwxNiArMSwyOCBAQAorIyBVc2UgaW1tZWRpYXRlIGFzc2luZ21lbnQgaGVyZSB0byBnZXQgdGhlIG9yaWdpbmFsICgvdXNyL2xpYikKKyMgaW5zdGVhZCBvZiB0aGUgb25lIHJld3JpdHRlbiBieSBuYXRpdmUuYmJjbGFzcy4KK25vbnN0YWdpbmdfbGliZGlyIDo9ICIke2xpYmRpcn0iCisKIGluaGVyaXQgbmF0aXZlCiAKLUJPT1RTVFJBUCA/PSAiIgorU1JDX1VSSV9hcHBlbmQgPSAiIGh0dHA6Ly9nb2xhbmcub3JnL2RsL2dvMS40LjMuc3JjLnRhci5nejtuYW1lPWJvb3RzdHJhcDtzdWJkaXI9Z28xLjQiCitTUkNfVVJJW2Jvb3RzdHJhcC5tZDVzdW1dID0gImRmYjYwNDUxMTExNWRkNDAyYTc3YTU1M2E1OTIzYTA0IgorU1JDX1VSSVtib290c3RyYXAuc2hhMjU2c3VtXSA9ICI5OTQ3ZmM3MDViMGI4NDFiNTkzOGM0OGIyMmRjMzNlOTY0N2VjMDc1MmJhZTY2ZTUwMjc4ZGY0ZjIzZjY0OTU5IgorCiBleHBvcnQgR09PUyA9ICIke0JVSUxEX0dPT1N9IgogZXhwb3J0IEdPQVJDSCA9ICIke0JVSUxEX0dPQVJDSH0iCi1leHBvcnQgR09ST09UX0ZJTkFMID0gIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nbyR7Qk9PVFNUUkFQfSIKLWV4cG9ydCBHT1JPT1RfQk9PVFNUUkFQID0gIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nbzEuNCIKK0NDID0gIiR7QGQuZ2V0VmFyKCdCVUlMRF9DQycpLnN0cmlwKCl9IgorCiBleHBvcnQgQ0dPX0VOQUJMRUQgPSAiMSIKIAotZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICBjZCAke1dPUktESVJ9L2dvMS40L2dvL3NyYworICAgIENHT19FTkFCTEVEPTAgR09ST09UPSR7V09SS0RJUn0vZ28xLjQvZ28gLi9tYWtlLmJhc2gKK30KIAogZG9fY29tcGlsZSgpIHsKIAlleHBvcnQgR09CSU49IiR7Qn0vYmluIgorCWV4cG9ydCBHT1JPT1RfRklOQUw9IiR7bm9uc3RhZ2luZ19saWJkaXJ9L2dvIgorCWV4cG9ydCBHT1JPT1RfQk9PVFNUUkFQPSIke1dPUktESVJ9L2dvMS40L2dvIgogCXJtIC1yZiAke0dPQklOfQogCW1rZGlyICR7R09CSU59CiAKQEAgLTE4LDcgKzMwLDcgQEAKIAlta2RpciAtcCAke1dPUktESVJ9L2J1aWxkLXRtcAogCiAJY2Qgc3JjCi0JQ0dPX0VOQUJMRUQ9MCAuL21ha2UuYmFzaCAtLWhvc3Qtb25seQorCS4vbWFrZS5iYXNoIC0taG9zdC1vbmx5CiB9CiAKIG1ha2Vfd3JhcHBlcigpIHsKQEAgLTI2LDMxICszOCwyNSBAQAogCWNhdCA8PEVORCA+JHtEfSR7YmluZGlyfS8kMiQzCiAjIS9iaW4vYmFzaAogaGVyZT1cYGRpcm5hbWUgXCQwXGAKLWV4cG9ydCBHT1JPT1Q9IiR7R09ST09UOi1cYHJlYWRsaW5rIC1mIFwkaGVyZS8uLi9saWIvZ28kM1xgfSIKLVwkaGVyZS8uLi9saWIvZ28kMy9iaW4vJDEgIlwkQCIKK2V4cG9ydCBHT1JPT1Q9IiR7R09ST09UOi1cYHJlYWRsaW5rIC1mIFwkaGVyZS8uLi9saWIvZ29cYH0iCitcJGhlcmUvLi4vbGliL2dvL2Jpbi8kMSAiXCRAIgogRU5ECi0JY2htb2QgK3ggJHtEfSR7YmluZGlyfS8kMiQzCisJY2htb2QgK3ggJHtEfSR7YmluZGlyfS8kMgogfQogCiBkb19pbnN0YWxsKCkgewotCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9nbyR7Qk9PVFNUUkFQfQotCWNwIC1hICR7Qn0vcGtnICR7RH0ke2xpYmRpcn0vZ28ke0JPT1RTVFJBUH0vCi0JaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L2dvJHtCT09UU1RSQVB9L3NyYworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9nbworCWNwIC0tcHJlc2VydmU9bW9kZSx0aW1lc3RhbXBzIC1SICR7Qn0vcGtnICR7RH0ke2xpYmRpcn0vZ28vCisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L2dvL3NyYwogCShjZCAke1N9L3NyYzsgZm9yIGQgaW4gKjsgZG8gXAotCQlbIC1kICRkIF0gJiYgY3AgLWEgJHtTfS9zcmMvJGQgJHtEfSR7bGliZGlyfS9nbyR7Qk9PVFNUUkFQfS9zcmMvOyBcCisJCVsgLWQgJGQgXSAmJiBjcCAtYSAke1N9L3NyYy8kZCAke0R9JHtsaWJkaXJ9L2dvL3NyYy87IFwKIAlkb25lKQotCi0JaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9ICR7RH0ke2xpYmRpcn0vZ28ke0JPT1RTVFJBUH0vYmluCisJcm0gLXJmICR7RH0ke2xpYmRpcn0vZ28vc3JjL3J1bnRpbWUvcHByb2YvdGVzdGRhdGEKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0gJHtEfSR7bGliZGlyfS9nby9iaW4KIAlmb3IgZiBpbiAke0J9L2Jpbi8qCiAJZG8KIAkJYmFzZT1gYmFzZW5hbWUgJGZgCi0JCWluc3RhbGwgLW03NTUgJGYgJHtEfSR7bGliZGlyfS9nbyR7Qk9PVFNUUkFQfS9iaW4KLQkJbWFrZV93cmFwcGVyICRiYXNlICRiYXNlICR7Qk9PVFNUUkFQfQorCQlpbnN0YWxsIC1tNzU1ICRmICR7RH0ke2xpYmRpcn0vZ28vYmluCisJCW1ha2Vfd3JhcHBlciAkYmFzZSAkYmFzZQogCWRvbmUKIH0KLQotZG9fcGFja2FnZVtub2V4ZWNdID0gIjEiCi1kb19wYWNrYWdlZGF0YVtub2V4ZWNdID0gIjEiCi1kb19wYWNrYWdlX3dyaXRlX2lwa1tub2V4ZWNdID0gIjEiCi1kb19wYWNrYWdlX3dyaXRlX2RlYltub2V4ZWNdID0gIjEiCi1kb19wYWNrYWdlX3dyaXRlX3JwbVtub2V4ZWNdID0gIjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLW5hdGl2ZV8xLjguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLW5hdGl2ZV8xLjguYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MmZjYTIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby1uYXRpdmVfMS44LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1yZXF1aXJlICR7UE59LmluYwotcmVxdWlyZSBnby0ke1BWfS5pbmMKLURFUEVORFMgKz0gImdvLWJvb3RzdHJhcC1uYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLW5hdGl2ZV8xLjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLW5hdGl2ZV8xLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJmM2MwZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tbmF0aXZlXzEuOS5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgJHtQTn0uaW5jCityZXF1aXJlIGdvLSR7UFZ9LmluYwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby1ydW50aW1lLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tcnVudGltZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlhZTg2ZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tcnVudGltZS5pbmMKQEAgLTAsMCArMSw5OCBAQAorREVQRU5EUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nbyBnby1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nby1jcm9zc3NkayIKK1BST1ZJREVTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdvLXJ1bnRpbWUiCisKK2V4cG9ydCBHT0hPU1RPUyA9ICIke0JVSUxEX0dPT1N9IgorZXhwb3J0IEdPSE9TVEFSQ0ggPSAiJHtCVUlMRF9HT0FSQ0h9IgorZXhwb3J0IEdPT1MgPSAiJHtUQVJHRVRfR09PU30iCitleHBvcnQgR09BUkNIID0gIiR7VEFSR0VUX0dPQVJDSH0iCitleHBvcnQgR09BUk0gPSAiJHtUQVJHRVRfR09BUk19IgorZXhwb3J0IEdPMzg2ID0gIiR7VEFSR0VUX0dPMzg2fSIKK2V4cG9ydCBHT1JPT1RfQk9PVFNUUkFQID0gIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nbyIKK2V4cG9ydCBHT1JPT1RfRklOQUwgPSAiJHtsaWJkaXJ9L2dvIgorZXhwb3J0IEdPX1RBUkdFVF9JTlNUQUxMID0gInN0ZCIKK2V4cG9ydCBDR09fRU5BQkxFRCA9ICIxIgorZXhwb3J0IENDX0ZPUl9UQVJHRVQ9IiR7Q0N9IgorZXhwb3J0IENYWF9GT1JfVEFSR0VUPSIke0NYWH0iCitleHBvcnQgR09ST09UX09WRVJSSURFID0gIjEiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwk6Cit9CisKK2RvX2NvbmZpZ3VyZV9saWJjLW11c2woKSB7CisJcm0gLWYgJHtTfS9zcmMvcnVudGltZS9yYWNlLyouc3lzbworfQorCitkb19jb21waWxlKCkgeworCWV4cG9ydCBHT0JJTj0iJHtCfS9iaW4iCisJZXhwb3J0IENDPSIke0BkLmdldFZhcignQlVJTERfQ0MnKS5zdHJpcCgpfSIKKwlybSAtcmYgJHtHT0JJTn0gJHtCfS9wa2cKKwlta2RpciAke0dPQklOfQorCWNkIHNyYworCS4vbWFrZS5iYXNoIC0taG9zdC1vbmx5CisJY3AgJHtCfS9wa2cvdG9vbC8ke0JVSUxEX0dPVFVQTEV9L2dvX2Jvb3RzdHJhcCAke0J9CisJcm0gLXJmICR7Qn0vcGtnLyR7VEFSR0VUX0dPVFVQTEV9CisJLi9tYWtlLmJhc2ggLS10YXJnZXQtb25seQorCWlmIFsgLW4gIiR7R09fRFlOTElOS30iIF07IHRoZW4KKwkJY3AgJHtCfS9nb19ib290c3RyYXAgJHtCfS9wa2cvdG9vbC8ke0JVSUxEX0dPVFVQTEV9CisJCUdPX0ZMQUdTPSItYnVpbGRtb2RlPXNoYXJlZCIgR09fTERGTEFHUz0iLWV4dGxkZmxhZ3MgXCIke0xERkxBR1N9XCIiIC4vbWFrZS5iYXNoIC0tdGFyZ2V0LW9ubHkKKwlmaQorCWNkICR7Qn0KK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vZ28vc3JjCisJY3AgLS1wcmVzZXJ2ZT1tb2RlLHRpbWVzdGFtcHMgLVIgJHtCfS9wa2cgJHtEfSR7bGliZGlyfS9nby8KKwlpZiBbICIke0JVSUxEX0dPVFVQTEV9IiAhPSAiJHtUQVJHRVRfR09UVVBMRX0iIF07IHRoZW4KKwkJcm0gLXJmICR7RH0ke2xpYmRpcn0vZ28vcGtnLyR7QlVJTERfR09UVVBMRX0KKwkJcm0gLXJmICR7RH0ke2xpYmRpcn0vZ28vcGtnL29iai8ke0JVSUxEX0dPVFVQTEV9CisJZmkKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9nby9wa2cvdG9vbAorCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2dvL3BrZy9vYmoKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9nby9wa2cvYm9vdHN0cmFwCisJZmluZCBzcmMgLW1pbmRlcHRoIDEgLW1heGRlcHRoIDEgLXR5cGUgZCB8IHdoaWxlIHJlYWQgc3JjZGlyOyBkbworCQljcCAtLXByZXNlcnZlPW1vZGUsdGltZXN0YW1wcyAtUiAkc3JjZGlyICR7RH0ke2xpYmRpcn0vZ28vc3JjLworCWRvbmUKKwlybSAtZiAke0R9JHtsaWJkaXJ9L2dvL3NyYy9jbWQvZGlzdC9kaXN0Cit9CisKKyMgUmVtb3ZlIHRlc3QgYmluYXJpZXMgdGhhdCBjYW5ub3QgYmUgcmVsb2NhdGVkCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisJcm0gLXJmICR7RH0ke2xpYmRpcn0vZ28vc3JjL3J1bnRpbWUvcHByb2YvdGVzdGRhdGEKK30KKworIyBUaGVzZSB0ZXN0ZGF0YSBkaXJlY3RvcmllcyBhcmVuJ3QgbmVlZGVkIGZvciBidWlsZHMgYW5kIGNvbnRhaW4gYmluYXJpZXMKKyMgdGhhdCBjYW4gY2F1c2UgZXJyb3JzIGluIHN5c3Jvb3Rfc3RyaXAoKSwgc28ganVzdCByZW1vdmUgdGhlbS4KK3N5c3Jvb3Rfc3RhZ2VfYWxsX2FwcGVuZCgpIHsKKwlmaW5kICR7U1lTUk9PVF9ERVNURElSfSR7bGliZGlyfS9nby9zcmMgLWRlcHRoIC10eXBlIGQgLW5hbWUgJ3Rlc3RkYXRhJyAtZXhlYyBybSAtcmYge30gXDsKK30KKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9nby9wa2cvJHtUQVJHRVRfR09UVVBMRX1fZHlubGluay8qJHtTT0xJQlNERVZ9IgorRklMRVNfJHtQTn0tZGV2ID0gIiR7bGliZGlyfS9nby9zcmMgJHtsaWJkaXJ9L2dvL3BrZy9pbmNsdWRlIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ28vcGtnLyR7VEFSR0VUX0dPVFVQTEV9X2R5bmxpbmsvKi5zaGxpYm5hbWUgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9nby9wa2cvJHtUQVJHRVRfR09UVVBMRX1fZHlubGluay8qLyouc2hsaWJuYW1lIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ28vcGtnLyR7VEFSR0VUX0dPVFVQTEV9X2R5bmxpbmsvKi8qLyouc2hsaWJuYW1lIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ28vcGtnLyR7VEFSR0VUX0dPVFVQTEV9X2R5bmxpbmsvKi8qLyovKi5zaGxpYm5hbWUgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9nby9wa2cvJHtUQVJHRVRfR09UVVBMRX1fZHlubGluay8qLyovKi8qLyouc2hsaWJuYW1lIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ28vcGtnLyR7VEFSR0VUX0dPVFVQTEV9X2R5bmxpbmsvKi8qLyovKi8qLyouc2hsaWJuYW1lIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ28vcGtnLyR7VEFSR0VUX0dPVFVQTEV9X2R5bmxpbmsvKi8qLyovKi8qLyovKi5zaGxpYm5hbWUgXAorIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ID0gIiR7bGliZGlyfS9nby9wa2cvJHtUQVJHRVRfR09UVVBMRX0gXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9nby9wa2cvJHtUQVJHRVRfR09UVVBMRX1fZHlubGluay8qLmEgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9nby9wa2cvJHtUQVJHRVRfR09UVVBMRX1fZHlubGluay8qLyouYSBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2dvL3BrZy8ke1RBUkdFVF9HT1RVUExFfV9keW5saW5rLyovKi8qLmEgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9nby9wa2cvJHtUQVJHRVRfR09UVVBMRX1fZHlubGluay8qLyovKi8qLmEgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9nby9wa2cvJHtUQVJHRVRfR09UVVBMRX1fZHlubGluay8qLyovKi8qLyouYSBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2dvL3BrZy8ke1RBUkdFVF9HT1RVUExFfV9keW5saW5rLyovKi8qLyovKi8qLmEgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9nby9wa2cvJHtUQVJHRVRfR09UVVBMRX1fZHlubGluay8qLyovKi8qLyovKi8qLmEgXAorIgorIyBUaGUgdGVzdGRhdGEgZGlyZWN0b3JpZXMgaW4gdGhlIHNvdXJjZSB0cmVlIGluY2x1ZGUgc29tZSBiaW5hcmllcyBmb3IgdmFyaW91cworIyBhcmNoaXRlY3R1cmVzLCBzY3JpcHRzLCBhbmQgLmEgZmlsZXMKK0lOU0FORV9TS0lQXyR7UE59LWRldiA9ICJzdGF0aWNkZXYgbGRmbGFncyBmaWxlLXJkZXBzIGFyY2giCisKK0lOSElCSVRfUEFDS0FHRV9TVFJJUCA9ICIxIgorSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUID0gIjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby1ydW50aW1lXzEuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tcnVudGltZV8xLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNiNjhiNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ28tcnVudGltZV8xLjkuYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIGdvLSR7UFZ9LmluYworcmVxdWlyZSBnby1ydW50aW1lLmluYwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby10YXJnZXQuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby10YXJnZXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYzVkNzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLXRhcmdldC5pbmMKQEAgLTAsMCArMSw2MSBAQAoraW5oZXJpdCBnb2FyY2gKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z28gZ28tbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z28tY3Jvc3NzZGsgZ28tbmF0aXZlIgorCitleHBvcnQgR09IT1NUT1MgPSAiJHtCVUlMRF9HT09TfSIKK2V4cG9ydCBHT0hPU1RBUkNIID0gIiR7QlVJTERfR09BUkNIfSIKK2V4cG9ydCBHT09TID0gIiR7VEFSR0VUX0dPT1N9IgorZXhwb3J0IEdPQVJDSCA9ICIke1RBUkdFVF9HT0FSQ0h9IgorZXhwb3J0IEdPQVJNID0gIiR7VEFSR0VUX0dPQVJNfSIKK2V4cG9ydCBHTzM4NiA9ICIke1RBUkdFVF9HTzM4Nn0iCitleHBvcnQgR09ST09UX0JPT1RTVFJBUCA9ICIke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ28iCitleHBvcnQgR09ST09UX0ZJTkFMID0gIiR7bGliZGlyfS9nbyIKK2V4cG9ydCBDR09fRU5BQkxFRCA9ICIxIgorZXhwb3J0IENDX0ZPUl9UQVJHRVQgPSAiJHtDQ30iCitleHBvcnQgQ1hYX0ZPUl9UQVJHRVQgPSAiJHtDWFh9IgorZXhwb3J0IEdPX1RBUkdFVF9JTlNUQUxMID0gImNtZCIKK2V4cG9ydCBHT19GTEFHUyA9ICItYSIKK0dPX0xERkxBR1MgPSAiIgorR09fTERGTEFHU19jbGFzcy1uYXRpdmVzZGsgPSAiLWxpbmttb2RlIGV4dGVybmFsIgorZXhwb3J0IEdPX0xERkxBR1MKKworU0VDVVJJVFlfQ0ZMQUdTID0gIiR7U0VDVVJJVFlfTk9QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0xERkxBR1MgPSAiIgorCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorCitkb19jb21waWxlKCkgeworCWV4cG9ydCBHT0JJTj0iJHtCfS9iaW4iCisJZXhwb3J0IENDPSIke0BkLmdldFZhcignQlVJTERfQ0MnKS5zdHJpcCgpfSIKKwlybSAtcmYgJHtHT0JJTn0gJHtCfS9wa2cKKwlta2RpciAke0dPQklOfQorCisJZXhwb3J0IFRNUERJUj0ke1dPUktESVJ9L2J1aWxkLXRtcAorCW1rZGlyIC1wICR7V09SS0RJUn0vYnVpbGQtdG1wCisKKwljZCBzcmMKKwkuL21ha2UuYmFzaAorCWNkICR7Qn0KK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vZ28vcGtnL3Rvb2wKKwljcCAtLXByZXNlcnZlPW1vZGUsdGltZXN0YW1wcyAtUiAke0J9L3BrZy90b29sLyR7VEFSR0VUX0dPVFVQTEV9ICR7RH0ke2xpYmRpcn0vZ28vcGtnL3Rvb2wvCisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L2dvL3NyYworCWNwIC0tcHJlc2VydmU9bW9kZSx0aW1lc3RhbXBzIC1SICR7U30vc3JjL2NtZCAke0R9JHtsaWJkaXJ9L2dvL3NyYy8KKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vZ28vYmluCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJZm9yIGYgaW4gJHtCfS8ke0dPX0JVSUxEX0JJTkRJUn0vKjsgZG8KKwkJbmFtZT1gYmFzZW5hbWUgJGZgCisJCWluc3RhbGwgLW0gMDc1NSAkZiAke0R9JHtsaWJkaXJ9L2dvL2Jpbi8KKwkJbG4gLXNmIC4uLyR7QkFTRUxJQn0vZ28vYmluLyRuYW1lICR7RH0ke2JpbmRpcn0vCisJZG9uZQorfQorCitQQUNLQUdFUyA9ICIke1BOfSAke1BOfS1kZXYiCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vZ28vYmluICR7bGliZGlyfS9nby9wa2cvdG9vbC8ke1RBUkdFVF9HT1RVUExFfSAke2JpbmRpcn0iCitGSUxFU18ke1BOfS1kZXYgPSAiJHtsaWJkaXJ9L2dvIgorUkRFUEVORFNfJHtQTn0tZGV2ID0gInBlcmwgYmFzaCIKK0lOU0FORV9TS0lQXyR7UE59ID0gImxkZmxhZ3MiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nby5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU0MzdkZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvLmluYworKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLWluaGVyaXQgZ29hcmNoCi1ERVBFTkRTICs9ICJnby1ib290c3RyYXAtbmF0aXZlIgotCi0jIGxpYmdjYyBpcyByZXF1aXJlZCBmb3IgdGhlIHRhcmdldCBzcGVjaWZpYyBsaWJyYXJpZXMgdG8gYnVpbGQKLSMgcHJvcGVybHksIGJ1dCBhcHBhcmVudGx5IG5vdCBmb3IgZ28tY3Jvc3MgYW5kLCBtb3JlIGltcG9ydGFudGx5LAotIyBhbHNvIGNhbid0IGJlIHVzZWQgdGhlcmUgYmVjYXVzZSBnby1jcm9zcyBjYW5ub3QgZGVwZW5kIG9uCi0jIHRoZSB0dW5lLXNwZWNpZmljIGxpYmdjYy4gT3RoZXJ3aXNlIGdvLWNyb3NzIGFsc28gd291bGQgaGF2ZQotIyB0byBiZSB0dW5lLXNwZWNpZmljLgotREVQRU5EUyArPSAiJHtAICdsaWJnY2MnIGlmIG5vdCBvZS51dGlscy5pbmhlcml0cyhkLCAnY3Jvc3MnKSBlbHNlICcnfSIKLQotIyBQcmV2ZW50IHJ1bnN0cmlwIGZyb20gcnVubmluZyBiZWNhdXNlIHlvdSBnZXQgZXJyb3JzIHdoZW4gdGhlIGhvc3QgYXJjaCAhPSB0YXJnZXQgYXJjaAotSU5ISUJJVF9QQUNLQUdFX1NUUklQID0gIjEiCi1JTkhJQklUX1NZU1JPT1RfU1RSSVAgPSAiMSIKLQotIyB4MzIgQUJJIGlzIG5vdCBzdXBwb3J0ZWQgb24gZ28gY29tcGlsZXIgc28gZmFyCi1DT01QQVRJQkxFX0hPU1RfbGludXgtZ251eDMyID0gIm51bGwiCi0jIHBwYzMyIGlzIG5vdCBzdXBwb3J0ZWQgaW4gZ28gY29tcGlsZXJzCi1DT01QQVRJQkxFX0hPU1RfcG93ZXJwYyA9ICJudWxsIgotCi1leHBvcnQgR09IT1NUT1MgPSAiJHtCVUlMRF9HT09TfSIKLWV4cG9ydCBHT0hPU1RBUkNIID0gIiR7QlVJTERfR09BUkNIfSIKLWV4cG9ydCBHT09TID0gIiR7VEFSR0VUX0dPT1N9IgotZXhwb3J0IEdPQVJDSCA9ICIke1RBUkdFVF9HT0FSQ0h9IgotZXhwb3J0IEdPQVJNID0gIiR7VEFSR0VUX0dPQVJNfSIKLWV4cG9ydCBHT1JPT1RfQk9PVFNUUkFQID0gIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nbzEuNCIKLWV4cG9ydCBHT1JPT1RfRklOQUwgPSAiJHtsaWJkaXJ9L2dvIgotZXhwb3J0IENHT19FTkFCTEVEID0gIjEiCi1leHBvcnQgQ0NfRk9SX1RBUkdFVCA9ICIke0NDfSIKLWV4cG9ydCBDWFhfRk9SX1RBUkdFVCA9ICIke0NYWH0iCi0KLWRvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCi0KLWRvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy1jcm9zcygpIHsKLQlleHBvcnQgQ0dPX0VOQUJMRUQ9MAotfQotCi1kb19jb21waWxlKCkgewotCWV4cG9ydCBHT0JJTj0iJHtCfS9iaW4iCi0JZXhwb3J0IENDPSIke0BkLmdldFZhcignQlVJTERfQ0MnLCBUcnVlKS5zdHJpcCgpfSIKLQlybSAtcmYgJHtHT0JJTn0gJHtCfS9wa2cKLQlta2RpciAke0dPQklOfQotCi0JZXhwb3J0IFRNUERJUj0ke1dPUktESVJ9L2J1aWxkLXRtcAotCW1rZGlyIC1wICR7V09SS0RJUn0vYnVpbGQtdG1wCi0KLQljZCBzcmMKLQkuL21ha2UuYmFzaCAtLWhvc3Qtb25seQotCSMgRW5zdXJlIGNnby5hIGlzIGJ1aWx0IHdpdGggdGhlIHRhcmdldCB0b29sY2hhaW4KLQlleHBvcnQgR09CSU49IiR7Qn0vdGFyZ2V0L2JpbiIKLQlybSAtcmYgJHtHT0JJTn0KLQlta2RpciAtcCAke0dPQklOfQotCUdPX0ZMQUdTPSItYSIgLi9tYWtlLmJhc2gKLX0KLQotZG9faW5zdGFsbF9jbGFzcy10YXJnZXQoKSB7Ci0JaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L2dvCi0JY3AgLWEgJHtCfS9wa2cgJHtEfSR7bGliZGlyfS9nby8KLQlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vZ28vc3JjCi0JKGNkICR7U30vc3JjOyBmb3IgZCBpbiAqOyBkbyBcCi0JCVsgLWQgJGQgXSAmJiBjcCAtYSAke1N9L3NyYy8kZCAke0R9JHtsaWJkaXJ9L2dvL3NyYy87IFwKLQlkb25lKQotCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQotCWlmIFsgLWQgJHtCfS9iaW4vJHtHT09TfV8ke0dPQVJDSH0gXQotCXRoZW4KLQkJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vYmluLyR7R09PU31fJHtHT0FSQ0h9LyogJHtEfSR7YmluZGlyfQotCWVsc2UKLQkJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vYmluLyogJHtEfSR7YmluZGlyfQotCWZpCi19Ci0KLWRvX2luc3RhbGxfY2xhc3MtY3Jvc3MoKSB7Ci0JaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L2dvCi0JY3AgLWEgJHtCfS9wa2cgJHtEfSR7bGliZGlyfS9nby8KLQlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vZ28vc3JjCi0JKGNkICR7U30vc3JjOyBmb3IgZCBpbiAqOyBkbyBcCi0JCVsgLWQgJGQgXSAmJiBjcCAtYSAke1N9L3NyYy8kZCAke0R9JHtsaWJkaXJ9L2dvL3NyYy87IFwKLQlkb25lKQotCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQotCWZvciBmIGluICR7Qn0vYmluL2dvKgotCWRvCi0JCWluc3RhbGwgLW03NTUgJGYgJHtEfSR7YmluZGlyfQotCWRvbmUKLX0KLWRvX3BhY2thZ2VfcWFbbm9leGVjXSA9ICIxIgotCi1SREVQRU5EU18ke1BOfSArPSAicGVybCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ29fMS42LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nb18xLjYuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmNTkwMzMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nb18xLjYuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXJlcXVpcmUgZ28uaW5jCi1yZXF1aXJlIGdvLSR7UFZ9LmluYwotCi1CQkNMQVNTRVhURU5EID0gImNyb3NzIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nby9nb18xLjcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvXzEuNy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdhNmFiMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvXzEuNy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotcmVxdWlyZSBnby0ke1BWfS5pbmMKLXJlcXVpcmUgZ28uaW5jCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvXzEuOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ29fMS44LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTFiMTMxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ29fMS44LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1yZXF1aXJlIGdvLSR7UFZ9LmluYwotcmVxdWlyZSBnby5pbmMKLVRVTkVfQ0NBUkdTX3JlbW92ZSA9ICItbWFyY2g9bWlwczMycjIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvXzEuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ28vZ29fMS45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2N2UyY2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dvL2dvXzEuOS5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgZ28tJHtQVn0uaW5jCityZXF1aXJlIGdvLXRhcmdldC5pbmMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvYXJtX2FhcmNoNjQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2FybV9hYXJjaDY0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTc4OGI2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvYXJtX2FhcmNoNjQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1ndWlsZTogYWRkIGFhcmNoNjQgcmVjb2duaXRpb24KLQotQXNzdW1lIGxpdHRsZS1lbmRpYW4uCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBqb2Uuc2xhdGVyQHdpbmRyaXZlci5jb20KLQotLS0tIGEvbW9kdWxlL3N5c3RlbS9iYXNlL3RhcmdldC5zY20KLSsrKyBiL21vZHVsZS9zeXN0ZW0vYmFzZS90YXJnZXQuc2NtCi1AQCAtNzAsNiArNzAsOCBAQAotICAgICAgICAgICAgICgobWVtYmVyIGNwdSAnKCJzcGFyYyIgInNwYXJjNjQiICJwb3dlcnBjIiAicG93ZXJwYzY0IiAic3B1IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzIiAibWlwczY0IikpCi0gICAgICAgICAgICAgIChlbmRpYW5uZXNzIGJpZykpCi0rICAgICAgICAgICAgKChzdHJpbmctbWF0Y2ggIl5hYXJjaDY0IiBjcHUpCi0rICAgICAgICAgICAgIChlbmRpYW5uZXNzIGxpdHRsZSkpCi0gICAgICAgICAgICAgKChzdHJpbmctbWF0Y2ggIl5hcm0uKmViIiBjcHUpCi0gICAgICAgICAgICAgIChlbmRpYW5uZXNzIGJpZykpCi0gICAgICAgICAgICAgKChzdHJpbmctbWF0Y2ggIl5hcm0uKiIgY3B1KQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9hcm1fZW5kaWFubmVzcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvYXJtX2VuZGlhbm5lc3MucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhNDMyOGIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9hcm1fZW5kaWFubmVzcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLVN1cHBvcnQgZm9ybSBBUk0gZW5kaWFubmVzcwotCi1GaXhlcyBZb2N0byBidWcjIDI3MjkKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLUluZGV4OiBndWlsZS0yLjAuNS9tb2R1bGUvc3lzdGVtL2Jhc2UvdGFyZ2V0LnNjbQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGd1aWxlLTIuMC41Lm9yaWcvbW9kdWxlL3N5c3RlbS9iYXNlL3RhcmdldC5zY20JMjAxMi0wMS0yNCAwMzowNjowNi4wMDAwMDAwMDAgLTA4MDAKLSsrKyBndWlsZS0yLjAuNS9tb2R1bGUvc3lzdGVtL2Jhc2UvdGFyZ2V0LnNjbQkyMDEyLTA3LTEyIDEzOjA1OjQ0LjM3MjM2NDEwMyAtMDcwMAotQEAgLTcwLDcgKzcwLDkgQEAKLSAgICAgICAgICAgICAoKG1lbWJlciBjcHUgJygic3BhcmMiICJzcGFyYzY0IiAicG93ZXJwYyIgInBvd2VycGM2NCIgInNwdSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlwcyIgIm1pcHM2NCIpKQotICAgICAgICAgICAgICAoZW5kaWFubmVzcyBiaWcpKQotLSAgICAgICAgICAgICgoc3RyaW5nLW1hdGNoICJeYXJtLiplbCIgY3B1KQotKyAgICAgICAgICAgICgoc3RyaW5nLW1hdGNoICJeYXJtLiplYiIgY3B1KQotKyAgICAgICAgICAgICAoZW5kaWFubmVzcyBiaWcpKQotKyAgICAgICAgICAgICgoc3RyaW5nLW1hdGNoICJeYXJtLioiIGNwdSkKLSAgICAgICAgICAgICAgKGVuZGlhbm5lc3MgbGl0dGxlKSkKLSAgICAgICAgICAgICAoZWxzZQotICAgICAgICAgICAgICAoZXJyb3IgInVua25vd24gQ1BVIGVuZGlhbm5lc3MiIGNwdSkpKSkpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2RlYmlhbi8wMDAyLU1hcmstVW51c2VkLW1vZHVsZXMtYXJlLXJlbW92ZWQtZ2MtdGVzdC1hcy11bnJlc29sdmUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2RlYmlhbi8wMDAyLU1hcmstVW51c2VkLW1vZHVsZXMtYXJlLXJlbW92ZWQtZ2MtdGVzdC1hcy11bnJlc29sdmUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3YmY2MzUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9kZWJpYW4vMDAwMi1NYXJrLVVudXNlZC1tb2R1bGVzLWFyZS1yZW1vdmVkLWdjLXRlc3QtYXMtdW5yZXNvbHZlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkZWJpYW4gcGF0Y2hdCi0KLVNpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+Ci0KLUZyb20gZTUyYmZjZGJhY2E1ZGNlNDk4Njc4ZDhmNTEyMzgxZTNlMzlhNDA2NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFJvYiBCcm93bmluZyA8cmxiQGRlZmF1bHR2YWx1ZS5vcmc+Ci1EYXRlOiBTdW4sIDE4IE1hciAyMDEyIDExOjQwOjU1IC0wNTAwCi1TdWJqZWN0OiBNYXJrICJVbnVzZWQgbW9kdWxlcyBhcmUgcmVtb3ZlZCIgZ2MgdGVzdCBhcyB1bnJlc29sdmVkLgotCi1BcyBwZXIgZGlzY3Vzc2lvbiB3aXRoIHVwc3RyZWFtLCBtYXJrIHRoaXMgdGVzdCBhcyB1bnJlc29sdmVkIHNpbmNlIGl0Ci1tYXkgcHJvZHVjZSBmYWxzZSBuZWdhdGl2ZXMsIGRlcGVuZGluZyBvbiB0aGUgYmVoYXZpb3IvdGltaW5nIG9mIHRoZQotZ2FyYmFnZSBjb2xsZWN0b3IuCi0tLS0KLSB0ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QgfCAgIDExICsrKysrKy0tLS0tCi0gMSBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS90ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QgYi90ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QKLWluZGV4IGE5Njk3NTIuLjhjOGUxM2UgMTAwNjQ0Ci0tLS0gYS90ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QKLSsrKyBiL3Rlc3Qtc3VpdGUvdGVzdHMvZ2MudGVzdAotQEAgLTg0LDExICs4NCwxMyBAQAotICAgICAgIDs7IG9uZSBnYyByb3VuZC4gbm90IHN1cmUgd2h5LgotIAotICAgICAgIChtYXliZS1nYy1mbGFraW5lc3MKLS0gICAgICAgKD0gKGxldCBscCAoKGkgMCkpCi0tICAgICAgICAgICAgKGlmIChndWFyZCkKLS0gICAgICAgICAgICAgICAgKGxwICgxKyBpKSkKLS0gICAgICAgICAgICAgICAgaSkpCi0tICAgICAgICAgIHRvdGFsKSkpKQotKyAgICAgICAob3IgKD0gKGxldCBscCAoKGkgMCkpCi0rICAgICAgICAgICAgICAgIChpZiAoZ3VhcmQpCi0rICAgICAgICAgICAgICAgICAgICAobHAgKDErIGkpKQotKyAgICAgICAgICAgICAgICAgICAgaSkpCi0rICAgICAgICAgICAgICB0b3RhbCkKLSsgICAgICAgICAgICh0aHJvdyAndW5yZXNvbHZlZCkpKSkpCi0rCi0gCi0gICAocGFzcy1pZiAiTGV4aWNhbCB2YXJzIGFyZSBjb2xsZWN0YWJsZSIKLSAgICAgKGxldCAoKGwgKGNvbXBpbGUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZGViaWFuLzAwMDMtTWFyay1tdXRleC13aXRoLW93bmVyLW5vdC1yZXRhaW5lZC10aHJlYWRzLXRlc3QtYXMtdS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZGViaWFuLzAwMDMtTWFyay1tdXRleC13aXRoLW93bmVyLW5vdC1yZXRhaW5lZC10aHJlYWRzLXRlc3QtYXMtdS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNmYWYzZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2RlYmlhbi8wMDAzLU1hcmstbXV0ZXgtd2l0aC1vd25lci1ub3QtcmV0YWluZWQtdGhyZWFkcy10ZXN0LWFzLXUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2RlYmlhbiBwYXRjaF0KLQotU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KLQotRnJvbSA4NDg1NDMwOTFkNTVkZGRiNTRhODU2MTIxNTU5NjQ1MDZkNzEyODUyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogUm9iIEJyb3duaW5nIDxybGJAZGVmYXVsdHZhbHVlLm9yZz4KLURhdGU6IFN1biwgMTggTWFyIDIwMTIgMTM6Mjg6MjQgLTA1MDAKLVN1YmplY3Q6IE1hcmsgIm11dGV4IHdpdGggb3duZXIgbm90IHJldGFpbmVkIiB0aHJlYWRzIHRlc3QgYXMgdW5yZXNvbHZlZC4KLQotQXMgcGVyIGRpc2N1c3Npb24gd2l0aCB1cHN0cmVhbSwgbWFyayB0aGlzIHRlc3QgYXMgdW5yZXNvbHZlZCBzaW5jZSBpdAotbWF5IHByb2R1Y2UgZmFsc2UgbmVnYXRpdmVzLCBkZXBlbmRpbmcgb24gdGhlIGJlaGF2aW9yL3RpbWluZyBvZiB0aGUKLWdhcmJhZ2UgY29sbGVjdG9yLgotLS0tCi0gdGVzdC1zdWl0ZS90ZXN0cy90aHJlYWRzLnRlc3QgfCAgICA2ICsrKystLQotIDEgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvdGVzdC1zdWl0ZS90ZXN0cy90aHJlYWRzLnRlc3QgYi90ZXN0LXN1aXRlL3Rlc3RzL3RocmVhZHMudGVzdAotaW5kZXggODVhN2MzOC4uNTA4OTljYiAxMDA2NDQKLS0tLSBhL3Rlc3Qtc3VpdGUvdGVzdHMvdGhyZWFkcy50ZXN0Ci0rKysgYi90ZXN0LXN1aXRlL3Rlc3RzL3RocmVhZHMudGVzdAotQEAgLTQxNCw4ICs0MTQsMTAgQEAKLSAKLSAgICAgICAgICAgICAoZ2MpIChnYykKLSAgICAgICAgICAgICAobGV0ICgobSAoZykpKQotLSAgICAgICAgICAgICAgKGFuZCAobXV0ZXg/IG0pCi0tICAgICAgICAgICAgICAgICAgIChlcT8gKG11dGV4LW93bmVyIG0pIChjdXJyZW50LXRocmVhZCkpKSkpKSkKLSsgICAgICAgICAgICAgIChvcgotKyAgICAgICAgICAgICAgIChhbmQgKG11dGV4PyBtKQotKyAgICAgICAgICAgICAgICAgICAgKGVxPyAobXV0ZXgtb3duZXIgbSkgKGN1cnJlbnQtdGhyZWFkKSkpCi0rICAgICAgICAgICAgICAgKHRocm93ICd1bnJlc29sdmVkKSkpKSkpCi0gCi0gICAgICAgOzsKLSAgICAgICA7OyBtdXRleCBsb2NrIGxldmVscwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9ndWlsZV8yLjAuNl9maXhfc2VkX2Vycm9yLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9ndWlsZV8yLjAuNl9maXhfc2VkX2Vycm9yLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTk3YmIyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZ3VpbGVfMi4wLjZfZml4X3NlZF9lcnJvci5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1UaGlzIGZpeGVzIHNlZCBpc3N1ZSB3aGVuIHByZWZpeCBoYXMgLyBpbiBpdCwgbGlrZSAvdXNyL2xvY2FsCi0KLWF1dG9yZWNvbmYgZXJyb3IgYXZvaWRlZDoKLXwgc2VkOiAtZSBleHByZXNzaW9uICMxLCBjaGFyIDk6IHVua25vd24gb3B0aW9uIHRvIGBzJwotfCBjb25maWd1cmUuYWM6Mzk6IGVycm9yOiBBQ19JTklUIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBwYWNrYWdlIGFuZCB2ZXJzaW9uIGFyZ3VtZW50cwotCi1TaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgotMjAxMi8wNS8wMQotCi1JbmRleDogZ3VpbGUtMi4wLjUvYnVpbGQtYXV4L2dpdC12ZXJzaW9uLWdlbgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGd1aWxlLTIuMC41Lm9yaWcvYnVpbGQtYXV4L2dpdC12ZXJzaW9uLWdlbgotKysrIGd1aWxlLTIuMC41L2J1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4KLUBAIC0xODcsNyArMTg3LDcgQEAgZWxzZQotICAgICB2PVVOS05PV04KLSBmaQotIAotLXY9YGVjaG8gIiR2IiB8c2VkICJzL14kcHJlZml4Ly8iYAotK3Y9YGVjaG8gIiR2IiB8c2VkICJzI14kcHJlZml4IyMiYAotIAotICMgVGVzdCB3aGV0aGVyIHRvIGFwcGVuZCB0aGUgIi1kaXJ0eSIgc3VmZml4IG9ubHkgaWYgdGhlIHZlcnNpb24KLSAjIHN0cmluZyB3ZSdyZSB1c2luZyBjYW1lIGZyb20gZ2l0LiAgSS5lLiwgc2tpcCB0aGUgdGVzdCBpZiBpdCdzICJVTktOT1dOIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9saWJndWlsZS1NYWtlZmlsZS5hbS1ob29rLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9saWJndWlsZS1NYWtlZmlsZS5hbS1ob29rLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTBiOWQ0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvbGliZ3VpbGUtTWFrZWZpbGUuYW0taG9vay5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLUZyb20gOWM0ZTEyMGE3YTg3ZGIzNGQyMmE1MDg4M2E1YTUyNTE3MGI0ODBkNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgotRGF0ZTogVHVlLCA2IEphbiAyMDE1IDIzOjEwOjUxIC0wODAwCi1TdWJqZWN0OiBbUEFUQ0hdIGxpYmd1aWxlL01ha2VmaWxlLmFtOiBpbnN0YWxsLWRhdGEtaG9vayAtPiBpbnN0YWxsLWV4ZWMtaG9vawotCi1JdCBtYXkgaW5zdGFsbCBzdWNoIGEgZmlsZToKLS91c3IvbGliNjQvbGliZ3VpbGUtMi4wKi1nZGIuc2NtCi0KLVRoaXMgaXMgYmVjYXVzZSB3aGVuIHRoZXJlIGlzIG5vIGZpbGUgaW4gdGhlIGRpcmVjdG9yeToKLWZvciBmIGluIGxpYmd1aWxlLTIuMCo7IGRvCi0gICAgW3NuaXBdCi1kb25lCi0KLVRoZSBmIHdvdWxkIGJlIGxpYmd1aWxlLTIuMCogaXRzZWxmLCB1c2UgaW5zdGFsbC1leGVjLWhvb2sgd2lsbCBmaXggdGhlCi1wcm9ibGVtIHNpbmNlIGl0IGRlcGVuZHMgb24gaW5zdGFsbC1saWJMVExJQlJBUklFUy4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgotLS0tCi0gbGliZ3VpbGUvTWFrZWZpbGUuYW0gfCAgICA0ICstLS0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDMgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9saWJndWlsZS9NYWtlZmlsZS5hbSBiL2xpYmd1aWxlL01ha2VmaWxlLmFtCi1pbmRleCA1ZGVjZDk5Li41MjY0NWI3IDEwMDY0NAotLS0tIGEvbGliZ3VpbGUvTWFrZWZpbGUuYW0KLSsrKyBiL2xpYmd1aWxlL01ha2VmaWxlLmFtCi1AQCAtNDQ2LDEwICs0NDYsOCBAQCBFWFRSQV9saWJndWlsZV9AR1VJTEVfRUZGRUNUSVZFX1ZFUlNJT05AX2xhX1NPVVJDRVMgPSBfc2NtLmgJCVwKLSAjIyBkZWxldGUgZ3VpbGUtc25hcmYuYXdrIGZyb20gdGhlIGluc3RhbGxhdGlvbiBiaW5kaXIsIGluIGNhc2UgaXQncwotICMjIGxpbmdlcmluZyB0aGVyZSBkdWUgdG8gYW4gZWFybGllciBndWlsZSB2ZXJzaW9uIG5vdCBoYXZpbmcgYmVlbgotICMjIHdpcGVkIG91dC4KLS1pbnN0YWxsLWV4ZWMtaG9vazoKLStpbnN0YWxsLWV4ZWMtaG9vazogbGliZ3VpbGUtMi4wLWdkYi5zY20KLSAJcm0gLWYgJChERVNURElSKSQoYmluZGlyKS9ndWlsZS1zbmFyZi5hd2sKLS0KLS1pbnN0YWxsLWRhdGEtaG9vazogbGliZ3VpbGUtMi4wLWdkYi5zY20KLSAJQCQoTUtESVJfUCkgJChERVNURElSKSQobGliZGlyKQotICMjIFdlIHdhbnQgdG8gaW5zdGFsbCBsaWJndWlsZS0yLjAtZ2RiLnNjbSBhcyBTT01FVEhJTkctZ2RiLnNjbS4KLSAjIyBTT01FVEhJTkcgaXMgdGhlIGZ1bGwgbmFtZSBvZiB0aGUgZmluYWwgbGlicmFyeS4gIFdlIHdhbnQgdG8gaWdub3JlCi0tLSAKLTEuNy45LjUKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9vcGVuc3VzZS9ndWlsZS02NGJpdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvb3BlbnN1c2UvZ3VpbGUtNjRiaXQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNjliNWYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9vcGVuc3VzZS9ndWlsZS02NGJpdC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3BlbnN1c2UgcGF0Y2hdCi0KLVNpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+Ci0KLUluZGV4OiBndWlsZS0yLjAuMy9saWJndWlsZS9oYXNoLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBndWlsZS0yLjAuMy5vcmlnL2xpYmd1aWxlL2hhc2guYwkyMDExLTA3LTA2IDE1OjQ5OjU5LjAwMDAwMDAwMCAtMDcwMAotKysrIGd1aWxlLTIuMC4zL2xpYmd1aWxlL2hhc2guYwkyMDEyLTAxLTEzIDIxOjQ5OjQzLjMzMjg0NDg4NCAtMDgwMAotQEAgLTI3MCw3ICsyNzAsNyBAQCBzY21faGFzaGVyKFNDTSBvYmosIHVuc2lnbmVkIGxvbmcgbiwgc2l6Ci0gdW5zaWduZWQgbG9uZwotIHNjbV9paGFzaHEgKFNDTSBvYmosIHVuc2lnbmVkIGxvbmcgbikKLSB7Ci0tICByZXR1cm4gKFNDTV9VTlBBQ0sgKG9iaikgPj4gMSkgJSBuOwotKyAgcmV0dXJuICgodW5zaWduZWQgbG9uZykgU0NNX1VOUEFDSyAob2JqKSA+PiAxKSAlIG47Ci0gfQotIAotIAotQEAgLTMwNiw3ICszMDYsNyBAQCBzY21faWhhc2h2IChTQ00gb2JqLCB1bnNpZ25lZCBsb25nIG4pCi0gICBpZiAoU0NNX05VTVAob2JqKSkKLSAgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKSBzY21faGFzaGVyKG9iaiwgbiwgMTApOwotICAgZWxzZQotLSAgICByZXR1cm4gU0NNX1VOUEFDSyAob2JqKSAlIG47Ci0rICAgIHJldHVybiAodW5zaWduZWQgbG9uZykgU0NNX1VOUEFDSyAob2JqKSAlIG47Ci0gfQotIAotIAotSW5kZXg6IGd1aWxlLTIuMC4zL2xpYmd1aWxlL3N0cnVjdC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ3VpbGUtMi4wLjMub3JpZy9saWJndWlsZS9zdHJ1Y3QuYwkyMDExLTA3LTA2IDE1OjUwOjAwLjAwMDAwMDAwMCAtMDcwMAotKysrIGd1aWxlLTIuMC4zL2xpYmd1aWxlL3N0cnVjdC5jCTIwMTItMDEtMTMgMjE6NDk6NDMuMzMyODQ0ODg0IC0wODAwCi1AQCAtOTQyLDcgKzk0Miw3IEBAIHNjbV9zdHJ1Y3RfaWhhc2hxIChTQ00gb2JqLCB1bnNpZ25lZCBsb24KLSB7Ci0gICAvKiBUaGUgbGVuZ3RoIG9mIHRoZSBoYXNoIHRhYmxlIHNob3VsZCBiZSBhIHJlbGF0aXZlIHByaW1lIGl0J3Mgbm90Ci0gICAgICBuZWNlc3NhcnkgdG8gc2hpZnQgZG93biB0aGUgYWRkcmVzcy4gICovCi0tICByZXR1cm4gU0NNX1VOUEFDSyAob2JqKSAlIG47Ci0rICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpIFNDTV9VTlBBQ0sgKG9iaikgJSBuOwotIH0KLSAKLSBTQ01fREVGSU5FIChzY21fc3RydWN0X3Z0YWJsZV9uYW1lLCAic3RydWN0LXZ0YWJsZS1uYW1lIiwgMSwgMCwgMCwgCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL3dvcmthcm91bmQtaWNlLXNzYS1jb3JydXB0aW9uLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy93b3JrYXJvdW5kLWljZS1zc2EtY29ycnVwdGlvbi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmMzNDgzOC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL3dvcmthcm91bmQtaWNlLXNzYS1jb3JydXB0aW9uLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotbGliZ3VpbGUvdm0taS1zeXN0ZW0uYzogd29ya2Fyb3VuZCBpY2Ugc3NhIGNvcnJ1cHRpb24gd2hpbGUgY29tcGlsaW5nIHdpdGggb3B0aW9uIC1nIC1PCi0KLVdoaWxlIGNvbXBpbGluZyB3aXRoIG9wdGlvbiAtZyAtTywgdGhlcmUgd2FzIGEgc3NhIGNvcnJ1cHRpb246Ci0uLgotVW5hYmxlIHRvIGNvYWxlc2NlIHNzYV9uYW1lcyA0OCBhbmQgMzQ3NiB3aGljaCBhcmUgbWFya2VkIGFzIE1VU1QgQ09BTEVTQ0UuCi1zcF80OChhYikgYW5kICBzcF8zNDc2KGFiKQotZ3VpbGUtMi4wLjExL2xpYmd1aWxlL3ZtLWVuZ2luZS5jOiBJbiBmdW5jdGlvbiAndm1fZGVidWdfZW5naW5lJzoKLWd1aWxlLTIuMC4xMS9saWJndWlsZS92bS5jOjY3MzoxOTogaW50ZXJuYWwgY29tcGlsZXIgZXJyb3I6IFNTQSBjb3JydXB0aW9uCi0gI2RlZmluZSBWTV9OQU1FICAgdm1fZGVidWdfZW5naW5lCi0gICAgICAgICAgICAgICAgICAgXgotZ3VpbGUtMi4wLjExL2xpYmd1aWxlL3ZtLWVuZ2luZS5jOjM5OjE6IG5vdGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybyAnVk1fTkFNRScKLSBWTV9OQU1FIChTQ00gdm0sIFNDTSBwcm9ncmFtLCBTQ00gKmFyZ3YsIGludCBuYXJncykKLSBeCi1QbGVhc2Ugc3VibWl0IGEgZnVsbCBidWcgcmVwb3J0LAotd2l0aCBwcmVwcm9jZXNzZWQgc291cmNlIGlmIGFwcHJvcHJpYXRlLgotU2VlIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVncy5odG1sPiBmb3IgaW5zdHJ1Y3Rpb25zLgotLi4uCi0KLVR3ZWFrIGxpYmd1aWxlL3ZtLWktc3lzdGVtLmMgdG8gYWRkIGJvdW5kYXJ5IHZhbHVlIGNoZWNrIHRvIHdvcmthcm91bmQgaXQuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+Ci0tLS0KLSBsaWJndWlsZS92bS1pLXN5c3RlbS5jIHwgMjAgKysrKysrKysrKysrKysrKy0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2xpYmd1aWxlL3ZtLWktc3lzdGVtLmMgYi9saWJndWlsZS92bS1pLXN5c3RlbS5jCi0tLS0gYS9saWJndWlsZS92bS1pLXN5c3RlbS5jCi0rKysgYi9saWJndWlsZS92bS1pLXN5c3RlbS5jCi1AQCAtNjI1LDEwICs2MjUsMjIgQEAgVk1fREVGSU5FX0lOU1RSVUNUSU9OICg0NywgYmluZF9vcHRpb25hbHNfc2h1ZmZsZSwgImJpbmQtb3B0aW9uYWxzL3NodWZmbGUiLCA2LAotICAgLyogbm93IHNodWZmbGUgdXAsIGZyb20gd2FsayB0byBudG90YWwgKi8KLSAgIHsKLSAgICAgc2NtX3RfcHRyZGlmZiBuc2h1ZiA9IHNwIC0gd2FsayArIDEsIGk7Ci0tICAgIHNwID0gKGZwIC0gMSkgKyBudG90YWwgKyBuc2h1ZjsKLS0gICAgQ0hFQ0tfT1ZFUkZMT1cgKCk7Ci0tICAgIGZvciAoaSA9IDA7IGkgPCBuc2h1ZjsgaSsrKQotLSAgICAgIHNwWy1pXSA9IHdhbGtbbnNodWYtaS0xXTsKLSsgICAgLyogY2hlY2sgdGhlIHZhbHVlIG9mIG5zaHVmIHRvIHdvcmthcm91bmQgaWNlIHNzYSBjb3JydXB0aW9uICovCi0rICAgIC8qIHdoaWxlIGNvbXBpbGluZyB3aXRoIC1PIC1nICovCi0rICAgIGlmIChuc2h1ZiA+IDApCi0rICAgIHsKLSsgICAgICBzcCA9IChmcCAtIDEpICsgbnRvdGFsICsgbnNodWY7Ci0rICAgICAgQ0hFQ0tfT1ZFUkZMT1cgKCk7Ci0rICAgICAgZm9yIChpID0gMDsgaSA8IG5zaHVmOyBpKyspCi0rICAgICAgICBzcFstaV0gPSB3YWxrW25zaHVmLWktMV07Ci0rICAgIH0KLSsgICAgZWxzZQotKyAgICB7Ci0rICAgICAgc3AgPSAoZnAgLSAxKSArIG50b3RhbCArIG5zaHVmOwotKyAgICAgIENIRUNLX09WRVJGTE9XICgpOwotKyAgICAgIGZvciAoaSA9IDA7IGkgPCBuc2h1ZjsgaSsrKQotKyAgICAgICAgc3BbLWldID0gd2Fsa1tuc2h1Zi1pLTFdOwotKyAgICB9Ci0gICB9Ci0gICAvKiBhbmQgZmlsbCBvcHRpb25hbHMgJiBrZXl3b3JkIGFyZ3Mgd2l0aCBTQ01fVU5ERUZJTkVEICovCi0gICB3aGlsZSAod2FsayA8PSAoZnAgLSAxKSArIG50b3RhbCkKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9ndWlsZV8yLjAuMTQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2d1aWxlXzIuMC4xNC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2EwMWQwZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2d1aWxlXzIuMC4xNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi1TVU1NQVJZID0gIkd1aWxlIGlzIHRoZSBHTlUgVWJpcXVpdG91cyBJbnRlbGxpZ2VudCBMYW5ndWFnZSBmb3IgRXh0ZW5zaW9ucyIKLURFU0NSSVBUSU9OID0gIkd1aWxlIGlzIHRoZSBHTlUgVWJpcXVpdG91cyBJbnRlbGxpZ2VudCBMYW5ndWFnZSBmb3IgRXh0ZW5zaW9ucyxcCi0gdGhlIG9mZmljaWFsIGV4dGVuc2lvbiBsYW5ndWFnZSBmb3IgdGhlIEdOVSBvcGVyYXRpbmcgc3lzdGVtLlwKLSBHdWlsZSBpcyBhIGxpYnJhcnkgZGVzaWduZWQgdG8gaGVscCBwcm9ncmFtbWVycyBjcmVhdGUgZmxleGlibGUgYXBwbGljYXRpb25zLlwKLSBVc2luZyBHdWlsZSBpbiBhbiBhcHBsaWNhdGlvbiBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uJ3MgZnVuY3Rpb25hbGl0eSB0byBiZVwKLSBleHRlbmRlZCBieSB1c2VycyBvciBvdGhlciBwcm9ncmFtbWVycyB3aXRoIHBsdWctaW5zLCBtb2R1bGVzLCBvciBzY3JpcHRzLlwKLSBHdWlsZSBwcm92aWRlcyB3aGF0IG1pZ2h0IGJlIGRlc2NyaWJlZCBhcyAncHJhY3RpY2FsIHNvZnR3YXJlIGZyZWVkb20sJ1wKLSBtYWtpbmcgaXQgcG9zc2libGUgZm9yIHVzZXJzIHRvIGN1c3RvbWl6ZSBhbiBhcHBsaWNhdGlvbiB0byBtZWV0IHRoZWlyXAotIG5lZWRzIHdpdGhvdXQgZGlnZ2luZyBpbnRvIHRoZSBhcHBsaWNhdGlvbidzIGludGVybmFscy4iCi0KLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9ndWlsZS8iCi1TRUNUSU9OID0gImRldmVsIgotTElDRU5TRSA9ICJHUEx2MyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgotCi1TUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ3VpbGUvZ3VpbGUtJHtQVn0udGFyLnh6IFwKLSAgICAgICAgICAgZmlsZTovL2RlYmlhbi8wMDAyLU1hcmstVW51c2VkLW1vZHVsZXMtYXJlLXJlbW92ZWQtZ2MtdGVzdC1hcy11bnJlc29sdmUucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZGViaWFuLzAwMDMtTWFyay1tdXRleC13aXRoLW93bmVyLW5vdC1yZXRhaW5lZC10aHJlYWRzLXRlc3QtYXMtdS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9vcGVuc3VzZS9ndWlsZS02NGJpdC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9ndWlsZV8yLjAuNl9maXhfc2VkX2Vycm9yLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2FybV9lbmRpYW5uZXNzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2FybV9hYXJjaDY0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3dvcmthcm91bmQtaWNlLXNzYS1jb3JydXB0aW9uLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2xpYmd1aWxlLU1ha2VmaWxlLmFtLWhvb2sucGF0Y2ggXAotICAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJjNjQ5NzdjNzc1ZWZmZDE5MzkzMzY0YjMwMThmZDhjZCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJlODQ0MjU2NjI1NmUxYmUxNGU1MWZjMTg4MzljZDc5OWI5NjZiYzViMTZjNmExZDdhN2MzNTE1NWE4NjE5ZDgyIgotCi1pbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZyB0ZXhpbmZvCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKLQotIyBGaXggIkFyZ3VtZW50IGxpc3QgdG9vIGxvbmciIGVycm9yIHdoZW4gbGVuKFRNUERJUikgPSA0MTAKLWFjcGF0aHMgPSAiLUkgLi9tNCIKLQotREVQRU5EUyA9ICJsaWJ1bmlzdHJpbmcgYmR3Z2MgZ21wIGxpYnRvb2wgbGliZmZpIG5jdXJzZXMgcmVhZGxpbmUiCi0jIGFkZCBndWlsZS1uYXRpdmUgb25seSB0byB0aGUgdGFyZ2V0IHJlY2lwZSdzIERFUEVORFMKLURFUEVORFNfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgZ3VpbGUtbmF0aXZlIGxpYmF0b21pYy1vcHMiCi0KLSMgVGhlIGNvbW1lbnQgb2YgdGhlIHNjcmlwdCBndWlsZS1jb25maWcgc2FpZCBpdCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ1dCB3ZSBzaG91bGQKLSMgYXQgbGVhc3QgYWRkIHRoZSByZXF1aXJlZCBkZXBlbmRlbmN5IHRvIG1ha2UgaXQgd29yayBzaW5jZSB3ZSBzdGlsbCBwcm92aWRlIHRoZSBzY3JpcHQuCi1SREVQRU5EU18ke1BOfSA9ICJwa2djb25maWciCi0KLVJERVBFTkRTXyR7UE59X2FwcGVuZF9saWJjLWdsaWJjX2NsYXNzLXRhcmdldCA9ICIgZ2xpYmMtZ2NvbnYtaXNvODg1OS0xIgotCi1FWFRSQV9PRUNPTkYgKz0gIiR7QFsnLS13aXRob3V0LWxpYmx0ZGwtcHJlZml4IC0td2l0aG91dC1saWJnbXAtcHJlZml4IC0td2l0aG91dC1saWJyZWFkbGluZS1wcmVmaXgnLCAnJ11bYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJyxkKV19IgotCi1FWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgLS13aXRoLWxpYnVuaXN0cmluZy1wcmVmaXg9JHtTVEFHSU5HX0xJQkRJUn0gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aC1saWJnbXAtcHJlZml4PSR7U1RBR0lOR19MSUJESVJ9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGgtbGlibHRkbC1wcmVmaXg9JHtTVEFHSU5HX0xJQkRJUn0iCi1FWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiBndWlsZV9jdl91c2VfY3NxcnQ9bm8gIgotCi1DRkxBR1NfYXBwZW5kX2xpYmMtbXVzbCA9ICIgLURIQVZFX0dDX1NFVF9GSU5BTElaRVJfTk9USUZJRVIgXAotCSAgICAgICAgICAgICAgICAgICAgLURIQVZFX0dDX0dFVF9IRUFQX1VTQUdFX1NBRkUgXAotCSAgICAgICAgICAgICAgICAgICAgLURIQVZFX0dDX0dFVF9GUkVFX1NQQUNFX0RJVklTT1IgXAotCSAgICAgICAgICAgICAgICAgICAgLURIQVZFX0dDX1NFVF9GSU5BTElaRV9PTl9ERU1BTkQgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIgotCi1kb19jb25maWd1cmVfcHJlcGVuZCgpIHsKLQlta2RpciAtcCBwbwotfQotCi1leHBvcnQgR1VJTEVfRk9SX0JVSUxEPSIke0JVSUxEX1NZU30tZ3VpbGUiCi0KLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKLQlpbnN0YWxsIC1tIDA3NTUgICR7RH0ke2JpbmRpcn0vZ3VpbGUgJHtEfSR7YmluZGlyfS8ke0hPU1RfU1lTfS1ndWlsZQotCi0JY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ3VpbGUgXAotCQlHVUlMRV9MT0FEX1BBVEg9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9ndWlsZS8yLjAgXAotCQlHVUlMRV9MT0FEX0NPTVBJTEVEX1BBVEg9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2d1aWxlLzIuMC9jY2FjaGUKLQljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9LyR7SE9TVF9TWVN9LWd1aWxlIFwKLQkJR1VJTEVfTE9BRF9QQVRIPSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ3VpbGUvMi4wIFwKLQkJR1VJTEVfTE9BRF9DT01QSUxFRF9QQVRIPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9ndWlsZS8yLjAvY2NhY2hlCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCgpIHsKLQkjIGNsZWFudXAgYnVpbGRwYXRocyBpbiBzY3JpcHRzCi0Jc2VkIC1pIC1lICdzOiR7U1RBR0lOR19ESVJfTkFUSVZFfTo6JyAke0R9JHtiaW5kaXJ9L2d1aWxlLWNvbmZpZwotCXNlZCAtaSAtZSAnczoke1NUQUdJTkdfRElSX0hPU1R9OjonICR7RH0ke2JpbmRpcn0vZ3VpbGUtc25hcmYKLQotCXNlZCAtaSAtZSAnczoke1NUQUdJTkdfRElSX1RBUkdFVH06OmcnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL2d1aWxlLTIuMC5wYwotfQotCi1kb19pbnN0YWxsX2FwcGVuZF9saWJjLW11c2woKSB7Ci0Jcm0gLWYgJHtEfSR7bGliZGlyfS9jaGFyc2V0LmFsaWFzCi19Ci0KLVNZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyA9ICJndWlsZV9jcm9zc19jb25maWciCi0KLWd1aWxlX2Nyb3NzX2NvbmZpZygpIHsKLQkjIHRoaXMgaXMgb25seSBmb3IgdGFyZ2V0IHJlY2lwZQotCWlmIFsgIiR7UE59IiA9ICJndWlsZSIgXQotCXRoZW4KLQkgICAgICAgICMgQ3JlYXRlIGd1aWxlLWNvbmZpZyByZXR1cm5pbmcgdGFyZ2V0IHZhbHVlcyBpbnN0ZWFkIG9mIG5hdGl2ZSB2YWx1ZXMKLQkgICAgICAgIGluc3RhbGwgLWQgJHtTWVNST09UX0RFU1RESVJ9JHtTVEFHSU5HX0JJTkRJUl9DUk9TU30KLSAgICAgICAgCXByaW50ZiAnIyElcyBcXFxuLS1uby1hdXRvLWNvbXBpbGUgLWUgbWFpbiAtc1xuISNcbihkZWZpbmUgJSVndWlsZS1idWlsZC1pbmZvICVzKFxuJyAkKHdoaWNoICR7QlVJTERfU1lTfS1ndWlsZSkgIiciIFwKLQkJCT4gJHtCfS9ndWlsZS1jb25maWcuY3Jvc3MKLQkgICAgICAgIHNlZCAtbiAtZSAnczpeWyBcdF0qe1sgXHRdKiI6ICAoOicgXAotCQkJLWUgJ3M6IixbIFx0XSoiOiAuICI6JyBcCi0JCQktZSAnczoiICp9LCAqXFw6Iik6JyBcCi0JCQktZSAnczpeLipjYWNoZWRpci4qJDo6JyBcCi0JCQktZSAnL14gICgvcCcgXAotCQkJPCAke0J9L2xpYmd1aWxlL2xpYnBhdGguaCA+PiAke0J9L2d1aWxlLWNvbmZpZy5jcm9zcwotCSAgICAgICAgZWNobyAnKSknID4+ICR7Qn0vZ3VpbGUtY29uZmlnLmNyb3NzCi0JICAgICAgICBjYXQgJHtCfS9tZXRhL2d1aWxlLWNvbmZpZyA+PiAke0J9L2d1aWxlLWNvbmZpZy5jcm9zcwotCSAgICAgICAgaW5zdGFsbCAke0J9L2d1aWxlLWNvbmZpZy5jcm9zcyAke1NUQUdJTkdfQklORElSX0NST1NTfS9ndWlsZS1jb25maWcKLQlmaQotfQotCi0jIEd1aWxlIG5lZWRzIHRoZSBjb21waWxlZCBmaWxlcyB0byBiZSBuZXdlciB0aGFuIHRoZSBzb3VyY2UsIGFuZCBpdCB3b24ndAotIyBhdXRvLWNvbXBpbGUgaW50byB0aGUgcHJlZml4IGV2ZW4gaWYgaXQgY2FuIHdyaXRlIHRoZXJlLCBzbyB0b3VjaCB0aGVtIGhlcmUgYXMKLSMgc3lzcm9vdCBpcyBtYW5hZ2VkLgotU1NUQVRFUE9TVElOU1RGVU5DUyArPSAiZ3VpbGVfc3N0YXRlX3Bvc3RpbnN0IgotR1VJTEVTU1RBVEVESVIgPSAiJHtDT01QT05FTlRTX0RJUn0vJHtUVU5FX1BLR0FSQ0h9LyR7UE59LyR7bGliZGlyfS9ndWlsZS8yLjAvY2NhY2hlIgotR1VJTEVTU1RBVEVESVJfY2xhc3MtbmF0aXZlID0gIiR7Q09NUE9ORU5UU19ESVJ9LyR7QlVJTERfQVJDSH0vJHtQTn0vJHtsaWJkaXJfbmF0aXZlfS9ndWlsZS8yLjAvY2NhY2hlIgotZ3VpbGVfc3N0YXRlX3Bvc3RpbnN0KCkgewotCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290IiAtbyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF0KLQl0aGVuCi0gICAgICAgICAgICAgICAgZmluZCAke0dVSUxFU1NUQVRFRElSfSAtdHlwZSBmIHwgeGFyZ3MgdG91Y2gKLQlmaQotfQotCi0jIGh0dHA6Ly9lcnJvcnMueW9jdG9wcm9qZWN0Lm9yZy9FcnJvcnMvRGV0YWlscy8yMDQ5MS8KLUFSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjQgPSAiYXJtIgotQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NSA9ICJhcm0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2kyYy10b29scy9pMmMtdG9vbHNfMy4xLjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2kyYy10b29scy9pMmMtdG9vbHNfMy4xLjIuYmIKaW5kZXggNGQyNTU0Mi4uYzAxNzI1MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pMmMtdG9vbHMvaTJjLXRvb2xzXzMuMS4yLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaTJjLXRvb2xzL2kyYy10b29sc18zLjEuMi5iYgpAQCAtMSw0ICsxLDUgQEAKIFNVTU1BUlkgPSAiU2V0IG9mIGkyYyB0b29scyBmb3IgbGludXgiCitIT01FUEFHRSA9ICJodHRwczovL2kyYy53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0kyQ19Ub29scyIKIFNFQ1RJT04gPSAiYmFzZSIKIExJQ0VOU0UgPSAiR1BMdjIrIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sXzAuNTEuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2xfMC41MS4wLmJiCmluZGV4IDU1MWJkZjAuLmVjZmYyZmEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2xfMC41MS4wLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2xfMC41MS4wLmJiCkBAIC0xNiw3ICsxNiw3IEBACiAKIERFUEVORFMgPSAibGlieG1sLXBhcnNlci1wZXJsLW5hdGl2ZSIKIFJERVBFTkRTXyR7UE59ID0gImdldHRleHQtZGV2IGxpYnhtbC1wYXJzZXItcGVybCIKLURFUEVORFNfY2xhc3MtbmF0aXZlID0gImxpYnhtbC1wYXJzZXItcGVybC1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJsaWJ4bWwtcGFyc2VyLXBlcmwtbmF0aXZlIGdldHRleHQtbmF0aXZlIgogCiBpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgcGVybG5hdGl2ZQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2pzb24tYy9qc29uLWMvMDAwMS1BZGQtRkFMTFRIUlUtY29tbWVudC10by1oYW5kbGUtR0NDNy13YXJuaW5ncy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvanNvbi1jL2pzb24tYy8wMDAxLUFkZC1GQUxMVEhSVS1jb21tZW50LXRvLWhhbmRsZS1HQ0M3LXdhcm5pbmdzLnBhdGNoCmluZGV4IGRmM2I2MDAuLjUzN2JlNWUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvanNvbi1jL2pzb24tYy8wMDAxLUFkZC1GQUxMVEhSVS1jb21tZW50LXRvLWhhbmRsZS1HQ0M3LXdhcm5pbmdzLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvanNvbi1jL2pzb24tYy8wMDAxLUFkZC1GQUxMVEhSVS1jb21tZW50LXRvLWhhbmRsZS1HQ0M3LXdhcm5pbmdzLnBhdGNoCkBAIC0xLDE0ICsxLDExIEBACi1Gcm9tIDk1MjJhYzhlNWQ1YjIwYTQ3MmYzZmZjMzU2ZDM4OGQzNmY3ZjU4MmMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDdiMjRmOGJkOTVhZDRmN2QwMGM5M2NhMmFkOTk4YzE0YTAyNjZkYmUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBtYXJ4aW4gPG1saXNrYUBzdXNlLmN6PgogRGF0ZTogVHVlLCAyMSBNYXIgMjAxNyAwODo0MjoxMSArMDEwMAogU3ViamVjdDogW1BBVENIXSBBZGQgRkFMTFRIUlUgY29tbWVudCB0byBoYW5kbGUgR0NDNyB3YXJuaW5ncy4KLU1JTUUtVmVyc2lvbjogMS4wCi1Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKLUNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKIAogLS0tCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtodHRwczovL2dpdGh1Yi5jb20vanNvbi1jL2pzb24tYy9jb21taXQvMDE0OTI0YmE4OTlmNjU5OTE3YmI2NDM5MmJiZmY3ZDNjODAzYWZjMl0KLVNpZ25lZC1vZmYtYnk6IEFuZHLDqSBEcmFzemlrIDxhZHJhc3ppa0B0eWNvaW50LmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiAKICBqc29uX29iamVjdC5jICB8ICAxICsKICBqc29uX3Rva2VuZXIuYyB8ICAxICsKQEAgLTI4LDEwICsyNSwxMCBAQAogICAgICByZXR1cm4gMDsKICAgIH0KIGRpZmYgLS1naXQgYS9qc29uX3Rva2VuZXIuYyBiL2pzb25fdG9rZW5lci5jCi1pbmRleCA3ZmEzMmFlLi5iMzJkNjU3IDEwMDY0NAoraW5kZXggOWE3NjI5My4uYWU3YjFhZSAxMDA2NDQKIC0tLSBhL2pzb25fdG9rZW5lci5jCiArKysgYi9qc29uX3Rva2VuZXIuYwotQEAgLTMwNiw2ICszMDYsNyBAQCBzdHJ1Y3QganNvbl9vYmplY3QqIGpzb25fdG9rZW5lcl9wYXJzZV9leChzdHJ1Y3QganNvbl90b2tlbmVyICp0b2ssCitAQCAtMzA1LDYgKzMwNSw3IEBAIHN0cnVjdCBqc29uX29iamVjdCoganNvbl90b2tlbmVyX3BhcnNlX2V4KHN0cnVjdCBqc29uX3Rva2VuZXIgKnRvaywKICAgICAgICAgICAgICB0b2stPmVyciA9IGpzb25fdG9rZW5lcl9lcnJvcl9wYXJzZV91bmV4cGVjdGVkOwogICAgICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICAgfQpAQCAtNzMsNSArNzAsNSBAQAogICAgICAgICAgICAgICBicmVhazsKICAgICAgY2FzZSAwIDogcmV0dXJuIGM7CiAtLSAKLTIuMTQuMQorMi4xMi4yCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvanNvbi1jL2pzb24tYy8wMDAxLUxpbmstYWdhaW5zdC1saWJtLXdoZW4tbmVlZGVkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9qc29uLWMvanNvbi1jLzAwMDEtTGluay1hZ2FpbnN0LWxpYm0td2hlbi1uZWVkZWQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZTlkNzIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9qc29uLWMvanNvbi1jLzAwMDEtTGluay1hZ2FpbnN0LWxpYm0td2hlbi1uZWVkZWQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi1Gcm9tIDkzNTgyYWQ4NWVmNDhjMThhYzEyZjAwYTlhOWUxMjQ5ODliMWZjYWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBUaG9tYXMgUGV0YXp6b25pIDx0aG9tYXMucGV0YXp6b25pQGZyZWUtZWxlY3Ryb25zLmNvbT4KLURhdGU6IEZyaSwgMSBNYXkgMjAxNSAxMjo1MjoxOCArMDIwMAotU3ViamVjdDogW1BBVENIXSBMaW5rIGFnYWluc3QgbGlibSB3aGVuIG5lZWRlZAotCi1JbiBjZXJ0YWluIEMgbGlicmFyaWVzIChlLmcgdUNsaWJjKSwgaXNuYW4oKSBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgYXJlCi1pbXBsZW1lbnRlZCBpbiBsaWJtLCBzbyBqc29uLWMgbmVlZHMgdG8gbGluayBhZ2FpbnN0IGl0LiBUaGlzIGNvbW1pdAotdGhlcmVmb3JlIGFkZHMgYW4gQUNfVFJZX0xJTksoKSB0ZXN0IHRvIGNoZWNrIHdoZXRoZXIgYSBwcm9ncmFtCi1jYWxsaW5nIGlzbmFuKCkgY2FuIGJlIHByb3Blcmx5IGxpbmtlZCB3aXRoIG5vIHNwZWNpYWwgZmxhZ3MuIElmIG5vdCwKLXdlIGFzc3VtZSBsaW5raW5nIGFnYWluc3QgbGlibSBpcyBuZWVkZWQuCi0KLVRoZSBqc29uLWMucGMuaW4gZmlsZSBpcyBhbHNvIGFkanVzdGVkIHNvIHRoYXQgaW4gdGhlIGNhc2Ugb2Ygc3RhdGljCi1saW5raW5nIGFnYWluc3QganNvbi1jLCAtbG0gaXMgYWxzbyB1c2VkLgotCi1TaWduZWQtb2ZmLWJ5OiBUaG9tYXMgUGV0YXp6b25pIDx0aG9tYXMucGV0YXp6b25pQGZyZWUtZWxlY3Ryb25zLmNvbT4KLS0tLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi0gY29uZmlndXJlLmFjIHwgNCArKysrCi0ganNvbi1jLnBjLmluIHwgMyArKy0KLSAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCBjNTBmODFiLi4zMGU3MTc0IDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC01MCw2ICs1MCwxMCBAQCBBQ19DSEVDS19ERUNMUyhbaXNpbmZdLCBbXSwgW10sIFtbI2luY2x1ZGUgPG1hdGguaD5dXSkKLSBBQ19DSEVDS19ERUNMUyhbX2lzbmFuXSwgW10sIFtdLCBbWyNpbmNsdWRlIDxmbG9hdC5oPl1dKQotIEFDX0NIRUNLX0RFQ0xTKFtfZmluaXRlXSwgW10sIFtdLCBbWyNpbmNsdWRlIDxmbG9hdC5oPl1dKQotIAotK2lmIHRlc3QgIiRhY19jdl9oYXZlX2RlY2xfaXNuYW4iID0gInllcyIgOyB0aGVuCi0rICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxtYXRoLmg+XSwgW2Zsb2F0IGYgPSAwLjA7IHJldHVybiBpc25hbihmKV0sIFtdLCBbTElCUz0iJExJQlMgLWxtIl0pCi0rZmkKLSsKLSAjY2hlY2sgaWYgLnNlY3Rpb24uZ251Lndhcm5pbmcgYWNjZXB0cyBsb25nIHN0cmluZ3MgKGZvciBfX3dhcm5fcmVmZXJlbmNlcykKLSBBQ19MQU5HX1BVU0goW0NdKQotIAotZGlmZiAtLWdpdCBhL2pzb24tYy5wYy5pbiBiL2pzb24tYy5wYy5pbgotaW5kZXggMDM3NzM5ZC4uMDViZmJjOCAxMDA2NDQKLS0tLSBhL2pzb24tYy5wYy5pbgotKysrIGIvanNvbi1jLnBjLmluCi1AQCAtNiw2ICs2LDcgQEAgaW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKLSBOYW1lOiBqc29uLWMKLSBEZXNjcmlwdGlvbjogSlNPTiBpbXBsZW1lbnRhdGlvbiBpbiBDCi0gVmVyc2lvbjogQFZFUlNJT05ACi0tUmVxdWlyZXM6IAotK1JlcXVpcmVzOgotK0xpYnMucHJpdmF0ZTogQExJQlNACi0gTGliczogIC1MJHtsaWJkaXJ9IC1sanNvbi1jCi0gQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0vanNvbi1jCi0tLSAKLTIuOC4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvanNvbi1jL2pzb24tYy8wMDAxLWpzb25fdG9rZW5lci1yZXF1aXJlcy1JTkYtYW5kLU5BTi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvanNvbi1jL2pzb24tYy8wMDAxLWpzb25fdG9rZW5lci1yZXF1aXJlcy1JTkYtYW5kLU5BTi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI5ZDkxMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2pzb24tYy9qc29uLWMvMDAwMS1qc29uX3Rva2VuZXItcmVxdWlyZXMtSU5GLWFuZC1OQU4ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi1Gcm9tIDliZTcxNzAwZWI1ODBjODE1Njg4NTg0YTY0NjIxYTM4ODY3YzNmZGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBKYW1lcyBNeWF0dCA8amFtZXMubXlhdHRAdGVzc2VsbGEuY29tPgotRGF0ZTogVGh1LCA1IEZlYiAyMDE1IDE1OjU3OjE0ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIGpzb25fdG9rZW5lciByZXF1aXJlcyBJTkYgYW5kIE5BTgotCi0tLS0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotIGpzb25fdG9rZW5lci5jIHwgMyArKy0KLSAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCi0KLUluZGV4OiBqc29uLWMtMC4xMi9qc29uX3Rva2VuZXIuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGpzb24tYy0wLjEyLm9yaWcvanNvbl90b2tlbmVyLmMKLSsrKyBqc29uLWMtMC4xMi9qc29uX3Rva2VuZXIuYwotQEAgLTE2LDYgKzE2LDcgQEAKLSAjaW5jbHVkZSAiY29uZmlnLmgiCi0gCi0gI2luY2x1ZGUgPG1hdGguaD4KLSsjaW5jbHVkZSAibWF0aF9jb21wYXQuaCIKLSAjaW5jbHVkZSA8c3RkaW8uaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gI2luY2x1ZGUgPHN0ZGRlZi5oPgotQEAgLTM1MiwxMiArMzUzLDEwIEBAIHN0cnVjdCBqc29uX29iamVjdCoganNvbl90b2tlbmVyX3BhcnNlX2UKLSAKLSAgICAgY2FzZSBqc29uX3Rva2VuZXJfc3RhdGVfaW5mOiAvKiBha2Egc3RhcnRzIHdpdGggJ2knICovCi0gICAgICAgewotLQlpbnQgc2l6ZTsKLS0JaW50IHNpemVfaW5mOwotKwlzaXplX3Qgc2l6ZV9pbmY7Ci0gCWludCBpc19uZWdhdGl2ZSA9IDA7Ci0gCi0gCXByaW50YnVmX21lbWFwcGVuZF9mYXN0KHRvay0+cGIsICZjLCAxKTsKLS0Jc2l6ZSA9IGpzb25fbWluKHRvay0+c3RfcG9zKzEsIGpzb25fbnVsbF9zdHJfbGVuKTsKLSAJc2l6ZV9pbmYgPSBqc29uX21pbih0b2stPnN0X3BvcysxLCBqc29uX2luZl9zdHJfbGVuKTsKLSAJY2hhciAqaW5mYnVmID0gdG9rLT5wYi0+YnVmOwotIAlpZiAoKmluZmJ1ZiA9PSAnLScpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2pzb24tYy9qc29uLWNfMC4xMi4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9qc29uLWMvanNvbi1jXzAuMTIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDFjZjEzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9qc29uLWMvanNvbi1jXzAuMTIuMS5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIkMgYmluZGluZ3MgZm9yIGFwcHMgd2hpY2ggd2lsbCBtYW5pcHVsYXRlIEpTT04gZGF0YSIKK0RFU0NSSVBUSU9OID0gIkpTT04tQyBpbXBsZW1lbnRzIGEgcmVmZXJlbmNlIGNvdW50aW5nIG9iamVjdCBtb2RlbCB0aGF0IGFsbG93cyB5b3UgdG8gZWFzaWx5IGNvbnN0cnVjdCBKU09OIG9iamVjdHMgaW4gQy4iCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vanNvbi1jL2pzb24tYy93aWtpIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kZTU0YjYwZmJiYzM1MTIzYmExOTNmZWE4ZWUyMTZmMiIKKworU1JDX1VSSSA9ICJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vanNvbi1jX3JlbGVhc2VzL3JlbGVhc2VzLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUFkZC1GQUxMVEhSVS1jb21tZW50LXRvLWhhbmRsZS1HQ0M3LXdhcm5pbmdzLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjU1Zjc4NTNmN2Q4Y2Y2NjQ1NTRjZTNmYTcxYmYxYzdkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJhMTM2NDUxYTc5MzJkODBiN2QxOTdiMTA0NDFlMjZlMzk0MjhkNjdiMTQ0M2VjNDNiYmJhODI0NzA1ZTExMjMiCisKK1VQU1RSRUFNX0NIRUNLX1JFR0VYID0gImpzb24tYy0oP1A8cHZlcj5cZCsoXC5cZCspKykudGFyIgorIyBqc29uLWMgcmVsZWFzZXMgcGFnZSBpcyBmZXRjaGluZyB0aGUgbGlzdCBvZiByZWxlYXNlcyBpbiBzb21lIHdlaXJkIFhNTCBmb3JtYXQKKyMgZnJvbSBodHRwczovL3MzLmFtYXpvbmF3cy5jb20vanNvbi1jX3JlbGVhc2VzIGFuZCBwcm9jZXNzZXMgaXQgd2l0aCBqYXZhc2NyaXB0IDotLworI1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vanNvbi1jX3JlbGVhc2VzL3JlbGVhc2VzL2luZGV4Lmh0bWwiCitSRUNJUEVfVVBTVFJFQU1fVkVSU0lPTiA9ICIwLjEyLjEiCitSRUNJUEVfVVBTVFJFQU1fREFURSA9ICJKdW4gMDcsIDIwMTYiCitDSEVDS19EQVRFID0gIkFwciAxOSwgMjAxNyIKKworUlBST1ZJREVTXyR7UE59ID0gImxpYmpzb24iCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1yZHJhbmQiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICMgQ2xlYW4gdXAgYXV0b2NvbmYgY3J1ZnQgdGhhdCBzaG91bGQgbm90IGJlIGluIHRoZSB0YXJiYWxsCisgICAgcm0gLWYgJHtTfS9jb25maWcuc3RhdHVzCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvanNvbi1jL2pzb24tY18wLjEyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9qc29uLWMvanNvbi1jXzAuMTIuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MmMwOTIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9qc29uLWMvanNvbi1jXzAuMTIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi1TVU1NQVJZID0gIkMgYmluZGluZ3MgZm9yIGFwcHMgd2hpY2ggd2lsbCBtYW5pcHVsYXRlIEpTT04gZGF0YSIKLURFU0NSSVBUSU9OID0gIkpTT04tQyBpbXBsZW1lbnRzIGEgcmVmZXJlbmNlIGNvdW50aW5nIG9iamVjdCBtb2RlbCB0aGF0IGFsbG93cyB5b3UgdG8gZWFzaWx5IGNvbnN0cnVjdCBKU09OIG9iamVjdHMgaW4gQy4iCi1IT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vanNvbi1jL2pzb24tYy93aWtpIgotTElDRU5TRSA9ICJNSVQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kZTU0YjYwZmJiYzM1MTIzYmExOTNmZWE4ZWUyMTZmMiIKLQotU1JDX1VSSSA9ICJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vanNvbi1jX3JlbGVhc2VzL3JlbGVhc2VzLyR7QlB9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWpzb25fdG9rZW5lci1yZXF1aXJlcy1JTkYtYW5kLU5BTi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLUxpbmstYWdhaW5zdC1saWJtLXdoZW4tbmVlZGVkLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtQWRkLUZBTExUSFJVLWNvbW1lbnQtdG8taGFuZGxlLUdDQzctd2FybmluZ3MucGF0Y2ggXAotICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjNjYTRiYmI4ODFkZmM0MDE3ZTgwMjFiNWUwYThjNDkxIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAwMGMwMWIyYjNmODJkY2I0MjYxNzUxZWI3MWYxYjA4NDQwNGZiN2Q2YTI4MmYwNjA3NGQzYzE3MDc4YjlmM2YiCi0KLVVQU1RSRUFNX0NIRUNLX1JFR0VYID0gImpzb24tYy0oP1A8cHZlcj5cZCsoXC5cZCspKykudGFyIgotIyBqc29uLWMgcmVsZWFzZXMgcGFnZSBpcyBmZXRjaGluZyB0aGUgbGlzdCBvZiByZWxlYXNlcyBpbiBzb21lIHdlaXJkIFhNTCBmb3JtYXQKLSMgZnJvbSBodHRwczovL3MzLmFtYXpvbmF3cy5jb20vanNvbi1jX3JlbGVhc2VzIGFuZCBwcm9jZXNzZXMgaXQgd2l0aCBqYXZhc2NyaXB0IDotLwotI1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vanNvbi1jX3JlbGVhc2VzL3JlbGVhc2VzL2luZGV4Lmh0bWwiCi1SRUNJUEVfVVBTVFJFQU1fVkVSU0lPTiA9ICIwLjEyIgotUkVDSVBFX1VQU1RSRUFNX0RBVEUgPSAiQXByIDExLCAyMDE0IgotQ0hFQ0tfREFURSA9ICJEZWMgMDQsIDIwMTUiCi0KLVJQUk9WSURFU18ke1BOfSA9ICJsaWJqc29uIgotCi1pbmhlcml0IGF1dG90b29scwotCi1kb19jb25maWd1cmVfcHJlcGVuZCgpIHsKLSAgICAjIENsZWFuIHVwIGF1dG9jb25mIGNydWZ0IHRoYXQgc2hvdWxkIG5vdCBiZSBpbiB0aGUgdGFyYmFsbAotICAgIHJtIC1mICR7U30vY29uZmlnLnN0YXR1cwotfQotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2tjb25maWctZnJvbnRlbmRzL2tjb25maWctZnJvbnRlbmRzXzMuMTIuMC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9rY29uZmlnLWZyb250ZW5kcy9rY29uZmlnLWZyb250ZW5kc18zLjEyLjAuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNhMGU0ZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2tjb25maWctZnJvbnRlbmRzL2tjb25maWctZnJvbnRlbmRzXzMuMTIuMC4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTIgS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLSMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQgZm9yIHRoZSB0ZXJtcykKLQotU1VNTUFSWSA9ICJMaW51eCBrZXJuZWwgc3R5bGUgY29uZmlndXJhdGlvbiBmcmFtZXdvcmsgZm9yIG90aGVyIHByb2plY3RzIgotREVTQ1JJUFRJT04gPSAiVGhlIGtjb25maWctZnJvbnRlbmRzIHByb2plY3QgYWltcyBhdCBjZW50cmFsaXNpbmcgXAotdGhlIGVmZm9ydCBvZiBrZWVwaW5nIGFuIHVwLXRvLWRhdGUsIG91dC1vZi10cmVlLCBwYWNrYWdpbmcgb2YgdGhlIFwKLWtjb25maWcgaW5mcmFzdHJ1Y3R1cmUsIHJlYWR5IGZvciB1c2UgYnkgdGhpcmQtcGFydHkgcHJvamVjdHMuIFwKLVRoZSBrY29uZmlnLWZyb250ZW5kcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSBrY29uZmlnIHBhcnNlciwgYXMgd2VsbCBhcyBhbGwgXAotdGhlIGZyb250ZW5kcyIKLUhPTUVQQUdFID0gImh0dHA6Ly95bW9yaW4uaXMtYS1nZWVrLm9yZy9wcm9qZWN0cy9rY29uZmlnLWZyb250ZW5kcyIKLUxJQ0VOU0UgPSAiR1BMLTIuMCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTliOGNmNjBmZjM5NzY3ZmYwNGI2NzFmY2E4MzAyNDA4IgotU0VDVElPTiA9ICJkZXZlbCIKLURFUEVORFMgKz0gIm5jdXJzZXMgZmxleCBiaXNvbiBncGVyZi1uYXRpdmUiCi1SREVQRU5EU18ke1BOfSArPSAicHl0aG9uIGJhc2giCi1TUkNfVVJJID0gImdpdDovL3ltb3Jpbi5pcy1hLWdlZWsub3JnL2tjb25maWctZnJvbnRlbmRzIgotCi1TUkNSRVYgPSAiNzVkMzViMTcyZmMwZjdiNjYyMGRkNjU5YWY0MWYyY2UwNGVkYzRlNiIKLQotUyA9ICIke1dPUktESVJ9L2dpdCIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCi1kb19jb25maWd1cmVfcHJlcGVuZCAoKSB7Ci0JbWtkaXIgLXAgJHtTfS9zY3JpcHRzLy5hdXRvc3R1ZmYvbTQKLX0KLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0JbG4gLXMga2NvbmZpZy1jb25mICR7RH0ke2JpbmRpcn0vY29uZgotCWxuIC1zIGtjb25maWctbWNvbmYgJHtEfSR7YmluZGlyfS9tY29uZgotfQotCi1FWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1nY29uZiAtLWRpc2FibGUtcWNvbmYiCi0KLSMgU29tZSBwYWNrYWdlcyBoYXZlIHRoZSB2ZXJzaW9uIHByZWNlZWRpbmcgdGhlIC5zbyBpbnN0ZWFkIHByb3Blcmx5Ci0jIHZlcnNpb25lZCAuc28uPHZlcnNpb24+LCBzbyB3ZSBuZWVkIHRvIHJlb3JkZXIgYW5kIHJlcGFja2FnZS4KLVNPTElCUyA9ICItJHtAZC5nZXRWYXIoJ1BWJylbOi0yXX0uc28iCi1GSUxFU19TT0xJQlNERVYgPSAiJHtsaWJkaXJ9L2xpYmtjb25maWctcGFyc2VyLnNvIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGliY29tcHMvbGliY29tcHMvMDAwMi1TZXQtbGlicmFyeS1pbnN0YWxsYXRpb24tcGF0aC1jb3JyZWN0bHkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYmNvbXBzL2xpYmNvbXBzLzAwMDItU2V0LWxpYnJhcnktaW5zdGFsbGF0aW9uLXBhdGgtY29ycmVjdGx5LnBhdGNoCmluZGV4IGVjMWZkYzQuLmRjM2Q5NzYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGliY29tcHMvbGliY29tcHMvMDAwMi1TZXQtbGlicmFyeS1pbnN0YWxsYXRpb24tcGF0aC1jb3JyZWN0bHkucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJjb21wcy9saWJjb21wcy8wMDAyLVNldC1saWJyYXJ5LWluc3RhbGxhdGlvbi1wYXRoLWNvcnJlY3RseS5wYXRjaApAQCAtMyw3ICszLDcgQEAKIERhdGU6IEZyaSwgMzAgRGVjIDIwMTYgMTg6MjY6MDAgKzAyMDAKIFN1YmplY3Q6IFtQQVRDSCAyLzJdIFNldCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBwYXRoIGNvcnJlY3RseQogCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vcnBtLXNvZnR3YXJlLW1hbmFnZW1lbnQvbGliY29tcHMvcHVsbC8zMl0KIFNpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgogLS0tCiAgbGliY29tcHMvc3JjL0NNYWtlTGlzdHMudHh0IHwgMiArLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJkbmYvbGliZG5mLzAwMDEtRmluZEd0a0RvYy5jbWFrZS1kcm9wLXRoZS1yZXF1aXJlbWVudC1mb3ItR1RLRE9DX1NDQS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGliZG5mL2xpYmRuZi8wMDAxLUZpbmRHdGtEb2MuY21ha2UtZHJvcC10aGUtcmVxdWlyZW1lbnQtZm9yLUdUS0RPQ19TQ0EucGF0Y2gKaW5kZXggNzNhY2RhNi4uNzkxYTMyZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJkbmYvbGliZG5mLzAwMDEtRmluZEd0a0RvYy5jbWFrZS1kcm9wLXRoZS1yZXF1aXJlbWVudC1mb3ItR1RLRE9DX1NDQS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYmRuZi9saWJkbmYvMDAwMS1GaW5kR3RrRG9jLmNtYWtlLWRyb3AtdGhlLXJlcXVpcmVtZW50LWZvci1HVEtET0NfU0NBLnBhdGNoCkBAIC03LDcgKzcsNyBAQAogRm9yIHNvbWUgcmVhc29uIGNtYWtlIGlzIG5vdCBhYmxlIHRvIGZpbmQgaXQgd2hlbiBidWlsZGluZyBpbiBvcGVuZW1iZWRkZWQsCiBhbmQgaXQncyBidW5kbGVkIHdpdGggdGhlIHNvdXJjZSBjb2RlIGFueXdheS4KIAotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL3JwbS1zb2Z0d2FyZS1tYW5hZ2VtZW50L2xpYmRuZi9wdWxsLzMxMl0KIFNpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgogLS0tCiAgY21ha2UvbW9kdWxlcy9GaW5kR3RrRG9jLmNtYWtlIHwgMiArLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJkbmYvbGliZG5mLzAwMDEtR2V0LXBhcmFtZXRlcnMtZm9yLWJvdGgtbGlic29sdi1hbmQtbGlic29sdmV4dC1saWJkbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGliZG5mL2xpYmRuZi8wMDAxLUdldC1wYXJhbWV0ZXJzLWZvci1ib3RoLWxpYnNvbHYtYW5kLWxpYnNvbHZleHQtbGliZG4ucGF0Y2gKaW5kZXggOTU0YWRkNi4uMjgwZWRiNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJkbmYvbGliZG5mLzAwMDEtR2V0LXBhcmFtZXRlcnMtZm9yLWJvdGgtbGlic29sdi1hbmQtbGlic29sdmV4dC1saWJkbi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYmRuZi9saWJkbmYvMDAwMS1HZXQtcGFyYW1ldGVycy1mb3ItYm90aC1saWJzb2x2LWFuZC1saWJzb2x2ZXh0LWxpYmRuLnBhdGNoCkBAIC0xLDI4ICsxLDI5IEBACi1Gcm9tIDU5NThiMTUxYTRkYmI4OTExNGU5MGM5NzFhMzRiNzRmODczYjdiZWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDMwMTJhOTM3NDUyMjM3NTFjYzk3OWUzNzcwMjA3YTA5YTA3NWJlYzYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KIERhdGU6IFR1ZSwgNyBGZWIgMjAxNyAxMjoxNjowMyArMDIwMAotU3ViamVjdDogW1BBVENIXSBHZXQgcGFyYW1ldGVycyBmb3IgYm90aCBsaWJzb2x2IGFuZCBsaWJzb2x2ZXh0IChsaWJkbmYgaXMKK1N1YmplY3Q6IFtQQVRDSCA1LzVdIEdldCBwYXJhbWV0ZXJzIGZvciBib3RoIGxpYnNvbHYgYW5kIGxpYnNvbHZleHQgKGxpYmRuZiBpcwogIHVzaW5nIGJvdGgpCiAKLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbZGVwZW5kcyBvbiB3aGV0aGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuU1VTRS9saWJzb2x2L3B1bGwvMTc3IGlzIGFjY2VwdGVkXQorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vZ2l0aHViLmNvbS9ycG0tc29mdHdhcmUtbWFuYWdlbWVudC9saWJkbmYvcHVsbC8zMTJdCiBTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKwogLS0tCiAgQ01ha2VMaXN0cy50eHQgfCAyICstCiAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCiAKIGRpZmYgLS1naXQgYS9DTWFrZUxpc3RzLnR4dCBiL0NNYWtlTGlzdHMudHh0Ci1pbmRleCBiNTMxZGExLi5lNTEyZGEwIDEwMDY0NAoraW5kZXggOGIyYWI5YS4uZTJkMzNkNyAxMDA2NDQKIC0tLSBhL0NNYWtlTGlzdHMudHh0CiArKysgYi9DTWFrZUxpc3RzLnR4dAotQEAgLTI4LDcgKzI4LDcgQEAgZmluZF9wYWNrYWdlIChQa2dDb25maWcgUkVRVUlSRUQpCitAQCAtMjksNyArMjksNyBAQCBmaW5kX3BhY2thZ2UgKFBrZ0NvbmZpZyBSRVFVSVJFRCkKICBTRVQgKENNQUtFX01PRFVMRV9QQVRIICR7Q01BS0VfU09VUkNFX0RJUn0vY21ha2UvbW9kdWxlcykKICBQS0dfQ0hFQ0tfTU9EVUxFUyhHTElCIGdpby11bml4LTIuMD49Mi40NC4wIFJFUVVJUkVEKQogIEZJTkRfTElCUkFSWSAoUlBNREJfTElCUkFSWSBOQU1FUyBycG1kYikKIC1QS0dfQ0hFQ0tfTU9EVUxFUyAoTElCU09MViBSRVFVSVJFRCBsaWJzb2x2KQogK1BLR19DSEVDS19NT0RVTEVTIChMSUJTT0xWIFJFUVVJUkVEIGxpYnNvbHYgbGlic29sdmV4dCkKICBzZXQoTElCU09MVl9MSUJSQVJZICR7TElCU09MVl9MSUJSQVJJRVN9KQotIHBrZ19jaGVja19tb2R1bGVzIChDSEVDSyBSRVFVSVJFRCBjaGVjaykKLSBwa2dfY2hlY2tfbW9kdWxlcyAoUkVQTyBSRVFVSVJFRCBsaWJyZXBvKQorIGlmIChFTkFCTEVfUkhTTV9TVVBQT1JUKQorICAgICBwa2dfY2hlY2tfbW9kdWxlcyAoUkhTTSBSRVFVSVJFRCBsaWJyaHNtKQogLS0gCiAyLjExLjAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJkbmYvbGliZG5mLzAwMDItUHJlZml4LXN5c3Jvb3QtcGF0aC10by1pbnRyb3NwZWN0aW9uLXRvb2xzLXBhdGgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYmRuZi9saWJkbmYvMDAwMi1QcmVmaXgtc3lzcm9vdC1wYXRoLXRvLWludHJvc3BlY3Rpb24tdG9vbHMtcGF0aC5wYXRjaAppbmRleCAzZDc3MmE1Li43ZWVjYzNkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYmRuZi9saWJkbmYvMDAwMi1QcmVmaXgtc3lzcm9vdC1wYXRoLXRvLWludHJvc3BlY3Rpb24tdG9vbHMtcGF0aC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYmRuZi9saWJkbmYvMDAwMi1QcmVmaXgtc3lzcm9vdC1wYXRoLXRvLWludHJvc3BlY3Rpb24tdG9vbHMtcGF0aC5wYXRjaApAQCAtMyw3ICszLDcgQEAKIERhdGU6IEZyaSwgMzAgRGVjIDIwMTYgMTg6MTc6MTkgKzAyMDAKIFN1YmplY3Q6IFtQQVRDSCAyLzRdIFByZWZpeCBzeXNyb290IHBhdGggdG8gaW50cm9zcGVjdGlvbiB0b29scyBwYXRoLgogCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vcnBtLXNvZnR3YXJlLW1hbmFnZW1lbnQvbGliZG5mL3B1bGwvMzEyXQogU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CiAtLS0KICBsaWJkbmYvQ01ha2VMaXN0cy50eHQgfCA0ICsrLS0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGliZG5mL2xpYmRuZi8wMDAzLVNldC10aGUtbGlicmFyeS1pbnN0YWxsYXRpb24tZGlyZWN0b3J5LWNvcnJlY3RseS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGliZG5mL2xpYmRuZi8wMDAzLVNldC10aGUtbGlicmFyeS1pbnN0YWxsYXRpb24tZGlyZWN0b3J5LWNvcnJlY3RseS5wYXRjaAppbmRleCBkN2U1OWQ4Li44MTI2NDA5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYmRuZi9saWJkbmYvMDAwMy1TZXQtdGhlLWxpYnJhcnktaW5zdGFsbGF0aW9uLWRpcmVjdG9yeS1jb3JyZWN0bHkucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJkbmYvbGliZG5mLzAwMDMtU2V0LXRoZS1saWJyYXJ5LWluc3RhbGxhdGlvbi1kaXJlY3RvcnktY29ycmVjdGx5LnBhdGNoCkBAIC0zLDcgKzMsNyBAQAogRGF0ZTogRnJpLCAzMCBEZWMgMjAxNiAxODoyMDowMSArMDIwMAogU3ViamVjdDogW1BBVENIIDMvNF0gU2V0IHRoZSBsaWJyYXJ5IGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgY29ycmVjdGx5LgogCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vcnBtLXNvZnR3YXJlLW1hbmFnZW1lbnQvbGliZG5mL3B1bGwvMzEyXQogU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CiAtLS0KICBDTWFrZUxpc3RzLnR4dCB8IDQgKysrLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJkbmYvbGliZG5mLzAwMDQtU2V0LWxpYnNvbHYtdmFyaWFibGVzLXdpdGgtcGtnLWNvbmZpZy1jbWFrZS1zLW93bi1tby5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGliZG5mL2xpYmRuZi8wMDA0LVNldC1saWJzb2x2LXZhcmlhYmxlcy13aXRoLXBrZy1jb25maWctY21ha2Utcy1vd24tbW8ucGF0Y2gKaW5kZXggOTMxOTU5Yi4uMWVhOTMxMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJkbmYvbGliZG5mLzAwMDQtU2V0LWxpYnNvbHYtdmFyaWFibGVzLXdpdGgtcGtnLWNvbmZpZy1jbWFrZS1zLW93bi1tby5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYmRuZi9saWJkbmYvMDAwNC1TZXQtbGlic29sdi12YXJpYWJsZXMtd2l0aC1wa2ctY29uZmlnLWNtYWtlLXMtb3duLW1vLnBhdGNoCkBAIC0xLDI5ICsxLDMwIEBACi1Gcm9tIDZkMjcxOGI5MjU0NTNmOWE2OTE1MDAxZjQ4OTYwNmViOGU0MDg2YzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDU1Y2JlNmY0MGZlMDgzNjM4NWUxYTcyNDFlYzgxMWNiZTk5ZTU4NDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KIERhdGU6IEZyaSwgMzAgRGVjIDIwMTYgMTg6MjQ6NTAgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCA0LzRdIFNldCBsaWJzb2x2IHZhcmlhYmxlcyB3aXRoIHBrZy1jb25maWcgKGNtYWtlJ3Mgb3duIG1vZHVsZQorU3ViamVjdDogW1BBVENIIDQvNV0gU2V0IGxpYnNvbHYgdmFyaWFibGVzIHdpdGggcGtnLWNvbmZpZyAoY21ha2UncyBvd24gbW9kdWxlCiAgZG9lc24ndCB3b3JrIHByb3Blcmx5KS4KIAotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL3JwbS1zb2Z0d2FyZS1tYW5hZ2VtZW50L2xpYmRuZi9wdWxsLzMxMl0KIFNpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorCiAtLS0KICBDTWFrZUxpc3RzLnR4dCB8IDMgKystCiAgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogCiBkaWZmIC0tZ2l0IGEvQ01ha2VMaXN0cy50eHQgYi9DTWFrZUxpc3RzLnR4dAotaW5kZXggOGVkYjYyNy4uYjUzMWRhMSAxMDA2NDQKK2luZGV4IGE3NWRmMDQuLjhiMmFiOWEgMTAwNjQ0CiAtLS0gYS9DTWFrZUxpc3RzLnR4dAogKysrIGIvQ01ha2VMaXN0cy50eHQKLUBAIC0yOCw3ICsyOCw4IEBAIGZpbmRfcGFja2FnZSAoUGtnQ29uZmlnIFJFUVVJUkVEKQorQEAgLTI5LDcgKzI5LDggQEAgZmluZF9wYWNrYWdlIChQa2dDb25maWcgUkVRVUlSRUQpCiAgU0VUIChDTUFLRV9NT0RVTEVfUEFUSCAke0NNQUtFX1NPVVJDRV9ESVJ9L2NtYWtlL21vZHVsZXMpCiAgUEtHX0NIRUNLX01PRFVMRVMoR0xJQiBnaW8tdW5peC0yLjA+PTIuNDQuMCBSRVFVSVJFRCkKICBGSU5EX0xJQlJBUlkgKFJQTURCX0xJQlJBUlkgTkFNRVMgcnBtZGIpCiAtZmluZF9wYWNrYWdlIChMaWJTb2x2IDAuNi4yMSBSRVFVSVJFRCBDT01QT05FTlRTIGV4dCkKICtQS0dfQ0hFQ0tfTU9EVUxFUyAoTElCU09MViBSRVFVSVJFRCBsaWJzb2x2KQogK3NldChMSUJTT0xWX0xJQlJBUlkgJHtMSUJTT0xWX0xJQlJBUklFU30pCi0gcGtnX2NoZWNrX21vZHVsZXMgKENIRUNLIFJFUVVJUkVEIGNoZWNrKQotIHBrZ19jaGVja19tb2R1bGVzIChSRVBPIFJFUVVJUkVEIGxpYnJlcG8pCi0gRklORF9QUk9HUkFNIChWQUxHUklORF9QUk9HUkFNIE5BTUVTIHZhbGdyaW5kIFBBVEggL3Vzci9iaW4gL3Vzci9sb2NhbC9iaW4pCisgaWYgKEVOQUJMRV9SSFNNX1NVUFBPUlQpCisgICAgIHBrZ19jaGVja19tb2R1bGVzIChSSFNNIFJFUVVJUkVEIGxpYnJoc20pCisgICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMgKCR7UkhTTV9JTkNMVURFX0RJUlN9KQogLS0gCiAyLjExLjAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJkbmYvbGliZG5mXzAuOS4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJkbmYvbGliZG5mXzAuOS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZDkzNDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYmRuZi9saWJkbmZfMC45LjMuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IHByb3ZpZGluZyBzaW1wbGlmaWVkIEMgYW5kIFB5dGhvbiBBUEkgdG8gbGlic29sdiIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3JwbS1zb2Z0d2FyZS1tYW5hZ2VtZW50L2xpYmRuZiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpbmRHdGtEb2MuY21ha2UtZHJvcC10aGUtcmVxdWlyZW1lbnQtZm9yLUdUS0RPQ19TQ0EucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1QcmVmaXgtc3lzcm9vdC1wYXRoLXRvLWludHJvc3BlY3Rpb24tdG9vbHMtcGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLVNldC10aGUtbGlicmFyeS1pbnN0YWxsYXRpb24tZGlyZWN0b3J5LWNvcnJlY3RseS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LVNldC1saWJzb2x2LXZhcmlhYmxlcy13aXRoLXBrZy1jb25maWctY21ha2Utcy1vd24tbW8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1HZXQtcGFyYW1ldGVycy1mb3ItYm90aC1saWJzb2x2LWFuZC1saWJzb2x2ZXh0LWxpYmRuLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNSRVYgPSAiMWIxOTk1MGU4MmQ4OGVlYzI4ZDAxYjRlN2MxZGE3MTJjOTQxMjAxZCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworREVQRU5EUyA9ICJnbGliLTIuMCBsaWJzb2x2IGxpYmNoZWNrIGxpYnJlcG8gcnBtIGd0ay1kb2MiCisKK2luaGVyaXQgZ3RrLWRvYyBnb2JqZWN0LWludHJvc3BlY3Rpb24gY21ha2UgcGtnY29uZmlnIGRpc3R1dGlsczMtYmFzZQorCitFWFRSQV9PRUNNQUtFID0gIiAtRFBZVEhPTl9JTlNUQUxMX0RJUj0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSAtRFdJVEhfTUFOPU9GRiAtRFBZVEhPTl9ERVNJUkVEPTMgXAorICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0dJX0RBVEFfRU5BQkxFRCcsICdUcnVlJywgJy1EV0lUSF9HSVI9T04nLCAnLURXSVRIX0dJUj1PRkYnLCBkKX0gXAorICAgICAgICAgICAgICAgICIKK0VYVFJBX09FQ01BS0VfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgLURXSVRIX0dJUj1PRkYiCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiIC1EV0lUSF9HSVI9T0ZGIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGliZG5mL2xpYmRuZl9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYmRuZi9saWJkbmZfZ2l0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjI4NjExLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGliZG5mL2xpYmRuZl9naXQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1TVU1NQVJZID0gIkxpYnJhcnkgcHJvdmlkaW5nIHNpbXBsaWZpZWQgQyBhbmQgUHl0aG9uIEFQSSB0byBsaWJzb2x2IgotTElDRU5TRSA9ICJMR1BMdjIuMSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIgotCi1TUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vcnBtLXNvZnR3YXJlLW1hbmFnZW1lbnQvbGliZG5mIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtRmluZEd0a0RvYy5jbWFrZS1kcm9wLXRoZS1yZXF1aXJlbWVudC1mb3ItR1RLRE9DX1NDQS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAyLVByZWZpeC1zeXNyb290LXBhdGgtdG8taW50cm9zcGVjdGlvbi10b29scy1wYXRoLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDMtU2V0LXRoZS1saWJyYXJ5LWluc3RhbGxhdGlvbi1kaXJlY3RvcnktY29ycmVjdGx5LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDQtU2V0LWxpYnNvbHYtdmFyaWFibGVzLXdpdGgtcGtnLWNvbmZpZy1jbWFrZS1zLW93bi1tby5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLUdldC1wYXJhbWV0ZXJzLWZvci1ib3RoLWxpYnNvbHYtYW5kLWxpYnNvbHZleHQtbGliZG4ucGF0Y2ggXAotICAgICAgICAgICAiCi0KLVBWID0gIjAuMi4zK2dpdCR7U1JDUFZ9IgotU1JDUkVWID0gIjM2NzU0NTYyOWNjMDFhOGU2MjI4OTBkODliZDEzZDA2MmNlNjBkN2IiCi0KLVMgPSAiJHtXT1JLRElSfS9naXQiCi0KLURFUEVORFMgPSAiZ2xpYi0yLjAgbGlic29sdiBsaWJjaGVjayBsaWJyZXBvIHJwbSBndGstZG9jIgotCi1pbmhlcml0IGd0ay1kb2MgZ29iamVjdC1pbnRyb3NwZWN0aW9uIGNtYWtlIHBrZ2NvbmZpZyBkaXN0dXRpbHMzLWJhc2UKLQotRVhUUkFfT0VDTUFLRSA9ICIgLURQWVRIT05fSU5TVEFMTF9ESVI9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gLURXSVRIX01BTj1PRkYgLURQWVRIT05fREVTSVJFRD0zIFwKLSAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdHSV9EQVRBX0VOQUJMRUQnLCAnVHJ1ZScsICctRFdJVEhfR0lSPU9OJywgJy1EV0lUSF9HSVI9T0ZGJywgZCl9IFwKLSAgICAgICAgICAgICAgICAiCi1FWFRSQV9PRUNNQUtFX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC1EV0lUSF9HSVI9T0ZGIgotRVhUUkFfT0VDTUFLRV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiAtRFdJVEhfR0lSPU9GRiIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnJlcG8vbGlicmVwby8wMDAxLUNvcnJlY3RseS1zZXQtdGhlLWxpYnJhcnktaW5zdGFsbGF0aW9uLWRpcmVjdG9yeS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlicmVwby9saWJyZXBvLzAwMDEtQ29ycmVjdGx5LXNldC10aGUtbGlicmFyeS1pbnN0YWxsYXRpb24tZGlyZWN0b3J5LnBhdGNoCmluZGV4IDAxZmVhNDAuLjA4YTU4ZjEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlicmVwby9saWJyZXBvLzAwMDEtQ29ycmVjdGx5LXNldC10aGUtbGlicmFyeS1pbnN0YWxsYXRpb24tZGlyZWN0b3J5LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlicmVwby9saWJyZXBvLzAwMDEtQ29ycmVjdGx5LXNldC10aGUtbGlicmFyeS1pbnN0YWxsYXRpb24tZGlyZWN0b3J5LnBhdGNoCkBAIC0zLDcgKzMsNyBAQAogRGF0ZTogRnJpLCAzMCBEZWMgMjAxNiAxODowNDozNSArMDIwMAogU3ViamVjdDogW1BBVENIIDEvNF0gQ29ycmVjdGx5IHNldCB0aGUgbGlicmFyeSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5CiAKLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vZ2l0aHViLmNvbS9ycG0tc29mdHdhcmUtbWFuYWdlbWVudC9saWJyZXBvL3B1bGwvMTEwXQogU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CiAtLS0KICBsaWJyZXBvL0NNYWtlTGlzdHMudHh0IHwgMyArKy0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlicmVwby9saWJyZXBvLzAwMDMtdGVzdHMtZml4LWEtcmFjZS13aGVuLWRlbGV0aW5nLXRlbXBvcmFyeS1kaXJlY3Rvcmllcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlicmVwby9saWJyZXBvLzAwMDMtdGVzdHMtZml4LWEtcmFjZS13aGVuLWRlbGV0aW5nLXRlbXBvcmFyeS1kaXJlY3Rvcmllcy5wYXRjaAppbmRleCAwZDJmYWU0Li44OWNhNjBlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnJlcG8vbGlicmVwby8wMDAzLXRlc3RzLWZpeC1hLXJhY2Utd2hlbi1kZWxldGluZy10ZW1wb3JhcnktZGlyZWN0b3JpZXMucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJyZXBvL2xpYnJlcG8vMDAwMy10ZXN0cy1maXgtYS1yYWNlLXdoZW4tZGVsZXRpbmctdGVtcG9yYXJ5LWRpcmVjdG9yaWVzLnBhdGNoCkBAIC0zLDcgKzMsNyBAQAogRGF0ZTogRnJpLCAzMCBEZWMgMjAxNiAxODowNjoyNCArMDIwMAogU3ViamVjdDogW1BBVENIIDMvNF0gdGVzdHM6IGZpeCBhIHJhY2Ugd2hlbiBkZWxldGluZyB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMKIAotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL3JwbS1zb2Z0d2FyZS1tYW5hZ2VtZW50L2xpYnJlcG8vcHVsbC8xMTBdCiBTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KIC0tLQogIHRlc3RzL3B5dGhvbi90ZXN0cy90ZXN0X3l1bV9yZXBvX2Rvd25sb2FkaW5nLnB5IHwgMiArLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJyZXBvL2xpYnJlcG8vMDAwNC1TZXQtZ3BnbWUtdmFyaWFibGVzLXdpdGgtcGtnLWNvbmZpZy1ub3Qtd2l0aC1jbWFrZS1tLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJyZXBvL2xpYnJlcG8vMDAwNC1TZXQtZ3BnbWUtdmFyaWFibGVzLXdpdGgtcGtnLWNvbmZpZy1ub3Qtd2l0aC1jbWFrZS1tLnBhdGNoCmluZGV4IDY2NjViMzEuLmY3ZDdhYjMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlicmVwby9saWJyZXBvLzAwMDQtU2V0LWdwZ21lLXZhcmlhYmxlcy13aXRoLXBrZy1jb25maWctbm90LXdpdGgtY21ha2UtbS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnJlcG8vbGlicmVwby8wMDA0LVNldC1ncGdtZS12YXJpYWJsZXMtd2l0aC1wa2ctY29uZmlnLW5vdC13aXRoLWNtYWtlLW0ucGF0Y2gKQEAgLTQsNyArNCw3IEBACiBTdWJqZWN0OiBbUEFUQ0ggNC80XSBTZXQgZ3BnbWUgdmFyaWFibGVzIHdpdGggcGtnLWNvbmZpZywgbm90IHdpdGggY21ha2UKICBtb2R1bGUgKHdoaWNoIGRvZXNuJ3Qgd29yayBwcm9wZXJseSkKIAotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2dwZ21lIHVwc3RyZWFtIGRvZXMgbm90IGhhdmUgcGtnLWNvbmZpZyBzdXBwb3J0IGFuZCBpcyBub3QgaW50ZXJlc3RlZCBpbiBpdF0KIFNpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgogLS0tCiAgQ01ha2VMaXN0cy50eHQgfCAzICsrLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJyZXBvL2xpYnJlcG8vMDAwNS1GaXgtdHlwby1jb3JyZWN0LUxST19TU0xWRVJJRllIT1NULXdpdGgtQ1VSTE9QVF9TU0xfLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJyZXBvL2xpYnJlcG8vMDAwNS1GaXgtdHlwby1jb3JyZWN0LUxST19TU0xWRVJJRllIT1NULXdpdGgtQ1VSTE9QVF9TU0xfLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYzdkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnJlcG8vbGlicmVwby8wMDA1LUZpeC10eXBvLWNvcnJlY3QtTFJPX1NTTFZFUklGWUhPU1Qtd2l0aC1DVVJMT1BUX1NTTF8ucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSBhNGJiYmNjY2U2ZWRjMWEyZDFiZDQ3NTUwNmUyOTc1ZmQ3Njk2Yzg4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCA4IEp1biAyMDE3IDE2OjMxOjMwICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCB0eXBvOiBjb3JyZWN0IExST19TU0xWRVJJRllIT1NUIHdpdGgKKyBDVVJMT1BUX1NTTF9WRVJJRllIT1NUCisKK0luIGNvbW1pdCA1MWQzMmM2Y2Q4OGJhMDEzOWMzMjc5MzE4M2ZkNmEyMzZjMWVmNDU2CistLS0KK0F1dGhvcjogVG9tYXMgTWxjb2NoIDx0bWxjb2NoQHJlZGhhdC5jb20+CitEYXRlOiAgIE1vbiBNYXkgNSAxNDozMTozNSAyMDE0ICswMjAwCisKKyAgICBBZGQgTFJPX1NTTFZFUklGWVBFRVIgYW5kIExST19TU0xWRVJJRllIT1NUIG9wdGlvbnMgKFJoQnVnOiAxMDkzMDE0KQorLS0tCisKK0l0IGluY29ycmVjdGx5IHNldG9wdCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSIGZvciBMUk9fU1NMVkVSSUZZSE9TVC4KK1VzZSBDVVJMT1BUX1NTTF9WRVJJRllIT1NUIHRvIGNvcnJlY3QuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYnJlcG8vaGFuZGxlLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWJyZXBvL2hhbmRsZS5jIGIvbGlicmVwby9oYW5kbGUuYworaW5kZXggY2NlYTc5Yi4uZmYzOWRiNCAxMDA2NDQKKy0tLSBhL2xpYnJlcG8vaGFuZGxlLmMKKysrKyBiL2xpYnJlcG8vaGFuZGxlLmMKK0BAIC02MjksNyArNjI5LDcgQEAgbHJfaGFuZGxlX3NldG9wdChMckhhbmRsZSAqaGFuZGxlLAorIAorICAgICBjYXNlIExST19TU0xWRVJJRllIT1NUOgorICAgICAgICAgaGFuZGxlLT5zc2x2ZXJpZnlob3N0ID0gdmFfYXJnKGFyZywgbG9uZykgPyAyIDogMDsKKy0gICAgICAgIGNfcmMgPSBjdXJsX2Vhc3lfc2V0b3B0KGNfaCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgaGFuZGxlLT5zc2x2ZXJpZnlob3N0KTsKKysgICAgICAgIGNfcmMgPSBjdXJsX2Vhc3lfc2V0b3B0KGNfaCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgaGFuZGxlLT5zc2x2ZXJpZnlob3N0KTsKKyAgICAgICAgIGJyZWFrOworIAorICAgICBjYXNlIExST19TU0xDTElFTlRDRVJUOgorLS0gCisyLjcuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnJlcG8vbGlicmVwb19naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnJlcG8vbGlicmVwb19naXQuYmIKaW5kZXggMmYxOTRmMS4uMzIzOGIxNCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJyZXBvL2xpYnJlcG9fZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlicmVwby9saWJyZXBvX2dpdC5iYgpAQCAtNyw2ICs3LDcgQEAKICAgICAgICAgICAgZmlsZTovLzAwMDItRG8tbm90LXRyeS10by1vYnRhaW4tUFlUSE9OX0lOU1RBTExfRElSLWJ5LXJ1bm5pbmctcC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAzLXRlc3RzLWZpeC1hLXJhY2Utd2hlbi1kZWxldGluZy10ZW1wb3JhcnktZGlyZWN0b3JpZXMucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwNC1TZXQtZ3BnbWUtdmFyaWFibGVzLXdpdGgtcGtnLWNvbmZpZy1ub3Qtd2l0aC1jbWFrZS1tLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtRml4LXR5cG8tY29ycmVjdC1MUk9fU1NMVkVSSUZZSE9TVC13aXRoLUNVUkxPUFRfU1NMXy5wYXRjaCBcCiAgICAgICAgICAgICIKIAogUFYgPSAiMS43LjIwK2dpdCR7U1JDUFZ9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvbm9oYXJkY29kZXBhdGhzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvbm9oYXJkY29kZXBhdGhzLnBhdGNoCmluZGV4IGIyMjM5ZmIuLmZjYmNlNzIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL25vaGFyZGNvZGVwYXRocy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9ub2hhcmRjb2RlcGF0aHMucGF0Y2gKQEAgLTQsNiArNCw4IEBACiAKIFJQIDIwMTUvMi8zCiAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCiBJbmRleDogbGlidG9vbC0yLjQuNS9saWJ0b29saXplLmluCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAtLS0gbGlidG9vbC0yLjQuNS5vcmlnL2xpYnRvb2xpemUuaW4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sXzIuNC42LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2xfMi40LjYuYmIKaW5kZXggMDZhYmIwNS4uYjAyNjIwYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2xfMi40LjYuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2xfMi40LjYuYmIKQEAgLTE1LDYgKzE1LDcgQEAKIAogZG9faW5zdGFsbF9hcHBlbmQgKCkgewogICAgICAgICBzZWQgLWUgJ3NALS1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH1AQGcnIFwKKyAgICAgICAgICAgIC1lICJzQCR7REVCVUdfUFJFRklYX01BUH1AQGciIFwKICAgICAgICAgICAgIC1lICdzQCR7U1RBR0lOR19ESVJfSE9TVH1AQGcnIFwKICAgICAgICAgICAgIC1lICdzQCR7U1RBR0lOR19ESVJfTkFUSVZFfUBAZycgXAogICAgICAgICAgICAgLWUgJ3NAXlwoc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSJcKS4qQFwxJHtsaWJkaXJ9ICR7YmFzZV9saWJkaXJ9IkAnIFwKQEAgLTIyLDUgKzIzLDYgQEAKICAgICAgICAgICAgIC1lICdzQF5cKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0iXCkuKkBcMSR7bGliZGlyfSAke2Jhc2VfbGliZGlyfSJAJyBcCiAgICAgICAgICAgICAtZSAnc0BeXChwcmVkZXBfb2JqZWN0cz0iXCkuKkBcMSJAJyBcCiAgICAgICAgICAgICAtZSAnc0BeXChwb3N0ZGVwX29iamVjdHM9IlwpLipAXDEiQCcgXAorICAgICAgICAgICAgLWUgInNAJHtIT1NUVE9PTFNfRElSfS9AQGciIFwKICAgICAgICAgICAgIC1pICR7RH0ke2JpbmRpcn0vbGlidG9vbAogfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9sbHZtL2xsdm0vMDAwMS1sbHZtLVRhcmdldExpYnJhcnlJbmZvLVVuZGVmaW5lLWxpYmMtZnVuY3Rpb25zLWlmLXRoLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9sbHZtL2xsdm0vMDAwMS1sbHZtLVRhcmdldExpYnJhcnlJbmZvLVVuZGVmaW5lLWxpYmMtZnVuY3Rpb25zLWlmLXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNTE3OTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xsdm0vbGx2bS8wMDAxLWxsdm0tVGFyZ2V0TGlicmFyeUluZm8tVW5kZWZpbmUtbGliYy1mdW5jdGlvbnMtaWYtdGgucGF0Y2gKQEAgLTAsMCArMSw5MyBAQAorRnJvbSAyODI5M2U0OGNmMWE1MjAwNGM2YTc4ZGU0NDg3MTg0NDFmOWUwNWY5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMjEgTWF5IDIwMTYgMDA6MzM6MjAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIGxsdm06IFRhcmdldExpYnJhcnlJbmZvOiBVbmRlZmluZSBsaWJjIGZ1bmN0aW9ucyBpZiB0aGV5CisgYXJlIG1hY3JvcworCittdXNsIGRlZmluZXMgc29tZSBmdW5jdGlvbnMgYXMgbWFjcm9zIGFuZCBub3QgaW5saW5lIGZ1bmN0aW9ucworaWYgdGhpcyBpcyB0aGUgY2FzZSB0aGVuIG1ha2Ugc3VyZSB0byB1bmRlZmluZSB0aGVtCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgaW5jbHVkZS9sbHZtL0FuYWx5c2lzL1RhcmdldExpYnJhcnlJbmZvLmRlZiB8IDIxICsrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9pbmNsdWRlL2xsdm0vQW5hbHlzaXMvVGFyZ2V0TGlicmFyeUluZm8uZGVmIGIvaW5jbHVkZS9sbHZtL0FuYWx5c2lzL1RhcmdldExpYnJhcnlJbmZvLmRlZgoraW5kZXggOWNiZTkxN2MxNDYuLmFmZjg0MTljZjU0IDEwMDY0NAorLS0tIGEvaW5jbHVkZS9sbHZtL0FuYWx5c2lzL1RhcmdldExpYnJhcnlJbmZvLmRlZgorKysrIGIvaW5jbHVkZS9sbHZtL0FuYWx5c2lzL1RhcmdldExpYnJhcnlJbmZvLmRlZgorQEAgLTY1Niw2ICs2NTYsOSBAQCBUTElfREVGSU5FX1NUUklOR19JTlRFUk5BTCgiZm1vZGwiKQorIFRMSV9ERUZJTkVfRU5VTV9JTlRFUk5BTChmb3BlbikKKyBUTElfREVGSU5FX1NUUklOR19JTlRFUk5BTCgiZm9wZW4iKQorIC8vLyBGSUxFICpmb3BlbjY0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpvcGVudHlwZSkKKysjaWZkZWYgZm9wZW42NAorKyN1bmRlZiBmb3BlbjY0CisrI2VuZGlmCisgVExJX0RFRklORV9FTlVNX0lOVEVSTkFMKGZvcGVuNjQpCisgVExJX0RFRklORV9TVFJJTkdfSU5URVJOQUwoImZvcGVuNjQiKQorIC8vLyBpbnQgZnByaW50ZihGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKK0BAIC02OTEsNiArNjk0LDkgQEAgVExJX0RFRklORV9TVFJJTkdfSU5URVJOQUwoImZzZWVrIikKKyAvLy8gaW50IGZzZWVrbyhGSUxFICpzdHJlYW0sIG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSk7CisgVExJX0RFRklORV9FTlVNX0lOVEVSTkFMKGZzZWVrbykKKyBUTElfREVGSU5FX1NUUklOR19JTlRFUk5BTCgiZnNlZWtvIikKKysjaWZkZWYgZnNlZWtvNjQKKysjdW5kZWYgZnNlZWtvNjQKKysjZW5kaWYKKyAvLy8gaW50IGZzZWVrbzY0KEZJTEUgKnN0cmVhbSwgb2ZmNjRfdCBvZmZzZXQsIGludCB3aGVuY2UpCisgVExJX0RFRklORV9FTlVNX0lOVEVSTkFMKGZzZWVrbzY0KQorIFRMSV9ERUZJTkVfU1RSSU5HX0lOVEVSTkFMKCJmc2Vla282NCIpCitAQCAtNzAxLDYgKzcwNyw5IEBAIFRMSV9ERUZJTkVfU1RSSU5HX0lOVEVSTkFMKCJmc2V0cG9zIikKKyBUTElfREVGSU5FX0VOVU1fSU5URVJOQUwoZnN0YXQpCisgVExJX0RFRklORV9TVFJJTkdfSU5URVJOQUwoImZzdGF0IikKKyAvLy8gaW50IGZzdGF0NjQoaW50IGZpbGVkZXMsIHN0cnVjdCBzdGF0NjQgKmJ1ZikKKysjaWZkZWYgZnN0YXQ2NAorKyN1bmRlZiBmc3RhdDY0CisrI2VuZGlmCisgVExJX0RFRklORV9FTlVNX0lOVEVSTkFMKGZzdGF0NjQpCisgVExJX0RFRklORV9TVFJJTkdfSU5URVJOQUwoImZzdGF0NjQiKQorIC8vLyBpbnQgZnN0YXR2ZnMoaW50IGZpbGRlcywgc3RydWN0IHN0YXR2ZnMgKmJ1Zik7CitAQCAtNzE2LDYgKzcyNSw5IEBAIFRMSV9ERUZJTkVfU1RSSU5HX0lOVEVSTkFMKCJmdGVsbCIpCisgVExJX0RFRklORV9FTlVNX0lOVEVSTkFMKGZ0ZWxsbykKKyBUTElfREVGSU5FX1NUUklOR19JTlRFUk5BTCgiZnRlbGxvIikKKyAvLy8gb2ZmNjRfdCBmdGVsbG82NChGSUxFICpzdHJlYW0pCisrI2lmZGVmIGZ0ZWxsbzY0CisrI3VuZGVmIGZ0ZWxsbzY0CisrI2VuZGlmCisgVExJX0RFRklORV9FTlVNX0lOVEVSTkFMKGZ0ZWxsbzY0KQorIFRMSV9ERUZJTkVfU1RSSU5HX0lOVEVSTkFMKCJmdGVsbG82NCIpCisgLy8vIGludCBmdHJ5bG9ja2ZpbGUoRklMRSAqZmlsZSk7CitAQCAtODM2LDYgKzg0OCw5IEBAIFRMSV9ERUZJTkVfU1RSSU5HX0lOVEVSTkFMKCJsb2dsIikKKyBUTElfREVGSU5FX0VOVU1fSU5URVJOQUwobHN0YXQpCisgVExJX0RFRklORV9TVFJJTkdfSU5URVJOQUwoImxzdGF0IikKKyAvLy8gaW50IGxzdGF0NjQoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0YXQ2NCAqYnVmKTsKKysjaWZkZWYgbHN0YXQ2NAorKyN1bmRlZiBsc3RhdDY0CisrI2VuZGlmCisgVExJX0RFRklORV9FTlVNX0lOVEVSTkFMKGxzdGF0NjQpCisgVExJX0RFRklORV9TVFJJTkdfSU5URVJOQUwoImxzdGF0NjQiKQorIC8vLyB2b2lkICptYWxsb2Moc2l6ZV90IHNpemUpOworQEAgLTEwNTUsNiArMTA3MCw5IEBAIFRMSV9ERUZJTkVfU1RSSU5HX0lOVEVSTkFMKCJzc2NhbmYiKQorIFRMSV9ERUZJTkVfRU5VTV9JTlRFUk5BTChzdGF0KQorIFRMSV9ERUZJTkVfU1RSSU5HX0lOVEVSTkFMKCJzdGF0IikKKyAvLy8gaW50IHN0YXQ2NChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RhdDY0ICpidWYpOworKyNpZmRlZiBzdGF0NjQKKysjdW5kZWYgc3RhdDY0CisrI2VuZGlmCisgVExJX0RFRklORV9FTlVNX0lOVEVSTkFMKHN0YXQ2NCkKKyBUTElfREVGSU5FX1NUUklOR19JTlRFUk5BTCgic3RhdDY0IikKKyAvLy8gaW50IHN0YXR2ZnMoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0YXR2ZnMgKmJ1Zik7CitAQCAtMTE4NCw2ICsxMjAyLDkgQEAgVExJX0RFRklORV9TVFJJTkdfSU5URVJOQUwoInRpbWVzIikKKyBUTElfREVGSU5FX0VOVU1fSU5URVJOQUwodG1wZmlsZSkKKyBUTElfREVGSU5FX1NUUklOR19JTlRFUk5BTCgidG1wZmlsZSIpCisgLy8vIEZJTEUgKnRtcGZpbGU2NCh2b2lkKQorKyNpZmRlZiB0bXBmaWxlNjQKKysjdW5kZWYgdG1wZmlsZTY0CisrI2VuZGlmCisgVExJX0RFRklORV9FTlVNX0lOVEVSTkFMKHRtcGZpbGU2NCkKKyBUTElfREVGSU5FX1NUUklOR19JTlRFUk5BTCgidG1wZmlsZTY0IikKKyAvLy8gaW50IHRvYXNjaWkoaW50IGMpOworLS0gCisyLjEzLjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9sbHZtL2xsdm0vMDAwMi1sbHZtLWFsbG93LWVudi1vdmVycmlkZS1vZi1leGUtcGF0aC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGx2bS9sbHZtLzAwMDItbGx2bS1hbGxvdy1lbnYtb3ZlcnJpZGUtb2YtZXhlLXBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMyYmQ3MgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGx2bS9sbHZtLzAwMDItbGx2bS1hbGxvdy1lbnYtb3ZlcnJpZGUtb2YtZXhlLXBhdGgucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSBkNzc2NDg3YmFjMTc2NTA3MDQ2MTQyNDhkMTlkMWU2YjM1Nzc1MDAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFydGluIEtlbGx5IDxta2VsbHlAeGV2by5jb20+CitEYXRlOiBGcmksIDE5IE1heSAyMDE3IDAwOjIyOjU3IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBsbHZtOiBhbGxvdyBlbnYgb3ZlcnJpZGUgb2YgZXhlIHBhdGgKKworV2hlbiB1c2luZyBhIG5hdGl2ZSBsbHZtLWNvbmZpZyBmcm9tIGluc2lkZSBhIHN5c3Jvb3QsIHdlIG5lZWQgbGx2bS1jb25maWcgdG8KK3JldHVybiB0aGUgbGlicmFyaWVzLCBpbmNsdWRlIGRpcmVjdG9yaWVzLCBldGMuIGZyb20gaW5zaWRlIHRoZSBzeXNyb290IHJhdGhlcgordGhhbiBmcm9tIHRoZSBuYXRpdmUgc3lzcm9vdC4gVGh1cyBwcm92aWRlIGFuIGVudiBvdmVycmlkZSBmb3IgY2FsbGluZworbGx2bS1jb25maWcgZnJvbSBhIHRhcmdldCBzeXNyb290LgorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gS2VsbHkgPG1rZWxseUB4ZXZvLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgdG9vbHMvbGx2bS1jb25maWcvbGx2bS1jb25maWcuY3BwIHwgNyArKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvdG9vbHMvbGx2bS1jb25maWcvbGx2bS1jb25maWcuY3BwIGIvdG9vbHMvbGx2bS1jb25maWcvbGx2bS1jb25maWcuY3BwCitpbmRleCAwOGIwOTZhZmIwNS4uZDhkNzc0Mjc0NGUgMTAwNjQ0CistLS0gYS90b29scy9sbHZtLWNvbmZpZy9sbHZtLWNvbmZpZy5jcHAKKysrKyBiL3Rvb2xzL2xsdm0tY29uZmlnL2xsdm0tY29uZmlnLmNwcAorQEAgLTIyNSw2ICsyMjUsMTMgQEAgVHlwaWNhbCBjb21wb25lbnRzOlxuXAorIAorIC8vLyBcYnJpZWYgQ29tcHV0ZSB0aGUgcGF0aCB0byB0aGUgbWFpbiBleGVjdXRhYmxlLgorIHN0ZDo6c3RyaW5nIEdldEV4ZWN1dGFibGVQYXRoKGNvbnN0IGNoYXIgKkFyZ3YwKSB7CisrICAvLyBIYWNrIGZvciBZb2N0bzogd2UgbmVlZCB0byBvdmVycmlkZSB0aGUgcm9vdCBwYXRoIHdoZW4gd2UgYXJlIHVzaW5nCisrICAvLyBsbHZtLWNvbmZpZyBmcm9tIHdpdGhpbiBhIHRhcmdldCBzeXNyb290LgorKyAgY29uc3QgY2hhciAqU3lzcm9vdCA9IHN0ZDo6Z2V0ZW52KCJZT0NUT19BTFRFUk5BVEVfRVhFX1BBVEgiKTsKKysgIGlmIChTeXNyb290ICE9IG51bGxwdHIpIHsKKysgICAgcmV0dXJuIFN5c3Jvb3Q7CisrICB9CisrCisgICAvLyBUaGlzIGp1c3QgbmVlZHMgdG8gYmUgc29tZSBzeW1ib2wgaW4gdGhlIGJpbmFyeTsgQysrIGRvZXNuJ3QKKyAgIC8vIGFsbG93IHRha2luZyB0aGUgYWRkcmVzcyBvZiA6Om1haW4gaG93ZXZlci4KKyAgIHZvaWQgKlAgPSAodm9pZCAqKShpbnRwdHJfdClHZXRFeGVjdXRhYmxlUGF0aDsKKy0tIAorMi4xMy4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGx2bS9sbHZtX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGx2bS9sbHZtX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDZmYTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9sbHZtL2xsdm1fZ2l0LmJiCkBAIC0wLDAgKzEsMTg1IEBACisjIENvcHlyaWdodCAoQykgMjAxNyBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCBmb3IgdGhlIHRlcm1zKQorCitERVNDUklQVElPTiA9ICJUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9sbHZtLm9yZyIKK0xJQ0VOU0UgPSAiTkNTQSIKK1NFQ1RJT04gPSAiZGV2ZWwiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UuVFhUO21kNT1lODI1ZTAxN2VkYzM1Y2ZkNThlMjYxMTZlNTI1MTc3MSIKKworREVQRU5EUyA9ICJsaWJmZmkgbGlieG1sMi1uYXRpdmUgemxpYiBuaW5qYS1uYXRpdmUgbGx2bS1uYXRpdmUiCisKK1JERVBFTkRTXyR7UE59X2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIG5jdXJzZXMtdGVybWluZm8iCisKK2luaGVyaXQgcGVybG5hdGl2ZSBweXRob25uYXRpdmUgY21ha2UgcGtnY29uZmlnCisKK1BST1ZJREVTICs9ICJsbHZtJHtQVn0iCisKK0xMVk1fUkVMRUFTRSA9ICIke1BWfSIKK0xMVk1fRElSID0gImxsdm0ke0xMVk1fUkVMRUFTRX0iCisKK1NSQ1JFViA9ICI5YTVjMzMzMzg4Y2JiNTRhMGNlM2E2N2M0ZjUzOWY1ZTU5MGEwODliIgorUFYgPSAiNS4wIgorUEFUQ0hfVkVSU0lPTiA9ICIwIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2xsdm0tbWlycm9yL2xsdm0uZ2l0O2JyYW5jaD1yZWxlYXNlXzUwO3Byb3RvY29sPWh0dHAgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1sbHZtLVRhcmdldExpYnJhcnlJbmZvLVVuZGVmaW5lLWxpYmMtZnVuY3Rpb25zLWlmLXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItbGx2bS1hbGxvdy1lbnYtb3ZlcnJpZGUtb2YtZXhlLXBhdGgucGF0Y2ggXAorICAgICAgICAgICIKK1VQU1RSRUFNX1ZFUlNJT05fVU5LTk9XTiA9ICIxIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworTExWTV9JTlNUQUxMX0RJUiA9ICIke1dPUktESVJ9L2xsdm0taW5zdGFsbCIKK2RlZiBnZXRfbGx2bV9hcmNoKGJiLCBkLCBhcmNoX3Zhcik6CisgICAgaW1wb3J0IHJlCisgICAgYSA9IGQuZ2V0VmFyKGFyY2hfdmFyKQorICAgIGlmICAgcmUubWF0Y2goJyhpLjg2fGF0aGxvbnx4ODYuNjQpJCcsIGEpOiAgICAgICAgIHJldHVybiAnWDg2JworICAgIGVsaWYgcmUubWF0Y2goJ2FybSQnLCBhKTogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnQVJNJworICAgIGVsaWYgcmUubWF0Y2goJ2FybWViJCcsIGEpOiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnQVJNJworICAgIGVsaWYgcmUubWF0Y2goJ2FhcmNoNjQkJywgYSk6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnQUFyY2g2NCcKKyAgICBlbGlmIHJlLm1hdGNoKCdhYXJjaDY0X2JlJCcsIGEpOiAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0FBcmNoNjQnCisgICAgZWxpZiByZS5tYXRjaCgnbWlwcyhpc2F8KSgzMnw2NHwpKHI2fCkoZWx8KSQnLCBhKTogcmV0dXJuICdNaXBzJworICAgIGVsaWYgcmUubWF0Y2goJ3AocGN8b3dlcnBjKSh8NjQpJywgYSk6ICAgICAgICAgICAgIHJldHVybiAnUG93ZXJQQycKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUmVjaXBlKCJDYW5ub3QgbWFwICclcycgdG8gYSBzdXBwb3J0ZWQgTExWTSBhcmNoaXRlY3R1cmUiICUgYSkKKworZGVmIGdldF9sbHZtX3RhcmdldF9hcmNoKGJiLCBkKToKKyAgICByZXR1cm4gZ2V0X2xsdm1fYXJjaChiYiwgZCwgJ1RBUkdFVF9BUkNIJykKKyMKKyMgRGVmYXVsdCB0byBidWlsZCBhbGwgT0UtQ29yZSBzdXBwb3J0ZWQgdGFyZ2V0IGFyY2hlcyAodXNlciBvdmVycmlkYWJsZSkuCisjCitMTFZNX1RBUkdFVFMgPz0gIiR7QGdldF9sbHZtX3RhcmdldF9hcmNoKGJiLCBkKX0iCitMTFZNX1RBUkdFVFNfcHJlcGVuZF94ODYgPSAiQU1ER1BVOyIKK0xMVk1fVEFSR0VUU19wcmVwZW5kX3g4Ni02NCA9ICJBTURHUFU7IgorCitBUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY1ID0gImFybSIKK0FSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjR0ID0gImFybSIKKworRVhUUkFfT0VDTUFLRSArPSAiLURMTFZNX0VOQUJMRV9BU1NFUlRJT05TPU9GRiBcCisgICAgICAgICAgICAgICAgICAtRExMVk1fRU5BQkxFX0VYUEVOU0lWRV9DSEVDS1M9T0ZGIFwKKyAgICAgICAgICAgICAgICAgIC1ETExWTV9FTkFCTEVfUElDPU9OIFwKKyAgICAgICAgICAgICAgICAgIC1ETExWTV9CSU5ESU5HU19MSVNUPScnIFwKKyAgICAgICAgICAgICAgICAgIC1ETExWTV9MSU5LX0xMVk1fRFlMSUI9T04gXAorICAgICAgICAgICAgICAgICAgLURMTFZNX0VOQUJMRV9GRkk9T04gXAorICAgICAgICAgICAgICAgICAgLURGRklfSU5DTFVERV9ESVI9JChwa2ctY29uZmlnIC0tdmFyaWFibGU9aW5jbHVkZWRpciBsaWJmZmkpIFwKKyAgICAgICAgICAgICAgICAgIC1ETExWTV9PUFRJTUlaRURfVEFCTEVHRU49T04gXAorICAgICAgICAgICAgICAgICAgLURMTFZNX1RBUkdFVFNfVE9fQlVJTEQ9IiR7TExWTV9UQVJHRVRTfSIgXAorICAgICAgICAgICAgICAgICAgLUcgTmluamEiCisKK0VYVFJBX09FQ01BS0VfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICJcCisgICAgICAgICAgICAgICAgICAtRENNQUtFX0NST1NTQ09NUElMSU5HOkJPT0w9T04gXAorICAgICAgICAgICAgICAgICAgLURMTFZNX1RBQkxFR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9sbHZtLXRibGdlbiR7UFZ9IFwKKyAgICAgICAgICAgICAgICAgIgorCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiXAorICAgICAgICAgICAgICAgICAgLURDTUFLRV9DUk9TU0NPTVBJTElORzpCT09MPU9OIFwKKyAgICAgICAgICAgICAgICAgIC1ETExWTV9UQUJMRUdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vbGx2bS10YmxnZW4ke1BWfSBcCisgICAgICAgICAgICAgICAgICIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisjIEZpeCBwYXRocyBpbiBsbHZtLWNvbmZpZworCXNlZCAtaSAic3xzeXM6OnBhdGg6OnBhcmVudF9wYXRoKEN1cnJlbnRQYXRoKSlcLnN0cigpfHN5czo6cGF0aDo6cGFyZW50X3BhdGgoc3lzOjpwYXRoOjpwYXJlbnRfcGF0aChDdXJyZW50UGF0aCkpKS5zdHIoKXxnIiAke1N9L3Rvb2xzL2xsdm0tY29uZmlnL2xsdm0tY29uZmlnLmNwcAorCXNlZCAtcmkgInMjLyhiaW58aW5jbHVkZXxsaWIpKC8/XCIpIy9cMS8ke0xMVk1fRElSfVwyI2ciICR7U30vdG9vbHMvbGx2bS1jb25maWcvbGx2bS1jb25maWcuY3BwCisJc2VkIC1yaSAicyNsaWIvJHtMTFZNX0RJUn0jJHtiYXNlbGlifS8ke0xMVk1fRElSfSNnIiAke1N9L3Rvb2xzL2xsdm0tY29uZmlnL2xsdm0tY29uZmlnLmNwcAorfQorCitkb19jb21waWxlKCkgeworCU5JTkpBX1NUQVRVUz0iWyVwXSAiIG5pbmphIC12ICR7UEFSQUxMRUxfTUFLRX0KK30KKworZG9fY29tcGlsZV9jbGFzcy1uYXRpdmUoKSB7CisJTklOSkFfU1RBVFVTPSJbJXBdICIgbmluamEgLXYgJHtQQVJBTExFTF9NQUtFfSBsbHZtLWNvbmZpZyBsbHZtLXRibGdlbgorfQorCitkb19pbnN0YWxsKCkgeworCU5JTkpBX1NUQVRVUz0iWyVwXSAiIERFU1RESVI9JHtMTFZNX0lOU1RBTExfRElSfSBuaW5qYSAtdiBpbnN0YWxsCisJaW5zdGFsbCAtRCAtbSAwNzU1ICR7Qn0vYmluL2xsdm0tY29uZmlnICR7RH0ke2xpYmRpcn0vJHtMTFZNX0RJUn0vbGx2bS1jb25maWcKKworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8ke0xMVk1fRElSfQorCWNwIC1yICR7TExWTV9JTlNUQUxMX0RJUn0ke2JpbmRpcn0vKiAke0R9JHtiaW5kaXJ9LyR7TExWTV9ESVJ9LworCisJaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfS8ke0xMVk1fRElSfQorCWNwIC1yICR7TExWTV9JTlNUQUxMX0RJUn0ke2luY2x1ZGVkaXJ9LyogJHtEfSR7aW5jbHVkZWRpcn0vJHtMTFZNX0RJUn0vCisKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vJHtMTFZNX0RJUn0KKworCSMgVGhlIExMVk0gc291cmNlcyBoYXZlICIvbGliIiBlbWJlZGRlZCBhbmQgc28gd2UgY2Fubm90IGNvbXBsZXRlbHkgcmVseSBvbiB0aGUgJHtsaWJkaXJ9IHZhcmlhYmxlCisJaWYgWyAtZCAke0xMVk1fSU5TVEFMTF9ESVJ9JHtsaWJkaXJ9LyBdOyB0aGVuCisJCWNwIC1yICR7TExWTV9JTlNUQUxMX0RJUn0ke2xpYmRpcn0vKiAke0R9JHtsaWJkaXJ9LyR7TExWTV9ESVJ9LworCWVsaWYgWyAtZCAke0xMVk1fSU5TVEFMTF9ESVJ9JHtwcmVmaXh9L2xpYiBdOyB0aGVuCisJCWNwIC1yICR7TExWTV9JTlNUQUxMX0RJUn0ke3ByZWZpeH0vbGliLyogJHtEfSR7bGliZGlyfS8ke0xMVk1fRElSfS8KKwllbGlmIFsgLWQgJHtMTFZNX0lOU1RBTExfRElSfSR7cHJlZml4fS9saWI2NCBdOyB0aGVuCisJCWNwIC1yICR7TExWTV9JTlNUQUxMX0RJUn0ke3ByZWZpeH0vbGliNjQvKiAke0R9JHtsaWJkaXJ9LyR7TExWTV9ESVJ9LworCWZpCisKKwkjIFJlbW92ZSB1bm5lY2Vzc2FyeSBjbWFrZSBmaWxlcworCXJtIC1yZiAke0R9JHtsaWJkaXJ9LyR7TExWTV9ESVJ9L2NtYWtlCisKKwlsbiAtcyAke0xMVk1fRElSfS9saWJMTFZNLSR7UFZ9JHtTT0xJQlNERVZ9ICR7RH0ke2xpYmRpcn0vbGliTExWTS0ke1BWfSR7U09MSUJTREVWfQorCisJIyBXZSdsbCBoYXZlIHRvIGRlbGV0ZSB0aGUgbGliTExWTS5zbyBkdWUgdG8gbXVsdGlwbGUgcmVhc29ucy4uLgorCXJtIC1yZiAke0R9JHtsaWJkaXJ9LyR7TExWTV9ESVJ9L2xpYkxMVk0uc28KKwlybSAtcmYgJHtEfSR7bGliZGlyfS8ke0xMVk1fRElSfS9saWJMVE8uc28KK30KK2RvX2luc3RhbGxfY2xhc3MtbmF0aXZlKCkgeworCWluc3RhbGwgLUQgLW0gMDc1NSAke0J9L2Jpbi9sbHZtLXRibGdlbiAke0R9JHtiaW5kaXJ9L2xsdm0tdGJsZ2VuJHtQVn0KKwlpbnN0YWxsIC1EIC1tIDA3NTUgJHtCfS9iaW4vbGx2bS1jb25maWcgJHtEfSR7YmluZGlyfS9sbHZtLWNvbmZpZyR7UFZ9CisJaW5zdGFsbCAtRCAtbSAwNzU1ICR7Qn0vbGliL2xpYkxMVk0tJHtQVn0uc28gJHtEfSR7bGliZGlyfS9saWJMTFZNLSR7UFZ9LnNvCit9CisKK1BBQ0tBR0VTICs9ICIke1BOfS1idWdwb2ludHBhc3NlcyAke1BOfS1sbHZtaGVsbG8iCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorQUxMT1dfRU1QVFlfJHtQTn0tc3RhdGljZGV2ID0gIjEiCitGSUxFU18ke1BOfSA9ICIiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgPSAiIgorRklMRVNfJHtQTn0tZGJnID0gIiBcCisgICAgJHtiaW5kaXJ9LyR7TExWTV9ESVJ9Ly5kZWJ1ZyBcCisgICAgJHtsaWJkaXJ9LyR7TExWTV9ESVJ9Ly5kZWJ1Zy9CdWdwb2ludFBhc3Nlcy5zbyBcCisgICAgJHtsaWJkaXJ9LyR7TExWTV9ESVJ9Ly5kZWJ1Zy9MTFZNSGVsbG8uc28gXAorICAgICR7bGliZGlyfS8ke0xMVk1fRElSfS8uZGVidWcvbGliTFRPLnNvKiBcCisgICAgJHtsaWJkaXJ9LyR7TExWTV9ESVJ9Ly5kZWJ1Zy9sbHZtLWNvbmZpZyBcCisgICAgL3Vzci9zcmMvZGVidWcgXAorIgorCitGSUxFU18ke1BOfS1kZXYgPSAiIFwKKyAgICAke2JpbmRpcn0vJHtMTFZNX0RJUn0gXAorICAgICR7aW5jbHVkZWRpcn0vJHtMTFZNX0RJUn0gXAorICAgICR7bGliZGlyfS8ke0xMVk1fRElSfS9sbHZtLWNvbmZpZyBcCisiCisKK1JSRUNPTU1FTkRTXyR7UE59LWRldiArPSAiJHtQTn0tYnVncG9pbnRwYXNzZXMgJHtQTn0tbGx2bWhlbGxvIgorCitGSUxFU18ke1BOfS1idWdwb2ludHBhc3NlcyA9ICJcCisgICAgJHtsaWJkaXJ9LyR7TExWTV9ESVJ9L0J1Z3BvaW50UGFzc2VzLnNvIFwKKyIKK0ZJTEVTXyR7UE59ICs9ICJcCisgICAgJHtsaWJkaXJ9LyR7TExWTV9ESVJ9L2xpYkxUTy5zby4qIFwKKyIKKworRklMRVNfJHtQTn0tbGx2bWhlbGxvID0gIlwKKyAgICAke2xpYmRpcn0vJHtMTFZNX0RJUn0vTExWTUhlbGxvLnNvIFwKKyIKKworUEFDS0FHRVNfRFlOQU1JQyA9ICJebGlibGx2bSR7TExWTV9SRUxFQVNFfS0uKiQiCitOT0FVVE9QQUNLQUdFREVCVUcgPSAiMSIKKworSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJsbHZtJHtMTFZNX1JFTEVBU0V9LWxsdm0tJHtMTFZNX1JFTEVBU0V9LiR7UEFUQ0hfVkVSU0lPTn0gKz0gImRldi1zbyIKK0lOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGlibGx2bSR7TExWTV9SRUxFQVNFfS1sbHZtLSR7TExWTV9SRUxFQVNFfSArPSAiZGV2LXNvIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJsbHZtJHtMTFZNX1JFTEVBU0V9LWxsdm0gKz0gImRldi1zbyIKKworcHl0aG9uIGxsdm1fcG9wdWxhdGVfcGFja2FnZXMoKSB7CisgICAgbGliZGlyID0gYmIuZGF0YS5leHBhbmQoJyR7bGliZGlyfScsIGQpCisgICAgbGlibGx2bV9saWJkaXIgPSBiYi5kYXRhLmV4cGFuZCgnJHtsaWJkaXJ9LyR7TExWTV9ESVJ9JywgZCkKKyAgICBzcGxpdF9kYmdfcGFja2FnZXMgPSBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWJsbHZtX2xpYmRpcisnLy5kZWJ1ZycsICdebGliKC4qKVwuc28kJywgJ2xpYmxsdm0ke0xMVk1fUkVMRUFTRX0tJXMtZGJnJywgJ1NwbGl0IGRlYnVnIHBhY2thZ2UgZm9yICVzJywgYWxsb3dfZGlycz1UcnVlKQorICAgIHNwbGl0X3BhY2thZ2VzID0gZG9fc3BsaXRfcGFja2FnZXMoZCwgbGliZGlyLCAnXmxpYiguKilcLnNvJCcsICdsaWJsbHZtJHtMTFZNX1JFTEVBU0V9LSVzJywgJ1NwbGl0IHBhY2thZ2UgZm9yICVzJywgYWxsb3dfZGlycz1UcnVlLCBhbGxvd19saW5rcz1UcnVlLCByZWN1cnNpdmU9VHJ1ZSkKKyAgICBzcGxpdF9zdGF0aWNkZXZfcGFja2FnZXMgPSBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWJsbHZtX2xpYmRpciwgJ15saWIoLiopXC5hJCcsICdsaWJsbHZtJHtMTFZNX1JFTEVBU0V9LSVzLXN0YXRpY2RldicsICdTcGxpdCBzdGF0aWNkZXYgcGFja2FnZSBmb3IgJXMnLCBhbGxvd19kaXJzPVRydWUpCisgICAgaWYgc3BsaXRfcGFja2FnZXM6CisgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJykKKyAgICAgICAgZC5hcHBlbmRWYXIoJ1JERVBFTkRTXycgKyBwbiwgJyAnKycgJy5qb2luKHNwbGl0X3BhY2thZ2VzKSkKKyAgICAgICAgZC5hcHBlbmRWYXIoJ1JERVBFTkRTXycgKyBwbiArICctZGJnJywgJyAnKycgJy5qb2luKHNwbGl0X2RiZ19wYWNrYWdlcykpCisgICAgICAgIGQuYXBwZW5kVmFyKCdSREVQRU5EU18nICsgcG4gKyAnLXN0YXRpY2RldicsICcgJysnICcuam9pbihzcGxpdF9zdGF0aWNkZXZfcGFja2FnZXMpKQorfQorCitQQUNLQUdFU1BMSVRGVU5DU19wcmVwZW5kID0gImxsdm1fcG9wdWxhdGVfcGFja2FnZXMgIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQuaW5jCmluZGV4IDRhODM5MjkuLjIwMDI1OTQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQuaW5jCkBAIC0xLDQgKzEsNSBAQAogU1VNTUFSWSA9ICJUcmFkaXRpb25hbCBVbml4IG1hY3JvIHByb2Nlc3NvciIKK0hPTUVQQUdFID0gImh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbTQvbTQuaHRtbCIKIERFU0NSSVBUSU9OID0gIkdOVSBtNCBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdHJhZGl0aW9uYWwgVW5peCBtYWNybyBwcm9jZXNzb3IuICBJdCBpcyBtb3N0bHkgU1ZSNCBcCiBjb21wYXRpYmxlIGFsdGhvdWdoIGl0IGhhcyBzb21lIGV4dGVuc2lvbnMgKGZvciBleGFtcGxlLCBoYW5kbGluZyBtb3JlIHRoYW4gOSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgdG8gbWFjcm9zKS4gXAogR05VIE00IGFsc28gaGFzIGJ1aWx0LWluIGZ1bmN0aW9ucyBmb3IgaW5jbHVkaW5nIGZpbGVzLCBydW5uaW5nIHNoZWxsIGNvbW1hbmRzLCBkb2luZyBhcml0aG1ldGljLCBldGMuIgpAQCAtNiw1ICs3LDQgQEAKIGluaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KIAogRVhUUkFfT0VNQUtFICs9ICInaW5mb2Rpcj0ke2luZm9kaXJ9JyIKLUxERkxBR1NfcHJlcGVuZF9saWJjLXVjbGliYyA9ICIgLWxydCAiCiBTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vbTQvbTQtJHtQVn0udGFyLmd6IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2UvY29udmVydC5iaW4uYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlL2NvbnZlcnQuYmluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I2ZmFhOAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlL2NvbnZlcnQuYmluLmMKQEAgLTAsMCArMSwzNDggQEAKKzB4ZmMsIDB4ZmEsIDB4YTMsIDB4OWMsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODksIDB4MWQsIDB4YTAsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODMsIDB4ZmMsIDB4MDAsCisweDc0LCAweDA5LCAweDhiLCAweDQ0LCAweDI0LCAweDA0LCAweGEzLCAweGE0LCAweDAyLCAweDAxLCAweDAwLCAweDhiLCAweDI1LCAweDgwLCAweDE0LCAweDAxLAorMHgwMCwgMHg2YSwgMHgwMCwgMHg5ZCwgMHgzMSwgMHhjMCwgMHhiZiwgMHhiOCwgMHgxNSwgMHgwMSwgMHgwMCwgMHhiOSwgMHg0NCwgMHg1OCwgMHgwMSwgMHgwMCwKKzB4MjksIDB4ZjksIDB4ZmMsIDB4ZjMsIDB4YWEsIDB4YmUsIDB4YmEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4YmYsIDB4MDAsIDB4MTAsIDB4MDIsIDB4MDAsIDB4YjksCisweDcwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweGE0LCAweDBmLCAweDAxLCAweDE1LCAweGI0LCAweDAyLCAweDAxLCAweDAwLCAweDBmLCAweDAxLCAweDFkLAorMHhhZSwgMHgwMiwgMHgwMSwgMHgwMCwgMHhiOCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4ZSwgMHhkOCwgMHg4ZSwgMHhjMCwgMHg4ZSwgMHhlMCwgMHg4ZSwKKzB4ZTgsIDB4OGUsIDB4ZDAsIDB4NjgsIDB4OTAsIDB4MTQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MzUsIDB4YTQsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MzUsCisweGEwLCAweDAyLCAweDAxLCAweDAwLCAweGZmLCAweDM1LCAweDljLCAweDAyLCAweDAxLCAweDAwLCAweGU4LCAweGUzLCAweDA4LCAweDAwLCAweDAwLCAweDg5LAorMHhjNiwgMHg4MywgMHhjNCwgMHgxMCwgMHg2YSwgMHgwMCwgMHg5ZCwgMHgzMSwgMHhkYiwgMHhhMSwgMHhhYywgMHgxNCwgMHgwMSwgMHgwMCwgMHg4MywgMHhmOCwKKzB4MDEsIDB4NzQsIDB4MTMsIDB4MzEsIDB4YzAsIDB4MzEsIDB4YzksIDB4MzEsIDB4ZDIsIDB4MzEsIDB4ZmYsIDB4MzEsIDB4ZWQsIDB4NmEsIDB4MTAsIDB4YTEsCisweGE4LCAweDE0LCAweDAxLCAweDAwLCAweDUwLCAweGNiLCAweDg5LCAweGYwLCAweGJlLCAweDJhLCAweDAzLCAweDAxLCAweDAwLCAweGJmLCAweDAwLCAweDIwLAorMHgwMiwgMHgwMCwgMHhiOSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHhhNCwgMHg4OSwgMHhjNiwgMHgwZiwgMHgwMSwgMHgxNSwgMHgyYSwgMHgwMywKKzB4MDEsIDB4MDAsIDB4MzEsIDB4YzAsIDB4MGYsIDB4YmEsIDB4ZTgsIDB4MDUsIDB4MGYsIDB4MjIsIDB4ZTAsIDB4YmYsIDB4MDAsIDB4MzAsIDB4MDIsIDB4MDAsCisweDMxLCAweGMwLCAweGI5LCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweGYzLCAweGFiLCAweGJmLCAweDAwLCAweDMwLCAweDAyLCAweDAwLCAweDhkLCAweDg3LAorMHgwNywgMHgxMCwgMHgwMCwgMHgwMCwgMHg4OSwgMHgwNywgMHhiZiwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHg4ZCwgMHg4NywgMHgwNywgMHgxMCwgMHgwMCwKKzB4MDAsIDB4YjksIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODksIDB4MDcsIDB4MDUsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ODMsIDB4YzcsIDB4MDgsCisweDQ5LCAweDc1LCAweGYzLCAweGJmLCAweDAwLCAweDUwLCAweDAyLCAweDAwLCAweGI4LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweGI5LCAweDAwLCAweDA4LAorMHgwMCwgMHgwMCwgMHg4OSwgMHgwNywgMHgwNSwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MywgMHhjNywgMHgwOCwgMHg0OSwgMHg3NSwgMHhmMywgMHhiOCwKKzB4MDAsIDB4MzAsIDB4MDIsIDB4MDAsIDB4MGYsIDB4MjIsIDB4ZDgsIDB4YjksIDB4ODAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MGYsIDB4MzIsIDB4MGYsIDB4YmEsCisweGU4LCAweDA4LCAweDBmLCAweDMwLCAweDZhLCAweDEwLCAweGExLCAweGE4LCAweDE0LCAweDAxLCAweDAwLCAweDUwLCAweDMxLCAweGMwLCAweDBmLCAweGJhLAorMHhlOCwgMHgxZiwgMHgwZiwgMHhiYSwgMHhlOCwgMHgwMCwgMHgwZiwgMHgyMiwgMHhjMCwgMHhjYiwgMHg1NSwgMHg4OSwgMHhlNSwgMHg1MywgMHg1NiwgMHg1NywKKzB4OGIsIDB4N2QsIDB4MDgsIDB4ODEsIDB4ZWYsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4NzUsIDB4MGMsIDB4NTYsIDB4ZTgsIDB4ZmMsIDB4MDAsCisweDAwLCAweDAwLCAweDY2LCAweDMxLCAweGRiLCAweDY2LCAweGI4LCAweDIwLCAweGU4LCAweDAwLCAweDAwLCAweDY2LCAweGJhLCAweDUwLCAweDQxLCAweDRkLAorMHg1MywgMHg2NiwgMHhiOSwgMHgxNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjZCwgMHgxNSwgMHg3MiwgMHgxOCwgMHg2NiwgMHgzZCwgMHg1MCwgMHg0MSwgMHg0ZCwKKzB4NTMsIDB4NzUsIDB4MTAsIDB4NjYsIDB4NGUsIDB4NjYsIDB4ODUsIDB4ZjYsIDB4NzQsIDB4MDksIDB4ODMsIDB4YzcsIDB4MTQsIDB4NjYsIDB4ODMsIDB4ZmIsCisweDAwLCAweDc1LCAweGQyLCAweDY2LCAweGU4LCAweDgyLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDI5LCAweGYwLCAweDVmLCAweDVlLCAweDViLCAweDg5LAorMHhlYywgMHg1ZCwgMHhjMywgMHg1MywgMHg1NiwgMHg1NywgMHhlOCwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOSwgMHgzMSwgMHhjOSwgMHgzMSwgMHhkMiwKKzB4YjgsIDB4MDEsIDB4ZTgsIDB4Y2QsIDB4MTUsIDB4NzIsIDB4MjgsIDB4ODMsIDB4ZjksIDB4MDAsIDB4NzUsIDB4MDksIDB4ODMsIDB4ZmEsIDB4MDAsIDB4NzUsCisweDA0LCAweDg5LCAweGMxLCAweDg5LCAweGRhLCAweDY2LCAweDgxLCAweGUyLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDY2LCAweGMxLCAweGUyLCAweDA2LAorMHg2NiwgMHg4OSwgMHhkMCwgMHg2NiwgMHg4MSwgMHhlMSwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHg2NiwgMHgwMSwgMHhjOCwgMHhlYiwgMHgwMywgMHg2NiwKKzB4MzEsIDB4YzAsIDB4NjYsIDB4ZTgsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4NWUsIDB4NWIsIDB4YzMsIDB4NTMsIDB4NTYsIDB4NTcsIDB4ZTgsCisweDZhLCAweDAwLCAweDAwLCAweDAwLCAweGI0LCAweDg4LCAweGNkLCAweDE1LCAweDY2LCAweDI1LCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDY2LCAweGU4LAorMHgxNywgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg1ZSwgMHg1YiwgMHhjMywgMHhlOCwgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjZCwgMHgxMiwgMHg4OSwKKzB4YzEsIDB4NjYsIDB4ZTgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4ODksIDB4YzgsIDB4YzMsIDB4ZmEsIDB4MmUsIDB4NjcsIDB4MGYsIDB4MDEsCisweDE1LCAweGI0LCAweDAyLCAweDAwLCAweDAwLCAweDBmLCAweDIwLCAweGMwLCAweDY2LCAweDgzLCAweGM4LCAweDAxLCAweDBmLCAweDIyLCAweGMwLCAweDY2LAorMHhlYSwgMHgzNywgMHgwMiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHhiOCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4ZSwgMHhkOCwgMHg4ZSwgMHhjMCwKKzB4OGUsIDB4ZDAsIDB4ODEsIDB4YzQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzEsIDB4YzAsIDB4OGUsIDB4ZTAsIDB4OGUsIDB4ZTgsIDB4NTgsIDB4MDUsCisweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDUwLCAweDJlLCAweDBmLCAweDAxLCAweDFkLCAweGFlLCAweDAyLCAweDAxLCAweDAwLCAweGMzLCAweDU4LCAweDJkLAorMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHg4MSwgMHhlYywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg3MiwgMHgwMiwgMHgwMCwgMHgwMCwKKzB4MDgsIDB4MDAsIDB4MGYsIDB4MjAsIDB4YzAsIDB4NjYsIDB4ODMsIDB4ZTAsIDB4ZmUsIDB4MGYsIDB4MjIsIDB4YzAsIDB4NjYsIDB4ZWEsIDB4ODQsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDhjLCAweGM4LCAweDhlLCAweGQ4LCAweDhlLCAweGMwLCAweDhlLCAweGQwLCAweDhlLCAweGUwLCAweDhlLCAweGU4LAorMHgyZSwgMHg2NywgMHgwZiwgMHgwMSwgMHgxZCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmYiwgMHg2NiwgMHhjMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDZmLCAweDAwLCAweDAwLCAweDEwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMSwgMHg5YiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YSwKKzB4Y2YsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTIsIDB4Y2YsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OTMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDlhLAorMHhjZiwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MiwgMHhjZiwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWEsCisweGFmLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDkyLCAweGNmLCAweDAwLCAweDU1LCAweDg5LCAweGMxLCAweDg5LCAweGU1LCAweGJhLAorMHhmZCwgMHgwMywgMHgwMCwgMHgwMCwgMHhlYywgMHhhOCwgMHgyMCwgMHg3NCwgMHhmYiwgMHhiYSwgMHhmOCwgMHgwMywgMHgwMCwgMHgwMCwgMHg4OCwgMHhjOCwKKzB4ZWUsIDB4YmEsIDB4ZmQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4YTgsIDB4NDAsIDB4NzQsIDB4ZmIsIDB4NWQsIDB4YzMsIDB4NTUsIDB4ODMsIDB4ZjgsCisweDBhLCAweDg5LCAweGU1LCAweDUzLCAweDg5LCAweGMzLCAweDc1LCAweDBhLCAweGI4LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweGM4LCAweGZmLAorMHhmZiwgMHhmZiwgMHg4OSwgMHhkOCwgMHg1YiwgMHg1ZCwgMHhlYiwgMHhjMiwgMHg1NSwgMHg4OSwgMHhlNSwgMHg1NywgMHg1NiwgMHg1MywgMHg4MywgMHhlYywKKzB4NDQsIDB4OGQsIDB4NWQsIDB4MGMsIDB4OGIsIDB4N2QsIDB4MDgsIDB4MGYsIDB4YmUsIDB4MDcsIDB4ODQsIDB4YzAsIDB4MGYsIDB4ODQsIDB4NjgsIDB4MDEsCisweDAwLCAweDAwLCAweDNjLCAweDI1LCAweDc0LCAweDBkLCAweGU4LCAweGMyLCAweGZmLCAweGZmLCAweGZmLCAweDg5LCAweDdkLCAweGJjLCAweGU5LCAweDRlLAorMHgwMSwgMHgwMCwgMHgwMCwgMHg4ZCwgMHg0NywgMHgwMSwgMHg4OSwgMHg0NSwgMHhiYywgMHg4YSwgMHg0NywgMHgwMSwgMHgzYywgMHg3MywgMHg3NSwgMHgxYSwKKzB4ODksIDB4ZDgsIDB4ODMsIDB4YzMsIDB4MDQsIDB4OGIsIDB4MzAsIDB4MGYsIDB4YmUsIDB4MDYsIDB4ODQsIDB4YzAsIDB4MGYsIDB4ODQsIDB4MmYsIDB4MDEsCisweDAwLCAweDAwLCAweGU4LCAweDk2LCAweGZmLCAweGZmLCAweGZmLCAweDQ2LCAweGViLCAweGVkLCAweDNjLCAweDRjLCAweDc1LCAweDBkLCAweDhkLCAweDQ3LAorMHgwMiwgMHhiZSwgMHgzYywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwgMHg0NSwgMHhiYywgMHhlYiwgMHgzOCwgMHgzYywgMHg2YywgMHg3NSwgMHgwZCwgMHg4ZCwKKzB4NDcsIDB4MDIsIDB4YmUsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODksIDB4NDUsIDB4YmMsIDB4ZWIsIDB4MjcsIDB4YmUsIDB4MWMsIDB4MDAsIDB4MDAsCisweDAwLCAweDNjLCAweDY4LCAweDc1LCAweDFlLCAweDgwLCAweDdmLCAweDAyLCAweDY4LCAweDc0LCAweDBkLCAweDhkLCAweDQ3LCAweDAyLCAweGJlLCAweDBjLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwgMHg0NSwgMHhiYywgMHhlYiwgMHgwYiwgMHg4ZCwgMHg0NywgMHgwMywgMHhiZSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4ODksIDB4NDUsIDB4YmMsIDB4OGIsIDB4NDUsIDB4YmMsIDB4OGEsIDB4MDAsIDB4ODgsIDB4YzIsIDB4ODMsIDB4Y2EsIDB4MjAsIDB4ODAsIDB4ZmEsIDB4NzgsCisweDc1LCAweDViLCAweDhiLCAweDEzLCAweDgzLCAweGZlLCAweDFjLCAweDdlLCAweDBlLCAweDhiLCAweDRiLCAweDA0LCAweDg5LCAweDU1LCAweGIwLCAweDg5LAorMHg0ZCwgMHhiNCwgMHg4MywgMHhjMywgMHgwOCwgMHhlYiwgMHgwYiwgMHgzMSwgMHhjOSwgMHg4OSwgMHg1NSwgMHhiMCwgMHg4OSwgMHg0ZCwgMHhiNCwgMHg4MywKKzB4YzMsIDB4MDQsIDB4ODMsIDB4ZTAsIDB4MjAsIDB4OGQsIDB4N2QsIDB4YzgsIDB4ODgsIDB4NDUsIDB4YmIsIDB4ODksIDB4ZjEsIDB4OGIsIDB4NTUsIDB4YjQsCisweDhiLCAweDQ1LCAweGIwLCAweDBmLCAweGFkLCAweGQwLCAweGQzLCAweGVhLCAweGY2LCAweGMxLCAweDIwLCAweDc0LCAweDAyLCAweDg5LCAweGQwLCAweDgzLAorMHhlMCwgMHgwZiwgMHg4YSwgMHg1NSwgMHhiYiwgMHg0NywgMHgwYSwgMHg5MCwgMHgxNCwgMHgxMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHg1NywgMHhmZiwgMHg4MywKKzB4ZTksIDB4MDQsIDB4NzksIDB4ZDksIDB4YzEsIDB4ZWUsIDB4MDIsIDB4OGQsIDB4NzQsIDB4MzUsIDB4YzksIDB4ZWIsIDB4NjIsIDB4M2MsIDB4NjQsIDB4NzUsCisweDRhLCAweDhiLCAweDAzLCAweDgzLCAweGZlLCAweDFjLCAweDdlLCAweDA1LCAweDgzLCAweGMzLCAweDA4LCAweGViLCAweDAzLCAweDgzLCAweGMzLCAweDA0LAorMHg4ZCwgMHg0ZCwgMHhjOCwgMHg4NSwgMHhjMCwgMHg3OSwgMHgwOSwgMHhjNiwgMHg0NSwgMHhjOCwgMHgyZCwgMHg4ZCwgMHg0ZCwgMHhjOSwgMHhmNywgMHhkOCwKKzB4ODksIDB4Y2UsIDB4YmYsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4NDYsIDB4ZjcsIDB4ZmYsIDB4ODMsIDB4YzIsIDB4MzAsIDB4ODUsIDB4YzAsCisweDg4LCAweDU2LCAweGZmLCAweDc1LCAweGYyLCAweDg5LCAweGYwLCAweDQ4LCAweDM5LCAweGMxLCAweDczLCAweDIzLCAweDBmLCAweGI2LCAweDM4LCAweDhhLAorMHgxMSwgMHg0MSwgMHg4OCwgMHgxMCwgMHg4OSwgMHhmYSwgMHg4OCwgMHg1MSwgMHhmZiwgMHhlYiwgMHhlYywgMHgzYywgMHg2MywgMHg3NSwgMHgwYSwgMHg4YiwKKzB4MDMsIDB4ODMsIDB4YzMsIDB4MDQsIDB4ODgsIDB4NDUsIDB4YzgsIDB4ZWIsIDB4MDMsIDB4ODgsIDB4NDUsIDB4YzgsIDB4OGQsIDB4NzUsIDB4YzksIDB4OGQsCisweDdkLCAweGM4LCAweDM5LCAweGY3LCAweDczLCAweDBiLCAweDBmLCAweGJlLCAweDA3LCAweDQ3LCAweGU4LCAweDZlLCAweGZlLCAweGZmLCAweGZmLCAweGViLAorMHhmMSwgMHg4YiwgMHg3ZCwgMHhiYywgMHg0NywgMHhlOSwgMHg4ZCwgMHhmZSwgMHhmZiwgMHhmZiwgMHg4MywgMHhjNCwgMHg0NCwgMHg1YiwgMHg1ZSwgMHg1ZiwKKzB4NWQsIDB4YzMsIDB4NTUsIDB4MzEsIDB4YzksIDB4ODksIDB4ZTUsIDB4NTYsIDB4NTMsIDB4MzEsIDB4ZGIsIDB4ODMsIDB4ZWMsIDB4MTAsIDB4MzksIDB4ZDMsCisweDc0LCAweDIzLCAweDBmLCAweGI2LCAweDM0LCAweDE4LCAweGY2LCAweGMzLCAweDAxLCAweDc0LCAweDAzLCAweGMxLCAweGU2LCAweDA4LCAweDAxLCAweGYxLAorMHg4MSwgMHhmOSwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHg3NiwgMHgwYSwgMHg4OSwgMHhjZSwgMHhjMSwgMHhlZSwgMHgxMCwgMHgwMSwgMHhmMSwgMHgwZiwKKzB4YjcsIDB4YzksIDB4NDMsIDB4ZWIsIDB4ZDksIDB4ODgsIDB4NGQsIDB4ZjYsIDB4YzEsIDB4ZTksIDB4MDgsIDB4ODgsIDB4NGQsIDB4ZjcsIDB4MGYsIDB4YjcsCisweDQ1LCAweGY2LCAweDgzLCAweGM0LCAweDEwLCAweDViLCAweDVlLCAweDVkLCAweGMzLCAweDU1LCAweDg5LCAweGU1LCAweDU3LCAweDU2LCAweDUzLCAweDg5LAorMHhjMywgMHg1MSwgMHg4OSwgMHg1NSwgMHhmMCwgMHgzYiwgMHg1ZCwgMHhmMCwgMHg3MywgMHg1ZiwgMHg4MSwgMHgzYiwgMHg0YywgMHg0MiwgMHg0OSwgMHg0ZiwKKzB4NzQsIDB4MDUsIDB4ODMsIDB4YzMsIDB4MTAsIDB4ZWIsIDB4ZWUsIDB4ODMsIDB4N2IsIDB4MDQsIDB4MTgsIDB4NzUsIDB4ZjUsIDB4YmEsIDB4MTgsIDB4MDAsCisweDAwLCAweDAwLCAweDg5LCAweGQ4LCAweGU4LCAweDg5LCAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGQwLCAweDY2LCAweDg1LCAweGMwLCAweDc1LCAweGUyLAorMHg4ZCwgMHg3MywgMHgxOCwgMHg4YiwgMHg1MywgMHgwYywgMHg4OSwgMHhmMCwgMHhlOCwgMHg3NSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmNywgMHhkMCwgMHgwZiwKKzB4YjcsIDB4YzAsIDB4MzksIDB4NDMsIDB4MTAsIDB4NzUsIDB4Y2IsIDB4OGIsIDB4NGIsIDB4MGMsIDB4MzEsIDB4YzAsIDB4MDEsIDB4ZjEsIDB4MzksIDB4ZjEsCisweDc2LCAweDEwLCAweDg5LCAweGNmLCAweDhiLCAweDU2LCAweDA0LCAweDI5LCAweGY3LCAweDM5LCAweGZhLCAweDc3LCAweDA1LCAweDQwLCAweDAxLCAweGQ2LAorMHhlYiwgMHhlYywgMHgzOSwgMHg0MywgMHgxNCwgMHg3NSwgMHhhYiwgMHhlYiwgMHgwMiwgMHgzMSwgMHhkYiwgMHg1YSwgMHg4OSwgMHhkOCwgMHg1YiwgMHg1ZSwKKzB4NWYsIDB4NWQsIDB4YzMsIDB4NTUsIDB4YmEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ODksIDB4ZTUsIDB4NTcsIDB4NTYsIDB4NTMsIDB4ODksIDB4YzMsCisweDMxLCAweGMwLCAweDUxLCAweGU4LCAweDcxLCAweGZmLCAweGZmLCAweGZmLCAweDg1LCAweGMwLCAweDc1LCAweDE3LCAweGJhLCAweDAwLCAweDAwLCAweDEwLAorMHgwMCwgMHhiOCwgMHgwMCwgMHgwMCwgMHgwZiwgMHgwMCwgMHhlOCwgMHg1ZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHg4NSwgMHhjMCwgMHg3NSwgMHgwNCwgMHgzMSwKKzB4YzAsIDB4ZWIsIDB4MmYsIDB4OGIsIDB4NTAsIDB4MDQsIDB4MDEsIDB4YzIsIDB4ODMsIDB4M2EsIDB4MTEsIDB4NzUsIDB4MTYsIDB4OGIsIDB4NzIsIDB4MDgsCisweDg5LCAweGYyLCAweDg5LCAweGYwLCAweDgxLCAweGMyLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGU4LCAweDNhLCAweGZmLCAweGZmLCAweGZmLCAweDg1LAorMHhjMCwgMHg3NCwgMHhkYywgMHg4OSwgMHg0MywgMHgyOCwgMHhjNywgMHg0MywgMHgyNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiOCwgMHgwMSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4NWEsIDB4NWIsIDB4NWUsIDB4NWYsIDB4NWQsIDB4YzMsIDB4NTUsIDB4ODksIDB4ZTUsIDB4NTcsIDB4NTYsIDB4NTMsIDB4ODMsIDB4ZWMsCisweDE0LCAweDg5LCAweDU1LCAweGU4LCAweDhiLCAweDc1LCAweDBjLCAweDhiLCAweDVkLCAweDA4LCAweDg5LCAweDc1LCAweGU0LCAweDg5LCAweDRkLCAweGVjLAorMHgwZiwgMHhiNiwgMHhiMCwgMHhlOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4OSwgMHg1ZCwgMHhlMCwgMHg4YiwgMHg3ZCwgMHgxMCwgMHg4MywgMHhmZSwgMHgxZiwKKzB4N2YsIDB4MzIsIDB4ODksIDB4ZjMsIDB4NmIsIDB4ZjYsIDB4MTQsIDB4MDEsIDB4YzYsIDB4NDMsIDB4ODksIDB4OTYsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsCisweDg5LCAweDhlLCAweGQ0LCAweDAyLCAweDAwLCAweDAwLCAweDhiLCAweDU1LCAweGUwLCAweDhiLCAweDRkLCAweGU0LCAweDg5LCAweDk2LCAweGQ4LCAweDAyLAorMHgwMCwgMHgwMCwgMHg4OSwgMHg4ZSwgMHhkYywgMHgwMiwgMHgwMCwgMHgwMCwgMHg4OSwgMHhiZSwgMHhlMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4OCwgMHg5OCwKKzB4ZTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NzUsIDB4NjUsIDB4OGIsIDB4NWQsIDB4ZTAsIDB4OGIsIDB4NzUsIDB4ZTQsIDB4MDMsIDB4NWQsIDB4ZTgsCisweDEzLCAweDc1LCAweGVjLCAweDg5LCAweGQ5LCAweDg5LCAweGYzLCAweGJlLCAweGZmLCAweGZmLCAweDNmLCAweDAwLCAweDgxLCAweGZiLCAweGZmLCAweDAzLAorMHgwMCwgMHgwMCwgMHg3NywgMHgxMywgMHgwZiwgMHhhYywgMHhkOSwgMHgwYSwgMHg4OSwgMHhjZSwgMHg4MSwgMHhmOSwgMHhmZiwgMHhmZiwgMHgzZiwgMHgwMCwKKzB4NzYsIDB4MDUsIDB4YmUsIDB4ZmYsIDB4ZmYsIDB4M2YsIDB4MDAsIDB4OGIsIDB4YjgsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OGQsIDB4OTcsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDM5LCAweGYyLCAweDczLCAweDI1LCAweDhkLCAweDk2LCAweDAwLCAweGZjLCAweGZmLCAweGZmLCAweDg5LCAweDkwLCAweGUwLAorMHgwMSwgMHgwMCwgMHgwMCwgMHg4MSwgMHhmYSwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHg3NywgMHgwYiwgMHg2NiwgMHg4MSwgMHhlZSwgMHgwMCwgMHgwNCwKKzB4NjYsIDB4ODksIDB4NzAsIDB4MDIsIDB4ZWIsIDB4MDYsIDB4NjYsIDB4YzcsIDB4NDAsIDB4MDIsIDB4MDAsIDB4ZmMsIDB4ODMsIDB4YzQsIDB4MTQsIDB4NWIsCisweDVlLCAweDVmLCAweDVkLCAweGMzLCAweDU1LCAweDg5LCAweGU1LCAweDhiLCAweDU1LCAweDA4LCAweGVjLCAweDVkLCAweGMzLCAweDU1LCAweDg5LCAweGU1LAorMHg4YiwgMHg1NSwgMHgwOCwgMHg2NiwgMHhlZCwgMHg1ZCwgMHhjMywgMHg1NSwgMHg4OSwgMHhlNSwgMHg4YiwgMHg1NSwgMHgwOCwgMHhlZCwgMHg1ZCwgMHhjMywKKzB4NTUsIDB4ODksIDB4ZTUsIDB4OGIsIDB4NDUsIDB4MDgsIDB4OGIsIDB4NTUsIDB4MGMsIDB4ZWUsIDB4NWQsIDB4YzMsIDB4NTUsIDB4ODksIDB4ZTUsIDB4OGIsCisweDQ1LCAweDA4LCAweDhiLCAweDU1LCAweDBjLCAweDY2LCAweGVmLCAweDVkLCAweGMzLCAweDU1LCAweDg5LCAweGU1LCAweDhiLCAweDQ1LCAweDA4LCAweDhiLAorMHg1NSwgMHgwYywgMHhlZiwgMHg1ZCwgMHhjMywgMHg1NSwgMHgzMSwgMHhjMCwgMHg4OSwgMHhlNSwgMHg4YiwgMHg1NSwgMHgwOCwgMHgzYiwgMHg0NSwgMHgwYywKKzB4NzQsIDB4MDksIDB4ODAsIDB4M2MsIDB4MDIsIDB4MDAsIDB4NzQsIDB4MDMsIDB4NDAsIDB4ZWIsIDB4ZjIsIDB4NWQsIDB4YzMsIDB4NTUsIDB4MzEsIDB4ZDIsCisweDg5LCAweGU1LCAweDhiLCAweDQ1LCAweDA4LCAweDhiLCAweDRkLCAweDBjLCAweDNiLCAweDU1LCAweDEwLCAweDc0LCAweDA2LCAweDg4LCAweDBjLCAweDEwLAorMHg0MiwgMHhlYiwgMHhmNSwgMHg1ZCwgMHhjMywgMHg1NSwgMHgzMSwgMHhkMiwgMHg4OSwgMHhlNSwgMHg1MywgMHg4YiwgMHg0NSwgMHgwOCwgMHg4YiwgMHg0ZCwKKzB4MGMsIDB4M2IsIDB4NTUsIDB4MTAsIDB4NzQsIDB4MDksIDB4OGEsIDB4MWMsIDB4MTEsIDB4ODgsIDB4MWMsIDB4MTAsIDB4NDIsIDB4ZWIsIDB4ZjIsIDB4NWIsCisweDVkLCAweGMzLCAweDU1LCAweDMxLCAweGM5LCAweDg5LCAweGU1LCAweDNiLCAweDRkLCAweDEwLCAweDc0LCAweDE3LCAweDhiLCAweDQ1LCAweDA4LCAweDBmLAorMHhiNiwgMHgxMCwgMHg4YiwgMHg0NSwgMHgwYywgMHgwZiwgMHhiNiwgMHgwMCwgMHgzOCwgMHhjMiwgMHg3NCwgMHgwNCwgMHgyOSwgMHhkMCwgMHhlYiwgMHgwNSwKKzB4NDEsIDB4ZWIsIDB4ZTQsIDB4MzEsIDB4YzAsIDB4NWQsIDB4YzMsIDB4NTUsIDB4ODksIDB4ZTUsIDB4NTcsIDB4NTYsIDB4NTMsIDB4OGIsIDB4NDUsIDB4MDgsCisweDY4LCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDhiLCAweDRkLCAweDEwLCAweDhkLCAweDk4LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDUzLCAweGU4LAorMHg3MSwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMSwgMHhjMywgMHg1ZSwgMHg4MSwgMHhmOSwgMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg4ZCwgMHg3MywKKzB4MDEsIDB4YzYsIDB4MDMsIDB4MjAsIDB4N2UsIDB4MDUsIDB4YjksIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4ZmYsIDB4NzUsIDB4MGMsIDB4ZTgsCisweDUxLCAweGZmLCAweGZmLCAweGZmLCAweDVhLCAweDU5LCAweDUwLCAweGZmLCAweDc1LCAweDBjLCAweDg5LCAweGM3LCAweDU2LCAweGU4LCAweDczLCAweGZmLAorMHhmZiwgMHhmZiwgMHg4MywgMHhjNCwgMHgwYywgMHhjNiwgMHg0NCwgMHgzYiwgMHgwMSwgMHgwMCwgMHg4ZCwgMHg2NSwgMHhmNCwgMHg1YiwgMHg1ZSwgMHg1ZiwKKzB4NWQsIDB4YzMsIDB4NTUsIDB4ODksIDB4ZTUsIDB4OGIsIDB4NDUsIDB4MTAsIDB4OGIsIDB4NTUsIDB4MGMsIDB4ODksIDB4NDUsIDB4MGMsIDB4OGIsIDB4NDUsCisweDA4LCAweDg5LCAweDU1LCAweDEwLCAweDhiLCAweDQwLCAweDEwLCAweDg5LCAweDQ1LCAweDA4LCAweDVkLCAweGViLCAweDhhLCAweDU1LCAweDg5LCAweGU1LAorMHg1NywgMHg1NiwgMHg1MywgMHg4YiwgMHg1ZCwgMHgwOCwgMHg2OCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg2YSwgMHgwMCwgMHhmZiwgMHg3MywgMHgxMCwKKzB4ZTgsIDB4MTgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OGIsIDB4NDMsIDB4MTAsIDB4YzcsIDB4NDAsIDB4MGUsIDB4MTksIDB4MDEsIDB4MTAsIDB4MDAsIDB4YzcsCisweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDAwLCAweGM3LCAweDQwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGM2LCAweDgwLCAweGU4LCAweDAxLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg4ZCwgMHhiOCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg2NiwgMHhjNywgMHg0MCwgMHgwYSwgMHgwMCwgMHgwMCwgMHhjNywKKzB4NDAsIDB4MjAsIDB4M2YsIDB4YTMsIDB4MDAsIDB4MDgsIDB4ODksIDB4YjgsIDB4MjgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OGIsIDB4NDMsIDB4MGMsIDB4NjgsCisweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDhkLCAweDQ4LCAweDI4LCAweDUxLCAweGU4LCAweGI4LCAweGZlLCAweGZmLCAweGZmLCAweDVhLCAweDVlLCAweDg5LAorMHhjNiwgMHg1MCwgMHg1MSwgMHg1NywgMHhlOCwgMHhkYywgMHhmZSwgMHhmZiwgMHhmZiwgMHg4YiwgMHg0MywgMHgxMCwgMHg4MywgMHhjMCwgMHg0MCwgMHhjNiwKKzB4ODQsIDB4MzAsIDB4YzAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4NDAsIDB4NmEsIDB4MDAsIDB4NTAsIDB4ZTgsIDB4YWMsIDB4ZmUsIDB4ZmYsCisweGZmLCAweDgzLCAweGM0LCAweDI0LCAweDhiLCAweDQzLCAweDEwLCAweDgzLCAweGU4LCAweDgwLCAweDZhLCAweDIwLCAweDZhLCAweDAwLCAweDUwLCAweGU4LAorMHg5OSwgMHhmZSwgMHhmZiwgMHhmZiwgMHg4YiwgMHg1MywgMHgwYywgMHg4YiwgMHg0MywgMHgxMCwgMHgwNSwgMHgwMiwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4YiwKKzB4NGEsIDB4MTQsIDB4NjYsIDB4OGIsIDB4NTIsIDB4MTYsIDB4NjYsIDB4ODksIDB4NDgsIDB4ZjYsIDB4NjYsIDB4ODksIDB4NTAsIDB4ZmEsIDB4NjYsIDB4YzcsCisweDgwLCAweDllLCAweGZlLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweGM3LCAweDQwLCAweGRlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweGM3LAorMHg4MCwgMHgwMCwgMHhmZSwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHg2NiwgMHhjNywgMHg0MCwgMHhmMCwgMHhmZiwgMHhmZiwgMHhjNiwgMHg0MCwgMHhmZCwKKzB4MDAsIDB4NmEsIDB4MDQsIDB4NjgsIDB4MjUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4ZTgsIDB4NjcsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4OGIsIDB4NDMsCisweDEwLCAweDY2LCAweGM3LCAweDgwLCAweDEwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDgzLCAweGM0LCAweDE4LCAweDhiLCAweDRiLCAweDBjLAorMHg2NiwgMHhjNywgMHg4MCwgMHgwNiwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHhjNywgMHg4MCwgMHgxOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4YzcsIDB4ODAsIDB4MWMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGIsIDB4NTEsIDB4MjQsCisweDg1LCAweGQyLCAweDc0LCAweDBmLCAweDhiLCAweDQ5LCAweDIwLCAweDg5LCAweDkwLCAweDFjLCAweDAyLCAweDAwLCAweDAwLCAweDg5LCAweDg4LCAweDE4LAorMHgwMiwgMHgwMCwgMHgwMCwgMHhjNywgMHg0MywgMHgyYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4ZCwgMHg2NSwgMHhmNCwgMHg1YiwgMHg1ZSwgMHg1ZiwKKzB4NWQsIDB4YzMsIDB4NTUsIDB4ODksIDB4ZTUsIDB4NTcsIDB4NTYsIDB4NTMsIDB4ODMsIDB4ZWMsIDB4NGMsIDB4YzcsIDB4NDUsIDB4YzgsIDB4MDAsIDB4MDAsCisweDAyLCAweDAwLCAweDhiLCAweDQ1LCAweDA4LCAweDg5LCAweDQ1LCAweGI4LCAweDhiLCAweDQ1LCAweDBjLCAweDg5LCAweDQ1LCAweGJjLCAweDhiLCAweDQ1LAorMHgxMCwgMHg4OSwgMHg0NSwgMHhjMCwgMHg4YiwgMHg0NSwgMHgxNCwgMHg4OSwgMHg0NSwgMHhjNCwgMHg4ZCwgMHg0NSwgMHhiOCwgMHg1MCwgMHhlOCwgMHg5YSwKKzB4ZmUsIDB4ZmYsIDB4ZmYsIDB4OGIsIDB4NDUsIDB4YjgsIDB4NTksIDB4M2QsIDB4MDIsIDB4YjAsIDB4YWQsIDB4MmIsIDB4NzUsIDB4MDksIDB4YzcsIDB4NDUsCisweGNjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGViLCAweDIxLCAweDMxLCAweGY2LCAweDNkLCAweDA3LCAweGIwLCAweDExLCAweDBhLCAweDc1LCAweDJjLAorMHg4YiwgMHg0NSwgMHhiYywgMHg4YiwgMHgxMCwgMHhlOCwgMHg1OCwgMHhmYiwgMHhmZiwgMHhmZiwgMHhmNywgMHhkMCwgMHg2NiwgMHg4NSwgMHhjMCwgMHg3NSwKKzB4MGUsIDB4YzcsIDB4NDUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4MGQsIDB4NTAsCisweDY4LCAweDJhLCAweDEwLCAweDAxLCAweDAwLCAweGU4LCAweGFlLCAweGY5LCAweGZmLCAweGZmLCAweDU4LCAweDVhLCAweDMxLCAweGRiLCAweDgxLCAweDdkLAorMHhiOCwgMHgwNywgMHhiMCwgMHgxZiwgMHgwZSwgMHg3NSwgMHgwMywgMHg4YiwgMHg1ZCwgMHhiYywgMHg4YiwgMHg0NSwgMHhjMCwgMHg4NSwgMHhjMCwgMHg3NCwKKzB4MGEsIDB4ODEsIDB4MzgsIDB4MDcsIDB4YjAsIDB4MWYsIDB4MGUsIDB4NzUsIDB4MDIsIDB4ODksIDB4YzMsIDB4ODUsIDB4ZjYsIDB4MGYsIDB4ODUsIDB4Y2UsCisweDAwLCAweDAwLCAweDAwLCAweDg1LCAweGRiLCAweDBmLCAweDg0LCAweGM2LCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDgzLCAweDdiLCAweDA4LCAweDAwLAorMHg3NCwgMHgwZiwgMHg4YiwgMHg1MywgMHgwNCwgMHg4OSwgMHhkOCwgMHhlOCwgMHhmNiwgMHhmYSwgMHhmZiwgMHhmZiwgMHhmNywgMHhkMCwgMHgwZiwgMHhiNywKKzB4ZjAsIDB4OGIsIDB4NGIsIDB4MDQsIDB4OGQsIDB4NDMsIDB4MGMsIDB4MDEsIDB4ZDksIDB4MzEsIDB4ZmYsIDB4ODksIDB4NGQsIDB4YjQsIDB4MzksIDB4NDUsCisweGI0LCAweDc2LCAweDFmLCAweDhiLCAweDA4LCAweDhiLCAweDUwLCAweDA0LCAweDgzLCAweGMxLCAweDAzLCAweDgzLCAweGMyLCAweDAzLCAweDgzLCAweGUxLAorMHhmYywgMHg4MywgMHhlMiwgMHhmYywgMHg4ZCwgMHg1NCwgMHgxMSwgMHgwYywgMHgwMSwgMHhkMCwgMHgzOSwgMHg0NSwgMHhiNCwgMHg3MiwgMHgwMywgMHg0NywKKzB4ZWIsIDB4ZGMsIDB4ODEsIDB4M2IsIDB4MDcsIDB4YjAsIDB4MWYsIDB4MGUsIDB4NzUsIDB4MWIsIDB4ODUsIDB4ZjYsIDB4NzUsIDB4MTcsIDB4MGYsIDB4YjcsCisweDQzLCAweDBhLCAweDM5LCAweGY4LCAweDc1LCAweDBmLCAweGM3LCAweDQ1LCAweGQ0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDVkLCAweGMwLAorMHhlOSwgMHg5NSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg2OCwgMHg0ZCwgMHgxMCwgMHgwMSwgMHgwMCwgMHhlOCwgMHgwOCwgMHhmOSwgMHhmZiwgMHhmZiwKKzB4NTYsIDB4NjgsIDB4NjcsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4ZmQsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4NTcsIDB4NjgsIDB4NzksIDB4MTAsIDB4MDEsCisweDAwLCAweGU4LCAweGYyLCAweGY4LCAweGZmLCAweGZmLCAweDUzLCAweDY4LCAweDhiLCAweDEwLCAweDAxLCAweDAwLCAweGU4LCAweGU3LCAweGY4LCAweGZmLAorMHhmZiwgMHg4MywgMHhjNCwgMHgyMCwgMHhmZiwgMHg3MywgMHgwNCwgMHg2OCwgMHg5ZCwgMHgxMCwgMHgwMSwgMHgwMCwgMHhlOCwgMHhkNywgMHhmOCwgMHhmZiwKKzB4ZmYsIDB4ZmYsIDB4MzMsIDB4NjgsIDB4YWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4Y2IsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4MGYsIDB4YjcsIDB4NDMsCisweDBhLCAweDUwLCAweDY4LCAweGMxLCAweDEwLCAweDAxLCAweDAwLCAweGU4LCAweGJjLCAweGY4LCAweGZmLCAweGZmLCAweDgzLCAweGM0LCAweDE4LCAweGViLAorMHgwNCwgMHg4NSwgMHhmNiwgMHg3NSwgMHgzNSwgMHg1MSwgMHg2OCwgMHhkMywgMHgxMCwgMHgwMSwgMHgwMCwgMHhlOCwgMHhhOCwgMHhmOCwgMHhmZiwgMHhmZiwKKzB4ZmYsIDB4NzUsIDB4YjgsIDB4NjgsIDB4ZWUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4OWIsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NzUsIDB4YmMsCisweDY4LCAweGY3LCAweDEwLCAweDAxLCAweDAwLCAweGU4LCAweDhlLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweDc1LCAweGMwLCAweDY4LCAweDAwLCAweDExLAorMHgwMSwgMHgwMCwgMHhlOCwgMHg4MSwgMHhmOCwgMHhmZiwgMHhmZiwgMHg4MywgMHhjNCwgMHgyMCwgMHhjNywgMHg0NSwgMHhkOCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4YzcsIDB4NDUsIDB4ZGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODMsIDB4N2QsIDB4ZDQsIDB4MDAsIDB4MGYsIDB4ODQsIDB4ZmMsIDB4MDAsCisweDAwLCAweDAwLCAweDhiLCAweDdkLCAweGMwLCAweDhkLCAweDU3LCAweDBjLCAweDAzLCAweDdmLCAweDA0LCAweDM5LCAweGQ3LCAweDc2LCAweDUxLCAweDhiLAorMHgzMiwgMHg4YiwgMHg1YSwgMHgwNCwgMHg4OSwgMHg1ZCwgMHhiNCwgMHg4MywgMHhjMywgMHgwMywgMHg4ZCwgMHg0ZSwgMHgwMywgMHg4MywgMHhlMywgMHhmYywKKzB4ODMsIDB4ZTEsIDB4ZmMsIDB4OGQsIDB4NDIsIDB4MGMsIDB4MDEsIDB4Y2IsIDB4MDEsIDB4YzMsIDB4MzksIDB4ZGYsIDB4NzIsIDB4MzIsIDB4ODMsIDB4N2EsCisweDA4LCAweDAxLCAweDc1LCAweDI4LCAweDg1LCAweGY2LCAweDc1LCAweDI0LCAweDg5LCAweDU1LCAweGIwLCAweDg5LCAweDRkLCAweGFjLCAweDUyLCAweDZhLAorMHgwMCwgMHg2YSwgMHgwMCwgMHg1MCwgMHhlOCwgMHgyOSwgMHhmYywgMHhmZiwgMHhmZiwgMHg4MywgMHhjNCwgMHgxMCwgMHg4OSwgMHhjNiwgMHg4NSwgMHhjMCwKKzB4OGIsIDB4NTUsIDB4YjAsIDB4OGIsIDB4NGQsIDB4YWMsIDB4MGYsIDB4ODQsIDB4MWQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODksIDB4ZGEsIDB4ZWIsIDB4YWIsCisweDMxLCAweGQyLCAweDMxLCAweGZmLCAweDMxLCAweGY2LCAweDg1LCAweGQyLCAweDBmLCAweDk1LCAweGMzLCAweGY3LCAweGM2LCAweDAxLCAweDAwLCAweDAwLAorMHgwMCwgMHg3NSwgMHgzNCwgMHg4NCwgMHhkYiwgMHg3NCwgMHgzMCwgMHgzMSwgMHhmNiwgMHg4MywgMHg3YSwgMHgwNCwgMHgwYSwgMHg3NSwgMHgyOCwgMHg4OSwKKzB4NTUsIDB4YjQsIDB4NTAsIDB4NmEsIDB4MGEsIDB4NjgsIDB4MzUsIDB4MTEsIDB4MDEsIDB4MDAsIDB4NTcsIDB4ZTgsIDB4ZTIsIDB4ZmIsIDB4ZmYsIDB4ZmYsCisweDgzLCAweGM0LCAweDEwLCAweDhiLCAweDU1LCAweGI0LCAweDg1LCAweGMwLCAweDc1LCAweDBkLCAweDhkLCAweDQ1LCAweGI4LCAweGU4LCAweDExLCAweGZhLAorMHhmZiwgMHhmZiwgMHg4YiwgMHg1NSwgMHhiNCwgMHg4OSwgMHhjNiwgMHg4NSwgMHhmNiwgMHg3NSwgMHgwZiwgMHg4NCwgMHhkYiwgMHg3NCwgMHgwYiwgMHgzMSwKKzB4YzAsIDB4ODMsIDB4N2EsIDB4MDQsIDB4MDAsIDB4MGYsIDB4OTQsIDB4YzAsIDB4ODksIDB4YzYsIDB4ODUsIDB4ZjYsIDB4NzUsIDB4MjUsIDB4ODQsIDB4ZGIsCisweDc0LCAweDIxLCAweDgzLCAweDdhLCAweDA0LCAweDAxLCAweDc1LCAweDFiLCAweDUwLCAweDZhLCAweDAxLCAweDY4LCAweDY2LCAweDEwLCAweDAxLCAweDAwLAorMHg1NywgMHhlOCwgMHg5YywgMHhmYiwgMHhmZiwgMHhmZiwgMHg4MywgMHhjNCwgMHgxMCwgMHg4NSwgMHhjMCwgMHgwZiwgMHg5NCwgMHhjMCwgMHgwZiwgMHhiNiwKKzB4YzAsIDB4ODksIDB4YzYsIDB4ODUsIDB4ZjYsIDB4NzUsIDB4MTMsIDB4ODQsIDB4ZGIsIDB4NzQsIDB4MGYsIDB4NTcsIDB4NjgsIDB4MGEsIDB4MTEsIDB4MDEsCisweDAwLCAweGU4LCAweDcyLCAweGY3LCAweGZmLCAweGZmLCAweDVmLCAweDU4LCAweGViLCAweDA0LCAweDg1LCAweGY2LCAweDc1LCAweDEzLCAweDhkLCAweDQ1LAorMHhiOCwgMHhlOCwgMHhhZCwgMHhmOSwgMHhmZiwgMHhmZiwgMHg4NSwgMHhjMCwgMHg3NSwgMHgwNywgMHhjNywgMHg0NSwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4NTEsIDB4NjgsIDB4MjUsIDB4MTEsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4NGMsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4NWIsIDB4ODMsIDB4N2QsIDB4ZGMsCisweDAwLCAweDVlLCAweDc0LCAweDBkLCAweDUwLCAweDY4LCAweDM0LCAweDExLCAweDAxLCAweDAwLCAweGU4LCAweDM5LCAweGY3LCAweGZmLCAweGZmLCAweDU4LAorMHg1YSwgMHg4MywgMHg3ZCwgMHhkOCwgMHgwMCwgMHg3NCwgMHgwZCwgMHg1MywgMHg2OCwgMHgzZiwgMHgxMSwgMHgwMSwgMHgwMCwgMHhlOCwgMHgyNiwgMHhmNywKKzB4ZmYsIDB4ZmYsIDB4NWUsIDB4NWYsIDB4NTAsIDB4NjgsIDB4NjUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MTksIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4NWEsCisweDgzLCAweDdkLCAweGRjLCAweDAwLCAweDU5LCAweDc1LCAweDMxLCAweDgzLCAweDdkLCAweGQ4LCAweDAwLCAweDBmLCAweDg0LCAweDE2LCAweDAxLCAweDAwLAorMHgwMCwgMHg1MCwgMHg1MCwgMHg2YSwgMHgyMCwgMHg2OCwgMHhjNCwgMHg1NSwgMHgwMSwgMHgwMCwgMHhlOCwgMHhiYiwgMHhmNCwgMHhmZiwgMHhmZiwgMHhiYiwKKzB4YzAsIDB4NTUsIDB4MDEsIDB4MDAsIDB4YTMsIDB4YzAsIDB4NTUsIDB4MDEsIDB4MDAsIDB4ODMsIDB4YzQsIDB4MTAsIDB4YzcsIDB4NDUsIDB4YjQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweGU5LCAweGFhLCAweDAwLCAweDAwLCAweDAwLCAweDhiLCAweDQ1LCAweGUwLCAweDhkLCAweDU4LCAweDE4LCAweDhiLCAweDQ4LAorMHgwYywgMHgwMSwgMHhkOSwgMHg4OSwgMHg0ZCwgMHhiNCwgMHgzOSwgMHg1ZCwgMHhiNCwgMHg3NiwgMHhiYywgMHg4YiwgMHg1NSwgMHhiNCwgMHg4YiwgMHg0MywKKzB4MDQsIDB4MjksIDB4ZGEsIDB4MzksIDB4ZDAsIDB4NzcsIDB4YjAsIDB4ODMsIDB4M2IsIDB4MDEsIDB4NzUsIDB4NGYsIDB4ODMsIDB4ZTgsIDB4MDgsIDB4YjksCisweDE0LCAweDAwLCAweDAwLCAweDAwLCAweDMxLCAweGQyLCAweDhkLCAweDczLCAweDA4LCAweGY3LCAweGYxLCAweDg5LCAweDQ1LCAweGIwLCAweDMxLCAweGZmLAorMHgzOSwgMHg3ZCwgMHhiMCwgMHg3ZSwgMHgyZiwgMHg4MywgMHhmZiwgMHgxZiwgMHg3ZiwgMHgyYSwgMHgzMSwgMHhjMCwgMHg4YiwgMHgxNiwgMHg4MywgMHg3ZSwKKzB4MTAsIDB4MDEsIDB4MGYsIDB4OTUsIDB4YzAsIDB4ODMsIDB4ZWMsIDB4MDQsIDB4NDAsIDB4OGIsIDB4NGUsIDB4MDQsIDB4NDcsIDB4NTAsIDB4OGIsIDB4NDUsCisweGM4LCAweGZmLCAweDc2LCAweDBjLCAweGZmLCAweDc2LCAweDA4LCAweDgzLCAweGM2LCAweDE0LCAweGU4LCAweDI5LCAweGY5LCAweGZmLCAweGZmLCAweDgzLAorMHhjNCwgMHgxMCwgMHhlYiwgMHhjYywgMHhjNywgMHg0NSwgMHhlNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg1YiwgMHgwNCwgMHhlYiwgMHg5NiwKKzB4OGIsIDB4NDMsIDB4MTQsIDB4OGIsIDB4NTMsIDB4MDQsIDB4OGIsIDB4NGIsIDB4MDgsIDB4OGIsIDB4NzMsIDB4MGMsIDB4OGIsIDB4N2IsIDB4MTAsIDB4ODMsCisweGY4LCAweDAxLCAweDc1LCAweDA3LCAweGM3LCAweDQ1LCAweGU0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgzLCAweGVjLCAweDA0LCAweDgzLCAweGMzLAorMHgxNCwgMHg1MCwgMHg4YiwgMHg0NSwgMHhiMCwgMHg1NywgMHg1NiwgMHhlOCwgMHhlYywgMHhmOCwgMHhmZiwgMHhmZiwgMHhmZiwgMHg0NSwgMHhiNCwgMHg4MywKKzB4YzQsIDB4MTAsIDB4OGIsIDB4NDUsIDB4YjQsIDB4M2IsIDB4MDUsIDB4YzAsIDB4NTUsIDB4MDEsIDB4MDAsIDB4OGIsIDB4NDUsIDB4YzgsIDB4ODksIDB4NDUsCisweGIwLCAweDdjLCAweGJkLCAweGU4LCAweDNiLCAweGY0LCAweGZmLCAweGZmLCAweDhiLCAweDdkLCAweGIwLCAweDg5LCAweDg3LCAweGUwLCAweDAxLCAweDAwLAorMHgwMCwgMHg4YiwgMHg1ZCwgMHhjOCwgMHhlOCwgMHg3MywgMHhmNCwgMHhmZiwgMHhmZiwgMHg2NiwgMHg4OSwgMHg0MywgMHgwMiwgMHg4YiwgMHg0NSwgMHhjOCwKKzB4ODMsIDB4YjgsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4MDcsIDB4NjYsIDB4ODMsIDB4NzgsIDB4MDIsIDB4MDAsIDB4NzQsIDB4MDcsCisweGM3LCAweDQ1LCAweGU0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgzLCAweDdkLCAweGNjLCAweDAwLCAweDBmLCAweDg0LCAweGI5LCAweDAwLCAweDAwLAorMHgwMCwgMHg4YiwgMHg3NSwgMHhiYywgMHg4YiwgMHg1NSwgMHhjOCwgMHg4MywgMHg3ZCwgMHhlNCwgMHgwMCwgMHg4YiwgMHgxZSwgMHg3NCwgMHg0ZCwgMHhmNiwKKzB4YzMsIDB4MDEsIDB4NzQsIDB4NDgsIDB4OGIsIDB4NDYsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2QsIDB4ZmYsIDB4ZmYsIDB4M2YsCisweDAwLCAweDc2LCAweDA1LCAweGI4LCAweGZmLCAweGZmLCAweDNmLCAweDAwLCAweDhiLCAweGJhLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDhkLCAweDhmLAorMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzOSwgMHhjMSwgMHg3MywgMHgyNCwgMHg4ZCwgMHg4OCwgMHgwMCwgMHhmYywgMHhmZiwgMHhmZiwgMHg4OSwgMHg4YSwKKzB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODEsIDB4ZjksIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MGEsIDB4NjYsIDB4MmQsIDB4MDAsIDB4MDQsCisweDY2LCAweDg5LCAweDQyLCAweDAyLCAweGViLCAweDA2LCAweDY2LCAweGM3LCAweDQyLCAweDAyLCAweDAwLCAweGZjLCAweDgwLCAweGUzLCAweDA0LCAweDc0LAorMHgwZiwgMHg1MCwgMHg2YSwgMHhmZiwgMHhmZiwgMHg3NiwgMHgxMCwgMHg1MiwgMHhlOCwgMHhhYSwgMHhmOSwgMHhmZiwgMHhmZiwgMHg4MywgMHhjNCwgMHgxMCwKKzB4ODMsIDB4N2QsIDB4ZTQsIDB4MDAsIDB4MGYsIDB4ODQsIDB4YmQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MDYsIDB4NDAsIDB4MGYsIDB4ODQsIDB4YjQsCisweDAxLCAweDAwLCAweDAwLCAweDhiLCAweDVlLCAweDMwLCAweDhiLCAweDQ2LCAweDJjLCAweDAxLCAweGQ4LCAweDhiLCAweDdkLCAweGM4LCAweDg5LCAweDQ1LAorMHhiNCwgMHg4YiwgMHg3MywgMHhmYywgMHgzOSwgMHg1ZCwgMHhiNCwgMHgwZiwgMHg4NiwgMHg5YSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4YiwgMHgxMywgMHg4YiwKKzB4NGIsIDB4MDQsIDB4NTAsIDB4ODksIDB4ZjgsIDB4ZmYsIDB4NzMsIDB4MTAsIDB4ZmYsIDB4NzMsIDB4MGMsIDB4ZmYsIDB4NzMsIDB4MDgsIDB4MDEsIDB4ZjMsCisweGU4LCAweGUzLCAweGY3LCAweGZmLCAweGZmLCAweDgzLCAweGM0LCAweDEwLCAweGViLCAweGRhLCAweDgzLCAweDdkLCAweGQwLCAweDAwLCAweDBmLCAweDg0LAorMHhhYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4YiwgMHg3NSwgMHhiYywgMHg4YiwgMHg0NiwgMHgwYywgMHg4NSwgMHhjMCwgMHg3NCwgMHgxMCwgMHg1MiwgMHg1MCwKKzB4ZmYsIDB4NzYsIDB4MDgsIDB4ZmYsIDB4NzUsIDB4YzgsIDB4ZTgsIDB4M2MsIDB4ZjksIDB4ZmYsIDB4ZmYsIDB4ODMsIDB4YzQsIDB4MTAsIDB4OGIsIDB4NDYsCisweDE0LCAweDhiLCAweDVlLCAweDEwLCAweDg5LCAweDQ1LCAweGI0LCAweDgzLCAweDdkLCAweGI0LCAweDAwLCAweDBmLCAweDg0LCAweDQ2LCAweDAxLCAweDAwLAorMHgwMCwgMHg4MywgMHgzYiwgMHgwMSwgMHg3NSwgMHg2YiwgMHg4MywgMHg3ZCwgMHhlNCwgMHgwMCwgMHg3NCwgMHg2NSwgMHg4YiwgMHg0NSwgMHhjOCwgMHhiOSwKKzB4MTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODksIDB4NDUsIDB4YjAsIDB4OGIsIDB4NDMsIDB4MDQsIDB4ODMsIDB4ZTgsIDB4MDgsIDB4MzEsIDB4ZDIsIDB4ZjcsCisweGYxLCAweDg5LCAweDQ1LCAweGFjLCAweDhkLCAweDczLCAweDA4LCAweDMxLCAweGZmLCAweDM5LCAweDdkLCAweGFjLCAweDdlLCAweDNjLCAweDgzLCAweGZmLAorMHgxZiwgMHg3ZiwgMHgzNywgMHg4YiwgMHg0NiwgMHgxMCwgMHg4ZCwgMHg1MCwgMHhmZiwgMHhiOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MywgMHhmYSwKKzB4MDMsIDB4NzcsIDB4MDcsIDB4MGYsIDB4YjYsIDB4ODIsIDB4MTAsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ODMsIDB4ZWMsIDB4MDQsIDB4OGIsIDB4MTYsIDB4OGIsCisweDRlLCAweDA0LCAweDQ3LCAweDUwLCAweDhiLCAweDQ1LCAweGIwLCAweGZmLCAweDc2LCAweDBjLCAweGZmLCAweDc2LCAweDA4LCAweDgzLCAweGM2LCAweDE0LAorMHhlOCwgMHg0MywgMHhmNywgMHhmZiwgMHhmZiwgMHg4MywgMHhjNCwgMHgxMCwgMHhlYiwgMHhiZiwgMHhjNywgMHg0NSwgMHhlNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4OGIsIDB4NDMsIDB4MDQsIDB4MDEsIDB4YzMsIDB4MjksIDB4NDUsIDB4YjQsIDB4ZTksIDB4NzksIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ODMsIDB4N2QsCisweGQ0LCAweDAwLCAweDBmLCAweDg0LCAweGJmLCAweDAwLCAweDAwLCAweDAwLCAweDhiLCAweDU1LCAweGMwLCAweDhiLCAweDdhLCAweDA0LCAweDhkLCAweDQyLAorMHgwYywgMHgwMSwgMHhkNywgMHgzOSwgMHhjNywgMHgwZiwgMHg4NiwgMHhhYywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4YiwgMHgxMCwgMHg4ZCwgMHg0OCwgMHgwYywKKzB4OGQsIDB4NWEsIDB4MDMsIDB4ODMsIDB4ZTMsIDB4ZmMsIDB4OGQsIDB4MzQsIDB4MTksIDB4OGIsIDB4NTgsIDB4MDQsIDB4ODksIDB4NzUsIDB4YjQsIDB4OGQsCisweDczLCAweDAzLCAweDgzLCAweGU2LCAweGZjLCAweDAzLCAweDc1LCAweGI0LCAweDg5LCAweDc1LCAweGIwLCAweDM5LCAweGY3LCAweDBmLCAweDgyLCAweDg0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHg4YiwgMHgzNSwgMHg3MCwgMHgxNCwgMHgwMSwgMHgwMCwgMHg4YiwgMHg0MCwgMHgwOCwgMHg4OSwgMHg3NSwgMHhhYywgMHgzOSwKKzB4MDUsIDB4NzgsIDB4MTQsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MzUsIDB4NzQsIDB4MTQsIDB4MDEsIDB4MDAsIDB4NzUsIDB4MjcsIDB4M2IsIDB4NTUsIDB4YWMsCisweDc1LCAweDIyLCAweDUwLCAweDUyLCAweDU2LCAweDUxLCAweGU4LCAweDE3LCAweGY4LCAweGZmLCAweGZmLCAweDgzLCAweGM0LCAweDEwLCAweDg1LCAweGMwLAorMHg3NSwgMHgxMiwgMHg1MiwgMHg4ZCwgMHg0NSwgMHhiOCwgMHhmZiwgMHg3NSwgMHhiNCwgMHg1MywgMHg1MCwgMHhmZiwgMHgxNSwgMHg3YywgMHgxNCwgMHgwMSwKKzB4MDAsIDB4ODMsIDB4YzQsIDB4MTAsIDB4OGIsIDB4NDUsIDB4YjAsIDB4ZWIsIDB4OGEsIDB4OGQsIDB4N2MsIDB4MGEsIDB4MGMsIDB4ODMsIDB4N2QsIDB4YjQsCisweDA3LCAweDBmLCAweDg1LCAweGRmLCAweGZiLCAweGZmLCAweGZmLCAweDg5LCAweDU1LCAweGI0LCAweDUwLCAweDZhLCAweDA3LCAweDY4LCAweDQwLCAweDExLAorMHgwMSwgMHgwMCwgMHg1NywgMHhlOCwgMHhkYSwgMHhmNywgMHhmZiwgMHhmZiwgMHg4MywgMHhjNCwgMHgxMCwgMHg4YiwgMHg1NSwgMHhiNCwgMHg4NSwgMHhjMCwKKzB4MGYsIDB4ODUsIDB4YzAsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4YzcsIDB4NDUsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmUsIDB4MDEsIDB4MDAsCisweDAwLCAweDAwLCAweGU5LCAweGFmLCAweGZiLCAweGZmLCAweGZmLCAweGIwLCAweDgwLCAweGU2LCAweDcwLCAweDMxLCAweGMwLCAweGU2LCAweGYwLCAweGU2LAorMHhmMSwgMHhiMCwgMHgxMSwgMHhlNiwgMHgyMCwgMHhlNiwgMHhhMCwgMHhiMCwgMHgyMCwgMHhlNiwgMHgyMSwgMHhiMCwgMHgyOCwgMHhlNiwgMHhhMSwgMHhiMCwKKzB4MDQsIDB4ZTYsIDB4MjEsIDB4YjAsIDB4MDIsIDB4ZTYsIDB4YTEsIDB4YjAsIDB4MDEsIDB4ZTYsIDB4MjEsIDB4ZTYsIDB4YTEsIDB4YjAsIDB4ZmYsIDB4ZTYsCisweGExLCAweGIwLCAweGZiLCAweGU2LCAweDIxLCAweDhiLCAweDQ1LCAweGM4LCAweDhkLCAweDY1LCAweGY0LCAweDViLCAweDVlLCAweDVmLCAweDVkLCAweGMzLAorMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHg0MSwgMHg0MiwKKzB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4MDAsIDB4NDgsIDB4NjQsIDB4NzIsIDB4NTMsIDB4MDAsIDB4NDIsIDB4NjEsIDB4NjQsIDB4MjAsIDB4NzUsIDB4NmUsCisweDY5LCAweDY2LCAweDZmLCAweDcyLCAweDZkLCAweDIwLCAweDYyLCAweDZmLCAweDZmLCAweDc0LCAweDIwLCAweDY4LCAweDY1LCAweDYxLCAweDY0LCAweDY1LAorMHg3MiwgMHgyMCwgMHg2MywgMHg2OCwgMHg2NSwgMHg2MywgMHg2YiwgMHg3MywgMHg3NSwgMHg2ZCwgMHgyMSwgMHgwYSwgMHgwMCwgMHg0MiwgMHg2MSwgMHg2NCwKKzB4MjAsIDB4NDUsIDB4NGMsIDB4NDYsIDB4MjAsIDB4NzAsIDB4NjEsIDB4NzIsIDB4NjEsIDB4NmQsIDB4NjUsIDB4NzQsIDB4NjUsIDB4NzIsIDB4MjAsIDB4NzQsCisweDYxLCAweDYyLCAweDZjLCAweDY1LCAweDIxLCAweDBhLCAweDAwLCAweDIwLCAweDIwLCAweDIwLCAweDYzLCAweDY4LCAweDY1LCAweDYzLCAweDZiLCAweDczLAorMHg3NSwgMHg2ZCwgMHgyMCwgMHgzZCwgMHgyMCwgMHgyNSwgMHg3OCwgMHgwYSwgMHgwMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHg2MywKKzB4NmYsIDB4NzUsIDB4NmUsIDB4NzQsIDB4MjAsIDB4M2QsIDB4MjAsIDB4MjUsIDB4NzgsIDB4MGEsIDB4MDAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsCisweDIwLCAweDIwLCAweDIwLCAweDY4LCAweDY0LCAweDcyLCAweDIwLCAweDNkLCAweDIwLCAweDI1LCAweDc4LCAweDBhLCAweDAwLCAweDIwLCAweDIwLCAweDIwLAorMHgyMCwgMHgyMCwgMHg2MiwgMHg1ZiwgMHg3MywgMHg2OSwgMHg3YSwgMHg2NSwgMHgyMCwgMHgzZCwgMHgyMCwgMHgyNSwgMHg3OCwgMHgwYSwgMHgwMCwgMHg2MiwKKzB4NWYsIDB4NzMsIDB4NjksIDB4NjcsIDB4NmUsIDB4NjEsIDB4NzQsIDB4NzUsIDB4NzIsIDB4NjUsIDB4MjAsIDB4M2QsIDB4MjAsIDB4MjUsIDB4NzgsIDB4MGEsCisweDAwLCAweDIwLCAweDIwLCAweDYyLCAweDVmLCAweDcyLCAweDY1LCAweDYzLCAweDZmLCAweDcyLCAweDY0LCAweDczLCAweDIwLCAweDNkLCAweDIwLCAweDI1LAorMHg3OCwgMHgwYSwgMHgwMCwgMHg1NSwgMHg2ZSwgMHg2YiwgMHg2ZSwgMHg2ZiwgMHg3NywgMHg2ZSwgMHgyMCwgMHg2MiwgMHg2ZiwgMHg2ZiwgMHg3NCwgMHg2YywKKzB4NmYsIDB4NjEsIDB4NjQsIDB4NjUsIDB4NzIsIDB4MjAsIDB4NjMsIDB4NmMsIDB4NjEsIDB4NzMsIDB4NzMsIDB4MjEsIDB4MGEsIDB4MDAsIDB4NzQsIDB4NzksCisweDcwLCAweDY1LCAweDNkLCAweDI1LCAweDc4LCAweDBhLCAweDAwLCAweDY0LCAweDYxLCAweDc0LCAweDYxLCAweDNkLCAweDI1LCAweDc4LCAweDBhLCAweDAwLAorMHg3MCwgMHg2MSwgMHg3MiwgMHg2MSwgMHg2ZCwgMHgzZCwgMHgyNSwgMHg3OCwgMHgwYSwgMHgwMCwgMHg1NSwgMHg2ZSwgMHg2YiwgMHg2ZSwgMHg2ZiwgMHg3NywKKzB4NmUsIDB4MjAsIDB4NjYsIDB4NjksIDB4NzIsIDB4NmQsIDB4NzcsIDB4NjEsIDB4NzIsIDB4NjUsIDB4MjAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4M2EsCisweDIwLCAweDI1LCAweDczLCAweDBhLCAweDAwLCAweDQ2LCAweDY5LCAweDcyLCAweDZkLCAweDc3LCAweDYxLCAweDcyLCAweDY1LCAweDIwLCAweDc0LCAweDc5LAorMHg3MCwgMHg2NSwgMHgzYSwgMHgwMCwgMHgyMCwgMHg0YywgMHg2OSwgMHg2ZSwgMHg3NSwgMHg3OCwgMHg0MiwgMHg0OSwgMHg0ZiwgMHg1MywgMHgwMCwgMHgyMCwKKzB4NTAsIDB4NDMsIDB4NDIsIDB4NDksIDB4NGYsIDB4NTMsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDdhLCAweDUyLCAweDAwLCAweDAxLCAweDdjLCAweDA4LCAweDAxLCAweDFiLCAweDBjLCAweDA0LCAweDA0LCAweDg4LCAweDAxLCAweDAwLCAweDAwLAorMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMiwgMHhmMSwgMHhmZiwgMHhmZiwgMHgyMywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4NDEsIDB4MGUsIDB4MDgsIDB4ODUsIDB4MDIsIDB4NDQsIDB4MGQsIDB4MDUsIDB4NWQsIDB4YzUsIDB4MGMsIDB4MDQsIDB4MDQsIDB4MDAsIDB4MDAsCisweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDAwLCAweGU1LCAweGYxLCAweGZmLCAweGZmLCAweDFiLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHg0MSwgMHgwZSwgMHgwOCwgMHg4NSwgMHgwMiwgMHg0NSwgMHgwZCwgMHgwNSwgMHg0MSwgMHg4MywgMHgwMywgMHg1MSwgMHhjMywgMHg0MSwgMHhjNSwKKzB4MGMsIDB4MDQsIDB4MDQsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4ZjEsIDB4ZmYsIDB4ZmYsCisweDhhLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDBlLCAweDA4LCAweDg1LCAweDAyLCAweDQyLCAweDBkLCAweDA1LCAweDQ2LCAweDg3LCAweDAzLAorMHg4NiwgMHgwNCwgMHg4MywgMHgwNSwgMHgwMywgMHg3ZCwgMHgwMSwgMHhjMywgMHg0MSwgMHhjNiwgMHg0MSwgMHhjNywgMHg0MSwgMHhjNSwgMHgwYywgMHgwNCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzYsIDB4ZjMsIDB4ZmYsIDB4ZmYsCisweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDBlLCAweDA4LCAweDg1LCAweDAyLCAweDQ0LCAweDBkLCAweDA1LCAweDQyLCAweDg2LCAweDAzLAorMHg4MywgMHgwNCwgMHg3ZCwgMHhjMywgMHg0MSwgMHhjNiwgMHg0MSwgMHhjNSwgMHgwYywgMHgwNCwgMHgwNCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4YjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4ZjMsIDB4ZmYsIDB4ZmYsIDB4N2EsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGUsIDB4MDgsCisweDg1LCAweDAyLCAweDQyLCAweDBkLCAweDA1LCAweDQzLCAweDg3LCAweDAzLCAweDg2LCAweDA0LCAweDgzLCAweDA1LCAweDAyLCAweDcwLCAweGMzLCAweDQxLAorMHhjNiwgMHg0MSwgMHhjNywgMHg0MSwgMHhjNSwgMHgwYywgMHgwNCwgMHgwNCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4YTMsIDB4ZjMsIDB4ZmYsIDB4ZmYsIDB4NjUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGUsIDB4MDgsIDB4ODUsIDB4MDIsIDB4NDcsIDB4MGQsCisweDA1LCAweDQzLCAweDg3LCAweDAzLCAweDg2LCAweDA0LCAweDgzLCAweDA1LCAweDAyLCAweDU2LCAweGMzLCAweDQxLCAweGM2LCAweDQxLCAweGM3LCAweDQxLAorMHhjNSwgMHgwYywgMHgwNCwgMHgwNCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhkYywgMHhmMywgMHhmZiwgMHhmZiwKKzB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGUsIDB4MDgsIDB4ODUsIDB4MDIsIDB4NDIsIDB4MGQsIDB4MDUsIDB4NDYsIDB4ODcsIDB4MDMsCisweDg2LCAweDA0LCAweDgzLCAweDA1LCAweDAyLCAweGJmLCAweGMzLCAweDQxLCAweGM2LCAweDQxLCAweGM3LCAweDQxLCAweGM1LCAweDBjLCAweDA0LCAweDA0LAorMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMSwgMHgwMCwgMHgwMCwgMHg3YywgMHhmNCwgMHhmZiwgMHhmZiwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4NDEsIDB4MGUsIDB4MDgsIDB4ODUsIDB4MDIsIDB4NDIsIDB4MGQsIDB4MDUsIDB4NDUsIDB4YzUsIDB4MGMsIDB4MDQsIDB4MDQsIDB4MDAsIDB4MDAsCisweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweDAwLCAweDAwLCAweDY1LCAweGY0LCAweGZmLCAweGZmLCAweDBhLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHg0MSwgMHgwZSwgMHgwOCwgMHg4NSwgMHgwMiwgMHg0MiwgMHgwZCwgMHgwNSwgMHg0NiwgMHhjNSwgMHgwYywgMHgwNCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NGYsIDB4ZjQsIDB4ZmYsIDB4ZmYsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDQxLCAweDBlLCAweDA4LCAweDg1LCAweDAyLCAweDQyLCAweDBkLCAweDA1LCAweDQ1LCAweGM1LCAweDBjLCAweDA0LCAweDA0LCAweDAwLCAweDAwLAorMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgzOCwgMHhmNCwgMHhmZiwgMHhmZiwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4NDEsIDB4MGUsIDB4MDgsIDB4ODUsIDB4MDIsIDB4NDIsIDB4MGQsIDB4MDUsIDB4NDgsIDB4YzUsIDB4MGMsIDB4MDQsIDB4MDQsIDB4MDAsIDB4MDAsCisweDFjLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDAxLCAweDAwLCAweDAwLCAweDI0LCAweGY0LCAweGZmLCAweGZmLCAweDBkLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHg0MSwgMHgwZSwgMHgwOCwgMHg4NSwgMHgwMiwgMHg0MiwgMHgwZCwgMHgwNSwgMHg0OSwgMHhjNSwgMHgwYywgMHgwNCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4ZjQsIDB4ZmYsIDB4ZmYsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDQxLCAweDBlLCAweDA4LCAweDg1LCAweDAyLCAweDQyLCAweDBkLCAweDA1LCAweDQ4LCAweGM1LCAweDBjLCAweDA0LCAweDA0LCAweDAwLCAweDAwLAorMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMSwgMHgwMCwgMHgwMCwgMHhmZCwgMHhmMywgMHhmZiwgMHhmZiwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4NDEsIDB4MGUsIDB4MDgsIDB4ODUsIDB4MDIsIDB4NDQsIDB4MGQsIDB4MDUsIDB4NTIsIDB4YzUsIDB4MGMsIDB4MDQsIDB4MDQsIDB4MDAsIDB4MDAsCisweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAyLCAweDAwLCAweDAwLCAweGY1LCAweGYzLCAweGZmLCAweGZmLCAweDE4LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHg0MSwgMHgwZSwgMHgwOCwgMHg4NSwgMHgwMiwgMHg0NCwgMHgwZCwgMHgwNSwgMHg1MiwgMHhjNSwgMHgwYywgMHgwNCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ZjMsIDB4ZmYsIDB4ZmYsIDB4MWQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDQxLCAweDBlLCAweDA4LCAweDg1LCAweDAyLCAweDQ0LCAweDBkLCAweDA1LCAweDQxLCAweDgzLCAweDAzLCAweDU1LCAweGMzLCAweDQxLCAweGM1LAorMHgwYywgMHgwNCwgMHgwNCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhlNiwgMHhmMywgMHhmZiwgMHhmZiwKKzB4MjUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGUsIDB4MDgsIDB4ODUsIDB4MDIsIDB4NDQsIDB4MGQsIDB4MDUsIDB4NWYsIDB4YzUsIDB4MGMsCisweDA0LCAweDA0LCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGViLCAweGYzLCAweGZmLCAweGZmLAorMHg1YiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZSwgMHgwOCwgMHg4NSwgMHgwMiwgMHg0MiwgMHgwZCwgMHgwNSwgMHg0MywgMHg4NywgMHgwMywKKzB4ODYsIDB4MDQsIDB4ODMsIDB4MDUsIDB4MDIsIDB4NTEsIDB4YzMsIDB4NDEsIDB4YzYsIDB4NDEsIDB4YzcsIDB4NDEsIDB4YzUsIDB4MGMsIDB4MDQsIDB4MDQsCisweDFjLCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDAyLCAweDAwLCAweDAwLCAweDFhLCAweGY0LCAweGZmLCAweGZmLCAweDFiLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHg0MSwgMHgwZSwgMHgwOCwgMHg4NSwgMHgwMiwgMHg0MiwgMHgwZCwgMHgwNSwgMHg1NiwgMHhjNSwgMHgwYywgMHgwNCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ZjQsIDB4ZmYsIDB4ZmYsIDB4MzUsIDB4MDEsIDB4MDAsIDB4MDAsCisweDAwLCAweDQxLCAweDBlLCAweDA4LCAweDg1LCAweDAyLCAweDQyLCAweDBkLCAweDA1LCAweDQzLCAweDg3LCAweDAzLCAweDg2LCAweDA0LCAweDgzLCAweDA1LAorMHgwMywgMHgyYiwgMHgwMSwgMHhjMywgMHg0MSwgMHhjNiwgMHg0MSwgMHhjNywgMHg0MSwgMHhjNSwgMHgwYywgMHgwNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MWEsIDB4ZjUsIDB4ZmYsIDB4ZmYsIDB4YWUsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDQxLCAweDBlLCAweDA4LCAweDg1LCAweDAyLCAweDQyLCAweDBkLCAweDA1LCAweDQ2LCAweDg3LCAweDAzLCAweDg2LCAweDA0LCAweDgzLCAweDA1LAorMHgwMywgMHhhMSwgMHgwNiwgMHhjMywgMHg0MSwgMHhjNiwgMHg0MSwgMHhjNywgMHg0MSwgMHhjNSwgMHgwYywgMHgwNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDgsIDB4MDEsIDB4MDAsCisweGMwLCAweDU1LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwKKzB4OGMsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDRmLCAweDRmLCAweDU0LCAweDVmLCAweDQ5LCAweDRkLCAweDQxLAorMHg0NywgMHg0NSwgMHgzZCwgMHg2OCwgMHg2NSwgMHg2MSwgMHg2NCwgMHgyZSwgMHg1MywgMHgyMCwgMHg2MywgMHg2ZiwgMHg2ZSwgMHg3MywgMHg2ZiwgMHg2YywKKzB4NjUsIDB4M2QsIDB4NzQsIDB4NzQsIDB4NzksIDB4NTMsIDB4MzAsIDB4MjAsIDB4NjksIDB4NzAsIDB4M2QsIDB4NjQsIDB4NjgsIDB4NjMsIDB4NzAsIDB4MjAsCisweDcyLCAweDZmLCAweDZmLCAweDc0LCAweDNkLCAweDJmLCAweDY0LCAweDY1LCAweDc2LCAweDJmLCAweDZlLCAweDY2LCAweDczLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlX2dpdC5iYgppbmRleCAyYmNjOGQ3Li4zMzBmYTdjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rZWxmaW1hZ2UvbWtlbGZpbWFnZV9naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2VfZ2l0LmJiCkBAIC0xNywyMSArMTcsMjggQEAKICAgICAgICAgICAgIgogU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBcCiAgICAgICAgICAgIGZpbGU6Ly9maXgtbWFrZWZpbGUtdG8tZmluZC1saWJ6LnBhdGNoICAgXAorICAgICAgICAgICBmaWxlOi8vY29udmVydC5iaW4uYyBcCiAiCiAKIENMRUFOQlJPS0VOID0gIjEiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQvdXRpbC9ta2VsZkltYWdlIgogCi1DRkxBR1MgKz0gIi1mbm8tc3RhY2stcHJvdGVjdG9yIgogQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gIlwKICAgICBIT1NUX0NDPScke0JVSUxEX0NDfScgXAogICAgIEhPU1RfQ0ZMQUdTPScke0JVSUxEX0NGTEFHU30nIFwKICAgICBIT1NUX0NQUEZMQUdTPScke0JVSUxEX0NQUEZMQUdTfScgXAorICAgIEkzODZfQ0ZMQUdTPSctZm5vLXN0YWNrLXByb3RlY3RvcicgXAorICAgIElBNjRfQ0ZMQUdTPSctZm5vLXN0YWNrLXByb3RlY3RvcicgXAogIgorRVhUUkFfT0VDT05GX2FwcGVuZF94ODYtNjQgPSAiIC0td2l0aC1pMzg2PSR7SE9TVF9TWVN9IgogCiBpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKIAorZG9fY29uZmlndXJlX3ByZXBlbmQtY2xhc3MtbmF0aXZlKCkgeworCWNwICR7V09SS0RJUn0vY29udmVydC5iaW4uYyAke1N9L2xpbnV4LWkzODYvCit9CisKIGRvX2luc3RhbGxfYXBwZW5kKCkgewogCXJtZGlyICR7RH0ke2RhdGFkaXJ9L21rZWxmSW1hZ2UvZWxmMzItaTM4NgogCXJtZGlyICR7RH0ke2RhdGFkaXJ9L21rZWxmSW1hZ2UKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL21rbGlicy1uYXRpdmVfMC4xLjQzLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvbWtsaWJzLW5hdGl2ZV8wLjEuNDMuYmIKaW5kZXggYjljNmM2Zi4uYTE2MTQ3NiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvbWtsaWJzLW5hdGl2ZV8wLjEuNDMuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvbWtsaWJzLW5hdGl2ZV8wLjEuNDMuYmIKQEAgLTQsNyArNCw2IEBACiBTRUNUSU9OID0gImRldmVsIgogTElDRU5TRSA9ICJHUEx2MisiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kZWJpYW4vY29weXJpZ2h0O21kNT05OGQzMTAzN2IxM2Q4OTZlMzM4OTA3MzhlZjAxYWY2NCIKLURFUEVORFMgPSAicHl0aG9uLW5hdGl2ZSIKIAogU1JDX1VSSSA9ICJodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi8yMDE2MTEyM1QxNTIwMTFaL3Bvb2wvbWFpbi9tL21rbGlicy9ta2xpYnNfJHtQVn0udGFyLnh6IFwKIAlmaWxlOi8vYWNfaW5pdF9maXgucGF0Y2hcCkBAIC0yMCw2ICsxOSw2IEBACiAKIFVQU1RSRUFNX0NIRUNLX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vbS9ta2xpYnMvIgogCi1pbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IG5hdGl2ZSBweXRob25uYXRpdmUKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgbmF0aXZlCiAKIFMgPSAiJHtXT1JLRElSfS9ta2xpYnMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21tYy9tbWMtdXRpbHNfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tbWMvbW1jLXV0aWxzX2dpdC5iYgppbmRleCA3ODU4ODE5Li41MGFjZGIxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21tYy9tbWMtdXRpbHNfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbW1jL21tYy11dGlsc19naXQuYmIKQEAgLTQsMTEgKzQsMTIgQEAKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL21tYy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PWZhZTMyNzkyZTIwZjRkMjdhZGUxYzVhNzYyZDE2YjdkIgogCiBTUkNCUkFOQ0ggPz0gIm1hc3RlciIKLVNSQ1JFViA9ICIyY2I2Njk1ZThkZWMwMGQ4ODdiZGQ1MzA5ZDFiNTdkODM2ZmNkMjE0IgorU1JDUkVWID0gIjM3Yzg2ZTYwYzA0NDJmZWY1NzBiNzVjZDgxYWViMWRiNGQwY2JhZmQiCiAKIFBWID0gIjAuMSIKIAogU1JDX1VSSSA9ICJnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvY2piL21tYy11dGlscy5naXQ7YnJhbmNoPSR7U1JDQlJBTkNIfSIKK1VQU1RSRUFNX1ZFUlNJT05fVU5LTk9XTiA9ICIxIgogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHNfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzX2dpdC5iYgppbmRleCA0ZmJjNTRmLi40OGJhMmVlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHNfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlsc19naXQuYmIKQEAgLTUsNyArNSw3IEBACiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyBcCiAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL2NvbW1vbi5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MTc7bWQ1PWJhMDViMDc5MTJhNDRlYTJiZjgxY2U0MDkzODAwNDljIgogCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1cGRhdGUtYWx0ZXJuYXRpdmVzCiAKIERFUEVORFMgPSAiemxpYiBsem8gZTJmc3Byb2dzIHV0aWwtbGludXgiCiAKQEAgLTMwLDYgKzMwLDExIEBACiAKIEVYVFJBX09FTUFLRSA9ICInQ0M9JHtDQ30nICdSQU5MSUI9JHtSQU5MSUJ9JyAnQVI9JHtBUn0nICdDRkxBR1M9JHtDRkxBR1N9ICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3hhdHRyJywgJycsICctRFdJVEhPVVRfWEFUVFInLCBkKX0gLUkke1N9L2luY2x1ZGUnICdCVUlMRERJUj0ke1N9JyIKIAorQUxURVJOQVRJVkVfJHtQTn0gPSAiZmxhc2hfZXJhc2VhbGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZmxhc2hfZXJhc2VhbGxdID0gIiR7c2JpbmRpcn0vZmxhc2hfZXJhc2VhbGwiCisjIFVzZSBoaWdoZXIgcHJpb3JpdHkgdGhhbiBidXN5Ym94J3MgZmxhc2hfZXJhc2VhbGwgKGNyZWF0ZWQgd2hlbiBidWlsdCB3aXRoIENPTkZJR19GTEFTSF9FUkFTRUFMTCkKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW2ZsYXNoX2VyYXNlYWxsXSA9ICIxMDAiCisKIGRvX2luc3RhbGwgKCkgewogCW9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0gU0JJTkRJUj0ke3NiaW5kaXJ9IE1BTkRJUj0ke21hbmRpcn0gSU5DTFVERURJUj0ke2luY2x1ZGVkaXJ9CiB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvZGlzYWJsZS1oYXJkY29kZWQtY29uZmlncy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9kaXNhYmxlLWhhcmRjb2RlZC1jb25maWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNDU1ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvZGlzYWJsZS1oYXJkY29kZWQtY29uZmlncy5wYXRjaApAQCAtMCwwICsxLDIzIEBACitEaXNhYmxlZCByZWFkaW5nIGhvc3QgY29uZmlncy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtuYXRpdmVdCisKK1NpZ25lZC1vZmYtYnk6IEVkIEJhcnRvc2ggPGVkLmJhcnRvc2hAbGludXguaW50ZWwuY29tPgorCistLS0gbXRvb2xzLTQuMC4xOC9jb25maWcuYy5vcmlnCTIwMTctMDYtMTMgMTI6Mjc6MzguNjQ0MDAwMDAwICswMzAwCisrKysgbXRvb2xzLTQuMC4xOC9jb25maWcuYwkyMDE3LTA2LTEzIDEyOjI4OjQ3LjU3NjAwMDAwMCArMDMwMAorQEAgLTcwMSwxNCArNzAxLDYgQEAKKyAJbWVtY3B5KGRldmljZXMsIGNvbnN0X2RldmljZXMsCisgCSAgICAgICBucl9jb25zdF9kZXZpY2VzKnNpemVvZihzdHJ1Y3QgZGV2aWNlKSk7CisgCistICAgICh2b2lkKSAoKHBhcnNlKENPTkZfRklMRSwxKSB8CistCSAgICAgcGFyc2UoTE9DQUxfQ09ORl9GSUxFLDEpIHwKKy0JICAgICBwYXJzZShTWVNfQ09ORl9GSUxFLDEpKSB8fAorLQkgICAgKHBhcnNlKE9MRF9DT05GX0ZJTEUsMSkgfAorLQkgICAgIHBhcnNlKE9MRF9MT0NBTF9DT05GX0ZJTEUsMSkpKTsKKy0gICAgLyogdGhlIG9sZC1uYW1lIGNvbmZpZ3VyYXRpb24gZmlsZXMgb25seSBnZXQgZXhlY3V0ZWQgaWYgbm9uZSBvZiB0aGUKKy0gICAgICogbmV3LW5hbWUgY29uZmlnIGZpbGVzIHdlcmUgdXNlZCAqLworLQorICAgICBob21lZGlyID0gZ2V0X2hvbWVkaXIoKTsKKyAgICAgaWYgKCBob21lZGlyICl7CisgCXN0cm5jcHkoY29uZl9maWxlLCBob21lZGlyLCBNQVhQQVRITEVOICk7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHNfNC4wLjE4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzXzQuMC4xOC5iYgppbmRleCBiMGVmYzllLi5kY2QzMmVkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHNfNC4wLjE4LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29sc180LjAuMTguYmIKQEAgLTMzLDEzICszMywxMiBAQAogICAgICAgICAgICBmaWxlOi8vMDAwMS1Db250aW51ZS1ldmVuLWlmLWZzLXNpemUtaXMtbm90LWRpdmlzaWJsZS1ieS1zZWN0b3JzLnBhdGNoIFwKICAgICAgICAgICAgIgogCitTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGZpbGU6Ly9kaXNhYmxlLWhhcmRjb2RlZC1jb25maWdzLnBhdGNoIgogCiBpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCiAKIEVYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQteCIKIAotTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1saWNvbnYgIgotCiBCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCiAKIFBBQ0tBR0VDT05GSUcgPz89ICIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL25hc20vbmFzbV8yLjEyLjAyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9uYXNtL25hc21fMi4xMi4wMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI4MGI4NC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL25hc20vbmFzbV8yLjEyLjAyLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotU1VNTUFSWSA9ICJHZW5lcmFsLXB1cnBvc2UgeDg2IGFzc2VtYmxlciIKLVNFQ1RJT04gPSAiZGV2ZWwiCi1MSUNFTlNFID0gIkJTRC0yLUNsYXVzZSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTkwOTA0NDg2ZjhmYmYxODYxY2Y0Mjc1MmUxYTM5ZWZlIgotCi1TUkNfVVJJID0gImh0dHA6Ly93d3cubmFzbS51cy9wdWIvbmFzbS9yZWxlYXNlYnVpbGRzLyR7UFZ9L25hc20tJHtQVn0udGFyLmJ6MiAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJkMTU4NDNjM2ZiN2RiMzlhZjgwNTcxZWUyN2VjNmZhZCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIwMGIwODkxYzY3OGMwNjU0NDZjYTU5YmNlZTY0NzE5ZDAwOTZkNTRkNjg4NmU2ZTQ3MmFlZWUyZTE3MGFlMzI0IgotCi1pbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKLQotZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewotCWlmIFsgLWYgJHtTfS9hY2xvY2FsLm00IF0gJiYgWyAhIC1mICR7U30vYWNpbmNsdWRlLm00IF07IHRoZW4KLQkJbXYgJHtTfS9hY2xvY2FsLm00ICR7U30vYWNpbmNsdWRlLm00Ci0JZmkKLX0KLQotZG9faW5zdGFsbCgpIHsKLQlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KLQlpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuMQotCi0Jb2VfcnVubWFrZSAnSU5TVEFMTFJPT1Q9JHtEfScgaW5zdGFsbAotfQotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKLQotREVQRU5EUyA9ICJncm9mZi1uYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL25hc20vbmFzbV8yLjEzLjAxLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9uYXNtL25hc21fMi4xMy4wMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjE4Y2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9uYXNtL25hc21fMi4xMy4wMS5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIkdlbmVyYWwtcHVycG9zZSB4ODYgYXNzZW1ibGVyIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiQlNELTItQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9OTA5MDQ0ODZmOGZiZjE4NjFjZjQyNzUyZTFhMzllZmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5uYXNtLnVzL3B1Yi9uYXNtL3JlbGVhc2VidWlsZHMvJHtQVn0vbmFzbS0ke1BWfS50YXIuYnoyICIKKworU1JDX1VSSVttZDVzdW1dID0gIjFmN2Q0NjYyMDQwZDI0MzUxZGY3ZDY3MTllZDRmOTdhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA4Zjk3YmFmMGE3Zjg5MjEyOGM2NDEzY2ZhOTNiNjlkYzU4MjVmYmJkMDZjNzA5MjhhZWEwMjg4MzVkMTk4ZmEiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJaWYgWyAtZiAke1N9L2FjbG9jYWwubTQgXSAmJiBbICEgLWYgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgorCQltdiAke1N9L2FjbG9jYWwubTQgJHtTfS9hY2luY2x1ZGUubTQKKwlmaQorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLWQgJHtEfSR7bWFuZGlyfS9tYW4xCisKKwlvZV9ydW5tYWtlICdJTlNUQUxMUk9PVD0ke0R9JyBpbnN0YWxsCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitERVBFTkRTID0gImdyb2ZmLW5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbmluamEvbmluamFfMS43LjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL25pbmphL25pbmphXzEuNy4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkM2IyNzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL25pbmphL25pbmphXzEuNy4yLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiTmluamEgaXMgYSBzbWFsbCBidWlsZCBzeXN0ZW0gd2l0aCBhIGZvY3VzIG9uIHNwZWVkLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXJ0aW5lLmdpdGh1Yi5jb20vbmluamEvIgorTElDRU5TRSA9ICJBcGFjaGUtMi4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTgxNTg2YTY0YWQ0ZTQ3NmM3OTFjZGE3ZTJmMmM1MmUiCisKK0RFUEVORFMgPSAicmUyYy1uYXRpdmUgbmluamEtbmF0aXZlIgorCitTUkNSRVYgPSAiNzE3YjdiNGEzMWRiNjAyNzIwNzU4OGMwZmI4OWMzZWFkMzg0NzQ3YiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL21hcnRpbmUvbmluamEuZ2l0O2JyYW5jaD1yZWxlYXNlIgorVVBTVFJFQU1fQ0hFQ0tfR0lUVEFHUkVHRVggPSAidig/UDxwdmVyPi4qKSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKKworZG9fY29tcGlsZV9jbGFzcy1uYXRpdmUoKSB7CisJLi9jb25maWd1cmUucHkgLS1ib290c3RyYXAKK30KKworZG9fY29tcGlsZSgpIHsKKwkuL2NvbmZpZ3VyZS5weQorCW5pbmphCit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtRCAtbSAwNzU1ICAke1N9L25pbmphICR7RH0ke2JpbmRpcn0vbmluamEKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnLXV0aWxzL29wa2ctdXRpbHMvMDAwMS1Td2l0Y2gtYWxsLXNjcmlwdHMtdG8tdXNlLVB5dGhvbi0zLngucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2ctdXRpbHMvb3BrZy11dGlscy8wMDAxLVN3aXRjaC1hbGwtc2NyaXB0cy10by11c2UtUHl0aG9uLTMueC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzZhZTJmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnLXV0aWxzL29wa2ctdXRpbHMvMDAwMS1Td2l0Y2gtYWxsLXNjcmlwdHMtdG8tdXNlLVB5dGhvbi0zLngucGF0Y2gKQEAgLTAsMCArMSwxMTIgQEAKK0Zyb20gZDQyYjIzZjRmYjVkNmJkNThlOTJlOTk1ZmU1YmVmYzc2ZWZiYWUwYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogVGh1LCAyNyBBcHIgMjAxNyAxNTo0Nzo1OCArMDMwMAorU3ViamVjdDogW1BBVENIXSBTd2l0Y2ggYWxsIHNjcmlwdHMgdG8gdXNlIFB5dGhvbiAzLngKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKy0tLQorIG1ha2VQYWNrYWdlICAgICAgICAgIHwgMiArLQorIG9wa2ctY29tcGFyZS1pbmRleGVzIHwgMiArLQorIG9wa2ctZ3JhcGgtZGVwcyAgICAgIHwgMiArLQorIG9wa2ctbGlzdC1maWVsZHMgICAgIHwgMiArLQorIG9wa2ctbWFrZS1pbmRleCAgICAgIHwgMiArLQorIG9wa2ctc2hvdy1kZXBzICAgICAgIHwgMiArLQorIG9wa2ctdW5idWlsZCAgICAgICAgIHwgMiArLQorIG9wa2ctdXBkYXRlLWluZGV4ICAgIHwgMiArLQorIG9wa2cucHkgICAgICAgICAgICAgIHwgMiArLQorIDkgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbWFrZVBhY2thZ2UgYi9tYWtlUGFja2FnZQoraW5kZXggNGJkZmM1Ni4uMDIxMjRkZCAxMDA3NTUKKy0tLSBhL21ha2VQYWNrYWdlCisrKysgYi9tYWtlUGFja2FnZQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24KKysjIS91c3IvYmluL2VudiBweXRob24zCisgCisgIyBUaGUgZ2VuZXJhbCBhbGdvcml0aG0gdGhpcyBwcm9ncmFtIGZvbGxvd3MgZ29lcyBsaWtlIHRoaXM6CisgIyAgIFJ1biB0YXIgdG8gZXh0cmFjdCBjb250cm9sIGZyb20gY29udHJvbC50YXIuZ3ogZnJvbSB0aGUgcGFja2FnZS4KK2RpZmYgLS1naXQgYS9vcGtnLWNvbXBhcmUtaW5kZXhlcyBiL29wa2ctY29tcGFyZS1pbmRleGVzCitpbmRleCBiNjBkMjBhLi44MGMxMjYzIDEwMDc1NQorLS0tIGEvb3BrZy1jb21wYXJlLWluZGV4ZXMKKysrKyBiL29wa2ctY29tcGFyZS1pbmRleGVzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL2VudiBweXRob24KKysjIS91c3IvYmluL2VudiBweXRob24zCisgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKKyBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCisgCitkaWZmIC0tZ2l0IGEvb3BrZy1ncmFwaC1kZXBzIGIvb3BrZy1ncmFwaC1kZXBzCitpbmRleCA2NjUzZmQ1Li5mMWUzNzZhIDEwMDc1NQorLS0tIGEvb3BrZy1ncmFwaC1kZXBzCisrKysgYi9vcGtnLWdyYXBoLWRlcHMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKyBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAorIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KKyAKK2RpZmYgLS1naXQgYS9vcGtnLWxpc3QtZmllbGRzIGIvb3BrZy1saXN0LWZpZWxkcworaW5kZXggYzE0YTkwZi4uMjRmNzk1NSAxMDA3NTUKKy0tLSBhL29wa2ctbGlzdC1maWVsZHMKKysrKyBiL29wa2ctbGlzdC1maWVsZHMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKyBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAorIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KKyAKK2RpZmYgLS1naXQgYS9vcGtnLW1ha2UtaW5kZXggYi9vcGtnLW1ha2UtaW5kZXgKK2luZGV4IDNmNzU3ZjYuLjI5ODhmOWYgMTAwNzU1CistLS0gYS9vcGtnLW1ha2UtaW5kZXgKKysrKyBiL29wa2ctbWFrZS1pbmRleAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisrIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CisgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgorIAorZGlmZiAtLWdpdCBhL29wa2ctc2hvdy1kZXBzIGIvb3BrZy1zaG93LWRlcHMKK2luZGV4IDE1M2YyMWUuLjRlMThiNGYgMTAwNzU1CistLS0gYS9vcGtnLXNob3ctZGVwcworKysrIGIvb3BrZy1zaG93LWRlcHMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKyBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAorIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KKyAKK2RpZmYgLS1naXQgYS9vcGtnLXVuYnVpbGQgYi9vcGtnLXVuYnVpbGQKK2luZGV4IDRmMzZiZWMuLjU3NjQyYzkgMTAwNzU1CistLS0gYS9vcGtnLXVuYnVpbGQKKysrKyBiL29wa2ctdW5idWlsZAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisrIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CisgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgorIAorZGlmZiAtLWdpdCBhL29wa2ctdXBkYXRlLWluZGV4IGIvb3BrZy11cGRhdGUtaW5kZXgKK2luZGV4IDM0MWMxYzIuLjdiZmY4YTEgMTAwNzU1CistLS0gYS9vcGtnLXVwZGF0ZS1pbmRleAorKysrIGIvb3BrZy11cGRhdGUtaW5kZXgKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKyBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAorIAorIGltcG9ydCBzeXMsIG9zCitkaWZmIC0tZ2l0IGEvb3BrZy5weSBiL29wa2cucHkKK2luZGV4IDJlY2FjOGEuLjdlNjRkZTQgMTAwNjQ0CistLS0gYS9vcGtnLnB5CisrKysgYi9vcGtnLnB5CitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL2VudiBweXRob24KKysjIS91c3IvYmluL2VudiBweXRob24zCisgIyAgIENvcHlyaWdodCAoQykgMjAwMSBBbGV4YW5kZXIgUy4gR3V5IDxhN3JAYW5kZXJuLm9yZz4KKyAjICAgICAgICAgICAgICAgICAgICAgIEFuZGVybiBSZXNlYXJjaCBMYWJzCisgIworLS0gCisyLjExLjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnLXV0aWxzL29wa2ctdXRpbHNfMC4zLjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2ctdXRpbHMvb3BrZy11dGlsc18wLjMuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDZjYzhmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnLXV0aWxzL29wa2ctdXRpbHNfMC4zLjUuYmIKQEAgLTAsMCArMSw2MiBAQAorU1VNTUFSWSA9ICJBZGRpdGlvbmFsIHV0aWxpdGllcyBmb3IgdGhlIG9wa2cgcGFja2FnZSBtYW5hZ2VyIgorU1VNTUFSWV91cGRhdGUtYWx0ZXJuYXRpdmVzLW9wa2cgPSAiVXRpbGl0eSBmb3IgbWFuYWdpbmcgdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0iCitTRUNUSU9OID0gImJhc2UiCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9vcGtnLXV0aWxzIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9vcGtnLnB5O2JlZ2lubGluZT0yO2VuZGxpbmU9MTg7bWQ1PTYzY2U5ZTZiY2M0NDUxODFjZDllNGJhZjRiNGNjYzM1IgorUFJPVklERVMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3VwZGF0ZS1hbHRlcm5hdGl2ZXMnLCAndmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzJywgJycsIGQpfSIKKworU1JDX1VSSSA9ICJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS8ke0JQTn0vc25hcHNob3QvJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVN3aXRjaC1hbGwtc2NyaXB0cy10by11c2UtUHl0aG9uLTMueC5wYXRjaCBcCisiCitTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGZpbGU6Ly90YXJfaWdub3JlX2Vycm9yLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTE5ZTA5Yzc5YmYxMTUyYWFjNjJlOGExMjBkNjc5ZmYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2Y0YjA4OTEyZTI2YTNmNGY2ZjQyM2YzYjRlNzE1N2E3M2IxZjNhNzQ4M2ZjNTliMjE2ZDFhODBiNTBiMGMzOCIKKworVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCisKKyMgRm9yIG5hdGl2ZSBidWlsZHMgd2UgdXNlIHRoZSBob3N0IFB5dGhvbgorUFlUSE9OUkRFUFMgPSAicHl0aG9uMyBweXRob24zLXNoZWxsIHB5dGhvbjMtaW8gcHl0aG9uMy1tYXRoIHB5dGhvbjMtY3J5cHQgcHl0aG9uMy1sb2dnaW5nIHB5dGhvbjMtZmNudGwgcHl0aG9uMy1zdWJwcm9jZXNzIHB5dGhvbjMtcGlja2xlIHB5dGhvbjMtY29tcHJlc3Npb24gcHl0aG9uMy10ZXh0dXRpbHMgcHl0aG9uMy1zdHJpbmdvbGQiCitQWVRIT05SREVQU19jbGFzcy1uYXRpdmUgPSAiIgorCitQQUNLQUdFQ09ORklHID0gInB5dGhvbiB1cGRhdGUtYWx0ZXJuYXRpdmVzIgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIiwsLCR7UFlUSE9OUkRFUFN9IgorUEFDS0FHRUNPTkZJR1t1cGRhdGUtYWx0ZXJuYXRpdmVzXSA9ICIsLCwiCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBQUkVGSVg9JHtwcmVmaXh9IERFU1RESVI9JHtEfSBpbnN0YWxsCisJaWYgISAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd1cGRhdGUtYWx0ZXJuYXRpdmVzJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJcm0gLWYgIiR7RH0ke2JpbmRpcn0vdXBkYXRlLWFsdGVybmF0aXZlcyIKKwlmaQorCisgICAgaWYgISAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdweXRob24nLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorICAgICAgICBncmVwIC1sWiAiL3Vzci9iaW4vZW52LipweXRob24iICR7RH0ke2JpbmRpcn0vKiB8IHhhcmdzIC0wIHJtCisgICAgZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgeworCWlmIFsgLWUgIiR7RH0ke2JpbmRpcn0vdXBkYXRlLWFsdGVybmF0aXZlcyIgXTsgdGhlbgorCQlzZWQgLWkgJHtEfSR7YmluZGlyfS91cGRhdGUtYWx0ZXJuYXRpdmVzIC1lICdzLC91c3IvYmluLCR7YmluZGlyfSxnOyBzLC91c3IvbGliLCR7bm9uYXJjaF9saWJkaXJ9LGcnCisJZmkKK30KKworIyBUaGVzZSBhcmUgZW1wdHkgYW5kIHdpbGwgcHVsbCBweXRob24zLWRldiBpbnRvIGltYWdlcyB3aGVyZSBpdCB3b3VsZG4ndAorIyBoYXZlIGJlZW4gb3RoZXJ3aXNlLCBzbyBkb24ndCBnZW5lcmF0ZSB0aGVtLgorUEFDS0FHRVNfcmVtb3ZlID0gIiR7UE59LWRldiAke1BOfS1zdGF0aWNkZXYiCisKK1BBQ0tBR0VTID0rICJ1cGRhdGUtYWx0ZXJuYXRpdmVzLW9wa2ciCitGSUxFU191cGRhdGUtYWx0ZXJuYXRpdmVzLW9wa2cgPSAiJHtiaW5kaXJ9L3VwZGF0ZS1hbHRlcm5hdGl2ZXMiCitSUFJPVklERVNfdXBkYXRlLWFsdGVybmF0aXZlcy1vcGtnID0gInVwZGF0ZS1hbHRlcm5hdGl2ZXMgdXBkYXRlLWFsdGVybmF0aXZlcy1jd29ydGgiCitSUkVQTEFDRVNfdXBkYXRlLWFsdGVybmF0aXZlcy1vcGtnID0gInVwZGF0ZS1hbHRlcm5hdGl2ZXMtY3dvcnRoIgorUkNPTkZMSUNUU191cGRhdGUtYWx0ZXJuYXRpdmVzLW9wa2cgPSAidXBkYXRlLWFsdGVybmF0aXZlcy1jd29ydGgiCisKK3BrZ19wb3N0cm1fdXBkYXRlLWFsdGVybmF0aXZlcy1vcGtnKCkgeworCXJtIC1yZiAkRCR7bm9uYXJjaF9saWJkaXJ9L29wa2cvYWx0ZXJuYXRpdmVzCisJcm1kaXIgJEQke25vbmFyY2hfbGliZGlyfS9vcGtnIHx8IHRydWUKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitDTEVBTkJST0tFTiA9ICIxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnLXV0aWxzL29wa2ctdXRpbHNfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnLXV0aWxzL29wa2ctdXRpbHNfZ2l0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGVlYTBmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy11dGlscy9vcGtnLXV0aWxzX2dpdC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLVNVTU1BUlkgPSAiQWRkaXRpb25hbCB1dGlsaXRpZXMgZm9yIHRoZSBvcGtnIHBhY2thZ2UgbWFuYWdlciIKLVNVTU1BUllfdXBkYXRlLWFsdGVybmF0aXZlcy1vcGtnID0gIlV0aWxpdHkgZm9yIG1hbmFnaW5nIHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIgotU0VDVElPTiA9ICJiYXNlIgotSE9NRVBBR0UgPSAiaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvb3BrZy11dGlscyIKLUxJQ0VOU0UgPSAiR1BMdjIrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vb3BrZy5weTtiZWdpbmxpbmU9MTtlbmRsaW5lPTE4O21kNT0xNTkxNzQ5MWFkNmJmN2FjYzY2NmNhNWY3Y2MxZTA4MyIKLVBST1ZJREVTICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd1cGRhdGUtYWx0ZXJuYXRpdmVzJywgJ3ZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcycsICcnLCBkKX0iCi0KLVNSQ1JFViA9ICIxYTcwOGZkNzNkMTBjMmI3Njc3ZGQ0Y2M0ZTAxNzc0NmViYmI5MTY2IgotUFYgPSAiMC4zLjQrZ2l0JHtTUkNQVn0iCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvb3BrZy11dGlscyBcCi0iCi1TUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGZpbGU6Ly90YXJfaWdub3JlX2Vycm9yLnBhdGNoIgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1UQVJHRVRfQ0NfQVJDSCArPSAiJHtMREZMQUdTfSIKLQotUFlUSE9OUkRFUFMgPSAicHl0aG9uIHB5dGhvbi1zaGVsbCBweXRob24taW8gcHl0aG9uLW1hdGggcHl0aG9uLWNyeXB0IHB5dGhvbi1sb2dnaW5nIHB5dGhvbi1mY250bCBweXRob24tc3VicHJvY2VzcyBweXRob24tcGlja2xlIHB5dGhvbi1jb21wcmVzc2lvbiBweXRob24tdGV4dHV0aWxzIHB5dGhvbi1zdHJpbmdvbGQiCi1QWVRIT05SREVQU19jbGFzcy1uYXRpdmUgPSAiIgotCi1QQUNLQUdFQ09ORklHID0gInB5dGhvbiB1cGRhdGUtYWx0ZXJuYXRpdmVzIgotUEFDS0FHRUNPTkZJR1tweXRob25dID0gIiwsLCR7UFlUSE9OUkRFUFN9IgotUEFDS0FHRUNPTkZJR1t1cGRhdGUtYWx0ZXJuYXRpdmVzXSA9ICIsLCwiCi0KLWRvX2luc3RhbGwoKSB7Ci0Jb2VfcnVubWFrZSBQUkVGSVg9JHtwcmVmaXh9IERFU1RESVI9JHtEfSBpbnN0YWxsCi0JaWYgISAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd1cGRhdGUtYWx0ZXJuYXRpdmVzJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KLQkJcm0gLWYgIiR7RH0ke2JpbmRpcn0vdXBkYXRlLWFsdGVybmF0aXZlcyIKLQlmaQotfQotCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7Ci0JaWYgWyAtZSAiJHtEfSR7YmluZGlyfS91cGRhdGUtYWx0ZXJuYXRpdmVzIiBdOyB0aGVuCi0JCXNlZCAtaSAke0R9JHtiaW5kaXJ9L3VwZGF0ZS1hbHRlcm5hdGl2ZXMgLWUgJ3MsL3Vzci9iaW4sJHtiaW5kaXJ9LGc7IHMsL3Vzci9saWIsJHtub25hcmNoX2xpYmRpcn0sZycKLQlmaQotfQotCi1QQUNLQUdFUyA9KyAidXBkYXRlLWFsdGVybmF0aXZlcy1vcGtnIgotRklMRVNfdXBkYXRlLWFsdGVybmF0aXZlcy1vcGtnID0gIiR7YmluZGlyfS91cGRhdGUtYWx0ZXJuYXRpdmVzIgotUlBST1ZJREVTX3VwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZyA9ICJ1cGRhdGUtYWx0ZXJuYXRpdmVzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMtY3dvcnRoIgotUlJFUExBQ0VTX3VwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZyA9ICJ1cGRhdGUtYWx0ZXJuYXRpdmVzLWN3b3J0aCIKLVJDT05GTElDVFNfdXBkYXRlLWFsdGVybmF0aXZlcy1vcGtnID0gInVwZGF0ZS1hbHRlcm5hdGl2ZXMtY3dvcnRoIgotCi1wa2dfcG9zdHJtX3VwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZygpIHsKLQlybSAtcmYgJEQke25vbmFyY2hfbGliZGlyfS9vcGtnL2FsdGVybmF0aXZlcwotCXJtZGlyICREJHtub25hcmNoX2xpYmRpcn0vb3BrZyB8fCB0cnVlCi19Ci0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKLQotQ0xFQU5CUk9LRU4gPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnLWFyY2gtY29uZmlnXzEuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnLWFyY2gtY29uZmlnXzEuMC5iYgppbmRleCA2ODIxNDJhLi4wYzJkYmM5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy1hcmNoLWNvbmZpZ18xLjAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2ctYXJjaC1jb25maWdfMS4wLmJiCkBAIC0xLDQgKzEsNSBAQAogU1VNTUFSWSA9ICJBcmNoaXRlY3R1cmUtZGVwZW5kZW50IGNvbmZpZ3VyYXRpb24gZm9yIG9wa2ciCitIT01FUEFHRSA9ICJodHRwOi8vY29kZS5nb29nbGUuY29tL3Avb3BrZy8iCiBMSUNFTlNFID0gIk1JVCIKIFBBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCiBQUiA9ICJyMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnL29wa2ctY29uZmlndXJlLnNlcnZpY2UgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy9vcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlCmluZGV4IDhlNzQwMjYuLjQzMmMzZGQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnL29wa2ctY29uZmlndXJlLnNlcnZpY2UKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cvb3BrZy1jb25maWd1cmUuc2VydmljZQpAQCAtOCw3ICs4LDcgQEAKIFR5cGU9b25lc2hvdAogRW52aXJvbm1lbnRGaWxlPS1AU1lTQ09ORkRJUkAvZGVmYXVsdC9wb3N0aW5zdAogRXhlY1N0YXJ0PS1AQkFTRV9CSU5ESVJAL3NoIC1jICIgaWYgWyAkUE9TVElOU1RfTE9HR0lORyA9ICcxJyBdOyB0aGVuIEBCSU5ESVJAL29wa2cgY29uZmlndXJlID4gJExPR0ZJTEUgMj4mMTsgZWxzZSBAQklORElSQC9vcGtnIGNvbmZpZ3VyZTsgZmkiCi1FeGVjU3RhcnRQb3N0PUBCQVNFX0JJTkRJUkAvc3lzdGVtY3RsIGRpc2FibGUgb3BrZy1jb25maWd1cmUuc2VydmljZQorRXhlY1N0YXJ0UG9zdD1AQkFTRV9CSU5ESVJAL3N5c3RlbWN0bCAtLW5vLXJlbG9hZCBkaXNhYmxlIG9wa2ctY29uZmlndXJlLnNlcnZpY2UKIFN0YW5kYXJkT3V0cHV0PXN5c2xvZwogUmVtYWluQWZ0ZXJFeGl0PU5vCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnL3N0YXR1cy1jb25mZmlsZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnL3N0YXR1cy1jb25mZmlsZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZjNDA1Yi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy9zdGF0dXMtY29uZmZpbGUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAotU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KLQotRnJvbSAwODZkNTA4M2RmZTAxMDIzNjhjYjdjOGNlODliMGMwNmI2NGNhNzczIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KLURhdGU6IFR1ZSwgMTAgSmFuIDIwMTcgMTU6MjQ6NTkgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAxLzJdIG9wa2dfY21kOiBvbmx5IGxvb2sgYXQgY29uZmZpbGUgc3RhdHVzIGlmIHdlJ3JlIGdvaW5nIHRvCi0gb3V0cHV0IGl0Ci0KLVRoZSBsb29wIHRvIGNvbXBhcmUgdGhlIHJlY29yZGVkIGNvbmZmaWxlIGhhc2ggd2l0aCB0aGVpciBoYXNoIG9uIGRpc2sgaXMKLW91dHB1dHRlZCBhdCBsZXZlbCBJTkZPIGJ1dCB0aGUgbG9vcCB3YXMgZXhlY3V0ZWQgYXQgbGV2ZWwgTk9USUNFIGFuZCBoaWdoZXIuCi0KLVRoaXMgbWVhbnMgdGhhdCBpZiBhIGNvbmZmaWxlIGhhZCBiZWVuIGRlbGV0ZWQgdGhlIHN0YXR1cyBvcGVyYXRpb24gd291bGQKLXByb2R1Y2UgZXJyb3IgbWVzc2FnZXMgZm9yIG91dHB1dCBpdCBpc24ndCBkaXNwbGF5aW5nLgotCi1TaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgotLS0tCi0gbGlib3BrZy9vcGtnX2NtZC5jIHwgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvbGlib3BrZy9vcGtnX2NtZC5jIGIvbGlib3BrZy9vcGtnX2NtZC5jCi1pbmRleCBiYTU3YzZhLi4zNzQxNmZkIDEwMDY0NAotLS0tIGEvbGlib3BrZy9vcGtnX2NtZC5jCi0rKysgYi9saWJvcGtnL29wa2dfY21kLmMKLUBAIC02MzgsNyArNjM4LDcgQEAgc3RhdGljIGludCBvcGtnX2luZm9fc3RhdHVzX2NtZChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGludCBpbnN0YWxsZWRfb25seSkKLSAKLSAgICAgICAgIHBrZ19mb3JtYXR0ZWRfaW5mbyhzdGRvdXQsIHBrZyk7Ci0gCi0tICAgICAgICBpZiAob3BrZ19jb25maWctPnZlcmJvc2l0eSA+PSBOT1RJQ0UpIHsKLSsgICAgICAgIGlmIChvcGtnX2NvbmZpZy0+dmVyYm9zaXR5ID49IElORk8pIHsKLSAgICAgICAgICAgICBjb25mZmlsZV9saXN0X2VsdF90ICppdGVyOwotICAgICAgICAgICAgIGZvciAoaXRlciA9IG52X3BhaXJfbGlzdF9maXJzdCgmcGtnLT5jb25mZmlsZXMpOyBpdGVyOwotICAgICAgICAgICAgICAgICAgaXRlciA9IG52X3BhaXJfbGlzdF9uZXh0KCZwa2ctPmNvbmZmaWxlcywgaXRlcikpIHsKLS0tIAotMi44LjEKLQotRnJvbSAyMjVlMzBlMGY5ZmE3Y2ZlYWEzZjg5ZTI3MTNlNTE0N2FiMzcxZGVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KLURhdGU6IFR1ZSwgMTAgSmFuIDIwMTcgMTU6Mjg6NDcgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAyLzJdIGNvbmZmaWxlOiBncmFjZWZ1bGx5IGhhbmRsZSBkZWxldGVkIGNvbmZmaWxlcyBpbgotIGNvbmZmaWxlX2hhc19iZWVuX21vZGlmaWVkCi0KLUhhbmRsZSBjb25mZmlsZXMgdGhhdCBkb24ndCBleGlzdCBncmFjZWZ1bGx5IHNvIHRoYXQgaW5zdGVhZCBvZiBzaG93aW5nIGFuIGVycm9yCi1tZXNzYWdlIGZyb20gZmlsZV9tZDVzdW1fYWxsb2MoKSBhIG5vdGljZSB0aGF0IHRoZSBmaWxlIGhhcyBiZWVuIGRlbGV0ZWQgaXMKLXNob3duIGluc3RlYWQuCi0KLVNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+Ci0tLS0KLSBsaWJvcGtnL2NvbmZmaWxlLmMgfCA1ICsrKysrCi0gMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvbGlib3BrZy9jb25mZmlsZS5jIGIvbGlib3BrZy9jb25mZmlsZS5jCi1pbmRleCBiMmYyNDY5Li43YjRiODdiIDEwMDY0NAotLS0tIGEvbGlib3BrZy9jb25mZmlsZS5jCi0rKysgYi9saWJvcGtnL2NvbmZmaWxlLmMKLUBAIC01MSw2ICs1MSwxMSBAQCBpbnQgY29uZmZpbGVfaGFzX2JlZW5fbW9kaWZpZWQoY29uZmZpbGVfdCAqIGNvbmZmaWxlKQotICAgICB9Ci0gCi0gICAgIHJvb3RfZmlsZW5hbWUgPSByb290X2ZpbGVuYW1lX2FsbG9jKGZpbGVuYW1lKTsKLSsgICAgaWYgKCFmaWxlX2V4aXN0cyhyb290X2ZpbGVuYW1lKSkgewotKyAgICAgICAgb3BrZ19tc2coSU5GTywgIkNvbmZmaWxlICVzIGRlbGV0ZWRcbiIsIGNvbmZmaWxlLT5uYW1lKTsKLSsgICAgICAgIGZyZWUocm9vdF9maWxlbmFtZSk7Ci0rICAgICAgICByZXR1cm4gMTsKLSsgICAgfQotIAotICAgICBtZDVzdW0gPSBmaWxlX21kNXN1bV9hbGxvYyhyb290X2ZpbGVuYW1lKTsKLSAKLS0tIAotMi44LjEKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnXzAuMy40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2dfMC4zLjQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMWZkZTEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2dfMC4zLjQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi1TVU1NQVJZID0gIk9wZW4gUGFja2FnZSBNYW5hZ2VyIgotU1VNTUFSWV9saWJvcGtnID0gIk9wZW4gUGFja2FnZSBNYW5hZ2VyIGxpYnJhcnkiCi1TRUNUSU9OID0gImJhc2UiCi1IT01FUEFHRSA9ICJodHRwOi8vY29kZS5nb29nbGUuY29tL3Avb3BrZy8iCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9vcGtnL2lzc3Vlcy9saXN0IgotTElDRU5TRSA9ICJHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvb3BrZy5jO2JlZ2lubGluZT0yO2VuZGxpbmU9MjE7bWQ1PTkwNDM1YTUxOWM2ZWE2OWVmMjJlNGE4OGJjYzUyZmEwIgotCi1ERVBFTkRTID0gImxpYmFyY2hpdmUiCi0KLVBFID0gIjEiCi0KLVNSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzLyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovL29wa2ctY29uZmlndXJlLnNlcnZpY2UgXAotICAgICAgICAgICBmaWxlOi8vb3BrZy5jb25mIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtb3BrZ19jb25mLWNyZWF0ZS1vcGtnLmxvY2staW4tcnVuLWluc3RlYWQtb2YtdmFyLXJ1bi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9zdGF0dXMtY29uZmZpbGUucGF0Y2ggXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNmM1MmEwNjU0OTkwNTZhMTk2ZTBiNDVhMjdlMzkyZGUiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzUwYjkwMGI1M2I2MmE5YjI4MGI2MDFhMTk2ZjAyZGE4MTA5MWVkYTJmMzQ3OGM1MDk1MTJhYTVhMWVjOTNiZSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHN5c3RlbWQKLQotU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIm9wa2ctY29uZmlndXJlLnNlcnZpY2UiCi0KLXRhcmdldF9sb2NhbHN0YXRlZGlyIDo9ICIke2xvY2Fsc3RhdGVkaXJ9IgotT1BLR0xJQkRJUiA9ICIke3RhcmdldF9sb2NhbHN0YXRlZGlyfS9saWIiCi0KLVBBQ0tBR0VDT05GSUcgPz89ICJsaWJzb2x2IgotCi1QQUNLQUdFQ09ORklHW2dwZ10gPSAiLS1lbmFibGUtZ3BnLC0tZGlzYWJsZS1ncGcsZ3BnbWUgbGliZ3BnLWVycm9yLGdudXBnIgotUEFDS0FHRUNPTkZJR1tjdXJsXSA9ICItLWVuYWJsZS1jdXJsLC0tZGlzYWJsZS1jdXJsLGN1cmwiCi1QQUNLQUdFQ09ORklHW3NzbC1jdXJsXSA9ICItLWVuYWJsZS1zc2wtY3VybCwtLWRpc2FibGUtc3NsLWN1cmwsY3VybCBvcGVuc3NsIgotUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICItLWVuYWJsZS1vcGVuc3NsLC0tZGlzYWJsZS1vcGVuc3NsLG9wZW5zc2wiCi1QQUNLQUdFQ09ORklHW3NoYTI1Nl0gPSAiLS1lbmFibGUtc2hhMjU2LC0tZGlzYWJsZS1zaGEyNTYiCi1QQUNLQUdFQ09ORklHW3BhdGhmaW5kZXJdID0gIi0tZW5hYmxlLXBhdGhmaW5kZXIsLS1kaXNhYmxlLXBhdGhmaW5kZXIscGF0aGZpbmRlciIKLVBBQ0tBR0VDT05GSUdbbGlic29sdl0gPSAiLS13aXRoLWxpYnNvbHYsLS13aXRob3V0LWxpYnNvbHYsbGlic29sdiIKLQotRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLWxvY2Fsc3RhdGVkaXI9LyR7QG9zLnBhdGgucmVscGF0aCgnJHtsb2NhbHN0YXRlZGlyfScsICcke1NUQUdJTkdfRElSX05BVElWRX0nKX0gLS1zeXNjb25mZGlyPS8ke0Bvcy5wYXRoLnJlbHBhdGgoJyR7c3lzY29uZmRpcn0nLCAnJHtTVEFHSU5HX0RJUl9OQVRJVkV9Jyl9IgotCi1kb19pbnN0YWxsX2FwcGVuZCAoKSB7Ci0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9vcGtnCi0JaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vb3BrZy5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L29wa2cvb3BrZy5jb25mCi0JZWNobyAib3B0aW9uIGxpc3RzX2RpciAke09QS0dMSUJESVJ9L29wa2cvbGlzdHMiID4+JHtEfSR7c3lzY29uZmRpcn0vb3BrZy9vcGtnLmNvbmYKLQotCSMgV2UgbmVlZCB0byBjcmVhdGUgdGhlIGxvY2sgZGlyZWN0b3J5Ci0JaW5zdGFsbCAtZCAke0R9JHtPUEtHTElCRElSfS9vcGtnCi0KLQlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9O3RoZW4KLQkJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQotCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9vcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLwotCQlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCi0JCQktZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyBcCi0JCQktZSAncyxAQklORElSQCwke2JpbmRpcn0sZycgXAotCQkJLWUgJ3MsQFNZU1RFTURfVU5JVERJUkAsJHtzeXN0ZW1kX3VuaXRkaXJ9LGcnIFwKLQkJCSR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL29wa2ctY29uZmlndXJlLnNlcnZpY2UKLQlmaQotfQotCi1SREVQRU5EU18ke1BOfSA9ICIke1ZJUlRVQUwtUlVOVElNRV91cGRhdGUtYWx0ZXJuYXRpdmVzfSBvcGtnLWFyY2gtY29uZmlnIGxpYmFyY2hpdmUiCi1SREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgotUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlc2RrID0gIiIKLVJSRVBMQUNFU18ke1BOfSA9ICJvcGtnLW5vZ3BnIG9wa2ctY29sbGF0ZXJhbCIKLVJDT05GTElDVFNfJHtQTn0gPSAib3BrZy1jb2xsYXRlcmFsIgotUlBST1ZJREVTXyR7UE59ID0gIm9wa2ctY29sbGF0ZXJhbCIKLQotUEFDS0FHRVMgPSsgImxpYm9wa2ciCi0KLUZJTEVTX2xpYm9wa2cgPSAiJHtsaWJkaXJ9Lyouc28uKiAke09QS0dMSUJESVJ9L29wa2cvIgotRklMRVNfJHtQTn0gKz0gIiR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCi0KLUNPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L29wa2cvb3BrZy5jb25mIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2dfMC4zLjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZ18wLjMuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTUxMWI2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2dfMC4zLjUuYmIKQEAgLTAsMCArMSw3NSBAQAorU1VNTUFSWSA9ICJPcGVuIFBhY2thZ2UgTWFuYWdlciIKK1NVTU1BUllfbGlib3BrZyA9ICJPcGVuIFBhY2thZ2UgTWFuYWdlciBsaWJyYXJ5IgorU0VDVElPTiA9ICJiYXNlIgorSE9NRVBBR0UgPSAiaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL29wa2cvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vY29kZS5nb29nbGUuY29tL3Avb3BrZy9pc3N1ZXMvbGlzdCIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL29wa2cuYztiZWdpbmxpbmU9MjtlbmRsaW5lPTIxO21kNT05MDQzNWE1MTljNmVhNjllZjIyZTRhODhiY2M1MmZhMCIKKworREVQRU5EUyA9ICJsaWJhcmNoaXZlIgorCitQRSA9ICIxIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9vcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL29wa2cuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLW9wa2dfY29uZi1jcmVhdGUtb3BrZy5sb2NrLWluLXJ1bi1pbnN0ZWFkLW9mLXZhci1ydW4ucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDIwMmQwOWVhMDkzMjk0MzA3MWI4NDI2MjZjYWIxM2MiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzM0YmMyMWRlYTExMjYyMTEzZmE4NmI5MjhkMDk4MTI2MThiMzk2NmYzNTIzNTBjZjkxNmE2YWUwZDM0M2YzMiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHN5c3RlbWQKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIm9wa2ctY29uZmlndXJlLnNlcnZpY2UiCisKK3RhcmdldF9sb2NhbHN0YXRlZGlyIDo9ICIke2xvY2Fsc3RhdGVkaXJ9IgorT1BLR0xJQkRJUiA9ICIke3RhcmdldF9sb2NhbHN0YXRlZGlyfS9saWIiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJsaWJzb2x2IgorCitQQUNLQUdFQ09ORklHW2dwZ10gPSAiLS1lbmFibGUtZ3BnLC0tZGlzYWJsZS1ncGcsZ3BnbWUgbGliZ3BnLWVycm9yLGdudXBnIgorUEFDS0FHRUNPTkZJR1tjdXJsXSA9ICItLWVuYWJsZS1jdXJsLC0tZGlzYWJsZS1jdXJsLGN1cmwiCitQQUNLQUdFQ09ORklHW3NzbC1jdXJsXSA9ICItLWVuYWJsZS1zc2wtY3VybCwtLWRpc2FibGUtc3NsLWN1cmwsY3VybCBvcGVuc3NsIgorUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICItLWVuYWJsZS1vcGVuc3NsLC0tZGlzYWJsZS1vcGVuc3NsLG9wZW5zc2wiCitQQUNLQUdFQ09ORklHW3NoYTI1Nl0gPSAiLS1lbmFibGUtc2hhMjU2LC0tZGlzYWJsZS1zaGEyNTYiCitQQUNLQUdFQ09ORklHW3BhdGhmaW5kZXJdID0gIi0tZW5hYmxlLXBhdGhmaW5kZXIsLS1kaXNhYmxlLXBhdGhmaW5kZXIscGF0aGZpbmRlciIKK1BBQ0tBR0VDT05GSUdbbGlic29sdl0gPSAiLS13aXRoLWxpYnNvbHYsLS13aXRob3V0LWxpYnNvbHYsbGlic29sdiIKKworRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLWxvY2Fsc3RhdGVkaXI9LyR7QG9zLnBhdGgucmVscGF0aCgnJHtsb2NhbHN0YXRlZGlyfScsICcke1NUQUdJTkdfRElSX05BVElWRX0nKX0gLS1zeXNjb25mZGlyPS8ke0Bvcy5wYXRoLnJlbHBhdGgoJyR7c3lzY29uZmRpcn0nLCAnJHtTVEFHSU5HX0RJUl9OQVRJVkV9Jyl9IgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9vcGtnCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vb3BrZy5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L29wa2cvb3BrZy5jb25mCisJZWNobyAib3B0aW9uIGxpc3RzX2RpciAke09QS0dMSUJESVJ9L29wa2cvbGlzdHMiID4+JHtEfSR7c3lzY29uZmRpcn0vb3BrZy9vcGtnLmNvbmYKKworCSMgV2UgbmVlZCB0byBjcmVhdGUgdGhlIGxvY2sgZGlyZWN0b3J5CisJaW5zdGFsbCAtZCAke0R9JHtPUEtHTElCRElSfS9vcGtnCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9O3RoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9vcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCQlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJCQktZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyBcCisJCQktZSAncyxAQklORElSQCwke2JpbmRpcn0sZycgXAorCQkJLWUgJ3MsQFNZU1RFTURfVU5JVERJUkAsJHtzeXN0ZW1kX3VuaXRkaXJ9LGcnIFwKKwkJCSR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL29wa2ctY29uZmlndXJlLnNlcnZpY2UKKwlmaQorfQorCitSREVQRU5EU18ke1BOfSA9ICIke1ZJUlRVQUwtUlVOVElNRV91cGRhdGUtYWx0ZXJuYXRpdmVzfSBvcGtnLWFyY2gtY29uZmlnIGxpYmFyY2hpdmUiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlc2RrID0gIiIKK1JSRVBMQUNFU18ke1BOfSA9ICJvcGtnLW5vZ3BnIG9wa2ctY29sbGF0ZXJhbCIKK1JDT05GTElDVFNfJHtQTn0gPSAib3BrZy1jb2xsYXRlcmFsIgorUlBST1ZJREVTXyR7UE59ID0gIm9wa2ctY29sbGF0ZXJhbCIKKworUEFDS0FHRVMgPSsgImxpYm9wa2ciCisKK0ZJTEVTX2xpYm9wa2cgPSAiJHtsaWJkaXJ9Lyouc28uKiAke09QS0dMSUJESVJ9L29wa2cvIgorRklMRVNfJHtQTn0gKz0gIiR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L29wa2cvb3BrZy5jb25mIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcmMvb3JjXzAuNC4yNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3JjL29yY18wLjQuMjYuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0NzM0MmYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcmMvb3JjXzAuNC4yNi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLVNVTU1BUlkgPSAiT3B0aW1pc2VkIElubmVyIExvb3AgUnVudGltZSBDb21waWxlciIKLUhPTUVQQUdFID0gImh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL21vZHVsZXMvb3JjLmh0bWwiCi1MSUNFTlNFID0gIkJTRC0yLUNsYXVzZSAmIEJTRC0zLUNsYXVzZSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE0MDBiZDlkMDllOGFmNTZiOWVjOTgyYjNkODU3OTdlIgotCi1TUkNfVVJJID0gImh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9vcmMvb3JjLSR7UFZ9LnRhci54eiIKLQotU1JDX1VSSVttZDVzdW1dID0gIjhlOWJlZjY3N2JhZTI4OWQzMzI0ZDgxYzMzN2E0NTA3IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdkNTJmYTgwZWY4NDk4ODM1OWMzNDM0ZTFlZWEzMDJkMDc3YTA4OTg3YWJkZGU2OTA1Njc4ZWJjYWQ0ZmE2NDkiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBndGstZG9jCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKLQotUEFDS0FHRVMgPSsgIm9yYy1leGFtcGxlcyIKLVBBQ0tBR0VTX0RZTkFNSUMgKz0gIl5saWJvcmMtLioiCi1GSUxFU19vcmMtZXhhbXBsZXMgPSAiJHtsaWJkaXJ9L29yYy8qIgotRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyoiCi0KLXB5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKLSAgICBsaWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9JykKLSAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWJkaXIsICdebGliKC4qKVwuc29cLionLCAnbGliJXMnLCAnT1JDICVzIGxpYnJhcnknLCBleHRyYV9kZXBlbmRzPScnLCBhbGxvd19saW5rcz1UcnVlKQotfQotCi1kb19jb21waWxlX3ByZXBlbmRfY2xhc3MtbmF0aXZlICgpIHsKLSAgICBzZWQgLWkgLWUgJ3MjL3RtcCMuI2cnICR7U30vb3JjL29yY2NvZGVtZW0uYwotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcmMvb3JjXzAuNC4yNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3JjL29yY18wLjQuMjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAzZjk5MQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3JjL29yY18wLjQuMjcuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJPcHRpbWlzZWQgSW5uZXIgTG9vcCBSdW50aW1lIENvbXBpbGVyIgorSE9NRVBBR0UgPSAiaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvbW9kdWxlcy9vcmMuaHRtbCIKK0xJQ0VOU0UgPSAiQlNELTItQ2xhdXNlICYgQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTQwMGJkOWQwOWU4YWY1NmI5ZWM5ODJiM2Q4NTc5N2UiCisKK1NSQ19VUkkgPSAiaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL29yYy9vcmMtJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTgzN2RjMjBkYWNiNWI2Njg5MzViYmRlZDEwY2JiNjEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTFlNTNlNThmYzgxNThlNTk4NmExZjFhNDlhNmQ5NzBjNWIxNjQ5Mzg0MWNmN2I5ZGUyYzJiZGU3Y2UzNmI5MyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGd0ay1kb2MKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitQQUNLQUdFUyA9KyAib3JjLWV4YW1wbGVzIgorUEFDS0FHRVNfRFlOQU1JQyArPSAiXmxpYm9yYy0uKiIKK0ZJTEVTX29yYy1leGFtcGxlcyA9ICIke2xpYmRpcn0vb3JjLyoiCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vKiIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGxpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0nKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxpYmRpciwgJ15saWIoLiopXC5zb1wuKicsICdsaWIlcycsICdPUkMgJXMgbGlicmFyeScsIGV4dHJhX2RlcGVuZHM9JycsIGFsbG93X2xpbmtzPVRydWUpCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworICAgIHNlZCAtaSAtZSAncyMvdG1wIy4jZycgJHtTfS9vcmMvb3JjY29kZW1lbS5jCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvbGlidG9vbC10YWcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvbGlidG9vbC10YWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y2MDFhZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC9saWJ0b29sLXRhZy5wYXRjaApAQCAtMCwwICsxLDIxIEBACitSZXBlY3QgTElCVE9PTEZMQUdTCisKK1RoaXMgYWRkIGEga25vYiB0aGF0IGNhbiBiZSBjb250cm9sbGVkIGZyb20gZW52IHRvIHNldCBnZW5lcmljIG9wdGlvbnMKK2ZvciBsaWJ0b29sCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IHV1aWQtMS42LjIvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1dWlkLTEuNi4yLm9yaWcvTWFrZWZpbGUuaW4KKysrKyB1dWlkLTEuNi4yL01ha2VmaWxlLmluCitAQCAtNTYsNyArNTYsNyBAQCBSTSAgICAgICAgICA9IHJtIC1mCisgQ1AgICAgICAgICAgPSBjcAorIFJNRElSICAgICAgID0gcm1kaXIKKyBTSFRPT0wgICAgICA9ICQoUykvc2h0b29sCistTElCVE9PTCAgICAgPSBATElCVE9PTEAKKytMSUJUT09MICAgICA9IEBMSUJUT09MQCAkKExJQlRPT0xGTEFHUykKKyBUUlVFICAgICAgICA9IHRydWUKKyBQT0QyTUFOICAgICA9IHBvZDJtYW4KKyBQRVJMICAgICAgICA9IEBQRVJMQApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkXzEuNi4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkXzEuNi4yLmJiCmluZGV4IDg1YTFiY2YuLjVkOWNhNzkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZF8xLjYuMi5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWRfMS42LjIuYmIKQEAgLTI3LDYgKzI3LDcgQEAKIAkgICBmaWxlOi8vdXVpZC1ub3N0cmlwLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL2luc3RhbGwtcGMucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vbGRmbGFncy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWJ0b29sLXRhZy5wYXRjaCBcCiAJICAiCiBTUkNfVVJJW21kNXN1bV0gPSAiNWRiMGQ0M2E5MDIyYTZlYmJiYzI1MzM3YWUyODk0MmYiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTFhNjE1MjI1YmFhNWY4YmI2ODY4MjQ0MjNmNTBlNDQyN2FjZDNmNzBkMzk0NzY1YmRmZjMyODAxZjBmZDViMCIKQEAgLTM3LDYgKzM4LDcgQEAKIAogRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1kY2UgLS13aXRob3V0LWN4eCAtLXdpdGhvdXQtcGVybCAtLXdpdGhvdXQtcGVybC1jb21wYXQgLS13aXRob3V0LXBocCAtLXdpdGhvdXQtcGdzcWwiCiBFWFRSQV9PRUNPTkYgPSAiLS1pbmNsdWRlZGlyPSR7aW5jbHVkZWRpcn0vb3NzcCIKK0VYVFJBX09FTUFLRV9jbGFzcy10YXJnZXQgPSAiTElCVE9PTEZMQUdTPSctLXRhZz1DQyciCiAKIGRvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgewogICAjIFRoaXMgcGFja2FnZSBoYXMgYSBjb21wbGV0ZWx5IGN1c3RvbSBhY2xvY2FsLm00LCB3aGljaCBzaG91bGQgYmUgYWNpbmNsdWRlLm00LgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaGVsZi9wYXRjaGVsZi9hdm9pZGhvbGVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaGVsZi9wYXRjaGVsZi9hdm9pZGhvbGVzLnBhdGNoCmluZGV4IGEyNzM2ODguLjBiNDVjMzkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2hlbGYvcGF0Y2hlbGYvYXZvaWRob2xlcy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoZWxmL3BhdGNoZWxmL2F2b2lkaG9sZXMucGF0Y2gKQEAgLTMxLDcgKzMxLDcgQEAKIFJQCiAyMDE3LzMvNwogCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQKIAogSW5kZXg6IHBhdGNoZWxmLTAuOS9zcmMvcGF0Y2hlbGYuY2MKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2hlbGYvcGF0Y2hlbGYvZml4LWFkanVzdGluZy1zdGFydFBhZ2UucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoZWxmL3BhdGNoZWxmL2ZpeC1hZGp1c3Rpbmctc3RhcnRQYWdlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NGNiZWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoZWxmL3BhdGNoZWxmL2ZpeC1hZGp1c3Rpbmctc3RhcnRQYWdlLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK2NvbW1pdCAxY2MyMzRmZWE1NjAwMTkwZDg3MjMyOWFjYTYwZTIzNjVjZWZjMzllCitBdXRob3I6IEVkIEJhcnRvc2ggPGVkLmJhcnRvc2hAbGludXguaW50ZWwuY29tPgorRGF0ZTogICBGcmkgSnVsIDIxIDEyOjMzOjUzIDIwMTcgKzAzMDAKKworZml4IGFkanVzdGluZyBzdGFydFBhZ2UKKworc3RhcnRQYWdlIGlzIGFkanVzdGVkIHVuY29uZGl0aW9uYWxseSBmb3IgYWxsIGV4ZWN1dGFibGVzLgorVGhpcyByZXN1bHRzIGluIGluY29ycmVjdCBhZGRyZXNzZXMgYXNzaWduZWQgdG8gSU5URVJQIGFuZCBMT0FECitwcm9ncmFtIGhlYWRlcnMsIHdoaWNoIGJyZWFrcyBwYXRjaGVkIGV4ZWN1dGFibGUuCisKK0FkanVzdGluZyBzdGFydFBhZ2UgdmFyaWFibGUgb25seSB3aGVuIHN0YXJ0T2Zmc2V0ID4gc3RhcnRQYWdlCitzaG91bGQgZml4IHRoaXMuCisKK1RoaXMgY2hhbmdlIGlzIHJlbGF0ZWQgdG8gdGhlIGlzc3VlIE5peE9TIzEwCisKK1NpZ25lZC1vZmYtYnk6IEVkIEJhcnRvc2ggPGVkLmJhcnRvc2hAbGludXguaW50ZWwuY29tPgorCitHaXRodWIgUFI6IGh0dHBzOi8vZ2l0aHViLmNvbS9OaXhPUy9wYXRjaGVsZi9wdWxsLzEyNworCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitkaWZmIC0tZ2l0IGEvc3JjL3BhdGNoZWxmLmNjIGIvc3JjL3BhdGNoZWxmLmNjCitpbmRleCBjYmQzNmMwLi5lOWQ3ZWE1IDEwMDY0NAorLS0tIGEvc3JjL3BhdGNoZWxmLmNjCisrKysgYi9zcmMvcGF0Y2hlbGYuY2MKK0BAIC03MjAsMTAgKzcyMCw4IEBAIHZvaWQgRWxmRmlsZTxFbGZGaWxlUGFyYW1OYW1lcz46OnJld3JpdGVTZWN0aW9uc0xpYnJhcnkoKQorICAgICAgICBzaW5jZSBEWU4gZXhlY3V0YWJsZXMgdGVuZCB0byBzdGFydCBhdCB2aXJ0dWFsIGFkZHJlc3MgMCwgc28KKyAgICAgICAgcmV3cml0ZVNlY3Rpb25zRXhlY3V0YWJsZSgpIHdvbid0IHdvcmsgYmVjYXVzZSBpdCBkb2Vzbid0IGhhdmUKKyAgICAgICAgYW55IHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0byBncm93IGRvd253YXJkcyBpbnRvLiAqLworLSAgICBpZiAoaXNFeGVjdXRhYmxlKSB7CistICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPj0gc3RhcnRQYWdlKSB7CistICAgICAgICAgICAgZGVidWcoInNoaWZ0aW5nIG5ldyBQVF9MT0FEIHNlZ21lbnQgYnkgJWQgYnl0ZXMgdG8gd29yayBhcm91bmQgYSBMaW51eCBrZXJuZWwgYnVnXG4iLCBzdGFydE9mZnNldCAtIHN0YXJ0UGFnZSk7CistICAgICAgICB9CisrICAgIGlmIChpc0V4ZWN1dGFibGUgJiYgc3RhcnRPZmZzZXQgPiBzdGFydFBhZ2UpIHsKKysgICAgICAgIGRlYnVnKCJzaGlmdGluZyBuZXcgUFRfTE9BRCBzZWdtZW50IGJ5ICVkIGJ5dGVzIHRvIHdvcmsgYXJvdW5kIGEgTGludXgga2VybmVsIGJ1Z1xuIiwgc3RhcnRPZmZzZXQgLSBzdGFydFBhZ2UpOworICAgICAgICAgc3RhcnRQYWdlID0gc3RhcnRPZmZzZXQ7CisgICAgIH0KKyAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2hlbGYvcGF0Y2hlbGZfMC45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaGVsZi9wYXRjaGVsZl8wLjkuYmIKaW5kZXggMDFmMGU2Mi4uZDcwMzAzOSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaGVsZi9wYXRjaGVsZl8wLjkuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaGVsZi9wYXRjaGVsZl8wLjkuYmIKQEAgLTMsNiArMyw3IEBACiAgICAgICAgICAgIGZpbGU6Ly9oYW5kbGUtcmVhZC1vbmx5LWZpbGVzLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL0luY3JlYXNlLW1heFNpemUtdG8tNjRNQi5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9hdm9pZGhvbGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1hZGp1c3Rpbmctc3RhcnRQYWdlLnBhdGNoIFwKICIKIAogTElDRU5TRSA9ICJHUEx2MyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF4LXV0aWxzL3BheC11dGlsc18xLjIuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF4LXV0aWxzL3BheC11dGlsc18xLjIuMi5iYgppbmRleCA0NzZmYTZmLi45NjM1YTVlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BheC11dGlscy9wYXgtdXRpbHNfMS4yLjIuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXgtdXRpbHMvcGF4LXV0aWxzXzEuMi4yLmJiCkBAIC03LDkgKzcsNyBAQAogTElDRU5TRSA9ICJHUEx2MisiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lYjcyM2I2MTUzOWZlZWYwMTNkZTQ3NmU2OGI1YzUwYSIKIAotU1JDX1VSSSA9ICJodHRwOi8vZ2VudG9vLm9zdW9zbC5vcmcvZGlzdGZpbGVzL3BheC11dGlscy0ke1BWfS50YXIueHogXAotIgotCitTUkNfVVJJID0gImh0dHBzOi8vZGV2LmdlbnRvby5vcmcvfnZhcGllci9kaXN0L3BheC11dGlscy0ke1BWfS50YXIueHoiCiBTUkNfVVJJW21kNXN1bV0gPSAiYTU4MDQ2ODMxOGYwZmY0MmVkZjRhOGNkMzE0Y2M5NDIiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2Y0YTdmOGRiNmI0NzQzYWRkZTc1ODJmYTQ4OTkyYWQwMTc3Njc5NmZjZGUwMzA2ODM3MzJmNTYyMjEzMzdkOSIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnVyaS1wZXJsXzEuNzEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlidXJpLXBlcmxfMS43MS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMyODAzYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlidXJpLXBlcmxfMS43MS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLVNVTU1BUlkgPSAiUGVybCBtb2R1bGUgdG8gbWFuaXB1bGF0ZSBhbmQgYWNjZXNzIFVSSSBzdHJpbmdzIgotREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHRoZSBVUkkucG0gbW9kdWxlIHdpdGggZnJpZW5kcy4gXAotVGhlIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBVUkkgY2xhc3MuIFVSSSBvYmplY3RzIGNhbiBiZSB1c2VkIHRvIGFjY2VzcyBcCi1hbmQgbWFuaXB1bGF0ZSB0aGUgdmFyaW91cyBjb21wb25lbnRzIHRoYXQgbWFrZSB1cCB0aGVzZSBzdHJpbmdzLiIKLQotSE9NRVBBR0UgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9kaXN0L1VSSS8iCi1TRUNUSU9OID0gImxpYnMiCi1MSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1jNDUzZTk0ZmFlNjcyODAwZjgzYmMxYmQ3YTM4YjUzZiIKLQotREVQRU5EUyArPSAicGVybCIKLQotU1JDX1VSSSA9ICJodHRwczovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL1VSSS0ke1BWfS50YXIuZ3oiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIyNDdjM2RhMjlhNzk0ZjcyNzMwZTAxYWE1YTcxNWRhZiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI5YzhlY2EwZDdmMzllNzRiYmMxNDcwNjI5M2U2NTNiNjk5MjM4ZWViMWE3NjkwY2M5YzEzNmZiOGMyNjQ0MTE1IgotCi1TID0gIiR7V09SS0RJUn0vVVJJLSR7UFZ9IgotCi1FWFRSQV9DUEFORkxBR1MgPSAiRVhQQVRMSUJQQVRIPSR7U1RBR0lOR19MSUJESVJ9IEVYUEFUSU5DUEFUSD0ke1NUQUdJTkdfSU5DRElSfSIKLQotaW5oZXJpdCBjcGFuCi0KLWRvX2NvbXBpbGUoKSB7Ci0JZXhwb3J0IExJQkM9IiQoZmluZCAke1NUQUdJTkdfRElSX1RBUkdFVH0vJHtiYXNlX2xpYmRpcn0vIC1uYW1lICdsaWJjLSouc28nKSIKLQljcGFuX2RvX2NvbXBpbGUKLX0KLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlidXJpLXBlcmxfMS43Mi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ1cmktcGVybF8xLjcyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOTljMTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlidXJpLXBlcmxfMS43Mi5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIlBlcmwgbW9kdWxlIHRvIG1hbmlwdWxhdGUgYW5kIGFjY2VzcyBVUkkgc3RyaW5ncyIKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgVVJJLnBtIG1vZHVsZSB3aXRoIGZyaWVuZHMuIFwKK1RoZSBtb2R1bGUgaW1wbGVtZW50cyB0aGUgVVJJIGNsYXNzLiBVUkkgb2JqZWN0cyBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgXAorYW5kIG1hbmlwdWxhdGUgdGhlIHZhcmlvdXMgY29tcG9uZW50cyB0aGF0IG1ha2UgdXAgdGhlc2Ugc3RyaW5ncy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvZGlzdC9VUkkvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9YzQ1M2U5NGZhZTY3MjgwMGY4M2JjMWJkN2EzOGI1M2YiCisKK0RFUEVORFMgKz0gInBlcmwiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5jcGFuLm9yZy9hdXRob3JzL2lkL0UvRVQvRVRIRVIvVVJJLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gImNkNTZkODFlZDQyOWVmYWE5N2U3ZjNmZjA4ODUxYjQ4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjM1ZjE0NDMxZDRiMzAwZGU0YmUxMTYzYjBiNTMzMmRlMmQ3ZmJkYTRmMDVmZjFlZDE5OGE4ZTkzMzBkNDBhMzIiCisKK1MgPSAiJHtXT1JLRElSfS9VUkktJHtQVn0iCisKK0VYVFJBX0NQQU5GTEFHUyA9ICJFWFBBVExJQlBBVEg9JHtTVEFHSU5HX0xJQkRJUn0gRVhQQVRJTkNQQVRIPSR7U1RBR0lOR19JTkNESVJ9IgorCitpbmhlcml0IGNwYW4KKworZG9fY29tcGlsZSgpIHsKKwlleHBvcnQgTElCQz0iJChmaW5kICR7U1RBR0lOR19ESVJfVEFSR0VUfS8ke2Jhc2VfbGliZGlyfS8gLW5hbWUgJ2xpYmMtKi5zbycpIgorCWNwYW5fZG9fY29tcGlsZQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ4bWwtcGFyc2VyLXBlcmxfMi40NC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ4bWwtcGFyc2VyLXBlcmxfMi40NC5iYgppbmRleCBkOWJiZjcxLi5jYzNhNjYwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlieG1sLXBhcnNlci1wZXJsXzIuNDQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1wYXJzZXItcGVybF8yLjQ0LmJiCkBAIC0xLDQgKzEsNSBAQAogU1VNTUFSWSA9ICJYTUw6OlBhcnNlciAtIEEgcGVybCBtb2R1bGUgZm9yIHBhcnNpbmcgWE1MIGRvY3VtZW50cyIKK0hPTUVQQUdFID0gImh0dHBzOi8vbGliZXhwYXQuZ2l0aHViLmlvLyIKIFNFQ1RJT04gPSAibGlicyIKIExJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7YmVnaW5saW5lPTI7ZW5kbGluZT02O21kNT1jODc2N2Q3NTE2MjI5ZjA3YjI2ZTQyZDFjZjhiNTFmMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ4bWwtcGVybF8wLjA4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1wZXJsXzAuMDguYmIKaW5kZXggMmMwMTk3Ni4uMDQ3ODQyNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1wZXJsXzAuMDguYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1wZXJsXzAuMDguYmIKQEAgLTIsNiArMiw3IEBACiBkb2N1bWVudHMgZm9yIHdvcmtpbmcgd2l0aCBYTUwgaW4gUGVybC4gIGxpYnhtbC1wZXJsIHNvZnR3YXJlIFwKIHdvcmtzIGluIGNvbWJpbmF0aW9uIHdpdGggWE1MOjpQYXJzZXIsIFBlcmxTQVgsIFhNTDo6RE9NLCBcCiBYTUw6Okdyb3ZlIGFuZCBvdGhlcnMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9kaXN0L2xpYnhtbC1wZXJsLyIKIFNVTU1BUlkgPSAiQ29sbGVjdGlvbiBvZiBQZXJsIG1vZHVsZXMgZm9yIHdvcmtpbmcgd2l0aCBYTUwiCiBTRUNUSU9OID0gImxpYnMiCiBMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1zaW1wbGUtcGVybF8yLjIyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1zaW1wbGUtcGVybF8yLjIyLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjQzYmIyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ4bWwtc2ltcGxlLXBlcmxfMi4yMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLVNVTU1BUlkgPSAiUGVybCBtb2R1bGUgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgWE1MIgotREVTQ1JJUFRJT04gPSAiVGhlIFhNTDo6U2ltcGxlIFBlcmwgbW9kdWxlIHByb3ZpZGVzIGEgc2ltcGxlIEFQSSBsYXllciBcCi1vbiB0b3Agb2YgYW4gdW5kZXJseWluZyBYTUwgcGFyc2luZyBtb2R1bGUgdG8gbWFpbnRhaW4gWE1MIGZpbGVzIFwKLShlc3BlY2lhbGx5IGNvbmZpZ3VyYXRpb24gZmlsZXMpLiBJdCBpcyBhIGJsdW50IHJld3JpdGUgb2YgWE1MOjpTaW1wbGUgXAotKGJ5IEdyYW50IE1jTGVhbikgdG8gdXNlIHRoZSBYTUw6OkxpYlhNTCBwYXJzZXIgZm9yIFhNTCBzdHJ1Y3R1cmVzLCBcCi13aGVyZSB0aGUgb3JpZ2luYWwgdXNlcyBwbGFpbiBQZXJsIG9yIFNBWCBwYXJzZXJzLiIKLUhPTUVQQUdFID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvfm1hcmtvdi9YTUwtTGliWE1MLVNpbXBsZS0wLjkzL2xpYi9YTUwvTGliWE1ML1NpbXBsZS5wb2QiCi1TRUNUSU9OID0gImxpYnMiCi1MSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZmExMTg3ZmNlZGEwMGVlZTEwYjYyOTYxNDA3ZWE3YmUiCi1ERVBFTkRTICs9ICJsaWJ4bWwtcGFyc2VyLXBlcmwiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3d3dy5jcGFuLm9yZy9tb2R1bGVzL2J5LW1vZHVsZS9YTUwvWE1MLVNpbXBsZS0ke1BWfS50YXIuZ3oiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIwOTE0YWJkZGZjZTc0OTQ1M2VkODliNTQwMjlmMjY0MyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJiOTQ1MGVmMjJlYTk2NDRhZTVkNmFkYTA4NmRjNDMwMGZhMTA1YmUwNTBhMjAzMGViZDRlZmQyOGMxOThlYjQ5IgotCi1TID0gIiR7V09SS0RJUn0vWE1MLVNpbXBsZS0ke1BWfSIKLQotRVhUUkFfUEVSTEZMQUdTID0gIi1JICR7UEVSTEhPU1RMSUJ9IgotCi1pbmhlcml0IGNwYW4KLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlieG1sLXNpbXBsZS1wZXJsXzIuMjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlieG1sLXNpbXBsZS1wZXJsXzIuMjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNmMmVlYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ4bWwtc2ltcGxlLXBlcmxfMi4yNC5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIlBlcmwgbW9kdWxlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIFhNTCIKK0RFU0NSSVBUSU9OID0gIlRoZSBYTUw6OlNpbXBsZSBQZXJsIG1vZHVsZSBwcm92aWRlcyBhIHNpbXBsZSBBUEkgbGF5ZXIgXAorb24gdG9wIG9mIGFuIHVuZGVybHlpbmcgWE1MIHBhcnNpbmcgbW9kdWxlIHRvIG1haW50YWluIFhNTCBmaWxlcyBcCisoZXNwZWNpYWxseSBjb25maWd1cmF0aW9uIGZpbGVzKS4gSXQgaXMgYSBibHVudCByZXdyaXRlIG9mIFhNTDo6U2ltcGxlIFwKKyhieSBHcmFudCBNY0xlYW4pIHRvIHVzZSB0aGUgWE1MOjpMaWJYTUwgcGFyc2VyIGZvciBYTUwgc3RydWN0dXJlcywgXAord2hlcmUgdGhlIG9yaWdpbmFsIHVzZXMgcGxhaW4gUGVybCBvciBTQVggcGFyc2Vycy4iCitIT01FUEFHRSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL35tYXJrb3YvWE1MLUxpYlhNTC1TaW1wbGUtMC45My9saWIvWE1ML0xpYlhNTC9TaW1wbGUucG9kIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTIzNDc3ZTE4YTBkMDQzOTJjZGY0NGFlNzBlNDliNDk1IgorREVQRU5EUyArPSAibGlieG1sLXBhcnNlci1wZXJsIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuY3Bhbi5vcmcvbW9kdWxlcy9ieS1tb2R1bGUvWE1ML1hNTC1TaW1wbGUtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWNkMmU4ZTM0MjExNjBjNDIyNzc1MjNkNWIyZjRkZDIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWExNDgxOWZkMTdjNzVmYmI5MGFkY2VjMDQ0NmNlYWIzNTZjYWIwY2NhZmY4NzBmMmUxNjU5MjA1ZGMyNDI0ZiIKKworUyA9ICIke1dPUktESVJ9L1hNTC1TaW1wbGUtJHtQVn0iCisKK0VYVFJBX1BFUkxGTEFHUyA9ICItSSAke1BFUkxIT1NUTElCfSIKKworaW5oZXJpdCBjcGFuCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtbmF0aXZlXzUuMjQuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLW5hdGl2ZV81LjI0LjEuYmIKaW5kZXggZTAxZDExZi4uNmM1NmE3ZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtbmF0aXZlXzUuMjQuMS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC1uYXRpdmVfNS4yNC4xLmJiCkBAIC0zMiw2ICszMiw3IEBACiAJCS1EY2M9IiR7Q0N9IiBcCiAJCS1EY2ZsYWdzPSIke0NGTEFHU30iIFwKIAkJLURsZGZsYWdzPSIke0xERkxBR1N9IiBcCisJCS1EbGRkbGZsYWdzPSIke0xERkxBR1N9IC1zaGFyZWQiIFwKIAkJLURjZl9ieT0iT3BlbiBFbWJlZGRlZCIgXAogCQktRHByZWZpeD0ke3ByZWZpeH0gXAogCQktRHZlbmRvcnByZWZpeD0ke3ByZWZpeH0gXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvMDAwMS1Db25maWd1cmUtUmVtb3ZlLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nLWZvci1uYXRpdmUtLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvMDAwMS1Db25maWd1cmUtUmVtb3ZlLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nLWZvci1uYXRpdmUtLnBhdGNoCmluZGV4IDczOTFhYzUuLjE0YTA1ZDIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLzAwMDEtQ29uZmlndXJlLVJlbW92ZS1mc3RhY2stcHJvdGVjdG9yLXN0cm9uZy1mb3ItbmF0aXZlLS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC8wMDAxLUNvbmZpZ3VyZS1SZW1vdmUtZnN0YWNrLXByb3RlY3Rvci1zdHJvbmctZm9yLW5hdGl2ZS0ucGF0Y2gKQEAgLTEwLDcgKzEwLDcgQEAKIAogW1lPQ1RPICMxMDMzOF0KIAotVXBzdHJlYW0tc3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQogCiBbMV0gaHR0cDovL2Vycm9ycy55b2N0b3Byb2plY3Qub3JnL0Vycm9ycy9EZXRhaWxzLzEwOTU4OS8KIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2NwYW4tbWlzc2luZy1zaXRlLWRpcnMuZGlmZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9jcGFuLW1pc3Npbmctc2l0ZS1kaXJzLmRpZmYKaW5kZXggYTYzYjk2OC4uYzU5NzcwMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2NwYW4tbWlzc2luZy1zaXRlLWRpcnMuZGlmZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vY3Bhbi1taXNzaW5nLXNpdGUtZGlycy5kaWZmCkBAIC0xMyw2ICsxMyw3IEBACiAKIEJ1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNjg4ODQyCiBQYXRjaC1OYW1lOiBkZWJpYW4vY3Bhbi1taXNzaW5nLXNpdGUtZGlycy5kaWZmCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIC0tLQogIGNwYW4vQ1BBTi9saWIvQ1BBTi9GaXJzdFRpbWUucG0gfCAzMSArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tCiAgMSBmaWxlIGNoYW5nZWQsIDI3IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vY3Bhbl9kZWZpbnN0YWxsZGlycy5kaWZmIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2NwYW5fZGVmaW5zdGFsbGRpcnMuZGlmZgppbmRleCA2YjUyOTUwLi41NzJmMTQ5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vY3Bhbl9kZWZpbnN0YWxsZGlycy5kaWZmCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9jcGFuX2RlZmluc3RhbGxkaXJzLmRpZmYKQEAgLTksNiArOSw3IEBACiBvcmRlcmluZywgYnV0IG5vdCBvdXJzLgogCiBQYXRjaC1OYW1lOiBkZWJpYW4vY3Bhbl9kZWZpbnN0YWxsZGlycy5kaWZmCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIC0tLQogIGNwYW4vQ1BBTi9saWIvQ1BBTi9GaXJzdFRpbWUucG0gfCA0ICsrLS0KICAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2RiX2ZpbGVfdmVyLmRpZmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZGJfZmlsZV92ZXIuZGlmZgppbmRleCAyODBiZjExLi4wODYxNjUwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZGJfZmlsZV92ZXIuZGlmZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZGJfZmlsZV92ZXIuZGlmZgpAQCAtOCw2ICs4LDcgQEAKIFBhY2thZ2UgZGVwZW5kZW5jaWVzIGVuc3VyZSB0aGUgY29ycmVjdCBsaWJyYXJ5IGlzIGxpbmtlZCBhdCBydW4tdGltZS4KIAogUGF0Y2gtTmFtZTogZGViaWFuL2RiX2ZpbGVfdmVyLmRpZmYKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZwogLS0tCiAgY3Bhbi9EQl9GaWxlL3ZlcnNpb24uYyB8IDIgKysKICAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZGVwcmVjYXRlLXdpdGgtYXB0LmRpZmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZGVwcmVjYXRlLXdpdGgtYXB0LmRpZmYKaW5kZXggNjAxZWU0Yy4uYzJhYzRhMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2RlcHJlY2F0ZS13aXRoLWFwdC5kaWZmCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9kZXByZWNhdGUtd2l0aC1hcHQuZGlmZgpAQCAtMTUsNiArMTUsNyBAQAogc2VwYXJhdGUgcGFja2FnZXMgaW5zdGVhZC4KIAogUGF0Y2gtTmFtZTogZGViaWFuL2RlcHJlY2F0ZS13aXRoLWFwdC5kaWZmCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIC0tLQogIGxpYi9kZXByZWNhdGUucG0gfCAxNSArKysrKysrKysrKysrKy0KICAxIGZpbGUgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2RvY19pbmZvLmRpZmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZG9jX2luZm8uZGlmZgppbmRleCBmYmVhMmVlLi40NjYyZWNkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZG9jX2luZm8uZGlmZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZG9jX2luZm8uZGlmZgpAQCAtNiw2ICs2LDcgQEAKIEluZGljYXRlIHRoYXQgdGhlIHVzZXIgbmVlZHMgdG8gaW5zdGFsbCB0aGUgcGVybC1kb2MgcGFja2FnZS4KIAogUGF0Y2gtTmFtZTogZGViaWFuL2RvY19pbmZvLmRpZmYKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZwogLS0tCiAgcG9kL3BlcmwucG9kIHwgMTIgKysrKysrKysrKy0tCiAgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZW5jMnhzX2luYy5kaWZmIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2VuYzJ4c19pbmMuZGlmZgppbmRleCBlMDc0YjIwLi5iM2JkNThjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZW5jMnhzX2luYy5kaWZmCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9lbmMyeHNfaW5jLmRpZmYKQEAgLTExLDYgKzExLDcgQEAKICAgaXNzdWVzIHdpdGggZm9sbG93ID0+IDEgKHNlZSAjNjAzNjg2IGFuZCBbcnQuY3Bhbi5vcmcgIzY0NTg1XSkKIAogUGF0Y2gtTmFtZTogZGViaWFuL2VuYzJ4c19pbmMuZGlmZgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICBjcGFuL0VuY29kZS9iaW4vZW5jMnhzIHwgOCArKysrLS0tLQogIHQvcG9ydGluZy9jdXN0b21pemVkLnQgfCAzICsrKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2Vycm5vX3Zlci5kaWZmIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2Vycm5vX3Zlci5kaWZmCmluZGV4IDNkMDkyMjkuLmE5NjVmYmUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9lcnJub192ZXIuZGlmZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZXJybm9fdmVyLmRpZmYKQEAgLTExLDcgKzExLDcgQEAKIGNvbXBhdGlibGUsIGJ1dCBidWlsdCBvbiBhIGRpZmZlcmVudCBtYWNoaW5lLgogCiBQYXRjaC1OYW1lOiBkZWJpYW4vZXJybm9fdmVyLmRpZmYKLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICBleHQvRXJybm8vRXJybm9fcG0uUEwgfCA1IC0tLS0tCiAgMSBmaWxlIGNoYW5nZWQsIDUgZGVsZXRpb25zKC0pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZXh0dXRpbHNfc2V0X2xpYnBlcmxfcGF0aC5kaWZmIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2V4dHV0aWxzX3NldF9saWJwZXJsX3BhdGguZGlmZgppbmRleCBhZGI0YmQ5Li5lMDIzMDM4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZXh0dXRpbHNfc2V0X2xpYnBlcmxfcGF0aC5kaWZmCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9leHR1dGlsc19zZXRfbGlicGVybF9wYXRoLmRpZmYKQEAgLTcsNiArNyw3IEBACiBDT1JFIGRpcmVjdG9yeSB0byBtYXRjaCBvdGhlciBzdGF0aWMgbGlicmFyaWVzLgogCiBQYXRjaC1OYW1lOiBkZWJpYW4vZXh0dXRpbHNfc2V0X2xpYnBlcmxfcGF0aC5kaWZmCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIC0tLQogIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIHwgMiArLQogIHBwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiArLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2Zha2Vyb290LmRpZmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZmFrZXJvb3QuZGlmZgppbmRleCBlYzQ2MWNmLi5iZGYzNGQxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZmFrZXJvb3QuZGlmZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZmFrZXJvb3QuZGlmZgpAQCAtMTEsNiArMTEsNyBAQAogcnVsZSB3aGVyZSB0aGUgTWFrZWZpbGUgaXMgY3JlYXRlZCwgYnV0IGlzIGZvciB0aGUgY2xlYW4vYmluYXJ5KiB0YXJnZXRzLgogCiBQYXRjaC1OYW1lOiBkZWJpYW4vZmFrZXJvb3QuZGlmZgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICBNYWtlZmlsZS5TSCB8IDcgKystLS0tLQogIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZmluZF9odG1sMnRleHQuZGlmZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maW5kX2h0bWwydGV4dC5kaWZmCmluZGV4IGQzMTllNzUuLjA4MjcwOTEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maW5kX2h0bWwydGV4dC5kaWZmCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maW5kX2h0bWwydGV4dC5kaWZmCkBAIC0xNiw2ICsxNiw3IEBACiBbTWFpbnRhaW5lcidzIG5vdGU6IGh0bWwydGV4dCBpbiBEZWJpYW4gaXMgbm90IHRoZSBzYW1lIGltcGxlbWVudGF0aW9uCiBhcyB0aGUgaHRtbDJ0ZXh0LnBsIHdoaWNoIGlzIGV4cGVjdGVkLCBidXQgc2hvdWxkIHByb3ZpZGUgc2ltaWxhcgogZnVuY3Rpb25hbGl0eV0uCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIC0tLQogIGNwYW4vQ1BBTi9saWIvQ1BBTi9EaXN0cmlidXRpb24ucG0gfCAyICstCiAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvZG9jdW1lbnRfbWFrZW1ha2VyX2NjZmxhZ3MuZGlmZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9kb2N1bWVudF9tYWtlbWFrZXJfY2NmbGFncy5kaWZmCmluZGV4IDYxYTkyNzEuLmYzZDkyNTggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9kb2N1bWVudF9tYWtlbWFrZXJfY2NmbGFncy5kaWZmCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9kb2N1bWVudF9tYWtlbWFrZXJfY2NmbGFncy5kaWZmCkBAIC0xMCw2ICsxMCw3IEBACiBiaW5hcnkgaW50ZXJmYWNlIG9uIHNvbWUgcGxhdGZvcm1zLgogCiBQYXRjaC1OYW1lOiBmaXhlcy9kb2N1bWVudF9tYWtlbWFrZXJfY2NmbGFncy5kaWZmCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIC0tLQogIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NYWtlTWFrZXIucG0gfCA0ICsrKysKICAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvbWVtb2l6ZV9zdG9yYWJsZV9uc3RvcmUuZGlmZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9tZW1vaXplX3N0b3JhYmxlX25zdG9yZS5kaWZmCmluZGV4IDUyNWY5NjIuLmQ5YjM2ZjYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9tZW1vaXplX3N0b3JhYmxlX25zdG9yZS5kaWZmCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9tZW1vaXplX3N0b3JhYmxlX25zdG9yZS5kaWZmCkBAIC00Nyw2ICs0Nyw3IEBACiBCdWc6IGh0dHBzOi8vcnQuY3Bhbi5vcmcvUHVibGljL0J1Zy9EaXNwbGF5Lmh0bWw/aWQ9Nzc3OTAKIEZvcndhcmRlZDogaHR0cHM6Ly9ydC5jcGFuLm9yZy9QdWJsaWMvQnVnL0Rpc3BsYXkuaHRtbD9pZD03Nzc5MAogUGF0Y2gtTmFtZTogZml4ZXMvbWVtb2l6ZV9zdG9yYWJsZV9uc3RvcmUuZGlmZgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICBjcGFuL01lbW9pemUvTWVtb2l6ZS9TdG9yYWJsZS5wbSB8ICAyICstCiAgY3Bhbi9NZW1vaXplL3QvdGllX3N0b3JhYmxlLnQgICAgfCAyNCArKysrKysrKysrKysrKysrKysrKy0tLS0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9uZXRfc210cF9kb2NzLmRpZmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvbmV0X3NtdHBfZG9jcy5kaWZmCmluZGV4IDNjMzE5NzIuLmFmY2Y3ZmIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9uZXRfc210cF9kb2NzLmRpZmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL25ldF9zbXRwX2RvY3MuZGlmZgpAQCAtNyw2ICs3LDcgQEAKIEJ1ZzogaHR0cDovL3J0LmNwYW4ub3JnL1B1YmxpYy9CdWcvRGlzcGxheS5odG1sP2lkPTM2MDM4CiAKIFBhdGNoLU5hbWU6IGZpeGVzL25ldF9zbXRwX2RvY3MuZGlmZgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICBjcGFuL2xpYm5ldC9saWIvTmV0L1NNVFAucG0gfCAxICsKICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wZXJsLUNubi5kaWZmIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BlcmwtQ25uLmRpZmYKaW5kZXggYjU1NjRmZC4uOWJkZjQxYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BlcmwtQ25uLmRpZmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BlcmwtQ25uLmRpZmYKQEAgLTEyLDYgKzEyLDcgQEAKIEJ1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc4ODYzNgogT3JpZ2luOiB1cHN0cmVhbSwgaHR0cDovL3Blcmw1LmdpdC5wZXJsLm9yZy9wZXJsLmdpdC9jb21taXQvODlkODRmZjk2NQogUGF0Y2gtTmFtZTogZml4ZXMvcGVybC1Dbm4uZGlmZgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICB0L3J1bi9zd2l0Y2hDLnQgfCAgNyArKysrKystCiAgdXRpbC5jICAgICAgICAgIHwgMTcgKysrKysrKystLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RfbWFuX3JlcHJvZHVjaWJsZV9kYXRlLmRpZmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kX21hbl9yZXByb2R1Y2libGVfZGF0ZS5kaWZmCmluZGV4IDdjOWNhODYuLmQyMzU3M2YgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RfbWFuX3JlcHJvZHVjaWJsZV9kYXRlLmRpZmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZF9tYW5fcmVwcm9kdWNpYmxlX2RhdGUuZGlmZgpAQCAtMTMsNiArMTMsNyBAQAogQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy83NTk0MDUKIE9yaWdpbjogdXBzdHJlYW0KIFBhdGNoLU5hbWU6IGZpeGVzL3BvZF9tYW5fcmVwcm9kdWNpYmxlX2RhdGUuZGlmZgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICBjcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbSAgfCA2OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KICBjcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQgfCAyOSArKysrKysrKysrKysrLS0tLS0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tZW1wdHktZGF0ZS5kaWZmIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi1lbXB0eS1kYXRlLmRpZmYKaW5kZXggN2ViYmY5Yy4uOWRlMjliOCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi1lbXB0eS1kYXRlLmRpZmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi1lbXB0eS1kYXRlLmRpZmYKQEAgLTEwLDYgKzEwLDcgQEAKIE9yaWdpbjogdXBzdHJlYW0sIGh0dHA6Ly9naXQuZXlyaWUub3JnLz9wPXBlcmwvcG9kbGF0b3JzLmdpdDthPWNvbW1pdGRpZmY7aD1lMGU5ZmNiNTNlOGZjOTU0YjJiMTk1NTM4NWVlYTE4YzI3Zjg2OWFmCiBCdWctRGViaWFuOiBodHRwczovL2J1Z3MuZGViaWFuLm9yZy83ODAyNTkKIFBhdGNoLU5hbWU6IGZpeGVzL3BvZG1hbi1lbXB0eS1kYXRlLmRpZmYKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZwogLS0tCiAgY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0gIHwgMiArLQogIGNwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudCB8IDYgKysrKystCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kbWFuLXBpcGUuZGlmZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tcGlwZS5kaWZmCmluZGV4IDFhNjAzNjEuLmQ4ODU4ZDggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tcGlwZS5kaWZmCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tcGlwZS5kaWZmCkBAIC0xNCw2ICsxNCw3IEBACiBPcmlnaW46IHVwc3RyZWFtLCBodHRwOi8vZ2l0LmV5cmllLm9yZy8/cD1wZXJsL3BvZGxhdG9ycy5naXQ7YT1jb21taXRkaWZmO2g9ZDk4ODcyZTQ2YzkzODYxYjdhYmExNDk0OWUxMjU4NzEyMDg3ZGM1NQogQnVnLURlYmlhbjogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvNzc3NDA1CiBQYXRjaC1OYW1lOiBmaXhlcy9wb2RtYW4tcGlwZS5kaWZmCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIC0tLQogIGNwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtICAgICB8IDE1ICsrKysrKysrKysrKysrKwogIGNwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMm1hbi5QTCB8ICA0ICsrKysKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tdXRjLWRvY3MuZGlmZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tdXRjLWRvY3MuZGlmZgppbmRleCAwY2RmZWZmLi5iNmFlNDA5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kbWFuLXV0Yy1kb2NzLmRpZmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi11dGMtZG9jcy5kaWZmCkBAIC0xMiw2ICsxMiw3IEBACiBPcmlnaW46IHVwc3RyZWFtLCBodHRwOi8vZ2l0LmV5cmllLm9yZy8/cD1wZXJsL3BvZGxhdG9ycy5naXQ7YT1jb21taXRkaWZmO2g9NTJkYjkzYmY4MGU0YTA2Zjg0OTdlNGViYWRlMDUwNmI2ZWUwZTcwZAogQnVnLURlYmlhbjogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvNzgwMjU5CiBQYXRjaC1OYW1lOiBmaXhlcy9wb2RtYW4tdXRjLWRvY3MuZGlmZgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICBjcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbSAgICAgfCAgNiArKysrKy0KICBjcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJtYW4uUEwgfCAxMSArKysrKystLS0tLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi11dGMuZGlmZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tdXRjLmRpZmYKaW5kZXggZmJkN2I5ZC4uM2ZiN2MyMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi11dGMuZGlmZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kbWFuLXV0Yy5kaWZmCkBAIC0xNCw2ICsxNCw3IEBACiBPcmlnaW46IHVwc3RyZWFtLCBodHRwOi8vZ2l0LmV5cmllLm9yZy8/cD1wZXJsL3BvZGxhdG9ycy5naXQ7YT1jb21taXRkaWZmO2g9OTEzZmJiMmJkMmNlMDcxZTIwMTI4NjI5MzAyYWUyODUyNTU0Y2FkNAogQnVnLURlYmlhbjogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvNzgwMjU5CiBQYXRjaC1OYW1lOiBmaXhlcy9wb2RtYW4tdXRjLmRpZmYKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZwogLS0tCiAgY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0gfCAyICstCiAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcmVzcGVjdF91bWFzay5kaWZmIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3Jlc3BlY3RfdW1hc2suZGlmZgppbmRleCBkMWI0OThiLi5jODY2M2Y1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcmVzcGVjdF91bWFzay5kaWZmCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9yZXNwZWN0X3VtYXNrLmRpZmYKQEAgLTcsNiArNyw3IEBACiBzaXRlIGRpcmVjdG9yaWVzLgogCiBQYXRjaC1OYW1lOiBmaXhlcy9yZXNwZWN0X3VtYXNrLmRpZmYKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZwogLS0tCiAgY3Bhbi9FeHRVdGlscy1JbnN0YWxsL2xpYi9FeHRVdGlscy9JbnN0YWxsLnBtICAgfCAxOCArKysrKysrKystLS0tLS0tLS0KICBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSB8IDE4ICsrKysrKysrKy0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2luc3Rtb2RzaF9kb2MuZGlmZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9pbnN0bW9kc2hfZG9jLmRpZmYKaW5kZXggYTYyYzc0Ni4uN2UxZmQ2OSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2luc3Rtb2RzaF9kb2MuZGlmZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vaW5zdG1vZHNoX2RvYy5kaWZmCkBAIC00LDYgKzQsNyBAQAogU3ViamVjdDogRGViaWFuIHBvbGljeSBkb2Vzbid0IGluc3RhbGwgLnBhY2tsaXN0IGZpbGVzIGZvciBjb3JlIG9yIHZlbmRvci4KIAogUGF0Y2gtTmFtZTogZGViaWFuL2luc3Rtb2RzaF9kb2MuZGlmZgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9iaW4vaW5zdG1vZHNoIHwgNCArKystCiAgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xkX3J1bl9wYXRoLmRpZmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbGRfcnVuX3BhdGguZGlmZgppbmRleCBkODBmODZjLi5mZjBiMjg3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbGRfcnVuX3BhdGguZGlmZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbGRfcnVuX3BhdGguZGlmZgpAQCAtNCw2ICs0LDcgQEAKIFN1YmplY3Q6IFJlbW92ZSBzdGFuZGFyZCBsaWJzIGZyb20gTERfUlVOX1BBVEggYXMgcGVyIERlYmlhbiBwb2xpY3kuCiAKIFBhdGNoLU5hbWU6IGRlYmlhbi9sZF9ydW5fcGF0aC5kaWZmCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIC0tLQogIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbSB8IDMgKysrCiAgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xpYm5ldF9jb25maWdfcGF0aC5kaWZmIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xpYm5ldF9jb25maWdfcGF0aC5kaWZmCmluZGV4IDU0ZWY5NjQuLmQ1MzQ3NDIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9saWJuZXRfY29uZmlnX3BhdGguZGlmZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbGlibmV0X2NvbmZpZ19wYXRoLmRpZmYKQEAgLTUsNiArNSw3IEBACiAgd3JpdGFibGUuCiAKIFBhdGNoLU5hbWU6IGRlYmlhbi9saWJuZXRfY29uZmlnX3BhdGguZGlmZgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICBjcGFuL2xpYm5ldC9saWIvTmV0L0NvbmZpZy5wbSB8IDcgKysrLS0tLQogIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbGlicGVybF9lbWJlZF9kb2MuZGlmZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9saWJwZXJsX2VtYmVkX2RvYy5kaWZmCmluZGV4IDc2YjgwNTQuLjBjZGMwZDMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9saWJwZXJsX2VtYmVkX2RvYy5kaWZmCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9saWJwZXJsX2VtYmVkX2RvYy5kaWZmCkBAIC02LDYgKzYsNyBAQAogQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy8xODY3NzgKIAogUGF0Y2gtTmFtZTogZGViaWFuL2xpYnBlcmxfZW1iZWRfZG9jLmRpZmYKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZwogLS0tCiAgbGliL0V4dFV0aWxzL0VtYmVkLnBtIHwgMyArKysKICAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbG9jYWxlLXJvYnVzdG5lc3MuZGlmZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9sb2NhbGUtcm9idXN0bmVzcy5kaWZmCmluZGV4IGZkNDcxZWQuLjdjZjEyNDIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9sb2NhbGUtcm9idXN0bmVzcy5kaWZmCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9sb2NhbGUtcm9idXN0bmVzcy5kaWZmCkBAIC0xNCw2ICsxNCw3IEBACiBCdWc6IGh0dHBzOi8vcnQucGVybC5vcmcvVGlja2V0L0Rpc3BsYXkuaHRtbD9pZD0xMjQzMTAKIEJ1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc4MjA2OAogUGF0Y2gtTmFtZTogZGViaWFuL2xvY2FsZS1yb2J1c3RuZXNzLmRpZmYKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZwogLS0tCiAgdC9ydW4vbG9jYWxlLnQgfCA3ICsrKy0tLS0KICAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL21ha2VtYWtlci1wYXN0aHJ1LmRpZmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbWFrZW1ha2VyLXBhc3RocnUuZGlmZgppbmRleCBmYTBmOWRhLi41ZjA3MTgwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbWFrZW1ha2VyLXBhc3RocnUuZGlmZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbWFrZW1ha2VyLXBhc3RocnUuZGlmZgpAQCAtMTEsNiArMTEsNyBAQAogCiBCdWctRGViaWFuOiBodHRwczovL2J1Z3MuZGViaWFuLm9yZy83NTg0NzEKIFBhdGNoLU5hbWU6IGRlYmlhbi9tYWtlbWFrZXItcGFzdGhydS5kaWZmCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIC0tLQogIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIHwgMiArLQogIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL21ha2VtYWtlcl9jdXN0b21pemVkLmRpZmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbWFrZW1ha2VyX2N1c3RvbWl6ZWQuZGlmZgppbmRleCBiMWI0Y2I5Li5kODcwYjYwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbWFrZW1ha2VyX2N1c3RvbWl6ZWQuZGlmZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbWFrZW1ha2VyX2N1c3RvbWl6ZWQuZGlmZgpAQCAtNCw2ICs0LDcgQEAKIFN1YmplY3Q6IFVwZGF0ZSB0L3BvcnRpbmcvY3VzdG9taXplZC5kYXQgZm9yIGZpbGVzIHBhdGNoZWQgaW4gRGViaWFuCiAKIFBhdGNoLU5hbWU6IGRlYmlhbi9tYWtlbWFrZXJfY3VzdG9taXplZC5kaWZmCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIC0tLQogIHQvcG9ydGluZy9jdXN0b21pemVkLmRhdCB8IDggKysrKy0tLS0KICAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL21vZF9wYXRocy5kaWZmIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL21vZF9wYXRocy5kaWZmCmluZGV4IGFlMTU5MDcuLjdlMjI0ODQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9tb2RfcGF0aHMuZGlmZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbW9kX3BhdGhzLmRpZmYKQEAgLTE3LDYgKzE3LDcgQEAKIHZlcnNpb24gdGhhbiBpcyBpbmNsdWRlZCBpbiBjb3JlLgogCiBQYXRjaC1OYW1lOiBkZWJpYW4vbW9kX3BhdGhzLmRpZmYKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZwogLS0tCiAgcGVybC5jIHwgNTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogIDEgZmlsZSBjaGFuZ2VkLCA1OCBpbnNlcnRpb25zKCspCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbm9fcGFja2xpc3RfcGVybGxvY2FsLmRpZmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbm9fcGFja2xpc3RfcGVybGxvY2FsLmRpZmYKaW5kZXggYjkxMWZkMi4uNzQ4NGJlYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL25vX3BhY2tsaXN0X3Blcmxsb2NhbC5kaWZmCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9ub19wYWNrbGlzdF9wZXJsbG9jYWwuZGlmZgpAQCAtNCw2ICs0LDcgQEAKIFN1YmplY3Q6IERvbid0IGluc3RhbGwgLnBhY2tsaXN0IG9yIHBlcmxsb2NhbC5wb2QgZm9yIHBlcmwgb3IgdmVuZG9yCiAKIFBhdGNoLU5hbWU6IGRlYmlhbi9ub19wYWNrbGlzdF9wZXJsbG9jYWwuZGlmZgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSB8IDM1ICsrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wYXRjaGxldmVsLmRpZmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGF0Y2hsZXZlbC5kaWZmCmluZGV4IDg2NTZiMDIuLjJkMDVhZTUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wYXRjaGxldmVsLmRpZmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BhdGNobGV2ZWwuZGlmZgpAQCAtMTAsNiArMTAsNyBAQAogZnJvbSB0aGUgZGViaWFuL3BhdGNoZXMvIGRpcmVjdG9yeSB3aGVuIGJ1aWxkaW5nIHRoZSBwYWNrYWdlLgogCiBQYXRjaC1OYW1lOiBkZWJpYW4vcGF0Y2hsZXZlbC5kaWZmCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIC0tLQogIHBhdGNobGV2ZWwuaCB8IDMgKysrCiAgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3Blcmw1ZGIteC10ZXJtaW5hbC1lbXVsYXRvci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wZXJsNWRiLXgtdGVybWluYWwtZW11bGF0b3IucGF0Y2gKaW5kZXggNTMzOTUyYy4uNmYxNjI1YiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3Blcmw1ZGIteC10ZXJtaW5hbC1lbXVsYXRvci5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGVybDVkYi14LXRlcm1pbmFsLWVtdWxhdG9yLnBhdGNoCkBAIC0xMCw2ICsxMCw3IEBACiBGb3J3YXJkZWQ6IG5vdC1uZWVkZWQKIAogUGF0Y2gtTmFtZTogZGViaWFuL3Blcmw1ZGIteC10ZXJtaW5hbC1lbXVsYXRvci5wYXRjaAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICBsaWIvcGVybDVkYi5wbCB8IDIgKy0KICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wZXJsaXZwLmRpZmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGVybGl2cC5kaWZmCmluZGV4IDJjMWVhYjkuLjVjNzQxM2IgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wZXJsaXZwLmRpZmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BlcmxpdnAuZGlmZgpAQCAtMjEsNiArMjEsNyBAQAogU2lnbmVkLW9mZi1ieTogTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPgogCiBQYXRjaC1OYW1lOiBkZWJpYW4vcGVybGl2cC5kaWZmCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIC0tLQogIHV0aWxzL3BlcmxpdnAuUEwgfCAxICsKICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wb2QybWFuLWN1c3RvbWl6ZWQuZGlmZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wb2QybWFuLWN1c3RvbWl6ZWQuZGlmZgppbmRleCA2MjcwYjg3Li40NzA3NTYyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcG9kMm1hbi1jdXN0b21pemVkLmRpZmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BvZDJtYW4tY3VzdG9taXplZC5kaWZmCkBAIC00LDYgKzQsNyBAQAogU3ViamVjdDogVXBkYXRlIHBvcnRpbmcvY3VzdG9taXplZC5kYXQgZm9yIHBvZDJtYW4gbW9kaWZpY2F0aW9ucwogCiBQYXRjaC1OYW1lOiBkZWJpYW4vcG9kMm1hbi1jdXN0b21pemVkLmRpZmYKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZwogLS0tCiAgdC9wb3J0aW5nL2N1c3RvbWl6ZWQuZGF0IHwgMiArLQogIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3ByZWZpeF9jaGFuZ2VzLmRpZmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcHJlZml4X2NoYW5nZXMuZGlmZgppbmRleCBjNDFlZmJlLi5iNjgxYzNlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcHJlZml4X2NoYW5nZXMuZGlmZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcHJlZml4X2NoYW5nZXMuZGlmZgpAQCAtOSw2ICs5LDcgQEAKIG1vZHVsZXMpLgogCiBQYXRjaC1OYW1lOiBkZWJpYW4vcHJlZml4X2NoYW5nZXMuZGlmZgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQW55LnBtICB8IDEyICsrKysrKy0tLS0tLQogIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIHwgIDMgKy0tCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcHJ1bmVfbGlicy5kaWZmIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BydW5lX2xpYnMuZGlmZgppbmRleCBkMTUzZTBlLi5hMmVkNTJhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcHJ1bmVfbGlicy5kaWZmCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wcnVuZV9saWJzLmRpZmYKQEAgLTEwLDcgKzEwLDcgQEAKIGFuZCBzb21lIG9mIHRoZSBvcmlnaW5hbCBsaXN0IG1heSBiZSBwcmVzZW50IG9uIGJ1aWxkZHMgKHNlZSBCdWcjMTI4MzU1KS4KIAogUGF0Y2gtTmFtZTogZGViaWFuL3BydW5lX2xpYnMuZGlmZgotCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIC0tLQogIENvbmZpZ3VyZSB8IDUgKystLS0KICAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3JlZ2VuLXNraXAuZGlmZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9yZWdlbi1za2lwLmRpZmYKaW5kZXggOGEzZmM5OS4uNWQ5YTdjNCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3JlZ2VuLXNraXAuZGlmZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcmVnZW4tc2tpcC5kaWZmCkBAIC04LDYgKzgsNyBAQAogdGhlIHJlZ2VuZXJhdGlvbiBjaGVjayBpcyBicm9rZW4gYmVjYXVzZSBsaWIvLmdpdGlnbm9yZSBpcyBtaXNzaW5nLgogCiBQYXRjaC1OYW1lOiBkZWJpYW4vcmVnZW4tc2tpcC5kaWZmCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIC0tLQogIHJlZ2VuL2xpYl9jbGVhbnVwLnBsIHwgMiArLQogIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3NraXAta2ZyZWVic2QtY3Jhc2guZGlmZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9za2lwLWtmcmVlYnNkLWNyYXNoLmRpZmYKaW5kZXggZWNmYzBiYy4uM2IzNzQ1MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3NraXAta2ZyZWVic2QtY3Jhc2guZGlmZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vc2tpcC1rZnJlZWJzZC1jcmFzaC5kaWZmCkBAIC0xMiw2ICsxMiw3IEBACiBTa2lwIHRoZSB0ZXN0IHVudGlsIHRoZSBjdWxwcml0IGlzIGZvdW5kLgogCiBQYXRjaC1OYW1lOiBkZWJpYW4vc2tpcC1rZnJlZWJzZC1jcmFzaC5kaWZmCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIC0tLQogIHQvb3AvdGhyZWFkcy50IHwgNCArKysrCiAgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3NraXAtdXBzdHJlYW0tZ2l0LXRlc3RzLmRpZmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vc2tpcC11cHN0cmVhbS1naXQtdGVzdHMuZGlmZgppbmRleCA0Yzg3MTA0Li4yNzlmNGFiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vc2tpcC11cHN0cmVhbS1naXQtdGVzdHMuZGlmZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vc2tpcC11cHN0cmVhbS1naXQtdGVzdHMuZGlmZgpAQCAtOSw2ICs5LDcgQEAKIFNraXAgdGhlIHRlc3RzIGFsdG9nZXRoZXIgZXZlbiBpZiB0aGUgLmdpdCBkaXJlY3RvcnkgZXhpc3RzLgogCiBQYXRjaC1OYW1lOiBkZWJpYW4vc2tpcC11cHN0cmVhbS1naXQtdGVzdHMuZGlmZgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICB0L3Rlc3QucGwgfCAyICstCiAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vc3F1ZWxjaC1sb2NhbGUtd2FybmluZ3MuZGlmZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9zcXVlbGNoLWxvY2FsZS13YXJuaW5ncy5kaWZmCmluZGV4IGNiMzE0NTcuLjQ5NjRlNDggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9zcXVlbGNoLWxvY2FsZS13YXJuaW5ncy5kaWZmCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9zcXVlbGNoLWxvY2FsZS13YXJuaW5ncy5kaWZmCkBAIC0xNCw2ICsxNCw3IEBACiB0aGUgd2FybmluZyB3aWxsIGJlIHRyaWdnZXJlZCBub3JtYWxseSBhZ2FpbiBhdCB0aGF0IHBvaW50LgogCiBQYXRjaC1OYW1lOiBkZWJpYW4vc3F1ZWxjaC1sb2NhbGUtd2FybmluZ3MuZGlmZgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICBsb2NhbGUuYyAgICAgICAgICAgfCA1ICsrKystCiAgcG9kL3Blcmxsb2NhbGUucG9kIHwgOCArKysrKysrKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3dyaXRhYmxlX3NpdGVfZGlycy5kaWZmIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3dyaXRhYmxlX3NpdGVfZGlycy5kaWZmCmluZGV4IDUzYWRjMmYuLmFiMzczYjMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi93cml0YWJsZV9zaXRlX2RpcnMuZGlmZgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vd3JpdGFibGVfc2l0ZV9kaXJzLmRpZmYKQEAgLTYsNiArNiw3IEBACiBQb2xpY3kgcmVxdWlyZXMgZ3JvdXAgd3JpdGFibGUgc2l0ZSBkaXJlY3RvcmllcwogCiBQYXRjaC1OYW1lOiBkZWJpYW4vd3JpdGFibGVfc2l0ZV9kaXJzLmRpZmYKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZwogLS0tCiAgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gfCA2ICsrKy0tLQogIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9leHQtT0RCTV9GaWxlLXQtb2RibS50LWZpeC10aGUtcGF0aC1vZi1kYm10X2NvbW1vbi5wLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZXh0LU9EQk1fRmlsZS10LW9kYm0udC1maXgtdGhlLXBhdGgtb2YtZGJtdF9jb21tb24ucC5wYXRjaAppbmRleCA2YjA1Yjg3Li5iODViNTBjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9leHQtT0RCTV9GaWxlLXQtb2RibS50LWZpeC10aGUtcGF0aC1vZi1kYm10X2NvbW1vbi5wLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2V4dC1PREJNX0ZpbGUtdC1vZGJtLnQtZml4LXRoZS1wYXRoLW9mLWRibXRfY29tbW9uLnAucGF0Y2gKQEAgLTksNiArOSw4IEBACiBDYW4ndCBsb2NhdGUgLi4vLi4vdC9saWIvZGJtdF9jb21tb24ucGwgaW4gQElOQwogCiBTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICBleHQvT0RCTV9GaWxlL3Qvb2RibS50IHwgICAgMiArLQogIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmxfNS4yNC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmxfNS4yNC4xLmJiCmluZGV4IGNmN2E4ZTEuLmI1NWQyMjIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsXzUuMjQuMS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybF81LjI0LjEuYmIKQEAgLTEyNCwzMCArMTI0LDggQEAKICAgICAgICAgICAgIGNhdCAkaSA+PiBjb25maWcuc2gtJHtUQVJHRVRfQVJDSH0tJHtUQVJHRVRfT1N9CiAgICAgICAgIGRvbmUKIAotICAgICAgICAjIEZpeHVwcyBmb3IgdWNsaWJjCi0gICAgICAgIGlmIFsgIiR7VEFSR0VUX09TfSIgPSAibGludXgtdWNsaWJjIiAtbyAiJHtUQVJHRVRfT1N9IiA9ICJsaW51eC11Y2xpYmNlYWJpIiBdOyB0aGVuCi0gICAgICAgICAgICAgICAgc2VkIC1pIC1lICJzLFwoZF9jcnlwdF9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKLSAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX2Z1dGltZXM9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAotICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfZmluaXRlbD1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCi0gICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoY3J5cHRfcl9wcm90bz1cKSdcdysnLFwxJzAnLGciIFwKLSAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX2dldG5ldGJ5bmFtZV9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKLSAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChnZXRuZXRieW5hbWVfcl9wcm90bz1cKSdcdysnLFwxJzAnLGciIFwKLSAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX2dldG5ldGJ5YWRkcl9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKLSAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChnZXRuZXRieWFkZHJfcl9wcm90bz1cKSdcdysnLFwxJzAnLGciIFwKLSAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX2dldG5ldGVudF9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKLSAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChnZXRuZXRlbnRfcl9wcm90bz1cKSdcdysnLFwxJzAnLGciIFwKLSAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3NvY2thdG1hcms9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAotICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc29ja2F0bWFya3Byb3RvPVwpJ1x3KycsXDEnMCcsZyIgXAotICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfZWFjY2Vzcz1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCi0gICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9zdGRpb19wdHJfbHZhbD1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCi0gICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9zdGRpb19wdHJfbHZhbF9zZXRzX2NudD1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCi0gICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9zdGRpb2Jhc2U9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAotICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc3Rkc3RkaW89XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAotICAgICAgICAgICAgICAgICAgICAgICAtZSAicywtZnN0YWNrLXByb3RlY3RvciwtZm5vLXN0YWNrLXByb3RlY3RvcixnIiBcCi0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zaC0ke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30KLSAgICAgICAgZmkKICAgICAgICAgIyBGaXh1cHMgZm9yIG11c2wKLSAgICAgICAgaWYgWyAiJHtUQVJHRVRfT1N9IiA9ICJsaW51eC1tdXNsIiAtbyAiJHtUQVJHRVRfT1N9IiA9ICJsaW51eC1tdXNsZWFiaSIgXTsgdGhlbgorICAgICAgICBpZiBbICIke1RBUkdFVF9PU30iID0gImxpbnV4LW11c2wiIC1vICIke1RBUkdFVF9PU30iID0gImxpbnV4LW11c2xlYWJpIiAtbyAiJHtUQVJHRVRfT1N9IiA9ICJsaW51eC1tdXNseDMyIiBdOyB0aGVuCiAgICAgICAgICAgICAgICAgc2VkIC1pIC1lICJzLFwoZF9saWJtX2xpYl92ZXJzaW9uPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKICAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3N0ZGlvX3B0cl9sdmFsPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKICAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3N0ZGlvX3B0cl9sdmFsX3NldHNfY250PVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKQEAgLTE5Myw3ICsxNzEsNyBAQAogCQkJOzsKIAllc2FjCiAgICAgICAgICMgVGhlc2UgYXJlIHN0cmV3biBhbGwgb3ZlciB0aGUgc291cmNlIHRyZWUKLSAgICAgICAgZm9yIGZvbyBpbiBgZ3JlcCAtSSAtLWV4Y2x1ZGU9IioucGF0Y2giIC0tZXhjbHVkZT0iKi5kaWZmIiAtLWV4Y2x1ZGU9IioucG9kIiAtLWV4Y2x1ZGU9IlJFQURNRSoiIC1tMSAiL3Vzci9pbmNsdWRlLy4qXC5oIiAke1N9LyogLXIgLWxgICR7U30vdXRpbHMvaDJ4cy5QTCA7IGRvCisgICAgICAgIGZvciBmb28gaW4gYGdyZXAgLUkgLS1leGNsdWRlPSIqLnBhdGNoIiAtLWV4Y2x1ZGU9IiouZGlmZiIgLS1leGNsdWRlPSIqLnBvZCIgLS1leGNsdWRlPSJSRUFETUUqIiAtLWV4Y2x1ZGU9Ikdsb3NzYXJ5IiAtbTEgIi91c3IvaW5jbHVkZS8uKlwuaCIgJHtTfS8qIC1yIC1sYCAke1N9L3V0aWxzL2gyeHMuUEwgOyBkbwogICAgICAgICAgICAgZWNobyBGaXhpbmc6ICRmb28KICAgICAgICAgICAgIHNlZCAtZSAnc3xcKFsgIl4nXCcnSV1cK1wpL3Vzci9pbmNsdWRlL3xcMSR7U1RBR0lOR19JTkNESVJ9L3xnJyAtaSAkZm9vCiAgICAgICAgIGRvbmUKQEAgLTI0NSw2ICsyMjMsNyBAQAogcGVybF9wYWNrYWdlX3ByZXByb2Nlc3MgKCkgewogICAgICAgICAjIEZpeCB1cCBpbnN0YWxsZWQgY29uZmlndXJhdGlvbgogICAgICAgICBzZWQgLWkgLWUgInMsJHtEfSwsZyIgXAorICAgICAgICAgICAgICAgLWUgInMsJHtERUJVR19QUkVGSVhfTUFQfSwsZyIgXAogICAgICAgICAgICAgICAgLWUgInMsLS1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH0sLGciIFwKICAgICAgICAgICAgICAgIC1lICJzLC1pc3lzdGVtJHtTVEFHSU5HX0lOQ0RJUn0gLCxnIiBcCiAgICAgICAgICAgICAgICAtZSAicywke1NUQUdJTkdfTElCRElSfSwke2xpYmRpcn0sZyIgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25mL3BrZ2NvbmYvMDAwMS1NaW5pbWFsLXR3ZWFrcy10by1jb21waWxlLXdpdGgtVmlzdWFsLUMtMjAxNS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZi9wa2djb25mLzAwMDEtTWluaW1hbC10d2Vha3MtdG8tY29tcGlsZS13aXRoLVZpc3VhbC1DLTIwMTUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgwNWFkMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZi9wa2djb25mLzAwMDEtTWluaW1hbC10d2Vha3MtdG8tY29tcGlsZS13aXRoLVZpc3VhbC1DLTIwMTUucGF0Y2gKQEAgLTAsMCArMSwyMjQgQEAKK0Zyb20gNGQ3YjRkN2M4ZTk5NjZjNTkzZjQ3MjM1NTYwNzIwNGM2YzgwZmVjYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERhbiBLZWdlbCA8ZGFua0BrZWdlbC5jb20+CitEYXRlOiBTdW4sIDQgSnVuIDIwMTcgMTk6MTk6NTUgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gTWluaW1hbCB0d2Vha3MgdG8gY29tcGlsZSB3aXRoIFZpc3VhbCBDIDIwMTUKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4KKy0tLQorIGdldG9wdF9sb25nLmMgICAgICAgICAgIHwgIDIgKysKKyBsaWJwa2djb25mL2JzZHN0dWJzLmMgICB8ICAxICsKKyBsaWJwa2djb25mL2xpYnBrZ2NvbmYuaCB8ICAyICstCisgbGlicGtnY29uZi9wYXRoLmMgICAgICAgfCAxMCArKysrKy0tLS0tCisgbGlicGtnY29uZi9wa2cuYyAgICAgICAgfCAyOCArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCisgbGlicGtnY29uZi9zdGRpbmMuaCAgICAgfCAgOSArKysrKysrLS0KKyA2IGZpbGVzIGNoYW5nZWQsIDM1IGluc2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2V0b3B0X2xvbmcuYyBiL2dldG9wdF9sb25nLmMKK2luZGV4IGFmZWI2OGQuLjVjZTliZmQgMTAwNjQ0CistLS0gYS9nZXRvcHRfbG9uZy5jCisrKysgYi9nZXRvcHRfbG9uZy5jCitAQCAtNjIsNyArNjIsOSBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2lmbmRlZiBfV0lOMzIKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2VuZGlmCisgCisgI2RlZmluZSBQS0dDT05GX0hBQ0tfTE9HSUNBTF9PUl9BTExfVkFMVUVTCisgCitkaWZmIC0tZ2l0IGEvbGlicGtnY29uZi9ic2RzdHVicy5jIGIvbGlicGtnY29uZi9ic2RzdHVicy5jCitpbmRleCA4ZjcwZmYzLi4yYzAwMGFjIDEwMDY0NAorLS0tIGEvbGlicGtnY29uZi9ic2RzdHVicy5jCisrKysgYi9saWJwa2djb25mL2JzZHN0dWJzLmMKK0BAIC0xNyw2ICsxNyw3IEBACisgICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAgKi8KKyAKKysjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKK2RpZmYgLS1naXQgYS9saWJwa2djb25mL2xpYnBrZ2NvbmYuaCBiL2xpYnBrZ2NvbmYvbGlicGtnY29uZi5oCitpbmRleCA0MDRiZjBjLi41NTFkODVkIDEwMDY0NAorLS0tIGEvbGlicGtnY29uZi9saWJwa2djb25mLmgKKysrKyBiL2xpYnBrZ2NvbmYvbGlicGtnY29uZi5oCitAQCAtMzEwLDcgKzMxMCw3IEBAIHZvaWQgcGtnY29uZl9hdWRpdF9sb2dfZGVwZW5kZW5jeShwa2djb25mX2NsaWVudF90ICpjbGllbnQsIGNvbnN0IHBrZ2NvbmZfcGtnX3QKKyAvKiBwYXRoLmMgKi8KKyB2b2lkIHBrZ2NvbmZfcGF0aF9hZGQoY29uc3QgY2hhciAqdGV4dCwgcGtnY29uZl9saXN0X3QgKmRpcmxpc3QsIGJvb2wgZmlsdGVyKTsKKyBzaXplX3QgcGtnY29uZl9wYXRoX3NwbGl0KGNvbnN0IGNoYXIgKnRleHQsIHBrZ2NvbmZfbGlzdF90ICpkaXJsaXN0LCBib29sIGZpbHRlcik7Cistc2l6ZV90IHBrZ2NvbmZfcGF0aF9idWlsZF9mcm9tX2Vudmlyb24oY29uc3QgY2hhciAqZW52aXJvbiwgY29uc3QgY2hhciAqZmFsbGJhY2ssIHBrZ2NvbmZfbGlzdF90ICpkaXJsaXN0LCBib29sIGZpbHRlcik7Cisrc2l6ZV90IHBrZ2NvbmZfcGF0aF9idWlsZF9mcm9tX2Vudmlyb24oY29uc3QgY2hhciAqZW52dmFybmFtZSwgY29uc3QgY2hhciAqZmFsbGJhY2ssIHBrZ2NvbmZfbGlzdF90ICpkaXJsaXN0LCBib29sIGZpbHRlcik7CisgYm9vbCBwa2djb25mX3BhdGhfbWF0Y2hfbGlzdChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBwa2djb25mX2xpc3RfdCAqZGlybGlzdCk7Cisgdm9pZCBwa2djb25mX3BhdGhfZnJlZShwa2djb25mX2xpc3RfdCAqZGlybGlzdCk7CisgYm9vbCBwa2djb25mX3BhdGhfcmVsb2NhdGUoY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTsKK2RpZmYgLS1naXQgYS9saWJwa2djb25mL3BhdGguYyBiL2xpYnBrZ2NvbmYvcGF0aC5jCitpbmRleCBkZGRiM2JmLi41OWUwMDNlIDEwMDY0NAorLS0tIGEvbGlicGtnY29uZi9wYXRoLmMKKysrKyBiL2xpYnBrZ2NvbmYvcGF0aC5jCitAQCAtMjAsNyArMjAsNyBAQAorICMgaW5jbHVkZSA8c3lzL2N5Z3dpbi5oPgorICNlbmRpZgorIAorLSNpZmRlZiBIQVZFX1NZU19TVEFUX0gKKysjaWYgZGVmaW5lZChIQVZFX1NZU19TVEFUX0gpICYmICEgZGVmaW5lZChfV0lOMzIpCisgIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgorICMgZGVmaW5lIFBLR0NPTkZfQ0FDSEVfSU5PREVTCisgI2VuZGlmCitAQCAtMTU2LDEyICsxNTYsMTIgQEAgcGtnY29uZl9wYXRoX3NwbGl0KGNvbnN0IGNoYXIgKnRleHQsIHBrZ2NvbmZfbGlzdF90ICpkaXJsaXN0LCBib29sIGZpbHRlcikKKyAvKgorICAqICFkb2MKKyAgKgorLSAqIC4uIGM6ZnVuY3Rpb246OiBzaXplX3QgcGtnY29uZl9wYXRoX2J1aWxkX2Zyb21fZW52aXJvbihjb25zdCBjaGFyICplbnZpcm9uLCBjb25zdCBjaGFyICpmYWxsYmFjaywgcGtnY29uZl9saXN0X3QgKmRpcmxpc3QpCisrICogLi4gYzpmdW5jdGlvbjo6IHNpemVfdCBwa2djb25mX3BhdGhfYnVpbGRfZnJvbV9lbnZpcm9uKGNvbnN0IGNoYXIgKmVudnZhcm5hbWUsIGNvbnN0IGNoYXIgKmZhbGxiYWNrLCBwa2djb25mX2xpc3RfdCAqZGlybGlzdCkKKyAgKgorICAqICAgIEFkZHMgdGhlIHBhdGhzIHNwZWNpZmllZCBpbiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBhIHBhdGggbGlzdC4gIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0LAorICAqICAgIGFuIG9wdGlvbmFsIGRlZmF1bHQgc2V0IG9mIHBhdGhzIGlzIGFkZGVkLgorICAqCistICogICAgOnBhcmFtIGNoYXIqIGVudmlyb246IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBsb29rIHVwLgorKyAqICAgIDpwYXJhbSBjaGFyKiBlbnZ2YXJuYW1lOiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gbG9vayB1cC4KKyAgKiAgICA6cGFyYW0gY2hhciogZmFsbGJhY2s6IFRoZSBmYWxsYmFjayBwYXRocyB0byB1c2UgaWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQuCisgICogICAgOnBhcmFtIHBrZ2NvbmZfbGlzdF90KiBkaXJsaXN0OiBUaGUgcGF0aCBsaXN0IHRvIGFkZCB0aGUgcGF0aCBub2RlcyB0by4KKyAgKiAgICA6cGFyYW0gYm9vbCBmaWx0ZXI6IFdoZXRoZXIgdG8gcGVyZm9ybSBkdXBsaWNhdGUgZmlsdGVyaW5nLgorQEAgLTE2OSwxMSArMTY5LDExIEBAIHBrZ2NvbmZfcGF0aF9zcGxpdChjb25zdCBjaGFyICp0ZXh0LCBwa2djb25mX2xpc3RfdCAqZGlybGlzdCwgYm9vbCBmaWx0ZXIpCisgICogICAgOnJ0eXBlOiBzaXplX3QKKyAgKi8KKyBzaXplX3QKKy1wa2djb25mX3BhdGhfYnVpbGRfZnJvbV9lbnZpcm9uKGNvbnN0IGNoYXIgKmVudmlyb24sIGNvbnN0IGNoYXIgKmZhbGxiYWNrLCBwa2djb25mX2xpc3RfdCAqZGlybGlzdCwgYm9vbCBmaWx0ZXIpCisrcGtnY29uZl9wYXRoX2J1aWxkX2Zyb21fZW52aXJvbihjb25zdCBjaGFyICplbnZ2YXJuYW1lLCBjb25zdCBjaGFyICpmYWxsYmFjaywgcGtnY29uZl9saXN0X3QgKmRpcmxpc3QsIGJvb2wgZmlsdGVyKQorIHsKKyAJY29uc3QgY2hhciAqZGF0YTsKKyAKKy0JZGF0YSA9IGdldGVudihlbnZpcm9uKTsKKysJZGF0YSA9IGdldGVudihlbnZ2YXJuYW1lKTsKKyAJaWYgKGRhdGEgIT0gTlVMTCkKKyAJCXJldHVybiBwa2djb25mX3BhdGhfc3BsaXQoZGF0YSwgZGlybGlzdCwgZmlsdGVyKTsKKyAKK2RpZmYgLS1naXQgYS9saWJwa2djb25mL3BrZy5jIGIvbGlicGtnY29uZi9wa2cuYworaW5kZXggN2FlYmQ2MS4uNWRhY2FlMyAxMDA2NDQKKy0tLSBhL2xpYnBrZ2NvbmYvcGtnLmMKKysrKyBiL2xpYnBrZ2NvbmYvcGtnLmMKK0BAIC0zMCw2ICszMCw4IEBACisgIwlkZWZpbmUgUEtHX0NPTkZJR19SRUdfS0VZICJTb2Z0d2FyZVxccGtnY29uZmlnXFxQS0dfQ09ORklHX1BBVEgiCisgIwl1bmRlZiBQS0dfREVGQVVMVF9QQVRICisgIwlkZWZpbmUgUEtHX0RFRkFVTFRfUEFUSCAiLi4vbGliL3BrZ2NvbmZpZzsuLi9zaGFyZS9wa2djb25maWciCisrI2RlZmluZSBzdHJuY2FzZWNtcCBfc3RybmljbXAKKysjZGVmaW5lIHN0cmNhc2VjbXAgX3N0cmljbXAKKyAjZW5kaWYKKyAKKyAjZGVmaW5lIFBLR19DT05GSUdfRVhUCQkiLnBjIgorQEAgLTEzNCwyMSArMTM2LDIxIEBAIHN0YXRpYyBpbnQgcGtnY29uZl9wa2dfcGFyc2VyX2tleXdvcmRfcGFpcl9jbXAoY29uc3Qgdm9pZCAqa2V5LCBjb25zdCB2b2lkICpwdHIpCisgc3RhdGljIHZvaWQKKyBwa2djb25mX3BrZ19wYXJzZXJfdHVwbGVfZnVuYyhjb25zdCBwa2djb25mX2NsaWVudF90ICpjbGllbnQsIHBrZ2NvbmZfcGtnX3QgKnBrZywgY29uc3QgcHRyZGlmZl90IG9mZnNldCwgY2hhciAqdmFsdWUpCisgeworLQljaGFyICoqZGVzdCA9ICgodm9pZCAqKSBwa2cgKyBvZmZzZXQpOworKwljaGFyICoqZGVzdCA9IChjaGFyICoqKSgoY2hhciAqKSBwa2cgKyBvZmZzZXQpOworIAkqZGVzdCA9IHBrZ2NvbmZfdHVwbGVfcGFyc2UoY2xpZW50LCAmcGtnLT52YXJzLCB2YWx1ZSk7CisgfQorIAorIHN0YXRpYyB2b2lkCisgcGtnY29uZl9wa2dfcGFyc2VyX2ZyYWdtZW50X2Z1bmMoY29uc3QgcGtnY29uZl9jbGllbnRfdCAqY2xpZW50LCBwa2djb25mX3BrZ190ICpwa2csIGNvbnN0IHB0cmRpZmZfdCBvZmZzZXQsIGNoYXIgKnZhbHVlKQorIHsKKy0JcGtnY29uZl9saXN0X3QgKmRlc3QgPSAoKHZvaWQgKikgcGtnICsgb2Zmc2V0KTsKKysJcGtnY29uZl9saXN0X3QgKmRlc3QgPSAocGtnY29uZl9saXN0X3QgKikoKGNoYXIgKikgcGtnICsgb2Zmc2V0KTsKKyAJcGtnY29uZl9mcmFnbWVudF9wYXJzZShjbGllbnQsIGRlc3QsICZwa2ctPnZhcnMsIHZhbHVlKTsKKyB9CisgCisgc3RhdGljIHZvaWQKKyBwa2djb25mX3BrZ19wYXJzZXJfZGVwZW5kZW5jeV9mdW5jKGNvbnN0IHBrZ2NvbmZfY2xpZW50X3QgKmNsaWVudCwgcGtnY29uZl9wa2dfdCAqcGtnLCBjb25zdCBwdHJkaWZmX3Qgb2Zmc2V0LCBjaGFyICp2YWx1ZSkKKyB7CistCXBrZ2NvbmZfbGlzdF90ICpkZXN0ID0gKCh2b2lkICopIHBrZyArIG9mZnNldCk7CisrCXBrZ2NvbmZfbGlzdF90ICpkZXN0ID0gKHBrZ2NvbmZfbGlzdF90ICopKChjaGFyICopIHBrZyArIG9mZnNldCk7CisgCXBrZ2NvbmZfZGVwZW5kZW5jeV9wYXJzZShjbGllbnQsIHBrZywgZGVzdCwgdmFsdWUpOworIH0KKyAKK0BAIC0yMzgsNyArMjQwLDcgQEAgcGtnY29uZl9wa2dfdmFsaWRhdGUoY29uc3QgcGtnY29uZl9jbGllbnRfdCAqY2xpZW50LCBjb25zdCBwa2djb25mX3BrZ190ICpwa2cpCisgCisgCWZvciAoaSA9IDA7IGkgPCBQS0dDT05GX0FSUkFZX1NJWkUocGtnY29uZl9wa2dfdmFsaWRhdGlvbnMpOyBpKyspCisgCXsKKy0JCWNoYXIgKipwID0gKCh2b2lkICopIHBrZyArIHBrZ2NvbmZfcGtnX3ZhbGlkYXRpb25zW2ldLm9mZnNldCk7CisrCQljaGFyICoqcCA9IChjaGFyICoqKSgoY2hhciAqKSBwa2cgKyBwa2djb25mX3BrZ192YWxpZGF0aW9uc1tpXS5vZmZzZXQpOworIAorIAkJaWYgKCpwICE9IE5VTEwpCisgCQkJY29udGludWU7CitAQCAtNTg3LDcgKzU4OSw3IEBAIHBrZ2NvbmZfc2Nhbl9hbGwocGtnY29uZl9jbGllbnRfdCAqY2xpZW50LCB2b2lkICpkYXRhLCBwa2djb25mX3BrZ19pdGVyYXRpb25fZnVuCisgCisgI2lmZGVmIF9XSU4zMgorIHN0YXRpYyBwa2djb25mX3BrZ190ICoKKy1wa2djb25mX3BrZ19maW5kX2luX3JlZ2lzdHJ5X2tleShjb25zdCBwa2djb25mX2NsaWVudF90ICpjbGllbnQsIEhLRVkgaGtleSwgY29uc3QgY2hhciAqbmFtZSkKKytwa2djb25mX3BrZ19maW5kX2luX3JlZ2lzdHJ5X2tleShwa2djb25mX2NsaWVudF90ICpjbGllbnQsIEhLRVkgaGtleSwgY29uc3QgY2hhciAqbmFtZSkKKyB7CisgCXBrZ2NvbmZfcGtnX3QgKnBrZyA9IE5VTEw7CisgCitAQCAtMTA0OCw4ICsxMDUwLDEyIEBAIHR5cGVkZWYgc3RydWN0IHsKKyAKKyBzdGF0aWMgY29uc3QgcGtnY29uZl9wa2dfcHJvdmlkZXNfdmVybWF0Y2hfcnVsZV90IHBrZ2NvbmZfcGtnX3Byb3ZpZGVzX3Zlcm1hdGNoX3J1bGVzW10gPSB7CisgCVtQS0dDT05GX0NNUF9BTlldID0geworLQkJLnJ1bGVjbXAgPSB7fSwKKy0JCS5kZXBjbXAgPSB7fSwKKysJCS5ydWxlY21wID0geworKwkJCVtQS0dDT05GX0NNUF9BTlldCQkJPSBwa2djb25mX3BrZ19jb21wYXJhdG9yX25vbmUsCisrICAgICAgICAgICAgICAgIH0sCisrCQkuZGVwY21wID0geworKwkJCVtQS0dDT05GX0NNUF9BTlldCQkJPSBwa2djb25mX3BrZ19jb21wYXJhdG9yX25vbmUsCisrICAgICAgICAgICAgICAgIH0sCisgCX0sCisgCVtQS0dDT05GX0NNUF9MRVNTX1RIQU5dID0geworIAkJLnJ1bGVjbXAgPSB7CitAQCAtMTEyMSw3ICsxMTI3LDkgQEAgc3RhdGljIGNvbnN0IHBrZ2NvbmZfcGtnX3Byb3ZpZGVzX3Zlcm1hdGNoX3J1bGVfdCBwa2djb25mX3BrZ19wcm92aWRlc192ZXJtYXRjaF8KKyAJCQlbUEtHQ09ORl9DTVBfRVFVQUxdCQkJPSBwa2djb25mX3BrZ19jb21wYXJhdG9yX2VxLAorIAkJCVtQS0dDT05GX0NNUF9OT1RfRVFVQUxdCQkJPSBwa2djb25mX3BrZ19jb21wYXJhdG9yX25lCisgCQl9LAorLQkJLmRlcGNtcCA9IHt9LAorKwkJLmRlcGNtcCA9IHsKKysJCQlbUEtHQ09ORl9DTVBfQU5ZXQkJCT0gcGtnY29uZl9wa2dfY29tcGFyYXRvcl9ub25lLAorKyAgICAgICAgICAgICAgICB9LAorIAl9LAorIAlbUEtHQ09ORl9DTVBfTk9UX0VRVUFMXSA9IHsKKyAJCS5ydWxlY21wID0geworQEAgLTExMzMsNyArMTE0MSw5IEBAIHN0YXRpYyBjb25zdCBwa2djb25mX3BrZ19wcm92aWRlc192ZXJtYXRjaF9ydWxlX3QgcGtnY29uZl9wa2dfcHJvdmlkZXNfdmVybWF0Y2hfCisgCQkJW1BLR0NPTkZfQ01QX0VRVUFMXQkJCT0gcGtnY29uZl9wa2dfY29tcGFyYXRvcl9uZSwKKyAJCQlbUEtHQ09ORl9DTVBfTk9UX0VRVUFMXQkJCT0gcGtnY29uZl9wa2dfY29tcGFyYXRvcl9lcQorIAkJfSwKKy0JCS5kZXBjbXAgPSB7fSwKKysJCS5kZXBjbXAgPSB7CisrCQkJW1BLR0NPTkZfQ01QX0FOWV0JCQk9IHBrZ2NvbmZfcGtnX2NvbXBhcmF0b3Jfbm9uZSwKKysgICAgICAgICAgICAgICAgfSwKKyAJfSwKKyB9OworIAorZGlmZiAtLWdpdCBhL2xpYnBrZ2NvbmYvc3RkaW5jLmggYi9saWJwa2djb25mL3N0ZGluYy5oCitpbmRleCA1OGNjNmM3Li5hYzdlNTNjIDEwMDY0NAorLS0tIGEvbGlicGtnY29uZi9zdGRpbmMuaAorKysrIGIvbGlicGtnY29uZi9zdGRpbmMuaAorQEAgLTI0LDkgKzI0LDcgQEAKKyAjaW5jbHVkZSA8c3RkYm9vbC5oPgorICNpbmNsdWRlIDxzdGRhcmcuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CistI2luY2x1ZGUgPGRpcmVudC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPHN0ZGludC5oPgorIAorICNpZmRlZiBfV0lOMzIKK0BAIC0zNCw4ICszMiwxNSBAQAorICMgaW5jbHVkZSA8d2luZG93cy5oPgorICMgaW5jbHVkZSA8bWFsbG9jLmg+CisgIyBkZWZpbmUgUEFUSF9ERVZfTlVMTAkibnVsIgorKyMgaWZuZGVmIHNzaXplX3QKKysjICBpbmNsdWRlIDxCYXNlVHNkLmg+CisrIyAgZGVmaW5lIHNzaXplX3QgU1NJWkVfVAorKyMgZW5kaWYKKysjIGluY2x1ZGUgIndpbi1kaXJlbnQuaCIKKyAjZWxzZQorICMgZGVmaW5lIFBBVEhfREVWX05VTEwJIi9kZXYvbnVsbCIKKysjIGluY2x1ZGUgPGRpcmVudC5oPgorKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisgI2VuZGlmCisgCisgI2VuZGlmCistLSAKKzIuNC4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZi9wa2djb25mLzAwMDEtc3RkaW5jLmgtZml4LWJ1aWxkLXdpdGgtbWluZ3cucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmYvcGtnY29uZi8wMDAxLXN0ZGluYy5oLWZpeC1idWlsZC13aXRoLW1pbmd3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZWJlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmYvcGtnY29uZi8wMDAxLXN0ZGluYy5oLWZpeC1idWlsZC13aXRoLW1pbmd3LnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK0Zyb20gZWEyOGM1YjM0NDU3Y2Y3Njc2MTgxYjI4NGUyMmVhNWY3OWEzMGQ4NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJNYXhpbiBCLiBKb2huIiA8bWF4aW4uam9obkBpbnRlbC5jb20+CitEYXRlOiBUaHUsIDEzIEp1bCAyMDE3IDE0OjQ3OjMxICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIHN0ZGluYy5oOiBmaXggYnVpbGQgd2l0aCBtaW5ndworCitGaXhlcyB0aGlzIGJ1aWxkIGVycm9yIHdpdGggbWluZ3c6CisuLi4KK3wgY29tcGlsYXRpb24gdGVybWluYXRlZC4KK3wgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC4uL3BrZ2NvbmYtMS4zLjcvbGlicGtnY29uZi9saWJwa2djb25mLmg6MTk6MCwKK3wgZnJvbSAuLi9wa2djb25mLTEuMy43L2xpYnBrZ2NvbmYvYXVkaXQuYzoxNjoKK3wgLi4vcGtnY29uZi0xLjMuNy9saWJwa2djb25mL3N0ZGluYy5oOjM2OjEyOiBmYXRhbCBlcnJvcjogQmFzZVRzZC5oOiBObworc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorfCAjIGluY2x1ZGUgPEJhc2VUc2QuaD4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+CistLS0KKyBsaWJwa2djb25mL3N0ZGluYy5oIHwgMTAgKysrKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYnBrZ2NvbmYvc3RkaW5jLmggYi9saWJwa2djb25mL3N0ZGluYy5oCitpbmRleCBhYzdlNTNjLi5kOGVmY2Y1IDEwMDY0NAorLS0tIGEvbGlicGtnY29uZi9zdGRpbmMuaAorKysrIGIvbGlicGtnY29uZi9zdGRpbmMuaAorQEAgLTMzLDEwICszMywxOCBAQAorICMgaW5jbHVkZSA8bWFsbG9jLmg+CisgIyBkZWZpbmUgUEFUSF9ERVZfTlVMTAkibnVsIgorICMgaWZuZGVmIHNzaXplX3QKKysjIGlmbmRlZiBfX01JTkdXMzJfXworICMgIGluY2x1ZGUgPEJhc2VUc2QuaD4KKysjIGVsc2UKKysjICBpbmNsdWRlIDxiYXNldHNkLmg+CisrIyBlbmRpZgorICMgIGRlZmluZSBzc2l6ZV90IFNTSVpFX1QKKyAjIGVuZGlmCistIyBpbmNsdWRlICJ3aW4tZGlyZW50LmgiCisrIyBpZm5kZWYgX19NSU5HVzMyX18KKysjICBpbmNsdWRlICJ3aW4tZGlyZW50LmgiCisrIyBlbHNlCisrIyBpbmNsdWRlIDxkaXJlbnQuaD4KKysjIGVuZGlmCisgI2Vsc2UKKyAjIGRlZmluZSBQQVRIX0RFVl9OVUxMCSIvZGV2L251bGwiCisgIyBpbmNsdWRlIDxkaXJlbnQuaD4KKy0tIAorMi40LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25mL3BrZ2NvbmYvcGtnLWNvbmZpZy1lc2RrLmluIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25mL3BrZ2NvbmYvcGtnLWNvbmZpZy1lc2RrLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYzliMGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmYvcGtnY29uZi9wa2ctY29uZmlnLWVzZGsuaW4KQEAgLTAsMCArMSwyNCBAQAorIyEgL2Jpbi9zaAorCisjIE9yaWduYWwgcGtnLWNvbmZpZy1uYXRpdmUgYWN0aW9uIHdoZW4gY2FsbGVkIGFzIHBrZy1jb25maWctbmF0aXZlCisjIE5PIENoYW5nZSBoZXJlCitpZiBbICJwa2ctY29uZmlnLW5hdGl2ZSIgPSAiYGJhc2VuYW1lICQwYCIgXSA7IHRoZW4KKwlQS0dfQ09ORklHX1BBVEg9IkBQQVRIX05BVElWRUAiCisJUEtHX0NPTkZJR19MSUJESVI9IkBMSUJESVJfTkFUSVZFQCIKKwl1bnNldCBQS0dfQ09ORklHX1NZU1JPT1RfRElSCitlbHNlCisJIyBpbiB0aGlzIGNhc2UgY2hlY2sgaWYgd2UgYXJlIGluIHRoZSBlc2RrCisJaWYgWyAiJE9FX1NLSVBfU0RLX0NIRUNLIiA9ICIxIiBdIDsgdGhlbgorCQlwYXJlbnRwaWQ9YHBzIC1vIHBwaWQ9IC1wICQkYAorCQlwYXJlbnRwaWRfaW5mbz1gcHMgLXdvIGNvbW09IC1vIGFyZ3M9IC1wICRwYXJlbnRwaWRgCisKKwkJIyBjaGVjayBpZiB3ZSBhcmUgYmVpbmcgY2FsbGVkIGZyb20gIHRoZSBrZXJuZWwncyBtYWtlIG1lbnVjb25maWcKKwkJaWYgKCBlY2hvICRwYXJlbnRwaWRfaW5mbyB8IGdyZXAgLXEgY2hlY2stbHhkaWFsb2cgKSA7IHRoZW4KKwkJCVBLR19DT05GSUdfUEFUSD0iQFBBVEhfTkFUSVZFQCIKKwkJCVBLR19DT05GSUdfTElCRElSPSJATElCRElSX05BVElWRUAiCisJCQl1bnNldCBQS0dfQ09ORklHX1NZU1JPT1RfRElSCisJCWZpCisJZmkKK2ZpCisKK3BrZy1jb25maWcucmVhbCAiJEAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmYvcGtnY29uZi9wa2ctY29uZmlnLW5hdGl2ZS5pbiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZi9wa2djb25mL3BrZy1jb25maWctbmF0aXZlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZDMwYTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmYvcGtnY29uZi9wa2ctY29uZmlnLW5hdGl2ZS5pbgpAQCAtMCwwICsxLDYgQEAKKyMhIC9iaW4vc2gKKworUEtHX0NPTkZJR19QQVRIPSJAUEFUSF9OQVRJVkVAIgordW5zZXQgUEtHX0NPTkZJR19TWVNST09UX0RJUgorCitwa2ctY29uZmlnICIkQCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZi9wa2djb25mL3BrZy1jb25maWctd3JhcHBlciBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZi9wa2djb25mL3BrZy1jb25maWctd3JhcHBlcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42OTVmMzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25mL3BrZ2NvbmYvcGtnLWNvbmZpZy13cmFwcGVyCkBAIC0wLDAgKzEsMTYgQEAKKyMhL2Jpbi9zaAorIyBwa2djb25mIHdyYXBwZXIgdG8gZGVhbCB3aXRoIHBrZy1jb25maWcvcGtnY29uZiBjb21wYXRpYmlsaXR5IGlzc3VlcworIworIyBDb3B5cmlnaHQgKEMpIDIwMTUgQ2hyaXN0b3BoZXIgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KKyMgTGljZW5zZTogTUlUIChzZWUgQ09QWUlORy5NSVQgYXQgdGhlIHJvb3Qgb2YgdGhlIHJlcG9zaXRvcnkgZm9yIHRlcm1zKQorCitmb3IgYXJnOyBkbworICAgIGNhc2UgIiRhcmciIGluCisgICAgICAgIC0tdmFyaWFibGV8LS12YXJpYWJsZT0qKQorICAgICAgICAgICAgIyBwa2ctY29uZmlnIGRvZXNuJ3Qgc3lzcm9vdC1wcmVmaXggdXNlciB2YXJpYWJsZXMKKyAgICAgICAgICAgIHVuc2V0IFBLR19DT05GSUdfU1lTUk9PVF9ESVIKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworZG9uZQorCitleGVjIHBrZ2NvbmYgIiRAIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25mL3BrZ2NvbmZfMS4zLjcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmYvcGtnY29uZl8xLjMuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGEwZGQxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25mL3BrZ2NvbmZfMS4zLjcuYmIKQEAgLTAsMCArMSw3MyBAQAorU1VNTUFSWSA9ICJwa2djb25mIHByb3ZpZGVzIGNvbXBpbGVyIGFuZCBsaW5rZXIgY29uZmlndXJhdGlvbiBmb3IgZGV2ZWxvcG1lbnQgZnJhbWV3b3Jrcy4iCitERVNDUklQVElPTiA9ICJwa2djb25mIGlzIGEgcHJvZ3JhbSB3aGljaCBoZWxwcyB0byBjb25maWd1cmUgY29tcGlsZXIgYW5kIGxpbmtlciBcCitmbGFncyBmb3IgZGV2ZWxvcG1lbnQgZnJhbWV3b3Jrcy4gSXQgaXMgc2ltaWxhciB0byBwa2ctY29uZmlnIGZyb20gXAorZnJlZWRlc2t0b3Aub3JnLCBwcm92aWRpbmcgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5IHdoaWxlIGFsc28gbWFpbnRhaW5pbmcgXAorY29tcGF0aWJpbGl0eS4iCitIT01FUEFHRSA9ICJodHRwOi8vcGtnY29uZi5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vZ2l0aHViLmNvbS9wa2djb25mL3BrZ2NvbmYvaXNzdWVzIgorU0VDVElPTiA9ICJkZXZlbCIKK1BST1ZJREVTICs9ICJwa2djb25maWciCitSUFJPVklERVNfJHtQTn0gKz0gInBrZ2NvbmZpZyIKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworIyBUaGUgcGtnY29uZiBsaWNlbnNlIHNlZW1zIHRvIGJlIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJTRC0yLUNsYXVzZSBvcgorIyBJU0MsIGJ1dCBoYXMgZGlmZmVyZW50IHdvcmRpbmcsIHNvIG5lZWRzIGl0cyBvd24gbmFtZS4KK0xJQ0VOU0UgPSAicGtnY29uZiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU0OGE5ZDFkYjEwY2MwYTg0ODEwYzMxM2EwZTkyNjZmIgorCitTUkNfVVJJID0gIlwKKyAgICBodHRwczovL2Rpc3RmaWxlcy5kZXJlZmVyZW5jZWQub3JnL3BrZ2NvbmYvcGtnY29uZi0ke1BWfS50YXIueHogXAorICAgIGZpbGU6Ly8wMDAxLU1pbmltYWwtdHdlYWtzLXRvLWNvbXBpbGUtd2l0aC1WaXN1YWwtQy0yMDE1LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMS1zdGRpbmMuaC1maXgtYnVpbGQtd2l0aC1taW5ndy5wYXRjaCBcCisgICAgZmlsZTovL3BrZy1jb25maWctd3JhcHBlciBcCisgICAgZmlsZTovL3BrZy1jb25maWctbmF0aXZlLmluIFwKKyAgICBmaWxlOi8vcGtnLWNvbmZpZy1lc2RrLmluIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJhYzM1YzM0ZDg0ZWViNmEwM2Q0ZDYxYjg1NTVkNjE5NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxYmU3ZTQwOTAwYzc0Njc4OTNjNjVmODEwMjExYjFlNjhkYTNmOGQ1ZTcwZmRkYjg4M2ZjMjQ4MzljYWQwMzM5IgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLXBrZy1jb25maWctZGlyPScke2xpYmRpcn0vcGtnY29uZmlnOiR7ZGF0YWRpcn0vcGtnY29uZmlnJyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgICMgSW5zdGFsbCBhIHdyYXBwZXIgd2hpY2ggZGVhbHMsIGFzIG11Y2ggYXMgcG9zc2libGUgd2l0aCBwa2djb25mIHZzCisgICAgIyBwa2ctY29uZmlnIGNvbXBhdGliaWxpdHkgaXNzdWVzLgorICAgIGluc3RhbGwgLW0gMDc1NSAiJHtXT1JLRElSfS9wa2ctY29uZmlnLXdyYXBwZXIiICIke0R9JHtiaW5kaXJ9L3BrZy1jb25maWciCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisgICAgIyBJbnN0YWxsIGEgcGtnLWNvbmZpZy1uYXRpdmUgd3JhcHBlciB0aGF0IHdpbGwgdXNlIHRoZSBuYXRpdmUgc3lzcm9vdCBpbnN0ZWFkCisgICAgIyBvZiB0aGUgTUFDSElORSBzeXNyb290LCBmb3IgdXNpbmcgcGtnLWNvbmZpZyB3aGVuIGJ1aWxkaW5nIG5hdGl2ZSB0b29scy4KKyAgICBzZWQgLWUgInN8QFBBVEhfTkFUSVZFQHwke1BLR19DT05GSUdfUEFUSH18IiBcCisgICAgICAgIDwgJHtXT1JLRElSfS9wa2ctY29uZmlnLW5hdGl2ZS5pbiA+ICR7Qn0vcGtnLWNvbmZpZy1uYXRpdmUKKyAgICBpbnN0YWxsIC1tNzU1ICR7Qn0vcGtnLWNvbmZpZy1uYXRpdmUgJHtEfSR7YmluZGlyfS9wa2ctY29uZmlnLW5hdGl2ZQorICAgIHNlZCAtZSAic3xAUEFUSF9OQVRJVkVAfCR7UEtHX0NPTkZJR19QQVRIfXwiIFwKKyAgICAgICAgLWUgInN8QExJQkRJUl9OQVRJVkVAfCR7UEtHX0NPTkZJR19MSUJESVJ9fCIgXAorICAgICAgICA8ICR7V09SS0RJUn0vcGtnLWNvbmZpZy1lc2RrLmluID4gJHtCfS9wa2ctY29uZmlnLWVzZGsKKyAgICBpbnN0YWxsIC1tNzU1ICR7Qn0vcGtnLWNvbmZpZy1lc2RrICR7RH0ke2JpbmRpcn0vcGtnLWNvbmZpZy1lc2RrCit9CisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInBrZy1jb25maWciCisKKyMgV2hlbiB1c2luZyB0aGUgUlBNIGdlbmVyYXRlZCBhdXRvbWF0aWMgcGFja2FnZSBkZXBlbmRlbmNpZXMsIHNvbWUgcGFja2FnZXMKKyMgd2lsbCBlbmQgdXAgcmVxdWlyaW5nICdwa2djb25maWcocGtnLWNvbmZpZyknLiAgQWxsb3cgdGhpcyBiZWhhdmlvciBieQorIyBzcGVjaWZ5aW5nIGFuIGFwcHJvcHJpYXRlIHByb3ZpZGUuCitSUFJPVklERVNfJHtQTn0gKz0gInBrZ2NvbmZpZyhwa2ctY29uZmlnKSIKKworIyBJbmNsdWRlIHBrZy5tNCBpbiB0aGUgbWFpbiBwYWNrYWdlLCBsZWF2aW5nIGxpYnBrZ2NvbmYgZGV2IGZpbGVzIGluIC1kZXYKK0ZJTEVTXyR7UE59LWRldl9yZW1vdmUgPSAiJHtkYXRhZGlyfS9hY2xvY2FsIgorRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYWNsb2NhbCIKKworQkJDTEFTU0VYVEVORCArPSAibmF0aXZlIG5hdGl2ZXNkayIKKworcGtnY29uZl9zc3RhdGVfZml4dXBfZXNkayAoKSB7CisgICBpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgLWEgIiR7V0lUSElOX0VYVF9TREt9IiA9ICIxIiBdIDsgdGhlbgorICAgICAgIHBrZ2NvbmZkaXI9IiR7U1NUQVRFX0lOU1RESVJ9L3JlY2lwZS1zeXNyb290LW5hdGl2ZS8ke2JpbmRpcl9uYXRpdmV9IgorICAgICAgIG12ICRwa2djb25mZGlyL3BrZy1jb25maWcgJHBrZ2NvbmZkaXIvcGtnLWNvbmZpZy5yZWFsCisgICAgICAgbG5yICRwa2djb25mZGlyL3BrZy1jb25maWctZXNkayAkcGtnY29uZmRpci9wa2ctY29uZmlnCisgICAgICAgc2VkIC1pIC1lICJzfF5wa2ctY29uZmlnfHBrZy1jb25maWcucmVhbHwiICRwa2djb25mZGlyL3BrZy1jb25maWctbmF0aXZlCisgICBmaQorfQorCitTU1RBVEVQT1NUVU5QQUNLRlVOQ1NfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgcGtnY29uZl9zc3RhdGVfZml4dXBfZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy8wMDAxLWdkYXRlLU1vdmUtd2FybmluZy1wcmFnbWEtb3V0c2lkZS1vZi1mdW5jdGlvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy8wMDAxLWdkYXRlLU1vdmUtd2FybmluZy1wcmFnbWEtb3V0c2lkZS1vZi1mdW5jdGlvbi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRjODI5My4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWcvMDAwMS1nZGF0ZS1Nb3ZlLXdhcm5pbmctcHJhZ21hLW91dHNpZGUtb2YtZnVuY3Rpb24ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi1Gcm9tIDk0NmQzNjI2NmQ4YTMwZjA0ZmUzNGQzMTgzYmY0OTI5MTQxOTM0ZDIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBjb3lwdSA8Y295cHVAc2RmLm9yZz4KLURhdGU6IFdlZCwgMiBNYXIgMjAxNiAxOTozODo0OCArMDIwMAotU3ViamVjdDogW1BBVENIXSBnZGF0ZTogTW92ZSB3YXJuaW5nIHByYWdtYSBvdXRzaWRlIG9mIGZ1bmN0aW9uCi0KLUNvbW1pdCAwODE3YWY0MGU4Yzc0YzcyMWMzMGY2ZWY0ODJiMWY1M2QxMjA0NGM3IGJyZWFrcyB0aGUgYnVpbGQgb24KLW9sZGVyIHZlcnNpb25zIG9mIEdDQywgd2hpY2ggZG9uJ3QgYWxsb3cgcHJhZ21hIGluc2lkZSBmdW5jdGlvbnMuCi0KLWh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLzc2MTU1MAotLS0tCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi0gZ2xpYi9nbGliL2dkYXRlLmMgfCA1ICsrKysrCi0gMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvZ2xpYi9nbGliL2dkYXRlLmMgYi9nbGliL2dsaWIvZ2RhdGUuYwotaW5kZXggMTk3OGNmNy4uMjBlNmM0YSAxMDA2NDQKLS0tLSBhL2dsaWIvZ2xpYi9nZGF0ZS5jCi0rKysgYi9nbGliL2dsaWIvZ2RhdGUuYwotQEAgLTI0MzksNiArMjQzOSw5IEBAIHdpbjMyX3N0cmZ0aW1lX2hlbHBlciAoY29uc3QgR0RhdGUgICAgICpkLAotICAqCi0gICogUmV0dXJuczogbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiB0byB0aGUgYnVmZmVyLCBvciAwIHRoZSBidWZmZXIgd2FzIHRvbyBzbWFsbAotICAqLwotKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAotKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdmb3JtYXQtbm9ubGl0ZXJhbCIKLSsKLSBnc2l6ZSAgICAgCi0gZ19kYXRlX3N0cmZ0aW1lIChnY2hhciAgICAgICAqcywgCi0gICAgICAgICAgICAgICAgICBnc2l6ZSAgICAgICAgc2xlbiwgCi1AQCAtMjU0OSwzICsyNTUyLDUgQEAgZ19kYXRlX3N0cmZ0aW1lIChnY2hhciAgICAgICAqcywKLSAgIHJldHVybiByZXR2YWw7Ci0gI2VuZGlmCi0gfQotKwotKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCi0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy9wa2ctY29uZmlnLWVzZGsuaW4gYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWcvcGtnLWNvbmZpZy1lc2RrLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYzliMGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWcvcGtnLWNvbmZpZy1lc2RrLmluCkBAIC0wLDAgKzEsMjQgQEAKKyMhIC9iaW4vc2gKKworIyBPcmlnbmFsIHBrZy1jb25maWctbmF0aXZlIGFjdGlvbiB3aGVuIGNhbGxlZCBhcyBwa2ctY29uZmlnLW5hdGl2ZQorIyBOTyBDaGFuZ2UgaGVyZQoraWYgWyAicGtnLWNvbmZpZy1uYXRpdmUiID0gImBiYXNlbmFtZSAkMGAiIF0gOyB0aGVuCisJUEtHX0NPTkZJR19QQVRIPSJAUEFUSF9OQVRJVkVAIgorCVBLR19DT05GSUdfTElCRElSPSJATElCRElSX05BVElWRUAiCisJdW5zZXQgUEtHX0NPTkZJR19TWVNST09UX0RJUgorZWxzZQorCSMgaW4gdGhpcyBjYXNlIGNoZWNrIGlmIHdlIGFyZSBpbiB0aGUgZXNkaworCWlmIFsgIiRPRV9TS0lQX1NES19DSEVDSyIgPSAiMSIgXSA7IHRoZW4KKwkJcGFyZW50cGlkPWBwcyAtbyBwcGlkPSAtcCAkJGAKKwkJcGFyZW50cGlkX2luZm89YHBzIC13byBjb21tPSAtbyBhcmdzPSAtcCAkcGFyZW50cGlkYAorCisJCSMgY2hlY2sgaWYgd2UgYXJlIGJlaW5nIGNhbGxlZCBmcm9tICB0aGUga2VybmVsJ3MgbWFrZSBtZW51Y29uZmlnCisJCWlmICggZWNobyAkcGFyZW50cGlkX2luZm8gfCBncmVwIC1xIGNoZWNrLWx4ZGlhbG9nICkgOyB0aGVuCisJCQlQS0dfQ09ORklHX1BBVEg9IkBQQVRIX05BVElWRUAiCisJCQlQS0dfQ09ORklHX0xJQkRJUj0iQExJQkRJUl9OQVRJVkVAIgorCQkJdW5zZXQgUEtHX0NPTkZJR19TWVNST09UX0RJUgorCQlmaQorCWZpCitmaQorCitwa2ctY29uZmlnLnJlYWwgIiRAIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZ19naXQuYmIKaW5kZXggZGM0NDk5Mi4uNTJlZjJhOSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWdfZ2l0LmJiCkBAIC04LDEzICs4LDEzIEBACiBMSUNFTlNFID0gIkdQTHYyKyIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgogCi1TUkNSRVYgPSAiODcxNTJjMDViZTg4Y2E4YmU3MWEzYTU2M2YyNzViMzY4NmQzMmMyOCIKLVBWID0gIjAuMjkuMStnaXQke1NSQ1BWfSIKK1NSQ1JFViA9ICJlZGY4ZTZmMGVhNzdlZGUwNzNmMDdiZmYwZDJhZTFmYzdhMzgxMDNiIgorUFYgPSAiMC4yOS4yK2dpdCR7U1JDUFZ9IgogCiBTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL3BrZy1jb25maWcgXAorICAgICAgICAgICBmaWxlOi8vcGtnLWNvbmZpZy1lc2RrLmluIFwKICAgICAgICAgICAgZmlsZTovL3BrZy1jb25maWctbmF0aXZlLmluIFwKICAgICAgICAgICAgZmlsZTovL2ZpeC1nbGliLWNvbmZpZ3VyZS1saWJ0b29sLXVzYWdlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtZ2RhdGUtTW92ZS13YXJuaW5nLXByYWdtYS1vdXRzaWRlLW9mLWZ1bmN0aW9uLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtZ2xpYi1nZXR0ZXh0Lm00LVVwZGF0ZS1BTV9HTElCX0dOVV9HRVRURVhULXRvLW1hdGNoLS5wYXRjaCBcCiAgICAgICAgICAgICIKIApAQCAtNTUsNCArNTUsMTkgQEAKICAgICAgICAgLWUgInN8QExJQkRJUl9OQVRJVkVAfCR7UEtHX0NPTkZJR19MSUJESVJ9fCIgXAogICAgICAgICA8ICR7V09SS0RJUn0vcGtnLWNvbmZpZy1uYXRpdmUuaW4gPiAke0J9L3BrZy1jb25maWctbmF0aXZlCiAgICAgaW5zdGFsbCAtbTc1NSAke0J9L3BrZy1jb25maWctbmF0aXZlICR7RH0ke2JpbmRpcn0vcGtnLWNvbmZpZy1uYXRpdmUKKyAgICBzZWQgLWUgInN8QFBBVEhfTkFUSVZFQHwke1BLR19DT05GSUdfUEFUSH18IiBcCisgICAgICAgIC1lICJzfEBMSUJESVJfTkFUSVZFQHwke1BLR19DT05GSUdfTElCRElSfXwiIFwKKyAgICAgICAgPCAke1dPUktESVJ9L3BrZy1jb25maWctZXNkay5pbiA+ICR7Qn0vcGtnLWNvbmZpZy1lc2RrCisgICAgaW5zdGFsbCAtbTc1NSAke0J9L3BrZy1jb25maWctZXNkayAke0R9JHtiaW5kaXJ9L3BrZy1jb25maWctZXNkawogfQorCitwa2djb25maWdfc3N0YXRlX2ZpeHVwX2VzZGsgKCkgeworCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiAtYSAiJHtXSVRISU5fRVhUX1NES30iID0gIjEiIF0gOyB0aGVuCisJCXBrZ2NvbmZkaXI9IiR7U1NUQVRFX0lOU1RESVJ9L3JlY2lwZS1zeXNyb290LW5hdGl2ZS8ke2JpbmRpcl9uYXRpdmV9IgorCQltdiAkcGtnY29uZmRpci9wa2ctY29uZmlnICRwa2djb25mZGlyL3BrZy1jb25maWcucmVhbAorCQlsbnIgJHBrZ2NvbmZkaXIvcGtnLWNvbmZpZy1lc2RrICRwa2djb25mZGlyL3BrZy1jb25maWcKKwkJc2VkIC1pIC1lICJzfF5wa2ctY29uZmlnfHBrZy1jb25maWcucmVhbHwiICRwa2djb25mZGlyL3BrZy1jb25maWctbmF0aXZlCisJZmkKK30KKworU1NUQVRFUE9TVFVOUEFDS0ZVTkNTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIHBrZ2NvbmZpZ19zc3RhdGVfZml4dXBfZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rX2dpdC5iYgppbmRleCA0NTI5ZGJmLi41NzBlZjM2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGlua19naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmtfZ2l0LmJiCkBAIC0zLDYgKzMsNyBAQAogIyBXb3VsZCBuZWVkIHRyYW5zZmlnLW5hdGl2ZSBmb3IgZG9jdW1lbnRhdGlvbiBpZiBpdCB3YXNuJ3QgZGlzYWJsZWQKIERFUEVORFMgPSAiZWxmdXRpbHMgYmludXRpbHMiCiBTVU1NQVJZID0gIkFuIEVMRiBwcmVsaW5raW5nIHV0aWxpdHkiCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC5jZ2kvcHJlbGluay1jcm9zcy9hYm91dC8iCiBERVNDUklQVElPTiA9ICJUaGUgcHJlbGluayBwYWNrYWdlIGNvbnRhaW5zIGEgdXRpbGl0eSB3aGljaCBtb2RpZmllcyBFTEYgc2hhcmVkIGxpYnJhcmllcyBcCiBhbmQgZXhlY3V0YWJsZXMsIHNvIHRoYXQgZmFyIGZld2VyIHJlbG9jYXRpb25zIG5lZWQgdG8gYmUgcmVzb2x2ZWQgYXQgXAogcnVudGltZSBhbmQgdGh1cyBwcm9ncmFtcyBjb21lIHVwIGZhc3Rlci4iCkBAIC0zMSw2ICszMiw4IEBACiAgICAgICAgICAgIGZpbGU6Ly9wcmVsaW5rLmNyb24uZGFpbHkgXAogICAgICAgICAgICBmaWxlOi8vcHJlbGluay5kZWZhdWx0IFwKIAkgICBmaWxlOi8vbWFjcm9zLnByZWxpbmsiCitVUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICJ1cHN0cmVhbSBoYXMgbm8gdXNhYmxlIHRhZ3MiCitVUFNUUkVBTV9WRVJTSU9OX1VOS05PV04gPSAiMSIKIAogVEFSR0VUX09TX09SSUcgOj0gIiR7VEFSR0VUX09TfSIKIE9WRVJSSURFU19hcHBlbmQgPSAiOiR7VEFSR0VUX09TX09SSUd9IgpAQCAtMTUwLDEzICsxNTMsMTUgQEAKIAlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9tYWNyb3MucHJlbGluayAke0R9JHtzeXNjb25mZGlyfS9ycG0vbWFjcm9zLnByZWxpbmsKIH0KIAotIyBJZiB3ZSdyZSB1c2luZyBpbWFnZS1wcmVsaW5rLCB3ZSB3YW50IHRvIHNraXAgdGhpcyBvbiB0aGUgaG9zdCBzaWRlCi0jIGJ1dCBzdGlsbCBkbyBpdCBpZiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQgb24gdGhlIHRhcmdldC4uLgorIyBJZiB3ZSBhZSBkb2luZyBhIGNyb3NzIGluc3RhbGwsIHdlIHdhbnQgdG8gYXZvaWQgcHJlbGlua2luZy4KKyMgUHJlbGlua2luZyBkdXJpbmcgYSBjcm9zcyBpbnN0YWxsIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBpbWFnZS1wcmVsaW5rCisjIGJiY2xhc3MuICBJZiB0aGUgdXNlciBkZXNpcmVzIHRoaXMgdG8gcnVuIG9uIHRoZSB0YXJnZXQgYXQgZmlyc3QgYm9vdAorIyB0aGV5IHdpbGwgbmVlZCB0byBjcmVhdGUgYSBjdXN0b20gYm9vdCBzY3JpcHQuCiBwa2dfcG9zdGluc3RfcHJlbGluaygpIHsKICMhL2Jpbi9zaAogCiBpZiBbICJ4JEQiICE9ICJ4IiBdOyB0aGVuCi0gICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdVU0VSX0NMQVNTRVMnLCAnaW1hZ2UtcHJlbGluaycsICdleGl0IDAnLCAnZXhpdCAxJywgZCl9CisgIGV4aXQgMAogZmkKIAogcHJlbGluayAtYQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvMDAwMS1Vc2UtZXBvbGwtQVBJLW9uLUxpbnV4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvMDAwMS1Vc2UtZXBvbGwtQVBJLW9uLUxpbnV4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNTU3YjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy8wMDAxLVVzZS1lcG9sbC1BUEktb24tTGludXgucGF0Y2gKQEAgLTAsMCArMSwyOTIgQEAKK0Zyb20gOWU0MDdlMGJlMDE2OTVlN2I5MjdmNTgyMGFkZTg3ZWU5NjAyYzI0OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogRnJpLCAxNSBTZXAgMjAxNyAxNzowMDoxNCArMDMwMAorU3ViamVjdDogW1BBVENIXSBVc2UgZXBvbGwgQVBJIG9uIExpbnV4CisKK0Fsc28gYSBjb3VwbGUgb2Ygb3RoZXIgbW9kaWZpY2F0aW9ucyBkdWUgdG8gZXBvbGwgaGF2aW5nCithIGRpZmZlcmVudCBhcHByb2FjaCB0byBob3cgdGhlIHdvcmtpbmcgc2V0IG9mIGZkcyBpcyBkZWZpbmVkCithbmQgdXNlZDoKKzEpIG9wZW5fY2xpZW50KCkgcmV0dXJucyBhbiBpbmRleCBpbnRvIHRoZSBhcnJheSBvZiBjbGllbnRzCisyKSBjbG9zZV9jbGllbnQoKSBoYXMgYSBwcm90ZWN0aW9uIGFnYWluc3QgYmVpbmcgY2FsbGVkIHR3aWNlCit3aXRoIHRoZSBzYW1lIGNsaWVudCAod2hpY2ggd291bGQgbWVzcyB1cCB0aGUgYWN0aXZlX2NsaWVudHMKK2NvdW50ZXIpCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtTZWVicyBDQydkIGJ5IGVtYWlsXQorU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CisKKy0tLQorIGVudW1zL2V4aXRfc3RhdHVzLmluIHwgICAzICsKKyBwc2V1ZG9fc2VydmVyLmMgICAgICB8IDE4OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDE5MCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZW51bXMvZXhpdF9zdGF0dXMuaW4gYi9lbnVtcy9leGl0X3N0YXR1cy5pbgoraW5kZXggNmJlNDRkMy4uODhmOTRjZCAxMDA2NDQKKy0tLSBhL2VudW1zL2V4aXRfc3RhdHVzLmluCisrKysgYi9lbnVtcy9leGl0X3N0YXR1cy5pbgorQEAgLTE4LDMgKzE4LDYgQEAgbGlzdGVuX2ZkLCAic2VydmVyIGxvb3AgaGFkIG5vIHZhbGlkIGxpc3RlbiBmZCIKKyBwc2V1ZG9fbG9hZGVkLCAic2VydmVyIGNvdWxkbid0IGdldCBvdXQgb2YgcHNldWRvIGVudmlyb25tZW50IgorIHBzZXVkb19wcmVmaXgsICJjb3VsZG4ndCBnZXQgdmFsaWQgcHNldWRvIHByZWZpeCIKKyBwc2V1ZG9faW52b2NhdGlvbiwgImludmFsaWQgc2VydmVyIGNvbW1hbmQgYXJndW1lbnRzIgorK2Vwb2xsX2NyZWF0ZSwgImVwb2xsX2NyZWF0ZSgpIGZhaWxlZCIKKytlcG9sbF9jdGwsICJlcG9sbF9jdGwoKSBmYWlsZWQiCisrCitkaWZmIC0tZ2l0IGEvcHNldWRvX3NlcnZlci5jIGIvcHNldWRvX3NlcnZlci5jCitpbmRleCBmZjE2ZWZkLi4xNGQzNGRlIDEwMDY0NAorLS0tIGEvcHNldWRvX3NlcnZlci5jCisrKysgYi9wc2V1ZG9fc2VydmVyLmMKK0BAIC00MCw2ICs0MCwxMiBAQAorICNpbmNsdWRlICJwc2V1ZG9fY2xpZW50LmgiCisgI2luY2x1ZGUgInBzZXVkb19kYi5oIgorIAorKy8vIFRoaXMgaGFzIHRvIGNvbWUgYWZ0ZXIgcHNldWRvIGluY2x1ZGVzLCBhcyB0aGF0J3Mgd2hlcmUgUFNFVURPX1BPUlQgZGVmaW5lcyBhcmUKKysjaWZkZWYgUFNFVURPX1BPUlRfTElOVVgKKysjaW5jbHVkZSA8c3lzL2Vwb2xsLmg+CisrI2VuZGlmCisrCisrCisgc3RhdGljIGludCBsaXN0ZW5fZmQgPSAtMTsKKyAKKyB0eXBlZGVmIHN0cnVjdCB7CitAQCAtNTksNiArNjUsNyBAQCBzdGF0aWMgaW50IGFjdGl2ZV9jbGllbnRzID0gMCwgaGlnaGVzdF9jbGllbnQgPSAwLCBtYXhfY2xpZW50cyA9IDA7CisgCisgI2RlZmluZSBMT09QX0RFTEFZIDIKKyAjZGVmaW5lIERFRkFVTFRfUFNFVURPX1NFUlZFUl9USU1FT1VUIDMwCisrI2RlZmluZSBFUE9MTF9NQVhfRVZFTlRTIDEwCisgaW50IHBzZXVkb19zZXJ2ZXJfdGltZW91dCA9IERFRkFVTFRfUFNFVURPX1NFUlZFUl9USU1FT1VUOworIHN0YXRpYyBpbnQgZGllX3BlYWNlZnVsbHkgPSAwOworIHN0YXRpYyBpbnQgZGllX2ZvcmNlZnVsbHkgPSAwOworQEAgLTgwLDYgKzg3LDkgQEAgcXVpdF9ub3coaW50IHNpZ25hbCkgeworIHN0YXRpYyBpbnQgbWVzc2FnZXMgPSAwLCByZXNwb25zZXMgPSAwOworIHN0YXRpYyBzdHJ1Y3QgdGltZXZhbCBtZXNzYWdlX3RpbWUgPSB7IC50dl9zZWMgPSAwIH07CisgCisrI2lmZGVmIFBTRVVET19QT1JUX0xJTlVYCisrc3RhdGljIHZvaWQgcHNldWRvX3NlcnZlcl9sb29wX2Vwb2xsKHZvaWQpOworKyNlbmRpZgorIHN0YXRpYyB2b2lkIHBzZXVkb19zZXJ2ZXJfbG9vcCh2b2lkKTsKKyAKKyAvKiBoZWxwZXIgZnVuY3Rpb24gdG8gbWFrZSBhIGRpcmVjdG9yeSwganVzdCBsaWtlIG1rZGlyIC1wLgorQEAgLTM2OSwxMiArMzc5LDE2IEBAIHBzZXVkb19zZXJ2ZXJfc3RhcnQoaW50IGRhZW1vbml6ZSkgeworIAkJCWtpbGwocHBpZCwgU0lHVVNSMSk7CisgCQl9CisgCX0KKysjaWZkZWYgUFNFVURPX1BPUlRfTElOVVgKKysJcHNldWRvX3NlcnZlcl9sb29wX2Vwb2xsKCk7CisrI2Vsc2UKKyAJcHNldWRvX3NlcnZlcl9sb29wKCk7CisrI2VuZGlmCisgCXJldHVybiAwOworIH0KKyAKKyAvKiBtZXNzIHdpdGggaW50ZXJuYWwgdGFibGVzIGFzIG5lZWRlZCAqLworLXN0YXRpYyB2b2lkCisrc3RhdGljIHVuc2lnbmVkIGludAorIG9wZW5fY2xpZW50KGludCBmZCkgeworIAlwc2V1ZG9fY2xpZW50X3QgKm5ld19jbGllbnRzOworIAlpbnQgaTsKK0BAIC0zOTAsNyArNDA0LDcgQEAgb3Blbl9jbGllbnQoaW50IGZkKSB7CisgCQkJKythY3RpdmVfY2xpZW50czsKKyAJCQlpZiAoaSA+IGhpZ2hlc3RfY2xpZW50KQorIAkJCQloaWdoZXN0X2NsaWVudCA9IGk7CistCQkJcmV0dXJuOworKwkJCXJldHVybiBpOworIAkJfQorIAl9CisgCitAQCAtNDE0LDkgKzQyOCwxMSBAQCBvcGVuX2NsaWVudChpbnQgZmQpIHsKKyAKKyAJCW1heF9jbGllbnRzICs9IDE2OworIAkJKythY3RpdmVfY2xpZW50czsKKysJCXJldHVybiBtYXhfY2xpZW50cyAtIDE2OworIAl9IGVsc2UgeworIAkJcHNldWRvX2RpYWcoImVycm9yIGFsbG9jYXRpbmcgbmV3IGNsaWVudCwgZmQgJWRcbiIsIGZkKTsKKyAJCWNsb3NlKGZkKTsKKysJCXJldHVybiAwOworIAl9CisgfQorIAorQEAgLTQzMyw2ICs0NDksMTAgQEAgY2xvc2VfY2xpZW50KGludCBjbGllbnQpIHsKKyAJCQljbGllbnQsIGhpZ2hlc3RfY2xpZW50KTsKKyAJCXJldHVybjsKKyAJfQorKwlpZiAoY2xpZW50c1tjbGllbnRdLmZkID09IC0xKSB7CisrCQlwc2V1ZG9fZGVidWcoUERCR0ZfU0VSVkVSLCAiY2xpZW50ICVkIGFscmVhZHkgY2xvc2VkXG4iLCBjbGllbnQpOworKwkJcmV0dXJuOworKwl9CisgCWNsb3NlKGNsaWVudHNbY2xpZW50XS5mZCk7CisgCWNsaWVudHNbY2xpZW50XS5mZCA9IC0xOworIAlmcmVlKGNsaWVudHNbY2xpZW50XS50YWcpOworQEAgLTU2Niw2ICs1ODYsMTcxIEBAIHNlcnZlX2NsaWVudChpbnQgaSkgeworIAl9CisgfQorIAorKyNpZmRlZiBQU0VVRE9fUE9SVF9MSU5VWAorK3N0YXRpYyB2b2lkIHBzZXVkb19zZXJ2ZXJfbG9vcF9lcG9sbCh2b2lkKQorK3sKKysJc3RydWN0IHNvY2thZGRyX3VuIGNsaWVudDsKKysJc29ja2xlbl90IGxlbjsKKysgICAgICAgIGludCBpOworKyAgICAgICAgaW50IHJjOworKyAgICAgICAgaW50IGZkOworKwlpbnQgdGltZW91dDsKKysJc3RydWN0IGVwb2xsX2V2ZW50IGV2LCBldmVudHNbRVBPTExfTUFYX0VWRU5UU107CisrCWludCBsb29wX3RpbWVvdXQgPSBwc2V1ZG9fc2VydmVyX3RpbWVvdXQ7CisrCisrCWNsaWVudHMgPSBtYWxsb2MoMTYgKiBzaXplb2YoKmNsaWVudHMpKTsKKysKKysJY2xpZW50c1swXS5mZCA9IGxpc3Rlbl9mZDsKKysJY2xpZW50c1swXS5waWQgPSBnZXRwaWQoKTsKKysKKysJZm9yIChpID0gMTsgaSA8IDE2OyArK2kpIHsKKysJCWNsaWVudHNbaV0uZmQgPSAtMTsKKysJCWNsaWVudHNbaV0ucGlkID0gMDsKKysJCWNsaWVudHNbaV0udGFnID0gTlVMTDsKKysJCWNsaWVudHNbaV0ucHJvZ3JhbSA9IE5VTEw7CisrCX0KKysKKysJYWN0aXZlX2NsaWVudHMgPSAxOworKwltYXhfY2xpZW50cyA9IDE2OworKwloaWdoZXN0X2NsaWVudCA9IDA7CisrCisrCXBzZXVkb19kZWJ1ZyhQREJHRl9TRVJWRVIsICJzZXJ2ZXIgbG9vcCBzdGFydGVkLlxuIik7CisrCWlmIChsaXN0ZW5fZmQgPCAwKSB7CisrCQlwc2V1ZG9fZGlhZygiZ290IGludG8gbG9vcCB3aXRoIG5vIHZhbGlkIGxpc3RlbiBmZC5cbiIpOworKwkJZXhpdChQU0VVRE9fRVhJVF9MSVNURU5fRkQpOworKwl9CisrCisrCXRpbWVvdXQgPSBMT09QX0RFTEFZICogMTAwMDsKKysKKysJaW50IGVwb2xsZmQgPSBlcG9sbF9jcmVhdGUxKDApOworKwlpZiAoZXBvbGxmZCA9PSAtMSkgeworKwkJcHNldWRvX2RpYWcoImVwb2xsX2NyZWF0ZTEoKSBmYWlsZWQuXG4iKTsKKysJCWV4aXQoUFNFVURPX0VYSVRfRVBPTExfQ1JFQVRFKTsKKysJfQorKwlldi5ldmVudHMgPSBFUE9MTElOOworKwlldi5kYXRhLnU2NCA9IDA7CisrCWlmIChlcG9sbF9jdGwoZXBvbGxmZCwgRVBPTExfQ1RMX0FERCwgY2xpZW50c1swXS5mZCwgJmV2KSA9PSAtMSkgeworKwkJcHNldWRvX2RpYWcoImVwb2xsX2N0bCgpIGZhaWxlZCB3aXRoIGxpc3RlbmluZyBzb2NrZXQuXG4iKTsKKysJCWV4aXQoUFNFVURPX0VYSVRfRVBPTExfQ1RMKTsKKysJfQorKworKwlwZGJfbG9nX21zZyhTRVZFUklUWV9JTkZPLCBOVUxMLCBOVUxMLCBOVUxMLCAic2VydmVyIHN0YXJ0ZWQgKHBpZCAlZCkiLCBnZXRwaWQoKSk7CisrCisrICAgICAgICBmb3IgKDs7KSB7CisrCQlyYyA9IGVwb2xsX3dhaXQoZXBvbGxmZCwgZXZlbnRzLCBFUE9MTF9NQVhfRVZFTlRTLCB0aW1lb3V0KTsKKysJCWlmIChyYyA9PSAwIHx8IChyYyA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUikpIHsKKysJCQkvKiBJZiB0aGVyZSdzIG5vIGNsaWVudHMsIHN0YXJ0IHRpbWluZyBvdXQuICBJZiB0aGVyZQorKwkJCSAqIGFyZSBhY3RpdmUgY2xpZW50cywgbmV2ZXIgdGltZSBvdXQuCisrCQkJICovCisrCQkJaWYgKGFjdGl2ZV9jbGllbnRzID09IDEpIHsKKysJCQkJbG9vcF90aW1lb3V0IC09IExPT1BfREVMQVk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXliZSBmbHVzaCBkYXRhYmFzZSB0byBkaXNrICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGJfbWF5YmVfYmFja3VwKCk7CisrCQkJCWlmIChsb29wX3RpbWVvdXQgPD0gMCkgeworKwkJCQkJcHNldWRvX2RlYnVnKFBEQkdGX1NFUlZFUiwgIm5vIG1vcmUgY2xpZW50cywgZ290IGJvcmVkLlxuIik7CisrCQkJCQlkaWVfcGVhY2VmdWxseSA9IDE7CisrCQkJCX0gZWxzZSB7CisrCQkJCQkvKiBkaXNwbGF5IHRoaXMgaWYgbm90IGV4aXRpbmcgKi8KKysJCQkJCXBzZXVkb19kZWJ1ZyhQREJHRl9TRVJWRVIgfCBQREJHRl9CRU5DSE1BUkssICIlZCBtZXNzYWdlcyBoYW5kbGVkIGluICUuNGYgc2Vjb25kcywgJWQgcmVzcG9uc2VzXG4iLAorKwkJCQkJCW1lc3NhZ2VzLAorKwkJCQkJCShkb3VibGUpIG1lc3NhZ2VfdGltZS50dl9zZWMgKworKwkJCQkJCShkb3VibGUpIG1lc3NhZ2VfdGltZS50dl91c2VjIC8gMTAwMDAwMC4wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlcyk7CisrCQkJCX0KKysJCQl9CisrCQl9IGVsc2UgaWYgKHJjID4gMCkgeworKwkJCWxvb3BfdGltZW91dCA9IHBzZXVkb19zZXJ2ZXJfdGltZW91dDsKKysJCQlmb3IgKGkgPSAwOyBpIDwgcmM7ICsraSkgeworKwkJCQlpZiAoY2xpZW50c1tldmVudHNbaV0uZGF0YS51NjRdLmZkID09IGxpc3Rlbl9mZCkgeworKwkJCQkJaWYgKCFkaWVfZm9yY2VmdWxseSkgeworKwkJCQkJCWxlbiA9IHNpemVvZihjbGllbnQpOworKwkJCQkJCWlmICgoZmQgPSBhY2NlcHQobGlzdGVuX2ZkLCAoc3RydWN0IHNvY2thZGRyICopICZjbGllbnQsICZsZW4pKSAhPSAtMSkgeworKwkJCQkJCS8qIERvbid0IGFsbG93IGNsaWVudHMgdG8gZW5kIHVwIG9uIGZkIDIsIGJlY2F1c2UgZ2xpYmMncworKwkJCQkJCSAqIG1hbGxvYyBkZWJ1ZyB1c2VzIHRoYXQgZmQgdW5jb25kaXRpb25hbGx5LgorKwkJCQkJCSAqLworKwkJCQkJCQlpZiAoZmQgPT0gMikgeworKwkJCQkJCQkJaW50IG5ld2ZkID0gZmNudGwoZmQsIEZfRFVQRkQsIDMpOworKwkJCQkJCQkJY2xvc2UoZmQpOworKwkJCQkJCQkJZmQgPSBuZXdmZDsKKysJCQkJCQkJfQorKwkJCQkJCQlwc2V1ZG9fZGVidWcoUERCR0ZfU0VSVkVSLCAibmV3IGNsaWVudCBmZCAlZFxuIiwgZmQpOworKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEEgbmV3IGNsaWVudCBpbXBsaWNpdGx5IGNhbmNlbHMgYW55CisrCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcHJldmlvdXMgc2h1dGRvd24gcmVxdWVzdCwgb3IgYQorKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNodXRkb3duIGZvciBsYWNrIG9mIGNsaWVudHMuCisrCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNldWRvX3NlcnZlcl90aW1lb3V0ID0gREVGQVVMVF9QU0VVRE9fU0VSVkVSX1RJTUVPVVQ7CisrCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGllX3BlYWNlZnVsbHkgPSAwOworKworKwkJCQkJCQlldi5ldmVudHMgPSBFUE9MTElOOworKwkJCQkJCQlldi5kYXRhLnU2NCA9IG9wZW5fY2xpZW50KGZkKTsKKysJCQkJCQkJaWYgKGV2LmRhdGEudTY0ICE9IDAgJiYgZXBvbGxfY3RsKGVwb2xsZmQsIEVQT0xMX0NUTF9BREQsIGNsaWVudHNbZXYuZGF0YS51NjRdLmZkLCAmZXYpID09IC0xKSB7CisrCQkJCQkJCQlwc2V1ZG9fZGlhZygiZXBvbGxfY3RsKCkgZmFpbGVkIHdpdGggYWNjZXB0ZWQgc29ja2V0LlxuIik7CisrCQkJCQkJCQlleGl0KFBTRVVET19FWElUX0VQT0xMX0NUTCk7CisrCQkJCQkJCX0KKysJCQkJCQl9IGVsc2UgaWYgKGVycm5vID09IEVNRklMRSkgeworKwkJCQkJCQlwc2V1ZG9fZGVidWcoUERCR0ZfU0VSVkVSLCAiSGl0IG1heCBvcGVuIGZpbGVzLCBkcm9wcGluZyBhIGNsaWVudC5cbiIpOworKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluIHRoZW9yeSB0aGVyZSBpcyBhIHBvdGVudGlhbCByYWNlIGhlcmUgd2hlcmUgaWYgd2UgY2xvc2UgYSBjbGllbnQsIAorKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IG1heSBoYXZlIHNlbnQgdXMgYSBmYXN0b3AgbWVzc2FnZSB3aGljaCB3ZSBkb24ndCBhY3QgdXBvbi4KKysJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB3ZSBkb24ndCBjbG9zZSBhIGZpbGVoYW5kbGUgd2UnbGwgbG9vcCBpbmRlZmluaXRlbHkgdGhvdWdodC4gCisrCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25seSBjbG9zZSBvbmUgcGVyIGxvb3AgaXRlcmF0aW9uIGluIHRoZSBpbnRlcmVzdHMgb2YgY2F1dGlvbiAqLworKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8PSBoaWdoZXN0X2NsaWVudDsgKytqKSB7CisrCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNsaWVudHNbal0uZmQgIT0gLTEpIHsKKysJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2NsaWVudChqKTsKKysJCQkJCQkJCQlicmVhazsKKysJCQkJCQkJCX0KKysJCQkJCQkJfQorKwkJCQkJCX0KKysJCQkJCX0KKysJCQkJfSBlbHNlIHsKKysJCQkJCXN0cnVjdCB0aW1ldmFsIHR2MSwgdHYyOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmM7CisrCQkJCQlnZXR0aW1lb2ZkYXkoJnR2MSwgTlVMTCk7CisrCQkJCQlyYyA9IHNlcnZlX2NsaWVudChldmVudHNbaV0uZGF0YS51NjQpOworKwkJCQkJZ2V0dGltZW9mZGF5KCZ0djIsIE5VTEwpOworKwkJCQkJKyttZXNzYWdlczsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJjID09IDApCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytyZXNwb25zZXM7CisrCQkJCQltZXNzYWdlX3RpbWUudHZfc2VjICs9ICh0djIudHZfc2VjIC0gdHYxLnR2X3NlYyk7CisrCQkJCQltZXNzYWdlX3RpbWUudHZfdXNlYyArPSAodHYyLnR2X3VzZWMgLSB0djEudHZfdXNlYyk7CisrCQkJCQlpZiAobWVzc2FnZV90aW1lLnR2X3VzZWMgPCAwKSB7CisrCQkJCQkJbWVzc2FnZV90aW1lLnR2X3VzZWMgKz0gMTAwMDAwMDsKKysJCQkJCQktLW1lc3NhZ2VfdGltZS50dl9zZWM7CisrCQkJCQl9IGVsc2Ugd2hpbGUgKG1lc3NhZ2VfdGltZS50dl91c2VjID4gMTAwMDAwMCkgeworKwkJCQkJCW1lc3NhZ2VfdGltZS50dl91c2VjIC09IDEwMDAwMDA7CisrCQkJCQkJKyttZXNzYWdlX3RpbWUudHZfc2VjOworKwkJCQkJfQorKwkJCQl9CisrCQkJCWlmIChkaWVfZm9yY2VmdWxseSkKKysJCQkJCWJyZWFrOworKwkJCX0KKysJCQlwc2V1ZG9fZGVidWcoUERCR0ZfU0VSVkVSLCAic2VydmVyIGxvb3AgY29tcGxldGUgWyVkIGNsaWVudHMgbGVmdF1cbiIsIGFjdGl2ZV9jbGllbnRzKTsKKysJCX0gZWxzZSB7CisrCQkJcHNldWRvX2RpYWcoImVwb2xsX3dhaXQgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKysJCQlicmVhazsKKysJCX0KKysJCWlmIChkaWVfcGVhY2VmdWxseSB8fCBkaWVfZm9yY2VmdWxseSkgeworKwkJCXBzZXVkb19kZWJ1ZyhQREJHRl9TRVJWRVIsICJxdWl0dGluZy5cbiIpOworKwkJCXBzZXVkb19kZWJ1ZyhQREJHRl9TRVJWRVIgfCBQREJHRl9CRU5DSE1BUkssICJzZXJ2ZXIgJWQgZXhpdGluZzogaGFuZGxlZCAlZCBtZXNzYWdlcyBpbiAlLjRmIHNlY29uZHNcbiIsCisrCQkJCWdldHBpZCgpLCBtZXNzYWdlcywKKysJCQkJKGRvdWJsZSkgbWVzc2FnZV90aW1lLnR2X3NlYyArCisrCQkJCShkb3VibGUpIG1lc3NhZ2VfdGltZS50dl91c2VjIC8gMTAwMDAwMC4wKTsKKysJCQlwZGJfbG9nX21zZyhTRVZFUklUWV9JTkZPLCBOVUxMLCBOVUxMLCBOVUxMLCAic2VydmVyICVkIGV4aXRpbmc6IGhhbmRsZWQgJWQgbWVzc2FnZXMgaW4gJS40ZiBzZWNvbmRzIiwKKysJCQkJZ2V0cGlkKCksIG1lc3NhZ2VzLAorKwkJCQkoZG91YmxlKSBtZXNzYWdlX3RpbWUudHZfc2VjICsKKysJCQkJKGRvdWJsZSkgbWVzc2FnZV90aW1lLnR2X3VzZWMgLyAxMDAwMDAwLjApOworKwkJCS8qIGFuZCBhdCB0aGlzIHBvaW50LCB3ZSdsbCBzdGFydCByZWZ1c2luZyBjb25uZWN0aW9ucyAqLworKwkJCWNsb3NlKGNsaWVudHNbMF0uZmQpOworKwkJCS8qIFRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIGluc2VydCBhIGRlbGF5IGZvcgorKwkJCSAqIGRlYnVnZ2luZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHN0YXJ0dXAuICovCisrCQkJLyogdXNsZWVwKDMwMDAwMCk7ICovCisrCQkJZXhpdCgwKTsKKysJCX0KKysJfQorKworK30KKysKKysjZW5kaWYKKysKKyAvKiBnZXQgY2xpZW50cywgaGFuZGxlIG1lc3NhZ2VzLCBzaHV0IGRvd24uCisgICogVGhpcyBkb2Vzbid0IGFjdHVhbGx5IGRvIGFueSB3b3JrLCBpdCBqdXN0IGNhbGxzIGEgdG9uIG9mIHRoaW5ncyB3aGljaAorICAqIGRvIHdvcmsuCistLSAKKzIuMTQuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy9mYXN0b3ByZXBseS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzL2Zhc3RvcHJlcGx5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNGMyZDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy9mYXN0b3ByZXBseS5wYXRjaApAQCAtMCwwICsxLDc2IEBACitFbnN1cmUgRkFTVE9QIG1lc3NhZ2VzIGdldCBhbiBBQ0sgcmVwbHkgc28gdGhhdCB0aGUgY2xpZW50IGNhbiBiZSBzdXJlIHRoZSBzZXJ2ZXIKK3JlY2lldmVkIHRoZW0uIFRoaXMgbWVhbnMgaWYgY29ubmVjdGlvbnMgYXJlIHRlcm1pbmF0ZWQsIGRhdGEgaXNuJ3QgbG9zdC4KKworUlAgMjAxNy85LzIyCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK0luZGV4OiBwc2V1ZG8tMS44LjIvcHNldWRvX2NsaWVudC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcHNldWRvLTEuOC4yLm9yaWcvcHNldWRvX2NsaWVudC5jCisrKysgcHNldWRvLTEuOC4yL3BzZXVkb19jbGllbnQuYworQEAgLTEzMzEsMjEgKzEzMzEsMTkgQEAgcHNldWRvX2NsaWVudF9yZXF1ZXN0KHBzZXVkb19tc2dfdCAqbXNnLAorIAkJICogaW5kaWNhdGluZyBhIHN1Y2Nlc3NmdWwgc2VuZC4KKyAJCSAqLworIAkJcHNldWRvX2RlYnVnKFBEQkdGX0NMSUVOVCB8IFBEQkdGX1ZFUkJPU0UsICJzZW50IVxuIik7CistCQlpZiAobXNnLT50eXBlICE9IFBTRVVET19NU0dfRkFTVE9QKSB7CistCQkJcmVzcG9uc2UgPSBwc2V1ZG9fbXNnX3JlY2VpdmUoY29ubmVjdF9mZCk7CistCQkJaWYgKCFyZXNwb25zZSkgeworLQkJCQlwc2V1ZG9fZGVidWcoUERCR0ZfQ0xJRU5ULCAiZXhwZWN0ZWQgcmVzcG9uc2UgZGlkIG5vdCBvY2N1cjsgcmV0cnlpbmdcbiIpOworKwkJcmVzcG9uc2UgPSBwc2V1ZG9fbXNnX3JlY2VpdmUoY29ubmVjdF9mZCk7CisrCQlpZiAoIXJlc3BvbnNlKSB7CisrCQkJcHNldWRvX2RlYnVnKFBEQkdGX0NMSUVOVCwgImV4cGVjdGVkIHJlc3BvbnNlIGRpZCBub3Qgb2NjdXI7IHJldHJ5aW5nXG4iKTsKKysJCX0gZWxzZSB7CisrCQkJaWYgKHJlc3BvbnNlLT50eXBlICE9IFBTRVVET19NU0dfQUNLKSB7CisrCQkJCXBzZXVkb19kZWJ1ZyhQREJHRl9DTElFTlQsICJnb3Qgbm9uLWFjayByZXNwb25zZSAlZFxuIiwgcmVzcG9uc2UtPnR5cGUpOworKwkJCQlyZXR1cm4gMDsKKysJCQl9IGVsc2UgaWYgKG1zZy0+dHlwZSAhPSBQU0VVRE9fTVNHX0ZBU1RPUCkgeworKwkJCQlwc2V1ZG9fZGVidWcoUERCR0ZfQ0xJRU5UIHwgUERCR0ZfVkVSQk9TRSwgImdvdCByZXNwb25zZSB0eXBlICVkXG4iLCByZXNwb25zZS0+dHlwZSk7CisrCQkJCXJldHVybiByZXNwb25zZTsKKyAJCQl9IGVsc2UgeworLQkJCQlpZiAocmVzcG9uc2UtPnR5cGUgIT0gUFNFVURPX01TR19BQ0spIHsKKy0JCQkJCXBzZXVkb19kZWJ1ZyhQREJHRl9DTElFTlQsICJnb3Qgbm9uLWFjayByZXNwb25zZSAlZFxuIiwgcmVzcG9uc2UtPnR5cGUpOworLQkJCQkJcmV0dXJuIDA7CistCQkJCX0gZWxzZSB7CistCQkJCQlwc2V1ZG9fZGVidWcoUERCR0ZfQ0xJRU5UIHwgUERCR0ZfVkVSQk9TRSwgImdvdCByZXNwb25zZSB0eXBlICVkXG4iLCByZXNwb25zZS0+dHlwZSk7CistCQkJCQlyZXR1cm4gcmVzcG9uc2U7CistCQkJCX0KKysJCQkJcmV0dXJuIDA7CisgCQkJfQorLQkJfSBlbHNlIHsKKy0JCQlyZXR1cm4gMDsKKyAJCX0KKyAJfQorIAlwc2V1ZG9fZGlhZygicHNldWRvOiBzZXJ2ZXIgY29ubmVjdGlvbiBwZXJzaXN0ZW50bHkgZmFpbGVkLCBhYm9ydGluZy5cbiIpOworSW5kZXg6IHBzZXVkby0xLjguMi9wc2V1ZG9fc2VydmVyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwc2V1ZG8tMS44LjIub3JpZy9wc2V1ZG9fc2VydmVyLmMKKysrKyBwc2V1ZG8tMS44LjIvcHNldWRvX3NlcnZlci5jCitAQCAtNDYzLDYgKzQ2MywxMSBAQCBjbG9zZV9jbGllbnQoaW50IGNsaWVudCkgeworIAkJCS0taGlnaGVzdF9jbGllbnQ7CisgfQorIAorK3N0YXRpYyBwc2V1ZG9fbXNnX3Qgc2VydmVyX2Zhc3RvcF9yZXBseSA9IHsgCisrICAgICAgICAudHlwZSA9IFBTRVVET19NU0dfQUNLLAorKyAgICAgICAgLm9wID0gT1BfTk9ORSwKKyt9OworKworIC8qIEFjdHVhbGx5IHByb2Nlc3MgYSByZXF1ZXN0LgorICAqLworIHN0YXRpYyBpbnQKK0BAIC01MTUsOCArNTIwLDE0IEBAIHNlcnZlX2NsaWVudChpbnQgaSkgeworIAkJICogcHNldWRvX3NlcnZlcl9yZXNwb25zZS4KKyAJCSAqLworIAkJaWYgKGluLT50eXBlICE9IFBTRVVET19NU0dfU0hVVERPV04pIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW4tPnR5cGUgPT0gUFNFVURPX01TR19GQVNUT1ApCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluLT50eXBlID09IFBTRVVET19NU0dfRkFTVE9QKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kX3Jlc3BvbnNlID0gMDsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBmYXN0b3BzIHdlIHJlcGx5IG5vdyB0byBzYXkgd2UgZ290IHRoZSBkYXRhICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJjID0gcHNldWRvX21zZ19zZW5kKGNsaWVudHNbaV0uZmQsICZzZXJ2ZXJfZmFzdG9wX3JlcGx5LCAwLCBOVUxMKSkgIT0gMCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNldWRvX2RlYnVnKFBEQkdGX1NFUlZFUiwgImZhaWxlZCB0byBzZW5kIGZhc3RvcCBhY2sgdG8gY2xpZW50ICVkIFslZF06ICVkICglcylcbiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIChpbnQpIGNsaWVudHNbaV0ucGlkLCByYywgc3RyZXJyb3IoZXJybm8pKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgICAgICB9CisgCQkJLyogbW9zdCBtZXNzYWdlcyBkb24ndCBuZWVkIHRoZXNlLCBidXQgeGF0dHIgbWF5ICovCisgCQkJcmVzcG9uc2VfcGF0aCA9IDA7CisgCQkJcmVzcG9uc2VfcGF0aGxlbiA9IC0xOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvdG9vbWFueWZpbGVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvdG9vbWFueWZpbGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwODVhNDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy90b29tYW55ZmlsZXMucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorQ3VycmVudGx5IGlmIHdlIG1heCBvdXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZpbGVzLCBwc2V1ZG8gY2FuIGRlYWRsb2NrLCB1bmFibGUgdG8KK2FjY2VwdCBuZXcgY29ubmVjdGlvbnMgeWV0IHVuYWJsZSB0byBtb3ZlIGZvcndhcmQgYW5kIHVuYmxvY2sgdGhlIG90aGVyIHByb2Nlc3Nlcword2FpdGluZyBlaXRoZXIuCisKK1JhdGhlciB0aGFuIGhhbmcsIHdoZW4gdGhpcyBoYXBwZW5zLCBjbG9zZSBvdXQgaW5hY3RpdmUgY29ubmVjdGlvbnMsIGFsbG93aW5nIHVzCit0byBhY2NlcHQgdGhlIG5ldyBvbmVzLiBUaGUgZGlzY29ubmVjdGVkIGNsaWVudHMgd2lsbCBzaW1wbHkgcmVjb25uZWN0LiBUaGVyZSBpcworYSBzbWFsbCByaXNrIG9mIGRhdGEgbG9zcyBoZXJlIHNhZGx5IGJ1dCBpdHMgYmV0dGVyIHRoYW4gaGFuZ2luZy4KKworUlAKKzIwMTcvNC8yNQorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbUGV0ZXIgaXMgYXdhcmUgb2YgdGhlIGlzc3VlXQorCitJbmRleDogcHNldWRvLTEuOC4yL3BzZXVkb19zZXJ2ZXIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBzZXVkby0xLjguMi5vcmlnL3BzZXVkb19zZXJ2ZXIuYworKysrIHBzZXVkby0xLjguMi9wc2V1ZG9fc2VydmVyLmMKK0BAIC01ODEsNiArNTgxLDcgQEAgcHNldWRvX3NlcnZlcl9sb29wKHZvaWQpIHsKKyAJaW50IHJjOworIAlpbnQgZmQ7CisgCWludCBsb29wX3RpbWVvdXQgPSBwc2V1ZG9fc2VydmVyX3RpbWVvdXQ7CisrCWludCBoaXRtYXhmaWxlczsKKyAKKyAJY2xpZW50cyA9IG1hbGxvYygxNiAqIHNpemVvZigqY2xpZW50cykpOworIAorQEAgLTU5Nyw2ICs1OTgsNyBAQCBwc2V1ZG9fc2VydmVyX2xvb3Aodm9pZCkgeworIAlhY3RpdmVfY2xpZW50cyA9IDE7CisgCW1heF9jbGllbnRzID0gMTY7CisgCWhpZ2hlc3RfY2xpZW50ID0gMDsKKysJaGl0bWF4ZmlsZXMgPSAwOworIAorIAlwc2V1ZG9fZGVidWcoUERCR0ZfU0VSVkVSLCAic2VydmVyIGxvb3Agc3RhcnRlZC5cbiIpOworIAlpZiAobGlzdGVuX2ZkIDwgMCkgeworQEAgLTY2MywxMCArNjY1LDE1IEBAIHBzZXVkb19zZXJ2ZXJfbG9vcCh2b2lkKSB7CisgCQkJCQkJbWVzc2FnZV90aW1lLnR2X3VzZWMgLT0gMTAwMDAwMDsKKyAJCQkJCQkrK21lc3NhZ2VfdGltZS50dl9zZWM7CisgCQkJCQl9CisrCQkJCX0gZWxzZSBpZiAoaGl0bWF4ZmlsZXMpIHsKKysJCQkJCS8qIE9ubHkgY2xvc2Ugb25lIHBlciBsb29wIGl0ZXJhdGlvbiBpbiB0aGUgaW50ZXJlc3RzIG9mIGNhdXRpb24gKi8KKysJCQkJCWNsb3NlX2NsaWVudChpKTsKKysJCQkJCWhpdG1heGZpbGVzID0gMDsKKyAJCQkJfQorIAkJCQlpZiAoZGllX2ZvcmNlZnVsbHkpCisgCQkJCQlicmVhazsKKyAJCQl9CisrCQkJaGl0bWF4ZmlsZXMgPSAwOworIAkJCWlmICghZGllX2ZvcmNlZnVsbHkgJiYgCisgCQkJICAgIChGRF9JU1NFVChjbGllbnRzWzBdLmZkLCAmZXZlbnRzKSB8fAorIAkJCSAgICAgRkRfSVNTRVQoY2xpZW50c1swXS5mZCwgJnJlYWRzKSkpIHsKK0BAIC02ODgsNiArNjk4LDkgQEAgcHNldWRvX3NlcnZlcl9sb29wKHZvaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzZXVkb19zZXJ2ZXJfdGltZW91dCA9IERFRkFVTFRfUFNFVURPX1NFUlZFUl9USU1FT1VUOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWVfcGVhY2VmdWxseSA9IDA7CisrCQkJCX0gZWxzZSBpZiAoZXJybm8gPT0gRU1GSUxFKSB7CisrCQkJCQloaXRtYXhmaWxlcyA9IDE7CisrCQkJCQlwc2V1ZG9fZGVidWcoUERCR0ZfU0VSVkVSLCAiSGl0IG1heCBvcGVuIGZpbGVzLCBkcm9wcGluZyBhIGNsaWVudC5cbiIpOworIAkJCQl9CisgCQkJfQorIAkJCXBzZXVkb19kZWJ1ZyhQREJHRl9TRVJWRVIsICJzZXJ2ZXIgbG9vcCBjb21wbGV0ZSBbJWQgY2xpZW50cyBsZWZ0XVxuIiwgYWN0aXZlX2NsaWVudHMpOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvXzEuOC4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvXzEuOC4yLmJiCmluZGV4IGI0MjdiOWEuLjczZWY1NzIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb18xLjguMi5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fMS44LjIuYmIKQEAgLTcsNiArNyw5IEBACiAgICAgICAgICAgIGZpbGU6Ly9tb3JlcmV0cmllcy5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9lZmUwYmUyNzk5MDEwMDZmOTM5Y2QzNTdjY2VlNDdiNjUxYzc4NmRhLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL2I2YjY4ZGI4OTZmOTk2MzU1ODMzNGFmZjdmY2E2MWFkZGU0ZWMxMGYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZmFzdG9wcmVwbHkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdG9vbWFueWZpbGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVXNlLWVwb2xsLUFQSS1vbi1MaW51eC5wYXRjaCBcCiAgICAgICAgICAgICIKIAogU1JDX1VSSVttZDVzdW1dID0gIjdkNDFlNzIxODhmYmVhMWY2OTZjMzk5YzFhNDM1Njc1IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvMDAwMS1CVUctZml4LWluZmluaXRlLWxvb3Atd2hlbi1jcmVhdGluZy1ucC5wYWQtb24tYW4tZW1wLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvMDAwMS1CVUctZml4LWluZmluaXRlLWxvb3Atd2hlbi1jcmVhdGluZy1ucC5wYWQtb24tYW4tZW1wLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZTU4NTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy8wMDAxLUJVRy1maXgtaW5maW5pdGUtbG9vcC13aGVuLWNyZWF0aW5nLW5wLnBhZC1vbi1hbi1lbXAucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorRnJvbSA0MTcwYjk4ZTBkNTg2NGVmNGRiMWM1NzA0YTZlOTQyOGMzYmU5ZmI4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSXJ5bmEgU2hjaGVyYmluYSA8aXNoY2hlcmJAcmVkaGF0LmNvbT4KK0RhdGU6IFRodSwgMjQgQXVnIDIwMTcgMTg6MDE6NDMgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gQlVHOiBmaXggaW5maW5pdGUgbG9vcCB3aGVuIGNyZWF0aW5nIG5wLnBhZCBvbiBhbiBlbXB0eSBhcnJheQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtodHRwczovL2dpdGh1Yi5jb20vbnVtcHkvbnVtcHkvcHVsbC85NTk5L2NvbW1pdHMvNmY5ZWEwYWJiZDMwNWQ1M2Y5MDE3ZGViYWIzYTNhNTkxZmUwZTI0OV0KK0NWRTogQ1ZFLTIwMTctMTI4NTIKK1NpZ25lZC1vZmYtYnk6IERlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+CistLS0KKyBudW1weS9saWIvYXJyYXlwYWQucHkgICAgICAgICAgICB8IDMgKysrCisgbnVtcHkvbGliL3Rlc3RzL3Rlc3RfYXJyYXlwYWQucHkgfCA0ICsrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbnVtcHkvbGliL2FycmF5cGFkLnB5IGIvbnVtcHkvbGliL2FycmF5cGFkLnB5CitpbmRleCAyZGFkOTljLi4yOTRhNjg5IDEwMDY0NAorLS0tIGEvbnVtcHkvbGliL2FycmF5cGFkLnB5CisrKysgYi9udW1weS9saWIvYXJyYXlwYWQucHkKK0BAIC0xNDA2LDYgKzE0MDYsOSBAQCBkZWYgcGFkKGFycmF5LCBwYWRfd2lkdGgsIG1vZGUsICoqa3dhcmdzKToKKyAgICAgICAgICAgICBuZXdtYXQgPSBfYXBwZW5kX21pbihuZXdtYXQsIHBhZF9hZnRlciwgY2h1bmtfYWZ0ZXIsIGF4aXMpCisgCisgICAgIGVsaWYgbW9kZSA9PSAncmVmbGVjdCc6CisrICAgICAgICBpZiBuYXJyYXkuc2l6ZSA9PSAwOgorKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlRoZXJlIGFyZW4ndCBhbnkgZWxlbWVudHMgdG8gcmVmbGVjdCBpbiBgYXJyYXlgIikKKysKKyAgICAgICAgIGZvciBheGlzLCAocGFkX2JlZm9yZSwgcGFkX2FmdGVyKSBpbiBlbnVtZXJhdGUocGFkX3dpZHRoKToKKyAgICAgICAgICAgICAjIFJlY3Vyc2l2ZSBwYWRkaW5nIGFsb25nIGFueSBheGlzIHdoZXJlIGBwYWRfYW10YCBpcyB0b28gbGFyZ2UKKyAgICAgICAgICAgICAjIGZvciBpbmRleGluZyB0cmlja3MuIFdlIGNhbiBvbmx5IHNhZmVseSBwYWQgdGhlIG9yaWdpbmFsIGF4aXMKK2RpZmYgLS1naXQgYS9udW1weS9saWIvdGVzdHMvdGVzdF9hcnJheXBhZC5weSBiL251bXB5L2xpYi90ZXN0cy90ZXN0X2FycmF5cGFkLnB5CitpbmRleCAwNTZhYTQ1Li4wZjcxZDMyIDEwMDY0NAorLS0tIGEvbnVtcHkvbGliL3Rlc3RzL3Rlc3RfYXJyYXlwYWQucHkKKysrKyBiL251bXB5L2xpYi90ZXN0cy90ZXN0X2FycmF5cGFkLnB5CitAQCAtMTAxNCw2ICsxMDE0LDEwIEBAIGNsYXNzIFZhbHVlRXJyb3IxKFRlc3RDYXNlKToKKyAgICAgICAgIGFzc2VydF9yYWlzZXMoVmFsdWVFcnJvciwgcGFkLCBhcnIsICgoLTIsIDMpLCAoMywgMikpLAorICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykKKyAKKysgICAgZGVmIHRlc3RfY2hlY2tfZW1wdHlfYXJyYXkoc2VsZik6CisrICAgICAgICBhc3NlcnRfcmFpc2VzKFZhbHVlRXJyb3IsIHBhZCwgW10sIDQsIG1vZGU9J3JlZmxlY3QnKQorKyAgICAgICAgYXNzZXJ0X3JhaXNlcyhWYWx1ZUVycm9yLCBwYWQsIG5wLm5kYXJyYXkoMCksIDQsIG1vZGU9J3JlZmxlY3QnKQorKworIAorIGNsYXNzIFZhbHVlRXJyb3IyKFRlc3RDYXNlKToKKyAgICAgZGVmIHRlc3RfY2hlY2tfbmVnYXRpdmVfcGFkX2Ftb3VudChzZWxmKToKKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvMDAwMS1Eb24tdC1zZWFyY2gtdXNyLWFuZC1zby1vbi1mb3ItbGlicmFyaWVzLWJ5LWRlZmF1bHQtLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvMDAwMS1Eb24tdC1zZWFyY2gtdXNyLWFuZC1zby1vbi1mb3ItbGlicmFyaWVzLWJ5LWRlZmF1bHQtLnBhdGNoCmluZGV4IDViMTM0ZWQuLmZmZDZjZWQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzLzAwMDEtRG9uLXQtc2VhcmNoLXVzci1hbmQtc28tb24tZm9yLWxpYnJhcmllcy1ieS1kZWZhdWx0LS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9maWxlcy8wMDAxLURvbi10LXNlYXJjaC11c3ItYW5kLXNvLW9uLWZvci1saWJyYXJpZXMtYnktZGVmYXVsdC0ucGF0Y2gKQEAgLTExLDExICsxMSwxMSBAQAogIG51bXB5L2Rpc3R1dGlscy9zeXN0ZW1faW5mby5weSB8IDUwICsrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDQ0IGRlbGV0aW9ucygtKQogCi1kaWZmIC0tZ2l0IGEvbnVtcHkvZGlzdHV0aWxzL3N5c3RlbV9pbmZvLnB5IGIvbnVtcHkvZGlzdHV0aWxzL3N5c3RlbV9pbmZvLnB5Ci1pbmRleCA5ZGQ0OGUyLi44MGUxOTdhIDEwMDY0NAotLS0tIGEvbnVtcHkvZGlzdHV0aWxzL3N5c3RlbV9pbmZvLnB5Ci0rKysgYi9udW1weS9kaXN0dXRpbHMvc3lzdGVtX2luZm8ucHkKLUBAIC0yMDQsNTEgKzIwNCwxMyBAQCBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKK0luZGV4OiBudW1weS0xLjEzLjEvbnVtcHkvZGlzdHV0aWxzL3N5c3RlbV9pbmZvLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbnVtcHktMS4xMy4xLm9yaWcvbnVtcHkvZGlzdHV0aWxzL3N5c3RlbV9pbmZvLnB5CisrKysgbnVtcHktMS4xMy4xL251bXB5L2Rpc3R1dGlscy9zeXN0ZW1faW5mby5weQorQEAgLTIxMSw1MSArMjExLDEzIEBAIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICBkZWZhdWx0X3gxMV9saWJfZGlycyA9IFtdCiAgICAgIGRlZmF1bHRfeDExX2luY2x1ZGVfZGlycyA9IFtdCiAgZWxzZToKQEAgLTI5LDcgKzI5LDEwIEBACiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvb3B0L2xvY2FsL2luY2x1ZGUnLCAnL3N3L2luY2x1ZGUnLAogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3Vzci9pbmNsdWRlL3N1aXRlc3BhcnNlJ10KIC0gICAgZGVmYXVsdF9zcmNfZGlycyA9IFsnLicsICcvdXNyL2xvY2FsL3NyYycsICcvb3B0L3NyYycsICcvc3cvc3JjJ10KLS0KKysgICAgZGVmYXVsdF9saWJfZGlycyA9IGxpYnBhdGhzKFsnL2RlYWRpci9saWInXSwgcGxhdGZvcm1fYml0cykKKysgICAgZGVmYXVsdF9pbmNsdWRlX2RpcnMgPSBbJy9kZWFkZGlyL2luY2x1ZGUnXQorKyAgICBkZWZhdWx0X3NyY19kaXJzID0gWycuJywgJy9kZWFkZGlyL3NyYyddCisgCiAtICAgIGRlZmF1bHRfeDExX2xpYl9kaXJzID0gbGlicGF0aHMoWycvdXNyL1gxMVI2L2xpYicsICcvdXNyL1gxMS9saWInLAogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3Vzci9saWInXSwgcGxhdGZvcm1fYml0cykKIC0gICAgZGVmYXVsdF94MTFfaW5jbHVkZV9kaXJzID0gWycvdXNyL1gxMVI2L2luY2x1ZGUnLCAnL3Vzci9YMTEvaW5jbHVkZScsCkBAIC01MCw3ICs1Myw3IEBACiAtICAgICAgICAjIHRlc3RzIGFyZSBydW4gaW4gZGVidWcgbW9kZSBQeXRob24gMy4KIC0gICAgICAgIHRtcCA9IG9wZW4ob3MuZGV2bnVsbCwgJ3cnKQogLSAgICAgICAgcCA9IHNwLlBvcGVuKFsiZ2NjIiwgIi1wcmludC1tdWx0aWFyY2giXSwgc3Rkb3V0PXNwLlBJUEUsCi0tICAgICAgICAgICAgICAgIHN0ZGVycj10bXApCistICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXRtcCkKIC0gICAgZXhjZXB0IChPU0Vycm9yLCBEaXN0dXRpbHNFcnJvcik6CiAtICAgICAgICAjIE9TRXJyb3IgaWYgZ2NjIGlzIG5vdCBpbnN0YWxsZWQsIG9yIFNhbmRib3hWaW9sYXRpb24gKERpc3R1dGlsc0Vycm9yCiAtICAgICAgICAjIHN1YmNsYXNzKSBpZiBhbiBvbGQgc2V0dXB0b29scyBidWcgaXMgdHJpZ2dlcmVkIChzZWUgZ2gtMzE2MCkuCkBAIC02NCwxNSArNjcsOCBAQAogLSAgICBmaW5hbGx5OgogLSAgICAgICAgaWYgdG1wIGlzIG5vdCBOb25lOgogLSAgICAgICAgICAgIHRtcC5jbG9zZSgpCi0rICAgIGRlZmF1bHRfbGliX2RpcnMgPSBsaWJwYXRocyhbJy9kZWFkaXIvbGliJ10sIHBsYXRmb3JtX2JpdHMpCi0rICAgIGRlZmF1bHRfaW5jbHVkZV9kaXJzID0gWycvZGVhZGRpci9pbmNsdWRlJ10KLSsgICAgZGVmYXVsdF9zcmNfZGlycyA9IFsnLicsICcvZGVhZGRpci9zcmMnXQotKwogKyAgICBkZWZhdWx0X3gxMV9saWJfZGlycyA9IGxpYnBhdGhzKFsnL2RlYWRkaXIvbGliJ10sIHBsYXRmb3JtX2JpdHMpCiArICAgIGRlZmF1bHRfeDExX2luY2x1ZGVfZGlycyA9IFsnL2RlYWRkaXIvaW5jbHVkZSddCiAgCiAgaWYgb3MucGF0aC5qb2luKHN5cy5wcmVmaXgsICdsaWInKSBub3QgaW4gZGVmYXVsdF9saWJfZGlyczoKICAgICAgZGVmYXVsdF9saWJfZGlycy5pbnNlcnQoMCwgb3MucGF0aC5qb2luKHN5cy5wcmVmaXgsICdsaWInKSkKLS0tIAotMi42LjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvZDcwZDM3YjdjNGFhMmFmM2ZlODc5YTBkODU4YzU0ZjJhYTMyYTcyNS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L2ZpbGVzL2Q3MGQzN2I3YzRhYTJhZjNmZTg3OWEwZDg1OGM1NGYyYWEzMmE3MjUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4Y2IwNzguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvZmlsZXMvZDcwZDM3YjdjNGFhMmFmM2ZlODc5YTBkODU4YzU0ZjJhYTMyYTcyNS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLUZyb20gMTU0YjJjMTlmMzkyODE3YTkzNmFlYTAxOTBlMjc2ZjgyMjhjYjQ4OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206ICJFcmlrIE0uIEJyYXkiIDxlcmlrLmJyYXlAbHJpLmZyPgotRGF0ZTogTW9uLCAxMiBEZWMgMjAxNiAxMzowNzoxNiArMDEwMAotU3ViamVjdDogW1BBVENIXSBCVUc6IHhsb2NhbGUuaCBpcyBub3QgYXZhaWxhYmxlIGluIG5ld2xpYi0tYWxsIHRoZSBkZWZpbmVzCi0gdXNlZCBoZXJlIGZyb20geGxvY2FsZS5oIGFyZSBpbnN0ZWFkIGZvdW5kIGluIGxvY2FsZS5oCi0KLUFkZGVkIGEgZmVhdHVyZSBjaGVjayBmb3IgeGxvY2FsZS5oLCB3aXRoIGZhbGxiYWNrIHRvIGxvY2FsZS5oIGlmIGl0IGlzCi1taXNzaW5nLgotLS0tCi0gbnVtcHkvY29yZS9zZXR1cF9jb21tb24ucHkgICAgICAgICAgfCAxICsKLSBudW1weS9jb3JlL3NyYy9tdWx0aWFycmF5L251bXB5b3MuYyB8IDggKysrKysrKy0KLSAyIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1SUCAyMDE3LzkvNgotCi1kaWZmIC0tZ2l0IGEvbnVtcHkvY29yZS9zZXR1cF9jb21tb24ucHkgYi9udW1weS9jb3JlL3NldHVwX2NvbW1vbi5weQotaW5kZXggYmE3NTIxZTMwNDMuLmExNzI5ZTY1NjU2IDEwMDY0NAotLS0tIGEvbnVtcHkvY29yZS9zZXR1cF9jb21tb24ucHkKLSsrKyBiL251bXB5L2NvcmUvc2V0dXBfY29tbW9uLnB5Ci1AQCAtMTEzLDYgKzExMyw3IEBAIGRlZiBjaGVja19hcGlfdmVyc2lvbihhcGl2ZXJzaW9uLCBjb2RlZ2VuX2Rpcik6Ci0gICAgICAgICAgICAgICAgICJ4bW1pbnRyaW4uaCIsICAjIFNTRQotICAgICAgICAgICAgICAgICAiZW1taW50cmluLmgiLCAgIyBTU0UyCi0gICAgICAgICAgICAgICAgICJmZWF0dXJlcy5oIiwgICMgZm9yIGdsaWJjIHZlcnNpb24gbGludXgKLSsgICAgICAgICAgICAgICAgInhsb2NhbGUuaCIgICMgc2VlIEdIIzgzNjcKLSBdCi0gCi0gIyBvcHRpb25hbCBnY2MgY29tcGlsZXIgYnVpbHRpbnMgYW5kIHRoZWlyIGNhbGwgYXJndW1lbnRzIGFuZCBvcHRpb25hbCBhCi1kaWZmIC0tZ2l0IGEvbnVtcHkvY29yZS9zcmMvbXVsdGlhcnJheS9udW1weW9zLmMgYi9udW1weS9jb3JlL3NyYy9tdWx0aWFycmF5L251bXB5b3MuYwotaW5kZXggNDUwZWM0MGI2ZTAuLjg0NjE3ZWE3OGMzIDEwMDY0NAotLS0tIGEvbnVtcHkvY29yZS9zcmMvbXVsdGlhcnJheS9udW1weW9zLmMKLSsrKyBiL251bXB5L2NvcmUvc3JjL211bHRpYXJyYXkvbnVtcHlvcy5jCi1AQCAtMTUsNyArMTUsMTMgQEAKLSAKLSAjaWZkZWYgSEFWRV9TVFJUT0xEX0wKLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0tI2luY2x1ZGUgPHhsb2NhbGUuaD4KLSsjaWZkZWYgSEFWRV9YTE9DQUxFX0gKLSsgICAgLyoKLSsgICAgICogdGhlIGRlZmluZXMgZnJvbSB4bG9jYWxlLmggYXJlIGluY2x1ZGVkIGluIGxvY2FsZS5oIG9uIHNvbWUgc3l0ZW1zOwotKyAgICAgKiBzZWUgZ2gtODM2NwotKyAgICAgKi8KLSsgICAgI2luY2x1ZGUgPHhsb2NhbGUuaD4KLSsjZW5kaWYKLSAjZW5kaWYKLSAKLSAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L3B5dGhvbi1udW1weV8xLjExLjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9weXRob24tbnVtcHlfMS4xMS4yLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGM5NmQ3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L3B5dGhvbi1udW1weV8xLjExLjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotU1VNTUFSWSA9ICJBIHNvcGhpc3RpY2F0ZWQgTnVtZXJpYyBQcm9jZXNzaW5nIFBhY2thZ2UgZm9yIFB5dGhvbiIKLVNFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgotTElDRU5TRSA9ICJQU0YiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9N2U1MWE1Njc3YjIyYjg2NWFiYmZiM2RmZjZmZmIyZDAiCi0KLVNSQ05BTUUgPSAibnVtcHkiCi0KLVNSQ19VUkkgPSAiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL3NvdXJjZS9uLyR7U1JDTkFNRX0vJHtTUkNOQU1FfS0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1Eb24tdC1zZWFyY2gtdXNyLWFuZC1zby1vbi1mb3ItbGlicmFyaWVzLWJ5LWRlZmF1bHQtLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3JlbW92ZS1idWlsZC1wYXRoLWluLWNvbW1lbnRzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2ZpeF9zaGViYW5nX2YycHkucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZDcwZDM3YjdjNGFhMmFmM2ZlODc5YTBkODU4YzU0ZjJhYTMyYTcyNS5wYXRjaCBcCi0gICAgICAgICAgICR7Q09ORklHRklMRVNVUkl9ICIKLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9udW1weS9maWxlcy8iCi0KLUNPTkZJR0ZJTEVTVVJJID89ICIiCi0KLUNPTkZJR0ZJTEVTVVJJX2FhcmNoNjQgPSAiIFwKLSAgICBmaWxlOi8vY29uZmlnLmggXAotICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCi0iCi1DT05GSUdGSUxFU1VSSV9hcm0gPSAiIFwKLSAgICBmaWxlOi8vY29uZmlnLmggXAotICAgIGZpbGU6Ly9udW1weWNvbmZpZy5oIFwKLSIKLUNPTkZJR0ZJTEVTVVJJX2FybWViID0gIiBcCi0gICAgZmlsZTovL2NvbmZpZy5oIFwKLSAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCi0iCi1DT05GSUdGSUxFU1VSSV9taXBzYXJjaG8zMmVsID0gIiBcCi0gICAgZmlsZTovL2NvbmZpZy5oIFwKLSAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCi0iCi1DT05GSUdGSUxFU1VSSV94ODYgPSAiIFwKLSAgICBmaWxlOi8vY29uZmlnLmggXAotICAgIGZpbGU6Ly9udW1weWNvbmZpZy5oIFwKLSIKLUNPTkZJR0ZJTEVTVVJJX3g4Ni02NCA9ICIgXAotICAgIGZpbGU6Ly9jb25maWcuaCBcCi0gICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKLSIKLUNPTkZJR0ZJTEVTVVJJX21pcHNhcmNobzMyZWIgPSAiIFwKLSAgICBmaWxlOi8vY29uZmlnLmggXAotICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCi0iCi1DT05GSUdGSUxFU1VSSV9wb3dlcnBjID0gIiBcCi0gICAgZmlsZTovL2NvbmZpZy5oIFwKLSAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAotIgotQ09ORklHRklMRVNVUklfcG93ZXJwYzY0ID0gIiBcCi0gICAgZmlsZTovL2NvbmZpZy5oIFwKLSAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAotIgotQ09ORklHRklMRVNVUklfbWlwc2FyY2huNjRlYiA9ICIgXAotICAgIGZpbGU6Ly9jb25maWcuaCBcCi0gICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKLSIKLUNPTkZJR0ZJTEVTVVJJX21pcHNhcmNobjY0ZWwgPSAiIFwKLSAgICBmaWxlOi8vY29uZmlnLmggXAotICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCi0iCi1DT05GSUdGSUxFU1VSSV9taXBzYXJjaG4zMmViID0gIiBcCi0gICAgZmlsZTovL2NvbmZpZy5oIFwKLSAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAotIgotQ09ORklHRklMRVNVUklfbWlwc2FyY2huMzJlbCA9ICIgXAotICAgIGZpbGU6Ly9jb25maWcuaCBcCi0gICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKLSIKLQotUyA9ICIke1dPUktESVJ9L251bXB5LSR7UFZ9IgotCi1pbmhlcml0IHNldHVwdG9vbHMKLQotIyBNYWtlIHRoZSBidWlsZCBmYWlsIGFuZCByZXBsYWNlICpjb25maWcuaCB3aXRoIHByb3BlciBvbmUKLSMgVGhpcyBpcyBhIHVnbHksIHVnbHkgaGFjayAtIEtvZW4KLWRvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy10YXJnZXQoKSB7Ci0gICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uIHNldHVwLnB5IGJ1aWxkICR7RElTVFVUSUxTX0JVSUxEX0FSR1N9IHx8IFwKLSAgICB0cnVlCi0gICAgY3AgJHtXT1JLRElSfS8qY29uZmlnLmggJHtTfS9idWlsZC8kKGxzICR7U30vYnVpbGQgfCBncmVwIHNyYykvbnVtcHkvY29yZS9pbmNsdWRlL251bXB5LwotfQotCi1GSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L251bXB5L2NvcmUvbGliLyouYSIKLQotU1JDX1VSSVttZDVzdW1dID0gIjAzYmQ3OTI3YzMxNGM0Mzc4MDI3MWJmMWFiNzk1ZWJjIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA0ZGIyZmJkNjRlMmU3YzY4ZTc0MGIxNDQwMmIyNWFmNTE0MThmYzQzYTU5ZDllNTQxNzJiMzhiOTA2YjBmNjkiCi0KLSMgaW5zdGFsbCB3aGF0IGlzIG5lZWRlZCBmb3IgbnVtcHkudGVzdCgpCi1SREVQRU5EU18ke1BOfSA9ICJweXRob24tdW5pdHRlc3QgXAotICAgICAgICAgICAgICAgICAgcHl0aG9uLWRpZmZsaWIgXAotICAgICAgICAgICAgICAgICAgcHl0aG9uLXBwcmludCBcCi0gICAgICAgICAgICAgICAgICBweXRob24tcGlja2xlIFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbi1zaGVsbCBcCi0gICAgICAgICAgICAgICAgICBweXRob24tbm9zZSBcCi0gICAgICAgICAgICAgICAgICBweXRob24tZG9jdGVzdCBcCi0gICAgICAgICAgICAgICAgICBweXRob24tZGF0ZXRpbWUgXAotICAgICAgICAgICAgICAgICAgcHl0aG9uLWRpc3R1dGlscyBcCi0gICAgICAgICAgICAgICAgICBweXRob24tbWlzYyBcCi0gICAgICAgICAgICAgICAgICBweXRob24tbW1hcCBcCi0gICAgICAgICAgICAgICAgICBweXRob24tbmV0Y2xpZW50IFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbi1udW1iZXJzIFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbi1weWRvYyBcCi0gICAgICAgICAgICAgICAgICBweXRob24tcGtndXRpbCBcCi0gICAgICAgICAgICAgICAgICBweXRob24tZW1haWwgXAotICAgICAgICAgICAgICAgICAgcHl0aG9uLXN1YnByb2Nlc3MgXAotICAgICAgICAgICAgICAgICAgcHl0aG9uLWNvbXByZXNzaW9uIFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbi1jdHlwZXMgXAotICAgICAgICAgICAgICAgICAgcHl0aG9uLXRocmVhZGluZyBcCi0iCi0KLVJERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L3B5dGhvbi1udW1weV8xLjEzLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9weXRob24tbnVtcHlfMS4xMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZThmNGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9weXRob24tbnVtcHlfMS4xMy4xLmJiCkBAIC0wLDAgKzEsMTE0IEBACitTVU1NQVJZID0gIkEgc29waGlzdGljYXRlZCBOdW1lcmljIFByb2Nlc3NpbmcgUGFja2FnZSBmb3IgUHl0aG9uIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIkJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT0xMDAyYjA5Y2Q2NTRmY2FhMmRjYzg3NTM1YWNkOWE5NiIKKworU1JDTkFNRSA9ICJudW1weSIKKworU1JDX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vJHtTUkNOQU1FfS8ke1NSQ05BTUV9L3JlbGVhc2VzL2Rvd25sb2FkL3Yke1BWfS8ke1NSQ05BTUV9LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLURvbi10LXNlYXJjaC11c3ItYW5kLXNvLW9uLWZvci1saWJyYXJpZXMtYnktZGVmYXVsdC0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLWJ1aWxkLXBhdGgtaW4tY29tbWVudHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X3NoZWJhbmdfZjJweS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUJVRy1maXgtaW5maW5pdGUtbG9vcC13aGVuLWNyZWF0aW5nLW5wLnBhZC1vbi1hbi1lbXAucGF0Y2ggXAorICAgICAgICAgICAke0NPTkZJR0ZJTEVTVVJJfSAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2ZDQ1OWU0YTI0ZjUwMzVmNzIwZGRhM2M1NzcxNmE5MiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkZTAyMGVjMDZmMWU5Y2UxMTE1YTUwMTYxYTM4YmY4ZDRjMjUyNTM3OTkwMGY5Y2I0NzhjYzYxM2ExZTdjZDkzIgorCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL251bXB5L251bXB5L3JlbGVhc2VzIgorCitDT05GSUdGSUxFU1VSSSA/PSAiIgorCitDT05GSUdGSUxFU1VSSV9hYXJjaDY0ID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfYXJtID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9hcm1lYiA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfbWlwc2FyY2hvMzJlbCA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfeDg2ID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV94ODYtNjQgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9taXBzYXJjaG8zMmViID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfcG93ZXJwYyA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX3Bvd2VycGM2NCA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX21pcHNhcmNobjY0ZWIgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9taXBzYXJjaG42NGVsID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfbWlwc2FyY2huMzJlYiA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX21pcHNhcmNobjMyZWwgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9udW1weS0ke1BWfSIKKworaW5oZXJpdCBzZXR1cHRvb2xzCisKKyMgTWFrZSB0aGUgYnVpbGQgZmFpbCBhbmQgcmVwbGFjZSAqY29uZmlnLmggd2l0aCBwcm9wZXIgb25lCisjIFRoaXMgaXMgYSB1Z2x5LCB1Z2x5IGhhY2sgLSBLb2VuCitkb19jb21waWxlX3ByZXBlbmRfY2xhc3MtdGFyZ2V0KCkgeworICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiBzZXR1cC5weSBidWlsZCAke0RJU1RVVElMU19CVUlMRF9BUkdTfSB8fCBcCisgICAgdHJ1ZQorICAgIGNwICR7V09SS0RJUn0vKmNvbmZpZy5oICR7U30vYnVpbGQvJChscyAke1N9L2J1aWxkIHwgZ3JlcCBzcmMpL251bXB5L2NvcmUvaW5jbHVkZS9udW1weS8KK30KKworRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9udW1weS9jb3JlL2xpYi8qLmEiCisKKyMgaW5zdGFsbCB3aGF0IGlzIG5lZWRlZCBmb3IgbnVtcHkudGVzdCgpCitSREVQRU5EU18ke1BOfSA9ICJweXRob24tdW5pdHRlc3QgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLWRpZmZsaWIgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLXBwcmludCBcCisgICAgICAgICAgICAgICAgICBweXRob24tcGlja2xlIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1zaGVsbCBcCisgICAgICAgICAgICAgICAgICBweXRob24tbm9zZSBcCisgICAgICAgICAgICAgICAgICBweXRob24tZG9jdGVzdCBcCisgICAgICAgICAgICAgICAgICBweXRob24tZGF0ZXRpbWUgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLWRpc3R1dGlscyBcCisgICAgICAgICAgICAgICAgICBweXRob24tbWlzYyBcCisgICAgICAgICAgICAgICAgICBweXRob24tbW1hcCBcCisgICAgICAgICAgICAgICAgICBweXRob24tbmV0Y2xpZW50IFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1udW1iZXJzIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1weWRvYyBcCisgICAgICAgICAgICAgICAgICBweXRob24tcGtndXRpbCBcCisgICAgICAgICAgICAgICAgICBweXRob24tZW1haWwgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLXN1YnByb2Nlc3MgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLWNvbXByZXNzaW9uIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1jdHlwZXMgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLXRocmVhZGluZyBcCisiCisKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uLW51bXB5L3B5dGhvbjMtbnVtcHlfMS4xMS4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvcHl0aG9uMy1udW1weV8xLjExLjIuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmOTY2NWYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvcHl0aG9uMy1udW1weV8xLjExLjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotU1VNTUFSWSA9ICJBIHNvcGhpc3RpY2F0ZWQgTnVtZXJpYyBQcm9jZXNzaW5nIFBhY2thZ2UgZm9yIFB5dGhvbiIKLVNFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgotTElDRU5TRSA9ICJQU0YiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9N2U1MWE1Njc3YjIyYjg2NWFiYmZiM2RmZjZmZmIyZDAiCi0KLVNSQ05BTUUgPSAibnVtcHkiCi0KLVNSQ19VUkkgPSAiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL3NvdXJjZS9uLyR7U1JDTkFNRX0vJHtTUkNOQU1FfS0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1Eb24tdC1zZWFyY2gtdXNyLWFuZC1zby1vbi1mb3ItbGlicmFyaWVzLWJ5LWRlZmF1bHQtLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3JlbW92ZS1idWlsZC1wYXRoLWluLWNvbW1lbnRzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2ZpeF9zaGViYW5nX2YycHkucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZDcwZDM3YjdjNGFhMmFmM2ZlODc5YTBkODU4YzU0ZjJhYTMyYTcyNS5wYXRjaCBcCi0gICAgICAgICAgICR7Q09ORklHRklMRVNVUkl9ICIKLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9udW1weS9maWxlcy8iCi0KLUNPTkZJR0ZJTEVTVVJJID89ICIiCi0KLUNPTkZJR0ZJTEVTVVJJX2FhcmNoNjQgPSAiIFwKLSAgICBmaWxlOi8vY29uZmlnLmggXAotICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCi0iCi1DT05GSUdGSUxFU1VSSV9hcm0gPSAiIFwKLSAgICBmaWxlOi8vY29uZmlnLmggXAotICAgIGZpbGU6Ly9udW1weWNvbmZpZy5oIFwKLSIKLUNPTkZJR0ZJTEVTVVJJX2FybWViID0gIiBcCi0gICAgZmlsZTovL2NvbmZpZy5oIFwKLSAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCi0iCi1DT05GSUdGSUxFU1VSSV9taXBzYXJjaG8zMmVsID0gIiBcCi0gICAgZmlsZTovL2NvbmZpZy5oIFwKLSAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCi0iCi1DT05GSUdGSUxFU1VSSV94ODYgPSAiIFwKLSAgICBmaWxlOi8vY29uZmlnLmggXAotICAgIGZpbGU6Ly9udW1weWNvbmZpZy5oIFwKLSIKLUNPTkZJR0ZJTEVTVVJJX3g4Ni02NCA9ICIgXAotICAgIGZpbGU6Ly9jb25maWcuaCBcCi0gICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKLSIKLUNPTkZJR0ZJTEVTVVJJX21pcHNhcmNobzMyZWIgPSAiIFwKLSAgICBmaWxlOi8vY29uZmlnLmggXAotICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCi0iCi1DT05GSUdGSUxFU1VSSV9wb3dlcnBjID0gIiBcCi0gICAgZmlsZTovL2NvbmZpZy5oIFwKLSAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAotIgotQ09ORklHRklMRVNVUklfcG93ZXJwYzY0ID0gIiBcCi0gICAgZmlsZTovL2NvbmZpZy5oIFwKLSAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAotIgotQ09ORklHRklMRVNVUklfbWlwc2FyY2huNjRlYiA9ICIgXAotICAgIGZpbGU6Ly9jb25maWcuaCBcCi0gICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKLSIKLUNPTkZJR0ZJTEVTVVJJX21pcHNhcmNobjY0ZWwgPSAiIFwKLSAgICBmaWxlOi8vY29uZmlnLmggXAotICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCi0iCi1DT05GSUdGSUxFU1VSSV9taXBzYXJjaG4zMmViID0gIiBcCi0gICAgZmlsZTovL2NvbmZpZy5oIFwKLSAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAotIgotQ09ORklHRklMRVNVUklfbWlwc2FyY2huMzJlbCA9ICIgXAotICAgIGZpbGU6Ly9jb25maWcuaCBcCi0gICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKLSIKLQotUyA9ICIke1dPUktESVJ9L251bXB5LSR7UFZ9IgotCi1pbmhlcml0IHNldHVwdG9vbHMzCi0KLSMgTWFrZSB0aGUgYnVpbGQgZmFpbCBhbmQgcmVwbGFjZSAqY29uZmlnLmggd2l0aCBwcm9wZXIgb25lCi0jIFRoaXMgaXMgYSB1Z2x5LCB1Z2x5IGhhY2sgLSBLb2VuCi1kb19jb21waWxlX3ByZXBlbmRfY2xhc3MtdGFyZ2V0KCkgewotICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9weXRob24zIHNldHVwLnB5IGJ1aWxkICR7RElTVFVUSUxTX0JVSUxEX0FSR1N9IHx8IFwKLSAgICB0cnVlCi0gICAgY3AgJHtXT1JLRElSfS8qY29uZmlnLmggJHtTfS9idWlsZC8kKGxzICR7U30vYnVpbGQgfCBncmVwIHNyYykvbnVtcHkvY29yZS9pbmNsdWRlL251bXB5LwotfQotCi1GSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L251bXB5L2NvcmUvbGliLyouYSIKLQotU1JDX1VSSVttZDVzdW1dID0gIjAzYmQ3OTI3YzMxNGM0Mzc4MDI3MWJmMWFiNzk1ZWJjIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA0ZGIyZmJkNjRlMmU3YzY4ZTc0MGIxNDQwMmIyNWFmNTE0MThmYzQzYTU5ZDllNTQxNzJiMzhiOTA2YjBmNjkiCi0KLSMgaW5zdGFsbCB3aGF0IGlzIG5lZWRlZCBmb3IgbnVtcHkudGVzdCgpCi1SREVQRU5EU18ke1BOfSA9ICJweXRob24zLXVuaXR0ZXN0IFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbjMtZGlmZmxpYiBcCi0gICAgICAgICAgICAgICAgICBweXRob24zLXBwcmludCBcCi0gICAgICAgICAgICAgICAgICBweXRob24zLXBpY2tsZSBcCi0gICAgICAgICAgICAgICAgICBweXRob24zLXNoZWxsIFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbjMtbm9zZSBcCi0gICAgICAgICAgICAgICAgICBweXRob24zLWRvY3Rlc3QgXAotICAgICAgICAgICAgICAgICAgcHl0aG9uMy1kYXRldGltZSBcCi0gICAgICAgICAgICAgICAgICBweXRob24zLWRpc3R1dGlscyBcCi0gICAgICAgICAgICAgICAgICBweXRob24zLW1pc2MgXAotICAgICAgICAgICAgICAgICAgcHl0aG9uMy1tbWFwIFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbjMtbmV0Y2xpZW50IFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbjMtbnVtYmVycyBcCi0gICAgICAgICAgICAgICAgICBweXRob24zLXB5ZG9jIFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbjMtcGtndXRpbCBcCi0gICAgICAgICAgICAgICAgICBweXRob24zLWVtYWlsIFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbjMtc3VicHJvY2VzcyBcCi0gICAgICAgICAgICAgICAgICBweXRob24zLWNvbXByZXNzaW9uIFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbjMtY3R5cGVzIFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbjMtdGhyZWFkaW5nIFwKLSAgICAgICAgICAgICAgICAgIHB5dGhvbjMtdGV4dHV0aWxzIFwKLSIKLQotUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvcHl0aG9uMy1udW1weV8xLjEzLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi1udW1weS9weXRob24zLW51bXB5XzEuMTMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTg3NGI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24tbnVtcHkvcHl0aG9uMy1udW1weV8xLjEzLjEuYmIKQEAgLTAsMCArMSwxMTQgQEAKK1NVTU1BUlkgPSAiQSBzb3BoaXN0aWNhdGVkIE51bWVyaWMgUHJvY2Vzc2luZyBQYWNrYWdlIGZvciBQeXRob24iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PTEwMDJiMDljZDY1NGZjYWEyZGNjODc1MzVhY2Q5YTk2IgorCitTUkNOQU1FID0gIm51bXB5IgorCitTUkNfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS8ke1NSQ05BTUV9LyR7U1JDTkFNRX0vcmVsZWFzZXMvZG93bmxvYWQvdiR7UFZ9LyR7U1JDTkFNRX0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRG9uLXQtc2VhcmNoLXVzci1hbmQtc28tb24tZm9yLWxpYnJhcmllcy1ieS1kZWZhdWx0LS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtYnVpbGQtcGF0aC1pbi1jb21tZW50cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfc2hlYmFuZ19mMnB5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtQlVHLWZpeC1pbmZpbml0ZS1sb29wLXdoZW4tY3JlYXRpbmctbnAucGFkLW9uLWFuLWVtcC5wYXRjaCBcCisgICAgICAgICAgICR7Q09ORklHRklMRVNVUkl9ICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI2ZDQ1OWU0YTI0ZjUwMzVmNzIwZGRhM2M1NzcxNmE5MiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkZTAyMGVjMDZmMWU5Y2UxMTE1YTUwMTYxYTM4YmY4ZDRjMjUyNTM3OTkwMGY5Y2I0NzhjYzYxM2ExZTdjZDkzIgorCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL251bXB5L251bXB5L3JlbGVhc2VzIgorCitDT05GSUdGSUxFU1VSSSA/PSAiIgorCitDT05GSUdGSUxFU1VSSV9hYXJjaDY0ID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfYXJtID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9hcm1lYiA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfbWlwc2FyY2hvMzJlbCA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfeDg2ID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV94ODYtNjQgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9taXBzYXJjaG8zMmViID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfcG93ZXJwYyA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX3Bvd2VycGM2NCA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX21pcHNhcmNobjY0ZWIgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9taXBzYXJjaG42NGVsID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfbWlwc2FyY2huMzJlYiA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX21pcHNhcmNobjMyZWwgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9udW1weS0ke1BWfSIKKworaW5oZXJpdCBzZXR1cHRvb2xzMworCisjIE1ha2UgdGhlIGJ1aWxkIGZhaWwgYW5kIHJlcGxhY2UgKmNvbmZpZy5oIHdpdGggcHJvcGVyIG9uZQorIyBUaGlzIGlzIGEgdWdseSwgdWdseSBoYWNrIC0gS29lbgorZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLXRhcmdldCgpIHsKKyAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcHl0aG9uMyBzZXR1cC5weSBidWlsZCAke0RJU1RVVElMU19CVUlMRF9BUkdTfSB8fCBcCisgICAgdHJ1ZQorICAgIGNwICR7V09SS0RJUn0vKmNvbmZpZy5oICR7U30vYnVpbGQvJChscyAke1N9L2J1aWxkIHwgZ3JlcCBzcmMpL251bXB5L2NvcmUvaW5jbHVkZS9udW1weS8KK30KKworRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9udW1weS9jb3JlL2xpYi8qLmEiCisKKyMgaW5zdGFsbCB3aGF0IGlzIG5lZWRlZCBmb3IgbnVtcHkudGVzdCgpCitSREVQRU5EU18ke1BOfSA9ICJweXRob24zLXVuaXR0ZXN0IFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbjMtZGlmZmxpYiBcCisgICAgICAgICAgICAgICAgICBweXRob24zLXBwcmludCBcCisgICAgICAgICAgICAgICAgICBweXRob24zLXBpY2tsZSBcCisgICAgICAgICAgICAgICAgICBweXRob24zLXNoZWxsIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbjMtbm9zZSBcCisgICAgICAgICAgICAgICAgICBweXRob24zLWRvY3Rlc3QgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uMy1kYXRldGltZSBcCisgICAgICAgICAgICAgICAgICBweXRob24zLWRpc3R1dGlscyBcCisgICAgICAgICAgICAgICAgICBweXRob24zLW1pc2MgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uMy1tbWFwIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbjMtbmV0Y2xpZW50IFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbjMtbnVtYmVycyBcCisgICAgICAgICAgICAgICAgICBweXRob24zLXB5ZG9jIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbjMtcGtndXRpbCBcCisgICAgICAgICAgICAgICAgICBweXRob24zLWVtYWlsIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbjMtc3VicHJvY2VzcyBcCisgICAgICAgICAgICAgICAgICBweXRob24zLWNvbXByZXNzaW9uIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbjMtY3R5cGVzIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbjMtdGhyZWFkaW5nIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbjMtdGV4dHV0aWxzIFwKKyIKKworUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLTIuNy1tYW5pZmVzdC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMi43LW1hbmlmZXN0LmluYwppbmRleCA3ZWQyNTRiLi41N2Q0ODM0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMi43LW1hbmlmZXN0LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMi43LW1hbmlmZXN0LmluYwpAQCAtMjgxLDcgKzI4MSw3IEBACiBGSUxFU18ke1BOfS16bGliPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3psaWIuc28gIgogCiBTVU1NQVJZXyR7UE59LW1vZHVsZXM9IkFsbCBQeXRob24gbW9kdWxlcyIKLVJERVBFTkRTXyR7UE59LW1vZHVsZXM9IiR7UE59LTJ0bzMgJHtQTn0tYXJncGFyc2UgJHtQTn0tYXVkaW8gJHtQTn0tYnNkZGIgJHtQTn0tY29kZWNzICR7UE59LWNvbXBpbGUgJHtQTn0tY29tcGlsZXIgJHtQTn0tY29tcHJlc3Npb24gJHtQTn0tY29udGV4dGxpYiAke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWN0eXBlcyAke1BOfS1jdXJzZXMgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tZGIgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGlmZmxpYiAke1BOfS1kaXN0dXRpbHMgJHtQTn0tZG9jdGVzdCAke1BOfS1lbWFpbCAke1BOfS1mY250bCAke1BOfS1nZGJtICR7UE59LWhvdHNob3QgJHtQTn0taHRtbCAke1BOfS1pZGxlICR7UE59LWltYWdlICR7UE59LWltcG9ydGxpYiAke1BOfS1pbyAke1BOfS1qc29uICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1tYWlsYm94ICR7UE59LW1hdGggJHtQTn0tbWltZSAke1BOfS1tbWFwICR7UE59LW11bHRpcHJvY2Vzc2luZyAke1BOfS1uZXRjbGllbnQgJHtQTn0tbmV0c2VydmVyICR7UE59LW51bWJlcnMgJHtQTn0tcGlja2xlICR7UE59LXBrZ3V0aWwgJHtQTn0tcGxpc3RsaWIgJHtQTn0tcHByaW50ICR7UE59LXByb2ZpbGUgJHtQTn0tcHlkb2MgJHtQTn0tcmUgJHtQTn0tcmVhZGxpbmUgJHtQTn0tcmVzb3VyY2UgJHtQTn0tcm9ib3RwYXJzZXIgJHtQTn0tc2hlbGwgJHtQTn0tc210cGQgJHtQTn0tc3FsaXRlMyAke1BOfS1zcWxpdGUzLXRlc3RzICR7UE59LXN0cmluZ29sZCAke1BOfS1zdWJwcm9jZXNzICR7UE59LXN5c2xvZyAke1BOfS10ZXJtaW5hbCAke1BOfS10ZXN0cyAke1BOfS10ZXh0dXRpbHMgJHtQTn0tdGhyZWFkaW5nICR7UE59LXRraW50ZXIgJHtQTn0tdW5pdHRlc3QgJHtQTn0tdW5peGFkbWluICR7UE59LXhtbCAke1BOfS14bWxycGMgJHtQTn0temxpYiAgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlcz0iJHtQTn0tMnRvMyAke1BOfS1hcmdwYXJzZSAke1BOfS1hdWRpbyAke1BOfS1ic2RkYiAke1BOfS1jb2RlY3MgJHtQTn0tY29tcGlsZSAke1BOfS1jb21waWxlciAke1BOfS1jb21wcmVzc2lvbiAke1BOfS1jb250ZXh0bGliICR7UE59LWNvcmUgJHtQTn0tY3J5cHQgJHtQTn0tY3R5cGVzICR7UE59LWN1cnNlcyAke1BOfS1kYXRldGltZSAke1BOfS1kYiAke1BOfS1kZWJ1Z2dlciAke1BOfS1kaWZmbGliICR7UE59LWRpc3R1dGlscyAke1BOfS1kb2N0ZXN0ICR7UE59LWVtYWlsICR7UE59LWZjbnRsICR7UE59LWdkYm0gJHtQTn0taG90c2hvdCAke1BOfS1odG1sICR7UE59LWlkbGUgJHtQTn0taW1hZ2UgJHtQTn0taW1wb3J0bGliICR7UE59LWlvICR7UE59LWpzb24gJHtQTn0tbGFuZyAke1BOfS1sb2dnaW5nICR7UE59LW1haWxib3ggJHtQTn0tbWF0aCAke1BOfS1taW1lICR7UE59LW1tYXAgJHtQTn0tbXVsdGlwcm9jZXNzaW5nICR7UE59LW5ldGNsaWVudCAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tbnVtYmVycyAke1BOfS1waWNrbGUgJHtQTn0tcGtndXRpbCAke1BOfS1wbGlzdGxpYiAke1BOfS1wcHJpbnQgJHtQTn0tcHJvZmlsZSAke1BOfS1weWRvYyAke1BOfS1yZSAke1BOfS1yZWFkbGluZSAke1BOfS1yZXNvdXJjZSAke1BOfS1yb2JvdHBhcnNlciAke1BOfS1zaGVsbCAke1BOfS1zbXRwZCAke1BOfS1zcWxpdGUzICR7UE59LXNxbGl0ZTMtdGVzdHMgJHtQTn0tc3RyaW5nb2xkICR7UE59LXN1YnByb2Nlc3MgJHtQTn0tc3lzbG9nICR7UE59LXRlcm1pbmFsICR7UE59LXRleHR1dGlscyAke1BOfS10aHJlYWRpbmcgJHtQTn0tdGtpbnRlciAke1BOfS11bml0dGVzdCAke1BOfS11bml4YWRtaW4gJHtQTn0teG1sICR7UE59LXhtbHJwYyAke1BOfS16bGliICAiCiBBTExPV19FTVBUWV8ke1BOfS1tb2R1bGVzID0gIjEiCiAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLTMuNS1tYW5pZmVzdC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMy41LW1hbmlmZXN0LmluYwppbmRleCAxZTIwZjAwLi4wMjYwZTg3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMy41LW1hbmlmZXN0LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMy41LW1hbmlmZXN0LmluYwpAQCAtMSw2ICsxLDYgQEAKIAogIyBXQVJOSU5HOiBUaGlzIGZpbGUgaXMgQVVUTyBHRU5FUkFURUQ6IE1hbnVhbCBlZGl0cyB3aWxsIGJlIGxvc3QgbmV4dCB0aW1lIEkgcmVnZW5lcmF0ZSB0aGUgZmlsZS4KLSMgR2VuZXJhdG9yOiAnLi4vLi4vLi4vc2NyaXB0cy9jb250cmliL3B5dGhvbi9nZW5lcmF0ZS1tYW5pZmVzdC0zLjUucHknIFZlcnNpb24gMjAxNDAxMzEgKEMpIDIwMDItMjAxMCBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtbGF1ZXJAdmFuaWxsZS1tZWRpYS5kZT4KKyMgR2VuZXJhdG9yOiAnc2NyaXB0cy9jb250cmliL3B5dGhvbi9nZW5lcmF0ZS1tYW5pZmVzdC0zLjUucHknIFZlcnNpb24gMjAxNDAxMzEgKEMpIDIwMDItMjAxMCBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtbGF1ZXJAdmFuaWxsZS1tZWRpYS5kZT4KIAogIAogCkBAIC0zNCw3ICszNCw3IEBACiAKIFNVTU1BUllfJHtQTn0tY29tcHJlc3Npb249IlB5dGhvbiBoaWdoLWxldmVsIGNvbXByZXNzaW9uIHN1cHBvcnQiCiBSREVQRU5EU18ke1BOfS1jb21wcmVzc2lvbj0iJHtQTn0tY29yZSAke1BOfS1jb2RlY3MgJHtQTn0taW1wb3J0bGliICR7UE59LXRocmVhZGluZyAke1BOfS1zaGVsbCIKLUZJTEVTXyR7UE59LWNvbXByZXNzaW9uPSIke2xpYmRpcn0vcHl0aG9uMy41L2d6aXAuKiAke2xpYmRpcn0vcHl0aG9uMy41L19fcHljYWNoZV9fL2d6aXAuKiAke2xpYmRpcn0vcHl0aG9uMy41L3ppcGZpbGUuKiAke2xpYmRpcn0vcHl0aG9uMy41L19fcHljYWNoZV9fL3ppcGZpbGUuKiAke2xpYmRpcn0vcHl0aG9uMy41L3RhcmZpbGUuKiAke2xpYmRpcn0vcHl0aG9uMy41L19fcHljYWNoZV9fL3RhcmZpbGUuKiAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL2J6Mi4qLnNvICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvX19weWNhY2hlX18vYnoyLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC96bGliLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9fX3B5Y2FjaGVfXy96bGliLiouc28gIgorRklMRVNfJHtQTn0tY29tcHJlc3Npb249IiR7bGliZGlyfS9weXRob24zLjUvZ3ppcC4qICR7bGliZGlyfS9weXRob24zLjUvX19weWNhY2hlX18vZ3ppcC4qICR7bGliZGlyfS9weXRob24zLjUvemlwZmlsZS4qICR7bGliZGlyfS9weXRob24zLjUvX19weWNhY2hlX18vemlwZmlsZS4qICR7bGliZGlyfS9weXRob24zLjUvdGFyZmlsZS4qICR7bGliZGlyfS9weXRob24zLjUvX19weWNhY2hlX18vdGFyZmlsZS4qICR7bGliZGlyfS9weXRob24zLjUvbGliLWR5bmxvYWQvYnoyLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNS9saWItZHlubG9hZC9fX3B5Y2FjaGVfXy9iejIuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL3psaWIuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy41L2xpYi1keW5sb2FkL19fcHljYWNoZV9fL3psaWIuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy41L2J6Mi5weSAke2xpYmRpcn0vcHl0aG9uMy41L19fcHljYWNoZV9fL2J6Mi5weSAke2xpYmRpcn0vcHl0aG9uMy41L2x6bWEucHkgJHtsaWJkaXJ9L3B5dGhvbjMuNS9fX3B5Y2FjaGVfXy9sem1hLnB5ICR7bGliZGlyfS9weXRob24zLjUvX2NvbXByZXNzaW9uLnB5ICR7bGliZGlyfS9weXRob24zLjUvX19weWNhY2hlX18vX2NvbXByZXNzaW9uLnB5ICIKIAogU1VNTUFSWV8ke1BOfS1jb3JlPSJQeXRob24gaW50ZXJwcmV0ZXIgYW5kIGNvcmUgbW9kdWxlcyIKIFJERVBFTkRTXyR7UE59LWNvcmU9IiR7UE59LWxhbmcgJHtQTn0tcmUgJHtQTn0tcmVwcmxpYiAke1BOfS1jb2RlY3MgJHtQTn0taW8gJHtQTn0tbWF0aCIKQEAgLTY2LDcgKzY2LDcgQEAKIAogU1VNTUFSWV8ke1BOfS1kZXY9IlB5dGhvbiBkZXZlbG9wbWVudCBwYWNrYWdlIgogUkRFUEVORFNfJHtQTn0tZGV2PSIke1BOfS1jb3JlIgotRklMRVNfJHtQTn0tZGV2PSIke2luY2x1ZGVkaXJ9ICR7bGliZGlyfS9saWIqJHtTT0xJQlNERVZ9ICR7bGliZGlyfS8qLmxhICR7bGliZGlyfS8qLmEgJHtsaWJkaXJ9LyoubyAke2xpYmRpcn0vcGtnY29uZmlnICR7YmFzZV9saWJkaXJ9LyouYSAke2Jhc2VfbGliZGlyfS8qLm8gJHtkYXRhZGlyfS9hY2xvY2FsICR7ZGF0YWRpcn0vcGtnY29uZmlnICR7bGliZGlyfS9weXRob24zLjUvY29uZmlnL01ha2VmaWxlICR7bGliZGlyfS9weXRob24zLjUvY29uZmlnL01ha2VmaWxlL19fcHljYWNoZV9fICIKK0ZJTEVTXyR7UE59LWRldj0iJHtpbmNsdWRlZGlyfSAke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSAke2xpYmRpcn0vKi5sYSAke2xpYmRpcn0vKi5hICR7bGliZGlyfS8qLm8gJHtsaWJkaXJ9L3BrZ2NvbmZpZyAke2Jhc2VfbGliZGlyfS8qLmEgJHtiYXNlX2xpYmRpcn0vKi5vICR7ZGF0YWRpcn0vYWNsb2NhbCAke2RhdGFkaXJ9L3BrZ2NvbmZpZyAke2xpYmRpcn0vcHl0aG9uMy41L2NvbmZpZyovTWFrZWZpbGUgJHtsaWJkaXJ9L3B5dGhvbjMuNS9jb25maWcqL01ha2VmaWxlL19fcHljYWNoZV9fICIKIAogU1VNTUFSWV8ke1BOfS1kaWZmbGliPSJQeXRob24gaGVscGVycyBmb3IgY29tcHV0aW5nIGRlbHRhcyBiZXR3ZWVuIG9iamVjdHMiCiBSREVQRU5EU18ke1BOfS1kaWZmbGliPSIke1BOfS1sYW5nICR7UE59LXJlIgpAQCAtMjQxLDcgKzI0MSw3IEBACiBGSUxFU18ke1BOfS10ZXJtaW5hbD0iJHtsaWJkaXJ9L3B5dGhvbjMuNS9wdHkuKiAke2xpYmRpcn0vcHl0aG9uMy41L19fcHljYWNoZV9fL3B0eS4qICR7bGliZGlyfS9weXRob24zLjUvdHR5LiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9fX3B5Y2FjaGVfXy90dHkuKiAiCiAKIFNVTU1BUllfJHtQTn0tdGVzdHM9IlB5dGhvbiB0ZXN0cyIKLVJERVBFTkRTXyR7UE59LXRlc3RzPSIke1BOfS1jb3JlIgorUkRFUEVORFNfJHtQTn0tdGVzdHM9IiR7UE59LWNvcmUgJHtQTn0tY29tcHJlc3Npb24iCiBGSUxFU18ke1BOfS10ZXN0cz0iJHtsaWJkaXJ9L3B5dGhvbjMuNS90ZXN0ICR7bGliZGlyfS9weXRob24zLjUvdGVzdC9fX3B5Y2FjaGVfXyAiCiAKIFNVTU1BUllfJHtQTn0tdGV4dHV0aWxzPSJQeXRob24gb3B0aW9uIHBhcnNpbmcsIHRleHQgd3JhcHBpbmcgYW5kIENTViBzdXBwb3J0IgpAQCAtMjc3LDcgKzI3Nyw3IEBACiBGSUxFU18ke1BOfS14bWxycGM9IiR7bGliZGlyfS9weXRob24zLjUveG1scnBjbGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9fX3B5Y2FjaGVfXy94bWxycGNsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy41L1NpbXBsZVhNTFJQQ1NlcnZlci4qICR7bGliZGlyfS9weXRob24zLjUvX19weWNhY2hlX18vU2ltcGxlWE1MUlBDU2VydmVyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNS9Eb2NYTUxSUENTZXJ2ZXIuKiAke2xpYmRpcn0vcHl0aG9uMy41L19fcHljYWNoZV9fL0RvY1hNTFJQQ1NlcnZlci4qICR7bGliZGlyfS9weXRob24zLjUveG1scnBjICR7bGliZGlyfS9weXRob24zLjUveG1scnBjL19fcHljYWNoZV9fICIKIAogU1VNTUFSWV8ke1BOfS1tb2R1bGVzPSJBbGwgUHl0aG9uIG1vZHVsZXMiCi1SREVQRU5EU18ke1BOfS1tb2R1bGVzPSIke1BOfS0ydG8zICR7UE59LWFyZ3BhcnNlICR7UE59LWFzeW5jaW8gJHtQTn0tYXVkaW8gJHtQTn0tY29kZWNzICR7UE59LWNvbXBpbGUgJHtQTn0tY29tcHJlc3Npb24gJHtQTn0tY29yZSAke1BOfS1jcnlwdCAke1BOfS1jdHlwZXMgJHtQTn0tY3Vyc2VzICR7UE59LWRhdGV0aW1lICR7UE59LWRiICR7UE59LWRlYnVnZ2VyICR7UE59LWRpZmZsaWIgJHtQTn0tZGlzdHV0aWxzICR7UE59LWRvY3Rlc3QgJHtQTn0tZW1haWwgJHtQTn0tZW51bSAke1BOfS1mY250bCAke1BOfS1nZGJtICR7UE59LWh0bWwgJHtQTn0taWRsZSAke1BOfS1pbWFnZSAke1BOfS1pbXBvcnRsaWIgJHtQTn0taW8gJHtQTn0tanNvbiAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWFpbGJveCAke1BOfS1tYXRoICR7UE59LW1pbWUgJHtQTn0tbW1hcCAke1BOfS1tdWx0aXByb2Nlc3NpbmcgJHtQTn0tbmV0Y2xpZW50ICR7UE59LW5ldHNlcnZlciAke1BOfS1udW1iZXJzICR7UE59LXBpY2tsZSAke1BOfS1wa2d1dGlsICR7UE59LXBwcmludCAke1BOfS1wcm9maWxlICR7UE59LXB5ZG9jICR7UE59LXJlICR7UE59LXJlYWRsaW5lICR7UE59LXJlcHJsaWIgJHtQTn0tcmVzb3VyY2UgJHtQTn0tc2VsZWN0b3JzICR7UE59LXNoZWxsICR7UE59LXNpZ25hbCAke1BOfS1zbXRwZCAke1BOfS1zcWxpdGUzICR7UE59LXNxbGl0ZTMtdGVzdHMgJHtQTn0tc3RyaW5nb2xkICR7UE59LXN1YnByb2Nlc3MgJHtQTn0tc3lzbG9nICR7UE59LXRlcm1pbmFsICR7UE59LXRlc3RzICR7UE59LXRleHR1dGlscyAke1BOfS10aHJlYWRpbmcgJHtQTn0tdGtpbnRlciAke1BOfS10eXBpbmcgJHtQTn0tdW5pdHRlc3QgJHtQTn0tdW5peGFkbWluICR7UE59LXhtbCAke1BOfS14bWxycGMgICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZXM9IiR7UE59LTJ0bzMgJHtQTn0tYXJncGFyc2UgJHtQTn0tYXN5bmNpbyAke1BOfS1hdWRpbyAke1BOfS1jb2RlY3MgJHtQTn0tY29tcGlsZSAke1BOfS1jb21wcmVzc2lvbiAke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWN0eXBlcyAke1BOfS1jdXJzZXMgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tZGIgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGlmZmxpYiAke1BOfS1kaXN0dXRpbHMgJHtQTn0tZG9jdGVzdCAke1BOfS1lbWFpbCAke1BOfS1lbnVtICR7UE59LWZjbnRsICR7UE59LWdkYm0gJHtQTn0taHRtbCAke1BOfS1pZGxlICR7UE59LWltYWdlICR7UE59LWltcG9ydGxpYiAke1BOfS1pbyAke1BOfS1qc29uICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1tYWlsYm94ICR7UE59LW1hdGggJHtQTn0tbWltZSAke1BOfS1tbWFwICR7UE59LW11bHRpcHJvY2Vzc2luZyAke1BOfS1uZXRjbGllbnQgJHtQTn0tbmV0c2VydmVyICR7UE59LW51bWJlcnMgJHtQTn0tcGlja2xlICR7UE59LXBrZ3V0aWwgJHtQTn0tcHByaW50ICR7UE59LXByb2ZpbGUgJHtQTn0tcHlkb2MgJHtQTn0tcmUgJHtQTn0tcmVhZGxpbmUgJHtQTn0tcmVwcmxpYiAke1BOfS1yZXNvdXJjZSAke1BOfS1zZWxlY3RvcnMgJHtQTn0tc2hlbGwgJHtQTn0tc2lnbmFsICR7UE59LXNtdHBkICR7UE59LXNxbGl0ZTMgJHtQTn0tc3FsaXRlMy10ZXN0cyAke1BOfS1zdHJpbmdvbGQgJHtQTn0tc3VicHJvY2VzcyAke1BOfS1zeXNsb2cgJHtQTn0tdGVybWluYWwgJHtQTn0tdGV4dHV0aWxzICR7UE59LXRocmVhZGluZyAke1BOfS10a2ludGVyICR7UE59LXR5cGluZyAke1BOfS11bml0dGVzdCAke1BOfS11bml4YWRtaW4gJHtQTn0teG1sICR7UE59LXhtbHJwYyAgIgogQUxMT1dfRU1QVFlfJHtQTn0tbW9kdWxlcyA9ICIxIgogCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1hc3luY18wLjYuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1hc3luY18wLjYuMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg1NWU0Mi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYXN5bmNfMC42LjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLXJlcXVpcmUgcHl0aG9uLWFzeW5jLmluYwotCi1pbmhlcml0IHNldHVwdG9vbHMKLQotUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbi10aHJlYWRpbmcgcHl0aG9uLWxhbmciCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1naXQuaW5jCmluZGV4IGZlZGRmMjcuLjc3NzYwOGMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1naXQuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1naXQuaW5jCkBAIC0xMCw4ICsxMCw4IEBACiAKIFNSQ19VUkkgPSAiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL3NvdXJjZS9HL0dpdFB5dGhvbi9HaXRQeXRob24tJHtQVn0udGFyLmd6IgogCi1TUkNfVVJJW21kNXN1bV0gPSAiNzdmODMzOWU2OGRlZGI2ZDdjNGUyNjM3MWE1ODhlZDkiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTk2ZjhlOTUzY2Y5ZmVlMGE3NTk5ZmM1ODc2Njc1OTEzMjg3NjBiNjM0MWEwMDgxZWYzMTFhOTQyZmM5NjIwNCIKK1NSQ19VUklbbWQ1c3VtXSA9ICJkZjk0MjEyYjE5ZDI3MGE2MjViNjdiNGM4NGFjOWE0MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1YzAwY2JkMjU2ZTJiMWQwMzkzODFkNGY3ZDcxZmNiN2VlNWNjMTk2Y2ExMGMxMDFmZjcxOTFiZDgyYWI1ZDljIgogCiBVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9HaXRQeXRob24vIgogVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiL0dpdFB5dGhvbi8oP1A8cHZlcj4oXGQrW1wuXC1fXSopKykiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0XzIuMS4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdF8yLjEuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ5ZGJlYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0XzIuMS4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1yZXF1aXJlIHB5dGhvbi1naXQuaW5jCi0KLURFUEVORFMgPSAicHl0aG9uLWdpdGRiIgotCi1pbmhlcml0IHNldHVwdG9vbHMKLQotUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbi1naXRkYiBweXRob24tbGFuZyBweXRob24taW8gcHl0aG9uLXNoZWxsIHB5dGhvbi1tYXRoIHB5dGhvbi1yZSBweXRob24tc3VicHJvY2VzcyBweXRob24tc3RyaW5nb2xkIHB5dGhvbi11bml4YWRtaW4iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0ZGJfMC42LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0ZGJfMC42LjQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3NzczOTUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdGRiXzAuNi40LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1yZXF1aXJlIHB5dGhvbi1naXRkYi5pbmMKLQotREVQRU5EUyA9ICJweXRob24tYXN5bmMgcHl0aG9uLXNtbWFwIgotCi1pbmhlcml0IGRpc3R1dGlscwotCi1SREVQRU5EU18ke1BOfSArPSAicHl0aG9uLXNtbWFwIHB5dGhvbi1hc3luYyBweXRob24tbW1hcCBweXRob24tbGFuZyBweXRob24temxpYiBweXRob24taW8gcHl0aG9uLXNoZWxsIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW1ha28uaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW1ha28uaW5jCmluZGV4IDEwMzY0ZGIuLjFjODNhZjYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1tYWtvLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbWFrby5pbmMKQEAgLTEsMTIgKzEsMTMgQEAKIFNVTU1BUlkgPSAiVGVtcGxhdGluZyBsaWJyYXJ5IGZvciBQeXRob24iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1ha290ZW1wbGF0ZXMub3JnLyIKIFNFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgogTElDRU5TRSA9ICJNSVQiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0xYmIyMWZhMmQyZjdhNTM0Yzg4NGI5OTA0MzBhNjg2MyIKIAogU1JDX1VSSSA9ICJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvc291cmNlL00vTWFrby9NYWtvLSR7UFZ9LnRhci5neiIKIAotU1JDX1VSSVttZDVzdW1dID0gImEyOGUyMmEzMzkwODAzMTZiMmFjYzM1MmI5ZWU2MzFjIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ4NTU5ZWJkODcyYThlNzdmOTIwMDU4ODRiM2Q4OGZmYWU1NTI4MTJjZGYxN2RiNjc2OGU1YzNiZTVlYmJlMGQiCitTUkNfVVJJW21kNXN1bV0gPSAiNTgzNmNjOTk3YjFiNzczZWYzODliZjY2MjljMzBlNjUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNGUwMmZkZTU3YmQ0YWJiNWVjNDAwMTgxZTRjMzE0ZjU2YWMzZTQ5YmE0ZmI4YjBkNTBiYmExOGNiMjdkMjVhZSIKIAogVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvbWFrby8iCiBVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICIvTWFrby8oP1A8cHZlcj4oXGQrW1wuXC1fXSopKykiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbWFrb18xLjAuNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1tYWtvXzEuMC42LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzAwNDRlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1tYWtvXzEuMC42LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotcmVxdWlyZSBweXRob24tbWFrby5pbmMKLQotaW5oZXJpdCBzZXR1cHRvb2xzCi0KLVJERVBFTkRTXyR7UE59ID0gInB5dGhvbi10aHJlYWRpbmcgXAotICAgICAgICAgICAgICAgICAgcHl0aG9uLW5ldGNsaWVudCBcCi0gICAgICAgICAgICAgICAgICBweXRob24taHRtbCBcCi0iCi1SREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCi0KLSMgVGhlIHNhbWUgdXRpbGl0eSBpcyBwYWNrYWdlZCBpbiBweXRob24zLW1ha28sIHNvIGl0IHdvdWxkIGNvbmZsaWN0Ci1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLSAgICBybSAtZiAke0R9JHtiaW5kaXJ9L21ha28tcmVuZGVyCi0gICAgcm1kaXIgJHtEfSR7YmluZGlyfQotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS0yLjctbWFuaWZlc3QuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS0yLjctbWFuaWZlc3QuaW5jCmluZGV4IDU4MWEzN2EuLmIwNWFhZTAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUtMi43LW1hbmlmZXN0LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlLTIuNy1tYW5pZmVzdC5pbmMKQEAgLTEsMTAgKzEsOSBAQAogCiAjIFdBUk5JTkc6IFRoaXMgZmlsZSBpcyBBVVRPIEdFTkVSQVRFRDogTWFudWFsIGVkaXRzIHdpbGwgYmUgbG9zdCBuZXh0IHRpbWUgSSByZWdlbmVyYXRlIHRoZSBmaWxlLgotIyBHZW5lcmF0b3I6ICcuLi8uLi8uLi9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTIuNy5weSAtLW5hdGl2ZScgVmVyc2lvbiAyMDExMDIyMi4yIChDKSAyMDAyLTIwMTAgTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWxhdWVyQHZhbmlsbGUtbWVkaWEuZGU+CisjIEdlbmVyYXRvcjogJy4uL3NjcmlwdHMvY29udHJpYi9weXRob24vZ2VuZXJhdGUtbWFuaWZlc3QtMi43LnB5IC0tbmF0aXZlJyBWZXJzaW9uIDIwMTEwMjIyLjIgKEMpIDIwMDItMjAxMCBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtbGF1ZXJAdmFuaWxsZS1tZWRpYS5kZT4KIAogIAogCi1SUFJPVklERVMrPSJweXRob24tMnRvMy1uYXRpdmUgcHl0aG9uLWFyZ3BhcnNlLW5hdGl2ZSBweXRob24tYXVkaW8tbmF0aXZlIHB5dGhvbi1ic2RkYi1uYXRpdmUgcHl0aG9uLWNvZGVjcy1uYXRpdmUgcHl0aG9uLWNvbXBpbGUtbmF0aXZlIHB5dGhvbi1jb21waWxlci1uYXRpdmUgcHl0aG9uLWNvbXByZXNzaW9uLW5hdGl2ZSBweXRob24tY29udGV4dGxpYi1uYXRpdmUgcHl0aG9uLWNvcmUtbmF0aXZlIHB5dGhvbi1jcnlwdC1uYXRpdmUgcHl0aG9uLWN0eXBlcy1uYXRpdmUgcHl0aG9uLWN1cnNlcy1uYXRpdmUgcHl0aG9uLWRhdGV0aW1lLW5hdGl2ZSBweXRob24tZGItbmF0aXZlIHB5dGhvbi1kZWJ1Z2dlci1uYXRpdmUgcHl0aG9uLWRldi1uYXRpdmUgcHl0aG9uLWRpZmZsaWItbmF0aXZlIHB5dGhvbi1kaXN0dXRpbHMtbmF0aXZlIHB5dGhvbi1kaXN0dXRpbHMtc3RhdGljZGV2LW5hdGl2ZSBweXRob24tZG9jdGVzdC1uYXRpdmUgcHl0aG9uLWVtYWlsLW5hdGl2ZSBweXRob24tZmNudGwtbmF0aXZlIHB5dGhvbi1nZGJtLW5hdGl2ZSBweXRob24taG90c2hvdC1uYXRpdmUgcHl0aG9uLWh0bWwtbmF0aXZlIHB5dGhvbi1pZGxlLW5hdGl2ZSBweXRob24taW1hZ2UtbmF0aXZlIHB5dGhvbi1pbXBvcnRsaWItbmF0aXZlIHB5dGhvbi1pby1uYXRpdmUgcHl0aG9uLWpzb24tbmF0aXZlIHB5dGhvbi1sYW5nLW5hdGl2ZSBweXRob24tbG9nZ2luZy1uYXRpdmUgcHl0aG9uLW1haWxib3gtbmF0aXZlIHB5dGhvbi1tYXRoLW5hdGl2ZSBweXRob24tbWltZS1uYXRpdmUgcHl0aG9uLW1tYXAtbmF0aXZlIHB5dGhvbi1tdWx0aXByb2Nlc3NpbmctbmF0aXZlIHB5dGhvbi1uZXRjbGllbnQtbmF0aXZlIHB5dGhvbi1uZXRzZXJ2ZXItbmF0aXZlIHB5dGhvbi1udW1iZXJzLW5hdGl2ZSBweXRob24tcGlja2xlLW5hdGl2ZSBweXRob24tcGtndXRpbC1uYXRpdmUgcHl0aG9uLXBsaXN0bGliLW5hdGl2ZSBweXRob24tcHByaW50LW5hdGl2ZSBweXRob24tcHJvZmlsZS1uYXRpdmUgcHl0aG9uLXB5ZG9jLW5hdGl2ZSBweXRob24tcmUtbmF0aXZlIHB5dGhvbi1yZWFkbGluZS1uYXRpdmUgcHl0aG9uLXJlc291cmNlLW5hdGl2ZSBweXRob24tcm9ib3RwYXJzZXItbmF0aXZlIHB5dGhvbi1zaGVsbC1uYXRpdmUgcHl0aG9uLXNtdHBkLW5hdGl2ZSBweXRob24tc3FsaXRlMy1uYXRpdmUgcHl0aG9uLXNxbGl0ZTMtdGVzdHMtbmF0aXZlIHB5dGhvbi1zdHJpbmdvbGQtbmF0aXZlIHB5dGhvbi1zdWJwcm9jZXNzLW5hdGl2ZSBweXRob24tc3lzbG9nLW5hdGl2ZSBweXRob24tdGVybWluYWwtbmF0aXZlIHB5dGhvbi10ZXN0cy1uYXRpdmUgcHl0aG9uLXRleHR1dGlscy1uYXRpdmUgcHl0aG9uLXRocmVhZGluZy1uYXRpdmUgcHl0aG9uLXRraW50ZXItbmF0aXZlIHB5dGhvbi11bml0dGVzdC1uYXRpdmUgcHl0aG9uLXVuaXhhZG1pbi1uYXRpdmUgcHl0aG9uLXhtbC1uYXRpdmUgcHl0aG9uLXhtbHJwYy1uYXRpdmUgcHl0aG9uLXpsaWItbmF0aXZlICIKLQorUlBST1ZJREVTICs9ICJweXRob24tbW9kdWxlcy1uYXRpdmUgcHl0aG9uLTJ0bzMtbmF0aXZlIHB5dGhvbi1hcmdwYXJzZS1uYXRpdmUgcHl0aG9uLWF1ZGlvLW5hdGl2ZSBweXRob24tYnNkZGItbmF0aXZlIHB5dGhvbi1jb2RlY3MtbmF0aXZlIHB5dGhvbi1jb21waWxlLW5hdGl2ZSBweXRob24tY29tcGlsZXItbmF0aXZlIHB5dGhvbi1jb21wcmVzc2lvbi1uYXRpdmUgcHl0aG9uLWNvbnRleHRsaWItbmF0aXZlIHB5dGhvbi1jb3JlLW5hdGl2ZSBweXRob24tY3J5cHQtbmF0aXZlIHB5dGhvbi1jdHlwZXMtbmF0aXZlIHB5dGhvbi1jdXJzZXMtbmF0aXZlIHB5dGhvbi1kYXRldGltZS1uYXRpdmUgcHl0aG9uLWRiLW5hdGl2ZSBweXRob24tZGVidWdnZXItbmF0aXZlIHB5dGhvbi1kZXYtbmF0aXZlIHB5dGhvbi1kaWZmbGliLW5hdGl2ZSBweXRob24tZGlzdHV0aWxzLW5hdGl2ZSBweXRob24tZGlzdHV0aWxzLXN0YXRpY2Rldi1uYXRpdmUgcHl0aG9uLWRvY3Rlc3QtbmF0aXZlIHB5dGhvbi1lbWFpbC1uYXRpdmUgcHl0aG9uLWZjbnRsLW5hdGl2ZSBweXRob24tZ2RibS1uYXRpdmUgcHl0aG9uLWhvdHNob3QtbmF0aXZlIHB5dGhvbi1odG1sLW5hdGl2ZSBweXRob24taWRsZS1uYXRpdmUgcHl0aG9uLWltYWdlLW5hdGl2ZSBweXRob24taW1wb3J0bGliLW5hdGl2ZSBweXRob24taW8tbmF0aXZlIHB5dGhvbi1qc29uLW5hdGl2ZSBweXRob24tbGFuZy1uYXRpdmUgcHl0aG9uLWxvZ2dpbmctbmF0aXZlIHB5dGhvbi1tYWlsYm94LW5hdGl2ZSBweXRob24tbWF0aC1uYXRpdmUgcHl0aG9uLW1pbWUtbmF0aXZlIHB5dGhvbi1tbWFwLW5hdGl2ZSBweXRob24tbXVsdGlwcm9jZXNzaW5nLW5hdGl2ZSBweXRob24tbmV0Y2xpZW50LW5hdGl2ZSBweXRob24tbmV0c2VydmVyLW5hdGl2ZSBweXRob24tbnVtYmVycy1uYXRpdmUgcHl0aG9uLXBpY2tsZS1uYXRpdmUgcHl0aG9uLXBrZ3V0aWwtbmF0aXZlIHB5dGhvbi1wbGlzdGxpYi1uYXRpdmUgcHl0aG9uLXBwcmludC1uYXRpdmUgcHl0aG9uLXByb2ZpbGUtbmF0aXZlIHB5dGhvbi1weWRvYy1uYXRpdmUgcHl0aG9uLXJlLW5hdGl2ZSBweXRob24tcmVhZGxpbmUtbmF0aXZlIHB5dGhvbi1yZXNvdXJjZS1uYXRpdmUgcHl0aG9uLXJvYm90cGFyc2VyLW5hdGl2ZSBweXRob24tc2hlbGwtbmF0aXZlIHB5dGhvbi1zbXRwZC1uYXRpdmUgcHl0aG9uLXNxbGl0ZTMtbmF0aXZlIHB5dGhvbi1zcWxpdGUzLXRlc3RzLW5hdGl2ZSBweXRob24tc3RyaW5nb2xkLW5hdGl2ZSBweXRob24tc3VicHJvY2Vzcy1uYXRpdmUgcHl0aG9uLXN5c2xvZy1uYXRpdmUgcHl0aG9uLXRlcm1pbmFsLW5hdGl2ZSBweXRob24tdGVzdHMtbmF0aXZlIHB5dGhvbi10ZXh0dXRpbHMtbmF0aXZlIHB5dGhvbi10aHJlYWRpbmctbmF0aXZlIHB5dGhvbi10a2ludGVyLW5hdGl2ZSBweXRob24tdW5pdHRlc3QtbmF0aXZlIHB5dGhvbi11bml4YWRtaW4tbmF0aXZlIHB5dGhvbi14bWwtbmF0aXZlIHB5dGhvbi14bWxycGMtbmF0aXZlIHB5dGhvbi16bGliLW5hdGl2ZSIKIAogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlLTMuNS1tYW5pZmVzdC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlLTMuNS1tYW5pZmVzdC5pbmMKaW5kZXggMTBiZTNlOS4uZjFmNzMyZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS0zLjUtbWFuaWZlc3QuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUtMy41LW1hbmlmZXN0LmluYwpAQCAtMSwxMCArMSwxMCBAQAogCiAjIFdBUk5JTkc6IFRoaXMgZmlsZSBpcyBBVVRPIEdFTkVSQVRFRDogTWFudWFsIGVkaXRzIHdpbGwgYmUgbG9zdCBuZXh0IHRpbWUgSSByZWdlbmVyYXRlIHRoZSBmaWxlLgotIyBHZW5lcmF0b3I6ICcuLi8uLi8uLi9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTMuNS5weSAtLW5hdGl2ZScgVmVyc2lvbiAyMDE0MDEzMSAoQykgMjAwMi0yMDEwIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1sYXVlckB2YW5pbGxlLW1lZGlhLmRlPgorIyBHZW5lcmF0b3I6ICcuLi9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTMuNS5weSAtLW5hdGl2ZScgVmVyc2lvbiAyMDE0MDEzMSAoQykgMjAwMi0yMDEwIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1sYXVlckB2YW5pbGxlLW1lZGlhLmRlPgogCiAgCiAKLVJQUk9WSURFUys9InB5dGhvbjMtMnRvMy1uYXRpdmUgcHl0aG9uMy1hcmdwYXJzZS1uYXRpdmUgcHl0aG9uMy1hc3luY2lvLW5hdGl2ZSBweXRob24zLWF1ZGlvLW5hdGl2ZSBweXRob24zLWNvZGVjcy1uYXRpdmUgcHl0aG9uMy1jb21waWxlLW5hdGl2ZSBweXRob24zLWNvbXByZXNzaW9uLW5hdGl2ZSBweXRob24zLWNvcmUtbmF0aXZlIHB5dGhvbjMtY3J5cHQtbmF0aXZlIHB5dGhvbjMtY3R5cGVzLW5hdGl2ZSBweXRob24zLWN1cnNlcy1uYXRpdmUgcHl0aG9uMy1kYXRldGltZS1uYXRpdmUgcHl0aG9uMy1kYi1uYXRpdmUgcHl0aG9uMy1kZWJ1Z2dlci1uYXRpdmUgcHl0aG9uMy1kZXYtbmF0aXZlIHB5dGhvbjMtZGlmZmxpYi1uYXRpdmUgcHl0aG9uMy1kaXN0dXRpbHMtbmF0aXZlIHB5dGhvbjMtZGlzdHV0aWxzLXN0YXRpY2Rldi1uYXRpdmUgcHl0aG9uMy1kb2N0ZXN0LW5hdGl2ZSBweXRob24zLWVtYWlsLW5hdGl2ZSBweXRob24zLWVudW0tbmF0aXZlIHB5dGhvbjMtZmNudGwtbmF0aXZlIHB5dGhvbjMtZ2RibS1uYXRpdmUgcHl0aG9uMy1odG1sLW5hdGl2ZSBweXRob24zLWlkbGUtbmF0aXZlIHB5dGhvbjMtaW1hZ2UtbmF0aXZlIHB5dGhvbjMtaW1wb3J0bGliLW5hdGl2ZSBweXRob24zLWlvLW5hdGl2ZSBweXRob24zLWpzb24tbmF0aXZlIHB5dGhvbjMtbGFuZy1uYXRpdmUgcHl0aG9uMy1sb2dnaW5nLW5hdGl2ZSBweXRob24zLW1haWxib3gtbmF0aXZlIHB5dGhvbjMtbWF0aC1uYXRpdmUgcHl0aG9uMy1taW1lLW5hdGl2ZSBweXRob24zLW1tYXAtbmF0aXZlIHB5dGhvbjMtbXVsdGlwcm9jZXNzaW5nLW5hdGl2ZSBweXRob24zLW5ldGNsaWVudC1uYXRpdmUgcHl0aG9uMy1uZXRzZXJ2ZXItbmF0aXZlIHB5dGhvbjMtbnVtYmVycy1uYXRpdmUgcHl0aG9uMy1waWNrbGUtbmF0aXZlIHB5dGhvbjMtcGtndXRpbC1uYXRpdmUgcHl0aG9uMy1wcHJpbnQtbmF0aXZlIHB5dGhvbjMtcHJvZmlsZS1uYXRpdmUgcHl0aG9uMy1weWRvYy1uYXRpdmUgcHl0aG9uMy1yZS1uYXRpdmUgcHl0aG9uMy1yZWFkbGluZS1uYXRpdmUgcHl0aG9uMy1yZXBybGliLW5hdGl2ZSBweXRob24zLXJlc291cmNlLW5hdGl2ZSBweXRob24zLXNlbGVjdG9ycy1uYXRpdmUgcHl0aG9uMy1zaGVsbC1uYXRpdmUgcHl0aG9uMy1zaWduYWwtbmF0aXZlIHB5dGhvbjMtc210cGQtbmF0aXZlIHB5dGhvbjMtc3FsaXRlMy1uYXRpdmUgcHl0aG9uMy1zcWxpdGUzLXRlc3RzLW5hdGl2ZSBweXRob24zLXN0cmluZ29sZC1uYXRpdmUgcHl0aG9uMy1zdWJwcm9jZXNzLW5hdGl2ZSBweXRob24zLXN5c2xvZy1uYXRpdmUgcHl0aG9uMy10ZXJtaW5hbC1uYXRpdmUgcHl0aG9uMy10ZXN0cy1uYXRpdmUgcHl0aG9uMy10ZXh0dXRpbHMtbmF0aXZlIHB5dGhvbjMtdGhyZWFkaW5nLW5hdGl2ZSBweXRob24zLXRraW50ZXItbmF0aXZlIHB5dGhvbjMtdHlwaW5nLW5hdGl2ZSBweXRob24zLXVuaXR0ZXN0LW5hdGl2ZSBweXRob24zLXVuaXhhZG1pbi1uYXRpdmUgcHl0aG9uMy14bWwtbmF0aXZlIHB5dGhvbjMteG1scnBjLW5hdGl2ZSAiCitSUFJPVklERVMgKz0gInB5dGhvbjMtbW9kdWxlcy1uYXRpdmUgcHl0aG9uMy0ydG8zLW5hdGl2ZSBweXRob24zLWFyZ3BhcnNlLW5hdGl2ZSBweXRob24zLWFzeW5jaW8tbmF0aXZlIHB5dGhvbjMtYXVkaW8tbmF0aXZlIHB5dGhvbjMtY29kZWNzLW5hdGl2ZSBweXRob24zLWNvbXBpbGUtbmF0aXZlIHB5dGhvbjMtY29tcHJlc3Npb24tbmF0aXZlIHB5dGhvbjMtY29yZS1uYXRpdmUgcHl0aG9uMy1jcnlwdC1uYXRpdmUgcHl0aG9uMy1jdHlwZXMtbmF0aXZlIHB5dGhvbjMtY3Vyc2VzLW5hdGl2ZSBweXRob24zLWRhdGV0aW1lLW5hdGl2ZSBweXRob24zLWRiLW5hdGl2ZSBweXRob24zLWRlYnVnZ2VyLW5hdGl2ZSBweXRob24zLWRldi1uYXRpdmUgcHl0aG9uMy1kaWZmbGliLW5hdGl2ZSBweXRob24zLWRpc3R1dGlscy1uYXRpdmUgcHl0aG9uMy1kaXN0dXRpbHMtc3RhdGljZGV2LW5hdGl2ZSBweXRob24zLWRvY3Rlc3QtbmF0aXZlIHB5dGhvbjMtZW1haWwtbmF0aXZlIHB5dGhvbjMtZW51bS1uYXRpdmUgcHl0aG9uMy1mY250bC1uYXRpdmUgcHl0aG9uMy1nZGJtLW5hdGl2ZSBweXRob24zLWh0bWwtbmF0aXZlIHB5dGhvbjMtaWRsZS1uYXRpdmUgcHl0aG9uMy1pbWFnZS1uYXRpdmUgcHl0aG9uMy1pbXBvcnRsaWItbmF0aXZlIHB5dGhvbjMtaW8tbmF0aXZlIHB5dGhvbjMtanNvbi1uYXRpdmUgcHl0aG9uMy1sYW5nLW5hdGl2ZSBweXRob24zLWxvZ2dpbmctbmF0aXZlIHB5dGhvbjMtbWFpbGJveC1uYXRpdmUgcHl0aG9uMy1tYXRoLW5hdGl2ZSBweXRob24zLW1pbWUtbmF0aXZlIHB5dGhvbjMtbW1hcC1uYXRpdmUgcHl0aG9uMy1tdWx0aXByb2Nlc3NpbmctbmF0aXZlIHB5dGhvbjMtbmV0Y2xpZW50LW5hdGl2ZSBweXRob24zLW5ldHNlcnZlci1uYXRpdmUgcHl0aG9uMy1udW1iZXJzLW5hdGl2ZSBweXRob24zLXBpY2tsZS1uYXRpdmUgcHl0aG9uMy1wa2d1dGlsLW5hdGl2ZSBweXRob24zLXBwcmludC1uYXRpdmUgcHl0aG9uMy1wcm9maWxlLW5hdGl2ZSBweXRob24zLXB5ZG9jLW5hdGl2ZSBweXRob24zLXJlLW5hdGl2ZSBweXRob24zLXJlYWRsaW5lLW5hdGl2ZSBweXRob24zLXJlcHJsaWItbmF0aXZlIHB5dGhvbjMtcmVzb3VyY2UtbmF0aXZlIHB5dGhvbjMtc2VsZWN0b3JzLW5hdGl2ZSBweXRob24zLXNoZWxsLW5hdGl2ZSBweXRob24zLXNpZ25hbC1uYXRpdmUgcHl0aG9uMy1zbXRwZC1uYXRpdmUgcHl0aG9uMy1zcWxpdGUzLW5hdGl2ZSBweXRob24zLXNxbGl0ZTMtdGVzdHMtbmF0aXZlIHB5dGhvbjMtc3RyaW5nb2xkLW5hdGl2ZSBweXRob24zLXN1YnByb2Nlc3MtbmF0aXZlIHB5dGhvbjMtc3lzbG9nLW5hdGl2ZSBweXRob24zLXRlcm1pbmFsLW5hdGl2ZSBweXRob24zLXRlc3RzLW5hdGl2ZSBweXRob24zLXRleHR1dGlscy1uYXRpdmUgcHl0aG9uMy10aHJlYWRpbmctbmF0aXZlIHB5dGhvbjMtdGtpbnRlci1uYXRpdmUgcHl0aG9uMy10eXBpbmctbmF0aXZlIHB5dGhvbjMtdW5pdHRlc3QtbmF0aXZlIHB5dGhvbjMtdW5peGFkbWluLW5hdGl2ZSBweXRob24zLXhtbC1uYXRpdmUgcHl0aG9uMy14bWxycGMtbmF0aXZlIgogCiAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5vc2VfMS4zLjcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbm9zZV8xLjMuNy5iYgppbmRleCAzNzU3ZjNhLi45YjM1MDljIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbm9zZV8xLjMuNy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbm9zZV8xLjMuNy5iYgpAQCAtMSw0ICsxLDUgQEAKIFNVTU1BUlkgPSAiRXh0ZW5kcyBQeXRob24gdW5pdHRlc3QgdG8gbWFrZSB0ZXN0aW5nIGVhc2llciIKK0hPTUVQQUdFID0gImh0dHA6Ly9yZWFkdGhlZG9jcy5vcmcvZG9jcy9ub3NlLyIKIERFU0NSSVBUSU9OID0gIm5vc2UgZXh0ZW5kcyB0aGUgdGVzdCBsb2FkaW5nIGFuZCBydW5uaW5nIGZlYXR1cmVzIG9mIHVuaXR0ZXN0LCBcCiBtYWtpbmcgaXQgZWFzaWVyIHRvIHdyaXRlLCBmaW5kIGFuZCBydW4gdGVzdHMuIgogU0VDVElPTiA9ICJkZXZlbC9weXRob24iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcGV4cGVjdF80LjIuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wZXhwZWN0XzQuMi4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzIxNzk3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wZXhwZWN0XzQuMi4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotU1VNTUFSWSA9ICJBIFB1cmUgUHl0aG9uIEV4cGVjdCBsaWtlIE1vZHVsZSBmb3IgUHl0aG9uIgotSE9NRVBBR0UgPSAiaHR0cDovL3BleHBlY3QucmVhZHRoZWRvY3Mub3JnLyIKLVNFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgotTElDRU5TRSA9ICJJU0MiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0xYzdhNzI1MjUxODgwYWY4YzZhMTQ4MTgxNjY1Mzg1YiIKLQotU1JDTkFNRSA9ICJwZXhwZWN0IgotCi1TUkNfVVJJID0gImh0dHBzOi8vZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9zb3VyY2UvcC8ke1NSQ05BTUV9LyR7U1JDTkFNRX0tJHtQVn0udGFyLmd6IgotU1JDX1VSSVttZDVzdW1dID0gIjM2OTQ0MTAwMDFhOTlkZmY4M2YwYjUwMGExY2ExYzk1IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNkMTMyNDY1YTc1YjU3YWE4MTgzNDFjNjUyMTM5MmEwNmNjNjYwZmViMzk4OGQ3ZjEwNzRmMzliZDIzYzlhOTIiCi0KLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3BleHBlY3QiCi0KLVMgPSAiJHtXT1JLRElSfS9wZXhwZWN0LSR7UFZ9IgotCi1pbmhlcml0IHNldHVwdG9vbHMKLQotUkRFUEVORFNfJHtQTn0gPSAiXAotICAgIHB5dGhvbi1jb3JlIFwKLSAgICBweXRob24taW8gXAotICAgIHB5dGhvbi10ZXJtaW5hbCBcCi0gICAgcHl0aG9uLXJlc291cmNlIFwKLSAgICBweXRob24tZmNudGwgXAotICAgIHB5dGhvbi1wdHlwcm9jZXNzIFwKLSIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB0eXByb2Nlc3NfMC41LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHR5cHJvY2Vzc18wLjUuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVkMjRhZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHR5cHJvY2Vzc18wLjUuMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLVNVTU1BUlkgPSAiUnVuIGEgc3VicHJvY2VzcyBpbiBhIHBzZXVkbyB0ZXJtaW5hbCIKLUhPTUVQQUdFID0gImh0dHA6Ly9wdHlwcm9jZXNzLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC8iCi1TRUNUSU9OID0gImRldmVsL3B5dGhvbiIKLUxJQ0VOU0UgPSAiSVNDIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9Y2ZkY2Q1MWZhN2Q1ODA4ZGE0ZTc0MzQ2ZWUzOTQ0OTAiCi0KLVNSQ05BTUUgPSAicHR5cHJvY2VzcyIKLQotU1JDX1VSSSA9ICJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvc291cmNlL3AvJHtTUkNOQU1FfS8ke1NSQ05BTUV9LSR7UFZ9LnRhci5neiIKLVNSQ19VUklbbWQ1c3VtXSA9ICI5NGU1MzcxMjI5MTRjYzllYzljMWVhZGNkMzZlNzNhMSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIwNTMwY2U2M2E5Mjk1YmZhZTdiZDA2ZWRjMDJiNmFhOTM1NjE5ZjQ4NmYwZjFkYzA5NzJmNTE2MjY1ZWU4MWE2IgotCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9wdHlwcm9jZXNzIgotCi1TID0gIiR7V09SS0RJUn0vJHtTUkNOQU1FfS0ke1BWfSIKLQotaW5oZXJpdCBzZXR1cHRvb2xzCi0KLVJERVBFTkRTXyR7UE59ID0gIlwKLSAgICBweXRob24tY29yZSBcCi0iCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWN1cmwuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Y3VybC5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyNjMxOGIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Y3VybC5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1TVU1NQVJZID0gIlB5dGhvbiBiaW5kaW5ncyBmb3IgbGliY3VybCIKLUhPTUVQQUdFID0gImh0dHA6Ly9weWN1cmwuc291cmNlZm9yZ2UubmV0LyIKLVNFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgotTElDRU5TRSA9ICJMR1BMdjIuMSsgfCBNSVQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUUucnN0O2JlZ2lubGluZT0xNjY7ZW5kbGluZT0xODI7bWQ1PWE4NGExY2FhNjViODlkNDU4NGI2OTNkMzY4MDA2MmZiIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkctTEdQTDttZDU9MzU3OWE5ZmQwMjIxZDQ5YTIzN2FhYTMzNDkyZjk4OGMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy1NSVQ7bWQ1PWI3ZTQzNGFlYjIyOGVkNzMxYzAwYmNmMTc3ZTc5YjE5IgotCi1ERVBFTkRTID0gImN1cmwgJHtQWVRIT05fUE59IgotUkRFUEVORFNfJHtQTn0gPSAiJHtQWVRIT05fUE59LWNvcmUgY3VybCIKLVNSQ05BTUUgPSAicHljdXJsIgotCi1TUkNfVVJJID0gIlwKLSAgaHR0cDovLyR7U1JDTkFNRX0uc291cmNlZm9yZ2UubmV0L2Rvd25sb2FkLyR7U1JDTkFNRX0tJHtQVn0udGFyLmd6O25hbWU9YXJjaGl2ZSBcCi0gIGZpbGU6Ly9uby1zdGF0aWMtbGluay5wYXRjaCBcCi0iCi0KLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImJjYTdiZjQ3MzIwMDgyNTg4ZGI1NDRjZWQyYmE4NzE3IgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiOGExZTBlYjU1NTczMzg4Mjc1YTFkNmMyNTM0Y2E0Y2ZjYTVkN2ZhNzcyYjk5YjUwNWMwOGZhMTQ5YjI3YWVkMCIKLVMgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKLQotIyBFbnN1cmUgdGhlIGRvY3N0cmluZ3MgYXJlIGdlbmVyYXRlZCBhcyBtYWtlIGNsZWFuIHdpbGwgcmVtb3ZlIHRoZW0KLWRvX2NvbXBpbGVfcHJlcGVuZCgpIHsKLQkke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgZG9jc3RyaW5ncwotfQotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQlybSAtcmYgJHtEfSR7ZGF0YWRpcn0vc2hhcmUKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWN1cmwvbm8tc3RhdGljLWxpbmsucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHljdXJsL25vLXN0YXRpYy1saW5rLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTI3NzljLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWN1cmwvbm8tc3RhdGljLWxpbmsucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgotU2lnbmVkLW9mZi1ieTogTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+Ci0tLS0KLWRpZmYgLU5hdXIgcHljdXJsLTcuMTkuNS4yLW9yaWcvc2V0dXAucHkgcHljdXJsLTcuMTkuNS4yL3NldHVwLnB5Ci0tLS0gcHljdXJsLTcuMTkuNS4yLW9yaWcvc2V0dXAucHkJMjAxNS0xMS0wMiAxNTo0MjoyNC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBweWN1cmwtNy4xOS41LjIvc2V0dXAucHkJMjAxNS0xMS0wMiAxNzo1OTozNi4xMjE1MjcyNzMgKzAyMDAKLUBAIC0xNTQsNyArMTU0LDcgQEAKLSAgICAgICAgIG9wdGJ1ZiA9ICcnCi0gICAgICAgICBzc2xoaW50YnVmID0gJycKLSAgICAgICAgIGVycnRleHQgPSAnJwotLSAgICAgICAgZm9yIG9wdGlvbiBpbiBbIi0tbGlicyIsICItLXN0YXRpYy1saWJzIl06Ci0rICAgICAgICBmb3Igb3B0aW9uIGluIFsiLS1saWJzIl06Ci0gICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oKENVUkxfQ09ORklHLCBvcHRpb24pLAotICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQotICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHljdXJsXzcuMjEuNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWN1cmxfNy4yMS41LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjcwY2VhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWN1cmxfNy4yMS41LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1yZXF1aXJlIHB5dGhvbi1weWN1cmwuaW5jCi0KLWluaGVyaXQgZGlzdHV0aWxzCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2V0dXB0b29scy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2V0dXB0b29scy5pbmMKaW5kZXggNDBmNDdkNC4uY2E1MjFhOSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNldHVwdG9vbHMuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zZXR1cHRvb2xzLmluYwpAQCAtMywxNCArMywxNCBAQAogU0VDVElPTiA9ICJkZXZlbC9weXRob24iCiBMSUNFTlNFID0gIk1JVCIKIAotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc2V0dXAucHk7YmVnaW5saW5lPTE0NjtlbmRsaW5lPTE0NjttZDU9M2U4ZGYwMjRkNmMxNDQyZDE4ZTg0YWNmOGZiYmM0NzUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO2JlZ2lubGluZT0xO2VuZGxpbmU9MTk7bWQ1PTlhMzM4OTdmMWJjYTExNjBkN2FhZDM4MzUxNTJlMTU4IgogCiBTUkNOQU1FID0gInNldHVwdG9vbHMiCiAKLVNSQ19VUkkgPSAiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL3NvdXJjZS9zLyR7U1JDTkFNRX0vJHtTUkNOQU1FfS0ke1BWfS50YXIuZ3oiCitTUkNfVVJJID0gImh0dHBzOi8vZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9zb3VyY2Uvcy8ke1NSQ05BTUV9LyR7U1JDTkFNRX0tJHtQVn0uemlwIgogCi1TUkNfVVJJW21kNXN1bV0gPSAiOGI2Nzg2OGMzNDMwZTk3ODgzM2ViZDBkMWI3NjY2OTQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiODMwM2ZiMjQzMDYzODVmMDliZjhiMGU1YTM4NWMxNTQ4ZTQyZThlZmMwODU1OGQ2NDA0OWJjMGQ1NWVhMDEyZCIKK1NSQ19VUklbbWQ1c3VtXSA9ICJiOWU2YzA0OTYxN2JhYzBmOWU5MDhhNDFhYjRhMjlhYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiMGZlNWQ0MzJkOTIyZGY1OTVlOTE4NTc3YzUxNDU4ZDYzZjI0NTExNWQxNDFiMzA5YWMzMmVjZmNhMzI5ZGY1IgogCiBVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9zZXR1cHRvb2xzIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2V0dXB0b29sc18zMi4xLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2V0dXB0b29sc18zMi4xLjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNjQ3NGMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNldHVwdG9vbHNfMzIuMS4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotcmVxdWlyZSBweXRob24tc2V0dXB0b29scy5pbmMKLQotUFJPVklERVMgPSAicHl0aG9uLWRpc3RyaWJ1dGUiCi0KLURFUEVORFMgKz0gInB5dGhvbiIKLURFUEVORFNfY2xhc3MtbmF0aXZlICs9ICJweXRob24tbmF0aXZlIgotCi1pbmhlcml0IGRpc3R1dGlscwotCi1ESVNUVVRJTFNfSU5TVEFMTF9BUkdTICs9ICItLWluc3RhbGwtbGliPSR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSIKLQotUkRFUEVORFNfJHtQTn0gPSAiXAotICBweXRob24tc3RyaW5nb2xkIFwKLSAgcHl0aG9uLWVtYWlsIFwKLSAgcHl0aG9uLXNoZWxsIFwKLSAgcHl0aG9uLWRpc3R1dGlscyBcCi0gIHB5dGhvbi1jb21wcmVzc2lvbiBcCi0gIHB5dGhvbi1wa2d1dGlsIFwKLSAgcHl0aG9uLXBsaXN0bGliIFwKLSAgcHl0aG9uLW51bWJlcnMgXAotICBweXRob24taHRtbCBcCi0gIHB5dGhvbi1uZXRzZXJ2ZXIgXAotICBweXRob24tY3R5cGVzIFwKLSAgcHl0aG9uLXN1YnByb2Nlc3MgXAotICBweXRob24tdW5pdHRlc3QgXAotICBweXRob24tY29tcGlsZSBcCi0iCi0KLVJERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICJcCi0gIHB5dGhvbi1kaXN0dXRpbHMgXAotICBweXRob24tY29tcHJlc3Npb24gXAotIgotCi1SUkVQTEFDRVNfJHtQTn0gPSAicHl0aG9uLWRpc3RyaWJ1dGUiCi1SUFJPVklERVNfJHtQTn0gPSAicHl0aG9uLWRpc3RyaWJ1dGUiCi1SQ09ORkxJQ1RTXyR7UE59ID0gInB5dGhvbi1kaXN0cmlidXRlIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2V0dXB0b29sc18zNi4yLjcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2V0dXB0b29sc18zNi4yLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVmYWNjMQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zZXR1cHRvb2xzXzM2LjIuNy5iYgpAQCAtMCwwICsxLDM2IEBACityZXF1aXJlIHB5dGhvbi1zZXR1cHRvb2xzLmluYworCitQUk9WSURFUyA9ICJweXRob24tZGlzdHJpYnV0ZSIKKworREVQRU5EUyArPSAicHl0aG9uIgorREVQRU5EU19jbGFzcy1uYXRpdmUgKz0gInB5dGhvbi1uYXRpdmUiCisKK2luaGVyaXQgc2V0dXB0b29scworCitSREVQRU5EU18ke1BOfSA9ICJcCisgIHB5dGhvbi1zdHJpbmdvbGQgXAorICBweXRob24tZW1haWwgXAorICBweXRob24tc2hlbGwgXAorICBweXRob24tZGlzdHV0aWxzIFwKKyAgcHl0aG9uLWNvbXByZXNzaW9uIFwKKyAgcHl0aG9uLXBrZ3V0aWwgXAorICBweXRob24tcGxpc3RsaWIgXAorICBweXRob24tbnVtYmVycyBcCisgIHB5dGhvbi1odG1sIFwKKyAgcHl0aG9uLW5ldHNlcnZlciBcCisgIHB5dGhvbi1jdHlwZXMgXAorICBweXRob24tc3VicHJvY2VzcyBcCisgIHB5dGhvbi11bml0dGVzdCBcCisgIHB5dGhvbi1jb21waWxlIFwKKyIKKworUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIlwKKyAgcHl0aG9uLWRpc3R1dGlscyBcCisgIHB5dGhvbi1jb21wcmVzc2lvbiBcCisiCisKK1JSRVBMQUNFU18ke1BOfSA9ICJweXRob24tZGlzdHJpYnV0ZSIKK1JQUk9WSURFU18ke1BOfSA9ICJweXRob24tZGlzdHJpYnV0ZSIKK1JDT05GTElDVFNfJHtQTn0gPSAicHl0aG9uLWRpc3RyaWJ1dGUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zaXhfMS4xMC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNpeF8xLjEwLjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNTA0ODUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNpeF8xLjEwLjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWluaGVyaXQgc2V0dXB0b29scwotcmVxdWlyZSBweXRob24tc2l4LmluYwotCi1SREVQRU5EU18ke1BOfSArPSAicHl0aG9uLWlvIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtbWFwXzAuOS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtbWFwXzAuOS4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTE4ZGQ4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbW1hcF8wLjkuMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotcmVxdWlyZSBweXRob24tc21tYXAuaW5jCi0KLWluaGVyaXQgc2V0dXB0b29scwotCi1SREVQRU5EU18ke1BOfSArPSAicHl0aG9uLWNvZGVjcyBweXRob24tbW1hcCBweXRob24tbGFuZyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9tdWx0aWxpYi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9tdWx0aWxpYi5wYXRjaAppbmRleCA1MGNjNTkxLi5mNTU2OGQyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vbXVsdGlsaWIucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL211bHRpbGliLnBhdGNoCkBAIC0xLDYgKzEsNiBAQAogUmViYXNlZCBmb3IgcHl0aG9uLTIuNy45CiBTaWduZWQtb2ZmLWJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiBJbmRleDogUHl0aG9uLTIuNy4xMy9jb25maWd1cmUuYWMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0tLSBQeXRob24tMi43LjEzLm9yaWcvY29uZmlndXJlLmFjCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vcGFzcy1taXNzaW5nLWxpYnJhcmllcy10by1FeHRlbnNpb24tZm9yLW11bC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9wYXNzLW1pc3NpbmctbGlicmFyaWVzLXRvLUV4dGVuc2lvbi1mb3ItbXVsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZmNhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vcGFzcy1taXNzaW5nLWxpYnJhcmllcy10by1FeHRlbnNpb24tZm9yLW11bC5wYXRjaApAQCAtMCwwICsxLDgyIEBACitGcm9tIDcxNDQ3ZjA0OTc5YjI2N2Y4ODY2NTczYjY3YTQzNDBiMjcxOWQ3OTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDQgQXVnIDIwMTcgMTQ6MTA6NDMgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gc2V0dXAucHk6IHBhc3MgbWlzc2luZyBsaWJyYXJpZXMgdG8gRXh0ZW5zaW9uIGZvciBtdWx0aXByb2Nlc3NpbmcgbW9kdWxlCisKK0luIHRoZSBmb2xsb3dpbmcgY29tbWl0OgorLi4uCitjb21taXQgZTcxMWNhZmFiMTNlZmM5YzFmZTZjNWNkNzU4MjY0MDE0NDVlYjU4NQorQXV0aG9yOiBCZW5qYW1pbiBQZXRlcnNvbiA8YmVuamFtaW5AcHl0aG9uLm9yZz4KK0RhdGU6ICAgV2VkIEp1biAxMSAxNjo0NDowNCAyMDA4ICswMDAwCisKKyAgICBNZXJnZWQgcmV2aXNpb25zIDY0MTA0LDY0MTE3IHZpYSBzdm5tZXJnZSBmcm9tCisgICAgc3ZuK3NzaDovL3B5dGhvbmRldkBzdm4ucHl0aG9uLm9yZy9weXRob24vdHJ1bmsKKy4uLgorKHNlZSBkaWZmIGluIHNldHVwLnB5KQorSXQgYXNzaWduZWQgbGlicmFyaWVzIGZvciBtdWx0aXByb2Nlc3NpbmcgbW9kdWxlIGFjY29yZGluZwordGhlIGhvc3RfcGxhdGZvcm0sIGJ1dCBub3QgcGFzcyBpdCB0byBFeHRlbnNpb24uCisKK0luIGdsaWJjLCB0aGUgZm9sbG93aW5nIGNvbW1pdCBjYXVzZWQgdHdvIGRlZmluaXRpb24gb2YKK3NlbV9nZXR2YWx1ZSBhcmUgZGlmZmVyZW50LgoraHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9naXQvP3A9Z2xpYmMuZ2l0O2E9Y29tbWl0O2g9MDQyZTE1MjFjNzk0YTk0NWVkYzQzYjViZmE3ZTY5YWQ3MDQyMDUyNAorKHNlZSBkaWZmIGluIG5wdGwvc2VtX2dldHZhbHVlLmMgZm9yIGRldGFpbCkKK2BfX25ld19zZW1fZ2V0dmFsdWUnIGlzIHRoZSBsYXRlc3Qgc2VtX2dldHZhbHVlQEBHTElCQ18yLjEKK2FuZCBgX19vbGRfc2VtX2dldHZhbHVlJyBpcyB0byBjb21wYXQgdGhlIG9sZCB2ZXJzaW9uCitzZW1fZ2V0dmFsdWVAR0xJQkNfMi4wLgorCitUbyBidWlsZCBweXRob24gZm9yIGVtYmVkZGVkIExpbnV4IHN5c3RlbXM6CitodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8yLjMuMS95b2N0by1wcm9qZWN0LXFzL3lvY3RvLXByb2plY3QtcXMuaHRtbAorSWYgbm90IGV4cGxpY2l0bHkgbGluayB0byBsaWJyYXJ5IHB0aHJlYWQgKC1scHRocmVhZCksIGl0IHdpbGwKK2xvYWQgZ2xpYmMncyBzZW1fZ2V0dmFsdWUgcmFuZG9tbHkgYXQgcnVudGltZS4KKworU3VjaCBhcyBidWlsZCBweXRob24gb24gbGludXggeDg2XzY0IGhvc3QgYW5kIHJ1biB0aGUgcHl0aG9uCitvbiBsaW51eCB4ODZfMzIgdGFyZ2V0LiBJZiBub3QgbGluayBsaWJyYXJ5IHB0aHJlYWQsIGl0IGNhdXNlZAorbXVsdGlwcm9jZXNzaW5nIGJvdW5kZWQgc2VtYXBob3JlIGNvdWxkIG5vdCB3b3JrIGNvcnJlY3RseS4KKy4uLgorPj4+IGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKKz4+PiBwb29sX3NlbWEgPSBtdWx0aXByb2Nlc3NpbmcuQm91bmRlZFNlbWFwaG9yZSh2YWx1ZT0xKQorPj4+IHBvb2xfc2VtYS5hY3F1aXJlKCkKK1RydWUKKz4+PiBwb29sX3NlbWEucmVsZWFzZSgpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CitWYWx1ZUVycm9yOiBzZW1hcGhvcmUgb3IgbG9jayByZWxlYXNlZCB0b28gbWFueSB0aW1lcworLi4uCisKK0FuZCB0aGUgc2VtYXBob3JlIGlzc3VlIGFsc28gY2F1c2VkIG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpLnB1dCgpIGh1bmcuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vcHl0aG9uL2NweXRob24vcHVsbC8yOTk5XQorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBzZXR1cC5weSB8IDcgKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zZXR1cC5weSBiL3NldHVwLnB5CitpbmRleCA1NDA1NGMyLi45NjQ2YmZjIDEwMDY0NAorLS0tIGEvc2V0dXAucHkKKysrKyBiL3NldHVwLnB5CitAQCAtMTU4Niw4ICsxNTg2LDEwIEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgIGVsaWYgaG9zdF9wbGF0Zm9ybS5zdGFydHN3aXRoKCduZXRic2QnKToKKyAgICAgICAgICAgICBtYWNyb3MgPSBkaWN0KCkKKyAgICAgICAgICAgICBsaWJyYXJpZXMgPSBbXQorLQorLSAgICAgICAgZWxzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTGludXggYW5kIG90aGVyIHVuaWNlcworKyAgICAgICAgZWxpZiBob3N0X3BsYXRmb3JtLnN0YXJ0c3dpdGgoKCdsaW51eCcpKToKKysgICAgICAgICAgICBtYWNyb3MgPSBkaWN0KCkKKysgICAgICAgICAgICBsaWJyYXJpZXMgPSBbJ3B0aHJlYWQnXQorKyAgICAgICAgZWxzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgT3RoZXIgdW5pY2VzCisgICAgICAgICAgICAgbWFjcm9zID0gZGljdCgpCisgICAgICAgICAgICAgbGlicmFyaWVzID0gWydydCddCisgCitAQCAtMTYxMCw2ICsxNjEyLDcgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgaWYgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdXSVRIX1RIUkVBRCcpOgorICAgICAgICAgICAgIGV4dHMuYXBwZW5kICggRXh0ZW5zaW9uKCdfbXVsdGlwcm9jZXNzaW5nJywgbXVsdGlwcm9jZXNzaW5nX3NyY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lX21hY3Jvcz1tYWNyb3MuaXRlbXMoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9bGlicmFyaWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycz1bIk1vZHVsZXMvX211bHRpcHJvY2Vzc2luZyJdKSkKKyAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ19tdWx0aXByb2Nlc3NpbmcnKQorLS0gCisyLjcuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc3VwcG9ydF9TT1VSQ0VfREFURV9FUE9DSF9pbl9weV9jb21waWxlXzIuNy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9zdXBwb3J0X1NPVVJDRV9EQVRFX0VQT0NIX2luX3B5X2NvbXBpbGVfMi43LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNjUxNzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc3VwcG9ydF9TT1VSQ0VfREFURV9FUE9DSF9pbl9weV9jb21waWxlXzIuNy5wYXRjaApAQCAtMCwwICsxLDM0IEBACitUaGUgY29tcGlsZWQgLnB5YyBmaWxlcyBjb250YWluIHRpbWUgc3RhbXAgY29ycmVzcG9uZGluZyB0byB0aGUgY29tcGlsZSB0aW1lLgorVGhpcyBwcmV2ZW50cyBiaW5hcnkgcmVwcm9kdWNpYmlsaXR5LiBUaGlzIHBhdGNoIGFsbG93cyB0byBhY2hpZXZlIGJpbmFyeQorcmVwcm9kdWNpYmlsaXR5IGJ5IG92ZXJyaWRpbmcgdGhlIGJ1aWxkIHRpbWUgc3RhbXAgYnkgdGhlIHZhbHVlIAorZXhwb3J0ZWQgdmlhIFNPVVJDRV9EQVRFX0VQT0NILiAKKworUGF0Y2ggYnkgQmVybmhhcmQgTS4gV2llZGVtYW5uCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogSnVybyBCeXN0cmlja3kgPGp1cm8uYnlzdHJpY2t5QGludGVsLmNvbT4KKworRnJpIEZlYiAyNCAxNzowODoyNSBVVEMgMjAxNyAtIGJ3aWVkZW1hbm5Ac3VzZS5jb20KKworLSBBZGQgcmVwcm9kdWNpYmxlLnBhdGNoIHRvIGFsbG93IHJlcHJvZHVjaWJsZSBidWlsZHMgb2YgdmFyaW91cworICBweXRob24gcGFja2FnZXMgbGlrZSBweXRob24tYW1xcAorICBVcHN0cmVhbTogaHR0cHM6Ly9naXRodWIuY29tL3B5dGhvbi9jcHl0aG9uL3B1bGwvMjk2CisKKworQEAgLTAsMCArMSwxNSBAQAorSW5kZXg6IFB5dGhvbi0yLjcuMTMvTGliL3B5X2NvbXBpbGUucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43LjEzLm9yaWcvTGliL3B5X2NvbXBpbGUucHkKKysrKyBQeXRob24tMi43LjEzL0xpYi9weV9jb21waWxlLnB5CitAQCAtMTA4LDYgKzEwOCwxMCBAQCBkZWYgY29tcGlsZShmaWxlLCBjZmlsZT1Ob25lLCBkZmlsZT1Ob25lCisgICAgICAgICAgICAgdGltZXN0YW1wID0gbG9uZyhvcy5mc3RhdChmLmZpbGVubygpKS5zdF9tdGltZSkKKyAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICB0aW1lc3RhbXAgPSBsb25nKG9zLnN0YXQoZmlsZSkuc3RfbXRpbWUpCisrICAgICAgICBzZGUgPSBvcy5lbnZpcm9uLmdldCgnU09VUkNFX0RBVEVfRVBPQ0gnKQorKyAgICAgICAgaWYgc2RlIGFuZCB0aW1lc3RhbXAgPiBpbnQoc2RlKToKKysgICAgICAgICAgICB0aW1lc3RhbXAgPSBpbnQoc2RlKQorKyAgICAgICAgICAgIG9zLnV0aW1lKGZpbGUsICh0aW1lc3RhbXAsIHRpbWVzdGFtcCkpCisgICAgICAgICBjb2Rlc3RyaW5nID0gZi5yZWFkKCkKKyAgICAgdHJ5OgorICAgICAgICAgY29kZW9iamVjdCA9IF9fYnVpbHRpbl9fLmNvbXBpbGUoY29kZXN0cmluZywgZGZpbGUgb3IgZmlsZSwnZXhlYycpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vdXNlX3N5c3Jvb3RfbmN1cnNlc19pbnN0ZWFkX29mX2hvc3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vdXNlX3N5c3Jvb3RfbmN1cnNlc19pbnN0ZWFkX29mX2hvc3QucGF0Y2gKaW5kZXggMmM2NTc4Ni4uZmI0YTNiYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3VzZV9zeXNyb290X25jdXJzZXNfaW5zdGVhZF9vZl9ob3N0LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi91c2Vfc3lzcm9vdF9uY3Vyc2VzX2luc3RlYWRfb2ZfaG9zdC5wYXRjaApAQCAtMiw2ICsyLDcgQEAKIGlmIGl0IGlzIG5vdCBmb3VuZCBjYXVzZXMgYW4gZXJyb3Igb24gY29uZmlndXJlLAogd2Ugc2hvdWxkIHVzZSBuY3Vyc2VzdyBmcm9tIHN5c3Jvb3QgaW5zdGVhZAogCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIAogU2lnbmVkLW9mZi1ieTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtZG9jdXRpbHNfMC4xMy4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1kb2N1dGlsc18wLjEzLjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzNjM4OGMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1kb2N1dGlsc18wLjEzLjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1TVU1NQVJZID0gIlRleHQgcHJvY2Vzc2luZyBzeXN0ZW0gZm9yIGRvY3VtZW50YXRpb24iCi1IT01FUEFHRSA9ICJodHRwOi8vZG9jdXRpbHMuc291cmNlZm9yZ2UubmV0IgotU0VDVElPTiA9ICJkZXZlbC9weXRob24iCi1MSUNFTlNFID0gIlBTRiAmIEJTRC0yLUNsYXVzZSAmIEdQTHYzIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy50eHQ7bWQ1PTdhNDY0NjkwN2FiOTA4M2M4MjYyODBiMTllMTAzMTA2IgotCi1ERVBFTkRTID0gInB5dGhvbjMiCi0KLVNSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2RvY3V0aWxzL2RvY3V0aWxzLSR7UFZ9LnRhci5neiIKLVNSQ19VUklbbWQ1c3VtXSA9ICJlYTRhODkzYzYzM2M3ODhiZTliODA3OGI2YjMwNWQ1MyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI3MThjMGY1ZmI2NzdiZTBmMzRiNzgxZTA0MjQxYzQwNjdjYmQ5MzI3YjY2YmRkOGU3NjMyMDExMzBmNTE3NWJlIgotCi1TID0gIiR7V09SS0RJUn0vZG9jdXRpbHMtJHtQVn0iCi0KLWluaGVyaXQgZGlzdHV0aWxzMwotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1kb2N1dGlsc18wLjE0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1kb2N1dGlsc18wLjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYTQ0OWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWRvY3V0aWxzXzAuMTQuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJUZXh0IHByb2Nlc3Npbmcgc3lzdGVtIGZvciBkb2N1bWVudGF0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL2RvY3V0aWxzLnNvdXJjZWZvcmdlLm5ldCIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJQU0YgJiBCU0QtMi1DbGF1c2UgJiBHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcudHh0O21kNT0zNWEyM2Q0MmI2MTU0NzA1ODM1NjMxMzI4NzJjOTdkNiIKKworREVQRU5EUyA9ICJweXRob24zIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9kb2N1dGlscy9kb2N1dGlscy0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiYzUzNzY4ZDYzZGIzODczYjdkNDUyODMzNTUzNDY5ZGUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTFlNjRlZjJlYmZiMjljYWUxZmFhMTMzYjM3MTAxNDM0OTZlY2EyMWM1MzBmM2Y3MTQyNGQ3NzY4Nzc2NDI3NCIKKworUyA9ICIke1dPUktESVJ9L2RvY3V0aWxzLSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlsczMKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtZ2l0XzIuMS4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1naXRfMi4xLjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhMmQ0NTIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1naXRfMi4xLjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLXJlcXVpcmUgcHl0aG9uLWdpdC5pbmMKLQotREVQRU5EUyA9ICJweXRob24zLWdpdGRiIgotCi1pbmhlcml0IHNldHVwdG9vbHMzCi0KLVJERVBFTkRTXyR7UE59ICs9ICJweXRob24zLWdpdGRiIHB5dGhvbjMtbGFuZyBweXRob24zLWlvIHB5dGhvbjMtc2hlbGwgcHl0aG9uMy1tYXRoIHB5dGhvbjMtcmUgcHl0aG9uMy1zdWJwcm9jZXNzIHB5dGhvbjMtc3RyaW5nb2xkIHB5dGhvbjMtdW5peGFkbWluIHB5dGhvbjMtZW51bSBweXRob24zLWxvZ2dpbmcgcHl0aG9uMy1kYXRldGltZSBweXRob24zLW5ldGNsaWVudCBweXRob24zLXVuaXR0ZXN0IHB5dGhvbjMtYXJncGFyc2UiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWdpdF8yLjEuNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtZ2l0XzIuMS41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYzJhMGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWdpdF8yLjEuNS5iYgpAQCAtMCwwICsxLDcgQEAKK3JlcXVpcmUgcHl0aG9uLWdpdC5pbmMKKworREVQRU5EUyA9ICJweXRob24zLWdpdGRiIgorCitpbmhlcml0IHNldHVwdG9vbHMzCisKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24zLWdpdGRiIHB5dGhvbjMtbGFuZyBweXRob24zLWlvIHB5dGhvbjMtc2hlbGwgcHl0aG9uMy1tYXRoIHB5dGhvbjMtcmUgcHl0aG9uMy1zdWJwcm9jZXNzIHB5dGhvbjMtc3RyaW5nb2xkIHB5dGhvbjMtdW5peGFkbWluIHB5dGhvbjMtZW51bSBweXRob24zLWxvZ2dpbmcgcHl0aG9uMy1kYXRldGltZSBweXRob24zLW5ldGNsaWVudCBweXRob24zLXVuaXR0ZXN0IHB5dGhvbjMtYXJncGFyc2UgZ2l0IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1tYWtvXzEuMC42LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1tYWtvXzEuMC43LmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLW1ha29fMS4wLjYuYmIKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtbWFrb18xLjAuNy5iYgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1uYXRpdmVfMy41LjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLW5hdGl2ZV8zLjUuMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgyZTJjZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLW5hdGl2ZV8zLjUuMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLXJlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLmluYwotCi1QUiA9ICIke0lOQ19QUn0uMCIKLVBZVEhPTl9NQUpNSU4gPSAiMy41IgotRElTVFJPX1NSQ19VUkkgPz0gImZpbGU6Ly9zaXRlY3VzdG9taXplLnB5IgotRElTVFJPX1NSQ19VUklfbGludXhzdGRiYXNlID0gIiIKLVNSQ19VUkkgPSAiaHR0cDovL3d3dy5weXRob24ub3JnL2Z0cC9weXRob24vJHtQVn0vUHl0aG9uLSR7UFZ9LnRhci54eiBcCi1maWxlOi8vMTItZGlzdHV0aWxzLXByZWZpeC1pcy1pbnNpZGUtc3RhZ2luZy1hcmVhLnBhdGNoIFwKLWZpbGU6Ly9weXRob24tY29uZmlnLnBhdGNoIFwKLWZpbGU6Ly8wMDAtY3Jvc3MtY29tcGlsZS5wYXRjaCBcCi1maWxlOi8vMDMwLWZpeHVwLWluY2x1ZGUtZGlycy5wYXRjaCBcCi1maWxlOi8vMDcwLWRvbnQtY2xlYW4taXBrZy1pbnN0YWxsLnBhdGNoIFwKLWZpbGU6Ly8wODAtZGlzdHV0aWxzLWRvbnRfYWRqdXN0X2ZpbGVzLnBhdGNoIFwKLWZpbGU6Ly8xMzAtcmVhZGxpbmUtc2V0dXAucGF0Y2ggXAotZmlsZTovLzE1MC1maXgtc2V0dXB0ZXJtLnBhdGNoIFwKLWZpbGU6Ly9weXRob24tMy4zLW11bHRpbGliLnBhdGNoIFwKLWZpbGU6Ly8wMy1maXgtdGtpbnRlci1kZXRlY3Rpb24ucGF0Y2ggXAotZmlsZTovL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaCBcCi1maWxlOi8vc2h1dGlsLWZvbGxvdy1zeW1saW5rLWZpeC5wYXRjaCBcCi1maWxlOi8vMDAwMS1oMnB5LUZpeC1pc3N1ZS0xMzAzMi13aGVyZS1pdC1mYWlscy13aXRoLVVuaWNvZGVEZWNvLnBhdGNoIFwKLWZpbGU6Ly9zeXNyb290LWluY2x1ZGUtaGVhZGVycy5wYXRjaCBcCi1maWxlOi8vdW5peGNjb21waWxlci5wYXRjaCBcCi0ke0RJU1RST19TUkNfVVJJfSBcCi1maWxlOi8vc3lzY29uZmlnLnB5LWFkZC1fUFlUSE9OX1BST0pFQ1RfU1JDLnBhdGNoIFwKLWZpbGU6Ly9zZXR1cC5weS1jaGVjay1jcm9zc19jb21waWxpbmctd2hlbi1nZXQtRkxBR1MucGF0Y2ggXAotZmlsZTovLzAwMDEtRG8tbm90LXVzZS10aGUtc2hlbGwtdmVyc2lvbi1vZi1weXRob24tY29uZmlnLXRoYXQtdy5wYXRjaCBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI4OTA2ZWZiYWNmY2RjN2MzYzkxOThhZWVmYWZkMTU5ZSIgIAotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAwMTBmNTYxMDBiOWI3NDI1OWViY2Q1ZDRiMjk1YTMyMzI0YjU4YjUxNzQwM2ExMGQxYTJhYTdjYjIyYmNhNDAiIAotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT02YjYwMjU4MTMwZTRlZDEwZDMxMDE1MTdlYjViOTM4NSIKLQotIyBleGNsdWRlIHByZS1yZWxlYXNlcyBmb3IgYm90aCBweXRob24gMi54IGFuZCAzLngKLVVQU1RSRUFNX0NIRUNLX1JFR0VYID0gIltQcF15dGhvbi0oP1A8cHZlcj5cZCsoXC5cZCspKykudGFyIgotCi1TID0gIiR7V09SS0RJUn0vUHl0aG9uLSR7UFZ9IgotCi1FWFRSQU5BVElWRVBBVEggKz0gImJ6aXAyLW5hdGl2ZSIKLURFUEVORFMgPSAib3BlbnNzbC1uYXRpdmUgYnppcDItcmVwbGFjZW1lbnQtbmF0aXZlIHpsaWItbmF0aXZlIHJlYWRsaW5lLW5hdGl2ZSBzcWxpdGUzLW5hdGl2ZSIKLQotaW5oZXJpdCBuYXRpdmUKLQotcmVxdWlyZSBweXRob24tbmF0aXZlLSR7UFlUSE9OX01BSk1JTn0tbWFuaWZlc3QuaW5jCi0KLSMgdW5pbmF0aXZlIG1heSBiZSB1c2VkIG9uIHByZSBnbGliYyAyLjI1IHN5c3RlbXMgd2hpY2ggZG9uJ3QgaGF2ZSBnZXRlbnRyb3B5Ci1FWFRSQV9PRUNPTkZfYXBwZW5kID0gIiAtLWJpbmRpcj0ke2JpbmRpcn0vJHtQTn0gLS13aXRob3V0LWVuc3VyZXBpcCBhY19jdl9mdW5jX2dldGVudHJvcHk9bm8iCi0KLUVYVFJBX09FTUFLRSA9ICdcCi0gIExJQkM9IiIgXAotICBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSX05BVElWRX0gXAotICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSX05BVElWRX0gXAotICBMSUI9JHtiYXNlbGlifSBcCi0gIEFSQ0g9JHtUQVJHRVRfQVJDSH0gXAotJwotCi0jIE5vIGN0eXBlcyBvcHRpb24gZm9yIHB5dGhvbiAzCi1QWVRIT05MU0JPUFRTID0gIiIKLQotZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKLQlhdXRvcmVjb25mIC0tdmVyYm9zZSAtLWluc3RhbGwgLS1mb3JjZSAtLWV4Y2x1ZGU9YXV0b3BvaW50IC4uL1B5dGhvbi0ke1BWfS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpCi0Jc2VkIC1pIC1lICdzLCNkZWZpbmUgSEFWRV9HRVRSQU5ET00gMSwvXCogI3VuZGVmIEhBVkVfR0VUUkFORE9NIFwqLywnICR7Qn0vcHljb25maWcuaAotfQotCi1kb19pbnN0YWxsKCkgewotCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9wa2djb25maWcKLQlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKLQlpZiBbIC1lICR7V09SS0RJUn0vc2l0ZWN1c3RvbWl6ZS5weSBdOyB0aGVuCi0JCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NpdGVjdXN0b21pemUucHkgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfQotCWZpCi0JaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9LyR7UE59Ci0JaW5zdGFsbCAtbSAwNzU1IFBhcnNlci9wZ2VuICR7RH0ke2JpbmRpcn0vJHtQTn0KLQotCSMgTWFrZSBzdXJlIHdlIHVzZSAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0JZm9yIFBZVEhTQ1JJUFQgaW4gYGdyZXAgLXJJbCAke2JpbmRpcn0vJHtQTn0vcHl0aG9uICR7RH0ke2JpbmRpcn0vJHtQTn1gOyBkbwotCQlzZWQgLWkgLWUgJzFzfF4jIS4qfCMhL3Vzci9iaW4vZW52IHB5dGhvbjN8JyAkUFlUSFNDUklQVAotCWRvbmUKLQotCSMgVGVzdHMgYXJlIGxhcmdlIGFuZCB3ZSBkb24ndCBuZWVkIHRoZW0gaW4gdGhlIG5hdGl2ZSBzeXNyb290Ci0Jcm0gJHtEfSR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L3Rlc3QgLXJmCi19Ci0KLVJQUk9WSURFUyArPSAicHl0aG9uMy1taXNjLW5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtbmF0aXZlXzMuNS4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1uYXRpdmVfMy41LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNkOWM4OAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtbmF0aXZlXzMuNS4zLmJiCkBAIC0wLDAgKzEsODQgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLmluYworCitQUiA9ICIke0lOQ19QUn0uMCIKK1BZVEhPTl9NQUpNSU4gPSAiMy41IgorRElTVFJPX1NSQ19VUkkgPz0gImZpbGU6Ly9zaXRlY3VzdG9taXplLnB5IgorRElTVFJPX1NSQ19VUklfbGludXhzdGRiYXNlID0gIiIKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5weXRob24ub3JnL2Z0cC9weXRob24vJHtQVn0vUHl0aG9uLSR7UFZ9LnRhci54eiBcCitmaWxlOi8vMTItZGlzdHV0aWxzLXByZWZpeC1pcy1pbnNpZGUtc3RhZ2luZy1hcmVhLnBhdGNoIFwKK2ZpbGU6Ly9weXRob24tY29uZmlnLnBhdGNoIFwKK2ZpbGU6Ly8wMDAxLWNyb3NzLWNvbXBpbGUtc3VwcG9ydC5wYXRjaCBcCitmaWxlOi8vMDMwLWZpeHVwLWluY2x1ZGUtZGlycy5wYXRjaCBcCitmaWxlOi8vMDcwLWRvbnQtY2xlYW4taXBrZy1pbnN0YWxsLnBhdGNoIFwKK2ZpbGU6Ly8wODAtZGlzdHV0aWxzLWRvbnRfYWRqdXN0X2ZpbGVzLnBhdGNoIFwKK2ZpbGU6Ly8xMzAtcmVhZGxpbmUtc2V0dXAucGF0Y2ggXAorZmlsZTovLzE1MC1maXgtc2V0dXB0ZXJtLnBhdGNoIFwKK2ZpbGU6Ly9weXRob24tMy4zLW11bHRpbGliLnBhdGNoIFwKK2ZpbGU6Ly8wMy1maXgtdGtpbnRlci1kZXRlY3Rpb24ucGF0Y2ggXAorZmlsZTovL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaCBcCitmaWxlOi8vc2h1dGlsLWZvbGxvdy1zeW1saW5rLWZpeC5wYXRjaCBcCitmaWxlOi8vMDAwMS1oMnB5LUZpeC1pc3N1ZS0xMzAzMi13aGVyZS1pdC1mYWlscy13aXRoLVVuaWNvZGVEZWNvLnBhdGNoIFwKK2ZpbGU6Ly9zeXNyb290LWluY2x1ZGUtaGVhZGVycy5wYXRjaCBcCitmaWxlOi8vdW5peGNjb21waWxlci5wYXRjaCBcCiske0RJU1RST19TUkNfVVJJfSBcCitmaWxlOi8vc3lzY29uZmlnLnB5LWFkZC1fUFlUSE9OX1BST0pFQ1RfU1JDLnBhdGNoIFwKK2ZpbGU6Ly9zZXR1cC5weS1jaGVjay1jcm9zc19jb21waWxpbmctd2hlbi1nZXQtRkxBR1MucGF0Y2ggXAorZmlsZTovLzAwMDEtRG8tbm90LXVzZS10aGUtc2hlbGwtdmVyc2lvbi1vZi1weXRob24tY29uZmlnLXRoYXQtdy5wYXRjaCBcCitmaWxlOi8vc3VwcG9ydF9TT1VSQ0VfREFURV9FUE9DSF9pbl9weV9jb21waWxlLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjU3ZDFmOGJmYmFiZjRmMjUwMDI3M2ZiMDcwNmU2ZjIxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVlZmUyYWQ2NTc1ODU1NDIzYWI2MzBmNWI1MWE4ZWY2ZTU1NTZmNzc0NTg0YzA2YmVhYjQ5MjZmOTMwZGRiYjAiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWI2ODBlZDk5YWE2MGQzNTBjNjVhNjU5MTQ0OTQyMDdlIgorCisjIGV4Y2x1ZGUgcHJlLXJlbGVhc2VzIGZvciBib3RoIHB5dGhvbiAyLnggYW5kIDMueAorVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiW1BwXXl0aG9uLSg/UDxwdmVyPlxkKyhcLlxkKykrKS50YXIiCisKK1MgPSAiJHtXT1JLRElSfS9QeXRob24tJHtQVn0iCisKK0VYVFJBTkFUSVZFUEFUSCArPSAiYnppcDItbmF0aXZlIgorREVQRU5EUyA9ICJvcGVuc3NsLW5hdGl2ZSBiemlwMi1yZXBsYWNlbWVudC1uYXRpdmUgemxpYi1uYXRpdmUgcmVhZGxpbmUtbmF0aXZlIHNxbGl0ZTMtbmF0aXZlIgorCitpbmhlcml0IG5hdGl2ZQorCityZXF1aXJlIHB5dGhvbi1uYXRpdmUtJHtQWVRIT05fTUFKTUlOfS1tYW5pZmVzdC5pbmMKKworIyB1bmluYXRpdmUgbWF5IGJlIHVzZWQgb24gcHJlIGdsaWJjIDIuMjUgc3lzdGVtcyB3aGljaCBkb24ndCBoYXZlIGdldGVudHJvcHkKK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiIC0tYmluZGlyPSR7YmluZGlyfS8ke1BOfSAtLXdpdGhvdXQtZW5zdXJlcGlwIGFjX2N2X2Z1bmNfZ2V0ZW50cm9weT1ubyIKKworRVhUUkFfT0VNQUtFID0gJ1wKKyAgTElCQz0iIiBcCisgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSBcCisgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJfTkFUSVZFfSBcCisgIExJQj0ke2Jhc2VsaWJ9IFwKKyAgQVJDSD0ke1RBUkdFVF9BUkNIfSBcCisnCisKKyMgTm8gY3R5cGVzIG9wdGlvbiBmb3IgcHl0aG9uIDMKK1BZVEhPTkxTQk9QVFMgPSAiIgorCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCWF1dG9yZWNvbmYgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlIC0tZXhjbHVkZT1hdXRvcG9pbnQgLi4vUHl0aG9uLSR7UFZ9L01vZHVsZXMvX2N0eXBlcy9saWJmZmkKKwlzZWQgLWkgLWUgJ3MsI2RlZmluZSBIQVZFX0dFVFJBTkRPTSAxLC9cKiAjdW5kZWYgSEFWRV9HRVRSQU5ET00gXCovLCcgJHtCfS9weWNvbmZpZy5oCit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorCWlmIFsgLWUgJHtXT1JLRElSfS9zaXRlY3VzdG9taXplLnB5IF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2l0ZWN1c3RvbWl6ZS5weSAke0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59CisJZmkKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vJHtQTn0KKwlpbnN0YWxsIC1tIDA3NTUgUGFyc2VyL3BnZW4gJHtEfSR7YmluZGlyfS8ke1BOfQorCisJIyBNYWtlIHN1cmUgd2UgdXNlIC91c3IvYmluL2VudiBweXRob24KKwlmb3IgUFlUSFNDUklQVCBpbiBgZ3JlcCAtcklsICR7YmluZGlyfS8ke1BOfS9weXRob24gJHtEfSR7YmluZGlyfS8ke1BOfWA7IGRvCisJCXNlZCAtaSAtZSAnMXN8XiMhLip8IyEvdXNyL2Jpbi9lbnYgcHl0aG9uM3wnICRQWVRIU0NSSVBUCisJZG9uZQorCisJIyBUZXN0cyBhcmUgbGFyZ2UgYW5kIHdlIGRvbid0IG5lZWQgdGhlbSBpbiB0aGUgbmF0aXZlIHN5c3Jvb3QKKwlybSAke0R9JHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vdGVzdCAtcmYKK30KKworUlBST1ZJREVTICs9ICJweXRob24zLW1pc2MtbmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1ub3NlXzEuMy43LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1ub3NlXzEuMy43LmJiCmluZGV4IDk5YmJhNDQuLjFlMmZmNzQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtbm9zZV8xLjMuNy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLW5vc2VfMS4zLjcuYmIKQEAgLTE3LDYgKzE3LDEwIEBACiAKIGluaGVyaXQgc2V0dXB0b29sczMKIAorZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgbXYgJHtEfSR7YmluZGlyfS9ub3NldGVzdHMgJHtEfSR7YmluZGlyfS9ub3NldGVzdHMzCit9CisKIFJERVBFTkRTXyR7UE59X2NsYXNzLXRhcmdldCA9ICJcCiAgIHB5dGhvbjMtdW5pdHRlc3QgXAogICAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXBpcF85LjAuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcGlwXzkuMC4xLmJiCmluZGV4IDQ0NTZiOWIuLjliOTA3YTIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcGlwXzkuMC4xLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcGlwXzkuMC4xLmJiCkBAIC01Myw0ICs1Myw0IEBACiAgIHB5dGhvbjMteG1scnBjIFwKICIKIAotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5Y2Fpcm9fMS4xMC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1weWNhaXJvXzEuMTAuMC5iYgppbmRleCBmOTAzMWIzLi45MjU4YmExIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5Y2Fpcm9fMS4xMC4wLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHljYWlyb18xLjEwLjAuYmIKQEAgLTE5LDYgKzE5LDggQEAKIAogaW5oZXJpdCBkaXN0dXRpbHMzIHBrZ2NvbmZpZwogCitDRkxBR1MgKz0gIi1mUElDIgorCiBCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKIAogZG9fY29uZmlndXJlKCkgewpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1weWN1cmxfNy4yMS41LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1weWN1cmxfNy4yMS41LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDExMTkyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHljdXJsXzcuMjEuNS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vcHl0aG9uLXB5Y3VybDoiCi0KLXJlcXVpcmUgcHl0aG9uLXB5Y3VybC5pbmMKLQotaW5oZXJpdCBkaXN0dXRpbHMzCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5Z29iamVjdC8wMDAxLWNvbmZpZ3VyZS5hYy1Eb24tdC11c2UtZ25vbWUtY29tbW9uLW1hY3Jvcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHlnb2JqZWN0LzAwMDEtY29uZmlndXJlLmFjLURvbi10LXVzZS1nbm9tZS1jb21tb24tbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZWRiNTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5Z29iamVjdC8wMDAxLWNvbmZpZ3VyZS5hYy1Eb24tdC11c2UtZ25vbWUtY29tbW9uLW1hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDIwNjM2MDc0NGNlZGZmMjBlYWUzYzhmY2ZkZTk5MzhmZGFlOTk1OTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogVGh1LCA2IEp1bCAyMDE3IDExOjQ3OjIxICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZS5hYzogRG9uJ3QgdXNlIGdub21lLWNvbW1vbiBtYWNyb3MKKworcmVtb3ZlIEdOT01FX0NPTVBJTEVfV0FSTklOR1MoKSBjYWxsOiBpdCdzIGZyb20gZ25vbWUtY29tbW9uIHdoaWNoCitpcyBkZXByZWNhdGVkLgorCitUaGlzIHBhdGNoIGNhbiBiZSByZW1vdmVkIHdoZW4gdXBncmFkaW5nIHRvIDMuMjUuMTogYXQgdGhhdCBwb2ludAorcHlnb2JqZWN0IG5lZWRzIGF1dG9jb25mLWFyY2hpdmUgaW5zdGVhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtBbHJlYWR5IGhhbmRsZWQgdXBzdHJlYW1dCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMiAtLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAxZjE1YjNjLi41Y2IxNzBmIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yMjEsOCArMjIxLDYgQEAgQUNfQVJHX1dJVEgoY29tbW9uLAorICAgICB3aXRoX2NvbW1vbj15ZXMpCisgQU1fQ09ORElUSU9OQUwoV0lUSF9DT01NT04sIHRlc3QgIiR3aXRoX2NvbW1vbiIgPSAieWVzIikKKyAKKy0jIGNvbXBpbGVyIHdhcm5pbmdzLCBlcnJvcnMsIHJlcXVpcmVkIGNmbGFncywgYW5kIGNvZGUgY292ZXJhZ2Ugc3VwcG9ydAorLUdOT01FX0NPTVBJTEVfV0FSTklOR1MoW21heGltdW1dLCBbLVduby1lcnJvcj1taXNzaW5nLXByb3RvdHlwZXNdKQorIEFDX01TR19DSEVDS0lORyhmb3IgR25vbWUgY29kZSBjb3ZlcmFnZSBzdXBwb3J0KQorIG00X2lmZGVmKFtHTk9NRV9DT0RFX0NPVkVSQUdFXSwKKyAgICAgICAgICBbQUNfTVNHX1JFU1VMVCh5ZXMpCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHlnb2JqZWN0XzMuMjIuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHlnb2JqZWN0XzMuMjIuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQzMDQ4ZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5Z29iamVjdF8zLjIyLjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1TVU1NQVJZID0gIlB5dGhvbiBHT2JqZWN0IGJpbmRpbmdzIgotU0VDVElPTiA9ICJkZXZlbC9weXRob24iCi1MSUNFTlNFID0gIkxHUEx2Mi4xIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTkxNjQ2N2I5MTA3NmU2MzFkZDhlZGI3NDI0NzY5YzciCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnbm9tZWJhc2UgZGlzdHV0aWxzMy1iYXNlIGdvYmplY3QtaW50cm9zcGVjdGlvbiB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4KLQotREVQRU5EUyArPSAiZ25vbWUtY29tbW9uLW5hdGl2ZSBweXRob24zIGdsaWItMi4wIgotCi1TUkNOQU1FPSJweWdvYmplY3QiCi1TUkNfVVJJID0gIiBcCi0gICAgaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL0dOT01FL3NvdXJjZXMvJHtTUkNOQU1FfS8ke0Bnbm9tZV92ZXJkaXIoIiR7UFZ9Iil9LyR7U1JDTkFNRX0tJHtQVn0udGFyLnh6IFwKLSAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUuYWMtYWRkLXN5c3Jvb3QtcGF0aC10by1HSV9EQVRBRElSLWRvbi10LXNlLnBhdGNoIFwKLSIKLQotU1JDX1VSSVttZDVzdW1dID0gImVkNDExN2VkNWQ1NTRkMjVmZDc3MTg4MDdmYmY4MTlmIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA4YjI5Y2ZiMDhlZmM4MGY3YTg2MzBhMjczNGRlYzY1YTk5YzFiNTlmMWU1NzcxYzY3MWQyZTRlZDhhNWNiZTciCi0KLVMgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgotCi0KLVBBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWluc19hbnkoJ0RJU1RST19GRUFUVVJFUycsIFsgJ2RpcmVjdGZiJywgJ3dheWxhbmQnLCAneDExJyBdLCAnY2Fpcm8nLCAnJywgZCl9IgotCi0jIHB5dGhvbjMtcHljYWlybyBpcyBjaGVja2VkIG9uIGNvbmZpZ3VyYXRpb24gLT4gREVQRU5EUwotIyB3ZSBkb24ndCBsaW5rIGFnYWluc3QgcHl0aG9uMy1weWNhaXJvIC0+IFJERVBFTkRTCi1QQUNLQUdFQ09ORklHW2NhaXJvXSA9ICItLWVuYWJsZS1jYWlybywtLWRpc2FibGUtY2Fpcm8sY2Fpcm8gcHl0aG9uMy1weWNhaXJvLCBweXRob24zLXB5Y2Fpcm8iCi0KLVJERVBFTkRTXyR7UE59ICs9ICJweXRob24zLXNldHVwdG9vbHMgcHl0aG9uMy1pbXBvcnRsaWIiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgotUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPSAiIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1weWdvYmplY3RfMy4yNC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1weWdvYmplY3RfMy4yNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMTBhZjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5Z29iamVjdF8zLjI0LjEuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJQeXRob24gR09iamVjdCBiaW5kaW5ncyIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE5MTY0NjdiOTEwNzZlNjMxZGQ4ZWRiNzQyNDc2OWM3IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ25vbWViYXNlIGRpc3R1dGlsczMtYmFzZSBnb2JqZWN0LWludHJvc3BlY3Rpb24gdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuCisKK0RFUEVORFMgKz0gInB5dGhvbjMgZ2xpYi0yLjAiCisKK1NSQ05BTUU9InB5Z29iamVjdCIKK1NSQ19VUkkgPSAiIFwKKyAgICBodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvR05PTUUvc291cmNlcy8ke1NSQ05BTUV9LyR7QGdub21lX3ZlcmRpcigiJHtQVn0iKX0vJHtTUkNOQU1FfS0ke1BWfS50YXIueHogXAorICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS5hYy1hZGQtc3lzcm9vdC1wYXRoLXRvLUdJX0RBVEFESVItZG9uLXQtc2UucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS5hYy1Eb24tdC11c2UtZ25vbWUtY29tbW9uLW1hY3Jvcy5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2OWE4NDMzMTFkMGYwMzg1ZGZmMzc2ZTExYTJkODNkMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhNjI4YTk1YWEwOTA5ZTEzZmIwODIzMGIxYjk4ZmM0OGFkZWYxMGIyMjA5MzJmNzZkNjJmNjgyMWIzZmRiZmZkIgorCitTID0gIiR7V09SS0RJUn0vJHtTUkNOQU1FfS0ke1BWfSIKKworCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnNfYW55KCdESVNUUk9fRkVBVFVSRVMnLCBbICdkaXJlY3RmYicsICd3YXlsYW5kJywgJ3gxMScgXSwgJ2NhaXJvJywgJycsIGQpfSIKKworIyBweXRob24zLXB5Y2Fpcm8gaXMgY2hlY2tlZCBvbiBjb25maWd1cmF0aW9uIC0+IERFUEVORFMKKyMgd2UgZG9uJ3QgbGluayBhZ2FpbnN0IHB5dGhvbjMtcHljYWlybyAtPiBSREVQRU5EUworUEFDS0FHRUNPTkZJR1tjYWlyb10gPSAiLS1lbmFibGUtY2Fpcm8sLS1kaXNhYmxlLWNhaXJvLGNhaXJvIHB5dGhvbjMtcHljYWlybywgcHl0aG9uMy1weWNhaXJvIgorCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uMy1zZXR1cHRvb2xzIHB5dGhvbjMtaW1wb3J0bGliIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID0gIiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHlncGdtZV8wLjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5Z3BnbWVfMC4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTVmNjc3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHlncGdtZV8wLjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1TVU1NQVJZID0gIkEgUHl0aG9uIG1vZHVsZSBmb3Igd29ya2luZyB3aXRoIE9wZW5QR1AgbWVzc2FnZXMiCi1IT01FUEFHRSA9ICJodHRwczovL2xhdW5jaHBhZC5uZXQvcHlncGdtZSIKLUxJQ0VOU0UgPSAiTEdQTHYyLjEiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7bWQ1PTJkYzE1YTc2YWNmMDFlMTI2MTg4YzhkZTYzNGFlNGIzIgotCi1TUkNfVVJJID0gImh0dHBzOi8vbGF1bmNocGFkLm5ldC9weWdwZ21lL3RydW5rLyR7UFZ9Lytkb3dubG9hZC9weWdwZ21lLSR7UFZ9LnRhci5neiIKLVNSQ19VUklbbWQ1c3VtXSA9ICJkMzgzNTVhZjczZjAzNTJjZGUzZDQxMGIyNWYzNGZkMCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI1ZmQ4ODdjNDA3MDE1Mjk2YThmZDNmNGI4NjdmZTBmY2NhMzE3OWRlOTdjY2RlOTA0NDk4NTNhM2RmYjgwMmUxIgotCi1TID0gIiR7V09SS0RJUn0vcHlncGdtZS0ke1BWfSIKLQotaW5oZXJpdCBkaXN0dXRpbHMzCi0KLURFUEVORFMgPSAiZ3BnbWUgcHl0aG9uMyIKLQotUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbjMtY29yZSIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1zZXR1cHRvb2xzXzMyLjEuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtc2V0dXB0b29sc18zMi4xLjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1YWY2ZjAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1zZXR1cHRvb2xzXzMyLjEuMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLXJlcXVpcmUgcHl0aG9uLXNldHVwdG9vbHMuaW5jCi0KLURFUEVORFMgKz0gInB5dGhvbjMiCi1ERVBFTkRTX2NsYXNzLW5hdGl2ZSArPSAicHl0aG9uMy1uYXRpdmUiCi0KLWluaGVyaXQgZGlzdHV0aWxzMwotCi1ESVNUVVRJTFNfSU5TVEFMTF9BUkdTICs9ICItLWluc3RhbGwtbGliPSR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSIKLQotIyBUaGUgaW5zdGFsbGVyIHB1dHMgdGhlIHdyb25nIHBhdGggaW4gdGhlIHNldHVwdG9vbHMucHRoIGZpbGUuICBDb3JyZWN0IGl0LgotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0gICAgcm0gJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L3NldHVwdG9vbHMucHRoCi0gICAgbXYgJHtEfSR7YmluZGlyfS9lYXN5X2luc3RhbGwgJHtEfSR7YmluZGlyfS9lYXN5M19pbnN0YWxsCi0gICAgZWNobyAiLi8ke1NSQ05BTUV9LSR7UFZ9LXB5JHtQWVRIT05fQkFTRVZFUlNJT059LmVnZyIgPiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vc2V0dXB0b29scy5wdGgKLX0KLQotUkRFUEVORFNfJHtQTn0gPSAiXAotICBweXRob24zLWRpc3R1dGlscyBcCi0gIHB5dGhvbjMtY29tcHJlc3Npb24gXAotIgotUkRFUEVORFNfJHtQTn1fY2xhc3MtdGFyZ2V0ID0gIlwKLSAgcHl0aG9uMy1jdHlwZXMgXAotICBweXRob24zLWRpc3R1dGlscyBcCi0gIHB5dGhvbjMtZW1haWwgXAotICBweXRob24zLWltcG9ydGxpYiBcCi0gIHB5dGhvbjMtbnVtYmVycyBcCi0gIHB5dGhvbjMtY29tcHJlc3Npb24gXAotICBweXRob24zLXNoZWxsIFwKLSAgcHl0aG9uMy1zdWJwcm9jZXNzIFwKLSAgcHl0aG9uMy10ZXh0dXRpbHMgXAotICBweXRob24zLXBrZ3V0aWwgXAotICBweXRob24zLXRocmVhZGluZyBcCi0gIHB5dGhvbjMtbWlzYyBcCi0gIHB5dGhvbjMtdW5pdHRlc3QgXAotICBweXRob24zLXhtbCBcCi0iCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtc2V0dXB0b29sc18zNi4yLjcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXNldHVwdG9vbHNfMzYuMi43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YmNhOTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXNldHVwdG9vbHNfMzYuMi43LmJiCkBAIC0wLDAgKzEsMzMgQEAKK3JlcXVpcmUgcHl0aG9uLXNldHVwdG9vbHMuaW5jCisKK0RFUEVORFMgKz0gInB5dGhvbjMiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSArPSAicHl0aG9uMy1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayArPSAibmF0aXZlc2RrLXB5dGhvbjMiCisKK2luaGVyaXQgc2V0dXB0b29sczMKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgbXYgJHtEfSR7YmluZGlyfS9lYXN5X2luc3RhbGwgJHtEfSR7YmluZGlyfS9lYXN5M19pbnN0YWxsCit9CisKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICJcCisgIHB5dGhvbjMtZGlzdHV0aWxzIFwKKyAgcHl0aG9uMy1jb21wcmVzc2lvbiBcCisiCitSREVQRU5EU18ke1BOfSA9ICJcCisgIHB5dGhvbjMtY3R5cGVzIFwKKyAgcHl0aG9uMy1kaXN0dXRpbHMgXAorICBweXRob24zLWVtYWlsIFwKKyAgcHl0aG9uMy1pbXBvcnRsaWIgXAorICBweXRob24zLW51bWJlcnMgXAorICBweXRob24zLWNvbXByZXNzaW9uIFwKKyAgcHl0aG9uMy1zaGVsbCBcCisgIHB5dGhvbjMtc3VicHJvY2VzcyBcCisgIHB5dGhvbjMtdGV4dHV0aWxzIFwKKyAgcHl0aG9uMy1wa2d1dGlsIFwKKyAgcHl0aG9uMy10aHJlYWRpbmcgXAorICBweXRob24zLW1pc2MgXAorICBweXRob24zLXVuaXR0ZXN0IFwKKyAgcHl0aG9uMy14bWwgXAorIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMDAtY3Jvc3MtY29tcGlsZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDAwLWNyb3NzLWNvbXBpbGUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkODIyMjEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMDAtY3Jvc3MtY29tcGlsZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLVdlIGNyb3NzIGNvbXBpbGUgcHl0aG9uLiBUaGlzIHBhdGNoIHVzZXMgdG9vbHMgZnJvbSBob3N0L25hdGl2ZQotcHl0aG9uIGluc3RlYWQgb2YgaW4tdHJlZSB0b29scwotCi0tS2hlbQotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGVbQ29uZmlndXJhdGlvbiBTcGVjaWZpY10KLQotLS0tCi0gTWFrZWZpbGUucHJlLmluIHwgICAyNSArKysrKysrKysrKysrLS0tLS0tLS0tLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQotCi1JbmRleDogUHl0aG9uLTMuNS4yL01ha2VmaWxlLnByZS5pbgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0zLjUuMi5vcmlnL01ha2VmaWxlLnByZS5pbgotKysrIFB5dGhvbi0zLjUuMi9NYWtlZmlsZS5wcmUuaW4KLUBAIC0yMjAsNiArMjIwLDcgQEAgTElCT0JKUz0JQExJQk9CSlNACi0gCi0gUFlUSE9OPQkJcHl0aG9uJChFWEUpCi0gQlVJTERQWVRIT049CXB5dGhvbiQoQlVJTERFWEUpCi0rSE9TVFBZVEhPTj0JJChCVUlMRFBZVEhPTikKLSAKLSBjcm9zc19jb21waWxpbmc9QGNyb3NzX2NvbXBpbGluZ0AKLSBQWVRIT05fRk9SX0JVSUxEPUBQWVRIT05fRk9SX0JVSUxEQAotQEAgLTI3OSw2ICsyODAsNyBAQCBMSUJGRklfSU5DTFVERURJUj0JQExJQkZGSV9JTkNMVURFRElSQAotICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gIyBQYXJzZXIKLSBQR0VOPQkJUGFyc2VyL3BnZW4kKEVYRSkKLStIT1NUUEdFTj0JJChQR0VOKSQoRVhFKQotIAotIFBTUkNTPQkJXAotIAkJUGFyc2VyL2FjY2VsZXIuYyBcCi1AQCAtNTA5LDcgKzUxMSw3IEBAIGJ1aWxkX2FsbF9nZW5lcmF0ZV9wcm9maWxlOgotIAotIHJ1bl9wcm9maWxlX3Rhc2s6Ci0gCTogIyBGSVhNRTogY2FuJ3QgcnVuIGZvciBhIGNyb3NzIGJ1aWxkCi0tCSQoTExWTV9QUk9GX0ZJTEUpICQoUlVOU0hBUkVEKSAuLyQoQlVJTERQWVRIT04pICQoUFJPRklMRV9UQVNLKSB8fCB0cnVlCi0rCSQoTExWTV9QUk9GX0ZJTEUpICQoUlVOU0hBUkVEKSAkKEhPU1RQWVRIT04pICQoUFJPRklMRV9UQVNLKSB8fCB0cnVlCi0gCi0gYnVpbGRfYWxsX21lcmdlX3Byb2ZpbGU6Ci0gCSQoTExWTV9QUk9GX01FUkdFUikKLUBAIC03OTIsNyArNzk0LDcgQEAgJChHUkFNTUFSX0gpOiAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTikKLSAJQCQoTUtESVJfUCkgSW5jbHVkZQotIAkjIEF2b2lkIGNvcHlpbmcgdGhlIGZpbGUgb250byBpdHNlbGYgZm9yIGFuIGluLXRyZWUgYnVpbGQKLSAJaWYgdGVzdCAiJChjcm9zc19jb21waWxpbmcpIiAhPSAieWVzIjsgdGhlbiBcCi0tCQkkKFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKTsgXAotKwkJJChIT1NUUEdFTikgJChHUkFNTUFSX0lOUFVUKSAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0MpOyBcCi0gCWVsc2UgXAotIAkJY3AgJChzcmNkaXIpL0luY2x1ZGUvZ3JhbWluaXQuaCAkKEdSQU1NQVJfSCkudG1wOyBcCi0gCQltdiAkKEdSQU1NQVJfSCkudG1wICQoR1JBTU1BUl9IKTsgXAotQEAgLTk5MCw3ICs5OTIsNyBAQCAkKExJQlJBUllfT0JKUykgJChNT0RPQkpTKSBQcm9ncmFtcy9weXRoCi0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIAotIFRFU1RPUFRTPQkkKEVYVFJBVEVTVE9QVFMpCi0tVEVTVFBZVEhPTj0JJChSVU5TSEFSRUQpIC4vJChCVUlMRFBZVEhPTikgJChURVNUUFlUSE9OT1BUUykKLStURVNUUFlUSE9OPQkkKFJVTlNIQVJFRCkgJChIT1NUUFlUSE9OKSAkKFRFU1RQWVRIT05PUFRTKQotIFRFU1RSVU5ORVI9CSQoVEVTVFBZVEhPTikgJChzcmNkaXIpL1Rvb2xzL3NjcmlwdHMvcnVuX3Rlc3RzLnB5Ci0gVEVTVFRJTUVPVVQ9CTM2MDAKLSAKLUBAIC0xNDgxLDcgKzE0ODMsNyBAQCBmcmFtZXdvcmtpbnN0YWxsc3RydWN0dXJlOgkkKExETElCUkFSWSkKLSAJCWZpOyBcCi0gCWRvbmUKLSAJJChMTikgLWZzbiBpbmNsdWRlL3B5dGhvbiQoTERWRVJTSU9OKSAkKERFU1RESVIpJChwcmVmaXgpL0hlYWRlcnMKLS0Jc2VkICdzLyVWRVJTSU9OJS8nImAkKFJVTlNIQVJFRCkgLi8kKEJVSUxEUFlUSE9OKSAtYyAnaW1wb3J0IHBsYXRmb3JtOyBwcmludChwbGF0Zm9ybS5weXRob25fdmVyc2lvbigpKSdgIicvZycgPCAkKFJFU1NSQ0RJUikvSW5mby5wbGlzdCA+ICQoREVTVERJUikkKHByZWZpeCkvUmVzb3VyY2VzL0luZm8ucGxpc3QKLSsJc2VkICdzLyVWRVJTSU9OJS8nImAkKFJVTlNIQVJFRCkgJChIT1NUUFlUSE9OKSAtYyAnaW1wb3J0IHBsYXRmb3JtOyBwcmludChwbGF0Zm9ybS5weXRob25fdmVyc2lvbigpKSdgIicvZycgPCAkKFJFU1NSQ0RJUikvSW5mby5wbGlzdCA+ICQoREVTVERJUikkKHByZWZpeCkvUmVzb3VyY2VzL0luZm8ucGxpc3QKLSAJJChMTikgLWZzbiAkKFZFUlNJT04pICQoREVTVERJUikkKFBZVEhPTkZSQU1FV09SS0lOU1RBTExESVIpL1ZlcnNpb25zL0N1cnJlbnQKLSAJJChMTikgLWZzbiBWZXJzaW9ucy9DdXJyZW50LyQoUFlUSE9ORlJBTUVXT1JLKSAkKERFU1RESVIpJChQWVRIT05GUkFNRVdPUktJTlNUQUxMRElSKS8kKFBZVEhPTkZSQU1FV09SSykKLSAJJChMTikgLWZzbiBWZXJzaW9ucy9DdXJyZW50L0hlYWRlcnMgJChERVNURElSKSQoUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUikvSGVhZGVycwotQEAgLTE1NDcsNyArMTU0OSw3IEBAIGNvbmZpZy5zdGF0dXM6CSQoc3JjZGlyKS9jb25maWd1cmUKLSAKLSAjIFJ1biByZWluZGVudCBvbiB0aGUgbGlicmFyeQotIHJlaW5kZW50OgotLQkuLyQoQlVJTERQWVRIT04pICQoc3JjZGlyKS9Ub29scy9zY3JpcHRzL3JlaW5kZW50LnB5IC1yICQoc3JjZGlyKS9MaWIKLSsJJChIT1NUUFlUSE9OKSAkKHNyY2RpcikvVG9vbHMvc2NyaXB0cy9yZWluZGVudC5weSAtciAkKHNyY2RpcikvTGliCi0gCi0gIyBSZXJ1biBjb25maWd1cmUgd2l0aCB0aGUgc2FtZSBvcHRpb25zIGFzIGl0IHdhcyBydW4gbGFzdCB0aW1lLAotICMgcHJvdmlkZWQgdGhlIGNvbmZpZy5zdGF0dXMgc2NyaXB0IGV4aXN0cwotQEAgLTE2ODMsNyArMTY4NSw3IEBAIGZ1bm55OgotIAotICMgUGVyZm9ybSBzb21lIHZlcmlmaWNhdGlvbiBjaGVja3Mgb24gYW55IG1vZGlmaWVkIGZpbGVzLgotIHBhdGNoY2hlY2s6IGFsbAotLQkkKFJVTlNIQVJFRCkgLi8kKEJVSUxEUFlUSE9OKSAkKHNyY2RpcikvVG9vbHMvc2NyaXB0cy9wYXRjaGNoZWNrLnB5Ci0rCSQoUlVOU0hBUkVEKSAuLyQoSE9TVFBZVEhPTikgJChzcmNkaXIpL1Rvb2xzL3NjcmlwdHMvcGF0Y2hjaGVjay5weQotIAotICMgRGVwZW5kZW5jaWVzCi0gCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAwMDEtRG8tbm90LXVzZS10aGUtc2hlbGwtdmVyc2lvbi1vZi1weXRob24tY29uZmlnLXRoYXQtdy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDAwMS1Eby1ub3QtdXNlLXRoZS1zaGVsbC12ZXJzaW9uLW9mLXB5dGhvbi1jb25maWctdGhhdC13LnBhdGNoCmluZGV4IGI3ZTBhYzYuLjhlYTNmMDMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDAwMS1Eby1ub3QtdXNlLXRoZS1zaGVsbC12ZXJzaW9uLW9mLXB5dGhvbi1jb25maWctdGhhdC13LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDAwMS1Eby1ub3QtdXNlLXRoZS1zaGVsbC12ZXJzaW9uLW9mLXB5dGhvbi1jb25maWctdGhhdC13LnBhdGNoCkBAIC0xLDQgKzEsNCBAQAotRnJvbSAwNDVjOTliNWYxZWI2ZTRlMGQ4YWQxZWY5ZjBiYTY1NzRmNzM4MTUwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSAwNGRmOTU5MzY1ZTJiNTRkNzUwM2VkZjBlNTUzNGZmMDk0Mjg0ZjJkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CiBEYXRlOiBGcmksIDIzIE9jdCAyMDE1IDEyOjI1OjA5ICswMzAwCiBTdWJqZWN0OiBbUEFUQ0hdIERvIG5vdCB1c2UgdGhlIHNoZWxsIHZlcnNpb24gb2YgcHl0aG9uLWNvbmZpZyB0aGF0IHdhcwpAQCAtMTQsMTMgKzE0LDEzIEBACiAgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL01ha2VmaWxlLnByZS5pbiBiL01ha2VmaWxlLnByZS5pbgotaW5kZXggZDdmYzlhMC4uNDdlNjBiYyAxMDA2NDQKK2luZGV4IDIzNmYwMDUuLjVjNDMzN2YgMTAwNjQ0CiAtLS0gYS9NYWtlZmlsZS5wcmUuaW4KICsrKyBiL01ha2VmaWxlLnByZS5pbgotQEAgLTEyNzAsMTIgKzEyNzAsOSBAQCBweXRob24tY29uZmlnOiAkKHNyY2RpcikvTWlzYy9weXRob24tY29uZmlnLmluIE1pc2MvcHl0aG9uLWNvbmZpZy5zaAorQEAgLTEzNDgsMTIgKzEzNDgsOSBAQCBweXRob24tY29uZmlnOiAkKHNyY2RpcikvTWlzYy9weXRob24tY29uZmlnLmluIE1pc2MvcHl0aG9uLWNvbmZpZy5zaAogIAlzZWQgLWUgInMsQEVYRU5BTUVALCQoQklORElSKS9weXRob24kKExEVkVSU0lPTikkKEVYRSksIiA8ICQoc3JjZGlyKS9NaXNjL3B5dGhvbi1jb25maWcuaW4gPnB5dGhvbi1jb25maWcucHkKICAJIyBSZXBsYWNlIG1ha2VmaWxlIGNvbXBhdC4gdmFyaWFibGUgcmVmZXJlbmNlcyB3aXRoIHNoZWxsIHNjcmlwdCBjb21wYXQuIG9uZXM7ICQoVkFSKSAtPiAke1ZBUn0KLSAJc2VkIC1lICdzLFwkJChcKFtBLVphLXowLTlfXSpcKSksXCQkXHtcMVx9LGcnIDwgTWlzYy9weXRob24tY29uZmlnLnNoID5weXRob24tY29uZmlnCisgCUxDX0FMTD1DIHNlZCAtZSAncyxcJCQoXChbQS1aYS16MC05X10qXCkpLFwkJFx7XDFcfSxnJyA8IE1pc2MvcHl0aG9uLWNvbmZpZy5zaCA+cHl0aG9uLWNvbmZpZwogLQkjIE9uIERhcndpbiwgYWx3YXlzIHVzZSB0aGUgcHl0aG9uIHZlcnNpb24gb2YgdGhlIHNjcmlwdCwgdGhlIHNoZWxsCiAtCSMgdmVyc2lvbiBkb2Vzbid0IHVzZSB0aGUgY29tcGlsZXIgY3VzdG9taXphdGlvbnMgdGhhdCBhcmUgcHJvdmlkZWQKIC0JIyBpbiBweXRob24gKF9vc3hfc3VwcG9ydC5weSkuCkBAIC0zNCw1ICszNCw1IEBACiAgCiAgIyBJbnN0YWxsIHRoZSBpbmNsdWRlIGZpbGVzCiAtLSAKLTIuMS40CisyLjExLjAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMDAxLUlzc3VlLTIxMjcyLVVzZS1fc3lzY29uZmlnZGF0YS5weS10by1pbml0aWFsaXplLWRpc3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAwMDEtSXNzdWUtMjEyNzItVXNlLV9zeXNjb25maWdkYXRhLnB5LXRvLWluaXRpYWxpemUtZGlzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWM5MmU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMDAxLUlzc3VlLTIxMjcyLVVzZS1fc3lzY29uZmlnZGF0YS5weS10by1pbml0aWFsaXplLWRpc3QucGF0Y2gKQEAgLTAsMCArMSw2NiBAQAorRnJvbSBiY2RkYmY0MGM3ZjFiODAzMzYyNjhjZGRkYWNjMTczNjlmYjBjY2VhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGliaW4gRGFuZyA8bGliaW4uZGFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAxMSBBcHIgMjAxNyAxNDoxMjoxNSArMDgwMAorU3ViamVjdDogW1BBVENIXSBJc3N1ZSAjMjEyNzI6IFVzZSBfc3lzY29uZmlnZGF0YS5weSB0byBpbml0aWFsaXplCisgZGlzdHV0aWxzLnN5c2NvbmZpZworCitCYWNrcG9ydCB1cHN0cmVhbSBjb21taXQKK2h0dHBzOi8vZ2l0aHViLmNvbS9weXRob24vY3B5dGhvbi9jb21taXQvNDA5NDgyMjUxYjA2ZmU3NWM0ZWU1NmU4NWZmYmI0YjIzZDkzNDE1OQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IExpIFpob3UgPGxpLnpob3VAd2luZHJpdmVyLmNvbT4KKy0tLQorIExpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5IHwgMzUgKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAzMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5IGIvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKK2luZGV4IDZkNWNmZDAuLjk5MjVkMjQgMTAwNjQ0CistLS0gYS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorKysrIGIvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKK0BAIC00MjQsMzggKzQyNCwxMSBAQCBfY29uZmlnX3ZhcnMgPSBOb25lCisgCisgZGVmIF9pbml0X3Bvc2l4KCk6CisgICAgICIiIkluaXRpYWxpemUgdGhlIG1vZHVsZSBhcyBhcHByb3ByaWF0ZSBmb3IgUE9TSVggc3lzdGVtcy4iIiIKKy0gICAgZyA9IHt9CistICAgICMgbG9hZCB0aGUgaW5zdGFsbGVkIE1ha2VmaWxlOgorLSAgICB0cnk6CistICAgICAgICBmaWxlbmFtZSA9IGdldF9tYWtlZmlsZV9maWxlbmFtZSgpCistICAgICAgICBwYXJzZV9tYWtlZmlsZShmaWxlbmFtZSwgZykKKy0gICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgorLSAgICAgICAgbXlfbXNnID0gImludmFsaWQgUHl0aG9uIGluc3RhbGxhdGlvbjogdW5hYmxlIHRvIG9wZW4gJXMiICUgZmlsZW5hbWUKKy0gICAgICAgIGlmIGhhc2F0dHIobXNnLCAic3RyZXJyb3IiKToKKy0gICAgICAgICAgICBteV9tc2cgPSBteV9tc2cgKyAiICglcykiICUgbXNnLnN0cmVycm9yCistCistICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKG15X21zZykKKy0KKy0gICAgIyBsb2FkIHRoZSBpbnN0YWxsZWQgcHljb25maWcuaDoKKy0gICAgdHJ5OgorLSAgICAgICAgZmlsZW5hbWUgPSBnZXRfY29uZmlnX2hfZmlsZW5hbWUoKQorLSAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lKSBhcyBmaWxlOgorLSAgICAgICAgICAgIHBhcnNlX2NvbmZpZ19oKGZpbGUsIGcpCistICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKKy0gICAgICAgIG15X21zZyA9ICJpbnZhbGlkIFB5dGhvbiBpbnN0YWxsYXRpb246IHVuYWJsZSB0byBvcGVuICVzIiAlIGZpbGVuYW1lCistICAgICAgICBpZiBoYXNhdHRyKG1zZywgInN0cmVycm9yIik6CistICAgICAgICAgICAgbXlfbXNnID0gbXlfbXNnICsgIiAoJXMpIiAlIG1zZy5zdHJlcnJvcgorLQorLSAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcihteV9tc2cpCistCistICAgICMgT24gQUlYLCB0aGVyZSBhcmUgd3JvbmcgcGF0aHMgdG8gdGhlIGxpbmtlciBzY3JpcHRzIGluIHRoZSBNYWtlZmlsZQorLSAgICAjIC0tIHRoZXNlIHBhdGhzIGFyZSByZWxhdGl2ZSB0byB0aGUgUHl0aG9uIHNvdXJjZSwgYnV0IHdoZW4gaW5zdGFsbGVkCistICAgICMgdGhlIHNjcmlwdHMgYXJlIGluIGFub3RoZXIgZGlyZWN0b3J5LgorLSAgICBpZiBweXRob25fYnVpbGQ6CistICAgICAgICBnWydMRFNIQVJFRCddID0gZ1snQkxEU0hBUkVEJ10KKy0KKysgICAgIyBfc3lzY29uZmlnZGF0YSBpcyBnZW5lcmF0ZWQgYXQgYnVpbGQgdGltZSwgc2VlIHRoZSBzeXNjb25maWcgbW9kdWxlCisrICAgIGZyb20gX3N5c2NvbmZpZ2RhdGEgaW1wb3J0IGJ1aWxkX3RpbWVfdmFycworICAgICBnbG9iYWwgX2NvbmZpZ192YXJzCistICAgIF9jb25maWdfdmFycyA9IGcKKysgICAgX2NvbmZpZ192YXJzID0ge30KKysgICAgX2NvbmZpZ192YXJzLnVwZGF0ZShidWlsZF90aW1lX3ZhcnMpCisgCisgCisgZGVmIF9pbml0X250KCk6CistLSAKKzEuOC4zLjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMDAxLWNyb3NzLWNvbXBpbGUtc3VwcG9ydC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDAwMS1jcm9zcy1jb21waWxlLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE4ZDc1ZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDAwMS1jcm9zcy1jb21waWxlLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSw5MyBAQAorRnJvbSA2MjRjMDI5YWJjYzczYzcyNDAyMGNjZWE5YTJiNGI1YjVjMDBmMmE2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBGcmksIDMxIE1hciAyMDE3IDE1OjQyOjQ2ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyb3NzLWNvbXBpbGUgc3VwcG9ydAorCitXZSBjcm9zcyBjb21waWxlIHB5dGhvbi4gVGhpcyBwYXRjaCB1c2VzIHRvb2xzIGZyb20gaG9zdC9uYXRpdmUKK3B5dGhvbiBpbnN0ZWFkIG9mIGluLXRyZWUgdG9vbHMKKworLUtoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlW0NvbmZpZ3VyYXRpb24gU3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKy0tLQorIE1ha2VmaWxlLnByZS5pbiB8IDE0ICsrKysrKysrLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLnByZS5pbiBiL01ha2VmaWxlLnByZS5pbgoraW5kZXggYTg4YjdkNS4uN2NiOGJiMyAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLnByZS5pbgorKysrIGIvTWFrZWZpbGUucHJlLmluCitAQCAtMjIxLDYgKzIyMSw3IEBAIExJQk9CSlM9CUBMSUJPQkpTQAorIAorIFBZVEhPTj0JCXB5dGhvbiQoRVhFKQorIEJVSUxEUFlUSE9OPQlweXRob24kKEJVSUxERVhFKQorK0hPU1RQWVRIT049ICAgICQoQlVJTERQWVRIT04pCisgCisgUFlUSE9OX0ZPUl9HRU49QFBZVEhPTl9GT1JfR0VOQAorIFBZVEhPTl9GT1JfQlVJTEQ9QFBZVEhPTl9GT1JfQlVJTERACitAQCAtMjgwLDYgKzI4MSw3IEBAIExJQkZGSV9JTkNMVURFRElSPQlATElCRkZJX0lOQ0xVREVESVJACisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjIFBhcnNlcgorIFBHRU49CQlQYXJzZXIvcGdlbiQoRVhFKQorK0hPU1RQR0VOPQkkKFBHRU4pJChFWEUpCisgCisgUFNSQ1M9CQlcCisgCQlQYXJzZXIvYWNjZWxlci5jIFwKK0BAIC01MTAsNyArNTEyLDcgQEAgYnVpbGRfYWxsX2dlbmVyYXRlX3Byb2ZpbGU6CisgCisgcnVuX3Byb2ZpbGVfdGFzazoKKyAJOiAjIEZJWE1FOiBjYW4ndCBydW4gZm9yIGEgY3Jvc3MgYnVpbGQKKy0JJChMTFZNX1BST0ZfRklMRSkgJChSVU5TSEFSRUQpIC4vJChCVUlMRFBZVEhPTikgJChQUk9GSUxFX1RBU0spIHx8IHRydWUKKysJJChMTFZNX1BST0ZfRklMRSkgJChSVU5TSEFSRUQpICQoSE9TVFBZVEhPTikgJChQUk9GSUxFX1RBU0spIHx8IHRydWUKKyAKKyBidWlsZF9hbGxfbWVyZ2VfcHJvZmlsZToKKyAJJChMTFZNX1BST0ZfTUVSR0VSKQorQEAgLTc4Nyw3ICs3ODksNyBAQCAkKElPX09CSlMpOiAkKElPX0gpCisgCisgJChHUkFNTUFSX0gpOiBAR0VORVJBVEVEX0NPTU1FTlRAICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOKQorIAlAJChNS0RJUl9QKSBJbmNsdWRlCistCSQoUEdFTikgJChHUkFNTUFSX0lOUFVUKSAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0MpCisrCSQoSE9TVFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKQorICQoR1JBTU1BUl9DKTogQEdFTkVSQVRFRF9DT01NRU5UQCAkKEdSQU1NQVJfSCkKKyAJdG91Y2ggJChHUkFNTUFSX0MpCisgCitAQCAtOTc2LDcgKzk3OCw3IEBAICQoTElCUkFSWV9PQkpTKSAkKE1PRE9CSlMpIFByb2dyYW1zL3B5dGhvbi5vOiAkKFBZVEhPTl9IRUFERVJTKQorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAKKyBURVNUT1BUUz0JJChFWFRSQVRFU1RPUFRTKQorLVRFU1RQWVRIT049CSQoUlVOU0hBUkVEKSAuLyQoQlVJTERQWVRIT04pICQoVEVTVFBZVEhPTk9QVFMpCisrVEVTVFBZVEhPTj0JJChSVU5TSEFSRUQpICQoSE9TVFBZVEhPTikgJChURVNUUFlUSE9OT1BUUykKKyBURVNUUlVOTkVSPQkkKFRFU1RQWVRIT04pICQoc3JjZGlyKS9Ub29scy9zY3JpcHRzL3J1bl90ZXN0cy5weQorIFRFU1RUSU1FT1VUPQkzNjAwCisgCitAQCAtMTQ2OCw3ICsxNDcwLDcgQEAgZnJhbWV3b3JraW5zdGFsbHN0cnVjdHVyZToJJChMRExJQlJBUlkpCisgCQlmaTsgXAorIAlkb25lCisgCSQoTE4pIC1mc24gaW5jbHVkZS9weXRob24kKExEVkVSU0lPTikgJChERVNURElSKSQocHJlZml4KS9IZWFkZXJzCistCXNlZCAncy8lVkVSU0lPTiUvJyJgJChSVU5TSEFSRUQpIC4vJChCVUlMRFBZVEhPTikgLWMgJ2ltcG9ydCBwbGF0Zm9ybTsgcHJpbnQocGxhdGZvcm0ucHl0aG9uX3ZlcnNpb24oKSknYCInL2cnIDwgJChSRVNTUkNESVIpL0luZm8ucGxpc3QgPiAkKERFU1RESVIpJChwcmVmaXgpL1Jlc291cmNlcy9JbmZvLnBsaXN0CisrCXNlZCAncy8lVkVSU0lPTiUvJyJgJChSVU5TSEFSRUQpICQoSE9TVFBZVEhPTikgLWMgJ2ltcG9ydCBwbGF0Zm9ybTsgcHJpbnQocGxhdGZvcm0ucHl0aG9uX3ZlcnNpb24oKSknYCInL2cnIDwgJChSRVNTUkNESVIpL0luZm8ucGxpc3QgPiAkKERFU1RESVIpJChwcmVmaXgpL1Jlc291cmNlcy9JbmZvLnBsaXN0CisgCSQoTE4pIC1mc24gJChWRVJTSU9OKSAkKERFU1RESVIpJChQWVRIT05GUkFNRVdPUktJTlNUQUxMRElSKS9WZXJzaW9ucy9DdXJyZW50CisgCSQoTE4pIC1mc24gVmVyc2lvbnMvQ3VycmVudC8kKFBZVEhPTkZSQU1FV09SSykgJChERVNURElSKSQoUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUikvJChQWVRIT05GUkFNRVdPUkspCisgCSQoTE4pIC1mc24gVmVyc2lvbnMvQ3VycmVudC9IZWFkZXJzICQoREVTVERJUikkKFBZVEhPTkZSQU1FV09SS0lOU1RBTExESVIpL0hlYWRlcnMKK0BAIC0xNTM0LDcgKzE1MzYsNyBAQCBjb25maWcuc3RhdHVzOgkkKHNyY2RpcikvY29uZmlndXJlCisgCisgIyBSdW4gcmVpbmRlbnQgb24gdGhlIGxpYnJhcnkKKyByZWluZGVudDoKKy0JLi8kKEJVSUxEUFlUSE9OKSAkKHNyY2RpcikvVG9vbHMvc2NyaXB0cy9yZWluZGVudC5weSAtciAkKHNyY2RpcikvTGliCisrCSQoSE9TVFBZVEhPTikgJChzcmNkaXIpL1Rvb2xzL3NjcmlwdHMvcmVpbmRlbnQucHkgLXIgJChzcmNkaXIpL0xpYgorIAorICMgUmVydW4gY29uZmlndXJlIHdpdGggdGhlIHNhbWUgb3B0aW9ucyBhcyBpdCB3YXMgcnVuIGxhc3QgdGltZSwKKyAjIHByb3ZpZGVkIHRoZSBjb25maWcuc3RhdHVzIHNjcmlwdCBleGlzdHMKK0BAIC0xNjc0LDcgKzE2NzYsNyBAQCBmdW5ueToKKyAKKyAjIFBlcmZvcm0gc29tZSB2ZXJpZmljYXRpb24gY2hlY2tzIG9uIGFueSBtb2RpZmllZCBmaWxlcy4KKyBwYXRjaGNoZWNrOiBhbGwKKy0JJChSVU5TSEFSRUQpIC4vJChCVUlMRFBZVEhPTikgJChzcmNkaXIpL1Rvb2xzL3NjcmlwdHMvcGF0Y2hjaGVjay5weQorKwkkKFJVTlNIQVJFRCkgLi8kKEhPU1RQWVRIT04pICQoc3JjZGlyKS9Ub29scy9zY3JpcHRzL3BhdGNoY2hlY2sucHkKKyAKKyAjIERlcGVuZGVuY2llcworIAorLS0gCisyLjExLjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9GaXgtMjk1MTktd2Vha3JlZi1zcGV3aW5nLWV4Y2VwdGlvbnMtZHVyaW5nLWludGVycC1mLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9GaXgtMjk1MTktd2Vha3JlZi1zcGV3aW5nLWV4Y2VwdGlvbnMtZHVyaW5nLWludGVycC1mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMTdjNmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL0ZpeC0yOTUxOS13ZWFrcmVmLXNwZXdpbmctZXhjZXB0aW9ucy1kdXJpbmctaW50ZXJwLWYucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorRnJvbSA2MmRjZjM0OTg3YjY4MGU5NTg3M2ViOTQ3YjNmNGQ4MDIxOTljNjY3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xPz1DNT04MXVrYXN6PTIwTGFuZ2E/PSA8bHVrYXN6QGxhbmdhLnBsPgorRGF0ZTogRnJpLCAxMCBGZWIgMjAxNyAwMDoxNDo1NSAtMDgwMAorU3ViamVjdDogW1BBVENIXSBGaXggIzI5NTE5OiB3ZWFrcmVmIHNwZXdpbmcgZXhjZXB0aW9ucyBkdXJpbmcgaW50ZXJwCisgZmluYWxpemF0aW9uCisKK2NvbW1pdCA5Y2Q3ZTE3NjQwYTQ5NjM1ZDFjMWY4YzI5ODk1NzhhOGZjMmMxZGU2Citmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9weXRob24vY3B5dGhvbgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEx1a2FzeiBMYW5nYSA8bHVrYXN6QGxhbmdhLnBsPgorLS0tCisgTGliL3dlYWtyZWYucHkgfCA0ICsrLS0KKyBNaXNjL05FV1MgICAgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9MaWIvd2Vha3JlZi5weSBiL0xpYi93ZWFrcmVmLnB5CitpbmRleCBhYWViZDBjLi43ODdlMzNhIDEwMDY0NAorLS0tIGEvTGliL3dlYWtyZWYucHkKKysrKyBiL0xpYi93ZWFrcmVmLnB5CitAQCAtMTA2LDcgKzEwNiw3IEBAIGNsYXNzIFdlYWtWYWx1ZURpY3Rpb25hcnkoY29sbGVjdGlvbnMuTXV0YWJsZU1hcHBpbmcpOgorICAgICAgICAgc2VsZiwgKmFyZ3MgPSBhcmdzCisgICAgICAgICBpZiBsZW4oYXJncykgPiAxOgorICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZXhwZWN0ZWQgYXQgbW9zdCAxIGFyZ3VtZW50cywgZ290ICVkJyAlIGxlbihhcmdzKSkKKy0gICAgICAgIGRlZiByZW1vdmUod3IsIHNlbGZyZWY9cmVmKHNlbGYpKToKKysgICAgICAgIGRlZiByZW1vdmUod3IsIHNlbGZyZWY9cmVmKHNlbGYpLCBfYXRvbWljX3JlbW92YWw9X3JlbW92ZV9kZWFkX3dlYWtyZWYpOgorICAgICAgICAgICAgIHNlbGYgPSBzZWxmcmVmKCkKKyAgICAgICAgICAgICBpZiBzZWxmIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICBpZiBzZWxmLl9pdGVyYXRpbmc6CitAQCAtMTE0LDcgKzExNCw3IEBAIGNsYXNzIFdlYWtWYWx1ZURpY3Rpb25hcnkoY29sbGVjdGlvbnMuTXV0YWJsZU1hcHBpbmcpOgorICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgIyBBdG9taWMgcmVtb3ZhbCBpcyBuZWNlc3Nhcnkgc2luY2UgdGhpcyBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgIyBjYW4gYmUgY2FsbGVkIGFzeW5jaHJvbm91c2x5IGJ5IHRoZSBHQworLSAgICAgICAgICAgICAgICAgICAgX3JlbW92ZV9kZWFkX3dlYWtyZWYoZCwgd3Iua2V5KQorKyAgICAgICAgICAgICAgICAgICAgX2F0b21pY19yZW1vdmFsKGQsIHdyLmtleSkKKyAgICAgICAgIHNlbGYuX3JlbW92ZSA9IHJlbW92ZQorICAgICAgICAgIyBBIGxpc3Qgb2Yga2V5cyB0byBiZSByZW1vdmVkCisgICAgICAgICBzZWxmLl9wZW5kaW5nX3JlbW92YWxzID0gW10KK2RpZmYgLS1naXQgYS9NaXNjL05FV1MgYi9NaXNjL05FV1MKK2luZGV4IDQxY2ZkYmEuLjZkODlmNTIgMTAwNjQ0CistLS0gYS9NaXNjL05FV1MKKysrKyBiL01pc2MvTkVXUworQEAgLTU3MTksNiArNTcxOSw5IEBAIENvcmUgYW5kIEJ1aWx0aW5zCisgTGlicmFyeQorIC0tLS0tLS0KKyAKKystIElzc3VlICMyOTUxOTogRml4IHdlYWtyZWYgc3Bld2luZyBleGNlcHRpb25zIGR1cmluZyBpbnRlcnByZXRlciBzaHV0ZG93bgorKyAgd2hlbiB1c2VkIHdpdGggYSByYXJlIGNvbWJpbmF0aW9uIG9mIG11bHRpcHJvY2Vzc2luZyBhbmQgY3VzdG9tIGNvZGVjcy4KKysKKyAtIElzc3VlICMyMDE1NDogRGVhZGxvY2sgaW4gYXN5bmNpby5TdHJlYW1SZWFkZXIucmVhZGV4YWN0bHkoKS4KKyAKKyAtIElzc3VlICMxNjExMzogUmVtb3ZlIHNoYTMgbW9kdWxlIGFnYWluLgorLS0gCisyLjcuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3Bhc3MtbWlzc2luZy1saWJyYXJpZXMtdG8tRXh0ZW5zaW9uLWZvci1tdWwucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3Bhc3MtbWlzc2luZy1saWJyYXJpZXMtdG8tRXh0ZW5zaW9uLWZvci1tdWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMzYWY2YgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcGFzcy1taXNzaW5nLWxpYnJhcmllcy10by1FeHRlbnNpb24tZm9yLW11bC5wYXRjaApAQCAtMCwwICsxLDgyIEBACitGcm9tIGE3ODRiNzBkNDdiYTIxMDRhZmJjZmQ4MDVlMmE2NmNkYzIxMDllYzUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDQgQXVnIDIwMTcgMTE6MTY6MTQgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gc2V0dXAucHk6IHBhc3MgbWlzc2luZyBsaWJyYXJpZXMgdG8gRXh0ZW5zaW9uIGZvciBtdWx0aXByb2Nlc3NpbmcgbW9kdWxlCisKK0luIHRoZSBmb2xsb3dpbmcgY29tbWl0OgorLi4uCitjb21taXQgZTcxMWNhZmFiMTNlZmM5YzFmZTZjNWNkNzU4MjY0MDE0NDVlYjU4NQorQXV0aG9yOiBCZW5qYW1pbiBQZXRlcnNvbiA8YmVuamFtaW5AcHl0aG9uLm9yZz4KK0RhdGU6ICAgV2VkIEp1biAxMSAxNjo0NDowNCAyMDA4ICswMDAwCisKKyAgICBNZXJnZWQgcmV2aXNpb25zIDY0MTA0LDY0MTE3IHZpYSBzdm5tZXJnZSBmcm9tCisgICAgc3ZuK3NzaDovL3B5dGhvbmRldkBzdm4ucHl0aG9uLm9yZy9weXRob24vdHJ1bmsKKy4uLgorKHNlZSBkaWZmIGluIHNldHVwLnB5KQorSXQgYXNzaWduZWQgbGlicmFyaWVzIGZvciBtdWx0aXByb2Nlc3NpbmcgbW9kdWxlIGFjY29yZGluZwordGhlIGhvc3RfcGxhdGZvcm0sIGJ1dCBub3QgcGFzcyBpdCB0byBFeHRlbnNpb24uCisKK0luIGdsaWJjLCB0aGUgZm9sbG93aW5nIGNvbW1pdCBjYXVzZWQgdHdvIGRlZmluaXRpb24gb2YKK3NlbV9nZXR2YWx1ZSBhcmUgZGlmZmVyZW50LgoraHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9naXQvP3A9Z2xpYmMuZ2l0O2E9Y29tbWl0O2g9MDQyZTE1MjFjNzk0YTk0NWVkYzQzYjViZmE3ZTY5YWQ3MDQyMDUyNAorKHNlZSBkaWZmIGluIG5wdGwvc2VtX2dldHZhbHVlLmMgZm9yIGRldGFpbCkKK2BfX25ld19zZW1fZ2V0dmFsdWUnIGlzIHRoZSBsYXRlc3Qgc2VtX2dldHZhbHVlQEBHTElCQ18yLjEKK2FuZCBgX19vbGRfc2VtX2dldHZhbHVlJyBpcyB0byBjb21wYXQgdGhlIG9sZCB2ZXJzaW9uCitzZW1fZ2V0dmFsdWVAR0xJQkNfMi4wLgorCitUbyBidWlsZCBweXRob24gZm9yIGVtYmVkZGVkIExpbnV4IHN5c3RlbXM6CitodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8yLjMuMS95b2N0by1wcm9qZWN0LXFzL3lvY3RvLXByb2plY3QtcXMuaHRtbAorSWYgbm90IGV4cGxpY2l0bHkgbGluayB0byBsaWJyYXJ5IHB0aHJlYWQgKC1scHRocmVhZCksIGl0IHdpbGwKK2xvYWQgZ2xpYmMncyBzZW1fZ2V0dmFsdWUgcmFuZG9tbHkgYXQgcnVudGltZS4KKworU3VjaCBhcyBidWlsZCBweXRob24gb24gbGludXggeDg2XzY0IGhvc3QgYW5kIHJ1biB0aGUgcHl0aG9uCitvbiBsaW51eCB4ODZfMzIgdGFyZ2V0LiBJZiBub3QgbGluayBsaWJyYXJ5IHB0aHJlYWQsIGl0IGNhdXNlZAorbXVsdGlwcm9jZXNzaW5nIGJvdW5kZWQgc2VtYXBob3JlIGNvdWxkIG5vdCB3b3JrIGNvcnJlY3RseS4KKy4uLgorPj4+IGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKKz4+PiBwb29sX3NlbWEgPSBtdWx0aXByb2Nlc3NpbmcuQm91bmRlZFNlbWFwaG9yZSh2YWx1ZT0xKQorPj4+IHBvb2xfc2VtYS5hY3F1aXJlKCkKK1RydWUKKz4+PiBwb29sX3NlbWEucmVsZWFzZSgpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CitWYWx1ZUVycm9yOiBzZW1hcGhvcmUgb3IgbG9jayByZWxlYXNlZCB0b28gbWFueSB0aW1lcworLi4uCisKK0FuZCB0aGUgc2VtYXBob3JlIGlzc3VlIGFsc28gY2F1c2VkIG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpLnB1dCgpIGh1bmcuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vcHl0aG9uL2NweXRob24vcHVsbC8yOTk5XQorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBzZXR1cC5weSB8IDcgKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zZXR1cC5weSBiL3NldHVwLnB5CitpbmRleCA0ZjBmNTIyLi5kMDU3MDdkIDEwMDY0NAorLS0tIGEvc2V0dXAucHkKKysrKyBiL3NldHVwLnB5CitAQCAtMTYwNiw4ICsxNjA2LDEwIEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgIGVsaWYgaG9zdF9wbGF0Zm9ybS5zdGFydHN3aXRoKCduZXRic2QnKToKKyAgICAgICAgICAgICBtYWNyb3MgPSBkaWN0KCkKKyAgICAgICAgICAgICBsaWJyYXJpZXMgPSBbXQorLQorLSAgICAgICAgZWxzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTGludXggYW5kIG90aGVyIHVuaWNlcworKyAgICAgICAgZWxpZiBob3N0X3BsYXRmb3JtLnN0YXJ0c3dpdGgoKCdsaW51eCcpKToKKysgICAgICAgICAgICBtYWNyb3MgPSBkaWN0KCkKKysgICAgICAgICAgICBsaWJyYXJpZXMgPSBbJ3B0aHJlYWQnXQorKyAgICAgICAgZWxzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgT3RoZXIgdW5pY2VzCisgICAgICAgICAgICAgbWFjcm9zID0gZGljdCgpCisgICAgICAgICAgICAgbGlicmFyaWVzID0gWydydCddCisgCitAQCAtMTYyNiw2ICsxNjI4LDcgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgaWYgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdXSVRIX1RIUkVBRCcpOgorICAgICAgICAgICAgIGV4dHMuYXBwZW5kICggRXh0ZW5zaW9uKCdfbXVsdGlwcm9jZXNzaW5nJywgbXVsdGlwcm9jZXNzaW5nX3NyY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lX21hY3Jvcz1saXN0KG1hY3Jvcy5pdGVtcygpKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9bGlicmFyaWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycz1bIk1vZHVsZXMvX211bHRpcHJvY2Vzc2luZyJdKSkKKyAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ19tdWx0aXByb2Nlc3NpbmcnKQorLS0gCisyLjcuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbjMtZml4LUNWRS0yMDE2LTEwMDAxMTAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbjMtZml4LUNWRS0yMDE2LTEwMDAxMTAucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMWI3MjMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24zLWZpeC1DVkUtMjAxNi0xMDAwMTEwLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLUZyb20gYWFiM2U4YzQzMmI5MDUwOGFjMTQ3NTUxMjhmNWE2ODdiZTJmZGY0MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IE1pbmdsaSBZdSA8TWluZ2xpLll1QHdpbmRyaXZlci5jb20+Ci1EYXRlOiBUaHUsIDIyIFNlcCAyMDE2IDE2OjM5OjQ5ICswODAwCi1TdWJqZWN0OiBbUEFUQ0hdIHB5dGhvbjM6IGZpeCBDVkUtMjAxNi0xMDAwMTEwCi1NSU1FLVZlcnNpb246IDEuMAotQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04Ci1Db250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0Ci0KLUlnbm9yZSB0aGUgSFRUUF9QUk9YWSB2YXJpYWJsZSB3aGVuIFJFUVVFU1RfTUVUSE9EIGVudmlyb25tZW50IGlzIHNldCwgd2hpY2gKLWluZGljYXRlcyB0aGF0IHRoZSBzY3JpcHQgaXMgaW4gQ0dJIG1vZGUuCi0KLUlzc3VlICMyNzU2OCBSZXBvcnRlZCBhbmQgcGF0Y2ggY29udHJpYnV0ZWQgYnkgUsOpbWkgUmFtcGluLiBbIzI3NTY4XQotCi1CYWNrcG9ydCBwYXRjaCBmcm9tIGh0dHBzOi8vaGcucHl0aG9uLm9yZy9jcHl0aG9uL3Jldi9hMGFjNTJlZDhmNzkKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQ1ZFOiBDVkUtMjAxNi0xMDAwMTEwCi1TaWduZWQtb2ZmLWJ5OiBNaW5nbGkgWXUgPE1pbmdsaS5ZdUB3aW5kcml2ZXIuY29tPgotLS0tCi0gRG9jL2hvd3RvL3VybGxpYjIucnN0ICAgICAgICAgIHwgIDUgKysrKysKLSBEb2MvbGlicmFyeS91cmxsaWIucmVxdWVzdC5yc3QgfCAxNyArKysrKysrKysrKysrKysrLQotIExpYi90ZXN0L3Rlc3RfdXJsbGliLnB5ICAgICAgICB8IDE0ICsrKysrKysrKysrKystCi0gTGliL3VybGxpYi9yZXF1ZXN0LnB5ICAgICAgICAgIHwgIDYgKysrKysrCi0gTWlzYy9ORVdTICAgICAgICAgICAgICAgICAgICAgIHwgIDQgKysrKwotIDUgZmlsZXMgY2hhbmdlZCwgNDQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL0RvYy9ob3d0by91cmxsaWIyLnJzdCBiL0RvYy9ob3d0by91cmxsaWIyLnJzdAotaW5kZXggMjRhNDE1Ni4uZDJjNzk5MSAxMDA2NDQKLS0tLSBhL0RvYy9ob3d0by91cmxsaWIyLnJzdAotKysrIGIvRG9jL2hvd3RvL3VybGxpYjIucnN0Ci1AQCAtNTM4LDYgKzUzOCwxMSBAQCBzZXR0aW5nIHVwIGEgYEJhc2ljIEF1dGhlbnRpY2F0aW9uYF8gaGFuZGxlcjogOjoKLSAgICAgdGhyb3VnaCBhIHByb3h5LiAgSG93ZXZlciwgdGhpcyBjYW4gYmUgZW5hYmxlZCBieSBleHRlbmRpbmcgdXJsbGliLnJlcXVlc3QgYXMKLSAgICAgc2hvd24gaW4gdGhlIHJlY2lwZSBbI11fLgotIAotKy4uIG5vdGU6OgotKwotKyAgICBgYEhUVFBfUFJPWFlgYCB3aWxsIGJlIGlnbm9yZWQgaWYgYSB2YXJpYWJsZSBgYFJFUVVFU1RfTUVUSE9EYGAgaXMgc2V0OyBzZWUKLSsgICAgdGhlIGRvY3VtZW50YXRpb24gb24gOmZ1bmM6YH51cmxsaWIucmVxdWVzdC5nZXRwcm94aWVzYC4KLSsKLSAKLSBTb2NrZXRzIGFuZCBMYXllcnMKLSA9PT09PT09PT09PT09PT09PT0KLWRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91cmxsaWIucmVxdWVzdC5yc3QgYi9Eb2MvbGlicmFyeS91cmxsaWIucmVxdWVzdC5yc3QKLWluZGV4IDEzMzg5MDYuLjEyOTFhZWIgMTAwNjQ0Ci0tLS0gYS9Eb2MvbGlicmFyeS91cmxsaWIucmVxdWVzdC5yc3QKLSsrKyBiL0RvYy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0LnJzdAotQEAgLTE3Myw2ICsxNzMsMTYgQEAgVGhlIDptb2Q6YHVybGxpYi5yZXF1ZXN0YCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKLSAgICBJZiBib3RoIGxvd2VyY2FzZSBhbmQgdXBwZXJjYXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyBleGlzdCAoYW5kIGRpc2FncmVlKSwKLSAgICBsb3dlcmNhc2UgaXMgcHJlZmVycmVkLgotIAotKyAgICAuLiBub3RlOjoKLSsKLSsgICAgICAgSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGBgUkVRVUVTVF9NRVRIT0RgYCBpcyBzZXQsIHdoaWNoIHVzdWFsbHkKLSsgICAgICAgaW5kaWNhdGVzIHlvdXIgc2NyaXB0IGlzIHJ1bm5pbmcgaW4gYSBDR0kgZW52aXJvbm1lbnQsIHRoZSBlbnZpcm9ubWVudAotKyAgICAgICB2YXJpYWJsZSBgYEhUVFBfUFJPWFlgYCAodXBwZXJjYXNlIGBgX1BST1hZYGApIHdpbGwgYmUgaWdub3JlZC4gVGhpcyBpcwotKyAgICAgICBiZWNhdXNlIHRoYXQgdmFyaWFibGUgY2FuIGJlIGluamVjdGVkIGJ5IGEgY2xpZW50IHVzaW5nIHRoZSAiUHJveHk6IiBIVFRQCi0rICAgICAgIGhlYWRlci4gSWYgeW91IG5lZWQgdG8gdXNlIGFuIEhUVFAgcHJveHkgaW4gYSBDR0kgZW52aXJvbm1lbnQsIGVpdGhlciB1c2UKLSsgICAgICAgYGBQcm94eUhhbmRsZXJgYCBleHBsaWNpdGx5LCBvciBtYWtlIHN1cmUgdGhlIHZhcmlhYmxlIG5hbWUgaXMgaW4KLSsgICAgICAgbG93ZXJjYXNlIChvciBhdCBsZWFzdCB0aGUgYGBfcHJveHlgYCBzdWZmaXgpLgotKwotIAotIFRoZSBmb2xsb3dpbmcgY2xhc3NlcyBhcmUgcHJvdmlkZWQ6Ci0gCi1AQCAtMjgwLDYgKzI5MCwxMSBAQCBUaGUgZm9sbG93aW5nIGNsYXNzZXMgYXJlIHByb3ZpZGVkOgotICAgIGxpc3Qgb2YgaG9zdG5hbWUgc3VmZml4ZXMsIG9wdGlvbmFsbHkgd2l0aCBgYDpwb3J0YGAgYXBwZW5kZWQsIGZvciBleGFtcGxlCi0gICAgYGBjZXJuLmNoLG5jc2EudWl1Yy5lZHUsc29tZS5ob3N0OjgwODBgYC4KLSAKLSsgICAgLi4gbm90ZTo6Ci0rCi0rICAgICAgIGBgSFRUUF9QUk9YWWBgIHdpbGwgYmUgaWdub3JlZCBpZiBhIHZhcmlhYmxlIGBgUkVRVUVTVF9NRVRIT0RgYCBpcyBzZXQ7Ci0rICAgICAgIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvbiA6ZnVuYzpgfnVybGxpYi5yZXF1ZXN0LmdldHByb3hpZXNgLgotKwotIAotIC4uIGNsYXNzOjogSFRUUFBhc3N3b3JkTWdyKCkKLSAKLUBAIC0xMTM4LDcgKzExNTMsNyBAQCB0aGUgcmV0dXJuZWQgYnl0ZXMgb2JqZWN0IHRvIHN0cmluZyBvbmNlIGl0IGRldGVybWluZXMgb3IgZ3Vlc3NlcwotIHRoZSBhcHByb3ByaWF0ZSBlbmNvZGluZy4KLSAKLSBUaGUgZm9sbG93aW5nIFczQyBkb2N1bWVudCwgaHR0cHM6Ly93d3cudzMub3JnL0ludGVybmF0aW9uYWwvTy1jaGFyc2V0XCAsIGxpc3RzCi0tdGhlIHZhcmlvdXMgd2F5cyBpbiB3aGljaCBhIChYKUhUTUwgb3IgYSBYTUwgZG9jdW1lbnQgY291bGQgaGF2ZSBzcGVjaWZpZWQgaXRzCi0rdGhlIHZhcmlvdXMgd2F5cyBpbiB3aGljaCBhbiAoWClIVE1MIG9yIGFuIFhNTCBkb2N1bWVudCBjb3VsZCBoYXZlIHNwZWNpZmllZCBpdHMKLSBlbmNvZGluZyBpbmZvcm1hdGlvbi4KLSAKLSBBcyB0aGUgcHl0aG9uLm9yZyB3ZWJzaXRlIHVzZXMgKnV0Zi04KiBlbmNvZGluZyBhcyBzcGVjaWZpZWQgaW4gaXRzIG1ldGEgdGFnLCB3ZQotZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5IGIvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKLWluZGV4IDVkMDVmOGQuLjI0NzU5OGEgMTAwNjQ0Ci0tLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYi5weQotKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKLUBAIC0xLDQgKzEsNCBAQAotLSIiIlJlZ3Jlc3NzaW9uIHRlc3RzIGZvciB3aGF0IHdhcyBpbiBQeXRob24gMidzICJ1cmxsaWIiIG1vZHVsZSIiIgotKyIiIlJlZ3Jlc3Npb24gdGVzdHMgZm9yIHdoYXQgd2FzIGluIFB5dGhvbiAyJ3MgInVybGxpYiIgbW9kdWxlIiIiCi0gCi0gaW1wb3J0IHVybGxpYi5wYXJzZQotIGltcG9ydCB1cmxsaWIucmVxdWVzdAotQEAgLTIzMiw2ICsyMzIsMTggQEAgY2xhc3MgUHJveHlUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICBzZWxmLmFzc2VydFRydWUodXJsbGliLnJlcXVlc3QucHJveHlfYnlwYXNzX2Vudmlyb25tZW50KCdhbm90aGVyZG9tYWluLmNvbTo4ODg4JykpCi0gICAgICAgICBzZWxmLmFzc2VydFRydWUodXJsbGliLnJlcXVlc3QucHJveHlfYnlwYXNzX2Vudmlyb25tZW50KCduZXdkb21haW4uY29tOjEyMzQnKSkKLSAKLSsgICAgZGVmIHRlc3RfcHJveHlfY2dpX2lnbm9yZShzZWxmKToKLSsgICAgICAgIHRyeToKLSsgICAgICAgICAgICBzZWxmLmVudi5zZXQoJ0hUVFBfUFJPWFknLCAnaHR0cDovL3NvbWV3aGVyZTozMTI4JykKLSsgICAgICAgICAgICBwcm94aWVzID0gdXJsbGliLnJlcXVlc3QuZ2V0cHJveGllc19lbnZpcm9ubWVudCgpCi0rICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaHR0cDovL3NvbWV3aGVyZTozMTI4JywgcHJveGllc1snaHR0cCddKQotKyAgICAgICAgICAgIHNlbGYuZW52LnNldCgnUkVRVUVTVF9NRVRIT0QnLCAnR0VUJykKLSsgICAgICAgICAgICBwcm94aWVzID0gdXJsbGliLnJlcXVlc3QuZ2V0cHJveGllc19lbnZpcm9ubWVudCgpCi0rICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignaHR0cCcsIHByb3hpZXMpCi0rICAgICAgICBmaW5hbGx5OgotKyAgICAgICAgICAgIHNlbGYuZW52LnVuc2V0KCdSRVFVRVNUX01FVEhPRCcpCi0rICAgICAgICAgICAgc2VsZi5lbnYudW5zZXQoJ0hUVFBfUFJPWFknKQotKwotICAgICBkZWYgdGVzdF9wcm94eV9ieXBhc3NfZW52aXJvbm1lbnRfaG9zdF9tYXRjaChzZWxmKToKLSAgICAgICAgIGJ5cGFzcyA9IHVybGxpYi5yZXF1ZXN0LnByb3h5X2J5cGFzc19lbnZpcm9ubWVudAotICAgICAgICAgc2VsZi5lbnYuc2V0KCdOT19QUk9YWScsCi1kaWZmIC0tZ2l0IGEvTGliL3VybGxpYi9yZXF1ZXN0LnB5IGIvTGliL3VybGxpYi9yZXF1ZXN0LnB5Ci1pbmRleCAxNzMxZmUzLi4zYmUzMjdkIDEwMDY0NAotLS0tIGEvTGliL3VybGxpYi9yZXF1ZXN0LnB5Ci0rKysgYi9MaWIvdXJsbGliL3JlcXVlc3QucHkKLUBAIC0yNDEyLDYgKzI0MTIsMTIgQEAgZGVmIGdldHByb3hpZXNfZW52aXJvbm1lbnQoKToKLSAgICAgICAgIG5hbWUgPSBuYW1lLmxvd2VyKCkKLSAgICAgICAgIGlmIHZhbHVlIGFuZCBuYW1lWy02Ol0gPT0gJ19wcm94eSc6Ci0gICAgICAgICAgICAgcHJveGllc1tuYW1lWzotNl1dID0gdmFsdWUKLSsgICAgIyBDVkUtMjAxNi0xMDAwMTEwIC0gSWYgd2UgYXJlIHJ1bm5pbmcgYXMgQ0dJIHNjcmlwdCwgZm9yZ2V0IEhUVFBfUFJPWFkKLSsgICAgIyAobm9uLWFsbC1sb3dlcmNhc2UpIGFzIGl0IG1heSBiZSBzZXQgZnJvbSB0aGUgd2ViIHNlcnZlciBieSBhICJQcm94eToiCi0rICAgICMgaGVhZGVyIGZyb20gdGhlIGNsaWVudAotKyAgICAjIElmICJwcm94eSIgaXMgbG93ZXJjYXNlLCBpdCB3aWxsIHN0aWxsIGJlIHVzZWQgdGhhbmtzIHRvIHRoZSBuZXh0IGJsb2NrCi0rICAgIGlmICdSRVFVRVNUX01FVEhPRCcgaW4gb3MuZW52aXJvbjoKLSsgICAgICAgIHByb3hpZXMucG9wKCdodHRwJywgTm9uZSkKLSAgICAgZm9yIG5hbWUsIHZhbHVlIGluIG9zLmVudmlyb24uaXRlbXMoKToKLSAgICAgICAgIGlmIG5hbWVbLTY6XSA9PSAnX3Byb3h5JzoKLSAgICAgICAgICAgICBuYW1lID0gbmFtZS5sb3dlcigpCi1kaWZmIC0tZ2l0IGEvTWlzYy9ORVdTIGIvTWlzYy9ORVdTCi1pbmRleCA0YWQyNTUxLi4yZmNjOTViIDEwMDY0NAotLS0tIGEvTWlzYy9ORVdTCi0rKysgYi9NaXNjL05FV1MKLUBAIC0zMjksNiArMzI5LDEwIEBAIExpYnJhcnkKLSAtIElzc3VlICMyNjY0NDogUmFpc2UgVmFsdWVFcnJvciByYXRoZXIgdGhhbiBTeXN0ZW1FcnJvciB3aGVuIGEgbmVnYXRpdmUKLSAgIGxlbmd0aCBpcyBwYXNzZWQgdG8gU1NMU29ja2V0LnJlY3YoKSBvciByZWFkKCkuCi0gCi0rLSBJc3N1ZSAjMjc1Njg6IFByZXZlbnQgSFRUUG94eSBhdHRhY2sgKENWRS0yMDE2LTEwMDAxMTApLiBJZ25vcmUgdGhlCi0rICBIVFRQX1BST1hZIHZhcmlhYmxlIHdoZW4gUkVRVUVTVF9NRVRIT0QgZW52aXJvbm1lbnQgaXMgc2V0LCB3aGljaCBpbmRpY2F0ZXMKLSsgIHRoYXQgdGhlIHNjcmlwdCBpcyBpbiBDR0kgbW9kZS4KLSsKLSAtIElzc3VlICMyMzgwNDogRml4IFNTTCByZWN2KDApIGFuZCByZWFkKDApIG1ldGhvZHMgdG8gcmV0dXJuIHplcm8gYnl0ZXMKLSAgIGluc3RlYWQgb2YgdXAgdG8gMTAyNC4KLSAKLS0tIAotMi44LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zdXBwb3J0X1NPVVJDRV9EQVRFX0VQT0NIX2luX3B5X2NvbXBpbGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3N1cHBvcnRfU09VUkNFX0RBVEVfRVBPQ0hfaW5fcHlfY29tcGlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmVjYWI5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zdXBwb3J0X1NPVVJDRV9EQVRFX0VQT0NIX2luX3B5X2NvbXBpbGUucGF0Y2gKQEAgLTAsMCArMSw5NyBAQAorVGhlIGNvbXBpbGVkIC5weWMgZmlsZXMgY29udGFpbiB0aW1lIHN0YW1wIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNvbXBpbGUgdGltZS4KK1RoaXMgcHJldmVudHMgYmluYXJ5IHJlcHJvZHVjaWJpbGl0eS4gVGhpcyBwYXRjaCBhbGxvd3MgdG8gYWNoaWV2ZSBiaW5hcnkKK3JlcHJvZHVjaWJpbGl0eSBieSBvdmVycmlkaW5nIHRoZSBidWlsZCB0aW1lIHN0YW1wIGJ5IHRoZSB2YWx1ZSAKK2V4cG9ydGVkIHZpYSBTT1VSQ0VfREFURV9FUE9DSC4gCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogSnVybyBCeXN0cmlja3kgPGp1cm8uYnlzdHJpY2t5QGludGVsLmNvbT4KKworCitGcm9tIGFlYWI0ODg2MzBmZGIxYjU2YThkMGIwYzEzZmE4ODcwNmIyYWZlOWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiQmVybmhhcmQgTS4gV2llZGVtYW5uIiA8YndpZWRlbWFubkBzdXNlLmRlPgorRGF0ZTogU2F0LCAyNSBGZWIgMjAxNyAwNjo0MjoyOCArMDEwMAorU3ViamVjdDogW1BBVENIXSBicG8tMjk3MDg6IHN1cHBvcnQgU09VUkNFX0RBVEVfRVBPQ0ggZW52IHZhciBpbiBweV9jb21waWxlCisKK3RvIGFsbG93IGZvciByZXByb2R1Y2libGUgYnVpbGRzIG9mIHB5dGhvbiBwYWNrYWdlcworCitTZWUgaHR0cHM6Ly9yZXByb2R1Y2libGUtYnVpbGRzLm9yZy8gZm9yIHdoeSB0aGlzIGlzIGdvb2QKK2FuZCBodHRwczovL3JlcHJvZHVjaWJsZS1idWlsZHMub3JnL3NwZWNzL3NvdXJjZS1kYXRlLWVwb2NoLworZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgdmFyaWFibGUuCisKK0JhY2tncm91bmQ6CitJbiBzb21lIGRpc3RyaWJ1dGlvbnMgbGlrZSBvcGVuU1VTRSwgYmluYXJ5IHJwbXMgY29udGFpbiBwcmVjb21waWxlZCAucHljIGZpbGVzLgorCitBbmQgcGFja2FnZXMgbGlrZSBhbXFwIG9yIHR3aXN0ZWQgZHluYW1pY2FsbHkgZ2VuZXJhdGUgLnB5IGZpbGVzIGF0IGJ1aWxkIHRpbWUKK3NvIHRob3NlIGhhdmUgdGhlIGN1cnJlbnQgdGltZSBhbmQgdGhhdCB0aW1lc3RhbXAgZ2V0cyBlbWJlZGRlZAoraW50byB0aGUgLnB5YyBmaWxlIGhlYWRlci4KK1doZW4gd2UgdGhlbiBhZGFwdCBmaWxlIHRpbWVzdGFtcHMgaW4gcnBtcyB0byBiZSBjb25zdGFudCwKK3RoZSB0aW1lc3RhbXAgaW4gdGhlIC5weWMgaGVhZGVyIHdpbGwgbm8gbW9yZSBtYXRjaAordGhlIC5weSB0aW1lc3RhbXAgaW4gdGhlIGZpbGVzeXN0ZW0uCitUaGUgc29mdHdhcmUgd2lsbCBzdGlsbCB3b3JrLCBidXQgaXQgd2lsbCBub3QgdXNlIHRoZSAucHljIGZpbGUgYXMgaXQgc2hvdWxkLgorLS0tCisgRG9jL2xpYnJhcnkvcHlfY29tcGlsZS5yc3QgIHwgIDQgKysrKworIExpYi9weV9jb21waWxlLnB5ICAgICAgICAgICB8ICA0ICsrKysKKyBMaWIvdGVzdC90ZXN0X3B5X2NvbXBpbGUucHkgfCAxOSArKysrKysrKysrKysrKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9weV9jb21waWxlLnJzdCBiL0RvYy9saWJyYXJ5L3B5X2NvbXBpbGUucnN0CitpbmRleCAwYWY4ZmIxLi44NDFmM2U4IDEwMDY0NAorLS0tIGEvRG9jL2xpYnJhcnkvcHlfY29tcGlsZS5yc3QKKysrKyBiL0RvYy9saWJyYXJ5L3B5X2NvbXBpbGUucnN0CitAQCAtNTMsNiArNTMsMTAgQEAgYnl0ZS1jb2RlIGNhY2hlIGZpbGVzIGluIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgc291cmNlIGNvZGUuCisgICAgOmZ1bmM6YGNvbXBpbGVgIGZ1bmN0aW9uLiAgVGhlIGRlZmF1bHQgb2YgYGAtMWBgIHNlbGVjdHMgdGhlIG9wdGltaXphdGlvbgorICAgIGxldmVsIG9mIHRoZSBjdXJyZW50IGludGVycHJldGVyLgorIAorKyAgIElmIHRoZSBTT1VSQ0VfREFURV9FUE9DSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIHRoZSAucHkgZmlsZSBtdGltZQorKyAgIGFuZCB0aW1lc3RhbXAgZW50cnkgaW4gLnB5YyBmaWxlIGhlYWRlciwgd2lsbCBiZSBsaW1pdGVkIHRvIHRoaXMgdmFsdWUuCisrICAgU2VlIGh0dHBzOi8vcmVwcm9kdWNpYmxlLWJ1aWxkcy5vcmcvc3BlY3Mvc291cmNlLWRhdGUtZXBvY2gvIGZvciBtb3JlIGluZm8uCisrCisgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgICBDaGFuZ2VkIGRlZmF1bHQgdmFsdWUgb2YgKmNmaWxlKiB0byBiZSA6UEVQOmAzMTQ3YC1jb21wbGlhbnQuICBQcmV2aW91cworICAgICAgIGRlZmF1bHQgd2FzICpmaWxlKiArIGBgJ2MnYGAgKGBgJ28nYGAgaWYgb3B0aW1pemF0aW9uIHdhcyBlbmFibGVkKS4KK2RpZmYgLS1naXQgYS9MaWIvcHlfY29tcGlsZS5weSBiL0xpYi9weV9jb21waWxlLnB5CitpbmRleCAxMWM1YjUwLi42MmRjZGM3IDEwMDY0NAorLS0tIGEvTGliL3B5X2NvbXBpbGUucHkKKysrKyBiL0xpYi9weV9jb21waWxlLnB5CitAQCAtMTM3LDYgKzEzNywxMCBAQCBkZWYgY29tcGlsZShmaWxlLCBjZmlsZT1Ob25lLCBkZmlsZT1Ob25lLCBkb3JhaXNlPUZhbHNlLCBvcHRpbWl6ZT0tMSk6CisgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CisgICAgICAgICBwYXNzCisgICAgIHNvdXJjZV9zdGF0cyA9IGxvYWRlci5wYXRoX3N0YXRzKGZpbGUpCisrICAgIHNkZSA9IG9zLmVudmlyb24uZ2V0KCdTT1VSQ0VfREFURV9FUE9DSCcpCisrICAgIGlmIHNkZSBhbmQgc291cmNlX3N0YXRzWydtdGltZSddID4gaW50KHNkZSk6CisrICAgICAgICBzb3VyY2Vfc3RhdHNbJ210aW1lJ10gPSBpbnQoc2RlKQorKyAgICAgICAgb3MudXRpbWUoZmlsZSwgKHNvdXJjZV9zdGF0c1snbXRpbWUnXSwgc291cmNlX3N0YXRzWydtdGltZSddKSkKKyAgICAgYnl0ZWNvZGUgPSBpbXBvcnRsaWIuX2Jvb3RzdHJhcF9leHRlcm5hbC5fY29kZV90b19ieXRlY29kZSgKKyAgICAgICAgICAgICBjb2RlLCBzb3VyY2Vfc3RhdHNbJ210aW1lJ10sIHNvdXJjZV9zdGF0c1snc2l6ZSddKQorICAgICBtb2RlID0gaW1wb3J0bGliLl9ib290c3RyYXBfZXh0ZXJuYWwuX2NhbGNfbW9kZShmaWxlKQorZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHlfY29tcGlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfcHlfY29tcGlsZS5weQoraW5kZXggNGE2Y2FhNS4uM2QwOTk2MyAxMDA2NDQKKy0tLSBhL0xpYi90ZXN0L3Rlc3RfcHlfY29tcGlsZS5weQorKysrIGIvTGliL3Rlc3QvdGVzdF9weV9jb21waWxlLnB5CitAQCAtOTgsNiArOTgsMjUgQEAgZGVmIHRlc3RfYmFkX2NvZGluZyhzZWxmKToKKyAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoCisgICAgICAgICAgICAgaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoYmFkX2NvZGluZykpKQorIAorKyAgICBkZWYgdGVzdF9zb3VyY2VfZGF0ZV9lcG9jaChzZWxmKToKKysgICAgICAgIHRlc3R0aW1lID0gMTIzNDU2Nzg5CisrICAgICAgICBvcmlnX3NkZSA9IG9zLmdldGVudigiU09VUkNFX0RBVEVfRVBPQ0giKQorKyAgICAgICAgb3MuZW52aXJvblsiU09VUkNFX0RBVEVfRVBPQ0giXSA9IHN0cih0ZXN0dGltZSkKKysgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShzZWxmLnNvdXJjZV9wYXRoLCBzZWxmLnB5Y19wYXRoKQorKyAgICAgICAgaWYgb3JpZ19zZGU6CisrICAgICAgICAgICAgb3MuZW52aXJvblsiU09VUkNFX0RBVEVfRVBPQ0giXSA9IG9yaWdfc2RlCisrICAgICAgICBlbHNlOgorKyAgICAgICAgICAgIGRlbCBvcy5lbnZpcm9uWyJTT1VSQ0VfREFURV9FUE9DSCJdCisrICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5weWNfcGF0aCkpCisrICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHNlbGYuY2FjaGVfcGF0aCkpCisrICAgICAgICBzdGF0aW5mbyA9IG9zLnN0YXQoc2VsZi5zb3VyY2VfcGF0aCkKKysgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGluZm8uc3RfbXRpbWUsIHRlc3R0aW1lKQorKyAgICAgICAgZiA9IG9wZW4oc2VsZi5weWNfcGF0aCwgInJiIikKKysgICAgICAgIGYucmVhZCg0KQorKyAgICAgICAgdGltZWJ5dGVzID0gZi5yZWFkKDQpICMgcmVhZCB0aW1lc3RhbXAgZnJvbSBweWMgaGVhZGVyCisrICAgICAgICBmLmNsb3NlKCkKKysgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZWJ5dGVzLCAodGVzdHRpbWUpLnRvX2J5dGVzKDQsICdsaXR0bGUnKSkKKysKKyAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPiAwLCAndGVzdCBkb2VzIG5vdCB3b3JrIHdpdGggLU8nKQorICAgICBkZWYgdGVzdF9kb3VibGVfZG90X25vX2Nsb2JiZXIoc2VsZik6CisgICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMjk2NgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy91cHN0cmVhbS1yYW5kb20tZml4ZXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3Vwc3RyZWFtLXJhbmRvbS1maXhlcy5wYXRjaAppbmRleCAwZDkxNTJjLi45YjQwZThhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3Vwc3RyZWFtLXJhbmRvbS1maXhlcy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3Vwc3RyZWFtLXJhbmRvbS1maXhlcy5wYXRjaApAQCAtMSwyMSArMSw3IEBACi1UaGlzIHBhdGNoIHVwZGF0ZXMgcmFuZG9tLmMgdG8gbWF0Y2ggdXBzdHJlYW0gcHl0aG9uJ3MgY29kZSBhdCByZXZpc2lvbiAKLTgxMjVkOWE4MTUyYi4gVGhpcyBhZGRyZXNzZXMgdmFyaW91cyBpc3N1ZXMgYXJvdW5kIHByb2JsZW1zIHdpdGggZ2xpYmMgMi4yNCAKLWFuZCAyLjI1IHN1Y2ggdGhhdCBweXRob24gd291bGQgZmFpbCB0byBzdGFydCB3aXRoOgotCi1bcnB1cmRpZUBjZW50b3M3IH5dJCAvdG1wL3QyL3N5c3Jvb3RzL3g4Nl82NC1wb2t5c2RrLWxpbnV4L3Vzci9iaW4vcHl0aG9uMwotRmF0YWwgUHl0aG9uIGVycm9yOiBnZXRlbnRyb3B5KCkgZmFpbGVkCi1BYm9ydGVkCi0KLSh0YWtlbiBmcm9tIG91ciBidWlsZHRvb2xzLXRhcmJhbGwgYWxzbyBicmVha3MgZVNESykKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi0jIEhHIGNoYW5nZXNldCBwYXRjaAotIyBVc2VyIFZpY3RvciBTdGlubmVyIDx2aWN0b3Iuc3Rpbm5lckBnbWFpbC5jb20+Ci0jIERhdGUgMTQ4Mzk1NzEzMyAtMzYwMAotIyBOb2RlIElEIDgxMjVkOWE4MTUyYjc5ZTcxMmNiMDljNzA5NGI5MTI5YjliY2VhODYKLSMgUGFyZW50ICAzMzc0NjE1NzRjOTAyODE2MzA3NTFiNjA5NWM0ZTFiYWYzODBjZjdkCi1Jc3N1ZSAjMjkxNTc6IFByZWZlciBnZXRyYW5kb20oKSBvdmVyIGdldGVudHJvcHkoKQorRnJvbSAwMzViYTVkYTNlNTNlNDVjNzEyYjM5ZmUxZjZmYjc0M2U2OTdjMDMyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVmljdG9yIFN0aW5uZXIgPHZpY3Rvci5zdGlubmVyQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgOSBKYW4gMjAxNyAxMToxODo1MyArMDEwMAorU3ViamVjdDogW1BBVENIXSBJc3N1ZSAjMjkxNTc6IFByZWZlciBnZXRyYW5kb20oKSBvdmVyIGdldGVudHJvcHkoKQogCiBDb3B5IGFuZCB0aGVuIGFkYXB0IFB5dGhvbi9yYW5kb20uYyBmcm9tIGRlZmF1bHQgYnJhbmNoLiBEaWZmZXJlbmNlIGJldHdlZW4gMy41CiBhbmQgZGVmYXVsdCBicmFuY2hlczoKQEAgLTI2LDEyICsxMiwxNyBAQAogKiBQeXRob24gMy41IGhhcyBubyBfUHlPU19VUmFuZG9tTm9uYmxvY2soKSBmdW5jdGlvbjogX1B5T1NfVVJhbmRvbSgpCiAgIHdvcmtzIGluIG5vbi1ibG9ja2luZyBtb2RlIG9uIFB5dGhvbiAzLjUKIAotUlAgMjAxNy8xLzIyCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtodHRwczovL2dpdGh1Yi5jb20vcHl0aG9uL2NweXRob24vY29tbWl0LzAzNWJhNWRhM2U1M2U0NWM3MTJiMzlmZTFmNmZiNzQzZTY5N2MwMzJdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPgogCi1JbmRleDogUHl0aG9uLTMuNS4yL1B5dGhvbi9yYW5kb20uYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIFB5dGhvbi0zLjUuMi5vcmlnL1B5dGhvbi9yYW5kb20uYwotKysrIFB5dGhvbi0zLjUuMi9QeXRob24vcmFuZG9tLmMKKy0tLQorIFB5dGhvbi9yYW5kb20uYyB8IDQ5NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyOTQgaW5zZXJ0aW9ucygrKSwgMjAwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvUHl0aG9uL3JhbmRvbS5jIGIvUHl0aG9uL3JhbmRvbS5jCitpbmRleCBkMjAzOTM5Li4zMWY2MWQwIDEwMDY0NAorLS0tIGEvUHl0aG9uL3JhbmRvbS5jCisrKysgYi9QeXRob24vcmFuZG9tLmMKIEBAIC0xLDYgKzEsOSBAQAogICNpbmNsdWRlICJQeXRob24uaCIKICAjaWZkZWYgTVNfV0lORE9XUwpAQCAtNDIsNyArMzMsNyBAQAogICNlbHNlCiAgIyAgaW5jbHVkZSA8ZmNudGwuaD4KICAjICBpZmRlZiBIQVZFX1NZU19TVEFUX0gKLUBAIC0zNiwxMCArMzksOSBAQCB3aW4zMl91cmFuZG9tX2luaXQoaW50IHJhaXNlKQorQEAgLTM3LDEwICs0MCw5IEBAIHdpbjMyX3VyYW5kb21faW5pdChpbnQgcmFpc2UpCiAgICAgIHJldHVybiAwOwogIAogIGVycm9yOgpAQCAtNTUsNyArNDYsNyBAQAogICAgICByZXR1cm4gLTE7CiAgfQogIAotQEAgLTUyLDggKzU0LDkgQEAgd2luMzJfdXJhbmRvbSh1bnNpZ25lZCBjaGFyICpidWZmZXIsIFB5XworQEAgLTUzLDggKzU1LDkgQEAgd2luMzJfdXJhbmRvbSh1bnNpZ25lZCBjaGFyICpidWZmZXIsIFB5X3NzaXplX3Qgc2l6ZSwgaW50IHJhaXNlKQogIAogICAgICBpZiAoaENyeXB0UHJvdiA9PSAwKQogICAgICB7CkBAIC02Niw3ICs1Nyw3IEBACiAgICAgIH0KICAKICAgICAgd2hpbGUgKHNpemUgPiAwKQotQEAgLTYyLDExICs2NSw5IEBAIHdpbjMyX3VyYW5kb20odW5zaWduZWQgY2hhciAqYnVmZmVyLCBQeV8KK0BAIC02MywxMSArNjYsOSBAQCB3aW4zMl91cmFuZG9tKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgUHlfc3NpemVfdCBzaXplLCBpbnQgcmFpc2UpCiAgICAgICAgICBpZiAoIUNyeXB0R2VuUmFuZG9tKGhDcnlwdFByb3YsIChEV09SRCljaHVuaywgYnVmZmVyKSkKICAgICAgICAgIHsKICAgICAgICAgICAgICAvKiBDcnlwdEdlblJhbmRvbSgpIGZhaWxlZCAqLwpAQCAtODAsNyArNzEsNyBAQAogICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgIH0KICAgICAgICAgIGJ1ZmZlciArPSBjaHVuazsKLUBAIC03NSw1NSArNzYsMjkgQEAgd2luMzJfdXJhbmRvbSh1bnNpZ25lZCBjaGFyICpidWZmZXIsIFB5XworQEAgLTc2LDU4ICs3NywyMyBAQCB3aW4zMl91cmFuZG9tKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgUHlfc3NpemVfdCBzaXplLCBpbnQgcmFpc2UpCiAgICAgIHJldHVybiAwOwogIH0KICAKQEAgLTEyOSwxMyArMTIwLDE5IEBACiAgI2lmIGRlZmluZWQoSEFWRV9HRVRSQU5ET00pIHx8IGRlZmluZWQoSEFWRV9HRVRSQU5ET01fU1lTQ0FMTCkKICAjZGVmaW5lIFBZX0dFVFJBTkRPTSAxCiAgCistLyogQ2FsbCBnZXRyYW5kb20oKQogKy8qIENhbGwgZ2V0cmFuZG9tKCkgdG8gZ2V0IHJhbmRvbSBieXRlczoKICsKLSsgICAtIFJldHVybiAxIG9uIHN1Y2Nlc3MKKyAgICAtIFJldHVybiAxIG9uIHN1Y2Nlc3MKKy0gICAtIFJldHVybiAwIGlmIGdldHJhbmRvbSgpIHN5c2NhbGwgaXMgbm90IGF2YWlsYWJsZSAoZmFpbGVkIHdpdGggRU5PU1lTIG9yCistICAgICBFUEVSTSkgb3IgaWYgZ2V0cmFuZG9tKEdSTkRfTk9OQkxPQ0spIGZhaWxlZCB3aXRoIEVBR0FJTiAoc3lzdGVtIHVyYW5kb20KKy0gICAgIG5vdCBpbml0aWFsaXplZCB5ZXQpIGFuZCByYWlzZT0wLgogKyAgIC0gUmV0dXJuIDAgaWYgZ2V0cmFuZG9tKCkgaXMgbm90IGF2YWlsYWJsZSAoZmFpbGVkIHdpdGggRU5PU1lTIG9yIEVQRVJNKSwKICsgICAgIG9yIGlmIGdldHJhbmRvbShHUk5EX05PTkJMT0NLKSBmYWlsZWQgd2l0aCBFQUdBSU4gKHN5c3RlbSB1cmFuZG9tIG5vdAogKyAgICAgaW5pdGlhbGl6ZWQgeWV0KS4KLSsgICAtIFJhaXNlIGFuIGV4Y2VwdGlvbiAoaWYgcmFpc2UgaXMgbm9uLXplcm8pIGFuZCByZXR1cm4gLTEgb24gZXJyb3I6CisgICAgLSBSYWlzZSBhbiBleGNlcHRpb24gKGlmIHJhaXNlIGlzIG5vbi16ZXJvKSBhbmQgcmV0dXJuIC0xIG9uIGVycm9yOgorLSAgICAgZ2V0cmFuZG9tKCkgZmFpbGVkIHdpdGggRUlOVFIgYW5kIHRoZSBQeXRob24gc2lnbmFsIGhhbmRsZXIgcmFpc2VkIGFuCistICAgICBleGNlcHRpb24sIG9yIGdldHJhbmRvbSgpIGZhaWxlZCB3aXRoIGEgZGlmZmVyZW50IGVycm9yLiAqLwogKyAgICAgaWYgZ2V0cmFuZG9tKCkgZmFpbGVkIHdpdGggRUlOVFIsIHJhaXNlIGlzIG5vbi16ZXJvIGFuZCB0aGUgUHl0aG9uIHNpZ25hbAogKyAgICAgaGFuZGxlciByYWlzZWQgYW4gZXhjZXB0aW9uLCBvciBpZiBnZXRyYW5kb20oKSBmYWlsZWQgd2l0aCBhIGRpZmZlcmVudAogKyAgICAgZXJyb3IuCkBAIC0xNDQsMjYgKzE0MSwxNiBAQAogIHN0YXRpYyBpbnQKICBweV9nZXRyYW5kb20odm9pZCAqYnVmZmVyLCBQeV9zc2l6ZV90IHNpemUsIGludCByYWlzZSkKICB7Ci0tICAgIC8qIElzIGdldHJhbmRvbSgpIHN1cHBvcnRlZCBieSB0aGUgcnVubmluZyBrZXJuZWw/Ci0tICAgICAqIE5lZWQgTGludXgga2VybmVsIDMuMTcgb3IgbmV3ZXIsIG9yIFNvbGFyaXMgMTEuMyBvciBuZXdlciAqLwotKyAgICAvKiBJcyBnZXRyYW5kb20oKSBzdXBwb3J0ZWQgYnkgdGhlIHJ1bm5pbmcga2VybmVsPyBTZXQgdG8gMCBpZiBnZXRyYW5kb20oKQotKyAgICAgICBmYWlsZWQgd2l0aCBFTk9TWVMgb3IgRVBFUk0uIE5lZWQgTGludXgga2VybmVsIDMuMTcgb3IgbmV3ZXIsIG9yIFNvbGFyaXMKLSsgICAgICAgMTEuMyBvciBuZXdlciAqLwotICAgICBzdGF0aWMgaW50IGdldHJhbmRvbV93b3JrcyA9IDE7Ci0gCi0gICAgIC8qIGdldHJhbmRvbSgpIG9uIExpbnV4IHdpbGwgYmxvY2sgaWYgY2FsbGVkIGJlZm9yZSB0aGUga2VybmVsIGhhcwotQEAgLTEzMiw4NCArMTA3LDE2NSBAQCBweV9nZXRyYW5kb20odm9pZCAqYnVmZmVyLCBQeV9zc2l6ZV90IHNpCitAQCAtMTQyLDE2ICsxMDgsMTkgQEAgcHlfZ2V0cmFuZG9tKHZvaWQgKmJ1ZmZlciwgUHlfc3NpemVfdCBzaXplLCBpbnQgcmFpc2UpCiAgICAgICAqIHNlZSBodHRwczovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTI2ODM5LiBUbyBhdm9pZCB0aGlzLCB1c2UgdGhlCiAgICAgICAqIEdSTkRfTk9OQkxPQ0sgZmxhZy4gKi8KICAgICAgY29uc3QgaW50IGZsYWdzID0gR1JORF9OT05CTE9DSzsKLS0gICAgaW50IG47CiArICAgIGNoYXIgKmRlc3Q7Ci0rICAgIGxvbmcgbjsKKyAgICAgbG9uZyBuOwogIAotLSAgICBpZiAoIWdldHJhbmRvbV93b3JrcykKLSsgICAgaWYgKCFnZXRyYW5kb21fd29ya3MpIHsKKyAgICAgaWYgKCFnZXRyYW5kb21fd29ya3MpIHsKICAgICAgICAgIHJldHVybiAwOwotKyAgICB9CisgICAgIH0KICAKICsgICAgZGVzdCA9IGJ1ZmZlcjsKICAgICAgd2hpbGUgKDAgPCBzaXplKSB7CkBAIC0xNzQsMTEgKzE2MSw4IEBACiArICAgICAgICAgICByZXF1ZXN0ZWQuICovCiAgICAgICAgICBuID0gUHlfTUlOKHNpemUsIDEwMjQpOwogICNlbHNlCi0tICAgICAgICBuID0gc2l6ZTsKLSsgICAgICAgIG4gPSBQeV9NSU4oc2l6ZSwgTE9OR19NQVgpOwotICNlbmRpZgotIAotICAgICAgICAgZXJybm8gPSAwOworICAgICAgICAgbiA9IFB5X01JTihzaXplLCBMT05HX01BWCk7CitAQCAtMTYxLDM0ICsxMzAsMzUgQEAgcHlfZ2V0cmFuZG9tKHZvaWQgKmJ1ZmZlciwgUHlfc3NpemVfdCBzaXplLCBpbnQgcmFpc2UpCiAgI2lmZGVmIEhBVkVfR0VUUkFORE9NCiAgICAgICAgICBpZiAocmFpc2UpIHsKICAgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCkBAIC0yMDksNTYgKzE5Myw0NSBAQAogICNlbmRpZgogIAogICAgICAgICAgaWYgKG4gPCAwKSB7Ci0tICAgICAgICAgICAgaWYgKGVycm5vID09IEVOT1NZUykgeworLSAgICAgICAgICAgIC8qIEVOT1NZUzogZ2V0cmFuZG9tKCkgc3lzY2FsbCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwgKGJ1dAorLSAgICAgICAgICAgICAqIG1heWJlIHN1cHBvcnRlZCBieSB0aGUgaG9zdCB3aGljaCBidWlsdCBQeXRob24pLiBFUEVSTToKKy0gICAgICAgICAgICAgKiBnZXRyYW5kb20oKSBzeXNjYWxsIGJsb2NrZWQgYnkgU0VDQ09NUCBvciBzb21ldGhpbmcgZWxzZS4gKi8KICsgICAgICAgICAgICAvKiBFTk9TWVM6IHRoZSBzeXNjYWxsIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGtlcm5lbC4KICsgICAgICAgICAgICAgICBFUEVSTTogdGhlIHN5c2NhbGwgaXMgYmxvY2tlZCBieSBhIHNlY3VyaXR5IHBvbGljeSAoZXg6IFNFQ0NPTVApCiArICAgICAgICAgICAgICAgb3Igc29tZXRoaW5nIGVsc2UuICovCi0rICAgICAgICAgICAgaWYgKGVycm5vID09IEVOT1NZUyB8fCBlcnJubyA9PSBFUEVSTSkgeworICAgICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8gPT0gRVBFUk0pIHsKICAgICAgICAgICAgICAgICAgZ2V0cmFuZG9tX3dvcmtzID0gMDsKICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgfQogKwogICAgICAgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4pIHsKLS0gICAgICAgICAgICAgICAgLyogSWYgd2UgZmFpbGVkIHdpdGggRUFHQUlOLCB0aGUgZW50cm9weSBwb29sIHdhcwotLSAgICAgICAgICAgICAgICAgKiB1bmluaXRpYWxpemVkLiBJbiB0aGlzIGNhc2UsIHdlIHJldHVybiBmYWlsdXJlIHRvIGZhbGwKLS0gICAgICAgICAgICAgICAgICogYmFjayB0byByZWFkaW5nIGZyb20gL2Rldi91cmFuZG9tLgotLSAgICAgICAgICAgICAgICAgKgotLSAgICAgICAgICAgICAgICAgKiBOb3RlOiBJbiB0aGlzIGNhc2UgdGhlIGRhdGEgcmVhZCB3aWxsIG5vdCBiZSByYW5kb20gc28KLS0gICAgICAgICAgICAgICAgICogc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBjcnlwdG9ncmFwaGljIHB1cnBvc2VzLiBSZXRhaW5pbmcKLS0gICAgICAgICAgICAgICAgICogdGhlIGV4aXN0aW5nIHNlbWFudGljcyBmb3IgcHJhY3RpY2FsIHB1cnBvc2VzLiAqLwotKyAgICAgICAgICAgICAgICAvKiBnZXRyYW5kb20oR1JORF9OT05CTE9DSykgZmFpbHMgd2l0aCBFQUdBSU4gaWYgdGhlIHN5c3RlbQotKyAgICAgICAgICAgICAgICAgICB1cmFuZG9tIGlzIG5vdCBpbml0aWFsaWF6ZWQgeWV0LiBJbiB0aGlzIGNhc2UsIGZhbGwgYmFjayBvbgotKyAgICAgICAgICAgICAgICAgICByZWFkaW5nIGZyb20gL2Rldi91cmFuZG9tLgotKwotKyAgICAgICAgICAgICAgICAgICBOb3RlOiBJbiB0aGlzIGNhc2UgdGhlIGRhdGEgcmVhZCB3aWxsIG5vdCBiZSByYW5kb20gc28KLSsgICAgICAgICAgICAgICAgICAgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBjcnlwdG9ncmFwaGljIHB1cnBvc2VzLiBSZXRhaW5pbmcKLSsgICAgICAgICAgICAgICAgICAgdGhlIGV4aXN0aW5nIHNlbWFudGljcyBmb3IgcHJhY3RpY2FsIHB1cnBvc2VzLiAqLwotICAgICAgICAgICAgICAgICBnZXRyYW5kb21fd29ya3MgPSAwOwotICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgLyogZ2V0cmFuZG9tKEdSTkRfTk9OQkxPQ0spIGZhaWxzIHdpdGggRUFHQUlOIGlmIHRoZSBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgdXJhbmRvbSBpcyBub3QgaW5pdGlhbGlhemVkIHlldC4gSW4gdGhpcyBjYXNlLCBmYWxsIGJhY2sgb24KK0BAIC0yMDIsMTY5ICsxNzIsMjI1IEBAIHB5X2dldHJhbmRvbSh2b2lkICpidWZmZXIsIFB5X3NzaXplX3Qgc2l6ZSwgaW50IHJhaXNlKQogICAgICAgICAgICAgIH0KICAKICAgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpIHsKIC0gICAgICAgICAgICAgICAgaWYgKFB5RXJyX0NoZWNrU2lnbmFscygpKSB7Ci0tICAgICAgICAgICAgICAgICAgICBpZiAoIXJhaXNlKQorLSAgICAgICAgICAgICAgICAgICAgaWYgKCFyYWlzZSkgewogLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImdldHJhbmRvbSgpIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsIik7Ci0tICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiArICAgICAgICAgICAgICAgIGlmIChyYWlzZSkgewogKyAgICAgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0NoZWNrU2lnbmFscygpKSB7CiArICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgICAgICB9CisgCiAtICAgICAgICAgICAgICAgIC8qIHJldHJ5IGdldHJhbmRvbSgpICovCi0rCiArICAgICAgICAgICAgICAgIC8qIHJldHJ5IGdldHJhbmRvbSgpIGlmIGl0IHdhcyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCAqLwogICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICB9CiAgCi0tICAgICAgICAgICAgaWYgKHJhaXNlKQotKyAgICAgICAgICAgIGlmIChyYWlzZSkgeworICAgICAgICAgICAgIGlmIChyYWlzZSkgewogICAgICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7Ci0tICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICBlbHNlIHsKIC0gICAgICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiZ2V0cmFuZG9tKCkgZmFpbGVkIik7Ci0rICAgICAgICAgICAgfQorLSAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICB9CiAgCkBAIC0yNjksMTIgKzI0MiwxOSBAQAogICAgICByZXR1cm4gMTsKICB9CiAtI2VuZGlmCi0rCisgCistc3RhdGljIHN0cnVjdCB7CistICAgIGludCBmZDsKKy0gICAgZGV2X3Qgc3RfZGV2OworLSAgICBpbm9fdCBzdF9pbm87CistfSB1cmFuZG9tX2NhY2hlID0geyAtMSB9OwogKyNlbGlmIGRlZmluZWQoSEFWRV9HRVRFTlRST1BZKQogKyNkZWZpbmUgUFlfR0VURU5UUk9QWSAxCi0rCisgCiArLyogRmlsbCBidWZmZXIgd2l0aCBzaXplIHBzZXVkby1yYW5kb20gYnl0ZXMgZ2VuZXJhdGVkIGJ5IGdldGVudHJvcHkoKToKLSsKKyAKKy0vKiBSZWFkICdzaXplJyByYW5kb20gYnl0ZXMgZnJvbSBweV9nZXRyYW5kb20oKS4gRmFsbCBiYWNrIG9uIHJlYWRpbmcgZnJvbQorLSAgIC9kZXYvdXJhbmRvbSBpZiBnZXRyYW5kb20oKSBpcyBub3QgYXZhaWxhYmxlLgogKyAgIC0gUmV0dXJuIDEgb24gc3VjY2VzcwogKyAgIC0gUmV0dXJuIDAgaWYgZ2V0ZW50cm9weSgpIHN5c2NhbGwgaXMgbm90IGF2YWlsYWJsZSAoZmFpbGVkIHdpdGggRU5PU1lTIG9yCiArICAgICBFUEVSTSkuCkBAIC0yODIsMjUgKzI2Miw0NyBAQAogKyAgICAgaWYgZ2V0ZW50cm9weSgpIGZhaWxlZCB3aXRoIEVJTlRSLCByYWlzZSBpcyBub24temVybyBhbmQgdGhlIFB5dGhvbiBzaWduYWwKICsgICAgIGhhbmRsZXIgcmFpc2VkIGFuIGV4Y2VwdGlvbiwgb3IgaWYgZ2V0ZW50cm9weSgpIGZhaWxlZCB3aXRoIGEgZGlmZmVyZW50CiArICAgICBlcnJvci4KLSsKKyAKKy0gICBDYWxsIFB5X0ZhdGFsRXJyb3IoKSBvbiBlcnJvci4gKi8KKy1zdGF0aWMgdm9pZAorLWRldl91cmFuZG9tX25vcmFpc2UodW5zaWduZWQgY2hhciAqYnVmZmVyLCBQeV9zc2l6ZV90IHNpemUpCiArICAgZ2V0ZW50cm9weSgpIGlzIHJldHJpZWQgaWYgaXQgZmFpbGVkIHdpdGggRUlOVFI6IGludGVycnVwdGVkIGJ5IGEgc2lnbmFsLiAqLwogK3N0YXRpYyBpbnQKICtweV9nZXRlbnRyb3B5KGNoYXIgKmJ1ZmZlciwgUHlfc3NpemVfdCBzaXplLCBpbnQgcmFpc2UpCi0reworIHsKKy0gICAgaW50IGZkOworLSAgICBQeV9zc2l6ZV90IG47CiArICAgIC8qIElzIGdldGVudHJvcHkoKSBzdXBwb3J0ZWQgYnkgdGhlIHJ1bm5pbmcga2VybmVsPyBTZXQgdG8gMCBpZgogKyAgICAgICBnZXRlbnRyb3B5KCkgZmFpbGVkIHdpdGggRU5PU1lTIG9yIEVQRVJNLiAqLwogKyAgICBzdGF0aWMgaW50IGdldGVudHJvcHlfd29ya3MgPSAxOwotKworIAorLSAgICBhc3NlcnQgKDAgPCBzaXplKTsKKy0KKy0jaWZkZWYgUFlfR0VUUkFORE9NCistICAgIGlmIChweV9nZXRyYW5kb20oYnVmZmVyLCBzaXplLCAwKSA9PSAxKSB7CistICAgICAgICByZXR1cm47CiArICAgIGlmICghZ2V0ZW50cm9weV93b3JrcykgewogKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKKyAgICAgfQorLSAgICAvKiBnZXRyYW5kb20oKSBmYWlsZWQgd2l0aCBFTk9TWVMgb3IgRVBFUk0sCistICAgICAgIGZhbGwgYmFjayBvbiByZWFkaW5nIC9kZXYvdXJhbmRvbSAqLworLSNlbmRpZgorIAorLSAgICBmZCA9IF9QeV9vcGVuX25vcmFpc2UoIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKTsKKy0gICAgaWYgKGZkIDwgMCkgeworLSAgICAgICAgUHlfRmF0YWxFcnJvcigiRmFpbGVkIHRvIG9wZW4gL2Rldi91cmFuZG9tIik7CistICAgIH0KICsgICAgd2hpbGUgKHNpemUgPiAwKSB7CiArICAgICAgICAvKiBnZXRlbnRyb3B5KCkgaXMgbGltaXRlZCB0byByZXR1cm5pbmcgdXAgdG8gMjU2IGJ5dGVzLiBDYWxsIGl0CiArICAgICAgICAgICBtdWx0aXBsZSB0aW1lcyBpZiBtb3JlIGJ5dGVzIGFyZSByZXF1ZXN0ZWQuICovCiArICAgICAgICBQeV9zc2l6ZV90IGxlbiA9IFB5X01JTihzaXplLCAyNTYpOwogKyAgICAgICAgaW50IHJlczsKLSsKKyAKKy0gICAgd2hpbGUgKDAgPCBzaXplKQorLSAgICB7CistICAgICAgICBkbyB7CistICAgICAgICAgICAgbiA9IHJlYWQoZmQsIGJ1ZmZlciwgKHNpemVfdClzaXplKTsKKy0gICAgICAgIH0gd2hpbGUgKG4gPCAwICYmIGVycm5vID09IEVJTlRSKTsKICsgICAgICAgIGlmIChyYWlzZSkgewogKyAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICsgICAgICAgICAgICByZXMgPSBnZXRlbnRyb3B5KGJ1ZmZlciwgbGVuKTsKQEAgLTMwOSw3ICszMTEsMTEgQEAKICsgICAgICAgIGVsc2UgewogKyAgICAgICAgICAgIHJlcyA9IGdldGVudHJvcHkoYnVmZmVyLCBsZW4pOwogKyAgICAgICAgfQotKworIAorLSAgICAgICAgaWYgKG4gPD0gMCkgeworLSAgICAgICAgICAgIC8qIHJlYWQoKSBmYWlsZWQgb3IgcmV0dXJuZWQgMCBieXRlcyAqLworLSAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkZhaWxlZCB0byByZWFkIGJ5dGVzIGZyb20gL2Rldi91cmFuZG9tIik7CistICAgICAgICAgICAgYnJlYWs7CiArICAgICAgICBpZiAocmVzIDwgMCkgewogKyAgICAgICAgICAgIC8qIEVOT1NZUzogdGhlIHN5c2NhbGwgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgcnVubmluZyBrZXJuZWwuCiArICAgICAgICAgICAgICAgRVBFUk06IHRoZSBzeXNjYWxsIGlzIGJsb2NrZWQgYnkgYSBzZWN1cml0eSBwb2xpY3kgKGV4OiBTRUNDT01QKQpAQCAtMzM0LDcxICszNDAsNDQgQEAKICsgICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogKyAgICAgICAgICAgIH0KICsgICAgICAgICAgICByZXR1cm4gLTE7Ci0rICAgICAgICB9CisgICAgICAgICB9CistICAgICAgICBidWZmZXIgKz0gbjsKKy0gICAgICAgIHNpemUgLT0gbjsKICsKICsgICAgICAgIGJ1ZmZlciArPSBsZW47CiArICAgICAgICBzaXplIC09IGxlbjsKLSsgICAgfQorICAgICB9CistICAgIGNsb3NlKGZkKTsKICsgICAgcmV0dXJuIDE7Ci0rfQorIH0KICsjZW5kaWYgLyogZGVmaW5lZChIQVZFX0dFVEVOVFJPUFkpICYmICFkZWZpbmVkKHN1bikgKi8KKyAKKy0vKiBSZWFkICdzaXplJyByYW5kb20gYnl0ZXMgZnJvbSBweV9nZXRyYW5kb20oKS4gRmFsbCBiYWNrIG9uIHJlYWRpbmcgZnJvbQorLSAgIC9kZXYvdXJhbmRvbSBpZiBnZXRyYW5kb20oKSBpcyBub3QgYXZhaWxhYmxlLgorIAorLSAgIFJldHVybiAwIG9uIHN1Y2Nlc3MuIFJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLworK3N0YXRpYyBzdHJ1Y3QgeworKyAgICBpbnQgZmQ7CisrICAgIGRldl90IHN0X2RldjsKKysgICAgaW5vX3Qgc3RfaW5vOworK30gdXJhbmRvbV9jYWNoZSA9IHsgLTEgfTsKICsKLSAKLSBzdGF0aWMgc3RydWN0IHsKLSAgICAgaW50IGZkOwotQEAgLTIxNywxMjcgKzI3MywxMjMgQEAgc3RhdGljIHN0cnVjdCB7Ci0gICAgIGlub190IHN0X2lubzsKLSB9IHVyYW5kb21fY2FjaGUgPSB7IC0xIH07Ci0gCiArLyogUmVhZCByYW5kb20gYnl0ZXMgZnJvbSB0aGUgL2Rldi91cmFuZG9tIGRldmljZToKLSAKLS0vKiBSZWFkIHNpemUgYnl0ZXMgZnJvbSAvZGV2L3VyYW5kb20gaW50byBidWZmZXIuCi0tICAgQ2FsbCBQeV9GYXRhbEVycm9yKCkgb24gZXJyb3IuICovCi0tc3RhdGljIHZvaWQKLS1kZXZfdXJhbmRvbV9ub3JhaXNlKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgUHlfc3NpemVfdCBzaXplKQotLXsKLS0gICAgaW50IGZkOwotLSAgICBQeV9zc2l6ZV90IG47CisrCiArICAgLSBSZXR1cm4gMCBvbiBzdWNjZXNzCiArICAgLSBSYWlzZSBhbiBleGNlcHRpb24gKGlmIHJhaXNlIGlzIG5vbi16ZXJvKSBhbmQgcmV0dXJuIC0xIG9uIGVycm9yCi0gCi0tICAgIGFzc2VydCAoMCA8IHNpemUpOworKwogKyAgIFBvc3NpYmxlIGNhdXNlcyBvZiBlcnJvcnM6Ci0gCi0tI2lmZGVmIFBZX0dFVFJBTkRPTQotLSAgICBpZiAocHlfZ2V0cmFuZG9tKGJ1ZmZlciwgc2l6ZSwgMCkgPT0gMSkKLS0gICAgICAgIHJldHVybjsKLS0gICAgLyogZ2V0cmFuZG9tKCkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgcnVubmluZyBrZXJuZWwsIGZhbGwgYmFjawotLSAgICAgKiBvbiByZWFkaW5nIC9kZXYvdXJhbmRvbSAqLwotLSNlbmRpZgorKwogKyAgIC0gb3BlbigpIGZhaWxlZCB3aXRoIEVOT0VOVCwgRU5YSU8sIEVOT0RFViwgRUFDQ0VTOiB0aGUgL2Rldi91cmFuZG9tIGRldmljZQogKyAgICAgd2FzIG5vdCBmb3VuZC4gRm9yIGV4YW1wbGUsIGl0IHdhcyByZW1vdmVkIG1hbnVhbGx5IG9yIG5vdCBleHBvc2VkIGluIGEKICsgICAgIGNocm9vdCBvciBjb250YWluZXIuCiArICAgLSBvcGVuKCkgZmFpbGVkIHdpdGggYSBkaWZmZXJlbnQgZXJyb3IKICsgICAtIGZzdGF0KCkgZmFpbGVkCiArICAgLSByZWFkKCkgZmFpbGVkIG9yIHJldHVybmVkIDAKLSAKLS0gICAgZmQgPSBfUHlfb3Blbl9ub3JhaXNlKCIvZGV2L3VyYW5kb20iLCBPX1JET05MWSk7Ci0tICAgIGlmIChmZCA8IDApCi0tICAgICAgICBQeV9GYXRhbEVycm9yKCJGYWlsZWQgdG8gb3BlbiAvZGV2L3VyYW5kb20iKTsKKysKICsgICByZWFkKCkgaXMgcmV0cmllZCBpZiBpdCBmYWlsZWQgd2l0aCBFSU5UUjogaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwuCi0gCi0tICAgIHdoaWxlICgwIDwgc2l6ZSkKLS0gICAgewotLSAgICAgICAgZG8gewotLSAgICAgICAgICAgIG4gPSByZWFkKGZkLCBidWZmZXIsIChzaXplX3Qpc2l6ZSk7Ci0tICAgICAgICB9IHdoaWxlIChuIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7Ci0tICAgICAgICBpZiAobiA8PSAwKQotLSAgICAgICAgewotLSAgICAgICAgICAgIC8qIHN0b3Agb24gZXJyb3Igb3IgaWYgcmVhZChzaXplKSByZXR1cm5lZCAwICovCi0tICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiRmFpbGVkIHRvIHJlYWQgYnl0ZXMgZnJvbSAvZGV2L3VyYW5kb20iKTsKLS0gICAgICAgICAgICBicmVhazsKLS0gICAgICAgIH0KLS0gICAgICAgIGJ1ZmZlciArPSBuOwotLSAgICAgICAgc2l6ZSAtPSAoUHlfc3NpemVfdCluOwotLSAgICB9Ci0tICAgIGNsb3NlKGZkKTsKLS19CisrCiArICAgVGhlIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlIGlzIGtlcHQgb3BlbiBiZXR3ZWVuIGNhbGxzIHRvIGF2b2lkIHVzaW5nCiArICAgbWFueSBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gcnVuIGluIHBhcmFsbGVsIGZyb20gbXVsdGlwbGUgdGhyZWFkczoKICsgICBzZWUgdGhlIGlzc3VlICMxODc1Ni4KQEAgLTQwNiw5ICszODUsNyBAQAogKyAgIHN0X2RldiBhbmQgc3RfaW5vIGZpZWxkcyBvZiB0aGUgZmlsZSBkZXNjcmlwdG9yIChmcm9tIGZzdGF0KCkpIGFyZSBjYWNoZWQgdG8KICsgICBjaGVjayBpZiB0aGUgZmlsZSBkZXNjcmlwdG9yIHdhcyByZXBsYWNlZCBieSBhIGRpZmZlcmVudCBmaWxlICh3aGljaCBpcwogKyAgIGxpa2VseSBhIGJ1ZyBpbiB0aGUgYXBwbGljYXRpb24pOiBzZWUgdGhlIGlzc3VlICMyMTIwNy4KLSAKLS0vKiBSZWFkIHNpemUgYnl0ZXMgZnJvbSAvZGV2L3VyYW5kb20gaW50byBidWZmZXIuCi0tICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCisrCiArICAgSWYgdGhlIGZpbGUgZGVzY3JpcHRvciB3YXMgY2xvc2VkIG9yIHJlcGxhY2VkLCBvcGVuIGEgbmV3IGZpbGUgZGVzY3JpcHRvcgogKyAgIGJ1dCBkb24ndCBjbG9zZSB0aGUgb2xkIGZpbGUgZGVzY3JpcHRvcjogaXQgcHJvYmFibHkgcG9pbnRzIHRvIHNvbWV0aGluZwogKyAgIGltcG9ydGFudCBmb3Igc29tZSB0aGlyZC1wYXJ0eSBjb2RlLiAqLwpAQCAtNDIyLDIyICszOTksMjQgQEAKIC0jaWZkZWYgUFlfR0VUUkFORE9NCiAtICAgIGludCByZXM7CiAtI2VuZGlmCi0gCistCiAtICAgIGlmIChzaXplIDw9IDApCiAtICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYgKHJhaXNlKSB7Ci0rICAgICAgICBzdHJ1Y3QgX1B5X3N0YXRfc3RydWN0IHN0OwogIAogLSNpZmRlZiBQWV9HRVRSQU5ET00KIC0gICAgcmVzID0gcHlfZ2V0cmFuZG9tKGJ1ZmZlciwgc2l6ZSwgMSk7Ci0tICAgIGlmIChyZXMgPCAwKQorLSAgICBpZiAocmVzIDwgMCkgewogLSAgICAgICAgcmV0dXJuIC0xOwotLSAgICBpZiAocmVzID09IDEpCistICAgIH0KKy0gICAgaWYgKHJlcyA9PSAxKSB7CiAtICAgICAgICByZXR1cm4gMDsKLS0gICAgLyogZ2V0cmFuZG9tKCkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgcnVubmluZyBrZXJuZWwsIGZhbGwgYmFjawotLSAgICAgKiBvbiByZWFkaW5nIC9kZXYvdXJhbmRvbSAqLworLSAgICB9CistICAgIC8qIGdldHJhbmRvbSgpIGZhaWxlZCB3aXRoIEVOT1NZUyBvciBFUEVSTSwKKy0gICAgICAgZmFsbCBiYWNrIG9uIHJlYWRpbmcgL2Rldi91cmFuZG9tICovCiAtI2VuZGlmCi0tCisrICAgIGlmIChyYWlzZSkgeworKyAgICAgICAgc3RydWN0IF9QeV9zdGF0X3N0cnVjdCBzdDsKKyAKIC0gICAgaWYgKHVyYW5kb21fY2FjaGUuZmQgPj0gMCkgewogLSAgICAgICAgLyogRG9lcyB0aGUgZmQgcG9pbnQgdG8gdGhlIHNhbWUgdGhpbmcgYXMgYmVmb3JlPyAoaXNzdWUgIzIxMjA3KSAqLwogLSAgICAgICAgaWYgKF9QeV9mc3RhdF9ub3JhaXNlKHVyYW5kb21fY2FjaGUuZmQsICZzdCkKQEAgLTUxNiw4ICs0OTUsOSBAQAogIAogLSAgICBkbyB7CiAtICAgICAgICBuID0gX1B5X3JlYWQoZmQsIGJ1ZmZlciwgKHNpemVfdClzaXplKTsKLS0gICAgICAgIGlmIChuID09IC0xKQorLSAgICAgICAgaWYgKG4gPT0gLTEpIHsKIC0gICAgICAgICAgICByZXR1cm4gLTE7CistICAgICAgICB9CiAtICAgICAgICBpZiAobiA9PSAwKSB7CiAtICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKIC0gICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcmVhZCAlemkgYnl0ZXMgZnJvbSAvZGV2L3VyYW5kb20iLApAQCAtNTY2LDcgKzU0Niw3IEBACiAgICAgIHJldHVybiAwOwogIH0KICAKLUBAIC0zNDksOCArNDAxLDggQEAgZGV2X3VyYW5kb21fY2xvc2Uodm9pZCkKK0BAIC0zNzYsOCArNDAyLDggQEAgZGV2X3VyYW5kb21fY2xvc2Uodm9pZCkKICAgICAgICAgIHVyYW5kb21fY2FjaGUuZmQgPSAtMTsKICAgICAgfQogIH0KQEAgLTU3Niw3ICs1NTYsNyBAQAogIAogIC8qIEZpbGwgYnVmZmVyIHdpdGggcHNldWRvLXJhbmRvbSBieXRlcyBnZW5lcmF0ZWQgYnkgYSBsaW5lYXIgY29uZ3J1ZW50CiAgICAgZ2VuZXJhdG9yIChMQ0cpOgotQEAgLTM3MywyOSArNDI1LDk4IEBAIGxjZ191cmFuZG9tKHVuc2lnbmVkIGludCB4MCwgdW5zaWduZWQgY2gKK0BAIC00MDAsMzEgKzQyNiwxMDAgQEAgbGNnX3VyYW5kb20odW5zaWduZWQgaW50IHgwLCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKQogICAgICB9CiAgfQogIApAQCAtNjYxLDcgKzY0MSw3IEBACiAgI2Vsc2UKIC0gICAgcmV0dXJuIGRldl91cmFuZG9tX3B5dGhvbigoY2hhciopYnVmZmVyLCBzaXplKTsKICsgICAgcmVzID0gcHlfZ2V0ZW50cm9weShidWZmZXIsIHNpemUsIHJhaXNlKTsKLSAjZW5kaWYKKysjZW5kaWYKICsgICAgaWYgKHJlcyA8IDApIHsKICsgICAgICAgIHJldHVybiAtMTsKICsgICAgfQpAQCAtNjczLDkgKzY1Myw5IEBACiArI2VuZGlmCiArCiArICAgIHJldHVybiBkZXZfdXJhbmRvbShidWZmZXIsIHNpemUsIHJhaXNlKTsKLSsjZW5kaWYKLSt9Ci0rCisgI2VuZGlmCisgfQorIAogKy8qIEZpbGwgYnVmZmVyIHdpdGggc2l6ZSBwc2V1ZG8tcmFuZG9tIGJ5dGVzIGZyb20gdGhlIG9wZXJhdGluZyBzeXN0ZW0gcmFuZG9tCiArICAgbnVtYmVyIGdlbmVyYXRvciAoUk5HKS4gSXQgaXMgc3VpdGFibGUgZm9yIG1vc3QgY3J5cHRvZ3JhcGhpYyBwdXJwb3NlcwogKyAgIGV4Y2VwdCBsb25nIGxpdmluZyBwcml2YXRlIGtleXMgZm9yIGFzeW1tZXRyaWMgZW5jcnlwdGlvbi4KQEAgLTY4NSwxMCArNjY1LDEyIEBACiArX1B5T1NfVVJhbmRvbSh2b2lkICpidWZmZXIsIFB5X3NzaXplX3Qgc2l6ZSkKICt7CiArICAgIHJldHVybiBweXVyYW5kb20oYnVmZmVyLCBzaXplLCAxKTsKLSB9Ci0gCisrfQorKwogIHZvaWQKLUBAIC00MzYsMTMgKzU1NywxNCBAQCBfUHlSYW5kb21fSW5pdCh2b2lkKQorIF9QeVJhbmRvbV9Jbml0KHZvaWQpCisgeworQEAgLTQ2MywxMyArNTU4LDE0IEBAIF9QeVJhbmRvbV9Jbml0KHZvaWQpCiAgICAgICAgICB9CiAgICAgIH0KICAgICAgZWxzZSB7CkBAIC03MTAsNyArNjkyLDcgQEAKICAgICAgfQogIH0KICAKLUBAIC00NTQsOCArNTc2LDYgQEAgX1B5UmFuZG9tX0Zpbmkodm9pZCkKK0BAIC00ODEsOCArNTc3LDYgQEAgX1B5UmFuZG9tX0Zpbmkodm9pZCkKICAgICAgICAgIENyeXB0UmVsZWFzZUNvbnRleHQoaENyeXB0UHJvdiwgMCk7CiAgICAgICAgICBoQ3J5cHRQcm92ID0gMDsKICAgICAgfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uM18zLjUuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjNfMy41LjIuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmZjdjOWUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uM18zLjUuMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIyNCArMCwwIEBACi1yZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi5pbmMKLQotREVQRU5EUyA9ICJweXRob24zLW5hdGl2ZSBsaWJmZmkgYnppcDIgZGIgZ2RibSBvcGVuc3NsIHJlYWRsaW5lIHNxbGl0ZTMgemxpYiB2aXJ0dWFsL2xpYmludGwgeHoiCi1QUiA9ICIke0lOQ19QUn0uMCIKLVBZVEhPTl9NQUpNSU4gPSAiMy41IgotUFlUSE9OX0JJTkFCST0gIiR7UFlUSE9OX01BSk1JTn1tIgotRElTVFJPX1NSQ19VUkkgPz0gImZpbGU6Ly9zaXRlY3VzdG9taXplLnB5IgotRElTVFJPX1NSQ19VUklfbGludXhzdGRiYXNlID0gIiIKLVNSQ19VUkkgPSAiaHR0cDovL3d3dy5weXRob24ub3JnL2Z0cC9weXRob24vJHtQVn0vUHl0aG9uLSR7UFZ9LnRhci54eiBcCi1maWxlOi8vcHl0aG9uLWNvbmZpZy5wYXRjaCBcCi1maWxlOi8vMDAwLWNyb3NzLWNvbXBpbGUucGF0Y2ggXAotZmlsZTovLzAzMC1maXh1cC1pbmNsdWRlLWRpcnMucGF0Y2ggXAotZmlsZTovLzA3MC1kb250LWNsZWFuLWlwa2ctaW5zdGFsbC5wYXRjaCBcCi1maWxlOi8vMDgwLWRpc3R1dGlscy1kb250X2FkanVzdF9maWxlcy5wYXRjaCBcCi1maWxlOi8vMTMwLXJlYWRsaW5lLXNldHVwLnBhdGNoIFwKLWZpbGU6Ly8xNTAtZml4LXNldHVwdGVybS5wYXRjaCBcCi1maWxlOi8vMDAwMS1oMnB5LUZpeC1pc3N1ZS0xMzAzMi13aGVyZS1pdC1mYWlscy13aXRoLVVuaWNvZGVEZWNvLnBhdGNoIFwKLWZpbGU6Ly90d2Vhay1NVUxUSUFSQ0gtZm9yLXBvd2VycGMtbGludXgtZ251c3BlLnBhdGNoIFwKLSR7RElTVFJPX1NSQ19VUkl9IFwKLSIKLQotU1JDX1VSSSArPSAiXAotICAgICAgICAgICAgZmlsZTovLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vYXZvaWRfd2FybmluZ19hYm91dF90a2ludGVyLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9jZ2lfcHkucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2hvc3RfaW5jbHVkZV9jb250YW1pbmF0aW9uLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9weXRob24tMy4zLW11bHRpbGliLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9zaHV0aWwtZm9sbG93LXN5bWxpbmstZml4LnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9zeXNyb290LWluY2x1ZGUtaGVhZGVycy5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vdW5peGNjb21waWxlci5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vYXZvaWQtbmN1cnNlc3ctaW5jbHVkZS1wYXRoLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9weXRob24zLXVzZS1DUk9TU1BZVEhPTlBBVEgtZm9yLVBZVEhPTl9GT1JfQlVJTEQucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3B5dGhvbjMtc2V0dXAucHktbm8taG9zdC1oZWFkZXJzLWxpYnMucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3N5c2NvbmZpZy5weS1hZGQtX1BZVEhPTl9QUk9KRUNUX1NSQy5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vc2V0dXAucHktY2hlY2stY3Jvc3NfY29tcGlsaW5nLXdoZW4tZ2V0LUZMQUdTLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9zZXR1cC5weS1maW5kLWxpYnJhcmllcy1pbi1zdGFnaW5nLWRpcnMucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5hYy1maXgtTElCUEwucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3B5dGhvbjMtZml4LUNWRS0yMDE2LTEwMDAxMTAucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3Vwc3RyZWFtLXJhbmRvbS1maXhlcy5wYXRjaCBcCi0gICAgICAgICAgICIKLVNSQ19VUklbbWQ1c3VtXSA9ICI4OTA2ZWZiYWNmY2RjN2MzYzkxOThhZWVmYWZkMTU5ZSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIwMDEwZjU2MTAwYjliNzQyNTllYmNkNWQ0YjI5NWEzMjMyNGI1OGI1MTc0MDNhMTBkMWEyYWE3Y2IyMmJjYTQwIgotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT02YjYwMjU4MTMwZTRlZDEwZDMxMDE1MTdlYjViOTM4NSIKLQotIyBleGNsdWRlIHByZS1yZWxlYXNlcyBmb3IgYm90aCBweXRob24gMi54IGFuZCAzLngKLVVQU1RSRUFNX0NIRUNLX1JFR0VYID0gIltQcF15dGhvbi0oP1A8cHZlcj5cZCsoXC5cZCspKykudGFyIgotCi1TID0gIiR7V09SS0RJUn0vUHl0aG9uLSR7UFZ9IgotCi1pbmhlcml0IGF1dG90b29scyBtdWx0aWxpYl9oZWFkZXIgcHl0aG9uM25hdGl2ZSBwa2djb25maWcKLQotQ09ORklHVVJFT1BUUyArPSAiIC0td2l0aC1zeXN0ZW0tZmZpICIKLQotQ0FDSEVEX0NPTkZJR1VSRVZBUlMgPSAiYWNfY3ZfaGF2ZV9jaGZsYWdzPW5vIFwKLSAgICAgICAgICAgICAgICBhY19jdl9oYXZlX2xjaGZsYWdzPW5vIFwKLSAgICAgICAgICAgICAgICBhY19jdl9oYXZlX2xvbmdfbG9uZ19mb3JtYXQ9eWVzIFwKLSAgICAgICAgICAgICAgICBhY19jdl9idWdneV9nZXRhZGRyaW5mbz1ubyBcCi0gICAgICAgICAgICAgICAgYWNfY3ZfZmlsZV9fZGV2X3B0bXg9eWVzIFwKLSAgICAgICAgICAgICAgICBhY19jdl9maWxlX19kZXZfcHRjPW5vIFwKLSIKLQotVEFSR0VUX0NDX0FSQ0ggKz0gIi1ETkRFQlVHIC1mbm8taW5saW5lIgotU0RLX0NDX0FSQ0ggKz0gIi1ETkRFQlVHIC1mbm8taW5saW5lIgotRVhUUkFfT0VNQUtFICs9ICJDUk9TU19DT01QSUxFPXllcyIKLUVYVFJBX09FQ09ORiArPSAiQ1JPU1NQWVRIT05QQVRIPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2xpYi1keW5sb2FkLyAtLXdpdGhvdXQtZW5zdXJlcGlwIgotCi1leHBvcnQgQ1JPU1NfQ09NUElMRSA9ICIke1RBUkdFVF9QUkVGSVh9IgotZXhwb3J0IF9QWVRIT05fUFJPSkVDVF9CQVNFID0gIiR7Qn0iCi1leHBvcnQgX1BZVEhPTl9QUk9KRUNUX1NSQyA9ICIke1N9IgotZXhwb3J0IENDU0hBUkVEID0gIi1mUElDIgotCi0jIEZpeCBjcm9zcyBjb21waWxhdGlvbiBvZiBkaWZmZXJlbnQgbW9kdWxlcwotZXhwb3J0IENST1NTUFlUSE9OUEFUSCA9ICIke1NUQUdJTkdfTElCRElSX05BVElWRX0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9saWItZHlubG9hZC86JHtCfS9idWlsZC9saWIubGludXgtJHtUQVJHRVRfQVJDSH0tJHtQWVRIT05fTUFKTUlOfToke1N9L0xpYjoke1N9L0xpYi9wbGF0LWxpbnV4IgotCi0jIE5vIGN0eXBlcyBvcHRpb24gZm9yIHB5dGhvbiAzCi1QWVRIT05MU0JPUFRTID0gIiIKLQotZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKLQlybSAtZiAke1N9L01ha2VmaWxlLm9yaWcKLQlhdXRvcmVjb25mIC1XY3Jvc3MgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlIC0tZXhjbHVkZT1hdXRvcG9pbnQgLi4vUHl0aG9uLSR7UFZ9L01vZHVsZXMvX2N0eXBlcy9saWJmZmkKLX0KLQotZG9fY29tcGlsZSgpIHsKLSAgICAgICAgIyByZWdlbmVyYXRlIHBsYXRmb3JtIHNwZWNpZmljIGZpbGVzLCBiZWNhdXNlIHRoZXkgZGVwZW5kIG9uIHN5c3RlbSBoZWFkZXJzCi0gICAgICAgIGNkICR7U30vTGliL3BsYXQtbGludXgqCi0gICAgICAgIGluY2x1ZGU9JHtTVEFHSU5HX0lOQ0RJUn0gJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3B5dGhvbjMgXAotICAgICAgICAgICAgICAgICR7U30vVG9vbHMvc2NyaXB0cy9oMnB5LnB5IC1pICcodV9sb25nKScgXAotICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L2RsZmNuLmggXAotICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L2xpbnV4L2Nkcm9tLmggXAotICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L25ldGluZXQvaW4uaCBcCi0gICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vc3lzL3R5cGVzLmgKLSAgICAgICAgc2VkIC1lICdzLCR7U1RBR0lOR19ESVJfSE9TVH0sLGcnIC1pICoucHkKLSAgICAgICAgY2QgLQotCi0KLQkjIHJlbW92ZSBhbnkgYm9ndXMgTERfTElCUkFSWV9QQVRICi0Jc2VkIC1pIC1lIHMsUlVOU0hBUkVEPS4qLFJVTlNIQVJFRD0sIE1ha2VmaWxlCi0KLQlpZiBbICEgLWYgTWFrZWZpbGUub3JpZyBdOyB0aGVuCi0JCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZSBNYWtlZmlsZS5vcmlnCi0JZmkKLQlzZWQgLWkgLWUgJ3MsXkNPTkZJR1VSRV9MREZMQUdTPS4qLENPTkZJR1VSRV9MREZMQUdTPS1MLiAtTCR7U1RBR0lOR19MSUJESVJ9LGcnIFwKLQkJLWUgJ3MsbGliZGlyPSR7bGliZGlyfSxsaWJkaXI9JHtTVEFHSU5HX0xJQkRJUn0sZycgXAotCQktZSAncyxsaWJleGVjZGlyPSR7bGliZXhlY2Rpcn0sbGliZXhlY2Rpcj0ke1NUQUdJTkdfRElSX0hPU1R9JHtsaWJleGVjZGlyfSxnJyBcCi0JCS1lICdzLF5MSUJESVI9LiosTElCRElSPSR7U1RBR0lOR19MSUJESVJ9LGcnIFwKLQkJLWUgJ3MsaW5jbHVkZWRpcj0ke2luY2x1ZGVkaXJ9LGluY2x1ZGVkaXI9JHtTVEFHSU5HX0lOQ0RJUn0sZycgXAotCQktZSAncyxeSU5DTFVERURJUj0uKixJTkNMVURFPSR7U1RBR0lOR19JTkNESVJ9LGcnIFwKLQkJLWUgJ3MsXkNPTkZJTkNMVURFRElSPS4qLENPTkZJTkNMVURFPSR7U1RBR0lOR19JTkNESVJ9LGcnIFwKLQkJTWFrZWZpbGUKLQkjIHNhdmUgY29weSBvZiBpdCBub3csIGJlY2F1c2UgaWYgd2UgZG8gaXQgaW4gZG9faW5zdGFsbCBhbmQgCi0JIyB0aGVuIGNhbGwgZG9faW5zdGFsbCB0d2ljZSB3ZSBnZXQgTWFrZWZpbGUub3JpZyA9PSBNYWtlZmlsZS5zeXNyb290Ci0JaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlIE1ha2VmaWxlLnN5c3Jvb3QKLQotCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3BnZW4gXAotCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9weXRob24zIFwKLQkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAotCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKLQkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAotCQlMSUI9JHtiYXNlbGlifSBcCi0JCUFSQ0g9JHtUQVJHRVRfQVJDSH0gXAotCQlPUFQ9IiR7Q0ZMQUdTfSIgbGlicHl0aG9uMy5zbwotCi0Jb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcGdlbiBcCi0JCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3B5dGhvbjMgXAotCQlTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCi0JCVNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKLQkJU1RBR0lOR19CQVNFTElCRElSPSR7U1RBR0lOR19CQVNFTElCRElSfSBcCi0JCUxJQj0ke2Jhc2VsaWJ9IFwKLQkJQVJDSD0ke1RBUkdFVF9BUkNIfSBcCi0JCU9QVD0iJHtDRkxBR1N9IgotfQotCi1kb19pbnN0YWxsKCkgewotCSMgbWFrZSBpbnN0YWxsIG5lZWRzIHRoZSBvcmlnaW5hbCBNYWtlZmlsZSwgb3Igb3RoZXJ3aXNlIHRoZSBpbmNsdWVzIHdvdWxkCi0JIyBnbyB0byAke0R9JHtTVEFHSU5HLi4ufS8uLi4KLQlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUub3JpZyBNYWtlZmlsZQotCi0JaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZwotCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZwotCi0JIyByZXJ1biB0aGUgYnVpbGQgb25jZSBhZ2FpbiB3aXRoIG9yaWdpbmFsIG1ha2VmaWxlIHRoaXMgdGltZQotCSMgcnVuIGluc3RhbGwgaW4gYSBzZXBhcmF0ZSBzdGVwIHRvIGF2b2lkIGNvbXBpbGUvaW5zdGFsbCByYWNlCi0Jb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcGdlbiBcCi0JCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3B5dGhvbjMgXAotCQlTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCi0JCVNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKLQkJU1RBR0lOR19CQVNFTElCRElSPSR7U1RBR0lOR19CQVNFTElCRElSfSBcCi0JCUxJQj0ke2Jhc2VsaWJ9IFwKLQkJQVJDSD0ke1RBUkdFVF9BUkNIfSBcCi0JCURFU1RESVI9JHtEfSBMSUJESVI9JHtsaWJkaXJ9Ci0JCi0Jb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcGdlbiBcCi0JCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3B5dGhvbjMgXAotCQlTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCi0JCVNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKLQkJU1RBR0lOR19CQVNFTElCRElSPSR7U1RBR0lOR19CQVNFTElCRElSfSBcCi0JCUxJQj0ke2Jhc2VsaWJ9IFwKLQkJQVJDSD0ke1RBUkdFVF9BUkNIfSBcCi0JCURFU1RESVI9JHtEfSBMSUJESVI9JHtsaWJkaXJ9IGluc3RhbGwKLQotCSMgYXZvaWQgY29uZmxpY3Qgd2l0aCAydG8zIGZyb20gUHl0aG9uIDIKLQlybSAtZiAke0R9LyR7YmluZGlyfS8ydG8zCi0KLQlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUuc3lzcm9vdCAke0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy9NYWtlZmlsZQotCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZS5zeXNyb290ICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnLSR7UFlUSE9OX01BSk1JTn0ke1BZVEhPTl9BQkl9L01ha2VmaWxlCi0KLQlpZiBbIC1lICR7V09SS0RJUn0vc2l0ZWN1c3RvbWl6ZS5weSBdOyB0aGVuCi0JCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NpdGVjdXN0b21pemUucHkgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfQotCWZpCi0KLQlvZV9tdWx0aWxpYl9oZWFkZXIgcHl0aG9uJHtQWVRIT05fQklOQUJJfS9weWNvbmZpZy5oCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayAoKSB7Ci0JY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmluZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59IFRFUk1JTkZPX0RJUlM9JyR7c3lzY29uZmRpcn0vdGVybWluZm86L2V0Yy90ZXJtaW5mbzovdXNyL3NoYXJlL3Rlcm1pbmZvOi91c3Ivc2hhcmUvbWlzYy90ZXJtaW5mbzovbGliL3Rlcm1pbmZvJwotfQotCi1TU1RBVEVfU0NBTl9GSUxFUyArPSAiTWFrZWZpbGUiCi1QQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1MgKz0gInB5X3BhY2thZ2VfcHJlcHJvY2VzcyIKLQotcHlfcGFja2FnZV9wcmVwcm9jZXNzICgpIHsKLQkjIGNvcHkgYmFjayB0aGUgb2xkIE1ha2VmaWxlIHRvIGZpeCB0YXJnZXQgcGFja2FnZQotCWluc3RhbGwgLW0gMDY0NCAke0J9L01ha2VmaWxlLm9yaWcgJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUKLQlpbnN0YWxsIC1tIDA2NDQgJHtCfS9NYWtlZmlsZS5vcmlnICR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnLSR7UFlUSE9OX01BSk1JTn0ke1BZVEhPTl9BQkl9L01ha2VmaWxlCi0JIyBSZW1vdmUgcmVmZXJlbmNlcyB0byBidWlsZG1hY2hpbmUgcGF0aHMgaW4gdGFyZ2V0IE1ha2VmaWxlIGFuZCBfc3lzY29uZmlnZGF0YQotCXNlZCAtaSAtZSAnczotLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9OjpnJyAtZSBzOictLXdpdGgtbGlidG9vbC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSc6OmcgXAotCQkke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy9NYWtlZmlsZSBcCi0JCSR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnLSR7UFlUSE9OX01BSk1JTn0ke1BZVEhPTl9BQkl9L01ha2VmaWxlIFwKLQkJJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9fc3lzY29uZmlnZGF0YS5weQotfQotCi1yZXF1aXJlIHB5dGhvbi0ke1BZVEhPTl9NQUpNSU59LW1hbmlmZXN0LmluYwotCi0jIG1hbnVhbCBkZXBlbmRlbmN5IGFkZGl0aW9ucwotUlBST1ZJREVTXyR7UE59LWNvcmUgPSAiJHtQTn0iCi1SUkVDT01NRU5EU18ke1BOfS1jb3JlID0gIiR7UE59LXJlYWRsaW5lIgotUlJFQ09NTUVORFNfJHtQTn0tY3J5cHQgPSAib3BlbnNzbCIKLVJSRUNPTU1FTkRTXyR7UE59LWNyeXB0X2NsYXNzLW5hdGl2ZXNkayA9ICJuYXRpdmVzZGstb3BlbnNzbCIKLQotRklMRVNfJHtQTn0tMnRvMyArPSAiJHtiaW5kaXJ9LzJ0bzMtJHtQWVRIT05fTUFKTUlOfSIKLUZJTEVTXyR7UE59LXB5ZG9jICs9ICIke2JpbmRpcn0vcHlkb2Mke1BZVEhPTl9NQUpNSU59ICR7YmluZGlyfS9weWRvYzMiCi1GSUxFU18ke1BOfS1pZGxlICs9ICIke2JpbmRpcn0vaWRsZTMgJHtiaW5kaXJ9L2lkbGUke1BZVEhPTl9NQUpNSU59IgotCi1QQUNLQUdFUyA9KyAiJHtQTn0tcHl2ZW52IgotRklMRVNfJHtQTn0tcHl2ZW52ICs9ICIke2JpbmRpcn0vcHl2ZW52LSR7UFlUSE9OX01BSk1JTn0gJHtiaW5kaXJ9L3B5dmVudiIKLQotIyBwYWNrYWdlIGxpYnB5dGhvbjMKLVBBQ0tBR0VTID0rICJsaWJweXRob24zIGxpYnB5dGhvbjMtc3RhdGljZGV2IgotRklMRVNfbGlicHl0aG9uMyA9ICIke2xpYmRpcn0vbGlicHl0aG9uKi5zby4qIgotRklMRVNfbGlicHl0aG9uMy1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy0ke1BZVEhPTl9CSU5BQkl9L2xpYnB5dGhvbiR7UFlUSE9OX0JJTkFCSX0uYSIKLUlOU0FORV9TS0lQXyR7UE59LWRldiArPSAiZGV2LWVsZiIKLQotIyBjYXRjaCBhbGwgdGhlIHJlc3QgKHVuc29ydGVkKQotUEFDS0FHRVMgKz0gIiR7UE59LW1pc2MiCi1SREVQRU5EU18ke1BOfS1taXNjICs9ICIke1BOfS1jb3JlICR7UE59LWVtYWlsICR7UE59LWNvZGVjcyAke1BOfS10ZXh0dXRpbHMgJHtQTn0tYXJncGFyc2UiCi1SREVQRU5EU18ke1BOfS1tb2R1bGVzICs9ICIke1BOfS1taXNjIgotRklMRVNfJHtQTn0tbWlzYyA9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfSIKLQotIyBjYXRjaCBtYW5wYWdlCi1QQUNLQUdFUyArPSAiJHtQTn0tbWFuIgotRklMRVNfJHtQTn0tbWFuID0gIiR7ZGF0YWRpcn0vbWFuIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjNfMy41LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zXzMuNS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZGYxMmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zXzMuNS4zLmJiCkBAIC0wLDAgKzEsMjI3IEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi5pbmMKKworREVQRU5EUyA9ICJweXRob24zLW5hdGl2ZSBsaWJmZmkgYnppcDIgZGIgZ2RibSBvcGVuc3NsIHJlYWRsaW5lIHNxbGl0ZTMgemxpYiB2aXJ0dWFsL2xpYmludGwgeHoiCitQUiA9ICIke0lOQ19QUn0uMCIKK1BZVEhPTl9NQUpNSU4gPSAiMy41IgorUFlUSE9OX0JJTkFCST0gIiR7UFlUSE9OX01BSk1JTn1tIgorRElTVFJPX1NSQ19VUkkgPz0gImZpbGU6Ly9zaXRlY3VzdG9taXplLnB5IgorRElTVFJPX1NSQ19VUklfbGludXhzdGRiYXNlID0gIiIKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5weXRob24ub3JnL2Z0cC9weXRob24vJHtQVn0vUHl0aG9uLSR7UFZ9LnRhci54eiBcCitmaWxlOi8vcHl0aG9uLWNvbmZpZy5wYXRjaCBcCitmaWxlOi8vMDAwMS1jcm9zcy1jb21waWxlLXN1cHBvcnQucGF0Y2ggXAorZmlsZTovLzAzMC1maXh1cC1pbmNsdWRlLWRpcnMucGF0Y2ggXAorZmlsZTovLzA3MC1kb250LWNsZWFuLWlwa2ctaW5zdGFsbC5wYXRjaCBcCitmaWxlOi8vMDgwLWRpc3R1dGlscy1kb250X2FkanVzdF9maWxlcy5wYXRjaCBcCitmaWxlOi8vMTMwLXJlYWRsaW5lLXNldHVwLnBhdGNoIFwKK2ZpbGU6Ly8xNTAtZml4LXNldHVwdGVybS5wYXRjaCBcCitmaWxlOi8vMDAwMS1oMnB5LUZpeC1pc3N1ZS0xMzAzMi13aGVyZS1pdC1mYWlscy13aXRoLVVuaWNvZGVEZWNvLnBhdGNoIFwKK2ZpbGU6Ly90d2Vhay1NVUxUSUFSQ0gtZm9yLXBvd2VycGMtbGludXgtZ251c3BlLnBhdGNoIFwKK2ZpbGU6Ly9zdXBwb3J0X1NPVVJDRV9EQVRFX0VQT0NIX2luX3B5X2NvbXBpbGUucGF0Y2ggXAorJHtESVNUUk9fU1JDX1VSSX0gXAorIgorCitTUkNfVVJJICs9ICJcCisgICAgICAgICAgICBmaWxlOi8vMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hdm9pZF93YXJuaW5nX2Fib3V0X3RraW50ZXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2NnaV9weS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vaG9zdF9pbmNsdWRlX2NvbnRhbWluYXRpb24ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3B5dGhvbi0zLjMtbXVsdGlsaWIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3NodXRpbC1mb2xsb3ctc3ltbGluay1maXgucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3N5c3Jvb3QtaW5jbHVkZS1oZWFkZXJzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly91bml4Y2NvbXBpbGVyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hdm9pZC1uY3Vyc2Vzdy1pbmNsdWRlLXBhdGgucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3B5dGhvbjMtdXNlLUNST1NTUFlUSE9OUEFUSC1mb3ItUFlUSE9OX0ZPUl9CVUlMRC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcHl0aG9uMy1zZXR1cC5weS1uby1ob3N0LWhlYWRlcnMtbGlicy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc3lzY29uZmlnLnB5LWFkZC1fUFlUSE9OX1BST0pFQ1RfU1JDLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zZXR1cC5weS1jaGVjay1jcm9zc19jb21waWxpbmctd2hlbi1nZXQtRkxBR1MucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3NldHVwLnB5LWZpbmQtbGlicmFyaWVzLWluLXN0YWdpbmctZGlycy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLmFjLWZpeC1MSUJQTC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdXBzdHJlYW0tcmFuZG9tLWZpeGVzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLUlzc3VlLTIxMjcyLVVzZS1fc3lzY29uZmlnZGF0YS5weS10by1pbml0aWFsaXplLWRpc3QucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL0ZpeC0yOTUxOS13ZWFrcmVmLXNwZXdpbmctZXhjZXB0aW9ucy1kdXJpbmctaW50ZXJwLWYucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3Bhc3MtbWlzc2luZy1saWJyYXJpZXMtdG8tRXh0ZW5zaW9uLWZvci1tdWwucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiNTdkMWY4YmZiYWJmNGYyNTAwMjczZmIwNzA2ZTZmMjEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWVmZTJhZDY1NzU4NTU0MjNhYjYzMGY1YjUxYThlZjZlNTU1NmY3NzQ1ODRjMDZiZWFiNDkyNmY5MzBkZGJiMCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9YjY4MGVkOTlhYTYwZDM1MGM2NWE2NTkxNDQ5NDIwN2UiCisKKyMgZXhjbHVkZSBwcmUtcmVsZWFzZXMgZm9yIGJvdGggcHl0aG9uIDIueCBhbmQgMy54CitVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJbUHBdeXRob24tKD9QPHB2ZXI+XGQrKFwuXGQrKSspLnRhciIKKworUyA9ICIke1dPUktESVJ9L1B5dGhvbi0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgbXVsdGlsaWJfaGVhZGVyIHB5dGhvbjNuYXRpdmUgcGtnY29uZmlnCisKK0NPTkZJR1VSRU9QVFMgKz0gIiAtLXdpdGgtc3lzdGVtLWZmaSAiCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTID0gImFjX2N2X2hhdmVfY2hmbGFncz1ubyBcCisgICAgICAgICAgICAgICAgYWNfY3ZfaGF2ZV9sY2hmbGFncz1ubyBcCisgICAgICAgICAgICAgICAgYWNfY3ZfaGF2ZV9sb25nX2xvbmdfZm9ybWF0PXllcyBcCisgICAgICAgICAgICAgICAgYWNfY3ZfYnVnZ3lfZ2V0YWRkcmluZm89bm8gXAorICAgICAgICAgICAgICAgIGFjX2N2X2ZpbGVfX2Rldl9wdG14PXllcyBcCisgICAgICAgICAgICAgICAgYWNfY3ZfZmlsZV9fZGV2X3B0Yz1ubyBcCisiCisKK1RBUkdFVF9DQ19BUkNIICs9ICItRE5ERUJVRyAtZm5vLWlubGluZSIKK1NES19DQ19BUkNIICs9ICItRE5ERUJVRyAtZm5vLWlubGluZSIKK0VYVFJBX09FTUFLRSArPSAiQ1JPU1NfQ09NUElMRT15ZXMiCitFWFRSQV9PRUNPTkYgKz0gIkNST1NTUFlUSE9OUEFUSD0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9saWItZHlubG9hZC8gLS13aXRob3V0LWVuc3VyZXBpcCIKKworZXhwb3J0IENST1NTX0NPTVBJTEUgPSAiJHtUQVJHRVRfUFJFRklYfSIKK2V4cG9ydCBfUFlUSE9OX1BST0pFQ1RfQkFTRSA9ICIke0J9IgorZXhwb3J0IF9QWVRIT05fUFJPSkVDVF9TUkMgPSAiJHtTfSIKK2V4cG9ydCBDQ1NIQVJFRCA9ICItZlBJQyIKKworIyBGaXggY3Jvc3MgY29tcGlsYXRpb24gb2YgZGlmZmVyZW50IG1vZHVsZXMKK2V4cG9ydCBDUk9TU1BZVEhPTlBBVEggPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vbGliLWR5bmxvYWQvOiR7Qn0vYnVpbGQvbGliLmxpbnV4LSR7VEFSR0VUX0FSQ0h9LSR7UFlUSE9OX01BSk1JTn06JHtTfS9MaWI6JHtTfS9MaWIvcGxhdC1saW51eCIKKworIyBObyBjdHlwZXMgb3B0aW9uIGZvciBweXRob24gMworUFlUSE9OTFNCT1BUUyA9ICIiCisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJcm0gLWYgJHtTfS9NYWtlZmlsZS5vcmlnCisJYXV0b3JlY29uZiAtV2Nyb3NzIC0tdmVyYm9zZSAtLWluc3RhbGwgLS1mb3JjZSAtLWV4Y2x1ZGU9YXV0b3BvaW50IC4uL1B5dGhvbi0ke1BWfS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpCit9CisKK2RvX2NvbXBpbGUoKSB7CisgICAgICAgICMgcmVnZW5lcmF0ZSBwbGF0Zm9ybSBzcGVjaWZpYyBmaWxlcywgYmVjYXVzZSB0aGV5IGRlcGVuZCBvbiBzeXN0ZW0gaGVhZGVycworICAgICAgICBjZCAke1N9L0xpYi9wbGF0LWxpbnV4KgorICAgICAgICBpbmNsdWRlPSR7U1RBR0lOR19JTkNESVJ9ICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9weXRob24zIFwKKyAgICAgICAgICAgICAgICAke1N9L1Rvb2xzL3NjcmlwdHMvaDJweS5weSAtaSAnKHVfbG9uZyknIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9kbGZjbi5oIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9saW51eC9jZHJvbS5oIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9uZXRpbmV0L2luLmggXAorICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L3N5cy90eXBlcy5oCisgICAgICAgIHNlZCAtZSAncywke1NUQUdJTkdfRElSX0hPU1R9LCxnJyAtaSAqLnB5CisgICAgICAgIGNkIC0KKworCisJIyByZW1vdmUgYW55IGJvZ3VzIExEX0xJQlJBUllfUEFUSAorCXNlZCAtaSAtZSBzLFJVTlNIQVJFRD0uKixSVU5TSEFSRUQ9LCBNYWtlZmlsZQorCisJaWYgWyAhIC1mIE1ha2VmaWxlLm9yaWcgXTsgdGhlbgorCQlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUgTWFrZWZpbGUub3JpZworCWZpCisJc2VkIC1pIC1lICdzLF5DT05GSUdVUkVfTERGTEFHUz0uKixDT05GSUdVUkVfTERGTEFHUz0tTC4gLUwke1NUQUdJTkdfTElCRElSfSxnJyBcCisJCS1lICdzLGxpYmRpcj0ke2xpYmRpcn0sbGliZGlyPSR7U1RBR0lOR19MSUJESVJ9LGcnIFwKKwkJLWUgJ3MsbGliZXhlY2Rpcj0ke2xpYmV4ZWNkaXJ9LGxpYmV4ZWNkaXI9JHtTVEFHSU5HX0RJUl9IT1NUfSR7bGliZXhlY2Rpcn0sZycgXAorCQktZSAncyxeTElCRElSPS4qLExJQkRJUj0ke1NUQUdJTkdfTElCRElSfSxnJyBcCisJCS1lICdzLGluY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfSxpbmNsdWRlZGlyPSR7U1RBR0lOR19JTkNESVJ9LGcnIFwKKwkJLWUgJ3MsXklOQ0xVREVESVI9LiosSU5DTFVERT0ke1NUQUdJTkdfSU5DRElSfSxnJyBcCisJCS1lICdzLF5DT05GSU5DTFVERURJUj0uKixDT05GSU5DTFVERT0ke1NUQUdJTkdfSU5DRElSfSxnJyBcCisJCU1ha2VmaWxlCisJIyBzYXZlIGNvcHkgb2YgaXQgbm93LCBiZWNhdXNlIGlmIHdlIGRvIGl0IGluIGRvX2luc3RhbGwgYW5kIAorCSMgdGhlbiBjYWxsIGRvX2luc3RhbGwgdHdpY2Ugd2UgZ2V0IE1ha2VmaWxlLm9yaWcgPT0gTWFrZWZpbGUuc3lzcm9vdAorCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZSBNYWtlZmlsZS5zeXNyb290CisKKwlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9wZ2VuIFwKKwkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcHl0aG9uMyBcCisJCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKwkJU1RBR0lOR19CQVNFTElCRElSPSR7U1RBR0lOR19CQVNFTElCRElSfSBcCisJCVNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKwkJTElCPSR7YmFzZWxpYn0gXAorCQlBUkNIPSR7VEFSR0VUX0FSQ0h9IFwKKwkJT1BUPSIke0NGTEFHU30iIGxpYnB5dGhvbjMuc28KKworCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3BnZW4gXAorCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9weXRob24zIFwKKwkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisJCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAorCQlMSUI9JHtiYXNlbGlifSBcCisJCUFSQ0g9JHtUQVJHRVRfQVJDSH0gXAorCQlPUFQ9IiR7Q0ZMQUdTfSIKK30KKworZG9faW5zdGFsbCgpIHsKKwkjIG1ha2UgaW5zdGFsbCBuZWVkcyB0aGUgb3JpZ2luYWwgTWFrZWZpbGUsIG9yIG90aGVyd2lzZSB0aGUgaW5jbHVlcyB3b3VsZAorCSMgZ28gdG8gJHtEfSR7U1RBR0lORy4uLn0vLi4uCisJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlLm9yaWcgTWFrZWZpbGUKKworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9wa2djb25maWcKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcKKworCSMgcmVydW4gdGhlIGJ1aWxkIG9uY2UgYWdhaW4gd2l0aCBvcmlnaW5hbCBtYWtlZmlsZSB0aGlzIHRpbWUKKwkjIHJ1biBpbnN0YWxsIGluIGEgc2VwYXJhdGUgc3RlcCB0byBhdm9pZCBjb21waWxlL2luc3RhbGwgcmFjZQorCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3BnZW4gXAorCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9weXRob24zIFwKKwkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisJCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAorCQlMSUI9JHtiYXNlbGlifSBcCisJCUFSQ0g9JHtUQVJHRVRfQVJDSH0gXAorCQlERVNURElSPSR7RH0gTElCRElSPSR7bGliZGlyfQorCQorCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3BnZW4gXAorCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9weXRob24zIFwKKwkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisJCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAorCQlMSUI9JHtiYXNlbGlifSBcCisJCUFSQ0g9JHtUQVJHRVRfQVJDSH0gXAorCQlERVNURElSPSR7RH0gTElCRElSPSR7bGliZGlyfSBpbnN0YWxsCisKKwkjIGF2b2lkIGNvbmZsaWN0IHdpdGggMnRvMyBmcm9tIFB5dGhvbiAyCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vMnRvMworCisJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlLnN5c3Jvb3QgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUKKwlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUuc3lzcm9vdCAke0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy0ke1BZVEhPTl9NQUpNSU59JHtQWVRIT05fQUJJfS9NYWtlZmlsZQorCisJaWYgWyAtZSAke1dPUktESVJ9L3NpdGVjdXN0b21pemUucHkgXTsgdGhlbgorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zaXRlY3VzdG9taXplLnB5ICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0KKwlmaQorCisJb2VfbXVsdGlsaWJfaGVhZGVyIHB5dGhvbiR7UFlUSE9OX0JJTkFCSX0vcHljb25maWcuaAorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfSBURVJNSU5GT19ESVJTPScke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvOi9ldGMvdGVybWluZm86L3Vzci9zaGFyZS90ZXJtaW5mbzovdXNyL3NoYXJlL21pc2MvdGVybWluZm86L2xpYi90ZXJtaW5mbycKK30KKworU1NUQVRFX1NDQU5fRklMRVMgKz0gIk1ha2VmaWxlIgorUEFDS0FHRV9QUkVQUk9DRVNTX0ZVTkNTICs9ICJweV9wYWNrYWdlX3ByZXByb2Nlc3MiCisKK3B5X3BhY2thZ2VfcHJlcHJvY2VzcyAoKSB7CisJIyBjb3B5IGJhY2sgdGhlIG9sZCBNYWtlZmlsZSB0byBmaXggdGFyZ2V0IHBhY2thZ2UKKwlpbnN0YWxsIC1tIDA2NDQgJHtCfS9NYWtlZmlsZS5vcmlnICR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnL01ha2VmaWxlCisJaW5zdGFsbCAtbSAwNjQ0ICR7Qn0vTWFrZWZpbGUub3JpZyAke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy0ke1BZVEhPTl9NQUpNSU59JHtQWVRIT05fQUJJfS9NYWtlZmlsZQorCSMgUmVtb3ZlIHJlZmVyZW5jZXMgdG8gYnVpbGRtYWNoaW5lIHBhdGhzIGluIHRhcmdldCBNYWtlZmlsZSBhbmQgX3N5c2NvbmZpZ2RhdGEKKwlzZWQgLWkgLWUgJ3M6LS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfTo6ZycgLWUgczonLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0nOjpnIFwKKwkJJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUgXAorCQkke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy0ke1BZVEhPTl9NQUpNSU59JHtQWVRIT05fQUJJfS9NYWtlZmlsZSBcCisJCSR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vX3N5c2NvbmZpZ2RhdGEucHkKK30KKworcmVxdWlyZSBweXRob24tJHtQWVRIT05fTUFKTUlOfS1tYW5pZmVzdC5pbmMKKworIyBtYW51YWwgZGVwZW5kZW5jeSBhZGRpdGlvbnMKK1JQUk9WSURFU18ke1BOfS1tb2R1bGVzID0gIiR7UE59IgorUlJFQ09NTUVORFNfJHtQTn0tY29yZSA9ICIke1BOfS1yZWFkbGluZSIKK1JSRUNPTU1FTkRTXyR7UE59LWNyeXB0ID0gIm9wZW5zc2wiCitSUkVDT01NRU5EU18ke1BOfS1jcnlwdF9jbGFzcy1uYXRpdmVzZGsgPSAibmF0aXZlc2RrLW9wZW5zc2wiCisKK0ZJTEVTXyR7UE59LTJ0bzMgKz0gIiR7YmluZGlyfS8ydG8zLSR7UFlUSE9OX01BSk1JTn0iCitGSUxFU18ke1BOfS1weWRvYyArPSAiJHtiaW5kaXJ9L3B5ZG9jJHtQWVRIT05fTUFKTUlOfSAke2JpbmRpcn0vcHlkb2MzIgorRklMRVNfJHtQTn0taWRsZSArPSAiJHtiaW5kaXJ9L2lkbGUzICR7YmluZGlyfS9pZGxlJHtQWVRIT05fTUFKTUlOfSIKKworUEFDS0FHRVMgPSsgIiR7UE59LXB5dmVudiIKK0ZJTEVTXyR7UE59LXB5dmVudiArPSAiJHtiaW5kaXJ9L3B5dmVudi0ke1BZVEhPTl9NQUpNSU59ICR7YmluZGlyfS9weXZlbnYiCisKKyMgcGFja2FnZSBsaWJweXRob24zCitQQUNLQUdFUyA9KyAibGlicHl0aG9uMyBsaWJweXRob24zLXN0YXRpY2RldiIKK0ZJTEVTX2xpYnB5dGhvbjMgPSAiJHtsaWJkaXJ9L2xpYnB5dGhvbiouc28uKiIKK0ZJTEVTX2xpYnB5dGhvbjMtc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWctJHtQWVRIT05fQklOQUJJfS9saWJweXRob24ke1BZVEhPTl9CSU5BQkl9LmEiCitJTlNBTkVfU0tJUF8ke1BOfS1kZXYgKz0gImRldi1lbGYiCisKKyMgY2F0Y2ggYWxsIHRoZSByZXN0ICh1bnNvcnRlZCkKK1BBQ0tBR0VTICs9ICIke1BOfS1taXNjIgorUkRFUEVORFNfJHtQTn0tbWlzYyArPSAiJHtQTn0tY29yZSAke1BOfS1lbWFpbCAke1BOfS1jb2RlY3MgJHtQTn0tdGV4dHV0aWxzICR7UE59LWFyZ3BhcnNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlcyArPSAiJHtQTn0tbWlzYyIKK0ZJTEVTXyR7UE59LW1pc2MgPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0iCisKKyMgY2F0Y2ggbWFucGFnZQorUEFDS0FHRVMgKz0gIiR7UE59LW1hbiIKK0ZJTEVTXyR7UE59LW1hbiA9ICIke2RhdGFkaXJ9L21hbiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob25fMi43LjEzLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uXzIuNy4xMy5iYgppbmRleCA0ZWY5OTUyLi43NTRjMDI5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob25fMi43LjEzLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbl8yLjcuMTMuYmIKQEAgLTEsNSArMSw1IEBACiByZXF1aXJlIHB5dGhvbi5pbmMKLURFUEVORFMgPSAicHl0aG9uLW5hdGl2ZSBsaWJmZmkgYnppcDIgZGIgZ2RibSBvcGVuc3NsIHJlYWRsaW5lIHNxbGl0ZTMgemxpYiIKK0RFUEVORFMgPSAicHl0aG9uLW5hdGl2ZSBsaWJmZmkgYnppcDIgZ2RibSBvcGVuc3NsIHJlYWRsaW5lIHNxbGl0ZTMgemxpYiIKIFBSID0gIiR7SU5DX1BSfSIKIAogRElTVFJPX1NSQ19VUkkgPz0gImZpbGU6Ly9zaXRlY3VzdG9taXplLnB5IgpAQCAtMjcsNiArMjcsOCBAQAogICBmaWxlOi8vdXNlX3N5c3Jvb3RfbmN1cnNlc19pbnN0ZWFkX29mX2hvc3QucGF0Y2ggXAogICBmaWxlOi8vYWRkLUNST1NTUFlUSE9OUEFUSC1mb3ItUFlUSE9OX0ZPUl9CVUlMRC5wYXRjaCBcCiAgIGZpbGU6Ly9Eb24tdC11c2UtZ2V0ZW50cm9weS1vbi1MaW51eC5wYXRjaCBcCisgIGZpbGU6Ly9wYXNzLW1pc3NpbmctbGlicmFyaWVzLXRvLUV4dGVuc2lvbi1mb3ItbXVsLnBhdGNoIFwKKyAgZmlsZTovL3N1cHBvcnRfU09VUkNFX0RBVEVfRVBPQ0hfaW5fcHlfY29tcGlsZV8yLjcucGF0Y2ggXAogIgogCiBTID0gIiR7V09SS0RJUn0vUHl0aG9uLSR7UFZ9IgpAQCAtMzcsNiArMzksOSBAQAogCiBFWFRSQV9PRUNPTkYgKz0gImFjX2N2X2ZpbGVfX2Rldl9wdG14PXllcyBhY19jdl9maWxlX19kZXZfcHRjPW5vIgogCitQQUNLQUdFQ09ORklHID8/PSAiYmRiIgorUEFDS0FHRUNPTkZJR1tiZGJdID0gIiwsZGIiCisKIGRvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CiAJcm0gLWYgJHtTfS9NYWtlZmlsZS5vcmlnCiAgICAgICAgIGF1dG9yZWNvbmYgLVdjcm9zcyAtLXZlcmJvc2UgLS1pbnN0YWxsIC0tZm9yY2UgLS1leGNsdWRlPWF1dG9wb2ludCAuLi9QeXRob24tJHtQVn0vTW9kdWxlcy9fY3R5cGVzL2xpYmZmaQpAQCAtMTE2LDYgKzEyMSwxMCBAQAogCWZpCiAKIAlvZV9tdWx0aWxpYl9oZWFkZXIgcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9weWNvbmZpZy5oCisKKyAgICBpZiBbIC16ICIke0BiYi51dGlscy5maWx0ZXIoJ1BBQ0tBR0VDT05GSUcnLCAnYmRiJywgZCl9IiBdOyB0aGVuCisgICAgICAgIHJtIC1yZiAke0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2JzZGRiCisgICAgZmkKIH0KIAogZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrICgpIHsKQEAgLTE1Miw3ICsxNjEsOSBAQAogUEFDS0FHRVMgKz0gIiR7UE59LW1pc2MiCiBGSUxFU18ke1BOfS1taXNjID0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59IgogUkRFUEVORFNfJHtQTn0tbW9kdWxlcyArPSAiJHtQTn0tbWlzYyIKLVJERVBFTkRTXyR7UE59LXB0ZXN0ID0gIiR7UE59LW1vZHVsZXMiCisKKyMgcHRlc3QKK1JERVBFTkRTXyR7UE59LXB0ZXN0ID0gIiR7UE59LW1vZHVsZXMgJHtQTn0tdGVzdHMiCiAjaW5oZXJpdCBwdGVzdCBhZnRlciAicmVxdWlyZSBweXRob24tJHtQWVRIT05fTUFKTUlOfS1tYW5pZmVzdC5pbmMiIHNvIFBBQ0tBR0VTIGRvZXNuJ3QgZ2V0IG92ZXJ3cml0dGVuCiBpbmhlcml0IHB0ZXN0CiAKQEAgLTE2MiwxMCArMTczLDIzIEBACiAJc2VkIC1lIHM6TElCRElSL3B5dGhvbi9wdGVzdDoke1BURVNUX1BBVEh9OmcgXAogCSAtZSBzOkxJQkRJUjoke2xpYmRpcn06ZyBcCiAJIC1pICR7RH0ke1BURVNUX1BBVEh9L3J1bi1wdGVzdAorCisJI1JlbW92ZSBidWlsZCBob3N0IHJlZmVyZW5jZXMKKwlzZWQgLWkgXAorCQktZSAnczotLXdpdGgtbGlidG9vbC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSc6OmcgXAorCSAgICAtZSAnczotLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9OjpnJyBcCisJICAgIC1lICdzfCR7REVCVUdfUFJFRklYX01BUH18fGcnIFwKKwkgICAgLWUgJ3M6JHtIT1NUVE9PTFNfRElSfS86OmcnIFwKKwkgICAgLWUgJ3M6JHtSRUNJUEVfU1lTUk9PVH06OmcnIFwKKwkgICAgLWUgJ3M6JHtCQVNFX1dPUktESVJ9LyR7TVVMVElNQUNIX1RBUkdFVF9TWVN9OjpnJyBcCisJJHtEfS8ke1BURVNUX1BBVEh9L01ha2VmaWxlCiB9CiAKICMgY2F0Y2ggbWFucGFnZQogUEFDS0FHRVMgKz0gIiR7UE59LW1hbiIKIEZJTEVTXyR7UE59LW1hbiA9ICIke2RhdGFkaXJ9L21hbiIKIAorIyBOYXN0eSBidXQgaWYgYmRiIGlzbid0IGVuYWJsZWQgdGhlIHBhY2thZ2Ugd29uJ3QgYmUgZ2VuZXJhdGVkCitSREVQRU5EU18ke1BOfS1tb2R1bGVzX3JlbW92ZSA9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdiZGInLCAnJywgJyR7UE59LWJzZGRiJywgZCl9IgorCiBCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LWhlbHBlci1uYXRpdmVfMS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtaGVscGVyLW5hdGl2ZV8xLjAuYmIKaW5kZXggMjdkNTMxNS4uZDg2YjE1NSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtaGVscGVyLW5hdGl2ZV8xLjAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtaGVscGVyLW5hdGl2ZV8xLjAuYmIKQEAgLTIwLDYgKzIwLDUgQEAKIAlpbnN0YWxsIHR1bmN0bCAke0R9JHtiaW5kaXJ9LwogfQogCi1STV9XT1JLX0VYQ0xVREVfSVRFTVMgKz0gInJlY2lwZS1zeXNyb290LW5hdGl2ZSIKIERFUEVORFMgKz0gInFlbXUtbmF0aXZlIgogYWRkdGFzayBhZGR0b19yZWNpcGVfc3lzcm9vdCBhZnRlciBkb19wb3B1bGF0ZV9zeXNyb290IGJlZm9yZSBkb19idWlsZApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUuaW5jCmluZGV4IDBlMTQxMWEuLjJhMWQxNGIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS5pbmMKQEAgLTI2LDcgKzI2LDYgQEAKICAgICAtLWRpc2FibGUtc3RyaXAgXAogICAgIC0tZGlzYWJsZS13ZXJyb3IgXAogICAgIC0tdGFyZ2V0LWxpc3Q9JHtAZ2V0X3FlbXVfdGFyZ2V0X2xpc3QoZCl9IFwKLSAgICAtLXdpdGgtc3lzdGVtLXBpeG1hbiBcCiAgICAgLS1leHRyYS1jZmxhZ3M9JyR7Q0ZMQUdTfScgXAogICAgICIKIEVYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLXB5dGhvbj0ke1VTUkJJTlBBVEh9L3B5dGhvbjIuNyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LzAwMDQtQWRkLXN1cHBvcnQtZm9yLVZNLXN1c3BlbmQtcmVzdW1lLWZvci1UUE0tVElTLXYyLjkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS8wMDA0LUFkZC1zdXBwb3J0LWZvci1WTS1zdXNwZW5kLXJlc3VtZS1mb3ItVFBNLVRJUy12Mi45LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZGJhZmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS8wMDA0LUFkZC1zdXBwb3J0LWZvci1WTS1zdXNwZW5kLXJlc3VtZS1mb3ItVFBNLVRJUy12Mi45LnBhdGNoCkBAIC0wLDAgKzEsNzE5IEBACitGcm9tIDVlOWRkOTA2M2Y1MTQ0NDdlYTRmNTQwNDY3OTNmNGYwMWMyOTdlZDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBTdGVmYW4gQmVyZ2VyIDxzdGVmYW5iQGxpbnV4LnZuZXQuaWJtLmNvbT4KK0RhdGU6IFNhdCwgMzEgRGVjIDIwMTYgMTE6MjM6MzIgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCA0LzRdIEFkZCBzdXBwb3J0IGZvciBWTSBzdXNwZW5kL3Jlc3VtZSBmb3IgVFBNIFRJUworCitFeHRlbmQgdGhlIFRQTSBUSVMgY29kZSB0byBzdXBwb3J0IHN1c3BlbmQvcmVzdW1lLiBJbiBjYXNlIGEgY29tbWFuZAoraXMgYmVpbmcgcHJvY2Vzc2VkIGJ5IHRoZSBleHRlcm5hbCBUUE0gd2hlbiBzdXNwZW5kaW5nLCB3YWl0IGZvciB0aGUgY29tbWFuZAordG8gY29tcGxldGUgdG8gY2F0Y2ggdGhlIHJlc3VsdC4gSW4gY2FzZSB0aGUgYm90dG9tIGhhbGYgZGlkIG5vdCBydW4sCitydW4gdGhlIG9uZSBmdW5jdGlvbiB0aGUgYm90dG9tIGhhbGYgaXMgc3VwcG9zZWQgdG8gcnVuLiBUaGlzIHRoZW4KK21ha2VzIHRoZSByZXN1bWUgb3BlcmF0aW9uIHdvcmsuCisKK1RoZSBwYXNzdGhyb3VnaCBiYWNrZW5kIGRvZXMgbm90IHN1cHBvcnQgc3VzcGVuZC9yZXN1bWUgb3BlcmF0aW9uCithbmQgaXMgdGhlcmVmb3JlIGJsb2NrZWQgZnJvbSBzdXNwZW5kL3Jlc3VtZSBhbmQgbWlncmF0aW9uLgorCitUaGUgQ1VTRSBUUE0ncyBzdXBwb3J0ZWQgY2FwYWJpbGl0aWVzIGFyZSB0ZXN0ZWQgYW5kIGlmIHN1ZmZpY2llbnQKK2NhcGFiaWxpdGllcyBhcmUgaW1wbGVtZW50ZWQsIHN1c3BlbmQvcmVzdW1lLCBzbmFwc2hvdHRpbmcgYW5kCittaWdyYXRpb24gYXJlIHN1cHBvcnRlZCBieSB0aGUgQ1VTRSBUUE0uCisKK1NpZ25lZC1vZmYtYnk6IFN0ZWZhbiBCZXJnZXIgPHN0ZWZhbmJAbGludXgudm5ldC5pYm0uY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW2h0dHBzOi8vbGlzdHMubm9uZ251Lm9yZy9hcmNoaXZlL2h0bWwvcWVtdS1kZXZlbC8yMDE2LTA2L21zZzAwMjUyLmh0bWxdCitTaWduZWQtb2ZmLWJ5OiBQYXRyaWNrIE9obHkgPHBhdHJpY2sub2hseUBpbnRlbC5jb20+CistLS0KKyBody90cG0vdHBtX3Bhc3N0aHJvdWdoLmMgICAgIHwgMTMwICsrKysrKysrKysrKysrKysrKysrKysrLS0KKyBody90cG0vdHBtX3Rpcy5jICAgICAgICAgICAgIHwgMTM3ICsrKysrKysrKysrKysrKysrKysrKysrKystCisgaHcvdHBtL3RwbV90aXMuaCAgICAgICAgICAgICB8ICAgMiArCisgaHcvdHBtL3RwbV91dGlsLmMgICAgICAgICAgICB8IDIyMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgaHcvdHBtL3RwbV91dGlsLmggICAgICAgICAgICB8ICAgNyArKworIGluY2x1ZGUvc3lzZW11L3RwbV9iYWNrZW5kLmggfCAgMTIgKysrCisgNiBmaWxlcyBjaGFuZ2VkLCA1MDMgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2h3L3RwbS90cG1fcGFzc3Rocm91Z2guYyBiL2h3L3RwbS90cG1fcGFzc3Rocm91Z2guYworaW5kZXggNDQ3MzllYmFkMi4uYmM4MDcyZDBiYyAxMDA2NDQKKy0tLSBhL2h3L3RwbS90cG1fcGFzc3Rocm91Z2guYworKysrIGIvaHcvdHBtL3RwbV9wYXNzdGhyb3VnaC5jCitAQCAtMzQsNiArMzQsOCBAQAorICNpbmNsdWRlICJ0cG1fdGlzLmgiCisgI2luY2x1ZGUgInRwbV91dGlsLmgiCisgI2luY2x1ZGUgInRwbV9pb2N0bC5oIgorKyNpbmNsdWRlICJtaWdyYXRpb24vbWlncmF0aW9uLmgiCisrI2luY2x1ZGUgInFhcGkvZXJyb3IuaCIKKyAKKyAjZGVmaW5lIERFQlVHX1RQTSAwCisgCitAQCAtNDksNiArNTEsNyBAQAorICNkZWZpbmUgVFlQRV9UUE1fQ1VTRSAidHBtLWN1c2UiCisgCisgc3RhdGljIGNvbnN0IFRQTURyaXZlck9wcyB0cG1fcGFzc3Rocm91Z2hfZHJpdmVyOworK3N0YXRpYyBjb25zdCBWTVN0YXRlRGVzY3JpcHRpb24gdm1zdGF0ZV90cG1fY3VzZTsKKyAKKyAvKiBkYXRhIHN0cnVjdHVyZXMgKi8KKyB0eXBlZGVmIHN0cnVjdCBUUE1QYXNzdGhydVRocmVhZFBhcmFtcyB7CitAQCAtNzksNiArODIsMTAgQEAgc3RydWN0IFRQTVBhc3N0aHJ1U3RhdGUgeworICAgICBRZW11TXV0ZXggc3RhdGVfbG9jazsKKyAgICAgUWVtdUNvbmQgY21kX2NvbXBsZXRlOyAgLyogc2luZ25hbGVkIG9uY2UgdHBtX2J1c3kgaXMgZmFsc2UgKi8KKyAgICAgYm9vbCB0cG1fYnVzeTsKKysKKysgICAgRXJyb3IgKm1pZ3JhdGlvbl9ibG9ja2VyOworKworKyAgICBUUE1CbG9iQnVmZmVycyB0cG1fYmxvYnM7CisgfTsKKyAKKyB0eXBlZGVmIHN0cnVjdCBUUE1QYXNzdGhydVN0YXRlIFRQTVBhc3N0aHJ1U3RhdGU7CitAQCAtMzA2LDYgKzMxMywxMCBAQCBzdGF0aWMgdm9pZCB0cG1fcGFzc3Rocm91Z2hfc2h1dGRvd24oVFBNUGFzc3RocnVTdGF0ZSAqdHBtX3B0KQorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgfQorICAgICB9CisrICAgIGlmICh0cG1fcHQtPm1pZ3JhdGlvbl9ibG9ja2VyKSB7CisrICAgICAgICBtaWdyYXRlX2RlbF9ibG9ja2VyKHRwbV9wdC0+bWlncmF0aW9uX2Jsb2NrZXIpOworKyAgICAgICAgZXJyb3JfZnJlZSh0cG1fcHQtPm1pZ3JhdGlvbl9ibG9ja2VyKTsKKysgICAgfQorIH0KKyAKKyAvKgorQEAgLTM2MCwxMiArMzcxLDE0IEBAIHN0YXRpYyBpbnQgdHBtX3Bhc3N0aHJvdWdoX2N1c2VfY2hlY2tfY2FwcyhUUE1QYXNzdGhydVN0YXRlICp0cG1fcHQpCisgLyoKKyAgKiBJbml0aWFsaXplIHRoZSBleHRlcm5hbCBDVVNFIFRQTQorICAqLworLXN0YXRpYyBpbnQgdHBtX3Bhc3N0aHJvdWdoX2N1c2VfaW5pdChUUE1QYXNzdGhydVN0YXRlICp0cG1fcHQpCisrc3RhdGljIGludCB0cG1fcGFzc3Rocm91Z2hfY3VzZV9pbml0KFRQTVBhc3N0aHJ1U3RhdGUgKnRwbV9wdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc19yZXN1bWUpCisgeworICAgICBpbnQgcmMgPSAwOworLSAgICBwdG1faW5pdCBpbml0ID0geworLSAgICAgICAgLnUucmVxLmluaXRfZmxhZ3MgPSBQVE1fSU5JVF9GTEFHX0RFTEVURV9WT0xBVElMRSwKKy0gICAgfTsKKysgICAgcHRtX2luaXQgaW5pdDsKKysgICAgaWYgKGlzX3Jlc3VtZSkgeworKyAgICAgICAgaW5pdC51LnJlcS5pbml0X2ZsYWdzID0gUFRNX0lOSVRfRkxBR19ERUxFVEVfVk9MQVRJTEU7CisrICAgIH0KKyAKKyAgICAgaWYgKFRQTV9QQVNTVEhST1VHSF9VU0VTX0NVU0VfVFBNKHRwbV9wdCkpIHsKKyAgICAgICAgIGlmIChpb2N0bCh0cG1fcHQtPnRwbV9mZCwgUFRNX0lOSVQsICZpbml0KSA8IDApIHsKK0BAIC0zOTQsNyArNDA3LDcgQEAgc3RhdGljIGludCB0cG1fcGFzc3Rocm91Z2hfc3RhcnR1cF90cG0oVFBNQmFja2VuZCAqdGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHBtX3Bhc3N0aHJvdWdoX3dvcmtlcl90aHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRwbV9wdC0+dHBtX3RocmVhZF9wYXJhbXMpOworIAorLSAgICB0cG1fcGFzc3Rocm91Z2hfY3VzZV9pbml0KHRwbV9wdCk7CisrICAgIHRwbV9wYXNzdGhyb3VnaF9jdXNlX2luaXQodHBtX3B0LCBmYWxzZSk7CisgCisgICAgIHJldHVybiAwOworIH0KK0BAIC00NjYsNiArNDc5LDMyIEBAIHN0YXRpYyBpbnQgdHBtX3Bhc3N0aHJvdWdoX3Jlc2V0X3RwbV9lc3RhYmxpc2hlZF9mbGFnKFRQTUJhY2tlbmQgKnRiLAorICAgICByZXR1cm4gcmM7CisgfQorIAorK3N0YXRpYyBpbnQgdHBtX2N1c2VfZ2V0X3N0YXRlX2Jsb2JzKFRQTUJhY2tlbmQgKnRiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVjcnlwdGVkX2Jsb2JzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRQTUJsb2JCdWZmZXJzICp0cG1fYmxvYnMpCisreworKyAgICBUUE1QYXNzdGhydVN0YXRlICp0cG1fcHQgPSBUUE1fUEFTU1RIUk9VR0godGIpOworKworKyAgICBhc3NlcnQoVFBNX1BBU1NUSFJPVUdIX1VTRVNfQ1VTRV9UUE0odHBtX3B0KSk7CisrCisrICAgIHJldHVybiB0cG1fdXRpbF9jdXNlX2dldF9zdGF0ZV9ibG9icyh0cG1fcHQtPnRwbV9mZCwgZGVjcnlwdGVkX2Jsb2JzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHBtX2Jsb2JzKTsKKyt9CisrCisrc3RhdGljIGludCB0cG1fY3VzZV9zZXRfc3RhdGVfYmxvYnMoVFBNQmFja2VuZCAqdGIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFBNQmxvYkJ1ZmZlcnMgKnRwbV9ibG9icykKKyt7CisrICAgIFRQTVBhc3N0aHJ1U3RhdGUgKnRwbV9wdCA9IFRQTV9QQVNTVEhST1VHSCh0Yik7CisrCisrICAgIGFzc2VydChUUE1fUEFTU1RIUk9VR0hfVVNFU19DVVNFX1RQTSh0cG1fcHQpKTsKKysKKysgICAgaWYgKHRwbV91dGlsX2N1c2Vfc2V0X3N0YXRlX2Jsb2JzKHRwbV9wdC0+dHBtX2ZkLCB0cG1fYmxvYnMpKSB7CisrICAgICAgICByZXR1cm4gMTsKKysgICAgfQorKworKyAgICByZXR1cm4gdHBtX3Bhc3N0aHJvdWdoX2N1c2VfaW5pdCh0cG1fcHQsIHRydWUpOworK30KKysKKyBzdGF0aWMgYm9vbCB0cG1fcGFzc3Rocm91Z2hfZ2V0X3N0YXJ0dXBfZXJyb3IoVFBNQmFja2VuZCAqdGIpCisgeworICAgICBUUE1QYXNzdGhydVN0YXRlICp0cG1fcHQgPSBUUE1fUEFTU1RIUk9VR0godGIpOworQEAgLTQ4OCw3ICs1MjcsNyBAQCBzdGF0aWMgdm9pZCB0cG1fcGFzc3Rocm91Z2hfZGVsaXZlcl9yZXF1ZXN0KFRQTUJhY2tlbmQgKnRiKQorIHsKKyAgICAgVFBNUGFzc3RocnVTdGF0ZSAqdHBtX3B0ID0gVFBNX1BBU1NUSFJPVUdIKHRiKTsKKyAKKy0gICAgLyogVFBNIGNvbnNpZGVyZWQgYnVzeSBvbmNlIFRQTSBSZXF1ZXN0IHNjaGVkdWxlZCBmb3IgcHJvY2Vzc2luZyAqLworKyAgICAvKiBUUE0gY29uc2lkZXJlZCBidXN5IG9uY2UgVFBNIHJlcXVlc3Qgc2NoZWR1bGVkIGZvciBwcm9jZXNzaW5nICovCisgICAgIHFlbXVfbXV0ZXhfbG9jaygmdHBtX3B0LT5zdGF0ZV9sb2NrKTsKKyAgICAgdHBtX3B0LT50cG1fYnVzeSA9IHRydWU7CisgICAgIHFlbXVfbXV0ZXhfdW5sb2NrKCZ0cG1fcHQtPnN0YXRlX2xvY2spOworQEAgLTYwMSw2ICs2NDAsMjUgQEAgc3RhdGljIGludCB0cG1fcGFzc3Rocm91Z2hfb3Blbl9zeXNmc19jYW5jZWwoVFBNQmFja2VuZCAqdGIpCisgICAgIHJldHVybiBmZDsKKyB9CisgCisrc3RhdGljIHZvaWQgdHBtX3Bhc3N0aHJvdWdoX2Jsb2NrX21pZ3JhdGlvbihUUE1QYXNzdGhydVN0YXRlICp0cG1fcHQpCisreworKyAgICBwdG1fY2FwIGNhcHM7CisrCisrICAgIGlmIChUUE1fUEFTU1RIUk9VR0hfVVNFU19DVVNFX1RQTSh0cG1fcHQpKSB7CisrICAgICAgICBjYXBzID0gUFRNX0NBUF9HRVRfU1RBVEVCTE9CIHwgUFRNX0NBUF9TRVRfU1RBVEVCTE9CIHwKKysgICAgICAgICAgICAgICBQVE1fQ0FQX1NUT1A7CisrICAgICAgICBpZiAoIVRQTV9DVVNFX0lNUExFTUVOVFNfQUxMKHRwbV9wdCwgY2FwcykpIHsKKysgICAgICAgICAgICBlcnJvcl9zZXRnKCZ0cG1fcHQtPm1pZ3JhdGlvbl9ibG9ja2VyLAorKyAgICAgICAgICAgICAgICAgICAgICAgIk1pZ3JhdGlvbiBkaXNhYmxlZDogQ1VTRSBUUE0gbGFja3MgbmVjZXNzYXJ5IGNhcGFiaWxpdGllcyIpOworKyAgICAgICAgICAgIG1pZ3JhdGVfYWRkX2Jsb2NrZXIodHBtX3B0LT5taWdyYXRpb25fYmxvY2tlcik7CisrICAgICAgICB9CisrICAgIH0gZWxzZSB7CisrICAgICAgICBlcnJvcl9zZXRnKCZ0cG1fcHQtPm1pZ3JhdGlvbl9ibG9ja2VyLAorKyAgICAgICAgICAgICAgICAgICAiTWlncmF0aW9uIGRpc2FibGVkOiBQYXNzdGhyb3VnaCBUUE0gZG9lcyBub3Qgc3VwcG9ydCBtaWdyYXRpb24iKTsKKysgICAgICAgIG1pZ3JhdGVfYWRkX2Jsb2NrZXIodHBtX3B0LT5taWdyYXRpb25fYmxvY2tlcik7CisrICAgIH0KKyt9CisrCisgc3RhdGljIGludCB0cG1fcGFzc3Rocm91Z2hfaGFuZGxlX2RldmljZV9vcHRzKFFlbXVPcHRzICpvcHRzLCBUUE1CYWNrZW5kICp0YikKKyB7CisgICAgIFRQTVBhc3N0aHJ1U3RhdGUgKnRwbV9wdCA9IFRQTV9QQVNTVEhST1VHSCh0Yik7CitAQCAtNjQyLDcgKzcwMCw3IEBAIHN0YXRpYyBpbnQgdHBtX3Bhc3N0aHJvdWdoX2hhbmRsZV9kZXZpY2Vfb3B0cyhRZW11T3B0cyAqb3B0cywgVFBNQmFja2VuZCAqdGIpCisgICAgICAgICAgICAgZ290byBlcnJfY2xvc2VfdHBtZGV2OworICAgICAgICAgfQorICAgICAgICAgLyogaW5pdCBUUE0gZm9yIHByb2JpbmcgKi8KKy0gICAgICAgIGlmICh0cG1fcGFzc3Rocm91Z2hfY3VzZV9pbml0KHRwbV9wdCkpIHsKKysgICAgICAgIGlmICh0cG1fcGFzc3Rocm91Z2hfY3VzZV9pbml0KHRwbV9wdCwgZmFsc2UpKSB7CisgICAgICAgICAgICAgZ290byBlcnJfY2xvc2VfdHBtZGV2OworICAgICAgICAgfQorICAgICB9CitAQCAtNjU5LDYgKzcxNyw3IEBAIHN0YXRpYyBpbnQgdHBtX3Bhc3N0aHJvdWdoX2hhbmRsZV9kZXZpY2Vfb3B0cyhRZW11T3B0cyAqb3B0cywgVFBNQmFja2VuZCAqdGIpCisgICAgICAgICB9CisgICAgIH0KKyAKKysgICAgdHBtX3Bhc3N0aHJvdWdoX2Jsb2NrX21pZ3JhdGlvbih0cG1fcHQpOworIAorICAgICByZXR1cm4gMDsKKyAKK0BAIC03NjYsMTAgKzgyNSwxMyBAQCBzdGF0aWMgdm9pZCB0cG1fcGFzc3Rocm91Z2hfaW5zdF9pbml0KE9iamVjdCAqb2JqKQorIAorICAgICBxZW11X211dGV4X2luaXQoJnRwbV9wdC0+c3RhdGVfbG9jayk7CisgICAgIHFlbXVfY29uZF9pbml0KCZ0cG1fcHQtPmNtZF9jb21wbGV0ZSk7CisrCisrICAgIHZtc3RhdGVfcmVnaXN0ZXIoTlVMTCwgLTEsICZ2bXN0YXRlX3RwbV9jdXNlLCBvYmopOworIH0KKyAKKyBzdGF0aWMgdm9pZCB0cG1fcGFzc3Rocm91Z2hfaW5zdF9maW5hbGl6ZShPYmplY3QgKm9iaikKKyB7CisrICAgIHZtc3RhdGVfdW5yZWdpc3RlcihOVUxMLCAmdm1zdGF0ZV90cG1fY3VzZSwgb2JqKTsKKyB9CisgCisgc3RhdGljIHZvaWQgdHBtX3Bhc3N0aHJvdWdoX2NsYXNzX2luaXQoT2JqZWN0Q2xhc3MgKmtsYXNzLCB2b2lkICpkYXRhKQorQEAgLTgwMiw2ICs4NjQsNjAgQEAgc3RhdGljIGNvbnN0IGNoYXIgKnRwbV9wYXNzdGhyb3VnaF9jdXNlX2NyZWF0ZV9kZXNjKHZvaWQpCisgICAgIHJldHVybiAiQ1VTRSBUUE0gYmFja2VuZCBkcml2ZXIiOworIH0KKyAKKytzdGF0aWMgdm9pZCB0cG1fY3VzZV9wcmVfc2F2ZSh2b2lkICpvcGFxdWUpCisreworKyAgICBUUE1QYXNzdGhydVN0YXRlICp0cG1fcHQgPSBvcGFxdWU7CisrICAgIFRQTUJhY2tlbmQgKnRiID0gJnRwbV9wdC0+cGFyZW50OworKworKyAgICAgcWVtdV9tdXRleF9sb2NrKCZ0cG1fcHQtPnN0YXRlX2xvY2spOworKyAgICAgLyogd2FpdCBmb3IgVFBNIHRvIGZpbmlzaCBwcm9jZXNzaW5nICovCisrICAgICBpZiAodHBtX3B0LT50cG1fYnVzeSkgeworKyAgICAgICAgcWVtdV9jb25kX3dhaXQoJnRwbV9wdC0+Y21kX2NvbXBsZXRlLCAmdHBtX3B0LT5zdGF0ZV9sb2NrKTsKKysgICAgIH0KKysgICAgIHFlbXVfbXV0ZXhfdW5sb2NrKCZ0cG1fcHQtPnN0YXRlX2xvY2spOworKworKyAgICAvKiBnZXQgdGhlIGRlY3J5cHRlZCBzdGF0ZSBibG9icyBmcm9tIHRoZSBUUE0gKi8KKysgICAgdHBtX2N1c2VfZ2V0X3N0YXRlX2Jsb2JzKHRiLCBUUlVFLCAmdHBtX3B0LT50cG1fYmxvYnMpOworK30KKysKKytzdGF0aWMgaW50IHRwbV9jdXNlX3Bvc3RfbG9hZCh2b2lkICpvcGFxdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZlcnNpb25faWQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkpCisreworKyAgICBUUE1QYXNzdGhydVN0YXRlICp0cG1fcHQgPSBvcGFxdWU7CisrICAgIFRQTUJhY2tlbmQgKnRiID0gJnRwbV9wdC0+cGFyZW50OworKworKyAgICByZXR1cm4gdHBtX2N1c2Vfc2V0X3N0YXRlX2Jsb2JzKHRiLCAmdHBtX3B0LT50cG1fYmxvYnMpOworK30KKysKKytzdGF0aWMgY29uc3QgVk1TdGF0ZURlc2NyaXB0aW9uIHZtc3RhdGVfdHBtX2N1c2UgPSB7CisrICAgIC5uYW1lID0gImN1c2UtdHBtIiwKKysgICAgLnZlcnNpb25faWQgPSAxLAorKyAgICAubWluaW11bV92ZXJzaW9uX2lkID0gMCwKKysgICAgLm1pbmltdW1fdmVyc2lvbl9pZF9vbGQgPSAwLAorKyAgICAucHJlX3NhdmUgID0gdHBtX2N1c2VfcHJlX3NhdmUsCisrICAgIC5wb3N0X2xvYWQgPSB0cG1fY3VzZV9wb3N0X2xvYWQsCisrICAgIC5maWVsZHMgPSAoVk1TdGF0ZUZpZWxkW10pIHsKKysgICAgICAgIFZNU1RBVEVfVUlOVDMyKHRwbV9ibG9icy5wZXJtYW5lbnRfZmxhZ3MsIFRQTVBhc3N0aHJ1U3RhdGUpLAorKyAgICAgICAgVk1TVEFURV9VSU5UMzIodHBtX2Jsb2JzLnBlcm1hbmVudC5zaXplLCBUUE1QYXNzdGhydVN0YXRlKSwKKysgICAgICAgIFZNU1RBVEVfVkJVRkZFUl9BTExPQ19VSU5UMzIodHBtX2Jsb2JzLnBlcm1hbmVudC5idWZmZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRQTVBhc3N0aHJ1U3RhdGUsIDEsIE5VTEwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwbV9ibG9icy5wZXJtYW5lbnQuc2l6ZSksCisrCisrICAgICAgICBWTVNUQVRFX1VJTlQzMih0cG1fYmxvYnMudm9sYXRpbF9mbGFncywgVFBNUGFzc3RocnVTdGF0ZSksCisrICAgICAgICBWTVNUQVRFX1VJTlQzMih0cG1fYmxvYnMudm9sYXRpbC5zaXplLCBUUE1QYXNzdGhydVN0YXRlKSwKKysgICAgICAgIFZNU1RBVEVfVkJVRkZFUl9BTExPQ19VSU5UMzIodHBtX2Jsb2JzLnZvbGF0aWwuYnVmZmVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUE1QYXNzdGhydVN0YXRlLCAxLCBOVUxMLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cG1fYmxvYnMudm9sYXRpbC5zaXplKSwKKysKKysgICAgICAgIFZNU1RBVEVfVUlOVDMyKHRwbV9ibG9icy5zYXZlc3RhdGVfZmxhZ3MsIFRQTVBhc3N0aHJ1U3RhdGUpLAorKyAgICAgICAgVk1TVEFURV9VSU5UMzIodHBtX2Jsb2JzLnNhdmVzdGF0ZS5zaXplLCBUUE1QYXNzdGhydVN0YXRlKSwKKysgICAgICAgIFZNU1RBVEVfVkJVRkZFUl9BTExPQ19VSU5UMzIodHBtX2Jsb2JzLnNhdmVzdGF0ZS5idWZmZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRQTVBhc3N0aHJ1U3RhdGUsIDEsIE5VTEwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwbV9ibG9icy5zYXZlc3RhdGUuc2l6ZSksCisrICAgICAgICBWTVNUQVRFX0VORF9PRl9MSVNUKCkKKysgICAgfQorK307CisrCisgc3RhdGljIGNvbnN0IFRQTURyaXZlck9wcyB0cG1fY3VzZV9kcml2ZXIgPSB7CisgICAgIC50eXBlICAgICAgICAgICAgICAgICAgICAgPSBUUE1fVFlQRV9DVVNFX1RQTSwKKyAgICAgLm9wdHMgICAgICAgICAgICAgICAgICAgICA9IHRwbV9wYXNzdGhyb3VnaF9jbWRsaW5lX29wdHMsCitkaWZmIC0tZ2l0IGEvaHcvdHBtL3RwbV90aXMuYyBiL2h3L3RwbS90cG1fdGlzLmMKK2luZGV4IDE0ZDllODNlYTIuLjliNjYwY2Y3MzcgMTAwNjQ0CistLS0gYS9ody90cG0vdHBtX3Rpcy5jCisrKysgYi9ody90cG0vdHBtX3Rpcy5jCitAQCAtMzY4LDYgKzM2OCw4IEBAIHN0YXRpYyB2b2lkIHRwbV90aXNfcmVjZWl2ZV9iaCh2b2lkICpvcGFxdWUpCisgICAgIFRQTVRJU0VtdVN0YXRlICp0aXMgPSAmcy0+cy50aXM7CisgICAgIHVpbnQ4X3QgbG9jdHkgPSBzLT5sb2N0eV9udW1iZXI7CisgCisrICAgIHRpcy0+Ymhfc2NoZWR1bGVkID0gZmFsc2U7CisrCisgICAgIHFlbXVfbXV0ZXhfbG9jaygmcy0+c3RhdGVfbG9jayk7CisgCisgICAgIHRwbV90aXNfc3RzX3NldCgmdGlzLT5sb2NbbG9jdHldLAorQEAgLTQxNSw2ICs0MTcsOCBAQCBzdGF0aWMgdm9pZCB0cG1fdGlzX3JlY2VpdmVfY2IoVFBNU3RhdGUgKnMsIHVpbnQ4X3QgbG9jdHksCisgICAgIHFlbXVfbXV0ZXhfdW5sb2NrKCZzLT5zdGF0ZV9sb2NrKTsKKyAKKyAgICAgcWVtdV9iaF9zY2hlZHVsZSh0aXMtPmJoKTsKKysKKysgICAgdGlzLT5iaF9zY2hlZHVsZWQgPSB0cnVlOworIH0KKyAKKyAvKgorQEAgLTEwMzAsOSArMTAzNCwxNDAgQEAgc3RhdGljIHZvaWQgdHBtX3Rpc19yZXNldChEZXZpY2VTdGF0ZSAqZGV2KQorICAgICB0cG1fdGlzX2RvX3N0YXJ0dXBfdHBtKHMpOworIH0KKyAKKysKKysvKiBwZXJzaXN0ZW50IHN0YXRlIGhhbmRsaW5nICovCisrCisrc3RhdGljIHZvaWQgdHBtX3Rpc19wcmVfc2F2ZSh2b2lkICpvcGFxdWUpCisreworKyAgICBUUE1TdGF0ZSAqcyA9IG9wYXF1ZTsKKysgICAgVFBNVElTRW11U3RhdGUgKnRpcyA9ICZzLT5zLnRpczsKKysgICAgdWludDhfdCBsb2N0eSA9IHRpcy0+YWN0aXZlX2xvY3R5OworKworKyAgICBEUFJJTlRGKCJ0cG1fdGlzOiBzdXNwZW5kOiBsb2N0eSA9ICVkIDogcl9vZmZzZXQgPSAlZCwgd19vZmZzZXQgPSAlZFxuIiwKKysgICAgICAgICAgICBsb2N0eSwgdGlzLT5sb2NbMF0ucl9vZmZzZXQsIHRpcy0+bG9jWzBdLndfb2Zmc2V0KTsKKysjaWZkZWYgREVCVUdfVElTCisrICAgIHRwbV90aXNfZHVtcF9zdGF0ZShvcGFxdWUsIDApOworKyNlbmRpZgorKworKyAgICBxZW11X211dGV4X2xvY2soJnMtPnN0YXRlX2xvY2spOworKworKyAgICAvKiB3YWl0IGZvciBvdXRzdGFuZGluZyByZXF1ZXN0IHRvIGNvbXBsZXRlICovCisrICAgIGlmIChUUE1fVElTX0lTX1ZBTElEX0xPQ1RZKGxvY3R5KSAmJgorKyAgICAgICAgdGlzLT5sb2NbbG9jdHldLnN0YXRlID09IFRQTV9USVNfU1RBVEVfRVhFQ1VUSU9OKSB7CisrICAgICAgICAvKgorKyAgICAgICAgICogSWYgd2UgZ2V0IGhlcmUgd2hlbiB0aGUgYmggaXMgc2NoZWR1bGVkIGJ1dCBkaWQgbm90IHJ1biwKKysgICAgICAgICAqIHdlIHdvbid0IGdldCBub3RpZmllZC4uLgorKyAgICAgICAgICovCisrICAgICAgICBpZiAoIXRpcy0+Ymhfc2NoZWR1bGVkKSB7CisrICAgICAgICAgICAgLyogYmFja2VuZCB0aHJlYWQgdG8gbm90aWZ5IHVzICovCisrICAgICAgICAgICAgcWVtdV9jb25kX3dhaXQoJnMtPmNtZF9jb21wbGV0ZSwgJnMtPnN0YXRlX2xvY2spOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKHRpcy0+bG9jW2xvY3R5XS5zdGF0ZSA9PSBUUE1fVElTX1NUQVRFX0VYRUNVVElPTikgeworKyAgICAgICAgICAgIC8qIGJvdHRvbSBoYWxmIGRpZCBub3QgcnVuIC0gcnVuIGl0cyBmdW5jdGlvbiAqLworKyAgICAgICAgICAgIHFlbXVfbXV0ZXhfdW5sb2NrKCZzLT5zdGF0ZV9sb2NrKTsKKysgICAgICAgICAgICB0cG1fdGlzX3JlY2VpdmVfYmgob3BhcXVlKTsKKysgICAgICAgICAgICBxZW11X211dGV4X2xvY2soJnMtPnN0YXRlX2xvY2spOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIHFlbXVfbXV0ZXhfdW5sb2NrKCZzLT5zdGF0ZV9sb2NrKTsKKysKKysgICAgLyogY29weSBjdXJyZW50IGFjdGl2ZSByZWFkIG9yIHdyaXRlIGJ1ZmZlciBpbnRvIHRoZSBidWZmZXIKKysgICAgICAgd3JpdHRlbiB0byBkaXNrICovCisrICAgIGlmIChUUE1fVElTX0lTX1ZBTElEX0xPQ1RZKGxvY3R5KSkgeworKyAgICAgICAgc3dpdGNoICh0aXMtPmxvY1tsb2N0eV0uc3RhdGUpIHsKKysgICAgICAgIGNhc2UgVFBNX1RJU19TVEFURV9SRUNFUFRJT046CisrICAgICAgICAgICAgbWVtY3B5KHRpcy0+YnVmLAorKyAgICAgICAgICAgICAgICAgICB0aXMtPmxvY1tsb2N0eV0ud19idWZmZXIuYnVmZmVyLAorKyAgICAgICAgICAgICAgICAgICBNSU4oc2l6ZW9mKHRpcy0+YnVmKSwKKysgICAgICAgICAgICAgICAgICAgICAgIHRpcy0+bG9jW2xvY3R5XS53X2J1ZmZlci5zaXplKSk7CisrICAgICAgICAgICAgdGlzLT5vZmZzZXQgPSB0aXMtPmxvY1tsb2N0eV0ud19vZmZzZXQ7CisrICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgVFBNX1RJU19TVEFURV9DT01QTEVUSU9OOgorKyAgICAgICAgICAgIG1lbWNweSh0aXMtPmJ1ZiwKKysgICAgICAgICAgICAgICAgICAgdGlzLT5sb2NbbG9jdHldLnJfYnVmZmVyLmJ1ZmZlciwKKysgICAgICAgICAgICAgICAgICAgTUlOKHNpemVvZih0aXMtPmJ1ZiksCisrICAgICAgICAgICAgICAgICAgICAgICB0aXMtPmxvY1tsb2N0eV0ucl9idWZmZXIuc2l6ZSkpOworKyAgICAgICAgICAgIHRpcy0+b2Zmc2V0ID0gdGlzLT5sb2NbbG9jdHldLnJfb2Zmc2V0OworKyAgICAgICAgYnJlYWs7CisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIC8qIGxlYWsgbm90aGluZyAqLworKyAgICAgICAgICAgIG1lbXNldCh0aXMtPmJ1ZiwgMHgwLCBzaXplb2YodGlzLT5idWYpKTsKKysgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICB9CisrfQorKworK3N0YXRpYyBpbnQgdHBtX3Rpc19wb3N0X2xvYWQodm9pZCAqb3BhcXVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZlcnNpb25faWQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkpCisreworKyAgICBUUE1TdGF0ZSAqcyA9IG9wYXF1ZTsKKysgICAgVFBNVElTRW11U3RhdGUgKnRpcyA9ICZzLT5zLnRpczsKKysKKysgICAgdWludDhfdCBsb2N0eSA9IHRpcy0+YWN0aXZlX2xvY3R5OworKworKyAgICBpZiAoVFBNX1RJU19JU19WQUxJRF9MT0NUWShsb2N0eSkpIHsKKysgICAgICAgIHN3aXRjaCAodGlzLT5sb2NbbG9jdHldLnN0YXRlKSB7CisrICAgICAgICBjYXNlIFRQTV9USVNfU1RBVEVfUkVDRVBUSU9OOgorKyAgICAgICAgICAgIG1lbWNweSh0aXMtPmxvY1tsb2N0eV0ud19idWZmZXIuYnVmZmVyLAorKyAgICAgICAgICAgICAgICAgICB0aXMtPmJ1ZiwKKysgICAgICAgICAgICAgICAgICAgTUlOKHNpemVvZih0aXMtPmJ1ZiksCisrICAgICAgICAgICAgICAgICAgICAgICB0aXMtPmxvY1tsb2N0eV0ud19idWZmZXIuc2l6ZSkpOworKyAgICAgICAgICAgIHRpcy0+bG9jW2xvY3R5XS53X29mZnNldCA9IHRpcy0+b2Zmc2V0OworKyAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIFRQTV9USVNfU1RBVEVfQ09NUExFVElPTjoKKysgICAgICAgICAgICBtZW1jcHkodGlzLT5sb2NbbG9jdHldLnJfYnVmZmVyLmJ1ZmZlciwKKysgICAgICAgICAgICAgICAgICAgdGlzLT5idWYsCisrICAgICAgICAgICAgICAgICAgIE1JTihzaXplb2YodGlzLT5idWYpLAorKyAgICAgICAgICAgICAgICAgICAgICAgdGlzLT5sb2NbbG9jdHldLnJfYnVmZmVyLnNpemUpKTsKKysgICAgICAgICAgICB0aXMtPmxvY1tsb2N0eV0ucl9vZmZzZXQgPSB0aXMtPm9mZnNldDsKKysgICAgICAgIGJyZWFrOworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIERQUklOVEYoInRwbV90aXM6IHJlc3VtZSA6IGxvY3R5ID0gJWQgOiByX29mZnNldCA9ICVkLCB3X29mZnNldCA9ICVkXG4iLAorKyAgICAgICAgICAgIGxvY3R5LCB0aXMtPmxvY1swXS5yX29mZnNldCwgdGlzLT5sb2NbMF0ud19vZmZzZXQpOworKworKyAgICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGNvbnN0IFZNU3RhdGVEZXNjcmlwdGlvbiB2bXN0YXRlX2xvY3R5ID0geworKyAgICAubmFtZSA9ICJsb2MiLAorKyAgICAudmVyc2lvbl9pZCA9IDEsCisrICAgIC5taW5pbXVtX3ZlcnNpb25faWQgPSAwLAorKyAgICAubWluaW11bV92ZXJzaW9uX2lkX29sZCA9IDAsCisrICAgIC5maWVsZHMgICAgICA9IChWTVN0YXRlRmllbGRbXSkgeworKyAgICAgICAgVk1TVEFURV9VSU5UMzIoc3RhdGUsIFRQTUxvY2FsaXR5KSwKKysgICAgICAgIFZNU1RBVEVfVUlOVDMyKGludGUsIFRQTUxvY2FsaXR5KSwKKysgICAgICAgIFZNU1RBVEVfVUlOVDMyKGludHMsIFRQTUxvY2FsaXR5KSwKKysgICAgICAgIFZNU1RBVEVfVUlOVDgoYWNjZXNzLCBUUE1Mb2NhbGl0eSksCisrICAgICAgICBWTVNUQVRFX1VJTlQzMihzdHMsIFRQTUxvY2FsaXR5KSwKKysgICAgICAgIFZNU1RBVEVfVUlOVDMyKGlmYWNlX2lkLCBUUE1Mb2NhbGl0eSksCisrICAgICAgICBWTVNUQVRFX0VORF9PRl9MSVNUKCksCisrICAgIH0KKyt9OworKworIHN0YXRpYyBjb25zdCBWTVN0YXRlRGVzY3JpcHRpb24gdm1zdGF0ZV90cG1fdGlzID0geworICAgICAubmFtZSA9ICJ0cG0iLAorLSAgICAudW5taWdyYXRhYmxlID0gMSwKKysgICAgLnZlcnNpb25faWQgPSAxLAorKyAgICAubWluaW11bV92ZXJzaW9uX2lkID0gMCwKKysgICAgLm1pbmltdW1fdmVyc2lvbl9pZF9vbGQgPSAwLAorKyAgICAucHJlX3NhdmUgID0gdHBtX3Rpc19wcmVfc2F2ZSwKKysgICAgLnBvc3RfbG9hZCA9IHRwbV90aXNfcG9zdF9sb2FkLAorKyAgICAuZmllbGRzID0gKFZNU3RhdGVGaWVsZFtdKSB7CisrICAgICAgICBWTVNUQVRFX1VJTlQzMihzLnRpcy5vZmZzZXQsIFRQTVN0YXRlKSwKKysgICAgICAgIFZNU1RBVEVfQlVGRkVSKHMudGlzLmJ1ZiwgVFBNU3RhdGUpLAorKyAgICAgICAgVk1TVEFURV9VSU5UOChzLnRpcy5hY3RpdmVfbG9jdHksIFRQTVN0YXRlKSwKKysgICAgICAgIFZNU1RBVEVfVUlOVDgocy50aXMuYWJvcnRpbmdfbG9jdHksIFRQTVN0YXRlKSwKKysgICAgICAgIFZNU1RBVEVfVUlOVDgocy50aXMubmV4dF9sb2N0eSwgVFBNU3RhdGUpLAorKworKyAgICAgICAgVk1TVEFURV9TVFJVQ1RfQVJSQVkocy50aXMubG9jLCBUUE1TdGF0ZSwgVFBNX1RJU19OVU1fTE9DQUxJVElFUywgMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtc3RhdGVfbG9jdHksIFRQTUxvY2FsaXR5KSwKKysKKysgICAgICAgIFZNU1RBVEVfRU5EX09GX0xJU1QoKQorKyAgICB9CisgfTsKKyAKKyBzdGF0aWMgUHJvcGVydHkgdHBtX3Rpc19wcm9wZXJ0aWVzW10gPSB7CitkaWZmIC0tZ2l0IGEvaHcvdHBtL3RwbV90aXMuaCBiL2h3L3RwbS90cG1fdGlzLmgKK2luZGV4IGExZGY0MWZhMjEuLmI3ZmMwZWExYTkgMTAwNjQ0CistLS0gYS9ody90cG0vdHBtX3Rpcy5oCisrKysgYi9ody90cG0vdHBtX3Rpcy5oCitAQCAtNTQsNiArNTQsOCBAQCB0eXBlZGVmIHN0cnVjdCBUUE1Mb2NhbGl0eSB7CisgCisgdHlwZWRlZiBzdHJ1Y3QgVFBNVElTRW11U3RhdGUgeworICAgICBRRU1VQkggKmJoOworKyAgICBib29sIGJoX3NjaGVkdWxlZDsgLyogYmggc2NoZWR1bGVkIGJ1dCBkaWQgbm90IHJ1biB5ZXQgKi8KKysKKyAgICAgdWludDMyX3Qgb2Zmc2V0OworICAgICB1aW50OF90IGJ1ZltUUE1fVElTX0JVRkZFUl9NQVhdOworIAorZGlmZiAtLWdpdCBhL2h3L3RwbS90cG1fdXRpbC5jIGIvaHcvdHBtL3RwbV91dGlsLmMKK2luZGV4IDdiMzU0Mjk3MjUuLmI2ZmY3NGQ5NDYgMTAwNjQ0CistLS0gYS9ody90cG0vdHBtX3V0aWwuYworKysrIGIvaHcvdHBtL3RwbV91dGlsLmMKK0BAIC0yMiw2ICsyMiwxNyBAQAorICNpbmNsdWRlICJxZW11L29zZGVwLmgiCisgI2luY2x1ZGUgInRwbV91dGlsLmgiCisgI2luY2x1ZGUgInRwbV9pbnQuaCIKKysjaW5jbHVkZSAidHBtX2lvY3RsLmgiCisrI2luY2x1ZGUgInFlbXUvZXJyb3ItcmVwb3J0LmgiCisrCisrI2RlZmluZSBERUJVR19UUE0gMAorKworKyNkZWZpbmUgRFBSSU5URihmbXQsIC4uLikgZG8geyBcCisrICAgIGlmIChERUJVR19UUE0pIHsgXAorKyAgICAgICAgZnByaW50ZihzdGRlcnIsIGZtdCwgIyMgX19WQV9BUkdTX18pOyBcCisrICAgIH0gXAorK30gd2hpbGUgKDApCisrCisgCisgLyoKKyAgKiBBIGJhc2ljIHRlc3Qgb2YgYSBUUE0gZGV2aWNlLiBXZSBleHBlY3QgYSB3ZWxsIGZvcm1hdHRlZCByZXNwb25zZSBoZWFkZXIKK0BAIC0xMjUsMyArMTM2LDIxNSBAQCBpbnQgdHBtX3V0aWxfdGVzdF90cG1kZXYoaW50IHRwbV9mZCwgVFBNVmVyc2lvbiAqdHBtX3ZlcnNpb24pCisgCisgICAgIHJldHVybiAxOworIH0KKysKKytzdGF0aWMgdm9pZCB0cG1fc2l6ZWRfYnVmZmVyX3Jlc2V0KFRQTVNpemVkQnVmZmVyICp0c2IpCisreworKyAgICBnX2ZyZWUodHNiLT5idWZmZXIpOworKyAgICB0c2ItPmJ1ZmZlciA9IE5VTEw7CisrICAgIHRzYi0+c2l6ZSA9IDA7CisrfQorKworKy8qCisrICogVHJhbnNmZXIgYSBUUE0gc3RhdGUgYmxvYiBmcm9tIHRoZSBUUE0gaW50byBhIHByb3ZpZGVkIGJ1ZmZlci4KKysgKgorKyAqIEBmZDogZmlsZSBkZXNjcmlwdG9yIHRvIHRhbGsgdG8gdGhlIENVU0UgVFBNCisrICogQHR5cGU6IHRoZSB0eXBlIG9mIGJsb2IgdG8gdHJhbnNmZXIKKysgKiBAZGVjcnlwdGVkX2Jsb2I6IHdoZXRoZXIgd2UgcmVxdWVzdCB0byByZWNlaXZlIGRlY3J5cHRlZCBibG9icworKyAqIEB0c2I6IHRoZSBUUE1TaXplQnVmZmVyIHRvIGZpbGwgd2l0aCB0aGUgYmxvYgorKyAqIEBmbGFnczogdGhlIGZsYWdzIHRvIHJldHVybiB0byB0aGUgY2FsbGVyCisrICovCisrc3RhdGljIGludCB0cG1fdXRpbF9jdXNlX2dldF9zdGF0ZV9ibG9iKGludCBmZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB0eXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlY3J5cHRlZF9ibG9iLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUE1TaXplZEJ1ZmZlciAqdHNiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqZmxhZ3MpCisreworKyAgICBwdG1fZ2V0c3RhdGUgcGdzOworKyAgICB1aW50MTZfdCBvZmZzZXQgPSAwOworKyAgICBwdG1fcmVzIHJlczsKKysgICAgc3NpemVfdCBuOworKyAgICBzaXplX3QgdG9fcmVhZDsKKysKKysgICAgdHBtX3NpemVkX2J1ZmZlcl9yZXNldCh0c2IpOworKworKyAgICBwZ3MudS5yZXEuc3RhdGVfZmxhZ3MgPSAoZGVjcnlwdGVkX2Jsb2IpID8gUFRNX1NUQVRFX0ZMQUdfREVDUllQVEVEIDogMDsKKysgICAgcGdzLnUucmVxLnR5cGUgPSB0eXBlOworKyAgICBwZ3MudS5yZXEub2Zmc2V0ID0gb2Zmc2V0OworKworKyAgICBpZiAoaW9jdGwoZmQsIFBUTV9HRVRfU1RBVEVCTE9CLCAmcGdzKSA8IDApIHsKKysgICAgICAgIGVycm9yX3JlcG9ydCgiQ1VTRSBUUE0gUFRNX0dFVF9TVEFURUJMT0IgaW9jdGwgZmFpbGVkOiAlcyIsCisrICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKysgICAgICAgIGdvdG8gZXJyX2V4aXQ7CisrICAgIH0KKysgICAgcmVzID0gcGdzLnUucmVzcC50cG1fcmVzdWx0OworKyAgICBpZiAocmVzICE9IDAgJiYgKHJlcyAmIDB4ODAwKSA9PSAwKSB7CisrICAgICAgICBlcnJvcl9yZXBvcnQoIkdldHRpbmcgdGhlIHN0YXRlYmxvYiAodHlwZSAlZCkgZmFpbGVkIHdpdGggYSBUUE0gIgorKyAgICAgICAgICAgICAgICAgICAgICJlcnJvciAweCV4IiwgdHlwZSwgcmVzKTsKKysgICAgICAgIGdvdG8gZXJyX2V4aXQ7CisrICAgIH0KKysKKysgICAgKmZsYWdzID0gcGdzLnUucmVzcC5zdGF0ZV9mbGFnczsKKysKKysgICAgdHNiLT5idWZmZXIgPSBnX21hbGxvYyhwZ3MudS5yZXNwLnRvdGxlbmd0aCk7CisrICAgIG1lbWNweSh0c2ItPmJ1ZmZlciwgcGdzLnUucmVzcC5kYXRhLCBwZ3MudS5yZXNwLmxlbmd0aCk7CisrICAgIHRzYi0+c2l6ZSA9IHBncy51LnJlc3AubGVuZ3RoOworKworKyAgICAvKiBpZiB0aGVyZSBhcmUgYnl0ZXMgbGVmdCB0byBnZXQgdXNlIHJlYWQoKSBpbnRlcmZhY2UgKi8KKysgICAgd2hpbGUgKHRzYi0+c2l6ZSA8IHBncy51LnJlc3AudG90bGVuZ3RoKSB7CisrICAgICAgICB0b19yZWFkID0gcGdzLnUucmVzcC50b3RsZW5ndGggLSB0c2ItPnNpemU7CisrICAgICAgICBpZiAodW5saWtlbHkodG9fcmVhZCA+IFNTSVpFX01BWCkpIHsKKysgICAgICAgICAgICB0b19yZWFkID0gU1NJWkVfTUFYOworKyAgICAgICAgfQorKworKyAgICAgICAgbiA9IHJlYWQoZmQsICZ0c2ItPmJ1ZmZlclt0c2ItPnNpemVdLCB0b19yZWFkKTsKKysgICAgICAgIGlmIChuICE9IHRvX3JlYWQpIHsKKysgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIkNvdWxkIG5vdCByZWFkIHN0YXRlYmxvYiAodHlwZSAlZCkgOiAlcyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsIHN0cmVycm9yKGVycm5vKSk7CisrICAgICAgICAgICAgZ290byBlcnJfZXhpdDsKKysgICAgICAgIH0KKysgICAgICAgIHRzYi0+c2l6ZSArPSB0b19yZWFkOworKyAgICB9CisrCisrICAgIERQUklOVEYoInRwbV91dGlsOiBnb3Qgc3RhdGUgYmxvYiB0eXBlICVkLCAlZCBieXRlcywgZmxhZ3MgMHglMDh4LCAiCisrICAgICAgICAgICAgImRlY3J5cHRlZD0lZFxuIiwgdHlwZSwgdHNiLT5zaXplLCAqZmxhZ3MsIGRlY3J5cHRlZF9ibG9iKTsKKysKKysgICAgcmV0dXJuIDA7CisrCisrZXJyX2V4aXQ6CisrICAgIHJldHVybiAxOworK30KKysKKytpbnQgdHBtX3V0aWxfY3VzZV9nZXRfc3RhdGVfYmxvYnMoaW50IHRwbV9mZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZWNyeXB0ZWRfYmxvYnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRQTUJsb2JCdWZmZXJzICp0cG1fYmxvYnMpCisreworKyAgICBpZiAodHBtX3V0aWxfY3VzZV9nZXRfc3RhdGVfYmxvYih0cG1fZmQsIFBUTV9CTE9CX1RZUEVfUEVSTUFORU5ULAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNyeXB0ZWRfYmxvYnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cG1fYmxvYnMtPnBlcm1hbmVudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRwbV9ibG9icy0+cGVybWFuZW50X2ZsYWdzKSB8fAorKyAgICAgICB0cG1fdXRpbF9jdXNlX2dldF9zdGF0ZV9ibG9iKHRwbV9mZCwgUFRNX0JMT0JfVFlQRV9WT0xBVElMRSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjcnlwdGVkX2Jsb2JzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHBtX2Jsb2JzLT52b2xhdGlsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHBtX2Jsb2JzLT52b2xhdGlsX2ZsYWdzKSB8fAorKyAgICAgICB0cG1fdXRpbF9jdXNlX2dldF9zdGF0ZV9ibG9iKHRwbV9mZCwgUFRNX0JMT0JfVFlQRV9TQVZFU1RBVEUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY3J5cHRlZF9ibG9icywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRwbV9ibG9icy0+c2F2ZXN0YXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHBtX2Jsb2JzLT5zYXZlc3RhdGVfZmxhZ3MpKSB7CisrICAgICAgICBnb3RvIGVycl9leGl0OworKyAgICB9CisrCisrICAgIHJldHVybiAwOworKworKyBlcnJfZXhpdDoKKysgICAgdHBtX3NpemVkX2J1ZmZlcl9yZXNldCgmdHBtX2Jsb2JzLT52b2xhdGlsKTsKKysgICAgdHBtX3NpemVkX2J1ZmZlcl9yZXNldCgmdHBtX2Jsb2JzLT5wZXJtYW5lbnQpOworKyAgICB0cG1fc2l6ZWRfYnVmZmVyX3Jlc2V0KCZ0cG1fYmxvYnMtPnNhdmVzdGF0ZSk7CisrCisrICAgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50IHRwbV91dGlsX2N1c2VfZG9fc2V0X3N0YXRlYmxvYl9pb2N0bChpbnQgZmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZmxhZ3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsZW5ndGgpCisreworKyAgICBwdG1fc2V0c3RhdGUgcHNzOworKworKyAgICBwc3MudS5yZXEuc3RhdGVfZmxhZ3MgPSBmbGFnczsKKysgICAgcHNzLnUucmVxLnR5cGUgPSB0eXBlOworKyAgICBwc3MudS5yZXEubGVuZ3RoID0gbGVuZ3RoOworKworKyAgICBpZiAoaW9jdGwoZmQsIFBUTV9TRVRfU1RBVEVCTE9CLCAmcHNzKSA8IDApIHsKKysgICAgICAgIGVycm9yX3JlcG9ydCgiQ1VTRSBUUE0gUFRNX1NFVF9TVEFURUJMT0IgaW9jdGwgZmFpbGVkOiAlcyIsCisrICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKysgICAgICAgIHJldHVybiAxOworKyAgICB9CisrCisrICAgIGlmIChwc3MudS5yZXNwLnRwbV9yZXN1bHQgIT0gMCkgeworKyAgICAgICAgZXJyb3JfcmVwb3J0KCJTZXR0aW5nIHRoZSBzdGF0ZWJsb2IgKHR5cGUgJWQpIGZhaWxlZCB3aXRoIGEgVFBNICIKKysgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgMHgleCIsIHR5cGUsIHBzcy51LnJlc3AudHBtX3Jlc3VsdCk7CisrICAgICAgICByZXR1cm4gMTsKKysgICAgfQorKworKyAgICByZXR1cm4gMDsKKyt9CisrCisrCisrLyoKKysgKiBUcmFuc2ZlciBhIFRQTSBzdGF0ZSBibG9iIHRvIHRoZSBDVVNFIFRQTS4KKysgKgorKyAqIEBmZDogZmlsZSBkZXNjcmlwdG9yIHRvIHRhbGsgdG8gdGhlIENVU0UgVFBNCisrICogQHR5cGU6IHRoZSB0eXBlIG9mIFRQTSBzdGF0ZSBibG9iIHRvIHRyYW5zZmVyCisrICogQHRzYjogVFBNU2l6ZUJ1ZmZlciBjb250YWluaW5nIHRoZSBUUE0gc3RhdGUgYmxvYgorKyAqIEBmbGFnczogRmxhZ3MgZGVzY3JpYmluZyB0aGUgKGVuY3J5cHRpb24pIHN0YXRlIG9mIHRoZSBUUE0gc3RhdGUgYmxvYgorKyAqLworK3N0YXRpYyBpbnQgdHBtX3V0aWxfY3VzZV9zZXRfc3RhdGVfYmxvYihpbnQgZmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRQTVNpemVkQnVmZmVyICp0c2IsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGZsYWdzKQorK3sKKysgICAgdWludDMyX3Qgb2Zmc2V0ID0gMDsKKysgICAgc3NpemVfdCBuOworKyAgICBzaXplX3QgdG9fd3JpdGU7CisrCisrICAgIC8qIGluaXRpYXRlIHRoZSB0cmFuc2ZlciB0byB0aGUgQ1VTRSBUUE0gKi8KKysgICAgaWYgKHRwbV91dGlsX2N1c2VfZG9fc2V0X3N0YXRlYmxvYl9pb2N0bChmZCwgZmxhZ3MsIHR5cGUsIDApKSB7CisrICAgICAgICByZXR1cm4gMTsKKysgICAgfQorKworKyAgICAvKiB1c2UgdGhlIHdyaXRlKCkgaW50ZXJmYWNlIGZvciB0cmFuc2ZlcnJpbmcgdGhlIHN0YXRlIGJsb2IgKi8KKysgICAgd2hpbGUgKG9mZnNldCA8IHRzYi0+c2l6ZSkgeworKyAgICAgICAgdG9fd3JpdGUgPSB0c2ItPnNpemUgLSBvZmZzZXQ7CisrICAgICAgICBpZiAodW5saWtlbHkodG9fd3JpdGUgPiBTU0laRV9NQVgpKSB7CisrICAgICAgICAgICAgdG9fd3JpdGUgPSBTU0laRV9NQVg7CisrICAgICAgICB9CisrCisrICAgICAgICBuID0gd3JpdGUoZmQsICZ0c2ItPmJ1ZmZlcltvZmZzZXRdLCB0b193cml0ZSk7CisrICAgICAgICBpZiAobiAhPSB0b193cml0ZSkgeworKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgiV3JpdGluZyB0aGUgc3RhdGVibG9iICh0eXBlICVkKSBmYWlsZWQ6ICVzIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgc3RyZXJyb3IoZXJybm8pKTsKKysgICAgICAgICAgICBnb3RvIGVycl9leGl0OworKyAgICAgICAgfQorKyAgICAgICAgb2Zmc2V0ICs9IHRvX3dyaXRlOworKyAgICB9CisrCisrICAgIC8qIGluaWRpY2F0ZSB0aGF0IHRoZSB0cmFuc2ZlciBpcyBmaW5pc2hlZCAqLworKyAgICBpZiAodHBtX3V0aWxfY3VzZV9kb19zZXRfc3RhdGVibG9iX2lvY3RsKGZkLCBmbGFncywgdHlwZSwgMCkpIHsKKysgICAgICAgIGdvdG8gZXJyX2V4aXQ7CisrICAgIH0KKysKKysgICAgRFBSSU5URigidHBtX3V0aWw6IHNldCB0aGUgc3RhdGUgYmxvYiB0eXBlICVkLCAlZCBieXRlcywgZmxhZ3MgMHglMDh4XG4iLAorKyAgICAgICAgICAgIHR5cGUsIHRzYi0+c2l6ZSwgZmxhZ3MpOworKworKyAgICByZXR1cm4gMDsKKysKKytlcnJfZXhpdDoKKysgICAgcmV0dXJuIDE7CisrfQorKworK2ludCB0cG1fdXRpbF9jdXNlX3NldF9zdGF0ZV9ibG9icyhpbnQgdHBtX2ZkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUE1CbG9iQnVmZmVycyAqdHBtX2Jsb2JzKQorK3sKKysgICAgcHRtX3JlcyByZXM7CisrCisrICAgIGlmIChpb2N0bCh0cG1fZmQsIFBUTV9TVE9QLCAmcmVzKSA8IDApIHsKKysgICAgICAgIGVycm9yX3JlcG9ydCgidHBtX3Bhc3N0aHJvdWdoOiBDb3VsZCBub3Qgc3RvcCAiCisrICAgICAgICAgICAgICAgICAgICAgInRoZSBDVVNFIFRQTTogJXMgKCVpKSIsCisrICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7CisrICAgICAgICByZXR1cm4gMTsKKysgICAgfQorKworKyAgICBpZiAodHBtX3V0aWxfY3VzZV9zZXRfc3RhdGVfYmxvYih0cG1fZmQsIFBUTV9CTE9CX1RZUEVfUEVSTUFORU5ULAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHBtX2Jsb2JzLT5wZXJtYW5lbnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwbV9ibG9icy0+cGVybWFuZW50X2ZsYWdzKSB8fAorKyAgICAgICAgdHBtX3V0aWxfY3VzZV9zZXRfc3RhdGVfYmxvYih0cG1fZmQsIFBUTV9CTE9CX1RZUEVfVk9MQVRJTEUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cG1fYmxvYnMtPnZvbGF0aWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwbV9ibG9icy0+dm9sYXRpbF9mbGFncykgfHwKKysgICAgICAgIHRwbV91dGlsX2N1c2Vfc2V0X3N0YXRlX2Jsb2IodHBtX2ZkLCBQVE1fQkxPQl9UWVBFX1NBVkVTVEFURSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRwbV9ibG9icy0+c2F2ZXN0YXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cG1fYmxvYnMtPnNhdmVzdGF0ZV9mbGFncykpIHsKKysgICAgICAgIHJldHVybiAxOworKyAgICB9CisrCisrICAgIHJldHVybiAwOworK30KK2RpZmYgLS1naXQgYS9ody90cG0vdHBtX3V0aWwuaCBiL2h3L3RwbS90cG1fdXRpbC5oCitpbmRleCBkZjc2MjQ1ZTZlLi5jMjQwNzFkODEyIDEwMDY0NAorLS0tIGEvaHcvdHBtL3RwbV91dGlsLmgKKysrKyBiL2h3L3RwbS90cG1fdXRpbC5oCitAQCAtMjYsNCArMjYsMTEgQEAKKyAKKyBpbnQgdHBtX3V0aWxfdGVzdF90cG1kZXYoaW50IHRwbV9mZCwgVFBNVmVyc2lvbiAqdHBtX3ZlcnNpb24pOworIAorK2ludCB0cG1fdXRpbF9jdXNlX2dldF9zdGF0ZV9ibG9icyhpbnQgdHBtX2ZkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlY3J5cHRlZF9ibG9icywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFBNQmxvYkJ1ZmZlcnMgKnRwbV9ibG9icyk7CisrCisraW50IHRwbV91dGlsX2N1c2Vfc2V0X3N0YXRlX2Jsb2JzKGludCB0cG1fZmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRQTUJsb2JCdWZmZXJzICp0cG1fYmxvYnMpOworKworICNlbmRpZiAvKiBUUE1fVFBNX1VUSUxfSCAqLworZGlmZiAtLWdpdCBhL2luY2x1ZGUvc3lzZW11L3RwbV9iYWNrZW5kLmggYi9pbmNsdWRlL3N5c2VtdS90cG1fYmFja2VuZC5oCitpbmRleCBiNThmNTJkMzlmLi4zNDAzODIxYjlkIDEwMDY0NAorLS0tIGEvaW5jbHVkZS9zeXNlbXUvdHBtX2JhY2tlbmQuaAorKysrIGIvaW5jbHVkZS9zeXNlbXUvdHBtX2JhY2tlbmQuaAorQEAgLTYyLDYgKzYyLDE4IEBAIHR5cGVkZWYgc3RydWN0IFRQTVNpemVkQnVmZmVyIHsKKyAgICAgdWludDhfdCAgKmJ1ZmZlcjsKKyB9IFRQTVNpemVkQnVmZmVyOworIAorKy8qIGJsb2JzIGZyb20gdGhlIFRQTTsgcGFydCBvZiBWTSBzdGF0ZSB3aGVuIG1pZ3JhdGluZyAqLworK3R5cGVkZWYgc3RydWN0IFRQTUJsb2JCdWZmZXJzIHsKKysgICAgdWludDMyX3QgcGVybWFuZW50X2ZsYWdzOworKyAgICBUUE1TaXplZEJ1ZmZlciBwZXJtYW5lbnQ7CisrCisrICAgIHVpbnQzMl90IHZvbGF0aWxfZmxhZ3M7CisrICAgIFRQTVNpemVkQnVmZmVyIHZvbGF0aWw7CisrCisrICAgIHVpbnQzMl90IHNhdmVzdGF0ZV9mbGFnczsKKysgICAgVFBNU2l6ZWRCdWZmZXIgc2F2ZXN0YXRlOworK30gVFBNQmxvYkJ1ZmZlcnM7CisrCisgc3RydWN0IFRQTURyaXZlck9wcyB7CisgICAgIGVudW0gVHBtVHlwZSB0eXBlOworICAgICBjb25zdCBRZW11T3B0RGVzYyAqb3B0czsKKy0tIAorMi4xMS4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LzAwMDQtQWRkLXN1cHBvcnQtZm9yLVZNLXN1c3BlbmQtcmVzdW1lLWZvci1UUE0tVElTLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvMDAwNC1BZGQtc3VwcG9ydC1mb3ItVk0tc3VzcGVuZC1yZXN1bWUtZm9yLVRQTS1USVMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4YTc4M2QuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvMDAwNC1BZGQtc3VwcG9ydC1mb3ItVk0tc3VzcGVuZC1yZXN1bWUtZm9yLVRQTS1USVMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw3MTkgKzAsMCBAQAotRnJvbSA1ZTlkZDkwNjNmNTE0NDQ3ZWE0ZjU0MDQ2NzkzZjRmMDFjMjk3ZWQ0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogU3RlZmFuIEJlcmdlciA8c3RlZmFuYkBsaW51eC52bmV0LmlibS5jb20+Ci1EYXRlOiBTYXQsIDMxIERlYyAyMDE2IDExOjIzOjMyIC0wNTAwCi1TdWJqZWN0OiBbUEFUQ0ggNC80XSBBZGQgc3VwcG9ydCBmb3IgVk0gc3VzcGVuZC9yZXN1bWUgZm9yIFRQTSBUSVMKLQotRXh0ZW5kIHRoZSBUUE0gVElTIGNvZGUgdG8gc3VwcG9ydCBzdXNwZW5kL3Jlc3VtZS4gSW4gY2FzZSBhIGNvbW1hbmQKLWlzIGJlaW5nIHByb2Nlc3NlZCBieSB0aGUgZXh0ZXJuYWwgVFBNIHdoZW4gc3VzcGVuZGluZywgd2FpdCBmb3IgdGhlIGNvbW1hbmQKLXRvIGNvbXBsZXRlIHRvIGNhdGNoIHRoZSByZXN1bHQuIEluIGNhc2UgdGhlIGJvdHRvbSBoYWxmIGRpZCBub3QgcnVuLAotcnVuIHRoZSBvbmUgZnVuY3Rpb24gdGhlIGJvdHRvbSBoYWxmIGlzIHN1cHBvc2VkIHRvIHJ1bi4gVGhpcyB0aGVuCi1tYWtlcyB0aGUgcmVzdW1lIG9wZXJhdGlvbiB3b3JrLgotCi1UaGUgcGFzc3Rocm91Z2ggYmFja2VuZCBkb2VzIG5vdCBzdXBwb3J0IHN1c3BlbmQvcmVzdW1lIG9wZXJhdGlvbgotYW5kIGlzIHRoZXJlZm9yZSBibG9ja2VkIGZyb20gc3VzcGVuZC9yZXN1bWUgYW5kIG1pZ3JhdGlvbi4KLQotVGhlIENVU0UgVFBNJ3Mgc3VwcG9ydGVkIGNhcGFiaWxpdGllcyBhcmUgdGVzdGVkIGFuZCBpZiBzdWZmaWNpZW50Ci1jYXBhYmlsaXRpZXMgYXJlIGltcGxlbWVudGVkLCBzdXNwZW5kL3Jlc3VtZSwgc25hcHNob3R0aW5nIGFuZAotbWlncmF0aW9uIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIENVU0UgVFBNLgotCi1TaWduZWQtb2ZmLWJ5OiBTdGVmYW4gQmVyZ2VyIDxzdGVmYW5iQGxpbnV4LnZuZXQuaWJtLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nIFtodHRwczovL2xpc3RzLm5vbmdudS5vcmcvYXJjaGl2ZS9odG1sL3FlbXUtZGV2ZWwvMjAxNi0wNi9tc2cwMDI1Mi5odG1sXQotU2lnbmVkLW9mZi1ieTogUGF0cmljayBPaGx5IDxwYXRyaWNrLm9obHlAaW50ZWwuY29tPgotLS0tCi0gaHcvdHBtL3RwbV9wYXNzdGhyb3VnaC5jICAgICB8IDEzMCArKysrKysrKysrKysrKysrKysrKysrKy0tCi0gaHcvdHBtL3RwbV90aXMuYyAgICAgICAgICAgICB8IDEzNyArKysrKysrKysrKysrKysrKysrKysrKysrLQotIGh3L3RwbS90cG1fdGlzLmggICAgICAgICAgICAgfCAgIDIgKwotIGh3L3RwbS90cG1fdXRpbC5jICAgICAgICAgICAgfCAyMjMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotIGh3L3RwbS90cG1fdXRpbC5oICAgICAgICAgICAgfCAgIDcgKysKLSBpbmNsdWRlL3N5c2VtdS90cG1fYmFja2VuZC5oIHwgIDEyICsrKwotIDYgZmlsZXMgY2hhbmdlZCwgNTAzIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9ody90cG0vdHBtX3Bhc3N0aHJvdWdoLmMgYi9ody90cG0vdHBtX3Bhc3N0aHJvdWdoLmMKLWluZGV4IDQ0NzM5ZWJhZDIuLmJjODA3MmQwYmMgMTAwNjQ0Ci0tLS0gYS9ody90cG0vdHBtX3Bhc3N0aHJvdWdoLmMKLSsrKyBiL2h3L3RwbS90cG1fcGFzc3Rocm91Z2guYwotQEAgLTM0LDYgKzM0LDggQEAKLSAjaW5jbHVkZSAidHBtX3Rpcy5oIgotICNpbmNsdWRlICJ0cG1fdXRpbC5oIgotICNpbmNsdWRlICJ0cG1faW9jdGwuaCIKLSsjaW5jbHVkZSAibWlncmF0aW9uL21pZ3JhdGlvbi5oIgotKyNpbmNsdWRlICJxYXBpL2Vycm9yLmgiCi0gCi0gI2RlZmluZSBERUJVR19UUE0gMAotIAotQEAgLTQ5LDYgKzUxLDcgQEAKLSAjZGVmaW5lIFRZUEVfVFBNX0NVU0UgInRwbS1jdXNlIgotIAotIHN0YXRpYyBjb25zdCBUUE1Ecml2ZXJPcHMgdHBtX3Bhc3N0aHJvdWdoX2RyaXZlcjsKLStzdGF0aWMgY29uc3QgVk1TdGF0ZURlc2NyaXB0aW9uIHZtc3RhdGVfdHBtX2N1c2U7Ci0gCi0gLyogZGF0YSBzdHJ1Y3R1cmVzICovCi0gdHlwZWRlZiBzdHJ1Y3QgVFBNUGFzc3RocnVUaHJlYWRQYXJhbXMgewotQEAgLTc5LDYgKzgyLDEwIEBAIHN0cnVjdCBUUE1QYXNzdGhydVN0YXRlIHsKLSAgICAgUWVtdU11dGV4IHN0YXRlX2xvY2s7Ci0gICAgIFFlbXVDb25kIGNtZF9jb21wbGV0ZTsgIC8qIHNpbmduYWxlZCBvbmNlIHRwbV9idXN5IGlzIGZhbHNlICovCi0gICAgIGJvb2wgdHBtX2J1c3k7Ci0rCi0rICAgIEVycm9yICptaWdyYXRpb25fYmxvY2tlcjsKLSsKLSsgICAgVFBNQmxvYkJ1ZmZlcnMgdHBtX2Jsb2JzOwotIH07Ci0gCi0gdHlwZWRlZiBzdHJ1Y3QgVFBNUGFzc3RocnVTdGF0ZSBUUE1QYXNzdGhydVN0YXRlOwotQEAgLTMwNiw2ICszMTMsMTAgQEAgc3RhdGljIHZvaWQgdHBtX3Bhc3N0aHJvdWdoX3NodXRkb3duKFRQTVBhc3N0aHJ1U3RhdGUgKnRwbV9wdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgIH0KLSAgICAgfQotKyAgICBpZiAodHBtX3B0LT5taWdyYXRpb25fYmxvY2tlcikgewotKyAgICAgICAgbWlncmF0ZV9kZWxfYmxvY2tlcih0cG1fcHQtPm1pZ3JhdGlvbl9ibG9ja2VyKTsKLSsgICAgICAgIGVycm9yX2ZyZWUodHBtX3B0LT5taWdyYXRpb25fYmxvY2tlcik7Ci0rICAgIH0KLSB9Ci0gCi0gLyoKLUBAIC0zNjAsMTIgKzM3MSwxNCBAQCBzdGF0aWMgaW50IHRwbV9wYXNzdGhyb3VnaF9jdXNlX2NoZWNrX2NhcHMoVFBNUGFzc3RocnVTdGF0ZSAqdHBtX3B0KQotIC8qCi0gICogSW5pdGlhbGl6ZSB0aGUgZXh0ZXJuYWwgQ1VTRSBUUE0KLSAgKi8KLS1zdGF0aWMgaW50IHRwbV9wYXNzdGhyb3VnaF9jdXNlX2luaXQoVFBNUGFzc3RocnVTdGF0ZSAqdHBtX3B0KQotK3N0YXRpYyBpbnQgdHBtX3Bhc3N0aHJvdWdoX2N1c2VfaW5pdChUUE1QYXNzdGhydVN0YXRlICp0cG1fcHQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfcmVzdW1lKQotIHsKLSAgICAgaW50IHJjID0gMDsKLS0gICAgcHRtX2luaXQgaW5pdCA9IHsKLS0gICAgICAgIC51LnJlcS5pbml0X2ZsYWdzID0gUFRNX0lOSVRfRkxBR19ERUxFVEVfVk9MQVRJTEUsCi0tICAgIH07Ci0rICAgIHB0bV9pbml0IGluaXQ7Ci0rICAgIGlmIChpc19yZXN1bWUpIHsKLSsgICAgICAgIGluaXQudS5yZXEuaW5pdF9mbGFncyA9IFBUTV9JTklUX0ZMQUdfREVMRVRFX1ZPTEFUSUxFOwotKyAgICB9Ci0gCi0gICAgIGlmIChUUE1fUEFTU1RIUk9VR0hfVVNFU19DVVNFX1RQTSh0cG1fcHQpKSB7Ci0gICAgICAgICBpZiAoaW9jdGwodHBtX3B0LT50cG1fZmQsIFBUTV9JTklULCAmaW5pdCkgPCAwKSB7Ci1AQCAtMzk0LDcgKzQwNyw3IEBAIHN0YXRpYyBpbnQgdHBtX3Bhc3N0aHJvdWdoX3N0YXJ0dXBfdHBtKFRQTUJhY2tlbmQgKnRiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwbV9wYXNzdGhyb3VnaF93b3JrZXJfdGhyZWFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cG1fcHQtPnRwbV90aHJlYWRfcGFyYW1zKTsKLSAKLS0gICAgdHBtX3Bhc3N0aHJvdWdoX2N1c2VfaW5pdCh0cG1fcHQpOwotKyAgICB0cG1fcGFzc3Rocm91Z2hfY3VzZV9pbml0KHRwbV9wdCwgZmFsc2UpOwotIAotICAgICByZXR1cm4gMDsKLSB9Ci1AQCAtNDY2LDYgKzQ3OSwzMiBAQCBzdGF0aWMgaW50IHRwbV9wYXNzdGhyb3VnaF9yZXNldF90cG1fZXN0YWJsaXNoZWRfZmxhZyhUUE1CYWNrZW5kICp0YiwKLSAgICAgcmV0dXJuIHJjOwotIH0KLSAKLStzdGF0aWMgaW50IHRwbV9jdXNlX2dldF9zdGF0ZV9ibG9icyhUUE1CYWNrZW5kICp0YiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlY3J5cHRlZF9ibG9icywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUE1CbG9iQnVmZmVycyAqdHBtX2Jsb2JzKQotK3sKLSsgICAgVFBNUGFzc3RocnVTdGF0ZSAqdHBtX3B0ID0gVFBNX1BBU1NUSFJPVUdIKHRiKTsKLSsKLSsgICAgYXNzZXJ0KFRQTV9QQVNTVEhST1VHSF9VU0VTX0NVU0VfVFBNKHRwbV9wdCkpOwotKwotKyAgICByZXR1cm4gdHBtX3V0aWxfY3VzZV9nZXRfc3RhdGVfYmxvYnModHBtX3B0LT50cG1fZmQsIGRlY3J5cHRlZF9ibG9icywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwbV9ibG9icyk7Ci0rfQotKwotK3N0YXRpYyBpbnQgdHBtX2N1c2Vfc2V0X3N0YXRlX2Jsb2JzKFRQTUJhY2tlbmQgKnRiLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRQTUJsb2JCdWZmZXJzICp0cG1fYmxvYnMpCi0rewotKyAgICBUUE1QYXNzdGhydVN0YXRlICp0cG1fcHQgPSBUUE1fUEFTU1RIUk9VR0godGIpOwotKwotKyAgICBhc3NlcnQoVFBNX1BBU1NUSFJPVUdIX1VTRVNfQ1VTRV9UUE0odHBtX3B0KSk7Ci0rCi0rICAgIGlmICh0cG1fdXRpbF9jdXNlX3NldF9zdGF0ZV9ibG9icyh0cG1fcHQtPnRwbV9mZCwgdHBtX2Jsb2JzKSkgewotKyAgICAgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsgICAgcmV0dXJuIHRwbV9wYXNzdGhyb3VnaF9jdXNlX2luaXQodHBtX3B0LCB0cnVlKTsKLSt9Ci0rCi0gc3RhdGljIGJvb2wgdHBtX3Bhc3N0aHJvdWdoX2dldF9zdGFydHVwX2Vycm9yKFRQTUJhY2tlbmQgKnRiKQotIHsKLSAgICAgVFBNUGFzc3RocnVTdGF0ZSAqdHBtX3B0ID0gVFBNX1BBU1NUSFJPVUdIKHRiKTsKLUBAIC00ODgsNyArNTI3LDcgQEAgc3RhdGljIHZvaWQgdHBtX3Bhc3N0aHJvdWdoX2RlbGl2ZXJfcmVxdWVzdChUUE1CYWNrZW5kICp0YikKLSB7Ci0gICAgIFRQTVBhc3N0aHJ1U3RhdGUgKnRwbV9wdCA9IFRQTV9QQVNTVEhST1VHSCh0Yik7Ci0gCi0tICAgIC8qIFRQTSBjb25zaWRlcmVkIGJ1c3kgb25jZSBUUE0gUmVxdWVzdCBzY2hlZHVsZWQgZm9yIHByb2Nlc3NpbmcgKi8KLSsgICAgLyogVFBNIGNvbnNpZGVyZWQgYnVzeSBvbmNlIFRQTSByZXF1ZXN0IHNjaGVkdWxlZCBmb3IgcHJvY2Vzc2luZyAqLwotICAgICBxZW11X211dGV4X2xvY2soJnRwbV9wdC0+c3RhdGVfbG9jayk7Ci0gICAgIHRwbV9wdC0+dHBtX2J1c3kgPSB0cnVlOwotICAgICBxZW11X211dGV4X3VubG9jaygmdHBtX3B0LT5zdGF0ZV9sb2NrKTsKLUBAIC02MDEsNiArNjQwLDI1IEBAIHN0YXRpYyBpbnQgdHBtX3Bhc3N0aHJvdWdoX29wZW5fc3lzZnNfY2FuY2VsKFRQTUJhY2tlbmQgKnRiKQotICAgICByZXR1cm4gZmQ7Ci0gfQotIAotK3N0YXRpYyB2b2lkIHRwbV9wYXNzdGhyb3VnaF9ibG9ja19taWdyYXRpb24oVFBNUGFzc3RocnVTdGF0ZSAqdHBtX3B0KQotK3sKLSsgICAgcHRtX2NhcCBjYXBzOwotKwotKyAgICBpZiAoVFBNX1BBU1NUSFJPVUdIX1VTRVNfQ1VTRV9UUE0odHBtX3B0KSkgewotKyAgICAgICAgY2FwcyA9IFBUTV9DQVBfR0VUX1NUQVRFQkxPQiB8IFBUTV9DQVBfU0VUX1NUQVRFQkxPQiB8Ci0rICAgICAgICAgICAgICAgUFRNX0NBUF9TVE9QOwotKyAgICAgICAgaWYgKCFUUE1fQ1VTRV9JTVBMRU1FTlRTX0FMTCh0cG1fcHQsIGNhcHMpKSB7Ci0rICAgICAgICAgICAgZXJyb3Jfc2V0ZygmdHBtX3B0LT5taWdyYXRpb25fYmxvY2tlciwKLSsgICAgICAgICAgICAgICAgICAgICAgICJNaWdyYXRpb24gZGlzYWJsZWQ6IENVU0UgVFBNIGxhY2tzIG5lY2Vzc2FyeSBjYXBhYmlsaXRpZXMiKTsKLSsgICAgICAgICAgICBtaWdyYXRlX2FkZF9ibG9ja2VyKHRwbV9wdC0+bWlncmF0aW9uX2Jsb2NrZXIpOwotKyAgICAgICAgfQotKyAgICB9IGVsc2UgewotKyAgICAgICAgZXJyb3Jfc2V0ZygmdHBtX3B0LT5taWdyYXRpb25fYmxvY2tlciwKLSsgICAgICAgICAgICAgICAgICAgIk1pZ3JhdGlvbiBkaXNhYmxlZDogUGFzc3Rocm91Z2ggVFBNIGRvZXMgbm90IHN1cHBvcnQgbWlncmF0aW9uIik7Ci0rICAgICAgICBtaWdyYXRlX2FkZF9ibG9ja2VyKHRwbV9wdC0+bWlncmF0aW9uX2Jsb2NrZXIpOwotKyAgICB9Ci0rfQotKwotIHN0YXRpYyBpbnQgdHBtX3Bhc3N0aHJvdWdoX2hhbmRsZV9kZXZpY2Vfb3B0cyhRZW11T3B0cyAqb3B0cywgVFBNQmFja2VuZCAqdGIpCi0gewotICAgICBUUE1QYXNzdGhydVN0YXRlICp0cG1fcHQgPSBUUE1fUEFTU1RIUk9VR0godGIpOwotQEAgLTY0Miw3ICs3MDAsNyBAQCBzdGF0aWMgaW50IHRwbV9wYXNzdGhyb3VnaF9oYW5kbGVfZGV2aWNlX29wdHMoUWVtdU9wdHMgKm9wdHMsIFRQTUJhY2tlbmQgKnRiKQotICAgICAgICAgICAgIGdvdG8gZXJyX2Nsb3NlX3RwbWRldjsKLSAgICAgICAgIH0KLSAgICAgICAgIC8qIGluaXQgVFBNIGZvciBwcm9iaW5nICovCi0tICAgICAgICBpZiAodHBtX3Bhc3N0aHJvdWdoX2N1c2VfaW5pdCh0cG1fcHQpKSB7Ci0rICAgICAgICBpZiAodHBtX3Bhc3N0aHJvdWdoX2N1c2VfaW5pdCh0cG1fcHQsIGZhbHNlKSkgewotICAgICAgICAgICAgIGdvdG8gZXJyX2Nsb3NlX3RwbWRldjsKLSAgICAgICAgIH0KLSAgICAgfQotQEAgLTY1OSw2ICs3MTcsNyBAQCBzdGF0aWMgaW50IHRwbV9wYXNzdGhyb3VnaF9oYW5kbGVfZGV2aWNlX29wdHMoUWVtdU9wdHMgKm9wdHMsIFRQTUJhY2tlbmQgKnRiKQotICAgICAgICAgfQotICAgICB9Ci0gCi0rICAgIHRwbV9wYXNzdGhyb3VnaF9ibG9ja19taWdyYXRpb24odHBtX3B0KTsKLSAKLSAgICAgcmV0dXJuIDA7Ci0gCi1AQCAtNzY2LDEwICs4MjUsMTMgQEAgc3RhdGljIHZvaWQgdHBtX3Bhc3N0aHJvdWdoX2luc3RfaW5pdChPYmplY3QgKm9iaikKLSAKLSAgICAgcWVtdV9tdXRleF9pbml0KCZ0cG1fcHQtPnN0YXRlX2xvY2spOwotICAgICBxZW11X2NvbmRfaW5pdCgmdHBtX3B0LT5jbWRfY29tcGxldGUpOwotKwotKyAgICB2bXN0YXRlX3JlZ2lzdGVyKE5VTEwsIC0xLCAmdm1zdGF0ZV90cG1fY3VzZSwgb2JqKTsKLSB9Ci0gCi0gc3RhdGljIHZvaWQgdHBtX3Bhc3N0aHJvdWdoX2luc3RfZmluYWxpemUoT2JqZWN0ICpvYmopCi0gewotKyAgICB2bXN0YXRlX3VucmVnaXN0ZXIoTlVMTCwgJnZtc3RhdGVfdHBtX2N1c2UsIG9iaik7Ci0gfQotIAotIHN0YXRpYyB2b2lkIHRwbV9wYXNzdGhyb3VnaF9jbGFzc19pbml0KE9iamVjdENsYXNzICprbGFzcywgdm9pZCAqZGF0YSkKLUBAIC04MDIsNiArODY0LDYwIEBAIHN0YXRpYyBjb25zdCBjaGFyICp0cG1fcGFzc3Rocm91Z2hfY3VzZV9jcmVhdGVfZGVzYyh2b2lkKQotICAgICByZXR1cm4gIkNVU0UgVFBNIGJhY2tlbmQgZHJpdmVyIjsKLSB9Ci0gCi0rc3RhdGljIHZvaWQgdHBtX2N1c2VfcHJlX3NhdmUodm9pZCAqb3BhcXVlKQotK3sKLSsgICAgVFBNUGFzc3RocnVTdGF0ZSAqdHBtX3B0ID0gb3BhcXVlOwotKyAgICBUUE1CYWNrZW5kICp0YiA9ICZ0cG1fcHQtPnBhcmVudDsKLSsKLSsgICAgIHFlbXVfbXV0ZXhfbG9jaygmdHBtX3B0LT5zdGF0ZV9sb2NrKTsKLSsgICAgIC8qIHdhaXQgZm9yIFRQTSB0byBmaW5pc2ggcHJvY2Vzc2luZyAqLwotKyAgICAgaWYgKHRwbV9wdC0+dHBtX2J1c3kpIHsKLSsgICAgICAgIHFlbXVfY29uZF93YWl0KCZ0cG1fcHQtPmNtZF9jb21wbGV0ZSwgJnRwbV9wdC0+c3RhdGVfbG9jayk7Ci0rICAgICB9Ci0rICAgICBxZW11X211dGV4X3VubG9jaygmdHBtX3B0LT5zdGF0ZV9sb2NrKTsKLSsKLSsgICAgLyogZ2V0IHRoZSBkZWNyeXB0ZWQgc3RhdGUgYmxvYnMgZnJvbSB0aGUgVFBNICovCi0rICAgIHRwbV9jdXNlX2dldF9zdGF0ZV9ibG9icyh0YiwgVFJVRSwgJnRwbV9wdC0+dHBtX2Jsb2JzKTsKLSt9Ci0rCi0rc3RhdGljIGludCB0cG1fY3VzZV9wb3N0X2xvYWQodm9pZCAqb3BhcXVlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJzaW9uX2lkIF9fYXR0cmlidXRlX18oKHVudXNlZCkpKQotK3sKLSsgICAgVFBNUGFzc3RocnVTdGF0ZSAqdHBtX3B0ID0gb3BhcXVlOwotKyAgICBUUE1CYWNrZW5kICp0YiA9ICZ0cG1fcHQtPnBhcmVudDsKLSsKLSsgICAgcmV0dXJuIHRwbV9jdXNlX3NldF9zdGF0ZV9ibG9icyh0YiwgJnRwbV9wdC0+dHBtX2Jsb2JzKTsKLSt9Ci0rCi0rc3RhdGljIGNvbnN0IFZNU3RhdGVEZXNjcmlwdGlvbiB2bXN0YXRlX3RwbV9jdXNlID0gewotKyAgICAubmFtZSA9ICJjdXNlLXRwbSIsCi0rICAgIC52ZXJzaW9uX2lkID0gMSwKLSsgICAgLm1pbmltdW1fdmVyc2lvbl9pZCA9IDAsCi0rICAgIC5taW5pbXVtX3ZlcnNpb25faWRfb2xkID0gMCwKLSsgICAgLnByZV9zYXZlICA9IHRwbV9jdXNlX3ByZV9zYXZlLAotKyAgICAucG9zdF9sb2FkID0gdHBtX2N1c2VfcG9zdF9sb2FkLAotKyAgICAuZmllbGRzID0gKFZNU3RhdGVGaWVsZFtdKSB7Ci0rICAgICAgICBWTVNUQVRFX1VJTlQzMih0cG1fYmxvYnMucGVybWFuZW50X2ZsYWdzLCBUUE1QYXNzdGhydVN0YXRlKSwKLSsgICAgICAgIFZNU1RBVEVfVUlOVDMyKHRwbV9ibG9icy5wZXJtYW5lbnQuc2l6ZSwgVFBNUGFzc3RocnVTdGF0ZSksCi0rICAgICAgICBWTVNUQVRFX1ZCVUZGRVJfQUxMT0NfVUlOVDMyKHRwbV9ibG9icy5wZXJtYW5lbnQuYnVmZmVyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUE1QYXNzdGhydVN0YXRlLCAxLCBOVUxMLCAwLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cG1fYmxvYnMucGVybWFuZW50LnNpemUpLAotKwotKyAgICAgICAgVk1TVEFURV9VSU5UMzIodHBtX2Jsb2JzLnZvbGF0aWxfZmxhZ3MsIFRQTVBhc3N0aHJ1U3RhdGUpLAotKyAgICAgICAgVk1TVEFURV9VSU5UMzIodHBtX2Jsb2JzLnZvbGF0aWwuc2l6ZSwgVFBNUGFzc3RocnVTdGF0ZSksCi0rICAgICAgICBWTVNUQVRFX1ZCVUZGRVJfQUxMT0NfVUlOVDMyKHRwbV9ibG9icy52b2xhdGlsLmJ1ZmZlciwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFBNUGFzc3RocnVTdGF0ZSwgMSwgTlVMTCwgMCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHBtX2Jsb2JzLnZvbGF0aWwuc2l6ZSksCi0rCi0rICAgICAgICBWTVNUQVRFX1VJTlQzMih0cG1fYmxvYnMuc2F2ZXN0YXRlX2ZsYWdzLCBUUE1QYXNzdGhydVN0YXRlKSwKLSsgICAgICAgIFZNU1RBVEVfVUlOVDMyKHRwbV9ibG9icy5zYXZlc3RhdGUuc2l6ZSwgVFBNUGFzc3RocnVTdGF0ZSksCi0rICAgICAgICBWTVNUQVRFX1ZCVUZGRVJfQUxMT0NfVUlOVDMyKHRwbV9ibG9icy5zYXZlc3RhdGUuYnVmZmVyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUE1QYXNzdGhydVN0YXRlLCAxLCBOVUxMLCAwLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cG1fYmxvYnMuc2F2ZXN0YXRlLnNpemUpLAotKyAgICAgICAgVk1TVEFURV9FTkRfT0ZfTElTVCgpCi0rICAgIH0KLSt9OwotKwotIHN0YXRpYyBjb25zdCBUUE1Ecml2ZXJPcHMgdHBtX2N1c2VfZHJpdmVyID0gewotICAgICAudHlwZSAgICAgICAgICAgICAgICAgICAgID0gVFBNX1RZUEVfQ1VTRV9UUE0sCi0gICAgIC5vcHRzICAgICAgICAgICAgICAgICAgICAgPSB0cG1fcGFzc3Rocm91Z2hfY21kbGluZV9vcHRzLAotZGlmZiAtLWdpdCBhL2h3L3RwbS90cG1fdGlzLmMgYi9ody90cG0vdHBtX3Rpcy5jCi1pbmRleCAxNGQ5ZTgzZWEyLi45YjY2MGNmNzM3IDEwMDY0NAotLS0tIGEvaHcvdHBtL3RwbV90aXMuYwotKysrIGIvaHcvdHBtL3RwbV90aXMuYwotQEAgLTM2OCw2ICszNjgsOCBAQCBzdGF0aWMgdm9pZCB0cG1fdGlzX3JlY2VpdmVfYmgodm9pZCAqb3BhcXVlKQotICAgICBUUE1USVNFbXVTdGF0ZSAqdGlzID0gJnMtPnMudGlzOwotICAgICB1aW50OF90IGxvY3R5ID0gcy0+bG9jdHlfbnVtYmVyOwotIAotKyAgICB0aXMtPmJoX3NjaGVkdWxlZCA9IGZhbHNlOwotKwotICAgICBxZW11X211dGV4X2xvY2soJnMtPnN0YXRlX2xvY2spOwotIAotICAgICB0cG1fdGlzX3N0c19zZXQoJnRpcy0+bG9jW2xvY3R5XSwKLUBAIC00MTUsNiArNDE3LDggQEAgc3RhdGljIHZvaWQgdHBtX3Rpc19yZWNlaXZlX2NiKFRQTVN0YXRlICpzLCB1aW50OF90IGxvY3R5LAotICAgICBxZW11X211dGV4X3VubG9jaygmcy0+c3RhdGVfbG9jayk7Ci0gCi0gICAgIHFlbXVfYmhfc2NoZWR1bGUodGlzLT5iaCk7Ci0rCi0rICAgIHRpcy0+Ymhfc2NoZWR1bGVkID0gdHJ1ZTsKLSB9Ci0gCi0gLyoKLUBAIC0xMDMwLDkgKzEwMzQsMTQwIEBAIHN0YXRpYyB2b2lkIHRwbV90aXNfcmVzZXQoRGV2aWNlU3RhdGUgKmRldikKLSAgICAgdHBtX3Rpc19kb19zdGFydHVwX3RwbShzKTsKLSB9Ci0gCi0rCi0rLyogcGVyc2lzdGVudCBzdGF0ZSBoYW5kbGluZyAqLwotKwotK3N0YXRpYyB2b2lkIHRwbV90aXNfcHJlX3NhdmUodm9pZCAqb3BhcXVlKQotK3sKLSsgICAgVFBNU3RhdGUgKnMgPSBvcGFxdWU7Ci0rICAgIFRQTVRJU0VtdVN0YXRlICp0aXMgPSAmcy0+cy50aXM7Ci0rICAgIHVpbnQ4X3QgbG9jdHkgPSB0aXMtPmFjdGl2ZV9sb2N0eTsKLSsKLSsgICAgRFBSSU5URigidHBtX3Rpczogc3VzcGVuZDogbG9jdHkgPSAlZCA6IHJfb2Zmc2V0ID0gJWQsIHdfb2Zmc2V0ID0gJWRcbiIsCi0rICAgICAgICAgICAgbG9jdHksIHRpcy0+bG9jWzBdLnJfb2Zmc2V0LCB0aXMtPmxvY1swXS53X29mZnNldCk7Ci0rI2lmZGVmIERFQlVHX1RJUwotKyAgICB0cG1fdGlzX2R1bXBfc3RhdGUob3BhcXVlLCAwKTsKLSsjZW5kaWYKLSsKLSsgICAgcWVtdV9tdXRleF9sb2NrKCZzLT5zdGF0ZV9sb2NrKTsKLSsKLSsgICAgLyogd2FpdCBmb3Igb3V0c3RhbmRpbmcgcmVxdWVzdCB0byBjb21wbGV0ZSAqLwotKyAgICBpZiAoVFBNX1RJU19JU19WQUxJRF9MT0NUWShsb2N0eSkgJiYKLSsgICAgICAgIHRpcy0+bG9jW2xvY3R5XS5zdGF0ZSA9PSBUUE1fVElTX1NUQVRFX0VYRUNVVElPTikgewotKyAgICAgICAgLyoKLSsgICAgICAgICAqIElmIHdlIGdldCBoZXJlIHdoZW4gdGhlIGJoIGlzIHNjaGVkdWxlZCBidXQgZGlkIG5vdCBydW4sCi0rICAgICAgICAgKiB3ZSB3b24ndCBnZXQgbm90aWZpZWQuLi4KLSsgICAgICAgICAqLwotKyAgICAgICAgaWYgKCF0aXMtPmJoX3NjaGVkdWxlZCkgewotKyAgICAgICAgICAgIC8qIGJhY2tlbmQgdGhyZWFkIHRvIG5vdGlmeSB1cyAqLwotKyAgICAgICAgICAgIHFlbXVfY29uZF93YWl0KCZzLT5jbWRfY29tcGxldGUsICZzLT5zdGF0ZV9sb2NrKTsKLSsgICAgICAgIH0KLSsgICAgICAgIGlmICh0aXMtPmxvY1tsb2N0eV0uc3RhdGUgPT0gVFBNX1RJU19TVEFURV9FWEVDVVRJT04pIHsKLSsgICAgICAgICAgICAvKiBib3R0b20gaGFsZiBkaWQgbm90IHJ1biAtIHJ1biBpdHMgZnVuY3Rpb24gKi8KLSsgICAgICAgICAgICBxZW11X211dGV4X3VubG9jaygmcy0+c3RhdGVfbG9jayk7Ci0rICAgICAgICAgICAgdHBtX3Rpc19yZWNlaXZlX2JoKG9wYXF1ZSk7Ci0rICAgICAgICAgICAgcWVtdV9tdXRleF9sb2NrKCZzLT5zdGF0ZV9sb2NrKTsKLSsgICAgICAgIH0KLSsgICAgfQotKwotKyAgICBxZW11X211dGV4X3VubG9jaygmcy0+c3RhdGVfbG9jayk7Ci0rCi0rICAgIC8qIGNvcHkgY3VycmVudCBhY3RpdmUgcmVhZCBvciB3cml0ZSBidWZmZXIgaW50byB0aGUgYnVmZmVyCi0rICAgICAgIHdyaXR0ZW4gdG8gZGlzayAqLwotKyAgICBpZiAoVFBNX1RJU19JU19WQUxJRF9MT0NUWShsb2N0eSkpIHsKLSsgICAgICAgIHN3aXRjaCAodGlzLT5sb2NbbG9jdHldLnN0YXRlKSB7Ci0rICAgICAgICBjYXNlIFRQTV9USVNfU1RBVEVfUkVDRVBUSU9OOgotKyAgICAgICAgICAgIG1lbWNweSh0aXMtPmJ1ZiwKLSsgICAgICAgICAgICAgICAgICAgdGlzLT5sb2NbbG9jdHldLndfYnVmZmVyLmJ1ZmZlciwKLSsgICAgICAgICAgICAgICAgICAgTUlOKHNpemVvZih0aXMtPmJ1ZiksCi0rICAgICAgICAgICAgICAgICAgICAgICB0aXMtPmxvY1tsb2N0eV0ud19idWZmZXIuc2l6ZSkpOwotKyAgICAgICAgICAgIHRpcy0+b2Zmc2V0ID0gdGlzLT5sb2NbbG9jdHldLndfb2Zmc2V0OwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgICBjYXNlIFRQTV9USVNfU1RBVEVfQ09NUExFVElPTjoKLSsgICAgICAgICAgICBtZW1jcHkodGlzLT5idWYsCi0rICAgICAgICAgICAgICAgICAgIHRpcy0+bG9jW2xvY3R5XS5yX2J1ZmZlci5idWZmZXIsCi0rICAgICAgICAgICAgICAgICAgIE1JTihzaXplb2YodGlzLT5idWYpLAotKyAgICAgICAgICAgICAgICAgICAgICAgdGlzLT5sb2NbbG9jdHldLnJfYnVmZmVyLnNpemUpKTsKLSsgICAgICAgICAgICB0aXMtPm9mZnNldCA9IHRpcy0+bG9jW2xvY3R5XS5yX29mZnNldDsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgICAgZGVmYXVsdDoKLSsgICAgICAgICAgICAvKiBsZWFrIG5vdGhpbmcgKi8KLSsgICAgICAgICAgICBtZW1zZXQodGlzLT5idWYsIDB4MCwgc2l6ZW9mKHRpcy0+YnVmKSk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICAgIH0KLSsgICAgfQotK30KLSsKLStzdGF0aWMgaW50IHRwbV90aXNfcG9zdF9sb2FkKHZvaWQgKm9wYXF1ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJzaW9uX2lkIF9fYXR0cmlidXRlX18oKHVudXNlZCkpKQotK3sKLSsgICAgVFBNU3RhdGUgKnMgPSBvcGFxdWU7Ci0rICAgIFRQTVRJU0VtdVN0YXRlICp0aXMgPSAmcy0+cy50aXM7Ci0rCi0rICAgIHVpbnQ4X3QgbG9jdHkgPSB0aXMtPmFjdGl2ZV9sb2N0eTsKLSsKLSsgICAgaWYgKFRQTV9USVNfSVNfVkFMSURfTE9DVFkobG9jdHkpKSB7Ci0rICAgICAgICBzd2l0Y2ggKHRpcy0+bG9jW2xvY3R5XS5zdGF0ZSkgewotKyAgICAgICAgY2FzZSBUUE1fVElTX1NUQVRFX1JFQ0VQVElPTjoKLSsgICAgICAgICAgICBtZW1jcHkodGlzLT5sb2NbbG9jdHldLndfYnVmZmVyLmJ1ZmZlciwKLSsgICAgICAgICAgICAgICAgICAgdGlzLT5idWYsCi0rICAgICAgICAgICAgICAgICAgIE1JTihzaXplb2YodGlzLT5idWYpLAotKyAgICAgICAgICAgICAgICAgICAgICAgdGlzLT5sb2NbbG9jdHldLndfYnVmZmVyLnNpemUpKTsKLSsgICAgICAgICAgICB0aXMtPmxvY1tsb2N0eV0ud19vZmZzZXQgPSB0aXMtPm9mZnNldDsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgICAgY2FzZSBUUE1fVElTX1NUQVRFX0NPTVBMRVRJT046Ci0rICAgICAgICAgICAgbWVtY3B5KHRpcy0+bG9jW2xvY3R5XS5yX2J1ZmZlci5idWZmZXIsCi0rICAgICAgICAgICAgICAgICAgIHRpcy0+YnVmLAotKyAgICAgICAgICAgICAgICAgICBNSU4oc2l6ZW9mKHRpcy0+YnVmKSwKLSsgICAgICAgICAgICAgICAgICAgICAgIHRpcy0+bG9jW2xvY3R5XS5yX2J1ZmZlci5zaXplKSk7Ci0rICAgICAgICAgICAgdGlzLT5sb2NbbG9jdHldLnJfb2Zmc2V0ID0gdGlzLT5vZmZzZXQ7Ci0rICAgICAgICBicmVhazsKLSsgICAgICAgIGRlZmF1bHQ6Ci0rICAgICAgICBicmVhazsKLSsgICAgICAgIH0KLSsgICAgfQotKwotKyAgICBEUFJJTlRGKCJ0cG1fdGlzOiByZXN1bWUgOiBsb2N0eSA9ICVkIDogcl9vZmZzZXQgPSAlZCwgd19vZmZzZXQgPSAlZFxuIiwKLSsgICAgICAgICAgICBsb2N0eSwgdGlzLT5sb2NbMF0ucl9vZmZzZXQsIHRpcy0+bG9jWzBdLndfb2Zmc2V0KTsKLSsKLSsgICAgcmV0dXJuIDA7Ci0rfQotKwotK3N0YXRpYyBjb25zdCBWTVN0YXRlRGVzY3JpcHRpb24gdm1zdGF0ZV9sb2N0eSA9IHsKLSsgICAgLm5hbWUgPSAibG9jIiwKLSsgICAgLnZlcnNpb25faWQgPSAxLAotKyAgICAubWluaW11bV92ZXJzaW9uX2lkID0gMCwKLSsgICAgLm1pbmltdW1fdmVyc2lvbl9pZF9vbGQgPSAwLAotKyAgICAuZmllbGRzICAgICAgPSAoVk1TdGF0ZUZpZWxkW10pIHsKLSsgICAgICAgIFZNU1RBVEVfVUlOVDMyKHN0YXRlLCBUUE1Mb2NhbGl0eSksCi0rICAgICAgICBWTVNUQVRFX1VJTlQzMihpbnRlLCBUUE1Mb2NhbGl0eSksCi0rICAgICAgICBWTVNUQVRFX1VJTlQzMihpbnRzLCBUUE1Mb2NhbGl0eSksCi0rICAgICAgICBWTVNUQVRFX1VJTlQ4KGFjY2VzcywgVFBNTG9jYWxpdHkpLAotKyAgICAgICAgVk1TVEFURV9VSU5UMzIoc3RzLCBUUE1Mb2NhbGl0eSksCi0rICAgICAgICBWTVNUQVRFX1VJTlQzMihpZmFjZV9pZCwgVFBNTG9jYWxpdHkpLAotKyAgICAgICAgVk1TVEFURV9FTkRfT0ZfTElTVCgpLAotKyAgICB9Ci0rfTsKLSsKLSBzdGF0aWMgY29uc3QgVk1TdGF0ZURlc2NyaXB0aW9uIHZtc3RhdGVfdHBtX3RpcyA9IHsKLSAgICAgLm5hbWUgPSAidHBtIiwKLS0gICAgLnVubWlncmF0YWJsZSA9IDEsCi0rICAgIC52ZXJzaW9uX2lkID0gMSwKLSsgICAgLm1pbmltdW1fdmVyc2lvbl9pZCA9IDAsCi0rICAgIC5taW5pbXVtX3ZlcnNpb25faWRfb2xkID0gMCwKLSsgICAgLnByZV9zYXZlICA9IHRwbV90aXNfcHJlX3NhdmUsCi0rICAgIC5wb3N0X2xvYWQgPSB0cG1fdGlzX3Bvc3RfbG9hZCwKLSsgICAgLmZpZWxkcyA9IChWTVN0YXRlRmllbGRbXSkgewotKyAgICAgICAgVk1TVEFURV9VSU5UMzIocy50aXMub2Zmc2V0LCBUUE1TdGF0ZSksCi0rICAgICAgICBWTVNUQVRFX0JVRkZFUihzLnRpcy5idWYsIFRQTVN0YXRlKSwKLSsgICAgICAgIFZNU1RBVEVfVUlOVDgocy50aXMuYWN0aXZlX2xvY3R5LCBUUE1TdGF0ZSksCi0rICAgICAgICBWTVNUQVRFX1VJTlQ4KHMudGlzLmFib3J0aW5nX2xvY3R5LCBUUE1TdGF0ZSksCi0rICAgICAgICBWTVNUQVRFX1VJTlQ4KHMudGlzLm5leHRfbG9jdHksIFRQTVN0YXRlKSwKLSsKLSsgICAgICAgIFZNU1RBVEVfU1RSVUNUX0FSUkFZKHMudGlzLmxvYywgVFBNU3RhdGUsIFRQTV9USVNfTlVNX0xPQ0FMSVRJRVMsIDEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bXN0YXRlX2xvY3R5LCBUUE1Mb2NhbGl0eSksCi0rCi0rICAgICAgICBWTVNUQVRFX0VORF9PRl9MSVNUKCkKLSsgICAgfQotIH07Ci0gCi0gc3RhdGljIFByb3BlcnR5IHRwbV90aXNfcHJvcGVydGllc1tdID0gewotZGlmZiAtLWdpdCBhL2h3L3RwbS90cG1fdGlzLmggYi9ody90cG0vdHBtX3Rpcy5oCi1pbmRleCBhMWRmNDFmYTIxLi5iN2ZjMGVhMWE5IDEwMDY0NAotLS0tIGEvaHcvdHBtL3RwbV90aXMuaAotKysrIGIvaHcvdHBtL3RwbV90aXMuaAotQEAgLTU0LDYgKzU0LDggQEAgdHlwZWRlZiBzdHJ1Y3QgVFBNTG9jYWxpdHkgewotIAotIHR5cGVkZWYgc3RydWN0IFRQTVRJU0VtdVN0YXRlIHsKLSAgICAgUUVNVUJIICpiaDsKLSsgICAgYm9vbCBiaF9zY2hlZHVsZWQ7IC8qIGJoIHNjaGVkdWxlZCBidXQgZGlkIG5vdCBydW4geWV0ICovCi0rCi0gICAgIHVpbnQzMl90IG9mZnNldDsKLSAgICAgdWludDhfdCBidWZbVFBNX1RJU19CVUZGRVJfTUFYXTsKLSAKLWRpZmYgLS1naXQgYS9ody90cG0vdHBtX3V0aWwuYyBiL2h3L3RwbS90cG1fdXRpbC5jCi1pbmRleCA3YjM1NDI5NzI1Li5iNmZmNzRkOTQ2IDEwMDY0NAotLS0tIGEvaHcvdHBtL3RwbV91dGlsLmMKLSsrKyBiL2h3L3RwbS90cG1fdXRpbC5jCi1AQCAtMjIsNiArMjIsMTcgQEAKLSAjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgotICNpbmNsdWRlICJ0cG1fdXRpbC5oIgotICNpbmNsdWRlICJ0cG1faW50LmgiCi0rI2luY2x1ZGUgInRwbV9pb2N0bC5oIgotKyNpbmNsdWRlICJxZW11L2Vycm9yLXJlcG9ydC5oIgotKwotKyNkZWZpbmUgREVCVUdfVFBNIDAKLSsKLSsjZGVmaW5lIERQUklOVEYoZm10LCAuLi4pIGRvIHsgXAotKyAgICBpZiAoREVCVUdfVFBNKSB7IFwKLSsgICAgICAgIGZwcmludGYoc3RkZXJyLCBmbXQsICMjIF9fVkFfQVJHU19fKTsgXAotKyAgICB9IFwKLSt9IHdoaWxlICgwKQotKwotIAotIC8qCi0gICogQSBiYXNpYyB0ZXN0IG9mIGEgVFBNIGRldmljZS4gV2UgZXhwZWN0IGEgd2VsbCBmb3JtYXR0ZWQgcmVzcG9uc2UgaGVhZGVyCi1AQCAtMTI1LDMgKzEzNiwyMTUgQEAgaW50IHRwbV91dGlsX3Rlc3RfdHBtZGV2KGludCB0cG1fZmQsIFRQTVZlcnNpb24gKnRwbV92ZXJzaW9uKQotIAotICAgICByZXR1cm4gMTsKLSB9Ci0rCi0rc3RhdGljIHZvaWQgdHBtX3NpemVkX2J1ZmZlcl9yZXNldChUUE1TaXplZEJ1ZmZlciAqdHNiKQotK3sKLSsgICAgZ19mcmVlKHRzYi0+YnVmZmVyKTsKLSsgICAgdHNiLT5idWZmZXIgPSBOVUxMOwotKyAgICB0c2ItPnNpemUgPSAwOwotK30KLSsKLSsvKgotKyAqIFRyYW5zZmVyIGEgVFBNIHN0YXRlIGJsb2IgZnJvbSB0aGUgVFBNIGludG8gYSBwcm92aWRlZCBidWZmZXIuCi0rICoKLSsgKiBAZmQ6IGZpbGUgZGVzY3JpcHRvciB0byB0YWxrIHRvIHRoZSBDVVNFIFRQTQotKyAqIEB0eXBlOiB0aGUgdHlwZSBvZiBibG9iIHRvIHRyYW5zZmVyCi0rICogQGRlY3J5cHRlZF9ibG9iOiB3aGV0aGVyIHdlIHJlcXVlc3QgdG8gcmVjZWl2ZSBkZWNyeXB0ZWQgYmxvYnMKLSsgKiBAdHNiOiB0aGUgVFBNU2l6ZUJ1ZmZlciB0byBmaWxsIHdpdGggdGhlIGJsb2IKLSsgKiBAZmxhZ3M6IHRoZSBmbGFncyB0byByZXR1cm4gdG8gdGhlIGNhbGxlcgotKyAqLwotK3N0YXRpYyBpbnQgdHBtX3V0aWxfY3VzZV9nZXRfc3RhdGVfYmxvYihpbnQgZmQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdHlwZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZWNyeXB0ZWRfYmxvYiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFBNU2l6ZWRCdWZmZXIgKnRzYiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmZsYWdzKQotK3sKLSsgICAgcHRtX2dldHN0YXRlIHBnczsKLSsgICAgdWludDE2X3Qgb2Zmc2V0ID0gMDsKLSsgICAgcHRtX3JlcyByZXM7Ci0rICAgIHNzaXplX3QgbjsKLSsgICAgc2l6ZV90IHRvX3JlYWQ7Ci0rCi0rICAgIHRwbV9zaXplZF9idWZmZXJfcmVzZXQodHNiKTsKLSsKLSsgICAgcGdzLnUucmVxLnN0YXRlX2ZsYWdzID0gKGRlY3J5cHRlZF9ibG9iKSA/IFBUTV9TVEFURV9GTEFHX0RFQ1JZUFRFRCA6IDA7Ci0rICAgIHBncy51LnJlcS50eXBlID0gdHlwZTsKLSsgICAgcGdzLnUucmVxLm9mZnNldCA9IG9mZnNldDsKLSsKLSsgICAgaWYgKGlvY3RsKGZkLCBQVE1fR0VUX1NUQVRFQkxPQiwgJnBncykgPCAwKSB7Ci0rICAgICAgICBlcnJvcl9yZXBvcnQoIkNVU0UgVFBNIFBUTV9HRVRfU1RBVEVCTE9CIGlvY3RsIGZhaWxlZDogJXMiLAotKyAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7Ci0rICAgICAgICBnb3RvIGVycl9leGl0OwotKyAgICB9Ci0rICAgIHJlcyA9IHBncy51LnJlc3AudHBtX3Jlc3VsdDsKLSsgICAgaWYgKHJlcyAhPSAwICYmIChyZXMgJiAweDgwMCkgPT0gMCkgewotKyAgICAgICAgZXJyb3JfcmVwb3J0KCJHZXR0aW5nIHRoZSBzdGF0ZWJsb2IgKHR5cGUgJWQpIGZhaWxlZCB3aXRoIGEgVFBNICIKLSsgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgMHgleCIsIHR5cGUsIHJlcyk7Ci0rICAgICAgICBnb3RvIGVycl9leGl0OwotKyAgICB9Ci0rCi0rICAgICpmbGFncyA9IHBncy51LnJlc3Auc3RhdGVfZmxhZ3M7Ci0rCi0rICAgIHRzYi0+YnVmZmVyID0gZ19tYWxsb2MocGdzLnUucmVzcC50b3RsZW5ndGgpOwotKyAgICBtZW1jcHkodHNiLT5idWZmZXIsIHBncy51LnJlc3AuZGF0YSwgcGdzLnUucmVzcC5sZW5ndGgpOwotKyAgICB0c2ItPnNpemUgPSBwZ3MudS5yZXNwLmxlbmd0aDsKLSsKLSsgICAgLyogaWYgdGhlcmUgYXJlIGJ5dGVzIGxlZnQgdG8gZ2V0IHVzZSByZWFkKCkgaW50ZXJmYWNlICovCi0rICAgIHdoaWxlICh0c2ItPnNpemUgPCBwZ3MudS5yZXNwLnRvdGxlbmd0aCkgewotKyAgICAgICAgdG9fcmVhZCA9IHBncy51LnJlc3AudG90bGVuZ3RoIC0gdHNiLT5zaXplOwotKyAgICAgICAgaWYgKHVubGlrZWx5KHRvX3JlYWQgPiBTU0laRV9NQVgpKSB7Ci0rICAgICAgICAgICAgdG9fcmVhZCA9IFNTSVpFX01BWDsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgIG4gPSByZWFkKGZkLCAmdHNiLT5idWZmZXJbdHNiLT5zaXplXSwgdG9fcmVhZCk7Ci0rICAgICAgICBpZiAobiAhPSB0b19yZWFkKSB7Ci0rICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJDb3VsZCBub3QgcmVhZCBzdGF0ZWJsb2IgKHR5cGUgJWQpIDogJXMiLAotKyAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLCBzdHJlcnJvcihlcnJubykpOwotKyAgICAgICAgICAgIGdvdG8gZXJyX2V4aXQ7Ci0rICAgICAgICB9Ci0rICAgICAgICB0c2ItPnNpemUgKz0gdG9fcmVhZDsKLSsgICAgfQotKwotKyAgICBEUFJJTlRGKCJ0cG1fdXRpbDogZ290IHN0YXRlIGJsb2IgdHlwZSAlZCwgJWQgYnl0ZXMsIGZsYWdzIDB4JTA4eCwgIgotKyAgICAgICAgICAgICJkZWNyeXB0ZWQ9JWRcbiIsIHR5cGUsIHRzYi0+c2l6ZSwgKmZsYWdzLCBkZWNyeXB0ZWRfYmxvYik7Ci0rCi0rICAgIHJldHVybiAwOwotKwotK2Vycl9leGl0OgotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0raW50IHRwbV91dGlsX2N1c2VfZ2V0X3N0YXRlX2Jsb2JzKGludCB0cG1fZmQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVjcnlwdGVkX2Jsb2JzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUE1CbG9iQnVmZmVycyAqdHBtX2Jsb2JzKQotK3sKLSsgICAgaWYgKHRwbV91dGlsX2N1c2VfZ2V0X3N0YXRlX2Jsb2IodHBtX2ZkLCBQVE1fQkxPQl9UWVBFX1BFUk1BTkVOVCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjcnlwdGVkX2Jsb2JzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHBtX2Jsb2JzLT5wZXJtYW5lbnQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cG1fYmxvYnMtPnBlcm1hbmVudF9mbGFncykgfHwKLSsgICAgICAgdHBtX3V0aWxfY3VzZV9nZXRfc3RhdGVfYmxvYih0cG1fZmQsIFBUTV9CTE9CX1RZUEVfVk9MQVRJTEUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY3J5cHRlZF9ibG9icywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRwbV9ibG9icy0+dm9sYXRpbCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRwbV9ibG9icy0+dm9sYXRpbF9mbGFncykgfHwKLSsgICAgICAgdHBtX3V0aWxfY3VzZV9nZXRfc3RhdGVfYmxvYih0cG1fZmQsIFBUTV9CTE9CX1RZUEVfU0FWRVNUQVRFLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNyeXB0ZWRfYmxvYnMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cG1fYmxvYnMtPnNhdmVzdGF0ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRwbV9ibG9icy0+c2F2ZXN0YXRlX2ZsYWdzKSkgewotKyAgICAgICAgZ290byBlcnJfZXhpdDsKLSsgICAgfQotKwotKyAgICByZXR1cm4gMDsKLSsKLSsgZXJyX2V4aXQ6Ci0rICAgIHRwbV9zaXplZF9idWZmZXJfcmVzZXQoJnRwbV9ibG9icy0+dm9sYXRpbCk7Ci0rICAgIHRwbV9zaXplZF9idWZmZXJfcmVzZXQoJnRwbV9ibG9icy0+cGVybWFuZW50KTsKLSsgICAgdHBtX3NpemVkX2J1ZmZlcl9yZXNldCgmdHBtX2Jsb2JzLT5zYXZlc3RhdGUpOwotKwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rc3RhdGljIGludCB0cG1fdXRpbF9jdXNlX2RvX3NldF9zdGF0ZWJsb2JfaW9jdGwoaW50IGZkLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGZsYWdzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHR5cGUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGVuZ3RoKQotK3sKLSsgICAgcHRtX3NldHN0YXRlIHBzczsKLSsKLSsgICAgcHNzLnUucmVxLnN0YXRlX2ZsYWdzID0gZmxhZ3M7Ci0rICAgIHBzcy51LnJlcS50eXBlID0gdHlwZTsKLSsgICAgcHNzLnUucmVxLmxlbmd0aCA9IGxlbmd0aDsKLSsKLSsgICAgaWYgKGlvY3RsKGZkLCBQVE1fU0VUX1NUQVRFQkxPQiwgJnBzcykgPCAwKSB7Ci0rICAgICAgICBlcnJvcl9yZXBvcnQoIkNVU0UgVFBNIFBUTV9TRVRfU1RBVEVCTE9CIGlvY3RsIGZhaWxlZDogJXMiLAotKyAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7Ci0rICAgICAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKyAgICBpZiAocHNzLnUucmVzcC50cG1fcmVzdWx0ICE9IDApIHsKLSsgICAgICAgIGVycm9yX3JlcG9ydCgiU2V0dGluZyB0aGUgc3RhdGVibG9iICh0eXBlICVkKSBmYWlsZWQgd2l0aCBhIFRQTSAiCi0rICAgICAgICAgICAgICAgICAgICAgImVycm9yIDB4JXgiLCB0eXBlLCBwc3MudS5yZXNwLnRwbV9yZXN1bHQpOwotKyAgICAgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsgICAgcmV0dXJuIDA7Ci0rfQotKwotKwotKy8qCi0rICogVHJhbnNmZXIgYSBUUE0gc3RhdGUgYmxvYiB0byB0aGUgQ1VTRSBUUE0uCi0rICoKLSsgKiBAZmQ6IGZpbGUgZGVzY3JpcHRvciB0byB0YWxrIHRvIHRoZSBDVVNFIFRQTQotKyAqIEB0eXBlOiB0aGUgdHlwZSBvZiBUUE0gc3RhdGUgYmxvYiB0byB0cmFuc2ZlcgotKyAqIEB0c2I6IFRQTVNpemVCdWZmZXIgY29udGFpbmluZyB0aGUgVFBNIHN0YXRlIGJsb2IKLSsgKiBAZmxhZ3M6IEZsYWdzIGRlc2NyaWJpbmcgdGhlIChlbmNyeXB0aW9uKSBzdGF0ZSBvZiB0aGUgVFBNIHN0YXRlIGJsb2IKLSsgKi8KLStzdGF0aWMgaW50IHRwbV91dGlsX2N1c2Vfc2V0X3N0YXRlX2Jsb2IoaW50IGZkLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB0eXBlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUE1TaXplZEJ1ZmZlciAqdHNiLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBmbGFncykKLSt7Ci0rICAgIHVpbnQzMl90IG9mZnNldCA9IDA7Ci0rICAgIHNzaXplX3QgbjsKLSsgICAgc2l6ZV90IHRvX3dyaXRlOwotKwotKyAgICAvKiBpbml0aWF0ZSB0aGUgdHJhbnNmZXIgdG8gdGhlIENVU0UgVFBNICovCi0rICAgIGlmICh0cG1fdXRpbF9jdXNlX2RvX3NldF9zdGF0ZWJsb2JfaW9jdGwoZmQsIGZsYWdzLCB0eXBlLCAwKSkgewotKyAgICAgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsgICAgLyogdXNlIHRoZSB3cml0ZSgpIGludGVyZmFjZSBmb3IgdHJhbnNmZXJyaW5nIHRoZSBzdGF0ZSBibG9iICovCi0rICAgIHdoaWxlIChvZmZzZXQgPCB0c2ItPnNpemUpIHsKLSsgICAgICAgIHRvX3dyaXRlID0gdHNiLT5zaXplIC0gb2Zmc2V0OwotKyAgICAgICAgaWYgKHVubGlrZWx5KHRvX3dyaXRlID4gU1NJWkVfTUFYKSkgewotKyAgICAgICAgICAgIHRvX3dyaXRlID0gU1NJWkVfTUFYOwotKyAgICAgICAgfQotKwotKyAgICAgICAgbiA9IHdyaXRlKGZkLCAmdHNiLT5idWZmZXJbb2Zmc2V0XSwgdG9fd3JpdGUpOwotKyAgICAgICAgaWYgKG4gIT0gdG9fd3JpdGUpIHsKLSsgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIldyaXRpbmcgdGhlIHN0YXRlYmxvYiAodHlwZSAlZCkgZmFpbGVkOiAlcyIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsIHN0cmVycm9yKGVycm5vKSk7Ci0rICAgICAgICAgICAgZ290byBlcnJfZXhpdDsKLSsgICAgICAgIH0KLSsgICAgICAgIG9mZnNldCArPSB0b193cml0ZTsKLSsgICAgfQotKwotKyAgICAvKiBpbmlkaWNhdGUgdGhhdCB0aGUgdHJhbnNmZXIgaXMgZmluaXNoZWQgKi8KLSsgICAgaWYgKHRwbV91dGlsX2N1c2VfZG9fc2V0X3N0YXRlYmxvYl9pb2N0bChmZCwgZmxhZ3MsIHR5cGUsIDApKSB7Ci0rICAgICAgICBnb3RvIGVycl9leGl0OwotKyAgICB9Ci0rCi0rICAgIERQUklOVEYoInRwbV91dGlsOiBzZXQgdGhlIHN0YXRlIGJsb2IgdHlwZSAlZCwgJWQgYnl0ZXMsIGZsYWdzIDB4JTA4eFxuIiwKLSsgICAgICAgICAgICB0eXBlLCB0c2ItPnNpemUsIGZsYWdzKTsKLSsKLSsgICAgcmV0dXJuIDA7Ci0rCi0rZXJyX2V4aXQ6Ci0rICAgIHJldHVybiAxOwotK30KLSsKLStpbnQgdHBtX3V0aWxfY3VzZV9zZXRfc3RhdGVfYmxvYnMoaW50IHRwbV9mZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFBNQmxvYkJ1ZmZlcnMgKnRwbV9ibG9icykKLSt7Ci0rICAgIHB0bV9yZXMgcmVzOwotKwotKyAgICBpZiAoaW9jdGwodHBtX2ZkLCBQVE1fU1RPUCwgJnJlcykgPCAwKSB7Ci0rICAgICAgICBlcnJvcl9yZXBvcnQoInRwbV9wYXNzdGhyb3VnaDogQ291bGQgbm90IHN0b3AgIgotKyAgICAgICAgICAgICAgICAgICAgICJ0aGUgQ1VTRSBUUE06ICVzICglaSkiLAotKyAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSwgZXJybm8pOwotKyAgICAgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsgICAgaWYgKHRwbV91dGlsX2N1c2Vfc2V0X3N0YXRlX2Jsb2IodHBtX2ZkLCBQVE1fQkxPQl9UWVBFX1BFUk1BTkVOVCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRwbV9ibG9icy0+cGVybWFuZW50LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cG1fYmxvYnMtPnBlcm1hbmVudF9mbGFncykgfHwKLSsgICAgICAgIHRwbV91dGlsX2N1c2Vfc2V0X3N0YXRlX2Jsb2IodHBtX2ZkLCBQVE1fQkxPQl9UWVBFX1ZPTEFUSUxFLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHBtX2Jsb2JzLT52b2xhdGlsLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cG1fYmxvYnMtPnZvbGF0aWxfZmxhZ3MpIHx8Ci0rICAgICAgICB0cG1fdXRpbF9jdXNlX3NldF9zdGF0ZV9ibG9iKHRwbV9mZCwgUFRNX0JMT0JfVFlQRV9TQVZFU1RBVEUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cG1fYmxvYnMtPnNhdmVzdGF0ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHBtX2Jsb2JzLT5zYXZlc3RhdGVfZmxhZ3MpKSB7Ci0rICAgICAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKyAgICByZXR1cm4gMDsKLSt9Ci1kaWZmIC0tZ2l0IGEvaHcvdHBtL3RwbV91dGlsLmggYi9ody90cG0vdHBtX3V0aWwuaAotaW5kZXggZGY3NjI0NWU2ZS4uYzI0MDcxZDgxMiAxMDA2NDQKLS0tLSBhL2h3L3RwbS90cG1fdXRpbC5oCi0rKysgYi9ody90cG0vdHBtX3V0aWwuaAotQEAgLTI2LDQgKzI2LDExIEBACi0gCi0gaW50IHRwbV91dGlsX3Rlc3RfdHBtZGV2KGludCB0cG1fZmQsIFRQTVZlcnNpb24gKnRwbV92ZXJzaW9uKTsKLSAKLStpbnQgdHBtX3V0aWxfY3VzZV9nZXRfc3RhdGVfYmxvYnMoaW50IHRwbV9mZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZWNyeXB0ZWRfYmxvYnMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRQTUJsb2JCdWZmZXJzICp0cG1fYmxvYnMpOwotKwotK2ludCB0cG1fdXRpbF9jdXNlX3NldF9zdGF0ZV9ibG9icyhpbnQgdHBtX2ZkLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUE1CbG9iQnVmZmVycyAqdHBtX2Jsb2JzKTsKLSsKLSAjZW5kaWYgLyogVFBNX1RQTV9VVElMX0ggKi8KLWRpZmYgLS1naXQgYS9pbmNsdWRlL3N5c2VtdS90cG1fYmFja2VuZC5oIGIvaW5jbHVkZS9zeXNlbXUvdHBtX2JhY2tlbmQuaAotaW5kZXggYjU4ZjUyZDM5Zi4uMzQwMzgyMWI5ZCAxMDA2NDQKLS0tLSBhL2luY2x1ZGUvc3lzZW11L3RwbV9iYWNrZW5kLmgKLSsrKyBiL2luY2x1ZGUvc3lzZW11L3RwbV9iYWNrZW5kLmgKLUBAIC02Miw2ICs2MiwxOCBAQCB0eXBlZGVmIHN0cnVjdCBUUE1TaXplZEJ1ZmZlciB7Ci0gICAgIHVpbnQ4X3QgICpidWZmZXI7Ci0gfSBUUE1TaXplZEJ1ZmZlcjsKLSAKLSsvKiBibG9icyBmcm9tIHRoZSBUUE07IHBhcnQgb2YgVk0gc3RhdGUgd2hlbiBtaWdyYXRpbmcgKi8KLSt0eXBlZGVmIHN0cnVjdCBUUE1CbG9iQnVmZmVycyB7Ci0rICAgIHVpbnQzMl90IHBlcm1hbmVudF9mbGFnczsKLSsgICAgVFBNU2l6ZWRCdWZmZXIgcGVybWFuZW50OwotKwotKyAgICB1aW50MzJfdCB2b2xhdGlsX2ZsYWdzOwotKyAgICBUUE1TaXplZEJ1ZmZlciB2b2xhdGlsOwotKwotKyAgICB1aW50MzJfdCBzYXZlc3RhdGVfZmxhZ3M7Ci0rICAgIFRQTVNpemVkQnVmZmVyIHNhdmVzdGF0ZTsKLSt9IFRQTUJsb2JCdWZmZXJzOwotKwotIHN0cnVjdCBUUE1Ecml2ZXJPcHMgewotICAgICBlbnVtIFRwbVR5cGUgdHlwZTsKLSAgICAgY29uc3QgUWVtdU9wdERlc2MgKm9wdHM7Ci0tLSAKLTIuMTEuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS8wNGIzM2UyMTg2NjQxMjY4OWYxOGI3YWQ2ZGFmMGE1NGQ4Zjk1OWE3LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvMDRiMzNlMjE4NjY0MTI2ODlmMThiN2FkNmRhZjBhNTRkOGY5NTlhNy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk0N2U4Yy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS8wNGIzM2UyMTg2NjQxMjY4OWYxOGI3YWQ2ZGFmMGE1NGQ4Zjk1OWE3LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjgyICswLDAgQEAKLUZyb20gMDRiMzNlMjE4NjY0MTI2ODlmMThiN2FkNmRhZjBhNTRkOGY5NTlhNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBXZWQsIDI4IEp1biAyMDE3IDEzOjQ0OjUyIC0wNzAwCi1TdWJqZWN0OiBbUEFUQ0hdIFJlcGxhY2UgJ3N0cnVjdCB1Y29udGV4dCcgd2l0aCAndWNvbnRleHRfdCcgdHlwZQotCi1nbGliYyB1c2VkIHRvIGhhdmU6Ci0KLSAgIHR5cGVkZWYgc3RydWN0IHVjb250ZXh0IHsgLi4uIH0gdWNvbnRleHRfdDsKLQotZ2xpYmMgbm93IGhhczoKLQotICAgdHlwZWRlZiBzdHJ1Y3QgdWNvbnRleHRfdCB7IC4uLiB9IHVjb250ZXh0X3Q7Ci0KLShTZWUgaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MjE0NTcKLSBmb3IgZGV0YWlsIGFuZCByYXRpb25hbGUgZm9yIHRoZSBnbGliYyBjaGFuZ2UpCi0KLUhvd2V2ZXIsIFFFTVUgdXNlZCAic3RydWN0IHVjb250ZXh0IiBpbiBkZWNsYXJhdGlvbnMuIFRoaXMgaXMgYQotcHJpdmF0ZSBuYW1lIGFuZCBjb21wYXRpYmlsaXR5IGNhbm5vdCBiZSBndWFyYW50ZWVkLiBTd2l0Y2ggdG8KLW9ubHkgdXNpbmcgdGhlIHN0YW5kYXJkaXplZCB0eXBlIG5hbWUuCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1NZXNzYWdlLWlkOiAyMDE3MDYyODIwNDQ1Mi40MTIzMC0xLXJhai5raGVtQGdtYWlsLmNvbQotQ2M6IEthbWlsIFJ5dGFyb3dza2kgPGthbWlsQG5ldGJzZC5vcmc+Ci1DYzogUmlrdSBWb2lwaW8gPHJpa3Uudm9pcGlvQGlraS5maT4KLUNjOiBMYXVyZW50IFZpdmllciA8bGF1cmVudEB2aXZpZXIuZXU+Ci1DYzogUGFvbG8gQm9uemluaSA8cGJvbnppbmlAcmVkaGF0LmNvbT4KLVJldmlld2VkLWJ5OiBFcmljIEJsYWtlIDxlYmxha2VAcmVkaGF0LmNvbT4KLVtQTU06IFJld3JvdGUgY29tbWl0IG1lc3NhZ2UsIGJhc2VkIG1vc3RseSBvbiB0aGUgb25lIGZyb20KLSBOYXRoYW5pZWwgTWNDYWxsdW1dCi1TaWduZWQtb2ZmLWJ5OiBQZXRlciBNYXlkZWxsIDxwZXRlci5tYXlkZWxsQGxpbmFyby5vcmc+Ci0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLVJQIDIwMTcvOS82Ci0tLS0KLSBsaW51eC11c2VyL2hvc3QvYWFyY2g2NC9ob3N0ZGVwLmggfCAgMiArLQotIGxpbnV4LXVzZXIvaG9zdC9hcm0vaG9zdGRlcC5oICAgICB8ICAyICstCi0gbGludXgtdXNlci9ob3N0L2kzODYvaG9zdGRlcC5oICAgIHwgIDIgKy0KLSBsaW51eC11c2VyL2hvc3QvcHBjNjQvaG9zdGRlcC5oICAgfCAgMiArLQotIGxpbnV4LXVzZXIvaG9zdC9zMzkweC9ob3N0ZGVwLmggICB8ICAyICstCi0gbGludXgtdXNlci9ob3N0L3g4Nl82NC9ob3N0ZGVwLmggIHwgIDIgKy0KLSBsaW51eC11c2VyL3NpZ25hbC5jICAgICAgICAgICAgICAgfCAxMCArKysrKy0tLS0tCi0gdGVzdHMvdGNnL3Rlc3QtaTM4Ni5jICAgICAgICAgICAgIHwgIDQgKystLQotIHVzZXItZXhlYy5jICAgICAgICAgICAgICAgICAgICAgICB8IDE4ICsrKysrKysrKy0tLS0tLS0tLQotIDkgZmlsZXMgY2hhbmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwgMjIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9saW51eC11c2VyL2hvc3QvYWFyY2g2NC9ob3N0ZGVwLmggYi9saW51eC11c2VyL2hvc3QvYWFyY2g2NC9ob3N0ZGVwLmgKLWluZGV4IDY0Zjc1Y2UuLmE4ZDQxYTIgMTAwNjQ0Ci0tLS0gYS9saW51eC11c2VyL2hvc3QvYWFyY2g2NC9ob3N0ZGVwLmgKLSsrKyBiL2xpbnV4LXVzZXIvaG9zdC9hYXJjaDY0L2hvc3RkZXAuaAotQEAgLTI0LDcgKzI0LDcgQEAgZXh0ZXJuIGNoYXIgc2FmZV9zeXNjYWxsX2VuZFtdOwotIC8qIEFkanVzdCB0aGUgc2lnbmFsIGNvbnRleHQgdG8gcmV3aW5kIG91dCBvZiBzYWZlLXN5c2NhbGwgaWYgd2UncmUgaW4gaXQgKi8KLSBzdGF0aWMgaW5saW5lIHZvaWQgcmV3aW5kX2lmX2luX3NhZmVfc3lzY2FsbCh2b2lkICpwdWMpCi0gewotLSAgICBzdHJ1Y3QgdWNvbnRleHQgKnVjID0gcHVjOwotKyAgICB1Y29udGV4dF90ICp1YyA9IHB1YzsKLSAgICAgX191NjQgKnBjcmVnID0gJnVjLT51Y19tY29udGV4dC5wYzsKLSAKLSAgICAgaWYgKCpwY3JlZyA+ICh1aW50cHRyX3Qpc2FmZV9zeXNjYWxsX3N0YXJ0Ci1kaWZmIC0tZ2l0IGEvbGludXgtdXNlci9ob3N0L2FybS9ob3N0ZGVwLmggYi9saW51eC11c2VyL2hvc3QvYXJtL2hvc3RkZXAuaAotaW5kZXggNWMxYWU2MC4uOTI3NmZlNiAxMDA2NDQKLS0tLSBhL2xpbnV4LXVzZXIvaG9zdC9hcm0vaG9zdGRlcC5oCi0rKysgYi9saW51eC11c2VyL2hvc3QvYXJtL2hvc3RkZXAuaAotQEAgLTI0LDcgKzI0LDcgQEAgZXh0ZXJuIGNoYXIgc2FmZV9zeXNjYWxsX2VuZFtdOwotIC8qIEFkanVzdCB0aGUgc2lnbmFsIGNvbnRleHQgdG8gcmV3aW5kIG91dCBvZiBzYWZlLXN5c2NhbGwgaWYgd2UncmUgaW4gaXQgKi8KLSBzdGF0aWMgaW5saW5lIHZvaWQgcmV3aW5kX2lmX2luX3NhZmVfc3lzY2FsbCh2b2lkICpwdWMpCi0gewotLSAgICBzdHJ1Y3QgdWNvbnRleHQgKnVjID0gcHVjOwotKyAgICB1Y29udGV4dF90ICp1YyA9IHB1YzsKLSAgICAgdW5zaWduZWQgbG9uZyAqcGNyZWcgPSAmdWMtPnVjX21jb250ZXh0LmFybV9wYzsKLSAKLSAgICAgaWYgKCpwY3JlZyA+ICh1aW50cHRyX3Qpc2FmZV9zeXNjYWxsX3N0YXJ0Ci1kaWZmIC0tZ2l0IGEvbGludXgtdXNlci9ob3N0L2kzODYvaG9zdGRlcC5oIGIvbGludXgtdXNlci9ob3N0L2kzODYvaG9zdGRlcC5oCi1pbmRleCBkODM0YmQ4Li4wNzNiZTc0IDEwMDY0NAotLS0tIGEvbGludXgtdXNlci9ob3N0L2kzODYvaG9zdGRlcC5oCi0rKysgYi9saW51eC11c2VyL2hvc3QvaTM4Ni9ob3N0ZGVwLmgKLUBAIC0yNCw3ICsyNCw3IEBAIGV4dGVybiBjaGFyIHNhZmVfc3lzY2FsbF9lbmRbXTsKLSAvKiBBZGp1c3QgdGhlIHNpZ25hbCBjb250ZXh0IHRvIHJld2luZCBvdXQgb2Ygc2FmZS1zeXNjYWxsIGlmIHdlJ3JlIGluIGl0ICovCi0gc3RhdGljIGlubGluZSB2b2lkIHJld2luZF9pZl9pbl9zYWZlX3N5c2NhbGwodm9pZCAqcHVjKQotIHsKLS0gICAgc3RydWN0IHVjb250ZXh0ICp1YyA9IHB1YzsKLSsgICAgdWNvbnRleHRfdCAqdWMgPSBwdWM7Ci0gICAgIGdyZWdfdCAqcGNyZWcgPSAmdWMtPnVjX21jb250ZXh0LmdyZWdzW1JFR19FSVBdOwotIAotICAgICBpZiAoKnBjcmVnID4gKHVpbnRwdHJfdClzYWZlX3N5c2NhbGxfc3RhcnQKLWRpZmYgLS1naXQgYS9saW51eC11c2VyL2hvc3QvcHBjNjQvaG9zdGRlcC5oIGIvbGludXgtdXNlci9ob3N0L3BwYzY0L2hvc3RkZXAuaAotaW5kZXggMGIwZjVmNy4uOTg5NzlhZCAxMDA2NDQKLS0tLSBhL2xpbnV4LXVzZXIvaG9zdC9wcGM2NC9ob3N0ZGVwLmgKLSsrKyBiL2xpbnV4LXVzZXIvaG9zdC9wcGM2NC9ob3N0ZGVwLmgKLUBAIC0yNCw3ICsyNCw3IEBAIGV4dGVybiBjaGFyIHNhZmVfc3lzY2FsbF9lbmRbXTsKLSAvKiBBZGp1c3QgdGhlIHNpZ25hbCBjb250ZXh0IHRvIHJld2luZCBvdXQgb2Ygc2FmZS1zeXNjYWxsIGlmIHdlJ3JlIGluIGl0ICovCi0gc3RhdGljIGlubGluZSB2b2lkIHJld2luZF9pZl9pbl9zYWZlX3N5c2NhbGwodm9pZCAqcHVjKQotIHsKLS0gICAgc3RydWN0IHVjb250ZXh0ICp1YyA9IHB1YzsKLSsgICAgdWNvbnRleHRfdCAqdWMgPSBwdWM7Ci0gICAgIHVuc2lnbmVkIGxvbmcgKnBjcmVnID0gJnVjLT51Y19tY29udGV4dC5ncF9yZWdzW1BUX05JUF07Ci0gCi0gICAgIGlmICgqcGNyZWcgPiAodWludHB0cl90KXNhZmVfc3lzY2FsbF9zdGFydAotZGlmZiAtLWdpdCBhL2xpbnV4LXVzZXIvaG9zdC9zMzkweC9ob3N0ZGVwLmggYi9saW51eC11c2VyL2hvc3QvczM5MHgvaG9zdGRlcC5oCi1pbmRleCA2ZjlkYTljLi40ZjAxNzFmIDEwMDY0NAotLS0tIGEvbGludXgtdXNlci9ob3N0L3MzOTB4L2hvc3RkZXAuaAotKysrIGIvbGludXgtdXNlci9ob3N0L3MzOTB4L2hvc3RkZXAuaAotQEAgLTI0LDcgKzI0LDcgQEAgZXh0ZXJuIGNoYXIgc2FmZV9zeXNjYWxsX2VuZFtdOwotIC8qIEFkanVzdCB0aGUgc2lnbmFsIGNvbnRleHQgdG8gcmV3aW5kIG91dCBvZiBzYWZlLXN5c2NhbGwgaWYgd2UncmUgaW4gaXQgKi8KLSBzdGF0aWMgaW5saW5lIHZvaWQgcmV3aW5kX2lmX2luX3NhZmVfc3lzY2FsbCh2b2lkICpwdWMpCi0gewotLSAgICBzdHJ1Y3QgdWNvbnRleHQgKnVjID0gcHVjOwotKyAgICB1Y29udGV4dF90ICp1YyA9IHB1YzsKLSAgICAgdW5zaWduZWQgbG9uZyAqcGNyZWcgPSAmdWMtPnVjX21jb250ZXh0LnBzdy5hZGRyOwotIAotICAgICBpZiAoKnBjcmVnID4gKHVpbnRwdHJfdClzYWZlX3N5c2NhbGxfc3RhcnQKLWRpZmYgLS1naXQgYS9saW51eC11c2VyL2hvc3QveDg2XzY0L2hvc3RkZXAuaCBiL2xpbnV4LXVzZXIvaG9zdC94ODZfNjQvaG9zdGRlcC5oCi1pbmRleCAzYjQyNTk2Li5hNGZlZmI1IDEwMDY0NAotLS0tIGEvbGludXgtdXNlci9ob3N0L3g4Nl82NC9ob3N0ZGVwLmgKLSsrKyBiL2xpbnV4LXVzZXIvaG9zdC94ODZfNjQvaG9zdGRlcC5oCi1AQCAtMjQsNyArMjQsNyBAQCBleHRlcm4gY2hhciBzYWZlX3N5c2NhbGxfZW5kW107Ci0gLyogQWRqdXN0IHRoZSBzaWduYWwgY29udGV4dCB0byByZXdpbmQgb3V0IG9mIHNhZmUtc3lzY2FsbCBpZiB3ZSdyZSBpbiBpdCAqLwotIHN0YXRpYyBpbmxpbmUgdm9pZCByZXdpbmRfaWZfaW5fc2FmZV9zeXNjYWxsKHZvaWQgKnB1YykKLSB7Ci0tICAgIHN0cnVjdCB1Y29udGV4dCAqdWMgPSBwdWM7Ci0rICAgIHVjb250ZXh0X3QgKnVjID0gcHVjOwotICAgICBncmVnX3QgKnBjcmVnID0gJnVjLT51Y19tY29udGV4dC5ncmVnc1tSRUdfUklQXTsKLSAKLSAgICAgaWYgKCpwY3JlZyA+ICh1aW50cHRyX3Qpc2FmZV9zeXNjYWxsX3N0YXJ0Ci1kaWZmIC0tZ2l0IGEvbGludXgtdXNlci9zaWduYWwuYyBiL2xpbnV4LXVzZXIvc2lnbmFsLmMKLWluZGV4IGQ2OGJkMjYuLmNjMGMzZmMgMTAwNjQ0Ci0tLS0gYS9saW51eC11c2VyL3NpZ25hbC5jCi0rKysgYi9saW51eC11c2VyL3NpZ25hbC5jCi1AQCAtMzM0Niw3ICszMzQ2LDcgQEAgc3RhdGljIHZvaWQgc2V0dXBfcnRfZnJhbWUoaW50IHNpZywgc3RydWN0IHRhcmdldF9zaWdhY3Rpb24gKmthLAotICAgICAqCi0gICAgICogICBhMCA9IHNpZ25hbCBudW1iZXIKLSAgICAgKiAgIGExID0gcG9pbnRlciB0byBzaWdpbmZvX3QKLS0gICAgKiAgIGEyID0gcG9pbnRlciB0byBzdHJ1Y3QgdWNvbnRleHQKLSsgICAgKiAgIGEyID0gcG9pbnRlciB0byB1Y29udGV4dF90Ci0gICAgICoKLSAgICAgKiAkMjUgYW5kIFBDIHBvaW50IHRvIHRoZSBzaWduYWwgaGFuZGxlciwgJDI5IHBvaW50cyB0byB0aGUKLSAgICAgKiBzdHJ1Y3Qgc2lnZnJhbWUuCi1AQCAtMzc2NCw3ICszNzY0LDcgQEAgc3RydWN0IHRhcmdldF9zaWduYWxfZnJhbWUgewotIAotIHN0cnVjdCBydF9zaWduYWxfZnJhbWUgewotICAgICBzaWdpbmZvX3QgaW5mbzsKLS0gICAgc3RydWN0IHVjb250ZXh0IHVjOwotKyAgICB1Y29udGV4dF90IHVjOwotICAgICB1aW50MzJfdCB0cmFtcFsyXTsKLSB9OwotIAotQEAgLTM5ODAsNyArMzk4MCw3IEBAIHN0cnVjdCBydF9zaWduYWxfZnJhbWUgewotICAgICBzaWdpbmZvX3QgKnBpbmZvOwotICAgICB2b2lkICpwdWM7Ci0gICAgIHNpZ2luZm9fdCBpbmZvOwotLSAgICBzdHJ1Y3QgdWNvbnRleHQgdWM7Ci0rICAgIHVjb250ZXh0X3QgdWM7Ci0gICAgIHVpbnQxNl90IHJldGNvZGVbNF07ICAgICAgLyogVHJhbXBvbGluZSBjb2RlLiAqLwotIH07Ci0gCi1AQCAtNDUxNSw3ICs0NTE1LDcgQEAgc3RhdGljIHZvaWQgc2V0dXBfcnRfZnJhbWUoaW50IHNpZywgc3RydWN0IHRhcmdldF9zaWdhY3Rpb24gKmthLAotICAgICAgICAgdHN3YXBfc2lnaW5mbygmZnJhbWUtPmluZm8sIGluZm8pOwotICAgICB9Ci0gCi0tICAgIC8qZXJyIHw9IF9fY2xlYXJfdXNlcigmZnJhbWUtPnVjLCBvZmZzZXRvZihzdHJ1Y3QgdWNvbnRleHQsIHVjX21jb250ZXh0KSk7Ki8KLSsgICAgLyplcnIgfD0gX19jbGVhcl91c2VyKCZmcmFtZS0+dWMsIG9mZnNldG9mKHVjb250ZXh0X3QsIHVjX21jb250ZXh0KSk7Ki8KLSAgICAgX19wdXRfdXNlcigwLCAmZnJhbWUtPnVjLnR1Y19mbGFncyk7Ci0gICAgIF9fcHV0X3VzZXIoMCwgJmZyYW1lLT51Yy50dWNfbGluayk7Ci0gICAgIF9fcHV0X3VzZXIodGFyZ2V0X3NpZ2FsdHN0YWNrX3VzZWQuc3Nfc3AsCi1AQCAtNTAwNyw3ICs1MDA3LDcgQEAgZW51bSB7Ci0gCi0gc3RydWN0IHRhcmdldF91Y29udGV4dCB7Ci0gICAgIHRhcmdldF91bG9uZyB0dWNfZmxhZ3M7Ci0tICAgIHRhcmdldF91bG9uZyB0dWNfbGluazsgICAgLyogc3RydWN0IHVjb250ZXh0IF9fdXNlciAqICovCi0rICAgIHRhcmdldF91bG9uZyB0dWNfbGluazsgICAgLyogdWNvbnRleHRfdCBfX3VzZXIgKiAqLwotICAgICBzdHJ1Y3QgdGFyZ2V0X3NpZ2FsdHN0YWNrIHR1Y19zdGFjazsKLSAjaWYgIWRlZmluZWQoVEFSR0VUX1BQQzY0KQotICAgICBpbnQzMl90IHR1Y19wYWRbN107Ci1kaWZmIC0tZ2l0IGEvdGVzdHMvdGNnL3Rlc3QtaTM4Ni5jIGIvdGVzdHMvdGNnL3Rlc3QtaTM4Ni5jCi1pbmRleCAwZjdiOTQzLi45NTk5MjA0IDEwMDY0NAotLS0tIGEvdGVzdHMvdGNnL3Rlc3QtaTM4Ni5jCi0rKysgYi90ZXN0cy90Y2cvdGVzdC1pMzg2LmMKLUBAIC0xNzIwLDcgKzE3MjAsNyBAQCBpbnQgdGFiWzJdOwotIAotIHZvaWQgc2lnX2hhbmRsZXIoaW50IHNpZywgc2lnaW5mb190ICppbmZvLCB2b2lkICpwdWMpCi0gewotLSAgICBzdHJ1Y3QgdWNvbnRleHQgKnVjID0gcHVjOwotKyAgICB1Y29udGV4dF90ICp1YyA9IHB1YzsKLSAKLSAgICAgcHJpbnRmKCJzaV9zaWdubz0lZCBzaV9lcnJubz0lZCBzaV9jb2RlPSVkIiwKLSAgICAgICAgICAgIGluZm8tPnNpX3NpZ25vLCBpbmZvLT5zaV9lcnJubywgaW5mby0+c2lfY29kZSk7Ci1AQCAtMTkxMiw3ICsxOTEyLDcgQEAgdm9pZCB0ZXN0X2V4Y2VwdGlvbnModm9pZCkKLSAvKiBzcGVjaWZpYyBwcmVjaXNlIHNpbmdsZSBzdGVwIHRlc3QgKi8KLSB2b2lkIHNpZ190cmFwX2hhbmRsZXIoaW50IHNpZywgc2lnaW5mb190ICppbmZvLCB2b2lkICpwdWMpCi0gewotLSAgICBzdHJ1Y3QgdWNvbnRleHQgKnVjID0gcHVjOwotKyAgICB1Y29udGV4dF90ICp1YyA9IHB1YzsKLSAgICAgcHJpbnRmKCJFSVA9IiBGTVRMWCAiXG4iLCAobG9uZyl1Yy0+dWNfbWNvbnRleHQuZ3JlZ3NbUkVHX0VJUF0pOwotIH0KLSAKLWRpZmYgLS1naXQgYS91c2VyLWV4ZWMuYyBiL3VzZXItZXhlYy5jCi1pbmRleCBhOGY5NWZhLi4yYTk3NWVhIDEwMDY0NAotLS0tIGEvdXNlci1leGVjLmMKLSsrKyBiL3VzZXItZXhlYy5jCi1AQCAtMTY3LDcgKzE2Nyw3IEBAIGludCBjcHVfc2lnbmFsX2hhbmRsZXIoaW50IGhvc3Rfc2lnbnVtLCB2b2lkICpwaW5mbywKLSAjZWxpZiBkZWZpbmVkKF9fT3BlbkJTRF9fKQotICAgICBzdHJ1Y3Qgc2lnY29udGV4dCAqdWMgPSBwdWM7Ci0gI2Vsc2UKLS0gICAgc3RydWN0IHVjb250ZXh0ICp1YyA9IHB1YzsKLSsgICAgdWNvbnRleHRfdCAqdWMgPSBwdWM7Ci0gI2VuZGlmCi0gICAgIHVuc2lnbmVkIGxvbmcgcGM7Ci0gICAgIGludCB0cmFwbm87Ci1AQCAtMjIyLDcgKzIyMiw3IEBAIGludCBjcHVfc2lnbmFsX2hhbmRsZXIoaW50IGhvc3Rfc2lnbnVtLCB2b2lkICpwaW5mbywKLSAjZWxpZiBkZWZpbmVkKF9fT3BlbkJTRF9fKQotICAgICBzdHJ1Y3Qgc2lnY29udGV4dCAqdWMgPSBwdWM7Ci0gI2Vsc2UKLS0gICAgc3RydWN0IHVjb250ZXh0ICp1YyA9IHB1YzsKLSsgICAgdWNvbnRleHRfdCAqdWMgPSBwdWM7Ci0gI2VuZGlmCi0gCi0gICAgIHBjID0gUENfc2lnKHVjKTsKLUBAIC0yODksNyArMjg5LDcgQEAgaW50IGNwdV9zaWduYWxfaGFuZGxlcihpbnQgaG9zdF9zaWdudW0sIHZvaWQgKnBpbmZvLAotICNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9rZXJuZWxfXykKLSAgICAgdWNvbnRleHRfdCAqdWMgPSBwdWM7Ci0gI2Vsc2UKLS0gICAgc3RydWN0IHVjb250ZXh0ICp1YyA9IHB1YzsKLSsgICAgdWNvbnRleHRfdCAqdWMgPSBwdWM7Ci0gI2VuZGlmCi0gICAgIHVuc2lnbmVkIGxvbmcgcGM7Ci0gICAgIGludCBpc193cml0ZTsKLUBAIC0zMTYsNyArMzE2LDcgQEAgaW50IGNwdV9zaWduYWxfaGFuZGxlcihpbnQgaG9zdF9zaWdudW0sIHZvaWQgKnBpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnB1YykKLSB7Ci0gICAgIHNpZ2luZm9fdCAqaW5mbyA9IHBpbmZvOwotLSAgICBzdHJ1Y3QgdWNvbnRleHQgKnVjID0gcHVjOwotKyAgICB1Y29udGV4dF90ICp1YyA9IHB1YzsKLSAgICAgdWludDMyX3QgKnBjID0gdWMtPnVjX21jb250ZXh0LnNjX3BjOwotICAgICB1aW50MzJfdCBpbnNuID0gKnBjOwotICAgICBpbnQgaXNfd3JpdGUgPSAwOwotQEAgLTQxNCw3ICs0MTQsNyBAQCBpbnQgY3B1X3NpZ25hbF9oYW5kbGVyKGludCBob3N0X3NpZ251bSwgdm9pZCAqcGluZm8sCi0gI2lmIGRlZmluZWQoX19OZXRCU0RfXykKLSAgICAgdWNvbnRleHRfdCAqdWMgPSBwdWM7Ci0gI2Vsc2UKLS0gICAgc3RydWN0IHVjb250ZXh0ICp1YyA9IHB1YzsKLSsgICAgdWNvbnRleHRfdCAqdWMgPSBwdWM7Ci0gI2VuZGlmCi0gICAgIHVuc2lnbmVkIGxvbmcgcGM7Ci0gICAgIGludCBpc193cml0ZTsKLUBAIC00NDEsNyArNDQxLDcgQEAgaW50IGNwdV9zaWduYWxfaGFuZGxlcihpbnQgaG9zdF9zaWdudW0sIHZvaWQgKnBpbmZvLAotIGludCBjcHVfc2lnbmFsX2hhbmRsZXIoaW50IGhvc3Rfc2lnbnVtLCB2b2lkICpwaW5mbywgdm9pZCAqcHVjKQotIHsKLSAgICAgc2lnaW5mb190ICppbmZvID0gcGluZm87Ci0tICAgIHN0cnVjdCB1Y29udGV4dCAqdWMgPSBwdWM7Ci0rICAgIHVjb250ZXh0X3QgKnVjID0gcHVjOwotICAgICB1aW50cHRyX3QgcGMgPSB1Yy0+dWNfbWNvbnRleHQucGM7Ci0gICAgIHVpbnQzMl90IGluc24gPSAqKHVpbnQzMl90ICopcGM7Ci0gICAgIGJvb2wgaXNfd3JpdGU7Ci1AQCAtNDc0LDcgKzQ3NCw3IEBAIGludCBjcHVfc2lnbmFsX2hhbmRsZXIoaW50IGhvc3Rfc2lnbnVtLCB2b2lkICpwaW5mbywgdm9pZCAqcHVjKQotIGludCBjcHVfc2lnbmFsX2hhbmRsZXIoaW50IGhvc3Rfc2lnbnVtLCB2b2lkICpwaW5mbywgdm9pZCAqcHVjKQotIHsKLSAgICAgc2lnaW5mb190ICppbmZvID0gcGluZm87Ci0tICAgIHN0cnVjdCB1Y29udGV4dCAqdWMgPSBwdWM7Ci0rICAgIHVjb250ZXh0X3QgKnVjID0gcHVjOwotICAgICB1bnNpZ25lZCBsb25nIGlwOwotICAgICBpbnQgaXNfd3JpdGUgPSAwOwotIAotQEAgLTUwNSw3ICs1MDUsNyBAQCBpbnQgY3B1X3NpZ25hbF9oYW5kbGVyKGludCBob3N0X3NpZ251bSwgdm9pZCAqcGluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwdWMpCi0gewotICAgICBzaWdpbmZvX3QgKmluZm8gPSBwaW5mbzsKLS0gICAgc3RydWN0IHVjb250ZXh0ICp1YyA9IHB1YzsKLSsgICAgdWNvbnRleHRfdCAqdWMgPSBwdWM7Ci0gICAgIHVuc2lnbmVkIGxvbmcgcGM7Ci0gICAgIHVpbnQxNl90ICpwaW5zbjsKLSAgICAgaW50IGlzX3dyaXRlID0gMDsKLUBAIC01NTgsNyArNTU4LDcgQEAgaW50IGNwdV9zaWduYWxfaGFuZGxlcihpbnQgaG9zdF9zaWdudW0sIHZvaWQgKnBpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcHVjKQotIHsKLSAgICAgc2lnaW5mb190ICppbmZvID0gcGluZm87Ci0tICAgIHN0cnVjdCB1Y29udGV4dCAqdWMgPSBwdWM7Ci0rICAgIHVjb250ZXh0X3QgKnVjID0gcHVjOwotICAgICBncmVnX3QgcGMgPSB1Yy0+dWNfbWNvbnRleHQucGM7Ci0gICAgIGludCBpc193cml0ZTsKLSAKLS0tIAotMS44LjMuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9DVkUtMjAxNi05OTA4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvQ1ZFLTIwMTYtOTkwOC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBmN2ExYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9DVkUtMjAxNi05OTA4LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotRnJvbSA3MTM5Y2NiYzkwNzQ0MTMzN2I0YjU5Y2RlMmM1YjVhNTRjYjViMmNjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogU29uYSBTYXJtYWRpIDxzb25hLnNhcm1hZGlAZW5lYS5jb20+Ci0KLXZpcnRpby1ncHU6IGZpeCBpbmZvcm1hdGlvbiBsZWFrIGluIGNhcHNldCBnZXQgZGlzcGF0Y2gKLQotSW4gdmlyZ2xfY21kX2dldF9jYXBzZXQgZnVuY3Rpb24sIGl0IHVzZXMgZ19tYWxsb2MgdG8gYWxsb2NhdGUKLWEgcmVzcG9uc2Ugc3RydWN0IHRvIHRoZSBndWVzdC4gQXMgdGhlICdyZXNwJ3N0cnVjdCBoYXNuJ3QgYmVlbiBmdWxsCi1pbml0aWFsaXplZCBpdCB3aWxsIGxlYWQgdGhlICdyZXNwLT5wYWRkaW5nJyBmaWVsZCB0byB0aGUgZ3Vlc3QuCi1Vc2UgZ19tYWxsb2MwIHRvIGF2b2lkIHRoaXMuCi0KLVNpZ25lZC1vZmYtYnk6IExpIFFpYW5nIDxsaXFpYW5nNi1zQDM2MC5jbj4KLVJldmlld2VkLWJ5OiBNYXJjLUFuZHLDqSBMdXJlYXUgPG1hcmNhbmRyZS5sdXJlYXVAcmVkaGF0LmNvbT4KLU1lc3NhZ2UtaWQ6IDU4MTg4Y2FlLjRhNmVjMjBhLjNkMmQxLmFmZjJAbXguZ29vZ2xlLmNvbQotCi1bU29uYTogYmFja3BvcnRlZCBmcm9tIG1hc3RlciB0byB2Mi44LjAgYW5kIHJlc29sdmVkIGNvbmZsaWN0XQotCi1SZWZlcmVuY2UgdG8gdXBzdHJlYW0gcGF0Y2g6Ci1odHRwOi8vZ2l0LnFlbXUtcHJvamVjdC5vcmcvP3A9cWVtdS5naXQ7YT1jb21taXQ7aD04NWQ5ZDA0NDQ3MWY5M2M0OGM1YzM5NmY3ZTIxN2I0ZWYxMmY2OWY4Ci0KLUNWRTogQ1ZFLTIwMTYtOTkwOAotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi1TaWduZWQtb2ZmLWJ5OiBHZXJkIEhvZmZtYW5uIDxrcmF4ZWxAcmVkaGF0LmNvbT4KLVNpZ25lZC1vZmYtYnk6IFNvbmEgU2FybWFkaSA8c29uYS5zYXJtYWRpQGVuZWEuY29tPgotLS0tCi0gaHcvZGlzcGxheS92aXJ0aW8tZ3B1LTNkLmMgfCAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9ody9kaXNwbGF5L3ZpcnRpby1ncHUtM2QuYyBiL2h3L2Rpc3BsYXkvdmlydGlvLWdwdS0zZC5jCi1pbmRleCAyM2YzOWRlLi5kOThiMTQwIDEwMDY0NAotLS0tIGEvaHcvZGlzcGxheS92aXJ0aW8tZ3B1LTNkLmMKLSsrKyBiL2h3L2Rpc3BsYXkvdmlydGlvLWdwdS0zZC5jCi1AQCAtMzcxLDcgKzM3MSw3IEBAIHN0YXRpYyB2b2lkIHZpcmdsX2NtZF9nZXRfY2Fwc2V0KFZpcnRJT0dQVSAqZywKLSAKLSAgICAgdmlyZ2xfcmVuZGVyZXJfZ2V0X2NhcF9zZXQoZ2MuY2Fwc2V0X2lkLCAmbWF4X3ZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1heF9zaXplKTsKLS0gICAgcmVzcCA9IGdfbWFsbG9jKHNpemVvZigqcmVzcCkgKyBtYXhfc2l6ZSk7Ci0rICAgIHJlc3AgPSBnX21hbGxvYzAoc2l6ZW9mKCpyZXNwKSArIG1heF9zaXplKTsKLSAKLSAgICAgcmVzcC0+aGRyLnR5cGUgPSBWSVJUSU9fR1BVX1JFU1BfT0tfQ0FQU0VUOwotICAgICB2aXJnbF9yZW5kZXJlcl9maWxsX2NhcHMoZ2MuY2Fwc2V0X2lkLAotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9DVkUtMjAxNi05OTEyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvQ1ZFLTIwMTYtOTkxMi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAwOWZmZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9DVkUtMjAxNi05OTEyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotRnJvbSBiOGUyMzkyNmM1NjhmMmU5NjNhZjM5MDI4YjcxYzQ3MmUzMDIzNzkzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTGkgUWlhbmcgPGxpcTNlYUBnbWFpbC5jb20+Ci1EYXRlOiBNb24sIDI4IE5vdiAyMDE2IDIxOjI5OjI1IC0wNTAwCi1TdWJqZWN0OiBbUEFUQ0hdIHZpcnRpby1ncHU6IGNhbGwgY2xlYW51cCBtYXBwaW5nIGZ1bmN0aW9uIGluIHJlc291cmNlIGRlc3Ryb3kKLQotSWYgdGhlIGd1ZXN0IGRlc3Ryb3kgdGhlIHJlc291cmNlIGJlZm9yZSBkZXRhY2ggYmFua2luZywgdGhlICdpb3YnCi1hbmQgJ2FkZHJzJyBmaWVsZCBpbiByZXNvdXJjZSBpcyBub3QgZnJlZWQgdGh1cyBsZWFkaW5nIG1lbW9yeQotbGVhayBpc3N1ZS4gVGhpcyBwYXRjaCBhdm9pZCB0aGlzLgotCi1DVkU6IENWRS0yMDE2LTk5MTIKLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotU2lnbmVkLW9mZi1ieTogTGkgUWlhbmcgPGxpcTNlYUBnbWFpbC5jb20+Ci1SZXZpZXdlZC1ieTogTWFyYy1BbmRyw6kgTHVyZWF1IDxtYXJjYW5kcmUubHVyZWF1QHJlZGhhdC5jb20+Ci1NZXNzYWdlLWlkOiAxNDgwMzg2NTY1LTEwMDc3LTEtZ2l0LXNlbmQtZW1haWwtbGlxM2VhQGdtYWlsLmNvbQotU2lnbmVkLW9mZi1ieTogR2VyZCBIb2ZmbWFubiA8a3JheGVsQHJlZGhhdC5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBTb25hIFNhcm1hZGkgPHNvbmEuc2FybWFkaUBlbmVhLmNvbT4KLS0tLQotIGh3L2Rpc3BsYXkvdmlydGlvLWdwdS5jIHwgMyArKysKLSAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9ody9kaXNwbGF5L3ZpcnRpby1ncHUuYyBiL2h3L2Rpc3BsYXkvdmlydGlvLWdwdS5jCi1pbmRleCBlZDJiNmQzLi42YTI2MjU4IDEwMDY0NAotLS0tIGEvaHcvZGlzcGxheS92aXJ0aW8tZ3B1LmMKLSsrKyBiL2h3L2Rpc3BsYXkvdmlydGlvLWdwdS5jCi1AQCAtMjgsNiArMjgsOCBAQAotIHN0YXRpYyBzdHJ1Y3QgdmlydGlvX2dwdV9zaW1wbGVfcmVzb3VyY2UqCi0gdmlydGlvX2dwdV9maW5kX3Jlc291cmNlKFZpcnRJT0dQVSAqZywgdWludDMyX3QgcmVzb3VyY2VfaWQpOwotIAotK3N0YXRpYyB2b2lkIHZpcnRpb19ncHVfY2xlYW51cF9tYXBwaW5nKHN0cnVjdCB2aXJ0aW9fZ3B1X3NpbXBsZV9yZXNvdXJjZSAqcmVzKTsKLSsKLSAjaWZkZWYgQ09ORklHX1ZJUkdMCi0gI2luY2x1ZGUgPHZpcmdscmVuZGVyZXIuaD4KLSAjZGVmaW5lIFZJUkdMKF9nLCBfdmlyZ2wsIF9zaW1wbGUsIC4uLikgICAgICAgICAgICAgICAgICAgICBcCi1AQCAtMzY0LDYgKzM2Niw3IEBAIHN0YXRpYyB2b2lkIHZpcnRpb19ncHVfcmVzb3VyY2VfZGVzdHJveShWaXJ0SU9HUFUgKmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aXJ0aW9fZ3B1X3NpbXBsZV9yZXNvdXJjZSAqcmVzKQotIHsKLSAgICAgcGl4bWFuX2ltYWdlX3VucmVmKHJlcy0+aW1hZ2UpOwotKyAgICB2aXJ0aW9fZ3B1X2NsZWFudXBfbWFwcGluZyhyZXMpOwotICAgICBRVEFJTFFfUkVNT1ZFKCZnLT5yZXNsaXN0LCByZXMsIG5leHQpOwotICAgICBnLT5ob3N0bWVtIC09IHJlcy0+aG9zdG1lbTsKLSAgICAgZ19mcmVlKHJlcyk7Ci0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L0NWRS0yMDE3LTEzNjcyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvQ1ZFLTIwMTctMTM2NzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UwYjFlZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L0NWRS0yMDE3LTEzNjcyLnBhdGNoCkBAIC0wLDAgKzEsNTA0IEBACitGcm9tIDNkOTBjNjI1NDg2MzY5M2E2YjEzZDkxOGQyYjg2ODJlMDhiYmM2ODEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBHZXJkIEhvZmZtYW5uIDxrcmF4ZWxAcmVkaGF0LmNvbT4KK0RhdGU6IE1vbiwgMjggQXVnIDIwMTcgMTQ6Mjk6MDYgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gdmdhOiBzdG9wIHBhc3NpbmcgcG9pbnRlcnMgdG8gdmdhX2RyYXdfbGluZSogZnVuY3Rpb25zCisKK0luc3RlYWQgcGFzcyBhcm91bmQgdGhlIGFkZHJlc3MgKGFrYSBvZmZzZXQgaW50byB2Z2EgbWVtb3J5KS4KK0FkZCB2Z2FfcmVhZF8qIGhlbHBlciBmdW5jdGlvbnMgd2hpY2ggYXBwbHkgdmJlX3NpemVfbWFzayB0bwordGhlIGFkZHJlc3MsIHRvIG1ha2Ugc3VyZSB0aGUgYWRkcmVzcyBzdGF5cyB3aXRoaW4gdGhlIHZhbGlkCityYW5nZSwgc2ltaWxhciB0byB0aGUgY2lycnVzIGJsaXR0ZXIgZml4ZXMgKGNvbW1pdHMgZmZhZjg1Nzc3OAorYW5kIDAyNmFlZmZjYjQpLgorCitJbXBhY3Q6ICBEb1MgZm9yIHByaXZpbGVnZWQgZ3Vlc3QgdXNlcnMuICBxZW11IGNyYXNoZXMgd2l0aAorYSBzZWdmYXVsdCwgd2hlbiBoaXR0aW5nIHRoZSBndWFyZCBwYWdlIGFmdGVyIHZnYSBtZW1vcnkKK2FsbG9jYXRpb24sIHdoaWxlIHJlYWRpbmcgdmdhIG1lbW9yeSBmb3IgZGlzcGxheSB1cGRhdGVzLgorCitGaXhlczogQ1ZFLTIwMTctMTM2NzIKK0NjOiBQIEogUCA8cHBhbmRpdEByZWRoYXQuY29tPgorUmVwb3J0ZWQtYnk6IERhdmlkIEJ1Y2hhbmFuIDxkQHZpZGJ1Y2hhbmFuLmNvLnVrPgorU2lnbmVkLW9mZi1ieTogR2VyZCBIb2ZmbWFubiA8a3JheGVsQHJlZGhhdC5jb20+CitNZXNzYWdlLWlkOiAyMDE3MDgyODEyMjkwNi4xODk5My0xLWtyYXhlbEByZWRoYXQuY29tCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1todHRwczovL2dpdC5xZW11Lm9yZy8/cD1xZW11LmdpdDthPWNvbW1pdDtoPTNkOTBjNjI1NDg2MzY5M2E2YjEzZDkxOGQyYjg2ODJlMDhiYmM2ODFdCisKK0NWRTogQ1ZFLTIwMTctMTM2NzIKKworU2lnbmVkLW9mZi1ieTogWWkgWmhhbyA8eWkuemhhb0B3aW5kcml2ZXIuY29tPgorLS0tCisgaHcvZGlzcGxheS92Z2EtaGVscGVycy5oIHwgMjAyICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgaHcvZGlzcGxheS92Z2EuYyAgICAgICAgIHwgICA1ICstCisgaHcvZGlzcGxheS92Z2FfaW50LmggICAgIHwgICAxICsKKyAzIGZpbGVzIGNoYW5nZWQsIDExNCBpbnNlcnRpb25zKCspLCA5NCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2h3L2Rpc3BsYXkvdmdhLWhlbHBlcnMuaCBiL2h3L2Rpc3BsYXkvdmdhLWhlbHBlcnMuaAoraW5kZXggOTRmNmRlMi4uNWE3NTJiMyAxMDA2NDQKKy0tLSBhL2h3L2Rpc3BsYXkvdmdhLWhlbHBlcnMuaAorKysrIGIvaHcvZGlzcGxheS92Z2EtaGVscGVycy5oCitAQCAtOTUsMjAgKzk1LDQ2IEBAIHN0YXRpYyB2b2lkIHZnYV9kcmF3X2dseXBoOSh1aW50OF90ICpkLCBpbnQgbGluZXNpemUsCisgICAgIH0gd2hpbGUgKC0taCk7CisgfQorIAorK3N0YXRpYyBpbmxpbmUgdWludDhfdCB2Z2FfcmVhZF9ieXRlKFZHQUNvbW1vblN0YXRlICp2Z2EsIHVpbnQzMl90IGFkZHIpCisreworKyAgICByZXR1cm4gdmdhLT52cmFtX3B0clthZGRyICYgdmdhLT52YmVfc2l6ZV9tYXNrXTsKKyt9CisrCisrc3RhdGljIGlubGluZSB1aW50MTZfdCB2Z2FfcmVhZF93b3JkX2xlKFZHQUNvbW1vblN0YXRlICp2Z2EsIHVpbnQzMl90IGFkZHIpCisreworKyAgICB1aW50MzJfdCBvZmZzZXQgPSBhZGRyICYgdmdhLT52YmVfc2l6ZV9tYXNrICYgfjE7CisrICAgIHVpbnQxNl90ICpwdHIgPSAodWludDE2X3QgKikodmdhLT52cmFtX3B0ciArIG9mZnNldCk7CisrICAgIHJldHVybiBsZHV3X2xlX3AocHRyKTsKKyt9CisrCisrc3RhdGljIGlubGluZSB1aW50MTZfdCB2Z2FfcmVhZF93b3JkX2JlKFZHQUNvbW1vblN0YXRlICp2Z2EsIHVpbnQzMl90IGFkZHIpCisreworKyAgICB1aW50MzJfdCBvZmZzZXQgPSBhZGRyICYgdmdhLT52YmVfc2l6ZV9tYXNrICYgfjE7CisrICAgIHVpbnQxNl90ICpwdHIgPSAodWludDE2X3QgKikodmdhLT52cmFtX3B0ciArIG9mZnNldCk7CisrICAgIHJldHVybiBsZHV3X2JlX3AocHRyKTsKKyt9CisrCisrc3RhdGljIGlubGluZSB1aW50MzJfdCB2Z2FfcmVhZF9kd29yZF9sZShWR0FDb21tb25TdGF0ZSAqdmdhLCB1aW50MzJfdCBhZGRyKQorK3sKKysgICAgdWludDMyX3Qgb2Zmc2V0ID0gYWRkciAmIHZnYS0+dmJlX3NpemVfbWFzayAmIH4zOworKyAgICB1aW50MzJfdCAqcHRyID0gKHVpbnQzMl90ICopKHZnYS0+dnJhbV9wdHIgKyBvZmZzZXQpOworKyAgICByZXR1cm4gbGRsX2xlX3AocHRyKTsKKyt9CisrCisgLyoKKyAgKiA0IGNvbG9yIG1vZGUKKyAgKi8KKy1zdGF0aWMgdm9pZCB2Z2FfZHJhd19saW5lMihWR0FDb21tb25TdGF0ZSAqczEsIHVpbnQ4X3QgKmQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcywgaW50IHdpZHRoKQorK3N0YXRpYyB2b2lkIHZnYV9kcmF3X2xpbmUyKFZHQUNvbW1vblN0YXRlICp2Z2EsIHVpbnQ4X3QgKmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWRkciwgaW50IHdpZHRoKQorIHsKKyAgICAgdWludDMyX3QgcGxhbmVfbWFzaywgKnBhbGV0dGUsIGRhdGEsIHY7CisgICAgIGludCB4OworIAorLSAgICBwYWxldHRlID0gczEtPmxhc3RfcGFsZXR0ZTsKKy0gICAgcGxhbmVfbWFzayA9IG1hc2sxNltzMS0+YXJbVkdBX0FUQ19QTEFORV9FTkFCTEVdICYgMHhmXTsKKysgICAgcGFsZXR0ZSA9IHZnYS0+bGFzdF9wYWxldHRlOworKyAgICBwbGFuZV9tYXNrID0gbWFzazE2W3ZnYS0+YXJbVkdBX0FUQ19QTEFORV9FTkFCTEVdICYgMHhmXTsKKyAgICAgd2lkdGggPj49IDM7CisgICAgIGZvcih4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKy0gICAgICAgIGRhdGEgPSAoKHVpbnQzMl90ICopcylbMF07CisrICAgICAgICBkYXRhID0gdmdhX3JlYWRfZHdvcmRfbGUodmdhLCBhZGRyKTsKKyAgICAgICAgIGRhdGEgJj0gcGxhbmVfbWFzazsKKyAgICAgICAgIHYgPSBleHBhbmQyW0dFVF9QTEFORShkYXRhLCAwKV07CisgICAgICAgICB2IHw9IGV4cGFuZDJbR0VUX1BMQU5FKGRhdGEsIDIpXSA8PCAyOworQEAgLTEyNCw3ICsxNTAsNyBAQCBzdGF0aWMgdm9pZCB2Z2FfZHJhd19saW5lMihWR0FDb21tb25TdGF0ZSAqczEsIHVpbnQ4X3QgKmQsCisgICAgICAgICAoKHVpbnQzMl90ICopZClbNl0gPSBwYWxldHRlWyh2ID4+IDQpICYgMHhmXTsKKyAgICAgICAgICgodWludDMyX3QgKilkKVs3XSA9IHBhbGV0dGVbKHYgPj4gMCkgJiAweGZdOworICAgICAgICAgZCArPSAzMjsKKy0gICAgICAgIHMgKz0gNDsKKysgICAgICAgIGFkZHIgKz0gNDsKKyAgICAgfQorIH0KKyAKK0BAIC0xMzQsMTcgKzE2MCwxNyBAQCBzdGF0aWMgdm9pZCB2Z2FfZHJhd19saW5lMihWR0FDb21tb25TdGF0ZSAqczEsIHVpbnQ4X3QgKmQsCisgLyoKKyAgKiA0IGNvbG9yIG1vZGUsIGR1cDIgaG9yaXpvbnRhbAorICAqLworLXN0YXRpYyB2b2lkIHZnYV9kcmF3X2xpbmUyZDIoVkdBQ29tbW9uU3RhdGUgKnMxLCB1aW50OF90ICpkLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcywgaW50IHdpZHRoKQorK3N0YXRpYyB2b2lkIHZnYV9kcmF3X2xpbmUyZDIoVkdBQ29tbW9uU3RhdGUgKnZnYSwgdWludDhfdCAqZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFkZHIsIGludCB3aWR0aCkKKyB7CisgICAgIHVpbnQzMl90IHBsYW5lX21hc2ssICpwYWxldHRlLCBkYXRhLCB2OworICAgICBpbnQgeDsKKyAKKy0gICAgcGFsZXR0ZSA9IHMxLT5sYXN0X3BhbGV0dGU7CistICAgIHBsYW5lX21hc2sgPSBtYXNrMTZbczEtPmFyW1ZHQV9BVENfUExBTkVfRU5BQkxFXSAmIDB4Zl07CisrICAgIHBhbGV0dGUgPSB2Z2EtPmxhc3RfcGFsZXR0ZTsKKysgICAgcGxhbmVfbWFzayA9IG1hc2sxNlt2Z2EtPmFyW1ZHQV9BVENfUExBTkVfRU5BQkxFXSAmIDB4Zl07CisgICAgIHdpZHRoID4+PSAzOworICAgICBmb3IoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CistICAgICAgICBkYXRhID0gKCh1aW50MzJfdCAqKXMpWzBdOworKyAgICAgICAgZGF0YSA9IHZnYV9yZWFkX2R3b3JkX2xlKHZnYSwgYWRkcik7CisgICAgICAgICBkYXRhICY9IHBsYW5lX21hc2s7CisgICAgICAgICB2ID0gZXhwYW5kMltHRVRfUExBTkUoZGF0YSwgMCldOworICAgICAgICAgdiB8PSBleHBhbmQyW0dFVF9QTEFORShkYXRhLCAyKV0gPDwgMjsKK0BAIC0xNjAsMjQgKzE4NiwyNCBAQCBzdGF0aWMgdm9pZCB2Z2FfZHJhd19saW5lMmQyKFZHQUNvbW1vblN0YXRlICpzMSwgdWludDhfdCAqZCwKKyAgICAgICAgIFBVVF9QSVhFTDIoZCwgNiwgcGFsZXR0ZVsodiA+PiA0KSAmIDB4Zl0pOworICAgICAgICAgUFVUX1BJWEVMMihkLCA3LCBwYWxldHRlWyh2ID4+IDApICYgMHhmXSk7CisgICAgICAgICBkICs9IDY0OworLSAgICAgICAgcyArPSA0OworKyAgICAgICAgYWRkciArPSA0OworICAgICB9CisgfQorIAorIC8qCisgICogMTYgY29sb3IgbW9kZQorICAqLworLXN0YXRpYyB2b2lkIHZnYV9kcmF3X2xpbmU0KFZHQUNvbW1vblN0YXRlICpzMSwgdWludDhfdCAqZCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpzLCBpbnQgd2lkdGgpCisrc3RhdGljIHZvaWQgdmdhX2RyYXdfbGluZTQoVkdBQ29tbW9uU3RhdGUgKnZnYSwgdWludDhfdCAqZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhZGRyLCBpbnQgd2lkdGgpCisgeworICAgICB1aW50MzJfdCBwbGFuZV9tYXNrLCBkYXRhLCB2LCAqcGFsZXR0ZTsKKyAgICAgaW50IHg7CisgCistICAgIHBhbGV0dGUgPSBzMS0+bGFzdF9wYWxldHRlOworLSAgICBwbGFuZV9tYXNrID0gbWFzazE2W3MxLT5hcltWR0FfQVRDX1BMQU5FX0VOQUJMRV0gJiAweGZdOworKyAgICBwYWxldHRlID0gdmdhLT5sYXN0X3BhbGV0dGU7CisrICAgIHBsYW5lX21hc2sgPSBtYXNrMTZbdmdhLT5hcltWR0FfQVRDX1BMQU5FX0VOQUJMRV0gJiAweGZdOworICAgICB3aWR0aCA+Pj0gMzsKKyAgICAgZm9yKHggPSAwOyB4IDwgd2lkdGg7IHgrKykgeworLSAgICAgICAgZGF0YSA9ICgodWludDMyX3QgKilzKVswXTsKKysgICAgICAgIGRhdGEgPSB2Z2FfcmVhZF9kd29yZF9sZSh2Z2EsIGFkZHIpOworICAgICAgICAgZGF0YSAmPSBwbGFuZV9tYXNrOworICAgICAgICAgdiA9IGV4cGFuZDRbR0VUX1BMQU5FKGRhdGEsIDApXTsKKyAgICAgICAgIHYgfD0gZXhwYW5kNFtHRVRfUExBTkUoZGF0YSwgMSldIDw8IDE7CitAQCAtMTkyLDI0ICsyMTgsMjQgQEAgc3RhdGljIHZvaWQgdmdhX2RyYXdfbGluZTQoVkdBQ29tbW9uU3RhdGUgKnMxLCB1aW50OF90ICpkLAorICAgICAgICAgKCh1aW50MzJfdCAqKWQpWzZdID0gcGFsZXR0ZVsodiA+PiA0KSAmIDB4Zl07CisgICAgICAgICAoKHVpbnQzMl90ICopZClbN10gPSBwYWxldHRlWyh2ID4+IDApICYgMHhmXTsKKyAgICAgICAgIGQgKz0gMzI7CistICAgICAgICBzICs9IDQ7CisrICAgICAgICBhZGRyICs9IDQ7CisgICAgIH0KKyB9CisgCisgLyoKKyAgKiAxNiBjb2xvciBtb2RlLCBkdXAyIGhvcml6b250YWwKKyAgKi8KKy1zdGF0aWMgdm9pZCB2Z2FfZHJhd19saW5lNGQyKFZHQUNvbW1vblN0YXRlICpzMSwgdWludDhfdCAqZCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnMsIGludCB3aWR0aCkKKytzdGF0aWMgdm9pZCB2Z2FfZHJhd19saW5lNGQyKFZHQUNvbW1vblN0YXRlICp2Z2EsIHVpbnQ4X3QgKmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhZGRyLCBpbnQgd2lkdGgpCisgeworICAgICB1aW50MzJfdCBwbGFuZV9tYXNrLCBkYXRhLCB2LCAqcGFsZXR0ZTsKKyAgICAgaW50IHg7CisgCistICAgIHBhbGV0dGUgPSBzMS0+bGFzdF9wYWxldHRlOworLSAgICBwbGFuZV9tYXNrID0gbWFzazE2W3MxLT5hcltWR0FfQVRDX1BMQU5FX0VOQUJMRV0gJiAweGZdOworKyAgICBwYWxldHRlID0gdmdhLT5sYXN0X3BhbGV0dGU7CisrICAgIHBsYW5lX21hc2sgPSBtYXNrMTZbdmdhLT5hcltWR0FfQVRDX1BMQU5FX0VOQUJMRV0gJiAweGZdOworICAgICB3aWR0aCA+Pj0gMzsKKyAgICAgZm9yKHggPSAwOyB4IDwgd2lkdGg7IHgrKykgeworLSAgICAgICAgZGF0YSA9ICgodWludDMyX3QgKilzKVswXTsKKysgICAgICAgIGRhdGEgPSB2Z2FfcmVhZF9kd29yZF9sZSh2Z2EsIGFkZHIpOworICAgICAgICAgZGF0YSAmPSBwbGFuZV9tYXNrOworICAgICAgICAgdiA9IGV4cGFuZDRbR0VUX1BMQU5FKGRhdGEsIDApXTsKKyAgICAgICAgIHYgfD0gZXhwYW5kNFtHRVRfUExBTkUoZGF0YSwgMSldIDw8IDE7CitAQCAtMjI0LDcgKzI1MCw3IEBAIHN0YXRpYyB2b2lkIHZnYV9kcmF3X2xpbmU0ZDIoVkdBQ29tbW9uU3RhdGUgKnMxLCB1aW50OF90ICpkLAorICAgICAgICAgUFVUX1BJWEVMMihkLCA2LCBwYWxldHRlWyh2ID4+IDQpICYgMHhmXSk7CisgICAgICAgICBQVVRfUElYRUwyKGQsIDcsIHBhbGV0dGVbKHYgPj4gMCkgJiAweGZdKTsKKyAgICAgICAgIGQgKz0gNjQ7CistICAgICAgICBzICs9IDQ7CisrICAgICAgICBhZGRyICs9IDQ7CisgICAgIH0KKyB9CisgCitAQCAtMjMzLDIxICsyNTksMjEgQEAgc3RhdGljIHZvaWQgdmdhX2RyYXdfbGluZTRkMihWR0FDb21tb25TdGF0ZSAqczEsIHVpbnQ4X3QgKmQsCisgICoKKyAgKiBYWFg6IGFkZCBwbGFuZV9tYXNrIHN1cHBvcnQgKG5ldmVyIHVzZWQgaW4gc3RhbmRhcmQgVkdBIG1vZGVzKQorICAqLworLXN0YXRpYyB2b2lkIHZnYV9kcmF3X2xpbmU4ZDIoVkdBQ29tbW9uU3RhdGUgKnMxLCB1aW50OF90ICpkLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcywgaW50IHdpZHRoKQorK3N0YXRpYyB2b2lkIHZnYV9kcmF3X2xpbmU4ZDIoVkdBQ29tbW9uU3RhdGUgKnZnYSwgdWludDhfdCAqZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFkZHIsIGludCB3aWR0aCkKKyB7CisgICAgIHVpbnQzMl90ICpwYWxldHRlOworICAgICBpbnQgeDsKKyAKKy0gICAgcGFsZXR0ZSA9IHMxLT5sYXN0X3BhbGV0dGU7CisrICAgIHBhbGV0dGUgPSB2Z2EtPmxhc3RfcGFsZXR0ZTsKKyAgICAgd2lkdGggPj49IDM7CisgICAgIGZvcih4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKy0gICAgICAgIFBVVF9QSVhFTDIoZCwgMCwgcGFsZXR0ZVtzWzBdXSk7CistICAgICAgICBQVVRfUElYRUwyKGQsIDEsIHBhbGV0dGVbc1sxXV0pOworLSAgICAgICAgUFVUX1BJWEVMMihkLCAyLCBwYWxldHRlW3NbMl1dKTsKKy0gICAgICAgIFBVVF9QSVhFTDIoZCwgMywgcGFsZXR0ZVtzWzNdXSk7CisrICAgICAgICBQVVRfUElYRUwyKGQsIDAsIHBhbGV0dGVbdmdhX3JlYWRfYnl0ZSh2Z2EsIGFkZHIgKyAwKV0pOworKyAgICAgICAgUFVUX1BJWEVMMihkLCAxLCBwYWxldHRlW3ZnYV9yZWFkX2J5dGUodmdhLCBhZGRyICsgMSldKTsKKysgICAgICAgIFBVVF9QSVhFTDIoZCwgMiwgcGFsZXR0ZVt2Z2FfcmVhZF9ieXRlKHZnYSwgYWRkciArIDIpXSk7CisrICAgICAgICBQVVRfUElYRUwyKGQsIDMsIHBhbGV0dGVbdmdhX3JlYWRfYnl0ZSh2Z2EsIGFkZHIgKyAzKV0pOworICAgICAgICAgZCArPSAzMjsKKy0gICAgICAgIHMgKz0gNDsKKysgICAgICAgIGFkZHIgKz0gNDsKKyAgICAgfQorIH0KKyAKK0BAIC0yNTYsNjMgKzI4Miw2MyBAQCBzdGF0aWMgdm9pZCB2Z2FfZHJhd19saW5lOGQyKFZHQUNvbW1vblN0YXRlICpzMSwgdWludDhfdCAqZCwKKyAgKgorICAqIFhYWDogYWRkIHBsYW5lX21hc2sgc3VwcG9ydCAobmV2ZXIgdXNlZCBpbiBzdGFuZGFyZCBWR0EgbW9kZXMpCisgICovCistc3RhdGljIHZvaWQgdmdhX2RyYXdfbGluZTgoVkdBQ29tbW9uU3RhdGUgKnMxLCB1aW50OF90ICpkLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnMsIGludCB3aWR0aCkKKytzdGF0aWMgdm9pZCB2Z2FfZHJhd19saW5lOChWR0FDb21tb25TdGF0ZSAqdmdhLCB1aW50OF90ICpkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFkZHIsIGludCB3aWR0aCkKKyB7CisgICAgIHVpbnQzMl90ICpwYWxldHRlOworICAgICBpbnQgeDsKKyAKKy0gICAgcGFsZXR0ZSA9IHMxLT5sYXN0X3BhbGV0dGU7CisrICAgIHBhbGV0dGUgPSB2Z2EtPmxhc3RfcGFsZXR0ZTsKKyAgICAgd2lkdGggPj49IDM7CisgICAgIGZvcih4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKy0gICAgICAgICgodWludDMyX3QgKilkKVswXSA9IHBhbGV0dGVbc1swXV07CistICAgICAgICAoKHVpbnQzMl90ICopZClbMV0gPSBwYWxldHRlW3NbMV1dOworLSAgICAgICAgKCh1aW50MzJfdCAqKWQpWzJdID0gcGFsZXR0ZVtzWzJdXTsKKy0gICAgICAgICgodWludDMyX3QgKilkKVszXSA9IHBhbGV0dGVbc1szXV07CistICAgICAgICAoKHVpbnQzMl90ICopZClbNF0gPSBwYWxldHRlW3NbNF1dOworLSAgICAgICAgKCh1aW50MzJfdCAqKWQpWzVdID0gcGFsZXR0ZVtzWzVdXTsKKy0gICAgICAgICgodWludDMyX3QgKilkKVs2XSA9IHBhbGV0dGVbc1s2XV07CistICAgICAgICAoKHVpbnQzMl90ICopZClbN10gPSBwYWxldHRlW3NbN11dOworKyAgICAgICAgKCh1aW50MzJfdCAqKWQpWzBdID0gcGFsZXR0ZVt2Z2FfcmVhZF9ieXRlKHZnYSwgYWRkciArIDApXTsKKysgICAgICAgICgodWludDMyX3QgKilkKVsxXSA9IHBhbGV0dGVbdmdhX3JlYWRfYnl0ZSh2Z2EsIGFkZHIgKyAxKV07CisrICAgICAgICAoKHVpbnQzMl90ICopZClbMl0gPSBwYWxldHRlW3ZnYV9yZWFkX2J5dGUodmdhLCBhZGRyICsgMildOworKyAgICAgICAgKCh1aW50MzJfdCAqKWQpWzNdID0gcGFsZXR0ZVt2Z2FfcmVhZF9ieXRlKHZnYSwgYWRkciArIDMpXTsKKysgICAgICAgICgodWludDMyX3QgKilkKVs0XSA9IHBhbGV0dGVbdmdhX3JlYWRfYnl0ZSh2Z2EsIGFkZHIgKyA0KV07CisrICAgICAgICAoKHVpbnQzMl90ICopZClbNV0gPSBwYWxldHRlW3ZnYV9yZWFkX2J5dGUodmdhLCBhZGRyICsgNSldOworKyAgICAgICAgKCh1aW50MzJfdCAqKWQpWzZdID0gcGFsZXR0ZVt2Z2FfcmVhZF9ieXRlKHZnYSwgYWRkciArIDYpXTsKKysgICAgICAgICgodWludDMyX3QgKilkKVs3XSA9IHBhbGV0dGVbdmdhX3JlYWRfYnl0ZSh2Z2EsIGFkZHIgKyA3KV07CisgICAgICAgICBkICs9IDMyOworLSAgICAgICAgcyArPSA4OworKyAgICAgICAgYWRkciArPSA4OworICAgICB9CisgfQorIAorIC8qCisgICogMTUgYml0IGNvbG9yCisgICovCistc3RhdGljIHZvaWQgdmdhX2RyYXdfbGluZTE1X2xlKFZHQUNvbW1vblN0YXRlICpzMSwgdWludDhfdCAqZCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcywgaW50IHdpZHRoKQorK3N0YXRpYyB2b2lkIHZnYV9kcmF3X2xpbmUxNV9sZShWR0FDb21tb25TdGF0ZSAqdmdhLCB1aW50OF90ICpkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhZGRyLCBpbnQgd2lkdGgpCisgeworICAgICBpbnQgdzsKKyAgICAgdWludDMyX3QgdiwgciwgZywgYjsKKyAKKyAgICAgdyA9IHdpZHRoOworICAgICBkbyB7CistICAgICAgICB2ID0gbGR1d19sZV9wKCh2b2lkICopcyk7CisrICAgICAgICB2ID0gdmdhX3JlYWRfd29yZF9sZSh2Z2EsIGFkZHIpOworICAgICAgICAgciA9ICh2ID4+IDcpICYgMHhmODsKKyAgICAgICAgIGcgPSAodiA+PiAyKSAmIDB4Zjg7CisgICAgICAgICBiID0gKHYgPDwgMykgJiAweGY4OworICAgICAgICAgKCh1aW50MzJfdCAqKWQpWzBdID0gcmdiX3RvX3BpeGVsMzIociwgZywgYik7CistICAgICAgICBzICs9IDI7CisrICAgICAgICBhZGRyICs9IDI7CisgICAgICAgICBkICs9IDQ7CisgICAgIH0gd2hpbGUgKC0tdyAhPSAwKTsKKyB9CisgCistc3RhdGljIHZvaWQgdmdhX2RyYXdfbGluZTE1X2JlKFZHQUNvbW1vblN0YXRlICpzMSwgdWludDhfdCAqZCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcywgaW50IHdpZHRoKQorK3N0YXRpYyB2b2lkIHZnYV9kcmF3X2xpbmUxNV9iZShWR0FDb21tb25TdGF0ZSAqdmdhLCB1aW50OF90ICpkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhZGRyLCBpbnQgd2lkdGgpCisgeworICAgICBpbnQgdzsKKyAgICAgdWludDMyX3QgdiwgciwgZywgYjsKKyAKKyAgICAgdyA9IHdpZHRoOworICAgICBkbyB7CistICAgICAgICB2ID0gbGR1d19iZV9wKCh2b2lkICopcyk7CisrICAgICAgICB2ID0gdmdhX3JlYWRfd29yZF9iZSh2Z2EsIGFkZHIpOworICAgICAgICAgciA9ICh2ID4+IDcpICYgMHhmODsKKyAgICAgICAgIGcgPSAodiA+PiAyKSAmIDB4Zjg7CisgICAgICAgICBiID0gKHYgPDwgMykgJiAweGY4OworICAgICAgICAgKCh1aW50MzJfdCAqKWQpWzBdID0gcmdiX3RvX3BpeGVsMzIociwgZywgYik7CistICAgICAgICBzICs9IDI7CisrICAgICAgICBhZGRyICs9IDI7CisgICAgICAgICBkICs9IDQ7CisgICAgIH0gd2hpbGUgKC0tdyAhPSAwKTsKKyB9CitAQCAtMzIwLDM4ICszNDYsMzggQEAgc3RhdGljIHZvaWQgdmdhX2RyYXdfbGluZTE1X2JlKFZHQUNvbW1vblN0YXRlICpzMSwgdWludDhfdCAqZCwKKyAvKgorICAqIDE2IGJpdCBjb2xvcgorICAqLworLXN0YXRpYyB2b2lkIHZnYV9kcmF3X2xpbmUxNl9sZShWR0FDb21tb25TdGF0ZSAqczEsIHVpbnQ4X3QgKmQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnMsIGludCB3aWR0aCkKKytzdGF0aWMgdm9pZCB2Z2FfZHJhd19saW5lMTZfbGUoVkdBQ29tbW9uU3RhdGUgKnZnYSwgdWludDhfdCAqZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWRkciwgaW50IHdpZHRoKQorIHsKKyAgICAgaW50IHc7CisgICAgIHVpbnQzMl90IHYsIHIsIGcsIGI7CisgCisgICAgIHcgPSB3aWR0aDsKKyAgICAgZG8geworLSAgICAgICAgdiA9IGxkdXdfbGVfcCgodm9pZCAqKXMpOworKyAgICAgICAgdiA9IHZnYV9yZWFkX3dvcmRfbGUodmdhLCBhZGRyKTsKKyAgICAgICAgIHIgPSAodiA+PiA4KSAmIDB4Zjg7CisgICAgICAgICBnID0gKHYgPj4gMykgJiAweGZjOworICAgICAgICAgYiA9ICh2IDw8IDMpICYgMHhmODsKKyAgICAgICAgICgodWludDMyX3QgKilkKVswXSA9IHJnYl90b19waXhlbDMyKHIsIGcsIGIpOworLSAgICAgICAgcyArPSAyOworKyAgICAgICAgYWRkciArPSAyOworICAgICAgICAgZCArPSA0OworICAgICB9IHdoaWxlICgtLXcgIT0gMCk7CisgfQorIAorLXN0YXRpYyB2b2lkIHZnYV9kcmF3X2xpbmUxNl9iZShWR0FDb21tb25TdGF0ZSAqczEsIHVpbnQ4X3QgKmQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnMsIGludCB3aWR0aCkKKytzdGF0aWMgdm9pZCB2Z2FfZHJhd19saW5lMTZfYmUoVkdBQ29tbW9uU3RhdGUgKnZnYSwgdWludDhfdCAqZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWRkciwgaW50IHdpZHRoKQorIHsKKyAgICAgaW50IHc7CisgICAgIHVpbnQzMl90IHYsIHIsIGcsIGI7CisgCisgICAgIHcgPSB3aWR0aDsKKyAgICAgZG8geworLSAgICAgICAgdiA9IGxkdXdfYmVfcCgodm9pZCAqKXMpOworKyAgICAgICAgdiA9IHZnYV9yZWFkX3dvcmRfYmUodmdhLCBhZGRyKTsKKyAgICAgICAgIHIgPSAodiA+PiA4KSAmIDB4Zjg7CisgICAgICAgICBnID0gKHYgPj4gMykgJiAweGZjOworICAgICAgICAgYiA9ICh2IDw8IDMpICYgMHhmODsKKyAgICAgICAgICgodWludDMyX3QgKilkKVswXSA9IHJnYl90b19waXhlbDMyKHIsIGcsIGIpOworLSAgICAgICAgcyArPSAyOworKyAgICAgICAgYWRkciArPSAyOworICAgICAgICAgZCArPSA0OworICAgICB9IHdoaWxlICgtLXcgIT0gMCk7CisgfQorQEAgLTM1OSwzNiArMzg1LDM2IEBAIHN0YXRpYyB2b2lkIHZnYV9kcmF3X2xpbmUxNl9iZShWR0FDb21tb25TdGF0ZSAqczEsIHVpbnQ4X3QgKmQsCisgLyoKKyAgKiAyNCBiaXQgY29sb3IKKyAgKi8KKy1zdGF0aWMgdm9pZCB2Z2FfZHJhd19saW5lMjRfbGUoVkdBQ29tbW9uU3RhdGUgKnMxLCB1aW50OF90ICpkLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpzLCBpbnQgd2lkdGgpCisrc3RhdGljIHZvaWQgdmdhX2RyYXdfbGluZTI0X2xlKFZHQUNvbW1vblN0YXRlICp2Z2EsIHVpbnQ4X3QgKmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFkZHIsIGludCB3aWR0aCkKKyB7CisgICAgIGludCB3OworICAgICB1aW50MzJfdCByLCBnLCBiOworIAorICAgICB3ID0gd2lkdGg7CisgICAgIGRvIHsKKy0gICAgICAgIGIgPSBzWzBdOworLSAgICAgICAgZyA9IHNbMV07CistICAgICAgICByID0gc1syXTsKKysgICAgICAgIGIgPSB2Z2FfcmVhZF9ieXRlKHZnYSwgYWRkciArIDApOworKyAgICAgICAgZyA9IHZnYV9yZWFkX2J5dGUodmdhLCBhZGRyICsgMSk7CisrICAgICAgICByID0gdmdhX3JlYWRfYnl0ZSh2Z2EsIGFkZHIgKyAyKTsKKyAgICAgICAgICgodWludDMyX3QgKilkKVswXSA9IHJnYl90b19waXhlbDMyKHIsIGcsIGIpOworLSAgICAgICAgcyArPSAzOworKyAgICAgICAgYWRkciArPSAzOworICAgICAgICAgZCArPSA0OworICAgICB9IHdoaWxlICgtLXcgIT0gMCk7CisgfQorIAorLXN0YXRpYyB2b2lkIHZnYV9kcmF3X2xpbmUyNF9iZShWR0FDb21tb25TdGF0ZSAqczEsIHVpbnQ4X3QgKmQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnMsIGludCB3aWR0aCkKKytzdGF0aWMgdm9pZCB2Z2FfZHJhd19saW5lMjRfYmUoVkdBQ29tbW9uU3RhdGUgKnZnYSwgdWludDhfdCAqZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWRkciwgaW50IHdpZHRoKQorIHsKKyAgICAgaW50IHc7CisgICAgIHVpbnQzMl90IHIsIGcsIGI7CisgCisgICAgIHcgPSB3aWR0aDsKKyAgICAgZG8geworLSAgICAgICAgciA9IHNbMF07CistICAgICAgICBnID0gc1sxXTsKKy0gICAgICAgIGIgPSBzWzJdOworKyAgICAgICAgciA9IHZnYV9yZWFkX2J5dGUodmdhLCBhZGRyICsgMCk7CisrICAgICAgICBnID0gdmdhX3JlYWRfYnl0ZSh2Z2EsIGFkZHIgKyAxKTsKKysgICAgICAgIGIgPSB2Z2FfcmVhZF9ieXRlKHZnYSwgYWRkciArIDIpOworICAgICAgICAgKCh1aW50MzJfdCAqKWQpWzBdID0gcmdiX3RvX3BpeGVsMzIociwgZywgYik7CistICAgICAgICBzICs9IDM7CisrICAgICAgICBhZGRyICs9IDM7CisgICAgICAgICBkICs9IDQ7CisgICAgIH0gd2hpbGUgKC0tdyAhPSAwKTsKKyB9CitAQCAtMzk2LDQ0ICs0MjIsMzYgQEAgc3RhdGljIHZvaWQgdmdhX2RyYXdfbGluZTI0X2JlKFZHQUNvbW1vblN0YXRlICpzMSwgdWludDhfdCAqZCwKKyAvKgorICAqIDMyIGJpdCBjb2xvcgorICAqLworLXN0YXRpYyB2b2lkIHZnYV9kcmF3X2xpbmUzMl9sZShWR0FDb21tb25TdGF0ZSAqczEsIHVpbnQ4X3QgKmQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnMsIGludCB3aWR0aCkKKytzdGF0aWMgdm9pZCB2Z2FfZHJhd19saW5lMzJfbGUoVkdBQ29tbW9uU3RhdGUgKnZnYSwgdWludDhfdCAqZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWRkciwgaW50IHdpZHRoKQorIHsKKy0jaWZuZGVmIEhPU1RfV09SRFNfQklHRU5ESUFOCistICAgIG1lbWNweShkLCBzLCB3aWR0aCAqIDQpOworLSNlbHNlCisgICAgIGludCB3OworICAgICB1aW50MzJfdCByLCBnLCBiOworIAorICAgICB3ID0gd2lkdGg7CisgICAgIGRvIHsKKy0gICAgICAgIGIgPSBzWzBdOworLSAgICAgICAgZyA9IHNbMV07CistICAgICAgICByID0gc1syXTsKKysgICAgICAgIGIgPSB2Z2FfcmVhZF9ieXRlKHZnYSwgYWRkciArIDApOworKyAgICAgICAgZyA9IHZnYV9yZWFkX2J5dGUodmdhLCBhZGRyICsgMSk7CisrICAgICAgICByID0gdmdhX3JlYWRfYnl0ZSh2Z2EsIGFkZHIgKyAyKTsKKyAgICAgICAgICgodWludDMyX3QgKilkKVswXSA9IHJnYl90b19waXhlbDMyKHIsIGcsIGIpOworLSAgICAgICAgcyArPSA0OworKyAgICAgICAgYWRkciArPSA0OworICAgICAgICAgZCArPSA0OworICAgICB9IHdoaWxlICgtLXcgIT0gMCk7CistI2VuZGlmCisgfQorIAorLXN0YXRpYyB2b2lkIHZnYV9kcmF3X2xpbmUzMl9iZShWR0FDb21tb25TdGF0ZSAqczEsIHVpbnQ4X3QgKmQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnMsIGludCB3aWR0aCkKKytzdGF0aWMgdm9pZCB2Z2FfZHJhd19saW5lMzJfYmUoVkdBQ29tbW9uU3RhdGUgKnZnYSwgdWludDhfdCAqZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWRkciwgaW50IHdpZHRoKQorIHsKKy0jaWZkZWYgSE9TVF9XT1JEU19CSUdFTkRJQU4KKy0gICAgbWVtY3B5KGQsIHMsIHdpZHRoICogNCk7CistI2Vsc2UKKyAgICAgaW50IHc7CisgICAgIHVpbnQzMl90IHIsIGcsIGI7CisgCisgICAgIHcgPSB3aWR0aDsKKyAgICAgZG8geworLSAgICAgICAgciA9IHNbMV07CistICAgICAgICBnID0gc1syXTsKKy0gICAgICAgIGIgPSBzWzNdOworKyAgICAgICAgciA9IHZnYV9yZWFkX2J5dGUodmdhLCBhZGRyICsgMSk7CisrICAgICAgICBnID0gdmdhX3JlYWRfYnl0ZSh2Z2EsIGFkZHIgKyAyKTsKKysgICAgICAgIGIgPSB2Z2FfcmVhZF9ieXRlKHZnYSwgYWRkciArIDMpOworICAgICAgICAgKCh1aW50MzJfdCAqKWQpWzBdID0gcmdiX3RvX3BpeGVsMzIociwgZywgYik7CistICAgICAgICBzICs9IDQ7CisrICAgICAgICBhZGRyICs9IDQ7CisgICAgICAgICBkICs9IDQ7CisgICAgIH0gd2hpbGUgKC0tdyAhPSAwKTsKKy0jZW5kaWYKKyB9CitkaWZmIC0tZ2l0IGEvaHcvZGlzcGxheS92Z2EuYyBiL2h3L2Rpc3BsYXkvdmdhLmMKK2luZGV4IGFkN2E0NjUuLjZmYzhjODcgMTAwNjQ0CistLS0gYS9ody9kaXNwbGF5L3ZnYS5jCisrKysgYi9ody9kaXNwbGF5L3ZnYS5jCitAQCAtMTAwNSw3ICsxMDA1LDcgQEAgdm9pZCB2Z2FfbWVtX3dyaXRlYihWR0FDb21tb25TdGF0ZSAqcywgaHdhZGRyIGFkZHIsIHVpbnQzMl90IHZhbCkKKyB9CisgCisgdHlwZWRlZiB2b2lkIHZnYV9kcmF3X2xpbmVfZnVuYyhWR0FDb21tb25TdGF0ZSAqczEsIHVpbnQ4X3QgKmQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpzLCBpbnQgd2lkdGgpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3JjYWRkciwgaW50IHdpZHRoKTsKKyAKKyAjaW5jbHVkZSAidmdhLWhlbHBlcnMuaCIKKyAKK0BAIC0xNjY2LDcgKzE2NjYsNyBAQCBzdGF0aWMgdm9pZCB2Z2FfZHJhd19ncmFwaGljKFZHQUNvbW1vblN0YXRlICpzLCBpbnQgZnVsbF91cGRhdGUpCisgICAgICAgICAgICAgaWYgKHlfc3RhcnQgPCAwKQorICAgICAgICAgICAgICAgICB5X3N0YXJ0ID0geTsKKyAgICAgICAgICAgICBpZiAoIShpc19idWZmZXJfc2hhcmVkKHN1cmZhY2UpKSkgeworLSAgICAgICAgICAgICAgICB2Z2FfZHJhd19saW5lKHMsIGQsIHMtPnZyYW1fcHRyICsgYWRkciwgd2lkdGgpOworKyAgICAgICAgICAgICAgICB2Z2FfZHJhd19saW5lKHMsIGQsIGFkZHIsIHdpZHRoKTsKKyAgICAgICAgICAgICAgICAgaWYgKHMtPmN1cnNvcl9kcmF3X2xpbmUpCisgICAgICAgICAgICAgICAgICAgICBzLT5jdXJzb3JfZHJhd19saW5lKHMsIGQsIHkpOworICAgICAgICAgICAgIH0KK0BAIC0yMTcwLDYgKzIxNzAsNyBAQCB2b2lkIHZnYV9jb21tb25faW5pdChWR0FDb21tb25TdGF0ZSAqcywgT2JqZWN0ICpvYmosIGJvb2wgZ2xvYmFsX3Ztc3RhdGUpCisgICAgIGlmICghcy0+dmJlX3NpemUpIHsKKyAgICAgICAgIHMtPnZiZV9zaXplID0gcy0+dnJhbV9zaXplOworICAgICB9CisrICAgIHMtPnZiZV9zaXplX21hc2sgPSBzLT52YmVfc2l6ZSAtIDE7CisgCisgICAgIHMtPmlzX3ZiZV92bXN0YXRlID0gMTsKKyAgICAgbWVtb3J5X3JlZ2lvbl9pbml0X3JhbV9ub21pZ3JhdGUoJnMtPnZyYW0sIG9iaiwgInZnYS52cmFtIiwgcy0+dnJhbV9zaXplLAorZGlmZiAtLWdpdCBhL2h3L2Rpc3BsYXkvdmdhX2ludC5oIGIvaHcvZGlzcGxheS92Z2FfaW50LmgKK2luZGV4IGRkNmM5NTguLmFkMzRhMWYgMTAwNjQ0CistLS0gYS9ody9kaXNwbGF5L3ZnYV9pbnQuaAorKysrIGIvaHcvZGlzcGxheS92Z2FfaW50LmgKK0BAIC05NCw2ICs5NCw3IEBAIHR5cGVkZWYgc3RydWN0IFZHQUNvbW1vblN0YXRlIHsKKyAgICAgdWludDMyX3QgdnJhbV9zaXplOworICAgICB1aW50MzJfdCB2cmFtX3NpemVfbWI7IC8qIHByb3BlcnR5ICovCisgICAgIHVpbnQzMl90IHZiZV9zaXplOworKyAgICB1aW50MzJfdCB2YmVfc2l6ZV9tYXNrOworICAgICB1aW50MzJfdCBsYXRjaDsKKyAgICAgYm9vbCBoYXNfY2hhaW40X2FsaWFzOworICAgICBNZW1vcnlSZWdpb24gY2hhaW40X2FsaWFzOworLS0gCisyLjcuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9DVkUtMjAxNy0xMzY3My5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L0NWRS0yMDE3LTEzNjczLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMDY5NWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9DVkUtMjAxNy0xMzY3My5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tIGU2NTI5NDE1N2Q0YjY5MzkzYjNmODE5Yzk5ZjRmNjQ3NDUyYjQ4ZTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBHZXJkIEhvZmZtYW5uIDxrcmF4ZWxAcmVkaGF0LmNvbT4KK0RhdGU6IE1vbiwgMjggQXVnIDIwMTcgMTQ6MzM6MDcgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gdmdhOiBmaXggZGlzcGxheSB1cGRhdGUgcmVnaW9uIGNhbGN1bGF0aW9uIChzcGxpdCBzY3JlZW4pCisKK3ZnYSBkaXNwbGF5IHVwZGF0ZSBtaXMtY2FsY3VsYXRlZCB0aGUgcmVnaW9uIGZvciB0aGUgZGlydHkgYml0bWFwCitzbmFwc2hvdCBpbiBjYXNlIHNwbGl0IHNjcmVlbiBtb2RlIGlzIHVzZWQuICBUaGlzIGNhbiB0cmlnZ2VyIGFuCithc3NlcnQgaW4gY3B1X3BoeXNpY2FsX21lbW9yeV9zbmFwc2hvdF9nZXRfZGlydHkoKS4KKworSW1wYWN0OiAgRG9TIGZvciBwcml2aWxlZ2VkIGd1ZXN0IHVzZXJzLgorCitGaXhlczogQ1ZFLTIwMTctMTM2NzMKK0ZpeGVzOiBmZWM1ZThjOTJiZWNhZDIyM2RmOWQ5NzI3NzA1MjJmNjRhYWZkYjcyCitDYzogUCBKIFAgPHBwYW5kaXRAcmVkaGF0LmNvbT4KK1JlcG9ydGVkLWJ5OiBEYXZpZCBCdWNoYW5hbiA8ZEB2aWRidWNoYW5hbi5jby51az4KK1NpZ25lZC1vZmYtYnk6IEdlcmQgSG9mZm1hbm4gPGtyYXhlbEByZWRoYXQuY29tPgorTWVzc2FnZS1pZDogMjAxNzA4MjgxMjMzMDcuMTUzOTItMS1rcmF4ZWxAcmVkaGF0LmNvbQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitbaHR0cHM6Ly9naXQucWVtdS5vcmcvP3A9cWVtdS5naXQ7YT1jb21taXQ7aD1lNjUyOTQxNTdkNGI2OTM5M2IzZjgxOWM5OWY0ZjY0NzQ1MmI0OGUzXQorCitDVkU6IENWRS0yMDE3LTEzNjczCisKK1NpZ25lZC1vZmYtYnk6IFlpIFpoYW8gPHlpLnpoYW9Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGh3L2Rpc3BsYXkvdmdhLmMgfCAxMCArKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2h3L2Rpc3BsYXkvdmdhLmMgYi9ody9kaXNwbGF5L3ZnYS5jCitpbmRleCAzNDMzMTAyLi5hZDdhNDY1IDEwMDY0NAorLS0tIGEvaHcvZGlzcGxheS92Z2EuYworKysrIGIvaHcvZGlzcGxheS92Z2EuYworQEAgLTE2MjgsOSArMTYyOCwxNSBAQCBzdGF0aWMgdm9pZCB2Z2FfZHJhd19ncmFwaGljKFZHQUNvbW1vblN0YXRlICpzLCBpbnQgZnVsbF91cGRhdGUpCisgICAgIHkxID0gMDsKKyAKKyAgICAgaWYgKCFmdWxsX3VwZGF0ZSkgeworKyAgICAgICAgcmFtX2FkZHJfdCByZWdpb25fc3RhcnQgPSBhZGRyMTsKKysgICAgICAgIHJhbV9hZGRyX3QgcmVnaW9uX2VuZCA9IGFkZHIxICsgbGluZV9vZmZzZXQgKiBoZWlnaHQ7CisgICAgICAgICB2Z2Ffc3luY19kaXJ0eV9iaXRtYXAocyk7CistICAgICAgICBzbmFwID0gbWVtb3J5X3JlZ2lvbl9zbmFwc2hvdF9hbmRfY2xlYXJfZGlydHkoJnMtPnZyYW0sIGFkZHIxLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfb2Zmc2V0ICogaGVpZ2h0LAorKyAgICAgICAgaWYgKHMtPmxpbmVfY29tcGFyZSA8IGhlaWdodCkgeworKyAgICAgICAgICAgIC8qIHNwbGl0IHNjcmVlbiBtb2RlICovCisrICAgICAgICAgICAgcmVnaW9uX3N0YXJ0ID0gMDsKKysgICAgICAgIH0KKysgICAgICAgIHNuYXAgPSBtZW1vcnlfcmVnaW9uX3NuYXBzaG90X2FuZF9jbGVhcl9kaXJ0eSgmcy0+dnJhbSwgcmVnaW9uX3N0YXJ0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbl9lbmQgLSByZWdpb25fc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRElSVFlfTUVNT1JZX1ZHQSk7CisgICAgIH0KKyAKKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvQ1ZFLTIwMTctMTM3MTEucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9DVkUtMjAxNy0xMzcxMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTJmNzNmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvQ1ZFLTIwMTctMTM3MTEucGF0Y2gKQEAgLTAsMCArMSw4NyBAQAorRnJvbSAxMjAxZDMwODUxOWYxZTkxNTg2NmQ3NTgzZDUxMzZkMDNjYzFkMzg0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPgorRGF0ZTogRnJpLCAyNSBBdWcgMjAxNyAwMTozNTo1MyArMDIwMAorU3ViamVjdDogW1BBVENIXSBzbGlycDogZml4IGNsZWFyaW5nIGlmcV9zbyBmcm9tIHBlbmRpbmcgcGFja2V0cworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitUaGUgaWZfZmFzdHEgYW5kIGlmX2JhdGNocSBjb250YWluIG5vdCBvbmx5IHBhY2tldHMsIGJ1dCBxdWV1ZXMgb2YgcGFja2V0cworZm9yIHRoZSBzYW1lIHNvY2tldC4gV2hlbiBzb2ZyZWUgZnJlZXMgYSBzb2NrZXQsIGl0IHRodXMgaGFzIHRvIGNsZWFyIGlmcV9zbworZnJvbSBhbGwgdGhlIHBhY2tldHMgZnJvbSB0aGUgcXVldWVzLCBub3Qgb25seSB0aGUgZmlyc3QuCisKK1NpZ25lZC1vZmYtYnk6IFNhbXVlbCBUaGliYXVsdCA8c2FtdWVsLnRoaWJhdWx0QGVucy1seW9uLm9yZz4KK1Jldmlld2VkLWJ5OiBQaGlsaXBwZSBNYXRoaWV1LURhdWTDqSA8ZjRidWdAYW1zYXQub3JnPgorQ2M6IHFlbXUtc3RhYmxlQG5vbmdudS5vcmcKK1NpZ25lZC1vZmYtYnk6IFBldGVyIE1heWRlbGwgPHBldGVyLm1heWRlbGxAbGluYXJvLm9yZz4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorW2h0dHBzOi8vZ2l0LnFlbXUub3JnLz9wPXFlbXUuZ2l0O2E9Y29tbWl0O2g9MTIwMWQzMDg1MTlmMWU5MTU4NjZkNzU4M2Q1MTM2ZDAzY2MxZDM4NF0KKworQ1ZFOiBDVkUtMjAxNy0xMzcxMQorCitTaWduZWQtb2ZmLWJ5OiBZaSBaaGFvIDx5aS56aGFvQHdpbmRyaXZlci5jb20+CistLS0KKyBzbGlycC9zb2NrZXQuYyB8IDM5ICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspLCAxNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NsaXJwL3NvY2tldC5jIGIvc2xpcnAvc29ja2V0LmMKK2luZGV4IGVjZWMwMjkuLmNiN2I1YjYgMTAwNjQ0CistLS0gYS9zbGlycC9zb2NrZXQuYworKysrIGIvc2xpcnAvc29ja2V0LmMKK0BAIC02MCwyOSArNjAsMzYgQEAgc29jcmVhdGUoU2xpcnAgKnNsaXJwKQorIH0KKyAKKyAvKgorKyAqIFJlbW92ZSByZWZlcmVuY2VzIHRvIHNvIGZyb20gdGhlIGdpdmVuIG1lc3NhZ2UgcXVldWUuCisrICovCisrc3RhdGljIHZvaWQKKytzb3FmcmVlKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3QgcXVlaGVhZCAqcWgpCisreworKyAgICBzdHJ1Y3QgbWJ1ZiAqaWZxOworKworKyAgICBmb3IgKGlmcSA9IChzdHJ1Y3QgbWJ1ZiAqKSBxaC0+cWhfbGluazsKKysgICAgICAgICAgICAgKHN0cnVjdCBxdWVoZWFkICopIGlmcSAhPSBxaDsKKysgICAgICAgICAgICAgaWZxID0gaWZxLT5pZnFfbmV4dCkgeworKyAgICAgICAgaWYgKGlmcS0+aWZxX3NvID09IHNvKSB7CisrICAgICAgICAgICAgc3RydWN0IG1idWYgKmlmbTsKKysgICAgICAgICAgICBpZnEtPmlmcV9zbyA9IE5VTEw7CisrICAgICAgICAgICAgZm9yIChpZm0gPSBpZnEtPmlmc19uZXh0OyBpZm0gIT0gaWZxOyBpZm0gPSBpZm0tPmlmc19uZXh0KSB7CisrICAgICAgICAgICAgICAgIGlmbS0+aWZxX3NvID0gTlVMTDsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0KKyt9CisrCisrLyoKKyAgKiByZW1xdWUgYW5kIGZyZWUgYSBzb2NrZXQsIGNsb2JiZXIgY2FjaGUKKyAgKi8KKyB2b2lkCisgc29mcmVlKHN0cnVjdCBzb2NrZXQgKnNvKQorIHsKKyAgIFNsaXJwICpzbGlycCA9IHNvLT5zbGlycDsKKy0gIHN0cnVjdCBtYnVmICppZm07CisgCistICBmb3IgKGlmbSA9IChzdHJ1Y3QgbWJ1ZiAqKSBzbGlycC0+aWZfZmFzdHEucWhfbGluazsKKy0gICAgICAgKHN0cnVjdCBxdWVoZWFkICopIGlmbSAhPSAmc2xpcnAtPmlmX2Zhc3RxOworLSAgICAgICBpZm0gPSBpZm0tPmlmcV9uZXh0KSB7CistICAgIGlmIChpZm0tPmlmcV9zbyA9PSBzbykgeworLSAgICAgIGlmbS0+aWZxX3NvID0gTlVMTDsKKy0gICAgfQorLSAgfQorLQorLSAgZm9yIChpZm0gPSAoc3RydWN0IG1idWYgKikgc2xpcnAtPmlmX2JhdGNocS5xaF9saW5rOworLSAgICAgICAoc3RydWN0IHF1ZWhlYWQgKikgaWZtICE9ICZzbGlycC0+aWZfYmF0Y2hxOworLSAgICAgICBpZm0gPSBpZm0tPmlmcV9uZXh0KSB7CistICAgIGlmIChpZm0tPmlmcV9zbyA9PSBzbykgeworLSAgICAgIGlmbS0+aWZxX3NvID0gTlVMTDsKKy0gICAgfQorLSAgfQorKyAgc29xZnJlZShzbywgJnNsaXJwLT5pZl9mYXN0cSk7CisrICBzb3FmcmVlKHNvLCAmc2xpcnAtPmlmX2JhdGNocSk7CisgCisgICBpZiAoc28tPnNvX2VtdT09RU1VX1JTSCAmJiBzby0+ZXh0cmEpIHsKKyAJc29mcmVlKHNvLT5leHRyYSk7CistLSAKKzIuNy40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L0NWRS0yMDE3LTE0MTY3LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvQ1ZFLTIwMTctMTQxNjcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY5YWQ4NwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L0NWRS0yMDE3LTE0MTY3LnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK0Zyb20gZWQ0Zjg2ZThiNmVmZjhlNjAwYzY5YWRlZTY4YzdjZDM0ZGQyY2NjYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFByYXNhZCBKIFBhbmRpdCA8cGpwQGZlZG9yYXByb2plY3Qub3JnPgorRGF0ZTogVGh1LCA3IFNlcCAyMDE3IDEyOjAyOjU2ICswNTMwCitTdWJqZWN0OiBbUEFUQ0hdIG11bHRpYm9vdDogdmFsaWRhdGUgbXVsdGlib290IGhlYWRlciBhZGRyZXNzIHZhbHVlcworCitXaGlsZSBsb2FkaW5nIGtlcm5lbCB2aWEgbXVsdGlib290LXYxIGltYWdlLCAoZmxhZ3MgJiAweDAwMDEwMDAwKQoraW5kaWNhdGVzIHRoYXQgbXVsdGlib290IGhlYWRlciBjb250YWlucyB2YWxpZCBhZGRyZXNzZXMgdG8gbG9hZAordGhlIGtlcm5lbCBpbWFnZS4gVGhlc2UgYWRkcmVzc2VzIGFyZSB1c2VkIHRvIGNvbXB1dGUga2VybmVsCitzaXplIGFuZCBrZXJuZWwgdGV4dCBvZmZzZXQgaW4gdGhlIE9TIGltYWdlLiBWYWxpZGF0ZSB0aGVzZQorYWRkcmVzcyB2YWx1ZXMgdG8gYXZvaWQgYW4gT09CIGFjY2VzcyBpc3N1ZS4KKworVGhpcyBpcyBDVkUtMjAxNy0xNDE2Ny4KKworUmVwb3J0ZWQtYnk6IFRob21hcyBHYXJuaWVyIDx0aGdhcm5pZUBnb29nbGUuY29tPgorU2lnbmVkLW9mZi1ieTogUHJhc2FkIEogUGFuZGl0IDxwanBAZmVkb3JhcHJvamVjdC5vcmc+CitNZXNzYWdlLUlkOiA8MjAxNzA5MDcwNjMyNTYuNzQxOC0xLXBwYW5kaXRAcmVkaGF0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IFBhb2xvIEJvbnppbmkgPHBib256aW5pQHJlZGhhdC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1todHRwczovL2dpdC5xZW11Lm9yZy8/cD1xZW11LmdpdDthPWNvbW1pdDtoPWVkNGY4NmU4YjZlZmY4ZTYwMGM2OWFkZWU2OGM3Y2QzNGRkMmNjY2JdCisKK0NWRTogQ1ZFLTIwMTctMTQxNjcKKworU2lnbmVkLW9mZi1ieTogWWkgWmhhbyA8eWkuemhhb0B3aW5kcml2ZXIuY29tPgorLS0tCisgaHcvaTM4Ni9tdWx0aWJvb3QuYyB8IDE5ICsrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvaHcvaTM4Ni9tdWx0aWJvb3QuYyBiL2h3L2kzODYvbXVsdGlib290LmMKK2luZGV4IDYwMDFmNGMuLmM3YjcwYzkgMTAwNjQ0CistLS0gYS9ody9pMzg2L211bHRpYm9vdC5jCisrKysgYi9ody9pMzg2L211bHRpYm9vdC5jCitAQCAtMjIxLDE1ICsyMjEsMzQgQEAgaW50IGxvYWRfbXVsdGlib290KEZXQ2ZnU3RhdGUgKmZ3X2NmZywKKyAgICAgICAgIHVpbnQzMl90IG1oX2hlYWRlcl9hZGRyID0gbGRsX3AoaGVhZGVyK2krMTIpOworICAgICAgICAgdWludDMyX3QgbWhfbG9hZF9lbmRfYWRkciA9IGxkbF9wKGhlYWRlcitpKzIwKTsKKyAgICAgICAgIHVpbnQzMl90IG1oX2Jzc19lbmRfYWRkciA9IGxkbF9wKGhlYWRlcitpKzI0KTsKKysKKyAgICAgICAgIG1oX2xvYWRfYWRkciA9IGxkbF9wKGhlYWRlcitpKzE2KTsKKysgICAgICAgIGlmIChtaF9oZWFkZXJfYWRkciA8IG1oX2xvYWRfYWRkcikgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBtaF9sb2FkX2FkZHIgYWRkcmVzc1xuIik7CisrICAgICAgICAgICAgZXhpdCgxKTsKKysgICAgICAgIH0KKysKKyAgICAgICAgIHVpbnQzMl90IG1iX2tlcm5lbF90ZXh0X29mZnNldCA9IGkgLSAobWhfaGVhZGVyX2FkZHIgLSBtaF9sb2FkX2FkZHIpOworICAgICAgICAgdWludDMyX3QgbWJfbG9hZF9zaXplID0gMDsKKyAgICAgICAgIG1oX2VudHJ5X2FkZHIgPSBsZGxfcChoZWFkZXIraSsyOCk7CisgCisgICAgICAgICBpZiAobWhfbG9hZF9lbmRfYWRkcikgeworKyAgICAgICAgICAgIGlmIChtaF9ic3NfZW5kX2FkZHIgPCBtaF9sb2FkX2FkZHIpIHsKKysgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIG1oX2Jzc19lbmRfYWRkciBhZGRyZXNzXG4iKTsKKysgICAgICAgICAgICAgICAgZXhpdCgxKTsKKysgICAgICAgICAgICB9CisgICAgICAgICAgICAgbWJfa2VybmVsX3NpemUgPSBtaF9ic3NfZW5kX2FkZHIgLSBtaF9sb2FkX2FkZHI7CisrCisrICAgICAgICAgICAgaWYgKG1oX2xvYWRfZW5kX2FkZHIgPCBtaF9sb2FkX2FkZHIpIHsKKysgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIG1oX2xvYWRfZW5kX2FkZHIgYWRkcmVzc1xuIik7CisrICAgICAgICAgICAgICAgIGV4aXQoMSk7CisrICAgICAgICAgICAgfQorICAgICAgICAgICAgIG1iX2xvYWRfc2l6ZSA9IG1oX2xvYWRfZW5kX2FkZHIgLSBtaF9sb2FkX2FkZHI7CisgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIGlmIChrZXJuZWxfZmlsZV9zaXplIDwgbWJfa2VybmVsX3RleHRfb2Zmc2V0KSB7CisrICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBrZXJuZWxfZmlsZV9zaXplXG4iKTsKKysgICAgICAgICAgICAgICAgZXhpdCgxKTsKKysgICAgICAgICAgICB9CisgICAgICAgICAgICAgbWJfa2VybmVsX3NpemUgPSBrZXJuZWxfZmlsZV9zaXplIC0gbWJfa2VybmVsX3RleHRfb2Zmc2V0OworICAgICAgICAgICAgIG1iX2xvYWRfc2l6ZSA9IG1iX2tlcm5lbF9zaXplOworICAgICAgICAgfQorLS0gCisyLjcuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9hZGQtcHRlc3QtaW4tbWFrZWZpbGUtdjEwLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvYWRkLXB0ZXN0LWluLW1ha2VmaWxlLXYxMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTYzOTgyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvYWRkLXB0ZXN0LWluLW1ha2VmaWxlLXYxMC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDQyMDFhNTc5MWZjNDc5OGE0NWE5YjlmODgxNjAyZDdiYWNiNzRlZDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXJvIEJ5c3RyaWNreSA8anVyby5ieXN0cmlja3lAaW50ZWwuY29tPgorRGF0ZTogVGh1LCAzMSBBdWcgMjAxNyAxMTowNjo1NiAtMDcwMAorU3ViamVjdDogQWRkIHN1YnBhY2thZ2UgLXB0ZXN0IHdoaWNoIHJ1bnMgYWxsIHVuaXQgdGVzdCBjYXNlcyBmb3IgcWVtdS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorCitTaWduZWQtb2ZmLWJ5OiBKdXJvIEJ5c3RyaWNreSA8anVyby5ieXN0cmlja3lAaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuaW5jbHVkZSBiL3Rlc3RzL01ha2VmaWxlLmluY2x1ZGUKK2luZGV4IGYwOGI3NDEuLjNkMWIzZTkgMTAwNjQ0CistLS0gYS90ZXN0cy9NYWtlZmlsZS5pbmNsdWRlCisrKysgYi90ZXN0cy9NYWtlZmlsZS5pbmNsdWRlCitAQCAtOTI0LDQgKzkyNCwxMiBAQCBhbGw6ICQoUUVNVV9JT1RFU1RTX0hFTFBFUlMteSkKKyAtaW5jbHVkZSAkKHdpbGRjYXJkIHRlc3RzLyouZCkKKyAtaW5jbHVkZSAkKHdpbGRjYXJkIHRlc3RzL2xpYnFvcy8qLmQpCisgCisrYnVpbGR0ZXN0LVRFU1RTOiAkKGNoZWNrLXVuaXQteSkKKysKKytydW50ZXN0LVRFU1RTOgorKwlmb3IgZiBpbiAkKGNoZWNrLXVuaXQteSk7IGRvIFwKKysJCW5mPSQkKGVjaG8gJCRmIHwgc2VkICdzL3Rlc3RzXC8vXC5cLy9nJyk7IFwKKysJCSQkbmY7IFwKKysJZG9uZQorKworIGVuZGlmCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9hZGQtcHRlc3QtaW4tbWFrZWZpbGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9hZGQtcHRlc3QtaW4tbWFrZWZpbGUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjZTM0NzguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvYWRkLXB0ZXN0LWluLW1ha2VmaWxlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLUFkZCBzdWJwYWNrYWdlIC1wdGVzdCB3aGljaCBydW5zIGFsbCB1bml0IHRlc3QgY2FzZXMgZm9yIHFlbXUuCi0KLVNpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgotLS0tCi0gdGVzdHMvTWFrZWZpbGUuaW5jbHVkZSB8IDggKysrKysrKysKLSAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5pbmNsdWRlIGIvdGVzdHMvTWFrZWZpbGUuaW5jbHVkZQotaW5kZXggMTRiZTQ5MS4uMGZjZTM3YSAxMDA2NDQKLS0tLSBhL3Rlc3RzL01ha2VmaWxlLmluY2x1ZGUKLSsrKyBiL3Rlc3RzL01ha2VmaWxlLmluY2x1ZGUKLUBAIC03NzYsMyArNzc2LDExIEBAIGFsbDogJChRRU1VX0lPVEVTVFNfSEVMUEVSUy15KQotIAotIC1pbmNsdWRlICQod2lsZGNhcmQgdGVzdHMvKi5kKQotIC1pbmNsdWRlICQod2lsZGNhcmQgdGVzdHMvbGlicW9zLyouZCkKLSsKLStidWlsZHRlc3QtVEVTVFM6ICQoY2hlY2stdW5pdC15KQotKwotK3J1bnRlc3QtVEVTVFM6Ci0rCWZvciBmIGluICQoY2hlY2stdW5pdC15KTsgZG8gXAotKwkJbmY9JCQoZWNobyAkJGYgfCBzZWQgJ3MvdGVzdHNcLy9cLlwvL2cnKTsgXAotKwkJJCRuZjsgXAotKwlkb25lCi0tLSAKLTIuOS4wCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2FwaWMtZml4dXAtZmFsbHRocm91Z2gtdG8tUElDLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvYXBpYy1maXh1cC1mYWxsdGhyb3VnaC10by1QSUMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmM2ZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2FwaWMtZml4dXAtZmFsbHRocm91Z2gtdG8tUElDLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gYmVmOTNiYjgxNTg4YjUzMjNhNTJkMmUxODg2ZjJhNzdiNjRhOTc2YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcmsgQXNzZWxzdGluZSA8bWFyay5hc3NlbHN0aW5lQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDI2IEZlYiAyMDEzIDExOjQzOjI4IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMDMvMThdIGFwaWM6IGZpeHVwIGZhbGx0aHJvdWdoIHRvIFBJQworCitDb21taXQgMGUyMWUxMmJiMzExYzRjMTA5NWQwMjY5ZGMyZWY4MTE5NmNjYjYwYSBbRG9uJ3Qgcm91dGUgUElDCitpbnRlcnJ1cHRzIHRocm91Z2ggdGhlIGxvY2FsIEFQSUMgaWYgdGhlIGxvY2FsIEFQSUMgY29uZmlnIHNheXMgc28uXQorbWlzc2VkIGEgY2hlY2sgdG8gZW5zdXJlIHRoZSBsb2NhbCBBUElDIGlzIGVuYWJsZWQuIFNpbmNlIGlmIHRoZSBsb2NhbAorQVBJQyBpcyBkaXNhYmxlZCBpdCBkb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBsb2NhbCBBUElDIGNvbmZpZyBzYXlzLgorCitJZiB0aGlzIGNoZWNrIGlzbid0IGRvbmUgYW5kIHRoZSBndWVzdCBoYXMgZGlzYWJsZWQgdGhlIGxvY2FsIEFQSUMgdGhlCitndWVzdCB3aWxsIHJlY2VpdmUgYSBnZW5lcmFsIHByb3RlY3Rpb24gZmF1bHQsIHNpbWlsYXIgdG8gd2hhdCBpcyBzZWVuCitoZXJlOgorCitodHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL3FlbXUtZGV2ZWwvMjAxMi0xMi9tc2cwMjMwNC5odG1sCisKK1RoZSBHUEYgaXMgY2F1c2VkIGJ5IGFuIGF0dGVtcHQgdG8gc2VydmljZSBpbnRlcnJ1cHQgMHhmZmZmZmZmZi4gVGhpcworY29tZXMgYWJvdXQgc2luY2UgY3B1X2dldF9waWNfaW50ZXJydXB0KCkgY2FsbHMgYXBpY19hY2NlcHRfcGljX2ludHIoKQorKHdpdGggdGhlIGxvY2FsIEFQSUMgZGlzYWJsZWQgYXBpY19nZXRfaW50ZXJydXB0KCkgcmV0dXJucyAtMSkuCithcGljX2FjY2VwdF9waWNfaW50cigpIHJldHVybnMgMCBhbmQgdGh1cyB0aGUgaW50ZXJydXB0IG51bWJlciB3aGljaAoraXMgcmV0dXJuZWQgZnJvbSBjcHVfZ2V0X3BpY19pbnRlcnJ1cHQoKSwgYW5kIHdoaWNoIGlzIGF0dGVtcHRlZCB0byBiZQorc2VydmljZWQsIGlzIC0xLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEFzc2Vsc3RpbmUgPG1hcmsuYXNzZWxzdGluZUB3aW5kcml2ZXIuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvcWVtdS1kZXZlbC8yMDEzLTA0L21zZzAwODc4Lmh0bWxdCitTaWduZWQtb2ZmLWJ5OiBIZSBaaGUgPHpoZS5oZUB3aW5kcml2ZXIuY29tPgorLS0tCisgaHcvaW50Yy9hcGljLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9ody9pbnRjL2FwaWMuYyBiL2h3L2ludGMvYXBpYy5jCitpbmRleCA0NTg4N2Q5OS4uYzVhZTQwODcgMTAwNjQ0CistLS0gYS9ody9pbnRjL2FwaWMuYworKysrIGIvaHcvaW50Yy9hcGljLmMKK0BAIC01ODcsNyArNTg3LDcgQEAgaW50IGFwaWNfYWNjZXB0X3BpY19pbnRyKERldmljZVN0YXRlICpkZXYpCisgICAgIEFQSUNDb21tb25TdGF0ZSAqcyA9IEFQSUNfQ09NTU9OKGRldik7CisgICAgIHVpbnQzMl90IGx2dDA7CisgCistICAgIGlmICghcykKKysgICAgaWYgKCFzIHx8ICEocy0+c3B1cmlvdXNfdmVjICYgQVBJQ19TVl9FTkFCTEUpKQorICAgICAgICAgcmV0dXJuIC0xOworIAorICAgICBsdnQwID0gcy0+bHZ0W0FQSUNfTFZUX0xJTlQwXTsKKy0tIAorMi4xMS4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2NvbmZpZ3VyZS1maXgtRGFyd2luLXRhcmdldC1kZXRlY3Rpb24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9jb25maWd1cmUtZml4LURhcndpbi10YXJnZXQtZGV0ZWN0aW9uLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWNkYzFjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2NvbmZpZ3VyZS1maXgtRGFyd2luLXRhcmdldC1kZXRlY3Rpb24ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLVNpZ25lZC1vZmYtYnk6IENyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+Ci0KLUZyb20gOWFjMDk2ZDhlY2NmMmQ1NmVjZTY0NjMyMGMyODJjODM2OWY4MzM3YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IENyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+Ci1EYXRlOiBUdWUsIDI5IEp1bCAyMDE0IDE4OjM1OjU5ICswMzAwCi1TdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZTogZml4IERhcndpbiB0YXJnZXQgZGV0ZWN0aW9uCi0KLWZpeCBEYXJ3aW4gdGFyZ2V0IGRldGVjdGlvbiBmb3IgcWVtdQotY3Jvc3MtY29tcGlsYXRpb24uCi0KLVNpZ25lZC1vZmYtYnk6IENyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+Ci0tLS0KLSBjb25maWd1cmUgfCAyICsrCi0gMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCi1pbmRleCAyODNjNzFjLi4xYzY2YTExIDEwMDc1NQotLS0tIGEvY29uZmlndXJlCi0rKysgYi9jb25maWd1cmUKLUBAIC00NDQsNiArNDQ0LDggQEAgZWxpZiBjaGVja19kZWZpbmUgX19zdW5fXyA7IHRoZW4KLSAgIHRhcmdldG9zPSdTdW5PUycKLSBlbGlmIGNoZWNrX2RlZmluZSBfX0hBSUtVX18gOyB0aGVuCi0gICB0YXJnZXRvcz0nSGFpa3UnCi0rZWxpZiBjaGVja19kZWZpbmUgX19BUFBMRV9fIDsgdGhlbgotKyAgdGFyZ2V0b3M9J0RhcndpbicKLSBlbHNlCi0gICB0YXJnZXRvcz1gdW5hbWUgLXNgCi0gZmkKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcHBjX2xvY2tpbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9wcGNfbG9ja2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjcyMjQzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcHBjX2xvY2tpbmcucGF0Y2gKQEAgLTAsMCArMSwxMDUgQEAKK0kndmUgdHJhY2tlZCBkb3duIHdoYXQgSSB0aGluayBpcyBhIHByb2JsZW0gY2F1c2luZyBxZW11LXN5c3RlbS1wcGMKK3RvIGhhbmcgd2hpbHN0IGJvb3RpbmcgaW1hZ2VzLgorCitJIGJlbGlldmUgdGhlIGRlY3JlbWVudGVyIHRpbWVyIHN0b3BzIHJlY2VpdmluZyBpbnRlcnJ1cHRzIHNvCit0YXNrcyBpbiBvdXIgaW1hZ2VzIGhhbmcgaW5kZWZpbml0ZWx5IGFzIHRoZSB0aW1lciBzdG9wcGVkLiAKKworSXQgY2FuIGJlIHN1bW1lZCB1cCB3aXRoIHRoaXMgbGluZSBvZiBkZWJ1ZzoKKworcHBjX3NldF9pcnE6IDB4NTViNGUwZDU2MmYwIG5fSVJRIDggbGV2ZWwgMSA9PiBwZW5kaW5nIDAwMDAwMTAwcmVxIDAwMDAwMDA0CisKK0l0IHNob3VsZCBub3JtYWxseSByZWFkOgorCitwcGNfc2V0X2lycTogMHg1NWI0ZTBkNTYyZjAgbl9JUlEgOCBsZXZlbCAxID0+IHBlbmRpbmcgMDAwMDAxMDByZXEgMDAwMDAwMDIKKworVGhlIHF1ZXN0aW9uIGlzIHdoeSBDUFVfSU5URVJSVVBUX0VYSVRUQiBlbmRzIHVwIGJlaW5nIHNldCB3aGVuIHRoZQorbGluZXMgYWJvdmUgdGhpcyBsb2cgbWVzc2FnZSBjbGVhcmx5IHNldHMgQ1BVX0lOVEVSUlVQVF9IQVJEICh2aWEgCitjcHVfaW50ZXJydXB0KCkgKS4KKworSSBub3RlIGluIGNwdS5oOgorCisgICAgLyogdXBkYXRlcyBwcm90ZWN0ZWQgYnkgQlFMICovCisgICAgdWludDMyX3QgaW50ZXJydXB0X3JlcXVlc3Q7CisKKyhmb3Igc3RydWN0IENQVVN0YXRlKQorCitUaGUgcHBjIGNvZGUgZG9lcyAiY3MtPmludGVycnVwdF9yZXF1ZXN0IHw9IENQVV9JTlRFUlJVUFRfRVhJVFRCIiBpbiA1CitwbGFjZXMsIDMgaW4gZXhjcF9oZWxwZXIuYyBhbmQgMiBpbiBoZWxwZXJfcmVncy5oLiBJbiBhbGwgY2FzZXMsICAKK2dfYXNzZXJ0KHFlbXVfbXV0ZXhfaW90aHJlYWRfbG9ja2VkKCkpOyBmYWlscy4gSWYgSSBkbyBzb21ldGhpbmcgbGlrZToKKworaWYgKCFxZW11X211dGV4X2lvdGhyZWFkX2xvY2tlZCgpKSB7CisgICAgcWVtdV9tdXRleF9sb2NrX2lvdGhyZWFkKCk7CisgICAgY3B1X2ludGVycnVwdChjcywgQ1BVX0lOVEVSUlVQVF9FWElUVEIpOworICAgIHFlbXVfbXV0ZXhfdW5sb2NrX2lvdGhyZWFkKCk7Cit9IGVsc2UgeworICAgIGNwdV9pbnRlcnJ1cHQoY3MsIENQVV9JTlRFUlJVUFRfRVhJVFRCKTsKK30KKworaW4gdGhlc2UgY2FsbCBzaXRlcyB0aGVuIEkgY2FuIG5vIGxvbmdlciBsb2NrIHFlbXUgdXAgd2l0aCBteSB0ZXN0CitjYXNlLgorCitJIHN1c3BlY3QgdGhlIF9IQVJEIHNldHRpbmcgZ2V0cyBvdmVyd3JpdHRlbiB3aGljaCBzdG9wcyB0aGUgCitkZWNyZW1lbnRlciBpbnRlcnJ1cHRzIGJlaW5nIGRlbGl2ZXJlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW0lzc3VlIGRpc2N1c3NlZCBvbiBxZW11IG1haWxpbmcgbGlzdCAyMDE3LzExLzIwXQorUlAgMjAxNy8xMS8yMAorCitJbmRleDogcWVtdS0yLjEwLjEvdGFyZ2V0L3BwYy9leGNwX2hlbHBlci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcWVtdS0yLjEwLjEub3JpZy90YXJnZXQvcHBjL2V4Y3BfaGVscGVyLmMKKysrKyBxZW11LTIuMTAuMS90YXJnZXQvcHBjL2V4Y3BfaGVscGVyLmMKK0BAIC0yMDcsNyArMjA3LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHBvd2VycGNfZXhjcChQb3dlclBDQworICAgICAgICAgICAgICAgICAgICAgICAgICJFbnRlcmluZyBjaGVja3N0b3Agc3RhdGVcbiIpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBjcy0+aGFsdGVkID0gMTsKKy0gICAgICAgICAgICBjcy0+aW50ZXJydXB0X3JlcXVlc3QgfD0gQ1BVX0lOVEVSUlVQVF9FWElUVEI7CisrICAgICAgICAgICAgcWVtdV9tdXRleF9sb2NrX2lvdGhyZWFkKCk7CisrICAgICAgICAgICAgY3B1X2ludGVycnVwdChjcywgQ1BVX0lOVEVSUlVQVF9FWElUVEIpOworKyAgICAgICAgICAgIHFlbXVfbXV0ZXhfdW5sb2NrX2lvdGhyZWFkKCk7CisgICAgICAgICB9CisgICAgICAgICBpZiAoZW52LT5tc3JfbWFzayAmIE1TUl9IVkIpIHsKKyAgICAgICAgICAgICAvKiBJU0Egc3BlY2lmaWVzIEhWLCBidXQgY2FuIGJlIGRlbGl2ZXJlZCB0byBndWVzdCB3aXRoIEhWIGNsZWFyCitAQCAtOTQwLDcgKzk0Miw5IEBAIHZvaWQgaGVscGVyX3N0b3JlX21zcihDUFVQUENTdGF0ZSAqZW52LAorIAorICAgICBpZiAoZXhjcCAhPSAwKSB7CisgICAgICAgICBDUFVTdGF0ZSAqY3MgPSBDUFUocHBjX2Vudl9nZXRfY3B1KGVudikpOworLSAgICAgICAgY3MtPmludGVycnVwdF9yZXF1ZXN0IHw9IENQVV9JTlRFUlJVUFRfRVhJVFRCOworKyAgICAgICAgcWVtdV9tdXRleF9sb2NrX2lvdGhyZWFkKCk7CisrICAgICAgICBjcHVfaW50ZXJydXB0KGNzLCBDUFVfSU5URVJSVVBUX0VYSVRUQik7CisrICAgICAgICBxZW11X211dGV4X3VubG9ja19pb3RocmVhZCgpOworICAgICAgICAgcmFpc2VfZXhjZXB0aW9uKGVudiwgZXhjcCk7CisgICAgIH0KKyB9CitAQCAtOTk1LDcgKzk5OSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkb19yZmkoQ1BVUFBDU3RhdGUgKmUKKyAgICAgLyogTm8gbmVlZCB0byByYWlzZSBhbiBleGNlcHRpb24gaGVyZSwKKyAgICAgICogYXMgcmZpIGlzIGFsd2F5cyB0aGUgbGFzdCBpbnNuIG9mIGEgVEIKKyAgICAgICovCistICAgIGNzLT5pbnRlcnJ1cHRfcmVxdWVzdCB8PSBDUFVfSU5URVJSVVBUX0VYSVRUQjsKKysgICAgcWVtdV9tdXRleF9sb2NrX2lvdGhyZWFkKCk7CisrICAgIGNwdV9pbnRlcnJ1cHQoY3MsIENQVV9JTlRFUlJVUFRfRVhJVFRCKTsKKysgICAgcWVtdV9tdXRleF91bmxvY2tfaW90aHJlYWQoKTsKKyAKKyAgICAgLyogUmVzZXQgdGhlIHJlc2VydmF0aW9uICovCisgICAgIGVudi0+cmVzZXJ2ZV9hZGRyID0gLTE7CitJbmRleDogcWVtdS0yLjEwLjEvdGFyZ2V0L3BwYy9oZWxwZXJfcmVncy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcWVtdS0yLjEwLjEub3JpZy90YXJnZXQvcHBjL2hlbHBlcl9yZWdzLmgKKysrKyBxZW11LTIuMTAuMS90YXJnZXQvcHBjL2hlbHBlcl9yZWdzLmgKK0BAIC0xMTQsMTEgKzExNCwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBocmVnX3N0b3JlX21zcihDUFVQUENTCisgICAgIH0KKyAgICAgaWYgKCgodmFsdWUgPj4gTVNSX0lSKSAmIDEpICE9IG1zcl9pciB8fAorICAgICAgICAgKCh2YWx1ZSA+PiBNU1JfRFIpICYgMSkgIT0gbXNyX2RyKSB7CistICAgICAgICBjcy0+aW50ZXJydXB0X3JlcXVlc3QgfD0gQ1BVX0lOVEVSUlVQVF9FWElUVEI7CisrICAgICAgICBxZW11X211dGV4X2xvY2tfaW90aHJlYWQoKTsKKysgICAgICAgIGNwdV9pbnRlcnJ1cHQoY3MsIENQVV9JTlRFUlJVUFRfRVhJVFRCKTsKKysgICAgICAgIHFlbXVfbXV0ZXhfdW5sb2NrX2lvdGhyZWFkKCk7CisgICAgIH0KKyAgICAgaWYgKChlbnYtPm1tdV9tb2RlbCAmIFBPV0VSUENfTU1VX0JPT0tFKSAmJgorICAgICAgICAgKCh2YWx1ZSA+PiBNU1JfR1MpICYgMSkgIT0gbXNyX2dzKSB7CistICAgICAgICBjcy0+aW50ZXJydXB0X3JlcXVlc3QgfD0gQ1BVX0lOVEVSUlVQVF9FWElUVEI7CisrICAgICAgICBxZW11X211dGV4X2xvY2tfaW90aHJlYWQoKTsKKysgICAgICAgIGNwdV9pbnRlcnJ1cHQoY3MsIENQVV9JTlRFUlJVUFRfRVhJVFRCKTsKKysgICAgICAgIHFlbXVfbXV0ZXhfdW5sb2NrX2lvdGhyZWFkKCk7CisgICAgIH0KKyAgICAgaWYgKHVubGlrZWx5KChlbnYtPmZsYWdzICYgUE9XRVJQQ19GTEFHX1RHUFIpICYmCisgICAgICAgICAgICAgICAgICAoKHZhbHVlIF4gZW52LT5tc3IpICYgKDEgPDwgTVNSX1RHUFIpKSkpIHsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3FlbXUtMi41LjAtY2ZsYWdzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcWVtdS0yLjUuMC1jZmxhZ3MucGF0Y2gKaW5kZXggMTczMzk0Zi4uZWI5OWQxNCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcWVtdS0yLjUuMC1jZmxhZ3MucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcWVtdS0yLjUuMC1jZmxhZ3MucGF0Y2gKQEAgLTEsMyArMSw1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKwogLS0tIGEvY29uZmlndXJlCiArKysgYi9jb25maWd1cmUKIEBAIC00NDY4LDEwICs0NDY4LDYgQEAgZmkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3RhcmdldC1wcGMtZml4LXVzZXItbW9kZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3RhcmdldC1wcGMtZml4LXVzZXItbW9kZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEyMWU3MS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS90YXJnZXQtcHBjLWZpeC11c2VyLW1vZGUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi1bUWVtdS1wcGNdIFtQQVRDSCAxLzFdIHRhcmdldC1wcGMsIHRjZzogZml4IHVzZXJtb2RlIHNlZ2ZhdWx0IHdpdGggcHRocmVhZAotCi1Gcm9tOiBTYW0gQm9icm9mZgotU3ViamVjdDogW1FlbXUtcHBjXSBbUEFUQ0ggMS8xXSB0YXJnZXQtcHBjLCB0Y2c6IGZpeCB1c2VybW9kZSBzZWdmYXVsdCB3aXRoIHB0aHJlYWRfY3JlYXRlKCkKLURhdGU6IE1vbiwgMzAgSmFuIDIwMTcgMTY6MDg6MDcgKzExMDAKLVByb2dyYW1zIHJ1biB1bmRlciBxZW11LXBwYzY0IG9uIGFuIHg4Nl82NCBob3N0IGN1cnJlbnRseSBzZWdmYXVsdAotaWYgdGhleSB1c2UgcHRocmVhZF9jcmVhdGUoKSBkdWUgdG8gdGhlIGFkanVzdG1lbnQgbWFkZSB0byB0aGUgTklQIGluCi1jb21taXQgYmQ2ZmVmZTcxY2VjNWEwYzdkMmJlNGFjOTYzMDdmMjVkYjU2YWJmOS4KLQotVGhpcyBwYXRjaCBjaGFuZ2VzIGNwdV9sb29wKCkgdG8gc2V0IHRoZSBOSVAgYmFjayB0byB0aGUKLXByZS1pbmNyZW1lbnRlZCB2YWx1ZSBiZWZvcmUgY2FsbGluZyBkb19zeXNjYWxsKCksIHdoaWNoIGNhdXNlcyB0aGUKLWNvcnJlY3QgYWRkcmVzcyB0byBiZSB1c2VkIGZvciB0aGUgbmV3IHRocmVhZCBhbmQgY29ycmVjdHMgdGhlIGZhdWx0LgotCi1TaWduZWQtb2ZmLWJ5OiBTYW0gQm9icm9mZiA8YWRkcmVzc0BoaWRkZW4+Ci0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotLS0tCi0KLWxpbnV4LXVzZXIvbWFpbi5jIHwgNCArKystCi0xIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9saW51eC11c2VyL21haW4uYyBiL2xpbnV4LXVzZXIvbWFpbi5jCi1pbmRleCAzMDA0OTU4MWVmLi5iNWRlZTAxNTQxIDEwMDY0NAotLS0tIGEvbGludXgtdXNlci9tYWluLmMKLSsrKyBiL2xpbnV4LXVzZXIvbWFpbi5jCi1AQCAtMTcxMiwxOCArMTcxMiwyMCBAQCB2b2lkIGNwdV9sb29wKENQVVBQQ1N0YXRlICplbnYpCi0gICAgICAgICAgICAgICogaW4gc3lzY2FsbHMuCi0gICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgZW52LT5jcmZbMF0gJj0gfjB4MTsKLSsgICAgICAgICAgICBlbnYtPm5pcCArPSA0OwotICAgICAgICAgICAgIHJldCA9IGRvX3N5c2NhbGwoZW52LCBlbnYtPmdwclswXSwgZW52LT5ncHJbM10sIGVudi0+Z3ByWzRdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52LT5ncHJbNV0sIGVudi0+Z3ByWzZdLCBlbnYtPmdwcls3XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudi0+Z3ByWzhdLCAwLCAwKTsKLSAgICAgICAgICAgICBpZiAocmV0ID09IC1UQVJHRVRfRVJFU1RBUlRTWVMpIHsKLSsgICAgICAgICAgICAgICAgZW52LT5uaXAgLT0gNDsKLSAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICAgIGlmIChyZXQgPT0gKHRhcmdldF91bG9uZykoLVRBUkdFVF9RRU1VX0VTSUdSRVRVUk4pKSB7Ci0rICAgICAgICAgICAgICAgIGVudi0+bmlwIC09IDQ7Ci0gICAgICAgICAgICAgICAgIC8qIFJldHVybmluZyBmcm9tIGEgc3VjY2Vzc2Z1bCBzaWdyZXR1cm4gc3lzY2FsbC4KLSAgICAgICAgICAgICAgICAgICAgQXZvaWQgY29ycnVwdGluZyByZWdpc3RlciBzdGF0ZS4gICovCi0gICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgIH0KLS0gICAgICAgICAgICBlbnYtPm5pcCArPSA0OwotICAgICAgICAgICAgIGlmIChyZXQgPiAodGFyZ2V0X3Vsb25nKSgtNTE1KSkgewotICAgICAgICAgICAgICAgICBlbnYtPmNyZlswXSB8PSAweDE7Ci0gICAgICAgICAgICAgICAgIHJldCA9IC1yZXQ7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdV8yLjEwLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdV8yLjEwLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTliNDkzOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11XzIuMTAuMC5iYgpAQCAtMCwwICsxLDYzIEBACityZXF1aXJlIHFlbXUuaW5jCisKK2luaGVyaXQgcHRlc3QKKworUkRFUEVORFNfJHtQTn0tcHRlc3QgPSAiYmFzaCBtYWtlIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00NDFjMjhkMmNmODZlMTVhMzdmYTQ3ZTE1YTcyZmJhYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjtlbmRsaW5lPTI0O21kNT1jMDRkZWY3YWUzODg1MGU3ZDNlZjU0ODU4ODE1OTkxMyIKKworU1JDX1VSSSA9ICJodHRwOi8vd2lraS5xZW11LXByb2plY3Qub3JnL2Rvd25sb2FkLyR7QlB9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcG93ZXJwY19yb20uYmluIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtZ3JhYnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZXhjbHVkZS1zb21lLWFybS1FQUJJLW9ic29sZXRlLXN5c2NhbGxzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3dhY29tLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1wdGVzdC1pbi1tYWtlZmlsZS12MTAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL3FlbXUtZW5sYXJnZS1lbnYtZW50cnktc2l6ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9uby12YWxncmluZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wYXRobGltaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcWVtdS0yLjUuMC1jZmxhZ3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ2xpYmMtMi4yNS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVByb3ZpZGUtc3VwcG9ydC1mb3ItdGhlLUNVU0UtVFBNLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItSW50cm9kdWNlLWNvbmRpdGlvbi10by1ub3RpZnktd2FpdGVycy1vZi1jb21wbGV0ZWQtYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLUludHJvZHVjZS1jb25kaXRpb24taW4tVFBNLWJhY2tlbmQtZm9yLW5vdGlmaWNhdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LUFkZC1zdXBwb3J0LWZvci1WTS1zdXNwZW5kLXJlc3VtZS1mb3ItVFBNLVRJUy12Mi45LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FwaWMtZml4dXAtZmFsbHRocm91Z2gtdG8tUElDLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTEzNzExLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTEzNjczLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTEzNjcyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTE0MTY3LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BwY19sb2NraW5nLnBhdGNoIFwKKyAgICAgICAgICAgIgorVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAicWVtdS0oP1A8cHZlcj5cZCtcLi4qKVwudGFyIgorCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgXAorICAgICAgICAgICAgZmlsZTovL2ZpeC1saWJjYXAtaGVhZGVyLWlzc3VlLW9uLXNvbWUtZGlzdHJvLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9jcHVzLmMtcWVtdV9jcHVfa2lja190aHJlYWRfZGVidWdnaW5nLnBhdGNoIFwKKyAgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImNhNzM0NDFkZTczYTliNTJjNmM0OWM5NzE5MGQyMTg1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdlOWYzOWUxMzA2ZTZkY2M1OTU0OTRlOTFjMTQ2NGQ0YjAzZjU1ZGRkMjA1MzE4M2UwZTFiNjlmN2Y3NzZkNDgiCisKK0NPTVBBVElCTEVfSE9TVF9taXBzYXJjaG4zMiA9ICJudWxsIgorQ09NUEFUSUJMRV9IT1NUX21pcHNhcmNobjY0ID0gIm51bGwiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgICMgUHJldmVudCBRQSB3YXJuaW5ncyBhYm91dCBpbnN0YWxsZWQgJHtsb2NhbHN0YXRlZGlyfS9ydW4KKyAgICBpZiBbIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1biBdOyB0aGVuIHJtZGlyICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1bjsgZmkKKyAgICBpbnN0YWxsIC1EbSAwNzU1ICR7V09SS0RJUn0vcG93ZXJwY19yb20uYmluICR7RH0ke2RhdGFkaXJ9L3FlbXUKK30KKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwltYWtlIGJ1aWxkdGVzdC1URVNUUworfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCWNwIC1yTCAke0J9L3Rlc3RzICR7RH0ke1BURVNUX1BBVEh9CisJZmluZCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cyAtdHlwZSBmIC1uYW1lICIqLltTc2hjb2RdIiB8IHhhcmdzIC1pIHJtIC1yZiB7fQorCisJY3AgJHtTfS90ZXN0cy9NYWtlZmlsZS5pbmNsdWRlICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzCit9CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11XzIuOC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXVfMi44LjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhNzAwMDkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXVfMi44LjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi1yZXF1aXJlIHFlbXUuaW5jCi0KLWluaGVyaXQgcHRlc3QKLQotUkRFUEVORFNfJHtQTn0tcHRlc3QgPSAiYmFzaCBtYWtlIgotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00NDFjMjhkMmNmODZlMTVhMzdmYTQ3ZTE1YTcyZmJhYyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjtlbmRsaW5lPTI0O21kNT1jMDRkZWY3YWUzODg1MGU3ZDNlZjU0ODU4ODE1OTkxMyIKLQotU1JDX1VSSSArPSAiIFwKLSAgICAgICAgICAgIGZpbGU6Ly9wb3dlcnBjX3JvbS5iaW4gXAotICAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtZ3JhYnMucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2V4Y2x1ZGUtc29tZS1hcm0tRUFCSS1vYnNvbGV0ZS1zeXNjYWxscy5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vd2Fjb20ucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2FkZC1wdGVzdC1pbi1tYWtlZmlsZS5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKLSAgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUtZml4LURhcndpbi10YXJnZXQtZGV0ZWN0aW9uLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9xZW11LWVubGFyZ2UtZW52LWVudHJ5LXNpemUucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL25vLXZhbGdyaW5kLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9wYXRobGltaXQucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL3FlbXUtMi41LjAtY2ZsYWdzLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly90YXJnZXQtcHBjLWZpeC11c2VyLW1vZGUucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2dsaWJjLTIuMjUucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovLzA0YjMzZTIxODY2NDEyNjg5ZjE4YjdhZDZkYWYwYTU0ZDhmOTU5YTcucGF0Y2ggXAotIgotCi1TUkNfVVJJICs9ICIgXAotICAgICAgICAgICAgZmlsZTovLzAwMDEtUHJvdmlkZS1zdXBwb3J0LWZvci10aGUtQ1VTRS1UUE0ucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovLzAwMDItSW50cm9kdWNlLWNvbmRpdGlvbi10by1ub3RpZnktd2FpdGVycy1vZi1jb21wbGV0ZWQtYy5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vMDAwMy1JbnRyb2R1Y2UtY29uZGl0aW9uLWluLVRQTS1iYWNrZW5kLWZvci1ub3RpZmljYXRpb24ucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovLzAwMDQtQWRkLXN1cHBvcnQtZm9yLVZNLXN1c3BlbmQtcmVzdW1lLWZvci1UUE0tVElTLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi05OTA4LnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi05OTEyLnBhdGNoIFwKLSIKLQotU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBcCi0gICAgICAgICAgICBmaWxlOi8vZml4LWxpYmNhcC1oZWFkZXItaXNzdWUtb24tc29tZS1kaXN0cm8ucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2NwdXMuYy1xZW11X2NwdV9raWNrX3RocmVhZF9kZWJ1Z2dpbmcucGF0Y2ggXAotICAgICAgICAgICAgIgotCi1TUkNfVVJJID0rICJodHRwOi8vd2lraS5xZW11LXByb2plY3Qub3JnL2Rvd25sb2FkLyR7QlB9LnRhci5iejIiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIxNzk0MGRjZTA2M2I2Y2U0NTBhMTJlNzE5YTZjOWM0MyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJkYWZkNWQ3ZjY0OTkwN2I2YjYxN2I4MjI2OTJmNGM4MmU2MGNmMjliYzBmYzU4YmMyMDM2MjE5YjU5MWU1ZTYyIgotCi1DT01QQVRJQkxFX0hPU1RfbWlwc2FyY2huMzIgPSAibnVsbCIKLUNPTVBBVElCTEVfSE9TVF9taXBzYXJjaG42NCA9ICJudWxsIgotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLSAgICAjIFByZXZlbnQgUUEgd2FybmluZ3MgYWJvdXQgaW5zdGFsbGVkICR7bG9jYWxzdGF0ZWRpcn0vcnVuCi0gICAgaWYgWyAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4gXTsgdGhlbiBybWRpciAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW47IGZpCi0gICAgaW5zdGFsbCAtRG0gMDc1NSAke1dPUktESVJ9L3Bvd2VycGNfcm9tLmJpbiAke0R9JHtkYXRhZGlyfS9xZW11Ci19Ci0KLWRvX2NvbXBpbGVfcHRlc3QoKSB7Ci0JbWFrZSBidWlsZHRlc3QtVEVTVFMKLX0KLQotZG9faW5zdGFsbF9wdGVzdCgpIHsKLQljcCAtckwgJHtCfS90ZXN0cyAke0R9JHtQVEVTVF9QQVRIfQotCWZpbmQgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMgLXR5cGUgZiAtbmFtZSAiKi5bU3NoY29kXSIgfCB4YXJncyAtaSBybSAtcmYge30KLQotCWNwICR7U30vdGVzdHMvTWFrZWZpbGUuaW5jbHVkZSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cwotfQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdXdyYXBwZXItY3Jvc3NfMS4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXV3cmFwcGVyLWNyb3NzXzEuMC5iYgppbmRleCBlNDBjZGFmLi5jOTgzZmJhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdXdyYXBwZXItY3Jvc3NfMS4wLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11d3JhcHBlci1jcm9zc18xLjAuYmIKQEAgLTEsNCArMSw1IEBACiBTVU1NQVJZID0gIlFFTVUgd3JhcHBlciBzY3JpcHQiCitIT01FUEFHRSA9ICJodHRwOi8vcWVtdS5vcmciCiBMSUNFTlNFID0gIk1JVCIKIAogUyA9ICIke1dPUktESVJ9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yZW1ha2UvcmVtYWtlLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcmVtYWtlL3JlbWFrZS5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmODg5ZmMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yZW1ha2UvcmVtYWtlLmluYworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLVNVTU1BUlkgPSAiTWFrZWZpbGUgZGVidWdnZXIgd2hpY2ggaXMgZ251bWFrZSBjb21wYXRpYmxlIgotREVTQ1JJUFRJT04gPSAicmVtYWtlIGlzIGEgcGF0Y2hlZCBhbmQgbW9kZXJuaXplZCB2ZXJzaW9uIG9mIEdOVSBtYWtlIFwKLXV0aWxpdHkgdGhhdCBhZGRzIGltcHJvdmVkIGVycm9yIHJlcG9ydGluZywgdGhlIGFiaWxpdHkgdG8gdHJhY2UgXAotZXhlY3V0aW9uIGluIGEgY29tcHJlaGVuc2libGUgd2F5LCBhbmQgYSBkZWJ1Z2dlci4iCi0KLUhPTUVQQUdFID0gImh0dHA6Ly9iYXNoZGIuc291cmNlZm9yZ2UubmV0L3JlbWFrZS8iCi1TRUNUSU9OID0gImRldmVsIgotCi1TUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vcm9ja3kvcmVtYWtlLmdpdCIKLQotaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB1cGRhdGUtYWx0ZXJuYXRpdmVzIHBrZ2NvbmZpZwotCi1BTFRFUk5BVElWRV8ke1BOfSA9ICJtYWtlIgotQUxURVJOQVRJVkVfTElOS19OQU1FW21ha2VdID0gIiR7YmluZGlyfS9tYWtlIgotQUxURVJOQVRJVkVfVEFSR0VUW21ha2VdID0gIiR7YmluZGlyfS9yZW1ha2UiCi1BTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JlbWFrZS9yZW1ha2UvdmVyc2lvbi1yZW1ha2UudGV4aS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcmVtYWtlL3JlbWFrZS92ZXJzaW9uLXJlbWFrZS50ZXhpLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTYzMjllLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcmVtYWtlL3JlbWFrZS92ZXJzaW9uLXJlbWFrZS50ZXhpLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLXZlcnNpb24tcmVtYWtlLnRleGkgaXMgbm90IHRoZXJlIGJ1dCBpdCBpcyByZXF1aXJlZCBieSByZW1ha2UudGV4aSwKLWp1c3QgYWRkIGl0IGZvciBnZXR0aW5nIHRoZSAnbWFrZSByZW1ha2UuaW5mbycgd29ya3MuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1kaWZmIC0tZ2l0IGEvZG9jL3ZlcnNpb24tcmVtYWtlLnRleGkgYi9kb2MvdmVyc2lvbi1yZW1ha2UudGV4aQotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjJhM2I3MmIKLS0tLSAvZGV2L251bGwKLSsrKyBiL2RvYy92ZXJzaW9uLXJlbWFrZS50ZXhpCi1AQCAtMCwwICsxLDQgQEAKLStAc2V0IFVQREFURUQgMTAgSnVuZSAyMDEyCi0rQHNldCBVUERBVEVELU1PTlRIIEp1bmUgMjAxMgotK0BzZXQgRURJVElPTiAzLjgyK2RiZy0wLjlnaXQKLStAc2V0IFZFUlNJT04gMy44MitkYmctMC45Z2l0CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JlbWFrZS9yZW1ha2VfNC4xK2RiZy0xLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JlbWFrZS9yZW1ha2VfNC4xK2RiZy0xLjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYWI3ZTMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yZW1ha2UvcmVtYWtlXzQuMStkYmctMS4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotTElDRU5TRSA9ICJHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dsb2IvQ09QWUlORy5MSUI7bWQ1PTRhNzcwYjY3ZTZiZTBmNjBkYTI0NGJlYjJkZTBmY2U0IgotcmVxdWlyZSByZW1ha2UuaW5jCi0KLVVQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gIig/UDxwdmVyPihcZCsoXC5cZCspKylcK2RiZy4rKSIKLVNSQ19VUkkgKz0gImZpbGU6Ly92ZXJzaW9uLXJlbWFrZS50ZXhpLnBhdGNoIFwKLSAgICAgICAgICAgIgotU1JDUkVWID0gImNmNTQ2NDFkNTBhMDE2NWJiMTc2MjJiM2U5NzcwZjQyNmNjYmM1NjEiCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1ERVBFTkRTICs9ICJyZWFkbGluZSBndWlsZSIKLSMgTmVlZCB0byBhZGQgImdldHRleHQtbmF0aXZlIiBkZXBlbmRlbmN5IHRvIHJlbWFrZS1uYXRpdmUuCi0jIEJ5IGRlZmF1bHQgb25seSAiZ2V0dGV4dC1taW5pbWFsLW5hdGl2ZSIgaXMgYWRkZWQKLSMgd2hlbiBpbmhlcml0IGdldHRleHQuCi1ERVBFTkRTX2NsYXNzLW5hdGl2ZSArPSAiZ2V0dGV4dC1uYXRpdmUiCi1QUk9WSURFUyArPSAidmlydHVhbC9tYWtlIgotCi1kb19jb25maWd1cmVfcHJlcGVuZCgpIHsKLSAgICAjIHJlbW92ZSB0aGUgZGVmYXVsdCBMSU5HVUFTIHNpbmNlIHdlIGFyZSBub3QgZ29pbmcgdG8gZ2VuZXJhdGUgbGFuZ3VhZ2VzCi0gICAgcm0gJHtTfS9wby9MSU5HVUFTCi0gICAgdG91Y2ggJHtTfS9wby9MSU5HVUFTCi0gICAgIyBjcmVhdGUgY29uZmlnLnJwYXRoIHdoaWNoIHJlcXVpcmVkIGJ5IGNvbmZpZ3VyZS5hYwotICAgICggY2QgJHtTfTsgYXV0b3BvaW50IHx8IHRvdWNoIGNvbmZpZy5ycGF0aCApCi19Ci0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vZmlsZXMvMDAwMS1Eby1ub3QtaGFyZGNvZGUtbGliLXJwbS1hcy10aGUtaW5zdGFsbGF0aW9uLXBhdGgtZm9yLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vZmlsZXMvMDAwMS1Eby1ub3QtaGFyZGNvZGUtbGliLXJwbS1hcy10aGUtaW5zdGFsbGF0aW9uLXBhdGgtZm9yLnBhdGNoCmluZGV4IGQ5OWRkZWIuLjFmNjFhY2EgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL2ZpbGVzLzAwMDEtRG8tbm90LWhhcmRjb2RlLWxpYi1ycG0tYXMtdGhlLWluc3RhbGxhdGlvbi1wYXRoLWZvci5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9maWxlcy8wMDAxLURvLW5vdC1oYXJkY29kZS1saWItcnBtLWFzLXRoZS1pbnN0YWxsYXRpb24tcGF0aC1mb3IucGF0Y2gKQEAgLTQsNyArNCw3IEBACiBTdWJqZWN0OiBbUEFUQ0hdIERvIG5vdCBoYXJkY29kZSAibGliL3JwbSIgYXMgdGhlIGluc3RhbGxhdGlvbiBwYXRoIGZvcgogIGRlZmF1bHQgY29uZmlndXJhdGlvbiBhbmQgbWFjcm9zLgogCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lLWNvcmUgc3BlY2lmaWNdCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL3JwbS1zb2Z0d2FyZS1tYW5hZ2VtZW50L3JwbS9wdWxsLzI2M10KIFNpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgogCiAtLS0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL2ZpbGVzLzAwMDEtRml4LWJ1aWxkLXdpdGgtbXVzbC1DLWxpYnJhcnkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9maWxlcy8wMDAxLUZpeC1idWlsZC13aXRoLW11c2wtQy1saWJyYXJ5LnBhdGNoCmluZGV4IDk1YzcwMTMuLmVkZjllYzAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL2ZpbGVzLzAwMDEtRml4LWJ1aWxkLXdpdGgtbXVzbC1DLWxpYnJhcnkucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vZmlsZXMvMDAwMS1GaXgtYnVpbGQtd2l0aC1tdXNsLUMtbGlicmFyeS5wYXRjaApAQCAtMyw3ICszLDcgQEAKIERhdGU6IE1vbiwgMjcgRmViIDIwMTcgMTQ6NDM6MjEgKzAyMDAKIFN1YmplY3Q6IFtQQVRDSF0gRml4IGJ1aWxkIHdpdGggbXVzbCBDIGxpYnJhcnkuCiAKLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtwcm9ibGVtIGFscmVhZHkgc29sdmVkIGluIG1hc3RlciBicmFuY2hdCiBTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KIAogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9maWxlcy8wMDAxLVNwbGl0LWJpbmFyeS1wYWNrYWdlLWJ1aWxkaW5nLWludG8tYS1zZXBhcmF0ZS1mdW5jdGkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9maWxlcy8wMDAxLVNwbGl0LWJpbmFyeS1wYWNrYWdlLWJ1aWxkaW5nLWludG8tYS1zZXBhcmF0ZS1mdW5jdGkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU0NGYwYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL2ZpbGVzLzAwMDEtU3BsaXQtYmluYXJ5LXBhY2thZ2UtYnVpbGRpbmctaW50by1hLXNlcGFyYXRlLWZ1bmN0aS5wYXRjaApAQCAtMCwwICsxLDg0IEBACitGcm9tIDcyMWE2NjBhNTA3ZDZkMDYyZTdhZWNhZmFkODg2YzY0Mzk3MGE1ZDUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMjUgTWF5IDIwMTcgMTg6MTU6MjcgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzRdIFNwbGl0IGJpbmFyeSBwYWNrYWdlIGJ1aWxkaW5nIGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbgorCitTbyB0aGF0IGl0IGNhbiBiZSBydW4gYXMgYSB0aHJlYWQgcG9vbCB0YXNrLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL3JwbS1zb2Z0d2FyZS1tYW5hZ2VtZW50L3JwbS9wdWxsLzIyNl0KK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorCistLS0KKyBidWlsZC9wYWNrLmMgfCAzMyArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjEgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9idWlsZC9wYWNrLmMgYi9idWlsZC9wYWNrLmMKK2luZGV4IDUxOGY0ZTkyYS4uY2NmZDYxNGNjIDEwMDY0NAorLS0tIGEvYnVpbGQvcGFjay5jCisrKysgYi9idWlsZC9wYWNrLmMKK0BAIC01NDYsMTggKzU0NiwxMyBAQCBzdGF0aWMgcnBtUkMgY2hlY2tQYWNrYWdlcyhjaGFyICpwa2djaGVjaykKKyAgICAgcmV0dXJuIFJQTVJDX09LOworIH0KKyAKKy1ycG1SQyBwYWNrYWdlQmluYXJpZXMocnBtU3BlYyBzcGVjLCBjb25zdCBjaGFyICpjb29raWUsIGludCBjaGVhdGluZykKKytzdGF0aWMgcnBtUkMgcGFja2FnZUJpbmFyeShycG1TcGVjIHNwZWMsIFBhY2thZ2UgcGtnLCBjb25zdCBjaGFyICpjb29raWUsIGludCBjaGVhdGluZywgY2hhcioqIGZpbGVuYW1lKQorIHsKKy0gICAgcnBtUkMgcmM7CistICAgIGNvbnN0IGNoYXIgKmVycm9yU3RyaW5nOworLSAgICBQYWNrYWdlIHBrZzsKKy0gICAgY2hhciAqcGtnbGlzdCA9IE5VTEw7CistCistICAgIGZvciAocGtnID0gc3BlYy0+cGFja2FnZXM7IHBrZyAhPSBOVUxMOyBwa2cgPSBwa2ctPm5leHQpIHsKKy0JY2hhciAqZm47CisrCWNvbnN0IGNoYXIgKmVycm9yU3RyaW5nOworKwlycG1SQyByYyA9IFJQTVJDX09LOworIAorIAlpZiAocGtnLT5maWxlTGlzdCA9PSBOVUxMKQorLQkgICAgY29udGludWU7CisrCSAgICByZXR1cm4gcmM7CisgCisgCWlmICgocmMgPSBwcm9jZXNzU2NyaXB0RmlsZXMoc3BlYywgcGtnKSkpCisgCSAgICByZXR1cm4gcmM7CitAQCAtNTg3LDcgKzU4Miw3IEBAIHJwbVJDIHBhY2thZ2VCaW5hcmllcyhycG1TcGVjIHNwZWMsIGNvbnN0IGNoYXIgKmNvb2tpZSwgaW50IGNoZWF0aW5nKQorIAkJICAgICBoZWFkZXJHZXRTdHJpbmcocGtnLT5oZWFkZXIsIFJQTVRBR19OQU1FKSwgZXJyb3JTdHJpbmcpOworIAkJcmV0dXJuIFJQTVJDX0ZBSUw7CisgCSAgICB9CistCSAgICBmbiA9IHJwbUdldFBhdGgoIiV7X3JwbWRpcn0vIiwgYmluUnBtLCBOVUxMKTsKKysJICAgICpmaWxlbmFtZSA9IHJwbUdldFBhdGgoIiV7X3JwbWRpcn0vIiwgYmluUnBtLCBOVUxMKTsKKyAJICAgIGlmICgoYmluRGlyID0gc3RyY2hyKGJpblJwbSwgJy8nKSkgIT0gTlVMTCkgeworIAkJc3RydWN0IHN0YXQgc3Q7CisgCQljaGFyICpkbjsKK0BAIC02MDksMTQgKzYwNCwyOCBAQCBycG1SQyBwYWNrYWdlQmluYXJpZXMocnBtU3BlYyBzcGVjLCBjb25zdCBjaGFyICpjb29raWUsIGludCBjaGVhdGluZykKKyAJICAgIGZyZWUoYmluUnBtKTsKKyAJfQorIAorLQlyYyA9IHdyaXRlUlBNKHBrZywgTlVMTCwgZm4sIE5VTEwpOworKwlyYyA9IHdyaXRlUlBNKHBrZywgTlVMTCwgKmZpbGVuYW1lLCBOVUxMKTsKKyAJaWYgKHJjID09IFJQTVJDX09LKSB7CisgCSAgICAvKiBEbyBjaGVjayBlYWNoIHdyaXR0ZW4gcGFja2FnZSBpZiBlbmFibGVkICovCistCSAgICBjaGFyICpwa2djaGVjayA9IHJwbUV4cGFuZCgiJXs/X2J1aWxkX3BrZ2NoZWNrfSAiLCBmbiwgTlVMTCk7CisrCSAgICBjaGFyICpwa2djaGVjayA9IHJwbUV4cGFuZCgiJXs/X2J1aWxkX3BrZ2NoZWNrfSAiLCAqZmlsZW5hbWUsIE5VTEwpOworIAkgICAgaWYgKHBrZ2NoZWNrWzBdICE9ICcgJykgeworIAkJcmMgPSBjaGVja1BhY2thZ2VzKHBrZ2NoZWNrKTsKKyAJICAgIH0KKyAJICAgIGZyZWUocGtnY2hlY2spOworKwl9CisrCXJldHVybiByYzsKKyt9CisrCisrcnBtUkMgcGFja2FnZUJpbmFyaWVzKHJwbVNwZWMgc3BlYywgY29uc3QgY2hhciAqY29va2llLCBpbnQgY2hlYXRpbmcpCisreworKyAgICBycG1SQyByYzsKKysgICAgUGFja2FnZSBwa2c7CisrICAgIGNoYXIgKnBrZ2xpc3QgPSBOVUxMOworKworKyAgICBmb3IgKHBrZyA9IHNwZWMtPnBhY2thZ2VzOyBwa2cgIT0gTlVMTDsgcGtnID0gcGtnLT5uZXh0KSB7CisrCWNoYXIgKmZuID0gTlVMTDsKKysJcmMgPSBwYWNrYWdlQmluYXJ5KHNwZWMsIHBrZywgY29va2llLCBjaGVhdGluZywgJmZuKTsKKysJaWYgKHJjID09IFJQTVJDX09LKSB7CisgCSAgICByc3RyY2F0KCZwa2dsaXN0LCBmbik7CisgCSAgICByc3RyY2F0KCZwa2dsaXN0LCAiICIpOworIAl9CistLSAKKzIuMTEuMAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9maWxlcy8wMDAyLVJ1bi1iaW5hcnktcGFja2FnZS1jcmVhdGlvbi12aWEtdGhyZWFkLXBvb2xzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vZmlsZXMvMDAwMi1SdW4tYmluYXJ5LXBhY2thZ2UtY3JlYXRpb24tdmlhLXRocmVhZC1wb29scy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTAwNDFjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vZmlsZXMvMDAwMi1SdW4tYmluYXJ5LXBhY2thZ2UtY3JlYXRpb24tdmlhLXRocmVhZC1wb29scy5wYXRjaApAQCAtMCwwICsxLDEyNyBAQAorRnJvbSA1MTMyMDBjZjc2NzU4ZGU0NjY4MzEyYzYyOGQ2MzYyYmRhYmZhZjRiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDI1IE1heSAyMDE3IDE5OjMwOjIwICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMS8zXSBSdW4gYmluYXJ5IHBhY2thZ2UgY3JlYXRpb24gdmlhIHRocmVhZCBwb29scy4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vZ2l0aHViLmNvbS9ycG0tc29mdHdhcmUtbWFuYWdlbWVudC9ycG0vcHVsbC8yMjZdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKworLS0tCisgYnVpbGQvcGFjay5jIHwgODEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCisgY29uZmlndXJlLmFjIHwgIDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA3MCBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2J1aWxkL3BhY2suYyBiL2J1aWxkL3BhY2suYworaW5kZXggY2NmZDYxNGNjLi5lZDViOWFiNGUgMTAwNjQ0CistLS0gYS9idWlsZC9wYWNrLmMKKysrKyBiL2J1aWxkL3BhY2suYworQEAgLTYxNiwyNSArNjE2LDc4IEBAIHN0YXRpYyBycG1SQyBwYWNrYWdlQmluYXJ5KHJwbVNwZWMgc3BlYywgUGFja2FnZSBwa2csIGNvbnN0IGNoYXIgKmNvb2tpZSwgaW50IGNoCisgCXJldHVybiByYzsKKyB9CisgCistcnBtUkMgcGFja2FnZUJpbmFyaWVzKHJwbVNwZWMgc3BlYywgY29uc3QgY2hhciAqY29va2llLCBpbnQgY2hlYXRpbmcpCisrc3RydWN0IGJpbmFyeVBhY2thZ2VUYXNrRGF0YQorIHsKKy0gICAgcnBtUkMgcmM7CisgICAgIFBhY2thZ2UgcGtnOworKyAgICBjaGFyICpmaWxlbmFtZTsKKysgICAgcnBtUkMgcmVzdWx0OworKyAgICBzdHJ1Y3QgYmluYXJ5UGFja2FnZVRhc2tEYXRhICpuZXh0OworK307CisrCisrc3RhdGljIHN0cnVjdCBiaW5hcnlQYWNrYWdlVGFza0RhdGEqIHJ1bkJpbmFyeVBhY2thZ2VUYXNrcyhycG1TcGVjIHNwZWMsIGNvbnN0IGNoYXIgKmNvb2tpZSwgaW50IGNoZWF0aW5nKQorK3sKKysgICAgc3RydWN0IGJpbmFyeVBhY2thZ2VUYXNrRGF0YSAqdGFza3MgPSBOVUxMOworKyAgICBzdHJ1Y3QgYmluYXJ5UGFja2FnZVRhc2tEYXRhICp0YXNrID0gTlVMTDsKKysgICAgc3RydWN0IGJpbmFyeVBhY2thZ2VUYXNrRGF0YSAqcHJldiA9IE5VTEw7CisrCisrICAgIGZvciAoUGFja2FnZSBwa2cgPSBzcGVjLT5wYWNrYWdlczsgcGtnICE9IE5VTEw7IHBrZyA9IHBrZy0+bmV4dCkgeworKyAgICAgICAgdGFzayA9IHJjYWxsb2MoMSwgc2l6ZW9mKCp0YXNrKSk7CisrICAgICAgICB0YXNrLT5wa2cgPSBwa2c7CisrICAgICAgICBpZiAocGtnID09IHNwZWMtPnBhY2thZ2VzKSB7CisrICAgICAgICAgICAgLy8gdGhlIGZpcnN0IHBhY2thZ2UgbmVlZHMgdG8gYmUgcHJvY2Vzc2VkIGFoZWFkIG9mIG90aGVycywgYXMgdGhleSBjb3B5CisrICAgICAgICAgICAgLy8gY2hhbmdlbG9nIGRhdGEgZnJvbSBpdCwgYW5kIHNvIG90aGVyd2lzZSBkYXRhIHJhY2VzIHdvdWxkIGhhcHBlbgorKyAgICAgICAgICAgIHRhc2stPnJlc3VsdCA9IHBhY2thZ2VCaW5hcnkoc3BlYywgcGtnLCBjb29raWUsIGNoZWF0aW5nLCAmKHRhc2stPmZpbGVuYW1lKSk7CisrICAgICAgICAgICAgcnBtbG9nKFJQTUxPR19OT1RJQ0UsIF8oIkZpbmlzaGVkIGJpbmFyeSBwYWNrYWdlIGpvYiwgcmVzdWx0ICVkLCBmaWxlbmFtZSAlc1xuIiksIHRhc2stPnJlc3VsdCwgdGFzay0+ZmlsZW5hbWUpOworKyAgICAgICAgICAgIHRhc2tzID0gdGFzazsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChwcmV2ICE9IE5VTEwpIHsKKysgICAgICAgICAgICBwcmV2LT5uZXh0ID0gdGFzazsKKysgICAgICAgIH0KKysgICAgICAgIHByZXYgPSB0YXNrOworKyAgICB9CisrCisrICAgICNwcmFnbWEgb21wIHBhcmFsbGVsCisrICAgICNwcmFnbWEgb21wIHNpbmdsZQorKyAgICAvLyByZS1kZWNsYXJpbmcgdGFzayB2YXJpYWJsZSBpcyBuZWNlc3NhcnksIG9yIG9sZGVyIGdjYyB2ZXJzaW9ucyB3aWxsIHByb2R1Y2UgY29kZSB0aGF0IHNlZ2ZhdWx0cworKyAgICBmb3IgKHN0cnVjdCBiaW5hcnlQYWNrYWdlVGFza0RhdGEgKnRhc2sgPSB0YXNrczsgdGFzayAhPSBOVUxMOyB0YXNrID0gdGFzay0+bmV4dCkgeworKyAgICAgICAgaWYgKHRhc2sgIT0gdGFza3MpCisrICAgICAgICAjcHJhZ21hIG9tcCB0YXNrCisrICAgICAgICB7CisrICAgICAgICAgICAgdGFzay0+cmVzdWx0ID0gcGFja2FnZUJpbmFyeShzcGVjLCB0YXNrLT5wa2csIGNvb2tpZSwgY2hlYXRpbmcsICYodGFzay0+ZmlsZW5hbWUpKTsKKysgICAgICAgICAgICBycG1sb2coUlBNTE9HX05PVElDRSwgXygiRmluaXNoZWQgYmluYXJ5IHBhY2thZ2Ugam9iLCByZXN1bHQgJWQsIGZpbGVuYW1lICVzXG4iKSwgdGFzay0+cmVzdWx0LCB0YXNrLT5maWxlbmFtZSk7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgcmV0dXJuIHRhc2tzOworK30KKysKKytzdGF0aWMgdm9pZCBmcmVlQmluYXJ5UGFja2FnZVRhc2tzKHN0cnVjdCBiaW5hcnlQYWNrYWdlVGFza0RhdGEqIHRhc2tzKQorK3sKKysgICAgd2hpbGUgKHRhc2tzICE9IE5VTEwpIHsKKysgICAgICAgIHN0cnVjdCBiaW5hcnlQYWNrYWdlVGFza0RhdGEqIG5leHQgPSB0YXNrcy0+bmV4dDsKKysgICAgICAgIHJmcmVlKHRhc2tzLT5maWxlbmFtZSk7CisrICAgICAgICByZnJlZSh0YXNrcyk7CisrICAgICAgICB0YXNrcyA9IG5leHQ7CisrICAgIH0KKyt9CisrCisrcnBtUkMgcGFja2FnZUJpbmFyaWVzKHJwbVNwZWMgc3BlYywgY29uc3QgY2hhciAqY29va2llLCBpbnQgY2hlYXRpbmcpCisreworICAgICBjaGFyICpwa2dsaXN0ID0gTlVMTDsKKyAKKy0gICAgZm9yIChwa2cgPSBzcGVjLT5wYWNrYWdlczsgcGtnICE9IE5VTEw7IHBrZyA9IHBrZy0+bmV4dCkgeworLQljaGFyICpmbiA9IE5VTEw7CistCXJjID0gcGFja2FnZUJpbmFyeShzcGVjLCBwa2csIGNvb2tpZSwgY2hlYXRpbmcsICZmbik7CistCWlmIChyYyA9PSBSUE1SQ19PSykgeworLQkgICAgcnN0cmNhdCgmcGtnbGlzdCwgZm4pOworLQkgICAgcnN0cmNhdCgmcGtnbGlzdCwgIiAiKTsKKy0JfQorLQlmcmVlKGZuKTsKKy0JaWYgKHJjICE9IFJQTVJDX09LKSB7CistCSAgICBwa2dsaXN0ID0gX2ZyZWUocGtnbGlzdCk7CistCSAgICByZXR1cm4gcmM7CistCX0KKysgICAgc3RydWN0IGJpbmFyeVBhY2thZ2VUYXNrRGF0YSAqdGFza3MgPSBydW5CaW5hcnlQYWNrYWdlVGFza3Moc3BlYywgY29va2llLCBjaGVhdGluZyk7CisrCisrICAgIGZvciAoc3RydWN0IGJpbmFyeVBhY2thZ2VUYXNrRGF0YSAqdGFzayA9IHRhc2tzOyB0YXNrICE9IE5VTEw7IHRhc2sgPSB0YXNrLT5uZXh0KSB7CisrICAgICAgICBpZiAodGFzay0+cmVzdWx0ID09IFJQTVJDX09LKSB7CisrICAgICAgICAgICAgcnN0cmNhdCgmcGtnbGlzdCwgdGFzay0+ZmlsZW5hbWUpOworKyAgICAgICAgICAgIHJzdHJjYXQoJnBrZ2xpc3QsICIgIik7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIF9mcmVlKHBrZ2xpc3QpOworKyAgICAgICAgICAgIGZyZWVCaW5hcnlQYWNrYWdlVGFza3ModGFza3MpOworKyAgICAgICAgICAgIHJldHVybiBSUE1SQ19GQUlMOworKyAgICAgICAgfQorICAgICB9CisrICAgIGZyZWVCaW5hcnlQYWNrYWdlVGFza3ModGFza3MpOworIAorICAgICAvKiBOb3cgY2hlY2sgdGhlIHBhY2thZ2Ugc2V0IGlmIGVuYWJsZWQgKi8KKyAgICAgaWYgKHBrZ2xpc3QgIT0gTlVMTCkgeworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYTUwNmVjODE5Li41OWZhMGFjYWYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE3LDYgKzE3LDkgQEAgQUNfRElTQUJMRV9TVEFUSUMKKyAKKyBQS0dfUFJPR19QS0dfQ09ORklHCisgCisrQUNfT1BFTk1QCisrUlBNQ0ZMQUdTPSIkT1BFTk1QX0NGTEFHUyAkUlBNQ0ZMQUdTIgorKworIGRubCBDaGVja3MgZm9yIHByb2dyYW1zLgorIEFDX1BST0dfQ1hYCisgQUNfUFJPR19BV0sKKy0tIAorMi4xMS4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL2ZpbGVzLzAwMDMtcnBtc3RycG9vbC5jLW1ha2Utb3BlcmF0aW9ucy1vdmVyLXN0cmluZy1wb29scy10aHJlYS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL2ZpbGVzLzAwMDMtcnBtc3RycG9vbC5jLW1ha2Utb3BlcmF0aW9ucy1vdmVyLXN0cmluZy1wb29scy10aHJlYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzQ4YWU1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vZmlsZXMvMDAwMy1ycG1zdHJwb29sLmMtbWFrZS1vcGVyYXRpb25zLW92ZXItc3RyaW5nLXBvb2xzLXRocmVhLnBhdGNoCkBAIC0wLDAgKzEsMjA3IEBACitGcm9tIGM4MDg5MmYxN2U0NDMzMTIwNmM4MzE4ZDUzYjYzYmI2YTk5NTU0ZDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMzAgTWF5IDIwMTcgMTM6NTg6MzAgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzRdIHJwbXN0cnBvb2wuYzogbWFrZSBvcGVyYXRpb25zIG92ZXIgc3RyaW5nIHBvb2xzCisgdGhyZWFkLXNhZmUKKworT3RoZXJ3aXNlIG11bHRpdGhyZWFkZWQgcnBtIGJ1aWxkaW5nIGV4cGxvZGVzIGluIHZhcmlvdXMgd2F5cyBkdWUKK3RvIGRhdGEgcmFjZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vcnBtLXNvZnR3YXJlLW1hbmFnZW1lbnQvcnBtL3B1bGwvMjI2XQorU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CisKKy0tLQorIHJwbWlvL3JwbXN0cnBvb2wuYyB8IDU2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0NyBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvcnBtaW8vcnBtc3RycG9vbC5jIGIvcnBtaW8vcnBtc3RycG9vbC5jCitpbmRleCAzMGE1N2ViMTAuLjU4YmE5NWEwMiAxMDA2NDQKKy0tLSBhL3JwbWlvL3JwbXN0cnBvb2wuYworKysrIGIvcnBtaW8vcnBtc3RycG9vbC5jCitAQCAtMTEzLDYgKzExMyw4IEBAIHN0YXRpYyBwb29sSGFzaCBwb29sSGFzaENyZWF0ZShpbnQgbnVtQnVja2V0cykKKyAgICAgcmV0dXJuIGh0OworIH0KKyAKKytzdGF0aWMgY29uc3QgY2hhciAqIHJwbXN0clBvb2xTdHJOb0xvY2socnBtc3RyUG9vbCBwb29sLCBycG1zaWQgc2lkKTsKKysKKyBzdGF0aWMgdm9pZCBwb29sSGFzaFJlc2l6ZShycG1zdHJQb29sIHBvb2wsIGludCBudW1CdWNrZXRzKQorIHsKKyAgICAgcG9vbEhhc2ggaHQgPSBwb29sLT5oYXNoOworQEAgLTEyMCw3ICsxMjIsNyBAQCBzdGF0aWMgdm9pZCBwb29sSGFzaFJlc2l6ZShycG1zdHJQb29sIHBvb2wsIGludCBudW1CdWNrZXRzKQorIAorICAgICBmb3IgKGludCBpPTA7IGk8aHQtPm51bUJ1Y2tldHM7IGkrKykgeworICAgICAgICAgaWYgKCFodC0+YnVja2V0c1tpXS5rZXlpZCkgY29udGludWU7CistICAgICAgICB1bnNpZ25lZCBpbnQga2V5SGFzaCA9IHJzdHJoYXNoKHJwbXN0clBvb2xTdHIocG9vbCwgaHQtPmJ1Y2tldHNbaV0ua2V5aWQpKTsKKysgICAgICAgIHVuc2lnbmVkIGludCBrZXlIYXNoID0gcnN0cmhhc2gocnBtc3RyUG9vbFN0ck5vTG9jayhwb29sLCBodC0+YnVja2V0c1tpXS5rZXlpZCkpOworICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaj0wOztqKyspIHsKKyAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaGFzaCA9IGhhc2hidWNrZXQoa2V5SGFzaCwgaikgJSBudW1CdWNrZXRzOworICAgICAgICAgICAgIGlmICghYnVja2V0c1toYXNoXS5rZXlpZCkgeworQEAgLTE0OSw3ICsxNTEsNyBAQCBzdGF0aWMgdm9pZCBwb29sSGFzaEFkZEhFbnRyeShycG1zdHJQb29sIHBvb2wsIGNvbnN0IGNoYXIgKiBrZXksIHVuc2lnbmVkIGludCBrZQorICAgICAgICAgICAgIGh0LT5idWNrZXRzW2hhc2hdLmtleWlkID0ga2V5aWQ7CisgICAgICAgICAgICAgaHQtPmtleUNvdW50Kys7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAocnBtc3RyUG9vbFN0cihwb29sLCBodC0+YnVja2V0c1toYXNoXS5rZXlpZCksIGtleSkpIHsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChycG1zdHJQb29sU3RyTm9Mb2NrKHBvb2wsIGh0LT5idWNrZXRzW2hhc2hdLmtleWlkKSwga2V5KSkgeworICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgIH0KKyAgICAgfQorQEAgLTE5MSw3ICsxOTMsNyBAQCBzdGF0aWMgdm9pZCBwb29sSGFzaFByaW50U3RhdHMocnBtc3RyUG9vbCBwb29sKQorICAgICBpbnQgbWF4Y29sbGlzaW9ucyA9IDA7CisgCisgICAgIGZvciAoaT0wOyBpPGh0LT5udW1CdWNrZXRzOyBpKyspIHsKKy0gICAgICAgIHVuc2lnbmVkIGludCBrZXlIYXNoID0gcnN0cmhhc2gocnBtc3RyUG9vbFN0cihwb29sLCBodC0+YnVja2V0c1tpXS5rZXlpZCkpOworKyAgICAgICAgdW5zaWduZWQgaW50IGtleUhhc2ggPSByc3RyaGFzaChycG1zdHJQb29sU3RyTm9Mb2NrKHBvb2wsIGh0LT5idWNrZXRzW2ldLmtleWlkKSk7CisgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqPTA7O2orKykgeworICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoYXNoID0gaGFzaGJ1Y2tldChrZXlIYXNoLCBpKSAlIGh0LT5udW1CdWNrZXRzOworICAgICAgICAgICAgIGlmIChoYXNoPT1pKSB7CitAQCAtMjIxLDcgKzIyMyw3IEBAIHN0YXRpYyB2b2lkIHJwbXN0clBvb2xSZWhhc2gocnBtc3RyUG9vbCBwb29sKQorIAorICAgICBwb29sLT5oYXNoID0gcG9vbEhhc2hDcmVhdGUoc2l6ZWhpbnQpOworICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBwb29sLT5vZmZzX3NpemU7IGkrKykKKy0JcG9vbEhhc2hBZGRFbnRyeShwb29sLCBycG1zdHJQb29sU3RyKHBvb2wsIGkpLCBpKTsKKysJcG9vbEhhc2hBZGRFbnRyeShwb29sLCBycG1zdHJQb29sU3RyTm9Mb2NrKHBvb2wsIGkpLCBpKTsKKyB9CisgCisgcnBtc3RyUG9vbCBycG1zdHJQb29sQ3JlYXRlKHZvaWQpCitAQCAtMjQ1LDYgKzI0Nyw4IEBAIHJwbXN0clBvb2wgcnBtc3RyUG9vbENyZWF0ZSh2b2lkKQorIAorIHJwbXN0clBvb2wgcnBtc3RyUG9vbEZyZWUocnBtc3RyUG9vbCBwb29sKQorIHsKKysgICAgI3ByYWdtYSBvbXAgY3JpdGljYWwocnBtc3RycG9vbCkKKysgICAgeworICAgICBpZiAocG9vbCkgeworIAlpZiAocG9vbC0+bnJlZnMgPiAxKSB7CisgCSAgICBwb29sLT5ucmVmcy0tOworQEAgLTI2MCwxOCArMjY0LDI0IEBAIHJwbXN0clBvb2wgcnBtc3RyUG9vbEZyZWUocnBtc3RyUG9vbCBwb29sKQorIAkgICAgZnJlZShwb29sKTsKKyAJfQorICAgICB9CisrICAgIH0KKyAgICAgcmV0dXJuIE5VTEw7CisgfQorIAorIHJwbXN0clBvb2wgcnBtc3RyUG9vbExpbmsocnBtc3RyUG9vbCBwb29sKQorIHsKKysgICAgI3ByYWdtYSBvbXAgY3JpdGljYWwocnBtc3RycG9vbCkKKysgICAgeworICAgICBpZiAocG9vbCkKKyAJcG9vbC0+bnJlZnMrKzsKKysgICAgfQorICAgICByZXR1cm4gcG9vbDsKKyB9CisgCisgdm9pZCBycG1zdHJQb29sRnJlZXplKHJwbXN0clBvb2wgcG9vbCwgaW50IGtlZXBoYXNoKQorIHsKKysgICAgI3ByYWdtYSBvbXAgY3JpdGljYWwocnBtc3RycG9vbCkKKysgICAgeworICAgICBpZiAocG9vbCAmJiAhcG9vbC0+ZnJvemVuKSB7CisgCWlmICgha2VlcGhhc2gpIHsKKyAJICAgIHBvb2wtPmhhc2ggPSBwb29sSGFzaEZyZWUocG9vbC0+aGFzaCk7CitAQCAtMjgxLDE2ICsyOTEsMjAgQEAgdm9pZCBycG1zdHJQb29sRnJlZXplKHJwbXN0clBvb2wgcG9vbCwgaW50IGtlZXBoYXNoKQorIAkJCSAgICAgIHBvb2wtPm9mZnNfYWxsb2NlZCAqIHNpemVvZigqcG9vbC0+b2ZmcykpOworIAlwb29sLT5mcm96ZW4gPSAxOworICAgICB9CisrICAgIH0KKyB9CisgCisgdm9pZCBycG1zdHJQb29sVW5mcmVlemUocnBtc3RyUG9vbCBwb29sKQorIHsKKysgICAgI3ByYWdtYSBvbXAgY3JpdGljYWwocnBtc3RycG9vbCkKKysgICAgeworICAgICBpZiAocG9vbCkgeworIAlpZiAocG9vbC0+aGFzaCA9PSBOVUxMKSB7CisgCSAgICBycG1zdHJQb29sUmVoYXNoKHBvb2wpOworIAl9CisgCXBvb2wtPmZyb3plbiA9IDA7CisgICAgIH0KKysgICAgfQorIH0KKyAKKyBzdGF0aWMgcnBtc2lkIHJwbXN0clBvb2xQdXQocnBtc3RyUG9vbCBwb29sLCBjb25zdCBjaGFyICpzLCBzaXplX3Qgc2xlbiwgdW5zaWduZWQgaW50IGhhc2gpCitAQCAtMzUwLDcgKzM2NCw3IEBAIHN0YXRpYyBycG1zaWQgcnBtc3RyUG9vbEdldChycG1zdHJQb29sIHBvb2wsIGNvbnN0IGNoYXIgKiBrZXksIHNpemVfdCBrZXlsZW4sCisgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICB9CisgCistCXMgPSBycG1zdHJQb29sU3RyKHBvb2wsIGh0LT5idWNrZXRzW2hhc2hdLmtleWlkKTsKKysJcyA9IHJwbXN0clBvb2xTdHJOb0xvY2socG9vbCwgaHQtPmJ1Y2tldHNbaGFzaF0ua2V5aWQpOworIAkvKiBwb29sIHN0cmluZyBjb3VsZCBiZSBsb25nZXIgdGhhbiBrZXlsZW4sIHJlcXVpcmUgZXhhY3QgbWF0Y2hlICovCisgCWlmIChzdHJuY21wKHMsIGtleSwga2V5bGVuKSA9PSAwICYmIHNba2V5bGVuXSA9PSAnXDAnKQorIAkgICAgcmV0dXJuIGh0LT5idWNrZXRzW2hhc2hdLmtleWlkOworQEAgLTM3MywyNyArMzg3LDMxIEBAIHN0YXRpYyBpbmxpbmUgcnBtc2lkIHN0cm4yaWQocnBtc3RyUG9vbCBwb29sLCBjb25zdCBjaGFyICpzLCBzaXplX3Qgc2xlbiwKKyBycG1zaWQgcnBtc3RyUG9vbElkbihycG1zdHJQb29sIHBvb2wsIGNvbnN0IGNoYXIgKnMsIHNpemVfdCBzbGVuLCBpbnQgY3JlYXRlKQorIHsKKyAgICAgcnBtc2lkIHNpZCA9IDA7CistCisrICAgICNwcmFnbWEgb21wIGNyaXRpY2FsKHJwbXN0cnBvb2wpCisrICAgIHsKKyAgICAgaWYgKHMgIT0gTlVMTCkgeworIAl1bnNpZ25lZCBpbnQgaGFzaCA9IHJzdHJuaGFzaChzLCBzbGVuKTsKKyAJc2lkID0gc3RybjJpZChwb29sLCBzLCBzbGVuLCBoYXNoLCBjcmVhdGUpOworICAgICB9CisrICAgIH0KKyAgICAgcmV0dXJuIHNpZDsKKyB9CisgCisgcnBtc2lkIHJwbXN0clBvb2xJZChycG1zdHJQb29sIHBvb2wsIGNvbnN0IGNoYXIgKnMsIGludCBjcmVhdGUpCisgeworICAgICBycG1zaWQgc2lkID0gMDsKKy0KKysgICAgI3ByYWdtYSBvbXAgY3JpdGljYWwocnBtc3RycG9vbCkKKysgICAgeworICAgICBpZiAocyAhPSBOVUxMKSB7CisgCXNpemVfdCBzbGVuOworIAl1bnNpZ25lZCBpbnQgaGFzaCA9IHJzdHJsZW5oYXNoKHMsICZzbGVuKTsKKyAJc2lkID0gc3RybjJpZChwb29sLCBzLCBzbGVuLCBoYXNoLCBjcmVhdGUpOworICAgICB9CisrICAgIH0KKyAgICAgcmV0dXJuIHNpZDsKKyB9CisgCistY29uc3QgY2hhciAqIHJwbXN0clBvb2xTdHIocnBtc3RyUG9vbCBwb29sLCBycG1zaWQgc2lkKQorK3N0YXRpYyBjb25zdCBjaGFyICogcnBtc3RyUG9vbFN0ck5vTG9jayhycG1zdHJQb29sIHBvb2wsIHJwbXNpZCBzaWQpCisgeworICAgICBjb25zdCBjaGFyICpzID0gTlVMTDsKKyAgICAgaWYgKHBvb2wgJiYgc2lkID4gMCAmJiBzaWQgPD0gcG9vbC0+b2Zmc19zaXplKQorQEAgLTQwMSwxMiArNDE5LDI1IEBAIGNvbnN0IGNoYXIgKiBycG1zdHJQb29sU3RyKHJwbXN0clBvb2wgcG9vbCwgcnBtc2lkIHNpZCkKKyAgICAgcmV0dXJuIHM7CisgfQorIAorK2NvbnN0IGNoYXIgKiBycG1zdHJQb29sU3RyKHJwbXN0clBvb2wgcG9vbCwgcnBtc2lkIHNpZCkKKyt7CisrICAgIGNvbnN0IGNoYXIgKnMgPSBOVUxMOworKyAgICAjcHJhZ21hIG9tcCBjcml0aWNhbChycG1zdHJwb29sKQorKyAgICB7CisrICAgIHMgPSBycG1zdHJQb29sU3RyTm9Mb2NrKHBvb2wsIHNpZCk7CisrICAgIH0KKysgICAgcmV0dXJuIHM7CisrfQorKworIHNpemVfdCBycG1zdHJQb29sU3RybGVuKHJwbXN0clBvb2wgcG9vbCwgcnBtc2lkIHNpZCkKKyB7CisgICAgIHNpemVfdCBzbGVuID0gMDsKKysgICAgI3ByYWdtYSBvbXAgY3JpdGljYWwocnBtc3RycG9vbCkKKysgICAgeworICAgICBpZiAocG9vbCAmJiBzaWQgPiAwICYmIHNpZCA8PSBwb29sLT5vZmZzX3NpemUpIHsKKyAJc2xlbiA9IHN0cmxlbihwb29sLT5vZmZzW3NpZF0pOworICAgICB9CisrICAgIH0KKyAgICAgcmV0dXJuIHNsZW47CisgfQorIAorQEAgLTQyMSw1ICs0NTIsMTIgQEAgaW50IHJwbXN0clBvb2xTdHJlcShycG1zdHJQb29sIHBvb2xBLCBycG1zaWQgc2lkQSwKKyAKKyBycG1zaWQgcnBtc3RyUG9vbE51bVN0cihycG1zdHJQb29sIHBvb2wpCisgeworLSAgICByZXR1cm4gKHBvb2wgIT0gTlVMTCkgPyBwb29sLT5vZmZzX3NpemUgOiAwOworKyAgICBycG1zaWQgaWQgPSAwOworKyAgICAjcHJhZ21hIG9tcCBjcml0aWNhbChycG1zdHJwb29sKQorKyAgICB7CisrICAgIGlmIChwb29sKSB7CisrCWlkID0gcG9vbC0+b2Zmc19zaXplOworKyAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIGlkOworIH0KKy0tIAorMi4xMS4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL2ZpbGVzLzAwMDQtYnVpbGQtcGFjay5jLXJlbW92ZS1zdGF0aWMtbG9jYWwtdmFyaWFibGVzLWZyb20tYnVpbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL2ZpbGVzLzAwMDQtYnVpbGQtcGFjay5jLXJlbW92ZS1zdGF0aWMtbG9jYWwtdmFyaWFibGVzLWZyb20tYnVpbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGE1NjUxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vZmlsZXMvMDAwNC1idWlsZC1wYWNrLmMtcmVtb3ZlLXN0YXRpYy1sb2NhbC12YXJpYWJsZXMtZnJvbS1idWlsLnBhdGNoCkBAIC0wLDAgKzEsMzM3IEBACitGcm9tIGVjMzA1Nzk1YTMwMmQyMjYzNDNlNjkwMzFmZjIwMjRkZmNkZTY5YzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgOCBKdW4gMjAxNyAxNzowODowOSArMDMwMAorU3ViamVjdDogW1BBVENIIDMvM10gYnVpbGQvcGFjay5jOiByZW1vdmUgc3RhdGljIGxvY2FsIHZhcmlhYmxlcyBmcm9tCisgYnVpbGRIb3N0KCkgYW5kIGdldEJ1aWxkVGltZSgpCisKK1RoZWlyIHVzZSBpcyBjYXVzaW5nIGRpZmZpY3VsdCB0byBkaWFnbm96ZSBkYXRhIHJhY2VzIHdoZW4gYnVpbGRpbmcgbXVsdGlwbGUKK3BhY2thZ2VzIGluIHBhcmFsbGVsLCBhbmQgaXMgYSBiYWQgaWRlYSBpbiBnZW5lcmFsLCBhcyBpdCBhbHNvIG1ha2VzIGl0IG1vcmUKK2RpZmZpY3VsdCB0byByZWFzb24gYWJvdXQgY29kZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vZ2l0aHViLmNvbS9ycG0tc29mdHdhcmUtbWFuYWdlbWVudC9ycG0vcHVsbC8yMjZdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKworCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKy0tLQorIGJ1aWxkL2J1aWxkLmMgICAgICAgICAgICAgfCA1NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KKyBidWlsZC9wYWNrLmMgICAgICAgICAgICAgIHwgODQgKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBidWlsZC9ycG1idWlsZF9pbnRlcm5hbC5oIHwgIDggKysrLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDc0IGluc2VydGlvbnMoKyksIDcyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYnVpbGQvYnVpbGQuYyBiL2J1aWxkL2J1aWxkLmMKK2luZGV4IDVmOTljOGRiNy4uMDlhMTMxMWM1IDEwMDY0NAorLS0tIGEvYnVpbGQvYnVpbGQuYworKysrIGIvYnVpbGQvYnVpbGQuYworQEAgLTYsNiArNiw4IEBACisgI2luY2x1ZGUgInN5c3RlbS5oIgorIAorICNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxuZXRkYi5oPgorKyNpbmNsdWRlIDx0aW1lLmg+CisgI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisgCisgI2luY2x1ZGUgPHJwbS9ycG1sb2cuaD4KK0BAIC0xNiw2ICsxOCw1MCBAQAorIAorICNpbmNsdWRlICJkZWJ1Zy5oIgorIAorK3N0YXRpYyBycG1fdGltZV90IGdldEJ1aWxkVGltZSh2b2lkKQorK3sKKysgICAgcnBtX3RpbWVfdCBidWlsZFRpbWUgPSAwOworKyAgICBjaGFyICpzcmNkYXRlOworKyAgICB0aW1lX3QgZXBvY2g7CisrICAgIGNoYXIgKmVuZHB0cjsKKysKKysgICAgc3JjZGF0ZSA9IGdldGVudigiU09VUkNFX0RBVEVfRVBPQ0giKTsKKysgICAgaWYgKHNyY2RhdGUpIHsKKysgICAgICAgIGVycm5vID0gMDsKKysgICAgICAgIGVwb2NoID0gc3RydG9sKHNyY2RhdGUsICZlbmRwdHIsIDEwKTsKKysgICAgICAgIGlmIChzcmNkYXRlID09IGVuZHB0ciB8fCAqZW5kcHRyIHx8IGVycm5vICE9IDApCisrICAgICAgICAgICAgcnBtbG9nKFJQTUxPR19FUlIsIF8oInVuYWJsZSB0byBwYXJzZSBTT1VSQ0VfREFURV9FUE9DSFxuIikpOworKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGJ1aWxkVGltZSA9IChpbnQzMl90KSBlcG9jaDsKKysgICAgfSBlbHNlCisrICAgICAgICBidWlsZFRpbWUgPSAoaW50MzJfdCkgdGltZShOVUxMKTsKKysKKysgICAgcmV0dXJuIGJ1aWxkVGltZTsKKyt9CisrCisrc3RhdGljIGNoYXIgKiBidWlsZEhvc3Qodm9pZCkKKyt7CisrICAgIGNoYXIqIGhvc3RuYW1lOworKyAgICBzdHJ1Y3QgaG9zdGVudCAqaGJuOworKyAgICBjaGFyICpiaE1hY3JvOworKworKyAgICBiaE1hY3JvID0gcnBtRXhwYW5kKCIlez9fYnVpbGRob3N0fSIsIE5VTEwpOworKyAgICBpZiAoc3RyY21wKGJoTWFjcm8sICIiKSAhPSAwKSB7CisrICAgICAgICByYXNwcmludGYoJmhvc3RuYW1lLCAiJXMiLCBiaE1hY3JvKTsKKysgICAgfSBlbHNlIHsKKysgICAgICAgIGhvc3RuYW1lID0gcmNhbGxvYygxMDI0LCBzaXplb2YoKmhvc3RuYW1lKSk7CisrICAgICAgICAodm9pZCkgZ2V0aG9zdG5hbWUoaG9zdG5hbWUsIDEwMjQpOworKyAgICAgICAgaGJuID0gZ2V0aG9zdGJ5bmFtZShob3N0bmFtZSk7CisrICAgICAgICBpZiAoaGJuKQorKyAgICAgICAgICAgIHN0cmNweShob3N0bmFtZSwgaGJuLT5oX25hbWUpOworKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHJwbWxvZyhSUE1MT0dfV0FSTklORywKKysgICAgICAgICAgICAgICAgICAgIF8oIkNvdWxkIG5vdCBjYW5vbmljYWxpemUgaG9zdG5hbWU6ICVzXG4iKSwgaG9zdG5hbWUpOworKyAgICB9CisrICAgIGZyZWUoYmhNYWNybyk7CisrICAgIHJldHVybihob3N0bmFtZSk7CisrfQorKworIC8qKgorICAqLworIHN0YXRpYyBycG1SQyBkb1JtU291cmNlKHJwbVNwZWMgc3BlYykKK0BAIC0yMDMsNiArMjQ5LDkgQEAgc3RhdGljIHJwbVJDIGJ1aWxkU3BlYyhCVEFfdCBidWlsZEFyZ3MsIHJwbVNwZWMgc3BlYywgaW50IHdoYXQpCisgICAgIHJwbVJDIHJjID0gUlBNUkNfT0s7CisgICAgIGludCB0ZXN0ID0gKHdoYXQgJiBSUE1CVUlMRF9OT0JVSUxEKTsKKyAgICAgY2hhciAqY29va2llID0gYnVpbGRBcmdzLT5jb29raWUgPyB4c3RyZHVwKGJ1aWxkQXJncy0+Y29va2llKSA6IE5VTEw7CisrICAgIGNvbnN0IGNoYXIqIGhvc3QgPSBidWlsZEhvc3QoKTsKKysgICAgcnBtX3RpbWVfdCBidWlsZFRpbWUgPSBnZXRCdWlsZFRpbWUoKTsKKysKKyAKKyAgICAgaWYgKHJwbUV4cGFuZE51bWVyaWMoIiV7P3NvdXJjZV9kYXRlX2Vwb2NoX2Zyb21fY2hhbmdlbG9nfSIpICYmCisgCWdldGVudigiU09VUkNFX0RBVEVfRVBPQ0giKSA9PSBOVUxMKSB7CitAQCAtMjcxLDExICszMjAsMTEgQEAgc3RhdGljIHJwbVJDIGJ1aWxkU3BlYyhCVEFfdCBidWlsZEFyZ3MsIHJwbVNwZWMgc3BlYywgaW50IHdoYXQpCisgCQlnb3RvIGV4aXQ7CisgCisgCWlmICgoKHdoYXQgJiBSUE1CVUlMRF9QQUNLQUdFU09VUkNFKSAmJiAhdGVzdCkgJiYKKy0JICAgIChyYyA9IHBhY2thZ2VTb3VyY2VzKHNwZWMsICZjb29raWUpKSkKKysJICAgIChyYyA9IHBhY2thZ2VTb3VyY2VzKHNwZWMsICZjb29raWUsIGJ1aWxkVGltZSwgaG9zdCkpKQorIAkJcmV0dXJuIHJjOworIAorIAlpZiAoKCh3aGF0ICYgUlBNQlVJTERfUEFDS0FHRUJJTkFSWSkgJiYgIXRlc3QpICYmCistCSAgICAocmMgPSBwYWNrYWdlQmluYXJpZXMoc3BlYywgY29va2llLCAoZGlkQnVpbGQgPT0gMCkpKSkKKysJICAgIChyYyA9IHBhY2thZ2VCaW5hcmllcyhzcGVjLCBjb29raWUsIChkaWRCdWlsZCA9PSAwKSwgYnVpbGRUaW1lLCBob3N0KSkpCisgCQlnb3RvIGV4aXQ7CisgCQorIAlpZiAoKHdoYXQgJiBSUE1CVUlMRF9DTEVBTikgJiYKK0BAIC0yOTUsNiArMzQ0LDcgQEAgc3RhdGljIHJwbVJDIGJ1aWxkU3BlYyhCVEFfdCBidWlsZEFyZ3MsIHJwbVNwZWMgc3BlYywgaW50IHdoYXQpCisgCSh2b2lkKSB1bmxpbmsoc3BlYy0+c3BlY0ZpbGUpOworIAorIGV4aXQ6CisrICAgIGZyZWUoaG9zdCk7CisgICAgIGZyZWUoY29va2llKTsKKyAgICAgc3BlYy0+cm9vdERpciA9IE5VTEw7CisgICAgIGlmIChyYyAhPSBSUE1SQ19PSyAmJiBycG1sb2dHZXROcmVjcygpID4gMCkgeworZGlmZiAtLWdpdCBhL2J1aWxkL3BhY2suYyBiL2J1aWxkL3BhY2suYworaW5kZXggZWQ1YjlhYjRlLi42MjQyNzA2NWEgMTAwNjQ0CistLS0gYS9idWlsZC9wYWNrLmMKKysrKyBiL2J1aWxkL3BhY2suYworQEAgLTYsOCArNiw2IEBACisgI2luY2x1ZGUgInN5c3RlbS5oIgorIAorICNpbmNsdWRlIDxlcnJuby5oPgorLSNpbmNsdWRlIDxuZXRkYi5oPgorLSNpbmNsdWRlIDx0aW1lLmg+CisgI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisgCisgI2luY2x1ZGUgPHJwbS9ycG1saWIuaD4JCQkvKiBSUE1TSUdUQUcqLCBycG1SZWFkUGFja2FnZUZpbGUgKi8KK0BAIC0xNTEsNTcgKzE0OSw2IEBAIGV4aXQ6CisgICAgIHJldHVybiByYzsKKyB9CisgCistc3RhdGljIHJwbV90aW1lX3QgKiBnZXRCdWlsZFRpbWUodm9pZCkKKy17CistICAgIHN0YXRpYyBycG1fdGltZV90IGJ1aWxkVGltZVsxXTsKKy0gICAgY2hhciAqc3JjZGF0ZTsKKy0gICAgdGltZV90IGVwb2NoOworLSAgICBjaGFyICplbmRwdHI7CistCistICAgIGlmIChidWlsZFRpbWVbMF0gPT0gMCkgeworLSAgICAgICAgc3JjZGF0ZSA9IGdldGVudigiU09VUkNFX0RBVEVfRVBPQ0giKTsKKy0gICAgICAgIGlmIChzcmNkYXRlKSB7CistICAgICAgICAgICAgZXJybm8gPSAwOworLSAgICAgICAgICAgIGVwb2NoID0gc3RydG9sKHNyY2RhdGUsICZlbmRwdHIsIDEwKTsKKy0gICAgICAgICAgICBpZiAoc3JjZGF0ZSA9PSBlbmRwdHIgfHwgKmVuZHB0ciB8fCBlcnJubyAhPSAwKQorLSAgICAgICAgICAgICAgICBycG1sb2coUlBNTE9HX0VSUiwgXygidW5hYmxlIHRvIHBhcnNlIFNPVVJDRV9EQVRFX0VQT0NIXG4iKSk7CistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgICBidWlsZFRpbWVbMF0gPSAoaW50MzJfdCkgZXBvY2g7CistICAgICAgICB9IGVsc2UKKy0gICAgICAgICAgICBidWlsZFRpbWVbMF0gPSAoaW50MzJfdCkgdGltZShOVUxMKTsKKy0gICAgfQorLQorLSAgICByZXR1cm4gYnVpbGRUaW1lOworLX0KKy0KKy1zdGF0aWMgY29uc3QgY2hhciAqIGJ1aWxkSG9zdCh2b2lkKQorLXsKKy0gICAgc3RhdGljIGNoYXIgaG9zdG5hbWVbMTAyNF07CistICAgIHN0YXRpYyBpbnQgb25lc2hvdCA9IDA7CistICAgIHN0cnVjdCBob3N0ZW50ICpoYm47CistICAgIGNoYXIgKmJoTWFjcm87CistCistICAgIGlmICghIG9uZXNob3QpIHsKKy0gICAgICAgIGJoTWFjcm8gPSBycG1FeHBhbmQoIiV7P19idWlsZGhvc3R9IiwgTlVMTCk7CistICAgICAgICBpZiAoc3RyY21wKGJoTWFjcm8sICIiKSAhPSAwICYmIHN0cmxlbihiaE1hY3JvKSA8IDEwMjQpIHsKKy0gICAgICAgICAgICBzdHJjcHkoaG9zdG5hbWUsIGJoTWFjcm8pOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICBpZiAoc3RyY21wKGJoTWFjcm8sICIiKSAhPSAwKQorLSAgICAgICAgICAgICAgICBycG1sb2coUlBNTE9HX1dBUk5JTkcsIF8oIlRoZSBfYnVpbGRob3N0IG1hY3JvIGlzIHRvbyBsb25nXG4iKSk7CistICAgICAgICAgICAgKHZvaWQpIGdldGhvc3RuYW1lKGhvc3RuYW1lLCBzaXplb2YoaG9zdG5hbWUpKTsKKy0gICAgICAgICAgICBoYm4gPSBnZXRob3N0YnluYW1lKGhvc3RuYW1lKTsKKy0gICAgICAgICAgICBpZiAoaGJuKQorLSAgICAgICAgICAgICAgICBzdHJjcHkoaG9zdG5hbWUsIGhibi0+aF9uYW1lKTsKKy0gICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgIHJwbWxvZyhSUE1MT0dfV0FSTklORywKKy0gICAgICAgICAgICAgICAgICAgICAgICBfKCJDb3VsZCBub3QgY2Fub25pY2FsaXplIGhvc3RuYW1lOiAlc1xuIiksIGhvc3RuYW1lKTsKKy0gICAgICAgIH0KKy0gICAgICAgIGZyZWUoYmhNYWNybyk7CistICAgICAgICBvbmVzaG90ID0gMTsKKy0gICAgfQorLSAgICByZXR1cm4oaG9zdG5hbWUpOworLX0KKy0KKyBzdGF0aWMgcnBtUkMgcHJvY2Vzc1NjcmlwdEZpbGVzKHJwbVNwZWMgc3BlYywgUGFja2FnZSBwa2cpCisgeworICAgICBzdHJ1Y3QgVHJpZ2dlckZpbGVFbnRyeSAqcDsKK0BAIC0zMDgsNyArMjU1LDggQEAgc3RhdGljIGludCBoYXZlUmljaERlcChQYWNrYWdlIHBrZykKKyB9CisgCisgc3RhdGljIHJwbVJDIHdyaXRlUlBNKFBhY2thZ2UgcGtnLCB1bnNpZ25lZCBjaGFyICoqIHBrZ2lkcCwKKy0JCSAgICAgIGNvbnN0IGNoYXIgKmZpbGVOYW1lLCBjaGFyICoqY29va2llKQorKwkJICAgICAgY29uc3QgY2hhciAqZmlsZU5hbWUsIGNoYXIgKipjb29raWUsCisrCQkgICAgICBycG1fdGltZV90IGJ1aWxkVGltZSwgY29uc3QgY2hhciogYnVpbGRIb3N0KQorIHsKKyAgICAgRkRfdCBmZCA9IE5VTEw7CisgICAgIGNoYXIgKiBycG1pb19mbGFncyA9IE5VTEw7CitAQCAtMzk3LDcgKzM0NSw3IEBAIHN0YXRpYyBycG1SQyB3cml0ZVJQTShQYWNrYWdlIHBrZywgdW5zaWduZWQgY2hhciAqKiBwa2dpZHAsCisgCisgICAgIC8qIENyZWF0ZSBhbmQgYWRkIHRoZSBjb29raWUgKi8KKyAgICAgaWYgKGNvb2tpZSkgeworLQlyYXNwcmludGYoY29va2llLCAiJXMgJWQiLCBidWlsZEhvc3QoKSwgKGludCkgKCpnZXRCdWlsZFRpbWUoKSkpOworKwlyYXNwcmludGYoY29va2llLCAiJXMgJWQiLCBidWlsZEhvc3QsIGJ1aWxkVGltZSk7CisgCWhlYWRlclB1dFN0cmluZyhwa2ctPmhlYWRlciwgUlBNVEFHX0NPT0tJRSwgKmNvb2tpZSk7CisgICAgIH0KKyAgICAgCitAQCAtNTQ2LDcgKzQ5NCw3IEBAIHN0YXRpYyBycG1SQyBjaGVja1BhY2thZ2VzKGNoYXIgKnBrZ2NoZWNrKQorICAgICByZXR1cm4gUlBNUkNfT0s7CisgfQorIAorLXN0YXRpYyBycG1SQyBwYWNrYWdlQmluYXJ5KHJwbVNwZWMgc3BlYywgUGFja2FnZSBwa2csIGNvbnN0IGNoYXIgKmNvb2tpZSwgaW50IGNoZWF0aW5nLCBjaGFyKiogZmlsZW5hbWUpCisrc3RhdGljIHJwbVJDIHBhY2thZ2VCaW5hcnkocnBtU3BlYyBzcGVjLCBQYWNrYWdlIHBrZywgY29uc3QgY2hhciAqY29va2llLCBpbnQgY2hlYXRpbmcsIGNoYXIqKiBmaWxlbmFtZSwgcnBtX3RpbWVfdCBidWlsZFRpbWUsIGNvbnN0IGNoYXIqIGJ1aWxkSG9zdCkKKyB7CisgCWNvbnN0IGNoYXIgKmVycm9yU3RyaW5nOworIAlycG1SQyByYyA9IFJQTVJDX09LOworQEAgLTU2NSw4ICs1MTMsOCBAQCBzdGF0aWMgcnBtUkMgcGFja2FnZUJpbmFyeShycG1TcGVjIHNwZWMsIFBhY2thZ2UgcGtnLCBjb25zdCBjaGFyICpjb29raWUsIGludCBjaAorIAloZWFkZXJDb3B5VGFncyhzcGVjLT5wYWNrYWdlcy0+aGVhZGVyLCBwa2ctPmhlYWRlciwgY29weVRhZ3MpOworIAkKKyAJaGVhZGVyUHV0U3RyaW5nKHBrZy0+aGVhZGVyLCBSUE1UQUdfUlBNVkVSU0lPTiwgVkVSU0lPTik7CistCWhlYWRlclB1dFN0cmluZyhwa2ctPmhlYWRlciwgUlBNVEFHX0JVSUxESE9TVCwgYnVpbGRIb3N0KCkpOworLQloZWFkZXJQdXRVaW50MzIocGtnLT5oZWFkZXIsIFJQTVRBR19CVUlMRFRJTUUsIGdldEJ1aWxkVGltZSgpLCAxKTsKKysJaGVhZGVyUHV0U3RyaW5nKHBrZy0+aGVhZGVyLCBSUE1UQUdfQlVJTERIT1NULCBidWlsZEhvc3QpOworKwloZWFkZXJQdXRVaW50MzIocGtnLT5oZWFkZXIsIFJQTVRBR19CVUlMRFRJTUUsICZidWlsZFRpbWUsIDEpOworIAorIAlpZiAoc3BlYy0+c291cmNlUGtnSWQgIT0gTlVMTCkgeworIAkgICAgaGVhZGVyUHV0QmluKHBrZy0+aGVhZGVyLCBSUE1UQUdfU09VUkNFUEtHSUQsIHNwZWMtPnNvdXJjZVBrZ0lkLDE2KTsKK0BAIC02MDQsNyArNTUyLDcgQEAgc3RhdGljIHJwbVJDIHBhY2thZ2VCaW5hcnkocnBtU3BlYyBzcGVjLCBQYWNrYWdlIHBrZywgY29uc3QgY2hhciAqY29va2llLCBpbnQgY2gKKyAJICAgIGZyZWUoYmluUnBtKTsKKyAJfQorIAorLQlyYyA9IHdyaXRlUlBNKHBrZywgTlVMTCwgKmZpbGVuYW1lLCBOVUxMKTsKKysJcmMgPSB3cml0ZVJQTShwa2csIE5VTEwsICpmaWxlbmFtZSwgTlVMTCwgYnVpbGRUaW1lLCBidWlsZEhvc3QpOworIAlpZiAocmMgPT0gUlBNUkNfT0spIHsKKyAJICAgIC8qIERvIGNoZWNrIGVhY2ggd3JpdHRlbiBwYWNrYWdlIGlmIGVuYWJsZWQgKi8KKyAJICAgIGNoYXIgKnBrZ2NoZWNrID0gcnBtRXhwYW5kKCIlez9fYnVpbGRfcGtnY2hlY2t9ICIsICpmaWxlbmFtZSwgTlVMTCk7CitAQCAtNjI0LDcgKzU3Miw3IEBAIHN0cnVjdCBiaW5hcnlQYWNrYWdlVGFza0RhdGEKKyAgICAgc3RydWN0IGJpbmFyeVBhY2thZ2VUYXNrRGF0YSAqbmV4dDsKKyB9OworIAorLXN0YXRpYyBzdHJ1Y3QgYmluYXJ5UGFja2FnZVRhc2tEYXRhKiBydW5CaW5hcnlQYWNrYWdlVGFza3MocnBtU3BlYyBzcGVjLCBjb25zdCBjaGFyICpjb29raWUsIGludCBjaGVhdGluZykKKytzdGF0aWMgc3RydWN0IGJpbmFyeVBhY2thZ2VUYXNrRGF0YSogcnVuQmluYXJ5UGFja2FnZVRhc2tzKHJwbVNwZWMgc3BlYywgY29uc3QgY2hhciAqY29va2llLCBpbnQgY2hlYXRpbmcsIHJwbV90aW1lX3QgYnVpbGRUaW1lLCBjaGFyKiBidWlsZEhvc3QpCisgeworICAgICBzdHJ1Y3QgYmluYXJ5UGFja2FnZVRhc2tEYXRhICp0YXNrcyA9IE5VTEw7CisgICAgIHN0cnVjdCBiaW5hcnlQYWNrYWdlVGFza0RhdGEgKnRhc2sgPSBOVUxMOworQEAgLTYzNiw3ICs1ODQsNyBAQCBzdGF0aWMgc3RydWN0IGJpbmFyeVBhY2thZ2VUYXNrRGF0YSogcnVuQmluYXJ5UGFja2FnZVRhc2tzKHJwbVNwZWMgc3BlYywgY29uc3QgYworICAgICAgICAgaWYgKHBrZyA9PSBzcGVjLT5wYWNrYWdlcykgeworICAgICAgICAgICAgIC8vIHRoZSBmaXJzdCBwYWNrYWdlIG5lZWRzIHRvIGJlIHByb2Nlc3NlZCBhaGVhZCBvZiBvdGhlcnMsIGFzIHRoZXkgY29weQorICAgICAgICAgICAgIC8vIGNoYW5nZWxvZyBkYXRhIGZyb20gaXQsIGFuZCBzbyBvdGhlcndpc2UgZGF0YSByYWNlcyB3b3VsZCBoYXBwZW4KKy0gICAgICAgICAgICB0YXNrLT5yZXN1bHQgPSBwYWNrYWdlQmluYXJ5KHNwZWMsIHBrZywgY29va2llLCBjaGVhdGluZywgJih0YXNrLT5maWxlbmFtZSkpOworKyAgICAgICAgICAgIHRhc2stPnJlc3VsdCA9IHBhY2thZ2VCaW5hcnkoc3BlYywgcGtnLCBjb29raWUsIGNoZWF0aW5nLCAmKHRhc2stPmZpbGVuYW1lKSwgYnVpbGRUaW1lLCBidWlsZEhvc3QpOworICAgICAgICAgICAgIHJwbWxvZyhSUE1MT0dfTk9USUNFLCBfKCJGaW5pc2hlZCBiaW5hcnkgcGFja2FnZSBqb2IsIHJlc3VsdCAlZCwgZmlsZW5hbWUgJXNcbiIpLCB0YXNrLT5yZXN1bHQsIHRhc2stPmZpbGVuYW1lKTsKKyAgICAgICAgICAgICB0YXNrcyA9IHRhc2s7CisgICAgICAgICB9CitAQCAtNjUzLDcgKzYwMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYmluYXJ5UGFja2FnZVRhc2tEYXRhKiBydW5CaW5hcnlQYWNrYWdlVGFza3MocnBtU3BlYyBzcGVjLCBjb25zdCBjCisgICAgICAgICBpZiAodGFzayAhPSB0YXNrcykKKyAgICAgICAgICNwcmFnbWEgb21wIHRhc2sKKyAgICAgICAgIHsKKy0gICAgICAgICAgICB0YXNrLT5yZXN1bHQgPSBwYWNrYWdlQmluYXJ5KHNwZWMsIHRhc2stPnBrZywgY29va2llLCBjaGVhdGluZywgJih0YXNrLT5maWxlbmFtZSkpOworKyAgICAgICAgICAgIHRhc2stPnJlc3VsdCA9IHBhY2thZ2VCaW5hcnkoc3BlYywgdGFzay0+cGtnLCBjb29raWUsIGNoZWF0aW5nLCAmKHRhc2stPmZpbGVuYW1lKSwgYnVpbGRUaW1lLCBidWlsZEhvc3QpOworICAgICAgICAgICAgIHJwbWxvZyhSUE1MT0dfTk9USUNFLCBfKCJGaW5pc2hlZCBiaW5hcnkgcGFja2FnZSBqb2IsIHJlc3VsdCAlZCwgZmlsZW5hbWUgJXNcbiIpLCB0YXNrLT5yZXN1bHQsIHRhc2stPmZpbGVuYW1lKTsKKyAgICAgICAgIH0KKyAgICAgfQorQEAgLTY3MSwxMSArNjE5LDExIEBAIHN0YXRpYyB2b2lkIGZyZWVCaW5hcnlQYWNrYWdlVGFza3Moc3RydWN0IGJpbmFyeVBhY2thZ2VUYXNrRGF0YSogdGFza3MpCisgICAgIH0KKyB9CisgCistcnBtUkMgcGFja2FnZUJpbmFyaWVzKHJwbVNwZWMgc3BlYywgY29uc3QgY2hhciAqY29va2llLCBpbnQgY2hlYXRpbmcpCisrcnBtUkMgcGFja2FnZUJpbmFyaWVzKHJwbVNwZWMgc3BlYywgY29uc3QgY2hhciAqY29va2llLCBpbnQgY2hlYXRpbmcsIHJwbV90aW1lX3QgYnVpbGRUaW1lLCBjaGFyKiBidWlsZEhvc3QpCisgeworICAgICBjaGFyICpwa2dsaXN0ID0gTlVMTDsKKyAKKy0gICAgc3RydWN0IGJpbmFyeVBhY2thZ2VUYXNrRGF0YSAqdGFza3MgPSBydW5CaW5hcnlQYWNrYWdlVGFza3Moc3BlYywgY29va2llLCBjaGVhdGluZyk7CisrICAgIHN0cnVjdCBiaW5hcnlQYWNrYWdlVGFza0RhdGEgKnRhc2tzID0gcnVuQmluYXJ5UGFja2FnZVRhc2tzKHNwZWMsIGNvb2tpZSwgY2hlYXRpbmcsIGJ1aWxkVGltZSwgYnVpbGRIb3N0KTsKKyAKKyAgICAgZm9yIChzdHJ1Y3QgYmluYXJ5UGFja2FnZVRhc2tEYXRhICp0YXNrID0gdGFza3M7IHRhc2sgIT0gTlVMTDsgdGFzayA9IHRhc2stPm5leHQpIHsKKyAgICAgICAgIGlmICh0YXNrLT5yZXN1bHQgPT0gUlBNUkNfT0spIHsKK0BAIC03MDIsMjIgKzY1MCwyMiBAQCBycG1SQyBwYWNrYWdlQmluYXJpZXMocnBtU3BlYyBzcGVjLCBjb25zdCBjaGFyICpjb29raWUsIGludCBjaGVhdGluZykKKyAgICAgcmV0dXJuIFJQTVJDX09LOworIH0KKyAKKy1ycG1SQyBwYWNrYWdlU291cmNlcyhycG1TcGVjIHNwZWMsIGNoYXIgKipjb29raWUpCisrcnBtUkMgcGFja2FnZVNvdXJjZXMocnBtU3BlYyBzcGVjLCBjaGFyICoqY29va2llLCBycG1fdGltZV90IGJ1aWxkVGltZSwgY2hhciogYnVpbGRIb3N0KQorIHsKKyAgICAgUGFja2FnZSBzb3VyY2VQa2cgPSBzcGVjLT5zb3VyY2VQYWNrYWdlOworICAgICBycG1SQyByYzsKKyAKKyAgICAgLyogQWRkIHNvbWUgY3J1ZnQgKi8KKyAgICAgaGVhZGVyUHV0U3RyaW5nKHNvdXJjZVBrZy0+aGVhZGVyLCBSUE1UQUdfUlBNVkVSU0lPTiwgVkVSU0lPTik7CistICAgIGhlYWRlclB1dFN0cmluZyhzb3VyY2VQa2ctPmhlYWRlciwgUlBNVEFHX0JVSUxESE9TVCwgYnVpbGRIb3N0KCkpOworLSAgICBoZWFkZXJQdXRVaW50MzIoc291cmNlUGtnLT5oZWFkZXIsIFJQTVRBR19CVUlMRFRJTUUsIGdldEJ1aWxkVGltZSgpLCAxKTsKKysgICAgaGVhZGVyUHV0U3RyaW5nKHNvdXJjZVBrZy0+aGVhZGVyLCBSUE1UQUdfQlVJTERIT1NULCBidWlsZEhvc3QpOworKyAgICBoZWFkZXJQdXRVaW50MzIoc291cmNlUGtnLT5oZWFkZXIsIFJQTVRBR19CVUlMRFRJTUUsICZidWlsZFRpbWUsIDEpOworIAorICAgICAvKiBYWFggdGhpcyBzaG91bGQgYmUgJV9zcnBtZGlyICovCisgICAgIHsJY2hhciAqZm4gPSBycG1HZXRQYXRoKCIle19zcmNycG1kaXJ9LyIsIHNwZWMtPnNvdXJjZVJwbU5hbWUsTlVMTCk7CisgCWNoYXIgKnBrZ2NoZWNrID0gcnBtRXhwYW5kKCIlez9fYnVpbGRfcGtnY2hlY2tfc3JwbX0gIiwgZm4sIE5VTEwpOworIAorIAlzcGVjLT5zb3VyY2VQa2dJZCA9IE5VTEw7CistCXJjID0gd3JpdGVSUE0oc291cmNlUGtnLCAmc3BlYy0+c291cmNlUGtnSWQsIGZuLCBjb29raWUpOworKwlyYyA9IHdyaXRlUlBNKHNvdXJjZVBrZywgJnNwZWMtPnNvdXJjZVBrZ0lkLCBmbiwgY29va2llLCBidWlsZFRpbWUsIGJ1aWxkSG9zdCk7CisgCisgCS8qIERvIGNoZWNrIFNSUE0gcGFja2FnZSBpZiBlbmFibGVkICovCisgCWlmIChyYyA9PSBSUE1SQ19PSyAmJiBwa2djaGVja1swXSAhPSAnICcpIHsKK2RpZmYgLS1naXQgYS9idWlsZC9ycG1idWlsZF9pbnRlcm5hbC5oIGIvYnVpbGQvcnBtYnVpbGRfaW50ZXJuYWwuaAoraW5kZXggODM1MWE2YTM0Li43OTczMzdjYTcgMTAwNjQ0CistLS0gYS9idWlsZC9ycG1idWlsZF9pbnRlcm5hbC5oCisrKysgYi9idWlsZC9ycG1idWlsZF9pbnRlcm5hbC5oCitAQCAtNDA4LDE5ICs0MDgsMjMgQEAgcnBtUkMgcHJvY2Vzc1NvdXJjZUZpbGVzKHJwbVNwZWMgc3BlYywgcnBtQnVpbGRQa2dGbGFncyBwa2dGbGFncyk7CisgICogQHBhcmFtIHNwZWMJCXNwZWMgZmlsZSBjb250cm9sIHN0cnVjdHVyZQorICAqIEBwYXJhbSBjb29raWUJYnVpbGQgaWRlbnRpZmllciAiY29va2llIiBvciBOVUxMCisgICogQHBhcmFtIGNoZWF0aW5nCXdhcyBidWlsZCBzaG9ydGNpcmN1aXRlZD8KKysgKiBAcGFyYW0gYnVpbGRUaW1lCXRoZSBidWlsZCB0aW1lc3RhbXAgdGhhdCBnb2VzIGludG8gcGFja2FnZXMKKysgKiBAcGFyYW0gYnVpbGRIb3N0CXRoZSBob3N0bmFtZSB3aGVyZSB0aGUgYnVpbGQgaXMgaGFwcGVuaW5nCisgICogQHJldHVybgkJUlBNUkNfT0sgb24gc3VjY2VzcworICAqLworIFJQTV9HTlVDX0lOVEVSTkFMCistcnBtUkMgcGFja2FnZUJpbmFyaWVzKHJwbVNwZWMgc3BlYywgY29uc3QgY2hhciAqY29va2llLCBpbnQgY2hlYXRpbmcpOworK3JwbVJDIHBhY2thZ2VCaW5hcmllcyhycG1TcGVjIHNwZWMsIGNvbnN0IGNoYXIgKmNvb2tpZSwgaW50IGNoZWF0aW5nLCBycG1fdGltZV90IGJ1aWxkVGltZSwgY2hhciogYnVpbGRIb3N0KTsKKyAKKyAvKiogXGluZ3JvdXAgcnBtYnVpbGQKKyAgKiBHZW5lcmF0ZSBzb3VyY2UgcGFja2FnZS4KKyAgKiBAcGFyYW0gc3BlYwkJc3BlYyBmaWxlIGNvbnRyb2wgc3RydWN0dXJlCisgICogQHJldHZhbCBjb29raWUJYnVpbGQgaWRlbnRpZmllciAiY29va2llIiBvciBOVUxMCisrICogQHBhcmFtIGJ1aWxkVGltZQl0aGUgYnVpbGQgdGltZXN0YW1wIHRoYXQgZ29lcyBpbnRvIHBhY2thZ2VzCisrICogQHBhcmFtIGJ1aWxkSG9zdAl0aGUgaG9zdG5hbWUgd2hlcmUgdGhlIGJ1aWxkIGlzIGhhcHBlbmluZworICAqIEByZXR1cm4JCVJQTVJDX09LIG9uIHN1Y2Nlc3MKKyAgKi8KKyBSUE1fR05VQ19JTlRFUk5BTAorLXJwbVJDIHBhY2thZ2VTb3VyY2VzKHJwbVNwZWMgc3BlYywgY2hhciAqKmNvb2tpZSk7CisrcnBtUkMgcGFja2FnZVNvdXJjZXMocnBtU3BlYyBzcGVjLCBjaGFyICoqY29va2llLCBycG1fdGltZV90IGJ1aWxkVGltZSwgY2hhciogYnVpbGRIb3N0KTsKKyAKKyBSUE1fR05VQ19JTlRFUk5BTAorIGludCBhZGRMYW5nVGFnKHJwbVNwZWMgc3BlYywgSGVhZGVyIGgsIHJwbVRhZ1ZhbCB0YWcsCistLSAKKzIuMTEuMAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1fZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtX2dpdC5iYgppbmRleCBiMGY1NzgwLi43ODY2MzE0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1fZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV9naXQuYmIKQEAgLTM4LDggKzM4LDEzIEBACiAgICAgICAgICAgIGZpbGU6Ly8wMDExLURvLW5vdC1yZXF1aXJlLXRoYXQtRUxGLWJpbmFyaWVzLWFyZS1leGVjdXRhYmxlLXRvLWIucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAxMi1Vc2UtY29uZGl0aW9uYWwtdG8tYWNjZXNzLV9kb2NkaXItaW4tbWFjcm9zLmluLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMTMtQWRkLWEtbmV3LW9wdGlvbi1hbGxkZXBzLXRvLXJwbWRlcHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1TcGxpdC1iaW5hcnktcGFja2FnZS1idWlsZGluZy1pbnRvLWEtc2VwYXJhdGUtZnVuY3RpLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItUnVuLWJpbmFyeS1wYWNrYWdlLWNyZWF0aW9uLXZpYS10aHJlYWQtcG9vbHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1ycG1zdHJwb29sLmMtbWFrZS1vcGVyYXRpb25zLW92ZXItc3RyaW5nLXBvb2xzLXRocmVhLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtYnVpbGQtcGFjay5jLXJlbW92ZS1zdGF0aWMtbG9jYWwtdmFyaWFibGVzLWZyb20tYnVpbC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBlcmwtZGlzYWJsZS1hdXRvLXJlcXMucGF0Y2ggXAogICAgICAgICAgICAiCitVUFNUUkVBTV9WRVJTSU9OX1VOS05PV04gPSAiMSIKIAogUFYgPSAiNC4xMy45MCtnaXQke1NSQ1BWfSIKIFBFID0gIjEiCkBAIC00Nyw4ICs1Miw4IEBACiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCiAKLURFUEVORFMgPSAibnNzIGxpYmFyY2hpdmUgZGIgZmlsZSBwb3B0IHh6IGRidXMgZWxmdXRpbHMgcHl0aG9uMyIKLURFUEVORFNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZmlsZS1yZXBsYWNlbWVudC1uYXRpdmUiCitERVBFTkRTID0gIm5zcyBsaWJhcmNoaXZlIGRiIGZpbGUgcG9wdCB4eiBiemlwMiBkYnVzIGVsZnV0aWxzIHB5dGhvbjMiCitERVBFTkRTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGZpbGUtcmVwbGFjZW1lbnQtbmF0aXZlIGJ6aXAyLXJlcGxhY2VtZW50LW5hdGl2ZSIKIAogaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcgcHl0aG9uM25hdGl2ZQogZXhwb3J0IFBZVEhPTl9BQkkKQEAgLTY4LDYgKzczLDkgQEAKIAogQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgogCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tpbWFldm1dID0gIi0td2l0aC1pbWFldm0sLGltYS1ldm0tdXRpbHMiCisKICMgRGlyZWN0IHJwbS1uYXRpdmUgdG8gcmVhZCBjb25maWd1cmF0aW9uIGZyb20gb3VyIHN5c3Jvb3QsIG5vdCB0aGUgb25lIGl0IHdhcyBjb21waWxlZCBpbgogIyBsaWJtYWdpYyBhbHNvIGhhcyBzeXNyb290IHBhdGggY29udGFtaW5hdGlvbiwgc28gb3ZlcnJpZGUgaXQKIGRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKQEAgLTk5LDcgKzEwNyw4IEBACiB9CiAKIGRvX2luc3RhbGxfYXBwZW5kICgpIHsKLQlzZWQgLWkgLWUgJ3M6JHtIT1NUVE9PTFNfRElSfS86OmcnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MKKwlzZWQgLWkgLWUgJ3M6JHtIT1NUVE9PTFNfRElSfS86OmcnIFwKKwkgICAgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcwogCiAJc2VkIC1pIC1lICdzfC91c3IvYmluL3B5dGhvbnwke1VTUkJJTlBBVEh9L2VudiAke1BZVEhPTl9QTn18JyBcCiAJICAgICR7RH0ke2xpYmRpcn0vcnBtL3B5dGhvbmRpc3RkZXBzLnB5CkBAIC0xMTksMyArMTI4LDExIEBACiBSUFJPVklERVNfJHtQTn0gKz0gInJwbS1idWlsZCIKIAogUkRFUEVORFNfJHtQTn0gPSAiYmFzaCBwZXJsIHB5dGhvbjMtY29yZSIKKworUEFDS0FHRV9QUkVQUk9DRVNTX0ZVTkNTICs9ICJycG1fcGFja2FnZV9wcmVwcm9jZXNzIgorCisjIERvIG5vdCBzcGVjaWZ5IGEgc3lzcm9vdCB3aGVuIGNvbXBpbGluZyBvbiBhIHRhcmdldC4KK3JwbV9wYWNrYWdlX3ByZXByb2Nlc3MgKCkgeworCXNlZCAtaSAtZSAnczotLXN5c3Jvb3RbXiBdKjo6ZycgXAorCSAgICAke1BLR0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieS9DVkUtMjAxNy0xNDA2NC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5L0NWRS0yMDE3LTE0MDY0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDBkMWJjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5L0NWRS0yMDE3LTE0MDY0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzUzICswLDAgQEAKLUZyb20gZDg2ZDI4M2ZjYjM1ZDE0NDJhMTIxYjkyMDMwODg0NTIzOTA4YTMzMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IG5hZ2FjaGlrYSA8bmFnYWNoaWthQGIyZGQwM2M4LTM5ZDQtNGQ4Zi05OGZmLTgyM2ZlNjliMDgwZT4KLURhdGU6IFNhdCwgMjIgQXByIDIwMTcgMDc6Mjk6MDEgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gbWVyZ2UgcmV2aXNpb24ocykgNTgzMjMsNTgzMjQ6Ci0KLQlNZXJnZSBqc29uLTIuMC40LgotCi0JICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9yaS9qc29uL3JlbGVhc2VzL3RhZy92Mi4wLjQKLQkgICogaHR0cHM6Ly9naXRodWIuY29tL2Zsb3JpL2pzb24vYmxvYi8wOWZhYmViMDNlNzNlZDg4ZGM4Y2U4ZjE5ZDc2YWM1OWU1MWRhZTIwL0NIQU5HRVMubWQjMjAxNy0wMy0yMy0yMDQKLQlVc2UgYGFzc2VydF9yYWlzZWAgaW5zdGVhZCBvZiBgYXNzZXJ0X3JhaXNlc2AuCi0KLWdpdC1zdm4taWQ6IHN2bitzc2g6Ly9jaS5ydWJ5LWxhbmcub3JnL3J1YnkvYnJhbmNoZXMvcnVieV8yXzRANTg0NDUgYjJkZDAzYzgtMzlkNC00ZDhmLTk4ZmYtODIzZmU2OWIwODBlCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLUNWRTogQ1ZFLTIwMTctMTQwNjQKLQotU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXNhLmNvbT4KLQotLS0tCi0gZXh0L2pzb24vZmJ1ZmZlci9mYnVmZmVyLmggICAgICAgfCAgIDMgLS0tCi0gZXh0L2pzb24vZ2VuZXJhdG9yL2dlbmVyYXRvci5jICAgfCAgMTIgKysrKystLS0tLQotIGV4dC9qc29uL2dlbmVyYXRvci9nZW5lcmF0b3IuaCAgIHwgICAxIC0KLSBleHQvanNvbi9qc29uLmdlbXNwZWMgICAgICAgICAgICB8IEJpbiA1NDczIC0+IDU0NzQgYnl0ZXMKLSBleHQvanNvbi9saWIvanNvbi92ZXJzaW9uLnJiICAgICB8ICAgMiArLQotIGV4dC9qc29uL3BhcnNlci9wYXJzZXIuYyAgICAgICAgIHwgIDQ4ICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQotIGV4dC9qc29uL3BhcnNlci9wYXJzZXIucmwgICAgICAgIHwgIDE0ICsrKysrKysrKy0tLQotIHRlc3QvanNvbi9qc29uX2VuY29kaW5nX3Rlc3QucmIgIHwgICAyICsrCi0gdGVzdC9qc29uL2pzb25fZ2VuZXJhdG9yX3Rlc3QucmIgfCAgIDAKLSB2ZXJzaW9uLmggICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQotIDEwIGZpbGVzIGNoYW5nZWQsIDQ5IGluc2VydGlvbnMoKyksIDM1IGRlbGV0aW9ucygtKQotIG1vZGUgY2hhbmdlIDEwMDc1NSA9PiAxMDA2NDQgdGVzdC9qc29uL2pzb25fZ2VuZXJhdG9yX3Rlc3QucmIKLQotSW5kZXg6IHJ1YnktMi40LjAvZXh0L2pzb24vZmJ1ZmZlci9mYnVmZmVyLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBydWJ5LTIuNC4wLm9yaWcvZXh0L2pzb24vZmJ1ZmZlci9mYnVmZmVyLmgKLSsrKyBydWJ5LTIuNC4wL2V4dC9qc29uL2ZidWZmZXIvZmJ1ZmZlci5oCi1AQCAtMTIsOSArMTIsNiBAQAotICNkZWZpbmUgUkZMT0FUX1ZBTFVFKHZhbCkgKFJGTE9BVCh2YWwpLT52YWx1ZSkKLSAjZW5kaWYKLSAKLS0jaWZuZGVmIFJBUlJBWV9QVFIKLS0jZGVmaW5lIFJBUlJBWV9QVFIoQVJSQVkpIFJBUlJBWShBUlJBWSktPnB0cgotLSNlbmRpZgotICNpZm5kZWYgUkFSUkFZX0xFTgotICNkZWZpbmUgUkFSUkFZX0xFTihBUlJBWSkgUkFSUkFZKEFSUkFZKS0+bGVuCi0gI2VuZGlmCi1JbmRleDogcnVieS0yLjQuMC9leHQvanNvbi9nZW5lcmF0b3IvZ2VuZXJhdG9yLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBydWJ5LTIuNC4wLm9yaWcvZXh0L2pzb24vZ2VuZXJhdG9yL2dlbmVyYXRvci5jCi0rKysgcnVieS0yLjQuMC9leHQvanNvbi9nZW5lcmF0b3IvZ2VuZXJhdG9yLmMKLUBAIC0zMDgsNyArMzA4LDcgQEAgc3RhdGljIGNoYXIgKmZzdHJuZHVwKGNvbnN0IGNoYXIgKnB0ciwgdQotICAgY2hhciAqcmVzdWx0OwotICAgaWYgKGxlbiA8PSAwKSByZXR1cm4gTlVMTDsKLSAgIHJlc3VsdCA9IEFMTE9DX04oY2hhciwgbGVuKTsKLS0gIG1lbWNjcHkocmVzdWx0LCBwdHIsIDAsIGxlbik7Ci0rICBtZW1jcHkocmVzdWx0LCBwdHIsIGxlbik7Ci0gICByZXR1cm4gcmVzdWx0OwotIH0KLSAKLUBAIC0xMDYyLDcgKzEwNjIsNyBAQCBzdGF0aWMgVkFMVUUgY1N0YXRlX2luZGVudF9zZXQoVkFMVUUgc2VsCi0gICAgICAgICB9Ci0gICAgIH0gZWxzZSB7Ci0gICAgICAgICBpZiAoc3RhdGUtPmluZGVudCkgcnVieV94ZnJlZShzdGF0ZS0+aW5kZW50KTsKLS0gICAgICAgIHN0YXRlLT5pbmRlbnQgPSBzdHJkdXAoUlNUUklOR19QVFIoaW5kZW50KSk7Ci0rICAgICAgICBzdGF0ZS0+aW5kZW50ID0gZnN0cm5kdXAoUlNUUklOR19QVFIoaW5kZW50KSwgbGVuKTsKLSAgICAgICAgIHN0YXRlLT5pbmRlbnRfbGVuID0gbGVuOwotICAgICB9Ci0gICAgIHJldHVybiBRbmlsOwotQEAgLTExMDAsNyArMTEwMCw3IEBAIHN0YXRpYyBWQUxVRSBjU3RhdGVfc3BhY2Vfc2V0KFZBTFVFIHNlbGYKLSAgICAgICAgIH0KLSAgICAgfSBlbHNlIHsKLSAgICAgICAgIGlmIChzdGF0ZS0+c3BhY2UpIHJ1YnlfeGZyZWUoc3RhdGUtPnNwYWNlKTsKLS0gICAgICAgIHN0YXRlLT5zcGFjZSA9IHN0cmR1cChSU1RSSU5HX1BUUihzcGFjZSkpOwotKyAgICAgICAgc3RhdGUtPnNwYWNlID0gZnN0cm5kdXAoUlNUUklOR19QVFIoc3BhY2UpLCBsZW4pOwotICAgICAgICAgc3RhdGUtPnNwYWNlX2xlbiA9IGxlbjsKLSAgICAgfQotICAgICByZXR1cm4gUW5pbDsKLUBAIC0xMTM2LDcgKzExMzYsNyBAQCBzdGF0aWMgVkFMVUUgY1N0YXRlX3NwYWNlX2JlZm9yZV9zZXQoVkFMCi0gICAgICAgICB9Ci0gICAgIH0gZWxzZSB7Ci0gICAgICAgICBpZiAoc3RhdGUtPnNwYWNlX2JlZm9yZSkgcnVieV94ZnJlZShzdGF0ZS0+c3BhY2VfYmVmb3JlKTsKLS0gICAgICAgIHN0YXRlLT5zcGFjZV9iZWZvcmUgPSBzdHJkdXAoUlNUUklOR19QVFIoc3BhY2VfYmVmb3JlKSk7Ci0rICAgICAgICBzdGF0ZS0+c3BhY2VfYmVmb3JlID0gZnN0cm5kdXAoUlNUUklOR19QVFIoc3BhY2VfYmVmb3JlKSwgbGVuKTsKLSAgICAgICAgIHN0YXRlLT5zcGFjZV9iZWZvcmVfbGVuID0gbGVuOwotICAgICB9Ci0gICAgIHJldHVybiBRbmlsOwotQEAgLTExNzMsNyArMTE3Myw3IEBAIHN0YXRpYyBWQUxVRSBjU3RhdGVfb2JqZWN0X25sX3NldChWQUxVRQotICAgICAgICAgfQotICAgICB9IGVsc2UgewotICAgICAgICAgaWYgKHN0YXRlLT5vYmplY3RfbmwpIHJ1YnlfeGZyZWUoc3RhdGUtPm9iamVjdF9ubCk7Ci0tICAgICAgICBzdGF0ZS0+b2JqZWN0X25sID0gc3RyZHVwKFJTVFJJTkdfUFRSKG9iamVjdF9ubCkpOwotKyAgICAgICAgc3RhdGUtPm9iamVjdF9ubCA9IGZzdHJuZHVwKFJTVFJJTkdfUFRSKG9iamVjdF9ubCksIGxlbik7Ci0gICAgICAgICBzdGF0ZS0+b2JqZWN0X25sX2xlbiA9IGxlbjsKLSAgICAgfQotICAgICByZXR1cm4gUW5pbDsKLUBAIC0xMjA4LDcgKzEyMDgsNyBAQCBzdGF0aWMgVkFMVUUgY1N0YXRlX2FycmF5X25sX3NldChWQUxVRSBzCi0gICAgICAgICB9Ci0gICAgIH0gZWxzZSB7Ci0gICAgICAgICBpZiAoc3RhdGUtPmFycmF5X25sKSBydWJ5X3hmcmVlKHN0YXRlLT5hcnJheV9ubCk7Ci0tICAgICAgICBzdGF0ZS0+YXJyYXlfbmwgPSBzdHJkdXAoUlNUUklOR19QVFIoYXJyYXlfbmwpKTsKLSsgICAgICAgIHN0YXRlLT5hcnJheV9ubCA9IGZzdHJuZHVwKFJTVFJJTkdfUFRSKGFycmF5X25sKSwgbGVuKTsKLSAgICAgICAgIHN0YXRlLT5hcnJheV9ubF9sZW4gPSBsZW47Ci0gICAgIH0KLSAgICAgcmV0dXJuIFFuaWw7Ci1JbmRleDogcnVieS0yLjQuMC9leHQvanNvbi9nZW5lcmF0b3IvZ2VuZXJhdG9yLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBydWJ5LTIuNC4wLm9yaWcvZXh0L2pzb24vZ2VuZXJhdG9yL2dlbmVyYXRvci5oCi0rKysgcnVieS0yLjQuMC9leHQvanNvbi9nZW5lcmF0b3IvZ2VuZXJhdG9yLmgKLUBAIC0xLDcgKzEsNiBAQAotICNpZm5kZWYgX0dFTkVSQVRPUl9IXwotICNkZWZpbmUgX0dFTkVSQVRPUl9IXwotIAotLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8bWF0aC5oPgotICNpbmNsdWRlIDxjdHlwZS5oPgotIAotSW5kZXg6IHJ1YnktMi40LjAvZXh0L2pzb24vbGliL2pzb24vdmVyc2lvbi5yYgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHJ1YnktMi40LjAub3JpZy9leHQvanNvbi9saWIvanNvbi92ZXJzaW9uLnJiCi0rKysgcnVieS0yLjQuMC9leHQvanNvbi9saWIvanNvbi92ZXJzaW9uLnJiCi1AQCAtMSw3ICsxLDcgQEAKLSAjIGZyb3plbl9zdHJpbmdfbGl0ZXJhbDogZmFsc2UKLSBtb2R1bGUgSlNPTgotICAgIyBKU09OIHZlcnNpb24KLS0gIFZFUlNJT04gICAgICAgICA9ICcyLjAuMicKLSsgIFZFUlNJT04gICAgICAgICA9ICcyLjAuNCcKLSAgIFZFUlNJT05fQVJSQVkgICA9IFZFUlNJT04uc3BsaXQoL1wuLykubWFwIHsgfHh8IHgudG9faSB9ICMgOm5vZG9jOgotICAgVkVSU0lPTl9NQUpPUiAgID0gVkVSU0lPTl9BUlJBWVswXSAjIDpub2RvYzoKLSAgIFZFUlNJT05fTUlOT1IgICA9IFZFUlNJT05fQVJSQVlbMV0gIyA6bm9kb2M6Ci1JbmRleDogcnVieS0yLjQuMC9leHQvanNvbi9wYXJzZXIvcGFyc2VyLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBydWJ5LTIuNC4wLm9yaWcvZXh0L2pzb24vcGFyc2VyL3BhcnNlci5jCi0rKysgcnVieS0yLjQuMC9leHQvanNvbi9wYXJzZXIvcGFyc2VyLmMKLUBAIC0xNDM1LDEzICsxNDM1LDIxIEBAIHN0YXRpYyBWQUxVRSBqc29uX3N0cmluZ191bmVzY2FwZShWQUxVRQotICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgIGNhc2UgJ3UnOgotICAgICAgICAgICAgICAgICAgICAgaWYgKHBlID4gc3RyaW5nRW5kIC0gNCkgewotLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBRbmlsOwotKyAgICAgICAgICAgICAgICAgICAgICByYl9lbmNfcmFpc2UoCi0rICAgICAgICAgICAgICAgICAgICAgICAgRVhDX0VOQ09ESU5HIGVQYXJzZXJFcnJvciwKLSsgICAgICAgICAgICAgICAgICAgICAgICAiJXU6IGluY29tcGxldGUgdW5pY29kZSBjaGFyYWN0ZXIgZXNjYXBlIHNlcXVlbmNlIGF0ICclcyciLCBfX0xJTkVfXywgcAotKyAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICBVVEYzMiBjaCA9IHVuZXNjYXBlX3VuaWNvZGUoKHVuc2lnbmVkIGNoYXIgKikgKytwZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgcGUgKz0gMzsKLSAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVU5JX1NVUl9ISUdIX1NUQVJUID09IChjaCAmIDB4RkMwMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGUrKzsKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlID4gc3RyaW5nRW5kIC0gNikgcmV0dXJuIFFuaWw7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZSA+IHN0cmluZ0VuZCAtIDYpIHsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYl9lbmNfcmFpc2UoCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWENfRU5DT0RJTkcgZVBhcnNlckVycm9yLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiV1OiBpbmNvbXBsZXRlIHN1cnJvZ2F0ZSBwYWlyIGF0ICclcyciLCBfX0xJTkVfXywgcAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVbMF0gPT0gJ1xcJyAmJiBwZVsxXSA9PSAndScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVURjMyIHN1ciA9IHVuZXNjYXBlX3VuaWNvZGUoKHVuc2lnbmVkIGNoYXIgKikgcGUgKyAyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gKCgoY2ggJiAweDNGKSA8PCAxMCkgfCAoKCgoY2ggPj4gNikgJiAweEYpICsgMSkgPDwgMTYpCi1AQCAtMTQ3MSw3ICsxNDc5LDcgQEAgc3RhdGljIFZBTFVFIGpzb25fc3RyaW5nX3VuZXNjYXBlKFZBTFVFCi0gfQotIAotIAotLSNsaW5lIDE0NzUgInBhcnNlci5jIgotKyNsaW5lIDE0ODMgInBhcnNlci5jIgotIGVudW0ge0pTT05fc3RyaW5nX3N0YXJ0ID0gMX07Ci0gZW51bSB7SlNPTl9zdHJpbmdfZmlyc3RfZmluYWwgPSA4fTsKLSBlbnVtIHtKU09OX3N0cmluZ19lcnJvciA9IDB9OwotQEAgLTE0NzksNyArMTQ4Nyw3IEBAIGVudW0ge0pTT05fc3RyaW5nX2Vycm9yID0gMH07Ci0gZW51bSB7SlNPTl9zdHJpbmdfZW5fbWFpbiA9IDF9OwotIAotIAotLSNsaW5lIDUwNCAicGFyc2VyLnJsIgotKyNsaW5lIDUxMiAicGFyc2VyLnJsIgotIAotIAotIHN0YXRpYyBpbnQKLUBAIC0xNTAxLDE1ICsxNTA5LDE1IEBAIHN0YXRpYyBjaGFyICpKU09OX3BhcnNlX3N0cmluZyhKU09OX1BhcnMKLSAKLSAgICAgKnJlc3VsdCA9IHJiX3N0cl9idWZfbmV3KDApOwotIAotLSNsaW5lIDE1MDUgInBhcnNlci5jIgotKyNsaW5lIDE1MTMgInBhcnNlci5jIgotIAl7Ci0gCWNzID0gSlNPTl9zdHJpbmdfc3RhcnQ7Ci0gCX0KLSAKLS0jbGluZSA1MjUgInBhcnNlci5ybCIKLSsjbGluZSA1MzMgInBhcnNlci5ybCIKLSAgICAganNvbi0+bWVtbyA9IHA7Ci0gCi0tI2xpbmUgMTUxMyAicGFyc2VyLmMiCi0rI2xpbmUgMTUyMSAicGFyc2VyLmMiCi0gCXsKLSAJaWYgKCBwID09IHBlICkKLSAJCWdvdG8gX3Rlc3RfZW9mOwotQEAgLTE1MzQsNyArMTU0Miw3IEBAIGNhc2UgMjoKLSAJCWdvdG8gc3QwOwotIAlnb3RvIHN0MjsKLSB0cjI6Ci0tI2xpbmUgNDkwICJwYXJzZXIucmwiCi0rI2xpbmUgNDk4ICJwYXJzZXIucmwiCi0gCXsKLSAgICAgICAgICpyZXN1bHQgPSBqc29uX3N0cmluZ191bmVzY2FwZSgqcmVzdWx0LCBqc29uLT5tZW1vICsgMSwgcCk7Ci0gICAgICAgICBpZiAoTklMX1AoKnJlc3VsdCkpIHsKLUBAIC0xNTQ1LDE0ICsxNTUzLDE0IEBAIHRyMjoKLSAgICAgICAgICAgICB7cCA9ICgoIHAgKyAxKSktMTt9Ci0gICAgICAgICB9Ci0gICAgIH0KLS0jbGluZSA1MDEgInBhcnNlci5ybCIKLSsjbGluZSA1MDkgInBhcnNlci5ybCIKLSAJeyBwLS07IHtwKys7IGNzID0gODsgZ290byBfb3V0O30gfQotIAlnb3RvIHN0ODsKLSBzdDg6Ci0gCWlmICggKytwID09IHBlICkKLSAJCWdvdG8gX3Rlc3RfZW9mODsKLSBjYXNlIDg6Ci0tI2xpbmUgMTU1NiAicGFyc2VyLmMiCi0rI2xpbmUgMTU2NCAicGFyc2VyLmMiCi0gCWdvdG8gc3QwOwotIHN0MzoKLSAJaWYgKCArK3AgPT0gcGUgKQotQEAgLTE2MjgsNyArMTYzNiw3IEBAIGNhc2UgNzoKLSAJX291dDoge30KLSAJfQotIAotLSNsaW5lIDUyNyAicGFyc2VyLnJsIgotKyNsaW5lIDUzNSAicGFyc2VyLnJsIgotIAotICAgICBpZiAoanNvbi0+Y3JlYXRlX2FkZGl0aW9ucyAmJiBSVEVTVChtYXRjaF9zdHJpbmcgPSBqc29uLT5tYXRjaF9zdHJpbmcpKSB7Ci0gICAgICAgICAgIFZBTFVFIGtsYXNzOwotQEAgLTE2NzUsNyArMTY4Myw3IEBAIHN0YXRpYyBWQUxVRSBjb252ZXJ0X2VuY29kaW5nKFZBTFVFIHNvdXIKLSAgICAgfQotICAgICBGT1JDRV9VVEY4KHNvdXJjZSk7Ci0gICB9IGVsc2UgewotLSAgICBzb3VyY2UgPSByYl9zdHJfY29udl9lbmMoc291cmNlLCBOVUxMLCByYl91dGY4X2VuY29kaW5nKCkpOwotKyAgICBzb3VyY2UgPSByYl9zdHJfY29udl9lbmMoc291cmNlLCByYl9lbmNfZ2V0KHNvdXJjZSksIHJiX3V0ZjhfZW5jb2RpbmcoKSk7Ci0gICB9Ci0gI2VuZGlmCi0gICAgIHJldHVybiBzb3VyY2U7Ci1AQCAtMTgwOCw3ICsxODE2LDcgQEAgc3RhdGljIFZBTFVFIGNQYXJzZXJfaW5pdGlhbGl6ZShpbnQgYXJnYwotIH0KLSAKLSAKLS0jbGluZSAxODEyICJwYXJzZXIuYyIKLSsjbGluZSAxODIwICJwYXJzZXIuYyIKLSBlbnVtIHtKU09OX3N0YXJ0ID0gMX07Ci0gZW51bSB7SlNPTl9maXJzdF9maW5hbCA9IDEwfTsKLSBlbnVtIHtKU09OX2Vycm9yID0gMH07Ci1AQCAtMTgxNiw3ICsxODI0LDcgQEAgZW51bSB7SlNPTl9lcnJvciA9IDB9OwotIGVudW0ge0pTT05fZW5fbWFpbiA9IDF9OwotIAotIAotLSNsaW5lIDcyMCAicGFyc2VyLnJsIgotKyNsaW5lIDcyOCAicGFyc2VyLnJsIgotIAotIAotIC8qCi1AQCAtMTgzMywxNiArMTg0MSwxNiBAQCBzdGF0aWMgVkFMVUUgY1BhcnNlcl9wYXJzZShWQUxVRSBzZWxmKQotICAgR0VUX1BBUlNFUjsKLSAKLSAKLS0jbGluZSAxODM3ICJwYXJzZXIuYyIKLSsjbGluZSAxODQ1ICJwYXJzZXIuYyIKLSAJewotIAljcyA9IEpTT05fc3RhcnQ7Ci0gCX0KLSAKLS0jbGluZSA3MzYgInBhcnNlci5ybCIKLSsjbGluZSA3NDQgInBhcnNlci5ybCIKLSAgIHAgPSBqc29uLT5zb3VyY2U7Ci0gICBwZSA9IHAgKyBqc29uLT5sZW47Ci0gCi0tI2xpbmUgMTg0NiAicGFyc2VyLmMiCi0rI2xpbmUgMTg1NCAicGFyc2VyLmMiCi0gCXsKLSAJaWYgKCBwID09IHBlICkKLSAJCWdvdG8gX3Rlc3RfZW9mOwotQEAgLTE4NzYsNyArMTg4NCw3IEBAIHN0MDoKLSBjcyA9IDA7Ci0gCWdvdG8gX291dDsKLSB0cjI6Ci0tI2xpbmUgNzEyICJwYXJzZXIucmwiCi0rI2xpbmUgNzIwICJwYXJzZXIucmwiCi0gCXsKLSAgICAgICAgIGNoYXIgKm5wID0gSlNPTl9wYXJzZV92YWx1ZShqc29uLCBwLCBwZSwgJnJlc3VsdCwgMCk7Ci0gICAgICAgICBpZiAobnAgPT0gTlVMTCkgeyBwLS07IHtwKys7IGNzID0gMTA7IGdvdG8gX291dDt9IH0gZWxzZSB7cCA9ICgoIG5wKSktMTt9Ci1AQCAtMTg4Niw3ICsxODk0LDcgQEAgc3QxMDoKLSAJaWYgKCArK3AgPT0gcGUgKQotIAkJZ290byBfdGVzdF9lb2YxMDsKLSBjYXNlIDEwOgotLSNsaW5lIDE4OTAgInBhcnNlci5jIgotKyNsaW5lIDE4OTggInBhcnNlci5jIgotIAlzd2l0Y2goICgqcCkgKSB7Ci0gCQljYXNlIDEzOiBnb3RvIHN0MTA7Ci0gCQljYXNlIDMyOiBnb3RvIHN0MTA7Ci1AQCAtMTk3NSw3ICsxOTgzLDcgQEAgY2FzZSA5OgotIAlfb3V0OiB7fQotIAl9Ci0gCi0tI2xpbmUgNzM5ICJwYXJzZXIucmwiCi0rI2xpbmUgNzQ3ICJwYXJzZXIucmwiCi0gCi0gICBpZiAoY3MgPj0gSlNPTl9maXJzdF9maW5hbCAmJiBwID09IHBlKSB7Ci0gICAgIHJldHVybiByZXN1bHQ7Ci1JbmRleDogcnVieS0yLjQuMC9leHQvanNvbi9wYXJzZXIvcGFyc2VyLnJsCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gcnVieS0yLjQuMC5vcmlnL2V4dC9qc29uL3BhcnNlci9wYXJzZXIucmwKLSsrKyBydWJ5LTIuNC4wL2V4dC9qc29uL3BhcnNlci9wYXJzZXIucmwKLUBAIC00NDYsMTMgKzQ0NiwyMSBAQCBzdGF0aWMgVkFMVUUganNvbl9zdHJpbmdfdW5lc2NhcGUoVkFMVUUKLSAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICBjYXNlICd1JzoKLSAgICAgICAgICAgICAgICAgICAgIGlmIChwZSA+IHN0cmluZ0VuZCAtIDQpIHsKLS0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUW5pbDsKLSsgICAgICAgICAgICAgICAgICAgICAgcmJfZW5jX3JhaXNlKAotKyAgICAgICAgICAgICAgICAgICAgICAgIEVYQ19FTkNPRElORyBlUGFyc2VyRXJyb3IsCi0rICAgICAgICAgICAgICAgICAgICAgICAgIiV1OiBpbmNvbXBsZXRlIHVuaWNvZGUgY2hhcmFjdGVyIGVzY2FwZSBzZXF1ZW5jZSBhdCAnJXMnIiwgX19MSU5FX18sIHAKLSsgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgVVRGMzIgY2ggPSB1bmVzY2FwZV91bmljb2RlKCh1bnNpZ25lZCBjaGFyICopICsrcGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgIHBlICs9IDM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFVOSV9TVVJfSElHSF9TVEFSVCA9PSAoY2ggJiAweEZDMDApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlKys7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZSA+IHN0cmluZ0VuZCAtIDYpIHJldHVybiBRbmlsOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGUgPiBzdHJpbmdFbmQgLSA2KSB7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmJfZW5jX3JhaXNlKAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhDX0VOQ09ESU5HIGVQYXJzZXJFcnJvciwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIldTogaW5jb21wbGV0ZSBzdXJyb2dhdGUgcGFpciBhdCAnJXMnIiwgX19MSU5FX18sIHAKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlWzBdID09ICdcXCcgJiYgcGVbMV0gPT0gJ3UnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVEYzMiBzdXIgPSB1bmVzY2FwZV91bmljb2RlKCh1bnNpZ25lZCBjaGFyICopIHBlICsgMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9ICgoKGNoICYgMHgzRikgPDwgMTApIHwgKCgoKGNoID4+IDYpICYgMHhGKSArIDEpIDw8IDE2KQotQEAgLTU3MCw3ICs1NzgsNyBAQCBzdGF0aWMgVkFMVUUgY29udmVydF9lbmNvZGluZyhWQUxVRSBzb3VyCi0gICAgIH0KLSAgICAgRk9SQ0VfVVRGOChzb3VyY2UpOwotICAgfSBlbHNlIHsKLS0gICAgc291cmNlID0gcmJfc3RyX2NvbnZfZW5jKHNvdXJjZSwgTlVMTCwgcmJfdXRmOF9lbmNvZGluZygpKTsKLSsgICAgc291cmNlID0gcmJfc3RyX2NvbnZfZW5jKHNvdXJjZSwgcmJfZW5jX2dldChzb3VyY2UpLCByYl91dGY4X2VuY29kaW5nKCkpOwotICAgfQotICNlbmRpZgotICAgICByZXR1cm4gc291cmNlOwotSW5kZXg6IHJ1YnktMi40LjAvdGVzdC9qc29uL2pzb25fZW5jb2RpbmdfdGVzdC5yYgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHJ1YnktMi40LjAub3JpZy90ZXN0L2pzb24vanNvbl9lbmNvZGluZ190ZXN0LnJiCi0rKysgcnVieS0yLjQuMC90ZXN0L2pzb24vanNvbl9lbmNvZGluZ190ZXN0LnJiCi1AQCAtNzksNiArNzksOCBAQCBjbGFzcyBKU09ORW5jb2RpbmdUZXN0IDwgVGVzdDo6VW5pdDo6VGVzCi0gICAgIGpzb24gPSAnWyJcdWQ4NDBcdWRjMDEiXScKLSAgICAgYXNzZXJ0X2VxdWFsIGpzb24sIGdlbmVyYXRlKHV0ZjgsIDphc2NpaV9vbmx5ID0+IHRydWUpCi0gICAgIGFzc2VydF9lcXVhbCB1dGY4LCBwYXJzZShqc29uKQotKyAgICBhc3NlcnRfcmFpc2UoSlNPTjo6UGFyc2VyRXJyb3IpIHsgcGFyc2UoJyJcdSInKSB9Ci0rICAgIGFzc2VydF9yYWlzZShKU09OOjpQYXJzZXJFcnJvcikgeyBwYXJzZSgnIlx1ZDgwMCInKSB9Ci0gICBlbmQKLSAKLSAgIGRlZiB0ZXN0X2NoYXJzCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieS9leHRtay5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5L2V4dG1rLnBhdGNoCmluZGV4IDhiNjg0NTAuLmE1YjIxODQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5L2V4dG1rLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5L2V4dG1rLnBhdGNoCkBAIC0xLDMgKzEsNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiBkaWZmIC1ydSBydWJ5LTEuOC43LXAyNDgub3JpZy9leHQvZXh0bWsucmIgcnVieS0xLjguNy1wMjQ4L2V4dC9leHRtay5yYgogLS0tIHJ1YnktMS44LjctcDI0OC5vcmlnL2V4dC9leHRtay5yYgkyMDA5LTEyLTI0IDAzOjAxOjU4LjAwMDAwMDAwMCAtMDYwMAogKysrIHJ1YnktMS44LjctcDI0OC9leHQvZXh0bWsucmIJMjAxMC0wMi0xMiAxNTo1NToyNy4zNzAwNjE1NTggLTA2MDAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5L3J1YnktQ1ZFLTIwMTctMTQwNjQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieS9ydWJ5LUNWRS0yMDE3LTE0MDY0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZTY5M2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieS9ydWJ5LUNWRS0yMDE3LTE0MDY0LnBhdGNoCkBAIC0wLDAgKzEsODcgQEAKK0Zyb20gOGY3ODJmZDhlMTgxZDljZmU5Mzg3ZGVkNDNhNWNhOTY5MjI2NmI4NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZsb3JpYW4gRnJhbmsgPGZsb3JpQHBpbmcuZGU+CitEYXRlOiBUaHUsIDIgTWFyIDIwMTcgMTI6MTI6MzMgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IGFyYml0cmFyeSBoZWFwIGV4cG9zdXJlIHByb2JsZW0KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorQ1ZFOiBDVkUtMjAxNy0xNDA2NAorCitTaWduZWQtb2ZmLWJ5OiBPdmlkaXUgUGFuYWl0IDxvdmlkaXUucGFuYWl0QHdpbmRyaXZlci5jb20+CistLS0KKyBleHQvanNvbi9nZW5lcmF0b3IvZ2VuZXJhdG9yLmMgfCAxMiArKysrKystLS0tLS0KKyBleHQvanNvbi9nZW5lcmF0b3IvZ2VuZXJhdG9yLmggfCAgMSAtCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9leHQvanNvbi9nZW5lcmF0b3IvZ2VuZXJhdG9yLmMgYi9leHQvanNvbi9nZW5lcmF0b3IvZ2VuZXJhdG9yLmMKK2luZGV4IGVmODViYjcuLmM4ODgxOGMgMTAwNjQ0CistLS0gYS9leHQvanNvbi9nZW5lcmF0b3IvZ2VuZXJhdG9yLmMKKysrKyBiL2V4dC9qc29uL2dlbmVyYXRvci9nZW5lcmF0b3IuYworQEAgLTMwOCw3ICszMDgsNyBAQCBzdGF0aWMgY2hhciAqZnN0cm5kdXAoY29uc3QgY2hhciAqcHRyLCB1bnNpZ25lZCBsb25nIGxlbikgeworICAgY2hhciAqcmVzdWx0OworICAgaWYgKGxlbiA8PSAwKSByZXR1cm4gTlVMTDsKKyAgIHJlc3VsdCA9IEFMTE9DX04oY2hhciwgbGVuKTsKKy0gIG1lbWNjcHkocmVzdWx0LCBwdHIsIDAsIGxlbik7CisrICBtZW1jcHkocmVzdWx0LCBwdHIsIGxlbik7CisgICByZXR1cm4gcmVzdWx0OworIH0KKyAKK0BAIC0xMDYyLDcgKzEwNjIsNyBAQCBzdGF0aWMgVkFMVUUgY1N0YXRlX2luZGVudF9zZXQoVkFMVUUgc2VsZiwgVkFMVUUgaW5kZW50KQorICAgICAgICAgfQorICAgICB9IGVsc2UgeworICAgICAgICAgaWYgKHN0YXRlLT5pbmRlbnQpIHJ1YnlfeGZyZWUoc3RhdGUtPmluZGVudCk7CistICAgICAgICBzdGF0ZS0+aW5kZW50ID0gc3RyZHVwKFJTVFJJTkdfUFRSKGluZGVudCkpOworKyAgICAgICAgc3RhdGUtPmluZGVudCA9IGZzdHJuZHVwKFJTVFJJTkdfUFRSKGluZGVudCksIGxlbik7CisgICAgICAgICBzdGF0ZS0+aW5kZW50X2xlbiA9IGxlbjsKKyAgICAgfQorICAgICByZXR1cm4gUW5pbDsKK0BAIC0xMTAwLDcgKzExMDAsNyBAQCBzdGF0aWMgVkFMVUUgY1N0YXRlX3NwYWNlX3NldChWQUxVRSBzZWxmLCBWQUxVRSBzcGFjZSkKKyAgICAgICAgIH0KKyAgICAgfSBlbHNlIHsKKyAgICAgICAgIGlmIChzdGF0ZS0+c3BhY2UpIHJ1YnlfeGZyZWUoc3RhdGUtPnNwYWNlKTsKKy0gICAgICAgIHN0YXRlLT5zcGFjZSA9IHN0cmR1cChSU1RSSU5HX1BUUihzcGFjZSkpOworKyAgICAgICAgc3RhdGUtPnNwYWNlID0gZnN0cm5kdXAoUlNUUklOR19QVFIoc3BhY2UpLCBsZW4pOworICAgICAgICAgc3RhdGUtPnNwYWNlX2xlbiA9IGxlbjsKKyAgICAgfQorICAgICByZXR1cm4gUW5pbDsKK0BAIC0xMTM2LDcgKzExMzYsNyBAQCBzdGF0aWMgVkFMVUUgY1N0YXRlX3NwYWNlX2JlZm9yZV9zZXQoVkFMVUUgc2VsZiwgVkFMVUUgc3BhY2VfYmVmb3JlKQorICAgICAgICAgfQorICAgICB9IGVsc2UgeworICAgICAgICAgaWYgKHN0YXRlLT5zcGFjZV9iZWZvcmUpIHJ1YnlfeGZyZWUoc3RhdGUtPnNwYWNlX2JlZm9yZSk7CistICAgICAgICBzdGF0ZS0+c3BhY2VfYmVmb3JlID0gc3RyZHVwKFJTVFJJTkdfUFRSKHNwYWNlX2JlZm9yZSkpOworKyAgICAgICAgc3RhdGUtPnNwYWNlX2JlZm9yZSA9IGZzdHJuZHVwKFJTVFJJTkdfUFRSKHNwYWNlX2JlZm9yZSksIGxlbik7CisgICAgICAgICBzdGF0ZS0+c3BhY2VfYmVmb3JlX2xlbiA9IGxlbjsKKyAgICAgfQorICAgICByZXR1cm4gUW5pbDsKK0BAIC0xMTczLDcgKzExNzMsNyBAQCBzdGF0aWMgVkFMVUUgY1N0YXRlX29iamVjdF9ubF9zZXQoVkFMVUUgc2VsZiwgVkFMVUUgb2JqZWN0X25sKQorICAgICAgICAgfQorICAgICB9IGVsc2UgeworICAgICAgICAgaWYgKHN0YXRlLT5vYmplY3RfbmwpIHJ1YnlfeGZyZWUoc3RhdGUtPm9iamVjdF9ubCk7CistICAgICAgICBzdGF0ZS0+b2JqZWN0X25sID0gc3RyZHVwKFJTVFJJTkdfUFRSKG9iamVjdF9ubCkpOworKyAgICAgICAgc3RhdGUtPm9iamVjdF9ubCA9IGZzdHJuZHVwKFJTVFJJTkdfUFRSKG9iamVjdF9ubCksIGxlbik7CisgICAgICAgICBzdGF0ZS0+b2JqZWN0X25sX2xlbiA9IGxlbjsKKyAgICAgfQorICAgICByZXR1cm4gUW5pbDsKK0BAIC0xMjA4LDcgKzEyMDgsNyBAQCBzdGF0aWMgVkFMVUUgY1N0YXRlX2FycmF5X25sX3NldChWQUxVRSBzZWxmLCBWQUxVRSBhcnJheV9ubCkKKyAgICAgICAgIH0KKyAgICAgfSBlbHNlIHsKKyAgICAgICAgIGlmIChzdGF0ZS0+YXJyYXlfbmwpIHJ1YnlfeGZyZWUoc3RhdGUtPmFycmF5X25sKTsKKy0gICAgICAgIHN0YXRlLT5hcnJheV9ubCA9IHN0cmR1cChSU1RSSU5HX1BUUihhcnJheV9ubCkpOworKyAgICAgICAgc3RhdGUtPmFycmF5X25sID0gZnN0cm5kdXAoUlNUUklOR19QVFIoYXJyYXlfbmwpLCBsZW4pOworICAgICAgICAgc3RhdGUtPmFycmF5X25sX2xlbiA9IGxlbjsKKyAgICAgfQorICAgICByZXR1cm4gUW5pbDsKK2RpZmYgLS1naXQgYS9leHQvanNvbi9nZW5lcmF0b3IvZ2VuZXJhdG9yLmggYi9leHQvanNvbi9nZW5lcmF0b3IvZ2VuZXJhdG9yLmgKK2luZGV4IDkwMGI0ZDUuLmMzNjdhNjIgMTAwNjQ0CistLS0gYS9leHQvanNvbi9nZW5lcmF0b3IvZ2VuZXJhdG9yLmgKKysrKyBiL2V4dC9qc29uL2dlbmVyYXRvci9nZW5lcmF0b3IuaAorQEAgLTEsNyArMSw2IEBACisgI2lmbmRlZiBfR0VORVJBVE9SX0hfCisgI2RlZmluZSBfR0VORVJBVE9SX0hfCisgCistI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxtYXRoLmg+CisgI2luY2x1ZGUgPGN0eXBlLmg+CisgCistLSAKKzIuMTAuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieV8yLjQuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5XzIuNC4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2M1MmQ2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5XzIuNC4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotcmVxdWlyZSBydWJ5LmluYwotCi1TUkNfVVJJICs9ICIgXAotICAgICAgICAgICBmaWxlOi8vcnVieS1DVkUtMjAxNy05MjI0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3J1YnktQ1ZFLTIwMTctOTIyNi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9ydWJ5LUNWRS0yMDE3LTkyMjcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vcnVieS1DVkUtMjAxNy05MjI4LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3J1YnktQ1ZFLTIwMTctOTIyOS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNy0xNDA2NC5wYXRjaCBcCi0gICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjdlOTQ4NWRjZGI4NmZmNTI2NjI3MjhkZTIwMDNlNjI1IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjE1MmZkMGJkMTVhOTBiNGExODIxMzQ0OGY0ODVkNGI1M2U5Zjc2NjJlMTUwODE5MGFhNWI3MDI0NDZiMjllM2QiCi0KLSMgaXQncyB1bmtub3duIHRvIGNvbmZpZ3VyZSBzY3JpcHQsIGJ1dCB0aGVuIHBhc3NlZCB0byBleHRjb25mLnJiCi0jIG1heWJlIGl0J3Mgbm90IHJlYWxseSBuZWVkZWQgYXMgd2UncmUgaGFyZGNvZGluZyB0aGUgcmVzdWx0IHdpdGgKLSMgMDAwMS1zb2NrZXQtZXh0Y29uZi1oYXJkY29kZS13aWRlLWdldGFkZHItaW5mby10ZXN0LW91dGNvLnBhdGNoCi1VTktOT1dOX0NPTkZJR1VSRV9XSElURUxJU1QgKz0gIi0tZW5hYmxlLXdpZGUtZ2V0YWRkcmluZm8iCi0KLVBBQ0tBR0VDT05GSUcgPz89ICIiCi1QQUNLQUdFQ09ORklHICs9ICIke0BiYi51dGlscy5maWx0ZXIoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgZCl9IgotCi1QQUNLQUdFQ09ORklHW3ZhbGdyaW5kXSA9ICItLXdpdGgtdmFsZ3JpbmQ9eWVzLCAtLXdpdGgtdmFsZ3JpbmQ9bm8sIHZhbGdyaW5kIgotUEFDS0FHRUNPTkZJR1tncG1dID0gIi0td2l0aC1nbXA9eWVzLCAtLXdpdGgtZ21wPW5vLCBnbXAiCi1QQUNLQUdFQ09ORklHW2lwdjZdID0gIiwtLWVuYWJsZS13aWRlLWdldGFkZHJpbmZvLCIKLQotRVhUUkFfQVVUT1JFQ09ORiArPSAiLS1leGNsdWRlPWFjbG9jYWwiCi0KLUVYVFJBX09FQ09ORiA9ICJcCi0gICAgLS1kaXNhYmxlLXZlcnNpb25lZC1wYXRocyBcCi0gICAgLS1kaXNhYmxlLXJwYXRoIFwKLSAgICAtLWRpc2FibGUtZHRyYWNlIFwKLSAgICAtLWVuYWJsZS1zaGFyZWQgXAotICAgIC0tZW5hYmxlLWxvYWQtcmVsYXRpdmUgXAotIgotCi1kb19pbnN0YWxsKCkgewotICAgIG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAotfQotCi1QQUNLQUdFUyA9KyAiJHtQTn0tcmktZG9jcyAke1BOfS1yZG9jIgotCi1TVU1NQVJZXyR7UE59LXJpLWRvY3MgPSAicmkgKFJ1YnkgSW50ZXJhY3RpdmUpIGRvY3VtZW50YXRpb24gZm9yIHRoZSBSdWJ5IHN0YW5kYXJkIGxpYnJhcnkiCi1SREVQRU5EU18ke1BOfS1yaS1kb2NzID0gIiR7UE59IgotRklMRVNfJHtQTn0tcmktZG9jcyArPSAiJHtkYXRhZGlyfS9yaSIKLQotU1VNTUFSWV8ke1BOfS1yZG9jID0gIlJEb2MgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3IgZnJvbSBSdWJ5IHNvdXJjZSIKLVJERVBFTkRTXyR7UE59LXJkb2MgPSAiJHtQTn0iCi1GSUxFU18ke1BOfS1yZG9jICs9ICIke2xpYmRpcn0vcnVieS8qL3Jkb2MgJHtiaW5kaXJ9L3Jkb2MiCi0KLUZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3J1YnlnZW1zIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5XzIuNC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnlfMi40LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QyN2FjOAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5XzIuNC4xLmJiCkBAIC0wLDAgKzEsNTMgQEAKK3JlcXVpcmUgcnVieS5pbmMKKworU1JDX1VSSSArPSAiIFwKKyAgICAgICAgICAgZmlsZTovL3J1YnktQ1ZFLTIwMTctOTIyNC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydWJ5LUNWRS0yMDE3LTkyMjYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVieS1DVkUtMjAxNy05MjI3LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1YnktQ1ZFLTIwMTctOTIyOC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydWJ5LUNWRS0yMDE3LTkyMjkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVieS1DVkUtMjAxNy0xNDA2NC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjc4MmJjYTU2MmU0NzRkZDI1OTU2ZGQwMDE3ZDkyNjc3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImEzMzBlMTBkNWNiNWU1M2IzYTAwNzgzMjZjNTczMTg4OGJiNTVlMzJjNGFiZmViMjdkOWU3ZjhlNWQwMDAyNTAiCisKKyMgaXQncyB1bmtub3duIHRvIGNvbmZpZ3VyZSBzY3JpcHQsIGJ1dCB0aGVuIHBhc3NlZCB0byBleHRjb25mLnJiCisjIG1heWJlIGl0J3Mgbm90IHJlYWxseSBuZWVkZWQgYXMgd2UncmUgaGFyZGNvZGluZyB0aGUgcmVzdWx0IHdpdGgKKyMgMDAwMS1zb2NrZXQtZXh0Y29uZi1oYXJkY29kZS13aWRlLWdldGFkZHItaW5mby10ZXN0LW91dGNvLnBhdGNoCitVTktOT1dOX0NPTkZJR1VSRV9XSElURUxJU1QgKz0gIi0tZW5hYmxlLXdpZGUtZ2V0YWRkcmluZm8iCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHICs9ICIke0BiYi51dGlscy5maWx0ZXIoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgZCl9IgorCitQQUNLQUdFQ09ORklHW3ZhbGdyaW5kXSA9ICItLXdpdGgtdmFsZ3JpbmQ9eWVzLCAtLXdpdGgtdmFsZ3JpbmQ9bm8sIHZhbGdyaW5kIgorUEFDS0FHRUNPTkZJR1tncG1dID0gIi0td2l0aC1nbXA9eWVzLCAtLXdpdGgtZ21wPW5vLCBnbXAiCitQQUNLQUdFQ09ORklHW2lwdjZdID0gIiwtLWVuYWJsZS13aWRlLWdldGFkZHJpbmZvLCIKKworRVhUUkFfQVVUT1JFQ09ORiArPSAiLS1leGNsdWRlPWFjbG9jYWwiCisKK0VYVFJBX09FQ09ORiA9ICJcCisgICAgLS1kaXNhYmxlLXZlcnNpb25lZC1wYXRocyBcCisgICAgLS1kaXNhYmxlLXJwYXRoIFwKKyAgICAtLWRpc2FibGUtZHRyYWNlIFwKKyAgICAtLWVuYWJsZS1zaGFyZWQgXAorICAgIC0tZW5hYmxlLWxvYWQtcmVsYXRpdmUgXAorIgorCitkb19pbnN0YWxsKCkgeworICAgIG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tcmktZG9jcyAke1BOfS1yZG9jIgorCitTVU1NQVJZXyR7UE59LXJpLWRvY3MgPSAicmkgKFJ1YnkgSW50ZXJhY3RpdmUpIGRvY3VtZW50YXRpb24gZm9yIHRoZSBSdWJ5IHN0YW5kYXJkIGxpYnJhcnkiCitSREVQRU5EU18ke1BOfS1yaS1kb2NzID0gIiR7UE59IgorRklMRVNfJHtQTn0tcmktZG9jcyArPSAiJHtkYXRhZGlyfS9yaSIKKworU1VNTUFSWV8ke1BOfS1yZG9jID0gIlJEb2MgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3IgZnJvbSBSdWJ5IHNvdXJjZSIKK1JERVBFTkRTXyR7UE59LXJkb2MgPSAiJHtQTn0iCitGSUxFU18ke1BOfS1yZG9jICs9ICIke2xpYmRpcn0vcnVieS8qL3Jkb2MgJHtiaW5kaXJ9L3Jkb2MiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3J1YnlnZW1zIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMuc2VydmljZSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMuc2VydmljZQppbmRleCA4NWEwNDM5Li4xYjcxYTFmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzLnNlcnZpY2UKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy5zZXJ2aWNlCkBAIC04LDcgKzgsNyBAQAogW1NlcnZpY2VdCiBUeXBlPW9uZXNob3QKIEV4ZWNTdGFydD0jU0JJTkRJUiMvcnVuLXBvc3RpbnN0cwotRXhlY1N0YXJ0UG9zdD0jQkFTRV9CSU5ESVIjL3N5c3RlbWN0bCBkaXNhYmxlIHJ1bi1wb3N0aW5zdHMuc2VydmljZQorRXhlY1N0YXJ0UG9zdD0jQkFTRV9CSU5ESVIjL3N5c3RlbWN0bCAtLW5vLXJlbG9hZCBkaXNhYmxlIHJ1bi1wb3N0aW5zdHMuc2VydmljZQogUmVtYWluQWZ0ZXJFeGl0PU5vCiBUaW1lb3V0U2VjPTAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zcXVhc2hmcy10b29scy9zcXVhc2hmcy10b29scy9zcXVhc2hmcy10b29scy00LjMtc3lzbWFjcm9zLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zcXVhc2hmcy10b29scy9zcXVhc2hmcy10b29scy9zcXVhc2hmcy10b29scy00LjMtc3lzbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NTIxYTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NxdWFzaGZzLXRvb2xzL3NxdWFzaGZzLXRvb2xzL3NxdWFzaGZzLXRvb2xzLTQuMy1zeXNtYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSBodHRwczovL2dpdHdlYi5nZW50b28ub3JnL3JlcG8vZ2VudG9vLmdpdC90cmVlL3N5cy1mcy9zcXVhc2hmcy10b29scy9maWxlcy9zcXVhc2hmcy10b29scy00LjMtc3lzbWFjcm9zLnBhdGNoCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKworc3lzL3R5cGVzLmggbWlnaHQgbm90IGFsd2F5cyBpbmNsdWRlIHN5cy9zeXNtYWNyb3MuaCBmb3IgbWFqb3IvbWlub3IvbWFrZWRldgorCistLS0gYS9zcXVhc2hmcy10b29scy9ta3NxdWFzaGZzLmMKKysrKyBiL3NxdWFzaGZzLXRvb2xzL21rc3F1YXNoZnMuYworQEAgLTU5LDYgKzU5LDcgQEAKKyAjZWxzZQorICNpbmNsdWRlIDxlbmRpYW4uaD4KKyAjaW5jbHVkZSA8c3lzL3N5c2luZm8uaD4KKysjaW5jbHVkZSA8c3lzL3N5c21hY3Jvcy5oPgorICNlbmRpZgorIAorICNpbmNsdWRlICJzcXVhc2hmc19mcy5oIgorLS0tIGEvc3F1YXNoZnMtdG9vbHMvdW5zcXVhc2hmcy5jCisrKysgYi9zcXVhc2hmcy10b29scy91bnNxdWFzaGZzLmMKK0BAIC0zOCw2ICszOCwxMCBAQAorICNpbmNsdWRlIDxsaW1pdHMuaD4KKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAKKysjaWZkZWYgbGludXgKKysjaW5jbHVkZSA8c3lzL3N5c21hY3Jvcy5oPgorKyNlbmRpZgorKworIHN0cnVjdCBjYWNoZSAqZnJhZ21lbnRfY2FjaGUsICpkYXRhX2NhY2hlOworIHN0cnVjdCBxdWV1ZSAqdG9fcmVhZGVyLCAqdG9faW5mbGF0ZSwgKnRvX3dyaXRlciwgKmZyb21fd3JpdGVyOworIHB0aHJlYWRfdCAqdGhyZWFkLCAqaW5mbGF0b3JfdGhyZWFkOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zcXVhc2hmcy10b29scy9zcXVhc2hmcy10b29sc19naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NxdWFzaGZzLXRvb2xzL3NxdWFzaGZzLXRvb2xzX2dpdC5iYgppbmRleCAzM2VkMDlhLi4wZjk5MTcwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NxdWFzaGZzLXRvb2xzL3NxdWFzaGZzLXRvb2xzX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NxdWFzaGZzLXRvb2xzL3NxdWFzaGZzLXRvb2xzX2dpdC5iYgpAQCAtMTMsOCArMTMsMTAgQEAKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9wbG91Z2hlci9zcXVhc2hmcy10b29scy5naXQ7cHJvdG9jb2w9aHR0cHMgXAogICAgICAgICAgICBodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9zZXZlbnppcC9sem1hNDY1LnRhci5iejI7bmFtZT1sem1hIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtbWtzcXVhc2hmcy5jLWdldC1pbmxpbmUtZnVuY3Rpb25zLXdvcmstd2l0aC1DOTkucGF0Y2g7c3RyaXBsZXZlbD0yIFwKKyAgICAgICAgICAgZmlsZTovL3NxdWFzaGZzLXRvb2xzLTQuMy1zeXNtYWNyb3MucGF0Y2g7c3RyaXBsZXZlbD0yIFwKICAgICAgICAgICAgZmlsZTovL2ZpeC1jb21wYXQucGF0Y2ggXAogIgorVVBTVFJFQU1fVkVSU0lPTl9VTktOT1dOID0gIjEiCiBTUkNfVVJJW2x6bWEubWQ1c3VtXSA9ICIyOWQ1ZmZkMDNhNWEzZTUxYWVmNmE3NGU5ZWFmYjc1OSIKIFNSQ19VUklbbHptYS5zaGEyNTZzdW1dID0gImM5MzVmZDA0ZGQ4ZTBlOGM2ODhhMzA3OGYzNjc1ZDY5OTY3OWE5MGJlODFjMTI2ODY4MzdlMDg4MGFhMGZhMWUiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS8wMDAxLXRlc3RzLXNpZ2FjdGlvbi1DaGVjay1mb3ItbWlwcy1hbmQtYWxwaGEtYmVmb3JlLXVzaW4ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvMDAwMS10ZXN0cy1zaWdhY3Rpb24tQ2hlY2stZm9yLW1pcHMtYW5kLWFscGhhLWJlZm9yZS11c2luLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMDk2YjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvMDAwMS10ZXN0cy1zaWdhY3Rpb24tQ2hlY2stZm9yLW1pcHMtYW5kLWFscGhhLWJlZm9yZS11c2luLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gOWYzZmQzODhhZTdjNDY0MjBiY2NiYTQwNTQ2ODY5MGVkNDZkNjY5YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDE4IFNlcCAyMDE3IDIyOjUxOjMyIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHRlc3RzL3NpZ2FjdGlvbjogQ2hlY2sgZm9yIG1pcHMgYW5kIGFscGhhIGJlZm9yZSB1c2luZworIHNhX3Jlc3RvcmVyCisKK2xvY2FsIHN0cnVjdHVyZSBkb2VzIG5vdCBkZWZpbmUgcmVzdG9yZXIgbWVtYmVyIGZvciBtaXBzIGFuZCBhbHBoYQoraW4gZGVmaW5pdGlvbiwgd2UgbmVlZCB0byBtYXRjaCB0aGF0IGFzc3VtcHRpb24gaGVyZSB3aGVyZSB0aGV5IGFyZQorYmVpbmcgc2V0CisKK0ZpeGVzCit8IC4uLy4uL3N0cmFjZS00LjE4L3Rlc3RzL3NpZ2FjdGlvbi5jOjE3NzozNjogZXJyb3I6ICdzdHJ1Y3Rfc2V0X3NhIHtha2Egc3RydWN0IHNldF9zYX0nIGhhcyBubyBtZW1iZXIgbmFtZWQgJ3Jlc3RvcmVyJworfCAgIyBkZWZpbmUgU0FfUkVTVE9SRVJfQVJHUyAsIG5ld19hY3QtPnJlc3RvcmVyCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgdGVzdHMvc2lnYWN0aW9uLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0cy9zaWdhY3Rpb24uYyBiL3Rlc3RzL3NpZ2FjdGlvbi5jCitpbmRleCA3YjQ2OTQ0Li5mNDZjZGE3IDEwMDY0NAorLS0tIGEvdGVzdHMvc2lnYWN0aW9uLmMKKysrKyBiL3Rlc3RzL3NpZ2FjdGlvbi5jCitAQCAtMTcwLDcgKzE3MCw3IEBAIG1haW4odm9pZCkKKyAJc2lnZGVsc2V0KG1hc2subGliYywgU0lHSFVQKTsKKyAKKyAJbWVtY3B5KG5ld19hY3QtPm1hc2ssIG1hc2sub2xkLCBzaXplb2YobWFzay5vbGQpKTsKKy0jaWZkZWYgU0FfUkVTVE9SRVIKKysjaWYgZGVmaW5lZChTQV9SRVNUT1JFUikgJiYgIWRlZmluZWQoTUlQUykgJiYgIWRlZmluZWQoQUxQSEEpCisgCW5ld19hY3QtPmZsYWdzID0gU0FfUkVTVE9SRVI7CisgCW5ld19hY3QtPnJlc3RvcmVyID0gKHVuc2lnbmVkIGxvbmcpIDB4ZGVhZGZhY2VjYWZlZjAwZFVMTDsKKyAjIGRlZmluZSBTQV9SRVNUT1JFUl9GTVQgIiwgc2FfZmxhZ3M9U0FfUkVTVE9SRVIsIHNhX3Jlc3RvcmVyPSUjbHgiCistLSAKKzIuMTQuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvTWFrZWZpbGUtcHRlc3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvTWFrZWZpbGUtcHRlc3QucGF0Y2gKaW5kZXggODc2YzJkOC4uOTdiY2M5MCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL01ha2VmaWxlLXB0ZXN0LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9NYWtlZmlsZS1wdGVzdC5wYXRjaApAQCAtMSwxOSArMSwyMyBAQAotc3RyYWNlOiBBZGQgcHRlc3QKK0Zyb20gMDU3NGFlOTkyNjMwOGRjYmNhNzhiZDhjZDBmMGYxNDNmMTljYmNiNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEdhYnJpZWwgQmFyYnUgPGdhYnJpZWwuYmFyYnVAZW5lYS5jb20+CitEYXRlOiBUaHUsIDI1IEp1bCAyMDEzIDE1OjI4OjMzICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggNC84XSBzdHJhY2U6IEFkZCBwdGVzdAogCiBVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKIAogU2lnbmVkLW9mZi1ieTogR2FicmllbCBCYXJidSA8Z2FicmllbC5iYXJidUBlbmVhLmNvbT4KIFNpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorCiAtLS0KICBjb25maWd1cmUuYWMgICAgICB8ICAyICstCiAgdGVzdHMvTWFrZWZpbGUuYW0gfCAxOCArKysrKysrKysrKysrKysrKysKICAyIGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIAogZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggYjJiMDNjNi4uNDY0YTlkYyAxMDA2NDQKK2luZGV4IDYxZDY0MjUuLjYzODdjMjQgMTAwNjQ0CiAtLS0gYS9jb25maWd1cmUuYWMKICsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTM5LDcgKzM5LDcgQEAgQUNfQ09QWVJJR0hUKFtDb3B5cmlnaHQgKEMpIDE5OTktMjAxNyBUaGUgc3RyYWNlIGRldmVsb3BlcnMuXSkKK0BAIC00MSw3ICs0MSw3IEBAIEFDX0NPUFlSSUdIVChbQ29weXJpZ2h0IChDKSAxOTk5LV1jb3B5cmlnaHRfeWVhclsgVGhlIHN0cmFjZSBkZXZlbG9wZXJzLl0pCiAgQUNfQ09ORklHX1NSQ0RJUihbc3RyYWNlLmNdKQogIEFDX0NPTkZJR19BVVhfRElSKFsuXSkKICBBQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmhdKQpAQCAtMjMsMTEgKzI3LDExIEBACiAgQU1fTUFJTlRBSU5FUl9NT0RFCiAgQUNfQ0FOT05JQ0FMX0hPU1QKIGRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCi1pbmRleCAzMTFkM2JiLi43MmY5MDIyIDEwMDY0NAoraW5kZXggNWFhN2Y4OS4uYTU1YTM1NSAxMDA2NDQKIC0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCiArKysgYi90ZXN0cy9NYWtlZmlsZS5hbQotQEAgLTk2MCwzICs5NjAsMjEgQEAgJChvYmplY3RzKTogc2Nuby5oCi0gQ0xFQU5GSUxFUyA9IGtzeXNlbnQuaCAkKFRFU1RTOj0udG1wKQorQEAgLTM3OSwzICszNzksMjEgQEAgY2xlYW4tbG9jYWwtY2hlY2s6CisgQ0xFQU5GSUxFUyA9IGtzeXNlbnQuaAogIAogIGluY2x1ZGUgLi4vc2Nuby5hbQogKwpAQCAtNDcsNCArNTEsNyBAQAogKwkJaW5zdGFsbCAkKHNyY2RpcikvJCRmaWxlICQoREVTVERJUikvJChURVNURElSKTsgXAogKwkJc2VkIC1pIC1lICdzLyQke3NyY2Rpcj0ufS8uL2cnICQoREVTVERJUikvJChURVNURElSKS8kJGZpbGU7IFwKICsJZG9uZQotKwlmb3IgaSBpbiBuZXQgbmV0LWZkIHNjbV9yaWdodHMtZmQgc2lnYWN0aW9uOyBkbyBzZWQgLWkgLWUgJ3MvJCRzcmNkaXIvLi9nJyAkKERFU1RESVIpLyQoVEVTVERJUikvJCRpLnRlc3Q7IGRvbmUKKysJZm9yIGkgaW4gbmV0IHNjbV9yaWdodHMtZmQgcnRfc2lnYWN0aW9uOyBkbyBzZWQgLWkgLWUgJ3MvJCRzcmNkaXIvLi9nJyAkKERFU1RESVIpLyQoVEVTVERJUikvJCRpLnRlc3Q7IGRvbmUKKy0tIAorMi4xMy4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS91cGRhdGUtZ2F3ay1wYXRocy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS91cGRhdGUtZ2F3ay1wYXRocy5wYXRjaAppbmRleCA5NGVlNTNjLi5mNmZmYThlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvdXBkYXRlLWdhd2stcGF0aHMucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL3VwZGF0ZS1nYXdrLXBhdGhzLnBhdGNoCkBAIC0xMiwyMCArMTIsMjAgQEAKIAogU2lnbmVkLW9mZi1ieTogQW5kcmUgTWNDdXJkeSA8YXJtY2N1cmR5QGdtYWlsLmNvbT4KIC0tLQotIG1wZXJzLmF3ayAgICAgICAgICAgICAgICB8IDIgKy0KLSB0ZXN0cy1tMzIvY2Fwcy5hd2sgICAgICAgfCAyICstCi0gdGVzdHMtbTMyL21hdGNoLmF3ayAgICAgIHwgMiArLQotIHRlc3RzLW0zMi9zaWdhY3Rpb24uYXdrICB8IDIgKy0KLSB0ZXN0cy1teDMyL2NhcHMuYXdrICAgICAgfCAyICstCi0gdGVzdHMtbXgzMi9tYXRjaC5hd2sgICAgIHwgMiArLQotIHRlc3RzLW14MzIvc2lnYWN0aW9uLmF3ayB8IDIgKy0KLSB0ZXN0cy9jYXBzLmF3ayAgICAgICAgICAgfCAyICstCi0gdGVzdHMvbWF0Y2guYXdrICAgICAgICAgIHwgMiArLQotIHRlc3RzL3NpZ2FjdGlvbi5hd2sgICAgICB8IDIgKy0KKyBtcGVycy5hd2sgICAgICAgICAgICAgICAgICAgfCAyICstCisgdGVzdHMtbTMyL2NhcHMuYXdrICAgICAgICAgIHwgMiArLQorIHRlc3RzLW0zMi9tYXRjaC5hd2sgICAgICAgICB8IDIgKy0KKyB0ZXN0cy1tMzIvcnRfc2lnYWN0aW9uLmF3ayAgfCAyICstCisgdGVzdHMtbXgzMi9jYXBzLmF3ayAgICAgICAgIHwgMiArLQorIHRlc3RzLW14MzIvbWF0Y2guYXdrICAgICAgICB8IDIgKy0KKyB0ZXN0cy1teDMyL3J0X3NpZ2FjdGlvbi5hd2sgfCAyICstCisgdGVzdHMvY2Fwcy5hd2sgICAgICAgICAgICAgIHwgMiArLQorIHRlc3RzL21hdGNoLmF3ayAgICAgICAgICAgICB8IDIgKy0KKyB0ZXN0cy9ydF9zaWdhY3Rpb24uYXdrICAgICAgfCAyICstCiAgMTAgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9tcGVycy5hd2sgYi9tcGVycy5hd2sKLWluZGV4IDk5MjQ4YzUuLmZmMTA1MjAgMTAwNjQ0CitpbmRleCBmZTU0NzYzLi5iNTIzOGE4IDEwMDY0NAogLS0tIGEvbXBlcnMuYXdrCiArKysgYi9tcGVycy5hd2sKIEBAIC0xLDQgKzEsNCBAQApAQCAtMzUsNyArMzUsNyBAQAogICMgQ29weXJpZ2h0IChjKSAyMDE1IEVsdmlyYSBLaGFiaXJvdmEgPGxpbmVwcmludGVyMEBnbWFpbC5jb20+CiAgIyBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNiBEbWl0cnkgVi4gTGV2aW4gPGxkdkBhbHRsaW51eC5vcmc+CiBkaWZmIC0tZ2l0IGEvdGVzdHMtbTMyL2NhcHMuYXdrIGIvdGVzdHMtbTMyL2NhcHMuYXdrCi1pbmRleCA2NzAwM2FjLi5hNjZmMWYwIDEwMDY0NAoraW5kZXggYzZlMzFlZi4uNWVmYzZjYyAxMDA2NDQKIC0tLSBhL3Rlc3RzLW0zMi9jYXBzLmF3awogKysrIGIvdGVzdHMtbTMyL2NhcHMuYXdrCiBAQCAtMSw0ICsxLDQgQEAKQEAgLTU0LDE4ICs1NCwxOCBAQAogICMKICAjIENvcHlyaWdodCAoYykgMjAxNC0yMDE1IERtaXRyeSBWLiBMZXZpbiA8bGR2QGFsdGxpbnV4Lm9yZz4KICAjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi1kaWZmIC0tZ2l0IGEvdGVzdHMtbTMyL3NpZ2FjdGlvbi5hd2sgYi90ZXN0cy1tMzIvc2lnYWN0aW9uLmF3awotaW5kZXggNWM2YjZkMC4uM2UxNDQ2NCAxMDA2NDQKLS0tLSBhL3Rlc3RzLW0zMi9zaWdhY3Rpb24uYXdrCi0rKysgYi90ZXN0cy1tMzIvc2lnYWN0aW9uLmF3aworZGlmZiAtLWdpdCBhL3Rlc3RzLW0zMi9ydF9zaWdhY3Rpb24uYXdrIGIvdGVzdHMtbTMyL3J0X3NpZ2FjdGlvbi5hd2sKK2luZGV4IDljM2E5ZWQuLjg0MTQyNDMgMTAwNjQ0CistLS0gYS90ZXN0cy1tMzIvcnRfc2lnYWN0aW9uLmF3aworKysrIGIvdGVzdHMtbTMyL3J0X3NpZ2FjdGlvbi5hd2sKIEBAIC0xLDQgKzEsNCBAQAogLSMhL2Jpbi9nYXdrCiArIyEvdXNyL2Jpbi9nYXdrCiAgIwogICMgQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUgRG1pdHJ5IFYuIExldmluIDxsZHZAYWx0bGludXgub3JnPgotICMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAjIENvcHlyaWdodCAoYykgMjAxNiBFbHZpcmEgS2hhYmlyb3ZhIDxsaW5lcHJpbnRlcjBAZ21haWwuY29tPgogZGlmZiAtLWdpdCBhL3Rlc3RzLW14MzIvY2Fwcy5hd2sgYi90ZXN0cy1teDMyL2NhcHMuYXdrCi1pbmRleCA2NzAwM2FjLi5hNjZmMWYwIDEwMDY0NAoraW5kZXggYzZlMzFlZi4uNWVmYzZjYyAxMDA2NDQKIC0tLSBhL3Rlc3RzLW14MzIvY2Fwcy5hd2sKICsrKyBiL3Rlc3RzLW14MzIvY2Fwcy5hd2sKIEBAIC0xLDQgKzEsNCBAQApAQCAtODQsMTggKzg0LDE4IEBACiAgIwogICMgQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUgRG1pdHJ5IFYuIExldmluIDxsZHZAYWx0bGludXgub3JnPgogICMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLWRpZmYgLS1naXQgYS90ZXN0cy1teDMyL3NpZ2FjdGlvbi5hd2sgYi90ZXN0cy1teDMyL3NpZ2FjdGlvbi5hd2sKLWluZGV4IDVjNmI2ZDAuLjNlMTQ0NjQgMTAwNjQ0Ci0tLS0gYS90ZXN0cy1teDMyL3NpZ2FjdGlvbi5hd2sKLSsrKyBiL3Rlc3RzLW14MzIvc2lnYWN0aW9uLmF3aworZGlmZiAtLWdpdCBhL3Rlc3RzLW14MzIvcnRfc2lnYWN0aW9uLmF3ayBiL3Rlc3RzLW14MzIvcnRfc2lnYWN0aW9uLmF3aworaW5kZXggOWMzYTllZC4uODQxNDI0MyAxMDA2NDQKKy0tLSBhL3Rlc3RzLW14MzIvcnRfc2lnYWN0aW9uLmF3aworKysrIGIvdGVzdHMtbXgzMi9ydF9zaWdhY3Rpb24uYXdrCiBAQCAtMSw0ICsxLDQgQEAKIC0jIS9iaW4vZ2F3awogKyMhL3Vzci9iaW4vZ2F3awogICMKICAjIENvcHlyaWdodCAoYykgMjAxNC0yMDE1IERtaXRyeSBWLiBMZXZpbiA8bGR2QGFsdGxpbnV4Lm9yZz4KLSAjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIyBDb3B5cmlnaHQgKGMpIDIwMTYgRWx2aXJhIEtoYWJpcm92YSA8bGluZXByaW50ZXIwQGdtYWlsLmNvbT4KIGRpZmYgLS1naXQgYS90ZXN0cy9jYXBzLmF3ayBiL3Rlc3RzL2NhcHMuYXdrCi1pbmRleCA2NzAwM2FjLi5hNjZmMWYwIDEwMDY0NAoraW5kZXggYzZlMzFlZi4uNWVmYzZjYyAxMDA2NDQKIC0tLSBhL3Rlc3RzL2NhcHMuYXdrCiArKysgYi90ZXN0cy9jYXBzLmF3awogQEAgLTEsNCArMSw0IEBACkBAIC0xMTQsMTMgKzExNCwxMyBAQAogICMKICAjIENvcHlyaWdodCAoYykgMjAxNC0yMDE1IERtaXRyeSBWLiBMZXZpbiA8bGR2QGFsdGxpbnV4Lm9yZz4KICAjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi1kaWZmIC0tZ2l0IGEvdGVzdHMvc2lnYWN0aW9uLmF3ayBiL3Rlc3RzL3NpZ2FjdGlvbi5hd2sKLWluZGV4IDVjNmI2ZDAuLjNlMTQ0NjQgMTAwNjQ0Ci0tLS0gYS90ZXN0cy9zaWdhY3Rpb24uYXdrCi0rKysgYi90ZXN0cy9zaWdhY3Rpb24uYXdrCitkaWZmIC0tZ2l0IGEvdGVzdHMvcnRfc2lnYWN0aW9uLmF3ayBiL3Rlc3RzL3J0X3NpZ2FjdGlvbi5hd2sKK2luZGV4IDljM2E5ZWQuLjg0MTQyNDMgMTAwNjQ0CistLS0gYS90ZXN0cy9ydF9zaWdhY3Rpb24uYXdrCisrKysgYi90ZXN0cy9ydF9zaWdhY3Rpb24uYXdrCiBAQCAtMSw0ICsxLDQgQEAKIC0jIS9iaW4vZ2F3awogKyMhL3Vzci9iaW4vZ2F3awogICMKICAjIENvcHlyaWdodCAoYykgMjAxNC0yMDE1IERtaXRyeSBWLiBMZXZpbiA8bGR2QGFsdGxpbnV4Lm9yZz4KLSAjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIyBDb3B5cmlnaHQgKGMpIDIwMTYgRWx2aXJhIEtoYWJpcm92YSA8bGluZXByaW50ZXIwQGdtYWlsLmNvbT4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZV80LjE2LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlXzQuMTYuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2Y2QyYWMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlXzQuMTYuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi1TVU1NQVJZID0gIlN5c3RlbSBjYWxsIHRyYWNpbmcgdG9vbCIKLUhPTUVQQUdFID0gImh0dHA6Ly9zdHJhY2Uuc291cmNlZm9yZ2UubmV0IgotU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgotTElDRU5TRSA9ICJCU0QiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ODhhY2IzYWFhZjVkMTRhMmUxYTg1MmQxMzY2OGE3MCIKLQotU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vc3RyYWNlL3N0cmFjZS0ke1BWfS50YXIueHogXAotICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS1naXQtdmVyc2lvbi1nZW4ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vbW9yZS1yb2J1c3QtdGVzdC1mb3ItbTMyLW14MzItY29tcGlsZS1zdXBwb3J0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3VwZGF0ZS1nYXdrLXBhdGhzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLXB0ZXN0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1idWlsZC13aGVuLXVzaW5nLW5vbi1nbGliYy1saWJjLWltcGxlbWVudGF0aW9uLW8ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vbWlwcy1TSUdFTVQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1jYXBzLWFiYnJldi5hd2stZml4LWdhd2stcy1wYXRoLnBhdGNoIFwKLSAgICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiMjg3MzM2NmNhYzk4NzcwZWZjYmVkNmU3NDhkNWVmMjMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTg0ODdjYjUxNzhlYzEyNTk5ODZjYzlmNmUyYTg0NGY1MGU1ZDEyMDhjMTEyY2MyMjQzMWExZTRkOWFkZjBlZiIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcHRlc3QgYmx1ZXRvb3RoCi0KLVJERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlIGNvcmV1dGlscyBncmVwIGdhd2sgc2VkIgotCi1QQUNLQUdFQ09ORklHX2NsYXNzLXRhcmdldCA/Pz0gIlwKLSAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsICdibHVleicsICcnLCBkKX0gXAotIgotCi1QQUNLQUdFQ09ORklHW2JsdWV6XSA9ICJhY19jdl9oZWFkZXJfYmx1ZXRvb3RoX2JsdWV0b290aF9oPXllcyxhY19jdl9oZWFkZXJfYmx1ZXRvb3RoX2JsdWV0b290aF9oPW5vLCR7QkxVRVp9IgotUEFDS0FHRUNPTkZJR1tsaWJ1bndpbmRdID0gIi0td2l0aC1saWJ1bndpbmQsLS13aXRob3V0LWxpYnVud2luZCxsaWJ1bndpbmQiCi0KLVRFU1RESVIgPSAidGVzdHMiCi0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCSMgV2UgZG9uJ3Qgc2hpcCBzdHJhY2UtZ3JhcGggaGVyZSBiZWNhdXNlIGl0IG5lZWRzIHBlcmwKLQlybSAke0R9JHtiaW5kaXJ9L3N0cmFjZS1ncmFwaAotfQotCi1kb19jb21waWxlX3B0ZXN0KCkgewotCW9lX3J1bm1ha2UgLUMgJHtURVNURElSfSBidWlsZHRlc3QtVEVTVFMKLX0KLQotZG9faW5zdGFsbF9wdGVzdCgpIHsKLQlvZV9ydW5tYWtlIC1DICR7VEVTVERJUn0gaW5zdGFsbC1wdGVzdCBCVUlMRERJUj0ke0J9IERFU1RESVI9JHtEfSR7UFRFU1RfUEFUSH0gVEVTVERJUj0ke1RFU1RESVJ9Ci0Jc2VkIC1pIC1lICcvXnNyYy9zL3N0cmFjZS4qWzEtOV0vcHRlc3QvJyAke0R9LyR7UFRFU1RfUEFUSH0vJHtURVNURElSfS9NYWtlZmlsZQotfQotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKLVRPT0xDSEFJTiA9ICJnY2MiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2VfNC4xOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZV80LjE4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMjg5MWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2VfNC4xOC5iYgpAQCAtMCwwICsxLDU5IEBACitTVU1NQVJZID0gIlN5c3RlbSBjYWxsIHRyYWNpbmcgdG9vbCIKK0hPTUVQQUdFID0gImh0dHA6Ly9zdHJhY2Uuc291cmNlZm9yZ2UubmV0IgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMTMyYjRkMmFkZmNjYzYzZGE0MTM5YTYwOTM2NzcxMSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vc3RyYWNlL3N0cmFjZS0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS1naXQtdmVyc2lvbi1nZW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbW9yZS1yb2J1c3QtdGVzdC1mb3ItbTMyLW14MzItY29tcGlsZS1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VwZGF0ZS1nYXdrLXBhdGhzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLXB0ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1idWlsZC13aGVuLXVzaW5nLW5vbi1nbGliYy1saWJjLWltcGxlbWVudGF0aW9uLW8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWlwcy1TSUdFTVQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jYXBzLWFiYnJldi5hd2stZml4LWdhd2stcy1wYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdGVzdHMtc2lnYWN0aW9uLUNoZWNrLWZvci1taXBzLWFuZC1hbHBoYS1iZWZvcmUtdXNpbi5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjM1NzliMzI2NmJiMDk2Y2ViYWVmYmUyY2RiMWEzYTc4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg5YWQ4ODdjMWU2MjI2YmRiY2E4ZGEzMWQ1ODljYWRlYTRiZTA3NDRiMTQyZWI0N2I3NjgwODZjOTM3ZmNhMDgiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0IGJsdWV0b290aAorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSBjb3JldXRpbHMgZ3JlcCBnYXdrIHNlZCIKKworUEFDS0FHRUNPTkZJR19jbGFzcy10YXJnZXQgPz89ICJcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCAnYmx1ZXonLCAnJywgZCl9IFwKKyIKKworUEFDS0FHRUNPTkZJR1tibHVlel0gPSAiYWNfY3ZfaGVhZGVyX2JsdWV0b290aF9ibHVldG9vdGhfaD15ZXMsYWNfY3ZfaGVhZGVyX2JsdWV0b290aF9ibHVldG9vdGhfaD1ubywke0JMVUVafSIKK1BBQ0tBR0VDT05GSUdbbGlidW53aW5kXSA9ICItLXdpdGgtbGlidW53aW5kLC0td2l0aG91dC1saWJ1bndpbmQsbGlidW53aW5kIgorCitURVNURElSID0gInRlc3RzIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIFdlIGRvbid0IHNoaXAgc3RyYWNlLWdyYXBoIGhlcmUgYmVjYXVzZSBpdCBuZWVkcyBwZXJsCisJcm0gJHtEfSR7YmluZGlyfS9zdHJhY2UtZ3JhcGgKK30KKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIC1DICR7VEVTVERJUn0gYnVpbGR0ZXN0LVRFU1RTCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJb2VfcnVubWFrZSAtQyAke1RFU1RESVJ9IGluc3RhbGwtcHRlc3QgQlVJTERESVI9JHtCfSBERVNURElSPSR7RH0ke1BURVNUX1BBVEh9IFRFU1RESVI9JHtURVNURElSfQorCXNlZCAtaSAtZSAnL15zcmMvcy9zdHJhY2UuKlsxLTldL3B0ZXN0LycgXAorCSAgICAtZSAncywtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9LCxnJyBcCisJICAgIC1lICdzfCR7REVCVUdfUFJFRklYX01BUH18fGcnIFwKKwkgICAgLWUgJ3M6JHtIT1NUVE9PTFNfRElSfS86OmcnIFwKKwkgICAgLWUgJ3M6JHtSRUNJUEVfU1lTUk9PVF9OQVRJVkV9OjpnJyBcCisJICAgIC1lICdzOiR7UkVDSVBFX1NZU1JPT1R9OjpnJyBcCisJICAgIC1lICdzOiR7QkFTRV9XT1JLRElSfS8ke01VTFRJTUFDSF9UQVJHRVRfU1lTfTo6ZycgXAorCSAgICAtZSAnL15ERUJfQ0hBTkdFTE9HVElNRS9kJyBcCisJICAgIC1lICcvXlJQTV9DSEFOR0VMT0dUSU1FL2QnIFwKKwkke0R9LyR7UFRFU1RfUEFUSH0vJHtURVNURElSfS9NYWtlZmlsZQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKK1RPT0xDSEFJTiA9ICJnY2MiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbi9DVkUtMjAxNy05ODAwLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24vQ1ZFLTIwMTctOTgwMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTk5YzJiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24vQ1ZFLTIwMTctOTgwMC5wYXRjaApAQCAtMCwwICsxLDEzNiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityMTgwNDY5MSB8IGRhbmllbHNoIHwgMjAxNy0wOC0xMCAxMToxNDoxMyAtMDcwMCAoVGh1LCAxMCBBdWcgMjAxNykgfCAxOCBsaW5lcworCitGaXggQ1ZFLTIwMTctOTgwMC4KKworU2VlOiBodHRwczovL3N1YnZlcnNpb24uYXBhY2hlLm9yZy9zZWN1cml0eS9DVkUtMjAxNy0wODAwLWFkdmlzb3J5LnR4dAorCisqIHN1YnZlcnNpb24vbGlic3ZuX3JhX3N2bi9jbGllbnQuYworICAoc3ZuX2N0eXBlLmgpOiBJbmNsdWRlLgorICAoZmluZF90dW5uZWxfYWdlbnQpOiBQYXNzIGEgIi0tIiBlbmQtb2Ytb3B0aW9ucyBndWFyZCB0byBzc2guCisgICAgRXhwZWN0IHRoZSAnaG9zdGluZm8nIHBhcmFtZXRlciB0byBiZSBVUkktZGVjb2RlZC4KKyAgKGlzX3ZhbGlkX2hvc3RpbmZvKTogTmV3LgorICAocmFfc3ZuX29wZW4pOiBWYWxpZGF0ZSB0aGUgaG9zdG5hbWUgYmVmb3JlIHVzaW5nIGl0LgorCisqIHN1YnZlcnNpb24vbGlic3ZuX3N1YnIvY29uZmlnX2ZpbGUuYworICAoc3ZuX2NvbmZpZ19lbnN1cmUpOiBVcGRhdGUgdGhlIGV4YW1wbGUgY29uZmlndXJhdGlvbiBsaWtld2lzZS4KKworUGF0Y2ggYnk6IHBoaWxpcAorUmV2aWV3IGJ5OiBkYW5pZWxzaAorICAgICAgICAgICBzdHNwCisgICAgICAgICAgIGFzdGllZ2VyIChlYXJsaWVyIHZlcnNpb24pCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK2h0dHA6Ly9zdm4uYXBhY2hlLm9yZy92aWV3dmM/dmlldz1yZXZpc2lvbiZhbXA7c29ydGJ5PXJldiZhbXA7cmV2aXNpb249MTgwNDY5MQorCitDVkU6IENWRS0yMDE3LTk4MDAKKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CistLS0KK0luZGV4OiBzdWJ2ZXJzaW9uL2xpYnN2bl9zdWJyL2NvbmZpZ19maWxlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzdWJ2ZXJzaW9uL2xpYnN2bl9zdWJyL2NvbmZpZ19maWxlLmMJKHJldmlzaW9uIDE4MDQ2OTApCisrKysgc3VidmVyc2lvbi9saWJzdm5fc3Vici9jb25maWdfZmlsZS5jCShyZXZpc2lvbiAxODA0NjkxKQorQEAgLTE0NDgsMTIgKzE0NDgsMTIgQEAKKyAgICAgICAgICIjIyMgcGFzc2VkIHRvIHRoZSB0dW5uZWwgYWdlbnQgYXMgPHVzZXI+QDxob3N0bmFtZT4uKSAgSWYgdGhlIiAgICAgIE5MCisgICAgICAgICAiIyMjIGJ1aWx0LWluIHNzaCBzY2hlbWUgd2VyZSBub3QgcHJlZGVmaW5lZCwgaXQgY291bGQgYmUgZGVmaW5lZCIgICBOTAorICAgICAgICAgIiMjIyBhczoiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkwKKy0gICAgICAgICIjIHNzaCA9ICRTVk5fU1NIIHNzaCAtcSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5MCisrICAgICAgICAiIyBzc2ggPSAkU1ZOX1NTSCBzc2ggLXEgLS0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTAorICAgICAgICAgIiMjIyBJZiB5b3Ugd2FudGVkIHRvIGRlZmluZSBhIG5ldyAncnNoJyBzY2hlbWUsIHRvIGJlIHVzZWQgd2l0aCIgICAgTkwKKyAgICAgICAgICIjIyMgJ3N2bityc2g6JyBVUkxzLCB5b3UgY291bGQgZG8gc28gYXMgZm9sbG93czoiICAgICAgICAgICAgICAgICAgIE5MCistICAgICAgICAiIyByc2ggPSByc2giICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTAorKyAgICAgICAgIiMgcnNoID0gcnNoIC0tIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkwKKyAgICAgICAgICIjIyMgT3IsIGlmIHlvdSB3YW50ZWQgdG8gc3BlY2lmeSBhIGZ1bGwgcGF0aCBhbmQgYXJndW1lbnRzOiIgICAgICAgIE5MCistICAgICAgICAiIyByc2ggPSAvcGF0aC90by9yc2ggLWwgbXl1c2VybmFtZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTAorKyAgICAgICAgIiMgcnNoID0gL3BhdGgvdG8vcnNoIC1sIG15dXNlcm5hbWUgLS0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkwKKyAgICAgICAgICIjIyMgT24gV2luZG93cywgaWYgeW91IGFyZSBzcGVjaWZ5aW5nIGEgZnVsbCBwYXRoIHRvIGEgY29tbWFuZCwiICAgIE5MCisgICAgICAgICAiIyMjIHVzZSBhIGZvcndhcmQgc2xhc2ggKC8pIG9yIGEgcGFpcmVkIGJhY2tzbGFzaCAoXFxcXCkgYXMgdGhlIiAgICBOTAorICAgICAgICAgIiMjIyBwYXRoIHNlcGFyYXRvci4gIEEgc2luZ2xlIGJhY2tzbGFzaCB3aWxsIGJlIHRyZWF0ZWQgYXMgYW4iICAgICAgTkwKK0luZGV4OiBzdWJ2ZXJzaW9uL2xpYnN2bl9yYV9zdm4vY2xpZW50LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzdWJ2ZXJzaW9uL2xpYnN2bl9yYV9zdm4vY2xpZW50LmMJKHJldmlzaW9uIDE4MDQ2OTApCisrKysgc3VidmVyc2lvbi9saWJzdm5fcmFfc3ZuL2NsaWVudC5jCShyZXZpc2lvbiAxODA0NjkxKQorQEAgLTQ2LDYgKzQ2LDcgQEAKKyAjaW5jbHVkZSAic3ZuX3Byb3BzLmgiCisgI2luY2x1ZGUgInN2bl9tZXJnZWluZm8uaCIKKyAjaW5jbHVkZSAic3ZuX3ZlcnNpb24uaCIKKysjaW5jbHVkZSAic3ZuX2N0eXBlLmgiCisgCisgI2luY2x1ZGUgInN2bl9wcml2YXRlX2NvbmZpZy5oIgorIAorQEAgLTM5OCw3ICszOTksNyBAQAorICAgICAgICAqIHZlcnNpb25zIGhhdmUgaXQgdG9vLiBJZiB0aGUgdXNlciBpcyB1c2luZyBzb21lIG90aGVyIHNzaAorICAgICAgICAqIGltcGxlbWVudGF0aW9uIHRoYXQgZG9lc24ndCBhY2NlcHQgaXQsIHRoZXkgY2FuIG92ZXJyaWRlIGl0CisgICAgICAgICogaW4gdGhlIFt0dW5uZWxzXSBzZWN0aW9uIG9mIHRoZSBjb25maWcuICovCistICAgICAgdmFsID0gIiRTVk5fU1NIIHNzaCAtcSI7CisrICAgICAgdmFsID0gIiRTVk5fU1NIIHNzaCAtcSAtLSI7CisgICAgIH0KKyAKKyAgIGlmICghdmFsIHx8ICEqdmFsKQorQEAgLTQ0Myw3ICs0NDQsNyBAQAorICAgZm9yIChuID0gMDsgY21kX2FyZ3Zbbl0gIT0gTlVMTDsgbisrKQorICAgICBhcmd2W25dID0gY21kX2FyZ3Zbbl07CisgCistICBhcmd2W24rK10gPSBzdm5fcGF0aF91cmlfZGVjb2RlKGhvc3RpbmZvLCBwb29sKTsKKysgIGFyZ3ZbbisrXSA9IGhvc3RpbmZvOworICAgYXJndltuKytdID0gInN2bnNlcnZlIjsKKyAgIGFyZ3ZbbisrXSA9ICItdCI7CisgICBhcmd2W25dID0gTlVMTDsKK0BAIC04MTEsNyArODEyLDMzIEBACisgfQorIAorIAorKy8qIEEgc2ltcGxlIHdoaXRlbGlzdCB0byBlbnN1cmUgdGhlIGZvbGxvd2luZyBhcmUgdmFsaWQ6CisrICogICB1c2VyQHNlcnZlcgorKyAqICAgWzo6MV06MjIKKysgKiAgIHNlcnZlci1uYW1lCisrICogICBzZXJ2ZXJfbmFtZQorKyAqICAgMTI3LjAuMC4xCisrICogd2l0aCBhbiBleHRyYSByZXN0cmljdGlvbiB0aGF0IGEgbGVhZGluZyAnLScgaXMgaW52YWxpZC4KKysgKi8KKytzdGF0aWMgc3ZuX2Jvb2xlYW5fdAorK2lzX3ZhbGlkX2hvc3RpbmZvKGNvbnN0IGNoYXIgKmhvc3RpbmZvKQorK3sKKysgIGNvbnN0IGNoYXIgKnAgPSBob3N0aW5mbzsKKyAKKysgIGlmIChwWzBdID09ICctJykKKysgICAgcmV0dXJuIEZBTFNFOworKworKyAgd2hpbGUgKCpwKQorKyAgICB7CisrICAgICAgaWYgKCFzdm5fY3R5cGVfaXNhbG51bSgqcCkgJiYgIXN0cmNocigiOi4tX1tdQCIsICpwKSkKKysgICAgICAgIHJldHVybiBGQUxTRTsKKysKKysgICAgICArK3A7CisrICAgIH0KKysKKysgIHJldHVybiBUUlVFOworK30KKysKKyBzdGF0aWMgc3ZuX2Vycm9yX3QgKnJhX3N2bl9vcGVuKHN2bl9yYV9zZXNzaW9uX3QgKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqY29ycmVjdGVkX3VybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnVybCwKK0BAIC04NDQsOCArODcxLDE4IEBACisgICAgICAgICAgIHx8IChjYWxsYmFja3MtPmNoZWNrX3R1bm5lbF9mdW5jICYmIGNhbGxiYWNrcy0+b3Blbl90dW5uZWxfZnVuYworICAgICAgICAgICAgICAgJiYgIWNhbGxiYWNrcy0+Y2hlY2tfdHVubmVsX2Z1bmMoY2FsbGJhY2tzLT50dW5uZWxfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dW5uZWwpKSkpCistICAgIFNWTl9FUlIoZmluZF90dW5uZWxfYWdlbnQodHVubmVsLCB1cmkuaG9zdGluZm8sICZ0dW5uZWxfYXJndiwgY29uZmlnLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9wb29sKSk7CisrICAgIHsKKysgICAgICBjb25zdCBjaGFyICpkZWNvZGVkX2hvc3RpbmZvOworKworKyAgICAgIGRlY29kZWRfaG9zdGluZm8gPSBzdm5fcGF0aF91cmlfZGVjb2RlKHVyaS5ob3N0aW5mbywgcmVzdWx0X3Bvb2wpOworKworKyAgICAgIGlmICghaXNfdmFsaWRfaG9zdGluZm8oZGVjb2RlZF9ob3N0aW5mbykpCisrICAgICAgICByZXR1cm4gc3ZuX2Vycm9yX2NyZWF0ZWYoU1ZOX0VSUl9CQURfVVJMLCBOVUxMLCBfKCJJbnZhbGlkIGhvc3QgJyVzJyIpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaS5ob3N0aW5mbyk7CisrCisrICAgICAgU1ZOX0VSUihmaW5kX3R1bm5lbF9hZ2VudCh0dW5uZWwsIGRlY29kZWRfaG9zdGluZm8sICZ0dW5uZWxfYXJndiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZywgcmVzdWx0X3Bvb2wpKTsKKysgICAgfQorICAgZWxzZQorICAgICB0dW5uZWxfYXJndiA9IE5VTEw7CisgCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb25fMS45LjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbl8xLjkuNS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVmYmE2Ny4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbl8xLjkuNS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLVNVTU1BUlkgPSAiU3VidmVyc2lvbiAoc3ZuKSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIGNsaWVudCIKLVNFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgotREVQRU5EUyA9ICJhcHItdXRpbCBzZXJmIHNxbGl0ZTMgZmlsZSIKLURFUEVORFNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZmlsZS1yZXBsYWNlbWVudC1uYXRpdmUiCi1SREVQRU5EU18ke1BOfSA9ICJzZXJmIgotTElDRU5TRSA9ICJBcGFjaGUtMiIKLUhPTUVQQUdFID0gImh0dHA6Ly9zdWJ2ZXJzaW9uLnRpZ3Jpcy5vcmciCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgotCi1pbmhlcml0IGdldHRleHQKLQotU1JDX1VSSSA9ICIke0FQQUNIRV9NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCi0gICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlX21hY29zLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3NlcmYubTQtUmVnZXgtbW9kaWZpZWQtdG8tYWxsb3ctRC1pbi1wYXRocy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1saWJ0b29sLW5hbWUtaW4tY29uZmlndXJlLmFjLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3NlcmZtYWNyby5wYXRjaCBcCi0gICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjlmY2JhZTM1MmE1ZWZlNzNkNDZhODhjOTdjNmJiYTE0IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhhNGZjNjhhZmYxZDE4ZGNiNGRkOWU0NjA2NDhkMjRkOWU5ODY1N2ZiZWQ0OTZjNTgyOTI5YzZiM2NlNTU1ZTUiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWFmODFhZTQ5YmEzNTllNzA2MjZjMDVlOWJmMzEzNzA5IgotCi1QQUNLQUdFQ09ORklHW3Nhc2xdID0gIi0td2l0aC1zYXNsLC0td2l0aG91dC1zYXNsLGN5cnVzLXNhc2wiCi1QQUNLQUdFQ09ORklHW2dub21lLWtleXJpbmddID0gIi0td2l0aC1nbm9tZS1rZXlyaW5nLC0td2l0aG91dC1nbm9tZS1rZXlyaW5nLGdsaWItMi4wIGdub21lLWtleXJpbmciCi0KLUVYVFJBX09FQ09ORiA9ICIgXAotICAgICAgICAgICAgICAgIC0td2l0aG91dC1iZXJrZWxleS1kYiAtLXdpdGhvdXQtYXB4cyBcCi0gICAgICAgICAgICAgICAgLS13aXRob3V0LXN3aWcgLS13aXRoLWFwcj0ke1NUQUdJTkdfQklORElSX0NST1NTfSBcCi0gICAgICAgICAgICAgICAgLS13aXRoLWFwci11dGlsPSR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9IFwKLSAgICAgICAgICAgICAgICAtLWRpc2FibGUta2V5Y2hhaW4gXAotICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfUlVCWT1ub25lIgotCi1pbmhlcml0IGF1dG90b29scwotCi1leHBvcnQgTERGTEFHUyArPSAiIC1MJHtTVEFHSU5HX0xJQkRJUn0gIgotQ1BQRkxBR1MgKz0gIi1QIgotQlVJTERfQ1BQRkxBR1MgKz0gIi1QIgotCi1hY3BhdGhzID0gIi1JIGJ1aWxkLyAtSSBidWlsZC9hYy1tYWNyb3MvIgotCi1kb19jb25maWd1cmVfcHJlcGVuZCAoKSB7Ci0Jcm0gLWYgJHtTfS9saWJ0b29sCi0Jcm0gLWYgJHtTfS9idWlsZC9saWJ0b29sLm00ICR7U30vYnVpbGQvbHRtYWluLnNoICR7U30vYnVpbGQvbHRvcHRpb25zLm00ICR7U30vYnVpbGQvbHRzdWdhci5tNCAke1N9L2J1aWxkL2x0dmVyc2lvbi5tNCAke1N9L2J1aWxkL2x0fm9ic29sZXRlLm00Ci0Jcm0gLWYgJHtTfS9hY2xvY2FsLm00Ci0Jc2VkIC1pIC1lICdzOndpdGhfc2FzbD0iL3Vzci9sb2NhbCI6d2l0aF9zYXNsPSIke1NUQUdJTkdfRElSfSI6JyAke1N9L2J1aWxkL2FjLW1hY3Jvcy9zYXNsLm00Ci19Ci0KLSN8IHg4Nl82NC1saW51eC1saWJ0b29sOiBpbnN0YWxsOiB3YXJuaW5nOiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvd29yay94ODZfNjQtbGludXgvc3VidmVyc2lvbi1uYXRpdmUvMS44LjktcjAvYnVpbGQvc3VidmVyc2lvbi9saWJzdm5fcmFfbG9jYWwvbGlic3ZuX3JhX2xvY2FsLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJ3wgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGluc3RhbGw6IHdhcm5pbmc6IGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC93b3JrL3g4Nl82NC1saW51eC9zdWJ2ZXJzaW9uLW5hdGl2ZS8xLjguOS1yMC9idWlsZC9zdWJ2ZXJzaW9uL2xpYnN2bl9yZXBvcy9saWJzdm5fcmVwb3MtMS5sYScgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWInfCAvdXNyL2Jpbi9sZDogY2Fubm90IGZpbmQgLWxzdm5fZGVsdGEtMXwgY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXN8IHg4Nl82NC1saW51eC1saWJ0b29sOiBpbnN0YWxsOiB3YXJuaW5nOiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvd29yay94ODZfNjQtbGludXgvc3VidmVyc2lvbi1uYXRpdmUvMS44LjktcjAvYnVpbGQvc3VidmVyc2lvbi9saWJzdm5fcmFfc3ZuL2xpYnN2bl9yYV9zdm4tMS5sYScgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWInfCB4ODZfNjQtbGludXgtbGlidG9vbDogaW5zdGFsbDogd2FybmluZzogYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4L3N1YnZlcnNpb24tbmF0aXZlLzEuOC45LXIwL2J1aWxkL3N1YnZlcnNpb24vbGlic3ZuX3JhX3NlcmYvbGlic3ZuX3JhX3NlcmYtMS5sYScgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWInCi0jfCB4ODZfNjQtbGludXgtbGlidG9vbDogaW5zdGFsbDogZXJyb3I6IHJlbGluayBgbGlic3ZuX3JhX3NlcmYtMS5sYScgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdAotI3wgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGluc3RhbGw6IHdhcm5pbmc6IGAuLi8uLi9zdWJ2ZXJzaW9uL2xpYnN2bl9yZXBvcy9saWJzdm5fcmVwb3MtMS5sYScgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWInCi0jfCAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC93b3JrL3g4Nl82NC1saW51eC9zdWJ2ZXJzaW9uLW5hdGl2ZS8xLjguOS1yMC9zdWJ2ZXJzaW9uLTEuOC45L2J1aWxkLW91dHB1dHMubWs6MTA5MDogcmVjaXBlIGZvciB0YXJnZXQgJ2luc3RhbGwtc2VyZi1saWInIGZhaWxlZAotI3wgbWFrZTogKioqIFtpbnN0YWxsLXNlcmYtbGliXSBFcnJvciAxCi1QQVJBTExFTF9NQUtFSU5TVCA9ICIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbl8xLjkuNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uXzEuOS42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMmVkZWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbl8xLjkuNi5iYgpAQCAtMCwwICsxLDU2IEBACitTVU1NQVJZID0gIlN1YnZlcnNpb24gKHN2bikgdmVyc2lvbiBjb250cm9sIHN5c3RlbSBjbGllbnQiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0RFUEVORFMgPSAiYXByLXV0aWwgc2VyZiBzcWxpdGUzIGZpbGUiCitERVBFTkRTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGZpbGUtcmVwbGFjZW1lbnQtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAic2VyZiIKK0xJQ0VOU0UgPSAiQXBhY2hlLTIiCitIT01FUEFHRSA9ICJodHRwOi8vc3VidmVyc2lvbi50aWdyaXMub3JnIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworaW5oZXJpdCBnZXR0ZXh0IHBrZ2NvbmZpZworCitTUkNfVVJJID0gIiR7QVBBQ0hFX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGVfbWFjb3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2VyZi5tNC1SZWdleC1tb2RpZmllZC10by1hbGxvdy1ELWluLXBhdGhzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWxpYnRvb2wtbmFtZS1pbi1jb25maWd1cmUuYWMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2VyZm1hY3JvLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTk4MDAucGF0Y2g7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZjI3ZTAwMzM4ZDRhOWY3ZjlhZWM5ZDRhM2Y4YjQxOGIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGJjYmM1MWZiNjM0MDgyZjAwOTEyMWYyY2I2NDM1MGNlMzIxNDY2MTI3ODdmZmIwZjdjZWQzNTFhYWNhYWUxOSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9YWY4MWFlNDliYTM1OWU3MDYyNmMwNWU5YmYzMTM3MDkiCisKK1BBQ0tBR0VDT05GSUdbc2FzbF0gPSAiLS13aXRoLXNhc2wsLS13aXRob3V0LXNhc2wsY3lydXMtc2FzbCIKK1BBQ0tBR0VDT05GSUdbZ25vbWUta2V5cmluZ10gPSAiLS13aXRoLWdub21lLWtleXJpbmcsLS13aXRob3V0LWdub21lLWtleXJpbmcsZ2xpYi0yLjAgZ25vbWUta2V5cmluZyIKKworRVhUUkFfT0VDT05GID0gIiBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LWJlcmtlbGV5LWRiIC0td2l0aG91dC1hcHhzIFwKKyAgICAgICAgICAgICAgICAtLXdpdGhvdXQtc3dpZyAtLXdpdGgtYXByPSR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9IFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtYXByLXV0aWw9JHtTVEFHSU5HX0JJTkRJUl9DUk9TU30gXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1rZXljaGFpbiBcCisgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9SVUJZPW5vbmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK2V4cG9ydCBMREZMQUdTICs9ICIgLUwke1NUQUdJTkdfTElCRElSfSAiCitDUFBGTEFHUyArPSAiLVAiCitCVUlMRF9DUFBGTEFHUyArPSAiLVAiCisKK2FjcGF0aHMgPSAiLUkgYnVpbGQvIC1JIGJ1aWxkL2FjLW1hY3Jvcy8iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlybSAtZiAke1N9L2xpYnRvb2wKKwlybSAtZiAke1N9L2J1aWxkL2xpYnRvb2wubTQgJHtTfS9idWlsZC9sdG1haW4uc2ggJHtTfS9idWlsZC9sdG9wdGlvbnMubTQgJHtTfS9idWlsZC9sdHN1Z2FyLm00ICR7U30vYnVpbGQvbHR2ZXJzaW9uLm00ICR7U30vYnVpbGQvbHR+b2Jzb2xldGUubTQKKwlybSAtZiAke1N9L2FjbG9jYWwubTQKKwlzZWQgLWkgLWUgJ3M6d2l0aF9zYXNsPSIvdXNyL2xvY2FsIjp3aXRoX3Nhc2w9IiR7U1RBR0lOR19ESVJ9IjonICR7U30vYnVpbGQvYWMtbWFjcm9zL3Nhc2wubTQKK30KKworI3wgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGluc3RhbGw6IHdhcm5pbmc6IGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC93b3JrL3g4Nl82NC1saW51eC9zdWJ2ZXJzaW9uLW5hdGl2ZS8xLjguOS1yMC9idWlsZC9zdWJ2ZXJzaW9uL2xpYnN2bl9yYV9sb2NhbC9saWJzdm5fcmFfbG9jYWwtMS5sYScgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWInfCB4ODZfNjQtbGludXgtbGlidG9vbDogaW5zdGFsbDogd2FybmluZzogYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4L3N1YnZlcnNpb24tbmF0aXZlLzEuOC45LXIwL2J1aWxkL3N1YnZlcnNpb24vbGlic3ZuX3JlcG9zL2xpYnN2bl9yZXBvcy0xLmxhJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYid8IC91c3IvYmluL2xkOiBjYW5ub3QgZmluZCAtbHN2bl9kZWx0YS0xfCBjb2xsZWN0MjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1c3wgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGluc3RhbGw6IHdhcm5pbmc6IGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC93b3JrL3g4Nl82NC1saW51eC9zdWJ2ZXJzaW9uLW5hdGl2ZS8xLjguOS1yMC9idWlsZC9zdWJ2ZXJzaW9uL2xpYnN2bl9yYV9zdm4vbGlic3ZuX3JhX3N2bi0xLmxhJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYid8IHg4Nl82NC1saW51eC1saWJ0b29sOiBpbnN0YWxsOiB3YXJuaW5nOiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvd29yay94ODZfNjQtbGludXgvc3VidmVyc2lvbi1uYXRpdmUvMS44LjktcjAvYnVpbGQvc3VidmVyc2lvbi9saWJzdm5fcmFfc2VyZi9saWJzdm5fcmFfc2VyZi0xLmxhJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYicKKyN8IHg4Nl82NC1saW51eC1saWJ0b29sOiBpbnN0YWxsOiBlcnJvcjogcmVsaW5rIGBsaWJzdm5fcmFfc2VyZi0xLmxhJyB3aXRoIHRoZSBhYm92ZSBjb21tYW5kIGJlZm9yZSBpbnN0YWxsaW5nIGl0CisjfCB4ODZfNjQtbGludXgtbGlidG9vbDogaW5zdGFsbDogd2FybmluZzogYC4uLy4uL3N1YnZlcnNpb24vbGlic3ZuX3JlcG9zL2xpYnN2bl9yZXBvcy0xLmxhJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYicKKyN8IC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4L3N1YnZlcnNpb24tbmF0aXZlLzEuOC45LXIwL3N1YnZlcnNpb24tMS44LjkvYnVpbGQtb3V0cHV0cy5tazoxMDkwOiByZWNpcGUgZm9yIHRhcmdldCAnaW5zdGFsbC1zZXJmLWxpYicgZmFpbGVkCisjfCBtYWtlOiAqKiogW2luc3RhbGwtc2VyZi1saWJdIEVycm9yIDEKK1BBUkFMTEVMX01BS0VJTlNUID0gIiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXhfNi4wMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXhfNi4wMy5iYgppbmRleCA2OWJjZTFmLi5mOGIxMDk0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4XzYuMDMuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eF82LjAzLmJiCkBAIC0xLDUgKzEsNSBAQAogU1VNTUFSWSA9ICJNdWx0aS1wdXJwb3NlIGxpbnV4IGJvb3Rsb2FkZXIiCi1IT01FUEFHRSA9ICJodHRwOi8vc3lzbGludXguenl0b3IuY29tLyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuc3lzbGludXgub3JnLyIKIExJQ0VOU0UgPSAiR1BMdjIrIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMgXAogICAgICAgICAgICAgICAgICAgICBmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0zNTtlbmRsaW5lPTQxO21kNT01NThmMmM3MWNiMWZiOWJhNTExY2NkNDg1OGU0OGU4YSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzdGVtZC1ib290Y2hhcnQvZmlsZXMvMDAwMS1wYXJzZS11dGlsLURvbi10LXVzZS14bG9jYWxlLmgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c3RlbWQtYm9vdGNoYXJ0L2ZpbGVzLzAwMDEtcGFyc2UtdXRpbC1Eb24tdC11c2UteGxvY2FsZS5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYTA0NjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c3RlbWQtYm9vdGNoYXJ0L2ZpbGVzLzAwMDEtcGFyc2UtdXRpbC1Eb24tdC11c2UteGxvY2FsZS5oLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gZDM3OTEyNmQ1NmQwYjZlOTM1YjJkOTdjYTcxNTc5ZTZjYzU0ZDFiYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBUdWUsIDE4IEp1bCAyMDE3IDEzOjM3OjI3ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIHBhcnNlLXV0aWw6IERvbid0IHVzZSB4bG9jYWxlLmgKKworZ2xpYmMgMi4yNiBubyBsb25nZXIgY29udGFpbnMgdGhlIG5vbi1zdGFuZGFyZCB4bG9jYWxlLmgKKyhodHRwOi8vc291cmNld2FyZS5vcmcvZ2xpYmMvd2lraS9SZWxlYXNlLzIuMjYjUmVtb3ZhbF9vZl8uMjd4bG9jYWxlLmguMjcpCisKK1RoaXMgY2hhbmdlIHNob3VsZG4ndCBicmVhayBhbnl0aGluZyBhcyB4bG9jYWxlLmggd2FzIGEgc3Vic2V0IG9mCitsb2NhbGUuaC4KKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vc3lzdGVtZC9zeXN0ZW1kLWJvb3RjaGFydC9wdWxsLzM1XQorLS0tCisgc3JjL3BhcnNlLXV0aWwuYyB8IDEgLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvcGFyc2UtdXRpbC5jIGIvc3JjL3BhcnNlLXV0aWwuYworaW5kZXggNTYzNWE2OC4uMWIyMTY5YyAxMDA2NDQKKy0tLSBhL3NyYy9wYXJzZS11dGlsLmMKKysrKyBiL3NyYy9wYXJzZS11dGlsLmMKK0BAIC0yMSw3ICsyMSw2IEBACisgI2luY2x1ZGUgPGxvY2FsZS5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CistI2luY2x1ZGUgPHhsb2NhbGUuaD4KKyAKKyAjaW5jbHVkZSAibWFjcm8uaCIKKyAjaW5jbHVkZSAicGFyc2UtdXRpbC5oIgorLS0gCisyLjEzLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXN0ZW1kLWJvb3RjaGFydC9zeXN0ZW1kLWJvb3RjaGFydF8yMzEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c3RlbWQtYm9vdGNoYXJ0L3N5c3RlbWQtYm9vdGNoYXJ0XzIzMS5iYgppbmRleCAxZDg4MDM2Li40ZGEwMDBlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c3RlbWQtYm9vdGNoYXJ0L3N5c3RlbWQtYm9vdGNoYXJ0XzIzMS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c3RlbWQtYm9vdGNoYXJ0L3N5c3RlbWQtYm9vdGNoYXJ0XzIzMS5iYgpAQCAtMiw3ICsyLDkgQEAKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UuTEdQTDIuMTttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAogICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRS5HUEwyO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKIAotU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3N5c3RlbWQvc3lzdGVtZC1ib290Y2hhcnQuZ2l0O3Byb3RvY29sPWh0dHBzIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3N5c3RlbWQvc3lzdGVtZC1ib290Y2hhcnQuZ2l0O3Byb3RvY29sPWh0dHBzIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcGFyc2UtdXRpbC1Eb24tdC11c2UteGxvY2FsZS5oLnBhdGNoIFwKKyIKIAogIyBNb2RpZnkgdGhlc2UgYXMgZGVzaXJlZAogUFYgPSAiMjMxK2dpdCR7U1JDUFZ9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50X2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudF9naXQuYmIKaW5kZXggZTVlNDFmMS4uOWRiMjZkYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50X2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnRfZ2l0LmJiCkBAIC0xNiw2ICsxNiw3IEBACiAgICAgICAgICAgIGZpbGU6Ly90Y2YtYWdlbnQuaW5pdCBcCiAgICAgICAgICAgIGZpbGU6Ly90Y2YtYWdlbnQuc2VydmljZSBcCiAgICAgICAgICAgIgorVVBTVFJFQU1fVkVSU0lPTl9VTktOT1dOID0gIjEiCiAKIERFUEVORFMgPSAidXRpbC1saW51eCBvcGVuc3NsIgogUkRFUEVORFNfJHtQTn0gPSAiYmFzaCIKQEAgLTMwLDE2ICszMSwyMiBAQAogSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOTkgMyA1IC4gc3RvcCAyMCAwIDEgMiA2IC4iCiAKICMgbWFuZ2xpbmcgbmVlZGVkIGZvciBtYWtlCi1NQUtFX0FSQ0ggPSAiYGVjaG8gJHtUQVJHRVRfQVJDSH0gfCBzZWQgcyxpLjg2LGk2ODYsYCIKK01BS0VfQVJDSCA9ICJgZWNobyAke1RBUkdFVF9BUkNIfSB8IHNlZCBzLGkuODYsaTY4NiwgfCBzZWQgcyxhYXJjaDY0LGE2NCxgIgogTUFLRV9PUyA9ICJgZWNobyAke1RBUkdFVF9PU30gfCBzZWQgcyxebGludXguKixHTlUvTGludXgsYCIKIAogRVhUUkFfT0VNQUtFID0gIk1BQ0hJTkU9JHtNQUtFX0FSQ0h9IE9QU1lTPSR7TUFLRV9PU30gJ0NDPSR7Q0N9JyAnQVI9JHtBUn0nIgogCi0jIFRoZXkgZG9uJ3QgYnVpbGQgb24gQVJNIGFuZCB3ZSBkb24ndCBuZWVkIHRoZW0gYWN0dWFsbHkuCi1DRkxBR1MgKz0gIi1EU0VSVklDRV9SdW5Db250cm9sPTAgLURTRVJWSUNFX0JyZWFrcG9pbnRzPTAgXAorTENMX1NUT1BfU0VSVklDRVMgPSAiLURTRVJWSUNFX1J1bkNvbnRyb2w9MCAtRFNFUlZJQ0VfQnJlYWtwb2ludHM9MCBcCiAgICAgLURTRVJWSUNFX01lbW9yeT0wIC1EU0VSVklDRV9SZWdpc3RlcnM9MCAtRFNFUlZJQ0VfTWVtb3J5TWFwPTAgXAotICAgIC1EU0VSVklDRV9TdGFja1RyYWNlPTAgLURTRVJWSUNFX1N5bWJvbHM9MCAtRFNFUlZJQ0VfTGluZU51bWJlcnM9MCBcCi0gICAgLURTRVJWSUNFX0V4cHJlc3Npb25zPTAiCisgICAgLURTRVJWSUNFX1N0YWNrVHJhY2U9MCAtRFNFUlZJQ0VfRXhwcmVzc2lvbnM9MCIKKworCisjIFRoZXNlIGZlYXR1cmVzIGRvbid0IGNvbXBpbGUgZm9yIHNldmVyYWwgY2FzZXMuCisjCitDRkxBR1NfYXBwZW5kX21pcHMgPSAiICR7TENMX1NUT1BfU0VSVklDRVN9IgorQ0ZMQUdTX2FwcGVuZF9taXBzNjQgPSAiICR7TENMX1NUT1BfU0VSVklDRVN9IgorQ0ZMQUdTX2FwcGVuZF9saWJjLW11c2wgPSAiICR7TENMX1NUT1BfU0VSVklDRVN9IgorQ0ZMQUdTX2FwcGVuZF9wb3dlcnBjNjQgPSAiICR7TENMX1NUT1BfU0VSVklDRVN9IgogCiBkb19pbnN0YWxsKCkgewogCW9lX3J1bm1ha2UgaW5zdGFsbCBJTlNUQUxMUk9PVD0ke0R9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbF84LjYuNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsXzguNi42LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGNkMThmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsXzguNi42LmJiCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotU1VNTUFSWSA9ICJUb29sIENvbW1hbmQgTGFuZ3VhZ2UiCi1IT01FUEFHRSA9ICJodHRwOi8vdGNsLnNvdXJjZWZvcmdlLm5ldCIKLVNFQ1RJT04gPSAiZGV2ZWwvdGNsdGsiCi0KLSMgaHR0cDovL3d3dy50Y2wudGsvc29mdHdhcmUvdGNsdGsvbGljZW5zZS5odG1sCi1MSUNFTlNFID0gInRjbCAmIEJTRC0zLUNsYXVzZSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLy4uL2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKLSAgICBmaWxlOi8vLi4vY29tcGF0L2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKLSAgICBmaWxlOi8vLi4vbGlicmFyeS9saWNlbnNlLnRlcm1zO21kNT0wNThmNjIyOTc5ODI4MWJiY2FjNDIzOWM3ODhjZmEzOCBcCi0gICAgZmlsZTovLy4uL21hY29zeC9saWNlbnNlLnRlcm1zO21kNT0wNThmNjIyOTc5ODI4MWJiY2FjNDIzOWM3ODhjZmEzOCBcCi0gICAgZmlsZTovLy4uL3Rlc3RzL2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKLSAgICBmaWxlOi8vLi4vd2luL2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKLSIKLQotREVQRU5EUyA9ICJ0Y2wtbmF0aXZlIHpsaWIiCi0KLUJBU0VfU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vdGNsLyR7QlBOfSR7UFZ9LXNyYy50YXIuZ3ogXAotICAgICAgICAgICAgICAgIGZpbGU6Ly90Y2wtYWRkLXNvbmFtZS5wYXRjaCIKLVNSQ19VUkkgPSAiJHtCQVNFX1NSQ19VUkl9IFwKLSAgICAgICAgICAgZmlsZTovL2ZpeF9ub25fbmF0aXZlX2J1aWxkX2lzc3VlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2ZpeF9pc3N1ZV93aXRoX29sZF9kaXN0cm9fZ2xpYmMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vbm9fcGFja2FnZXMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vdGNsLXJlbW92ZS1oYXJkY29kZWQtaW5zdGFsbC1wYXRoLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2FsdGVyLWluY2x1ZGVkaXIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKLSIKLVNSQ19VUklbbWQ1c3VtXSA9ICI1MTkzYWVhODEwNzgzOWE3OWRmOGFjNzA5NTUyZWNiNyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJhMjY1NDA5NzgxZTRiM2VkY2M0ZWY4MjI1MzMwNzFiMzRjM2RjNjc5MGI4OTM5NjM4MDliOWZlMjIxYmVmZTA3IgotCi1TUkNfVVJJX2NsYXNzLW5hdGl2ZSA9ICIke0JBU0VfU1JDX1VSSX0iCi0KLVMgPSAiJHtXT1JLRElSfS8ke0JQTn0ke1BWfS91bml4IgotCi1WRVIgPSAiJHtQVn0iCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0IGJpbmNvbmZpZwotCi1ERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJ6bGliLW5hdGl2ZSIKLQotRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXRocmVhZHMgLS1kaXNhYmxlLXJwYXRoIC0tbGliZGlyPSR7bGliZGlyfSIKLQotZG9fY29uZmlndXJlKCkgewotCWNkICR7U30KLQlnbnUtY29uZmlnaXplCi0JY2QgJHtCfQotCW9lX3J1bmNvbmYKLX0KLQotZG9fY29tcGlsZV9wcmVwZW5kKCkgewotCWVjaG8gPiAke1N9Ly4uL2NvbXBhdC9maXhzdHJ0b2QuYwotfQotCi1kb19pbnN0YWxsKCkgewotCWF1dG90b29sc19kb19pbnN0YWxsIGluc3RhbGwtcHJpdmF0ZS1oZWFkZXJzCi0JbG4gLXNmIC4vdGNsc2gke1ZFUn0gJHtEfSR7YmluZGlyfS90Y2xzaAotCWxuIC1zZiB0Y2xzaDguNiAke0R9JHtiaW5kaXJ9L3RjbHNoJHtWRVJ9Ci0Jc2VkIC1pICJzOy1MJHtCfTstTCR7U1RBR0lOR19MSUJESVJ9O2ciIHRjbENvbmZpZy5zaAotCXNlZCAtaSAiczsnJHtXT1JLRElSfTsnJHtTVEFHSU5HX0lOQ0RJUn07ZyIgdGNsQ29uZmlnLnNoCi0JaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQotCWluc3RhbGwgLW0gMDc1NSB0Y2xDb25maWcuc2ggJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30KLQlpbnN0YWxsIC1tIDA3NTUgdGNsQ29uZmlnLnNoICR7RH0ke2xpYmRpcn0KLQljZCAuLgotCWZvciBkaXIgaW4gY29tcGF0IGdlbmVyaWMgdW5peDsgZG8KLQkJaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfS8ke0JQTn0ke1ZFUn0vJGRpcgotCQlpbnN0YWxsIC1tIDA2NDQgJHtTfS8uLi8kZGlyLyouaCAke0R9JHtpbmNsdWRlZGlyfS8ke0JQTn0ke1ZFUn0vJGRpci8KLQlkb25lCi19Ci0KLVNZU1JPT1RfRElSUyArPSAiJHtiaW5kaXJfY3Jvc3NzY3JpcHRzfSIKLQotUEFDS0FHRVMgPSsgInRjbC1saWIiCi1GSUxFU190Y2wtbGliID0gIiR7bGliZGlyfS9saWJ0Y2w4LjYuc28uKiIKLUZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vdGNsJHtWRVJ9ICR7bGliZGlyfS90Y2w4LjYgJHtsaWJkaXJ9L3RjbDgiCi1GSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS90Y2xDb25maWcuc2ggJHtsaWJkaXJ9L3RjbG9vQ29uZmlnLnNoIgotCi0jIGlzbid0IGdldHRpbmcgcGlja2VkIHVwIGJ5IHNobGlicyBjb2RlCi1SREVQRU5EU18ke1BOfSArPSAidGNsLWxpYiIKLVJERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCi1SREVQRU5EU18ke1BOfS1wdGVzdCArPSAibGliZ2NjIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCi0KLWRvX2NvbXBpbGVfcHRlc3QoKSB7Ci0Jb2VfcnVubWFrZSB0Y2x0ZXN0Ci19Ci0KLWRvX2luc3RhbGxfcHRlc3QoKSB7Ci0JY3AgJHtCfS90Y2x0ZXN0ICR7RH0ke1BURVNUX1BBVEh9Ci0JY3AgLXIgJHtTfS8uLi9saWJyYXJ5ICR7RH0ke1BURVNUX1BBVEh9Ci0JY3AgLXIgJHtTfS8uLi90ZXN0cyAke0R9JHtQVEVTVF9QQVRIfQotfQotCi0jIEZpeCBzb21lIHBhdGhzIHRoYXQgbWlnaHQgYmUgdXNlZCBieSBUY2wgZXh0ZW5zaW9ucwotQklOQ09ORklHX0dMT0IgPSAiKkNvbmZpZy5zaCIKLQotIyBGaXggdGhlIHBhdGggaW4gc3N0YXRlCi1TU1RBVEVfU0NBTl9GSUxFUyArPSAiKkNvbmZpZy5zaCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsXzguNi43LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2xfOC42LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFjNzNiZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsXzguNi43LmJiCkBAIC0wLDAgKzEsMTAxIEBACitTVU1NQVJZID0gIlRvb2wgQ29tbWFuZCBMYW5ndWFnZSIKK0hPTUVQQUdFID0gImh0dHA6Ly90Y2wuc291cmNlZm9yZ2UubmV0IgorU0VDVElPTiA9ICJkZXZlbC90Y2x0ayIKKworIyBodHRwOi8vd3d3LnRjbC50ay9zb2Z0d2FyZS90Y2x0ay9saWNlbnNlLmh0bWwKK0xJQ0VOU0UgPSAidGNsICYgQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vLi4vbGljZW5zZS50ZXJtczttZDU9MDU4ZjYyMjk3OTgyODFiYmNhYzQyMzljNzg4Y2ZhMzggXAorICAgIGZpbGU6Ly8uLi9jb21wYXQvbGljZW5zZS50ZXJtczttZDU9MDU4ZjYyMjk3OTgyODFiYmNhYzQyMzljNzg4Y2ZhMzggXAorICAgIGZpbGU6Ly8uLi9saWJyYXJ5L2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKKyAgICBmaWxlOi8vLi4vbWFjb3N4L2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKKyAgICBmaWxlOi8vLi4vdGVzdHMvbGljZW5zZS50ZXJtczttZDU9MDU4ZjYyMjk3OTgyODFiYmNhYzQyMzljNzg4Y2ZhMzggXAorICAgIGZpbGU6Ly8uLi93aW4vbGljZW5zZS50ZXJtczttZDU9MDU4ZjYyMjk3OTgyODFiYmNhYzQyMzljNzg4Y2ZhMzggXAorIgorCitERVBFTkRTID0gInRjbC1uYXRpdmUgemxpYiIKKworQkFTRV9TUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS90Y2wvJHtCUE59JHtQVn0tc3JjLnRhci5neiBcCisgICAgICAgICAgICAgICAgZmlsZTovL3RjbC1hZGQtc29uYW1lLnBhdGNoIgorU1JDX1VSSSA9ICIke0JBU0VfU1JDX1VSSX0gXAorICAgICAgICAgICBmaWxlOi8vZml4X25vbl9uYXRpdmVfYnVpbGRfaXNzdWUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X2lzc3VlX3dpdGhfb2xkX2Rpc3Ryb19nbGliYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ub19wYWNrYWdlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90Y2wtcmVtb3ZlLWhhcmRjb2RlZC1pbnN0YWxsLXBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWx0ZXItaW5jbHVkZWRpci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjU2NzNhYWY0NWI1ZGU1ZDhkZDgwYmIzZGFhZWI4ODM4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdjNmI4Zjg0ZTM3MzMyNDIzY2ZlNWJhZTUwMzQ0MGQ4ODQ1MGRhOGNjMTI0MzQ5NjI0OWZhYTUyNjgwMjZiYTUiCisKK1NSQ19VUklfY2xhc3MtbmF0aXZlID0gIiR7QkFTRV9TUkNfVVJJfSIKKworUyA9ICIke1dPUktESVJ9LyR7QlBOfSR7UFZ9L3VuaXgiCisKK1ZFUiA9ICIke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcHRlc3QgYmluY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS10aHJlYWRzIC0tZGlzYWJsZS1ycGF0aCAtLWxpYmRpcj0ke2xpYmRpcn0iCisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKwllY2hvID4gJHtTfS8uLi9jb21wYXQvZml4c3RydG9kLmMKK30KKworZG9faW5zdGFsbCgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbC1wcml2YXRlLWhlYWRlcnMKKwlsbiAtc2YgLi90Y2xzaCR7VkVSfSAke0R9JHtiaW5kaXJ9L3RjbHNoCisJbG4gLXNmIHRjbHNoOC42ICR7RH0ke2JpbmRpcn0vdGNsc2gke1ZFUn0KKwlzZWQgLWkgInM7LUwke0J9Oy1MJHtTVEFHSU5HX0xJQkRJUn07ZyIgdGNsQ29uZmlnLnNoCisJc2VkIC1pICJzOycke1dPUktESVJ9Oycke1NUQUdJTkdfSU5DRElSfTtnIiB0Y2xDb25maWcuc2gKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9CisJaW5zdGFsbCAtbSAwNzU1IHRjbENvbmZpZy5zaCAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQorCWluc3RhbGwgLW0gMDc1NSB0Y2xDb25maWcuc2ggJHtEfSR7bGliZGlyfQorCWZvciBkaXIgaW4gY29tcGF0IGdlbmVyaWMgdW5peDsgZG8KKwkJaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfS8ke0JQTn0ke1ZFUn0vJGRpcgorCQlpbnN0YWxsIC1tIDA2NDQgJHtTfS8uLi8kZGlyLyouaCAke0R9JHtpbmNsdWRlZGlyfS8ke0JQTn0ke1ZFUn0vJGRpci8KKwlkb25lCit9CisKK1NZU1JPT1RfRElSUyArPSAiJHtiaW5kaXJfY3Jvc3NzY3JpcHRzfSIKKworUEFDS0FHRVMgPSsgInRjbC1saWIiCitGSUxFU190Y2wtbGliID0gIiR7bGliZGlyfS9saWJ0Y2w4LjYuc28uKiIKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vdGNsJHtWRVJ9ICR7bGliZGlyfS90Y2w4LjYgJHtsaWJkaXJ9L3RjbDgiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS90Y2xDb25maWcuc2ggJHtsaWJkaXJ9L3RjbG9vQ29uZmlnLnNoIgorCisjIGlzbid0IGdldHRpbmcgcGlja2VkIHVwIGJ5IHNobGlicyBjb2RlCitSREVQRU5EU18ke1BOfSArPSAidGNsLWxpYiIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibGliZ2NjIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJb2VfcnVubWFrZSB0Y2x0ZXN0Cit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJY3AgJHtCfS90Y2x0ZXN0ICR7RH0ke1BURVNUX1BBVEh9CisJY3AgLXIgJHtTfS8uLi9saWJyYXJ5ICR7RH0ke1BURVNUX1BBVEh9CisJY3AgLXIgJHtTfS8uLi90ZXN0cyAke0R9JHtQVEVTVF9QQVRIfQorfQorCisjIEZpeCBzb21lIHBhdGhzIHRoYXQgbWlnaHQgYmUgdXNlZCBieSBUY2wgZXh0ZW5zaW9ucworQklOQ09ORklHX0dMT0IgPSAiKkNvbmZpZy5zaCIKKworIyBGaXggdGhlIHBhdGggaW4gc3N0YXRlCitTU1RBVEVfU0NBTl9GSUxFUyArPSAiKkNvbmZpZy5zaCIKKworIyBDbGVhbnVwIGhvc3QgcGF0aCBmcm9tICR7bGliZGlyfS90Y2xDb25maWcuc2ggYW5kIHJlbW92ZSB0aGUKKyMgJHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS90Y2xDb25maWcuc2ggZnJvbSB0YXJnZXQKK1BBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DUyArPSAidGNsX3BhY2thZ2VfcHJlcHJvY2VzcyIKK3RjbF9wYWNrYWdlX3ByZXByb2Nlc3MoKSB7CisJc2VkIC1pIC1lICJzOyR7REVCVUdfUFJFRklYX01BUH07O2ciIFwKKwkgICAgICAgLWUgInM7LUwke1NUQUdJTkdfTElCRElSfTstTCR7bGliZGlyfTtnIiBcCisJICAgICAgIC1lICJzOyR7U1RBR0lOR19JTkNESVJ9OyR7aW5jbHVkZWRpcn07ZyIgXAorCSAgICAgICAtZSAiczstLXN5c3Jvb3Q9JHtSRUNJUEVfU1lTUk9PVH07O2ciIFwKKwkgICAgICAgJHtQS0dEfSR7bGliZGlyfS90Y2xDb25maWcuc2gKKworCXJtIC1mICR7UEtHRH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L3RjbENvbmZpZy5zaAorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzM18wLjkuMjIucjQ5Ny5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczNfMC45LjIyLnI0OTcuYmIKaW5kZXggNTJhYTE3ZS4uY2ViYzg2NiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzM18wLjkuMjIucjQ5Ny5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzXzAuOS4yMi5yNDk3LmJiCkBAIC0xNyw3ICsxNyw4IEBACiAjIE9ubHkgc3VidmVyc2lvbiB1cmwgbGVmdCBpbiBPRS1Db3JlLCB1c2UgYSBtaXJyb3IgdGFyYmFsbCBpbnN0ZWFkIHNpbmNlCiAjIHRoaXMgcmFyZWx5IGNoYW5nZXMuCiAjIHN2bjovL3N2bi5jb2RlLnNmLm5ldC9wL3VuZnMzL2NvZGU7bW9kdWxlPXRydW5rO3Jldj0ke01PRF9QVn07cHJvdG9jb2w9aHR0cAotU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvdHJ1bmtfc3ZuLmNvZGUuc2YubmV0Xy5wLnVuZnMzLmNvZGVfNDk3Xy50YXIuZ3ogXAorIyByZW5hbWUgdGhlIHRhcmJhbGwgaW4gbWlycm9yIHRvIGF2b2lkIGNsYXNoIHdpdGggdXNlciBsb2NhbCBzdm4gdGFyYmFsbAorU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvdW5mczMtMC45LjIyLnI0OTcudGFyLmd6IFwKICAgICAgICAgICAgZmlsZTovL3VuZnMzX3BhcmFsbGVsX2J1aWxkLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL2FsdGVybmF0ZV9ycGNfcG9ydHMucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vZml4X3BpZF9yYWNlX3BhcmVudF93cml0ZXNfY2hpbGRfcGlkLnBhdGNoIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhLmluYwppbmRleCBiMzM4ZWEwLi4xMjYxYzAyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYS5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGEuaW5jCkBAIC0yLDcgKzIsMTIgQEAKIERFU0NSSVBUSU9OID0gIlZhbGEgaXMgYSBDIy1saWtlIGxhbmd1YWdlIGRlZGljYXRlZCB0byBlYXNlIEdPYmplY3QgcHJvZ3JhbW1pbmcuIFwKIFZhbGEgY29tcGlsZXMgdG8gcGxhaW4gQyBhbmQgaGFzIG5vIHJ1bnRpbWUgZW52aXJvbm1lbnQgbm9yIHBlbmFsaXRpZXMgd2hhdHNvZXZlci4iCiBTRUNUSU9OID0gImRldmVsIgotREVQRU5EUyA9ICJiaXNvbi1uYXRpdmUgZmxleC1uYXRpdmUgbGlieHNsdC1uYXRpdmUgZ2xpYi0yLjAiCitERVBFTkRTID0gImJpc29uLW5hdGl2ZSBmbGV4LW5hdGl2ZSBnbGliLTIuMCIKKworIyBBcHBlbmRpbmcgbGlieHNsdC1uYXRpdmUgdG8gZGVwZW5kZW5jaWVzIGhhcyBhbiBlZmZlY3QKKyMgb2YgcmVidWlsZGluZyB0aGUgbWFudWFsLCB3aGljaCBpcyB2ZXJ5IHNsb3cuIExldCdzIGRvIHRoaXMKKyMgb25seSB3aGVuIGFwaS1kb2N1bWVudGF0aW9uIGRpc3RybyBmZWF0dXJlIGlzIGVuYWJsZWQuCitERVBFTkRTX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYXBpLWRvY3VtZW50YXRpb24nLCAnbGlieHNsdC1uYXRpdmUnLCAnJywgZCl9IgogCiAjIHZhbGEtbmF0aXZlIGNvbnRhaW5zIGEgbmF0aXZlIHZlcnNpb24gb2YgdmFwaWdlbiwgd2hpY2ggd2UgdXNlIGluc3RlYWQgb2YgdGhlIHRhcmdldCBvbmUKIERFUEVORFNfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgdmFsYS1uYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYV8wLjM0LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYV8wLjM0LjQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxYjQ5YWUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGFfMC4zNC40LmJiCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1yZXF1aXJlICR7QlBOfS5pbmMKLQotU1JDX1VSSSArPSAiIGZpbGU6Ly8wMDAxLWdpdC12ZXJzaW9uLWdlbi1kb24tdC1hcHBlbmQtZGlydHktaWYtd2UtcmUtbm90LWluLWcucGF0Y2ggXAotICAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXZhcGlnZW4ubTQtdXNlLVBLR19DT05GSUdfU1lTUk9PVF9ESVIucGF0Y2ggXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiYTg1Njk4OWQ3NDlmYzVlNDcyYTM1OTJiOTZmOWNhNDgiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNmIxN2JkMzM5NDE0NTYzZWJjNTFmNjRiMGI4Mzc5MTllYTc1NTJkOGE4ZmZhNzFjZGM4MzdkMjVjOTY5NmI4MyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhXzAuMzYuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhXzAuMzYuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTAwMGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGFfMC4zNi40LmJiCkBAIC0wLDAgKzEsOCBAQAorcmVxdWlyZSAke0JQTn0uaW5jCisKK1NSQ19VUkkgKz0gIiBmaWxlOi8vMDAwMS1naXQtdmVyc2lvbi1nZW4tZG9uLXQtYXBwZW5kLWRpcnR5LWlmLXdlLXJlLW5vdC1pbi1nLnBhdGNoIFwKKyAgICAgICAgICAgICBmaWxlOi8vMDAwMS12YXBpZ2VuLm00LXVzZS1QS0dfQ09ORklHX1NZU1JPT1RfRElSLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjNjMTkwMTQwOTNmMWEzZDk5NTM1NzI1M2I0NjMwODJjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU5ZjIzY2U3MTFjMWE3MmNlNjY0ZDEwOTQ2ZmJjNTk1M2YwMWIwYjdmMmEzNTYyZTdhMDFlMzYyZDg2ZGUwNTkiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDEtZml4LWJ1aWxkLWZvci1tdXNsLXRhcmdldHMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDEtZml4LWJ1aWxkLWZvci1tdXNsLXRhcmdldHMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjNmZlZmYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC8wMDAxLWZpeC1idWlsZC1mb3ItbXVzbC10YXJnZXRzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotRnJvbSAxYjFhMDI0ZWZkMThkNDQyOTRlMTg0ZTc5MmMxZTAzOWNhYjAyYmZlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFN1biwgMTQgRmViIDIwMTYgMDk6MTQ6MTIgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gZml4IGJ1aWxkIGZvciBtdXNsIHRhcmdldHMKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLSBjb25maWd1cmUuYWMgICAgICAgICAgICAgfCAyIC0tCi0gY29yZWdyaW5kL3ZnX3ByZWxvYWRlZC5jIHwgMiArLQotIGluY2x1ZGUvcHViX3Rvb2xfcmVkaXIuaCB8IDcgKysrKystLQotIDMgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCA5MzY2ZGM3Li42NzlmNTE0IDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC0xMDY2LDggKzEwNjYsNiBAQCBjYXNlICIke0dMSUJDX1ZFUlNJT059IiBpbgotIAk7OwotICAgICAgMi4wfDIuMXwqKQotIAlBQ19NU0dfUkVTVUxUKFt1bnN1cHBvcnRlZCB2ZXJzaW9uICR7R0xJQkNfVkVSU0lPTn1dKQotLQlBQ19NU0dfRVJST1IoW1ZhbGdyaW5kIHJlcXVpcmVzIGdsaWJjIHZlcnNpb24gMi4yIG9yIGxhdGVyLF0pCi0tCUFDX01TR19FUlJPUihbRGFyd2luIGxpYmMsIEJpb25pYyBsaWJjIG9yIFNvbGFyaXMgbGliY10pCi0gCTs7Ci0gZXNhYwotIAotZGlmZiAtLWdpdCBhL2NvcmVncmluZC92Z19wcmVsb2FkZWQuYyBiL2NvcmVncmluZC92Z19wcmVsb2FkZWQuYwotaW5kZXggMmVhN2E3YS4uZTQ5YzgzMiAxMDA2NDQKLS0tLSBhL2NvcmVncmluZC92Z19wcmVsb2FkZWQuYwotKysrIGIvY29yZWdyaW5kL3ZnX3ByZWxvYWRlZC5jCi1AQCAtNTYsNyArNTYsNyBAQAotIHZvaWQgVkdfTk9USUZZX09OX0xPQUQoZnJlZXJlcykoIHZvaWQgKTsKLSB2b2lkIFZHX05PVElGWV9PTl9MT0FEKGZyZWVyZXMpKCB2b2lkICkKLSB7Ci0tIyAgaWYgIWRlZmluZWQoX19VQ0xJQkNfXykgXAotKyMgIGlmICFkZWZpbmVkKF9fVUNMSUJDX18pICYmIGRlZmluZWQoX19HTElCQ19fKSBcCi0gICAgICAgJiYgIWRlZmluZWQoVkdQVl9hcm1fbGludXhfYW5kcm9pZCkgXAotICAgICAgICYmICFkZWZpbmVkKFZHUFZfeDg2X2xpbnV4X2FuZHJvaWQpIFwKLSAgICAgICAmJiAhZGVmaW5lZChWR1BWX21pcHMzMl9saW51eF9hbmRyb2lkKSBcCi1kaWZmIC0tZ2l0IGEvaW5jbHVkZS9wdWJfdG9vbF9yZWRpci5oIGIvaW5jbHVkZS9wdWJfdG9vbF9yZWRpci5oCi1pbmRleCBiYWMwMGQ3Li5mYmIyZWYyIDEwMDY0NAotLS0tIGEvaW5jbHVkZS9wdWJfdG9vbF9yZWRpci5oCi0rKysgYi9pbmNsdWRlL3B1Yl90b29sX3JlZGlyLmgKLUBAIC0yNDIsOCArMjQyLDcgQEAKLSAvKiAtLS0gU29uYW1lIG9mIHRoZSBzdGFuZGFyZCBDIGxpYnJhcnkuIC0tLSAqLwotIAotICNpZiBkZWZpbmVkKFZHT19saW51eCkgfHwgZGVmaW5lZChWR09fc29sYXJpcykKLS0jICBkZWZpbmUgIFZHX1pfTElCQ19TT05BTUUgIGxpYmNaZHNvWmEgICAgICAgICAgICAgIC8vIGxpYmMuc28qCi0tCi0rIyAgZGVmaW5lICBWR19aX0xJQkNfU09OQU1FICBsaWJjWmRaYSAgICAgICAgICAgICAgICAvLyBsaWJjLioKLSAjZWxpZiBkZWZpbmVkKFZHT19kYXJ3aW4pICYmIChEQVJXSU5fVkVSUyA8PSBEQVJXSU5fMTBfNikKLSAjICBkZWZpbmUgIFZHX1pfTElCQ19TT05BTUUgIGxpYlN5c3RlbVpkWmFaZGR5bGliICAgIC8vIGxpYlN5c3RlbS4qLmR5bGliCi0gCi1AQCAtMjc0LDcgKzI3MywxMSBAQAotIC8qIC0tLSBTb25hbWUgb2YgdGhlIHB0aHJlYWRzIGxpYnJhcnkuIC0tLSAqLwotIAotICNpZiBkZWZpbmVkKFZHT19saW51eCkKLSsjIGlmIGRlZmluZWQoX19HTElCQ19fKSB8fCBkZWZpbmVkKF9fVUNMSUJDX18pCi0gIyAgZGVmaW5lICBWR19aX0xJQlBUSFJFQURfU09OQU1FICBsaWJwdGhyZWFkWmRzb1pkMCAgICAgLy8gbGlicHRocmVhZC5zby4wCi0rIyBlbHNlCi0rIyAgZGVmaW5lICBWR19aX0xJQlBUSFJFQURfU09OQU1FICBsaWJjWmRaYSAgICAgICAgICAgICAgLy8gbGliYy4qCi0rI2VuZGlmCi0gI2VsaWYgZGVmaW5lZChWR09fZGFyd2luKQotICMgIGRlZmluZSAgVkdfWl9MSUJQVEhSRUFEX1NPTkFNRSAgbGliU3lzdGVtWmRaYVpkZHlsaWIgIC8vIGxpYlN5c3RlbS4qLmR5bGliCi0gI2VsaWYgZGVmaW5lZChWR09fc29sYXJpcykKLS0tIAotMi43LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC8wMDAxLW1ha2VmaWxlcy1Ecm9wLXNldHRpbmctbWNwdS10by1jb3J0ZXgtYTgtb24tYXJtLWFyY2gucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDEtbWFrZWZpbGVzLURyb3Atc2V0dGluZy1tY3B1LXRvLWNvcnRleC1hOC1vbi1hcm0tYXJjaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjFkYTdiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC8wMDAxLW1ha2VmaWxlcy1Ecm9wLXNldHRpbmctbWNwdS10by1jb3J0ZXgtYTgtb24tYXJtLWFyY2gucGF0Y2gKQEAgLTAsMCArMSwxMDggQEAKK0Zyb20gNzE1Y2YxMjIzODhmMzUyN2FmYTU2NDljZWJmOWYxNTIyYzI0MDY5MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDIwIEFwciAyMDE3IDEwOjExOjE2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIG1ha2VmaWxlczogRHJvcCBzZXR0aW5nIC1tY3B1IHRvIGNvcnRleC1hOCBvbiBhcm0KKyBhcmNoaXRlY3R1cmUKKworV2UgY2FuIG5vdCBhc3N1bWUgdGhhdCBhbGwgYXJjaGVzIGFybXY3KyBhcmUgY29ydGV4LWE4IG9ubHkKK2l0IGZhaWxzIHRvIGJ1aWxkIGZvciBycGkgd2hpY2ggaXMgYXJtdjd2ZSBiYXNlZCAoY29ydGV4LWE4KSBjcHUKK2ltcGxlbWVudGF0aW9uLgorRml4ZXMKK3wgY2MxOiB3YXJuaW5nOiBzd2l0Y2ggLW1jcHU9Y29ydGV4LWE4IGNvbmZsaWN0cyB3aXRoIC1tYXJjaD1hcm12N3ZlIHN3aXRjaAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIE1ha2VmaWxlLmFsbC5hbSAgICAgICAgICAgIHwgIDYgKysrLS0tCisgaGVsZ3JpbmQvdGVzdHMvTWFrZWZpbGUuYW0gfCAgNiArKystLS0KKyBub25lL3Rlc3RzL2FybS9NYWtlZmlsZS5hbSB8IDE4ICsrKysrKysrKy0tLS0tLS0tLQorIDMgZmlsZXMgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbGwuYW0gYi9NYWtlZmlsZS5hbGwuYW0KK2luZGV4IDAyMDU5YTMuLmM3YzQ3MDAgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbGwuYW0KKysrKyBiL01ha2VmaWxlLmFsbC5hbQorQEAgLTE5NywxMSArMTk3LDExIEBAIEFNX0NDQVNGTEFHU19QUEM2NExFX0xJTlVYICA9IEBGTEFHX002NEAgLWcKKyAKKyBBTV9GTEFHX00zMjY0X0FSTV9MSU5VWCAgID0gQEZMQUdfTTMyQAorIEFNX0NGTEFHU19BUk1fTElOVVggICAgICAgPSBARkxBR19NMzJAIFwKKy0JCQkgCSQoQU1fQ0ZMQUdTX0JBU0UpIC1tYXJtIC1tY3B1PWNvcnRleC1hOAorKwkJCSAJJChBTV9DRkxBR1NfQkFTRSkgLW1hcm0KKyBBTV9DRkxBR1NfUFNPX0FSTV9MSU5VWCAgID0gQEZMQUdfTTMyQCAkKEFNX0NGTEFHU19CQVNFKSBcCistCQkJCS1tYXJtIC1tY3B1PWNvcnRleC1hOCAkKEFNX0NGTEFHU19QU09fQkFTRSkKKysJCQkJLW1hcm0gJChBTV9DRkxBR1NfUFNPX0JBU0UpCisgQU1fQ0NBU0ZMQUdTX0FSTV9MSU5VWCAgICA9IEBGTEFHX00zMkAgXAorLQkJCQktbWFybSAtbWNwdT1jb3J0ZXgtYTggLWcKKysJCQkJLW1hcm0gLWcKKyAKKyBBTV9GTEFHX00zMjY0X0FSTTY0X0xJTlVYID0gQEZMQUdfTTY0QAorIEFNX0NGTEFHU19BUk02NF9MSU5VWCAgICAgPSBARkxBR19NNjRAICQoQU1fQ0ZMQUdTX0JBU0UpCitkaWZmIC0tZ2l0IGEvaGVsZ3JpbmQvdGVzdHMvTWFrZWZpbGUuYW0gYi9oZWxncmluZC90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggZGY4MjE2OS4uMDdlYjY2YSAxMDA2NDQKKy0tLSBhL2hlbGdyaW5kL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi9oZWxncmluZC90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTE4OSw5ICsxODksOSBAQCBpZiAhIFZHQ09ORl9QTEFURk9STVNfSU5DTFVERV9YODZfREFSV0lOCisgZW5kaWYKKyAKKyBpZiBWR0NPTkZfUExBVEZPUk1TX0lOQ0xVREVfQVJNX0xJTlVYCistYW5ub3RhdGVfaGJlZm9yZV9DRkxBR1MgPSAkKEFNX0NGTEFHUykgLW1jcHU9Y29ydGV4LWE4CistdGMwN19oYmwxX0NGTEFHUyAgICAgICAgPSAkKEFNX0NGTEFHUykgLW1jcHU9Y29ydGV4LWE4CistdGMwOF9oYmwyX0NGTEFHUyAgICAgICAgPSAkKEFNX0NGTEFHUykgLW1jcHU9Y29ydGV4LWE4CisrYW5ub3RhdGVfaGJlZm9yZV9DRkxBR1MgPSAkKEFNX0NGTEFHUykKKyt0YzA3X2hibDFfQ0ZMQUdTICAgICAgICA9ICQoQU1fQ0ZMQUdTKQorK3RjMDhfaGJsMl9DRkxBR1MgICAgICAgID0gJChBTV9DRkxBR1MpCisgZWxzZQorIGFubm90YXRlX2hiZWZvcmVfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCisgdGMwN19oYmwxX0NGTEFHUyAgICAgICAgPSAkKEFNX0NGTEFHUykKK2RpZmYgLS1naXQgYS9ub25lL3Rlc3RzL2FybS9NYWtlZmlsZS5hbSBiL25vbmUvdGVzdHMvYXJtL01ha2VmaWxlLmFtCitpbmRleCAwMjRlYjZkLi5jY2VjYjkwIDEwMDY0NAorLS0tIGEvbm9uZS90ZXN0cy9hcm0vTWFrZWZpbGUuYW0KKysrKyBiL25vbmUvdGVzdHMvYXJtL01ha2VmaWxlLmFtCitAQCAtNTIsMTAgKzUyLDEwIEBAIGFsbGV4ZWNfQ0ZMQUdTCQk9ICQoQU1fQ0ZMQUdTKSBARkxBR19XX05PX05PTk5VTExACisgIyBuZWVkIHNwZWNpYWwgaGVscGluZyB3LnIudCAtbWZwdSBhbmQgLW1mbG9hdC1hYmksIHRob3VnaC4KKyAjIEFsc28gZm9yY2UgLU8wIHNpbmNlIC1PIHRha2VzIGh1bmRyZWRzIG9mIE1CIG9mIG1lbW9yeSAKKyAjIGZvciB2NmludFRodW1iLmMuCistdjZpbnRBUk1fQ0ZMQUdTICAgPSAkKEFNX0NGTEFHUykgLWcgLU8wIC1tY3B1PWNvcnRleC1hOCAtbWFybQorLXY2aW50VGh1bWJfQ0ZMQUdTID0gJChBTV9DRkxBR1MpIC1nIC1PMCAtbWNwdT1jb3J0ZXgtYTggLW10aHVtYgorK3Y2aW50QVJNX0NGTEFHUyAgID0gJChBTV9DRkxBR1MpIC1nIC1PMCAtbWFybQorK3Y2aW50VGh1bWJfQ0ZMQUdTID0gJChBTV9DRkxBR1MpIC1nIC1PMCAtbXRodW1iCisgCistdjZtZWRpYV9DRkxBR1MgICAgPSAkKEFNX0NGTEFHUykgLWcgLU8wIC1tY3B1PWNvcnRleC1hOCAtbXRodW1iCisrdjZtZWRpYV9DRkxBR1MgICAgPSAkKEFNX0NGTEFHUykgLWcgLU8wIC1tdGh1bWIKKyAKKyB2OGNyeXB0b19hX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAtZyAtTzAgLW1mcHU9Y3J5cHRvLW5lb24tZnAtYXJtdjggLW1hcm0KKyB2OGNyeXB0b190X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAtZyAtTzAgLW1mcHU9Y3J5cHRvLW5lb24tZnAtYXJtdjggLW10aHVtYgorQEAgLTY1LDIzICs2NSwyMyBAQCB2OG1lbW9yeV9hX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAtZyAtTzAgXAorIHY4bWVtb3J5X3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpIC1nIC1PMCBcCisgCQkJLW1hcmNoPWFybXY4LWEgLW1mcHU9Y3J5cHRvLW5lb24tZnAtYXJtdjggLW10aHVtYgorIAorLXZmcF9DRkxBR1MgICAgICAgID0gJChBTV9DRkxBR1MpIC1nIC1PMCAtbWNwdT1jb3J0ZXgtYTggXAorK3ZmcF9DRkxBR1MgICAgICAgID0gJChBTV9DRkxBR1MpIC1nIC1PMCBcCisgCQkJLW1mcHU9bmVvbiBcCisgCQkJLW10aHVtYgorIAorIAorLW5lb24xMjhfQ0ZMQUdTICAgID0gJChBTV9DRkxBR1MpIC1nIC1PMCAtbWNwdT1jb3J0ZXgtYTggXAorK25lb24xMjhfQ0ZMQUdTICAgID0gJChBTV9DRkxBR1MpIC1nIC1PMCBcCisgCQkJLW1mcHU9bmVvbiBcCisgCQkJLW10aHVtYgorIAorLW5lb242NF9DRkxBR1MgICAgID0gJChBTV9DRkxBR1MpIC1nIC1PMCAtbWNwdT1jb3J0ZXgtYTggXAorK25lb242NF9DRkxBR1MgICAgID0gJChBTV9DRkxBR1MpIC1nIC1PMCBcCisgCQkJLW1mcHU9bmVvbiBcCisgCQkJLW10aHVtYgorIAorIGludGRpdl9DRkxBR1MJICA9ICQoQU1fQ0ZMQUdTKSAtZyAtbWFyY2g9YXJtdjd2ZSAtbWNwdT1jb3J0ZXgtYTE1IC1tdGh1bWIKKy1sZHJ0X0NGTEFHUwkgID0gJChBTV9DRkxBR1MpIC1nIC1tY3B1PWNvcnRleC1hOCAtbXRodW1iCistbGRydF9hcm1fQ0ZMQUdTCSAgPSAkKEFNX0NGTEFHUykgLWcgLW1jcHU9Y29ydGV4LWE4IC1tYXJtCisrbGRydF9DRkxBR1MJICA9ICQoQU1fQ0ZMQUdTKSAtZyAtbXRodW1iCisrbGRydF9hcm1fQ0ZMQUdTCSAgPSAkKEFNX0NGTEFHUykgLWcgLW1hcm0KKyAKKy12Y3Z0X2ZpeGVkX2Zsb2F0X1ZGUF9DRkxBR1MgPSAkKEFNX0NGTEFHUykgLWcgLW1jcHU9Y29ydGV4LWE4IC1tZnB1PXZmcHYzCisrdmN2dF9maXhlZF9mbG9hdF9WRlBfQ0ZMQUdTID0gJChBTV9DRkxBR1MpIC1nIC1tZnB1PXZmcHYzCisgCisgdmZwdjRfZm1hX0NGTEFHUyAgPSAkKEFNX0NGTEFHUykgLWcgLU8wIC1tYXJjaD1hcm12N3ZlIC1tY3B1PWNvcnRleC1hMTUgLW1mcHU9dmZwdjQgLW1hcm0KKy0tIAorMi4xMi4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvMDAwMS1tZW1jaGVjay1hcm02NC1EZWZpbmUtX19USFJPVy1pZi1ub3QtYWxyZWFkeS1kZWZpbmVkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC8wMDAxLW1lbWNoZWNrLWFybTY0LURlZmluZS1fX1RIUk9XLWlmLW5vdC1hbHJlYWR5LWRlZmluZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ4ZDdkYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvMDAwMS1tZW1jaGVjay1hcm02NC1EZWZpbmUtX19USFJPVy1pZi1ub3QtYWxyZWFkeS1kZWZpbmVkLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gMzQwOWRjMzVjMTViYjE0YzhhNTI1MjM5ODA2MzIyNjQ4ZTA3OWFiMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDUgSnVsIDIwMTcgMTc6MTI6NDMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAxLzNdIG1lbWNoZWNrL2FybTY0OiBEZWZpbmUgX19USFJPVyBpZiBub3QgYWxyZWFkeSBkZWZpbmVkCisKK0hlbHBzIGNvbXBpbGluZyB3aXRoIG11c2wgd2hlcmUgX19USFJPVyBpcyBub3QgYXZhaWxhYmxlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKKyBtZW1jaGVjay90ZXN0cy9hcm02NC1saW51eC9zY2FsYXIuaCB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21lbWNoZWNrL3Rlc3RzL2FybTY0LWxpbnV4L3NjYWxhci5oIGIvbWVtY2hlY2svdGVzdHMvYXJtNjQtbGludXgvc2NhbGFyLmgKK2luZGV4IDkwMDg4MTYuLjhlZjA1MGYgMTAwNjQ0CistLS0gYS9tZW1jaGVjay90ZXN0cy9hcm02NC1saW51eC9zY2FsYXIuaAorKysrIGIvbWVtY2hlY2svdGVzdHMvYXJtNjQtbGludXgvc2NhbGFyLmgKK0BAIC0xMiw2ICsxMiwxMCBAQAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyAKKysjaWZuZGVmIF9fVEhST1cKKysjZGVmaW5lIF9fVEhST1cKKysjZW5kaWYKKysKKyAvLyBTaW5jZSB3ZSB1c2UgdmtpX3VuaXN0ZC5oLCB3ZSBjYW4ndCBpbmNsdWRlIDx1bmlzdGQuaD4uICBTbyB3ZSBoYXZlIHRvCisgLy8gZGVjbGFyZSB0aGlzIG91cnNlbHZlcy4KKyBleHRlcm4gbG9uZyBpbnQgc3lzY2FsbCAobG9uZyBpbnQgX19zeXNubywgLi4uKSBfX1RIUk9XOworLS0gCisyLjEzLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC8wMDAxLW1lbWNoZWNrLXRlc3RzLVVzZS11Y29udGV4dF90LWluc3RlYWQtb2Ytc3RydWN0LXVjb24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDEtbWVtY2hlY2stdGVzdHMtVXNlLXVjb250ZXh0X3QtaW5zdGVhZC1vZi1zdHJ1Y3QtdWNvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjE2YTFhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC8wMDAxLW1lbWNoZWNrLXRlc3RzLVVzZS11Y29udGV4dF90LWluc3RlYWQtb2Ytc3RydWN0LXVjb24ucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSA2MjlhYzQ5MmIxZDliYzcwOWQxNzMzN2ViOWIxYzI4NjAzZWNhMjUwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjggSnVuIDIwMTcgMTE6MDE6MjUgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gbWVtY2hlY2svdGVzdHM6IFVzZSB1Y29udGV4dF90IGluc3RlYWQgb2Ygc3RydWN0IHVjb250ZXh0CisKK2dsaWJjIDIuMjYgZG9lcyBub3QgZXhwb3NlIHN0cnVjdCB1Y29udGV4dCBhbnltb3JlCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3Mua2RlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzgxNzY5XQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbWVtY2hlY2svdGVzdHMvbGludXgvc3RhY2tfY2hhbmdlcy5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbWVtY2hlY2svdGVzdHMvbGludXgvc3RhY2tfY2hhbmdlcy5jIGIvbWVtY2hlY2svdGVzdHMvbGludXgvc3RhY2tfY2hhbmdlcy5jCitpbmRleCBmZmI0OWM2Li5hY2M0MTA5IDEwMDY0NAorLS0tIGEvbWVtY2hlY2svdGVzdHMvbGludXgvc3RhY2tfY2hhbmdlcy5jCisrKysgYi9tZW1jaGVjay90ZXN0cy9saW51eC9zdGFja19jaGFuZ2VzLmMKK0BAIC0xMSw3ICsxMSw3IEBACisgLy8gY2hlY2tzIHRoYXQgVmFsZ3JpbmQgbm90aWNlcyB0aGVpciBzdGFjayBjaGFuZ2VzIHByb3Blcmx5LgorIAorICNpZmRlZiBfX0dMSUJDX18KKy10eXBlZGVmICBzdHJ1Y3QgdWNvbnRleHQgIG15Y29udGV4dDsKKyt0eXBlZGVmIHVjb250ZXh0X3QgIG15Y29udGV4dDsKKyAKKyBteWNvbnRleHQgY3R4MSwgY3R4Miwgb2xkYzsKKyBpbnQgY291bnQ7CistLSAKKzIuMTMuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDEtc2lncXVldWUtUmVuYW1lLV9zaWZpZWxkcy10by1fX3NpX2ZpZWxkcy1vbi1tdXNsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC8wMDAxLXNpZ3F1ZXVlLVJlbmFtZS1fc2lmaWVsZHMtdG8tX19zaV9maWVsZHMtb24tbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzM2NjE1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC8wMDAxLXNpZ3F1ZXVlLVJlbmFtZS1fc2lmaWVsZHMtdG8tX19zaV9maWVsZHMtb24tbXVzbC5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDY0YWQyNzQ0YWNmYjRmYTQwYjFjMTE0NjMzYTA1M2Y4NzEyNWEyMDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAxMCBKdW4gMjAxNyAwMDo0NjozOSAtMDcwMAorU3ViamVjdDogW1BBVENIIDEvNl0gc2lncXVldWU6IFJlbmFtZSBfc2lmaWVsZHMgdG8gX19zaV9maWVsZHMgb24gbXVzbAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIG1lbWNoZWNrL3Rlc3RzL2xpbnV4L3NpZ3F1ZXVlLmMgfCA1ICsrKysrCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbWVtY2hlY2svdGVzdHMvbGludXgvc2lncXVldWUuYyBiL21lbWNoZWNrL3Rlc3RzL2xpbnV4L3NpZ3F1ZXVlLmMKK2luZGV4IGQxOGJkNzIuLmFjYjdjYmEgMTAwNjQ0CistLS0gYS9tZW1jaGVjay90ZXN0cy9saW51eC9zaWdxdWV1ZS5jCisrKysgYi9tZW1jaGVjay90ZXN0cy9saW51eC9zaWdxdWV1ZS5jCitAQCAtOCw2ICs4LDExIEBACisgI2luY2x1ZGUgPHN5c2NhbGwuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgCisrLyogbXVzbCBsaWJjIGRlZmluZXMgc2lnaW5mb190IF9fc2lfZmllbGRzIGluc3RlYWQgb2YgX3NpZmllbGRzICovCisrI2lmIGRlZmluZWQoX19saW51eF9fKSAmJiAhZGVmaW5lZChfX0dMSUJDX18pCisrI2RlZmluZSBfc2lmaWVsZHMgX19zaV9maWVsZHMKKysjZW5kaWYKKysKKyBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgeworICAgc2lnaW5mb190ICpzaTsKKy0tIAorMi4xMy4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvMDAwMS1zdHJfdGVzdGVyLmMtTGltaXQtcmF3bWVtY2hyLXRlc3QtdG8tZ2xpYmMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDEtc3RyX3Rlc3Rlci5jLUxpbWl0LXJhd21lbWNoci10ZXN0LXRvLWdsaWJjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NWI4ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDEtc3RyX3Rlc3Rlci5jLUxpbWl0LXJhd21lbWNoci10ZXN0LXRvLWdsaWJjLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gZGU2OTJlMzU5ODAxYTFmMDQ4OGM3NjI2N2U0ZjkwNGRkMmVmZTc1NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDEwIEp1biAyMDE3IDAwOjM5OjA3IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHN0cl90ZXN0ZXIuYzogTGltaXQgcmF3bWVtY2hyKCkgdGVzdCB0byBnbGliYworCityYXdtZW1jaHIoKSBpcyBhIEdOVSBleHRlbnRpb24gdGhlcmVmb3JlIG1hcmsgaXQgc28KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBtZW1jaGVjay90ZXN0cy9zdHJfdGVzdGVyLmMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbWVtY2hlY2svdGVzdHMvc3RyX3Rlc3Rlci5jIGIvbWVtY2hlY2svdGVzdHMvc3RyX3Rlc3Rlci5jCitpbmRleCA5Zjc3OTBhLi40N2U0YjRhIDEwMDY0NAorLS0tIGEvbWVtY2hlY2svdGVzdHMvc3RyX3Rlc3Rlci5jCisrKysgYi9tZW1jaGVjay90ZXN0cy9zdHJfdGVzdGVyLmMKK0BAIC01MDQsNyArNTA0LDcgQEAgdGVzdF9zdHJjaHJudWwgKHZvaWQpCisgI2VuZGlmCisgCisgLy8gREREOiBiZXR0ZXIgZG9uZSBieSB0ZXN0aW5nIGZvciB0aGUgZnVuY3Rpb24uCistI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19zdW4pCisrI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19zdW4pICYmIGRlZmluZWQoX19HTElCQ19fKQorIHN0YXRpYyB2b2lkCisgdGVzdF9yYXdtZW1jaHIgKHZvaWQpCisgeworQEAgLTE0NDIsNyArMTQ0Miw3IEBAIG1haW4gKHZvaWQpCisgICB0ZXN0X3N0cmNocm51bCAoKTsKKyAjIGVuZGlmCisgCistIyBpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fc3VuKQorKyMgaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX3N1bikgJiYgZGVmaW5lZChfX0dMSUJDX18pCisgICAvKiByYXdtZW1jaHIuICAqLworICAgdGVzdF9yYXdtZW1jaHIgKCk7CisgIyBlbmRpZgorLS0gCisyLjEzLjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC8wMDAyLWNvbnRleHQtQVBJcy1hcmUtbm90LWF2YWlsYWJsZS1vbi1tdXNsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC8wMDAyLWNvbnRleHQtQVBJcy1hcmUtbm90LWF2YWlsYWJsZS1vbi1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOWYzM2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDItY29udGV4dC1BUElzLWFyZS1ub3QtYXZhaWxhYmxlLW9uLW11c2wucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorRnJvbSA4NjJiODA3MDc2ZDU3ZjJmNThlZDlkNTcyZGRhYzhiYjQwMjc3NGEyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMTAgSnVuIDIwMTcgMDE6MDE6MTAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAyLzZdIGNvbnRleHQgQVBJcyBhcmUgbm90IGF2YWlsYWJsZSBvbiBtdXNsCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbWVtY2hlY2svdGVzdHMvbGludXgvc3RhY2tfY2hhbmdlcy5jIHwgNyArKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbWVtY2hlY2svdGVzdHMvbGludXgvc3RhY2tfY2hhbmdlcy5jIGIvbWVtY2hlY2svdGVzdHMvbGludXgvc3RhY2tfY2hhbmdlcy5jCitpbmRleCBhOTc4ZmMyLi5mZmI0OWM2IDEwMDY0NAorLS0tIGEvbWVtY2hlY2svdGVzdHMvbGludXgvc3RhY2tfY2hhbmdlcy5jCisrKysgYi9tZW1jaGVjay90ZXN0cy9saW51eC9zdGFja19jaGFuZ2VzLmMKK0BAIC0xMCw2ICsxMCw3IEBACisgLy8gVGhpcyB0ZXN0IGlzIGNoZWNraW5nIHRoZSBsaWJjIGNvbnRleHQgY2FsbHMgKHNldGNvbnRleHQsIGV0Yy4pIGFuZAorIC8vIGNoZWNrcyB0aGF0IFZhbGdyaW5kIG5vdGljZXMgdGhlaXIgc3RhY2sgY2hhbmdlcyBwcm9wZXJseS4KKyAKKysjaWZkZWYgX19HTElCQ19fCisgdHlwZWRlZiAgc3RydWN0IHVjb250ZXh0ICBteWNvbnRleHQ7CisgCisgbXljb250ZXh0IGN0eDEsIGN0eDIsIG9sZGM7CitAQCAtNTEsOSArNTIsMTEgQEAgaW50IGluaXRfY29udGV4dChteWNvbnRleHQgKnVjKQorIAorICAgICByZXR1cm4gcmV0OworIH0KKysjZW5kaWYKKyAKKyBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgeworKyNpZmRlZiBfX0dMSUJDX18KKyAgICAgaW50IGMxID0gaW5pdF9jb250ZXh0KCZjdHgxKTsKKyAgICAgaW50IGMyID0gaW5pdF9jb250ZXh0KCZjdHgyKTsKKyAKK0BAIC02Niw2ICs2OSw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgLy9mcmVlKGN0eDEudWNfc3RhY2suc3Nfc3ApOworICAgICBWQUxHUklORF9TVEFDS19ERVJFR0lTVEVSKGMyKTsKKyAgICAgLy9mcmVlKGN0eDIudWNfc3RhY2suc3Nfc3ApOworLQorKyNlbHNlCisrICAgIHByaW50ZigibGliYyBjb250ZXh0IGNhbGwgQVBJcyBlLmcuIGdldGNvbnRleHQoKSBhcmUgZGVwcmVjYXRlZCBieSBwb3NpeFxuIik7CisrI2VuZGlmCisgICAgIHJldHVybiAwOworIH0KKy0tIAorMi4xMy4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvMDAwMi1tZW1jaGVjay14ODYtRGVmaW5lLV9fVEhST1ctaWYtbm90LWRlZmluZWQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDItbWVtY2hlY2steDg2LURlZmluZS1fX1RIUk9XLWlmLW5vdC1kZWZpbmVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MzM0NzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDItbWVtY2hlY2steDg2LURlZmluZS1fX1RIUk9XLWlmLW5vdC1kZWZpbmVkLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gNjdkMTk5ZGJkY2JiM2ZlZmY1Zjg5MjhmODc3MjVmYzY0YzAzMDdkNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDUgSnVsIDIwMTcgMTc6MzY6NDIgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAyLzNdIG1lbWNoZWNrL3g4NjogRGVmaW5lIF9fVEhST1cgaWYgbm90IGRlZmluZWQKKworbXVzbCBkb2VzIG5vdCBoYXZlIF9fVEhST1csIHRoZXJlZm9yZSBtYWtlIGl0IG51bGwKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworIG1lbWNoZWNrL3Rlc3RzL3g4Ni1saW51eC9zY2FsYXIuaCB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21lbWNoZWNrL3Rlc3RzL3g4Ni1saW51eC9zY2FsYXIuaCBiL21lbWNoZWNrL3Rlc3RzL3g4Ni1saW51eC9zY2FsYXIuaAoraW5kZXggZWYyOGIwMy4uNTJmNzQyZSAxMDA2NDQKKy0tLSBhL21lbWNoZWNrL3Rlc3RzL3g4Ni1saW51eC9zY2FsYXIuaAorKysrIGIvbWVtY2hlY2svdGVzdHMveDg2LWxpbnV4L3NjYWxhci5oCitAQCAtMTEsNiArMTEsMTAgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisgCisrI2lmbmRlZiBfX1RIUk9XCisrI2RlZmluZSBfX1RIUk9XCisrI2VuZGlmCisrCisgLy8gU2luY2Ugd2UgdXNlIHZraV91bmlzdGQuaCwgd2UgY2FuJ3QgaW5jbHVkZSA8dW5pc3RkLmg+LiAgU28gd2UgaGF2ZSB0bworIC8vIGRlY2xhcmUgdGhpcyBvdXJzZWx2ZXMuCisgZXh0ZXJuIGxvbmcgaW50IHN5c2NhbGwgKGxvbmcgaW50IF9fc3lzbm8sIC4uLikgX19USFJPVzsKKy0tIAorMi4xMy4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvMDAwMy1jb3JyZWN0LWluY2x1ZGUtZGlyZWN0aXZlLXBhdGgtZm9yLWNvbmZpZy5oLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC8wMDAzLWNvcnJlY3QtaW5jbHVkZS1kaXJlY3RpdmUtcGF0aC1mb3ItY29uZmlnLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI5NjVjNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvMDAwMy1jb3JyZWN0LWluY2x1ZGUtZGlyZWN0aXZlLXBhdGgtZm9yLWNvbmZpZy5oLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK0Zyb20gZWNiZGVhN2JkOGIwODIwNWYxYmMzZjZiNzJkNGI0YTgwZjMxM2ZjYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDEwIEp1biAyMDE3IDAxOjAzOjE3IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMy82XSBjb3JyZWN0IGluY2x1ZGUgZGlyZWN0aXZlIHBhdGggZm9yIGNvbmZpZy5oCisKK3doZW4gYnVpbGRpbmcgb3V0IG9mIHNvdXJjZSB0cmVlLCBpdCBjYW4gbm90IGZpbmQKK3RoZSBnZW5lcmF0ZWQgY29uZmlnLmggb3RoZXJ3aXNlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbWVtY2hlY2svdGVzdHMvbGludXgvc3lzY2FsbHMtMjAwNy5jICB8IDIgKy0KKyBtZW1jaGVjay90ZXN0cy9saW51eC9zeXNsb2ctc3lzY2FsbC5jIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbWVtY2hlY2svdGVzdHMvbGludXgvc3lzY2FsbHMtMjAwNy5jIGIvbWVtY2hlY2svdGVzdHMvbGludXgvc3lzY2FsbHMtMjAwNy5jCitpbmRleCBiNjFjNmQ1Li5jYzNmZDYyIDEwMDY0NAorLS0tIGEvbWVtY2hlY2svdGVzdHMvbGludXgvc3lzY2FsbHMtMjAwNy5jCisrKysgYi9tZW1jaGVjay90ZXN0cy9saW51eC9zeXNjYWxscy0yMDA3LmMKK0BAIC0xMCw3ICsxMCw3IEBACisgCisgI2RlZmluZSBfR05VX1NPVVJDRQorIAorLSNpbmNsdWRlICIuLi8uLi9jb25maWcuaCIKKysjaW5jbHVkZSAiY29uZmlnLmgiCisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPHNpZ25hbC5oPgorICNpbmNsdWRlIDxzdGRpbnQuaD4KK2RpZmYgLS1naXQgYS9tZW1jaGVjay90ZXN0cy9saW51eC9zeXNsb2ctc3lzY2FsbC5jIGIvbWVtY2hlY2svdGVzdHMvbGludXgvc3lzbG9nLXN5c2NhbGwuYworaW5kZXggMTE0MzcyMi4uMjFlNzU4YiAxMDA2NDQKKy0tLSBhL21lbWNoZWNrL3Rlc3RzL2xpbnV4L3N5c2xvZy1zeXNjYWxsLmMKKysrKyBiL21lbWNoZWNrL3Rlc3RzL2xpbnV4L3N5c2xvZy1zeXNjYWxsLmMKK0BAIC02LDcgKzYsNyBAQAorICAqICAgIGtsb2djdGwoKS4KKyAgKi8KKyAKKy0jaW5jbHVkZSAiLi4vLi4vY29uZmlnLmgiCisrI2luY2x1ZGUgImNvbmZpZy5oIgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpZiBkZWZpbmVkKEhBVkVfU1lTX0tMT0dfSCkKKyAjaW5jbHVkZSA8c3lzL2tsb2cuaD4KKy0tIAorMi4xMy4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvMDAwMy10ZXN0cy1zZWdfb3ZlcnJpZGUtUmVwbGFjZS1fX21vZGlmeV9sZHQtd2l0aC1zeXNjYWxsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC8wMDAzLXRlc3RzLXNlZ19vdmVycmlkZS1SZXBsYWNlLV9fbW9kaWZ5X2xkdC13aXRoLXN5c2NhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmExMzQ0YwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvMDAwMy10ZXN0cy1zZWdfb3ZlcnJpZGUtUmVwbGFjZS1fX21vZGlmeV9sZHQtd2l0aC1zeXNjYWxsLnBhdGNoCkBAIC0wLDAgKzEsNjggQEAKK0Zyb20gZDEwMzQ3NTg3NTg1OGFiOGEyZTZiNTNjZTE3OGJiMmY2Mzg4M2Q0YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDUgSnVsIDIwMTcgMTc6Mzc6NTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAzLzNdIHRlc3RzL3NlZ19vdmVycmlkZTogUmVwbGFjZSBfX21vZGlmeV9sZHQoKSB3aXRoIHN5c2NhbGwoKQorCitfX21vZGlmeV9sZHQoKSBpcyBzcGVjaWZpYyB0byBnbGliYywgcmVwbGFjaW5nIGl0IHdpdGggc3lzY2FsbCgpCittYWtlcyBpdCBtb3JlIHBvcnRhYmxlLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCisgbm9uZS90ZXN0cy94ODYtbGludXgvc2VnX292ZXJyaWRlLmMgfCAxNSArKysrKystLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbm9uZS90ZXN0cy94ODYtbGludXgvc2VnX292ZXJyaWRlLmMgYi9ub25lL3Rlc3RzL3g4Ni1saW51eC9zZWdfb3ZlcnJpZGUuYworaW5kZXggYjc2MTljOS4uYzg5ODc0YiAxMDA2NDQKKy0tLSBhL25vbmUvdGVzdHMveDg2LWxpbnV4L3NlZ19vdmVycmlkZS5jCisrKysgYi9ub25lL3Rlc3RzL3g4Ni1saW51eC9zZWdfb3ZlcnJpZGUuYworQEAgLTIsNiArMiw4IEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSA8c3lzY2FsbC5oPgorIAorIC8qIFN0dWZmIGZyb20gV2luZS4gKi8KKyAKK0BAIC01MiwxNCArNTQsMTEgQEAgaW5saW5lIHN0YXRpYyB1bnNpZ25lZCBpbnQgd2luZV9sZHRfZ2V0X2xpbWl0KCBjb25zdCBMRFRfRU5UUlkgKmVudCApCisgLyogb3VyIGNvcHkgb2YgdGhlIGxkdCAqLworIExEVF9FTlRSWSBsZHRfY29weVs4MTkyXTsKKyAKKy0vKiBTeXN0ZW0gY2FsbCB0byBzZXQgTERUIGVudHJ5LiAgKi8KKy0vL2V4dGVybiBpbnQgX19tb2RpZnlfbGR0IChpbnQsIHN0cnVjdCBtb2RpZnlfbGR0X2xkdF9zICosIHNpemVfdCk7CistZXh0ZXJuIGludCBfX21vZGlmeV9sZHQgKGludCwgdm9pZCAqLCBzaXplX3QpOworLQorIHZvaWQgcHJpbnRfbGR0ICggdm9pZCApCisgeworICAgIGludCByZXM7CistICAgcmVzID0gX19tb2RpZnlfbGR0KCAwLCBsZHRfY29weSwgODE5MipzaXplb2YoTERUX0VOVFJZKSApOworKyAgIC8qIFN5c3RlbSBjYWxsIHRvIHNldCBMRFQgZW50cnkuICAqLworKyAgIHJlcyA9IHN5c2NhbGwoU1lTX21vZGlmeV9sZHQsIDAsIGxkdF9jb3B5LCA4MTkyKnNpemVvZihMRFRfRU5UUlkpICk7CisgICAgcHJpbnRmKCJnb3QgJWQgYnl0ZXNcbiIsIHJlcyApOyAgIAorICAgIHBlcnJvcigiZXJyb3IgaXMiKTsKKyB9CitAQCAtODMsOSArODIsNiBAQCBzdHJ1Y3QgbW9kaWZ5X2xkdF9sZHRfcworICAgdW5zaWduZWQgaW50IGVtcHR5OjI1OworIH07CisgCistLyogU3lzdGVtIGNhbGwgdG8gc2V0IExEVCBlbnRyeS4gICovCistLy9leHRlcm4gaW50IF9fbW9kaWZ5X2xkdCAoaW50LCBzdHJ1Y3QgbW9kaWZ5X2xkdF9sZHRfcyAqLCBzaXplX3QpOworLQorIHZvaWQgc2V0X2xkdDEgKCB2b2lkKiBiYXNlICkKKyB7CisgICBpbnQgc3RhdDsKK0BAIC0xMDIsNyArOTgsOCBAQCB2b2lkIHNldF9sZHQxICggdm9pZCogYmFzZSApCisgICBsZHRfZW50cnkucmVhZF9leGVjX29ubHkgPSAwOworICAgbGR0X2VudHJ5LmxpbWl0X2luX3BhZ2VzID0gMDsKKyAgIGxkdF9lbnRyeS5zZWdfbm90X3ByZXNlbnQgPSAwOworLSAgc3RhdCA9IF9fbW9kaWZ5X2xkdCAoMSwgJmxkdF9lbnRyeSwgc2l6ZW9mIChsZHRfZW50cnkpKTsKKysgIC8qIFN5c3RlbSBjYWxsIHRvIHNldCBMRFQgZW50cnkuICAqLworKyAgc3RhdCA9IHN5c2NhbGwoU1lTX21vZGlmeV9sZHQsIDEsICZsZHRfZW50cnksIHNpemVvZiAobGR0X2VudHJ5KSk7CisgICBwcmludGYoInN0YXQgPSAlZFxuIiwgc3RhdCk7CisgfQorIAorLS0gCisyLjEzLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC8wMDA0LUZpeC1vdXQtb2YtdHJlZS1idWlsZHMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDQtRml4LW91dC1vZi10cmVlLWJ1aWxkcy5wYXRjaAppbmRleCBlZDMxM2Q2Li4zOTAyMmQwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDQtRml4LW91dC1vZi10cmVlLWJ1aWxkcy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDQtRml4LW91dC1vZi10cmVlLWJ1aWxkcy5wYXRjaApAQCAtMSw0ICsxLDQgQEAKLUZyb20gMzhhZTIzM2I2ODkzYTRlZWM3ZjllZDZkOGFkMDIzOTJiY2E4ZWFlZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gNzM5NDIxZTI1M2U2ZWJhM2ViNjQzODY1MTgyMmY4MGZhOWMwNTAyYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgogRGF0ZTogVHVlLCAxNSBEZWMgMjAxNSAxNTozMTo1MCArMDIwMAogU3ViamVjdDogW1BBVENIIDEvMl0gRml4IG91dCBvZiB0cmVlIGJ1aWxkcy4KQEAgLTEzLDIxICsxMywyMSBAQAogU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CiAKIC0tLQotIGNvbmZpZ3VyZS5hYyB8IDY0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCAzMiBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKKyBjb25maWd1cmUuYWMgfCA2OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMzQgaW5zZXJ0aW9ucygrKSwgMzQgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IDhhYjdmOWIuLjkzNjZkYzcgMTAwNjQ0CitpbmRleCAzODc0Mjk2ZmRlMGIuLjdhNWJhMmM4NTU3ZSAxMDA2NDQKIC0tLSBhL2NvbmZpZ3VyZS5hYwogKysrIGIvY29uZmlndXJlLmFjCi1AQCAtMzc3LDQ0ICszNzcsNDQgQEAgY2FzZSAiJHtob3N0X29zfSIgaW4KK0BAIC0zNzMsNTAgKzM3Myw1MCBAQCBjYXNlICIke2hvc3Rfb3N9IiBpbgogIAkgICAgIDkuKikKICAJCSAgQUNfTVNHX1JFU1VMVChbRGFyd2luIDkueCAoJHtrZXJuZWx9KSAvIE1hYyBPUyBYIDEwLjUgTGVvcGFyZF0pCiAgCQkgIEFDX0RFRklORShbREFSV0lOX1ZFUlNdLCBEQVJXSU5fMTBfNSwgW0RhcndpbiAvIE1hYyBPUyBYIHZlcnNpb25dKQogLQkJICBERUZBVUxUX1NVUFA9ImRhcndpbjkuc3VwcCAke0RFRkFVTFRfU1VQUH0iCiAtCQkgIERFRkFVTFRfU1VQUD0iZGFyd2luOS1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCi0rCQkgIERFRkFVTFRfU1VQUD0iJHNyY2Rpci9kYXJ3aW45LnN1cHAgJHtERUZBVUxUX1NVUFB9IgotKwkJICBERUZBVUxUX1NVUFA9IiRzcmNkaXIvZGFyd2luOS1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrIAkJICBERUZBVUxUX1NVUFA9IiRzcmNkaXIvZGFyd2luOS5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysgCQkgIERFRkFVTFRfU1VQUD0iJHNyY2Rpci9kYXJ3aW45LWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKICAJCSAgOzsKICAJICAgICAxMC4qKQogIAkJICBBQ19NU0dfUkVTVUxUKFtEYXJ3aW4gMTAueCAoJHtrZXJuZWx9KSAvIE1hYyBPUyBYIDEwLjYgU25vdyBMZW9wYXJkXSkKQEAgLTc3LDkgKzc3LDE3IEBACiArCQkgIERFRkFVTFRfU1VQUD0iJHNyY2Rpci9kYXJ3aW4xNS5zdXBwICR7REVGQVVMVF9TVVBQfSIKICsJCSAgREVGQVVMVF9TVVBQPSIkc3JjZGlyL2RhcndpbjEwLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKICAJCSAgOzsKKyAJICAgICAxNi4qKQorIAkJICBBQ19NU0dfUkVTVUxUKFtEYXJ3aW4gMTYueCAoJHtrZXJuZWx9KSAvIG1hY09TIDEwLjEyIFNpZXJyYV0pCisgCQkgIEFDX0RFRklORShbREFSV0lOX1ZFUlNdLCBEQVJXSU5fMTBfMTIsIFtEYXJ3aW4gLyBNYWMgT1MgWCB2ZXJzaW9uXSkKKy0JCSAgREVGQVVMVF9TVVBQPSJkYXJ3aW4xNi5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JCSAgREVGQVVMVF9TVVBQPSJkYXJ3aW4xMC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCQkgIERFRkFVTFRfU1VQUD0iJHNyY2Rpci9kYXJ3aW4xNi5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJCSAgREVGQVVMVF9TVVBQPSIkc3JjZGlyL2RhcndpbjEwLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJCSAgOzsKICAgICAgICAgICAgICAgKikgCiAgCQkgIEFDX01TR19SRVNVTFQoW3Vuc3VwcG9ydGVkICgke2tlcm5lbH0pXSkKLUBAIC00MjYsMTMgKzQyNiwxMyBAQCBjYXNlICIke2hvc3Rfb3N9IiBpbgorQEAgLTQyOCwxMyArNDI4LDEzIEBAIGNhc2UgIiR7aG9zdF9vc30iIGluCiAgICAgICBzb2xhcmlzMi4xMSopCiAgICAgICAgICBBQ19NU0dfUkVTVUxUKFtvayAoJHtob3N0X29zfSldKQogICAgICAgICAgVkdDT05GX09TPSJzb2xhcmlzIgpAQCAtOTUsNyArMTAzLDcgQEAKICAgICAgICAgIDs7CiAgCiAgICAgICAqKSAKLUBAIC0xMDE1LDI5ICsxMDE1LDI5IEBAIEFDX01TR19DSEVDS0lORyhbdGhlIGdsaWJjIHZlcnNpb25dKQorQEAgLTk4MiwyOSArOTgyLDI5IEBAIEFDX01TR19DSEVDS0lORyhbdGhlIGdsaWJjIHZlcnNpb25dKQogIGNhc2UgIiR7R0xJQkNfVkVSU0lPTn0iIGluCiAgICAgICAyLjIpCiAgCUFDX01TR19SRVNVTFQoJHtHTElCQ19WRVJTSU9OfSBmYW1pbHkpCkBAIC0xMzUsNyArMTQzLDcgQEAKICAJOzsKICAgICAgIDIuKikKICAJQUNfTVNHX1JFU1VMVCgke0dMSUJDX1ZFUlNJT059IGZhbWlseSkKLUBAIC0xMDQ2LDggKzEwNDYsOCBAQCBjYXNlICIke0dMSUJDX1ZFUlNJT059IiBpbgorQEAgLTEwMTMsOCArMTAxMyw4IEBAIGNhc2UgIiR7R0xJQkNfVkVSU0lPTn0iIGluCiAgCUFDX0RFRklORShbR0xJQkNfTUFOREFUT1JZX0lOREVYX0FORF9TVFJMRU5fUkVESVJFQ1RdLCAxLAogIAkJICBbRGVmaW5lIHRvIDEgaWYgaW5kZXgoKSBhbmQgc3RybGVuKCkgaGF2ZSBiZWVuIG9wdGltaXplZCBoZWF2aWx5ICh4ODYgZ2xpYmMgPj0gMi4xMildKQogIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKQEAgLTE0Niw3ICsxNTQsNyBAQAogIAk7OwogICAgICAgZGFyd2luKQogIAlBQ19NU0dfUkVTVUxUKERhcndpbikKLUBAIC0xMDU3LDcgKzEwNTcsNyBAQCBjYXNlICIke0dMSUJDX1ZFUlNJT059IiBpbgorQEAgLTEwMjQsNyArMTAyNCw3IEBAIGNhc2UgIiR7R0xJQkNfVkVSU0lPTn0iIGluCiAgICAgICBiaW9uaWMpCiAgCUFDX01TR19SRVNVTFQoQmlvbmljKQogIAlBQ19ERUZJTkUoW0JJT05JQ19MSUJDXSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBCaW9uaWNdKQpAQCAtMTU1LDcgKzE2Myw3IEBACiAgCTs7CiAgICAgICBzb2xhcmlzKQogIAlBQ19NU0dfUkVTVUxUKFNvbGFyaXMpCi1AQCAtMTA3OSwxMSArMTA3OSwxMSBAQCBpZiB0ZXN0ICIkVkdDT05GX09TIiAhPSAic29sYXJpcyI7IHRoZW4KK0BAIC0xMDUxLDExICsxMDUxLDExIEBAIGlmIHRlc3QgIiRWR0NPTkZfT1MiICE9ICJzb2xhcmlzIjsgdGhlbgogICAgICAjIGF0dGVtcHQgdG8gZGV0ZWN0IHdoZXRoZXIgc3VjaCBsaWJyYXJpZXMgYXJlIGluc3RhbGxlZCBvbiB0aGUKICAgICAgIyBidWlsZCBtYWNoaW5lIChvciBldmVuIGlmIGFueSBYIGZhY2lsaXRpZXMgYXJlIHByZXNlbnQpOyBqdXN0CiAgICAgICMgYWRkIHRoZSBzdXBwcmVzc2lvbnMgYW50aWRpc2lycmVnYXJkbGVzcy4KQEAgLTE3MSw1ICsxNzksNSBAQAogIAogIAogLS0gCi0yLjYuMgorMi4xMy4yLjMuZzQ0Y2Q4NWMxNAogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDQtcHRoX2F0Zm9yazEuYy1EZWZpbmUtZXJyb3ItQVBJLWZvci1tdXNsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC8wMDA0LXB0aF9hdGZvcmsxLmMtRGVmaW5lLWVycm9yLUFQSS1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2I3MDYyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC8wMDA0LXB0aF9hdGZvcmsxLmMtRGVmaW5lLWVycm9yLUFQSS1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIGZiNzdmZWY0Zjg2NmRhYzdiY2M2ZDFhZTAyNWRhNjA1NjQ4NjlmODQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAxMCBKdW4gMjAxNyAwMTowNjoxMSAtMDcwMAorU3ViamVjdDogW1BBVENIIDQvNl0gcHRoX2F0Zm9yazEuYzogRGVmaW5lIGVycm9yKCkgQVBJIGZvciBtdXNsCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbm9uZS90ZXN0cy9wdGhfYXRmb3JrMS5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL25vbmUvdGVzdHMvcHRoX2F0Zm9yazEuYyBiL25vbmUvdGVzdHMvcHRoX2F0Zm9yazEuYworaW5kZXggMzQyMDFlZi4uYjdmNWYyZCAxMDA2NDQKKy0tLSBhL25vbmUvdGVzdHMvcHRoX2F0Zm9yazEuYworKysrIGIvbm9uZS90ZXN0cy9wdGhfYXRmb3JrMS5jCitAQCAtMTgsNyArMTgsNyBAQAorICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKyAKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0jaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX3N1bikKKysjaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX3N1bikgJiYgZGVmaW5lZChfX0dMSUJDX18pCisgIyBpbmNsdWRlIDxlcnJvci5oPgorICNlbmRpZgorICNpbmNsdWRlIDxzdGRsaWIuaD4KK0BAIC0yNyw3ICsyNyw3IEBACisgI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgCistI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fc3VuKQorKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX3N1bikgfHwgKGRlZmluZWQoX19saW51eF9fKSAmJiAhZGVmaW5lZChfX0dMSUJDX18pKQorICNpbmNsdWRlIDxzdHJpbmcuaD4gIC8qIHN0cmVycm9yICovCisgc3RhdGljIHZvaWQgZXJyb3IgKGludCBzdGF0dXMsIGludCBlcnJudW0sIGNoYXIqIG1zZykKKyB7CistLSAKKzIuMTMuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDUtdGMyMF92ZXJpZnl3cmFwLmMtRmFrZS1fX0dMSUJDX1BSRVJFUS13aXRoLW11c2wucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDUtdGMyMF92ZXJpZnl3cmFwLmMtRmFrZS1fX0dMSUJDX1BSRVJFUS13aXRoLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE3NjY0MAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvMDAwNS10YzIwX3ZlcmlmeXdyYXAuYy1GYWtlLV9fR0xJQkNfUFJFUkVRLXdpdGgtbXVzbC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIGI0YjlmMDcyYzIyZjk2ODQ0ZTAyY2I5ZDY4ZjdmZjI0MDg2ODA4MTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAxMCBKdW4gMjAxNyAwMTowNzo1OSAtMDcwMAorU3ViamVjdDogW1BBVENIIDUvNl0gdGMyMF92ZXJpZnl3cmFwLmM6IEZha2UgX19HTElCQ19QUkVSRVEgd2l0aCBtdXNsCisKK3NpbWlsYXIgdG8gc3VuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgaGVsZ3JpbmQvdGVzdHMvdGMyMF92ZXJpZnl3cmFwLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9oZWxncmluZC90ZXN0cy90YzIwX3ZlcmlmeXdyYXAuYyBiL2hlbGdyaW5kL3Rlc3RzL3RjMjBfdmVyaWZ5d3JhcC5jCitpbmRleCBjMTEwMDAwLi5hMzExYTQ5IDEwMDY0NAorLS0tIGEvaGVsZ3JpbmQvdGVzdHMvdGMyMF92ZXJpZnl3cmFwLmMKKysrKyBiL2hlbGdyaW5kL3Rlc3RzL3RjMjBfdmVyaWZ5d3JhcC5jCitAQCAtMjAsNyArMjAsNyBAQAorIAorICNpZiAhZGVmaW5lZChfX0FQUExFX18pCisgCistI2lmIGRlZmluZWQoX19zdW5fXykKKysjaWYgZGVmaW5lZChfX3N1bl9fKSB8fCAoZGVmaW5lZChfX2xpbnV4X18pICYmICFkZWZpbmVkKF9fR0xJQkNfXykpCisgLyogRmFrZSBfX0dMSUJDX1BSRVJFUSBvbiBTb2xhcmlzLiBQcmV0ZW5kIGdsaWJjID49IDIuNC4gKi8KKyAjIGRlZmluZSBfX0dMSUJDX1BSRVJFUQorICNlbHNlCistLSAKKzIuMTMuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDYtcHRoX2RldGFjaGVkMy5jLURlcmVmZXJlbmNlLXB0aHJlYWRfdC1iZWZvcmUtYWRkaW5nLS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvMDAwNi1wdGhfZGV0YWNoZWQzLmMtRGVyZWZlcmVuY2UtcHRocmVhZF90LWJlZm9yZS1hZGRpbmctLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ODg2YzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDYtcHRoX2RldGFjaGVkMy5jLURlcmVmZXJlbmNlLXB0aHJlYWRfdC1iZWZvcmUtYWRkaW5nLS5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIGE2NTQ3ZmMxN2MxMjBkYmQ5NWI4NTJmNTBiMGM0YmRlZTRmZWRiOWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAxMCBKdW4gMjAxNyAwMToyMDozMiAtMDcwMAorU3ViamVjdDogW1BBVENIIDYvNl0gcHRoX2RldGFjaGVkMy5jOiBEZXJlZmVyZW5jZSBwdGhyZWFkX3QgYmVmb3JlIGFkZGluZworIG9mZnNldCB0byBpdAorCitGaXhlcworZXJyb3I6IGludmFsaWQgdXNlIG9mIHVuZGVmaW5lZCB0eXBlICdzdHJ1Y3QgX19wdGhyZWFkJworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGRyZC90ZXN0cy9wdGhfZGV0YWNoZWQzLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9kcmQvdGVzdHMvcHRoX2RldGFjaGVkMy5jIGIvZHJkL3Rlc3RzL3B0aF9kZXRhY2hlZDMuYworaW5kZXggYzAyZWVmMS4uMzVkNDNhNiAxMDA2NDQKKy0tLSBhL2RyZC90ZXN0cy9wdGhfZGV0YWNoZWQzLmMKKysrKyBiL2RyZC90ZXN0cy9wdGhfZGV0YWNoZWQzLmMKK0BAIC0yMSw3ICsyMSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKKyAgIHB0aHJlYWRfZGV0YWNoKHRocmVhZCk7CisgCisgICAvKiBJbnZva2UgcHRocmVhZF9kZXRhY2goKSB3aXRoIGFuIGludmFsaWQgdGhyZWFkIElELiAqLworLSAgcHRocmVhZF9kZXRhY2godGhyZWFkICsgOCk7CisrICBwdGhyZWFkX2RldGFjaCgocHRocmVhZF90KikoJnRocmVhZCArIDgpKTsKKyAKKyAgIGZwcmludGYoc3RkZXJyLCAiRmluaXNoZWQuXG4iKTsKKyAKKy0tIAorMi4xMy4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvbGluay1nei10ZXN0cy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvbGluay1nei10ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjMyMjM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9saW5rLWd6LXRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1doZW4gY2hlY2tpbmcgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGNvbXByZXNzZWQgZGVidWcgc2VjdGlvbnMgd2UgbmVlZCB0bworYWN0dWFsbHkgbGluayBpbnN0ZWFkIG9mIGp1c3QgY29tcGlsZS4gIE90aGVyd2lzZSB0aGUgY29tcGlsZXIgdGhpbmtzIHRoYXQKK3RoZXkgYXJlIHN1cHBvcnRlZCwgYnV0IGdvbGQgZG9lcyBub3Qgc3VwcG9ydCAtZ3o9emxpYi4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCAocjE2NDU5KQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworLS0tIGEvY29uZmlndXJlLmFjfgkyMDE3LTA3LTExIDExOjUzOjE2LjAwMDAwMDAwMCArMDEwMAorKysrIGIvY29uZmlndXJlLmFjCTIwMTctMDctMTEgMTg6MTY6MTMuNjc0MTMwNDgzICswMTAwCitAQCAtMjExOSw3ICsyMTE5LDcgQEAKKyBzYWZlX0NGTEFHUz0kQ0ZMQUdTCisgQ0ZMQUdTPSItZyAtZ3o9emxpYiIKKyAKKy1BQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbIF1dLCBbWworK0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sgXV0sIFtbCisgICByZXR1cm4gMDsKKyBdXSldLCBbCisgYWNfaGF2ZV9nel96bGliPXllcworQEAgLTIxMzksNyArMjEzOSw3IEBACisgc2FmZV9DRkxBR1M9JENGTEFHUworIENGTEFHUz0iLWcgLWd6PXpsaWItZ251IgorIAorLUFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sgXV0sIFtbCisrQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyBdXSwgW1sKKyAgIHJldHVybiAwOworIF1dKV0sIFsKKyBhY19oYXZlX2d6X3psaWJfZ251PXllcwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9wcGMtaGVhZGVycy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvcHBjLWhlYWRlcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEyNTlkYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvcHBjLWhlYWRlcnMucGF0Y2gKQEAgLTAsMCArMSw4NyBAQAorQmFja3BvcnQgYSBwYXRjaCBmcm9tIHVwc3RyZWFtIHRvIGZpeCB0ZXN0IGNvbXBpbGF0aW9uIGZvciBQUEMgd2hlcmUKK3N5c3RlbSBoZWFkZXJzIGRvbid0IGdldCBpbmNsdWRlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworcjE2NDUwIHwgbWp3IHwgMjAxNy0wNi0xNiAxMDozMzozNSArMDEwMCAoRnJpLCAxNiBKdW4gMjAxNykgfCA3IGxpbmVzCisKK3BwYzY0IGRvZXNuJ3QgY29tcGlsZSB0ZXN0X2lzYV8yXzA2X3BhcnR4LmMgd2l0aG91dCBWU1ggc3VwcG9ydAorCitUaGUgI2lmZGVmIEhBU19WU1ggZ3VhcmQgaXMgd3JvbmdseSBwbGFjZWQuIEl0IG1ha2VzIHRoZSBzdGFuZGFyZAoraW5jbHVkZSBoZWFkZXJzIG5vdCBiZSB1c2VkLiBDYXVzaW5nIGEgYnVpbGQgZmFpbHVyZS4gRml4IGJ5IG1vdmluZwordGhlICNpZmRlZiBIQVNfVlNYIGFmdGVyIHRoZSBzdGFuZGFyZCBpbmNsdWRlcy4KKworSW5kZXg6IG5vbmUvdGVzdHMvcHBjMzIvdGVzdF9pc2FfMl8wNl9wYXJ0My5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9ub25lL3Rlc3RzL3BwYzMyL3Rlc3RfaXNhXzJfMDZfcGFydDMuYwkocmV2aXNpb24gMTY0NDkpCisrKysgYi9ub25lL3Rlc3RzL3BwYzMyL3Rlc3RfaXNhXzJfMDZfcGFydDMuYwkocmV2aXNpb24gMTY0NTApCitAQCAtMjAsMTcgKzIwLDE4IEBACisgIFRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBjb250YWluZWQgaW4gdGhlIGZpbGUgQ09QWUlORy4KKyAgKi8KKyAKKy0jaWZkZWYgSEFTX1ZTWAorLQorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxtYWxsb2MuaD4KKy0jaW5jbHVkZSA8YWx0aXZlYy5oPgorICNpbmNsdWRlIDxtYXRoLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPiAgICAvLyBnZXRvcHQKKyAKKysjaWZkZWYgSEFTX1ZTWAorKworKyNpbmNsdWRlIDxhbHRpdmVjLmg+CisrCisgI2lmbmRlZiBfX3Bvd2VycGM2NF9fCisgdHlwZWRlZiB1aW50MzJfdCBIV29yZF90OworICNlbHNlCitJbmRleDogbm9uZS90ZXN0cy9wcGMzMi90ZXN0X2lzYV8yXzA2X3BhcnQxLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL25vbmUvdGVzdHMvcHBjMzIvdGVzdF9pc2FfMl8wNl9wYXJ0MS5jCShyZXZpc2lvbiAxNjQ0OSkKKysrKyBiL25vbmUvdGVzdHMvcHBjMzIvdGVzdF9pc2FfMl8wNl9wYXJ0MS5jCShyZXZpc2lvbiAxNjQ1MCkKK0BAIC0yMCwxMyArMjAsMTQgQEAKKyAgVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGNvbnRhaW5lZCBpbiB0aGUgZmlsZSBDT1BZSU5HLgorICAqLworIAorLSNpZmRlZiBIQVNfVlNYCistCisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0ZGludC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPG1hbGxvYy5oPgorKworKyNpZmRlZiBIQVNfVlNYCisrCisgI2luY2x1ZGUgPGFsdGl2ZWMuaD4KKyAKKyAjaWZuZGVmIF9fcG93ZXJwYzY0X18KK0luZGV4OiBub25lL3Rlc3RzL3BwYzMyL3Rlc3RfaXNhXzJfMDZfcGFydDIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvbm9uZS90ZXN0cy9wcGMzMi90ZXN0X2lzYV8yXzA2X3BhcnQyLmMJKHJldmlzaW9uIDE2NDQ5KQorKysrIGIvbm9uZS90ZXN0cy9wcGMzMi90ZXN0X2lzYV8yXzA2X3BhcnQyLmMJKHJldmlzaW9uIDE2NDUwKQorQEAgLTIwLDE3ICsyMCwxOCBAQAorICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgY29udGFpbmVkIGluIHRoZSBmaWxlIENPUFlJTkcuCisgICovCisgCistI2lmZGVmIEhBU19WU1gKKy0KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8bWFsbG9jLmg+CistI2luY2x1ZGUgPGFsdGl2ZWMuaD4KKyAjaW5jbHVkZSA8bWF0aC5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4gICAgLy8gZ2V0b3B0CisgCisrI2lmZGVmIEhBU19WU1gKKysKKysjaW5jbHVkZSA8YWx0aXZlYy5oPgorKworICNpZm5kZWYgX19wb3dlcnBjNjRfXworIHR5cGVkZWYgdWludDMyX3QgSFdvcmRfdDsKKyAjZWxzZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9ydW4tcHRlc3QgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3J1bi1wdGVzdAppbmRleCBmOWE3MmVjLi40NDdkMzNjIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3J1bi1wdGVzdAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3J1bi1wdGVzdApAQCAtMiwxMSArMiwyNCBAQAogCiAjIHJ1bi1wdGVzdCAtICdwdGVzdCcgdGVzdCBpbmZyYXN0cnVjdHVyZSBzaGVsbCBzY3JpcHQgdGhhdAogIyAgIHdyYXBzIHRoZSB2YWxncmluZCByZWdyZXNzaW9uIHNjcmlwdCB2Z19yZWd0ZXN0LiAKLSMgICBNdXN0IGJlIHJ1biBpbiB0aGUgL3Vzci9saWIvdmFsZ3JpbmQvcHRlc3QgZGlyZWN0b3J5LiAKICMKICMgRGF2ZSBMZXJuZXIgPGRhdmUubGVybmVyQHdpbmRyaXZlci5jb20+CiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIFZBTEdSSU5ETElCPUBsaWJkaXJAL3ZhbGdyaW5kCi10ZXN0cy92Z19yZWd0ZXN0IC0tYWxsIFwKK0xPRz0iJHtWQUxHUklORExJQn0vcHRlc3QvdmFsZ3JpbmRfcHRlc3RfJChkYXRlICslWSVtJWQtJUglTSVTKS5sb2ciCisKK2NkICR7VkFMR1JJTkRMSUJ9L3B0ZXN0ICYmIC4vdGVzdHMvdmdfcmVndGVzdCAtLWFsbCBcCiAgICAgLS12YWxncmluZD0vdXNyL2Jpbi92YWxncmluZCAtLXZhbGdyaW5kLWxpYj0kVkFMR1JJTkRMSUIgXAotCS0teW9jdG8tcHRlc3QKKyAgICAtLXlvY3RvLXB0ZXN0IDI+JjF8dGVlICR7TE9HfQorCitwYXNzZWQ9YGdyZXAgUEFTUzogJHtMT0d9fHdjIC1sYAorZmFpbGVkPWBncmVwIEZBSUw6ICR7TE9HfXx3YyAtbGAKK3NraXBwZWQ9YGdyZXAgU0tJUDogJHtMT0d9fHdjIC1sYAorYWxsPSQoKHBhc3NlZCArIGZhaWxlZCArIHNraXBwZWQpKQorCisoIGVjaG8gIj09PSBUZXN0IFN1bW1hcnkgPT09IgorICBlY2hvICJUT1RBTDogJHthbGx9IgorICBlY2hvICJQQVNTRUQ6ICR7cGFzc2VkfSIKKyAgZWNobyAiRkFJTEVEOiAke2ZhaWxlZH0iCisgIGVjaG8gIlNLSVBQRUQ6ICR7c2tpcHBlZH0iCispIHwgdGVlIC1hIC8ke0xPR30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmRfMy4xMi4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZF8zLjEyLjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmOGNkM2YuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZF8zLjEyLjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotU1VNTUFSWSA9ICJWYWxncmluZCBtZW1vcnkgZGVidWdnZXIgYW5kIGluc3RydW1lbnRhdGlvbiBmcmFtZXdvcmsiCi1IT01FUEFHRSA9ICJodHRwOi8vdmFsZ3JpbmQub3JnLyIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL3ZhbGdyaW5kLm9yZy9zdXBwb3J0L2J1Z19yZXBvcnRzLmh0bWwiCi1MSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrICYgQlNEIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9wdWJfdG9vbF9iYXNpY3MuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTI5O21kNT1lYmI4ZTY0MGVmNjMzZjk0MGM0MjU2ODZjODczZjlmYSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL3ZhbGdyaW5kLmg7YmVnaW5saW5lPTE7ZW5kbGluZT01NjttZDU9NGI1ZTI0OTA4ZTUzMDE2ZWE1NjFjNDVmNDIzNGEzMjcgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5ET0NTO21kNT0yNGVhNGM3MDkyMjMzODQ5YjQzOTQ2OTkzMzNiNWM1NiIKLQotWDExREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSIKLURFUEVORFMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnJHtYMTFERVBFTkRTfScsICcnLCBkKX0gXAotICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B0ZXN0JywgJ2Jvb3N0JywgJycsIGQpfSBcCi0gICAgICAgICIKLQotU1JDX1VSSSA9ICJodHRwOi8vd3d3LnZhbGdyaW5kLm9yZy9kb3dubG9hZHMvdmFsZ3JpbmQtJHtQVn0udGFyLmJ6MiBcCi0gICAgICAgICAgIGZpbGU6Ly9maXhlZC1wZXJsLXBhdGgucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vQWRkZWQtc3VwcG9ydC1mb3ItUFBDLWluc3RydWN0aW9ucy1tZmF0YnUtbWZhdGJsLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAyLXJlbW92ZS1ycGF0aC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA0LUZpeC1vdXQtb2YtdHJlZS1idWlsZHMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwNS1Nb2RpZnktdmdfdGVzdC13cmFwcGVyLXRvLXN1cHBvcnQtUFRFU1QtZm9ybWF0cy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLVJlbW92ZS10ZXN0cy10aGF0LWZhaWwtdG8tYnVpbGQtb24tc29tZS1QUEMzMi1jb25maWcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vdXNlLWFwcHJvcHJpYXRlLW1hcmNoLW1jcHUtbWZwdS1mb3ItQVJNLXRlc3QtYXBwcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9hdm9pZC1uZW9uLWZvci10YXJnZXRzLXdoaWNoLWRvbi10LXN1cHBvcnQtaXQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vdmFsZ3JpbmQtbWFrZS1sZC1YWFguc28tc3RybGVuLWludGVyY2VwdC1vcHRpb25hbC5wYXRjaCBcCi0iCi1TUkNfVVJJX2FwcGVuZF9saWJjLW11c2wgPSAiXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1maXgtYnVpbGQtZm9yLW11c2wtdGFyZ2V0cy5wYXRjaCBcCi0iCi1TUkNfVVJJW21kNXN1bV0gPSAiNmViMDNjMGMxMGVhOTE3MDEzYTc2MjJlNDgzZDYxYmIiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjdjYTQzOTViMjUyNzI0Nzc4MGYzNjE0OGIwODRmNTc0M2E2OGFiMGM4NTBjYjQzZTRhNWI0YjAxMmNmNzZhMSIKLQotQ09NUEFUSUJMRV9IT1NUID0gJyhpLjg2fHg4Nl82NHxhcm18YWFyY2g2NHxtaXBzfHBvd2VycGN8cG93ZXJwYzY0KS4qLWxpbnV4JwotCi0jIHZhbGdyaW5kIHN1cHBvcnRzIGFybXY3IGFuZCBhYm92ZQotQ09NUEFUSUJMRV9IT1NUX2FybXY0ID0gJ251bGwnCi1DT01QQVRJQkxFX0hPU1RfYXJtdjUgPSAnbnVsbCcKLUNPTVBBVElCTEVfSE9TVF9hcm12NiA9ICdudWxsJwotCi0jIFgzMiBpc24ndCBzdXBwb3J0ZWQgYnkgdmFsZ3JpbmQgYXQgdGhpcyB0aW1lCi1DT01QQVRJQkxFX0hPU1RfbGludXgtZ251eDMyID0gJ251bGwnCi0KLSMgRGlzYWJsZSBmb3Igc29tZSBNSVBTIHZhcmlhbnRzCi1DT01QQVRJQkxFX0hPU1RfbWlwc2FyY2huMzIgPSAnbnVsbCcKLUNPTVBBVElCTEVfSE9TVF9taXBzYXJjaHI2ID0gJ251bGwnCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0Ci0KLUVYVFJBX09FQ09ORiA9ICItLWVuYWJsZS10bHMgLS13aXRob3V0LW1waWNjIgotRVhUUkFfT0VDT05GICs9ICIke0BbJy0tZW5hYmxlLW9ubHkzMmJpdCcsJy0tZW5hYmxlLW9ubHk2NGJpdCddW2QuZ2V0VmFyKCdTSVRFSU5GT19CSVRTJykgIT0gJzMyJ119IgotCi0jIHZhbGdyaW5kIGNoZWNrcyBob3N0X2NwdSAiYXJtdjcqKSIsIHNvIHdlIG5lZWQgdG8gb3Zlci1yaWRlIHRoZSBhdXRvdG9vbHMuYmJjbGFzcyBkZWZhdWx0IC0taG9zdCBvcHRpb24KLUVYVFJBX09FQ09ORl9hcHBlbmRfYXJtID0gIiAtLWhvc3Q9YXJtdjcke0hPU1RfVkVORE9SfS0ke0hPU1RfT1N9IgotCi1FWFRSQV9PRU1BS0UgPSAiLXciCi0KLUNBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX1BFUkw9Jy91c3IvYmluL2VudiBwZXJsJyIKLQotIyB2YWxncmluZCBsaWtlcyB0byBjb250cm9sIGl0cyBvd24gb3B0aW1pc2F0aW9uIGZsYWdzLiBJdCBnZW5lcmFsbHkgZGVmYXVsdHMKLSMgdG8gLU8yIGJ1dCB1c2VzIC1PMCBmb3Igc29tZSBzcGVjaWZpYyB0ZXN0IGFwcHMgZXRjLiBQYXNzaW5nIG91ciBvd24gZmxhZ3MKLSMgKHZpYSBDRkxBR1MpIG1lYW5zIHdlIGludGVyZmVyZSB3aXRoIHRoYXQuIE9ubHkgcGFzcyBERUJVR19GTEFHUyB0byBpdAotIyB3aGljaCBmaXhlcyBidWlsZCBwYXRoIGlzc3VlIGluIERXQVJGLgotU0VMRUNURURfT1BUSU1JWkFUSU9OID0gIiR7REVCVUdfRkxBR1N9IgotCi1DRkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtRF9fVUNMSUJDX18gIgotCi1kb19pbnN0YWxsX2FwcGVuZCAoKSB7Ci0gICAgaW5zdGFsbCAtbSA2NDQgJHtCfS9kZWZhdWx0LnN1cHAgJHtEfS8ke2xpYmRpcn0vdmFsZ3JpbmQvCi19Ci0KLVJERVBFTkRTXyR7UE59ICs9ICJwZXJsIgotCi0jIHZhbGdyaW5kIG5lZWRzIGRlYnVnIGluZm9ybWF0aW9uIGZvciBsZC5zbyBhdCBydW50aW1lIGluIG9yZGVyIHRvCi0jIHJlZGlyZWN0IGZ1bmN0aW9ucyBsaWtlIHN0cmxlbi4KLVJSRUNPTU1FTkRTXyR7UE59ICs9ICIke1RDTElCQ30tZGJnIgotCi1SREVQRU5EU18ke1BOfS1wdGVzdCArPSAiIHNlZCBwZXJsIHBlcmwtbW9kdWxlLWZpbGUtZ2xvYiIKLVJERVBFTkRTXyR7UE59LXB0ZXN0X2FwcGVuZF9saWJjLWdsaWJjID0gIiBnbGliYy11dGlscyIKLQotIyBPbmUgb2YgdGhlIHRlc3RzIGNvbnRhaW5zIGEgYm9ndXMgaW50ZXJwcmV0ZXIgcGF0aCBvbiBwdXJwb3NlLgotIyBTa2lwIGZpbGUgZGVwZW5kZW5jeSBjaGVjawotU0tJUF9GSUxFREVQU18ke1BOfS1wdGVzdCA9ICcxJwotCi1kb19jb21waWxlX3B0ZXN0KCkgewotICAgIG9lX3J1bm1ha2UgY2hlY2sKLX0KLQotZG9faW5zdGFsbF9wdGVzdCgpIHsKLSAgICBjaG1vZCAreCAke0J9L3Rlc3RzL3ZnX3JlZ3Rlc3QKLQotICAgICMgVGhlIHRlc3QgYXBwbGljYXRpb24gYmluYXJpZXMgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IGluc3RhbGxlZC4KLSAgICAjIEdyYWIgdGhlbSBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCi0gICAgIwotICAgICMgVGhlIHJlZ3Jlc3Npb24gdGVzdHMgcmVxdWlyZSBzY3JpcHRzIGFuZCBkYXRhIGZpbGVzIHRoYXQgYXJlIG5vdAotICAgICMgY29waWVkIHRvIHRoZSBidWlsZCBkaXJlY3RvcnkuICBUaGV5IG11c3QgYmUgY29waWVkIGZyb20gdGhlCi0gICAgIyBzb3VyY2UgZGlyZWN0b3J5LiAKLSAgICBzYXZlZF9kaXI9JFBXRAotICAgIGZvciBwYXJlbnRfZGlyIGluICR7U30gJHtCfSA7IGRvCi0gICAgICAgIGNkICRwYXJlbnRfZGlyCi0KLSAgICAgICAgIyBleGNsdWRlIHNoZWxsIG9yIHRoZSBwYWNrYWdlIHdvbid0IGluc3RhbGwKLSAgICAgICAgcm0gLXJmIG5vbmUvdGVzdHMvc2hlbGwqIDI+L2Rldi9udWxsCi0KLSAgICAgICAgc3ViZGlycz0idGVzdHMgY2FjaGVncmluZC90ZXN0cyBjYWxsZ3JpbmQvdGVzdHMgZHJkL3Rlc3RzIGhlbGdyaW5kL3Rlc3RzIG1hc3NpZi90ZXN0cyBtZW1jaGVjay90ZXN0cyBub25lL3Rlc3RzIgotCi0gICAgICAgICMgR2V0IHRoZSB2ZyB0ZXN0IHNjcmlwdHMsIGZpbHRlcnMsIGFuZCBleHBlY3RlZCBmaWxlcwotICAgICAgICBmb3IgZGlyIGluICRzdWJkaXJzIDsgZG8KLSAgICAgICAgICAgIGZpbmQgJGRpciB8IGNwaW8gLXB2ZHUgJHtEfSR7UFRFU1RfUEFUSH0KLSAgICAgICAgZG9uZQotICAgICAgICBjZCAkc2F2ZWRfZGlyCi0gICAgZG9uZQotCi0gICAgIyBjbGVhbiBvdXQgYnVpbGQgYXJ0aWZhY3RzIGJlZm9yZSBidWlsZGluZyB0aGUgcnBtCi0gICAgZmluZCAke0R9JHtQVEVTVF9QQVRIfSBcCi0gICAgICAgICBcKCAtbmFtZSAiTWFrZWZpbGUqIiBcCi0gICAgICAgIC1vIC1uYW1lICIqLm8iIFwKLSAgICAgICAgLW8gLW5hbWUgIiouYyIgXAotICAgICAgICAtbyAtbmFtZSAiKi5TIiBcCi0gICAgICAgIC1vIC1uYW1lICIqLmgiIFwpIFwKLSAgICAgICAgLWV4ZWMgcm0ge30gXDsKLQotICAgICMgbmVlZGVkIGJ5IG1hc3NpZiB0ZXN0cwotICAgIGNwICR7Qn0vbWFzc2lmL21zX3ByaW50ICR7RH0ke1BURVNUX1BBVEh9L21hc3NpZi9tc19wcmludAotCi0gICAgIyBoYW5kbGUgbXVsdGlsaWIKLSAgICBzZWQgLWkgczpAbGliZGlyQDoke2xpYmRpcn06ZyAke0R9JHtQVEVTVF9QQVRIfS9ydW4tcHRlc3QKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmRfMy4xMy4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZF8zLjEzLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjViNDEyNgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmRfMy4xMy4wLmJiCkBAIC0wLDAgKzEsMTUzIEBACitTVU1NQVJZID0gIlZhbGdyaW5kIG1lbW9yeSBkZWJ1Z2dlciBhbmQgaW5zdHJ1bWVudGF0aW9uIGZyYW1ld29yayIKK0hPTUVQQUdFID0gImh0dHA6Ly92YWxncmluZC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vdmFsZ3JpbmQub3JnL3N1cHBvcnQvYnVnX3JlcG9ydHMuaHRtbCIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MisgJiBCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL3B1Yl90b29sX2Jhc2ljcy5oO2JlZ2lubGluZT02O2VuZGxpbmU9Mjk7bWQ1PWQ0ZGUwNDA3MjM5MzgxNDYzY2YwMWRkMjc2ZDdjMjJlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvdmFsZ3JpbmQuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTU2O21kNT1hZDNiMzE3ZjMyODZiNmI3MDQ1NzVkOWVmZTZjYTVkZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkRPQ1M7bWQ1PTI0ZWE0YzcwOTIyMzM4NDliNDM5NDY5OTMzM2I1YzU2IgorCitYMTFERVBFTkRTID0gInZpcnR1YWwvbGlieDExIgorREVQRU5EUyA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICcke1gxMURFUEVORFN9JywgJycsIGQpfSBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHRlc3QnLCAnYm9vc3QnLCAnJywgZCl9IFwKKyAgICAgICAgIgorCitTUkNfVVJJID0gImZ0cDovL3NvdXJjZXdhcmUub3JnL3B1Yi92YWxncmluZC92YWxncmluZC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeGVkLXBlcmwtcGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9BZGRlZC1zdXBwb3J0LWZvci1QUEMtaW5zdHJ1Y3Rpb25zLW1mYXRidS1tZmF0YmwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItcmVtb3ZlLXJwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtRml4LW91dC1vZi10cmVlLWJ1aWxkcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA1LU1vZGlmeS12Z190ZXN0LXdyYXBwZXItdG8tc3VwcG9ydC1QVEVTVC1mb3JtYXRzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtUmVtb3ZlLXRlc3RzLXRoYXQtZmFpbC10by1idWlsZC1vbi1zb21lLVBQQzMyLWNvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91c2UtYXBwcm9wcmlhdGUtbWFyY2gtbWNwdS1tZnB1LWZvci1BUk0tdGVzdC1hcHBzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2F2b2lkLW5lb24tZm9yLXRhcmdldHMtd2hpY2gtZG9uLXQtc3VwcG9ydC1pdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly92YWxncmluZC1tYWtlLWxkLVhYWC5zby1zdHJsZW4taW50ZXJjZXB0LW9wdGlvbmFsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbWFrZWZpbGVzLURyb3Atc2V0dGluZy1tY3B1LXRvLWNvcnRleC1hOC1vbi1hcm0tYXJjaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXN0cl90ZXN0ZXIuYy1MaW1pdC1yYXdtZW1jaHItdGVzdC10by1nbGliYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXNpZ3F1ZXVlLVJlbmFtZS1fc2lmaWVsZHMtdG8tX19zaV9maWVsZHMtb24tbXVzbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLWNvbnRleHQtQVBJcy1hcmUtbm90LWF2YWlsYWJsZS1vbi1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtY29ycmVjdC1pbmNsdWRlLWRpcmVjdGl2ZS1wYXRoLWZvci1jb25maWcuaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LXB0aF9hdGZvcmsxLmMtRGVmaW5lLWVycm9yLUFQSS1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA1LXRjMjBfdmVyaWZ5d3JhcC5jLUZha2UtX19HTElCQ19QUkVSRVEtd2l0aC1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDYtcHRoX2RldGFjaGVkMy5jLURlcmVmZXJlbmNlLXB0aHJlYWRfdC1iZWZvcmUtYWRkaW5nLS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLW1lbWNoZWNrLXRlc3RzLVVzZS11Y29udGV4dF90LWluc3RlYWQtb2Ytc3RydWN0LXVjb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1tZW1jaGVjay1hcm02NC1EZWZpbmUtX19USFJPVy1pZi1ub3QtYWxyZWFkeS1kZWZpbmVkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItbWVtY2hlY2steDg2LURlZmluZS1fX1RIUk9XLWlmLW5vdC1kZWZpbmVkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtdGVzdHMtc2VnX292ZXJyaWRlLVJlcGxhY2UtX19tb2RpZnlfbGR0LXdpdGgtc3lzY2FsbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saW5rLWd6LXRlc3RzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BwYy1oZWFkZXJzLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjgxN2RkMDhmMWU4YTY2MzM2YjlmZjIwNjQwMGE1MzY5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQ3NjY4MGVmMDNmMDBjZDVlOTcwYmJkY2Q0ZTU3ZmIxZjZkZjdkMmUyYzA3MTYzNWVmMmJlNzQ3OTAxOTBjM2IiCitVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJ2YWxncmluZC0oP1A8cHZlcj5cZCsoXC5cZCspKylcLnRhciIKKworQ09NUEFUSUJMRV9IT1NUID0gJyhpLjg2fHg4Nl82NHxhcm18YWFyY2g2NHxtaXBzfHBvd2VycGN8cG93ZXJwYzY0KS4qLWxpbnV4JworCisjIHZhbGdyaW5kIHN1cHBvcnRzIGFybXY3IGFuZCBhYm92ZQorQ09NUEFUSUJMRV9IT1NUX2FybXY0ID0gJ251bGwnCitDT01QQVRJQkxFX0hPU1RfYXJtdjUgPSAnbnVsbCcKK0NPTVBBVElCTEVfSE9TVF9hcm12NiA9ICdudWxsJworCisjIFgzMiBpc24ndCBzdXBwb3J0ZWQgYnkgdmFsZ3JpbmQgYXQgdGhpcyB0aW1lCitDT01QQVRJQkxFX0hPU1RfbGludXgtZ251eDMyID0gJ251bGwnCitDT01QQVRJQkxFX0hPU1RfbGludXgtbXVzbHgzMiA9ICdudWxsJworCisjIERpc2FibGUgZm9yIHNvbWUgTUlQUyB2YXJpYW50cworQ09NUEFUSUJMRV9IT1NUX21pcHNhcmNobjMyID0gJ251bGwnCitDT01QQVRJQkxFX0hPU1RfbWlwc2FyY2hyNiA9ICdudWxsJworCitpbmhlcml0IGF1dG90b29scyBwdGVzdAorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtdGxzIC0td2l0aG91dC1tcGljYyIKK0VYVFJBX09FQ09ORiArPSAiJHtAWyctLWVuYWJsZS1vbmx5MzJiaXQnLCctLWVuYWJsZS1vbmx5NjRiaXQnXVtkLmdldFZhcignU0lURUlORk9fQklUUycpICE9ICczMiddfSIKKworIyB2YWxncmluZCBjaGVja3MgaG9zdF9jcHUgImFybXY3KikiLCBzbyB3ZSBuZWVkIHRvIG92ZXItcmlkZSB0aGUgYXV0b3Rvb2xzLmJiY2xhc3MgZGVmYXVsdCAtLWhvc3Qgb3B0aW9uCitFWFRSQV9PRUNPTkZfYXBwZW5kX2FybSA9ICIgLS1ob3N0PWFybXY3JHtIT1NUX1ZFTkRPUn0tJHtIT1NUX09TfSIKK1RBUkdFVF9DQ19BUkNIX3JlbW92ZV9hcm0gPSAiJHtAZ2V0X21jcHUoZCl9IgorCitFWFRSQV9PRU1BS0UgPSAiLXciCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX1BFUkw9Jy91c3IvYmluL2VudiBwZXJsJyIKKworIyB2YWxncmluZCBsaWtlcyB0byBjb250cm9sIGl0cyBvd24gb3B0aW1pc2F0aW9uIGZsYWdzLiBJdCBnZW5lcmFsbHkgZGVmYXVsdHMKKyMgdG8gLU8yIGJ1dCB1c2VzIC1PMCBmb3Igc29tZSBzcGVjaWZpYyB0ZXN0IGFwcHMgZXRjLiBQYXNzaW5nIG91ciBvd24gZmxhZ3MKKyMgKHZpYSBDRkxBR1MpIG1lYW5zIHdlIGludGVyZmVyZSB3aXRoIHRoYXQuIE9ubHkgcGFzcyBERUJVR19GTEFHUyB0byBpdAorIyB3aGljaCBmaXhlcyBidWlsZCBwYXRoIGlzc3VlIGluIERXQVJGLgorU0VMRUNURURfT1BUSU1JWkFUSU9OID0gIiR7REVCVUdfRkxBR1N9IgorCitkZWYgZ2V0X21jcHUoZCk6CisgICAgZm9yIGFyZyBpbiAoZC5nZXRWYXIoJ1RVTkVfQ0NBUkdTJykgb3IgJycpLnNwbGl0KCk6CisgICAgICAgIGlmIGFyZy5zdGFydHN3aXRoKCctbWNwdT0nKToKKyAgICAgICAgICAgIHJldHVybiBhcmcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgcmV0dXJuICIiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgICBybSAtcmYgJHtTfS9jb25maWcuaAorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgaW5zdGFsbCAtbSA2NDQgJHtCfS9kZWZhdWx0LnN1cHAgJHtEfS8ke2xpYmRpcn0vdmFsZ3JpbmQvCit9CisKK1RVTkUgPSAiJHtAc3RyaXBfbWNwdShkKX0iCisKK1JERVBFTkRTXyR7UE59ICs9ICJwZXJsIgorCisjIHZhbGdyaW5kIG5lZWRzIGRlYnVnIGluZm9ybWF0aW9uIGZvciBsZC5zbyBhdCBydW50aW1lIGluIG9yZGVyIHRvCisjIHJlZGlyZWN0IGZ1bmN0aW9ucyBsaWtlIHN0cmxlbi4KK1JSRUNPTU1FTkRTXyR7UE59ICs9ICIke1RDTElCQ30tZGJnIgorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiIHNlZCBwZXJsIHBlcmwtbW9kdWxlLWZpbGUtZ2xvYiIKK1JERVBFTkRTXyR7UE59LXB0ZXN0X2FwcGVuZF9saWJjLWdsaWJjID0gIiBnbGliYy11dGlscyIKKworIyBPbmUgb2YgdGhlIHRlc3RzIGNvbnRhaW5zIGEgYm9ndXMgaW50ZXJwcmV0ZXIgcGF0aCBvbiBwdXJwb3NlLgorIyBTa2lwIGZpbGUgZGVwZW5kZW5jeSBjaGVjaworU0tJUF9GSUxFREVQU18ke1BOfS1wdGVzdCA9ICcxJworCitkb19jb21waWxlX3B0ZXN0KCkgeworICAgIG9lX3J1bm1ha2UgY2hlY2sKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKyAgICBjaG1vZCAreCAke0J9L3Rlc3RzL3ZnX3JlZ3Rlc3QKKworICAgICMgVGhlIHRlc3QgYXBwbGljYXRpb24gYmluYXJpZXMgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IGluc3RhbGxlZC4KKyAgICAjIEdyYWIgdGhlbSBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCisgICAgIworICAgICMgVGhlIHJlZ3Jlc3Npb24gdGVzdHMgcmVxdWlyZSBzY3JpcHRzIGFuZCBkYXRhIGZpbGVzIHRoYXQgYXJlIG5vdAorICAgICMgY29waWVkIHRvIHRoZSBidWlsZCBkaXJlY3RvcnkuICBUaGV5IG11c3QgYmUgY29waWVkIGZyb20gdGhlCisgICAgIyBzb3VyY2UgZGlyZWN0b3J5LiAKKyAgICBzYXZlZF9kaXI9JFBXRAorICAgIGZvciBwYXJlbnRfZGlyIGluICR7U30gJHtCfSA7IGRvCisgICAgICAgIGNkICRwYXJlbnRfZGlyCisKKyAgICAgICAgIyBleGNsdWRlIHNoZWxsIG9yIHRoZSBwYWNrYWdlIHdvbid0IGluc3RhbGwKKyAgICAgICAgcm0gLXJmIG5vbmUvdGVzdHMvc2hlbGwqIDI+L2Rldi9udWxsCisKKyAgICAgICAgc3ViZGlycz0idGVzdHMgY2FjaGVncmluZC90ZXN0cyBjYWxsZ3JpbmQvdGVzdHMgZHJkL3Rlc3RzIGhlbGdyaW5kL3Rlc3RzIG1hc3NpZi90ZXN0cyBtZW1jaGVjay90ZXN0cyBub25lL3Rlc3RzIgorCisgICAgICAgICMgR2V0IHRoZSB2ZyB0ZXN0IHNjcmlwdHMsIGZpbHRlcnMsIGFuZCBleHBlY3RlZCBmaWxlcworICAgICAgICBmb3IgZGlyIGluICRzdWJkaXJzIDsgZG8KKyAgICAgICAgICAgIGZpbmQgJGRpciB8IGNwaW8gLXB2ZHUgJHtEfSR7UFRFU1RfUEFUSH0KKyAgICAgICAgZG9uZQorICAgICAgICBjZCAkc2F2ZWRfZGlyCisgICAgZG9uZQorCisgICAgIyBjbGVhbiBvdXQgYnVpbGQgYXJ0aWZhY3RzIGJlZm9yZSBidWlsZGluZyB0aGUgcnBtCisgICAgZmluZCAke0R9JHtQVEVTVF9QQVRIfSBcCisgICAgICAgICBcKCAtbmFtZSAiTWFrZWZpbGUqIiBcCisgICAgICAgIC1vIC1uYW1lICIqLm8iIFwKKyAgICAgICAgLW8gLW5hbWUgIiouYyIgXAorICAgICAgICAtbyAtbmFtZSAiKi5TIiBcCisgICAgICAgIC1vIC1uYW1lICIqLmgiIFwpIFwKKyAgICAgICAgLWV4ZWMgcm0ge30gXDsKKworICAgICMgbmVlZGVkIGJ5IG1hc3NpZiB0ZXN0cworICAgIGNwICR7Qn0vbWFzc2lmL21zX3ByaW50ICR7RH0ke1BURVNUX1BBVEh9L21hc3NpZi9tc19wcmludAorCisgICAgIyBoYW5kbGUgbXVsdGlsaWIKKyAgICBzZWQgLWkgczpAbGliZGlyQDoke2xpYmRpcn06ZyAke0R9JHtQVEVTVF9QQVRIfS9ydW4tcHRlc3QKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYWNwaWNhL2FjcGljYV8yMDE1MDUxNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYWNwaWNhL2FjcGljYV8yMDE1MDUxNS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTMyNmViZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2FjcGljYS9hY3BpY2FfMjAxNTA1MTUuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi1TVU1NQVJZID0gIkFDUElDQSB0b29scyBmb3IgdGhlIGRldmVsb3BtZW50IGFuZCBkZWJ1ZyBvZiBBQ1BJIHRhYmxlcyIKLURFU0NSSVBUSU9OID0gIlRoZSBBQ1BJIENvbXBvbmVudCBBcmNoaXRlY3R1cmUgKEFDUElDQSkgcHJvamVjdCBwcm92aWRlcyBhbiBcCi1PUy1pbmRlcGVuZGVudCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gb2YgdGhlIEFkdmFuY2VkIENvbmZpZ3VyYXRpb24gYW5kIFwKLVBvd2VyIEludGVyZmFjZSBTcGVjaWZpY2F0aW9uIChBQ1BJKS4gQUNQSUNBIGNvZGUgY29udGFpbnMgdGhvc2UgcG9ydGlvbnMgb2YgXAotQUNQSSBtZWFudCB0byBiZSBkaXJlY3RseSBpbnRlZ3JhdGVkIGludG8gdGhlIGhvc3QgT1MgYXMgYSBrZXJuZWwtcmVzaWRlbnQgXAotc3Vic3lzdGVtLCBhbmQgYSBzbWFsbCBzZXQgb2YgdG9vbHMgdG8gYXNzaXN0IGluIGRldmVsb3BpbmcgYW5kIGRlYnVnZ2luZyBcCi1BQ1BJIHRhYmxlcy4iCi0KLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuYWNwaWNhLm9yZy8iCi1TRUNUSU9OID0gImNvbnNvbGUvdG9vbHMiCi0KLUxJQ0VOU0UgPSAiQlNEIHwgR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9nZW5lcmF0ZS91bml4L3JlYWRtZS50eHQ7bWQ1PTIwNDQwN2UxOTdjMWEwMTE1NGE0OGY2YzYyODBjM2FhIgotCi1DT01QQVRJQkxFX0hPU1QgPSAiKGkuODZ8eDg2XzY0fGFybXxhYXJjaDY0KS4qLWxpbnV4IgotCi1ERVBFTkRTID0gImJpc29uIGZsZXgiCi0KLVNSQ19VUkkgPSAiaHR0cHM6Ly9hY3BpY2Eub3JnL3NpdGVzL2FjcGljYS9maWxlcy9hY3BpY2EtdW5peDItJHtQVn0udGFyLmd6IFwKLSAgICBmaWxlOi8vbm8td2Vycm9yLnBhdGNoIFwKLSAgICBmaWxlOi8vcmVuYW1lLXl5X3NjYW5fc3RyaW5nLW1hbnVhbGx5LnBhdGNoIFwKLSAgICBmaWxlOi8vbWFuaXB1bGF0ZS1mZHMtaW5zdGVhZC1vZi1GSUxFLnBhdGNoIFwKLSAgICAiCi1TUkNfVVJJW21kNXN1bV0gPSAiMmJjNGE3Y2NjODJkZTlkZjlmYTk2NGY3ODRlY2IyOWMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjEyMDRlYzU2ZDcxYmM5YmZhMmVlMmFkZTRjNjZmN2U4NTQxNzcyYWM3MmVmOGNjYzIwYjNmMzM5Y2M5NjM3NCIKLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2FjcGljYS5vcmcvZG93bmxvYWRzIgotCi1TID0gIiR7V09SS0RJUn0vYWNwaWNhLXVuaXgyLSR7UFZ9IgotCi1FWFRSQV9PRU1BS0UgPSAiQ0M9JyR7Q0N9JyAnT1BUX0NGTEFHUz0tV2FsbCciCi0KLWRvX2luc3RhbGwoKSB7Ci0gICAgaW5zdGFsbCAtRCAtcCAtbTA3NTUgZ2VuZXJhdGUvdW5peC9iaW4qL2lhc2wgJHtEfSR7YmluZGlyfS9pYXNsCi0gICAgaW5zdGFsbCAtRCAtcCAtbTA3NTUgZ2VuZXJhdGUvdW5peC9iaW4qL2FjcGliaW4gJHtEfSR7YmluZGlyfS9hY3BpYmluCi0gICAgaW5zdGFsbCAtRCAtcCAtbTA3NTUgZ2VuZXJhdGUvdW5peC9iaW4qL2FjcGlleGVjICR7RH0ke2JpbmRpcn0vYWNwaWV4ZWMKLSAgICBpbnN0YWxsIC1EIC1wIC1tMDc1NSBnZW5lcmF0ZS91bml4L2JpbiovYWNwaWhlbHAgJHtEfSR7YmluZGlyfS9hY3BpaGVscAotICAgIGluc3RhbGwgLUQgLXAgLW0wNzU1IGdlbmVyYXRlL3VuaXgvYmluKi9hY3BpbmFtZXMgJHtEfSR7YmluZGlyfS9hY3BpbmFtZXMKLSAgICBpbnN0YWxsIC1EIC1wIC1tMDc1NSBnZW5lcmF0ZS91bml4L2JpbiovYWNwaXNyYyAke0R9JHtiaW5kaXJ9L2FjcGlzcmMKLSAgICBpbnN0YWxsIC1EIC1wIC1tMDc1NSBnZW5lcmF0ZS91bml4L2JpbiovYWNwaXh0cmFjdCAke0R9JHtiaW5kaXJ9L2FjcGl4dHJhY3QKLX0KLQotIyBpYXNsKi5iYiBpcyBhIHN1YnNldCBvZiB0aGlzIHJlY2lwZSwgc28gUlJFUExBQ0UgaXQKLVBST1ZJREVTID0gImlhc2wiCi1SUFJPVklERVNfJHtQTn0gKz0gImlhc2wiCi1SUkVQTEFDRVNfJHtQTn0gKz0gImlhc2wiCi1SQ09ORkxJR0hUU18ke1BOfSArPSAiaWFzbCIKLQotTkFUSVZFX0lOU1RBTExfV09SS1MgPSAiMSIKLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hY3BpY2EvYWNwaWNhXzIwMTcwMzAzLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hY3BpY2EvYWNwaWNhXzIwMTcwMzAzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ODUwNWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2FjcGljYS9hY3BpY2FfMjAxNzAzMDMuYmIKQEAgLTAsMCArMSw1NSBAQAorU1VNTUFSWSA9ICJBQ1BJQ0EgdG9vbHMgZm9yIHRoZSBkZXZlbG9wbWVudCBhbmQgZGVidWcgb2YgQUNQSSB0YWJsZXMiCitERVNDUklQVElPTiA9ICJUaGUgQUNQSSBDb21wb25lbnQgQXJjaGl0ZWN0dXJlIChBQ1BJQ0EpIHByb2plY3QgcHJvdmlkZXMgYW4gXAorT1MtaW5kZXBlbmRlbnQgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBZHZhbmNlZCBDb25maWd1cmF0aW9uIGFuZCBcCitQb3dlciBJbnRlcmZhY2UgU3BlY2lmaWNhdGlvbiAoQUNQSSkuIEFDUElDQSBjb2RlIGNvbnRhaW5zIHRob3NlIHBvcnRpb25zIG9mIFwKK0FDUEkgbWVhbnQgdG8gYmUgZGlyZWN0bHkgaW50ZWdyYXRlZCBpbnRvIHRoZSBob3N0IE9TIGFzIGEga2VybmVsLXJlc2lkZW50IFwKK3N1YnN5c3RlbSwgYW5kIGEgc21hbGwgc2V0IG9mIHRvb2xzIHRvIGFzc2lzdCBpbiBkZXZlbG9waW5nIGFuZCBkZWJ1Z2dpbmcgXAorQUNQSSB0YWJsZXMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmFjcGljYS5vcmcvIgorU0VDVElPTiA9ICJjb25zb2xlL3Rvb2xzIgorCitMSUNFTlNFID0gIkJTRCB8IEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZ2VuZXJhdGUvdW5peC9yZWFkbWUudHh0O21kNT0yMDQ0MDdlMTk3YzFhMDExNTRhNDhmNmM2MjgwYzNhYSIKKworQ09NUEFUSUJMRV9IT1NUID0gIihpLjg2fHg4Nl82NHxhcm18YWFyY2g2NCkuKi1saW51eCIKKworREVQRU5EUyA9ICJiaXNvbiBmbGV4IgorCitTUkNfVVJJID0gImh0dHBzOi8vYWNwaWNhLm9yZy9zaXRlcy9hY3BpY2EvZmlsZXMvYWNwaWNhLXVuaXgyLSR7UFZ9LnRhci5neiBcCisgICAgZmlsZTovL25vLXdlcnJvci5wYXRjaCBcCisgICAgZmlsZTovL3JlbmFtZS15eV9zY2FuX3N0cmluZy1tYW51YWxseS5wYXRjaCBcCisgICAgZmlsZTovL21hbmlwdWxhdGUtZmRzLWluc3RlYWQtb2YtRklMRS5wYXRjaDtzdHJpcGxldmVsPTIgXAorICAgIGZpbGU6Ly8wMDAxLUxpbnV4LWFkZC1zdXBwb3J0LWZvci1YMzItQUJJLWNvbXBpbGF0aW9uLnBhdGNoIFwKKyAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiNDhlZjQzMTRmYjRmZmRkMGM5NmYxNGRjZjIwNTQ0ZTEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjJkODFlODQxMDdhYzlhMDJiZTg2ZWE0M2NiZWE3YWZhOGZkNGI0MTUwMjcwYmM4OGMyZDRjOWZlYTBiOGFhZCIKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2FjcGljYS5vcmcvZG93bmxvYWRzIgorCitTID0gIiR7V09SS0RJUn0vYWNwaWNhLXVuaXgyLSR7UFZ9IgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorQUxURVJOQVRJVkVfJHtQTn0gPSAiYWNwaXh0cmFjdCIKKworRVhUUkFfT0VNQUtFID0gIkNDPScke0NDfScgJ09QVF9DRkxBR1M9LVdhbGwnIgorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLUQgLXAgLW0wNzU1IGdlbmVyYXRlL3VuaXgvYmluKi9pYXNsICR7RH0ke2JpbmRpcn0vaWFzbAorICAgIGluc3RhbGwgLUQgLXAgLW0wNzU1IGdlbmVyYXRlL3VuaXgvYmluKi9hY3BpYmluICR7RH0ke2JpbmRpcn0vYWNwaWJpbgorICAgIGluc3RhbGwgLUQgLXAgLW0wNzU1IGdlbmVyYXRlL3VuaXgvYmluKi9hY3BpZXhlYyAke0R9JHtiaW5kaXJ9L2FjcGlleGVjCisgICAgaW5zdGFsbCAtRCAtcCAtbTA3NTUgZ2VuZXJhdGUvdW5peC9iaW4qL2FjcGloZWxwICR7RH0ke2JpbmRpcn0vYWNwaWhlbHAKKyAgICBpbnN0YWxsIC1EIC1wIC1tMDc1NSBnZW5lcmF0ZS91bml4L2JpbiovYWNwaW5hbWVzICR7RH0ke2JpbmRpcn0vYWNwaW5hbWVzCisgICAgaW5zdGFsbCAtRCAtcCAtbTA3NTUgZ2VuZXJhdGUvdW5peC9iaW4qL2FjcGlzcmMgJHtEfSR7YmluZGlyfS9hY3Bpc3JjCisgICAgaW5zdGFsbCAtRCAtcCAtbTA3NTUgZ2VuZXJhdGUvdW5peC9iaW4qL2FjcGl4dHJhY3QgJHtEfSR7YmluZGlyfS9hY3BpeHRyYWN0Cit9CisKKyMgaWFzbCouYmIgaXMgYSBzdWJzZXQgb2YgdGhpcyByZWNpcGUsIHNvIFJSRVBMQUNFIGl0CitQUk9WSURFUyA9ICJpYXNsIgorUlBST1ZJREVTXyR7UE59ICs9ICJpYXNsIgorUlJFUExBQ0VTXyR7UE59ICs9ICJpYXNsIgorUkNPTkZMSUdIVFNfJHtQTn0gKz0gImlhc2wiCisKK05BVElWRV9JTlNUQUxMX1dPUktTID0gIjEiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYWNwaWNhL2FjcGl0ZXN0cy9hYXBpdHMtbGludXgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2FjcGljYS9hY3BpdGVzdHMvYWFwaXRzLWxpbnV4LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzVkNmIwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYWNwaWNhL2FjcGl0ZXN0cy9hYXBpdHMtbGludXgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMzYgKzAsMCBAQAotRnJvbTogQWwgU3RvbmUgPGFoczNAYWhzMy5uZXQ+Ci1EYXRlOiBNb24sIDcgQXByIDIwMTQgMTk6MDk6MzcgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAxLzJdIEZpeHVwIGFhcGl0cyBidWlsZAotCi1Gcm9tIGh0dHA6Ly9naXQubGluYXJvLm9yZy9wZW9wbGUvYWwuc3RvbmUvYWNwaWNhLXRvb2xzLmdpdAotVXBzdHJlYW0tc3RhdHVzOiBVbmtub3duCi0KLWRpZmYgLXVyTiBhY3BpY2EtdW5peDItMjAxMzA2MjYvdGVzdHMvYWFwaXRzL2F0ZXhlYy5jIGFjcGljYS11bml4Mi0yMDEzMDYyNi1hYXBpdHMvdGVzdHMvYWFwaXRzL2F0ZXhlYy5jCi0tLS0gYWNwaWNhLXVuaXgyLTIwMTMwNjI2L3Rlc3RzL2FhcGl0cy9hdGV4ZWMuYwkyMDEzLTAxLTE3IDEyOjQ4OjI4LjAwMDAwMDAwMCAtMDcwMAotKysrIGFjcGljYS11bml4Mi0yMDEzMDYyNi1hYXBpdHMvdGVzdHMvYWFwaXRzL2F0ZXhlYy5jCTIwMTMtMDctMjUgMTM6NDQ6MjMuMDIzODk0NDQxIC0wNjAwCi1AQCAtNjM5LDYgKzYzOSw3IEBACi0gfQotIAotIAotKyNpZiBBQ1BJX01BQ0hJTkVfV0lEVEggPT0gMzIKLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqCi0gICogRlVOQ1RJT046ICAgIEF0QnVpbGRMb2NhbFJTRFQKLUBAIC03NTcsOCArNzU4LDkgQEAKLSAgICAgICAgIExvY2FsUlNEVC0+SGVhZGVyLkNoZWNrc3VtID0gKFVJTlQ4KX5Mb2NhbFJTRFQtPkhlYWRlci5DaGVja3N1bTsKLSAgICAgfQotIH0KLSsjZW5kaWYKLSAKLSAKLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqCi0gICogRlVOQ1RJT046ICAgIEF0QnVpbGRMb2NhbFhTRFQKLUBAIC0xNDI0LDcgKzE0MjYsNyBAQAotICAgICAgICAgQUNQSV9XQVJOSU5HICgoQUVfSU5GTywKLSAgICAgICAgICAgICAiUmVxdWVzdCBvbiBbJTQuNHNdIGlzIGJleW9uZCByZWdpb24gbGltaXQgUmVxLSVYKyVYLCBCYXNlPSVYLCBMZW4tJVhcbiIsCi0gICAgICAgICAgICAgKFJlZ2lvbk9iamVjdC0+UmVnaW9uLk5vZGUpLT5OYW1lLkFzY2lpLCAoVUlOVDMyKSBBZGRyZXNzLAotLSAgICAgICAgICAgIEJ5dGVXaWR0aCwgKFVJTlQzMikgQnVmZmVyQWRkcmVzcywgTGVuZ3RoKSk7Ci0rICAgICAgICAgICAgQnl0ZVdpZHRoLCAoVUlOVDMyKSBCdWZmZXJBZGRyZXNzLCAoVUlOVDMyKSBMZW5ndGgpKTsKLSAKLSAgICAgICAgIHJldHVybiAoQUVfQU1MX1JFR0lPTl9MSU1JVCk7Ci0gICAgIH0KLUBAIC0xNzkyLDcgKzE3OTYsOSBAQAotICAgICAgICAgICAgIFBhdGgsIE9iai5JbnRlZ2VyLlZhbHVlLCBWYWx1ZSk7Ci0gI2Vsc2UKLSAgICAgICAgIHByaW50ZiAoIkFQSSBFcnJvcjogVmFsdWUgb2YgJXMgaXMgMHglbGx4IGluc3RlYWQgb2YgZXhwZWN0ZWQgMHglbGx4XG4iLAotLSAgICAgICAgICAgIFBhdGgsIE9iai5JbnRlZ2VyLlZhbHVlLCBWYWx1ZSk7Ci0rICAgICAgICAgICAgUGF0aCwKLSsJICAgIChsb25nIGxvbmcgdW5zaWduZWQgaW50KSBPYmouSW50ZWdlci5WYWx1ZSwKLSsJICAgIChsb25nIGxvbmcgdW5zaWduZWQgaW50KSBWYWx1ZSk7Ci0gI2VuZGlmCi0gICAgICAgICBTdGF0dXMgPSBBRV9FUlJPUjsKLSAgICAgfQotQEAgLTE4NzEsNyArMTg3Nyw3IEBACi0gICAgIHsKLSAgICAgICAgIFRlc3RFcnJvcnMrKzsKLSAgICAgICAgIHByaW50ZiAoIlRlc3QgRXJyb3I6IGNhbm5vdCBhbGxvY2F0ZSBidWZmZXIgb2YgJWQgYnl0ZXNcbiIsCi0tICAgICAgICAgICAgUmVzdWx0cy5MZW5ndGgpOwotKyAgICAgICAgICAgICAgICAoaW50KSBSZXN1bHRzLkxlbmd0aCk7Ci0gICAgICAgICByZXR1cm4gKEFFX05PX01FTU9SWSk7Ci0gICAgIH0KLSAgICAgUmVzdWx0cy5Qb2ludGVyID0gT2JqZWN0OwotQEAgLTE5NTIsNyArMTk1Niw4IEBACi0gICAgIHsKLSAgICAgICAgIHByaW50ZiAoIkF0Q2hlY2tCdWZmZXI6IHVuZXhwZWN0ZWQgbGVuZ3RoICVkIG9mIEJ1ZmZlciB2cyIKLSAgICAgICAgICAgICAiIGNhbGN1bGF0ZWQgJWQgYnl0ZXNcbiIsCi0tICAgICAgICAgICAgUmVzdWx0cy5MZW5ndGgsIEFDUElfUk9VTkRfVVBfVE9fTkFUSVZFX1dPUkQoc2l6ZW9mIChBQ1BJX09CSkVDVCkgKyBMZW5ndGgpKTsKLSsgICAgICAgICAgICAoaW50KVJlc3VsdHMuTGVuZ3RoLAotKwkgICAgKGludCkoQUNQSV9ST1VORF9VUF9UT19OQVRJVkVfV09SRChzaXplb2YgKEFDUElfT0JKRUNUKSArIExlbmd0aCkpKTsKLSAgICAgfQotIAotICAgICAvKiBJbml0aWFsaXplIHRoZSByZXR1cm4gYnVmZmVyIHN0cnVjdHVyZSAqLwotQEAgLTE5NjEsNyArMTk2OCw3IEBACi0gICAgIHsKLSAgICAgICAgIFRlc3RFcnJvcnMrKzsKLSAgICAgICAgIHByaW50ZiAoIlRlc3QgRXJyb3I6IGNhbm5vdCBhbGxvY2F0ZSBidWZmZXIgb2YgJWQgYnl0ZXNcbiIsCi0tICAgICAgICAgICAgUmVzdWx0cy5MZW5ndGgpOwotKyAgICAgICAgICAgIChpbnQpIFJlc3VsdHMuTGVuZ3RoKTsKLSAgICAgICAgIHJldHVybiAoQUVfTk9fTUVNT1JZKTsKLSAgICAgfQotICAgICBSZXN1bHRzLlBvaW50ZXIgPSBPYmplY3Q7Ci1kaWZmIC11ck4gYWNwaWNhLXVuaXgyLTIwMTMwNjI2L3Rlc3RzL2FhcGl0cy9hdGluaXQuYyBhY3BpY2EtdW5peDItMjAxMzA2MjYtYWFwaXRzL3Rlc3RzL2FhcGl0cy9hdGluaXQuYwotLS0tIGFjcGljYS11bml4Mi0yMDEzMDYyNi90ZXN0cy9hYXBpdHMvYXRpbml0LmMJMjAxMy0wMS0xNyAxMjo0ODoyOC4wMDAwMDAwMDAgLTA3MDAKLSsrKyBhY3BpY2EtdW5peDItMjAxMzA2MjYtYWFwaXRzL3Rlc3RzL2FhcGl0cy9hdGluaXQuYwkyMDEzLTA3LTI1IDEzOjIwOjE5LjcwNjcwNTk2MCAtMDYwMAotQEAgLTMwMjQsNyArMzAyNCw3IEBACi0gICAgICAgICAgICAgQWFwaUVycm9ycysrOwotICAgICAgICAgICAgIHByaW50ZiAoIkFQSSBFcnJvcjogQWNwaUdldFN5c3RlbUluZm8oKSByZXR1cm5lZCIKLSAgICAgICAgICAgICAgICAgIiBMZW5ndGggJWQsIGV4cGVjdGVkICVkXG4iLAotLSAgICAgICAgICAgICAgICBPdXRCdWZmZXIuTGVuZ3RoLCBzaXplb2YgKEluZm8pKTsKLSsgICAgICAgICAgICAgICAgKGludCkgT3V0QnVmZmVyLkxlbmd0aCwgKGludCkgc2l6ZW9mIChJbmZvKSk7Ci0gICAgICAgICAgICAgcmV0dXJuIChBRV9FUlJPUik7Ci0gICAgICAgICB9Ci0gCi1AQCAtMzA0Niw3ICszMDQ2LDcgQEAKLSAgICAgICAgICAgICBBYXBpRXJyb3JzKys7Ci0gICAgICAgICAgICAgcHJpbnRmICgiQVBJIEVycm9yOiBBY3BpR2V0U3lzdGVtSW5mbygpIHJldHVybmVkIgotICAgICAgICAgICAgICAgICAiIExlbmd0aCAlZCwgZXhwZWN0ZWQgJWRcbiIsCi0tICAgICAgICAgICAgICAgIE91dEJ1ZmZlci5MZW5ndGgsIHNpemVvZiAoSW5mbykpOwotKyAgICAgICAgICAgICAgICAoaW50KSBPdXRCdWZmZXIuTGVuZ3RoLCAoaW50KSBzaXplb2YgKEluZm8pKTsKLSAgICAgICAgICAgICByZXR1cm4gKEFFX0VSUk9SKTsKLSAgICAgICAgIH0KLSAKLUBAIC0zMDY2LDcgKzMwNjYsNyBAQAotICAgICAgICAgICAgIEFhcGlFcnJvcnMrKzsKLSAgICAgICAgICAgICBwcmludGYgKCJBUEkgRXJyb3I6IEFjcGlHZXRTeXN0ZW1JbmZvKCkgcmV0dXJuZWQiCi0gICAgICAgICAgICAgICAgICIgTGVuZ3RoICVkLCBleHBlY3RlZCAlZFxuIiwKLS0gICAgICAgICAgICAgICAgT3V0QnVmZmVyLkxlbmd0aCwgc2l6ZW9mIChJbmZvKSk7Ci0rICAgICAgICAgICAgICAgIChpbnQpIE91dEJ1ZmZlci5MZW5ndGgsIChpbnQpIHNpemVvZiAoSW5mbykpOwotICAgICAgICAgICAgIHJldHVybiAoQUVfRVJST1IpOwotICAgICAgICAgfQotICAgICAgICAgZWxzZSBpZiAoT3V0QnVmZmVyLlBvaW50ZXIgIT0gJkluZm8pCi1AQCAtMzE0OSw3ICszMTQ5LDcgQEAKLSAgICAgICAgICAgICBBYXBpRXJyb3JzKys7Ci0gICAgICAgICAgICAgcHJpbnRmICgiQVBJIEVycm9yOiBBY3BpR2V0U3lzdGVtSW5mbygpIHJldHVybmVkIgotICAgICAgICAgICAgICAgICAiIExlbmd0aCAlZCwgZXhwZWN0ZWQgJWRcbiIsCi0tICAgICAgICAgICAgICAgIE91dEJ1ZmZlci5MZW5ndGgsIHNpemVvZiAoSW5mbykpOwotKyAgICAgICAgICAgICAgICAoaW50KSBPdXRCdWZmZXIuTGVuZ3RoLCAoaW50KSBzaXplb2YgKEluZm8pKTsKLSAgICAgICAgICAgICByZXR1cm4gKEFFX0VSUk9SKTsKLSAgICAgICAgIH0KLSAgICAgICAgIGVsc2UgaWYgKE91dEJ1ZmZlci5Qb2ludGVyICE9ICZJbmZvKQotQEAgLTMyMTQsNyArMzIxNCw3IEBACi0gICAgICAgICAgICAgQWFwaUVycm9ycysrOwotICAgICAgICAgICAgIHByaW50ZiAoIkFQSSBFcnJvcjogQWNwaUdldFN5c3RlbUluZm8oKSByZXR1cm5lZCIKLSAgICAgICAgICAgICAgICAgIiBMZW5ndGggJWQsIGV4cGVjdGVkICVkXG4iLAotLSAgICAgICAgICAgICAgICBPdXRCdWZmZXIuTGVuZ3RoLCBzaXplb2YgKEFDUElfU1lTVEVNX0lORk8pKTsKLSsgICAgICAgICAgICAgICAgKGludCkgT3V0QnVmZmVyLkxlbmd0aCwgKGludCkgc2l6ZW9mIChBQ1BJX1NZU1RFTV9JTkZPKSk7Ci0gICAgICAgICAgICAgcmV0dXJuIChBRV9FUlJPUik7Ci0gICAgICAgICB9Ci0gICAgICAgICBlbHNlCi1kaWZmIC11ck4gYWNwaWNhLXVuaXgyLTIwMTMwNjI2L3Rlc3RzL2FhcGl0cy9hdG1haW4uYyBhY3BpY2EtdW5peDItMjAxMzA2MjYtYWFwaXRzL3Rlc3RzL2FhcGl0cy9hdG1haW4uYwotLS0tIGFjcGljYS11bml4Mi0yMDEzMDYyNi90ZXN0cy9hYXBpdHMvYXRtYWluLmMJMjAxMy0wMS0xNyAxMjo0ODoyOC4wMDAwMDAwMDAgLTA3MDAKLSsrKyBhY3BpY2EtdW5peDItMjAxMzA2MjYtYWFwaXRzL3Rlc3RzL2FhcGl0cy9hdG1haW4uYwkyMDEzLTA3LTI1IDEzOjE4OjIyLjA4MzMyMzk0OCAtMDYwMAotQEAgLTMxNSw3ICszMTUsNyBAQAotICAgICB7Ci0gICAgICAgICBwcmludGYgKCJBQ1BJQ0EgQVBJIFRTIGVycjogdGVzdCBudW0gJWxkIG9mIHRlc3QgY2FzZSAlbGQiCi0gICAgICAgICAgICAgIiBpcyBub3QgaW1wbGVtZW50ZWRcbiIsCi0tICAgICAgICAgICAgdGVzdF9udW0sIHRlc3RfY2FzZSk7Ci0rICAgICAgICAgICAgKGxvbmcgaW50KSB0ZXN0X251bSwgKGxvbmcgaW50KSB0ZXN0X2Nhc2UpOwotICAgICAgICAgcmV0dXJuIChBdFJldE5vdEltcGwpOwotICAgICB9Ci0gCi1AQCAtNDMwLDcgKzQzMiw3IEBACi0gICAgIGlmICh0ZXN0X2Nhc2UgPCAxIHx8IHRlc3RfY2FzZSA+IEFUX1RFU1RfQ0FTRV9OVU0pCi0gICAgIHsKLSAgICAgICAgIHByaW50ZiAoIkFDUElDQSBBUEkgVFMgZXJyOiB0ZXN0IGNhc2UgJWxkIGlzIG91dCBvZiByYW5nZSAxIC0gJWRcbiIsCi0tICAgICAgICAgICAgdGVzdF9jYXNlLCBBVF9URVNUX0NBU0VfTlVNKTsKLSsgICAgICAgICAgICAobG9uZyBpbnQpIHRlc3RfY2FzZSwgKGludCkgQVRfVEVTVF9DQVNFX05VTSk7Ci0gICAgICAgICByZXR1cm4gKEF0UmV0QmFkUGFyYW0pOwotICAgICB9Ci0gCi1AQCAtNDM4LDcgKzQ0MCw3IEBACi0gICAgIGlmICh0ZXN0X251bSA8IDAgfHwgdGVzdF9udW0gPiBBdFRlc3RDYXNlW3Rlc3RfY2FzZV0uVGVzdHNOdW0pCi0gICAgIHsKLSAgICAgICAgIHByaW50ZiAoIkFDUElDQSBBUEkgVFMgZXJyOiB0ZXN0IG51bSAlbGQgaXMgb3V0IG9mIHJhbmdlIDAgLSAlZFxuIiwKLS0gICAgICAgICAgICB0ZXN0X251bSwgQXRUZXN0Q2FzZVt0ZXN0X2Nhc2VdLlRlc3RzTnVtKTsKLSsgICAgICAgICAgICAobG9uZyBpbnQpIHRlc3RfbnVtLCBBdFRlc3RDYXNlW3Rlc3RfY2FzZV0uVGVzdHNOdW0pOwotICAgICAgICAgcmV0dXJuIChBdFJldEJhZFBhcmFtKTsKLSAgICAgfQotCi1kaWZmIC11ck4gYWNwaWNhLXVuaXgyLTIwMTMwNjI2L3Rlc3RzL2FhcGl0cy9hdG5hbWVzcGFjZS5jIGFjcGljYS11bml4Mi0yMDEzMDYyNi1hYXBpdHMvdGVzdHMvYWFwaXRzL2F0bmFtZXNwYWNlLmMKLS0tLSBhY3BpY2EtdW5peDItMjAxMzA2MjYvdGVzdHMvYWFwaXRzL2F0bmFtZXNwYWNlLmMJMjAxMy0wMS0xNyAxMjo0ODoyOC4wMDAwMDAwMDAgLTA3MDAKLSsrKyBhY3BpY2EtdW5peDItMjAxMzA2MjYtYWFwaXRzL3Rlc3RzL2FhcGl0cy9hdG5hbWVzcGFjZS5jCTIwMTMtMDctMjUgMTM6MjQ6MTUuMzY2NDY2NzA3IC0wNjAwCi1AQCAtMjUzNSw3ICsyNTM1LDggQEAKLSAjZWxzZQotICAgICAgICAgICAgICAgICBwcmludGYgKCJBUEkgRXJyb3I6IEFkZHJlc3Mgb2YgJXMgKDB4JWxsWCkgIT0gKDB4JWxsWClcbiIsCi0gICAgICAgICAgICAgICAgICAgICBQYXRoTmFtZXNbMiAqIGkgKyAxXSwKLS0gICAgICAgICAgICAgICAgICAgIEluZm8tPkFkZHJlc3MsIEV4cGVjdGVkSW5mb1tpXS5BZGRyZXNzKTsKLSsgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcgdW5zaWduZWQgaW50KSBJbmZvLT5BZGRyZXNzLAotKwkJICAgIChsb25nIGxvbmcgdW5zaWduZWQgaW50KSBFeHBlY3RlZEluZm9baV0uQWRkcmVzcyk7Ci0gI2VuZGlmCi0gI2Vsc2UKLSAgICAgICAgICAgICAgICAgcHJpbnRmICgiQVBJIEVycm9yOiBBZGRyZXNzIG9mICVzICgweCVYKSAhPSAoMHglWClcbiIsCi1AQCAtMjkwOCw3ICsyOTA5LDggQEAKLSAgICAgICAgIFRlc3RFcnJvcnMrKzsKLSAgICAgICAgIHByaW50ZiAoIkF0R2V0TmV4dE9iamVjdFR5cGVDb21tb246IGRpZmZlcmVudCBudW1iZXJzIG9mIGVudGl0aWVzIgotICAgICAgICAgICAgICJpbiBUeXBlc05hbWVzICglZCkgYW5kIExldmVsVHlwZXMwMDAwICglZClcbiIsCi0tICAgICAgICAgICAgVHlwZXNDb3VudCwgc2l6ZW9mIChMZXZlbFR5cGVzMDAwMCkgLyBzaXplb2YgKEFDUElfT0JKRUNUX1RZUEUpKTsKLSsgICAgICAgICAgICBUeXBlc0NvdW50LAotKwkgICAgKGludCkgKHNpemVvZiAoTGV2ZWxUeXBlczAwMDApIC8gc2l6ZW9mIChBQ1BJX09CSkVDVF9UWVBFKSkpOwotICAgICAgICAgcmV0dXJuIChBRV9FUlJPUik7Ci0gICAgIH0KLSAKLUBAIC00MTkyLDcgKzQxOTQsOSBAQAotICAgICAgICAgICAgIFBhdGhuYW1lLCBPYmouSW50ZWdlci5WYWx1ZSwgVmFsdWUpOwotICNlbHNlCi0gICAgICAgICBwcmludGYgKCJBUEkgRXJyb3I6IFZhbHVlIG9mICVzIGlzIDB4JWxseCBpbnN0ZWFkIG9mIGV4cGVjdGVkIDB4JWxseFxuIiwKLS0gICAgICAgICAgICBQYXRobmFtZSwgT2JqLkludGVnZXIuVmFsdWUsIFZhbHVlKTsKLSsgICAgICAgICAgICBQYXRobmFtZSwKLSsJICAgIChsb25nIGxvbmcgdW5zaWduZWQgaW50KSBPYmouSW50ZWdlci5WYWx1ZSwKLSsJICAgIChsb25nIGxvbmcgdW5zaWduZWQgaW50KSBWYWx1ZSk7Ci0gI2VuZGlmCi0gICAgICAgICBTdGF0dXMgPSBBRV9FUlJPUjsKLSAgICAgfQotQEAgLTUxOTksNyArNTIwMyw3IEBACi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICBBYXBpRXJyb3JzKys7Ci0gICAgICAgICAgICAgICAgIHByaW50ZiAoIkFQSSBFcnJvcjogQWNwaU9zQWxsb2NhdGUoJWQpIHJldHVybmVkIE5VTExcbiIsCi0tICAgICAgICAgICAgICAgICAgICBPdXROYW1lLkxlbmd0aCk7Ci0rICAgICAgICAgICAgICAgICAgICAoaW50KSBPdXROYW1lLkxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgIHJldHVybiAoQUVfRVJST1IpOwotICAgICAgICAgICAgIH0KLSAgICAgICAgIH0KLWRpZmYgLXVyTiBhY3BpY2EtdW5peDItMjAxMzA2MjYvdGVzdHMvYWFwaXRzL2F0b3N4ZmN0cmwuYyBhY3BpY2EtdW5peDItMjAxMzA2MjYtYWFwaXRzL3Rlc3RzL2FhcGl0cy9hdG9zeGZjdHJsLmMKLS0tLSBhY3BpY2EtdW5peDItMjAxMzA2MjYvdGVzdHMvYWFwaXRzL2F0b3N4ZmN0cmwuYwkyMDEzLTAxLTE3IDEyOjQ4OjI4LjAwMDAwMDAwMCAtMDcwMAotKysrIGFjcGljYS11bml4Mi0yMDEzMDYyNi1hYXBpdHMvdGVzdHMvYWFwaXRzL2F0b3N4ZmN0cmwuYwkyMDEzLTA3LTI1IDEzOjMwOjAwLjM3NTQ5Mjc1MSAtMDYwMAotQEAgLTczNywxMyArNzM3LDE1IEBACi0gI2lmIEFDUElfTUFDSElORV9XSURUSCA9PSA2NAotICNpZmRlZiAgICBfTVNDX1ZFUgotICAgICAgICAgcHJpbnRmKCJPc3hmQ3RybEZpbmdSZWc6IHVuZXhwZWN0ZWQgV2lkdGggJWQgb2YgUmVnIDB4JUk2NHhcbiIsCi0rICAgICAgICAgICAgV2lkdGgsIEFkZHJlc3MpOwotICNlbHNlCi0gICAgICAgICBwcmludGYoIk9zeGZDdHJsRmluZ1JlZzogdW5leHBlY3RlZCBXaWR0aCAlZCBvZiBSZWcgMHglbGx4XG4iLAotKyAgICAgICAgICAgIFdpZHRoLCAobG9uZyBsb25nIHVuc2lnbmVkIGludCkgQWRkcmVzcyk7Ci0gI2VuZGlmCi0gI2Vsc2UKLSAgICAgICAgIHByaW50ZigiT3N4ZkN0cmxGaW5nUmVnOiB1bmV4cGVjdGVkIFdpZHRoICVkIG9mIFJlZyAweCV4XG4iLAotLSNlbmRpZgotICAgICAgICAgICAgIFdpZHRoLCBBZGRyZXNzKTsKLSsjZW5kaWYKLSAgICAgICAgIHJldHVybiAoTlVMTCk7Ci0gICAgIH0KLSAKLUBAIC03NjQsMTUgKzc2NiwxOSBAQAotICNpZmRlZiAgICBfTVNDX1ZFUgotICAgICAgICAgICAgICAgICBwcmludGYoIk9zeGZDdHJsRmluZ1JlZzogaW50ZXJzZWN0aW9uIFJlZ3MgKDB4JUk2NHg6IDB4JXgpIgotICAgICAgICAgICAgICAgICAgICAgIiBhbmQgKDB4JUk2NHg6IDB4JXgpXG4iLAotKyAgICAgICAgICAgICAgICAgICAgUmVnLT5BZGRyZXNzLCBSZWctPldpZHRoLCBBZGRyZXNzLCBXaWR0aCk7Ci0gI2Vsc2UKLSAgICAgICAgICAgICAgICAgcHJpbnRmKCJPc3hmQ3RybEZpbmdSZWc6IGludGVyc2VjdGlvbiBSZWdzICgweCVsbHg6IDB4JXgpIgotICAgICAgICAgICAgICAgICAgICAgIiBhbmQgKDB4JWxseDogMHgleClcbiIsCi0rICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIHVuc2lnbmVkIGludCkgUmVnLT5BZGRyZXNzLAotKwkJICAgIFJlZy0+V2lkdGgsCi0rCQkgICAgKGxvbmcgbG9uZyB1bnNpZ25lZCBpbnQpIEFkZHJlc3MsIFdpZHRoKTsKLSAjZW5kaWYKLSAjZWxzZQotICAgICAgICAgICAgICAgICBwcmludGYoIk9zeGZDdHJsRmluZ1JlZzogaW50ZXJzZWN0aW9uIFJlZ3MgKDB4JXg6IDB4JXgpIgotICAgICAgICAgICAgICAgICAgICAgIiBhbmQgKDB4JXg6IDB4JXgpXG4iLAotLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgUmVnLT5BZGRyZXNzLCBSZWctPldpZHRoLCBBZGRyZXNzLCBXaWR0aCk7Ci0rI2VuZGlmCi0gICAgICAgICAgICAgICAgIHJldHVybiAoTlVMTCk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgfQotQEAgLTc4NiwxMyArNzkyLDE1IEBACi0gI2lmIEFDUElfTUFDSElORV9XSURUSCA9PSA2NAotICNpZmRlZiAgICBfTVNDX1ZFUgotICAgICAgICAgICAgIHByaW50ZigiT3N4ZkN0cmxGaW5nUmVnOiBubyBtZW1vcnkgZm9yIFJlZyAoMHglSTY0eDogMHgleClcbiIsCi0rICAgICAgICAgICAgICAgIFJlZy0+QWRkcmVzcywgUmVnLT5XaWR0aCk7Ci0gI2Vsc2UKLSAgICAgICAgICAgICBwcmludGYoIk9zeGZDdHJsRmluZ1JlZzogbm8gbWVtb3J5IGZvciBSZWcgKDB4JWxseDogMHgleClcbiIsCi0rICAgICAgICAgICAgICAgIChsb25nIGxvbmcgdW5zaWduZWQgaW50KSBSZWctPkFkZHJlc3MsIFJlZy0+V2lkdGgpOwotICNlbmRpZgotICNlbHNlCi0gICAgICAgICAgICAgcHJpbnRmKCJPc3hmQ3RybEZpbmdSZWc6IG5vIG1lbW9yeSBmb3IgUmVnICgweCV4OiAweCV4KVxuIiwKLS0jZW5kaWYKLSAgICAgICAgICAgICAgICAgUmVnLT5BZGRyZXNzLCBSZWctPldpZHRoKTsKLSsjZW5kaWYKLSAgICAgICAgICAgICByZXR1cm4gKE5VTEwpOwotICAgICAgICAgfQotICAgICAgICAgUmVnLT5UeXBlID0gVHlwZTsKLUBAIC05MzIsMTQgKzk0MCwxOSBAQAotICNpZiBBQ1BJX01BQ0hJTkVfV0lEVEggPT0gNjQKLSAjaWZkZWYgICAgX01TQ19WRVIKLSAgICAgICAgICAgICBwcmludGYoIiUuMnUgKCVzIEFkZHJlc3MgMHglSTY0eDogV2lkdGggJS4ydSkgci93IGNvdW50czogJXUvJXVcbiIsCi0rICAgICAgICAgICAgICAgIGksIChSZWctPlR5cGUgPT0gRU1VTF9SRUdfU1lTKT8gIlNZUyI6ICJJTyIsCi0rICAgICAgICAgICAgICAgIFJlZy0+QWRkcmVzcywgUmVnLT5XaWR0aCwgUmVnLT5SZWFkQ291bnQsIFJlZy0+V3JpdGVDb3VudCk7Ci0gI2Vsc2UKLSAgICAgICAgICAgICBwcmludGYoIiUuMnUgKCVzIEFkZHJlc3MgMHglbGx4OiBXaWR0aCAlLjJ1KSByL3cgY291bnRzOiAldS8ldVxuIiwKLSsgICAgICAgICAgICAgICAgaSwgKFJlZy0+VHlwZSA9PSBFTVVMX1JFR19TWVMpPyAiU1lTIjogIklPIiwKLSsgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyB1bnNpZ25lZCBpbnQpIFJlZy0+QWRkcmVzcywKLSsJCVJlZy0+V2lkdGgsIFJlZy0+UmVhZENvdW50LCBSZWctPldyaXRlQ291bnQpOwotICNlbmRpZgotICNlbHNlCi0gICAgICAgICAgICAgcHJpbnRmKCIlLjJ1ICglcyBBZGRyZXNzIDB4JS40eDogV2lkdGggJS4ydSkgci93IGNvdW50czogJXUvJXVcbiIsCi0tI2VuZGlmCi0gICAgICAgICAgICAgICAgIGksIChSZWctPlR5cGUgPT0gRU1VTF9SRUdfU1lTKT8gIlNZUyI6ICJJTyIsCi0gICAgICAgICAgICAgICAgIFJlZy0+QWRkcmVzcywgUmVnLT5XaWR0aCwgUmVnLT5SZWFkQ291bnQsIFJlZy0+V3JpdGVDb3VudCk7Ci0rI2VuZGlmCi0gICAgICAgICAgICAgUmVnID0gUmVnLT5OZXh0OwotICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgIH0KLWRpZmYgLXVyTiBhY3BpY2EtdW5peDItMjAxMzA2MjYvdGVzdHMvYWFwaXRzL2F0cmVzb3VyY2UuYyBhY3BpY2EtdW5peDItMjAxMzA2MjYtYWFwaXRzL3Rlc3RzL2FhcGl0cy9hdHJlc291cmNlLmMKLS0tLSBhY3BpY2EtdW5peDItMjAxMzA2MjYvdGVzdHMvYWFwaXRzL2F0cmVzb3VyY2UuYwkyMDEzLTAxLTE3IDEyOjQ4OjI5LjAwMDAwMDAwMCAtMDcwMAotKysrIGFjcGljYS11bml4Mi0yMDEzMDYyNi1hYXBpdHMvdGVzdHMvYWFwaXRzL2F0cmVzb3VyY2UuYwkyMDEzLTA3LTI1IDEzOjI1OjQ5LjQyMzU2NTk0NyAtMDYwMAotQEAgLTE3NCw3ICsxNzQsNyBAQAotICAgICAgICAgQWFwaUVycm9ycysrOwotICAgICAgICAgcHJpbnRmICgiQVBJIEVycm9yOiBBY3BpR2V0Q3VycmVudFJlc291cmNlcyglcykgcmV0dXJuZWQgTGVuZ3RoICVkLCIKLSAgICAgICAgICAgICAiIGV4cGVjdGVkICVkXG4iLAotLSAgICAgICAgICAgIFBhdGhuYW1lLCBPdXRCdWZmZXIuTGVuZ3RoLCBSVDAwMDBfREVWMF9DUlNfTEVOKTsKLSsgICAgICAgICAgICBQYXRobmFtZSwgKGludCkgT3V0QnVmZmVyLkxlbmd0aCwgUlQwMDAwX0RFVjBfQ1JTX0xFTik7Ci0gICAgICAgICByZXR1cm4gKEFFX0VSUk9SKTsKLSAgICAgfQotIAotQEAgLTQ5MCw3ICs0OTAsNyBAQAotICAgICAgICAgQWFwaUVycm9ycysrOwotICAgICAgICAgcHJpbnRmICgiQVBJIEVycm9yOiBBY3BpR2V0Q3VycmVudFJlc291cmNlcyglcykgcmV0dXJuZWQgTGVuZ3RoICVkLCIKLSAgICAgICAgICAgICAiIGV4cGVjdGVkICVkXG4iLAotLSAgICAgICAgICAgIFBhdGhuYW1lLCBPdXRCdWZmZXIuTGVuZ3RoLCBSVDAwMDBfREVWMF9DUlNfTEVOKTsKLSsgICAgICAgICAgICBQYXRobmFtZSwgKGludCkgT3V0QnVmZmVyLkxlbmd0aCwgUlQwMDAwX0RFVjBfQ1JTX0xFTik7Ci0gICAgICAgICByZXR1cm4gKEFFX0VSUk9SKTsKLSAgICAgfQotIAotQEAgLTY4OSw3ICs2ODksNyBAQAotICAgICAgICAgQWFwaUVycm9ycysrOwotICAgICAgICAgcHJpbnRmICgiQXBpIEVycm9yOiBSZXNvdXJjZS0+TGVuZ3RoICglZCkgIT0gJWRcbiIsCi0gICAgICAgICAgICAgQ3VycmVudFJlc291cmNlLT5MZW5ndGgsCi0tICAgICAgICAgICAgQUNQSV9ST1VORF9VUF9UT19OQVRJVkVfV09SRCAoQUNQSV9SU19TSVpFIChBQ1BJX1JFU09VUkNFX0lSUSkpKTsKLSsgICAgICAgICAgICAoaW50KSAoQUNQSV9ST1VORF9VUF9UT19OQVRJVkVfV09SRCAoQUNQSV9SU19TSVpFIChBQ1BJX1JFU09VUkNFX0lSUSkpKSk7Ci0gICAgIH0KLSAKLSAgICAgaWYgKEN1cnJlbnRSZXNvdXJjZS0+RGF0YS5JcnEuVHJpZ2dlcmluZyAhPSAwKSAvKiBMZXZlbC1UcmlnZ2VyZWQgKi8KLUBAIC05ODEsNyArOTgxLDcgQEAKLSAgICAgICAgIEFhcGlFcnJvcnMrKzsKLSAgICAgICAgIHByaW50ZiAoIkFQSSBFcnJvcjogQWNwaUdldFBvc3NpYmxlUmVzb3VyY2VzKCVzKSByZXR1cm5lZCBMZW5ndGggJWQsIgotICAgICAgICAgICAgICIgZXhwZWN0ZWQgJWRcbiIsCi0tICAgICAgICAgICAgUGF0aG5hbWUsIE91dEJ1ZmZlci5MZW5ndGgsIFJUMDAwMF9ERVYwX0NSU19MRU4pOwotKyAgICAgICAgICAgIFBhdGhuYW1lLCAoaW50KSBPdXRCdWZmZXIuTGVuZ3RoLCBSVDAwMDBfREVWMF9DUlNfTEVOKTsKLSAgICAgICAgIHJldHVybiAoQUVfRVJST1IpOwotICAgICB9Ci0gCi1AQCAtMTkyMyw3ICsxOTIzLDcgQEAKLSAgICAgICAgIEFhcGlFcnJvcnMrKzsKLSAgICAgICAgIHByaW50ZiAoIkFQSSBFcnJvcjogQWNwaUdldElycVJvdXRpbmdUYWJsZSglcykgcmV0dXJuZWQgTGVuZ3RoICVkLCIKLSAgICAgICAgICAgICAiIGV4cGVjdGVkICVkXG4iLAotLSAgICAgICAgICAgIFBhdGhuYW1lLCBPdXRCdWZmZXIuTGVuZ3RoLCAweEE0OCk7Ci0rICAgICAgICAgICAgUGF0aG5hbWUsIChpbnQpIE91dEJ1ZmZlci5MZW5ndGgsIDB4QTQ4KTsKLSAgICAgICAgIHJldHVybiAoQUVfRVJST1IpOwotICAgICB9Ci0KLWRpZmYgLXVyTiBhY3BpY2EtdW5peDItMjAxMzA2MjYvdGVzdHMvYWFwaXRzL01ha2VmaWxlIGFjcGljYS11bml4Mi0yMDEzMDYyNi1hYXBpdHMvdGVzdHMvYWFwaXRzL01ha2VmaWxlCi0tLS0gYWNwaWNhLXVuaXgyLTIwMTMwNjI2L3Rlc3RzL2FhcGl0cy9NYWtlZmlsZQkyMDEzLTAxLTE3IDEyOjQ4OjI5LjAwMDAwMDAwMCAtMDcwMAotKysrIGFjcGljYS11bml4Mi0yMDEzMDYyNi1hYXBpdHMvdGVzdHMvYWFwaXRzL01ha2VmaWxlCTIwMTMtMDctMjUgMTU6MTc6MDkuMzA5MjM2NDIyIC0wNjAwCi1AQCAtMTk0LDcgKzE5NCw3IEBACi0gQ0ZMQUdTKz0gLVdhbGwgLWcgLURfTElOVVggLUROREVCVUcgLURfQ09OU09MRSAtREFDUElfQVBJVFMgLURBQ1BJX0VYRUNfQVBQIC1EX01VTFRJX1RIUkVBREVEIC1Xc3RyaWN0LXByb3RvdHlwZXMgLUkuLi8uLi9zb3VyY2UvaW5jbHVkZQotCi0gCi0tYWNwaWV4ZWMgOiAkKHBhdHN1YnN0ICUuYywlLm8sICQoU1JDUykpCi0rJChQUk9HKSA6ICQocGF0c3Vic3QgJS5jLCUubywgJChTUkNTKSkKLSAJJChDQykgJChMREZMQUdTKSAkKHBhdHN1YnN0ICUuYywlLm8sICQoU1JDUykpIC1vICQoUFJPRykKLSAKLSBDTEVBTkZJTEVTPSAkKFBST0cpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2FjcGljYS9hY3BpdGVzdHMvYWFwaXRzLW1ha2VmaWxlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hY3BpY2EvYWNwaXRlc3RzL2FhcGl0cy1tYWtlZmlsZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ5ZTk5Ny4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2FjcGljYS9hY3BpdGVzdHMvYWFwaXRzLW1ha2VmaWxlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotRnJvbTogQWwgU3RvbmUgPGFoczNAYWhzMy5uZXQ+Ci1EYXRlOiBNb24sIDcgQXByIDIwMTQgMTk6MDk6MzcgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAxLzJdIEZpeHVwIGFhcGl0cyBidWlsZAotCi1Gcm9tIGh0dHA6Ly9naXQubGluYXJvLm9yZy9wZW9wbGUvYWwuc3RvbmUvYWNwaWNhLXRvb2xzLmdpdAotVXBzdHJlYW0tc3RhdHVzOiBVbmtub3duCi0KLWRpZmYgLXVyTiBhY3BpY2EtdW5peDItMjAxNDAzMjUvdGVzdHMvYWFwaXRzL01ha2VmaWxlIGFjcGljYS11bml4Mi0yMDE0MDMyNS90ZXN0cy9hYXBpdHMvTWFrZWZpbGUKLS0tLSBhY3BpY2EtdW5peDItMjAxNDAzMjUvdGVzdHMvYWFwaXRzL01ha2VmaWxlCTIwMTQtMDQtMDUgMTQ6MjM6MTQuNjgzNjM2Nzk0IC0wNjAwCi0rKysgYWNwaWNhLXVuaXgyLTIwMTQwMzI1LWFhcGl0cy90ZXN0cy9hYXBpdHMvTWFrZWZpbGUJMjAxNC0wNC0wNSAxNToxMDo1Ny44NzkxODQ1OTggLTA2MDAKLUBAIC0xNiw2ICsxNiw3IEBACi0gCWF0b3N4ZndyYXAuYyBcCi0gCW9zdW5peHhmLmMgXAotIAkuLi8uLi9zb3VyY2UvY29tbW9uL2FoaWRzLmMgXAotKwkuLi8uLi9zb3VyY2UvY29tbW9uL2FodXVpZHMuYyBcCi0gCS4uLy4uL3NvdXJjZS9jb21tb24vY21mc2l6ZS5jIFwKLSAJLi4vLi4vc291cmNlL2NvbW1vbi9nZXRvcHQuYyBcCi0gCS4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hhcmR3YXJlL2h3dGltZXIuYyBcCi1AQCAtMTc0LDYgKzE3NSw3IEBACi0gCS4uLy4uL3NvdXJjZS9jb21wb25lbnRzL3V0aWxpdGllcy91dGV4Y2VwLmMgXAotIAkuLi8uLi9zb3VyY2UvY29tcG9uZW50cy91dGlsaXRpZXMvdXRmaWxlaW8uYyBcCi0gCS4uLy4uL3NvdXJjZS9jb21wb25lbnRzL3V0aWxpdGllcy91dGdsb2JhbC5jIFwKLSsJLi4vLi4vc291cmNlL2NvbXBvbmVudHMvdXRpbGl0aWVzL3V0aGV4LmMgXAotIAkuLi8uLi9zb3VyY2UvY29tcG9uZW50cy91dGlsaXRpZXMvdXRpZHMuYyBcCi0gCS4uLy4uL3NvdXJjZS9jb21wb25lbnRzL3V0aWxpdGllcy91dGluaXQuYyBcCi0gCS4uLy4uL3NvdXJjZS9jb21wb25lbnRzL3V0aWxpdGllcy91dGxvY2suYyBcCi1AQCAtMTg5LDYgKzE5MSw3IEBACi0gCS4uLy4uL3NvdXJjZS9jb21wb25lbnRzL3V0aWxpdGllcy91dHN0YXRlLmMgXAotIAkuLi8uLi9zb3VyY2UvY29tcG9uZW50cy91dGlsaXRpZXMvdXRzdHJpbmcuYyBcCi0gCS4uLy4uL3NvdXJjZS9jb21wb25lbnRzL3V0aWxpdGllcy91dHRyYWNrLmMgXAotKwkuLi8uLi9zb3VyY2UvY29tcG9uZW50cy91dGlsaXRpZXMvdXR1dWlkLmMgXAotIAkuLi8uLi9zb3VyY2UvY29tcG9uZW50cy91dGlsaXRpZXMvdXR4ZmFjZS5jIFwKLSAJLi4vLi4vc291cmNlL2NvbXBvbmVudHMvdXRpbGl0aWVzL3V0eGZlcnJvci5jIFwKLSAJLi4vLi4vc291cmNlL2NvbXBvbmVudHMvdXRpbGl0aWVzL3V0eGZpbml0LmMgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hY3BpY2EvYWNwaXRlc3RzXzIwMTQwODI4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hY3BpY2EvYWNwaXRlc3RzXzIwMTQwODI4LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWFjMTU3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYWNwaWNhL2FjcGl0ZXN0c18yMDE0MDgyOC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLVNVTU1BUlkgPSAiVGVzdCBzdWl0ZSB1c2VkIHRvIHZhbGlkYXRlIEFDUElDQSIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuYWNwaWNhLm9yZy8iCi0KLUxJQ0VOU0UgPSAiSW50ZWwiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly90ZXN0cy9hYXBpdHMvYXRleGVjLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xMTU7bWQ1PWU5MmJjZGZjZDAxZDExN2QxYmRhM2U4MTRiYjIwMzBhIgotCi1ERVBFTkRTID0gImJpc29uIGZsZXgiCi0KLVNSQ19VUkkgPSAiaHR0cHM6Ly9hY3BpY2Eub3JnL3NpdGVzL2FjcGljYS9maWxlcy9hY3BpdGVzdHMtdW5peC0ke1BWfS50YXIuZ3o7bmFtZT1hY3BpdGVzdHMgXAotICAgICAgICAgICBodHRwczovL2FjcGljYS5vcmcvc2l0ZXMvYWNwaWNhL2ZpbGVzL2FjcGljYS11bml4Mi0ke1BWfS50YXIuZ3o7bmFtZT1hY3BpY2EgXAotICAgICAgICAgICBmaWxlOi8vYWFwaXRzLWxpbnV4LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2FhcGl0cy1tYWtlZmlsZS5wYXRjaCBcCi0iCi1TUkNfVVJJW2FjcGl0ZXN0cy5tZDVzdW1dID0gImRiOWQ2ZmRhYThlM2ViMTAxZDcwMGVlNWJhNDkzOGVkIgotU1JDX1VSSVthY3BpdGVzdHMuc2hhMjU2c3VtXSA9ICJlNTc2Yzc0YmYxYmYxYzlmNzM0OGJmOTQxOWUwNWM4YWNmZWNlNzEwNWFiY2RjMDUyZTY2NjcwYzdhZjJjZjAwIgotU1JDX1VSSVthY3BpY2EubWQ1c3VtXSA9ICI2ZjA1ZjBkMTAxNjZhMWIxZmY2MTA3ZjNkMWNkZjFlNSIKLVNSQ19VUklbYWNwaWNhLnNoYTI1NnN1bV0gPSAiMDFkODg2NzY1NmM1YmE0MWRlYzMwN2M0MzgzY2U2NzYxOTZhZDQyODFhYzJjOWRlYzlmNWJlNWZhYzZkODg4ZSIKLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2FjcGljYS5vcmcvZG93bmxvYWRzIgotCi1TID0gIiR7V09SS0RJUn0vYWNwaXRlc3RzLXVuaXgtJHtQVn0iCi0KLUVYVFJBX09FTUFLRSA9ICInQ0M9JHtDQ30nICdPUFRfQ0ZMQUdTPS1XYWxsJyIKLQotIyBUaGUgTWFrZWZpbGVzIGV4cGVjdCBhIHNwZWNpZmljIGxheW91dAotZG9fY29tcGlsZSgpIHsKLSAgICBjcCAtYWYgJHtXT1JLRElSfS9hY3BpY2EtdW5peDItJHtQVn0vc291cmNlICR7U30KLSAgICBjZCB0ZXN0cy9hYXBpdHMKLSAgICBvZV9ydW5tYWtlCi19Ci0KLWRvX2luc3RhbGwoKSB7Ci0gICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9Ci0gICAgaW5zdGFsbCAtbTA3NTUgdGVzdHMvYWFwaXRzL2Jpbi9hYXBpdHMgJHtEfSR7YmluZGlyfQotfQotCi1DT01QQVRJQkxFX0hPU1QgPSAiKGkuODZ8eDg2XzY0fGFybXxhYXJjaDY0KS4qLWxpbnV4IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hY3BpY2EvZmlsZXMvMDAwMS1MaW51eC1hZGQtc3VwcG9ydC1mb3ItWDMyLUFCSS1jb21waWxhdGlvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYWNwaWNhL2ZpbGVzLzAwMDEtTGludXgtYWRkLXN1cHBvcnQtZm9yLVgzMi1BQkktY29tcGlsYXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY3NDIwMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYWNwaWNhL2ZpbGVzLzAwMDEtTGludXgtYWRkLXN1cHBvcnQtZm9yLVgzMi1BQkktY29tcGlsYXRpb24ucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSBkMjIyNDFlZmMwNzA4Yzk3OTlmMTdhMjBlYWJiNTJhNDhkNmQ2ZWExIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW51aiBNaXR0YWwgPGFudWoubWl0dGFsQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMiBKYW4gMjAxOCAxMjozNTozMiArMDgwMAorU3ViamVjdDogW1BBVENIXSBMaW51eDogYWRkIHN1cHBvcnQgZm9yIFgzMiBBQkkgY29tcGlsYXRpb24KKworWDMyIGZvbGxvd3MgSUxQMzIgbW9kZWwuIENoZWNrIGZvciBJTFAzMiBhcyB3ZWxsIHdoZW4gY2hlY2tpbmcgZm9yCit4ODZfNjQgdG8gZW5zdXJlIHRoZSBkZWZpbmVzIGFyZSBjb3JyZWN0IGZvciBYMzIgQUJJLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL2FjcGljYS9hY3BpY2EvcHVsbC8zNDhdCisKK1NpZ25lZC1vZmYtYnk6IEFudWogTWl0dGFsIDxhbnVqLm1pdHRhbEBpbnRlbC5jb20+CistLS0KKyBzb3VyY2UvaW5jbHVkZS9wbGF0Zm9ybS9hY2xpbnV4LmggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zb3VyY2UvaW5jbHVkZS9wbGF0Zm9ybS9hY2xpbnV4LmggYi9zb3VyY2UvaW5jbHVkZS9wbGF0Zm9ybS9hY2xpbnV4LmgKK2luZGV4IDc1YjFkODIuLjZiOGZmNzMgMTAwNjQ0CistLS0gYS9zb3VyY2UvaW5jbHVkZS9wbGF0Zm9ybS9hY2xpbnV4LmgKKysrKyBiL3NvdXJjZS9pbmNsdWRlL3BsYXRmb3JtL2FjbGludXguaAorQEAgLTMxNSw3ICszMTUsNyBAQAorICNkZWZpbmUgQUNQSV9GTFVTSF9DUFVfQ0FDSEUoKQorICNkZWZpbmUgQUNQSV9DQVNUX1BUSFJFQURfVChQdGhyZWFkKSAoKEFDUElfVEhSRUFEX0lEKSAoUHRocmVhZCkpCisgCistI2lmIGRlZmluZWQoX19pYTY0X18pICAgIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHxcCisrI2lmIGRlZmluZWQoX19pYTY0X18pICAgIHx8IChkZWZpbmVkKF9feDg2XzY0X18pICYmICFkZWZpbmVkKF9fSUxQMzJfXykpIHx8XAorICAgICBkZWZpbmVkKF9fYWFyY2g2NF9fKSB8fCBkZWZpbmVkKF9fUFBDNjRfXykgfHxcCisgICAgIGRlZmluZWQoX19zMzkweF9fKQorICNkZWZpbmUgQUNQSV9NQUNISU5FX1dJRFRIICAgICAgICAgIDY0CistLSAKKzIuNy40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYWNwaWNhL2ZpbGVzL21hbmlwdWxhdGUtZmRzLWluc3RlYWQtb2YtRklMRS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYWNwaWNhL2ZpbGVzL21hbmlwdWxhdGUtZmRzLWluc3RlYWQtb2YtRklMRS5wYXRjaAppbmRleCA2OTQ0YmI3Li41NjEwZWQ5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2FjcGljYS9maWxlcy9tYW5pcHVsYXRlLWZkcy1pbnN0ZWFkLW9mLUZJTEUucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hY3BpY2EvZmlsZXMvbWFuaXB1bGF0ZS1mZHMtaW5zdGVhZC1vZi1GSUxFLnBhdGNoCkBAIC0xLDYgKzEsNiBAQAotRnJvbSAzM2E1Nzk3OTczOGU1YWIxMzk1MGVjMWMwZTcyOThlNDFlZjUwOTI5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogUGF0cmljayBPaGx5IDxwYXRyaWNrLm9obHlAaW50ZWwuY29tPgotRGF0ZTogVGh1LCAyMyBGZWIgMjAxNyAxODoxMDo0NyArMDEwMAorRnJvbSA2OTE3MWMyMmYzODcyZWNiNGMxYWIyNzk4NWU5M2NhNDQwODQ1OTVlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmFuIFhpbiA8ZmFuLnhpbkBqcC5mdWppdHN1LmNvbT4KK0RhdGU6IE1vbiwgNSBKdW4gMjAxNyAxMzoyNjozOCArMDkwMAogU3ViamVjdDogW1BBVENIXSBhc2xmaWxlcy5jOiBtYW5pcHVsYXRlIGZkcyBpbnN0ZWFkIG9mIEZJTEUKIAogQ29weWluZyB3aGF0IHN0ZG91dC9zdGRlcnIgcG9pbnQgdG8gaXMgbm90IHBvcnRhYmxlIGFuZCBmYWlscyB3aXRoCkBAIC0xMiw2MCArMTIsNjEgQEAKIFVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCiAKIFNpZ25lZC1vZmYtYnk6IFBhdHJpY2sgT2hseSA8cGF0cmljay5vaGx5QGludGVsLmNvbT4KLS0tLQotIHNvdXJjZS9jb21waWxlci9hc2xmaWxlcy5jIHwgMjAgKysrKysrKysrKystLS0tLS0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKIAotZGlmZiAtLWdpdCBhL3NvdXJjZS9jb21waWxlci9hc2xmaWxlcy5jIGIvc291cmNlL2NvbXBpbGVyL2FzbGZpbGVzLmMKLWluZGV4IDk0N2U0NjUuLjdhMzUyYjQgMTAwNjQ0Ci0tLS0gYS9zb3VyY2UvY29tcGlsZXIvYXNsZmlsZXMuYwotKysrIGIvc291cmNlL2NvbXBpbGVyL2FzbGZpbGVzLmMKLUBAIC00NCw2ICs0NCwxMSBAQAorUmViYXNlIG9uIGFjcGljYSAyMDE3MDMwMworCitTaWduZWQtb2ZmLWJ5OiBGYW4gWGluIDxmYW4ueGluQGpwLmZ1aml0c3UuY29tPgorLS0tCisgYWNwaWNhLXVuaXgyLTIwMTcwMzAzL3NvdXJjZS9jb21waWxlci9hc2xmaWxlcy5jIHwgMTQgKysrKysrKysrKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2FjcGljYS11bml4Mi0yMDE3MDMwMy9zb3VyY2UvY29tcGlsZXIvYXNsZmlsZXMuYyBiL2FjcGljYS11bml4Mi0yMDE3MDMwMy9zb3VyY2UvY29tcGlsZXIvYXNsZmlsZXMuYworaW5kZXggODA5MDkwYy4uOTc4OThiMSAxMDA2NDQKKy0tLSBhL2FjcGljYS11bml4Mi0yMDE3MDMwMy9zb3VyY2UvY29tcGlsZXIvYXNsZmlsZXMuYworKysrIGIvYWNwaWNhLXVuaXgyLTIwMTcwMzAzL3NvdXJjZS9jb21waWxlci9hc2xmaWxlcy5jCitAQCAtNDQsNiArNDQsMTAgQEAKICAjaW5jbHVkZSAiYXNsY29tcGlsZXIuaCIKICAjaW5jbHVkZSAiYWNhcHBzLmgiCi0gCisgI2luY2x1ZGUgImR0Y29tcGlsZXIuaCIKICsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiArI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiArI2luY2x1ZGUgPGZjbnRsLmg+CiArI2luY2x1ZGUgPHVuaXN0ZC5oPgotKworIAogICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX0NPTVBJTEVSCiAgICAgICAgICBBQ1BJX01PRFVMRV9OQU1FICAgICgiYXNsZmlsZXMiKQotIAotQEAgLTU2OSw2ICs1NzQsOCBAQCBGbE9wZW5NaXNjT3V0cHV0RmlsZXMgKAorQEAgLTYwNyw2ICs2MTEsOCBAQCBGbE9wZW5NaXNjT3V0cHV0RmlsZXMgKAogIAogICAgICBpZiAoR2JsX0RlYnVnRmxhZykKICAgICAgewotKyAgICAgICAgaW50IGZkOworKwlpbnQgZmQ7CiArCiAgICAgICAgICBGaWxlbmFtZSA9IEZsR2VuZXJhdGVGaWxlbmFtZSAoRmlsZW5hbWVQcmVmaXgsIEZJTEVfU1VGRklYX0RFQlVHKTsKICAgICAgICAgIGlmICghRmlsZW5hbWUpCiAgICAgICAgICB7Ci1AQCAtNTgyLDIwICs1ODksMTUgQEAgRmxPcGVuTWlzY091dHB1dEZpbGVzICgKLSAgICAgICAgIC8qIFRCRDogaGlkZSB0aGlzIGJlaGluZCBhIEZsUmVvcGVuRmlsZSBmdW5jdGlvbiAqLworQEAgLTYxOCwxMCArNjI0LDEwIEBAIEZsT3Blbk1pc2NPdXRwdXRGaWxlcyAoCisgICAgICAgICAvKiBPcGVuIHRoZSBkZWJ1ZyBmaWxlIGFzIFNUREVSUiwgdGV4dCBtb2RlICovCiAgCiAgICAgICAgICBHYmxfRmlsZXNbQVNMX0ZJTEVfREVCVUdfT1VUUFVUXS5GaWxlbmFtZSA9IEZpbGVuYW1lOwogLSAgICAgICAgR2JsX0ZpbGVzW0FTTF9GSUxFX0RFQlVHX09VVFBVVF0uSGFuZGxlID0KIC0gICAgICAgICAgICBmcmVvcGVuIChGaWxlbmFtZSwgIncrdCIsIHN0ZGVycik7Ci0tCisgCiAtICAgICAgICBpZiAoIUdibF9GaWxlc1tBU0xfRklMRV9ERUJVR19PVVRQVVRdLkhhbmRsZSkKICsgICAgICAgIGZkID0gb3BlbihGaWxlbmFtZSwgT19DUkVBVHxPX1RSVU5DLCBTX0lSVVNSfFNfSVdVU1J8U19JUkdSUHxTX0lXR1JQfFNfSVJPVEh8U19JV09USCk7CiArICAgICAgICBpZiAoZmQgPCAwIHx8CiArICAgICAgICAgICAgZHVwMihmZCwgZmlsZW5vKHN0ZGVycikpKQogICAgICAgICAgewotLSAgICAgICAgICAgIC8qCi0tICAgICAgICAgICAgICogQSBwcm9ibGVtIHdpdGggZnJlb3BlbiBpcyB0aGF0IG9uIGVycm9yLAotLSAgICAgICAgICAgICAqIHdlIG5vIGxvbmdlciBoYXZlIHN0ZGVyci4KLS0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICBHYmxfRGVidWdGbGFnID0gRkFMU0U7Ci0tICAgICAgICAgICAgbWVtY3B5IChzdGRlcnIsIHN0ZG91dCwgc2l6ZW9mIChGSUxFKSk7Ci0gICAgICAgICAgICAgRmxGaWxlRXJyb3IgKEFTTF9GSUxFX0RFQlVHX09VVFBVVCwgQVNMX01TR19ERUJVR19GSUxFTkFNRSk7Ci0gICAgICAgICAgICAgQXNsQWJvcnQgKCk7CisgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgKiBBIHByb2JsZW0gd2l0aCBmcmVvcGVuIGlzIHRoYXQgb24gZXJyb3IsIHdlIG5vIGxvbmdlcgorQEAgLTYzNSw2ICs2NDEsOCBAQCBGbE9wZW5NaXNjT3V0cHV0RmlsZXMgKAorICAgICAgICAgICAgIGV4aXQgKDEpOwogICAgICAgICAgfQotKyAgICAgICAgR2JsX0ZpbGVzW0FTTF9GSUxFX0RFQlVHX09VVFBVVF0uSGFuZGxlID0gc3RkZXJyOwogIAorKyAgICAgICAgR2JsX0ZpbGVzW0FTTF9GSUxFX0RFQlVHX09VVFBVVF0uSGFuZGxlID0gc3RkZXJyOworKwogICAgICAgICAgQXNsQ29tcGlsZXJTaWdub24gKEFTTF9GSUxFX0RFQlVHX09VVFBVVCk7CiAgICAgICAgICBBc2xDb21waWxlckZpbGVIZWFkZXIgKEFTTF9GSUxFX0RFQlVHX09VVFBVVCk7CisgICAgIH0KIC0tIAotMi4xLjQKKzEuOS4xCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYWNwaWNhL2ZpbGVzL25vLXdlcnJvci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYWNwaWNhL2ZpbGVzL25vLXdlcnJvci5wYXRjaAppbmRleCA1ZDI4ZjQ3Li5hNmU3YjU0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2FjcGljYS9maWxlcy9uby13ZXJyb3IucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hY3BpY2EvZmlsZXMvbm8td2Vycm9yLnBhdGNoCkBAIC0xLDcgKzEsNyBAQAogRGVzY3JpcHRpb246IHJlbW92ZSAtV2Vycm9yIGZsYWcKIEZvcndhcmRlZDogbm90LW5lZWRlZAogQXV0aG9yOiBGYXRoaSBCb3VkcmEgPGZhdGhpLmJvdWRyYUBsaW5hcm8ub3JnPgotCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIC0tLQogIGdlbmVyYXRlL3VuaXgvaWFzbC9NYWtlZmlsZSB8ICAgMTIgKysrKysrLS0tLS0tCiAgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXNjaWlkb2MvYXNjaWlkb2NfOC42LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2FzY2lpZG9jL2FzY2lpZG9jXzguNi45LmJiCmluZGV4IDFjZDE0NTQuLjM4MTY0ZDUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXNjaWlkb2MvYXNjaWlkb2NfOC42LjkuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hc2NpaWRvYy9hc2NpaWRvY184LjYuOS5iYgpAQCAtMTQsNyArMTQsNyBAQAogCiBVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvYXNjaWlkb2MvZmlsZXMvIgogCi1pbmhlcml0IGRpc3R1dGlscyBhdXRvdG9vbHMtYnJva2Vuc2VwCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKIAogZXhwb3J0IERFU1RESVIgPSAiJHtEfSIKIERFUEVORFNfY2xhc3MtbmF0aXZlID0gImRvY2Jvb2steG1sLWR0ZDQtbmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC8wMDAxLXJlbW92ZS1nbGliYy1hc3N1bXB0aW9uLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC8wMDAxLXJlbW92ZS1nbGliYy1hc3N1bXB0aW9uLnBhdGNoCmluZGV4IDUzYWUyOGIuLjdmZGVjYzcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvMDAwMS1yZW1vdmUtZ2xpYmMtYXNzdW1wdGlvbi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0LzAwMDEtcmVtb3ZlLWdsaWJjLWFzc3VtcHRpb24ucGF0Y2gKQEAgLTEsNiArMSw2IEBACi1Gcm9tIDdmODExZDljNGViYzk0NDRlNjEzZTI1MWMzMWQ2YmY1MzdhMjRkYzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNjozNTozMCAtMDcwMAorRnJvbSBmNDQ2Njg2OTE2ZTUwM2RmYjlmYjkyODI1MmQxYjcyYTA3NTczYjI5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTggSnVsIDIwMTcgMDM6NDI6NTYgLTA0MDAKIFN1YmplY3Q6IFtQQVRDSF0gcmVtb3ZlIGdsaWJjIGFzc3VtcHRpb24KIAogZ2xpYmMgdGltZS5oIGhlYWRlciBoYXMgYW4gdW5kb2N1bWVudGVkIF9faXNsZWFwIG1hY3JvCkBAIC05LDkgKzksMTEgQEAKIG9uIGFueSBvdGhlciBsaWJjLCBzdG9wIHVzaW5nIGl0IGFuZCBqdXN0IGRlZmluZSB0aGUgbWFjcm8gaW4KIGxvY2FsbHkgIGluc3RlYWQuCiAKLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgWyBodHRwczovL2xpc3RzLmRlYmlhbi5vcmcvZGViaWFuLWFjY2Vzc2liaWxpdHkvMjAxNy8wNy9tc2cwMDA0NC5odG1sIF0KIAogU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworU2lnbmVkLW9mZi1ieTogRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4KIC0tLQogIHBhcnNldGltZS55IHwgMTEgKysrKysrKy0tLS0KICAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQpAQCAtNTMsNSArNTUsNSBAQAogIAkJCXsKICAJCQkgICAgeXllcnJvcigiRXJyb3IgaW4gZGF5IG9mIG1vbnRoIik7CiAtLSAKLTIuMS40CisyLjguMQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0XzMuMS4yMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXRfMy4xLjIwLmJiCmluZGV4IDkwNDg5OWYuLjliNTM3ZWUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXRfMy4xLjIwLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXRfMy4xLjIwLmJiCkBAIC0xLDQgKzEsNSBAQAogU1VNTUFSWSA9ICJEZWxheWVkIGpvYiBleGVjdXRpb24gYW5kIGJhdGNoIHByb2Nlc3NpbmciCitIT01FUEFHRSA9ICJodHRwOi8vYmxvZy5jYWxoYXJpei5jb20vIgogREVTQ1JJUFRJT04gPSAiQXQgYWxsb3dzIGZvciBjb21tYW5kcyB0byBiZSBydW4gYXQgYSBwYXJ0aWN1bGFyIHRpbWUuICBCYXRjaCB3aWxsIGV4ZWN1dGUgY29tbWFuZHMgd2hlbiBcCiB0aGUgc3lzdGVtIGxvYWQgbGV2ZWxzIGRyb3AgdG8gYSBwYXJ0aWN1bGFyIGxldmVsLiIKIFNFQ1RJT04gPSAiYmFzZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLmluYwppbmRleCAzZTljNjYyLi5mNGUxZjdhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2guaW5jCkBAIC0yNSw5ICsyNSwxNCBAQAogUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlc2RrID0gIiIKIFJERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlIgogCitERVBFTkRTX2FwcGVuZF9saWJjLWdsaWJjID0gIiBnbGliYy1sb2NhbGUiCitSREVQRU5EU18ke1BOfS1wdGVzdF9hcHBlbmRfbGliYy1nbGliYyA9ICIgbG9jYWxlLWJhc2UtZnItZnIgbG9jYWxlLWJhc2UtZGUtZGUiCisKIFVTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0tcHRlc3QiCiBVU0VSQUREX1BBUkFNXyR7UE59LXB0ZXN0ID0gIi0tY3JlYXRlLWhvbWUgLS11c2VyLWdyb3VwIHRlc3QiCiAKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJoZWFkZXJzZGlyPSR7aW5jbHVkZWRpcn0vJHtQTn0iCisKIGRvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKIAlpZiBbICEgLWUgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgogCQljYXQgJHtTfS9hY2xvY2FsLm00ID4gJHtTfS9hY2luY2x1ZGUubTQKQEAgLTQ2LDE2ICs1MSwzMiBAQAogCWZpCiB9CiBkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQgKCkgewotCSMgQ2xlYW4gaG9zdCBwYXRoIGluIGJhc2hidWcKKwkjIENsZWFuIGJ1aWxkaG9zdCByZWZlcmVuY2VzIGluIGJhc2hidWcKIAlzZWQgLWkgLWUgInMsLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSwsZyIgXAotCQktZSAicywtSSR7V09SS0RJUn0vXFMqICwsZyIgJHtEfSR7YmluZGlyfS9iYXNoYnVnCisJCS1lICJzLC1JJHtXT1JLRElSfS9cUyogLCxnIiBcCisJCS1lICdzfCR7REVCVUdfUFJFRklYX01BUH18fGcnIFwKKwkJJHtEfSR7YmluZGlyfS9iYXNoYnVnCisKKwkjIENsZWFuIGJ1aWxkaG9zdCByZWZlcmVuY2VzIGluIGJhc2gucGMKKwlzZWQgLWkgLWUgInMsLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSwsZyIgXAorCSAgICAgJHtEfSR7bGliZGlyfS9wa2djb25maWcvYmFzaC5wYworCisJIyBDbGVhbiBidWlsZGhvc3QgcmVmZXJlbmNlcyBpbiBNYWtlZmlsZS5pbmMKKwlzZWQgLWkgLWUgInMsLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSwsZyIgXAorCQktZSAnc3wke0RFQlVHX1BSRUZJWF9NQVB9fHxnJyBcCisJCS1lICdzOiR7SE9TVFRPT0xTX0RJUn0vOjpnJyBcCisJCS1lICdzOiR7QkFTRV9XT1JLRElSfS8ke01VTFRJTUFDSF9UQVJHRVRfU1lTfTo6ZycgXAorCQkke0R9JHtsaWJkaXJ9L2Jhc2gvTWFrZWZpbGUuaW5jCiB9CiAKIGRvX2luc3RhbGxfcHRlc3QgKCkgewogCW1ha2UgSU5TVEFMTF9URVNUX0RJUj0ke0R9JHtQVEVTVF9QQVRIfS90ZXN0cyBpbnN0YWxsLXRlc3QKIAljcCAke0J9L01ha2VmaWxlICR7RH0ke1BURVNUX1BBVEh9CiAgICAgICAgIHNlZCAtaSAtZSAncy9eTWFrZWZpbGUvX01ha2VmaWxlLycgLWUgInMsLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSwsZyIgXAotCSAgICAtZSAicywke1N9LCxnIiAtZSAicywke0J9LCxnIiAtZSAicywke1NUQUdJTkdfRElSX05BVElWRX0sLGciICR7RH0ke1BURVNUX1BBVEh9L01ha2VmaWxlCisJICAgIC1lICdzfCR7REVCVUdfUFJFRklYX01BUH18fGcnIFwKKwkgICAgLWUgInMsJHtTfSwsZyIgLWUgInMsJHtCfSwsZyIgLWUgInMsJHtTVEFHSU5HX0RJUl9OQVRJVkV9LCxnIiBcCisJICAgIC1lICdzOiR7SE9TVFRPT0xTX0RJUn0vOjpnJyBcCisJICAgICAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQogfQogCiBwa2dfcG9zdGluc3RfJHtQTn0gKCkgewpAQCAtNjksMyArOTAsOSBAQAogUEFDS0FHRVMgKz0gIiR7UE59LWJhc2hidWciCiBGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vYmFzaCAke2Jhc2VfYmluZGlyfS9iYXNoLmJhc2giCiBGSUxFU18ke1BOfS1iYXNoYnVnID0gIiR7YmluZGlyfS9iYXNoYnVnIgorCitQQUNLQUdFX0JFRk9SRV9QTiArPSAiJHtQTn0tbG9hZGFibGUiCitSREVQRU5EU18ke1BOfS1sb2FkYWJsZSArPSAiJHtQTn0iCitGSUxFU18ke1BOfS1sb2FkYWJsZSArPSAiJHtsaWJkaXJ9L2Jhc2gvKiIKKworUlBST1ZJREVTXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3Vzcm1lcmdlJywgJy9iaW4vc2ggL2Jpbi9iYXNoJywgJycsIGQpfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL0NWRS0yMDE2LTk0MDEucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9DVkUtMjAxNi05NDAxLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGM5Mjc3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL0NWRS0yMDE2LTk0MDEucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi1Gcm9tIGZhNzQxNzcxZWQ0N2IzMDU0N2JlNjNiNWI1ZGJmYjUxOTc3YWNhMTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBDaGV0IFJhbWV5IDxjaGV0LnJhbWV5QGNhc2UuZWR1PgotRGF0ZTogRnJpLCAyMCBKYW4gMjAxNyAxMTo0NzozMSAtMDUwMAotU3ViamVjdDogW1BBVENIXSBCYXNoLTQuNCBwYXRjaCA2Ci0KLUJ1Zy1SZWZlcmVuY2UtVVJMOgotaHR0cHM6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctYmFzaC8yMDE2LTExL21zZzAwMTE2Lmh0bWwKLQotUmVmZXJlbmNlIHRvIHVwc3RyZWFtIHBhdGNoOgotaHR0cHM6Ly9mdHAuZ251Lm9yZy9wdWIvZ251L2Jhc2gvYmFzaC00LjQtcGF0Y2hlcy9iYXNoNDQtMDA2Ci0KLUJ1Zy1EZXNjcmlwdGlvbjoKLU91dC1vZi1yYW5nZSBuZWdhdGl2ZSBvZmZzZXRzIHRvIHBvcGQgY2FuIGNhdXNlIHRoZSBzaGVsbCB0byBjcmFzaCBhdHRlbXB0aW5nCi10byBmcmVlIGFuIGludmFsaWQgbWVtb3J5IGJsb2NrLgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1DVkU6IENWRS0yMDE2LTk0MDEKLVNpZ25lZC1vZmYtYnk6IExpIFpob3UgPGxpLnpob3VAd2luZHJpdmVyLmNvbT4KLS0tLQotIGJ1aWx0aW5zL3B1c2hkLmRlZiB8IDcgKysrKysrLQotIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2J1aWx0aW5zL3B1c2hkLmRlZiBiL2J1aWx0aW5zL3B1c2hkLmRlZgotaW5kZXggOWM2NTQ4Zi4uOGExM2JhZSAxMDA2NDQKLS0tLSBhL2J1aWx0aW5zL3B1c2hkLmRlZgotKysrIGIvYnVpbHRpbnMvcHVzaGQuZGVmCi1AQCAtMzU5LDcgKzM1OSw3IEBAIHBvcGRfYnVpbHRpbiAobGlzdCkKLSAJYnJlYWs7Ci0gICAgIH0KLSAKLS0gIGlmICh3aGljaCA+IGRpcmVjdG9yeV9saXN0X29mZnNldCB8fCAoZGlyZWN0b3J5X2xpc3Rfb2Zmc2V0ID09IDAgJiYgd2hpY2ggPT0gMCkpCi0rICBpZiAod2hpY2ggPiBkaXJlY3RvcnlfbGlzdF9vZmZzZXQgfHwgKHdoaWNoIDwgLWRpcmVjdG9yeV9saXN0X29mZnNldCkgfHwgKGRpcmVjdG9yeV9saXN0X29mZnNldCA9PSAwICYmIHdoaWNoID09IDApKQotICAgICB7Ci0gICAgICAgcHVzaGRfZXJyb3IgKGRpcmVjdG9yeV9saXN0X29mZnNldCwgd2hpY2hfd29yZCA/IHdoaWNoX3dvcmQgOiAiIik7Ci0gICAgICAgcmV0dXJuIChFWEVDVVRJT05fRkFJTFVSRSk7Ci1AQCAtMzgxLDYgKzM4MSwxMSBAQCBwb3BkX2J1aWx0aW4gKGxpc3QpCi0gCSByZW1vdmUgdGhhdCBkaXJlY3RvcnkgZnJvbSB0aGUgbGlzdCBhbmQgc2hpZnQgdGhlIHJlbWFpbmRlcgotIAkgb2YgdGhlIGxpc3QgaW50byBwbGFjZS4gKi8KLSAgICAgICBpID0gKGRpcmVjdGlvbiA9PSAnKycpID8gZGlyZWN0b3J5X2xpc3Rfb2Zmc2V0IC0gd2hpY2ggOiB3aGljaDsKLSsgICAgICBpZiAoaSA8IDAgfHwgaSA+IGRpcmVjdG9yeV9saXN0X29mZnNldCkKLSsJewotKwkgIHB1c2hkX2Vycm9yIChkaXJlY3RvcnlfbGlzdF9vZmZzZXQsIHdoaWNoX3dvcmQgPyB3aGljaF93b3JkIDogIiIpOwotKwkgIHJldHVybiAoRVhFQ1VUSU9OX0ZBSUxVUkUpOwotKwl9Ci0gICAgICAgZnJlZSAocHVzaGRfZGlyZWN0b3J5X2xpc3RbaV0pOwotICAgICAgIGRpcmVjdG9yeV9saXN0X29mZnNldC0tOwotIAotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9maXgtcnVuLWNvcHJvYy1ydW4taGVyZWRvYy1ydW4tZXhlY3NjcmlwdC1ydW4tdGVzdC1mLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvZml4LXJ1bi1jb3Byb2MtcnVuLWhlcmVkb2MtcnVuLWV4ZWNzY3JpcHQtcnVuLXRlc3QtZi5wYXRjaAppbmRleCA3ZjA5OWFlLi45YWMyNDYxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9maXgtcnVuLWNvcHJvYy1ydW4taGVyZWRvYy1ydW4tZXhlY3NjcmlwdC1ydW4tdGVzdC1mLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL2ZpeC1ydW4tY29wcm9jLXJ1bi1oZXJlZG9jLXJ1bi1leGVjc2NyaXB0LXJ1bi10ZXN0LWYucGF0Y2gKQEAgLTEsMTUgKzEsNyBAQAotRnJvbSAyYzMwZGZmOGVhOGIxN2FkNWJhOTg4MWUzNWFkMWViYTljNTE1ZjEzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSBkMWNkNGMzMWVhMGVkNzQwNmEzYWQ0YmRhYTIxMWY1ODEwNjNmNjU1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotRGF0ZTogVGh1LCAyNiBOb3YgMjAxNSAyMjowOTowNyAtMDUwMAotU3ViamVjdDogW1BBVENIXSBmaXggcnVuLWNvcHJvYy9ydW4taGVyZWRvYy9ydW4tZXhlY3NjcmlwdC9ydW4tdGVzdC8gZmFpbGVkCi0KLUZBSUw6IHJ1bi1jb3Byb2MKLXVwZGF0ZSB0ZXN0IGNhc2U6dGVzdHMvY29wcm9jLnJpZ2h0LCB0ZXN0cy9jb3Byb2MudGVzdHMKLWdpdDovL2dpdC5zdi5nbnUub3JnL2Jhc2guZ2l0IGJhc2gtNC40LXRlc3RpbmcKLQotRkFJTDogcnVuLWhlcmVkb2MKLXVwZGF0ZSB0ZXN0IGNhc2U6IHRlc3RzL2hlcmVkb2MucmlnaHQgdGVzdHMvaGVyZWRvYzMuc3ViCi1naXQ6Ly9naXQuc3YuZ251Lm9yZy9iYXNoLmdpdCBiYXNoLTQuNC10ZXN0aW5nCitEYXRlOiBUdWUsIDE1IEF1ZyAyMDE3IDEwOjIxOjIxICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBmaXggcnVuLWV4ZWNzY3JpcHQvcnVuLXRlc3QvIGZhaWxlZAogCiBGQUlMOiBydW4tZXhlY3NjcmlwdDoKIHRoZSB0ZXN0IHN1aXRlIHNob3VsZCBub3QgYmUgcnVuIGFzIHJvb3QKQEAgLTIxLDE0OSArMTMsMzMgQEAKIAogU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgogLS0tCi0gdGVzdHMvY29wcm9jLnJpZ2h0ICAgfCAgNSArLS0tLQotIHRlc3RzL2NvcHJvYy50ZXN0cyAgIHwgMzAgKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tCi0gdGVzdHMvaGVyZWRvYy5yaWdodCAgfCAgNSArKy0tLQotIHRlc3RzL2hlcmVkb2MzLnN1YiAgIHwgIDMgKystCi0gdGVzdHMvcnVuLWV4ZWNzY3JpcHQgfCAgMyArKy0KLSB0ZXN0cy9ydW4tdGVzdCAgICAgICB8ICAzICsrLQotIDYgZmlsZXMgY2hhbmdlZCwgMzQgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCisgdGVzdHMvcnVuLWV4ZWNzY3JpcHQgfCAzICsrLQorIHRlc3RzL3J1bi10ZXN0ICAgICAgIHwgMyArKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIAotZGlmZiAtLWdpdCBhL3Rlc3RzL2NvcHJvYy5yaWdodCBiL3Rlc3RzL2NvcHJvYy5yaWdodAotaW5kZXggNmQ5ZGVhYS4uOTRiMDAxYyAxMDA2NDQKLS0tLSBhL3Rlc3RzL2NvcHJvYy5yaWdodAotKysrIGIvdGVzdHMvY29wcm9jLnJpZ2h0Ci1AQCAtMSwxMSArMSw4IEBACi0tODQ1NzUKLSA2MyA2MAotIGEgYiBjCi0tODQ1NzcKLSA2MyA2MAotIGZsb3AKLS0uL2NvcHJvYy50ZXN0czogbGluZSAyMjogODQ1NzcgVGVybWluYXRlZCAgICAgICAgICAgICAgY29wcm9jIFJFRkxFQ1QgeyBjYXQgLTsgfQotLTg0NTc5Ci0rY29wcm9jLnRlc3RzOiBSRUZMRUNUOiBzdGF0dXMgMTQzCi0gNjMgNjAKLSBGT08KLSA2MyA2MAotZGlmZiAtLWdpdCBhL3Rlc3RzL2NvcHJvYy50ZXN0cyBiL3Rlc3RzL2NvcHJvYy50ZXN0cwotaW5kZXggOGJlMzU2My4uZDM0N2ViNyAxMDA2NDQKLS0tLSBhL3Rlc3RzL2NvcHJvYy50ZXN0cwotKysrIGIvdGVzdHMvY29wcm9jLnRlc3RzCi1AQCAtMSw2ICsxLDEzIEBACi0rOiAke1RNUERJUjo9L3RtcH0KLStUTVBPVVQ9JHtUTVBESVJ9L2NvcHJvYy13YWl0LSRCQVNIUElECi0rCi0gY29wcm9jIHsgZWNobyBhIGIgYzsgc2xlZXAgMjsgfQotIAotLWVjaG8gJENPUFJPQ19QSUQKLStjYXNlICRDT1BST0NfUElEIGluCi0rWzAtOV0qKQk7OwotKyopCWVjaG8gQ09QUk9DX1BJRCBub3QgaW50ZWdlciA7OwotK2VzYWMKLSsKLSBlY2hvICR7Q09QUk9DW0BdfQotIAotIHJlYWQgTElORSA8JiR7Q09QUk9DWzBdfQotQEAgLTEwLDcgKzE3LDExIEBAIHdhaXQgJENPUFJPQ19QSUQKLSAKLSBjb3Byb2MgUkVGTEVDVCB7IGNhdCAtIDsgfQotIAotLWVjaG8gJFJFRkxFQ1RfUElECi0rY2FzZSAkUkVGTEVDVF9QSUQgaW4KLStbMC05XSopCTs7Ci0rKikJZWNobyBSRUZMRUNUX1BJRCBub3QgaW50ZWdlciA7OwotK2VzYWMKLSsKLSBlY2hvICR7UkVGTEVDVFtAXX0KLSAKLSBlY2hvIGZsb3AgPiYke1JFRkxFQ1RbMV19Ci1AQCAtMTgsMTIgKzI5LDIxIEBAIHJlYWQgTElORSA8JiR7UkVGTEVDVFswXX0KLSAKLSBlY2hvICRMSU5FCi0gCi0ta2lsbCAkUkVGTEVDVF9QSUQKLS13YWl0ICRSRUZMRUNUX1BJRAotK3sgc2xlZXAgMTsga2lsbCAkUkVGTEVDVF9QSUQ7IH0gJgotK3dhaXQgJFJFRkxFQ1RfUElEID4kVE1QT1VUIDI+JjEgfHwgZWNobyAiY29wcm9jLnRlc3RzOiBSRUZMRUNUOiBzdGF0dXMgJD8iCi0rZ3JlcCAnVGVybWluYXRlZC4qY29wcm9jLipSRUZMRUNUJyA8ICRUTVBPVVQgPi9kZXYvbnVsbCAyPiYxIHx8IHsKLSsJZWNobyAiY29wcm9jLnRlc3RzOiB3YWl0IGZvciBSRUZMRUNUIGZhaWxlZCIgPiYyCi0rfQotK3JtIC1mICRUTVBPVVQKLStleGVjIDI+JjEKLSAKLSBjb3Byb2MgeGNhc2UgLW4gLXUKLSAKLS1lY2hvICRDT1BST0NfUElECi0rY2FzZSAkQ09QUk9DX1BJRCBpbgotK1swLTldKikJOzsKLSsqKQllY2hvIENPUFJPQ19QSUQgbm90IGludGVnZXIgOzsKLStlc2FjCi0rCi0gZWNobyAke0NPUFJPQ1tAXX0KLSAKLSBlY2hvIGZvbyA+JiR7Q09QUk9DWzFdfQotZGlmZiAtLWdpdCBhL3Rlc3RzL2hlcmVkb2MucmlnaHQgYi90ZXN0cy9oZXJlZG9jLnJpZ2h0Ci1pbmRleCA2YWJhYTFmLi44ZGY5MWM1IDEwMDY0NAotLS0tIGEvdGVzdHMvaGVyZWRvYy5yaWdodAotKysrIGIvdGVzdHMvaGVyZWRvYy5yaWdodAotQEAgLTc2LDE1ICs3NiwxNCBAQCBFTkRFTkQKLSBlbmQgRU5ERU5ECi0gaGVsbG8KLSBlbmQgaGVsbG8KLS14IHN0YXIgeAotIGVuZCB4KngKLSBoZWxsb0VORAotIGVuZCBoZWxsb0VORAotIGhlbGxvCi0gXEVORAotIGVuZCBoZWxsbzxOTD5cRU5ECi0tLi9oZXJlZG9jMy5zdWI6IGxpbmUgNzQ6IHdhcm5pbmc6IGhlcmUtZG9jdW1lbnQgYXQgbGluZSA3MiBkZWxpbWl0ZWQgYnkgZW5kLW9mLWZpbGUgKHdhbnRlZCBgRU9GJykKLS0uL2hlcmVkb2MzLnN1YjogbGluZSA3NTogc3ludGF4IGVycm9yOiB1bmV4cGVjdGVkIGVuZCBvZiBmaWxlCi0rLi9oZXJlZG9jMy5zdWI6IGxpbmUgNzU6IHdhcm5pbmc6IGhlcmUtZG9jdW1lbnQgYXQgbGluZSA3MyBkZWxpbWl0ZWQgYnkgZW5kLW9mLWZpbGUgKHdhbnRlZCBgRU9GJykKLSsuL2hlcmVkb2MzLnN1YjogbGluZSA3Njogc3ludGF4IGVycm9yOiB1bmV4cGVjdGVkIGVuZCBvZiBmaWxlCi0gY29tc3ViIGhlcmUtc3RyaW5nCi0gLi9oZXJlZG9jLnRlc3RzOiBsaW5lIDEwNTogd2FybmluZzogaGVyZS1kb2N1bWVudCBhdCBsaW5lIDEwMyBkZWxpbWl0ZWQgYnkgZW5kLW9mLWZpbGUgKHdhbnRlZCBgRU9GJykKLSBoaQotZGlmZiAtLWdpdCBhL3Rlc3RzL2hlcmVkb2MzLnN1YiBiL3Rlc3RzL2hlcmVkb2MzLnN1YgotaW5kZXggNzNhMTExZS4uOWQzZDg0NiAxMDA2NDQKLS0tLSBhL3Rlc3RzL2hlcmVkb2MzLnN1YgotKysrIGIvdGVzdHMvaGVyZWRvYzMuc3ViCi1AQCAtNDksOSArNDksMTAgQEAgaGVsbG8KLSAgICAgRU5EICAgIAotIGVjaG8gZW5kIGhlbGxvCi0gCi0tY2F0IDw8eCp4ICYgdG91Y2ggJ3gqeCcKLStjYXQgPDx4KnggPi9kZXYvbnVsbCAmIHRvdWNoICd4KngnCi0geCBzdGFyIHgKLSB4KngKLSt3YWl0ICQhCi0gZWNobyBlbmQgJ3gqeCcKLSBybSAneCp4JwotIAogZGlmZiAtLWdpdCBhL3Rlc3RzL3J1bi1leGVjc2NyaXB0IGIvdGVzdHMvcnVuLWV4ZWNzY3JpcHQKLWluZGV4IGY5N2FiMjEuLjBkMDBhMWIgMTAwNjQ0CitpbmRleCBkZTc4NjQ0Li4zODM5N2MxIDEwMDY0NAogLS0tIGEvdGVzdHMvcnVuLWV4ZWNzY3JpcHQKICsrKyBiL3Rlc3RzL3J1bi1leGVjc2NyaXB0CiBAQCAtNSw1ICs1LDYgQEAgZWNobyAid2FybmluZzogXGAvdG1wL2Jhc2gtbm90dGhlcmUnIG5vdCBiZWluZyBmb3VuZCBvciBcYC8nIGJlaW5nIGEgZGlyZWN0b3J5IgogIGVjaG8gIndhcm5pbmc6IHByb2R1Y2UgZGlmZiBvdXRwdXQsIHBsZWFzZSBkbyBub3QgY29uc2lkZXIgdGhpcyBhIHRlc3QgZmFpbHVyZSIgPiYyCiAgZWNobyAid2FybmluZzogaWYgZGlmZiBvdXRwdXQgZGlmZmVyaW5nIG9ubHkgaW4gdGhlIGxvY2F0aW9uIG9mIHRoZSBiYXNoIiA+JjIKICBlY2hvICJ3YXJuaW5nOiBiaW5hcnkgYXBwZWFycywgcGxlYXNlIGRvIG5vdCBjb25zaWRlciB0aGlzIGEgdGVzdCBmYWlsdXJlIiA+JjIKLS0ke1RISVNfU0h9IC4vZXhlY3NjcmlwdCA+IC90bXAveHggMj4mMQotK3JtIC1mIC90bXAveHgKLStzdSAtYyAiJHtUSElTX1NIfSAuL2V4ZWNzY3JpcHQgPiAvdG1wL3h4IDI+JjEiIHRlc3QKLSBkaWZmIC90bXAveHggZXhlYy5yaWdodCAmJiBybSAtZiAvdG1wL3h4CistJHtUSElTX1NIfSAuL2V4ZWNzY3JpcHQgPiAke0JBU0hfVFNUT1VUfSAyPiYxCisrcm0gLWYgJHtCQVNIX1RTVE9VVH0KKytzdSAtYyAiJHtUSElTX1NIfSAuL2V4ZWNzY3JpcHQgPiAke0JBU0hfVFNUT1VUfSAyPiYxIiB0ZXN0CisgZGlmZiAke0JBU0hfVFNUT1VUfSBleGVjLnJpZ2h0ICYmIHJtIC1mICR7QkFTSF9UU1RPVVR9CiBkaWZmIC0tZ2l0IGEvdGVzdHMvcnVuLXRlc3QgYi90ZXN0cy9ydW4tdGVzdAotaW5kZXggYjI0ODJjMy4uMmU4ZjA0OSAxMDA2NDQKK2luZGV4IGQ2ODc5MWMuLmQ2MzE3ZDIgMTAwNjQ0CiAtLS0gYS90ZXN0cy9ydW4tdGVzdAogKysrIGIvdGVzdHMvcnVuLXRlc3QKIEBAIC0xLDQgKzEsNSBAQAogIHVuc2V0IEdST1VQUyBVSUQgMj4vZGV2L251bGwKICAKLS0ke1RISVNfU0h9IC4vdGVzdC50ZXN0cyA+L3RtcC94eCAyPiYxCi0rcm0gLWYgL3RtcC94eAotK3N1IC1jICIke1RISVNfU0h9IC4vdGVzdC50ZXN0cyA+L3RtcC94eCAyPiYxIiB0ZXN0Ci0gZGlmZiAvdG1wL3h4IHRlc3QucmlnaHQgJiYgcm0gLWYgL3RtcC94eAorLSR7VEhJU19TSH0gLi90ZXN0LnRlc3RzID4ke0JBU0hfVFNUT1VUfSAyPiYxCisrcm0gLWYgJHtCQVNIX1RTVE9VVH0KKytzdSAtYyAiJHtUSElTX1NIfSAuL3Rlc3QudGVzdHMgPiAke0JBU0hfVFNUT1VUfSAyPiYxIiB0ZXN0CisgZGlmZiAke0JBU0hfVFNUT1VUfSB0ZXN0LnJpZ2h0ICYmIHJtIC1mICR7QkFTSF9UU1RPVVR9CiAtLSAKLTEuOS4xCisxLjguMy4xCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL2ZpeC1ydW4taW50bC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL2ZpeC1ydW4taW50bC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRhMzQwOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9maXgtcnVuLWludGwucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotRnJvbSBhMDBkMzE2MWZkN2I2YTY5OGJkZDJlZDVmMGFjNWZhYWM1ODBlZTJhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4KLURhdGU6IFdlZCwgMyBBdWcgMjAxNiAyMzoxMzowMCAtMDQwMAotU3ViamVjdDogW1BBVENIXSBmaXggcnVuLWludGwgZmFpbGVkCi0KLTEuIEZpbHRlciBleHRyYSB3aGl0ZSBzcGFjZSBvZiBpbnRsLnJpZ2h0Ci0KLSAgIER1ZSB0byB0aGUgZXh0cmEgd2hpdGUgc3BhY2Ugb2YgaW50bC5yaWdodCwgd2hlbiB0aGUgcmVzdWx0IG9mCi0gICBzdWItdGVzdCB1bmljb2RlMi5zdWIgb2YgaW50bC50ZXN0cyBjb21wYXJlZCB0byBpdCwgdGhlIHRlc3QKLSAgIGZhaWxlZC4KLQotICAgU28gd2UgbmVlZCB0byBmaWx0ZXIgdGhlIGV4dHJhIHdoaXRlIHNwYWNlIG9mIGludGwucmlnaHQuCi0KLSAgIEltcG9ydCB0aGlzIHBhdGNoIGZvciBpbnRsLnJpZ2h0IGZyb20gYmFzaCBkZXZlbCBicmFuY2g6Ci0KLQlodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvY2dpdC9iYXNoLmdpdC9sb2cvP2g9ZGV2ZWwKLQotICAgY29tbWl0IGlzOgotCi0JODVlYzA3NzhmOWQ3NzhlMTgyMGZiOGMwZTNlOTk2ZjJkMTEwM2I0NQotCi0yLiBDaGFuZ2UgaW50bC5yaWdodCBjb3JyZXNwb25kIHRvIHRoZSB1bmljb2RlMy5zdWIncyBvdXRwdXQKLQotICAgSW4gc3ViLXRlc3QgdW5pY29kZTMuc3ViIG9mIGludGwudGVzdHMsIHRoZSBwYXlsb2FkIHZhbHVlIGlzOgotCi0JcGF5bG9hZD0kJ1wwNjVcMjQ3XDEwMFwwNjNcMjMxXDA1M1wzMDZcMTIzXDA3MFwyMzdcMjQyXDM1MlwyNjMnCi0KLSAgIEl0IHVzZWQgcXVvdGVkIHN0cmluZyBleHBhbnNpb24oZXNjYXBlZCBvY3RhbCkgdG8gYXNzaWduIEFTQ0lJCi0gICBjaGFyYWN0ZXJzIHRvIHZhcmlhYmxlcy4gU28gd2hlbiB0aGUgdGVzdCBydW4gdGhlIGZvbGxvd2luZzoKLQotCXByaW50ZiAlcSAiJHBheWxvYWQiCi0KLSAgIEl0IHByb2R1Y2VkOgotCi0JJCc1XDI0N0AzXDIzMStcMzA2UzhcMjM3XDI0MlwzNTJcMjYzJwotCi0gICBXaGVuIGNvbXBhcmVkIHRvIHRoZSBpbnRsLnJpZ2h0KGNvbnRhaW4gdGhlIGNvbnZlcnRlZCBjaGFyYWN0ZXIpLCBpdCBmYWlsZWQuCi0KLSAgIEltcG9ydCBwYXJ0cyBvZiBwYXRjaCBmb3IgaW50bC5yaWdodCBmcm9tIGJhc2ggZGV2ZWwgYnJhbmNoOgotCi0JaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvYmFzaC5naXQvbG9nLz9oPWRldmVsCi0KLSAgIGNvbW1pdCBpczoKLQotCTc0YjhjYmI0MTM5OGI0NDUzZDhiYTA0ZDBjZGQxYjI1ZjlkY2I5ZTMKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi1TaWduZWQtb2ZmLWJ5OiBEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPgotLS0tCi0gdGVzdHMvaW50bC5yaWdodCB8IDMwICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3Rlc3RzL2ludGwucmlnaHQgYi90ZXN0cy9pbnRsLnJpZ2h0Ci1pbmRleCBhY2YxMDhhLi4xZWZkZmJlIDEwMDY0NAotLS0tIGEvdGVzdHMvaW50bC5yaWdodAotKysrIGIvdGVzdHMvaW50bC5yaWdodAotQEAgLTE4LDM0ICsxOCwzNCBAQCBhw6liCi0gMS4wMDAwCi0gMSwwMDAwCi0gUGFzc2VkIGFsbCAxMzc4IFVuaWNvZGUgdGVzdHMKLS0wMDAwMDAwICAgMzAzIDI3NyAwMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0rMDAwMDAwMCAzMDMgMjc3IDAxMgotIDAwMDAwMDMKLS0wMDAwMDAwICAgMzAzIDI3NyAwMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0rMDAwMDAwMCAzMDMgMjc3IDAxMgotIDAwMDAwMDMKLS0wMDAwMDAwICAgMzAzIDI3NyAwMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0rMDAwMDAwMCAzMDMgMjc3IDAxMgotIDAwMDAwMDMKLS0wMDAwMDAwICAgMzAzIDI3NyAwMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0rMDAwMDAwMCAzMDMgMjc3IDAxMgotIDAwMDAwMDMKLS0wMDAwMDAwICAgMzU3IDI3NyAyNzcgMDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0rMDAwMDAwMCAzNTcgMjc3IDI3NyAwMTIKLSAwMDAwMDA0Ci0tMDAwMDAwMCAgIDM1NyAyNzcgMjc3IDAxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotKzAwMDAwMDAgMzU3IDI3NyAyNzcgMDEyCi0gMDAwMDAwNAotLTAwMDAwMDAgICAwMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSswMDAwMDAwIDAxMgotIDAwMDAwMDEKLS0wMDAwMDAwICAgMDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0rMDAwMDAwMCAwMTIKLSAwMDAwMDAxCi0tMDAwMDAwMCAgIDAxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotKzAwMDAwMDAgMDEyCi0gMDAwMDAwMQotLTAwMDAwMDAgICAwMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSswMDAwMDAwIDAxMgotIDAwMDAwMDEKLS0wMDAwMDAwICAgMzAzIDI3NyAwMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0rMDAwMDAwMCAzMDMgMjc3IDAxMgotIDAwMDAwMDMKLS0wMDAwMDAwICAgMzAzIDI3NyAwMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0rMDAwMDAwMCAzMDMgMjc3IDAxMgotIDAwMDAwMDMKLS0wMDAwMDAwICAgMzAzIDI3NyAwMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0rMDAwMDAwMCAzMDMgMjc3IDAxMgotIDAwMDAwMDMKLS0wMDAwMDAwICAgMTAxIDA0MCAzMDIgMjQzIDA0MCAzMDUgMjIyIDAxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0rMDAwMDAwMCAxMDEgMDQwIDMwMiAyNDMgMDQwIDMwNSAyMjIgMDEyCi0gMDAwMDAxMAotIC4vdW5pY29kZTMuc3ViOiBsaW5lIDI6IDWnQDOZK8ZTOJ+i6rM6IGNvbW1hbmQgbm90IGZvdW5kCi0tNadAM5krxlM4n6LqswotKyQnNVwyNDdAM1wyMzErXDMwNlM4XDIzN1wyNDJcMzUyXDI2MycKLSArIDogJCc1XDI0N0AzXDIzMStcMzA2UzhcMjM3XDI0MlwzNTJcMjYzJwotLS0gCi0yLjguMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC90ZXN0LW91dHB1dC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL3Rlc3Qtb3V0cHV0LnBhdGNoCmluZGV4IDJiMDliN2QuLjBmZmNjMjQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL3Rlc3Qtb3V0cHV0LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL3Rlc3Qtb3V0cHV0LnBhdGNoCkBAIC0xLDI1ICsxLDQyIEBACi1BZGQgRkFJTC9QQVNTIG91dHB1dCB0byB0ZXN0IG91dHB1dC4KK0Zyb20gMjhlYjA2MDQ3ZWJkMmRlYWE4YzdjZDJiZjY2NTVlZjZhNDY5ZGMxNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTUgQXVnIDIwMTcgMTA6MDE6NTYgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIEFkZCBGQUlML1BBU1Mgb3V0cHV0IHRvIHRlc3Qgb3V0cHV0LgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAogCiBTaWduZWQtb2ZmLWJ5OiBCasO2cm4gU3RlbmJlcmcgPGJqc3RAZW5lYS5jb20+CiBVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUmViYXNlIHRvIDQuNAorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgogLS0tCi1kaWZmIC11TnIgYS90ZXN0cy9ydW4tYWxsIGIvdGVzdHMvcnVuLWFsbAotLS0tIGEvdGVzdHMvcnVuLWFsbAkxOTk5LTEwLTA4IDE3OjA3OjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIGIvdGVzdHMvcnVuLWFsbAkyMDEyLTEwLTI3IDIxOjA0OjE4LjY2MzMzMTg4NyArMDIwMAotQEAgLTIyLDcgKzIyLDE1IEBACisgdGVzdHMvcnVuLWFsbCB8IDExICsrKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Rlc3RzL3J1bi1hbGwgYi90ZXN0cy9ydW4tYWxsCitpbmRleCAyODgyZmUwLi5lMjFkMDI2IDEwMDY0NAorLS0tIGEvdGVzdHMvcnVuLWFsbAorKysrIGIvdGVzdHMvcnVuLWFsbAorQEAgLTMzLDcgKzMzLDE2IEBAIGRvCiAgCWNhc2UgJHggaW4KICAJJDB8cnVuLW1pbmltYWx8cnVuLWdwcm9mKQk7OwogIAkqLm9yaWd8Kn4pIDs7Ci0tCSopCWVjaG8gJHggOyBzaCAkeCA7OwotKyAgICAqKSAgZWNobyAkeAotKyAgICAgICAgIG91dHB1dD1gc2ggJHhgCi0rICAgICAgICAgaWYgWyAtbiAiJG91dHB1dCIgXTsgdGhlbgotKyAgICAgICAgICAgICBlY2hvICIkb3V0cHV0IgotKyAgICAgICAgICAgICBlY2hvICJGQUlMOiAkeCIKLSsgICAgICAgICBlbHNlCi0rICAgICAgICAgICAgIGVjaG8gIlBBU1M6ICR4IgotKyAgICAgICAgIGZpCi0rICAgICAgICAgOzsKKy0JKikJZWNobyAkeCA7IHNoICR4IDsgcm0gLWYgJHtCQVNIX1RTVE9VVH0gOzsKKysJKikJZWNobyAkeAorKwkJb3V0cHV0PWBzaCAkeGAKKysJCWlmIFsgLW4gIiRvdXRwdXQiIF07IHRoZW4KKysJCQllY2hvICIkb3V0cHV0IgorKwkJCWVjaG8gIkZBSUw6ICR4IgorKwkJZWxzZQorKwkJCWVjaG8gIlBBU1M6ICR4IgorKwkJZmkKKysJCXJtIC1mICR7QkFTSF9UU1RPVVR9CisrCQk7OwogIAllc2FjCiAgZG9uZQogIAorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoXzQuMy4zMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoXzQuMy4zMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY0OGZhZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaF80LjMuMzAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi1yZXF1aXJlIGJhc2guaW5jCi0KLSMgR1BMdjIrICg8IDQuMCksIEdQTHYzKyAoPj0gNC4wKQotTElDRU5TRSA9ICJHUEx2MysiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKLQotU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2Jhc2gvJHtCUH0udGFyLmd6O25hbWU9dGFyYmFsbCBcCi0gICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wMzE7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDMxIFwKLSAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTAzMjthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMzIgXAotICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDMzO2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAzMyBcCi0gICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wMzQ7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDM0IFwKLSAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTAzNTthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMzUgXAotICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDM2O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAzNiBcCi0gICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wMzc7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDM3IFwKLSAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTAzODthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMzggXAotICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDM5O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAzOSBcCi0gICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wNDA7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDQwIFwKLSAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTA0MTthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNDEgXAotICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDQyO2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA0MiBcCi0gICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wNDM7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDQzIFwKLSAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTA0NDthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNDQgXAotICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDQ1O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA0NSBcCi0gICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wNDY7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDQ2IFwKLSAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTA0NzthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNDcgXAotICAgICAgICAgICBmaWxlOi8vZXhlY3V0ZV9jbWQucGF0Y2g7c3RyaXBsZXZlbD0wIFwKLSAgICAgICAgICAgZmlsZTovL21rYnVpbHRpbnNfaGF2ZV9zdHJpbmdpemUucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vYnVpbGQtdGVzdHMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vdGVzdC1vdXRwdXQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZml4LXJ1bi1jb3Byb2MtcnVuLWhlcmVkb2MtcnVuLWV4ZWNzY3JpcHQtcnVuLXRlc3QtZi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAotICAgICAgICAgICBmaWxlOi8vZml4LXJ1bi1idWlsdGlucy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWhlbHAtZml4LXByaW50Zi1mb3JtYXQtc2VjdXJpdHktd2FybmluZy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9maXgtcnVuLWludGwucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTYtOTQwMS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9iYXNoLW1lbWxlYWstYnVnLWZpeC1mb3ItYnVpbHRpbi1jb21tYW5kLXJlYWQucGF0Y2ggXAotICAgICAgICAgICAiCi0KLVNSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gImEyN2IzZWU5YmU4M2JkM2JhNDQ4YzBmZjUyYjI4NDQ3IgotU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiMzE3ODgxMDE5YmJmMjI2MmZiODE0YjdkZDhlNDA2MzJkMTNjMzYwOGQyZjIzNzgwMGE4ODI4ZmJiOGE2NDBkZCIKLQotU1JDX1VSSVtwYXRjaDAzMS5tZDVzdW1dID0gIjIzNmRmMWFjMTEzMGEwMzNlZDBkYmUyZDIxMTVmMjhmIgotU1JDX1VSSVtwYXRjaDAzMS5zaGEyNTZzdW1dID0gImNkNTI5ZjU5ZGQwZjJmZGQ0OWQ2MTlmZTM0NjkxZGE2ZjBhZmZlZGY4N2NjMzdjZDQ2MGE5ZjNmZTgxMmE2MWQiCi1TUkNfVVJJW3BhdGNoMDMyLm1kNXN1bV0gPSAiMjM2MGY3ZTc5Y2ZiMjg1MjZmODAwMjEwMjVlYTU5MDkiCi1TUkNfVVJJW3BhdGNoMDMyLnNoYTI1NnN1bV0gPSAiODg5MzU3ZDI5YTYwMDViMmMzMzA4Y2E1YjYyODZjYjIyM2I1ZTljMDgzMjE5ZTVkYjMxNTYyODJkZDU1NGY0YSIKLVNSQ19VUklbcGF0Y2gwMzMubWQ1c3VtXSA9ICJiNTUxYzRlZTdiODcxMzc1OWU0MTQzNDk5ZDBiYmQ0OCIKLVNSQ19VUklbcGF0Y2gwMzMuc2hhMjU2c3VtXSA9ICJmYjJhNzc4N2ExM2ZiZTAyN2E3MzM1YWNhNmViM2MyMWNkYmQ4MTNlOWVkYzIyMTI3NGI2YTlkODY5MmVhYTE2IgotU1JDX1VSSVtwYXRjaDAzNC5tZDVzdW1dID0gImM5YTU2ZmJlMDM0OGUwNWE4ODZkZmY5N2YyODcyYjc0IgotU1JDX1VSSVtwYXRjaDAzNC5zaGEyNTZzdW1dID0gImYxNjk0ZjA0ZjExMGRlZmUxMzMwYTg1MWNjMjc2OGU3ZTU3ZGRkMmRmZGIwZTNlMzUwY2EwZTNjMjE0ZmY4ODkiCi1TUkNfVVJJW3BhdGNoMDM1Lm1kNXN1bV0gPSAiZTU2NGU4YWI0NGVkMWNhM2E0ZTMxNWE5ZjZjYWJkYzkiCi1TUkNfVVJJW3BhdGNoMDM1LnNoYTI1NnN1bV0gPSAiMzcwZDg1ZTUxNzgwMDM2ZjIzODZkYzE4YzVlZmU5OTZlYmE4ZTY1MmZjMTk3M2YwZjRmMmFiNTVhOTkzYzFlMyIKLVNSQ19VUklbcGF0Y2gwMzYubWQ1c3VtXSA9ICJiMDBmZjY2YzQxYTdjMGYwNmUxOTEyMDA5ODE5ODBiMCIKLVNSQ19VUklbcGF0Y2gwMzYuc2hhMjU2c3VtXSA9ICJhYzVmODI0NDViMzZlZmRiNTQzZGJmYWU2NGFmZWQ2M2Y1ODZkNzU3NGI4MzNlOWFhOWNkNTE3MGJjNWZkMjdjIgotU1JDX1VSSVtwYXRjaDAzNy5tZDVzdW1dID0gImJlMmE3YjA1ZjZhZTU2MDMxM2YzYzlkNWY3MTI3YmRhIgotU1JDX1VSSVtwYXRjaDAzNy5zaGEyNTZzdW1dID0gIjMzZjE3MGRkNzQwMGFiMzQxOGQ3NDljNTVjNjM5MWIxZDE2MWVmMmRlN2FjZWQxODczNDUxYjNhM2ZjYTU4MTMiCi1TUkNfVVJJW3BhdGNoMDM4Lm1kNXN1bV0gPSAiNjFlMDUyMjgzMGIyNGZiZThjMGQxYjAxMGYxMzI0NzAiCi1TUkNfVVJJW3BhdGNoMDM4LnNoYTI1NnN1bV0gPSAiYWRiZWFhNTAwY2E3YTgyNTM1ZjBlODhkNjczNjYxOTYzZjhhNWZjZGM3YWQ2MzQ0NWU2OGJmNWI0OTc4NjM2NyIKLVNSQ19VUklbcGF0Y2gwMzkubWQ1c3VtXSA9ICJhNDc3NTQ4N2FiZTk1ODUzNjc1MWM4Y2U1M2NkZjZmOSIKLVNSQ19VUklbcGF0Y2gwMzkuc2hhMjU2c3VtXSA9ICJhYjk0ZGNlZDIyMTU1NDEwOTc2OTFmNjBjM2ViMzIzY2MyOGVmMjU0OTQ2M2U2YTUzMzRiYmNjMWU2MWU3NGVjIgotU1JDX1VSSVtwYXRjaDA0MC5tZDVzdW1dID0gIjgwZDM1ODdjNTg4NTRlMjI2MDU1ZWYwOTlmZmViNTM1IgotU1JDX1VSSVtwYXRjaDA0MC5zaGEyNTZzdW1dID0gIjg0YmIzOTZiOTI2Mjk5MmNhNTQyNGZlYWI2ZWQzZWMzOWYxOTNlZjVjNzZkZmU0YTYyYjU1MWJkOGRkOWQ3NmIiCi1TUkNfVVJJW3BhdGNoMDQxLm1kNXN1bV0gPSAiMjBiZjYzZWVmN2NiNDQxYzBiMWNjNDllZjMxOTFkMDMiCi1TUkNfVVJJW3BhdGNoMDQxLnNoYTI1NnN1bV0gPSAiNGVjNDMyOTY2ZTQxOTg1MjRhN2UwY2Q2ODVmZTIyMmU5NjA0Mzc2OWM5NjEzZTY2NzQyYWM0NzVkYjEzMmMxYSIKLVNSQ19VUklbcGF0Y2gwNDIubWQ1c3VtXSA9ICI3MDc5MDY0NmFlNjFlMjA3Yzk5NWU0NDkzMTM5MGU1MCIKLVNSQ19VUklbcGF0Y2gwNDIuc2hhMjU2c3VtXSA9ICJhYzIxOTMyMmRiMjc5MWRhODdhNDk2ZWU2ZThlNTU0NDg0NjQ5NGJkYWFlYTI2MjYyNzBjMmY3M2MxMDQ0OTE5IgotU1JDX1VSSVtwYXRjaDA0My5tZDVzdW1dID0gIjg1NWE0Njk1NWNiMjUxNTM0ZTgwYjQ3MzJiNzQ4ZTM3IgotU1JDX1VSSVtwYXRjaDA0My5zaGEyNTZzdW1dID0gIjQ3YThhM2MwMDViNDZlMjU4MjFmNGQ4ZjVjY2IwNGMxZDY1M2IxYzgyOWNiNDA1NjhkNTUzZGM0NGY3YTYxODAiCi1TUkNfVVJJW3BhdGNoMDQ0Lm1kNXN1bV0gPSAiMjk2MjNkMzI4MmZjYmIzN2UxMTU4MTM2NTA5YjViYjgiCi1TUkNfVVJJW3BhdGNoMDQ0LnNoYTI1NnN1bV0gPSAiOTMzODgyMDYzMGJmNjczNzNiNDRkOGVhNjg0MDlmNjUxNjJlYTdhNDdiOWIyOWFjZTA2YTBhZWQxMjU2N2Y5OSIKLVNSQ19VUklbcGF0Y2gwNDUubWQ1c3VtXSA9ICI0NDczMjQ0Y2E1YWJmZDRiMDE4ZWEyNmRjNzNlNzQxMiIKLVNSQ19VUklbcGF0Y2gwNDUuc2hhMjU2c3VtXSA9ICJiYTZlYzM5NzhlOWVhYTFlYjNmYWJkYWYzY2M2ZmRmOGM0NjA2YWMxYzU5OWZhYWViNGUyZDY5ODY0MTUwMDIzIgotU1JDX1VSSVtwYXRjaDA0Ni5tZDVzdW1dID0gIjdlNWZiMDk5OTFjMDc3MDc2Yjg2ZTBlMDU3Nzk4OTEzIgotU1JDX1VSSVtwYXRjaDA0Ni5zaGEyNTZzdW1dID0gImIzYjQ1NmE2YjY5MGNkMjkzMzUzZjE3ZTIyZDkyYTIwMmIzYzhiY2U1ODdhZTVmMjY2N2MyMGM5YWI2ZjY4OGYiCi1TUkNfVVJJW3BhdGNoMDQ3Lm1kNXN1bV0gPSAiODQ4MzE1M2JhZDFhNmY1MmNhZGMzYmQ5YThkZjc4MzUiCi1TUkNfVVJJW3BhdGNoMDQ3LnNoYTI1NnN1bV0gPSAiYzY5MjQ4ZGU3ZTc4YmE2YjkyZjExOGZlMWVmNDdiYzg2NDc5ZDUwNDBmZTBiMWY5MDhhY2UxYzllM2M2N2M0YSIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaF80LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaF80LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU0NGQwNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoXzQuNC5iYgpAQCAtMCwwICsxLDU5IEBACityZXF1aXJlIGJhc2guaW5jCisKKyMgR1BMdjIrICg8IDQuMCksIEdQTHYzKyAoPj0gNC4wKQorTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2Jhc2gvJHtCUH0udGFyLmd6O25hbWU9dGFyYmFsbCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuNC1wYXRjaGVzL2Jhc2g0NC0wMDE7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDAxIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC40LXBhdGNoZXMvYmFzaDQ0LTAwMjthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMDIgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjQtcGF0Y2hlcy9iYXNoNDQtMDAzO2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAwMyBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuNC1wYXRjaGVzL2Jhc2g0NC0wMDQ7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDA0IFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC40LXBhdGNoZXMvYmFzaDQ0LTAwNTthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMDUgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjQtcGF0Y2hlcy9iYXNoNDQtMDA2O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAwNiBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuNC1wYXRjaGVzL2Jhc2g0NC0wMDc7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDA3IFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC40LXBhdGNoZXMvYmFzaDQ0LTAwODthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMDggXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjQtcGF0Y2hlcy9iYXNoNDQtMDA5O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAwOSBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuNC1wYXRjaGVzL2Jhc2g0NC0wMTA7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDEwIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC40LXBhdGNoZXMvYmFzaDQ0LTAxMTthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMTEgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjQtcGF0Y2hlcy9iYXNoNDQtMDEyO2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAxMiBcCisgICAgICAgICAgIGZpbGU6Ly9leGVjdXRlX2NtZC5wYXRjaDtzdHJpcGxldmVsPTAgXAorICAgICAgICAgICBmaWxlOi8vbWtidWlsdGluc19oYXZlX3N0cmluZ2l6ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9idWlsZC10ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90ZXN0LW91dHB1dC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcnVuLWNvcHJvYy1ydW4taGVyZWRvYy1ydW4tZXhlY3NjcmlwdC1ydW4tdGVzdC1mLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcnVuLWJ1aWx0aW5zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaGVscC1maXgtcHJpbnRmLWZvcm1hdC1zZWN1cml0eS13YXJuaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Jhc2gtbWVtbGVhay1idWctZml4LWZvci1idWlsdGluLWNvbW1hbmQtcmVhZC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVt0YXJiYWxsLm1kNXN1bV0gPSAiMTQ4ODg4YTdjOTVhYzIzNzA1NTU5YjZmNDc3ZGZlMjUiCitTUkNfVVJJW3RhcmJhbGwuc2hhMjU2c3VtXSA9ICJkODZiMzM5MmMxMjAyZThmZjVhNDIzYjMwMmU2Mjg0ZGI3ZjhmNDM1ZWE5ZjM5YjViMWIyMGZkM2FjMzZkZmNiIgorCitTUkNfVVJJW3BhdGNoMDAxLm1kNXN1bV0gPSAiODE3ZDAxYTZjMGFmNmY3OTMwOGE4YjdiNjQ5ZTUzZDgiCitTUkNfVVJJW3BhdGNoMDAxLnNoYTI1NnN1bV0gPSAiM2UyOGQ5MTUzMTc1MmRmOWE4Y2IxNjdhZDA3Y2M1NDJhYmFmOTQ0ZGU5MzUzZmU4YzZhNTM1YzlmMWYxN2YwZiIKK1NSQ19VUklbcGF0Y2gwMDIubWQ1c3VtXSA9ICI3NjVlMTRjZmYxMmM3Mjg0MDA5NzcyZThlMjRmMmZlMCIKK1NSQ19VUklbcGF0Y2gwMDIuc2hhMjU2c3VtXSA9ICI3MDIwYTAxODNlMTdhNzIzM2U2NjViOTc5Yzc4YzE4NGVhMzY5Y2ZhZjNlOGI0YjExZjU1NDdlY2I3YzEzYzUzIgorU1JDX1VSSVtwYXRjaDAwMy5tZDVzdW1dID0gIjQ5ZTdkYTkzYmYwN2Y1MTBhMmViNmJiNDNhYzNlNWEyIgorU1JDX1VSSVtwYXRjaDAwMy5zaGEyNTZzdW1dID0gIjUxZGY1YTkxOTJmZGVmZTBkZGNhNGJkZjI5MDkzMmY3NGJlMDNmZmQwNTAzYTNkMTEyZTQxOTk5MDVlNzE4YjIiCitTUkNfVVJJW3BhdGNoMDA0Lm1kNXN1bV0gPSAiNDU1N2Q2NzRhYjU4MzFhNWZhOTgwNTJhYjE5ZWRhZjQiCitTUkNfVVJJW3BhdGNoMDA0LnNoYTI1NnN1bV0gPSAiYWQwODBhMzBhNGFjNmMxMjczMzczNjE3ZjI5NjI4Y2MzMjBhMzVjOGNkMDY5MTM4OTQ3OTQyOTNkYzUyYzhiMyIKK1NSQ19VUklbcGF0Y2gwMDUubWQ1c3VtXSA9ICJjY2U5NmRkNzdjZGQxZDI5M2JlZWMxMDg0OGY2Y2JiNSIKK1NSQ19VUklbcGF0Y2gwMDUuc2hhMjU2c3VtXSA9ICIyMjFlNGI3MjViNzcwYWQwYmI2OTI0ZGYzZjhkMDRmODllZWNhNDU1OGY2ZTRjNzc3ZGZhOTNlOTY3MDkwNTI5IgorU1JDX1VSSVtwYXRjaDAwNi5tZDVzdW1dID0gImQzMzc5ZjhkOGFiY2U1YzZlZTMzOGY5MzFhZDAwOGQ1IgorU1JDX1VSSVtwYXRjaDAwNi5zaGEyNTZzdW1dID0gIjZhOGUyZTJhNjE4MGQwZjFjZTM5ZGNkNjUxNjIyZmI2ZDJmZDA1ZGI3YzQ1OWY2NGFlNDJkNjY3ZjFlMzQ0YjgiCitTUkNfVVJJW3BhdGNoMDA3Lm1kNXN1bV0gPSAiZWMzOGM3NmNhNDM5Y2E3ZjljMTc4ZTliYWVkZTg0ZmMiCitTUkNfVVJJW3BhdGNoMDA3LnNoYTI1NnN1bV0gPSAiZGUxY2NjMDdiN2JmYzllMjUyNDNhZDg1NGYzYmJiNWQzZWJmOTE1NWIwNDc3ZGYxNmFhZjAwYTdiMGQ1ZWRhZiIKK1NSQ19VUklbcGF0Y2gwMDgubWQ1c3VtXSA9ICJlMGJhMThjMWUzYjk0ZjkwNWRhOWI1YmY5ZDM4YjU4YiIKK1NSQ19VUklbcGF0Y2gwMDguc2hhMjU2c3VtXSA9ICI4NjE0NDcwMDQ2NTkzMzYzNmQ3Yjk0NWU4OWI3N2RmOTVkMzYyMDAzNDcyNWJlMTYxY2EwY2E1YTQyZTIzOWJhIgorU1JDX1VSSVtwYXRjaDAwOS5tZDVzdW1dID0gImU5NTJkNGY0NGU2MTIwNDg5MzBjNTU5ZDkwZWI5OWJiIgorU1JDX1VSSVtwYXRjaDAwOS5zaGEyNTZzdW1dID0gIjBiNmJkZDFhMThhMGQyMGUzMzBjYzNiYzcxZTA0ODg2NGU0YTEzNjUyZTI5ZGMwZWJmMzkxOGJlYTcyOTM0M2MiCitTUkNfVVJJW3BhdGNoMDEwLm1kNXN1bV0gPSAiNTdiNWIzNTk1NWQ2OGY5YTA5ZGJlZjZiODZkMmM3ODIiCitTUkNfVVJJW3BhdGNoMDEwLnNoYTI1NnN1bV0gPSAiODQ2NWM2ZjJjNTZhZmU1NTk0MDIyNjViMzlkOWU5NDM2ODk1NDkzMGY5YWE3ZjNkZmE2ZDM2ZGQ2Njg2OGUwNiIKK1NSQ19VUklbcGF0Y2gwMTEubWQ1c3VtXSA9ICJjYzg5NmUxZmE2OTZiOTNkZWQ1NjhlNTU3ZTIzOTJkNSIKK1NSQ19VUklbcGF0Y2gwMTEuc2hhMjU2c3VtXSA9ICJkZDU2NDI2ZWY3ZDcyOTVlMTEwN2MwYjNkMDZjMTkyZWI5Mjk4ZjQwMjNjMjAyY2EyYmE2MjY2YzYxM2QxNzBkIgorU1JDX1VSSVtwYXRjaDAxMi5tZDVzdW1dID0gImZhNDdmYmZhNTZmYjdlOWU1MzY3ZjE5YTlkZjVmYzllIgorU1JDX1VSSVtwYXRjaDAxMi5zaGEyNTZzdW1dID0gImZhYzI3MWQyYmY2MzcyYzk5MDNlM2IzNTNjYjllZGEwNDRkN2ZlMzZiNWFhYjUyZjIxZjNmMjFjZDZhMjA2M2UiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ieWFjYy9ieWFjYy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRiMDcxOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjLmluYworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLVNVTU1BUlkgPSAiQmVya2VsZXkgTEFMUiBZYWNjIHBhcnNlciBnZW5lcmF0b3IiCi1ERVNDUklQVElPTiA9ICJBIHBhcnNlciBnZW5lcmF0b3IgdXRpbGl0eSB0aGF0IHJlYWRzIGEgZ3JhbW1hciBzcGVjaWZpY2F0aW9uIGZyb20gYSBmaWxlIGFuZCBnZW5lcmF0ZXMgYW4gTFIoMSkgXAotcGFyc2VyIGZvciBpdC4gIFRoZSBwYXJzZXJzIGNvbnNpc3Qgb2YgYSBzZXQgb2YgTEFMUigxKSBwYXJzaW5nIHRhYmxlcyBhbmQgYSBkcml2ZXIgcm91dGluZSB3cml0dGVuIGluIHRoZSBDIFwKLXByb2dyYW1taW5nIGxhbmd1YWdlLiIKLVNFQ1RJT04gPSAiZGV2ZWwiCi1MSUNFTlNFID0gIlBEIgotCi1TUkNfVVJJID0gImZ0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2J5YWNjL2J5YWNjLSR7UFZ9LnRneiBcCi0gICAgICAgICAgIGZpbGU6Ly9ieWFjYy1vcGVuLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtYnlhY2MtZG8tbm90LXJlb3JkZXItQ0MtYW5kLUNGTEFHUy5wYXRjaCIKLQotRVhUUkFfT0VDT05GICs9ICItLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9J3MsXixiLCciCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgotCi1pbmhlcml0IGF1dG90b29scwotCi1kb19jb25maWd1cmUoKSB7Ci0JaW5zdGFsbCAtbSAwNzU1ICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ251LWNvbmZpZy9jb25maWcuZ3Vlc3MgJHtTfQotCWluc3RhbGwgLW0gMDc1NSAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dudS1jb25maWcvY29uZmlnLnN1YiAke1N9Ci0Jb2VfcnVuY29uZgotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ieWFjYy9ieWFjYy8wMDAxLWJ5YWNjLWRvLW5vdC1yZW9yZGVyLUNDLWFuZC1DRkxBR1MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjLzAwMDEtYnlhY2MtZG8tbm90LXJlb3JkZXItQ0MtYW5kLUNGTEFHUy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NkMjUxMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjLzAwMDEtYnlhY2MtZG8tbm90LXJlb3JkZXItQ0MtYW5kLUNGTEFHUy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi1TdWJqZWN0OiBieWFjYzogZG8gbm90IHJlb3JkZXIgJENDIGFuZCAkQ0ZMQUdTCi0KLWJ5YWNjIHRyaWVzIHRvIHByb2Nlc3MgJENDIGFuZCBkZWNpZGUgd2hpY2ggcGFydCBzaG91bGQgYmVsb25nIHRvIENDIGFuZCB3aGljaAotcGFydCBzaG91bGQgYmVsb3cgdG8gQ0ZMQUdTIGFuZCB0aGVuIGRvIHJlb3JkZXJpbmcuIEl0IGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlCi1mb3IgT0UuIEFuZCBpdCBkb2Vzbid0IGRvIGl0cyB3b3JrIGNvcnJlY3RseS4gU29tZSBvcHRpb25zIGFyZSBkcm9wcGVkLgotCi1EZWxldGUgYWxsIHRoZXNlIHN0dWZmIHNvIHRoYXQgd2UgY291bGQgaGF2ZSBhbGwgb3B0aW9ucyB3ZSBuZWVkLgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIFNwZWNpZmljXQotCi1TaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+Ci0tLS0KLSBhY2xvY2FsLm00IHwgICAxIC0KLSBjb25maWd1cmUgIHwgMTE5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDEyMCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2FjbG9jYWwubTQgYi9hY2xvY2FsLm00Ci1pbmRleCA5MTdhODQ4Li42MmVmMjQxIDEwMDY0NAotLS0tIGEvYWNsb2NhbC5tNAotKysrIGIvYWNsb2NhbC5tNAotQEAgLTEwMjEsNyArMTAyMSw2IEBAIENGX0dDQ19WRVJTSU9OCi0gQ0ZfQUNWRVJTSU9OX0NIRUNLKDIuNTIsCi0gCVtBQ19QUk9HX0NDX1NURENdLAotIAlbQ0ZfQU5TSV9DQ19SRVFEXSkKLS1DRl9DQ19FTlZfRkxBR1MKLSBdKWRubAotIGRubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBkbmwgQ0ZfUFJPR19HUk9GRiB2ZXJzaW9uOiAyIHVwZGF0ZWQ6IDIwMTUvMDcvMDQgMTE6MTY6MjcKLWRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKLWluZGV4IDk3MDdlNTAuLjRmMDQ5N2MgMTAwNzU1Ci0tLS0gYS9jb25maWd1cmUKLSsrKyBiL2NvbmZpZ3VyZQotQEAgLTE5NDYsMTI1ICsxOTQ2LDYgQEAgZXNhYwotICMgVGhpcyBzaG91bGQgaGF2ZSBiZWVuIGRlZmluZWQgYnkgQUNfUFJPR19DQwotIDogJHtDQzo9Y2N9Ci0gCi0tZWNobyAiJGFzX21lOjE5NDk6IGNoZWNraW5nIFwkQ0MgdmFyaWFibGUiID4mNQotLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgXCRDQyB2YXJpYWJsZS4uLiAkRUNIT19DIiA+JjYKLS1jYXNlICIkQ0MiIGluCi0tKCpbXCBcCV0tKikKLS0JZWNobyAiJGFzX21lOjE5NTM6IHJlc3VsdDogYnJva2VuIiA+JjUKLS1lY2hvICIke0VDSE9fVH1icm9rZW4iID4mNgotLQl7IGVjaG8gIiRhc19tZToxOTU1OiBXQVJOSU5HOiB5b3VyIGVudmlyb25tZW50IG1pc3VzZXMgdGhlIENDIHZhcmlhYmxlIHRvIGhvbGQgQ0ZMQUdTL0NQUEZMQUdTIG9wdGlvbnMiID4mNQotLWVjaG8gIiRhc19tZTogV0FSTklORzogeW91ciBlbnZpcm9ubWVudCBtaXN1c2VzIHRoZSBDQyB2YXJpYWJsZSB0byBob2xkIENGTEFHUy9DUFBGTEFHUyBvcHRpb25zIiA+JjI7fQotLQkjIGh1bW9yIGhpbS4uLgotLQljZl9mbGFncz1gZWNobyAiJENDIiB8IHNlZCAtZSAncy9eLipbIAldXCgtW14gCV1cKS9cMS8nYAotLQlDQz1gZWNobyAiJENDICIgfCBzZWQgLWUgJ3MvWyAJXS1bXiAJXS4qJC8vJyAtZSAncy9bIAldKiQvLydgCi0tCWZvciBjZl9hcmcgaW4gJGNmX2ZsYWdzCi0tCWRvCi0tCQljYXNlICJ4JGNmX2FyZyIgaW4KLS0JCSh4LVtJVURmZ09XXSopCi0tCi0tY2ZfZml4X2NwcGZsYWdzPW5vCi0tY2ZfbmV3X2NmbGFncz0KLS1jZl9uZXdfY3BwZmxhZ3M9Ci0tY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPQotLQotLWZvciBjZl9hZGRfY2ZsYWdzIGluICRjZl9mbGFncwotLWRvCi0tY2FzZSAkY2ZfZml4X2NwcGZsYWdzIGluCi0tKG5vKQotLQljYXNlICRjZl9hZGRfY2ZsYWdzIGluCi0tCSgtdW5kZWZ8LW5vc3RkaW5jKnwtSSp8LUQqfC1VKnwtRXwtUHwtQykKLS0JCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4KLS0JCSgtRCopCi0tCQkJY2ZfdHN0X2NmbGFncz1gZWNobyAke2NmX2FkZF9jZmxhZ3N9IHxzZWQgLWUgJ3MvXi1EW149XSo9J1wnJ1wiW14iXSovLydgCi0tCi0tCQkJdGVzdCAieCR7Y2ZfYWRkX2NmbGFnc30iICE9ICJ4JHtjZl90c3RfY2ZsYWdzfSIgXAotLQkJCQkmJiB0ZXN0IC16ICIke2NmX3RzdF9jZmxhZ3N9IiBcCi0tCQkJCSYmIGNmX2ZpeF9jcHBmbGFncz15ZXMKLS0KLS0JCQlpZiB0ZXN0ICRjZl9maXhfY3BwZmxhZ3MgPSB5ZXMgOyB0aGVuCi0tCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKLS0JCQkJY29udGludWUKLS0JCQllbGlmIHRlc3QgIiR7Y2ZfdHN0X2NmbGFnc30iID0gIlwiJyIgOyB0aGVuCi0tCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKLS0JCQkJY29udGludWUKLS0JCQlmaQotLQkJCTs7Ci0tCQllc2FjCi0tCQljYXNlICIkQ1BQRkxBR1MiIGluCi0tCQkoKiRjZl9hZGRfY2ZsYWdzKQotLQkJCTs7Ci0tCQkoKikKLS0JCQljYXNlICRjZl9hZGRfY2ZsYWdzIGluCi0tCQkJKC1EKikKLS0JCQkJY2ZfdHN0X2NwcGZsYWdzPWBlY2hvICJ4JGNmX2FkZF9jZmxhZ3MiIHwgc2VkIC1lICdzL14uLi4vLycgLWUgJ3MvPS4qLy8nYAotLQotLUNQUEZMQUdTPWBlY2hvICIkQ1BQRkxBR1MiIHwgXAotLQlzZWQJLWUgJ3MvLVtVRF0nIiRjZl90c3RfY3BwZmxhZ3MiJ1woPVteIAldKlwpXD9bIAldLyAvZycgXAotLQkJLWUgJ3MvLVtVRF0nIiRjZl90c3RfY3BwZmxhZ3MiJ1woPVteIAldKlwpXD8kLy9nJ2AKLS0KLS0JCQkJOzsKLS0JCQllc2FjCi0tCQkJY2ZfbmV3X2NwcGZsYWdzPSIkY2ZfbmV3X2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgotLQkJCTs7Ci0tCQllc2FjCi0tCQk7OwotLQkoKikKLS0JCWNmX25ld19jZmxhZ3M9IiRjZl9uZXdfY2ZsYWdzICRjZl9hZGRfY2ZsYWdzIgotLQkJOzsKLS0JZXNhYwotLQk7OwotLSh5ZXMpCi0tCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKLS0KLS0JY2ZfdHN0X2NmbGFncz1gZWNobyAke2NmX2FkZF9jZmxhZ3N9IHxzZWQgLWUgJ3MvXlteIl0qIidcJycvLydgCi0tCi0tCXRlc3QgIngke2NmX2FkZF9jZmxhZ3N9IiAhPSAieCR7Y2ZfdHN0X2NmbGFnc30iIFwKLS0JCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKLS0JCSYmIGNmX2ZpeF9jcHBmbGFncz1ubwotLQk7OwotLWVzYWMKLS1kb25lCi0tCi0taWYgdGVzdCAtbiAiJGNmX25ld19jZmxhZ3MiIDsgdGhlbgotLQotLQlDRkxBR1M9IiRDRkxBR1MgJGNmX25ld19jZmxhZ3MiCi0tZmkKLS0KLS1pZiB0ZXN0IC1uICIkY2ZfbmV3X2NwcGZsYWdzIiA7IHRoZW4KLS0KLS0JQ1BQRkxBR1M9IiRDUFBGTEFHUyAkY2ZfbmV3X2NwcGZsYWdzIgotLWZpCi0tCi0taWYgdGVzdCAtbiAiJGNmX25ld19leHRyYV9jcHBmbGFncyIgOyB0aGVuCi0tCi0tCUVYVFJBX0NQUEZMQUdTPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRFWFRSQV9DUFBGTEFHUyIKLS1maQotLQotLQkJCTs7Ci0tCQkoKikKLS0JCQlDQz0iJENDICRjZl9hcmciCi0tCQkJOzsKLS0JCWVzYWMKLS0JZG9uZQotLQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCXJlc3VsdGluZyBDQzogJyRDQyciIDE+JjYKLS0KLS1lY2hvICIke2FzX21lOi1jb25maWd1cmV9OjIwNTE6IHRlc3RpbmcgcmVzdWx0aW5nIENDOiAnJENDJyAuLi4iIDE+JjUKLS0KLS0JdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIglyZXN1bHRpbmcgQ0ZMQUdTOiAnJENGTEFHUyciIDE+JjYKLS0KLS1lY2hvICIke2FzX21lOi1jb25maWd1cmV9OjIwNTU6IHRlc3RpbmcgcmVzdWx0aW5nIENGTEFHUzogJyRDRkxBR1MnIC4uLiIgMT4mNQotLQotLQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCXJlc3VsdGluZyBDUFBGTEFHUzogJyRDUFBGTEFHUyciIDE+JjYKLS0KLS1lY2hvICIke2FzX21lOi1jb25maWd1cmV9OjIwNTk6IHRlc3RpbmcgcmVzdWx0aW5nIENQUEZMQUdTOiAnJENQUEZMQUdTJyAuLi4iIDE+JjUKLS0KLS0JOzsKLS0oKikKLS0JZWNobyAiJGFzX21lOjIwNjM6IHJlc3VsdDogb2siID4mNQotLWVjaG8gIiR7RUNIT19UfW9rIiA+JjYKLS0JOzsKLS1lc2FjCi0tCi0gZWNobyAiJGFzX21lOjIwNjg6IGNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCR7TUFLRX0iID4mNQotIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJHtNQUtFfS4uLiAkRUNIT19DIiA+JjYKLSBzZXQgZHVtbXkgJHtNQUtFLW1ha2V9OyBhY19tYWtlPWBlY2hvICIkMiIgfCBzZWQgJ3ksLi8rLSxfX3BfLCdgCi0tLSAKLTIuOC4zCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnlhY2MvYnlhY2MvYnlhY2Mtb3Blbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnlhY2MvYnlhY2MvYnlhY2Mtb3Blbi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA1ODMxMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjL2J5YWNjLW9wZW4ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi1VYnVudHUgZGVmYXVsdHMgdG8gcGFzc2luZyBfRk9SVElGWV9TT1VSQ0U9MiB3aGljaCBicmVha3MgYnlhY2MgYXMgaXQgZG9lc24ndAotcGFzcyBlbm91Z2ggYXJndW1lbnRzIHRvIG9wZW4oKToKLQotIGlubGluZWQgZnJvbSAnb3Blbl90bXBmaWxlJyBhdCBieWFjYy0yMDE1MDcxMS9tYWluLmM6NTg4OjU6Ci0gL3Vzci9pbmNsdWRlL3g4Nl82NC1saW51eC1nbnUvYml0cy9mY250bDIuaDo1MDoyNDogZXJyb3I6IGNhbGwgdG8gJ19fb3Blbl9taXNzaW5nX21vZGUnIGRlY2xhcmVkIHdpdGggYXR0cmlidXRlIGVycm9yOgotIG9wZW4gd2l0aCBPX0NSRUFUIGluIHNlY29uZCBhcmd1bWVudCBuZWVkcyAzIGFyZ3VtZW50cwotCi1BZGQgYSBtb2RlIG9mIDA2NjYgdG8gZml4IHRoaXMuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KLQotZGlmZiAtLWdpdCBhL21haW4uYyBiL21haW4uYwotaW5kZXggNjIwY2UzZi4uODIwNzFhNCAxMDA2NDQKLS0tLSBhL21haW4uYwotKysrIGIvbWFpbi5jCi1AQCAtNTI2LDcgKzUyNiw3IEBAIG15X21rc3RlbXAoY2hhciAqdGVtcCkKLSAgICAgfQotICAgICBpZiAoKG5hbWUgPSB0ZW1wbmFtKGRuYW1lLCBmbmFtZSkpICE9IDApCi0gICAgIHsKLS0JZmQgPSBvcGVuKG5hbWUsIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1JEV1IpOwotKyAgICAgIGZkID0gb3BlbihuYW1lLCBPX0NSRUFUIHwgT19FWENMIHwgT19SRFdSLCAwNjY2KTsKLSAJc3RyY3B5KHRlbXAsIG5hbWUpOwotICAgICB9Ci0gICAgIGVsc2UKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnlhY2MvYnlhY2NfMjAxNjEyMDIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjXzIwMTYxMjAyLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTVmOGFiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnlhY2MvYnlhY2NfMjAxNjEyMDIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jIFNpZ2guIFRoaXMgaXMgb25lIG9mIHRob3NlIHBsYWNlcyB3aGVyZSBldmVyeW9uZSBsaWNlbnNlcyBpdCBkaWZmZXJlbnRseS4gU29tZW9uZQotIyBldmVuIGFwcGx5IFVDQiB0byBpdCAoRnJlZS9OZXQvT3BlbkJTRCkuIFRoZSBtYWludGFpbmVyIHN0YXRlcyB0aGF0OgotIyAiSSd2ZSBmb3VuZCBubyByZWxpYWJsZSBzb3VyY2Ugd2hpY2ggc3RhdGVzIHRoYXQgYnlhY2MgbXVzdCBiZWFyIGEgVUNCIGNvcHlyaWdodC4iCi0jIFNldHRpbmcgdG8gUEQgYXMgdGhpcyBpcyB3aGF0IHRoZSB1cHN0cmVhbSBoYXMgaXQgYXMuCi0KLUxJQ0VOU0UgPSAiUEQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9wYWNrYWdlL2RlYmlhbi9jb3B5cmlnaHQ7bWQ1PTc0NTMzZDMyZmZkMzhiY2E0Y2JmMWYxMzA1ZjhiYzYwIgotcmVxdWlyZSBieWFjYy5pbmMKLQotCi1TUkNfVVJJW21kNXN1bV0gPSAiNDhlZjM4NDQ3ZjJjYzg2NGM3MGVmODY0YjI2Y2Y4MTciCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzBkYzU4Y2ZjZGI3MDhlZWE3YmEwMjJkYjI5YjQxZDJkMzkyZjIwNzI3NDkxYjk1Njk1NDM2NmYyZjIxMTdmMCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnppcDIvYnppcDItMS4wLjYvTWFrZWZpbGUuYW0gYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyLTEuMC42L01ha2VmaWxlLmFtCmluZGV4IDA1ZDM4OWYuLmRjZjY0NTggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnppcDIvYnppcDItMS4wLjYvTWFrZWZpbGUuYW0KKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9NYWtlZmlsZS5hbQpAQCAtNDgsNyArNDgsOCBAQAogCWVsc2UgZWNobyAiRkFJTDogc2FtcGxlMyBkZWNvbXByZXNzIjsgZmkKIAogaW5zdGFsbC1wdGVzdDoKLQljcCAkKHNyY2RpcikvTWFrZWZpbGUJCSQoREVTVERJUikvCisJc2VkICAtbiAnL15ydW50ZXN0Oi8sL15pbnN0YWxsLXB0ZXN0Oi97L15pbnN0YWxsLXB0ZXN0Oi8hcH0nIFwKKyAgICAgICAgICAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAgICAgPiAkKERFU1RESVIpL01ha2VmaWxlCiAJY3AgJChzcmNkaXIpL3NhbXBsZTEucmVmCSQoREVTVERJUikvCiAJY3AgJChzcmNkaXIpL3NhbXBsZTIucmVmCSQoREVTVERJUikvCiAJY3AgJChzcmNkaXIpL3NhbXBsZTMucmVmCSQoREVTVERJUikvCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyXzEuMC42LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMl8xLjAuNi5iYgppbmRleCAwNTEyYTc1Li5kZTY2OGQ2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyXzEuMC42LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnppcDIvYnppcDJfMS4wLjYuYmIKQEAgLTM0LDcgKzM0LDYgQEAKIEVYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLWJpbmRpcj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQTn0iCiAKIGRvX2luc3RhbGxfcHRlc3QgKCkgewotCWNwIC1mICR7Qn0vTWFrZWZpbGUgJHtEfSR7UFRFU1RfUEFUSH0vTWFrZWZpbGUKIAlzZWQgLWkgLWUgInN8Xk1ha2VmaWxlOnxfTWFrZWZpbGU6fCIgJHtEfSR7UFRFU1RfUEFUSH0vTWFrZWZpbGUKIH0KIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMuaW5jCmluZGV4IGMzZmE0NTkuLmFjNGQyMjUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy5pbmMKQEAgLTEsNCArMSw1IEBACiBTVU1NQVJZID0gIkFuIEludGVybmV0IHByaW50aW5nIHN5c3RlbSBmb3IgVW5peCIKK0hPTUVQQUdFID0gImh0dHBzOi8vd3d3LmN1cHMub3JnLyIKIFNFQ1RJT04gPSAiY29uc29sZS91dGlscyIKIExJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIiCiBERVBFTkRTID0gImdudXRscyBsaWJwbmcganBlZyBkYnVzIGRidXMtZ2xpYiB6bGliIGxpYnVzYiIKQEAgLTc5LDEzICs4MCw2IEBACiAJZmkKIH0KIAotcHl0aG9uIGRvX3BhY2thZ2VfYXBwZW5kKCkgewotICAgIGltcG9ydCBzdWJwcm9jZXNzCi0gICAgIyBDaGFuZ2UgcGVybWlzc2lvbnMgYmFjayB0aGUgd2F5IHRoZXkgd2VyZSwgdGhleSBwcm9iYWJseSBoYWQgYSByZWFzb24uLi4KLSAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInKQotICAgIHN1YnByb2Nlc3MuY2FsbCgnY2htb2QgMDUxMSAlcy9pbnN0YWxsL2N1cHMvdmFyL3J1bi9jdXBzL2NlcnRzJyAlIHdvcmtkaXIsIHNoZWxsPVRydWUpCi19Ci0KIFBBQ0tBR0VTID0rICIke1BOfS1saWIgJHtQTn0tbGliaW1hZ2UiCiAKIFJERVBFTkRTXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgJ3Byb2NwcycsICcnLCBkKX0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwc18yLjIuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzXzIuMi4yLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTc0YzMwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzXzIuMi4yLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1yZXF1aXJlIGN1cHMuaW5jCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT1mMjEyYjQzMzhkYjBkYThjYjg5MmU5NGJmMjk0OTQ2MCIKLQotU1JDX1VSSVttZDVzdW1dID0gIjAzNmY2YmRhNjIwMmFlM2UyODBhYzAwYzcxMGI1Y2E0IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImY1ODliYjdkNWQxZGMzYWEwOTE1ZDdjZjJiODA4NTcxZWYyZTE1MzBjZDFhNmViZTc2YWU4ZjlmNDk5NGU0ZjYiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwc18yLjIuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzXzIuMi40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOTRiNjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwc18yLjIuNC5iYgpAQCAtMCwwICsxLDYgQEAKK3JlcXVpcmUgY3Vwcy5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PWYyMTJiNDMzOGRiMGRhOGNiODkyZTk0YmYyOTQ5NDYwIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDI2ZTVhMGE1NzRhNjlmZTFkMDEwNzliMjkzMWZjNDkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTk2ZDRkYjcyNjUxYzMzNTQ2OWFlNWYzN2IwZGE3MmFjOWY5N2Q3M2UzMDgzOGQ3ODcwNjVmNTU5ZGVhOThjYyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjUvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjYvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTMuNS8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMy42LzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjYvMDAwMS1leHBsaWNpdGx5LWRpc2FibGUtcmVwbGFjaW5nLWdldG9wdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjYvMDAwMS1leHBsaWNpdGx5LWRpc2FibGUtcmVwbGFjaW5nLWdldG9wdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTFmODdjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTMuNi8wMDAxLWV4cGxpY2l0bHktZGlzYWJsZS1yZXBsYWNpbmctZ2V0b3B0LnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1N1YmplY3Q6IGV4cGxpY2l0bHkgZGlzYWJsZSByZXBsYWNpbmcgZ2V0b3B0CisKK0V4cGxpY2l0bHkgZGlzYWJsZSByZXBsYWNpbmcgZ2V0b3B0IHRvIGF2b2lkIGNvbXBpbGF0aW9uIGVycm9yIGxpa2UgYmVsb3cuCisKKyAgeHN0cnRvbC1lcnJvci5jOjg0OjI2OiBlcnJvcjogaW52YWxpZCB1c2Ugb2YgdW5kZWZpbmVkIHR5cGUgJ3N0cnVjdCBycGxfb3B0aW9uJworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3dvcmthcm91bmRdCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBtNC9nZXRvcHQubTQgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbTQvZ2V0b3B0Lm00IGIvbTQvZ2V0b3B0Lm00CitpbmRleCAzZWJjN2I3Li44OTM0NDI2IDEwMDY0NAorLS0tIGEvbTQvZ2V0b3B0Lm00CisrKysgYi9tNC9nZXRvcHQubTQKK0BAIC0yMiw4ICsyMiw4IEBAIEFDX0RFRlVOKFtnbF9GVU5DX0dFVE9QVF9QT1NJWF0sCisgICAgIGZpCisgICBdKQorICAgaWYgdGVzdCAkUkVQTEFDRV9HRVRPUFQgPSAxOyB0aGVuCistICAgIGRubCBBcnJhbmdlIGZvciBnZXRvcHQuaCB0byBiZSBjcmVhdGVkLgorLSAgICBnbF9HRVRPUFRfU1VCU1RJVFVURV9IRUFERVIKKysgICAgZG5sIEV4cGxpY2l0bHkgZGlzYWJsZSByZXBsYWNpbmcgZ2V0b3B0CisrICAgIDoKKyAgIGZpCisgXSkKKyAKKy0tIAorMi4xMS4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjUvcnVuLXB0ZXN0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTMuNi9ydW4tcHRlc3QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjUvcnVuLXB0ZXN0CnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMy42L3J1bi1wdGVzdApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy5pbmMKaW5kZXggMjQzMzQxYS4uN2M1YmU1MCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMuaW5jCkBAIC0xLDQgKzEsNSBAQAogU1VNTUFSWSA9ICJEaWZmdXRpbHMgY29udGFpbnMgdG9vbHMgdXNlZCBmb3IgZmluZGluZyBkaWZmZXJlbmNlcyBiZXR3ZWVuIGZpbGVzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9kaWZmdXRpbHMvZGlmZnV0aWxzLmh0bWwiCiBERVNDUklQVElPTiA9ICJEaWZmdXRpbHMgY29udGFpbnMgdGhlIEdOVSBkaWZmLCBkaWZmMywgXAogc2RpZmYsIGFuZCBjbXAgdXRpbGl0aWVzLiBUaGVzZSBwcm9ncmFtcyBhcmUgdXN1YWxseSBcCiB1c2VkIGZvciBjcmVhdGluZyBwYXRjaCBmaWxlcy4iCkBAIC02LDEzICs3LDYgQEAKIAogaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyB1cGRhdGUtYWx0ZXJuYXRpdmVzIGdldHRleHQKIAotIyBkaWZmdXRpbHMgYXNzdW1lcyBub24tZ2xpYmMgY29tcGlsYXRpb24gd2l0aCB1Y2xpYmMgYW5kCi0jIHRoaXMgY2F1c2VzIGl0IHRvIGdlbmVyYXRlIGl0cyBvd24gaW1wbGVtZW50YXRpb25zIG9mCi0jIHN0YW5kYXJkIGZ1bmN0aW9uYWxpdHkuICByZWdleC5jIGFjdHVhbGx5IGJyZWFrcyBjb21waWxhdGlvbgotIyBiZWNhdXNlIGl0IHVzZXMgX19tZW1wY3B5LCB0aGVyZSBhcmUgb3RoZXIgdGhpbmdzIChUQkQ6Ci0jIHNlZSBkaWZmdXRpbHMubWsgaW4gYnVpbGRyb290KQotRVhUUkFfT0VDT05GX2xpYmMtdWNsaWJjID0gIi0td2l0aG91dC1pbmNsdWRlZC1yZWdleCIKLQogQUxURVJOQVRJVkVfJHtQTn0gPSAiZGlmZiBjbXAiCiBBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlsc18zLjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHNfMy41LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDM1ODRiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlsc18zLjUuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi1MSUNFTlNFID0gIkdQTHYzKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgotCi1yZXF1aXJlIGRpZmZ1dGlscy5pbmMKLQotU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2RpZmZ1dGlscy9kaWZmdXRpbHMtJHtQVn0udGFyLnh6IFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKLSIKLQotRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtbGlic2lnc2Vndi1wcmVmaXgiCi0KLSMgRml4ICJBcmd1bWVudCBsaXN0IHRvbyBsb25nIiBlcnJvciB3aGVuIGxlbihUTVBESVIpID0gNDEwCi1hY3BhdGhzID0gIi1JIC4vbTQiCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKLQkjIE5lZWQgdG8gcmVtb3ZlIGdldHRleHQgbWFjcm9zIHdpdGggd2VpcmQgbWl4IG9mIHZlcnNpb25zCi0JZm9yIGkgaW4gY29kZXNldC5tNCBnZXR0ZXh0X2dsLm00IGludGxtYWNvc3gubTQgaW50dHlwZXMtcHJpLm00IGxpYi1sZF9nbC5tNCBsaWItcHJlZml4X2dsLm00IHBvX2dsLm00IHNzaXplX3QubTQgd2NoYXJfdC5tNCB3aW50X3QubTQ7IGRvCi0JCXJtIC1mICR7U30vbTQvJGkKLQlkb25lCi19Ci0KLVNSQ19VUklbbWQ1c3VtXSA9ICI1NjkzNTQ2OTdmZjFjZmM5YTlkZTM3ODEzNjEwMTVmYSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJkYWQzOThjY2Q1YjlmYWNhNmIwYWIyMTlhMDM2NDUzZjYyYTYwMmE1NjIwM2FjNjU5YjQzZTg4OWJlYzM1NTMzIgotCi1pbmhlcml0IHB0ZXN0Ci0KLWRvX2luc3RhbGxfcHRlc3QoKSB7Ci0JdD0ke0R9JHtQVEVTVF9QQVRIfQotCWluc3RhbGwgLUQgJHtTfS9idWlsZC1hdXgvdGVzdC1kcml2ZXIgJHQvYnVpbGQtYXV4L3Rlc3QtZHJpdmVyCi0JY3AgLXIgJHtTfS90ZXN0cyAkdC8KLQlpbnN0YWxsICR7Qn0vdGVzdHMvTWFrZWZpbGUgJHQvdGVzdHMvCi0Jc2VkIC1lICdzfF5NYWtlZmlsZTp8X01ha2VmaWxlOnwnIFwKLQkgICAgLWUgJ3N8YmFzaHxzaHwnIFwKLQkgICAgLWUgJ3N8XnRvcF9zcmNkaXIgPSBcKC4qXCl8dG9wX3NyY2RpciA9IC4uXC98JyBcCi0JICAgIC1lICdzfF5zcmNkaXIgPSBcKC4qXCl8c3JjZGlyID0gLnwnIFwKLQkgICAgLWUgJ3N8ImAkKGJ1aWx0X3Byb2dyYW1zKWAifGRpZmZ8JyBcCi0JICAgIC1lICdzfGdhd2t8YXdrfGcnIFwKLQkgICAgLWkgJHQvdGVzdHMvTWFrZWZpbGUKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlsc18zLjYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHNfMy42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYWRkNjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHNfMy42LmJiCkBAIC0wLDAgKzEsMzkgQEAKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK3JlcXVpcmUgZGlmZnV0aWxzLmluYworCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZGlmZnV0aWxzL2RpZmZ1dGlscy0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorU1JDX1VSSV9hcHBlbmRfbGliYy1nbGliYyA9ICIgZmlsZTovLzAwMDEtZXhwbGljaXRseS1kaXNhYmxlLXJlcGxhY2luZy1nZXRvcHQucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwN2NmMjg2NjcyY2VkMjZmYmE1NGNkMDMxM2JkYzA3MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkNjIxZThiZGQ0YjU3MzkxOGM4MTQ1ZjdhZTYxODE3ZDFiZTlkZWI0YzhkMjMyOGE2NWNlYThlMTFkNzgzYmQ2IgorCitFWFRSQV9PRUNPTkYgKz0gImFjX2N2X3BhdGhfUFJfUFJPR1JBTT0ke2JpbmRpcn0vcHIgLS13aXRob3V0LWxpYnNpZ3NlZ3YtcHJlZml4IgorCisjIEZpeCAiQXJndW1lbnQgbGlzdCB0b28gbG9uZyIgZXJyb3Igd2hlbiBsZW4oVE1QRElSKSA9IDQxMAorYWNwYXRocyA9ICItSSAuL200IgorCitpbmhlcml0IHB0ZXN0CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJdD0ke0R9JHtQVEVTVF9QQVRIfQorCWluc3RhbGwgLUQgJHtTfS9idWlsZC1hdXgvdGVzdC1kcml2ZXIgJHQvYnVpbGQtYXV4L3Rlc3QtZHJpdmVyCisJY3AgLXIgJHtTfS90ZXN0cyAkdC8KKwlpbnN0YWxsICR7Qn0vdGVzdHMvTWFrZWZpbGUgJHQvdGVzdHMvCisJc2VkIC1lICdzLC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0sLGcnIFwKKwkgICAgLWUgJ3N8JHtERUJVR19QUkVGSVhfTUFQfXx8ZycgXAorCSAgICAtZSAnczoke0hPU1RUT09MU19ESVJ9Lzo6ZycgXAorCSAgICAtZSAnczoke1JFQ0lQRV9TWVNST09UX05BVElWRX06OmcnIFwKKwkgICAgLWUgJ3M6JHtCQVNFX1dPUktESVJ9LyR7TVVMVElNQUNIX1RBUkdFVF9TWVN9OjpnJyBcCisJICAgIC1lICdzfF5NYWtlZmlsZTp8X01ha2VmaWxlOnwnIFwKKwkgICAgLWUgJ3N8YmFzaHxzaHwnIFwKKwkgICAgLWUgJ3N8XnRvcF9zcmNkaXIgPSBcKC4qXCl8dG9wX3NyY2RpciA9IC4uXC98JyBcCisJICAgIC1lICdzfF5zcmNkaXIgPSBcKC4qXCl8c3JjZGlyID0gLnwnIFwKKwkgICAgLWUgJ3N8ImAkKGJ1aWx0X3Byb2dyYW1zKWAifGRpZmZ8JyBcCisJICAgIC1lICdzfGdhd2t8YXdrfGcnIFwKKwkgICAgLWkgJHQvdGVzdHMvTWFrZWZpbGUKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZWQvZWRfMS4xNC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9lZC9lZF8xLjE0LjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlNmJkZTQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9lZC9lZF8xLjE0LjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1TVU1NQVJZID0gIkxpbmUtb3JpZW50ZWQgdGV4dCBlZGl0b3IiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZWQvIgotCi1MSUNFTlNFID0gIkdQTHYzKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTBjNzA1MWFlZjkyMTlkYzcyMzdmMjA2YzVjNDE3OWE3IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2VkLmg7ZW5kbGluZT0yMDttZDU9NGUzNmI3YTQwZTEzN2Y0MmFlZTcxODE2NTU5MGQxMjUgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWFpbi5jO2VuZGxpbmU9MTc7bWQ1PWM1YjhmNzhmMTE1ZGYxODdhZjc2ODY4YTJhZWFkMTZhIgotCi1TRUNUSU9OID0gImJhc2UiCi0KLSMgTFNCIHN0YXRlcyB0aGF0IGVkIHNob3VsZCBiZSBpbiAvYmluLwotYmluZGlyID0gIiR7YmFzZV9iaW5kaXJ9IgotCi0jIFVwc3RyZWFtIHJlZ3VsYXJseSByZW1vdmVzIHByZXZpb3VzIHJlbGVhc2VzIGZyb20gaHR0cHM6Ly9mdHAuZ251Lm9yZy9nbnUvZWQvCi1TUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8ke0JQfS50YXIubHoiCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiJHtHTlVfTUlSUk9SfS9lZC8iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI3ZjRhNTRmYTdmMzY2NDc5ZjAzNjU0YjhhZjY0NWZkMCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJmZmI5N2ViOGYyYTJiNWE3MWE5Yjk3ZTM4NzJhZGNlOTUzYWExYjg5NThlMDRjNWI3YmYxMWQ1NTZmMzI1NTJhIgotCi1FWFRSQV9PRU1BS0UgPSAiLWUgTUFLRUZMQUdTPSIKLQotaW5oZXJpdCB0ZXhpbmZvCi0KLWRvX2NvbmZpZ3VyZSgpIHsKLQkke1N9L2NvbmZpZ3VyZQotfQotCi1kb19pbnN0YWxsKCkgewotCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAotCSMgSW5mbyBkaXIgbGlzdGluZyBpc24ndCBpbnRlcmVzdGluZyBhdCB0aGlzIHBvaW50IHNvIHJlbW92ZSBpdCBpZiBpdCBleGlzdHMuCi0JaWYgWyAtZSAiJHtEfSR7aW5mb2Rpcn0vZGlyIiBdOyB0aGVuCi0JCXJtIC1mICR7RH0ke2luZm9kaXJ9L2RpcgotCWZpCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2VkL2VkXzEuMTQuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZWQvZWRfMS4xNC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZDAzYjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2VkL2VkXzEuMTQuMi5iYgpAQCAtMCwwICsxLDM1IEBACitTVU1NQVJZID0gIkxpbmUtb3JpZW50ZWQgdGV4dCBlZGl0b3IiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZWQvIgorCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTBjNzA1MWFlZjkyMTlkYzcyMzdmMjA2YzVjNDE3OWE3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2VkLmg7ZW5kbGluZT0yMDttZDU9NGUzNmI3YTQwZTEzN2Y0MmFlZTcxODE2NTU5MGQxMjUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWFpbi5jO2VuZGxpbmU9MTc7bWQ1PWM1YjhmNzhmMTE1ZGYxODdhZjc2ODY4YTJhZWFkMTZhIgorCitTRUNUSU9OID0gImJhc2UiCisKKyMgTFNCIHN0YXRlcyB0aGF0IGVkIHNob3VsZCBiZSBpbiAvYmluLworYmluZGlyID0gIiR7YmFzZV9iaW5kaXJ9IgorCisjIFVwc3RyZWFtIHJlZ3VsYXJseSByZW1vdmVzIHByZXZpb3VzIHJlbGVhc2VzIGZyb20gaHR0cHM6Ly9mdHAuZ251Lm9yZy9nbnUvZWQvCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZWQvJHtCUH0udGFyLmx6IgorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gIiR7R05VX01JUlJPUn0vZWQvIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjczZDA0Nzc4YjJhNTFmN2MzY2JmY2QyMDAxODc2YmYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjU3OTYyYmE5MzBkNzBkMDJmYzcxZDZiZTVjNWYyMzQ2YjE2OTkyYTQ1NWFiOWM0M2JlNzA2MWRlYzk4MTBkYiIKKworRVhUUkFfT0VNQUtFID0gIi1lIE1BS0VGTEFHUz0iCisKK2luaGVyaXQgdGV4aW5mbworCitkb19jb25maWd1cmUoKSB7CisJJHtTfS9jb25maWd1cmUKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKKwkjIEluZm8gZGlyIGxpc3RpbmcgaXNuJ3QgaW50ZXJlc3RpbmcgYXQgdGhpcyBwb2ludCBzbyByZW1vdmUgaXQgaWYgaXQgZXhpc3RzLgorCWlmIFsgLWUgIiR7RH0ke2luZm9kaXJ9L2RpciIgXTsgdGhlbgorCQlybSAtZiAke0R9JHtpbmZvZGlyfS9kaXIKKwlmaQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2xfNC4xMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZXRodG9vbC9ldGh0b29sXzQuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVmZTliOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZXRodG9vbC9ldGh0b29sXzQuMTEuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJEaXNwbGF5IG9yIGNoYW5nZSBldGhlcm5ldCBjYXJkIHNldHRpbmdzIgorREVTQ1JJUFRJT04gPSAiQSBzbWFsbCB1dGlsaXR5IGZvciBleGFtaW5pbmcgYW5kIHR1bmluZyB0aGUgc2V0dGluZ3Mgb2YgeW91ciBldGhlcm5ldC1iYXNlZCBuZXR3b3JrIGludGVyZmFjZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9uZXR3b3JrL2V0aHRvb2wvIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2V0aHRvb2wuYztiZWdpbmxpbmU9NDtlbmRsaW5lPTE3O21kNT1jMTliMzA1NDhjNTgyNTc3ZmM2YjQ0MzYyNmZjMTIxNiIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L3NvZnR3YXJlL25ldHdvcmsvZXRodG9vbC9ldGh0b29sLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vYXZvaWRfcGFyYWxsZWxfdGVzdHMucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4ZjEwNzI2Nzk4ODhjOTMzNWU0OWIxN2VmYjc5OGI0YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhZjJmZDk2OTJmMzE1OWQzYWIxZTQxZTZmOWI3ZDhkYjJhNDY5M2YxY2IyMjM0OGM4OGJhODlmNzBmMGU2NTAzIgorCitpbmhlcml0IGF1dG90b29scyBwdGVzdAorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIm1ha2UiCisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisgICBvZV9ydW5tYWtlIGJ1aWxkdGVzdC1URVNUUworfQorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKyAgIGNwICR7Qn0vTWFrZWZpbGUgICAgICAgICAgICAgICAgICR7RH0ke1BURVNUX1BBVEh9CisgICBpbnN0YWxsICR7Qn0vdGVzdC1jbWRsaW5lICAgICAgICAke0R9JHtQVEVTVF9QQVRIfQorICAgaW5zdGFsbCAke0J9L3Rlc3QtZmVhdHVyZXMgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0KKyAgIGluc3RhbGwgJHtCfS9ldGh0b29sICAgICAgICAgICAgICR7RH0ke1BURVNUX1BBVEh9L2V0aHRvb2wKKyAgIHNlZCAtaSAncy9eTWFrZWZpbGUvX01ha2VmaWxlLycgICR7RH0ke1BURVNUX1BBVEh9L01ha2VmaWxlCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2V0aHRvb2wvZXRodG9vbF80LjguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2V0aHRvb2wvZXRodG9vbF80LjguYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYWYyZTIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2xfNC44LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotU1VNTUFSWSA9ICJEaXNwbGF5IG9yIGNoYW5nZSBldGhlcm5ldCBjYXJkIHNldHRpbmdzIgotREVTQ1JJUFRJT04gPSAiQSBzbWFsbCB1dGlsaXR5IGZvciBleGFtaW5pbmcgYW5kIHR1bmluZyB0aGUgc2V0dGluZ3Mgb2YgeW91ciBldGhlcm5ldC1iYXNlZCBuZXR3b3JrIGludGVyZmFjZXMuIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9uZXR3b3JrL2V0aHRvb2wvIgotU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCi1MSUNFTlNFID0gIkdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2V0aHRvb2wuYztiZWdpbmxpbmU9NDtlbmRsaW5lPTE3O21kNT1jMTliMzA1NDhjNTgyNTc3ZmM2YjQ0MzYyNmZjMTIxNiIKLQotU1JDX1VSSSA9ICJodHRwczovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2V0aHRvb2wtJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCi0gICAgICAgICAgIGZpbGU6Ly9hdm9pZF9wYXJhbGxlbF90ZXN0cy5wYXRjaCBcCi0gICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjI4YzRhNGQ4NWMzM2Y1NzNjNDlmZjZkODFlYzA5NGZkIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFiZDgyZWJlM2Q0MWRlMWI3YjBkOGY0ZmIxOGE4ZTg0NjZmYmE5MzRjOTUyYmM1YzUwMDI4MzZmZmE4YmI2MDYiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0Ci1SREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSIKLQotZG9fY29tcGlsZV9wdGVzdCgpIHsKLSAgIG9lX3J1bm1ha2UgYnVpbGR0ZXN0LVRFU1RTCi19Ci0KLWRvX2luc3RhbGxfcHRlc3QgKCkgewotICAgY3AgJHtCfS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0KLSAgIGluc3RhbGwgJHtCfS90ZXN0LWNtZGxpbmUgICAgICAgICR7RH0ke1BURVNUX1BBVEh9Ci0gICBpbnN0YWxsICR7Qn0vdGVzdC1mZWF0dXJlcyAgICAgICAke0R9JHtQVEVTVF9QQVRIfQotICAgaW5zdGFsbCAke0J9L2V0aHRvb2wgICAgICAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0vZXRodG9vbAotICAgc2VkIC1pICdzL15NYWtlZmlsZS9fTWFrZWZpbGUvJyAgJHtEfSR7UFRFU1RfUEFUSH0vTWFrZWZpbGUKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMuaW5jCmluZGV4IGJmZWRmODcuLmFkMzY0MjkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLmluYwpAQCAtMTMsMTEgKzEzLDQgQEAKIEFMVEVSTkFUSVZFXyR7UE59ID0gImZpbmQgeGFyZ3MiCiBBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCiAKLSMgZGlmZnV0aWxzIGFzc3VtZXMgbm9uLWdsaWJjIGNvbXBpbGF0aW9uIHdpdGggdWNsaWJjIGFuZAotIyB0aGlzIGNhdXNlcyBpdCB0byBnZW5lcmF0ZSBpdHMgb3duIGltcGxlbWVudGF0aW9ucyBvZgotIyBzdGFuZGFyZCBmdW5jdGlvbmFsaXR5LiAgcmVnZXguYyBhY3R1YWxseSBicmVha3MgY29tcGlsYXRpb24KLSMgYmVjYXVzZSBpdCB1c2VzIF9fbWVtcGNweSwgdGhlcmUgYXJlIG90aGVyIHRoaW5ncyAoVEJEOgotIyBzZWUgZGlmZnV0aWxzLm1rIGluIGJ1aWxkcm9vdCkKLUVYVFJBX09FQ09ORl9saWJjLXVjbGliYyA9ICItLXdpdGhvdXQtaW5jbHVkZWQtcmVnZXgiCi0KIEJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZm9vbWF0aWMvZm9vbWF0aWMtZmlsdGVyc180LjAuMTcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Zvb21hdGljL2Zvb21hdGljLWZpbHRlcnNfNC4wLjE3LmJiCmluZGV4IDNmNDM5ZTcuLjc0MmM5YTUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZm9vbWF0aWMvZm9vbWF0aWMtZmlsdGVyc180LjAuMTcuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9mb29tYXRpYy9mb29tYXRpYy1maWx0ZXJzXzQuMC4xNy5iYgpAQCAtMSw0ICsxLDUgQEAKIFNVTU1BUlkgPSAiT3BlblByaW50aW5nIHByaW50ZXIgc3VwcG9ydCAtIGZpbHRlcnMiCitIT01FUEFHRSA9ICJodHRwczovL3dpa2kubGludXhmb3VuZGF0aW9uLm9yZy9vcGVucHJpbnRpbmcvc3RhcnQiCiBERVNDUklQVElPTiA9ICJGb29tYXRpYyBpcyBhIHByaW50ZXIgZGF0YWJhc2UgZGVzaWduZWQgdG8gbWFrZSBpdCBlYXNpZXIgdG8gc2V0IHVwIFwKIGNvbW1vbiBwcmludGVycyBmb3IgdXNlIHdpdGggVU5JWC1saWtlIG9wZXJhdGluZyBzeXN0ZW1zLlwKIEl0IHByb3ZpZGVzIHRoZSAiZ2x1ZSIgYmV0d2VlbiBhIHByaW50IHNwb29sZXIgKGxpa2UgQ1VQUyBvciBscHIpIGFuZCBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3a180LjEuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrXzQuMS40LmJiCmluZGV4IGRkYTM4ZWYuLjk5NWQzN2QgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrXzQuMS40LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrXzQuMS40LmJiCkBAIC00MSw5ICs0MSw5IEBACiAKIGRvX2luc3RhbGxfcHRlc3QoKSB7CiAJbWtkaXIgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAotCWZvciBpIGluIGBncmVwIC12RSAiQHxeJHwjfEd0LWR1bW15IiAke1N9L3Rlc3QvTWFrZXRlc3RzIHxhd2sgLUY6ICd7cHJpbnQgJDF9J2AgTWFrZXRlc3RzOyBcCisJZm9yIGkgaW4gYGdyZXAgLXZFICJAfF4kfCN8R3QtZHVtbXkiICR7U30vdGVzdC9NYWtldGVzdHMgfGF3ayAtRjogJ3twcmludCAkMX0nYCBNYWtldGVzdHMgaW5jbGliLmF3azsgXAogCSAgZG8gY3AgJHtTfS90ZXN0LyRpKiAke0R9JHtQVEVTVF9QQVRIfS90ZXN0OyBcCiAJZG9uZQogfQogCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvQ1ZFLTIwMTYtMTAyMTkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L0NWRS0yMDE2LTEwMjE5LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzRhYmUwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvQ1ZFLTIwMTYtMTAyMTkucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi1Gcm9tIDRiZWYxYTFkMzJlMjliNjg4NTU2MTYwMjBkYmZmNTc0YjljZGEwOGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBSb2JpbiBXYXR0cyA8Um9iaW4uV2F0dHNAYXJ0aWZleC5jb20+Ci1EYXRlOiBUaHUsIDI5IERlYyAyMDE2IDE1OjU3OjQzICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIEJ1ZyA2OTc0NTM6IEF2b2lkIGRpdmlkZSBieSAwIGluIHNjYW4gY29udmVyc2lvbiBjb2RlLgotCi1Bcml0aG1ldGljIG92ZXJmbG93IGR1ZSB0byBleHRyZW1lIHZhbHVlcyBpbiB0aGUgc2NhbiBjb252ZXJzaW9uCi1jb2RlIGNhbiBjYXVzZSBhIGRpdmlzaW9uIGJ5IDAuCi0KLUF2b2lkIHRoaXMgd2l0aCBhIHNpbXBsZSBleHRyYSBjaGVjay4KLQotICBkeF9vbGQ9Y2Y4MTRkODEKLSAgZW5kcC0+eF9uZXh0PWIwZTg1OWI5Ci0gIGFscC0+eF9uZXh0PTgwNjlhNzNhCi0KLWxlYWRzIHRvIGR4X2RlbiA9IDAKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQ1ZFOiBDVkUtMjAxNi0xMDIxOQotCi1TaWduZWQtb2ZmLWJ5OiBDYXRhbGluIEVuYWNoZSA8Y2F0YWxpbi5lbmFjaGVAd2luZHJpdmVyLmNvbT4KLS0tLQotIGJhc2UvZ3hmaWxsLmMgfCA0ICsrLS0KLSAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvYmFzZS9neGZpbGwuYyBiL2Jhc2UvZ3hmaWxsLmMKLWluZGV4IDk5MTk2YzAuLjJmODFiYjAgMTAwNjQ0Ci0tLS0gYS9iYXNlL2d4ZmlsbC5jCi0rKysgYi9iYXNlL2d4ZmlsbC5jCi1AQCAtMTc0MSw3ICsxNzQxLDcgQEAgaW50ZXJzZWN0KGFjdGl2ZV9saW5lICplbmRwLCBhY3RpdmVfbGluZSAqYWxwLCBmaXhlZCB5LCBmaXhlZCB5MSwgZml4ZWQgKnBfeV9uZXcKLSAgICAgZml4ZWQgZHhfb2xkID0gYWxwLT54X2N1cnJlbnQgLSBlbmRwLT54X2N1cnJlbnQ7Ci0gICAgIGZpeGVkIGR4X2RlbiA9IGR4X29sZCArIGVuZHAtPnhfbmV4dCAtIGFscC0+eF9uZXh0OwotIAotLSAgICBpZiAoZHhfZGVuIDw9IGR4X29sZCkKLSsgICAgaWYgKGR4X2RlbiA8PSBkeF9vbGQgfHwgZHhfZGVuID09IDApCi0gICAgICAgICByZXR1cm4gZmFsc2U7IC8qIEludGVyc2VjdGlvbiBpc24ndCBwb3NzaWJsZS4gKi8KLSAgICAgZHkgPSB5MSAtIHk7Ci0gICAgIGlmX2RlYnVnMygnRicsICJbRl1jcm9zczogZHk9JWcsIGR4X29sZD0lZywgZHhfbmV3PSVnXG4iLAotQEAgLTE3NTAsNyArMTc1MCw3IEBAIGludGVyc2VjdChhY3RpdmVfbGluZSAqZW5kcCwgYWN0aXZlX2xpbmUgKmFscCwgZml4ZWQgeSwgZml4ZWQgeTEsIGZpeGVkICpwX3lfbmV3Ci0gICAgIC8qIERvIHRoZSBjb21wdXRhdGlvbiBpbiBzaW5nbGUgcHJlY2lzaW9uICovCi0gICAgIC8qIGlmIHRoZSB2YWx1ZXMgYXJlIHNtYWxsIGVub3VnaC4gKi8KLSAgICAgeV9uZXcgPQotLSAgICAgICAgKChkeSB8IGR4X29sZCkgPCAxTCA8PCAoc2l6ZV9vZihmaXhlZCkgKiA0IC0gMSkgPwotKyAgICAgICAgKCgodWZpeGVkKShkeSB8IGR4X29sZCkpIDwgKDFMIDw8IChzaXplX29mKGZpeGVkKSAqIDQgLSAxKSkgPwotICAgICAgICAgIGR5ICogZHhfb2xkIC8gZHhfZGVuIDoKLSAgICAgICAgICAoSU5DUl9FWFBSKG1xX2Nyb3NzKSwgZml4ZWRfbXVsdF9xdW8oZHksIGR4X29sZCwgZHhfZGVuKSkpCi0gICAgICAgICArIHk7Ci0tLSAKLTIuMTAuMgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L0NWRS0yMDE2LTEwMjIwLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9DVkUtMjAxNi0xMDIyMC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWUxZThiYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L0NWRS0yMDE2LTEwMjIwLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotRnJvbSBkYWY4NTcwMWRhYjA1ZjE3ZTkyNGE0OGE4MWVkYzkxOTViNGEwNGU4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2VuIFNoYXJwIDxrZW4uc2hhcnBAYXJ0aWZleC5jb20+Ci1EYXRlOiBXZWQsIDIxIERlYyAyMDE2IDE2OjU0OjE0ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIGZpeCBjcmFzaCB3aXRoIGJhZCBkYXRhIHN1cHBsaWVkIHRvIG1ha2VpbWFnZWRldmljZQotCi1CdWcgIzY5NzQ1MCAiTnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGd4X2RldmljZV9maW5hbGl6ZSgpIgotCi1UaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgdGhlIGNvZGUgdG8gZmluYWxpc2UgYSBkZXZpY2UgdW5jb25kaXRpb25hbGx5Ci1mcmVlcyB0aGUgaWNjX3N0cnVjdCBtZW1iZXIgb2YgdGhlIGRldmljZSBzdHJ1Y3R1cmUuIEhvd2V2ZXIgdGhpcwotcGFydGljdWxhciAod2VpcmQpIGRldmljZSBpcyBub3Qgc2V0dXAgYXMgYSBub3JtYWwgZGV2aWNlLCBwcm9iYWJseQotYmVjYXVzZSBpdHMgdmVyeSwgdmVyeSBhbmNpZW50LiBJdHMgcG9zc2libGUgZm9yIHRoZSBpbml0aWFsaXNhdGlvbgotb2YgdGhlIGRldmljZSB0byBhYm9ydCB3aXRoIGFuIGVycm9yIGJlZm9yZSBjYWxsaW5nIGdzX21ha2VfbWVtX2RldmljZSgpCi13aGljaCBpcyB3aGVyZSB0aGUgaWNjX3N0cnVjdCBtZW1iZXIgZ2V0cyBhbGxvY2F0ZWQgKG9yIHNldCB0byBOVUxMKS4KLQotSWYgdGhhdCBoYXBwZW5zLCB0aGVuIHRoZSBjbGVhbnVwIGNvZGUgdHJpZXMgdG8gZnJlZSB0aGUgZGV2aWNlLCB3aGljaAotY2FsbHMgZmluYWxpemUoKSB3aGljaCB0cmllcyB0byBmcmVlIGEgZ2FyYmFnZSBwb2ludGVyLgotCi1TZXR0aW5nIHRoZSBkZXZpY2UgbWVtb3J5IHRvIDB4MDAgYWZ0ZXIgd2UgYWxsb2NhdGUgaXQgbWVhbnMgdGhhdCB0aGUKLWljY19zdHJ1Y3QgbWVtYmVyIHdpbGwgYmUgTlVMTDwgYW5kIG91ciBtZW1vcnkgbWFuYWdlciBhbGxvd3MgZm9yIHRoYXQKLWhhcHBpbHkgZW5vdWdoLCB3aGljaCBhdm9pZHMgdGhlIHByb2JsZW0uCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLUNWRTogQ1ZFLTIwMTYtMTAyMjAKLQotU2lnbmVkLW9mZi1ieTogQ2F0YWxpbiBFbmFjaGUgPGNhdGFsaW4uZW5hY2hlQHdpbmRyaXZlci5jb20+Ci0tLS0KLSBiYXNlL2dzZGV2bWVtLmMgfCAxMiArKysrKysrKysrKysKLSAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvYmFzZS9nc2Rldm1lbS5jIGIvYmFzZS9nc2Rldm1lbS5jCi1pbmRleCA5N2I5Y2Y0Li5mZTc1YmNjIDEwMDY0NAotLS0tIGEvYmFzZS9nc2Rldm1lbS5jCi0rKysgYi9iYXNlL2dzZGV2bWVtLmMKLUBAIC0yMjUsNiArMjI1LDE4IEBAIGdzX21ha2V3b3JkaW1hZ2VkZXZpY2UoZ3hfZGV2aWNlICoqIHBuZXdfZGV2LCBjb25zdCBnc19tYXRyaXggKiBwbWF0LAotIAotICAgICBpZiAocG5ldyA9PSAwKQotICAgICAgICAgcmV0dXJuX2Vycm9yKGdzX2Vycm9yX1ZNZXJyb3IpOwotKwotKyAgICAvKiBCdWcgIzY5NzQ1MCAiTnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGd4X2RldmljZV9maW5hbGl6ZSgpIgotKyAgICAgKiBJZiB3ZSBoYXZlIGluY29ycmVjdCBkYXRhIHBhc3NlZCB0byBnc19pbml0aWFsaXNlX3dvcmRpbWFnZWRldmljZSgpIHRoZW4gdGhlCi0rICAgICAqIGluaXRpYWxpc2F0aW9uIHdpbGwgZmFpbCwgY3J1Y2lhbGx5IGl0IHdpbGwgZmFpbCAqYmVmb3JlKiBpdCBjYWxscwotKyAgICAgKiBnc19tYWtlX21lbV9kZXZpY2UoKSB3aGljaCBpbml0aWFsaXNlcyB0aGUgZGV2aWNlLiBUaGlzIG1lYW5zIHRoYXQgdGhlCi0rICAgICAqIGljY19zdHJ1Y3QgbWVtYmVyIHdpbGwgYmUgdW5pbml0aWFsc2VkLCBidXQgdGhlIGRldmljZSBmaW5hbGlzZSBtZXRob2QKLSsgICAgICogd2lsbCB1bmNvbmRpdGlvbmFsbHkgZnJlZSB0aGF0IG1lbW9yeS4gU2luY2UgaXRzIGEgZ2FyYmFnZSBwb2ludGVyLCBiYWQgdGhpbmdzIGhhcHBlbi4KLSsgICAgICogQXBwYXJlbnRseSB3ZSBkbyBzdGlsbCBuZWVkIG1ha2VpbWFnZWRldmljZSB0byBiZSBhdmFpbGFibGUgZnJvbQotKyAgICAgKiBQb3N0U2NyaXB0LCBzbyBpbiBoZXJlIGp1c3QgemVybyB0aGUgZGV2aWNlIG1lbW9yeSwgd2hpY2ggbWVhbnMgdGhhdAotKyAgICAgKiB0aGUgZmluYWxpc2Ugcm91dGluZSB3b24ndCBoYXZlIGEgcHJvYmxlbS4KLSsgICAgICovCi0rICAgIG1lbXNldChwbmV3LCAweDAwLCBzdF9kZXZpY2VfbWVtb3J5LnNzaXplKTsKLSAgICAgY29kZSA9IGdzX2luaXRpYWxpemVfd29yZGltYWdlZGV2aWNlKHBuZXcsIHBtYXQsIHdpZHRoLCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnMsIG51bV9jb2xvcnMsIHdvcmRfb3JpZW50ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlX2RldmljZSwgbWVtKTsKLS0tIAotMi4xMC4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvQ1ZFLTIwMTYtNzk3OC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvQ1ZFLTIwMTYtNzk3OC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY4ZjIwNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L0NWRS0yMDE2LTc5NzgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1Gcm9tIDZmNzQ5YzBjNDRlN2I5ZTA5NzM3YjlmMjllZGYyOTkyNWEzNGYwY2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBDaHJpcyBMaWRkZWxsIDxjaHJpcy5saWRkZWxsQGFydGlmZXguY29tPgotRGF0ZTogV2VkLCA1IE9jdCAyMDE2IDA5OjU5OjI1ICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIEJ1ZyA2OTcxNzk6IFJlZmVyZW5jZSBjb3VudCBkZXZpY2UgaWNjIHByb2ZpbGUKLQotd2hlbiBjb3B5aW5nIGEgZGV2aWNlCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLUNWRTogQ1ZFLTIwMTYtNzk3OAotCi1TaWduZWQtb2ZmLWJ5OiBDYXRhbGluIEVuYWNoZSA8Y2F0YWxpbi5lbmFjaGVAd2luZHJpdmVyLmNvbT4KLS0tLQotIGJhc2UvZ3NkZXZpY2UuYyB8IDEgKwotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQotCi1kaWZmIC0tZ2l0IGEvYmFzZS9nc2RldmljZS5jIGIvYmFzZS9nc2RldmljZS5jCi1pbmRleCA3NzgxMDZmLi5hZWE5ODZhIDEwMDY0NAotLS0tIGEvYmFzZS9nc2RldmljZS5jCi0rKysgYi9iYXNlL2dzZGV2aWNlLmMKLUBAIC02MTQsNiArNjE0LDcgQEAgZ3hfZGV2aWNlX2luaXQoZ3hfZGV2aWNlICogZGV2LCBjb25zdCBneF9kZXZpY2UgKiBwcm90bywgZ3NfbWVtb3J5X3QgKiBtZW0sCi0gICAgIGRldi0+bWVtb3J5ID0gbWVtOwotICAgICBkZXYtPnJldGFpbmVkID0gIWludGVybmFsOwotICAgICByY19pbml0KGRldiwgbWVtLCAoaW50ZXJuYWwgPyAwIDogMSkpOwotKyAgICByY19pbmNyZW1lbnQoZGV2LT5pY2Nfc3RydWN0KTsKLSB9Ci0gCi0gdm9pZAotLS0gCi0yLjEwLjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9DVkUtMjAxNi03OTc5LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9DVkUtMjAxNi03OTc5LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTkzMGQzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvQ1ZFLTIwMTYtNzk3OS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLUZyb20gODc1YTAwOTVmMzc2MjZhNzIxYzdmZjU3ZDYwNmEwZjk1YWYwMzkxMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtlbiBTaGFycCA8a2VuLnNoYXJwQGFydGlmZXguY29tPgotRGF0ZTogV2VkLCA1IE9jdCAyMDE2IDEwOjEwOjU4ICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIERTQyBwYXJzZXIgLSB2YWxpZGF0ZSBwYXJhbWV0ZXJzCi0KLUJ1ZyAjNjk3MTkwICIuaW5pdGlhbGl6ZV9kc2NfcGFyc2VyIGRvZXNuJ3QgdmFsaWRhdGUgdGhlIHBhcmFtZXRlciBpcyBhIGRpY3QgdHlwZSBiZWZvcmUgdXNpbmcgaXQuIgotCi1SZWdhcmRsZXNzIG9mIGFueSBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGl0cyBzaW1wbHkgd3JvbmcgZm9yIGEgUG9zdFNjcmlwdAotb3BlcmF0b3Igbm90IHRvIHZhbGlkYXRlIGl0cyBwYXJhbWV0ZXIocykuCi0KLU5vIGRpZmZlcmVuY2VzIGV4cGVjdGVkLgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1DVkU6IENWRS0yMDE2LTc5NzkKLQotU2lnbmVkLW9mZi1ieTogQ2F0YWxpbiBFbmFjaGUgPGNhdGFsaW4uZW5hY2hlQHdpbmRyaXZlci5jb20+Ci0tLS0KLSBwc2kvemRzY3BhcnMuYyB8IDEzICsrKysrKysrKy0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvcHNpL3pkc2NwYXJzLmMgYi9wc2kvemRzY3BhcnMuYwotaW5kZXggYzA1ZTE1NC4uOWI0YjYwNSAxMDA2NDQKLS0tLSBhL3BzaS96ZHNjcGFycy5jCi0rKysgYi9wc2kvemRzY3BhcnMuYwotQEAgLTE1MCwxMSArMTUwLDE2IEBAIHppbml0aWFsaXplX2RzY19wYXJzZXIoaV9jdHhfdCAqaV9jdHhfcCkKLSAgICAgcmVmIGxvY2FsX3JlZjsKLSAgICAgaW50IGNvZGU7Ci0gICAgIG9zX3B0ciBjb25zdCBvcCA9IG9zcDsKLS0gICAgZGljdCAqIGNvbnN0IHBkaWN0ID0gb3AtPnZhbHVlLnBkaWN0OwotLSAgICBnc19tZW1vcnlfdCAqIGNvbnN0IG1lbSA9IChnc19tZW1vcnlfdCAqKWRpY3RfbWVtb3J5KHBkaWN0KTsKLS0gICAgZHNjX2RhdGFfdCAqIGNvbnN0IGRhdGEgPQotLSAgICAgICAgZ3NfYWxsb2Nfc3RydWN0KG1lbSwgZHNjX2RhdGFfdCwgJnN0X2RzY19kYXRhX3QsICJEU0MgcGFyc2VyIGluaXQiKTsKLSsgICAgZGljdCAqcGRpY3Q7Ci0rICAgIGdzX21lbW9yeV90ICptZW07Ci0rICAgIGRzY19kYXRhX3QgKmRhdGE7Ci0gCi0rICAgIGNoZWNrX3JlYWRfdHlwZSgqb3AsIHRfZGljdGlvbmFyeSk7Ci0rCi0rICAgIHBkaWN0ID0gb3AtPnZhbHVlLnBkaWN0OwotKyAgICBtZW0gPSAoZ3NfbWVtb3J5X3QgKilkaWN0X21lbW9yeShwZGljdCk7Ci0rCi0rICAgIGRhdGEgPSBnc19hbGxvY19zdHJ1Y3QobWVtLCBkc2NfZGF0YV90LCAmc3RfZHNjX2RhdGFfdCwgIkRTQyBwYXJzZXIgaW5pdCIpOwotICAgICBpZiAoIWRhdGEpCi0gICAgICAgICByZXR1cm5fZXJyb3IoZ3NfZXJyb3JfVk1lcnJvcik7Ci0gICAgIGRhdGEtPmRvY3VtZW50X2xldmVsID0gMDsKLS0tIAotMi4xMC4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvQ1ZFLTIwMTYtODYwMi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvQ1ZFLTIwMTYtODYwMi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU4NTY3Yy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L0NWRS0yMDE2LTg2MDIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi1Gcm9tIGY1Yzc1NTVjMzAzOTNlNjRlYzFmNWFiMGRmYWU1YjU1YjNiM2ZjNzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBDaHJpcyBMaWRkZWxsIDxjaHJpcy5saWRkZWxsQGFydGlmZXguY29tPgotRGF0ZTogU2F0LCA4IE9jdCAyMDE2IDE2OjEwOjI3ICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIEJ1ZyA2OTcyMDM6IGNoZWNrIGZvciBzdWZmaWNpZW50IHBhcmFtcyBpbiAuc2V0aGFsZnRvbmU1Ci0KLWFuZCBwYXJhbSB0eXBlcwotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1DVkU6IENWRS0yMDE2LTg2MDIKLQotU2lnbmVkLW9mZi1ieTogQ2F0YWxpbiBFbmFjaGUgPGNhdGFsaW4uZW5hY2hlQHdpbmRyaXZlci5jb20+Ci0tLS0KLSBwc2kvemh0Mi5jIHwgMTIgKysrKysrKysrKy0tCi0gMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9wc2kvemh0Mi5jIGIvcHNpL3podDIuYwotaW5kZXggZmI0YTI2NC4uZGZhMjdhNCAxMDA2NDQKLS0tLSBhL3BzaS96aHQyLmMKLSsrKyBiL3BzaS96aHQyLmMKLUBAIC04MiwxNCArODIsMjIgQEAgenNldGhhbGZ0b25lNShpX2N0eF90ICppX2N0eF9wKQotICAgICBnc19tZW1vcnlfdCAqbWVtOwotICAgICB1aW50IGVkZXB0aCA9IHJlZl9zdGFja19jb3VudCgmZV9zdGFjayk7Ci0gICAgIGludCBucG9wID0gMjsKLS0gICAgaW50IGRpY3RfZW51bSA9IGRpY3RfZmlyc3Qob3ApOwotKyAgICBpbnQgZGljdF9lbnVtOwotICAgICByZWYgcnZhbHVlWzJdOwotICAgICBpbnQgY25hbWUsIGNvbG9yYW50X251bWJlcjsKLSAgICAgYnl0ZSAqIHBuYW1lOwotICAgICB1aW50IG5hbWVfc2l6ZTsKLSAgICAgaW50IGhhbGZ0b25ldHlwZSwgdHlwZSA9IDA7Ci0gICAgIGdzX2dzdGF0ZSAqcGdzID0gaWdzOwotLSAgICBpbnQgc3BhY2VfaW5kZXggPSByX3NwYWNlX2luZGV4KG9wIC0gMSk7Ci0rICAgIGludCBzcGFjZV9pbmRleDsKLSsKLSsgICAgaWYgKHJlZl9zdGFja19jb3VudCgmb19zdGFjaykgPCAyKQotKyAgICAgICAgcmV0dXJuX2Vycm9yKGdzX2Vycm9yX3N0YWNrdW5kZXJmbG93KTsKLSsgICAgY2hlY2tfdHlwZSgqb3AsIHRfZGljdGlvbmFyeSk7Ci0rICAgIGNoZWNrX3R5cGUoKihvcCAtIDEpLCB0X2RpY3Rpb25hcnkpOwotKwotKyAgICBkaWN0X2VudW0gPSBkaWN0X2ZpcnN0KG9wKTsKLSsgICAgc3BhY2VfaW5kZXggPSByX3NwYWNlX2luZGV4KG9wIC0gMSk7Ci0gCi0gICAgIG1lbSA9IChnc19tZW1vcnlfdCAqKSBpZG1lbW9yeS0+c3BhY2VzX2luZGV4ZWRbc3BhY2VfaW5kZXhdOwotIAotLS0gCi0yLjEwLjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9DVkUtMjAxNy03OTc1LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9DVkUtMjAxNy03OTc1LnBhdGNoCmluZGV4IGQwODg2YzkuLmU0MDYwODYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvQ1ZFLTIwMTctNzk3NS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L0NWRS0yMDE3LTc5NzUucGF0Y2gKQEAgLTEsNiArMSw3IEBACi1Gcm9tIDVlNTdlNDgzMjk4ZGFlOGI4ZDRlYzlhYWIzN2E1MjY3MzZhYzJlOTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBTaGFpbGVzaCBNaXN0cnkgPHNoYWlsZXNoLm1pc3RyeUBob3RtYWlsLmNvLnVrPgotRGF0ZTogV2VkLCAyNiBBcHIgMjAxNyAyMjoxMjoxNCArMDEwMAorRnJvbSBiMzliZTEwMTliNGFjYzFhYTUwYzYwMjY0NjNjNTQzMzMyZTk1YTMxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2F0YWxpbiBFbmFjaGUgPGNhdGFsaW4uZW5hY2hlQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDggTWF5IDIwMTcgMTY6MTg6MTQgKzAzMDAKKwogU3ViamVjdDogW1BBVENIXSBCdWcgNjk3NjkzOiBQcmV2ZW50IFNFR1YgZHVlIHRvIGludGVnZXIgb3ZlcmZsb3cuCiAKIFdoaWxlIGJ1aWxkaW5nIGEgSHVmZm1hbiB0YWJsZSwgdGhlIHN0YXJ0IGFuZCBlbmQgcG9pbnRzIHdlcmUgc3VzY2VwdGlibGUKQEAgLTEyLDE1ICsxMywxNyBAQAogQ1ZFOiBDVkUtMjAxNy03OTc1CiAKIFNpZ25lZC1vZmYtYnk6IENhdGFsaW4gRW5hY2hlIDxjYXRhbGluLmVuYWNoZUB3aW5kcml2ZXIuY29tPgotLS0tCi0gamJpZzJkZWMvamJpZzJfaHVmZm1hbi5jIHwgNCArKy0tCi0gMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIAotZGlmZiAtLWdpdCBhL2piaWcyZGVjL2piaWcyX2h1ZmZtYW4uYyBiL2piaWcyZGVjL2piaWcyX2h1ZmZtYW4uYwotaW5kZXggNTExZTQ2MS4uYjQxODlhMSAxMDA2NDQKK0NvbnRlbnRzIG9mIHRoaXMgcGF0Y2ggd2VyZSBleHRyYWN0ZWQgZnJvbSBhIGxhcmdlciBwYXRjaCB3aGljaCBhZGRyZXNzZWQKK3R3byBDVkUncy4gIFRoZSBjb250ZXh0IChsb2NhdGlvbiBvZiB7KSB3YXMgYWxzbyBtb2RpZmllZCB0byBhcHBseSB0bworZ2hvc3RzY3JpcHQgOS4yMS4KKworU2lnbmVkLW9mZi1ieTogSm9lIFNsYXRlciA8am9lLnNsYXRlckB3aW5kcml2ZXIuY29tPgorCisKIC0tLSBhL2piaWcyZGVjL2piaWcyX2h1ZmZtYW4uYwogKysrIGIvamJpZzJkZWMvamJpZzJfaHVmZm1hbi5jCi1AQCAtNDIxLDggKzQyMSw4IEBAIGpiaWcyX2J1aWxkX2h1ZmZtYW5fdGFibGUoSmJpZzJDdHggKmN0eCwgY29uc3QgSmJpZzJIdWZmbWFuUGFyYW1zICpwYXJhbXMpCitAQCAtNDIxLDggKzQyMSw4IEBAIGpiaWcyX2J1aWxkX2h1ZmZtYW5fdGFibGUoSmJpZzJDdHggKmN0eCwKICAKICAgICAgICAgICAgICBpZiAoUFJFRkxFTiA9PSBDVVJMRU4pIHsKICAgICAgICAgICAgICAgICAgaW50IFJBTkdFTEVOID0gbGluZXNbQ1VSVEVNUF0uUkFOR0VMRU47CkBAIC0zMSw2ICszNCw0IEBACiAgICAgICAgICAgICAgICAgIGJ5dGUgZWZsYWdzID0gMDsKICAKICAgICAgICAgICAgICAgICAgaWYgKGVuZF9qID4gbWF4X2opIHsKLS0tIAotMi4xMC4yCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvYXZvaWQtaG9zdC1jb250YW1pbmF0aW9uLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hdm9pZC1ob3N0LWNvbnRhbWluYXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ3OTRlNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvYXZvaWQtaG9zdC1jb250YW1pbmF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1JlbW92ZSBoYXJkY29kZSBwYXRoIHJlZmVyIHRvIGhvc3QgdG8gYXZvaWQgaG9zdCBjb250YW1pbmF0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorZGlmZiAtLWdpdCBhL2RldmljZXMvZGV2cy5tYWsgYi9kZXZpY2VzL2RldnMubWFrCitpbmRleCAzMDcwZDJlLi5kZjY2M2YwIDEwMDY0NAorLS0tIGEvZGV2aWNlcy9kZXZzLm1haworKysrIGIvZGV2aWNlcy9kZXZzLm1haworQEAgLTU0Niw3ICs1NDYsNyBAQCAkKERFVk9CSilnZGV2eGFsdC4kKE9CSikgOiAkKERFVlNSQylnZGV2eGFsdC5jICQoR0RFVlgpICQobWF0aF9faCkgJChtZW1vcnlfX2gpXAorICMjIyBOT04gUE9SVEFCTEUsIE9OTFkgVU5JWCBXSVRIIEdDQyBTVVBQT1JUCisgCisgJChERVZPQkopWDExLnNvIDogJCh4MTFhbHRfKSAkKHgxMV8pICQoREVWU19NQUspICQoTUFLRURJUlMpCistCSQoQ0NMRCkgJChMREZMQUdTKSAtc2hhcmVkIC1vICQoREVWT0JKKVgxMS5zbyAkKHgxMWFsdF8pICQoeDExXykgLUwvdXNyL1gxMVI2L2xpYiAtbFh0IC1sU00gLWxJQ0UgLWxYZXh0IC1sWDExICQoWExJQkRJUlMpCisrCSQoQ0NMRCkgJChMREZMQUdTKSAtc2hhcmVkIC1vICQoREVWT0JKKVgxMS5zbyAkKHgxMWFsdF8pICQoeDExXykgLWxYdCAtbFNNIC1sSUNFIC1sWGV4dCAtbFgxMSAkKFhMSUJESVJTKQorIAorICMjIyMjIyAtLS0tLS0tLS0tLS0tLS0gTWVtb3J5LWJ1ZmZlcmVkIHByaW50ZXIgZGV2aWNlcyAtLS0tLS0tLS0tLS0tLS0gIyMjIyMjCisgCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMDItcHJldmVudF9yZWNvbXBpbGluZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4wMi1wcmV2ZW50X3JlY29tcGlsaW5nLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzA5MTk1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4wMi1wcmV2ZW50X3JlY29tcGlsaW5nLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotSnVzdCB1c2UgY29tbWFuZHMgcHJvdmlkZWQgYnkgZ2hvc3RzY3JpcHQtbmF0aXZlLCBwcmV2ZW50aW5nIHJlY29tcGlsZSB0aGVtIHdoZW4KLWNvbXBpbGUgZ2hvc3RzY3JpcHQuCi1XYXkgdG8gZW5hYmxlIGNyb3NzIGNvbXBpbGUuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBLYW5nIEthaSA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KLVNpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgotCi1SZWJhc2UgdG8gOS4xOQotU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotLS0tCi0gYmFzZS91bml4LWF1eC5tYWsgfCA2NCArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKyksIDMyIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvYmFzZS91bml4LWF1eC5tYWsgYi9iYXNlL3VuaXgtYXV4Lm1hawotaW5kZXggMDExMDY2Ny4uZTJlYjFhMSAxMDA2NDQKLS0tLSBhL2Jhc2UvdW5peC1hdXgubWFrCi0rKysgYi9iYXNlL3VuaXgtYXV4Lm1hawotQEAgLTcxLDQ0ICs3MSw0NCBAQCAkKEdMT0JKKWdwX3N5c3YuJChPQkopOiAkKEdMU1JDKWdwX3N5c3YuYyAkKHN0ZGlvX19oKSAkKHRpbWVfX2gpICQoQUspXAotIAotICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXV4aWxpYXJ5IHByb2dyYW1zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCi0gCi0tJChFQ0hPR1NfWEUpOiAkKEdMU1JDKWVjaG9ncy5jICQoQUspICQoc3RkcHJlX2gpICQoVU5JWF9BVVhfTUFLKSAkKE1BS0VESVJTKQotLQkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChFQ0hPR1NfWEUpICQoR0xTUkMpZWNob2dzLmMgJChBVVhFWFRSQUxJQlMpCi0tCi0rIyQoRUNIT0dTX1hFKTogJChHTFNSQyllY2hvZ3MuYyAkKEFLKSAkKHN0ZHByZV9oKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKLSsjCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEVDSE9HU19YRSkgJChHTFNSQyllY2hvZ3MuYyAkKEFVWEVYVFJBTElCUykKLSsjCi0gIyBPbiB0aGUgUlMvNjAwMCAoYXQgbGVhc3QpLCBjb21waWxpbmcgZ2VuYXJjaC5jIHdpdGggZ2NjIHdpdGggLU8KLSAjIHByb2R1Y2VzIGEgYnVnZ3kgZXhlY3V0YWJsZS4KLS0kKEdFTkFSQ0hfWEUpOiAkKEdMU1JDKWdlbmFyY2guYyAkKEFLKSAkKEdFTkFSQ0hfREVQUykgJChVTklYX0FVWF9NQUspICQoTUFLRURJUlMpCi0tCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEdFTkFSQ0hfWEUpICQoR0xTUkMpZ2VuYXJjaC5jICQoQVVYRVhUUkFMSUJTKQotLQotLSQoR0VOQ09ORl9YRSk6ICQoR0xTUkMpZ2VuY29uZi5jICQoQUspICQoR0VOQ09ORl9ERVBTKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKLS0JJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoR0VOQ09ORl9YRSkgJChHTFNSQylnZW5jb25mLmMgJChBVVhFWFRSQUxJQlMpCi0tCi0tJChHRU5ERVZfWEUpOiAkKEdMU1JDKWdlbmRldi5jICQoQUspICQoR0VOREVWX0RFUFMpICQoVU5JWF9BVVhfTUFLKSAkKE1BS0VESVJTKQotLQkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChHRU5ERVZfWEUpICQoR0xTUkMpZ2VuZGV2LmMgJChBVVhFWFRSQUxJQlMpCi0tCi0tJChHRU5IVF9YRSk6ICQoR0xTUkMpZ2VuaHQuYyAkKEFLKSAkKEdFTkhUX0RFUFMpICQoVU5JWF9BVVhfTUFLKSAkKE1BS0VESVJTKQotLQkkKENDQVVYXykgJChHRU5IVF9DRkxBR1MpICQoT18pJChHRU5IVF9YRSkgJChHTFNSQylnZW5odC5jICQoQVVYRVhUUkFMSUJTKQotLQotKyMkKEdFTkFSQ0hfWEUpOiAkKEdMU1JDKWdlbmFyY2guYyAkKEFLKSAkKEdFTkFSQ0hfREVQUykgJChVTklYX0FVWF9NQUspICQoTUFLRURJUlMpCi0rIwkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChHRU5BUkNIX1hFKSAkKEdMU1JDKWdlbmFyY2guYyAkKEFVWEVYVFJBTElCUykKLSsjCi0rIyQoR0VOQ09ORl9YRSk6ICQoR0xTUkMpZ2VuY29uZi5jICQoQUspICQoR0VOQ09ORl9ERVBTKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKLSsjCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEdFTkNPTkZfWEUpICQoR0xTUkMpZ2VuY29uZi5jICQoQVVYRVhUUkFMSUJTKQotKyMKLSsjJChHRU5ERVZfWEUpOiAkKEdMU1JDKWdlbmRldi5jICQoQUspICQoR0VOREVWX0RFUFMpICQoVU5JWF9BVVhfTUFLKSAkKE1BS0VESVJTKQotKyMJJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoR0VOREVWX1hFKSAkKEdMU1JDKWdlbmRldi5jICQoQVVYRVhUUkFMSUJTKQotKyMKLSsjJChHRU5IVF9YRSk6ICQoR0xTUkMpZ2VuaHQuYyAkKEFLKSAkKEdFTkhUX0RFUFMpICQoVU5JWF9BVVhfTUFLKSAkKE1BS0VESVJTKQotKyMJJChDQ0FVWF8pICQoR0VOSFRfQ0ZMQUdTKSAkKE9fKSQoR0VOSFRfWEUpICQoR0xTUkMpZ2VuaHQuYyAkKEFVWEVYVFJBTElCUykKLSsjCi0gIyBUbyBnZXQgR1MgdG8gdXNlIHRoZSBzeXN0ZW0gemxpYiwgeW91IHJlbW92ZS9oaWRlIHRoZSBncy96bGliIGRpcmVjdG9yeQotICMgd2hpY2ggbWVhbnMgdGhhdCB0aGUgbWtyb21mcyBidWlsZCBjYW4ndCBmaW5kIHRoZSB6bGliIHNvdXJjZSBpdCBuZWVkcy4KLSAjIFNvIGl0J3Mgc3BsaXQgaW50byB0d28gdGFyZ2V0cywgb25lIHVzaW5nIHRoZSB6bGliIHNvdXJjZSBkaXJlY3RseS4uLi4uCi0tTUtST01GU19PQkpTXzA9JChNS1JPTUZTX1pMSUJfT0JKUykgJChBVVgpZ3BtaXNjLiQoT0JKKSAkKEFVWClncF9nZXRudi4kKE9CSikgXAotLSAkKEFVWClnc2NkZWZzLiQoT0JKKSAkKEFVWClncF91bml4LiQoT0JKKSAkKEFVWClncF91bmlmcy4kKE9CSikgJChBVVgpZ3BfdW5pZm4uJChPQkopIFwKLS0gJChBVVgpZ3Bfc3RkaWEuJChPQkopICQoQVVYKWdzdXRpbC4kKE9CSikgJChBVVgpbWVtZW50by4kKE9CSikKLS0KLS0kKE1LUk9NRlNfWEUpXzA6ICQoR0xTUkMpbWtyb21mcy5jICQoTUtST01GU19DT01NT05fREVQUykgJChNS1JPTUZTX09CSlNfMCkgJChVTklYX0FVWF9NQUspICQoTUFLRURJUlMpCi0tCSQoQ0NBVVhfKSAkKEdFTk9QVCkgJChDRkxBR1MpICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKElfKSQoR0xPQkopJChfSSkgJChJXykkKFpTUkNESVIpJChfSSkgJChHTFNSQylta3JvbWZzLmMgJChPXykkKE1LUk9NRlNfWEUpXzAgJChNS1JPTUZTX09CSlNfMCkgJChBVVhFWFRSQUxJQlMpCi0tCi0rI01LUk9NRlNfT0JKU18wPSQoTUtST01GU19aTElCX09CSlMpICQoQVVYKWdwbWlzYy4kKE9CSikgJChBVVgpZ3BfZ2V0bnYuJChPQkopIFwKLSsjICQoQVVYKWdzY2RlZnMuJChPQkopICQoQVVYKWdwX3VuaXguJChPQkopICQoQVVYKWdwX3VuaWZzLiQoT0JKKSAkKEFVWClncF91bmlmbi4kKE9CSikgXAotKyMgJChBVVgpZ3Bfc3RkaWEuJChPQkopICQoQVVYKWdzdXRpbC4kKE9CSikgJChBVVgpbWVtZW50by4kKE9CSikKLSsjCi0rIyQoTUtST01GU19YRSlfMDogJChHTFNSQylta3JvbWZzLmMgJChNS1JPTUZTX0NPTU1PTl9ERVBTKSAkKE1LUk9NRlNfT0JKU18wKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKLSsjCSQoQ0NBVVhfKSAkKEdFTk9QVCkgJChDRkxBR1MpICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKElfKSQoR0xPQkopJChfSSkgJChJXykkKFpTUkNESVIpJChfSSkgJChHTFNSQylta3JvbWZzLmMgJChPXykkKE1LUk9NRlNfWEUpXzAgJChNS1JPTUZTX09CSlNfMCkgJChBVVhFWFRSQUxJQlMpCi0rIwotICMgLi4uLiBhbmQgb25lIHVzaW5nIHRoZSB6bGliIGxpYnJhcnkgbGlua2VkIHZpYSB0aGUgY29tbWFuZCBsaW5lCi0tTUtST01GU19PQkpTXzE9JChBVVgpZ3NjZGVmcy4kKE9CSikgXAotLSAkKEFVWClncG1pc2MuJChPQkopICQoQVVYKWdwX2dldG52LiQoT0JKKSBcCi0tICQoQVVYKWdwX3VuaXguJChPQkopICQoQVVYKWdwX3VuaWZzLiQoT0JKKSAkKEFVWClncF91bmlmbi4kKE9CSikgXAotLSAkKEFVWClncF9zdGRpYS4kKE9CSikgJChBVVgpZ3N1dGlsLiQoT0JKKQotLQotLSQoTUtST01GU19YRSlfMTogJChHTFNSQylta3JvbWZzLmMgJChNS1JPTUZTX0NPTU1PTl9ERVBTKSAkKE1LUk9NRlNfT0JKU18xKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKLS0JJChDQ0FVWF8pICQoR0VOT1BUKSAkKENGTEFHUykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoSV8pJChHTE9CSikkKF9JKSAkKElfKSQoWlNSQ0RJUikkKF9JKSAkKEdMU1JDKW1rcm9tZnMuYyAkKE9fKSQoTUtST01GU19YRSlfMSAkKE1LUk9NRlNfT0JKU18xKSAkKEFVWEVYVFJBTElCUykKLS0KLS0kKE1LUk9NRlNfWEUpOiAkKE1LUk9NRlNfWEUpXyQoU0hBUkVfWkxJQikgJChVTklYX0FVWF9NQUspICQoTUFLRURJUlMpCi0tCSQoQ1BfKSAkKE1LUk9NRlNfWEUpXyQoU0hBUkVfWkxJQikgJChNS1JPTUZTX1hFKQotKyNNS1JPTUZTX09CSlNfMT0kKEFVWClnc2NkZWZzLiQoT0JKKSBcCi0rIyAkKEFVWClncG1pc2MuJChPQkopICQoQVVYKWdwX2dldG52LiQoT0JKKSBcCi0rIyAkKEFVWClncF91bml4LiQoT0JKKSAkKEFVWClncF91bmlmcy4kKE9CSikgJChBVVgpZ3BfdW5pZm4uJChPQkopIFwKLSsjICQoQVVYKWdwX3N0ZGlhLiQoT0JKKSAkKEFVWClnc3V0aWwuJChPQkopCi0rIwotKyMkKE1LUk9NRlNfWEUpXzE6ICQoR0xTUkMpbWtyb21mcy5jICQoTUtST01GU19DT01NT05fREVQUykgJChNS1JPTUZTX09CSlNfMSkgJChVTklYX0FVWF9NQUspICQoTUFLRURJUlMpCi0rIwkkKENDQVVYXykgJChHRU5PUFQpICQoQ0ZMQUdTKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChJXykkKEdMT0JKKSQoX0kpICQoSV8pJChaU1JDRElSKSQoX0kpICQoR0xTUkMpbWtyb21mcy5jICQoT18pJChNS1JPTUZTX1hFKV8xICQoTUtST01GU19PQkpTXzEpICQoQVVYRVhUUkFMSUJTKQotKyMKLSsjJChNS1JPTUZTX1hFKTogJChNS1JPTUZTX1hFKV8kKFNIQVJFX1pMSUIpICQoVU5JWF9BVVhfTUFLKSAkKE1BS0VESVJTKQotKyMJJChDUF8pICQoTUtST01GU19YRSlfJChTSEFSRV9aTElCKSAkKE1LUk9NRlNfWEUpCi0gCi0gIyBRdWVyeSB0aGUgZW52aXJvbm1lbnQgdG8gY29uc3RydWN0IGdjb25maWdfLmguCi0gIyBUaGVzZSBhcmUgYWxsIGRlZmluZWQgY29uZGl0aW9uYWxseSAoZXhjZXB0IHRoZSBKYXNQRVIgb25lKSwgc28gdGhhdAotLS0gCi0yLjguMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMTUtcGFyYWxsZWwtbWFrZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4xNS1wYXJhbGxlbC1tYWtlLnBhdGNoCmluZGV4IDhmYTJjNDAuLjNlYzM5NTYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4xNS1wYXJhbGxlbC1tYWtlLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4xNS1wYXJhbGxlbC1tYWtlLnBhdGNoCkBAIC0xMCw2ICsxMCw3IEBACiAyMDE1IDAwOjQwOjIyIC0wODAwICBTdWJqZWN0OiBbUEFUQ0hdIGNvbnRyaWIubWFrOiBmaXggZm9yIHBhcmFsbGVsIGJ1aWxkCiAKIFNpZ25lZC1vZmYtYnk6IEh1YW5nIFFpeXUgPGh1YW5ncXkuZm5zdEBjbi5mdWppdHN1LmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZwogLS0tCiAgY29udHJpYi9jb250cmliLm1hayB8IDIgKysKICAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMjEtbmF0aXZlLWZpeC1kaXNhYmxlLXN5c3RlbS1saWJ0aWZmLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjIxLW5hdGl2ZS1maXgtZGlzYWJsZS1zeXN0ZW0tbGlidGlmZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmYzZTYxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjIxLW5hdGl2ZS1maXgtZGlzYWJsZS1zeXN0ZW0tbGlidGlmZi5wYXRjaApAQCAtMCwwICsxLDM3IEBACitnaG9zdHNjcmlwdC1uYXRpdmU6Zml4IGRpc2FibGUtc3lzdGVtLWxpYnRpZmYKKworTW9kaWZ5IGNvbmZpZ3VyZSB0byBhZGQgdGhlIGNoZWNrIHRvIG1ha2Ugc3VyZQorZ2hvc3RzY3JpcCBjb3VsZCB3b3JrIHdoaWxlIHN5c3RlbS1saWJ0aWZmIGlzCitkaXNhYmxlZC4KKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorCitVcGRhdGVkIHRvIGFwcGx5IHRvIGdob3N0c2NyaXB0IDkuMjEuCisKK1NpZ25lZC1vZmYtYnk6IEpvZSBTbGF0ZXIgPGpvZS5zbGF0ZXJAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKworCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEyNTksNiArMTI1OSw3IEBAIGNhc2UgIngkd2l0aF9zeXN0ZW1fbGlidGlmZiIgaW4KKyBlc2FjCisgCisgaWYgdGVzdCB4IiRTSEFSRV9MSUJUSUZGIiA9IHgiMCIgOyB0aGVuCisrICAgIGlmIHRlc3QgLWUgJExJQlRJRkZESVIvY29uZmlndXJlOyB0aGVuCisgICAgICAgZWNobyAiUnVubmluZyBsaWJ0aWZmIGNvbmZpZ3VyZSBzY3JpcHQuLi4iCisgICAgICAgb2xkZGlyPWBwd2RgCisgICAgICAgaWYgISB0ZXN0IC1kICIkTElCVElGRkNPTkZESVIiIDsgdGhlbgorQEAgLTEyNzIsNiArMTI3MywxMCBAQCBpZiB0ZXN0IHgiJFNIQVJFX0xJQlRJRkYiID0geCIwIiA7IHRoZW4KKyAgICAgICBjZCAiJG9sZGRpciIKKyAgICAgICBlY2hvCisgICAgICAgZWNobyAiQ29udGludWluZyB3aXRoIEdob3N0c2NyaXB0IGNvbmZpZ3VyYXRpb24uLi4iCisrICAgIGVsc2UKKysgICAgICBBQ19NU0dfTk9USUNFKFtDb3VsZCBub3QgZmluZCBsb2NhbCBjb3B5IG9mIGxpYnRpZmYuCisrRGlzYWJsaW5nIHRpZmYgb3V0cHV0IGRldmljZXMuXSkKKysgICAgZmkKKyBmaQorIAorIEFDX1NVQlNUKFNIQVJFX0xJQlRJRkYpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMjEtcHJldmVudF9yZWNvbXBpbGluZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4yMS1wcmV2ZW50X3JlY29tcGlsaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYzZkMDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMjEtcHJldmVudF9yZWNvbXBpbGluZy5wYXRjaApAQCAtMCwwICsxLDk2IEBACitKdXN0IHVzZSBjb21tYW5kcyBwcm92aWRlZCBieSBnaG9zdHNjcmlwdC1uYXRpdmUsIHByZXZlbnRpbmcgcmVjb21waWxlIHRoZW0gd2hlbgorY29tcGlsZSBnaG9zdHNjcmlwdC4KK1dheSB0byBlbmFibGUgY3Jvc3MgY29tcGlsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEthbmcgS2FpIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CisKK1JlYmFzZSB0byA5LjE5CitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CisKK1JlYmFzZSB0byA5LjIxCitTaWduZWQtb2ZmLWJ5OiBKb2UgU2xhdGVyIDxqb2Uuc2xhdGVyQHdpbmRyaXZlci5jb20+CisKKy0tLSBhL2Jhc2UvdW5peC1hdXgubWFrCisrKysgYi9iYXNlL3VuaXgtYXV4Lm1haworQEAgLTY2LDQ1ICs2Niw0NSBAQCAkKEdMT0JKKWdwX3N5c3YuJChPQkopOiAkKEdMU1JDKWdwX3N5c3YuCisgCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBdXhpbGlhcnkgcHJvZ3JhbXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKyAKKy0kKEVDSE9HU19YRSk6ICQoR0xTUkMpZWNob2dzLmMgJChBSykgJChzdGRwcmVfaCkgJChVTklYX0FVWF9NQUspICQoTUFLRURJUlMpCistCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEVDSE9HU19YRSkgJChHTFNSQyllY2hvZ3MuYyAkKEFVWEVYVFJBTElCUykKKy0KKysjJChFQ0hPR1NfWEUpOiAkKEdMU1JDKWVjaG9ncy5jICQoQUspICQoc3RkcHJlX2gpICQoVU5JWF9BVVhfTUFLKSAkKE1BS0VESVJTKQorKyMJJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoRUNIT0dTX1hFKSAkKEdMU1JDKWVjaG9ncy5jICQoQVVYRVhUUkFMSUJTKQorKyMKKyAjIE9uIHRoZSBSUy82MDAwIChhdCBsZWFzdCksIGNvbXBpbGluZyBnZW5hcmNoLmMgd2l0aCBnY2Mgd2l0aCAtTworICMgcHJvZHVjZXMgYSBidWdneSBleGVjdXRhYmxlLgorLSQoR0VOQVJDSF9YRSk6ICQoR0xTUkMpZ2VuYXJjaC5jICQoQUspICQoR0VOQVJDSF9ERVBTKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKKy0JJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoR0VOQVJDSF9YRSkgJChHTFNSQylnZW5hcmNoLmMgJChBVVhFWFRSQUxJQlMpCistCistJChHRU5DT05GX1hFKTogJChHTFNSQylnZW5jb25mLmMgJChBSykgJChHRU5DT05GX0RFUFMpICQoVU5JWF9BVVhfTUFLKSAkKE1BS0VESVJTKQorLQkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChHRU5DT05GX1hFKSAkKEdMU1JDKWdlbmNvbmYuYyAkKEFVWEVYVFJBTElCUykKKy0KKy0kKEdFTkRFVl9YRSk6ICQoR0xTUkMpZ2VuZGV2LmMgJChBSykgJChHRU5ERVZfREVQUykgJChVTklYX0FVWF9NQUspICQoTUFLRURJUlMpCistCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEdFTkRFVl9YRSkgJChHTFNSQylnZW5kZXYuYyAkKEFVWEVYVFJBTElCUykKKy0KKy0kKEdFTkhUX1hFKTogJChHTFNSQylnZW5odC5jICQoQUspICQoR0VOSFRfREVQUykgJChVTklYX0FVWF9NQUspICQoTUFLRURJUlMpCistCSQoQ0NBVVhfKSAkKEdFTkhUX0NGTEFHUykgJChPXykkKEdFTkhUX1hFKSAkKEdMU1JDKWdlbmh0LmMgJChBVVhFWFRSQUxJQlMpCistCisrIyQoR0VOQVJDSF9YRSk6ICQoR0xTUkMpZ2VuYXJjaC5jICQoQUspICQoR0VOQVJDSF9ERVBTKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEdFTkFSQ0hfWEUpICQoR0xTUkMpZ2VuYXJjaC5jICQoQVVYRVhUUkFMSUJTKQorKyMKKysjJChHRU5DT05GX1hFKTogJChHTFNSQylnZW5jb25mLmMgJChBSykgJChHRU5DT05GX0RFUFMpICQoVU5JWF9BVVhfTUFLKSAkKE1BS0VESVJTKQorKyMJJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoR0VOQ09ORl9YRSkgJChHTFNSQylnZW5jb25mLmMgJChBVVhFWFRSQUxJQlMpCisrIworKyMkKEdFTkRFVl9YRSk6ICQoR0xTUkMpZ2VuZGV2LmMgJChBSykgJChHRU5ERVZfREVQUykgJChVTklYX0FVWF9NQUspICQoTUFLRURJUlMpCisrIwkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChHRU5ERVZfWEUpICQoR0xTUkMpZ2VuZGV2LmMgJChBVVhFWFRSQUxJQlMpCisrIworKyMkKEdFTkhUX1hFKTogJChHTFNSQylnZW5odC5jICQoQUspICQoR0VOSFRfREVQUykgJChVTklYX0FVWF9NQUspICQoTUFLRURJUlMpCisrIwkkKENDQVVYXykgJChHRU5IVF9DRkxBR1MpICQoT18pJChHRU5IVF9YRSkgJChHTFNSQylnZW5odC5jICQoQVVYRVhUUkFMSUJTKQorKyMKKyAjIFRvIGdldCBHUyB0byB1c2UgdGhlIHN5c3RlbSB6bGliLCB5b3UgcmVtb3ZlL2hpZGUgdGhlIGdzL3psaWIgZGlyZWN0b3J5CisgIyB3aGljaCBtZWFucyB0aGF0IHRoZSBta3JvbWZzIGJ1aWxkIGNhbid0IGZpbmQgdGhlIHpsaWIgc291cmNlIGl0IG5lZWRzLgorICMgU28gaXQncyBzcGxpdCBpbnRvIHR3byB0YXJnZXRzLCBvbmUgdXNpbmcgdGhlIHpsaWIgc291cmNlIGRpcmVjdGx5Li4uLi4KKy1NS1JPTUZTX09CSlNfMD0kKE1LUk9NRlNfWkxJQl9PQkpTKSAkKEFVWClncG1pc2MuJChPQkopICQoQVVYKWdwX2dldG52LiQoT0JKKSBcCistICQoQVVYKWdzY2RlZnMuJChPQkopICQoQVVYKWdwX3VuaXguJChPQkopICQoQVVYKWdwX3VuaWZzLiQoT0JKKSAkKEFVWClncF91bmlmbi4kKE9CSikgXAorLSAkKEFVWClncF9zdGRpYS4kKE9CSikgJChBVVgpZ3N1dGlsLiQoT0JKKSAkKEFVWCltZW1lbnRvLiQoT0JKKQorLQorLSQoTUtST01GU19YRSlfMDogJChHTFNSQylta3JvbWZzLmMgJChNS1JPTUZTX0NPTU1PTl9ERVBTKSAkKE1LUk9NRlNfT0JKU18wKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKKy0JJChDQ0FVWF8pICQoR0VOT1BUQVVYKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChJXykkKEdMT0JKKSQoX0kpICQoSV8pJChaU1JDRElSKSQoX0kpICQoR0xTUkMpbWtyb21mcy5jICQoT18pJChNS1JPTUZTX1hFKV8wICQoTUtST01GU19PQkpTXzApICQoQVVYRVhUUkFMSUJTKQorLQorKyNNS1JPTUZTX09CSlNfMD0kKE1LUk9NRlNfWkxJQl9PQkpTKSAkKEFVWClncG1pc2MuJChPQkopICQoQVVYKWdwX2dldG52LiQoT0JKKSBcCisrIyAkKEFVWClnc2NkZWZzLiQoT0JKKSAkKEFVWClncF91bml4LiQoT0JKKSAkKEFVWClncF91bmlmcy4kKE9CSikgJChBVVgpZ3BfdW5pZm4uJChPQkopIFwKKysjICQoQVVYKWdwX3N0ZGlhLiQoT0JKKSAkKEFVWClnc3V0aWwuJChPQkopICQoQVVYKW1lbWVudG8uJChPQkopCisrIworKyMkKE1LUk9NRlNfWEUpXzA6ICQoR0xTUkMpbWtyb21mcy5jICQoTUtST01GU19DT01NT05fREVQUykgJChNS1JPTUZTX09CSlNfMCkgJChVTklYX0FVWF9NQUspICQoTUFLRURJUlMpCisrIwkkKENDQVVYXykgJChHRU5PUFRBVVgpICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKElfKSQoR0xPQkopJChfSSkgJChJXykkKFpTUkNESVIpJChfSSkgJChHTFNSQylta3JvbWZzLmMgJChPXykkKE1LUk9NRlNfWEUpXzAgJChNS1JPTUZTX09CSlNfMCkgJChBVVhFWFRSQUxJQlMpCisrIworICMgLi4uLiBhbmQgb25lIHVzaW5nIHRoZSB6bGliIGxpYnJhcnkgbGlua2VkIHZpYSB0aGUgY29tbWFuZCBsaW5lCistTUtST01GU19PQkpTXzE9JChBVVgpZ3NjZGVmcy4kKE9CSikgXAorLSAkKEFVWClncG1pc2MuJChPQkopICQoQVVYKWdwX2dldG52LiQoT0JKKSBcCistICQoQVVYKWdwX3VuaXguJChPQkopICQoQVVYKWdwX3VuaWZzLiQoT0JKKSAkKEFVWClncF91bmlmbi4kKE9CSikgXAorLSAkKEFVWClncF9zdGRpYS4kKE9CSikgJChBVVgpZ3N1dGlsLiQoT0JKKQorLQorLSQoTUtST01GU19YRSlfMTogJChHTFNSQylta3JvbWZzLmMgJChNS1JPTUZTX0NPTU1PTl9ERVBTKSAkKE1LUk9NRlNfT0JKU18xKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKKy0JJChDQ0FVWF8pICQoR0VOT1BUQVVYKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChJXykkKEdMT0JKKSQoX0kpICQoSV8pJChaU1JDRElSKSQoX0kpICQoR0xTUkMpbWtyb21mcy5jICQoT18pJChNS1JPTUZTX1hFKV8xICQoTUtST01GU19PQkpTXzEpICQoQVVYRVhUUkFMSUJTKQorLQorLSQoTUtST01GU19YRSk6ICQoTUtST01GU19YRSlfJChTSEFSRV9aTElCKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKKy0JJChDUF8pICQoTUtST01GU19YRSlfJChTSEFSRV9aTElCKSAkKE1LUk9NRlNfWEUpCistCisrI01LUk9NRlNfT0JKU18xPSQoQVVYKWdzY2RlZnMuJChPQkopIFwKKysjICQoQVVYKWdwbWlzYy4kKE9CSikgJChBVVgpZ3BfZ2V0bnYuJChPQkopIFwKKysjICQoQVVYKWdwX3VuaXguJChPQkopICQoQVVYKWdwX3VuaWZzLiQoT0JKKSAkKEFVWClncF91bmlmbi4kKE9CSikgXAorKyMgJChBVVgpZ3Bfc3RkaWEuJChPQkopICQoQVVYKWdzdXRpbC4kKE9CSikKKysjCisrIyQoTUtST01GU19YRSlfMTogJChHTFNSQylta3JvbWZzLmMgJChNS1JPTUZTX0NPTU1PTl9ERVBTKSAkKE1LUk9NRlNfT0JKU18xKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKEdFTk9QVEFVWCkgJChJXykkKEdMU1JDRElSKSQoX0kpICQoSV8pJChHTE9CSikkKF9JKSAkKElfKSQoWlNSQ0RJUikkKF9JKSAkKEdMU1JDKW1rcm9tZnMuYyAkKE9fKSQoTUtST01GU19YRSlfMSAkKE1LUk9NRlNfT0JKU18xKSAkKEFVWEVYVFJBTElCUykKKysjCisrIyQoTUtST01GU19YRSk6ICQoTUtST01GU19YRSlfJChTSEFSRV9aTElCKSAkKFVOSVhfQVVYX01BSykgJChNQUtFRElSUykKKysjCSQoQ1BfKSAkKE1LUk9NRlNfWEUpXyQoU0hBUkVfWkxJQikgJChNS1JPTUZTX1hFKQorKyMKKyAjIFF1ZXJ5IHRoZSBlbnZpcm9ubWVudCB0byBjb25zdHJ1Y3QgZ2NvbmZpZ18uaC4KKyAjIFRoZXNlIGFyZSBhbGwgZGVmaW5lZCBjb25kaXRpb25hbGx5IChleGNlcHQgdGhlIEphc1BFUiBvbmUpLCBzbyB0aGF0CisgIyB0aGV5IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNldHRpbmdzIGZyb20gdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LW5hdGl2ZS1maXgtZGlzYWJsZS1zeXN0ZW0tbGlidGlmZi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtbmF0aXZlLWZpeC1kaXNhYmxlLXN5c3RlbS1saWJ0aWZmLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTU4MTE3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtbmF0aXZlLWZpeC1kaXNhYmxlLXN5c3RlbS1saWJ0aWZmLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotZ2hvc3RzY3JpcHQtbmF0aXZlOmZpeCBkaXNhYmxlLXN5c3RlbS1saWJ0aWZmCi0KLU1vZGlmeSBjb25maWd1cmUgdG8gYWRkIHRoZSBjaGVjayB0byBtYWtlIHN1cmUKLWdob3N0c2NyaXAgY291bGQgd29yayB3aGlsZSBzeXN0ZW0tbGlidGlmZiBpcwotZGlzYWJsZWQuCi0KLVNpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gY29uZmlndXJlLmFjIHwgNSArKysrKwotIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC0xMDU1LDYgKzEwNTUsNyBAQCBEaXNhYmxpbmcgdGlmZiBvdXRwdXQgZGV2aWNlcy5dKQotIGVzYWMKLSAKLSBpZiB0ZXN0ICRTSEFSRV9MSUJUSUZGIC1lcSAwOyB0aGVuCi0rICAgIGlmIHRlc3QgLWUgJExJQlRJRkZESVIvY29uZmlndXJlOyB0aGVuCi0gICAgICAgZWNobwotICAgICAgIGVjaG8gIlJ1bm5pbmcgbGlidGlmZiBjb25maWd1cmUgc2NyaXB0Li4uIgotICAgICAgIG9sZGRpcj1gcHdkYAotQEAgLTEwNjksNiArMTA3MCwxMCBAQCBpZiB0ZXN0ICRTSEFSRV9MSUJUSUZGIC1lcSAwOyB0aGVuCi0gICAgICAgY2QgIiRvbGRkaXIiCi0gICAgICAgZWNobwotICAgICAgIGVjaG8gIkNvbnRpbnVpbmcgd2l0aCBHaG9zdHNjcmlwdCBjb25maWd1cmF0aW9uLi4uIgotKyAgICBlbHNlCi0rICAgICAgQUNfTVNHX05PVElDRShbQ291bGQgbm90IGZpbmQgbG9jYWwgY29weSBvZiBsaWJ0aWZmLgotK0Rpc2FibGluZyB0aWZmIG91dHB1dCBkZXZpY2VzLl0pCi0rICAgIGZpCi0gZmkKLSAKLSBBQ19TVUJTVChTSEFSRV9MSUJUSUZGKQotLS0gCi0xLjguMS4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWtkaXItcC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWtkaXItcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTdlYWIxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9ta2Rpci1wLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK2dob3N0c2NyaXB0OiBhbGxvdyBkaXJlY3RvcmllcyB0byBiZSBjcmVhdGVkIG1vcmUgdGhhbiBvbmNlCisKK1doZW4gZG9pbmcgcGFyYWxsZWwgYnVpbGRzLCB3ZSBtaWdodCB0cnkgdG8gY3JlYXRlIGRpcmVjdG9yaWVzCittb3JlIHRoYW4gb25jZS4gIFRoaXMgc2hvdWxkIG5vdCBjYXVzZSBhbiBlcnJvci4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEpvZSBTbGF0ZXIgPGpvZS5zbGF0ZXJAd2luZHJpdmVyLmNvbT4KKworCistLS0gYS9iYXNlL3VuaXgtZW5kLm1haworKysrIGIvYmFzZS91bml4LWVuZC5tYWsKK0BAIC0xNywxNSArMTcsMTQgQEAKKyBVTklYX0VORF9NQUs9JChHTFNSQyl1bml4LWVuZC5tYWsgJChUT1BfTUFLRUZJTEVTKQorICMgRGVmaW5lIHRoZSBydWxlIGZvciBidWlsZGluZyBzdGFuZGFyZCBjb25maWd1cmF0aW9ucy4KKyBkaXJlY3RvcmllczogJChVTklYX0VORF9NQUspCistCUBpZiB0ZXN0ICIkKEJJTkRJUikiICAgICE9ICIiIC1hICEgLWQgJChCSU5ESVIpOyAgICAgICAgdGhlbiBta2RpciAkKEJJTkRJUik7ICAgICAgICBmaQorLQlAaWYgdGVzdCAiJChHTEdFTkRJUikiICAhPSAiIiAtYSAhIC1kICQoR0xHRU5ESVIpOyAgICAgIHRoZW4gbWtkaXIgJChHTEdFTkRJUik7ICAgICAgZmkKKy0JQGlmIHRlc3QgIiQoR0xPQkpESVIpIiAgIT0gIiIgLWEgISAtZCAkKEdMT0JKRElSKTsgICAgICB0aGVuIG1rZGlyICQoR0xPQkpESVIpOyAgICAgIGZpCistCUBpZiB0ZXN0ICIkKERFVkdFTkRJUikiICE9ICIiIC1hICEgLWQgJChERVZHRU5ESVIpOyAgICAgdGhlbiBta2RpciAkKERFVkdFTkRJUik7ICAgICBmaQorLQlAaWYgdGVzdCAiJChERVZPQkpESVIpIiAhPSAiIiAtYSAhIC1kICQoREVWT0JKRElSKTsgICAgIHRoZW4gbWtkaXIgJChERVZPQkpESVIpOyAgICAgZmkKKy0JQGlmIHRlc3QgIiQoQVVYRElSKSIgICAgIT0gIiIgLWEgISAtZCAkKEFVWERJUik7ICAgICAgICB0aGVuIG1rZGlyICQoQVVYRElSKTsgICAgICAgIGZpCistCUBpZiB0ZXN0ICIkKFBTR0VORElSKSIgICE9ICIiIC1hICEgLWQgJChQU0dFTkRJUik7ICAgICAgdGhlbiBta2RpciAkKFBTR0VORElSKTsgICAgICBmaQorLQlAaWYgdGVzdCAiJChQU0dFTkRJUikiICAhPSAiIiAtYSAhIC1kICQoUFNHRU5ESVIpL2N1cHM7IHRoZW4gbWtkaXIgJChQU0dFTkRJUikvY3VwczsgZmkKKy0JQGlmIHRlc3QgIiQoUFNPQkpESVIpIiAgIT0gIiIgLWEgISAtZCAkKFBTT0JKRElSKTsgICAgICB0aGVuIG1rZGlyICQoUFNPQkpESVIpOyAgICAgIGZpCisrCUBpZiB0ZXN0ICIkKEJJTkRJUikiICAgICE9ICIiIC1hICEgLWQgJChCSU5ESVIpOyAgICAgICAgdGhlbiBta2RpciAtcCAkKEJJTkRJUik7ICAgICAgICBmaQorKwlAaWYgdGVzdCAiJChHTEdFTkRJUikiICAhPSAiIiAtYSAhIC1kICQoR0xHRU5ESVIpOyAgICAgIHRoZW4gbWtkaXIgLXAgJChHTEdFTkRJUik7ICAgICAgZmkKKysJQGlmIHRlc3QgIiQoR0xPQkpESVIpIiAgIT0gIiIgLWEgISAtZCAkKEdMT0JKRElSKTsgICAgICB0aGVuIG1rZGlyIC1wICQoR0xPQkpESVIpOyAgICAgIGZpCisrCUBpZiB0ZXN0ICIkKERFVkdFTkRJUikiICE9ICIiIC1hICEgLWQgJChERVZHRU5ESVIpOyAgICAgdGhlbiBta2RpciAtcCAkKERFVkdFTkRJUik7ICAgICBmaQorKwlAaWYgdGVzdCAiJChERVZPQkpESVIpIiAhPSAiIiAtYSAhIC1kICQoREVWT0JKRElSKTsgICAgIHRoZW4gbWtkaXIgLXAgJChERVZPQkpESVIpOyAgICAgZmkKKysJQGlmIHRlc3QgIiQoQVVYRElSKSIgICAgIT0gIiIgLWEgISAtZCAkKEFVWERJUik7ICAgICAgICB0aGVuIG1rZGlyIC1wICQoQVVYRElSKTsgICAgICAgIGZpCisrCUBpZiB0ZXN0ICIkKFBTR0VORElSKSIgICE9ICIiIC1hICEgLWQgJChQU0dFTkRJUikvY3VwczsgdGhlbiBta2RpciAtcCAkKFBTR0VORElSKS9jdXBzOyBmaQorKwlAaWYgdGVzdCAiJChQU09CSkRJUikiICAhPSAiIiAtYSAhIC1kICQoUFNPQkpESVIpOyAgICAgIHRoZW4gbWtkaXIgLXAgJChQU09CSkRJUik7ICAgICAgZmkKKyAKKyAKKyBnczogLmdzc3VidGFyZ2V0ICQoVU5JWF9FTkRfTUFLKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9wbmdfbWFrLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9wbmdfbWFrLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Yjg0OTg2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvcG5nX21hay5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLWdob3N0c2NyaXB0OiBhZGQgZGVwZW5kZW5jeSBmb3IgcG5nbGliY29uZi5oCi0KLVdoZW4gdXNpbmcgcGFyYWxsZWwgbWFrZSBqb2JzLCB3ZSBuZWVkIHRvIGJlIHN1cmUgdGhhdAotcG5nbGliY29uZi5oIGlzIGNyZWF0ZWQgYmVmb3JlIHdlIHRyeSB0byByZWZlcmVuY2UgaXQsCi1zbyBhZGQgYSBydWxlIHRvIHBuZy5tYWsuCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBKb2UgU2xhdGVyIDxqc2xhdGVyQHdpbmRyaXZlci5jb20+Ci0KLVJlYmFzZSB0byA5LjE5Ci1TaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+Ci0tLS0KLSBiYXNlL3BuZy5tYWsgfCAyICsrCi0gMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvYmFzZS9wbmcubWFrIGIvYmFzZS9wbmcubWFrCi1pbmRleCBmZTVjNmUyLi44YWJiNTNhIDEwMDY0NAotLS0tIGEvYmFzZS9wbmcubWFrCi0rKysgYi9iYXNlL3BuZy5tYWsKLUBAIC03NCw2ICs3NCw4IEBAIHBuZy5jbGVhbi1ub3QtY29uZmlnLWNsZWFuIDoKLSAKLSBwbmdsaWJjb25mX2g9JChQTkdHRU5ESVIpJChEKXBuZ2xpYmNvbmYuaAotIAotKyQoTUFLRURJUlMpIDogJChwbmdsaWJjb25mX2gpCi0rCi0gcG5nLmNvbmZpZy1jbGVhbiA6Ci0gCSQoUk1fKSAkKHBuZ2xpYmNvbmZfaCkKLSAJJChSTV8pICQoUE5HR0VOKWxwZyouZGV2Ci0tLSAKLTIuOC4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHRfOS4yMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHRfOS4yMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFkOTcwMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0XzkuMjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotU1VNTUFSWSA9ICJUaGUgR1BMIEdob3N0c2NyaXB0IFBvc3RTY3JpcHQvUERGIGludGVycHJldGVyIgotREVTQ1JJUFRJT04gPSAiR2hvc3RzY3JpcHQgaXMgdXNlZCBmb3IgUG9zdFNjcmlwdC9QREYgcHJldmlldyBhbmQgcHJpbnRpbmcuICBVc3VhbGx5IGFzIFwKLWEgYmFjay1lbmQgdG8gYSBwcm9ncmFtIHN1Y2ggYXMgZ2hvc3R2aWV3LCBpdCBjYW4gZGlzcGxheSBQb3N0U2NyaXB0IGFuZCBQREYgXAotZG9jdW1lbnRzIGluIGFuIFgxMSBlbnZpcm9ubWVudC4gXAotXAotRnVydGhlcm1vcmUsIGl0IGNhbiByZW5kZXIgUG9zdFNjcmlwdCBhbmQgUERGIGZpbGVzIGFzIGdyYXBoaWNzIHRvIGJlIHByaW50ZWQgXAotb24gbm9uLVBvc3RTY3JpcHQgcHJpbnRlcnMuIFN1cHBvcnRlZCBwcmludGVycyBpbmNsdWRlIGNvbW1vbiBcCi1kb3QtbWF0cml4LCBpbmtqZXQgYW5kIGxhc2VyIG1vZGVscy4gXAotIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5naG9zdHNjcmlwdC5jb20iCi1TRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCi0KLUxJQ0VOU0UgPSAiR1BMdjMiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT03MGRjMmJhYzRkMGNlNDQ0OGRhODczY2Q4NmIxMjNmYyIKLQotREVQRU5EUyA9ICJnaG9zdHNjcmlwdC1uYXRpdmUgdGlmZiBqcGVnIGZvbnRjb25maWcgY3VwcyBsaWJwbmciCi1ERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJsaWJwbmctbmF0aXZlIgotCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL0FydGlmZXhTb2Z0d2FyZS9naG9zdHBkbC1kb3dubG9hZHMvcmVsZWFzZXMiCi1VUFNUUkVBTV9DSEVDS19SRUdFWCA9ICIoP1A8cHZlcj5cZCsoXC5cZCspKylcLnRhciIKLQotU1JDX1VSSV9CQVNFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9BcnRpZmV4U29mdHdhcmUvZ2hvc3RwZGwtZG93bmxvYWRzL3JlbGVhc2VzL2Rvd25sb2FkL2dzOTIwLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC05LjE1LXBhcmFsbGVsLW1ha2UucGF0Y2ggXAotICAgICAgICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC05LjE2LVdlcnJvci1yZXR1cm4tdHlwZS5wYXRjaCBcCi0gICAgICAgICAgICAgICAgZmlsZTovL3BuZ19tYWsucGF0Y2ggXAotICAgICAgICAgICAgICAgIGZpbGU6Ly9kby1ub3QtY2hlY2stbG9jYWwtbGlicG5nLXNvdXJjZS5wYXRjaCBcCi0iCi0KLVNSQ19VUkkgPSAiJHtTUkNfVVJJX0JBU0V9IFwKLSAgICAgICAgICAgZmlsZTovL2dob3N0c2NyaXB0LTkuMDItcHJldmVudF9yZWNvbXBpbGluZy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC05LjAyLWdlbmFyY2gucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vb2JqYXJjaC5oIFwKLSAgICAgICAgICAgZmlsZTovL2N1cHMtbm8tZ2NyeXB0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTcyMDcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTYtMTAyMTkucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTYtMTAyMjAucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctNTk1MS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi04NjAyLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTc5NzUucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTYtNzk3Ny5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi03OTc4LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL0NWRS0yMDE2LTc5NzkucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctOTIxNi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNy05NjExLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTk2MTIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctOTczOS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNy05NzI2LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTk3MjcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctOTgzNS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNy0xMTcxNC5wYXRjaCBcCi0gICAgICAgICAgICIKLQotU1JDX1VSSV9jbGFzcy1uYXRpdmUgPSAiJHtTUkNfVVJJX0JBU0V9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC1uYXRpdmUtZml4LWRpc2FibGUtc3lzdGVtLWxpYnRpZmYucGF0Y2ggXAotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2Jhc2UtZ2VuaHQuYy1hZGQtYS1wcmVwcm9jZXNzb3ItZGVmaW5lLXRvLWFsbG93LWZvcGUucGF0Y2ggXAotICAgICAgICAgICAgICAgICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiOTNjNTk4N2NkM2FiMzQxMTA4YmUxZWJiYWFkYzI0ZmUiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTQ5YjY0YjQ2ZWNmODkwNmRiNTRhOTRlY2Y4M2FiOTc1MzRlYmY5NDZmNzcwZDNjM2YyODNjYjQ2OWNiNmUxNCIKLQotRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC14IC0td2l0aC1zeXN0ZW0tbGlidGlmZiAtLXdpdGhvdXQtamJpZzJkZWMgXAotICAgICAgICAgICAgICAgIC0td2l0aC1mb250cGF0aD0ke2RhdGFkaXJ9L2ZvbnRzIFwKLSAgICAgICAgICAgICAgICAtLXdpdGhvdXQtbGliaWRuIC0td2l0aC1jdXBzLXNlcnZlcmJpbj0ke2V4ZWNfcHJlZml4fS9saWIvY3VwcyBcCi0gICAgICAgICAgICAgICAgLS13aXRoLWN1cHMtZGF0YWRpcj0ke2RhdGFkaXJ9L2N1cHMgXAotICAgICAgICAgICAgICAgICIKLQotRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzYXJjaG8zMiA9ICIgLS13aXRoLWxhcmdlX2NvbG9yX2luZGV4PTAiCi0KLSMgRXhwbGljaXR5IGRpc2FibGUgbGlidGlmZiwgZm9udGNvbmZpZywKLSMgZnJlZXR5cGUsIGN1cHMgZm9yIGdob3N0c2NyaXB0LW5hdGl2ZQotRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLXdpdGhvdXQteCAtLXdpdGgtc3lzdGVtLWxpYnRpZmY9bm8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtamJpZzJkZWMgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGgtZm9udHBhdGg9JHtkYXRhZGlyfS9mb250cyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aG91dC1saWJpZG4gLS1kaXNhYmxlLWZvbnRjb25maWcgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWRpc2FibGUtZnJlZXR5cGUgLS1kaXNhYmxlLWN1cHMiCi0KLSMgVGhpcyBoYXMgYmVlbiBmaXhlZCB1cHN0cmVhbSBidXQgZm9yIG5vdyB3ZSBuZWVkIHRvIHN1YnZlcnQgdGhlIGNoZWNrIGZvciB0aW1lLmgKLSMgaHR0cDovL2J1Z3MuZ2hvc3RzY3JpcHQuY29tL3Nob3dfYnVnLmNnaT9pZD02OTI0NDMKLSMgaHR0cDovL2J1Z3MuZ2hvc3RzY3JpcHQuY29tL3Nob3dfYnVnLmNnaT9pZD02OTI0MjYKLUNGTEFHUyArPSAiLURIQVZFX1NZU19USU1FX0g9MSIKLUJVSUxEX0NGTEFHUyArPSAiLURIQVZFX1NZU19USU1FX0g9MSIKLQotaW5oZXJpdCBhdXRvdG9vbHMKLQotZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewotCW1rZGlyIC1wIG9iagotCW1rZGlyIC1wIHNvb2JqCi0JaWYgWyAtZSAke1dPUktESVJ9L29iamFyY2guaCBdOyB0aGVuCi0JCWNwICR7V09SS0RJUn0vb2JqYXJjaC5oIG9iai9hcmNoLmgKLQlmaQotfQotCi1kb19jb25maWd1cmVfYXBwZW5kICgpIHsKLQkjIGNvcHkgdG9vbHMgZnJvbSB0aGUgbmF0aXZlIGdob3N0c2NyaXB0IGJ1aWxkCi0JaWYgWyAiJHtQTn0iICE9ICJnaG9zdHNjcmlwdC1uYXRpdmUiIF07IHRoZW4KLQkJbWtkaXIgLXAgb2JqL2F1eCBzb29iagotCQlmb3IgaSBpbiBnZW5hcmNoIGdlbmNvbmYgbWtyb21mcyBlY2hvZ3MgZ2VuZGV2IGdlbmh0OyBkbwotCQkJY3AgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2dob3N0c2NyaXB0LSR7UFZ9LyRpIG9iai9hdXgvJGkKLQkJZG9uZQotCWZpCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kICgpIHsKLSAgICBta2RpciAtcCAke0R9JHtkYXRhZGlyfS9naG9zdHNjcmlwdC8ke1BWfS8KLSAgICBjcCAtciAke1N9L1Jlc291cmNlICR7RH0ke2RhdGFkaXJ9L2dob3N0c2NyaXB0LyR7UFZ9LwotICAgIGNwIC1yICR7U30vaWNjcHJvZmlsZXMgJHtEfSR7ZGF0YWRpcn0vZ2hvc3RzY3JpcHQvJHtQVn0vCi19Ci0KLWRvX2NvbXBpbGVfY2xhc3MtbmF0aXZlICgpIHsKLSAgICBta2RpciAtcCBvYmoKLSAgICBmb3IgaSBpbiBnZW5hcmNoIGdlbmNvbmYgbWtyb21mcyBlY2hvZ3MgZ2VuZGV2IGdlbmh0OyBkbwotICAgICAgICBvZV9ydW5tYWtlIG9iai9hdXgvJGkKLSAgICBkb25lCi19Ci0KLWRvX2luc3RhbGxfY2xhc3MtbmF0aXZlICgpIHsKLSAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vZ2hvc3RzY3JpcHQtJHtQVn0KLSAgICBmb3IgaSBpbiBnZW5hcmNoIGdlbmNvbmYgbWtyb21mcyBlY2hvZ3MgZ2VuZGV2IGdlbmh0OyBkbwotICAgICAgICBpbnN0YWxsIC1tIDc1NSBvYmovYXV4LyRpICR7RH0ke2JpbmRpcn0vZ2hvc3RzY3JpcHQtJHtQVn0vJGkKLSAgICBkb25lCi19Ci0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdF85LjIxLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdF85LjIxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmOTg1YzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0XzkuMjEuYmIKQEAgLTAsMCArMSwxMzcgQEAKK1NVTU1BUlkgPSAiVGhlIEdQTCBHaG9zdHNjcmlwdCBQb3N0U2NyaXB0L1BERiBpbnRlcnByZXRlciIKK0RFU0NSSVBUSU9OID0gIkdob3N0c2NyaXB0IGlzIHVzZWQgZm9yIFBvc3RTY3JpcHQvUERGIHByZXZpZXcgYW5kIHByaW50aW5nLiAgVXN1YWxseSBhcyBcCithIGJhY2stZW5kIHRvIGEgcHJvZ3JhbSBzdWNoIGFzIGdob3N0dmlldywgaXQgY2FuIGRpc3BsYXkgUG9zdFNjcmlwdCBhbmQgUERGIFwKK2RvY3VtZW50cyBpbiBhbiBYMTEgZW52aXJvbm1lbnQuIFwKK1wKK0Z1cnRoZXJtb3JlLCBpdCBjYW4gcmVuZGVyIFBvc3RTY3JpcHQgYW5kIFBERiBmaWxlcyBhcyBncmFwaGljcyB0byBiZSBwcmludGVkIFwKK29uIG5vbi1Qb3N0U2NyaXB0IHByaW50ZXJzLiBTdXBwb3J0ZWQgcHJpbnRlcnMgaW5jbHVkZSBjb21tb24gXAorZG90LW1hdHJpeCwgaW5ramV0IGFuZCBsYXNlciBtb2RlbHMuIFwKKyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ2hvc3RzY3JpcHQuY29tIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NzBkYzJiYWM0ZDBjZTQ0NDhkYTg3M2NkODZiMTIzZmMiCisKK0RFUEVORFMgPSAiZ2hvc3RzY3JpcHQtbmF0aXZlIHRpZmYganBlZyBmb250Y29uZmlnIGN1cHMgbGlicG5nIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAibGlicG5nLW5hdGl2ZSIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS9BcnRpZmV4U29mdHdhcmUvZ2hvc3RwZGwtZG93bmxvYWRzL3JlbGVhc2VzIgorVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiKD9QPHB2ZXI+XGQrKFwuXGQrKSspXC50YXIiCisKK1NSQ19VUklfQkFTRSA9ICJodHRwczovL2dpdGh1Yi5jb20vQXJ0aWZleFNvZnR3YXJlL2dob3N0cGRsLWRvd25sb2Fkcy9yZWxlYXNlcy9kb3dubG9hZC9nczkyMS8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgICAgICBmaWxlOi8vZ2hvc3RzY3JpcHQtOS4xNS1wYXJhbGxlbC1tYWtlLnBhdGNoIFwKKyAgICAgICAgICAgICAgICBmaWxlOi8vZ2hvc3RzY3JpcHQtOS4xNi1XZXJyb3ItcmV0dXJuLXR5cGUucGF0Y2ggXAorICAgICAgICAgICAgICAgIGZpbGU6Ly9kby1ub3QtY2hlY2stbG9jYWwtbGlicG5nLXNvdXJjZS5wYXRjaCBcCisgICAgICAgICAgICAgICAgZmlsZTovL2F2b2lkLWhvc3QtY29udGFtaW5hdGlvbi5wYXRjaCBcCisgICAgICAgICAgICAgICAgZmlsZTovL21rZGlyLXAucGF0Y2ggXAorIgorCitTUkNfVVJJID0gIiR7U1JDX1VSSV9CQVNFfSBcCisgICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC05LjIxLXByZXZlbnRfcmVjb21waWxpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ2hvc3RzY3JpcHQtOS4wMi1nZW5hcmNoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL29iamFyY2guaCBcCisgICAgICAgICAgIGZpbGU6Ly9jdXBzLW5vLWdjcnlwdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi03OTc3LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTcyMDcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctNTk1MS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNy03OTc1LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTkyMTYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctOTYxMS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNy05NjEyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTk3MzkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctOTcyNi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNy05NzI3LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTk4MzUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTE3MTQucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklfY2xhc3MtbmF0aXZlID0gIiR7U1JDX1VSSV9CQVNFfSBcCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2hvc3RzY3JpcHQtOS4yMS1uYXRpdmUtZml4LWRpc2FibGUtc3lzdGVtLWxpYnRpZmYucGF0Y2ggXAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2Jhc2UtZ2VuaHQuYy1hZGQtYS1wcmVwcm9jZXNzb3ItZGVmaW5lLXRvLWFsbG93LWZvcGUucGF0Y2ggXAorICAgICAgICAgICAgICAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNWYyMTMyODE3NjFkMjc1MGZjZjI3NDc2YzQwNGQxN2YiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDJiY2VhZGJjNGRkZGViNmYyZWVjOWM4YjE2MjNkOTQ1ZDM1NWNhMTFiOGI0ZGYwMzUzMzJiMjE3ZDU4Y2U4NSIKKworIyBQdXQgc29tZXRoaW5nIGxpa2UKKyMKKyMgICBQQUNLQUdFQ09ORklHX2FwcGVuZF9wbi1naG9zdHNjcmlwdCA9ICIgeDExIgorIworIyBpbiBsb2NhbC5jb25mIHRvIGVuYWJsZSBidWlsZGluZyB3aXRoIFgxMS4gIEJlIGNhcmVmdWwuICBUaGUgb3JkZXIKKyMgb2YgdGhlIG92ZXJyaWRlcyBtYXR0ZXJzIQorIworI1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPSAiIgorCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS13aXRoLXggLS14LWluY2x1ZGVzPSR7U1RBR0lOR19JTkNESVJ9IC0teC1saWJyYXJpZXM9JHtTVEFHSU5HX0xJQkRJUn0sIFwKKyAgICAgICAgICAgICAgICAgICAgICAtLXdpdGhvdXQteCwgdmlydHVhbC9saWJ4MTEgbGlieGV4dCBsaWJ4dCBndGsrM1wKKyAgICAgICAgICAgICAgICAgICAgICAiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtc3lzdGVtLWxpYnRpZmYgLS13aXRob3V0LWpiaWcyZGVjIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtZm9udHBhdGg9JHtkYXRhZGlyfS9mb250cyBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LWxpYmlkbiAtLXdpdGgtY3Vwcy1zZXJ2ZXJiaW49JHtleGVjX3ByZWZpeH0vbGliL2N1cHMgXAorICAgICAgICAgICAgICAgIC0td2l0aC1jdXBzLWRhdGFkaXI9JHtkYXRhZGlyfS9jdXBzIFwKKyAgICAgICAgICAgICAgICBDVVBTQ09ORklHPSIke1NUQUdJTkdfQklORElSX0NST1NTfS9jdXBzLWNvbmZpZyIgXAorICAgICAgICAgICAgICAgICIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzYXJjaG8zMiA9ICIgLS13aXRoLWxhcmdlX2NvbG9yX2luZGV4PTAiCisKKyMgRXhwbGljaXR5IGRpc2FibGUgbGlidGlmZiwgZm9udGNvbmZpZywKKyMgZnJlZXR5cGUsIGN1cHMgZm9yIGdob3N0c2NyaXB0LW5hdGl2ZQorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLXdpdGhvdXQteCAtLXdpdGgtc3lzdGVtLWxpYnRpZmY9bm8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtamJpZzJkZWMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGgtZm9udHBhdGg9JHtkYXRhZGlyfS9mb250cyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aG91dC1saWJpZG4gLS1kaXNhYmxlLWZvbnRjb25maWcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWRpc2FibGUtZnJlZXR5cGUgLS1kaXNhYmxlLWN1cHMiCisKKyMgVGhpcyBoYXMgYmVlbiBmaXhlZCB1cHN0cmVhbSBidXQgZm9yIG5vdyB3ZSBuZWVkIHRvIHN1YnZlcnQgdGhlIGNoZWNrIGZvciB0aW1lLmgKKyMgaHR0cDovL2J1Z3MuZ2hvc3RzY3JpcHQuY29tL3Nob3dfYnVnLmNnaT9pZD02OTI0NDMKKyMgaHR0cDovL2J1Z3MuZ2hvc3RzY3JpcHQuY29tL3Nob3dfYnVnLmNnaT9pZD02OTI0MjYKK0NGTEFHUyArPSAiLURIQVZFX1NZU19USU1FX0g9MSIKK0JVSUxEX0NGTEFHUyArPSAiLURIQVZFX1NZU19USU1FX0g9MSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCW1rZGlyIC1wIG9iagorCW1rZGlyIC1wIHNvb2JqCisJaWYgWyAtZSAke1dPUktESVJ9L29iamFyY2guaCBdOyB0aGVuCisJCWNwICR7V09SS0RJUn0vb2JqYXJjaC5oIG9iai9hcmNoLmgKKwlmaQorfQorCitkb19jb25maWd1cmVfYXBwZW5kICgpIHsKKwkjIGNvcHkgdG9vbHMgZnJvbSB0aGUgbmF0aXZlIGdob3N0c2NyaXB0IGJ1aWxkCisJaWYgWyAiJHtQTn0iICE9ICJnaG9zdHNjcmlwdC1uYXRpdmUiIF07IHRoZW4KKwkJbWtkaXIgLXAgb2JqL2F1eCBzb29iagorCQlmb3IgaSBpbiBnZW5hcmNoIGdlbmNvbmYgbWtyb21mcyBlY2hvZ3MgZ2VuZGV2IGdlbmh0OyBkbworCQkJY3AgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2dob3N0c2NyaXB0LSR7UFZ9LyRpIG9iai9hdXgvJGkKKwkJZG9uZQorCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICBta2RpciAtcCAke0R9JHtkYXRhZGlyfS9naG9zdHNjcmlwdC8ke1BWfS8KKyAgICBjcCAtciAke1N9L1Jlc291cmNlICR7RH0ke2RhdGFkaXJ9L2dob3N0c2NyaXB0LyR7UFZ9LworICAgIGNwIC1yICR7U30vaWNjcHJvZmlsZXMgJHtEfSR7ZGF0YWRpcn0vZ2hvc3RzY3JpcHQvJHtQVn0vCit9CisKK2RvX2NvbXBpbGVfY2xhc3MtbmF0aXZlICgpIHsKKyAgICBta2RpciAtcCBvYmoKKyAgICBmb3IgaSBpbiBnZW5hcmNoIGdlbmNvbmYgbWtyb21mcyBlY2hvZ3MgZ2VuZGV2IGdlbmh0OyBkbworICAgICAgICBvZV9ydW5tYWtlIG9iai9hdXgvJGkKKyAgICBkb25lCit9CisKK2RvX2luc3RhbGxfY2xhc3MtbmF0aXZlICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vZ2hvc3RzY3JpcHQtJHtQVn0KKyAgICBmb3IgaSBpbiBnZW5hcmNoIGdlbmNvbmYgbWtyb21mcyBlY2hvZ3MgZ2VuZGV2IGdlbmh0OyBkbworICAgICAgICBpbnN0YWxsIC1tIDc1NSBvYmovYXV4LyRpICR7RH0ke2JpbmRpcn0vZ2hvc3RzY3JpcHQtJHtQVn0vJGkKKyAgICBkb25lCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCisjIGdob3N0c2NyaXB0IGRvZXMgbm90IHN1cHBvcnRzICJhcmMiCitDT01QQVRJQkxFX0hPU1QgPSAiXig/IWFyYykuKiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ28tZXhhbXBsZXMvZmlsZXMvaGVsbG93b3JsZC5nbyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ28tZXhhbXBsZXMvZmlsZXMvaGVsbG93b3JsZC5nbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI1M2M0MC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dvLWV4YW1wbGVzL2ZpbGVzL2hlbGxvd29ybGQuZ28KKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0vLyBZb3UgY2FuIGVkaXQgdGhpcyBjb2RlIQotLy8gQ2xpY2sgaGVyZSBhbmQgc3RhcnQgdHlwaW5nLgotLy8gdGFrZW4gZnJvbSBodHRwczovL2dvbGFuZy5vcmcvCi1wYWNrYWdlIG1haW4KLQotaW1wb3J0ICJmbXQiCi0KLWZ1bmMgbWFpbigpIHsKLQlmbXQuUHJpbnRsbigiSGVsbG8sIOS4lueVjCIpCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dvLWV4YW1wbGVzL2dvLWV4YW1wbGVzLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ28tZXhhbXBsZXMvZ28tZXhhbXBsZXMuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjMyNjgxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ28tZXhhbXBsZXMvZ28tZXhhbXBsZXMuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotREVTQ1JJUFRJT04gPSAiVGhpcyBpcyBhIHNpbXBsZSBleGFtcGxlIHJlY2lwZSB0aGF0IGNyb3NzLWNvbXBpbGVzIGEgR28gcHJvZ3JhbS4iCi1TRUNUSU9OID0gImV4YW1wbGVzIgotSE9NRVBBR0UgPSAiaHR0cHM6Ly9nb2xhbmcub3JnLyIKLQotTElDRU5TRSA9ICJNSVQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vTUlUO21kNT0wODM1YWRlNjk4ZTBiY2Y4NTA2ZWNkYTJmN2I0ZjMwMiIKLQotUyA9ICIke1dPUktESVJ9IgotCi1pbmhlcml0IGdvCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dvLWV4YW1wbGVzL2dvLWhlbGxvd29ybGRfMC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nby1leGFtcGxlcy9nby1oZWxsb3dvcmxkXzAuMS5iYgppbmRleCA5MzBjNTdkLi4yMjJmYzlkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dvLWV4YW1wbGVzL2dvLWhlbGxvd29ybGRfMC4xLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ28tZXhhbXBsZXMvZ28taGVsbG93b3JsZF8wLjEuYmIKQEAgLTEsMTMgKzEsMTkgQEAKLXJlcXVpcmUgZ28tZXhhbXBsZXMuaW5jCitERVNDUklQVElPTiA9ICJUaGlzIGlzIGEgc2ltcGxlIGV4YW1wbGUgcmVjaXBlIHRoYXQgY3Jvc3MtY29tcGlsZXMgYSBHbyBwcm9ncmFtLiIKK1NFQ1RJT04gPSAiZXhhbXBsZXMiCitIT01FUEFHRSA9ICJodHRwczovL2dvbGFuZy5vcmcvIgogCi1TUkNfVVJJICs9ICIgXAotICBmaWxlOi8vaGVsbG93b3JsZC5nbyBcCi0iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09NTU9OX0xJQ0VOU0VfRElSfS9NSVQ7bWQ1PTA4MzVhZGU2OThlMGJjZjg1MDZlY2RhMmY3YjRmMzAyIgogCi1kb19jb21waWxlKCkgewotCWdvIGJ1aWxkIGhlbGxvd29ybGQuZ28KLX0KK1NSQ19VUkkgPSAiZ2l0Oi8vJHtHT19JTVBPUlR9IgorU1JDUkVWID0gIjQ2Njk1ZDgxZDFmYWU5MDVhMjcwZmI3ZGI4YTRkMTFhMzM0NTYyZmUiCiAKLWRvX2luc3RhbGwoKSB7Ci0JaW5zdGFsbCAtRCAtbSAwNzU1ICR7U30vaGVsbG93b3JsZCAke0R9JHtiaW5kaXJ9L2hlbGxvd29ybGQKK0dPX0lNUE9SVCA9ICJnaXRodWIuY29tL2dvbGFuZy9leGFtcGxlIgorR09fSU5TVEFMTCA9ICIke0dPX0lNUE9SVH0vaGVsbG8iCisKK2luaGVyaXQgZ28KKworIyBUaGlzIGlzIGp1c3QgdG8gbWFrZSBjbGVhciB3aGVyZSB0aGlzIGV4YW1wbGUgaXMKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIG12ICR7RH0ke2JpbmRpcn0vaGVsbG8gJHtEfSR7YmluZGlyfS8ke0JQTn0KIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3BlcmYvZ3BlcmZfMy4wLjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmXzMuMC40LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDAwM2ZjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3BlcmYvZ3BlcmZfMy4wLjQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLXJlcXVpcmUgZ3BlcmYuaW5jCi0KLQotU1JDX1VSSVttZDVzdW1dID0gImMxZjFkYjMyZmI2NTk4ZDZhOTNlNmU4ODc5NmE4NjMyIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc2NzExMmEyMDQ0MDdlNjJkYmMzMTA2NjQ3Y2Y4MzllZDU0NGYzY2Y1ZDBmMDUyM2FhYTI1MDg2MjNhYWQ2M2UiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmXzMuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3BlcmYvZ3BlcmZfMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MjgyMGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmXzMuMS5iYgpAQCAtMCwwICsxLDUgQEAKK3JlcXVpcmUgZ3BlcmYuaW5jCisKKworU1JDX1VSSVttZDVzdW1dID0gIjllMjUxYzBhNjE4YWQwODI0YjUxMTE3ZDVkOWRiODdlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU4ODU0NmI5NDViYmE0YjcwYjZhM2E2MTZlODBiNGFiNDY2ZTNmMzMwMjRhMzUyZmMyMTk4MTEyY2RiYjNhZTIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcF8zLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcF8zLjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyOTQwZDUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXBfMy4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotU1VNTUFSWSA9ICJHTlUgZ3JlcCB1dGlsaXR5IgotSE9NRVBBR0UgPSAiaHR0cDovL3NhdmFubmFoLmdudS5vcmcvcHJvamVjdHMvZ3JlcC8iCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvP2dyb3VwPWdyZXAiCi1TRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCi1MSUNFTlNFID0gIkdQTHYzIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODAwNmQ5YzgxNDI3N2MxYmZjNGNhMjJhZjk0YjU5ZWUiCi0KLVNSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9ncmVwL2dyZXAtJHtQVn0udGFyLnh6IFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAotICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gImZhMDdjMTYxNmFkZWI5YzMyNjJiZTUxNzdkMTBhZDRhIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImUyYzgxZGI1MDU2ZTNlOGM1OTk1ZjBiYjVkMGQwZTFjYWQxZjZmNDVjM2IyZmM3N2I2ZTgxNDM1YWVkNDhhYjUiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyBwa2djb25maWcKLQotRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1wZXJsLXJlZ2V4cCIKLQotIyBGaXggIkFyZ3VtZW50IGxpc3QgdG9vIGxvbmciIGVycm9yIHdoZW4gbGVuKFRNUERJUikgPSA0MTAKLWFjcGF0aHMgPSAiLUkgLi9tNCIKLQotZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewotCXJtIC1mICR7U30vbTQvaW5pdC5tNAotfQotCi1kb19pbnN0YWxsICgpIHsKLQlhdXRvdG9vbHNfZG9faW5zdGFsbAotCWlmIFsgIiR7YmFzZV9iaW5kaXJ9IiAhPSAiJHtiaW5kaXJ9IiBdOyB0aGVuCi0JCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9Ci0JCW12ICR7RH0ke2JpbmRpcn0vZ3JlcCAke0R9JHtiYXNlX2JpbmRpcn0vZ3JlcAotCQltdiAke0R9JHtiaW5kaXJ9L2VncmVwICR7RH0ke2Jhc2VfYmluZGlyfS9lZ3JlcAotCQltdiAke0R9JHtiaW5kaXJ9L2ZncmVwICR7RH0ke2Jhc2VfYmluZGlyfS9mZ3JlcAotCQlybWRpciAke0R9JHtiaW5kaXJ9LwotCWZpCi19Ci0KLWluaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcwotCi1BTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCi0KLUFMVEVSTkFUSVZFXyR7UE59ID0gImdyZXAgZWdyZXAgZmdyZXAiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbZ3JlcF0gPSAiJHtiYXNlX2JpbmRpcn0vZ3JlcCIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtlZ3JlcF0gPSAiJHtiYXNlX2JpbmRpcn0vZWdyZXAiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbZmdyZXBdID0gIiR7YmFzZV9iaW5kaXJ9L2ZncmVwIgotCi1leHBvcnQgQ09ORklHX1NIRUxMPSIvYmluL3NoIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXBfMy4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXBfMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YjZiOTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcF8zLjEuYmIKQEAgLTAsMCArMSw0NiBAQAorU1VNTUFSWSA9ICJHTlUgZ3JlcCB1dGlsaXR5IgorSE9NRVBBR0UgPSAiaHR0cDovL3NhdmFubmFoLmdudS5vcmcvcHJvamVjdHMvZ3JlcC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvP2dyb3VwPWdyZXAiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODAwNmQ5YzgxNDI3N2MxYmZjNGNhMjJhZjk0YjU5ZWUiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9ncmVwL2dyZXAtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImZlY2E3YjNlN2M3ZjRhYWIyYjQyZWNiZmM1MTNiMDcwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImRiNjI1YzdhYjNiYjNlZTc1N2IzOTI2YTVjZmE4ZDllMWMzOTkxYWQyNDcwN2E4M2RkZThhNWVmMmJmN2EwN2UiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1wZXJsLXJlZ2V4cCIKKworIyBGaXggIkFyZ3VtZW50IGxpc3QgdG9vIGxvbmciIGVycm9yIHdoZW4gbGVuKFRNUERJUikgPSA0MTAKK2FjcGF0aHMgPSAiLUkgLi9tNCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXJtIC1mICR7U30vbTQvaW5pdC5tNAorfQorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCWlmIFsgIiR7YmFzZV9iaW5kaXJ9IiAhPSAiJHtiaW5kaXJ9IiBdOyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJCW12ICR7RH0ke2JpbmRpcn0vZ3JlcCAke0R9JHtiYXNlX2JpbmRpcn0vZ3JlcAorCQltdiAke0R9JHtiaW5kaXJ9L2VncmVwICR7RH0ke2Jhc2VfYmluZGlyfS9lZ3JlcAorCQltdiAke0R9JHtiaW5kaXJ9L2ZncmVwICR7RH0ke2Jhc2VfYmluZGlyfS9mZ3JlcAorCQlybWRpciAke0R9JHtiaW5kaXJ9LworCWZpCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImdyZXAgZWdyZXAgZmdyZXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ3JlcF0gPSAiJHtiYXNlX2JpbmRpcn0vZ3JlcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtlZ3JlcF0gPSAiJHtiYXNlX2JpbmRpcn0vZWdyZXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZmdyZXBdID0gIiR7YmFzZV9iaW5kaXJ9L2ZncmVwIgorCitleHBvcnQgQ09ORklHX1NIRUxMPSIvYmluL3NoIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2ZpbGVzLzAwMDEtZ3ppcC1wb3J0LXpkaWZmLXpsZXNzLXRvLUJ1c3lib3gucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZmlsZXMvMDAwMS1nemlwLXBvcnQtemRpZmYtemxlc3MtdG8tQnVzeWJveC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGQ1YTE5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2ZpbGVzLzAwMDEtZ3ppcC1wb3J0LXpkaWZmLXpsZXNzLXRvLUJ1c3lib3gucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorRnJvbSA1ZjcxMjYyMTgyOWVkODFhNzU4MDc3NDMxMjI2YTg2ZGYzN2ZiYzNiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRGVueXMgWmFnb3J1aSA8ZGVueXMuemFnb3J1aUBnbG9iYWxsb2dpYy5jb20+CitEYXRlOiBUaHUsIDggSnVuIDIwMTcgMTY6MDU6NTAgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gZ3ppcDogcG9ydCB6ZGlmZiwgemxlc3MgdG8gQnVzeWJveAorCitQcm9ibGVtIHJlcG9ydGVkIGJ5IERlbnlzIFphZ29ydWkgKEJ1ZyMyNjA4OCkuCisqIHRlc3RzL3pkaWZmOiBDaGVjayB0aGF0IGRpZmYgdXNlcyBQT1NJWC1mb3JtYXQgb3V0cHV0LgorKiB6bGVzcy5pbiAobGVzc192ZXJzaW9uKTogRG9uJ3QgZXhpdCBtZXJlbHkgYmVjYXVzZSAnbGVzcyAtVicKK2ZhaWxzOyBpbnN0ZWFkLCBhc3N1bWUgJ2xlc3MnIGlzIGNvbXBhdGlibGUgd2l0aCBhbiBvbGQgdmVyc2lvbiBvZgordGhlIG9yaWdpbmFsICdsZXNzJy4gIEJ1c3lib3ggJ2xlc3MgLVYnIGZhaWxzLCBidXQgYXBwYXJlbnRseSBpdHMKKydsZXNzJyB3b3JrcyBhbnl3YXkgc29tZWhvdy4KKworU2lnbmVkLW9mZi1ieTogRGVueXMgWmFnb3J1aSA8ZGVueXMuemFnb3J1aUBnbG9iYWxsb2dpYy5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQKKy0tLQorIHRlc3RzL3pkaWZmIHwgNCArKystCisgemxlc3MuaW4gICAgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0cy96ZGlmZiBiL3Rlc3RzL3pkaWZmCitpbmRleCAwYmI3YzdkLi45Y2Q0ZmQ0IDEwMDc1NQorLS0tIGEvdGVzdHMvemRpZmYKKysrKyBiL3Rlc3RzL3pkaWZmCitAQCAtMjIsNyArMjIsNiBAQAorIAorIGVjaG8gYSA+IGEgfHwgZnJhbWV3b3JrX2ZhaWx1cmVfCisgZWNobyBiID4gYiB8fCBmcmFtZXdvcmtfZmFpbHVyZV8KKy1nemlwIGEgYiB8fCBmcmFtZXdvcmtfZmFpbHVyZV8KKyAKKyBjYXQgPDxFT0YgPiBleHAKKyAxYzEKK0BAIC0zMSw3ICszMCwxMCBAQCBjYXQgPDxFT0YgPiBleHAKKyA+IGIKKyBFT0YKKyAKKytkaWZmIGEgYiB8IGRpZmYgZXhwIC0gfHwgc2tpcF8gImRpZmYgb3V0cHV0IGZvcm1hdCBpcyBpbmNvbXBhdGlibGUgd2l0aCBQT1NJWCIKKysKKyBmYWlsPTAKKytnemlwIGEgYiB8fCBmYWlsPTEKKyB6ZGlmZiBhLmd6IGIuZ3ogPiBvdXQgMj4mMQorIHRlc3QgJD8gPSAxIHx8IGZhaWw9MQorIAorZGlmZiAtLWdpdCBhL3psZXNzLmluIGIvemxlc3MuaW4KK2luZGV4IGU2MzRhZjYuLjk3NTlhZTYgMTAwNjQ0CistLS0gYS96bGVzcy5pbgorKysrIGIvemxlc3MuaW4KK0BAIC00Nyw3ICs0Nyw3IEBAIGlmIHRlc3QgIiR7TEVTU01FVEFDSEFSUytzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgIGV4cG9ydCBMRVNTTUVUQUNIQVJTCisgZmkKKyAKKy1sZXNzX3ZlcnNpb249YGxlc3MgLVZgIHx8IGV4aXQKKytsZXNzX3ZlcnNpb249YGxlc3MgLVYgMj4vZGV2L251bGxgCisgY2FzZSAkbGVzc192ZXJzaW9uIGluCisgbGVzcycgJzQ1WzEtOV0qIHwgXAorIGxlc3MnICc0WzYtOV1bMC05XSogfCBcCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9maWxlcy9ydW4tcHRlc3QgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZmlsZXMvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmN2M2NDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZmlsZXMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNiBAQAorIyEvYmluL3NoCisKK2NkIHNyYy90ZXN0cworCittYWtlIGNoZWNrCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwXzEuOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwXzEuOC5iYgppbmRleCAxMWJlODQ2Li5kMDkzMjA3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcF8xLjguYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXBfMS44LmJiCkBAIC0yLDcgKzIsOSBAQAogCiBMSUNFTlNFID0gIkdQTHYzKyIKIAotU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2d6aXAvJHtCUH0udGFyLmd6IgorU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2d6aXAvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWd6aXAtcG9ydC16ZGlmZi16bGVzcy10by1CdXN5Ym94LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QiCiBTUkNfVVJJX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIGZpbGU6Ly93cm9uZy1wYXRoLWZpeC5wYXRjaCIKIAogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXApAQCAtMTIsNiArMTQsMjYgQEAKIAogQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCiAKK2luaGVyaXQgcHRlc3QKKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwlta2RpciAtcCAke0R9JHtQVEVTVF9QQVRIfS9zcmMvYnVpbGQtYXV4CisJY3AgJHtTfS9idWlsZC1hdXgvdGVzdC1kcml2ZXIgJHtEfSR7UFRFU1RfUEFUSH0vc3JjL2J1aWxkLWF1eC8KKwlta2RpciAtcCAke0R9JHtQVEVTVF9QQVRIfS9zcmMvdGVzdHMKKwljcCAtciAke1N9L3Rlc3RzLyogJHtEfSR7UFRFU1RfUEFUSH0vc3JjL3Rlc3RzCisJc2VkIC1lICdzL15hYnNfc3JjZGlyID0gLi4qL2Fic19zcmNkaXIgPSBcLlwuLycgXAorICAgICAgICAgICAgLWUgJ3MvXnRvcF9zcmNkaXIgPSAuLiovdG9wX3NyY2RpciA9IFwuXC4vJyBcCisgICAgICAgICAgICAtZSAncy9eR1JFUCA9IC4uKi9HUkVQID0gZ3JlcC8nICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIC1lICdzL15BV0sgPSAuLiovQVdLID0gYXdrLycgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgLWUgJ3MvXnNyY2RpciA9IC4uKi9zcmNkaXIgPSBcLi8nICAgICAgICAgICBcCisgICAgICAgICAgICAtZSAncy9eTWFrZWZpbGU6IC4uKi9NYWtlZmlsZTogLycgICAgICAgICAgIFwKKyAgICAgICAgICAgIC1lICdzLC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0sLGcnICAgXAorICAgICAgICAgICAgLWUgJ3N8JHtERUJVR19QUkVGSVhfTUFQfXx8ZycgXAorICAgICAgICAgICAgLWUgJ3M6JHtIT1NUVE9PTFNfRElSfS86OmcnICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAtZSAnczoke0JBU0VfV09SS0RJUn0vJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU306OmcnIFwKKyAgICAgICAgICAgICR7Qn0vdGVzdHMvTWFrZWZpbGUgPiAke0R9JHtQVEVTVF9QQVRIfS9zcmMvdGVzdHMvTWFrZWZpbGUKK30KKwogU1JDX1VSSVttZDVzdW1dID0gIjczMjU1MzE1MjgxNGIyMmRjMzVhYTAyNjdkZjUyODZjIgogU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFmZjdhZWRiM2Q2NmEwZDczZjQ0MmY2MjYxZTRiMzg2MGRmNmZkNmM5NDAyNWMyY2IzMWEyMDJjOWM2MGZlMGUiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaGRwYXJtL2hkcGFybV85LjUxLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9oZHBhcm0vaGRwYXJtXzkuNTEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMDA5MjcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9oZHBhcm0vaGRwYXJtXzkuNTEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi1TVU1NQVJZID0gIlV0aWxpdHkgZm9yIHZpZXdpbmcvbWFuaXB1bGF0aW5nIElERSBkaXNrIGRyaXZlL2RyaXZlciBwYXJhbWV0ZXJzIgotREVTQ1JJUFRJT04gPSAiaGRwYXJtIGlzIGEgTGludXggc2hlbGwgdXRpbGl0eSBmb3Igdmlld2luZyBcCi1hbmQgbWFuaXB1bGF0aW5nIHZhcmlvdXMgSURFIGRyaXZlIGFuZCBkcml2ZXIgcGFyYW1ldGVycy4iCi1TRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCi0KLUxJQ0VOU0UgPSAiQlNEICYgR1BMdjIiCi1MSUNFTlNFXyR7UE59ID0gIkJTRCIKLUxJQ0VOU0VfJHtQTn0tZGJnID0gIkJTRCIKLUxJQ0VOU0Vfd2lwZXIgPSAiR1BMdjIiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UuVFhUO21kNT05MTBhOGE0MmM5NjJkMjM4NjE5Yzc1ZmRiNzhiZGIyNCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vY29weXJpZ2h0O21kNT1hODJkN2JhM2FkZTllOGVjOTAyNzQ5ZGI5OGM1OTJmMyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly93aXBlci9HUEx2Mi50eHQ7bWQ1PWZjYjAyZGM1NTJhMDQxZGVlMjdlNGI4NWM3Mzk2MDY3IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3dpcGVyL3dpcGVyLnNoO2JlZ2lubGluZT03O2VuZGxpbmU9MzE7bWQ1PWI3YmM2NDJhZGRjMTUyZWEzMDc1MDViZjFhMjk2ZjA5IgotCi0KLVBBQ0tBR0VTID0rICJ3aXBlciIKLQotRklMRVNfd2lwZXIgPSAiJHtiaW5kaXJ9L3dpcGVyLnNoIgotCi1SREVQRU5EU193aXBlciA9ICJiYXNoIGdhd2sgc3RhdCIKLQotU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vaGRwYXJtLyR7QlB9LnRhci5neiIKLQotU1JDX1VSSVttZDVzdW1dID0gIjhmZTBhNzFkYjAyZjdmZmM2MDJkMTRhNjlmNzY2Y2ZmIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFhZmFkODg5MWVjYmU2NDRjMjgzZjdkNzI1MTU3NjYwZWJmOGJkNWI0ZDlkNjcyMzJhZmQ0NWY4M2QyZDVkOTEiCi0KLUVYVFJBX09FTUFLRSA9ICdTVFJJUD0iZWNobyIgTERGTEFHUz0iJHtMREZMQUdTfSInCi0KLWluaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcwotCi1BTFRFUk5BVElWRV8ke1BOfSA9ICJoZHBhcm0iCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbaGRwYXJtXSA9ICIke2Jhc2Vfc2JpbmRpcn0vaGRwYXJtIgotQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgotCi1kb19pbnN0YWxsICgpIHsKLQlpbnN0YWxsIC1kICR7RH0vJHtiYXNlX3NiaW5kaXJ9ICR7RH0vJHttYW5kaXJ9L21hbjggJHtEfS8ke2JpbmRpcn0KLQlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nICdzYmluZGlyPSR7YmFzZV9zYmluZGlyfScgaW5zdGFsbAotCWNwICR7U30vd2lwZXIvd2lwZXIuc2ggJHtEfS8ke2JpbmRpcn0KLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaGRwYXJtL2hkcGFybV85LjUyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9oZHBhcm0vaGRwYXJtXzkuNTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlmZGM5NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaGRwYXJtL2hkcGFybV85LjUyLmJiCkBAIC0wLDAgKzEsNDEgQEAKK1NVTU1BUlkgPSAiVXRpbGl0eSBmb3Igdmlld2luZy9tYW5pcHVsYXRpbmcgSURFIGRpc2sgZHJpdmUvZHJpdmVyIHBhcmFtZXRlcnMiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2hkcGFybS8iCitERVNDUklQVElPTiA9ICJoZHBhcm0gaXMgYSBMaW51eCBzaGVsbCB1dGlsaXR5IGZvciB2aWV3aW5nIFwKK2FuZCBtYW5pcHVsYXRpbmcgdmFyaW91cyBJREUgZHJpdmUgYW5kIGRyaXZlciBwYXJhbWV0ZXJzLiIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworTElDRU5TRSA9ICJCU0QgJiBHUEx2MiIKK0xJQ0VOU0VfJHtQTn0gPSAiQlNEIgorTElDRU5TRV8ke1BOfS1kYmcgPSAiQlNEIgorTElDRU5TRV93aXBlciA9ICJHUEx2MiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS5UWFQ7bWQ1PTQ5NWQwM2U1MGRjNmM4OWQ2YTMwMTA3YWIwZGY1YjAzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9jb3B5cmlnaHQ7bWQ1PWE4MmQ3YmEzYWRlOWU4ZWM5MDI3NDlkYjk4YzU5MmYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3dpcGVyL0dQTHYyLnR4dDttZDU9ZmNiMDJkYzU1MmEwNDFkZWUyN2U0Yjg1YzczOTYwNjcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vd2lwZXIvd2lwZXIuc2g7YmVnaW5saW5lPTc7ZW5kbGluZT0zMTttZDU9YjdiYzY0MmFkZGMxNTJlYTMwNzUwNWJmMWEyOTZmMDkiCisKKworUEFDS0FHRVMgPSsgIndpcGVyIgorCitGSUxFU193aXBlciA9ICIke2JpbmRpcn0vd2lwZXIuc2giCisKK1JERVBFTkRTX3dpcGVyID0gImJhc2ggZ2F3ayBzdGF0IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9oZHBhcm0vJHtCUH0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDEwNTM5ZDBiZjNjYzI0NzE4MTU5NDU4MWVkYmZiNTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzM0MjljZDQyM2UyNzFmYTU2NWJmNTg0NTk4ZmQ3NTFkZDJlNzczYmI3MTk5YTU5MmIwNmI1YTYxY2VjNGZiNiIKKworRVhUUkFfT0VNQUtFID0gJ1NUUklQPSJlY2hvIiBMREZMQUdTPSIke0xERkxBR1N9IicKKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImhkcGFybSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtoZHBhcm1dID0gIiR7YmFzZV9zYmluZGlyfS9oZHBhcm0iCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke2Jhc2Vfc2JpbmRpcn0gJHtEfS8ke21hbmRpcn0vbWFuOCAke0R9LyR7YmluZGlyfQorCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgJ3NiaW5kaXI9JHtiYXNlX3NiaW5kaXJ9JyBpbnN0YWxsCisJY3AgJHtTfS93aXBlci93aXBlci5zaCAke0R9LyR7YmluZGlyfQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL2FycGluZy1maXgtYXJwaW5nLWhhbmctaWYtU0lHQUxSTS1pcy1ibG9ja2VkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL2FycGluZy1maXgtYXJwaW5nLWhhbmctaWYtU0lHQUxSTS1pcy1ibG9ja2VkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNTYyNzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvYXJwaW5nLWZpeC1hcnBpbmctaGFuZy1pZi1TSUdBTFJNLWlzLWJsb2NrZWQucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorYXJwaW5nOiBmaXggYXJwaW5nIGhhbmcgaWYgU0lHQUxSTSBpcyBibG9ja2VkCisKK1VuYmxvY2sgU0lHQUxSTSBzbyB0aGF0IHRoZSBwcmV2aW91c2x5IGNhbGxlZCBhbGFybSgpIGNhbiBwcmV2ZW50CityZWN2ZnJvbSgpIGZyb20gYmxvY2tpbmcgZm9yZXZlciBpbiBjYXNlIHRoZSBpbmhlcml0ZWQgcHJvY21hc2sgaXMKK2Jsb2NraW5nIFNJR0FMUk0gYW5kIG5vIHBhY2tldCBpcyByZWNlaXZlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitSZXBvcnRlZC1ieTogUnVpIFByaW9yIDxycHJpb3JAZGNjLmZjLnVwLnB0PgorUkgtQnVnemlsbGE6ICMxMDg1OTcxCitTaWduZWQtb2ZmLWJ5OiBKYW4gU3luYWNlayA8anN5bmFjZWtAcmVkaGF0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IFpoZW5ibyBHYW8gPHpoZW5iby5nYW9Ad2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL2FycGluZy5jLm9yaWcgYi9hcnBpbmcuYworaW5kZXggMzU0MDhjMS4uMjA5ODE1OSAxMDA2NDQKKy0tLSBhL2FycGluZy5jLm9yaWcKKysrKyBiL2FycGluZy5jCitAQCAtMTIxNSwxNiArMTIxNSwyMiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCXNvY2tsZW5fdCBhbGVuID0gc2l6ZW9mKGZyb20pOworIAkJaW50IGNjOworIAorKwkJc2lnZW1wdHlzZXQoJnNzZXQpOworKwkJc2lnYWRkc2V0KCZzc2V0LCBTSUdBTFJNKTsKKysJCXNpZ2FkZHNldCgmc3NldCwgU0lHSU5UKTsKKysJCS8qIFVuYmxvY2sgU0lHQUxSTSBzbyB0aGF0IHRoZSBwcmV2aW91c2x5IGNhbGxlZCBhbGFybSgpCisrCQkgKiBjYW4gcHJldmVudCByZWN2ZnJvbSBmcm9tIGJsb2NraW5nIGZvcmV2ZXIgaW4gY2FzZSB0aGUKKysJCSAqIGluaGVyaXRlZCBwcm9jbWFzayBpcyBibG9ja2luZyBTSUdBTFJNIGFuZCBubyBwYWNrZXQKKysJCSAqIGlzIHJlY2VpdmVkLiAqLworKwkJc2lncHJvY21hc2soU0lHX1VOQkxPQ0ssICZzc2V0LCAmb3NzZXQpOworKworIAkJaWYgKChjYyA9IHJlY3Zmcm9tKHMsIHBhY2tldCwgc2l6ZW9mKHBhY2tldCksIDAsCisgCQkJCSAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmZnJvbSwgJmFsZW4pKSA8IDApIHsKKyAJCQlwZXJyb3IoImFycGluZzogcmVjdmZyb20iKTsKKyAJCQljb250aW51ZTsKKyAJCX0KKyAKKy0JCXNpZ2VtcHR5c2V0KCZzc2V0KTsKKy0JCXNpZ2FkZHNldCgmc3NldCwgU0lHQUxSTSk7CistCQlzaWdhZGRzZXQoJnNzZXQsIFNJR0lOVCk7CistCQlzaWdwcm9jbWFzayhTSUdfQkxPQ0ssICZzc2V0LCAmb3NzZXQpOworKwkJc2lncHJvY21hc2soU0lHX0JMT0NLLCAmc3NldCwgTlVMTCk7CisgCQlyZWN2X3BhY2socGFja2V0LCBjYywgKHN0cnVjdCBzb2NrYWRkcl9sbCAqKSZmcm9tKTsKKyAJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb3NzZXQsIE5VTEwpOworIAl9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvaXB1dGlsc19zMjAxNTEyMTguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvaXB1dGlsc19zMjAxNTEyMTguYmIKaW5kZXggMGQ0ZGQxYi4uNDZkZTZmYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2lwdXRpbHNfczIwMTUxMjE4LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB1dGlscy9pcHV0aWxzX3MyMDE1MTIxOC5iYgpAQCAtMjAsNiArMjAsNyBAQAogICAgICAgICAgICBmaWxlOi8vbnNnbWxzLXBhdGgtZml4LnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWhlYWRlci1pbmNsdXNpb24tZm9yLW11c2wucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1JbnRpYWxpemUtc3RydWN0LWVsZW1lbnRzLWJ5LW5hbWUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXJwaW5nLWZpeC1hcnBpbmctaGFuZy1pZi1TSUdBTFJNLWlzLWJsb2NrZWQucGF0Y2ggXAogICAgICAgICAgICIKIAogU1JDX1VSSVttZDVzdW1dID0gIjhhYWE3Mzk1ZjI3ZGZmOWY1N2FlMDE2ZDRiYzc1M2NlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2ZpbGVzLzAwMDEtYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMtbWFrZS1fZnNvYmotZnVuY3Rpb25zLW1vci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9maWxlcy8wMDAxLWFyY2hpdmVfd3JpdGVfZGlza19wb3NpeC5jLW1ha2UtX2Zzb2JqLWZ1bmN0aW9ucy1tb3IucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MTFhN2MuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2ZpbGVzLzAwMDEtYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMtbWFrZS1fZnNvYmotZnVuY3Rpb25zLW1vci5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI0NSArMCwwIEBACi1Gcm9tIDkwODgxZDI0ZDNmNmQ1ZmIyMDdlOTdkZjNiOTFiYmVhODU5OGU4NGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBNYXJ0aW4gTWF0dXNrYSA8bWFydGluQG1hdHVza2Eub3JnPgotRGF0ZTogVHVlLCAyOSBOb3YgMjAxNiAxNjo0NzozNyArMDEwMAotU3ViamVjdDogW1BBVENIIDEvMl0gYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmM6IG1ha2UgKl9mc29iaiBmdW5jdGlvbnMgbW9yZQotIHJlYWRhYmxlCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnRlZAotCi1TaWduZWQtb2ZmLWJ5OiBBbWFybmF0aCBWYWxsdXJpIDxhbWFybmF0aC52YWxsdXJpQGludGVsLmNvbT4KLS0tLQotIGxpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMgfCAxMjEgKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCA2MSBpbnNlcnRpb25zKCspLCA2MCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMgYi9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wb3NpeC5jCi1pbmRleCAxN2MyM2IwLi5kNzg2YmMyIDEwMDY0NAotLS0tIGEvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYwotKysrIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYwotQEAgLTMzNiw2ICszMzYsOCBAQCBzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrIHsKLSAKLSAjZGVmaW5lIEhGU19CTE9DS1MocykJKChzKSA+PiAxMikKLSAKLStzdGF0aWMgdm9pZAlmc29ial9lcnJvcihpbnQgKiwgc3RydWN0IGFyY2hpdmVfc3RyaW5nICosIGludCwgY29uc3QgY2hhciAqLAotKwkJICAgIGNvbnN0IGNoYXIgKik7Ci0gc3RhdGljIGludAljaGVja19zeW1saW5rc19mc29iaihjaGFyICpwYXRoLCBpbnQgKmVycm9yX251bWJlciwgc3RydWN0IGFyY2hpdmVfc3RyaW5nICplcnJvcl9zdHJpbmcsIGludCBmbGFncyk7Ci0gc3RhdGljIGludAljaGVja19zeW1saW5rcyhzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICopOwotIHN0YXRpYyBpbnQJY3JlYXRlX2ZpbGVzeXN0ZW1fb2JqZWN0KHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKik7Ci1AQCAtMjAwNSw4ICsyMDA3LDkgQEAgcmVzdG9yZV9lbnRyeShzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphKQotIAotIAlpZiAoZW4pIHsKLSAJCS8qIEV2ZXJ5dGhpbmcgZmFpbGVkOyBnaXZlIHVwIGhlcmUuICovCi0tCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgZW4sICJDYW4ndCBjcmVhdGUgJyVzJyIsCi0tCQkgICAgYS0+bmFtZSk7Ci0rCQlpZiAoKCZhLT5hcmNoaXZlKS0+ZXJyb3IgPT0gTlVMTCkKLSsJCQlhcmNoaXZlX3NldF9lcnJvcigmYS0+YXJjaGl2ZSwgZW4sICJDYW4ndCBjcmVhdGUgJyVzJyIsCi0rCQkJICAgIGEtPm5hbWUpOwotIAkJcmV0dXJuIChBUkNISVZFX0ZBSUxFRCk7Ci0gCX0KLSAKLUBAIC0yMzg4LDYgKzIzOTEsMTcgQEAgY3VycmVudF9maXh1cChzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphLCBjb25zdCBjaGFyICpwYXRobmFtZSkKLSAJcmV0dXJuIChhLT5jdXJyZW50X2ZpeHVwKTsKLSB9Ci0gCi0rLyogRXJyb3IgaGVscGVyIGZvciBuZXcgKl9mc29iaiBmdW5jdGlvbnMgKi8KLStzdGF0aWMgdm9pZAotK2Zzb2JqX2Vycm9yKGludCAqYV9lbm8sIHN0cnVjdCBhcmNoaXZlX3N0cmluZyAqYV9lc3RyLAotKyAgICBpbnQgZXJyLCBjb25zdCBjaGFyICplcnJzdHIsIGNvbnN0IGNoYXIgKnBhdGgpCi0rewotKwlpZiAoYV9lbm8pCi0rCQkqYV9lbm8gPSBlcnI7Ci0rCWlmIChhX2VzdHIpCi0rCQlhcmNoaXZlX3N0cmluZ19zcHJpbnRmKGFfZXN0ciwgZXJyc3RyLCBwYXRoKTsKLSt9Ci0rCi0gLyoKLSAgKiBUT0RPOiBTb21lZGF5LCBpbnRlZ3JhdGUgdGhpcyB3aXRoIHRoZSBkZWVwIGRpciBzdXBwb3J0OyB0aGV5IGJvdGgKLSAgKiBzY2FuIHRoZSBwYXRoIGFuZCBib3RoIGNhbiBiZSBvcHRpbWl6ZWQgYnkgY29tcGFyaW5nIGFnYWluc3Qgb3RoZXIKLUBAIC0yNDAwLDcgKzI0MTQsNyBAQCBjdXJyZW50X2ZpeHVwKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKmEsIGNvbnN0IGNoYXIgKnBhdGhuYW1lKQotICAqIEFSQ0hJVkVfT0sgaWYgdGhlcmUgYXJlIG5vbmUsIG90aGVyd2lzZSBwdXRzIGFuIGVycm9yIGluIGVycm1zZy4KLSAgKi8KLSBzdGF0aWMgaW50Ci0tY2hlY2tfc3ltbGlua3NfZnNvYmooY2hhciAqcGF0aCwgaW50ICplcnJvcl9udW1iZXIsIHN0cnVjdCBhcmNoaXZlX3N0cmluZyAqZXJyb3Jfc3RyaW5nLCBpbnQgZmxhZ3MpCi0rY2hlY2tfc3ltbGlua3NfZnNvYmooY2hhciAqcGF0aCwgaW50ICphX2Vubywgc3RydWN0IGFyY2hpdmVfc3RyaW5nICphX2VzdHIsIGludCBmbGFncykKLSB7Ci0gI2lmICFkZWZpbmVkKEhBVkVfTFNUQVQpCi0gCS8qIFBsYXRmb3JtIGRvZXNuJ3QgaGF2ZSBsc3RhdCwgc28gd2UgY2FuJ3QgbG9vayBmb3Igc3ltbGlua3MuICovCi1AQCAtMjQ3NCwxOSArMjQ4OCwyMCBAQCBjaGVja19zeW1saW5rc19mc29iaihjaGFyICpwYXRoLCBpbnQgKmVycm9yX251bWJlciwgc3RydWN0IGFyY2hpdmVfc3RyaW5nICplcnJvcgotIAkJCWlmIChlcnJubyA9PSBFTk9FTlQpIHsKLSAJCQkJYnJlYWs7Ci0gCQkJfSBlbHNlIHsKLS0JCQkJLyogVHJlYXQgYW55IG90aGVyIGVycm9yIGFzIGZhdGFsIC0gYmVzdCB0byBiZSBwYXJhbm9pZCBoZXJlCi0tCQkJCSAqIE5vdGU6IFRoaXMgZWZmZWN0aXZlbHkgZGlzYWJsZXMgZGVlcCBkaXJlY3RvcnkKLS0JCQkJICogc3VwcG9ydCB3aGVuIHNlY3VyaXR5IGNoZWNrcyBhcmUgZW5hYmxlZC4KLS0JCQkJICogT3RoZXJ3aXNlLCB2ZXJ5IGxvbmcgcGF0aG5hbWVzIHRoYXQgdHJpZ2dlcgotLQkJCQkgKiBhbiBlcnJvciBoZXJlIGNvdWxkIGV2YWRlIHRoZSBzYW5kYm94LgotLQkJCQkgKiBUT0RPOiBXZSBjb3VsZCBkbyBiZXR0ZXIsIGJ1dCBpdCB3b3VsZCBwcm9iYWJseQotLQkJCQkgKiByZXF1aXJlIG1lcmdpbmcgdGhlIHN5bWxpbmsgY2hlY2tzIHdpdGggdGhlCi0tCQkJCSAqIGRlZXAtZGlyZWN0b3J5IGVkaXRpbmcuICovCi0tCQkJCWlmIChlcnJvcl9udW1iZXIpICplcnJvcl9udW1iZXIgPSBlcnJubzsKLS0JCQkJaWYgKGVycm9yX3N0cmluZykKLS0JCQkJCWFyY2hpdmVfc3RyaW5nX3NwcmludGYoZXJyb3Jfc3RyaW5nLAotLQkJCQkJCQkiQ291bGQgbm90IHN0YXQgJXMiLAotLQkJCQkJCQlwYXRoKTsKLSsJCQkJLyoKLSsJCQkJICogVHJlYXQgYW55IG90aGVyIGVycm9yIGFzIGZhdGFsIC0gYmVzdCB0byBiZQotKwkJCQkgKiBwYXJhbm9pZCBoZXJlLgotKwkJCQkgKiBOb3RlOiBUaGlzIGVmZmVjdGl2ZWx5IGRpc2FibGVzIGRlZXAKLSsJCQkJICogZGlyZWN0b3J5IHN1cHBvcnQgd2hlbiBzZWN1cml0eSBjaGVja3MgYXJlCi0rCQkJCSAqIGVuYWJsZWQuIE90aGVyd2lzZSwgdmVyeSBsb25nIHBhdGhuYW1lcyB0aGF0Ci0rCQkJCSAqIHRyaWdnZXIgYW4gZXJyb3IgaGVyZSBjb3VsZCBldmFkZSB0aGUKLSsJCQkJICogc2FuZGJveC4KLSsJCQkJICogVE9ETzogV2UgY291bGQgZG8gYmV0dGVyLCBidXQgaXQgd291bGQKLSsJCQkJICogcHJvYmFibHkgcmVxdWlyZSBtZXJnaW5nIHRoZSBzeW1saW5rIGNoZWNrcwotKwkJCQkgKiB3aXRoIHRoZSBkZWVwLWRpcmVjdG9yeSBlZGl0aW5nLgotKwkJCQkgKi8KLSsJCQkJZnNvYmpfZXJyb3IoYV9lbm8sIGFfZXN0ciwgZXJybm8sCi0rCQkJCSAgICAiQ291bGQgbm90IHN0YXQgJXMiLCBwYXRoKTsKLSAJCQkJcmVzID0gQVJDSElWRV9GQUlMRUQ7Ci0gCQkJCWJyZWFrOwotIAkJCX0KLUBAIC0yNDk0LDExICsyNTA5LDggQEAgY2hlY2tfc3ltbGlua3NfZnNvYmooY2hhciAqcGF0aCwgaW50ICplcnJvcl9udW1iZXIsIHN0cnVjdCBhcmNoaXZlX3N0cmluZyAqZXJyb3IKLSAJCQlpZiAoIWxhc3QpIHsKLSAJCQkJaWYgKGNoZGlyKGhlYWQpICE9IDApIHsKLSAJCQkJCXRhaWxbMF0gPSBjOwotLQkJCQkJaWYgKGVycm9yX251bWJlcikgKmVycm9yX251bWJlciA9IGVycm5vOwotLQkJCQkJaWYgKGVycm9yX3N0cmluZykKLS0JCQkJCQlhcmNoaXZlX3N0cmluZ19zcHJpbnRmKGVycm9yX3N0cmluZywKLS0JCQkJCQkJCSJDb3VsZCBub3QgY2hkaXIgJXMiLAotLQkJCQkJCQkJcGF0aCk7Ci0rCQkJCQlmc29ial9lcnJvcihhX2VubywgYV9lc3RyLCBlcnJubywKLSsJCQkJCSAgICAiQ291bGQgbm90IGNoZGlyICVzIiwgcGF0aCk7Ci0gCQkJCQlyZXMgPSAoQVJDSElWRV9GQVRBTCk7Ci0gCQkJCQlicmVhazsKLSAJCQkJfQotQEAgLTI1MTQsMTEgKzI1MjYsOSBAQCBjaGVja19zeW1saW5rc19mc29iaihjaGFyICpwYXRoLCBpbnQgKmVycm9yX251bWJlciwgc3RydWN0IGFyY2hpdmVfc3RyaW5nICplcnJvcgotIAkJCQkgKi8KLSAJCQkJaWYgKHVubGluayhoZWFkKSkgewotIAkJCQkJdGFpbFswXSA9IGM7Ci0tCQkJCQlpZiAoZXJyb3JfbnVtYmVyKSAqZXJyb3JfbnVtYmVyID0gZXJybm87Ci0tCQkJCQlpZiAoZXJyb3Jfc3RyaW5nKQotLQkJCQkJCWFyY2hpdmVfc3RyaW5nX3NwcmludGYoZXJyb3Jfc3RyaW5nLAotLQkJCQkJCQkJIkNvdWxkIG5vdCByZW1vdmUgc3ltbGluayAlcyIsCi0tCQkJCQkJCQlwYXRoKTsKLSsJCQkJCWZzb2JqX2Vycm9yKGFfZW5vLCBhX2VzdHIsIGVycm5vLAotKwkJCQkJICAgICJDb3VsZCBub3QgcmVtb3ZlIHN5bWxpbmsgJXMiLAotKwkJCQkJICAgIHBhdGgpOwotIAkJCQkJcmVzID0gQVJDSElWRV9GQUlMRUQ7Ci0gCQkJCQlicmVhazsKLSAJCQkJfQotQEAgLTI1MjksMTMgKzI1MzksMTQgQEAgY2hlY2tfc3ltbGlua3NfZnNvYmooY2hhciAqcGF0aCwgaW50ICplcnJvcl9udW1iZXIsIHN0cnVjdCBhcmNoaXZlX3N0cmluZyAqZXJyb3IKLSAJCQkJICogc3ltbGluayB3aXRoIGFub3RoZXIgc3ltbGluay4KLSAJCQkJICovCi0gCQkJCXRhaWxbMF0gPSBjOwotLQkJCQkvKiBGSVhNRTogIG5vdCBzdXJlIGhvdyBpbXBvcnRhbnQgdGhpcyBpcyB0byByZXN0b3JlCi0rCQkJCS8qCi0rCQkJCSAqIEZJWE1FOiAgbm90IHN1cmUgaG93IGltcG9ydGFudCB0aGlzIGlzIHRvCi0rCQkJCSAqIHJlc3RvcmUKLSsJCQkJICovCi0rCQkJCS8qCi0gCQkJCWlmICghU19JU0xOSyhwYXRoKSkgewotLQkJCQkJaWYgKGVycm9yX251bWJlcikgKmVycm9yX251bWJlciA9IDA7Ci0tCQkJCQlpZiAoZXJyb3Jfc3RyaW5nKQotLQkJCQkJCWFyY2hpdmVfc3RyaW5nX3NwcmludGYoZXJyb3Jfc3RyaW5nLAotLQkJCQkJCQkJIlJlbW92aW5nIHN5bWxpbmsgJXMiLAotLQkJCQkJCQkJcGF0aCk7Ci0rCQkJCQlmc29ial9lcnJvcihhX2VubywgYV9lc3RyLCAwLAotKwkJCQkJICAgICJSZW1vdmluZyBzeW1saW5rICVzIiwgcGF0aCk7Ci0gCQkJCX0KLSAJCQkJKi8KLSAJCQkJLyogU3ltbGluayBnb25lLiAgTm8gbW9yZSBwcm9ibGVtISAqLwotQEAgLTI1NDUsMjIgKzI1NTYsMTcgQEAgY2hlY2tfc3ltbGlua3NfZnNvYmooY2hhciAqcGF0aCwgaW50ICplcnJvcl9udW1iZXIsIHN0cnVjdCBhcmNoaXZlX3N0cmluZyAqZXJyb3IKLSAJCQkJLyogVXNlciBhc2tlZCB1cyB0byByZW1vdmUgcHJvYmxlbXMuICovCi0gCQkJCWlmICh1bmxpbmsoaGVhZCkgIT0gMCkgewotIAkJCQkJdGFpbFswXSA9IGM7Ci0tCQkJCQlpZiAoZXJyb3JfbnVtYmVyKSAqZXJyb3JfbnVtYmVyID0gMDsKLS0JCQkJCWlmIChlcnJvcl9zdHJpbmcpCi0tCQkJCQkJYXJjaGl2ZV9zdHJpbmdfc3ByaW50ZihlcnJvcl9zdHJpbmcsCi0tCQkJCQkJCQkiQ2Fubm90IHJlbW92ZSBpbnRlcnZlbmluZyBzeW1saW5rICVzIiwKLS0JCQkJCQkJCXBhdGgpOwotKwkJCQkJZnNvYmpfZXJyb3IoYV9lbm8sIGFfZXN0ciwgMCwKLSsJCQkJCSAgICAiQ2Fubm90IHJlbW92ZSBpbnRlcnZlbmluZyAiCi0rCQkJCQkgICAgInN5bWxpbmsgJXMiLCBwYXRoKTsKLSAJCQkJCXJlcyA9IEFSQ0hJVkVfRkFJTEVEOwotIAkJCQkJYnJlYWs7Ci0gCQkJCX0KLSAJCQkJdGFpbFswXSA9IGM7Ci0gCQkJfSBlbHNlIHsKLSAJCQkJdGFpbFswXSA9IGM7Ci0tCQkJCWlmIChlcnJvcl9udW1iZXIpICplcnJvcl9udW1iZXIgPSAwOwotLQkJCQlpZiAoZXJyb3Jfc3RyaW5nKQotLQkJCQkJYXJjaGl2ZV9zdHJpbmdfc3ByaW50ZihlcnJvcl9zdHJpbmcsCi0tCQkJCQkJCSJDYW5ub3QgZXh0cmFjdCB0aHJvdWdoIHN5bWxpbmsgJXMiLAotLQkJCQkJCQlwYXRoKTsKLSsJCQkJZnNvYmpfZXJyb3IoYV9lbm8sIGFfZXN0ciwgMCwKLSsJCQkJICAgICJDYW5ub3QgZXh0cmFjdCB0aHJvdWdoIHN5bWxpbmsgJXMiLCBwYXRoKTsKLSAJCQkJcmVzID0gQVJDSElWRV9GQUlMRUQ7Ci0gCQkJCWJyZWFrOwotIAkJCX0KLUBAIC0yNTc3LDEwICsyNTgzLDggQEAgY2hlY2tfc3ltbGlua3NfZnNvYmooY2hhciAqcGF0aCwgaW50ICplcnJvcl9udW1iZXIsIHN0cnVjdCBhcmNoaXZlX3N0cmluZyAqZXJyb3IKLSAJaWYgKHJlc3RvcmVfcHdkID49IDApIHsKLSAJCXIgPSBmY2hkaXIocmVzdG9yZV9wd2QpOwotIAkJaWYgKHIgIT0gMCkgewotLQkJCWlmKGVycm9yX251bWJlcikgKmVycm9yX251bWJlciA9IGVycm5vOwotLQkJCWlmKGVycm9yX3N0cmluZykKLS0JCQkJYXJjaGl2ZV9zdHJpbmdfc3ByaW50ZihlcnJvcl9zdHJpbmcsCi0tCQkJCQkJImNoZGlyKCkgZmFpbHVyZSIpOwotKwkJCWZzb2JqX2Vycm9yKGFfZW5vLCBhX2VzdHIsIGVycm5vLAotKwkJCSAgICAiY2hkaXIoKSBmYWlsdXJlIiwgIiIpOwotIAkJfQotIAkJY2xvc2UocmVzdG9yZV9wd2QpOwotIAkJcmVzdG9yZV9wd2QgPSAtMTsKLUBAIC0yNjg4LDE3ICsyNjkyLDE2IEBAIGNsZWFudXBfcGF0aG5hbWVfd2luKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKmEpCi0gICogaXMgc2V0KSBpZiB0aGUgcGF0aCBpcyBhYnNvbHV0ZS4KLSAgKi8KLSBzdGF0aWMgaW50Ci0tY2xlYW51cF9wYXRobmFtZV9mc29iaihjaGFyICpwYXRoLCBpbnQgKmVycm9yX251bWJlciwgc3RydWN0IGFyY2hpdmVfc3RyaW5nICplcnJvcl9zdHJpbmcsIGludCBmbGFncykKLStjbGVhbnVwX3BhdGhuYW1lX2Zzb2JqKGNoYXIgKnBhdGgsIGludCAqYV9lbm8sIHN0cnVjdCBhcmNoaXZlX3N0cmluZyAqYV9lc3RyLAotKyAgICBpbnQgZmxhZ3MpCi0gewotIAljaGFyICpkZXN0LCAqc3JjOwotIAljaGFyIHNlcGFyYXRvciA9ICdcMCc7Ci0gCi0gCWRlc3QgPSBzcmMgPSBwYXRoOwotIAlpZiAoKnNyYyA9PSAnXDAnKSB7Ci0tCQlpZiAoZXJyb3JfbnVtYmVyKSAqZXJyb3JfbnVtYmVyID0gQVJDSElWRV9FUlJOT19NSVNDOwotLQkJaWYgKGVycm9yX3N0cmluZykKLS0JCSAgICBhcmNoaXZlX3N0cmluZ19zcHJpbnRmKGVycm9yX3N0cmluZywKLS0JCQkgICAgIkludmFsaWQgZW1wdHkgcGF0aG5hbWUiKTsKLSsJCWZzb2JqX2Vycm9yKGFfZW5vLCBhX2VzdHIsIEFSQ0hJVkVfRVJSTk9fTUlTQywKLSsJCSAgICAiSW52YWxpZCBlbXB0eSAiLCAicGF0aG5hbWUiKTsKLSAJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOwotIAl9Ci0gCi1AQCAtMjcwOCwxMCArMjcxMSw4IEBAIGNsZWFudXBfcGF0aG5hbWVfZnNvYmooY2hhciAqcGF0aCwgaW50ICplcnJvcl9udW1iZXIsIHN0cnVjdCBhcmNoaXZlX3N0cmluZyAqZXJyCi0gCS8qIFNraXAgbGVhZGluZyAnLycuICovCi0gCWlmICgqc3JjID09ICcvJykgewotIAkJaWYgKGZsYWdzICYgQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFMpIHsKLS0JCQlpZiAoZXJyb3JfbnVtYmVyKSAqZXJyb3JfbnVtYmVyID0gQVJDSElWRV9FUlJOT19NSVNDOwotLQkJCWlmIChlcnJvcl9zdHJpbmcpCi0tCQkJICAgIGFyY2hpdmVfc3RyaW5nX3NwcmludGYoZXJyb3Jfc3RyaW5nLAotLQkJCQkgICAgIlBhdGggaXMgYWJzb2x1dGUiKTsKLSsJCQlmc29ial9lcnJvcihhX2VubywgYV9lc3RyLCBBUkNISVZFX0VSUk5PX01JU0MsCi0rCQkJICAgICJQYXRoIGlzICIsICJhYnNvbHV0ZSIpOwotIAkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOwotIAkJfQotIAotQEAgLTI3MzgsMTEgKzI3MzksMTEgQEAgY2xlYW51cF9wYXRobmFtZV9mc29iaihjaGFyICpwYXRoLCBpbnQgKmVycm9yX251bWJlciwgc3RydWN0IGFyY2hpdmVfc3RyaW5nICplcnIKLSAJCQl9IGVsc2UgaWYgKHNyY1sxXSA9PSAnLicpIHsKLSAJCQkJaWYgKHNyY1syXSA9PSAnLycgfHwgc3JjWzJdID09ICdcMCcpIHsKLSAJCQkJCS8qIENvbmRpdGlvbmFsbHkgd2FybiBhYm91dCAnLi4nICovCi0tCQkJCQlpZiAoZmxhZ3MgJiBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PRE9URE9UKSB7Ci0tCQkJCQkJaWYgKGVycm9yX251bWJlcikgKmVycm9yX251bWJlciA9IEFSQ0hJVkVfRVJSTk9fTUlTQzsKLS0JCQkJCQlpZiAoZXJyb3Jfc3RyaW5nKQotLQkJCQkJCSAgICBhcmNoaXZlX3N0cmluZ19zcHJpbnRmKGVycm9yX3N0cmluZywKLS0JCQkJCQkJICAgICJQYXRoIGNvbnRhaW5zICcuLiciKTsKLSsJCQkJCWlmIChmbGFncwotKwkJCQkJICAgICYgQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0RPVERPVCkgewotKwkJCQkJCWZzb2JqX2Vycm9yKGFfZW5vLCBhX2VzdHIsCi0rCQkJCQkJICAgIEFSQ0hJVkVfRVJSTk9fTUlTQywKLSsJCQkJCQkgICAgIlBhdGggY29udGFpbnMgIiwgIicuLiciKTsKLSAJCQkJCQlyZXR1cm4gKEFSQ0hJVkVfRkFJTEVEKTsKLSAJCQkJCX0KLSAJCQkJfQotLS0gCi0yLjcuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvZmlsZXMvMDAwMi1GaXgtZXh0cmFjdGluZy1oYXJkbGlua3Mtb3Zlci1zeW1saW5rcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9maWxlcy8wMDAyLUZpeC1leHRyYWN0aW5nLWhhcmRsaW5rcy1vdmVyLXN5bWxpbmtzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzQxODYzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9maWxlcy8wMDAyLUZpeC1leHRyYWN0aW5nLWhhcmRsaW5rcy1vdmVyLXN5bWxpbmtzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLUZyb20gZWNlMjgxMDM4ODVhMDc5YTEyOWEyM2M1MDAxMjUyYTE2NDg1MTdhZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IE1hcnRpbiBNYXR1c2thIDxtYXJ0aW5AbWF0dXNrYS5vcmc+Ci1EYXRlOiBUdWUsIDI5IE5vdiAyMDE2IDE2OjU1OjQxICswMTAwCi1TdWJqZWN0OiBbUEFUQ0ggMi8yXSBGaXggZXh0cmFjdGluZyBoYXJkbGlua3Mgb3ZlciBzeW1saW5rcwotCi1DbG9zZXMgIzgyMQotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0ZWQKLQotU2lnbmVkLW9mZi1ieTogQW1hcm5hdGggVmFsbHVyaSA8YW1hcm5hdGgudmFsbHVyaUBpbnRlbC5jb20+Ci0tLS0KLSBsaWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wb3NpeC5jIHwgNDMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKLSB0YXIvdGVzdC90ZXN0X3N5bWxpbmtfZGlyLmMgICAgICAgICAgIHwgMTggKysrKysrKysrKysrKystCi0gMiBmaWxlcyBjaGFuZ2VkLCA2MCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wb3NpeC5jIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYwotaW5kZXggZDc4NmJjMi4uODBiMDNjZCAxMDA2NDQKLS0tLSBhL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMKLSsrKyBiL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMKLUBAIC0yNTYzLDYgKzI1NjMsNDkgQEAgY2hlY2tfc3ltbGlua3NfZnNvYmooY2hhciAqcGF0aCwgaW50ICphX2Vubywgc3RydWN0IGFyY2hpdmVfc3RyaW5nICphX2VzdHIsIGludAotIAkJCQkJYnJlYWs7Ci0gCQkJCX0KLSAJCQkJdGFpbFswXSA9IGM7Ci0rCQkJfSBlbHNlIGlmICgoZmxhZ3MgJgotKwkJCSAgICBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX1NZTUxJTktTKSA9PSAwKSB7Ci0rCQkJCS8qCi0rCQkJCSAqIFdlIGFyZSBub3QgdGhlIGxhc3QgZWxlbWVudCBhbmQgd2Ugd2FudCB0bwotKwkJCQkgKiBmb2xsb3cgc3ltbGlua3MgaWYgdGhleSBhcmUgYSBkaXJlY3RvcnkuCi0rCQkJCSAqIAotKwkJCQkgKiBUaGlzIGlzIG5lZWRlZCB0byBleHRyYWN0IGhhcmRsaW5rcyBvdmVyCi0rCQkJCSAqIHN5bWxpbmtzLgotKwkJCQkgKi8KLSsJCQkJciA9IHN0YXQoaGVhZCwgJnN0KTsKLSsJCQkJaWYgKHIgIT0gMCkgewotKwkJCQkJdGFpbFswXSA9IGM7Ci0rCQkJCQlpZiAoZXJybm8gPT0gRU5PRU5UKSB7Ci0rCQkJCQkJYnJlYWs7Ci0rCQkJCQl9IGVsc2UgewotKwkJCQkJCWZzb2JqX2Vycm9yKGFfZW5vLCBhX2VzdHIsCi0rCQkJCQkJICAgIGVycm5vLAotKwkJCQkJCSAgICAiQ291bGQgbm90IHN0YXQgJXMiLCBwYXRoKTsKLSsJCQkJCQlyZXMgPSAoQVJDSElWRV9GQUlMRUQpOwotKwkJCQkJCWJyZWFrOwotKwkJCQkJfQotKwkJCQl9IGVsc2UgaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKLSsJCQkJCWlmIChjaGRpcihoZWFkKSAhPSAwKSB7Ci0rCQkJCQkJdGFpbFswXSA9IGM7Ci0rCQkJCQkJZnNvYmpfZXJyb3IoYV9lbm8sIGFfZXN0ciwKLSsJCQkJCQkgICAgZXJybm8sCi0rCQkJCQkJICAgICJDb3VsZCBub3QgY2hkaXIgJXMiLCBwYXRoKTsKLSsJCQkJCQlyZXMgPSAoQVJDSElWRV9GQVRBTCk7Ci0rCQkJCQkJYnJlYWs7Ci0rCQkJCQl9Ci0rCQkJCQkvKgotKwkJCQkJICogT3VyIHZpZXcgaXMgbm93IGZyb20gaW5zaWRlCi0rCQkJCQkgKiB0aGlzIGRpcjoKLSsJCQkJCSAqLwotKwkJCQkJaGVhZCA9IHRhaWwgKyAxOwotKwkJCQl9IGVsc2UgewotKwkJCQkJdGFpbFswXSA9IGM7Ci0rCQkJCQlmc29ial9lcnJvcihhX2VubywgYV9lc3RyLCAwLAotKwkJCQkJICAgICJDYW5ub3QgZXh0cmFjdCB0aHJvdWdoICIKLSsJCQkJCSAgICAic3ltbGluayAlcyIsIHBhdGgpOwotKwkJCQkJcmVzID0gQVJDSElWRV9GQUlMRUQ7Ci0rCQkJCQlicmVhazsKLSsJCQkJfQotIAkJCX0gZWxzZSB7Ci0gCQkJCXRhaWxbMF0gPSBjOwotIAkJCQlmc29ial9lcnJvcihhX2VubywgYV9lc3RyLCAwLAotZGlmZiAtLWdpdCBhL3Rhci90ZXN0L3Rlc3Rfc3ltbGlua19kaXIuYyBiL3Rhci90ZXN0L3Rlc3Rfc3ltbGlua19kaXIuYwotaW5kZXggMjViZDhiMS4uODUyZTAwYiAxMDA2NDQKLS0tLSBhL3Rhci90ZXN0L3Rlc3Rfc3ltbGlua19kaXIuYwotKysrIGIvdGFyL3Rlc3QvdGVzdF9zeW1saW5rX2Rpci5jCi1AQCAtNDcsMTEgKzQ3LDE4IEBAIERFRklORV9URVNUKHRlc3Rfc3ltbGlua19kaXIpCi0gCWFzc2VydE1ha2VEaXIoInNvdXJjZS9kaXIzIiwgMDc1NSk7Ci0gCWFzc2VydE1ha2VEaXIoInNvdXJjZS9kaXIzL2QzIiwgMDc1NSk7Ci0gCWFzc2VydE1ha2VGaWxlKCJzb3VyY2UvZGlyMy9mMyIsIDA3NTUsICJhYmNkZSIpOwotKwlhc3NlcnRNYWtlRGlyKCJzb3VyY2UvZGlyNCIsIDA3NTUpOwotKwlhc3NlcnRNYWtlRmlsZSgic291cmNlL2RpcjQvZmlsZTMiLCAwNzU1LCAiYWJjZGVmIik7Ci0rCWFzc2VydE1ha2VIYXJkbGluaygic291cmNlL2RpcjQvZmlsZTQiLCAic291cmNlL2RpcjQvZmlsZTMiKTsKLSAKLSAJYXNzZXJ0RXF1YWxJbnQoMCwKLSAJICAgIHN5c3RlbWYoIiVzIC1jZiB0ZXN0LnRhciAtQyBzb3VyY2UgZGlyIGRpcjIgZGlyMyBmaWxlIGZpbGUyIiwKLSAJCXRlc3Rwcm9nKSk7Ci0gCi0rCS8qIFNlY29uZCBhcmNoaXZlIHdpdGggaGFyZGxpbmtzICovCi0rCWFzc2VydEVxdWFsSW50KDAsCi0rCSAgICBzeXN0ZW1mKCIlcyAtY2YgdGVzdDIudGFyIC1DIHNvdXJjZSBkaXI0IiwgdGVzdHByb2cpKTsKLSsKLSAJLyoKLSAJICogRXh0cmFjdCB3aXRoIC14IGFuZCB3aXRob3V0IC1QLgotIAkgKi8KLUBAIC0xMTgsOSArMTI1LDE1IEBAIERFRklORV9URVNUKHRlc3Rfc3ltbGlua19kaXIpCi0gCQlhc3NlcnRNYWtlU3ltbGluaygiZGVzdDIvZmlsZTIiLCAicmVhbF9maWxlMiIpOwotIAlhc3NlcnRFcXVhbEludCgwLCBzeXN0ZW1mKCIlcyAteFBmIHRlc3QudGFyIC1DIGRlc3QyIiwgdGVzdHByb2cpKTsKLSAKLS0JLyogZGVzdDIvZGlyIHN5bWxpbmsgc2hvdWxkIGJlIGZvbGxvd2VkICovCi0rCS8qICJkaXI0IiBpcyBhIHN5bWxpbmsgdG8gZXhpc3RpbmcgInJlYWxfZGlyIiAqLwotKwlpZiAoY2FuU3ltbGluaygpKQotKwkJYXNzZXJ0TWFrZVN5bWxpbmsoImRlc3QyL2RpcjQiLCAicmVhbF9kaXIiKTsKLSsJYXNzZXJ0RXF1YWxJbnQoMCwgc3lzdGVtZigiJXMgLXhQZiB0ZXN0Mi50YXIgLUMgZGVzdDIiLCB0ZXN0cHJvZykpOwotKwotKwkvKiBkZXN0Mi9kaXIgYW5kIGRlc3QyL2RpcjQgc3ltbGlua3Mgc2hvdWxkIGJlIGZvbGxvd2VkICovCi0gCWlmIChjYW5TeW1saW5rKCkpIHsKLSAJCWFzc2VydElzU3ltbGluaygiZGVzdDIvZGlyIiwgInJlYWxfZGlyIik7Ci0rCQlhc3NlcnRJc1N5bWxpbmsoImRlc3QyL2RpcjQiLCAicmVhbF9kaXIiKTsKLSAJCWFzc2VydElzRGlyKCJkZXN0Mi9yZWFsX2RpciIsIC0xKTsKLSAJfQotIAotQEAgLTE0MSw0ICsxNTQsNyBAQCBERUZJTkVfVEVTVCh0ZXN0X3N5bWxpbmtfZGlyKQotIAkvKiBkZXN0Mi9maWxlMiBzeW1saW5rIHNob3VsZCBiZSByZW1vdmVkICovCi0gCWZhaWx1cmUoIlN5bWxpbmsgdG8gbm9uLWV4aXN0aW5nIGZpbGUgc2hvdWxkIGJlIHJlbW92ZWQiKTsKLSAJYXNzZXJ0SXNSZWcoImRlc3QyL2ZpbGUyIiwgLTEpOwotKwotKwkvKiBkZXN0Mi9kaXI0L2ZpbGUzIGFuZCBkZXN0Mi9kaXI0L2ZpbGU0IHNob3VsZCBiZSBoYXJkIGxpbmtzICovCi0rCWFzc2VydElzSGFyZGxpbmsoImRlc3QyL2RpcjQvZmlsZTMiLCAiZGVzdDIvZGlyNC9maWxlNCIpOwotIH0KLS0tIAotMi43LjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2ZpbGVzL25vbi1yZWN1cnNpdmUtZXh0cmFjdC1hbmQtbGlzdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9maWxlcy9ub24tcmVjdXJzaXZlLWV4dHJhY3QtYW5kLWxpc3QucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZjhmM2UuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2ZpbGVzL25vbi1yZWN1cnNpdmUtZXh0cmFjdC1hbmQtbGlzdC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi1Gcm9tIGQ2MjcxNzA5ZDJkZWI5ODA4MDRmOTJlNzVmOWI1Y2I2MDBkYzQyZWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBQYXRyaWNrIE9obHkgPHBhdHJpY2sub2hseUBpbnRlbC5jb20+Ci1EYXRlOiBNb24sIDI0IE9jdCAyMDE2IDEyOjU0OjQ4ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggMS8yXSBub24tcmVjdXJzaXZlIGV4dHJhY3QgYW5kIGxpc3QKLQotU29tZXRpbWVzIGl0IG1ha2VzIHNlbnNlIHRvIGV4dHJhY3Qgb3IgbGlzdCBhIGRpcmVjdG9yeSBjb250YWluZWQgaW4KLWFuIGFyY2hpdmUgd2l0aG91dCBhbHNvIGRvaW5nIHRoZSBzYW1lIGZvciB0aGUgY29udGVudCBvZiB0aGUKLWRpcmVjdG9yeSwgaS5lLiBhbGxvd2luZyAtbiAoPSAtLW5vLXJlY3Vyc2lvbikgaW4gY29tYmluYXRpb24gd2l0aCB0aGUKLXggYW5kIHQgbW9kZXMuCi0KLWJzZHRhciB1c2VzIHRoZSBtYXRjaCBmdW5jdGlvbmFsaXR5IGluIGxpYmFyY2hpdmUgdG8gdHJhY2sgaW5jbHVkZQotbWF0Y2hlcy4gQSBuZXcgbGliYXJjaGl2ZSBBUEkgY2FsbAotYXJjaGl2ZV9tYXRjaF9pbmNsdWRlX2RpcmVjdG9yaWVzX3JlY3Vyc2l2ZWx5KCkgZ2V0cyBpbnRyb2R1Y2VkIHRvCi1pbmZsdWVuY2UgdGhlIG1hdGNoaW5nIGJlaGF2aW9yLCB3aXRoIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGFzIGJlZm9yZS4KLQotTm9uLXJlY3Vyc2l2ZSBtYXRjaGluZyBjYW4gYmUgYWNoaWV2ZWQgYnkgYW5jaG9yaW5nIHRoZSBwYXRoIG1hdGNoIGF0Ci1ib3RoIHN0YXJ0IGFuZCBlbmQuIEFza2luZyBmb3IgYSBkaXJlY3Rvcnkgd2hpY2ggaXRzZWxmIGlzbid0IGluIHRoZQotYXJjaGl2ZSB3aGVuIGluIG5vbi1yZWN1cnNpdmUgbW9kZSBpcyBhbiBlcnJvciBhbmQgaGFuZGxlZCBieSB0aGUKLWV4aXN0aW5nIG1lY2hhbmlzbSBmb3IgdHJhY2tpbmcgdW51c2VkIGluY2x1c2lvbiBlbnRyaWVzLgotCi1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9wdWxsLzgxMl0KLQotU2lnbmVkLW9mZi1ieTogUGF0cmljayBPaGx5IDxwYXRyaWNrLm9obHlAaW50ZWwuY29tPgotCi0tLS0KLSBsaWJhcmNoaXZlL2FyY2hpdmUuaCAgICAgICB8ICAyICsrCi0gbGliYXJjaGl2ZS9hcmNoaXZlX21hdGNoLmMgfCAzMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KLSB0YXIvYnNkdGFyLjEgICAgICAgICAgICAgICB8ICAzICstLQotIHRhci9ic2R0YXIuYyAgICAgICAgICAgICAgIHwgMTIgKysrKysrKysrKy0tCi0gNCBmaWxlcyBjaGFuZ2VkLCA0MiBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvbGliYXJjaGl2ZS9hcmNoaXZlLmggYi9saWJhcmNoaXZlL2FyY2hpdmUuaAotaW5kZXggZmY0MDFlOS4uMzhkODc0NiAxMDA2NDQKLS0tLSBhL2xpYmFyY2hpdmUvYXJjaGl2ZS5oCi0rKysgYi9saWJhcmNoaXZlL2FyY2hpdmUuaAotQEAgLTEwODUsNiArMTA4NSw4IEBAIF9fTEFfREVDTCBpbnQJYXJjaGl2ZV9tYXRjaF9leGNsdWRlZChzdHJ1Y3QgYXJjaGl2ZSAqLAotICAqLwotIF9fTEFfREVDTCBpbnQJYXJjaGl2ZV9tYXRjaF9wYXRoX2V4Y2x1ZGVkKHN0cnVjdCBhcmNoaXZlICosCi0gCQkgICAgc3RydWN0IGFyY2hpdmVfZW50cnkgKik7Ci0rLyogQ29udHJvbCByZWN1cnNpdmUgaW5jbHVzaW9uIG9mIGRpcmVjdG9yeSBjb250ZW50IHdoZW4gZGlyZWN0b3J5IGlzIGluY2x1ZGVkLiBEZWZhdWx0IG9uLiAqLwotK19fTEFfREVDTCBpbnQJYXJjaGl2ZV9tYXRjaF9pbmNsdWRlX2RpcmVjdG9yaWVzX3JlY3Vyc2l2ZWx5KHN0cnVjdCBhcmNoaXZlICosIGludCBfZW5hYmxlZCk7Ci0gLyogQWRkIGV4Y2x1c2lvbiBwYXRobmFtZSBwYXR0ZXJuLiAqLwotIF9fTEFfREVDTCBpbnQJYXJjaGl2ZV9tYXRjaF9leGNsdWRlX3BhdHRlcm4oc3RydWN0IGFyY2hpdmUgKiwgY29uc3QgY2hhciAqKTsKLSBfX0xBX0RFQ0wgaW50CWFyY2hpdmVfbWF0Y2hfZXhjbHVkZV9wYXR0ZXJuX3coc3RydWN0IGFyY2hpdmUgKiwKLWRpZmYgLS1naXQgYS9saWJhcmNoaXZlL2FyY2hpdmVfbWF0Y2guYyBiL2xpYmFyY2hpdmUvYXJjaGl2ZV9tYXRjaC5jCi1pbmRleCAwNzE5Y2JkLi42ZDAzYTY1IDEwMDY0NAotLS0tIGEvbGliYXJjaGl2ZS9hcmNoaXZlX21hdGNoLmMKLSsrKyBiL2xpYmFyY2hpdmUvYXJjaGl2ZV9tYXRjaC5jCi1AQCAtOTMsNiArOTMsOSBAQCBzdHJ1Y3QgYXJjaGl2ZV9tYXRjaCB7Ci0gCS8qIGV4Y2x1c2lvbi9pbmNsdXNpb24gc2V0IGZsYWcuICovCi0gCWludAkJCSBzZXRmbGFnOwotIAotKwkvKiBSZWN1cnNpdmVseSBpbmNsdWRlIGRpcmVjdG9yeSBjb250ZW50PyAqLwotKwlpbnQJCQkgcmVjdXJzaXZlX2luY2x1ZGU7Ci0rCi0gCS8qCi0gCSAqIE1hdGNoaW5nIGZpbGVuYW1lIHBhdHRlcm5zLgotIAkgKi8KLUBAIC0yMjMsNiArMjI2LDcgQEAgYXJjaGl2ZV9tYXRjaF9uZXcodm9pZCkKLSAJCXJldHVybiAoTlVMTCk7Ci0gCWEtPmFyY2hpdmUubWFnaWMgPSBBUkNISVZFX01BVENIX01BR0lDOwotIAlhLT5hcmNoaXZlLnN0YXRlID0gQVJDSElWRV9TVEFURV9ORVc7Ci0rCWEtPnJlY3Vyc2l2ZV9pbmNsdWRlID0gMTsKLSAJbWF0Y2hfbGlzdF9pbml0KCYoYS0+aW5jbHVzaW9ucykpOwotIAltYXRjaF9saXN0X2luaXQoJihhLT5leGNsdXNpb25zKSk7Ci0gCV9fYXJjaGl2ZV9yYl90cmVlX2luaXQoJihhLT5leGNsdXNpb25fdHJlZSksICZyYl9vcHNfbWJzKTsKLUBAIC00NzEsNiArNDc1LDI4IEBAIGFyY2hpdmVfbWF0Y2hfcGF0aF9leGNsdWRlZChzdHJ1Y3QgYXJjaGl2ZSAqX2EsCi0gfQotIAotIC8qCi0rICogV2hlbiByZWN1cnNpdmUgaW5jbHVzaW9uIG9mIGRpcmVjdG9yeSBjb250ZW50IGlzIGVuYWJsZWQsCi0rICogYW4gaW5jbHVzaW9uIHBhdHRlcm4gdGhhdCBtYXRjaGVzIGEgZGlyZWN0b3J5IHdpbGwgYWxzbwotKyAqIGluY2x1ZGUgZXZlcnl0aGluZyBiZW5lYXRoIHRoYXQgZGlyZWN0b3J5LiBFbmFibGVkIGJ5IGRlZmF1bHQuCi0rICoKLSsgKiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIEdOVSB0YXIsIGV4Y2x1c2lvbiBwYXR0ZXJucyBhbHdheXMKLSsgKiBtYXRjaCBpZiBhIHN1YnNldCBvZiB0aGUgZnVsbCBwYXRjaCBtYXRjaGVzIChpLmUuLCB0aGV5IGFyZQotKyAqIGFyZSBub3Qgcm9vdGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhdGgpIGFuZCB0aHVzIHRoZXJlCi0rICogaXMgbm8gY29ycmVzcG9uZGluZyBub24tcmVjdXJzaXZlIGV4Y2x1c2lvbiBtb2RlLgotKyAqLwotK2ludAotK2FyY2hpdmVfbWF0Y2hfaW5jbHVkZV9kaXJlY3Rvcmllc19yZWN1cnNpdmVseShzdHJ1Y3QgYXJjaGl2ZSAqX2EsIGludCBfZW5hYmxlZCkKLSt7Ci0rCXN0cnVjdCBhcmNoaXZlX21hdGNoICphOwotKwotKwlhcmNoaXZlX2NoZWNrX21hZ2ljKF9hLCBBUkNISVZFX01BVENIX01BR0lDLAotKwkgICAgQVJDSElWRV9TVEFURV9ORVcsICJhcmNoaXZlX21hdGNoX2luY2x1ZGVfZGlyZWN0b3JpZXNfcmVjdXJzaXZlbHkiKTsKLSsJYSA9IChzdHJ1Y3QgYXJjaGl2ZV9tYXRjaCAqKV9hOwotKwlhLT5yZWN1cnNpdmVfaW5jbHVkZSA9IF9lbmFibGVkOwotKwlyZXR1cm4gKEFSQ0hJVkVfT0spOwotK30KLSsKLSsvKgotICAqIFV0aWx0eSBmdW5jdGlvbnMgdG8gZ2V0IHN0YXRpc3RpYyBpbmZvcm1hdGlvbiBmb3IgaW5jbHVzaW9uIHBhdHRlcm5zLgotICAqLwotIGludAotQEAgLTc4MSw3ICs4MDcsOSBAQCBzdGF0aWMgaW50Ci0gbWF0Y2hfcGF0aF9pbmNsdXNpb24oc3RydWN0IGFyY2hpdmVfbWF0Y2ggKmEsIHN0cnVjdCBtYXRjaCAqbSwKLSAgICAgaW50IG1icywgY29uc3Qgdm9pZCAqcG4pCi0gewotLQlpbnQgZmxhZyA9IFBBVEhNQVRDSF9OT19BTkNIT1JfRU5EOwotKwlpbnQgZmxhZyA9IGEtPnJlY3Vyc2l2ZV9pbmNsdWRlID8KLSsJCVBBVEhNQVRDSF9OT19BTkNIT1JfRU5EIDogLyogUHJlZml4IG1hdGNoIGlzIGdvb2QgZW5vdWdoLiAqLwotKwkJMDsgLyogRnVsbCBtYXRjaCByZXF1aXJlZC4gKi8KLSAJaW50IHI7Ci0gCi0gCWlmIChtYnMpIHsKLWRpZmYgLS1naXQgYS90YXIvYnNkdGFyLjEgYi90YXIvYnNkdGFyLjEKLWluZGV4IDllYWRhYWYuLmY1ZDY0NTcgMTAwNjQ0Ci0tLS0gYS90YXIvYnNkdGFyLjEKLSsrKyBiL3Rhci9ic2R0YXIuMQotQEAgLTM0Niw4ICszNDYsNyBAQCBJbiBleHRyYWN0IG9yIGxpc3QgbW9kZXMsIHRoaXMgb3B0aW9uIGlzIGlnbm9yZWQuCi0gRG8gbm90IGV4dHJhY3QgbW9kaWZpY2F0aW9uIHRpbWUuCi0gQnkgZGVmYXVsdCwgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIGlzIHNldCB0byB0aGUgdGltZSBzdG9yZWQgaW4gdGhlIGFyY2hpdmUuCi0gLkl0IEZsIG4gLCBGbCBGbCBub3JlY3Vyc2UgLCBGbCBGbCBuby1yZWN1cnNpb24KLS0oYywgciwgdSBtb2RlcyBvbmx5KQotLURvIG5vdCByZWN1cnNpdmVseSBhcmNoaXZlIHRoZSBjb250ZW50cyBvZiBkaXJlY3Rvcmllcy4KLStEbyBub3QgcmVjdXJzaXZlbHkgYXJjaGl2ZSAoYywgciwgdSksIGV4dHJhY3QgKHgpIG9yIGxpc3QgKHQpIHRoZSBjb250ZW50cyBvZiBkaXJlY3Rvcmllcy4KLSAuSXQgRmwgRmwgbmV3ZXIgQXIgZGF0ZQotIChjLCByLCB1IG1vZGVzIG9ubHkpCi0gT25seSBpbmNsdWRlIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBuZXdlciB0aGFuIHRoZSBzcGVjaWZpZWQgZGF0ZS4KLWRpZmYgLS1naXQgYS90YXIvYnNkdGFyLmMgYi90YXIvYnNkdGFyLmMKLWluZGV4IDkzYmY2MGEuLjAwMWQ1ZWQgMTAwNjQ0Ci0tLS0gYS90YXIvYnNkdGFyLmMKLSsrKyBiL3Rhci9ic2R0YXIuYwotQEAgLTczOCw4ICs3MzgsNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAJCQlicmVhazsKLSAJCX0KLSAJfQotLQlpZiAoYnNkdGFyLT5vcHRpb25fbm9fc3ViZGlycykKLS0JCW9ubHlfbW9kZShic2R0YXIsICItbiIsICJjcnUiKTsKLSAJaWYgKGJzZHRhci0+b3B0aW9uX3N0ZG91dCkKLSAJCW9ubHlfbW9kZShic2R0YXIsICItTyIsICJ4dCIpOwotIAlpZiAoYnNkdGFyLT5vcHRpb25fdW5saW5rX2ZpcnN0KQotQEAgLTc4OCw2ICs3ODYsMTYgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0gCQlvbmx5X21vZGUoYnNkdGFyLCBidWZmLCAiY3J1Iik7Ci0gCX0KLSAKLSsJLyoKLSsJICogV2hlbiBjcmVhdGluZyBhbiBhcmNoaXZlIGZyb20gYSBkaXJlY3RvcnkgdHJlZSwgdGhlIGRpcmVjdG9yeQotKwkgKiB3YWxraW5nIGNvZGUgd2lsbCBhbHJlYWR5IGF2b2lkIGVudGVyaW5nIGRpcmVjdG9yaWVzIHdoZW4KLSsJICogcmVjdXJzaXZlIGluY2x1c2lvbiBvZiBkaXJlY3RvcnkgY29udGVudCBpcyBkaXNhYmxlZCwgdGhlcmVmb3JlCi0rCSAqIGNoYW5naW5nIHRoZSBtYXRjaGluZyBiZWhhdmlvciBoYXMgbm8gZWZmZWN0IGZvciBjcmVhdGlvbiBtb2Rlcy4KLSsJICogSXQgaXMgcmVsZXZhbnQgZm9yIGV4dHJhY3Rpb24gb3IgbGlzdGluZy4KLSsJICovCi0rCWFyY2hpdmVfbWF0Y2hfaW5jbHVkZV9kaXJlY3Rvcmllc19yZWN1cnNpdmVseShic2R0YXItPm1hdGNoaW5nLAotKwkJCQkJCSAgICAgICFic2R0YXItPm9wdGlvbl9ub19zdWJkaXJzKTsKLSsKLSAJLyogRmlsZW5hbWUgIi0iIGltcGxpZXMgc3RkaW8uICovCi0gCWlmIChzdHJjbXAoYnNkdGFyLT5maWxlbmFtZSwgIi0iKSA9PSAwKQotIAkJYnNkdGFyLT5maWxlbmFtZSA9IE5VTEw7Ci0tLSAKLTIuMS40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL0NWRS0yMDE3LTE0MTY2LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvQ1ZFLTIwMTctMTQxNjYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg1ZmVjNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL0NWRS0yMDE3LTE0MTY2LnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK2xpYmFyY2hpdmUtMy4zLjI6IEZpeCBDVkUtMjAxNy0xNDE2NgorCitbTm8gdXBzdHJlYW0gdHJhY2tpbmddIC0tIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJhcmNoaXZlL2xpYmFyY2hpdmUvcHVsbC85MzUKKworYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3hhcjogaGVhcC1iYXNlZCBidWZmZXIgb3ZlcmZsb3cgaW4geG1sX2RhdGEKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbaHR0cHM6Ly9naXRodWIuY29tL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9jb21taXQvZmE3NDM4YTBmZjQwMzNlNDc0MWM4MDczOTRhOWFmNjIwNzk0MGQ3MV0KK0NWRTogQ1ZFLTIwMTctMTQxNjYKK0J1ZzogOTM1CitTaWduZWQtb2ZmLWJ5OiBBbmRyZWogVmFsZWsgPGFuZHJlai52YWxla0BzaWVtZW5zLmNvbT4KKworZGlmZiAtLWdpdCBhL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3hhci5jIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfeGFyLmMKK2luZGV4IDdhMjJiZWIuLjkzZWVhY2MgMTAwNjQ0CistLS0gYS9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF94YXIuYworKysrIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfeGFyLmMKK0BAIC0xMDQwLDYgKzEwNDAsOSBAQCBhdG9sMTAoY29uc3QgY2hhciAqcCwgc2l6ZV90IGNoYXJfY250KQorIAl1aW50NjRfdCBsOworIAlpbnQgZGlnaXQ7CisgCisrCWlmIChjaGFyX2NudCA9PSAwKQorKwkJcmV0dXJuICgwKTsKKysKKyAJbCA9IDA7CisgCWRpZ2l0ID0gKnAgLSAnMCc7CisgCXdoaWxlIChkaWdpdCA+PSAwICYmIGRpZ2l0IDwgMTAgICYmIGNoYXJfY250LS0gPiAwKSB7CitAQCAtMTA1NCw3ICsxMDU3LDEwIEBAIGF0b2w4KGNvbnN0IGNoYXIgKnAsIHNpemVfdCBjaGFyX2NudCkKKyB7CisgCWludDY0X3QgbDsKKyAJaW50IGRpZ2l0OworLSAgICAgICAgCisrCisrCWlmIChjaGFyX2NudCA9PSAwKQorKwkJcmV0dXJuICgwKTsKKysKKyAJbCA9IDA7CisgCXdoaWxlIChjaGFyX2NudC0tID4gMCkgeworIAkJaWYgKCpwID49ICcwJyAmJiAqcCA8PSAnNycpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9DVkUtMjAxNy0xNDUwMi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL0NWRS0yMDE3LTE0NTAyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZTE1NDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9DVkUtMjAxNy0xNDUwMi5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIDU1NjI1NDViNTU2MmY2ZDEyYTRlZjk5MWZhZTE1OGJmNGNjZjkyYjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb2VyZyBTb25uZW5iZXJnZXIgPGpvZXJnQGJlYy5kZT4KK0RhdGU6IFNhdCwgOSBTZXAgMjAxNyAxNzo0NzozMiArMDIwMAorU3ViamVjdDogW1BBVENIXSBBdm9pZCBhIHJlYWQgb2ZmLWJ5LW9uZSBlcnJvciBmb3IgVVRGMTYgbmFtZXMgaW4gUkFSCisgYXJjaGl2ZXMuCisKK1JlcG9ydGVkLUJ5OiBPU1MtRnV6eiBpc3N1ZSA1NzMKKworQ1ZFOiBDVkUtMjAxNy0xNDUwMgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFpoaXhpb25nIENoaSA8emhpeGlvbmcuY2hpQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXIuYyB8IDYgKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfcmFyLmMgYi9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXIuYworaW5kZXggY2JiMTRjMy4uNzUxZGU2OSAxMDA2NDQKKy0tLSBhL2xpYmFyY2hpdmUvYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X3Jhci5jCisrKysgYi9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9yYXIuYworQEAgLTE0OTYsNyArMTQ5NiwxMSBAQCByZWFkX2hlYWRlcihzdHJ1Y3QgYXJjaGl2ZV9yZWFkICphLCBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqZW50cnksCisgICAgICAgICByZXR1cm4gKEFSQ0hJVkVfRkFUQUwpOworICAgICAgIH0KKyAgICAgICBmaWxlbmFtZVtmaWxlbmFtZV9zaXplKytdID0gJ1wwJzsKKy0gICAgICBmaWxlbmFtZVtmaWxlbmFtZV9zaXplKytdID0gJ1wwJzsKKysgICAgICAvKgorKyAgICAgICAqIERvIG5vdCBpbmNyZW1lbnQgZmlsZW5hbWVfc2l6ZSBoZXJlIGFzIHRoZSBjb21wdXRhdGlvbnMgYmVsb3cKKysgICAgICAgKiBhZGQgdGhlIHNwYWNlIGZvciB0aGUgdGVybWluYXRpbmcgTlVMIGV4cGxpY2l0bHkuCisrICAgICAgICovCisrICAgICAgZmlsZW5hbWVbZmlsZW5hbWVfc2l6ZV0gPSAnXDAnOworIAorICAgICAgIC8qIERlY29kZWQgdW5pY29kZSBmb3JtIGlzIFVURi0xNkJFLCBzbyB3ZSBoYXZlIHRvIHVwZGF0ZSBhIHN0cmluZworICAgICAgICAqIGNvbnZlcnNpb24gb2JqZWN0IGZvciBpdC4gKi8KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvYnVnOTI5LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvYnVnOTI5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMzI1NGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9idWc5MjkucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorbGliYXJjaGl2ZS0zLjMuMjogRml4IGJ1ZzkyOQorCitbTm8gdXBzdHJlYW0gdHJhY2tpbmddIC0tIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJhcmNoaXZlL2xpYmFyY2hpdmUvcHVsbC85MjkKKworYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2NwaW86IGhlYWRlcl9uZXdjKCk6IEF2b2lkIG92ZXJmbG93IHdoZW4gcmVhZGluZyBjb3JydXB0CitjcGlvIGFyY2hpdmUKKworQSBjcGlvICJuZXdjIiBhcmNoaXZlIHdpdGggYSBuYW1lbGVuZ3RoIG9mICJGRkZGRkZGRiIsIGlmIHJlYWQgb24gYQorc3lzdGVtIHdpdGggYSAzMi1iaXQgc2l6ZV90LCB3b3VsZCByZXN1bHQgaW4gbmFtZWxlbmd0aCArIG5hbWVfcGFkCitvdmVyZmxvd2luZyAzMiBiaXRzIGFuZCBsaWJhcmNoaXZlIGF0dGVtcHRpbmcgdG8gY29weSAyXjMyLTEgYnl0ZXMKK2Zyb20gYSAyLWJ5dGUgYnVmZmVyLCB3aXRoIGFwcHJvcHJpYXRlbHkgaGlsYXJpb3VzIHJlc3VsdHMuCisKK0NoZWNrIGZvciB0aGlzIG92ZXJmbG93IGFuZCBmYWlsOyB0aGVyZSdzIG5vIGxlZ2l0aW1hdGUgcmVhc29uIGZvciBhCitjcGlvIGFyY2hpdmUgdG8gY29udGFpbiBhIGZpbGUgd2l0aCBhIG5hbWUgb3ZlciA0IGJpbGxpb24gY2hhcmFjdGVycworaW4gbGVuZ3RoLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtodHRwczovL2dpdGh1Yi5jb20vbGliYXJjaGl2ZS9saWJhcmNoaXZlL2NvbW1pdC9iYWM0NjU5ZTBiOTcwOTkwZTdlM2YzYTNkMjM5Mjk0ZTk2MzExNjMwXQorQnVnOiA5MjkKK1NpZ25lZC1vZmYtYnk6IEFuZHJlaiBWYWxlayA8YW5kcmVqLnZhbGVrQHNpZW1lbnMuY29tPgorCitkaWZmIC0tZ2l0IGEvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfY3Bpby5jIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfY3Bpby5jCitpbmRleCBhZDlmNzgyLi4xZmFhNjRkIDEwMDY0NAorLS0tIGEvbGliYXJjaGl2ZS9hcmNoaXZlX3JlYWRfc3VwcG9ydF9mb3JtYXRfY3Bpby5jCisrKysgYi9saWJhcmNoaXZlL2FyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9jcGlvLmMKK0BAIC02MzMsNiArNjMzLDEzIEBAIGhlYWRlcl9uZXdjKHN0cnVjdCBhcmNoaXZlX3JlYWQgKmEsIHN0cnVjdCBjcGlvICpjcGlvLAorIAkvKiBQYWQgbmFtZSB0byAyIG1vcmUgdGhhbiBhIG11bHRpcGxlIG9mIDQuICovCisgCSpuYW1lX3BhZCA9ICgyIC0gKm5hbWVsZW5ndGgpICYgMzsKKyAKKysJLyogTWFrZSBzdXJlIHRoYXQgdGhlIHBhZGRlZCBuYW1lIGxlbmd0aCBmaXRzIGludG8gc2l6ZV90LiAqLworKwlpZiAoKHNpemVfdCkoKm5hbWVsZW5ndGggKyAqbmFtZV9wYWQpIDwgKm5hbWVsZW5ndGgpIHsKKysJCWFyY2hpdmVfc2V0X2Vycm9yKCZhLT5hcmNoaXZlLCBBUkNISVZFX0VSUk5PX0ZJTEVfRk9STUFULAorKwkJICAgICJjcGlvIGFyY2hpdmUgaGFzIGludmFsaWQgbmFtZWxlbmd0aCIpOworKwkJcmV0dXJuIChBUkNISVZFX0ZBVEFMKTsKKysJfQorKworIAkvKgorIAkgKiBOb3RlOiBlbnRyeV9ieXRlc19yZW1haW5pbmcgaXMgYXQgbGVhc3QgNjQgYml0cyBhbmQKKyAJICogdGhlcmVmb3JlIGd1YXJhbnRlZWQgdG8gYmUgYmlnIGVub3VnaCBmb3IgYSAzMy1iaXQgZmlsZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvbm9uLXJlY3Vyc2l2ZS1leHRyYWN0LWFuZC1saXN0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvbm9uLXJlY3Vyc2l2ZS1leHRyYWN0LWFuZC1saXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkN2JlNTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9ub24tcmVjdXJzaXZlLWV4dHJhY3QtYW5kLWxpc3QucGF0Y2gKQEAgLTAsMCArMSwxNTMgQEAKK0Zyb20gNDdmNzU2NmY2ODI5YzJiMTRlMjFiYmJiYTY5OTkxNmRlNDk5OGM3MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdHJpY2sgT2hseSA8cGF0cmljay5vaGx5QGludGVsLmNvbT4KK0RhdGU6IE1vbiwgMjQgT2N0IDIwMTYgMTI6NTQ6NDggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzFdIG5vbi1yZWN1cnNpdmUgZXh0cmFjdCBhbmQgbGlzdAorCitTb21ldGltZXMgaXQgbWFrZXMgc2Vuc2UgdG8gZXh0cmFjdCBvciBsaXN0IGEgZGlyZWN0b3J5IGNvbnRhaW5lZCBpbgorYW4gYXJjaGl2ZSB3aXRob3V0IGFsc28gZG9pbmcgdGhlIHNhbWUgZm9yIHRoZSBjb250ZW50IG9mIHRoZQorZGlyZWN0b3J5LCBpLmUuIGFsbG93aW5nIC1uICg9IC0tbm8tcmVjdXJzaW9uKSBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZQoreCBhbmQgdCBtb2Rlcy4KKworYnNkdGFyIHVzZXMgdGhlIG1hdGNoIGZ1bmN0aW9uYWxpdHkgaW4gbGliYXJjaGl2ZSB0byB0cmFjayBpbmNsdWRlCittYXRjaGVzLiBBIG5ldyBsaWJhcmNoaXZlIEFQSSBjYWxsCithcmNoaXZlX21hdGNoX2luY2x1ZGVfZGlyZWN0b3JpZXNfcmVjdXJzaXZlbHkoKSBnZXRzIGludHJvZHVjZWQgdG8KK2luZmx1ZW5jZSB0aGUgbWF0Y2hpbmcgYmVoYXZpb3IsIHdpdGggdGhlIGRlZmF1bHQgYmVoYXZpb3IgYXMgYmVmb3JlLgorCitOb24tcmVjdXJzaXZlIG1hdGNoaW5nIGNhbiBiZSBhY2hpZXZlZCBieSBhbmNob3JpbmcgdGhlIHBhdGggbWF0Y2ggYXQKK2JvdGggc3RhcnQgYW5kIGVuZC4gQXNraW5nIGZvciBhIGRpcmVjdG9yeSB3aGljaCBpdHNlbGYgaXNuJ3QgaW4gdGhlCithcmNoaXZlIHdoZW4gaW4gbm9uLXJlY3Vyc2l2ZSBtb2RlIGlzIGFuIGVycm9yIGFuZCBoYW5kbGVkIGJ5IHRoZQorZXhpc3RpbmcgbWVjaGFuaXNtIGZvciB0cmFja2luZyB1bnVzZWQgaW5jbHVzaW9uIGVudHJpZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vbGliYXJjaGl2ZS9saWJhcmNoaXZlL3B1bGwvODEyXQorCitTaWduZWQtb2ZmLWJ5OiBQYXRyaWNrIE9obHkgPHBhdHJpY2sub2hseUBpbnRlbC5jb20+CisKKy0tLQorIGxpYmFyY2hpdmUvYXJjaGl2ZS5oICAgICAgIHwgIDIgKysKKyBsaWJhcmNoaXZlL2FyY2hpdmVfbWF0Y2guYyB8IDMwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQorIHRhci9ic2R0YXIuMSAgICAgICAgICAgICAgIHwgIDMgKy0tCisgdGFyL2JzZHRhci5jICAgICAgICAgICAgICAgfCAxMiArKysrKysrKysrLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDQyIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJhcmNoaXZlL2FyY2hpdmUuaCBiL2xpYmFyY2hpdmUvYXJjaGl2ZS5oCitpbmRleCAzMjcxMDIwMS4uNTlmYjRhYTYgMTAwNjQ0CistLS0gYS9saWJhcmNoaXZlL2FyY2hpdmUuaAorKysrIGIvbGliYXJjaGl2ZS9hcmNoaXZlLmgKK0BAIC0xMDkzLDYgKzEwOTMsOCBAQCBfX0xBX0RFQ0wgaW50CWFyY2hpdmVfbWF0Y2hfZXhjbHVkZWQoc3RydWN0IGFyY2hpdmUgKiwKKyAgKi8KKyBfX0xBX0RFQ0wgaW50CWFyY2hpdmVfbWF0Y2hfcGF0aF9leGNsdWRlZChzdHJ1Y3QgYXJjaGl2ZSAqLAorIAkJICAgIHN0cnVjdCBhcmNoaXZlX2VudHJ5ICopOworKy8qIENvbnRyb2wgcmVjdXJzaXZlIGluY2x1c2lvbiBvZiBkaXJlY3RvcnkgY29udGVudCB3aGVuIGRpcmVjdG9yeSBpcyBpbmNsdWRlZC4gRGVmYXVsdCBvbi4gKi8KKytfX0xBX0RFQ0wgaW50CWFyY2hpdmVfbWF0Y2hfaW5jbHVkZV9kaXJlY3Rvcmllc19yZWN1cnNpdmVseShzdHJ1Y3QgYXJjaGl2ZSAqLCBpbnQgX2VuYWJsZWQpOworIC8qIEFkZCBleGNsdXNpb24gcGF0aG5hbWUgcGF0dGVybi4gKi8KKyBfX0xBX0RFQ0wgaW50CWFyY2hpdmVfbWF0Y2hfZXhjbHVkZV9wYXR0ZXJuKHN0cnVjdCBhcmNoaXZlICosIGNvbnN0IGNoYXIgKik7CisgX19MQV9ERUNMIGludAlhcmNoaXZlX21hdGNoX2V4Y2x1ZGVfcGF0dGVybl93KHN0cnVjdCBhcmNoaXZlICosCitkaWZmIC0tZ2l0IGEvbGliYXJjaGl2ZS9hcmNoaXZlX21hdGNoLmMgYi9saWJhcmNoaXZlL2FyY2hpdmVfbWF0Y2guYworaW5kZXggYmU3MjA2NmUuLmJiNmEzNDA3IDEwMDY0NAorLS0tIGEvbGliYXJjaGl2ZS9hcmNoaXZlX21hdGNoLmMKKysrKyBiL2xpYmFyY2hpdmUvYXJjaGl2ZV9tYXRjaC5jCitAQCAtOTMsNiArOTMsOSBAQCBzdHJ1Y3QgYXJjaGl2ZV9tYXRjaCB7CisgCS8qIGV4Y2x1c2lvbi9pbmNsdXNpb24gc2V0IGZsYWcuICovCisgCWludAkJCSBzZXRmbGFnOworIAorKwkvKiBSZWN1cnNpdmVseSBpbmNsdWRlIGRpcmVjdG9yeSBjb250ZW50PyAqLworKwlpbnQJCQkgcmVjdXJzaXZlX2luY2x1ZGU7CisrCisgCS8qCisgCSAqIE1hdGNoaW5nIGZpbGVuYW1lIHBhdHRlcm5zLgorIAkgKi8KK0BAIC0yMjMsNiArMjI2LDcgQEAgYXJjaGl2ZV9tYXRjaF9uZXcodm9pZCkKKyAJCXJldHVybiAoTlVMTCk7CisgCWEtPmFyY2hpdmUubWFnaWMgPSBBUkNISVZFX01BVENIX01BR0lDOworIAlhLT5hcmNoaXZlLnN0YXRlID0gQVJDSElWRV9TVEFURV9ORVc7CisrCWEtPnJlY3Vyc2l2ZV9pbmNsdWRlID0gMTsKKyAJbWF0Y2hfbGlzdF9pbml0KCYoYS0+aW5jbHVzaW9ucykpOworIAltYXRjaF9saXN0X2luaXQoJihhLT5leGNsdXNpb25zKSk7CisgCV9fYXJjaGl2ZV9yYl90cmVlX2luaXQoJihhLT5leGNsdXNpb25fdHJlZSksICZyYl9vcHNfbWJzKTsKK0BAIC00NzEsNiArNDc1LDI4IEBAIGFyY2hpdmVfbWF0Y2hfcGF0aF9leGNsdWRlZChzdHJ1Y3QgYXJjaGl2ZSAqX2EsCisgfQorIAorIC8qCisrICogV2hlbiByZWN1cnNpdmUgaW5jbHVzaW9uIG9mIGRpcmVjdG9yeSBjb250ZW50IGlzIGVuYWJsZWQsCisrICogYW4gaW5jbHVzaW9uIHBhdHRlcm4gdGhhdCBtYXRjaGVzIGEgZGlyZWN0b3J5IHdpbGwgYWxzbworKyAqIGluY2x1ZGUgZXZlcnl0aGluZyBiZW5lYXRoIHRoYXQgZGlyZWN0b3J5LiBFbmFibGVkIGJ5IGRlZmF1bHQuCisrICoKKysgKiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIEdOVSB0YXIsIGV4Y2x1c2lvbiBwYXR0ZXJucyBhbHdheXMKKysgKiBtYXRjaCBpZiBhIHN1YnNldCBvZiB0aGUgZnVsbCBwYXRjaCBtYXRjaGVzIChpLmUuLCB0aGV5IGFyZQorKyAqIGFyZSBub3Qgcm9vdGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhdGgpIGFuZCB0aHVzIHRoZXJlCisrICogaXMgbm8gY29ycmVzcG9uZGluZyBub24tcmVjdXJzaXZlIGV4Y2x1c2lvbiBtb2RlLgorKyAqLworK2ludAorK2FyY2hpdmVfbWF0Y2hfaW5jbHVkZV9kaXJlY3Rvcmllc19yZWN1cnNpdmVseShzdHJ1Y3QgYXJjaGl2ZSAqX2EsIGludCBfZW5hYmxlZCkKKyt7CisrCXN0cnVjdCBhcmNoaXZlX21hdGNoICphOworKworKwlhcmNoaXZlX2NoZWNrX21hZ2ljKF9hLCBBUkNISVZFX01BVENIX01BR0lDLAorKwkgICAgQVJDSElWRV9TVEFURV9ORVcsICJhcmNoaXZlX21hdGNoX2luY2x1ZGVfZGlyZWN0b3JpZXNfcmVjdXJzaXZlbHkiKTsKKysJYSA9IChzdHJ1Y3QgYXJjaGl2ZV9tYXRjaCAqKV9hOworKwlhLT5yZWN1cnNpdmVfaW5jbHVkZSA9IF9lbmFibGVkOworKwlyZXR1cm4gKEFSQ0hJVkVfT0spOworK30KKysKKysvKgorICAqIFV0aWxpdHkgZnVuY3Rpb25zIHRvIGdldCBzdGF0aXN0aWMgaW5mb3JtYXRpb24gZm9yIGluY2x1c2lvbiBwYXR0ZXJucy4KKyAgKi8KKyBpbnQKK0BAIC03ODEsNyArODA3LDkgQEAgc3RhdGljIGludAorIG1hdGNoX3BhdGhfaW5jbHVzaW9uKHN0cnVjdCBhcmNoaXZlX21hdGNoICphLCBzdHJ1Y3QgbWF0Y2ggKm0sCisgICAgIGludCBtYnMsIGNvbnN0IHZvaWQgKnBuKQorIHsKKy0JaW50IGZsYWcgPSBQQVRITUFUQ0hfTk9fQU5DSE9SX0VORDsKKysJaW50IGZsYWcgPSBhLT5yZWN1cnNpdmVfaW5jbHVkZSA/CisrCQlQQVRITUFUQ0hfTk9fQU5DSE9SX0VORCA6IC8qIFByZWZpeCBtYXRjaCBpcyBnb29kIGVub3VnaC4gKi8KKysJCTA7IC8qIEZ1bGwgbWF0Y2ggcmVxdWlyZWQuICovCisgCWludCByOworIAorIAlpZiAobWJzKSB7CitkaWZmIC0tZ2l0IGEvdGFyL2JzZHRhci4xIGIvdGFyL2JzZHRhci4xCitpbmRleCAxMzJlMTE0NS4uMWRkMmE4NDcgMTAwNjQ0CistLS0gYS90YXIvYnNkdGFyLjEKKysrKyBiL3Rhci9ic2R0YXIuMQorQEAgLTM4Niw4ICszODYsNyBAQCBhbmQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaW4gYywgciwgYW5kIHUgbW9kZXMgb3IgaWYKKyAuTm0KKyBpcyBydW4gaW4geCBtb2RlIGFzIHJvb3QuCisgLkl0IEZsIG4gLCBGbCBGbCBub3JlY3Vyc2UgLCBGbCBGbCBuby1yZWN1cnNpb24KKy0oYywgciwgdSBtb2RlcyBvbmx5KQorLURvIG5vdCByZWN1cnNpdmVseSBhcmNoaXZlIHRoZSBjb250ZW50cyBvZiBkaXJlY3Rvcmllcy4KKytEbyBub3QgcmVjdXJzaXZlbHkgYXJjaGl2ZSAoYywgciwgdSksIGV4dHJhY3QgKHgpIG9yIGxpc3QgKHQpIHRoZSBjb250ZW50cyBvZiBkaXJlY3Rvcmllcy4KKyAuSXQgRmwgRmwgbmV3ZXIgQXIgZGF0ZQorIChjLCByLCB1IG1vZGVzIG9ubHkpCisgT25seSBpbmNsdWRlIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBuZXdlciB0aGFuIHRoZSBzcGVjaWZpZWQgZGF0ZS4KK2RpZmYgLS1naXQgYS90YXIvYnNkdGFyLmMgYi90YXIvYnNkdGFyLmMKK2luZGV4IDExZGVkYmY5Li5kMDE0Y2MzZSAxMDA2NDQKKy0tLSBhL3Rhci9ic2R0YXIuYworKysrIGIvdGFyL2JzZHRhci5jCitAQCAtNzk0LDggKzc5NCw2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJCWJyZWFrOworIAkJfQorIAl9CistCWlmIChic2R0YXItPmZsYWdzICYgT1BURkxBR19OT19TVUJESVJTKQorLQkJb25seV9tb2RlKGJzZHRhciwgIi1uIiwgImNydSIpOworIAlpZiAoYnNkdGFyLT5mbGFncyAmIE9QVEZMQUdfU1RET1VUKQorIAkJb25seV9tb2RlKGJzZHRhciwgIi1PIiwgInh0Iik7CisgCWlmIChic2R0YXItPmZsYWdzICYgT1BURkxBR19VTkxJTktfRklSU1QpCitAQCAtODQ1LDYgKzg0MywxNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCW9ubHlfbW9kZShic2R0YXIsIGJ1ZmYsICJjcnUiKTsKKyAJfQorIAorKwkvKgorKwkgKiBXaGVuIGNyZWF0aW5nIGFuIGFyY2hpdmUgZnJvbSBhIGRpcmVjdG9yeSB0cmVlLCB0aGUgZGlyZWN0b3J5CisrCSAqIHdhbGtpbmcgY29kZSB3aWxsIGFscmVhZHkgYXZvaWQgZW50ZXJpbmcgZGlyZWN0b3JpZXMgd2hlbgorKwkgKiByZWN1cnNpdmUgaW5jbHVzaW9uIG9mIGRpcmVjdG9yeSBjb250ZW50IGlzIGRpc2FibGVkLCB0aGVyZWZvcmUKKysJICogY2hhbmdpbmcgdGhlIG1hdGNoaW5nIGJlaGF2aW9yIGhhcyBubyBlZmZlY3QgZm9yIGNyZWF0aW9uIG1vZGVzLgorKwkgKiBJdCBpcyByZWxldmFudCBmb3IgZXh0cmFjdGlvbiBvciBsaXN0aW5nLgorKwkgKi8KKysJYXJjaGl2ZV9tYXRjaF9pbmNsdWRlX2RpcmVjdG9yaWVzX3JlY3Vyc2l2ZWx5KGJzZHRhci0+bWF0Y2hpbmcsCisrCQkJCQkJICAgICAgIShic2R0YXItPmZsYWdzICYgT1BURkxBR19OT19TVUJESVJTKSk7CisrCisgCS8qIEZpbGVuYW1lICItIiBpbXBsaWVzIHN0ZGlvLiAqLworIAlpZiAoc3RyY21wKGJzZHRhci0+ZmlsZW5hbWUsICItIikgPT0gMCkKKyAJCWJzZHRhci0+ZmlsZW5hbWUgPSBOVUxMOworLS0gCisyLjExLjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmVfMy4yLjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZV8zLjIuMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE5NTlhMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZV8zLjIuMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLVNVTU1BUlkgPSAiU3VwcG9ydCBmb3IgcmVhZGluZyB2YXJpb3VzIGFyY2hpdmUgZm9ybWF0cyIKLURFU0NSSVBUSU9OID0gIkMgbGlicmFyeSBhbmQgY29tbWFuZC1saW5lIHRvb2xzIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIHRhciwgY3BpbywgemlwLCBJU08sIGFuZCBvdGhlciBhcmNoaXZlIGZvcm1hdHMiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpYmFyY2hpdmUub3JnLyIKLVNFQ1RJT04gPSAiZGV2ZWwiCi1MSUNFTlNFID0gIkJTRCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWVkOTlhY2EwMDZiYzM0Njk3NGJiNzQ1YTM1MzM2NDI1IgotCi1ERVBFTkRTID0gImUyZnNwcm9ncy1uYXRpdmUiCi0KLVBBQ0tBR0VDT05GSUcgPz0gInpsaWIgYnoyIgotCi1QQUNLQUdFQ09ORklHX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiXAotCWxpYnhtbDIgXAotCSR7QGJiLnV0aWxzLmZpbHRlcignRElTVFJPX0ZFQVRVUkVTJywgJ2FjbCB4YXR0cicsIGQpfSBcCi0iCi0KLURFUEVORFNfQlpJUDIgPSAiYnppcDItcmVwbGFjZW1lbnQtbmF0aXZlIgotREVQRU5EU19CWklQMl9jbGFzcy10YXJnZXQgPSAiYnppcDIiCi0KLVBBQ0tBR0VDT05GSUdbYWNsXSA9ICItLWVuYWJsZS1hY2wsLS1kaXNhYmxlLWFjbCxhY2wsIgotUEFDS0FHRUNPTkZJR1t4YXR0cl0gPSAiLS1lbmFibGUteGF0dHIsLS1kaXNhYmxlLXhhdHRyLGF0dHIsIgotUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLXdpdGgtemxpYiwtLXdpdGhvdXQtemxpYix6bGliLCIKLVBBQ0tBR0VDT05GSUdbYnoyXSA9ICItLXdpdGgtYnoybGliLC0td2l0aG91dC1iejJsaWIsJHtERVBFTkRTX0JaSVAyfSwiCi1QQUNLQUdFQ09ORklHW3h6XSA9ICItLXdpdGgtbHptYWRlYyAtLXdpdGgtbHptYSwtLXdpdGhvdXQtbHptYWRlYyAtLXdpdGhvdXQtbHptYSx4eiwiCi1QQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0td2l0aC1vcGVuc3NsLC0td2l0aG91dC1vcGVuc3NsLG9wZW5zc2wsIgotUEFDS0FHRUNPTkZJR1tsaWJ4bWwyXSA9ICItLXdpdGgteG1sMiwtLXdpdGhvdXQteG1sMixsaWJ4bWwyLCIKLVBBQ0tBR0VDT05GSUdbZXhwYXRdID0gIi0td2l0aC1leHBhdCwtLXdpdGhvdXQtZXhwYXQsZXhwYXQsIgotUEFDS0FHRUNPTkZJR1tsem9dID0gIi0td2l0aC1sem8yLC0td2l0aG91dC1sem8yLGx6bywiCi1QQUNLQUdFQ09ORklHW25ldHRsZV0gPSAiLS13aXRoLW5ldHRsZSwtLXdpdGhvdXQtbmV0dGxlLG5ldHRsZSwiCi1QQUNLQUdFQ09ORklHW2x6NF0gPSAiLS13aXRoLWx6NCwtLXdpdGhvdXQtbHo0LGx6NCwiCi0KLUVYVFJBX09FQ09ORiArPSAiLS1lbmFibGUtbGFyZ2VmaWxlIgotCi1TUkNfVVJJID0gImh0dHA6Ly9saWJhcmNoaXZlLm9yZy9kb3dubG9hZHMvbGliYXJjaGl2ZS0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vbm9uLXJlY3Vyc2l2ZS1leHRyYWN0LWFuZC1saXN0LnBhdGNoIFwKLQkgICBmaWxlOi8vMDAwMS1hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYy1tYWtlLV9mc29iai1mdW5jdGlvbnMtbW9yLnBhdGNoIFwKLQkgICBmaWxlOi8vMDAwMi1GaXgtZXh0cmFjdGluZy1oYXJkbGlua3Mtb3Zlci1zeW1saW5rcy5wYXRjaCBcCi0gICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjFlYzAwYjdkY2FmOTY5ZGQyYTU3MTJmODVmMjNjNzY0IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY5MWMxOTRlZTEzMmQxZjBmN2E0MjU0MWYwOTFkYjgxMWJjMmU1NmY3MTA3ZTkxMjFiZTJiYzhjMDRmMTA2MGYiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgcGtnY29uZmlnCi0KLUNQUEZMQUdTICs9ICItSSR7V09SS0RJUn0vZXh0cmEtaW5jbHVkZXMiCi0KLWRvX2NvbmZpZ3VyZVtjbGVhbmRpcnNdICs9ICIke1dPUktESVJ9L2V4dHJhLWluY2x1ZGVzIgotZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7Ci0JIyBXZSBqdXN0IG5lZWQgdGhlIGhlYWRlcnMgZm9yIHNvbWUgdHlwZSBjb25zdGFudHMsIHNvIG5vIG5lZWQgdG8KLQkjIGJ1aWxkIGFsbCBvZiBlMmZzcHJvZ3MgZm9yIHRoZSB0YXJnZXQKLQljcCAtUiAke1NUQUdJTkdfSU5DRElSX05BVElWRX0vZXh0MmZzICR7V09SS0RJUn0vZXh0cmEtaW5jbHVkZXMvCi19Ci0KLUFMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjgwIgotCi1QQUNLQUdFUyA9KyAiYnNkdGFyIgotRklMRVNfYnNkdGFyID0gIiR7YmluZGlyfS9ic2R0YXIiCi0KLUFMVEVSTkFUSVZFX2JzZHRhciA9ICJ0YXIiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbdGFyXSA9ICIke2Jhc2VfYmluZGlyfS90YXIiCi1BTFRFUk5BVElWRV9UQVJHRVRbdGFyXSA9ICIke2JpbmRpcn0vYnNkdGFyIgotCi1QQUNLQUdFUyA9KyAiYnNkY3BpbyIKLUZJTEVTX2JzZGNwaW8gPSAiJHtiaW5kaXJ9L2JzZGNwaW8iCi0KLUFMVEVSTkFUSVZFX2JzZGNwaW8gPSAiY3BpbyIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtjcGlvXSA9ICIke2Jhc2VfYmluZGlyfS9jcGlvIgotQUxURVJOQVRJVkVfVEFSR0VUW2NwaW9dID0gIiR7YmluZGlyfS9ic2RjcGlvIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZV8zLjMuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlXzMuMy4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYWNhMjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZV8zLjMuMi5iYgpAQCAtMCwwICsxLDcxIEBACitTVU1NQVJZID0gIlN1cHBvcnQgZm9yIHJlYWRpbmcgdmFyaW91cyBhcmNoaXZlIGZvcm1hdHMiCitERVNDUklQVElPTiA9ICJDIGxpYnJhcnkgYW5kIGNvbW1hbmQtbGluZSB0b29scyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyB0YXIsIGNwaW8sIHppcCwgSVNPLCBhbmQgb3RoZXIgYXJjaGl2ZSBmb3JtYXRzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5saWJhcmNoaXZlLm9yZy8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lZDk5YWNhMDA2YmMzNDY5NzRiYjc0NWEzNTMzNjQyNSIKKworREVQRU5EUyA9ICJlMmZzcHJvZ3MtbmF0aXZlIgorCitQQUNLQUdFQ09ORklHID89ICJ6bGliIGJ6MiB4eiBsem8iCisKK1BBQ0tBR0VDT05GSUdfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICJcCisJbGlieG1sMiBcCisJJHtAYmIudXRpbHMuZmlsdGVyKCdESVNUUk9fRkVBVFVSRVMnLCAnYWNsIHhhdHRyJywgZCl9IFwKKyIKKworREVQRU5EU19CWklQMiA9ICJiemlwMi1yZXBsYWNlbWVudC1uYXRpdmUiCitERVBFTkRTX0JaSVAyX2NsYXNzLXRhcmdldCA9ICJiemlwMiIKKworUEFDS0FHRUNPTkZJR1thY2xdID0gIi0tZW5hYmxlLWFjbCwtLWRpc2FibGUtYWNsLGFjbCwiCitQQUNLQUdFQ09ORklHW3hhdHRyXSA9ICItLWVuYWJsZS14YXR0ciwtLWRpc2FibGUteGF0dHIsYXR0ciwiCitQQUNLQUdFQ09ORklHW3psaWJdID0gIi0td2l0aC16bGliLC0td2l0aG91dC16bGliLHpsaWIsIgorUEFDS0FHRUNPTkZJR1tiejJdID0gIi0td2l0aC1iejJsaWIsLS13aXRob3V0LWJ6MmxpYiwke0RFUEVORFNfQlpJUDJ9LCIKK1BBQ0tBR0VDT05GSUdbeHpdID0gIi0td2l0aC1sem1hLC0td2l0aG91dC1sem1hLHh6LCIKK1BBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLS13aXRoLW9wZW5zc2wsLS13aXRob3V0LW9wZW5zc2wsb3BlbnNzbCwiCitQQUNLQUdFQ09ORklHW2xpYnhtbDJdID0gIi0td2l0aC14bWwyLC0td2l0aG91dC14bWwyLGxpYnhtbDIsIgorUEFDS0FHRUNPTkZJR1tleHBhdF0gPSAiLS13aXRoLWV4cGF0LC0td2l0aG91dC1leHBhdCxleHBhdCwiCitQQUNLQUdFQ09ORklHW2x6b10gPSAiLS13aXRoLWx6bzIsLS13aXRob3V0LWx6bzIsbHpvLCIKK1BBQ0tBR0VDT05GSUdbbmV0dGxlXSA9ICItLXdpdGgtbmV0dGxlLC0td2l0aG91dC1uZXR0bGUsbmV0dGxlLCIKK1BBQ0tBR0VDT05GSUdbbHo0XSA9ICItLXdpdGgtbHo0LC0td2l0aG91dC1sejQsbHo0LCIKKworRVhUUkFfT0VDT05GICs9ICItLWVuYWJsZS1sYXJnZWZpbGUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2xpYmFyY2hpdmUub3JnL2Rvd25sb2Fkcy9saWJhcmNoaXZlLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9idWc5MjkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTQxNjYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTQ1MDIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9uLXJlY3Vyc2l2ZS1leHRyYWN0LWFuZC1saXN0LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NTgzYmQ2YjJlYmY3ZTBlODk2M2Q5MDg3OWViMWIyNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlZDJkYmQ2OTU0NzkyYjJjMDU0Y2NmOGVjNGIzMzBhNTRiODU5MDRhODBjZWY0NzdhMWM3NDY0M2RkYWZhMGNlIgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtYWx0ZXJuYXRpdmVzIHBrZ2NvbmZpZworCitDUFBGTEFHUyArPSAiLUkke1dPUktESVJ9L2V4dHJhLWluY2x1ZGVzIgorCitkb19jb25maWd1cmVbY2xlYW5kaXJzXSArPSAiJHtXT1JLRElSfS9leHRyYS1pbmNsdWRlcyIKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCSMgV2UganVzdCBuZWVkIHRoZSBoZWFkZXJzIGZvciBzb21lIHR5cGUgY29uc3RhbnRzLCBzbyBubyBuZWVkIHRvCisJIyBidWlsZCBhbGwgb2YgZTJmc3Byb2dzIGZvciB0aGUgdGFyZ2V0CisJY3AgLVIgJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9L2V4dDJmcyAke1dPUktESVJ9L2V4dHJhLWluY2x1ZGVzLworfQorCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICI4MCIKKworUEFDS0FHRVMgPSsgImJzZHRhciIKK0ZJTEVTX2JzZHRhciA9ICIke2JpbmRpcn0vYnNkdGFyIgorCitBTFRFUk5BVElWRV9ic2R0YXIgPSAidGFyIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3Rhcl0gPSAiJHtiYXNlX2JpbmRpcn0vdGFyIgorQUxURVJOQVRJVkVfVEFSR0VUW3Rhcl0gPSAiJHtiaW5kaXJ9L2JzZHRhciIKKworUEFDS0FHRVMgPSsgImJzZGNwaW8iCitGSUxFU19ic2RjcGlvID0gIiR7YmluZGlyfS9ic2RjcGlvIgorCitBTFRFUk5BVElWRV9ic2RjcGlvID0gImNwaW8iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbY3Bpb10gPSAiJHtiYXNlX2JpbmRpcn0vY3BpbyIKK0FMVEVSTkFUSVZFX1RBUkdFVFtjcGlvXSA9ICIke2JpbmRpcn0vYnNkY3BpbyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuLzAwMDEtaWRuLWZpeC1wcmludGYtZm9ybWF0LXNlY3VyaXR5LXdhcm5pbmdzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuLzAwMDEtaWRuLWZpeC1wcmludGYtZm9ybWF0LXNlY3VyaXR5LXdhcm5pbmdzLnBhdGNoCmluZGV4IDVhZGM3ZDkuLjJkNWZhYWIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi8wMDAxLWlkbi1maXgtcHJpbnRmLWZvcm1hdC1zZWN1cml0eS13YXJuaW5ncy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vMDAwMS1pZG4tZml4LXByaW50Zi1mb3JtYXQtc2VjdXJpdHktd2FybmluZ3MucGF0Y2gKQEAgLTEsMTgxICsxLDY5NCBAQAotRnJvbSA4MmY5OGRjYmM0MjliYmU4OWE5ODM3YzUzM2NiY2JjMDJlNzdjNzkwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogPT9VVEYtOD9xP0FuZHI9QzM9QTk9MjBEcmFzemlrPz0gPGFkcmFzemlrQHR5Y29pbnQuY29tPgotRGF0ZTogVHVlLCAyOCBKdW4gMjAxNiAxMjo0MzozMSArMDEwMAotU3ViamVjdDogW1BBVENIXSBpZG46IGZpeCBwcmludGYoKSBmb3JtYXQgc2VjdXJpdHkgd2FybmluZ3MKLU1JTUUtVmVyc2lvbjogMS4wCi1Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKLUNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0Zyb20gNzE0OGFkZjM0ZGFlMzAzNDVjMmU0ZDlkNDM3ODM4YTQ1YmE2ZjZlOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/dXRmOD9xP1RpbT0yMFI9QzM9QkNoc2VuPz0gPHRpbS5ydWVoc2VuQGdteC5kZT4KK0RhdGU6IFdlZCwgMSBGZWIgMjAxNyAxMTowNjozOSArMDEwMAorU3ViamVjdDogW1BBVENIXSBGaXggLVdmb3JtYXQgd2FybmluZ3MKIAotfCAuLi8uLi9saWJpZG4tMS4zMi9zcmMvaWRuLmM6IEluIGZ1bmN0aW9uICdtYWluJzoKLXwgLi4vLi4vbGliaWRuLTEuMzIvc3JjL2lkbi5jOjE3Mjo3OiBlcnJvcjogZm9ybWF0IG5vdCBhIHN0cmluZyBsaXRlcmFsIGFuZCBubyBmb3JtYXQgYXJndW1lbnRzIFstV2Vycm9yPWZvcm1hdC1zZWN1cml0eV0KLXwgICAgICAgIGVycm9yICgwLCAwLCBfKCJvbmx5IG9uZSBvZiAtcywgLWUsIC1kLCAtYSwgLXUgb3IgLW4gY2FuIGJlIHNwZWNpZmllZCIpKTsKLXwgICAgICAgIF5+fn5+Ci18IC4uLy4uL2xpYmlkbi0xLjMyL3NyYy9pZG4uYzoxODc6NTogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCi18ICAgICAgZnByaW50ZiAoc3RkZXJyLCBfKCJUeXBlIGVhY2ggaW5wdXQgc3RyaW5nIG9uIGEgbGluZSBieSBpdHNlbGYsICIKLXwgICAgICBefn5+fn5+Ci18IC4uLy4uL2xpYmlkbi0xLjMyL3NyYy9pZG4uYzoyMDI6NDogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCi18ICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCBlcnJubywgXygiaW5wdXQgZXJyb3IiKSk7Ci18ICAgICBefn5+fgotfCAuLi8uLi9saWJpZG4tMS4zMi9zcmMvaWRuLmM6MjIwOjg6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQotfCAgICAgICAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVVRGLTggdG8gVUNTLTQiKSk7Ci18ICAgICAgICAgXgotfCAuLi8uLi9saWJpZG4tMS4zMi9zcmMvaWRuLmM6MjQ1Ojg6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQotfCAgICAgICAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVVRGLTggdG8gVUNTLTQiKSk7Ci18ICAgICAgICAgXgotfCAuLi8uLi9saWJpZG4tMS4zMi9zcmMvaWRuLmM6MjgxOjY6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQotfCAgICAgICBfKCJjb3VsZCBub3QgY29udmVydCBmcm9tIFVURi04IHRvIFVDUy00IikpOwotfCAgICAgICBeCi18IC4uLy4uL2xpYmlkbi0xLjMyL3NyYy9pZG4uYzozNDA6NjogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCi18ICAgICAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVUNTLTQgdG8gVVRGLTgiKSk7Ci18ICAgICAgIF4KLXwgLi4vLi4vbGliaWRuLTEuMzIvc3JjL2lkbi5jOjM2NDo2OiBlcnJvcjogZm9ybWF0IG5vdCBhIHN0cmluZyBsaXRlcmFsIGFuZCBubyBmb3JtYXQgYXJndW1lbnRzIFstV2Vycm9yPWZvcm1hdC1zZWN1cml0eV0KLXwgICAgICAgXygiY291bGQgbm90IGNvbnZlcnQgZnJvbSBVQ1MtNCB0byBVVEYtOCIpKTsKLXwgICAgICAgXgotfCAuLi8uLi9saWJpZG4tMS4zMi9zcmMvaWRuLmM6NDQyOjg6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQotfCAgICAgICAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVUNTLTQgdG8gVVRGLTgiKSk7Ci18ICAgICAgICAgXgotfCAuLi8uLi9saWJpZG4tMS4zMi9zcmMvaWRuLmM6NDk4OjY6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQotfCAgICAgICBfKCJjb3VsZCBub3QgY29udmVydCBmcm9tIFVURi04IHRvIFVDUy00IikpOwotfCAgICAgICBeCi18IC4uLy4uL2xpYmlkbi0xLjMyL3NyYy9pZG4uYzo1Mjc6NTogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCi18ICAgICAgXygiY291bGQgbm90IGNvbnZlcnQgZnJvbSBVVEYtOCB0byBVQ1MtNCIpKTsKLXwgICAgICBeCi18IC4uLy4uL2xpYmlkbi0xLjMyL3NyYy9pZG4uYzo1NDA6NjogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCi18ICAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIF8oImNvdWxkIG5vdCBkbyBORktDIG5vcm1hbGl6YXRpb24iKSk7Ci18ICAgICAgIF5+fn5+Ci18IC4uLy4uL2xpYmlkbi0xLjMyL3NyYy9pZG4uYzo1NTE6NTogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCi18ICAgICAgXygiY291bGQgbm90IGNvbnZlcnQgZnJvbSBVVEYtOCB0byBVQ1MtNCIpKTsKLXwgICAgICBeCi0KLVNpZ25lZC1vZmYtYnk6IEFuZHLDqSBEcmFzemlrIDxhZHJhc3ppa0B0eWNvaW50LmNvbT4KIC0tLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogCi0gc3JjL2lkbi5jIHwgMjcgKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQorIGV4YW1wbGVzL2V4YW1wbGUuYyAgICAgfCAgNiArKystLS0KKyBleGFtcGxlcy9leGFtcGxlMy5jICAgIHwgIDQgKystLQorIGV4YW1wbGVzL2V4YW1wbGU0LmMgICAgfCAgNCArKy0tCisgZXhhbXBsZXMvZXhhbXBsZTUuYyAgICB8ICAyICstCisgc3JjL2lkbi5jICAgICAgICAgICAgICB8ICAyICstCisgdGVzdHMvdHN0X2lkbmEuYyAgICAgICB8IDI1ICsrKysrKysrKysrKystLS0tLS0tLS0tLS0KKyB0ZXN0cy90c3RfaWRuYTIuYyAgICAgIHwgIDggKysrKy0tLS0KKyB0ZXN0cy90c3RfaWRuYTMuYyAgICAgIHwgIDggKysrKy0tLS0KKyB0ZXN0cy90c3RfbmZrYy5jICAgICAgIHwgIDggKysrKy0tLS0KKyB0ZXN0cy90c3RfcHIyOS5jICAgICAgIHwgMTIgKysrKysrLS0tLS0tCisgdGVzdHMvdHN0X3B1bnljb2RlLmMgICB8IDEzICsrKysrKystLS0tLS0KKyB0ZXN0cy90c3Rfc3RyZXJyb3IuYyAgIHwgMjAgKysrKysrKysrKy0tLS0tLS0tLS0KKyB0ZXN0cy90c3Rfc3RyaW5ncHJlcC5jIHwgMTIgKysrKysrLS0tLS0tCisgdGVzdHMvdHN0X3RsZC5jICAgICAgICB8IDIwICsrKysrKysrKystLS0tLS0tLS0tCisgdGVzdHMvdXRpbHMuYyAgICAgICAgICB8ICA2ICsrKy0tLQorIDE1IGZpbGVzIGNoYW5nZWQsIDc2IGluc2VydGlvbnMoKyksIDc0IGRlbGV0aW9ucygtKQogCi1kaWZmIC0tZ2l0IGEvc3JjL2lkbi5jIGIvc3JjL2lkbi5jCi1pbmRleCBiZTFjN2QxLi42OGU0MjkxIDEwMDY0NAotLS0tIGEvc3JjL2lkbi5jCi0rKysgYi9zcmMvaWRuLmMKLUBAIC0xNzAsNyArMTcwLDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSAgICAgICAoYXJnc19pbmZvLmlkbmFfdG9fdW5pY29kZV9naXZlbiA/IDEgOiAwKSArCi0gICAgICAgKGFyZ3NfaW5mby5uZmtjX2dpdmVuID8gMSA6IDApICE9IDEpCitkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZXhhbXBsZS5jIGIvZXhhbXBsZXMvZXhhbXBsZS5jCitpbmRleCA2ZTkxNzgzLi4yNGY2NGUwIDEwMDY0NAorLS0tIGEvZXhhbXBsZXMvZXhhbXBsZS5jCisrKysgYi9leGFtcGxlcy9leGFtcGxlLmMKK0BAIC01NSw3ICs1NSw3IEBAIG1haW4gKHZvaWQpCisgCisgICBwcmludGYgKCJCZWZvcmUgbG9jYWxlMnV0ZjggKGxlbmd0aCAlbGQpOiAiLCAobG9uZyBpbnQpIHN0cmxlbiAoYnVmKSk7CisgICBmb3IgKGkgPSAwOyBpIDwgc3RybGVuIChidWYpOyBpKyspCistICAgIHByaW50ZiAoIiUwMnggIiwgYnVmW2ldICYgMHhGRik7CisrICAgIHByaW50ZiAoIiUwMnggIiwgKHVuc2lnbmVkKSBidWZbaV0gJiAweEZGKTsKKyAgIHByaW50ZiAoIlxuIik7CisgCisgICBwID0gc3RyaW5ncHJlcF9sb2NhbGVfdG9fdXRmOCAoYnVmKTsKK0BAIC02OSw3ICs2OSw3IEBAIG1haW4gKHZvaWQpCisgCisgICBwcmludGYgKCJCZWZvcmUgc3RyaW5ncHJlcCAobGVuZ3RoICVsZCk6ICIsIChsb25nIGludCkgc3RybGVuIChidWYpKTsKKyAgIGZvciAoaSA9IDA7IGkgPCBzdHJsZW4gKGJ1Zik7IGkrKykKKy0gICAgcHJpbnRmICgiJTAyeCAiLCBidWZbaV0gJiAweEZGKTsKKysgICAgcHJpbnRmICgiJTAyeCAiLCAodW5zaWduZWQpIGJ1ZltpXSAmIDB4RkYpOworICAgcHJpbnRmICgiXG4iKTsKKyAKKyAgIHJjID0gc3RyaW5ncHJlcCAoYnVmLCBCVUZTSVosIDAsIHN0cmluZ3ByZXBfbmFtZXByZXApOworQEAgLTc5LDcgKzc5LDcgQEAgbWFpbiAodm9pZCkKICAgICAgewotLSAgICAgIGVycm9yICgwLCAwLCBfKCJvbmx5IG9uZSBvZiAtcywgLWUsIC1kLCAtYSwgLXUgb3IgLW4gY2FuIGJlIHNwZWNpZmllZCIpKTsKLSsgICAgICBlcnJvciAoMCwgMCwgIiVzIiwgXygib25seSBvbmUgb2YgLXMsIC1lLCAtZCwgLWEsIC11IG9yIC1uIGNhbiBiZSBzcGVjaWZpZWQiKSk7Ci0gICAgICAgdXNhZ2UgKEVYSVRfRkFJTFVSRSk7CisgICAgICAgcHJpbnRmICgiQWZ0ZXIgc3RyaW5ncHJlcCAobGVuZ3RoICVsZCk6ICIsIChsb25nIGludCkgc3RybGVuIChidWYpKTsKKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RybGVuIChidWYpOyBpKyspCistCXByaW50ZiAoIiUwMnggIiwgYnVmW2ldICYgMHhGRik7CisrCXByaW50ZiAoIiUwMnggIiwgKHVuc2lnbmVkKSBidWZbaV0gJiAweEZGKTsKKyAgICAgICBwcmludGYgKCJcbiIpOwogICAgICB9CiAgCi1AQCAtMTg1LDcgKzE4NSw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gICBpZiAoIWFyZ3NfaW5mby5xdWlldF9naXZlbgotICAgICAgICYmIGFyZ3NfaW5mby5pbnB1dHNfbnVtID09IDAKLSAgICAgICAmJiBpc2F0dHkgKGZpbGVubyAoc3RkaW4pKSkKLS0gICAgZnByaW50ZiAoc3RkZXJyLCBfKCJUeXBlIGVhY2ggaW5wdXQgc3RyaW5nIG9uIGEgbGluZSBieSBpdHNlbGYsICIKLSsgICAgZnByaW50ZiAoc3RkZXJyLCAiJXMiLCBfKCJUeXBlIGVhY2ggaW5wdXQgc3RyaW5nIG9uIGEgbGluZSBieSBpdHNlbGYsICIKLSAJCSAgICAgICAidGVybWluYXRlZCBieSBhIG5ld2xpbmUgY2hhcmFjdGVyLlxuIikpOworZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2V4YW1wbGUzLmMgYi9leGFtcGxlcy9leGFtcGxlMy5jCitpbmRleCBmYzExYzFjLi5mZmI5MDQyIDEwMDY0NAorLS0tIGEvZXhhbXBsZXMvZXhhbXBsZTMuYworKysrIGIvZXhhbXBsZXMvZXhhbXBsZTMuYworQEAgLTU2LDcgKzU2LDcgQEAgbWFpbiAodm9pZCkKICAKLSAgIGRvCi1AQCAtMTk3LDcgKzE5Nyw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gCSAgaWYgKGZlb2YgKHN0ZGluKSkKLSAJICAgIGJyZWFrOworICAgcHJpbnRmICgiUmVhZCBzdHJpbmcgKGxlbmd0aCAlbGQpOiAiLCAobG9uZyBpbnQpIHN0cmxlbiAoYnVmKSk7CisgICBmb3IgKGkgPSAwOyBpIDwgc3RybGVuIChidWYpOyBpKyspCistICAgIHByaW50ZiAoIiUwMnggIiwgYnVmW2ldICYgMHhGRik7CisrICAgIHByaW50ZiAoIiUwMnggIiwgKHVuc2lnbmVkKSBidWZbaV0gJiAweEZGKTsKKyAgIHByaW50ZiAoIlxuIik7CiAgCi0tCSAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgZXJybm8sIF8oImlucHV0IGVycm9yIikpOwotKwkgIGVycm9yIChFWElUX0ZBSUxVUkUsIGVycm5vLCAiJXMiLCBfKCJpbnB1dCBlcnJvciIpKTsKKyAgIHJjID0gaWRuYV90b19hc2NpaV9seiAoYnVmLCAmcCwgMCk7CitAQCAtNjgsNyArNjgsNyBAQCBtYWluICh2b2lkKQorIAorICAgcHJpbnRmICgiQUNFIGxhYmVsIChsZW5ndGggJWxkKTogJyVzJ1xuIiwgKGxvbmcgaW50KSBzdHJsZW4gKHApLCBwKTsKKyAgIGZvciAoaSA9IDA7IGkgPCBzdHJsZW4gKHApOyBpKyspCistICAgIHByaW50ZiAoIiUwMnggIiwgcFtpXSAmIDB4RkYpOworKyAgICBwcmludGYgKCIlMDJ4ICIsICh1bnNpZ25lZCkgcFtpXSAmIDB4RkYpOworICAgcHJpbnRmICgiXG4iKTsKKyAKKyAgIGZyZWUgKHApOworZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2V4YW1wbGU0LmMgYi9leGFtcGxlcy9leGFtcGxlNC5jCitpbmRleCAxYjMxOWM5Li5hMzMxNWExIDEwMDY0NAorLS0tIGEvZXhhbXBsZXMvZXhhbXBsZTQuYworKysrIGIvZXhhbXBsZXMvZXhhbXBsZTQuYworQEAgLTU2LDcgKzU2LDcgQEAgbWFpbiAodm9pZCkKKyAKKyAgIHByaW50ZiAoIlJlYWQgc3RyaW5nIChsZW5ndGggJWxkKTogIiwgKGxvbmcgaW50KSBzdHJsZW4gKGJ1ZikpOworICAgZm9yIChpID0gMDsgaSA8IHN0cmxlbiAoYnVmKTsgaSsrKQorLSAgICBwcmludGYgKCIlMDJ4ICIsIGJ1ZltpXSAmIDB4RkYpOworKyAgICBwcmludGYgKCIlMDJ4ICIsICh1bnNpZ25lZCkgYnVmW2ldICYgMHhGRik7CisgICBwcmludGYgKCJcbiIpOworIAorICAgcmMgPSBpZG5hX3RvX3VuaWNvZGVfbHpseiAoYnVmLCAmcCwgMCk7CitAQCAtNjgsNyArNjgsNyBAQCBtYWluICh2b2lkKQorIAorICAgcHJpbnRmICgiQUNFIGxhYmVsIChsZW5ndGggJWxkKTogJyVzJ1xuIiwgKGxvbmcgaW50KSBzdHJsZW4gKHApLCBwKTsKKyAgIGZvciAoaSA9IDA7IGkgPCBzdHJsZW4gKHApOyBpKyspCistICAgIHByaW50ZiAoIiUwMnggIiwgcFtpXSAmIDB4RkYpOworKyAgICBwcmludGYgKCIlMDJ4ICIsICh1bnNpZ25lZCkgcFtpXSAmIDB4RkYpOworICAgcHJpbnRmICgiXG4iKTsKKyAKKyAgIGZyZWUgKHApOworZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2V4YW1wbGU1LmMgYi9leGFtcGxlcy9leGFtcGxlNS5jCitpbmRleCBkZjU1Nzk4Li4yOWQ0MGI5IDEwMDY0NAorLS0tIGEvZXhhbXBsZXMvZXhhbXBsZTUuYworKysrIGIvZXhhbXBsZXMvZXhhbXBsZTUuYworQEAgLTY4LDcgKzY4LDcgQEAgbWFpbiAodm9pZCkKKyAKKyAgIHByaW50ZiAoIlJlYWQgc3RyaW5nIChsZW5ndGggJWxkKTogIiwgKGxvbmcgaW50KSBzdHJsZW4gKGJ1ZikpOworICAgZm9yIChpID0gMDsgaSA8IHN0cmxlbiAoYnVmKTsgaSsrKQorLSAgICBwcmludGYgKCIlMDJ4ICIsIGJ1ZltpXSAmIDB4RkYpOworKyAgICBwcmludGYgKCIlMDJ4ICIsICh1bnNpZ25lZCkgYnVmW2ldICYgMHhGRik7CisgICBwcmludGYgKCJcbiIpOworIAorICAgcCA9IHN0cmluZ3ByZXBfbG9jYWxlX3RvX3V0ZjggKGJ1Zik7CitkaWZmIC0tZ2l0IGEvc3JjL2lkbi5jIGIvc3JjL2lkbi5jCitpbmRleCBiZTFjN2QxLi4xM2ViM2M5IDEwMDY0NAorLS0tIGEvc3JjL2lkbi5jCisrKysgYi9zcmMvaWRuLmMKK0BAIC00MTksNyArNDE5LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJICAgICAgc2l6ZV90IGk7CisgCSAgICAgIGZvciAoaSA9IDA7IHBbaV07IGkrKykKKyAJCWZwcmludGYgKHN0ZGVyciwgIm91dHB1dFslbHVdID0gVSslMDR4XG4iLAorLQkJCSAodW5zaWduZWQgbG9uZykgaSwgcFtpXSk7CisrCQkJICh1bnNpZ25lZCBsb25nKSBpLCAodW5zaWduZWQpIHBbaV0pOworIAkgICAgfQorIAorIAkgIGZwcmludGYgKHN0ZG91dCwgIiVzXG4iLCBwKTsKK2RpZmYgLS1naXQgYS90ZXN0cy90c3RfaWRuYS5jIGIvdGVzdHMvdHN0X2lkbmEuYworaW5kZXggNDE1NzY0ZS4uNGFjMDQ2ZiAxMDA2NDQKKy0tLSBhL3Rlc3RzL3RzdF9pZG5hLmMKKysrKyBiL3Rlc3RzL3RzdF9pZG5hLmMKK0BAIC0yMjAsMTMgKzIyMCwxNCBAQCBkb2l0ICh2b2lkKQorICAgY2hhciBsYWJlbFsxMDBdOworICAgdWludDMyX3QgKnVjczRsYWJlbCA9IE5VTEw7CisgICB1aW50MzJfdCB0bXBbMTAwXTsKKy0gIHNpemVfdCBsZW4sIGxlbjIsIGk7CisrICBzaXplX3QgbGVuLCBsZW4yOworICAgaW50IHJjOworKyAgdW5zaWduZWQgaTsKKyAKKyAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YgKGlkbmEpIC8gc2l6ZW9mIChpZG5hWzBdKTsgaSsrKQorICAgICB7CisgICAgICAgaWYgKGRlYnVnKQorLQlwcmludGYgKCJJRE5BIGVudHJ5ICVsZDogJXNcbiIsIGksIGlkbmFbaV0ubmFtZSk7CisrCXByaW50ZiAoIklETkEgZW50cnkgJXU6ICVzXG4iLCBpLCBpZG5hW2ldLm5hbWUpOworIAorICAgICAgIGlmIChkZWJ1ZykKKyAJeworQEAgLTIzNyw3ICsyMzgsNyBAQCBkb2l0ICh2b2lkKQorICAgICAgIHJjID0gaWRuYV90b19hc2NpaV80aSAoaWRuYVtpXS5pbiwgaWRuYVtpXS5pbmxlbiwgbGFiZWwsIGlkbmFbaV0uZmxhZ3MpOworICAgICAgIGlmIChyYyAhPSBpZG5hW2ldLnRvYXNjaWlyYykKKyAJeworLQkgIGZhaWwgKCJJRE5BIGVudHJ5ICVsZCBmYWlsZWQ6ICVkXG4iLCBpLCByYyk7CisrCSAgZmFpbCAoIklETkEgZW50cnkgJXUgZmFpbGVkOiAlZFxuIiwgaSwgcmMpOworIAkgIGlmIChkZWJ1ZykKKyAJICAgIHByaW50ZiAoIkZBVEFMXG4iKTsKKyAJICBjb250aW51ZTsKK0BAIC0yNTYsNyArMjU3LDcgQEAgZG9pdCAodm9pZCkKKyAJICBpZiAoc3RybGVuIChpZG5hW2ldLm91dCkgIT0gc3RybGVuIChsYWJlbCkgfHwKKyAJICAgICAgc3RyY2FzZWNtcCAoaWRuYVtpXS5vdXQsIGxhYmVsKSAhPSAwKQorIAkgICAgeworLQkgICAgICBmYWlsICgiSUROQSBlbnRyeSAlbGQgZmFpbGVkXG4iLCBpKTsKKysJICAgICAgZmFpbCAoIklETkEgZW50cnkgJXUgZmFpbGVkXG4iLCBpKTsKKyAJICAgICAgaWYgKGRlYnVnKQorIAkJcHJpbnRmICgiRVJST1JcbiIpOworIAkgICAgfQorQEAgLTI3Myw4ICsyNzQsOCBAQCBkb2l0ICh2b2lkKQorIAorICAgICAgIGlmIChkZWJ1ZykKKyAJeworLQkgIHByaW50ZiAoImluOiAlcyAoJWxkPT0lbGQpXG4iLCBpZG5hW2ldLm91dCwgc3RybGVuIChpZG5hW2ldLm91dCksCistCQkgIGxlbik7CisrCSAgcHJpbnRmICgiaW46ICVzICglZD09JWQpXG4iLCBpZG5hW2ldLm91dCwgKGludCkgc3RybGVuIChpZG5hW2ldLm91dCksCisrCQkgIChpbnQpIGxlbik7CisgCSAgdWNzNHByaW50ICh1Y3M0bGFiZWwsIGxlbik7CiAgCX0KICAKLSAgICAgICBpZiAoc3RybGVuIChsaW5lKSA+IDApCi1AQCAtMjE1LDcgKzIxNSw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gCSAgaWYgKCFxKQorQEAgLTI4MiwyMCArMjgzLDIwIEBAIGRvaXQgKHZvaWQpCisgICAgICAgcmMgPSBpZG5hX3RvX3VuaWNvZGVfNDRpICh1Y3M0bGFiZWwsIGxlbiwgdG1wLCAmbGVuMiwgaWRuYVtpXS5mbGFncyk7CisgICAgICAgaWYgKGRlYnVnKQorIAl7CistCSAgcHJpbnRmICgiZXhwZWN0ZWQgb3V0ICglbGQpOlxuIiwKKysJICBwcmludGYgKCJleHBlY3RlZCBvdXQgKCVsdSk6XG4iLAorIAkJICByYyA9PSBJRE5BX1NVQ0NFU1MgPyBpZG5hW2ldLmlubGVuIDogbGVuKTsKKyAJICBpZiAocmMgPT0gSUROQV9TVUNDRVNTKQorIAkgICAgdWNzNHByaW50IChpZG5hW2ldLmluLCBpZG5hW2ldLmlubGVuKTsKKyAJICBlbHNlCisgCSAgICB1Y3M0cHJpbnQgKHVjczRsYWJlbCwgbGVuKTsKKyAKKy0JICBwcmludGYgKCJjb21wdXRlZCBvdXQgKCVsZCk6XG4iLCBsZW4yKTsKKysJICBwcmludGYgKCJjb21wdXRlZCBvdXQgKCVkKTpcbiIsIChpbnQpIGxlbjIpOworIAkgIHVjczRwcmludCAodG1wLCBsZW4yKTsKKyAJfQorIAorICAgICAgIGlmIChyYyAhPSBpZG5hW2ldLnRvdW5pY29kZXJjKQorIAl7CistCSAgZmFpbCAoIklETkEgZW50cnkgJWxkIGZhaWxlZDogJWRcbiIsIGksIHJjKTsKKysJICBmYWlsICgiSUROQSBlbnRyeSAldSBmYWlsZWQ6ICVkXG4iLCBpLCByYyk7CisgCSAgaWYgKGRlYnVnKQorIAkgICAgcHJpbnRmICgiRkFUQUxcbiIpOworIAkgIGNvbnRpbnVlOworQEAgLTMwOSwxMSArMzEwLDExIEBAIGRvaXQgKHZvaWQpCisgCSAgaWYgKGRlYnVnKQogIAkgICAgewotIAkgICAgICBmcmVlIChwKTsKLS0JICAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwKLSsJICAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgIiVzIiwKLSAJCSAgICAgXygiY291bGQgbm90IGNvbnZlcnQgZnJvbSBVVEYtOCB0byBVQ1MtNCIpKTsKKyAJICAgICAgaWYgKHJjID09IElETkFfU1VDQ0VTUykKKy0JCXByaW50ZiAoImxlbj0lbGQgbGVuMj0lbGRcbiIsIGxlbjIsIGlkbmFbaV0uaW5sZW4pOworKwkJcHJpbnRmICgibGVuPSVkIGxlbjI9JWRcbiIsIChpbnQpIGxlbjIsIChpbnQpIGlkbmFbaV0uaW5sZW4pOworIAkgICAgICBlbHNlCistCQlwcmludGYgKCJsZW49JWxkIGxlbjI9JWxkXG4iLCBsZW4sIGxlbjIpOworKwkJcHJpbnRmICgibGVuPSVkIGxlbjI9JWRcbiIsIChpbnQpIGxlbiwgKGludCkgbGVuMik7CiAgCSAgICB9CistCSAgZmFpbCAoIklETkEgZW50cnkgJWxkIGZhaWxlZFxuIiwgaSk7CisrCSAgZmFpbCAoIklETkEgZW50cnkgJXUgZmFpbGVkXG4iLCBpKTsKKyAJICBpZiAoZGVidWcpCisgCSAgICBwcmludGYgKCJFUlJPUlxuIik7CisgCX0KK2RpZmYgLS1naXQgYS90ZXN0cy90c3RfaWRuYTIuYyBiL3Rlc3RzL3RzdF9pZG5hMi5jCitpbmRleCA2NWIzYTRkLi4zODkzMmNhIDEwMDY0NAorLS0tIGEvdGVzdHMvdHN0X2lkbmEyLmMKKysrKyBiL3Rlc3RzL3RzdF9pZG5hMi5jCitAQCAtNDYxLDE0ICs0NjEsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpZG5hIGlkbmFbXSA9IHsKKyB2b2lkCisgZG9pdCAodm9pZCkKKyB7CistICBzaXplX3QgaTsKKysgIHVuc2lnbmVkIGk7CisgICBjaGFyICpvdXQ7CisgICBpbnQgcmM7CiAgCi1AQCAtMjQwLDcgKzI0MCw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gCSAgaWYgKCFxKQorICAgZm9yIChpID0gMDsgaSA8IHNpemVvZiAoaWRuYSkgLyBzaXplb2YgKGlkbmFbMF0pOyBpKyspCisgICAgIHsKKyAgICAgICBpZiAoZGVidWcpCistCXByaW50ZiAoIklETkEyIGVudHJ5ICVsZFxuIiwgaSk7CisrCXByaW50ZiAoIklETkEyIGVudHJ5ICV1XG4iLCBpKTsKKyAKKyAgICAgICBpZiAoZGVidWcpCisgCXsKK0BAIC00ODcsNyArNDg3LDcgQEAgZG9pdCAodm9pZCkKKyAJCQkgICAgIElETkFfVVNFX1NURDNfQVNDSUlfUlVMRVMpOworICAgICAgIGlmIChyYyAhPSBJRE5BX1NVQ0NFU1MgJiYgc3RybGVuIChpZG5hW2ldLm91dCkgPiAwKQorIAl7CistCSAgZmFpbCAoIklETkEyIGVudHJ5ICVsZCBmYWlsZWQ6ICVkXG4iLCBpLCByYyk7CisrCSAgZmFpbCAoIklETkEyIGVudHJ5ICV1IGZhaWxlZDogJWRcbiIsIGksIHJjKTsKKyAJICBjb250aW51ZTsKKyAJfQorIAorQEAgLTUwNCw3ICs1MDQsNyBAQCBkb2l0ICh2b2lkKQorIAkgIGlmIChzdHJsZW4gKGlkbmFbaV0ub3V0KSAhPSBzdHJsZW4gKG91dCkgfHwKKyAJICAgICAgc3RyY2FzZWNtcCAoaWRuYVtpXS5vdXQsIG91dCkgIT0gMCkKICAJICAgIHsKLSAJICAgICAgZnJlZSAocik7Ci0tCSAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCi0rCSAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsICIlcyIsCi0gCQkgICAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVVRGLTggdG8gVUNTLTQiKSk7CistCSAgICAgIGZhaWwgKCJJRE5BMiBlbnRyeSAlbGQgZmFpbGVkXG4iLCBpKTsKKysJICAgICAgZmFpbCAoIklETkEyIGVudHJ5ICV1IGZhaWxlZFxuIiwgaSk7CisgCSAgICAgIGlmIChkZWJ1ZykKKyAJCXByaW50ZiAoIkVSUk9SXG4iKTsKICAJICAgIH0KK2RpZmYgLS1naXQgYS90ZXN0cy90c3RfaWRuYTMuYyBiL3Rlc3RzL3RzdF9pZG5hMy5jCitpbmRleCBhMTg5Mzc4Li5mNjU2MjhjIDEwMDY0NAorLS0tIGEvdGVzdHMvdHN0X2lkbmEzLmMKKysrKyBiL3Rlc3RzL3RzdF9pZG5hMy5jCitAQCAtNTksMTMgKzU5LDEzIEBAIGRvaXQgKHZvaWQpCisgeworICAgaW50IHJjOworICAgY2hhciAqb3V0ID0gTlVMTDsKKy0gIHNpemVfdCBpOworKyAgdW5zaWduZWQgaTsKICAKLUBAIC0yNzcsNyArMjc3LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSAJICBxID0gc3RyaW5ncHJlcF91dGY4X3RvX3VjczQgKHAsIC0xLCAmbGVuKTsKLSAJICBmcmVlIChwKTsKLSAJICBpZiAoIXEpCi0tCSAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAotKwkgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgIiVzIiwKLSAJCSAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVVRGLTggdG8gVUNTLTQiKSk7CisgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mIChpZG5hKSAvIHNpemVvZiAoaWRuYVswXSk7IGkrKykKKyAgICAgeworICAgICAgIHJjID0gaWRuYV90b191bmljb2RlXzh6OHogKGlkbmFbaV0uaW4sICZvdXQsIDApOworICAgICAgIGlmIChyYyAhPSBJRE5BX1NVQ0NFU1MpCistCWZhaWwgKCJJRE5BM1slbGRdIGZhaWxlZCAlZFxuIiwgaSwgcmMpOworKwlmYWlsICgiSUROQTNbJXVdIGZhaWxlZCAlZFxuIiwgaSwgcmMpOwogIAotIAkgIGlmIChhcmdzX2luZm8uZGVidWdfZ2l2ZW4pCi1AQCAtMzM2LDcgKzMzNiw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gCSAgciA9IHN0cmluZ3ByZXBfdWNzNF90b191dGY4IChxLCAtMSwgTlVMTCwgTlVMTCk7Ci0gCSAgZnJlZSAocSk7Ci0gCSAgaWYgKCFyKQotLQkgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwKLSsJICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsICIlcyIsCi0gCQkgICBfKCJjb3VsZCBub3QgY29udmVydCBmcm9tIFVDUy00IHRvIFVURi04IikpOworICAgICAgIGlmIChkZWJ1ZyAmJiByYyA9PSBJRE5BX1NVQ0NFU1MpCisgCXsKK0BAIC03NSw5ICs3NSw5IEBAIGRvaXQgKHZvaWQpCisgCX0KICAKLSAJICBwID0gc3RyaW5ncHJlcF91dGY4X3RvX2xvY2FsZSAocik7Ci1AQCAtMzYwLDcgKzM2MCw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gCSAgcSA9IHN0cmluZ3ByZXBfdXRmOF90b191Y3M0IChwLCAtMSwgTlVMTCk7Ci0gCSAgZnJlZSAocCk7Ci0gCSAgaWYgKCFxKQotLQkgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwKLSsJICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsICIlcyIsCi0gCQkgICBfKCJjb3VsZCBub3QgY29udmVydCBmcm9tIFVDUy00IHRvIFVURi04IikpOworICAgICAgIGlmIChzdHJjbXAgKG91dCwgaWRuYVtpXS5vdXQpICE9IDApCistCWZhaWwgKCJJRE5BM1slbGRdIGZhaWxlZFxuIiwgaSk7CisrCWZhaWwgKCJJRE5BM1sldV0gZmFpbGVkXG4iLCBpKTsKKyAgICAgICBlbHNlIGlmIChkZWJ1ZykKKy0JcHJpbnRmICgiSUROQTNbJWxkXSBzdWNjZXNzXG4iLCBpKTsKKysJcHJpbnRmICgiSUROQTNbJXVdIHN1Y2Nlc3NcbiIsIGkpOwogIAotIAkgIGlmIChhcmdzX2luZm8uZGVidWdfZ2l2ZW4pCi1AQCAtNDM4LDcgKzQzOCw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gCSAgaWYgKCFxKQorICAgICAgIGlmIChvdXQpCisgCWlkbl9mcmVlIChvdXQpOworZGlmZiAtLWdpdCBhL3Rlc3RzL3RzdF9uZmtjLmMgYi90ZXN0cy90c3RfbmZrYy5jCitpbmRleCBkMTUwZmVjLi5mNWFmOWM2IDEwMDY0NAorLS0tIGEvdGVzdHMvdHN0X25ma2MuYworKysrIGIvdGVzdHMvdHN0X25ma2MuYworQEAgLTY4LDE4ICs2OCwxOCBAQCB2b2lkCisgZG9pdCAodm9pZCkKKyB7CisgICBjaGFyICpvdXQ7CistICBzaXplX3QgaTsKKysgIHVuc2lnbmVkIGk7CisgCisgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mIChuZmtjKSAvIHNpemVvZiAobmZrY1swXSk7IGkrKykKKyAgICAgeworICAgICAgIGlmIChkZWJ1ZykKKy0JcHJpbnRmICgiTkZLQyBlbnRyeSAlbGRcbiIsIGkpOworKwlwcmludGYgKCJORktDIGVudHJ5ICV1XG4iLCBpKTsKKyAKKyAgICAgICBvdXQgPSBzdHJpbmdwcmVwX3V0ZjhfbmZrY19ub3JtYWxpemUgKG5ma2NbaV0uaW4sCisgCQkJCQkgICAgKHNzaXplX3QpIHN0cmxlbiAobmZrY1tpXS5pbikpOworICAgICAgIGlmIChvdXQgPT0gTlVMTCkKKyAJeworLQkgIGZhaWwgKCJORktDIGVudHJ5ICVsZCBmYWlsZWQgZmF0YWxseVxuIiwgaSk7CisrCSAgZmFpbCAoIk5GS0MgZW50cnkgJXUgZmFpbGVkIGZhdGFsbHlcbiIsIGkpOworIAkgIGNvbnRpbnVlOworIAl9CisgCitAQCAtMTE0LDcgKzExNCw3IEBAIGRvaXQgKHZvaWQpCisgICAgICAgaWYgKHN0cmxlbiAobmZrY1tpXS5vdXQpICE9IHN0cmxlbiAob3V0KSB8fAorIAkgIG1lbWNtcCAobmZrY1tpXS5vdXQsIG91dCwgc3RybGVuIChvdXQpKSAhPSAwKQorIAl7CistCSAgZmFpbCAoIk5GS0MgZW50cnkgJWxkIGZhaWxlZFxuIiwgaSk7CisrCSAgZmFpbCAoIk5GS0MgZW50cnkgJXUgZmFpbGVkXG4iLCBpKTsKKyAJICBpZiAoZGVidWcpCisgCSAgICBwcmludGYgKCJFUlJPUlxuIik7CisgCX0KK2RpZmYgLS1naXQgYS90ZXN0cy90c3RfcHIyOS5jIGIvdGVzdHMvdHN0X3ByMjkuYworaW5kZXggM2RjNTQ2Ni4uMTFkMGVkZSAxMDA2NDQKKy0tLSBhL3Rlc3RzL3RzdF9wcjI5LmMKKysrKyBiL3Rlc3RzL3RzdF9wcjI5LmMKK0BAIC05MSw3ICs5MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHYgdHZbXSA9IHsKKyB2b2lkCisgZG9pdCAodm9pZCkKKyB7CistICBzaXplX3QgaTsKKysgIHVuc2lnbmVkIGk7CisgICBpbnQgcmM7CisgCisgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mICh0dikgLyBzaXplb2YgKHR2WzBdKTsgaSsrKQorQEAgLTEwMCw3ICsxMDAsNyBAQCBkb2l0ICh2b2lkKQorIAl7CisgCSAgdWludDMyX3QgKnAsICpxOworIAorLQkgIHByaW50ZiAoIlBSMjkgZW50cnkgJWxkOiAlc1xuIiwgaSwgdHZbaV0ubmFtZSk7CisrCSAgcHJpbnRmICgiUFIyOSBlbnRyeSAldTogJXNcbiIsIGksIHR2W2ldLm5hbWUpOworIAorIAkgIHByaW50ZiAoImluOlxuIik7CisgCSAgdWNzNHByaW50ICh0dltpXS5pbiwgdHZbaV0uaW5sZW4pOworQEAgLTEyMCw3ICsxMjAsNyBAQCBkb2l0ICh2b2lkKQorICAgICAgIHJjID0gcHIyOV80ICh0dltpXS5pbiwgdHZbaV0uaW5sZW4pOworICAgICAgIGlmIChyYyAhPSB0dltpXS5yYykKKyAJeworLQkgIGZhaWwgKCJQUjI5IGVudHJ5ICVsZCBmYWlsZWQgKGV4cGVjdGVkICVkKTogJWRcbiIsIGksIHR2W2ldLnJjLCByYyk7CisrCSAgZmFpbCAoIlBSMjkgZW50cnkgJXUgZmFpbGVkIChleHBlY3RlZCAlZCk6ICVkXG4iLCBpLCB0dltpXS5yYywgcmMpOworIAkgIGlmIChkZWJ1ZykKKyAJICAgIHByaW50ZiAoIkZBVEFMXG4iKTsKKyAJICBjb250aW51ZTsKK0BAIC0xMjksNyArMTI5LDcgQEAgZG9pdCAodm9pZCkKKyAgICAgICByYyA9IHByMjlfNHogKHR2W2ldLmluKTsKKyAgICAgICBpZiAocmMgIT0gdHZbaV0ucmMpCisgCXsKKy0JICBmYWlsICgiUFIyOSBlbnRyeSAlbGQgZmFpbGVkIChleHBlY3RlZCAlZCk6ICVkXG4iLCBpLCB0dltpXS5yYywgcmMpOworKwkgIGZhaWwgKCJQUjI5IGVudHJ5ICV1IGZhaWxlZCAoZXhwZWN0ZWQgJWQpOiAlZFxuIiwgaSwgdHZbaV0ucmMsIHJjKTsKKyAJICBpZiAoZGVidWcpCisgCSAgICBwcmludGYgKCJGQVRBTFxuIik7CisgCSAgY29udGludWU7CitAQCAtMTQyLDcgKzE0Miw3IEBAIGRvaXQgKHZvaWQpCisgCXAgPSBzdHJpbmdwcmVwX3VjczRfdG9fdXRmOCAodHZbaV0uaW4sIChzc2l6ZV90KSB0dltpXS5pbmxlbiwKKyAJCQkJICAgICAmaXRlbXNfcmVhZCwgJml0ZW1zX3dyaXR0ZW4pOworIAlpZiAocCA9PSBOVUxMKQorLQkgIGZhaWwgKCJGQUlMOiBzdHJpbmdwcmVwX3VjczRfdG9fdXRmOCh0dlslbGRdKSA9PSBOVUxMXG4iLCBpKTsKKysJICBmYWlsICgiRkFJTDogc3RyaW5ncHJlcF91Y3M0X3RvX3V0ZjgodHZbJXVdKSA9PSBOVUxMXG4iLCBpKTsKKyAJaWYgKGRlYnVnKQorIAkgIGhleHByaW50IChwLCBzdHJsZW4gKHApKTsKKyAKK0BAIC0xNTAsNyArMTUwLDcgQEAgZG9pdCAodm9pZCkKKyAJZnJlZSAocCk7CisgCWlmIChyYyAhPSB0dltpXS5yYykKKyAJICB7CistCSAgICBmYWlsICgiUFIyOSBlbnRyeSAlbGQgZmFpbGVkIChleHBlY3RlZCAlZCk6ICVkXG4iLAorKwkgICAgZmFpbCAoIlBSMjkgZW50cnkgJXUgZmFpbGVkIChleHBlY3RlZCAlZCk6ICVkXG4iLAorIAkJICBpLCB0dltpXS5yYywgcmMpOworIAkgICAgaWYgKGRlYnVnKQorIAkgICAgICBwcmludGYgKCJGQVRBTFxuIik7CitkaWZmIC0tZ2l0IGEvdGVzdHMvdHN0X3B1bnljb2RlLmMgYi90ZXN0cy90c3RfcHVueWNvZGUuYworaW5kZXggNDkzYjhhMi4uOTk3NzQ0YSAxMDA2NDQKKy0tLSBhL3Rlc3RzL3RzdF9wdW55Y29kZS5jCisrKysgYi90ZXN0cy90c3RfcHVueWNvZGUuYworQEAgLTE3Myw3ICsxNzMsOCBAQCBkb2l0ICh2b2lkKQorICAgY2hhciAqcDsKKyAgIHVpbnQzMl90ICpxOworICAgaW50IHJjOworLSAgc2l6ZV90IGksIG91dGxlbjsKKysgIHNpemVfdCBvdXRsZW47CisrICB1bnNpZ25lZCBpOworIAorICAgcCA9IG1hbGxvYyAoc2l6ZW9mICgqcCkgKiBCVUZTSVopOworICAgaWYgKHAgPT0gTlVMTCkKK0BAIC0xODYsNyArMTg3LDcgQEAgZG9pdCAodm9pZCkKKyAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YgKHB1bnljb2RlKSAvIHNpemVvZiAocHVueWNvZGVbMF0pOyBpKyspCisgICAgIHsKKyAgICAgICBpZiAoZGVidWcpCistCXByaW50ZiAoIlBVTllDT0RFIGVudHJ5ICVsZDogJXNcbiIsIGksIHB1bnljb2RlW2ldLm5hbWUpOworKwlwcmludGYgKCJQVU5ZQ09ERSBlbnRyeSAldTogJXNcbiIsIGksIHB1bnljb2RlW2ldLm5hbWUpOworIAorICAgICAgIGlmIChkZWJ1ZykKKyAJeworQEAgLTE5OSw3ICsyMDAsNyBAQCBkb2l0ICh2b2lkKQorIAkJCSAgICBOVUxMLCAmb3V0bGVuLCBwKTsKKyAgICAgICBpZiAocmMgIT0gcHVueWNvZGVbaV0ucmMpCisgCXsKKy0JICBmYWlsICgicHVueWNvZGVfZW5jb2RlKCkgZW50cnkgJWxkIGZhaWxlZDogJWRcbiIsIGksIHJjKTsKKysJICBmYWlsICgicHVueWNvZGVfZW5jb2RlKCkgZW50cnkgJXUgZmFpbGVkOiAlZFxuIiwgaSwgcmMpOworIAkgIGlmIChkZWJ1ZykKKyAJICAgIHByaW50ZiAoIkZBVEFMXG4iKTsKKyAJICBjb250aW51ZTsKK0BAIC0yMjEsNyArMjIyLDcgQEAgZG9pdCAodm9pZCkKKyAJICBpZiAoc3RybGVuIChwdW55Y29kZVtpXS5vdXQpICE9IHN0cmxlbiAocCkgfHwKKyAJICAgICAgbWVtY21wIChwdW55Y29kZVtpXS5vdXQsIHAsIHN0cmxlbiAocCkpICE9IDApCiAgCSAgICB7Ci0gCSAgICAgIGZyZWUgKHApOwotLQkgICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAotKwkgICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCAiJXMiLAotIAkJICAgICBfKCJjb3VsZCBub3QgY29udmVydCBmcm9tIFVDUy00IHRvIFVURi04IikpOworLQkgICAgICBmYWlsICgicHVueWNvZGUoKSBlbnRyeSAlbGQgZmFpbGVkXG4iLCBpKTsKKysJICAgICAgZmFpbCAoInB1bnljb2RlKCkgZW50cnkgJXUgZmFpbGVkXG4iLCBpKTsKKyAJICAgICAgaWYgKGRlYnVnKQorIAkJcHJpbnRmICgiRVJST1JcbiIpOwogIAkgICAgfQotIAotQEAgLTQ5NCw3ICs0OTQsNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotIAkgIHIgPSBzdHJpbmdwcmVwX3VjczRfdG9fdXRmOCAocSwgLTEsIE5VTEwsIE5VTEwpOwotIAkgIGZyZWUgKHEpOwotIAkgIGlmICghcikKLS0JICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCi0rCSAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCAiJXMiLAotIAkJICAgXygiY291bGQgbm90IGNvbnZlcnQgZnJvbSBVVEYtOCB0byBVQ1MtNCIpKTsKLSAKLSAJICBwID0gc3RyaW5ncHJlcF91dGY4X3RvX2xvY2FsZSAocik7Ci1AQCAtNTIzLDcgKzUyMyw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gCSAgICAgIGlmICghcSkKLSAJCXsKLSAJCSAgZnJlZSAocCk7Ci0tCQkgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCi0rCQkgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsICIlcyIsCi0gCQkJIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVVRGLTggdG8gVUNTLTQiKSk7Ci0gCQl9Ci0gCi1AQCAtNTM3LDcgKzUzNyw4IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gCSAgciA9IHN0cmluZ3ByZXBfdXRmOF9uZmtjX25vcm1hbGl6ZSAocCwgLTEpOwotIAkgIGZyZWUgKHApOwotIAkgIGlmICghcikKLS0JICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIF8oImNvdWxkIG5vdCBkbyBORktDIG5vcm1hbGl6YXRpb24iKSk7Ci0rCSAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCAiJXMiLAotKwkJICAgXygiY291bGQgbm90IGRvIE5GS0Mgbm9ybWFsaXphdGlvbiIpKTsKLSAKLSAJICBpZiAoYXJnc19pbmZvLmRlYnVnX2dpdmVuKQorQEAgLTI0MSw3ICsyNDIsNyBAQCBkb2l0ICh2b2lkKQorIAkJCSAgICAmb3V0bGVuLCBxLCBOVUxMKTsKKyAgICAgICBpZiAocmMgIT0gcHVueWNvZGVbaV0ucmMpCisgCXsKKy0JICBmYWlsICgicHVueWNvZGUoKSBlbnRyeSAlbGQgZmFpbGVkOiAlZFxuIiwgaSwgcmMpOworKwkgIGZhaWwgKCJwdW55Y29kZSgpIGVudHJ5ICV1IGZhaWxlZDogJWRcbiIsIGksIHJjKTsKKyAJICBpZiAoZGVidWcpCisgCSAgICBwcmludGYgKCJGQVRBTFxuIik7CisgCSAgY29udGludWU7CitAQCAtMjYyLDcgKzI2Myw3IEBAIGRvaXQgKHZvaWQpCisgCSAgaWYgKHB1bnljb2RlW2ldLmlubGVuICE9IG91dGxlbiB8fAorIAkgICAgICBtZW1jbXAgKHB1bnljb2RlW2ldLmluLCBxLCBvdXRsZW4pICE9IDApCiAgCSAgICB7Ci1AQCAtNTQ3LDcgKzU0OCw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gCSAgICAgIGlmICghcSkKLSAJCXsKLSAJCSAgZnJlZSAocik7Ci0tCQkgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCi0rCQkgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsICIlcyIsCi0gCQkJIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVVRGLTggdG8gVUNTLTQiKSk7Ci0gCQl9CistCSAgICAgIGZhaWwgKCJwdW55Y29kZV9kZWNvZGUoKSBlbnRyeSAlbGQgZmFpbGVkXG4iLCBpKTsKKysJICAgICAgZmFpbCAoInB1bnljb2RlX2RlY29kZSgpIGVudHJ5ICV1IGZhaWxlZFxuIiwgaSk7CisgCSAgICAgIGlmIChkZWJ1ZykKKyAJCXByaW50ZiAoIkVSUk9SXG4iKTsKKyAJICAgIH0KK2RpZmYgLS1naXQgYS90ZXN0cy90c3Rfc3RyZXJyb3IuYyBiL3Rlc3RzL3RzdF9zdHJlcnJvci5jCitpbmRleCA3MWZmZjU5Li43MzBmNWU0IDEwMDY0NAorLS0tIGEvdGVzdHMvdHN0X3N0cmVycm9yLmMKKysrKyBiL3Rlc3RzL3RzdF9zdHJlcnJvci5jCitAQCAtMTEwLDcgKzExMCw3IEBAIGRvaXQgKHZvaWQpCisgICAvKiBJdGVyYXRlIHRocm91Z2ggYWxsIGVycm9yIGNvZGVzLiAqLwogIAorICAgeworLSAgICBzaXplX3QgaTsKKysgICAgdW5zaWduZWQgaTsKKyAgICAgY29uc3QgY2hhciAqbGFzdF9wID0gTlVMTDsKKyAKKyAgICAgZm9yIChpID0gMDs7IGkrKykKK0BAIC0xMjYsMTMgKzEyNiwxMyBAQCBkb2l0ICh2b2lkKQorIAkgICAgYnJlYWs7CisgCSAgfQorIAlpZiAoZGVidWcpCistCSAgcHJpbnRmICgiaWRuYSAlbGQ6ICVzXG4iLCBpLCBwKTsKKysJICBwcmludGYgKCJpZG5hICV1OiAlc1xuIiwgaSwgcCk7CisgCWxhc3RfcCA9IHA7CisgICAgICAgfQorICAgfQorIAorICAgeworLSAgICBzaXplX3QgaTsKKysgICAgdW5zaWduZWQgaTsKKyAgICAgY29uc3QgY2hhciAqbGFzdF9wID0gTlVMTDsKKyAKKyAgICAgZm9yIChpID0gMDs7IGkrKykKK0BAIC0xNDEsMTMgKzE0MSwxMyBAQCBkb2l0ICh2b2lkKQorIAlpZiAocCA9PSBsYXN0X3ApCisgCSAgYnJlYWs7CisgCWlmIChkZWJ1ZykKKy0JICBwcmludGYgKCJwcjI5ICVsZDogJXNcbiIsIGksIHApOworKwkgIHByaW50ZiAoInByMjkgJXU6ICVzXG4iLCBpLCBwKTsKKyAJbGFzdF9wID0gcDsKKyAgICAgICB9CisgICB9CisgCisgICB7CistICAgIHNpemVfdCBpOworKyAgICB1bnNpZ25lZCBpOworICAgICBjb25zdCBjaGFyICpsYXN0X3AgPSBOVUxMOworIAorICAgICBmb3IgKGkgPSAwOzsgaSsrKQorQEAgLTE1NiwxMyArMTU2LDEzIEBAIGRvaXQgKHZvaWQpCisgCWlmIChwID09IGxhc3RfcCkKKyAJICBicmVhazsKKyAJaWYgKGRlYnVnKQorLQkgIHByaW50ZiAoInB1bnljb2RlICVsZDogJXNcbiIsIGksIHApOworKwkgIHByaW50ZiAoInB1bnljb2RlICV1OiAlc1xuIiwgaSwgcCk7CisgCWxhc3RfcCA9IHA7CisgICAgICAgfQorICAgfQorIAorICAgeworLSAgICBzaXplX3QgaTsKKysgICAgdW5zaWduZWQgaTsKKyAgICAgY29uc3QgY2hhciAqbGFzdF9wID0gTlVMTDsKKyAKKyAgICAgZm9yIChpID0gMDs7IGkrKykKK0BAIC0xODMsMTMgKzE4MywxMyBAQCBkb2l0ICh2b2lkKQorIAkgICAgYnJlYWs7CisgCSAgfQorIAlpZiAoZGVidWcpCistCSAgcHJpbnRmICgic3RyaW5ncHJlcCAlbGQ6ICVzXG4iLCBpLCBwKTsKKysJICBwcmludGYgKCJzdHJpbmdwcmVwICV1OiAlc1xuIiwgaSwgcCk7CisgCWxhc3RfcCA9IHA7CisgICAgICAgfQorICAgfQorIAorICAgeworLSAgICBzaXplX3QgaTsKKysgICAgdW5zaWduZWQgaTsKKyAgICAgY29uc3QgY2hhciAqbGFzdF9wID0gTlVMTDsKKyAKKyAgICAgZm9yIChpID0gMDs7IGkrKykKK0BAIC0xOTgsNyArMTk4LDcgQEAgZG9pdCAodm9pZCkKKyAJaWYgKHAgPT0gbGFzdF9wKQorIAkgIGJyZWFrOworIAlpZiAoZGVidWcpCistCSAgcHJpbnRmICgidGxkICVsZDogJXNcbiIsIGksIHApOworKwkgIHByaW50ZiAoInRsZCAldTogJXNcbiIsIGksIHApOworIAlsYXN0X3AgPSBwOworICAgICAgIH0KKyAgIH0KK2RpZmYgLS1naXQgYS90ZXN0cy90c3Rfc3RyaW5ncHJlcC5jIGIvdGVzdHMvdHN0X3N0cmluZ3ByZXAuYworaW5kZXggMTQ5Y2U2Zi4uN2M5YWIwNiAxMDA2NDQKKy0tLSBhL3Rlc3RzL3RzdF9zdHJpbmdwcmVwLmMKKysrKyBiL3Rlc3RzL3RzdF9zdHJpbmdwcmVwLmMKK0BAIC0yMDUsNyArMjA1LDcgQEAgZG9pdCAodm9pZCkKKyB7CisgICBjaGFyICpwOworICAgaW50IHJjOworLSAgc2l6ZV90IGk7CisrICB1bnNpZ25lZCBpOworIAorICAgaWYgKCFzdHJpbmdwcmVwX2NoZWNrX3ZlcnNpb24gKFNUUklOR1BSRVBfVkVSU0lPTikpCisgICAgIGZhaWwgKCJzdHJpbmdwcmVwX2NoZWNrX3ZlcnNpb24gZmFpbGVkIChoZWFkZXIgJXMgcnVudGltZSAlcylcbiIsCitAQCAtMjI0LDcgKzIyNCw3IEBAIGRvaXQgKHZvaWQpCisgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mIChzdHJwcmVwKSAvIHNpemVvZiAoc3RycHJlcFswXSk7IGkrKykKKyAgICAgeworICAgICAgIGlmIChkZWJ1ZykKKy0JcHJpbnRmICgiU1RSSU5HUFJFUCBlbnRyeSAlbGRcbiIsIGkpOworKwlwcmludGYgKCJTVFJJTkdQUkVQIGVudHJ5ICV1XG4iLCBpKTsKKyAKKyAgICAgICBpZiAoZGVidWcpCisgCXsKK0BAIC0yNDcsMTIgKzI0NywxMiBAQCBkb2l0ICh2b2lkKQorIAkgIGNvbnRpbnVlOworIAllbHNlIGlmIChsID09IE5VTEwpCisgCSAgeworLQkgICAgZmFpbCAoImJhZCBVVEYtOCBpbiBlbnRyeSAlbGRcbiIsIGkpOworKwkgICAgZmFpbCAoImJhZCBVVEYtOCBpbiBlbnRyeSAldVxuIiwgaSk7CisgCSAgICBjb250aW51ZTsKKyAJICB9CisgCWVsc2UgaWYgKHN0cmNtcCAoc3RycHJlcFtpXS5pbiwgeCkgIT0gMCkKKyAJICB7CistCSAgICBmYWlsICgiYmFkIFVURi04IGluIGVudHJ5ICVsZFxuIiwgaSk7CisrCSAgICBmYWlsICgiYmFkIFVURi04IGluIGVudHJ5ICV1XG4iLCBpKTsKKyAJICAgIGlmIChkZWJ1ZykKKyAJICAgICAgeworIAkJcHV0cyAoImV4cGVjdGVkOiIpOworQEAgLTI3NCw3ICsyNzQsNyBAQCBkb2l0ICh2b2lkKQorIAkJCSAgICAgICAiTmFtZXByZXAiLCBzdHJwcmVwW2ldLmZsYWdzKTsKKyAgICAgICBpZiAocmMgIT0gc3RycHJlcFtpXS5yYykKKyAJeworLQkgIGZhaWwgKCJzdHJpbmdwcmVwKCkgZW50cnkgJWxkIGZhaWxlZDogJWRcbiIsIGksIHJjKTsKKysJICBmYWlsICgic3RyaW5ncHJlcCgpIGVudHJ5ICV1IGZhaWxlZDogJWRcbiIsIGksIHJjKTsKKyAJICBpZiAoZGVidWcpCisgCSAgICBwcmludGYgKCJGQVRBTFxuIik7CisgCSAgaWYgKHJjID09IFNUUklOR1BSRVBfT0spCitAQCAtMzAyLDcgKzMwMiw3IEBAIGRvaXQgKHZvaWQpCisgCSAgaWYgKHN0cmxlbiAoc3RycHJlcFtpXS5vdXQpICE9IHN0cmxlbiAocCkgfHwKKyAJICAgICAgbWVtY21wIChzdHJwcmVwW2ldLm91dCwgcCwgc3RybGVuIChwKSkgIT0gMCkKKyAJICAgIHsKKy0JICAgICAgZmFpbCAoInN0cmluZ3ByZXAoKSBlbnRyeSAlbGQgZmFpbGVkXG4iLCBpKTsKKysJICAgICAgZmFpbCAoInN0cmluZ3ByZXAoKSBlbnRyeSAlbGQgZmFpbGVkXG4iLCAobG9uZykgaSk7CisgCSAgICAgIGlmIChkZWJ1ZykKKyAJCXByaW50ZiAoIkVSUk9SXG4iKTsKKyAJICAgIH0KK2RpZmYgLS1naXQgYS90ZXN0cy90c3RfdGxkLmMgYi90ZXN0cy90c3RfdGxkLmMKK2luZGV4IDJmOGUxMmUuLmQwMzhjNzkgMTAwNjQ0CistLS0gYS90ZXN0cy90c3RfdGxkLmMKKysrKyBiL3Rlc3RzL3RzdF90bGQuYworQEAgLTgwLDcgKzgwLDcgQEAgY29uc3QgVGxkX3RhYmxlICogbXlfdGxkX3RhYmxlc1tdID0KKyB2b2lkCisgZG9pdCAodm9pZCkKKyB7CistICBzaXplX3QgaTsKKysgIHVuc2lnbmVkIGk7CisgICBjb25zdCBUbGRfdGFibGUgKnRsZHRhYmxlOworICAgY2hhciAqb3V0OworICAgc2l6ZV90IGVycnBvczsKK0BAIC0yMDYsNyArMjA2LDcgQEAgZG9pdCAodm9pZCkKKyAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YgKHRsZCkgLyBzaXplb2YgKHRsZFswXSk7IGkrKykKKyAgICAgeworICAgICAgIGlmIChkZWJ1ZykKKy0JcHJpbnRmICgiVExEIGVudHJ5ICVsZDogJXNcbiIsIGksIHRsZFtpXS5uYW1lKTsKKysJcHJpbnRmICgiVExEIGVudHJ5ICV1OiAlc1xuIiwgaSwgdGxkW2ldLm5hbWUpOworIAorICAgICAgIGlmIChkZWJ1ZykKKyAJeworQEAgLTIxNyw3ICsyMTcsNyBAQCBkb2l0ICh2b2lkKQorICAgICAgIHRsZHRhYmxlID0gdGxkX2RlZmF1bHRfdGFibGUgKHRsZFtpXS50bGQsIE5VTEwpOworICAgICAgIGlmICh0bGR0YWJsZSA9PSBOVUxMKQorIAl7CistCSAgZmFpbCAoIlRMRCBlbnRyeSAlbGQgdGxkX2dldF90YWJsZSAoJXMpXG4iLCBpLCB0bGRbaV0udGxkKTsKKysJICBmYWlsICgiVExEIGVudHJ5ICV1IHRsZF9nZXRfdGFibGUgKCVzKVxuIiwgaSwgdGxkW2ldLnRsZCk7CisgCSAgaWYgKGRlYnVnKQorIAkgICAgcHJpbnRmICgiRkFUQUxcbiIpOworIAkgIGNvbnRpbnVlOworQEAgLTIyNiw3ICsyMjYsNyBAQCBkb2l0ICh2b2lkKQorICAgICAgIHJjID0gdGxkX2NoZWNrXzR0ICh0bGRbaV0uaW4sIHRsZFtpXS5pbmxlbiwgJmVycnBvcywgdGxkdGFibGUpOworICAgICAgIGlmIChyYyAhPSB0bGRbaV0ucmMpCisgCXsKKy0JICBmYWlsICgiVExEIGVudHJ5ICVsZCBmYWlsZWQ6ICVkXG4iLCBpLCByYyk7CisrCSAgZmFpbCAoIlRMRCBlbnRyeSAldSBmYWlsZWQ6ICVkXG4iLCBpLCByYyk7CisgCSAgaWYgKGRlYnVnKQorIAkgICAgcHJpbnRmICgiRkFUQUxcbiIpOworIAkgIGNvbnRpbnVlOworQEAgLTIzNyw3ICsyMzcsNyBAQCBkb2l0ICh2b2lkKQorIAorICAgICAgIGlmIChyYyAhPSB0bGRbaV0ucmMpCisgCXsKKy0JICBmYWlsICgiVExEIGVudHJ5ICVsZCBmYWlsZWRcbiIsIGkpOworKwkgIGZhaWwgKCJUTEQgZW50cnkgJXUgZmFpbGVkXG4iLCBpKTsKKyAJICBpZiAoZGVidWcpCisgCSAgICBwcmludGYgKCJFUlJPUlxuIik7CisgCX0KK0BAIC0yNDUsMTIgKzI0NSwxMiBAQCBkb2l0ICh2b2lkKQorIAl7CisgCSAgaWYgKGRlYnVnKQorIAkgICAgcHJpbnRmICgicmV0dXJuZWQgZXJycG9zICVsZCBleHBlY3RlZCBlcnJwb3MgJWxkXG4iLAorLQkJICAgIGVycnBvcywgdGxkW2ldLmVycnBvcyk7CisrCQkgICAgKGxvbmcpIGVycnBvcywgKGxvbmcpIHRsZFtpXS5lcnJwb3MpOworIAorIAkgIGlmICh0bGRbaV0uZXJycG9zICE9IGVycnBvcykKKyAJICAgIHsKKy0JICAgICAgZmFpbCAoIlRMRCBlbnRyeSAlbGQgZmFpbGVkIGJlY2F1c2UgZXJycG9zICVsZCAhPSAlbGRcbiIsIGksCistCQkgICAgdGxkW2ldLmVycnBvcywgZXJycG9zKTsKKysJICAgICAgZmFpbCAoIlRMRCBlbnRyeSAldSBmYWlsZWQgYmVjYXVzZSBlcnJwb3MgJWxkICE9ICVsZFxuIiwgaSwKKysJCSAgICAobG9uZykgdGxkW2ldLmVycnBvcywgKGxvbmcpIGVycnBvcyk7CisgCSAgICAgIGlmIChkZWJ1ZykKKyAJCXByaW50ZiAoIkVSUk9SXG4iKTsKKyAJICAgIH0KK0BAIC0yNjIsMTIgKzI2MiwxMiBAQCBkb2l0ICh2b2lkKQorIAlyYyA9IHRsZF9jaGVja184eiAodGxkW2ldLmV4YW1wbGUsICZlcnJwb3MsIE5VTEwpOworIAlpZiAocmMgIT0gdGxkW2ldLnJjKQorIAkgIHsKKy0JICAgIGZhaWwgKCJUTEQgZW50cnkgJWxkIGZhaWxlZFxuIiwgaSk7CisrCSAgICBmYWlsICgiVExEIGVudHJ5ICV1IGZhaWxlZFxuIiwgaSk7CisgCSAgICBpZiAoZGVidWcpCisgCSAgICAgIHByaW50ZiAoIkVSUk9SXG4iKTsKKyAJICB9CisgCWlmIChkZWJ1ZykKKy0JICBwcmludGYgKCJUTEQgZW50cnkgJWxkIHRsZF9jaGVja184eiAoJXMpXG4iLCBpLCB0bGRbaV0uZXhhbXBsZSk7CisrCSAgcHJpbnRmICgiVExEIGVudHJ5ICV1IHRsZF9jaGVja184eiAoJXMpXG4iLCBpLCB0bGRbaV0uZXhhbXBsZSk7CisgICAgICAgfQorICAgICB9CisgfQorZGlmZiAtLWdpdCBhL3Rlc3RzL3V0aWxzLmMgYi90ZXN0cy91dGlscy5jCitpbmRleCA3MTdlZTAxLi41NTc3ZGMzIDEwMDY0NAorLS0tIGEvdGVzdHMvdXRpbHMuYworKysrIGIvdGVzdHMvdXRpbHMuYworQEAgLTQ5LDcgKzQ5LDcgQEAgZXNjYXBlcHJpbnQgKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbikKKyB7CisgICBzaXplX3QgaTsKKyAKKy0gIHByaW50ZiAoIiAobGVuZ3RoICVsZCBieXRlcyk6XG5cdCIsIGxlbik7CisrICBwcmludGYgKCIgKGxlbmd0aCAlbGQgYnl0ZXMpOlxuXHQiLCAobG9uZykgbGVuKTsKKyAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICAgeworICAgICAgIGlmICgoKHN0cltpXSAmIDB4RkYpID49ICdBJyAmJiAoc3RyW2ldICYgMHhGRikgPD0gJ1onKSB8fAorQEAgLTU4LDcgKzU4LDcgQEAgZXNjYXBlcHJpbnQgKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbikKKyAJICB8fCAoc3RyW2ldICYgMHhGRikgPT0gJyAnIHx8IChzdHJbaV0gJiAweEZGKSA9PSAnLicpCisgCXByaW50ZiAoIiVjIiwgKHN0cltpXSAmIDB4RkYpKTsKKyAgICAgICBlbHNlCistCXByaW50ZiAoIlxceCUwMlgiLCAoc3RyW2ldICYgMHhGRikpOworKwlwcmludGYgKCJcXHglMDJYIiwgKHVuc2lnbmVkKSAoc3RyW2ldICYgMHhGRikpOworICAgICAgIGlmICgoaSArIDEpICUgMTYgPT0gMCAmJiAoaSArIDEpIDwgbGVuKQorIAlwcmludGYgKCInXG5cdCciKTsKKyAgICAgfQorQEAgLTczLDcgKzczLDcgQEAgaGV4cHJpbnQgKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbikKKyAgIHByaW50ZiAoIlx0OzsgIik7CisgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgIHsKKy0gICAgICBwcmludGYgKCIlMDJ4ICIsIChzdHJbaV0gJiAweEZGKSk7CisrICAgICAgcHJpbnRmICgiJTAyeCAiLCAodW5zaWduZWQpIChzdHJbaV0gJiAweEZGKSk7CisgICAgICAgaWYgKChpICsgMSkgJSA4ID09IDApCisgCXByaW50ZiAoIiAiKTsKKyAgICAgICBpZiAoKGkgKyAxKSAlIDE2ID09IDAgJiYgaSArIDEgPCBsZW4pCiAtLSAKLTIuOC4xCisxLjkuMQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vMDAwMS1pZG4tZm9ybWF0LXNlY3VyaXR5LXdhcm5pbmdzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuLzAwMDEtaWRuLWZvcm1hdC1zZWN1cml0eS13YXJuaW5ncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWRjN2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuLzAwMDEtaWRuLWZvcm1hdC1zZWN1cml0eS13YXJuaW5ncy5wYXRjaApAQCAtMCwwICsxLDE4MSBAQAorRnJvbSA4MmY5OGRjYmM0MjliYmU4OWE5ODM3YzUzM2NiY2JjMDJlNzdjNzkwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuZHI9QzM9QTk9MjBEcmFzemlrPz0gPGFkcmFzemlrQHR5Y29pbnQuY29tPgorRGF0ZTogVHVlLCAyOCBKdW4gMjAxNiAxMjo0MzozMSArMDEwMAorU3ViamVjdDogW1BBVENIXSBpZG46IGZpeCBwcmludGYoKSBmb3JtYXQgc2VjdXJpdHkgd2FybmluZ3MKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworfCAuLi8uLi9saWJpZG4tMS4zMi9zcmMvaWRuLmM6IEluIGZ1bmN0aW9uICdtYWluJzoKK3wgLi4vLi4vbGliaWRuLTEuMzIvc3JjL2lkbi5jOjE3Mjo3OiBlcnJvcjogZm9ybWF0IG5vdCBhIHN0cmluZyBsaXRlcmFsIGFuZCBubyBmb3JtYXQgYXJndW1lbnRzIFstV2Vycm9yPWZvcm1hdC1zZWN1cml0eV0KK3wgICAgICAgIGVycm9yICgwLCAwLCBfKCJvbmx5IG9uZSBvZiAtcywgLWUsIC1kLCAtYSwgLXUgb3IgLW4gY2FuIGJlIHNwZWNpZmllZCIpKTsKK3wgICAgICAgIF5+fn5+Cit8IC4uLy4uL2xpYmlkbi0xLjMyL3NyYy9pZG4uYzoxODc6NTogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCit8ICAgICAgZnByaW50ZiAoc3RkZXJyLCBfKCJUeXBlIGVhY2ggaW5wdXQgc3RyaW5nIG9uIGEgbGluZSBieSBpdHNlbGYsICIKK3wgICAgICBefn5+fn5+Cit8IC4uLy4uL2xpYmlkbi0xLjMyL3NyYy9pZG4uYzoyMDI6NDogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCit8ICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCBlcnJubywgXygiaW5wdXQgZXJyb3IiKSk7Cit8ICAgICBefn5+fgorfCAuLi8uLi9saWJpZG4tMS4zMi9zcmMvaWRuLmM6MjIwOjg6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQorfCAgICAgICAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVVRGLTggdG8gVUNTLTQiKSk7Cit8ICAgICAgICAgXgorfCAuLi8uLi9saWJpZG4tMS4zMi9zcmMvaWRuLmM6MjQ1Ojg6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQorfCAgICAgICAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVVRGLTggdG8gVUNTLTQiKSk7Cit8ICAgICAgICAgXgorfCAuLi8uLi9saWJpZG4tMS4zMi9zcmMvaWRuLmM6MjgxOjY6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQorfCAgICAgICBfKCJjb3VsZCBub3QgY29udmVydCBmcm9tIFVURi04IHRvIFVDUy00IikpOworfCAgICAgICBeCit8IC4uLy4uL2xpYmlkbi0xLjMyL3NyYy9pZG4uYzozNDA6NjogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCit8ICAgICAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVUNTLTQgdG8gVVRGLTgiKSk7Cit8ICAgICAgIF4KK3wgLi4vLi4vbGliaWRuLTEuMzIvc3JjL2lkbi5jOjM2NDo2OiBlcnJvcjogZm9ybWF0IG5vdCBhIHN0cmluZyBsaXRlcmFsIGFuZCBubyBmb3JtYXQgYXJndW1lbnRzIFstV2Vycm9yPWZvcm1hdC1zZWN1cml0eV0KK3wgICAgICAgXygiY291bGQgbm90IGNvbnZlcnQgZnJvbSBVQ1MtNCB0byBVVEYtOCIpKTsKK3wgICAgICAgXgorfCAuLi8uLi9saWJpZG4tMS4zMi9zcmMvaWRuLmM6NDQyOjg6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQorfCAgICAgICAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVUNTLTQgdG8gVVRGLTgiKSk7Cit8ICAgICAgICAgXgorfCAuLi8uLi9saWJpZG4tMS4zMi9zcmMvaWRuLmM6NDk4OjY6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQorfCAgICAgICBfKCJjb3VsZCBub3QgY29udmVydCBmcm9tIFVURi04IHRvIFVDUy00IikpOworfCAgICAgICBeCit8IC4uLy4uL2xpYmlkbi0xLjMyL3NyYy9pZG4uYzo1Mjc6NTogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCit8ICAgICAgXygiY291bGQgbm90IGNvbnZlcnQgZnJvbSBVVEYtOCB0byBVQ1MtNCIpKTsKK3wgICAgICBeCit8IC4uLy4uL2xpYmlkbi0xLjMyL3NyYy9pZG4uYzo1NDA6NjogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCit8ICAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIF8oImNvdWxkIG5vdCBkbyBORktDIG5vcm1hbGl6YXRpb24iKSk7Cit8ICAgICAgIF5+fn5+Cit8IC4uLy4uL2xpYmlkbi0xLjMyL3NyYy9pZG4uYzo1NTE6NTogZXJyb3I6IGZvcm1hdCBub3QgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgbm8gZm9ybWF0IGFyZ3VtZW50cyBbLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHldCit8ICAgICAgXygiY291bGQgbm90IGNvbnZlcnQgZnJvbSBVVEYtOCB0byBVQ1MtNCIpKTsKK3wgICAgICBeCisKK1NpZ25lZC1vZmYtYnk6IEFuZHLDqSBEcmFzemlrIDxhZHJhc3ppa0B0eWNvaW50LmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBzcmMvaWRuLmMgfCAyNyArKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvaWRuLmMgYi9zcmMvaWRuLmMKK2luZGV4IGJlMWM3ZDEuLjY4ZTQyOTEgMTAwNjQ0CistLS0gYS9zcmMvaWRuLmMKKysrKyBiL3NyYy9pZG4uYworQEAgLTE3MCw3ICsxNzAsNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgICAgIChhcmdzX2luZm8uaWRuYV90b191bmljb2RlX2dpdmVuID8gMSA6IDApICsKKyAgICAgICAoYXJnc19pbmZvLm5ma2NfZ2l2ZW4gPyAxIDogMCkgIT0gMSkKKyAgICAgeworLSAgICAgIGVycm9yICgwLCAwLCBfKCJvbmx5IG9uZSBvZiAtcywgLWUsIC1kLCAtYSwgLXUgb3IgLW4gY2FuIGJlIHNwZWNpZmllZCIpKTsKKysgICAgICBlcnJvciAoMCwgMCwgIiVzIiwgXygib25seSBvbmUgb2YgLXMsIC1lLCAtZCwgLWEsIC11IG9yIC1uIGNhbiBiZSBzcGVjaWZpZWQiKSk7CisgICAgICAgdXNhZ2UgKEVYSVRfRkFJTFVSRSk7CisgICAgIH0KKyAKK0BAIC0xODUsNyArMTg1LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgIGlmICghYXJnc19pbmZvLnF1aWV0X2dpdmVuCisgICAgICAgJiYgYXJnc19pbmZvLmlucHV0c19udW0gPT0gMAorICAgICAgICYmIGlzYXR0eSAoZmlsZW5vIChzdGRpbikpKQorLSAgICBmcHJpbnRmIChzdGRlcnIsIF8oIlR5cGUgZWFjaCBpbnB1dCBzdHJpbmcgb24gYSBsaW5lIGJ5IGl0c2VsZiwgIgorKyAgICBmcHJpbnRmIChzdGRlcnIsICIlcyIsIF8oIlR5cGUgZWFjaCBpbnB1dCBzdHJpbmcgb24gYSBsaW5lIGJ5IGl0c2VsZiwgIgorIAkJICAgICAgICJ0ZXJtaW5hdGVkIGJ5IGEgbmV3bGluZSBjaGFyYWN0ZXIuXG4iKSk7CisgCisgICBkbworQEAgLTE5Nyw3ICsxOTcsNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkgIGlmIChmZW9mIChzdGRpbikpCisgCSAgICBicmVhazsKKyAKKy0JICBlcnJvciAoRVhJVF9GQUlMVVJFLCBlcnJubywgXygiaW5wdXQgZXJyb3IiKSk7CisrCSAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgZXJybm8sICIlcyIsIF8oImlucHV0IGVycm9yIikpOworIAl9CisgCisgICAgICAgaWYgKHN0cmxlbiAobGluZSkgPiAwKQorQEAgLTIxNSw3ICsyMTUsNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkgIGlmICghcSkKKyAJICAgIHsKKyAJICAgICAgZnJlZSAocCk7CistCSAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCisrCSAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsICIlcyIsCisgCQkgICAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVVRGLTggdG8gVUNTLTQiKSk7CisgCSAgICB9CisgCitAQCAtMjQwLDcgKzI0MCw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCSAgaWYgKCFxKQorIAkgICAgeworIAkgICAgICBmcmVlIChyKTsKKy0JICAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwKKysJICAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgIiVzIiwKKyAJCSAgICAgXygiY291bGQgbm90IGNvbnZlcnQgZnJvbSBVVEYtOCB0byBVQ1MtNCIpKTsKKyAJICAgIH0KKyAKK0BAIC0yNzcsNyArMjc3LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJICBxID0gc3RyaW5ncHJlcF91dGY4X3RvX3VjczQgKHAsIC0xLCAmbGVuKTsKKyAJICBmcmVlIChwKTsKKyAJICBpZiAoIXEpCistCSAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorKwkgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgIiVzIiwKKyAJCSAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVVRGLTggdG8gVUNTLTQiKSk7CisgCisgCSAgaWYgKGFyZ3NfaW5mby5kZWJ1Z19naXZlbikKK0BAIC0zMzYsNyArMzM2LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJICByID0gc3RyaW5ncHJlcF91Y3M0X3RvX3V0ZjggKHEsIC0xLCBOVUxMLCBOVUxMKTsKKyAJICBmcmVlIChxKTsKKyAJICBpZiAoIXIpCistCSAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorKwkgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgIiVzIiwKKyAJCSAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVUNTLTQgdG8gVVRGLTgiKSk7CisgCisgCSAgcCA9IHN0cmluZ3ByZXBfdXRmOF90b19sb2NhbGUgKHIpOworQEAgLTM2MCw3ICszNjAsNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkgIHEgPSBzdHJpbmdwcmVwX3V0ZjhfdG9fdWNzNCAocCwgLTEsIE5VTEwpOworIAkgIGZyZWUgKHApOworIAkgIGlmICghcSkKKy0JICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCisrCSAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCAiJXMiLAorIAkJICAgXygiY291bGQgbm90IGNvbnZlcnQgZnJvbSBVQ1MtNCB0byBVVEYtOCIpKTsKKyAKKyAJICBpZiAoYXJnc19pbmZvLmRlYnVnX2dpdmVuKQorQEAgLTQzOCw3ICs0MzgsNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkgIGlmICghcSkKKyAJICAgIHsKKyAJICAgICAgZnJlZSAocCk7CistCSAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCisrCSAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsICIlcyIsCisgCQkgICAgIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVUNTLTQgdG8gVVRGLTgiKSk7CisgCSAgICB9CisgCitAQCAtNDk0LDcgKzQ5NCw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCSAgciA9IHN0cmluZ3ByZXBfdWNzNF90b191dGY4IChxLCAtMSwgTlVMTCwgTlVMTCk7CisgCSAgZnJlZSAocSk7CisgCSAgaWYgKCFyKQorLQkgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwKKysJICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsICIlcyIsCisgCQkgICBfKCJjb3VsZCBub3QgY29udmVydCBmcm9tIFVURi04IHRvIFVDUy00IikpOworIAorIAkgIHAgPSBzdHJpbmdwcmVwX3V0ZjhfdG9fbG9jYWxlIChyKTsKK0BAIC01MjMsNyArNTIzLDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJICAgICAgaWYgKCFxKQorIAkJeworIAkJICBmcmVlIChwKTsKKy0JCSAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwKKysJCSAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgIiVzIiwKKyAJCQkgXygiY291bGQgbm90IGNvbnZlcnQgZnJvbSBVVEYtOCB0byBVQ1MtNCIpKTsKKyAJCX0KKyAKK0BAIC01MzcsNyArNTM3LDggQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJICByID0gc3RyaW5ncHJlcF91dGY4X25ma2Nfbm9ybWFsaXplIChwLCAtMSk7CisgCSAgZnJlZSAocCk7CisgCSAgaWYgKCFyKQorLQkgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgXygiY291bGQgbm90IGRvIE5GS0Mgbm9ybWFsaXphdGlvbiIpKTsKKysJICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsICIlcyIsCisrCQkgICBfKCJjb3VsZCBub3QgZG8gTkZLQyBub3JtYWxpemF0aW9uIikpOworIAorIAkgIGlmIChhcmdzX2luZm8uZGVidWdfZ2l2ZW4pCisgCSAgICB7CitAQCAtNTQ3LDcgKzU0OCw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCSAgICAgIGlmICghcSkKKyAJCXsKKyAJCSAgZnJlZSAocik7CistCQkgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCisrCQkgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsICIlcyIsCisgCQkJIF8oImNvdWxkIG5vdCBjb252ZXJ0IGZyb20gVVRGLTggdG8gVUNTLTQiKSk7CisgCQl9CisgCistLSAKKzIuOC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9nY2M3LWNvbXBhdGliaWxpdHkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vZ2NjNy1jb21wYXRpYmlsaXR5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NmE2ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vZ2NjNy1jb21wYXRpYmlsaXR5LnBhdGNoCkBAIC0wLDAgKzEsMzM0IEBACitGcm9tIDIzMDkzMGIzYmMzZTQzMWI4MTllYjQ1NDIwY2I0MjQ3NWQ4M2NhOTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P3V0Zjg/cT9UaW09MjBSPUMzPUJDaHNlbj89IDx0aW0ucnVlaHNlbkBnbXguZGU+CitEYXRlOiBXZWQsIDEgRmViIDIwMTcgMTA6NDQ6MzYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gVXBkYXRlIGludHByb3BzLmggZm9yIGdjYy03IGNvbXBhdGliaWxpdHkKKworLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCisgZ2wvaW50cHJvcHMuaCAgICAgICAgICB8IDY1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisgbGliL2dsdGVzdHMvaW50cHJvcHMuaCB8IDY1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA3OCBpbnNlcnRpb25zKCspLCA1MiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dsL2ludHByb3BzLmggYi9nbC9pbnRwcm9wcy5oCitpbmRleCBlMWZjZTVjLi5lYjA2YjY5IDEwMDY0NAorLS0tIGEvZ2wvaW50cHJvcHMuaAorKysrIGIvZ2wvaW50cHJvcHMuaAorQEAgLTEsMTggKzEsMTggQEAKKyAvKiBpbnRwcm9wcy5oIC0tIHByb3BlcnRpZXMgb2YgaW50ZWdlciB0eXBlcworIAorLSAgIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisgLyogV3JpdHRlbiBieSBQYXVsIEVnZ2VydC4gICovCitAQCAtNDcsMTIgKzQ3LDE2IEBACisgCisgLyogTWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMgZm9yIGludGVnZXIgdHlwZXMgYW5kIGV4cHJlc3Npb25zLiAgKi8KKyAKKysvKiBUaGUgd2lkdGggaW4gYml0cyBvZiB0aGUgaW50ZWdlciB0eXBlIG9yIGV4cHJlc3Npb24gVC4KKysgICBQYWRkaW5nIGJpdHMgYXJlIG5vdCBzdXBwb3J0ZWQ7IHRoaXMgaXMgY2hlY2tlZCBhdCBjb21waWxlLXRpbWUgYmVsb3cuICAqLworKyNkZWZpbmUgVFlQRV9XSURUSCh0KSAoc2l6ZW9mICh0KSAqIENIQVJfQklUKQorKworIC8qIFRoZSBtYXhpbXVtIGFuZCBtaW5pbXVtIHZhbHVlcyBmb3IgdGhlIGludGVnZXIgdHlwZSBULiAgKi8KKyAjZGVmaW5lIFRZUEVfTUlOSU1VTSh0KSAoKHQpIH4gVFlQRV9NQVhJTVVNICh0KSkKKyAjZGVmaW5lIFRZUEVfTUFYSU1VTSh0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAoKHQpICghIFRZUEVfU0lHTkVEICh0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgPyAodCkgLTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIDogKCgoKHQpIDEgPDwgKHNpemVvZiAodCkgKiBDSEFSX0JJVCAtIDIpKSAtIDEpICogMiArIDEpKSkKKysgICAgICAgIDogKCgoKHQpIDEgPDwgKFRZUEVfV0lEVEggKHQpIC0gMikpIC0gMSkgKiAyICsgMSkpKQorIAorIC8qIFRoZSBtYXhpbXVtIGFuZCBtaW5pbXVtIHZhbHVlcyBmb3IgdGhlIHR5cGUgb2YgdGhlIGV4cHJlc3Npb24gRSwKKyAgICBhZnRlciBpbnRlZ2VyIHByb21vdGlvbi4gIEUgc2hvdWxkIG5vdCBoYXZlIHNpZGUgZWZmZWN0cy4gICovCitAQCAtNjUsNyArNjksMTMgQEAKKyAgICA/IF9HTF9TSUdORURfSU5UX01BWElNVU0gKGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgOiBfR0xfSU5UX05FR0FURV9DT05WRVJUIChlLCAxKSkKKyAjZGVmaW5lIF9HTF9TSUdORURfSU5UX01BWElNVU0oZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAoKChfR0xfSU5UX0NPTlZFUlQgKGUsIDEpIDw8IChzaXplb2YgKChlKSArIDApICogQ0hBUl9CSVQgLSAyKSkgLSAxKSAqIDIgKyAxKQorKyAgKCgoX0dMX0lOVF9DT05WRVJUIChlLCAxKSA8PCAoVFlQRV9XSURUSCAoKGUpICsgMCkgLSAyKSkgLSAxKSAqIDIgKyAxKQorKworKy8qIFdvcmsgYXJvdW5kIE9wZW5WTVMgaW5jb21wYXRpYmlsaXR5IHdpdGggQzk5LiAgKi8KKysjaWYgIWRlZmluZWQgTExPTkdfTUFYICYmIGRlZmluZWQgX19JTlQ2NF9NQVgKKysjIGRlZmluZSBMTE9OR19NQVggX19JTlQ2NF9NQVgKKysjIGRlZmluZSBMTE9OR19NSU4gX19JTlQ2NF9NSU4KKysjZW5kaWYKKyAKKyAvKiBUaGlzIGluY2x1ZGUgZmlsZSBhc3N1bWVzIHRoYXQgc2lnbmVkIHR5cGVzIGFyZSB0d28ncyBjb21wbGVtZW50IHdpdGhvdXQKKyAgICBwYWRkaW5nIGJpdHM7IHRoZSBhYm92ZSBtYWNyb3MgaGF2ZSB1bmRlZmluZWQgYmVoYXZpb3Igb3RoZXJ3aXNlLgorQEAgLTg0LDEwICs5NCwxNSBAQCB2ZXJpZnkgKFRZUEVfTUFYSU1VTSAobG9uZyBpbnQpID09IExPTkdfTUFYKTsKKyB2ZXJpZnkgKFRZUEVfTUlOSU1VTSAobG9uZyBsb25nIGludCkgPT0gTExPTkdfTUlOKTsKKyB2ZXJpZnkgKFRZUEVfTUFYSU1VTSAobG9uZyBsb25nIGludCkgPT0gTExPTkdfTUFYKTsKKyAjZW5kaWYKKysvKiBTaW1pbGFybHksIHNhbml0eS1jaGVjayBvbmUgSVNPL0lFQyBUUyAxODY2MS0xOjIwMTQgbWFjcm8gaWYgZGVmaW5lZC4gICovCisrI2lmZGVmIFVJTlRfV0lEVEgKKyt2ZXJpZnkgKFRZUEVfV0lEVEggKHVuc2lnbmVkIGludCkgPT0gVUlOVF9XSURUSCk7CisrI2VuZGlmCisgCisgLyogRG9lcyB0aGUgX190eXBlb2ZfXyBrZXl3b3JkIHdvcms/ICBUaGlzIGNvdWxkIGJlIGRvbmUgYnkKKyAgICAnY29uZmlndXJlJywgYnV0IGZvciBub3cgaXQncyBlYXNpZXIgdG8gZG8gaXQgYnkgaGFuZC4gICovCistI2lmICgyIDw9IF9fR05VQ19fIHx8IGRlZmluZWQgX19JQk1fX1RZUEVPRl9fIFwKKysjaWYgKDIgPD0gX19HTlVDX18gXAorKyAgICAgfHwgKDEyMTAgPD0gX19JQk1DX18gJiYgZGVmaW5lZCBfX0lCTV9fVFlQRU9GX18pIFwKKyAgICAgIHx8ICgweDUxMTAgPD0gX19TVU5QUk9fQyAmJiAhX19TVERDX18pKQorICMgZGVmaW5lIF9HTF9IQVZFX19fVFlQRU9GX18gMQorICNlbHNlCitAQCAtMTE2LDggKzEzMSw3IEBAIHZlcmlmeSAoVFlQRV9NQVhJTVVNIChsb25nIGxvbmcgaW50KSA9PSBMTE9OR19NQVgpOworICAgIHNpZ25lZCwgdGhpcyBtYWNybyBtYXkgb3ZlcmVzdGltYXRlIHRoZSB0cnVlIGJvdW5kIGJ5IG9uZSBieXRlIHdoZW4KKyAgICBhcHBsaWVkIHRvIHVuc2lnbmVkIHR5cGVzIG9mIHNpemUgMiwgNCwgMTYsIC4uLiBieXRlcy4gICovCisgI2RlZmluZSBJTlRfU1RSTEVOX0JPVU5EKHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gIChJTlRfQklUU19TVFJMRU5fQk9VTkQgKHNpemVvZiAodCkgKiBDSEFSX0JJVCAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgLSBfR0xfU0lHTkVEX1RZUEVfT1JfRVhQUiAodCkpICAgICAgICBcCisrICAoSU5UX0JJVFNfU1RSTEVOX0JPVU5EIChUWVBFX1dJRFRIICh0KSAtIF9HTF9TSUdORURfVFlQRV9PUl9FWFBSICh0KSkgXAorICAgICsgX0dMX1NJR05FRF9UWVBFX09SX0VYUFIgKHQpKQorIAorIC8qIEJvdW5kIG9uIGJ1ZmZlciBzaXplIG5lZWRlZCB0byByZXByZXNlbnQgYW4gaW50ZWdlciB0eXBlIG9yIGV4cHJlc3Npb24gVCwKK0BAIC0yMjIsMjAgKzIzNiwyMyBAQCB2ZXJpZnkgKFRZUEVfTUFYSU1VTSAobG9uZyBsb25nIGludCkgPT0gTExPTkdfTUFYKTsKKyAgICA/IChhKSA8IChtaW4pID4+IChiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICA6IChtYXgpID4+IChiKSA8IChhKSkKKyAKKy0vKiBUcnVlIGlmIF9fYnVpbHRpbl9hZGRfb3ZlcmZsb3cgKEEsIEIsIFApIHdvcmtzIHdoZW4gUCBpcyBudWxsLiAgKi8KKy0jZGVmaW5lIF9HTF9IQVNfQlVJTFRJTl9PVkVSRkxPV19XSVRIX05VTEwgKDcgPD0gX19HTlVDX18pCisrLyogVHJ1ZSBpZiBfX2J1aWx0aW5fYWRkX292ZXJmbG93IChBLCBCLCBQKSB3b3JrcyB3aGVuIFAgaXMgbm9uLW51bGwuICAqLworKyNkZWZpbmUgX0dMX0hBU19CVUlMVElOX09WRVJGTE9XICg1IDw9IF9fR05VQ19fKQorKworKy8qIFRydWUgaWYgX19idWlsdGluX2FkZF9vdmVyZmxvd19wIChBLCBCLCBDKSB3b3Jrcy4gICovCisrI2RlZmluZSBfR0xfSEFTX0JVSUxUSU5fT1ZFUkZMT1dfUCAoNyA8PSBfX0dOVUNfXykKKyAKKyAvKiBUaGUgX0dMKl9PVkVSRkxPVyBtYWNyb3MgaGF2ZSB0aGUgc2FtZSByZXN0cmljdGlvbnMgYXMgdGhlCisgICAgKl9SQU5HRV9PVkVSRkxPVyBtYWNyb3MsIGV4Y2VwdCB0aGF0IHRoZXkgZG8gbm90IGFzc3VtZSB0aGF0IG9wZXJhbmRzCisgICAgKGUuZy4sIEEgYW5kIEIpIGhhdmUgdGhlIHNhbWUgdHlwZSBhcyBNSU4gYW5kIE1BWC4gIEluc3RlYWQsIHRoZXkgYXNzdW1lCisgICAgdGhhdCB0aGUgcmVzdWx0IChlLmcuLCBBICsgQikgaGFzIHRoYXQgdHlwZS4gICovCistI2lmIF9HTF9IQVNfQlVJTFRJTl9PVkVSRkxPV19XSVRIX05VTEwKKy0jIGRlZmluZSBfR0xfQUREX09WRVJGTE9XKGEsIGIsIG1pbiwgbWF4KQorLSAgIF9fYnVpbHRpbl9hZGRfb3ZlcmZsb3cgKGEsIGIsIChfX3R5cGVvZl9fICgoYSkgKyAoYikpICopIDApCistIyBkZWZpbmUgX0dMX1NVQlRSQUNUX09WRVJGTE9XKGEsIGIsIG1pbiwgbWF4KQorLSAgIF9fYnVpbHRpbl9zdWJfb3ZlcmZsb3cgKGEsIGIsIChfX3R5cGVvZl9fICgoYSkgLSAoYikpICopIDApCistIyBkZWZpbmUgX0dMX01VTFRJUExZX09WRVJGTE9XKGEsIGIsIG1pbiwgbWF4KQorLSAgIF9fYnVpbHRpbl9tdWxfb3ZlcmZsb3cgKGEsIGIsIChfX3R5cGVvZl9fICgoYSkgKiAoYikpICopIDApCisrI2lmIF9HTF9IQVNfQlVJTFRJTl9PVkVSRkxPV19QCisrIyBkZWZpbmUgX0dMX0FERF9PVkVSRkxPVyhhLCBiLCBtaW4sIG1heCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgIF9fYnVpbHRpbl9hZGRfb3ZlcmZsb3dfcCAoYSwgYiwgKF9fdHlwZW9mX18gKChhKSArIChiKSkpIDApCisrIyBkZWZpbmUgX0dMX1NVQlRSQUNUX09WRVJGTE9XKGEsIGIsIG1pbiwgbWF4KSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgIF9fYnVpbHRpbl9zdWJfb3ZlcmZsb3dfcCAoYSwgYiwgKF9fdHlwZW9mX18gKChhKSAtIChiKSkpIDApCisrIyBkZWZpbmUgX0dMX01VTFRJUExZX09WRVJGTE9XKGEsIGIsIG1pbiwgbWF4KSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgIF9fYnVpbHRpbl9tdWxfb3ZlcmZsb3dfcCAoYSwgYiwgKF9fdHlwZW9mX18gKChhKSAqIChiKSkpIDApCisgI2Vsc2UKKyAjIGRlZmluZSBfR0xfQUREX09WRVJGTE9XKGEsIGIsIG1pbiwgbWF4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgobWluKSA8IDAgPyBJTlRfQUREX1JBTkdFX09WRVJGTE9XIChhLCBiLCBtaW4sIG1heCkgICAgICAgICAgICAgICAgICBcCitAQCAtMzE1LDcgKzMzMiw3IEBAIHZlcmlmeSAoVFlQRV9NQVhJTVVNIChsb25nIGxvbmcgaW50KSA9PSBMTE9OR19NQVgpOworICAgX0dMX0JJTkFSWV9PUF9PVkVSRkxPVyAoYSwgYiwgX0dMX0FERF9PVkVSRkxPVykKKyAjZGVmaW5lIElOVF9TVUJUUkFDVF9PVkVSRkxPVyhhLCBiKSBcCisgICBfR0xfQklOQVJZX09QX09WRVJGTE9XIChhLCBiLCBfR0xfU1VCVFJBQ1RfT1ZFUkZMT1cpCistI2lmIF9HTF9IQVNfQlVJTFRJTl9PVkVSRkxPV19XSVRIX05VTEwKKysjaWYgX0dMX0hBU19CVUlMVElOX09WRVJGTE9XX1AKKyAjIGRlZmluZSBJTlRfTkVHQVRFX09WRVJGTE9XKGEpIElOVF9TVUJUUkFDVF9PVkVSRkxPVyAoMCwgYSkKKyAjZWxzZQorICMgZGVmaW5lIElOVF9ORUdBVEVfT1ZFUkZMT1coYSkgXAorQEAgLTM0OSwxMCArMzY2LDYgQEAgdmVyaWZ5IChUWVBFX01BWElNVU0gKGxvbmcgbG9uZyBpbnQpID09IExMT05HX01BWCk7CisgI2RlZmluZSBJTlRfTVVMVElQTFlfV1JBUFYoYSwgYiwgcikgXAorICAgX0dMX0lOVF9PUF9XUkFQViAoYSwgYiwgciwgKiwgX19idWlsdGluX211bF9vdmVyZmxvdywgSU5UX01VTFRJUExZX09WRVJGTE9XKQorIAorLSNpZm5kZWYgX19oYXNfYnVpbHRpbgorLSMgZGVmaW5lIF9faGFzX2J1aWx0aW4oeCkgMAorLSNlbmRpZgorLQorIC8qIE5vbnplcm8gaWYgdGhpcyBjb21waWxlciBoYXMgR0NDIGJ1ZyA2ODE5MyBvciBDbGFuZyBidWcgMjUzOTAuICBTZWU6CisgICAgaHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NjgxOTMKKyAgICBodHRwczovL2xsdm0ub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTI1MzkwCitAQCAtMzY5LDcgKzM4Miw3IEBAIHZlcmlmeSAoVFlQRV9NQVhJTVVNIChsb25nIGxvbmcgaW50KSA9PSBMTE9OR19NQVgpOworICAgIHRoZSBvcGVyYXRpb24uICBCVUlMVElOIGlzIHRoZSBidWlsdGluIG9wZXJhdGlvbiwgYW5kIE9WRVJGTE9XIHRoZQorICAgIG92ZXJmbG93IHByZWRpY2F0ZS4gIFJldHVybiAxIGlmIHRoZSByZXN1bHQgb3ZlcmZsb3dzLiAgU2VlIGFib3ZlCisgICAgZm9yIHJlc3RyaWN0aW9ucy4gICovCistI2lmIDUgPD0gX19HTlVDX18gfHwgX19oYXNfYnVpbHRpbiAoX19idWlsdGluX2FkZF9vdmVyZmxvdykKKysjaWYgX0dMX0hBU19CVUlMVElOX09WRVJGTE9XCisgIyBkZWZpbmUgX0dMX0lOVF9PUF9XUkFQVihhLCBiLCByLCBvcCwgYnVpbHRpbiwgb3ZlcmZsb3cpIGJ1aWx0aW4gKGEsIGIsIHIpCisgI2VsaWYgMjAxMTEyIDw9IF9fU1REQ19WRVJTSU9OX18gJiYgIV9HTF9fR0VORVJJQ19CT0dVUworICMgZGVmaW5lIF9HTF9JTlRfT1BfV1JBUFYoYSwgYiwgciwgb3AsIGJ1aWx0aW4sIG92ZXJmbG93KSBcCitAQCAtNDEyLDcgKzQyNSw3IEBAIHZlcmlmeSAoVFlQRV9NQVhJTVVNIChsb25nIGxvbmcgaW50KSA9PSBMTE9OR19NQVgpOworICMgZWxzZQorICMgIGRlZmluZSBfR0xfSU5UX09QX1dSQVBWX0xPTkdJU0goYSwgYiwgciwgb3AsIG92ZXJmbG93KSBcCisgICAgIF9HTF9JTlRfT1BfQ0FMQyAoYSwgYiwgciwgb3AsIG92ZXJmbG93LCB1bnNpZ25lZCBsb25nIGludCwgXAorLSAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50LCBMT05HX01JTiwgTE9OR19NQVgpKQorKyAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50LCBMT05HX01JTiwgTE9OR19NQVgpCisgIyBlbmRpZgorICNlbmRpZgorIAorZGlmZiAtLWdpdCBhL2xpYi9nbHRlc3RzL2ludHByb3BzLmggYi9saWIvZ2x0ZXN0cy9pbnRwcm9wcy5oCitpbmRleCBlMWZjZTVjLi5lYjA2YjY5IDEwMDY0NAorLS0tIGEvbGliL2dsdGVzdHMvaW50cHJvcHMuaAorKysrIGIvbGliL2dsdGVzdHMvaW50cHJvcHMuaAorQEAgLTEsMTggKzEsMTggQEAKKyAvKiBpbnRwcm9wcy5oIC0tIHByb3BlcnRpZXMgb2YgaW50ZWdlciB0eXBlcworIAorLSAgIENvcHlyaWdodCAoQykgMjAwMS0yMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisgLyogV3JpdHRlbiBieSBQYXVsIEVnZ2VydC4gICovCitAQCAtNDcsMTIgKzQ3LDE2IEBACisgCisgLyogTWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMgZm9yIGludGVnZXIgdHlwZXMgYW5kIGV4cHJlc3Npb25zLiAgKi8KKyAKKysvKiBUaGUgd2lkdGggaW4gYml0cyBvZiB0aGUgaW50ZWdlciB0eXBlIG9yIGV4cHJlc3Npb24gVC4KKysgICBQYWRkaW5nIGJpdHMgYXJlIG5vdCBzdXBwb3J0ZWQ7IHRoaXMgaXMgY2hlY2tlZCBhdCBjb21waWxlLXRpbWUgYmVsb3cuICAqLworKyNkZWZpbmUgVFlQRV9XSURUSCh0KSAoc2l6ZW9mICh0KSAqIENIQVJfQklUKQorKworIC8qIFRoZSBtYXhpbXVtIGFuZCBtaW5pbXVtIHZhbHVlcyBmb3IgdGhlIGludGVnZXIgdHlwZSBULiAgKi8KKyAjZGVmaW5lIFRZUEVfTUlOSU1VTSh0KSAoKHQpIH4gVFlQRV9NQVhJTVVNICh0KSkKKyAjZGVmaW5lIFRZUEVfTUFYSU1VTSh0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAoKHQpICghIFRZUEVfU0lHTkVEICh0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgPyAodCkgLTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIDogKCgoKHQpIDEgPDwgKHNpemVvZiAodCkgKiBDSEFSX0JJVCAtIDIpKSAtIDEpICogMiArIDEpKSkKKysgICAgICAgIDogKCgoKHQpIDEgPDwgKFRZUEVfV0lEVEggKHQpIC0gMikpIC0gMSkgKiAyICsgMSkpKQorIAorIC8qIFRoZSBtYXhpbXVtIGFuZCBtaW5pbXVtIHZhbHVlcyBmb3IgdGhlIHR5cGUgb2YgdGhlIGV4cHJlc3Npb24gRSwKKyAgICBhZnRlciBpbnRlZ2VyIHByb21vdGlvbi4gIEUgc2hvdWxkIG5vdCBoYXZlIHNpZGUgZWZmZWN0cy4gICovCitAQCAtNjUsNyArNjksMTMgQEAKKyAgICA/IF9HTF9TSUdORURfSU5UX01BWElNVU0gKGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgOiBfR0xfSU5UX05FR0FURV9DT05WRVJUIChlLCAxKSkKKyAjZGVmaW5lIF9HTF9TSUdORURfSU5UX01BWElNVU0oZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAoKChfR0xfSU5UX0NPTlZFUlQgKGUsIDEpIDw8IChzaXplb2YgKChlKSArIDApICogQ0hBUl9CSVQgLSAyKSkgLSAxKSAqIDIgKyAxKQorKyAgKCgoX0dMX0lOVF9DT05WRVJUIChlLCAxKSA8PCAoVFlQRV9XSURUSCAoKGUpICsgMCkgLSAyKSkgLSAxKSAqIDIgKyAxKQorKworKy8qIFdvcmsgYXJvdW5kIE9wZW5WTVMgaW5jb21wYXRpYmlsaXR5IHdpdGggQzk5LiAgKi8KKysjaWYgIWRlZmluZWQgTExPTkdfTUFYICYmIGRlZmluZWQgX19JTlQ2NF9NQVgKKysjIGRlZmluZSBMTE9OR19NQVggX19JTlQ2NF9NQVgKKysjIGRlZmluZSBMTE9OR19NSU4gX19JTlQ2NF9NSU4KKysjZW5kaWYKKyAKKyAvKiBUaGlzIGluY2x1ZGUgZmlsZSBhc3N1bWVzIHRoYXQgc2lnbmVkIHR5cGVzIGFyZSB0d28ncyBjb21wbGVtZW50IHdpdGhvdXQKKyAgICBwYWRkaW5nIGJpdHM7IHRoZSBhYm92ZSBtYWNyb3MgaGF2ZSB1bmRlZmluZWQgYmVoYXZpb3Igb3RoZXJ3aXNlLgorQEAgLTg0LDEwICs5NCwxNSBAQCB2ZXJpZnkgKFRZUEVfTUFYSU1VTSAobG9uZyBpbnQpID09IExPTkdfTUFYKTsKKyB2ZXJpZnkgKFRZUEVfTUlOSU1VTSAobG9uZyBsb25nIGludCkgPT0gTExPTkdfTUlOKTsKKyB2ZXJpZnkgKFRZUEVfTUFYSU1VTSAobG9uZyBsb25nIGludCkgPT0gTExPTkdfTUFYKTsKKyAjZW5kaWYKKysvKiBTaW1pbGFybHksIHNhbml0eS1jaGVjayBvbmUgSVNPL0lFQyBUUyAxODY2MS0xOjIwMTQgbWFjcm8gaWYgZGVmaW5lZC4gICovCisrI2lmZGVmIFVJTlRfV0lEVEgKKyt2ZXJpZnkgKFRZUEVfV0lEVEggKHVuc2lnbmVkIGludCkgPT0gVUlOVF9XSURUSCk7CisrI2VuZGlmCisgCisgLyogRG9lcyB0aGUgX190eXBlb2ZfXyBrZXl3b3JkIHdvcms/ICBUaGlzIGNvdWxkIGJlIGRvbmUgYnkKKyAgICAnY29uZmlndXJlJywgYnV0IGZvciBub3cgaXQncyBlYXNpZXIgdG8gZG8gaXQgYnkgaGFuZC4gICovCistI2lmICgyIDw9IF9fR05VQ19fIHx8IGRlZmluZWQgX19JQk1fX1RZUEVPRl9fIFwKKysjaWYgKDIgPD0gX19HTlVDX18gXAorKyAgICAgfHwgKDEyMTAgPD0gX19JQk1DX18gJiYgZGVmaW5lZCBfX0lCTV9fVFlQRU9GX18pIFwKKyAgICAgIHx8ICgweDUxMTAgPD0gX19TVU5QUk9fQyAmJiAhX19TVERDX18pKQorICMgZGVmaW5lIF9HTF9IQVZFX19fVFlQRU9GX18gMQorICNlbHNlCitAQCAtMTE2LDggKzEzMSw3IEBAIHZlcmlmeSAoVFlQRV9NQVhJTVVNIChsb25nIGxvbmcgaW50KSA9PSBMTE9OR19NQVgpOworICAgIHNpZ25lZCwgdGhpcyBtYWNybyBtYXkgb3ZlcmVzdGltYXRlIHRoZSB0cnVlIGJvdW5kIGJ5IG9uZSBieXRlIHdoZW4KKyAgICBhcHBsaWVkIHRvIHVuc2lnbmVkIHR5cGVzIG9mIHNpemUgMiwgNCwgMTYsIC4uLiBieXRlcy4gICovCisgI2RlZmluZSBJTlRfU1RSTEVOX0JPVU5EKHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gIChJTlRfQklUU19TVFJMRU5fQk9VTkQgKHNpemVvZiAodCkgKiBDSEFSX0JJVCAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgLSBfR0xfU0lHTkVEX1RZUEVfT1JfRVhQUiAodCkpICAgICAgICBcCisrICAoSU5UX0JJVFNfU1RSTEVOX0JPVU5EIChUWVBFX1dJRFRIICh0KSAtIF9HTF9TSUdORURfVFlQRV9PUl9FWFBSICh0KSkgXAorICAgICsgX0dMX1NJR05FRF9UWVBFX09SX0VYUFIgKHQpKQorIAorIC8qIEJvdW5kIG9uIGJ1ZmZlciBzaXplIG5lZWRlZCB0byByZXByZXNlbnQgYW4gaW50ZWdlciB0eXBlIG9yIGV4cHJlc3Npb24gVCwKK0BAIC0yMjIsMjAgKzIzNiwyMyBAQCB2ZXJpZnkgKFRZUEVfTUFYSU1VTSAobG9uZyBsb25nIGludCkgPT0gTExPTkdfTUFYKTsKKyAgICA/IChhKSA8IChtaW4pID4+IChiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICA6IChtYXgpID4+IChiKSA8IChhKSkKKyAKKy0vKiBUcnVlIGlmIF9fYnVpbHRpbl9hZGRfb3ZlcmZsb3cgKEEsIEIsIFApIHdvcmtzIHdoZW4gUCBpcyBudWxsLiAgKi8KKy0jZGVmaW5lIF9HTF9IQVNfQlVJTFRJTl9PVkVSRkxPV19XSVRIX05VTEwgKDcgPD0gX19HTlVDX18pCisrLyogVHJ1ZSBpZiBfX2J1aWx0aW5fYWRkX292ZXJmbG93IChBLCBCLCBQKSB3b3JrcyB3aGVuIFAgaXMgbm9uLW51bGwuICAqLworKyNkZWZpbmUgX0dMX0hBU19CVUlMVElOX09WRVJGTE9XICg1IDw9IF9fR05VQ19fKQorKworKy8qIFRydWUgaWYgX19idWlsdGluX2FkZF9vdmVyZmxvd19wIChBLCBCLCBDKSB3b3Jrcy4gICovCisrI2RlZmluZSBfR0xfSEFTX0JVSUxUSU5fT1ZFUkZMT1dfUCAoNyA8PSBfX0dOVUNfXykKKyAKKyAvKiBUaGUgX0dMKl9PVkVSRkxPVyBtYWNyb3MgaGF2ZSB0aGUgc2FtZSByZXN0cmljdGlvbnMgYXMgdGhlCisgICAgKl9SQU5HRV9PVkVSRkxPVyBtYWNyb3MsIGV4Y2VwdCB0aGF0IHRoZXkgZG8gbm90IGFzc3VtZSB0aGF0IG9wZXJhbmRzCisgICAgKGUuZy4sIEEgYW5kIEIpIGhhdmUgdGhlIHNhbWUgdHlwZSBhcyBNSU4gYW5kIE1BWC4gIEluc3RlYWQsIHRoZXkgYXNzdW1lCisgICAgdGhhdCB0aGUgcmVzdWx0IChlLmcuLCBBICsgQikgaGFzIHRoYXQgdHlwZS4gICovCistI2lmIF9HTF9IQVNfQlVJTFRJTl9PVkVSRkxPV19XSVRIX05VTEwKKy0jIGRlZmluZSBfR0xfQUREX09WRVJGTE9XKGEsIGIsIG1pbiwgbWF4KQorLSAgIF9fYnVpbHRpbl9hZGRfb3ZlcmZsb3cgKGEsIGIsIChfX3R5cGVvZl9fICgoYSkgKyAoYikpICopIDApCistIyBkZWZpbmUgX0dMX1NVQlRSQUNUX09WRVJGTE9XKGEsIGIsIG1pbiwgbWF4KQorLSAgIF9fYnVpbHRpbl9zdWJfb3ZlcmZsb3cgKGEsIGIsIChfX3R5cGVvZl9fICgoYSkgLSAoYikpICopIDApCistIyBkZWZpbmUgX0dMX01VTFRJUExZX09WRVJGTE9XKGEsIGIsIG1pbiwgbWF4KQorLSAgIF9fYnVpbHRpbl9tdWxfb3ZlcmZsb3cgKGEsIGIsIChfX3R5cGVvZl9fICgoYSkgKiAoYikpICopIDApCisrI2lmIF9HTF9IQVNfQlVJTFRJTl9PVkVSRkxPV19QCisrIyBkZWZpbmUgX0dMX0FERF9PVkVSRkxPVyhhLCBiLCBtaW4sIG1heCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgIF9fYnVpbHRpbl9hZGRfb3ZlcmZsb3dfcCAoYSwgYiwgKF9fdHlwZW9mX18gKChhKSArIChiKSkpIDApCisrIyBkZWZpbmUgX0dMX1NVQlRSQUNUX09WRVJGTE9XKGEsIGIsIG1pbiwgbWF4KSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgIF9fYnVpbHRpbl9zdWJfb3ZlcmZsb3dfcCAoYSwgYiwgKF9fdHlwZW9mX18gKChhKSAtIChiKSkpIDApCisrIyBkZWZpbmUgX0dMX01VTFRJUExZX09WRVJGTE9XKGEsIGIsIG1pbiwgbWF4KSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgIF9fYnVpbHRpbl9tdWxfb3ZlcmZsb3dfcCAoYSwgYiwgKF9fdHlwZW9mX18gKChhKSAqIChiKSkpIDApCisgI2Vsc2UKKyAjIGRlZmluZSBfR0xfQUREX09WRVJGTE9XKGEsIGIsIG1pbiwgbWF4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgobWluKSA8IDAgPyBJTlRfQUREX1JBTkdFX09WRVJGTE9XIChhLCBiLCBtaW4sIG1heCkgICAgICAgICAgICAgICAgICBcCitAQCAtMzE1LDcgKzMzMiw3IEBAIHZlcmlmeSAoVFlQRV9NQVhJTVVNIChsb25nIGxvbmcgaW50KSA9PSBMTE9OR19NQVgpOworICAgX0dMX0JJTkFSWV9PUF9PVkVSRkxPVyAoYSwgYiwgX0dMX0FERF9PVkVSRkxPVykKKyAjZGVmaW5lIElOVF9TVUJUUkFDVF9PVkVSRkxPVyhhLCBiKSBcCisgICBfR0xfQklOQVJZX09QX09WRVJGTE9XIChhLCBiLCBfR0xfU1VCVFJBQ1RfT1ZFUkZMT1cpCistI2lmIF9HTF9IQVNfQlVJTFRJTl9PVkVSRkxPV19XSVRIX05VTEwKKysjaWYgX0dMX0hBU19CVUlMVElOX09WRVJGTE9XX1AKKyAjIGRlZmluZSBJTlRfTkVHQVRFX09WRVJGTE9XKGEpIElOVF9TVUJUUkFDVF9PVkVSRkxPVyAoMCwgYSkKKyAjZWxzZQorICMgZGVmaW5lIElOVF9ORUdBVEVfT1ZFUkZMT1coYSkgXAorQEAgLTM0OSwxMCArMzY2LDYgQEAgdmVyaWZ5IChUWVBFX01BWElNVU0gKGxvbmcgbG9uZyBpbnQpID09IExMT05HX01BWCk7CisgI2RlZmluZSBJTlRfTVVMVElQTFlfV1JBUFYoYSwgYiwgcikgXAorICAgX0dMX0lOVF9PUF9XUkFQViAoYSwgYiwgciwgKiwgX19idWlsdGluX211bF9vdmVyZmxvdywgSU5UX01VTFRJUExZX09WRVJGTE9XKQorIAorLSNpZm5kZWYgX19oYXNfYnVpbHRpbgorLSMgZGVmaW5lIF9faGFzX2J1aWx0aW4oeCkgMAorLSNlbmRpZgorLQorIC8qIE5vbnplcm8gaWYgdGhpcyBjb21waWxlciBoYXMgR0NDIGJ1ZyA2ODE5MyBvciBDbGFuZyBidWcgMjUzOTAuICBTZWU6CisgICAgaHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NjgxOTMKKyAgICBodHRwczovL2xsdm0ub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTI1MzkwCitAQCAtMzY5LDcgKzM4Miw3IEBAIHZlcmlmeSAoVFlQRV9NQVhJTVVNIChsb25nIGxvbmcgaW50KSA9PSBMTE9OR19NQVgpOworICAgIHRoZSBvcGVyYXRpb24uICBCVUlMVElOIGlzIHRoZSBidWlsdGluIG9wZXJhdGlvbiwgYW5kIE9WRVJGTE9XIHRoZQorICAgIG92ZXJmbG93IHByZWRpY2F0ZS4gIFJldHVybiAxIGlmIHRoZSByZXN1bHQgb3ZlcmZsb3dzLiAgU2VlIGFib3ZlCisgICAgZm9yIHJlc3RyaWN0aW9ucy4gICovCistI2lmIDUgPD0gX19HTlVDX18gfHwgX19oYXNfYnVpbHRpbiAoX19idWlsdGluX2FkZF9vdmVyZmxvdykKKysjaWYgX0dMX0hBU19CVUlMVElOX09WRVJGTE9XCisgIyBkZWZpbmUgX0dMX0lOVF9PUF9XUkFQVihhLCBiLCByLCBvcCwgYnVpbHRpbiwgb3ZlcmZsb3cpIGJ1aWx0aW4gKGEsIGIsIHIpCisgI2VsaWYgMjAxMTEyIDw9IF9fU1REQ19WRVJTSU9OX18gJiYgIV9HTF9fR0VORVJJQ19CT0dVUworICMgZGVmaW5lIF9HTF9JTlRfT1BfV1JBUFYoYSwgYiwgciwgb3AsIGJ1aWx0aW4sIG92ZXJmbG93KSBcCitAQCAtNDEyLDcgKzQyNSw3IEBAIHZlcmlmeSAoVFlQRV9NQVhJTVVNIChsb25nIGxvbmcgaW50KSA9PSBMTE9OR19NQVgpOworICMgZWxzZQorICMgIGRlZmluZSBfR0xfSU5UX09QX1dSQVBWX0xPTkdJU0goYSwgYiwgciwgb3AsIG92ZXJmbG93KSBcCisgICAgIF9HTF9JTlRfT1BfQ0FMQyAoYSwgYiwgciwgb3AsIG92ZXJmbG93LCB1bnNpZ25lZCBsb25nIGludCwgXAorLSAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50LCBMT05HX01JTiwgTE9OR19NQVgpKQorKyAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50LCBMT05HX01JTiwgTE9OR19NQVgpCisgIyBlbmRpZgorICNlbmRpZgorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG5fMS4zMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbl8xLjMzLmJiCmluZGV4IGQzZDBmNTUuLjllOGJkYmEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbl8xLjMzLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbl8xLjMzLmJiCkBAIC0xOSw2ICsxOSw4IEBACiAgICAgICAgICAgIGZpbGU6Ly9hdm9pZF9BTV9QUk9HX01LRElSX1Bfd2FybmluZ19lcnJvcl93aXRoX2F1dG9tYWtlXzEuMTIucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1pZG4tZml4LXByaW50Zi1mb3JtYXQtc2VjdXJpdHktd2FybmluZ3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ2NjNy1jb21wYXRpYmlsaXR5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaWRuLWZvcm1hdC1zZWN1cml0eS13YXJuaW5ncy5wYXRjaCBcCiAiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICJhOWFhN2UwMDM2NjVkZTljODJiZDNmOWZjNmNjZjMwOCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlibW5sL2xpYm1ubF8xLjAuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlibW5sL2xpYm1ubF8xLjAuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDU4Nzk5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJtbmwvbGlibW5sXzEuMC40LmJiCkBAIC0wLDAgKzEsMTMgQEAKK1NVTU1BUlkgPSAiTWluaW1hbGlzdGljIHVzZXItc3BhY2UgTmV0bGluayB1dGlsaXR5IGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJNaW5pbWFsaXN0aWMgdXNlci1zcGFjZSBsaWJyYXJ5IG9yaWVudGVkIHRvIE5ldGxpbmsgZGV2ZWxvcGVycywgcHJvdmlkaW5nIFwKKyAgICBmdW5jdGlvbnMgZm9yIGNvbW1vbiB0YXNrcyBpbiBwYXJzaW5nLCB2YWxpZGF0aW5nLCBhbmQgY29uc3RydWN0aW5nIGJvdGggdGhlIE5ldGxpbmsgaGVhZGVyIGFuZCBUTFZzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubmV0ZmlsdGVyLm9yZy9wcm9qZWN0cy9saWJtbmwvaW5kZXguaHRtbCIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5uZXRmaWx0ZXIub3JnL3Byb2plY3RzL2xpYm1ubC9maWxlcy9saWJtbmwtJHtQVn0udGFyLmJ6MjtuYW1lPXRhciIKK1NSQ19VUklbdGFyLm1kNXN1bV0gPSAiYmU5YjRiNTMyOGM2ZGExYmRhNTY1YWM1ZGZmYWRiMmQiCitTUkNfVVJJW3Rhci5zaGEyNTZzdW1dID0gIjE3MWY4OTY5OWYyODZhNTg1NGI3MmI5MWQwNmU4ZjhlMzY4MzA2NGM1OTAxZmIwOWQ5NTRhOWFiNmY1NTFmODEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJuc2wvbGlibnNsMi8wMDAxLWluY2x1ZGUtc3lzLWNkZWZzLmgtZXhwbGljaXRseS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlibnNsL2xpYm5zbDIvMDAwMS1pbmNsdWRlLXN5cy1jZGVmcy5oLWV4cGxpY2l0bHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ2NDdhYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlibnNsL2xpYm5zbDIvMDAwMS1pbmNsdWRlLXN5cy1jZGVmcy5oLWV4cGxpY2l0bHkucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorRnJvbSA1MDhhMGZmNjkwZGZlYmMxN2M0ZjU1YTVmODE4MjRlZDU0OWJlZDY2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMTggQXByIDIwMTcgMDk6MTM6MzMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIGluY2x1ZGUgc3lzL2NkZWZzLmggZXhwbGljaXRseQorCitnbGliYyBpbmNsdWRlcyB0aGlzIGhlYWRlciBpbmRpcmVjdGx5IGJ1dCBub3QgbXVzbAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIHNyYy9ycGNzdmMvbmlzLmggICAgfCAxICsKKyBzcmMvcnBjc3ZjL25pc2xpYi5oIHwgMSArCisgc3JjL3JwY3N2Yy95cGNsbnQuaCB8IDEgKworIHNyYy9ycGNzdmMveXB1cGQuaCAgfCAxICsKKyA0IGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL3JwY3N2Yy9uaXMuaCBiL3NyYy9ycGNzdmMvbmlzLmgKK2luZGV4IDkzM2M0ZDkuLjg4Y2JjYTAgMTAwNjQ0CistLS0gYS9zcmMvcnBjc3ZjL25pcy5oCisrKysgYi9zcmMvcnBjc3ZjL25pcy5oCitAQCAtMzIsNiArMzIsNyBAQAorICNpZm5kZWYgX1JQQ1NWQ19OSVNfSAorICNkZWZpbmUgX1JQQ1NWQ19OSVNfSCAxCisgCisrI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorICNpbmNsdWRlIDxmZWF0dXJlcy5oPgorICNpbmNsdWRlIDxycGMvcnBjLmg+CisgI2luY2x1ZGUgPHJwY3N2Yy9uaXNfdGFncy5oPgorZGlmZiAtLWdpdCBhL3NyYy9ycGNzdmMvbmlzbGliLmggYi9zcmMvcnBjc3ZjL25pc2xpYi5oCitpbmRleCBhNTljMTliLi5hNTNmYWIzIDEwMDY0NAorLS0tIGEvc3JjL3JwY3N2Yy9uaXNsaWIuaAorKysrIGIvc3JjL3JwY3N2Yy9uaXNsaWIuaAorQEAgLTE5LDYgKzE5LDcgQEAKKyAjaWZuZGVmCV9fUlBDU1ZDX05JU0xJQl9IX18KKyAjZGVmaW5lCV9fUlBDU1ZDX05JU0xJQl9IX18KKyAKKysjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisgI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisgCisgX19CRUdJTl9ERUNMUworZGlmZiAtLWdpdCBhL3NyYy9ycGNzdmMveXBjbG50LmggYi9zcmMvcnBjc3ZjL3lwY2xudC5oCitpbmRleCBmZTQzZmQ0Li5hNjg2YjYxIDEwMDY0NAorLS0tIGEvc3JjL3JwY3N2Yy95cGNsbnQuaAorKysrIGIvc3JjL3JwY3N2Yy95cGNsbnQuaAorQEAgLTIwLDYgKzIwLDcgQEAKKyAjaWZuZGVmCV9fUlBDU1ZDX1lQQ0xOVF9IX18KKyAjZGVmaW5lCV9fUlBDU1ZDX1lQQ0xOVF9IX18KKyAKKysjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisgI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisgCisgLyogU29tZSBkZWZpbmVzICovCitkaWZmIC0tZ2l0IGEvc3JjL3JwY3N2Yy95cHVwZC5oIGIvc3JjL3JwY3N2Yy95cHVwZC5oCitpbmRleCBkMDdmZDRkLi4yYzU3MzAxIDEwMDY0NAorLS0tIGEvc3JjL3JwY3N2Yy95cHVwZC5oCisrKysgYi9zcmMvcnBjc3ZjL3lwdXBkLmgKK0BAIC0zMyw2ICszMyw3IEBACisgI2lmbmRlZiBfX1JQQ1NWQ19ZUFVQRF9IX18KKyAjZGVmaW5lIF9fUlBDU1ZDX1lQVVBEX0hfXworIAorKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyAjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyAKKyAjaW5jbHVkZSA8cnBjL3JwYy5oPgorLS0gCisyLjEyLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJuc2wvbGlibnNsMi8wMDAxLW5pc19jYWxsLmMtSW5jbHVkZS1zdGRpbnQuaC1mb3ItdWludHB0cl90LWRlZmluaXRpb24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYm5zbC9saWJuc2wyLzAwMDEtbmlzX2NhbGwuYy1JbmNsdWRlLXN0ZGludC5oLWZvci11aW50cHRyX3QtZGVmaW5pdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWFlNTE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJuc2wvbGlibnNsMi8wMDAxLW5pc19jYWxsLmMtSW5jbHVkZS1zdGRpbnQuaC1mb3ItdWludHB0cl90LWRlZmluaXRpb24ucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorRnJvbSBkNzFjYmViM2I3NmU1NDc3OGE0ZDVlZWM2ZDM4N2NjZTY1MzUzN2NhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgOSBKdW4gMjAxNyAwOTo0OTozNSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBuaXNfY2FsbC5jOiBJbmNsdWRlIHN0ZGludC5oIGZvciB1aW50cHRyX3QgZGVmaW5pdGlvbgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIHNyYy9uaXNwbHVzL25pc19jYWxsLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3NyYy9uaXNwbHVzL25pc19jYWxsLmMgYi9zcmMvbmlzcGx1cy9uaXNfY2FsbC5jCitpbmRleCAxYTJiOTBjLi4xZGM5ODJkIDEwMDY0NAorLS0tIGEvc3JjL25pc3BsdXMvbmlzX2NhbGwuYworKysrIGIvc3JjL25pc3BsdXMvbmlzX2NhbGwuYworQEAgLTIzLDYgKzIzLDcgQEAKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHN0ZGludC5oPgorICNpbmNsdWRlIDxsaWJpbnRsLmg+CisgI2luY2x1ZGUgPHJwYy9ycGMuaD4KKyAjaW5jbHVkZSA8cnBjL2F1dGguaD4KKy0tIAorMi4xMy4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlibnNsL2xpYm5zbDIvMDAwMi1EZWZpbmUtZ2xpYmMtc3BlY2lmaWMtbWFjcm9zLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJuc2wvbGlibnNsMi8wMDAyLURlZmluZS1nbGliYy1zcGVjaWZpYy1tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVmZGE0YgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlibnNsL2xpYm5zbDIvMDAwMi1EZWZpbmUtZ2xpYmMtc3BlY2lmaWMtbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0Zyb20gNjAyODI1MTRlYTAxYWYwMDRkN2Y5ZTY2ZGQzOTI5MjIzYjdkMmU3YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDE4IEFwciAyMDE3IDA5OjE2OjEyIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBEZWZpbmUgZ2xpYmMgc3BlY2lmaWMgbWFjcm9zCisKK0NoZWNrIGFuZCBkZWZpbmUKK3Jhd21lbWNociwgX19hc3ByaW50ZiwgX19tZW1wY3B5LCBfX3N0cnRva19yCitfX2Fsd2F5c19pbmxpbmUsIFRFTVBfRkFJTFVSRV9SRVRSWQorCitpZiBub3QgZXhpc3RpbmcuIEhlbHBzIGNvbXBpbGluZyB3aXRoIG11c2wKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2RpZmYgLS1naXQgYS9zcmMvcnBjc3ZjL25pcy5oIGIvc3JjL3JwY3N2Yy9uaXMuaAoraW5kZXggODhjYmNhMC4uMjNmYzIwYyAxMDA2NDQKKy0tLSBhL3NyYy9ycGNzdmMvbmlzLmgKKysrKyBiL3NyYy9ycGNzdmMvbmlzLmgKK0BAIC01Nyw2ICs1NywzNCBAQCBfX0JFR0lOX0RFQ0xTCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGt1a3VrQHN1c2UuZGU+CisgICovCisgCisrI2lmbmRlZiByYXdtZW1jaHIKKysjZGVmaW5lIHJhd21lbWNocihzLGMpIG1lbWNocigocyksKHNpemVfdCktMSwoYykpCisrI2VuZGlmCisrCisrI2lmbmRlZiBfX2FzcHJpbnRmCisrI2RlZmluZSBfX2FzcHJpbnRmIGFzcHJpbnRmCisrI2VuZGlmCisrCisrI2lmbmRlZiBfX21lbXBjcHkKKysjZGVmaW5lIF9fbWVtcGNweSBtZW1wY3B5CisrI2VuZGlmCisrCisrI2lmbmRlZiBfX3N0cnRva19yCisrI2RlZmluZSBfX3N0cnRva19yIHN0cnRva19yCisrI2VuZGlmCisrCisrI2lmbmRlZiBfX2Fsd2F5c19pbmxpbmUKKysjZGVmaW5lIF9fYWx3YXlzX2lubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrI2VuZGlmCisrCisrI2lmbmRlZiBURU1QX0ZBSUxVUkVfUkVUUlkKKysjZGVmaW5lIFRFTVBfRkFJTFVSRV9SRVRSWShleHApICh7IFwKKyt0eXBlb2YgKGV4cCkgX3JjOyBcCisrIGRvIHsgXAorKyAgX3JjID0gKGV4cCk7IFwKKysgfSB3aGlsZSAoX3JjID09IC0xICYmIGVycm5vID09IEVJTlRSKTsgXAorKyBfcmM7IH0pCisrI2VuZGlmCisgCisgI2lmbmRlZiBfX25pc19vYmplY3RfaAorICNkZWZpbmUgX19uaXNfb2JqZWN0X2gKKy0tIAorMi4xMi4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlibnNsL2xpYm5zbDJfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJuc2wvbGlibnNsMl9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUzOTE0OAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlibnNsL2xpYm5zbDJfZ2l0LmJiCkBAIC0wLDAgKzEsMzcgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUIGZvciB0aGUgdGVybXMpCisKK1NVTU1BUlkgPSAiTGlicmFyeSBjb250YWluaW5nIE5JUyBmdW5jdGlvbnMgdXNpbmcgVEktUlBDIChJUHY2IGVuYWJsZWQpIgorREVTQ1JJUFRJT04gPSAiVGhpcyBsaWJyYXJ5IGNvbnRhaW5zIHRoZSBwdWJsaWMgY2xpZW50IGludGVyZmFjZSBmb3IgTklTKFlQKSBhbmQgTklTK1wKKyAgICAgICAgICAgICAgIGl0IHdhcyBwYXJ0IG9mIGdsaWJjIGFuZCBub3cgaXMgc3RhbmRhbG9uZSBwYWNrYWdlcy4gaXQgYWxzbyBzdXBwb3J0cyBJUHY2IgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL3Roa3VrdWsvbGlibnNsIgorTElDRU5TRSA9ICJMR1BMLTIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIgorU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJsaWJ0aXJwYyIKK0RFUEVORFNfYXBwZW5kX2xpYmMtbXVzbCA9ICIgYnNkLWhlYWRlcnMiCisKK1BWID0gIjEuMC41K2dpdCR7U1JDUFZ9IgorCitTUkNSRVYgPSAiZGZhMmYzMTM1MjRhZmY5MjQzYzRkOGNlMWJhY2U3Mzc4NjQ3ODM1NiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3Roa3VrdWsvbGlibnNsIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaW5jbHVkZS1zeXMtY2RlZnMuaC1leHBsaWNpdGx5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItRGVmaW5lLWdsaWJjLXNwZWNpZmljLW1hY3Jvcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLW5pc19jYWxsLmMtSW5jbHVkZS1zdGRpbnQuaC1mb3ItdWludHB0cl90LWRlZmluaXRpb24ucGF0Y2ggXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQKKworRVhUUkFfT0VDT05GICs9ICItLWxpYmRpcj0ke2xpYmRpcn0vbnNsIC0taW5jbHVkZWRpcj0ke2luY2x1ZGVkaXJ9L25zbCIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9CisJbXYgJHtEfSR7bGliZGlyfS9uc2wvcGtnY29uZmlnICR7RH0ke2xpYmRpcn0KK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9uc2wvKi5zby4qIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2luY2x1ZGVkaXJ9L25zbCAke2xpYmRpcn0vbnNsLyouc28iCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9uc2wvKi5hIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJzb2x2L2xpYnNvbHYvMDAwMS1yZXBvX3JwbWRiLmMtaW5jcmVhc2UtTUFYX0hEUl9DTlQtYW5kLU1BWF9IRFJfRFNJWkUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnNvbHYvbGlic29sdi8wMDAxLXJlcG9fcnBtZGIuYy1pbmNyZWFzZS1NQVhfSERSX0NOVC1hbmQtTUFYX0hEUl9EU0laRS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTRlNWNiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJzb2x2L2xpYnNvbHYvMDAwMS1yZXBvX3JwbWRiLmMtaW5jcmVhc2UtTUFYX0hEUl9DTlQtYW5kLU1BWF9IRFJfRFNJWkUucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSAxYzRjOTM1Y2I3M2FjMWNjYjk2OTNkZjFhNTFiYTIxOGEyMmU4Y2E4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWluZyBMaXUgPGxpdS5taW5nNTBAZ21haWwuY29tPgorRGF0ZTogU2F0LCAzMCBTZXAgMjAxNyAxMToxNToxNiArMDgwMAorU3ViamVjdDogW1BBVENIXSByZXBvX3JwbWRiLmM6IGluY3JlYXNlIE1BWF9IRFJfQ05UIGFuZCBNQVhfSERSX0RTSVpFCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vb3BlblNVU0UvbGlic29sdi9wdWxsLzIzMF0KKworV2UgZW5jb3VudGVyZWQgJ2NvcnJ1cHQgcnBtJyBpc3N1ZXMgd2hlbiBpbnN0YWxsaW5nIGV4dHJlbWUgYmlnIFJQTQorcGFja2FnZXMgbGlrZSB0aGUga2VybmVsLWRldnNyYyBwYWNrYWdlIG9mIFlvY3RvIHByb2plY3QuCisKK0l0IGNhbiBiZSBmaXhlZCBieSBpbmNyZWFzaW5nIE1BWF9IRFJfQ05UIGFuZCBNQVhfSERSX0RTSVpFIHBlciB0ZXN0LgorCitTaWduZWQtb2ZmLWJ5OiBNaW5nIExpdSA8bGl1Lm1pbmc1MEBnbWFpbC5jb20+CistLS0KKyBleHQvcmVwb19ycG1kYi5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2V4dC9yZXBvX3JwbWRiLmMgYi9leHQvcmVwb19ycG1kYi5jCitpbmRleCBjNzAwMGE5Li43MDAwODM1IDEwMDY0NAorLS0tIGEvZXh0L3JlcG9fcnBtZGIuYworKysrIGIvZXh0L3JlcG9fcnBtZGIuYworQEAgLTE3MCw4ICsxNzAsOCBAQAorICNkZWZpbmUgTUFYX1NJR19DTlQJCTB4MTAwMDAwCisgI2RlZmluZSBNQVhfU0lHX0RTSVpFCQkweDEwMDAwMAorIAorLSNkZWZpbmUgTUFYX0hEUl9DTlQJCTB4MTAwMDAwCistI2RlZmluZSBNQVhfSERSX0RTSVpFCQkweDIwMDAwMDAKKysjZGVmaW5lIE1BWF9IRFJfQ05UCQkweDIwMDAwMAorKyNkZWZpbmUgTUFYX0hEUl9EU0laRQkJMHg0MDAwMDAwCisgCisgdHlwZWRlZiBzdHJ1Y3QgcnBtaGVhZCB7CisgICBpbnQgY250OworLS0gCisyLjcuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnNvbHYvbGlic29sdl8wLjYuMjYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnNvbHYvbGlic29sdl8wLjYuMjYuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyZDYzYWUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJzb2x2L2xpYnNvbHZfMC42LjI2LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBzb2x2aW5nIHBhY2thZ2VzIGFuZCByZWFkaW5nIHJlcG9zaXRvcmllcyIKLUhPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuU1VTRS9saWJzb2x2IgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2dpdGh1Yi5jb20vb3BlblNVU0UvbGlic29sdi9pc3N1ZXMiCi1TRUNUSU9OID0gImRldmVsIgotTElDRU5TRSA9ICJCU0QtMy1DbGF1c2UiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLkJTRDttZDU9NjIyNzJiZDExYzk3Mzk2ZDRhYWYxYzQxYmMxMWY3ZDgiCi0KLURFUEVORFMgPSAiZXhwYXQgemxpYiBycG0iCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9vcGVuU1VTRS9saWJzb2x2LmdpdCBcCi0gICAgICAgICAgICIKLVNSQ19VUklfYXBwZW5kX2xpYmMtbXVzbCA9ICIgZmlsZTovLzAwMDEtQWRkLWZhbGxiYWNrLWZvcGVuY29va2llLWltcGxlbWVudGF0aW9uLnBhdGNoIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovLzAwMDItRml4ZXMtdG8taW50ZXJuYWwtZm9wZW5jb29raWUtaW1wbGVtZW50YXRpb24ucGF0Y2ggXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIgotCi1TUkNSRVYgPSAiYmEzMmY4Mjg2ZDNkZWVjNmZhYWFiYzc5NzYyYTQ3NjBlOWFmMGEwNyIKLVVQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gIig/UDxwdmVyPlxkKyhcLlxkKykrKSIKLQotUyA9ICIke1dPUktESVJ9L2dpdCIKLQotaW5oZXJpdCBjbWFrZQotCi1FWFRSQV9PRUNNQUtFID0gIi1ETElCPSR7YmFzZWxpYn0gLURNVUxUSV9TRU1BTlRJQ1M9T04gLURFTkFCTEVfUlBNTUQ9T04gLURFTkFCTEVfUlBNREI9T04iCi0KLVBBQ0tBR0VTID0rICIke1BOfS10b29scyAke1BOfWV4dCIKLQotRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9L2NtYWtlL01vZHVsZXMvRmluZExpYlNvbHYuY21ha2UiCi1GSUxFU18ke1BOfS10b29scyA9ICIke2JpbmRpcn0vKiIKLUZJTEVTXyR7UE59ZXh0ID0gIiR7bGliZGlyfS8ke1BOfWV4dC5zby4qIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnNvbHYvbGlic29sdl8wLjYuMjguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnNvbHYvbGlic29sdl8wLjYuMjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM4ZjdmYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlic29sdi9saWJzb2x2XzAuNi4yOC5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIHNvbHZpbmcgcGFja2FnZXMgYW5kIHJlYWRpbmcgcmVwb3NpdG9yaWVzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL29wZW5TVVNFL2xpYnNvbHYiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuU1VTRS9saWJzb2x2L2lzc3VlcyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UuQlNEO21kNT02MjI3MmJkMTFjOTczOTZkNGFhZjFjNDFiYzExZjdkOCIKKworREVQRU5EUyA9ICJleHBhdCB6bGliIHJwbSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL29wZW5TVVNFL2xpYnNvbHYuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcmVwb19ycG1kYi5jLWluY3JlYXNlLU1BWF9IRFJfQ05ULWFuZC1NQVhfSERSX0RTSVpFLnBhdGNoIFwKKyAgICAgICAgICAiCitTUkNfVVJJX2FwcGVuZF9saWJjLW11c2wgPSAiIGZpbGU6Ly8wMDAxLUFkZC1mYWxsYmFjay1mb3BlbmNvb2tpZS1pbXBsZW1lbnRhdGlvbi5wYXRjaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8wMDAyLUZpeGVzLXRvLWludGVybmFsLWZvcGVuY29va2llLWltcGxlbWVudGF0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIKKworU1JDUkVWID0gImI4YTlkZGQ4OGViNGUwYWIzNTFlYjU1YTUzMTg2YjVkYzVhYzA4MjUiCitVUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICIoP1A8cHZlcj5cZCsoXC5cZCspKykiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgY21ha2UKKworRVhUUkFfT0VDTUFLRSA9ICItRExJQj0ke2Jhc2VsaWJ9IC1ETVVMVElfU0VNQU5USUNTPU9OIC1ERU5BQkxFX1JQTU1EPU9OIC1ERU5BQkxFX1JQTURCPU9OIC1ERU5BQkxFX0NPTVBMRVhfREVQUz1PTiIKKworUEFDS0FHRVMgPSsgIiR7UE59LXRvb2xzICR7UE59ZXh0IgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vY21ha2UvTW9kdWxlcy9GaW5kTGliU29sdi5jbWFrZSIKK0ZJTEVTXyR7UE59LXRvb2xzID0gIiR7YmluZGlyfS8qIgorRklMRVNfJHtQTn1leHQgPSAiJHtsaWJkaXJ9LyR7UE59ZXh0LnNvLioiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidGlycGMvbGlidGlycGMvMDAwMS1BZGQtbWlzc2luZy1yd2xvY2tfdW5sb2Nrcy1pbi14cHJ0X3JlZ2lzdGVyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwYy8wMDAxLUFkZC1taXNzaW5nLXJ3bG9ja191bmxvY2tzLWluLXhwcnRfcmVnaXN0ZXIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwNjEzYmEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwYy8wMDAxLUFkZC1taXNzaW5nLXJ3bG9ja191bmxvY2tzLWluLXhwcnRfcmVnaXN0ZXIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi1TdWJqZWN0OiBbUEFUQ0hdIEFkZCBtaXNzaW5nIHJ3bG9ja191bmxvY2tzIGluIHhwcnRfcmVnaXN0ZXIKLQotSXQgbG9va3MgbGlrZSBpbiBiMmM5NDMwZjQ2YzRhYzg0ODk1N2ZiOGFkYWFjMTc2YTNmNmFjMDNmIHdoZW4gc3ZjX3J1bgotc3dpdGNoZWQgdG8gcG9sbCwgYW4gZWFybHkgcmV0dXJuIHdhcyBhZGRlZCwgYnV0IHRoZSByd2xvY2sgd2FzIG5vdAotdW5sb2NrZWQuCi0KLUkgb2JzZXJ2ZWQgdGhhdCBycGNiaW5kIGJ1aWx0IGFnYWluc3QgbGlidGlycGMtMS4wLjEgd291bGQgaGFuZGxlIG9ubHkKLW9uZSByZXF1ZXN0IGJlZm9yZSBoYW5naW5nLCBhbmQgdHJhY2tlZCBpdCBkb3duIHRvIGEgbWlzc2luZwotcndsb2NrX3VubG9jayBoZXJlLgotCi1GaXhlczogYjJjOTQzMGY0NmM0ICgnVXNlIHBvbGwoKSBpbnN0ZWFkIG9mIHNlbGVjdCgpIGluIHN2Y19ydW4oKScpCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotU2lnbmVkLW9mZi1ieTogTWljaGFlbCBGb3JuZXkgPG1mb3JuZXlAbWZvcm5leS5vcmc+Ci1TaWduZWQtb2ZmLWJ5OiBTdGV2ZSBEaWNrc29uIDxzdGV2ZWRAcmVkaGF0LmNvbT4KLVNpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPgotLS0tCi0gc3JjL3N2Yy5jIHwgNyArKysrLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3NyYy9zdmMuYyBiL3NyYy9zdmMuYwotaW5kZXggOWM0MTQ0NS4uYjU5NDY3YiAxMDA2NDQKLS0tLSBhL3NyYy9zdmMuYwotKysrIGIvc3JjL3N2Yy5jCi1AQCAtOTksNyArOTksNyBAQCB4cHJ0X3JlZ2lzdGVyICh4cHJ0KQotICAgICB7Ci0gICAgICAgX19zdmNfeHBvcnRzID0gKFNWQ1hQUlQgKiopIGNhbGxvYyAoX3JwY19kdGFibGVzaXplKCksIHNpemVvZiAoU1ZDWFBSVCAqKSk7Ci0gICAgICAgaWYgKF9fc3ZjX3hwb3J0cyA9PSBOVUxMKQotLQlyZXR1cm47Ci0rICAgICAgICAgICAgZ290byB1bmxvY2s7Ci0gICAgIH0KLSAgIGlmIChzb2NrIDwgX3JwY19kdGFibGVzaXplKCkpCi0gICAgIHsKLUBAIC0xMjAsMTQgKzEyMCwxNCBAQCB4cHJ0X3JlZ2lzdGVyICh4cHJ0KQotICAgICAgICAgICAgIHN2Y19wb2xsZmRbaV0uZmQgPSBzb2NrOwotICAgICAgICAgICAgIHN2Y19wb2xsZmRbaV0uZXZlbnRzID0gKFBPTExJTiB8IFBPTExQUkkgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBPTExSRE5PUk0gfCBQT0xMUkRCQU5EKTsKLS0gICAgICAgICAgICByZXR1cm47Ci0rICAgICAgICAgICAgZ290byB1bmxvY2s7Ci0gICAgICAgICAgIH0KLSAKLSAgICAgICBuZXdfc3ZjX3BvbGxmZCA9IChzdHJ1Y3QgcG9sbGZkICopIHJlYWxsb2MgKHN2Y19wb2xsZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKHN0cnVjdCBwb2xsZmQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIChzdmNfbWF4X3BvbGxmZCArIDEpKTsKLSAgICAgICBpZiAobmV3X3N2Y19wb2xsZmQgPT0gTlVMTCkgLyogT3V0IG9mIG1lbW9yeSAqLwotLSAgICAgICAgcmV0dXJuOwotKyAgICAgICAgZ290byB1bmxvY2s7Ci0gICAgICAgc3ZjX3BvbGxmZCA9IG5ld19zdmNfcG9sbGZkOwotICAgICAgICsrc3ZjX21heF9wb2xsZmQ7Ci0gCi1AQCAtMTM1LDYgKzEzNSw3IEBAIHhwcnRfcmVnaXN0ZXIgKHhwcnQpCi0gICAgICAgc3ZjX3BvbGxmZFtzdmNfbWF4X3BvbGxmZCAtIDFdLmV2ZW50cyA9IChQT0xMSU4gfCBQT0xMUFJJIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBPTExSRE5PUk0gfCBQT0xMUkRCQU5EKTsKLSAgICAgfQotK3VubG9jazoKLSAgIHJ3bG9ja191bmxvY2sgKCZzdmNfZmRfbG9jayk7Ci0gfQotIAotLS0gCi0yLjUuMwotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjLzAwMDEtaW5jbHVkZS1zdGRpbnQuaC1mb3ItdWludHB0cl90LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwYy8wMDAxLWluY2x1ZGUtc3RkaW50LmgtZm9yLXVpbnRwdHJfdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmU5ODMzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwYy8wMDAxLWluY2x1ZGUtc3RkaW50LmgtZm9yLXVpbnRwdHJfdC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIGI4MGQzYjU3M2MxZGFkZTJiMjliMjJmOGFjYzNiOWUyYzdkZGVmZDcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAyMCBNYXkgMjAxNyAxMzozNjo0MyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBpbmNsdWRlIHN0ZGludC5oIGZvciB1aW50cHRyX3QKKworRml4ZXMKK3wgLi4vLi4vbGlidGlycGMtMS4wLjEvc3JjL3hkcl9zaXplb2YuYzo5MzoxMzogZXJyb3I6ICd1aW50cHRyX3QnIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKTsgZGlkIHlvdSBtZWFuICdfX2ludHB0cl90Jz8KK3wgICBpZiAobGVuIDwgKHVpbnRwdHJfdCl4ZHJzLT54X2Jhc2UpIHsKK3wgICAgICAgICAgICAgIF5+fn5+fn5+fgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIHNyYy94ZHJfc2l6ZW9mLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3NyYy94ZHJfc2l6ZW9mLmMgYi9zcmMveGRyX3NpemVvZi5jCitpbmRleCBkMjNmYmQxLi43OWQ2NzA3IDEwMDY0NAorLS0tIGEvc3JjL3hkcl9zaXplb2YuYworKysrIGIvc3JjL3hkcl9zaXplb2YuYworQEAgLTM5LDYgKzM5LDcgQEAKKyAjaW5jbHVkZSA8cnBjL3hkci5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0ZGludC5oPgorICNpbmNsdWRlICJ1bi1uYW1lc3BhY2UuaCIKKyAKKyAvKiBBUkdTVVNFRCAqLworLS0gCisyLjEzLjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwYy8wMDAxLXJlcGxhY2UtX19iemVyby13aXRoLW1lbXNldC1BUEkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjLzAwMDEtcmVwbGFjZS1fX2J6ZXJvLXdpdGgtbWVtc2V0LUFQSS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmI0ZGE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwYy8wMDAxLXJlcGxhY2UtX19iemVyby13aXRoLW1lbXNldC1BUEkucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSAyMGJhZGMzZTM2MDg5NTNmYjViMzZiYjJlMTZmYTUxYmQ3MzFhZWJjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMTggQXByIDIwMTcgMDk6MzU6MzUgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gcmVwbGFjZSBfX2J6ZXJvKCkgd2l0aCBtZW1zZXQoKSBBUEkKKworbWVtc2V0IGlzIGF2YWlsYWJsZSBhY3Jvc3MgYWxsIGxpYmMgaW1wbGVtZW50YXRpb24KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBzcmMvZGVzX2ltcGwuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9kZXNfaW1wbC5jIGIvc3JjL2Rlc19pbXBsLmMKK2luZGV4IDlkYmNjYWYuLjE1YmVjMmEgMTAwNjQ0CistLS0gYS9zcmMvZGVzX2ltcGwuYworKysrIGIvc3JjL2Rlc19pbXBsLmMKK0BAIC01ODgsNyArNTg4LDcgQEAgX2Rlc19jcnlwdCAoY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIHN0cnVjdCBkZXNwYXJhbXMgKmRlc3ApCisgICAgIH0KKyAgIHRpbjAgPSB0aW4xID0gdG91dDAgPSB0b3V0MSA9IHhvcjAgPSB4b3IxID0gMDsKKyAgIHRidWZbMF0gPSB0YnVmWzFdID0gMDsKKy0gIF9fYnplcm8gKHNjaGVkdWxlLCBzaXplb2YgKHNjaGVkdWxlKSk7CisrICBtZW1zZXQgKHNjaGVkdWxlLCAwLCBzaXplb2YgKHNjaGVkdWxlKSk7CisgCisgICByZXR1cm4gKDEpOworIH0KKy0tIAorMi4xMi4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidGlycGMvbGlidGlycGMvZXhwb3J0X2tleV9zZWNyZXRrZXlfaXNfc2V0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwYy9leHBvcnRfa2V5X3NlY3JldGtleV9pc19zZXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI3NmJhMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidGlycGMvbGlidGlycGMvZXhwb3J0X2tleV9zZWNyZXRrZXlfaXNfc2V0LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK0FkZCBrZXlfc2VjcmV0a2V5X2lzX3NldCB0byBleHBvcnRlZCBzeW1ib2xzIG1hcAorCitrZXlfc2VjcmV0X2lzX3NldCBpcyBhIHR5cG8gaW4gbGlidGlycGMgbWFwCitQYXRjaCB0YWtlbiBmcm9tCisKK2h0dHBzOi8vc291cmNlZm9yZ2UubmV0L3AvbGlidGlycGMvZGlzY3Vzc2lvbi82MzczMjEvdGhyZWFkL2ZkNzNkNDMxLworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IGxpYnRpcnBjLTEuMC4xL3NyYy9saWJ0aXJwYy5tYXAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ0aXJwYy0xLjAuMS5vcmlnL3NyYy9saWJ0aXJwYy5tYXAKKysrKyBsaWJ0aXJwYy0xLjAuMS9zcmMvbGlidGlycGMubWFwCitAQCAtMjk4LDcgKzI5OCw3IEBAIFRJUlBDXzAuMy4yIHsKKyAgICAga2V5X2dlbmRlczsKKyAgICAga2V5X2dldF9jb252OworICAgICBrZXlfc2V0c2VjcmV0OworLSAgICBrZXlfc2VjcmV0X2lzX3NldDsKKysgICAga2V5X3NlY3JldGtleV9pc19zZXQ7CisgICAgIGtleV9zZXRuZXQ7CisgICAgIG5ldG5hbWUyaG9zdDsKKyAgICAgbmV0bmFtZTJ1c2VyOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwYy9saWJ0aXJwYy0wLjIuMS1mb3J0aWZ5LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwYy9saWJ0aXJwYy0wLjIuMS1mb3J0aWZ5LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTc4NWQzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidGlycGMvbGlidGlycGMvbGlidGlycGMtMC4yLjEtZm9ydGlmeS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLUZpeCBhIHBvc3NpYmxlIG92ZXJmbG93IChyZXBvcnRlZCBieSBfRk9SVElGWV9TT1VSQ0U9MikKLQotUG9ydGVkIGZyb20gR2VudG9vCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi1JbmRleDogbGlidGlycGMtMC4yLjEvc3JjL2dldHJwY3BvcnQuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGxpYnRpcnBjLTAuMi4xLm9yaWcvc3JjL2dldHJwY3BvcnQuYwotKysrIGxpYnRpcnBjLTAuMi4xL3NyYy9nZXRycGNwb3J0LmMKLUBAIC01NCwxMSArNTQsMTEgQEAgZ2V0cnBjcG9ydChob3N0LCBwcm9nbnVtLCB2ZXJzbnVtLCBwcm90bwotIAotIAlpZiAoKGhwID0gZ2V0aG9zdGJ5bmFtZShob3N0KSkgPT0gTlVMTCkKLSAJCXJldHVybiAoMCk7Ci0rCWlmIChocC0+aF9sZW5ndGggIT0gc2l6ZW9mKGFkZHIuc2luX2FkZHIuc19hZGRyKSkKLSsJCXJldHVybiAoMCk7Ci0gCW1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKLSAJYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSAJYWRkci5zaW5fcG9ydCA9ICAwOwotLQlpZiAoaHAtPmhfbGVuZ3RoID4gc2l6ZW9mKGFkZHIpKQotLQkgIGhwLT5oX2xlbmd0aCA9IHNpemVvZihhZGRyKTsKLSAJbWVtY3B5KCZhZGRyLnNpbl9hZGRyLnNfYWRkciwgaHAtPmhfYWRkciwgKHNpemVfdClocC0+aF9sZW5ndGgpOwotIAkvKiBJbmNvbnNpc3RlbnQgaW50ZXJmYWNlcyBuZWVkIGNhc3RzISA6LSggKi8KLSAJcmV0dXJuIChwbWFwX2dldHBvcnQoJmFkZHIsICh1X2xvbmcpcHJvZ251bSwgKHVfbG9uZyl2ZXJzbnVtLCAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidGlycGMvbGlidGlycGMvcmVtb3ZlLWRlcy1mdW5jdGlvbmFsaXR5LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwYy9yZW1vdmUtZGVzLWZ1bmN0aW9uYWxpdHkucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMmU5MzQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwYy9yZW1vdmUtZGVzLWZ1bmN0aW9uYWxpdHkucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotdWNsaWJjIGFuZCBtdXNsIGRvZXMgbm90IHByb3ZpZGUgZGVzIGZ1bmN0aW9uYWxpdHkuIExldHMgZGlzYWJsZSBpdC4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1Y2xpYmMgYW5kIG11c2wgc3BlY2lmaWNdCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1TaWduZWQtb2ZmLWJ5OiBUaG9tYXMgUGV0YXp6b25pIDx0aG9tYXMucGV0YXp6b25pQGZyZWUtZWxlY3Ryb25zLmNvbT4KLVNpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPgotLS0tCi1kaWZmIC1OYXVyIGxpYnRpcnBjLTEuMC4xLW9yaWcvc3JjL01ha2VmaWxlLmFtIGxpYnRpcnBjLTEuMC4xL3NyYy9NYWtlZmlsZS5hbQotLS0tIGxpYnRpcnBjLTEuMC4xLW9yaWcvc3JjL01ha2VmaWxlLmFtCTIwMTUtMTAtMzAgMTc6MTU6MTQuMDAwMDAwMDAwICswMjAwCi0rKysgbGlidGlycGMtMS4wLjEvc3JjL01ha2VmaWxlLmFtCTIwMTUtMTItMjEgMTU6NTY6MTcuMDk0NzAyNDI5ICswMjAwCi1AQCAtMjIsOSArMjIsOCBAQAotICAgICAgICAgcG1hcF9wcm90LmMgcG1hcF9wcm90Mi5jIHBtYXBfcm10LmMgcnBjX3Byb3QuYyBycGNfY29tbW9uZGF0YS5jIFwKLSAgICAgICAgIHJwY19jYWxsbXNnLmMgcnBjX2dlbmVyaWMuYyBycGNfc29jLmMgcnBjYl9jbG50LmMgcnBjYl9wcm90LmMgXAotICAgICAgICAgcnBjYl9zdF94ZHIuYyBzdmMuYyBzdmNfYXV0aC5jIHN2Y19kZy5jIHN2Y19hdXRoX3VuaXguYyBzdmNfYXV0aF9ub25lLmMgXAotLQlzdmNfYXV0aF9kZXMuYyBcCi0gICAgICAgICBzdmNfZ2VuZXJpYy5jIHN2Y19yYXcuYyBzdmNfcnVuLmMgc3ZjX3NpbXBsZS5jIHN2Y192Yy5jIGdldHBlZXJlaWQuYyBcCi0tICAgICAgICBhdXRoX3RpbWUuYyBhdXRoX2Rlcy5jIGF1dGhkZXNfcHJvdC5jIGRlYnVnLmMKLSsgICAgICAgIGRlYnVnLmMKLSAKLSAjIyBYRFIKLSBsaWJ0aXJwY19sYV9TT1VSQ0VTICs9IHhkci5jIHhkcl9yZWMuYyB4ZHJfYXJyYXkuYyB4ZHJfZmxvYXQuYyB4ZHJfbWVtLmMgeGRyX3JlZmVyZW5jZS5jIHhkcl9zdGRpby5jIHhkcl9zaXplb2YuYwotQEAgLTQxLDggKzQwLDggQEAKLSAgICAgbGlidGlycGNfbGFfQ0ZMQUdTID0gLURIQVZFX1JQQ1NFQ19HU1MgJChHU1NBUElfQ0ZMQUdTKQotIGVuZGlmCi0gCi0tbGlidGlycGNfbGFfU09VUkNFUyArPSBrZXlfY2FsbC5jIGtleV9wcm90X3hkci5jIGdldHB1YmxpY2tleS5jCi0tbGlidGlycGNfbGFfU09VUkNFUyArPSBuZXRuYW1lLmMgbmV0bmFtZXIuYyBycGNkbmFtZS5jIHJ0aW1lLmMKLSsjbGlidGlycGNfbGFfU09VUkNFUyArPSBrZXlfY2FsbC5jIGtleV9wcm90X3hkci5jIGdldHB1YmxpY2tleS5jCi0rI2xpYnRpcnBjX2xhX1NPVVJDRVMgKz0gbmV0bmFtZS5jIG5ldG5hbWVyLmMgcnBjZG5hbWUuYyBydGltZS5jCi0gCi0gQ0xFQU5GSUxFUwkgICAgICAgPSBjc2NvcGUuKiAqfgotIERJU1RDTEVBTkZJTEVTCSAgICAgICA9IE1ha2VmaWxlLmluCi1kaWZmIC1OYXVyIGxpYnRpcnBjLTEuMC4xLW9yaWcvc3JjL3JwY19zb2MuYyBsaWJ0aXJwYy0xLjAuMS9zcmMvcnBjX3NvYy5jCi0tLS0gbGlidGlycGMtMS4wLjEtb3JpZy9zcmMvcnBjX3NvYy5jCTIwMTUtMTAtMzAgMTc6MTU6MTQuMDAwMDAwMDAwICswMjAwCi0rKysgbGlidGlycGMtMS4wLjEvc3JjL3JwY19zb2MuYwkyMDE1LTEyLTIxIDE1OjU2OjE3LjA5NTcwMjQxNiArMDIwMAotQEAgLTYxLDcgKzYxLDYgQEAKLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotICNpbmNsdWRlIDxmY250bC5oPgotLSNpbmNsdWRlIDxycGNzdmMvbmlzLmg+Ci0gCi0gI2luY2x1ZGUgInJwY19jb20uaCIKLSAKLUBAIC01MjIsODYgKzUyMSw2IEBACi0gfQotIAotIC8qCi0tICogQ3JlYXRlIHRoZSBjbGllbnQgZGVzIGF1dGhlbnRpY2F0aW9uIG9iamVjdC4gT2Jzb2xldGVkIGJ5Ci0tICogYXV0aGRlc19zZWNjcmVhdGUoKS4KLS0gKi8KLS1BVVRIICoKLS1hdXRoZGVzX2NyZWF0ZShzZXJ2ZXJuYW1lLCB3aW5kb3csIHN5bmNhZGRyLCBja2V5KQotLQljaGFyICpzZXJ2ZXJuYW1lOwkJLyogbmV0d29yayBuYW1lIG9mIHNlcnZlciAqLwotLQl1X2ludCB3aW5kb3c7CQkJLyogdGltZSB0byBsaXZlICovCi0tCXN0cnVjdCBzb2NrYWRkciAqc3luY2FkZHI7CS8qIG9wdGlvbmFsIGhvc3RhZGRyIHRvIHN5bmMgd2l0aCAqLwotLQlkZXNfYmxvY2sgKmNrZXk7CQkvKiBvcHRpb25hbCBjb252ZXJzYXRpb24ga2V5IHRvIHVzZSAqLwotLXsKLS0JQVVUSCAqbmF1dGg7Ci0tCWNoYXIgaG9zdG5hbWVbTklfTUFYSE9TVF07Ci0tCi0tCWlmIChzeW5jYWRkcikgewotLQkJLyoKLS0JCSAqIENoYW5nZSBhZGRyIHRvIGhvc3RuYW1lLCBiZWNhdXNlIHRoYXQgaXMgdGhlIHdheQotLQkJICogbmV3IGludGVyZmFjZSB0YWtlcyBpdC4KLS0JCSAqLwotLQkgICAgICAgIHN3aXRjaCAoc3luY2FkZHItPnNhX2ZhbWlseSkgewotLQkJY2FzZSBBRl9JTkVUOgotLQkJICBpZiAoZ2V0bmFtZWluZm8oc3luY2FkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pLCBob3N0bmFtZSwKLS0JCQkJICBzaXplb2YgaG9zdG5hbWUsIE5VTEwsIDAsIDApICE9IDApCi0tCQkgICAgZ290byBmYWxsYmFjazsKLS0JCSAgYnJlYWs7Ci0tCQljYXNlIEFGX0lORVQ2OgotLQkJICBpZiAoZ2V0bmFtZWluZm8oc3luY2FkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSwgaG9zdG5hbWUsCi0tCQkJCSAgc2l6ZW9mIGhvc3RuYW1lLCBOVUxMLCAwLCAwKSAhPSAwKQotLQkJICAgIGdvdG8gZmFsbGJhY2s7Ci0tCQkgIGJyZWFrOwotLQkJZGVmYXVsdDoKLS0JCSAgZ290byBmYWxsYmFjazsKLS0JCX0KLS0JCW5hdXRoID0gYXV0aGRlc19zZWNjcmVhdGUoc2VydmVybmFtZSwgd2luZG93LCBob3N0bmFtZSwgY2tleSk7Ci0tCQlyZXR1cm4gKG5hdXRoKTsKLS0JfQotLWZhbGxiYWNrOgotLQlyZXR1cm4gYXV0aGRlc19zZWNjcmVhdGUoc2VydmVybmFtZSwgd2luZG93LCBOVUxMLCBja2V5KTsKLS19Ci0tCi0tLyoKLS0gKiBDcmVhdGUgdGhlIGNsaWVudCBkZXMgYXV0aGVudGljYXRpb24gb2JqZWN0LiBPYnNvbGV0ZWQgYnkKLS0gKiBhdXRoZGVzX3BrX3NlY2NyZWF0ZSgpLgotLSAqLwotLWV4dGVybiBBVVRIICphdXRoZGVzX3BrX3NlY2NyZWF0ZShjb25zdCBjaGFyICosIG5ldG9iaiAqLCB1X2ludCwgY29uc3QgY2hhciAqLAotLSAgICAgICAgY29uc3QgZGVzX2Jsb2NrICosIG5pc19zZXJ2ZXIgKik7Ci0tCi0tQVVUSCAqCi0tYXV0aGRlc19wa19jcmVhdGUoc2VydmVybmFtZSwgcGtleSwgd2luZG93LCBzeW5jYWRkciwgY2tleSkKLS0JY2hhciAqc2VydmVybmFtZTsJCS8qIG5ldHdvcmsgbmFtZSBvZiBzZXJ2ZXIgKi8KLS0JbmV0b2JqICpwa2V5OwkJCS8qIHB1YmxpYyBrZXkgKi8KLS0JdV9pbnQgd2luZG93OwkJCS8qIHRpbWUgdG8gbGl2ZSAqLwotLQlzdHJ1Y3Qgc29ja2FkZHIgKnN5bmNhZGRyOwkvKiBvcHRpb25hbCBob3N0YWRkciB0byBzeW5jIHdpdGggKi8KLS0JZGVzX2Jsb2NrICpja2V5OwkJLyogb3B0aW9uYWwgY29udmVyc2F0aW9uIGtleSB0byB1c2UgKi8KLS17Ci0tCUFVVEggKm5hdXRoOwotLQljaGFyIGhvc3RuYW1lW05JX01BWEhPU1RdOwotLQotLQlpZiAoc3luY2FkZHIpIHsKLS0JCS8qCi0tCQkgKiBDaGFuZ2UgYWRkciB0byBob3N0bmFtZSwgYmVjYXVzZSB0aGF0IGlzIHRoZSB3YXkKLS0JCSAqIG5ldyBpbnRlcmZhY2UgdGFrZXMgaXQuCi0tCQkgKi8KLS0JICAgICAgICBzd2l0Y2ggKHN5bmNhZGRyLT5zYV9mYW1pbHkpIHsKLS0JCWNhc2UgQUZfSU5FVDoKLS0JCSAgaWYgKGdldG5hbWVpbmZvKHN5bmNhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSwgaG9zdG5hbWUsCi0tCQkJCSAgc2l6ZW9mIGhvc3RuYW1lLCBOVUxMLCAwLCAwKSAhPSAwKQotLQkJICAgIGdvdG8gZmFsbGJhY2s7Ci0tCQkgIGJyZWFrOwotLQkJZGVmYXVsdDoKLS0JCSAgZ290byBmYWxsYmFjazsKLS0JCX0KLS0JCW5hdXRoID0gYXV0aGRlc19wa19zZWNjcmVhdGUoc2VydmVybmFtZSwgcGtleSwgd2luZG93LCBob3N0bmFtZSwgY2tleSwgTlVMTCk7Ci0tCQlyZXR1cm4gKG5hdXRoKTsKLS0JfQotLWZhbGxiYWNrOgotLQlyZXR1cm4gYXV0aGRlc19wa19zZWNjcmVhdGUoc2VydmVybmFtZSwgcGtleSwgd2luZG93LCBOVUxMLCBja2V5LCBOVUxMKTsKLS19Ci0tCi0tCi0tLyoKLSAgKiBDcmVhdGUgYSBjbGllbnQgaGFuZGxlIGZvciBhIHVuaXggY29ubmVjdGlvbi4gT2Jzb2xldGVkIGJ5IGNsbnRfdmNfY3JlYXRlKCkKLSAgKi8KLSBDTElFTlQgKgotZGlmZiAtTmF1ciBsaWJ0aXJwYy0xLjAuMS1vcmlnL3NyYy9zdmNfYXV0aC5jIGxpYnRpcnBjLTEuMC4xL3NyYy9zdmNfYXV0aC5jCi0tLS0gbGlidGlycGMtMS4wLjEtb3JpZy9zcmMvc3ZjX2F1dGguYwkyMDE1LTEwLTMwIDE3OjE1OjE0LjAwMDAwMDAwMCArMDIwMAotKysrIGxpYnRpcnBjLTEuMC4xL3NyYy9zdmNfYXV0aC5jCTIwMTUtMTItMjEgMTU6NTY6MTcuMDk1NzAyNDE2ICswMjAwCi1AQCAtMTE0LDkgKzExNCw2IEBACi0gCWNhc2UgQVVUSF9TSE9SVDoKLSAJCWR1bW15ID0gX3N2Y2F1dGhfc2hvcnQocnFzdCwgbXNnKTsKLSAJCXJldHVybiAoZHVtbXkpOwotLQljYXNlIEFVVEhfREVTOgotLQkJZHVtbXkgPSBfc3ZjYXV0aF9kZXMocnFzdCwgbXNnKTsKLS0JCXJldHVybiAoZHVtbXkpOwotICNpZmRlZiBIQVZFX1JQQ1NFQ19HU1MKLSAJY2FzZSBSUENTRUNfR1NTOgotIAkJZHVtbXkgPSBfc3ZjYXV0aF9nc3MocnFzdCwgbXNnLCBub19kaXNwYXRjaCk7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjXzEuMC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwY18xLjAuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMyMWQ0Ny4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjXzEuMC4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotU1VNTUFSWSA9ICJUcmFuc3BvcnQtSW5kZXBlbmRlbnQgUlBDIGxpYnJhcnkiCi1ERVNDUklQVElPTiA9ICJMaWJ0aXJwYyBpcyBhIHBvcnQgb2YgU3VucyBUcmFuc3BvcnQtSW5kZXBlbmRlbnQgUlBDIGxpYnJhcnkgdG8gTGludXgiCi1TRUNUSU9OID0gImxpYnMvbmV0d29yayIKLUhPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGlidGlycGMvIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTE4MzA3NSZhdGlkPTkwMzc4NCIKLUxJQ0VOU0UgPSAiQlNEIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjgzNWNjZTg4NTI0ODFlNGIyYmJiZGQyM2I1ZTQ3ZjMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL25ldG5hbWUuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTI3O21kNT1mOGE4Y2QyY2IyNWFjNWFhMTY3NjczNjRmYjBlM2MyNCIKLQotUFJPVklERVMgPSAidmlydHVhbC9saWJycGMiCi0KLVNSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9LyR7QlBOfS8ke0JQfS50YXIuYnoyO25hbWU9bGlidGlycGMgXAotICAgICAgICAgICAke0dFTlRPT19NSVJST1J9LyR7QlBOfS1nbGliYy1uZnMudGFyLnh6O25hbWU9Z2xpYmMtbmZzIFwKLSAgICAgICAgICAgZmlsZTovL2xpYnRpcnBjLTAuMi4xLWZvcnRpZnkucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1BZGQtbWlzc2luZy1yd2xvY2tfdW5sb2Nrcy1pbi14cHJ0X3JlZ2lzdGVyLnBhdGNoIFwKLSAgICAgICAgICAiCi0KLVNSQ19VUklfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiBmaWxlOi8vcmVtb3ZlLWRlcy1mdW5jdGlvbmFsaXR5LnBhdGNoIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgotCi1TUkNfVVJJX2FwcGVuZF9saWJjLW11c2wgPSAiIGZpbGU6Ly9yZW1vdmUtZGVzLWZ1bmN0aW9uYWxpdHkucGF0Y2ggXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vVXNlLW5ldGJzZC1xdWV1ZS5oLnBhdGNoIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIKLQotU1JDX1VSSVtsaWJ0aXJwYy5tZDVzdW1dID0gIjM2Y2UxYzBmZjgwODYzYmIwODM5ZDU0YWEwYjk0MDE0IgotU1JDX1VSSVtsaWJ0aXJwYy5zaGEyNTZzdW1dID0gIjUxNTY5NzRmMzFiZTdjY2JjOGFiMWRlMzdjNDczOWFmNmQ5ZDQyYzg3YjFkNWNhZjQ4MzVkZGE3NWZjYmI4OWUiCi1TUkNfVVJJW2dsaWJjLW5mcy5tZDVzdW1dID0gIjVhZTUwMGI5ZDBiNmI3MmNiODc1YmMwNDk0NGI5NDQ1IgotU1JDX1VSSVtnbGliYy1uZnMuc2hhMjU2c3VtXSA9ICIyNjc3Y2ZlZGY2MjZmM2Y1YThmNmU1MDdhZWQ1YmI4Zjc5YTc0NTNiNTg5ZDY4NGRiYmMwODZlNzU1MTcwZDgzIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKLQotRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1nc3NhcGkiCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKLSAgICAgICAgY3AgLXIgJHtTfS8uLi90aXJwYyAke1N9Ci19Ci0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotICAgICAgICBjaG93biByb290OnJvb3QgJHtEfSR7c3lzY29uZmRpcn0vbmV0Y29uZmlnCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjXzEuMC4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwY18xLjAuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTcxOGM1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwY18xLjAuMi5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIlRyYW5zcG9ydC1JbmRlcGVuZGVudCBSUEMgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIkxpYnRpcnBjIGlzIGEgcG9ydCBvZiBTdW5zIFRyYW5zcG9ydC1JbmRlcGVuZGVudCBSUEMgbGlicmFyeSB0byBMaW51eCIKK1NFQ1RJT04gPSAibGlicy9uZXR3b3JrIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saWJ0aXJwYy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MTgzMDc1JmF0aWQ9OTAzNzg0IgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mODM1Y2NlODg1MjQ4MWU0YjJiYmJkZDIzYjVlNDdmMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbmV0bmFtZS5jO2JlZ2lubGluZT0xO2VuZGxpbmU9Mjc7bWQ1PWY4YThjZDJjYjI1YWM1YWExNjc2NzM2NGZiMGUzYzI0IgorCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYnJwYyIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vJHtCUE59LyR7QlB9LnRhci5iejI7bmFtZT1saWJ0aXJwYyBcCisgICAgICAgICAgICR7R0VOVE9PX01JUlJPUn0vJHtCUE59LWdsaWJjLW5mcy50YXIueHo7bmFtZT1nbGliYy1uZnMgXAorICAgICAgICAgICBmaWxlOi8vZXhwb3J0X2tleV9zZWNyZXRrZXlfaXNfc2V0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcmVwbGFjZS1fX2J6ZXJvLXdpdGgtbWVtc2V0LUFQSS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWluY2x1ZGUtc3RkaW50LmgtZm9yLXVpbnRwdHJfdC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSV9hcHBlbmRfbGliYy1tdXNsID0gIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9Vc2UtbmV0YnNkLXF1ZXVlLmgucGF0Y2ggXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorCitTUkNfVVJJW2xpYnRpcnBjLm1kNXN1bV0gPSAiZDVhMzdmMWRjY2VjNDg0ZjljYWJlMmI5N2U1NGU5YTYiCitTUkNfVVJJW2xpYnRpcnBjLnNoYTI1NnN1bV0gPSAiNzIzYzVjZTkyNzA2Y2JiNjAxYThkYjA5MTEwZGYxYjRiNjkzOTE2NDMxNThmMjBmZjU4N2UyMGU3YzVmOTBmNSIKK1NSQ19VUklbZ2xpYmMtbmZzLm1kNXN1bV0gPSAiNWFlNTAwYjlkMGI2YjcyY2I4NzViYzA0OTQ0Yjk0NDUiCitTUkNfVVJJW2dsaWJjLW5mcy5zaGEyNTZzdW1dID0gIjI2NzdjZmVkZjYyNmYzZjVhOGY2ZTUwN2FlZDViYjhmNzlhNzQ1M2I1ODlkNjg0ZGJiYzA4NmU3NTUxNzBkODMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWdzc2FwaSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworICAgICAgICBjcCAtciAke1dPUktESVJ9L3RpcnBjICR7U30KK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgICAgIGNob3duIHJvb3Q6cm9vdCAke0R9JHtzeXNjb25mZGlyfS9uZXRjb25maWcKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS9hY3QtYXMtbXYtd2hlbi1yb3RhdGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGUvYWN0LWFzLW12LXdoZW4tcm90YXRlLnBhdGNoCmluZGV4IDJlOTMxYTIuLjA0Y2I1ODggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS9hY3QtYXMtbXYtd2hlbi1yb3RhdGUucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sb2dyb3RhdGUvbG9ncm90YXRlL2FjdC1hcy1tdi13aGVuLXJvdGF0ZS5wYXRjaApAQCAtMSw0ICsxLDQgQEAKLUZyb20gNjhmMjlhYjQ5MGNmOTg3YWEzNGI1ZjRjYWYxNzg0YjU4YTAyMTMwOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gNTE3Y2JmZjY2YzhiZGJmNDU1YmMzYjdjMWE4NWE0Zjk5MGQwZjlhNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgogRGF0ZTogVHVlLCAxNyBGZWIgMjAxNSAyMTowODowNyAtMDgwMAogU3ViamVjdDogW1BBVENIXSBBY3QgYXMgdGhlICJtdiIgY29tbWFuZCB3aGVuIHJvdGF0ZSBsb2cKQEAgLTEwLDE0ICsxMCwxNCBAQAogCiBTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KIC0tLQotIGxvZ3JvdGF0ZS5jIHwgICA3MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCA1OSBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKKyBsb2dyb3RhdGUuYyB8IDcyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNjAgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9sb2dyb3RhdGUuYyBiL2xvZ3JvdGF0ZS5jCi1pbmRleCBkM2RlYjZhLi5jZjhiZjJjIDEwMDY0NAoraW5kZXggNGFkNThkNC4uYmEwNTg4NCAxMDA2NDQKIC0tLSBhL2xvZ3JvdGF0ZS5jCiArKysgYi9sb2dyb3RhdGUuYwotQEAgLTExNTcsNiArMTE1Nyw1MyBAQCBpbnQgZmluZE5lZWRSb3RhdGluZyhzdHJ1Y3QgbG9nSW5mbyAqbG9nLCBpbnQgbG9nTnVtLCBpbnQgZm9yY2UpCitAQCAtMTMxNSw2ICsxMzE1LDU0IEBAIHN0YXRpYyBpbnQgZmluZE5lZWRSb3RhdGluZyhzdHJ1Y3QgbG9nSW5mbyAqbG9nLCBpbnQgbG9nTnVtLCBpbnQgZm9yY2UpCiAgICAgIHJldHVybiAwOwogIH0KICAKQEAgLTY4LDEwICs2OCwxMSBAQAogKyAgICByZXR1cm4gMTsKICt9CiArCi0gaW50IHByZXJvdGF0ZVNpbmdsZUxvZyhzdHJ1Y3QgbG9nSW5mbyAqbG9nLCBpbnQgbG9nTnVtLCBzdHJ1Y3QgbG9nU3RhdGUgKnN0YXRlLAotIAkJICAgICAgIHN0cnVjdCBsb2dOYW1lcyAqcm90TmFtZXMpCisrCisgc3RhdGljIGludCBwcmVyb3RhdGVTaW5nbGVMb2coc3RydWN0IGxvZ0luZm8gKmxvZywgaW50IGxvZ051bSwKKyAJCQkgICAgICBzdHJ1Y3QgbG9nU3RhdGUgKnN0YXRlLCBzdHJ1Y3QgbG9nTmFtZXMgKnJvdE5hbWVzKQogIHsKLUBAIC0xNTIzLDE1ICsxNTcwLDE1IEBAIGludCBwcmVyb3RhdGVTaW5nbGVMb2coc3RydWN0IGxvZ0luZm8gKmxvZywgaW50IGxvZ051bSwgc3RydWN0IGxvZ1N0YXRlICpzdGF0ZSwKK0BAIC0xNjc0LDE1ICsxNzIyLDE1IEBAIHN0YXRpYyBpbnQgcHJlcm90YXRlU2luZ2xlTG9nKHN0cnVjdCBsb2dJbmZvICpsb2csIGludCBsb2dOdW0sCiAgCQl9CiAgCiAgCSAgICBtZXNzYWdlKE1FU1NfREVCVUcsCkBAIC05MCw3ICs5MSw3IEBACiAgCQkJICAgIG9sZE5hbWUsIG5ld05hbWUsIHN0cmVycm9yKGVycm5vKSk7CiAgCQkgICAgaGFzRXJyb3JzID0gMTsKICAJCX0KLUBAIC0xNjY5LDIxICsxNzE2LDIxIEBAIGludCByb3RhdGVTaW5nbGVMb2coc3RydWN0IGxvZ0luZm8gKmxvZywgaW50IGxvZ051bSwgc3RydWN0IGxvZ1N0YXRlICpzdGF0ZSwKK0BAIC0xNzY3LDIxICsxODE1LDIxIEBAIHN0YXRpYyBpbnQgcm90YXRlU2luZ2xlTG9nKHN0cnVjdCBsb2dJbmZvICpsb2csIGludCBsb2dOdW0sCiAgCQkJCXJldHVybiAxOwogIAkJCX0KICAKQEAgLTExNSwxOSArMTE2LDE5IEBACiAtCQkJCW1lc3NhZ2UoTUVTU19FUlJPUiwgImZhaWxlZCB0byByZW5hbWUgJXMgdG8gJXM6ICVzXG4iLAogKwkJCW12RmlsZShsb2ctPmZpbGVzW2xvZ051bV0sIHJvdE5hbWVzLT5maW5hbE5hbWUsIGxvZywgcHJldl9hY2wpKSB7CiArCQkJCW1lc3NhZ2UoTUVTU19FUlJPUiwgImZhaWxlZCB0byBtb3ZlICVzIHRvICVzOiAlc1xuIiwKLSAJCQkJCWxvZy0+ZmlsZXNbbG9nTnVtXSwgdG1wRmlsZW5hbWUsCisgCQkJCQlsb2ctPmZpbGVzW2xvZ051bV0sIHJvdE5hbWVzLT5maW5hbE5hbWUsCiAgCQkJCQlzdHJlcnJvcihlcnJubykpOwogIAkJCQkJaGFzRXJyb3JzID0gMTsKLUBAIC0yMDYzLDcgKzIxMTAsNyBAQCBpbnQgcm90YXRlTG9nU2V0KHN0cnVjdCBsb2dJbmZvICpsb2csIGludCBmb3JjZSkKK0BAIC0yMTcwLDcgKzIyMTgsNyBAQCBzdGF0aWMgaW50IHJvdGF0ZUxvZ1NldChzdHJ1Y3QgbG9nSW5mbyAqbG9nLCBpbnQgZm9yY2UpCiAgICAgIHJldHVybiBoYXNFcnJvcnM7CiAgfQogIAotLXN0YXRpYyBpbnQgd3JpdGVTdGF0ZShjaGFyICpzdGF0ZUZpbGVuYW1lKQorLXN0YXRpYyBpbnQgd3JpdGVTdGF0ZShjb25zdCBjaGFyICpzdGF0ZUZpbGVuYW1lKQogK3N0YXRpYyBpbnQgd3JpdGVTdGF0ZShzdHJ1Y3QgbG9nSW5mbyAqbG9nLCBjaGFyICpzdGF0ZUZpbGVuYW1lKQogIHsKICAJc3RydWN0IGxvZ1N0YXRlICpwOwogIAlGSUxFICpmOwotQEAgLTIyMjcsNyArMjI3NCw3IEBAIHN0YXRpYyBpbnQgd3JpdGVTdGF0ZShjaGFyICpzdGF0ZUZpbGVuYW1lKQorQEAgLTIzMjIsNyArMjM3MCw3IEBAIHN0YXRpYyBpbnQgd3JpdGVTdGF0ZShjb25zdCBjaGFyICpzdGF0ZUZpbGVuYW1lKQogIAkJZmNsb3NlKGYpOwogIAogIAlpZiAoZXJyb3IgPT0gMCkgewpAQCAtMTM2LDcgKzEzNyw3IEBACiAgCQkJdW5saW5rKHRtcEZpbGVuYW1lKTsKICAJCQllcnJvciA9IDE7CiAgCQkJbWVzc2FnZShNRVNTX0VSUk9SLCAiZXJyb3IgcmVuYW1pbmcgdGVtcCBzdGF0ZSBmaWxlICVzXG4iLAotQEAgLTI1MjUsNyArMjU3Miw3IEBAIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK0BAIC0yNjQ4LDcgKzI2OTYsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiAgCQlyYyB8PSByb3RhdGVMb2dTZXQobG9nLCBmb3JjZSk7CiAgCiAgCWlmICghZGVidWcpCkBAIC0xNDUsMyArMTQ2LDYgQEAKICAKICAJcmV0dXJuIChyYyAhPSAwKTsKICB9CistLSAKKzEuOC4zLjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sb2dyb3RhdGUvbG9ncm90YXRlL3VwZGF0ZS10aGUtbWFudWFsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sb2dyb3RhdGUvbG9ncm90YXRlL3VwZGF0ZS10aGUtbWFudWFsLnBhdGNoCmluZGV4IDUwZDAzN2QuLjcyNTU2N2UgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS91cGRhdGUtdGhlLW1hbnVhbC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGUvdXBkYXRlLXRoZS1tYW51YWwucGF0Y2gKQEAgLTEsNCArMSw0IEBACi1Gcm9tIGUwYjBmZTMwZTljNDkyMzQ5OTRhMjBhODZhYWNmYWY4MGU2OTAwODcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIGJmMjJlODgwNWRmNjkzNDRmNmYyMGNlYTM5MGU4MjlhMjJmYTc0MWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KIERhdGU6IFR1ZSwgMTcgRmViIDIwMTUgMjE6MTQ6MzcgLTA4MDAKIFN1YmplY3Q6IFtQQVRDSF0gVXBkYXRlIHRoZSBtYW51YWwKQEAgLTksMTQgKzksMTQgQEAKIAogU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CiAtLS0KLSBsb2dyb3RhdGUuOCB8ICAgMTAgKysrKy0tLS0tLQorIGxvZ3JvdGF0ZS44LmluIHwgMTAgKysrKy0tLS0tLQogIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCiAKLWRpZmYgLS1naXQgYS9sb2dyb3RhdGUuOCBiL2xvZ3JvdGF0ZS44Ci1pbmRleCBlNGU1ZjQ4Li44NDQwN2QwIDEwMDY0NAotLS0tIGEvbG9ncm90YXRlLjgKLSsrKyBiL2xvZ3JvdGF0ZS44Ci1AQCAtNDA1LDEyICs0MDUsMTAgQEAgRG8gbm90IHJvdGF0ZSB0aGUgbG9nIGlmIGl0IGlzIGVtcHR5ICh0aGlzIG92ZXJyaWRlcyB0aGUgXGZCaWZlbXB0eVxmUiBvcHRpb24pLgorZGlmZiAtLWdpdCBhL2xvZ3JvdGF0ZS44LmluIGIvbG9ncm90YXRlLjguaW4KK2luZGV4IDk1MWU0MDYuLjU4MWJmNDggMTAwNjQ0CistLS0gYS9sb2dyb3RhdGUuOC5pbgorKysrIGIvbG9ncm90YXRlLjguaW4KK0BAIC00NDUsMTIgKzQ0NSwxMCBAQCBEbyBub3Qgcm90YXRlIHRoZSBsb2cgaWYgaXQgaXMgZW1wdHkgKHRoaXMgb3ZlcnJpZGVzIHRoZSBcZkJpZmVtcHR5XGZSIG9wdGlvbikuCiAgCiAgLlRQCiAgXGZCb2xkZGlyIFxmSWRpcmVjdG9yeVxmUgpAQCAtMzQsNSArMzQsNSBAQAogIAogIC5UUAogLS0gCi0xLjcuOS41CisxLjguMy4xCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZV8zLjEyLjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGVfMy4xMi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMGIyMDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGVfMy4xMi4zLmJiCkBAIC0wLDAgKzEsODUgQEAKK1NVTU1BUlkgPSAiUm90YXRlcywgY29tcHJlc3NlcywgcmVtb3ZlcyBhbmQgbWFpbHMgc3lzdGVtIGxvZyBmaWxlcyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9sb2dyb3RhdGUvbG9ncm90YXRlL2lzc3VlcyIKK0xJQ0VOU0UgPSAiR1BMdjIiCisKKyMgVE9ETzogRG9jdW1lbnQgY29yZXV0aWxzIGRlcGVuZGVuY3kuIFdoeSBub3QgUkRFUEVORFM/IFdoeSBub3QgYnVzeWJveD8KKworREVQRU5EUz0iY29yZXV0aWxzIHBvcHQiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgorCisjIFdoZW4gdXBkYXRpbmcgbG9ncm90YXRlIHRvIGxhdGVzdCB1cHN0cmVhbSwgU1JDX1VSSSBzaG91bGQgcG9pbnQgdG8KKyMgYSBwcm9wZXIgcmVsZWFzZSB0YXJiYWxsIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2xvZ3JvdGF0ZS9sb2dyb3RhdGUvcmVsZWFzZXMKKyMgYW5kIHdlIGhhdmUgdG8gdGFrZSB0aGUgc25hcHNob3QgZm9yIG5vdyBiZWNhdXNlIHRoZXJlIGlzIG5vIHN1Y2gKKyMgdGFyYmFsbCBhdmFpbGFibGUgZm9yIDMuOS4xLgorCitTID0gIiR7V09SS0RJUn0vJHtCUE59LSR7UFZ9IgorCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tLyR7QlBOfS8ke0JQTn0vcmVsZWFzZXMiCitVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJsb2dyb3RhdGUtKD9QPHB2ZXI+XGQrKFwuXGQrKSspLnRhciIKKworU1JDX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vJHtCUE59LyR7QlBOfS9yZWxlYXNlcy9kb3dubG9hZC8ke1BWfS8ke0JQfS50YXIueHogXAorICAgICAgICAgICAgZmlsZTovL2FjdC1hcy1tdi13aGVuLXJvdGF0ZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdXBkYXRlLXRoZS1tYW51YWwucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtY2hlY2stZGlmZmVyZW50LWZpbGVzeXN0ZW1zLnBhdGNoIFwKKyAgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImE1NjBjNTdmYWM4N2M0NWIyZmMxNzQwNmNkZjc5Mjg4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJlNmE0MDFjYWM5MDI0ZGIyMjg4Mjk3ZTNiZTFhOGFiNjBlNzQwMWJhOGU5MTIyNTIxOGFhZjRhMjdlODJhMDciCisKK1BBQ0tBR0VDT05GSUcgPz0gIiR7QGJiLnV0aWxzLmZpbHRlcignRElTVFJPX0ZFQVRVUkVTJywgJ2FjbCBzZWxpbnV4JywgZCl9IgorCitQQUNLQUdFQ09ORklHW2FjbF0gPSAiLCxhY2wiCitQQUNLQUdFQ09ORklHW3NlbGludXhdID0gIiwsbGlic2VsaW51eCIKKworQ09ORkZJTEVTXyR7UE59ICs9ICIke2xvY2Fsc3RhdGVkaXJ9L2xpYi9sb2dyb3RhdGUuc3RhdHVzIFwKKwkJICAgICR7c3lzY29uZmRpcn0vbG9ncm90YXRlLmNvbmYiCisKKyMgSWYgUlBNX09QVF9GTEFHUyBpcyB1bnNldCwgaXQgYWRkcyAtZyBpdHNlbGYgcmF0aGVyIHRoYW4gb2JleWluZyBvdXIKKyMgb3B0aW1pemF0aW9uIHZhcmlhYmxlcywgc28gdXNlIGl0IHJhdGhlciB0aGFuIEVYVFJBX0NGTEFHUy4KK0VYVFJBX09FTUFLRSA9ICJcCisgICAgTEZTPSBcCisgICAgT1NfTkFNRT0nJHtPU19OQU1FfScgXAorICAgICdDQz0ke0NDfScgXAorICAgICdSUE1fT1BUX0ZMQUdTPSR7Q0ZMQUdTfScgXAorICAgICdFWFRSQV9MREZMQUdTPSR7TERGTEFHU30nIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdhY2wnLCAnV0lUSF9BQ0w9eWVzJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnc2VsaW51eCcsICdXSVRIX1NFTElOVVg9eWVzJywgJycsIGQpfSBcCisiCisKKyMgT1NfTkFNRSBpbiB0aGUgbWFrZWZpbGUgZGVmYXVsdHMgdG8gYHVuYW1lIC1zYC4gVGhlIGJlaGF2aW9yIGZvcgorIyBmcmVlYnNkL25ldGJzZCBpcyBxdWVzdGlvbmFibGUsIHNvIGxlYXZlIGl0IGFzIExpbnV4LCB3aGljaCBvbmx5IHNldHMKKyMgSU5TVEFMTD1pbnN0YWxsIGFuZCBCQVNFRElSPS91c3IuCitPU19OQU1FID0gIkxpbnV4IgorCitpbmhlcml0IGF1dG90b29scyBzeXN0ZW1kCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJcCisgICAgJHtCUE59LnNlcnZpY2UgXAorICAgICR7QlBOfS50aW1lciBcCisiCisKK0xPR1JPVEFURV9TWVNURU1EX1RJTUVSX0JBU0lTID89ICJkYWlseSIKK0xPR1JPVEFURV9TWVNURU1EX1RJTUVSX0FDQ1VSQUNZID89ICIxMmgiCisKK2RvX2luc3RhbGwoKXsKKyAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9IFBSRUZJWD0ke0R9IE1BTkRJUj0ke21hbmRpcn0KKyAgICBta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9sb2dyb3RhdGUuZAorICAgIG1rZGlyIC1wICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYgorICAgIGluc3RhbGwgLXAgLW0gNjQ0ICR7U30vZXhhbXBsZXMvbG9ncm90YXRlLWRlZmF1bHQgJHtEfSR7c3lzY29uZmRpcn0vbG9ncm90YXRlLmNvbmYKKyAgICB0b3VjaCAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvbG9ncm90YXRlLnN0YXR1cworCisgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfQorICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9leGFtcGxlcy9sb2dyb3RhdGUuc2VydmljZSAke0R9JHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfS9sb2dyb3RhdGUuc2VydmljZQorICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9leGFtcGxlcy9sb2dyb3RhdGUudGltZXIgJHtEfSR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0vbG9ncm90YXRlLnRpbWVyCisgICAgICAgIHNlZCAtaSAtZSAncyxPbkNhbGVuZGFyPS4qJCxPbkNhbGVuZGFyPSR7TE9HUk9UQVRFX1NZU1RFTURfVElNRVJfQkFTSVN9LGcnICR7RH0ke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9L2xvZ3JvdGF0ZS50aW1lcgorICAgICAgICBzZWQgLWkgLWUgJ3MsQWNjdXJhY3lTZWM9LiokLEFjY3VyYWN5U2VjPSR7TE9HUk9UQVRFX1NZU1RFTURfVElNRVJfQUNDVVJBQ1l9LGcnICR7RH0ke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9L2xvZ3JvdGF0ZS50aW1lcgorICAgIGZpCisKKyAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKyAgICAgICAgbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vY3Jvbi5kYWlseQorICAgICAgICBpbnN0YWxsIC1wIC1tIDA3NTUgJHtTfS9leGFtcGxlcy9sb2dyb3RhdGUuY3JvbiAke0R9JHtzeXNjb25mZGlyfS9jcm9uLmRhaWx5L2xvZ3JvdGF0ZQorICAgIGZpCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGVfMy45LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGVfMy45LjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5MzhkOWYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sb2dyb3RhdGUvbG9ncm90YXRlXzMuOS4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotU1VNTUFSWSA9ICJSb3RhdGVzLCBjb21wcmVzc2VzLCByZW1vdmVzIGFuZCBtYWlscyBzeXN0ZW0gbG9nIGZpbGVzIgotU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgotSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL2xvZ3JvdGF0ZS9sb2dyb3RhdGUvaXNzdWVzIgotTElDRU5TRSA9ICJHUEx2MiIKLQotIyBUT0RPOiBsb2dyb3RhdGUgMy44LjggYWRkcyBhdXRvdG9vbHMvYXV0b21ha2Ugc3VwcG9ydCwgdXBkYXRlIHJlY2lwZSB0byB1c2UgaXQuCi0jIFRPRE86IERvY3VtZW50IGNvcmV1dGlscyBkZXBlbmRlbmN5LiBXaHkgbm90IFJERVBFTkRTPyBXaHkgbm90IGJ1c3lib3g/Ci0KLURFUEVORFM9ImNvcmV1dGlscyBwb3B0IgotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xODgxMDY2OWYxM2I4NzM0ODQ1OWU2MTFkMzFhYjc2MCIKLQotIyBXaGVuIHVwZGF0aW5nIGxvZ3JvdGF0ZSB0byBsYXRlc3QgdXBzdHJlYW0sIFNSQ19VUkkgc2hvdWxkIHBvaW50IHRvCi0jIGEgcHJvcGVyIHJlbGVhc2UgdGFyYmFsbCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2dyb3RhdGUvbG9ncm90YXRlL3JlbGVhc2VzCi0jIGFuZCB3ZSBoYXZlIHRvIHRha2UgdGhlIHNuYXBzaG90IGZvciBub3cgYmVjYXVzZSB0aGVyZSBpcyBubyBzdWNoCi0jIHRhcmJhbGwgYXZhaWxhYmxlIGZvciAzLjkuMS4KLQotUyA9ICIke1dPUktESVJ9LyR7QlBOfS1yMy05LTEiCi0KLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vJHtCUE59LyR7QlBOfS9yZWxlYXNlcyIKLQotU1JDX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vJHtCUE59LyR7QlBOfS9hcmNoaXZlL3IzLTktMS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vYWN0LWFzLW12LXdoZW4tcm90YXRlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3VwZGF0ZS10aGUtbWFudWFsLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtY2hlY2stZGlmZmVyZW50LWZpbGVzeXN0ZW1zLnBhdGNoIFwKLSAgICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjg1NzJiN2MyY2Y5YWRlMDlhOGE4ZTEwMDk4NTAwZmIzIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjViZjhlNDc4YzQyOGU3NzQ0ZmVmYTQ2NTExOGY4Mjk2ZTdlNzcxYzk4MWZiNmRmZmI3NTI3ODU2YTBlYTM2MTciCi0KLVBBQ0tBR0VDT05GSUcgPz0gIiR7QGJiLnV0aWxzLmZpbHRlcignRElTVFJPX0ZFQVRVUkVTJywgJ2FjbCBzZWxpbnV4JywgZCl9IgotCi1QQUNLQUdFQ09ORklHW2FjbF0gPSAiLCxhY2wiCi1QQUNLQUdFQ09ORklHW3NlbGludXhdID0gIiwsbGlic2VsaW51eCIKLQotQ09ORkZJTEVTXyR7UE59ICs9ICIke2xvY2Fsc3RhdGVkaXJ9L2xpYi9sb2dyb3RhdGUuc3RhdHVzIFwKLQkJICAgICR7c3lzY29uZmRpcn0vbG9ncm90YXRlLmNvbmYiCi0KLSMgSWYgUlBNX09QVF9GTEFHUyBpcyB1bnNldCwgaXQgYWRkcyAtZyBpdHNlbGYgcmF0aGVyIHRoYW4gb2JleWluZyBvdXIKLSMgb3B0aW1pemF0aW9uIHZhcmlhYmxlcywgc28gdXNlIGl0IHJhdGhlciB0aGFuIEVYVFJBX0NGTEFHUy4KLUVYVFJBX09FTUFLRSA9ICJcCi0gICAgTEZTPSBcCi0gICAgT1NfTkFNRT0nJHtPU19OQU1FfScgXAotICAgICdDQz0ke0NDfScgXAotICAgICdSUE1fT1BUX0ZMQUdTPSR7Q0ZMQUdTfScgXAotICAgICdFWFRSQV9MREZMQUdTPSR7TERGTEFHU30nIFwKLSAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdhY2wnLCAnV0lUSF9BQ0w9eWVzJywgJycsIGQpfSBcCi0gICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnc2VsaW51eCcsICdXSVRIX1NFTElOVVg9eWVzJywgJycsIGQpfSBcCi0iCi0KLSMgT1NfTkFNRSBpbiB0aGUgbWFrZWZpbGUgZGVmYXVsdHMgdG8gYHVuYW1lIC1zYC4gVGhlIGJlaGF2aW9yIGZvcgotIyBmcmVlYnNkL25ldGJzZCBpcyBxdWVzdGlvbmFibGUsIHNvIGxlYXZlIGl0IGFzIExpbnV4LCB3aGljaCBvbmx5IHNldHMKLSMgSU5TVEFMTD1pbnN0YWxsIGFuZCBCQVNFRElSPS91c3IuCi1PU19OQU1FID0gIkxpbnV4IgotCi1kb19jb21waWxlX3ByZXBlbmQoKSB7Ci0gICAgIyBNYWtlIHN1cmUgdGhlIHJlY29tcGlsZSBpcyBPSwotICAgIHJtIC1mICR7Qn0vLmRlcGVuZAotfQotCi1kb19pbnN0YWxsKCl7Ci0gICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSBQUkVGSVg9JHtEfSBNQU5ESVI9JHttYW5kaXJ9Ci0gICAgbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vbG9ncm90YXRlLmQKLSAgICBta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9jcm9uLmRhaWx5Ci0gICAgbWtkaXIgLXAgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliCi0gICAgaW5zdGFsbCAtcCAtbSA2NDQgZXhhbXBsZXMvbG9ncm90YXRlLWRlZmF1bHQgJHtEfSR7c3lzY29uZmRpcn0vbG9ncm90YXRlLmNvbmYKLSAgICBpbnN0YWxsIC1wIC1tIDc1NSBleGFtcGxlcy9sb2dyb3RhdGUuY3JvbiAke0R9JHtzeXNjb25mZGlyfS9jcm9uLmRhaWx5L2xvZ3JvdGF0ZQotICAgIHRvdWNoICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9sb2dyb3RhdGUuc3RhdHVzCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2JfNC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiXzQuMS5iYgppbmRleCBjZWRmMzllLi4wNzg1NjEwIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2JfNC4xLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYl80LjEuYmIKQEAgLTIyLDYgKzIyLDcgQEAKICAgICAgICAgICAgZmlsZTovL2xzYl9waWRvZnByb2MgXAogICAgICAgICAgICBmaWxlOi8vbHNiX3N0YXJ0X2RhZW1vbiBcCiAgICAgICAgICAgICIKK1VQU1RSRUFNX1ZFUlNJT05fVU5LTk9XTiA9ICIxIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiMzA1MzdlZjVhMDFlMGNhOTRiN2I4ZWI2YTM2YmIxZTQiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTkzMjEyODhmOGQ2MmU3YTFkNDg1YjdjNmJkY2NmMDY3NjZmYjhjYTYwM2M2MTk1ODA2ZTQ0NTdmZGYxNzE3MiIKQEAgLTkwLDExICs5MSwxMyBAQAogICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQtZnVuY3Rpb25zICR7RH0ke25vbmFyY2hfYmFzZV9saWJkaXJ9L2xzYgogCiAgICAgICAgIyBjcmVhdGUgbGlua3MgZm9yIExTQiB0ZXN0Ci0gICAgICAgaWYgWyAiJHtub25hcmNoX2Jhc2VfbGliZGlyfSIgIT0gIiR7bm9uYXJjaF9saWJkaXJ9IiBdIDsgdGhlbgotICAgICAgICAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtub25hcmNoX2xpYmRpcn0vbHNiCisgICAgICAgaWYgWyAtZSAke3NiaW5kaXJ9L2Noa2NvbmZpZyBdOyB0aGVuCisgICAgICAgICAgICAgICBpZiBbICIke25vbmFyY2hfYmFzZV9saWJkaXJ9IiAhPSAiJHtub25hcmNoX2xpYmRpcn0iIF0gOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7bm9uYXJjaF9saWJkaXJ9L2xzYgorICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgIGxuIC1zZiAke3NiaW5kaXJ9L2Noa2NvbmZpZyAke0R9JHtub25hcmNoX2xpYmRpcn0vbHNiL2luc3RhbGxfaW5pdGQKKyAgICAgICAgICAgICAgIGxuIC1zZiAke3NiaW5kaXJ9L2Noa2NvbmZpZyAke0R9JHtub25hcmNoX2xpYmRpcn0vbHNiL3JlbW92ZV9pbml0ZAogICAgICAgIGZpCi0gICAgICAgbG4gLXNmICR7c2JpbmRpcn0vY2hrY29uZmlnICR7RH0ke25vbmFyY2hfbGliZGlyfS9sc2IvaW5zdGFsbF9pbml0ZAotICAgICAgIGxuIC1zZiAke3NiaW5kaXJ9L2Noa2NvbmZpZyAke0R9JHtub25hcmNoX2xpYmRpcn0vbHNiL3JlbW92ZV9pbml0ZAogCiAgICAgICAgaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIng4Nl82NCIgXTsgdGhlbgogICAgICAgICAgICAgICAgaWYgWyAiJHtiYXNlX2xpYmRpcn0iICE9ICIke2Jhc2VfcHJlZml4fS9saWI2NCIgXTsgdGhlbgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHMvZnVuY3Rpb25zLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHMvZnVuY3Rpb25zLnBhdGNoCmluZGV4IGE3NTZkMDQuLjljNThkOTAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzL2Z1bmN0aW9ucy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2Jpbml0c2NyaXB0cy9mdW5jdGlvbnMucGF0Y2gKQEAgLTEsMjYgKzEsMzIgQEAKLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KK0Zyb20gNTc0NjhjNWY0ZTM2NGJkYWQ1NTY2MDRkY2EwOTA0NmUxYWZjYTkyOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZhbiBYaW4gPGZhbi54aW5AanAuZnVqaXRzdS5jb20+CitEYXRlOiBNb24sIDUgSnVuIDIwMTcgMTY6MjY6NDcgKzA5MDAKK1N1YmplY3Q6IFtQQVRDSF0gVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQogCiBTaWduZWQtb2ZmLWJ5OiBYaWFvZmVuZyBZYW4gPHhpYW9mZW5nLnlhbkB3aW5kcml2ZXIuY29tPgogU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgogCi1JbmRleDogaW5pdHNjcmlwdHMtOS40My9yYy5kL2luaXQuZC9mdW5jdGlvbnMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBpbml0c2NyaXB0cy05LjQzLm9yaWcvcmMuZC9pbml0LmQvZnVuY3Rpb25zCi0rKysgaW5pdHNjcmlwdHMtOS40My9yYy5kL2luaXQuZC9mdW5jdGlvbnMKLUBAIC0xMyw2ICsxMyw3IEBAIHVtYXNrIDAyMgotIFBBVEg9Ii9zYmluOi91c3Ivc2JpbjovYmluOi91c3IvYmluIgotIGV4cG9ydCBQQVRICi0gCi0rCi0gaWYgWyAkUFBJRCAtbmUgMSAtYSAteiAiJFNZU1RFTUNUTF9TS0lQX1JFRElSRUNUIiBdICYmIFwKLSAJCSggL2Jpbi9tb3VudHBvaW50IC1xIC9jZ3JvdXAvc3lzdGVtZCB8fCAvYmluL21vdW50cG9pbnQgLXEgL3N5cy9mcy9jZ3JvdXAvc3lzdGVtZCApIDsgdGhlbgotICAgICAgICAgY2FzZSAiJDAiIGluCi1AQCAtNTQsNyArNTUsNyBAQCBzeXN0ZW1jdGxfcmVkaXJlY3QgKCkgeworUmViYXNlIG9uIDkuNzIKKworU2lnbmVkLW9mZi1ieTogRmFuIFhpbiA8ZmFuLnhpbkBqcC5mdWppdHN1LmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgaW5pdHNjcmlwdHMtOS43Mi9yYy5kL2luaXQuZC9mdW5jdGlvbnMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9pbml0c2NyaXB0cy05LjcyL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucyBiL2luaXRzY3JpcHRzLTkuNzIvcmMuZC9pbml0LmQvZnVuY3Rpb25zCitpbmRleCAwZjYyN2YxLi5hNmFhMDkyIDEwMDY0NAorLS0tIGEvaW5pdHNjcmlwdHMtOS43Mi9yYy5kL2luaXQuZC9mdW5jdGlvbnMKKysrKyBiL2luaXRzY3JpcHRzLTkuNzIvcmMuZC9pbml0LmQvZnVuY3Rpb25zCitAQCAtNTksNyArNTksNyBAQCBzeXN0ZW1jdGxfcmVkaXJlY3QgKCkgewogIFsgLXogIiR7Q09MVU1OUzotfSIgXSAmJiBDT0xVTU5TPTgwCiAgCiAgaWYgWyAteiAiJHtDT05TT0xFVFlQRTotfSIgXTsgdGhlbgotLSAgaWYgWyAtYyAiL2Rldi9zdGRlcnIiIC1hIC1yICIvZGV2L3N0ZGVyciIgXTsgdGhlbgotKyAgaWYgWyAtYyAiL2Rldi9zdGRlcnIiIC1hIC1yICIvZGV2L3N0ZGVyciIgLWEgLWUgL3NiaW4vY29uc29sZXR5cGUgXTsgdGhlbgotICAgICBDT05TT0xFVFlQRT0iJCgvc2Jpbi9jb25zb2xldHlwZSA8IC9kZXYvc3RkZXJyIDI+L2Rldi9udWxsKSIKLSAgIGVsc2UKLSAgICAgQ09OU09MRVRZUEU9InNlcmlhbCIKKy0gICAgaWYgWyAtYyAiL2Rldi9zdGRlcnIiIC1hIC1yICIvZGV2L3N0ZGVyciIgXTsgdGhlbgorKyAgICBpZiBbIC1jICIvZGV2L3N0ZGVyciIgLWEgLXIgIi9kZXYvc3RkZXJyIiAtYSAtZSAvc2Jpbi9jb25zb2xldHlwZSBdOyB0aGVuCisgICAgICAgICBDT05TT0xFVFlQRT0iJCgvc2Jpbi9jb25zb2xldHlwZSA8IC9kZXYvc3RkZXJyIDI+L2Rldi9udWxsKSIKKyAgICAgZWxzZQorICAgICAgICAgQ09OU09MRVRZUEU9InNlcmlhbCIKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHNfOS42OC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzXzkuNjguYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMDhmZmYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHNfOS42OC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLVNVTU1BUlkgPSAiU3lzViBpbml0IHNjcmlwdHMgd2hpY2ggYXJlIG9ubHkgdXNlZCBpbiBhbiBMU0IgaW1hZ2UiCi1TRUNUSU9OID0gImJhc2UiCi1MSUNFTlNFID0gIkdQTHYyIgotREVQRU5EUyA9ICJwb3B0IGdsaWItMi4wIgotCi1SREVQRU5EU18ke1BOfSArPSAidXRpbC1saW51eCIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWJmNGU4YjQ5NzgwYWIxODdkNTFiZDI2YWFhMDIyYzYiCi0KLVM9IiR7V09SS0RJUn0vaW5pdHNjcmlwdHMtJHtQVn0iCi1TUkNfVVJJID0gImh0dHA6Ly9wa2dzLmZlZG9yYXByb2plY3Qub3JnL3JlcG8vcGtncy9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0ke1BWfS50YXIuYnoyLzZhNTFhNWFmMzhlMDE0NDVmNTM5ODllZDA3MjdjM2UxL2luaXRzY3JpcHRzLSR7UFZ9LnRhci5iejIgXAotICAgICAgICAgICBmaWxlOi8vZnVuY3Rpb25zLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtZnVuY3Rpb25zLWF2b2lkLWV4aXQtMS13aGljaC1jYXVzZXMtaW5pdC1zY3JpcHRzLXRvLS5wYXRjaCBcCi0gICAgICAgICAgIiAKLQotU1JDX1VSSVttZDVzdW1dID0gIjZhNTFhNWFmMzhlMDE0NDVmNTM5ODllZDA3MjdjM2UxIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJhMWM2ZTlkYmFhMzdhNjc2NTE4ZjQ4MDNiNTAxZTEwN2MwNThiYjE0ZWY3YThkYjI0YzUyYjc3ZmJjYmE1MzEiCi0KLWluaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcwotCi1BTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCi1BTFRFUk5BVElWRV8ke1BOfSA9ICJmdW5jdGlvbnMiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbZnVuY3Rpb25zXSA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9mdW5jdGlvbnMiCi0KLSMgU2luY2Ugd2UgYXJlIG9ubHkgdGFraW5nIHRoZSBwYXRjaGVkIHZlcnNpb24gb2YgZnVuY3Rpb25zLCBubyBuZWVkIHRvCi0jIGNvbmZpZ3VyZSBvciBjb21waWxlIGFueXRoaW5nIHNvIGRvIG5vdCBleGVjdXRlIHRoZXNlCi1kb19jb25maWd1cmVbbm9leGVjXSA9ICIxIiAKLWRvX2NvbXBpbGVbbm9leGVjXSA9ICIxIiAKLQotZG9faW5zdGFsbCgpewotCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLwotCWluc3RhbGwgLW0gMDY0NCAke1N9L3JjLmQvaW5pdC5kL2Z1bmN0aW9ucyAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvZnVuY3Rpb25zCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2Jpbml0c2NyaXB0c185LjcyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHNfOS43Mi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDc0YTZmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHNfOS43Mi5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIlN5c1YgaW5pdCBzY3JpcHRzIHdoaWNoIGFyZSBvbmx5IHVzZWQgaW4gYW4gTFNCIGltYWdlIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93aWtpLmRlYmlhbi5vcmcvTFNCSW5pdFNjcmlwdHMiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyIgorREVQRU5EUyA9ICJwb3B0IGdsaWItMi4wIgorCitSUFJPVklERVNfJHtQTn0gKz0gImluaXRkLWZ1bmN0aW9ucyIKK1JERVBFTkRTXyR7UE59ICs9ICJ1dGlsLWxpbnV4IgorUkNPTkZMSUNUU18ke1BOfSA9ICJpbml0c2NyaXB0cy1mdW5jdGlvbnMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWViZjRlOGI0OTc4MGFiMTg3ZDUxYmQyNmFhYTAyMmM2IgorCitTPSIke1dPUktESVJ9L2luaXRzY3JpcHRzLSR7UFZ9IgorU1JDX1VSSSA9ICJodHRwOi8vcGtncy5mZWRvcmFwcm9qZWN0Lm9yZy9yZXBvL3BrZ3MvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtJHtQVn0udGFyLmd6L3NoYTUxMi9iNmVkMzhmOTU3NmU5MjI3YzJlY2YwNDdlMmQ2MGUxZTg3MmY0MGQ1MWQxMzg2MWIwYzkxZGRkYjI4MmYxMGY3ZTZiNzk3MDZhNGQxNDM1ZDdhNTdhMTRhMGI3M2ExYjcxNTQxY2ZlNDRjMDBlOGUwM2VmOTZiMDhkZTE5ZWMzMi9pbml0c2NyaXB0cy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZnVuY3Rpb25zLnBhdGNoO3N0cmlwbGV2ZWw9MiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWZ1bmN0aW9ucy1hdm9pZC1leGl0LTEtd2hpY2gtY2F1c2VzLWluaXQtc2NyaXB0cy10by0ucGF0Y2ggXAorICAgICAgICAgICIgCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkNmM3OThmNDBkY2ViMTE3ZTEyMTI2ZDk0Y2IyNWE5YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxNzkzNjc3YmRkMWY3ZWU0Y2IwMDg3OGNlNDMzNDYxOTYzNzRmODQ4YTRjOGU0NTU5ZTA4NjA0MGZjNzQ4N2RiIgorCisjIFNpbmNlIHdlIGFyZSBvbmx5IHRha2luZyB0aGUgcGF0Y2hlZCB2ZXJzaW9uIG9mIGZ1bmN0aW9ucywgbm8gbmVlZCB0bworIyBjb25maWd1cmUgb3IgY29tcGlsZSBhbnl0aGluZyBzbyBkbyBub3QgZXhlY3V0ZSB0aGVzZQorZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIgCitkb19jb21waWxlW25vZXhlY10gPSAiMSIgCisKK2RvX2luc3RhbGwoKXsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9yYy5kL2luaXQuZC9mdW5jdGlvbnMgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2Z1bmN0aW9ucworfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdF8xLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0XzEuMC5iYgppbmRleCBlYTEyNTAyLi4zNmY1MmZkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0XzEuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0XzEuMC5iYgpAQCAtMSw0ICsxLDUgQEAKIFNVTU1BUlkgPSAiQXV0b21hdGVzIExpbnV4IFN0YW5kYXJkIEJhc2UgKExTQikgdGVzdHMiCitIT01FUEFHRSA9ICJodHRwczovL3dpa2kuZGViaWFuLm9yZy9MU0JJbml0U2NyaXB0cyIKIFNFQ1RJT04gPSAiY29uc29sZS91dGlscyIKIExJQ0VOU0UgPSAiR1BMdjIiCiBQUiA9ICJyMyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNvZi9maWxlcy9sc29mLXJlbW92ZS1ob3N0LWluZm9ybWF0aW9uLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc29mL2ZpbGVzL2xzb2YtcmVtb3ZlLWhvc3QtaW5mb3JtYXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdkMjMyMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNvZi9maWxlcy9sc29mLXJlbW92ZS1ob3N0LWluZm9ybWF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNzYgQEAKK1JlbW92ZSBob3N0IGluZm9ybWF0aW9uIGZyb20gdmVyc2lvbi5oCisKK21ha2UgbHNvZiBub3QgaW5jbHVkZSBob3N0IGluZm9ybWF0aW9uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IExpIFdhbmcgPGxpLndhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGRpYWxlY3RzL2xpbnV4L01ha2VmaWxlIHwgICA1MCArKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDQxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZGlhbGVjdHMvbGludXgvTWFrZWZpbGUgYi9kaWFsZWN0cy9saW51eC9NYWtlZmlsZQoraW5kZXggMmJlYTEwOC4uNzkyMTQyYiAxMDA2NDQKKy0tLSBhL2RpYWxlY3RzL2xpbnV4L01ha2VmaWxlCisrKysgYi9kaWFsZWN0cy9saW51eC9NYWtlZmlsZQorQEAgLTc2LDQ4ICs3NiwxNiBAQCB2ZXJzaW9uLmg6CUZSQworIAlAZWNobyBDb25zdHJ1Y3RpbmcgdmVyc2lvbi5oCisgCUBybSAtZiB2ZXJzaW9uLmgKKyAJQGVjaG8gJyNkZWZpbmUJTFNPRl9CTERDTVQJIiR7TFNPRl9CTERDTVR9IicgPiB2ZXJzaW9uLmg7CistCUBlY2hvICcjZGVmaW5lCUxTT0ZfQ0MJCSIke0NDfSInID4+IHZlcnNpb24uaAorLQlAZWNobyAnI2RlZmluZQlMU09GX0NDVgkiJHtDQ1Z9IicgPj4gdmVyc2lvbi5oCistCUBlY2hvICcjZGVmaW5lCUxTT0ZfQ0NEQVRFCSInYGRhdGVgJyInID4+IHZlcnNpb24uaAorLQlAZWNobyAnI2RlZmluZQlMU09GX0NDRkxBR1MJIidgZWNobyAke0NGTEFHU30gfCBzZWQgJ3MvXFxcXCgvXFwoL2cnIHwgc2VkICdzL1xcXFwpL1xcKS9nJyB8IHNlZCAncy8iL1xcXFwiL2cnYCciJyA+PiB2ZXJzaW9uLmgKKysJQGVjaG8gJyNkZWZpbmUJTFNPRl9DQwkJIiInID4+IHZlcnNpb24uaAorKwlAZWNobyAnI2RlZmluZQlMU09GX0NDVgkiIicgPj4gdmVyc2lvbi5oCisrCUBlY2hvICcjZGVmaW5lCUxTT0ZfQ0NEQVRFCSIiJyA+PiB2ZXJzaW9uLmgKKysJQGVjaG8gJyNkZWZpbmUJTFNPRl9DQ0ZMQUdTCSIiJyA+PiB2ZXJzaW9uLmgKKyAJQGVjaG8gJyNkZWZpbmUJTFNPRl9DSU5GTwkiJHtDSU5GT30iJyA+PiB2ZXJzaW9uLmgKKy0JQGlmIFsgIlgke0xTT0ZfSE9TVH0iID0gIlgiIF07IHRoZW4gXAorLQkgIGVjaG8gJyNkZWZpbmUJTFNPRl9IT1NUCSInYHVuYW1lIC1uYCciJyA+PiB2ZXJzaW9uLmg7IFwKKy0JZWxzZSBcCistCSAgaWYgWyAiJHtMU09GX0hPU1R9IiA9ICJub25lIiBdOyB0aGVuIFwKKy0JICAgIGVjaG8gJyNkZWZpbmUJTFNPRl9IT1NUCSIiJyA+PiB2ZXJzaW9uLmg7IFwKKy0JICBlbHNlIFwKKy0JICAgIGVjaG8gJyNkZWZpbmUJTFNPRl9IT1NUCSIke0xTT0ZfSE9TVH0iJyA+PiB2ZXJzaW9uLmg7IFwKKy0JICBmaSBcCistCWZpCistCUBlY2hvICcjZGVmaW5lCUxTT0ZfTERGTEFHUwkiJHtDRkdMfSInID4+IHZlcnNpb24uaAorLQlAaWYgWyAiWCR7TFNPRl9MT0dOQU1FfSIgPSAiWCIgXTsgdGhlbiBcCistCSAgZWNobyAnI2RlZmluZQlMU09GX0xPR05BTUUJIiR7TE9HTkFNRX0iJyA+PiB2ZXJzaW9uLmg7IFwKKy0JZWxzZSBcCistCSAgaWYgWyAiJHtMU09GX0xPR05BTUV9IiA9ICJub25lIiBdOyB0aGVuIFwKKy0JICAgIGVjaG8gJyNkZWZpbmUJTFNPRl9MT0dOQU1FCSIiJyA+PiB2ZXJzaW9uLmg7IFwKKy0JICBlbHNlIFwKKy0JICAgIGVjaG8gJyNkZWZpbmUJTFNPRl9MT0dOQU1FCSIke0xTT0ZfTE9HTkFNRX0iJyA+PiB2ZXJzaW9uLmg7IFwKKy0JICBmaTsgXAorLQlmaQorLQlAaWYgWyAiWCR7TFNPRl9TWVNJTkZPfSIgPSAiWCIgXTsgdGhlbiBcCistCSAgICBlY2hvICcjZGVmaW5lCUxTT0ZfU1lTSU5GTwkiJ2B1bmFtZSAtYWAnIicgPj4gdmVyc2lvbi5oOyBcCistCWVsc2UgXAorLQkgIGlmIFsgIiR7TFNPRl9TWVNJTkZPfSIgPSAibm9uZSIgXTsgdGhlbiBcCistCSAgICBlY2hvICcjZGVmaW5lCUxTT0ZfU1lTSU5GTwkiIicgPj4gdmVyc2lvbi5oOyBcCistCSAgZWxzZSBcCistCSAgICBlY2hvICcjZGVmaW5lCUxTT0ZfU1lTSU5GTwkiJHtMU09GX1NZU0lORk99IicgPj4gdmVyc2lvbi5oOyBcCistCSAgZmkgXAorLQlmaQorLQlAaWYgWyAiWCR7TFNPRl9VU0VSfSIgPSAiWCIgXTsgdGhlbiBcCistCSAgZWNobyAnI2RlZmluZQlMU09GX1VTRVIJIiR7VVNFUn0iJyA+PiB2ZXJzaW9uLmg7IFwKKy0JZWxzZSBcCistCSAgaWYgWyAiJHtMU09GX1VTRVJ9IiA9ICJub25lIiBdOyB0aGVuIFwKKy0JICAgIGVjaG8gJyNkZWZpbmUJTFNPRl9VU0VSCSIiJyA+PiB2ZXJzaW9uLmg7IFwKKy0JICBlbHNlIFwKKy0JICAgIGVjaG8gJyNkZWZpbmUJTFNPRl9VU0VSCSIke0xTT0ZfVVNFUn0iJyA+PiB2ZXJzaW9uLmg7IFwKKy0JICBmaSBcCistCWZpCisrCUBlY2hvICcjZGVmaW5lCUxTT0ZfSE9TVAkiIicgPj4gdmVyc2lvbi5oOworKwlAZWNobyAnI2RlZmluZQlMU09GX0xERkxBR1MJIiInID4+IHZlcnNpb24uaAorKwlAZWNobyAnI2RlZmluZQlMU09GX0xPR05BTUUJIiInID4+IHZlcnNpb24uaDsKKysJQGVjaG8gJyNkZWZpbmUJTFNPRl9TWVNJTkZPCSIiJyA+PiB2ZXJzaW9uLmg7CisrCUBlY2hvICcjZGVmaW5lCUxTT0ZfVVNFUgkiIicgPj4gdmVyc2lvbi5oOworIAlAc2VkICcvVk4vcy8uZHMgVk4gXCguKlwpLyNkZWZpbmUJTFNPRl9WRVJTSU9OCSJcMSIvJyA8IHZlcnNpb24gPj4gdmVyc2lvbi5oCisgCisgRlJDOgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNvZi9sc29mXzQuODkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzb2YvbHNvZl80Ljg5LmJiCmluZGV4IDI5MjQ1YjEuLjE0NTQ2ZGIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNvZi9sc29mXzQuODkuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc29mL2xzb2ZfNC44OS5iYgpAQCAtMTEsNyArMTEsOSBAQAogIyBodHRwczovL3Blb3BsZS5mcmVlYnNkLm9yZy9+YWJlLyApLiBodHRwOi8vd3d3Lm1pcnJvcnNlcnZpY2Uub3JnIHNlZW1zIHRvIGJlCiAjIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgYWx0ZXJuYXRpdmUuCiAKLVNSQ19VUkkgPSAiaHR0cDovL3d3dy5taXJyb3JzZXJ2aWNlLm9yZy9zaXRlcy9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mL2xzb2ZfJHtQVn0udGFyLmJ6MiIKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5taXJyb3JzZXJ2aWNlLm9yZy9zaXRlcy9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mL2xzb2ZfJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9sc29mLXJlbW92ZS1ob3N0LWluZm9ybWF0aW9uLnBhdGNoIFwKKyAgICAgICAgICAiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICIxYjljZDM0ZjNmYjg2ODU2YTEyNWFiYmYyYmUzYTM4NiIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICI4MWFjMmZjNWZkYzk0NDc5M2JhZjQxYTE0MDAyYjZkZWI1YTI5MDk2YjM4Nzc0NGUyOGY4YzMwYTM2MGEzNzE4IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDItQWRkLWtub2ItdG8tY29udHJvbC13aGV0aGVyLW51bWEtc3VwcG9ydC1zaG91bGQtYmUtYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDAyLUFkZC1rbm9iLXRvLWNvbnRyb2wtd2hldGhlci1udW1hLXN1cHBvcnQtc2hvdWxkLWJlLWMucGF0Y2gKaW5kZXggMDY4NGJlZS4uOTg2NTAyMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDItQWRkLWtub2ItdG8tY29udHJvbC13aGV0aGVyLW51bWEtc3VwcG9ydC1zaG91bGQtYmUtYy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMi1BZGQta25vYi10by1jb250cm9sLXdoZXRoZXItbnVtYS1zdXBwb3J0LXNob3VsZC1iZS1jLnBhdGNoCkBAIC05LDYgKzksNyBAQAogCiBTaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CiBTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICBtNC9sdHAtbnVtYS5tNCB8IDEwICsrKysrKysrKy0KICAxIGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMy1BZGQta25vYi10by1jb250cm9sLXRpcnBjLXN1cHBvcnQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMy1BZGQta25vYi10by1jb250cm9sLXRpcnBjLXN1cHBvcnQucGF0Y2gKaW5kZXggYmYxMTc2Zi4uNWNmMWUwNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDMtQWRkLWtub2ItdG8tY29udHJvbC10aXJwYy1zdXBwb3J0LnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDAzLUFkZC1rbm9iLXRvLWNvbnRyb2wtdGlycGMtc3VwcG9ydC5wYXRjaApAQCAtOCw2ICs4LDcgQEAKIAogU2lnbmVkLW9mZi1ieTogRmF0aGkgQm91ZHJhIDxmYXRoaS5ib3VkcmFAbGluYXJvLm9yZz4KIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIC0tLQogIGNvbmZpZ3VyZS5hYyB8IDkgKysrKysrKysrCiAgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDQtYnVpbGQtQWRkLW9wdGlvbi10by1zZWxlY3QtbGliYy1pbXBsZW1lbnRhdGlvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDA0LWJ1aWxkLUFkZC1vcHRpb24tdG8tc2VsZWN0LWxpYmMtaW1wbGVtZW50YXRpb24ucGF0Y2gKaW5kZXggMmRlOTM2My4uY2Y3NDQ2MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDQtYnVpbGQtQWRkLW9wdGlvbi10by1zZWxlY3QtbGliYy1pbXBsZW1lbnRhdGlvbi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwNC1idWlsZC1BZGQtb3B0aW9uLXRvLXNlbGVjdC1saWJjLWltcGxlbWVudGF0aW9uLnBhdGNoCkBAIC0xMCw2ICsxMCw3IEBACiBEaXNhYmxlIHRlc3RzIHNwZWNpZmljYWxseSBub3QgYnVpbGRpbmcgX3lldF8gb24gbXVzbCBiYXNlZCBzeXN0ZW1zCiAKIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIC0tLQogIE1ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1ICsrKysrCiAgdGVzdGNhc2VzL2tlcm5lbC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8IDUgKysrKy0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDA1LWtlcm5lbC1jb250cm9sbGVycy1MaW5rLXdpdGgtbGliZnRzLWV4cGxpY2l0bHktb24tbXUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwNS1rZXJuZWwtY29udHJvbGxlcnMtTGluay13aXRoLWxpYmZ0cy1leHBsaWNpdGx5LW9uLW11LnBhdGNoCmluZGV4IDhkYWIxZWQuLmI5MzkwZTIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDA1LWtlcm5lbC1jb250cm9sbGVycy1MaW5rLXdpdGgtbGliZnRzLWV4cGxpY2l0bHktb24tbXUucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDUta2VybmVsLWNvbnRyb2xsZXJzLUxpbmstd2l0aC1saWJmdHMtZXhwbGljaXRseS1vbi1tdS5wYXRjaApAQCAtNyw2ICs3LDcgQEAKIGV4dGVybmFsIGltcGxlbWVudGF0aW9uIGZvciBhbGwgZnRzIEFQSXMKIAogU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZwogLS0tCiAgdGVzdGNhc2VzL2tlcm5lbC9jb250cm9sbGVycy9NYWtlZmlsZS5pbmMgICAgICAgIHwgMyArKysKICB0ZXN0Y2FzZXMva2VybmVsL2NvbnRyb2xsZXJzL2NwdXNldC9NYWtlZmlsZS5pbmMgfCAzICsrKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDYtZml4LVBBVEhfTUFYLXVuZGVjbGFyZWQtd2hlbi1idWlsZGluZy13aXRoLW11c2wucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwNi1maXgtUEFUSF9NQVgtdW5kZWNsYXJlZC13aGVuLWJ1aWxkaW5nLXdpdGgtbXVzbC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg3NGI5NS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwNi1maXgtUEFUSF9NQVgtdW5kZWNsYXJlZC13aGVuLWJ1aWxkaW5nLXdpdGgtbXVzbC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLUZyb20gMzI2NDRiZGU0ZDMzYjY3NzYxNDUzNGVjMzcwMzBlNTc4ODNiOGUxNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IERlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+Ci1EYXRlOiBUaHUsIDkgRmViIDIwMTcgMTY6NDE6MTIgKzA4MDAKLVN1YmplY3Q6IFtQQVRDSCAxLzNdIGZpeCBQQVRIX01BWCB1bmRlY2xhcmVkIHdoZW4gYnVpbGRpbmcgd2l0aCBtdXNsCi0KLWZpeCBQQVRIX01BWCB1bmRlY2xhcmVkIHdoZW4gYnVpbGRpbmcgd2l0aCBtdXNsLgotCi1TaWduZWQtb2ZmLWJ5OiBEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPgotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0tLS0KLSBpbmNsdWRlL3RzdF90ZXN0LmggfCAzICsrKwotIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHN0X3Rlc3QuaCBiL2luY2x1ZGUvdHN0X3Rlc3QuaAotaW5kZXggN2ZmMzNiMi4uOTc3OWMwZSAxMDA2NDQKLS0tLSBhL2luY2x1ZGUvdHN0X3Rlc3QuaAotKysrIGIvaW5jbHVkZS90c3RfdGVzdC5oCi1AQCAtMTksNiArMTksOSBAQAotICNkZWZpbmUgVFNUX1RFU1RfSF9fCi0gCi0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotKyNpZm5kZWYgX19HTElCQ19fCi0rI2luY2x1ZGUgPGxpbWl0cy5oPgotKyNlbmRpZgotIAotICNpbmNsdWRlICJ0c3RfY29tbW9uLmgiCi0gI2luY2x1ZGUgInRzdF9yZXNfZmxhZ3MuaCIKLS0tIAotMi43LjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDctZml4LV9fV09SRFNJWkUtdW5kZWNsYXJlZC13aGVuLWJ1aWxkaW5nLXdpdGgtbXVzbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDA3LWZpeC1fX1dPUkRTSVpFLXVuZGVjbGFyZWQtd2hlbi1idWlsZGluZy13aXRoLW11c2wucGF0Y2gKaW5kZXggOGQwZTczOS4uMmY0Y2E2MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDctZml4LV9fV09SRFNJWkUtdW5kZWNsYXJlZC13aGVuLWJ1aWxkaW5nLXdpdGgtbXVzbC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwNy1maXgtX19XT1JEU0laRS11bmRlY2xhcmVkLXdoZW4tYnVpbGRpbmctd2l0aC1tdXNsLnBhdGNoCkBAIC0xLDMwICsxLDMxIEBACi1Gcm9tIGEyNjM5YmQwZjBkM2Y5ZjMwNDllZTMzZTY3MTBmZWQwNjIyNWY1NGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIGQxYTI3NTcwNDU3ZmI2ZTFkNmJhZmU4MWJmYTBmMzUwN2IxMzdlMzIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPgogRGF0ZTogVGh1LCA5IEZlYiAyMDE3IDE4OjIwOjU4ICswODAwCi1TdWJqZWN0OiBbUEFUQ0ggMS8yXSBmaXggX19XT1JEU0laRSB1bmRlY2xhcmVkIHdoZW4gYnVpbGRpbmcgd2l0aCBtdXNsCitTdWJqZWN0OiBbUEFUQ0hdIGZpeCBfX1dPUkRTSVpFIHVuZGVjbGFyZWQgd2hlbiBidWlsZGluZyB3aXRoIG11c2wKIAogZml4IF9fV09SRFNJWkUgdW5kZWNsYXJlZCB3aGVuIGJ1aWxkaW5nIHdpdGggbXVzbC4KIAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vZ2l0aHViLmNvbS9saW51eC10ZXN0LXByb2plY3QvbHRwL3B1bGwvMTc3XQorCiBTaWduZWQtb2ZmLWJ5OiBEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPgotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICBpbmNsdWRlL29sZC90ZXN0LmggfCAzICsrKwogIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKIAogZGlmZiAtLWdpdCBhL2luY2x1ZGUvb2xkL3Rlc3QuaCBiL2luY2x1ZGUvb2xkL3Rlc3QuaAotaW5kZXggZDQ5MjU2MC4uMjYzZTkyZSAxMDA2NDQKK2luZGV4IGIzNjc2NGQ4My4uY2M2ZjFiNTUxIDEwMDY0NAogLS0tIGEvaW5jbHVkZS9vbGQvdGVzdC5oCiArKysgYi9pbmNsdWRlL29sZC90ZXN0LmgKLUBAIC01OCw2ICs1OCw5IEBACi0gI2luY2x1ZGUgInRzdF9jbG9uZS5oIgotICNpbmNsdWRlICJvbGRfZGV2aWNlLmgiCi0gI2luY2x1ZGUgIm9sZF90bXBkaXIuaCIKK0BAIC00NCw2ICs0NCw5IEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RkaW50Lmg+CiArI2lmbmRlZiBfX0dMSUJDX18KICsjaW5jbHVkZSA8Yml0cy9yZWcuaD4KICsjZW5kaWYKICAKLSAvKgotICAqIEVuc3VyZSB0aGF0IE5VTVNJR1MgaXMgZGVmaW5lZC4KKyAjaW5jbHVkZSAidXNjdGVzdC5oIgorIAogLS0gCi0yLjcuNAorMi4xMS4wCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDA4LUNoZWNrLWlmLV9fR0xJQkNfUFJFUkVRLWlzLWRlZmluZWQtYmVmb3JlLXVzaW5nLWl0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDgtQ2hlY2staWYtX19HTElCQ19QUkVSRVEtaXMtZGVmaW5lZC1iZWZvcmUtdXNpbmctaXQucGF0Y2gKaW5kZXggNDFmMjYyMy4uZTMyNWNlNCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDgtQ2hlY2staWYtX19HTElCQ19QUkVSRVEtaXMtZGVmaW5lZC1iZWZvcmUtdXNpbmctaXQucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDgtQ2hlY2staWYtX19HTElCQ19QUkVSRVEtaXMtZGVmaW5lZC1iZWZvcmUtdXNpbmctaXQucGF0Y2gKQEAgLTgsNiArOCw3IEBACiAKIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZwogLS0tCiAgdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9hY2NlcHQ0L2FjY2VwdDRfMDEuYyAgICAgfCAgOSArKysrLQogIHRlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvZ2V0Y3B1L2dldGNwdTAxLmMgICAgICAgIHwgNDAgKysrKysrKysrKysrKysrKysrKysrLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDktZml4LXJlZGVmaW5pdGlvbi1vZi1zdHJ1Y3QtbXNnYnVmLWVycm9yLWJ1aWxkaW5nLXdpdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDA5LWZpeC1yZWRlZmluaXRpb24tb2Ytc3RydWN0LW1zZ2J1Zi1lcnJvci1idWlsZGluZy13aXQucGF0Y2gKaW5kZXggNjg4NmM1NS4uZGQ3ZDI4MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDktZml4LXJlZGVmaW5pdGlvbi1vZi1zdHJ1Y3QtbXNnYnVmLWVycm9yLWJ1aWxkaW5nLXdpdC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwOS1maXgtcmVkZWZpbml0aW9uLW9mLXN0cnVjdC1tc2didWYtZXJyb3ItYnVpbGRpbmctd2l0LnBhdGNoCkBAIC0xLDE4ICsxLDE5IEBACi1Gcm9tIDJkN2VhNjdlOGVhYTQxY2JkNjgxNmY3YWI2NTQyNTRiNDBiNTMwYTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIGJmNWRkMjkzMjIwMGUwMTk5YTM4ZjMwMjhkM2JlZjIyNTNmMzJlMzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPgogRGF0ZTogVGh1LCA5IEZlYiAyMDE3IDE3OjE3OjM3ICswODAwCiBTdWJqZWN0OiBbUEFUQ0hdIGZpeCByZWRlZmluaXRpb24gb2YgJ3N0cnVjdCBtc2didWYnIGVycm9yIGJ1aWxkaW5nIHdpdGggbXVzbAogCiBXaGVuIGJ1aWxkaW5nIHdpdGggbXVzbCB0aGUgZmlsZSAic3lzL21zZy5oIiBhbHJlYWR5IGNvbnRhaW4gJ3N0cnVjdCBtc2didWYnCiAKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vbGludXgtdGVzdC1wcm9qZWN0L2x0cC9wdWxsLzE3N10KKwogU2lnbmVkLW9mZi1ieTogRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwogLS0tCiAgdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9pcGMvbXNncmN2L21zZ3JjdjA4LmMgfCA0ICsrKy0KICAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiAKIGRpZmYgLS1naXQgYS90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL2lwYy9tc2dyY3YvbXNncmN2MDguYyBiL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvaXBjL21zZ3Jjdi9tc2dyY3YwOC5jCi1pbmRleCBhNzU3YzBkLi5lMDIzMTE0IDEwMDY0NAoraW5kZXggYTc1N2MwZDE4Li5lMDIzMTE0ZDIgMTAwNjQ0CiAtLS0gYS90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL2lwYy9tc2dyY3YvbXNncmN2MDguYwogKysrIGIvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9pcGMvbXNncmN2L21zZ3JjdjA4LmMKIEBAIC00NywxMSArNDcsMTMgQEAgY29uc3QgY2hhciAqVENJRCA9ICJtc2dyY3YwOCI7CkBAIC0zMSw1ICszMiw1IEBACiAgc3RhdGljIHZvaWQgbXNyKGludCBtc3FpZCkKICB7CiAtLSAKLTIuNy40CisyLjExLjAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMTAtcmVwbGFjZS1fX0JFR0lOX0RFQ0xTLWFuZC1fX0VORF9ERUNMUy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDEwLXJlcGxhY2UtX19CRUdJTl9ERUNMUy1hbmQtX19FTkRfREVDTFMucGF0Y2gKaW5kZXggNWIwYzQ0NC4uYjlmY2U4OCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMTAtcmVwbGFjZS1fX0JFR0lOX0RFQ0xTLWFuZC1fX0VORF9ERUNMUy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAxMC1yZXBsYWNlLV9fQkVHSU5fREVDTFMtYW5kLV9fRU5EX0RFQ0xTLnBhdGNoCkBAIC0xMCw2ICsxMCw4IEBACiBpdHMgbm90IGEgZ2VuZXJhbGx5IGF2YWlsYWJsZSB0eXBlZGVmCiAKIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZwogLS0tCiAgdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9lcG9sbDIvaW5jbHVkZS9lcG9sbC5oIHwgOCArKysrKystLQogIHV0aWxzL3NjdHAvaW5jbHVkZS9uZXRpbmV0L3NjdHAuaCAgICAgICAgICAgICAgICB8IDkgKysrKysrKy0tCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAxMS1SZW5hbWUtc2lnc2V0LXZhcmlhYmxlLXRvLXNpZ3NldDEucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAxMS1SZW5hbWUtc2lnc2V0LXZhcmlhYmxlLXRvLXNpZ3NldDEucGF0Y2gKaW5kZXggNGFjMTRkYy4uMjVmNmJhNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMTEtUmVuYW1lLXNpZ3NldC12YXJpYWJsZS10by1zaWdzZXQxLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDExLVJlbmFtZS1zaWdzZXQtdmFyaWFibGUtdG8tc2lnc2V0MS5wYXRjaApAQCAtNyw2ICs3LDggQEAKIAogU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIFNpZ25lZC1vZmYtYnk6IERlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZwogLS0tCiAgdGVzdGNhc2VzL2tlcm5lbC9tZW0vc2htdC9zaG10MDQuYyAgICAgICAgICAgICAgICAgICAgfCAxMCArKysrKy0tLS0tCiAgdGVzdGNhc2VzL2tlcm5lbC9tZW0vc2htdC9zaG10MDYuYyAgICAgICAgICAgICAgICAgICAgfCAxMCArKysrKy0tLS0tCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAxMi1maXgtZmFjY2Vzc2F0MDEuYy1idWlsZC1mYWlscy13aXRoLXNlY3VyaXR5LWZsYWdzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMTItZml4LWZhY2Nlc3NhdDAxLmMtYnVpbGQtZmFpbHMtd2l0aC1zZWN1cml0eS1mbGFncy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYwMGJkNi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAxMi1maXgtZmFjY2Vzc2F0MDEuYy1idWlsZC1mYWlscy13aXRoLXNlY3VyaXR5LWZsYWdzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotRnJvbSAzMmY1NjMwMDhmOTU5NzVkMjZkMWM0ZmNiMjY2YzcyYzU2ZjkzNGJlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4KLURhdGU6IFdlZCwgMjIgRmViIDIwMTcgMDE6MjE6NTUgLTA1MDAKLVN1YmplY3Q6IFtQQVRDSF0gZml4IGZhY2Nlc3NhdDAxLmMgYnVpbGQgZmFpbHMgd2l0aCBzZWN1cml0eSBmbGFncwotCi1XaGVuIHRoZSBkaXN0cm8gaXMgcG9reS1sc2IsIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yOgotCi18IEluIGZpbGUgaW5jbHVkZWQgZnJvbSAuLi8uLi8uLi8uLi9pbmNsdWRlL29sZC90ZXN0Lmg6NDc6MCwKLXwgICAgICAgICAgICAgICAgICBmcm9tIGZhY2Nlc3NhdDAxLmM6NDQ6Ci18IGZhY2Nlc3NhdDAxLmM6IEluIGZ1bmN0aW9uICdzZXR1cCc6Ci18IC4uLy4uLy4uLy4uL2luY2x1ZGUvb2xkL29sZF9zYWZlX2ZpbGVfb3BzLmg6NTU6Mjc6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQotfCAgICAgICAgICAgICAgICAgICAgKHBhdGgpLCAoZm10KSwgIyMgX19WQV9BUkdTX18pCi18ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KLXwgZmFjY2Vzc2F0MDEuYzoxMzI6Mjogbm90ZTogaW4gZXhwYW5zaW9uIG9mIG1hY3JvICdTQUZFX0ZJTEVfUFJJTlRGJwotfCAgIFNBRkVfRklMRV9QUklOVEYoY2xlYW51cCwgdGVzdGZpbGUsIHRlc3RmaWxlKTsKLXwgICBefn5+fn5+fn5+fn5+fn5+Ci18IC4uLy4uLy4uLy4uL2luY2x1ZGUvb2xkL29sZF9zYWZlX2ZpbGVfb3BzLmg6NTU6Mjc6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMgWy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5XQotfCAgICAgICAgICAgICAgICAgICAgKHBhdGgpLCAoZm10KSwgIyMgX19WQV9BUkdTX18pCi18ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KLXwgZmFjY2Vzc2F0MDEuYzoxMzM6Mjogbm90ZTogaW4gZXhwYW5zaW9uIG9mIG1hY3JvICdTQUZFX0ZJTEVfUFJJTlRGJwotfCAgIFNBRkVfRklMRV9QUklOVEYoY2xlYW51cCwgdGVzdGZpbGUyLCB0ZXN0ZmlsZTIpOwotfCAgIF5+fn5+fn5+fn5+fn5+fn4KLQotVGhpcyBpcyBiZWNhdXNlIGluIG1hY3JvICJTQUZFX0ZJTEVfUFJJTlRGIiwgaXRzIHRoaXJkIGFyZ3VtZW50IHNob3VsZCBiZSBhCi1mb3JtYXQgYXJndW1lbnRzLCBidXQgaW4gZmlsZSBmYWNjZXNzYXQwMS5jLCBpdCBwYXNzZWQgdGhlIHNhbWUgYXJndW1lbnQgdG8KLW1hY3JvICJTQUZFX0ZJTEVfUFJJTlRGIiwgc28gaXQgcmVzdWx0cyBpbiB0aGUgZmFpbHMuIEl0IHNob3VsZCBwYXNzIHRoZSBmb3JtYXQKLXN0cmluZyB0byB0aGUgdGhpcmQgYXJndW1lbnQuCi0KLVRoZSBzYW1lIGZvciBmaWxlIGZjaG1vZGF0MDEuYy4KLQotU2lnbmVkLW9mZi1ieTogRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9mYWNjZXNzYXQvZmFjY2Vzc2F0MDEuYyB8IDQgKystLQotIHRlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvZmNobW9kYXQvZmNobW9kYXQwMS5jICAgfCA0ICsrLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvZmFjY2Vzc2F0L2ZhY2Nlc3NhdDAxLmMgYi90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL2ZhY2Nlc3NhdC9mYWNjZXNzYXQwMS5jCi1pbmRleCA2MjJkZmQzLi4xY2E5MGU5IDEwMDY0NAotLS0tIGEvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9mYWNjZXNzYXQvZmFjY2Vzc2F0MDEuYwotKysrIGIvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9mYWNjZXNzYXQvZmFjY2Vzc2F0MDEuYwotQEAgLTEyOSw4ICsxMjksOCBAQCB2b2lkIHNldHVwKHZvaWQpCi0gCWZkc1swXSA9IFNBRkVfT1BFTihjbGVhbnVwLCBwYXRobmFtZSwgT19ESVJFQ1RPUlkpOwotIAlmZHNbMV0gPSBmZHNbNF0gPSBmZHNbMF07Ci0gCi0tCVNBRkVfRklMRV9QUklOVEYoY2xlYW51cCwgdGVzdGZpbGUsIHRlc3RmaWxlKTsKLS0JU0FGRV9GSUxFX1BSSU5URihjbGVhbnVwLCB0ZXN0ZmlsZTIsIHRlc3RmaWxlMik7Ci0rCVNBRkVfRklMRV9QUklOVEYoY2xlYW51cCwgdGVzdGZpbGUsICJmYWNjZXNzYXR0ZXN0ZmlsZSVkLnR4dCIpOwotKwlTQUZFX0ZJTEVfUFJJTlRGKGNsZWFudXAsIHRlc3RmaWxlMiwgIiVzL2ZhY2Nlc3NhdHRlc3RmaWxlJWQudHh0Iik7Ci0gCi0gCWZkc1syXSA9IFNBRkVfT1BFTihjbGVhbnVwLCB0ZXN0ZmlsZTMsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2MDApOwotIAotZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvZmNobW9kYXQvZmNobW9kYXQwMS5jIGIvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9mY2htb2RhdC9mY2htb2RhdDAxLmMKLWluZGV4IDZiZjY2ZDguLjg5ZDA3MmEgMTAwNjQ0Ci0tLS0gYS90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL2ZjaG1vZGF0L2ZjaG1vZGF0MDEuYwotKysrIGIvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9mY2htb2RhdC9mY2htb2RhdDAxLmMKLUBAIC0xMjcsOCArMTI3LDggQEAgdm9pZCBzZXR1cCh2b2lkKQotIAlmZHNbMF0gPSBTQUZFX09QRU4oY2xlYW51cCwgcGF0aG5hbWUsIE9fRElSRUNUT1JZKTsKLSAJZmRzWzFdID0gZmRzWzRdID0gZmRzWzBdOwotIAotLQlTQUZFX0ZJTEVfUFJJTlRGKGNsZWFudXAsIHRlc3RmaWxlLCB0ZXN0ZmlsZSk7Ci0tCVNBRkVfRklMRV9QUklOVEYoY2xlYW51cCwgdGVzdGZpbGUyLCB0ZXN0ZmlsZTIpOwotKwlTQUZFX0ZJTEVfUFJJTlRGKGNsZWFudXAsIHRlc3RmaWxlLCAiZmNobW9kYXR0ZXN0JWQudHh0Iik7Ci0rCVNBRkVfRklMRV9QUklOVEYoY2xlYW51cCwgdGVzdGZpbGUyLCAiJXMvZmNobW9kYXR0ZXN0JWQudHh0Iik7Ci0gCi0gCWZkc1syXSA9IFNBRkVfT1BFTihjbGVhbnVwLCB0ZXN0ZmlsZTMsIE9fQ1JFQVQgfCBPX1JEV1IsIDA2MDApOwotIAlmZHNbM10gPSAxMDA7Ci0tLSAKLTIuOC4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDE4LWd1YXJkLW1hbGxvY29wdC13aXRoLV9fR0xJQkNfXy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDE4LWd1YXJkLW1hbGxvY29wdC13aXRoLV9fR0xJQkNfXy5wYXRjaAppbmRleCA1MTk4ZmU5Li5hNzk3NjNkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAxOC1ndWFyZC1tYWxsb2NvcHQtd2l0aC1fX0dMSUJDX18ucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMTgtZ3VhcmQtbWFsbG9jb3B0LXdpdGgtX19HTElCQ19fLnBhdGNoCkBAIC02LDYgKzYsNyBAQAogbWFsbG9jb3B0IGlzIG5vdCBhdmFpbGFibGUgb24gbm9uIGdsaWJjIGltcGxlbWVudGF0aW9ucwogCiBTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICB1dGlscy9iZW5jaG1hcmsvZWJpenp5LTAuMy9lYml6enkuYyB8IDQgKystLQogIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAyMC1nZXRkZW50cy1kZWZpbmUtZ2V0ZGVudHMtZ2V0ZGVudHM2NC1vbmx5LWZvci1nbGliYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDIwLWdldGRlbnRzLWRlZmluZS1nZXRkZW50cy1nZXRkZW50czY0LW9ubHktZm9yLWdsaWJjLnBhdGNoCmluZGV4IDBlNGU0NTguLjcwNjBhNjQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDIwLWdldGRlbnRzLWRlZmluZS1nZXRkZW50cy1nZXRkZW50czY0LW9ubHktZm9yLWdsaWJjLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDIwLWdldGRlbnRzLWRlZmluZS1nZXRkZW50cy1nZXRkZW50czY0LW9ubHktZm9yLWdsaWJjLnBhdGNoCkBAIC03LDYgKzcsOCBAQAogZnVuY3Rpb25zIHdpdGggc2FtZSBuYW1lLCBpdCBlcnJvcnMgb3V0LgogCiBTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIC0tLQogIHRlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvZ2V0ZGVudHMvZ2V0ZGVudHMuaCB8IDYgKysrKy0tCiAgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDIxLURlZmluZS1fR05VX1NPVVJDRS1mb3ItTVJFTUFQX01BWU1PVkUtZGVmaW5pdGlvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDIxLURlZmluZS1fR05VX1NPVVJDRS1mb3ItTVJFTUFQX01BWU1PVkUtZGVmaW5pdGlvbi5wYXRjaAppbmRleCBjOGNiZTU4Li4zZTc5YzlmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAyMS1EZWZpbmUtX0dOVV9TT1VSQ0UtZm9yLU1SRU1BUF9NQVlNT1ZFLWRlZmluaXRpb24ucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMjEtRGVmaW5lLV9HTlVfU09VUkNFLWZvci1NUkVNQVBfTUFZTU9WRS1kZWZpbml0aW9uLnBhdGNoCkBAIC0xMCw2ICsxMCw4IEBACiBlcnJvcjogJ01SRU1BUF9NQVlNT1ZFJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikKIAogU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICB0ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL21yZW1hcC9tcmVtYXAwMS5jIHwgNCArKystCiAgdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9tcmVtYXAvbXJlbWFwMDIuYyB8IDIgKysKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDIzLXB0cmFjZS1Vc2UtaW50LWluc3RlYWQtb2YtZW51bS1fX3B0cmFjZV9yZXF1ZXN0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMjMtcHRyYWNlLVVzZS1pbnQtaW5zdGVhZC1vZi1lbnVtLV9fcHRyYWNlX3JlcXVlc3QucGF0Y2gKaW5kZXggNDY4MGMwMy4uNTI5ZjRlZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMjMtcHRyYWNlLVVzZS1pbnQtaW5zdGVhZC1vZi1lbnVtLV9fcHRyYWNlX3JlcXVlc3QucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMjMtcHRyYWNlLVVzZS1pbnQtaW5zdGVhZC1vZi1lbnVtLV9fcHRyYWNlX3JlcXVlc3QucGF0Y2gKQEAgLTYsNiArNiw4IEBACiBfX3B0cmFjZV9yZXF1ZXN0IGlzIG9ubHkgYXZhaWxhYmxlIHdpdGggZ2xpYmMKIAogU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICB0ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL3B0cmFjZS9wdHJhY2UwMy5jICAgICAgICAgICB8IDQgKysrKwogIHRlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvcHRyYWNlL3NwYXduX3B0cmFjZV9jaGlsZC5oIHwgNCArKysrCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAyNC1ydF9zaWdhY3Rpb24tcnRfc2lncHJvY21hcmstRGVmaW5lLV9HTlVfU09VUkNFLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMjQtcnRfc2lnYWN0aW9uLXJ0X3NpZ3Byb2NtYXJrLURlZmluZS1fR05VX1NPVVJDRS5wYXRjaAppbmRleCAwM2M2N2E1Li4wM2FhNDVkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAyNC1ydF9zaWdhY3Rpb24tcnRfc2lncHJvY21hcmstRGVmaW5lLV9HTlVfU09VUkNFLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDI0LXJ0X3NpZ2FjdGlvbi1ydF9zaWdwcm9jbWFyay1EZWZpbmUtX0dOVV9TT1VSQ0UucGF0Y2gKQEAgLTcsNiArNyw4IEBACiBlcnJvcjogJ1NBX05PTUFTSycgdW5kZWNsYXJlZCBoZXJlIChub3QgaW4gYSBmdW5jdGlvbikKIAogU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICB0ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL3J0X3NpZ2FjdGlvbi9ydF9zaWdhY3Rpb24wMS5jICAgICB8IDEgKwogIHRlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvcnRfc2lnYWN0aW9uL3J0X3NpZ2FjdGlvbjAyLmMgICAgIHwgMiArLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMjUtbWNfZ2V0aG9zdC1pbmNsdWRlLXN5cy10eXBlcy5oLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMjUtbWNfZ2V0aG9zdC1pbmNsdWRlLXN5cy10eXBlcy5oLnBhdGNoCmluZGV4IGFhZDNjYjAuLmFmY2JhNjMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDI1LW1jX2dldGhvc3QtaW5jbHVkZS1zeXMtdHlwZXMuaC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAyNS1tY19nZXRob3N0LWluY2x1ZGUtc3lzLXR5cGVzLmgucGF0Y2gKQEAgLTcsNiArNyw4IEBACiBlcnJvcjogdW5rbm93biB0eXBlIG5hbWUgJ3VfY2hhcicKIAogU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICB0ZXN0Y2FzZXMvbmV0d29yay9tdWx0aWNhc3QvbWNfZ2V0aG9zdC9tY19nZXRob3N0LmMgfCAxICsKICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDI2LWNyYXNoMDEtRGVmaW5lLV9HTlVfU09VUkNFLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMjYtY3Jhc2gwMS1EZWZpbmUtX0dOVV9TT1VSQ0UucGF0Y2gKaW5kZXggNThiOGVkNC4uZjY1ZmFkMSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMjYtY3Jhc2gwMS1EZWZpbmUtX0dOVV9TT1VSQ0UucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMjYtY3Jhc2gwMS1EZWZpbmUtX0dOVV9TT1VSQ0UucGF0Y2gKQEAgLTcsNiArNyw4IEBACiBlcnJvcjogJ1NBX05PTUFTSycgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCiAKIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZwogLS0tCiAgdGVzdGNhc2VzL21pc2MvY3Jhc2gvY3Jhc2gwMS5jIHwgMiArLQogIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMjctc3lzY29uZjAxLVVzZS1fU0NfMl9DX1ZFUlNJT04tY29uZGl0aW9uYWxseS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDI3LXN5c2NvbmYwMS1Vc2UtX1NDXzJfQ19WRVJTSU9OLWNvbmRpdGlvbmFsbHkucGF0Y2gKaW5kZXggZjc1ZTMzYi4uYWRmNmYyNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMjctc3lzY29uZjAxLVVzZS1fU0NfMl9DX1ZFUlNJT04tY29uZGl0aW9uYWxseS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAyNy1zeXNjb25mMDEtVXNlLV9TQ18yX0NfVkVSU0lPTi1jb25kaXRpb25hbGx5LnBhdGNoCkBAIC03LDYgKzcsOCBAQAogCiBTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgogU2lnbmVkLW9mZi1ieTogRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICB0ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL3N5c2NvbmYvc3lzY29uZjAxLmMgfCAyICsrCiAgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMjgtcnRfc2lnYWN0aW9uLmgtVXNlLXNpZ2hhbmRsZXJfdC1pbnN0ZWFkLW9mLV9fc2lnaGFuZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDI4LXJ0X3NpZ2FjdGlvbi5oLVVzZS1zaWdoYW5kbGVyX3QtaW5zdGVhZC1vZi1fX3NpZ2hhbmQucGF0Y2gKaW5kZXggYjI2YWExMy4uYzczMGQ0NiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMjgtcnRfc2lnYWN0aW9uLmgtVXNlLXNpZ2hhbmRsZXJfdC1pbnN0ZWFkLW9mLV9fc2lnaGFuZC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAyOC1ydF9zaWdhY3Rpb24uaC1Vc2Utc2lnaGFuZGxlcl90LWluc3RlYWQtb2YtX19zaWdoYW5kLnBhdGNoCkBAIC04LDYgKzgsOCBAQAogc2lnaGFuZGxlcl90IG1ha2VzIGl0IHdvcmsgb24gbXVzbCB0b28KIAogU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAtLS0KICBpbmNsdWRlL2xhcGkvcnRfc2lnYWN0aW9uLmggICAgICAgICAgICAgICAgICAgICAgfCAyICstCiAgdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9ydF9zaWdzdXNwZW5kL01ha2VmaWxlIHwgMyArKysKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDMwLWxpYi1Vc2UtUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUtaW4tcGxhY2Utb2YtUFRIUkVBRF8ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAzMC1saWItVXNlLVBUSFJFQURfTVVURVhfUkVDVVJTSVZFLWluLXBsYWNlLW9mLVBUSFJFQURfLnBhdGNoCmluZGV4IGM1ZmFjOWIuLmVmYTZkMDYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDMwLWxpYi1Vc2UtUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUtaW4tcGxhY2Utb2YtUFRIUkVBRF8ucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMzAtbGliLVVzZS1QVEhSRUFEX01VVEVYX1JFQ1VSU0lWRS1pbi1wbGFjZS1vZi1QVEhSRUFEXy5wYXRjaApAQCAtOCw2ICs4LDggQEAKIAogU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIFNpZ25lZC1vZmYtYnk6IERlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZwogLS0tCiAgbGliL3RzdF9yZXMuYyB8IDQgKysrKwogIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDM0LXBlcmlvZGljX291dHB1dC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDM0LXBlcmlvZGljX291dHB1dC5wYXRjaAppbmRleCA1OWNhZWZlLi5jMmVmODk5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAzNC1wZXJpb2RpY19vdXRwdXQucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMzQtcGVyaW9kaWNfb3V0cHV0LnBhdGNoCkBAIC0xLDQgKzEsNyBAQAotQWRkIHBlcmlvZGljIG91dHB1dCBmb3IgbG9uZyB0aW1lIHRlc3QuCitGcm9tIDVhNzdlMmJkYzA4M2Y0Zjg0MmE4YmE3YzJkYjFhN2FjNmU1ZjA2NjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEZW5na2UgRHUgPGRlbmdrZS5kdUB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAzMSBNYXkgMjAxNyAyMToyNjowNSAtMDQwMAorU3ViamVjdDogW1BBVENIXSBBZGQgcGVyaW9kaWMgb3V0cHV0IGZvciBsb25nIHRpbWUgdGVzdC4KIAogVGhpcyBpcyBuZWVkZWQgaW4gY29udGV4dCBvZiBoYXZpbmcgc2NyaXB0cyBydW5uaW5nIGx0cCB0ZXN0cyBhbmQKIHdhaXRpbmcgd2l0aCBhIHRpbWVvdXQgZm9yIHRoZSBvdXRwdXQgb2YgdGhlIHRlc3RzLgpAQCAtNiwyMCArOSwyNiBAQAogU2lnbmVkLW9mZi1ieTogVHVkb3IgRmxvcmVhIDx0dWRvci5mbG9yZWFAZW5lYS5jb20+CiBVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIAotZGlmZiAtcnVOIGEvdGVzdGNhc2VzL2tlcm5lbC9jb250cm9sbGVycy9tZW1jZy9zdHJlc3MvbWVtY2dfc3RyZXNzX3Rlc3Quc2ggYi90ZXN0Y2FzZXMva2VybmVsL2NvbnRyb2xsZXJzL21lbWNnL3N0cmVzcy9tZW1jZ19zdHJlc3NfdGVzdC5zaAotLS0tIGEvdGVzdGNhc2VzL2tlcm5lbC9jb250cm9sbGVycy9tZW1jZy9zdHJlc3MvbWVtY2dfc3RyZXNzX3Rlc3Quc2gJMjAxMy0xMS0wOCAxNTo1NDowOS41MTUwNDkwODEgKzAxMDAKLSsrKyBiL3Rlc3RjYXNlcy9rZXJuZWwvY29udHJvbGxlcnMvbWVtY2cvc3RyZXNzL21lbWNnX3N0cmVzc190ZXN0LnNoCTIwMTMtMTEtMDggMjI6MzI6MTUuNTg3MzcwNDA2ICswMTAwCi1AQCAtMzcsNyArMzcsOCBAQAorU2lnbmVkLW9mZi1ieTogRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIC4uLi9rZXJuZWwvY29udHJvbGxlcnMvbWVtY2cvc3RyZXNzL21lbWNnX3N0cmVzc190ZXN0LnNoICAgICAgfCAxMSArKysrKysrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0Y2FzZXMva2VybmVsL2NvbnRyb2xsZXJzL21lbWNnL3N0cmVzcy9tZW1jZ19zdHJlc3NfdGVzdC5zaCBiL3Rlc3RjYXNlcy9rZXJuZWwvY29udHJvbGxlcnMvbWVtY2cvc3RyZXNzL21lbWNnX3N0cmVzc190ZXN0LnNoCitpbmRleCBhZjFhNzA4Li4wODRlNjI4IDEwMDc1NQorLS0tIGEvdGVzdGNhc2VzL2tlcm5lbC9jb250cm9sbGVycy9tZW1jZy9zdHJlc3MvbWVtY2dfc3RyZXNzX3Rlc3Quc2gKKysrKyBiL3Rlc3RjYXNlcy9rZXJuZWwvY29udHJvbGxlcnMvbWVtY2cvc3RyZXNzL21lbWNnX3N0cmVzc190ZXN0LnNoCitAQCAtMzcsNyArMzcsOCBAQCBpZiBbICJ4JChncmVwIC13IG1lbW9yeSAvcHJvYy9jZ3JvdXBzIHwgY3V0IC1mNCkiICE9ICJ4MSIgXTsgdGhlbgogICAgICAgICAgZXhpdCAwCiAgZmkKICAKLS1SVU5fVElNRT0kKCggNjAgKiA2MCApKQorLVJVTl9USU1FPSQoKCAxNSAqIDYwICkpCiArT05FX01JTlVURT02MAotK1JVTl9USU1FPTYwCisrUlVOX1RJTUU9MTUKICAKICBjbGVhbnVwKCkKICB7Ci1AQCAtNjIsNyArNjMsNyBAQAorQEAgLTYyLDcgKzYzLDcgQEAgZG9fbW91bnQoKQogICMgJDEgLSBOdW1iZXIgb2YgY2dyb3VwcwogICMgJDIgLSBBbGxvY2F0ZWQgaG93IG11Y2ggbWVtb3J5IGluIG9uZSBwcm9jZXNzPyBpbiBNQgogICMgJDMgLSBUaGUgaW50ZXJ2YWwgdG8gdG91Y2ggbWVtb3J5IGluIGEgcHJvY2VzcwpAQCAtMjgsMTYgKzM3LDE5IEBACiAgcnVuX3N0cmVzcygpCiAgewogIAlkb19tb3VudDsKLUBAIC04MSw3ICs4MiwxMSBAQAorQEAgLTgxLDcgKzgyLDExIEBAIHJ1bl9zdHJlc3MoKQogIAkJZXZhbCAvYmluL2tpbGwgLXMgU0lHVVNSMSBcJHBpZCRpIDI+IC9kZXYvbnVsbAogIAlkb25lCiAgCiAtCXNsZWVwICQ0CiArCWZvciBpIGluICQoc2VxIDAgJCgoJDQtMSkpKQogKwlkbwotKwkJZXZhbCBlY2hvICJTdGFydGVkICRpIG1pbiBhZ28uIFN0aWxsIGFsaXZlLi4uICIgCisrCQlldmFsIGVjaG8gIlN0YXJ0ZWQgJGkgbWluIGFnby4gU3RpbGwgYWxpdmUuLi4gIgogKwkJc2xlZXAgJE9ORV9NSU5VVEUKICsJZG9uZQogIAogIAlmb3IgaSBpbiAkKHNlcSAwICQoKCQxLTEpKSkKICAJZG8KKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMzctbHRwLWZpeC1QQUdFX1NJWkUtcmVkZWZpbml0aW9uLWFuZC1PX0NSRUFULXVuZGVjbGVhci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDM3LWx0cC1maXgtUEFHRV9TSVpFLXJlZGVmaW5pdGlvbi1hbmQtT19DUkVBVC11bmRlY2xlYXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg3MzhhZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDM3LWx0cC1maXgtUEFHRV9TSVpFLXJlZGVmaW5pdGlvbi1hbmQtT19DUkVBVC11bmRlY2xlYXIucGF0Y2gKQEAgLTAsMCArMSwxMTMgQEAKK0Zyb20gYTlkNTU5NWQyZmEyYWIyNTJmMWNhYmY2M2Y0YjY1YzNlZmJhZmViOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+CitEYXRlOiBUaHUsIDEwIEF1ZyAyMDE3IDE1OjI3OjAzICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGx0cDogZml4IFBBR0VfU0laRSByZWRlZmluaXRpb24gYW5kIE9fQ1JFQVQgdW5kZWNsZWFyIHdoZW4KKyBidWlsZCB3aXRoIG11c2wKKworZXJyb3IgMToKKworfHN0YWNrX2NsYXNoLmM6NTA6MjI6IGVycm9yOiBleHBlY3RlZCBpZGVudGlmaWVyIG9yICcoJyBiZWZvcmUgbnVtZXJpYyBjb25zdGFudAorfCBzdGF0aWMgdW5zaWduZWQgbG9uZyBQQUdFX1NJWkU7CisKK1RoaXMgaXMgYmVjYXVzZSB0aGUgbXVzbCBsaWJjIGFscmVhZHkgY29udGFpbiBQQUdFX1NJWkUgZGVmaW5pdGlvbiBpbiBsaW1pdHMuYywKK3dlIGNhbiBjaGVjayBpdCBoZXJlOgorCisgICAgaHR0cHM6Ly9naXQubXVzbC1saWJjLm9yZy9jZ2l0L211c2wvdHJlZS9pbmNsdWRlL2xpbWl0cy5oI240MworCitlcnJvciAyOgorCit8Y2swMS5jOjE1NzoyMjogZXJyb3I6ICdPX0NSRUFUJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbik7IGRpZCB5b3UgbWVhbiAnU19JUkVBRCc/Cit8ICAgZmQgPSBvcGVuKGZpbGVuYW1lLCBPX0NSRUFUIHwgT19UUlVOQyB8IE9fUkRXUiwgMDY0NCk7Cit8ICAgICAgICAgICAgICAgICAgICAgICBefn5+fn5+Cit8ICAgICAgICAgICAgICAgICAgICAgICBTX0lSRUFECisKK1RoaXMgaXMgYmVjYXVzZSB0aGUgbXVzbCBsaWJjIHB1dCB0aG9zZSBpbiBmY250bC5oLCBzbyB3ZSBzaG91bGQgaW5jbHVkZSB0aGF0CitmaWxlLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbIGh0dHBzOi8vZ2l0aHViLmNvbS9saW51eC10ZXN0LXByb2plY3QvbHRwL3B1bGwvMTk0IF0KKworU2lnbmVkLW9mZi1ieTogRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRlc3RjYXNlcy9jdmUvc3RhY2tfY2xhc2guYyAgICAgICAgICAgICAgIHwgMTIgKysrKysrLS0tLS0tCisgdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9mbG9jay9mbG9jazAxLmMgfCAgMSArCisgdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9mbG9jay9mbG9jazAyLmMgfCAgMSArCisgMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0Y2FzZXMvY3ZlL3N0YWNrX2NsYXNoLmMgYi90ZXN0Y2FzZXMvY3ZlL3N0YWNrX2NsYXNoLmMKK2luZGV4IDJlZjFhODIuLjdjNDU5OTEgMTAwNjQ0CistLS0gYS90ZXN0Y2FzZXMvY3ZlL3N0YWNrX2NsYXNoLmMKKysrKyBiL3Rlc3RjYXNlcy9jdmUvc3RhY2tfY2xhc2guYworQEAgLTQ3LDcgKzQ3LDcgQEAKKyAjaW5jbHVkZSAidHN0X3Rlc3QuaCIKKyAjaW5jbHVkZSAidHN0X3NhZmVfc3RkaW8uaCIKKyAKKy1zdGF0aWMgdW5zaWduZWQgbG9uZyBQQUdFX1NJWkU7Cisrc3RhdGljIHVuc2lnbmVkIGxvbmcgUEFHRV9TSVpFX3RzdDsKKyBzdGF0aWMgdW5zaWduZWQgbG9uZyBQQUdFX01BU0s7Cisgc3RhdGljIHVuc2lnbmVkIGxvbmcgR0FQX1BBR0VTID0gMjU2OworIHN0YXRpYyB1bnNpZ25lZCBsb25nIFRIUkVTSE9MRDsKK0BAIC02Niw3ICs2Niw3IEBAIHZvaWQgZXhoYXVzdF9zdGFja19pbnRvX3NpZ3NlZ3Yodm9pZCkKKyAJZXhoYXVzdF9zdGFja19pbnRvX3NpZ3NlZ3YoKTsKKyB9CisgCistI2RlZmluZSBNQVBQRURfTEVOIFBBR0VfU0laRQorKyNkZWZpbmUgTUFQUEVEX0xFTiBQQUdFX1NJWkVfdHN0Cisgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWFwcGVkX2FkZHI7CisgCisgdm9pZCBzZWd2X2hhbmRsZXIoaW50IHNpZywgc2lnaW5mb190ICppbmZvLCB2b2lkICpkYXRhIExUUF9BVFRSSUJVVEVfVU5VU0VEKQorQEAgLTE1MCw3ICsxNTAsNyBAQCB2b2lkIGRvX2NoaWxkKHZvaWQpCisgCXN0YWNrX3Qgc2lnbmFsX3N0YWNrOworIAlzdHJ1Y3Qgc2lnYWN0aW9uIHNlZ3Zfc2lnID0gey5zYV9zaWdhY3Rpb24gPSBzZWd2X2hhbmRsZXIsIC5zYV9mbGFncyA9IFNBX09OU1RBQ0t8U0FfU0lHSU5GT307CisgCXZvaWQgKm1hcDsKKy0JdW5zaWduZWQgbG9uZyBnYXAgPSBHQVBfUEFHRVMgKiBQQUdFX1NJWkU7CisrCXVuc2lnbmVkIGxvbmcgZ2FwID0gR0FQX1BBR0VTICogUEFHRV9TSVpFX3RzdDsKKyAJc3RydWN0IHJsaW1pdCBybGltaXQ7CisgCisgCXJsaW1pdC5ybGltX2N1ciA9IHJsaW1pdC5ybGltX21heCA9IFJMSU1fSU5GSU5JVFk7CitAQCAtMjAwLDggKzIwMCw4IEBAIHZvaWQgc2V0dXAodm9pZCkKKyB7CisgCWNoYXIgYnVmWzQwOTZdLCAqcDsKKyAKKy0JUEFHRV9TSVpFID0gc3lzY29uZihfU0NfUEFHRVNJWkUpOworLQlQQUdFX01BU0sgPSB+KFBBR0VfU0laRSAtIDEpOworKwlQQUdFX1NJWkVfdHN0ID0gc3lzY29uZihfU0NfUEFHRVNJWkUpOworKwlQQUdFX01BU0sgPSB+KFBBR0VfU0laRV90c3QgLSAxKTsKKyAKKyAJYnVmWzQwOTVdID0gJ1wwJzsKKyAJU0FGRV9GSUxFX1NDQU5GKCIvcHJvYy9jbWRsaW5lIiwgIiU0MDk1W15cbl0iLCBidWYpOworQEAgLTIxNCw3ICsyMTQsNyBAQCB2b2lkIHNldHVwKHZvaWQpCisgCQl0c3RfcmVzKFRJTkZPLCAic3RhY2tfZ3VhcmRfZ2FwID0gJWxkIiwgR0FQX1BBR0VTKTsKKyAJfQorIAorLQlUSFJFU0hPTEQgPSAoR0FQX1BBR0VTIC0gMSkgKiBQQUdFX1NJWkU7CisrCVRIUkVTSE9MRCA9IChHQVBfUEFHRVMgLSAxKSAqIFBBR0VfU0laRV90c3Q7CisgCisgCXsKKyAJCXZvbGF0aWxlIGludCAqYSA9IGFsbG9jYSgxMjgpOworZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvZmxvY2svZmxvY2swMS5jIGIvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9mbG9jay9mbG9jazAxLmMKK2luZGV4IDNlMTdiZTQuLjA2ZDg5ZTMgMTAwNjQ0CistLS0gYS90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL2Zsb2NrL2Zsb2NrMDEuYworKysrIGIvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9mbG9jay9mbG9jazAxLmMKK0BAIC02OSw2ICs2OSw3IEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisgI2luY2x1ZGUgPHN5cy9maWxlLmg+CisrI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgInRlc3QuaCIKKyAKKyB2b2lkIHNldHVwKHZvaWQpOworZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvZmxvY2svZmxvY2swMi5jIGIvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9mbG9jay9mbG9jazAyLmMKK2luZGV4IDQxNGRmNjguLjlkZGY3MjkgMTAwNjQ0CistLS0gYS90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL2Zsb2NrL2Zsb2NrMDIuYworKysrIGIvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9mbG9jay9mbG9jazAyLmMKK0BAIC03NSw2ICs3NSw3IEBACisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvZmlsZS5oPgorICNpbmNsdWRlIDxzeXMvd2FpdC5oPgorKyNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlICJ0ZXN0LmgiCistLSAKKzIuNy40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDM4LWNvbW1hbmRzLWdkYjAxLXJlcGxhY2Utc3RkaW4td2l0aC1kZXYtbnVsbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDM4LWNvbW1hbmRzLWdkYjAxLXJlcGxhY2Utc3RkaW4td2l0aC1kZXYtbnVsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2MwYTRiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMzgtY29tbWFuZHMtZ2RiMDEtcmVwbGFjZS1zdGRpbi13aXRoLWRldi1udWxsLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gMmY2YWI4ZjY5NGIyNmI3ZjI1NjY2MjRmNmQxZjIzNzg4ZDZhYjhhMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphbiBTdGFuY2VrIDxqc3RhbmNla0ByZWRoYXQuY29tPgorRGF0ZTogTW9uLCAxMSBTZXAgMjAxNyAxMjo1Nzo1OCArMDIwMAorU3ViamVjdDogW1BBVENIXSBjb21tYW5kcy9nZGIwMTogcmVwbGFjZSBzdGRpbiB3aXRoIC9kZXYvbnVsbAorCitJZiB0aGlzIHRlc3RjYXNlIHJ1bnMgYXMgYmFja2dyb3VuZCBwcm9jZXNzLCBnZGIgY2FuIHJlY2VpdmUKK1NJR1RUT1UgYW5kIHRoZW4gdGVzdGNhc2UgZ2V0cyBzdHVjay4KKworU2lnbmVkLW9mZi1ieTogSmFuIFN0YW5jZWsgPGpzdGFuY2VrQHJlZGhhdC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1todHRwczovL2dpdGh1Yi5jb20vbGludXgtdGVzdC1wcm9qZWN0L2x0cC9jb21taXQvMmY2YWI4ZjY5NGIyNmI3ZjI1NjY2MjRmNmQxZjIzNzg4ZDZhYjhhMF0KKworU2lnbmVkLW9mZi1ieTogWWkgWmhhbyA8eWkuemhhb0B3aW5kcml2ZXIuY29tPgorLS0tCisgdGVzdGNhc2VzL2NvbW1hbmRzL2dkYi9nZGIwMS5zaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9jb21tYW5kcy9nZGIvZ2RiMDEuc2ggYi90ZXN0Y2FzZXMvY29tbWFuZHMvZ2RiL2dkYjAxLnNoCitpbmRleCAwN2FlMzZmLi5lM2E1YjUxIDEwMDc1NQorLS0tIGEvdGVzdGNhc2VzL2NvbW1hbmRzL2dkYi9nZGIwMS5zaAorKysrIGIvdGVzdGNhc2VzL2NvbW1hbmRzL2dkYi9nZGIwMS5zaAorQEAgLTI5LDcgKzI5LDcgQEAgVFNUX05FRURTX0NNRFM9ImdkYiAvYmluL2NhdCIKKyAKKyBzaW1wbGVfdGVzdCgpCisgeworLQlnZGIgL2Jpbi9jYXQgLWV4ICJydW4gL2V0Yy9wYXNzd2QiIC1leCBxdWl0CisrCWdkYiAvYmluL2NhdCAtZXggInJ1biAvZXRjL3Bhc3N3ZCIgLWV4IHF1aXQgPCAvZGV2L251bGwKKyAJUkM9JD8KKyAJaWYgWyAkUkMgLWVxIDAgXSA7IHRoZW4KKyAJCXRzdF9yZXMgVFBBU1MgImdkYiBhdHRhY2hlZCB0byBwcm9jZXNzIGFuZCBjb21wbGV0ZWQgcnVuIgorLS0gCisyLjcuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAzOS1mY250bC1maXgtdGhlLXRpbWUtZGVmLXRvLXVzZS10aW1lX3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAzOS1mY250bC1maXgtdGhlLXRpbWUtZGVmLXRvLXVzZS10aW1lX3QucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwYzFkYWQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMzktZmNudGwtZml4LXRoZS10aW1lLWRlZi10by11c2UtdGltZV90LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotRnJvbSA3YmNlM2QyMjM0OTQ4MDNjYjMyODk3Y2FiZTY2MTE5MDc2ZTUzZDg5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4KLURhdGU6IFdlZCwgOCBGZWIgMjAxNyAxNjoyMzo1MSArMDgwMAotU3ViamVjdDogW1BBVENIIDUvNV0gZmNudGw6IGZpeCB0aGUgdGltZSgpIGRlZiB0byB1c2UgdGltZV90Ci0KLVRoaXMgZml4ZXMgdGhlIGJ1aWxkIG9uIFgzMiwgd2hlcmUgbG9uZyBpcyAzMi1iaXQgcmF0aGVyIHRoYW4gNjQtYml0LgotCi1TaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgotU2lnbmVkLW9mZi1ieTogRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4KLS0tLQotIHRlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvZmNudGwvZmNudGwxNC5jIHwgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9mY250bC9mY250bDE0LmMgYi90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL2ZjbnRsL2ZjbnRsMTQuYwotaW5kZXggYzYxZWIyNC4uOTllMzg2NyAxMDA2NDQKLS0tLSBhL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvZmNudGwvZmNudGwxNC5jCi0rKysgYi90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL2ZjbnRsL2ZjbnRsMTQuYwotQEAgLTc3NSw3ICs3NzUsNyBAQCB2b2lkIGRvY2hpbGQodm9pZCkKLSAKLSB2b2lkIHJ1bl90ZXN0KGludCBmaWxlX2ZsYWcsIGludCBmaWxlX21vZGUsIGludCBzZWVrLCBpbnQgc3RhcnQsIGludCBlbmQpCi0gewotLQlleHRlcm4gbG9uZyB0aW1lKCk7Ci0rCWV4dGVybiB0aW1lX3QgdGltZSgpOwotIAotIAlmYWlsID0gMDsKLSAKLS0tIAotMi43LjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwXzIwMTcwMTE2LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwXzIwMTcwMTE2LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGFmMTA0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cF8yMDE3MDExNi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi1TVU1NQVJZID0gIkxpbnV4IFRlc3QgUHJvamVjdCIKLURFU0NSSVBUSU9OID0gIlRoZSBMaW51eCBUZXN0IFByb2plY3QgaXMgYSBqb2ludCBwcm9qZWN0IHdpdGggU0dJLCBJQk0sIE9TREwsIGFuZCBCdWxsIHdpdGggYSBnb2FsIHRvIGRlbGl2ZXIgdGVzdCBzdWl0ZXMgdG8gdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSB0aGF0IHZhbGlkYXRlIHRoZSByZWxpYWJpbGl0eSwgcm9idXN0bmVzcywgYW5kIHN0YWJpbGl0eSBvZiBMaW51eC4gVGhlIExpbnV4IFRlc3QgUHJvamVjdCBpcyBhIGNvbGxlY3Rpb24gb2YgdG9vbHMgZm9yIHRlc3RpbmcgdGhlIExpbnV4IGtlcm5lbCBhbmQgcmVsYXRlZCBmZWF0dXJlcy4iCi1IT01FUEFHRSA9ICJodHRwOi8vbHRwLnNvdXJjZWZvcmdlLm5ldCIKLVNFQ1RJT04gPSAiY29uc29sZS91dGlscyIKLUxJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MisgJiBMR1BMdjIrICYgTEdQTHYyLjErICYgQlNELTItQ2xhdXNlIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJcCi0gICAgZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKLSAgICBmaWxlOi8vdGVzdGNhc2VzL2tlcm5lbC9jb250cm9sbGVycy9mcmVlemVyL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIFwKLSAgICBmaWxlOi8vdGVzdGNhc2VzL2tlcm5lbC9jb250cm9sbGVycy9mcmVlemVyL3J1bl9mcmVlemVyLnNoO2JlZ2lubGluZT01O2VuZGxpbmU9MTc7bWQ1PTg2YTYxZDJjMDQyZDU5ODM2ZmZiMzUzYTIxNDU2NDk4IFwKLSAgICBmaWxlOi8vdGVzdGNhc2VzL2tlcm5lbC9ob3RwbHVnL21lbW9yeV9ob3RwbHVnL0NPUFlJTkc7bWQ1PWUwNGEyZTU0MmIyYjg2MjliZjljZDJiYTI5YjBmZTQxIFwKLSAgICBmaWxlOi8vdGVzdGNhc2VzL2tlcm5lbC9ob3RwbHVnL2NwdV9ob3RwbHVnL0NPUFlJTkc7bWQ1PWUwNGEyZTU0MmIyYjg2MjliZjljZDJiYTI5YjBmZTQxIFwKLSAgICBmaWxlOi8vdGVzdGNhc2VzL29wZW5fcG9zaXhfdGVzdHN1aXRlL0NPUFlJTkc7bWQ1PTIxNmU0M2I3MmVmYmU0ZWQ5MDE3Y2MxOWM0YzY4YjAxIFwKLSAgICBmaWxlOi8vdGVzdGNhc2VzL3JlYWx0aW1lL0NPUFlJTkc7bWQ1PTEyZjg4NGQyYWUxZmY4N2MwOWU1YjdjY2MyYzRjYTdlIFwKLSAgICBmaWxlOi8vdG9vbHMvcG91bmRlcjIxL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKLSAgICBmaWxlOi8vdXRpbHMvYmVuY2htYXJrL2tlcm5iZW5jaC0wLjQyL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKLSAgICBmaWxlOi8vdXRpbHMvZmZzYi02LjAtcmMyL0NPUFlJTkc7bWQ1PWM0NjA4MjE2N2EzMTRkNzg1ZDAxMmEyNDQ3NDhkODAzIFwKLSIKLQotREVQRU5EUyA9ICJhdHRyIGxpYmFpbyBsaWJjYXAgYWNsIG9wZW5zc2wgemlwLW5hdGl2ZSIKLURFUEVORFNfYXBwZW5kX2xpYmMtbXVzbCA9ICIgZnRzICIKLUVYVFJBX09FTUFLRV9hcHBlbmRfbGliYy1tdXNsID0gIiBMSUJDPW11c2wgIgotQ0ZMQUdTX2FwcGVuZF9wb3dlcnBjNjQgPSAiIC1EX19TQU5FX1VTRVJTUEFDRV9UWVBFU19fIgotQ0ZMQUdTX2FwcGVuZF9taXBzYXJjaG42NCA9ICIgLURfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18iCi1TUkNSRVYgPSAiMmM4NDU3YjA3NjlmYzAyNmU0ZTE3NzJmNGMyYTZkYTBiZTYzYTYzMSIKLQotU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2xpbnV4LXRlc3QtcHJvamVjdC9sdHAuZ2l0IFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtYWRkLV9HTlVfU09VUkNFLXRvLXBlY19saXN0ZW5lci5jLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDItQWRkLWtub2ItdG8tY29udHJvbC13aGV0aGVyLW51bWEtc3VwcG9ydC1zaG91bGQtYmUtYy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAzLUFkZC1rbm9iLXRvLWNvbnRyb2wtdGlycGMtc3VwcG9ydC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA0LWJ1aWxkLUFkZC1vcHRpb24tdG8tc2VsZWN0LWxpYmMtaW1wbGVtZW50YXRpb24ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwNS1rZXJuZWwtY29udHJvbGxlcnMtTGluay13aXRoLWxpYmZ0cy1leHBsaWNpdGx5LW9uLW11LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDYtZml4LVBBVEhfTUFYLXVuZGVjbGFyZWQtd2hlbi1idWlsZGluZy13aXRoLW11c2wucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwNy1maXgtX19XT1JEU0laRS11bmRlY2xhcmVkLXdoZW4tYnVpbGRpbmctd2l0aC1tdXNsLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDgtQ2hlY2staWYtX19HTElCQ19QUkVSRVEtaXMtZGVmaW5lZC1iZWZvcmUtdXNpbmctaXQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwOS1maXgtcmVkZWZpbml0aW9uLW9mLXN0cnVjdC1tc2didWYtZXJyb3ItYnVpbGRpbmctd2l0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTAtcmVwbGFjZS1fX0JFR0lOX0RFQ0xTLWFuZC1fX0VORF9ERUNMUy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDExLVJlbmFtZS1zaWdzZXQtdmFyaWFibGUtdG8tc2lnc2V0MS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDEyLWZpeC1mYWNjZXNzYXQwMS5jLWJ1aWxkLWZhaWxzLXdpdGgtc2VjdXJpdHktZmxhZ3MucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxOC1ndWFyZC1tYWxsb2NvcHQtd2l0aC1fX0dMSUJDX18ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAyMC1nZXRkZW50cy1kZWZpbmUtZ2V0ZGVudHMtZ2V0ZGVudHM2NC1vbmx5LWZvci1nbGliYy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDIxLURlZmluZS1fR05VX1NPVVJDRS1mb3ItTVJFTUFQX01BWU1PVkUtZGVmaW5pdGlvbi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDIzLXB0cmFjZS1Vc2UtaW50LWluc3RlYWQtb2YtZW51bS1fX3B0cmFjZV9yZXF1ZXN0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjQtcnRfc2lnYWN0aW9uLXJ0X3NpZ3Byb2NtYXJrLURlZmluZS1fR05VX1NPVVJDRS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDI1LW1jX2dldGhvc3QtaW5jbHVkZS1zeXMtdHlwZXMuaC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDI2LWNyYXNoMDEtRGVmaW5lLV9HTlVfU09VUkNFLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMjctc3lzY29uZjAxLVVzZS1fU0NfMl9DX1ZFUlNJT04tY29uZGl0aW9uYWxseS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDI4LXJ0X3NpZ2FjdGlvbi5oLVVzZS1zaWdoYW5kbGVyX3QtaW5zdGVhZC1vZi1fX3NpZ2hhbmQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAzMC1saWItVXNlLVBUSFJFQURfTVVURVhfUkVDVVJTSVZFLWluLXBsYWNlLW9mLVBUSFJFQURfLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMzMtc2htYXQxLUNvdmVyLUdOVS1zcGVjaWZpYy1jb2RlLXVuZGVyLV9fVVNFX0dOVS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDM0LXBlcmlvZGljX291dHB1dC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDM1LWZpeC10ZXN0X3Byb2Nfa2lsbC1oYW5nLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMzYtdGVzdGNhc2VzLW5ldHdvcmstbmZzdjQtYWNsLWFjbDEuYy1TZWN1cml0eS1maXgtb24tcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDM5LWZjbnRsLWZpeC10aGUtdGltZS1kZWYtdG8tdXNlLXRpbWVfdC5wYXRjaCBcCi0gICAgICAgICAgICIKLQotUyA9ICIke1dPUktESVJ9L2dpdCIKLQotaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCi0KLVRBUkdFVF9DQ19BUkNIICs9ICIke0xERkxBR1N9IgotCi1leHBvcnQgcHJlZml4ID0gIi9vcHQvbHRwIgotZXhwb3J0IGV4ZWNfcHJlZml4ID0gIi9vcHQvbHRwIgotCi1QQUNLQUdFQ09ORklHW251bWFdID0gIi0td2l0aC1udW1hLCAtLXdpdGhvdXQtbnVtYSwgbnVtYWN0bCwiCi1FWFRSQV9BVVRPUkVDT05GICs9ICItSSAke1N9L3Rlc3RjYXNlcy9yZWFsdGltZS9tNCIKLUVYVFJBX09FQ09ORiA9ICIgLS13aXRoLXBvd2VyLW1hbmFnZW1lbnQtdGVzdHN1aXRlIC0td2l0aC1yZWFsdGltZS10ZXN0c3VpdGUgIgotIyBsdHAgbmV0d29yay9ycGMgdGVzdCBjYXNlcyBmdGJmcyB3aGVuIGxpYnRpcnBjIGlzIGZvdW5kCi1FWFRSQV9PRUNPTkYgKz0gIiAtLXdpdGhvdXQtdGlycGMgIgotCi0jIFRoZSBtYWtlZmlsZXMgbWFrZSBleGNlc3NpdmUgdXNlIG9mIG1ha2UgLUMgYW5kIHNldmVyYWwgaW5jbHVkZSB0ZXN0Y2FzZXMubWsKLSMgd2hpY2ggdHJpZ2dlcnMgYSBidWlsZCBvZiB0aGUgc3lzY2FsbCBoZWFkZXIuIFRvIHJlcHJvZHVjZSwgYnVpbGQgbHRwLAotIyB0aGVuIGRlbGV0ZSB0aGUgaGVhZGVyLCB0aGVuICJtYWtlIC1qIFhYIiBhbmQgd2F0Y2ggcmVnZW4uc2ggcnVuIG11bHRpcGxlCi0jIHRpbWVzLiBJdHMgZWFzaWVyIHRvIGdlbmVyYXRlIHRoaXMgb25jZSBoZXJlIGluc3RlYWQuCi1kb19jb21waWxlX3ByZXBlbmQgKCkgewotCSggbWFrZSAtQyAke0J9L3Rlc3RjYXNlcy9rZXJuZWwgaW5jbHVkZS9saW51eF9zeXNjYWxsX251bWJlcnMuaCApCi19Ci0KLWRvX2luc3RhbGwoKXsKLSAgICBpbnN0YWxsIC1kICR7RH0vb3B0L2x0cC8KLSAgICBvZV9ydW5tYWtlIERFU1RESVI9JHtEfSBTS0lQX0lEQ0hFQ0s9MSBpbnN0YWxsCi0KLSAgICAjIGZpeHVwIG5vdCBkZXBsb3kgU1RQZmFpbHVyZV9yZXBvcnQucGwgdG8gYXZvaWQgY29uZnVzaW5nIGFib3V0IGl0IGZhaWxzIHRvIHJ1bgotICAgICMgYXMgaXQgbGFja3MgZGVwZW5kZW5jeSBvbiBzb21lIHBlcmwgbW91ZGxlIHN1Y2ggYXMgTFdQOjpTaW1wbGUKLSAgICAjIEFuZCB0aGlzIHNjcmlwdCBwcmV2aW91c2x5IHdvcmtzIGFzIGEgdG9vbCBmb3IgYW5hbHl6aW5nIGZhaWx1cmVzIGZyb20gTFRQCi0gICAgIyBydW5zIG9uIHRoZSBPU0RMJ3MgU2NhbGVhYmxlIFRlc3QgUGxhdGZvcm0gKFNUUCkgYW5kIGl0IG1haW5seSBhY2Nlc3NlcwotICAgICMgaHR0cDovL2toYWNrLm9zZGwub3JnIHRvIHJldHJpZXZlIGx0cCB0ZXN0IHJlc3VsdHMgcnVuIG9uCi0gICAgIyBPU0RMJ3MgU2NhbGVhYmxlIFRlc3QgUGxhdGZvcm0sIGJ1dCBub3cgaHR0cDovL2toYWNrLm9zZGwub3JnIHVuYWNjZXNzaWJsZQotICAgIHJtIC1yZiAke0R9L29wdC9sdHAvYmluL1NUUGZhaWx1cmVfcmVwb3J0LnBsCi0KLSAgICAjIEluIG9lLWNvcmUsIHdlIGRvZXNuJ3Qgc3VwcG9ydCBrc2ggYW5kIGNzaCBub3csIHNvIHJlbW92ZSBpbi5jc2ggYW5kIGluLmtzaC4KLSAgICBybSAke0R9L29wdC9sdHAvdGVzdGNhc2VzL2RhdGEvZmlsZTAxL2luLmNzaAotICAgIHJtICR7RH0vb3B0L2x0cC90ZXN0Y2FzZXMvZGF0YS9maWxlMDEvaW4ua3NoCi0gICAgIyBDb3B5IFBPU0lYIHRlc3Qgc3VpdGUgaW50byAke0R9L29wdC9sdHAvdGVzdGNhc2VzIGJ5IG1hbnVhbAotICAgIGNwIC1yIHRlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZSAke0R9L29wdC9sdHAvdGVzdGNhc2VzCi19Ci0KLVJERVBFTkRTXyR7UE59ID0gInBlcmwgZTJmc3Byb2dzLW1rZTJmcyBweXRob24tY29yZSBsaWJhaW8gYmFzaCBnYXdrIGV4cGVjdCBsZGQgdW56aXAgZ3ppcCBjcGlvIGNyb25pZSBsb2dyb3RhdGUgd2hpY2ggYXQiCi0KLUZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiL29wdC9sdHAvbGliL2xpYm1lbS5hIC9vcHQvbHRwL3Rlc3RjYXNlcy9kYXRhL25tMDEvbGliLmEiCi0KLUZJTEVTXyR7UE59ICs9ICIvb3B0L2x0cC8qIC9vcHQvbHRwL3J1bnRlc3QvKiAvb3B0L2x0cC9zY2VuYXJpb19ncm91cHMvKiAvb3B0L2x0cC90ZXN0Y2FzZXMvYmluLyogL29wdC9sdHAvdGVzdGNhc2VzL2Jpbi8qL2Jpbi8qIC9vcHQvbHRwL3Rlc3RzY3JpcHRzLyogL29wdC9sdHAvdGVzdGNhc2VzL29wZW5fcG9zaXhfdGVzdHN1aXRlLyogL29wdC9sdHAvdGVzdGNhc2VzL29wZW5fcG9zaXhfdGVzdHN1aXRlL2NvbmZvcm1hbmNlLyogL29wdC9sdHAvdGVzdGNhc2VzL29wZW5fcG9zaXhfdGVzdHN1aXRlL0RvY3VtZW50YXRpb24vKiAvb3B0L2x0cC90ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUvZnVuY3Rpb25hbC8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS9pbmNsdWRlLyogL29wdC9sdHAvdGVzdGNhc2VzL29wZW5fcG9zaXhfdGVzdHN1aXRlL3NjcmlwdHMvKiAvb3B0L2x0cC90ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUvc3RyZXNzLyogL29wdC9sdHAvdGVzdGNhc2VzL29wZW5fcG9zaXhfdGVzdHN1aXRlL3Rvb2xzLyoiCi0KLSMgQXZvaWQgZ2VuZXJhdGVkIGJpbmFyaWVzIHN0cmlwcGluZy4gT3RoZXJ3aXNlIHNvbWUgb2YgdGhlIGx0cCB0ZXN0cyBzdWNoIGFzIGxkZDAxICYgbm0wMSBmYWlscwotSU5ISUJJVF9QQUNLQUdFX1NUUklQID0gIjEiCi1JTkhJQklUX1BBQ0tBR0VfREVCVUdfU1BMSVQgPSAiMSIKLSMgSG93ZXZlciwgdGVzdF9hcmNoX3N0cmlwcGVkIGlzIGFscmVhZHkgc3RyaXBwZWQsIHNvLi4uCi1JTlNBTkVfU0tJUF8ke1BOfSArPSAiYWxyZWFkeS1zdHJpcHBlZCIKLQotIyBBdm9pZCBmaWxlIGRlcGVuZGVuY3kgc2NhbnMsIGFzIExUUCBjaGVja3MgZm9yIHRoaW5ncyB0aGF0IG1heSBvciBtYXkgbm90Ci0jIGV4aXN0IG9uIHRoZSBydW5uaW5nIHN5c3RlbS4gIEZvciBpbnN0YW5jZSBpdCBoYXMgc3BlY2lmaWMgY2hlY2tzIGZvcgotIyBjc2ggYW5kIGtzaCB3aGljaCBhcmUgbm90IHR5cGljYWxseSBwYXJ0IG9mIE9wZW5FbWJlZGRlZCBzeXN0ZW1zIChidXQKLSMgY2FuIGJlIGFkZGVkIHZpYSBhZGRpdGlvbmFsIGxheWVycy4pCi1TS0lQX0ZJTEVERVBTXyR7UE59ID0gJzEnCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHBfMjAxNzA1MTYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHBfMjAxNzA1MTYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUzY2JmZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cF8yMDE3MDUxNi5iYgpAQCAtMCwwICsxLDEyMyBAQAorU1VNTUFSWSA9ICJMaW51eCBUZXN0IFByb2plY3QiCitERVNDUklQVElPTiA9ICJUaGUgTGludXggVGVzdCBQcm9qZWN0IGlzIGEgam9pbnQgcHJvamVjdCB3aXRoIFNHSSwgSUJNLCBPU0RMLCBhbmQgQnVsbCB3aXRoIGEgZ29hbCB0byBkZWxpdmVyIHRlc3Qgc3VpdGVzIHRvIHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgdGhhdCB2YWxpZGF0ZSB0aGUgcmVsaWFiaWxpdHksIHJvYnVzdG5lc3MsIGFuZCBzdGFiaWxpdHkgb2YgTGludXguIFRoZSBMaW51eCBUZXN0IFByb2plY3QgaXMgYSBjb2xsZWN0aW9uIG9mIHRvb2xzIGZvciB0ZXN0aW5nIHRoZSBMaW51eCBrZXJuZWwgYW5kIHJlbGF0ZWQgZmVhdHVyZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2x0cC5zb3VyY2Vmb3JnZS5uZXQiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrICYgTEdQTHYyKyAmIExHUEx2Mi4xKyAmIEJTRC0yLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiXAorICAgIGZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9rZXJuZWwvY29udHJvbGxlcnMvZnJlZXplci9DT1BZSU5HO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9rZXJuZWwvY29udHJvbGxlcnMvZnJlZXplci9ydW5fZnJlZXplci5zaDtiZWdpbmxpbmU9NTtlbmRsaW5lPTE3O21kNT04NmE2MWQyYzA0MmQ1OTgzNmZmYjM1M2EyMTQ1NjQ5OCBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9rZXJuZWwvaG90cGx1Zy9tZW1vcnlfaG90cGx1Zy9DT1BZSU5HO21kNT1lMDRhMmU1NDJiMmI4NjI5YmY5Y2QyYmEyOWIwZmU0MSBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9rZXJuZWwvaG90cGx1Zy9jcHVfaG90cGx1Zy9DT1BZSU5HO21kNT1lMDRhMmU1NDJiMmI4NjI5YmY5Y2QyYmEyOWIwZmU0MSBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS9DT1BZSU5HO21kNT00OGIxYzVlYzYzM2UzZTMwZWMyY2Y4ODRhZTY5OTk0NyBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9yZWFsdGltZS9DT1BZSU5HO21kNT0xMmY4ODRkMmFlMWZmODdjMDllNWI3Y2NjMmM0Y2E3ZSBcCisgICAgZmlsZTovL3Rvb2xzL3BvdW5kZXIyMS9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgZmlsZTovL3V0aWxzL2JlbmNobWFyay9rZXJuYmVuY2gtMC40Mi9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgZmlsZTovL3V0aWxzL2Zmc2ItNi4wLXJjMi9DT1BZSU5HO21kNT1jNDYwODIxNjdhMzE0ZDc4NWQwMTJhMjQ0NzQ4ZDgwMyBcCisiCisKK0RFUEVORFMgPSAiYXR0ciBsaWJhaW8gbGliY2FwIGFjbCBvcGVuc3NsIHppcC1uYXRpdmUiCitERVBFTkRTX2FwcGVuZF9saWJjLW11c2wgPSAiIGZ0cyAiCitFWFRSQV9PRU1BS0VfYXBwZW5kX2xpYmMtbXVzbCA9ICIgTElCQz1tdXNsICIKK0NGTEFHU19hcHBlbmRfcG93ZXJwYzY0ID0gIiAtRF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfXyIKK0NGTEFHU19hcHBlbmRfbWlwc2FyY2huNjQgPSAiIC1EX19TQU5FX1VTRVJTUEFDRV9UWVBFU19fIgorU1JDUkVWID0gIjE4OTE2YTJlNmQ4Yzk5N2I3YjI5ZGNmYTk1NTBkNWExNWIyMmVkMjIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9saW51eC10ZXN0LXByb2plY3QvbHRwLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWFkZC1fR05VX1NPVVJDRS10by1wZWNfbGlzdGVuZXIuYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLUFkZC1rbm9iLXRvLWNvbnRyb2wtd2hldGhlci1udW1hLXN1cHBvcnQtc2hvdWxkLWJlLWMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1BZGQta25vYi10by1jb250cm9sLXRpcnBjLXN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC1idWlsZC1BZGQtb3B0aW9uLXRvLXNlbGVjdC1saWJjLWltcGxlbWVudGF0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUta2VybmVsLWNvbnRyb2xsZXJzLUxpbmstd2l0aC1saWJmdHMtZXhwbGljaXRseS1vbi1tdS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA3LWZpeC1fX1dPUkRTSVpFLXVuZGVjbGFyZWQtd2hlbi1idWlsZGluZy13aXRoLW11c2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOC1DaGVjay1pZi1fX0dMSUJDX1BSRVJFUS1pcy1kZWZpbmVkLWJlZm9yZS11c2luZy1pdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA5LWZpeC1yZWRlZmluaXRpb24tb2Ytc3RydWN0LW1zZ2J1Zi1lcnJvci1idWlsZGluZy13aXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMC1yZXBsYWNlLV9fQkVHSU5fREVDTFMtYW5kLV9fRU5EX0RFQ0xTLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTEtUmVuYW1lLXNpZ3NldC12YXJpYWJsZS10by1zaWdzZXQxLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTgtZ3VhcmQtbWFsbG9jb3B0LXdpdGgtX19HTElCQ19fLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjAtZ2V0ZGVudHMtZGVmaW5lLWdldGRlbnRzLWdldGRlbnRzNjQtb25seS1mb3ItZ2xpYmMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMS1EZWZpbmUtX0dOVV9TT1VSQ0UtZm9yLU1SRU1BUF9NQVlNT1ZFLWRlZmluaXRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMy1wdHJhY2UtVXNlLWludC1pbnN0ZWFkLW9mLWVudW0tX19wdHJhY2VfcmVxdWVzdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI0LXJ0X3NpZ2FjdGlvbi1ydF9zaWdwcm9jbWFyay1EZWZpbmUtX0dOVV9TT1VSQ0UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNS1tY19nZXRob3N0LWluY2x1ZGUtc3lzLXR5cGVzLmgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNi1jcmFzaDAxLURlZmluZS1fR05VX1NPVVJDRS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI3LXN5c2NvbmYwMS1Vc2UtX1NDXzJfQ19WRVJTSU9OLWNvbmRpdGlvbmFsbHkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyOC1ydF9zaWdhY3Rpb24uaC1Vc2Utc2lnaGFuZGxlcl90LWluc3RlYWQtb2YtX19zaWdoYW5kLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzAtbGliLVVzZS1QVEhSRUFEX01VVEVYX1JFQ1VSU0lWRS1pbi1wbGFjZS1vZi1QVEhSRUFEXy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDMzLXNobWF0MS1Db3Zlci1HTlUtc3BlY2lmaWMtY29kZS11bmRlci1fX1VTRV9HTlUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzNC1wZXJpb2RpY19vdXRwdXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzNS1maXgtdGVzdF9wcm9jX2tpbGwtaGFuZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDM2LXRlc3RjYXNlcy1uZXR3b3JrLW5mc3Y0LWFjbC1hY2wxLmMtU2VjdXJpdHktZml4LW9uLXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzNy1sdHAtZml4LVBBR0VfU0laRS1yZWRlZmluaXRpb24tYW5kLU9fQ1JFQVQtdW5kZWNsZWFyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzgtY29tbWFuZHMtZ2RiMDEtcmVwbGFjZS1zdGRpbi13aXRoLWRldi1udWxsLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKKworVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCisKK2V4cG9ydCBwcmVmaXggPSAiL29wdC9sdHAiCitleHBvcnQgZXhlY19wcmVmaXggPSAiL29wdC9sdHAiCisKK1BBQ0tBR0VDT05GSUdbbnVtYV0gPSAiLS13aXRoLW51bWEsIC0td2l0aG91dC1udW1hLCBudW1hY3RsLCIKK0VYVFJBX0FVVE9SRUNPTkYgKz0gIi1JICR7U30vdGVzdGNhc2VzL3JlYWx0aW1lL200IgorRVhUUkFfT0VDT05GID0gIiAtLXdpdGgtcG93ZXItbWFuYWdlbWVudC10ZXN0c3VpdGUgLS13aXRoLXJlYWx0aW1lLXRlc3RzdWl0ZSAiCisjIGx0cCBuZXR3b3JrL3JwYyB0ZXN0IGNhc2VzIGZ0YmZzIHdoZW4gbGlidGlycGMgaXMgZm91bmQKK0VYVFJBX09FQ09ORiArPSAiIC0td2l0aG91dC10aXJwYyAiCisKK2RvX2luc3RhbGwoKXsKKyAgICBpbnN0YWxsIC1kICR7RH0vb3B0L2x0cC8KKyAgICBvZV9ydW5tYWtlIERFU1RESVI9JHtEfSBTS0lQX0lEQ0hFQ0s9MSBpbnN0YWxsCisKKyAgICAjIGZpeHVwIG5vdCBkZXBsb3kgU1RQZmFpbHVyZV9yZXBvcnQucGwgdG8gYXZvaWQgY29uZnVzaW5nIGFib3V0IGl0IGZhaWxzIHRvIHJ1bgorICAgICMgYXMgaXQgbGFja3MgZGVwZW5kZW5jeSBvbiBzb21lIHBlcmwgbW91ZGxlIHN1Y2ggYXMgTFdQOjpTaW1wbGUKKyAgICAjIEFuZCB0aGlzIHNjcmlwdCBwcmV2aW91c2x5IHdvcmtzIGFzIGEgdG9vbCBmb3IgYW5hbHl6aW5nIGZhaWx1cmVzIGZyb20gTFRQCisgICAgIyBydW5zIG9uIHRoZSBPU0RMJ3MgU2NhbGVhYmxlIFRlc3QgUGxhdGZvcm0gKFNUUCkgYW5kIGl0IG1haW5seSBhY2Nlc3NlcworICAgICMgaHR0cDovL2toYWNrLm9zZGwub3JnIHRvIHJldHJpZXZlIGx0cCB0ZXN0IHJlc3VsdHMgcnVuIG9uCisgICAgIyBPU0RMJ3MgU2NhbGVhYmxlIFRlc3QgUGxhdGZvcm0sIGJ1dCBub3cgaHR0cDovL2toYWNrLm9zZGwub3JnIHVuYWNjZXNzaWJsZQorICAgIHJtIC1yZiAke0R9L29wdC9sdHAvYmluL1NUUGZhaWx1cmVfcmVwb3J0LnBsCisKKyAgICAjIENvcHkgUE9TSVggdGVzdCBzdWl0ZSBpbnRvICR7RH0vb3B0L2x0cC90ZXN0Y2FzZXMgYnkgbWFudWFsCisgICAgY3AgLXIgdGVzdGNhc2VzL29wZW5fcG9zaXhfdGVzdHN1aXRlICR7RH0vb3B0L2x0cC90ZXN0Y2FzZXMKK30KKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIGFjbCBcCisgICAgYXQgXAorICAgIGF0dHIgXAorICAgIGJhc2ggXAorICAgIGNwaW8gXAorICAgIGNyb25pZSBcCisgICAgY3VybCBcCisgICAgZTJmc3Byb2dzLW1rZTJmcyBcCisgICAgZXhwZWN0IFwKKyAgICBnYXdrIFwKKyAgICBnemlwIFwKKyAgICBpcHJvdXRlMiBcCisgICAgbGRkIFwKKyAgICBsaWJhaW8gXAorICAgIGxvZ3JvdGF0ZSBcCisgICAgcGVybCBcCisgICAgcHl0aG9uLWNvcmUgXAorICAgIHVuemlwIFwKKyAgICB1dGlsLWxpbnV4IFwKKyAgICB3aGljaCBcCisiCisKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiL29wdC9sdHAvbGliL2xpYm1lbS5hIC9vcHQvbHRwL3Rlc3RjYXNlcy9kYXRhL25tMDEvbGliLmEiCisKK0ZJTEVTXyR7UE59ICs9ICIvb3B0L2x0cC8qIC9vcHQvbHRwL3J1bnRlc3QvKiAvb3B0L2x0cC9zY2VuYXJpb19ncm91cHMvKiAvb3B0L2x0cC90ZXN0Y2FzZXMvYmluLyogL29wdC9sdHAvdGVzdGNhc2VzL2Jpbi8qL2Jpbi8qIC9vcHQvbHRwL3Rlc3RzY3JpcHRzLyogL29wdC9sdHAvdGVzdGNhc2VzL29wZW5fcG9zaXhfdGVzdHN1aXRlLyogL29wdC9sdHAvdGVzdGNhc2VzL29wZW5fcG9zaXhfdGVzdHN1aXRlL2NvbmZvcm1hbmNlLyogL29wdC9sdHAvdGVzdGNhc2VzL29wZW5fcG9zaXhfdGVzdHN1aXRlL0RvY3VtZW50YXRpb24vKiAvb3B0L2x0cC90ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUvZnVuY3Rpb25hbC8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS9pbmNsdWRlLyogL29wdC9sdHAvdGVzdGNhc2VzL29wZW5fcG9zaXhfdGVzdHN1aXRlL3NjcmlwdHMvKiAvb3B0L2x0cC90ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUvc3RyZXNzLyogL29wdC9sdHAvdGVzdGNhc2VzL29wZW5fcG9zaXhfdGVzdHN1aXRlL3Rvb2xzLyoiCisKKyMgQXZvaWQgZ2VuZXJhdGVkIGJpbmFyaWVzIHN0cmlwcGluZy4gT3RoZXJ3aXNlIHNvbWUgb2YgdGhlIGx0cCB0ZXN0cyBzdWNoIGFzIGxkZDAxICYgbm0wMSBmYWlscworSU5ISUJJVF9QQUNLQUdFX1NUUklQID0gIjEiCitJTkhJQklUX1BBQ0tBR0VfREVCVUdfU1BMSVQgPSAiMSIKKyMgSG93ZXZlciwgdGVzdF9hcmNoX3N0cmlwcGVkIGlzIGFscmVhZHkgc3RyaXBwZWQsIHNvLi4uCitJTlNBTkVfU0tJUF8ke1BOfSArPSAiYWxyZWFkeS1zdHJpcHBlZCIKKworIyBBdm9pZCBmaWxlIGRlcGVuZGVuY3kgc2NhbnMsIGFzIExUUCBjaGVja3MgZm9yIHRoaW5ncyB0aGF0IG1heSBvciBtYXkgbm90CisjIGV4aXN0IG9uIHRoZSBydW5uaW5nIHN5c3RlbS4gIEZvciBpbnN0YW5jZSBpdCBoYXMgc3BlY2lmaWMgY2hlY2tzIGZvcgorIyBjc2ggYW5kIGtzaCB3aGljaCBhcmUgbm90IHR5cGljYWxseSBwYXJ0IG9mIE9wZW5FbWJlZGRlZCBzeXN0ZW1zIChidXQKKyMgY2FuIGJlIGFkZGVkIHZpYSBhZGRpdGlvbmFsIGxheWVycy4pCitTS0lQX0ZJTEVERVBTXyR7UE59ID0gJzEnCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x6aXAvbHppcF8xLjE4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9semlwL2x6aXBfMS4xOC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFkYzhjZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x6aXAvbHppcF8xLjE4LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotU1VNTUFSWSA9ICJMb3NzbGVzcyBkYXRhIGNvbXByZXNzb3IgYmFzZWQgb24gdGhlIExaTUEgYWxnb3JpdGhtIgotSE9NRVBBR0UgPSAiaHR0cDovL2x6aXAubm9uZ251Lm9yZy9semlwLmh0bWwiCi1TRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCi1MSUNFTlNFID0gIkdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc2ZDZlMzAwZmZkOGZiOWQxOGJkOWIxMzZhOWJiYTEzIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RlY29kZXIuY2M7YmVnaW5saW5lPTM7ZW5kbGluZT0xNjttZDU9ZGIwOWZlM2Y5NTczZjk0ZDAwNzZmN2YwNzk1OWU2ZTEiCi0KLVNSQ19VUkkgPSAiJHtTQVZBTk5BSF9HTlVfTUlSUk9SfS9semlwL2x6aXAtJHtQVn0udGFyLmd6IgotCi1TUkNfVVJJW21kNXN1bV0gPSAiMzgzODU2NzQ2MGNlNGExMDE0M2RlNGJjY2M2NGZlMWMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDdmOTg4MmExMDRhYjA1NTMyZjQ2N2E3YjhmNGRkYmI4OThmYTJmMWU4ZDlkNDY4NTU2ZDZjMmQwNGRiMTRkZCIKLQotQ09ORklHVVJFT1BUUyA9ICJcCi0gICAgJy0tc3JjZGlyPSR7U30nIFwKLSAgICAnLS1wcmVmaXg9JHtwcmVmaXh9JyBcCi0gICAgJy0tZXhlYy1wcmVmaXg9JHtleGVjX3ByZWZpeH0nIFwKLSAgICAnLS1iaW5kaXI9JHtiaW5kaXJ9JyBcCi0gICAgJy0tZGF0YWRpcj0ke2RhdGFkaXJ9JyBcCi0gICAgJy0taW5mb2Rpcj0ke2luZm9kaXJ9JyBcCi0gICAgJy0tc3lzY29uZmRpcj0ke3N5c2NvbmZkaXJ9JyBcCi0gICAgJ0NYWD0ke0NYWH0nIFwKLSAgICAnQ1BQRkxBR1M9JHtDUFBGTEFHU30nIFwKLSAgICAnQ1hYRkxBR1M9JHtDWFhGTEFHU30nIFwKLSAgICAnTERGTEFHUz0ke0xERkxBR1N9JyBcCi0iCi1FWFRSQV9PRU1BS0UgPSAiIgotCi1CID0gIiR7U30vb2JqIgotZG9fY29uZmlndXJlICgpIHsKLSAgICAke1N9L2NvbmZpZ3VyZSAke0NPTkZJR1VSRU9QVFN9Ci19Ci0KLWRvX2luc3RhbGwgKCkgewotICAgIG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAotICAgICMgSW5mbyBkaXIgbGlzdGluZyBpc24ndCBpbnRlcmVzdGluZyBhdCB0aGlzIHBvaW50IHNvIHJlbW92ZSBpdCBpZiBpdCBleGlzdHMuCi0gICAgaWYgWyAtZSAiJHtEfSR7aW5mb2Rpcn0vZGlyIiBdOyB0aGVuCi0gICAgICAgIHJtIC1mICR7RH0ke2luZm9kaXJ9L2RpcgotICAgIGZpCi19Ci0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHppcC9semlwXzEuMTkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x6aXAvbHppcF8xLjE5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OWIzNjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x6aXAvbHppcF8xLjE5LmJiCkBAIC0wLDAgKzEsNDEgQEAKK1NVTU1BUlkgPSAiTG9zc2xlc3MgZGF0YSBjb21wcmVzc29yIGJhc2VkIG9uIHRoZSBMWk1BIGFsZ29yaXRobSIKK0hPTUVQQUdFID0gImh0dHA6Ly9semlwLm5vbmdudS5vcmcvbHppcC5odG1sIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NmQ2ZTMwMGZmZDhmYjlkMThiZDliMTM2YTliYmExMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kZWNvZGVyLmNjO2JlZ2lubGluZT0zO2VuZGxpbmU9MTY7bWQ1PWRiMDlmZTNmOTU3M2Y5NGQwMDc2ZjdmMDc5NTllNmUxIgorCitTUkNfVVJJID0gIiR7U0FWQU5OQUhfR05VX01JUlJPUn0vbHppcC9semlwLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjRkZDg3OTBkNzUyODQ0MGQwMzRmYzcxM2E4NjgwYmQzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZmYWRjNGY1NmJlMWJjMGQzYWUxNTVlYzQ1MjdiZDAwMzEzM2JkYzcwM2E3NTNiMmNjNjgzZjYxMGU2NDZiYTkiCisKK0NPTkZJR1VSRU9QVFMgPSAiXAorICAgICctLXNyY2Rpcj0ke1N9JyBcCisgICAgJy0tcHJlZml4PSR7cHJlZml4fScgXAorICAgICctLWV4ZWMtcHJlZml4PSR7ZXhlY19wcmVmaXh9JyBcCisgICAgJy0tYmluZGlyPSR7YmluZGlyfScgXAorICAgICctLWRhdGFkaXI9JHtkYXRhZGlyfScgXAorICAgICctLWluZm9kaXI9JHtpbmZvZGlyfScgXAorICAgICctLXN5c2NvbmZkaXI9JHtzeXNjb25mZGlyfScgXAorICAgICdDWFg9JHtDWFh9JyBcCisgICAgJ0NQUEZMQUdTPSR7Q1BQRkxBR1N9JyBcCisgICAgJ0NYWEZMQUdTPSR7Q1hYRkxBR1N9JyBcCisgICAgJ0xERkxBR1M9JHtMREZMQUdTfScgXAorIgorRVhUUkFfT0VNQUtFID0gIiIKKworQiA9ICIke1N9L29iaiIKK2RvX2NvbmZpZ3VyZSAoKSB7CisgICAgJHtTfS9jb25maWd1cmUgJHtDT05GSUdVUkVPUFRTfQorfQorCitkb19pbnN0YWxsICgpIHsKKyAgICBvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKKyAgICAjIEluZm8gZGlyIGxpc3RpbmcgaXNuJ3QgaW50ZXJlc3RpbmcgYXQgdGhpcyBwb2ludCBzbyByZW1vdmUgaXQgaWYgaXQgZXhpc3RzLgorICAgIGlmIFsgLWUgIiR7RH0ke2luZm9kaXJ9L2RpciIgXTsgdGhlbgorICAgICAgICBybSAtZiAke0R9JHtpbmZvZGlyfS9kaXIKKyAgICBmaQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMDEtRG9uLXQtcmV1c2Utd2Vhay1zeW1ib2wtb3B0b3B0LXRvLWZpeC1GVEJGUy1vbi1taXBzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAxLURvbi10LXJldXNlLXdlYWstc3ltYm9sLW9wdG9wdC10by1maXgtRlRCRlMtb24tbWlwcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdkYTMzMy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMDEtRG9uLXQtcmV1c2Utd2Vhay1zeW1ib2wtb3B0b3B0LXRvLWZpeC1GVEJGUy1vbi1taXBzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotRnJvbTogTHVrIENsYWVzIDxsdWtAZGViaWFuLm9yZz4KLURhdGU6IFNhdCwgNCBKdWwgMjAwOSAxMDo1NDo1MyArMDIwMAotU3ViamVjdDogRG9uJ3QgcmV1c2Ugd2VhayBzeW1ib2wgb3B0b3B0IHRvIGZpeCBGVEJGUyBvbiBtaXBzKgotCi1UaGlzIHBhdGNoIGlzIHRha2VuIGZyb20gCi1mdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQotLS0tCi0gZ2V0b3B0LmMgfCAgIDEwICsrKysrLS0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvZ2V0b3B0LmMgYi9nZXRvcHQuYwotaW5kZXggODNjZTYyOC4uODJlOTgzYyAxMDA2NDQKLS0tLSBhL2dldG9wdC5jCi0rKysgYi9nZXRvcHQuYwotQEAgLTQzLDcgKzQzLDcgQEAgdHlwZWRlZglpbnQJc3NpemVfdDsKLSBjaGFyCSpvcHRhcmc7Ci0gaW50CW9wdGluZCA9IDE7Ci0gaW50CW9wdGVyciA9IDE7Ci0taW50CW9wdG9wdDsKLStpbnQJb3B0b3B0YzsKLSAKLSBzdGF0aWMgdm9pZAotIGVycm9yKGNvbnN0IGNoYXIgKnMsIGludCBjKQotQEAgLTY5LDcgKzY5LDcgQEAgZXJyb3IoY29uc3QgY2hhciAqcywgaW50IGMpCi0gCQkqYnArKyA9ICpzKys7Ci0gCXdoaWxlICgqbXNnKQotIAkJKmJwKysgPSAqbXNnKys7Ci0tCSpicCsrID0gb3B0b3B0OwotKwkqYnArKyA9IG9wdG9wdGM7Ci0gCSpicCsrID0gJ1xuJzsKLSAJd3JpdGUoMiwgYnVmLCBicCAtIGJ1Zik7Ci0gCWFjX2ZyZWUoYnVmKTsKLUBAIC0xMDEsMTMgKzEwMSwxMyBAQCBnZXRvcHQoaW50IGFyZ2MsIGNoYXIgKmNvbnN0IGFyZ3ZbXSwgY29uc3QgY2hhciAqb3B0c3RyaW5nKQotIAkJfQotIAkJY3VycCA9ICZhcmd2W29wdGluZF1bMV07Ci0gCX0KLS0Jb3B0b3B0ID0gY3VycFswXSAmIDAzNzc7Ci0rCW9wdG9wdGMgPSBjdXJwWzBdICYgMDM3NzsKLSAJd2hpbGUgKG9wdHN0cmluZ1swXSkgewotIAkJaWYgKG9wdHN0cmluZ1swXSA9PSAnOicpIHsKLSAJCQlvcHRzdHJpbmcrKzsKLSAJCQljb250aW51ZTsKLSAJCX0KLS0JCWlmICgob3B0c3RyaW5nWzBdICYgMDM3NykgPT0gb3B0b3B0KSB7Ci0rCQlpZiAoKG9wdHN0cmluZ1swXSAmIDAzNzcpID09IG9wdG9wdGMpIHsKLSAJCQlpZiAob3B0c3RyaW5nWzFdID09ICc6JykgewotIAkJCQlpZiAoY3VycFsxXSAhPSAnXDAnKSB7Ci0gCQkJCQlvcHRhcmcgPSAoY2hhciAqKSZjdXJwWzFdOwotQEAgLTEyNyw3ICsxMjcsNyBAQCBnZXRvcHQoaW50IGFyZ2MsIGNoYXIgKmNvbnN0IGFyZ3ZbXSwgY29uc3QgY2hhciAqb3B0c3RyaW5nKQotIAkJCQkJb3B0aW5kKys7Ci0gCQkJCW9wdGFyZyA9IDA7Ci0gCQkJfQotLQkJCXJldHVybiBvcHRvcHQ7Ci0rCQkJcmV0dXJuIG9wdG9wdGM7Ci0gCQl9Ci0gCQlvcHRzdHJpbmcrKzsKLSAJfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAyLVBhdGNoZWQtb3V0LVNTTDItc3VwcG9ydC1zaW5jZS1pdC1pcy1uby1sb25nZXItc3VwcG8ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMDItUGF0Y2hlZC1vdXQtU1NMMi1zdXBwb3J0LXNpbmNlLWl0LWlzLW5vLWxvbmdlci1zdXBwby5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJhZDQzMy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMDItUGF0Y2hlZC1vdXQtU1NMMi1zdXBwb3J0LXNpbmNlLWl0LWlzLW5vLWxvbmdlci1zdXBwby5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLUZyb206IEhpbGtvIEJlbmdlbiA8YmVuZ2VuQGRlYmlhbi5vcmc+Ci1EYXRlOiBXZWQsIDI3IEFwciAyMDExIDAwOjE4OjQyICswMjAwCi1TdWJqZWN0OiBQYXRjaGVkIG91dCBTU0wyIHN1cHBvcnQgc2luY2UgaXQgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBPcGVuU1NMLgotCi1UaGlzIHBhdGNoIGlzIHRha2VuIGZyb20KLWZ0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vaC9oZWlybG9vbS1tYWlseC9oZWlybG9vbS1tYWlseF8xMi41LTUuZGViaWFuLnRhci54egotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIGlzIGRlYWRdCi0tLS0KLSBtYWlseC4xICAgfCAgICAyICstCi0gb3BlbnNzbC5jIHwgICAgNCArLS0tCi0gMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9tYWlseC4xIGIvbWFpbHguMQotaW5kZXggNDE3ZWEwNC4uYTAyZTQzMCAxMDA2NDQKLS0tLSBhL21haWx4LjEKLSsrKyBiL21haWx4LjEKLUBAIC0zNTc1LDcgKzM1NzUsNyBAQCBPbmx5IGFwcGxpY2FibGUgaWYgU1NML1RMUyBzdXBwb3J0IGlzIGJ1aWx0IHVzaW5nIE9wZW5TU0wuCi0gLlRQCi0gLkIgc3NsLW1ldGhvZAotIFNlbGVjdHMgYSBTU0wvVExTIHByb3RvY29sIHZlcnNpb247Ci0tdmFsaWQgdmFsdWVzIGFyZSBgc3NsMicsIGBzc2wzJywgYW5kIGB0bHMxJy4KLSt2YWxpZCB2YWx1ZXMgYXJlIGBzc2wzJywgYW5kIGB0bHMxJy4KLSBJZiB1bnNldCwgdGhlIG1ldGhvZCBpcyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5LAotIGlmIHBvc3NpYmxlLgotIC5UUAotZGlmZiAtLWdpdCBhL29wZW5zc2wuYyBiL29wZW5zc2wuYwotaW5kZXggYjRlMzNmYy4uNDRmZTRlNSAxMDA2NDQKLS0tLSBhL29wZW5zc2wuYwotKysrIGIvb3BlbnNzbC5jCi1AQCAtMjE2LDkgKzIxNiw3IEBAIHNzbF9zZWxlY3RfbWV0aG9kKGNvbnN0IGNoYXIgKnVocCkKLSAKLSAJY3AgPSBzc2xfbWV0aG9kX3N0cmluZyh1aHApOwotIAlpZiAoY3AgIT0gTlVMTCkgewotLQkJaWYgKGVxdWFsKGNwLCAic3NsMiIpKQotLQkJCW1ldGhvZCA9IFNTTHYyX2NsaWVudF9tZXRob2QoKTsKLS0JCWVsc2UgaWYgKGVxdWFsKGNwLCAic3NsMyIpKQotKwkJaWYgKGVxdWFsKGNwLCAic3NsMyIpKQotIAkJCW1ldGhvZCA9IFNTTHYzX2NsaWVudF9tZXRob2QoKTsKLSAJCWVsc2UgaWYgKGVxdWFsKGNwLCAidGxzMSIpKQotIAkJCW1ldGhvZCA9IFRMU3YxX2NsaWVudF9tZXRob2QoKTsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAwMy1GaXhlZC1MaW50aWFuLXdhcm5pbmctd2FybmluZy1tYWNyby1OLW5vdC1kZWZpbmVkLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAzLUZpeGVkLUxpbnRpYW4td2FybmluZy13YXJuaW5nLW1hY3JvLU4tbm90LWRlZmluZWQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzYjczYWUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAzLUZpeGVkLUxpbnRpYW4td2FybmluZy13YXJuaW5nLW1hY3JvLU4tbm90LWRlZmluZWQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi1Gcm9tOiBIaWxrbyBCZW5nZW4gPGJlbmdlbkBkZWJpYW4ub3JnPgotRGF0ZTogU2F0LCAxNCBBcHIgMjAxMiAyMDoyMjo0MyArMDIwMAotU3ViamVjdDogRml4ZWQgTGludGlhbiB3YXJuaW5nICh3YXJuaW5nOiBtYWNybyBgTicgbm90IGRlZmluZWQpCi0KLVRoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQotZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUtNS5kZWJpYW4udGFyLnh6Ci0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KLS0tLQotIG1haWx4LjEgfCAgICAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9tYWlseC4xIGIvbWFpbHguMQotaW5kZXggYTAyZTQzMC4uYjA3MjNiZCAxMDA2NDQKLS0tLSBhL21haWx4LjEKLSsrKyBiL21haWx4LjEKLUBAIC0zNzgxLDcgKzM3ODEsNyBAQCB5b3UgY291bGQgZXhhbWluZSB0aGUgZmlyc3QgbWVzc2FnZSBieSBnaXZpbmcgdGhlIGNvbW1hbmQ6Ci0gLnNwCi0gLmZpCi0gd2hpY2ggbWlnaHQgY2F1c2UKLS0uTiBtYWlseAotKy5JIG1haWx4Ci0gdG8gcmVzcG9uZCB3aXRoLCBmb3IgZXhhbXBsZToKLSAubmYKLSAuc3AKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxMS1vdXRvZi1JbnRyb2R1Y2UtZXhwYW5kYWRkci1mbGFnLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDExLW91dG9mLUludHJvZHVjZS1leHBhbmRhZGRyLWZsYWcucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzYjk1NWMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDExLW91dG9mLUludHJvZHVjZS1leHBhbmRhZGRyLWZsYWcucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi1Gcm9tIDk5ODRhZTVjYjBlYTBkNjFkZjE2MTJiMDY5NTJhNjEzMjNjMDgzZDkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBGbG9yaWFuIFdlaW1lciA8ZndlaW1lckByZWRoYXQuY29tPgotRGF0ZTogTW9uLCAxNyBOb3YgMjAxNCAxMToxMzozOCArMDEwMAotU3ViamVjdDogW1BBVENIIDEvNF0gb3V0b2Y6IEludHJvZHVjZSBleHBhbmRhZGRyIGZsYWcKLQotRG9jdW1lbnQgdGhhdCBhZGRyZXNzIGV4cGFuc2lvbiBpcyBkaXNhYmxlZCB1bmxlc3MgdGhlIGV4cGFuZGFkZHIKLWJpbmFyeSBvcHRpb24gaXMgc2V0LgotCi1UaGlzIGhhcyBiZWVuIGFzc2lnbmVkIENWRS0yMDE0LTc4NDQgZm9yIEJTRCBtYWlseCwgYnV0IGl0IGlzIG5vdAotYSB2dWxuZXJhYmlsaXR5IGluIEhlaXJsb29tIG1haWx4IGJlY2F1c2UgdGhpcyBmZWF0dXJlIHdhcyBkb2N1bWVudGVkLgotCi1UaGlzIHBhdGNoIGlzIHRha2VuIGZyb20KLWZ0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vaC9oZWlybG9vbS1tYWlseC9oZWlybG9vbS1tYWlseF8xMi41LTUuZGViaWFuLnRhci54egotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIGlzIGRlYWRdCi1DVkU6IENWRS0yMDE0LTc4NDQKLS0tLQotIG1haWx4LjEgfCAxNCArKysrKysrKysrKysrKwotIG5hbWVzLmMgfCAgMyArKysKLSAyIGZpbGVzIGNoYW5nZWQsIDE3IGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL21haWx4LjEgYi9tYWlseC4xCi1pbmRleCA3MGE3ODU5Li4yMmExNzFiIDEwMDY0NAotLS0tIGEvbWFpbHguMQotKysrIGIvbWFpbHguMQotQEAgLTY1Niw2ICs2NTYsMTQgQEAgYnV0IGFueSByZXBseSByZXR1cm5lZCB0byB0aGUgbWFjaGluZQotIHdpbGwgaGF2ZSB0aGUgc3lzdGVtIHdpZGUgYWxpYXMgZXhwYW5kZWQKLSBhcyBhbGwgbWFpbCBnb2VzIHRocm91Z2ggc2VuZG1haWwuCi0gLlNTICJSZWNpcGllbnQgYWRkcmVzcyBzcGVjaWZpY2F0aW9ucyIKLStJZiB0aGUKLSsuSSBleHBhbmRhZGRyCi0rb3B0aW9uIGlzIG5vdCBzZXQgKHRoZSBkZWZhdWx0KSwgcmVjaXBpZW50IGFkZHJlc3NlcyBtdXN0IGJlIG5hbWVzIG9mCi0rbG9jYWwgbWFpbGJveGVzIG9yIEludGVybmV0IG1haWwgYWRkcmVzc2VzLgotKy5QUAotK0lmIHRoZQotKy5JIGV4cGFuZGFkZHIKLStvcHRpb24gaXMgc2V0LCB0aGUgZm9sbG93aW5nIHJ1bGVzIGFwcGx5OgotIFdoZW4gYW4gYWRkcmVzcyBpcyB1c2VkIHRvIG5hbWUgYSByZWNpcGllbnQKLSAoaW4gYW55IG9mIFRvLCBDYywgb3IgQmNjKSwKLSBuYW1lcyBvZiBsb2NhbCBtYWlsIGZvbGRlcnMKLUBAIC0yMzkxLDYgKzIzOTksMTIgQEAgYW5kIGV4aXRzIGltbWVkaWF0ZWx5LgotIElmIHRoaXMgb3B0aW9uIGlzIHNldCwKLSBcZkltYWlseFxmUiBzdGFydHMgZXZlbiB3aXRoIGFuIGVtcHR5IG1haWxib3guCi0gLlRQCi0rLkIgZXhwYW5kYWRkcgotK0NhdXNlcwotKy5JIG1haWx4Ci0rdG8gZXhwYW5kIG1lc3NhZ2UgcmVjaXBpZW50IGFkZHJlc3NlcywgYXMgZXhwbGFpbmVkIGluIHRoZSBzZWN0aW9uLAotK1JlY2lwaWVudCBhZGRyZXNzIHNwZWNpZmljYXRpb25zLgotKy5UUAotIC5CIGZsaXByCi0gRXhjaGFuZ2VzIHRoZQotIC5JIFJlc3BvbmQKLWRpZmYgLS1naXQgYS9uYW1lcy5jIGIvbmFtZXMuYwotaW5kZXggNjZlOTc2Yi4uYzY5NTYwZiAxMDA2NDQKLS0tLSBhL25hbWVzLmMKLSsrKyBiL25hbWVzLmMKLUBAIC0yNjgsNiArMjY4LDkgQEAgb3V0b2Yoc3RydWN0IG5hbWUgKm5hbWVzLCBGSUxFICpmbywgc3RydWN0IGhlYWRlciAqaHApCi0gCUZJTEUgKmZvdXQsICpmaW47Ci0gCWludCBpc3BpcGU7Ci0gCi0rCWlmICh2YWx1ZSgiZXhwYW5kYWRkciIpID09IE5VTEwpCi0rCQlyZXR1cm4gbmFtZXM7Ci0rCi0gCXRvcCA9IG5hbWVzOwotIAlucCA9IG5hbWVzOwotIAl0aW1lKCZub3cpOwotLS0gCi0xLjkuMwotCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxMi11bnBhY2stRGlzYWJsZS1vcHRpb24tcHJvY2Vzc2luZy1mb3ItZW1haWwtYWRkcmVzc2VzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDEyLXVucGFjay1EaXNhYmxlLW9wdGlvbi1wcm9jZXNzaW5nLWZvci1lbWFpbC1hZGRyZXNzZXMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjZGJmZDguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDEyLXVucGFjay1EaXNhYmxlLW9wdGlvbi1wcm9jZXNzaW5nLWZvci1lbWFpbC1hZGRyZXNzZXMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi1Gcm9tIGUzNGUyYWM2N2I4MDQ5NzA4MGViZWNjY2VjNDBjM2I2MTQ1NjE2N2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBGbG9yaWFuIFdlaW1lciA8ZndlaW1lckByZWRoYXQuY29tPgotRGF0ZTogTW9uLCAxNyBOb3YgMjAxNCAxMToxNDowNiArMDEwMAotU3ViamVjdDogW1BBVENIIDIvNF0gdW5wYWNrOiBEaXNhYmxlIG9wdGlvbiBwcm9jZXNzaW5nIGZvciBlbWFpbCBhZGRyZXNzZXMKLSB3aGVuIGNhbGxpbmcgc2VuZG1haWwKLQotVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCi1mdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQotLS0tCi0gZXh0ZXJuLmggIHwgMiArLQotIG5hbWVzLmMgICB8IDggKysrKysrLS0KLSBzZW5kb3V0LmMgfCAyICstCi0gMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9leHRlcm4uaCBiL2V4dGVybi5oCi1pbmRleCA2Yjg1YmEwLi44ODczZmU4IDEwMDY0NAotLS0tIGEvZXh0ZXJuLmgKLSsrKyBiL2V4dGVybi5oCi1AQCAtMzk2LDcgKzM5Niw3IEBAIHN0cnVjdCBuYW1lICpvdXRvZihzdHJ1Y3QgbmFtZSAqbmFtZXMsIEZJTEUgKmZvLCBzdHJ1Y3QgaGVhZGVyICpocCk7Ci0gaW50IGlzX2ZpbGVhZGRyKGNoYXIgKm5hbWUpOwotIHN0cnVjdCBuYW1lICp1c2VybWFwKHN0cnVjdCBuYW1lICpuYW1lcyk7Ci0gc3RydWN0IG5hbWUgKmNhdChzdHJ1Y3QgbmFtZSAqbjEsIHN0cnVjdCBuYW1lICpuMik7Ci0tY2hhciAqKnVucGFjayhzdHJ1Y3QgbmFtZSAqbnApOwotK2NoYXIgKip1bnBhY2soc3RydWN0IG5hbWUgKnNtb3B0cywgc3RydWN0IG5hbWUgKm5wKTsKLSBzdHJ1Y3QgbmFtZSAqZWxpZGUoc3RydWN0IG5hbWUgKm5hbWVzKTsKLSBpbnQgY291bnQoc3RydWN0IG5hbWUgKm5wKTsKLSBzdHJ1Y3QgbmFtZSAqZGVsZXRlX2FsdGVybmF0ZXMoc3RydWN0IG5hbWUgKm5wKTsKLWRpZmYgLS1naXQgYS9uYW1lcy5jIGIvbmFtZXMuYwotaW5kZXggYzY5NTYwZi4uNDViYmFlZCAxMDA2NDQKLS0tLSBhL25hbWVzLmMKLSsrKyBiL25hbWVzLmMKLUBAIC01NDksNyArNTQ5LDcgQEAgY2F0KHN0cnVjdCBuYW1lICpuMSwgc3RydWN0IG5hbWUgKm4yKQotICAqIFJldHVybiBhbiBlcnJvciBpZiB0aGUgbmFtZSBsaXN0IHdvbid0IGZpdC4KLSAgKi8KLSBjaGFyICoqCi0tdW5wYWNrKHN0cnVjdCBuYW1lICpucCkKLSt1bnBhY2soc3RydWN0IG5hbWUgKnNtb3B0cywgc3RydWN0IG5hbWUgKm5wKQotIHsKLSAJY2hhciAqKmFwLCAqKnRvcDsKLSAJc3RydWN0IG5hbWUgKm47Ci1AQCAtNTY0LDcgKzU2NCw3IEBAIHVucGFjayhzdHJ1Y3QgbmFtZSAqbnApCi0gCSAqIHRoZSB0ZXJtaW5hdGluZyAwIHBvaW50ZXIuICBBZGRpdGlvbmFsIHNwb3RzIG1heSBiZSBuZWVkZWQKLSAJICogdG8gcGFzcyBhbG9uZyAtZiB0byB0aGUgaG9zdCBtYWlsZXIuCi0gCSAqLwotLQlleHRyYSA9IDI7Ci0rCWV4dHJhID0gMyArIGNvdW50KHNtb3B0cyk7Ci0gCWV4dHJhKys7Ci0gCW1ldG9vID0gdmFsdWUoIm1ldG9vIikgIT0gTlVMTDsKLSAJaWYgKG1ldG9vKQotQEAgLTU4MSw2ICs1ODEsMTAgQEAgdW5wYWNrKHN0cnVjdCBuYW1lICpucCkKLSAJCSphcCsrID0gIi1tIjsKLSAJaWYgKHZlcmJvc2UpCi0gCQkqYXArKyA9ICItdiI7Ci0rCWZvciAoOyBzbW9wdHMgIT0gTlVMTDsgc21vcHRzID0gc21vcHRzLT5uX2ZsaW5rKQotKwkJaWYgKChzbW9wdHMtPm5fdHlwZSAmIEdERUwpID09IDApCi0rCQkJKmFwKysgPSBzbW9wdHMtPm5fbmFtZTsKLSsJKmFwKysgPSAiLS0iOwotIAlmb3IgKDsgbiAhPSBOVUxMOyBuID0gbi0+bl9mbGluaykKLSAJCWlmICgobi0+bl90eXBlICYgR0RFTCkgPT0gMCkKLSAJCQkqYXArKyA9IG4tPm5fbmFtZTsKLWRpZmYgLS1naXQgYS9zZW5kb3V0LmMgYi9zZW5kb3V0LmMKLWluZGV4IDdiN2YyZWIuLmM1MmYxNWQgMTAwNjQ0Ci0tLS0gYS9zZW5kb3V0LmMKLSsrKyBiL3NlbmRvdXQuYwotQEAgLTgzNSw3ICs4MzUsNyBAQCBzdGFydF9tdGEoc3RydWN0IG5hbWUgKnRvLCBzdHJ1Y3QgbmFtZSAqbWFpbGFyZ3MsIEZJTEUgKmlucHV0LAotICNlbmRpZgkvKiBIQVZFX1NPQ0tFVFMgKi8KLSAKLSAJaWYgKChzbXRwID0gdmFsdWUoInNtdHAiKSkgPT0gTlVMTCkgewotLQkJYXJncyA9IHVucGFjayhjYXQobWFpbGFyZ3MsIHRvKSk7Ci0rCQlhcmdzID0gdW5wYWNrKG1haWxhcmdzLCB0byk7Ci0gCQlpZiAoZGVidWcgfHwgdmFsdWUoImRlYnVnIikpIHsKLSAJCQlwcmludGYoY2F0Z2V0cyhjYXRkLCBDQVRTRVQsIDE4MSwKLSAJCQkJCSJTZW5kbWFpbCBhcmd1bWVudHM6IikpOwotLS0gCi0xLjkuMwotCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxMy1maW8uYy1VbmNvbmRpdGlvbmFsbHktcmVxdWlyZS13b3JkZXhwLXN1cHBvcnQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTMtZmlvLmMtVW5jb25kaXRpb25hbGx5LXJlcXVpcmUtd29yZGV4cC1zdXBwb3J0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTU4ZDg2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxMy1maW8uYy1VbmNvbmRpdGlvbmFsbHktcmVxdWlyZS13b3JkZXhwLXN1cHBvcnQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotRnJvbSAyYmFlOGVjZjA0ZWMyYmE2YmI5ZjBhZjViODA0ODVkZDBlZGI0MjdkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRmxvcmlhbiBXZWltZXIgPGZ3ZWltZXJAcmVkaGF0LmNvbT4KLURhdGU6IE1vbiwgMTcgTm92IDIwMTQgMTI6NDg6MjUgKzAxMDAKLVN1YmplY3Q6IFtQQVRDSCAzLzRdIGZpby5jOiBVbmNvbmRpdGlvbmFsbHkgcmVxdWlyZSB3b3JkZXhwIHN1cHBvcnQKLQotVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCi1mdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQotLS0tCi0gZmlvLmMgfCA2NyArKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNjIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9maW8uYyBiL2Zpby5jCi1pbmRleCA2NWU4ZjEwLi4xNTI5MjM2IDEwMDY0NAotLS0tIGEvZmlvLmMKLSsrKyBiL2Zpby5jCi1AQCAtNDMsMTIgKzQzLDE1IEBAIHN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylmaW8uYwkyLjc2IChncml0dGVyKSA5LzE2LzA5IjsKLSAjZW5kaWYgLyogbm90IGxpbnQgKi8KLSAKLSAjaW5jbHVkZSAicmN2LmgiCi0rCi0rI2lmbmRlZiBIQVZFX1dPUkRFWFAKLSsjZXJyb3Igd29yZGV4cCBzdXBwb3J0IGlzIHJlcXVpcmVkCi0rI2VuZGlmCi0rCi0gI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0gI2luY2x1ZGUgPHN5cy9maWxlLmg+Ci0gI2luY2x1ZGUgPHN5cy93YWl0Lmg+Ci0tI2lmZGVmCUhBVkVfV09SREVYUAotICNpbmNsdWRlIDx3b3JkZXhwLmg+Ci0tI2VuZGlmCS8qIEhBVkVfV09SREVYUCAqLwotICNpbmNsdWRlIDx1bmlzdGQuaD4KLSAKLSAjaWYgZGVmaW5lZCAoVVNFX05TUykKLUBAIC00ODEsNyArNDg0LDYgQEAgbmV4dDoKLSBzdGF0aWMgY2hhciAqCi0gZ2xvYm5hbWUoY2hhciAqbmFtZSkKLSB7Ci0tI2lmZGVmCUhBVkVfV09SREVYUAotIAl3b3JkZXhwX3Qgd2U7Ci0gCWNoYXIgKmNwOwotIAlzaWdzZXRfdCBuc2V0OwotQEAgLTUyNyw2NSArNTI5LDYgQEAgZ2xvYm5hbWUoY2hhciAqbmFtZSkKLSAJfQotIAl3b3JkZnJlZSgmd2UpOwotIAlyZXR1cm4gY3A7Ci0tI2Vsc2UJLyogIUhBVkVfV09SREVYUCAqLwotLQljaGFyIHhuYW1lW1BBVEhTSVpFXTsKLS0JY2hhciBjbWRidWZbUEFUSFNJWkVdOwkJLyogYWxzbyB1c2VkIGZvciBmaWxlIG5hbWVzICovCi0tCWludCBwaWQsIGw7Ci0tCWNoYXIgKmNwLCAqc2hlbGw7Ci0tCWludCBwaXZlY1syXTsKLS0JZXh0ZXJuIGludCB3YWl0X3N0YXR1czsKLS0Jc3RydWN0IHN0YXQgc2J1ZjsKLS0KLS0JaWYgKHBpcGUocGl2ZWMpIDwgMCkgewotLQkJcGVycm9yKCJwaXBlIik7Ci0tCQlyZXR1cm4gbmFtZTsKLS0JfQotLQlzbnByaW50ZihjbWRidWYsIHNpemVvZiBjbWRidWYsICJlY2hvICVzIiwgbmFtZSk7Ci0tCWlmICgoc2hlbGwgPSB2YWx1ZSgiU0hFTEwiKSkgPT0gTlVMTCkKLS0JCXNoZWxsID0gU0hFTEw7Ci0tCXBpZCA9IHN0YXJ0X2NvbW1hbmQoc2hlbGwsIDAsIC0xLCBwaXZlY1sxXSwgIi1jIiwgY21kYnVmLCBOVUxMKTsKLS0JaWYgKHBpZCA8IDApIHsKLS0JCWNsb3NlKHBpdmVjWzBdKTsKLS0JCWNsb3NlKHBpdmVjWzFdKTsKLS0JCXJldHVybiBOVUxMOwotLQl9Ci0tCWNsb3NlKHBpdmVjWzFdKTsKLS1hZ2FpbjoKLS0JbCA9IHJlYWQocGl2ZWNbMF0sIHhuYW1lLCBzaXplb2YgeG5hbWUpOwotLQlpZiAobCA8IDApIHsKLS0JCWlmIChlcnJubyA9PSBFSU5UUikKLS0JCQlnb3RvIGFnYWluOwotLQkJcGVycm9yKCJyZWFkIik7Ci0tCQljbG9zZShwaXZlY1swXSk7Ci0tCQlyZXR1cm4gTlVMTDsKLS0JfQotLQljbG9zZShwaXZlY1swXSk7Ci0tCWlmICh3YWl0X2NoaWxkKHBpZCkgPCAwICYmIFdURVJNU0lHKHdhaXRfc3RhdHVzKSAhPSBTSUdQSVBFKSB7Ci0tCQlmcHJpbnRmKHN0ZGVyciwgY2F0Z2V0cyhjYXRkLCBDQVRTRVQsIDgxLAotLQkJCQkiXCIlc1wiOiBFeHBhbnNpb24gZmFpbGVkLlxuIiksIG5hbWUpOwotLQkJcmV0dXJuIE5VTEw7Ci0tCX0KLS0JaWYgKGwgPT0gMCkgewotLQkJZnByaW50ZihzdGRlcnIsIGNhdGdldHMoY2F0ZCwgQ0FUU0VULCA4MiwKLS0JCQkJCSJcIiVzXCI6IE5vIG1hdGNoLlxuIiksIG5hbWUpOwotLQkJcmV0dXJuIE5VTEw7Ci0tCX0KLS0JaWYgKGwgPT0gc2l6ZW9mIHhuYW1lKSB7Ci0tCQlmcHJpbnRmKHN0ZGVyciwgY2F0Z2V0cyhjYXRkLCBDQVRTRVQsIDgzLAotLQkJCQkiXCIlc1wiOiBFeHBhbnNpb24gYnVmZmVyIG92ZXJmbG93LlxuIiksIG5hbWUpOwotLQkJcmV0dXJuIE5VTEw7Ci0tCX0KLS0JeG5hbWVbbF0gPSAwOwotLQlmb3IgKGNwID0gJnhuYW1lW2wtMV07ICpjcCA9PSAnXG4nICYmIGNwID4geG5hbWU7IGNwLS0pCi0tCQk7Ci0tCWNwWzFdID0gJ1wwJzsKLS0JaWYgKHN0cmNocih4bmFtZSwgJyAnKSAmJiBzdGF0KHhuYW1lLCAmc2J1ZikgPCAwKSB7Ci0tCQlmcHJpbnRmKHN0ZGVyciwgY2F0Z2V0cyhjYXRkLCBDQVRTRVQsIDg0LAotLQkJCQkiXCIlc1wiOiBBbWJpZ3VvdXMuXG4iKSwgbmFtZSk7Ci0tCQlyZXR1cm4gTlVMTDsKLS0JfQotLQlyZXR1cm4gc2F2ZXN0cih4bmFtZSk7Ci0tI2VuZGlmCS8qICFIQVZFX1dPUkRFWFAgKi8KLSB9Ci0gCi0gLyoKLS0tIAotMS45LjMKLQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTQtZ2xvYm5hbWUtSW52b2tlLXdvcmRleHAtd2l0aC1XUkRFX05PQ01ELnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDE0LWdsb2JuYW1lLUludm9rZS13b3JkZXhwLXdpdGgtV1JERV9OT0NNRC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUxNGI4YS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTQtZ2xvYm5hbWUtSW52b2tlLXdvcmRleHAtd2l0aC1XUkRFX05PQ01ELnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotRnJvbSA3M2ZlZmEwYzFhYzcwMDQzZWM4NGYyZDhiOGY5ZjY4MzIxM2YxNjhkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRmxvcmlhbiBXZWltZXIgPGZ3ZWltZXJAcmVkaGF0LmNvbT4KLURhdGU6IE1vbiwgMTcgTm92IDIwMTQgMTM6MTE6MzIgKzAxMDAKLVN1YmplY3Q6IFtQQVRDSCA0LzRdIGdsb2JuYW1lOiBJbnZva2Ugd29yZGV4cCB3aXRoIFdSREVfTk9DTUQgKENWRS0yMDA0LTI3NzEpCi0KLVRoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQotZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUtNS5kZWJpYW4udGFyLnh6Ci0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KLUNWRTogQ1ZFLTIwMDQtMjc3MQotLS0tCi0gZmlvLmMgfCAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9maW8uYyBiL2Zpby5jCi1pbmRleCAxNTI5MjM2Li43NzRhMjA0IDEwMDY0NAotLS0tIGEvZmlvLmMKLSsrKyBiL2Zpby5jCi1AQCAtNDk3LDcgKzQ5Nyw3IEBAIGdsb2JuYW1lKGNoYXIgKm5hbWUpCi0gCXNpZ2VtcHR5c2V0KCZuc2V0KTsKLSAJc2lnYWRkc2V0KCZuc2V0LCBTSUdDSExEKTsKLSAJc2lncHJvY21hc2soU0lHX0JMT0NLLCAmbnNldCwgTlVMTCk7Ci0tCWkgPSB3b3JkZXhwKG5hbWUsICZ3ZSwgMCk7Ci0rCWkgPSB3b3JkZXhwKG5hbWUsICZ3ZSwgV1JERV9OT0NNRCk7Ci0gCXNpZ3Byb2NtYXNrKFNJR19VTkJMT0NLLCAmbnNldCwgTlVMTCk7Ci0gCXN3aXRjaCAoaSkgewotIAljYXNlIDA6Ci0tLSAKLTEuOS4zCi0KLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDE1LXVzci1zYmluLXNlbmRtYWlsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDE1LXVzci1zYmluLXNlbmRtYWlsLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjU5OTE0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxNS11c3Itc2Jpbi1zZW5kbWFpbC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLURlc2NyaXB0aW9uOiBTZW5kbWFpbCBpcyBhdCAvdXNyL3NiaW4vc2VuZG1haWwKLSBBcyBwZXIgRGViaWFuIFBvbGljeSDCpzExLjYKLUF1dGhvcjogUnlhbiBLYXZhbmFnaCA8cmFrQGRlYmlhbi5vcmc+Ci1PcmlnaW46IERlYmlhbgotRm9yd2FyZGVkOiBubwotLS0tCi1UaGlzIHBhdGNoIGhlYWRlciBmb2xsb3dzIERFUC0zOiBodHRwOi8vZGVwLmRlYmlhbi5uZXQvZGVwcy9kZXAzLwotSW5kZXg6IGhlaXJsb29tLW1haWx4LTEyLjUvTWFrZWZpbGUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLVRoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQotZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUtNS5kZWJpYW4udGFyLnh6Ci0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KLQotLS0tIGhlaXJsb29tLW1haWx4LTEyLjUub3JpZy9NYWtlZmlsZQkyMDExLTA0LTI2IDE3OjIzOjIyLjAwMDAwMDAwMCAtMDQwMAotKysrIGhlaXJsb29tLW1haWx4LTEyLjUvTWFrZWZpbGUJMjAxNS0wMS0yNyAxMzoyMDowNC43MzM1NDI4MDEgLTA1MDAKLUBAIC0xMyw3ICsxMyw3IEBACi0gCi0gTUFJTFJDCQk9ICQoU1lTQ09ORkRJUikvbmFpbC5yYwotIE1BSUxTUE9PTAk9IC92YXIvbWFpbAotLVNFTkRNQUlMCT0gL3Vzci9saWIvc2VuZG1haWwKLStTRU5ETUFJTAk9IC91c3Ivc2Jpbi9zZW5kbWFpbAotIAotIERFU1RESVIJCT0KLSAKLUluZGV4OiBoZWlybG9vbS1tYWlseC0xMi41L21haWx4LjEKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBoZWlybG9vbS1tYWlseC0xMi41Lm9yaWcvbWFpbHguMQkyMDE1LTAxLTI3IDEzOjE4OjQ5LjAwMDAwMDAwMCAtMDUwMAotKysrIGhlaXJsb29tLW1haWx4LTEyLjUvbWFpbHguMQkyMDE1LTAxLTI3IDEzOjIwOjMyLjM4MjMzNjg2NyAtMDUwMAotQEAgLTQ5MjIsNyArNDkyMiw3IEBACi0gd2hpY2gganVzdCBhY3RzIGFzIGEgcHJveHkuCi0gLlBQCi0gXGZJTWFpbHhcZlIgaW1tZWRpYXRlbHkgY29udGFjdHMgdGhlIFNNVFAgc2VydmVyIChvcgotLS5JUiBcJS91c3IvbGliL3NlbmRtYWlsICkKLSsuSVIgXCUvdXNyL3NiaW4vc2VuZG1haWwgKQotIGV2ZW4gd2hlbiBvcGVyYXRpbmcgaW4KLSAuSSBkaXNjb25uZWN0ZWQKLSBtb2RlLgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy9leHBsaWNpdGx5LmRpc2FibGUua3JiNS5zdXBwb3J0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy9leHBsaWNpdGx5LmRpc2FibGUua3JiNS5zdXBwb3J0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzRmZDA0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvZXhwbGljaXRseS5kaXNhYmxlLmtyYjUuc3VwcG9ydC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLWtyYjUgc3VwcG9ydCBpcyBhdXRvZGV0ZWN0ZWQgZnJvbSBzeXNyb290IG1ha2luZyBidWlsZHMgdW5kZXRlcm1pbmlzdGljCi1mZWVsIGZyZWUgdG8gaW1wcm92ZSB0aGlzIHRvIHN1cHBvcnQgZXhwbGljaXRseSBlbmFibGluZy9kaXNhYmxpbmcgaXQKLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KLQotLS0tIGEvbWFrZWNvbmZpZwkyMDEzLTA3LTIxIDE1OjA2OjExLjE3Nzc5MjMzNCArMDIwMAotKysrIGIvbWFrZWNvbmZpZwkyMDEzLTA3LTIxIDE1OjA3OjIwLjAyODc5Mzk5NCArMDIwMAotQEAgLTQyNCwzNiArNDI0LDYgQEAKLSB9Ci0gIQotIAotLTwkdG1wMi5jIGxpbmtfY2hlY2sgZ3NzYXBpICdmb3IgR1NTQVBJIGluIGxpYmdzcycgXAotLQkJJyNkZWZpbmUgVVNFX0dTU0FQSScgJy1sZ3NzJyB8fAotLQk8JHRtcDIuYyBsaW5rX2NoZWNrIGdzc2FwaSAnZm9yIEdTU0FQSSBpbiBsaWJnc3NhcGlfa3JiNScgXAotLQkJCScjZGVmaW5lIFVTRV9HU1NBUEknICctbGdzc2FwaV9rcmI1JyB8fAotLQkJbGlua19jaGVjayBnc3NhcGkgJ2ZvciBHU1NBUEkgaW4gbGliZ3NzYXBpX2tyYjUsIG9sZC1zdHlsZScgXAotLQkJCQknI2RlZmluZSBVU0VfR1NTQVBJCi0tI2RlZmluZSBHU1NBUElfT0xEX1NUWUxFJyAnLWxnc3NhcGlfa3JiNScgPDxcISB8fCBcCi0tCQkJbGlua19jaGVjayBnc3NhcGkgJ2ZvciBHU1NBUEkgaW4gbGliZ3NzYXBpJyBcCi0tCQkJCScjZGVmaW5lIFVTRV9HU1NBUEkKLS0jZGVmaW5lCUdTU0FQSV9SRUdfSU5DTFVERScgJy1sZ3NzYXBpJyA8PFwlCi0tI2luY2x1ZGUgPGdzc2FwaS9nc3NhcGkuaD4KLS0jaW5jbHVkZSA8Z3NzYXBpL2dzc2FwaV9nZW5lcmljLmg+Ci0tCi0taW50IG1haW4odm9pZCkKLS17Ci0tCWdzc19pbXBvcnRfbmFtZSgwLCAwLCBnc3NfbnRfc2VydmljZV9uYW1lLCAwKTsKLS0JZ3NzX2luaXRfc2VjX2NvbnRleHQoMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCk7Ci0tCXJldHVybiAwOwotLX0KLS0hCi0tI2luY2x1ZGUgPGdzc2FwaS5oPgotLQotLWludCBtYWluKHZvaWQpCi0tewotLQlnc3NfaW1wb3J0X25hbWUoMCwgMCwgR1NTX0NfTlRfSE9TVEJBU0VEX1NFUlZJQ0UsIDApOwotLQlnc3NfaW5pdF9zZWNfY29udGV4dCgwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwKTsKLS0JcmV0dXJuIDA7Ci0tfQotLSUKLS0KLSBjYXQgPiR0bXAyLmMgPDxcIQotICNpbmNsdWRlICJjb25maWcuaCIKLSAjaWZkZWYgSEFWRV9OTF9MQU5HSU5GTwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9tYWlseF8xMi41LTUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L21haWx4XzEyLjUtNS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRkNzEwYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L21haWx4XzEyLjUtNS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLVNVTU1BUlkgPSAibWFpbHggaXMgdGhlIHRyYWRpdGlvbmFsIGNvbW1hbmQtbGluZS1tb2RlIG1haWwgdXNlciBhZ2VudCIKLQotREVTQ1JJUFRJT04gPSAiTWFpbHggaXMgZGVyaXZlZCBmcm9tIEJlcmtlbGV5IE1haWwgYW5kIGlzIGludGVuZGVkIHByb3ZpZGUgdGhlIFwKLWZ1bmN0aW9uYWxpdHkgb2YgdGhlIFBPU0lYIG1haWx4IGNvbW1hbmQgd2l0aCBhZGRpdGlvbmFsIHN1cHBvcnQgXAotZm9yIE1JTUUsIElNQVAsIFBPUDMsIFNNVFAsIGFuZCBTL01JTUUuIgotCi1IT01FUEFHRSA9ICJodHRwOi8vaGVpcmxvb20uc291cmNlZm9yZ2UubmV0L21haWx4Lmh0bWwiCi1TRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKLUxJQ0VOU0UgPSAiQlNEICYgTVBMLTEiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00MjAyYTBhNjI5MTBjZjk0ZjdhZjhhMzQzNmEyYTJkZCIKLQotREVQRU5EUyA9ICJvcGVuc3NsIgotCi1TUkNfVVJJID0gImh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLzIwMTYwNzI4VDA0MzQ0M1ovcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS5vcmlnLnRhci5nejtuYW1lPWFyY2hpdmUgXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1Eb24tdC1yZXVzZS13ZWFrLXN5bWJvbC1vcHRvcHQtdG8tZml4LUZUQkZTLW9uLW1pcHMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMi1QYXRjaGVkLW91dC1TU0wyLXN1cHBvcnQtc2luY2UtaXQtaXMtbm8tbG9uZ2VyLXN1cHBvLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDMtRml4ZWQtTGludGlhbi13YXJuaW5nLXdhcm5pbmctbWFjcm8tTi1ub3QtZGVmaW5lZC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDExLW91dG9mLUludHJvZHVjZS1leHBhbmRhZGRyLWZsYWcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAxMi11bnBhY2stRGlzYWJsZS1vcHRpb24tcHJvY2Vzc2luZy1mb3ItZW1haWwtYWRkcmVzc2VzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTMtZmlvLmMtVW5jb25kaXRpb25hbGx5LXJlcXVpcmUtd29yZGV4cC1zdXBwb3J0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTQtZ2xvYm5hbWUtSW52b2tlLXdvcmRleHAtd2l0aC1XUkRFX05PQ01ELnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMTUtdXNyLXNiaW4tc2VuZG1haWwucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZXhwbGljaXRseS5kaXNhYmxlLmtyYjUuc3VwcG9ydC5wYXRjaCBcCi0gICAgICAgICAgIgotCi1TUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIyOWE2MDMzZWYxNDEyODI0ZDAyZWI5ZDkyMTNjYjFmMiIKLVNSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjAxNWJhNDIwOTEzNTg2N2YzN2EwMjQ1ZDIyMjM1YTM5MmI4YmJlZDk1NjkxMzI4NmI4ODdjMmUyYTlhNDIxYWQiCi0KLSMgZm9yIHRoaXMgcGFja2FnZSB3ZSdyZSBtb3N0bHkgaW50ZXJlc3RlZCBpbiB0cmFja2luZyBkZWJpYW4gcGF0Y2hlcywKLSMgYW5kIG5vdCBpbiB0aGUgdXBzdHJlYW0gdmVyc2lvbiB3aGVyZSBhbGwgZGV2ZWxvcG1lbnQgaGFzIGVmZmVjdGl2ZWx5IHN0b3BwZWQKLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vaC9oZWlybG9vbS1tYWlseC8iCi1VUFNUUkVBTV9DSEVDS19SRUdFWCA9ICIoP1A8cHZlcj4oKFxkK1wuKikrKS0oKFxkK1wuKikrKSlcLihkaWZmfGRlYmlhblwudGFyKVwuKGd6fHh6KSIKLQotUyA9ICIke1dPUktESVJ9L2hlaXJsb29tLW1haWx4LTEyLjUiCi0KLWluaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcAotCi1DRkxBR1NfYXBwZW5kID0gIiAtRF9CU0RfU09VUkNFIC1EREVCSUFOIC1JJHtTfS9FWFQiCi0KLSMgIlNUUklQPXRydWUiIG1lYW5zIHRoYXQgJ3RydWUnIGNvbW1hbmQgd2lsbCBiZSB1c2VkIHRvICdzdHJpcCcgZmlsZXMgd2hpY2ggd2lsbCBhY2hpZXZlIHRoZSBlZmZlY3Qgb2Ygbm90IHN0cmlwcGluZyB0aGVtCi0jIG1haWx4J3MgTWFrZWZpbGUgZG9lc24ndCBhbGxvdyBhIG1vcmUgc3RyYWlnaHRmb3J3YXJkIHdheSB0byBhdm9pZCBzdHJpcHBpbmcKLUVYVFJBX09FTUFLRSA9ICJTRU5ETUFJTD0ke3NiaW5kaXJ9L3NlbmRtYWlsIElQdjY9LURIQVZFX0lQdjZfRlVOQ1MgUFJFRklYPS91c3IgVUNCSU5TVEFMTD0vdXNyL2Jpbi9pbnN0YWxsIFNUUklQPXRydWUiCi0KLSMgVGhlIG1ha2Vjb25maWcgY2FuJ3QgcnVuIHBhcmFsbGVsbHksIG90aGVyd2lzZSB0aGUgY2hlY2tpbmcgcmVzdWx0cwotIyBtaWdodCBiZSBpbmNvcnJlY3QgYW5kIGxlYWQgdG8gZXJyb3JzOgotIyBmaW8uYzo1NjoxNzogZmF0YWwgZXJyb3I6IHNzbC5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Ci0jICNpbmNsdWRlIDxzc2wuaD4KLVBBUkFMTEVMX01BS0UgPSAiIgotCi0jIENhdXNlcyBnY2MgdG8gZ2V0IHN0dWNrIGFuZCBlYXQgYWxsIGF2YWlsYWJsZSBtZW1vcnkgaW4gcWVtdWFybSBidWlsZHMKLSMgaHR0cDovL2Vycm9ycy55b2N0b3Byb2plY3Qub3JnL0Vycm9ycy9EZXRhaWxzLzIwNDg4LwotQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NCA9ICJhcm0iCi1BUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY1ID0gImFybSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuLXBhZ2VzL21hbi1wYWdlc180LjA5LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4tcGFnZXMvbWFuLXBhZ2VzXzQuMDkuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1ZmMyMWUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4tcGFnZXMvbWFuLXBhZ2VzXzQuMDkuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1TVU1NQVJZID0gIkxpbnV4IG1hbi1wYWdlcyIKLURFU0NSSVBUSU9OID0gIlRoZSBMaW51eCBtYW4tcGFnZXMgcHJvamVjdCBkb2N1bWVudHMgdGhlIExpbnV4IGtlcm5lbCBhbmQgQyBsaWJyYXJ5IGludGVyZmFjZXMgdGhhdCBhcmUgZW1wbG95ZWQgYnkgdXNlciBwcm9ncmFtcyIKLVNFQ1RJT04gPSAiY29uc29sZS91dGlscyIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvZG9jcy9tYW4tcGFnZXMiCi1MSUNFTlNFID0gIkdQTHYyKyIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO21kNT04ZjJhM2Q0MzA1N2Q0NThlNTA2NjcxNDk4MDU2N2E2MCIKLVNSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC9kb2NzLyR7QlBOfS9BcmNoaXZlLyR7QlB9LnRhci5neiIKLQotU1JDX1VSSVttZDVzdW1dID0gIjllM2M3YjEyYTVmZWNkYTlhNzE3YTRiY2MwYWUzYTY3IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVmYWMzMjRjZWZjZTBmYmZhZTBkZjZjMDZlZjNmNmQ2YWI1MjI3YjlhYWQyYTk0Zjg2NTdhMGUzOTAxZjkxODUiCi0KLVJERVBFTkRTXyR7UE59ID0gIm1hbiIKLQotZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKLWRvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgotCi1kb19pbnN0YWxsKCkgewotICAgICAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9Ci19Ci0KLSMgT25seSBkZWxpdmVyZXMgbWFuLXBhZ2VzIHNvIEZJTEVTXyR7UE59IGdldHMgZXZlcnl0aGluZwotRklMRVNfJHtQTn0tZG9jID0gIiIKLUZJTEVTXyR7UE59ID0gIiR7bWFuZGlyfS8qIgotCi1pbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKLQotQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgotQUxURVJOQVRJVkVfJHtQTn0gPSAicGFzc3dkLjUgZ2V0c3BuYW0uMyIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtwYXNzd2QuNV0gPSAiJHttYW5kaXJ9L21hbjUvcGFzc3dkLjUiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbZ2V0c3BuYW0uM10gPSAiJHttYW5kaXJ9L21hbjMvZ2V0c3BuYW0uMyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuLXBhZ2VzL21hbi1wYWdlc180LjExLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4tcGFnZXMvbWFuLXBhZ2VzXzQuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwNzdhOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuLXBhZ2VzL21hbi1wYWdlc180LjExLmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiTGludXggbWFuLXBhZ2VzIgorREVTQ1JJUFRJT04gPSAiVGhlIExpbnV4IG1hbi1wYWdlcyBwcm9qZWN0IGRvY3VtZW50cyB0aGUgTGludXgga2VybmVsIGFuZCBDIGxpYnJhcnkgaW50ZXJmYWNlcyB0aGF0IGFyZSBlbXBsb3llZCBieSB1c2VyIHByb2dyYW1zIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC9kb2NzL21hbi1wYWdlcyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7bWQ1PThmMmEzZDQzMDU3ZDQ1OGU1MDY2NzE0OTgwNTY3YTYwIgorU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L2RvY3MvJHtCUE59L0FyY2hpdmUvJHtCUH0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDA4MzAwZWQwOWQxYWQ1OTM4MDcwMTU4YjIxZGExZDEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTZkYjkxYTI0ZTY4YzdjNzY1YjdiOGU2MGYxNTkxZWQxMDQ5YmMyZGMzMTQzZGI3NzllYWU0ODM4Yjg5ZDE5NSIKKworUkRFUEVORFNfJHtQTn0gPSAibWFuIgorCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0KK30KKworIyBPbmx5IGRlbGl2ZXJlcyBtYW4tcGFnZXMgc28gRklMRVNfJHtQTn0gZ2V0cyBldmVyeXRoaW5nCitGSUxFU18ke1BOfS1kb2MgPSAiIgorRklMRVNfJHtQTn0gPSAiJHttYW5kaXJ9LyoiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCitBTFRFUk5BVElWRV8ke1BOfSA9ICJwYXNzd2QuNSBnZXRzcG5hbS4zIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3Bhc3N3ZC41XSA9ICIke21hbmRpcn0vbWFuNS9wYXNzd2QuNSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtnZXRzcG5hbS4zXSA9ICIke21hbmRpcn0vbWFuMy9nZXRzcG5hbS4zIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9maWxlcy8wMDAyLVRpY2tldC0zNjk3LXR0eV9pbml0LXVuaWZ5LWN1cnNlcy1pbml0aWFsaXphdGlvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvZmlsZXMvMDAwMi1UaWNrZXQtMzY5Ny10dHlfaW5pdC11bmlmeS1jdXJzZXMtaW5pdGlhbGl6YXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU0ZDRkMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvZmlsZXMvMDAwMi1UaWNrZXQtMzY5Ny10dHlfaW5pdC11bmlmeS1jdXJzZXMtaW5pdGlhbGl6YXRpb24ucGF0Y2gKQEAgLTAsMCArMSw2NiBAQAorRnJvbSA0ZDQ2YTEwODYyOWJlYjY2YTI5MzY3MmRiN2I0NGY4NjNiNjU5OGJhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGhvbWFzIERpY2tleSA8ZGlja2V5QGhpcy5jb20+CitEYXRlOiBGcmksIDE0IEFwciAyMDE3IDE0OjA2OjEzICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFRpY2tldCAjMzY5NzogKHR0eV9pbml0KTogdW5pZnkgY3Vyc2VzIGluaXRpYWxpemF0aW9uCisKKy4uLmZvciB2YXJpb3VzIGN1cnNlcyBpbXBsZW1lbnRhdGlvbnMuCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJldyBCb3JvZGluIDxhYm9yb2RpbkB2bWFpbC5ydT4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbaHR0cHM6Ly9naXRodWIuY29tL01pZG5pZ2h0Q29tbWFuZGVyL21jLmdpdF0KKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorCistLS0KKyBsaWIvdHR5L3R0eS1uY3Vyc2VzLmMgfCAyNiArKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL3R0eS90dHktbmN1cnNlcy5jIGIvbGliL3R0eS90dHktbmN1cnNlcy5jCitpbmRleCBhN2ExMWYzLi44ZTY5YjM5IDEwMDY0NAorLS0tIGEvbGliL3R0eS90dHktbmN1cnNlcy5jCisrKysgYi9saWIvdHR5L3R0eS1uY3Vyc2VzLmMKK0BAIC0xNzksNiArMTc5LDggQEAgbWNfdHR5X25vcm1hbGl6ZV9saW5lc19jaGFyIChjb25zdCBjaGFyICpjaCkKKyB2b2lkCisgdHR5X2luaXQgKGdib29sZWFuIG1vdXNlX2VuYWJsZSwgZ2Jvb2xlYW4gaXNfeHRlcm0pCisgeworKyAgICBzdHJ1Y3QgdGVybWlvcyBtb2RlOworKworICAgICBpbml0c2NyICgpOworIAorICNpZmRlZiBIQVZFX0VTQ0RFTEFZCitAQCAtMTk0LDI1ICsxOTYsMTUgQEAgdHR5X2luaXQgKGdib29sZWFuIG1vdXNlX2VuYWJsZSwgZ2Jvb2xlYW4gaXNfeHRlcm0pCisgICAgIEVTQ0RFTEFZID0gMjAwOworICNlbmRpZiAvKiBIQVZFX0VTQ0RFTEFZICovCisgCistI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorKyAgICB0Y2dldGF0dHIgKFNURElOX0ZJTEVOTywgJm1vZGUpOworICAgICAvKiB1c2UgQ3RybC1nIHRvIGdlbmVyYXRlIFNJR0lOVCAqLworLSAgICBjdXJfdGVybS0+TnR0eWIuY19jY1tWSU5UUl0gPSBDVFJMICgnZycpOyAgIC8qIF5nICovCisrICAgIG1vZGUuY19jY1tWSU5UUl0gPSBDVFJMICgnZycpOyAgLyogXmcgKi8KKyAgICAgLyogZGlzYWJsZSBTSUdRVUlUIHRvIGFsbG93IHVzZSBDdHJsLVwga2V5ICovCistICAgIGN1cl90ZXJtLT5OdHR5Yi5jX2NjW1ZRVUlUXSA9IE5VTExfVkFMVUU7CistICAgIHRjc2V0YXR0ciAoY3VyX3Rlcm0tPkZpbGVkZXMsIFRDU0FOT1csICZjdXJfdGVybS0+TnR0eWIpOworLSNlbHNlCistICAgIC8qIG90aGVyIGN1cnNlcyBpbXBsZW1lbnRhdGlvbiAoYnNkIGN1cnNlcywgLi4uKSAqLworLSAgICB7CistICAgICAgICBzdHJ1Y3QgdGVybWlvcyBtb2RlOworLQorLSAgICAgICAgdGNnZXRhdHRyIChTVERJTl9GSUxFTk8sICZtb2RlKTsKKy0gICAgICAgIC8qIHVzZSBDdHJsLWcgdG8gZ2VuZXJhdGUgU0lHSU5UICovCistICAgICAgICBtb2RlLmNfY2NbVklOVFJdID0gQ1RSTCAoJ2cnKTsgIC8qIF5nICovCistICAgICAgICAvKiBkaXNhYmxlIFNJR1FVSVQgdG8gYWxsb3cgdXNlIEN0cmwtXCBrZXkgKi8KKy0gICAgICAgIG1vZGUuY19jY1tWUVVJVF0gPSBOVUxMX1ZBTFVFOworLSAgICAgICAgdGNzZXRhdHRyIChTVERJTl9GSUxFTk8sIFRDU0FOT1csICZtb2RlKTsKKy0gICAgfQorLSNlbmRpZiAvKiBOQ1VSU0VTX1ZFUlNJT04gKi8KKysgICAgbW9kZS5jX2NjW1ZRVUlUXSA9IE5VTExfVkFMVUU7CisrICAgIHRjc2V0YXR0ciAoU1RESU5fRklMRU5PLCBUQ1NBTk9XLCAmbW9kZSk7CisrCisrICAgIC8qIGN1cnNlcyByZW1lbWJlcnMgdGhlICJpbi1wcm9ncmFtIiBtb2RlcyBhZnRlciB0aGlzIGNhbGwgKi8KKysgICAgZGVmX3Byb2dfbW9kZSAoKTsKKyAKKyAgICAgdHR5X3N0YXJ0X2ludGVycnVwdF9rZXkgKCk7CisgCistLSAKKzIuNy40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvbWNfNC44LjE4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tY180LjguMTguYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3ZjNmNzMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tY180LjguMTguYmIKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi1TVU1NQVJZID0gIk1pZG5pZ2h0IENvbW1hbmRlciBpcyBhbiBuY3Vyc2VzIGJhc2VkIGZpbGUgbWFuYWdlciIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cubWlkbmlnaHQtY29tbWFuZGVyLm9yZy8iCi1MSUNFTlNFID0gIkdQTHYzIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjcwYmJhZmUzNjBlNzNmOTg0MGJkNzk4MTYyMWY5YzIiCi1TRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCi1ERVBFTkRTID0gIm5jdXJzZXMgZ2xpYi0yLjAgdXRpbC1saW51eCIKLVJERVBFTkRTXyR7UE59ID0gIm5jdXJzZXMtdGVybWluZm8iCi0KLVNSQ19VUkkgPSAiaHR0cDovL3d3dy5taWRuaWdodC1jb21tYW5kZXIub3JnL2Rvd25sb2Fkcy8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLW1jLXJlcGxhY2UtcGVybC13LXdpdGgtdXNlLXdhcm5pbmdzLnBhdGNoIFwKLSAgICAgICAgICAgIgotU1JDX1VSSVttZDVzdW1dID0gImNjNTZmMGM5YWJkNjNjNGNhYTM2MzZiYmEzYTA4YmZiIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjViNTkxZTEwZGNiZWE5NTIzMzQzNGRhNDBjZGFkNDY2M2QzNjAyMjlhZGY4OTgyNjU3NmMzMTk2NjdjMTAzY2IiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCi0KLSMKLSMgQm90aCBTYW1iYSAoc21iKSBhbmQgc2Z0cCByZXF1aXJlIHBhY2thZ2UgZGVsaXZlcmVkIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQKLSMKLVBBQ0tBR0VDT05GSUcgPz89ICIiCi1QQUNLQUdFQ09ORklHW3NtYl0gPSAiLS1lbmFibGUtdmZzLXNtYiwtLWRpc2FibGUtdmZzLXNtYixzYW1iYSwiCi1QQUNLQUdFQ09ORklHW3NmdHBdID0gIi0tZW5hYmxlLXZmcy1zZnRwLC0tZGlzYWJsZS12ZnMtc2Z0cCxsaWJzc2gyLCIKLQotRVhUUkFfT0VDT05GID0gIi0td2l0aC1zY3JlZW49bmN1cnNlcyAtLXdpdGhvdXQtZ3BtLW1vdXNlIC0td2l0aG91dC14IgotCi1DQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9QRVJMPScvdXNyL2Jpbi9lbnYgcGVybCciCi0KLWRvX2luc3RhbGxfYXBwZW5kICgpIHsKLQlzZWQgLWkgLWUgJzFzLCMhLipwZXJsLCMhJHtiaW5kaXJ9L2VudiBwZXJsLCcgJHtEfSR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC8qCi0Jc2VkIC1pIC1lICcxcywjIS4qcHl0aG9uLCMhJHtiaW5kaXJ9L2VudiBweXRob24sJyAke0R9JHtsaWJleGVjZGlyfS9tYy9leHRmcy5kLyoKLX0KLQotUEFDS0FHRVMgPSsgIiR7QlBOfS1oZWxwZXJzLXBlcmwgJHtCUE59LWhlbHBlcnMtcHl0aG9uICR7QlBOfS1oZWxwZXJzICR7QlBOfS1maXNoIgotCi1TVU1NQVJZXyR7QlBOfS1oZWxwZXJzLXBlcmwgPSAiTWlkbmlnaHQgQ29tbWFuZGVyIFBlcmwtYmFzZWQgaGVscGVyIHNjcmlwdHMiCi1GSUxFU18ke0JQTn0taGVscGVycy1wZXJsID0gIiR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9hKyAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvYXB0KyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9kZWIgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2RlYmEgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZGViZCAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZHBrZysgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvbWFpbGZzICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9wYXRjaGZzIFwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9ycG1zKyAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvdWxpYiBcIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvdXppcCIKLVJERVBFTkRTXyR7QlBOfS1oZWxwZXJzLXBlcmwgPSAicGVybCIKLQotU1VNTUFSWV8ke0JQTn0taGVscGVycy1weXRob24gPSAiTWlkbmlnaHQgQ29tbWFuZGVyIFB5dGhvbi1iYXNlZCBoZWxwZXIgc2NyaXB0cyIKLUZJTEVTXyR7QlBOfS1oZWxwZXJzLXB5dGhvbiA9ICIke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvczMrICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC91YzE1NDEiCi1SREVQRU5EU18ke0JQTn0taGVscGVycy1weXRob24gPSAicHl0aG9uIgotCi1TVU1NQVJZXyR7QlBOfS1oZWxwZXJzID0gIk1pZG5pZ2h0IENvbW1hbmRlciBzaGVsbCBoZWxwZXIgc2NyaXB0cyIKLUZJTEVTXyR7QlBOfS1oZWxwZXJzID0gIiR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC8qICR7bGliZXhlY2Rpcn0vbWMvZXh0LmQvKiIKLQotU1VNTUFSWV8ke0JQTn0tZmlzaCA9ICJNaWRuaWdodCBDb21tYW5kZXIgRmlzaCBzY3JpcHRzIgotRklMRVNfJHtCUE59LWZpc2ggPSAiJHtsaWJleGVjZGlyfS9tYy9maXNoIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tY180LjguMTkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21jL21jXzQuOC4xOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2ExNTZjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tY180LjguMTkuYmIKQEAgLTAsMCArMSw1MCBAQAorU1VNTUFSWSA9ICJNaWRuaWdodCBDb21tYW5kZXIgaXMgYW4gbmN1cnNlcyBiYXNlZCBmaWxlIG1hbmFnZXIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1pZG5pZ2h0LWNvbW1hbmRlci5vcmcvIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI3MGJiYWZlMzYwZTczZjk4NDBiZDc5ODE2MjFmOWMyIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorREVQRU5EUyA9ICJuY3Vyc2VzIGdsaWItMi4wIHV0aWwtbGludXgiCitSREVQRU5EU18ke1BOfSA9ICJuY3Vyc2VzLXRlcm1pbmZvIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubWlkbmlnaHQtY29tbWFuZGVyLm9yZy9kb3dubG9hZHMvJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1tYy1yZXBsYWNlLXBlcmwtdy13aXRoLXVzZS13YXJuaW5ncy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLVRpY2tldC0zNjk3LXR0eV9pbml0LXVuaWZ5LWN1cnNlcy1pbml0aWFsaXphdGlvbi5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJlZjQyM2Y1YjZmODBhMWE1YTVmYzUzYjgzMjRjYWI3MCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkMGRkZGZhZTcxNDlmYWM5MDNmNzRlZjU1Y2ZjYjJhMTk4ZTBmNzAwNDM0NmM3YmRlZDQzNjY5ZDYxYmE0MzZmIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZworCisjCisjIEJvdGggU2FtYmEgKHNtYikgYW5kIHNmdHAgcmVxdWlyZSBwYWNrYWdlIGRlbGl2ZXJlZCBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkCisjCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tzbWJdID0gIi0tZW5hYmxlLXZmcy1zbWIsLS1kaXNhYmxlLXZmcy1zbWIsc2FtYmEsIgorUEFDS0FHRUNPTkZJR1tzZnRwXSA9ICItLWVuYWJsZS12ZnMtc2Z0cCwtLWRpc2FibGUtdmZzLXNmdHAsbGlic3NoMiwiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtc2NyZWVuPW5jdXJzZXMgLS13aXRob3V0LWdwbS1tb3VzZSAtLXdpdGhvdXQteCIKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfUEVSTD0nL3Vzci9iaW4vZW52IHBlcmwnIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJc2VkIC1pIC1lICcxcywjIS4qcGVybCwjISR7YmluZGlyfS9lbnYgcGVybCwnICR7RH0ke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvKgorICAgICAgICAKKyAgICAgICAgcm0gJHtEfSR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9zMysgJHtEfSR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC91YzE1NDEKK30KKworUEFDS0FHRVMgPSsgIiR7QlBOfS1oZWxwZXJzLXBlcmwgJHtCUE59LWhlbHBlcnMgJHtCUE59LWZpc2giCisKK1NVTU1BUllfJHtCUE59LWhlbHBlcnMtcGVybCA9ICJNaWRuaWdodCBDb21tYW5kZXIgUGVybC1iYXNlZCBoZWxwZXIgc2NyaXB0cyIKK0ZJTEVTXyR7QlBOfS1oZWxwZXJzLXBlcmwgPSAiJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2ErICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9hcHQrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2RlYiAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZGViYSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9kZWJkICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9kcGtnKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9tYWlsZnMgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3BhdGNoZnMgXCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3JwbXMrICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC91bGliIFwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC91emlwIgorUkRFUEVORFNfJHtCUE59LWhlbHBlcnMtcGVybCA9ICJwZXJsIgorCitTVU1NQVJZXyR7QlBOfS1oZWxwZXJzID0gIk1pZG5pZ2h0IENvbW1hbmRlciBzaGVsbCBoZWxwZXIgc2NyaXB0cyIKK0ZJTEVTXyR7QlBOfS1oZWxwZXJzID0gIiR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC8qICR7bGliZXhlY2Rpcn0vbWMvZXh0LmQvKiIKKworU1VNTUFSWV8ke0JQTn0tZmlzaCA9ICJNaWRuaWdodCBDb21tYW5kZXIgRmlzaCBzY3JpcHRzIgorRklMRVNfJHtCUE59LWZpc2ggPSAiJHtsaWJleGVjZGlyfS9tYy9maXNoIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy8wMDAxLVVzZS1DQy10by1jaGVjay1mb3ItaW1wbGljaXQtZmFsbHRocm91Z2gtd2FybmluZy1zdXAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzLzAwMDEtVXNlLUNDLXRvLWNoZWNrLWZvci1pbXBsaWNpdC1mYWxsdGhyb3VnaC13YXJuaW5nLXN1cC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGI3YjhhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy8wMDAxLVVzZS1DQy10by1jaGVjay1mb3ItaW1wbGljaXQtZmFsbHRocm91Z2gtd2FybmluZy1zdXAucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSBhMTI5ZWU2ZDgwZjNiMmNkYTBkODI3YzM1ZmE4MWE1MTdjZjZkNTA1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMTMgT2N0IDIwMTcgMTA6Mjc6MzQgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVXNlIENDIHRvIGNoZWNrIGZvciBpbXBsaWNpdC1mYWxsdGhyb3VnaCB3YXJuaW5nIHN1cHBvcnQKKworVGhpcyB3YXJuaW5nIGl0IG5ldyBpbiBnY2M3IGFuZCBpbiBjcm9zcyBjb21waWxlIGNhc2UKK2l0cyBwb3NzaWJsZSB0aGF0IGJ1aWxkIGhvc3QgZ2NjIGlzIHZlcnNpb24gNysgYnV0IHRoZQorY3Jvc3MgY29tcGlsZSB1c2VkIGZvciBjb21waWxpbmcgbWRhZG0gaXMgPCB2ZXJzaW9uIDcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisgTWFrZWZpbGUgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCBkMjA3ZWU0Li45NzFmMjU1IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtNDgsNyArNDgsNyBAQCBpZmRlZiBXQVJOX1VOVVNFRAorIENXRkxBR1MgKz0gLVdwLC1EX0ZPUlRJRllfU09VUkNFPTIgLU8zCisgZW5kaWYKKyAKKy1GQUxMVEhST1VHSCA6PSAkKHNoZWxsIGdjYyAtdiAtLWhlbHAgMj4mMSB8IGdyZXAgImltcGxpY2l0LWZhbGx0aHJvdWdoIiB8IHdjIC1sKQorK0ZBTExUSFJPVUdIIDo9ICQoc2hlbGwgJHtDQ30gLXYgLS1oZWxwIDI+JjEgfCBncmVwICJpbXBsaWNpdC1mYWxsdGhyb3VnaCIgfCB3YyAtbCkKKyBpZm5lcSAiJChGQUxMVEhST1VHSCkiICAiMCIKKyBDV0ZMQUdTICs9IC1XaW1wbGljaXQtZmFsbHRocm91Z2g9MAorIGVuZGlmCistLSAKKzIuMTQuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzLzAwMDEtbWRhZG0tQWRkLVdpbXBsaWNpdC1mYWxsdGhyb3VnaC0wLWluLU1ha2VmaWxlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy8wMDAxLW1kYWRtLUFkZC1XaW1wbGljaXQtZmFsbHRocm91Z2gtMC1pbi1NYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTE1MTcwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy8wMDAxLW1kYWRtLUFkZC1XaW1wbGljaXQtZmFsbHRocm91Z2gtMC1pbi1NYWtlZmlsZS5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIGFhMDlhZjBmZTJlYzA3MzdmYTA0ZmZkMDA5NTc1MzI2ODRlMjU3YjkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBYaWFvIE5pIDx4bmlAcmVkaGF0LmNvbT4KK0RhdGU6IEZyaSwgMTcgTWFyIDIwMTcgMTk6NTU6NDIgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAxLzVdIG1kYWRtOiBBZGQgV2ltcGxpY2l0LWZhbGx0aHJvdWdoPTAgaW4gTWFrZWZpbGUKKworVGhlcmUgYXJlIG1hbnkgZXJyb3JzIGxpa2UgJ2Vycm9yOiB0aGlzIHN0YXRlbWVudCBtYXkgZmFsbCB0aHJvdWdoJy4KK0J1dCB0aGUgbG9naWMgaXMgcmlnaHQuIFNvIGFkZCB0aGUgZmxhZyBXaW1wbGljaXQtZmFsbHRocm91Z2g9MAordG8gZGlzYWJsZSB0aGUgZXJyb3IgbWVzc2FnZXMuIFRoZSBtZXRob2QgSSB1c2UgaXMgZnJvbQoraHR0cHM6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy9XYXJuaW5nLU9wdGlvbnMuaHRtbAorI2luZGV4LVdpbXBsaWNpdC1mYWxsdGhyb3VnaC0zNzUKKworU2lnbmVkLW9mZi1ieTogWGlhbyBOaSA8eG5pQHJlZGhhdC5jb20+CitTaWduZWQtb2ZmLWJ5OiBKZXMgU29yZW5zZW4gPEplcy5Tb3JlbnNlbkBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKyBNYWtlZmlsZSB8IDUgKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCAwZjMwN2VjLi5lMWE3MDU4IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtNDgsNiArNDgsMTEgQEAgaWZkZWYgV0FSTl9VTlVTRUQKKyBDV0ZMQUdTICs9IC1XcCwtRF9GT1JUSUZZX1NPVVJDRT0yIC1PMworIGVuZGlmCisgCisrRkFMTFRIUk9VR0ggOj0gJChzaGVsbCBnY2MgLXYgLS1oZWxwIDI+JjEgfCBncmVwICJpbXBsaWNpdC1mYWxsdGhyb3VnaCIgfCB3YyAtbCkKKytpZm5lcSAiJChGQUxMVEhST1VHSCkiICAiMCIKKytDV0ZMQUdTICs9IC1XaW1wbGljaXQtZmFsbHRocm91Z2g9MAorK2VuZGlmCisrCisgaWZkZWYgREVCSUFOCisgQ1BQRkxBR1MgKz0gLURERUJJQU4KKyBlbmRpZgorLS0gCisyLjEyLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy8wMDAyLW1kYWRtLVNwZWNpZnktZW5vdWdoLWxlbmd0aC13aGVuLXdyaXRlLXRvLWJ1ZmZlci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvMDAwMi1tZGFkbS1TcGVjaWZ5LWVub3VnaC1sZW5ndGgtd2hlbi13cml0ZS10by1idWZmZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JjZTA1MwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvMDAwMi1tZGFkbS1TcGVjaWZ5LWVub3VnaC1sZW5ndGgtd2hlbi13cml0ZS10by1idWZmZXIucGF0Y2gKQEAgLTAsMCArMSw3NSBAQAorRnJvbSBiYjRkZjI3MzA0MWJhMjA2MDA4YmRiMGFkYTc1Y2NkOTdjMjlmNjIzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogWGlhbyBOaSA8eG5pQHJlZGhhdC5jb20+CitEYXRlOiBGcmksIDE3IE1hciAyMDE3IDE5OjU1OjQzICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMi81XSBtZGFkbTogU3BlY2lmeSBlbm91Z2ggbGVuZ3RoIHdoZW4gd3JpdGUgdG8gYnVmZmVyCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK0luIERldGFpbC5jIHRoZSBidWZmZXIgcGF0aCBpbiBmdW5jdGlvbiBEZXRhaWwgaXMgZGVmaW5lZCBhcyBwYXRoWzIwMF0sCitpbiBmYWN0IHRoZSBtYXggbGVudGggb2YgY29udGVudCB3aGljaCBuZWVkcyB0byB3cml0ZSB0byB0aGUgYnVmZmVyIGlzCisyODcuIEJlY2F1c2UgdGhlIGxlbmd0aCBvZiBkbmFtZSBvZiBzdHJ1Y3QgZGlyZW50IGlzIDI1NS4KK0R1cmluZyBidWlsZGluZyBpdCByZXBvcnRzIGVycm9yOgorZXJyb3I6IOKAmCVz4oCZIGRpcmVjdGl2ZSB3cml0aW5nIHVwIHRvIDI1NSBieXRlcyBpbnRvIGEgcmVnaW9uIG9mIHNpemUgMTg5CitbLVdlcnJvcj1mb3JtYXQtb3ZlcmZsb3c9XQorCitJbiBmdW5jdGlvbiBleGFtaW5lX3N1cGVyMCB0aGVyZSBpcyBhIGJ1ZmZlciBuYiB3aXRoIGxlbmd0aCA1LgorQnV0IGl0IG5lZWQgdG8gc2hvdyBhIGludCB0eXBlIGFyZ3VtZW50LiBUaGUgbGVuZ2h0IG9mIG1heAorbnVtYmVyIG9mIGludCBpcyAxMC4gU28gdGhlIGJ1ZmZlciBsZW5ndGggc2hvdWxkIGJlIDExLgorCitJbiBodW1hbl9zaXplIGZ1bmN0aW9uIHRoZSBsZW5ndGggb2YgYnVmIGlzIDMwLiBEdXJpbmcgYnVpbGRpbmcKK3RoZXJlIGlzIGEgZXJyb3I6CitvdXRwdXQgYmV0d2VlbiAyMCBhbmQgNDcgYnl0ZXMgaW50byBhIGRlc3RpbmF0aW9uIG9mIHNpemUgMzAuCitDaGFuZ2UgdGhlIGxlbmd0aCB0byA0Ny4KKworU2lnbmVkLW9mZi1ieTogWGlhbyBOaSA8eG5pQHJlZGhhdC5jb20+CitTaWduZWQtb2ZmLWJ5OiBKZXMgU29yZW5zZW4gPEplcy5Tb3JlbnNlbkBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKyBEZXRhaWwuYyB8IDIgKy0KKyBzdXBlcjAuYyB8IDIgKy0KKyB1dGlsLmMgICB8IDIgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL0RldGFpbC5jIGIvRGV0YWlsLmMKK2luZGV4IDUwOWIwZDQuLmNiMzM3OTQgMTAwNjQ0CistLS0gYS9EZXRhaWwuYworKysrIGIvRGV0YWlsLmMKK0BAIC01NzUsNyArNTc1LDcgQEAgVGhpcyBpcyBwcmV0dHkgYm9yaW5nCisgCQkJcHJpbnRmKCIgIE1lbWJlciBBcnJheXMgOiIpOworIAorIAkJCXdoaWxlIChkaXIgJiYgKGRlID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CistCQkJCWNoYXIgcGF0aFsyMDBdOworKwkJCQljaGFyIHBhdGhbMjg3XTsKKyAJCQkJY2hhciB2YnVmWzEwMjRdOworIAkJCQlpbnQgbmxlbiA9IHN0cmxlbihzcmEtPnN5c19uYW1lKTsKKyAJCQkJZGV2X3QgZGV2aWQ7CitkaWZmIC0tZ2l0IGEvc3VwZXIwLmMgYi9zdXBlcjAuYworaW5kZXggOTM4Y2ZkOS4uZjViNDUwNyAxMDA2NDQKKy0tLSBhL3N1cGVyMC5jCisrKysgYi9zdXBlcjAuYworQEAgLTIzMSw3ICsyMzEsNyBAQCBzdGF0aWMgdm9pZCBleGFtaW5lX3N1cGVyMChzdHJ1Y3Qgc3VwZXJ0eXBlICpzdCwgY2hhciAqaG9tZWhvc3QpCisgCSAgICAgZCsrKSB7CisgCQltZHBfZGlza190ICpkcDsKKyAJCWNoYXIgKmR2OworLQkJY2hhciBuYls1XTsKKysJCWNoYXIgbmJbMTFdOworIAkJaW50IHdvbmx5LCBmYWlsZmFzdDsKKyAJCWlmIChkPj0wKSBkcCA9ICZzYi0+ZGlza3NbZF07CisgCQllbHNlIGRwID0gJnNiLT50aGlzX2Rpc2s7CitkaWZmIC0tZ2l0IGEvdXRpbC5jIGIvdXRpbC5jCitpbmRleCBmMTAwOTcyLi4zMmJkOTA5IDEwMDY0NAorLS0tIGEvdXRpbC5jCisrKysgYi91dGlsLmMKK0BAIC04MTEsNyArODExLDcgQEAgdW5zaWduZWQgbG9uZyBjYWxjX2NzdW0odm9pZCAqc3VwZXIsIGludCBieXRlcykKKyAjaWZuZGVmIE1EQVNTRU1CTEUKKyBjaGFyICpodW1hbl9zaXplKGxvbmcgbG9uZyBieXRlcykKKyB7CistCXN0YXRpYyBjaGFyIGJ1ZlszMF07CisrCXN0YXRpYyBjaGFyIGJ1Zls0N107CisgCisgCS8qIFdlIGNvbnZlcnQgYnl0ZXMgdG8gZWl0aGVyIGNlbnRpLU17ZWdhLGliaX1ieXRlcyBvcgorIAkgKiBjZW50aS1He2lnaSxpYml9Ynl0ZXMsIHdpdGggYXBwcm9wcmlhdGUgcm91bmRpbmcsCistLSAKKzIuMTIuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzLzAwMDMtUmVwbGFjZS1zbnByaW50Zi13aXRoLXN0cm5jcHktYXQtc29tZS1wbGFjZXMtdG8tYXZvaS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvMDAwMy1SZXBsYWNlLXNucHJpbnRmLXdpdGgtc3RybmNweS1hdC1zb21lLXBsYWNlcy10by1hdm9pLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZWM4NGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzLzAwMDMtUmVwbGFjZS1zbnByaW50Zi13aXRoLXN0cm5jcHktYXQtc29tZS1wbGFjZXMtdG8tYXZvaS5wYXRjaApAQCAtMCwwICsxLDU5IEBACitGcm9tIGJjODdhZjEzMTQzMjViMDBjNmFjMDAyYTYwYTJiMGYwY2FhODFlMzQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBYaWFvIE5pIDx4bmlAcmVkaGF0LmNvbT4KK0RhdGU6IFNhdCwgMTggTWFyIDIwMTcgMTA6MzM6NDQgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAzLzVdIFJlcGxhY2Ugc25wcmludGYgd2l0aCBzdHJuY3B5IGF0IHNvbWUgcGxhY2VzIHRvIGF2b2lkCisgdHJ1bmNhdGlvbgorCitJbiBnY2M3IHRoZXJlIGFyZSBzb21lIGJ1aWxkaW5nIGVycm9ycyBsaWtlOgorZGlyZWN0aXZlIG91dHB1dCBtYXkgYmUgdHJ1bmNhdGVkIHdyaXRpbmcgdXAgdG8gMzEgYnl0ZXMgaW50byBhIHJlZ2lvbiBvZiBzaXplIDI0CitzbnByaW50ZihzdHIsIE1QQl9TSUdfTEVOLCAlcywgbXBiLT5zaWcpOworCitJdCBqdXN0IG5lZWQgdG8gY29weSBvbmUgc3RyaW5nIHRvIHRhcmdldC4gU28gdXNlIHN0cm5jcHkgdG8gcmVwbGFjZSBpdC4KKworRm9yIHRoaXMgbGluZSBjb2RlOiBzbnByaW50ZihzdHIsIE1QQl9TSUdfTEVOLCAlcywgbXBiLT5zaWcpOworQmVjYXVzZSBtcGItPnNpZyBoYXMgdGhlIGNvbnRlbnQgb2YgdmVyc2lvbiBhZnRlciBtYWdpYywgc28KK2l0J3MgYmV0dGVyIHRvIHVzZSBzdHJuY3B5IHRvIHJlcGxhY2Ugc25wcmludGYgdG9vLgorCitTaWduZWQtb2ZmLWJ5OiBYaWFvIE5pIDx4bmlAcmVkaGF0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IEplcyBTb3JlbnNlbiA8SmVzLlNvcmVuc2VuQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorIHN1cGVyLWludGVsLmMgfCA5ICsrKysrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zdXBlci1pbnRlbC5jIGIvc3VwZXItaW50ZWwuYworaW5kZXggNTdjN2U3NS4uNTQ5OTA5OCAxMDA2NDQKKy0tLSBhL3N1cGVyLWludGVsLmMKKysrKyBiL3N1cGVyLWludGVsLmMKK0BAIC0xODExLDcgKzE4MTEsOCBAQCBzdGF0aWMgdm9pZCBleGFtaW5lX3N1cGVyX2ltc20oc3RydWN0IHN1cGVydHlwZSAqc3QsIGNoYXIgKmhvbWVob3N0KQorIAlfX3UzMiByZXNlcnZlZCA9IGltc21fcmVzZXJ2ZWRfc2VjdG9ycyhzdXBlciwgc3VwZXItPmRpc2tzKTsKKyAJc3RydWN0IGRsICpkbDsKKyAKKy0Jc25wcmludGYoc3RyLCBNUEJfU0lHX0xFTiwgIiVzIiwgbXBiLT5zaWcpOworKwlzdHJuY3B5KHN0ciwgKGNoYXIgKiltcGItPnNpZywgTVBCX1NJR19MRU4pOworKwlzdHJbTVBCX1NJR19MRU4tMV0gPSAnXDAnOworIAlwcmludGYoIiAgICAgICAgICBNYWdpYyA6ICVzXG4iLCBzdHIpOworIAlzbnByaW50ZihzdHIsIHN0cmxlbihNUEJfVkVSU0lPTl9SQUlEMCksICIlcyIsIGdldF9pbXNtX3ZlcnNpb24obXBiKSk7CisgCXByaW50ZigiICAgICAgICBWZXJzaW9uIDogJXNcbiIsIGdldF9pbXNtX3ZlcnNpb24obXBiKSk7CitAQCAtNzE0MiwxNCArNzE0MywxNiBAQCBzdGF0aWMgaW50IHVwZGF0ZV9zdWJhcnJheV9pbXNtKHN0cnVjdCBzdXBlcnR5cGUgKnN0LCBjaGFyICpzdWJhcnJheSwKKyAKKyAJCQl1LT50eXBlID0gdXBkYXRlX3JlbmFtZV9hcnJheTsKKyAJCQl1LT5kZXZfaWR4ID0gdm9sOworLQkJCXNucHJpbnRmKChjaGFyICopIHUtPm5hbWUsIE1BWF9SQUlEX1NFUklBTF9MRU4sICIlcyIsIG5hbWUpOworKwkJCXN0cm5jcHkoKGNoYXIgKikgdS0+bmFtZSwgbmFtZSwgTUFYX1JBSURfU0VSSUFMX0xFTik7CisrCQkJdS0+bmFtZVtNQVhfUkFJRF9TRVJJQUxfTEVOLTFdID0gJ1wwJzsKKyAJCQlhcHBlbmRfbWV0YWRhdGFfdXBkYXRlKHN0LCB1LCBzaXplb2YoKnUpKTsKKyAJCX0gZWxzZSB7CisgCQkJc3RydWN0IGltc21fZGV2ICpkZXY7CisgCQkJaW50IGk7CisgCisgCQkJZGV2ID0gZ2V0X2ltc21fZGV2KHN1cGVyLCB2b2wpOworLQkJCXNucHJpbnRmKChjaGFyICopIGRldi0+dm9sdW1lLCBNQVhfUkFJRF9TRVJJQUxfTEVOLCAiJXMiLCBuYW1lKTsKKysJCQlzdHJuY3B5KChjaGFyICopIGRldi0+dm9sdW1lLCBuYW1lLCBNQVhfUkFJRF9TRVJJQUxfTEVOKTsKKysJCQlkZXYtPnZvbHVtZVtNQVhfUkFJRF9TRVJJQUxfTEVOLTFdID0gJ1wwJzsKKyAJCQlmb3IgKGkgPSAwOyBpIDwgbXBiLT5udW1fcmFpZF9kZXZzOyBpKyspIHsKKyAJCQkJZGV2ID0gZ2V0X2ltc21fZGV2KHN1cGVyLCBpKTsKKyAJCQkJaGFuZGxlX21pc3Npbmcoc3VwZXIsIGRldik7CistLSAKKzIuMTIuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzLzAwMDQtbWRhZG0tRm9yY2VkLXR5cGUtY29udmVyc2lvbi10by1hdm9pZC10cnVuY2F0aW9uLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy8wMDA0LW1kYWRtLUZvcmNlZC10eXBlLWNvbnZlcnNpb24tdG8tYXZvaWQtdHJ1bmNhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGZkZTQyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy8wMDA0LW1kYWRtLUZvcmNlZC10eXBlLWNvbnZlcnNpb24tdG8tYXZvaWQtdHJ1bmNhdGlvbi5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDVkYTg4OTAzMmUyZDk5NzUxZWQ5ZmU2MDAxNjE0NmU5YWU4MTE0Y2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBYaWFvIE5pIDx4bmlAcmVkaGF0LmNvbT4KK0RhdGU6IFNhdCwgMTggTWFyIDIwMTcgMTA6MzM6NDUgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCA0LzVdIG1kYWRtOiBGb3JjZWQgdHlwZSBjb252ZXJzaW9uIHRvIGF2b2lkIHRydW5jYXRpb24KKworR2NjIHJlcG9ydHMgaXQgbmVlZHMgMTkgYnl0ZXMgdG8gcmlnaHQgdG8gZGlzay0+c2VyaWFsLiBCZWNhdXNlIHRoZQordHlwZSBvZiBhcmd1bWVudCBpIGlzIGludC4gQnV0IHRoZSBtZWFuaW5nIG9mIGkgaXMgZmFpbGVkIGRpc2sKK251bWJlci4gU28gaXQgZG9lc24ndCBuZWVkIHRvIHVzZSAxOSBieXRlcy4gIEp1c3QgYWRkIGEgdHlwZQorY29udmVyc2lvbiB0byBhdm9pZCB0aGlzIGJ1aWxkaW5nIGVycm9yCisKK1NpZ25lZC1vZmYtYnk6IFhpYW8gTmkgPHhuaUByZWRoYXQuY29tPgorU2lnbmVkLW9mZi1ieTogSmVzIFNvcmVuc2VuIDxKZXMuU29yZW5zZW5AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Cisgc3VwZXItaW50ZWwuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3N1cGVyLWludGVsLmMgYi9zdXBlci1pbnRlbC5jCitpbmRleCA1NDk5MDk4Li40ZTQ2NmZmIDEwMDY0NAorLS0tIGEvc3VwZXItaW50ZWwuYworKysrIGIvc3VwZXItaW50ZWwuYworQEAgLTUyMjgsNyArNTIyOCw3IEBAIHN0YXRpYyBpbnQgaW5pdF9zdXBlcl9pbXNtX3ZvbHVtZShzdHJ1Y3Qgc3VwZXJ0eXBlICpzdCwgbWR1X2FycmF5X2luZm9fdCAqaW5mbywKKyAJCQlkaXNrLT5zdGF0dXMgPSBDT05GSUdVUkVEX0RJU0sgfCBGQUlMRURfRElTSzsKKyAJCQlkaXNrLT5zY3NpX2lkID0gX19jcHVfdG9fbGUzMih+KF9fdTMyKTApOworIAkJCXNucHJpbnRmKChjaGFyICopIGRpc2stPnNlcmlhbCwgTUFYX1JBSURfU0VSSUFMX0xFTiwKKy0JCQkJICJtaXNzaW5nOiVkIiwgaSk7CisrCQkJCSAibWlzc2luZzolZCIsIChfX3U4KWkpOworIAkJfQorIAkJZmluZF9taXNzaW5nKHN1cGVyKTsKKyAJfSBlbHNlIHsKKy0tIAorMi4xMi4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvMDAwNS1BZGQtYS1jb21tZW50LXRvLWluZGljYXRlLXZhbGlkLWZhbGx0aHJvdWdoLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy8wMDA1LUFkZC1hLWNvbW1lbnQtdG8taW5kaWNhdGUtdmFsaWQtZmFsbHRocm91Z2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q5ZDNiOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvMDAwNS1BZGQtYS1jb21tZW50LXRvLWluZGljYXRlLXZhbGlkLWZhbGx0aHJvdWdoLnBhdGNoCkBAIC0wLDAgKzEsMTI4IEBACitGcm9tIDA5MDE0MjMzYmYxMDkwMGY3YmQ4MzkwYjNiNjRmZjgyYmNhNDUyMjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOSBBcHIgMjAxNyAxMjowNDoxNSAtMDcwMAorU3ViamVjdDogW1BBVENIIDUvNV0gQWRkIGEgY29tbWVudCB0byBpbmRpY2F0ZSB2YWxpZCBmYWxsdGhyb3VnaAorCitnY2M3IHdhcm5zIGFib3V0IGNvZGUgd2l0aCBmYWxsdGhyb3VnaHMsIHRoaXMgcGF0Y2ggYWRkcwordGhlIGNvbW1lbnQgdG8gaW5kaWNhdGUgYSB2YWxpZCBmYWxsdGhyb3VnaCwgaGVscHMgZ2NjNworY29tcGlsZXIgd2FybmluZ3MKKworVGhpcyB3b3JrcyBpbiBjcm9zcyBhbmQgbmF0aXZlIGNvbXBpbGF0aW9uIGNhc2UKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworIEdyb3cuYyAgICAgICAgfCA0ICsrKysKKyBiaXRtYXAuYyAgICAgIHwgOCArKysrKysrKworIG1kYWRtLmMgICAgICAgfCAyICsrCisgc3VwZXItaW50ZWwuYyB8IDEgKworIHV0aWwuYyAgICAgICAgfCAxICsKKyA1IGZpbGVzIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL0dyb3cuYyBiL0dyb3cuYworaW5kZXggNDU1YzVmOS4uMjdjNzNiMSAxMDA3NTUKKy0tLSBhL0dyb3cuYworKysrIGIvR3Jvdy5jCitAQCAtMTI1Nyw2ICsxMjU3LDcgQEAgY2hhciAqYW5hbHlzZV9jaGFuZ2UoY2hhciAqZGV2bmFtZSwgc3RydWN0IG1kaW5mbyAqaW5mbywgc3RydWN0IHJlc2hhcGUgKnJlKQorIAkJc3dpdGNoIChpbmZvLT5uZXdfbGV2ZWwpIHsKKyAJCWNhc2UgNDoKKyAJCQlkZWx0YV9wYXJpdHkgPSAxOworKwkJCS8qIGZhbGx0aHJvdWdoICovCisgCQljYXNlIDA6CisgCQkJcmUtPmxldmVsID0gNDsKKyAJCQlyZS0+YmVmb3JlLmxheW91dCA9IDA7CitAQCAtMTI4NCwxMCArMTI4NSwxMiBAQCBjaGFyICphbmFseXNlX2NoYW5nZShjaGFyICpkZXZuYW1lLCBzdHJ1Y3QgbWRpbmZvICppbmZvLCBzdHJ1Y3QgcmVzaGFwZSAqcmUpCisgCisgCWNhc2UgNDoKKyAJCWluZm8tPmFycmF5LmxheW91dCA9IEFMR09SSVRITV9QQVJJVFlfTjsKKysJCS8qIGZhbGx0aHJvdWdoICovCisgCWNhc2UgNToKKyAJCXN3aXRjaCAoaW5mby0+bmV3X2xldmVsKSB7CisgCQljYXNlIDA6CisgCQkJZGVsdGFfcGFyaXR5ID0gLTE7CisrCQkJLyogZmFsbHRocm91Z2ggKi8KKyAJCWNhc2UgNDoKKyAJCQlyZS0+bGV2ZWwgPSBpbmZvLT5hcnJheS5sZXZlbDsKKyAJCQlyZS0+YmVmb3JlLmRhdGFfZGlza3MgPSBpbmZvLT5hcnJheS5yYWlkX2Rpc2tzIC0gMTsKK0BAIC0xMzQzLDYgKzEzNDYsNyBAQCBjaGFyICphbmFseXNlX2NoYW5nZShjaGFyICpkZXZuYW1lLCBzdHJ1Y3QgbWRpbmZvICppbmZvLCBzdHJ1Y3QgcmVzaGFwZSAqcmUpCisgCQljYXNlIDQ6CisgCQljYXNlIDU6CisgCQkJZGVsdGFfcGFyaXR5ID0gLTE7CisrCQkJLyogZmFsbHRocm91Z2ggKi8KKyAJCWNhc2UgNjoKKyAJCQlyZS0+bGV2ZWwgPSA2OworIAkJCXJlLT5iZWZvcmUuZGF0YV9kaXNrcyA9IGluZm8tPmFycmF5LnJhaWRfZGlza3MgLSAyOworZGlmZiAtLWdpdCBhL2JpdG1hcC5jIGIvYml0bWFwLmMKK2luZGV4IGNjZWRmZDMuLmE2ZmYwOTEgMTAwNjQ0CistLS0gYS9iaXRtYXAuYworKysrIGIvYml0bWFwLmMKK0BAIC04MiwxMyArODIsMjEgQEAgc3RhdGljIGlubGluZSBpbnQgY291bnRfZGlydHlfYml0c19ieXRlKGNoYXIgYnl0ZSwgaW50IG51bV9iaXRzKQorIAorIAlzd2l0Y2ggKG51bV9iaXRzKSB7IC8qIGZhbGwgdGhyb3VnaC4uLiAqLworIAkJY2FzZSA4OglpZiAoYnl0ZSAmIDEyOCkgbnVtKys7CisrCQkvKiBmYWxsdGhyb3VnaCAqLworIAkJY2FzZSA3OglpZiAoYnl0ZSAmICA2NCkgbnVtKys7CisrCQkvKiBmYWxsdGhyb3VnaCAqLworIAkJY2FzZSA2OglpZiAoYnl0ZSAmICAzMikgbnVtKys7CisrCQkvKiBmYWxsdGhyb3VnaCAqLworIAkJY2FzZSA1OglpZiAoYnl0ZSAmICAxNikgbnVtKys7CisrCQkvKiBmYWxsdGhyb3VnaCAqLworIAkJY2FzZSA0OglpZiAoYnl0ZSAmICAgOCkgbnVtKys7CisrCQkvKiBmYWxsdGhyb3VnaCAqLworIAkJY2FzZSAzOiBpZiAoYnl0ZSAmICAgNCkgbnVtKys7CisrCQkvKiBmYWxsdGhyb3VnaCAqLworIAkJY2FzZSAyOglpZiAoYnl0ZSAmICAgMikgbnVtKys7CisrCQkvKiBmYWxsdGhyb3VnaCAqLworIAkJY2FzZSAxOglpZiAoYnl0ZSAmICAgMSkgbnVtKys7CisrCQkvKiBmYWxsdGhyb3VnaCAqLworIAkJZGVmYXVsdDogYnJlYWs7CisgCX0KKyAKK2RpZmYgLS1naXQgYS9tZGFkbS5jIGIvbWRhZG0uYworaW5kZXggYzNhMjY1Yi4uMmQwNmQzYiAxMDA2NDQKKy0tLSBhL21kYWRtLmMKKysrKyBiL21kYWRtLmMKK0BAIC0xNDgsNiArMTQ4LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJCQkgICAgbW9kZSA9PSBDUkVBVEUgfHwgbW9kZSA9PSBHUk9XIHx8CisgCQkJICAgIG1vZGUgPT0gSU5DUkVNRU5UQUwgfHwgbW9kZSA9PSBNQU5BR0UpCisgCQkJCWJyZWFrOyAvKiBiIG1lYW5zIGJpdG1hcCAqLworKwkJLyogZmFsbHRocm91Z2ggKi8KKyAJCWNhc2UgQnJpZWY6CisgCQkJYy5icmllZiA9IDE7CisgCQkJY29udGludWU7CitAQCAtODI4LDYgKzgyOSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCisgCQljYXNlIE8oSU5DUkVNRU5UQUwsTm9EZWdyYWRlZCk6CisgCQkJcHJfZXJyKCItLW5vLWRlZ3JhZGVkIGlzIGRlcHJlY2F0ZWQgaW4gSW5jcmVtZW50YWwgbW9kZVxuIik7CisrCQkJLyogZmFsbHRocm91Z2ggKi8KKyAJCWNhc2UgTyhBU1NFTUJMRSxOb0RlZ3JhZGVkKTogLyogLS1uby1kZWdyYWRlZCAqLworIAkJCWMucnVuc3RvcCA9IC0xOyAvKiAtLXN0b3AgaXNuJ3QgYWxsb3dlZCBmb3IgLS1hc3NlbWJsZSwKKyAJCQkJCSAqIHNvIHdlIG92ZXJsb2FkIHNsaWdodGx5ICovCitkaWZmIC0tZ2l0IGEvc3VwZXItaW50ZWwuYyBiL3N1cGVyLWludGVsLmMKK2luZGV4IDRlNDY2ZmYuLjAwYTI5MjUgMTAwNjQ0CistLS0gYS9zdXBlci1pbnRlbC5jCisrKysgYi9zdXBlci1pbnRlbC5jCitAQCAtMzI3MSw2ICszMjcxLDcgQEAgc3RhdGljIHZvaWQgZ2V0aW5mb19zdXBlcl9pbXNtX3ZvbHVtZShzdHJ1Y3Qgc3VwZXJ0eXBlICpzdCwgc3RydWN0IG1kaW5mbyAqaW5mbywKKyAJCQkJCQk8PCBTRUNUX1BFUl9NQl9TSElGVDsKKyAJCQl9CisgCQl9CisrCQkvKiBmYWxsdGhyb3VnaCAqLworIAkJY2FzZSBNSUdSX1ZFUklGWToKKyAJCQkvKiB3ZSBjb3VsZCBlbXVsYXRlIHRoZSBjaGVja3BvaW50aW5nIG9mCisgCQkJICogJ3N5bmNfYWN0aW9uPWNoZWNrJyBtaWdyYXRpb25zLCBidXQgZm9yIG5vdworZGlmZiAtLWdpdCBhL3V0aWwuYyBiL3V0aWwuYworaW5kZXggMzJiZDkwOS4uZjJhNGQxOSAxMDA2NDQKKy0tLSBhL3V0aWwuYworKysrIGIvdXRpbC5jCitAQCAtMzM1LDYgKzMzNSw3IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBwYXJzZV9zaXplKGNoYXIgKnNpemUpCisgCQlzd2l0Y2ggKCpjKSB7CisgCQljYXNlICdLJzoKKyAJCQljKys7CisrCQkvKiBmYWxsdGhyb3VnaCAqLworIAkJZGVmYXVsdDoKKyAJCQlzICo9IDI7CisgCQkJYnJlYWs7CistLSAKKzIuMTIuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL21kYWRtXzQuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vbWRhZG1fNC4wLmJiCmluZGV4IDYyNjE0ZjAuLmRjMDk4ZjEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vbWRhZG1fNC4wLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vbWRhZG1fNC4wLmJiCkBAIC0xNiw2ICsxNiwxMiBAQAogICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtbWRhZG0uaC1VbmRlZmluZS1kcHJpbnRmLWJlZm9yZS1yZWRlZmluaW5nLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtaW5jbHVkZS1zeXMtc3lzbWFjcm9zLmgtZm9yLW1ham9yLW1pbm9yLWRlZmludGlvbnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1tZGFkbS1BZGQtV2ltcGxpY2l0LWZhbGx0aHJvdWdoLTAtaW4tTWFrZWZpbGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1tZGFkbS1TcGVjaWZ5LWVub3VnaC1sZW5ndGgtd2hlbi13cml0ZS10by1idWZmZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1SZXBsYWNlLXNucHJpbnRmLXdpdGgtc3RybmNweS1hdC1zb21lLXBsYWNlcy10by1hdm9pLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtbWRhZG0tRm9yY2VkLXR5cGUtY29udmVyc2lvbi10by1hdm9pZC10cnVuY2F0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtQWRkLWEtY29tbWVudC10by1pbmRpY2F0ZS12YWxpZC1mYWxsdGhyb3VnaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVzZS1DQy10by1jaGVjay1mb3ItaW1wbGljaXQtZmFsbHRocm91Z2gtd2FybmluZy1zdXAucGF0Y2ggXAogICAgICAgICAgICAiCiBTUkNfVVJJW21kNXN1bV0gPSAiMmNiNGZlZmZlYTkxNjdiYTcxYjVmMzQ2YTBjMGE0MGQiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWQ2YWU3ZjI0Y2VkM2EwZmE3YjU2MTNiMzJmNGE1ODliYjQ4ODFlMzk0NmE1YTJjMzcyNDA1NjI1NGFkYTNhOSIKQEAgLTUwLDcgKzU2LDcgQEAKIH0KIAogZG9faW5zdGFsbF9wdGVzdCgpIHsKLQljcCAtYSAke1N9L3Rlc3RzICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzCisJY3AgLVIgLS1uby1kZXJlZmVyZW5jZSAtLXByZXNlcnZlPW1vZGUsbGlua3MgLXYgJHtTfS90ZXN0cyAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cwogCWNwICR7U30vdGVzdCAke0R9JHtQVEVTVF9QQVRIfQogCXNlZCAtZSAncyFzbGVlcCAwLiohc2xlZXAgMSFnOyBzIS92YXIvdG1wIS8hZycgLWkgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAogCWxuIC1zICR7YmFzZV9zYmluZGlyfS9tZGFkbSAke0R9JHtQVEVTVF9QQVRIfS9tZGFkbQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5pY29tL21pbmljb21fMi43LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbV8yLjcuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTMxYTg3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5pY29tL21pbmljb21fMi43LjEuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJUZXh0LWJhc2VkIG1vZGVtIGNvbnRyb2wgYW5kIHRlcm1pbmFsIGVtdWxhdGlvbiBwcm9ncmFtIgorSE9NRVBBR0UgPSAiaHR0cDovL2FsaW90aC5kZWJpYW4ub3JnL3Byb2plY3RzL21pbmljb20vIgorREVTQ1JJUFRJT04gPSAiTWluaWNvbSBpcyBhIHRleHQtYmFzZWQgbW9kZW0gY29udHJvbCBhbmQgdGVybWluYWwgZW11bGF0aW9uIHByb2dyYW0gZm9yIFVuaXgtbGlrZSBvcGVyYXRpbmcgc3lzdGVtcyIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorREVQRU5EUyA9ICJuY3Vyc2VzIHZpcnR1YWwvbGliaWNvbnYiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQyMDQ3N2FiYzU2NzQwNGRlYmNhMGEyYTFjYjZiNjQ1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9taW5pY29tLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xMjttZDU9YTU4ODM4Y2I3MDlmMGRiNTE3ZjRlNDI3MzBjNDllODEiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9hbGlvdGguZGViaWFuLm9yZy9mcnMvZG93bmxvYWQucGhwL2xhdGVzdGZpbGUvMy8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYWxsb3cudG8uZGlzYWJsZS5sb2NrZGV2LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZml4LW1pbmljb20taC12LXJldHVybi12YWx1ZS1pcy1ub3QtMC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1idWlsZC1pc3N1cy1zdXJmYWNlZC1kdWUtdG8tbXVzbC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTAyMWNiOGM1NDQ1ZjZlNmU3NGIyYWNjMzk5NjJkNjIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTMyZjgzNmI3YTY3N2ViMGNiMWRjYThkNzAzMDJiNzM3MjljM2QzMGRmMjZkNTgzNjhkNzEyZTVjY2EwNDFmMSIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vYWxpb3RoLmRlYmlhbi5vcmcvZnJzLz9ncm91cF9pZD0zMDAxOCIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbbG9ja2Rldl0gPSAiLS1lbmFibGUtbG9ja2RldiwtLWRpc2FibGUtbG9ja2Rldixsb2NrZGV2IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZworCitkb19pbnN0YWxsKCkgeworCWZvciBkIGluIGRvYyBleHRyYXMgbWFuIGxpYiBzcmM7IGRvIG1ha2UgLUMgJGQgREVTVERJUj0ke0R9IGluc3RhbGw7IGRvbmUKK30KKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5pY29tL21pbmljb21fMi43LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5pY29tL21pbmljb21fMi43LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTE4Njg2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tXzIuNy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLVNVTU1BUlkgPSAiVGV4dC1iYXNlZCBtb2RlbSBjb250cm9sIGFuZCB0ZXJtaW5hbCBlbXVsYXRpb24gcHJvZ3JhbSIKLURFU0NSSVBUSU9OID0gIk1pbmljb20gaXMgYSB0ZXh0LWJhc2VkIG1vZGVtIGNvbnRyb2wgYW5kIHRlcm1pbmFsIGVtdWxhdGlvbiBwcm9ncmFtIGZvciBVbml4LWxpa2Ugb3BlcmF0aW5nIHN5c3RlbXMiCi1TRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKLURFUEVORFMgPSAibmN1cnNlcyB2aXJ0dWFsL2xpYmljb252IgotTElDRU5TRSA9ICJHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00MjA0NzdhYmM1Njc0MDRkZWJjYTBhMmExY2I2YjY0NSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWluaWNvbS5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MTI7bWQ1PWE1ODgzOGNiNzA5ZjBkYjUxN2Y0ZTQyNzMwYzQ5ZTgxIgotCi1TUkNfVVJJID0gImh0dHBzOi8vYWxpb3RoLmRlYmlhbi5vcmcvZnJzL2Rvd25sb2FkLnBocC9sYXRlc3RmaWxlLzMvJHtCUH0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovL2FsbG93LnRvLmRpc2FibGUubG9ja2Rldi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC1taW5pY29tLWgtdi1yZXR1cm4tdmFsdWUtaXMtbm90LTAucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtYnVpbGQtaXNzdXMtc3VyZmFjZWQtZHVlLXRvLW11c2wucGF0Y2ggXAotICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjcwNDRjYTNlMjkxMjY4YzMzMjk0ZjE3MWQ0MjZkYzJkIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlhYzNhNjYzYjgyZjRmNWRmNjQxMTRiNDc5MmI5OTI2YjUzNmM4NWY1OWRlMGYyZDJiMzIxYzc2MjZhOTA0ZjQiCi0KLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2FsaW90aC5kZWJpYW4ub3JnL2Zycy8/Z3JvdXBfaWQ9MzAwMTgiCi0KLVBBQ0tBR0VDT05GSUcgPz89ICIiCi1QQUNLQUdFQ09ORklHW2xvY2tkZXZdID0gIi0tZW5hYmxlLWxvY2tkZXYsLS1kaXNhYmxlLWxvY2tkZXYsbG9ja2RldiIKLQotaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKLQotZG9faW5zdGFsbCgpIHsKLQlmb3IgZCBpbiBkb2MgZXh0cmFzIG1hbiBsaWIgc3JjOyBkbyBtYWtlIC1DICRkIERFU1RESVI9JHtEfSBpbnN0YWxsOyBkb25lCi19Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29sc18xLjYwLTI2LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzXzEuNjAtMjYuYmIKaW5kZXggNDVkN2JmNC4uNTY1N2ZkOCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzXzEuNjAtMjYuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzXzEuNjAtMjYuYmIKQEAgLTM3LDkgKzM3LDcgQEAKIAogaW5oZXJpdCBnZXR0ZXh0CiAKLWRvX3BhdGNoW2RlcGVuZHNdID0gInF1aWx0LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgotCi1MREZMQUdTX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLWxpbnRsICIKK2RvX3BhdGNoW2RlcGVuZHNdICs9ICJxdWlsdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKIAogIyBUaGUgTWFrZWZpbGUgaXMgbGFtZSwgbm8gcGFyYWxsZWwgYnVpbGQKIFBBUkFMTEVMX01BS0UgPSAiIgpAQCAtODMsMjAgKzgxLDEyIEBACiAKIGRvX2NvbXBpbGUoKSB7CiAJIyBuZXQtdG9vbHMgdXNlIENPUFRTL0xPUFRTIHRvIGFsbG93IGFkZGluZyBjdXN0b20gb3B0aW9ucwotCWV4cG9ydCBDT1BUUz0iJENGTEFHUyIKLQlleHBvcnQgTE9QVFM9IiRMREZMQUdTIgotCXVuc2V0IENGTEFHUwotCXVuc2V0IExERkxBR1MKLQotCW9lX3J1bm1ha2UKKwlvZV9ydW5tYWtlIENPUFRTPSIkQ0ZMQUdTIiBMT1BUUz0iJExERkxBR1MiCiB9CiAKIGRvX2luc3RhbGwoKSB7Ci0JZXhwb3J0IENPUFRTPSIkQ0ZMQUdTIgotCWV4cG9ydCBMT1BUUz0iJExERkxBR1MiCi0JdW5zZXQgQ0ZMQUdTCi0JdW5zZXQgTERGTEFHUwotCW9lX3J1bm1ha2UgJ0JBU0VESVI9JHtEfScgaW5zdGFsbAorCSMgV2UgZG9uJ3QgbmVlZCBDT1BUUyBvciBMT1BUUywgYnV0IGxldCdzIGJlIGNvbnNpc3RlbnQuCisJb2VfcnVubWFrZSBDT1BUUz0iJENGTEFHUyIgTE9QVFM9IiRMREZMQUdTIiAnQkFTRURJUj0ke0R9JyBpbnN0YWxsCiAKIAlpZiBbICIke2Jhc2VfYmluZGlyfSIgIT0gIi9iaW4iIF07IHRoZW4KIAkJbWtkaXIgLXAgJHtEfS8ke2Jhc2VfYmluZGlyfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3QtcHl0aG9uXzAuNTIuMTkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvbGlibmV3dC1weXRob25fMC41Mi4yMC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3QtcHl0aG9uXzAuNTIuMTkuYmIKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0LXB5dGhvbl8wLjUyLjIwLmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvbGlibmV3dF8wLjUyLjE5LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3RfMC41Mi4xOS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU3NmNlMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvbGlibmV3dF8wLjUyLjE5LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotU1VNTUFSWSA9ICJBIGxpYnJhcnkgZm9yIHRleHQgbW9kZSB1c2VyIGludGVyZmFjZXMiCi0KLURFU0NSSVBUSU9OID0gIk5ld3QgaXMgYSBwcm9ncmFtbWluZyBsaWJyYXJ5IGZvciBjb2xvciB0ZXh0IG1vZGUsIHdpZGdldCBiYXNlZCB1c2VyIFwKLWludGVyZmFjZXMuICBOZXd0IGNhbiBiZSB1c2VkIHRvIGFkZCBzdGFja2VkIHdpbmRvd3MsIGVudHJ5IHdpZGdldHMsIFwKLWNoZWNrYm94ZXMsIHJhZGlvIGJ1dHRvbnMsIGxhYmVscywgcGxhaW4gdGV4dCBmaWVsZHMsIHNjcm9sbGJhcnMsIFwKLWV0Yy4sIHRvIHRleHQgbW9kZSB1c2VyIGludGVyZmFjZXMuICBUaGlzIHBhY2thZ2UgYWxzbyBjb250YWlucyB0aGUgXAotc2hhcmVkIGxpYnJhcnkgbmVlZGVkIGJ5IHByb2dyYW1zIGJ1aWx0IHdpdGggbmV3dCwgYXMgd2VsbCBhcyBhIFwKLS91c3IvYmluL2RpYWxvZyByZXBsYWNlbWVudCBjYWxsZWQgd2hpcHRhaWwuICBOZXd0IGlzIGJhc2VkIG9uIHRoZSBcCi1zbGFuZyBsaWJyYXJ5LiIKLQotSE9NRVBBR0UgPSAiaHR0cHM6Ly9yZWxlYXNlcy5wYWd1cmUub3JnL25ld3QvIgotU0VDVElPTiA9ICJsaWJzIgotCi1MSUNFTlNFID0gIkxHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIgotCi0jIHNsYW5nIG5lZWRzIHRvIGJlID49IDIuMgotREVQRU5EUyA9ICJzbGFuZyBwb3B0IgotCi1TUkNfVVJJID0gImh0dHBzOi8vcmVsZWFzZXMucGFndXJlLm9yZy9uZXd0L25ld3QtJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovL2ZpeF9TSEFSRURESVIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vY3Jvc3NfYXIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUuaW4tQWRkLXRpbmZvLWxpYnJhcnktdG8tdGhlLWxpbmtpbmctbGlicmFyaS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9waWUtZmxhZ3MucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1kZXRlY3QtZ29sZC1hcy1HTlUtbGlua2VyLXRvby5wYXRjaCBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJlNGFhMGY3OTQzZWRkMzljNTI0ODFhODdmNjhmNDEyYSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIwOGMwZGI1NmMyMTk5NmFmNmE3Y2JhYjk5NDkxYjc3NGM2YzA5Y2VmOTFjZDliMDM5MDNjODQ2MzRiZmYyZTgwIgotCi1TID0gIiR7V09SS0RJUn0vbmV3dC0ke1BWfSIKLQotRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC10Y2wgLS13aXRob3V0LXB5dGhvbiIKLQotaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCi0KLUNMRUFOQlJPS0VOID0gIjEiCi0KLWV4cG9ydCBDUFBGTEFHUwotCi1QQUNLQUdFU19wcmVwZW5kID0gIndoaXB0YWlsICIKLQotZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7Ci0gICAgc2ggYXV0b2dlbi5zaAotfQotCi1kb19jb21waWxlX3ByZXBlbmQoKSB7Ci0gICAgIyBNYWtlIHN1cmUgdGhlIHJlY29tcGlsZSBpcyBPSwotICAgIHJtIC1mICR7Qn0vLmRlcGVuZAotfQotCi1GSUxFU193aGlwdGFpbCA9ICIke2JpbmRpcn0vd2hpcHRhaWwiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3RfMC41Mi4yMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0XzAuNTIuMjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVjZTcwYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0XzAuNTIuMjAuYmIKQEAgLTAsMCArMSw1NCBAQAorU1VNTUFSWSA9ICJBIGxpYnJhcnkgZm9yIHRleHQgbW9kZSB1c2VyIGludGVyZmFjZXMiCisKK0RFU0NSSVBUSU9OID0gIk5ld3QgaXMgYSBwcm9ncmFtbWluZyBsaWJyYXJ5IGZvciBjb2xvciB0ZXh0IG1vZGUsIHdpZGdldCBiYXNlZCB1c2VyIFwKK2ludGVyZmFjZXMuICBOZXd0IGNhbiBiZSB1c2VkIHRvIGFkZCBzdGFja2VkIHdpbmRvd3MsIGVudHJ5IHdpZGdldHMsIFwKK2NoZWNrYm94ZXMsIHJhZGlvIGJ1dHRvbnMsIGxhYmVscywgcGxhaW4gdGV4dCBmaWVsZHMsIHNjcm9sbGJhcnMsIFwKK2V0Yy4sIHRvIHRleHQgbW9kZSB1c2VyIGludGVyZmFjZXMuICBUaGlzIHBhY2thZ2UgYWxzbyBjb250YWlucyB0aGUgXAorc2hhcmVkIGxpYnJhcnkgbmVlZGVkIGJ5IHByb2dyYW1zIGJ1aWx0IHdpdGggbmV3dCwgYXMgd2VsbCBhcyBhIFwKKy91c3IvYmluL2RpYWxvZyByZXBsYWNlbWVudCBjYWxsZWQgd2hpcHRhaWwuICBOZXd0IGlzIGJhc2VkIG9uIHRoZSBcCitzbGFuZyBsaWJyYXJ5LiIKKworSE9NRVBBR0UgPSAiaHR0cHM6Ly9yZWxlYXNlcy5wYWd1cmUub3JnL25ld3QvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkxHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIgorCisjIHNsYW5nIG5lZWRzIHRvIGJlID49IDIuMgorREVQRU5EUyA9ICJzbGFuZyBwb3B0IgorCitTUkNfVVJJID0gImh0dHBzOi8vcmVsZWFzZXMucGFndXJlLm9yZy9uZXd0L25ld3QtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9TSEFSRURESVIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY3Jvc3NfYXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUuaW4tQWRkLXRpbmZvLWxpYnJhcnktdG8tdGhlLWxpbmtpbmctbGlicmFyaS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9waWUtZmxhZ3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1kZXRlY3QtZ29sZC1hcy1HTlUtbGlua2VyLXRvby5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MGIyODhmODIxMjM0NTkzYThlNzkyMGU0MzViMjU5YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZDY2YmE2YmVmZmMzZjc4NmQ0Y2NmZWU5ZDJiNDNkOTM0ODQ2ODBlZjhkYjkzOTdhNGZiNzBiNWFkYmI2ZGJjIgorCitTID0gIiR7V09SS0RJUn0vbmV3dC0ke1BWfSIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC10Y2wgLS13aXRob3V0LXB5dGhvbiIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK0NMRUFOQlJPS0VOID0gIjEiCisKK2V4cG9ydCBDUFBGTEFHUworCitQQUNLQUdFU19wcmVwZW5kID0gIndoaXB0YWlsICIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgc2ggYXV0b2dlbi5zaAorfQorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgIyBNYWtlIHN1cmUgdGhlIHJlY29tcGlsZSBpcyBPSworICAgIHJtIC1mICR7Qn0vLmRlcGVuZAorfQorCitGSUxFU193aGlwdGFpbCA9ICIke2JpbmRpcn0vd2hpcHRhaWwiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUuYmIKaW5kZXggZDg5NzVmMi4uZmRlZGU1OSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLmJiCkBAIC04Niw3ICs4Niw2IEBACiAgICAgbWMtZmlzaCBcCiAgICAgbWMtaGVscGVycyBcCiAgICAgbWMtaGVscGVycy1wZXJsIFwKLSAgICBtYy1oZWxwZXJzLXB5dGhvbiBcCiAgICAgbWt0ZW1wIFwKICAgICBuY3Vyc2VzIFwKICAgICBuZXQtdG9vbHMgXApAQCAtMTEwLDcgKzEwOSw2IEBACiAgICAgIgogCiBSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtZGV2LXV0aWxzID0gIlwKLSAgICBieWFjYyBcCiAgICAgZGlmZnV0aWxzIFwKICAgICBtNCBcCiAgICAgbWFrZSBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtbHNiLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWxzYi5iYgppbmRleCBhMTU2YmNiLi41YmFhZjM1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtbHNiLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1sc2IuYmIKQEAgLTY2LDcgKzY2LDYgQEAKICAgICBtYy1maXNoIFwKICAgICBtYy1oZWxwZXJzIFwKICAgICBtYy1oZWxwZXJzLXBlcmwgXAotICAgIG1jLWhlbHBlcnMtcHl0aG9uIFwKICAgICBtZGFkbSBcCiAgICAgbWluaWNvbSBcCiAgICAgbmVvbiBcCkBAIC0xNTQsNyArMTUzLDYgQEAKICAgICBsb2NhbGVkZWYgXAogICAgIGxzYiBcCiAgICAgbTQgXAotICAgIG1haWx4IFwKICAgICBtYWtlIFwKICAgICBtYW4gXAogICAgIG1hbi1wYWdlcyBcCkBAIC0xNzgsNyArMTc2LDYgQEAKICAgICBuY3Vyc2VzIFwKICAgICB6bGliIFwKICAgICBuc3ByIFwKLSAgICBsaWJwbmcxMiBcCiAgICAgbnNzIFwKICIKIApAQCAtMjAzLDMxICsyMDAsNiBAQAogICAgIHB5dGhvbi1taXNjIFwKICIKIAotUVQ0UEtHUyA9ICIgXAotICAgIGxpYnF0Y29yZTQgXAotICAgIGxpYnF0Z3VpNCBcCi0gICAgbGlicXRzcWw0IFwKLSAgICBsaWJxdHN2ZzQgXAotICAgIGxpYnF0eG1sNCBcCi0gICAgbGlicXRuZXR3b3JrNCBcCi0gICAgcXQ0LXBsdWdpbi1zcWxkcml2ZXItc3FsaXRlIFwKLSAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIm9wZW5nbCIsICJsaWJxdG9wZW5nbDQiLCAiIiwgZCl9IFwKLSAgICAiCi1RVDRQS0dTX21pcHM2NCA9ICIiCi1RVDRQS0dTX21pcHM2NG4zMiA9ICIiCi0KLWRlZiBnZXRfbGlicXQ0KGQpOgotICAgIGlmICdsaW51eHN0ZGJhc2UnIGluIGQuZ2V0VmFyKCdESVNUUk9PVkVSUklERVMnLCBGYWxzZSkgb3IgIiI6Ci0gICAgICAgIGlmICdxdDQnIGluIGQuZ2V0VmFyKCdCQkZJTEVfQ09MTEVDVElPTlMnLCBGYWxzZSkgb3IgIiI6Ci0gICAgICAgICAgICByZXR1cm4gZC5nZXRWYXIoJ1FUNFBLR1MnLCBGYWxzZSkKLQotICAgICAgICBiYi53YXJuKCdUaGUgbWV0YS1xdDQgbGF5ZXIgc2hvdWxkIGJlIGFkZGVkLCB0aGlzIGxheWVyIHByb3ZpZGVzIFF0IDQueCAnIFwKLSAgICAgICAgICAgICAgICAnbGlicmFyaWVzLiBJdHMgaW50ZW5kZWQgdXNlIGlzIGZvciBwYXNzaW5nIExTQiB0ZXN0cyBhcyBRdDQgaXMgJyBcCi0gICAgICAgICAgICAgICAgJ2EgcmVxdWlyZW1lbnQgZm9yIExTQi4nKQotICAgIHJldHVybiAnJwotIyBXZSBkb24ndCB3YW50IHRoaXMgdG8gcmVidWlsZCBldmVyeSB0aW1lIHlvdSBjaGFuZ2UgeW91ciBsYXllciBjb25maWcKLWdldF9saWJxdDRbdmFyZGVwc2V4Y2x1ZGVdICs9ICJCQkZJTEVfQ09MTEVDVElPTlMiCi0KIFNVTU1BUllfcGFja2FnZWdyb3VwLWNvcmUtbHNiLWRlc2t0b3AgPSAiTFNCIERlc2t0b3AiCiBERVNDUklQVElPTl9wYWNrYWdlZ3JvdXAtY29yZS1sc2ItZGVza3RvcCA9ICJQYWNrYWdlcyByZXF1aXJlZCB0byBzdXBwb3J0IGxpYnJhcmllcyBcCiAgICAgc3BlY2lmaWVkIGluIHRoZSBMU0IgRGVza3RvcCBzcGVjaWZpY2F0aW9uIgpAQCAtMjQ4LDcgKzIyMCw2IEBACiAgICAgZ3RrKyBcCiAgICAgYXRrIFwKICAgICBsaWJhc291bmQgXAotICAgICR7QGdldF9saWJxdDQoZCl9IFwKICIKIAogUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtbHNiLXJ1bnRpbWUtYWRkID0gIlwKQEAgLTI2NywxMCArMjM4LDQgQEAKICAgICBnbGliYy1sb2NhbGVkYXRhLXBvc2l4IFwKICAgICBnbGliYy1leHRyYS1uc3MgXAogICAgIGdsaWJjLXBjcHJvZmlsZSBcCi0gICAgbGliY2xhc3MtaXNhLXBlcmwgXAotICAgIGxpYmVudi1wZXJsIFwKLSAgICBsaWJkdW1wdmFsdWUtcGVybCBcCi0gICAgbGliZmlsZS1jaGVja3RyZWUtcGVybCBcCi0gICAgbGliaTE4bi1jb2xsYXRlLXBlcmwgXAotICAgIGxpYnBvZC1wbGFpbmVyLXBlcmwgXAogIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3VzZS11dG1weC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS91c2UtdXRtcHgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkMDRiYmIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3VzZS11dG1weC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIzMyArMCwwIEBACi11dG1wKCkgbWF5IG5vdCBiZSBjb25maWd1cmVkIGluIGFuZCB1c2UgcG9zaXggY29tcGxpYW50IHV0bXB4IGFsd2F5cwotVVRNUCBpcyBTVklEIGxlZ2FjeSwgVVRNUFggaXMgbWFuZGF0ZWQgYnkgUE9TSVgKLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotSW5kZXg6IExpbnV4LVBBTS0xLjIuMS9saWJwYW0vcGFtX21vZHV0aWxfZ2V0bG9naW4uYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIExpbnV4LVBBTS0xLjIuMS5vcmlnL2xpYnBhbS9wYW1fbW9kdXRpbF9nZXRsb2dpbi5jCi0rKysgTGludXgtUEFNLTEuMi4xL2xpYnBhbS9wYW1fbW9kdXRpbF9nZXRsb2dpbi5jCi1AQCAtMTAsOCArMTAsNyBAQAotIAotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0tI2luY2x1ZGUgPHV0bXAuaD4KLS0KLSsjaW5jbHVkZSA8dXRtcHguaD4KLSAjZGVmaW5lIF9QQU1NT0RVVElMX0dFVExPR0lOICJfcGFtbW9kdXRpbF9nZXRsb2dpbiIKLSAKLSBjb25zdCBjaGFyICoKLUBAIC0yMiw3ICsyMSw3IEBAIHBhbV9tb2R1dGlsX2dldGxvZ2luKHBhbV9oYW5kbGVfdCAqcGFtaCkKLSAgICAgY29uc3Qgdm9pZCAqdm9pZF9jdXJyX3R0eTsKLSAgICAgY29uc3QgY2hhciAqY3Vycl90dHk7Ci0gICAgIGNoYXIgKmN1cnJfdXNlcjsKLS0gICAgc3RydWN0IHV0bXAgKnV0LCBsaW5lOwotKyAgICBzdHJ1Y3QgdXRtcHggKnV0LCBsaW5lOwotIAotICAgICBzdGF0dXMgPSBwYW1fZ2V0X2RhdGEocGFtaCwgX1BBTU1PRFVUSUxfR0VUTE9HSU4sICZsb2duYW1lKTsKLSAgICAgaWYgKHN0YXR1cyA9PSBQQU1fU1VDQ0VTUykgewotQEAgLTQ4LDEwICs0NywxMCBAQCBwYW1fbW9kdXRpbF9nZXRsb2dpbihwYW1faGFuZGxlX3QgKnBhbWgpCi0gICAgIH0KLSAgICAgbG9nbmFtZSA9IE5VTEw7Ci0gCi0tICAgIHNldHV0ZW50KCk7Ci0rICAgIHNldHV0eGVudCgpOwotICAgICBzdHJuY3B5KGxpbmUudXRfbGluZSwgY3Vycl90dHksIHNpemVvZihsaW5lLnV0X2xpbmUpKTsKLSAKLS0gICAgaWYgKCh1dCA9IGdldHV0bGluZSgmbGluZSkpID09IE5VTEwpIHsKLSsgICAgaWYgKCh1dCA9IGdldHV0eGxpbmUoJmxpbmUpKSA9PSBOVUxMKSB7Ci0gCWdvdG8gY2xlYW5fdXBfYW5kX2dvX2hvbWU7Ci0gICAgIH0KLSAKLUBAIC03NCw3ICs3Myw3IEBAIHBhbV9tb2R1dGlsX2dldGxvZ2luKHBhbV9oYW5kbGVfdCAqcGFtaCkKLSAKLSBjbGVhbl91cF9hbmRfZ29faG9tZToKLSAKLS0gICAgZW5kdXRlbnQoKTsKLSsgICAgZW5kdXR4ZW50KCk7Ci0gCi0gICAgIHJldHVybiBsb2duYW1lOwotIH0KLUluZGV4OiBMaW51eC1QQU0tMS4yLjEvbW9kdWxlcy9wYW1faXNzdWUvcGFtX2lzc3VlLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBMaW51eC1QQU0tMS4yLjEub3JpZy9tb2R1bGVzL3BhbV9pc3N1ZS9wYW1faXNzdWUuYwotKysrIExpbnV4LVBBTS0xLjIuMS9tb2R1bGVzL3BhbV9pc3N1ZS9wYW1faXNzdWUuYwotQEAgLTI1LDcgKzI1LDcgQEAKLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotICNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgotLSNpbmNsdWRlIDx1dG1wLmg+Ci0rI2luY2x1ZGUgPHV0bXB4Lmg+Ci0gI2luY2x1ZGUgPHRpbWUuaD4KLSAjaW5jbHVkZSA8c3lzbG9nLmg+Ci0gCi1AQCAtMjQ2LDEzICsyNDYsMTMgQEAgcmVhZF9pc3N1ZV9xdW90ZWQocGFtX2hhbmRsZV90ICpwYW1oLCBGSQotIAkgICAgICBjYXNlICdVJzoKLSAJCXsKLSAJCSAgICB1bnNpZ25lZCBpbnQgdXNlcnMgPSAwOwotLQkJICAgIHN0cnVjdCB1dG1wICp1dDsKLS0JCSAgICBzZXR1dGVudCgpOwotLQkJICAgIHdoaWxlICgodXQgPSBnZXR1dGVudCgpKSkgewotKwkJICAgIHN0cnVjdCB1dG1weCAqdXQ7Ci0rCQkgICAgc2V0dXR4ZW50KCk7Ci0rCQkgICAgd2hpbGUgKCh1dCA9IGdldHV0eGVudCgpKSkgewotIAkJCWlmICh1dC0+dXRfdHlwZSA9PSBVU0VSX1BST0NFU1MpCi0gCQkJICAgICsrdXNlcnM7Ci0gCQkgICAgfQotLQkJICAgIGVuZHV0ZW50KCk7Ci0rCQkgICAgZW5kdXR4ZW50KCk7Ci0gCQkgICAgaWYgKGMgPT0gJ1UnKQotIAkJCXNucHJpbnRmIChidWYsIHNpemVvZiBidWYsICIldSAlcyIsIHVzZXJzLAotIAkJCSAgICAgICAgICAodXNlcnMgPT0gMSkgPyAidXNlciIgOiAidXNlcnMiKTsKLUluZGV4OiBMaW51eC1QQU0tMS4yLjEvbW9kdWxlcy9wYW1fbGFzdGxvZy9wYW1fbGFzdGxvZy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gTGludXgtUEFNLTEuMi4xLm9yaWcvbW9kdWxlcy9wYW1fbGFzdGxvZy9wYW1fbGFzdGxvZy5jCi0rKysgTGludXgtUEFNLTEuMi4xL21vZHVsZXMvcGFtX2xhc3Rsb2cvcGFtX2xhc3Rsb2cuYwotQEAgLTE1LDggKzE1LDkgQEAKLSAjaW5jbHVkZSA8ZXJybm8uaD4KLSAjaWZkZWYgSEFWRV9VVE1QX0gKLSAjIGluY2x1ZGUgPHV0bXAuaD4KLS0jZWxzZQotLSMgaW5jbHVkZSA8bGFzdGxvZy5oPgotKyNlbmRpZgotKyNpZmRlZiBIQVZFX1VUTVBYX0gKLSsjIGluY2x1ZGUgPHV0bXB4Lmg+Ci0gI2VuZGlmCi0gI2luY2x1ZGUgPHB3ZC5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLUBAIC0yNyw2ICsyOCwxMiBAQAotICNpbmNsdWRlIDxzeXNsb2cuaD4KLSAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0gCi0rI2lmbmRlZiBIQVZFX1VUTVBfSAotKyNkZWZpbmUgVVRfTElORVNJWkUgMzIKLSsjZGVmaW5lIFVUX0hPU1RTSVpFIDMyCi0rI2RlZmluZSBVVF9OQU1FU0laRSAyNTYKLSsjZW5kaWYKLSsKLSAjaWYgZGVmaW5lZChocHV4KSB8fCBkZWZpbmVkKHN1bm9zKSB8fCBkZWZpbmVkKHNvbGFyaXMpCi0gIyBpZm5kZWYgX1BBVEhfTEFTVExPRwotICMgIGRlZmluZSBfUEFUSF9MQVNUTE9HICIvdXNyL2FkbS9sYXN0bG9nIgotQEAgLTM4LDcgKzQ1LDcgQEAKLSAjICBkZWZpbmUgVVRfTElORVNJWkUgMTIKLSAjIGVuZGlmIC8qIFVUX0xJTkVTSVpFICovCi0gI2VuZGlmCi0tI2lmIGRlZmluZWQoaHB1eCkKLSsjaWYgZGVmaW5lZChocHV4KSB8fCAhZGVmaW5lZCBIQVZFX1VUTVBfSAotIHN0cnVjdCBsYXN0bG9nIHsKLSAgICAgdGltZV90ICBsbF90aW1lOwotICAgICBjaGFyICAgIGxsX2xpbmVbVVRfTElORVNJWkVdOwotQEAgLTQ0Nyw4ICs0NTQsOCBAQCBsYXN0X2xvZ2luX2ZhaWxlZChwYW1faGFuZGxlX3QgKnBhbWgsIGluCi0gewotICAgICBpbnQgcmV0dmFsOwotICAgICBpbnQgZmQ7Ci0tICAgIHN0cnVjdCB1dG1wIHV0OwotLSAgICBzdHJ1Y3QgdXRtcCB1dHVzZXI7Ci0rICAgIHN0cnVjdCB1dG1weCB1dDsKLSsgICAgc3RydWN0IHV0bXB4IHV0dXNlcjsKLSAgICAgaW50IGZhaWxlZCA9IDA7Ci0gICAgIGNoYXIgdGhlX3RpbWVbMjU2XTsKLSAgICAgY2hhciAqZGF0ZSA9IE5VTEw7Ci1JbmRleDogTGludXgtUEFNLTEuMi4xL21vZHVsZXMvcGFtX2xpbWl0cy9wYW1fbGltaXRzLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBMaW51eC1QQU0tMS4yLjEub3JpZy9tb2R1bGVzL3BhbV9saW1pdHMvcGFtX2xpbWl0cy5jCi0rKysgTGludXgtUEFNLTEuMi4xL21vZHVsZXMvcGFtX2xpbWl0cy9wYW1fbGltaXRzLmMKLUBAIC0zMyw3ICszMyw3IEBACi0gI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgotICNpbmNsdWRlIDxsaW1pdHMuaD4KLSAjaW5jbHVkZSA8Z2xvYi5oPgotLSNpbmNsdWRlIDx1dG1wLmg+Ci0rI2luY2x1ZGUgPHV0bXB4Lmg+Ci0gI2lmbmRlZiBVVF9VU0VSICAvKiBzb21lIHN5c3RlbXMgaGF2ZSB1dF9uYW1lIGluc3RlYWQgb2YgdXRfdXNlciAqLwotICNkZWZpbmUgVVRfVVNFUiB1dF91c2VyCi0gI2VuZGlmCi1AQCAtMjI3LDcgKzIyNyw3IEBAIHN0YXRpYyBpbnQKLSBjaGVja19sb2dpbnMgKHBhbV9oYW5kbGVfdCAqcGFtaCwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxpbWl0LCBpbnQgY3RybCwKLSAgICAgICAgICAgICAgIHN0cnVjdCBwYW1fbGltaXRfcyAqcGwpCi0gewotLSAgICBzdHJ1Y3QgdXRtcCAqdXQ7Ci0rICAgIHN0cnVjdCB1dG1weCAqdXQ7Ci0gICAgIGludCBjb3VudDsKLSAKLSAgICAgaWYgKGN0cmwgJiBQQU1fREVCVUdfQVJHKSB7Ci1AQCAtMjQyLDcgKzI0Miw3IEBAIGNoZWNrX2xvZ2lucyAocGFtX2hhbmRsZV90ICpwYW1oLCBjb25zdAotICAgICAgICAgcmV0dXJuIExPR0lOX0VSUjsKLSAgICAgfQotIAotLSAgICBzZXR1dGVudCgpOwotKyAgICBzZXR1dHhlbnQoKTsKLSAKLSAgICAgLyogQmVjYXVzZSB0aGVyZSBpcyBubyBkZWZpbml0aW9uIGFib3V0IHdoZW4gYW4gYXBwbGljYXRpb24KLSAgICAgICAgYWN0dWFsbHkgYWRkcyBhIHV0bXAgZW50cnksIHNvbWUgYXBwbGljYXRpb25zIGJpemFycmVseSBkbyB0aGUKLUBAIC0yNjAsNyArMjYwLDcgQEAgY2hlY2tfbG9naW5zIChwYW1faGFuZGxlX3QgKnBhbWgsIGNvbnN0Ci0gCWNvdW50ID0gMTsKLSAgICAgfQotIAotLSAgICB3aGlsZSgodXQgPSBnZXR1dGVudCgpKSkgewotKyAgICB3aGlsZSgodXQgPSBnZXR1dHhlbnQoKSkpIHsKLSAjaWZkZWYgVVNFUl9QUk9DRVNTCi0gICAgICAgICBpZiAodXQtPnV0X3R5cGUgIT0gVVNFUl9QUk9DRVNTKSB7Ci0gICAgICAgICAgICAgY29udGludWU7Ci1AQCAtMjk2LDcgKzI5Niw3IEBAIGNoZWNrX2xvZ2lucyAocGFtX2hhbmRsZV90ICpwYW1oLCBjb25zdAotIAkgICAgYnJlYWs7Ci0gCX0KLSAgICAgfQotLSAgICBlbmR1dGVudCgpOwotKyAgICBlbmR1dHhlbnQoKTsKLSAgICAgaWYgKGNvdW50ID4gbGltaXQpIHsKLSAJaWYgKG5hbWUpIHsKLSAJICAgIHBhbV9zeXNsb2cocGFtaCwgTE9HX1dBUk5JTkcsCi1JbmRleDogTGludXgtUEFNLTEuMi4xL21vZHVsZXMvcGFtX3RpbWVzdGFtcC9wYW1fdGltZXN0YW1wLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBMaW51eC1QQU0tMS4yLjEub3JpZy9tb2R1bGVzL3BhbV90aW1lc3RhbXAvcGFtX3RpbWVzdGFtcC5jCi0rKysgTGludXgtUEFNLTEuMi4xL21vZHVsZXMvcGFtX3RpbWVzdGFtcC9wYW1fdGltZXN0YW1wLmMKLUBAIC01Niw3ICs1Niw3IEBACi0gI2luY2x1ZGUgPHRpbWUuaD4KLSAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0tI2luY2x1ZGUgPHV0bXAuaD4KLSsjaW5jbHVkZSA8dXRtcHguaD4KLSAjaW5jbHVkZSA8c3lzbG9nLmg+Ci0gI2luY2x1ZGUgPHBhdGhzLmg+Ci0gI2luY2x1ZGUgImhtYWNzaGExLmgiCi1AQCAtMTk3LDE1ICsxOTcsMTUgQEAgdGltZXN0YW1wX2dvb2QodGltZV90IHRoZW4sIHRpbWVfdCBub3csCi0gc3RhdGljIGludAotIGNoZWNrX2xvZ2luX3RpbWUoY29uc3QgY2hhciAqcnVzZXIsIHRpbWVfdCB0aW1lc3RhbXApCi0gewotLQlzdHJ1Y3QgdXRtcCB1dGJ1ZiwgKnV0OwotKwlzdHJ1Y3QgdXRtcHggdXRidWYsICp1dDsKLSAJdGltZV90IG9sZGVzdF9sb2dpbiA9IDA7Ci0gCi0tCXNldHV0ZW50KCk7Ci0rCXNldHV0eGVudCgpOwotIAl3aGlsZSgKLSAjaWZkZWYgSEFWRV9HRVRVVEVOVF9SCi0tCSAgICAgICFnZXR1dGVudF9yKCZ1dGJ1ZiwgJnV0KQotKwkgICAgICAhZ2V0dXR4ZW50X3IoJnV0YnVmLCAmdXQpCi0gI2Vsc2UKLS0JICAgICAgKHV0ID0gZ2V0dXRlbnQoKSkgIT0gTlVMTAotKwkgICAgICAodXQgPSBnZXR1dHhlbnQoKSkgIT0gTlVMTAotICNlbmRpZgotIAkgICAgICApIHsKLSAJCWlmICh1dC0+dXRfdHlwZSAhPSBVU0VSX1BST0NFU1MpIHsKLUBAIC0yMTgsNyArMjE4LDcgQEAgY2hlY2tfbG9naW5fdGltZShjb25zdCBjaGFyICpydXNlciwgdGltZQotIAkJCW9sZGVzdF9sb2dpbiA9IHV0LT51dF90di50dl9zZWM7Ci0gCQl9Ci0gCX0KLS0JZW5kdXRlbnQoKTsKLSsJZW5kdXR4ZW50KCk7Ci0gCWlmKG9sZGVzdF9sb2dpbiA9PSAwIHx8IHRpbWVzdGFtcCA8IG9sZGVzdF9sb2dpbikgewotIAkJcmV0dXJuIFBBTV9BVVRIX0VSUjsKLSAJfQotSW5kZXg6IExpbnV4LVBBTS0xLjIuMS9tb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIExpbnV4LVBBTS0xLjIuMS5vcmlnL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5jCi0rKysgTGludXgtUEFNLTEuMi4xL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5jCi1AQCAtMTMsNyArMTMsNiBAQAotICNpbmNsdWRlIDxwd2QuaD4KLSAjaW5jbHVkZSA8c2hhZG93Lmg+Ci0gI2luY2x1ZGUgPGxpbWl0cy5oPgotLSNpbmNsdWRlIDx1dG1wLmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0gI2luY2x1ZGUgPHNpZ25hbC5oPgotICNpbmNsdWRlIDxjdHlwZS5oPgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtXzEuMy4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtXzEuMy4wLmJiCmluZGV4IGRmNTZkMjcuLjhmNzc1M2QgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbV8xLjMuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW1fMS4zLjAuYmIKQEAgLTI4LDggKzI4LDYgQEAKIFNSQ19VUklbbWQ1c3VtXSA9ICJkYTRiMjI4OWI3Y2ZiMTk1ODNkNTRlOWVhYWVmMWMzYSIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICIyNDFhZWQxZWY1MjJmNjZlZDY3MjcxOWVjZjIyMDVlYzUxM2ZkMDA3NWVkODBjZGE4ZTA4NmE1YjFhMDFkMWJiIgogCi1TUkNfVVJJX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgZmlsZTovL3VzZS11dG1weC5wYXRjaCIKLQogU1JDX1VSSV9hcHBlbmRfbGliYy1tdXNsID0gIiBmaWxlOi8vMDAwMS1BZGQtc3VwcG9ydC1mb3ItZGVmaW5pbmctbWlzc2luZy1mdW5jaXRvbmFsaXR5LnBhdGNoIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGVfcGF0aHNfaGVhZGVyLnBhdGNoIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzLzAwMDEtTW92ZS1weXRob24taGVscGVyLXNjcmlwdHMtdXNlZC1vbmx5LWluLXRlc3RzLXRvLVB5dC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzLzAwMDEtTW92ZS1weXRob24taGVscGVyLXNjcmlwdHMtdXNlZC1vbmx5LWluLXRlc3RzLXRvLVB5dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjhiMTRlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvMDAwMS1Nb3ZlLXB5dGhvbi1oZWxwZXItc2NyaXB0cy11c2VkLW9ubHktaW4tdGVzdHMtdG8tUHl0LnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0Zyb20gNmU4MmFmNTQ3MTQzOTJkY2RmNzRhOGFlZGFhZTdkZTdkMGFmMTA4MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogVGh1LCAyNyBBcHIgMjAxNyAxNjozNzoyNCArMDMwMAorU3ViamVjdDogW1BBVENIXSBNb3ZlIHB5dGhvbiBoZWxwZXIgc2NyaXB0cyAodXNlZCBvbmx5IGluIHRlc3RzKSB0byBQeXRob24gMworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorLS0tCisgdGVzdHMvZ3B0LWhlYWRlci1tb3ZlIHwgMiArLQorIHRlc3RzL21zZG9zLW92ZXJsYXAgICB8IDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdGVzdHMvZ3B0LWhlYWRlci1tb3ZlIGIvdGVzdHMvZ3B0LWhlYWRlci1tb3ZlCitpbmRleCAwNWNkYzY1Li4zY2JjYjdlIDEwMDc1NQorLS0tIGEvdGVzdHMvZ3B0LWhlYWRlci1tb3ZlCisrKysgYi90ZXN0cy9ncHQtaGVhZGVyLW1vdmUKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uCisrIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworIAorICMgb3BlbiBpbWcgZmlsZSwgc3VidHJhY3QgMzMgZnJvbSBhbHRsYmEgYWRkcmVzcywgYW5kIG1vdmUgdGhlIGxhc3QgMzMgc2VjdG9ycworICMgYmFjayBieSAzMyBzZWN0b3JzCitkaWZmIC0tZ2l0IGEvdGVzdHMvbXNkb3Mtb3ZlcmxhcCBiL3Rlc3RzL21zZG9zLW92ZXJsYXAKK2luZGV4IDViZGRmYjAuLjNkZTdkMmUgMTAwNzU1CistLS0gYS90ZXN0cy9tc2Rvcy1vdmVybGFwCisrKysgYi90ZXN0cy9tc2Rvcy1vdmVybGFwCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbgorKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKyAiIiIKKyAgICAgV3JpdGUgYW4gb3ZlcmxhcHBpbmcgcGFydGl0aW9uIHRvIGEgbXNkb3MgZGlzaworIAorQEAgLTE0LDcgKzE0LDcgQEAgQkFEX0VOVFJZID0gKDB4NzIsIDB4ZjUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgT0ZGU0VUID0gMHgxYjgKKyAKKyBpZiBsZW4oc3lzLmFyZ3YpIDwgMjoKKy0gICAgcHJpbnQgIiVzOiA8aW1hZ2Ugb3IgZGV2aWNlPiIKKysgICAgcHJpbnQoIiVzOiA8aW1hZ2Ugb3IgZGV2aWNlPiIpCisgICAgIHN5cy5leGl0KDEpCisgCisgZGF0YSA9ICIiLmpvaW4oY2hyKGMpIGZvciBjIGluIEJBRF9FTlRSWSkKKy0tIAorMi4xMS4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzLzAwMDEtbGlicGFydGVkLVVzZS1yZWFkLW9ubHktd2hlbi1wcm9iaW5nLWRldmljZXMtb24tbGludS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzLzAwMDEtbGlicGFydGVkLVVzZS1yZWFkLW9ubHktd2hlbi1wcm9iaW5nLWRldmljZXMtb24tbGludS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTIyZTFjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvMDAwMS1saWJwYXJ0ZWQtVXNlLXJlYWQtb25seS13aGVuLXByb2JpbmctZGV2aWNlcy1vbi1saW51LnBhdGNoCkBAIC0wLDAgKzEsMjI0IEBACitGcm9tIGQ2ZTE1YTYwZTg0YzE1MTE1MjNhYTgxMjcyYjdkYjdhNmVjNDQxZDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBPdmlkaXUgUGFuYWl0IDxvdmlkaXUucGFuYWl0QHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDI2IFNlcCAyMDE3IDA4OjA0OjU4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpYnBhcnRlZDogVXNlIHJlYWQgb25seSB3aGVuIHByb2JpbmcgZGV2aWNlcyBvbiBsaW51eAorICgjMTI0NTE0NCkKKworV2hlbiBhIGRldmljZSBpcyBvcGVuZWQgZm9yIFJXIGNsb3NpbmcgaXQgY2FuIHRyaWdnZXIgb3RoZXIgYWN0aW9ucywKK2xpa2UgdWRldiBzY2FubmluZyBpdCBmb3IgcGFydGl0aW9uIGNoYW5nZXMuIFVzZSByZWFkIG9ubHkgZm9yIHRoZQoraW5pdF8qIG1ldGhvZHMgYW5kIFJXIGZvciBhY3R1YWwgY2hhbmdlcyB0byB0aGUgZGV2aWNlLgorCitUaGlzIGFkZHMgX2RldmljZV9vcGVuIHdoaWNoIHRha2VzIG1vZGUgZmxhZ3MgYXMgYW4gYXJndW1lbnQgYW5kIHR1cm5zCitsaW51eF9vcGVuIGludG8gYSB3cmFwcGVyIGZvciBpdCB3aXRoIFJXX01PREUuCisKK19kZXZpY2Vfb3Blbl9ybyBpcyBhZGRlZCB0byBvcGVuIHRoZSBkZXZpY2Ugd2l0aCBSRF9NT0RFIGFuZCBpbmNyZW1lbnQKK3RoZSBvcGVuX2NvdW50ZXIuIFRoaXMgaXMgdXNlZCBpbiB0aGUgaW5pdF8qIGZ1bmN0aW9ucy4KKworX2RldmljZV9jbG9zZSBpcyBhIHdyYXBwZXIgYXJvdW5kIGxpbnV4X2Nsb3NlIHRoYXQgZGVjcmVtZW50cyB0aGUKK29wZW5fY291bnRlciBhbmQgaXMgdXNlZCBpbiB0aGUgaW5pdF8qIGZ1bmN0aW9ucy4KKworQWxsIG9mIHRoZXNlIGNoYW5nZXMgYXJlIHNlbGYtY29udGFpbmVkIHdpdGggbm8gZXh0ZXJuYWwgQVBJIGNoYW5nZXMuCitUaGUgb25seSB2aXNpYmxlIGNoYW5nZSBpbiBiZWhhdmlvciBpcyB0aGF0IHdoZW4gYSBuZXcgUGVkRGV2aWNlIGlzCitjcmVhdGVkIHRoZSBkZXZpY2UgaXMgb3BlbmVkIGluIFJPX01PREUgaW5zdGVhZCBvZiBSV19NT0RFLgorCitSZXNvbHZlczogcmhieiMxMjQ1MTQ0CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworQXV0aG9yOiBCcmlhbiBDLiBMYW5lIDxiY2xAcmVkaGF0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IE92aWRpdSBQYW5haXQgPG92aWRpdS5wYW5haXRAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmMgfCA2MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0NCBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnBhcnRlZC9hcmNoL2xpbnV4LmMgYi9saWJwYXJ0ZWQvYXJjaC9saW51eC5jCitpbmRleCBmNjEyNjE3Li4wYTA2YTU0IDEwMDY0NAorLS0tIGEvbGlicGFydGVkL2FyY2gvbGludXguYworKysrIGIvbGlicGFydGVkL2FyY2gvbGludXguYworQEAgLTI5NCw3ICsyOTQsOSBAQCBzdHJ1Y3QgYmxrZGV2X2lvY3RsX3BhcmFtIHsKKyBzdGF0aWMgY2hhciogX2RldmljZV9nZXRfcGFydF9wYXRoIChQZWREZXZpY2UgY29uc3QgKmRldiwgaW50IG51bSk7Cisgc3RhdGljIGludCBfcGFydGl0aW9uX2lzX21vdW50ZWRfYnlfcGF0aCAoY29uc3QgY2hhciogcGF0aCk7Cisgc3RhdGljIHVuc2lnbmVkIGludCBfZGV2aWNlX2dldF9wYXJ0aXRpb25fcmFuZ2UoUGVkRGV2aWNlIGNvbnN0KiBkZXYpOworLQorK3N0YXRpYyBpbnQgX2RldmljZV9vcGVuIChQZWREZXZpY2UqIGRldiwgaW50IGZsYWdzKTsKKytzdGF0aWMgaW50IF9kZXZpY2Vfb3Blbl9ybyAoUGVkRGV2aWNlKiBkZXYpOworK3N0YXRpYyBpbnQgX2RldmljZV9jbG9zZSAoUGVkRGV2aWNlKiBkZXYpOworIAorIHN0YXRpYyBpbnQKKyBfcmVhZF9mZCAoaW50IGZkLCBjaGFyICoqYnVmKQorQEAgLTkxMyw3ICs5MTUsNyBAQCBpbml0X2lkZSAoUGVkRGV2aWNlKiBkZXYpCisgICAgICAgICBpZiAoIV9kZXZpY2Vfc3RhdCAoZGV2LCAmZGV2X3N0YXQpKQorICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworIAorLSAgICAgICAgaWYgKCFwZWRfZGV2aWNlX29wZW4gKGRldikpCisrICAgICAgICBpZiAoIV9kZXZpY2Vfb3Blbl9ybyAoZGV2KSkKKyAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAKKyAgICAgICAgIGlmIChpb2N0bCAoYXJjaF9zcGVjaWZpYy0+ZmQsIEhESU9fR0VUX0lERU5USVRZLCAmaGRpKSkgeworQEAgLTk4MiwxMSArOTg0LDExIEBAIGluaXRfaWRlIChQZWREZXZpY2UqIGRldikKKyAgICAgICAgIGlmICghX2RldmljZV9wcm9iZV9nZW9tZXRyeSAoZGV2KSkKKyAgICAgICAgICAgICAgICAgZ290byBlcnJvcl9jbG9zZV9kZXY7CisgCistICAgICAgICBwZWRfZGV2aWNlX2Nsb3NlIChkZXYpOworKyAgICAgICAgX2RldmljZV9jbG9zZSAoZGV2KTsKKyAgICAgICAgIHJldHVybiAxOworIAorIGVycm9yX2Nsb3NlX2RldjoKKy0gICAgICAgIHBlZF9kZXZpY2VfY2xvc2UgKGRldik7CisrICAgICAgICBfZGV2aWNlX2Nsb3NlIChkZXYpOworIGVycm9yOgorICAgICAgICAgcmV0dXJuIDA7CisgfQorQEAgLTExMTksNyArMTEyMSw3IEBAIGluaXRfc2NzaSAoUGVkRGV2aWNlKiBkZXYpCisgICAgICAgICBjaGFyKiB2ZW5kb3I7CisgICAgICAgICBjaGFyKiBwcm9kdWN0OworIAorLSAgICAgICAgaWYgKCFwZWRfZGV2aWNlX29wZW4gKGRldikpCisrICAgICAgICBpZiAoIV9kZXZpY2Vfb3Blbl9ybyAoZGV2KSkKKyAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAKKyAgICAgICAgIGlmIChpb2N0bCAoYXJjaF9zcGVjaWZpYy0+ZmQsIFNDU0lfSU9DVExfR0VUX0lETFVOLCAmaWRsdW4pIDwgMCkgeworQEAgLTExMzMsNyArMTEzNSw3IEBAIGluaXRfc2NzaSAoUGVkRGV2aWNlKiBkZXYpCisgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcl9jbG9zZV9kZXY7CisgICAgICAgICAgICAgICAgIGlmICghX2RldmljZV9wcm9iZV9nZW9tZXRyeSAoZGV2KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2Nsb3NlX2RldjsKKy0gICAgICAgICAgICAgICAgcGVkX2RldmljZV9jbG9zZSAoZGV2KTsKKysgICAgICAgICAgICAgICAgX2RldmljZV9jbG9zZSAoZGV2KTsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICB9CisgCitAQCAtMTE1NSwxMSArMTE1NywxMSBAQCBpbml0X3Njc2kgKFBlZERldmljZSogZGV2KQorICAgICAgICAgaWYgKCFfZGV2aWNlX3Byb2JlX2dlb21ldHJ5IChkZXYpKQorICAgICAgICAgICAgICAgICBnb3RvIGVycm9yX2Nsb3NlX2RldjsKKyAKKy0gICAgICAgIHBlZF9kZXZpY2VfY2xvc2UgKGRldik7CisrICAgICAgICBfZGV2aWNlX2Nsb3NlIChkZXYpOworICAgICAgICAgcmV0dXJuIDE7CisgCisgZXJyb3JfY2xvc2VfZGV2OgorLSAgICAgICAgcGVkX2RldmljZV9jbG9zZSAoZGV2KTsKKysgICAgICAgIF9kZXZpY2VfY2xvc2UgKGRldik7CisgZXJyb3I6CisgICAgICAgICByZXR1cm4gMDsKKyB9CitAQCAtMTE3MSw3ICsxMTczLDcgQEAgaW5pdF9maWxlIChQZWREZXZpY2UqIGRldikKKyAKKyAgICAgICAgIGlmICghX2RldmljZV9zdGF0IChkZXYsICZkZXZfc3RhdCkpCisgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CistICAgICAgICBpZiAoIXBlZF9kZXZpY2Vfb3BlbiAoZGV2KSkKKysgICAgICAgIGlmICghX2RldmljZV9vcGVuX3JvIChkZXYpKQorICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworIAorICAgICAgICAgZGV2LT5zZWN0b3Jfc2l6ZSA9IFBFRF9TRUNUT1JfU0laRV9ERUZBVUxUOworQEAgLTExOTgsNyArMTIwMCw3IEBAIGluaXRfZmlsZSAoUGVkRGV2aWNlKiBkZXYpCisgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfY2xvc2VfZGV2OworICAgICAgICAgfQorIAorLSAgICAgICAgcGVkX2RldmljZV9jbG9zZSAoZGV2KTsKKysgICAgICAgIF9kZXZpY2VfY2xvc2UgKGRldik7CisgCisgICAgICAgICBkZXYtPmJpb3NfZ2VvbS5jeWxpbmRlcnMgPSBkZXYtPmxlbmd0aCAvIDQgLyAzMjsKKyAgICAgICAgIGRldi0+Ymlvc19nZW9tLmhlYWRzID0gNDsKK0BAIC0xMjA5LDcgKzEyMTEsNyBAQCBpbml0X2ZpbGUgKFBlZERldmljZSogZGV2KQorICAgICAgICAgcmV0dXJuIDE7CisgCisgZXJyb3JfY2xvc2VfZGV2OgorLSAgICAgICAgcGVkX2RldmljZV9jbG9zZSAoZGV2KTsKKysgICAgICAgIF9kZXZpY2VfY2xvc2UgKGRldik7CisgZXJyb3I6CisgICAgICAgICByZXR1cm4gMDsKKyB9CitAQCAtMTIyNSw3ICsxMjI3LDcgQEAgaW5pdF9kYXNkIChQZWREZXZpY2UqIGRldiwgY29uc3QgY2hhciogbW9kZWxfbmFtZSkKKyAgICAgICAgIGlmICghX2RldmljZV9zdGF0IChkZXYsICZkZXZfc3RhdCkpCisgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgCistICAgICAgICBpZiAoIXBlZF9kZXZpY2Vfb3BlbiAoZGV2KSkKKysgICAgICAgIGlmICghX2RldmljZV9vcGVuX3JvIChkZXYpKQorICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworIAorICAgICAgICAgTGludXhTcGVjaWZpYyogYXJjaF9zcGVjaWZpYyA9IExJTlVYX1NQRUNJRklDIChkZXYpOworQEAgLTEyNjUsMTEgKzEyNjcsMTEgQEAgaW5pdF9kYXNkIChQZWREZXZpY2UqIGRldiwgY29uc3QgY2hhciogbW9kZWxfbmFtZSkKKyAKKyAgICAgICAgIGRldi0+bW9kZWwgPSBzdHJkdXAgKG1vZGVsX25hbWUpOworIAorLSAgICAgICAgcGVkX2RldmljZV9jbG9zZSAoZGV2KTsKKysgICAgICAgIF9kZXZpY2VfY2xvc2UgKGRldik7CisgICAgICAgICByZXR1cm4gMTsKKyAKKyBlcnJvcl9jbG9zZV9kZXY6CistICAgICAgICBwZWRfZGV2aWNlX2Nsb3NlIChkZXYpOworKyAgICAgICAgX2RldmljZV9jbG9zZSAoZGV2KTsKKyBlcnJvcjoKKyAgICAgICAgIHJldHVybiAwOworIH0KK0BAIC0xMjg0LDcgKzEyODYsNyBAQCBpbml0X2dlbmVyaWMgKFBlZERldmljZSogZGV2LCBjb25zdCBjaGFyKiBtb2RlbF9uYW1lKQorICAgICAgICAgaWYgKCFfZGV2aWNlX3N0YXQgKGRldiwgJmRldl9zdGF0KSkKKyAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAKKy0gICAgICAgIGlmICghcGVkX2RldmljZV9vcGVuIChkZXYpKQorKyAgICAgICAgaWYgKCFfZGV2aWNlX29wZW5fcm8gKGRldikpCisgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgCisgICAgICAgICBwZWRfZXhjZXB0aW9uX2ZldGNoX2FsbCAoKTsKK0BAIC0xMzMyLDExICsxMzM0LDExIEBAIGluaXRfZ2VuZXJpYyAoUGVkRGV2aWNlKiBkZXYsIGNvbnN0IGNoYXIqIG1vZGVsX25hbWUpCisgCisgICAgICAgICBkZXYtPm1vZGVsID0gc3RyZHVwIChtb2RlbF9uYW1lKTsKKyAKKy0gICAgICAgIHBlZF9kZXZpY2VfY2xvc2UgKGRldik7CisrICAgICAgICBfZGV2aWNlX2Nsb3NlIChkZXYpOworICAgICAgICAgcmV0dXJuIDE7CisgCisgZXJyb3JfY2xvc2VfZGV2OgorLSAgICAgICAgcGVkX2RldmljZV9jbG9zZSAoZGV2KTsKKysgICAgICAgIF9kZXZpY2VfY2xvc2UgKGRldik7CisgZXJyb3I6CisgICAgICAgICByZXR1cm4gMDsKKyB9CitAQCAtMTYyMywxMiArMTYyNSwyNyBAQCByZXRyeToKKyB9CisgCisgc3RhdGljIGludAorK19kZXZpY2Vfb3Blbl9ybyAoUGVkRGV2aWNlKiBkZXYpCisreworKyAgICBpbnQgcmMgPSBfZGV2aWNlX29wZW4gKGRldiwgUkRfTU9ERSk7CisrICAgIGlmIChyYykKKysgICAgICAgIGRldi0+b3Blbl9jb3VudCsrOworKyAgICByZXR1cm4gcmM7CisrfQorKworK3N0YXRpYyBpbnQKKyBsaW51eF9vcGVuIChQZWREZXZpY2UqIGRldikKKyB7CisrICAgIHJldHVybiBfZGV2aWNlX29wZW4gKGRldiwgUldfTU9ERSk7CisrfQorKworK3N0YXRpYyBpbnQKKytfZGV2aWNlX29wZW4gKFBlZERldmljZSogZGV2LCBpbnQgZmxhZ3MpCisreworICAgICAgICAgTGludXhTcGVjaWZpYyogIGFyY2hfc3BlY2lmaWMgPSBMSU5VWF9TUEVDSUZJQyAoZGV2KTsKKyAKKyByZXRyeToKKy0gICAgICAgIGFyY2hfc3BlY2lmaWMtPmZkID0gb3BlbiAoZGV2LT5wYXRoLCBSV19NT0RFKTsKKysgICAgICAgIGFyY2hfc3BlY2lmaWMtPmZkID0gb3BlbiAoZGV2LT5wYXRoLCBmbGFncyk7CisgCisgICAgICAgICBpZiAoYXJjaF9zcGVjaWZpYy0+ZmQgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgY2hhciogICByd19lcnJvcl9tc2cgPSBzdHJlcnJvciAoZXJybm8pOworQEAgLTE2OTcsNiArMTcxNCwxNSBAQCBsaW51eF9yZWZyZXNoX2Nsb3NlIChQZWREZXZpY2UqIGRldikKKyAgICAgICAgIHJldHVybiAxOworIH0KKyAKKytzdGF0aWMgaW50CisrX2RldmljZV9jbG9zZSAoUGVkRGV2aWNlKiBkZXYpCisreworKyAgICBpbnQgcmMgPSBsaW51eF9jbG9zZSAoZGV2KTsKKysgICAgaWYgKGRldi0+b3Blbl9jb3VudCA+IDApCisrICAgICAgICBkZXYtPm9wZW5fY291bnQtLTsKKysgICAgcmV0dXJuIHJjOworK30KKysKKyAjaWYgU0laRU9GX09GRl9UIDwgOAorIAorICNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApCistLSAKKzIuMTEuMAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9wYXJ0ZWRfMy4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvcGFydGVkXzMuMi5iYgppbmRleCA5Y2UyZGZlLi5hYjMwMTA4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9wYXJ0ZWRfMy4yLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL3BhcnRlZF8zLjIuYmIKQEAgLTE0LDE2ICsxNCwxNyBAQAogICAgICAgICAgICBmaWxlOi8vMDAwMS1JbmNsdWRlLWZjbnRsLmgtaW4tcGxhdGZvcm1fZGVmcy5oLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMi1saWJwYXJ0ZWRfZnNfcmVzaXplLWxpbmstYWdhaW5zdC1saWJ1dWlkLWV4cGxpY2l0bHktLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtTW92ZS1weXRob24taGVscGVyLXNjcmlwdHMtdXNlZC1vbmx5LWluLXRlc3RzLXRvLVB5dC5wYXRjaCBcCiAJICAgZmlsZTovL3BhcnRlZC0zLjItc3lzbWFjcm9zLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCiAgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZSBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWxpYnBhcnRlZC1Vc2UtcmVhZC1vbmx5LXdoZW4tcHJvYmluZy1kZXZpY2VzLW9uLWxpbnUucGF0Y2ggXAogIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiMDI0N2I2YTdiMzE0ZjhlZGViNjE4MTU5ZmE5NWY5Y2IiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODU4YjU4OWMyMjI5N2NhY2RmNDM3ZjNiYWZmNmYwNGIzMzMwODc1MjFhYjI3NGY3YWI2NzdjYjhjNmJiNzhlNCIKIAogRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1kZXZpY2UtbWFwcGVyIgotTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1saWNvbnYgIgogCiBpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCB0ZXhpbmZvIHB0ZXN0CiAKQEAgLTQ2LDQgKzQ3LDQgQEAKIAlzZWQgLWUgJ3N8IC4uL3BhcnRlZHx8JyAtaSAkdC90ZXN0cy8qLnNoCiB9CiAKLVJERVBFTkRTXyR7UE59LXB0ZXN0ID0gImJhc2ggY29yZXV0aWxzIHBlcmwgdXRpbC1saW51eC1sb3NldHVwIHB5dGhvbiIKK1JERVBFTkRTXyR7UE59LXB0ZXN0ID0gImJhc2ggY29yZXV0aWxzIHBlcmwgdXRpbC1saW51eC1sb3NldHVwIHB5dGhvbjMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXgvMDAwMS1BZGQtYS1jb21tZW50LWZvci1mYWxsdGhyb3VnaC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGF4L3BheC8wMDAxLUFkZC1hLWNvbW1lbnQtZm9yLWZhbGx0aHJvdWdoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NmY4NWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXgvMDAwMS1BZGQtYS1jb21tZW50LWZvci1mYWxsdGhyb3VnaC5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIGU2N2JiM2RlYmU1ODJmMGU3Nzc3MGI3MTRiZDAxMmJiMTA4MmZjNDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOSBBcHIgMjAxNyAxMTozMjowMCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBBZGQgYSBjb21tZW50IGZvciBmYWxsdGhyb3VnaAorCitGaXhlcyB3YXJuaW5ncyB3aXRoIGdjYzcgZS5nLgorCisuLi8uLi8uLi8uLi8uLi8uLi8uLi93b3Jrc3BhY2Uvc291cmNlcy9wYXgvc3JjL29wdGlvbnMuYzogSW4gZnVuY3Rpb24gJ3Rhcl9vcHRpb25zJzoKKy4uLy4uLy4uLy4uLy4uLy4uLy4uL3dvcmtzcGFjZS9zb3VyY2VzL3BheC9zcmMvb3B0aW9ucy5jOjcyNTo3OiBlcnJvcjogdGhpcyBzdGF0ZW1lbnQgbWF5IGZhbGwgdGhyb3VnaCBbLVdlcnJvcj1pbXBsaWNpdC1mYWxsdGhyb3VnaD1dCisgICAgaWYgKG9wdF9hZGQgKCJ3cml0ZV9vcHQ9bm9kaXIiKSA8IDApCisgICAgICAgXgorLi4vLi4vLi4vLi4vLi4vLi4vLi4vd29ya3NwYWNlL3NvdXJjZXMvcGF4L3NyYy9vcHRpb25zLmM6NzMwOjI6IG5vdGU6IGhlcmUKKyAgY2FzZSAnTyc6CisgIF5+fn4KK2NjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL29wdGlvbnMuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvc3JjL29wdGlvbnMuYyBiL3NyYy9vcHRpb25zLmMKK2luZGV4IGM2NjNiNGUuLmI4MDgxOWEgMTAwNjQ0CistLS0gYS9zcmMvb3B0aW9ucy5jCisrKysgYi9zcmMvb3B0aW9ucy5jCitAQCAtNzI0LDYgKzcyNCw3IEBAIHRhcl9vcHRpb25zIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCWNhc2UgJ28nOgorIAkgIGlmIChvcHRfYWRkICgid3JpdGVfb3B0PW5vZGlyIikgPCAwKQorIAkgICAgdGFyX3VzYWdlICgpOworKwkgIC8qIGZhbGx0aHJ1ICovCisgCWNhc2UgJ08nOgorIAkgIE9mbGFnID0gMTsKKyAJICBicmVhazsKKy0tIAorMi4xMi4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGF4L3BheF8zLjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXhfMy40LmJiCmluZGV4IDliNGUxN2IuLjZkZjlhODEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGF4L3BheF8zLjQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXgvcGF4XzMuNC5iYgpAQCAtMTUsMTAgKzE1LDExIEBACiBERVBFTkRTX2FwcGVuZF9saWJjLW11c2wgPSAiIGZ0cyAiCiAKIFNSQ19VUkkgPSAiaHR0cDovL3BrZ3MuZmVkb3JhcHJvamVjdC5vcmcvcmVwby9wa2dzLyR7QlBOfS8ke0JQfS50YXIuYnoyL2ZiZDkwMjNiNTkwYjQ1YWMzYWRlOTU4NzA3MDJhMGQ2LyR7QlB9LnRhci5iejIgXAotCWZpbGU6Ly9maXhfZm9yX2NvbXBpbGVfd2l0aF9nY2MtNC42LjAucGF0Y2ggXAotCWZpbGU6Ly9wYXgtMy40X2ZpeF9mb3JfeDMyLnBhdGNoIFwKLSAgICAgICAgZmlsZTovLzAwMDEtaW5jbHVkZS1zeXMtc3lzbWFjcm9zLmgtZm9yLW1ham9yLW1pbm9yLWRlZmluaXRpb25zLnBhdGNoIFwKLSIKKyAgICAgICAgICAgZmlsZTovL2ZpeF9mb3JfY29tcGlsZV93aXRoX2djYy00LjYuMC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wYXgtMy40X2ZpeF9mb3JfeDMyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaW5jbHVkZS1zeXMtc3lzbWFjcm9zLmgtZm9yLW1ham9yLW1pbm9yLWRlZmluaXRpb25zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtQWRkLWEtY29tbWVudC1mb3ItZmFsbHRocm91Z2gucGF0Y2ggXAorICAgICAgICAgICAiCiAKIFNSQ19VUklfYXBwZW5kX2xpYmMtbXVzbCA9ICIgZmlsZTovLzAwMDEtRml4LWJ1aWxkLXdpdGgtbXVzbC5wYXRjaCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXVzZS1zdHJ0b2xsLWluc3RlYWQtb2Ytc3RydG9xLnBhdGNoIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ0aW1lZGF0ZS1wZXJsXzIuMzAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGlidGltZWRhdGUtcGVybF8yLjMwLmJiCmluZGV4IGM4ZmNkZTQuLjQyNzYxM2MgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ0aW1lZGF0ZS1wZXJsXzIuMzAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnRpbWVkYXRlLXBlcmxfMi4zMC5iYgpAQCAtMSw0ICsxLDUgQEAKIFNVTU1BUlkgPSAiUGVybCBtb2R1bGVzIHVzZWZ1bCBmb3IgbWFuaXB1bGF0aW5nIGRhdGUgYW5kIHRpbWUgaW5mb3JtYXRpb24iCitIT01FUEFHRSA9ICJodHRwczovL21ldGFjcGFuLm9yZy9yZWxlYXNlL1RpbWVEYXRlIgogU0VDVElPTiA9ICJsaWJzIgogIyBZb3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIFBlcmwgaXRzZWxmLgogTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ4bWwtbmFtZXNwYWNlc3VwcG9ydC1wZXJsXzEuMTEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGlieG1sLW5hbWVzcGFjZXN1cHBvcnQtcGVybF8xLjExLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTllNzEwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ4bWwtbmFtZXNwYWNlc3VwcG9ydC1wZXJsXzEuMTEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1TVU1NQVJZID0gIlBlcmwgbW9kdWxlIGZvciBzdXBwb3J0aW5nIHNpbXBsZSBnZW5lcmljIG5hbWVzcGFjZXMiCi1ERVNDUklQVElPTiA9ICJYTUw6Ok5hbWVzcGFjZVN1cHBvcnQgb2ZmZXJzIGEgc2ltcGxlIHdheSB0byBwcm9jZXNzIG5hbWVzcGFjZS1iYXNlZCBYTUwgbmFtZXMuIFwKLSAgICAgICAgICAgICAgICBJdCBhbHNvIGhlbHBzIG1haW50YWluIGEgcHJlZml4LXRvLW5hbWVzcGFjZSBVUkkgbWFwLCBhbmQgcHJvdmlkZXMgYSBudW1iZXIgb2YgXAotICAgICAgICAgICAgICAgIGJhc2ljIGNoZWNrcy4gIgotCi1TRUNUSU9OID0gImxpYnMiCi1MSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgotUFIgPSAicjMiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL01FVEEueW1sO2JlZ2lubGluZT0yMjtlbmRsaW5lPTIyO21kNT0zYjJiNTY0ZGFlOGI5YWY5ZTg4OTZlODVjMDdkY2JlNSIKLQotU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9QL1BFL1BFUklHUklOL1hNTC1OYW1lc3BhY2VTdXBwb3J0LSR7UFZ9LnRhci5neiIKLVNSQ19VUklbbWQ1c3VtXSA9ICIyMjJjY2E3NjE2MWNkOTU2ZDcyNDI4NmQzNmI2MDdkYSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI2ZDgxNTFmMGEzZjEwMjMxM2Q3NmI2NGJmZDFjMmQ5ZWQ0NmJmZTYzYTE2ZjAzOGU3ZDg2MGZkYTI4N2I3NGVhIgotCi0KLVMgPSAiJHtXT1JLRElSfS9YTUwtTmFtZXNwYWNlU3VwcG9ydC0ke1BWfSIKLQotaW5oZXJpdCBjcGFuCi0KLUJCQ0xBU1NFWFRFTkQ9Im5hdGl2ZSIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1uYW1lc3BhY2VzdXBwb3J0LXBlcmxfMS4xMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ4bWwtbmFtZXNwYWNlc3VwcG9ydC1wZXJsXzEuMTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ5OGEyOAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ4bWwtbmFtZXNwYWNlc3VwcG9ydC1wZXJsXzEuMTIuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJQZXJsIG1vZHVsZSBmb3Igc3VwcG9ydGluZyBzaW1wbGUgZ2VuZXJpYyBuYW1lc3BhY2VzIgorSE9NRVBBR0UgPSAiaHR0cDovL3ZlaWxsYXJkLmNvbS9YTUwvIgorREVTQ1JJUFRJT04gPSAiWE1MOjpOYW1lc3BhY2VTdXBwb3J0IG9mZmVycyBhIHNpbXBsZSB3YXkgdG8gcHJvY2VzcyBuYW1lc3BhY2UtYmFzZWQgWE1MIG5hbWVzLiBcCisgICAgICAgICAgICAgICAgSXQgYWxzbyBoZWxwcyBtYWludGFpbiBhIHByZWZpeC10by1uYW1lc3BhY2UgVVJJIG1hcCwgYW5kIHByb3ZpZGVzIGEgbnVtYmVyIG9mIFwKKyAgICAgICAgICAgICAgICBiYXNpYyBjaGVja3MuICIKKworU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKK1BSID0gInIzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9NRVRBLnltbDtiZWdpbmxpbmU9MjI7ZW5kbGluZT0yMjttZDU9OWNhMWE0YTk0MTQ5NmU3ZmVlZGFjNzJjNGZiOGIxMzciCisKK1NSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvUC9QRS9QRVJJR1JJTi9YTUwtTmFtZXNwYWNlU3VwcG9ydC0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiYTg5MTZjNmQwOTViY2YwNzNlMTEwOGFmMDJlNzhjOTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDdlOTk1ODU5ZjhkZDA0MTNhYTNmMjJkMzUwYzRhNjJkYTY1MmU4NTQyNjdhYTA1ODZhZTU0NGFlMmJhZTVlZiIKKworCitTID0gIiR7V09SS0RJUn0vWE1MLU5hbWVzcGFjZVN1cHBvcnQtJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitCQkNMQVNTRVhURU5EPSJuYXRpdmUiCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ4bWwtc2F4LWJhc2UtcGVybF8xLjA4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1zYXgtYmFzZS1wZXJsXzEuMDguYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YTMzNzAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1zYXgtYmFzZS1wZXJsXzEuMDguYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1TVU1NQVJZID0gIkJhc2UgY2xhc3MgU0FYIERyaXZlcnMgYW5kIEZpbHRlcnMiCi1ERVNDUklQVElPTiA9ICJUaGlzIG1vZHVsZSBoYXMgYSB2ZXJ5IHNpbXBsZSB0YXNrIC0gdG8gYmUgYSBiYXNlIGNsYXNzIGZvciBcCi1QZXJsU0FYIGRyaXZlcnMgYW5kIGZpbHRlcnMuIEl0J3MgZGVmYXVsdCBiZWhhdmlvdXIgaXMgdG8gcGFzcyBcCi10aGUgaW5wdXQgZGlyZWN0bHkgdG8gdGhlIG91dHB1dCB1bmNoYW5nZWQuIEl0IGNhbiBiZSB1c2VmdWwgdG8gXAotdXNlIHRoaXMgbW9kdWxlIGFzIGEgYmFzZSBjbGFzcyBzbyB5b3UgZG9uJ3QgaGF2ZSB0bywgZm9yIGV4YW1wbGUsIFwKLWltcGxlbWVudCB0aGUgY2hhcmFjdGVycygpIGNhbGxiYWNrLiIKLQotU0VDVElPTiA9ICJsaWJzIgotTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKLVJERVBFTkRTXyR7UE59ICs9ICJwZXJsLW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2Rpc3QuaW5pO2VuZGxpbmU9NTttZDU9OGY5YzlhNTUzNDBhZWZhZWU2ZTk3MDRjODg0NjY0NDYiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvRy9HUi9HUkFOVE0vWE1MLVNBWC1CYXNlLSR7UFZ9LnRhci5neiIKLQotU1JDX1VSSVttZDVzdW1dID0gIjM4YzhjMzI0N2RmZDA4MDcxMjU5NjExOGQ3MGRiZTMyIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY2NjI3MDMxOGIxNWY4OGI4NDI3ZTU4NTE5OGFiYmMxOWJjMmU2Y2NiMzZkYzRjMGE0ZjJkOTgwNzMzMDIxOWUiCi0KLVMgPSAiJHtXT1JLRElSfS9YTUwtU0FYLUJhc2UtJHtQVn0iCi0KLWluaGVyaXQgY3BhbgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ4bWwtc2F4LWJhc2UtcGVybF8xLjA5LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1zYXgtYmFzZS1wZXJsXzEuMDkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzYTU4MAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ4bWwtc2F4LWJhc2UtcGVybF8xLjA5LmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiQmFzZSBjbGFzcyBTQVggRHJpdmVycyBhbmQgRmlsdGVycyIKK0hPTUVQQUdFID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvZGlzdC9YTUwtU0FYLUJhc2UvIgorREVTQ1JJUFRJT04gPSAiVGhpcyBtb2R1bGUgaGFzIGEgdmVyeSBzaW1wbGUgdGFzayAtIHRvIGJlIGEgYmFzZSBjbGFzcyBmb3IgXAorUGVybFNBWCBkcml2ZXJzIGFuZCBmaWx0ZXJzLiBJdCdzIGRlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIHBhc3MgXAordGhlIGlucHV0IGRpcmVjdGx5IHRvIHRoZSBvdXRwdXQgdW5jaGFuZ2VkLiBJdCBjYW4gYmUgdXNlZnVsIHRvIFwKK3VzZSB0aGlzIG1vZHVsZSBhcyBhIGJhc2UgY2xhc3Mgc28geW91IGRvbid0IGhhdmUgdG8sIGZvciBleGFtcGxlLCBcCitpbXBsZW1lbnQgdGhlIGNoYXJhY3RlcnMoKSBjYWxsYmFjay4iCisKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCitSREVQRU5EU18ke1BOfSArPSAicGVybC1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kaXN0LmluaTtlbmRsaW5lPTU7bWQ1PThmOWM5YTU1MzQwYWVmYWVlNmU5NzA0Yzg4NDY2NDQ2IgorCitTUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL0cvR1IvR1JBTlRNL1hNTC1TQVgtQmFzZS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlYzM0N2ExNDA2NWRkN2FlYzdkOWZiMTgxYjJkNzk0NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2NmNiMzU1YmE0ZWY0N2MxMGNhNzM4YmQzNTk5OTcyMzY0NDM4NmFjODUzYWJiZWI1MTMyODQxZjVlOGEyYWQwIgorCitTID0gIiR7V09SS0RJUn0vWE1MLVNBWC1CYXNlLSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGlieG1sLXNheC1wZXJsXzAuOTkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGlieG1sLXNheC1wZXJsXzAuOTkuYmIKaW5kZXggNDVkMzk2Ni4uYWQzMWI5YyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1zYXgtcGVybF8wLjk5LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ4bWwtc2F4LXBlcmxfMC45OS5iYgpAQCAtMSw0ICsxLDUgQEAKIFNVTU1BUlkgPSAiUGVybCBtb2R1bGUgZm9yIHVzaW5nIGFuZCBidWlsZGluZyBQZXJsIFNBWDIgWE1MIHByb2Nlc3NvcnMiCitIT01FUEFHRSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL2Rpc3QvWE1MLVNBWC8iCiBERVNDUklQVElPTiA9ICJYTUw6OlNBWCBjb25zaXN0cyBvZiBzZXZlcmFsIGZyYW1ld29yayBjbGFzc2VzIGZvciB1c2luZyBhbmQgXAogYnVpbGRpbmcgUGVybCBTQVgyIFhNTCBwYXJzZXJzLCBmaWx0ZXJzLCBhbmQgZHJpdmVycy4gIEl0IGlzIGRlc2lnbmVkIFwgCiBhcm91bmQgdGhlIG5lZWQgdG8gYmUgYWJsZSB0byAicGx1ZyBpbiIgZGlmZmVyZW50IFNBWCBwYXJzZXJzIHRvIGFuIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL3BzbWlzYy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9wc21pc2MuaW5jCmluZGV4IDIyYjJlODUuLjY2YTc4NGIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL3BzbWlzYy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wc21pc2MvcHNtaXNjLmluYwpAQCAtMSw0ICsxLDUgQEAKIFNVTU1BUlkgPSAiVXRpbGl0aWVzIGZvciBtYW5hZ2luZyBwcm9jZXNzZXMgb24geW91ciBzeXN0ZW0iCitIT01FUEFHRSA9ICJodHRwOi8vcHNtaXNjLnNmLm5ldC8iCiBERVNDUklQVElPTiA9ICJUaGUgcHNtaXNjIHBhY2thZ2UgY29udGFpbnMgdXRpbGl0aWVzIGZvciBtYW5hZ2luZyBwcm9jZXNzZXMgb24geW91ciBcCiBzeXN0ZW06IHBzdHJlZSwga2lsbGFsbCBhbmQgZnVzZXIuICBUaGUgcHN0cmVlIGNvbW1hbmQgZGlzcGxheXMgYSB0cmVlIFwKIHN0cnVjdHVyZSBvZiBhbGwgb2YgdGhlIHJ1bm5pbmcgcHJvY2Vzc2VzIG9uIHlvdXIgc3lzdGVtLiAgVGhlIGtpbGxhbGwgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvbXVzbC1zdW5ycGMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9tdXNsLXN1bnJwYy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZiYzYzNi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9tdXNsLXN1bnJwYy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLVRoZSBtdXNsIGltcGxlbWVudGF0aW9uIG9mIGdldGFkZHJpbmZvIGFuZCBnZXRzZXJ2YnluYW1lIGRvZXMgbm90Ci1hbGlhc2VzLiBBcyBhIHdvcmthcm91bmQgd2UgdXNlICJzdW5wcmMiIGluc3RlYWQgb2YgInBvcnRtYXBwZXIiCi0KLXBvcnRlZCBmcm9tIGFscGluZSBsaW51eAotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLUluZGV4OiBycGNiaW5kLTAuMi4yL3NyYy9ycGNiaW5kLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBycGNiaW5kLTAuMi4yLm9yaWcvc3JjL3JwY2JpbmQuYwotKysrIHJwY2JpbmQtMC4yLjIvc3JjL3JwY2JpbmQuYwotQEAgLTQ5MSw3ICs0OTEsNyBAQCBpbml0X3RyYW5zcG9ydChzdHJ1Y3QgbmV0Y29uZmlnICpuY29uZikKLSAJCQlpZiAoKGFpY29kZSA9IGdldGFkZHJpbmZvKGhvc3RzW25ob3N0c2Jha10sCi0gCQkJICAgIHNlcnZuYW1lLCAmaGludHMsICZyZXMpKSAhPSAwKSB7Ci0gCQkJICBpZiAoKGFpY29kZSA9IGdldGFkZHJpbmZvKGhvc3RzW25ob3N0c2Jha10sCi0tCQkJCQkJICAgICJwb3J0bWFwcGVyIiwgJmhpbnRzLCAmcmVzKSkgIT0gMCkgewotKwkJCQkJCSAgICAic3VucnBjIiwgJmhpbnRzLCAmcmVzKSkgIT0gMCkgewotIAkJCQlzeXNsb2coTE9HX0VSUiwKLSAJCQkJICAgICJjYW5ub3QgZ2V0IGxvY2FsIGFkZHJlc3MgZm9yICVzOiAlcyIsCi0gCQkJCSAgICBuY29uZi0+bmNfbmV0aWQsIGdhaV9zdHJlcnJvcihhaWNvZGUpKTsKLUBAIC01NjQsNyArNTY0LDcgQEAgaW5pdF90cmFuc3BvcnQoc3RydWN0IG5ldGNvbmZpZyAqbmNvbmYpCi0gCQlpZiAoKHN0cmNtcChuY29uZi0+bmNfbmV0aWQsICJsb2NhbCIpICE9IDApICYmCi0gCQkgICAgKHN0cmNtcChuY29uZi0+bmNfbmV0aWQsICJ1bml4IikgIT0gMCkpIHsKLSAJCQlpZiAoKGFpY29kZSA9IGdldGFkZHJpbmZvKE5VTEwsIHNlcnZuYW1lLCAmaGludHMsICZyZXMpKSE9IDApIHsKLS0JCQkgIGlmICgoYWljb2RlID0gZ2V0YWRkcmluZm8oTlVMTCwgInBvcnRtYXBwZXIiLCAmaGludHMsICZyZXMpKSE9IDApIHsKLSsJCQkgIGlmICgoYWljb2RlID0gZ2V0YWRkcmluZm8oTlVMTCwgInN1bnJwYyIsICZoaW50cywgJnJlcykpIT0gMCkgewotIAkJCSAgcHJpbnRmKCJjYW5ub3QgZ2V0IGxvY2FsIGFkZHJlc3MgZm9yICVzOiAlcyIsICBuY29uZi0+bmNfbmV0aWQsIGdhaV9zdHJlcnJvcihhaWNvZGUpKTsKLSAJCQkgIHN5c2xvZyhMT0dfRVJSLAotIAkJCQkgICAgImNhbm5vdCBnZXQgbG9jYWwgYWRkcmVzcyBmb3IgJXM6ICVzIiwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JlbW92ZS1zeXMtcXVldWUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9yZW1vdmUtc3lzLXF1ZXVlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGZjOTc0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JlbW92ZS1zeXMtcXVldWUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1tdXNsIGRvZXMgbm90IHByb3ZpZGUgdGhpcyBoZWFkZXIgYW5kIGhlcmUgaXMgcmVhc29uaW5nCi1odHRwOi8vd2lraS5tdXNsLWxpYmMub3JnL3dpa2kvRkFRI1E6X3doeV9pc19zeXMuMkZxdWV1ZS5oX25vdF9pbmNsdWRlZF8uM0YKLQotU28gaW5jbHVkZSBpdCBvbmx5IHdoZW4gX19HTElCQ19fIGlzIGRlZmluZWQgd2hpY2ggaXMgdHJ1ZSBmb3IgdWNsaWJjIGFuZCBnbGliYwotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLUluZGV4OiBycGNiaW5kLTAuMi4yL3NyYy91dGlsLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBycGNiaW5kLTAuMi4yLm9yaWcvc3JjL3V0aWwuYwotKysrIHJwY2JpbmQtMC4yLjIvc3JjL3V0aWwuYwotQEAgLTQxLDcgKzQxLDkgQEAKLSAKLSAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0gI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSsjaWZkZWYgX19HTElCQ19fCi0gI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgotKyNlbmRpZgotICNpbmNsdWRlIDxuZXQvaWYuaD4KLSAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotICNpbmNsdWRlIDxpZmFkZHJzLmg+CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZF8wLjIuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kXzAuMi40LmJiCmluZGV4IDFhMTIwNTUuLjYwZTQ2ZWQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kXzAuMi40LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kXzAuMi40LmJiCkBAIC0xMiwxOSArMTIsMTEgQEAKIAogU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcnBjYmluZC9ycGNiaW5kLSR7UFZ9LnRhci5iejIgXAogICAgICAgICAgICBmaWxlOi8vaW5pdC5kIFwKLSAgICAgICAgICAgZmlsZTovL3JlbW92ZS1zeXMtcXVldWUucGF0Y2ggXAotICAgICAgICAgICAke1VDTElCQ1BBVENIRVN9IFwKLSAgICAgICAgICAgJHtNVVNMUEFUQ0hFU30gXAogICAgICAgICAgICBmaWxlOi8vcnBjYmluZC5jb25mIFwKICAgICAgICAgICAgZmlsZTovL3JwY2JpbmQuc29ja2V0IFwKICAgICAgICAgICAgZmlsZTovL3JwY2JpbmQuc2VydmljZSBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXJwY2JpbmQtcGFpci1hbGwtc3ZjX2dldGFyZ3MtY2FsbHMtd2l0aC1zdmNfZnJlZWFyZ3MucGF0Y2ggXAogICAgICAgICAgICIKLU1VU0xQQVRDSEVTX2xpYmMtbXVzbCA9ICJmaWxlOi8vbXVzbC1zdW5ycGMucGF0Y2giCi0KLVVDTElCQ1BBVENIRVMgPz0gIiIKLU1VU0xQQVRDSEVTID89ICIiCi0KIFNSQ19VUklbbWQ1c3VtXSA9ICJjZjEwY2Q0MWVkODIyOGZjNTRjMzE2MTkxYzFmMDdmZSIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICIwNzRhOWE1MzBkYzdjMTFlMGQ5MDVhYTU5YmNiMDg0N2MwMDkzMTNmMDJlOThkM2Q3OThhYTk1NjhmNDE0YzY2IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vMDAwMS1jb25maWd1cmUuYWMtZml4LWNvbmZpZ3VyZS1mYWlsZWQtd2hpbGUtYnVpbGQtZGlyLWhhLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuLzAwMDEtY29uZmlndXJlLmFjLWZpeC1jb25maWd1cmUtZmFpbGVkLXdoaWxlLWJ1aWxkLWRpci1oYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGRiMTJjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuLzAwMDEtY29uZmlndXJlLmFjLWZpeC1jb25maWd1cmUtZmFpbGVkLXdoaWxlLWJ1aWxkLWRpci1oYS5wYXRjaApAQCAtMCwwICsxLDEwOCBAQAorRnJvbSA0YjI1OGM1YTkwNzhmOGRmNjA2ODRhYjc1MzZjZTNhOGZmMjA3ZTA4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAxMiBPY3QgMjAxNyAxMDowMzo1NyArMDAwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmUuYWM6IGZpeCBjb25maWd1cmUgZmFpbGVkIHdoaWxlIGJ1aWxkIGRpciBjb250YWlucyAieWVzIgorCitXaGlsZSB0aGUgbmFtZSBvZiBidWlsZCBkaXIgY29udGFpbnMgInllcyIsIHRoZSBBQ19FR1JFUF9DUFAKK3Rlc3QgYWx3YXlzIHJldHVybiB0cnVlLgorCitXZSByYXJlbHkgdXNlICJ5ZXM7IiB0byBuYW1lIGJ1aWxkIGRpciwgc28gcy95ZXMveWVzOy9nCitjb3VsZCBmaXggdGhlIGlzc3VlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBKaWFuIEthbmcgPGppYW4ua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMjAgKysrKysrKysrKy0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDEyOTk2Y2QuLjQ3NjVhZjYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEyOCw3ICsxMjgsNyBAQCBmaQorIAorIAorIEFDX0NIRUNLSU5HKGZvciBVbHRyaXgpCistQUNfRUdSRVBfQ1BQKHllcywKKytBQ19FR1JFUF9DUFAoeWVzOywKKyBbI2lmIGRlZmluZWQodWx0cml4KSB8fCBkZWZpbmVkKF9fdWx0cml4KQorICAgIHllczsKKyAjZW5kaWYKK0BAIC0xNDUsNyArMTQ1LDcgQEAgZG5sIGdoYXppQGNhaXAucnV0Z2Vycy5lZHUgKEthdmVoIFIuIEdoYXppKToKKyBkbmwgQkJOIGJ1dHRlcmZseSBpcyBub3QgUE9TSVgsIGJ1dCBhIE1BQ0ggQlNEIHN5c3RlbS4KKyBkbmwgRG8gbm90IGRlZmluZSBQT1NJWCBhbmQgVEVSTUlPLgorIEFDX0NIRUNLSU5HKGZvciBidXR0ZXJmbHkpCistQUNfRUdSRVBfQ1BQKHllcywKKytBQ19FR1JFUF9DUFAoeWVzOywKKyBbI2lmIGRlZmluZWQoYnV0dGVyZmx5KQorICAgeWVzOworICNlbmRpZgorQEAgLTE1Niw3ICsxNTYsNyBAQCBpZiB0ZXN0IC1uICIkVUxUUklYIjsgdGhlbgorICAgdGVzdCAteiAiJEdDQyIgJiYgQ0M9IiRDQyAtWUJTRCIKKyBmaQorIEFDX0NIRUNLSU5HKGZvciBQT1NJWC4xKQorLUFDX0VHUkVQX0NQUCh5ZXMsCisrQUNfRUdSRVBfQ1BQKHllczssCisgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgbWFpbiAoKSB7CitAQCAtMTczLDE0ICsxNzMsMTQgQEAgQUNfVFJZX0NPTVBJTEUoCisgI2luY2x1ZGUgPGZjbnRsLmg+XSwgW2ludCB4ID0gU0lHQ0hMRCB8IEZOREVMQVk7XSwgLCBBQ19ERUZJTkUoU1lTVikpCisgCisgQUNfQ0hFQ0tJTkcoZm9yIHNlcXVlbnQvcHR4KQorLUFDX0VHUkVQX0NQUCh5ZXMsCisrQUNfRUdSRVBfQ1BQKHllczssCisgWyNpZmRlZiBfU0VRVUVOVF8KKyAgIHllczsKKyAjZW5kaWYKKyBdLCBMSUJTPSIkTElCUyAtbHNvY2tldCAtbGluZXQiO3NlcXB0eD0xKQorIAorIEFDX0NIRUNLSU5HKFNWUjQpCistQUNfRUdSRVBfQ1BQKHllcywKKytBQ19FR1JFUF9DUFAoeWVzOywKKyBbbWFpbiAoKSB7CisgI2lmIGRlZmluZWQoU1ZSNCkgfHwgZGVmaW5lZChfX1NWUjQpCisgICB5ZXM7CitAQCAtMjAwLDkgKzIwMCw5IEBAIGZpCisgQUNfQ0hFQ0tfSEVBREVSUyhbc3Ryb3B0cy5oIHN0cmluZy5oIHN0cmluZ3MuaF0pCisgCisgQUNfQ0hFQ0tJTkcoZm9yIFNvbGFyaXMgMi54KQorLUFDX0VHUkVQX0NQUCh5ZXMsCisrQUNfRUdSRVBfQ1BQKHllczssCisgWyNpZiBkZWZpbmVkKFNWUjQpICYmIGRlZmluZWQoc3VuKQorLSAgeWVzCisrICB5ZXM7CisgI2VuZGlmCisgXSwgTElCUz0iJExJQlMgLWxzb2NrZXQgLWxuc2wgLWxrc3RhdCIpCisgCitAQCAtNjk3LDcgKzY5Nyw3IEBAIGVsc2UKKyBwZGlyPScvZGV2JworIGZpCisgZG5sIFNDTyB1c2VzIHB0eXAlZAorLUFDX0VHUkVQX0NQUCh5ZXMsCisrQUNfRUdSRVBfQ1BQKHllczssCisgWyNpZmRlZiBNX1VOSVgKKyAgICB5ZXM7CisgI2VuZGlmCitAQCAtODgwLDcgKzg4MCw3IEBAIGZpCisgKQorIAorIGlmIHRlc3QgLXogIiRsb2FkIiA7IHRoZW4KKy1BQ19FR1JFUF9DUFAoeWVzLAorK0FDX0VHUkVQX0NQUCh5ZXM7LAorIFsjaWYgZGVmaW5lZChOZVhUKSB8fCBkZWZpbmVkKGFwb2xsbykgfHwgZGVmaW5lZChsaW51eCkKKyAgIHllczsKKyAjZW5kaWYKK0BAIC0xMTEyLDcgKzExMTIsNyBAQCBBQ19DSEVDS0lORyhzeXNsb2cgaW4gbGliYnNkLmEpCisgQUNfVFJZX0xJTksoLCBbY2xvc2Vsb2coKTtdLCBBQ19OT1RFKC0gZm91bmQuKSwgW0xJQlM9IiRvbGRsaWJzIgorIEFDX05PVEUoLSBiYWQgbmV3czogc3lzbG9nIG1pc3NpbmcuKSBBQ19ERUZJTkUoTk9TWVNMT0cpXSldKQorIAorLUFDX0VHUkVQX0NQUCh5ZXMsCisrQUNfRUdSRVBfQ1BQKHllczssCisgWyNpZmRlZiBNX1VOSVgKKyAgICB5ZXM7CisgI2VuZGlmCistLSAKKzIuMTMuMworCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vZml4LXBhcmFsbGVsLW1ha2UucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vZml4LXBhcmFsbGVsLW1ha2UucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwY2FmNWQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL2ZpeC1wYXJhbGxlbC1tYWtlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotVGhpcyBmaXhlcyB0aGUgcGFyYWxsZWwgbWFrZSBpbnN0YWxsIGZhaWx1cmUKLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KLQotSW5kZXg6IHNjcmVlbi00LjAuMy9NYWtlZmlsZS5pbgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHNjcmVlbi00LjAuMy5vcmlnL01ha2VmaWxlLmluCi0rKysgc2NyZWVuLTQuMC4zL01ha2VmaWxlLmluCi1AQCAtNzAsNyArNzAsNyBAQCBzY3JlZW46ICQoT0ZJTEVTKQotIC5jLm86Ci0gCSQoQ0MpIC1jIC1JLiAtSSQoc3JjZGlyKSAkKE1fQ0ZMQUdTKSAkKERFRlMpICQoT1BUSU9OUykgJChDRkxBR1MpICQ8Ci0gCi0taW5zdGFsbF9iaW46IC52ZXJzaW9uIHNjcmVlbgotK2luc3RhbGxfYmluOiAudmVyc2lvbiBzY3JlZW4gaW5zdGFsbGRpcnMKLSAJLWlmIFsgLWYgJChERVNURElSKSQoYmluZGlyKS8kKFNDUkVFTikgXSAmJiBbICEgLWYgJChERVNURElSKSQoYmluZGlyKS8kKFNDUkVFTikub2xkIF07IFwKLSAJCXRoZW4gbXYgJChERVNURElSKSQoYmluZGlyKS8kKFNDUkVFTikgJChERVNURElSKSQoYmluZGlyKS8kKFNDUkVFTikub2xkOyBmaQotIAkkKElOU1RBTExfUFJPR1JBTSkgc2NyZWVuICQoREVTVERJUikkKGJpbmRpcikvJChTQ1JFRU4pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW5fNC41LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW5fNC41LjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyYzFhNWEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuXzQuNS4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotU1VNTUFSWSA9ICJNdWx0aXBsZXhpbmcgdGVybWluYWwgbWFuYWdlciIKLURFU0NSSVBUSU9OID0gIlNjcmVlbiBpcyBhIGZ1bGwtc2NyZWVuIHdpbmRvdyBtYW5hZ2VyIFwKLXRoYXQgbXVsdGlwbGV4ZXMgYSBwaHlzaWNhbCB0ZXJtaW5hbCBiZXR3ZWVuIHNldmVyYWwgXAotcHJvY2Vzc2VzLCB0eXBpY2FsbHkgaW50ZXJhY3RpdmUgc2hlbGxzLiIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9zY3JlZW4vIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL3NhdmFubmFoLmdudS5vcmcvYnVncy8/ZnVuYz1hZGRpdGVtJmdyb3VwPXNjcmVlbiIKLQotU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgotCi1MSUNFTlNFID0gIkdQTHYzKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NjcmVlbi5oO2VuZGxpbmU9MjY7bWQ1PTM5NzExNDI5ODkyODlhODE5OGE1NDQyMjA3MDNjMmJmIgotCi1ERVBFTkRTID0gIm5jdXJzZXMgXAotICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2xpYnBhbScsICcnLCBkKX0iCi1SREVQRU5EU18ke1BOfSA9ICJiYXNlLWZpbGVzIgotCi1TUkNfVVJJID0gIiR7R05VX01JUlJPUn0vc2NyZWVuL3NjcmVlbi0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vZml4LXBhcmFsbGVsLW1ha2UucGF0Y2ggXAotICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdmaWxlOi8vc2NyZWVuLnBhbScsICcnLCBkKX0gXAotICAgICAgICAgICBmaWxlOi8vUmVtb3ZlLXJlZHVuZGFudC1jb21waWxlci1zYW5pdHktY2hlY2tzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL1Byb3ZpZGUtY3Jvc3MtY29tcGlsZS1hbHRlcm5hdGl2ZXMtZm9yLUFDX1RSWV9SVU4ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vU2tpcC1ob3N0LWZpbGUtc3lzdGVtLWNoZWNrcy13aGVuLWNyb3NzLWNvbXBpbGluZy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9Bdm9pZC1taXMtaWRlbnRpZnlpbmctc3lzdGVtcy1hcy1TVlI0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDItY29tbS5oLW5vdy1kZXBlbmRzLW9uLXRlcm0uaC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC1mb3ItbXVsdGlqb2ItYnVpbGQucGF0Y2ggXAotICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gImE4YzVkYTJmNDJmOGExOGZhNGRhZGEyNDE5ZDE1NDliIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk3ZGIyMTE0ZGQ5NjNiMDE2Y2Q0ZGVkMzQ4MzE5NTVkY2JlMzI1MWU1ZWVlNDVhYzI2MDZlNjdlOWYwOTdiMmQiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KLQotUEFDS0FHRUNPTkZJRyA/Pz0gIiIKLVBBQ0tBR0VDT05GSUdbdXRlbXB0ZXJdID0gImFjX2N2X2hlYWRlcl91dGVtcHRlcl9oPXllcyxhY19jdl9oZWFkZXJfdXRlbXB0ZXJfaD1ubyxsaWJ1dGVtcHRlciwiCi0KLUVYVFJBX09FQ09ORiA9ICItLXdpdGgtcHR5LW1vZGU9MDYyMCAtLXdpdGgtcHR5LWdyb3VwPTUgXAotICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnLS1lbmFibGUtcGFtJywgJy0tZGlzYWJsZS1wYW0nLCBkKX0iCi0KLWRvX2luc3RhbGxfYXBwZW5kICgpIHsKLQlpZiBbICIke0BiYi51dGlscy5maWx0ZXIoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCBkKX0iIF07IHRoZW4KLQkJaW5zdGFsbCAtRCAtbSA2NDQgJHtXT1JLRElSfS9zY3JlZW4ucGFtICR7RH0vJHtzeXNjb25mZGlyfS9wYW0uZC9zY3JlZW4KLQlmaQotfQotCi1wa2dfcG9zdGluc3RfJHtQTn0gKCkgewotCWdyZXAgLXEgIl4ke2JpbmRpcn0vc2NyZWVuJCIgJEQke3N5c2NvbmZkaXJ9L3NoZWxscyB8fCBlY2hvICR7YmluZGlyfS9zY3JlZW4gPj4gJEQke3N5c2NvbmZkaXJ9L3NoZWxscwotfQotCi1wa2dfcG9zdHJtXyR7UE59ICgpIHsKLQlwcmludGYgIiQoZ3JlcCAtdiAiXiR7YmluZGlyfS9zY3JlZW4kIiAkRCR7c3lzY29uZmRpcn0vc2hlbGxzKVxuIiA+ICREJHtzeXNjb25mZGlyfS9zaGVsbHMKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbl80LjYuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbl80LjYuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2Q4M2EyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuXzQuNi4xLmJiCkBAIC0wLDAgKzEsNTIgQEAKK1NVTU1BUlkgPSAiTXVsdGlwbGV4aW5nIHRlcm1pbmFsIG1hbmFnZXIiCitERVNDUklQVElPTiA9ICJTY3JlZW4gaXMgYSBmdWxsLXNjcmVlbiB3aW5kb3cgbWFuYWdlciBcCit0aGF0IG11bHRpcGxleGVzIGEgcGh5c2ljYWwgdGVybWluYWwgYmV0d2VlbiBzZXZlcmFsIFwKK3Byb2Nlc3NlcywgdHlwaWNhbGx5IGludGVyYWN0aXZlIHNoZWxscy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvc2NyZWVuLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvP2Z1bmM9YWRkaXRlbSZncm91cD1zY3JlZW4iCisKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zY3JlZW4uaDtlbmRsaW5lPTI2O21kNT0zOTcxMTQyOTg5Mjg5YTgxOThhNTQ0MjIwNzAzYzJiZiIKKworREVQRU5EUyA9ICJuY3Vyc2VzIFwKKyAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdsaWJwYW0nLCAnJywgZCl9IgorUkRFUEVORFNfJHtQTn0gPSAiYmFzZS1maWxlcyIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3NjcmVlbi9zY3JlZW4tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnZmlsZTovL3NjcmVlbi5wYW0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgZmlsZTovL1JlbW92ZS1yZWR1bmRhbnQtY29tcGlsZXItc2FuaXR5LWNoZWNrcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9Qcm92aWRlLWNyb3NzLWNvbXBpbGUtYWx0ZXJuYXRpdmVzLWZvci1BQ19UUllfUlVOLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL1NraXAtaG9zdC1maWxlLXN5c3RlbS1jaGVja3Mtd2hlbi1jcm9zcy1jb21waWxpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQXZvaWQtbWlzLWlkZW50aWZ5aW5nLXN5c3RlbXMtYXMtU1ZSNC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLWNvbW0uaC1ub3ctZGVwZW5kcy1vbi10ZXJtLmgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1maXgtZm9yLW11bHRpam9iLWJ1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY29uZmlndXJlLmFjLWZpeC1jb25maWd1cmUtZmFpbGVkLXdoaWxlLWJ1aWxkLWRpci1oYS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTMyYzg5M2FhYmZhZjIwMjAwNzQ3OTAyMTVjOGNhY2QiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWJhOWFmNjZjYjYyNjE1NWQ2YWJjZTQ3MDNmNDVjY2UwZTMwYTUxMTRhMzY4YmQ2Mzg3Yzk2NmNiYmJiN2M2NCIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1t1dGVtcHRlcl0gPSAiYWNfY3ZfaGVhZGVyX3V0ZW1wdGVyX2g9eWVzLGFjX2N2X2hlYWRlcl91dGVtcHRlcl9oPW5vLGxpYnV0ZW1wdGVyLCIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1wdHktbW9kZT0wNjIwIC0td2l0aC1wdHktZ3JvdXA9NSBcCisgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICctLWVuYWJsZS1wYW0nLCAnLS1kaXNhYmxlLXBhbScsIGQpfSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWlmIFsgIiR7QGJiLnV0aWxzLmZpbHRlcignRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsIGQpfSIgXTsgdGhlbgorCQlpbnN0YWxsIC1EIC1tIDY0NCAke1dPUktESVJ9L3NjcmVlbi5wYW0gJHtEfS8ke3N5c2NvbmZkaXJ9L3BhbS5kL3NjcmVlbgorCWZpCit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJZ3JlcCAtcSAiXiR7YmluZGlyfS9zY3JlZW4kIiAkRCR7c3lzY29uZmRpcn0vc2hlbGxzIHx8IGVjaG8gJHtiaW5kaXJ9L3NjcmVlbiA+PiAkRCR7c3lzY29uZmRpcn0vc2hlbGxzCit9CisKK3BrZ19wb3N0cm1fJHtQTn0gKCkgeworCXByaW50ZiAiJChncmVwIC12ICJeJHtiaW5kaXJ9L3NjcmVlbiQiICREJHtzeXNjb25mZGlyfS9zaGVsbHMpXG4iID4gJEQke3N5c2NvbmZkaXJ9L3NoZWxscworfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkXzQuMi4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkXzQuMi4yLmJiCmluZGV4IDVhYTdkOGEuLmUzMWJlYzIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZF80LjIuMi5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWRfNC4yLjIuYmIKQEAgLTQ0LDMgKzQ0LDQgQEAKIAlvZV9ydW5tYWtlIC1DICR7VEVTVERJUn0gaW5zdGFsbC1wdGVzdCBCVUlMRERJUj0ke0J9IERFU1RESVI9JHtEfSR7UFRFU1RfUEFUSH0gVEVTVERJUj0ke1RFU1RESVJ9CiB9CiAKK1JQUk9WSURFU18ke1BOfSArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd1c3JtZXJnZScsICcvYmluL3NlZCcsICcnLCBkKX0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy8wMDAxLXNoYWRvdy1DVkUtMjAxNy0xMjQyNCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzLzAwMDEtc2hhZG93LUNWRS0yMDE3LTEyNDI0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkM2UxZTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy8wMDAxLXNoYWRvdy1DVkUtMjAxNy0xMjQyNApAQCAtMCwwICsxLDQ2IEBACitGcm9tIDk1NGUzZDJlNzExM2U5YWMwNjYzMmFlZTNjNjliOGQ4MThjYzg5NTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUb21hcyBNcmF6IDx0bXJhekBmZWRvcmFwcm9qZWN0Lm9yZz4KK0RhdGU6IEZyaSwgMzEgTWFyIDIwMTcgMTY6MjU6MDYgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IGJ1ZmZlciBvdmVyZmxvdyBpZiBOVUxMIGxpbmUgaXMgcHJlc2VudCBpbiBkYi4KKworSWYgcHRyLT5saW5lID09IE5VTEwgZm9yIGFuIGVudHJ5LCB0aGUgZmlyc3QgY3ljbGUgd2lsbCBleGl0LAorYnV0IHRoZSBzZWNvbmQgb25lIHdpbGwgaGFwcGlseSB3cml0ZSBwYXN0IGVudHJpZXMgYnVmZmVyLgorV2UgYWN0dWFsbHkgZG8gbm90IHdhbnQgdG8gZXhpdCB0aGUgZmlyc3QgY3ljbGUgcHJlbWF0dXJlbHkKK29uIHB0ci0+bGluZSA9PSBOVUxMLgorU2lnbmVkLW9mZi1ieTogVG9tYXMgTXJheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5vcmc+CisKK0NWRTogQ1ZFLTIwMTctMTI0MjQKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYi9jb21tb25pby5jIHwgOCArKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvY29tbW9uaW8uYyBiL2xpYi9jb21tb25pby5jCitpbmRleCBiMTBkYTA2Li4zMWVkYmFhIDEwMDY0NAorLS0tIGEvbGliL2NvbW1vbmlvLmMKKysrKyBiL2xpYi9jb21tb25pby5jCitAQCAtNzUxLDE2ICs3NTEsMTYgQEAgY29tbW9uaW9fc29ydCAoc3RydWN0IGNvbW1vbmlvX2RiICpkYiwgaW50ICgqY21wKSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQorIAlmb3IgKHB0ciA9IGRiLT5oZWFkOworIAkgICAgICAgIChOVUxMICE9IHB0cikKKyAjaWYgS0VFUF9OSVNfQVRfRU5ECistCSAgICAgJiYgKE5VTEwgIT0gcHRyLT5saW5lKQorLQkgICAgICYmICggICAoJysnICE9IHB0ci0+bGluZVswXSkKKy0JICAgICAgICAgJiYgKCctJyAhPSBwdHItPmxpbmVbMF0pKQorKwkgICAgICYmICgoTlVMTCA9PSBwdHItPmxpbmUpCisrCSAgICAgICAgIHx8ICgoJysnICE9IHB0ci0+bGluZVswXSkKKysJICAgICAgICAgICAgICYmICgnLScgIT0gcHRyLT5saW5lWzBdKSkpCisgI2VuZGlmCisgCSAgICAgOworIAkgICAgIHB0ciA9IHB0ci0+bmV4dCkgeworIAkJbisrOworIAl9CisgI2lmIEtFRVBfTklTX0FUX0VORAorLQlpZiAoKE5VTEwgIT0gcHRyKSAmJiAoTlVMTCAhPSBwdHItPmxpbmUpKSB7CisrCWlmIChOVUxMICE9IHB0cikgeworIAkJbmlzID0gcHRyOworIAl9CisgI2VuZGlmCistLSAKKzIuMS4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvdy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3cuaW5jCmluZGV4IDcwZmY2OGUuLmNjMTg5NjQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvdy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LmluYwpAQCAtMTYsNiArMTYsNyBAQAogICAgICAgICAgICBmaWxlOi8vMDAwMS1Eby1ub3QtcmVhZC1sb2dpbi5kZWZzLWJlZm9yZS1kb2luZy1jaHJvb3QucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vY2hlY2tfc2l6ZV9vZl91aWRfdF9hbmRfZ2lkX3RfdXNpbmdfQUNfQ0hFQ0tfU0laRU9GLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtdXNlcmFkZC1jb3B5LWV4dGVuZGVkLWF0dHJpYnV0ZXMtb2YtaG9tZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXNoYWRvdy1DVkUtMjAxNy0xMjQyNCBcCiAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3BhbScsICcke1BBTV9TUkNfVVJJfScsICcnLCBkKX0gXAogICAgICAgICAgICAiCiAKQEAgLTU5LDcgKzYwLDYgQEAKIE5TQ0RPUFQgPSAiIgogTlNDRE9QVF9jbGFzcy1uYXRpdmUgPSAiLS13aXRob3V0LW5zY2QiCiBOU0NET1BUX2NsYXNzLW5hdGl2ZXNkayA9ICItLXdpdGhvdXQtbnNjZCIKLU5TQ0RPUFRfbGliYy11Y2xpYmMgPSAiIC0td2l0aG91dC1uc2NkIgogTlNDRE9QVF9saWJjLWdsaWJjID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1zcGF3bicsICctLXdpdGgtbnNjZCcsICctLXdpdGhvdXQtbnNjZCcsIGQpfSIKICAgICAgICAgICAKIFBBTV9QTFVHSU5TID0gImxpYnBhbS1ydW50aW1lIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvcnVuLXB0ZXN0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlmNDc0YQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKK21ha2UgLUMgdGVzdCBydW50ZXN0cwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy90ZXJtaW5mb19maXhlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvdGVybWluZm9fZml4ZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U2ZDE1YQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvdGVybWluZm9fZml4ZXMucGF0Y2gKQEAgLTAsMCArMSwxNDggQEAKK0RvIG5vdCB1c2UgdGhlIEpEX1RFUk1DQVAgbWFjcm8gc2luY2Ugd2UgY2Fubm90IGdldCB0aGUgdGVybWluZm8gZnJvbQorbmN1cnNlcyBwa2ctY29uZmlnLCBidXQgZml4IHRoZSBtYWNybyB0byBub3QgcmVmZXJlbmNlIGhvc3QgZGlyZWN0b3JpZXMuCitBbHNvIGFkZCBzcmMvdGVzdC9NYWtlZmlsZS5pbiBzbyB0aGF0IHdlIGNhbiB1c2UgLWx0ZXJtY2FwIGlmIHdlIHdhbnQgdG8uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBKb2UgU2xhdGVyIDxqb2Uuc2xhdGVyQHdpbmRyaXZlci5jb20+CisKKworLS0tIGEvYXV0b2NvbmYvYWNsb2NhbC5tNAorKysrIGIvYXV0b2NvbmYvYWNsb2NhbC5tNAorQEAgLTUwNiwxNCArNTA2LDEwIEBAIHRoZW4KKyBlbHNlCisgICAgTUlTQ19URVJNSU5GT19ESVJTPSIiCisgZmkKKy1KRF9UZXJtaW5mb19EaXJzPSIkTUlTQ19URVJNSU5GT19ESVJTIFwKKy0gICAgICAgICAgICAgICAgICAvdXNyL2xpYi90ZXJtaW5mbyBcCistICAgICAgICAgICAgICAgICAgL3Vzci9zaGFyZS90ZXJtaW5mbyBcCistICAgICAgICAgICAgICAgICAgL3Vzci9zaGFyZS9saWIvdGVybWluZm8gXAorLQkJICAvdXNyL2xvY2FsL2xpYi90ZXJtaW5mbyIKKysKKyBURVJNQ0FQPS1sdGVybWNhcAorIAorLWZvciB0ZXJtaW5mb19kaXIgaW4gJEpEX1Rlcm1pbmZvX0RpcnMKKytmb3IgdGVybWluZm9fZGlyIGluICRNSVNDX1RFUk1JTkZPX0RJUlMKKyBkbworICAgIGlmIHRlc3QgLWQgJHRlcm1pbmZvX2RpcgorICAgIHRoZW4KKy0tLSBhL2F1dG9jb25mL2NvbmZpZ3VyZS5hYworKysrIGIvYXV0b2NvbmYvY29uZmlndXJlLmFjCitAQCAtMjQ5LDcgKzI0OSwxNCBAQCBBQ19DSEVDS19TSVpFT0Yoc2l6ZV90KQorIEpEX0NIRUNLX0xPTkdfTE9ORworIEpEX0xBUkdFX0ZJTEVfU1VQUE9SVAorIAorLUpEX1RFUk1DQVAKKytkbmwgRG8gbm90IHVzZSBKRF9URVJNQ0FQLCBzaW5jZSB3ZSBjYW5ub3QgZ2V0IHRlcm1pbmZvIGZyb20gbmN1cnNlcyotY29uZmlnIGFueW1vcmUuCisrZG5sIFNldCBURVJNQ0FQPS1sdGVybWNhcCBhbmQgQUNfREVGSU5FKFVTRV9URVJNQ0FQLDEsW0RlZmluZSB0byB1c2UgdGVybWNhcF0pCisrZG5sIHRvIHVzZSBsaWJ0ZXJtY2FwLgorK1RFUk1DQVA9IiIKKytNSVNDX1RFUk1JTkZPX0RJUlM9IiIKKytBQ19TVUJTVChURVJNQ0FQKWRubAorK0FDX1NVQlNUKE1JU0NfVEVSTUlORk9fRElSUylkbmwKKysKKyBKRF9HQ0NfV0FSTklOR1MKKyAKKyBKRF9TRVRfT0JKX1NSQ19ESVIoc3JjKQorQEAgLTM2NCw3ICszNzEsNyBAQCBBQ19DT05GSUdfSEVBREVSKHNyYy9zeXNjb25mLmg6c3JjL2NvbmZpCisgZG5sIEFDX0NPTkZJR19TVUJESVJTKGRlbW8pCisgCisgQUNfT1VUUFVUKE1ha2VmaWxlOmF1dG9jb25mL01ha2VmaWxlLmluIFwKKy0gIHNyYy9NYWtlZmlsZSBzbHNoL01ha2VmaWxlIG1vZHVsZXMvTWFrZWZpbGUgZGVtby9NYWtlZmlsZSBcCisrICBzcmMvTWFrZWZpbGUgc3JjL3Rlc3QvTWFrZWZpbGUgc2xzaC9NYWtlZmlsZSBtb2R1bGVzL01ha2VmaWxlIGRlbW8vTWFrZWZpbGUgXAorICAgc2xhbmcucGM6YXV0b2NvbmYvc2xhbmdwYy5pbiBcCisgKQorIAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL3Rlc3QvTWFrZWZpbGUuaW4KK0BAIC0wLDAgKzEsOTAgQEAKKysjIC0qLSBtYWtlIC0qLQorK1RFU1RfU0NSSVBUU19TTEMgPSBhcmd2IHN5bnRheCBzY2lyY3VpdCBlcXMgc3NjYW5mIGxvb3BzIGFyaXRoIGFycmF5IHN0cm9wcyBcCisrICBic3RyaW5nIHBhY2sgc3RkaW8gYXNzb2Mgc2VsZmxvYWQgc3RydWN0IG5zcGFjZSBwYXRoIGlmZXZhbCBhbnl0eXBlIGFycm11bHQgXAorKyAgdGltZSB1dGY4IGV4Y2VwdCBidWdzIGxpc3QgcmVnZXhwIG1ldGhvZCBkZXJlZiBuYW5pbmYgb3ZlcmZsb3cgc29ydCBcCisrICBsb25nbG9uZyBzaWduYWwgZG9sbGFyIHJlcSBkb2NmdW4gZGVidWcgcXVhbGlmIGNvbXBhcmUgYnJlYWsgbXVsdGxpbmUgXAorKyAgc3RhY2sgbWlzYyBwb3NpeGlvIHBvc2RpciBwcm9jIG1hdGgKKysKKytURVNUX1NDUklQVFNfTk9fU0xDID0gYXV0b2xvYWQgbnNwYWNlMiBwcmVwCisrCisrVEVTVF9TQ1JJUFRTID0gJChURVNUX1NDUklQVFNfU0xDKSAkKFRFU1RfU0NSSVBUU19OT19TTEMpCisrCisrVEVTVF9QR00gPSBzbHRlc3QKKytNRU1DSEVDSyA9IHZhbGdyaW5kIC0tdG9vbD1tZW1jaGVjayAtLWxlYWstY2hlY2s9eWVzIC0tbGVhay1yZXNvbHV0aW9uPW1lZCAtLW51bS1jYWxsZXJzPTIwCisrUlVOX1RFU1RfUEdNID0gLi8kKFRFU1RfUEdNKQorK1NMQU5HSU5DID0gLi4KKytTTEFOR0xJQiA9IC4uLyQoQVJDSClvYmpzCisrT1RIRVJfTElCUyA9IC1sbSBAVEVSTUNBUEAKKytPVEhFUl9DRkxBR1MgPQorKworK3J1bnRlc3RzOiAkKFRFU1RfUEdNKSBjbGVhbnRtcAorKwlAdGVzdHM9IiI7IFwKKysJZm9yIHRlc3QgaW4gJChURVNUX1NDUklQVFMpOyBcCisrCWRvIFwKKysJICAgdGVzdHM9IiQkdGVzdHMgJCR0ZXN0LnNsIjsgXAorKwlkb25lOyBcCisrCWZvciB0ZXN0IGluICQoVEVTVF9TQ1JJUFRTX1NMQyk7IFwKKysJZG8gXAorKwkgICB0ZXN0cz0iJCR0ZXN0cyAkJHRlc3Quc2xjIjsgXAorKwlkb25lOyBcCisrCU1BS0VSVU5OSU5HPTEgLi9ydW50ZXN0cy5zaCAkJHRlc3RzCisrIwlAdG91Y2ggJChURVNUX1BHTSkuYworKworK3VwZGF0ZTogJChURVNUX1BHTSkgY2xlYW50bXAKKysJQHRlc3RzPSIiOyBcCisrCWZvciBYIGluICQoVEVTVF9TQ1JJUFRTKTsgXAorKwlkbyBcCisrCSAgaWYgWyAhIC1lIGxhc3RydW4vJCRYLnNsIF0gfHwgWyAkJFguc2wgLW50IGxhc3RydW4vJCRYLnNsIF0gOyBcCisrCSAgdGhlbiBcCisrCSAgIHRlc3RzPSIkJHRlc3RzICQkWC5zbCI7IFwKKysJICBmaSBcCisrCWRvbmU7IFwKKysJZm9yIFggaW4gJChURVNUX1NDUklQVFNfU0xDKTsgXAorKwlkbyBcCisrCSAgaWYgWyAhIC1lIGxhc3RydW4vJCRYLnNsYyBdIHx8IFsgJCRYLnNsIC1udCBsYXN0cnVuLyQkWC5zbGMgXSA7IFwKKysJICB0aGVuIFwKKysJICAgdGVzdHM9IiQkdGVzdHMgJCRYLnNsYyI7IFwKKysJICBmaSBcCisrCWRvbmU7IFwKKysJaWYgdGVzdCAtbiAiJCR0ZXN0cyI7IFwKKysJdGhlbiBcCisrCSAgTUFLRVJVTk5JTkc9MSAuL3J1bnRlc3RzLnNoICQkdGVzdHM7IFwKKysJZmkKKysjCUB0b3VjaCAkKFRFU1RfUEdNKS5jCisrCisrbWVtY2hlY2tfcnVudGVzdHM6ICQoVEVTVF9QR00pIGNsZWFudG1wCisrCUBlY2hvICIiCisrCUBlY2hvICJSdW5uaW5nIHRlc3RzOiIKKysJQGVjaG8gIiIKKysJLUBmb3IgWCBpbiAkKFRFU1RfU0NSSVBUUyk7IFwKKysJZG8gXAorKwkgICAkKE1FTUNIRUNLKSAtLWxvZy1maWxlPWxvZy4kJHtYfSAkKFJVTl9URVNUX1BHTSkgJCRYLnNsOyBcCisrCSAgIGdyZXAgRVJST1IgbG9nLiQke1h9OyBncmVwICdsb3N0OiBbXjBdJyBsb2cuJCR7WH07IFwKKysJICAgJChNRU1DSEVDSykgLS1sb2ctZmlsZT1sb2cuJCR7WH1fdSAkKFJVTl9URVNUX1BHTSkgLXV0ZjggJCRYLnNsOyBcCisrCSAgIGdyZXAgRVJST1IgbG9nLiQke1h9X3U7IGdyZXAgJ2xvc3Q6IFteMF0nIGxvZy4kJHtYfV91OyBcCisrCWRvbmUKKysjCXRvdWNoICQoVEVTVF9QR00pLmMKKysKKyttZW1jaGVja19ydW50ZXN0c19zbGM6ICQoVEVTVF9QR00pIGNsZWFudG1wCisrCUBlY2hvICIiCisrCUBlY2hvICJSdW5uaW5nIHRlc3RzOiIKKysJQGVjaG8gIiIKKysJLUBmb3IgWCBpbiAkKFRFU1RfU0NSSVBUU19TTEMpOyBcCisrCWRvIFwKKysJICAgJChNRU1DSEVDSykgLS1sb2ctZmlsZT1sb2cuJCR7WH1fYyAkKFJVTl9URVNUX1BHTSkgJCRYLnNsYzsgXAorKwkgICAkKE1FTUNIRUNLKSAtLWxvZy1maWxlPWxvZy4kJHtYfV91YyAkKFJVTl9URVNUX1BHTSkgLXV0ZjggJCRYLnNsYzsgXAorKwlkb25lCisrIwl0b3VjaCAkKFRFU1RfUEdNKS5jCisrCisrbWVtY2hlY2s6IG1lbWNoZWNrX3J1bnRlc3RzIG1lbWNoZWNrX3J1bnRlc3RzX3NsYworKworKyQoVEVTVF9QR00pOiAkKFRFU1RfUEdNKS5jIGFzc29jLmMgbGlzdC5jICQoU0xBTkdMSUIpL2xpYnNsYW5nLmEKKysJJChDQykgJChDRkxBR1MpICQoT1RIRVJfQ0ZMQUdTKSAkKExERkxBR1MpICQoVEVTVF9QR00pLmMgLW8gJChURVNUX1BHTSkgLUkkKFNMQU5HSU5DKSAtTCQoU0xBTkdMSUIpIC1sc2xhbmcgJChPVEhFUl9MSUJTKQorK2NsZWFudG1wOgorKwktL2Jpbi9ybSAtcmYgdG1wZmlsZSouKiB0bXBkaXIqLioKKytjbGVhbjogY2xlYW50bXAKKysJLS9iaW4vcm0gLWYgKn4gKi5vICoubG9nIGxvZy5waWQqICouc2xjIGxvZy4qICoubG9nLSoKKytkaXN0Y2xlYW46IGNsZWFuCisrCS9iaW4vcm0gLWYgJChURVNUX1BHTSkgJChURVNUX1BHTSkuZ2NkYSAkKFRFU1RfUEdNKS5nY25vCisrLlBIT05ZOiBjbGVhbiBtZW1jaGVjayBydW50ZXN0cyBtZW1jaGVja19ydW50ZXN0c19zbGMgbWVtY2hlY2tfcnVudGVzdHMgY2xlYW50bXAKKysKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvdGVzdC1hZGQtb3V0cHV0LWluLXRoZS1mb3JtYXQtcmVzdWx0LXRlc3RuYW1lLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy90ZXN0LWFkZC1vdXRwdXQtaW4tdGhlLWZvcm1hdC1yZXN1bHQtdGVzdG5hbWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdhOWJiOAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvdGVzdC1hZGQtb3V0cHV0LWluLXRoZS1mb3JtYXQtcmVzdWx0LXRlc3RuYW1lLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gMzg2ODhlZTI3NTQ0MTVjZjJhMTkzNWRhZmI4Mjc4ODYxYjczMTVlNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFN0ZWZhbiBTdHJvZ2luIDxzc3Ryb2dpbkBjaXNjby5jb20+CitEYXRlOiBUaHUsIDIgTWFyIDIwMTcgMDA6MjY6MzEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gdGVzdDogYWRkIG91dHB1dCBpbiB0aGUgZm9ybWF0ICJyZXN1bHQ6IHRlc3RuYW1lIgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gU3Ryb2dpbiA8c3N0cm9naW5AY2lzY28uY29tPgorLS0tCisgc3JjL3Rlc3QvcnVudGVzdHMuc2ggfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcnVudGVzdHMuc2ggYi9zcmMvdGVzdC9ydW50ZXN0cy5zaAoraW5kZXggYTNlYWFkMC4uNjRmMDcwNSAxMDA3NTUKKy0tLSBhL3NyYy90ZXN0L3J1bnRlc3RzLnNoCisrKysgYi9zcmMvdGVzdC9ydW50ZXN0cy5zaAorQEAgLTM0LDggKzM0LDEwIEBAIGRvCisgICAgIHRoZW4KKyAJbl9mYWlsZWQ9YGV4cHIgJHtuX2ZhaWxlZH0gKyAxYAorIAl0ZXN0c19mYWlsZWQ9IiR0ZXN0c19mYWlsZWQgJHRlc3RmaWxlIgorKwllY2hvICJGQUlMOiAkdGVzdGZpbGUiCisgICAgIGVsc2UKKyAgICAgICAgIHRvdWNoIGxhc3RydW4vJHRlc3RmaWxlCisrCWVjaG8gIlBBU1M6ICR0ZXN0ZmlsZSIKKyAgICAgZmkKKyBkb25lCisgCistLSAKKzIuMTEuMAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nXzIuMy4xYS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmdfMi4zLjFhLmJiCmluZGV4IGM3MWQ4MDQuLjA1ODVjMTQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmdfMi4zLjFhLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmdfMi4zLjFhLmJiCkBAIC0xNyw2ICsxNyw5IEBACiBTUkNfVVJJID0gImh0dHA6Ly93d3cuamVkc29mdC5vcmcvcmVsZWFzZXMvJHtCUE59LyR7QlB9LnRhci5iejIgXAogICAgICAgICAgICBmaWxlOi8vbm8teC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9kb250LWxpbmstdG8taG9zdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90ZXN0LWFkZC1vdXRwdXQtaW4tdGhlLWZvcm1hdC1yZXN1bHQtdGVzdG5hbWUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdGVybWluZm9fZml4ZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKICAgICAgICAgICAiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICJjNTIzNTMxMzA0MmVkMGU3MWVjNzA4ZjdiODVlYzI0MSIKQEAgLTI1LDcgKzI4LDcgQEAKIFVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vd3d3LmplZHNvZnQub3JnL3JlbGVhc2VzL3NsYW5nLyIKIFBSRU1JUlJPUlNfYXBwZW5kID0gIlxuIGh0dHA6Ly93d3cuamVkc29mdC5vcmcvcmVsZWFzZXMvc2xhbmcvLiogaHR0cDovL3d3dy5qZWRzb2Z0Lm9yZy9yZWxlYXNlcy9zbGFuZy9vbGQvIFxuIgogCi1pbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwdGVzdAogQ0xFQU5CUk9LRU4gPSAiMSIKIAogRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1vbmlnIgpAQCAtNDksNiArNTIsMjcgQEAKICAgICBjZCAke0J9CiB9CiAKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJb2VfcnVubWFrZSAtQyBzcmMgc3RhdGljCisJb2VfcnVubWFrZSAtQyBzcmMvdGVzdCBzbHRlc3QKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwlta2RpciAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJZm9yIGYgaW4gTWFrZWZpbGUgc2x0ZXN0IHJ1bnRlc3RzLnNoICouc2wgKi5pbmM7IGRvCisJCWNwICR7U30vc3JjL3Rlc3QvJGYgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdC8KKwlkb25lCisJc2VkIC1lICdzL1wgXCQoVEVTVF9QR00pXC5jXCBhc3NvY1wuY1wgbGlzdFwuY1wgXCQoU0xBTkdMSUIpXC9saWJzbGFuZ1wuYS8vJyBcCisJICAgIC1lICcvXCQoQ0MpLiooVEVTVF9QR00pL2QnIFwKKwkgICAgLWkgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdC9NYWtlZmlsZQorCisJY3AgJHtTfS9zbHNoL2xpYi9yZXF1aXJlLnNsICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QvCisJc2VkIC1pICdzL1wuXC5cL1wuXC5cL3Nsc2hcL2xpYlwvcmVxdWlyZVwuc2wvcmVxdWlyZVwuc2wvJyAke0R9JHtQVEVTVF9QQVRIfS90ZXN0L3JlcS5zbAorCisJY3AgJHtTfS9kb2MvdGV4dC9zbGFuZ2Z1bi50eHQgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdC8KKwlzZWQgLWkgJ3MvXC5cLlwvXC5cLlwvZG9jXC90ZXh0XC9zbGFuZ2Z1blwudHh0L3NsYW5nZnVuXC50eHQvJyAke0R9JHtQVEVTVF9QQVRIfS90ZXN0L2RvY2Z1bi5zbAorfQorCiBGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyR7QlBOfS92Mi9tb2R1bGVzLyAke2RhdGFkaXJ9L3Nsc2gvIgogCiBQQVJBTExFTF9NQUtFID0gIiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RhdC9zdGF0XzMuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RhdC9zdGF0XzMuMy5iYgppbmRleCAwNjk3YzczLi44YWM4ZTg5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0YXQvc3RhdF8zLjMuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdGF0L3N0YXRfMy4zLmJiCkBAIC0xLDQgKzEsNSBAQAogU1VNTUFSWSA9ICJDb21tYW5kIGxpbmUgZmlsZSBzdGF0dXMgZGlzcGxheSB1dGlsaXR5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5pYmlibGlvLm9yZy9wdWIvTGludXgvdXRpbHMvZmlsZS8iCiBERVNDUklQVElPTiA9ICJEaXNwbGF5cyBhbGwgaW5mb3JtYXRpb24gYWJvdXQgYSBmaWxlIHRoYXQgdGhlIHN0YXQoKSBjYWxsIHByb3ZpZGVzIGFuZCBhbGwgaW5mb3JtYXRpb24gYWJvdXQgYSBmaWxlc3lzdGVtIHRoYXQgc3RhdGZzKCkgcHJvdmlkZXMuIgogU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgogTElDRU5TRSA9ICJHUEx2MiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RyZXNzL2ZpbGVzL3RleGluZm8ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0cmVzcy9maWxlcy90ZXhpbmZvLnBhdGNoCmluZGV4IDVhYzU5NTEuLmYyM2ExZjYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RyZXNzL2ZpbGVzL3RleGluZm8ucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdHJlc3MvZmlsZXMvdGV4aW5mby5wYXRjaApAQCAtMSwzICsxLDQgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZwogLS0tIGEvZG9jL3N0cmVzcy50ZXhpCiArKysgYi9kb2Mvc3RyZXNzLnRleGkKIEBAIC02Miw0NyArNjIsNDcgQEAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvLmluYwppbmRleCBkNDJhMDRhLi44MGVjMGFlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkby5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG8uaW5jCkBAIC00LDcgKzQsNyBAQAogQlVHVFJBQ0tFUiA9ICJodHRwOi8vd3d3LnN1ZG8ud3MvYnVncy8iCiBTRUNUSU9OID0gImFkbWluIgogTElDRU5TRSA9ICJJU0MgJiBCU0QgJiBabGliIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZG9jL0xJQ0VOU0U7bWQ1PWY2MDBhNDdjMmEyY2RkZTU4OTllNDQ5NjA3ODEwZWQxIFwKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RvYy9MSUNFTlNFO21kNT02NTJmYjQzMzRjMTNiNTExNTk3ZDc5NDBlZjhiMzMyMyBcCiAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wbHVnaW5zL3N1ZG9lcnMvcmVkYmxhY2suYztiZWdpbmxpbmU9MTtlbmRsaW5lPTQxO21kNT1jZmU0MTExMmY5NmMxOWEwNzQ5MzRkMTI4ZjQ1YzY5MyBcCiAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdXRpbC9yZWFsbG9jYXJyYXkuYztiZWdpbmxpbmU9MztlbmRsaW5lPTE2O21kNT04NWIwOTA1Yjc5NWQ0ZDU4YmYyZTAwNjM1NjQ5ZWVjNiBcCiAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdXRpbC9mbm1hdGNoLmM7YmVnaW5saW5lPTM7ZW5kbGluZT0yNzttZDU9NjdmODNlZTliZDQ1NjU1NzM5NzA4MmY4ZjFiZTBlZmQgXApAQCAtMjcsNiArMjcsMTIgQEAKIAogIyBta3NpZ25hbWUvbWtzaWdsaXN0IGFyZSB1c2VkIG9uIGJ1aWxkIGhvc3QgdG8gZ2VuZXJhdGUgc291cmNlIGZpbGVzCiBkb19jb21waWxlX3ByZXBlbmQgKCkgeworCSMgUmVtb3ZlIGJ1aWxkIGhvc3QgcmVmZXJlbmNlcyBmcm9tIHN1ZG9fdXNhZ2UuaAorCXNlZCAtaSAgXAorCSAgICAtZSAncywtLXdpdGgtbGlidG9vbC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSwsZycgXAorCSAgICAtZSAncywtLWJ1aWxkPSR7QlVJTERfU1lTfSwsZycgXAorCSAgICAtZSAncywtLWhvc3Q9JHtIT1NUX1NZU30sLGcnIFwKKwkgICAgJHtCfS9zcmMvc3Vkb191c2FnZS5oCiAJb2VfcnVubWFrZSBTU1BfQ0ZMQUdTPSIiIFNTUF9MREZMQUdTPSIiIENDPSIkQlVJTERfQ0MiIENGTEFHUz0iJEJVSUxEX0NGTEFHUyIgQ1BQRkxBR1M9IiRCVUlMRF9DUFBGTEFHUyAtSSR7U30vaW5jbHVkZSAtSSR7U30gLUkke0J9IiAgLUMgbGliL3V0aWwgbWtzaWduYW1lIG1rc2lnbGlzdAogfQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkb18xLjguMTlwMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvXzEuOC4xOXAyLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTY1OWMzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvXzEuOC4xOXAyLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotcmVxdWlyZSBzdWRvLmluYwotCi1TUkNfVVJJID0gImh0dHA6Ly9mdHAuc3Vkby53cy9zdWRvL2Rpc3Qvc3Vkby0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9TUkNfVVJJfScsICcnLCBkKX0gXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1JbmNsdWRlLXN5cy10eXBlcy5oLWZvci1pZF90LWRlZmluaXRpb24ucGF0Y2ggXAotICAgICAgICAgICAiCi0KLVBBTV9TUkNfVVJJID0gImZpbGU6Ly9zdWRvLnBhbSIKLQotU1JDX1VSSVttZDVzdW1dID0gIjMxYTYwOTBlZDFkMDk0NmZhMjJjYmExOWU4NmFhZmVmIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjIzN2UxOGU2N2MyYWQ1OWVjYWNmYTRiNzcwNzE5OGIwOWZjZjg0OTE0NjIxNTg1YTliYzY3MGRjYzMxYTUyZTAiCi0KLURFUEVORFMgKz0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdsaWJwYW0nLCAnJywgZCl9IgotUkRFUEVORFNfJHtQTn0gKz0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0tcGx1Z2luLWxpbWl0cyBwYW0tcGx1Z2luLWtleWluaXQnLCAnJywgZCl9IgotCi1FWFRSQV9PRUNPTkYgKz0gIiBcCi0gICAgICAgICAgICAgYWNfY3ZfdHlwZV9yc2l6ZV90PW5vIFwKLSAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICctLXdpdGgtcGFtJywgJy0td2l0aG91dC1wYW0nLCBkKX0gXAotICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICctLWVuYWJsZS10bXBmaWxlcy5kPSR7bGliZGlyfS90bXBmaWxlcy5kJywgJy0tZGlzYWJsZS10bXBmaWxlcy5kJywgZCl9IFwKLSAgICAgICAgICAgICAiCi0KLWRvX2luc3RhbGxfYXBwZW5kICgpIHsKLQlpZiBbICIke0BiYi51dGlscy5maWx0ZXIoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCBkKX0iIF07IHRoZW4KLQkJaW5zdGFsbCAtRCAtbSA2NDQgJHtXT1JLRElSfS9zdWRvLnBhbSAke0R9LyR7c3lzY29uZmRpcn0vcGFtLmQvc3VkbwotCWZpCi0KLQljaG1vZCA0MTExICR7RH0ke2JpbmRpcn0vc3VkbwotCWNobW9kIDA0NDAgJHtEfSR7c3lzY29uZmRpcn0vc3Vkb2VycwotCi0JIyBFeHBsaWNpdGx5IHJlbW92ZSB0aGUgJHtsb2NhbHN0YXRlZGlyfS9ydW4gZGlyZWN0b3J5IHRvIGF2b2lkIFFBIGVycm9yCi0Jcm1kaXIgLXAgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuL3N1ZG8KLX0KLQotRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS90bXBmaWxlcy5kIgotRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmV4ZWNkaXJ9LyR7QlBOfS9saWIqJHtTT0xJQlNERVZ9ICR7bGliZXhlY2Rpcn0vJHtCUE59LyoubGEgXAotICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L2xpYioke1NPTElCU0RFVn0gJHtsaWJleGVjZGlyfS8qLmxhIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG9fMS44LjIwcDIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkb18xLjguMjBwMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjI0YjNjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG9fMS44LjIwcDIuYmIKQEAgLTAsMCArMSwzNiBAQAorcmVxdWlyZSBzdWRvLmluYworCitTUkNfVVJJID0gImh0dHA6Ly9mdHAuc3Vkby53cy9zdWRvL2Rpc3Qvc3Vkby0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9TUkNfVVJJfScsICcnLCBkKX0gXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1JbmNsdWRlLXN5cy10eXBlcy5oLWZvci1pZF90LWRlZmluaXRpb24ucGF0Y2ggXAorICAgICAgICAgICAiCisKK1BBTV9TUkNfVVJJID0gImZpbGU6Ly9zdWRvLnBhbSIKKworU1JDX1VSSVttZDVzdW1dID0gIjAzZGE4ZTcxMWNhY2E2ZmQ5M2U1Nzc1MWJmYjc0YWRjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJkNDJhZTEwNTllOTM1Zjc5NWM2OWVhOTdiM2RlMDlmZTk0MTBhNThhNzRiNWQ1ZTY4MzZlYjUwNjdhNDQ1ZDkiCisKK0RFUEVORFMgKz0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdsaWJwYW0nLCAnJywgZCl9IgorUkRFUEVORFNfJHtQTn0gKz0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0tcGx1Z2luLWxpbWl0cyBwYW0tcGx1Z2luLWtleWluaXQnLCAnJywgZCl9IgorCitFWFRSQV9PRUNPTkYgKz0gIiBcCisgICAgICAgICAgICAgYWNfY3ZfdHlwZV9yc2l6ZV90PW5vIFwKKyAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICctLXdpdGgtcGFtJywgJy0td2l0aG91dC1wYW0nLCBkKX0gXAorICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICctLWVuYWJsZS10bXBmaWxlcy5kPSR7bGliZGlyfS90bXBmaWxlcy5kJywgJy0tZGlzYWJsZS10bXBmaWxlcy5kJywgZCl9IFwKKyAgICAgICAgICAgICAiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpZiBbICIke0BiYi51dGlscy5maWx0ZXIoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCBkKX0iIF07IHRoZW4KKwkJaW5zdGFsbCAtRCAtbSA2NDQgJHtXT1JLRElSfS9zdWRvLnBhbSAke0R9LyR7c3lzY29uZmRpcn0vcGFtLmQvc3VkbworCWZpCisKKwljaG1vZCA0MTExICR7RH0ke2JpbmRpcn0vc3VkbworCWNobW9kIDA0NDAgJHtEfSR7c3lzY29uZmRpcn0vc3Vkb2VycworCisJIyBFeHBsaWNpdGx5IHJlbW92ZSB0aGUgJHtsb2NhbHN0YXRlZGlyfS9ydW4gZGlyZWN0b3J5IHRvIGF2b2lkIFFBIGVycm9yCisJcm1kaXIgLXAgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuL3N1ZG8KK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS90bXBmaWxlcy5kIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmV4ZWNkaXJ9LyR7QlBOfS9saWIqJHtTT0xJQlNERVZ9ICR7bGliZXhlY2Rpcn0vJHtCUE59LyoubGEgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L2xpYioke1NPTElCU0RFVn0gJHtsaWJleGVjZGlyfS8qLmxhIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy8wMDAxLWZpeC1wcm9ibGVtcy10aGF0LWNhdXNlcy1hLXNlZ21lbnRhdGlvbi1mYXVsdC11bmRlci0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzLzAwMDEtZml4LXByb2JsZW1zLXRoYXQtY2F1c2VzLWEtc2VnbWVudGF0aW9uLWZhdWx0LXVuZGVyLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjQzMWFmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy8wMDAxLWZpeC1wcm9ibGVtcy10aGF0LWNhdXNlcy1hLXNlZ21lbnRhdGlvbi1mYXVsdC11bmRlci0ucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSBjYjcyYjNlMTcyYzIzOGI0YjVhZTU5MzVkYzZiZTU0ZjUwMzRmY2YxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMzAgSnVuIDIwMTcgMTg6MjA6MDYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIGZpeCBwcm9ibGVtcyB0aGF0IGNhdXNlcyBhIHNlZ21lbnRhdGlvbiBmYXVsdCB1bmRlciBzb21lCisgY29uZGl0aW9ucworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgWyBubyB1cHN0cmVhbSBdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBrc3ltX21vZC5jIHwgMSAtCisgMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2tzeW1fbW9kLmMgYi9rc3ltX21vZC5jCitpbmRleCA2ZTI2ZGExLi5hM2RhYTdkIDEwMDY0NAorLS0tIGEva3N5bV9tb2QuYworKysrIGIva3N5bV9tb2QuYworQEAgLTE4Niw3ICsxODYsNiBAQCBleHRlcm4gaW50IEluaXRNc3ltcygpCisgCQllbHNlCisgCQkJU3lzbG9nKExPR19FUlIsICJFcnJvciBsb2FkaW5nIGtlcm5lbCBzeW1ib2xzICIgXAorIAkJCSAgICAgICAiLSAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKy0JCWZjbG9zZShrc3ltcyk7CisgCQlyZXR1cm4oMCk7CisgCX0KKyAKKy0tIAorMi4xMy4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2QvZmlsZXMvMDAwMi1NYWtlLXdheS1mb3ItcmVzcGVjdGluZy1mbGFncy1mcm9tLWVudmlyb25tZW50LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy8wMDAyLU1ha2Utd2F5LWZvci1yZXNwZWN0aW5nLWZsYWdzLWZyb20tZW52aXJvbm1lbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJiZGVmMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2QvZmlsZXMvMDAwMi1NYWtlLXdheS1mb3ItcmVzcGVjdGluZy1mbGFncy1mcm9tLWVudmlyb25tZW50LnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gYjIyZjI0NDczMmNkMGY0NzVhZjJmODJmYzdlZWNlYzQ5ZjkwNjIzYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDEgSnVsIDIwMTcgMDA6MDE6NTAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIE1ha2Ugd2F5IGZvciByZXNwZWN0aW5nIGZsYWdzIGZyb20gZW52aXJvbm1lbnQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBNYWtlZmlsZSB8IDQgKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IDVhZjE2ODkuLmFmNjk5ZDIgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0xNywxNCArMTcsMTIgQEAKKyAjICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAjICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgCistQ0M9IGdjYworICNTS0ZMQUdTPSAtZyAtRFNZU1YgLVdhbGwKKyAjTERGTEFHUz0gLWcKKy1TS0ZMQUdTPSAkKFJQTV9PUFRfRkxBR1MpIC1PMyAtRFNZU1YgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLWZuby1zdHJlbmd0aC1yZWR1Y2UKKytTS0ZMQUdTID0gJChDRkxBR1MpICQoQ1BQRkxBR1MpIC1EU1lTViAtV2FsbCAtZm5vLXN0cmVuZ3RoLXJlZHVjZQorICMgLURfRklMRV9PRkZTRVRfQklUUz02NCAtRF9MQVJHRUZJTEVfU09VUkNFCisgIyAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1EX0xBUkdFRklMRTY0X1NPVVJDRQorICMgJChzaGVsbCBnZXRjb25mIExGU19TS0ZMQUdTKQorLUxERkxBR1M9IC1zCisgCisgIyBMb29rIHdoZXJlIHlvdXIgaW5zdGFsbCBwcm9ncmFtIGlzLgorIElOU1RBTEwgPSAvdXNyL2Jpbi9pbnN0YWxsCistLSAKKzIuMTMuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL3N5c2tsb2dkLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2Qvc3lza2xvZ2QuaW5jCmluZGV4IDc4YjhkN2EuLjFhNTM3ZmEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2Qvc3lza2xvZ2QuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2Qvc3lza2xvZ2QuaW5jCkBAIC0xMSwxMSArMTEsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2tsb2dkLmM7YmVnaW5saW5lPTI7ZW5kbGluZT0xOTttZDU9N2U4N2VkMGFlNjE0MmRlMDc5YmNlNzM4YzEwYzg5OWQgXAogICAgICAgICAgICAgICAgICAgICIKIAotaW5oZXJpdCB1cGRhdGUtcmMuZCB1cGRhdGUtYWx0ZXJuYXRpdmVzIHN5c3RlbWQKK2luaGVyaXQgdXBkYXRlLXJjLmQgc3lzdGVtZAogCiBTUkNfVVJJID0gImh0dHA6Ly93d3cuaW5mb2Ryb20ub3JnL3Byb2plY3RzL3N5c2tsb2dkL2Rvd25sb2FkL3N5c2tsb2dkLSR7UFZ9LnRhci5neiBcCiAgICAgICAgICAgIGZpbGU6Ly9uby1zdHJpcC1pbnN0YWxsLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWJ1aWxkLXdpdGgtbXVzbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC1wcm9ibGVtcy10aGF0LWNhdXNlcy1hLXNlZ21lbnRhdGlvbi1mYXVsdC11bmRlci0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1NYWtlLXdheS1mb3ItcmVzcGVjdGluZy1mbGFncy1mcm9tLWVudmlyb25tZW50LnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL3N5c2tsb2dkIFwKICAgICAgICAgICAgZmlsZTovL3N5c2xvZy5jb25mIFwKICAgICAgICAgICAgZmlsZTovL3N5c2xvZ2Quc2VydmljZSBcCkBAIC0zMCwxMSArMzIsMTAgQEAKIFNZU1RFTURfQVVUT19FTkFCTEUgPSAiZW5hYmxlIgogCiBJTklUU0NSSVBUX05BTUUgPSAic3lzbG9nIgotQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vc3lzbG9nLmNvbmYuJHtCUE59IgorQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vc3lzbG9nLmNvbmYiCitSQ09ORkxJQ1RTXyR7UE59LXN5c2xvZyA9ICJyc3lzbG9nIGJ1c3lib3gtc3lzbG9nIHN5c2xvZy1uZyIKIAotRVhUUkFfT0VNQUtFID0gIi1lIE1BS0VGTEFHUz0iCi0KLUNGTEFHU19hcHBlbmQgPSAiIC1EU1lTViIKK0NGTEFHUyArPSAiLURTWVNWIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLURfTEFSR0VGSUxFX1NPVVJDRSIKIAogZG9faW5zdGFsbCAoKSB7CiAJaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjggXApAQCAtNTcsMjEgKzU4LDYgQEAKIAogRklMRVNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywnJHtleGVjX3ByZWZpeH0vbGliL3RtcGZpbGVzLmQvc3lza2xvZ2QuY29uZicsICcnLCBkKX0iCiAKLSMgc3lza2xvZ2QgcGFja2FnZSBoYXMgbm8gaW50ZXJuYWwgc3lzdGVtZCBzdXBwb3J0LCBzbyB3ZSB3ZWlnaCBidXN5Ym94J3MKLSMgc3lza2xvZ2QgdXRpbGl0eSBvdmVyIGl0IGluIGNhc2Ugb2Ygc3lzdGVtZAotQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCcxMCcsJzEwMCcsZCl9IgotCi1BTFRFUk5BVElWRV8ke1BOfSA9ICJzeXNsb2dkIGtsb2dkIHN5c2xvZy1jb25mIFwKLSAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdmluaXQnLCdzeXNsb2ctaW5pdCcsJycsZCl9IgotCi1BTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAic3lzbG9nZC44IgotQUxURVJOQVRJVkVfTElOS19OQU1FW3N5c2xvZ2QuOF0gPSAiJHttYW5kaXJ9L21hbjgvc3lzbG9nZC44IgotCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbc3lzbG9nZF0gPSAiJHtiYXNlX3NiaW5kaXJ9L3N5c2xvZ2QiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVba2xvZ2RdID0gIiR7YmFzZV9zYmluZGlyfS9rbG9nZCIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtzeXNsb2ctaW5pdF0gPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvc3lzbG9nIgotQUxURVJOQVRJVkVfTElOS19OQU1FW3N5c2xvZy1jb25mXSA9ICIke3N5c2NvbmZkaXJ9L3N5c2xvZy5jb25mIgotCiBwa2dfcHJlcm1fJHtQTn0gKCkgewogCWlmIHRlc3QgIngkRCIgPSAieCI7IHRoZW4KIAlpZiB0ZXN0ICIkMSIgPSAidXBncmFkZSIgLW8gIiQxIiA9ICJyZW1vdmUiOyB0aGVuCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdC5pbmMKaW5kZXggYmI1NjI5ZC4uMGJjN2UxNCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0LmluYwpAQCAtMTcsOCArMTcsMTAgQEAKICMgYXV0b3Rvb2xzLWJyb2tlbnNlcCBhcyB0aGlzIHBhY2thZ2UgZG9lc24ndCB1c2UgYXV0b21ha2UKIGluaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBnZXR0ZXh0IHN5c3RlbWQKIAotRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtc2Vuc29ycyIKLUVYVFJBX09FTUFLRSArPSAnTEZMQUdTPSIiJworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbbG0tc2Vuc29yc10gPSAiLS1lbmFibGUtc2Vuc29ycywtLWRpc2FibGUtc2Vuc29ycyxsbXNlbnNvcnMsbG1zZW5zb3JzLWxpYnNlbnNvcnMiCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLXN0cmlwcGluZyIKIAogU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfSIKIFNZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJzeXNzdGF0LnNlcnZpY2UiCkBAIC0zMiwxMCArMzQsMTYgQEAKIAlhdXRvdG9vbHNfZG9faW5zdGFsbAogCiAJIyBkb24ndCBpbnN0YWxsIC92YXIvbG9nL3NhIHdoZW4gcG9wdWxhdGluZyByb290ZnMuIERvIGl0IHRocm91Z2ggdm9sYXRpbGUKLQogCXJtIC1yZiAke0R9L3ZhcgotCWluc3RhbGwgLWQgJHtEfS9ldGMvZGVmYXVsdC92b2xhdGlsZXMKLQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS85OV9zeXNzdGF0ICR7RH0vZXRjL2RlZmF1bHQvdm9sYXRpbGVzCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisJICAgICAgICBpbnN0YWxsIC1kICR7RH0vZXRjL2RlZmF1bHQvdm9sYXRpbGVzCisJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9Lzk5X3N5c3N0YXQgJHtEfS9ldGMvZGVmYXVsdC92b2xhdGlsZXMKKwlmaQorCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisJICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQKKwkgICAgICAgIGVjaG8gImQgJHtsb2NhbHN0YXRlZGlyfS9sb2cvc2EgLSAtIC0gLSIgXAorCQkgICAgID4gJHtEfSR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZC9zeXNzdGF0LmNvbmYKKwlmaQogCiAJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQogCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3N5c3N0YXQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQpAQCAtNTUsNCArNjMsMyBAQAogRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9zYSIKIAogVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCi1MREZMQUdTX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLWxpbnRsIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXRfMTEuNS40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXRfMTEuNS40LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmYzNjNiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0XzExLjUuNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotcmVxdWlyZSBzeXNzdGF0LmluYwotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hMjNhNzRiM2Y0Y2FmOTYxNjIzMDc4OWQ5NDIxN2FjYiIKLQotU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtSW5jbHVkZS1uZWVkZWQtaGVhZGVycy1leHBsaWNpdGx5LnBhdGNoIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiZjE2YWU4ZWRkNDYyZjUxOTllZTAzM2Y3YzBlMmMxOTciCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWUxMDA4NjU2NTc1ZTcwNDg2YjQ1NmU3OTc3NWU5OGQzYjg3MzJkN2UyY2I0MDg1NTkyMDliZDAzMThlMDgwNyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0XzExLjUuNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0XzExLjUuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmFmOTMxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXRfMTEuNS43LmJiCkBAIC0wLDAgKzEsOCBAQAorcmVxdWlyZSBzeXNzdGF0LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hMjNhNzRiM2Y0Y2FmOTYxNjIzMDc4OWQ5NDIxN2FjYiIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtSW5jbHVkZS1uZWVkZWQtaGVhZGVycy1leHBsaWNpdGx5LnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOGY0YTVkMGRlMjlmMTA1NjE1M2UyNWU3YTljNTE4ZDIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNGEzOGVmYWEwY2E4NWVlNTQ4NGQwNDZiZDQyNzAxMjk3OTI2NGZlZjE3ZjA3ZmQ3ODU1ODYwZTU5MjgxOTQ4MiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVyc183LjYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnNfNy42LmJiCmluZGV4IDVmZGJiY2UuLjFlZmZlZjEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVyc183LjYuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzXzcuNi5iYgpAQCAtMSw0ICsxLDUgQEAKIFNVTU1BUlkgPSAiU2VjdXJpdHkgdG9vbCB0aGF0IGlzIGEgd3JhcHBlciBmb3IgVENQIGRhZW1vbnMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnNvZnRwYW5vcmFtYS5vcmcvTmV0L05ldHdvcmtfc2VjdXJpdHkvVENQX3dyYXBwZXJzLyIKIERFU0NSSVBUSU9OID0gIlRvb2xzIGZvciBtb25pdG9yaW5nIGFuZCBmaWx0ZXJpbmcgaW5jb21pbmcgcmVxdWVzdHMgZm9yIHRjcCBcCiAgICAgICAgICAgICAgICBzZXJ2aWNlcy4iCiBTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKQEAgLTczLDcgKzc0LDYgQEAKICAgICAgICAgICAgICAgICAnRVhUUkFfQ0ZMQUdTPSR7Q0ZMQUdTfSAtRFNZU19FUlJMSVNUX0RFRklORUQgLURIQVZFX1NUUkVSUk9SIC1ESEFWRV9XRUFLU1lNUyAtRF9SRUVOVFJBTlQgLURJTkVUNj0xIC1Ec3NfZmFtaWx5PV9fc3NfZmFtaWx5IC1Ec3NfbGVuPV9fc3NfbGVuJyIKIAogRVhUUkFfT0VNQUtFX05FVEdST1VQID0gIi1ETkVUR1JPVVAgLURVU0VfR0VURE9NQUlOIgotRVhUUkFfT0VNQUtFX05FVEdST1VQX2xpYmMtdWNsaWJjID0gIi1EVVNFX0dFVERPTUFJTiIKIEVYVFJBX09FTUFLRV9ORVRHUk9VUF9saWJjLW11c2wgPSAiLURVU0VfR0VURE9NQUlOIgogCiBFWFRSQV9PRU1BS0VfYXBwZW5kX2xpYmMtbXVzbCA9ICIgJ0xJQlM9JyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby1kdW1teS1uYXRpdmUvdGV4aW5mby1kdW1teS90ZW1wbGF0ZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby1kdW1teS1uYXRpdmUvdGV4aW5mby1kdW1teS90ZW1wbGF0ZS5weQppbmRleCA4YjcwMzNlLi5lMzY5Zjc0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8tZHVtbXktbmF0aXZlL3RleGluZm8tZHVtbXkvdGVtcGxhdGUucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15L3RlbXBsYXRlLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbjIuNworIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyB0ZW1wbGF0ZS5weSAoYW5kIG90aGVyIGZpbGVuYW1lcykKICMgQnkgTWF4IEVsaWFzZXIgKG1heC5lbGlhc2VyQGludGVsLmNvbSkKQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICB0aGlzX2JpbmFyeSArICIgaXMgbm90IG9uZSBvZiAiICsgJywgJy5qb2luICh2YWxpZF9iaW5hcmllcykKIAogaWYgIi0tdmVyc2lvbiIgaW4gc3lzLmFyZ3Y6Ci0gICAgcHJpbnQgdmVyc2lvbl9zdHIKKyAgICBwcmludCh2ZXJzaW9uX3N0cikKICAgICBzeXMuZXhpdCAoMCkKIAogIyBGb3IgZGVidWdnaW5nCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mb182LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mb182LjMuYmIKaW5kZXggZDgyNzMxZS4uZjU4ZGY5MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm9fNi4zLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvXzYuMy5iYgpAQCAtNzksNCArNzksMTAgQEAKICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9LyR7dGV4X3RleGluZm99IFwKICAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMSAke21hbmRpcn0vbWFuNSIKIAorIyBMaWUgYWJvdXQgcHJvdmlkaW5nIHRoZSBMb2NhbGU6OmdldHRleHRfeHMgbW9kdWxlLiBJdCBpcyBub3QgYWN0dWFsbHkgYnVpbHQsCisjIGJ1dCB0aGUgY29kZSB3aWxsIHRlc3QgZm9yIGl0IGFuZCBpZiBub3QgZm91bmQgdXNlIExvY2FsZTo6Z2V0dGV4dF9wcCBpbnN0ZWFkLgorIyBIb3dldmVyLCB0aGlzIGNhdXNlcyBhIGZpbGUgZGVwZW5kZW5jeSBvbiBwZXJsKExvY2FsZTo6Z2V0dGV4dF94cykgdG8gYmUKKyMgZ2VuZXJhdGVkLCB3aGljaCBtdXN0IGJlIHNhdGlzZmllZC4KK1JQUk9WSURFU18ke1BOfSArPSAicGVybChMb2NhbGU6OmdldHRleHRfeHMpIgorCiBCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6Y29kZS9maWxlcy8wMDAxLUZpeC1NYWtlZmlsZS1xdW90aW5nLWJ1Zy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpjb2RlL2ZpbGVzLzAwMDEtRml4LU1ha2VmaWxlLXF1b3RpbmctYnVnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0OWZhMDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6Y29kZS9maWxlcy8wMDAxLUZpeC1NYWtlZmlsZS1xdW90aW5nLWJ1Zy5wYXRjaApAQCAtMCwwICsxLDE3NCBAQAorRnJvbSBiNTIwZDIwYjgxMjJhNzgzZjk5ZjA4ODc1OGI3OGQ5MjhmNzBlZTM0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBFZ2dlcnQgPGVnZ2VydEBjcy51Y2xhLmVkdT4KK0RhdGU6IE1vbiwgMjMgT2N0IDIwMTcgMTE6NDI6NDUgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IE1ha2VmaWxlIHF1b3RpbmcgYnVnCisKK1Byb2JsZW0gd2l0aCBJTlNUQUxMQVJHUyByZXBvcnRlZCBieSBaZWZyYW0gaW46CitodHRwczovL21tLmljYW5uLm9yZy9waXBlcm1haWwvdHovMjAxNy1PY3RvYmVyLzAyNTM2MC5odG1sCitGaXggc2ltaWxhciBwcm9ibGVtcyB0b28uCisqIE1ha2VmaWxlIChaSUNfSU5TVEFMTCwgVkFMSURBVEVfRU5WLCBDQywgaW5zdGFsbCkKKyhJTlNUQUxMLCB2ZXJzaW9uLCBJTlNUQUxMQVJHUywgcmlnaHRfcG9zaXgsIHBvc2l4X3JpZ2h0KQorKGNoZWNrX3B1YmxpYyk6IFVzZSBhcG9zdHJvcGhlcyB0byBwcmV2ZW50IHVuZGVzaXJhYmxlCitpbnRlcnByZXRhdGlvbiBvZiBuYW1lcyBieSB0aGUgc2hlbGwuICBXZSBzdGlsbCBkbyBub3Qgc3VwcG9ydAorZGlyZWN0b3J5IG5hbWVzIGNvbnRhaW5pbmcgYXBvc3Ryb3BoZXMgb3IgbmV3bGluZXMsIGJ1dCB0aGlzIGlzCitnb29kIGVub3VnaC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+CisKKyogTkVXUzogTWVudGlvbiB0aGlzLgorLS0tCisgTWFrZWZpbGUgfCA2NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTkVXUyAgICAgfCAgOCArKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgNDAgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCBjOTJlZGMwLi45NzY0OWNhIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMzEzLDcgKzMxMyw3IEBAIFpGTEFHUz0KKyAKKyAjIEhvdyB0byB1c2UgemljIHRvIGluc3RhbGwgdHogYmluYXJ5IGZpbGVzLgorIAorLVpJQ19JTlNUQUxMPQkkKFpJQykgLWQgJChERVNURElSKSQoVFpESVIpICQoTEVBUFNFQ09ORFMpCisrWklDX0lOU1RBTEw9CSQoWklDKSAtZCAnJChERVNURElSKSQoVFpESVIpJyAkKExFQVBTRUNPTkRTKQorIAorICMgVGhlIG5hbWUgb2YgYSBQb3NpeC1jb21wbGlhbnQgJ2F3aycgb24geW91ciBzeXN0ZW0uCisgQVdLPQkJYXdrCitAQCAtMzQxLDggKzM0MSw4IEBAIFNHTUxfQ0FUQUxPR19GSUxFUz0gXAorIFZBTElEQVRFID0gbnNnbWxzCisgVkFMSURBVEVfRkxBR1MgPSAtcyAtQiAtd2FsbCAtd25vLXVudXNlZC1wYXJhbQorIFZBTElEQVRFX0VOViA9IFwKKy0gIFNHTUxfQ0FUQUxPR19GSUxFUz0kKFNHTUxfQ0FUQUxPR19GSUxFUykgXAorLSAgU0dNTF9TRUFSQ0hfUEFUSD0kKFNHTUxfU0VBUkNIX1BBVEgpIFwKKysgIFNHTUxfQ0FUQUxPR19GSUxFUz0nJChTR01MX0NBVEFMT0dfRklMRVMpJyBcCisrICBTR01MX1NFQVJDSF9QQVRIPSckKFNHTUxfU0VBUkNIX1BBVEgpJyBcCisgICBTUF9DSEFSU0VUX0ZJWEVEPVlFUyBcCisgICBTUF9FTkNPRElORz1VVEYtOAorIAorQEAgLTM5Niw3ICszOTYsNyBAQCBHWklQRkxBR1M9CS05bgorICNNQUtFPQkJbWFrZQorIAorIGNjPQkJY2MKKy1DQz0JCSQoY2MpIC1EVFpESVI9XCIkKFRaRElSKVwiCisrQ0M9CQkkKGNjKSAtRFRaRElSPSciJChUWkRJUikiJworIAorIEFSPQkJYXIKKyAKK0BAIC00NzMsMjkgKzQ3MywyOSBAQCBhbGw6CQl0enNlbGVjdCB5ZWFyaXN0eXBlIHppYyB6ZHVtcCBsaWJ0ei5hICQoVEFCREFUQSkKKyBBTEw6CQlhbGwgZGF0ZSAkKEVOQ0hJTEFEQSkKKyAKKyBpbnN0YWxsOglhbGwgJChEQVRBKSAkKFJFRE8pICQoTUFOUykKKy0JCW1rZGlyIC1wICQoREVTVERJUikkKEVUQ0RJUikgJChERVNURElSKSQoVFpESVIpIFwKKy0JCQkkKERFU1RESVIpJChMSUJESVIpIFwKKy0JCQkkKERFU1RESVIpJChNQU5ESVIpL21hbjMgJChERVNURElSKSQoTUFORElSKS9tYW41IFwKKy0JCQkkKERFU1RESVIpJChNQU5ESVIpL21hbjgKKysJCW1rZGlyIC1wICckKERFU1RESVIpJChFVENESVIpJyAnJChERVNURElSKSQoVFpESVIpJyBcCisrCQkJJyQoREVTVERJUikkKExJQkRJUiknIFwKKysJCQknJChERVNURElSKSQoTUFORElSKS9tYW4zJyAnJChERVNURElSKSQoTUFORElSKS9tYW41JyBcCisrCQkJJyQoREVTVERJUikkKE1BTkRJUikvbWFuOCcKKyAJCSQoWklDX0lOU1RBTEwpIC1sICQoTE9DQUxUSU1FKSAtcCAkKFBPU0lYUlVMRVMpCistCQljcCAtZiAkKFRBQkRBVEEpICQoREVTVERJUikkKFRaRElSKS8uCistCQljcCB0enNlbGVjdCB6aWMgemR1bXAgJChERVNURElSKSQoRVRDRElSKS8uCistCQljcCBsaWJ0ei5hICQoREVTVERJUikkKExJQkRJUikvLgorLQkJJChSQU5MSUIpICQoREVTVERJUikkKExJQkRJUikvbGlidHouYQorLQkJY3AgLWYgbmV3Y3RpbWUuMyBuZXd0enNldC4zICQoREVTVERJUikkKE1BTkRJUikvbWFuMy8uCistCQljcCAtZiB0emZpbGUuNSAkKERFU1RESVIpJChNQU5ESVIpL21hbjUvLgorLQkJY3AgLWYgdHpzZWxlY3QuOCB6ZHVtcC44IHppYy44ICQoREVTVERJUikkKE1BTkRJUikvbWFuOC8uCisrCQljcCAtZiAkKFRBQkRBVEEpICckKERFU1RESVIpJChUWkRJUikvLicKKysJCWNwIHR6c2VsZWN0IHppYyB6ZHVtcCAnJChERVNURElSKSQoRVRDRElSKS8uJworKwkJY3AgbGlidHouYSAnJChERVNURElSKSQoTElCRElSKS8uJworKwkJJChSQU5MSUIpICckKERFU1RESVIpJChMSUJESVIpL2xpYnR6LmEnCisrCQljcCAtZiBuZXdjdGltZS4zIG5ld3R6c2V0LjMgJyQoREVTVERJUikkKE1BTkRJUikvbWFuMy8uJworKwkJY3AgLWYgdHpmaWxlLjUgJyQoREVTVERJUikkKE1BTkRJUikvbWFuNS8uJworKwkJY3AgLWYgdHpzZWxlY3QuOCB6ZHVtcC44IHppYy44ICckKERFU1RESVIpJChNQU5ESVIpL21hbjgvLicKKyAKKyBJTlNUQUxMOglBTEwgaW5zdGFsbCBkYXRlLjEKKy0JCW1rZGlyIC1wICQoREVTVERJUikkKEJJTkRJUikgJChERVNURElSKSQoTUFORElSKS9tYW4xCistCQljcCBkYXRlICQoREVTVERJUikkKEJJTkRJUikvLgorLQkJY3AgLWYgZGF0ZS4xICQoREVTVERJUikkKE1BTkRJUikvbWFuMS8uCisrCQlta2RpciAtcCAnJChERVNURElSKSQoQklORElSKScgJyQoREVTVERJUikkKE1BTkRJUikvbWFuMScKKysJCWNwIGRhdGUgJyQoREVTVERJUikkKEJJTkRJUikvLicKKysJCWNwIC1mIGRhdGUuMSAnJChERVNURElSKSQoTUFORElSKS9tYW4xLy4nCisgCisgdmVyc2lvbjoJJChWRVJTSU9OX0RFUFMpCisgCQl7ICh0eXBlIGdpdCkgPi9kZXYvbnVsbCAyPiYxICYmIFwKKyAJCSAgVj1gZ2l0IGRlc2NyaWJlIC0tbWF0Y2ggJ1swLTldWzAtOV1bMC05XVswLTldW2Etel0qJyBcCisgCQkJCS0tYWJicmV2PTcgLS1kaXJ0eWAgfHwgXAorLQkJICBWPSQoVkVSU0lPTik7IH0gJiYgXAorKwkJICBWPSckKFZFUlNJT04pJzsgfSAmJiBcCisgCQlwcmludGYgJyVzXG4nICIkJFYiID4kQC5vdXQKKyAJCW12ICRALm91dCAkQAorIAorQEAgLTUyOSwxMiArNTI5LDEyIEBAIGxlYXBzZWNvbmRzOgkkKExFQVBfREVQUykKKyAjIEFyZ3VtZW50cyB0byBwYXNzIHRvIHN1Ym1ha2VzIG9mIGluc3RhbGxfZGF0YS4KKyAjIFRoZXkgY2FuIGJlIG92ZXJyaWRkZW4gYnkgbGF0ZXIgc3VibWFrZSBhcmd1bWVudHMuCisgSU5TVEFMTEFSR1MgPSBcCistIEJBQ0tXQVJEPSQoQkFDS1dBUkQpIFwKKy0gREVTVERJUj0kKERFU1RESVIpIFwKKysgQkFDS1dBUkQ9JyQoQkFDS1dBUkQpJyBcCisrIERFU1RESVI9JyQoREVTVERJUiknIFwKKyAgTEVBUFNFQ09ORFM9JyQoTEVBUFNFQ09ORFMpJyBcCisgIFBBQ0tSQVREQVRBPSckKFBBQ0tSQVREQVRBKScgXAorLSBUWkRJUj0kKFRaRElSKSBcCistIFlFQVJJU1RZUEU9JChZRUFSSVNUWVBFKSBcCisrIFRaRElSPSckKFRaRElSKScgXAorKyBZRUFSSVNUWVBFPSckKFlFQVJJU1RZUEUpJyBcCisgIFpJQz0nJChaSUMpJworIAorICMgJ21ha2UgaW5zdGFsbF9kYXRhJyBpbnN0YWxscyBvbmUgc2V0IG9mIHR6IGJpbmFyeSBmaWxlcy4KK0BAIC01NTgsMTYgKzU1OCwxNiBAQCByaWdodF9vbmx5OgorICMgWW91IG11c3QgcmVwbGFjZSBhbGwgb2YgJChUWkRJUikgdG8gc3dpdGNoIGZyb20gbm90IHVzaW5nIGxlYXAgc2Vjb25kcworICMgdG8gdXNpbmcgdGhlbSwgb3IgdmljZSB2ZXJzYS4KKyByaWdodF9wb3NpeDoJcmlnaHRfb25seQorLQkJcm0gLWZyICQoREVTVERJUikkKFRaRElSKS1sZWFwcworLQkJbG4gLXMgJChUWkRJUl9CQVNFTkFNRSkgJChERVNURElSKSQoVFpESVIpLWxlYXBzIHx8IFwKKy0JCSAgJChNQUtFKSAkKElOU1RBTExBUkdTKSBUWkRJUj0kKFRaRElSKS1sZWFwcyByaWdodF9vbmx5CistCQkkKE1BS0UpICQoSU5TVEFMTEFSR1MpIFRaRElSPSQoVFpESVIpLXBvc2l4IHBvc2l4X29ubHkKKysJCXJtIC1mciAnJChERVNURElSKSQoVFpESVIpLWxlYXBzJworKwkJbG4gLXMgJyQoVFpESVJfQkFTRU5BTUUpJyAnJChERVNURElSKSQoVFpESVIpLWxlYXBzJyB8fCBcCisrCQkgICQoTUFLRSkgJChJTlNUQUxMQVJHUykgVFpESVI9JyQoVFpESVIpLWxlYXBzJyByaWdodF9vbmx5CisrCQkkKE1BS0UpICQoSU5TVEFMTEFSR1MpIFRaRElSPSckKFRaRElSKS1wb3NpeCcgcG9zaXhfb25seQorIAorIHBvc2l4X3JpZ2h0Oglwb3NpeF9vbmx5CistCQlybSAtZnIgJChERVNURElSKSQoVFpESVIpLXBvc2l4CistCQlsbiAtcyAkKFRaRElSX0JBU0VOQU1FKSAkKERFU1RESVIpJChUWkRJUiktcG9zaXggfHwgXAorLQkJICAkKE1BS0UpICQoSU5TVEFMTEFSR1MpIFRaRElSPSQoVFpESVIpLXBvc2l4IHBvc2l4X29ubHkKKy0JCSQoTUFLRSkgJChJTlNUQUxMQVJHUykgVFpESVI9JChUWkRJUiktbGVhcHMgcmlnaHRfb25seQorKwkJcm0gLWZyICckKERFU1RESVIpJChUWkRJUiktcG9zaXgnCisrCQlsbiAtcyAnJChUWkRJUl9CQVNFTkFNRSknICckKERFU1RESVIpJChUWkRJUiktcG9zaXgnIHx8IFwKKysJCSAgJChNQUtFKSAkKElOU1RBTExBUkdTKSBUWkRJUj0nJChUWkRJUiktcG9zaXgnIHBvc2l4X29ubHkKKysJCSQoTUFLRSkgJChJTlNUQUxMQVJHUykgVFpESVI9JyQoVFpESVIpLWxlYXBzJyByaWdodF9vbmx5CisgCisgIyBUaGlzIG9ic29sZXNjZW50IHJ1bGUgaXMgcHJlc2VudCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aAorICMgdHogcmVsZWFzZXMgMjAxNGcgdGhyb3VnaCAyMDE1Zy4gIEl0IHNob3VsZCBnbyBhd2F5IGV2ZW50dWFsbHkuCitAQCAtNzY0LDcgKzc2NCw3IEBAIHNldC10aW1lc3RhbXBzLm91dDogJChFTkNISUxBREEpCisgCisgY2hlY2tfcHVibGljOgorIAkJJChNQUtFKSBtYWludGFpbmVyLWNsZWFuCistCQkkKE1BS0UpICJDRkxBR1M9JChHQ0NfREVCVUdfRkxBR1MpIiBBTEwKKysJCSQoTUFLRSkgQ0ZMQUdTPSckKEdDQ19ERUJVR19GTEFHUyknIEFMTAorIAkJbWtkaXIgLXAgcHVibGljLmRpcgorIAkJZm9yIGkgaW4gJChUREFUQSkgdHpkYXRhLnppOyBkbyBcCisgCQkgICQoemljKSAtdiAtZCBwdWJsaWMuZGlyICQkaSAyPiYxIHx8IGV4aXQ7IFwKK2RpZmYgLS1naXQgYS9ORVdTIGIvTkVXUworaW5kZXggYmQyYmVjMi4uNzVhYjA5NSAxMDA2NDQKKy0tLSBhL05FV1MKKysrKyBiL05FV1MKK0BAIC0xLDUgKzEsMTMgQEAKKyBOZXdzIGZvciB0aGUgdHogZGF0YWJhc2UKKyAKKytVbnJlbGVhc2VkLCBleHBlcmltZW50YWwgY2hhbmdlcworKworKyAgQ2hhbmdlcyB0byBidWlsZCBwcm9jZWR1cmUKKysKKysgICAgVGhlIE1ha2VmaWxlIG5vdyBxdW90ZXMgdmFsdWVzIGxpa2UgQkFDS1dBUkQgbW9yZSBjYXJlZnVsbHkgd2hlbgorKyAgICBwYXNzaW5nIHRoZW0gdG8gdGhlIHNoZWxsLiAgKFByb2JsZW0gcmVwb3J0ZWQgYnkgWmVmcmFtLikKKysKKysKKyBSZWxlYXNlIDIwMTdjIC0gMjAxNy0xMC0yMCAxNDo0OTozNCAtMDcwMAorIAorICAgQnJpZWZseToKKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90emNvZGUvZmlsZXMvMDAwMi1Qb3J0LXpkdW1wLXRvLUM5MC1zbnByaW50Zi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpjb2RlL2ZpbGVzLzAwMDItUG9ydC16ZHVtcC10by1DOTAtc25wcmludGYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdhZmU0NwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpjb2RlL2ZpbGVzLzAwMDItUG9ydC16ZHVtcC10by1DOTAtc25wcmludGYucGF0Y2gKQEAgLTAsMCArMSwxMTUgQEAKK0Zyb20gZTIzMWRhNGZiMmJlYjE3YzYwYjRiMWE1YzI3NjM2NmQ2YTZlNDMzZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgRWdnZXJ0IDxlZ2dlcnRAY3MudWNsYS5lZHU+CitEYXRlOiBNb24sIDIzIE9jdCAyMDE3IDE3OjU4OjM2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFBvcnQgemR1bXAgdG8gQzkwICsgc25wcmludGYKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworUHJvYmxlbSByZXBvcnRlZCBieSBKb24gU2tlZXQgaW46CitodHRwczovL21tLmljYW5uLm9yZy9waXBlcm1haWwvdHovMjAxNy1PY3RvYmVyLzAyNTM2Mi5odG1sCisqIE5FV1M6IE1lbnRpb24gdGhpcy4KKyogemR1bXAuYyAobXlfc25wcmludGYpOiBOZXcgbWFjcm8gb3IgZnVuY3Rpb24uICBJZiBhIG1hY3JvLCBpdCBpcworanVzdCBzbnByaW50Zi4gIElmIGEgZnVuY3Rpb24sIGl0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgc25wcmludGYKK3N0YXRpYyBmdW5jdGlvbiwgd2l0aCBhbiBBVFRSSUJVVEVfRk9STUFUIHRvIHBhY2lmeSBtb2Rlcm4gR0NDLgorQWxsIHVzZXMgb2Ygc25wcmludGYgY2hhbmdlZCB0byB1c2UgbXlfc25wcmludGYuICBUaGlzIHdheSwKK2luc3RhbGxlcnMgZG9u4oCZdCBuZWVkIHRvIHNwZWNpZnkgLURIQVZFX1NOUFJJTlRGIGlmIHRoZXkgYXJlIHVzaW5nCithIHByZS1DOTkgY29tcGlsZXIgd2l0aCBhIGxpYnJhcnkgdGhhdCBoYXMgc25wcmludGYuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgorCistLS0KKyBORVdTICAgIHwgIDQgKysrKworIHpkdW1wLmMgfCAyOSArKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ORVdTIGIvTkVXUworaW5kZXggNzVhYjA5NS4uZGVhMDhiOCAxMDA2NDQKKy0tLSBhL05FV1MKKysrKyBiL05FV1MKK0BAIC03LDYgKzcsMTAgQEAgVW5yZWxlYXNlZCwgZXhwZXJpbWVudGFsIGNoYW5nZXMKKyAgICAgVGhlIE1ha2VmaWxlIG5vdyBxdW90ZXMgdmFsdWVzIGxpa2UgQkFDS1dBUkQgbW9yZSBjYXJlZnVsbHkgd2hlbgorICAgICBwYXNzaW5nIHRoZW0gdG8gdGhlIHNoZWxsLiAgKFByb2JsZW0gcmVwb3J0ZWQgYnkgWmVmcmFtLikKKyAKKysgICAgQnVpbGRlcnMgbm8gbG9uZ2VyIG5lZWQgdG8gc3BlY2lmeSAtREhBVkVfU05QUklOVEYgb24gcGxhdGZvcm1zCisrICAgIHRoYXQgaGF2ZSBzbnByaW50ZiBhbmQgdXNlIHByZS1DOTkgY29tcGlsZXJzLiAgKFByb2JsZW0gcmVwb3J0ZWQKKysgICAgYnkgSm9uIFNrZWV0LikKKysKKyAKKyBSZWxlYXNlIDIwMTdjIC0gMjAxNy0xMC0yMCAxNDo0OTozNCAtMDcwMAorIAorZGlmZiAtLWdpdCBhL3pkdW1wLmMgYi96ZHVtcC5jCitpbmRleCA4ZTNiZjNlLi5kNGU2MDg0IDEwMDY0NAorLS0tIGEvemR1bXAuYworKysrIGIvemR1bXAuYworQEAgLTc5NSwxMiArNzk1LDE0IEBAIHNob3codGltZXpvbmVfdCB0eiwgY2hhciAqem9uZSwgdGltZV90IHQsIGJvb2wgdikKKyAJCWFiYnJvayhhYmJyKHRtcCksIHpvbmUpOworIH0KKyAKKy0jaWYgIUhBVkVfU05QUklOVEYKKysjaWYgSEFWRV9TTlBSSU5URgorKyMgZGVmaW5lIG15X3NucHJpbnRmIHNucHJpbnRmCisrI2Vsc2UKKyAjIGluY2x1ZGUgPHN0ZGFyZy5oPgorIAorIC8qIEEgc3Vic3RpdHV0ZSBmb3Igc25wcmludGYgdGhhdCBpcyBnb29kIGVub3VnaCBmb3IgemR1bXAuICAqLworLXN0YXRpYyBpbnQKKy1zbnByaW50ZihjaGFyICpzLCBzaXplX3Qgc2l6ZSwgY2hhciBjb25zdCAqZm9ybWF0LCAuLi4pCisrc3RhdGljIGludCBBVFRSSUJVVEVfRk9STUFUKChwcmludGYsIDMsIDQpKQorK215X3NucHJpbnRmKGNoYXIgKnMsIHNpemVfdCBzaXplLCBjaGFyIGNvbnN0ICpmb3JtYXQsIC4uLikKKyB7CisgICBpbnQgbjsKKyAgIHZhX2xpc3QgYXJnczsKK0BAIC04MzksMTAgKzg0MSwxMCBAQCBmb3JtYXRfbG9jYWxfdGltZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgdG0gY29uc3QgKnRtKQorIHsKKyAgIGludCBzcyA9IHRtLT50bV9zZWMsIG1tID0gdG0tPnRtX21pbiwgaGggPSB0bS0+dG1faG91cjsKKyAgIHJldHVybiAoc3MKKy0JICA/IHNucHJpbnRmKGJ1Ziwgc2l6ZSwgIiUwMmQ6JTAyZDolMDJkIiwgaGgsIG1tLCBzcykKKysJICA/IG15X3NucHJpbnRmKGJ1Ziwgc2l6ZSwgIiUwMmQ6JTAyZDolMDJkIiwgaGgsIG1tLCBzcykKKyAJICA6IG1tCistCSAgPyBzbnByaW50ZihidWYsIHNpemUsICIlMDJkOiUwMmQiLCBoaCwgbW0pCistCSAgOiBzbnByaW50ZihidWYsIHNpemUsICIlMDJkIiwgaGgpKTsKKysJICA/IG15X3NucHJpbnRmKGJ1Ziwgc2l6ZSwgIiUwMmQ6JTAyZCIsIGhoLCBtbSkKKysJICA6IG15X3NucHJpbnRmKGJ1Ziwgc2l6ZSwgIiUwMmQiLCBoaCkpOworIH0KKyAKKyAvKiBTdG9yZSBpbnRvIEJVRiwgb2Ygc2l6ZSBTSVpFLCBhIGZvcm1hdHRlZCBVVEMgb2Zmc2V0IGZvciB0aGUKK0BAIC04NzcsMTAgKzg3OSwxMCBAQCBmb3JtYXRfdXRjX29mZnNldChjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgdG0gY29uc3QgKnRtLCB0aW1lX3QgdCkKKyAgIG1tID0gb2ZmIC8gNjAgJSA2MDsKKyAgIGhoID0gb2ZmIC8gNjAgLyA2MDsKKyAgIHJldHVybiAoc3MgfHwgMTAwIDw9IGhoCistCSAgPyBzbnByaW50ZihidWYsIHNpemUsICIlYyUwMmxkJTAyZCUwMmQiLCBzaWduLCBoaCwgbW0sIHNzKQorKwkgID8gbXlfc25wcmludGYoYnVmLCBzaXplLCAiJWMlMDJsZCUwMmQlMDJkIiwgc2lnbiwgaGgsIG1tLCBzcykKKyAJICA6IG1tCistCSAgPyBzbnByaW50ZihidWYsIHNpemUsICIlYyUwMmxkJTAyZCIsIHNpZ24sIGhoLCBtbSkKKy0JICA6IHNucHJpbnRmKGJ1Ziwgc2l6ZSwgIiVjJTAybGQiLCBzaWduLCBoaCkpOworKwkgID8gbXlfc25wcmludGYoYnVmLCBzaXplLCAiJWMlMDJsZCUwMmQiLCBzaWduLCBoaCwgbW0pCisrCSAgOiBteV9zbnByaW50ZihidWYsIHNpemUsICIlYyUwMmxkIiwgc2lnbiwgaGgpKTsKKyB9CisgCisgLyogU3RvcmUgaW50byBCVUYgKG9mIHNpemUgU0laRSkgYSBxdW90ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIFAuCitAQCAtOTgzLDE1ICs5ODUsMTYgQEAgaXN0cmZ0aW1lKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNoYXIgY29uc3QgKnRpbWVfZm10LAorIAkgICAgZm9yIChhYnAgPSBhYjsgaXNfYWxwaGEoKmFicCk7IGFicCsrKQorIAkgICAgICBjb250aW51ZTsKKyAJICAgIGxlbiA9ICghKmFicCAmJiAqYWIKKy0JCSAgID8gc25wcmludGYoYiwgcywgIiVzIiwgYWIpCisrCQkgICA/IG15X3NucHJpbnRmKGIsIHMsICIlcyIsIGFiKQorIAkJICAgOiBmb3JtYXRfcXVvdGVkX3N0cmluZyhiLCBzLCBhYikpOworIAkgICAgaWYgKHMgPD0gbGVuKQorIAkgICAgICByZXR1cm4gZmFsc2U7CisgCSAgICBiICs9IGxlbiwgcyAtPSBsZW47CisgCSAgfQorLQkgIGZvcm1hdHRlZF9sZW4gPSAodG0tPnRtX2lzZHN0CistCQkJICAgPyBzbnByaW50ZihiLCBzLCAmIlx0XHQlZCJbc2hvd19hYmJyXSwgdG0tPnRtX2lzZHN0KQorLQkJCSAgIDogMCk7CisrCSAgZm9ybWF0dGVkX2xlbgorKwkgICAgPSAodG0tPnRtX2lzZHN0CisrCSAgICAgICA/IG15X3NucHJpbnRmKGIsIHMsICYiXHRcdCVkIltzaG93X2FiYnJdLCB0bS0+dG1faXNkc3QpCisrCSAgICAgICA6IDApOworIAl9CisgCWJyZWFrOworICAgICAgIH0KKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90emNvZGUvdHpjb2RlLW5hdGl2ZV8yMDE3Yi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpjb2RlL3R6Y29kZS1uYXRpdmVfMjAxN2IuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2NWQyYzYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90emNvZGUvdHpjb2RlLW5hdGl2ZV8yMDE3Yi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMgbm90ZSB0aGF0IHdlIGFsbG93IGZvciB1cyB0byB1c2UgZGF0YSBsYXRlciB0aGFuIG91ciBjb2RlIHZlcnNpb24KLSMKLVNVTU1BUlkgPSAidHpjb2RlLCB0aW1lem9uZSB6b25laW5mbyB1dGlscyAtLSB6aWMsIHpkdW1wLCB0enNlbGVjdCIKLUxJQ0VOU0UgPSAiUEQgJiBCU0QgJiBCU0QtMy1DbGF1c2UiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWVmMWEzNTJiOTAxZWU3Yjc1YTc1ZGY4MTcxZDZhY2E3IgotCi1TUkNfVVJJID0iIGh0dHA6Ly93d3cuaWFuYS5vcmcvdGltZS16b25lcy9yZXBvc2l0b3J5L3JlbGVhc2VzL3R6Y29kZSR7UFZ9LnRhci5nejtuYW1lPXR6Y29kZSBcCi0gICAgICAgICAgIGh0dHA6Ly93d3cuaWFuYS5vcmcvdGltZS16b25lcy9yZXBvc2l0b3J5L3JlbGVhc2VzL3R6ZGF0YSR7UFZ9LnRhci5nejtuYW1lPXR6ZGF0YSIKLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vd3d3LmlhbmEub3JnL3RpbWUtem9uZXMiCi0KLVNSQ19VUklbdHpjb2RlLm1kNXN1bV0gPSAiYWZhZjE1ZGViMTM3NTllOGI1NDNkODYzNTAzODViMTYiCi1TUkNfVVJJW3R6Y29kZS5zaGEyNTZzdW1dID0gIjRkMTczNWJiNTRlMjJiOGQ3NDQzZDRkMWYxYTEzZDAwN2FlMTFiZTc5YTM1ZTUxZjhlODMyMmZiOGUyOTJkNDAiCi1TUkNfVVJJW3R6ZGF0YS5tZDVzdW1dID0gIjUwZGMwZGM1MGM2ODY0NGMxZjcwODA0ZjJlN2ExNjI1IgotU1JDX1VSSVt0emRhdGEuc2hhMjU2c3VtXSA9ICJmODI0MmE1MjJlYTM0OTZiMGNlNGZmNGYyZTc1YTA0OTE3OGRhMjEwMDFhMDhiOGU2NjZkOGNiZTA3ZDE4MDg2IgotCi1TID0gIiR7V09SS0RJUn0iCi0KLWluaGVyaXQgbmF0aXZlCi0KLUVYVFJBX09FTUFLRSArPSAiY2M9JyR7Q0N9JyIKLQotZG9faW5zdGFsbCAoKSB7Ci0gICAgICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8KLSAgICAgICAgaW5zdGFsbCAtbSA3NTUgemljICR7RH0ke2JpbmRpcn0vCi0gICAgICAgIGluc3RhbGwgLW0gNzU1IHpkdW1wICR7RH0ke2JpbmRpcn0vCi0gICAgICAgIGluc3RhbGwgLW0gNzU1IHR6c2VsZWN0ICR7RH0ke2JpbmRpcn0vCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6Y29kZS90emNvZGUtbmF0aXZlXzIwMThjLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90emNvZGUvdHpjb2RlLW5hdGl2ZV8yMDE4Yy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWU5YjcwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90emNvZGUvdHpjb2RlLW5hdGl2ZV8yMDE4Yy5iYgpAQCAtMCwwICsxLDMwIEBACisjIG5vdGUgdGhhdCB3ZSBhbGxvdyBmb3IgdXMgdG8gdXNlIGRhdGEgbGF0ZXIgdGhhbiBvdXIgY29kZSB2ZXJzaW9uCisjCitTVU1NQVJZID0gInR6Y29kZSwgdGltZXpvbmUgem9uZWluZm8gdXRpbHMgLS0gemljLCB6ZHVtcCwgdHpzZWxlY3QiCitMSUNFTlNFID0gIlBEICYgQlNEICYgQlNELTMtQ2xhdXNlIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1jNjc5YzlkNmIwMmJjMjc1N2IzZWFmOGY1M2M0M2ZiYSIKKworU1JDX1VSSSA9IiBodHRwOi8vd3d3LmlhbmEub3JnL3RpbWUtem9uZXMvcmVwb3NpdG9yeS9yZWxlYXNlcy90emNvZGUke1BWfS50YXIuZ3o7bmFtZT10emNvZGUgXAorICAgICAgICAgICBodHRwOi8vd3d3LmlhbmEub3JnL3RpbWUtem9uZXMvcmVwb3NpdG9yeS9yZWxlYXNlcy90emRhdGEke1BWfS50YXIuZ3o7bmFtZT10emRhdGEgXAorICAgICAgICAgICAiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vd3d3LmlhbmEub3JnL3RpbWUtem9uZXMiCisKK1NSQ19VUklbdHpjb2RlLm1kNXN1bV0gPSAiZTZlMGQ0YjJjZTNmYTY5MDZmMzAzMTU3YmVkMjYxMmUiCitTUkNfVVJJW3R6Y29kZS5zaGEyNTZzdW1dID0gIjMxZmE3ZmMwZjk0YTZmZjJkNmJjODc4YzBhMzVlOGFiOGI1YWEwZThiMDE0NDVhMWQ0YThmMTQ3NzdkMGU2NjUiCitTUkNfVVJJW3R6ZGF0YS5tZDVzdW1dID0gImM0MTJiMTUzMWFkZWYxYmU3YTY0NWFiNzM0Zjg2YWNjIgorU1JDX1VSSVt0emRhdGEuc2hhMjU2c3VtXSA9ICIyODI1YzNlNGI3ZWY1MjBmMjRkMzkzYmNjMDI5NDJmOTc2MmZmZDNlN2ZjOWIyMzg1MDc4OWVkOGYyMjkzM2Y2IgorCitTID0gIiR7V09SS0RJUn0iCisKK2luaGVyaXQgbmF0aXZlCisKK0VYVFJBX09FTUFLRSArPSAiY2M9JyR7Q0N9JyIKKworZG9faW5zdGFsbCAoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8KKyAgICAgICAgaW5zdGFsbCAtbSA3NTUgemljICR7RH0ke2JpbmRpcn0vCisgICAgICAgIGluc3RhbGwgLW0gNzU1IHpkdW1wICR7RH0ke2JpbmRpcn0vCisgICAgICAgIGluc3RhbGwgLW0gNzU1IHR6c2VsZWN0ICR7RH0ke2JpbmRpcn0vCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6ZGF0YS90emRhdGFfMjAxN2IuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6ZGF0YS90emRhdGFfMjAxN2IuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1ZTg5NzYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90emRhdGEvdHpkYXRhXzIwMTdiLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjE1ICswLDAgQEAKLVNVTU1BUlkgPSAiVGltZXpvbmUgZGF0YSIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuaWFuYS5vcmcvdGltZS16b25lcyIKLVNFQ1RJT04gPSAiYmFzZSIKLUxJQ0VOU0UgPSAiUEQgJiBCU0QgJiBCU0QtMy1DbGF1c2UiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1lZjFhMzUyYjkwMWVlN2I3NWE3NWRmODE3MWQ2YWNhNyIKLQotREVQRU5EUyA9ICJ0emNvZGUtbmF0aXZlIgotCi1TUkNfVVJJID0gImh0dHA6Ly93d3cuaWFuYS5vcmcvdGltZS16b25lcy9yZXBvc2l0b3J5L3JlbGVhc2VzL3R6ZGF0YSR7UFZ9LnRhci5nejtuYW1lPXR6ZGF0YSIKLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vd3d3LmlhbmEub3JnL3RpbWUtem9uZXMiCi0KLVNSQ19VUklbdHpkYXRhLm1kNXN1bV0gPSAiNTBkYzBkYzUwYzY4NjQ0YzFmNzA4MDRmMmU3YTE2MjUiCi1TUkNfVVJJW3R6ZGF0YS5zaGEyNTZzdW1dID0gImY4MjQyYTUyMmVhMzQ5NmIwY2U0ZmY0ZjJlNzVhMDQ5MTc4ZGEyMTAwMWEwOGI4ZTY2NmQ4Y2JlMDdkMTgwODYiCi0KLWluaGVyaXQgYWxsYXJjaAotCi1SQ09ORkxJQ1RTXyR7UE59ID0gInRpbWV6b25lcyB0aW1lem9uZS1hZnJpY2EgdGltZXpvbmUtYW1lcmljYSB0aW1lem9uZS1hbnRhcmN0aWNhIFwKLSAgICAgICAgICAgICB0aW1lem9uZS1hcmN0aWMgdGltZXpvbmUtYXNpYSB0aW1lem9uZS1hdGxhbnRpYyBcCi0gICAgICAgICAgICAgdGltZXpvbmUtYXVzdHJhbGlhIHRpbWV6b25lLWV1cm9wZSB0aW1lem9uZS1pbmRpYW4gXAotICAgICAgICAgICAgIHRpbWV6b25lLWlzbzMxNjYudGFiIHRpbWV6b25lLXBhY2lmaWMgdGltZXpvbmUtem9uZS50YWIiCi0KLVMgPSAiJHtXT1JLRElSfSIKLQotREVGQVVMVF9USU1FWk9ORSA/PSAiVW5pdmVyc2FsIgotSU5TVEFMTF9USU1FWk9ORV9GSUxFID89ICIxIgotCi1UWk9ORVM9ICJhZnJpY2EgYW50YXJjdGljYSBhc2lhIGF1c3RyYWxhc2lhIGV1cm9wZSBub3J0aGFtZXJpY2Egc291dGhhbWVyaWNhICBcCi0gICAgICAgICBmYWN0b3J5IGV0Y2V0ZXJhIGJhY2t3YXJkIHN5c3RlbXYgXAotICAgICAgICAiCi0jIHBhY2lmaWNuZXcgCi0KLWRvX2NvbXBpbGUgKCkgewotICAgICAgICBmb3Igem9uZSBpbiAke1RaT05FU307IGRvIFwKLSAgICAgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS96aWMgLWQgJHtXT1JLRElSfSR7ZGF0YWRpcn0vem9uZWluZm8gLUwgL2Rldi9udWxsIFwKLSAgICAgICAgICAgICAgICAteSAke1N9L3llYXJpc3R5cGUuc2ggJHtTfS8ke3pvbmV9IDsgXAotICAgICAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3ppYyAtZCAke1dPUktESVJ9JHtkYXRhZGlyfS96b25laW5mby9wb3NpeCAtTCAvZGV2L251bGwgXAotICAgICAgICAgICAgICAgIC15ICR7U30veWVhcmlzdHlwZS5zaCAke1N9LyR7em9uZX0gOyBcCi0gICAgICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vemljIC1kICR7V09SS0RJUn0ke2RhdGFkaXJ9L3pvbmVpbmZvL3JpZ2h0IC1MICR7U30vbGVhcHNlY29uZHMgXAotICAgICAgICAgICAgICAgIC15ICR7U30veWVhcmlzdHlwZS5zaCAke1N9LyR7em9uZX0gOyBcCi0gICAgICAgIGRvbmUKLX0KLQotZG9faW5zdGFsbCAoKSB7Ci0gICAgICAgIGluc3RhbGwgLWQgJHtEfS8kZXhlY19wcmVmaXggJHtEfSR7ZGF0YWRpcn0vem9uZWluZm8KLSAgICAgICAgY3AgLXBQUiAke1N9LyRleGVjX3ByZWZpeCAke0R9LwotICAgICAgICAjIGxpYmMgaXMgcmVtb3Zpbmcgem9uZWluZm8gZmlsZXMgZnJvbSBwYWNrYWdlCi0gICAgICAgIGNwIC1wUCAiJHtTfS96b25lLnRhYiIgJHtEfSR7ZGF0YWRpcn0vem9uZWluZm8KLSAgICAgICAgY3AgLXBQICIke1N9L3pvbmUxOTcwLnRhYiIgJHtEfSR7ZGF0YWRpcn0vem9uZWluZm8KLSAgICAgICAgY3AgLXBQICIke1N9L2lzbzMxNjYudGFiIiAke0R9JHtkYXRhZGlyfS96b25laW5mbwotCi0gICAgICAgICMgSW5zdGFsbCBkZWZhdWx0IHRpbWV6b25lCi0gICAgICAgIGlmIFsgLWUgJHtEfSR7ZGF0YWRpcn0vem9uZWluZm8vJHtERUZBVUxUX1RJTUVaT05FfSBdOyB0aGVuCi0gICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9Ci0gICAgICAgICAgICBpZiBbICIke0lOU1RBTExfVElNRVpPTkVfRklMRX0iID0gIjEiIF07IHRoZW4KLSAgICAgICAgICAgICAgICBlY2hvICR7REVGQVVMVF9USU1FWk9ORX0gPiAke0R9JHtzeXNjb25mZGlyfS90aW1lem9uZQotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGxuIC1zICR7ZGF0YWRpcn0vem9uZWluZm8vJHtERUZBVUxUX1RJTUVaT05FfSAke0R9JHtzeXNjb25mZGlyfS9sb2NhbHRpbWUKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmJlcnJvciAiREVGQVVMVF9USU1FWk9ORSBpcyBzZXQgdG8gYW4gaW52YWxpZCB2YWx1ZS4iCi0gICAgICAgICAgICBleGl0IDEKLSAgICAgICAgZmkKLQotICAgICAgICBjaG93biAtUiByb290OnJvb3QgJHtEfQotfQotCi1wa2dfcG9zdGluc3RfJHtQTn0gKCkgewotCWV0Y19sdD0iJEQke3N5c2NvbmZkaXJ9L2xvY2FsdGltZSIKLQlzcmM9IiREJHtzeXNjb25mZGlyfS90aW1lem9uZSIKLQotCWlmIFsgLWUgJHtzcmN9IF0gOyB0aGVuCi0JCXR6PSQoc2VkIC1lICdzOiMuKjo6JyAtZSAnczpbWzpzcGFjZTpdXSo6OmcnIC1lICcvXiQvZCcgIiR7c3JjfSIpCi0JZmkKLQkKLQlpZiBbIC16ICIke3R6fSIgXSA7IHRoZW4KLQkJZXhpdCAwCi0JZmkKLQkKLQlpZiBbICEgLWUgIiREJHtkYXRhZGlyfS96b25laW5mby8ke3R6fSIgXSA7IHRoZW4KLQkJZWNobyAiWW91IGhhdmUgYW4gaW52YWxpZCBUSU1FWk9ORSBzZXR0aW5nIGluICR7c3JjfSIKLQkJZWNobyAiWW91ciAke2V0Y19sdH0gaGFzIGJlZW4gcmVzZXQgdG8gVW5pdmVyc2FsOyBlbmpveSEiCi0JCXR6PSJVbml2ZXJzYWwiCi0JCWVjaG8gIlVwZGF0aW5nICR7ZXRjX2x0fSB3aXRoICREJHtkYXRhZGlyfS96b25laW5mby8ke3R6fSIKLQkJaWYgWyAtTCAke2V0Y19sdH0gXSA7IHRoZW4KLQkJCXJtIC1mICIke2V0Y19sdH0iCi0JCWZpCi0JCWxuIC1zICIke2RhdGFkaXJ9L3pvbmVpbmZvLyR7dHp9IiAiJHtldGNfbHR9IgotCWZpCi19Ci0KLSMgUGFja2FnZXMgcHJpbWFyaWx5IG9yZ2FuaXplZCBieSBkaXJlY3Rvcnkgd2l0aCBhIG1ham9yIGNpdHkKLSMgaW4gbW9zdCB0aW1lIHpvbmVzIGluIHRoZSBiYXNlIHBhY2thZ2UKLQotUEFDS0FHRVMgPSAidHpkYXRhIHR6ZGF0YS1taXNjIHR6ZGF0YS1wb3NpeCB0emRhdGEtcmlnaHQgdHpkYXRhLWFmcmljYSBcCi0gICAgdHpkYXRhLWFtZXJpY2FzIHR6ZGF0YS1hbnRhcmN0aWNhIHR6ZGF0YS1hcmN0aWMgdHpkYXRhLWFzaWEgXAotICAgIHR6ZGF0YS1hdGxhbnRpYyB0emRhdGEtYXVzdHJhbGlhIHR6ZGF0YS1ldXJvcGUgdHpkYXRhLXBhY2lmaWMiCi0KLUZJTEVTX3R6ZGF0YS1hZnJpY2EgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQWZyaWNhLyoiCi1SUFJPVklERVNfdHpkYXRhLWFmcmljYSA9ICJ0emRhdGEtYWZyaWNhIgotCi1GSUxFU190emRhdGEtYW1lcmljYXMgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS8qICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9VUy8qICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0JyYXppbC8qICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQ2FuYWRhLyogICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9NZXhpY28vKiAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0NoaWxlLyoiCi1SUFJPVklERVNfdHpkYXRhLWFtZXJpY2FzID0gInR6ZGF0YS1hbWVyaWNhcyIKLQotRklMRVNfdHpkYXRhLWFudGFyY3RpY2EgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQW50YXJjdGljYS8qIgotUlBST1ZJREVTX3R6ZGF0YS1hbnRhcmN0aWNhID0gInR6ZGF0YS1hbnRhcmN0aWNhIgotCi1GSUxFU190emRhdGEtYXJjdGljICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0FyY3RpYy8qIgotUlBST1ZJREVTX3R6ZGF0YS1hcmN0aWMgPSAidHpkYXRhLWFyY3RpYyIKLQotRklMRVNfdHpkYXRhLWFzaWEgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS8qICAgICAgICBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9JbmRpYW4vKiAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL01pZGVhc3QvKiIKLVJQUk9WSURFU190emRhdGEtYXNpYSA9ICJ0emRhdGEtYXNpYSIKLQotRklMRVNfdHpkYXRhLWF0bGFudGljICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0F0bGFudGljLyoiCi1SUFJPVklERVNfdHpkYXRhLWF0bGFudGljID0gInR6ZGF0YS1hdGxhbnRpYyIKLQotRklMRVNfdHpkYXRhLWF1c3RyYWxpYSArPSAiJHtkYXRhZGlyfS96b25laW5mby9BdXN0cmFsaWEvKiIKLVJQUk9WSURFU190emRhdGEtYXVzdHJhbGlhID0gInR6ZGF0YS1hdXN0cmFsaWEiCi0KLUZJTEVTX3R6ZGF0YS1ldXJvcGUgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vRXVyb3BlLyoiCi1SUFJPVklERVNfdHpkYXRhLWV1cm9wZSA9ICJ0emRhdGEtZXVyb3BlIgotCi1GSUxFU190emRhdGEtcGFjaWZpYyArPSAiJHtkYXRhZGlyfS96b25laW5mby9QYWNpZmljLyoiCi1SUFJPVklERVNfdHpkYXRhLXBhY2lmaWMgPSAidHpkYXRhLXBhY2lmaWMiCi0KLUZJTEVTX3R6ZGF0YS1wb3NpeCArPSAiJHtkYXRhZGlyfS96b25laW5mby9wb3NpeC8qIgotUlBST1ZJREVTX3R6ZGF0YS1wb3NpeCA9ICJ0emRhdGEtcG9zaXgiCi0KLUZJTEVTX3R6ZGF0YS1yaWdodCArPSAiJHtkYXRhZGlyfS96b25laW5mby9yaWdodC8qIgotUlBST1ZJREVTX3R6ZGF0YS1yaWdodCA9ICJ0emRhdGEtcmlnaHQiCi0KLQotRklMRVNfdHpkYXRhLW1pc2MgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQ3ViYSAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRWd5cHQgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRWlyZSAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRmFjdG9yeSAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR0ItRWlyZSAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSG9uZ2tvbmcgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSWNlbGFuZCAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSXJhbiAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSXNyYWVsICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSmFtYWljYSAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSmFwYW4gICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vS3dhamFsZWluICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTGlieWEgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTmF2YWpvICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUG9sYW5kICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUG9ydHVnYWwgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vU2luZ2Fwb3JlICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vVHVya2V5IgotUlBST1ZJREVTX3R6ZGF0YS1taXNjID0gInR6ZGF0YS1taXNjIgotCi0KLUZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL1BhY2lmaWMvSG9ub2x1bHUgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvQW5jaG9yYWdlICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvTG9zX0FuZ2VsZXMgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvRGVudmVyICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvQ2hpY2FnbyAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvTmV3X1lvcmsgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvQ2FyYWNhcyAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvU2FvX1BhdWxvICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0V1cm9wZS9Mb25kb24gICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0V1cm9wZS9QYXJpcyAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FmcmljYS9DYWlybyAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0V1cm9wZS9Nb3Njb3cgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FzaWEvRHViYWkgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FzaWEvS2FyYWNoaSAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FzaWEvRGhha2EgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FzaWEvQmFua29rICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FzaWEvSG9uZ19Lb25nICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FzaWEvVG9reW8gICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0F1c3RyYWxpYS9EYXJ3aW4gICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0F1c3RyYWxpYS9BZGVsYWlkZSAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0F1c3RyYWxpYS9CcmlzYmFuZSAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0F1c3RyYWxpYS9TeWRuZXkgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1BhY2lmaWMvTm91bWVhICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0NFVCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0NTVDZDRFQgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0VFVCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0VTVCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0VTVDVFRFQgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0dCICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0dNVCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0dNVCswICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0dNVC0wICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0dNVDAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0dyZWVud2ljaCAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0hTVCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL01FVCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL01TVCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL01TVDdNRFQgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL05aICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL05aLUNIQVQgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1BSQyAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1BTVDhQRFQgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1JPQyAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1JPSyAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1VDVCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1VUQyAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1VuaXZlcnNhbCAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1ctU1UgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1dFVCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1p1bHUgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL3pvbmUudGFiICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL3pvbmUxOTcwLnRhYiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL2lzbzMxNjYudGFiICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0V0Yy8qIgotCi1DT05GRklMRVNfJHtQTn0gKz0gIiR7QCAiJHtzeXNjb25mZGlyfS90aW1lem9uZSIgaWYgYmIudXRpbHMudG9fYm9vbGVhbihkLmdldFZhcignSU5TVEFMTF9USU1FWk9ORV9GSUxFJykpIGVsc2UgIiIgfSIKLUNPTkZGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS9sb2NhbHRpbWUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6ZGF0YS90emRhdGFfMjAxOGMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6ZGF0YS90emRhdGFfMjAxOGMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY1ZWMxYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpkYXRhL3R6ZGF0YV8yMDE4Yy5iYgpAQCAtMCwwICsxLDIxNSBAQAorU1VNTUFSWSA9ICJUaW1lem9uZSBkYXRhIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5pYW5hLm9yZy90aW1lLXpvbmVzIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJQRCAmIEJTRCAmIEJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWM2NzljOWQ2YjAyYmMyNzU3YjNlYWY4ZjUzYzQzZmJhIgorCitERVBFTkRTID0gInR6Y29kZS1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5pYW5hLm9yZy90aW1lLXpvbmVzL3JlcG9zaXRvcnkvcmVsZWFzZXMvdHpkYXRhJHtQVn0udGFyLmd6O25hbWU9dHpkYXRhIgorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly93d3cuaWFuYS5vcmcvdGltZS16b25lcyIKKworU1JDX1VSSVt0emRhdGEubWQ1c3VtXSA9ICJjNDEyYjE1MzFhZGVmMWJlN2E2NDVhYjczNGY4NmFjYyIKK1NSQ19VUklbdHpkYXRhLnNoYTI1NnN1bV0gPSAiMjgyNWMzZTRiN2VmNTIwZjI0ZDM5M2JjYzAyOTQyZjk3NjJmZmQzZTdmYzliMjM4NTA3ODllZDhmMjI5MzNmNiIKKworaW5oZXJpdCBhbGxhcmNoCisKK1JDT05GTElDVFNfJHtQTn0gPSAidGltZXpvbmVzIHRpbWV6b25lLWFmcmljYSB0aW1lem9uZS1hbWVyaWNhIHRpbWV6b25lLWFudGFyY3RpY2EgXAorICAgICAgICAgICAgIHRpbWV6b25lLWFyY3RpYyB0aW1lem9uZS1hc2lhIHRpbWV6b25lLWF0bGFudGljIFwKKyAgICAgICAgICAgICB0aW1lem9uZS1hdXN0cmFsaWEgdGltZXpvbmUtZXVyb3BlIHRpbWV6b25lLWluZGlhbiBcCisgICAgICAgICAgICAgdGltZXpvbmUtaXNvMzE2Ni50YWIgdGltZXpvbmUtcGFjaWZpYyB0aW1lem9uZS16b25lLnRhYiIKKworUyA9ICIke1dPUktESVJ9IgorCitERUZBVUxUX1RJTUVaT05FID89ICJVbml2ZXJzYWwiCitJTlNUQUxMX1RJTUVaT05FX0ZJTEUgPz0gIjEiCisKK1RaT05FUz0gImFmcmljYSBhbnRhcmN0aWNhIGFzaWEgYXVzdHJhbGFzaWEgZXVyb3BlIG5vcnRoYW1lcmljYSBzb3V0aGFtZXJpY2EgIFwKKyAgICAgICAgIGZhY3RvcnkgZXRjZXRlcmEgYmFja3dhcmQgc3lzdGVtdiBcCisgICAgICAgICIKKyMgcGFjaWZpY25ldyAKKworZG9fY29tcGlsZSAoKSB7CisgICAgICAgIGZvciB6b25lIGluICR7VFpPTkVTfTsgZG8gXAorICAgICAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3ppYyAtZCAke1dPUktESVJ9JHtkYXRhZGlyfS96b25laW5mbyAtTCAvZGV2L251bGwgXAorICAgICAgICAgICAgICAgIC15ICR7U30veWVhcmlzdHlwZS5zaCAke1N9LyR7em9uZX0gOyBcCisgICAgICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vemljIC1kICR7V09SS0RJUn0ke2RhdGFkaXJ9L3pvbmVpbmZvL3Bvc2l4IC1MIC9kZXYvbnVsbCBcCisgICAgICAgICAgICAgICAgLXkgJHtTfS95ZWFyaXN0eXBlLnNoICR7U30vJHt6b25lfSA7IFwKKyAgICAgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS96aWMgLWQgJHtXT1JLRElSfSR7ZGF0YWRpcn0vem9uZWluZm8vcmlnaHQgLUwgJHtTfS9sZWFwc2Vjb25kcyBcCisgICAgICAgICAgICAgICAgLXkgJHtTfS95ZWFyaXN0eXBlLnNoICR7U30vJHt6b25lfSA7IFwKKyAgICAgICAgZG9uZQorfQorCitkb19pbnN0YWxsICgpIHsKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9LyRleGVjX3ByZWZpeCAke0R9JHtkYXRhZGlyfS96b25laW5mbworICAgICAgICBjcCAtcFBSICR7U30vJGV4ZWNfcHJlZml4ICR7RH0vCisgICAgICAgICMgbGliYyBpcyByZW1vdmluZyB6b25laW5mbyBmaWxlcyBmcm9tIHBhY2thZ2UKKyAgICAgICAgY3AgLXBQICIke1N9L3pvbmUudGFiIiAke0R9JHtkYXRhZGlyfS96b25laW5mbworICAgICAgICBjcCAtcFAgIiR7U30vem9uZTE5NzAudGFiIiAke0R9JHtkYXRhZGlyfS96b25laW5mbworICAgICAgICBjcCAtcFAgIiR7U30vaXNvMzE2Ni50YWIiICR7RH0ke2RhdGFkaXJ9L3pvbmVpbmZvCisKKyAgICAgICAgIyBJbnN0YWxsIGRlZmF1bHQgdGltZXpvbmUKKyAgICAgICAgaWYgWyAtZSAke0R9JHtkYXRhZGlyfS96b25laW5mby8ke0RFRkFVTFRfVElNRVpPTkV9IF07IHRoZW4KKyAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKyAgICAgICAgICAgIGlmIFsgIiR7SU5TVEFMTF9USU1FWk9ORV9GSUxFfSIgPSAiMSIgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gJHtERUZBVUxUX1RJTUVaT05FfSA+ICR7RH0ke3N5c2NvbmZkaXJ9L3RpbWV6b25lCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgbG4gLXMgJHtkYXRhZGlyfS96b25laW5mby8ke0RFRkFVTFRfVElNRVpPTkV9ICR7RH0ke3N5c2NvbmZkaXJ9L2xvY2FsdGltZQorICAgICAgICBlbHNlCisgICAgICAgICAgICBiYmVycm9yICJERUZBVUxUX1RJTUVaT05FIGlzIHNldCB0byBhbiBpbnZhbGlkIHZhbHVlLiIKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorCisgICAgICAgIGNob3duIC1SIHJvb3Q6cm9vdCAke0R9Cit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJZXRjX2x0PSIkRCR7c3lzY29uZmRpcn0vbG9jYWx0aW1lIgorCXNyYz0iJEQke3N5c2NvbmZkaXJ9L3RpbWV6b25lIgorCisJaWYgWyAtZSAke3NyY30gXSA7IHRoZW4KKwkJdHo9JChzZWQgLWUgJ3M6Iy4qOjonIC1lICdzOltbOnNwYWNlOl1dKjo6ZycgLWUgJy9eJC9kJyAiJHtzcmN9IikKKwlmaQorCQorCWlmIFsgLXogIiR7dHp9IiBdIDsgdGhlbgorCQlleGl0IDAKKwlmaQorCQorCWlmIFsgISAtZSAiJEQke2RhdGFkaXJ9L3pvbmVpbmZvLyR7dHp9IiBdIDsgdGhlbgorCQllY2hvICJZb3UgaGF2ZSBhbiBpbnZhbGlkIFRJTUVaT05FIHNldHRpbmcgaW4gJHtzcmN9IgorCQllY2hvICJZb3VyICR7ZXRjX2x0fSBoYXMgYmVlbiByZXNldCB0byBVbml2ZXJzYWw7IGVuam95ISIKKwkJdHo9IlVuaXZlcnNhbCIKKwkJZWNobyAiVXBkYXRpbmcgJHtldGNfbHR9IHdpdGggJEQke2RhdGFkaXJ9L3pvbmVpbmZvLyR7dHp9IgorCQlpZiBbIC1MICR7ZXRjX2x0fSBdIDsgdGhlbgorCQkJcm0gLWYgIiR7ZXRjX2x0fSIKKwkJZmkKKwkJbG4gLXMgIiR7ZGF0YWRpcn0vem9uZWluZm8vJHt0en0iICIke2V0Y19sdH0iCisJZmkKK30KKworIyBQYWNrYWdlcyBwcmltYXJpbHkgb3JnYW5pemVkIGJ5IGRpcmVjdG9yeSB3aXRoIGEgbWFqb3IgY2l0eQorIyBpbiBtb3N0IHRpbWUgem9uZXMgaW4gdGhlIGJhc2UgcGFja2FnZQorCitQQUNLQUdFUyA9ICJ0emRhdGEgdHpkYXRhLW1pc2MgdHpkYXRhLXBvc2l4IHR6ZGF0YS1yaWdodCB0emRhdGEtYWZyaWNhIFwKKyAgICB0emRhdGEtYW1lcmljYXMgdHpkYXRhLWFudGFyY3RpY2EgdHpkYXRhLWFyY3RpYyB0emRhdGEtYXNpYSBcCisgICAgdHpkYXRhLWF0bGFudGljIHR6ZGF0YS1hdXN0cmFsaWEgdHpkYXRhLWV1cm9wZSB0emRhdGEtcGFjaWZpYyIKKworRklMRVNfdHpkYXRhLWFmcmljYSArPSAiJHtkYXRhZGlyfS96b25laW5mby9BZnJpY2EvKiIKK1JQUk9WSURFU190emRhdGEtYWZyaWNhID0gInR6ZGF0YS1hZnJpY2EiCisKK0ZJTEVTX3R6ZGF0YS1hbWVyaWNhcyArPSAiJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhLyogIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1VTLyogICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQnJhemlsLyogICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9DYW5hZGEvKiAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL01leGljby8qICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQ2hpbGUvKiIKK1JQUk9WSURFU190emRhdGEtYW1lcmljYXMgPSAidHpkYXRhLWFtZXJpY2FzIgorCitGSUxFU190emRhdGEtYW50YXJjdGljYSArPSAiJHtkYXRhZGlyfS96b25laW5mby9BbnRhcmN0aWNhLyoiCitSUFJPVklERVNfdHpkYXRhLWFudGFyY3RpY2EgPSAidHpkYXRhLWFudGFyY3RpY2EiCisKK0ZJTEVTX3R6ZGF0YS1hcmN0aWMgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQXJjdGljLyoiCitSUFJPVklERVNfdHpkYXRhLWFyY3RpYyA9ICJ0emRhdGEtYXJjdGljIgorCitGSUxFU190emRhdGEtYXNpYSArPSAiJHtkYXRhZGlyfS96b25laW5mby9Bc2lhLyogICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0luZGlhbi8qICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTWlkZWFzdC8qIgorUlBST1ZJREVTX3R6ZGF0YS1hc2lhID0gInR6ZGF0YS1hc2lhIgorCitGSUxFU190emRhdGEtYXRsYW50aWMgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQXRsYW50aWMvKiIKK1JQUk9WSURFU190emRhdGEtYXRsYW50aWMgPSAidHpkYXRhLWF0bGFudGljIgorCitGSUxFU190emRhdGEtYXVzdHJhbGlhICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0F1c3RyYWxpYS8qIgorUlBST1ZJREVTX3R6ZGF0YS1hdXN0cmFsaWEgPSAidHpkYXRhLWF1c3RyYWxpYSIKKworRklMRVNfdHpkYXRhLWV1cm9wZSArPSAiJHtkYXRhZGlyfS96b25laW5mby9FdXJvcGUvKiIKK1JQUk9WSURFU190emRhdGEtZXVyb3BlID0gInR6ZGF0YS1ldXJvcGUiCisKK0ZJTEVTX3R6ZGF0YS1wYWNpZmljICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL1BhY2lmaWMvKiIKK1JQUk9WSURFU190emRhdGEtcGFjaWZpYyA9ICJ0emRhdGEtcGFjaWZpYyIKKworRklMRVNfdHpkYXRhLXBvc2l4ICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL3Bvc2l4LyoiCitSUFJPVklERVNfdHpkYXRhLXBvc2l4ID0gInR6ZGF0YS1wb3NpeCIKKworRklMRVNfdHpkYXRhLXJpZ2h0ICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL3JpZ2h0LyoiCitSUFJPVklERVNfdHpkYXRhLXJpZ2h0ID0gInR6ZGF0YS1yaWdodCIKKworCitGSUxFU190emRhdGEtbWlzYyArPSAiJHtkYXRhZGlyfS96b25laW5mby9DdWJhICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FZ3lwdCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FaXJlICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9GYWN0b3J5ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HQi1FaXJlICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Ib25na29uZyAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9JY2VsYW5kICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9JcmFuICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Jc3JhZWwgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9KYW1haWNhICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9KYXBhbiAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Ld2FqYWxlaW4gICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9MaWJ5YSAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9OYXZham8gICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Qb2xhbmQgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Qb3J0dWdhbCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9TaW5nYXBvcmUgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9UdXJrZXkiCitSUFJPVklERVNfdHpkYXRhLW1pc2MgPSAidHpkYXRhLW1pc2MiCisKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vUGFjaWZpYy9Ib25vbHVsdSAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9BbmNob3JhZ2UgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9Mb3NfQW5nZWxlcyAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9EZW52ZXIgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9DaGljYWdvICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9OZXdfWW9yayAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9DYXJhY2FzICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS9TYW9fUGF1bG8gICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRXVyb3BlL0xvbmRvbiAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRXVyb3BlL1BhcmlzICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQWZyaWNhL0NhaXJvICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRXVyb3BlL01vc2NvdyAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS9EdWJhaSAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS9LYXJhY2hpICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS9EaGFrYSAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS9CYW5rb2sgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS9Ib25nX0tvbmcgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS9Ub2t5byAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXVzdHJhbGlhL0RhcndpbiAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXVzdHJhbGlhL0FkZWxhaWRlICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXVzdHJhbGlhL0JyaXNiYW5lICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQXVzdHJhbGlhL1N5ZG5leSAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUGFjaWZpYy9Ob3VtZWEgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQ0VUICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQ1NUNkNEVCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRUVUICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRVNUICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRVNUNUVEVCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR0IgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR01UICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR01UKzAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR01ULTAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR01UMCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR3JlZW53aWNoICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSFNUICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTUVUICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTVNUICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTVNUN01EVCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTlogICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTlotQ0hBVCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUFJDICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUFNUOFBEVCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUk9DICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUk9LICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vVUNUICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vVVRDICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vVW5pdmVyc2FsICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vVy1TVSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vV0VUICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vWnVsdSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vem9uZS50YWIgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vem9uZTE5NzAudGFiICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vaXNvMzE2Ni50YWIgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRXRjLyoiCisKK0NPTkZGSUxFU18ke1BOfSArPSAiJHtAICIke3N5c2NvbmZkaXJ9L3RpbWV6b25lIiBpZiBiYi51dGlscy50b19ib29sZWFuKGQuZ2V0VmFyKCdJTlNUQUxMX1RJTUVaT05FX0ZJTEUnKSkgZWxzZSAiIiB9IgorQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L2xvY2FsdGltZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXBfNi4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcF82LjAuYmIKaW5kZXggZDRlZTQ4Ny4uMTA1ZDA0OCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcF82LjAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcF82LjAuYmIKQEAgLTIwLDYgKzIwLDcgQEAKIAlmaWxlOi8vMTgtY3ZlLTIwMTQtOTkxMy11bnppcC1idWZmZXItb3ZlcmZsb3cucGF0Y2ggXAogCWZpbGU6Ly8xOS1jdmUtMjAxNi05ODQ0LXppcGluZm8tYnVmZmVyLW92ZXJmbG93LnBhdGNoIFwKICIKK1VQU1RSRUFNX1ZFUlNJT05fVU5LTk9XTiA9ICIxIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiNjJiNDkwNDA3NDg5NTIxZGI4NjNiNTIzYTdmODYzNzUiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDM2ZDk2OTkxNjQ2ZDA0NDllZDBhYTk1MmU0ZmJlMjFiNDc2Y2U5OTRhYmMyNzZlNDlkMzBlNjg2NzA4YmQzNyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2dfNS4xNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2dfNS4xNS5iYgppbmRleCA5NjU5ZjI3Li4zZDBiNzJlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nXzUuMTUuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZ181LjE1LmJiCkBAIC0yMSw4ICsyMSw3IEBACiBVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy93YXRjaGRvZy9maWxlcy93YXRjaGRvZy8iCiBVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICIvd2F0Y2hkb2cvKD9QPHB2ZXI+KFxkK1tcLlwtX10qKSspLyIKIAotaW5oZXJpdCBhdXRvdG9vbHMKLWluaGVyaXQgdXBkYXRlLXJjLmQKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1yYy5kIHN5c3RlbWQKIAogREVQRU5EU19hcHBlbmRfbGliYy1tdXNsID0gIiBsaWJ0aXJwYyAiCiBDRkxBR1NfYXBwZW5kX2xpYmMtbXVzbCA9ICIgLUkke1NUQUdJTkdfSU5DRElSfS90aXJwYyAiCkBAIC0zNywxMiArMzYsMTggQEAKIElOSVRTQ1JJUFRfTkFNRV8ke1BOfS1rZWVwYWxpdmUgPSAid2Rfa2VlcGFsaXZlIgogSU5JVFNDUklQVF9QQVJBTVNfJHtQTn0ta2VlcGFsaXZlID0gInN0YXJ0IDE1IDEgMiAzIDQgNSAuIHN0b3AgODUgMCA2IC4iCiAKLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCWluc3RhbGwgLUQgJHtTfS9yZWRoYXQvd2F0Y2hkb2cuaW5pdCAke0R9LyR7c3lzY29uZmRpcn0vaW5pdC5kL3dhdGNoZG9nLnNoCi0gICAgaW5zdGFsbCAtRG0gMDc1NSAke1dPUktESVJ9L3dkX2tlZXBhbGl2ZS5pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC93ZF9rZWVwYWxpdmUKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJ3YXRjaGRvZy5zZXJ2aWNlIHdkX2tlZXBhbGl2ZS5zZXJ2aWNlIgogCi0gICAgIyB3YXRjaGRvZy5jb25mIGlzIHByb3ZpZGVkIGJ5IHRoZSB3YXRjaGRvZy1jb25maWcgcmVjaXBlCi0gICAgcm0gJHtEfSR7c3lzY29uZmRpcn0vd2F0Y2hkb2cuY29uZgorZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfQorCWluc3RhbGwgLW0gMDY0NCAke1N9L2RlYmlhbi93YXRjaGRvZy5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9CisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vZGViaWFuL3dkX2tlZXBhbGl2ZS5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9CisKKwlpbnN0YWxsIC1EICR7U30vcmVkaGF0L3dhdGNoZG9nLmluaXQgJHtEfS8ke3N5c2NvbmZkaXJ9L2luaXQuZC93YXRjaGRvZy5zaAorCWluc3RhbGwgLURtIDA3NTUgJHtXT1JLRElSfS93ZF9rZWVwYWxpdmUuaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvd2Rfa2VlcGFsaXZlCisKKwkjIHdhdGNoZG9nLmNvbmYgaXMgcHJvdmlkZWQgYnkgdGhlIHdhdGNoZG9nLWNvbmZpZyByZWNpcGUKKwlybSAke0R9JHtzeXNjb25mZGlyfS93YXRjaGRvZy5jb25mCiB9CiAKIFBBQ0tBR0VTID0rICIke1BOfS1rZWVwYWxpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hkZy11dGlscy94ZGctdXRpbHNfMS4xLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hkZy11dGlscy94ZGctdXRpbHNfMS4xLjEuYmIKaW5kZXggNTAwNzQ5OC4uMzRmOGQxMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94ZGctdXRpbHMveGRnLXV0aWxzXzEuMS4xLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGRnLXV0aWxzL3hkZy11dGlsc18xLjEuMS5iYgpAQCAtMSw1ICsxLDUgQEAKIFNVTU1BUlkgPSAiQmFzaWMgZGVza3RvcCBpbnRlZ3JhdGlvbiBmdW5jdGlvbnMiCi0KK0hPTUVQQUdFID0gImh0dHBzOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL3hkZy11dGlscy8iCiBERVNDUklQVElPTiA9ICJUaGUgeGRnLXV0aWxzIHBhY2thZ2UgaXMgYSBzZXQgb2Ygc2ltcGxlIHNjcmlwdHMgdGhhdCBwcm92aWRlIGJhc2ljIFwKIGRlc2t0b3AgaW50ZWdyYXRpb24gZnVuY3Rpb25zIGZvciBhbnkgRnJlZSBEZXNrdG9wLCBzdWNoIGFzIExpbnV4LiBcCiBUaGV5IGFyZSBpbnRlbmRlZCB0byBwcm92aWRlIGEgc2V0IG9mIGRlZmFjdG8gc3RhbmRhcmRzLiBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLUNWRS0yMDEzLTQzNDIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLUNWRS0yMDEzLTQzNDIucGF0Y2gKaW5kZXggYzQ0YzVhMS4uODUyYTQzZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC1DVkUtMjAxMy00MzQyLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQtQ1ZFLTIwMTMtNDM0Mi5wYXRjaApAQCAtMTEsNiArMTEsNyBAQAogCiBDVkU6IENWRS0yMDEzLTQzNDIKIFNpZ25lZC1vZmYtYnk6IExpIFdhbmcgPGxpLndhbmdAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKIC0tLQogIHhpbmV0ZC9idWlsdGlucy5jIHwgICAgMiArLQogIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkXzIuMy4xNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZF8yLjMuMTUuYmIKaW5kZXggNmJmYWFiZS4uMWJlYjU0NSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkXzIuMy4xNS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGRfMi4zLjE1LmJiCkBAIC0yNCw2ICsyNCw3IEBACiAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUtVXNlLUhBVkVfU1lTX1JFU09VUkNFX0gtdG8tZ3VhcmQtc3lzLXJlc291LnBhdGNoIFwKICAgICAgIGZpbGU6Ly94aW5ldGQuc2VydmljZSBcCiAgICAgICAiCitVUFNUUkVBTV9WRVJTSU9OX1VOS05PV04gPSAiMSIKIAogU1JDUkVWID0gIjY4YmI5YWI5ZTlmMjE0YWQ4YTIzMjJmMjhhYzFkNjczM2U3MGJjMjQiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvemlwL3ppcF8zLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3ppcC96aXBfMy4wLmJiCmluZGV4IDA4NzQyM2EuLmRlNzc5ZTkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvemlwL3ppcF8zLjAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC96aXAvemlwXzMuMC5iYgpAQCAtMTEsNiArMTEsNyBAQAogCiBTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9pbmZvemlwL1ppcCUyMDMueCUyMCUyOGxhdGVzdCUyOS8zLjAvemlwMzAudGFyLmd6IFwKICAgICAgICAgICAgZmlsZTovL2ZpeC1zZWN1cml0eS1mb3JtYXQucGF0Y2giCitVUFNUUkVBTV9WRVJTSU9OX1VOS05PV04gPSAiMSIKIAogU1JDX1VSSVttZDVzdW1dID0gIjdiNzQ1NTFlNjNmOGVlNmFhYjZmYmM4NjY3NmMwZDM3IgogU1JDX1VSSVtzaGEyNTZzdW1dID0gImYwZThiYjFmOWI3ZWIwYjAxMjg1NDk1YTI2OTlkZjNhNGI3NjY3ODRjMTc2NWE4ZjFhZWVkZjYzYzA4MDYzNjkiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2VwaXBoYW55L2VwaXBoYW55XzMuMjIuNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZXBpcGhhbnkvZXBpcGhhbnlfMy4yMi42LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTFmZWYxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZXBpcGhhbnkvZXBpcGhhbnlfMy4yMi42LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotU1VNTUFSWSA9ICJXZWJLaXQgYmFzZWQgd2ViIGJyb3dzZXIgZm9yIEdOT01FIgotTElDRU5TRSA9ICJHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKLQotREVQRU5EUyA9ICJsaWJzb3VwLTIuNCB3ZWJraXRndGsgZ3RrKzMgaXNvLWNvZGVzIGF2YWhpIGxpYm5vdGlmeSBnY3IgXAotCSAgIGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMgZ25vbWUtZGVza3RvcDMgbGlieG1sMi1uYXRpdmUgXAotCSAgIGludGx0b29sLW5hdGl2ZSBnbGliLTIuMCBnbGliLTIuMC1uYXRpdmUiCi0KLWluaGVyaXQgZ25vbWViYXNlIGdzZXR0aW5ncyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGdldHRleHQKLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLXllbHAubTQtZHJvcC10aGUtY2hlY2stZm9yLWl0c3Rvb2wucGF0Y2giCi1TUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJlMDg3NjJjNmJiMDFjNGQyOTFiM2QyMmM3YWRiMWE2NSIKLVNSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImRlN2VhODdkYzQ1MDcwMmJkZTYyMDAzM2Y5ZTJjZTgwNzg1OTcyN2QwMDczOTZkODZiMDlmMmI4MjM5N2ZjYzIiCi0KLUVYVFJBX09FQ09ORiArPSAiIC0td2l0aC1kaXN0cmlidXRvci1uYW1lPSR7RElTVFJPfSIKLQotZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7Ci0gICAgc2VkIC1pIC1lIHM6aGVscDo6ZyAke1N9L01ha2VmaWxlLmFtCi19Ci0KLUZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2FwcGRhdGEgJHtkYXRhZGlyfS9kYnVzLTEgJHtkYXRhZGlyfS9nbm9tZS1zaGVsbC9zZWFyY2gtcHJvdmlkZXJzIgotUkRFUEVORFNfJHtQTn0gPSAiaXNvLWNvZGVzIGFkd2FpdGEtaWNvbi10aGVtZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZXBpcGhhbnkvZXBpcGhhbnlfMy4yNC4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9lcGlwaGFueS9lcGlwaGFueV8zLjI0LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUwN2QyMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZXBpcGhhbnkvZXBpcGhhbnlfMy4yNC4zLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiV2ViS2l0IGJhc2VkIHdlYiBicm93c2VyIGZvciBHTk9NRSIKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK0RFUEVORFMgPSAibGlic291cC0yLjQgd2Via2l0Z3RrIGd0ayszIGlzby1jb2RlcyBhdmFoaSBsaWJub3RpZnkgZ2NyIFwKKwkgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIGdub21lLWRlc2t0b3AzIGxpYnhtbDItbmF0aXZlIFwKKwkgICBnbGliLTIuMCBnbGliLTIuMC1uYXRpdmUganNvbi1nbGliIgorCitpbmhlcml0IGdub21lYmFzZSBnc2V0dGluZ3MgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnZXR0ZXh0CitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS15ZWxwLm00LWRyb3AtdGhlLWNoZWNrLWZvci1pdHN0b29sLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWJvb2ttYXJrcy1DaGVjay1mb3ItcmV0dXJuLXZhbHVlLW9mLWZyZWFkLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiYzAyMjFhZWM2YTA4OTM1ZTY4NTRlYWE5ZGU5NDUxZWYiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJmZWY1MTY3NjMxMGQ5ZjM3ZTE4YzliMmQ3NzgyNTQyMzJlYjE3Y2NjZDk4OGMyZDFlY2Y0MmM3YjI5NjNhMTU0IgorCitFWFRSQV9PRUNPTkYgKz0gIiAtLXdpdGgtZGlzdHJpYnV0b3ItbmFtZT0ke0RJU1RST30gLS1lbmFibGUtZGVidWc9bm8iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHNlZCAtaSAtZSBzOmhlbHA6OmcgJHtTfS9NYWtlZmlsZS5hbQorfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9kYnVzLTEgJHtkYXRhZGlyfS9nbm9tZS1zaGVsbC9zZWFyY2gtcHJvdmlkZXJzIgorUkRFUEVORFNfJHtQTn0gPSAiaXNvLWNvZGVzIGFkd2FpdGEtaWNvbi10aGVtZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZXBpcGhhbnkvZmlsZXMvMDAwMS1ib29rbWFya3MtQ2hlY2stZm9yLXJldHVybi12YWx1ZS1vZi1mcmVhZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZXBpcGhhbnkvZmlsZXMvMDAwMS1ib29rbWFya3MtQ2hlY2stZm9yLXJldHVybi12YWx1ZS1vZi1mcmVhZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGNkMzk0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9lcGlwaGFueS9maWxlcy8wMDAxLWJvb2ttYXJrcy1DaGVjay1mb3ItcmV0dXJuLXZhbHVlLW9mLWZyZWFkLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gYWEyMTc2YmUzMmVlZDI1NzhkYTgyZjM0ZDMxMTQ4ZjkzNGMxMWMzNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDI4IEp1biAyMDE3IDE3OjAzOjQ1IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGJvb2ttYXJrczogQ2hlY2sgZm9yIHJldHVybiB2YWx1ZSBvZiBmcmVhZCgpCisKK0ZpeGVzIGJlbG93IGNvbXBpbGVyIGVycm9yCitpZ25vcmluZyByZXR1cm4gdmFsdWUgb2YgJ2ZyZWFkJywgZGVjbGFyZWQgd2l0aCBhdHRyaWJ1dGUgd2Fybl91bnVzZWRfcmVzdWx0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL2Jvb2ttYXJrcy9lcGh5LWJvb2ttYXJrLmMgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9ib29rbWFya3MvZXBoeS1ib29rbWFyay5jIGIvc3JjL2Jvb2ttYXJrcy9lcGh5LWJvb2ttYXJrLmMKK2luZGV4IGZmMDIzOWIuLjg2MzNjZTQgMTAwNjQ0CistLS0gYS9zcmMvYm9va21hcmtzL2VwaHktYm9va21hcmsuYworKysrIGIvc3JjL2Jvb2ttYXJrcy9lcGh5LWJvb2ttYXJrLmMKK0BAIC0yMTcsNyArMjE3LDggQEAgZXBoeV9ib29rbWFya19pbml0IChFcGh5Qm9va21hcmsgKnNlbGYpCisgICBieXRlcyA9IGdfbWFsbG9jIChudW1fYnl0ZXMpOworIAorICAgZnAgPSBmb3BlbiAoIi9kZXYvdXJhbmRvbSIsICJyIik7CistICBmcmVhZCAoYnl0ZXMsIHNpemVvZiAoZ3VpbnQ4KSwgbnVtX2J5dGVzLCBmcCk7CisrICBpZiAoZnJlYWQgKGJ5dGVzLCBzaXplb2YgKGd1aW50OCksIG51bV9ieXRlcywgZnApICE9IG51bV9ieXRlcykKKysgICAgZ193YXJuaW5nKCJVbmFibGUgdG8gcmVhZCBkYXRhIGZyb20gL2Rldi91cmFuZG9tXG4iKTsKKyAKKyAgIHNlbGYtPmlkID0gZ19tYWxsb2MwIChJRF9MRU4gKyAxKTsKKyAgIGZvciAoZ3NpemUgaSA9IDA7IGkgPCBudW1fYnl0ZXM7IGkrKykgeworLS0gCisyLjEzLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nY3IvZ2NyXzMuMjAuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2NyL2djcl8zLjIwLjAuYmIKaW5kZXggZjMxYWJjZS4uNDQ1MGUxNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nY3IvZ2NyXzMuMjAuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2djci9nY3JfMy4yMC4wLmJiCkBAIC01LDcgKzUsOCBAQAogTElDRU5TRSA9ICJHUEx2MiIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU1Y2E4MTdjY2I3ZDViNWI2NjM1NTY5MGU5YWJjNjA1IgogCi1ERVBFTkRTID0gImludGx0b29sLW5hdGl2ZSBndGsrMyBwMTEta2l0IGdsaWItMi4wIGxpYmdjcnlwdCIKK0RFUEVORFMgPSAiaW50bHRvb2wtbmF0aXZlIGd0ayszIHAxMS1raXQgZ2xpYi0yLjAgbGliZ2NyeXB0IFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0dJX0RBVEFfRU5BQkxFRCcsICdUcnVlJywgJ2xpYnhzbHQtbmF0aXZlJywgJycsIGQpfSIKIAogaW5oZXJpdCBhdXRvdG9vbHMgZ25vbWViYXNlIGd0ay1pY29uLWNhY2hlIGd0ay1kb2MgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiB2YWxhIGdvYmplY3QtaW50cm9zcGVjdGlvbgogIyBkZXBlbmRzIG9uIGd0ayszLCBidXQgYWxzbyB4MTEgdGhyb3VnaCBndGsrLXgxMQpAQCAtMjMsMTYgKzI0LDMgQEAKIAogIyBodHRwOi8vZXJyb3JzLnlvY3RvcHJvamVjdC5vcmcvRXJyb3JzL0RldGFpbHMvMjAyMjkvCiBBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKLQotIyBvbiB4ODYtNjQgdGhlIGludHJvc3BlY3Rpb24gYmluYXJ5IGdvZXMgaW50byAKLSMgYW4gaW5maW5pdGUgbG9vcCB1bmRlciBxZW11IGR1cmluZyBjb21waWxhdGlvbiwgCi0jIHByaW50aW5nIHRoZSBmb2xsb3dpbmc6Ci0jIAotIyBnY3J5cHQtTWVzc2FnZTogc2VsZWN0KCkgZXJyb3I6IEJhZCBhZGRyZXNzCi0jCi0jIGdjcnlwdC1NZXNzYWdlOiBzZWxlY3QoKSBlcnJvcjogQmFkIGFkZHJlc3MKLSMKLSMgZ2NyeXB0LU1lc3NhZ2U6IHNlbGVjdCgpIGVycm9yOiBCYWQgYWRkcmVzcwotIwotIyBUaGlzIHdpbGwgYmUgaW52ZXN0aWdhdGVkIGxhdGVyLgotRVhUUkFfT0VDT05GX2FwcGVuZF94ODYtNjQgPSAiIC0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIC0tZGlzYWJsZS1ndGstZG9jIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvMDAwMS1xdWVyeWxvYWRlcnMtTWFrZS1vdXRwdXQtbW9yZS1yZXByb2R1Y2libGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi8wMDAxLXF1ZXJ5bG9hZGVycy1NYWtlLW91dHB1dC1tb3JlLXJlcHJvZHVjaWJsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTIxNDE5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvMDAwMS1xdWVyeWxvYWRlcnMtTWFrZS1vdXRwdXQtbW9yZS1yZXByb2R1Y2libGUucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorRnJvbSAxMDQ5ZmJkODg3ZTUyZjk0YWZlYjAzZmM3OTQyYzAxYzE0M2ViZGZjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IEZyaSwgOSBKdW4gMjAxNyAxMjowMToyNSArMDMwMAorU3ViamVjdDogW1BBVENIXSBxdWVyeWxvYWRlcnM6IE1ha2Ugb3V0cHV0IG1vcmUgcmVwcm9kdWNpYmxlCisKK1JlcHJvZHVjaWJsZSBidWlsZHMgYXJlIGdvb2Q6IFNvcnQgdGhlIG91dHB1dCBieSBtb2R1bGUgbmFtZSBzbyB0aGF0CitzYW1lIGlucHV0IGFsd2F5cyBsZWFkcyB0byBzYW1lIG91dHB1dC4KKworVGhpcyBzaG91bGQgYWxzbyBtYWtlIGdkay1waXhidWYtcHJpbnQtbWltZS10eXBlcyBvdXRwdXQgYW5kCitnZGstcGl4YnVmLXRodW1ibmFpbGVyLnRodW1ibmFpbGVyIHJlcHJvZHVjaWJsZS4KKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc4MzU5MgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIGdkay1waXhidWYvcXVlcnlsb2FkZXJzLmMgfCAxMiArKysrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dkay1waXhidWYvcXVlcnlsb2FkZXJzLmMgYi9nZGstcGl4YnVmL3F1ZXJ5bG9hZGVycy5jCitpbmRleCAzOTU2NzRhLi40YWM5YjI4IDEwMDY0NAorLS0tIGEvZ2RrLXBpeGJ1Zi9xdWVyeWxvYWRlcnMuYworKysrIGIvZ2RrLXBpeGJ1Zi9xdWVyeWxvYWRlcnMuYworQEAgLTM0Niw2ICszNDYsNyBAQCBpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICNpZmRlZiBVU0VfR01PRFVMRQorICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoOworICAgICAgICAgICAgICAgICBHRGlyICpkaXI7CisrICAgICAgICAgICAgICAgIEdMaXN0ICpsLCAqbW9kdWxlcyA9IE5VTEw7CisgCisgICAgICAgICAgICAgICAgIHBhdGggPSBnX2dldGVudiAoIkdES19QSVhCVUZfTU9EVUxFRElSIik7CisgI2lmZGVmIEdfT1NfV0lOMzIKK0BAIC0zNjUsMTIgKzM2NiwxOSBAQCBpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBsZW4gPSBzdHJsZW4gKGRlbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiA+IFNPRVhUX0xFTiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNtcCAoZGVudCArIGxlbiAtIFNPRVhUX0xFTiwgU09FWFQpID09IDApIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlcyA9IGdfbGlzdF9wcmVwZW5kIChtb2R1bGVzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfc3RyZHVwIChkZW50KSk7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcXVlcnlfbW9kdWxlIChjb250ZW50cywgcGF0aCwgZGVudCkpCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IEZBTFNFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICBnX2Rpcl9jbG9zZSAoZGlyKTsKKyAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICBtb2R1bGVzID0gZ19saXN0X3NvcnQgKG1vZHVsZXMsIChHQ29tcGFyZUZ1bmMpc3RyY21wKTsKKysgICAgICAgICAgICAgICAgZm9yIChsID0gbW9kdWxlczsgbCAhPSBOVUxMOyBsID0gbC0+bmV4dCkKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXF1ZXJ5X21vZHVsZSAoY29udGVudHMsIHBhdGgsIGwtPmRhdGEpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IEZBTFNFOworKworKyAgICAgICAgICAgICAgICBnX2xpc3RfZnJlZV9mdWxsIChtb2R1bGVzLCBnX2ZyZWUpOworICNlbHNlCisgICAgICAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKGNvbnRlbnRzLCAiIyBkeW5hbWljIGxvYWRpbmcgb2YgbW9kdWxlcyBub3Qgc3VwcG9ydGVkXG4iKTsKKyAjZW5kaWYKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWZfMi4zNi41LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWZfMi4zNi41LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGE2ZDE2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmXzIuMzYuNS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLVNVTU1BUlkgPSAiSW1hZ2UgbG9hZGluZyBsaWJyYXJ5IGZvciBHVEsrIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ndGsub3JnLyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgotCi1MSUNFTlNFID0gIkxHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi5oO2VuZGxpbmU9MjY7bWQ1PTcyYjM5ZGE3Y2JkZGUyZTY2NTMyOWZlZjYxOGUxZDZiIgotCi1TRUNUSU9OID0gImxpYnMiCi0KLURFUEVORFMgPSAiZ2xpYi0yLjAgZ2RrLXBpeGJ1Zi1uYXRpdmUiCi0KLU1BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKLQotU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vJHtCUE59LyR7TUFKX1ZFUn0vJHtCUE59LSR7UFZ9LnRhci54eiBcCi0gICAgICAgICAgIGZpbGU6Ly9oYXJkY29kZWRfbGlidG9vbC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9leHRlbmRpbmctbGliaW5zdGFsbC1kZXBlbmRlbmNpZXMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKLSAgICAgICAgICAgZmlsZTovL2ZhdGFsLWxvYWRlci5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLVdvcmstYXJvdW5kLXRodW1ibmFpbGVyLWNyb3NzLWNvbXBpbGUtZmFpbHVyZS5wYXRjaCBcCi0gICAgICAgICAgICIKLVNSQ19VUklbbWQ1c3VtXSA9ICIwMTczZmQ1YzExYTVkMjAzMGQwOTIwMTA5MDYzNjQ3NyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI3YWNlMDYxNzAyOTFhMWYyMTc3MTU1Mjc2OGJhY2UwNzJlY2RlYTliZDRhMDJmNzY1ODkzOWI5YTMxNGM0MGZjIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCBwaXhidWZjYWNoZSBwdGVzdC1nbm9tZSB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZ29iamVjdC1pbnRyb3NwZWN0aW9uIGd0ay1kb2MgbGliX3BhY2thZ2UKLQotTElCViA9ICIyLjEwLjAiCi0KLUdES19QSVhCVUZfTE9BREVSUyA/PSAicG5nIGpwZWciCi0KLVBBQ0tBR0VDT05GSUcgPz89ICIke0dES19QSVhCVUZfTE9BREVSU30iCi1QQUNLQUdFQ09ORklHX2xpbnV4c3RkYmFzZSA9ICIke0BiYi51dGlscy5maWx0ZXIoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCBkKX0gJHtHREtfUElYQlVGX0xPQURFUlN9IgotUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPSAiJHtHREtfUElYQlVGX0xPQURFUlN9IgotCi1QQUNLQUdFQ09ORklHW3BuZ10gPSAiLS13aXRoLWxpYnBuZywtLXdpdGhvdXQtbGlicG5nLGxpYnBuZyIKLVBBQ0tBR0VDT05GSUdbanBlZ10gPSAiLS13aXRoLWxpYmpwZWcsLS13aXRob3V0LWxpYmpwZWcsanBlZyIKLVBBQ0tBR0VDT05GSUdbdGlmZl0gPSAiLS13aXRoLWxpYnRpZmYsLS13aXRob3V0LWxpYnRpZmYsdGlmZiIKLVBBQ0tBR0VDT05GSUdbanBlZzIwMDBdID0gIi0td2l0aC1saWJqYXNwZXIsLS13aXRob3V0LWxpYmphc3BlcixqYXNwZXIiCi0KLSMgVXNlIEdJTyB0byBzbmlmZiBpbWFnZSBmb3JtYXQgaW5zdGVhZCBvZiB0cnlpbmcgYWxsIGxvYWRlcnMKLVBBQ0tBR0VDT05GSUdbZ2lvLXNuaWZmXSA9ICItLWVuYWJsZS1naW8tc25pZmZpbmcsLS1kaXNhYmxlLWdpby1zbmlmZmluZywsc2hhcmVkLW1pbWUtaW5mbyIKLVBBQ0tBR0VDT05GSUdbeDExXSA9ICItLXdpdGgteDExLC0td2l0aG91dC14MTEsdmlydHVhbC9saWJ4MTEiCi0KLVBBQ0tBR0VTID0rICIke1BOfS14bGliIgotCi1GSUxFU18ke1BOfS14bGliID0gIiR7bGliZGlyfS8qcGl4YnVmX3hsaWIqJHtTT0xJQlN9IgotQUxMT1dfRU1QVFlfJHtQTn0teGxpYiA9ICIxIgotCi1GSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wL2dkay1waXhidWYtcXVlcnktbG9hZGVycyIKLQotRklMRVNfJHtQTn0tYmluICs9ICIke2RhdGFkaXJ9L3RodW1ibmFpbGVycy9nZGstcGl4YnVmLXRodW1ibmFpbGVyLnRodW1ibmFpbGVyIgotCi1GSUxFU18ke1BOfS1kZXYgKz0gIiBcCi0JJHtiaW5kaXJ9L2dkay1waXhidWYtY3NvdXJjZSBcCi0JJHtiaW5kaXJ9L2dkay1waXhidWYtcGl4ZGF0YSBcCi0gICAgICAgICR7YmluZGlyfS9nZGstcGl4YnVmLXByaW50LW1pbWUtdHlwZXMgXAotCSR7aW5jbHVkZWRpcn0vKiBcCi0JJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycy8qLmxhIFwKLSIKLQotUEFDS0FHRVNfRFlOQU1JQyArPSAiXmdkay1waXhidWYtbG9hZGVyLS4qIgotUEFDS0FHRVNfRFlOQU1JQ19jbGFzcy1uYXRpdmUgPSAiIgotCi1weXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7Ci0gICAgcG9zdGluc3RfcGl4YnVmbG9hZGVyID0gZC5nZXRWYXIoInBvc3RpbnN0X3BpeGJ1ZmxvYWRlciIpCi0KLSAgICBsb2FkZXJzX3Jvb3QgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycycpCi0KLSAgICBwYWNrYWdlcyA9ICcgJy5qb2luKGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxvYWRlcnNfcm9vdCwgJ15saWJwaXhidWZsb2FkZXItKC4qKVwuc28kJywgJ2dkay1waXhidWYtbG9hZGVyLSVzJywgJ0dESyBwaXhidWYgbG9hZGVyIGZvciAlcycpKQotICAgIGQuc2V0VmFyKCdQSVhCVUZfUEFDS0FHRVMnLCBwYWNrYWdlcykKLQotICAgICMgVGhlIHRlc3Qgc3VpdGUgZXhlcmNpc2VzIGFsbCB0aGUgbG9hZGVycywgc28gZW5zdXJlIHRoZXkgYXJlIGFsbAotICAgICMgZGVwZW5kZW5jaWVzIG9mIHRoZSBwdGVzdCBwYWNrYWdlLgotICAgIGQuYXBwZW5kVmFyKCJSREVQRU5EU19nZGstcGl4YnVmLXB0ZXN0IiwgIiAiICsgcGFja2FnZXMpCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCSMgTW92ZSBnZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMgaW50byBsaWJkaXIgc28gaXQgaXMgYWx3YXlzIGF2YWlsYWJsZQotCSMgaW4gbXVsdGlsaWIgYnVpbGRzLgotCW12ICR7RH0vJHtiaW5kaXJ9L2dkay1waXhidWYtcXVlcnktbG9hZGVycyAke0R9LyR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8KLX0KLQotZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgewotCWZpbmQgJHtEfSR7bGliZGlyfSAtbmFtZSAibGlicGl4YnVmbG9hZGVyLSoubGEiIC1leGVjIHJtIFx7XH0gXDsKLQotCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2dkay1waXhidWYtY3NvdXJjZSBcCi0JCUdES19QSVhCVUZfTU9EVUxFX0ZJTEU9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycy5jYWNoZQotCi0JY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1waXhkYXRhIFwKLQkJR0RLX1BJWEJVRl9NT0RVTEVfRklMRT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzLmNhY2hlCi0KLQljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9nZGstcGl4YnVmLXByaW50LW1pbWUtdHlwZXMgXAotCQlHREtfUElYQlVGX01PRFVMRV9GSUxFPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMuY2FjaGUKLQotCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wL2dkay1waXhidWYtcXVlcnktbG9hZGVycyBcCi0JCUdES19QSVhCVUZfTU9EVUxFX0ZJTEU9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycy5jYWNoZSBcCi0JCUdES19QSVhCVUZfTU9EVUxFRElSPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMKLX0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWZfMi4zNi44LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWZfMi4zNi44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMzU5MDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zl8yLjM2LjguYmIKQEAgLTAsMCArMSwxMDIgQEAKK1NVTU1BUlkgPSAiSW1hZ2UgbG9hZGluZyBsaWJyYXJ5IGZvciBHVEsrIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ndGsub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkxHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi5oO2VuZGxpbmU9MjY7bWQ1PTcyYjM5ZGE3Y2JkZGUyZTY2NTMyOWZlZjYxOGUxZDZiIgorCitTRUNUSU9OID0gImxpYnMiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgZ2RrLXBpeGJ1Zi1uYXRpdmUgc2hhcmVkLW1pbWUtaW5mbyIKKworTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtNQUpfVkVSfS8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2V4dGVuZGluZy1saWJpbnN0YWxsLWRlcGVuZGVuY2llcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vZmF0YWwtbG9hZGVyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtV29yay1hcm91bmQtdGh1bWJuYWlsZXItY3Jvc3MtY29tcGlsZS1mYWlsdXJlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcXVlcnlsb2FkZXJzLU1ha2Utb3V0cHV0LW1vcmUtcmVwcm9kdWNpYmxlLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTBhYWEwMDYxZWIxMjY2N2IzMmIyNzQ3MjIzMGI5NjIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWQ2OGU1MjgzY2RjMGJmOWJkYTk5YzNlNmExZDUyYWQwN2EwMzM2NGZhMTg2YjZjMjZjZmM4NmZjZDM5NmExOSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgcGl4YnVmY2FjaGUgcHRlc3QtZ25vbWUgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGdvYmplY3QtaW50cm9zcGVjdGlvbiBndGstZG9jIGxpYl9wYWNrYWdlCisKK0xJQlYgPSAiMi4xMC4wIgorCitHREtfUElYQlVGX0xPQURFUlMgPz0gInBuZyBqcGVnIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtHREtfUElYQlVGX0xPQURFUlN9IgorUEFDS0FHRUNPTkZJR19saW51eHN0ZGJhc2UgPSAiJHtAYmIudXRpbHMuZmlsdGVyKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgZCl9ICR7R0RLX1BJWEJVRl9MT0FERVJTfSIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID0gIiR7R0RLX1BJWEJVRl9MT0FERVJTfSIKKworUEFDS0FHRUNPTkZJR1twbmddID0gIi0td2l0aC1saWJwbmcsLS13aXRob3V0LWxpYnBuZyxsaWJwbmciCitQQUNLQUdFQ09ORklHW2pwZWddID0gIi0td2l0aC1saWJqcGVnLC0td2l0aG91dC1saWJqcGVnLGpwZWciCitQQUNLQUdFQ09ORklHW3RpZmZdID0gIi0td2l0aC1saWJ0aWZmLC0td2l0aG91dC1saWJ0aWZmLHRpZmYiCitQQUNLQUdFQ09ORklHW2pwZWcyMDAwXSA9ICItLXdpdGgtbGliamFzcGVyLC0td2l0aG91dC1saWJqYXNwZXIsamFzcGVyIgorCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS13aXRoLXgxMSwtLXdpdGhvdXQteDExLHZpcnR1YWwvbGlieDExIgorCitQQUNLQUdFUyA9KyAiJHtQTn0teGxpYiIKKworIyBGb3IgR0lPIGltYWdlIHR5cGUgc25pZmZpbmcKK1JERVBFTkRTXyR7UE59ID0gInNoYXJlZC1taW1lLWluZm8iCisKK0ZJTEVTXyR7UE59LXhsaWIgPSAiJHtsaWJkaXJ9LypwaXhidWZfeGxpYioke1NPTElCU30iCitBTExPV19FTVBUWV8ke1BOfS14bGliID0gIjEiCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzIgorCitGSUxFU18ke1BOfS1iaW4gKz0gIiR7ZGF0YWRpcn0vdGh1bWJuYWlsZXJzL2dkay1waXhidWYtdGh1bWJuYWlsZXIudGh1bWJuYWlsZXIiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiIFwKKwkke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1jc291cmNlIFwKKwkke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1waXhkYXRhIFwKKyAgICAgICAgJHtiaW5kaXJ9L2dkay1waXhidWYtcHJpbnQtbWltZS10eXBlcyBcCisJJHtpbmNsdWRlZGlyfS8qIFwKKwkke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzLyoubGEgXAorIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJeZ2RrLXBpeGJ1Zi1sb2FkZXItLioiCitQQUNLQUdFU19EWU5BTUlDX2NsYXNzLW5hdGl2ZSA9ICIiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBwb3N0aW5zdF9waXhidWZsb2FkZXIgPSBkLmdldFZhcigicG9zdGluc3RfcGl4YnVmbG9hZGVyIikKKworICAgIGxvYWRlcnNfcm9vdCA9IGQuZXhwYW5kKCcke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzJykKKworICAgIHBhY2thZ2VzID0gJyAnLmpvaW4oZG9fc3BsaXRfcGFja2FnZXMoZCwgbG9hZGVyc19yb290LCAnXmxpYnBpeGJ1ZmxvYWRlci0oLiopXC5zbyQnLCAnZ2RrLXBpeGJ1Zi1sb2FkZXItJXMnLCAnR0RLIHBpeGJ1ZiBsb2FkZXIgZm9yICVzJykpCisgICAgZC5zZXRWYXIoJ1BJWEJVRl9QQUNLQUdFUycsIHBhY2thZ2VzKQorCisgICAgIyBUaGUgdGVzdCBzdWl0ZSBleGVyY2lzZXMgYWxsIHRoZSBsb2FkZXJzLCBzbyBlbnN1cmUgdGhleSBhcmUgYWxsCisgICAgIyBkZXBlbmRlbmNpZXMgb2YgdGhlIHB0ZXN0IHBhY2thZ2UuCisgICAgZC5hcHBlbmRWYXIoIlJERVBFTkRTXyVzLXB0ZXN0IiAlIGQuZ2V0VmFyKCdQTicpLCAiICIgKyBwYWNrYWdlcykKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBNb3ZlIGdkay1waXhidWYtcXVlcnktbG9hZGVycyBpbnRvIGxpYmRpciBzbyBpdCBpcyBhbHdheXMgYXZhaWxhYmxlCisJIyBpbiBtdWx0aWxpYiBidWlsZHMuCisJbXYgJHtEfS8ke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzICR7RH0vJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLworfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJZmluZCAke0R9JHtsaWJkaXJ9IC1uYW1lICJsaWJwaXhidWZsb2FkZXItKi5sYSIgLWV4ZWMgcm0gXHtcfSBcOworCisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1jc291cmNlIFwKKwkJR0RLX1BJWEJVRl9NT0RVTEVfRklMRT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzLmNhY2hlCisKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9nZGstcGl4YnVmLXBpeGRhdGEgXAorCQlHREtfUElYQlVGX01PRFVMRV9GSUxFPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMuY2FjaGUKKworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2dkay1waXhidWYtcHJpbnQtbWltZS10eXBlcyBcCisJCUdES19QSVhCVUZfTU9EVUxFX0ZJTEU9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycy5jYWNoZQorCisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzIFwKKwkJR0RLX1BJWEJVRl9NT0RVTEVfRklMRT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzLmNhY2hlIFwKKwkJR0RLX1BJWEJVRl9NT0RVTEVESVI9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycworfQorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lLWRlc2t0b3AvZ25vbWUtZGVza3RvcC8wMDAxLWNvbmZpZ3VyZS5hYy1SZW1vdmUtZ25vbWUtY29tbW9uLW1hY3JvLWNhbGxzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS1kZXNrdG9wL2dub21lLWRlc2t0b3AvMDAwMS1jb25maWd1cmUuYWMtUmVtb3ZlLWdub21lLWNvbW1vbi1tYWNyby1jYWxscy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTUzOTNjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS1kZXNrdG9wL2dub21lLWRlc2t0b3AvMDAwMS1jb25maWd1cmUuYWMtUmVtb3ZlLWdub21lLWNvbW1vbi1tYWNyby1jYWxscy5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDgzNGJjODYxOTIxZmUwMzYxZjJkNmE1YjU3MTZmYzk3YTk1MTk0NzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogVGh1LCA2IEp1bCAyMDE3IDEzOjEzOjQ1ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZS5hYzogUmVtb3ZlIGdub21lLWNvbW1vbiBtYWNybyBjYWxscworCitnbm9tZS1jb21tb24gaXMgZGVwcmVjYXRlZCBhbmQgdGhlc2UgYXJlbid0IGRvaW5nIG11Y2ggZm9yIHVzLgorCitVcHN0cmVhbWFibGUgZml4IHdvdWxkIHByb2JhYmx5IGludm9sdmUgdXNpbmcgYXV0b2NvbmYtYXJjaGl2ZToKK1RyeWluZyB0byBhdm9pZCB0aGF0IGRlcGVuZGVuY3kgZm9yIG5vdy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMyAtLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggN2FkY2YwZS4uYmI3NjU5ZCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNzEsOSArNzEsNiBAQCBBQ19TVUJTVChHTk9NRV9EQVRFKQorIEFDX1NVQlNUKEdOT01FX0RBVEVfQ09NTUVOVF9TVEFSVCkKKyBBQ19TVUJTVChHTk9NRV9EQVRFX0NPTU1FTlRfRU5EKQorIAorLUdOT01FX0NPTVBJTEVfV0FSTklOR1MoW21heGltdW1dKQorLUdOT01FX01BSU5UQUlORVJfTU9ERV9ERUZJTkVTCistCisgQUNfQVJHX0VOQUJMRShkZXByZWNhdGlvbl9mbGFncywKKyAgICAgICAgICAgICAgIFtBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZGVwcmVjYXRpb24tZmxhZ3NdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt1c2UgKl9ESVNBQkxFX0RFUFJFQ0FURUQgZmxhZ3MgQDw6QGRlZmF1bHQ9bm9AOj5AXSldLCwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS1kZXNrdG9wL2dub21lLWRlc2t0b3AzXzMuMjIuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUtZGVza3RvcC9nbm9tZS1kZXNrdG9wM18zLjIyLjIuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MmM2Y2UuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS1kZXNrdG9wL2dub21lLWRlc2t0b3AzXzMuMjIuMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLVNVTU1BUlkgPSAiR05PTUUgbGlicmFyeSBmb3IgcmVhZGluZyAuZGVza3RvcCBmaWxlcyIKLVNFQ1RJT04gPSAieDExL2dub21lIgotTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiIKLQotQlBOID0gImdub21lLWRlc2t0b3AiCi0KLWluaGVyaXQgZ25vbWUgcGtnY29uZmlnIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnb2JqZWN0LWludHJvc3BlY3Rpb24KLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjNkNzIyMmQ1MzA1ZjNkYjAyMmVjYTMxZDgxMDhlMDJkIgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNTFkN2ViZjdhNmMzNTliZTE0YzNkZDdhMDIyMjEzZTkzMTQ4NDY1MzgxNWViMTBiMDEzMWJlZjRjODk3OWUxYyIKLQotU1JDX1VSSSArPSAiZmlsZTovL2dub21lLWRlc2t0b3AtdGh1bWJuYWlsLWRvbi10LWNvbnZlcnQtdGltZV90LXRvLWxvbmcucGF0Y2giCi0KLURFUEVORFMgKz0gImludGx0b29sLW5hdGl2ZSBnbm9tZS1jb21tb24tbmF0aXZlIGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMgZ2NvbmYgdmlydHVhbC9saWJ4MTEgZ3RrKzMgZ2xpYi0yLjAgc3RhcnR1cC1ub3RpZmljYXRpb24geGtleWJvYXJkLWNvbmZpZyBpc28tY29kZXMgdWRldiIKLQotaW5oZXJpdCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgZ3RrLWRvYwotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKLQotRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1kZXNrdG9wLWRvY3MiCi0KLVBBQ0tBR0VTID0rICJsaWJnbm9tZS1kZXNrdG9wMyIKLUZJTEVTX2xpYmdub21lLWRlc2t0b3AzID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlN9ICR7ZGF0YWRpcn0vbGliZ25vbWUtZGVza3RvcCovcG5wLmlkcyAke2RhdGFkaXJ9L2dub21lLyp4bWwiCi0KLVJSRUNPTU1FTkRTX2xpYmdub21lLWRlc2t0b3AzICs9ICJnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS1kZXNrdG9wL2dub21lLWRlc2t0b3AzXzMuMjQuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUtZGVza3RvcC9nbm9tZS1kZXNrdG9wM18zLjI0LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMxYzIxMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUtZGVza3RvcC9nbm9tZS1kZXNrdG9wM18zLjI0LjIuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJHTk9NRSBsaWJyYXJ5IGZvciByZWFkaW5nIC5kZXNrdG9wIGZpbGVzIgorU0VDVElPTiA9ICJ4MTEvZ25vbWUiCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIgorCitCUE4gPSAiZ25vbWUtZGVza3RvcCIKKworaW5oZXJpdCBnbm9tZSBwa2djb25maWcgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGdvYmplY3QtaW50cm9zcGVjdGlvbgorU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiYWY3YzZhMjQzZGY3YTMzNWEwMTBiZGMwNWIzNGNhOTMiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI4ZmExZGU2NmE2YTc1OTYzYmZmYzc5YjAxYTYwNDM0YzcxMjM3ZDQ0YzUxYmVjYTA5YzBmNzE0YTAzMmQ3ODVlIgorCitTUkNfVVJJICs9ICJmaWxlOi8vZ25vbWUtZGVza3RvcC10aHVtYm5haWwtZG9uLXQtY29udmVydC10aW1lX3QtdG8tbG9uZy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUuYWMtUmVtb3ZlLWdub21lLWNvbW1vbi1tYWNyby1jYWxscy5wYXRjaCBcCisiCisKK0RFUEVORFMgKz0gImludGx0b29sLW5hdGl2ZSBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIGdjb25mIHZpcnR1YWwvbGlieDExIGd0ayszIGdsaWItMi4wIHN0YXJ0dXAtbm90aWZpY2F0aW9uIHhrZXlib2FyZC1jb25maWcgaXNvLWNvZGVzIHVkZXYiCisKK2luaGVyaXQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIGd0ay1kb2MKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZGVza3RvcC1kb2NzIgorCitQQUNLQUdFUyA9KyAibGliZ25vbWUtZGVza3RvcDMiCitGSUxFU19saWJnbm9tZS1kZXNrdG9wMyA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTfSAke2RhdGFkaXJ9L2xpYmdub21lLWRlc2t0b3AqL3BucC5pZHMgJHtkYXRhZGlyfS9nbm9tZS8qeG1sIgorCitSUkVDT01NRU5EU19saWJnbm9tZS1kZXNrdG9wMyArPSAiZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvYWR3YWl0YS1pY29uLXRoZW1lLzAwMDEtRG9uLXQtdXNlLUFDX0NBTk9OSUNBTF9IT1NULnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9hZHdhaXRhLWljb24tdGhlbWUvMDAwMS1Eb24tdC11c2UtQUNfQ0FOT05JQ0FMX0hPU1QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdhYzk3YgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvYWR3YWl0YS1pY29uLXRoZW1lLzAwMDEtRG9uLXQtdXNlLUFDX0NBTk9OSUNBTF9IT1NULnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gZDJiOWFkOGE4MGJmOTMyMGZlMzVjOWFlZThmNTJlNTVlYmQ0MGUwNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBUdWUsIDMwIE1heSAyMDE3IDE0OjU1OjQ5ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIERvbid0IHVzZSBBQ19DQU5PTklDQUxfSE9TVAorCitUaGlzIHdvbid0IHdvcmsgd2hlbiBidWlsZGluZyBhbGxhcmNoIChhbmQgaXMgb25seSB1c2VkIHRvIGZpbmQgb3V0IGlmCit0YXJnZXQgaXMgd2luZG93cykuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMSAtCisgMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZDg1NWI3YS4uNjkwOGY1OSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMyw3ICszLDYgQEAgQUNfUFJFUkVRKDIuNTMpCisgCisgQUNfSU5JVChbYWR3YWl0YS1pY29uLXRoZW1lXSwgWzMuMjQuMF0sCisgICAgICAgICBbaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9YWR3YWl0YS1pY29uLXRoZW1lXSkKKy1BQ19DQU5PTklDQUxfSE9TVAorIEFDX0NPTkZJR19NQUNST19ESVIoW200XSkKKyBBQ19DT05GSUdfU1JDRElSKFtpbmRleC50aGVtZS5pbl0pCisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvYWR3YWl0YS1pY29uLXRoZW1lLzAwMDEtUnVuLWluc3RhbGxhdGlvbi1jb21tYW5kcy1hcy1zaGVsbC1qb2JzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9hZHdhaXRhLWljb24tdGhlbWUvMDAwMS1SdW4taW5zdGFsbGF0aW9uLWNvbW1hbmRzLWFzLXNoZWxsLWpvYnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMzOGUyMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvYWR3YWl0YS1pY29uLXRoZW1lLzAwMDEtUnVuLWluc3RhbGxhdGlvbi1jb21tYW5kcy1hcy1zaGVsbC1qb2JzLnBhdGNoCkBAIC0wLDAgKzEsODIgQEAKK0Zyb20gOGRjZDczYjQ1YTY2MGRiZGM1NjA2NzY4MzViYTQ2ZjQ5NTMzNGYxNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogVHVlLCAxMyBKdW4gMjAxNyAxODoxMDowNiArMDMwMAorU3ViamVjdDogW1BBVENIXSBSdW4gaW5zdGFsbGF0aW9uIGNvbW1hbmRzIGFzIHNoZWxsIGpvYnMKKworVGhpcyBncmVhdGx5IHNwZWVkcyB1cCBpbnN0YWxsYXRpb24gdGltZSBvbiBtdWx0aS1jb3JlIHN5c3RlbXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CistLS0KKyBzcmMvZnVsbGNvbG9yL01ha2VmaWxlLmFtIHwgMyArKy0KKyBzcmMvc3Bpbm5lci9NYWtlZmlsZS5hbSAgIHwgNSArKystLQorIHNyYy9zeW1ib2xpYy9NYWtlZmlsZS5hbSAgfCA3ICsrKystLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9mdWxsY29sb3IvTWFrZWZpbGUuYW0gYi9zcmMvZnVsbGNvbG9yL01ha2VmaWxlLmFtCitpbmRleCAxYzk0MGE1Li4zOTk4ZWU2IDEwMDY0NAorLS0tIGEvc3JjL2Z1bGxjb2xvci9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2Z1bGxjb2xvci9NYWtlZmlsZS5hbQorQEAgLTksOSArOSwxMCBAQCBpbnN0YWxsLWRhdGEtbG9jYWw6CisgCQlmb3IgZmlsZSBpbiBgY2QgJCh0b3Bfc3JjZGlyKS8kKFNWR09VVERJUikvJCRzaXplICYmIGZpbmQgLiAtbmFtZSAiKi5wbmciYDsgZG8gXAorIAkJCWNvbnRleHQ9ImBkaXJuYW1lICQkZmlsZWAiOyBcCisgCQkJJChta2Rpcl9wKSAkKERFU1RESVIpJCh0aGVtZWRpcikvJCRzaXplLyQkY29udGV4dDsgXAorLQkJCSQoaW5zdGFsbF9zaF9EQVRBKSAkKHRvcF9zcmNkaXIpLyQoU1ZHT1VURElSKS8kJHNpemUvJCRmaWxlICQoREVTVERJUikkKHRoZW1lZGlyKS8kJHNpemUvJCRmaWxlOyBcCisrCQkJJChpbnN0YWxsX3NoX0RBVEEpICQodG9wX3NyY2RpcikvJChTVkdPVVRESVIpLyQkc2l6ZS8kJGZpbGUgJChERVNURElSKSQodGhlbWVkaXIpLyQkc2l6ZS8kJGZpbGUgJiBcCisgCQlkb25lOyBcCisgCWRvbmU7CisrCXdhaXQKKyAKKyAjIyBGSVhNRSB3ZSBzaG91bGQgYWRkIGEgd2F5IHRvIHJlbW92ZSBsaW5rcyBnZW5lcmF0ZWQgYnkgaWNvbiBtYXBwaW5nCisgdW5pbnN0YWxsLWxvY2FsOgorZGlmZiAtLWdpdCBhL3NyYy9zcGlubmVyL01ha2VmaWxlLmFtIGIvc3JjL3NwaW5uZXIvTWFrZWZpbGUuYW0KK2luZGV4IDg2ZjRkN2MuLjNmYWU4YzEgMTAwNjQ0CistLS0gYS9zcmMvc3Bpbm5lci9NYWtlZmlsZS5hbQorKysrIGIvc3JjL3NwaW5uZXIvTWFrZWZpbGUuYW0KK0BAIC0yNCwxMyArMjQsMTQgQEAgaW5zdGFsbC1kYXRhLWxvY2FsOgorIAkgICAgICBmb3IgZmlsZSBpbiBgY2QgJCh0b3Bfc3JjZGlyKS8kKFNWR09VVERJUikvJCRzaXplOyBmaW5kIC4gLW5hbWUgIioucG5nImA7IGRvIFwKKyAJCSAgICAgIGNvbnRleHQ9ImBkaXJuYW1lICQkZmlsZWAiOyBcCisgCQkgICAgICAkKG1rZGlyX3ApICQoREVTVERJUikkKHRoZW1lZGlyKS8kJHNpemUvJCRjb250ZXh0OyBcCistCQkgICAgICAkKGluc3RhbGxfc2hfREFUQSkgJCh0b3Bfc3JjZGlyKS8kKFNWR09VVERJUikvJCRzaXplLyQkZmlsZSAkKERFU1RESVIpJCh0aGVtZWRpcikvJCRzaXplLyQkZmlsZTsgXAorKwkJICAgICAgJChpbnN0YWxsX3NoX0RBVEEpICQodG9wX3NyY2RpcikvJChTVkdPVVRESVIpLyQkc2l6ZS8kJGZpbGUgJChERVNURElSKSQodGhlbWVkaXIpLyQkc2l6ZS8kJGZpbGUgJiBcCisgCSAgICAgIGRvbmU7IFwKKyAJZm9yIGZpbGUgaW4gYGNkICQodG9wX3NyY2RpcikvJChTVkdPVVRESVIpL3NjYWxhYmxlLXVwLXRvLTMyOyBmaW5kIC4gLW5hbWUgIiouc3ZnImA7IGRvIFwKKyAJCWNvbnRleHQ9ImBkaXJuYW1lICQkZmlsZWAiOyBcCisgCQkkKG1rZGlyX3ApICQoREVTVERJUikkKHRoZW1lZGlyKS9zY2FsYWJsZS11cC10by0zMi8kJGNvbnRleHQ7IFwKKy0JCSQoaW5zdGFsbF9zaF9EQVRBKSAkKHRvcF9zcmNkaXIpLyQoU1ZHT1VURElSKS9zY2FsYWJsZS11cC10by0zMi8kJGZpbGUgJChERVNURElSKSQodGhlbWVkaXIpL3NjYWxhYmxlLXVwLXRvLTMyLyQkZmlsZTsgXAorKwkJJChpbnN0YWxsX3NoX0RBVEEpICQodG9wX3NyY2RpcikvJChTVkdPVVRESVIpL3NjYWxhYmxlLXVwLXRvLTMyLyQkZmlsZSAkKERFU1RESVIpJCh0aGVtZWRpcikvc2NhbGFibGUtdXAtdG8tMzIvJCRmaWxlICYgXAorIAlkb25lCisrCXdhaXQKKyAKKyB1bmluc3RhbGwtbG9jYWw6CisgCSAgICAgIGZvciBmaWxlIGluIGBjZCAkKHRvcF9zcmNkaXIpLyQoU1ZHT1VURElSKS9zY2FsYWJsZS11cC10by0zMjsgZmluZCAuIC1uYW1lICIqLnN2ZyJgOyBkbyBcCitkaWZmIC0tZ2l0IGEvc3JjL3N5bWJvbGljL01ha2VmaWxlLmFtIGIvc3JjL3N5bWJvbGljL01ha2VmaWxlLmFtCitpbmRleCAyNGFhYzliLi42MWJhMDcxIDEwMDY0NAorLS0tIGEvc3JjL3N5bWJvbGljL01ha2VmaWxlLmFtCisrKysgYi9zcmMvc3ltYm9saWMvTWFrZWZpbGUuYW0KK0BAIC0yNSwxOCArMjUsMTkgQEAgaW5zdGFsbC1kYXRhLWxvY2FsOgorIAkJZm9yIGZpbGUgaW4gYGNkICQodG9wX3NyY2RpcikvJChTVkdPVVRESVIpLyQkc2l6ZTsgZmluZCAuIC1uYW1lICIqLnBuZyJgOyBkbyBcCisgCQkJY29udGV4dD0iYGRpcm5hbWUgJCRmaWxlYCI7IFwKKyAJCQkkKG1rZGlyX3ApICQoREVTVERJUikkKHRoZW1lZGlyKS8kJHNpemUvJCRjb250ZXh0OyBcCistCQkJJChpbnN0YWxsX3NoX0RBVEEpICQodG9wX3NyY2RpcikvJChTVkdPVVRESVIpLyQkc2l6ZS8kJGZpbGUgJChERVNURElSKSQodGhlbWVkaXIpLyQkc2l6ZS8kJGZpbGU7IFwKKysJCQkkKGluc3RhbGxfc2hfREFUQSkgJCh0b3Bfc3JjZGlyKS8kKFNWR09VVERJUikvJCRzaXplLyQkZmlsZSAkKERFU1RESVIpJCh0aGVtZWRpcikvJCRzaXplLyQkZmlsZSAmIFwKKyAJCWRvbmU7IFwKKyAJZG9uZQorIAlmb3IgZmlsZSBpbiBgY2QgJCh0b3Bfc3JjZGlyKS8kKFNWR09VVERJUikvc2NhbGFibGU7IGZpbmQgLiAtbmFtZSAiKi5zdmciYDsgZG8gXAorIAkJY29udGV4dD0iYGRpcm5hbWUgJCRmaWxlYCI7IFwKKyAJCSQobWtkaXJfcCkgJChERVNURElSKSQodGhlbWVkaXIpL3NjYWxhYmxlLyQkY29udGV4dDsgXAorLQkJJChpbnN0YWxsX3NoX0RBVEEpICQodG9wX3NyY2RpcikvJChTVkdPVVRESVIpL3NjYWxhYmxlLyQkZmlsZSAkKERFU1RESVIpJCh0aGVtZWRpcikvc2NhbGFibGUvJCRmaWxlOyBcCisrCQkkKGluc3RhbGxfc2hfREFUQSkgJCh0b3Bfc3JjZGlyKS8kKFNWR09VVERJUikvc2NhbGFibGUvJCRmaWxlICQoREVTVERJUikkKHRoZW1lZGlyKS9zY2FsYWJsZS8kJGZpbGUgJiBcCisgCQlmb3Igc2l6ZSBpbiAkKHN5bWJvbGljX2VuY29kZV9zaXplcyk7IGRvIFwKKyAJCQkkKG1rZGlyX3ApICQoREVTVERJUikkKHRoZW1lZGlyKS8kJHNpemUvJCRjb250ZXh0OyBcCistCQkJJChHVEtfRU5DT0RFX1NZTUJPTElDX1NWRykgJCh0b3Bfc3JjZGlyKS8kKFNWR09VVERJUikvc2NhbGFibGUvJCRmaWxlICQkc2l6ZSAtbyAkKERFU1RESVIpJCh0aGVtZWRpcikvJCRzaXplLyQkY29udGV4dDsgXAorKwkJCSQoR1RLX0VOQ09ERV9TWU1CT0xJQ19TVkcpICQodG9wX3NyY2RpcikvJChTVkdPVVRESVIpL3NjYWxhYmxlLyQkZmlsZSAkJHNpemUgLW8gJChERVNURElSKSQodGhlbWVkaXIpLyQkc2l6ZS8kJGNvbnRleHQgJiBcCisgCQlkb25lIFwKKyAJZG9uZQorKwl3YWl0CisgCisgdW5pbnN0YWxsLWxvY2FsOgorIAlmb3IgZmlsZSBpbiBgY2QgJCh0b3Bfc3JjZGlyKS8kKFNWR09VVERJUikvc2NhbGFibGU7IGZpbmQgLiAtbmFtZSAiKi5zdmciYDsgZG8gXAorLS0gCisyLjExLjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9hZHdhaXRhLWljb24tdGhlbWVfMy4yMi4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9hZHdhaXRhLWljb24tdGhlbWVfMy4yMi4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2JjMWU2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvYWR3YWl0YS1pY29uLXRoZW1lXzMuMjIuMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLVNVTU1BUlkgPSAiR1RLKyBpY29uIHRoZW1lIgotSE9NRVBBR0UgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL0dOT01FL3NvdXJjZXMvYWR3YWl0YS1pY29uLXRoZW1lLyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgotU0VDVElPTiA9ICJ4MTEvZ25vbWUiCi0KLUxJQ0VOU0UgPSAiTEdQTC0zLjAgfCBDQy1CWS1TQS0zLjAiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jODRjYWM4OGU0NmZjMDc2NDdlYTA3ZTZjMjRlZWI3YyIKLQotaW5oZXJpdCBhbGxhcmNoIGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCBndGstaWNvbi1jYWNoZSB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4KLQotCi1NQUpfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCi1TUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtNQUpfVkVSfS8ke0JQTn0tJHtQVn0udGFyLnh6IFwKLSAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJjZGU1MWQ3ZGZjYmNmYTNiOGNkYzNlNWYwZGY4Yzc5OSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJjMThiZjZlMjYwODdkOTgxOWE5NjJjNzcyODhiMjkxZWZhYjI1ZDA0MTliNzNkOTA5ZGQ3NzE3MTZhNDVkY2I3IgotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQkjIEJ1aWxkIHVzZXMgZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcgdG8gY3JlYXRlIHBuZyB2ZXJzaW9uczoKLSAgICAgICAgIyBubyBuZWVkIHRvIHN0b3JlIHRoZSBzdmdzIGFueW1vcmUuCi0Jcm0gLWYgJHtEfSR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhL3NjYWxhYmxlLyovKi1zeW1ib2xpYy5zdmcgXAotCSAgICAgICR7RH0ke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS9zY2FsYWJsZS8qLyotc3ltYm9saWMtcnRsLnN2ZwotfQotCi1QQUNLQUdFUyA9ICIke1BOfS1jdXJzb3JzICR7UE59LXN5bWJvbGljLWhpcmVzICR7UE59LXN5bWJvbGljICR7UE59LWhpcmVzICR7UE59IgotCi1SUkVQTEFDRVNfJHtQTn0gPSAiZ25vbWUtaWNvbi10aGVtZSIKLVJDT05GTElDVFNfJHtQTn0gPSAiZ25vbWUtaWNvbi10aGVtZSIKLVJQUk9WSURFU18ke1BOfSA9ICJnbm9tZS1pY29uLXRoZW1lIgotCi1GSUxFU18ke1BOfS1jdXJzb3JzID0gIiR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhL2N1cnNvcnMvIgotRklMRVNfJHtQTn0tc3ltYm9saWMtaGlyZXMgPSAiJHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvOTZ4OTYvKi8qLnN5bWJvbGljLnBuZyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS82NHg2NC8qLyouc3ltYm9saWMucG5nIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhLzQ4eDQ4LyovKi5zeW1ib2xpYy5wbmcgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvMzJ4MzIvKi8qLnN5bWJvbGljLnBuZyIKLUZJTEVTXyR7UE59LXN5bWJvbGljID0gIiR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhLzE2eDE2LyovKi5zeW1ib2xpYy5wbmcgXAotICAgICAgICAgICAgICAgICAgICAgICAgJHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvMjR4MjQvKi8qLnN5bWJvbGljLnBuZyIKLUZJTEVTXyR7UE59LWhpcmVzID0gIiR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhLzI1NngyNTYvIFwKLSAgICAgICAgICAgICAgICAgICAgICR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhLzUxMng1MTIvIgotRklMRVNfJHtQTn0gPSAiJHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvIFwKLSAgICAgICAgICAgICAgICR7cHJlZml4fS9zaGFyZS9wa2djb25maWcvYWR3YWl0YS1pY29uLXRoZW1lLnBjIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9hZHdhaXRhLWljb24tdGhlbWVfMy4yNC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9hZHdhaXRhLWljb24tdGhlbWVfMy4yNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNDA1MzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2Fkd2FpdGEtaWNvbi10aGVtZV8zLjI0LjAuYmIKQEAgLTAsMCArMSw0NCBAQAorU1VNTUFSWSA9ICJHVEsrIGljb24gdGhlbWUiCitIT01FUEFHRSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvR05PTUUvc291cmNlcy9hZHdhaXRhLWljb24tdGhlbWUvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCitTRUNUSU9OID0gIngxMS9nbm9tZSIKKworTElDRU5TRSA9ICJMR1BMLTMuMCB8IENDLUJZLVNBLTMuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWM4NGNhYzg4ZTQ2ZmMwNzY0N2VhMDdlNmMyNGVlYjdjIgorCitpbmhlcml0IGFsbGFyY2ggYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0IGd0ay1pY29uLWNhY2hlIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgorCisKK01BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9LyR7QlBOfS8ke01BSl9WRVJ9LyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1Eb24tdC11c2UtQUNfQ0FOT05JQ0FMX0hPU1QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1SdW4taW5zdGFsbGF0aW9uLWNvbW1hbmRzLWFzLXNoZWxsLWpvYnMucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzY2NhYzBkNjAwZmZjOTM2ZDJhZGZiODBlOTI0NWJjNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjY2Y3OWZmM2JkMzQwMjU0NzM3Y2U0ZDI4Yjg3ZjBjY2VlNGIzMzU4Y2QzY2Q1Y2QxMWRjN2I0MmY0MWIyNzJhIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIEJ1aWxkIHVzZXMgZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcgdG8gY3JlYXRlIHBuZyB2ZXJzaW9uczoKKyAgICAgICAgIyBubyBuZWVkIHRvIHN0b3JlIHRoZSBzdmdzIGFueW1vcmUuCisJcm0gLWYgJHtEfSR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhL3NjYWxhYmxlLyovKi1zeW1ib2xpYy5zdmcgXAorCSAgICAgICR7RH0ke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS9zY2FsYWJsZS8qLyotc3ltYm9saWMtcnRsLnN2ZworfQorCitQQUNLQUdFUyA9ICIke1BOfS1jdXJzb3JzICR7UE59LXN5bWJvbGljLWhpcmVzICR7UE59LXN5bWJvbGljICR7UE59LWhpcmVzICR7UE59IgorCitSUkVQTEFDRVNfJHtQTn0gPSAiZ25vbWUtaWNvbi10aGVtZSIKK1JDT05GTElDVFNfJHtQTn0gPSAiZ25vbWUtaWNvbi10aGVtZSIKK1JQUk9WSURFU18ke1BOfSA9ICJnbm9tZS1pY29uLXRoZW1lIgorCitGSUxFU18ke1BOfS1jdXJzb3JzID0gIiR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhL2N1cnNvcnMvIgorRklMRVNfJHtQTn0tc3ltYm9saWMtaGlyZXMgPSAiJHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvOTZ4OTYvKi8qLnN5bWJvbGljLnBuZyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS82NHg2NC8qLyouc3ltYm9saWMucG5nIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhLzQ4eDQ4LyovKi5zeW1ib2xpYy5wbmcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvMzJ4MzIvKi8qLnN5bWJvbGljLnBuZyIKK0ZJTEVTXyR7UE59LXN5bWJvbGljID0gIiR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhLzE2eDE2LyovKi5zeW1ib2xpYy5wbmcgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvMjR4MjQvKi8qLnN5bWJvbGljLnBuZyIKK0ZJTEVTXyR7UE59LWhpcmVzID0gIiR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhLzI1NngyNTYvIFwKKyAgICAgICAgICAgICAgICAgICAgICR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhLzUxMng1MTIvIgorRklMRVNfJHtQTn0gPSAiJHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvIFwKKyAgICAgICAgICAgICAgICR7cHJlZml4fS9zaGFyZS9wa2djb25maWcvYWR3YWl0YS1pY29uLXRoZW1lLnBjIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nY29uZl8zLjIuNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ2NvbmZfMy4yLjYuYmIKaW5kZXggOWU5ZjcxNC4uOTJmZDEyYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nY29uZl8zLjIuNi5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2djb25mXzMuMi42LmJiCkBAIC0xLDUgKzEsNiBAQAogU1VNTUFSWSA9ICJHTk9NRSBjb25maWd1cmF0aW9uIHN5c3RlbSIKIFNFQ1RJT04gPSAieDExL2dub21lIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9wcm9qZWN0cy5nbm9tZS5vcmcvZ2NvbmYvIgogTElDRU5TRSA9ICJMR1BMdjIrIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTVjYTgxN2NjYjdkNWI1YjY2MzU1NjkwZTlhYmM2MDUiCiAKQEAgLTIyLDkgKzIzLDggQEAKIAogIyBEaXNhYmxlIFBvbGljeUtpdCBieSBkZWZhdWx0CiBQQUNLQUdFQ09ORklHID8/PSAiIgotIyBXZSByZWFsbHkgZG9uJ3Qgd2FudCBQb2xpY3lLaXQgZm9yIG5hdGl2ZSBvciB1Y2xpYmMKKyMgV2UgcmVhbGx5IGRvbid0IHdhbnQgUG9saWN5S2l0IGZvciBuYXRpdmUKIFBBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID0gIiIKLVBBQ0tBR0VDT05GSUdfbGliYy11Y2xpYmMgPSAiIgogCiBQQUNLQUdFQ09ORklHW3BvbGljeWtpdF0gPSAiLS1lbmFibGUtZGVmYXVsdHMtc2VydmljZSwtLWRpc2FibGUtZGVmYXVsdHMtc2VydmljZSxwb2xraXQiCiBQQUNLQUdFQ09ORklHW2RlYnVnXSA9ICItLWVuYWJsZS1kZWJ1Zz15ZXMsIC0tZW5hYmxlLWRlYnVnPW1pbmltdW0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWNvbW1vbl8zLjE4LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWNvbW1vbl8zLjE4LjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZjNiYjMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1jb21tb25fMy4xOC4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotU1VNTUFSWSA9ICJDb21tb24gbWFjcm9zIGZvciBidWlsZGluZyBHTk9NRSBhcHBsaWNhdGlvbnMiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3Lmdub21lLm9yZy8iCi1CVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKLQotTElDRU5TRSA9ICJHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKLQotU0VDVElPTiA9ICJ4MTEvZ25vbWUiCi1pbmhlcml0IGdub21lYmFzZSBhbGxhcmNoCi0KLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjkzMzI1OGQ5YzIzZTIxOGViNmVlYzljYzE5NTFiMDUzIgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiMjI1NjllMzcwYWU3NTVlMDQ1MjdiNzYzMjhiZWZjNGM3M2I2MmJmZDRhNTcyNDk5ZmRlMTE2YjgzMThhZjhjZiIKLQotRVhUUkFfQVVUT1JFQ09ORiA9ICIiCi1ERVBFTkRTID0gIiIKLQotRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYWNsb2NhbCIKLUZJTEVTXyR7UE59LWRldiA9ICIiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS10aGVtZXMtc3RhbmRhcmRfMy4yMi4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS10aGVtZXMtc3RhbmRhcmRfMy4yMi4yLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjNjYzk3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtdGhlbWVzLXN0YW5kYXJkXzMuMjIuMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLVNVTU1BUlkgPSAiR1RLKzIgc3RhbmRhcmQgdGhlbWVzIgotSE9NRVBBR0UgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL0dOT01FL3NvdXJjZXMvZ25vbWUtdGhlbWVzLXN0YW5kYXJkLyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgotU0VDVElPTiA9ICJ4MTEvZ25vbWUiCi0KLUxJQ0VOU0UgPSAiTEdQTC0yLjEiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgZ3RrLWljb24tY2FjaGUgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGRpc3Ryb19mZWF0dXJlc19jaGVjawotCi1BTllfT0ZfRElTVFJPX0ZFQVRVUkVTID0gIiR7R1RLMkRJU1RST0ZFQVRVUkVTfSIKLQotREVQRU5EUyArPSAiaW50bHRvb2wtbmF0aXZlIGd0aysiCi0KLU1BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKLVNSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9LyR7QlBOfS8ke01BSl9WRVJ9LyR7QlBOfS0ke1BWfS50YXIueHogXAotICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjg0NjI0ZGJjZWNhYjdhZGQzMjY3MmFiYWUwMzAzMTRkIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImIzNDUxNmNkNTliODczYzE4N2MxODk3YzI1YmFjM2I5Y2UyZDMwYTQ3MmYxZmQ3YWU5ZDcxMDVkOTNlMTdkYTUiCi0KLUVYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZ3RrMy1lbmdpbmUiCi0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotICAgICAgICAjIE9ubHkgYnVpbGRpbmcgQWR3YWl0YSwgcmVtb3ZlIGhpZ2hjb250cmFzdCBmaWxlcwotICAgICAgICBybSAtcmYgJHtEfSR7cHJlZml4fS9zaGFyZS90aGVtZXMvSGlnaENvbnRyYXN0IFwKLSAgICAgICAgICAgICAgICR7RH0ke3ByZWZpeH0vc2hhcmUvaWNvbnMKLX0KLQotIyBUaGVyZSBjb3VsZCBiZSBnbm9tZS10aGVtZS1oaWdoY29udHJhc3QgYXMgd2VsbCBidXQgdGhhdCByZXF1aXJlcwotIyBndGsrMyBhbmQgaW5jbHVkZXMgbG90cyBvZiBpY29ucyAoaXMgYWxzbyBicm9rZW4gd2l0aCBCICE9IFMpLgotUEFDS0FHRVMgKz0gImdub21lLXRoZW1lLWFkd2FpdGEgXAotICAgICAgICAgICAgIGdub21lLXRoZW1lLWFkd2FpdGEtZGJnIFwKLSAgICAgICAgICAgICBnbm9tZS10aGVtZS1hZHdhaXRhLWRldsKgXAotICAgICAgICAgICAgIGdub21lLXRoZW1lLWFkd2FpdGEtZGFyayBcCi0gICAgICAgICAgICAgIgotCi1GSUxFU19nbm9tZS10aGVtZS1hZHdhaXRhID0gIiR7cHJlZml4fS9zaGFyZS90aGVtZXMvQWR3YWl0YSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTIuMC8yLjEwLjAvZW5naW5lcy9saWJhZHdhaXRhLnNvIgotRklMRVNfZ25vbWUtdGhlbWUtYWR3YWl0YS1kZXYgPSAiJHtsaWJkaXJ9L2d0ay0yLjAvMi4xMC4wL2VuZ2luZXMvbGliYWR3YWl0YS5sYSIKLUZJTEVTX2dub21lLXRoZW1lLWFkd2FpdGEtZGJnID0gIiR7bGliZGlyfS9ndGstMi4wLzIuMTAuMC9lbmdpbmVzLy5kZWJ1Zy9saWJhZHdhaXRhLnNvIgotCi1GSUxFU19nbm9tZS10aGVtZS1hZHdhaXRhLWRhcmsgPSAiJHtwcmVmaXh9L3NoYXJlL3RoZW1lcy9BZHdhaXRhLWRhcmsiCi1SREVQRU5EU19nbm9tZS10aGVtZS1hZHdhaXRhLWRhcmsgPSAiZ25vbWUtdGhlbWUtYWR3YWl0YSIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS10aGVtZXMtc3RhbmRhcmRfMy4yMi4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS10aGVtZXMtc3RhbmRhcmRfMy4yMi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZWUyNzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLXRoZW1lcy1zdGFuZGFyZF8zLjIyLjMuYmIKQEAgLTAsMCArMSw0NiBAQAorU1VNTUFSWSA9ICJHVEsrMiBzdGFuZGFyZCB0aGVtZXMiCitIT01FUEFHRSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvR05PTUUvc291cmNlcy9nbm9tZS10aGVtZXMtc3RhbmRhcmQvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCitTRUNUSU9OID0gIngxMS9nbm9tZSIKKworTElDRU5TRSA9ICJMR1BMLTIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCBndGstaWNvbi1jYWNoZSB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK0FOWV9PRl9ESVNUUk9fRkVBVFVSRVMgPSAiJHtHVEsyRElTVFJPRkVBVFVSRVN9IgorCitERVBFTkRTICs9ICJpbnRsdG9vbC1uYXRpdmUgZ3RrKyIKKworTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vJHtCUE59LyR7TUFKX1ZFUn0vJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjUxYzM2MmIxNTdiNjQwNzMwM2Q0NGY5M2MzMWVlMTEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjFkYzg3YzUyMjYxY2ZkNWI5NGQ2NWU4ZmZkOTIzZGRlYjVkMzk0NDU2MmY4NDk0MmVlZWIxOTdhYjhhYjU2YSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1ndGszLWVuZ2luZSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgICAgICMgT25seSBidWlsZGluZyBBZHdhaXRhLCByZW1vdmUgaGlnaGNvbnRyYXN0IGZpbGVzCisgICAgICAgIHJtIC1yZiAke0R9JHtwcmVmaXh9L3NoYXJlL3RoZW1lcy9IaWdoQ29udHJhc3QgXAorICAgICAgICAgICAgICAgJHtEfSR7cHJlZml4fS9zaGFyZS9pY29ucworCisJIyBUaGUgbGlidG9vbCBhcmNoaXZlIGZpbGUgaXMgdW5uZWVkZWQgd2l0aCBzaGFyZWQgbGlicyBvbiBtb2Rlcm4gTGludXgKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9ndGstMi4wLzIuMTAuMC9lbmdpbmVzL2xpYmFkd2FpdGEubGEKK30KKworIyBUaGVyZSBjb3VsZCBiZSBnbm9tZS10aGVtZS1oaWdoY29udHJhc3QgYXMgd2VsbCBidXQgdGhhdCByZXF1aXJlcworIyBndGsrMyBhbmQgaW5jbHVkZXMgbG90cyBvZiBpY29ucyAoaXMgYWxzbyBicm9rZW4gd2l0aCBCICE9IFMpLgorUEFDS0FHRVMgKz0gImdub21lLXRoZW1lLWFkd2FpdGEgXAorICAgICAgICAgICAgIGdub21lLXRoZW1lLWFkd2FpdGEtZGFyayBcCisgICAgICAgICAgICAgIgorCitGSUxFU19nbm9tZS10aGVtZS1hZHdhaXRhID0gIiR7cHJlZml4fS9zaGFyZS90aGVtZXMvQWR3YWl0YSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTIuMC8yLjEwLjAvZW5naW5lcy9saWJhZHdhaXRhLnNvIgorCitGSUxFU19nbm9tZS10aGVtZS1hZHdhaXRhLWRhcmsgPSAiJHtwcmVmaXh9L3NoYXJlL3RoZW1lcy9BZHdhaXRhLWRhcmsiCitSREVQRU5EU19nbm9tZS10aGVtZS1hZHdhaXRhLWRhcmsgPSAiZ25vbWUtdGhlbWUtYWR3YWl0YSIKKworIyBnbm9tZS10aGVtZXMtc3RhbmRhcmQgaXMgZW1wdHkgYW5kIGRvZXNuJ3QgZXhpc3QKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb25fMS41MC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ29iamVjdC1pbnRyb3NwZWN0aW9uXzEuNTAuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA5ZmM1Zi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb25fMS41MC4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLVNVTU1BUlkgPSAiTWlkZGxld2FyZSBsYXllciBiZXR3ZWVuIEdPYmplY3QtdXNpbmcgQyBsaWJyYXJpZXMgYW5kIGxhbmd1YWdlIGJpbmRpbmdzIgotSE9NRVBBR0UgPSAiaHR0cHM6Ly93aWtpLmdub21lLm9yZy9hY3Rpb24vc2hvdy9Qcm9qZWN0cy9HT2JqZWN0SW50cm9zcGVjdGlvbiIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgotU0VDVElPTiA9ICJsaWJzIgotTElDRU5TRSA9ICJMR1BMdjIrICYgR1BMdjIrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTBkNTc3NTM1YTM4OThlMWFlNWRiZjBhZTM1MDlhOGMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdG9vbHMvY29tcGlsZXIuYztlbmRsaW5lPTIwO21kNT1mYzUwMDdmYzIwMDIyNzIwZTZjMGIwY2RkZTQxZmFiZCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9naXNjYW5uZXIvc291cmNlc2Nhbm5lci5jO2VuZGxpbmU9MjI7bWQ1PTE5NGQ2ZTBjMWQwMDY2MmYzMmQwMzBjZTQ0ZGU4ZDM5IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dpcmVwb3NpdG9yeS9naXJlZ2lzdGVyZWR0eXBlaW5mby5jO2VuZGxpbmU9MjE7bWQ1PTY2MTg0NzYxMWFlNjk3OTQ2NTQxNWYzMWE3NTliYTI3IgotCi1TUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vMS41MC8ke0JQTn0tJHtQVn0udGFyLnh6IFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtUmV2ZXJ0LWFuLWluY29tcGxldGUtdXBzdHJlYW0tYXR0ZW1wdC1hdC1jcm9zcy1jb21waS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAyLWNvbmZpZ3VyZS5hYy1hZGQtaG9zdC1naS1naS1jcm9zcy13cmFwcGVyLWdpLWxkZC13cmEucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMy1naXNjYW5uZXItYWRkLXVzZS1iaW5hcnktd3JhcHBlci1vcHRpb24ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwNC1naXNjYW5uZXItYWRkLWEtdXNlLWxkZC13cmFwcGVyLW9wdGlvbi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA1LVByZWZpeC1wa2ctY29uZmlnLXBhdGhzLXdpdGgtUEtHX0NPTkZJR19TWVNST09UX0RJUi0ucGF0Y2ggXAotICAgICAgICAgICAiCi1TUkNfVVJJW21kNXN1bV0gPSAiNWFmOGQ3MjRmMjVkMGM5Y2ZiZTZkZjQxYjc3ZTVkYzAiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWM2NTk3YzY2NmY1NDNjNzBlZjNkN2M4OTNhYjA1Mjk2OGFmYWU2MjBlZmRjMDgwYzM2NjU3ZjQyMjYzMzdjNSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGd0ay1kb2MgcHl0aG9uM25hdGl2ZSBxZW11IGdvYmplY3QtaW50cm9zcGVjdGlvbi1kYXRhIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCi0KLSMgbmVlZGVkIGZvciB3cml0aW5nIG91dCB0aGUgcWVtdSB3cmFwcGVyIHNjcmlwdAotZXhwb3J0IFNUQUdJTkdfRElSX0hPU1QKLWV4cG9ydCBCCi0KLURFUEVORFNfYXBwZW5kID0gIiBsaWJmZmkgemxpYiBnbGliLTIuMCBweXRob24zIGZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSIKLQotIyB0YXJnZXQgYnVpbGQgbmVlZHMgcWVtdSB0byBydW4gdGVtcG9yYXJ5IGludHJvc3BlY3Rpb24gYmluYXJpZXMgY3JlYXRlZAotIyBvbiB0aGUgZmx5IGJ5IGctaXItc2Nhbm5lciBhbmQgYSBuYXRpdmUgdmVyc2lvbiBvZiBpdHNlbGYgdG8gcnVuCi0jIG5hdGl2ZSB2ZXJzaW9ucyBvZiBpdHMgb3duIHRvb2xzIGR1cmluZyBidWlsZC4KLSMgQWxzbyBwcmVsaW5rLXJ0bGQgaXMgdXNlZCB0byBmaW5kIG91dCBsaWJyYXJ5IGRlcGVuZGVuY2llcyBvZiBpbnRyb3NwZWN0aW9uIGJpbmFyaWVzCi0jIChzdGFuZGFyZCBsZGQgZG9lc24ndCB3b3JrIHdoZW4gY3Jvc3MtY29tcGlsaW5nKS4KLURFUEVORFNfY2xhc3MtdGFyZ2V0X2FwcGVuZCA9ICIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLW5hdGl2ZSBxZW11LW5hdGl2ZSBwcmVsaW5rLW5hdGl2ZSIKLQotU1NUQVRFX1NDQU5fRklMRVMgKz0gImctaXItc2Nhbm5lci1xZW11d3JhcHBlciBnLWlyLXNjYW5uZXItd3JhcHBlciBnLWlyLWNvbXBpbGVyLXdyYXBwZXIgZy1pci1zY2FubmVyLWxkZHdyYXBwZXIgR2lvLTIuMC5naXIgcG9zdGluc3QtbGRzb2NvbmYtJHtQTn0iCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKLSAgICAgICAgIyBUd2VhayB0aGUgbmF0aXZlIHB5dGhvbiBzY3JpcHRzIHNvIHRoYXQgdGhleSBkb24ndCByZWZlciB0byB0aGUKLSAgICAgICAgIyBmdWxsIHBhdGggb2YgbmF0aXZlIHB5dGhvbiBiaW5hcnkgKHRoZSBzb2x1dGlvbiBpcyB0YWtlbiBmcm9tIGdsaWItMi4wIHJlY2lwZSkKLSAgICAgICAgIyBUaGlzIHJlbW92ZXMgdGhlIHJpc2sgb2YgZXhjZWVkaW5nIExpbnV4IGtlcm5lbCdzIHNoZWJhbmcgbGluZSBsaW1pdCAoMTI4IGJ5dGVzKQotICAgICAgICBzZWQgLWkgLWUgJzFzLCMhLiosIyEke1VTUkJJTlBBVEh9L2VudiBweXRob24zLCcgJHtTfS90b29scy9nLWlyLXRvb2wtdGVtcGxhdGUuaW4KLX0KLQotZG9fY29uZmlndXJlX3ByZXBlbmRfY2xhc3MtdGFyZ2V0KCkgewotICAgICAgICAjIFdyaXRlIG91dCBhIHFlbXUgd3JhcHBlciB0aGF0IHdpbGwgYmUgZ2l2ZW4gdG8gZ2ktc2Nhbm5lciBzbyB0aGF0IGl0Ci0gICAgICAgICMgY2FuIHJ1biB0YXJnZXQgaGVscGVyIGJpbmFyaWVzIHRocm91Z2ggdGhhdC4KLSAgICAgICAgcWVtdV9iaW5hcnk9IiR7QHFlbXVfd3JhcHBlcl9jbWRsaW5lKGQsICckU1RBR0lOR19ESVJfSE9TVCcsIFsnXCRHSVJfRVhUUkFfTElCU19QQVRIJywnLmxpYnMnLCckU1RBR0lOR19ESVJfSE9TVC8ke2xpYmRpcn0nLCckU1RBR0lOR19ESVJfSE9TVC8ke2Jhc2VfbGliZGlyfSddKX0iCi0gICAgICAgIGNhdCA+ICR7Qn0vZy1pci1zY2FubmVyLXFlbXV3cmFwcGVyIDw8IEVPRgotIyEvYmluL3NoCi0jIFVzZSBhIG1vZHVsZXMgZGlyZWN0b3J5IHdoaWNoIGRvZXNuJ3QgZXhpc3Qgc28gd2UgZG9uJ3QgbG9hZCByYW5kb20gdGhpbmdzCi0jIHdoaWNoIG1heSB0aGVuIGdldCBkZWxldGVkIChvciB0aGVpciBkZXBlbmRlbmNpZXMpIGFuZCBwb3RlbnRpYWxseSBzZWdmYXVsdAotZXhwb3J0IEdJT19NT0RVTEVfRElSPSR7U1RBR0lOR19MSUJESVJ9L2dpby9tb2R1bGVzLWR1bW15Ci0KLSRxZW11X2JpbmFyeSAiXCRAIgotaWYgWyBcJD8gLW5lIDAgXTsgdGhlbgotICAgIGVjaG8gIklmIHRoZSBhYm92ZSBlcnJvciBtZXNzYWdlIGlzIGFib3V0IG1pc3NpbmcgLnNvIGxpYnJhcmllcywgdGhlbiBzZXR0aW5nIHVwIEdJUl9FWFRSQV9MSUJTX1BBVEggaW4gdGhlIHJlY2lwZSBzaG91bGQgaGVscC4iCi0gICAgZWNobyAiKHR5cGljYWxseSBsaWtlIHRoaXM6IEdJUl9FWFRSQV9MSUJTX1BBVEg9XCIkIiJ7Qn0vc29tZXRoaW5nLy5saWJzXCIgKSIKLSAgICBleGl0IDEKLWZpCi1FT0YKLSAgICAgICAgY2htb2QgK3ggJHtCfS9nLWlyLXNjYW5uZXItcWVtdXdyYXBwZXIKLQotICAgICAgICAjIFdyaXRlIG91dCBhIHdyYXBwZXIgZm9yIGctaXItc2Nhbm5lciBpdHNlbGYsIHdoaWNoIHdpbGwgYmUgdXNlZCB3aGVuIGJ1aWxkaW5nIGludHJvc3BlY3Rpb24gZmlsZXMKLSAgICAgICAgIyBmb3IgZ2xpYi1iYXNlZCBwYWNrYWdlcy4gVGhpcyB3cmFwcGVyIGNhbGxzIHRoZSBuYXRpdmUgdmVyc2lvbiBvZiB0aGUgc2Nhbm5lciwgYW5kIHRlbGxzIGl0IHRvIHVzZQotICAgICAgICAjIGEgcWVtdSB3cmFwcGVyIGZvciBydW5uaW5nIHRyYW5zaWVudCB0YXJnZXQgYmluYXJpZXMgcHJvZHVjZWQgYnkgdGhlIHNjYW5uZXIsIGFuZCBhbiBpbmNsdWRlIGRpcmVjdG9yeSAKLSAgICAgICAgIyBmcm9tIHRoZSB0YXJnZXQgc3lzcm9vdC4KLSAgICAgICAgY2F0ID4gJHtCfS9nLWlyLXNjYW5uZXItd3JhcHBlciA8PCBFT0YKLSMhL2Jpbi9zaAotIyBUaGlzIHByZXZlbnRzIGctaXItc2Nhbm5lciBmcm9tIHdyaXRpbmcgY2FjaGUgZGF0YSB0byAkSE9NRQotZXhwb3J0IEdJX1NDQU5ORVJfRElTQUJMRV9DQUNIRT0xCi0KLWctaXItc2Nhbm5lciAtLXVzZS1iaW5hcnktd3JhcHBlcj0ke1NUQUdJTkdfQklORElSfS9nLWlyLXNjYW5uZXItcWVtdXdyYXBwZXIgLS11c2UtbGRkLXdyYXBwZXI9JHtTVEFHSU5HX0JJTkRJUn0vZy1pci1zY2FubmVyLWxkZHdyYXBwZXIgLS1hZGQtaW5jbHVkZS1wYXRoPSR7U1RBR0lOR19EQVRBRElSfS9naXItMS4wICJcJEAiCi1FT0YKLSAgICAgICAgY2htb2QgK3ggJHtCfS9nLWlyLXNjYW5uZXItd3JhcHBlcgotCi0gICAgICAgICMgV3JpdGUgb3V0IGEgd3JhcHBlciBmb3IgZy1pci1jb21waWxlciwgd2hpY2ggcnVucyB0aGUgdGFyZ2V0IHZlcnNpb24gb2YgaXQgdGhyb3VnaCBxZW11LgotICAgICAgICAjIGctaXItY29tcGlsZXIgd3JpdGVzIG91dCB0aGUgcmF3IGNvbnRlbnQgb2YgYSBDIHN0cnVjdCB0byBkaXNrLCBhbmQgdGhlcmVmb3JlIGlzIGFyY2hpdGVjdHVyZSBkZXBlbmRlbnQuCi0gICAgICAgIGNhdCA+ICR7Qn0vZy1pci1jb21waWxlci13cmFwcGVyIDw8IEVPRgotIyEvYmluL3NoCi0ke1NUQUdJTkdfQklORElSfS9nLWlyLXNjYW5uZXItcWVtdXdyYXBwZXIgJHtTVEFHSU5HX0JJTkRJUn0vZy1pci1jb21waWxlciAiXCRAIgotRU9GCi0gICAgICAgIGNobW9kICt4ICR7Qn0vZy1pci1jb21waWxlci13cmFwcGVyCi0KLSAgICAgICAgIyBXcml0ZSBvdXQgYSB3cmFwcGVyIHRvIHVzZSBpbnN0ZWFkIG9mIGxkZCwgd2hpY2ggZG9lcyBub3Qgd29yayB3aGVuIGEgYmluYXJ5IGlzIGJ1aWx0Ci0gICAgICAgICMgZm9yIGEgZGlmZmVyZW50IGFyY2hpdGVjdHVyZQotICAgICAgICBjYXQgPiAke0J9L2ctaXItc2Nhbm5lci1sZGR3cmFwcGVyIDw8IEVPRgotIyEvYmluL3NoCi1wcmVsaW5rLXJ0bGQgLS1yb290PSRTVEFHSU5HX0RJUl9IT1NUICJcJEAiCi1FT0YKLSAgICAgICAgY2htb2QgK3ggJHtCfS9nLWlyLXNjYW5uZXItbGRkd3JhcHBlcgotCi0gICAgICAgICMgQWxzbyB0d2VhayB0aGUgdGFyZ2V0IHB5dGhvbiBzY3JpcHRzIHNvIHRoYXQgdGhleSBkb24ndCByZWZlciB0byB0aGUKLSAgICAgICAgIyBuYXRpdmUgdmVyc2lvbiBvZiBweXRob24gYmluYXJ5ICh0aGUgc29sdXRpb24gaXMgdGFrZW4gZnJvbSBnbGliLTIuMCByZWNpcGUpCi0gICAgICAgIHNlZCAtaSAtZSAnMXMsIyEuKiwjISR7VVNSQklOUEFUSH0vZW52IHB5dGhvbjMsJyAke1N9L3Rvb2xzL2ctaXItdG9vbC10ZW1wbGF0ZS5pbgotfQotCi0jIENvbmZpZ3VyZSB0YXJnZXQgYnVpbGQgdG8gdXNlIG5hdGl2ZSB0b29scyBvZiBpdHNlbGYgYW5kIHRvIHVzZSBhIHFlbXUgd3JhcHBlcgotIyBhbmQgb3B0aW9uYWxseSB0byBnZW5lcmF0ZSBpbnRyb3NwZWN0aW9uIGRhdGEKLUVYVFJBX09FQ09ORl9jbGFzcy10YXJnZXQgKz0gIi0tZW5hYmxlLWhvc3QtZ2kgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtZ2ktY3Jvc3Mtd3JhcHBlcj0ke0J9L2ctaXItc2Nhbm5lci1xZW11d3JhcHBlciBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWVuYWJsZS1naS1sZGQtd3JhcHBlcj0ke0J9L2ctaXItc2Nhbm5lci1sZGR3cmFwcGVyIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdHSV9EQVRBX0VOQUJMRUQnLCAnVHJ1ZScsICctLWVuYWJsZS1pbnRyb3NwZWN0aW9uLWRhdGEnLCAnLS1kaXNhYmxlLWludHJvc3BlY3Rpb24tZGF0YScsIGQpfSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKLQotUEFDS0FHRUNPTkZJRyA/PSAiIgotUEFDS0FHRUNPTkZJR1tkb2N0b29sXSA9ICItLWVuYWJsZS1kb2N0b29sLC0tZGlzYWJsZS1kb2N0b29sLHB5dGhvbjMtbWFrbywiCi0KLWRvX2NvbXBpbGVfcHJlcGVuZCgpIHsKLSAgICAgICAgIyBUaGlzIHByZXZlbnRzIGctaXItc2Nhbm5lciBmcm9tIHdyaXRpbmcgY2FjaGUgZGF0YSB0byAkSE9NRQotICAgICAgICBleHBvcnQgR0lfU0NBTk5FUl9ESVNBQkxFX0NBQ0hFPTEKLQotICAgICAgICAjIE5lZWRlZCB0byBydW4gZy1pciB1bml0IHRlc3RzLCB3aGljaCB3b24ndCBiZSBhYmxlIHRvIGZpbmQgdGhlIGJ1aWx0IGxpYnJhcmllcyBvdGhlcndpc2UKLSAgICAgICAgZXhwb3J0IEdJUl9FWFRSQV9MSUJTX1BBVEg9JEIvLmxpYnMKLX0KLQotIyBPdXIgd3JhcHBlcnMgbmVlZCB0byBiZSBhdmFpbGFibGUgc3lzdGVtLXdpZGUsIGJlY2F1c2UgdGhleSB3aWxsIGJlIHVzZWQgCi0jIHRvIGJ1aWxkIGludHJvc3BlY3Rpb24gZmlsZXMgZm9yIGFsbCBvdGhlciBnb2JqZWN0LWJhc2VkIHBhY2thZ2VzCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7Ci0gICAgICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8KLSAgICAgICAgaW5zdGFsbCAke0J9L2ctaXItc2Nhbm5lci1xZW11d3JhcHBlciAke0R9JHtiaW5kaXJ9LwotICAgICAgICBpbnN0YWxsICR7Qn0vZy1pci1zY2FubmVyLXdyYXBwZXIgJHtEfSR7YmluZGlyfS8KLSAgICAgICAgaW5zdGFsbCAke0J9L2ctaXItY29tcGlsZXItd3JhcHBlciAke0R9JHtiaW5kaXJ9LwotICAgICAgICBpbnN0YWxsICR7Qn0vZy1pci1zY2FubmVyLWxkZHdyYXBwZXIgJHtEfSR7YmluZGlyfS8KLX0KLQotIyAudHlwZWxpYiBmaWxlcyBhcmUgbmVlZGVkIGF0IHJ1bnRpbWUgYW5kIHNvIHRoZXkgZ28gdG8gdGhlIG1haW4gcGFja2FnZQotRklMRVNfJHtQTn1fYXBwZW5kID0gIiAke2xpYmRpcn0vZ2lyZXBvc2l0b3J5LSovKi50eXBlbGliIgotCi0jIC5naXIgZmlsZXMgZ28gdG8gZGV2IHBhY2thZ2UsIGFzIHRoZXkncmUgbmVlZGVkIGZvciBkZXZlbG9waW5nIChidXQgbm90IGZvciBydW5uaW5nKQotIyB0aGluZ3MgdGhhdCBkZXBlbmRzIG9uIGludHJvc3BlY3Rpb24uCi1GSUxFU18ke1BOfS1kZXZfYXBwZW5kID0gIiAke2RhdGFkaXJ9L2dpci0qLyouZ2lyIgotCi0jIFRoZXNlIGFyZSB1c2VkIGJ5IGdvYmplY3QtYmFzZWQgcGFja2FnZXMKLSMgdG8gZ2VuZXJhdGUgdHJhbnNpZW50IGludHJvc3BlY3Rpb24gYmluYXJpZXMKLUZJTEVTXyR7UE59LWRldl9hcHBlbmQgPSAiICR7ZGF0YWRpcn0vZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMC9nZHVtcC5jIFwKLSAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMC9NYWtlZmlsZS5pbnRyb3NwZWN0aW9uIgotCi0jIFRoZXNlIGFyZSB1c2VkIGJ5IGRlcGVuZGVudCBwYWNrYWdlcyAoZS5nLiBweWdvYmplY3QpIHRvIGJ1aWxkIHRoZWlyCi0jIHRlc3RzdWl0ZXMuCi1GSUxFU18ke1BOfS1kZXZfYXBwZW5kID0gIiAke2RhdGFkaXJ9L2dvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAvdGVzdHMvKi5jIFwKLSAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAvdGVzdHMvKi5oIgotCi1GSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ2lzY2FubmVyLy5kZWJ1Zy8iCi1GSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ2lzY2FubmVyLyouYSIKLQotIyB3ZSBuZWVkIHRhcmdldCB2ZXJzaW9ucyBvZiBpbnRyb3NwZWN0aW9uIHRvb2xzIGluIHN5c3Jvb3Qgc28gdGhhdCB0aGV5IGNhbiBiZSBydW4gdmlhIHFlbXUKLSMgd2hlbiBidWlsZGluZyBpbnRyb3NwZWN0aW9uIGZpbGVzIGluIG90aGVyIHBhY2thZ2VzCi1TWVNST09UX0RJUlNfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgJHtiaW5kaXJ9IgotCi1TWVNST09UX1BSRVBST0NFU1NfRlVOQ1NfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgZ2lfYmluYXJpZXNfc3lzcm9vdF9wcmVwcm9jZXNzIgotZ2lfYmluYXJpZXNfc3lzcm9vdF9wcmVwcm9jZXNzKCkgewotICAgICAgICAjIFR3ZWFrIHRoZSBiaW5hcnkgbmFtZXMgaW4gdGhlIGludHJvc3BlY3Rpb24gcGtnY29uZmlnIGZpbGUsIHNvIHRoYXQgaXQKLSAgICAgICAgIyBwaWNrcyB1cCBvdXIgd3JhcHBlcnMgd2hpY2ggZG8gdGhlIGNyb3NzLWNvbXBpbGUgYW5kIHFlbXUgbWFnaWMuCi0gICAgICAgIHNlZCAtaSBcCi0gICAgICAgICAgIC1lICJzfGdfaXJfc2Nhbm5lcj0uKnxnX2lyX3NjYW5uZXI9JHtiaW5kaXJ9L2ctaXItc2Nhbm5lci13cmFwcGVyfCIgXAotICAgICAgICAgICAtZSAic3xnX2lyX2NvbXBpbGVyPS4qfGdfaXJfY29tcGlsZXI9JHtiaW5kaXJ9L2ctaXItY29tcGlsZXItd3JhcHBlcnwiIFwKLSAgICAgICAgICAgJHtTWVNST09UX0RFU1RESVJ9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9nb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wLnBjCi19Ci0KLSMgTmVlZCB0byBlbnN1cmUgbGQuc28uY29uZiBleGlzdHMgc28gcHJlbGluay1uYXRpdmUgd29ya3MKLSMgYm90aCBiZWZvcmUgd2UgYnVpbGQgYW5kIGlmIHdlIGluc3RhbGwgZnJvbSBzc3RhdGUKLWRvX2NvbmZpZ3VyZVtwcmVmdW5jc10gKz0gImdvYmplY3RfaW50cm9zcGVjdGlvbl9wcmVjb25maWd1cmUiCi1weXRob24gZ29iamVjdF9pbnRyb3NwZWN0aW9uX3ByZWNvbmZpZ3VyZSAoKSB7Ci0gICAgb2UudXRpbHMud3JpdGVfbGRfc29fY29uZihkKQotfQotCi1TWVNST09UX1BSRVBST0NFU1NfRlVOQ1NfYXBwZW5kID0gIiBnaV9sZHNvY29uZl9zeXNyb290X3ByZXByb2Nlc3MiCi1naV9sZHNvY29uZl9zeXNyb290X3ByZXByb2Nlc3MgKCkgewotCW1rZGlyIC1wICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyfQotCWRlc3Q9JHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJ9L3Bvc3RpbnN0LWxkc29jb25mLSR7UE59Ci0JZWNobyAiIyEvYmluL3NoIiA+ICRkZXN0Ci0JZWNobyAibWtkaXIgLXAgJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtzeXNjb25mZGlyfSIgPj4gJGRlc3QKLQllY2hvICJlY2hvICR7YmFzZV9saWJkaXJ9ID4+ICR7U1RBR0lOR19ESVJfVEFSR0VUfSR7c3lzY29uZmRpcn0vbGQuc28uY29uZiIgPj4gJGRlc3QKLQllY2hvICJlY2hvICR7bGliZGlyfSA+PiAke1NUQUdJTkdfRElSX1RBUkdFVH0ke3N5c2NvbmZkaXJ9L2xkLnNvLmNvbmYiID4+ICRkZXN0Ci0JY2htb2QgNzU1ICRkZXN0Ci19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dvYmplY3QtaW50cm9zcGVjdGlvbi9nb2JqZWN0LWludHJvc3BlY3Rpb25fMS41Mi4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ29iamVjdC1pbnRyb3NwZWN0aW9uXzEuNTIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmU3MWEzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nb2JqZWN0LWludHJvc3BlY3Rpb24vZ29iamVjdC1pbnRyb3NwZWN0aW9uXzEuNTIuMS5iYgpAQCAtMCwwICsxLDE4OCBAQAorU1VNTUFSWSA9ICJNaWRkbGV3YXJlIGxheWVyIGJldHdlZW4gR09iamVjdC11c2luZyBDIGxpYnJhcmllcyBhbmQgbGFuZ3VhZ2UgYmluZGluZ3MiCitIT01FUEFHRSA9ICJodHRwczovL3dpa2kuZ25vbWUub3JnL2FjdGlvbi9zaG93L1Byb2plY3RzL0dPYmplY3RJbnRyb3NwZWN0aW9uIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxHUEx2MisgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05MGQ1Nzc1MzVhMzg5OGUxYWU1ZGJmMGFlMzUwOWE4YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90b29scy9jb21waWxlci5jO2VuZGxpbmU9MjA7bWQ1PWZjNTAwN2ZjMjAwMjI3MjBlNmMwYjBjZGRlNDFmYWJkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dpc2Nhbm5lci9zb3VyY2VzY2FubmVyLmM7ZW5kbGluZT0yMjttZDU9MTk0ZDZlMGMxZDAwNjYyZjMyZDAzMGNlNDRkZThkMzkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2lyZXBvc2l0b3J5L2dpcmVnaXN0ZXJlZHR5cGVpbmZvLmM7ZW5kbGluZT0yMTttZDU9NjYxODQ3NjExYWU2OTc5NDY1NDE1ZjMxYTc1OWJhMjciCisKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9LyR7QlBOfS8xLjUyLyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1SZXZlcnQtYW4taW5jb21wbGV0ZS11cHN0cmVhbS1hdHRlbXB0LWF0LWNyb3NzLWNvbXBpLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItY29uZmlndXJlLmFjLWFkZC1ob3N0LWdpLWdpLWNyb3NzLXdyYXBwZXItZ2ktbGRkLXdyYS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLWdpc2Nhbm5lci1hZGQtdXNlLWJpbmFyeS13cmFwcGVyLW9wdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LWdpc2Nhbm5lci1hZGQtYS11c2UtbGRkLXdyYXBwZXItb3B0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtUHJlZml4LXBrZy1jb25maWctcGF0aHMtd2l0aC1QS0dfQ09ORklHX1NZU1JPT1RfRElSLS5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNDE1NzA3Mzk5MWY5ZWViMGVkOTUzMzUxYjY1ZWI2MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyZWQwYzM4ZDUyZmUxYWE2ZmM0ZGVmMGM4NjhmZTQ4MWNiODdiNTMyZmM2OTQ3NTZiMjZkNmNmYWIyOWZhZmY0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ3RrLWRvYyBweXRob24zbmF0aXZlIHFlbXUgZ29iamVjdC1pbnRyb3NwZWN0aW9uLWRhdGEgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworIyBuZWVkZWQgZm9yIHdyaXRpbmcgb3V0IHRoZSBxZW11IHdyYXBwZXIgc2NyaXB0CitleHBvcnQgU1RBR0lOR19ESVJfSE9TVAorZXhwb3J0IEIKKworREVQRU5EU19hcHBlbmQgPSAiIGxpYmZmaSB6bGliIGdsaWItMi4wIHB5dGhvbjMgZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIgorCisjIHRhcmdldCBidWlsZCBuZWVkcyBxZW11IHRvIHJ1biB0ZW1wb3JhcnkgaW50cm9zcGVjdGlvbiBiaW5hcmllcyBjcmVhdGVkCisjIG9uIHRoZSBmbHkgYnkgZy1pci1zY2FubmVyIGFuZCBhIG5hdGl2ZSB2ZXJzaW9uIG9mIGl0c2VsZiB0byBydW4KKyMgbmF0aXZlIHZlcnNpb25zIG9mIGl0cyBvd24gdG9vbHMgZHVyaW5nIGJ1aWxkLgorIyBBbHNvIHByZWxpbmstcnRsZCBpcyB1c2VkIHRvIGZpbmQgb3V0IGxpYnJhcnkgZGVwZW5kZW5jaWVzIG9mIGludHJvc3BlY3Rpb24gYmluYXJpZXMKKyMgKHN0YW5kYXJkIGxkZCBkb2Vzbid0IHdvcmsgd2hlbiBjcm9zcy1jb21waWxpbmcpLgorREVQRU5EU19jbGFzcy10YXJnZXRfYXBwZW5kID0gIiBnb2JqZWN0LWludHJvc3BlY3Rpb24tbmF0aXZlIHFlbXUtbmF0aXZlIHByZWxpbmstbmF0aXZlIgorCitTU1RBVEVfU0NBTl9GSUxFUyArPSAiZy1pci1zY2FubmVyLXFlbXV3cmFwcGVyIGctaXItc2Nhbm5lci13cmFwcGVyIGctaXItY29tcGlsZXItd3JhcHBlciBnLWlyLXNjYW5uZXItbGRkd3JhcHBlciBHaW8tMi4wLmdpciBwb3N0aW5zdC1sZHNvY29uZi0ke1BOfSIKKworZG9fY29uZmlndXJlX3ByZXBlbmRfY2xhc3MtbmF0aXZlKCkgeworICAgICAgICAjIFR3ZWFrIHRoZSBuYXRpdmUgcHl0aG9uIHNjcmlwdHMgc28gdGhhdCB0aGV5IGRvbid0IHJlZmVyIHRvIHRoZQorICAgICAgICAjIGZ1bGwgcGF0aCBvZiBuYXRpdmUgcHl0aG9uIGJpbmFyeSAodGhlIHNvbHV0aW9uIGlzIHRha2VuIGZyb20gZ2xpYi0yLjAgcmVjaXBlKQorICAgICAgICAjIFRoaXMgcmVtb3ZlcyB0aGUgcmlzayBvZiBleGNlZWRpbmcgTGludXgga2VybmVsJ3Mgc2hlYmFuZyBsaW5lIGxpbWl0ICgxMjggYnl0ZXMpCisgICAgICAgIHNlZCAtaSAtZSAnMXMsIyEuKiwjISR7VVNSQklOUEFUSH0vZW52IHB5dGhvbjMsJyAke1N9L3Rvb2xzL2ctaXItdG9vbC10ZW1wbGF0ZS5pbgorfQorCitkb19jb25maWd1cmVfcHJlcGVuZF9jbGFzcy10YXJnZXQoKSB7CisgICAgICAgICMgV3JpdGUgb3V0IGEgcWVtdSB3cmFwcGVyIHRoYXQgd2lsbCBiZSBnaXZlbiB0byBnaS1zY2FubmVyIHNvIHRoYXQgaXQKKyAgICAgICAgIyBjYW4gcnVuIHRhcmdldCBoZWxwZXIgYmluYXJpZXMgdGhyb3VnaCB0aGF0LgorICAgICAgICBxZW11X2JpbmFyeT0iJHtAcWVtdV93cmFwcGVyX2NtZGxpbmUoZCwgJyRTVEFHSU5HX0RJUl9IT1NUJywgWydcJEdJUl9FWFRSQV9MSUJTX1BBVEgnLCcubGlicycsJyRTVEFHSU5HX0RJUl9IT1NULyR7bGliZGlyfScsJyRTVEFHSU5HX0RJUl9IT1NULyR7YmFzZV9saWJkaXJ9J10pfSIKKyAgICAgICAgY2F0ID4gJHtCfS9nLWlyLXNjYW5uZXItcWVtdXdyYXBwZXIgPDwgRU9GCisjIS9iaW4vc2gKKyMgVXNlIGEgbW9kdWxlcyBkaXJlY3Rvcnkgd2hpY2ggZG9lc24ndCBleGlzdCBzbyB3ZSBkb24ndCBsb2FkIHJhbmRvbSB0aGluZ3MKKyMgd2hpY2ggbWF5IHRoZW4gZ2V0IGRlbGV0ZWQgKG9yIHRoZWlyIGRlcGVuZGVuY2llcykgYW5kIHBvdGVudGlhbGx5IHNlZ2ZhdWx0CitleHBvcnQgR0lPX01PRFVMRV9ESVI9JHtTVEFHSU5HX0xJQkRJUn0vZ2lvL21vZHVsZXMtZHVtbXkKKworJHFlbXVfYmluYXJ5ICJcJEAiCitpZiBbIFwkPyAtbmUgMCBdOyB0aGVuCisgICAgZWNobyAiSWYgdGhlIGFib3ZlIGVycm9yIG1lc3NhZ2UgaXMgYWJvdXQgbWlzc2luZyAuc28gbGlicmFyaWVzLCB0aGVuIHNldHRpbmcgdXAgR0lSX0VYVFJBX0xJQlNfUEFUSCBpbiB0aGUgcmVjaXBlIHNob3VsZCBoZWxwLiIKKyAgICBlY2hvICIodHlwaWNhbGx5IGxpa2UgdGhpczogR0lSX0VYVFJBX0xJQlNfUEFUSD1cIiQiIntCfS9zb21ldGhpbmcvLmxpYnNcIiApIgorICAgIGV4aXQgMQorZmkKK0VPRgorICAgICAgICBjaG1vZCAreCAke0J9L2ctaXItc2Nhbm5lci1xZW11d3JhcHBlcgorCisgICAgICAgICMgV3JpdGUgb3V0IGEgd3JhcHBlciBmb3IgZy1pci1zY2FubmVyIGl0c2VsZiwgd2hpY2ggd2lsbCBiZSB1c2VkIHdoZW4gYnVpbGRpbmcgaW50cm9zcGVjdGlvbiBmaWxlcworICAgICAgICAjIGZvciBnbGliLWJhc2VkIHBhY2thZ2VzLiBUaGlzIHdyYXBwZXIgY2FsbHMgdGhlIG5hdGl2ZSB2ZXJzaW9uIG9mIHRoZSBzY2FubmVyLCBhbmQgdGVsbHMgaXQgdG8gdXNlCisgICAgICAgICMgYSBxZW11IHdyYXBwZXIgZm9yIHJ1bm5pbmcgdHJhbnNpZW50IHRhcmdldCBiaW5hcmllcyBwcm9kdWNlZCBieSB0aGUgc2Nhbm5lciwgYW5kIGFuIGluY2x1ZGUgZGlyZWN0b3J5IAorICAgICAgICAjIGZyb20gdGhlIHRhcmdldCBzeXNyb290LgorICAgICAgICBjYXQgPiAke0J9L2ctaXItc2Nhbm5lci13cmFwcGVyIDw8IEVPRgorIyEvYmluL3NoCisjIFRoaXMgcHJldmVudHMgZy1pci1zY2FubmVyIGZyb20gd3JpdGluZyBjYWNoZSBkYXRhIHRvICRIT01FCitleHBvcnQgR0lfU0NBTk5FUl9ESVNBQkxFX0NBQ0hFPTEKKworZy1pci1zY2FubmVyIC0tdXNlLWJpbmFyeS13cmFwcGVyPSR7U1RBR0lOR19CSU5ESVJ9L2ctaXItc2Nhbm5lci1xZW11d3JhcHBlciAtLXVzZS1sZGQtd3JhcHBlcj0ke1NUQUdJTkdfQklORElSfS9nLWlyLXNjYW5uZXItbGRkd3JhcHBlciAtLWFkZC1pbmNsdWRlLXBhdGg9JHtTVEFHSU5HX0RBVEFESVJ9L2dpci0xLjAgIlwkQCIKK0VPRgorICAgICAgICBjaG1vZCAreCAke0J9L2ctaXItc2Nhbm5lci13cmFwcGVyCisKKyAgICAgICAgIyBXcml0ZSBvdXQgYSB3cmFwcGVyIGZvciBnLWlyLWNvbXBpbGVyLCB3aGljaCBydW5zIHRoZSB0YXJnZXQgdmVyc2lvbiBvZiBpdCB0aHJvdWdoIHFlbXUuCisgICAgICAgICMgZy1pci1jb21waWxlciB3cml0ZXMgb3V0IHRoZSByYXcgY29udGVudCBvZiBhIEMgc3RydWN0IHRvIGRpc2ssIGFuZCB0aGVyZWZvcmUgaXMgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudC4KKyAgICAgICAgY2F0ID4gJHtCfS9nLWlyLWNvbXBpbGVyLXdyYXBwZXIgPDwgRU9GCisjIS9iaW4vc2gKKyR7U1RBR0lOR19CSU5ESVJ9L2ctaXItc2Nhbm5lci1xZW11d3JhcHBlciAke1NUQUdJTkdfQklORElSfS9nLWlyLWNvbXBpbGVyICJcJEAiCitFT0YKKyAgICAgICAgY2htb2QgK3ggJHtCfS9nLWlyLWNvbXBpbGVyLXdyYXBwZXIKKworICAgICAgICAjIFdyaXRlIG91dCBhIHdyYXBwZXIgdG8gdXNlIGluc3RlYWQgb2YgbGRkLCB3aGljaCBkb2VzIG5vdCB3b3JrIHdoZW4gYSBiaW5hcnkgaXMgYnVpbHQKKyAgICAgICAgIyBmb3IgYSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlCisgICAgICAgIGNhdCA+ICR7Qn0vZy1pci1zY2FubmVyLWxkZHdyYXBwZXIgPDwgRU9GCisjIS9iaW4vc2gKK3ByZWxpbmstcnRsZCAtLXJvb3Q9JFNUQUdJTkdfRElSX0hPU1QgIlwkQCIKK0VPRgorICAgICAgICBjaG1vZCAreCAke0J9L2ctaXItc2Nhbm5lci1sZGR3cmFwcGVyCisKKyAgICAgICAgIyBBbHNvIHR3ZWFrIHRoZSB0YXJnZXQgcHl0aG9uIHNjcmlwdHMgc28gdGhhdCB0aGV5IGRvbid0IHJlZmVyIHRvIHRoZQorICAgICAgICAjIG5hdGl2ZSB2ZXJzaW9uIG9mIHB5dGhvbiBiaW5hcnkgKHRoZSBzb2x1dGlvbiBpcyB0YWtlbiBmcm9tIGdsaWItMi4wIHJlY2lwZSkKKyAgICAgICAgc2VkIC1pIC1lICcxcywjIS4qLCMhJHtVU1JCSU5QQVRIfS9lbnYgcHl0aG9uMywnICR7U30vdG9vbHMvZy1pci10b29sLXRlbXBsYXRlLmluCit9CisKKyMgQ29uZmlndXJlIHRhcmdldCBidWlsZCB0byB1c2UgbmF0aXZlIHRvb2xzIG9mIGl0c2VsZiBhbmQgdG8gdXNlIGEgcWVtdSB3cmFwcGVyCisjIGFuZCBvcHRpb25hbGx5IHRvIGdlbmVyYXRlIGludHJvc3BlY3Rpb24gZGF0YQorRVhUUkFfT0VDT05GX2NsYXNzLXRhcmdldCArPSAiLS1lbmFibGUtaG9zdC1naSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWRpc2FibGUtc3RhdGljIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZW5hYmxlLWdpLWNyb3NzLXdyYXBwZXI9JHtCfS9nLWlyLXNjYW5uZXItcWVtdXdyYXBwZXIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtZ2ktbGRkLXdyYXBwZXI9JHtCfS9nLWlyLXNjYW5uZXItbGRkd3JhcHBlciBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnR0lfREFUQV9FTkFCTEVEJywgJ1RydWUnLCAnLS1lbmFibGUtaW50cm9zcGVjdGlvbi1kYXRhJywgJy0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uLWRhdGEnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCisKK1BBQ0tBR0VDT05GSUcgPz0gIiIKK1BBQ0tBR0VDT05GSUdbZG9jdG9vbF0gPSAiLS1lbmFibGUtZG9jdG9vbCwtLWRpc2FibGUtZG9jdG9vbCxweXRob24zLW1ha28sIgorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgICAgICMgVGhpcyBwcmV2ZW50cyBnLWlyLXNjYW5uZXIgZnJvbSB3cml0aW5nIGNhY2hlIGRhdGEgdG8gJEhPTUUKKyAgICAgICAgZXhwb3J0IEdJX1NDQU5ORVJfRElTQUJMRV9DQUNIRT0xCisKKyAgICAgICAgIyBOZWVkZWQgdG8gcnVuIGctaXIgdW5pdCB0ZXN0cywgd2hpY2ggd29uJ3QgYmUgYWJsZSB0byBmaW5kIHRoZSBidWlsdCBsaWJyYXJpZXMgb3RoZXJ3aXNlCisgICAgICAgIGV4cG9ydCBHSVJfRVhUUkFfTElCU19QQVRIPSRCLy5saWJzCit9CisKKyMgT3VyIHdyYXBwZXJzIG5lZWQgdG8gYmUgYXZhaWxhYmxlIHN5c3RlbS13aWRlLCBiZWNhdXNlIHRoZXkgd2lsbCBiZSB1c2VkIAorIyB0byBidWlsZCBpbnRyb3NwZWN0aW9uIGZpbGVzIGZvciBhbGwgb3RoZXIgZ29iamVjdC1iYXNlZCBwYWNrYWdlcworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgeworICAgICAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vCisgICAgICAgIGluc3RhbGwgJHtCfS9nLWlyLXNjYW5uZXItcWVtdXdyYXBwZXIgJHtEfSR7YmluZGlyfS8KKyAgICAgICAgaW5zdGFsbCAke0J9L2ctaXItc2Nhbm5lci13cmFwcGVyICR7RH0ke2JpbmRpcn0vCisgICAgICAgIGluc3RhbGwgJHtCfS9nLWlyLWNvbXBpbGVyLXdyYXBwZXIgJHtEfSR7YmluZGlyfS8KKyAgICAgICAgaW5zdGFsbCAke0J9L2ctaXItc2Nhbm5lci1sZGR3cmFwcGVyICR7RH0ke2JpbmRpcn0vCit9CisKKyMgLnR5cGVsaWIgZmlsZXMgYXJlIG5lZWRlZCBhdCBydW50aW1lIGFuZCBzbyB0aGV5IGdvIHRvIHRoZSBtYWluIHBhY2thZ2UKK0ZJTEVTXyR7UE59X2FwcGVuZCA9ICIgJHtsaWJkaXJ9L2dpcmVwb3NpdG9yeS0qLyoudHlwZWxpYiIKKworIyAuZ2lyIGZpbGVzIGdvIHRvIGRldiBwYWNrYWdlLCBhcyB0aGV5J3JlIG5lZWRlZCBmb3IgZGV2ZWxvcGluZyAoYnV0IG5vdCBmb3IgcnVubmluZykKKyMgdGhpbmdzIHRoYXQgZGVwZW5kcyBvbiBpbnRyb3NwZWN0aW9uLgorRklMRVNfJHtQTn0tZGV2X2FwcGVuZCA9ICIgJHtkYXRhZGlyfS9naXItKi8qLmdpciIKKworIyBUaGVzZSBhcmUgdXNlZCBieSBnb2JqZWN0LWJhc2VkIHBhY2thZ2VzCisjIHRvIGdlbmVyYXRlIHRyYW5zaWVudCBpbnRyb3NwZWN0aW9uIGJpbmFyaWVzCitGSUxFU18ke1BOfS1kZXZfYXBwZW5kID0gIiAke2RhdGFkaXJ9L2dvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAvZ2R1bXAuYyBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAvTWFrZWZpbGUuaW50cm9zcGVjdGlvbiIKKworIyBUaGVzZSBhcmUgdXNlZCBieSBkZXBlbmRlbnQgcGFja2FnZXMgKGUuZy4gcHlnb2JqZWN0KSB0byBidWlsZCB0aGVpcgorIyB0ZXN0c3VpdGVzLgorRklMRVNfJHtQTn0tZGV2X2FwcGVuZCA9ICIgJHtkYXRhZGlyfS9nb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wL3Rlc3RzLyouYyBcCisgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9nb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wL3Rlc3RzLyouaCIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dpc2Nhbm5lci8uZGVidWcvIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vZ29iamVjdC1pbnRyb3NwZWN0aW9uL2dpc2Nhbm5lci8qLmEiCisKKyMgd2UgbmVlZCB0YXJnZXQgdmVyc2lvbnMgb2YgaW50cm9zcGVjdGlvbiB0b29scyBpbiBzeXNyb290IHNvIHRoYXQgdGhleSBjYW4gYmUgcnVuIHZpYSBxZW11CisjIHdoZW4gYnVpbGRpbmcgaW50cm9zcGVjdGlvbiBmaWxlcyBpbiBvdGhlciBwYWNrYWdlcworU1lTUk9PVF9ESVJTX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiICR7YmluZGlyfSIKKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIGdpX2JpbmFyaWVzX3N5c3Jvb3RfcHJlcHJvY2VzcyIKK2dpX2JpbmFyaWVzX3N5c3Jvb3RfcHJlcHJvY2VzcygpIHsKKyAgICAgICAgIyBUd2VhayB0aGUgYmluYXJ5IG5hbWVzIGluIHRoZSBpbnRyb3NwZWN0aW9uIHBrZ2NvbmZpZyBmaWxlLCBzbyB0aGF0IGl0CisgICAgICAgICMgcGlja3MgdXAgb3VyIHdyYXBwZXJzIHdoaWNoIGRvIHRoZSBjcm9zcy1jb21waWxlIGFuZCBxZW11IG1hZ2ljLgorICAgICAgICBzZWQgLWkgXAorICAgICAgICAgICAtZSAic3xnX2lyX3NjYW5uZXI9Lip8Z19pcl9zY2FubmVyPSR7YmluZGlyfS9nLWlyLXNjYW5uZXItd3JhcHBlcnwiIFwKKyAgICAgICAgICAgLWUgInN8Z19pcl9jb21waWxlcj0uKnxnX2lyX2NvbXBpbGVyPSR7YmluZGlyfS9nLWlyLWNvbXBpbGVyLXdyYXBwZXJ8IiBcCisgICAgICAgICAgICR7U1lTUk9PVF9ERVNURElSfSR7bGliZGlyfS9wa2djb25maWcvZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMC5wYworfQorCisjIE5lZWQgdG8gZW5zdXJlIGxkLnNvLmNvbmYgZXhpc3RzIHNvIHByZWxpbmstbmF0aXZlIHdvcmtzCisjIGJvdGggYmVmb3JlIHdlIGJ1aWxkIGFuZCBpZiB3ZSBpbnN0YWxsIGZyb20gc3N0YXRlCitkb19jb25maWd1cmVbcHJlZnVuY3NdICs9ICJnb2JqZWN0X2ludHJvc3BlY3Rpb25fcHJlY29uZmlndXJlIgorcHl0aG9uIGdvYmplY3RfaW50cm9zcGVjdGlvbl9wcmVjb25maWd1cmUgKCkgeworICAgIG9lLnV0aWxzLndyaXRlX2xkX3NvX2NvbmYoZCkKK30KKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTX2FwcGVuZCA9ICIgZ2lfbGRzb2NvbmZfc3lzcm9vdF9wcmVwcm9jZXNzIgorZ2lfbGRzb2NvbmZfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKwlta2RpciAtcCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcn0KKwlkZXN0PSR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyfS9wb3N0aW5zdC1sZHNvY29uZi0ke1BOfQorCWVjaG8gIiMhL2Jpbi9zaCIgPiAkZGVzdAorCWVjaG8gIm1rZGlyIC1wICR7U1RBR0lOR19ESVJfVEFSR0VUfSR7c3lzY29uZmRpcn0iID4+ICRkZXN0CisJZWNobyAiZWNobyAke2Jhc2VfbGliZGlyfSA+PiAke1NUQUdJTkdfRElSX1RBUkdFVH0ke3N5c2NvbmZkaXJ9L2xkLnNvLmNvbmYiID4+ICRkZXN0CisJZWNobyAiZWNobyAke2xpYmRpcn0gPj4gJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtzeXNjb25mZGlyfS9sZC5zby5jb25mIiA+PiAkZGVzdAorCWNobW9kIDc1NSAkZGVzdAorfQorCisjIFJlbW92ZSB3cmFwcGVyIGZpbGVzIGZyb20gdGhlIHBhY2thZ2UsIG9ubHkgdXNlZCBmb3IgY3Jvc3MtY29tcGlsaW5nCitQQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1MgKz0gImdpX3BhY2thZ2VfcHJlcHJvY2VzcyIKK2dpX3BhY2thZ2VfcHJlcHJvY2VzcygpIHsKKwlybSAtZiAke1BLR0R9JHtiaW5kaXJ9L2ctaXItc2Nhbm5lci1xZW11d3JhcHBlcgorCXJtIC1mICR7UEtHRH0ke2JpbmRpcn0vZy1pci1zY2FubmVyLXdyYXBwZXIKKwlybSAtZiAke1BLR0R9JHtiaW5kaXJ9L2ctaXItY29tcGlsZXItd3JhcHBlcgorCXJtIC1mICR7UEtHRH0ke2JpbmRpcn0vZy1pci1zY2FubmVyLWxkZHdyYXBwZXIKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMuaW5jCmluZGV4IDI3ZGE4NDQuLjBhMzU3ZGIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszLmluYwpAQCAtMTAsNyArMTAsMTEgQEAKIAogTElDRU5TRSA9ICJMR1BMdjIgJiBMR1BMdjIrICYgTEdQTHYyLjErIgogCi1pbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZyBndGstZG9jIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgZ3RrLWltbW9kdWxlcy1jYWNoZSBnc2V0dGluZ3MgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnb2JqZWN0LWludHJvc3BlY3Rpb24KK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnIGd0ay1kb2MgdXBkYXRlLWFsdGVybmF0aXZlcyBndGstaW1tb2R1bGVzLWNhY2hlIGdzZXR0aW5ncyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgZ29iamVjdC1pbnRyb3NwZWN0aW9uCisKKyMgdmVyc2lvbnMgPj0gMy45MCBhcmUgZGV2ZWxvcG1lbnQgdmVyc2lvbnMsIG90aGVyd2lzZSBsaWtlIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgorVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiW15cZFwuXSg/UDxwdmVyPjNcLihbMS04XT9bMDI0NjhdKSsoXC5cZCspKylcLnRhciIKKwogQU5ZX09GX0RJU1RST19GRUFUVVJFUyA9ICIke0dUSzNESVNUUk9GRUFUVVJFU30iCiAKICMgVGhpcyBzaG91bGQgYmUgaW4gYXV0b3Rvb2xzLmJiY2xhc3MsIGJ1dCB1bnRpbCBzb21ldGhpbmcgZWxzZXMgdXNlcyBpdCBwdXR0aW5nCkBAIC0zNCw3ICszOCw2IEBACiAgICAgICAgICAgICAgICAgIFdBWUxBTkRfUFJPVE9DT0xTX1NZU1JPT1RfRElSPSR7UkVDSVBFX1NZU1JPT1R9IFwKICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJ4MTEiLCAiIiwgIi0tZGlzYWJsZS1ndGstZG9jIiwgZCl9IFwKICAgICAgICAgICAgICAgICAgIgotRVhUUkFfT0VDT05GW3ZhcmRlcHNleGNsdWRlXSA9ICJNQUNISU5FIgogCiBkb19jb21waWxlX3ByZXBlbmQoKSB7CiAgICAgICAgIGV4cG9ydCBHSVJfRVhUUkFfTElCU19QQVRIPSIke0J9L2dkay8ubGlicyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy8wMDAzLUFkZC1kaXNhYmxlLW9wZW5nbC1jb25maWd1cmUtb3B0aW9uLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszLzAwMDMtQWRkLWRpc2FibGUtb3BlbmdsLWNvbmZpZ3VyZS1vcHRpb24ucGF0Y2gKaW5kZXggZWFmNmFlYy4uOWNkZWUwZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszLzAwMDMtQWRkLWRpc2FibGUtb3BlbmdsLWNvbmZpZ3VyZS1vcHRpb24ucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszLzAwMDMtQWRkLWRpc2FibGUtb3BlbmdsLWNvbmZpZ3VyZS1vcHRpb24ucGF0Y2gKQEAgLTk0Miw4ICs5NDIsOCBAQAogKwlnZGtnZWFycwogK2VuZGlmCiArCi0gaWYgVVNFX1gxMQotIG5vaW5zdF9QUk9HUkFNUyArPSB0ZXN0ZXJyb3JzCisgaWYgVVNFX1dBWUxBTkQKKyBub2luc3RfUFJPR1JBTVMgKz0gdGVzdGZvcmVpZ24KICBlbmRpZgogZGlmZiAtLWdpdCBhL3Rlc3RzdWl0ZS9ndGsvb2JqZWN0cy1maW5hbGl6ZS5jIGIvdGVzdHN1aXRlL2d0ay9vYmplY3RzLWZpbmFsaXplLmMKIGluZGV4IDBiM2E1MTkuLjA3YjA5NmYgMTAwNjQ0CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzNfMy4yMi4xNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrM18zLjIyLjE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YTU0NjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzNfMy4yMi4xNy5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIGd0ayszLmluYworCitNQUpfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCisKK1NSQ19VUkkgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL2dub21lL3NvdXJjZXMvZ3RrKy8ke01BSl9WRVJ9L2d0aystJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtSGFyZGNvZGVkLWxpYnRvb2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1Eby1ub3QtdHJ5LXRvLWluaXRpYWxpemUtR0wtd2l0aG91dC1saWJHTC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLUFkZC1kaXNhYmxlLW9wZW5nbC1jb25maWd1cmUtb3B0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtY29uZmlndXJlLmFjLUZpeC13YXlsYW5kLXByb3RvY29scy1wYXRoLnBhdGNoIFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiMjlmODU0MzBjZjdjZmE4Y2E4ZDA3MDNiYTY1ZGJlMTEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTZjMWZiOGYyMjljNjI2YTNkOWMwZTFjZTZlYTEzOGRlN2Y2NGE1YTZiYzc5OWQ0NWZhMjg2ZmU0NjFjMzQzNyIKKworUyA9ICIke1dPUktESVJ9L2d0aystJHtQVn0iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2d0ay9ndGsuaDtlbmRsaW5lPTI1O21kNT0xZDhkYzBmY2NkYmZhMjYyODdhMjcxZGNlODhhZjczNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nZGsvZ2RrLmg7ZW5kbGluZT0yNTttZDU9YzkyMGNlMzlkYzg4YzZmMDZkM2U3YzUwZTA4MDg2ZjIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvdGVzdGd0ay5jO2VuZGxpbmU9MjU7bWQ1PWNiNzMyZGFlZTFkODJhZjdhMmJmOTUzY2YzY2YyNmYxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszXzMuMjIuOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrM18zLjIyLjguYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjYzU3ZjkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszXzMuMjIuOC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLXJlcXVpcmUgZ3RrKzMuaW5jCi0KLU1BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKLQotU1JDX1VSSSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvZ25vbWUvc291cmNlcy9ndGsrLyR7TUFKX1ZFUn0vZ3RrKy0ke1BWfS50YXIueHogXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1IYXJkY29kZWQtbGlidG9vbC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAyLURvLW5vdC10cnktdG8taW5pdGlhbGl6ZS1HTC13aXRob3V0LWxpYkdMLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDMtQWRkLWRpc2FibGUtb3BlbmdsLWNvbmZpZ3VyZS1vcHRpb24ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwNC1jb25maWd1cmUuYWMtRml4LXdheWxhbmQtcHJvdG9jb2xzLXBhdGgucGF0Y2ggXAotICAgICAgICAgICIKLVNSQ19VUklbbWQ1c3VtXSA9ICJiNGZiMzlhODI5ZTQ0MjViM2ZhMDVhZGJlN2Y1MmZlZiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJjNzI1NGE4OGRmNWMxN2U5NjA5Y2VlOWU4NDhjM2QwMTA0NTEyNzA3ZWRhZDRjM2I0ZjI1NmIxMzFmOGQzYWYxIgotCi1TID0gIiR7V09SS0RJUn0vZ3RrKy0ke1BWfSIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzIgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3RrL2d0ay5oO2VuZGxpbmU9MjU7bWQ1PTFkOGRjMGZjY2RiZmEyNjI4N2EyNzFkY2U4OGFmNzM3IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dkay9nZGsuaDtlbmRsaW5lPTI1O21kNT1jOTIwY2UzOWRjODhjNmYwNmQzZTdjNTBlMDgwODZmMiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy90ZXN0Z3RrLmM7ZW5kbGluZT0yNTttZDU9Y2I3MzJkYWVlMWQ4MmFmN2EyYmY5NTNjZjNjZjI2ZjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrLWljb24tdXRpbHMtbmF0aXZlXzMuMjIuMTcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrLWljb24tdXRpbHMtbmF0aXZlXzMuMjIuMTcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMyZDgyZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGstaWNvbi11dGlscy1uYXRpdmVfMy4yMi4xNy5iYgpAQCAtMCwwICsxLDYzIEBACitTVU1NQVJZID0gIk5hdGl2ZSBpY29uIHV0aWxzIGZvciBHVEsrIgorREVTQ1JJUFRJT04gPSAiZ3RrLXVwZGF0ZS1pY29uLWNhY2hlIGFuZCBndGstZW5jb2RlLXN5bWJvbGljLXN2ZyBidWlsdCBmcm9tIEdUSysgbmF0aXZlbHksIGZvciBidWlsZCB0aW1lIGFuZCBvbi1ob3N0IHBvc3RpbnN0IHNjcmlwdCBleGVjdXRpb24uIgorU0VDVElPTiA9ICJsaWJzIgorCitERVBFTkRTID0gImdsaWItMi4wLW5hdGl2ZSBnZGstcGl4YnVmLW5hdGl2ZSBsaWJyc3ZnLW5hdGl2ZSIKKworTElDRU5TRSA9ICJMR1BMdjIgJiBMR1BMdjIrICYgTEdQTHYyLjErIgorCitNQUpfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCisKK1NSQ19VUkkgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL2dub21lL3NvdXJjZXMvZ3RrKy8ke01BSl9WRVJ9L2d0aystJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICBmaWxlOi8vUmVtb3ZlLUdkay1kZXBlbmRlbmN5LWZyb20tZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcucGF0Y2giCitTUkNfVVJJW21kNXN1bV0gPSAiMjlmODU0MzBjZjdjZmE4Y2E4ZDA3MDNiYTY1ZGJlMTEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTZjMWZiOGYyMjljNjI2YTNkOWMwZTFjZTZlYTEzOGRlN2Y2NGE1YTZiYzc5OWQ0NWZhMjg2ZmU0NjFjMzQzNyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3RrL2d0ay5oO2VuZGxpbmU9MjU7bWQ1PTFkOGRjMGZjY2RiZmEyNjI4N2EyNzFkY2U4OGFmNzM3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dkay9nZGsuaDtlbmRsaW5lPTI1O21kNT1jOTIwY2UzOWRjODhjNmYwNmQzZTdjNTBlMDgwODZmMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy90ZXN0Z3RrLmM7ZW5kbGluZT0yNTttZDU9Y2I3MzJkYWVlMWQ4MmFmN2EyYmY5NTNjZjNjZjI2ZjEiCisKK1MgPSAiJHtXT1JLRElSfS9ndGsrLSR7UFZ9IgorCitpbmhlcml0IHBrZ2NvbmZpZyBuYXRpdmUKKworIyB2ZXJzaW9ucyA+PSAzLjkwIGFyZSBkZXZlbG9wbWVudCB2ZXJzaW9ucywgb3RoZXJ3aXNlIGxpa2UgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuCitVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJbXlxkXC5dKD9QPHB2ZXI+M1wuKFsxLThdP1swMjQ2OF0pKyhcLlxkKykrKVwudGFyIgorCitQS0dfQ09ORklHX0ZPUl9CVUlMRCA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vcGtnLWNvbmZpZy1uYXRpdmUiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwkjIFF1aXRlIHVnbHkgYnV0IGRlZmluZXMgZW5vdWdoIHRvIGNvbXBpbGUgdGhlIHRvb2xzLgorCWlmICEgdGVzdCAtZiBndGsvY29uZmlnLmg7IHRoZW4KKwkJZWNobyAiI2RlZmluZSBHRVRURVhUX1BBQ0tBR0UgXCJndGszMFwiIiA+PiBndGsvY29uZmlnLmgKKwkJZWNobyAiI2RlZmluZSBIQVZFX1VOSVNURF9IIDEiID4+IGd0ay9jb25maWcuaAorCQllY2hvICIjZGVmaW5lIEhBVkVfRlRXX0ggMSIgPj4gZ3RrL2NvbmZpZy5oCisJZmkKKwlpZiAhIHRlc3QgLWYgZ2RrL2NvbmZpZy5oOyB0aGVuCisJCXRvdWNoIGdkay9jb25maWcuaAorCWZpCit9CisKK2RvX2NvbXBpbGUoKSB7CisJJHtCVUlMRF9DQ30gJHtCVUlMRF9DRkxBR1N9ICR7QlVJTERfTERGTEFHU30gXAorCQkke1N9L2d0ay91cGRhdGVpY29uY2FjaGUuYyBcCisJCSQoJHtQS0dfQ09ORklHX0ZPUl9CVUlMRH0gLS1jZmxhZ3MgLS1saWJzIGdkay1waXhidWYtMi4wKSBcCisJCS1vIGd0ay11cGRhdGUtaWNvbi1jYWNoZQorCisJJHtCVUlMRF9DQ30gJHtCVUlMRF9DRkxBR1N9ICR7QlVJTERfTERGTEFHU30gXAorCQkke1N9L2d0ay9lbmNvZGVzeW1ib2xpYy5jIFwKKwkJJCgke1BLR19DT05GSUdfRk9SX0JVSUxEfSAtLWNmbGFncyAtLWxpYnMgZ2lvLTIuMCBnZGstcGl4YnVmLTIuMCkgXAorCQktbyBndGstZW5jb2RlLXN5bWJvbGljLXN2ZworfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke0J9L2d0ay11cGRhdGUtaWNvbi1jYWNoZSAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcgJHtEfSR7YmluZGlyfQorCisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlIFwKKwkJR0RLX1BJWEJVRl9NT0RVTEVfRklMRT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvMi4xMC4wL2xvYWRlcnMuY2FjaGUKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ndGstZW5jb2RlLXN5bWJvbGljLXN2ZyBcCisJCUdES19QSVhCVUZfTU9EVUxFX0ZJTEU9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLzIuMTAuMC9sb2FkZXJzLmNhY2hlCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrLWljb24tdXRpbHMtbmF0aXZlXzMuMjIuOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGstaWNvbi11dGlscy1uYXRpdmVfMy4yMi44LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjgzNDE4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGstaWNvbi11dGlscy1uYXRpdmVfMy4yMi44LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotU1VNTUFSWSA9ICJOYXRpdmUgaWNvbiB1dGlscyBmb3IgR1RLKyIKLURFU0NSSVBUSU9OID0gImd0ay11cGRhdGUtaWNvbi1jYWNoZSBhbmQgZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcgYnVpbHQgZnJvbSBHVEsrIG5hdGl2ZWx5LCBmb3IgYnVpbGQgdGltZSBhbmQgb24taG9zdCBwb3N0aW5zdCBzY3JpcHQgZXhlY3V0aW9uLiIKLVNFQ1RJT04gPSAibGlicyIKLQotREVQRU5EUyA9ICJnbGliLTIuMC1uYXRpdmUgZ2RrLXBpeGJ1Zi1uYXRpdmUgbGlicnN2Zy1uYXRpdmUiCi0KLUxJQ0VOU0UgPSAiTEdQTHYyICYgTEdQTHYyKyAmIExHUEx2Mi4xKyIKLQotTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgotCi1TUkNfVVJJID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9nbm9tZS9zb3VyY2VzL2d0aysvJHtNQUpfVkVSfS9ndGsrLSR7UFZ9LnRhci54eiBcCi0gICAgICAgICAgZmlsZTovL1JlbW92ZS1HZGstZGVwZW5kZW5jeS1mcm9tLWd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnLnBhdGNoIgotU1JDX1VSSVttZDVzdW1dID0gImI0ZmIzOWE4MjllNDQyNWIzZmEwNWFkYmU3ZjUyZmVmIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImM3MjU0YTg4ZGY1YzE3ZTk2MDljZWU5ZTg0OGMzZDAxMDQ1MTI3MDdlZGFkNGMzYjRmMjU2YjEzMWY4ZDNhZjEiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2d0ay9ndGsuaDtlbmRsaW5lPTI1O21kNT0xZDhkYzBmY2NkYmZhMjYyODdhMjcxZGNlODhhZjczNyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nZGsvZ2RrLmg7ZW5kbGluZT0yNTttZDU9YzkyMGNlMzlkYzg4YzZmMDZkM2U3YzUwZTA4MDg2ZjIgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvdGVzdGd0ay5jO2VuZGxpbmU9MjU7bWQ1PWNiNzMyZGFlZTFkODJhZjdhMmJmOTUzY2YzY2YyNmYxIgotCi1TID0gIiR7V09SS0RJUn0vZ3RrKy0ke1BWfSIKLQotaW5oZXJpdCBwa2djb25maWcgbmF0aXZlIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgotCi1QS0dfQ09ORklHX0ZPUl9CVUlMRCA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vcGtnLWNvbmZpZy1uYXRpdmUiCi0KLWRvX2NvbmZpZ3VyZSgpIHsKLQkjIFF1aXRlIHVnbHkgYnV0IGRlZmluZXMgZW5vdWdoIHRvIGNvbXBpbGUgdGhlIHRvb2xzLgotCWlmICEgdGVzdCAtZiBndGsvY29uZmlnLmg7IHRoZW4KLQkJZWNobyAiI2RlZmluZSBHRVRURVhUX1BBQ0tBR0UgXCJndGszMFwiIiA+PiBndGsvY29uZmlnLmgKLQkJZWNobyAiI2RlZmluZSBIQVZFX1VOSVNURF9IIDEiID4+IGd0ay9jb25maWcuaAotCQllY2hvICIjZGVmaW5lIEhBVkVfRlRXX0ggMSIgPj4gZ3RrL2NvbmZpZy5oCi0JZmkKLQlpZiAhIHRlc3QgLWYgZ2RrL2NvbmZpZy5oOyB0aGVuCi0JCXRvdWNoIGdkay9jb25maWcuaAotCWZpCi19Ci0KLWRvX2NvbXBpbGUoKSB7Ci0JJHtCVUlMRF9DQ30gJHtCVUlMRF9DRkxBR1N9ICR7QlVJTERfTERGTEFHU30gXAotCQkke1N9L2d0ay91cGRhdGVpY29uY2FjaGUuYyBcCi0JCSQoJHtQS0dfQ09ORklHX0ZPUl9CVUlMRH0gLS1jZmxhZ3MgLS1saWJzIGdkay1waXhidWYtMi4wKSBcCi0JCS1vIGd0ay11cGRhdGUtaWNvbi1jYWNoZQotCi0JJHtCVUlMRF9DQ30gJHtCVUlMRF9DRkxBR1N9ICR7QlVJTERfTERGTEFHU30gXAotCQkke1N9L2d0ay9lbmNvZGVzeW1ib2xpYy5jIFwKLQkJJCgke1BLR19DT05GSUdfRk9SX0JVSUxEfSAtLWNmbGFncyAtLWxpYnMgZ2lvLTIuMCBnZGstcGl4YnVmLTIuMCkgXAotCQktbyBndGstZW5jb2RlLXN5bWJvbGljLXN2ZwotfQotCi1kb19pbnN0YWxsKCkgewotCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQotCWluc3RhbGwgLW0gMDc1NSAke0J9L2d0ay11cGRhdGUtaWNvbi1jYWNoZSAke0R9JHtiaW5kaXJ9Ci0JaW5zdGFsbCAtbSAwNzU1ICR7Qn0vZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcgJHtEfSR7YmluZGlyfQotCi0JY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlIFwKLQkJR0RLX1BJWEJVRl9NT0RVTEVfRklMRT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvMi4xMC4wL2xvYWRlcnMuY2FjaGUKLQljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ndGstZW5jb2RlLXN5bWJvbGljLXN2ZyBcCi0JCUdES19QSVhCVUZfTU9EVUxFX0ZJTEU9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLzIuMTAuMC9sb2FkZXJzLmNhY2hlCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1kb2MvZmlsZXMvY29uZGl0aW9uYWx0ZXN0cy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy9maWxlcy9jb25kaXRpb25hbHRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMTgwZjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1kb2MvZmlsZXMvY29uZGl0aW9uYWx0ZXN0cy5wYXRjaApAQCAtMCwwICsxLDM0IEBACitBbGxvdyB0aGUgdGVzdHMgdG8gYmUgZXhwbGljaXRseSBkaXNhYmxlZCB0byBhdm9pZCBmbG9hdGluZyBkZXBlbmRuZWN5Citpc3N1ZXMuIFRoaXMgaXMgbm90IHJlYWxseSBhbiBpc3N1ZSB3aXRoIFJTUyBidXQgaXMgb24gcHJldmlvdXMgcmVsZWFzZXMuCisKK1JQIDIwMTcvNi8yNworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBndGstZG9jLTEuMjUvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3RrLWRvYy0xLjI1Lm9yaWcvY29uZmlndXJlLmFjCisrKysgZ3RrLWRvYy0xLjI1L2NvbmZpZ3VyZS5hYworQEAgLTE2MSw2ICsxNjEsMTEgQEAgaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiOyB0aGVuCisgCWZpCisgZmkKKyAKKytBQ19BUkdfRU5BQkxFKFt0ZXN0c10sCisrCUFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS10ZXN0c10sCisrCVtlbmFibGUgdGVzdHMgKGRlZmF1bHQ9eWVzKV0pLCwKKysJW2VuYWJsZV90ZXN0cz0ieWVzIl0pCisrCisgZG5sIGlmIGdsaWIgaXMgYXZhaWxhYmxlIHdlIGNhbiBlbmFibGUgdGhlIHRlc3RzCisgUEtHX0NIRUNLX01PRFVMRVMoVEVTVF9ERVBTLCBbZ2xpYi0yLjAgPj0gMi42LjAgZ29iamVjdC0yLjAgPj0gMi42LjBdLAorIAlbCWdsaWJfcHJlZml4PSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1wcmVmaXggZ2xpYi0yLjBgIgorQEAgLTE3MSw2ICsxNzYsMTEgQEAgUEtHX0NIRUNLX01PRFVMRVMoVEVTVF9ERVBTLCBbZ2xpYi0yLjAgPgorIAkJYnVpbGRfdGVzdHM9Im5vIgorIAldCisgKQorK2lmIHRlc3QgIngkZW5hYmxlX3Rlc3RzIiAhPSAieHllcyI7IHRoZW4KKysJZ3RrX2RvY191c2VfbGlidG9vbD0ibm8iCisrCWJ1aWxkX3Rlc3RzPSJubyIKKytmaQorKworIEFNX0NPTkRJVElPTkFMKEdUS19ET0NfVVNFX0xJQlRPT0wsIHRlc3QgLW4gIiRMSUJUT09MIiAtYSB4JGd0a19kb2NfdXNlX2xpYnRvb2wgPSB4eWVzICkKKyBkbmwgdGhpcyBlbmFibGUgdGhlIHJ1bGUgaW4gdGVzdC9NYWtlZmlsZS5hbQorIEFNX0NPTkRJVElPTkFMKEJVSUxEX1RFU1RTLCB0ZXN0IHgkYnVpbGRfdGVzdHMgPSB4eWVzKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZG9jL2d0ay1kb2NfMS4yNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy9ndGstZG9jXzEuMjUuYmIKaW5kZXggN2RlMzZhZTkuLmUwZWI5OTQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy9ndGstZG9jXzEuMjUuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZG9jL2d0ay1kb2NfMS4yNS5iYgpAQCAtMTYsNiArMTYsNyBAQAogIyBob3BlZnVsbHkgbm8gb25lIG1pbmRzIGJlY2F1c2UgaXRzIHNjcmlwdHMgYXJlIG5vdCB1c2VkIGZvciBhbnl0aGluZyBkdXJpbmcgYnVpbGQKICMgYW5kIHNob3VsZG4ndCBiZSB1c2VkIG9uIHRhcmdldHMuCiBQQUNLQUdFQ09ORklHW3dvcmtpbmctc2NyaXB0c10gPSAiLS13aXRoLWhpZ2hsaWdodD1zb3VyY2UtaGlnaGxpZ2h0LC0td2l0aC1oaWdobGlnaHQ9bm8sbGlieHNsdC1uYXRpdmUgeG1sdG8tbmF0aXZlIHNvdXJjZS1oaWdobGlnaHQtbmF0aXZlIHBlcmwtbmF0aXZlIgorUEFDS0FHRUNPTkZJR1t0ZXN0c10gPSAiLS1lbmFibGUtdGVzdHMsLS1kaXNhYmxlLXRlc3RzLGdsaWItMi4wIgogCiAjIFdlIGNhbm5vdCB1c2UgaG9zdCBwZXJsLCBiZWNhdXNlIGl0IG1heSBiZSB0b28gb2xkIGZvciBndGstZG9jCiBFWFRSQU5BVElWRVBBVEggKz0gInBlcmwtbmF0aXZlIgpAQCAtMjMsNiArMjQsNyBAQAogU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtRG8tbm90LWhhcmRvY29kZS1wYXRocy10by1wZXJsLXB5dGhvbi1pbi1zY3JpcHRzLnBhdGNoIFwKICAgICAgICAgICAgIGZpbGU6Ly8wMDAxLURvLW5vdC1lcnJvci1vdXQtaWYteHNsdHByb2MtaXMtbm90LWZvdW5kLnBhdGNoIFwKICAgICAgICAgICAgIGZpbGU6Ly8wMDAxLURvLW5vdC1lcnJvci1vdXQtaWYtcGVybC1pcy1ub3QtZm91bmQtb3ItaXRzLXZlcnNpb24ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2NvbmRpdGlvbmFsdGVzdHMucGF0Y2ggXAogICAgICAgICAgICAiCiBTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGZpbGU6Ly9wa2ctY29uZmlnLW5hdGl2ZS5wYXRjaCIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9qc29uLWdsaWIvanNvbi1nbGliXzEuMi4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9qc29uLWdsaWIvanNvbi1nbGliXzEuMi4yLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODY5YmE5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvanNvbi1nbGliL2pzb24tZ2xpYl8xLjIuMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLVNVTU1BUlkgPSAiSlNPTi1HTGliIGltcGxlbWVudHMgYSBmdWxsIEpTT04gcGFyc2VyIHVzaW5nIEdMaWIgYW5kIEdPYmplY3QiCi1ERVNDUklQVElPTiA9ICJVc2UgSlNPTi1HTGliIGl0IGlzIHBvc3NpYmxlIHRvIHBhcnNlIGFuZCBnZW5lcmF0ZSB2YWxpZCBKU09OXAotIGRhdGEgc3RydWN0dXJlcywgdXNpbmcgYSBET00tbGlrZSBBUEkuIEpTT04tR0xpYiBhbHNvIG9mZmVycyBHT2JqZWN0IFwKLWludGVncmF0aW9uLCBwcm92aWRpbmcgdGhlIGFiaWxpdHkgdG8gc2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZSBHT2JqZWN0IFwKLWluc3RhbmNlcyB0byBhbmQgZnJvbSBKU09OIGRhdGEgdHlwZXMuIgotSE9NRVBBR0UgPSAiaHR0cDovL2xpdmUuZ25vbWUub3JnL0pzb25HbGliIgotCi1MSUNFTlNFID0gIkxHUEx2Mi4xIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQiCi0KLURFUEVORFMgPSAiZ2xpYi0yLjAiCi0KLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImMxZGFlZmI4ZDBmYjU5NjEyYWYwYzA3MmM4YWFiYjU4IgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiZWExMjhhYjUyYTgyNGZjZDA2ZTU0NDhmYmIyYmQ4ZDlhMTM3NDBkNTFjNjZkNDQ1ODI4ZWRiYTcxMzIxYTYyMSIKLQotaW5oZXJpdCBnbm9tZWJhc2UgZ2V0dGV4dCBsaWJfcGFja2FnZSBnb2JqZWN0LWludHJvc3BlY3Rpb24gZ3RrLWRvYyBtYW5wYWdlcwotCi1QQUNLQUdFQ09ORklHW21hbnBhZ2VzXSA9ICItLWVuYWJsZS1tYW4gLS13aXRoLXhtbC1jYXRhbG9nPSR7U1RBR0lOR19FVENESVJfTkFUSVZFfS94bWwvY2F0YWxvZy54bWwsIC0tZGlzYWJsZS1tYW4sIGxpYnhzbHQtbmF0aXZlIHhtbHRvLW5hdGl2ZSIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9qc29uLWdsaWIvanNvbi1nbGliXzEuMi44LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9qc29uLWdsaWIvanNvbi1nbGliXzEuMi44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNWQzODEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2pzb24tZ2xpYi9qc29uLWdsaWJfMS4yLjguYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJKU09OLUdMaWIgaW1wbGVtZW50cyBhIGZ1bGwgSlNPTiBwYXJzZXIgdXNpbmcgR0xpYiBhbmQgR09iamVjdCIKK0RFU0NSSVBUSU9OID0gIlVzZSBKU09OLUdMaWIgaXQgaXMgcG9zc2libGUgdG8gcGFyc2UgYW5kIGdlbmVyYXRlIHZhbGlkIEpTT05cCisgZGF0YSBzdHJ1Y3R1cmVzLCB1c2luZyBhIERPTS1saWtlIEFQSS4gSlNPTi1HTGliIGFsc28gb2ZmZXJzIEdPYmplY3QgXAoraW50ZWdyYXRpb24sIHByb3ZpZGluZyB0aGUgYWJpbGl0eSB0byBzZXJpYWxpemUgYW5kIGRlc2VyaWFsaXplIEdPYmplY3QgXAoraW5zdGFuY2VzIHRvIGFuZCBmcm9tIEpTT04gZGF0YSB0eXBlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vbGl2ZS5nbm9tZS5vcmcvSnNvbkdsaWIiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCIKKworREVQRU5EUyA9ICJnbGliLTIuMCIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZmYzMWU3ZDA1OTRkZjQ0MzE4ZTEyZmFjZGEzZDA4NmUiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJmZDU1YTkwMzdkMzllN2ExMGYwZGI2NDMwOWY1ZjAyNjVmYTMyZWM5NjJiZjg1MDY2MDg3YjgzYTI4MDdmNDBhIgorCitpbmhlcml0IGdub21lYmFzZSBnZXR0ZXh0IGxpYl9wYWNrYWdlIGdvYmplY3QtaW50cm9zcGVjdGlvbiBndGstZG9jIG1hbnBhZ2VzCisKK1BBQ0tBR0VDT05GSUdbbWFucGFnZXNdID0gIi0tZW5hYmxlLW1hbiAtLXdpdGgteG1sLWNhdGFsb2c9JHtTVEFHSU5HX0VUQ0RJUl9OQVRJVkV9L3htbC9jYXRhbG9nLnhtbCwgLS1kaXNhYmxlLW1hbiwgbGlieHNsdC1uYXRpdmUgeG1sdG8tbmF0aXZlIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmd1ZGV2L2xpYmd1ZGV2XzIzMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ3VkZXYvbGliZ3VkZXZfMjMxLmJiCmluZGV4IGFlMGYxYzcuLmFkNjc5MjYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ3VkZXYvbGliZ3VkZXZfMjMxLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ3VkZXYvbGliZ3VkZXZfMjMxLmJiCkBAIC0xLDUgKzEsNSBAQAogU1VNTUFSWSA9ICJHT2JqZWN0IHdyYXBwZXIgZm9yIGxpYnVkZXYiCi0KK0hPTUVQQUdFID0gImh0dHBzOi8vd2lraS5nbm9tZS5vcmcvUHJvamVjdHMvbGliZ3VkZXYiCiBTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI5MTZjMTBjNTFlYzYxMTMxZTI0NGMzOTM2YmJiMmUwYyIKIFNSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjNiMWVmOTlkNGE4OTg0YzM1MDQ0MTAzZDhkZGZjM2NjNTJjODAwMzVjMzZhYmFiMmJjYzVlMzUzMmUwNjNmOTYiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlibm90aWZ5L2xpYm5vdGlmeV8wLjcuNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlibm90aWZ5L2xpYm5vdGlmeV8wLjcuNy5iYgppbmRleCAyYWIyZjFmLi42YzI5OWJjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYm5vdGlmeS9saWJub3RpZnlfMC43LjcuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJub3RpZnkvbGlibm90aWZ5XzAuNy43LmJiCkBAIC0xLDQgKzEsNSBAQAogU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBzZW5kaW5nIGRlc2t0b3Agbm90aWZpY2F0aW9ucyB0byBhIG5vdGlmaWNhdGlvbiBkYWVtb24iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmdub21lLm9yZyIKIFNFQ1RJT04gPSAibGlicyIKIExJQ0VOU0UgPSAiTEdQTHYyLjEiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnXzIuNDAuMTYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYnJzdmcvbGlicnN2Z18yLjQwLjE2LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTI0M2M4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnXzIuNDAuMTYuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi1TVU1NQVJZID0gIkxpYnJhcnkgZm9yIHJlbmRlcmluZyBTVkcgZmlsZXMiCi1IT01FUEFHRSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvR05PTUUvc291cmNlcy9saWJyc3ZnLyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgotCi1MSUNFTlNFID0gIkxHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9yc3ZnLmg7YmVnaW5saW5lPTM7ZW5kbGluZT0yNDttZDU9MjBiNDExM2M0OTA5YmJmMGQ2N2UwMDY3NzgzMDJiYzYiCi0KLVNFQ1RJT04gPSAieDExL3V0aWxzIgotREVQRU5EUyA9ICJjYWlybyBnZGstcGl4YnVmIGdsaWItMi4wIGxpYmNyb2NvIGxpYnhtbDIgcGFuZ28iCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdub21lYmFzZSBndGstZG9jIHBpeGJ1ZmNhY2hlIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnb2JqZWN0LWludHJvc3BlY3Rpb24KLQotU1JDX1VSSSArPSAiZmlsZTovL2d0ay1vcHRpb24ucGF0Y2giCi0KLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImY0NzRmZTM3MTc3YTJiZjgwNTA3ODdkZjIwNDYwOTVjIgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiZDQ4YmNmNmIwM2ZhOThmMDdkZjEwMzMyZmI0OWQ4YzAxMDc4NmRkY2E2YWIzNGNiYmEyMTc2ODRmNTMzZmYyZSIKLQotQ0FDSEVEX0NPTkZJR1VSRVZBUlMgPSAiYWNfY3ZfcGF0aF9HREtfUElYQlVGX1FVRVJZTE9BREVSUz0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzIgotCi0jIFRoZSBvbGRlciBsZCAoMi4yMikgb24gdGhlIGhvc3QgKENlbnRvcyA2LjUpIGRvZXNuJ3QgaGF2ZSB0aGUKLSMgLUJzeW1ib2xpYy1mdW5jdGlvbnMgb3B0aW9uLCB3ZSBjYW4gZGlzYWJsZSBpdCBmb3IgbmF0aXZlLgotRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC0tZW5hYmxlLUJzeW1ib2xpYz1hdXRvIgotCi1QQUNLQUdFQ09ORklHID8/PSAiZ2RrcGl4YnVmIgotIyBUaGUgZ2RrLXBpeGJ1ZiBsb2FkZXIKLVBBQ0tBR0VDT05GSUdbZ2RrcGl4YnVmXSA9ICItLWVuYWJsZS1waXhidWYtbG9hZGVyLC0tZGlzYWJsZS1waXhidWYtbG9hZGVyLGdkay1waXhidWYtbmF0aXZlIgotIyBHVEsrIHRlc3QgYXBwbGljYXRpb24gKHJzdmctdmlldykKLVBBQ0tBR0VDT05GSUdbZ3RrXSA9ICItLXdpdGgtZ3RrMywtLXdpdGhvdXQtZ3RrMyxndGsrMyIKLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0JIyBMb2FkYWJsZSBtb2R1bGVzIGRvbid0IG5lZWQgLmEgb3IgLmxhIG9uIExpbnV4Ci0Jcm0gLWYgJHtEfSR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8qL2xvYWRlcnMvKi5hICR7RH0ke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvKi9sb2FkZXJzLyoubGEKLX0KLQotUEFDS0FHRVMgPSsgImxpYnJzdmctZ3RrIHJzdmciCi1GSUxFU19yc3ZnID0gIiR7YmluZGlyfS9yc3ZnKiBcCi0JICAgICAgJHtkYXRhZGlyfS9waXhtYXBzL3N2Zy12aWV3ZXIuc3ZnIFwKLQkgICAgICAke2RhdGFkaXJ9L3RoZW1lcyIKLUZJTEVTX2xpYnJzdmctZ3RrID0gIiR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8qLyovKi5zbyIKLQotUElYQlVGX1BBQ0tBR0VTID0gImxpYnJzdmctZ3RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJyc3ZnL2xpYnJzdmdfMi40MC4xOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnXzIuNDAuMTguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFhMGRjMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnXzIuNDAuMTguYmIKQEAgLTAsMCArMSw0NCBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciByZW5kZXJpbmcgU1ZHIGZpbGVzIgorSE9NRVBBR0UgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL0dOT01FL3NvdXJjZXMvbGlicnN2Zy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcnN2Zy5oO2JlZ2lubGluZT0zO2VuZGxpbmU9MjQ7bWQ1PTIwYjQxMTNjNDkwOWJiZjBkNjdlMDA2Nzc4MzAyYmM2IgorCitTRUNUSU9OID0gIngxMS91dGlscyIKK0RFUEVORFMgPSAiY2Fpcm8gZ2RrLXBpeGJ1ZiBnbGliLTIuMCBsaWJjcm9jbyBsaWJ4bWwyIHBhbmdvIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnbm9tZWJhc2UgZ3RrLWRvYyBwaXhidWZjYWNoZSB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZ29iamVjdC1pbnRyb3NwZWN0aW9uCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ndGstb3B0aW9uLnBhdGNoIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJlYWE1YzhhOGJiZTI2MDBhYjUxOTRjMGQzYjFiNjIxYiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImJmYzhjNDg4Yzg5YzFlNzIxMmM0NzhiZWI5NWM0MWI0NDcwMTYzNjEyNWEzZTZkYWI0MTE4N2YxNDg1YjU2NGMiCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTID0gImFjX2N2X3BhdGhfR0RLX1BJWEJVRl9RVUVSWUxPQURFUlM9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wL2dkay1waXhidWYtcXVlcnktbG9hZGVycyIKKworIyBUaGUgb2xkZXIgbGQgKDIuMjIpIG9uIHRoZSBob3N0IChDZW50b3MgNi41KSBkb2Vzbid0IGhhdmUgdGhlCisjIC1Cc3ltYm9saWMtZnVuY3Rpb25zIG9wdGlvbiwgd2UgY2FuIGRpc2FibGUgaXQgZm9yIG5hdGl2ZS4KK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLWVuYWJsZS1Cc3ltYm9saWM9YXV0byIKKworUEFDS0FHRUNPTkZJRyA/Pz0gImdka3BpeGJ1ZiIKKyMgVGhlIGdkay1waXhidWYgbG9hZGVyCitQQUNLQUdFQ09ORklHW2dka3BpeGJ1Zl0gPSAiLS1lbmFibGUtcGl4YnVmLWxvYWRlciwtLWRpc2FibGUtcGl4YnVmLWxvYWRlcixnZGstcGl4YnVmLW5hdGl2ZSIKKyMgR1RLKyB0ZXN0IGFwcGxpY2F0aW9uIChyc3ZnLXZpZXcpCitQQUNLQUdFQ09ORklHW2d0a10gPSAiLS13aXRoLWd0azMsLS13aXRob3V0LWd0azMsZ3RrKzMiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgTG9hZGFibGUgbW9kdWxlcyBkb24ndCBuZWVkIC5hIG9yIC5sYSBvbiBMaW51eAorCXJtIC1mICR7RH0ke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvKi9sb2FkZXJzLyouYSAke0R9JHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyovbG9hZGVycy8qLmxhCit9CisKK1BBQ0tBR0VTID0rICJsaWJyc3ZnLWd0ayByc3ZnIgorRklMRVNfcnN2ZyA9ICIke2JpbmRpcn0vcnN2ZyogXAorCSAgICAgICR7ZGF0YWRpcn0vcGl4bWFwcy9zdmctdmlld2VyLnN2ZyBcCisJICAgICAgJHtkYXRhZGlyfS90aGVtZXMiCitGSUxFU19saWJyc3ZnLWd0ayA9ICIke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvKi8qLyouc28gXAorICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS90aHVtYm5haWxlcnMvbGlicnN2Zy50aHVtYm5haWxlciIKKworUElYQlVGX1BBQ0tBR0VTID0gImxpYnJzdmctZ3RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyby5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvLmluYwppbmRleCA4ZTFlMmUxLi4yMGUwZDJjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvLmluYwpAQCAtMzAsNiArMzAsNyBAQAogUEFDS0FHRUNPTkZJR1t2YWxncmluZF0gPSAiLS1lbmFibGUtdmFsZ3JpbmQ9eWVzLC0tZGlzYWJsZS12YWxncmluZCx2YWxncmluZCIKIFBBQ0tBR0VDT05GSUdbZWdsXSA9ICItLWVuYWJsZS1lZ2w9eWVzLC0tZGlzYWJsZS1lZ2wsdmlydHVhbC9lZ2wiCiBQQUNLQUdFQ09ORklHW2dsZXN2Ml0gPSAiLS1lbmFibGUtZ2xlc3YyLC0tZGlzYWJsZS1nbGVzdjIsdmlydHVhbC9saWJnbGVzMiIKK1BBQ0tBR0VDT05GSUdbb3BlbmdsXSA9ICItLWVuYWJsZS1nbCwtLWRpc2FibGUtZ2wsdmlydHVhbC9saWJnbCIKIAogI2NoZWNrIGZvciBUQVJHRVRfRlBVPXNvZnQgYW5kIGluZm9ybSBjb25maWd1cmUgb2YgdGhlIHJlc3VsdCBzbyBpdCBjYW4gZGlzYWJsZSBzb21lIGZsb2F0aW5nIHBvaW50cyAKIHJlcXVpcmUgY2Fpcm8tZnB1LmluYwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyby8wMDAxLWNhaXJvLUZpeC1DVkUtMjAxNy05ODE0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyby8wMDAxLWNhaXJvLUZpeC1DVkUtMjAxNy05ODE0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMDJhYjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvLzAwMDEtY2Fpcm8tRml4LUNWRS0yMDE3LTk4MTQucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorRnJvbSAwNDI0MjFlOWUzZDI2NmFkMGJiNzgwNTEzMjA0MWVmNTFhZDMyMzRkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWRyaWFuIEpvaG5zb24gPGFqb2huc29uQHJlZG5lb24uY29tPgorRGF0ZTogV2VkLCAxNiBBdWcgMjAxNyAyMjo1MjozNSAtMDQwMAorU3ViamVjdDogW1BBVENIXSBjYWlybzogRml4IENWRS0yMDE3LTk4MTQKKworVGhlIGJ1ZyBoYXBwZW5zIGJlY2F1c2UgaW4gc29tZSBzY2VuYXJpb3MgdGhlIHZhcmlhYmxlIHNpemUgY2FuCitoYXZlIGEgdmFsdWUgb2YgMCBhdCBsaW5lIDEyODguIEFuZCBtYWxsb2MoMCkgaXMgbm90IHJldHVybmluZworTlVMTCBhcyBzb21lIHBlb3BsZSBjb3VsZCBleHBlY3Q6CisKKyAgICBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDczMTU3L3plcm8tc2l6ZS1tYWxsb2MKKworbWFsbG9jKDApIHJldHVybnMgdGhlIHNtYWxsZXN0IGNodW5rIHBvc3NpYmxlLiBTbyB0aGUgbGluZSAxMjkwCit3aXRoIHRoZSByZXR1cm4gaXMgbm90IGV4ZWN1dGUuIEFuZCB0aGUgZXhlY3V0aW9uIGNvbnRpbnVlcyB3aXRoCithbiBpbnZhbGlkIG1hcC4KKworU2luY2UgdGhlIHNpemUgaXMgMCB0aGUgdmFyaWFibGUgbWFwIGlzIG5vdCBpbml0aWFsaXplZCBjb3JyZWN0bHkKK2F0IGxvYWRfdHJ1dHlwZV90YWJsZS4gU28sIGxhdGVyIHdoZW4gdGhlIHZhcmlhYmxlIG1hcCBpcyBhY2Nlc3NlZAorcHJldmlvdXMgdmFsdWVzIGZyb20gYSBmcmVlZCBjaHVuayBhcmUgdXNlZC4gVGhpcyBjb3VsZCBhbGxvd3MgYW4KK2F0dGFja2VyIHRvIGNvbnRyb2wgdGhlIHZhcmlhYmxlIG1hcC4KKworVGhpcyBwYXRjaCBoYXZlIG5vdCBtZXJnZSBpbiB1cHN0cmVhbSBub3cuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2h0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTU0N10KK0NWRTogQ1ZFLTIwMTctOTgxNAorU2lnbmVkLW9mZi1ieTogRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9jYWlyby10cnVldHlwZS1zdWJzZXQuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9jYWlyby10cnVldHlwZS1zdWJzZXQuYyBiL3NyYy9jYWlyby10cnVldHlwZS1zdWJzZXQuYworaW5kZXggZTM0NDlhMC4uZjc3ZDExYyAxMDA2NDQKKy0tLSBhL3NyYy9jYWlyby10cnVldHlwZS1zdWJzZXQuYworKysrIGIvc3JjL2NhaXJvLXRydWV0eXBlLXN1YnNldC5jCitAQCAtMTI4NSw3ICsxMjg1LDcgQEAgX2NhaXJvX3RydWV0eXBlX3JldmVyc2VfY21hcCAoY2Fpcm9fc2NhbGVkX2ZvbnRfdCAqc2NhbGVkX2ZvbnQsCisgCXJldHVybiBDQUlST19JTlRfU1RBVFVTX1VOU1VQUE9SVEVEOworIAorICAgICBzaXplID0gYmUxNl90b19jcHUgKG1hcC0+bGVuZ3RoKTsKKy0gICAgbWFwID0gbWFsbG9jIChzaXplKTsKKysgICAgbWFwID0gX2NhaXJvX21hbGxvYyAoc2l6ZSk7CisgICAgIGlmICh1bmxpa2VseSAobWFwID09IE5VTEwpKQorIAlyZXR1cm4gX2NhaXJvX2Vycm9yIChDQUlST19TVEFUVVNfTk9fTUVNT1JZKTsKKyAKKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyby9jYWlyby1nZXRfYml0bWFwX3N1cmZhY2UtYnNjMTAzNjc4OS1DVkUtMjAxNy03NDc1LmRpZmYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvL2NhaXJvLWdldF9iaXRtYXBfc3VyZmFjZS1ic2MxMDM2Nzg5LUNWRS0yMDE3LTc0NzUuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWFhZDJlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyby9jYWlyby1nZXRfYml0bWFwX3N1cmZhY2UtYnNjMTAzNjc4OS1DVkUtMjAxNy03NDc1LmRpZmYKQEAgLTAsMCArMSwyMiBAQAorQ2Fpcm86IEZpeCBEZW5pYWwtb2YtU2VydmljZSBBdHRhY2sgZHVlIHRvIExvZ2ljYWwgUHJvYmxlbSBpbiBQcm9ncmFtCisKK2h0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDc2MworCitDVkU6IENWRS0yMDE3LTc0NzUKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IEZhbiBYaW4gPGZhbi54aW5AanAuZnVqaXRzdS5jb20+CisKK0luZGV4OiBjYWlyby0xLjE1LjQvc3JjL2NhaXJvLWZ0LWZvbnQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNhaXJvLTEuMTUuNC5vcmlnL3NyYy9jYWlyby1mdC1mb250LmMKKysrKyBjYWlyby0xLjE1LjQvc3JjL2NhaXJvLWZ0LWZvbnQuYworQEAgLTExNDksNyArMTE0OSw3IEBAIF9nZXRfYml0bWFwX3N1cmZhY2UgKEZUX0JpdG1hcAkJICAgICAqYmkKKyAgICAgd2lkdGggPSBiaXRtYXAtPndpZHRoOworICAgICBoZWlnaHQgPSBiaXRtYXAtPnJvd3M7CisgCistICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKSB7CisrICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwIHx8IGJpdG1hcC0+YnVmZmVyID09IE5VTEwpIHsKKyAJKnN1cmZhY2UgPSAoY2Fpcm9faW1hZ2Vfc3VyZmFjZV90ICopCisgCSAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSAoTlVMTCwgZm9ybWF0LCAwLCAwLCAwKTsKKyAJcmV0dXJuICgqc3VyZmFjZSktPmJhc2Uuc3RhdHVzOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyb18xLjE0LjEwLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyb18xLjE0LjEwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZGRkYzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvXzEuMTQuMTAuYmIKQEAgLTAsMCArMSw0NiBAQAorcmVxdWlyZSBjYWlyby5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTczZTk5OWUwYzcyYjVhYzkwMTI0MjRmYTE1N2FkNzciCisKK1NSQ19VUkkgPSAiaHR0cDovL2NhaXJvZ3JhcGhpY3Mub3JnL3JlbGVhc2VzL2NhaXJvLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9jYWlyby1nZXRfYml0bWFwX3N1cmZhY2UtYnNjMTAzNjc4OS1DVkUtMjAxNy03NDc1LmRpZmYgXCAKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY2Fpcm8tRml4LUNWRS0yMDE3LTk4MTQucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjE0NmY1ZjRkMGI0NDM5ZmMzNzkyZmQzNDUyYjdiMTJhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdlODc4Nzg2NThmMmM5OTUxYTE0ZmM2NDExNGQ0OTU4YzBlNjVhYzQ3NTMwYjhhYzMwNzhiMmNlNDFiNjZhMDkiCisKK1BBQ0tBR0VTID0rICJjYWlyby1nb2JqZWN0IGNhaXJvLXNjcmlwdC1pbnRlcnByZXRlciBjYWlyby1wZXJmLXV0aWxzIgorCitTVU1NQVJZXyR7UE59ID0gIlRoZSBDYWlybyAyRCB2ZWN0b3IgZ3JhcGhpY3MgbGlicmFyeSIKK0RFU0NSSVBUSU9OXyR7UE59ID0gIkNhaXJvIGlzIGEgbXVsdGktcGxhdGZvcm0gbGlicmFyeSBwcm92aWRpbmcgYW50aS1hbGlhc2VkIFwKK3ZlY3Rvci1iYXNlZCByZW5kZXJpbmcgZm9yIG11bHRpcGxlIHRhcmdldCBiYWNrZW5kcy4gUGF0aHMgY29uc2lzdCBcCitvZiBsaW5lIHNlZ21lbnRzIGFuZCBjdWJpYyBzcGxpbmVzIGFuZCBjYW4gYmUgcmVuZGVyZWQgYXQgYW55IHdpZHRoIFwKK3dpdGggdmFyaW91cyBqb2luIGFuZCBjYXAgc3R5bGVzLiBBbGwgY29sb3JzIG1heSBiZSBzcGVjaWZpZWQgd2l0aCBcCitvcHRpb25hbCB0cmFuc2x1Y2VuY2UgKG9wYWNpdHkvYWxwaGEpIGFuZCBjb21iaW5lZCB1c2luZyB0aGUgXAorZXh0ZW5kZWQgUG9ydGVyL0R1ZmYgY29tcG9zaXRpbmcgYWxnZWJyYSBhcyBmb3VuZCBpbiB0aGUgWCBSZW5kZXIgXAorRXh0ZW5zaW9uLiIKKworU1VNTUFSWV9jYWlyby1nb2JqZWN0ID0gIlRoZSBDYWlybyBsaWJyYXJ5IEdPYmplY3Qgd3JhcHBlciBsaWJyYXJ5IgorREVTQ1JJUFRJT05fY2Fpcm8tZ29iamVjdCA9ICJBIEdPYmplY3Qgd3JhcHBlciBsaWJyYXJ5IGZvciB0aGUgQ2Fpcm8gQVBJLiIKKworU1VNTUFSWV9jYWlyby1zY3JpcHQtaW50ZXJwcmV0ZXIgPSAiVGhlIENhaXJvIGxpYnJhcnkgc2NyaXB0IGludGVycHJldGVyIgorREVTQ1JJUFRJT05fY2Fpcm8tc2NyaXB0LWludGVycHJldGVyID0gIlRoZSBDYWlybyBzY3JpcHQgaW50ZXJwcmV0ZXIgaW1wbGVtZW50cyBcCitDYWlyb1NjcmlwdC4gIENhaXJvU2NyaXB0IGlzIHVzZWQgYnkgdHJhY2luZyB1dGlsaXRpZXMgdG8gZW5hYmxlIHRoZSBhYmlsaXR5IFwKK3RvIHJlcGxheSByZW5kZXJpbmcuIgorCitERVNDUklQVElPTl9jYWlyby1wZXJmLXV0aWxzID0gIlRoZSBDYWlybyBsaWJyYXJ5IHBlcmZvcm1hbmNlIHV0aWxpdGllcyIKKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYmNhaXJvLnNvLioiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9jYWlyby8qLnNvIgorRklMRVNfJHtQTn0tZ29iamVjdCA9ICIke2xpYmRpcn0vbGliY2Fpcm8tZ29iamVjdC5zby4qIgorRklMRVNfJHtQTn0tc2NyaXB0LWludGVycHJldGVyID0gIiR7bGliZGlyfS9saWJjYWlyby1zY3JpcHQtaW50ZXJwcmV0ZXIuc28uKiIKK0ZJTEVTXyR7UE59LXBlcmYtdXRpbHMgPSAiJHtiaW5kaXJ9L2NhaXJvLXRyYWNlICR7bGliZGlyfS9jYWlyby8qLmxhICR7bGliZGlyfS9jYWlyby9saWJjYWlyby10cmFjZS5zby4qIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJcm0gLXJmICR7RH0ke2JpbmRpcn0vY2Fpcm8tc3BoaW54CisJcm0gLXJmICR7RH0ke2xpYmRpcn0vY2Fpcm8vY2Fpcm8tZmRyKgorCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2NhaXJvL2NhaXJvLXNwaGlueCoKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9jYWlyby8uZGVidWcvY2Fpcm8tZmRyKgorCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2NhaXJvLy5kZWJ1Zy9jYWlyby1zcGhpbngqCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvXzEuMTQuOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2Fpcm8vY2Fpcm9fMS4xNC44LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTNjNzRmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2Fpcm8vY2Fpcm9fMS4xNC44LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotcmVxdWlyZSBjYWlyby5pbmMKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTczZTk5OWUwYzcyYjVhYzkwMTI0MjRmYTE1N2FkNzciCi0KLVNSQ19VUkkgPSAiaHR0cDovL2NhaXJvZ3JhcGhpY3Mub3JnL3JlbGVhc2VzL2NhaXJvLSR7UFZ9LnRhci54eiIKLQotU1JDX1VSSVttZDVzdW1dID0gIjRlZjBkYjJlYWNiMjcxYzc0ZjhhM2ZkODc4MjJhYTk4IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImQxZjJkOThhZTlhNDExMTU2NGY2ZGU0ZTAxM2Q2MzljZjc3MTU1YmFmMjU1NjU4MjI5NWEwZjAwYTliYzVlMjAiCi0KLVBBQ0tBR0VTID0rICJjYWlyby1nb2JqZWN0IGNhaXJvLXNjcmlwdC1pbnRlcnByZXRlciBjYWlyby1wZXJmLXV0aWxzIgotCi1TVU1NQVJZXyR7UE59ID0gIlRoZSBDYWlybyAyRCB2ZWN0b3IgZ3JhcGhpY3MgbGlicmFyeSIKLURFU0NSSVBUSU9OXyR7UE59ID0gIkNhaXJvIGlzIGEgbXVsdGktcGxhdGZvcm0gbGlicmFyeSBwcm92aWRpbmcgYW50aS1hbGlhc2VkIFwKLXZlY3Rvci1iYXNlZCByZW5kZXJpbmcgZm9yIG11bHRpcGxlIHRhcmdldCBiYWNrZW5kcy4gUGF0aHMgY29uc2lzdCBcCi1vZiBsaW5lIHNlZ21lbnRzIGFuZCBjdWJpYyBzcGxpbmVzIGFuZCBjYW4gYmUgcmVuZGVyZWQgYXQgYW55IHdpZHRoIFwKLXdpdGggdmFyaW91cyBqb2luIGFuZCBjYXAgc3R5bGVzLiBBbGwgY29sb3JzIG1heSBiZSBzcGVjaWZpZWQgd2l0aCBcCi1vcHRpb25hbCB0cmFuc2x1Y2VuY2UgKG9wYWNpdHkvYWxwaGEpIGFuZCBjb21iaW5lZCB1c2luZyB0aGUgXAotZXh0ZW5kZWQgUG9ydGVyL0R1ZmYgY29tcG9zaXRpbmcgYWxnZWJyYSBhcyBmb3VuZCBpbiB0aGUgWCBSZW5kZXIgXAotRXh0ZW5zaW9uLiIKLQotU1VNTUFSWV9jYWlyby1nb2JqZWN0ID0gIlRoZSBDYWlybyBsaWJyYXJ5IEdPYmplY3Qgd3JhcHBlciBsaWJyYXJ5IgotREVTQ1JJUFRJT05fY2Fpcm8tZ29iamVjdCA9ICJBIEdPYmplY3Qgd3JhcHBlciBsaWJyYXJ5IGZvciB0aGUgQ2Fpcm8gQVBJLiIKLQotU1VNTUFSWV9jYWlyby1zY3JpcHQtaW50ZXJwcmV0ZXIgPSAiVGhlIENhaXJvIGxpYnJhcnkgc2NyaXB0IGludGVycHJldGVyIgotREVTQ1JJUFRJT05fY2Fpcm8tc2NyaXB0LWludGVycHJldGVyID0gIlRoZSBDYWlybyBzY3JpcHQgaW50ZXJwcmV0ZXIgaW1wbGVtZW50cyBcCi1DYWlyb1NjcmlwdC4gIENhaXJvU2NyaXB0IGlzIHVzZWQgYnkgdHJhY2luZyB1dGlsaXRpZXMgdG8gZW5hYmxlIHRoZSBhYmlsaXR5IFwKLXRvIHJlcGxheSByZW5kZXJpbmcuIgotCi1ERVNDUklQVElPTl9jYWlyby1wZXJmLXV0aWxzID0gIlRoZSBDYWlybyBsaWJyYXJ5IHBlcmZvcm1hbmNlIHV0aWxpdGllcyIKLQotRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYmNhaXJvLnNvLioiCi1GSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9jYWlyby8qLnNvIgotRklMRVNfJHtQTn0tZ29iamVjdCA9ICIke2xpYmRpcn0vbGliY2Fpcm8tZ29iamVjdC5zby4qIgotRklMRVNfJHtQTn0tc2NyaXB0LWludGVycHJldGVyID0gIiR7bGliZGlyfS9saWJjYWlyby1zY3JpcHQtaW50ZXJwcmV0ZXIuc28uKiIKLUZJTEVTXyR7UE59LXBlcmYtdXRpbHMgPSAiJHtiaW5kaXJ9L2NhaXJvLXRyYWNlICR7bGliZGlyfS9jYWlyby8qLmxhICR7bGliZGlyfS9jYWlyby9saWJjYWlyby10cmFjZS5zby4qIgotCi1kb19pbnN0YWxsX2FwcGVuZCAoKSB7Ci0Jcm0gLXJmICR7RH0ke2JpbmRpcn0vY2Fpcm8tc3BoaW54Ci0Jcm0gLXJmICR7RH0ke2xpYmRpcn0vY2Fpcm8vY2Fpcm8tZmRyKgotCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2NhaXJvL2NhaXJvLXNwaGlueCoKLQlybSAtcmYgJHtEfSR7bGliZGlyfS9jYWlyby8uZGVidWcvY2Fpcm8tZmRyKgotCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2NhaXJvLy5kZWJ1Zy9jYWlyby1zcGhpbngqCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjBfMS4yNi4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wXzEuMjYuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZhMWNmZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjBfMS4yNi4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotcmVxdWlyZSBjbHV0dGVyLTEuMC5pbmMKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCi0KLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImIwNjVlOWNhNTNkMWY2YmMxZWMyNmFlYjI3MzM4YmI3IgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNjc1MTRlNzgyNGIzZmViNDcyMzE2NDA4NGIzNmQ2Y2UxYWU0MWNiM2E5ODk3ZTlmMWE1NmM4MzM0OTkzY2UwNiIKLVNSQ19VUkkgKz0gImZpbGU6Ly9pbnN0YWxsLWV4YW1wbGVzLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9ydW4taW5zdGFsbGVkLXRlc3RzLXdpdGgtdGFwLW91dHB1dC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vMDAwMS1SZW1vdmUtY2x1dHRlci50eXBlcy1hcy1pdC1pcy1idWlsZC1jb25maWd1cmF0aW9uLXNwLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjBfMS4yNi4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wXzEuMjYuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGIwNTAxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wXzEuMjYuMi5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIGNsdXR0ZXItMS4wLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiYTAzNDgyY2JhY2Y3MzVlY2E4Yzk5NmYyMTBhMjFlZTUiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJlNzIzMzMxNDk4MzA1NWU5MDE4Zjk0ZjU2ODgyZTI5ZTdmYzM0ZDhkMzVkZTAzMDc4OWZkY2Q5YjJkMGUyZTU2IgorU1JDX1VSSSArPSAiZmlsZTovL2luc3RhbGwtZXhhbXBsZXMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3J1bi1pbnN0YWxsZWQtdGVzdHMtd2l0aC10YXAtb3V0cHV0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLVJlbW92ZS1jbHV0dGVyLnR5cGVzLWFzLWl0LWlzLWJ1aWxkLWNvbmZpZ3VyYXRpb24tc3AucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjAuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMC5pbmMKaW5kZXggNGM4Nzc5OC4uMjZhZTkxYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMC5pbmMKQEAgLTE1LDMgKzE1LDcgQEAKIEZJTEVTXyR7UE59ICAgICAgICAgICs9ICIke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC9saWIqLnNvIgogRklMRVNfJHtQTn0tZGV2ICAgICAgKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wLyoubGEiCiBGSUxFU18ke1BOfS1leGFtcGxlcyAgPSAiJHtiaW5kaXJ9L3ZpZGVvLXBsYXllciAke2JpbmRpcn0vdmlkZW8tc2luayIKKworIyBOZWVkcyB0byBiZSBkaXNhYmxlIGR1ZSB0byBhIGRlcGVuZGVuY3kgb24gZ3N0cmVhbWVyLXBsdWdpbnMgaW50cm9zcGVjdGlvbiBmaWxlcworRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzNjQgPSAiIC0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uICIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMF8zLjAuMjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wXzMuMC4yMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE3N2M5MS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wXzMuMC4yMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotcmVxdWlyZSBjbHV0dGVyLWdzdC0zLjAuaW5jCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NsdXR0ZXItZ3N0L2NsdXR0ZXItZ3N0Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yNDttZDU9OTViYWFjYmExOTRlODE0YzExMGVhM2JkZjI1ZGRiZjQiCi0KLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjg4ZWVhMmRkNWZjNDM1N2I1YjE4ZjFkZmVlZDU2YzYyIgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiZjFmYzU3ZmIzMmVhN2UzZDkyMzRiNThkYjM1ZWI5ZWYzMDI4Y2YwYjI2NmQ4NTIzNWY5NTllZGMwZmUzZGZkNCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjBfMy4wLjI0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMF8zLjAuMjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E1ZTBhZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjBfMy4wLjI0LmJiCkBAIC0wLDAgKzEsNyBAQAorcmVxdWlyZSBjbHV0dGVyLWdzdC0zLjAuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NsdXR0ZXItZ3N0L2NsdXR0ZXItZ3N0Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yNDttZDU9OTViYWFjYmExOTRlODE0YzExMGVhM2JkZjI1ZGRiZjQiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjNlMTQ1ZTI0YmIzYzM0MGVlZWRkYWZkMThlZmU1NDdkIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiZTlmMWM4N2Q4ZjRjNDcwNjJlOTUyZmI4MDA4NzA0Zjg5NDJjZjJkNmYyOTA2ODhmM2Y3ZDEzZTgzNTc4Y2M2YyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybV8yLjQuNzUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RybS9saWJkcm1fMi40Ljc1LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Njk2M2Q0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybV8yLjQuNzUuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi1TVU1NQVJZID0gIlVzZXJzcGFjZSBpbnRlcmZhY2UgdG8gdGhlIGtlcm5lbCBEUk0gc2VydmljZXMiCi1ERVNDUklQVElPTiA9ICJUaGUgcnVudGltZSBsaWJyYXJ5IGZvciBhY2Nlc3NpbmcgdGhlIGtlcm5lbCBEUk0gc2VydmljZXMuICBEUk0gXAotc3RhbmRzIGZvciBcIkRpcmVjdCBSZW5kZXJpbmcgTWFuYWdlclwiLCB3aGljaCBpcyB0aGUga2VybmVsIHBvcnRpb24gb2YgdGhlIFwKLVwiRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZVwiIChEUkkpLiAgRFJJIGlzIHJlcXVpcmVkIGZvciBtYW55IGhhcmR3YXJlIFwKLWFjY2VsZXJhdGVkIE9wZW5HTCBkcml2ZXJzLiIKLUhPTUVQQUdFID0gImh0dHA6Ly9kcmkuZnJlZWRlc2t0b3Aub3JnIgotU0VDVElPTiA9ICJ4MTEvYmFzZSIKLUxJQ0VOU0UgPSAiTUlUIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8veGY4NmRybS5jO2JlZ2lubGluZT05O2VuZGxpbmU9MzI7bWQ1PWM4YTNiOTYxYWY3NjY3YzUzMDgxNjc2MWU5NDlkYzcxIgotUFJPVklERVMgPSAiZHJtIgotREVQRU5EUyA9ICJsaWJwdGhyZWFkLXN0dWJzIGxpYnBjaWFjY2VzcyIKLQotU1JDX1VSSSA9ICJodHRwOi8vZHJpLmZyZWVkZXNrdG9wLm9yZy9saWJkcm0vJHtCUH0udGFyLmJ6MiBcCi0gICAgICAgICAgIGZpbGU6Ly9pbnN0YWxsdGVzdHMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZml4X09fQ0xPRVhFQ191bmRlY2xhcmVkLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtY29uZmlndXJlLmFjLUFsbG93LWV4cGxpY2l0LWVuYWJsaW5nLW9mLWN1bml0LXRlc3RzLnBhdGNoIFwKLSAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI1N2IwNTg5MTIyZWM0YjhkNWRmYjllNDMwYTIxZjBiMyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIyZDVhNTAwZWVmNDEyY2MyODdkMTIyNjhlZWQ3OWQ1NzFlMjYyZDQ5NTdhMmVjOTI1ODA3M2YzMDU5ODUwNTRmIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgbWFucGFnZXMKLQotRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtY2Fpcm8tdGVzdHMgXAotICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtY3VuaXQgXAotICAgICAgICAgICAgICAgICAtLWVuYWJsZS1vbWFwLWV4cGVyaW1lbnRhbC1hcGkgXAotICAgICAgICAgICAgICAgICAtLWVuYWJsZS1ldG5hdml2LWV4cGVyaW1lbnRhbC1hcGkgXAotICAgICAgICAgICAgICAgICAtLWVuYWJsZS1pbnN0YWxsLXRlc3QtcHJvZ3JhbXMgXAotICAgICAgICAgICAgICAgICAtLWRpc2FibGUtdmFsZ3JpbmQgXAotICAgICAgICAgICAgICAgICIKLVBBQ0tBR0VDT05GSUdbbWFucGFnZXNdID0gIi0tZW5hYmxlLW1hbnBhZ2VzLCAtLWRpc2FibGUtbWFucGFnZXMsIGxpYnhzbHQtbmF0aXZlIHhtbHRvLW5hdGl2ZSIKLQotQUxMT1dfRU1QVFlfJHtQTn0tZHJpdmVycyA9ICIxIgotUEFDS0FHRVMgPSsgIiR7UE59LXRlc3RzICR7UE59LWRyaXZlcnMgJHtQTn0tcmFkZW9uICR7UE59LW5vdXZlYXUgJHtQTn0tb21hcCBcCi0gICAgICAgICAgICAgJHtQTn0taW50ZWwgJHtQTn0tZXh5bm9zICR7UE59LWttcyAke1BOfS1mcmVlZHJlbm8gJHtQTn0tYW1kZ3B1IFwKLSAgICAgICAgICAgICAke1BOfS1ldG5hdml2IgotCi1SUkVDT01NRU5EU18ke1BOfS1kcml2ZXJzID0gIiR7UE59LXJhZGVvbiAke1BOfS1ub3V2ZWF1ICR7UE59LW9tYXAgJHtQTn0taW50ZWwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke1BOfS1leHlub3MgJHtQTn0tZnJlZWRyZW5vICR7UE59LWFtZGdwdSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7UE59LWV0bmF2aXYiCi0KLUZJTEVTXyR7UE59LXRlc3RzID0gIiR7YmluZGlyfS8qIgotRklMRVNfJHtQTn0tcmFkZW9uID0gIiR7bGliZGlyfS9saWJkcm1fcmFkZW9uLnNvLioiCi1GSUxFU18ke1BOfS1ub3V2ZWF1ID0gIiR7bGliZGlyfS9saWJkcm1fbm91dmVhdS5zby4qIgotRklMRVNfJHtQTn0tb21hcCA9ICIke2xpYmRpcn0vbGliZHJtX29tYXAuc28uKiIKLUZJTEVTXyR7UE59LWludGVsID0gIiR7bGliZGlyfS9saWJkcm1faW50ZWwuc28uKiIKLUZJTEVTXyR7UE59LWV4eW5vcyA9ICIke2xpYmRpcn0vbGliZHJtX2V4eW5vcy5zby4qIgotRklMRVNfJHtQTn0ta21zID0gIiR7bGliZGlyfS9saWJrbXMqLnNvLioiCi1GSUxFU18ke1BOfS1mcmVlZHJlbm8gPSAiJHtsaWJkaXJ9L2xpYmRybV9mcmVlZHJlbm8uc28uKiIKLUZJTEVTXyR7UE59LWFtZGdwdSA9ICIke2xpYmRpcn0vbGliZHJtX2FtZGdwdS5zby4qIgotRklMRVNfJHtQTn0tZXRuYXZpdiA9ICIke2xpYmRpcn0vbGliZHJtX2V0bmF2aXYuc28uKiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybV8yLjQuODMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RybS9saWJkcm1fMi40LjgzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1Y2I3NWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RybS9saWJkcm1fMi40LjgzLmJiCkBAIC0wLDAgKzEsNTEgQEAKK1NVTU1BUlkgPSAiVXNlcnNwYWNlIGludGVyZmFjZSB0byB0aGUga2VybmVsIERSTSBzZXJ2aWNlcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBydW50aW1lIGxpYnJhcnkgZm9yIGFjY2Vzc2luZyB0aGUga2VybmVsIERSTSBzZXJ2aWNlcy4gIERSTSBcCitzdGFuZHMgZm9yIFwiRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyXCIsIHdoaWNoIGlzIHRoZSBrZXJuZWwgcG9ydGlvbiBvZiB0aGUgXAorXCJEaXJlY3QgUmVuZGVyaW5nIEluZnJhc3RydWN0dXJlXCIgKERSSSkuICBEUkkgaXMgcmVxdWlyZWQgZm9yIG1hbnkgaGFyZHdhcmUgXAorYWNjZWxlcmF0ZWQgT3BlbkdMIGRyaXZlcnMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2RyaS5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gIngxMS9iYXNlIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly94Zjg2ZHJtLmM7YmVnaW5saW5lPTk7ZW5kbGluZT0zMjttZDU9YzhhM2I5NjFhZjc2NjdjNTMwODE2NzYxZTk0OWRjNzEiCitQUk9WSURFUyA9ICJkcm0iCitERVBFTkRTID0gImxpYnB0aHJlYWQtc3R1YnMgbGlicGNpYWNjZXNzIgorCitTUkNfVVJJID0gImh0dHA6Ly9kcmkuZnJlZWRlc2t0b3Aub3JnL2xpYmRybS8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2luc3RhbGx0ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfT19DTE9FWEVDX3VuZGVjbGFyZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUuYWMtQWxsb3ctZXhwbGljaXQtZW5hYmxpbmctb2YtY3VuaXQtdGVzdHMucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjIzODAwOTUzZWQ3NTY0OTg4ODcyZTFlOGM2MWZkZTMxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAzYTUyNjY5ZGE2MGVhZDYyNTQ4YTM1YmM0MzBhYWZiNmMyZDhkZDIxZWM5ZGJhM2E5MGY5NmVmZjVmZTM2ZDYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBtYW5wYWdlcworCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1jYWlyby10ZXN0cyBcCisgICAgICAgICAgICAgICAgIC0td2l0aG91dC1jdW5pdCBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLW9tYXAtZXhwZXJpbWVudGFsLWFwaSBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLWV0bmF2aXYtZXhwZXJpbWVudGFsLWFwaSBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGwtdGVzdC1wcm9ncmFtcyBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS12YWxncmluZCBcCisgICAgICAgICAgICAgICAgIgorUEFDS0FHRUNPTkZJR1ttYW5wYWdlc10gPSAiLS1lbmFibGUtbWFucGFnZXMsIC0tZGlzYWJsZS1tYW5wYWdlcywgbGlieHNsdC1uYXRpdmUgeG1sdG8tbmF0aXZlIgorCitBTExPV19FTVBUWV8ke1BOfS1kcml2ZXJzID0gIjEiCitQQUNLQUdFUyA9KyAiJHtQTn0tdGVzdHMgJHtQTn0tZHJpdmVycyAke1BOfS1yYWRlb24gJHtQTn0tbm91dmVhdSAke1BOfS1vbWFwIFwKKyAgICAgICAgICAgICAke1BOfS1pbnRlbCAke1BOfS1leHlub3MgJHtQTn0ta21zICR7UE59LWZyZWVkcmVubyAke1BOfS1hbWRncHUgXAorICAgICAgICAgICAgICR7UE59LWV0bmF2aXYiCisKK1JSRUNPTU1FTkRTXyR7UE59LWRyaXZlcnMgPSAiJHtQTn0tcmFkZW9uICR7UE59LW5vdXZlYXUgJHtQTn0tb21hcCAke1BOfS1pbnRlbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7UE59LWV4eW5vcyAke1BOfS1mcmVlZHJlbm8gJHtQTn0tYW1kZ3B1IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXRuYXZpdiIKKworRklMRVNfJHtQTn0tdGVzdHMgPSAiJHtiaW5kaXJ9LyoiCitGSUxFU18ke1BOfS1yYWRlb24gPSAiJHtsaWJkaXJ9L2xpYmRybV9yYWRlb24uc28uKiIKK0ZJTEVTXyR7UE59LW5vdXZlYXUgPSAiJHtsaWJkaXJ9L2xpYmRybV9ub3V2ZWF1LnNvLioiCitGSUxFU18ke1BOfS1vbWFwID0gIiR7bGliZGlyfS9saWJkcm1fb21hcC5zby4qIgorRklMRVNfJHtQTn0taW50ZWwgPSAiJHtsaWJkaXJ9L2xpYmRybV9pbnRlbC5zby4qIgorRklMRVNfJHtQTn0tZXh5bm9zID0gIiR7bGliZGlyfS9saWJkcm1fZXh5bm9zLnNvLioiCitGSUxFU18ke1BOfS1rbXMgPSAiJHtsaWJkaXJ9L2xpYmttcyouc28uKiIKK0ZJTEVTXyR7UE59LWZyZWVkcmVubyA9ICIke2xpYmRpcn0vbGliZHJtX2ZyZWVkcmVuby5zby4qIgorRklMRVNfJHtQTn0tYW1kZ3B1ID0gIiR7bGliZGlyfS9saWJkcm1fYW1kZ3B1LnNvLioiCitGSUxFU18ke1BOfS1ldG5hdml2ID0gIiR7bGliZGlyfS9saWJkcm1fZXRuYXZpdi5zby4qIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mb250Y29uZmlnL2ZvbnRjb25maWcvMDAwMS1Bdm9pZC1jb25mbGljdHMtd2l0aC1pbnRlZ2VyLXdpZHRoLW1hY3Jvcy1mcm9tLVRTLTE4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mb250Y29uZmlnL2ZvbnRjb25maWcvMDAwMS1Bdm9pZC1jb25mbGljdHMtd2l0aC1pbnRlZ2VyLXdpZHRoLW1hY3Jvcy1mcm9tLVRTLTE4LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWQ3MTcwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZm9udGNvbmZpZy9mb250Y29uZmlnLzAwMDEtQXZvaWQtY29uZmxpY3RzLXdpdGgtaW50ZWdlci13aWR0aC1tYWNyb3MtZnJvbS1UUy0xOC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLUZyb20gMjBjZGRjODI0YzY1MDFjMjA4MmNhYzQxYjE2MmMzNGNkNWZjYzUzMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBTdW4sIDExIERlYyAyMDE2IDE0OjMyOjAwIC0wODAwCi1TdWJqZWN0OiBbUEFUQ0hdIEF2b2lkIGNvbmZsaWN0cyB3aXRoIGludGVnZXIgd2lkdGggbWFjcm9zIGZyb20gVFMKLSAxODY2MS0xOjIwMTQKLQotZ2xpYmMgMi4yNSsgaGFzIG5vdyBkZWZpbmVkIHRoZXNlIG1hY3JvcyBpbiA8bGltaXRzLmg+Ci1odHRwczovL3NvdXJjZXdhcmUub3JnL2dpdC8/cD1nbGliYy5naXQ7YT1jb21taXQ7aD01YjE3ZmQwZGE2MmJmOTIzY2I2MWQxYmI3YjA4Y2YyZTFmMWY5YzFhCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLVVwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCi0KLSBmb250Y29uZmlnL2ZvbnRjb25maWcuaCB8IDIgKy0KLSBzcmMvZmNvYmpzLmggICAgICAgICAgICB8IDIgKy0KLSBzcmMvZmNvYmpzaGFzaC5ncGVyZiAgICB8IDIgKy0KLSBzcmMvZmNvYmpzaGFzaC5oICAgICAgICB8IDIgKy0KLSA0IGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKLQotSW5kZXg6IGZvbnRjb25maWctMi4xMi4xL2ZvbnRjb25maWcvZm9udGNvbmZpZy5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZm9udGNvbmZpZy0yLjEyLjEub3JpZy9mb250Y29uZmlnL2ZvbnRjb25maWcuaAotKysrIGZvbnRjb25maWctMi4xMi4xL2ZvbnRjb25maWcvZm9udGNvbmZpZy5oCi1AQCAtMTI4LDcgKzEyOCw4IEBAIHR5cGVkZWYgaW50CQlGY0Jvb2w7Ci0gI2RlZmluZSBGQ19VU0VSX0NBQ0hFX0ZJTEUJICAgICIuZm9udHMuY2FjaGUtIiBGQ19DQUNIRV9WRVJTSU9OCi0gCi0gLyogQWRqdXN0IG91dGxpbmUgcmFzdGVyaXplciAqLwotLSNkZWZpbmUgRkNfQ0hBUl9XSURUSAkgICAgImNoYXJ3aWR0aCIJLyogSW50ICovCi0rI2RlZmluZSBGQ19DSEFSV0lEVEgJICAgICJjaGFyd2lkdGgiCS8qIEludCAqLwotKyNkZWZpbmUgRkNfQ0hBUl9XSURUSAkgICAgRkNfQ0hBUldJRFRICi0gI2RlZmluZSBGQ19DSEFSX0hFSUdIVAkgICAgImNoYXJoZWlnaHQiLyogSW50ICovCi0gI2RlZmluZSBGQ19NQVRSSVgJICAgICJtYXRyaXgiICAgIC8qIEZjTWF0cml4ICovCi0gCi1JbmRleDogZm9udGNvbmZpZy0yLjEyLjEvc3JjL2Zjb2Jqcy5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZm9udGNvbmZpZy0yLjEyLjEub3JpZy9zcmMvZmNvYmpzLmgKLSsrKyBmb250Y29uZmlnLTIuMTIuMS9zcmMvZmNvYmpzLmgKLUBAIC01MSw3ICs1MSw3IEBAIEZDX09CSkVDVCAoRFBJLAkJCUZjVHlwZURvdWJsZSwJTlVMTCkKLSBGQ19PQkpFQ1QgKFJHQkEsCQlGY1R5cGVJbnRlZ2VyLAlOVUxMKQotIEZDX09CSkVDVCAoU0NBTEUsCQlGY1R5cGVEb3VibGUsCU5VTEwpCi0gRkNfT0JKRUNUIChNSU5TUEFDRSwJCUZjVHlwZUJvb2wsCU5VTEwpCi0tRkNfT0JKRUNUIChDSEFSX1dJRFRILAkJRmNUeXBlSW50ZWdlciwJTlVMTCkKLStGQ19PQkpFQ1QgKENIQVJXSURUSCwJCUZjVHlwZUludGVnZXIsCU5VTEwpCi0gRkNfT0JKRUNUIChDSEFSX0hFSUdIVCwJCUZjVHlwZUludGVnZXIsCU5VTEwpCi0gRkNfT0JKRUNUIChNQVRSSVgsCQlGY1R5cGVNYXRyaXgsCU5VTEwpCi0gRkNfT0JKRUNUIChDSEFSU0VULAkJRmNUeXBlQ2hhclNldCwJRmNDb21wYXJlQ2hhclNldCkKLUluZGV4OiBmb250Y29uZmlnLTIuMTIuMS9zcmMvZmNvYmpzaGFzaC5ncGVyZgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGZvbnRjb25maWctMi4xMi4xLm9yaWcvc3JjL2Zjb2Jqc2hhc2guZ3BlcmYKLSsrKyBmb250Y29uZmlnLTIuMTIuMS9zcmMvZmNvYmpzaGFzaC5ncGVyZgotQEAgLTQ0LDcgKzQ0LDcgQEAgaW50IGlkOwotICJyZ2JhIixGQ19SR0JBX09CSkVDVAotICJzY2FsZSIsRkNfU0NBTEVfT0JKRUNUCi0gIm1pbnNwYWNlIixGQ19NSU5TUEFDRV9PQkpFQ1QKLS0iY2hhcndpZHRoIixGQ19DSEFSX1dJRFRIX09CSkVDVAotKyJjaGFyd2lkdGgiLEZDX0NIQVJXSURUSF9PQkpFQ1QKLSAiY2hhcmhlaWdodCIsRkNfQ0hBUl9IRUlHSFRfT0JKRUNUCi0gIm1hdHJpeCIsRkNfTUFUUklYX09CSkVDVAotICJjaGFyc2V0IixGQ19DSEFSU0VUX09CSkVDVAotSW5kZXg6IGZvbnRjb25maWctMi4xMi4xL3NyYy9mY29ianNoYXNoLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBmb250Y29uZmlnLTIuMTIuMS5vcmlnL3NyYy9mY29ianNoYXNoLmgKLSsrKyBmb250Y29uZmlnLTIuMTIuMS9zcmMvZmNvYmpzaGFzaC5oCi1AQCAtMjg0LDcgKzI4NCw3IEBAIEZjT2JqZWN0VHlwZUxvb2t1cCAocmVnaXN0ZXIgY29uc3QgY2hhcgotICAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBGY09iamVjdFR5cGVOYW1lUG9vbF90ICopMCktPkZjT2JqZWN0VHlwZU5hbWVQb29sX3N0cjQzLEZDX0NIQVJTRVRfT0JKRUNUfSwKLSAgICAgICB7LTF9LAotICNsaW5lIDQ3ICJmY29ianNoYXNoLmdwZXJmIgotLSAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBGY09iamVjdFR5cGVOYW1lUG9vbF90ICopMCktPkZjT2JqZWN0VHlwZU5hbWVQb29sX3N0cjQ1LEZDX0NIQVJfV0lEVEhfT0JKRUNUfSwKLSsgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3QgRmNPYmplY3RUeXBlTmFtZVBvb2xfdCAqKTApLT5GY09iamVjdFR5cGVOYW1lUG9vbF9zdHI0NSxGQ19DSEFSV0lEVEhfT0JKRUNUfSwKLSAjbGluZSA0OCAiZmNvYmpzaGFzaC5ncGVyZiIKLSAgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3QgRmNPYmplY3RUeXBlTmFtZVBvb2xfdCAqKTApLT5GY09iamVjdFR5cGVOYW1lUG9vbF9zdHI0NixGQ19DSEFSX0hFSUdIVF9PQkpFQ1R9LAotICNsaW5lIDU1ICJmY29ianNoYXNoLmdwZXJmIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mb250Y29uZmlnL2ZvbnRjb25maWdfMi4xMi4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mb250Y29uZmlnL2ZvbnRjb25maWdfMi4xMi4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWIwNjZjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZm9udGNvbmZpZy9mb250Y29uZmlnXzIuMTIuMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLVNVTU1BUlkgPSAiR2VuZXJpYyBmb250IGNvbmZpZ3VyYXRpb24gbGlicmFyeSIKLURFU0NSSVBUSU9OID0gIkZvbnRjb25maWcgaXMgYSBmb250IGNvbmZpZ3VyYXRpb24gYW5kIGN1c3RvbWl6YXRpb24gbGlicmFyeSwgd2hpY2ggXAotZG9lcyBub3QgZGVwZW5kIG9uIHRoZSBYIFdpbmRvdyBTeXN0ZW0uIEl0IGlzIGRlc2lnbmVkIHRvIGxvY2F0ZSBcCi1mb250cyB3aXRoaW4gdGhlIHN5c3RlbSBhbmQgc2VsZWN0IHRoZW0gYWNjb3JkaW5nIHRvIHJlcXVpcmVtZW50cyBcCi1zcGVjaWZpZWQgYnkgYXBwbGljYXRpb25zLiBcCi1Gb250Y29uZmlnIGlzIG5vdCBhIHJhc3Rlcml6YXRpb24gbGlicmFyeSwgbm9yIGRvZXMgaXQgaW1wb3NlIGEgXAotcGFydGljdWxhciByYXN0ZXJpemF0aW9uIGxpYnJhcnkgb24gdGhlIGFwcGxpY2F0aW9uLiBUaGUgWC1zcGVjaWZpYyBcCi1saWJyYXJ5ICdYZnQnIHVzZXMgZm9udGNvbmZpZyBhbG9uZyB3aXRoIGZyZWV0eXBlIHRvIHNwZWNpZnkgYW5kIFwKLXJhc3Rlcml6ZSBmb250cy4iCi0KLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZm9udGNvbmZpZy5vcmciCi1CVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PWZvbnRjb25maWciCi0KLUxJQ0VOU0UgPSAiTUlULXN0eWxlICYgTUlUICYgUEQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03YTA0NDllOWJjNTM3MDQwMmE5NGMwMDIwNGJlY2EzZCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZmNmcmVldHlwZS5jO2VuZGxpbmU9NDU7bWQ1PTVkOTUxM2UzMTk2YTFmYmZkZmE5NDA1MWMwOWRmYzg0IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9mY2NhY2hlLmM7YmVnaW5saW5lPTEzNjA7ZW5kbGluZT0xMzc1O21kNT0wMzI2Y2ZlYjRhNzMzM2RkNGRkMjVmYmJjNGI5ZjI3ZiIKLQotU0VDVElPTiA9ICJsaWJzIgotCi1ERVBFTkRTID0gImV4cGF0IGZyZWV0eXBlIHpsaWIiCi0KLVNSQ19VUkkgPSAiaHR0cDovL2ZvbnRjb25maWcub3JnL3JlbGVhc2UvZm9udGNvbmZpZy0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vcmV2ZXJ0LXN0YXRpYy1wa2djb25maWcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1Bdm9pZC1jb25mbGljdHMtd2l0aC1pbnRlZ2VyLXdpZHRoLW1hY3Jvcy1mcm9tLVRTLTE4LnBhdGNoIFwKLSAgICAgICAgICAgIgotU1JDX1VSSVttZDVzdW1dID0gImNlNTVlNTI1YzM3MTQ3ZWVlMTRjYzJkZTZjYzA5ZjZjIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImE5ZjQyZDAzOTQ5Zjk0OGEzYTRmNzYyMjg3ZGJjMTZlNTNhOTI3YzkxYTA3ZWU2NDIwN2ViZDkwYTllNWUyOTIiCi0KLVBBQ0tBR0VTID0rICJmb250Y29uZmlnLXV0aWxzIgotRklMRVNfJHtQTn0gPSsgIiR7ZGF0YWRpcn0veG1sLyoiCi1GSUxFU19mb250Y29uZmlnLXV0aWxzID0gIiR7YmluZGlyfS8qIgotCi0jIFdvcmsgYXJvdW5kIHBhc3QgYnJlYWthZ2UgaW4gZGViaWFuLmJiY2xhc3MKLVJQUk9WSURFU19mb250Y29uZmlnLXV0aWxzID0gImxpYmZvbnRjb25maWctdXRpbHMiCi1SUkVQTEFDRVNfZm9udGNvbmZpZy11dGlscyA9ICJsaWJmb250Y29uZmlnLXV0aWxzIgotUkNPTkZMSUNUU19mb250Y29uZmlnLXV0aWxzID0gImxpYmZvbnRjb25maWctdXRpbHMiCi1ERUJJQU5fTk9BVVRPTkFNRV9mb250Y29uZmlnLXV0aWxzID0gIjEiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyByZWxhdGl2ZV9zeW1saW5rcwotCi1GT05UQ09ORklHX0NBQ0hFX0RJUiA/PSAiJHtsb2NhbHN0YXRlZGlyfS9jYWNoZS9mb250Y29uZmlnIgotCi0jIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGFkZGl0aW9uYWwgZGlyZWN0b3JpZXMKLSMgL3Vzci9zaGFyZS9mb250cyBpcyBhbHJlYWR5IGluY2x1ZGVkIGJ5IGRlZmF1bHQgKHlvdSBjYW4gY2hhbmdlIGl0IHdpdGggLS13aXRoLWRlZmF1bHQtZm9udHMpCi1GT05UQ09ORklHX0ZPTlRfRElSUyA/PSAibm8iCi0KLUVYVFJBX09FQ09ORiA9ICIgLS1kaXNhYmxlLWRvY3MgLS13aXRoLWRlZmF1bHQtZm9udHM9JHtkYXRhZGlyfS9mb250cyAtLXdpdGgtY2FjaGUtZGlyPSR7Rk9OVENPTkZJR19DQUNIRV9ESVJ9IC0td2l0aC1hZGQtZm9udHM9JHtGT05UQ09ORklHX0ZPTlRfRElSU30iCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mb250Y29uZmlnL2ZvbnRjb25maWdfMi4xMi40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mb250Y29uZmlnL2ZvbnRjb25maWdfMi4xMi40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNThiMzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZvbnRjb25maWcvZm9udGNvbmZpZ18yLjEyLjQuYmIKQEAgLTAsMCArMSw1NCBAQAorU1VNTUFSWSA9ICJHZW5lcmljIGZvbnQgY29uZmlndXJhdGlvbiBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiRm9udGNvbmZpZyBpcyBhIGZvbnQgY29uZmlndXJhdGlvbiBhbmQgY3VzdG9taXphdGlvbiBsaWJyYXJ5LCB3aGljaCBcCitkb2VzIG5vdCBkZXBlbmQgb24gdGhlIFggV2luZG93IFN5c3RlbS4gSXQgaXMgZGVzaWduZWQgdG8gbG9jYXRlIFwKK2ZvbnRzIHdpdGhpbiB0aGUgc3lzdGVtIGFuZCBzZWxlY3QgdGhlbSBhY2NvcmRpbmcgdG8gcmVxdWlyZW1lbnRzIFwKK3NwZWNpZmllZCBieSBhcHBsaWNhdGlvbnMuIFwKK0ZvbnRjb25maWcgaXMgbm90IGEgcmFzdGVyaXphdGlvbiBsaWJyYXJ5LCBub3IgZG9lcyBpdCBpbXBvc2UgYSBcCitwYXJ0aWN1bGFyIHJhc3Rlcml6YXRpb24gbGlicmFyeSBvbiB0aGUgYXBwbGljYXRpb24uIFRoZSBYLXNwZWNpZmljIFwKK2xpYnJhcnkgJ1hmdCcgdXNlcyBmb250Y29uZmlnIGFsb25nIHdpdGggZnJlZXR5cGUgdG8gc3BlY2lmeSBhbmQgXAorcmFzdGVyaXplIGZvbnRzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mb250Y29uZmlnLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9Zm9udGNvbmZpZyIKKworTElDRU5TRSA9ICJNSVQtc3R5bGUgJiBNSVQgJiBQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdhMDQ0OWU5YmM1MzcwNDAyYTk0YzAwMjA0YmVjYTNkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9mY2ZyZWV0eXBlLmM7ZW5kbGluZT00NTttZDU9NWQ5NTEzZTMxOTZhMWZiZmRmYTk0MDUxYzA5ZGZjODQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2ZjY2FjaGUuYztiZWdpbmxpbmU9MTM2NztlbmRsaW5lPTEzODI7bWQ1PTAzMjZjZmViNGE3MzMzZGQ0ZGQyNWZiYmM0YjlmMjdmIgorCitTRUNUSU9OID0gImxpYnMiCisKK0RFUEVORFMgPSAiZXhwYXQgZnJlZXR5cGUgemxpYiBncGVyZi1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2ZvbnRjb25maWcub3JnL3JlbGVhc2UvZm9udGNvbmZpZy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcmV2ZXJ0LXN0YXRpYy1wa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiNGZiMDFmYzNmNDE3NjBjNDFjNjllMzdjYzc4NGI2NTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmQ1YTZhNjYzZjRjNGEwMGUxOTY1MjM5MDI2MjY2NTRkZDBjNGE3ODY4NmNiYzZlNDcyZjMzOGU1MGZkZjgwNiIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgIyB3b3JrIGFyb3VuZCBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDEyODAKKyAgICBybSAtZiAke1N9L3NyYy9mY29ianNoYXNoLmggJHtTfS9zcmMvZmNvYmpzaGFzaC5ncGVyZgorfQorCitQQUNLQUdFUyA9KyAiZm9udGNvbmZpZy11dGlscyIKK0ZJTEVTXyR7UE59ID0rICIke2RhdGFkaXJ9L3htbC8qIgorRklMRVNfZm9udGNvbmZpZy11dGlscyA9ICIke2JpbmRpcn0vKiIKKworIyBXb3JrIGFyb3VuZCBwYXN0IGJyZWFrYWdlIGluIGRlYmlhbi5iYmNsYXNzCitSUFJPVklERVNfZm9udGNvbmZpZy11dGlscyA9ICJsaWJmb250Y29uZmlnLXV0aWxzIgorUlJFUExBQ0VTX2ZvbnRjb25maWctdXRpbHMgPSAibGliZm9udGNvbmZpZy11dGlscyIKK1JDT05GTElDVFNfZm9udGNvbmZpZy11dGlscyA9ICJsaWJmb250Y29uZmlnLXV0aWxzIgorREVCSUFOX05PQVVUT05BTUVfZm9udGNvbmZpZy11dGlscyA9ICIxIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgcmVsYXRpdmVfc3ltbGlua3MKKworRk9OVENPTkZJR19DQUNIRV9ESVIgPz0gIiR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvZm9udGNvbmZpZyIKKworIyBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBhZGRpdGlvbmFsIGRpcmVjdG9yaWVzCisjIC91c3Ivc2hhcmUvZm9udHMgaXMgYWxyZWFkeSBpbmNsdWRlZCBieSBkZWZhdWx0ICh5b3UgY2FuIGNoYW5nZSBpdCB3aXRoIC0td2l0aC1kZWZhdWx0LWZvbnRzKQorRk9OVENPTkZJR19GT05UX0RJUlMgPz0gIm5vIgorCitFWFRSQV9PRUNPTkYgPSAiIC0tZGlzYWJsZS1kb2NzIC0td2l0aC1kZWZhdWx0LWZvbnRzPSR7ZGF0YWRpcn0vZm9udHMgLS13aXRoLWNhY2hlLWRpcj0ke0ZPTlRDT05GSUdfQ0FDSEVfRElSfSAtLXdpdGgtYWRkLWZvbnRzPSR7Rk9OVENPTkZJR19GT05UX0RJUlN9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZnJlZXR5cGUvZnJlZXR5cGVfMi43LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZyZWV0eXBlL2ZyZWV0eXBlXzIuNy4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDRmODM1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZnJlZXR5cGUvZnJlZXR5cGVfMi43LjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi1TVU1NQVJZID0gIkZyZWV0eXBlIGZvbnQgcmVuZGVyaW5nIGxpYnJhcnkiCi1ERVNDUklQVElPTiA9ICJGcmVlVHlwZSBpcyBhIHNvZnR3YXJlIGZvbnQgZW5naW5lIHRoYXQgaXMgZGVzaWduZWQgdG8gYmUgc21hbGwsIGVmZmljaWVudCwgXAotaGlnaGx5IGN1c3RvbWl6YWJsZSwgYW5kIHBvcnRhYmxlIHdoaWxlIGNhcGFibGUgb2YgcHJvZHVjaW5nIGhpZ2gtcXVhbGl0eSBvdXRwdXQgKGdseXBoIFwKLWltYWdlcykuIEl0IGNhbiBiZSB1c2VkIGluIGdyYXBoaWNzIGxpYnJhcmllcywgZGlzcGxheSBzZXJ2ZXJzLCBmb250IGNvbnZlcnNpb24gdG9vbHMsIHRleHQgXAotaW1hZ2UgZ2VuZXJhdGlvbiB0b29scywgYW5kIG1hbnkgb3RoZXIgcHJvZHVjdHMgYXMgd2VsbC4iCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWV0eXBlLm9yZy8iCi1CVUdUUkFDS0VSID0gImh0dHBzOi8vc2F2YW5uYWgubm9uZ251Lm9yZy9idWdzLz9ncm91cD1mcmVldHlwZSIKLVNFQ1RJT04gPSAibGlicyIKLQotTElDRU5TRSA9ICJGcmVlVHlwZSB8IEdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RvY3MvTElDRU5TRS5UWFQ7bWQ1PTRhZjYyMjE1MDZmMjAyNzc0ZWY3NGY2NDkzMjg3OGExIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RvY3MvRlRMLlRYVDttZDU9MTNiMjU0MTMyNzRjOWIzYjA5YjYzZTQwMjgyMTZmZjQgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZG9jcy9HUEx2Mi5UWFQ7bWQ1PThlZjM4MDQ3NmY2NDJjMjBlYmY0MGZlY2IwYWRkMmVjIgotCi1TUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9mcmVldHlwZS9mcmVldHlwZS0ke1BWfS50YXIuYnoyIFwKLSAgICAgICAgICAgZmlsZTovL3VzZS1yaWdodC1saWJ0b29sLnBhdGNoIgotCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9mcmVldHlwZS9maWxlcy9mcmVldHlwZTIvIgotVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiKD9QPHB2ZXI+XGQrKFwuXGQrKSspIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiYjMyMzAxMTBlMGNhYjc3N2UwZGY3NjMxODM3YWMzNmUiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2EzYmIyYzRlMTVmZmI0MzNmMjAzMmY1MGE1YjVhOTI1NTgyMDY4MjJlMjJiZmU4Y2JlMzM5YWY0YWE4MmY4OCIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGJpbmNvbmZpZy1kaXNhYmxlZCBtdWx0aWxpYl9oZWFkZXIKLQotIyBBZGFwdCBhdXRvdG9vbHMgdG8gd29yayB3aXRoIHRoZSBtaW5pbWFsIGF1dG9jb25mIHVzYWdlIGluIGZyZWV0eXBlCi1BVVRPVE9PTFNfU0NSSVBUX1BBVEggPSAiJHtTfS9idWlsZHMvdW5peCIKLUNPTkZJR1VSRV9TQ1JJUFQgPSAiJHtTfS9jb25maWd1cmUiCi1FWFRSQV9BVVRPUkVDT05GICs9ICItLWV4Y2x1ZGU9YXV0b2hlYWRlciAtLWV4Y2x1ZGU9YXV0b21ha2UiCi0KLVBBQ0tBR0VDT05GSUcgPz89ICJ6bGliIgotCi1QQUNLQUdFQ09ORklHW2J6aXAyXSA9ICItLXdpdGgtYnppcDIsLS13aXRob3V0LWJ6aXAyLGJ6aXAyIgotIyBoYXJmYnV6eiByZXN1bHRzIGluIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBzbyBlbmFibGluZyBpcyBub24tdHJpdmlhbAotUEFDS0FHRUNPTkZJR1toYXJmYnV6el0gPSAiLS13aXRoLWhhcmZidXp6LC0td2l0aG91dC1oYXJmYnV6eixoYXJmYnV6eiIKLVBBQ0tBR0VDT05GSUdbcGl4bWFwXSA9ICItLXdpdGgtcG5nLC0td2l0aG91dC1wbmcsbGlicG5nIgotUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLXdpdGgtemxpYiwtLXdpdGhvdXQtemxpYix6bGliIgotCi1FWFRSQV9PRUNPTkYgPSAiQ0NfQlVJTEQ9JyR7QlVJTERfQ0N9JyIKLQotVEFSR0VUX0NQUEZMQUdTICs9ICItRF9GSUxFX09GRlNFVF9CSVRTPTY0IgotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQlvZV9tdWx0aWxpYl9oZWFkZXIgZnJlZXR5cGUyL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oCi19Ci0KLUJJTkNPTkZJRyA9ICIke2JpbmRpcn0vZnJlZXR5cGUtY29uZmlnIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZyZWV0eXBlL2ZyZWV0eXBlXzIuOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZnJlZXR5cGUvZnJlZXR5cGVfMi44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlODhlODQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZyZWV0eXBlL2ZyZWV0eXBlXzIuOC5iYgpAQCAtMCwwICsxLDQ5IEBACitTVU1NQVJZID0gIkZyZWV0eXBlIGZvbnQgcmVuZGVyaW5nIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJGcmVlVHlwZSBpcyBhIHNvZnR3YXJlIGZvbnQgZW5naW5lIHRoYXQgaXMgZGVzaWduZWQgdG8gYmUgc21hbGwsIGVmZmljaWVudCwgXAoraGlnaGx5IGN1c3RvbWl6YWJsZSwgYW5kIHBvcnRhYmxlIHdoaWxlIGNhcGFibGUgb2YgcHJvZHVjaW5nIGhpZ2gtcXVhbGl0eSBvdXRwdXQgKGdseXBoIFwKK2ltYWdlcykuIEl0IGNhbiBiZSB1c2VkIGluIGdyYXBoaWNzIGxpYnJhcmllcywgZGlzcGxheSBzZXJ2ZXJzLCBmb250IGNvbnZlcnNpb24gdG9vbHMsIHRleHQgXAoraW1hZ2UgZ2VuZXJhdGlvbiB0b29scywgYW5kIG1hbnkgb3RoZXIgcHJvZHVjdHMgYXMgd2VsbC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWV0eXBlLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vc2F2YW5uYWgubm9uZ251Lm9yZy9idWdzLz9ncm91cD1mcmVldHlwZSIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJGcmVlVHlwZSB8IEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RvY3MvTElDRU5TRS5UWFQ7bWQ1PTRhZjYyMjE1MDZmMjAyNzc0ZWY3NGY2NDkzMjg3OGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RvY3MvRlRMLlRYVDttZDU9MTNiMjU0MTMyNzRjOWIzYjA5YjYzZTQwMjgyMTZmZjQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZG9jcy9HUEx2Mi5UWFQ7bWQ1PThlZjM4MDQ3NmY2NDJjMjBlYmY0MGZlY2IwYWRkMmVjIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9mcmVldHlwZS9mcmVldHlwZS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3VzZS1yaWdodC1saWJ0b29sLnBhdGNoIgorCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9mcmVldHlwZS9maWxlcy9mcmVldHlwZTIvIgorVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiKD9QPHB2ZXI+XGQrKFwuXGQrKSspIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjQxM2FjM2VhZjUwOGFkYTAxOWM2Mzk1OWVhODFhOTIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTNjNjAzZWQ4NGMzYzI0OTVmOWM5MzMxZmU2YmJhM2JiMGVlNjVlMDZlYzMzMWUwYTBmYjUyMTU4MjkxYjQwYiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGJpbmNvbmZpZy1kaXNhYmxlZCBtdWx0aWxpYl9oZWFkZXIKKworIyBBZGFwdCBhdXRvdG9vbHMgdG8gd29yayB3aXRoIHRoZSBtaW5pbWFsIGF1dG9jb25mIHVzYWdlIGluIGZyZWV0eXBlCitBVVRPVE9PTFNfU0NSSVBUX1BBVEggPSAiJHtTfS9idWlsZHMvdW5peCIKK0NPTkZJR1VSRV9TQ1JJUFQgPSAiJHtTfS9jb25maWd1cmUiCitFWFRSQV9BVVRPUkVDT05GICs9ICItLWV4Y2x1ZGU9YXV0b2hlYWRlciAtLWV4Y2x1ZGU9YXV0b21ha2UiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ6bGliIgorCitQQUNLQUdFQ09ORklHW2J6aXAyXSA9ICItLXdpdGgtYnppcDIsLS13aXRob3V0LWJ6aXAyLGJ6aXAyIgorIyBoYXJmYnV6eiByZXN1bHRzIGluIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBzbyBlbmFibGluZyBpcyBub24tdHJpdmlhbAorUEFDS0FHRUNPTkZJR1toYXJmYnV6el0gPSAiLS13aXRoLWhhcmZidXp6LC0td2l0aG91dC1oYXJmYnV6eixoYXJmYnV6eiIKK1BBQ0tBR0VDT05GSUdbcGl4bWFwXSA9ICItLXdpdGgtcG5nLC0td2l0aG91dC1wbmcsbGlicG5nIgorUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLXdpdGgtemxpYiwtLXdpdGhvdXQtemxpYix6bGliIgorCitFWFRSQV9PRUNPTkYgPSAiQ0NfQlVJTEQ9JyR7QlVJTERfQ0N9JyIKKworVEFSR0VUX0NQUEZMQUdTICs9ICItRF9GSUxFX09GRlNFVF9CSVRTPTY0IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlvZV9tdWx0aWxpYl9oZWFkZXIgZnJlZXR5cGUyL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oCit9CisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vZnJlZXR5cGUtY29uZmlnIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZzdGVzdHMvZnN0ZXN0c19naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZzdGVzdHMvZnN0ZXN0c19naXQuYmIKaW5kZXggOTVjMzNmNC4uOWUwOWNkMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mc3Rlc3RzL2ZzdGVzdHNfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZnN0ZXN0cy9mc3Rlc3RzX2dpdC5iYgpAQCAtOCw2ICs4LDcgQEAKIFBWID0gIjAuMStnaXQke1NSQ1BWfSIKIAogU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0iCitVUFNUUkVBTV9WRVJTSU9OX1VOS05PV04gPSAiMSIKIAogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vdGVzdC1wYW5nby1nZGsuYztlbmRsaW5lPTI0O21kNT0xZWU3NGVjODUxZWNkYTU3ZWI3YWM2Y2MxODBmNzY1NSIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXdfMi4wLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xld18yLjAuMC5iYgppbmRleCAxYzkzY2EwLi5mMmFiNzU2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xld18yLjAuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xld18yLjAuMC5iYgpAQCAtMjQsNiArMjQsNyBAQAogUEFDS0FHRUNPTkZJR1tvcGVuZ2xdID0gIlNZU1RFTT0nbGludXgnLCx2aXJ0dWFsL2xpYngxMSB2aXJ0dWFsL2xpYmdsIGxpYmdsdSBsaWJ4ZXh0IGxpYnhpIGxpYnhtdSIKIFBBQ0tBR0VDT05GSUdbZWdsLWdsZXMyXSA9ICJTWVNURU09J2xpbnV4LWVnbCcgR0xFV19OT19HTFU9Jy1ER0xFV19OT19HTFUnIExERkxBR1MuR0w9Jy1sRUdMIC1sR0xFU3YyJywsdmlydHVhbC9lZ2wgdmlydHVhbC9saWJnbGVzMiIKIAorQ0ZMQUdTICs9ICItRF9HTlVfU09VUkNFIgogIyBPdmVycmlkZSBTWVNURU0gKHZpYSBQQUNLQUdFQ09ORklHX0NPTkZBUkdTKSB0byBhdm9pZCBjYWxsaW5nIGNvbmZpZy5ndWVzcywKICMgd2UncmUgY3Jvc3MtY29tcGlsaW5nLiBQYXNzIG91ciBDRkxBR1MgdmlhIFBPUFQgYXMgdGhhdCdzIHRoZSBvcHRpbWlzYXRpb24KICMgdmFyaWFibGUgYW5kIHNhZmVseSBvdmVyd3JpdHRlbi4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaGFyZmJ1enovaGFyZmJ1enpfMS40LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2hhcmZidXp6L2hhcmZidXp6XzEuNC4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzQ3NzNlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaGFyZmJ1enovaGFyZmJ1enpfMS40LjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi1TVU1NQVJZID0gIlRleHQgc2hhcGluZyBsaWJyYXJ5IgotREVTQ1JJUFRJT04gPSAiSGFyZkJ1enogaXMgYW4gT3BlblR5cGUgdGV4dCBzaGFwaW5nIGVuZ2luZS4iCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL0hhcmZCdXp6IgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1IYXJmQnV6eiIKLVNFQ1RJT04gPSAibGlicyIKLUxJQ0VOU0UgPSAiTUlUIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTAyMWRkNmRkYTZmZjFlNmIxMDQ0MDAyZmM2NjJiOWIgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2hiLXVjZG4vQ09QWUlORzttZDU9OTk0YmEwZjEyOTVmMTViNGJkYTQ5OTlhNWJiZWRkZWYgXAotIgotCi1ERVBFTkRTID0gImdsaWItMi4wIGNhaXJvIGZvbnRjb25maWcgZnJlZXR5cGUiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvaGFyZmJ1enovcmVsZWFzZS8ke0JQfS50YXIuYnoyIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiN2IzZjQ0NWQwYTU4NDg1YTMxYzE4YzAzY2U5YjRlM2MiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiODVhMjdmYWI2MzlhMWQ2NTE3MzdkY2I2YjY5ZTQxMDFlM2ZkMDk1MjJmZGZkY2I3OTNkZjgxMGI1Y2IzMTViZCIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGxpYl9wYWNrYWdlIGd0ay1kb2MKLQotUEFDS0FHRUNPTkZJRyA/Pz0gImljdSIKLVBBQ0tBR0VDT05GSUdbaWN1XSA9ICItLXdpdGgtaWN1LC0td2l0aG91dC1pY3UsaWN1IgotCi1FWFRSQV9PRUNPTkYgPSAiIFwKLSAgICAtLXdpdGgtY2Fpcm8gXAotICAgIC0td2l0aC1mb250Y29uZmlnIFwKLSAgICAtLXdpdGgtZnJlZXR5cGUgXAotICAgIC0td2l0aC1nbGliIFwKLSAgICAtLXdpdGhvdXQtZ3JhcGhpdGUyIFwKLSIKLQotUEFDS0FHRVMgPSsgIiR7UE59LWljdSAke1BOfS1pY3UtZGV2IgotCi1GSUxFU18ke1BOfS1pY3UgPSAiJHtsaWJkaXJ9L2xpYmhhcmZidXp6LWljdS5zby4qIgotRklMRVNfJHtQTn0taWN1LWRldiA9ICIke2xpYmRpcn0vbGliaGFyZmJ1enotaWN1LmxhIFwKLSAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYmhhcmZidXp6LWljdS5zbyBcCi0gICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wa2djb25maWcvaGFyZmJ1enotaWN1LnBjIFwKLSIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2hhcmZidXp6L2hhcmZidXp6XzEuNC44LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9oYXJmYnV6ei9oYXJmYnV6el8xLjQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjVlNWEzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9oYXJmYnV6ei9oYXJmYnV6el8xLjQuOC5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIlRleHQgc2hhcGluZyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiSGFyZkJ1enogaXMgYW4gT3BlblR5cGUgdGV4dCBzaGFwaW5nIGVuZ2luZS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL0hhcmZCdXp6IgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1IYXJmQnV6eiIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTAyMWRkNmRkYTZmZjFlNmIxMDQ0MDAyZmM2NjJiOWIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2hiLXVjZG4vQ09QWUlORzttZDU9OTk0YmEwZjEyOTVmMTViNGJkYTQ5OTlhNWJiZWRkZWYgXAorIgorCitERVBFTkRTID0gImdsaWItMi4wIGNhaXJvIGZvbnRjb25maWcgZnJlZXR5cGUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvaGFyZmJ1enovcmVsZWFzZS8ke0JQfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDFhYTQ0NmUxZTY1NzE3MzExYzE1ZDlhYzBjZjMxZWUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2NlYzQ5MzBmZjBiYjJkMGM0MGFlZTIwMzA3NTQ0Nzk1NGI2NGE4YzI2OTUyMDI0MTNjYzVlNDI4YzkwNzEzMSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGxpYl9wYWNrYWdlIGd0ay1kb2MKKworUEFDS0FHRUNPTkZJRyA/Pz0gImljdSIKK1BBQ0tBR0VDT05GSUdbaWN1XSA9ICItLXdpdGgtaWN1LC0td2l0aG91dC1pY3UsaWN1IgorCitFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAtLXdpdGgtY2Fpcm8gXAorICAgIC0td2l0aC1mb250Y29uZmlnIFwKKyAgICAtLXdpdGgtZnJlZXR5cGUgXAorICAgIC0td2l0aC1nbGliIFwKKyAgICAtLXdpdGhvdXQtZ3JhcGhpdGUyIFwKKyIKKworUEFDS0FHRVMgPSsgIiR7UE59LWljdSAke1BOfS1pY3UtZGV2IgorCitGSUxFU18ke1BOfS1pY3UgPSAiJHtsaWJkaXJ9L2xpYmhhcmZidXp6LWljdS5zby4qIgorRklMRVNfJHtQTn0taWN1LWRldiA9ICIke2xpYmRpcn0vbGliaGFyZmJ1enotaWN1LmxhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYmhhcmZidXp6LWljdS5zbyBcCisgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wa2djb25maWcvaGFyZmJ1enotaWN1LnBjIFwKKyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2pwZWcvbGlianBlZy10dXJiby9maXgtbWlwcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvanBlZy9saWJqcGVnLXR1cmJvL2ZpeC1taXBzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDQxMjM3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvanBlZy9saWJqcGVnLXR1cmJvL2ZpeC1taXBzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotRml4IGEgcmVncmVzc2lvbiB0aGF0IGNhdXNlcyB0aGUgTUlQUyBjb2RlIGZyb20gYnVpbGRpbmcuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLVNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+Ci0KLUZyb20gN2JmYjIyYWYxMjNhYzEwNzk4YTlhNGM5ZWM3YjIzZTUwNjVkYjM1ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IERSQyA8aW5mb3JtYXRpb25AbGlianBlZy10dXJiby5vcmc+Ci1EYXRlOiBNb24sIDI2IFNlcCAyMDE2IDE3OjU5OjE0IC0wNTAwCi1TdWJqZWN0OiBbUEFUQ0hdIEZpeCBicm9rZW4gTUlQUyBidWlsZAotCi1SZWdyZXNzaW9uIGludHJvZHVjZWQgYnkgOTA1NWZiNDA4ZGNiNTg1Y2U5MzkyZDM5NWUxNjYzMGQ1MTAwMjE1MgotCi1GaXhlcyAjMTA0Ci0tLS0KLSBDaGFuZ2VMb2cubWQgICAgICB8IDMgKysrCi0gc2ltZC9qc2ltZF9taXBzLmMgfCAyICsrCi0gMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy5tZCBiL0NoYW5nZUxvZy5tZAotaW5kZXggZTJiOWRmMy4uNzFkZGNhYSAxMDA2NDQKLS0tLSBhL0NoYW5nZUxvZy5tZAotKysrIGIvQ2hhbmdlTG9nLm1kCi1AQCAtNiw2ICs2LDkgQEAKLSAxLiBGaXhlZCBhIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBieSAxLjUuMVs3XSB0aGF0IHByZXZlbnRlZCBsaWJqcGVnLXR1cmJvIGZyb20KLSBidWlsZGluZyB3aXRoIEFuZHJvaWQgTkRLIHBsYXRmb3JtcyBwcmlvciB0byBhbmRyb2lkLTIxICg1LjApLgotIAotKzIuIEZpeGVkIGEgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGJ5IDEuNS4xWzFdIHRoYXQgcHJldmVudGVkIHRoZSBNSVBTIERTUFIyIFNJTUQKLStjb2RlIGluIGxpYmpwZWctdHVyYm8gZnJvbSBidWlsZGluZy4KLSsKLSAKLSAxLjUuMQotID09PT09Ci1kaWZmIC0tZ2l0IGEvc2ltZC9qc2ltZF9taXBzLmMgYi9zaW1kL2pzaW1kX21pcHMuYwotaW5kZXggNjNiODExNS4uMDJlOTBjZCAxMDA2NDQKLS0tLSBhL3NpbWQvanNpbWRfbWlwcy5jCi0rKysgYi9zaW1kL2pzaW1kX21pcHMuYwotQEAgLTYzLDYgKzYzLDggQEAgcGFyc2VfcHJvY19jcHVpbmZvKGNvbnN0IGNoYXIqIHNlYXJjaF9zdHJpbmcpCi0gTE9DQUwodm9pZCkKLSBpbml0X3NpbWQgKHZvaWQpCi0gewotKyAgY2hhciAqZW52ID0gTlVMTDsKLSsKLSAgIGlmIChzaW1kX3N1cHBvcnQgIT0gfjBVKQotICAgICByZXR1cm47Ci0gCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2pwZWcvbGlianBlZy10dXJib18xLjUuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvanBlZy9saWJqcGVnLXR1cmJvXzEuNS4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTJlZWFmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvanBlZy9saWJqcGVnLXR1cmJvXzEuNS4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotU1VNTUFSWSA9ICJIYXJkd2FyZSBhY2NlbGVyYXRlZCBKUEVHIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gbGlicmFyeSIKLURFU0NSSVBUSU9OID0gImxpYmpwZWctdHVyYm8gaXMgYSBkZXJpdmF0aXZlIG9mIGxpYmpwZWcgdGhhdCB1c2VzIFNJTUQgaW5zdHJ1Y3Rpb25zIChNTVgsIFNTRTIsIE5FT04pIHRvIGFjY2VsZXJhdGUgYmFzZWxpbmUgSlBFRyBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiIKLUhPTUVQQUdFID0gImh0dHA6Ly9saWJqcGVnLXR1cmJvLm9yZy8iCi0KLUxJQ0VOU0UgPSAiQlNELTMtQ2xhdXNlIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vY2RqcGVnLmg7ZW5kbGluZT0xMzttZDU9MDViYWI3YzdhZDg5OWQ4NWJmYmE2MGRhMWExMjcxZjIgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vanBlZ2xpYi5oO2VuZGxpbmU9MTY7bWQ1PWY2N2Q3MGU1NDdhMjY2MmMwNzk3ODFjNzJmODc3ZjcyIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RqcGVnLmM7ZW5kbGluZT0xMTttZDU9YjkwYjZkMmI0MTE5ZjllNTgwN2NkMjczZjUyNWQyYWYgXAotIgotREVQRU5EU19hcHBlbmRfeDg2LTY0X2NsYXNzLXRhcmdldCA9ICIgbmFzbS1uYXRpdmUiCi1ERVBFTkRTX2FwcGVuZF94ODZfY2xhc3MtdGFyZ2V0ICAgID0gIiBuYXNtLW5hdGl2ZSIKLQotU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vZml4LW1pcHMucGF0Y2giCi1TUkNfVVJJW21kNXN1bV0gPSAiNTVkZWIxMzliMGNhYzNjODIwMGI3NWQ0ODVmYzEzZjMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDE0MjlkM2QyNTMwMTc0MzNmNjZlM2Q0NzJiOGM3ZDk5ODQ5MWQyZjQxY2FhNzMwNmI4ZDlhNmYyYTJjNjY2YyIKLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYmpwZWctdHVyYm8vZmlsZXMvIgotVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiL2xpYmpwZWctdHVyYm8vZmlsZXMvKD9QPHB2ZXI+KFxkK1tcLlwtX10qKSspLyIKLQotUEU9ICIxIgotCi0jIERyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIGpwZWcKLVBST1ZJREVTID0gImpwZWciCi1SUFJPVklERVNfJHtQTn0gKz0gImpwZWciCi1SUkVQTEFDRVNfJHtQTn0gKz0gImpwZWciCi1SQ09ORkxJQ1RTXyR7UE59ICs9ICJqcGVnIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKLQotIyBBZGQgbmFzbS1uYXRpdmUgZGVwZW5kZW5jeSBjb25zaXN0ZW50bHkgZm9yIGFsbCBidWlsZCBhcmNoZXMgaXMgaGFyZAotRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC0td2l0aG91dC1zaW1kIgotCi0jIFdvcmsgYXJvdW5kIG1pc3NpbmcgeDMyIEFCSSBzdXBwb3J0Ci1FWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICItLXdpdGhvdXQtc2ltZCIsICIiLCBkKX0iCi0KLSMgV29yayBhcm91bmQgbWlzc2luZyBub24tZmxvYXRpbmcgcG9pbnQgQUJJIHN1cHBvcnQgaW4gTUlQUwotRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNSVBTUEtHU0ZYX0ZQVSIsICItbmYiLCAiLS13aXRob3V0LXNpbWQiLCAiIiwgZCl9IgotCi0jIFByb3ZpZGUgYSB3b3JrYXJvdW5kIGlmIEFsdGl2ZWMgdW5pdCBpcyBub3QgcHJlc2VudCBpbiBQUEMKLUVYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtdGFyZ2V0X3Bvd2VycGMgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFsdGl2ZWMiLCAiIiwgIi0td2l0aG91dC1zaW1kIiwgZCl9IgotRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy10YXJnZXRfcG93ZXJwYzY0ID0gIiAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhbHRpdmVjIiwgIiIsICItLXdpdGhvdXQtc2ltZCIsIGQpfSIKLQotUEFDS0FHRVMgPSsgImpwZWctdG9vbHMgbGlidHVyYm9qcGVnIgotCi1ERVNDUklQVElPTl9qcGVnLXRvb2xzID0gIlRoZSBqcGVnLXRvb2xzIHBhY2thZ2UgaW5jbHVkZXMgY2xpZW50IHByb2dyYW1zIHRvIGFjY2VzcyBsaWJqcGVnIGZ1bmN0aW9uYWxpdHkuICBUaGVzZSB0b29scyBhbGxvdyBmb3IgdGhlIGNvbXByZXNzaW9uLCBkZWNvbXByZXNzaW9uLCB0cmFuc2Zvcm1hdGlvbiBhbmQgZGlzcGxheSBvZiBKUEVHIGZpbGVzIGFuZCBiZW5jaG1hcmtpbmcgb2YgdGhlIGxpYmpwZWcgbGlicmFyeS4iCi1GSUxFU19qcGVnLXRvb2xzID0gIiR7YmluZGlyfS8qIgotCi1ERVNDUklQVElPTl9saWJ0dXJib2pwZWcgPSAiQSBTSU1ELWFjY2VsZXJhdGVkIEpQRUcgY29kZWMgd2hpY2ggcHJvdmlkZXMgb25seSBUdXJib0pQRUcgQVBJcyIKLUZJTEVTX2xpYnR1cmJvanBlZyA9ICIke2xpYmRpcn0vbGlidHVyYm9qcGVnLnNvLioiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9qcGVnL2xpYmpwZWctdHVyYm9fMS41LjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2pwZWcvbGlianBlZy10dXJib18xLjUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODY0NmQzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9qcGVnL2xpYmpwZWctdHVyYm9fMS41LjIuYmIKQEAgLTAsMCArMSw1MSBAQAorU1VNTUFSWSA9ICJIYXJkd2FyZSBhY2NlbGVyYXRlZCBKUEVHIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gImxpYmpwZWctdHVyYm8gaXMgYSBkZXJpdmF0aXZlIG9mIGxpYmpwZWcgdGhhdCB1c2VzIFNJTUQgaW5zdHJ1Y3Rpb25zIChNTVgsIFNTRTIsIE5FT04pIHRvIGFjY2VsZXJhdGUgYmFzZWxpbmUgSlBFRyBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly9saWJqcGVnLXR1cmJvLm9yZy8iCisKK0xJQ0VOU0UgPSAiQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vY2RqcGVnLmg7ZW5kbGluZT0xMzttZDU9MDViYWI3YzdhZDg5OWQ4NWJmYmE2MGRhMWExMjcxZjIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vanBlZ2xpYi5oO2VuZGxpbmU9MTY7bWQ1PWY2N2Q3MGU1NDdhMjY2MmMwNzk3ODFjNzJmODc3ZjcyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RqcGVnLmM7ZW5kbGluZT0xMTttZDU9YjkwYjZkMmI0MTE5ZjllNTgwN2NkMjczZjUyNWQyYWYgXAorIgorREVQRU5EU19hcHBlbmRfeDg2LTY0X2NsYXNzLXRhcmdldCA9ICIgbmFzbS1uYXRpdmUiCitERVBFTkRTX2FwcGVuZF94ODZfY2xhc3MtdGFyZ2V0ICAgID0gIiBuYXNtLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2YjQ5MjNlMjk3YTdlYWEyNTVmMDg1MTEwMTdhODgxOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5MDk4OTQzYjI3MDM4ODcyN2FlNjFkZTgyYWRlYzczY2Y5ZjBkYmIyNDBiM2JjOGIxNzI1OTVlYmY0MDViNTI4IgorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGlianBlZy10dXJiby9maWxlcy8iCitVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICIvbGlianBlZy10dXJiby9maWxlcy8oP1A8cHZlcj4oXGQrW1wuXC1fXSopKykvIgorCitQRT0gIjEiCisKKyMgRHJvcC1pbiByZXBsYWNlbWVudCBmb3IganBlZworUFJPVklERVMgPSAianBlZyIKK1JQUk9WSURFU18ke1BOfSArPSAianBlZyIKK1JSRVBMQUNFU18ke1BOfSArPSAianBlZyIKK1JDT05GTElDVFNfJHtQTn0gKz0gImpwZWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCisjIEFkZCBuYXNtLW5hdGl2ZSBkZXBlbmRlbmN5IGNvbnNpc3RlbnRseSBmb3IgYWxsIGJ1aWxkIGFyY2hlcyBpcyBoYXJkCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgLS13aXRob3V0LXNpbWQiCisKKyMgV29yayBhcm91bmQgbWlzc2luZyB4MzIgQUJJIHN1cHBvcnQKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIi0td2l0aG91dC1zaW1kIiwgIiIsIGQpfSIKKworIyBXb3JrIGFyb3VuZCBtaXNzaW5nIG5vbi1mbG9hdGluZyBwb2ludCBBQkkgc3VwcG9ydCBpbiBNSVBTCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIk1JUFNQS0dTRlhfRlBVIiwgIi1uZiIsICItLXdpdGhvdXQtc2ltZCIsICIiLCBkKX0iCisKKyMgUHJvdmlkZSBhIHdvcmthcm91bmQgaWYgQWx0aXZlYyB1bml0IGlzIG5vdCBwcmVzZW50IGluIFBQQworRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy10YXJnZXRfcG93ZXJwYyA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYWx0aXZlYyIsICIiLCAiLS13aXRob3V0LXNpbWQiLCBkKX0iCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLXRhcmdldF9wb3dlcnBjNjQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFsdGl2ZWMiLCAiIiwgIi0td2l0aG91dC1zaW1kIiwgZCl9IgorCitQQUNLQUdFUyA9KyAianBlZy10b29scyBsaWJ0dXJib2pwZWciCisKK0RFU0NSSVBUSU9OX2pwZWctdG9vbHMgPSAiVGhlIGpwZWctdG9vbHMgcGFja2FnZSBpbmNsdWRlcyBjbGllbnQgcHJvZ3JhbXMgdG8gYWNjZXNzIGxpYmpwZWcgZnVuY3Rpb25hbGl0eS4gIFRoZXNlIHRvb2xzIGFsbG93IGZvciB0aGUgY29tcHJlc3Npb24sIGRlY29tcHJlc3Npb24sIHRyYW5zZm9ybWF0aW9uIGFuZCBkaXNwbGF5IG9mIEpQRUcgZmlsZXMgYW5kIGJlbmNobWFya2luZyBvZiB0aGUgbGlianBlZyBsaWJyYXJ5LiIKK0ZJTEVTX2pwZWctdG9vbHMgPSAiJHtiaW5kaXJ9LyoiCisKK0RFU0NSSVBUSU9OX2xpYnR1cmJvanBlZyA9ICJBIFNJTUQtYWNjZWxlcmF0ZWQgSlBFRyBjb2RlYyB3aGljaCBwcm92aWRlcyBvbmx5IFR1cmJvSlBFRyBBUElzIgorRklMRVNfbGlidHVyYm9qcGVnID0gIiR7bGliZGlyfS9saWJ0dXJib2pwZWcuc28uKiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ttc2N1YmUva21zY3ViZV9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ttc2N1YmUva21zY3ViZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FiNjhmZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mva21zY3ViZS9rbXNjdWJlX2dpdC5iYgpAQCAtMCwwICsxLDE3IEBACitERVNDUklQVElPTiA9ICJEZW1vIGFwcGxpY2F0aW9uIHRvIHNob3djYXNlIDNEIGdyYXBoaWNzIHVzaW5nIGttcyBhbmQgZ2JtIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9tZXNhL2ttc2N1YmUvIgorTElDRU5TRSA9ICJNSVQiCitTRUNUSU9OID0gImdyYXBoaWNzIgorREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYmdsZXMyIHZpcnR1YWwvZWdsIGxpYmRybSBnc3RyZWFtZXIxLjAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8va21zY3ViZS5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjM7bWQ1PThiMzA5ZDRlZTY3YjczMTVmZjczODEyNzBkZDYzMWZiIgorCitTUkNSRVYgPSAiMGQ4ZGU0Y2UzYTAzZjM2YWYxODE3ZjliMDU4NmQxMzJhZDJjNWQyZSIKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvbWVzYS9rbXNjdWJlO2JyYW5jaD1tYXN0ZXI7cHJvdG9jb2w9Z2l0IgorVVBTVFJFQU1fVkVSU0lPTl9VTktOT1dOID0gIjEiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIm9wZW5nbCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHkvQWRkLWZhbGxiYWNrLWRlZmluaXRpb24tZm9yLUVHTC1DQVNULnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eS9BZGQtZmFsbGJhY2stZGVmaW5pdGlvbi1mb3ItRUdMLUNBU1QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkyOTcyNQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHkvQWRkLWZhbGxiYWNrLWRlZmluaXRpb24tZm9yLUVHTC1DQVNULnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0FkZCBmYWxsYmFjayBkZWZpbml0aW9uIGZvciBFR0xfQ0FTVAorCitUaGUgRUdMIEFQSSB1cGRhdGUgZnJvbSBkMTExMDRmIGludHJvZHVjZWQgYSBkZXBlbmRlbmN5IG9uIHRoZQorRUdMX0NBU1QoKSBtYWNybywgcHJvdmlkZWQgYnkgYW4gdXBkYXRlZCBlZ2xwbGF0Zm9ybS5oLiBHaXZlbiB0aGF0IHdlCitkb24ndCBwcm92aWRlIGVnbHBsYXRmb3JtLmgsIGFkZCBhIGZhbGxiYWNrIGRlZmluaXRpb24gZm9yIGlmIHdlJ3JlCitidWlsZGluZyBhZ2FpbnN0IE1lc2EgMTcuMC54IG9yIHNpbWlsYXIuCisKK2h0dHBzOi8vYnVncy5nZW50b28ub3JnL3Nob3dfYnVnLmNnaT9pZD02MjM5MjYKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbaHR0cHM6Ly9naXRodWIuY29tL2FuaG9sdC9saWJlcG94eS9jb21taXQvZWJlM2E1M2RiMWMwYmIzNGUxY2E5NjNiOTVkMWYyMjIxMTVmOTNmOF0KKworU2lnbmVkLW9mZi1ieTogVG9tIEhvY2hzdGVpbiA8dG9tLmhvY2hzdGVpbkBueHAuY29tPgorCitJbmRleDogbGliZXBveHktMS40LjMvc3JjL2dlbl9kaXNwYXRjaC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmVwb3h5LTEuNC4zLm9yaWcvc3JjL2dlbl9kaXNwYXRjaC5weQkyMDE3LTA2LTA2IDA0OjI0OjEzLjAwMDAwMDAwMCAtMDUwMAorKysrIGxpYmVwb3h5LTEuNC4zL3NyYy9nZW5fZGlzcGF0Y2gucHkJMjAxNy0xMS0wNiAxMjo0NTo0My41OTQ5NjY0NzMgLTA2MDAKK0BAIC00OTEsNiArNDkxLDE1IEBACisgICAgICAgICAgICAgc2VsZi5vdXRsbignI2luY2x1ZGUgImVwb3h5L2dsLmgiJykKKyAgICAgICAgICAgICBpZiBzZWxmLnRhcmdldCA9PSAiZWdsIjoKKyAgICAgICAgICAgICAgICAgc2VsZi5vdXRsbignI2luY2x1ZGUgIkVHTC9lZ2xwbGF0Zm9ybS5oIicpCisrICAgICAgICAgICAgICAgICMgQWNjb3VudCBmb3Igb2xkZXIgZWdscGxhdGZvcm0uaCwgd2hpY2ggZG9lc24ndCBkZWZpbmUKKysgICAgICAgICAgICAgICAgIyB0aGUgRUdMX0NBU1QgbWFjcm8uCisrICAgICAgICAgICAgICAgIHNlbGYub3V0bG4oJyNpZm5kZWYgRUdMX0NBU1QnKQorKyAgICAgICAgICAgICAgICBzZWxmLm91dGxuKCcjaWYgZGVmaW5lZChfX2NwbHVzcGx1cyknKQorKyAgICAgICAgICAgICAgICBzZWxmLm91dGxuKCcjZGVmaW5lIEVHTF9DQVNUKHR5cGUsIHZhbHVlKSAoc3RhdGljX2Nhc3Q8dHlwZT4odmFsdWUpKScpCisrICAgICAgICAgICAgICAgIHNlbGYub3V0bG4oJyNlbHNlJykKKysgICAgICAgICAgICAgICAgc2VsZi5vdXRsbignI2RlZmluZSBFR0xfQ0FTVCh0eXBlLCB2YWx1ZSkgKCh0eXBlKSAodmFsdWUpKScpCisrICAgICAgICAgICAgICAgIHNlbGYub3V0bG4oJyNlbmRpZicpCisrICAgICAgICAgICAgICAgIHNlbGYub3V0bG4oJyNlbmRpZicpCisgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICMgQWRkIHNvbWUgcmlkaWN1bG91cyBpbnR0eXBlcy5oIHJlZGVmaW5pdGlvbnMgdGhhdCBhcmUKKyAgICAgICAgICAgICAjIGZyb20ga2hycGxhdGZvcm0uaCBhbmQgbm90IGluY2x1ZGVkIGluIHRoZSBYTUwuICBXZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eV8xLjQuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHlfMS40LjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlOWY2OTQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eV8xLjQuMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLVNVTU1BUlkgPSAiT3BlbkdMIGZ1bmN0aW9uIHBvaW50ZXIgbWFuYWdlbWVudCBsaWJyYXJ5IgotSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL2FuaG9sdC9saWJlcG94eS8iCi1TRUNUSU9OID0gImxpYnMiCi0KLUxJQ0VOU0UgPSAiTUlUIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NThlZjRjODBkNDAxZTA3YmQ5ZWU4YjZiNThjZjQ2NGIiCi0KLVNSQ19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL2FuaG9sdC8ke0JQTn0vcmVsZWFzZXMvZG93bmxvYWQvdjEuNC8ke0JQfS50YXIueHoiCi1TUkNfVVJJW21kNXN1bV0gPSAiZDhkOGNiZjJiZWI2NDk3NWQ0MjRmY2M1MTY3YTJhMzgiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjVhOTA2YjE0YTkyMWJjMmI0ODhjZmVhYTIxYTAwNDg2ZmU5MjYzMGU0YTlkZDM0NmU0ZWNhYmVhZTUyYWI0MSIKLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vYW5ob2x0L2xpYmVwb3h5L3JlbGVhc2VzIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCi0KLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJvcGVuZ2wiCi0KLURFUEVORFMgPSAidXRpbC1tYWNyb3MgdmlydHVhbC9lZ2wiCi0KLVBBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS1nbHgsIC0tZGlzYWJsZS1nbHgsIHZpcnR1YWwvbGlieDExIgotUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmZpbHRlcignRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsIGQpfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHlfMS40LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5XzEuNC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNzIzMjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5XzEuNC4zLmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiT3BlbkdMIGZ1bmN0aW9uIHBvaW50ZXIgbWFuYWdlbWVudCBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL2FuaG9sdC9saWJlcG94eS8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NThlZjRjODBkNDAxZTA3YmQ5ZWU4YjZiNThjZjQ2NGIiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL2FuaG9sdC8ke0JQTn0vcmVsZWFzZXMvZG93bmxvYWQvJHtQVn0vJHtCUH0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL0FkZC1mYWxsYmFjay1kZWZpbml0aW9uLWZvci1FR0wtQ0FTVC5wYXRjaCIKK1NSQ19VUklbbWQ1c3VtXSA9ICJhZjRjM2NlMGZiMTE0M2JkYzRlNDNmODU2OTVhOWJlZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwYjgwOGEwNmM5Njg1YTYyZmNhMzRiNjgwYWJiOGJjN2ZiMmZkYTA3NDQ3OGUzMjliMDYzYzFmODcyYjgyNmY2IgorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS9hbmhvbHQvbGliZXBveHkvcmVsZWFzZXMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIm9wZW5nbCIKKworREVQRU5EUyA9ICJ1dGlsLW1hY3JvcyIKKworUEFDS0FHRUNPTkZJR1tlZ2xdID0gIi0tZW5hYmxlLWVnbCwgLS1kaXNhYmxlLWVnbCwgdmlydHVhbC9lZ2wiCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUtZ2x4LCAtLWRpc2FibGUtZ2x4LCB2aXJ0dWFsL2xpYngxMSIKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5maWx0ZXIoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCBkKX0gZWdsIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJmYWtla2V5L2xpYmZha2VrZXlfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJmYWtla2V5L2xpYmZha2VrZXlfZ2l0LmJiCmluZGV4IGM2MGRkZWEuLjRiODAzZGIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZmFrZWtleS9saWJmYWtla2V5X2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmZha2VrZXkvbGliZmFrZWtleV9naXQuYmIKQEAgLTEwLDggKzEwLDggQEAKIERFUEVORFMgPSAibGlieHRzdCIKIFNFQ1RJT04gPSAieDExL3dtIgogCi1TUkNSRVYgPSAiZTMyN2ZmMDQ5Yjg1MDNhZjJkYWRmZmE4NDM3MGEwODYwYjlmYjY4MiIKLVBWID0gIjAuMCtnaXQke1NSQ1BWfSIKK1NSQ1JFViA9ICI3YWQ4ODU5MTJlZmIyMTMxZTgwOTE0ZTk2NGQ1ZTYzNWIwZDA3YjQwIgorUFYgPSAiMC4zK2dpdCR7U1JDUFZ9IgogCiBTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsLTEuMi4xNS8wMDAxLWJ1aWxkLVBhc3MtdGFnLUNDLWV4cGxpY3RseS13aGVuLXVzaW5nLWxpYnRvb2wucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGwtMS4yLjE1LzAwMDEtYnVpbGQtUGFzcy10YWctQ0MtZXhwbGljdGx5LXdoZW4tdXNpbmctbGlidG9vbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzhjMGZkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsLTEuMi4xNS8wMDAxLWJ1aWxkLVBhc3MtdGFnLUNDLWV4cGxpY3RseS13aGVuLXVzaW5nLWxpYnRvb2wucGF0Y2gKQEAgLTAsMCArMSw3MyBAQAorRnJvbSA0NGU0YmI0Y2ZiODEwMjRjOGY1ZmQyZTE3OWU4YTMyYzQyNzU2YTJmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMjMgSnVsIDIwMTcgMTY6NTI6NDMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gYnVpbGQ6IFBhc3MgLS10YWc9Q0MgZXhwbGljdGx5IHdoZW4gdXNpbmcgbGlidG9vbAorCitEbyBub3QgZGVwZW5kIHNvbGVseSBvbiBsaWJ0b29sIGhldXJpc3RpY3Mgd2hpY2ggZmFpbAoraW4gT0UgY2FzZSB3aGVuIGJ1aWxkaW5nIHdpdGggZXh0ZXJuYWwgY29tcGlsZXIgYW5kCitoYXJkZW5pbmcgZmxhZ3MKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBNYWtlZmlsZS5pbiAgICAgICAgICAgICAgfCA0ICsrLS0KKyBidWlsZC1zY3JpcHRzL21ha2VkZXAuc2ggfCA4ICsrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCBhYjUxMDM1Li43NDNjZTMwIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNzIsMTAgKzcyLDEwIEBAIGRlcGVuZDoKKyBpbmNsdWRlICQoZGVwZW5kKQorIAorICQob2JqZWN0cykvJChUQVJHRVQpOiAkKE9CSkVDVFMpCistCSQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDQykgLW8gJEAgJF4gJChMREZMQUdTKSAkKEVYVFJBX0xERkxBR1MpICQoTFRfTERGTEFHUykKKysJJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9bGluayAkKENDKSAtbyAkQCAkXiAkKExERkxBR1MpICQoRVhUUkFfTERGTEFHUykgJChMVF9MREZMQUdTKQorIAorICQob2JqZWN0cykvJChTRExNQUlOX1RBUkdFVCk6ICQoU0RMTUFJTl9PQkpFQ1RTKQorLQkkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpIC1vICRAICReICQoTERGTEFHUykgJChFWFRSQV9MREZMQUdTKSAkKExUX0xERkxBR1MpICQoU0RMTUFJTl9MREZMQUdTKQorKwkkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1saW5rICQoQ0MpIC1vICRAICReICQoTERGTEFHUykgJChFWFRSQV9MREZMQUdTKSAkKExUX0xERkxBR1MpICQoU0RMTUFJTl9MREZMQUdTKQorIAorIAorIGluc3RhbGw6IGFsbCBpbnN0YWxsLWJpbiBpbnN0YWxsLWhkcnMgaW5zdGFsbC1saWIgaW5zdGFsbC1kYXRhIGluc3RhbGwtbWFuCitkaWZmIC0tZ2l0IGEvYnVpbGQtc2NyaXB0cy9tYWtlZGVwLnNoIGIvYnVpbGQtc2NyaXB0cy9tYWtlZGVwLnNoCitpbmRleCAzYjM4NjNiLi5kYmEyOGYyIDEwMDc1NQorLS0tIGEvYnVpbGQtc2NyaXB0cy9tYWtlZGVwLnNoCisrKysgYi9idWlsZC1zY3JpcHRzL21ha2VkZXAuc2gKK0BAIC01MSwxOSArNTEsMTkgQEAgZG8gIGVjaG8gIkdlbmVyYXRpbmcgZGVwZW5kZW5jaWVzIGZvciAkc3JjIgorICAgICBjYXNlICRleHQgaW4KKyAgICAgICAgIGMpIGNhdCA+PiR7b3V0cHV0fS5uZXcgPDxfX0VPRl9fCisgCistCVwkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlIFwkKENDKSBcJChDRkxBR1MpIFwkKEVYVFJBX0NGTEFHUykgLWMgJHNyYyAgLW8gXCRACisrCVwkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlIFwkKENDKSBcJChDRkxBR1MpIFwkKEVYVFJBX0NGTEFHUykgLWMgJHNyYyAgLW8gXCRACisgCisgX19FT0ZfXworICAgICAgICAgOzsKKyAgICAgICAgIGNjKSBjYXQgPj4ke291dHB1dH0ubmV3IDw8X19FT0ZfXworIAorLQlcJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSBcJChDQykgXCQoQ0ZMQUdTKSBcJChFWFRSQV9DRkxBR1MpIC1jICRzcmMgIC1vIFwkQAorKwlcJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSBcJChDQykgXCQoQ0ZMQUdTKSBcJChFWFRSQV9DRkxBR1MpIC1jICRzcmMgIC1vIFwkQAorIAorIF9fRU9GX18KKyAgICAgICAgIDs7CisgICAgICAgICBtKSBjYXQgPj4ke291dHB1dH0ubmV3IDw8X19FT0ZfXworIAorLQlcJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSBcJChDQykgXCQoQ0ZMQUdTKSBcJChFWFRSQV9DRkxBR1MpIC1jICRzcmMgIC1vIFwkQAorKwlcJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSBcJChDQykgXCQoQ0ZMQUdTKSBcJChFWFRSQV9DRkxBR1MpIC1jICRzcmMgIC1vIFwkQAorIAorIF9fRU9GX18KKyAgICAgICAgIDs7CitAQCAtNzUsNyArNzUsNyBAQCBfX0VPRl9fCisgICAgICAgICA7OworICAgICAgICAgUykgY2F0ID4+JHtvdXRwdXR9Lm5ldyA8PF9fRU9GX18KKyAKKy0JXCQoTElCVE9PTCkgIC0tbW9kZT1jb21waWxlIFwkKENDKSBcJChDRkxBR1MpIFwkKEVYVFJBX0NGTEFHUykgLWMgJHNyYyAgLW8gXCRACisrCVwkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlIFwkKENDKSBcJChDRkxBR1MpIFwkKEVYVFJBX0NGTEFHUykgLWMgJHNyYyAgLW8gXCRACisgCisgX19FT0ZfXworICAgICAgICAgOzsKKy0tIAorMi4xMy4zCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbF8xLjIuMTUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGxfMS4yLjE1LmJiCmluZGV4IGM4MDJhNmYuLjM2ODBlYTkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbF8xLjIuMTUuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsXzEuMi4xNS5iYgpAQCAtMTcsNiArMTcsNyBAQAogU1JDX1VSSSA9ICJodHRwOi8vd3d3LmxpYnNkbC5vcmcvcmVsZWFzZS9TREwtJHtQVn0udGFyLmd6IFwKICAgICAgICAgICAgZmlsZTovL2xpYnNkbC0xLjIuMTUteGRhdGEzMi5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1idWlsZC1QYXNzLXRhZy1DQy1leHBsaWN0bHktd2hlbi11c2luZy1saWJ0b29sLnBhdGNoIFwKICAgICAgICAgICAiCiAKIFVQU1RSRUFNX0NIRUNLX1JFR0VYID0gIlNETC0oP1A8cHZlcj5cZCsoXC5cZCspKylcLnRhciIKQEAgLTUzLDYgKzU0LDEwIEBACiBQQUNLQUdFQ09ORklHW29wZW5nbF0gPSAiLS1lbmFibGUtdmlkZW8tb3BlbmdsLCAtLWRpc2FibGUtdmlkZW8tb3BlbmdsLCB2aXJ0dWFsL2xpYmdsIGxpYmdsdSIKIFBBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS12aWRlby14MTEgLS1kaXNhYmxlLXgxMS1zaGFyZWQsIC0tZGlzYWJsZS12aWRlby14MTEsIHZpcnR1YWwvbGlieDExIGxpYnhleHQgbGlieHJhbmRyIGxpYnhyZW5kZXIiCiAKKyMgVGhlIGZvbGxvd2luZyB0d28gb3B0aW9ucyBzaG91bGQgb25seSBlbmFibGVkIHdpdGggbWluZ3cgc3VwcG9ydAorUEFDS0FHRUNPTkZJR1tzdGRpby1yZWRpcmVjdF0gPSAiLS1lbmFibGUtc3RkaW8tcmVkaXJlY3QsLS1kaXNhYmxlLXN0ZGlvLXJlZGlyZWN0IgorUEFDS0FHRUNPTkZJR1tkaXJlY3R4XSA9ICItLWVuYWJsZS1kaXJlY3R4LC0tZGlzYWJsZS1kaXJlY3R4IgorCiBFWFRSQV9BVVRPUkVDT05GICs9ICItLWluY2x1ZGU9YWNpbmNsdWRlIC0tZXhjbHVkZT1hdXRvaGVhZGVyIgogCiBkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlidmEvZmlsZXMvMDAwMS1jb25maWd1cmUuYWMtVXNlLXdheWxhbmQtc2Nhbm5lci1pbi1QQVRILnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ2YS9maWxlcy8wMDAxLWNvbmZpZ3VyZS5hYy1Vc2Utd2F5bGFuZC1zY2FubmVyLWluLVBBVEgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5OWMyMjUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ2YS9maWxlcy8wMDAxLWNvbmZpZ3VyZS5hYy1Vc2Utd2F5bGFuZC1zY2FubmVyLWluLVBBVEgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi1Gcm9tIDBhZjMwNjAyNTAyMDM1MTU1OTI5ZGQyYTE0NDgyYjgyYTk3NDdjZjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgotRGF0ZTogVGh1LCAyMyBGZWIgMjAxNyAxNToyMzoxNSArMDIwMAotU3ViamVjdDogW1BBVENIXSBjb25maWd1cmUuYWM6IFVzZSB3YXlsYW5kLXNjYW5uZXIgaW4gUEFUSAotCi1wa2ctY29uZmlnIHdpbGwgZ2l2ZSB1cyB0aGUgd3Jvbmcgd2F5bGFuZC1zY2FubmVyIGxvY2F0aW9uLgotVXNlIHRoZSBvbmUgaW4gcGF0aCBpbnN0ZWFkOiBpdCB3aWxsIGJlIGZyb20gbmF0aXZlIHN5c3Jvb3QuCi0KLVRoaXMgaXMgYSB3b3JrYXJvdW5kIGFuZCBzaG91bGQgYmUgZml4ZWQgdXBzdHJlYW06IHByZWZlcmFibHkKLXdpdGggdGhlIHNhbWUgZml4IGFzIGFsbCB0aGUgb3RoZXIgd2F5bGFuZC1zY2FubmVyIHVzZXJzCi0oc2VlIFlPQ1RPICMxMTEwMCkuCi0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbd29ya2Fyb3VuZF0KLVNpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+Ci0tLS0KLSBjb25maWd1cmUuYWMgfCA1ICstLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCA0IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCA2NGVkZGYyLi41NTM2ZjM1IDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC0yNzMsMTAgKzI3Myw3IEBAIGlmIHRlc3QgIiRlbmFibGVfd2F5bGFuZCIgPSAieWVzIjsgdGhlbgotICAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhbV0FZTEFORF0sIFt3YXlsYW5kLWNsaWVudCA+PSB3YXlsYW5kX2FwaV92ZXJzaW9uXSwKLSAgICAgICAgIFtVU0VfV0FZTEFORD0ieWVzIl0sIFs6XSkKLSAgICAgaWYgdGVzdCAiJFVTRV9XQVlMQU5EIiA9ICJ5ZXMiOyB0aGVuCi0tCi0tICAgICAgICBXQVlMQU5EX1BSRUZJWD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1wcmVmaXggd2F5bGFuZC1jbGllbnRgCi0tICAgICAgICBBQ19QQVRIX1BST0coW1dBWUxBTkRfU0NBTk5FUl0sIFt3YXlsYW5kLXNjYW5uZXJdLCwKLS0gICAgICAgICAgICAgICAgICAgICBbJHtXQVlMQU5EX1BSRUZJWH0vYmluJFBBVEhfU0VQQVJBVE9SJFBBVEhdKQotKyAgICAgICAgQUNfUEFUSF9QUk9HKFtXQVlMQU5EX1NDQU5ORVJdLCBbd2F5bGFuZC1zY2FubmVyXSkKLSAKLSAgICAgICAgIEFDX0RFRklORShbSEFWRV9WQV9XQVlMQU5EXSwgWzFdLAotICAgICAgICAgICAgICAgICAgIFtEZWZpbmVkIHRvIDEgaWYgVkEvV2F5bGFuZCBBUEkgaXMgYnVpbHRdKQotLS0gCi0yLjEuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnZhL2ZpbGVzLzAwMDEtd2F5bGFuZC1Eb24tdC1jb21taXQtYW5kLXNoaXAtZ2VuZXJhdGVkLWZpbGVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ2YS9maWxlcy8wMDAxLXdheWxhbmQtRG9uLXQtY29tbWl0LWFuZC1zaGlwLWdlbmVyYXRlZC1maWxlcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ5N2UyMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnZhL2ZpbGVzLzAwMDEtd2F5bGFuZC1Eb24tdC1jb21taXQtYW5kLXNoaXAtZ2VuZXJhdGVkLWZpbGVzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzM5ICswLDAgQEAKLUZyb20gNTk5M2E3NzEwY2M4ZmQ5YTM5MmQ1MDE1YmU1MTA5OTg3YTQyYjQ5OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+Ci1EYXRlOiBUaHUsIDIzIEZlYiAyMDE3IDE2OjEwOjA5ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0hdIHdheWxhbmQ6IERvbid0IGNvbW1pdCBhbmQgc2hpcCBnZW5lcmF0ZWQgZmlsZXMKLQotSSBiZWxpZXZlIHNoaXBwaW5nIHdheWxhbmQtZHJtLWNsaWVudC1wcm90b2NvbC5oIGlzIHdyb25nOiBUaGUgaGVhZGVyCi1zaG91bGQgYWx3YXlzIGJlIGdlbmVyYXRlZCBieSB0aGUgd2F5bGFuZC1zY2FubmVyIHRoYXQgbWF0Y2hlcyB0aGUKLXJ1bnRpbWUgd2F5bGFuZCB2ZXJzaW9uLiBDdXJyZW50bHkgd2hlbiBzb21lb25lIGNsb25lcyB0aGUgcmVwbyBhbmQKLWJ1aWxkcywgdGhlIHNoaXBwZWQgdmVyc2lvbiBpcyB1c2VkLgotCi1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tLzAxb3JnL2xpYnZhL3B1bGwvMzNdCi1TaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgotLS0tCi0gdmEvd2F5bGFuZC9NYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICB8ICAgNSArLQotIHZhL3dheWxhbmQvd2F5bGFuZC1kcm0tY2xpZW50LXByb3RvY29sLmggfCAyOTAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAyOTEgZGVsZXRpb25zKC0pCi0gZGVsZXRlIG1vZGUgMTAwNjQ0IHZhL3dheWxhbmQvd2F5bGFuZC1kcm0tY2xpZW50LXByb3RvY29sLmgKLQotZGlmZiAtLWdpdCBhL3ZhL3dheWxhbmQvTWFrZWZpbGUuYW0gYi92YS93YXlsYW5kL01ha2VmaWxlLmFtCi1pbmRleCA0ZjgyNjJjLi40YWI4ZDA3IDEwMDY0NAotLS0tIGEvdmEvd2F5bGFuZC9NYWtlZmlsZS5hbQotKysrIGIvdmEvd2F5bGFuZC9NYWtlZmlsZS5hbQotQEAgLTUzLDcgKzUzLDcgQEAgcHJvdG9jb2xfc291cmNlX2ggPSBcCi0gbm9pbnN0X0xUTElCUkFSSUVTCQk9IGxpYnZhX3dheWxhbmQubGEKLSBsaWJ2YV93YXlsYW5kaW5jbHVkZWRpcgkJPSAke2luY2x1ZGVkaXJ9L3ZhCi0gbGlidmFfd2F5bGFuZGluY2x1ZGVfSEVBREVSUwk9ICQoc291cmNlX2gpCi0tbGlidmFfd2F5bGFuZF9sYV9TT1VSQ0VTCT0gJChzb3VyY2VfYykgJChwcm90b2NvbF9zb3VyY2VfaCkKLStsaWJ2YV93YXlsYW5kX2xhX1NPVVJDRVMJPSAkKHNvdXJjZV9jKQotIG5vaW5zdF9IRUFERVJTCQkJPSAkKHNvdXJjZV9oX3ByaXYpCi0gCi0gIyBXYXlsYW5kIHByb3RvY29sCi1AQCAtNjUsNSArNjUsOCBAQCBFWFRSQV9ESVNUID0gXAotIAl3YXlsYW5kLWRybS54bWwgICAgICAgICBcCi0gCSQoTlVMTCkKLSAKLStCVUlMVF9TT1VSQ0VTID0gJChwcm90b2NvbF9zb3VyY2VfaCkKLStDTEVBTkZJTEVTID0gJChCVUlMVF9TT1VSQ0VTKQotKwotICMgRXh0cmEgY2xlYW4gZmlsZXMgc28gdGhhdCBtYWludGFpbmVyLWNsZWFuIHJlbW92ZXMgKmV2ZXJ5dGhpbmcqCi0gTUFJTlRBSU5FUkNMRUFORklMRVMgPSBNYWtlZmlsZS5pbgotZGlmZiAtLWdpdCBhL3ZhL3dheWxhbmQvd2F5bGFuZC1kcm0tY2xpZW50LXByb3RvY29sLmggYi92YS93YXlsYW5kL3dheWxhbmQtZHJtLWNsaWVudC1wcm90b2NvbC5oCi1kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IGRhMjY3ZTguLjAwMDAwMDAKLS0tLSBhL3ZhL3dheWxhbmQvd2F5bGFuZC1kcm0tY2xpZW50LXByb3RvY29sLmgKLSsrKyAvZGV2L251bGwKLUBAIC0xLDI5MCArMCwwIEBACi0tLyogR2VuZXJhdGVkIGJ5IHdheWxhbmQtc2Nhbm5lciAxLjExLjkwICovCi0tCi0tI2lmbmRlZiBEUk1fQ0xJRU5UX1BST1RPQ09MX0gKLS0jZGVmaW5lIERSTV9DTElFTlRfUFJPVE9DT0xfSAotLQotLSNpbmNsdWRlIDxzdGRpbnQuaD4KLS0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0tI2luY2x1ZGUgIndheWxhbmQtY2xpZW50LmgiCi0tCi0tI2lmZGVmICBfX2NwbHVzcGx1cwotLWV4dGVybiAiQyIgewotLSNlbmRpZgotLQotLS8qKgotLSAqIEBwYWdlIHBhZ2VfZHJtIFRoZSBkcm0gcHJvdG9jb2wKLS0gKiBAc2VjdGlvbiBwYWdlX2lmYWNlc19kcm0gSW50ZXJmYWNlcwotLSAqIC0gQHN1YnBhZ2UgcGFnZV9pZmFjZV93bF9kcm0gLSAKLS0gKiBAc2VjdGlvbiBwYWdlX2NvcHlyaWdodF9kcm0gQ29weXJpZ2h0Ci0tICogPHByZT4KLS0gKgotLSAqIENvcHlyaWdodCDCqSAyMDA4LTIwMTEgS3Jpc3RpYW4gSMO4Z3NiZXJnCi0tICogQ29weXJpZ2h0IMKpIDIwMTAtMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbgotLSAqCi0tICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcwotLSAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQKLS0gKiB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdFxuIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbgotLSAqIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbgotLSAqIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZgotLSAqIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkKLS0gKiBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywKLS0gKiB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBUaGUgY29weXJpZ2h0IGhvbGRlcnMgbWFrZSBubwotLSAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0tICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKLS0gKiB3YXJyYW50eS4KLS0gKgotLSAqIFRIRSBDT1BZUklHSFQgSE9MREVSUyBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTCi0tICogU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKLS0gKiBGSVRORVNTLCBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKLS0gKiBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLS0gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4KLS0gKiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLAotLSAqIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GCi0tICogVEhJUyBTT0ZUV0FSRS4KLS0gKiA8L3ByZT4KLS0gKi8KLS1zdHJ1Y3Qgd2xfYnVmZmVyOwotLXN0cnVjdCB3bF9kcm07Ci0tCi0tLyoqCi0tICogQHBhZ2UgcGFnZV9pZmFjZV93bF9kcm0gd2xfZHJtCi0tICogQHNlY3Rpb24gcGFnZV9pZmFjZV93bF9kcm1fYXBpIEFQSQotLSAqIFNlZSBAcmVmIGlmYWNlX3dsX2RybS4KLS0gKi8KLS0vKioKLS0gKiBAZGVmZ3JvdXAgaWZhY2Vfd2xfZHJtIFRoZSB3bF9kcm0gaW50ZXJmYWNlCi0tICovCi0tZXh0ZXJuIGNvbnN0IHN0cnVjdCB3bF9pbnRlcmZhY2Ugd2xfZHJtX2ludGVyZmFjZTsKLS0KLS0jaWZuZGVmIFdMX0RSTV9FUlJPUl9FTlVNCi0tI2RlZmluZSBXTF9EUk1fRVJST1JfRU5VTQotLWVudW0gd2xfZHJtX2Vycm9yIHsKLS0JV0xfRFJNX0VSUk9SX0FVVEhFTlRJQ0FURV9GQUlMID0gMCwKLS0JV0xfRFJNX0VSUk9SX0lOVkFMSURfRk9STUFUID0gMSwKLS0JV0xfRFJNX0VSUk9SX0lOVkFMSURfTkFNRSA9IDIsCi0tfTsKLS0jZW5kaWYgLyogV0xfRFJNX0VSUk9SX0VOVU0gKi8KLS0KLS0jaWZuZGVmIFdMX0RSTV9GT1JNQVRfRU5VTQotLSNkZWZpbmUgV0xfRFJNX0ZPUk1BVF9FTlVNCi0tZW51bSB3bF9kcm1fZm9ybWF0IHsKLS0JV0xfRFJNX0ZPUk1BVF9DOCA9IDB4MjAyMDM4NDMsCi0tCVdMX0RSTV9GT1JNQVRfUkdCMzMyID0gMHgzODQyNDc1MiwKLS0JV0xfRFJNX0ZPUk1BVF9CR1IyMzMgPSAweDM4NTI0NzQyLAotLQlXTF9EUk1fRk9STUFUX1hSR0I0NDQ0ID0gMHgzMjMxNTI1OCwKLS0JV0xfRFJNX0ZPUk1BVF9YQkdSNDQ0NCA9IDB4MzIzMTQyNTgsCi0tCVdMX0RSTV9GT1JNQVRfUkdCWDQ0NDQgPSAweDMyMzE1ODUyLAotLQlXTF9EUk1fRk9STUFUX0JHUlg0NDQ0ID0gMHgzMjMxNTg0MiwKLS0JV0xfRFJNX0ZPUk1BVF9BUkdCNDQ0NCA9IDB4MzIzMTUyNDEsCi0tCVdMX0RSTV9GT1JNQVRfQUJHUjQ0NDQgPSAweDMyMzE0MjQxLAotLQlXTF9EUk1fRk9STUFUX1JHQkE0NDQ0ID0gMHgzMjMxNDE1MiwKLS0JV0xfRFJNX0ZPUk1BVF9CR1JBNDQ0NCA9IDB4MzIzMTQxNDIsCi0tCVdMX0RSTV9GT1JNQVRfWFJHQjE1NTUgPSAweDM1MzE1MjU4LAotLQlXTF9EUk1fRk9STUFUX1hCR1IxNTU1ID0gMHgzNTMxNDI1OCwKLS0JV0xfRFJNX0ZPUk1BVF9SR0JYNTU1MSA9IDB4MzUzMTU4NTIsCi0tCVdMX0RSTV9GT1JNQVRfQkdSWDU1NTEgPSAweDM1MzE1ODQyLAotLQlXTF9EUk1fRk9STUFUX0FSR0IxNTU1ID0gMHgzNTMxNTI0MSwKLS0JV0xfRFJNX0ZPUk1BVF9BQkdSMTU1NSA9IDB4MzUzMTQyNDEsCi0tCVdMX0RSTV9GT1JNQVRfUkdCQTU1NTEgPSAweDM1MzE0MTUyLAotLQlXTF9EUk1fRk9STUFUX0JHUkE1NTUxID0gMHgzNTMxNDE0MiwKLS0JV0xfRFJNX0ZPUk1BVF9SR0I1NjUgPSAweDM2MzE0NzUyLAotLQlXTF9EUk1fRk9STUFUX0JHUjU2NSA9IDB4MzYzMTQ3NDIsCi0tCVdMX0RSTV9GT1JNQVRfUkdCODg4ID0gMHgzNDMyNDc1MiwKLS0JV0xfRFJNX0ZPUk1BVF9CR1I4ODggPSAweDM0MzI0NzQyLAotLQlXTF9EUk1fRk9STUFUX1hSR0I4ODg4ID0gMHgzNDMyNTI1OCwKLS0JV0xfRFJNX0ZPUk1BVF9YQkdSODg4OCA9IDB4MzQzMjQyNTgsCi0tCVdMX0RSTV9GT1JNQVRfUkdCWDg4ODggPSAweDM0MzI1ODUyLAotLQlXTF9EUk1fRk9STUFUX0JHUlg4ODg4ID0gMHgzNDMyNTg0MiwKLS0JV0xfRFJNX0ZPUk1BVF9BUkdCODg4OCA9IDB4MzQzMjUyNDEsCi0tCVdMX0RSTV9GT1JNQVRfQUJHUjg4ODggPSAweDM0MzI0MjQxLAotLQlXTF9EUk1fRk9STUFUX1JHQkE4ODg4ID0gMHgzNDMyNDE1MiwKLS0JV0xfRFJNX0ZPUk1BVF9CR1JBODg4OCA9IDB4MzQzMjQxNDIsCi0tCVdMX0RSTV9GT1JNQVRfWFJHQjIxMDEwMTAgPSAweDMwMzM1MjU4LAotLQlXTF9EUk1fRk9STUFUX1hCR1IyMTAxMDEwID0gMHgzMDMzNDI1OCwKLS0JV0xfRFJNX0ZPUk1BVF9SR0JYMTAxMDEwMiA9IDB4MzAzMzU4NTIsCi0tCVdMX0RSTV9GT1JNQVRfQkdSWDEwMTAxMDIgPSAweDMwMzM1ODQyLAotLQlXTF9EUk1fRk9STUFUX0FSR0IyMTAxMDEwID0gMHgzMDMzNTI0MSwKLS0JV0xfRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMCA9IDB4MzAzMzQyNDEsCi0tCVdMX0RSTV9GT1JNQVRfUkdCQTEwMTAxMDIgPSAweDMwMzM0MTUyLAotLQlXTF9EUk1fRk9STUFUX0JHUkExMDEwMTAyID0gMHgzMDMzNDE0MiwKLS0JV0xfRFJNX0ZPUk1BVF9ZVVlWID0gMHg1NjU5NTU1OSwKLS0JV0xfRFJNX0ZPUk1BVF9ZVllVID0gMHg1NTU5NTY1OSwKLS0JV0xfRFJNX0ZPUk1BVF9VWVZZID0gMHg1OTU2NTk1NSwKLS0JV0xfRFJNX0ZPUk1BVF9WWVVZID0gMHg1OTU1NTk1NiwKLS0JV0xfRFJNX0ZPUk1BVF9BWVVWID0gMHg1NjU1NTk0MSwKLS0JV0xfRFJNX0ZPUk1BVF9OVjEyID0gMHgzMjMxNTY0ZSwKLS0JV0xfRFJNX0ZPUk1BVF9OVjIxID0gMHgzMTMyNTY0ZSwKLS0JV0xfRFJNX0ZPUk1BVF9OVjE2ID0gMHgzNjMxNTY0ZSwKLS0JV0xfRFJNX0ZPUk1BVF9OVjYxID0gMHgzMTM2NTY0ZSwKLS0JV0xfRFJNX0ZPUk1BVF9ZVVY0MTAgPSAweDM5NTY1NTU5LAotLQlXTF9EUk1fRk9STUFUX1lWVTQxMCA9IDB4Mzk1NTU2NTksCi0tCVdMX0RSTV9GT1JNQVRfWVVWNDExID0gMHgzMTMxNTU1OSwKLS0JV0xfRFJNX0ZPUk1BVF9ZVlU0MTEgPSAweDMxMzE1NjU5LAotLQlXTF9EUk1fRk9STUFUX1lVVjQyMCA9IDB4MzIzMTU1NTksCi0tCVdMX0RSTV9GT1JNQVRfWVZVNDIwID0gMHgzMjMxNTY1OSwKLS0JV0xfRFJNX0ZPUk1BVF9ZVVY0MjIgPSAweDM2MzE1NTU5LAotLQlXTF9EUk1fRk9STUFUX1lWVTQyMiA9IDB4MzYzMTU2NTksCi0tCVdMX0RSTV9GT1JNQVRfWVVWNDQ0ID0gMHgzNDMyNTU1OSwKLS0JV0xfRFJNX0ZPUk1BVF9ZVlU0NDQgPSAweDM0MzI1NjU5LAotLX07Ci0tI2VuZGlmIC8qIFdMX0RSTV9GT1JNQVRfRU5VTSAqLwotLQotLSNpZm5kZWYgV0xfRFJNX0NBUEFCSUxJVFlfRU5VTQotLSNkZWZpbmUgV0xfRFJNX0NBUEFCSUxJVFlfRU5VTQotLS8qKgotLSAqIEBpbmdyb3VwIGlmYWNlX3dsX2RybQotLSAqIHdsX2RybSBjYXBhYmlsaXR5IGJpdG1hc2sKLS0gKgotLSAqIEJpdG1hc2sgb2YgY2FwYWJpbGl0aWVzLgotLSAqLwotLWVudW0gd2xfZHJtX2NhcGFiaWxpdHkgewotLQkvKioKLS0JICogd2xfZHJtIHByaW1lIGF2YWlsYWJsZQotLQkgKi8KLS0JV0xfRFJNX0NBUEFCSUxJVFlfUFJJTUUgPSAxLAotLX07Ci0tI2VuZGlmIC8qIFdMX0RSTV9DQVBBQklMSVRZX0VOVU0gKi8KLS0KLS0vKioKLS0gKiBAaW5ncm91cCBpZmFjZV93bF9kcm0KLS0gKiBAc3RydWN0IHdsX2RybV9saXN0ZW5lcgotLSAqLwotLXN0cnVjdCB3bF9kcm1fbGlzdGVuZXIgewotLQkvKioKLS0JICovCi0tCXZvaWQgKCpkZXZpY2UpKHZvaWQgKmRhdGEsCi0tCQkgICAgICAgc3RydWN0IHdsX2RybSAqd2xfZHJtLAotLQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpOwotLQkvKioKLS0JICovCi0tCXZvaWQgKCpmb3JtYXQpKHZvaWQgKmRhdGEsCi0tCQkgICAgICAgc3RydWN0IHdsX2RybSAqd2xfZHJtLAotLQkJICAgICAgIHVpbnQzMl90IGZvcm1hdCk7Ci0tCS8qKgotLQkgKi8KLS0Jdm9pZCAoKmF1dGhlbnRpY2F0ZWQpKHZvaWQgKmRhdGEsCi0tCQkJICAgICAgc3RydWN0IHdsX2RybSAqd2xfZHJtKTsKLS0JLyoqCi0tCSAqLwotLQl2b2lkICgqY2FwYWJpbGl0aWVzKSh2b2lkICpkYXRhLAotLQkJCSAgICAgc3RydWN0IHdsX2RybSAqd2xfZHJtLAotLQkJCSAgICAgdWludDMyX3QgdmFsdWUpOwotLX07Ci0tCi0tLyoqCi0tICogQGluZ3JvdXAgd2xfZHJtX2lmYWNlCi0tICovCi0tc3RhdGljIGlubGluZSBpbnQKLS13bF9kcm1fYWRkX2xpc3RlbmVyKHN0cnVjdCB3bF9kcm0gKndsX2RybSwKLS0JCSAgICBjb25zdCBzdHJ1Y3Qgd2xfZHJtX2xpc3RlbmVyICpsaXN0ZW5lciwgdm9pZCAqZGF0YSkKLS17Ci0tCXJldHVybiB3bF9wcm94eV9hZGRfbGlzdGVuZXIoKHN0cnVjdCB3bF9wcm94eSAqKSB3bF9kcm0sCi0tCQkJCSAgICAgKHZvaWQgKCoqKSh2b2lkKSkgbGlzdGVuZXIsIGRhdGEpOwotLX0KLS0KLS0jZGVmaW5lIFdMX0RSTV9BVVRIRU5USUNBVEUgMAotLSNkZWZpbmUgV0xfRFJNX0NSRUFURV9CVUZGRVIgMQotLSNkZWZpbmUgV0xfRFJNX0NSRUFURV9QTEFOQVJfQlVGRkVSIDIKLS0jZGVmaW5lIFdMX0RSTV9DUkVBVEVfUFJJTUVfQlVGRkVSIDMKLS0KLS0vKioKLS0gKiBAaW5ncm91cCBpZmFjZV93bF9kcm0KLS0gKi8KLS0jZGVmaW5lIFdMX0RSTV9BVVRIRU5USUNBVEVfU0lOQ0VfVkVSU0lPTiAxCi0tLyoqCi0tICogQGluZ3JvdXAgaWZhY2Vfd2xfZHJtCi0tICovCi0tI2RlZmluZSBXTF9EUk1fQ1JFQVRFX0JVRkZFUl9TSU5DRV9WRVJTSU9OIDEKLS0vKioKLS0gKiBAaW5ncm91cCBpZmFjZV93bF9kcm0KLS0gKi8KLS0jZGVmaW5lIFdMX0RSTV9DUkVBVEVfUExBTkFSX0JVRkZFUl9TSU5DRV9WRVJTSU9OIDEKLS0vKioKLS0gKiBAaW5ncm91cCBpZmFjZV93bF9kcm0KLS0gKi8KLS0jZGVmaW5lIFdMX0RSTV9DUkVBVEVfUFJJTUVfQlVGRkVSX1NJTkNFX1ZFUlNJT04gMgotLQotLS8qKiBAaW5ncm91cCBpZmFjZV93bF9kcm0gKi8KLS1zdGF0aWMgaW5saW5lIHZvaWQKLS13bF9kcm1fc2V0X3VzZXJfZGF0YShzdHJ1Y3Qgd2xfZHJtICp3bF9kcm0sIHZvaWQgKnVzZXJfZGF0YSkKLS17Ci0tCXdsX3Byb3h5X3NldF91c2VyX2RhdGEoKHN0cnVjdCB3bF9wcm94eSAqKSB3bF9kcm0sIHVzZXJfZGF0YSk7Ci0tfQotLQotLS8qKiBAaW5ncm91cCBpZmFjZV93bF9kcm0gKi8KLS1zdGF0aWMgaW5saW5lIHZvaWQgKgotLXdsX2RybV9nZXRfdXNlcl9kYXRhKHN0cnVjdCB3bF9kcm0gKndsX2RybSkKLS17Ci0tCXJldHVybiB3bF9wcm94eV9nZXRfdXNlcl9kYXRhKChzdHJ1Y3Qgd2xfcHJveHkgKikgd2xfZHJtKTsKLS19Ci0tCi0tc3RhdGljIGlubGluZSB1aW50MzJfdAotLXdsX2RybV9nZXRfdmVyc2lvbihzdHJ1Y3Qgd2xfZHJtICp3bF9kcm0pCi0tewotLQlyZXR1cm4gd2xfcHJveHlfZ2V0X3ZlcnNpb24oKHN0cnVjdCB3bF9wcm94eSAqKSB3bF9kcm0pOwotLX0KLS0KLS0vKiogQGluZ3JvdXAgaWZhY2Vfd2xfZHJtICovCi0tc3RhdGljIGlubGluZSB2b2lkCi0td2xfZHJtX2Rlc3Ryb3koc3RydWN0IHdsX2RybSAqd2xfZHJtKQotLXsKLS0Jd2xfcHJveHlfZGVzdHJveSgoc3RydWN0IHdsX3Byb3h5ICopIHdsX2RybSk7Ci0tfQotLQotLS8qKgotLSAqIEBpbmdyb3VwIGlmYWNlX3dsX2RybQotLSAqLwotLXN0YXRpYyBpbmxpbmUgdm9pZAotLXdsX2RybV9hdXRoZW50aWNhdGUoc3RydWN0IHdsX2RybSAqd2xfZHJtLCB1aW50MzJfdCBpZCkKLS17Ci0tCXdsX3Byb3h5X21hcnNoYWwoKHN0cnVjdCB3bF9wcm94eSAqKSB3bF9kcm0sCi0tCQkJIFdMX0RSTV9BVVRIRU5USUNBVEUsIGlkKTsKLS19Ci0tCi0tLyoqCi0tICogQGluZ3JvdXAgaWZhY2Vfd2xfZHJtCi0tICovCi0tc3RhdGljIGlubGluZSBzdHJ1Y3Qgd2xfYnVmZmVyICoKLS13bF9kcm1fY3JlYXRlX2J1ZmZlcihzdHJ1Y3Qgd2xfZHJtICp3bF9kcm0sIHVpbnQzMl90IG5hbWUsIGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0LCB1aW50MzJfdCBzdHJpZGUsIHVpbnQzMl90IGZvcm1hdCkKLS17Ci0tCXN0cnVjdCB3bF9wcm94eSAqaWQ7Ci0tCi0tCWlkID0gd2xfcHJveHlfbWFyc2hhbF9jb25zdHJ1Y3Rvcigoc3RydWN0IHdsX3Byb3h5ICopIHdsX2RybSwKLS0JCQkgV0xfRFJNX0NSRUFURV9CVUZGRVIsICZ3bF9idWZmZXJfaW50ZXJmYWNlLCBOVUxMLCBuYW1lLCB3aWR0aCwgaGVpZ2h0LCBzdHJpZGUsIGZvcm1hdCk7Ci0tCi0tCXJldHVybiAoc3RydWN0IHdsX2J1ZmZlciAqKSBpZDsKLS19Ci0tCi0tLyoqCi0tICogQGluZ3JvdXAgaWZhY2Vfd2xfZHJtCi0tICovCi0tc3RhdGljIGlubGluZSBzdHJ1Y3Qgd2xfYnVmZmVyICoKLS13bF9kcm1fY3JlYXRlX3BsYW5hcl9idWZmZXIoc3RydWN0IHdsX2RybSAqd2xfZHJtLCB1aW50MzJfdCBuYW1lLCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgdWludDMyX3QgZm9ybWF0LCBpbnQzMl90IG9mZnNldDAsIGludDMyX3Qgc3RyaWRlMCwgaW50MzJfdCBvZmZzZXQxLCBpbnQzMl90IHN0cmlkZTEsIGludDMyX3Qgb2Zmc2V0MiwgaW50MzJfdCBzdHJpZGUyKQotLXsKLS0Jc3RydWN0IHdsX3Byb3h5ICppZDsKLS0KLS0JaWQgPSB3bF9wcm94eV9tYXJzaGFsX2NvbnN0cnVjdG9yKChzdHJ1Y3Qgd2xfcHJveHkgKikgd2xfZHJtLAotLQkJCSBXTF9EUk1fQ1JFQVRFX1BMQU5BUl9CVUZGRVIsICZ3bF9idWZmZXJfaW50ZXJmYWNlLCBOVUxMLCBuYW1lLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIG9mZnNldDAsIHN0cmlkZTAsIG9mZnNldDEsIHN0cmlkZTEsIG9mZnNldDIsIHN0cmlkZTIpOwotLQotLQlyZXR1cm4gKHN0cnVjdCB3bF9idWZmZXIgKikgaWQ7Ci0tfQotLQotLS8qKgotLSAqIEBpbmdyb3VwIGlmYWNlX3dsX2RybQotLSAqLwotLXN0YXRpYyBpbmxpbmUgc3RydWN0IHdsX2J1ZmZlciAqCi0td2xfZHJtX2NyZWF0ZV9wcmltZV9idWZmZXIoc3RydWN0IHdsX2RybSAqd2xfZHJtLCBpbnQzMl90IG5hbWUsIGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0LCB1aW50MzJfdCBmb3JtYXQsIGludDMyX3Qgb2Zmc2V0MCwgaW50MzJfdCBzdHJpZGUwLCBpbnQzMl90IG9mZnNldDEsIGludDMyX3Qgc3RyaWRlMSwgaW50MzJfdCBvZmZzZXQyLCBpbnQzMl90IHN0cmlkZTIpCi0tewotLQlzdHJ1Y3Qgd2xfcHJveHkgKmlkOwotLQotLQlpZCA9IHdsX3Byb3h5X21hcnNoYWxfY29uc3RydWN0b3IoKHN0cnVjdCB3bF9wcm94eSAqKSB3bF9kcm0sCi0tCQkJIFdMX0RSTV9DUkVBVEVfUFJJTUVfQlVGRkVSLCAmd2xfYnVmZmVyX2ludGVyZmFjZSwgTlVMTCwgbmFtZSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBvZmZzZXQwLCBzdHJpZGUwLCBvZmZzZXQxLCBzdHJpZGUxLCBvZmZzZXQyLCBzdHJpZGUyKTsKLS0KLS0JcmV0dXJuIChzdHJ1Y3Qgd2xfYnVmZmVyICopIGlkOwotLX0KLS0KLS0jaWZkZWYgIF9fY3BsdXNwbHVzCi0tfQotLSNlbmRpZgotLQotLSNlbmRpZgotLS0gCi0yLjEuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnZhL2xpYnZhLXV0aWxzXzEuOC4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ2YS9saWJ2YS11dGlsc18xLjguMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDgyYzE4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ2YS9saWJ2YS11dGlsc18xLjguMy5iYgpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gImxpYnZhLXV0aWxzIGlzIGEgY29sbGVjdGlvbiBvZiB1dGlsaXRpZXMgZnJvbSBsaWJ2YSBwcm9qZWN0IgorCitERVNDUklQVElPTiA9ICJsaWJ2YS11dGlscyBpcyBhIGNvbGxlY3Rpb24gb2YgdXRpbGl0aWVzIFwKK2FuZCBleGFtcGxlcyB0byBleGVyY2lzZSBWQS1BUEkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBsaWJ2YSBcCitwcm9qZWN0LlZBLUFQSSBpcyBhbiBvcGVuLXNvdXJjZSBsaWJyYXJ5IGFuZCBBUEkgc3BlY2lmaWNhdGlvbiwgXAord2hpY2ggcHJvdmlkZXMgYWNjZXNzIHRvIGdyYXBoaWNzIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBjYXBhYmlsaXRpZXMgXAorZm9yIHZpZGVvIHByb2Nlc3NpbmcuIEl0IGNvbnNpc3RzIG9mIGEgbWFpbiBsaWJyYXJ5IGFuZCBkcml2ZXItc3BlY2lmaWMgXAorYWNjZWxlcmF0aW9uIGJhY2tlbmRzIGZvciBlYWNoIHN1cHBvcnRlZCBoYXJkd2FyZSB2ZW5kb3IiCisKK0hPTUVQQUdFID0gImh0dHBzOi8vMDEub3JnL2xpbnV4bWVkaWEvdmFhcGkiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vZ2l0aHViLmNvbS8wMW9yZy9saWJ2YS11dGlscy9pc3N1ZXMiCisKK1NFQ1RJT04gPSAieDExIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMTQ4ZmM4YWRmMTlkYzlhZWMxN2NmOWNkMjlhOWE1ZSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tLzAxb3JnL2xpYnZhLXV0aWxzLmdpdDticmFuY2g9djEuOC1icmFuY2giCitTUkNSRVYgPSAiMDExYzcwOWI5OGI1MmRiM2IxMGFlYjM2MWRmZWE5ZGE0MzkzMDM2NCIKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vMDFvcmcvbGlidmEtdXRpbHMvcmVsZWFzZXMiCitVUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICIoP1A8cHZlcj4oXGQrKFwuXGQrKSspKSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworREVQRU5EUyA9ICJsaWJ2YSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIGRlcGVuZHMgb24gbGlidmEgd2hpY2ggcmVxdWlyZXMgb3BlbmdsCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAib3BlbmdsIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuZmlsdGVyKCdESVNUUk9fRkVBVFVSRVMnLCAnd2F5bGFuZCB4MTEnLCBkKX0iCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUteDExLC0tZGlzYWJsZS14MTEsdmlydHVhbC9saWJ4MTEgbGlieGV4dCBsaWJ4Zml4ZXMiCitQQUNLQUdFQ09ORklHW3dheWxhbmRdID0gIi0tZW5hYmxlLXdheWxhbmQsLS1kaXNhYmxlLXdheWxhbmQsd2F5bGFuZC1uYXRpdmUgd2F5bGFuZCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlidmEvbGlidmFfMS43LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnZhL2xpYnZhXzEuNy4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzBiOTBmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlidmEvbGlidmFfMS43LjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi1TVU1NQVJZID0gIlZpZGVvIEFjY2VsZXJhdGlvbiAoVkEpIEFQSSBmb3IgTGludXgiCi1ERVNDUklQVElPTiA9ICJWaWRlbyBBY2NlbGVyYXRpb24gQVBJIChWQSBBUEkpIGlzIGEgbGlicmFyeSAobGliVkEpIFwKLWFuZCBBUEkgc3BlY2lmaWNhdGlvbiB3aGljaCBlbmFibGVzIGFuZCBwcm92aWRlcyBhY2Nlc3MgdG8gZ3JhcGhpY3MgXAotaGFyZHdhcmUgKEdQVSkgYWNjZWxlcmF0aW9uIGZvciB2aWRlbyBwcm9jZXNzaW5nIG9uIExpbnV4IGFuZCBVTklYIFwKLWJhc2VkIG9wZXJhdGluZyBzeXN0ZW1zLiBBY2NlbGVyYXRlZCBwcm9jZXNzaW5nIGluY2x1ZGVzIHZpZGVvIFwKLWRlY29kaW5nLCB2aWRlbyBlbmNvZGluZywgc3VicGljdHVyZSBibGVuZGluZyBhbmQgcmVuZGVyaW5nLiBUaGUgXAotc3BlY2lmaWNhdGlvbiB3YXMgb3JpZ2luYWxseSBkZXNpZ25lZCBieSBJbnRlbCBmb3IgaXRzIEdNQSAoR3JhcGhpY3MgXAotTWVkaWEgQWNjZWxlcmF0b3IpIHNlcmllcyBvZiBHUFUgaGFyZHdhcmUsIHRoZSBBUEkgaXMgaG93ZXZlciBub3QgXAotbGltaXRlZCB0byBHUFVzIG9yIEludGVsIHNwZWNpZmljIGhhcmR3YXJlLCBhcyBvdGhlciBoYXJkd2FyZSBhbmQgXAotbWFudWZhY3R1cmVycyBjYW4gYWxzbyBmcmVlbHkgdXNlIHRoaXMgQVBJIGZvciBoYXJkd2FyZSBhY2NlbGVyYXRlZCBcCi12aWRlbyBkZWNvZGluZy4iCi0KLUhPTUVQQUdFID0gImh0dHBzOi8vMDEub3JnL2xpbnV4bWVkaWEvdmFhcGkiCi1CVUdUUkFDS0VSID0gImh0dHBzOi8vZ2l0aHViLmNvbS8wMW9yZy9saWJ2YS9pc3N1ZXMiCi0KLVNFQ1RJT04gPSAieDExIgotTElDRU5TRSA9ICJNSVQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yZTQ4OTQwZjk0YWNiMGFmNTgyZTVlZjAzNTM3ODAwZiIKLQotU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tLzAxb3JnL2xpYnZhLmdpdDtwcm90b2NvbD1odHRwO2JyYW5jaD12MS43LWJyYW5jaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS5hYy1Vc2Utd2F5bGFuZC1zY2FubmVyLWluLVBBVEgucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS13YXlsYW5kLURvbi10LWNvbW1pdC1hbmQtc2hpcC1nZW5lcmF0ZWQtZmlsZXMucGF0Y2giCi1TUkNSRVYgPSAiZGJmOWY3ZTMzMzQ5YzNjZWU4ZDEzMWU5M2E2YTRmOTEyNTU2MzVjYiIKLVVQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gImxpYnZhLSg/UDxwdmVyPihcZCsoXC5cZCspKykpIgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1ERVBFTkRTID0gImxpYmRybSB2aXJ0dWFsL21lc2EgdmlydHVhbC9saWJnbGVzMSB2aXJ0dWFsL2xpYmdsZXMyIHZpcnR1YWwvZWdsIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCi0KLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJvcGVuZ2wiCi0KLUVYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZHVtbXktZHJpdmVyIgotCi1QQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuZmlsdGVyKCdESVNUUk9fRkVBVFVSRVMnLCAnd2F5bGFuZCB4MTEnLCBkKX0iCi1QQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUteDExLC0tZGlzYWJsZS14MTEsdmlydHVhbC9saWJ4MTEgbGlieGV4dCBsaWJ4Zml4ZXMiCi1QQUNLQUdFQ09ORklHW3dheWxhbmRdID0gIi0tZW5hYmxlLXdheWxhbmQsLS1kaXNhYmxlLXdheWxhbmQsd2F5bGFuZC1uYXRpdmUgd2F5bGFuZCIKLQotUEFDS0FHRVMgPSsgIiR7UE59LXgxMSAke1BOfS10cGkgJHtQTn0tZ2x4ICR7UE59LWVnbCAke1BOfS13YXlsYW5kIgotCi1SREVQRU5EU18ke1BOfS10cGkgPSsgIiR7UE59IgotUkRFUEVORFNfJHtQTn0teDExID0rICIke1BOfSIKLVJERVBFTkRTXyR7UE59LWdseCA9KyAiJHtQTn0teDExIgotUkRFUEVORFNfJHtQTn0tZWdsID0rICIke1BOfS14MTEiCi0KLUZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2RyaS8uZGVidWciCi0KLUZJTEVTXyR7UE59LXgxMSA9KyAiJHtsaWJkaXJ9L2xpYnZhLXgxMSoke1NPTElCU30iCi1GSUxFU18ke1BOfS10cGkgPSsgIiR7bGliZGlyfS9saWJ2YS10cGkqJHtTT0xJQlN9IgotRklMRVNfJHtQTn0tZ2x4ID0rICIke2xpYmRpcn0vbGlidmEtZ2x4KiR7U09MSUJTfSIKLUZJTEVTXyR7UE59LWVnbCA9KyAiJHtsaWJkaXJ9L2xpYnZhLWVnbCoke1NPTElCU30iCi1GSUxFU18ke1BOfS13YXlsYW5kID0rICIke2xpYmRpcn0vbGlidmEtd2F5bGFuZCoke1NPTElCU30iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnZhL2xpYnZhXzEuOC4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ2YS9saWJ2YV8xLjguMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWVkYTg0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ2YS9saWJ2YV8xLjguMy5iYgpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIlZpZGVvIEFjY2VsZXJhdGlvbiAoVkEpIEFQSSBmb3IgTGludXgiCitERVNDUklQVElPTiA9ICJWaWRlbyBBY2NlbGVyYXRpb24gQVBJIChWQSBBUEkpIGlzIGEgbGlicmFyeSAobGliVkEpIFwKK2FuZCBBUEkgc3BlY2lmaWNhdGlvbiB3aGljaCBlbmFibGVzIGFuZCBwcm92aWRlcyBhY2Nlc3MgdG8gZ3JhcGhpY3MgXAoraGFyZHdhcmUgKEdQVSkgYWNjZWxlcmF0aW9uIGZvciB2aWRlbyBwcm9jZXNzaW5nIG9uIExpbnV4IGFuZCBVTklYIFwKK2Jhc2VkIG9wZXJhdGluZyBzeXN0ZW1zLiBBY2NlbGVyYXRlZCBwcm9jZXNzaW5nIGluY2x1ZGVzIHZpZGVvIFwKK2RlY29kaW5nLCB2aWRlbyBlbmNvZGluZywgc3VicGljdHVyZSBibGVuZGluZyBhbmQgcmVuZGVyaW5nLiBUaGUgXAorc3BlY2lmaWNhdGlvbiB3YXMgb3JpZ2luYWxseSBkZXNpZ25lZCBieSBJbnRlbCBmb3IgaXRzIEdNQSAoR3JhcGhpY3MgXAorTWVkaWEgQWNjZWxlcmF0b3IpIHNlcmllcyBvZiBHUFUgaGFyZHdhcmUsIHRoZSBBUEkgaXMgaG93ZXZlciBub3QgXAorbGltaXRlZCB0byBHUFVzIG9yIEludGVsIHNwZWNpZmljIGhhcmR3YXJlLCBhcyBvdGhlciBoYXJkd2FyZSBhbmQgXAorbWFudWZhY3R1cmVycyBjYW4gYWxzbyBmcmVlbHkgdXNlIHRoaXMgQVBJIGZvciBoYXJkd2FyZSBhY2NlbGVyYXRlZCBcCit2aWRlbyBkZWNvZGluZy4iCisKK0hPTUVQQUdFID0gImh0dHBzOi8vMDEub3JnL2xpbnV4bWVkaWEvdmFhcGkiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vZ2l0aHViLmNvbS8wMW9yZy9saWJ2YS9pc3N1ZXMiCisKK1NFQ1RJT04gPSAieDExIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yZTQ4OTQwZjk0YWNiMGFmNTgyZTVlZjAzNTM3ODAwZiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tLzAxb3JnL2xpYnZhLmdpdDtwcm90b2NvbD1odHRwO2JyYW5jaD12MS44LWJyYW5jaCAiCitTUkNSRVYgPSAiNDU3NDcwOTg3Y2M5ZGY1OTc2Y2U4YzcyZmZkNGJmYmQ5YmFhZjBmOSIKK1VQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gIl4oP1A8cHZlcj4oXGQrKFwuXGQrKSspKSQiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0RFUEVORFMgPSAibGliZHJtIHZpcnR1YWwvbWVzYSB2aXJ0dWFsL2xpYmdsZXMxIHZpcnR1YWwvbGliZ2xlczIgdmlydHVhbC9lZ2wiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIm9wZW5nbCIKKworRVhUUkFfT0VDT05GID0gImFjX2N2X3Byb2dfV0FZTEFORF9TQ0FOTkVSPXdheWxhbmQtc2Nhbm5lciIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmZpbHRlcignRElTVFJPX0ZFQVRVUkVTJywgJ3dheWxhbmQgeDExJywgZCl9IgorUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0tZW5hYmxlLXgxMSwtLWRpc2FibGUteDExLHZpcnR1YWwvbGlieDExIGxpYnhleHQgbGlieGZpeGVzIgorUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSA9ICItLWVuYWJsZS13YXlsYW5kLC0tZGlzYWJsZS13YXlsYW5kLHdheWxhbmQtbmF0aXZlIHdheWxhbmQiCisKK1BBQ0tBR0VTID0rICIke1BOfS14MTEgJHtQTn0tdHBpICR7UE59LWdseCAke1BOfS1lZ2wgJHtQTn0td2F5bGFuZCIKKworUkRFUEVORFNfJHtQTn0tdHBpID0rICIke1BOfSIKK1JERVBFTkRTXyR7UE59LXgxMSA9KyAiJHtQTn0iCitSREVQRU5EU18ke1BOfS1nbHggPSsgIiR7UE59LXgxMSIKK1JERVBFTkRTXyR7UE59LWVnbCA9KyAiJHtQTn0teDExIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9kcmkvLmRlYnVnIgorCitGSUxFU18ke1BOfS14MTEgPSsgIiR7bGliZGlyfS9saWJ2YS14MTEqJHtTT0xJQlN9IgorRklMRVNfJHtQTn0tdHBpID0rICIke2xpYmRpcn0vbGlidmEtdHBpKiR7U09MSUJTfSIKK0ZJTEVTXyR7UE59LWdseCA9KyAiJHtsaWJkaXJ9L2xpYnZhLWdseCoke1NPTElCU30iCitGSUxFU18ke1BOfS1lZ2wgPSsgIiR7bGliZGlyfS9saWJ2YS1lZ2wqJHtTT0xJQlN9IgorRklMRVNfJHtQTn0td2F5bGFuZCA9KyAiJHtsaWJkaXJ9L2xpYnZhLXdheWxhbmQqJHtTT0xJQlN9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL2ZpbGVzLzAwMDEtTWFrZWZpbGUudnVsa2FuLmFtLWV4cGxpY3RseS1hZGQtbGliLWV4cGF0LXRvLWludGVsLS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9maWxlcy8wMDAxLU1ha2VmaWxlLnZ1bGthbi5hbS1leHBsaWN0bHktYWRkLWxpYi1leHBhdC10by1pbnRlbC0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQxZTg2MwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9maWxlcy8wMDAxLU1ha2VmaWxlLnZ1bGthbi5hbS1leHBsaWN0bHktYWRkLWxpYi1leHBhdC10by1pbnRlbC0ucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorRnJvbSAzNDIzMTFkYmIxOTA3MzViN2IzMmFiMjBmODFjMWQ4ZGJjZmU3MTdhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxMSBPY3QgMjAxNyAxNTo0MDo0MiArMDgwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZS52dWxrYW4uYW06IGV4cGxpY3RseSBhZGQgbGliIGV4cGF0IHRvIGludGVsCisgbGlidnVsa2FuJ3MgbGliIGRlcGVuZHMKKworV2hpbGUgYnVpbHQgd2l0aCAiLWZ2aXNpYmlsaXR5PWRlZmF1bHQiCisuLi4KK3xpNTg2LW9lLWxpbnV4LWdjYyAuLi4gLWZ2aXNpYmlsaXR5PWRlZmF1bHQgLi4uIC1vIGNvbW1vbi8ubGlicy9jb21tb25fbGliaW50ZWxfY29tbW9uX2xhLWdlbl9kZWNvZGVyLm8KKy4uLgorCitJdCB0cmlnZ2VyZWQgdGhlIGZhaWx1cmUKKy4uLgorfGk1ODYtb2UtbGludXgtZysrICAuLi4gY29tbW9uLy5saWJzL2xpYmludGVsX2NvbW1vbi5hIC4uLiAtbyB2dWxrYW4vLmxpYnMvbGlidnVsa2FuX2ludGVsLnNvCit8Y29tbW9uLy5saWJzL2xpYmludGVsX2NvbW1vbi5hKGNvbW1vbl9saWJpbnRlbF9jb21tb25fbGEtZ2VuX2RlY29kZXIubyk6Cit8SW4gZnVuY3Rpb24gYHN0YXJ0X2VsZW1lbnQnOgorfC91c3Ivc3JjL2RlYnVnL21lc2EvMl8xNy4xLjctcjAvbWVzYS0xNy4xLjcvc3JjL2ludGVsL2NvbW1vbi9nZW5fZGVjb2Rlci5jOjM3MToKK3VuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFhNTF9HZXRDdXJyZW50TGluZU51bWJlcicKKy4uLgorCitleHBsaWN0bHkgYWRkIEVYUEFUX0xJQlMgdG8gaW50ZWwncyBWVUxLQU5fTElCX0RFUFMKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW21lc2EtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZ10KKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL2ludGVsL01ha2VmaWxlLnZ1bGthbi5hbSB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2ludGVsL01ha2VmaWxlLnZ1bGthbi5hbSBiL3NyYy9pbnRlbC9NYWtlZmlsZS52dWxrYW4uYW0KK2luZGV4IDI3MWIwYTUuLjhmYmUyYzggMTAwNjQ0CistLS0gYS9zcmMvaW50ZWwvTWFrZWZpbGUudnVsa2FuLmFtCisrKysgYi9zcmMvaW50ZWwvTWFrZWZpbGUudnVsa2FuLmFtCitAQCAtMTQ0LDYgKzE0NCw3IEBAIFZVTEtBTl9MSUJfREVQUyA9IFwKKyAJJChMSUJEUk1fTElCUykgXAorIAkkKFBUSFJFQURfTElCUykgXAorIAkkKERMT1BFTl9MSUJTKSBcCisrCSQoRVhQQVRfTElCUykgXAorIAktbG0KKyAKKyBpZiBIQVZFX1BMQVRGT1JNX1gxMQorLS0gCisyLjcuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvZmlsZXMvMDAwMS1Vc2Utd2F5bGFuZC1zY2FubmVyLWluLXRoZS1wYXRoLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL2ZpbGVzLzAwMDEtVXNlLXdheWxhbmQtc2Nhbm5lci1pbi10aGUtcGF0aC5wYXRjaAppbmRleCBlNDk2OTViLi5lYjZmZjRmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvZmlsZXMvMDAwMS1Vc2Utd2F5bGFuZC1zY2FubmVyLWluLXRoZS1wYXRoLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9maWxlcy8wMDAxLVVzZS13YXlsYW5kLXNjYW5uZXItaW4tdGhlLXBhdGgucGF0Y2gKQEAgLTEsNCArMSw0IEBACi1Gcm9tIDJmNjhmY2FhZjQ5NjRlN2ZlZWIzODNmNWMyNjg1MTk2NWNkYTAzN2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIGM5MDhmMGMxM2FjODFhM2E1MjE0MGYxMjlhMTNiMmJjOTk3ZmY0ZWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgogRGF0ZTogVHVlLCAxNSBOb3YgMjAxNiAxNToyMDo0OSArMDIwMAogU3ViamVjdDogW1BBVENIXSBTaW1wbGlmeSB3YXlsYW5kLXNjYW5uZXIgbG9va3VwCkBAIC0xNSwyMyArMTUsMjMgQEAKICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDYgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IGU1NmUzNWEuLmE5MjAwNWEgMTAwNjQ0CitpbmRleCAyYzdlNjM2ZmFjLi5kMmIyMzUwNzM5IDEwMDY0NAogLS0tIGEvY29uZmlndXJlLmFjCiArKysgYi9jb25maWd1cmUuYWMKLUBAIC0yMDIwLDEyICsyMDIwLDcgQEAgaWYgdGVzdCAieCR3aXRoX2VnbF9wbGF0Zm9ybXMiICE9ICJ4IiAtYSAieCRlbmFibGVfZWdsIiAhPSB4eWVzOyB0aGVuCi0gICAgIEFDX01TR19FUlJPUihbY2Fubm90IGJ1aWxkIGVnbCBzdGF0ZSB0cmFja2VyIHdpdGhvdXQgRUdMIGxpYnJhcnldKQorQEAgLTIxNzQsMTIgKzIxNzQsNyBAQCBpZiB0ZXN0ICJ4JHdpdGhfcGxhdGZvcm1zIiAhPSB4YXV0bzsgdGhlbgorICAgICB3aXRoX2VnbF9wbGF0Zm9ybXM9JHdpdGhfcGxhdGZvcm1zCiAgZmkKICAKIC1QS0dfQ0hFQ0tfTU9EVUxFUyhbV0FZTEFORF9TQ0FOTkVSXSwgW3dheWxhbmQtc2Nhbm5lcl0sCiAtICAgICAgICBXQVlMQU5EX1NDQU5ORVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9d2F5bGFuZF9zY2FubmVyIHdheWxhbmQtc2Nhbm5lcmAsCiAtICAgICAgICBXQVlMQU5EX1NDQU5ORVI9JycpCiAtaWYgdGVzdCAieCRXQVlMQU5EX1NDQU5ORVIiID0geDsgdGhlbgotLSAgICBBQ19QQVRIX1BST0coW1dBWUxBTkRfU0NBTk5FUl0sIFt3YXlsYW5kLXNjYW5uZXJdKQorLSAgICBBQ19QQVRIX1BST0coW1dBWUxBTkRfU0NBTk5FUl0sIFt3YXlsYW5kLXNjYW5uZXJdLCBbOl0pCiAtZmkKICtBQ19QQVRIX1BST0coW1dBWUxBTkRfU0NBTk5FUl0sIFt3YXlsYW5kLXNjYW5uZXJdKQogIAogICMgRG8gcGVyLUVHTCBwbGF0Zm9ybSBzZXR1cHMgYW5kIGNoZWNrcwogIGVnbF9wbGF0Zm9ybXM9YElGUz0nLCAnOyBlY2hvICR3aXRoX2VnbF9wbGF0Zm9ybXNgCiAtLSAKLTIuMS40CisyLjEzLjAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL2ZpbGVzLzAwMDEtYWMtZml4LWJ1aWxkLWFmdGVyLUxMVk0tNS4wLVNWTi1yMzAwNzE4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL2ZpbGVzLzAwMDEtYWMtZml4LWJ1aWxkLWFmdGVyLUxMVk0tNS4wLVNWTi1yMzAwNzE4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyN2EzYmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvZmlsZXMvMDAwMS1hYy1maXgtYnVpbGQtYWZ0ZXItTExWTS01LjAtU1ZOLXIzMDA3MTgucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSA5ODYxNDM3ZTU4ZmRkMGRlMDExOTNhMTAyNjA4ZDM0ZTU5NTI5NTNmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hyaXN0b3BoIEhhYWcgPGhhYWdjaCttZXNhZGV2QGZyaWNrZWwuY2x1Yj4KK0RhdGU6IFRodSwgMjAgQXByIDIwMTcgMTA6MzQ6MTggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIGFjOiBmaXggYnVpbGQgYWZ0ZXIgTExWTSA1LjAgU1ZOIHIzMDA3MTgKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKwordjI6IHByZXZpb3VzbHkgZ2V0V2l0aERlcmVmZXJlbmNlYWJsZUJ5dGVzKCkgZXhpc3RzLCBidXQgYWRkQXR0cigpIGRvZXNuJ3QgdGFrZSB0aGF0IHR5cGUKKworU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoIEhhYWcgPGhhYWdjaCttZXNhZGV2QGZyaWNrZWwuY2x1Yj4KK1Jldmlld2VkLWJ5OiBOaWNvbGFpIEjDpGhubGUgPG5pY29sYWkuaGFlaG5sZUBhbWQuY29tPgorVGVzdGVkLWFuZC1yZXZpZXdlZC1ieTogTWlrZSBMb3RoaWFuIDxtaWtlQGZpcmVidXJuLmNvLnVrPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKyBzcmMvYW1kL2NvbW1vbi9hY19sbHZtX2hlbHBlci5jcHAgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvYW1kL2NvbW1vbi9hY19sbHZtX2hlbHBlci5jcHAgYi9zcmMvYW1kL2NvbW1vbi9hY19sbHZtX2hlbHBlci5jcHAKK2luZGV4IGQ5ZWE0YjEuLjExZmE4MDkgMTAwNjQ0CistLS0gYS9zcmMvYW1kL2NvbW1vbi9hY19sbHZtX2hlbHBlci5jcHAKKysrKyBiL3NyYy9hbWQvY29tbW9uL2FjX2xsdm1faGVscGVyLmNwcAorQEAgLTQ0LDkgKzQ0LDEzIEBAIHR5cGVkZWYgQXR0cmlidXRlU2V0IEF0dHJpYnV0ZUxpc3Q7Cisgdm9pZCBhY19hZGRfYXR0cl9kZXJlZmVyZW5jZWFibGUoTExWTVZhbHVlUmVmIHZhbCwgdWludDY0X3QgYnl0ZXMpCisgeworICAgIGxsdm06OkFyZ3VtZW50ICpBID0gbGx2bTo6dW53cmFwPGxsdm06OkFyZ3VtZW50Pih2YWwpOworKyNpZiBIQVZFX0xMVk0gPCAweDA1MDAKKyAgICBsbHZtOjpBdHRyQnVpbGRlciBCOworICAgIEIuYWRkRGVyZWZlcmVuY2VhYmxlQXR0cihieXRlcyk7CisgICAgQS0+YWRkQXR0cihsbHZtOjpBdHRyaWJ1dGVMaXN0OjpnZXQoQS0+Z2V0Q29udGV4dCgpLCBBLT5nZXRBcmdObygpICsgMSwgIEIpKTsKKysjZWxzZQorKyAgIEEtPmFkZEF0dHIobGx2bTo6QXR0cmlidXRlOjpnZXRXaXRoRGVyZWZlcmVuY2VhYmxlQnl0ZXMoQS0+Z2V0Q29udGV4dCgpLCBieXRlcykpOworKyNlbmRpZgorIH0KKyAKKyBib29sIGFjX2lzX3NncHJfcGFyYW0oTExWTVZhbHVlUmVmIGFyZykKKy0tIAorMi4xMy4zCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9maWxlcy8wMDAxLWNvbmZpZ3VyZS5hYy1BbHdheXMtY2hlY2stZm9yLWV4cGF0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL2ZpbGVzLzAwMDEtY29uZmlndXJlLmFjLUFsd2F5cy1jaGVjay1mb3ItZXhwYXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc1M2M0OQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9maWxlcy8wMDAxLWNvbmZpZ3VyZS5hYy1BbHdheXMtY2hlY2stZm9yLWV4cGF0LnBhdGNoCkBAIC0wLDAgKzEsNTEgQEAKK0Zyb20gMWY3ZDc1MjE5M2YwMmQxNWQ1OTIzY2VlOTkyZThmNDZkNGM2ZGYxYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBNb24sIDI4IEF1ZyAyMDE3IDEzOjUxOjQ5ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZS5hYzogQWx3YXlzIGNoZWNrIGZvciBleHBhdAorCitleHBhdCB3YXMgbm90IGNoZWNrZWQgaWYgZHJpIHdhcyBub3QgYnVpbHQgbGVhZGluZyB0byBidWlsZCBmYWlsdXJlCitpbiB2dWxrYW4gZHJpdmVyOiBiYWNrcG9ydCBhIGZpeCAoYSBjb21iaW5hdGlvbiBvZiBtdWx0aXBsZSBjb21taXRzCit0aGF0IHNob3VsZCBlbmQgdXAgaW4gMTcuMykuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAxNSArKysrKystLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBmZDM0NmM4YWEyLi42NjJmYWVjZWZhIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xNzc3LDYgKzE3NzcsMTIgQEAgaWYgdGVzdCAieCR3aXRoX2RyaV9kcml2ZXJzIiA9IHhubzsgdGhlbgorICAgICB3aXRoX2RyaV9kcml2ZXJzPScnCisgZmkKKyAKKysjIENoZWNrIGZvciBleHBhdAorK1BLR19DSEVDS19NT0RVTEVTKFtFWFBBVF0sIFtleHBhdF0pCisrUEtHX0NIRUNLX01PRFVMRVMoW0VYUEFUXSwgW2V4cGF0XSwsCisrICAgIFtQS0dfQ0hFQ0tfTU9EVUxFUyhbRVhQQVRdLCBbZXhwYXQyMV0pXQorKykKKysKKyBkbmwgSWYgJHdpdGhfZHJpX2RyaXZlcnMgaXMgeWVzLCBkcml2ZXJzIHdpbGwgYmUgYWRkZWQgdGhyb3VnaAorIGRubCBwbGF0Zm9ybSBjaGVja3MuIFNldCBERUZJTkVTIGFuZCBMSUJfREVQUworIGlmIHRlc3QgIngkZW5hYmxlX2RyaSIgPSB4eWVzOyB0aGVuCitAQCAtMTgxMCwxNSArMTgxNiw2IEBAIGlmIHRlc3QgIngkZW5hYmxlX2RyaSIgPSB4eWVzOyB0aGVuCisgICAgICAgICB3aXRoX2RyaV9kcml2ZXJzPSJpOTE1IGk5NjUgbm91dmVhdSByMjAwIHJhZGVvbiBzd3Jhc3QiCisgICAgIGZpCisgCistICAgICMgQ2hlY2sgZm9yIGV4cGF0CistICAgIFBLR19DSEVDS19NT0RVTEVTKFtFWFBBVF0sIFtleHBhdF0sIFtdLAorLSAgICAgICAgIyBleHBhdCB2ZXJzaW9uIDIuMCBhbmQgZWFybGllciBkbyBub3QgcHJvdmlkZSBleHBhdC5wYworLSAgICAgICAgW0FDX0NIRUNLX0hFQURFUihbZXhwYXQuaF0sW10sCistICAgICAgICAgICAgICAgICAgICAgICAgIFtBQ19NU0dfRVJST1IoW0V4cGF0IGhlYWRlcnMgcmVxdWlyZWQgZm9yIERSSSBub3QgZm91bmRdKV0pCistICAgICAgICAgQUNfQ0hFQ0tfTElCKFtleHBhdF0sW1hNTF9QYXJzZXJDcmVhdGVdLFtdLAorLSAgICAgICAgICAgICAgICAgICAgIFtBQ19NU0dfRVJST1IoW0V4cGF0IGxpYnJhcnkgcmVxdWlyZWQgZm9yIERSSSBub3QgZm91bmRdKV0pCistICAgICAgICAgRVhQQVRfTElCUz0iLWxleHBhdCJdKQorLQorICAgICAjIHB1dCBhbGwgdGhlIG5lY2Vzc2FyeSBsaWJzIHRvZ2V0aGVyCisgICAgIERSSV9MSUJfREVQUz0iJERSSV9MSUJfREVQUyAkU0VMSU5VWF9MSUJTICRMSUJEUk1fTElCUyAkRVhQQVRfTElCUyAtbG0gJFBUSFJFQURfTElCUyAkRExPUEVOX0xJQlMiCisgZmkKKy0tIAorMi4xNC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9maWxlcy8wMDAxLXdpbnN5cy1zdmdhLWRybS1JbmNsdWRlLXN5cy10eXBlcy5oLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL2ZpbGVzLzAwMDEtd2luc3lzLXN2Z2EtZHJtLUluY2x1ZGUtc3lzLXR5cGVzLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ5Yjg2NwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9maWxlcy8wMDAxLXdpbnN5cy1zdmdhLWRybS1JbmNsdWRlLXN5cy10eXBlcy5oLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gZDg3NTA3NzY0MDRiMTAzMWQ3NjI5NjZkMGY1NTFkMTNkMmZlMDVhNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE2IEF1ZyAyMDE3IDE4OjU4OjIwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHdpbnN5cy9zdmdhL2RybTogSW5jbHVkZSBzeXMvdHlwZXMuaAorCit2bXdfc2NyZWVuLmggdXNlcyBkZXZfdCB3aGljaCBpcyBkZWZpbmVzIGluIHN5cy90eXBlcy5oCit0aGlzIGhlYWRlciBpcyByZXF1aXJlZCB0byBiZSBpbmNsdWRlZCBmb3IgZ2V0dGluZyBkZXZfdAorZGVmaW5pdGlvbi4gVGhpcyBpc3N1ZSBoYXBwZW5zIG9uIG11c2wgQyBsaWJyYXJ5LCBpdCBpcyBoaWRkZW4KK29uIGdsaWJjIHNpbmNlIHN5cy90eXBlcy5oIGlzIGluY2x1ZGVkIHRocm91Z2ggYW5vdGhlcgorc3lzdGVtIGhlYWRlcnMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCisgc3JjL2dhbGxpdW0vd2luc3lzL3N2Z2EvZHJtL3Ztd19zY3JlZW4uaCB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2dhbGxpdW0vd2luc3lzL3N2Z2EvZHJtL3Ztd19zY3JlZW4uaCBiL3NyYy9nYWxsaXVtL3dpbnN5cy9zdmdhL2RybS92bXdfc2NyZWVuLmgKK2luZGV4IDBlZjhlODQuLjJlZGE5N2UgMTAwNjQ0CistLS0gYS9zcmMvZ2FsbGl1bS93aW5zeXMvc3ZnYS9kcm0vdm13X3NjcmVlbi5oCisrKysgYi9zcmMvZ2FsbGl1bS93aW5zeXMvc3ZnYS9kcm0vdm13X3NjcmVlbi5oCitAQCAtNDEsNiArNDEsNyBAQAorICNpbmNsdWRlICJzdmdhX3dpbnN5cy5oIgorICNpbmNsdWRlICJwaXBlYnVmZmVyL3BiX2J1ZmZlcl9mZW5jZWQuaCIKKyAjaW5jbHVkZSA8b3Mvb3NfdGhyZWFkLmg+CisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIAorICNkZWZpbmUgVk1XX0dNUl9QT09MX1NJWkUgKDE2KjEwMjQqMTAyNCkKKyAjZGVmaW5lIFZNV19RVUVSWV9QT09MX1NJWkUgKDgxOTIpCistLSAKKzIuMTQuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvZmlsZXMvMDAwMi1nYWxsaXZtLUZpeC1idWlsZC1hZ2FpbnN0LUxMVk0tU1ZOLXIzMDI1ODkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvZmlsZXMvMDAwMi1nYWxsaXZtLUZpeC1idWlsZC1hZ2FpbnN0LUxMVk0tU1ZOLXIzMDI1ODkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM4Y2FlYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9maWxlcy8wMDAyLWdhbGxpdm0tRml4LWJ1aWxkLWFnYWluc3QtTExWTS1TVk4tcjMwMjU4OS5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitGcm9tIGEwMmEwZGZkYTI3MTJkMzBhZDYyYjhmMDQyMWVjN2I4MjQ0YmEyY2IgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/TWljaGVsPTIwRD1DMz1BNG56ZXI/PSA8bWljaGVsLmRhZW56ZXJAYW1kLmNvbT4KK0RhdGU6IFdlZCwgMTAgTWF5IDIwMTcgMTc6MjY6MDcgKzA5MDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIGdhbGxpdm06IEZpeCBidWlsZCBhZ2FpbnN0IExMVk0gU1ZOID49IHIzMDI1ODkKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworZGVyZWdpc3RlckVIRnJhbWVzIGRvZXNuJ3QgdGFrZSBhbnkgcGFyYW1ldGVycyBhbnltb3JlLgorCitSZXZpZXdlZC1ieTogVmVkcmFuIE1pbGV0acSHIDx2ZWRyYW5AbWlsZXRpYy5uZXQ+CitSZXZpZXdlZC1ieTogTWFyZWsgT2zFocOhayA8bWFyZWsub2xzYWtAYW1kLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisgc3JjL2dhbGxpdW0vYXV4aWxpYXJ5L2dhbGxpdm0vbHBfYmxkX21pc2MuY3BwIHwgMTIgKysrKysrKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9nYWxsaXVtL2F1eGlsaWFyeS9nYWxsaXZtL2xwX2JsZF9taXNjLmNwcCBiL3NyYy9nYWxsaXVtL2F1eGlsaWFyeS9nYWxsaXZtL2xwX2JsZF9taXNjLmNwcAoraW5kZXggMmEzODhjYi4uMGU0YTUzMSAxMDA2NDQKKy0tLSBhL3NyYy9nYWxsaXVtL2F1eGlsaWFyeS9nYWxsaXZtL2xwX2JsZF9taXNjLmNwcAorKysrIGIvc3JjL2dhbGxpdW0vYXV4aWxpYXJ5L2dhbGxpdm0vbHBfYmxkX21pc2MuY3BwCitAQCAtMzQyLDE0ICszNDIsMjAgQEAgY2xhc3MgRGVsZWdhdGluZ0pJVE1lbW9yeU1hbmFnZXIgOiBwdWJsaWMgQmFzZU1lbW9yeU1hbmFnZXIgeworICAgICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckVIRnJhbWVzKHVpbnQ4X3QgKkFkZHIsIHVpbnQ2NF90IExvYWRBZGRyLCBzaXplX3QgU2l6ZSkgeworICAgICAgICAgIG1ncigpLT5yZWdpc3RlckVIRnJhbWVzKEFkZHIsIExvYWRBZGRyLCBTaXplKTsKKyAgICAgICB9CistICAgICAgdmlydHVhbCB2b2lkIGRlcmVnaXN0ZXJFSEZyYW1lcyh1aW50OF90ICpBZGRyLCB1aW50NjRfdCBMb2FkQWRkciwgc2l6ZV90IFNpemUpIHsKKy0gICAgICAgICBtZ3IoKS0+ZGVyZWdpc3RlckVIRnJhbWVzKEFkZHIsIExvYWRBZGRyLCBTaXplKTsKKy0gICAgICB9CisgI2Vsc2UKKyAgICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJFSEZyYW1lcyhsbHZtOjpTdHJpbmdSZWYgU2VjdGlvbkRhdGEpIHsKKyAgICAgICAgICBtZ3IoKS0+cmVnaXN0ZXJFSEZyYW1lcyhTZWN0aW9uRGF0YSk7CisgICAgICAgfQorICNlbmRpZgorKyNpZiBIQVZFX0xMVk0gPj0gMHgwNTAwCisrICAgICAgdmlydHVhbCB2b2lkIGRlcmVnaXN0ZXJFSEZyYW1lcygpIHsKKysgICAgICAgICBtZ3IoKS0+ZGVyZWdpc3RlckVIRnJhbWVzKCk7CisrICAgICAgfQorKyNlbGlmIEhBVkVfTExWTSA+PSAweDAzMDQKKysgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWdpc3RlckVIRnJhbWVzKHVpbnQ4X3QgKkFkZHIsIHVpbnQ2NF90IExvYWRBZGRyLCBzaXplX3QgU2l6ZSkgeworKyAgICAgICAgIG1ncigpLT5kZXJlZ2lzdGVyRUhGcmFtZXMoQWRkciwgTG9hZEFkZHIsIFNpemUpOworKyAgICAgIH0KKysjZW5kaWYKKyAgICAgICB2aXJ0dWFsIHZvaWQgKmdldFBvaW50ZXJUb05hbWVkRnVuY3Rpb24oY29uc3Qgc3RkOjpzdHJpbmcgJk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgQWJvcnRPbkZhaWx1cmU9dHJ1ZSkgeworICAgICAgICAgIHJldHVybiBtZ3IoKS0+Z2V0UG9pbnRlclRvTmFtZWRGdW5jdGlvbihOYW1lLCBBYm9ydE9uRmFpbHVyZSk7CistLSAKKzIuMTMuMworCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvZmlsZXMvMDAwMi1oYXJkd2FyZS1nbG9hdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9maWxlcy8wMDAyLWhhcmR3YXJlLWdsb2F0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMDE0ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvZmlsZXMvMDAwMi1oYXJkd2FyZS1nbG9hdC5wYXRjaApAQCAtMCwwICsxLDUxIEBACitGcm9tIDAwYmNkNTk5MzEwZGM3ZmNlNGZlMzM2ZmZkODU5MDI0MjkwNTFhMGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBJZ29yIEduYXRlbmtvIDxpLmduYXRlbmtvLmJyYWluQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMjAgTWFyIDIwMTYgMTM6Mjc6MDQgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzRdIGhhcmR3YXJlIGdsb2F0CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbm90IGF1dGhvcl0KK1NpZ25lZC1vZmYtYnk6IElnb3IgR25hdGVua28gPGkuZ25hdGVua28uYnJhaW5AZ21haWwuY29tPgorLS0tCisgc3JjL2dhbGxpdW0vZHJpdmVycy9sbHZtcGlwZS9scF9zY3JlZW4uYyB8IDcgKysrKysrKworIHNyYy9nYWxsaXVtL2RyaXZlcnMvc29mdHBpcGUvc3Bfc2NyZWVuLmMgfCA3ICsrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9nYWxsaXVtL2RyaXZlcnMvbGx2bXBpcGUvbHBfc2NyZWVuLmMgYi9zcmMvZ2FsbGl1bS9kcml2ZXJzL2xsdm1waXBlL2xwX3NjcmVlbi5jCitpbmRleCA0ZjYxZGU4Li4zYjBlYzc3IDEwMDY0NAorLS0tIGEvc3JjL2dhbGxpdW0vZHJpdmVycy9sbHZtcGlwZS9scF9zY3JlZW4uYworKysrIGIvc3JjL2dhbGxpdW0vZHJpdmVycy9sbHZtcGlwZS9scF9zY3JlZW4uYworQEAgLTQxMSw2ICs0MTEsMTMgQEAgbGx2bXBpcGVfaXNfZm9ybWF0X3N1cHBvcnRlZCggc3RydWN0IHBpcGVfc2NyZWVuICpfc2NyZWVuLAorICAgIGlmICghZm9ybWF0X2Rlc2MpCisgICAgICAgcmV0dXJuIEZBTFNFOworIAorKyAgIGlmICgoYmluZCAmIFBJUEVfQklORF9SRU5ERVJfVEFSR0VUKSAmJgorKyAgICAgICBmb3JtYXQgIT0gUElQRV9GT1JNQVRfUjlHOUI5RTVfRkxPQVQgJiYKKysgICAgICAgZm9ybWF0ICE9IFBJUEVfRk9STUFUX1IxMUcxMUIxMF9GTE9BVCAmJgorKyAgICAgICB1dGlsX2Zvcm1hdF9pc19mbG9hdChmb3JtYXQpKSB7CisrICAgICAgcmV0dXJuIEZBTFNFOworKyAgIH0KKysKKyAgICBhc3NlcnQodGFyZ2V0ID09IFBJUEVfQlVGRkVSIHx8CisgICAgICAgICAgIHRhcmdldCA9PSBQSVBFX1RFWFRVUkVfMUQgfHwKKyAgICAgICAgICAgdGFyZ2V0ID09IFBJUEVfVEVYVFVSRV8xRF9BUlJBWSB8fAorZGlmZiAtLWdpdCBhL3NyYy9nYWxsaXVtL2RyaXZlcnMvc29mdHBpcGUvc3Bfc2NyZWVuLmMgYi9zcmMvZ2FsbGl1bS9kcml2ZXJzL3NvZnRwaXBlL3NwX3NjcmVlbi5jCitpbmRleCAwMzE2MDJiLi5jMjc5MTIwIDEwMDY0NAorLS0tIGEvc3JjL2dhbGxpdW0vZHJpdmVycy9zb2Z0cGlwZS9zcF9zY3JlZW4uYworKysrIGIvc3JjL2dhbGxpdW0vZHJpdmVycy9zb2Z0cGlwZS9zcF9zY3JlZW4uYworQEAgLTM1OCw2ICszNTgsMTMgQEAgc29mdHBpcGVfaXNfZm9ybWF0X3N1cHBvcnRlZCggc3RydWN0IHBpcGVfc2NyZWVuICpzY3JlZW4sCisgICAgaWYgKCFmb3JtYXRfZGVzYykKKyAgICAgICByZXR1cm4gRkFMU0U7CisgCisrICAgaWYgKChiaW5kICYgUElQRV9CSU5EX1JFTkRFUl9UQVJHRVQpICYmCisrICAgICAgIGZvcm1hdCAhPSBQSVBFX0ZPUk1BVF9SOUc5QjlFNV9GTE9BVCAmJgorKyAgICAgICBmb3JtYXQgIT0gUElQRV9GT1JNQVRfUjExRzExQjEwX0ZMT0FUICYmCisrICAgICAgIHV0aWxfZm9ybWF0X2lzX2Zsb2F0KGZvcm1hdCkpIHsKKysgICAgICByZXR1cm4gRkFMU0U7CisrICAgfQorKworICAgIGlmIChzYW1wbGVfY291bnQgPiAxKQorICAgICAgIHJldHVybiBGQUxTRTsKKyAKKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL2ZpbGVzL2xsdm0tY29uZmlnLXZlcnNpb24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvZmlsZXMvbGx2bS1jb25maWctdmVyc2lvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTMzYTFlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL2ZpbGVzL2xsdm0tY29uZmlnLXZlcnNpb24ucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorV2hlbiBidWlsZGluZyBsbHZtIGZyb20gZ2l0IG9yIHN2biBpdCBlbWJlZHMgdGhlIHN2bi9naXQgcmV2aXNpb24gaW50byBpbnRlcm5hbCB2ZXJzaW9uIHN0cmluZworCiskIC9tbnQvYS9vZS9idWlsZC90bXAvd29yay9jb3JlaTctNjQtYmVjLWxpbnV4L21lc2EvMl8xNy4xLjUtcjAvcmVjaXBlLXN5c3Jvb3QvdXNyL2xpYi9sbHZtNS4wL2xsdm0tY29uZmlnLWhvc3QgLS12ZXJzaW9uCis1LjAuMGdpdC05YTVjMzMzMzg4YworCitXZSBuZWVkIHRvIGlnbm9yZSBldmVyeXRoaW5nIGFmdGVyIDUuMC4wIHdoaWNoIGlzIHdoYXQgdGhlIGN1dCBjbWQgaXMgZG9pbmcKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogbWVzYS0xNy4xLjUvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWVzYS0xNy4xLjUub3JpZy9jb25maWd1cmUuYWMKKysrKyBtZXNhLTE3LjEuNS9jb25maWd1cmUuYWMKK0BAIC05NjcsNyArOTY3LDcgQEAgc3RyaXBfdW53YW50ZWRfbGx2bV9mbGFncygpIHsKKyAKKyBsbHZtX3NldF9lbnZpcm9ubWVudF92YXJpYWJsZXMoKSB7CisgICAgIGlmIHRlc3QgIngkTExWTV9DT05GSUciICE9IHhubzsgdGhlbgorLSAgICAgICAgTExWTV9WRVJTSU9OPWAkTExWTV9DT05GSUcgLS12ZXJzaW9uIHwgZWdyZXAgLW8gJ15bWzAtOS5dXSsnYAorKyAgICAgICAgTExWTV9WRVJTSU9OPWAkTExWTV9DT05GSUcgLS12ZXJzaW9uIHwgY3V0IC1jMS01YAorICAgICAgICAgTExWTV9DUFBGTEFHUz1gc3RyaXBfdW53YW50ZWRfbGx2bV9mbGFncyAiJExMVk1fQ09ORklHIC0tY3BwZmxhZ3MiYAorICAgICAgICAgTExWTV9JTkNMVURFRElSPWAkTExWTV9DT05GSUcgLS1pbmNsdWRlZGlyYAorICAgICAgICAgTExWTV9MSUJESVI9YCRMTFZNX0NPTkZJRyAtLWxpYmRpcmAKK0BAIC0yNTYwLDcgKzI1NjAsNyBAQCBpZiB0ZXN0ICJ4JGVuYWJsZV9sbHZtIiA9IHh5ZXM7IHRoZW4KKyAgICAgZG5sIChTZWUgaHR0cHM6Ly9sbHZtLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD02ODIzKQorICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9sbHZtX3NoYXJlZF9saWJzIiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgIGRubCBXZSBjYW4ndCB1c2UgJExMVk1fVkVSU0lPTiBiZWNhdXNlIGl0IGhhcyAnc3ZuJyBzdHJpcHBlZCBvdXQsCistICAgICAgICBMTFZNX1NPX05BTUU9TExWTS1gJExMVk1fQ09ORklHIC0tdmVyc2lvbmAKKysgICAgICAgIExMVk1fU09fTkFNRT1MTFZNLWAkTExWTV9DT05GSUcgLS12ZXJzaW9ufGN1dCAtYzEtNWAKKyAgICAgICAgIEFTX0lGKFt0ZXN0IC1mICIkTExWTV9MSUJESVIvbGliJExMVk1fU09fTkFNRS4kSU1QX0xJQl9FWFQiXSwgW2xsdm1faGF2ZV9vbmVfc289eWVzXSkKKyAKKyAgICAgICAgIGlmIHRlc3QgIngkbGx2bV9oYXZlX29uZV9zbyIgPSB4eWVzOyB0aGVuCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvZmlsZXMvdnVsa2FuLW1rZGlyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL2ZpbGVzL3Z1bGthbi1ta2Rpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWVlNWVlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL2ZpbGVzL3Z1bGthbi1ta2Rpci5wYXRjaApAQCAtMCwwICsxLDM3IEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSBjNzg5NzlmZDk1YTFjNGY3MzJmN2U2ZWRmMGYzMmM1MjRlNTk1NWI4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK0RhdGU6IFdlZCwgMTIgSnVsIDIwMTcgMTc6MTA6MDcgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gc3JjL2ludGVsL01ha2VmaWxlLnZ1bGthbi5hbTogY3JlYXRlIHRhcmdldCBkaXJlY3RvcmllcyB3aGVuCisgcmVxdWlyZWQKKworSW4gb3V0LW9mLXRyZWUgYnVpbGRzIHNyYy9pbnRlbC92dWxrYW4gd29uJ3QgZXhpc3QsIHNvIGFsd2F5cyBjcmVhdGUgaXQgYmVmb3JlCit3cml0aW5nIGludG8gaXQuCisKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CistLS0KKyBzcmMvaW50ZWwvTWFrZWZpbGUudnVsa2FuLmFtIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9pbnRlbC9NYWtlZmlsZS52dWxrYW4uYW0gYi9zcmMvaW50ZWwvTWFrZWZpbGUudnVsa2FuLmFtCitpbmRleCAzODU3YTVkYzYyLi4yNmU5Y2Q0MTBjIDEwMDY0NAorLS0tIGEvc3JjL2ludGVsL01ha2VmaWxlLnZ1bGthbi5hbQorKysrIGIvc3JjL2ludGVsL01ha2VmaWxlLnZ1bGthbi5hbQorQEAgLTQ0LDExICs0NCwxMyBAQCBFWFRSQV9ESVNUICs9IFwKKyAJdnVsa2FuL1RPRE8KKyAKKyB2dWxrYW4vZGV2X2ljZC5qc29uIDogdnVsa2FuL2Rldl9pY2QuanNvbi5pbgorKwkkKE1LRElSX0dFTikKKyAJJChBTV9WX0dFTikgJChTRUQpIFwKKyAJCS1lICJzI0BidWlsZF9saWJkaXJAIyR7YWJzX3RvcF9idWlsZGRpcn0vJHtMSUJfRElSfSMiIFwKKyAJCTwgJChzcmNkaXIpL3Z1bGthbi9kZXZfaWNkLmpzb24uaW4gPiAkQAorIAorIHZ1bGthbi9pbnRlbF9pY2QuQGhvc3RfY3B1QC5qc29uIDogdnVsa2FuL2ludGVsX2ljZC5qc29uLmluCisrCSQoTUtESVJfR0VOKQorIAkkKEFNX1ZfR0VOKSAkKFNFRCkgXAorIAkJLWUgInMjQGluc3RhbGxfbGliZGlyQCMke2xpYmRpcn0jIiBcCisgCQk8ICQoc3JjZGlyKS92dWxrYW4vaW50ZWxfaWNkLmpzb24uaW4gPiAkQAorLS0gCisyLjExLjAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9saWJnbHVfOS4wLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbGliZ2x1XzkuMC4wLmJiCmluZGV4IDhiOTQ2MTMuLmVlYjg5OGYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9saWJnbHVfOS4wLjAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL2xpYmdsdV85LjAuMC5iYgpAQCAtMTIsNyArMTIsNyBAQAogUEUgPSAiMiIKIFBSID0gIjAiCiAKLVNSQ19VUkkgPSAiZnRwOi8vZnRwLmZyZWVkZXNrdG9wLm9yZy9wdWIvbWVzYS9nbHUvZ2x1LSR7UFZ9LnRhci5iejIiCitTUkNfVVJJID0gImh0dHBzOi8vbWVzYS5mcmVlZGVza3RvcC5vcmcvYXJjaGl2ZS9nbHUvZ2x1LSR7UFZ9LnRhci5iejIiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICJiZTkyNDkxMzJmZjQ5Mjc1NDYxY2Y5MjAzOTA4MzAzMCIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICIxZjdhZDBkMzc5YTcyMmZjYmQzMDNhYTU2NTBjNmQ3ZDU1NDRmZGU4MzE5NmI0MmE3M2QxMTkzNTY4YTRkZjEyIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3NfOC4zLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vc184LjMuMC5iYgppbmRleCBlNDNiOWVmLi5iYWUzYjE4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vc184LjMuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vc184LjMuMC5iYgpAQCAtOSw3ICs5LDcgQEAKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NyYy94ZGVtb3MvZ2x4Z2VhcnMuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT05MTQyMjU3ODU0NTBlZmY2NDRhODZjODcxZDNhZTAwZSBcCiAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMveGRlbW9zL2dseGRlbW8uYztiZWdpbmxpbmU9MTtlbmRsaW5lPTg7bWQ1PWIwMWQ1YWIxYWVlOTRkMzViN2VmYWEyZWY0OGUxYTA2IgogCi1TUkNfVVJJID0gImZ0cDovL2Z0cC5mcmVlZGVza3RvcC5vcmcvcHViL21lc2EvZGVtb3MvJHtQVn0vJHtCUE59LSR7UFZ9LnRhci5iejIgXAorU1JDX1VSSSA9ICJodHRwczovL21lc2EuZnJlZWRlc2t0b3Aub3JnL2FyY2hpdmUvZGVtb3MvJHtQVn0vJHtCUE59LSR7UFZ9LnRhci5iejIgXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1tZXNhLWRlbW9zLUFkZC1taXNzaW5nLWRhdGEtZmlsZXMucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMy1jb25maWd1cmUtQWxsb3ctdG8tZGlzYWJsZS1kZW1vcy13aGljaC1yZXF1aXJlLUdMRVctLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDQtVXNlLURFTU9TX0RBVEFfRElSLXRvLWxvY2F0ZS1kYXRhLWZpbGVzLnBhdGNoIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWdsXzE3LjAuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWdsXzE3LjAuMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM2MDRmMy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1nbF8xNy4wLjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1yZXF1aXJlIG1lc2FfJHtQVn0uYmIKLQotU1VNTUFSWSArPSAiIChPcGVuR0wgb25seSwgbm8gRUdML0dMRVMpIgotCi1GSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9tZXNhOiIKLQotUFJPVklERVMgPSAidmlydHVhbC9saWJnbCB2aXJ0dWFsL21lc2EiCi0KLVMgPSAiJHtXT1JLRElSfS9tZXNhLSR7UFZ9IgotCi1QQUNLQUdFQ09ORklHID8/PSAiZHJpICR7QGJiLnV0aWxzLmZpbHRlcignRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsIGQpfSIKLQotRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1nbF8xNy4xLjcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1nbF8xNy4xLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMyNjdlYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWdsXzE3LjEuNy5iYgpAQCAtMCwwICsxLDkgQEAKK3JlcXVpcmUgbWVzYV8ke1BWfS5iYgorCitTVU1NQVJZICs9ICIgKE9wZW5HTCBvbmx5LCBubyBFR0wvR0xFUykiCisKK1BST1ZJREVTID0gInZpcnR1YWwvbGliZ2wgdmlydHVhbC9tZXNhIgorCitTID0gIiR7V09SS0RJUn0vbWVzYS0ke1BWfSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIm9wZW5nbCBkcmkgJHtAYmIudXRpbHMuZmlsdGVyKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgZCl9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EuaW5jCmluZGV4IDI1Y2JmNjMuLjRmMzFlZDIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS5pbmMKQEAgLTEwLDQ3ICsxMCw2NCBAQAogQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnIgogU0VDVElPTiA9ICJ4MTEiCiBMSUNFTlNFID0gIk1JVCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RvY3MvbGljZW5zZS5odG1sO21kNT04OTlmYmU3ZTQyZDQ5NGM3YzhjMTU5YzcwMDE2OTNkNSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RvY3MvbGljZW5zZS5odG1sO21kNT03MjVmOTkxYTFjYzMyMmFhN2EwY2QzYTIwMTY2MjFjNCIKIAogUEUgPSAiMiIKIAotREVQRU5EUyA9ICJleHBhdCBtYWtlZGVwZW5kLW5hdGl2ZSBmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUgbGlieG1sMi1uYXRpdmUiCi0KK0RFUEVORFMgPSAiZXhwYXQgbWFrZWRlcGVuZC1uYXRpdmUgZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIGxpYnhtbDItbmF0aXZlIHpsaWIgY2hycGF0aC1yZXBsYWNlbWVudC1uYXRpdmUiCitFWFRSQU5BVElWRVBBVEggKz0gImNocnBhdGgtbmF0aXZlIgogUFJPVklERVMgPSAidmlydHVhbC9saWJnbCB2aXJ0dWFsL2xpYmdsZXMxIHZpcnR1YWwvbGliZ2xlczIgdmlydHVhbC9lZ2wgdmlydHVhbC9tZXNhIgogCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgcHl0aG9ubmF0aXZlIGdldHRleHQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKIAotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIm9wZW5nbCIKK0FOWV9PRl9ESVNUUk9fRkVBVFVSRVMgPSAib3BlbmdsIHZ1bGthbiIKIAotZXhwb3J0IExMVk1fQ09ORklHID0gIiR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9L2xsdm0tY29uZmlnIgotRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNoYXJlZC1nbGFwaSIKK1BMQVRGT1JNUyA/Pz0gIiR7QGJiLnV0aWxzLmZpbHRlcignUEFDS0FHRUNPTkZJRycsICd4MTEgd2F5bGFuZCcsIGQpfSBcCisgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdnYm0nLCAnZHJtJywgJycsIGQpfSIKIAotUEFDS0FHRUNPTkZJRyA/Pz0gImdibSBlZ2wgZ2xlcyBkcmkgXAotCQkke0BiYi51dGlscy5maWx0ZXIoJ0RJU1RST19GRUFUVVJFUycsICd3YXlsYW5kIHgxMScsIGQpfSBcCi0JCSIKK2V4cG9ydCBMTFZNX0NPTkZJRyA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vbGx2bS1jb25maWcke01FU0FfTExWTV9SRUxFQVNFfSIKK2V4cG9ydCBZT0NUT19BTFRFUk5BVEVfRVhFX1BBVEggPSAiJHtTVEFHSU5HX0xJQkRJUn0vbGx2bSR7TUVTQV9MTFZNX1JFTEVBU0V9L2xsdm0tY29uZmlnIgorRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNoYXJlZC1nbGFwaSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLW9wZW5jbCBcCisgICAgICAgICAgICAgICAgLS13aXRoLWxsdm0tcHJlZml4PSR7U1RBR0lOR19MSUJESVJ9L2xsdm0ke01FU0FfTExWTV9SRUxFQVNFfSBcCisgICAgICAgICAgICAgICAgLS13aXRoLXBsYXRmb3Jtcz0nJHtQTEFURk9STVN9JyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmZpbHRlcignRElTVFJPX0ZFQVRVUkVTJywgJ3dheWxhbmQgdnVsa2FuJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICdvcGVuZ2wgZWdsIGdsZXMgZ2JtIGRyaScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExIG9wZW5nbCcsICd4MTEnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMSB2dWxrYW4nLCAnZHJpMycsICcnLCBkKX0gXAorCQkgICAiCisKKyMgImdibSIgcmVxdWlyZXMgImRyaSIsICJvcGVuZ2wiCiBQQUNLQUdFQ09ORklHW2dibV0gPSAiLS1lbmFibGUtZ2JtLC0tZGlzYWJsZS1nYm0iCiAKIFgxMV9ERVBTID0gInhmODZkcmlwcm90byBnbHByb3RvIHZpcnR1YWwvbGlieDExIGxpYnhleHQgbGlieHhmODZ2bSBsaWJ4ZGFtYWdlIGxpYnhmaXhlcyIKKyMgIngxMSIgcmVxdWlyZXMgIm9wZW5nbCIKIFBBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS1nbHgtdGxzLC0tZGlzYWJsZS1nbHgsJHtYMTFfREVQU30iCiBQQUNLQUdFQ09ORklHW3h2bWNdID0gIi0tZW5hYmxlLXh2bWMsLS1kaXNhYmxlLXh2bWMsbGlieHZtYyIKLVBBQ0tBR0VDT05GSUdbd2F5bGFuZF0gPSAiLCx3YXlsYW5kLW5hdGl2ZSB3YXlsYW5kIgorUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSA9ICIsLHdheWxhbmQtbmF0aXZlIHdheWxhbmQgbGliZHJtIgogCiBEUklEUklWRVJTID0gInN3cmFzdCIKIERSSURSSVZFUlNfYXBwZW5kX3g4NiA9ICIscmFkZW9uLHIyMDAsbm91dmVhdSxpOTY1LGk5MTUiCiBEUklEUklWRVJTX2FwcGVuZF94ODYtNjQgPSAiLHJhZGVvbixyMjAwLG5vdXZlYXUsaTk2NSxpOTE1IgorIyAiZHJpIiByZXF1aXJlcyAib3BlbmdsIgogUEFDS0FHRUNPTkZJR1tkcmldID0gIi0tZW5hYmxlLWRyaSAtLXdpdGgtZHJpLWRyaXZlcnM9JHtEUklEUklWRVJTfSwgLS1kaXNhYmxlLWRyaSwgZHJpMnByb3RvIGxpYmRybSIKIFBBQ0tBR0VDT05GSUdbZHJpM10gPSAiLS1lbmFibGUtZHJpMywgLS1kaXNhYmxlLWRyaTMsIGRyaTNwcm90byBwcmVzZW50cHJvdG8gbGlieHNobWZlbmNlIgogCiAjIFZ1bGthbiBkcml2ZXJzIG5lZWQgZHJpMyBlbmFibGVkCiAjIHJhZGVvbiBjb3VsZCBiZSBlbmFibGVkIGFzIHdlbGwgYnV0IHJlcXVpcmVzIGdhbGxpdW0tbGx2bSB3aXRoIGxsdm0gPj0gMy45Ci1QQUNLQUdFQ09ORklHW3Z1bGthbl0gPSAiLS13aXRoLXZ1bGthbi1kcml2ZXJzPWludGVsLCAtLXdpdGhvdXQtdnVsa2FuLWRyaXZlcnMiCitWVUxLQU5fRFJJVkVSUyA9ICIiCitWVUxLQU5fRFJJVkVSU19hcHBlbmRfeDg2ID0gIixpbnRlbCIKK1ZVTEtBTl9EUklWRVJTX2FwcGVuZF94ODYtNjQgPSAiLGludGVsIgorUEFDS0FHRUNPTkZJR1t2dWxrYW5dID0gIi0td2l0aC12dWxrYW4tZHJpdmVycz0ke1ZVTEtBTl9EUklWRVJTfSwgLS13aXRob3V0LXZ1bGthbi1kcml2ZXJzIgogCitQQUNLQUdFQ09ORklHW29wZW5nbF0gPSAiLS1lbmFibGUtb3BlbmdsLCAtLWRpc2FibGUtb3BlbmdsIgorCisjICJnbGVzIiByZXF1aXJlcyAib3BlbmdsIgogUEFDS0FHRUNPTkZJR1tnbGVzXSA9ICItLWVuYWJsZS1nbGVzMSAtLWVuYWJsZS1nbGVzMiwgLS1kaXNhYmxlLWdsZXMxIC0tZGlzYWJsZS1nbGVzMiIKIAotRUdMX1BMQVRGT1JNUyAgPSAiZHJtIgotRUdMX1BMQVRGT1JNUyAuPSIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd4MTEnLCAnLHgxMScsICcnLCBkKX0iCi1FR0xfUExBVEZPUk1TIC49IiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3dheWxhbmQnLCAnLHdheWxhbmQnLCAnJywgZCl9IgotUEFDS0FHRUNPTkZJR1tlZ2xdID0gIi0tZW5hYmxlLWVnbCAtLXdpdGgtZWdsLXBsYXRmb3Jtcz0ke0VHTF9QTEFURk9STVN9LCAtLWRpc2FibGUtZWdsIgorIyAiZWdsIiByZXF1aXJlcyAiZHJpIiwgIm9wZW5nbCIKK1BBQ0tBR0VDT05GSUdbZWdsXSA9ICItLWVuYWJsZS1lZ2wsIC0tZGlzYWJsZS1lZ2wiCiAKIFBBQ0tBR0VDT05GSUdbZXRuYXZpdl0gPSAiIgogUEFDS0FHRUNPTkZJR1tpbXhdID0gIiIKQEAgLTY1LDkgKzgyLDkgQEAKIEdBTExJVU1EUklWRVJTX2FwcGVuZF94ODYgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZ2FsbGl1bS1sbHZtJywgJywke0dBTExJVU1EUklWRVJTX0xMVk19JywgJycsIGQpfSIKIEdBTExJVU1EUklWRVJTX2FwcGVuZF94ODYtNjQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZ2FsbGl1bS1sbHZtJywgJywke0dBTExJVU1EUklWRVJTX0xMVk19JywgJycsIGQpfSIKICMga2VlcCAtLXdpdGgtZ2FsbGl1bS1kcml2ZXJzIHNlcGFyYXRlLCBiZWNhdXNlIHdoZW4gb25seSBvbmUgb2YgZ2FsbGl1bSB2ZXJzaW9ucyBpcyBlbmFibGVkLCBvdGhlciAyIHdlcmUgYWRkaW5nIC0td2l0aG91dC1nYWxsaXVtLWRyaXZlcnMKLVBBQ0tBR0VDT05GSUdbZ2FsbGl1bV0gICAgICA9ICItLXdpdGgtZ2FsbGl1bS1kcml2ZXJzPSR7R0FMTElVTURSSVZFUlN9LCAtLXdpdGhvdXQtZ2FsbGl1bS1kcml2ZXJzIgotTUVTQV9MTFZNX1JFTEVBU0UgPz0gIjMuMyIKLVBBQ0tBR0VDT05GSUdbZ2FsbGl1bS1sbHZtXSA9ICItLWVuYWJsZS1nYWxsaXVtLWxsdm0gLS1lbmFibGUtbGx2bS1zaGFyZWQtbGlicywgLS1kaXNhYmxlLWdhbGxpdW0tbGx2bSwgbGx2bSR7TUVTQV9MTFZNX1JFTEVBU0V9IFwKK1BBQ0tBR0VDT05GSUdbZ2FsbGl1bV0gICAgICA9ICItLWVuYWJsZS10ZXh0dXJlLWZsb2F0IC0td2l0aC1nYWxsaXVtLWRyaXZlcnM9JHtHQUxMSVVNRFJJVkVSU30sIC0td2l0aG91dC1nYWxsaXVtLWRyaXZlcnMiCitNRVNBX0xMVk1fUkVMRUFTRSA/PSAiNS4wIgorUEFDS0FHRUNPTkZJR1tnYWxsaXVtLWxsdm1dID0gIi0tZW5hYmxlLWxsdm0gLS1lbmFibGUtbGx2bS1zaGFyZWQtbGlicywgLS1kaXNhYmxlLWxsdm0sIGxsdm0ke01FU0FfTExWTV9SRUxFQVNFfSBsbHZtLW5hdGl2ZSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtAJ2VsZnV0aWxzJyBpZiAke0dBTExJVU1EUklWRVJTX0xMVk0zM19FTkFCTEVEfSBlbHNlICcnfSIKIGV4cG9ydCBXQU5UX0xMVk1fUkVMRUFTRSA9ICIke01FU0FfTExWTV9SRUxFQVNFfSIKIFBBQ0tBR0VDT05GSUdbeGFdICA9ICItLWVuYWJsZS14YSwgLS1kaXNhYmxlLXhhIgpAQCAtNzUsOSArOTIsMTMgQEAKIE9TTUVTQSA9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdnYWxsaXVtJywgJ2dhbGxpdW0tb3NtZXNhJywgJ29zbWVzYScsIGQpfSIKIFBBQ0tBR0VDT05GSUdbb3NtZXNhXSA9ICItLWVuYWJsZS0ke09TTUVTQX0sLS1kaXNhYmxlLSR7T1NNRVNBfSIKIAorUEFDS0FHRUNPTkZJR1t1bndpbmRdID0gIi0tZW5hYmxlLWxpYnVud2luZCwtLWRpc2FibGUtbGlidW53aW5kLGxpYnVud2luZCIKKwogIyBsbHZtcGlwZSBpcyBzbG93IGlmIGNvbXBpbGVkIHdpdGggLWZvbWl0LWZyYW1lLXBvaW50ZXIgKGUuZy4gLU8yKQogRlVMTF9PUFRJTUlaQVRJT05fYXBwZW5kID0gIiAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciIKIAorQ0ZMQUdTX2FwcGVuZF9hcm12NSA9ICIgLURNSVNTSU5HXzY0QklUX0FUT01JQ1MiCisKICMgTXVsdGlwbGUgdmlydHVhbC9nbCBwcm92aWRlcnMgYmVpbmcgYnVpbHQgYnJlYWtzIHN0YWdpbmcKIEVYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgogCkBAIC0xMDYsOSArMTI3LDEwIEBACiAgICAgcm0gLWYgJHtEfSR7bGliZGlyfS9lZ2wvKi5sYQogICAgIHJtIC1mICR7RH0ke2xpYmRpcn0vZ2FsbGl1bS1waXBlLyoubGEKICAgICBybSAtZiAke0R9JHtsaWJkaXJ9L2dibS8qLmxhCi0gICAgCisKICAgICAjIGl0IHdhcyBwYWNrYWdlZCBpbiBsaWJkcmljb3JlOS4xLjMtMSBhbmQgcHJldmVudGluZyB1cGdyYWRlcyB3aGVuIGRlYmlhbi5iYmNsYXNzIHdhcyB1c2VkIAogICAgIHJtIC1mICR7RH0ke3N5c2NvbmZkaXJ9L2RyaXJjCisgICAgY2hycGF0aCAtLWRlbGV0ZSAke0R9JHtsaWJkaXJ9L2RyaS8qX2RyaS5zbyB8fCB0cnVlCiB9CiAKICMgRm9yIHRoZSBwYWNrYWdlcyB0aGF0IG1ha2UgdXAgdGhlIE9wZW5HTCBpbnRlcmZhY2VzLCBpbmplY3QgdmFyaWFibGVzIHNvIHRoYXQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhXzE3LjAuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhXzE3LjAuMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY4OWU4Zi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYV8xNy4wLjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1yZXF1aXJlICR7QlBOfS5pbmMKLQotU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZnJlZWRlc2t0b3Aub3JnL3B1Yi9tZXNhL21lc2EtJHtQVn0udGFyLnh6IFwKLSAgICAgICAgICAgZmlsZTovL3JlcGxhY2VfZ2xpYmNfY2hlY2tfd2l0aF9saW51eC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLWFzbS1vbi1ub24tZ2NjLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtVXNlLXdheWxhbmQtc2Nhbm5lci1pbi10aGUtcGF0aC5wYXRjaCBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI4ZjgwOGU5MmI4OTNkNDEyZmJkNjUxMGUxZDE2ZjVjNSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJmOGYxOTFmOTA5ZTAxZTY1ZGUzOGQ1YmRlYTVmYjA1N2YyMTY0OWEzYWVkMjA5NDhiZTAyMzQ4ZTc3YTY4OWQ0IgotCi0jYmVjYXVzZSB3ZSBjYW5ub3QgcmVseSBvbiB0aGUgZmFjdCB0aGF0IGFsbCBhcHBzIHdpbGwgdXNlIHBrZ2NvbmZpZywKLSNtYWtlIGVnbHBsYXRmb3JtLmggaW5kZXBlbmRlbnQgb2YgTUVTQV9FR0xfTk9fWDExX0hFQURFUgotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0gICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZWdsJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KLSAgICAgICAgc2VkIC1pIC1lICdzL14jaWYgZGVmaW5lZChNRVNBX0VHTF9OT19YMTFfSEVBREVSUykkLyNpZiBkZWZpbmVkKE1FU0FfRUdMX05PX1gxMV9IRUFERVJTKSB8fCAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd4MTEnLCAnMCcsICcxJywgZCl9LycgJHtEfSR7aW5jbHVkZWRpcn0vRUdML2VnbHBsYXRmb3JtLmgKLSAgICBmaQotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2FfMTcuMS43LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2FfMTcuMS43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5Y2ZjZTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYV8xNy4xLjcuYmIKQEAgLTAsMCArMSwyNSBAQAorcmVxdWlyZSAke0JQTn0uaW5jCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9tZXNhLmZyZWVkZXNrdG9wLm9yZy9hcmNoaXZlL21lc2EtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL3JlcGxhY2VfZ2xpYmNfY2hlY2tfd2l0aF9saW51eC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLWFzbS1vbi1ub24tZ2NjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVXNlLXdheWxhbmQtc2Nhbm5lci1pbi10aGUtcGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLWhhcmR3YXJlLWdsb2F0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3Z1bGthbi1ta2Rpci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9sbHZtLWNvbmZpZy12ZXJzaW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtYWMtZml4LWJ1aWxkLWFmdGVyLUxMVk0tNS4wLVNWTi1yMzAwNzE4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItZ2FsbGl2bS1GaXgtYnVpbGQtYWdhaW5zdC1MTFZNLVNWTi1yMzAyNTg5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtd2luc3lzLXN2Z2EtZHJtLUluY2x1ZGUtc3lzLXR5cGVzLmgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUuYWMtQWx3YXlzLWNoZWNrLWZvci1leHBhdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLU1ha2VmaWxlLnZ1bGthbi5hbS1leHBsaWN0bHktYWRkLWxpYi1leHBhdC10by1pbnRlbC0ucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiZTQwYmI0MjhhMjYzYmQyOGNiZjY0NzhkYWU0NWIyMDciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjlmNDcyYTg3NGIxMTIyNDA0ZmEwYmQxM2UyZDZiZjg3ZWIzYjlhZDljMjFkMmYzOTg3MmE5NmQ4M2Q5ZTVmNSIKKworI2JlY2F1c2Ugd2UgY2Fubm90IHJlbHkgb24gdGhlIGZhY3QgdGhhdCBhbGwgYXBwcyB3aWxsIHVzZSBwa2djb25maWcsCisjbWFrZSBlZ2xwbGF0Zm9ybS5oIGluZGVwZW5kZW50IG9mIE1FU0FfRUdMX05PX1gxMV9IRUFERVIKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2VnbCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisgICAgICAgIHNlZCAtaSAtZSAncy9eI2lmIGRlZmluZWQoTUVTQV9FR0xfTk9fWDExX0hFQURFUlMpJC8jaWYgZGVmaW5lZChNRVNBX0VHTF9OT19YMTFfSEVBREVSUykgfHwgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAneDExJywgJzAnLCAnMScsIGQpfS8nICR7RH0ke2luY2x1ZGVkaXJ9L0VHTC9lZ2xwbGF0Zm9ybS5oCisgICAgZmkKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhX2dpdC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAzNDUxNy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYV9naXQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1yZXF1aXJlICR7QlBOfS5pbmMKLQotREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgotCi1TUkNSRVYgPSAiZWEwZDFmNTc1YzIxNGMwOWJhM2RmMTI2NDRhOTYwZTg2ZTAzMTc2NiIKLVBWID0gIjEwLjUuNCtnaXQke1NSQ1BWfSIKLQotU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQvbWVzYS9tZXNhO2JyYW5jaD0xMC41IgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1ERVBFTkRTICs9ICJweXRob24tbWFrby1uYXRpdmUiCi0KLWluaGVyaXQgcHl0aG9ubmF0aXZlCi0KLSNiZWNhdXNlIHdlIGNhbm5vdCByZWx5IG9uIHRoZSBmYWN0IHRoYXQgYWxsIGFwcHMgd2lsbCB1c2UgcGtnY29uZmlnLAotI21ha2UgZWdscGxhdGZvcm0uaCBpbmRlcGVuZGVudCBvZiBNRVNBX0VHTF9OT19YMTFfSEVBREVSCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLSAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdlZ2wnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgotICAgICAgICBzZWQgLWkgLWUgJ3MvXiNpZiBkZWZpbmVkKE1FU0FfRUdMX05PX1gxMV9IRUFERVJTKSQvI2lmIGRlZmluZWQoTUVTQV9FR0xfTk9fWDExX0hFQURFUlMpIHx8ICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3gxMScsICcwJywgJzEnLCBkKX0vJyAke0R9JHtpbmNsdWRlZGlyfS9FR0wvZWdscGxhdGZvcm0uaAotICAgIGZpCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvXzEuNDAuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ29fMS40MC4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjU5YTgyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ29fMS40MC4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotU1VNTUFSWSA9ICJGcmFtZXdvcmsgZm9yIGxheW91dCBhbmQgcmVuZGVyaW5nIG9mIGludGVybmF0aW9uYWxpemVkIHRleHQiCi1ERVNDUklQVElPTiA9ICJQYW5nbyBpcyBhIGxpYnJhcnkgZm9yIGxheWluZyBvdXQgYW5kIHJlbmRlcmluZyBvZiB0ZXh0LCBcCi13aXRoIGFuIGVtcGhhc2lzIG9uIGludGVybmF0aW9uYWxpemF0aW9uLiBQYW5nbyBjYW4gYmUgdXNlZCBhbnl3aGVyZSBcCi10aGF0IHRleHQgbGF5b3V0IGlzIG5lZWRlZCwgdGhvdWdoIG1vc3Qgb2YgdGhlIHdvcmsgb24gUGFuZ28gc28gZmFyIGhhcyBcCi1iZWVuIGRvbmUgaW4gdGhlIGNvbnRleHQgb2YgdGhlIEdUSysgd2lkZ2V0IHRvb2xraXQuIFBhbmdvIGZvcm1zIHRoZSBcCi1jb3JlIG9mIHRleHQgYW5kIGZvbnQgaGFuZGxpbmcgZm9yIEdUSystMi54LiIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cucGFuZ28ub3JnLyIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZyIKLVNFQ1RJT04gPSAibGlicyIKLUxJQ0VOU0UgPSAiTEdQTHYyLjArIgotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyIKLQotaW5oZXJpdCBnbm9tZWJhc2UgZ3RrLWRvYyBwdGVzdC1nbm9tZSB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZ29iamVjdC1pbnRyb3NwZWN0aW9uCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly9ydW4tcHRlc3QgXAotICAgICAgICAgICAgZmlsZTovLzAwMDEtRHJvcC1pbnRyb3NwZWN0aW9uLW1hY3Jvcy1mcm9tLWFjaW5jbHVkZS5tNC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vMDAwMS1FbmZvcmNlLXJlY3JlYXRpb24tb2YtZG9jcy1wYW5nby50eXBlcy1pdC1pcy1idWlsZC1jLnBhdGNoIFwKLSIKLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjE3YzI2NzIwZjVhODYyYTEyZjdlMTc0NWUyZjFkOTY2IgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiYWJiYThiNWNlNzI4NTIwYzNhMGYxNTM1ZWFiMTllYWMzYzE0YWVlZjdmYWE1YWRlZDkwMDE3Y2VhYzI3MTFkMyIKLQotREVQRU5EUyA9ICJnbGliLTIuMCBnbGliLTIuMC1uYXRpdmUgZm9udGNvbmZpZyBmcmVldHlwZSB2aXJ0dWFsL2xpYmljb252IGNhaXJvIGhhcmZidXp6IgotCi1QQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuZmlsdGVyKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgZCl9IgotUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0td2l0aC14ZnQsLS13aXRob3V0LXhmdCx2aXJ0dWFsL2xpYngxMSBsaWJ4ZnQiCi0KLUVYVFJBX0FVVE9SRUNPTkYgPSAiIgotCi1FWFRSQV9PRUNPTkYgPSAiIFwKLQkgICAgICAgIC0tZGlzYWJsZS1kZWJ1ZyBcCi0JICAgICAgICAiCi0KLUxFQURfU09OQU1FID0gImxpYnBhbmdvLTEuMCoiCi1MSUJWID0gIjEuOC4wIgotCi0jIFRoaXMgYmluYXJ5IG5lZWRzIHRvIGJlIGNvbXBpbGVkIGZvciB0aGUgaG9zdCBhcmNoaXRlY3R1cmUuICBUaGlzIGlzbid0IHByZXR0eSEKLWRvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy10YXJnZXQgKCkgewotCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHRlc3QnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgotCQltYWtlIENDPSIke0JVSUxEX0NDfSIgQ0ZMQUdTPSIiIExERkxBR1M9IiR7QlVJTERfTERGTEFHU30iIEFNX0NQUEZMQUdTPSIkKHBrZy1jb25maWctbmF0aXZlIC0tY2ZsYWdzIGdsaWItMi4wKSIgZ2VuX2FsbF91bmljb2RlX0xEQUREPSIkKHBrZy1jb25maWctbmF0aXZlIC0tbGlicyBnbGliLTIuMCkiIC1DICR7Qn0vdGVzdHMgZ2VuLWFsbC11bmljb2RlCi0JZmkKLX0KLQotRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyogJHtsaWJkaXJ9L2xpYnBhbmdvKiR7U09MSUJTfSIKLUZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3BhbmdvLyR7TElCVn0vbW9kdWxlcy8qLmxhIgotCi1SREVQRU5EU18ke1BOfS1wdGVzdCArPSAibGliZXJhdGlvbi1mb250cyBjYW50YXJlbGwtZm9udHMiCi0KLVJQUk9WSURFU18ke1BOfSArPSAicGFuZ28tbW9kdWxlcyBwYW5nby1tb2R1bGUtaW5kaWMtbGFuZyBcCi0gICAgICAgICAgICAgICAgICAgIHBhbmdvLW1vZHVsZS1iYXNpYy1mYyBwYW5nby1tb2R1bGUtYXJhYmljLWxhbmciCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nb18xLjQwLjYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvXzEuNDAuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWMzZDJhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nb18xLjQwLjYuYmIKQEAgLTAsMCArMSw1MiBAQAorU1VNTUFSWSA9ICJGcmFtZXdvcmsgZm9yIGxheW91dCBhbmQgcmVuZGVyaW5nIG9mIGludGVybmF0aW9uYWxpemVkIHRleHQiCitERVNDUklQVElPTiA9ICJQYW5nbyBpcyBhIGxpYnJhcnkgZm9yIGxheWluZyBvdXQgYW5kIHJlbmRlcmluZyBvZiB0ZXh0LCBcCit3aXRoIGFuIGVtcGhhc2lzIG9uIGludGVybmF0aW9uYWxpemF0aW9uLiBQYW5nbyBjYW4gYmUgdXNlZCBhbnl3aGVyZSBcCit0aGF0IHRleHQgbGF5b3V0IGlzIG5lZWRlZCwgdGhvdWdoIG1vc3Qgb2YgdGhlIHdvcmsgb24gUGFuZ28gc28gZmFyIGhhcyBcCitiZWVuIGRvbmUgaW4gdGhlIGNvbnRleHQgb2YgdGhlIEdUSysgd2lkZ2V0IHRvb2xraXQuIFBhbmdvIGZvcm1zIHRoZSBcCitjb3JlIG9mIHRleHQgYW5kIGZvbnQgaGFuZGxpbmcgZm9yIEdUSystMi54LiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cucGFuZ28ub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjArIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3RrLWRvYyBwdGVzdC1nbm9tZSB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZ29iamVjdC1pbnRyb3NwZWN0aW9uCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtRHJvcC1pbnRyb3NwZWN0aW9uLW1hY3Jvcy1mcm9tLWFjaW5jbHVkZS5tNC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1FbmZvcmNlLXJlY3JlYXRpb24tb2YtZG9jcy1wYW5nby50eXBlcy1pdC1pcy1idWlsZC1jLnBhdGNoIFwKKyIKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjUwN2M2NzQ2ZmJmNTNmYzlkNDhjNTc3ZjFlMjY1ZGUzIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiY2ExNTJiNzM4M2ExZTlmN2ZkNzRhZTk2MDIzZGM2NzcwZGM1MDQzNDE0NzkzYmZlNzY4ZmYwNmI2NzU5ZTU3MyIKKworREVQRU5EUyA9ICJnbGliLTIuMCBnbGliLTIuMC1uYXRpdmUgZm9udGNvbmZpZyBmcmVldHlwZSB2aXJ0dWFsL2xpYmljb252IGNhaXJvIGhhcmZidXp6IgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuZmlsdGVyKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgZCl9IgorUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0td2l0aC14ZnQsLS13aXRob3V0LXhmdCx2aXJ0dWFsL2xpYngxMSBsaWJ4ZnQiCisKK0VYVFJBX0FVVE9SRUNPTkYgPSAiIgorCitFWFRSQV9PRUNPTkYgPSAiIFwKKwkgICAgICAgIC0tZGlzYWJsZS1kZWJ1ZyBcCisJICAgICAgICAiCisKK0xFQURfU09OQU1FID0gImxpYnBhbmdvLTEuMCoiCitMSUJWID0gIjEuOC4wIgorCisjIFRoaXMgYmluYXJ5IG5lZWRzIHRvIGJlIGNvbXBpbGVkIGZvciB0aGUgaG9zdCBhcmNoaXRlY3R1cmUuICBUaGlzIGlzbid0IHByZXR0eSEKK2RvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy10YXJnZXQgKCkgeworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHRlc3QnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorCQltYWtlIENDPSIke0JVSUxEX0NDfSIgQ0ZMQUdTPSIiIExERkxBR1M9IiR7QlVJTERfTERGTEFHU30iIEFNX0NQUEZMQUdTPSIkKHBrZy1jb25maWctbmF0aXZlIC0tY2ZsYWdzIGdsaWItMi4wKSIgZ2VuX2FsbF91bmljb2RlX0xEQUREPSIkKHBrZy1jb25maWctbmF0aXZlIC0tbGlicyBnbGliLTIuMCkiIC1DICR7Qn0vdGVzdHMgZ2VuLWFsbC11bmljb2RlCisJZmkKK30KKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyogJHtsaWJkaXJ9L2xpYnBhbmdvKiR7U09MSUJTfSIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3BhbmdvLyR7TElCVn0vbW9kdWxlcy8qLmxhIgorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibGliZXJhdGlvbi1mb250cyBjYW50YXJlbGwtZm9udHMiCisKK1JQUk9WSURFU18ke1BOfSArPSAicGFuZ28tbW9kdWxlcyBwYW5nby1tb2R1bGUtaW5kaWMtbGFuZyBcCisgICAgICAgICAgICAgICAgICAgIHBhbmdvLW1vZHVsZS1iYXNpYy1mYyBwYW5nby1tb2R1bGUtYXJhYmljLWxhbmciCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0LzAwMDEtQ01ha2UtZGVmaW5lLUdCTV9CT19NQVAtb25seS13aGVuLXN5bWJvbC1pcy1mb3VuZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdC8wMDAxLUNNYWtlLWRlZmluZS1HQk1fQk9fTUFQLW9ubHktd2hlbi1zeW1ib2wtaXMtZm91bmQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNjM0MjQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0LzAwMDEtQ01ha2UtZGVmaW5lLUdCTV9CT19NQVAtb25seS13aGVuLXN5bWJvbC1pcy1mb3VuZC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLUZyb20gNDc2OTdhZWUwNWExMTI0MjJhY2YyMDM5ODIwODVlN2IzZTZjMDViMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206ID0/VVRGLTg/cT9EYW5pZWw9MjBEPUMzPUFEYXo/PSA8ZGFuaWVsLmRpYXpAbGluYXJvLm9yZz4KLURhdGU6IFRodSwgNCBNYXkgMjAxNyAwMDo1NzozOSAtMDUwMAotU3ViamVjdDogW1BBVENIIDEvNF0gQ01ha2U6IGRlZmluZSBHQk1fQk9fTUFQIG9ubHkgd2hlbiBzeW1ib2wgaXMgZm91bmQKLU1JTUUtVmVyc2lvbjogMS4wCi1Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKLUNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKLQotZ2JtX2JvX21hcCgpIGFuZCBfdW5tYXAoKSBoYXZlIGJlZW4gYWRkZWQgcmVjZW50bHkgdG8gTWVzYSwKLWFuZCB0aGlzIHVwZGF0ZSBtYXkgbm90IGhhdmUgcmVhY2hlZCBhbGwgaW1wbGVtZW50YXRpb25zIG9mCi1HQk0sIHN1Y2ggYXMgdGhlIG9uZSBwcm92aWRlZCBieSBNYWxpIHI2LCB3aGVyZSBzYWlkCi1kZWZpbml0aW9ucyBjYW4gYmUgZm91bmQgaW4gdGhlIGhlYWRlciBmaWxlIGJ1dCBub3QgaW4gdGhlCi1saWJyYXJ5IGl0c2VsZi4gVGhpcyBsZWFkcyB0byBlcnJvcnMgbGlrZSB0aGUgZm9sbG93aW5nIHdoZW4KLWxpbmtpbmc6Ci0gIC4uLy4uLy4uLy4uL2xpYi9saWJwaWdsaXR1dGlsX2dsLnNvLjA6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGdibV9ib191bm1hcCcKLSAgLi4vLi4vLi4vLi4vbGliL2xpYnBpZ2xpdHV0aWxfZ2wuc28uMDogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgZ2JtX2JvX21hcCcKLSAgY29sbGVjdDI6IGVycm9yOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCi0gIG1ha2VbMl06ICoqKiBbYmluL3BvaW50LXNwcml0ZV0gRXJyb3IgMQotCi1JbnN0ZWFkIG9mIHJlbHlpbmcgb24gdGhlIGhlYWRlciBmaWxlLCBhY3R1YWxseSB0cnkgdG8gbGluawotdXNpbmcgdGhhdCBzeW1ib2wgdG8gZGV0ZXJtaW5lIGlmIFBJR0xJVF9IQVNfR0JNX0JPX01BUAotc2hvdWxkIGJlIGRlZmluZWQuCi0KLVVwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtwaWdsaXRAbGlzdHMuZnJlZWRlc2t0b3Aub3JnXQotCi1TaWduZWQtb2ZmLWJ5OiBEYW5pZWwgRMOtYXogPGRhbmllbC5kaWF6QGxpbmFyby5vcmc+Ci1SZXZpZXdlZC1ieTogSmFuIFZlc2VseSA8amFuLnZlc2VseUBydXRnZXJzLmVkdT4KLVJldmlld2VkLWJ5OiBEeWxhbiBCYWtlciA8ZHlsYW5AcG53YmFrZXJzLmNvbT4KLS0tLQotIENNYWtlTGlzdHMudHh0IHwgNSArKystLQotIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9DTWFrZUxpc3RzLnR4dCBiL0NNYWtlTGlzdHMudHh0Ci1pbmRleCBhNGZmOTllLi5jYzI2ZmE4IDEwMDY0NAotLS0tIGEvQ01ha2VMaXN0cy50eHQKLSsrKyBiL0NNYWtlTGlzdHMudHh0Ci1AQCAtMTQxLDggKzE0MSw5IEBAIElGKCR7Q01BS0VfU1lTVEVNX05BTUV9IE1BVENIRVMgIkxpbnV4IikKLSAJaWYoR0JNX0ZPVU5EKQotIAkJc2V0KFBJR0xJVF9IQVNfR0JNIFRydWUpCi0gCQlhZGRfZGVmaW5pdGlvbnMoLURQSUdMSVRfSEFTX0dCTSkKLS0JCWlmIChHQk1fVkVSU0lPTiBWRVJTSU9OX0VRVUFMICIxMi4xIiBPUiBHQk1fVkVSU0lPTiBWRVJTSU9OX0dSRUFURVIgIjEyLjEiKQotLQkJCXNldChQSUdMSVRfSEFTX0dCTV9CT19NQVAgVHJ1ZSkKLSsJCXNldChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMgJHtDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVN9ICR7R0JNX0xJQlJBUklFU30pCi0rCQlDSEVDS19GVU5DVElPTl9FWElTVFMoZ2JtX2JvX21hcCBQSUdMSVRfSEFTX0dCTV9CT19NQVApCi0rCQlpZiAoUElHTElUX0hBU19HQk1fQk9fTUFQKQotIAkJCWFkZF9kZWZpbml0aW9ucygtRFBJR0xJVF9IQVNfR0JNX0JPX01BUCkKLSAJCWVuZGlmKCkKLSAJZW5kaWYoR0JNX0ZPVU5EKQotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXQvMDAwMi11dGlsLWVnbC1Ib25vdXItU3VyZmFjZWxlc3MtTUVTQS1pbi1nZXRfZGVmYXVsdF9kaXNwLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0LzAwMDItdXRpbC1lZ2wtSG9ub3VyLVN1cmZhY2VsZXNzLU1FU0EtaW4tZ2V0X2RlZmF1bHRfZGlzcC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNhYTFiYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXQvMDAwMi11dGlsLWVnbC1Ib25vdXItU3VyZmFjZWxlc3MtTUVTQS1pbi1nZXRfZGVmYXVsdF9kaXNwLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotRnJvbSBhNjYwOGYyMThiNTAyM2NlZjM2YjNkZTVlYzNjNWYwMGIwMjExZDFjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRGFuaWVsIERpYXogPGRhbmllbC5kaWF6QGxpbmFyby5vcmc+Ci1EYXRlOiBXZWQsIDE3IE1heSAyMDE3IDE4OjAwOjE1IC0wNTAwCi1TdWJqZWN0OiBbUEFUQ0ggMi80XSB1dGlsL2VnbDogSG9ub3VyIFN1cmZhY2VsZXNzIE1FU0EgaW4gZ2V0X2RlZmF1bHRfZGlzcGxheQotTUlNRS1WZXJzaW9uOiAxLjAKLUNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAotQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAotCi1UaGUgRUdMX01FU0FfcGxhdGZvcm1fc3VyZmFjZWxlc3MgZXh0ZW5zaW9uIHdhcyBpbnRyb2R1Y2VkIG5vdCB0b28gbG9uZwotYWdvLiBBZGQgc3VwcG9ydCBmb3IgaXQgb3VyIGhlbHBlci4KLQotVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZCwgc2luY2UgZ2l0IDdiNzQ2MDIuCi0KLVNpZ25lZC1vZmYtYnk6IERhbmllbCBEw61heiA8ZGFuaWVsLmRpYXpAbGluYXJvLm9yZz4KLVJldmlld2VkLWJ5OiBFbWlsIFZlbGlrb3YgPGVtaWwudmVsaWtvdkBjb2xsYWJvcmEuY29tPgotLS0tCi0gdGVzdHMvdXRpbC9waWdsaXQtdXRpbC1lZ2wuYyB8IDcgKysrKysrKwotIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL3Rlc3RzL3V0aWwvcGlnbGl0LXV0aWwtZWdsLmMgYi90ZXN0cy91dGlsL3BpZ2xpdC11dGlsLWVnbC5jCi1pbmRleCAxMDZjNzM1Li4zODlmZTEyIDEwMDY0NAotLS0tIGEvdGVzdHMvdXRpbC9waWdsaXQtdXRpbC1lZ2wuYwotKysrIGIvdGVzdHMvdXRpbC9waWdsaXQtdXRpbC1lZ2wuYwotQEAgLTg1LDYgKzg1LDcgQEAgcGlnbGl0X2VnbF9nZXRfZGVmYXVsdF9kaXNwbGF5KEVHTGVudW0gcGxhdGZvcm0pCi0gCXN0YXRpYyBib29sIGhhc194MTEgPSBmYWxzZTsKLSAJc3RhdGljIGJvb2wgaGFzX3dheWxhbmQgPSBmYWxzZTsKLSAJc3RhdGljIGJvb2wgaGFzX2dibSA9IGZhbHNlOwotKwlzdGF0aWMgYm9vbCBoYXNfc3VyZmFjZWxlc3NfbWVzYSA9IGZhbHNlOwotIAotIAlzdGF0aWMgRUdMRGlzcGxheSAoKnBlZ2xHZXRQbGF0Zm9ybURpc3BsYXlFWFQpKEVHTGVudW0gcGxhdGZvcm0sIHZvaWQgKm5hdGl2ZV9kaXNwbGF5LCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKLSAKLUBAIC05OSw2ICsxMDAsNyBAQCBwaWdsaXRfZWdsX2dldF9kZWZhdWx0X2Rpc3BsYXkoRUdMZW51bSBwbGF0Zm9ybSkKLSAJCWhhc194MTEgPSBwaWdsaXRfaXNfZWdsX2V4dGVuc2lvbl9zdXBwb3J0ZWQoRUdMX05PX0RJU1BMQVksICJFR0xfRVhUX3BsYXRmb3JtX3gxMSIpOwotIAkJaGFzX3dheWxhbmQgPSBwaWdsaXRfaXNfZWdsX2V4dGVuc2lvbl9zdXBwb3J0ZWQoRUdMX05PX0RJU1BMQVksICJFR0xfRVhUX3BsYXRmb3JtX3dheWxhbmQiKTsKLSAJCWhhc19nYm0gPSBwaWdsaXRfaXNfZWdsX2V4dGVuc2lvbl9zdXBwb3J0ZWQoRUdMX05PX0RJU1BMQVksICJFR0xfRVhUX3BsYXRmb3JtX2dibSIpOwotKwkJaGFzX3N1cmZhY2VsZXNzX21lc2EgPSBwaWdsaXRfaXNfZWdsX2V4dGVuc2lvbl9zdXBwb3J0ZWQoRUdMX05PX0RJU1BMQVksICJFR0xfTUVTQV9wbGF0Zm9ybV9zdXJmYWNlbGVzcyIpOwotIAotIAkJcGVnbEdldFBsYXRmb3JtRGlzcGxheUVYVCA9ICh2b2lkKikgZWdsR2V0UHJvY0FkZHJlc3MoImVnbEdldFBsYXRmb3JtRGlzcGxheUVYVCIpOwotIAl9Ci1AQCAtMTIzLDYgKzEyNSwxMSBAQCBwaWdsaXRfZWdsX2dldF9kZWZhdWx0X2Rpc3BsYXkoRUdMZW51bSBwbGF0Zm9ybSkKLSAJCQlyZXR1cm4gRUdMX05PX0RJU1BMQVk7Ci0gCQl9Ci0gCQlicmVhazsKLSsJY2FzZSBFR0xfUExBVEZPUk1fU1VSRkFDRUxFU1NfTUVTQToKLSsJCWlmICghaGFzX3N1cmZhY2VsZXNzX21lc2EpIHsKLSsJCQlyZXR1cm4gRUdMX05PX0RJU1BMQVk7Ci0rCQl9Ci0rCQlicmVhazsKLSAJZGVmYXVsdDoKLSAJCWZwcmludGYoc3RkZXJyLCAiJXM6IHVucmVjb2duaXplZCBwbGF0Zm9ybSAlI3hcbiIsIF9fZnVuY19fLCBwbGF0Zm9ybSk7Ci0gCQlyZXR1cm4gRUdMX05PX0RJU1BMQVk7Ci0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdC8wMDAzLWVnbF9tZXNhX3BsYXRmb3JtX3N1cmZhY2VsZXNzLURvbi10LXVzZS1lZ2xHZXRQbGF0Zm8ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXQvMDAwMy1lZ2xfbWVzYV9wbGF0Zm9ybV9zdXJmYWNlbGVzcy1Eb24tdC11c2UtZWdsR2V0UGxhdGZvLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjI0ZGMxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdC8wMDAzLWVnbF9tZXNhX3BsYXRmb3JtX3N1cmZhY2VsZXNzLURvbi10LXVzZS1lZ2xHZXRQbGF0Zm8ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi1Gcm9tIGMwZGM0MzBiOGY1ZGVlYWNkYjExY2QxODgxOTVlMTZmNTEyYWYyMzMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBEYW5pZWwgRGlheiA8ZGFuaWVsLmRpYXpAbGluYXJvLm9yZz4KLURhdGU6IFdlZCwgMTcgTWF5IDIwMTcgMTg6MDA6MTYgLTA1MDAKLVN1YmplY3Q6IFtQQVRDSCAzLzRdIGVnbF9tZXNhX3BsYXRmb3JtX3N1cmZhY2VsZXNzOiBEb24ndCB1c2UKLSBlZ2xHZXRQbGF0Zm9ybURpc3BsYXkgZGlyZWN0bHkKLU1JTUUtVmVyc2lvbjogMS4wCi1Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKLUNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKLQotVGhlIGVudHJ5IHBvaW50IGlzIG5vdCBndWFyYW50ZWVkIHRvIGV4aXN0LCBzbyB1c2UgdGhlCi1waWdsaXRfZWdsX2dldF9kZWZhdWx0X2Rpc3BsYXkoKSBoZWxwZXIgd2hpY2ggZG9lcyB0aGUgY29ycmVjdCB0aGluZy4KLQotVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZCwgc2luY2UgZ2l0IDdiNzQ2MDIuCi0KLVNpZ25lZC1vZmYtYnk6IERhbmllbCBEw61heiA8ZGFuaWVsLmRpYXpAbGluYXJvLm9yZz4KLVJldmlld2VkLWJ5OiBFbWlsIFZlbGlrb3YgPGVtaWwudmVsaWtvdkBjb2xsYWJvcmEuY29tPgotLS0tCi0gLi4uL3NwZWMvZWdsX21lc2FfcGxhdGZvcm1fc3VyZmFjZWxlc3MvZWdsX21lc2FfcGxhdGZvcm1fc3VyZmFjZWxlc3MuYyAgfCAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS90ZXN0cy9lZ2wvc3BlYy9lZ2xfbWVzYV9wbGF0Zm9ybV9zdXJmYWNlbGVzcy9lZ2xfbWVzYV9wbGF0Zm9ybV9zdXJmYWNlbGVzcy5jIGIvdGVzdHMvZWdsL3NwZWMvZWdsX21lc2FfcGxhdGZvcm1fc3VyZmFjZWxlc3MvZWdsX21lc2FfcGxhdGZvcm1fc3VyZmFjZWxlc3MuYwotaW5kZXggM2JiZDZhYS4uODFhMzkxOSAxMDA2NDQKLS0tLSBhL3Rlc3RzL2VnbC9zcGVjL2VnbF9tZXNhX3BsYXRmb3JtX3N1cmZhY2VsZXNzL2VnbF9tZXNhX3BsYXRmb3JtX3N1cmZhY2VsZXNzLmMKLSsrKyBiL3Rlc3RzL2VnbC9zcGVjL2VnbF9tZXNhX3BsYXRmb3JtX3N1cmZhY2VsZXNzL2VnbF9tZXNhX3BsYXRmb3JtX3N1cmZhY2VsZXNzLmMKLUBAIC0zMSw3ICszMSw3IEBAIHRlc3Rfc2V0dXAoRUdMRGlzcGxheSAqZHB5KQotIAotIAlwaWdsaXRfcmVxdWlyZV9lZ2xfZXh0ZW5zaW9uKEVHTF9OT19ESVNQTEFZLCAiRUdMX01FU0FfcGxhdGZvcm1fc3VyZmFjZWxlc3MiKTsKLSAKLS0JKmRweSA9IGVnbEdldFBsYXRmb3JtRGlzcGxheShFR0xfUExBVEZPUk1fU1VSRkFDRUxFU1NfTUVTQSwgTlVMTCwgTlVMTCk7Ci0rCSpkcHkgPSBwaWdsaXRfZWdsX2dldF9kZWZhdWx0X2Rpc3BsYXkoRUdMX1BMQVRGT1JNX1NVUkZBQ0VMRVNTX01FU0EpOwotIAlpZiAoKmRweSA9PSBFR0xfTk9fRElTUExBWSkgewotIAkJcHJpbnRmKCJmYWlsZWQgdG8gZ2V0IEVHTERpc3BsYXlcbiIpOwotIAkJcGlnbGl0X3JlcG9ydF9yZXN1bHQoUElHTElUX1NLSVApOwotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXQvMDAwNC1lZ2xfbWVzYV9wbGF0Zm9ybV9zdXJmYWNlbGVzcy1Vc2UtRVhULWZ1bmN0aW9ucy1mb3ItLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0LzAwMDQtZWdsX21lc2FfcGxhdGZvcm1fc3VyZmFjZWxlc3MtVXNlLUVYVC1mdW5jdGlvbnMtZm9yLS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk1MmFmNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXQvMDAwNC1lZ2xfbWVzYV9wbGF0Zm9ybV9zdXJmYWNlbGVzcy1Vc2UtRVhULWZ1bmN0aW9ucy1mb3ItLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotRnJvbSA1N2RlMWZmNjc1OGVjNWVhNGE1MjYzN2YyMzNlM2UzMTUwMDg2MjU1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRGFuaWVsIERpYXogPGRhbmllbC5kaWF6QGxpbmFyby5vcmc+Ci1EYXRlOiBXZWQsIDE3IE1heSAyMDE3IDE4OjAwOjE3IC0wNTAwCi1TdWJqZWN0OiBbUEFUQ0ggNC80XSBlZ2xfbWVzYV9wbGF0Zm9ybV9zdXJmYWNlbGVzczogVXNlIEVYVCBmdW5jdGlvbnMgZm9yCi0gc3VyZmFjZXMKLU1JTUUtVmVyc2lvbjogMS4wCi1Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKLUNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKLQotVGhlc2UgRVhUIHN5bWJvbHMgYXJlIGd1YXJhbnRlZWQgdG8gZXhpc3Qgc2luY2UgdGhleSByZXF1aXJlCi1FR0xfRVhUX3BsYXRmb3JtX2Jhc2UuCi0KLVVwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQsIHNpbmNlIGdpdCA3Yjc0NjAyLgotCi1TaWduZWQtb2ZmLWJ5OiBEYW5pZWwgRMOtYXogPGRhbmllbC5kaWF6QGxpbmFyby5vcmc+Ci1SZXZpZXdlZC1ieTogRW1pbCBWZWxpa292IDxlbWlsLnZlbGlrb3ZAY29sbGFib3JhLmNvbT4KLS0tLQotIC4uLi9lZ2xfbWVzYV9wbGF0Zm9ybV9zdXJmYWNlbGVzcy5jICAgICAgICAgICAgICAgIHwgMjMgKysrKysrKysrKysrKysrKysrKystLQotIDEgZmlsZSBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvdGVzdHMvZWdsL3NwZWMvZWdsX21lc2FfcGxhdGZvcm1fc3VyZmFjZWxlc3MvZWdsX21lc2FfcGxhdGZvcm1fc3VyZmFjZWxlc3MuYyBiL3Rlc3RzL2VnbC9zcGVjL2VnbF9tZXNhX3BsYXRmb3JtX3N1cmZhY2VsZXNzL2VnbF9tZXNhX3BsYXRmb3JtX3N1cmZhY2VsZXNzLmMKLWluZGV4IDgxYTM5MTkuLjI2NGVkNzEgMTAwNjQ0Ci0tLS0gYS90ZXN0cy9lZ2wvc3BlYy9lZ2xfbWVzYV9wbGF0Zm9ybV9zdXJmYWNlbGVzcy9lZ2xfbWVzYV9wbGF0Zm9ybV9zdXJmYWNlbGVzcy5jCi0rKysgYi90ZXN0cy9lZ2wvc3BlYy9lZ2xfbWVzYV9wbGF0Zm9ybV9zdXJmYWNlbGVzcy9lZ2xfbWVzYV9wbGF0Zm9ybV9zdXJmYWNlbGVzcy5jCi1AQCAtMjQsNiArMjQsMjQgQEAKLSAjaW5jbHVkZSAicGlnbGl0LXV0aWwuaCIKLSAjaW5jbHVkZSAicGlnbGl0LXV0aWwtZWdsLmgiCi0gCi0rLyogRXh0ZW5zaW9uIGZ1bmN0aW9uIHBvaW50ZXJzLgotKyAqCi0rICogVXNlIHByZWZpeCAncGVnbCcgKHBpZ2xpdCBlZ2wpIGluc3RlYWQgb2YgJ2VnbCcgdG8gYXZvaWQgY29sbGlzaW9ucyB3aXRoCi0rICogcHJvdG90eXBlcyBpbiBlZ2xleHQuaC4gKi8KLStFR0xTdXJmYWNlICgqcGVnbENyZWF0ZVBsYXRmb3JtUGl4bWFwU3VyZmFjZUVYVCkoRUdMRGlzcGxheSBkaXNwbGF5LCBFR0xDb25maWcgY29uZmlnLAotKwkgICAgTmF0aXZlUGl4bWFwVHlwZSBuYXRpdmVfcGl4bWFwLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKLStFR0xTdXJmYWNlICgqcGVnbENyZWF0ZVBsYXRmb3JtV2luZG93U3VyZmFjZUVYVCkoRUdMRGlzcGxheSBkaXNwbGF5LCBFR0xDb25maWcgY29uZmlnLAotKwkgICAgTmF0aXZlV2luZG93VHlwZSBuYXRpdmVfd2luZG93LCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKLSsKLStzdGF0aWMgdm9pZAotK2luaXRfZWdsX2V4dGVuc2lvbl9mdW5jcyh2b2lkKQotK3sKLSsJcGVnbENyZWF0ZVBsYXRmb3JtUGl4bWFwU3VyZmFjZUVYVCA9ICh2b2lkKikKLSsJCWVnbEdldFByb2NBZGRyZXNzKCJlZ2xDcmVhdGVQbGF0Zm9ybVBpeG1hcFN1cmZhY2VFWFQiKTsKLSsJcGVnbENyZWF0ZVBsYXRmb3JtV2luZG93U3VyZmFjZUVYVCA9ICh2b2lkKikKLSsJCWVnbEdldFByb2NBZGRyZXNzKCJlZ2xDcmVhdGVQbGF0Zm9ybVdpbmRvd1N1cmZhY2VFWFQiKTsKLSt9Ci0rCi0gc3RhdGljIHZvaWQKLSB0ZXN0X3NldHVwKEVHTERpc3BsYXkgKmRweSkKLSB7Ci1AQCAtNzIsNyArOTAsNyBAQCB0ZXN0X2NyZWF0ZV93aW5kb3codm9pZCAqdGVzdF9kYXRhKQotIAotIAl0ZXN0X3NldHVwKCZkcHkpOwotIAotLQlzdXJmID0gZWdsQ3JlYXRlUGxhdGZvcm1XaW5kb3dTdXJmYWNlKGRweSwgRUdMX05PX0NPTkZJR19LSFIsCi0rCXN1cmYgPSBwZWdsQ3JlYXRlUGxhdGZvcm1XaW5kb3dTdXJmYWNlRVhUKGRweSwgRUdMX05PX0NPTkZJR19LSFIsCi0gCQkJCQkgICAgICAvKm5hdGl2ZV93aW5kb3cqLyBOVUxMLAotIAkJCQkJICAgICAgLyphdHRyaWJfbGlzdCovIE5VTEwpOwotIAlpZiAoc3VyZikgewotQEAgLTEwMyw3ICsxMjEsNyBAQCB0ZXN0X2NyZWF0ZV9waXhtYXAodm9pZCAqdGVzdF9kYXRhKQotIAotIAl0ZXN0X3NldHVwKCZkcHkpOwotIAotLQlzdXJmID0gZWdsQ3JlYXRlUGxhdGZvcm1QaXhtYXBTdXJmYWNlKGRweSwgRUdMX05PX0NPTkZJR19LSFIsCi0rCXN1cmYgPSBwZWdsQ3JlYXRlUGxhdGZvcm1QaXhtYXBTdXJmYWNlRVhUKGRweSwgRUdMX05PX0NPTkZJR19LSFIsCi0gCQkJCQkgICAgICAvKm5hdGl2ZV93aW5kb3cqLyBOVUxMLAotIAkJCQkJICAgICAgLyphdHRyaWJfbGlzdCovIE5VTEwpOwotIAlpZiAoc3VyZikgewotQEAgLTIwNSw2ICsyMjMsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAJCXBpZ2xpdF9yZXBvcnRfcmVzdWx0KFBJR0xJVF9GQUlMKTsKLSAJfQotIAotKwlpbml0X2VnbF9leHRlbnNpb25fZnVuY3MoKTsKLSAJcmVzdWx0ID0gcGlnbGl0X3J1bl9zZWxlY3RlZF9zdWJ0ZXN0cyhzdWJ0ZXN0cywgc2VsZWN0ZWRfbmFtZXMsCi0gCQkJCQkgICAgICBudW1fc2VsZWN0ZWQsIHJlc3VsdCk7Ci0gCXBpZ2xpdF9yZXBvcnRfcmVzdWx0KHJlc3VsdCk7Ci0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdF9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXRfZ2l0LmJiCmluZGV4IDJlYTU3NzkuLmQyNzRhOGYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdF9naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0X2dpdC5iYgpAQCAtNSwxNCArNSwxMSBAQAogU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9waWdsaXQgXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1jbWFrZS1pbnN0YWxsLWJhc2gtY29tcGxldGlvbnMtaW4tdGhlLXJpZ2h0LXBsYWNlLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtdGVzdHMtVXNlLUZFX1VQV0FSRC1vbmx5LWlmLWl0cy1kZWZpbmVkLWluLWZlbnYuaC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLUNNYWtlLWRlZmluZS1HQk1fQk9fTUFQLW9ubHktd2hlbi1zeW1ib2wtaXMtZm91bmQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMi11dGlsLWVnbC1Ib25vdXItU3VyZmFjZWxlc3MtTUVTQS1pbi1nZXRfZGVmYXVsdF9kaXNwLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDMtZWdsX21lc2FfcGxhdGZvcm1fc3VyZmFjZWxlc3MtRG9uLXQtdXNlLWVnbEdldFBsYXRmby5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDA0LWVnbF9tZXNhX3BsYXRmb3JtX3N1cmZhY2VsZXNzLVVzZS1FWFQtZnVuY3Rpb25zLWZvci0ucGF0Y2ggXAogICAgICAgICAgICAiCitVUFNUUkVBTV9WRVJTSU9OX1VOS05PV04gPSAiMSIKIAotIyBGcm9tIDIwMTctMDItMDYKLVNSQ1JFViA9ICJjYTU4ZWVjMGI5NjU2NTVjN2ViYTU5MmE2MzRjYmY0YWFkZmJjNjc1IgorIyBGcm9tIDIwMTctMDctMDMKK1NSQ1JFViA9ICJjOGY0ZmQ5ZWViMjk4YTJlZjA4NTU5MjdmMjI2MzRmNzk0ZWYzZWZmIgogIyAod2hlbiBQViBnb2VzIGFib3ZlIDEuMCByZW1vdmUgdGhlIHRyYWlsaW5nIHIpCiBQViA9ICIxLjArZ2l0ciR7U1JDUFZ9IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3R0Zi1mb250cy9saWJlcmF0aW9uLWZvbnRzXzEuMDQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3R0Zi1mb250cy9saWJlcmF0aW9uLWZvbnRzXzEuMDQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MjEyZTcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy90dGYtZm9udHMvbGliZXJhdGlvbi1mb250c18xLjA0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotU1VNTUFSWSA9ICJMaWJlcmF0aW9uKHRtKSBGb250cyIKLURFU0NSSVBUSU9OID0gIlRoZSBMaWJlcmF0aW9uKHRtKSBGb250cyBpcyBhIGZvbnQgZmFtaWx5IG9yaWdpbmFsbHkgXAotY3JlYXRlZCBieSBBc2NlbmRlcihjKSB3aGljaCBhaW1zIGF0IG1ldHJpYyBjb21wYXRpYmlsaXR5IHdpdGggXAotQXJpYWwsIFRpbWVzIE5ldyBSb21hbiwgQ291cmllciBOZXcuIgotSE9NRVBBR0UgPSAiaHR0cHM6Ly9yZWxlYXNlcy5wYWd1cmUub3JnL2xpYmVyYXRpb24tZm9udHMvIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vIgotCi1SRUNJUEVfTk9fVVBEQVRFX1JFQVNPTiA9ICIyLnggZGVwZW5kcyBvbiBmb250Zm9yZ2UgcGFja2FnZSwgd2hpY2ggaXMgbm90IHlldCBwcm92aWRlZCBpbiBvZS1jb3JlIgotCi1TRUNUSU9OID0gIngxMS9mb250cyIKLUxJQ0VOU0UgPSAiR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKLVBSID0gInI0IgotUEUgPSAiMSIKLQotaW5oZXJpdCBhbGxhcmNoIGZvbnRjYWNoZQotCi1GT05UX1BBQ0tBR0VTID0gIiR7UE59IgotCi1TUkNfVVJJID0gImh0dHBzOi8vcmVsZWFzZXMucGFndXJlLm9yZy9saWJlcmF0aW9uLWZvbnRzL2xpYmVyYXRpb24tZm9udHMtJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovLzMwLWxpYmVyYXRpb24tYWxpYXNlcy5jb25mIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNDg0Njc5N2VmMGZjNzBiMGNiYWVkZTI1MTQ2NzdjNTgiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGUwZDA5NTdjODViNzU4NTYxYTNkNGFlZjRlYmNkMmMzOTk1OWU1MzI4NDI5ZDk2YWUxMDYyNDlkODM1MzFhMSIKLQotZG9faW5zdGFsbCAoKSB7Ci0JaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9mb250cy90dGYvCi0JZm9yIGkgaW4gKi50dGY7IGRvCi0JCWluc3RhbGwgLW0gMDY0NCAkaSAke0R9JHtwcmVmaXh9L3NoYXJlL2ZvbnRzL3R0Zi8ke2l9Ci0JZG9uZQotCi0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9mb250cy9jb25mLmQvCi0JaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vMzAtbGliZXJhdGlvbi1hbGlhc2VzLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vZm9udHMvY29uZi5kLwotCi0JaW5zdGFsbCAtZCAke0R9JHtwcmVmaXh9L3NoYXJlL2RvYy8ke0JQTn0vCi0JaW5zdGFsbCAtbSAwNjQ0IExpY2Vuc2UudHh0ICR7RH0ke2RhdGFkaXJ9L2RvYy8ke0JQTn0vCi19Ci0KLVBBQ0tBR0VTID0gIiR7UE59IgotRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0gJHtkYXRhZGlyfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHRmLWZvbnRzL2xpYmVyYXRpb24tZm9udHNfMi4wMC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy90dGYtZm9udHMvbGliZXJhdGlvbi1mb250c18yLjAwLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEyZGE0OAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHRmLWZvbnRzL2xpYmVyYXRpb24tZm9udHNfMi4wMC4xLmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiTGliZXJhdGlvbih0bSkgRm9udHMiCitERVNDUklQVElPTiA9ICJUaGUgTGliZXJhdGlvbih0bSkgRm9udHMgaXMgYSBmb250IGZhbWlseSBvcmlnaW5hbGx5IFwKK2NyZWF0ZWQgYnkgQXNjZW5kZXIoYykgd2hpY2ggYWltcyBhdCBtZXRyaWMgY29tcGF0aWJpbGl0eSB3aXRoIFwKK0FyaWFsLCBUaW1lcyBOZXcgUm9tYW4sIENvdXJpZXIgTmV3LiIKK0hPTUVQQUdFID0gImh0dHBzOi8vcmVsZWFzZXMucGFndXJlLm9yZy9saWJlcmF0aW9uLWZvbnRzLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tLyIKKworU0VDVElPTiA9ICJ4MTEvZm9udHMiCitMSUNFTlNFID0gIk9GTC0xLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1mOTZkYjk3MGE5YTQ2YzUzNjkxNDJiOTlmNTMwMzY2YiIKK1BFID0gIjEiCisKK2luaGVyaXQgYWxsYXJjaCBmb250Y2FjaGUKKworRk9OVF9QQUNLQUdFUyA9ICIke1BOfSIKKworU1JDX1VSSSA9ICJodHRwczovL3JlbGVhc2VzLnBhZ3VyZS5vcmcvbGliZXJhdGlvbi1mb250cy9saWJlcmF0aW9uLWZvbnRzLXR0Zi0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMzAtbGliZXJhdGlvbi1hbGlhc2VzLmNvbmYiCisKK1MgPSAiJHtXT1JLRElSfS9saWJlcmF0aW9uLWZvbnRzLXR0Zi0ke1BWfSIKKworU1JDX1VSSVttZDVzdW1dID0gIjVjNzgxNzIzYTBkOWVkNjE4ODk2MGRlZmJhOGU5MWNmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc4OTAyNzhhNmNkMTc4NzNjNTdkOWNkNzg1YzJkMjMwZDlhYmRlYTgzN2U5NjUxNjAxOWM1ODg1ZGQyNzE1MDQiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vZm9udHMvdHRmLworCWZvciBpIGluICoudHRmOyBkbworCQlpbnN0YWxsIC1tIDA2NDQgJGkgJHtEfSR7cHJlZml4fS9zaGFyZS9mb250cy90dGYvJHtpfQorCWRvbmUKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZm9udHMvY29uZi5kLworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9LzMwLWxpYmVyYXRpb24tYWxpYXNlcy5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L2ZvbnRzL2NvbmYuZC8KKworCWluc3RhbGwgLWQgJHtEfSR7cHJlZml4fS9zaGFyZS9kb2MvJHtCUE59LworCWluc3RhbGwgLW0gMDY0NCBMSUNFTlNFICR7RH0ke2RhdGFkaXJ9L2RvYy8ke0JQTn0vCit9CisKK1BBQ0tBR0VTID0gIiR7UE59IgorRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0gJHtkYXRhZGlyfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdnVsa2FuL2Fzc2ltcF80LjAuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdnVsa2FuL2Fzc2ltcF80LjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTk2YTRmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy92dWxrYW4vYXNzaW1wXzQuMC4wLmJiCkBAIC0wLDAgKzEsMjIgQEAKK0RFU0NSSVBUSU9OID0gIk9wZW4gQXNzZXQgSW1wb3J0IExpYnJhcnkgaXMgYSBwb3J0YWJsZSBPcGVuIFNvdXJjZSBsaWJyYXJ5IHRvIGltcG9ydCBcCisgICAgICAgICAgICAgICB2YXJpb3VzIHdlbGwta25vd24gM0QgbW9kZWwgZm9ybWF0cyBpbiBhIHVuaWZvcm0gbWFubmVyLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuYXNzaW1wLm9yZy8iCitTRUNUSU9OID0gImRldmVsIgorCitMSUNFTlNFID0gIkJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTIxMTllZGVmMDkxNmIwYmQ1MTFjYjNjNzMxMDc2MjcxIgorCitERVBFTkRTID0gInpsaWIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9hc3NpbXAvYXNzaW1wLmdpdCIKK1VQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gInYoP1A8cHZlcj4oXGQrKFwuXGQrKSspKSIKKworU1JDUkVWID0gIjUyYzhkMDZmNWQ2NDk4YWZkNjZkZjk4M2RhMzQ4YTZiMTEyZjEzMTQiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgY21ha2UKKworRVhUUkFfT0VDTUFLRSA9ICItREFTU0lNUF9CVUlMRF9BU1NJTVBfVE9PTFM9T0ZGIC1EQVNTSU1QX0JVSUxEX1RFU1RTPU9GRiAtREFTU0lNUF9MSUJfSU5TVEFMTF9ESVI9JHtiYXNlbGlifSIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vY21ha2UvIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy92dWxrYW4vdnVsa2FuLWRlbW9zLzAwMDEtRG9uLXQtYnVpbGQtZGVtb3Mtd2l0aC1xdWVzdGlvbmFibHktbGljZW5zZWQtZGF0YS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdnVsa2FuL3Z1bGthbi1kZW1vcy8wMDAxLURvbi10LWJ1aWxkLWRlbW9zLXdpdGgtcXVlc3Rpb25hYmx5LWxpY2Vuc2VkLWRhdGEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMyYzhmMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdnVsa2FuL3Z1bGthbi1kZW1vcy8wMDAxLURvbi10LWJ1aWxkLWRlbW9zLXdpdGgtcXVlc3Rpb25hYmx5LWxpY2Vuc2VkLWRhdGEucGF0Y2gKQEAgLTAsMCArMSw5MSBAQAorRnJvbSA1NTc3MGZiMDdjNDJmZTQxMGNmOGQwOWY4ZjU5NzZiYWJjODliOWVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgNCBKdWwgMjAxNyAxNzoxMzo0NSArMDMwMAorU3ViamVjdDogW1BBVENIXSBEb24ndCBidWlsZCBkZW1vcyB3aXRoIHF1ZXN0aW9uYWJseSBsaWNlbnNlZCBkYXRhCisKK1NvbWUgb2YgdGhlIG1vZGVscyBkb24ndCBoYXZlIG9wZW4gc291cmNlIGNvbXBhdGlibGUgbGljZW5zZXM6Citkb24ndCBidWlsZCBkZW1vcyB1c2luZyB0aG9zZS4gQWxzbyBkb24ndCBidWlsZCBkZW1vcyB0aGF0IG5lZWQKK3Jlc291cmNlcyB0aGF0IGFyZSBub3QgaW5jbHVkZWQuCisKK3NzYW86CitzY2VuZXJlbmRlcmluZzoKKwlTaWJlbmlrIG1vZGVsLCBubyBsaWNlbnNlIGZvdW5kCisKK2RlZmVycmVkOgorZGVmZXJyZWRtdWx0aXNhbXBsaW5nOgorZGVmZXJyZWRzaGFkb3dzOgorCWFybW9yIG1vZGVsLCBDQy1CWS0zLjAKKwordnVsa2Fuc2NlbmU6CitpbWd1aToKK3NoYWRvd21hcHBpbmc6CisJdnVsa2Fuc2NlbmUgbW9kZWwsIG5vIGxpY2Vuc2UgZm91bmQKKworaW5kaXJlY3RkcmF3OgorCXBsYW50IG1vZGVsLCBubyBsaWNlbnNlIGZvdW5kCisKK2hkcjoKK3BicmlibDoKK3BicnRleHR1cmU6CisJUmVxdWlyZSBleHRlcm5hbCBWdWxrYW4gQXNzZXQgUGFjaworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgQ01ha2VMaXN0cy50eHQgfCAxMyAtLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvQ01ha2VMaXN0cy50eHQgYi9DTWFrZUxpc3RzLnR4dAoraW5kZXggNDk1OGZmZi4uMGY5ZDNlNCAxMDA2NDQKKy0tLSBhL0NNYWtlTGlzdHMudHh0CisrKysgYi9DTWFrZUxpc3RzLnR4dAorQEAgLTE1MCwxNyArMTUwLDExIEBAIHNldChFWEFNUExFUworIAljb21wdXRlcGFydGljbGVzCisgCWNvbXB1dGVzaGFkZXIKKyAJZGVidWdtYXJrZXIKKy0JZGVmZXJyZWQKKy0JZGVmZXJyZWRtdWx0aXNhbXBsaW5nCistCWRlZmVycmVkc2hhZG93cworIAlkaXNwbGFjZW1lbnQKKyAJZGlzdGFuY2VmaWVsZGZvbnRzCisgCWR5bmFtaWN1bmlmb3JtYnVmZmVyCisgCWdlYXJzCisgCWdlb21ldHJ5c2hhZGVyCistCWhkcgorLQlpbWd1aQorLQlpbmRpcmVjdGRyYXcJCisgCWluc3RhbmNpbmcKKyAJbWVzaAorIAltdWx0aXNhbXBsaW5nCitAQCAtMTcwLDIwICsxNjQsMTQgQEAgc2V0KEVYQU1QTEVTCisgCXBhcmFsbGF4bWFwcGluZworIAlwYXJ0aWNsZWZpcmUKKyAJcGJyYmFzaWMKKy0JcGJyaWJsCistCXBicnRleHR1cmUKKyAJcGlwZWxpbmVzCisgCXB1c2hjb25zdGFudHMKKyAJcmFkaWFsYmx1cgorIAlyYXl0cmFjaW5nCistCXNjZW5lcmVuZGVyaW5nCisgCXNjcmVlbnNob3QKKy0Jc2hhZG93bWFwcGluZworLQlzaGFkb3dtYXBwaW5nb21uaQorIAlza2VsZXRhbGFuaW1hdGlvbgorIAlzcGVjaWFsaXphdGlvbmNvbnN0YW50cworIAlzcGhlcmljYWxlbnZtYXBwaW5nCistCXNzYW8KKyAJc3VicGFzc2VzCisgCXRlcnJhaW50ZXNzZWxsYXRpb24KKyAJdGVzc2VsbGF0aW9uCitAQCAtMTk2LDcgKzE4NCw2IEBAIHNldChFWEFNUExFUworIAl0ZXh0dXJlc3BhcnNlcmVzaWRlbmN5CisgCXRyaWFuZ2xlCisgCXZpZXdwb3J0YXJyYXkKKy0JdnVsa2Fuc2NlbmUKKyApCisgCisgYnVpbGRFeGFtcGxlcygpCistLSAKKzIuMTMuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3Z1bGthbi92dWxrYW4tZGVtb3MvMDAwMS1GaXgtYnVpbGQtb24teDg2LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy92dWxrYW4vdnVsa2FuLWRlbW9zLzAwMDEtRml4LWJ1aWxkLW9uLXg4Ni5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODFiMzQyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy92dWxrYW4vdnVsa2FuLWRlbW9zLzAwMDEtRml4LWJ1aWxkLW9uLXg4Ni5wYXRjaApAQCAtMCwwICsxLDQxIEBACitGcm9tIGIwNDk1ZWZiNmMzZWEzYTUzMGZjYmFkZGFjODZkYTU3ZWNjZTVhNjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogTW9uLCAxMCBKdWwgMjAxNyAxMzoxMToxMiArMDMwMAorU3ViamVjdDogW1BBVENIXSBGaXggYnVpbGQgb24geDg2CitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK3zCoGZ1bmNfY29tbW9uLmlubDoxOTM6NTE6IGVycm9yOiB3cm9uZyBudW1iZXIgb2YgdGVtcGxhdGUgYXJndW1lbnRzCit8wqAoNSwgc2hvdWxkIGJlIDYpIHN0cnVjdCBjb21wdXRlX3NpZ248VCwgUCwgdmVjVHlwZSwgZmFsc2UsIEFsaWduZWQ+CisKK1RoZSBmaXggaXMgYmFja3BvcnRlZCBmcm9tIHRoZSB1cHN0cmVhbSBnbG0gcHJvamVjdC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nIFtodHRwczovL2dpdGh1Yi5jb20vU2FzY2hhV2lsbGVtcy9WdWxrYW4vaXNzdWVzLzM1Nl0KK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CistLS0KKyBleHRlcm5hbC9nbG0vZ2xtL2RldGFpbC9mdW5jX2NvbW1vbi5pbmwgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZXh0ZXJuYWwvZ2xtL2dsbS9kZXRhaWwvZnVuY19jb21tb24uaW5sIGIvZXh0ZXJuYWwvZ2xtL2dsbS9kZXRhaWwvZnVuY19jb21tb24uaW5sCitpbmRleCBjYWZhZWQ1Li4yZGQ5NGUxIDEwMDY0NAorLS0tIGEvZXh0ZXJuYWwvZ2xtL2dsbS9kZXRhaWwvZnVuY19jb21tb24uaW5sCisrKysgYi9leHRlcm5hbC9nbG0vZ2xtL2RldGFpbC9mdW5jX2NvbW1vbi5pbmwKK0BAIC0xOTAsMTIgKzE5MCwxMiBAQCBuYW1lc3BhY2UgZGV0YWlsCisgCisgIwlpZiBHTE1fQVJDSCA9PSBHTE1fQVJDSF9YODYKKyAJdGVtcGxhdGU8bGVuZ3RoX3QgTCwgdHlwZW5hbWUgVCwgcHJlY2lzaW9uIFAsIHRlbXBsYXRlPGxlbmd0aF90LCB0eXBlbmFtZSwgcHJlY2lzaW9uPiBjbGFzcyB2ZWNUeXBlLCBib29sIEFsaWduZWQ+CistCXN0cnVjdCBjb21wdXRlX3NpZ248VCwgUCwgdmVjVHlwZSwgZmFsc2UsIEFsaWduZWQ+CisrCXN0cnVjdCBjb21wdXRlX3NpZ248TCwgVCwgUCwgdmVjVHlwZSwgZmFsc2UsIEFsaWduZWQ+CisgCXsKKyAJCUdMTV9GVU5DX1FVQUxJRklFUiBzdGF0aWMgdmVjVHlwZTxMLCBULCBQPiBjYWxsKHZlY1R5cGU8TCwgVCwgUD4gY29uc3QgJiB4KQorIAkJeworIAkJCVQgY29uc3QgU2hpZnQoc3RhdGljX2Nhc3Q8VD4oc2l6ZW9mKFQpICogOCAtIDEpKTsKKy0JCQl2ZWNUeXBlPEwsIFQsIFA+IGNvbnN0IHkodmVjVHlwZTx0eXBlbmFtZSBtYWtlX3Vuc2lnbmVkPFQ+Ojp0eXBlLCBQPigteCkgPj4gdHlwZW5hbWUgbWFrZV91bnNpZ25lZDxUPjo6dHlwZShTaGlmdCkpOworKwkJCXZlY1R5cGU8TCwgVCwgUD4gY29uc3QgeSh2ZWNUeXBlPEwsIHR5cGVuYW1lIG1ha2VfdW5zaWduZWQ8VD46OnR5cGUsIFA+KC14KSA+PiB0eXBlbmFtZSBtYWtlX3Vuc2lnbmVkPFQ+Ojp0eXBlKFNoaWZ0KSk7CisgCisgCQkJcmV0dXJuICh4ID4+IFNoaWZ0KSB8IHk7CisgCQl9CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdnVsa2FuL3Z1bGthbi1kZW1vcy8wMDAxLVN1cHBvcnQtaW5zdGFsbGluZy1kZW1vcy1zdXBwb3J0LW91dC1vZi10cmVlLWJ1aWxkcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdnVsa2FuL3Z1bGthbi1kZW1vcy8wMDAxLVN1cHBvcnQtaW5zdGFsbGluZy1kZW1vcy1zdXBwb3J0LW91dC1vZi10cmVlLWJ1aWxkcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWRkZWEzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy92dWxrYW4vdnVsa2FuLWRlbW9zLzAwMDEtU3VwcG9ydC1pbnN0YWxsaW5nLWRlbW9zLXN1cHBvcnQtb3V0LW9mLXRyZWUtYnVpbGRzLnBhdGNoCkBAIC0wLDAgKzEsODUgQEAKK0Zyb20gZWRjYTY2NzY4NDc2NGNmY2MwNDYwZTQ0OGU4MzRmYWRmNjIzYTg4NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBNb24sIDMgSnVsIDIwMTcgMTQ6NDk6MTggKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gU3VwcG9ydCBpbnN0YWxsaW5nIGRlbW9zLCBzdXBwb3J0IG91dC1vZi10cmVlIGJ1aWxkcworCitUaGlzIGlzIGVzcGVjaWFsbHkgdXNlZnVsIGZvciBjcm9zcy1jb21waWxlIHNpdHVhdGlvbiB3aGVyZSB0ZXN0aW5nCitoYXBwZW5zIG9uIHRhcmdldC4KKworLURSRVNPVVJDRV9JTlNUQUxMX0RJUj08cGF0aD4gZGVjaWRlcyB3aGVyZSBkYXRhIGlzIGluc3RhbGxlZCAoYW5kCit3aGVyZSB0aGUgYmluYXJpZXMgd2lsbCBsb2FkIHRoZSBkYXRhIGZyb20pOiBpZiBpdCdzIGxlZnQgZW1wdHksCit0aGVuIG5vdGhpbmcgd2lsbCBiZSBpbnN0YWxsZWQgYW5kIGJpbmFyaWVzIHdpbGwgbG9hZCB0aGUgZGF0YSBmcm9tCitDTUFLRV9TT1VSQ0VfRElSLgorCitCaW5hcmllcyBhcmUgbm93IGNvcnJlY3RseSBidWlsdCBpbiBDTUFLRV9CSU5BUllfRElSLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL1Nhc2NoYVdpbGxlbXMvVnVsa2FuL3B1bGwvMzUyXQorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIENNYWtlTGlzdHMudHh0ICAgICAgICAgICAgIHwgMTUgKysrKysrKysrKysrKystCisgYmFzZS92dWxrYW5leGFtcGxlYmFzZS5jcHAgfCAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL0NNYWtlTGlzdHMudHh0IGIvQ01ha2VMaXN0cy50eHQKK2luZGV4IGI5ODg2YmMuLjQ5NThmZmYgMTAwNjQ0CistLS0gYS9DTWFrZUxpc3RzLnR4dAorKysrIGIvQ01ha2VMaXN0cy50eHQKK0BAIC0xNiw2ICsxNiw4IEBAIGluY2x1ZGVfZGlyZWN0b3JpZXMoYmFzZSkKKyBPUFRJT04oVVNFX0QyRF9XU0kgIkJ1aWxkIHRoZSBwcm9qZWN0IHVzaW5nIERpcmVjdCB0byBEaXNwbGF5IHN3YXBjaGFpbiIgT0ZGKQorIE9QVElPTihVU0VfV0FZTEFORF9XU0kgIkJ1aWxkIHRoZSBwcm9qZWN0IHVzaW5nIFdheWxhbmQgc3dhcGNoYWluIiBPRkYpCisgCisrc2V0KFJFU09VUkNFX0lOU1RBTExfRElSICIiIENBQ0hFIFBBVEggIlBhdGggdG8gaW5zdGFsbCByZXNvdXJjZXMgdG8gKGxlYXZlIGVtcHR5IGZvciBydW5uaW5nIHVuaW5zdGFsbGVkKSIpCisrCisgIyBVc2UgRmluZFZ1bGthbiBtb2R1bGUgYWRkZWQgd2l0aCBDTUFLRSAzLjcKKyBpZiAoTk9UIENNQUtFX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDMuNy4wKQorIAltZXNzYWdlKFNUQVRVUyAiVXNpbmcgbW9kdWxlIHRvIGZpbmQgVnVsa2FuIikKK0BAIC0xMDgsNiArMTEwLDEwIEBAIGZ1bmN0aW9uKGJ1aWxkRXhhbXBsZSBFWEFNUExFX05BTUUpCisgCQlhZGRfZXhlY3V0YWJsZSgke0VYQU1QTEVfTkFNRX0gJHtNQUlOX0NQUH0gJHtTT1VSQ0V9ICR7U0hBREVSU30pCisgCQl0YXJnZXRfbGlua19saWJyYXJpZXMoJHtFWEFNUExFX05BTUV9ICR7VnVsa2FuX0xJQlJBUll9ICR7QVNTSU1QX0xJQlJBUklFU30gJHtXQVlMQU5EX0NMSUVOVF9MSUJSQVJJRVN9ICR7Q01BS0VfVEhSRUFEX0xJQlNfSU5JVH0pCisgCWVuZGlmKFdJTjMyKQorKworKwlpZihSRVNPVVJDRV9JTlNUQUxMX0RJUikKKysJCWluc3RhbGwoVEFSR0VUUyAke0VYQU1QTEVfTkFNRX0gREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX0JJTkRJUn0pCisrCWVuZGlmKCkKKyBlbmRmdW5jdGlvbihidWlsZEV4YW1wbGUpCisgCisgIyBCdWlsZCBhbGwgZXhhbXBsZXMKK0BAIC0xMTcsNiArMTIzLDEzIEBAIGZ1bmN0aW9uKGJ1aWxkRXhhbXBsZXMpCisgCWVuZGZvcmVhY2goRVhBTVBMRSkKKyBlbmRmdW5jdGlvbihidWlsZEV4YW1wbGVzKQorIAorK2lmKFJFU09VUkNFX0lOU1RBTExfRElSKQorKwlhZGRfZGVmaW5pdGlvbnMoLURWS19FWEFNUExFX0RBVEFfRElSPVwiJHtSRVNPVVJDRV9JTlNUQUxMX0RJUn0vXCIpCisrCWluc3RhbGwoRElSRUNUT1JZIGRhdGEvIERFU1RJTkFUSU9OICR7UkVTT1VSQ0VfSU5TVEFMTF9ESVJ9LykKKytlbHNlKCkKKysJYWRkX2RlZmluaXRpb25zKC1EVktfRVhBTVBMRV9EQVRBX0RJUj1cIiR7Q01BS0VfU09VUkNFX0RJUn0vZGF0YS9cIikKKytlbmRpZigpCisrCisgIyBDb21waWxlciBzcGVjaWZpYyBzdHVmZgorIElGKE1TVkMpCisgCVNFVChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAvRUhzYyIpCitAQCAtMTI4LDcgKzE0MSw3IEBAIEVMU0UoV0lOMzIpCisgCWxpbmtfbGlicmFyaWVzKCR7WENCX0xJQlJBUklFU30gJHtWdWxrYW5fTElCUkFSWX0pCisgRU5ESUYoV0lOMzIpCisgCistc2V0KENNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAiJHtDTUFLRV9TT1VSQ0VfRElSfS9iaW4vIikKKytzZXQoQ01BS0VfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICIke0NNQUtFX0JJTkFSWV9ESVJ9L2Jpbi8iKQorIAorIHNldChFWEFNUExFUyAKKyAJYmxvb20KK2RpZmYgLS1naXQgYS9iYXNlL3Z1bGthbmV4YW1wbGViYXNlLmNwcCBiL2Jhc2UvdnVsa2FuZXhhbXBsZWJhc2UuY3BwCitpbmRleCA2NDczNjhhLi5hMGYyOGE1IDEwMDY0NAorLS0tIGEvYmFzZS92dWxrYW5leGFtcGxlYmFzZS5jcHAKKysrKyBiL2Jhc2UvdnVsa2FuZXhhbXBsZWJhc2UuY3BwCitAQCAtODQsNyArODQsNyBAQCBjb25zdCBzdGQ6OnN0cmluZyBWdWxrYW5FeGFtcGxlQmFzZTo6Z2V0QXNzZXRQYXRoKCkKKyAjaWYgZGVmaW5lZChfX0FORFJPSURfXykKKyAJcmV0dXJuICIiOworICNlbHNlCistCXJldHVybiAiLi8uLi9kYXRhLyI7CisrCXJldHVybiBWS19FWEFNUExFX0RBVEFfRElSOworICNlbmRpZgorIH0KKyAjZW5kaWYKKy0tIAorMi4xMy4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdnVsa2FuL3Z1bGthbi1kZW1vc19naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3Z1bGthbi92dWxrYW4tZGVtb3NfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiODk0MzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3Z1bGthbi92dWxrYW4tZGVtb3NfZ2l0LmJiCkBAIC0wLDAgKzEsNDEgQEAKK0RFU0NSSVBUSU9OID0gIkNvbGxlY3Rpb24gb2YgVnVsa2FuIGV4YW1wbGVzIgorTElDRU5TRSA9ICJNSVQiCitERVBFTkRTID0gInpsaWIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UubWQ7bWQ1PWRjZjQ3MzcyM2ZhYWJmMTdiYWE5YjVmMjIwNzU5OWQwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3RyaWFuZ2xlL3RyaWFuZ2xlLmNwcDtlbmRsaW5lPTEyO21kNT1iY2NkMWJmOWNhZGQ5ZTEwMDg2Y2Y3ODcyMTU3ZTRmYSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL1Nhc2NoYVdpbGxlbXMvVnVsa2FuLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVN1cHBvcnQtaW5zdGFsbGluZy1kZW1vcy1zdXBwb3J0LW91dC1vZi10cmVlLWJ1aWxkcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLURvbi10LWJ1aWxkLWRlbW9zLXdpdGgtcXVlc3Rpb25hYmx5LWxpY2Vuc2VkLWRhdGEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtYnVpbGQtb24teDg2LnBhdGNoIFwKKyIKK1VQU1RSRUFNX1ZFUlNJT05fVU5LTk9XTiA9ICIxIgorU1JDUkVWID0gIjE4ZGYwMGM3YjQ2NzdiMDg4OTQ4NmUxNjk3Nzg1N2FhOTg3OTQ3ZTIiCitVUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICJUaGVzZSBhcmUgbm90IHRoZSByZWxlYXNlcyB5b3UncmUgbG9va2luZyBmb3IiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAndnVsa2FuJworCitpbmhlcml0IGNtYWtlIGRpc3Ryb19mZWF0dXJlc19jaGVjaworREVQRU5EUyA9ICJ2dWxrYW4gYXNzaW1wIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgIyBSZW1vdmUgYXNzZXRzIHRoYXQgaGF2ZSB1bmNlcnRhaW4gbGljZW5zZXMKKyAgICBybSAke0R9JHtkYXRhZGlyfS92dWxrYW4tZGVtb3MvbW9kZWxzL2FybW9yLyogXAorICAgICAgICR7RH0ke2RhdGFkaXJ9L3Z1bGthbi1kZW1vcy9tb2RlbHMvc2liZW5pay8qIFwKKyAgICAgICAke0R9JHtkYXRhZGlyfS92dWxrYW4tZGVtb3MvbW9kZWxzL3Z1bGthbnNjZW5lKiBcCisgICAgICAgJHtEfSR7ZGF0YWRpcn0vdnVsa2FuLWRlbW9zL21vZGVscy9wbGFudHMuZGFlIFwKKyAgICAgICAke0R9JHtkYXRhZGlyfS92dWxrYW4tZGVtb3MvdGV4dHVyZXMvdGV4dHVyZWFycmF5X3BsYW50cyoKKworICAgIG12ICR7RH0ke2JpbmRpcn0vc2NyZWVuc2hvdCAke0R9JHtiaW5kaXJ9L3Z1bGthbi1zY3JlZW5zaG90Cit9CisKK0VYVFJBX09FQ01BS0UgPSAiLURSRVNPVVJDRV9JTlNUQUxMX0RJUj0ke2RhdGFkaXJ9L3Z1bGthbi1kZW1vcyIKKworQU5ZX09GX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEgd2F5bGFuZCIKKworIyBDYW4gb25seSBwaWNrIG9uZSBvZiBbd2F5bGFuZCx4Y2JdCitQQUNLQUdFQ09ORklHID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2F5bGFuZCcsICd3YXlsYW5kJywgJ3hjYicgLGQpfSIKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZF0gPSAiLURVU0VfV0FZTEFORF9XU0k9T04sIC1EVVNFX1dBWUxBTkRfV1NJPU9GRiwgd2F5bGFuZCIKK1BBQ0tBR0VDT05GSUdbeGNiXSA9ICIsLGxpYnhjYiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdnVsa2FuL3Z1bGthbi8wMDAxLVVzZS1nZXRlbnYtaWYtc2VjdXJlX2dldGVudi1kb2VzLW5vdC1leGlzdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdnVsa2FuL3Z1bGthbi8wMDAxLVVzZS1nZXRlbnYtaWYtc2VjdXJlX2dldGVudi1kb2VzLW5vdC1leGlzdC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk0OTIyYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3Z1bGthbi92dWxrYW4vMDAwMS1Vc2UtZ2V0ZW52LWlmLXNlY3VyZV9nZXRlbnYtZG9lcy1ub3QtZXhpc3QucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi1Gcm9tIDIwNTI1YWRkMWRmOGUxZmIxM2ZlZjkwYWMwNjhmOTgyZGVmOGI5NTggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgotRGF0ZTogV2VkLCA4IE1hciAyMDE3IDEzOjIzOjU4ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0hdIFVzZSBnZXRlbnYoKSBpZiBzZWN1cmVfZ2V0ZW52KCkgZG9lcyBub3QgZXhpc3QKLQotbXVzbCBkb2VzIG5vdCBpbXBsZW1lbnQgc2VjdXJlIHZlcnNpb246IGRlZmF1bHQgdG8gZ2V0ZW52KCkgaW4gdGhhdAotY2FzZS4KLQotaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9WdWxrYW4tTG9hZGVyQW5kVmFsaWRhdGlvbkxheWVycy9pc3N1ZXMvMTUzOAotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLVNpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+Ci0tLS0KLSBsb2FkZXIvbG9hZGVyLmMgfCA0ICsrKysKLSAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9sb2FkZXIvbG9hZGVyLmMgYi9sb2FkZXIvbG9hZGVyLmMKLWluZGV4IDI0NzU4ZjQuLmJmZjc5YzEgMTAwNjQ0Ci0tLS0gYS9sb2FkZXIvbG9hZGVyLmMKLSsrKyBiL2xvYWRlci9sb2FkZXIuYwotQEAgLTU0LDYgKzU0LDEwIEBACi0gI2VuZGlmCi0gI2VuZGlmCi0gCi0rI2lmICFkZWZpbmVkKF9fc2VjdXJlX2dldGVudikKLSsjZGVmaW5lIF9fc2VjdXJlX2dldGVudiBnZXRlbnYKLSsjZW5kaWYKLSsKLSBzdHJ1Y3QgbG9hZGVyX3N0cnVjdCBsb2FkZXIgPSB7MH07Ci0gLy8gVExTIGZvciBpbnN0YW5jZSBmb3IgYWxsb2MvZnJlZSBjYWxsYmFja3MKLSBUSFJFQURfTE9DQUxfREVDTCBzdHJ1Y3QgbG9hZGVyX2luc3RhbmNlICp0bHNfaW5zdGFuY2U7Ci0tLSAKLTIuMS40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdnVsa2FuL3Z1bGthbl8xLjAuMzkuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdnVsa2FuL3Z1bGthbl8xLjAuMzkuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVkMWM0OS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3Z1bGthbi92dWxrYW5fMS4wLjM5LjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi1TVU1NQVJZID0gIjNEIGdyYXBoaWNzIGFuZCBjb21wdXRlIEFQSSBjb21tb24gbG9hZGVyIgotREVTQ1JJUFRJT04gPSAiVnVsa2FuIGlzIGEgbmV3IGdlbmVyYXRpb24gZ3JhcGhpY3MgYW5kIGNvbXB1dGUgQVBJIFwKLXRoYXQgcHJvdmlkZXMgZWZmaWNpZW50IGFjY2VzcyB0byBtb2Rlcm4gR1BVcy4gVGhlc2UgcGFja2FnZXMgXAotcHJvdmlkZSBvbmx5IHRoZSBjb21tb24gdmVuZG9yLWFnbm9zdGljIGxpYnJhcnkgbG9hZGVyLCBoZWFkZXJzIGFuZCBcCi10aGUgdnVsa2FuaW5mbyB1dGlsaXR5LiIKLUhPTUVQQUdFID0gImh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3Z1bGthbi8iCi1CVUdUUkFDS0VSID0gImh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvVnVsa2FuLUxvYWRlckFuZFZhbGlkYXRpb25MYXllcnMiCi1TRUNUSU9OID0gImxpYnMiCi0KLUxJQ0VOU0UgPSAiQXBhY2hlLTIuMCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT05OWM2NDdjYTNkNGY2YTRiOWQ4NjI4Zjc1N2FhZDE1NiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9sb2FkZXIvbG9hZGVyLmM7ZW5kbGluZT0yNTttZDU9YTg3Y2Q1NDQyMjkxYzIzZDFmY2U0ZWVjZTRjZmRlOWQiCi1TUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL1Z1bGthbi1Mb2FkZXJBbmRWYWxpZGF0aW9uTGF5ZXJzLmdpdDticmFuY2g9c2RrLTEuMC4zOSBcCi0gICAgICAgICAgIGZpbGU6Ly9kZW1vcy1Eb24tdC1idWlsZC10cmktb3ItY3ViZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLVVzZS1nZXRlbnYtaWYtc2VjdXJlX2dldGVudi1kb2VzLW5vdC1leGlzdC5wYXRjaCBcCi0iCi1TUkNSRVYgPSAiOWMyMWVkMGZiMjc1NTg5YzNhZjYxMThhZWM5ZWY0ZjFkMTU0NGRjMSIKLQotUyA9ICIke1dPUktESVJ9L2dpdCIKLQotCi1pbmhlcml0IGNtYWtlIHB5dGhvbjNuYXRpdmUgbGliX3BhY2thZ2UgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCi1BTllfT0ZfRElTVFJPX0ZFQVRVUkVTID0gIngxMSB3YXlsYW5kIgotCi1FWFRSQV9PRUNNQUtFID0gIi1EQlVJTERfV1NJX01JUl9TVVBQT1JUPU9GRiBcCi0gICAgICAgICAgICAgICAgIC1EQlVJTERfTEFZRVJTPU9GRiBcCi0gICAgICAgICAgICAgICAgIC1EQlVJTERfVEVTVFM9T0ZGIgotCi0jIG11c3QgY2hvb3NlIHgxMSBvciB3YXlsYW5kIG9yIGJvdGgKLVBBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJyAsZCl9IFwKLSAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dheWxhbmQnLCAnd2F5bGFuZCcsICcnICxkKX0iCi1QQUNLQUdFQ09ORklHW3gxMV0gPSAiLURCVUlMRF9XU0lfWExJQl9TVVBQT1JUPU9OIC1EQlVJTERfV1NJX1hDQl9TVVBQT1JUPU9OIC1EREVNT1NfV1NJX1NFTEVDVElPTj1YQ0IsIC1EQlVJTERfV1NJX1hMSUJfU1VQUE9SVD1PRkYgLURCVUlMRF9XU0lfWENCX1NVUFBPUlQ9T0ZGIC1EREVNT1NfV1NJX1NFTEVDVElPTj1XQVlMQU5ELCBsaWJ4Y2IgbGlieDExIGxpYnhyYW5kciIKLVBBQ0tBR0VDT05GSUdbd2F5bGFuZF0gPSAiLURCVUlMRF9XU0lfV0FZTEFORF9TVVBQT1JUPU9OLCAtREJVSUxEX1dTSV9XQVlMQU5EX1NVUFBPUlQ9T0ZGLCB3YXlsYW5kIgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3Z1bGthbi92dWxrYW5fMS4wLjUxLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3Z1bGthbi92dWxrYW5fMS4wLjUxLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlMzliYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdnVsa2FuL3Z1bGthbl8xLjAuNTEuMC5iYgpAQCAtMCwwICsxLDM2IEBACitTVU1NQVJZID0gIjNEIGdyYXBoaWNzIGFuZCBjb21wdXRlIEFQSSBjb21tb24gbG9hZGVyIgorREVTQ1JJUFRJT04gPSAiVnVsa2FuIGlzIGEgbmV3IGdlbmVyYXRpb24gZ3JhcGhpY3MgYW5kIGNvbXB1dGUgQVBJIFwKK3RoYXQgcHJvdmlkZXMgZWZmaWNpZW50IGFjY2VzcyB0byBtb2Rlcm4gR1BVcy4gVGhlc2UgcGFja2FnZXMgXAorcHJvdmlkZSBvbmx5IHRoZSBjb21tb24gdmVuZG9yLWFnbm9zdGljIGxpYnJhcnkgbG9hZGVyLCBoZWFkZXJzIGFuZCBcCit0aGUgdnVsa2FuaW5mbyB1dGlsaXR5LiIKK0hPTUVQQUdFID0gImh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3Z1bGthbi8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvVnVsa2FuLUxvYWRlckFuZFZhbGlkYXRpb25MYXllcnMiCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiQXBhY2hlLTIuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT05OWM2NDdjYTNkNGY2YTRiOWQ4NjI4Zjc1N2FhZDE1NiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9sb2FkZXIvbG9hZGVyLmM7ZW5kbGluZT0yNTttZDU9YTg3Y2Q1NDQyMjkxYzIzZDFmY2U0ZWVjZTRjZmRlOWQiCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL1Z1bGthbi1Mb2FkZXJBbmRWYWxpZGF0aW9uTGF5ZXJzLmdpdDticmFuY2g9c2RrLTEuMC41MSBcCisgICAgICAgICAgIGZpbGU6Ly9kZW1vcy1Eb24tdC1idWlsZC10cmktb3ItY3ViZS5wYXRjaCBcCisiCitTUkNSRVYgPSAiOGQwMjFlNGQ1YTlmOTE0MzZmNDQ2MmRmMWRhZmIyMjI5MDhlMjk2ZCIKK1VQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gInNkay0oP1A8cHZlcj5cZCsoXC5cZCspKykiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ2dWxrYW4iCisKK2luaGVyaXQgY21ha2UgcHl0aG9uM25hdGl2ZSBsaWJfcGFja2FnZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKK0FOWV9PRl9ESVNUUk9fRkVBVFVSRVMgPSAieDExIHdheWxhbmQiCisKK0VYVFJBX09FQ01BS0UgPSAiLURCVUlMRF9XU0lfTUlSX1NVUFBPUlQ9T0ZGIFwKKyAgICAgICAgICAgICAgICAgLURCVUlMRF9MQVlFUlM9T0ZGIFwKKyAgICAgICAgICAgICAgICAgLURCVUlMRF9URVNUUz1PRkYiCisKKyMgbXVzdCBjaG9vc2UgeDExIG9yIHdheWxhbmQgb3IgYm90aAorUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnICxkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2F5bGFuZCcsICd3YXlsYW5kJywgJycgLGQpfSIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItREJVSUxEX1dTSV9YTElCX1NVUFBPUlQ9T04gLURCVUlMRF9XU0lfWENCX1NVUFBPUlQ9T04gLURERU1PU19XU0lfU0VMRUNUSU9OPVhDQiwgLURCVUlMRF9XU0lfWExJQl9TVVBQT1JUPU9GRiAtREJVSUxEX1dTSV9YQ0JfU1VQUE9SVD1PRkYgLURERU1PU19XU0lfU0VMRUNUSU9OPVdBWUxBTkQsIGxpYnhjYiBsaWJ4MTEgbGlieHJhbmRyIgorUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSA9ICItREJVSUxEX1dTSV9XQVlMQU5EX1NVUFBPUlQ9T04sIC1EQlVJTERfV1NJX1dBWUxBTkRfU1VQUE9SVD1PRkYsIHdheWxhbmQiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gIm1lc2EtdnVsa2FuLWRyaXZlcnMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXQvMDAwMS10b29scy1GaXgtcmFjZS1pbi1hdXRvdG9vbHMtaW5zdGFsbC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9saWJpbnB1dC8wMDAxLXRvb2xzLUZpeC1yYWNlLWluLWF1dG90b29scy1pbnN0YWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2Njc1MzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXQvMDAwMS10b29scy1GaXgtcmFjZS1pbi1hdXRvdG9vbHMtaW5zdGFsbC5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIDVlODg2NGM1YjdhMmUyNThlZWEwNDFiMGVmNjZkYWM3ZmNhYjliN2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogV2VkLCA5IEF1ZyAyMDE3IDA5OjQ3OjE0ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIHRvb2xzOiBGaXggcmFjZSBpbiAoYXV0b3Rvb2xzKSBpbnN0YWxsCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK2V4ZWMvZGF0YSBkaXN0aW5jdGlvbiBpcyBkb25lIGJhc2VkIG9uIGluc3RhbGwgZGlyIHNvIGNvbXBhdCBzY3JpcHRzCittdXN0IGJlIG1vdmVkIGluIGV4ZWMgaG9vay4KKworVGhpcyBzaG91bGQgZml4IHRoaXMgb2NjYXNpb25hbCBmYWlsdXJlOgorfMKgaW5zdGFsbDogY2Fubm90IGNoYW5nZSBwZXJtaXNzaW9ucyBvZgorfMKg4oCYL3Vzci9iaW4vbGliaW5wdXQtZGVidWctZXZlbnRzLmNvbXBhdOKAmTogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKy0tLQorIHRvb2xzL01ha2VmaWxlLmFtIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdG9vbHMvTWFrZWZpbGUuYW0gYi90b29scy9NYWtlZmlsZS5hbQoraW5kZXggMmM4NjYwYi4uN2VlOGI5MCAxMDA2NDQKKy0tLSBhL3Rvb2xzL01ha2VmaWxlLmFtCisrKysgYi90b29scy9NYWtlZmlsZS5hbQorQEAgLTYzLDcgKzYzLDcgQEAgZW5kaWYKKyAKKyBFWFRSQV9ESVNUID0gbWFrZS1wdHJhY2NlbC1ncmFwaHMuc2ggaW5zdGFsbC1jb21wYXQtc2NyaXB0cy5zaCAkKGJpbl9TQ1JJUFRTKQorIAorLWluc3RhbGwtZGF0YS1ob29rOgorK2luc3RhbGwtZXhlYy1ob29rOgorIAkoY2QgJChERVNURElSKSQoYmluZGlyKSAmJiBtdiBsaWJpbnB1dC1saXN0LWRldmljZXMuY29tcGF0IGxpYmlucHV0LWxpc3QtZGV2aWNlcykKKyAJKGNkICQoREVTVERJUikkKGJpbmRpcikgJiYgbXYgbGliaW5wdXQtZGVidWctZXZlbnRzLmNvbXBhdCBsaWJpbnB1dC1kZWJ1Zy1ldmVudHMpCisgCistLSAKKzIuMTMuMworCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXQvdG91Y2hwYWQtc2VyaWFsLXN5bmFwdGljcy1uZWVkLXRvLWZha2UtbmV3LXRvdWNoZXMtb24tVFJJUExFVEFQLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0L3RvdWNocGFkLXNlcmlhbC1zeW5hcHRpY3MtbmVlZC10by1mYWtlLW5ldy10b3VjaGVzLW9uLVRSSVBMRVRBUC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUyYjQ5Ni4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXQvdG91Y2hwYWQtc2VyaWFsLXN5bmFwdGljcy1uZWVkLXRvLWZha2UtbmV3LXRvdWNoZXMtb24tVFJJUExFVEFQLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotVGhpcyBpcyBhIHdvcmthcm91bmQgdXBzdHJlYW0gc3VnZ2VzdHMgZm9yIHVzZSB3aXRoIGtlcm5lbCA0LjEuCi0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdGVtcG9yYXJ5IHdvcmstYXJvdW5kXQotU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KLQotCi0KLUZyb206IFBldGVyIEh1dHRlcmVyIDxwZXRlci5odXR0ZXJlckB3aG8tdC5uZXQ+Ci1EYXRlOiBNb24gQXVnIDMgMTg6MjM6MTIgUERUIDIwMTUKLVN1YmplY3Q6IFtQQVRDSCB2MyBsaWJpbnB1dF0gdG91Y2hwYWQ6IHNlcmlhbCBzeW5hcHRpY3MgbmVlZCB0byBmYWtlIG5ldyB0b3VjaGVzIG9uIFRSSVBMRVRBUAotCi1PbiB0aGUgNC4xIGtlcm5lbHMgc3luYXB0aWNzIHByZXRlbmRzIHRvIGhhdmUgMyBzbG90cyAodGhlIHNlcmlhbCBmdyBvbmx5IGRvZXMKLTIpLiBUaGlzIHdhcyBhZGRlZCB0byBhdm9pZCBjdXJzb3IganVtcHMgYnV0IGhhcyBzaW5jZSBiZWVuIHJldmVydGVkIGZvciA0LjIKLShrZXJuZWwgY29tbWl0IGRiZjNjMzcwODYsIDQuMS4zIGlzIHN0aWxsIGJ1Z2d5KS4gSW4gc29tZSBjYXNlcyBhIFRSSVBMRVRBUAotbWF5IGJlIHRyaWdnZXJlZCB3aXRob3V0IHNsb3QgMiBldmVyIGFjdGl2YXRpbmcuCi0KLVdoaWxlIHRoZXJlIGFyZSBzdGlsbCB0aG9zZSBrZXJuZWxzIG91dCB0aGVyZSwgd29yayBhcm91bmQgdGhpcyBidWcgYnkgb3BlbmluZwotYSBuZXcgdG91Y2ggcG9pbnQgd2hlcmUgbm9uZSBleGlzdHMgaWYgdGhlIGZha2UgZmluZ2VyIGNvdW50IGV4Y2VlZHMgdGhlIHNsb3QKLWNvdW50LgotCi1SZXBvcnRlZC1ieTogSmFuIEFsZXhhbmRlciBTdGVmZmVucyA8amFuLnN0ZWZmZW5zIGF0IGdtYWlsLmNvbT4KLVNpZ25lZC1vZmYtYnk6IFBldGVyIEh1dHRlcmVyIDxwZXRlci5odXR0ZXJlciBhdCB3aG8tdC5uZXQ+Ci1UZXN0ZWQtYnk6IEphbiBBbGV4YW5kZXIgU3RlZmZlbnMgPGphbi5zdGVmZmVucyBhdCBnbWFpbC5jb20+Ci1SZXZpZXdlZC1ieTogSGFucyBkZSBHb2VkZSA8aGRlZ29lZGUgYXQgcmVkaGF0LmNvbT4KLS0tLQotQ2hhbmdlcyB0byB2MjoKLS0gc3BsaXQgb3V0IHRoZSBoYW5kbGluZyBpbnN0ZWFkIG9mIGhhdmluZyBhIHRtcCBzdGF0ZSB2YXJpYWJsZSwgc2VlIEhhbnMnCi0gIGNvbW1lbnRzIGZyb20gdjIKLQotTWFpbmx5IHNlbmRpbmcgdGhpcyB0byB0aGUgbGlzdCBhZ2FpbiBzbyBJIGhhdmUgYSBsaW5rIHRvIHBvaW50IHBlb3BsZSB0by4KLUlmIHlvdSdyZSBvbiA0LjEueCBhZGQgdGhpcyBwYXRjaCB0byB5b3VyIGRpc3RyaWJ1dGlvbiBwYWNrYWdlLgotCi0gc3JjL2V2ZGV2LW10LXRvdWNocGFkLmMgfCAyMiArKysrKysrKysrKysrKysrLS0tLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9zcmMvZXZkZXYtbXQtdG91Y2hwYWQuYyBiL3NyYy9ldmRldi1tdC10b3VjaHBhZC5jCi1pbmRleCBhNjgzZDlhLi41ZWYwM2Q1IDEwMDY0NAotLS0tIGEvc3JjL2V2ZGV2LW10LXRvdWNocGFkLmMKLSsrKyBiL3NyYy9ldmRldi1tdC10b3VjaHBhZC5jCi1AQCAtMzY5LDEzICszNjksMjMgQEAgdHBfcmVzdG9yZV9zeW5hcHRpY3NfdG91Y2hlcyhzdHJ1Y3QgdHBfZGlzcGF0Y2ggKnRwLAotIAlmb3IgKGkgPSAwOyBpIDwgdHAtPm51bV9zbG90czsgaSsrKSB7Ci0gCQlzdHJ1Y3QgdHBfdG91Y2ggKnQgPSB0cF9nZXRfdG91Y2godHAsIGkpOwotIAotLQkJaWYgKHQtPnN0YXRlICE9IFRPVUNIX0VORCkKLSsJCXN3aXRjaCh0LT5zdGF0ZSkgewotKwkJY2FzZSBUT1VDSF9IT1ZFUklORzoKLSsJCWNhc2UgVE9VQ0hfQkVHSU46Ci0rCQljYXNlIFRPVUNIX1VQREFURToKLSAJCQljb250aW51ZTsKLS0KLS0JCS8qIG5ldyB0b3VjaCwgbW92ZSBpdCB0aHJvdWdoIGJlZ2luIHRvIHVwZGF0ZSBpbW1lZGlhdGVseSAqLwotLQkJdHBfbmV3X3RvdWNoKHRwLCB0LCB0aW1lKTsKLS0JCXRwX2JlZ2luX3RvdWNoKHRwLCB0LCB0aW1lKTsKLS0JCXQtPnN0YXRlID0gVE9VQ0hfVVBEQVRFOwotKwkJY2FzZSBUT1VDSF9OT05FOgotKwkJCS8qIG5ldyB0b3VjaCwgbW92ZSBpdCB0aHJvdWdoIHRvIGJlZ2luIGltbWVkaWF0ZWx5ICovCi0rCQkJdHBfbmV3X3RvdWNoKHRwLCB0LCB0aW1lKTsKLSsJCQl0cF9iZWdpbl90b3VjaCh0cCwgdCwgdGltZSk7Ci0rCQkJYnJlYWs7Ci0rCQljYXNlIFRPVUNIX0VORDoKLSsJCQkvKiB0b3VjaCBqdXN0IGVuZGVkICx3ZSBuZWVkIG5lZWQgdG8gcmVzdG9yZSBpdCB0byB1cGRhdGUgKi8KLSsJCQl0cF9uZXdfdG91Y2godHAsIHQsIHRpbWUpOwotKwkJCXRwX2JlZ2luX3RvdWNoKHRwLCB0LCB0aW1lKTsKLSsJCQl0LT5zdGF0ZSA9IFRPVUNIX1VQREFURTsKLSsJCQlicmVhazsKLSsJCX0KLSAJfQotIH0KLSAKLS0tIAotMi40LjMKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0XzEuNi4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0XzEuNi4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODcxNGYyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9saWJpbnB1dF8xLjYuMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLVNVTU1BUlkgPSAiTGlicmFyeSB0byBoYW5kbGUgaW5wdXQgZGV2aWNlcyBpbiBXYXlsYW5kIGNvbXBvc2l0b3JzIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9saWJpbnB1dC8iCi1TRUNUSU9OID0gImxpYnMiCi0KLUxJQ0VOU0UgPSAiTUlUIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjE4NGFlZjM4ZmYxMzdlZDMzY2U5YTYzYjlkMWViOGYiCi0KLURFUEVORFMgPSAibGliZXZkZXYgdWRldiBtdGRldiIKLQotU1JDX1VSSSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS8ke0JQTn0vJHtCUH0udGFyLnh6IFwKLSAgICAgICAgICAgZmlsZTovL3RvdWNocGFkLXNlcmlhbC1zeW5hcHRpY3MtbmVlZC10by1mYWtlLW5ldy10b3VjaGVzLW9uLVRSSVBMRVRBUC5wYXRjaCBcCi0iCi1TUkNfVVJJW21kNXN1bV0gPSAiN2UyODIzNDRmOGVkN2VjNWNmODdjYTlmYzIyNjc0ZmIiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWQ4MTZmMTNlZWU2M2JjY2EwZTljM2JiNjUyYzUyYWI1NWYzOWJlNGQxYjkwYjU0ZTRiZmQxZGM5MmVmNTVhOCIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCi0KLVBBQ0tBR0VDT05GSUcgPz89ICIiCi1QQUNLQUdFQ09ORklHW2xpYnVud2luZF0gPSAiLS13aXRoLWxpYnVud2luZCwtLXdpdGhvdXQtbGlidW53aW5kLGxpYnVud2luZCIKLVBBQ0tBR0VDT05GSUdbbGlid2Fjb21dID0gIi0tZW5hYmxlLWxpYndhY29tLC0tZGlzYWJsZS1saWJ3YWNvbSxsaWJ3YWNvbSIKLVBBQ0tBR0VDT05GSUdbZ3VpXSA9ICItLWVuYWJsZS1ldmVudC1ndWksLS1kaXNhYmxlLWV2ZW50LWd1aSxjYWlybyBndGsrMyIKLQotVURFVkRJUiA9ICJgcGtnLWNvbmZpZyAtLXZhcmlhYmxlPXVkZXZkaXIgdWRldmAiCi0KLUVYVFJBX09FQ09ORiArPSAiLS13aXRoLXVkZXYtZGlyPSR7VURFVkRJUn0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXRfMS44LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXRfMS44LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIxYmFiZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9saWJpbnB1dF8xLjguMS5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIkxpYnJhcnkgdG8gaGFuZGxlIGlucHV0IGRldmljZXMgaW4gV2F5bGFuZCBjb21wb3NpdG9ycyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvbGliaW5wdXQvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTIxODRhZWYzOGZmMTM3ZWQzM2NlOWE2M2I5ZDFlYjhmIgorCitERVBFTkRTID0gImxpYmV2ZGV2IHVkZXYgbXRkZXYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvJHtCUE59LyR7QlB9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXRvb2xzLUZpeC1yYWNlLWluLWF1dG90b29scy1pbnN0YWxsLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjgyNDdmMGJiNjcwNTJmZmIyNzJjNTBjM2NiOWM1OTk4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUzNTkwYTkwMzdlNTYxYTU3OTFjOGJkM2IzNGJmZDMwZmFkNWNhY2Q4Y2JlZmMwZDc1ZmFmZTNhNDFkMDcxNDciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBsaWJfcGFja2FnZQorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tsaWJ1bndpbmRdID0gIi0td2l0aC1saWJ1bndpbmQsLS13aXRob3V0LWxpYnVud2luZCxsaWJ1bndpbmQiCitQQUNLQUdFQ09ORklHW2xpYndhY29tXSA9ICItLWVuYWJsZS1saWJ3YWNvbSwtLWRpc2FibGUtbGlid2Fjb20sbGlid2Fjb20iCitQQUNLQUdFQ09ORklHW2d1aV0gPSAiLS1lbmFibGUtZGVidWctZ3VpLC0tZGlzYWJsZS1kZWJ1Zy1ndWksY2Fpcm8gZ3RrKzMiCisKK1VERVZESVIgPSAiYHBrZy1jb25maWcgLS12YXJpYWJsZT11ZGV2ZGlyIHVkZXZgIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC11ZGV2LWRpcj0ke1VERVZESVJ9IC0tZGlzYWJsZS1kb2N1bWVudGF0aW9uIC0tZGlzYWJsZS10ZXN0cyIKKworIyBwYWNrYWdlIG5hbWUgY2hhbmdlZCBpbiAxLjguMSB1cGdyYWRlOiBtYWtlIHN1cmUgcGFja2FnZSB1cGdyYWRlcyB3b3JrCitSUFJPVklERVNfJHtQTn0gPSAibGliaW5wdXQiCitSUkVQTEFDRVNfJHtQTn0gPSAibGliaW5wdXQiCitSQ09ORkxJQ1RTXyR7UE59ID0gImxpYmlucHV0IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmQtcHJvdG9jb2xzXzEuMTAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZC1wcm90b2NvbHNfMS4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjllOWYzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmQtcHJvdG9jb2xzXzEuMTAuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJDb2xsZWN0aW9uIG9mIGFkZGl0aW9uYWwgV2F5bGFuZCBwcm90b2NvbHMiCitERVNDUklQVElPTiA9ICJXYXlsYW5kIHByb3RvY29scyB0aGF0IGFkZCBmdW5jdGlvbmFsaXR5IG5vdCBcCithdmFpbGFibGUgaW4gdGhlIFdheWxhbmQgY29yZSBwcm90b2NvbC4gU3VjaCBwcm90b2NvbHMgZWl0aGVyIGFkZCBcCitjb21wbGV0ZWx5IG5ldyBmdW5jdGlvbmFsaXR5LCBvciBleHRlbmQgdGhlIGZ1bmN0aW9uYWxpdHkgb2Ygc29tZSBvdGhlciBcCitwcm90b2NvbCBlaXRoZXIgaW4gV2F5bGFuZCBjb3JlLCBvciBzb21lIG90aGVyIHByb3RvY29sIGluIFwKK3dheWxhbmQtcHJvdG9jb2xzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93YXlsYW5kLmZyZWVkZXNrdG9wLm9yZyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzdiMTJiNjcwMmRhMzhjYTAyOGFjZTU0YWFlM2Q0ODQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3RhYmxlL3ByZXNlbnRhdGlvbi10aW1lL3ByZXNlbnRhdGlvbi10aW1lLnhtbDtlbmRsaW5lPTI2O21kNT00NjQ2Y2Q3ZDllZGM5ZmE1NWRiOTQxZjJkM2E3ZGM1MyIKKworU1JDX1VSSSA9ICJodHRwczovL3dheWxhbmQuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzLyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiODRhNzg0NmMyYjZhNmEzZTI2NWZjOWJlMzY0NTNlNjAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTcxOWM1MWQ3MzU0ODY0OTgzMTcxYzUwODNlOTNhNzJhYzk5MjI5ZTJiNDYwYzRiYjEwNTEzZGUwODgzOWMwYSIKKworaW5oZXJpdCBhbGxhcmNoIGF1dG90b29scyBwa2djb25maWcKKworUEFDS0FHRVMgPSAiJHtQTn0iCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9wa2djb25maWcvd2F5bGFuZC1wcm90b2NvbHMucGMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZC1wcm90b2NvbHNfMS43LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmQtcHJvdG9jb2xzXzEuNy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQyZjBkYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZC1wcm90b2NvbHNfMS43LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotU1VNTUFSWSA9ICJDb2xsZWN0aW9uIG9mIGFkZGl0aW9uYWwgV2F5bGFuZCBwcm90b2NvbHMiCi1ERVNDUklQVElPTiA9ICJXYXlsYW5kIHByb3RvY29scyB0aGF0IGFkZCBmdW5jdGlvbmFsaXR5IG5vdCBcCi1hdmFpbGFibGUgaW4gdGhlIFdheWxhbmQgY29yZSBwcm90b2NvbC4gU3VjaCBwcm90b2NvbHMgZWl0aGVyIGFkZCBcCi1jb21wbGV0ZWx5IG5ldyBmdW5jdGlvbmFsaXR5LCBvciBleHRlbmQgdGhlIGZ1bmN0aW9uYWxpdHkgb2Ygc29tZSBvdGhlciBcCi1wcm90b2NvbCBlaXRoZXIgaW4gV2F5bGFuZCBjb3JlLCBvciBzb21lIG90aGVyIHByb3RvY29sIGluIFwKLXdheWxhbmQtcHJvdG9jb2xzLiIKLUhPTUVQQUdFID0gImh0dHA6Ly93YXlsYW5kLmZyZWVkZXNrdG9wLm9yZyIKLUxJQ0VOU0UgPSAiTUlUIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzdiMTJiNjcwMmRhMzhjYTAyOGFjZTU0YWFlM2Q0ODQgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3RhYmxlL3ByZXNlbnRhdGlvbi10aW1lL3ByZXNlbnRhdGlvbi10aW1lLnhtbDtlbmRsaW5lPTI2O21kNT00NjQ2Y2Q3ZDllZGM5ZmE1NWRiOTQxZjJkM2E3ZGM1MyIKLQotU1JDX1VSSSA9ICJodHRwczovL3dheWxhbmQuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzLyR7QlBOfS0ke1BWfS50YXIueHogXAotICAgICAgICAgICAiCi1TUkNfVVJJW21kNXN1bV0gPSAiOWFjZmM5NTU2ZjdjZmVkYzQ0ZDk3YWY2MGRhNjZhNWYiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjM1ZjJhOTM3ZDMxOGYxZmVjYjk3YjU0MDc0Y2EyMTE0ODZlMzhhZjk0Mzg2OGRkMGZhODJlYTM4ZDA5MWMxZiIKLQotaW5oZXJpdCBhbGxhcmNoIGF1dG90b29scyBwa2djb25maWcKLQotUEFDS0FHRVMgPSAiJHtQTn0iCi1GSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9wa2djb25maWcvd2F5bGFuZC1wcm90b2NvbHMucGMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL3dlc3Rvbi1nbC1yZW5kZXJlci1TZXQtcGl0Y2gtY29ycmVjdGx5LWZvci1zdWJzYW1wbGVkLXRleHR1cmVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi93ZXN0b24tZ2wtcmVuZGVyZXItU2V0LXBpdGNoLWNvcnJlY3RseS1mb3Itc3Vic2FtcGxlZC10ZXh0dXJlcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE4ODAxOC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL3dlc3Rvbi1nbC1yZW5kZXJlci1TZXQtcGl0Y2gtY29ycmVjdGx5LWZvci1zdWJzYW1wbGVkLXRleHR1cmVzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotTXVsdGktcGxhbmUgc3ViLXNhbXBsZWQgdGV4dHVyZXMgaGF2ZSBwYXJ0aWFsIHdpZHRoL2hlaWdodCwgZS5nLgotWVVWNDIwL0k0MjAgaGFzIGEgZnVsbC1zaXplIFkgcGxhbmUsIGZvbGxvd2VkIGJ5IGEgaGFsZi13aWR0aC9oZWlnaHQgVQotcGxhbmUsIGFuZCBhIGhhbGYtd2lkdGgvaGVpZ2h0IFYgcGxhbmUuCi0KLXp3cF9saW51eF9kbWFidWZfdjEgYWxsb3dzIGNsaWVudHMgdG8gcGFzcyBhbiBleHBsaWNpdCBwaXRjaCBmb3IgZWFjaAotcGxhbmUsIGJ1dCBmb3Igd2xfc2htIHRoaXMgbXVzdCBiZSBpbmZlcnJlZC4gZ2wtcmVuZGVyZXIgd2FzIGNvcnJlY3RseQotYWNjb3VudGluZyBmb3IgdGhlIHdpZHRoIGFuZCBoZWlnaHQgd2hlbiBzdWJzYW1wbGluZywgYnV0IHRoZSBwaXRjaCB3YXMKLWJlaW5nIHRha2VuIGFzIHRoZSBwaXRjaCBmb3IgdGhlIGZpcnN0IHBsYW5lLgotCi1UaGlzIGRvZXMgbm90IG1hdGNoIHRoZSByZXF1aXJlbWVudHMgZm9yIEdTdHJlYW1lcidzIHdheWxhbmRzaW5rLCBpbgotcGFydGljdWxhciwgYXMgd2VsbCBhcyBvdGhlciBjbGllbnRzLiBGaXggdGhlIFNITSB1cGxvYWQgcGF0aCB0bwotY29ycmVjdGx5IHNldCB0aGUgcGl0Y2ggZm9yIGVhY2ggcGxhbmUsIGFjY29yZGluZyB0byBzdWJzYW1wbGluZy4KLQotVGVzdGVkIHdpdGg6Ci0gICQgZ3N0LWxhdW5jaC0xLjAgdmlkZW90ZXN0c3JjICEgd2F5bGFuZHNpbmsKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbaHR0cHM6Ly9wYXRjaHdvcmsuZnJlZWRlc2t0b3Aub3JnL3BhdGNoLzE4MDc2Ny9dCi0KLVNpZ25lZC1vZmYtYnk6IERhbmllbCBTdG9uZSA8ZGFuaWVsc0Bjb2xsYWJvcmEuY29tPgotRml4ZXM6IGZkZWVmZTQyNDE4ICgiZ2wtcmVuZGVyZXI6IGFkZCBzdXBwb3J0IG9mIFdMX1NITV9GT1JNQVRfWVVWNDIwIikKLVJlcG9ydGVkLWJ5OiBGYWJpZW4gTGFob3VkZXJlIDxmYWJpZW4ubGFob3VkZXJlQGNvbGxhYm9yYS5jby51az4KLUJ1Z3ppbGxhOiBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMwNjMKLQotLS0tCi0gbGlid2VzdG9uL2dsLXJlbmRlcmVyLmMgfCA0ICsrLS0KLSAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvbGlid2VzdG9uL2dsLXJlbmRlcmVyLmMgYi9saWJ3ZXN0b24vZ2wtcmVuZGVyZXIuYwotaW5kZXggMjQ0Y2UzMDkuLjQwYmYwYmI2IDEwMDY0NAotLS0tIGEvbGlid2VzdG9uL2dsLXJlbmRlcmVyLmMKLSsrKyBiL2xpYndlc3Rvbi9nbC1yZW5kZXJlci5jCi1AQCAtMTI4NSwxNCArMTI4NSwxMyBAQCBnbF9yZW5kZXJlcl9mbHVzaF9kYW1hZ2Uoc3RydWN0IHdlc3Rvbl9zdXJmYWNlICpzdXJmYWNlKQotIAkJZ290byBkb25lOwotIAl9Ci0gCi0tCWdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEhfRVhULCBncy0+cGl0Y2gpOwotLQotIAlpZiAoZ3MtPm5lZWRzX2Z1bGxfdXBsb2FkKSB7Ci0gCQlnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1BJWEVMU19FWFQsIDApOwotIAkJZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dTX0VYVCwgMCk7Ci0gCQl3bF9zaG1fYnVmZmVyX2JlZ2luX2FjY2VzcyhidWZmZXItPnNobV9idWZmZXIpOwotIAkJZm9yIChqID0gMDsgaiA8IGdzLT5udW1fdGV4dHVyZXM7IGorKykgewotIAkJCWdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgZ3MtPnRleHR1cmVzW2pdKTsKLSsJCQlnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1dfTEVOR1RIX0VYVCwgZ3MtPnBpdGNoIC8gZ3MtPmhzdWJbal0pOwotIAkJCWdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLAotIAkJCQkgICAgIGdzLT5nbF9mb3JtYXRbal0sCi0gCQkJCSAgICAgZ3MtPnBpdGNoIC8gZ3MtPmhzdWJbal0sCi1AQCAtMTMxNyw2ICsxMzE2LDcgQEAgZ2xfcmVuZGVyZXJfZmx1c2hfZGFtYWdlKHN0cnVjdCB3ZXN0b25fc3VyZmFjZSAqc3VyZmFjZSkKLSAJCWdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XU19FWFQsIHIueTEpOwotIAkJZm9yIChqID0gMDsgaiA8IGdzLT5udW1fdGV4dHVyZXM7IGorKykgewotIAkJCWdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgZ3MtPnRleHR1cmVzW2pdKTsKLSsJCQlnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1dfTEVOR1RIX0VYVCwgZ3MtPnBpdGNoIC8gZ3MtPmhzdWJbal0pOwotIAkJCWdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLAotIAkJCQkJci54MSAvIGdzLT5oc3ViW2pdLAotIAkJCQkJci55MSAvIGdzLT52c3ViW2pdLApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbl8yLjAuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b25fMi4wLjAuYmIKaW5kZXggMDYzNDk0Yy4uNTRiMDdiZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbl8yLjAuMC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uXzIuMC4wLmJiCkBAIC0xMiw3ICsxMiw2IEBACiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS5hYy1GaXgtd2F5bGFuZC1wcm90b2NvbHMtcGF0aC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly94d2F5bGFuZC53ZXN0b24tc3RhcnQgXAogICAgICAgICAgICBmaWxlOi8vMDAwMS13ZXN0b24tbGF1bmNoLVByb3ZpZGUtYS1kZWZhdWx0LXZlcnNpb24tdGhhdC1kb2Vzbi10LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3dlc3Rvbi1nbC1yZW5kZXJlci1TZXQtcGl0Y2gtY29ycmVjdGx5LWZvci1zdWJzYW1wbGVkLXRleHR1cmVzLnBhdGNoIFwKICIKIFNSQ19VUklbbWQ1c3VtXSA9ICIxNWYzODk0NTk0MmJmMmE5MWZlMjY4NzE0NWZiNGM3ZCIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICJiNGU0NDZhYzI3ZjExODE5NmYxNjA5ZGFiODliYjNjYjNlODE2NTJkOTgxNDE0YWQ4NjBlNzMzYjM1NTM2NWQ4IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWVfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWVfZ2l0LmJiCmluZGV4IGI4NzFkODkuLjczM2ViY2UgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUveGN1cnNvci10cmFuc3BhcmVudC10aGVtZV9naXQuYmIKQEAgLTExLDYgKzExLDcgQEAKIFBWID0gIjAuMS4xK2dpdCR7U1JDUFZ9IgogCiBTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfTticmFuY2g9bWFzdGVyIgorVVBTVFJFQU1fVkVSU0lPTl9VTktOT1dOID0gIjEiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveDExcGVyZl8xLjYuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveDExcGVyZl8xLjYuMC5iYgppbmRleCA0ZTkzNTU4Li5hMDZhYTI2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3gxMXBlcmZfMS42LjAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94MTFwZXJmXzEuNi4wLmJiCkBAIC0xMyw2ICsxMywxMCBAQAogCiBQRSA9ICIxIgogCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQgKCkgeworICAgIHNlZCAtaSAtZSAnczoke0hPU1RUT09MU19ESVJ9Lzo6ZycgJHtEfSR7YmluZGlyfS94MTFwZXJmY29tcAorfQorCiBGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L1gxMS94MTFwZXJmY29tcC8qIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiZjBiMjRlNGQ4YmViNjIyYTQxOWU4NDMxZTFjMDNjZDciCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hrYmNvbXBfMS4zLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hrYmNvbXBfMS4zLjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjOTgzNTkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94a2Jjb21wXzEuMy4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCi0KLVNVTU1BUlkgPSAiQSBwcm9ncmFtIHRvIGNvbXBpbGUgWEtCIGtleWJvYXJkIGRlc2NyaXB0aW9uIgotCi1ERVNDUklQVElPTiA9ICJUaGUgeGtiY29tcCBrZXltYXAgY29tcGlsZXIgY29udmVydHMgYSBkZXNjcmlwdGlvbiBvZiBhbiBcCi1YS0Iga2V5bWFwIGludG8gb25lIG9mIHNldmVyYWwgb3V0cHV0IGZvcm1hdHMuIFRoZSBtb3N0IGNvbW1vbiB1c2UgZm9yIFwKLXhrYmNvbXAgaXMgdG8gY3JlYXRlIGEgY29tcGlsZWQga2V5bWFwIGZpbGUgKC54a20gZXh0ZW5zaW9uKSB3aGljaCBjYW4gXAotYmUgcmVhZCBkaXJlY3RseSBieSBYS0ItY2FwYWJsZSBYIHNlcnZlcnMgb3IgdXRpbGl0aWVzLiIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDg0MzZlNGY0NDc2OTY0ZTJlMmRkN2U3ZTQxZTA3NmEiCi0KLVBSID0gIiR7SU5DX1BSfS4wIgotCi1ERVBFTkRTICs9ICJsaWJ4a2JmaWxlIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKLQotU1JDX1VSSVttZDVzdW1dID0gImE0ZDgzNTNkYWY2Y2IwYTljNDczNzliNzQxM2M0MmM2IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAzMDRkYzllMGQ0YWMxMDgzMWE5ZWY1ZDU0MTk3MjIzNzVkZGJjM2VhYzNmZjQ0MTMwOTRkNTdiYzFmMTkyM2QiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hrYmNvbXBfMS40LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hrYmNvbXBfMS40LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlkYzMyNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGtiY29tcF8xLjQuMC5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJBIHByb2dyYW0gdG8gY29tcGlsZSBYS0Iga2V5Ym9hcmQgZGVzY3JpcHRpb24iCisKK0RFU0NSSVBUSU9OID0gIlRoZSB4a2Jjb21wIGtleW1hcCBjb21waWxlciBjb252ZXJ0cyBhIGRlc2NyaXB0aW9uIG9mIGFuIFwKK1hLQiBrZXltYXAgaW50byBvbmUgb2Ygc2V2ZXJhbCBvdXRwdXQgZm9ybWF0cy4gVGhlIG1vc3QgY29tbW9uIHVzZSBmb3IgXAoreGtiY29tcCBpcyB0byBjcmVhdGUgYSBjb21waWxlZCBrZXltYXAgZmlsZSAoLnhrbSBleHRlbnNpb24pIHdoaWNoIGNhbiBcCitiZSByZWFkIGRpcmVjdGx5IGJ5IFhLQi1jYXBhYmxlIFggc2VydmVycyBvciB1dGlsaXRpZXMuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wODQzNmU0ZjQ0NzY5NjRlMmUyZGQ3ZTdlNDFlMDc2YSIKKworUFIgPSAiJHtJTkNfUFJ9LjAiCisKK0RFUEVORFMgKz0gImxpYnhrYmZpbGUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2MyMmIyMzJiYzc4YTMwMzM3MTk4M2UxYjQ4Nzk0YWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmM2OWM4NzQ4YzAzYzVhZDlhZmRjOGRmZjlkYjExOTk0ZGQ4NzFiNjE0YzY1Zjg5NDA1MTZkYTZiZjYxY2U2YiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1saWJpbnB1dF8wLjI0LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtbGliaW5wdXRfMC4yNC4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGIxMjcxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1saWJpbnB1dF8wLjI0LjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1yZXF1aXJlIHhvcmctZHJpdmVyLWlucHV0LmluYwotCi1TVU1NQVJZID0gIkdlbmVyaWMgaW5wdXQgZHJpdmVyIGZvciB0aGUgWC5Pcmcgc2VydmVyIGJhc2VkIG9uIGxpYmlucHV0IgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWU2YjIwZWEyZWY5NGE5OTgxNDVmMGVhM2Y3ODhlZTAiCi0KLURFUEVORFMgKz0gImxpYmlucHV0IgotCi1TUkNfVVJJW21kNXN1bV0gPSAiYmQzZmExMThlNGFiYWRiODgwNGRjNmEwOTliYjRhYjMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGRjYjA3MzUwYWVkNTliMjk5NmE5MmExYjRmZjY0ZDFjMGIwYzg2YTNmMGRkY2ExNWIyYjFjOGM4YmIxMzYyOCIKLQotRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vWDExL3hvcmcuY29uZi5kIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LWxpYmlucHV0XzAuMjUuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1saWJpbnB1dF8wLjI1LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzZWExNgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1saWJpbnB1dF8wLjI1LjEuYmIKQEAgLTAsMCArMSwxMSBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci1pbnB1dC5pbmMKKworU1VNTUFSWSA9ICJHZW5lcmljIGlucHV0IGRyaXZlciBmb3IgdGhlIFguT3JnIHNlcnZlciBiYXNlZCBvbiBsaWJpbnB1dCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVlNmIyMGVhMmVmOTRhOTk4MTQ1ZjBlYTNmNzg4ZWUwIgorCitERVBFTkRTICs9ICJsaWJpbnB1dCIKKworU1JDX1VSSVttZDVzdW1dID0gIjE0MDAzMTM5NjE0YjI1Y2M3NmM5YTRjYWQwNTlkZjg5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ4OWY3ZDU5MWM5ZWYwODQ2M2Q0OTY2ZTYxZjdjNmVhNDMzZjVmY2JiOWY1MzcwZmI2MjFkYTYzOWE4NGM3ZTAiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L1gxMS94b3JnLmNvbmYuZCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbF9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWxfZ2l0LmJiCmluZGV4IGY4NmRlNmYuLjEzOGRmZGQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbF9naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsX2dpdC5iYgpAQCAtMjQsNyArMjQsNyBAQAogCiBERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSBkcm0gbGlicGNpYWNjZXNzIHBpeG1hbiIKIAotUEFDS0FHRUNPTkZJRyA/Pz0gInh2bWMgc25hIHVkZXYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnZHJpIGRyaTEgZHJpMicsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHID8/PSAieHZtYyB1eGEgdWRldiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICdkcmkgZHJpMSBkcmkyJywgJycsIGQpfSIKIAogUEFDS0FHRUNPTkZJR1tkcmldID0gIi0tZW5hYmxlLWRyaSwtLWRpc2FibGUtZHJpIgogUEFDS0FHRUNPTkZJR1tkcmkxXSA9ICItLWVuYWJsZS1kcmkxLC0tZGlzYWJsZS1kcmkxLHhmODZkcmlwcm90byIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwMS1QcmV2ZW50cy1vbWFwZmItZnJvbS1mcm9tLWNyYXNoaW5nLXdoZW4tcGl4ZWxjbG9jay1vLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAxLVByZXZlbnRzLW9tYXBmYi1mcm9tLWZyb20tY3Jhc2hpbmctd2hlbi1waXhlbGNsb2NrLW8ucGF0Y2gKaW5kZXggYzRjZjE2ZS4uYWMxOTIxOSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAxLVByZXZlbnRzLW9tYXBmYi1mcm9tLWZyb20tY3Jhc2hpbmctd2hlbi1waXhlbGNsb2NrLW8ucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAxLVByZXZlbnRzLW9tYXBmYi1mcm9tLWZyb20tY3Jhc2hpbmctd2hlbi1waXhlbGNsb2NrLW8ucGF0Y2gKQEAgLTYsNiArNiw4IEBACiAKIER1ZSB0byBhIExpbnV4IGRlc2lnbiBidWcgaXQgaXMgZWFzeSB0byBnZXQgYSBwaXhlbGNsb2NrIHNldCB0byB6ZXJvCiB3aGVuIGNoYW5naW5nIGRpc3BsYXlzIGF0IHJ1bnRpbWUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZwogLS0tCiAgc3JjL29tYXBmYi1vdXRwdXQuYyB8IDkgKysrKysrKy0tCiAgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDEtSW5jbHVkZS1jb25maWcuaC1iZWZvcmUtYW55dGhpbmctZWxzZS1pbi0uYy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDEtSW5jbHVkZS1jb25maWcuaC1iZWZvcmUtYW55dGhpbmctZWxzZS1pbi0uYy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkyZmMwZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDAxLUluY2x1ZGUtY29uZmlnLmgtYmVmb3JlLWFueXRoaW5nLWVsc2UtaW4tLmMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotRnJvbSBiMTQ2OTZhNTU3OTZlNzM5NjI0YmJkYTRmNzcyNDI3MDMyZWZmZjJhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogSnVsaWVuIENyaXN0YXUgPGpjcmlzdGF1QGRlYmlhbi5vcmc+Ci1EYXRlOiBTdW4sIDI2IEFwciAyMDE1IDE1OjIwOjU3ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggMS80XSBJbmNsdWRlIGNvbmZpZy5oIGJlZm9yZSBhbnl0aGluZyBlbHNlIGluICouYwotCi1EZWJpYW4gYnVnIzc0OTAwOCA8aHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvNzQ5MDA4PgotCi1SZXBvcnRlZC1ieTogTWljaGFlbCBUYXV0c2NobmlnIDxtdEBkZWJpYW4ub3JnPgotU2lnbmVkLW9mZi1ieTogSnVsaWVuIENyaXN0YXUgPGpjcmlzdGF1QGRlYmlhbi5vcmc+Ci1SZXZpZXdlZC1ieTogQWxhbiBDb29wZXJzbWl0aCA8YWxhbi5jb29wZXJzbWl0aEBvcmFjbGUuY29tPgotLS0tCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0KLSBzcmMvY29tbW9uX2NhcGFiaWxpdHkuYyAgfCAzICsrKwotIHNyYy9jb21tb25faW5pdC5jICAgICAgICB8IDMgKysrCi0gc3JjL2NvbW1vbl9pbnRlcmZhY2UuYyAgIHwgMyArKysKLSBzcmMvY29tbW9uX2lvLmMgICAgICAgICAgfCAzICsrKwotIHNyYy9jb21tb25faXRlcmF0b3IuYyAgICB8IDMgKysrCi0gc3JjL2NvbW1vbl9tYXAuYyAgICAgICAgIHwgMyArKysKLSBzcmMvY29tbW9uX3ZnYWFyYl9zdHViLmMgfCAzICsrKwotIHNyYy9saW51eF9kZXZtZW0uYyAgICAgICB8IDUgKysrLS0KLSBzcmMvb3BlbmJzZF9wY2kuYyAgICAgICAgfCAzICsrKwotIHNyYy9zb2x4X2RldmZzLmMgICAgICAgICB8IDMgKysrCi0gc3JjL3g4Nl9wY2kuYyAgICAgICAgICAgIHwgNCArKystCi0gMTEgZmlsZXMgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3NyYy9jb21tb25fY2FwYWJpbGl0eS5jIGIvc3JjL2NvbW1vbl9jYXBhYmlsaXR5LmMKLWluZGV4IDQ4ODc0M2QuLjE1ZDM5NWQgMTAwNjQ0Ci0tLS0gYS9zcmMvY29tbW9uX2NhcGFiaWxpdHkuYwotKysrIGIvc3JjL2NvbW1vbl9jYXBhYmlsaXR5LmMKLUBAIC0zMSw2ICszMSw5IEBACi0gICoKLSAgKiBcYXV0aG9yIElhbiBSb21hbmljayA8aWRyQHVzLmlibS5jb20+Ci0gICovCi0rI2lmZGVmIEhBVkVfQ09ORklHX0gKLSsjaW5jbHVkZSAiY29uZmlnLmgiCi0rI2VuZGlmCi0gCi0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotICNpbmNsdWRlIDxzdGRpby5oPgotZGlmZiAtLWdpdCBhL3NyYy9jb21tb25faW5pdC5jIGIvc3JjL2NvbW1vbl9pbml0LmMKLWluZGV4IGIxYzBjM2UuLmY3YjU5YmQgMTAwNjQ0Ci0tLS0gYS9zcmMvY29tbW9uX2luaXQuYwotKysrIGIvc3JjL2NvbW1vbl9pbml0LmMKLUBAIC0yOCw2ICsyOCw5IEBACi0gICoKLSAgKiBcYXV0aG9yIElhbiBSb21hbmljayA8aWRyQHVzLmlibS5jb20+Ci0gICovCi0rI2lmZGVmIEhBVkVfQ09ORklHX0gKLSsjaW5jbHVkZSAiY29uZmlnLmgiCi0rI2VuZGlmCi0gCi0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotICNpbmNsdWRlIDxlcnJuby5oPgotZGlmZiAtLWdpdCBhL3NyYy9jb21tb25faW50ZXJmYWNlLmMgYi9zcmMvY29tbW9uX2ludGVyZmFjZS5jCi1pbmRleCA1OTc3OGNmLi5jYjk1ZTkwIDEwMDY0NAotLS0tIGEvc3JjL2NvbW1vbl9pbnRlcmZhY2UuYwotKysrIGIvc3JjL2NvbW1vbl9pbnRlcmZhY2UuYwotQEAgLTI4LDYgKzI4LDkgQEAKLSAgKgotICAqIFxhdXRob3IgSWFuIFJvbWFuaWNrIDxpZHJAdXMuaWJtLmNvbT4KLSAgKi8KLSsjaWZkZWYgSEFWRV9DT05GSUdfSAotKyNpbmNsdWRlICJjb25maWcuaCIKLSsjZW5kaWYKLSAKLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotZGlmZiAtLWdpdCBhL3NyYy9jb21tb25faW8uYyBiL3NyYy9jb21tb25faW8uYwotaW5kZXggZjVjOWU0NS4uZTk1ODZhZCAxMDA2NDQKLS0tLSBhL3NyYy9jb21tb25faW8uYwotKysrIGIvc3JjL2NvbW1vbl9pby5jCi1AQCAtMjIsNiArMjIsOSBAQAotICAqIEF1dGhvcjoKLSAgKglBZGFtIEphY2tzb24gPGFqYXhAcmVkaGF0LmNvbT4KLSAgKi8KLSsjaWZkZWYgSEFWRV9DT05GSUdfSAotKyNpbmNsdWRlICJjb25maWcuaCIKLSsjZW5kaWYKLSAKLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotZGlmZiAtLWdpdCBhL3NyYy9jb21tb25faXRlcmF0b3IuYyBiL3NyYy9jb21tb25faXRlcmF0b3IuYwotaW5kZXggY2NmNjU2ZC4uMmJlYjE4MCAxMDA2NDQKLS0tLSBhL3NyYy9jb21tb25faXRlcmF0b3IuYwotKysrIGIvc3JjL2NvbW1vbl9pdGVyYXRvci5jCi1AQCAtMjgsNiArMjgsOSBAQAotICAqCi0gICogXGF1dGhvciBJYW4gUm9tYW5pY2sgPGlkckB1cy5pYm0uY29tPgotICAqLwotKyNpZmRlZiBIQVZFX0NPTkZJR19ICi0rI2luY2x1ZGUgImNvbmZpZy5oIgotKyNlbmRpZgotIAotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci1kaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbl9tYXAuYyBiL3NyYy9jb21tb25fbWFwLmMKLWluZGV4IDg3NTcxNTEuLmYxODU0YmIgMTAwNjQ0Ci0tLS0gYS9zcmMvY29tbW9uX21hcC5jCi0rKysgYi9zcmMvY29tbW9uX21hcC5jCi1AQCAtMjEsNiArMjEsOSBAQAotICAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKLSAgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gICovCi0rI2lmZGVmIEhBVkVfQ09ORklHX0gKLSsjaW5jbHVkZSAiY29uZmlnLmgiCi0rI2VuZGlmCi0gCi0gI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotICNpbmNsdWRlIDxzeXMvbW1hbi5oPgotZGlmZiAtLWdpdCBhL3NyYy9jb21tb25fdmdhYXJiX3N0dWIuYyBiL3NyYy9jb21tb25fdmdhYXJiX3N0dWIuYwotaW5kZXggOTM5NDI3My4uYzE3MDhmNiAxMDA2NDQKLS0tLSBhL3NyYy9jb21tb25fdmdhYXJiX3N0dWIuYwotKysrIGIvc3JjL2NvbW1vbl92Z2FhcmJfc3R1Yi5jCi1AQCAtMjMsNiArMjMsOSBAQAotICAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAgKgotICAqLwotKyNpZmRlZiBIQVZFX0NPTkZJR19ICi0rI2luY2x1ZGUgImNvbmZpZy5oIgotKyNlbmRpZgotIAotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlICJwY2lhY2Nlc3MuaCIKLWRpZmYgLS1naXQgYS9zcmMvbGludXhfZGV2bWVtLmMgYi9zcmMvbGludXhfZGV2bWVtLmMKLWluZGV4IDEwZTNiZGUuLjBkMDU2N2MgMTAwNjQ0Ci0tLS0gYS9zcmMvbGludXhfZGV2bWVtLmMKLSsrKyBiL3NyYy9saW51eF9kZXZtZW0uYwotQEAgLTMyLDggKzMyLDkgQEAKLSAgKgotICAqIFxhdXRob3IgSWFuIFJvbWFuaWNrIDxpZHJAdXMuaWJtLmNvbT4KLSAgKi8KLS0KLS0jZGVmaW5lIF9HTlVfU09VUkNFCi0rI2lmZGVmIEhBVkVfQ09ORklHX0gKLSsjaW5jbHVkZSAiY29uZmlnLmgiCi0rI2VuZGlmCi0gCi0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLWRpZmYgLS1naXQgYS9zcmMvb3BlbmJzZF9wY2kuYyBiL3NyYy9vcGVuYnNkX3BjaS5jCi1pbmRleCA0ZDFiNWNkLi5iOGNlMzE4IDEwMDY0NAotLS0tIGEvc3JjL29wZW5ic2RfcGNpLmMKLSsrKyBiL3NyYy9vcGVuYnNkX3BjaS5jCi1AQCAtMTMsNiArMTMsOSBAQAotICAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0gICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAgKi8KLSsjaWZkZWYgSEFWRV9DT05GSUdfSAotKyNpbmNsdWRlICJjb25maWcuaCIKLSsjZW5kaWYKLSAKLSAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0gI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotZGlmZiAtLWdpdCBhL3NyYy9zb2x4X2RldmZzLmMgYi9zcmMvc29seF9kZXZmcy5jCi1pbmRleCBmNTcyMzkzLi5jZjk2NDY3IDEwMDY0NAotLS0tIGEvc3JjL3NvbHhfZGV2ZnMuYwotKysrIGIvc3JjL3NvbHhfZGV2ZnMuYwotQEAgLTI1LDYgKzI1LDkgQEAKLSAvKgotICAqIFNvbGFyaXMgZGV2ZnMgaW50ZXJmYWNlcwotICAqLwotKyNpZmRlZiBIQVZFX0NPTkZJR19ICi0rI2luY2x1ZGUgImNvbmZpZy5oIgotKyNlbmRpZgotIAotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSA8c3RyaW5ncy5oPgotZGlmZiAtLWdpdCBhL3NyYy94ODZfcGNpLmMgYi9zcmMveDg2X3BjaS5jCi1pbmRleCA0OWMxY2FiLi4zMmRhYTA0IDEwMDY0NAotLS0tIGEvc3JjL3g4Nl9wY2kuYwotKysrIGIvc3JjL3g4Nl9wY2kuYwotQEAgLTE4LDggKzE4LDEwIEBACi0gICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSAgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICAqLwotKyNpZmRlZiBIQVZFX0NPTkZJR19ICi0rI2luY2x1ZGUgImNvbmZpZy5oIgotKyNlbmRpZgotIAotLSNkZWZpbmUgX0dOVV9TT1VSQ0UKLSAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotLS0gCi0yLjEuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDAyLUZpeC1xdW90aW5nLWlzc3VlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3MvMDAwMi1GaXgtcXVvdGluZy1pc3N1ZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZkNjlhOC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDAyLUZpeC1xdW90aW5nLWlzc3VlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotRnJvbSA3NjVlMGEzOGNiOGM0MGY4ODY1YWY1Y2IzNTZmZmU2MDM5ZmZiMDhmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogVGhvbWFzIEtsYXVzbmVyIDx3aXpATmV0QlNELm9yZz4KLURhdGU6IFN1biwgMjIgTWFyIDIwMTUgMjE6Mzg6MjMgKzAxMDAKLVN1YmplY3Q6IFtQQVRDSCAyLzRdIEZpeCBxdW90aW5nIGlzc3VlLgotCi1tNCBoYXMgJ1tdJyBhcyBxdW90aW5nIGNoYXJhY3RlcnMsIHNvIGlmIHdlIHdhbnQgJ1tdJyB0bwotZW5kIHVwIGluIHRoZSBjb25maWd1cmUgc2NyaXB0LCB3ZSBuZWVkIHRvIHF1b3RlIHRoZW0gYWdhaW4uCi0KLVJlcG9ydGVkIGJ5IEdyZWcgVHJveGVsIDxnZHRAaXIuYmJuLmNvbT4uCi0KLVNpZ25lZC1vZmYtYnk6IFRob21hcyBLbGF1c25lciA8d2l6QE5ldEJTRC5vcmc+Ci1SZXZpZXdlZC1ieTogQWxhbiBDb29wZXJzbWl0aCA8YWxhbi5jb29wZXJzbWl0aEBvcmFjbGUuY29tPgotLS0tCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0KLSBjb25maWd1cmUuYWMgfCAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IGU2N2U5ZTEuLjg4ODMzMGIgMTAwNjQ0Ci0tLS0gYS9jb25maWd1cmUuYWMKLSsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTc2LDcgKzc2LDcgQEAgY2FzZSAkaG9zdF9vcyBpbgotIAkJOzsKLSAJKm5ldGJzZCopCi0gCQljYXNlICRob3N0IGluCi0tCQkqaVszLTldODYqKQotKwkJKmlbWzMtOV1dODYqKQotIAkJCVBDSUFDQ0VTU19MSUJTPSIkUENJQUNDRVNTX0xJQlMgLWxpMzg2IgotIAkJCTs7Ci0gCQkqeDg2XzY0KnwqYW1kNjQqKQotLS0gCi0yLjEuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDAzLWxpbnV4X3N5c2ZzLmMtSW5jbHVkZS1saW1pdHMuaC1mb3ItUEFUSF9NQVgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDAzLWxpbnV4X3N5c2ZzLmMtSW5jbHVkZS1saW1pdHMuaC1mb3ItUEFUSF9NQVgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MTNjOGUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3MvMDAwMy1saW51eF9zeXNmcy5jLUluY2x1ZGUtbGltaXRzLmgtZm9yLVBBVEhfTUFYLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotRnJvbSA2YmQyZjdmOTJlYWU3MTM2NjNmNGUxM2Y2ZTJjYjIzNTI2NjA3YjhjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRmVsaXggSmFuZGEgPGZlbGl4LmphbmRhQHBvc3Rlby5kZT4KLURhdGU6IEZyaSwgMSBNYXkgMjAxNSAxNjozNjo1MCArMDIwMAotU3ViamVjdDogW1BBVENIIDMvNF0gbGludXhfc3lzZnMuYzogSW5jbHVkZSA8bGltaXRzLmg+IGZvciBQQVRIX01BWAotCi1GaXhlcyBjb21waWxhdGlvbiB3aXRoIG11c2wgbGliYy4KLQotVGVzdGVkLWJ5OiBCZXJuZCBLdWhscyA8YmVybmQua3VobHNAdC1vbmxpbmUuZGU+Ci1TaWduZWQtb2ZmLWJ5OiBGZWxpeCBKYW5kYSA8ZmVsaXguamFuZGFAcG9zdGVvLmRlPgotUmV2aWV3ZWQtYnk6IEFsYW4gQ29vcGVyc21pdGggPGFsYW4uY29vcGVyc21pdGhAb3JhY2xlLmNvbT4KLVNpZ25lZC1vZmYtYnk6IEFsYW4gQ29vcGVyc21pdGggPGFsYW4uY29vcGVyc21pdGhAb3JhY2xlLmNvbT4KLS0tLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi0gc3JjL2xpbnV4X3N5c2ZzLmMgfCAxICsKLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKLQotZGlmZiAtLWdpdCBhL3NyYy9saW51eF9zeXNmcy5jIGIvc3JjL2xpbnV4X3N5c2ZzLmMKLWluZGV4IDUwZDk0Y2YuLjNmOTVlNTMgMTAwNjQ0Ci0tLS0gYS9zcmMvbGludXhfc3lzZnMuYwotKysrIGIvc3JjL2xpbnV4X3N5c2ZzLmMKLUBAIC00NSw2ICs0NSw3IEBACi0gI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotICNpbmNsdWRlIDxzeXMvc3RhdC5oPgotICNpbmNsdWRlIDxmY250bC5oPgotKyNpbmNsdWRlIDxsaW1pdHMuaD4KLSAjaW5jbHVkZSA8c3lzL21tYW4uaD4KLSAjaW5jbHVkZSA8ZGlyZW50Lmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0tLSAKLTIuMS40Ci0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzXzAuMTMuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzXzAuMTMuNC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZhNmE2MC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzc18wLjEzLjQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1TVU1NQVJZID0gIkdlbmVyaWMgUENJIGFjY2VzcyBsaWJyYXJ5IGZvciBYIgotCi1ERVNDUklQVElPTiA9ICJsaWJwY2lhY2Nlc3MgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBmb3IgWCB0byBhY2Nlc3MgdGhlIFwKLVBDSSBidXMgYW5kIGRldmljZXMgaW4gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB3YXkuIgotCi1yZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKLQotU1JDX1VSSSArPSAiXAotICAgICAgICAgICAgZmlsZTovLzAwMDEtSW5jbHVkZS1jb25maWcuaC1iZWZvcmUtYW55dGhpbmctZWxzZS1pbi0uYy5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vMDAwMi1GaXgtcXVvdGluZy1pc3N1ZS5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vMDAwMy1saW51eF9zeXNmcy5jLUluY2x1ZGUtbGltaXRzLmgtZm9yLVBBVEhfTUFYLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly8wMDA0LURvbi10LWluY2x1ZGUtc3lzLWlvLmgtb24tYXJtLnBhdGNoIFwKLSIKLQotU1JDX1VSSVttZDVzdW1dID0gImFjZTc4YWVjNzk5YjFjZjZkZmFlYTU1ZDM4NzllZDlmIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA3Zjg2NDY1NDU2MWU0YWM4NjI5YTBlZjljOGYwN2ZiYzFmODU5MmQxYjZjNDE4NDMxNTkzZTliYTJjZjJmY2YiCi0KLUxJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Mjc3YWFkYTUyMjJiOWEyMmZiZjM0NzFmZjM2ODcwNjgiCi0KLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzc18wLjEzLjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzc18wLjEzLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNiNjgyYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzXzAuMTMuNS5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkdlbmVyaWMgUENJIGFjY2VzcyBsaWJyYXJ5IGZvciBYIgorCitERVNDUklQVElPTiA9ICJsaWJwY2lhY2Nlc3MgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBmb3IgWCB0byBhY2Nlc3MgdGhlIFwKK1BDSSBidXMgYW5kIGRldmljZXMgaW4gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB3YXkuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworU1JDX1VSSSArPSAiXAorICAgICAgICAgICAgZmlsZTovLzAwMDQtRG9uLXQtaW5jbHVkZS1zeXMtaW8uaC1vbi1hcm0ucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDgxMGFiMTdlMjRjMTQxOGRlZGY3MjA3ZmIyODQxZDQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzUyYzU0ZTliM2MzMTFiNDM0N2NiNTBhZWE4NTY2ZmE0OGVhYjI3NDM0NmVhOGEwNmY3ZjE1ZGUzMjQwYjk5OSIKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yNzdhYWRhNTIyMmI5YTIyZmJmMzQ3MWZmMzY4NzA2OCIKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicHRocmVhZC1zdHVic18wLjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnB0aHJlYWQtc3R1YnNfMC4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTE0YzdmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicHRocmVhZC1zdHVic18wLjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi1TVU1NQVJZID0gIkxpYnJhcnkgdGhhdCBwcm92aWRlcyB3ZWFrIGFsaWFzZXMgZm9yIHB0aHJlYWQgZnVuY3Rpb25zIgotREVTQ1JJUFRJT04gPSAiVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIHdlYWsgYWxpYXNlcyBmb3IgcHRocmVhZCBmdW5jdGlvbnMgXAotbm90IHByb3ZpZGVkIGluIGxpYmMgb3Igb3RoZXJ3aXNlIGF2YWlsYWJsZSBieSBkZWZhdWx0LiIKLUhPTUVQQUdFID0gImh0dHA6Ly94Y2IuZnJlZWRlc2t0b3Aub3JnIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvYnVnbGlzdC5jZ2k/cHJvZHVjdD1YQ0IiCi1TRUNUSU9OID0gIngxMS9saWJzIgotTElDRU5TRSA9ICJNSVQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02ZWRjMWZlYTAzZDk1OWYwYzJkNzQzZmU1Y2E3NDZhZCIKLQotI0RFUEVORFMgPSAieGNiLXByb3RvIHhwcm90byBsaWJ4YXUgbGlieHNsdC1uYXRpdmUiCi0jIERFUEVORFMgKz0gInhzbHRwcm9jLW5hdGl2ZSBncGVyZi1uYXRpdmUiCi0KLUFMTE9XX0VNUFRZXyR7UE59ID0gIjEiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3hjYi5mcmVlZGVza3RvcC5vcmcvZGlzdC9saWJwdGhyZWFkLXN0dWJzLSR7UFZ9LnRhci5iejIiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJlOGZhMzFiNDJlMTNmODdlOGY1YTdhMmI3MzFkYjdlZSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIzNWI2ZDU0ZTNjYzZmM2JhMjgwNjFkYTgxYWY2NGI5YTkyYjdiNzU3MzE5MDk4MTcyNDg4YTY2MGUzZDg3Mjk5IgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKLQotUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKLVJSRUNPTU1FTkRTXyR7UE59LWRiZyA9ICIke1BOfS1kZXYgKD0gJHtFWFRFTkRQS0dWfSkiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicHRocmVhZC1zdHVic18wLjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnB0aHJlYWQtc3R1YnNfMC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2OTk4NDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnB0aHJlYWQtc3R1YnNfMC40LmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSB0aGF0IHByb3ZpZGVzIHdlYWsgYWxpYXNlcyBmb3IgcHRocmVhZCBmdW5jdGlvbnMiCitERVNDUklQVElPTiA9ICJUaGlzIGxpYnJhcnkgcHJvdmlkZXMgd2VhayBhbGlhc2VzIGZvciBwdGhyZWFkIGZ1bmN0aW9ucyBcCitub3QgcHJvdmlkZWQgaW4gbGliYyBvciBvdGhlcndpc2UgYXZhaWxhYmxlIGJ5IGRlZmF1bHQuIgorSE9NRVBBR0UgPSAiaHR0cDovL3hjYi5mcmVlZGVza3RvcC5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9idWdsaXN0LmNnaT9wcm9kdWN0PVhDQiIKK1NFQ1RJT04gPSAieDExL2xpYnMiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTZlZGMxZmVhMDNkOTU5ZjBjMmQ3NDNmZTVjYTc0NmFkIgorCisjREVQRU5EUyA9ICJ4Y2ItcHJvdG8geHByb3RvIGxpYnhhdSBsaWJ4c2x0LW5hdGl2ZSIKKyMgREVQRU5EUyArPSAieHNsdHByb2MtbmF0aXZlIGdwZXJmLW5hdGl2ZSIKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworU1JDX1VSSSA9ICJodHRwOi8veGNiLmZyZWVkZXNrdG9wLm9yZy9kaXN0L2xpYnB0aHJlYWQtc3R1YnMtJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ4YzE1NDQ4NTRhOTRkYjBlNTE0OTljYzNhZmQ3OTdmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU0ZDA1OTExYTMxNjVkM2IxODMyMWNjMDY3ZmRkMmYwMjNmMDY0MzZlMzkxYzZhMjhkZmY2MThhNzhkMmU3MzMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorUlJFQ09NTUVORFNfJHtQTn0tZGJnID0gIiR7UE59LWRldiAoPSAke0VYVEVORFBLR1Z9KSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEtZGlldF8xLjYuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExLWRpZXRfMS42LjQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNzYxZDcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEtZGlldF8xLjYuNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLXJlcXVpcmUgbGlieDExLmluYwotCi1ERVNDUklQVElPTiArPSAiIFN1cHBvcnQgZm9yIFhDTVMgYW5kIFhMT0NBTEUgaXMgZGlzYWJsZWQgaW4gXAotdGhpcyB2ZXJzaW9uLiIKLQotU1JDX1VSSSArPSAiZmlsZTovL1gxOE5DTVNzdHVicy5kaWZmIFwKLSAgICAgICAgICAgIGZpbGU6Ly9maXgtZGlzYWJsZS14bG9jYWxlLmRpZmYgXAotICAgICAgICAgICAgZmlsZTovL2ZpeC11dGY4LXdyb25nLWRlZmluZS5wYXRjaCBcCi0gICAgICAgICAgICIKLQotUlBST1ZJREVTXyR7UE59LWRldiA9ICJsaWJ4MTEtZGV2IgotUlBST1ZJREVTXyR7UE59LWxvY2FsZSA9ICJsaWJ4MTEtbG9jYWxlIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNmQ1NDIyNzA4MmYzYWEyYzU5NmYwYjNhM2ZiYjkxNzUiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjdjNzQ4YmUzYWExNmVjMmNiZDgxZWRjODQ3ZTliNmVlMDNmODgxNDNhYjI3MGZiNTlmNThhMDQ0ZDM0ZTQ0MSIKLQotRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUteGxvY2FsZSIKLQotUEFDS0FHRUNPTkZJRyA/Pz0gIiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExLWRpZXRfMS42LjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS1kaWV0XzEuNi41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NWY5NmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS1kaWV0XzEuNi41LmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgbGlieDExLmluYworCitERVNDUklQVElPTiArPSAiIFN1cHBvcnQgZm9yIFhDTVMgYW5kIFhMT0NBTEUgaXMgZGlzYWJsZWQgaW4gXAordGhpcyB2ZXJzaW9uLiIKKworU1JDX1VSSSArPSAiZmlsZTovL1gxOE5DTVNzdHVicy5kaWZmIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtZGlzYWJsZS14bG9jYWxlLmRpZmYgXAorICAgICAgICAgICAgZmlsZTovL2ZpeC11dGY4LXdyb25nLWRlZmluZS5wYXRjaCBcCisgICAgICAgICAgICIKKworUlBST1ZJREVTXyR7UE59LWRldiA9ICJsaWJ4MTEtZGV2IgorUlBST1ZJREVTXyR7UE59LWxvY2FsZSA9ICJsaWJ4MTEtbG9jYWxlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMGY2MThkYjcwYzQwNTRjYTY3Y2VlMGNjMTU2YTQyNTUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNGQzODkwZGIyYmEyMjViYThjNTVjYTYzYzY0MDljMWViYjA3OGEyODA2ZGU1OWZiMTYzNDI3NjhhZTYzNDM1ZCIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUteGxvY2FsZSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL0ZpeC1oYW5naW5nLWlzc3VlLWluLV9YUmVwbHkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9GaXgtaGFuZ2luZy1pc3N1ZS1pbi1fWFJlcGx5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5Nzg4MmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9GaXgtaGFuZ2luZy1pc3N1ZS1pbi1fWFJlcGx5LnBhdGNoCkBAIC0wLDAgKzEsNjAgQEAKK0Zyb20gNTIzNWE3ZjM2OTJhNGMzYzkwZGQ0YWMxYmUzYzY3MDM4ODkwNGJiZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRhdHUgRnJpc2sgPHRhdHUuZnJpc2tAZ2UuY29tPgorRGF0ZTogVHVlLCAxNCBNYXIgMjAxNyAxNDo0MToyNyArMDIwMAorU3ViamVjdDogW1BBVENIXSBGaXggaGFuZ2luZyBpc3N1ZSBpbiBfWFJlcGx5CisKK0Fzc3VtZSBldmVudCBxdWV1ZSBpcyBlbXB0eSBpZiBhbm90aGVyIHRocmVhZCBpcyBibG9ja2luZyB3YWl0aW5nIGZvciBldmVudC4KKworSWYgb25lIHRocmVhZCB3YXMgYmxvY2tpbmcgd2FpdGluZyBmb3IgYW4gZXZlbnQgYW5kIGFub3RoZXIgdGhyZWFkIHNlbnQgYQorcmVwbHkgdG8gdGhlIFggc2VydmVyLCBib3RoIHRocmVhZHMgZ290IGJsb2NrZWQgdW50aWwgYW4gZXZlbnQgd2FzCityZWNlaXZlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vcGF0Y2h3b3JrLmZyZWVkZXNrdG9wLm9yZy9wYXRjaC8xNzE0NTgvXQorCitUaGlzIHBhdGNoIG5lZWRzIHRvIGJlIHJlbW92ZWQgb25jZSB0aGUgY29ycmVzcG9uZGluZyBwYXRjaCBoYXMgYmVlbiBtZXJnZWQgdXBzdHJlYW0uCisKK2h0dHBzOi8vcGF0Y2h3b3JrLmZyZWVkZXNrdG9wLm9yZy9wYXRjaC8xNzE0NTgvCisKK1NpZ25lZC1vZmYtYnk6IFRhdHUgRnJpc2sgPHRhdHUuZnJpc2tAZ2UuY29tPgorU2lnbmVkLW9mZi1ieTogSm9zZSBBbGFyY29uIDxqb3NlLmFsYXJjb25AZ2UuY29tPgorLS0tCisgc3JjL3hjYl9pby5jIHwgMTkgKysrKysrKy0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3hjYl9pby5jIGIvc3JjL3hjYl9pby5jCitpbmRleCA1OTg3MzI5Li5jNjRlYjA0IDEwMDY0NAorLS0tIGEvc3JjL3hjYl9pby5jCisrKysgYi9zcmMveGNiX2lvLmMKK0BAIC02MDksMjIgKzYwOSwxNyBAQCBTdGF0dXMgX1hSZXBseShEaXNwbGF5ICpkcHksIHhSZXBseSAqcmVwLCBpbnQgZXh0cmEsIEJvb2wgZGlzY2FyZCkKKyAJCSAqIGxldHRpbmcgYW55b25lIGVsc2UgcHJvY2VzcyB0aGlzIHNlcXVlbmNlIG51bWJlciwgd2UKKyAJCSAqIG5lZWQgdG8gcHJvY2VzcyBhbnkgZXZlbnRzIHRoYXQgc2hvdWxkIGhhdmUgY29tZQorIAkJICogZWFybGllci4gKi8KKy0KKyAJCWlmKGRweS0+eGNiLT5ldmVudF9vd25lciA9PSBYbGliT3duc0V2ZW50UXVldWUpCisgCQl7CisgCQkJeGNiX2dlbmVyaWNfcmVwbHlfdCAqZXZlbnQ7CistCQkJLyogSWYgc29tZSB0aHJlYWQgaXMgYWxyZWFkeSB3YWl0aW5nIGZvciBldmVudHMsCistCQkJICogaXQgd2lsbCBnZXQgdGhlIGZpcnN0IG9uZS4gVGhhdCB0aHJlYWQgbXVzdAorLQkJCSAqIHByb2Nlc3MgdGhhdCBldmVudCBiZWZvcmUgd2UgY2FuIGNvbnRpbnVlLiAqLworLQkJCS8qIEZJWE1FOiBUaGF0IGV2ZW50IG1pZ2h0IGJlIGFmdGVyIHRoaXMgcmVwbHksCistCQkJICogYW5kIG1pZ2h0IG5ldmVyIGV2ZW4gY29tZS0tb3IgdGhlcmUgbWlnaHQgYmUKKy0JCQkgKiBtdWx0aXBsZSB0aHJlYWRzIHRyeWluZyB0byBnZXQgZXZlbnRzLiAqLworLQkJCXdoaWxlKGRweS0+eGNiLT5ldmVudF93YWl0ZXIpCistCQkJeyAvKiBuZWVkIGJyYWNlcyBhcm91bmQgQ29uZGl0aW9uV2FpdCAqLworLQkJCQlDb25kaXRpb25XYWl0KGRweSwgZHB5LT54Y2ItPmV2ZW50X25vdGlmeSk7CisrCisrCQkJLyogQXNzdW1lIGV2ZW50IHF1ZXVlIGlzIGVtcHR5IGlmIGFub3RoZXIgdGhyZWFkIGlzIGJsb2NraW5nCisrCQkJICogd2FpdGluZyBmb3IgZXZlbnQuICovCisrCQkJaWYoIWRweS0+eGNiLT5ldmVudF93YWl0ZXIpCisrCQkJeworKwkJCQl3aGlsZSgoZXZlbnQgPSBwb2xsX2Zvcl9yZXNwb25zZShkcHkpKSkKKysJCQkJCWhhbmRsZV9yZXNwb25zZShkcHksIGV2ZW50LCBUcnVlKTsKKyAJCQl9CistCQkJd2hpbGUoKGV2ZW50ID0gcG9sbF9mb3JfZXZlbnQoZHB5KSkpCistCQkJCWhhbmRsZV9yZXNwb25zZShkcHksIGV2ZW50LCBUcnVlKTsKKyAJCX0KKyAKKyAJCXJlcS0+cmVwbHlfd2FpdGVyID0gMDsKKy0tIAorMi4xMC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExXzEuNi40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTFfMS42LjQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhYTk1ZmIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTFfMS42LjQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1yZXF1aXJlIGxpYngxMS5pbmMKLWluaGVyaXQgZ2V0dGV4dAotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly9kaXNhYmxlX3Rlc3RzLnBhdGNoIFwKLSAgICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNmQ1NDIyNzA4MmYzYWEyYzU5NmYwYjNhM2ZiYjkxNzUiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjdjNzQ4YmUzYWExNmVjMmNiZDgxZWRjODQ3ZTliNmVlMDNmODgxNDNhYjI3MGZiNTlmNThhMDQ0ZDM0ZTQ0MSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExXzEuNi41LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTFfMS42LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI3YmYyOAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExXzEuNi41LmJiCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgbGlieDExLmluYworaW5oZXJpdCBnZXR0ZXh0CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSSArPSAiZmlsZTovL2Rpc2FibGVfdGVzdHMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL0ZpeC1oYW5naW5nLWlzc3VlLWluLV9YUmVwbHkucGF0Y2ggXAorICAgICAgICAgICAiCitkb19jb25maWd1cmVfYXBwZW5kICgpIHsKKyAgICBzZWQgLWkgLWUgIi9YMTFfQ0ZMQUdTL2QiICR7Qn0vc3JjL3V0aWwvTWFrZWZpbGUKK30KKworU1JDX1VSSVttZDVzdW1dID0gIjBmNjE4ZGI3MGM0MDU0Y2E2N2NlZTBjYzE1NmE0MjU1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjRkMzg5MGRiMmJhMjI1YmE4YzU1Y2E2M2M2NDA5YzFlYmIwNzhhMjgwNmRlNTlmYjE2MzQyNzY4YWU2MzQzNWQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYWxpYnJhdGVfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2FsaWJyYXRlX2dpdC5iYgppbmRleCA0NTVlODY5Li43YzdmYTNkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYWxpYnJhdGVfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNhbGlicmF0ZV9naXQuYmIKQEAgLTE2LDYgKzE2LDcgQEAKIAogU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveG9yZy9saWIvbGliWENhbGlicmF0ZSBcCiAgICAgICAgICAgIGZpbGU6Ly9maXgteGNiLnBhdGNoIgorVVBTVFJFQU1fVkVSU0lPTl9VTktOT1dOID0gIjEiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHQvMDAwMS1saWJYdC11dGlsLWRvbi10LWxpbmstbWFrZXN0cnMtd2l0aC10YXJnZXQtY2ZsYWdzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dC8wMDAxLWxpYlh0LXV0aWwtZG9uLXQtbGluay1tYWtlc3Rycy13aXRoLXRhcmdldC1jZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE2OTFhMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHQvMDAwMS1saWJYdC11dGlsLWRvbi10LWxpbmstbWFrZXN0cnMtd2l0aC10YXJnZXQtY2ZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gYjBjMGU2ZDkwYmQ5OWE2OTk3MDFjOTU0MjY0MGFkYjIxOGY1ZDUzNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRob21hcyBQZXRhenpvbmkgPHRob21hcy5wZXRhenpvbmlAZnJlZS1lbGVjdHJvbnMuY29tPgorRGF0ZTogTW9uLCAxMCBKdWwgMjAxNyAxNjo1MToxMyArMDMwMAorU3ViamVjdDogW1BBVENIXSBsaWJYdDogdXRpbDogZG9uJ3QgbGluayBtYWtlc3RycyB3aXRoIHRhcmdldCBjZmxhZ3MKKworVGhlIGxpbmU6IEFNX0NGTEFHUyA9ICQoWFRfQ0ZMQUdTKQoraW4gdXRpbC9NYWtlZmlsZS5hbSBpcyB3cm9uZyBiZWNhdXNlIGl0IGFkZHMgdGFyZ2V0IGNmbGFncyB0byB0aGUKK2NvbXBpbGF0aW9uIG9mIG1ha2VzdHJzLCB3aGljaCBpcyBidWlsdCBmb3IgdGhlIGJ1aWxkIG1hY2hpbmUsIHdoaWNoCitsZWFkcyB0byBidWlsZCBmYWlsdXJlcyB3aGVuIGNyb3NzLWNvbXBpbGluZy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFRob21hcyBQZXRhenpvbmkgPHRob21hcy5wZXRhenpvbmlAZnJlZS1lbGVjdHJvbnMuY29tPgorU2lnbmVkLW9mZi1ieTogTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBpbnRlbC5jb20+CistLS0KKyB1dGlsL01ha2VmaWxlLmFtIHwgMSAtCisgMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3V0aWwvTWFrZWZpbGUuYW0gYi91dGlsL01ha2VmaWxlLmFtCitpbmRleCA4MDBiMzViLi5mMmRkMWY5IDEwMDY0NAorLS0tIGEvdXRpbC9NYWtlZmlsZS5hbQorKysrIGIvdXRpbC9NYWtlZmlsZS5hbQorQEAgLTExLDcgKzExLDYgQEAgRVhUUkFfRElTVCA9IFwKKyAJU3RyRGVmcy5odCBcCisgCXN0cmluZy5saXN0CisgCistQU1fQ0ZMQUdTID0gJChYVF9DRkxBR1MpCisgbWFrZXN0cnNfU09VUkNFUyA9IG1ha2VzdHJzLmMKKyAKKyAKKy0tIAorMi40LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dF8xLjEuNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHRfMS4xLjUuYmIKaW5kZXggYzFlZDBiYi4uMTgwZDAwZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dF8xLjEuNS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh0XzEuMS41LmJiCkBAIC0yMyw3ICsyMyw5IEBACiAKIFhPUkdfUE4gPSAibGliWHQiCiAKLVNSQ19VUkkgKz0gICJmaWxlOi8vbGlieHRfZml4X2Zvcl94MzIucGF0Y2giCitTUkNfVVJJICs9ICAiZmlsZTovL2xpYnh0X2ZpeF9mb3JfeDMyLnBhdGNoIFwKKyAgICAgICAgICAgICBmaWxlOi8vMDAwMS1saWJYdC11dGlsLWRvbi10LWxpbmstbWFrZXN0cnMtd2l0aC10YXJnZXQtY2ZsYWdzLnBhdGNoIFwKKyAgICAgICAgICAgICIKIAogQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGtleWJvYXJkLWNvbmZpZ18yLjIwLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94a2V5Ym9hcmQtY29uZmlnXzIuMjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMDkwNGQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94a2V5Ym9hcmQtY29uZmlnXzIuMjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1TVU1NQVJZID0gIktleWJvYXJkIGNvbmZpZ3VyYXRpb24gZGF0YWJhc2UgZm9yIFggV2luZG93IgotCi1ERVNDUklQVElPTiA9ICJUaGUgbm9uLWFyY2gga2V5Ym9hcmQgY29uZmlndXJhdGlvbiBkYXRhYmFzZSBmb3IgWCBcCi1XaW5kb3cuICBUaGUgZ29hbCBpcyB0byBwcm92aWRlIHRoZSBjb25zaXN0ZW50LCB3ZWxsLXN0cnVjdHVyZWQsIFwKLWZyZXF1ZW50bHkgcmVsZWFzZWQgb3BlbiBzb3VyY2Ugb2YgWCBrZXlib2FyZCBjb25maWd1cmF0aW9uIGRhdGEgZm9yIFggXAotV2luZG93IFN5c3RlbSBpbXBsZW1lbnRhdGlvbnMuICBUaGUgcHJvamVjdCBpcyB0YXJnZXRlZCB0byBYS0ItYmFzZWQgXAotc3lzdGVtcy4iCi0KLUhPTUVQQUdFID0gImh0dHA6Ly9mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9YS2V5Ym9hcmRDb25maWciCi1CVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PXhrZXlib2FyZC1jb25maWciCi0KLUxJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MGU3ZjIxY2E3ZGI5NzVjNjM0NjdkMmU3NjI0YTEyZjkiCi0KLVNSQ19VUkkgPSAiJHtYT1JHX01JUlJPUn0vaW5kaXZpZHVhbC9kYXRhL3hrZXlib2FyZC1jb25maWcvJHtCUE59LSR7UFZ9LnRhci5iejIiCi1TUkNfVVJJW21kNXN1bV0gPSAiMWY2ODg4NjMzOTExNmFlMzg3NzA1MjIwNGM5YjliODgiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDFiZmM3MjU1M2M0ZTNlZjFjZDZmMTNlZWMwNDg4Y2Y5NDA0OThiNjEyYWI4YTBiMzYyZTcwOTBjOTRiYzEzNCIKLQotU0VDVElPTiA9ICJ4MTEvbGlicyIKLURFUEVORFMgPSAiaW50bHRvb2wtbmF0aXZlIHZpcnR1YWwvZ2V0dGV4dCB1dGlsLW1hY3JvcyBsaWJ4c2x0LW5hdGl2ZSIKLQotRVhUUkFfT0VDT05GID0gIi0td2l0aC14a2ItcnVsZXMtc3ltbGluaz14b3JnIC0tZGlzYWJsZS1ydW50aW1lLWRlcHMiCi0KLUZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L1gxMS94a2IiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0Ci0KLWRvX2luc3RhbGxfYXBwZW5kICgpIHsKLSAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L1gxMS94a2IvY29tcGlsZWQKLSAgICBjZCAke0R9JHtkYXRhZGlyfS9YMTEveGtiL3J1bGVzICYmIGxuIC1zZiBiYXNlIHhvcmcKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGtleWJvYXJkLWNvbmZpZ18yLjIxLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94a2V5Ym9hcmQtY29uZmlnXzIuMjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFhNTFhZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGtleWJvYXJkLWNvbmZpZ18yLjIxLmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiS2V5Ym9hcmQgY29uZmlndXJhdGlvbiBkYXRhYmFzZSBmb3IgWCBXaW5kb3ciCisKK0RFU0NSSVBUSU9OID0gIlRoZSBub24tYXJjaCBrZXlib2FyZCBjb25maWd1cmF0aW9uIGRhdGFiYXNlIGZvciBYIFwKK1dpbmRvdy4gIFRoZSBnb2FsIGlzIHRvIHByb3ZpZGUgdGhlIGNvbnNpc3RlbnQsIHdlbGwtc3RydWN0dXJlZCwgXAorZnJlcXVlbnRseSByZWxlYXNlZCBvcGVuIHNvdXJjZSBvZiBYIGtleWJvYXJkIGNvbmZpZ3VyYXRpb24gZGF0YSBmb3IgWCBcCitXaW5kb3cgU3lzdGVtIGltcGxlbWVudGF0aW9ucy4gIFRoZSBwcm9qZWN0IGlzIHRhcmdldGVkIHRvIFhLQi1iYXNlZCBcCitzeXN0ZW1zLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL2ZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL1hLZXlib2FyZENvbmZpZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9eGtleWJvYXJkLWNvbmZpZyIKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wZTdmMjFjYTdkYjk3NWM2MzQ2N2QyZTc2MjRhMTJmOSIKKworU1JDX1VSSSA9ICIke1hPUkdfTUlSUk9SfS9pbmRpdmlkdWFsL2RhdGEveGtleWJvYXJkLWNvbmZpZy8ke0JQTn0tJHtQVn0udGFyLmJ6MiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJhZjk0OThlODk1NDkwN2QwYTQ3ZjBmN2IzZDIxZTFlZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzMGMxNzA0OWZhZTEyOWZjMTQ4NzU2NTZkYTlhYTMwOTllMzAzMWQ2Y2UwZWUxZDc3YWFlMTkwZmQ5ZWRjZWM1IgorCitTRUNUSU9OID0gIngxMS9saWJzIgorREVQRU5EUyA9ICJpbnRsdG9vbC1uYXRpdmUgdXRpbC1tYWNyb3MgbGlieHNsdC1uYXRpdmUiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgteGtiLXJ1bGVzLXN5bWxpbms9eG9yZyAtLWRpc2FibGUtcnVudGltZS1kZXBzIgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9YMTEveGtiIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dAorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9YMTEveGtiL2NvbXBpbGVkCisgICAgY2QgJHtEfSR7ZGF0YWRpcn0vWDExL3hrYi9ydWxlcyAmJiBsbiAtc2YgYmFzZSB4b3JnCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vY2FsaWJyYXRlcHJvdG9fZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2NhbGlicmF0ZXByb3RvX2dpdC5iYgppbmRleCBiODhkMTU3Li4zYTk4OTI2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vY2FsaWJyYXRlcHJvdG9fZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9jYWxpYnJhdGVwcm90b19naXQuYmIKQEAgLTE3LDMgKzE3LDUgQEAKIFNSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hvcmcvcHJvdG8vY2FsaWJyYXRlcHJvdG8gXAogICAgICAgICAgICBmaWxlOi8vZml4LnBhdGNoO2FwcGx5PXllcyIKIFMgPSAiJHtXT1JLRElSfS9naXQiCitVUFNUUkVBTV9WRVJTSU9OX1VOS05PV04gPSAiMSIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZy5pbmMKaW5kZXggMTY1MGM3OS4uODYzZDgwYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmcuaW5jCkBAIC0xMjMsNyArMTIzLDcgQEAKIE9QRU5HTF9QS0dDT05GSUdTID0gImRyaSBnbHggZ2xhbW9yIGRyaTMgeHNobWZlbmNlIgogUEFDS0FHRUNPTkZJRyA/Pz0gImRyaTIgdWRldiAke1hPUkdfQ1JZUFRPfSBcCiAgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnJHtPUEVOR0xfUEtHQ09ORklHU30nLCAnJywgZCl9IFwKLSAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dheWxhbmQnLCAneHdheWxhbmQnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCB3YXlsYW5kJywgJ3h3YXlsYW5kJywgJycsIGQpfSBcCiAgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuZmlsdGVyKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsIGQpfSBcCiAiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZ18xLjE5LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmdfMS4xOS4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDZkZjMyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZ18xLjE5LjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1yZXF1aXJlIHhzZXJ2ZXIteG9yZy5pbmMKLQotU1JDX1VSSSArPSAiZmlsZTovL211c2wtYXJtLWluYi1vdXRiLnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS5hYy1GaXgtY2hlY2stZm9yLUNMT0NLX01PTk9UT05JQy5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vMDAwMi1jb25maWd1cmUuYWMtRml4LXdheWxhbmQtc2Nhbm5lci1hbmQtcHJvdG9jb2xzLWxvY2F0LnBhdGNoIFwKLSAgICAgICAgICAgIGZpbGU6Ly8wMDAzLW1vZGVzZXR0aW5nLUZpeC0xNi1iaXQtZGVwdGgtYnBwLW1vZGUucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovLzAwMDMtUmVtb3ZlLWNoZWNrLWZvci11c2VTSUdJTy1vcHRpb24ucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTEwOTcxLTEucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTEwOTcxLTIucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTEwOTcxLTMucGF0Y2ggXAotICAgICAgICAgICAgIgotU1JDX1VSSVttZDVzdW1dID0gImNhYThlZTdiMjk1MGFiYmY3MzQzNDdkMTM3NTI5ZmI2IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc5YWUyY2YzOWQzZjZjNGE5MTIwMWQ4ZGFkNTQ5ZDFkNzc0YjM0MjAwNzNjNWE3MGQzOTAwNDBhYTk2NWE3ZmIiCi0KLSMgVGhlc2UgZXh0ZW5zaW9ucyBhcmUgbm93IGludGVncmF0ZWQgaW50byB0aGUgc2VydmVyLCBzbyBkZWNsYXJlIHRoZSBtaWdyYXRpb24KLSMgcGF0aCBmb3IgaW4tcGxhY2UgdXBncmFkZXMuCi0KLVJSRVBMQUNFU18ke1BOfSA9ICAiJHtQTn0tZXh0ZW5zaW9uLWRyaSBcCi0gICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kcmkyIFwKLSAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLXJlY29yZCBcCi0gICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1leHRtb2QgXAotICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZGJlIFwKLSAgICAgICAgICAgICAgICAgICAiCi1SUFJPVklERVNfJHtQTn0gPSAgIiR7UE59LWV4dGVuc2lvbi1kcmkgXAotICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZHJpMiBcCi0gICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1yZWNvcmQgXAotICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZXh0bW9kIFwKLSAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRiZSBcCi0gICAgICAgICAgICAgICAgICAgIgotUkNPTkZMSUNUU18ke1BOfSA9ICIke1BOfS1leHRlbnNpb24tZHJpIFwKLSAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRyaTIgXAotICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tcmVjb3JkIFwKLSAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWV4dG1vZCBcCi0gICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kYmUgXAotICAgICAgICAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZ18xLjE5LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmdfMS4xOS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZWY2YzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmdfMS4xOS4zLmJiCkBAIC0wLDAgKzEsMzUgQEAKK3JlcXVpcmUgeHNlcnZlci14b3JnLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vbXVzbC1hcm0taW5iLW91dGIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtY29uZmlndXJlLmFjLUZpeC1jaGVjay1mb3ItQ0xPQ0tfTU9OT1RPTklDLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAyLWNvbmZpZ3VyZS5hYy1GaXgtd2F5bGFuZC1zY2FubmVyLWFuZC1wcm90b2NvbHMtbG9jYXQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDMtbW9kZXNldHRpbmctRml4LTE2LWJpdC1kZXB0aC1icHAtbW9kZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMy1SZW1vdmUtY2hlY2stZm9yLXVzZVNJR0lPLW9wdGlvbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTA5NzEtMS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTA5NzEtMi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTA5NzEtMy5wYXRjaCBcCisgICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiMDE1ZDJmYzRiOWYyYmZlN2E2MjZlZGI2M2E2MmM2NWUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjc3YTgxNjZlMDM0NzQ3MTkyMzhkZmUzOTZjZTY3M2M0MjM0NzM1NDY0ZDZkYWRmMjk1OWI2MDBkMjBlNWE5OCIKKworIyBUaGVzZSBleHRlbnNpb25zIGFyZSBub3cgaW50ZWdyYXRlZCBpbnRvIHRoZSBzZXJ2ZXIsIHNvIGRlY2xhcmUgdGhlIG1pZ3JhdGlvbgorIyBwYXRoIGZvciBpbi1wbGFjZSB1cGdyYWRlcy4KKworUlJFUExBQ0VTXyR7UE59ID0gICIke1BOfS1leHRlbnNpb24tZHJpIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRyaTIgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tcmVjb3JkIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWV4dG1vZCBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kYmUgXAorICAgICAgICAgICAgICAgICAgICIKK1JQUk9WSURFU18ke1BOfSA9ICAiJHtQTn0tZXh0ZW5zaW9uLWRyaSBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kcmkyIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLXJlY29yZCBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1leHRtb2QgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZGJlIFwKKyAgICAgICAgICAgICAgICAgICAiCitSQ09ORkxJQ1RTXyR7UE59ID0gIiR7UE59LWV4dGVuc2lvbi1kcmkgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZHJpMiBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1yZWNvcmQgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZXh0bW9kIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRiZSBcCisgICAgICAgICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dmlkZW8tdGVzdHMveHZpZGVvLXRlc3RzX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHZpZGVvLXRlc3RzL3h2aWRlby10ZXN0c19naXQuYmIKaW5kZXggNTE4MzlkZC4uMjY2N2RkOCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dmlkZW8tdGVzdHMveHZpZGVvLXRlc3RzX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h2aWRlby10ZXN0cy94dmlkZW8tdGVzdHNfZ2l0LmJiCkBAIC04LDYgKzgsNyBAQAogUFYgPSAiMC4xK2dpdCR7U1JDUFZ9IgogCiBTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Rlc3QteHZpZGVvIgorVVBTVFJFQU1fVkVSU0lPTl9VTktOT1dOID0gIjEiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2Jsa3RyYWNlL2Jsa3RyYWNlX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2Jsa3RyYWNlL2Jsa3RyYWNlX2dpdC5iYgppbmRleCA5NTdjYjcwLi43NzA1NzVmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9ibGt0cmFjZS9ibGt0cmFjZV9naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvYmxrdHJhY2UvYmxrdHJhY2VfZ2l0LmJiCkBAIC0xLDQgKzEsNSBAQAogU1VNTUFSWSA9ICJHZW5lcmF0ZXMgdHJhY2VzIG9mIEkvTyB0cmFmZmljIG9uIGJsb2NrIGRldmljZXMiCitIT01FUEFHRSA9ICJodHRwOi8vYnJpY2sua2VybmVsLmRrL3NuYXBzLyIKIExJQ0VOU0UgPSAiR1BMdjIiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zOTNhNWNhNDQ1ZjY5NjU4NzNlY2EwMjU5YTE3ZjgzMyIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldi1saW51eF8xLjguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LWxpbnV4XzEuOS5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldi1saW51eF8xLjguYmIKcmVuYW1lIHRvIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYtbGludXhfMS45LmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LW1vZHVsZV8xLjguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LW1vZHVsZV8xLjkuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYtbW9kdWxlXzEuOC5iYgpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldi1tb2R1bGVfMS45LmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LXRlc3RzXzEuOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYtdGVzdHNfMS44LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDAwNTI0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYtdGVzdHNfMS44LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotcmVxdWlyZSBjcnlwdG9kZXYuaW5jCi0KLVNVTU1BUlkgPSAiQSB0ZXN0IHN1aXRlIGZvciAvZGV2L2NyeXB0byBkZXZpY2UgZHJpdmVyIgotCi1ERVBFTkRTICs9ICJvcGVuc3NsIgotCi1TUkNfVVJJICs9ICIgXAotZmlsZTovLzAwMDEtQWRkLXRoZS1jb21waWxlLWFuZC1pbnN0YWxsLXJ1bGVzLWZvci1jcnlwdG9kZXYtdGVzdC5wYXRjaCBcCi0iCi0KLUVYVFJBX09FTUFLRT0nS0VSTkVMX0RJUj0iJHtTVEFHSU5HX0VYRUNQUkVGSVhESVJ9IiBQUkVGSVg9IiR7RH0iJwotCi1kb19jb21waWxlKCkgewotCW9lX3J1bm1ha2UgdGVzdHByb2dzCi19Ci0KLWRvX2luc3RhbGwoKSB7Ci0Jb2VfcnVubWFrZSBpbnN0YWxsX3Rlc3RzCi19Ci0KLUZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS90ZXN0c19jcnlwdG9kZXYvKiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYtdGVzdHNfMS45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldi10ZXN0c18xLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFmYjNkZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYtdGVzdHNfMS45LmJiCkBAIC0wLDAgKzEsMjEgQEAKK3JlcXVpcmUgY3J5cHRvZGV2LmluYworCitTVU1NQVJZID0gIkEgdGVzdCBzdWl0ZSBmb3IgL2Rldi9jcnlwdG8gZGV2aWNlIGRyaXZlciIKKworREVQRU5EUyArPSAib3BlbnNzbDEwIgorCitTUkNfVVJJICs9ICIgXAorZmlsZTovLzAwMDEtQWRkLXRoZS1jb21waWxlLWFuZC1pbnN0YWxsLXJ1bGVzLWZvci1jcnlwdG9kZXYtdGVzdC5wYXRjaCBcCisiCisKK0VYVFJBX09FTUFLRT0nS0VSTkVMX0RJUj0iJHtTVEFHSU5HX0VYRUNQUkVGSVhESVJ9IiBQUkVGSVg9IiR7RH0iJworCitkb19jb21waWxlKCkgeworCW9lX3J1bm1ha2UgdGVzdHByb2dzCit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsX3Rlc3RzCit9CisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8qIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldi5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LmluYwppbmRleCA0YWUwYTJiLi41MDM2NmU3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LmluYwpAQCAtMywxNCArMywxMCBAQAogTElDRU5TRSA9ICJHUEx2MiIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgogCi1TUkNfVVJJID0gImh0dHA6Ly9ud2wuY2MvcHViL2NyeXB0b2Rldi1saW51eC9jcnlwdG9kZXYtbGludXgtJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovLzA2ZDZiNTYwYzZlNDVkYzMxN2RhZTQ3Yzc0NzA2ZmE0M2Y0YTMxZDgucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vY2IxODZmNjgyNjc5MzgzZThiNTgwNjI0MDkyNzkwMzczMGNlODVkOS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLUFkanVzdC10by1hbm90aGVyLWNoYW5nZS1pbi10aGUtdXNlci1wYWdlLUFQSS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9rZXJuZWwtNC0xMC1jaGFuZ2VzLnBhdGNoIgorU1JDX1VSSSA9ICJodHRwOi8vbndsLmNjL3B1Yi9jcnlwdG9kZXYtbGludXgvY3J5cHRvZGV2LWxpbnV4LSR7UFZ9LnRhci5neiIKIAotU1JDX1VSSVttZDVzdW1dID0gIjAyNjQ0Y2M0Y2QwMjMwMWUwYjUwM2EzMzJlYjJmMGI1IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY3ZmFiZGU5ZmI2N2IyODZhOTZjNGY0NWI1OTRiMGVjY2QwZjc2MWI0OTU3MDVjMThmMmFlOTQ2MWI4MzEzNzYiCitTUkNfVVJJW21kNXN1bV0gPSAiY2I0ZTBlZDllNTkzNzcxNmM3YzhhN2JlODQ4OTViNmQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWY0YzBiNDliMzBlMjY3ZDc3NmY3OTQ1NWQwOWM3MGNjOWMxMmM4NmVlZTQwMGEwZDBhMGNkMWQ4ZTQ2Nzk1MCIKIAogUyA9ICIke1dPUktESVJ9L2NyeXB0b2Rldi1saW51eC0ke1BWfSIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDEtQWRqdXN0LXRvLWFub3RoZXItY2hhbmdlLWluLXRoZS11c2VyLXBhZ2UtQVBJLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDEtQWRqdXN0LXRvLWFub3RoZXItY2hhbmdlLWluLXRoZS11c2VyLXBhZ2UtQVBJLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjc1Mjc4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAxLUFkanVzdC10by1hbm90aGVyLWNoYW5nZS1pbi10aGUtdXNlci1wYWdlLUFQSS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLUZyb20gZjEyNmU0ODM3ZTYzMzRkMDQ2NDU0MDk5NWRmNzQyNmZlZGY2YjE3NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IE1pY2hhZWwgV2Vpc2VyIDxtaWNoYWVsLndlaXNlckBnbXguZGU+Ci1EYXRlOiBGcmksIDExIE5vdiAyMDE2IDE4OjA5OjMyICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIEFkanVzdCB0byBhbm90aGVyIGNoYW5nZSBpbiB0aGUgdXNlciBwYWdlIEFQSQotCi00LjkuMCB3aWxsIHJlcGxhY2UgdGhlIHdyaXRlIGFuZCBmb3JjZSBmbGFncyBvZiBnZXRfdXNlcl9wYWdlc19yZW1vdGUoKQotd2l0aCBhIGd1cF9mbGFncyBwYXJhbWV0ZXJbMV0uIERpc3Rpbmd1aXNoIHRoZSB0d28gQVBJcyBiYXNlZCBvbiBrZXJuZWwKLXZlcnNpb24gd2UncmUgY29tcGlsaW5nIGZvci4KLQotWzFdIGh0dHBzOi8vZ2l0aHViLmNvbS90b3J2YWxkcy9saW51eC9jb21taXQvOWJlYWUxZWE4OTMwNWE5NjY3Y2VhYWI2ZDBiZjQ2YTA0NWFkNzFlNwotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0KLVNpZ25lZC1vZmYtYnk6IERhbmllbCBTY2h1bHR6IDxkLnNjaHVsdHpAcGh5dGVjLmRlPgotLS0tCi0gemMuYyB8IDggKysrKysrKy0KLSAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS96Yy5jIGIvemMuYwotaW5kZXggYTk3YjQ5Zi4uZTc2NmVlMyAxMDA2NDQKLS0tLSBhL3pjLmMKLSsrKyBiL3pjLmMKLUBAIC02NSw3ICs2NSwxMyBAQCBpbnQgX19nZXRfdXNlcmJ1Zih1aW50OF90IF9fdXNlciAqYWRkciwgdWludDMyX3QgbGVuLCBpbnQgd3JpdGUsCi0gCXJldCA9IGdldF91c2VyX3BhZ2VzKAotICNlbmRpZgotIAkJCXRhc2ssIG1tLAotLQkJCSh1bnNpZ25lZCBsb25nKWFkZHIsIHBnY291bnQsIHdyaXRlLCAwLCBwZywgTlVMTCk7Ci0rCQkJKHVuc2lnbmVkIGxvbmcpYWRkciwgcGdjb3VudCwKLSsjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTig0LCA5LCAwKSkKLSsJCQl3cml0ZSA/IEZPTExfV1JJVEUgOiAwLAotKyNlbHNlCi0rCQkJd3JpdGUsIDAsCi0rI2VuZGlmCi0rCQkJcGcsIE5VTEwpOwotIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotIAlpZiAocmV0ICE9IHBnY291bnQpCi0gCQlyZXR1cm4gLUVJTlZBTDsKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDEtRGlzYWJsZS1pbnN0YWxsaW5nLWhlYWRlci1maWxlLXByb3ZpZGVkLWJ5LWFub3RoZXItcC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAxLURpc2FibGUtaW5zdGFsbGluZy1oZWFkZXItZmlsZS1wcm92aWRlZC1ieS1hbm90aGVyLXAucGF0Y2gKaW5kZXggYTU4MGZjNi4uODg1YjU4MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDEtRGlzYWJsZS1pbnN0YWxsaW5nLWhlYWRlci1maWxlLXByb3ZpZGVkLWJ5LWFub3RoZXItcC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMS1EaXNhYmxlLWluc3RhbGxpbmctaGVhZGVyLWZpbGUtcHJvdmlkZWQtYnktYW5vdGhlci1wLnBhdGNoCkBAIC03LDIyICs3LDE4IEBACiAKIFVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbIE9FIHNwZWNpZmljIF0KIC0tLQotIE1ha2VmaWxlIHwgMiAtLQotIDEgZmlsZSBjaGFuZ2VkLCAyIGRlbGV0aW9ucygtKQorIE1ha2VmaWxlIHwgMSAtCisgMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKIAogZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKLWluZGV4IGQ2NmVmMjYuLjhlOTdjNmEgMTAwNjQ0CitpbmRleCA1YTA4MGUwLi5iZjAyMzk2IDEwMDY0NAogLS0tIGEvTWFrZWZpbGUKICsrKyBiL01ha2VmaWxlCi1AQCAtMjMsOCArMjMsNiBAQCBpbnN0YWxsOiBtb2R1bGVzX2luc3RhbGwKK0BAIC0zMyw3ICszMyw2IEBAIGluc3RhbGw6IG1vZHVsZXNfaW5zdGFsbAogIAogIG1vZHVsZXNfaW5zdGFsbDoKLSAJbWFrZSAtQyAkKEtFUk5FTF9ESVIpIFNVQkRJUlM9YHB3ZGAgbW9kdWxlc19pbnN0YWxsCi0tCUBlY2hvICJJbnN0YWxsaW5nIGNyeXB0b2Rldi5oIGluICQoUFJFRklYKS91c3IvaW5jbHVkZS9jcnlwdG8gLi4uIgotLQlAaW5zdGFsbCAtRCBjcnlwdG8vY3J5cHRvZGV2LmggJChQUkVGSVgpL3Vzci9pbmNsdWRlL2NyeXB0by9jcnlwdG9kZXYuaAorIAkkKE1BS0UpICQoS0VSTkVMX01BS0VfT1BUUykgbW9kdWxlc19pbnN0YWxsCistCWluc3RhbGwgLW0gNjQ0IC1EIGNyeXB0by9jcnlwdG9kZXYuaCAkKERFU1RESVIpLyQoaW5jbHVkZWRpcikvY3J5cHRvL2NyeXB0b2Rldi5oCiAgCiAgY2xlYW46Ci0gCW1ha2UgLUMgJChLRVJORUxfRElSKSBTVUJESVJTPWBwd2RgIGNsZWFuCi0tLSAKLTEuOS4xCi0KKyAJJChNQUtFKSAkKEtFUk5FTF9NQUtFX09QVFMpIGNsZWFuCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDZkNmI1NjBjNmU0NWRjMzE3ZGFlNDdjNzQ3MDZmYTQzZjRhMzFkOC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wNmQ2YjU2MGM2ZTQ1ZGMzMTdkYWU0N2M3NDcwNmZhNDNmNGEzMWQ4LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjU1NmUxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wNmQ2YjU2MGM2ZTQ1ZGMzMTdkYWU0N2M3NDcwNmZhNDNmNGEzMWQ4LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotRnJvbSBmMTRiNDcwNmIwZDA0OTg4ZTdlNWJjOGM0ZDJhZWZlZjlmMDI5ZDlkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTWljaGFlbCBXZWlzZXIgPG1pY2hhZWwud2Vpc2VyQGdteC5kZT4KLURhdGU6IEZyaSwgNSBBdWcgMjAxNiAxODo0Mzo1NSArMDIwMAotU3ViamVjdDogW1BBVENIXSBBZGp1c3QgdG8gcmVjZW50IHVzZXIgcGFnZSBBUEkgY2hhbmdlcwotCi00LjYuMCBiYXNpY2FsbHkgcmVuYW1lZCBnZXRfdXNlcl9wYWdlcygpIHRvIGdldF91c2VyX3BhZ2VzX3JlbW90ZSgpIGFuZAotaW50cm9kdWNlZCBhIG5ldyBnZXRfdXNlcl9wYWdlcygpIHRoYXQgYWx3YXlzIHdvcmtzIG9uIHRoZSBjdXJyZW50Ci10YXNrLlsxXSBEaXN0aW5ndWlzaCB0aGUgdHdvIEFQSXMgYmFzZWQgb24ga2VybmVsIHZlcnNpb24gd2UncmUKLWNvbXBpbGluZyBmb3IuCi0KLUFsc28sIHRoZXJlIHNlZW1zIHRvIGhhdmUgYmVlbiBhIG1hc3NpdmUgY2xlYW5zaW5nIG9mCi1wYWdlX2NhY2hlX3JlbGVhc2UocGFnZSkgaW4gZmF2b3VyIG9mIHB1dF9wYWdlKHBhZ2UpWzJdIHdoaWNoIHdhcyBhbgotYWxpYXMgZm9yIHB1dF9wYWdlKHBhZ2UpWzNdIHNpbmNlIDIuNi4wLiBCZWZvcmUgdGhhdCBiZWdpbm5pbmcgd2l0aAotMi40LjAgYm90aCBwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSkgYW5kIHB1dF9wYWdlKHBhZ2UpIGhhdmUgYmVlbiBhbGlhc2VzCi1mb3IgX19mcmVlX3BhZ2UocGFnZSkuIFNvIHVzaW5nIHB1dF9wYWdlKCkgaW5zdGVhZCBvZgotcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpIHdpbGwgcHJvZHVjZSBpZGVudGljYWwgY29kZSBmb3IgYW55dGhpbmcgYWZ0ZXIKLTIuNC4wLgotCi1bMV0gaHR0cHM6Ly9sa21sLm9yZy9sa21sLzIwMTYvMi8xMC81NTUKLVsyXSBodHRwczovL3d3dy5zcGluaWNzLm5ldC9saXN0cy9saW51eC1mc2RldmVsL21zZzk1OTIzLmh0bWwKLVszXSBodHRwczovL3d3dy5zcGluaWNzLm5ldC9saXN0cy9saW51eC1mc2RldmVsL21zZzk1OTIyLmh0bWwKLS0tLQotIHpjLmMgfCA5ICsrKysrKystLQotIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2Zyb20gbWFzdGVyIGZvciA0Ljgga2VybmVsc10KLQotSW5kZXg6IGNyeXB0b2Rldi1saW51eC0xLjgvemMuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGNyeXB0b2Rldi1saW51eC0xLjgub3JpZy96Yy5jCi0rKysgY3J5cHRvZGV2LWxpbnV4LTEuOC96Yy5jCi1AQCAtNTksNyArNTksMTIgQEAgaW50IF9fZ2V0X3VzZXJidWYodWludDhfdCBfX3VzZXIgKmFkZHIsCi0gCX0KLSAKLSAJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwotLQlyZXQgPSBnZXRfdXNlcl9wYWdlcyh0YXNrLCBtbSwKLSsjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTig0LCA2LCAwKSkKLSsJcmV0ID0gZ2V0X3VzZXJfcGFnZXNfcmVtb3RlKAotKyNlbHNlCi0rCXJldCA9IGdldF91c2VyX3BhZ2VzKAotKyNlbmRpZgotKwkJCXRhc2ssIG1tLAotIAkJCSh1bnNpZ25lZCBsb25nKWFkZHIsIHBnY291bnQsIHdyaXRlLCAwLCBwZywgTlVMTCk7Ci0gCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0gCWlmIChyZXQgIT0gcGdjb3VudCkKLUBAIC0xMTksNyArMTI0LDcgQEAgdm9pZCByZWxlYXNlX3VzZXJfcGFnZXMoc3RydWN0IGNzZXNzaW9uCi0gCQllbHNlCi0gCQkJc2VzLT5yZWFkb25seV9wYWdlcy0tOwotIAotLQkJcGFnZV9jYWNoZV9yZWxlYXNlKHNlcy0+cGFnZXNbaV0pOwotKwkJcHV0X3BhZ2Uoc2VzLT5wYWdlc1tpXSk7Ci0gCX0KLSAJc2VzLT51c2VkX3BhZ2VzID0gMDsKLSB9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvY2IxODZmNjgyNjc5MzgzZThiNTgwNjI0MDkyNzkwMzczMGNlODVkOS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy9jYjE4NmY2ODI2NzkzODNlOGI1ODA2MjQwOTI3OTAzNzMwY2U4NWQ5LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjBlYWI2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy9jYjE4NmY2ODI2NzkzODNlOGI1ODA2MjQwOTI3OTAzNzMwY2U4NWQ5LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjc5ICswLDAgQEAKLUZyb20gY2IxODZmNjgyNjc5MzgzZThiNTgwNjI0MDkyNzkwMzczMGNlODVkOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IE1pY2hhZWwgV2Vpc2VyIDxtaWNoYWVsLndlaXNlckBnbXguZGU+Ci1EYXRlOiBGcmksIDUgQXVnIDIwMTYgMTc6MjY6MjcgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSF0gU3VwcG9ydCBza2NpcGhlciBpbiBhZGRpdGlvbiB0byBhYmxrY2lwaGVyIEFQSQotCi1UaGUgYWJsa2NpcGhlciBBUEkgaXMgYmVpbmcgcGhhc2VkIG91dFsxXS4gVGhlIHVuaWZpZWQgc2tjaXBoZXIgQVBJCi1zZWVtcyB0byBoYXZlIG1hZGUgaXRzIGVudHJ5IHdpdGggNC4zLlszLCA0XSBCeSB3aGF0IGNhbiBiZSBzZWVuIGZyb20KLW1pZ3JhdGlvbiBwYXRjaGVzWzEuZmYuXSwgaXQncyBhIGRyb3AtaW4gcmVwbGFjZW1lbnQuCi0KLUFsc28sIGRlYWxsb2NhdG9ycyBzdWNoIGFzIGNyeXB0b19mcmVlX3NrY2lwaGVyKCkgYXJlIE5VTEwtc2FmZSBub3dbMl0uCi0KLUFkZCBhIG5ldyBoZWFkZXIgY2lwaGVyYXBpLmggdG8gYWlkIG1pZ3JhdGlvbiBmcm9tIGFibGtjaXBoZXIgdG8gc2tjaXBoZXIgYW5kCi1yZXRhaW4gc3VwcG9ydCBmb3Igb2xkIGtlcm5lbHMuIE1ha2UgaXQgZGVjaWRlIHdoaWNoIEFQSSB0byB1c2UgYW5kIHByb3ZpZGUKLWFwcHJvcHJpYXRlIGZ1bmN0aW9uIGNhbGxzIGFuZCB0eXBlIGRlZmluaXRpb25zLiBTaW5jZSB0aGUgYWJsa2NpcGhlciBhbmQKLXNrY2lwaGVyIEFQSXMgYXJlIHNvIHNpbWlsYXIsIHRob3NlIGFyZSBtYWlubHkgZGVmaW5lcyBmb3IgY29ycmVzcG9uZGluZwotcHNldWRvLWZ1bmN0aW9ucyBpbiBuYW1lc3BhY2UgY3J5cHRvZGV2XyBkZXJpdmVkIGRpcmVjdGx5IGZyb20gdGhlaXIgQVBJCi1jb3VudGVycGFydHMuCi0KLUNvbXBpbGVzIGFuZCB3b3JrcyAoaS5lLiBjaGVja3MgcGFzcykgd2l0aCBEZWJpYW4gdGVzdGluZyA0LjYuNCBrZXJuZWwKLWFzIHdlbGwgYXMgNC44LXJjMisgTGludXMgZ2l0IHRyZWUgYXMgb2YgdG9kYXkuIChCb3RoIHJlcXVpcmUgYSBmaXggZm9yCi1jaGFuZ2VkIHBhZ2UgYWNjZXNzIEFQSVs1XS4pCi0KLVsxXSBodHRwczovL3d3dy5zcGluaWNzLm5ldC9saXN0cy9saW51eC1jcnlwdG8vbXNnMTgxMzMuaHRtbAotWzJdIGh0dHBzOi8vd3d3LnNwaW5pY3MubmV0L2xpc3RzL2xpbnV4LWNyeXB0by9tc2cxODE1NC5odG1sLCBsaW5lIDEyMAotWzNdIGh0dHBzOi8vd3d3LnNwaW5pY3MubmV0L2xpc3RzL2xpbnV4LWNyeXB0by9tc2cxNjM3My5odG1sCi1bNF0gaHR0cHM6Ly93d3cuc3Bpbmljcy5uZXQvbGlzdHMvbGludXgtY3J5cHRvL21zZzE2Mjk0Lmh0bWwKLVs1XSBodHRwczovL2dpdGh1Yi5jb20vY3J5cHRvZGV2LWxpbnV4L2NyeXB0b2Rldi1saW51eC9wdWxsLzE0Ci0tLS0KLSBjaXBoZXJhcGkuaCB8IDYwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotIGNyeXB0bGliLmMgIHwgNDAgKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIGNyeXB0bGliLmggIHwgIDYgKysrKy0tCi0gaW9jdGwuYyAgICAgfCAgNCArKy0tCi0gNCBmaWxlcyBjaGFuZ2VkLCA4NCBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlvbnMoLSkKLSBjcmVhdGUgbW9kZSAxMDA2NDQgY2lwaGVyYXBpLmgKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZnJvbSBtYXN0ZXIgZm9yIDQuOCBrZXJuZWxzXQotCi1JbmRleDogY3J5cHRvZGV2LWxpbnV4LTEuOC9jaXBoZXJhcGkuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIC9kZXYvbnVsbAotKysrIGNyeXB0b2Rldi1saW51eC0xLjgvY2lwaGVyYXBpLmgKLUBAIC0wLDAgKzEsNjAgQEAKLSsjaWZuZGVmIENJUEhFUkFQSV9ICi0rIyBkZWZpbmUgQ0lQSEVSQVBJX0gKLSsKLSsjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotKwotKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oNCwgOCwgMCkpCi0rIyBpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KLSsKLSt0eXBlZGVmIHN0cnVjdCBhYmxrY2lwaGVyX2FsZyBjcnlwdG9kZXZfYmxrY2lwaGVyX2FsZ190OwotK3R5cGVkZWYgc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyIGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX3Q7Ci0rdHlwZWRlZiBzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0IGNyeXB0b2Rldl9ibGtjaXBoZXJfcmVxdWVzdF90OwotKwotKyMgZGVmaW5lIGNyeXB0b2Rldl9jcnlwdG9fYWxsb2NfYmxrY2lwaGVyIGNyeXB0b19hbGxvY19hYmxrY2lwaGVyCi0rIyBkZWZpbmUgY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfYWxnIGNyeXB0b19hYmxrY2lwaGVyX2FsZwotKyMgZGVmaW5lIGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX2Jsb2Nrc2l6ZSBjcnlwdG9fYWJsa2NpcGhlcl9ibG9ja3NpemUKLSsjIGRlZmluZSBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl9pdnNpemUgY3J5cHRvX2FibGtjaXBoZXJfaXZzaXplCi0rIyBkZWZpbmUgY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfYWxpZ25tYXNrIGNyeXB0b19hYmxrY2lwaGVyX2FsaWdubWFzawotKyMgZGVmaW5lIGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX3NldGtleSBjcnlwdG9fYWJsa2NpcGhlcl9zZXRrZXkKLSsKLStzdGF0aWMgaW5saW5lIHZvaWQgY3J5cHRvZGV2X2NyeXB0b19mcmVlX2Jsa2NpcGhlcihjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl90ICpjKSB7Ci0rCWlmIChjKQotKwkJY3J5cHRvX2ZyZWVfYWJsa2NpcGhlcihjKTsKLSt9Ci0rCi0rIyBkZWZpbmUgY3J5cHRvZGV2X2Jsa2NpcGhlcl9yZXF1ZXN0X2FsbG9jIGFibGtjaXBoZXJfcmVxdWVzdF9hbGxvYwotKyMgZGVmaW5lIGNyeXB0b2Rldl9ibGtjaXBoZXJfcmVxdWVzdF9zZXRfY2FsbGJhY2sgYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF9jYWxsYmFjawotKwotK3N0YXRpYyBpbmxpbmUgdm9pZCBjcnlwdG9kZXZfYmxrY2lwaGVyX3JlcXVlc3RfZnJlZShjcnlwdG9kZXZfYmxrY2lwaGVyX3JlcXVlc3RfdCAqcikgewotKwlpZiAocikKLSsJCWFibGtjaXBoZXJfcmVxdWVzdF9mcmVlKHIpOwotK30KLSsKLSsjIGRlZmluZSBjcnlwdG9kZXZfYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X2NyeXB0IGFibGtjaXBoZXJfcmVxdWVzdF9zZXRfY3J5cHQKLSsjIGRlZmluZSBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl9lbmNyeXB0IGNyeXB0b19hYmxrY2lwaGVyX2VuY3J5cHQKLSsjIGRlZmluZSBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl9kZWNyeXB0IGNyeXB0b19hYmxrY2lwaGVyX2RlY3J5cHQKLSsjIGRlZmluZSBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl90Zm0gY3J5cHRvX2FibGtjaXBoZXJfdGZtCi0rI2Vsc2UKLSsjaW5jbHVkZSA8Y3J5cHRvL3NrY2lwaGVyLmg+Ci0rCi0rdHlwZWRlZiBzdHJ1Y3Qgc2tjaXBoZXJfYWxnIGNyeXB0b2Rldl9ibGtjaXBoZXJfYWxnX3Q7Ci0rdHlwZWRlZiBzdHJ1Y3QgY3J5cHRvX3NrY2lwaGVyIGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX3Q7Ci0rdHlwZWRlZiBzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCBjcnlwdG9kZXZfYmxrY2lwaGVyX3JlcXVlc3RfdDsKLSsKLSsjIGRlZmluZSBjcnlwdG9kZXZfY3J5cHRvX2FsbG9jX2Jsa2NpcGhlciBjcnlwdG9fYWxsb2Nfc2tjaXBoZXIKLSsjIGRlZmluZSBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl9hbGcgY3J5cHRvX3NrY2lwaGVyX2FsZwotKyMgZGVmaW5lIGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX2Jsb2Nrc2l6ZSBjcnlwdG9fc2tjaXBoZXJfYmxvY2tzaXplCi0rIyBkZWZpbmUgY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfaXZzaXplIGNyeXB0b19za2NpcGhlcl9pdnNpemUKLSsjIGRlZmluZSBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl9hbGlnbm1hc2sgY3J5cHRvX3NrY2lwaGVyX2FsaWdubWFzawotKyMgZGVmaW5lIGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX3NldGtleSBjcnlwdG9fc2tjaXBoZXJfc2V0a2V5Ci0rIyBkZWZpbmUgY3J5cHRvZGV2X2NyeXB0b19mcmVlX2Jsa2NpcGhlciBjcnlwdG9fZnJlZV9za2NpcGhlcgotKyMgZGVmaW5lIGNyeXB0b2Rldl9ibGtjaXBoZXJfcmVxdWVzdF9hbGxvYyBza2NpcGhlcl9yZXF1ZXN0X2FsbG9jCi0rIyBkZWZpbmUgY3J5cHRvZGV2X2Jsa2NpcGhlcl9yZXF1ZXN0X3NldF9jYWxsYmFjayBza2NpcGhlcl9yZXF1ZXN0X3NldF9jYWxsYmFjawotKyMgZGVmaW5lIGNyeXB0b2Rldl9ibGtjaXBoZXJfcmVxdWVzdF9mcmVlIHNrY2lwaGVyX3JlcXVlc3RfZnJlZQotKyMgZGVmaW5lIGNyeXB0b2Rldl9ibGtjaXBoZXJfcmVxdWVzdF9zZXRfY3J5cHQgc2tjaXBoZXJfcmVxdWVzdF9zZXRfY3J5cHQKLSsjIGRlZmluZSBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl9lbmNyeXB0IGNyeXB0b19za2NpcGhlcl9lbmNyeXB0Ci0rIyBkZWZpbmUgY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfZGVjcnlwdCBjcnlwdG9fc2tjaXBoZXJfZGVjcnlwdAotKyMgZGVmaW5lIGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX3RmbSBjcnlwdG9fc2tjaXBoZXJfdGZtCi0rI2VuZGlmCi0rCi0rI2VuZGlmCi1JbmRleDogY3J5cHRvZGV2LWxpbnV4LTEuOC9jcnlwdGxpYi5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gY3J5cHRvZGV2LWxpbnV4LTEuOC5vcmlnL2NyeXB0bGliLmMKLSsrKyBjcnlwdG9kZXYtbGludXgtMS44L2NyeXB0bGliLmMKLUBAIC0yMyw3ICsyMyw2IEBACi0gICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgotICAqLwotIAotLSNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KLSAjaW5jbHVkZSA8bGludXgvbW0uaD4KLSAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgotICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotQEAgLTM3LDYgKzM2LDcgQEAKLSAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+Ci0gI2luY2x1ZGUgPGNyeXB0by9hdXRoZW5jLmg+Ci0gI2luY2x1ZGUgImNyeXB0b2Rldl9pbnQuaCIKLSsjaW5jbHVkZSAiY2lwaGVyYXBpLmgiCi0gCi0gCi0gc3RydWN0IGNyeXB0b2Rldl9yZXN1bHQgewotQEAgLTEzMywxNSArMTMzLDE1IEBAIGludCBjcnlwdG9kZXZfY2lwaGVyX2luaXQoc3RydWN0IGNpcGhlcl8KLSAJaW50IHJldDsKLSAKLSAJaWYgKGFlYWQgPT0gMCkgewotLQkJc3RydWN0IGFibGtjaXBoZXJfYWxnICphbGc7Ci0rCQljcnlwdG9kZXZfYmxrY2lwaGVyX2FsZ190ICphbGc7Ci0gCi0tCQlvdXQtPmFzeW5jLnMgPSBjcnlwdG9fYWxsb2NfYWJsa2NpcGhlcihhbGdfbmFtZSwgMCwgMCk7Ci0rCQlvdXQtPmFzeW5jLnMgPSBjcnlwdG9kZXZfY3J5cHRvX2FsbG9jX2Jsa2NpcGhlcihhbGdfbmFtZSwgMCwgMCk7Ci0gCQlpZiAodW5saWtlbHkoSVNfRVJSKG91dC0+YXN5bmMucykpKSB7Ci0gCQkJZGRlYnVnKDEsICJGYWlsZWQgdG8gbG9hZCBjaXBoZXIgJXMiLCBhbGdfbmFtZSk7Ci0gCQkJCXJldHVybiAtRUlOVkFMOwotIAkJfQotIAotLQkJYWxnID0gY3J5cHRvX2FibGtjaXBoZXJfYWxnKG91dC0+YXN5bmMucyk7Ci0rCQlhbGcgPSBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl9hbGcob3V0LT5hc3luYy5zKTsKLSAJCWlmIChhbGcgIT0gTlVMTCkgewotIAkJCS8qIFdhcyBjb3JyZWN0IGtleSBsZW5ndGggc3VwcGxpZWQ/ICovCi0gCQkJaWYgKGFsZy0+bWF4X2tleXNpemUgPiAwICYmCi1AQCAtMTU0LDExICsxNTQsMTEgQEAgaW50IGNyeXB0b2Rldl9jaXBoZXJfaW5pdChzdHJ1Y3QgY2lwaGVyXwotIAkJCX0KLSAJCX0KLSAKLS0JCW91dC0+YmxvY2tzaXplID0gY3J5cHRvX2FibGtjaXBoZXJfYmxvY2tzaXplKG91dC0+YXN5bmMucyk7Ci0tCQlvdXQtPml2c2l6ZSA9IGNyeXB0b19hYmxrY2lwaGVyX2l2c2l6ZShvdXQtPmFzeW5jLnMpOwotLQkJb3V0LT5hbGlnbm1hc2sgPSBjcnlwdG9fYWJsa2NpcGhlcl9hbGlnbm1hc2sob3V0LT5hc3luYy5zKTsKLSsJCW91dC0+YmxvY2tzaXplID0gY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfYmxvY2tzaXplKG91dC0+YXN5bmMucyk7Ci0rCQlvdXQtPml2c2l6ZSA9IGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX2l2c2l6ZShvdXQtPmFzeW5jLnMpOwotKwkJb3V0LT5hbGlnbm1hc2sgPSBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl9hbGlnbm1hc2sob3V0LT5hc3luYy5zKTsKLSAKLS0JCXJldCA9IGNyeXB0b19hYmxrY2lwaGVyX3NldGtleShvdXQtPmFzeW5jLnMsIGtleXAsIGtleWxlbik7Ci0rCQlyZXQgPSBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl9zZXRrZXkob3V0LT5hc3luYy5zLCBrZXlwLCBrZXlsZW4pOwotIAl9IGVsc2UgewotIAkJb3V0LT5hc3luYy5hcyA9IGNyeXB0b19hbGxvY19hZWFkKGFsZ19uYW1lLCAwLCAwKTsKLSAJCWlmICh1bmxpa2VseShJU19FUlIob3V0LT5hc3luYy5hcykpKSB7Ci1AQCAtMTkxLDE0ICsxOTEsMTQgQEAgaW50IGNyeXB0b2Rldl9jaXBoZXJfaW5pdChzdHJ1Y3QgY2lwaGVyXwotIAlpbml0X2NvbXBsZXRpb24oJm91dC0+YXN5bmMucmVzdWx0LT5jb21wbGV0aW9uKTsKLSAKLSAJaWYgKGFlYWQgPT0gMCkgewotLQkJb3V0LT5hc3luYy5yZXF1ZXN0ID0gYWJsa2NpcGhlcl9yZXF1ZXN0X2FsbG9jKG91dC0+YXN5bmMucywgR0ZQX0tFUk5FTCk7Ci0rCQlvdXQtPmFzeW5jLnJlcXVlc3QgPSBjcnlwdG9kZXZfYmxrY2lwaGVyX3JlcXVlc3RfYWxsb2Mob3V0LT5hc3luYy5zLCBHRlBfS0VSTkVMKTsKLSAJCWlmICh1bmxpa2VseSghb3V0LT5hc3luYy5yZXF1ZXN0KSkgewotIAkJCWRlcnIoMSwgImVycm9yIGFsbG9jYXRpbmcgYXN5bmMgY3J5cHRvIHJlcXVlc3QiKTsKLSAJCQlyZXQgPSAtRU5PTUVNOwotIAkJCWdvdG8gZXJyb3I7Ci0gCQl9Ci0gCi0tCQlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKG91dC0+YXN5bmMucmVxdWVzdCwKLSsJCWNyeXB0b2Rldl9ibGtjaXBoZXJfcmVxdWVzdF9zZXRfY2FsbGJhY2sob3V0LT5hc3luYy5yZXF1ZXN0LAotIAkJCQkJQ1JZUFRPX1RGTV9SRVFfTUFZX0JBQ0tMT0csCi0gCQkJCQljcnlwdG9kZXZfY29tcGxldGUsIG91dC0+YXN5bmMucmVzdWx0KTsKLSAJfSBlbHNlIHsKLUBAIC0yMTgsMTAgKzIxOCw4IEBAIGludCBjcnlwdG9kZXZfY2lwaGVyX2luaXQoc3RydWN0IGNpcGhlcl8KLSAJcmV0dXJuIDA7Ci0gZXJyb3I6Ci0gCWlmIChhZWFkID09IDApIHsKLS0JCWlmIChvdXQtPmFzeW5jLnJlcXVlc3QpCi0tCQkJYWJsa2NpcGhlcl9yZXF1ZXN0X2ZyZWUob3V0LT5hc3luYy5yZXF1ZXN0KTsKLS0JCWlmIChvdXQtPmFzeW5jLnMpCi0tCQkJY3J5cHRvX2ZyZWVfYWJsa2NpcGhlcihvdXQtPmFzeW5jLnMpOwotKwkJY3J5cHRvZGV2X2Jsa2NpcGhlcl9yZXF1ZXN0X2ZyZWUob3V0LT5hc3luYy5yZXF1ZXN0KTsKLSsJCWNyeXB0b2Rldl9jcnlwdG9fZnJlZV9ibGtjaXBoZXIob3V0LT5hc3luYy5zKTsKLSAJfSBlbHNlIHsKLSAJCWlmIChvdXQtPmFzeW5jLmFyZXF1ZXN0KQotIAkJCWFlYWRfcmVxdWVzdF9mcmVlKG91dC0+YXN5bmMuYXJlcXVlc3QpOwotQEAgLTIzNywxMCArMjM1LDggQEAgdm9pZCBjcnlwdG9kZXZfY2lwaGVyX2RlaW5pdChzdHJ1Y3QgY2lwaAotIHsKLSAJaWYgKGNkYXRhLT5pbml0KSB7Ci0gCQlpZiAoY2RhdGEtPmFlYWQgPT0gMCkgewotLQkJCWlmIChjZGF0YS0+YXN5bmMucmVxdWVzdCkKLS0JCQkJYWJsa2NpcGhlcl9yZXF1ZXN0X2ZyZWUoY2RhdGEtPmFzeW5jLnJlcXVlc3QpOwotLQkJCWlmIChjZGF0YS0+YXN5bmMucykKLS0JCQkJY3J5cHRvX2ZyZWVfYWJsa2NpcGhlcihjZGF0YS0+YXN5bmMucyk7Ci0rCQkJY3J5cHRvZGV2X2Jsa2NpcGhlcl9yZXF1ZXN0X2ZyZWUoY2RhdGEtPmFzeW5jLnJlcXVlc3QpOwotKwkJCWNyeXB0b2Rldl9jcnlwdG9fZnJlZV9ibGtjaXBoZXIoY2RhdGEtPmFzeW5jLnMpOwotIAkJfSBlbHNlIHsKLSAJCQlpZiAoY2RhdGEtPmFzeW5jLmFyZXF1ZXN0KQotIAkJCQlhZWFkX3JlcXVlc3RfZnJlZShjZGF0YS0+YXN5bmMuYXJlcXVlc3QpOwotQEAgLTI4OSwxMCArMjg1LDEwIEBAIHNzaXplX3QgY3J5cHRvZGV2X2NpcGhlcl9lbmNyeXB0KHN0cnVjdAotIAlyZWluaXRfY29tcGxldGlvbigmY2RhdGEtPmFzeW5jLnJlc3VsdC0+Y29tcGxldGlvbik7Ci0gCi0gCWlmIChjZGF0YS0+YWVhZCA9PSAwKSB7Ci0tCQlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X2NyeXB0KGNkYXRhLT5hc3luYy5yZXF1ZXN0LAotKwkJY3J5cHRvZGV2X2Jsa2NpcGhlcl9yZXF1ZXN0X3NldF9jcnlwdChjZGF0YS0+YXN5bmMucmVxdWVzdCwKLSAJCQkoc3RydWN0IHNjYXR0ZXJsaXN0ICopc3JjLCBkc3QsCi0gCQkJbGVuLCBjZGF0YS0+YXN5bmMuaXYpOwotLQkJcmV0ID0gY3J5cHRvX2FibGtjaXBoZXJfZW5jcnlwdChjZGF0YS0+YXN5bmMucmVxdWVzdCk7Ci0rCQlyZXQgPSBjcnlwdG9kZXZfY3J5cHRvX2Jsa2NpcGhlcl9lbmNyeXB0KGNkYXRhLT5hc3luYy5yZXF1ZXN0KTsKLSAJfSBlbHNlIHsKLSAJCWFlYWRfcmVxdWVzdF9zZXRfY3J5cHQoY2RhdGEtPmFzeW5jLmFyZXF1ZXN0LAotIAkJCShzdHJ1Y3Qgc2NhdHRlcmxpc3QgKilzcmMsIGRzdCwKLUBAIC0zMTEsMTAgKzMwNywxMCBAQCBzc2l6ZV90IGNyeXB0b2Rldl9jaXBoZXJfZGVjcnlwdChzdHJ1Y3QKLSAKLSAJcmVpbml0X2NvbXBsZXRpb24oJmNkYXRhLT5hc3luYy5yZXN1bHQtPmNvbXBsZXRpb24pOwotIAlpZiAoY2RhdGEtPmFlYWQgPT0gMCkgewotLQkJYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF9jcnlwdChjZGF0YS0+YXN5bmMucmVxdWVzdCwKLSsJCWNyeXB0b2Rldl9ibGtjaXBoZXJfcmVxdWVzdF9zZXRfY3J5cHQoY2RhdGEtPmFzeW5jLnJlcXVlc3QsCi0gCQkJKHN0cnVjdCBzY2F0dGVybGlzdCAqKXNyYywgZHN0LAotIAkJCWxlbiwgY2RhdGEtPmFzeW5jLml2KTsKLS0JCXJldCA9IGNyeXB0b19hYmxrY2lwaGVyX2RlY3J5cHQoY2RhdGEtPmFzeW5jLnJlcXVlc3QpOwotKwkJcmV0ID0gY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfZGVjcnlwdChjZGF0YS0+YXN5bmMucmVxdWVzdCk7Ci0gCX0gZWxzZSB7Ci0gCQlhZWFkX3JlcXVlc3Rfc2V0X2NyeXB0KGNkYXRhLT5hc3luYy5hcmVxdWVzdCwKLSAJCQkoc3RydWN0IHNjYXR0ZXJsaXN0ICopc3JjLCBkc3QsCi1JbmRleDogY3J5cHRvZGV2LWxpbnV4LTEuOC9jcnlwdGxpYi5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gY3J5cHRvZGV2LWxpbnV4LTEuOC5vcmlnL2NyeXB0bGliLmgKLSsrKyBjcnlwdG9kZXYtbGludXgtMS44L2NyeXB0bGliLmgKLUBAIC0zLDYgKzMsOCBAQAotIAotICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0gCi0rI2luY2x1ZGUgImNpcGhlcmFwaS5oIgotKwotIHN0cnVjdCBjaXBoZXJfZGF0YSB7Ci0gCWludCBpbml0OyAvKiAwIHVuaW5pdGlhbGl6ZWQgKi8KLSAJaW50IGJsb2Nrc2l6ZTsKLUBAIC0xMiw4ICsxNCw4IEBAIHN0cnVjdCBjaXBoZXJfZGF0YSB7Ci0gCWludCBhbGlnbm1hc2s7Ci0gCXN0cnVjdCB7Ci0gCQkvKiBibG9jayBjaXBoZXJzICovCi0tCQlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnM7Ci0tCQlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXF1ZXN0OwotKwkJY3J5cHRvZGV2X2NyeXB0b19ibGtjaXBoZXJfdCAqczsKLSsJCWNyeXB0b2Rldl9ibGtjaXBoZXJfcmVxdWVzdF90ICpyZXF1ZXN0OwotIAotIAkJLyogQUVBRCBjaXBoZXJzICovCi0gCQlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmFzOwotSW5kZXg6IGNyeXB0b2Rldi1saW51eC0xLjgvaW9jdGwuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGNyeXB0b2Rldi1saW51eC0xLjgub3JpZy9pb2N0bC5jCi0rKysgY3J5cHRvZGV2LWxpbnV4LTEuOC9pb2N0bC5jCi1AQCAtMzQsNyArMzQsNiBAQAotICAqLwotIAotICNpbmNsdWRlIDxjcnlwdG8vaGFzaC5oPgotLSNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KLSAjaW5jbHVkZSA8bGludXgvbW0uaD4KLSAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgotICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotQEAgLTUzLDYgKzUyLDcgQEAKLSAjaW5jbHVkZSAiY3J5cHRvZGV2X2ludC5oIgotICNpbmNsdWRlICJ6Yy5oIgotICNpbmNsdWRlICJ2ZXJzaW9uLmgiCi0rI2luY2x1ZGUgImNpcGhlcmFwaS5oIgotIAotIE1PRFVMRV9BVVRIT1IoIk5pa29zIE1hdnJvZ2lhbm5vcG91bG9zIDxubWF2QGdudXRscy5vcmc+Iik7Ci0gTU9EVUxFX0RFU0NSSVBUSU9OKCJDcnlwdG9EZXYgZHJpdmVyIik7Ci1AQCAtNzY1LDcgKzc2NSw3IEBAIHN0YXRpYyBpbnQgZ2V0X3Nlc3Npb25faW5mbyhzdHJ1Y3QgZmNyeXAKLSAKLSAJaWYgKHNlc19wdHItPmNkYXRhLmluaXQpIHsKLSAJCWlmIChzZXNfcHRyLT5jZGF0YS5hZWFkID09IDApCi0tCQkJdGZtID0gY3J5cHRvX2FibGtjaXBoZXJfdGZtKHNlc19wdHItPmNkYXRhLmFzeW5jLnMpOwotKwkJCXRmbSA9IGNyeXB0b2Rldl9jcnlwdG9fYmxrY2lwaGVyX3RmbShzZXNfcHRyLT5jZGF0YS5hc3luYy5zKTsKLSAJCWVsc2UKLSAJCQl0Zm0gPSBjcnlwdG9fYWVhZF90Zm0oc2VzX3B0ci0+Y2RhdGEuYXN5bmMuYXMpOwotIAkJdGZtX2luZm9fdG9fYWxnX2luZm8oJnNpb3AtPmNpcGhlcl9pbmZvLCB0Zm0pOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzL2tlcm5lbC00LTEwLWNoYW5nZXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMva2VybmVsLTQtMTAtY2hhbmdlcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNkNjA4Yi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMva2VybmVsLTQtMTAtY2hhbmdlcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLVNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+Ci0KLUZyb20gMmIyOWJlOGFjNDE0MTRlZDE5Y2I0ZjVkNTYyNmQ5YmQwZDdiMTFhOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IENyaXN0aWFuIFN0b2ljYSA8Y3Jpc3RpYW4uc3RvaWNhQG54cC5jb20+Ci1EYXRlOiBXZWQsIDggRmViIDIwMTcgMTI6MTE6MDQgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSF0gYWRqdXN0IHRvIEFQSSBjaGFuZ2VzIGluIGtlcm5lbCA+PTQuMTAKLQotVGhlcmUgYXJlIG1hbnkgY2hhbmdlcyByZWxhdGVkIHRvIGdldF91c2VyX3BhZ2VzIGFuZCB0aGUgY29kZSBpcyByZXdyaXR0ZW4KLWZvciBjbGFyaXR5LgotCi1TaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBTdG9pY2EgPGNyaXN0aWFuLnN0b2ljYUBueHAuY29tPgotLS0tCi0gemMuYyB8IDI4ICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS96Yy5jIGIvemMuYwotaW5kZXggZTc2NmVlMy4uMmY0ZWE5OSAxMDA2NDQKLS0tLSBhL3pjLmMKLSsrKyBiL3pjLmMKLUBAIC01OSwxOSArNTksMjUgQEAgaW50IF9fZ2V0X3VzZXJidWYodWludDhfdCBfX3VzZXIgKmFkZHIsIHVpbnQzMl90IGxlbiwgaW50IHdyaXRlLAotIAl9Ci0gCi0gCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKLS0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTig0LCA2LCAwKSkKLS0JcmV0ID0gZ2V0X3VzZXJfcGFnZXNfcmVtb3RlKAotKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oNCwgNiwgMCkpCi0rCXJldCA9IGdldF91c2VyX3BhZ2VzKHRhc2ssIG1tLAotKwkJCSh1bnNpZ25lZCBsb25nKWFkZHIsIHBnY291bnQsIHdyaXRlLCAwLCBwZywgTlVMTCk7Ci0gI2Vsc2UKLS0JcmV0ID0gZ2V0X3VzZXJfcGFnZXMoCi0tI2VuZGlmCi0tCQkJdGFzaywgbW0sCi0tCQkJKHVuc2lnbmVkIGxvbmcpYWRkciwgcGdjb3VudCwKLS0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTig0LCA5LCAwKSkKLS0JCQl3cml0ZSA/IEZPTExfV1JJVEUgOiAwLAotLSNlbHNlCi0tCQkJd3JpdGUsIDAsCi0tI2VuZGlmCi0rIyAgaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDQsIDksIDApKQotKwlyZXQgPSBnZXRfdXNlcl9wYWdlc19yZW1vdGUodGFzaywgbW0sCi0rCQkJKHVuc2lnbmVkIGxvbmcpYWRkciwgcGdjb3VudCwgd3JpdGUsIDAsIHBnLCBOVUxMKTsKLSsjICBlbHNlCi0rIyAgICBpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oNCwgMTAsIDApKQotKwlyZXQgPSBnZXRfdXNlcl9wYWdlc19yZW1vdGUodGFzaywgbW0sCi0rCQkJKHVuc2lnbmVkIGxvbmcpYWRkciwgcGdjb3VudCwgd3JpdGUgPyBGT0xMX1dSSVRFIDogMCwKLSAJCQlwZywgTlVMTCk7Ci0rIyAgICBlbHNlCi0rCXJldCA9IGdldF91c2VyX3BhZ2VzX3JlbW90ZSh0YXNrLCBtbSwKLSsJCQkodW5zaWduZWQgbG9uZylhZGRyLCBwZ2NvdW50LCB3cml0ZSA/IEZPTExfV1JJVEUgOiAwLAotKwkJCXBnLCBOVUxMLCBOVUxMKTsKLSsjICAgIGVuZGlmCi0rIyAgZW5kaWYKLSsjZW5kaWYKLSAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLSAJaWYgKHJldCAhPSBwZ2NvdW50KQotIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9kdGMvZHRjLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2R0Yy9kdGMuaW5jCmluZGV4IDBjNDA5YjAuLmQ3NTk5NDYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2R0Yy9kdGMuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2R0Yy9kdGMuaW5jCkBAIC0xLDQgKzEsNSBAQAogU1VNTUFSWSA9ICJEZXZpY2UgVHJlZSBDb21waWxlciIKK0hPTUVQQUdFID0gImh0dHBzOi8vZGV2aWNldHJlZS5vcmcvIgogREVTQ1JJUFRJT04gPSAiVGhlIERldmljZSBUcmVlIENvbXBpbGVyIGlzIGEgdG9vbCB1c2VkIHRvIG1hbmlwdWxhdGUgdGhlIE9wZW4tRmlybXdhcmUtbGlrZSBkZXZpY2UgdHJlZSB1c2VkIGJ5IFBvd2VyUEMga2VybmVscy4iCiBTRUNUSU9OID0gImJvb3Rsb2FkZXIiCiBMSUNFTlNFID0gIkdQTHYyIHwgQlNEIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvZHRjL2R0Y18xLjQuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2R0Yy9kdGNfMS40LjIuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjNzJhZGMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvZHRjL2R0Y18xLjQuMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXJlcXVpcmUgZHRjLmluYwotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9HUEw7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKLQkJICAgIGZpbGU6Ly9saWJmZHQvbGliZmR0Lmg7YmVnaW5saW5lPTM7ZW5kbGluZT01MjttZDU9ZmIzNjA5NjMxNTFmOGVjMmQ2YzA2YjA1NWJjYmI2OGMiCi0KLVNSQ1JFViA9ICJlYzAyYjM0YzA1YmUwNGYyNDlmZmFhY2E0YjY2NmY1MjQ2ODc3ZGVhIgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9kdGMvZHRjXzEuNC40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvZHRjL2R0Y18xLjQuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWRiN2JhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvZHRjL2R0Y18xLjQuNC5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIGR0Yy5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vR1BMO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisJCSAgICBmaWxlOi8vbGliZmR0L2xpYmZkdC5oO2JlZ2lubGluZT0zO2VuZGxpbmU9NTI7bWQ1PWZiMzYwOTYzMTUxZjhlYzJkNmMwNmIwNTViY2JiNjhjIgorCitTUkNSRVYgPSAiNTU4Y2Q4MWJkZDQzMjc2OWI1OWJmZjAxMjQwYzQ0ZjgyY2ZiMWE5ZCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2Vybi10b29scy9rZXJuLXRvb2xzLW5hdGl2ZV9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXJuLXRvb2xzL2tlcm4tdG9vbHMtbmF0aXZlX2dpdC5iYgppbmRleCA1ZTY1NDY5Li4zYTM5OTJhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXJuLXRvb2xzL2tlcm4tdG9vbHMtbmF0aXZlX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXJuLXRvb2xzL2tlcm4tdG9vbHMtbmF0aXZlX2dpdC5iYgpAQCAtNCw3ICs0LDcgQEAKIAogREVQRU5EUyA9ICJnaXQtbmF0aXZlIgogCi1TUkNSRVYgPSAiYmQ3NDQ3Y2Q2Mjc0ZDc2NGExMjlkY2RjMjQ2Y2RiZmQ4YzQ3Yjk5MSIKK1NSQ1JFViA9ICJiNDZiMWM0ZjA5NzNiZjFlYjA5Y2YxMTkxZjVmNGU2OWJjZDA0NzVkIgogUFIgPSAicjEyIgogUFYgPSAiMC4yK2dpdCR7U1JDUFZ9IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy5pbmMKaW5kZXggYmRmZTAyNC4uYzY4OWJlYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzLmluYwpAQCAtMTEsNiArMTEsNyBAQAogU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL2tlcm5lbC9rZXhlYy9rZXhlYy10b29scy0ke1BWfS50YXIuZ3ogXAogICAgICAgICAgICBmaWxlOi8va2R1bXAgXAogICAgICAgICAgICBmaWxlOi8va2R1bXAuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9rZHVtcC5zZXJ2aWNlIFwKICIKIAogUFIgPSAicjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy8wMDAxLURpc2FibGUtUElFLWR1cmluZy1saW5rLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMvMDAwMS1EaXNhYmxlLVBJRS1kdXJpbmctbGluay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjJmODVlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMvMDAwMS1EaXNhYmxlLVBJRS1kdXJpbmctbGluay5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIGVhN2JlNmQ3MWI4NTg4MGU4ZThhMmM4YTRmNDlhNjk2YzVmMzFhZTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAxMCBKdW4gMjAxNyAxMToxODo0OSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBEaXNhYmxlIFBJRSBkdXJpbmcgbGluaworCitXZSBoYXZlIGV4cGxjaXRseSBkaXNhYmxlZCBQSUUgZHVyaW5nIGNvbXBpbGUgc28gd2UKK2p1c3QgbmVlZCB0byBtYXRjaCBpdCB3aXRoIGxpbmtlciBmbGFncworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHB1cmdhdG9yeS9NYWtlZmlsZSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3B1cmdhdG9yeS9NYWtlZmlsZSBiL3B1cmdhdG9yeS9NYWtlZmlsZQoraW5kZXggNTY0YmRiNy4uYTA4ZTQxZiAxMDA2NDQKKy0tLSBhL3B1cmdhdG9yeS9NYWtlZmlsZQorKysrIGIvcHVyZ2F0b3J5L01ha2VmaWxlCitAQCAtNTksNyArNTksNyBAQCAkKFBVUkdBVE9SWSk6IENQUEZMQUdTPSQoJChBUkNIKV9QVVJHQVRPUllfRVhUUkFfQ0ZMQUdTKSBcCisgCQkJLUlpbmNsdWRlIFwKKyAJCQktSSQoc2hlbGwgJChDQykgLXByaW50LWZpbGUtbmFtZT1pbmNsdWRlKQorICQoUFVSR0FUT1JZKTogTERGTEFHUz0kKCQoQVJDSClfUFVSR0FUT1JZX0VYVFJBX0NGTEFHUylcCistCQkJLVdsLC0tbm8tdW5kZWZpbmVkIC1ub3N0YXJ0ZmlsZXMgLW5vc3RkbGliIFwKKysJCQktV2wsLS1uby11bmRlZmluZWQgLW5vLXBpZSAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiBcCisgCQkJLW5vZGVmYXVsdGxpYnMgLWUgcHVyZ2F0b3J5X3N0YXJ0IC1XbCwtciBcCisgCQkJLVdsLC1NYXA9JChQVVJHQVRPUllfTUFQKQorIAorLS0gCisyLjEzLjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMvMDAwMS1hcm02NC1EaXNhYmxlLVBJQy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzLzAwMDEtYXJtNjQtRGlzYWJsZS1QSUMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRlOTRkNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzLzAwMDEtYXJtNjQtRGlzYWJsZS1QSUMucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSAzYmI3M2U1ZTU2NDliNDU1ZTE1ZDVjYTNhN2FkMWE5MGM0OTYwOTcyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMTAgSnVuIDIwMTcgMTE6NTQ6MzYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gYXJtNjQ6IERpc2FibGUgUElDCisKK0ZpeAorfCBjYzE6IHNvcnJ5LCB1bmltcGxlbWVudGVkOiBjb2RlIG1vZGVsICdsYXJnZScgd2l0aCAtZlBJQworfCBtYWtlOiAqKiogW01ha2VmaWxlOjExODogcHVyZ2F0b3J5L2FyY2gvYXJtNjQvZW50cnkub10gRXJyb3IgMQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIHB1cmdhdG9yeS9hcmNoL2FybTY0L01ha2VmaWxlIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9wdXJnYXRvcnkvYXJjaC9hcm02NC9NYWtlZmlsZSBiL3B1cmdhdG9yeS9hcmNoL2FybTY0L01ha2VmaWxlCitpbmRleCA2MzZhYmVhLi44MDA2OGNhIDEwMDY0NAorLS0tIGEvcHVyZ2F0b3J5L2FyY2gvYXJtNjQvTWFrZWZpbGUKKysrKyBiL3B1cmdhdG9yeS9hcmNoL2FybTY0L01ha2VmaWxlCitAQCAtMSw2ICsxLDcgQEAKKyAKKyBhcm02NF9QVVJHQVRPUllfRVhUUkFfQ0ZMQUdTID0gXAorIAktbWNtb2RlbD1sYXJnZSBcCisrCS1mbm8tUElDIFwKKyAJLWZuby1zdGFjay1wcm90ZWN0b3IgXAorIAktZm5vLWFzeW5jaHJvbm91cy11bndpbmQtdGFibGVzIFwKKyAJLVd1bmRlZiBcCistLSAKKzIuMTMuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZHVtcC5zZXJ2aWNlIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2R1bXAuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTY1YTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2R1bXAuc2VydmljZQpAQCAtMCwwICsxLDEyIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVJlYm9vdCBhbmQgZHVtcCB2bWNvcmUgdmlhIGtleGVjCitEZWZhdWx0RGVwZW5kZW5jaWVzPW5vCisKK1tTZXJ2aWNlXQorVHlwZT1vbmVzaG90CitSZW1haW5BZnRlckV4aXQ9eWVzCitFeGVjU3RhcnQ9QExJQkVYRUNESVJAL2tkdW1wLWhlbHBlciBzdGFydAorRXhlY1N0b3A9QExJQkVYRUNESVJAL2tkdW1wLWhlbHBlciBzdG9wCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzXzIuMC4xNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzXzIuMC4xNC5iYgppbmRleCA5MGQ1OTg1Li4wZjYzOThmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29sc18yLjAuMTQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHNfMi4wLjE0LmJiCkBAIC0xOSwzMCArMTksNDcgQEAKICAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXg4Ni14ODZfNjQtRml4LWZvcm1hdC13YXJuaW5nLXdpdGgtZGllLnBhdGNoIFwKICAgICAgICAgICAgIGZpbGU6Ly8wMDAyLXBwYy1GaXgtZm9ybWF0LXdhcm5pbmctd2l0aC1kaWUucGF0Y2ggXAogICAgICAgICAgICAgZmlsZTovL2tleGVjLXgzMi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1EaXNhYmxlLVBJRS1kdXJpbmctbGluay5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1hcm02NC1EaXNhYmxlLVBJQy5wYXRjaCBcCiAgICAgICAgICAiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICJiMmIyYzVlNmIyOWQ0NjdkNmU5OWQ1ODdmYjZiN2NmNSIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICJiM2U2OTUxOWQyYWNjZWQyNTY4NDNiMWU4ZjFlY2ZhMDBkOWI1NGZhMDc0NDllZDc4ZjA1YjkxOTNmMjM5MzcwIgogCitTRUNVUklUWV9QSUVfQ0ZMQUdTX3JlbW92ZSA9ICItZlBJRSAtcGllIgorCiBQQUNLQUdFUyA9KyAia2V4ZWMga2R1bXAgdm1jb3JlLWRtZXNnIgogCiBBTExPV19FTVBUWV8ke1BOfSA9ICIxIgogUlJFQ09NTUVORFNfJHtQTn0gPSAia2V4ZWMga2R1bXAgdm1jb3JlLWRtZXNnIgogCiBGSUxFU19rZXhlYyA9ICIke3NiaW5kaXJ9L2tleGVjIgotRklMRVNfa2R1bXAgPSAiJHtzYmluZGlyfS9rZHVtcCAke3N5c2NvbmZkaXJ9L2luaXQuZC9rZHVtcCBcCi0gICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3N5c2NvbmZpZy9rZHVtcC5jb25mIgorRklMRVNfa2R1bXAgPSAiJHtzYmluZGlyfS9rZHVtcCBcCisgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3N5c2NvbmZpZy9rZHVtcC5jb25mIFwKKyAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vaW5pdC5kL2tkdW1wIFwKKyAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0va2R1bXAtaGVscGVyIFwKKyAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0va2R1bXAuc2VydmljZSBcCisiCisKIEZJTEVTX3ZtY29yZS1kbWVzZyA9ICIke3NiaW5kaXJ9L3ZtY29yZS1kbWVzZyIKIAotaW5oZXJpdCB1cGRhdGUtcmMuZAoraW5oZXJpdCB1cGRhdGUtcmMuZCBzeXN0ZW1kCiAKIElOSVRTQ1JJUFRfUEFDS0FHRVMgPSAia2R1bXAiCiBJTklUU0NSSVBUX05BTUVfa2R1bXAgPSAia2R1bXAiCiBJTklUU0NSSVBUX1BBUkFNU19rZHVtcCA9ICJzdGFydCA1NiAyIDMgNCA1IC4gc3RvcCA1NiAwIDEgNiAuIgogCiBkb19pbnN0YWxsX2FwcGVuZCAoKSB7Ci0gICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCi0gICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2tkdW1wICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9rZHVtcAogICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2NvbmZpZwogICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9rZHVtcC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2NvbmZpZworCisgICAgICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorICAgICAgICAgICAgICAgIGluc3RhbGwgLUQgLW0gMDc1NSAke1dPUktESVJ9L2tkdW1wICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9rZHVtcAorICAgICAgICBmaQorCisgICAgICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisgICAgICAgICAgICAgICAgaW5zdGFsbCAtRCAtbSAwNzU1ICR7V09SS0RJUn0va2R1bXAgJHtEfSR7bGliZXhlY2Rpcn0va2R1bXAtaGVscGVyCisgICAgICAgICAgICAgICAgaW5zdGFsbCAtRCAtbSAwNjQ0ICR7V09SS0RJUn0va2R1bXAuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9rZHVtcC5zZXJ2aWNlCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lICdzLEBMSUJFWEVDRElSQCwke2xpYmV4ZWNkaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2tkdW1wLnNlcnZpY2UKKyAgICAgICAgZmkKIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QuaW5jCmluZGV4IGJhODBmYzUuLjdmYjEwYjUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kLmluYwpAQCAtMTQsMTUgKzE0LDE0IEBACiAgICAgICAgICAgICAgICAgICAgIgogaW5oZXJpdCBhdXRvdG9vbHMgZ3RrLWRvYyBwa2djb25maWcgbWFucGFnZXMKIAotU1JDUkVWID0gIjY1YTg4NWRmNWY2ZjE1MjIyYjQ0ZmQ2OTVjNWVhY2ExN2U4MzdhMTQiCitTUkNSRVYgPSAiZWY0MjU3YjU5YzQzMDdiOGM2MjdkODlmM2M3ZjFmZWVkYjMyNTgyZiIKICMgTG9va291dCBmb3IgUFYgYnVtcCB0b28gd2hlbiBTUkNSRVYgaXMgY2hhbmdlZAotUFYgPSAiMjMrZ2l0JHtTUkNQVn0iCitQViA9ICIyNCtnaXQke1NSQ1BWfSIKIAogU1JDX1VSSSA9ICJnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL3V0aWxzL2tlcm5lbC9rbW9kL2ttb2QuZ2l0IFwKICAgICAgICAgICAgZmlsZTovL2RlcG1vZC1zZWFyY2guY29uZiBcCiAgICAgICAgICAgIGZpbGU6Ly9hdm9pZF9wYXJhbGxlbF90ZXN0cy5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9maXgtT19DTE9FWEVDLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2tjbWRsaW5lX3F1b3Rlcy5wYXRjaCBcCiAgICAgICAgICAgIgogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL2tjbWRsaW5lX3F1b3Rlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9rY21kbGluZV9xdW90ZXMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YmRlYzUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL2tjbWRsaW5lX3F1b3Rlcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLUZyb20gNGE2ZjkyYTEwNjgwZTdlMzY4MDdmNWUyYWU4ZTQ5N2U4ZDczYTA0OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEphbWVzIE1pbm9yIDxqYW1lcy5taW5vckBuaS5jb20+Ci1EYXRlOiBGcmksIDIwIEphbiAyMDE3IDE3OjE1OjUwIC0wNjAwCi1TdWJqZWN0OiBbUEFUQ0hdIGxpYmttb2Q6IEZpeCBoYW5kbGluZyBvZiBxdW90ZXMgaW4ga2VybmVsIGNvbW1hbmQgbGluZQotCi1JZiBhIG1vZHVsZSBwYXJhbWV0ZXIgb24gdGhlIGNvbW1hbmQgbGluZSBjb250YWlucyBxdW90ZXMsIGFueQotc3BhY2VzIGluc2lkZSB0aG9zZSBxdW90ZXMgc2hvdWxkIGJlIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlCi1wYXJhbWV0ZXIuCi0KLVNpZ25lZC1vZmYtYnk6IEphbWVzIE1pbm9yIDxqYW1lcy5taW5vckBuaS5jb20+Ci0KLVVwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQKLS0tLQotIGxpYmttb2QvbGlia21vZC1jb25maWcuYyB8IDcgKysrKysrKwotIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL2xpYmttb2QvbGlia21vZC1jb25maWcuYyBiL2xpYmttb2QvbGlia21vZC1jb25maWcuYwotaW5kZXggNTdmYmUzNy4uZWE0MGQxOSAxMDA2NDQKLS0tLSBhL2xpYmttb2QvbGlia21vZC1jb25maWcuYwotKysrIGIvbGlia21vZC9saWJrbW9kLWNvbmZpZy5jCi1AQCAtNDk3LDYgKzQ5Nyw3IEBAIHN0YXRpYyBpbnQga21vZF9jb25maWdfcGFyc2Vfa2NtZGxpbmUoc3RydWN0IGttb2RfY29uZmlnICpjb25maWcpCi0gCWNoYXIgYnVmW0tDTURfTElORV9TSVpFXTsKLSAJaW50IGZkLCBlcnI7Ci0gCWNoYXIgKnAsICptb2RuYW1lLCAgKnBhcmFtID0gTlVMTCwgKnZhbHVlID0gTlVMTCwgaXNfbW9kdWxlID0gMTsKLSsJYm9vbCBpc19xdW90ZWQgPSBmYWxzZTsKLSAKLSAJZmQgPSBvcGVuKCIvcHJvYy9jbWRsaW5lIiwgT19SRE9OTFl8T19DTE9FWEVDKTsKLSAJaWYgKGZkIDwgMCkgewotQEAgLTUxNCw2ICs1MTUsMTIgQEAgc3RhdGljIGludCBrbW9kX2NvbmZpZ19wYXJzZV9rY21kbGluZShzdHJ1Y3Qga21vZF9jb25maWcgKmNvbmZpZykKLSAJfQotIAotIAlmb3IgKHAgPSBidWYsIG1vZG5hbWUgPSBidWY7ICpwICE9ICdcMCcgJiYgKnAgIT0gJ1xuJzsgcCsrKSB7Ci0rCQlpZiAoKnAgPT0gJyInKSB7Ci0rCQkJaXNfcXVvdGVkID0gIWlzX3F1b3RlZDsKLSsJCQljb250aW51ZTsKLSsJCX0KLSsJCWlmIChpc19xdW90ZWQpCi0rCQkJY29udGludWU7Ci0gCQlzd2l0Y2ggKCpwKSB7Ci0gCQljYXNlICcgJzoKLSAJCQkqcCA9ICdcMCc7Ci0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC0wLjUvbGF0ZW5jeXRvcC1tYWtlZmlsZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC0wLjUvbGF0ZW5jeXRvcC1tYWtlZmlsZS5wYXRjaAppbmRleCBhZjE5YjM3Li43MTQ3ZmRhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sYXRlbmN5dG9wL2xhdGVuY3l0b3AtMC41L2xhdGVuY3l0b3AtbWFrZWZpbGUucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLTAuNS9sYXRlbmN5dG9wLW1ha2VmaWxlLnBhdGNoCkBAIC0xLDMgKzEsNyBAQAorCitTaWduZWQtb2ZmLWJ5OiBKYWNrIE1pdGNoZWxsIDxqYWNrLm1pdGNoZWxsQGRiYnJvYWRjYXN0LmNvLnVrPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKIGRpZmYgLS1naXQgYS9NYWtlZmlsZS5vcmlnIGIvTWFrZWZpbGUKIGluZGV4IDE2YTIzNjkuLmZhNzk3YTIgMTAwNjQ0CiAtLS0gYS9NYWtlZmlsZS5vcmlnCkBAIC01LDggKzksOCBAQAogQEAgLTEsMTAgKzEsMTEgQEAKIC0jIEZJWE1FOiBVc2UgYXV0b2NvbmYgPwogLUhBU19HVEtfR1VJID0gMQotKyMgVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQotKyMgU2lnbmVkLW9mZi1ieTogSmFjayBNaXRjaGVsbCA8amFjay5taXRjaGVsbEBkYmJyb2FkY2FzdC5jby51az4KKysjCisrIwogIAogIERFU1RESVIgPQogIFNCSU5ESVIgPSAvdXNyL3NiaW4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWZpcm13YXJlL2xpbnV4LWZpcm13YXJlX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWZpcm13YXJlL2xpbnV4LWZpcm13YXJlX2dpdC5iYgppbmRleCBmZjYwZDMwLi45MDU0YjMzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1maXJtd2FyZS9saW51eC1maXJtd2FyZV9naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtZmlybXdhcmUvbGludXgtZmlybXdhcmVfZ2l0LmJiCkBAIC0xODQsNiArMTg0LDggQEAKIAogU1JDX1VSSSA9ICJnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZmlybXdhcmUvbGludXgtZmlybXdhcmUuZ2l0IgogCitVUFNUUkVBTV9WRVJTSU9OX1VOS05PV04gPSAiMSIKKwogUyA9ICIke1dPUktESVJ9L2dpdCIKIAogaW5oZXJpdCBhbGxhcmNoCkBAIC0yMTYsNyArMjE4LDYgQEAKIAogCSMgZml4dXAgd2wxMnh4IGxvY2F0aW9uLCBhZnRlciAyLjYuMzcgdGhlIGtlcm5lbCBzZWFyY2hlcyBhIGRpZmZlcmVudCBsb2NhdGlvbiBmb3IgaXQKIAkoIGNkICR7RH0ke25vbmFyY2hfYmFzZV9saWJkaXJ9L2Zpcm13YXJlIDsgbG4gLXNmIHRpLWNvbm5lY3Rpdml0eS8qIC4gKQotCiB9CiAKIApAQCAtMjQ3LDcgKzI0OCw3IEBACiAgICAgICAgICAgICAgJHtQTn0taXdsd2lmaS02MDUwLTQgJHtQTn0taXdsd2lmaS02MDUwLTUgXAogICAgICAgICAgICAgICR7UE59LWl3bHdpZmktNzI2MCBcCiAgICAgICAgICAgICAgJHtQTn0taXdsd2lmaS03MjY1IFwKLSAgICAgICAgICAgICAke1BOfS1pd2x3aWZpLTcyNjVkICR7UE59LWl3bHdpZmktODI2NSBcCisgICAgICAgICAgICAgJHtQTn0taXdsd2lmaS03MjY1ZCAke1BOfS1pd2x3aWZpLTgwMDBjICR7UE59LWl3bHdpZmktODI2NSBcCiAgICAgICAgICAgICAgJHtQTn0taXdsd2lmaS1taXNjIFwKICAgICAgICAgICAgICAke1BOfS1pYnQtbGljZW5zZSAke1BOfS1pYnQgJHtQTn0taWJ0LW1pc2MgXAogICAgICAgICAgICAgICR7UE59LWlidC0xMS01ICR7UE59LWlidC0xMi0xNiAke1BOfS1pYnQtaHctMzctNyAke1BOfS1pYnQtaHctMzctOCBcCkBAIC02MTksNiArNjIwLDcgQEAKIEZJTEVTXyR7UE59LWl3bHdpZmktNzI2MCAgID0gIiR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vZmlybXdhcmUvaXdsd2lmaS03MjYwLSoudWNvZGUiCiBGSUxFU18ke1BOfS1pd2x3aWZpLTcyNjUgICA9ICIke25vbmFyY2hfYmFzZV9saWJkaXJ9L2Zpcm13YXJlL2l3bHdpZmktNzI2NS0qLnVjb2RlIgogRklMRVNfJHtQTn0taXdsd2lmaS03MjY1ZCAgID0gIiR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vZmlybXdhcmUvaXdsd2lmaS03MjY1RC0qLnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS04MDAwYyAgID0gIiR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vZmlybXdhcmUvaXdsd2lmaS04MDAwQy0qLnVjb2RlIgogRklMRVNfJHtQTn0taXdsd2lmaS04MjY1ICAgPSAiJHtub25hcmNoX2Jhc2VfbGliZGlyfS9maXJtd2FyZS9pd2x3aWZpLTgyNjUtKi51Y29kZSIKIEZJTEVTXyR7UE59LWl3bHdpZmktbWlzYyAgID0gIiR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vZmlybXdhcmUvaXdsd2lmaS0qLnVjb2RlIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzXzQuMTAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzXzQuMTAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5MjYyNzguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVyc180LjEwLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotcmVxdWlyZSBsaW51eC1saWJjLWhlYWRlcnMuaW5jCi0KLVNSQ19VUklfYXBwZW5kX2xpYmMtbXVzbCA9ICJcCi0gICAgZmlsZTovLzAwMDEtbGliYy1jb21wYXQuaC1maXgtc29tZS1pc3N1ZXMtYXJpc2luZy1mcm9tLWluNi5oLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAwMi1saWJjLWNvbXBhdC5oLXByZXZlbnQtcmVkZWZpbml0aW9uLW9mLXN0cnVjdC1ldGhoZHIucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDAzLXJlbW92ZS1pbmNsdXNpb24tb2Ytc3lzaW5mby5oLWluLWtlcm5lbC5oLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAwMS1saWJjLWNvbXBhdC5oLW11c2wtX2RvZXNfLWRlZmluZS1JRkZfTE9XRVJfVVAtRE9STUFOLnBhdGNoIFwKLSAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gImI1ZTdmNmI5YjJmZTFiNmNjN2JjNTZhM2EwYmZjMDkwIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNjOTVkOWYwNDliZDA4NWU1YzM0NmQyYzc3ZjA2M2I4NDI1ZjE5MTQ2MGZjZDNhZTlmZTdlOTRlMDQ3N2RjNGIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzXzQuMTIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzXzQuMTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBkMGFiZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnNfNC4xMi5iYgpAQCAtMCwwICsxLDExIEBACityZXF1aXJlIGxpbnV4LWxpYmMtaGVhZGVycy5pbmMKKworU1JDX1VSSV9hcHBlbmRfbGliYy1tdXNsID0gIlwKKyAgICBmaWxlOi8vMDAwMS1saWJjLWNvbXBhdC5oLWZpeC1zb21lLWlzc3Vlcy1hcmlzaW5nLWZyb20taW42LmgucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAyLWxpYmMtY29tcGF0LmgtcHJldmVudC1yZWRlZmluaXRpb24tb2Ytc3RydWN0LWV0aGhkci5wYXRjaCBcCisgICAgZmlsZTovLzAwMDMtcmVtb3ZlLWluY2x1c2lvbi1vZi1zeXNpbmZvLmgtaW4ta2VybmVsLmgucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAxLWxpYmMtY29tcGF0LmgtbXVzbC1fZG9lc18tZGVmaW5lLUlGRl9MT1dFUl9VUC1ET1JNQU4ucGF0Y2ggXAorICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmM0NTQxNTdlMmQwMjRkNDAxYTYwOTA1ZDY0ODFjNmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTQ1YzNiZWNkNGQwOGNlNDExYzE0NjI4YTk0OWQwOGUyNDMzZDhjZGVjYTkyMDM2YzcwMTM5ODBlOTM4NThhYiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1kZXZzcmMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtZGV2c3JjLmJiCmluZGV4IDcwMDQyNjEuLmMxYjViNzcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1kZXZzcmMuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWRldnNyYy5iYgpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICBjZCAke0J9CiAgICAgICAgIGZpbmQgLiAtdHlwZSBkIC1uYW1lICcuZ2l0KicgLXBydW5lIC1vIC1wYXRoICcuZGVidWcnIC1wcnVuZSAtbyAtdHlwZSBmIC1wcmludDAgfCBjcGlvIC0tbnVsbCAtcGRsdSAka2VybmVsZGlyCiAgICAgICAgIGNkICR7U30KLSAgICAgICAgZmluZCAuIC10eXBlIGQgLW5hbWUgJy5naXQqJyAtcHJ1bmUgLW8gLXR5cGUgZiAtcHJpbnQwIHwgY3BpbyAtLW51bGwgLXBkbHUgJGtlcm5lbGRpcgorCWZpbmQgLiAtdHlwZSBkIC1uYW1lICcuZ2l0KicgLXBydW5lIC1vIC10eXBlIGQgLW5hbWUgJy5rZXJuZWwtbWV0YScgLXBydW5lIC1vIC10eXBlIGYgLXByaW50MCB8IGNwaW8gLS1udWxsIC1wZGx1ICRrZXJuZWxkaXIKIAogICAgICAgICAjIEV4cGxpY2l0bHkgc2V0IEtCVUlMRF9PVVRQVVQgdG8gZW5zdXJlIHRoYXQgdGhlIGltYWdlIGRpcmVjdG9yeSBpcyBjbGVhbmVkIGFuZCBub3QKICAgICAgICAgIyBUaGUgbWFpbiBidWlsZCBhcnRpZmFjdHMuIFdlIGNsZWFuIHRoZSBkaXJlY3RvcnkgdG8gYXZvaWQgUUEgZXJyb3JzIG9uIG1pc21hdGNoZWQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR0Yi5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdGIuaW5jCmluZGV4IDAxNzRjODAuLmYxOTEyNzcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR0Yi5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtZHRiLmluYwpAQCAtMSw5MSArMSwzIEBACi0jIFN1cHBvcnQgZm9yIGRldmljZSB0cmVlIGdlbmVyYXRpb24KLUZJTEVTX2tlcm5lbC1kZXZpY2V0cmVlID0gIi8ke0tFUk5FTF9JTUFHRURFU1R9L2RldmljZXRyZWUqIgotCi1QQUNLQUdFX1dSSVRFX0RFUFMgKz0gInZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcy1uYXRpdmUiCi0KLXB5dGhvbiBfX2Fub255bW91cyAoKSB7Ci0gICAgZC5hcHBlbmRWYXIoIlBBQ0tBR0VTIiwgIiBrZXJuZWwtZGV2aWNldHJlZSIpCi19Ci0KLW5vcm1hbGl6ZV9kdGIgKCkgewotCURUQj0iJDEiCi0JaWYgZWNobyAke0RUQn0gfCBncmVwIC1xICcvZHRzLyc7IHRoZW4KLQkJYmJ3YXJuICIke0RUQn0gY29udGFpbnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgdGhlIGR0cyBmaWxlLCBidXQgb25seSB0aGUgZHRiIG5hbWUgc2hvdWxkIGJlIHVzZWQuIgotCQlEVEI9YGJhc2VuYW1lICR7RFRCfSB8IHNlZCAncyxcLmR0cyQsLmR0YixnJ2AKLQlmaQotCWVjaG8gIiR7RFRCfSIKLX0KLQotZ2V0X3JlYWxfZHRiX3BhdGhfaW5fa2VybmVsICgpIHsKLQlEVEI9IiQxIgotCURUQl9QQVRIPSIke0J9L2FyY2gvJHtBUkNIfS9ib290L2R0cy8ke0RUQn0iCi0JaWYgWyAhIC1lICIke0RUQl9QQVRIfSIgXTsgdGhlbgotCQlEVEJfUEFUSD0iJHtCfS9hcmNoLyR7QVJDSH0vYm9vdC8ke0RUQn0iCi0JZmkKLQllY2hvICIke0RUQl9QQVRIfSIKLX0KLQotZG9fY29tcGlsZV9hcHBlbmQoKSB7Ci0JZm9yIERUQiBpbiAke0tFUk5FTF9ERVZJQ0VUUkVFfTsgZG8KLQkJRFRCPWBub3JtYWxpemVfZHRiICIke0RUQn0iYAotCQlvZV9ydW5tYWtlICR7RFRCfQotCWRvbmUKLX0KLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0JZm9yIERUQiBpbiAke0tFUk5FTF9ERVZJQ0VUUkVFfTsgZG8KLQkJRFRCPWBub3JtYWxpemVfZHRiICIke0RUQn0iYAotCQlEVEJfRVhUPSR7RFRCIyMqLn0KLQkJRFRCX0JBU0VfTkFNRT1gYmFzZW5hbWUgJHtEVEJ9IC4iJHtEVEJfRVhUfSJgCi0JCWZvciB0eXBlIGluICR7S0VSTkVMX0lNQUdFVFlQRV9GT1JfTUFLRX07IGRvCi0JCQlzeW1saW5rX25hbWU9JHt0eXBlfSItIiR7S0VSTkVMX0lNQUdFX1NZTUxJTktfTkFNRX0KLQkJCURUQl9TWU1MSU5LX05BTUU9YGVjaG8gJHtzeW1saW5rX25hbWV9IHwgc2VkICJzLyR7TUFDSElORX0vJHtEVEJfQkFTRV9OQU1FfS9nImAKLQkJCURUQl9QQVRIPWBnZXRfcmVhbF9kdGJfcGF0aF9pbl9rZXJuZWwgIiR7RFRCfSJgCi0JCQlpbnN0YWxsIC1tIDA2NDQgJHtEVEJfUEFUSH0gJHtEfS8ke0tFUk5FTF9JTUFHRURFU1R9L2RldmljZXRyZWUtJHtEVEJfU1lNTElOS19OQU1FfS4ke0RUQl9FWFR9Ci0JCWRvbmUKLQlkb25lCi19Ci0KLWRvX2RlcGxveV9hcHBlbmQoKSB7Ci0JZm9yIERUQiBpbiAke0tFUk5FTF9ERVZJQ0VUUkVFfTsgZG8KLQkJRFRCPWBub3JtYWxpemVfZHRiICIke0RUQn0iYAotCQlEVEJfRVhUPSR7RFRCIyMqLn0KLQkJRFRCX0JBU0VfTkFNRT1gYmFzZW5hbWUgJHtEVEJ9IC4iJHtEVEJfRVhUfSJgCi0JCWZvciB0eXBlIGluICR7S0VSTkVMX0lNQUdFVFlQRV9GT1JfTUFLRX07IGRvCi0JCQliYXNlX25hbWU9JHt0eXBlfSItIiR7S0VSTkVMX0lNQUdFX0JBU0VfTkFNRX0KLQkJCXN5bWxpbmtfbmFtZT0ke3R5cGV9Ii0iJHtLRVJORUxfSU1BR0VfU1lNTElOS19OQU1FfQotCQkJRFRCX05BTUU9YGVjaG8gJHtiYXNlX25hbWV9IHwgc2VkICJzLyR7TUFDSElORX0vJHtEVEJfQkFTRV9OQU1FfS9nImAKLQkJCURUQl9TWU1MSU5LX05BTUU9YGVjaG8gJHtzeW1saW5rX25hbWV9IHwgc2VkICJzLyR7TUFDSElORX0vJHtEVEJfQkFTRV9OQU1FfS9nImAKLQkJCURUQl9QQVRIPWBnZXRfcmVhbF9kdGJfcGF0aF9pbl9rZXJuZWwgIiR7RFRCfSJgCi0JCQlpbnN0YWxsIC1kICR7REVQTE9ZRElSfQotCQkJaW5zdGFsbCAtbSAwNjQ0ICR7RFRCX1BBVEh9ICR7REVQTE9ZRElSfS8ke0RUQl9OQU1FfS4ke0RUQl9FWFR9Ci0JCQlsbiAtc2YgJHtEVEJfTkFNRX0uJHtEVEJfRVhUfSAke0RFUExPWURJUn0vJHtEVEJfU1lNTElOS19OQU1FfS4ke0RUQl9FWFR9Ci0JCWRvbmUKLQlkb25lCi19Ci0KLXBrZ19wb3N0aW5zdF9rZXJuZWwtZGV2aWNldHJlZSAoKSB7Ci0JY2QgLyR7S0VSTkVMX0lNQUdFREVTVH0KLQlmb3IgRFRCIGluICR7S0VSTkVMX0RFVklDRVRSRUV9OyBkbwotCQlmb3IgdHlwZSBpbiAke0tFUk5FTF9JTUFHRVRZUEVfRk9SX01BS0V9OyBkbwotCQkJc3ltbGlua19uYW1lPSR7dHlwZX0iLSIke0tFUk5FTF9JTUFHRV9TWU1MSU5LX05BTUV9Ci0JCQlEVEJfRVhUPSR7RFRCIyMqLn0KLQkJCURUQl9CQVNFX05BTUU9YGJhc2VuYW1lICR7RFRCfSAuIiR7RFRCX0VYVH0iYAotCQkJRFRCX1NZTUxJTktfTkFNRT1gZWNobyAke3N5bWxpbmtfbmFtZX0gfCBzZWQgInMvJHtNQUNISU5FfS8ke0RUQl9CQVNFX05BTUV9L2ciYAotCQkJdXBkYXRlLWFsdGVybmF0aXZlcyAtLWluc3RhbGwgLyR7S0VSTkVMX0lNQUdFREVTVH0vJHtEVEJfQkFTRV9OQU1FfS4ke0RUQl9FWFR9ICR7RFRCX0JBU0VfTkFNRX0uJHtEVEJfRVhUfSBkZXZpY2V0cmVlLSR7RFRCX1NZTUxJTktfTkFNRX0uJHtEVEJfRVhUfSAke0tFUk5FTF9QUklPUklUWX0gfHwgdHJ1ZQotCQlkb25lCi0JZG9uZQotfQotCi1wa2dfcG9zdHJtX2tlcm5lbC1kZXZpY2V0cmVlICgpIHsKLQljZCAvJHtLRVJORUxfSU1BR0VERVNUfQotCWZvciBEVEIgaW4gJHtLRVJORUxfREVWSUNFVFJFRX07IGRvCi0JCWZvciB0eXBlIGluICR7S0VSTkVMX0lNQUdFVFlQRV9GT1JfTUFLRX07IGRvCi0JCQlzeW1saW5rX25hbWU9JHt0eXBlfSItIiR7S0VSTkVMX0lNQUdFX1NZTUxJTktfTkFNRX0KLQkJCURUQl9FWFQ9JHtEVEIjIyoufQotCQkJRFRCX0JBU0VfTkFNRT1gYmFzZW5hbWUgJHtEVEJ9IC4iJHtEVEJfRVhUfSJgCi0JCQlEVEJfU1lNTElOS19OQU1FPWBlY2hvICR7c3ltbGlua19uYW1lfSB8IHNlZCAicy8ke01BQ0hJTkV9LyR7RFRCX0JBU0VfTkFNRX0vZyJgCi0JCQl1cGRhdGUtYWx0ZXJuYXRpdmVzIC0tcmVtb3ZlICR7RFRCX0JBU0VfTkFNRX0uJHtEVEJfRVhUfSBkZXZpY2V0cmVlLSR7RFRCX1NZTUxJTktfTkFNRX0uJHtEVEJfRVhUfSAke0tFUk5FTF9QUklPUklUWX0gfHwgdHJ1ZQotCQlkb25lCi0JZG9uZQorcHl0aG9uKCkgeworICAgIGJiLndhcm4oIllvdSBhcmUgdXNpbmcgdGhlIGxpbnV4LWR0Yi5pbmMgd2hpY2ggaXMgZGVwcmVjYXRlZC4gWW91IGNhbiBzYWZlbHkgcmVtb3ZlIGl0IGFzIHRoZSBEZXZpY2UgVHJlZSBzdXBwb3J0IGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCB3aGVuIEtFUk5FTF9ERVZJQ0VUUkVFIGlzIHNldC4iKQogfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtZHVtbXkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdW1teS5iYgppbmRleCA5OTRhYzc0Li5lMWM3Zjc2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdW1teS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdW1teS5iYgpAQCAtMTMsMTAgKzEzLDE0IEBACiBQQUNLQUdFU19EWU5BTUlDICs9ICJea2VybmVsLWltYWdlLS4qIgogUEFDS0FHRVNfRFlOQU1JQyArPSAiXmtlcm5lbC1maXJtd2FyZS0uKiIKIAotUEFDS0FHRVMgKz0gImtlcm5lbC1tb2R1bGVzIgorUEFDS0FHRVMgKz0gImtlcm5lbC1tb2R1bGVzIGtlcm5lbC12bWxpbnV4IgogRklMRVNfa2VybmVsLW1vZHVsZXMgPSAiIgogQUxMT1dfRU1QVFlfa2VybmVsLW1vZHVsZXMgPSAiMSIKIERFU0NSSVBUSU9OX2tlcm5lbC1tb2R1bGVzID0gIktlcm5lbCBtb2R1bGVzIG1ldGEgcGFja2FnZSIKK0ZJTEVTX2tlcm5lbC12bWxpbnV4ID0gIiIKK0FMTE9XX0VNUFRZX2tlcm5lbC12bWxpbnV4ID0gIjEiCitERVNDUklQVElPTl9rZXJuZWwtdm1saW51eCA9ICJLZXJuZWwgdm1saW51eCBtZXRhIHBhY2thZ2UiCisKIAogSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiCmluZGV4IGJmNjdmODEuLjU4NTJiNDIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmIKQEAgLTI4LDcgKzI4LDcgQEAKIFNSQ1JFVl9tYWNoaW5lID89ICcke0BvZS51dGlscy5jb25kaXRpb25hbCgiUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsIiwgImxpbnV4LXlvY3RvLWRldiIsICIke0FVVE9SRVZ9IiwgIjI5NTk0NDA0ZDdmZTczY2Q4MGVhYTRlZThjNDNkY2M1Mzk3MGM2MGUiLCBkKX0nCiBTUkNSRVZfbWV0YSA/PSAnJHtAb2UudXRpbHMuY29uZGl0aW9uYWwoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCIsICJsaW51eC15b2N0by1kZXYiLCAiJHtBVVRPUkVWfSIsICIyOTU5NDQwNGQ3ZmU3M2NkODBlYWE0ZWU4YzQzZGNjNTM5NzBjNjBlIiwgZCl9JwogCi1MSU5VWF9WRVJTSU9OID89ICI0LjExLXJjKyIKK0xJTlVYX1ZFUlNJT04gPz0gIjQuMTItcmMrIgogTElOVVhfVkVSU0lPTl9FWFRFTlNJT04gPz0gIi15b2N0b2Rldi0ke0xJTlVYX0tFUk5FTF9UWVBFfSIKIFBWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzQuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzQuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgyNDY4YS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF80LjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi1LQlJBTkNIID89ICJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiCi0KLXJlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCi0KLSMgU2tpcCBwcm9jZXNzaW5nIG9mIHRoaXMgcmVjaXBlIGlmIGl0IGlzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBhcyB0aGUKLSMgUFJFRkVSUkVEX1BST1ZJREVSIGZvciB2aXJ0dWFsL2tlcm5lbC4gVGhpcyBhdm9pZHMgZXJyb3JzIHdoZW4gdHJ5aW5nCi0jIHRvIGJ1aWxkIG11bHRpcGxlIHZpcnR1YWwva2VybmVsIHByb3ZpZGVycywgZS5nLiBhcyBkZXBlbmRlbmN5IG9mCi0jIGNvcmUtaW1hZ2UtcnQtc2RrLCBjb3JlLWltYWdlLXJ0LgotcHl0aG9uICgpIHsKLSAgICBpZiBkLmdldFZhcigiUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsIikgIT0gImxpbnV4LXlvY3RvLXJ0IjoKLSAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIlNldCBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgdG8gbGludXgteW9jdG8tcnQgdG8gZW5hYmxlIGl0IikKLX0KLQotU1JDUkVWX21hY2hpbmUgPz0gIjhjYzYyYWMzZjI2YmQ2ZGRlNjhhZDJkODYwMjZhMjUyZmU3YWRkNDQiCi1TUkNSRVZfbWV0YSA/PSAiOWY5YzlhNjZlZjM0NTIzNDM1ODZhZGYxNTAxMzc5NjdlOTU1ZDcxYSIKLQotU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by00LjEuZ2l0O2JyYW5jaD0ke0tCUkFOQ0h9O25hbWU9bWFjaGluZSBcCi0gICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tNC4xO2Rlc3RzdWZmaXg9JHtLTUVUQX0iCi0KLUxJTlVYX1ZFUlNJT04gPz0gIjQuMS40MyIKLQotUFYgPSAiJHtMSU5VWF9WRVJTSU9OfStnaXQke1NSQ1BWfSIKLQotS01FVEEgPSAia2VybmVsLW1ldGEiCi1LQ09ORl9CU1BfQVVESVRfTEVWRUwgPSAiMiIKLQotTElOVVhfS0VSTkVMX1RZUEUgPSAicHJlZW1wdC1ydCIKLQotQ09NUEFUSUJMRV9NQUNISU5FID0gIihxZW11eDg2fHFlbXV4ODYtNjR8cWVtdWFybXxxZW11cHBjfHFlbXVtaXBzKSIKLQotIyBGdW5jdGlvbmFsaXR5IGZsYWdzCi1LRVJORUxfRVhUUkFfRkVBVFVSRVMgPz0gImZlYXR1cmVzL25ldGZpbHRlci9uZXRmaWx0ZXIuc2NjIGZlYXR1cmVzL3Rhc2tzdGF0cy90YXNrc3RhdHMuc2NjIgotS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtLRVJORUxfRVhUUkFfRkVBVFVSRVN9IgotS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11YWxsPSIgY2ZnL3ZpcnRpby5zY2MiCi1LRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODY9IiBjZmcvc291bmQuc2NjIGNmZy9wYXJhdmlydF9rdm0uc2NjIgotS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2LTY0PSIgY2ZnL3NvdW5kLnNjYyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzQuMTAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF80LjEwLmJiCmluZGV4IGY5M2Q5NTMuLmZkMzFiZjkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzQuMTAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfNC4xMC5iYgpAQCAtMTIsNyArMTIsNyBAQAogfQogCiBTUkNSRVZfbWFjaGluZSA/PSAiYzFkOGM0NDA4YjhhZWRkODhlZWI2Y2NjODljZTgzNGRkNDFiM2YwOSIKLVNSQ1JFVl9tZXRhID89ICI0MGVlNDhhYzA5OWMwNGY2MGQyYzEzMjAzMWQ5NjI1YTRlMGM0YzllIgorU1JDUkVWX21ldGEgPz0gIjFkOWE4MjAwMTg0YWYyMmY4OTgxZmEyNGIwZTgyYWY0OWM3OTg4ZGQiCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tNC4xMC5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lIFwKICAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by00LjEwO2Rlc3RzdWZmaXg9JHtLTUVUQX0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF80LjEyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfNC4xMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWIwMTU2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfNC4xMi5iYgpAQCAtMCwwICsxLDM4IEBACitLQlJBTkNIID89ICJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiCisKK3JlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCisKKyMgU2tpcCBwcm9jZXNzaW5nIG9mIHRoaXMgcmVjaXBlIGlmIGl0IGlzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBhcyB0aGUKKyMgUFJFRkVSUkVEX1BST1ZJREVSIGZvciB2aXJ0dWFsL2tlcm5lbC4gVGhpcyBhdm9pZHMgZXJyb3JzIHdoZW4gdHJ5aW5nCisjIHRvIGJ1aWxkIG11bHRpcGxlIHZpcnR1YWwva2VybmVsIHByb3ZpZGVycywgZS5nLiBhcyBkZXBlbmRlbmN5IG9mCisjIGNvcmUtaW1hZ2UtcnQtc2RrLCBjb3JlLWltYWdlLXJ0LgorcHl0aG9uICgpIHsKKyAgICBpZiBkLmdldFZhcigiUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsIikgIT0gImxpbnV4LXlvY3RvLXJ0IjoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIlNldCBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgdG8gbGludXgteW9jdG8tcnQgdG8gZW5hYmxlIGl0IikKK30KKworU1JDUkVWX21hY2hpbmUgPz0gIjMzYWExYTRlYTQ0Mzk5ZjEyZGZiMjYxNDZlYTA2ZGI1Y2QwMmNhNjkiCitTUkNSRVZfbWV0YSA/PSAiMTlkODE1ZDVhMzRiZmFhZDk1ZDg3Y2MwOTdjZWYxOGI1OTRkYWFjOCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by00LjEyLmdpdDticmFuY2g9JHtLQlJBTkNIfTtuYW1lPW1hY2hpbmUgXAorICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTQuMTI7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKKworTElOVVhfVkVSU0lPTiA/PSAiNC4xMi4yMCIKKworUFYgPSAiJHtMSU5VWF9WRVJTSU9OfStnaXQke1NSQ1BWfSIKKworS01FVEEgPSAia2VybmVsLW1ldGEiCitLQ09ORl9CU1BfQVVESVRfTEVWRUwgPSAiMiIKKworTElOVVhfS0VSTkVMX1RZUEUgPSAicHJlZW1wdC1ydCIKKworQ09NUEFUSUJMRV9NQUNISU5FID0gIihxZW11eDg2fHFlbXV4ODYtNjR8cWVtdWFybXxxZW11cHBjfHFlbXVtaXBzKSIKKworS0VSTkVMX0RFVklDRVRSRUVfcWVtdWFybSA9ICJ2ZXJzYXRpbGUtcGIuZHRiIgorCisjIEZ1bmN0aW9uYWxpdHkgZmxhZ3MKK0tFUk5FTF9FWFRSQV9GRUFUVVJFUyA/PSAiZmVhdHVyZXMvbmV0ZmlsdGVyL25ldGZpbHRlci5zY2MgZmVhdHVyZXMvdGFza3N0YXRzL3Rhc2tzdGF0cy5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0tFUk5FTF9FWFRSQV9GRUFUVVJFU30iCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXVhbGw9IiBjZmcvdmlydGlvLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Nj0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODYtNjQ9IiBjZmcvc291bmQuc2NjIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfNC40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfNC40LmJiCmluZGV4IDI1ZDg4ODMuLjk3NTM4ZTIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzQuNC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF80LjQuYmIKQEAgLTExLDEzICsxMSwxMyBAQAogICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiU2V0IFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCB0byBsaW51eC15b2N0by1ydCB0byBlbmFibGUgaXQiKQogfQogCi1TUkNSRVZfbWFjaGluZSA/PSAiMWU2OTFkYjdhZjY0MmZmZjAyMjJhMWYxZDFlOTA0M2MxNzI2OTlkNSIKLVNSQ1JFVl9tZXRhID89ICI4MDRkMmIzMTY0ZWMyNWVkNTE5ZmQ2OTVkZTlhYTA5MDg0NjBjOTJlIgorU1JDUkVWX21hY2hpbmUgPz0gImQ1ZWZlZWViOTI4YTAxMTFmYzE4N2ZkMWU4ZDAzZDJlNGUzNWQ0YTAiCitTUkNSRVZfbWV0YSA/PSAiYjE0OWQxNGNjYWU4MzQ5YWIzM2UxMDFmNmFmMjMzYTEyZjRiMTdiYSIKIAogU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by00LjQuZ2l0O2JyYW5jaD0ke0tCUkFOQ0h9O25hbWU9bWFjaGluZSBcCiAgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tNC40O2Rlc3RzdWZmaXg9JHtLTUVUQX0iCiAKLUxJTlVYX1ZFUlNJT04gPz0gIjQuNC44NyIKK0xJTlVYX1ZFUlNJT04gPz0gIjQuNC4xMTMiCiAKIFBWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzQuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzQuOS5iYgppbmRleCA2NzM0ZGMwLi41YzAxNmVkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF80LjkuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfNC45LmJiCkBAIC0xMSwxMyArMTEsMTMgQEAKICAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIlNldCBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgdG8gbGludXgteW9jdG8tcnQgdG8gZW5hYmxlIGl0IikKIH0KIAotU1JDUkVWX21hY2hpbmUgPz0gIjA4MTdhN2IzYTg1M2QxYmRkM2I4N2EyNjU0ZWQyZWU2MmY2MjQ4MDYiCi1TUkNSRVZfbWV0YSA/PSAiNmFjYWU2ZjcyMDBhZjE3YjNjMmJlNWVjYWIyY2ZmZGM1OWEwMmIzNSIKK1NSQ1JFVl9tYWNoaW5lID89ICI5MGQxZmZhMzZjYmQzNjcyMjYzOGM5N2MxYmI0NmE1ODc0ZGJlMjhlIgorU1JDUkVWX21ldGEgPz0gIjA3NzRlYWNlYTJhN2QzYTE1MDU5NDUzM2I4YzgwZDBjMGJmZGZkZWQiCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tNC45LmdpdDticmFuY2g9JHtLQlJBTkNIfTtuYW1lPW1hY2hpbmUgXAogICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTQuOTtkZXN0c3VmZml4PSR7S01FVEF9IgogCi1MSU5VWF9WRVJTSU9OID89ICI0LjkuNDkiCitMSU5VWF9WRVJTSU9OID89ICI0LjkuODIiCiAKIFBWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzN2VmYjEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1LQlJBTkNIID89ICJzdGFuZGFyZC90aW55L2NvbW1vbi1wYyIKLUxJTlVYX0tFUk5FTF9UWVBFID0gInRpbnkiCi1LQ09ORklHX01PREUgPSAiLS1hbGxub2NvbmZpZyIKLQotcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKLQotTElOVVhfVkVSU0lPTiA/PSAiNC4xLjQzIgotCi1LTUVUQSA9ICJrZXJuZWwtbWV0YSIKLUtDT05GX0JTUF9BVURJVF9MRVZFTCA9ICIyIgotCi1TUkNSRVZfbWFjaGluZSA/PSAiNzgyMTMzZDgxNjZhYzcxZWYxZmZhYmE1OGI3Y2Y4MWVjOWU1MzJhMSIKLVNSQ1JFVl9tZXRhID89ICI5ZjljOWE2NmVmMzQ1MjM0MzU4NmFkZjE1MDEzNzk2N2U5NTVkNzFhIgotCi1QViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgotCi1TUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTQuMS5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lIFwKLSAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by00LjE7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKLQotQ09NUEFUSUJMRV9NQUNISU5FID0gIihxZW11eDg2JCkiCi0KLSMgRnVuY3Rpb25hbGl0eSBmbGFncwotS0VSTkVMX0ZFQVRVUkVTID0gIiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xMC5iYgppbmRleCAzMTM5NmFiLi5iMjIzNDk3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMTAuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEwLmJiCkBAIC0xMCwxNCArMTAsMTQgQEAKIEtDT05GX0JTUF9BVURJVF9MRVZFTCA9ICIyIgogCiBTUkNSRVZfbWFjaGluZSA/PSAiYzFkOGM0NDA4YjhhZWRkODhlZWI2Y2NjODljZTgzNGRkNDFiM2YwOSIKLVNSQ1JFVl9tZXRhID89ICI0MGVlNDhhYzA5OWMwNGY2MGQyYzEzMjAzMWQ5NjI1YTRlMGM0YzllIgorU1JDUkVWX21ldGEgPz0gIjFkOWE4MjAwMTg0YWYyMmY4OTgxZmEyNGIwZTgyYWY0OWM3OTg4ZGQiCiAKIFBWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tNC4xMC5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lIFwKICAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by00LjEwO2Rlc3RzdWZmaXg9JHtLTUVUQX0iCiAKLUNPTVBBVElCTEVfTUFDSElORSA9ICIocWVtdXg4NiQpIgorQ09NUEFUSUJMRV9NQUNISU5FID0gInFlbXV4ODZ8cWVtdXg4Ni02NCIKIAogIyBGdW5jdGlvbmFsaXR5IGZsYWdzCiBLRVJORUxfRkVBVFVSRVMgPSAiIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZjJlMWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMTIuYmIKQEAgLTAsMCArMSwyNSBAQAorS0JSQU5DSCA/PSAic3RhbmRhcmQvdGlueS9jb21tb24tcGMiCitMSU5VWF9LRVJORUxfVFlQRSA9ICJ0aW55IgorS0NPTkZJR19NT0RFID0gIi0tYWxsbm9jb25maWciCisKK3JlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCisKK0xJTlVYX1ZFUlNJT04gPz0gIjQuMTIuMjAiCisKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCisKK1NSQ1JFVl9tYWNoaW5lID89ICI0MDE0NjA1NTY3N2E2OTczMGIyYzM2ZGExYzhjMWI0ZTliYWU3YmIwIgorU1JDUkVWX21ldGEgPz0gIjE5ZDgxNWQ1YTM0YmZhYWQ5NWQ4N2NjMDk3Y2VmMThiNTk0ZGFhYzgiCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tNC4xMi5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lIFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by00LjEyO2Rlc3RzdWZmaXg9JHtLTUVUQX0iCisKK0NPTVBBVElCTEVfTUFDSElORSA9ICJxZW11eDg2fHFlbXV4ODYtNjQiCisKKyMgRnVuY3Rpb25hbGl0eSBmbGFncworS0VSTkVMX0ZFQVRVUkVTID0gIiIKKworS0VSTkVMX0RFVklDRVRSRUVfcWVtdWFybSA9ICJ2ZXJzYXRpbGUtcGIuZHRiIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuNC5iYgppbmRleCA1MGI5YTU2Li44YTk4MTg5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuNC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuNC5iYgpAQCAtNCwyMCArNCwyMCBAQAogCiByZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYwogCi1MSU5VWF9WRVJTSU9OID89ICI0LjQuODciCitMSU5VWF9WRVJTSU9OID89ICI0LjQuMTEzIgogCiBLTUVUQSA9ICJrZXJuZWwtbWV0YSIKIEtDT05GX0JTUF9BVURJVF9MRVZFTCA9ICIyIgogCi1TUkNSRVZfbWFjaGluZSA/PSAiYjcxYzdiNzg2YWVkMjZjMGExZTRlY2E2NmYxZDg3NGVjMDE3ZDY5OSIKLVNSQ1JFVl9tZXRhID89ICI4MDRkMmIzMTY0ZWMyNWVkNTE5ZmQ2OTVkZTlhYTA5MDg0NjBjOTJlIgorU1JDUkVWX21hY2hpbmUgPz0gIjRkMzFhOGI3NjYxNTA5ZmYxMDQ0YWJjZjkwNTA3NTBjYzI0NzhlMjAiCitTUkNSRVZfbWV0YSA/PSAiYjE0OWQxNGNjYWU4MzQ5YWIzM2UxMDFmNmFmMjMzYTEyZjRiMTdiYSIKIAogUFYgPSAiJHtMSU5VWF9WRVJTSU9OfStnaXQke1NSQ1BWfSIKIAogU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by00LjQuZ2l0O2JyYW5jaD0ke0tCUkFOQ0h9O25hbWU9bWFjaGluZSBcCiAgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tNC40O2Rlc3RzdWZmaXg9JHtLTUVUQX0iCiAKLUNPTVBBVElCTEVfTUFDSElORSA9ICIocWVtdXg4NiQpIgorQ09NUEFUSUJMRV9NQUNISU5FID0gInFlbXV4ODZ8cWVtdXg4Ni02NCIKIAogIyBGdW5jdGlvbmFsaXR5IGZsYWdzCiBLRVJORUxfRkVBVFVSRVMgPSAiIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjkuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuOS5iYgppbmRleCBlMGM1MjM2Li40ZDQ2ODAyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuOS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuOS5iYgpAQCAtNCwyMCArNCwyMCBAQAogCiByZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYwogCi1MSU5VWF9WRVJTSU9OID89ICI0LjkuNDkiCitMSU5VWF9WRVJTSU9OID89ICI0LjkuODIiCiAKIEtNRVRBID0gImtlcm5lbC1tZXRhIgogS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCiAKLVNSQ1JFVl9tYWNoaW5lID89ICI0ODBlZTU5OWZiOGRmNzEyYzEwZGNmNGI3YWE2Mzk4Yjc5ZjdkNDA0IgotU1JDUkVWX21ldGEgPz0gIjZhY2FlNmY3MjAwYWYxN2IzYzJiZTVlY2FiMmNmZmRjNTlhMDJiMzUiCitTUkNSRVZfbWFjaGluZSA/PSAiZWIzYjIwNzllYTQzYjQ1MWUwNmJlNDQzZjhiYzE0NjczNmY5YzRiYyIKK1NSQ1JFVl9tZXRhID89ICIwNzc0ZWFjZWEyYTdkM2ExNTA1OTQ1MzNiOGM4MGQwYzBiZmRmZGVkIgogCiBQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgogCiBTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTQuOS5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lIFwKICAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by00Ljk7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKIAotQ09NUEFUSUJMRV9NQUNISU5FID0gIihxZW11eDg2JCkiCitDT01QQVRJQkxFX01BQ0hJTkUgPSAicWVtdXg4NnxxZW11eDg2LTY0IgogCiAjIEZ1bmN0aW9uYWxpdHkgZmxhZ3MKIEtFUk5FTF9GRUFUVVJFUyA9ICIiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKaW5kZXggNjM3NTA2YS4uOWMxZjYxYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYwpAQCAtMzMsNyArMzMsOCBAQAogIyBhbmQgaXQgY2FuIGJlIHNwZWNpZmljIHRvIHRoZSBtYWNoaW5lIG9yIHNoYXJlZAogIyBLTUFDSElORSA9ICJVTkRFRklORUQiCiAKLUxJTlVYX0tFUk5FTF9UWVBFID89ICJzdGFuZGFyZCIKKyMgVGhlIGRpc3RybyBvciBsb2NhbC5jb25mIHNob3VsZCBzZXQgdGhpcywgYnV0IGlmIG5vYm9keSBjYXJlcy4uLgorTElOVVhfS0VSTkVMX1RZUEUgPz89ICJzdGFuZGFyZCIKIAogIyBLTUVUQSA/PSAiIgogS0JSQU5DSCA/PSAibWFzdGVyIgpAQCAtNDgsMTIgKzQ5LDExIEBACiBLQ09ORl9CU1BfQVVESVRfTEVWRUwgPz0gIjAiCiBLTUVUQV9BVURJVCA/PSAieWVzIgogCi1MSU5VWF9WRVJTSU9OX0VYVEVOU0lPTiA/PSAiLXlvY3RvLSR7TElOVVhfS0VSTkVMX1RZUEV9IgorTElOVVhfVkVSU0lPTl9FWFRFTlNJT04gPz89ICIteW9jdG8tJHtMSU5VWF9LRVJORUxfVFlQRX0iCiAKICMgUGljayB1cCBzaGFyZWQgZnVuY3Rpb25zCiBpbmhlcml0IGtlcm5lbAogaW5oZXJpdCBrZXJuZWwteW9jdG8KLXJlcXVpcmUgbGludXgtZHRiLmluYwogCiBCID0gIiR7V09SS0RJUn0vbGludXgtJHtQQUNLQUdFX0FSQ0h9LSR7TElOVVhfS0VSTkVMX1RZUEV9LWJ1aWxkIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxNmJjMzIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotS0JSQU5DSCA/PSAic3RhbmRhcmQvYmFzZSIKLQotcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKLQotIyBib2FyZCBzcGVjaWZpYyBicmFuY2hlcwotS0JSQU5DSF9xZW11YXJtICA/PSAic3RhbmRhcmQvYXJtLXZlcnNhdGlsZS05MjZlanMiCi1LQlJBTkNIX3FlbXVhcm02NCA/PSAic3RhbmRhcmQvcWVtdWFybTY0IgotS0JSQU5DSF9xZW11bWlwcyA/PSAic3RhbmRhcmQvbXRpLW1hbHRhMzIiCi1LQlJBTkNIX3FlbXVwcGMgID89ICJzdGFuZGFyZC9xZW11cHBjIgotS0JSQU5DSF9xZW11eDg2ICA/PSAic3RhbmRhcmQvYmFzZSIKLUtCUkFOQ0hfcWVtdXg4Ni02NCA/PSAic3RhbmRhcmQvYmFzZSIKLUtCUkFOQ0hfcWVtdW1pcHM2NCA/PSAic3RhbmRhcmQvbXRpLW1hbHRhNjQiCi0KLVNSQ1JFVl9tYWNoaW5lX3FlbXVhcm0gPz0gIjY0MmU5Yjk1Zjk3ZjhlMDBlZjgxOWJiZmIyZjI4MWMxMDc5YmZiYjEiCi1TUkNSRVZfbWFjaGluZV9xZW11YXJtNjQgPz0gIjc4MjEzM2Q4MTY2YWM3MWVmMWZmYWJhNThiN2NmODFlYzllNTMyYTEiCi1TUkNSRVZfbWFjaGluZV9xZW11bWlwcyA/PSAiNTRkNDU3NWQwZGYxODA1ZTEyN2M1ZmE1OTIwMWNkOTc4ODQ5ZmIzZiIKLVNSQ1JFVl9tYWNoaW5lX3FlbXVwcGMgPz0gIjU4OTA2ZjI3MzdjNjQ0ZTY3YTdjOTc1NGI3ZTM2NjMwMDA1YTAwMTEiCi1TUkNSRVZfbWFjaGluZV9xZW11eDg2ID89ICI3ODIxMzNkODE2NmFjNzFlZjFmZmFiYTU4YjdjZjgxZWM5ZTUzMmExIgotU1JDUkVWX21hY2hpbmVfcWVtdXg4Ni02NCA/PSAiNzgyMTMzZDgxNjZhYzcxZWYxZmZhYmE1OGI3Y2Y4MWVjOWU1MzJhMSIKLVNSQ1JFVl9tYWNoaW5lX3FlbXVtaXBzNjQgPz0gIjAzZjBjMDI5M2FiZmU1MjI2YzJmZGQyMjMyODQ3Njg1NGZhMDEyN2YiCi1TUkNSRVZfbWFjaGluZSA/PSAiNzgyMTMzZDgxNjZhYzcxZWYxZmZhYmE1OGI3Y2Y4MWVjOWU1MzJhMSIKLVNSQ1JFVl9tZXRhID89ICI5ZjljOWE2NmVmMzQ1MjM0MzU4NmFkZjE1MDEzNzk2N2U5NTVkNzFhIgotCi1TUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTQuMS5naXQ7bmFtZT1tYWNoaW5lO2JyYW5jaD0ke0tCUkFOQ0h9OyBcCi0gICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tNC4xO2Rlc3RzdWZmaXg9JHtLTUVUQX0iCi0KLUxJTlVYX1ZFUlNJT04gPz0gIjQuMS40MyIKLQotUFYgPSAiJHtMSU5VWF9WRVJTSU9OfStnaXQke1NSQ1BWfSIKLQotS01FVEEgPSAia2VybmVsLW1ldGEiCi1LQ09ORl9CU1BfQVVESVRfTEVWRUwgPSAiMiIKLQotQ09NUEFUSUJMRV9NQUNISU5FID0gInFlbXVhcm18cWVtdWFybTY0fHFlbXV4ODZ8cWVtdXBwY3xxZW11bWlwc3xxZW11bWlwczY0fHFlbXV4ODYtNjQiCi0KLSMgRnVuY3Rpb25hbGl0eSBmbGFncwotS0VSTkVMX0VYVFJBX0ZFQVRVUkVTID89ICJmZWF0dXJlcy9uZXRmaWx0ZXIvbmV0ZmlsdGVyLnNjYyIKLUtFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7S0VSTkVMX0VYVFJBX0ZFQVRVUkVTfSIKLUtFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdWFsbD0iIGNmZy92aXJ0aW8uc2NjIgotS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKLUtFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Ni02ND0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCi1LRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIiBjZmcveDMyLnNjYyIsICIiICxkKX0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEwLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xMC5iYgppbmRleCA3ZmNjNzUzLi4xZmUzY2NhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEwLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMTAuYmIKQEAgLTE5LDcgKzE5LDcgQEAKIFNSQ1JFVl9tYWNoaW5lX3FlbXV4ODYtNjQgPz0gImMxZDhjNDQwOGI4YWVkZDg4ZWViNmNjYzg5Y2U4MzRkZDQxYjNmMDkiCiBTUkNSRVZfbWFjaGluZV9xZW11bWlwczY0ID89ICI4YmIxMzVlNzEwMzdjNDYxNzViYmNjN2FjZjM4NzMwOWIyZTE3MTMzIgogU1JDUkVWX21hY2hpbmUgPz0gImMxZDhjNDQwOGI4YWVkZDg4ZWViNmNjYzg5Y2U4MzRkZDQxYjNmMDkiCi1TUkNSRVZfbWV0YSA/PSAiNDBlZTQ4YWMwOTljMDRmNjBkMmMxMzIwMzFkOTYyNWE0ZTBjNGM5ZSIKK1NSQ1JFVl9tZXRhID89ICIxZDlhODIwMDE4NGFmMjJmODk4MWZhMjRiMGU4MmFmNDljNzk4OGRkIgogCiBTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTQuMTAuZ2l0O25hbWU9bWFjaGluZTticmFuY2g9JHtLQlJBTkNIfTsgXAogICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTQuMTA7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMTIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMGI4MmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEyLmJiCkBAIC0wLDAgKzEsNDQgQEAKK0tCUkFOQ0ggPz0gInN0YW5kYXJkL2Jhc2UiCisKK3JlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCisKKyMgYm9hcmQgc3BlY2lmaWMgYnJhbmNoZXMKK0tCUkFOQ0hfcWVtdWFybSAgPz0gInN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIgorS0JSQU5DSF9xZW11YXJtNjQgPz0gInN0YW5kYXJkL3FlbXVhcm02NCIKK0tCUkFOQ0hfcWVtdW1pcHMgPz0gInN0YW5kYXJkL210aS1tYWx0YTMyIgorS0JSQU5DSF9xZW11cHBjICA/PSAic3RhbmRhcmQvcWVtdXBwYyIKK0tCUkFOQ0hfcWVtdXg4NiAgPz0gInN0YW5kYXJkL2Jhc2UiCitLQlJBTkNIX3FlbXV4ODYtNjQgPz0gInN0YW5kYXJkL2Jhc2UiCitLQlJBTkNIX3FlbXVtaXBzNjQgPz0gInN0YW5kYXJkL210aS1tYWx0YTY0IgorCitTUkNSRVZfbWFjaGluZV9xZW11YXJtID89ICI2ZTVhOTlkYjNhNDk1ZTAyMzA0MWEzMGQ0MzI2MjA0Nzc5NWU2NDVhIgorU1JDUkVWX21hY2hpbmVfcWVtdWFybTY0ID89ICI0MDE0NjA1NTY3N2E2OTczMGIyYzM2ZGExYzhjMWI0ZTliYWU3YmIwIgorU1JDUkVWX21hY2hpbmVfcWVtdW1pcHMgPz0gIjQzZGM0N2Y5MDAwN2Q1NGM3MDg2Y2MwM2IyOGU5NDZlMzAxMzVmMWMiCitTUkNSRVZfbWFjaGluZV9xZW11cHBjID89ICI0MDE0NjA1NTY3N2E2OTczMGIyYzM2ZGExYzhjMWI0ZTliYWU3YmIwIgorU1JDUkVWX21hY2hpbmVfcWVtdXg4NiA/PSAiNDAxNDYwNTU2NzdhNjk3MzBiMmMzNmRhMWM4YzFiNGU5YmFlN2JiMCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXV4ODYtNjQgPz0gIjQwMTQ2MDU1Njc3YTY5NzMwYjJjMzZkYTFjOGMxYjRlOWJhZTdiYjAiCitTUkNSRVZfbWFjaGluZV9xZW11bWlwczY0ID89ICI2OWYwYzk2ZDhlNDdiMGRjY2ZiMzc0ODA5ZDcyOWYwMDQyYzc3ODY4IgorU1JDUkVWX21hY2hpbmUgPz0gIjQwMTQ2MDU1Njc3YTY5NzMwYjJjMzZkYTFjOGMxYjRlOWJhZTdiYjAiCitTUkNSRVZfbWV0YSA/PSAiMTlkODE1ZDVhMzRiZmFhZDk1ZDg3Y2MwOTdjZWYxOGI1OTRkYWFjOCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by00LjEyLmdpdDtuYW1lPW1hY2hpbmU7YnJhbmNoPSR7S0JSQU5DSH07IFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by00LjEyO2Rlc3RzdWZmaXg9JHtLTUVUQX0iCisKK0xJTlVYX1ZFUlNJT04gPz0gIjQuMTIuMjAiCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCisKK0tFUk5FTF9ERVZJQ0VUUkVFX3FlbXVhcm0gPSAidmVyc2F0aWxlLXBiLmR0YiIKKworQ09NUEFUSUJMRV9NQUNISU5FID0gInFlbXVhcm18cWVtdWFybTY0fHFlbXV4ODZ8cWVtdXBwY3xxZW11bWlwc3xxZW11bWlwczY0fHFlbXV4ODYtNjQiCisKKyMgRnVuY3Rpb25hbGl0eSBmbGFncworS0VSTkVMX0VYVFJBX0ZFQVRVUkVTID89ICJmZWF0dXJlcy9uZXRmaWx0ZXIvbmV0ZmlsdGVyLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7S0VSTkVMX0VYVFJBX0ZFQVRVUkVTfSIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdWFsbD0iIGNmZy92aXJ0aW8uc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Ni02ND0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIiBjZmcveDMyLnNjYyIsICIiICxkKX0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjQuYmIKaW5kZXggZDMwMGU2OS4uOTdjMTZkNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC40LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuNC5iYgpAQCAtMTEsMjAgKzExLDIwIEBACiBLQlJBTkNIX3FlbXV4ODYtNjQgPz0gInN0YW5kYXJkL2Jhc2UiCiBLQlJBTkNIX3FlbXVtaXBzNjQgPz0gInN0YW5kYXJkL210aS1tYWx0YTY0IgogCi1TUkNSRVZfbWFjaGluZV9xZW11YXJtID89ICI4NDBlMmMwMmRkZTk4ZWU5YzU4NGNhY2RkNWJiMDgxMmU5ZGNkMDE2IgotU1JDUkVWX21hY2hpbmVfcWVtdWFybTY0ID89ICJiNzFjN2I3ODZhZWQyNmMwYTFlNGVjYTY2ZjFkODc0ZWMwMTdkNjk5IgotU1JDUkVWX21hY2hpbmVfcWVtdW1pcHMgPz0gIjI3YTU0N2ZlNzdiMDVhZTYzYzNiOTczYTAyOWMzOTMzZWY2MmMxNjQiCi1TUkNSRVZfbWFjaGluZV9xZW11cHBjID89ICJiNzFjN2I3ODZhZWQyNmMwYTFlNGVjYTY2ZjFkODc0ZWMwMTdkNjk5IgotU1JDUkVWX21hY2hpbmVfcWVtdXg4NiA/PSAiYjcxYzdiNzg2YWVkMjZjMGExZTRlY2E2NmYxZDg3NGVjMDE3ZDY5OSIKLVNSQ1JFVl9tYWNoaW5lX3FlbXV4ODYtNjQgPz0gImI3MWM3Yjc4NmFlZDI2YzBhMWU0ZWNhNjZmMWQ4NzRlYzAxN2Q2OTkiCi1TUkNSRVZfbWFjaGluZV9xZW11bWlwczY0ID89ICI3ZTMzM2MyMjNiNTY4NzA0Y2MzMzAzYjJlOTIyZmY4NWEyYThmN2VmIgotU1JDUkVWX21hY2hpbmUgPz0gImI3MWM3Yjc4NmFlZDI2YzBhMWU0ZWNhNjZmMWQ4NzRlYzAxN2Q2OTkiCi1TUkNSRVZfbWV0YSA/PSAiODA0ZDJiMzE2NGVjMjVlZDUxOWZkNjk1ZGU5YWEwOTA4NDYwYzkyZSIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVhcm0gPz0gIjQwMGMwZjM5Yjk1NGNkOGZmZmRmNTNlNmVjOTc4NTJiNzNmZWE3YWYiCitTUkNSRVZfbWFjaGluZV9xZW11YXJtNjQgPz0gIjRkMzFhOGI3NjYxNTA5ZmYxMDQ0YWJjZjkwNTA3NTBjYzI0NzhlMjAiCitTUkNSRVZfbWFjaGluZV9xZW11bWlwcyA/PSAiZmIwM2E5NDcyMzY3YjZjMTc3NzI5YWM2MzEzMjZhYWZkNWQxN2M5MiIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVwcGMgPz0gIjRkMzFhOGI3NjYxNTA5ZmYxMDQ0YWJjZjkwNTA3NTBjYzI0NzhlMjAiCitTUkNSRVZfbWFjaGluZV9xZW11eDg2ID89ICI0ZDMxYThiNzY2MTUwOWZmMTA0NGFiY2Y5MDUwNzUwY2MyNDc4ZTIwIgorU1JDUkVWX21hY2hpbmVfcWVtdXg4Ni02NCA/PSAiNGQzMWE4Yjc2NjE1MDlmZjEwNDRhYmNmOTA1MDc1MGNjMjQ3OGUyMCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVtaXBzNjQgPz0gIjI2YjhiYTE4NmE2ZDM5NzI4ZmMxNTEwYmQyMjY0MTEwYzc1ODQyZjUiCitTUkNSRVZfbWFjaGluZSA/PSAiNGQzMWE4Yjc2NjE1MDlmZjEwNDRhYmNmOTA1MDc1MGNjMjQ3OGUyMCIKK1NSQ1JFVl9tZXRhID89ICJiMTQ5ZDE0Y2NhZTgzNDlhYjMzZTEwMWY2YWYyMzNhMTJmNGIxN2JhIgogCiBTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTQuNC5naXQ7bmFtZT1tYWNoaW5lO2JyYW5jaD0ke0tCUkFOQ0h9OyBcCiAgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tNC40O2Rlc3RzdWZmaXg9JHtLTUVUQX0iCiAKLUxJTlVYX1ZFUlNJT04gPz0gIjQuNC44NyIKK0xJTlVYX1ZFUlNJT04gPz0gIjQuNC4xMTMiCiAKIFBWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOS5iYgppbmRleCBkYmU0MGEzLi5hNWExNjVmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjkuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC45LmJiCkBAIC0xMSwyMCArMTEsMjAgQEAKIEtCUkFOQ0hfcWVtdXg4Ni02NCA/PSAic3RhbmRhcmQvYmFzZSIKIEtCUkFOQ0hfcWVtdW1pcHM2NCA/PSAic3RhbmRhcmQvbXRpLW1hbHRhNjQiCiAKLVNSQ1JFVl9tYWNoaW5lX3FlbXVhcm0gPz0gIjhjYWEzNWE3NDc1M2Q0NTE3ODcyMDkzM2YwM2Q4ZDUxNTBhOGZmMTciCi1TUkNSRVZfbWFjaGluZV9xZW11YXJtNjQgPz0gIjQ4MGVlNTk5ZmI4ZGY3MTJjMTBkY2Y0YjdhYTYzOThiNzlmN2Q0MDQiCi1TUkNSRVZfbWFjaGluZV9xZW11bWlwcyA/PSAiZmMyYTNiOWY5MzI3NzlmZGYwNTM2NzVhNWE3M2U4Zjk5MTc1MDdhNSIKLVNSQ1JFVl9tYWNoaW5lX3FlbXVwcGMgPz0gIjQ4MGVlNTk5ZmI4ZGY3MTJjMTBkY2Y0YjdhYTYzOThiNzlmN2Q0MDQiCi1TUkNSRVZfbWFjaGluZV9xZW11eDg2ID89ICI0ODBlZTU5OWZiOGRmNzEyYzEwZGNmNGI3YWE2Mzk4Yjc5ZjdkNDA0IgotU1JDUkVWX21hY2hpbmVfcWVtdXg4Ni02NCA/PSAiNDgwZWU1OTlmYjhkZjcxMmMxMGRjZjRiN2FhNjM5OGI3OWY3ZDQwNCIKLVNSQ1JFVl9tYWNoaW5lX3FlbXVtaXBzNjQgPz0gImFlZTYzOTc4MDA1YzA0ZWE4NTMwOTk3NjRhY2FhMDgxMzBlNjU1NTQiCi1TUkNSRVZfbWFjaGluZSA/PSAiNDgwZWU1OTlmYjhkZjcxMmMxMGRjZjRiN2FhNjM5OGI3OWY3ZDQwNCIKLVNSQ1JFVl9tZXRhID89ICI2YWNhZTZmNzIwMGFmMTdiM2MyYmU1ZWNhYjJjZmZkYzU5YTAyYjM1IgorU1JDUkVWX21hY2hpbmVfcWVtdWFybSA/PSAiMjMzNjllYjdlMDdjODM5ZmE3M2E4YzFlODVhYmEzN2EwN2JmMTRjMSIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVhcm02NCA/PSAiZWIzYjIwNzllYTQzYjQ1MWUwNmJlNDQzZjhiYzE0NjczNmY5YzRiYyIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVtaXBzID89ICJjYWI5ZTA1OTQ0Nzg3OGY1MzgzZjkxYTA1ZGIxMjgxM2Y2OWNiZmMxIgorU1JDUkVWX21hY2hpbmVfcWVtdXBwYyA/PSAiZWIzYjIwNzllYTQzYjQ1MWUwNmJlNDQzZjhiYzE0NjczNmY5YzRiYyIKK1NSQ1JFVl9tYWNoaW5lX3FlbXV4ODYgPz0gImViM2IyMDc5ZWE0M2I0NTFlMDZiZTQ0M2Y4YmMxNDY3MzZmOWM0YmMiCitTUkNSRVZfbWFjaGluZV9xZW11eDg2LTY0ID89ICJlYjNiMjA3OWVhNDNiNDUxZTA2YmU0NDNmOGJjMTQ2NzM2ZjljNGJjIgorU1JDUkVWX21hY2hpbmVfcWVtdW1pcHM2NCA/PSAiYzJlNWVmODNiNjEyZDUwZjUwZmFmZWVkOTkzMGRiZWEzMDJmYmU4YyIKK1NSQ1JFVl9tYWNoaW5lID89ICJlYjNiMjA3OWVhNDNiNDUxZTA2YmU0NDNmOGJjMTQ2NzM2ZjljNGJjIgorU1JDUkVWX21ldGEgPz0gIjA3NzRlYWNlYTJhN2QzYTE1MDU5NDUzM2I4YzgwZDBjMGJmZGZkZWQiCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tNC45LmdpdDtuYW1lPW1hY2hpbmU7YnJhbmNoPSR7S0JSQU5DSH07IFwKICAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by00Ljk7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKIAotTElOVVhfVkVSU0lPTiA/PSAiNC45LjQ5IgorTElOVVhfVkVSU0lPTiA/PSAiNC45LjgyIgogCiBQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9iYWJlbHRyYWNlXzEuNS4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvYmFiZWx0cmFjZV8xLjUuMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdlYTVjMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9iYWJlbHRyYWNlXzEuNS4yLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotU1VNTUFSWSA9ICJCYWJlbHRyYWNlIC0gVHJhY2UgRm9ybWF0IEJhYmVsIFRvd2VyIgotREVTQ1JJUFRJT04gPSAiQmFiZWx0cmFjZSBwcm92aWRlcyB0cmFjZSByZWFkIGFuZCB3cml0ZSBsaWJyYXJpZXMgaW4gaG9zdCBzaWRlLCBhcyB3ZWxsIGFzIGEgdHJhY2UgY29udmVydGVyLCB3aGljaCB1c2VkIHRvIGNvbnZlcnQgTFRUbmcgMi4wIHRyYWNlcyBpbnRvIGh1bWFuLXJlYWRhYmxlIGxvZy4iCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmVmZmljaW9zLmNvbS9iYWJlbHRyYWNlLyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmx0dG5nLm9yZy9wcm9qZWN0cy9iYWJlbHRyYWNlIgotCi1MSUNFTlNFID0gIk1JVCAmIEdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NzZiYTE1ZGQ3NmEyNDhlMWRkNTI2YmNhMGUyMTI1ZmEiCi0KLURFUEVORFMgPSAiZ2xpYi0yLjAgdXRpbC1saW51eCBwb3B0IGJpc29uLW5hdGl2ZSBmbGV4LW5hdGl2ZSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCi0KLVNSQ19VUkkgPSAiaHR0cDovL3d3dy5lZmZpY2lvcy5jb20vZmlsZXMvYmFiZWx0cmFjZS9iYWJlbHRyYWNlLSR7UFZ9LnRhci5iejIgXAotIgotCi1FWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWRlYnVnLWluZm8iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIxMTc2ZTdmNjllMTI4MTEyZDVmMjlmZWZlYzM5YzZjZSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI2OTZlZTQ2ZTU3NTBhYjU3YTI1ODY2M2U3MzkxNWQyOTAxYjdjZDRmYzUzYjA2ZWIzZjdhMGQ3YjEwMTJmYTU2IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvYmFiZWx0cmFjZV8xLjUuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2VfMS41LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ4MWRhMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2VfMS41LjMuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJCYWJlbHRyYWNlIC0gVHJhY2UgRm9ybWF0IEJhYmVsIFRvd2VyIgorREVTQ1JJUFRJT04gPSAiQmFiZWx0cmFjZSBwcm92aWRlcyB0cmFjZSByZWFkIGFuZCB3cml0ZSBsaWJyYXJpZXMgaW4gaG9zdCBzaWRlLCBhcyB3ZWxsIGFzIGEgdHJhY2UgY29udmVydGVyLCB3aGljaCB1c2VkIHRvIGNvbnZlcnQgTFRUbmcgMi4wIHRyYWNlcyBpbnRvIGh1bWFuLXJlYWRhYmxlIGxvZy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmVmZmljaW9zLmNvbS9iYWJlbHRyYWNlLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmx0dG5nLm9yZy9wcm9qZWN0cy9iYWJlbHRyYWNlIgorCitMSUNFTlNFID0gIk1JVCAmIEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NzZiYTE1ZGQ3NmEyNDhlMWRkNTI2YmNhMGUyMTI1ZmEiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgdXRpbC1saW51eCBwb3B0IGJpc29uLW5hdGl2ZSBmbGV4LW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5lZmZpY2lvcy5jb20vZmlsZXMvYmFiZWx0cmFjZS9iYWJlbHRyYWNlLSR7UFZ9LnRhci5iejIgXAorIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWRlYnVnLWluZm8iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwY2VjMjc0NWFjMzE2NjQ5NzkxYzQzZjQxNmQ3MWVhMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyMjQ5ZmVlNWJlYmE2NTc3MzFmNWQ2YTg0YzUyOTZjNjUxN2Y1NDRiZmJlNzU3MWJkMWZkN2FmMjM3MjYxMzdjIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctbW9kdWxlcy9CVUlMRF9SVU5USU1FX0JVR19PTi12cy1nY2M3LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctbW9kdWxlcy9CVUlMRF9SVU5USU1FX0JVR19PTi12cy1nY2M3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MDYzNjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy1tb2R1bGVzL0JVSUxEX1JVTlRJTUVfQlVHX09OLXZzLWdjYzcucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSBhYjA3NTc0ZWY5MGZhNTEwZjI5M2MzNzg5N2Q1NzcwNjZhODhmZTBkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmF0aGFuIEx5bmNoIDxuYXRoYW5fbHluY2hAbWVudG9yLmNvbT4KK0RhdGU6IFR1ZSwgMjUgQXByIDIwMTcgMTY6MjY6NTcgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gQlVJTERfUlVOVElNRV9CVUdfT04gdnMgZ2NjNworCitBdm9pZCB1c2luZyBMVFRuZydzIEJVSUxEX1JVTlRJTUVfQlVHX09OIG1hY3JvLCBhcyBpdCBhcHBlYXJzIHRvIHJ1bgoraW50byBhIHNpbWlsYXIgcHJvYmxlbSBhcyBMaW51eCBleHBlcmllbmNlZCB3aXRoIGlsb2cyLgorCitTZWU6CitodHRwczovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90b3J2YWxkcy9saW51eC5naXQvY29tbWl0Lz9pZD00NzRjOTAxNTZjOGRjYzJmYTgxNWU2NzE2Y2M5Mzk0ZDc5MzBjYjljCitodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD03Mjc4NQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IE5hdGhhbiBMeW5jaCA8bmF0aGFuX2x5bmNoQG1lbnRvci5jb20+CistLS0KKyBsaWIvYWxpZ24uaCB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvYWxpZ24uaCBiL2xpYi9hbGlnbi5oCitpbmRleCA1YjkxYWU4NzQxMGIuLjVlMTM0Y2Q0ODVmZSAxMDA2NDQKKy0tLSBhL2xpYi9hbGlnbi5oCisrKysgYi9saWIvYWxpZ24uaAorQEAgLTQ4LDcgKzQ4LDcgQEAKKyAgKi8KKyAjZGVmaW5lIG9mZnNldF9hbGlnbihhbGlnbl9kcmlmdCwgYWxpZ25tZW50KQkJCQkgICAgICAgXAorIAkoewkJCQkJCQkJICAgICAgIFwKKy0JCUJVSUxEX1JVTlRJTUVfQlVHX09OKChhbGlnbm1lbnQpID09IDAJCQkgICAgICAgXAorKwkJQlVHX09OKChhbGlnbm1lbnQpID09IDAJCQkJCSAgICAgICBcCisgCQkJCSAgIHx8ICgoYWxpZ25tZW50KSAmICgoYWxpZ25tZW50KSAtIDEpKSk7ICAgICAgXAorIAkJKCgoYWxpZ25tZW50KSAtIChhbGlnbl9kcmlmdCkpICYgKChhbGlnbm1lbnQpIC0gMSkpOwkgICAgICAgXAorIAl9KQorQEAgLTYzLDcgKzYzLDcgQEAKKyAgKi8KKyAjZGVmaW5lIG9mZnNldF9hbGlnbl9mbG9vcihhbGlnbl9kcmlmdCwgYWxpZ25tZW50KQkJCSAgICAgICBcCisgCSh7CQkJCQkJCQkgICAgICAgXAorLQkJQlVJTERfUlVOVElNRV9CVUdfT04oKGFsaWdubWVudCkgPT0gMAkJCSAgICAgICBcCisrCQlCVUdfT04oKGFsaWdubWVudCkgPT0gMAkJCQkJICAgICAgIFwKKyAJCQkJICAgfHwgKChhbGlnbm1lbnQpICYgKChhbGlnbm1lbnQpIC0gMSkpKTsgICAgICBcCisgCQkoKChhbGlnbl9kcmlmdCkgLSAoYWxpZ25tZW50KSkgJiAoKGFsaWdubWVudCkgLSAxKSk7CSAgICAgICBcCisgCX0pCistLSAKKzIuOS4zCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLW1vZHVsZXMvTWFrZWZpbGUtRG8tbm90LWZhaWwtaWYtQ09ORklHX1RSQUNFUE9JTlRTLWlzLW5vdC1lbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLW1vZHVsZXMvTWFrZWZpbGUtRG8tbm90LWZhaWwtaWYtQ09ORklHX1RSQUNFUE9JTlRTLWlzLW5vdC1lbi5wYXRjaAppbmRleCA2YTkxZjMyLi5lNDExMjQyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy1tb2R1bGVzL01ha2VmaWxlLURvLW5vdC1mYWlsLWlmLUNPTkZJR19UUkFDRVBPSU5UUy1pcy1ub3QtZW4ucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctbW9kdWxlcy9NYWtlZmlsZS1Eby1ub3QtZmFpbC1pZi1DT05GSUdfVFJBQ0VQT0lOVFMtaXMtbm90LWVuLnBhdGNoCkBAIC0xMCw3ICsxMCw3IEBACiBUaGlzIGNoYW5nZSBtYWtlcyB0aGUgYnVpbGQgZG8gbm90IGZhaWwgd2hlbiBDT05GSUdfVFJBQ0VQT0lOVFMgaXMgbm90CiBhdmFpbGFibGUsIGFsbG93aW5nIGl0IHRvIGJlIGtlcHQgYmVpbmcgcHVsbGVkIGJ5IGRlZmF1bHQuCiAKLVVwc3RyZWFtLVN0YXR1czogSW5hcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCiAKIFNpZ25lZC1vZmYtYnk6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CiAtLS0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLW1vZHVsZXNfMi45LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy1tb2R1bGVzXzIuOS4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmZmNzlkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLW1vZHVsZXNfMi45LjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi1TRUNUSU9OID0gImRldmVsIgotU1VNTUFSWSA9ICJMaW51eCBUcmFjZSBUb29sa2l0IEtFUk5FTCBNT0RVTEUiCi1ERVNDUklQVElPTiA9ICJUaGUgbHR0bmctbW9kdWxlcyAyLjAgcGFja2FnZSBjb250YWlucyB0aGUga2VybmVsIHRyYWNlciBtb2R1bGVzIgotTElDRU5TRSA9ICJMR1BMdjIuMSAmIEdQTHYyICYgTUlUIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MzYyODQ0NjMzYTA4NzUzYmQ5NmFiMzIyYTZjN2Y5ZjYgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3BsLTIuMC50eHQ7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xncGwtMi4xLnR4dDttZDU9MjQzYjcyNWQ3MWJiNWRmNGExZTU5MjBiMzQ0Yjg2YWQiCi0KLWluaGVyaXQgbW9kdWxlCi0KLUNPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0fGkuODZ8cG93ZXJwY3xhYXJjaDY0fG1pcHN8bmlvczJ8YXJtKS4qLWxpbnV4JwotCi1TUkNfVVJJID0gImh0dHBzOi8vbHR0bmcub3JnL2ZpbGVzLyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCi0gICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS1Eby1ub3QtZmFpbC1pZi1DT05GSUdfVFJBQ0VQT0lOVFMtaXMtbm90LWVuLnBhdGNoIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNWExNmJjYTUyMjMzY2MyYmRmZjU3MmIxMTIwYTg4ZjYiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjIwNzhmZTMyNTRjYTY1OTY5ZGI0YjcyZTU5MDQyY2Q3OTdkYmYyNzQwODQ4ZjhmODIzODQ4NzdhZTQ2MGQ1NCIKLQotZXhwb3J0IElOU1RBTExfTU9EX0RJUj0ia2VybmVsL2x0dG5nLW1vZHVsZXMiCi0KLUVYVFJBX09FTUFLRSArPSAiS0VSTkVMRElSPScke1NUQUdJTkdfS0VSTkVMX0RJUn0nIgotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQkjIERlbGV0ZSBlbXB0eSBkaXJlY3RvcmllcyB0byBhdm9pZCBRQSBmYWlsdXJlcyBpZiBubyBtb2R1bGVzIHdlcmUgYnVpbHQKLQlmaW5kICR7RH0vJHtub25hcmNoX2Jhc2VfbGliZGlyfSAtZGVwdGggLXR5cGUgZCAtZW1wdHkgLWV4ZWMgcm1kaXIge30gXDsKLX0KLQotcHl0aG9uIGRvX3BhY2thZ2VfcHJlcGVuZCgpIHsKLSAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGQuZ2V0VmFyKCdEJyksIGQuZ2V0VmFyKCdub25hcmNoX2Jhc2VfbGliZGlyJylbMTpdLCAnbW9kdWxlcycpKToKLSAgICAgICAgYmIud2FybigiJXM6IG5vIG1vZHVsZXMgd2VyZSBjcmVhdGVkOyB0aGlzIG1heSBiZSBkdWUgdG8gQ09ORklHX1RSQUNFUE9JTlRTIG5vdCBiZWluZyBlbmFibGVkIGluIHlvdXIga2VybmVsLiIgJSBkLmdldFZhcignUE4nKSkKLX0KLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctbW9kdWxlc18yLjkuNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLW1vZHVsZXNfMi45LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFkOTc0NAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLW1vZHVsZXNfMi45LjUuYmIKQEAgLTAsMCArMSwzNCBAQAorU0VDVElPTiA9ICJkZXZlbCIKK1NVTU1BUlkgPSAiTGludXggVHJhY2UgVG9vbGtpdCBLRVJORUwgTU9EVUxFIgorREVTQ1JJUFRJT04gPSAiVGhlIGx0dG5nLW1vZHVsZXMgMi4wIHBhY2thZ2UgY29udGFpbnMgdGhlIGtlcm5lbCB0cmFjZXIgbW9kdWxlcyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgJiBHUEx2MiAmIE1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTM2Mjg0NDYzM2EwODc1M2JkOTZhYjMyMmE2YzdmOWY2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dwbC0yLjAudHh0O21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9sZ3BsLTIuMS50eHQ7bWQ1PTI0M2I3MjVkNzFiYjVkZjRhMWU1OTIwYjM0NGI4NmFkIgorCitpbmhlcml0IG1vZHVsZQorCitDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NHxpLjg2fHBvd2VycGN8YWFyY2g2NHxtaXBzfG5pb3MyfGFybSkuKi1saW51eCcKKworU1JDX1VSSSA9ICJodHRwczovL2x0dG5nLm9yZy9maWxlcy8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUtRG8tbm90LWZhaWwtaWYtQ09ORklHX1RSQUNFUE9JTlRTLWlzLW5vdC1lbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9CVUlMRF9SVU5USU1FX0JVR19PTi12cy1nY2M3LnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImFmOTdhYWFmODYxMzNmZDc4M2JiOTkzN2RjM2I0ZDU5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNmNGU4MmNlYjFjM2MxODc1ZWMxZmU4OWZiYTA4Mjk0ZWQ3ZmVlYzIxNjEzMzlhNWE3MWEwNjZiMjdmYzNlMjIiCisKK2V4cG9ydCBJTlNUQUxMX01PRF9ESVI9Imtlcm5lbC9sdHRuZy1tb2R1bGVzIgorCitFWFRSQV9PRU1BS0UgKz0gIktFUk5FTERJUj0nJHtTVEFHSU5HX0tFUk5FTF9ESVJ9JyIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBEZWxldGUgZW1wdHkgZGlyZWN0b3JpZXMgdG8gYXZvaWQgUUEgZmFpbHVyZXMgaWYgbm8gbW9kdWxlcyB3ZXJlIGJ1aWx0CisJZmluZCAke0R9LyR7bm9uYXJjaF9iYXNlX2xpYmRpcn0gLWRlcHRoIC10eXBlIGQgLWVtcHR5IC1leGVjIHJtZGlyIHt9IFw7Cit9CisKK3B5dGhvbiBkb19wYWNrYWdlX3ByZXBlbmQoKSB7CisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihkLmdldFZhcignRCcpLCBkLmdldFZhcignbm9uYXJjaF9iYXNlX2xpYmRpcicpWzE6XSwgJ21vZHVsZXMnKSk6CisgICAgICAgIGJiLndhcm4oIiVzOiBubyBtb2R1bGVzIHdlcmUgY3JlYXRlZDsgdGhpcyBtYXkgYmUgZHVlIHRvIENPTkZJR19UUkFDRVBPSU5UUyBub3QgYmVpbmcgZW5hYmxlZCBpbiB5b3VyIGtlcm5lbC4iICUgZC5nZXRWYXIoJ1BOJykpCit9CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzXzIuOS40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHNfMi45LjQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZjNhZTkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHNfMi45LjQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotU0VDVElPTiA9ICJkZXZlbCIKLVNVTU1BUlkgPSAiTGludXggVHJhY2UgVG9vbGtpdCBDb250cm9sIgotREVTQ1JJUFRJT04gPSAiVGhlIExpbnV4IHRyYWNlIHRvb2xraXQgaXMgYSBzdWl0ZSBvZiB0b29scyBkZXNpZ25lZCBcCi10byBleHRyYWN0IHByb2dyYW0gZXhlY3V0aW9uIGRldGFpbHMgZnJvbSB0aGUgTGludXggb3BlcmF0aW5nIHN5c3RlbSBcCi1hbmQgaW50ZXJwcmV0IHRoZW0uIgotCi1MSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0wMWQ3ZmM0NDk2YWFjZjM3ZDkwZGY5MGI5MGIwY2FjMSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ncGwtMi4wLnR4dDttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGdwbC0yLjEudHh0O21kNT0wZjBkNzE1MDBlNmE1N2ZkMjRkODI1ZjMzMjQyYjljYSIKLQotREVQRU5EUyA9ICJsaWJ1cmN1IHBvcHQgbGlieG1sMiB1dGlsLWxpbnV4IgotUkRFUEVORFNfJHtQTn0gPSAibGliZ2NjIgotUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIm1ha2UgcGVybCBiYXNoIGdhd2sgJHtQTn0gYmFiZWx0cmFjZSBwcm9jcHMiCi0jIGJhYmVsc3RhdHMucGwgd2FudHMgZ2V0b3B0LWxvbmcKLVJERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJwZXJsLW1vZHVsZS1nZXRvcHQtbG9uZyIKLQotUFlUSE9OX09QVElPTiA9ICJhbV9jdl9weXRob25fcHlleGVjZGlyPScke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfScgXAotICAgICAgICAgICAgICAgICBhbV9jdl9weXRob25fcHl0aG9uZGlyPScke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfScgXAotICAgICAgICAgICAgICAgICBQWVRIT05fSU5DTFVERT0nLUkke1NUQUdJTkdfSU5DRElSfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0ke1BZVEhPTl9BQkl9JyBcCi0iCi1QQUNLQUdFQ09ORklHID8/PSAibHR0bmctdXN0IgotUEFDS0FHRUNPTkZJR1tweXRob25dID0gIi0tZW5hYmxlLXB5dGhvbi1iaW5kaW5ncyAke1BZVEhPTl9PUFRJT059LCxweXRob24zIHN3aWctbmF0aXZlIgotUEFDS0FHRUNPTkZJR1tsdHRuZy11c3RdID0gIi0td2l0aC1sdHRuZy11c3QsIC0td2l0aG91dC1sdHRuZy11c3QsIGx0dG5nLXVzdCIKLVBBQ0tBR0VDT05GSUdba21vZF0gPSAiLS1lbmFibGUta21vZCwgLS1kaXNhYmxlLWttb2QsIGttb2QiCi1QQUNLQUdFQ09ORklHW21hbnBhZ2VzXSA9ICItLWVuYWJsZS1tYW4tcGFnZXMsIC0tZGlzYWJsZS1tYW4tcGFnZXMsIGFzY2lpZG9jLW5hdGl2ZSB4bWx0by1uYXRpdmUgbGlieHNsdC1uYXRpdmUiCi1QQUNLQUdFQ09ORklHX3JlbW92ZV9saWJjLW11c2wgPSAibHR0bmctdXN0IgotCi1TUkNfVVJJID0gImh0dHBzOi8vbHR0bmcub3JnL2ZpbGVzL2x0dG5nLXRvb2xzL2x0dG5nLXRvb2xzLSR7UFZ9LnRhci5iejIgXAotICAgICAgICAgICBmaWxlOi8veDMyLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCi0gICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjEwZjQ3YWJmYTIxNGIxNjc1ODAzNTgzODg0Mjg3NzBkIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNjNzI0NTZiY2VlZjk2MWZhZDFkMDg2MWYwNzQ3OGRiMTZiNzY1OWVmYTY5MDk5YmEzNjY0NWRhODljYTJjYzUiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0IHBrZ2NvbmZpZyB1c2VyYWRkIHB5dGhvbjMtZGlyIG1hbnBhZ2VzCi0KLVVTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCi1HUk9VUEFERF9QQVJBTV8ke1BOfSA9ICJ0cmFjaW5nIgotCi1GSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2x0dG5nL2xpYmV4ZWMvKiAke2RhdGFkaXJ9L3htbC9sdHRuZyBcCi0gICAgICAgICAgICAgICAgJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vKiIKLUZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vKi5hIgotRklMRVNfJHtQTn0tZGV2ICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qLmxhIgotCi0jIFNpbmNlIGZpbGVzIGFyZSBpbnN0YWxsZWQgaW50byAke2xpYmRpcn0vbHR0bmcvbGliZXhlYyB3ZSBtYXRjaCAKLSMgdGhlIGxpYmV4ZWMgaW5zYW5lIHRlc3Qgc28gc2tpcCBpdC4KLSMgUHl0aG9uIG1vZHVsZSBuZWVkcyB0byBrZWVwIF9sdHRuZy5zbwotSU5TQU5FX1NLSVBfJHtQTn0gPSAibGliZXhlYyBkZXYtc28iCi1JTlNBTkVfU0tJUF8ke1BOfS1kYmcgPSAibGliZXhlYyIKLQotZG9faW5zdGFsbF9wdGVzdCAoKSB7Ci0gICAgZm9yIGYgaW4gTWFrZWZpbGUgdGVzdHMvTWFrZWZpbGUgdGVzdHMvdXRpbHMvdXRpbHMuc2ggOyBkbwotICAgICAgICBpbnN0YWxsIC1EICIke0J9LyRmIiAiJHtEfSR7UFRFU1RfUEFUSH0vJGYiCi0gICAgZG9uZQotCi0gICAgZm9yIGYgaW4gY29uZmlnL3RhcC1kcml2ZXIuc2ggY29uZmlnL3Rlc3QtZHJpdmVyIDsgZG8KLSAgICAgICAgaW5zdGFsbCAtRCAiJHtTfS8kZiIgIiR7RH0ke1BURVNUX1BBVEh9LyRmIgotICAgIGRvbmUKLQotICAgICMgUHJldmVudCAnbWFrZSBjaGVjaycgZnJvbSByZWN1cnNpbmcgaW50byBub24tdGVzdCBzdWJkaXJlY3Rvcmllcy4KLSAgICBzZWQgLWkgLWUgJ3MhXlNVQkRJUlMgPSAuKiFTVUJESVJTID0gdGVzdHMhJyAiJHtEfSR7UFRFU1RfUEFUSH0vTWFrZWZpbGUiCi0KLSAgICAjIFdlIGRvbid0IG5lZWQgdGhlc2UKLSAgICBzZWQgLWkgLWUgJy9kaXN0X25vaW5zdF9TQ1JJUFRTID0gLywvXiQvZCcgIiR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL01ha2VmaWxlIgotCi0gICAgIyBXZSBzaG91bGRuJ3QgbmVlZCB0byBidWlsZCBhbnl0aGluZyBpbiB0ZXN0cy91dGlscwotICAgIHNlZCAtaSAtZSAncyFhbV9fYXBwZW5kXzEgPSAuIHV0aWxzIWFtX19hcHBlbmRfMSA9IC4gIScgXAotICAgICAgICAiJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvTWFrZWZpbGUiCi0KLSAgICAjIENvcHkgdGhlIHRlc3RzIGRpcmVjdG9yeSB0cmVlIGFuZCB0aGUgZXhlY3V0YWJsZXMgYW5kCi0gICAgIyBNYWtlZmlsZXMgZm91bmQgd2l0aGluLgotICAgIGZvciBkIGluICQoZmluZCAiJHtCfS90ZXN0cyIgLXR5cGUgZCAtbm90IC1uYW1lIC5saWJzIC1wcmludGYgJyVQICcpIDsgZG8KLSAgICAgICAgaW5zdGFsbCAtZCAiJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvJGQiCi0gICAgICAgIGZpbmQgIiR7Qn0vdGVzdHMvJGQiIC1tYXhkZXB0aCAxIC1leGVjdXRhYmxlIC10eXBlIGYgXAotICAgICAgICAgICAgLWV4ZWMgaW5zdGFsbCAtdCAiJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvJGQiIHt9ICsKLSAgICAgICAgdGVzdCAtciAiJHtCfS90ZXN0cy8kZC9NYWtlZmlsZSIgJiYgXAotICAgICAgICAgICAgaW5zdGFsbCAtdCAiJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvJGQiICIke0J9L3Rlc3RzLyRkL01ha2VmaWxlIgotICAgIGRvbmUKLQotICAgICMgV2Ugc2hvdWxkbid0IG5lZWQgdG8gYnVpbGQgYW55dGhpbmcgaW4gdGVzdHMvcmVncmVzc2lvbi90b29scwotICAgIHNlZCAtaSAtZSAncyFeU1VCRElSUyA9IHRvb2xzICFTVUJESVJTID0gIScgXAotICAgICAgICAiJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvcmVncmVzc2lvbi9NYWtlZmlsZSIKLQotICAgICMgUHJldmVudCBhdHRlbXB0cyB0byB1cGRhdGUgTWFrZWZpbGVzIGR1cmluZyB0ZXN0IHJ1bnMsIGFuZAotICAgICMgc2lsZW5jZSAiTWFraW5nIGNoZWNrIGluICRTVUJESVIiIG1lc3NhZ2VzLgotICAgIGZpbmQgIiR7RH0ke1BURVNUX1BBVEh9IiAtbmFtZSBNYWtlZmlsZSAtdHlwZSBmIC1leGVjIFwKLSAgICAgICAgc2VkIC1pIC1lICcvTWFrZWZpbGU6LywvXiQvZCcgLWUgJy8lOiAlLmluLywvXiQvZCcgXAotICAgICAgICAtZSAnL2VjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFxcL2QnIFwKLSAgICAgICAgLWUgJ3MvXnNyY2RpciA9IFwoLipcKS9zcmNkaXIgPSAuLycgXAotICAgICAgICAtZSAncy9eYnVpbGRkaXIgPSBcKC4qXCkvYnVpbGRkaXIgPSAuLycgXAotICAgICAgICAtZSAncy9eYWxsLWFtOi4qL2FsbC1hbTovJyBcCi0gICAgICAgIHt9ICsKLQotICAgICMgVGhlc2Ugb2JqZWN0cyB0cmlnZ2VyIFtycGF0aHNdIFFBIGNoZWNrczsgdGhlIHRlc3QgaGFybmVzcwotICAgICMgc2tpcHMgdGhlIGFzc29jaWF0ZWQgdGVzdHMgaWYgdGhleSdyZSBtaXNzaW5nLCBzbyBkZWxldGUKLSAgICAjIHRoZW0uCi0gICAgb2Jqcz0iIgotICAgIG9ianM9IiRvYmpzIHJlZ3Jlc3Npb24vdXN0L3VzdC1kbC9saWJiYXIuc28iCi0gICAgb2Jqcz0iJG9ianMgcmVncmVzc2lvbi91c3QvdXN0LWRsL2xpYmZvby5zbyIKLSAgICBmb3Igb2JqIGluICRvYmpzIDsgZG8KLSAgICAgICAgcm0gLWYgIiR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzLyR7b2JqfSIKLSAgICBkb25lCi0KLSAgICBmaW5kICIke0R9JHtQVEVTVF9QQVRIfSIgLW5hbWUgTWFrZWZpbGUgLXR5cGUgZiAtZXhlYyBcCi0gICAgICAgIHRvdWNoIC1yICIke0J9L01ha2VmaWxlIiB7fSArCi0KLSAgICAjIFN1YnN0aXR1dGUgbGlua3MgdG8gaW5zdGFsbGVkIGJpbmFyaWVzLgotICAgIGZvciBwcm9nIGluIGx0dG5nIGx0dG5nLXJlbGF5ZCBsdHRuZy1zZXNzaW9uZCBsdHRuZy1jb25zdW1lcmQgOyBkbwotICAgICAgICBleGVkaXI9IiR7RH0ke1BURVNUX1BBVEh9L3NyYy9iaW4vJHtwcm9nfSIKLSAgICAgICAgaW5zdGFsbCAtZCAiJGV4ZWRpciIKLSAgICAgICAgY2FzZSAiJHByb2ciIGluCi0gICAgICAgICAgICBsdHRuZy1jb25zdW1lcmQpCi0gICAgICAgICAgICAgICAgbG4gLXMgIiR7bGliZGlyfS9sdHRuZy9saWJleGVjLyRwcm9nIiAiJGV4ZWRpciIKLSAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgKikKLSAgICAgICAgICAgICAgICBsbiAtcyAiJHtiaW5kaXJ9LyRwcm9nIiAiJGV4ZWRpciIKLSAgICAgICAgICAgICAgICA7OwotICAgICAgICBlc2FjCi0gICAgZG9uZQotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHNfMi45LjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29sc18yLjkuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTkyYzIyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHNfMi45LjUuYmIKQEAgLTAsMCArMSwxMjIgQEAKK1NFQ1RJT04gPSAiZGV2ZWwiCitTVU1NQVJZID0gIkxpbnV4IFRyYWNlIFRvb2xraXQgQ29udHJvbCIKK0RFU0NSSVBUSU9OID0gIlRoZSBMaW51eCB0cmFjZSB0b29sa2l0IGlzIGEgc3VpdGUgb2YgdG9vbHMgZGVzaWduZWQgXAordG8gZXh0cmFjdCBwcm9ncmFtIGV4ZWN1dGlvbiBkZXRhaWxzIGZyb20gdGhlIExpbnV4IG9wZXJhdGluZyBzeXN0ZW0gXAorYW5kIGludGVycHJldCB0aGVtLiIKKworTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MDFkN2ZjNDQ5NmFhY2YzN2Q5MGRmOTBiOTBiMGNhYzEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3BsLTIuMC50eHQ7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xncGwtMi4xLnR4dDttZDU9MGYwZDcxNTAwZTZhNTdmZDI0ZDgyNWYzMzI0MmI5Y2EiCisKK0RFUEVORFMgPSAibGlidXJjdSBwb3B0IGxpYnhtbDIgdXRpbC1saW51eCIKK1JERVBFTkRTXyR7UE59ID0gImxpYmdjYyIKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlIHBlcmwgYmFzaCBnYXdrICR7UE59IGJhYmVsdHJhY2UgcHJvY3BzIgorIyBiYWJlbHN0YXRzLnBsIHdhbnRzIGdldG9wdC1sb25nCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAicGVybC1tb2R1bGUtZ2V0b3B0LWxvbmciCisKK1BZVEhPTl9PUFRJT04gPSAiYW1fY3ZfcHl0aG9uX3B5ZXhlY2Rpcj0nJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0nIFwKKyAgICAgICAgICAgICAgICAgYW1fY3ZfcHl0aG9uX3B5dGhvbmRpcj0nJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0nIFwKKyAgICAgICAgICAgICAgICAgUFlUSE9OX0lOQ0xVREU9Jy1JJHtTVEFHSU5HX0lOQ0RJUn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059JHtQWVRIT05fQUJJfScgXAorIgorUEFDS0FHRUNPTkZJRyA/Pz0gImx0dG5nLXVzdCIKK1BBQ0tBR0VDT05GSUdbcHl0aG9uXSA9ICItLWVuYWJsZS1weXRob24tYmluZGluZ3MgJHtQWVRIT05fT1BUSU9OfSwscHl0aG9uMyBzd2lnLW5hdGl2ZSIKK1BBQ0tBR0VDT05GSUdbbHR0bmctdXN0XSA9ICItLXdpdGgtbHR0bmctdXN0LCAtLXdpdGhvdXQtbHR0bmctdXN0LCBsdHRuZy11c3QiCitQQUNLQUdFQ09ORklHW2ttb2RdID0gIi0tZW5hYmxlLWttb2QsIC0tZGlzYWJsZS1rbW9kLCBrbW9kIgorUEFDS0FHRUNPTkZJR1ttYW5wYWdlc10gPSAiLS1lbmFibGUtbWFuLXBhZ2VzLCAtLWRpc2FibGUtbWFuLXBhZ2VzLCBhc2NpaWRvYy1uYXRpdmUgeG1sdG8tbmF0aXZlIGxpYnhzbHQtbmF0aXZlIgorUEFDS0FHRUNPTkZJR19yZW1vdmVfbGliYy1tdXNsID0gImx0dG5nLXVzdCIKKworU1JDX1VSSSA9ICJodHRwczovL2x0dG5nLm9yZy9maWxlcy9sdHRuZy10b29scy9sdHRuZy10b29scy0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3gzMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwNTEyMjRlYjk5MWFlZTA3Zjg3MjFmZjE4NzdkMGI5NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3NzgzOWViNmZjNmM2NTIxMjVmMDhhY2ZkOTM2OTcwMWMyNTE2ZWIwNWNjMjA4NDE2MGU3ZWZjN2EzZmI3MzFjIgorCitpbmhlcml0IGF1dG90b29scyBwdGVzdCBwa2djb25maWcgdXNlcmFkZCBweXRob24zLWRpciBtYW5wYWdlcworCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorR1JPVVBBRERfUEFSQU1fJHtQTn0gPSAidHJhY2luZyIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9sdHRuZy9saWJleGVjLyogJHtkYXRhZGlyfS94bWwvbHR0bmcgXAorICAgICAgICAgICAgICAgICR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LyoiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LyouYSIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vKi5sYSIKKworIyBTaW5jZSBmaWxlcyBhcmUgaW5zdGFsbGVkIGludG8gJHtsaWJkaXJ9L2x0dG5nL2xpYmV4ZWMgd2UgbWF0Y2ggCisjIHRoZSBsaWJleGVjIGluc2FuZSB0ZXN0IHNvIHNraXAgaXQuCisjIFB5dGhvbiBtb2R1bGUgbmVlZHMgdG8ga2VlcCBfbHR0bmcuc28KK0lOU0FORV9TS0lQXyR7UE59ID0gImxpYmV4ZWMgZGV2LXNvIgorSU5TQU5FX1NLSVBfJHtQTn0tZGJnID0gImxpYmV4ZWMiCisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworICAgIGZvciBmIGluIE1ha2VmaWxlIHRlc3RzL01ha2VmaWxlIHRlc3RzL3V0aWxzL3V0aWxzLnNoIDsgZG8KKyAgICAgICAgaW5zdGFsbCAtRCAiJHtCfS8kZiIgIiR7RH0ke1BURVNUX1BBVEh9LyRmIgorICAgIGRvbmUKKworICAgIGZvciBmIGluIGNvbmZpZy90YXAtZHJpdmVyLnNoIGNvbmZpZy90ZXN0LWRyaXZlciA7IGRvCisgICAgICAgIGluc3RhbGwgLUQgIiR7U30vJGYiICIke0R9JHtQVEVTVF9QQVRIfS8kZiIKKyAgICBkb25lCisKKyAgICAjIFByZXZlbnQgJ21ha2UgY2hlY2snIGZyb20gcmVjdXJzaW5nIGludG8gbm9uLXRlc3Qgc3ViZGlyZWN0b3JpZXMuCisgICAgc2VkIC1pIC1lICdzIV5TVUJESVJTID0gLiohU1VCRElSUyA9IHRlc3RzIScgIiR7RH0ke1BURVNUX1BBVEh9L01ha2VmaWxlIgorCisgICAgIyBXZSBkb24ndCBuZWVkIHRoZXNlCisgICAgc2VkIC1pIC1lICcvZGlzdF9ub2luc3RfU0NSSVBUUyA9IC8sL14kL2QnICIke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy9NYWtlZmlsZSIKKworICAgICMgV2Ugc2hvdWxkbid0IG5lZWQgdG8gYnVpbGQgYW55dGhpbmcgaW4gdGVzdHMvdXRpbHMKKyAgICBzZWQgLWkgLWUgJ3MhYW1fX2FwcGVuZF8xID0gLiB1dGlscyFhbV9fYXBwZW5kXzEgPSAuICEnIFwKKyAgICAgICAgIiR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL01ha2VmaWxlIgorCisgICAgIyBDb3B5IHRoZSB0ZXN0cyBkaXJlY3RvcnkgdHJlZSBhbmQgdGhlIGV4ZWN1dGFibGVzIGFuZAorICAgICMgTWFrZWZpbGVzIGZvdW5kIHdpdGhpbi4KKyAgICBmb3IgZCBpbiAkKGZpbmQgIiR7Qn0vdGVzdHMiIC10eXBlIGQgLW5vdCAtbmFtZSAubGlicyAtcHJpbnRmICclUCAnKSA7IGRvCisgICAgICAgIGluc3RhbGwgLWQgIiR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzLyRkIgorICAgICAgICBmaW5kICIke0J9L3Rlc3RzLyRkIiAtbWF4ZGVwdGggMSAtZXhlY3V0YWJsZSAtdHlwZSBmIFwKKyAgICAgICAgICAgIC1leGVjIGluc3RhbGwgLXQgIiR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzLyRkIiB7fSArCisgICAgICAgIHRlc3QgLXIgIiR7Qn0vdGVzdHMvJGQvTWFrZWZpbGUiICYmIFwKKyAgICAgICAgICAgIGluc3RhbGwgLXQgIiR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzLyRkIiAiJHtCfS90ZXN0cy8kZC9NYWtlZmlsZSIKKyAgICBkb25lCisKKyAgICAjIFdlIHNob3VsZG4ndCBuZWVkIHRvIGJ1aWxkIGFueXRoaW5nIGluIHRlc3RzL3JlZ3Jlc3Npb24vdG9vbHMKKyAgICBzZWQgLWkgLWUgJ3MhXlNVQkRJUlMgPSB0b29scyAhU1VCRElSUyA9ICEnIFwKKyAgICAgICAgIiR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL3JlZ3Jlc3Npb24vTWFrZWZpbGUiCisKKyAgICAjIFByZXZlbnQgYXR0ZW1wdHMgdG8gdXBkYXRlIE1ha2VmaWxlcyBkdXJpbmcgdGVzdCBydW5zLCBhbmQKKyAgICAjIHNpbGVuY2UgIk1ha2luZyBjaGVjayBpbiAkU1VCRElSIiBtZXNzYWdlcy4KKyAgICBmaW5kICIke0R9JHtQVEVTVF9QQVRIfSIgLW5hbWUgTWFrZWZpbGUgLXR5cGUgZiAtZXhlYyBcCisgICAgICAgIHNlZCAtaSAtZSAnL01ha2VmaWxlOi8sL14kL2QnIC1lICcvJTogJS5pbi8sL14kL2QnIFwKKyAgICAgICAgLWUgJy9lY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcXC9kJyBcCisgICAgICAgIC1lICdzL15zcmNkaXIgPSBcKC4qXCkvc3JjZGlyID0gLi8nIFwKKyAgICAgICAgLWUgJ3MvXmJ1aWxkZGlyID0gXCguKlwpL2J1aWxkZGlyID0gLi8nIFwKKyAgICAgICAgLWUgJ3MvXmFsbC1hbTouKi9hbGwtYW06LycgXAorICAgICAgICB7fSArCisKKyAgICAjIFRoZXNlIG9iamVjdHMgdHJpZ2dlciBbcnBhdGhzXSBRQSBjaGVja3M7IHRoZSB0ZXN0IGhhcm5lc3MKKyAgICAjIHNraXBzIHRoZSBhc3NvY2lhdGVkIHRlc3RzIGlmIHRoZXkncmUgbWlzc2luZywgc28gZGVsZXRlCisgICAgIyB0aGVtLgorICAgIG9ianM9IiIKKyAgICBvYmpzPSIkb2JqcyByZWdyZXNzaW9uL3VzdC91c3QtZGwvbGliYmFyLnNvIgorICAgIG9ianM9IiRvYmpzIHJlZ3Jlc3Npb24vdXN0L3VzdC1kbC9saWJmb28uc28iCisgICAgZm9yIG9iaiBpbiAkb2JqcyA7IGRvCisgICAgICAgIHJtIC1mICIke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy8ke29ian0iCisgICAgZG9uZQorCisgICAgZmluZCAiJHtEfSR7UFRFU1RfUEFUSH0iIC1uYW1lIE1ha2VmaWxlIC10eXBlIGYgLWV4ZWMgXAorICAgICAgICB0b3VjaCAtciAiJHtCfS9NYWtlZmlsZSIge30gKworCisgICAgIyBTdWJzdGl0dXRlIGxpbmtzIHRvIGluc3RhbGxlZCBiaW5hcmllcy4KKyAgICBmb3IgcHJvZyBpbiBsdHRuZyBsdHRuZy1yZWxheWQgbHR0bmctc2Vzc2lvbmQgbHR0bmctY29uc3VtZXJkIDsgZG8KKyAgICAgICAgZXhlZGlyPSIke0R9JHtQVEVTVF9QQVRIfS9zcmMvYmluLyR7cHJvZ30iCisgICAgICAgIGluc3RhbGwgLWQgIiRleGVkaXIiCisgICAgICAgIGNhc2UgIiRwcm9nIiBpbgorICAgICAgICAgICAgbHR0bmctY29uc3VtZXJkKQorICAgICAgICAgICAgICAgIGxuIC1zICIke2xpYmRpcn0vbHR0bmcvbGliZXhlYy8kcHJvZyIgIiRleGVkaXIiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgbG4gLXMgIiR7YmluZGlyfS8kcHJvZyIgIiRleGVkaXIiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgIGRvbmUKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdF8yLjkuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdF8yLjkuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg4YjVlZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy11c3RfMi45LjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi1TVU1NQVJZID0gIkxpbnV4IFRyYWNlIFRvb2xraXQgVXNlcnNwYWNlIFRyYWNlciAyLngiCi1ERVNDUklQVElPTiA9ICJUaGUgTFRUbmcgVVNUIDIueCBwYWNrYWdlIGNvbnRhaW5zIHRoZSB1c2Vyc3BhY2UgdHJhY2VyIGxpYnJhcnkgdG8gdHJhY2UgdXNlcnNwYWNlIGNvZGVzLiIKLUhPTUVQQUdFID0gImh0dHA6Ly9sdHRuZy5vcmcvdXN0IgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MubHR0bmcub3JnL3Byb2plY3RzL2x0dG5nLXVzdCIKLQotTElDRU5TRSA9ICJMR1BMdjIuMSsgJiBNSVQgJiBHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWM5NjNlYjM2NmI3ODEyNTJiMGJmMGZkZjE2MjRkOWU5IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NucHJpbnRmL3NucHJpbnRmLmM7ZW5kbGluZT0zMjttZDU9ZDNkNTQ0OTU5ZDhhMzc4MmIyZTA3NDUxYmUwYTkwM2MgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc25wcmludGYvdmFyaW91cy5oO2VuZGxpbmU9MzE7bWQ1PTg5ZjI1MDliNmI0NjgyYzRmYzk1MjU1ZWVjNGFiZTQ0IgotCi1pbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZSBtYW5wYWdlcwotCi1ERVBFTkRTID0gImxpYnVyY3UgdXRpbC1saW51eCIKLVJERVBFTkRTXyR7UE59LWJpbiA9ICJweXRob24zLWNvcmUiCi0KLSMgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFmdGVyIHJlbmFtZQotUlBST1ZJREVTXyR7UE59ID0gImx0dG5nMi11c3QiCi1SUkVQTEFDRVNfJHtQTn0gPSAibHR0bmcyLXVzdCIKLVJDT05GTElDVFNfJHtQTn0gPSAibHR0bmcyLXVzdCIKLQotUEUgPSAiMiIKLQotU1JDX1VSSSA9ICJodHRwczovL2x0dG5nLm9yZy9maWxlcy9sdHRuZy11c3QvbHR0bmctdXN0LSR7UFZ9LnRhci5iejIgXAotICAgICAgICAgICBmaWxlOi8vbHR0bmctdXN0LWRvYy1leGFtcGxlcy1kaXNhYmxlLnBhdGNoIFwKLSAgICAgICAgICAiCi1TUkNfVVJJW21kNXN1bV0gPSAiNzdmMzM3OGJhMzdhMzY4MDE0MjBiY2U4N2I3MDJlOWMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNGQ1NDFhODYzZjQyZGZjNjg1Y2EwNTAyNDAyN2E0NDJjNzBkMDM1OTRjMTU0YTQzZTYyYmMxMDliMWVhNWRhZiIKLQotQ1ZFX1BST0RVQ1QgPSAidXN0IgotCi1QQUNLQUdFQ09ORklHW21hbnBhZ2VzXSA9ICItLWVuYWJsZS1tYW4tcGFnZXMsIC0tZGlzYWJsZS1tYW4tcGFnZXMsIGFzY2lpZG9jLW5hdGl2ZSB4bWx0by1uYXRpdmUgbGlieHNsdC1uYXRpdmUiCi0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotICAgICAgICAjIFBhdGNoIHB5dGhvbiB0b29scyB0byB1c2UgUHl0aG9uIDM7IHRoZXkgc2hvdWxkIGJlIHNvdXJjZSBjb21wYXRpYmxlLCBidXQKLSAgICAgICAgIyBzdGlsbCByZWZlciB0byBQeXRob24gMiBpbiB0aGUgc2hlYmFuZwotICAgICAgICBzZWQgLWkgLWUgJzFzLCMhLipweXRob24uKiwjISR7YmluZGlyfS9weXRob24zLCcgJHtEfSR7YmluZGlyfS9sdHRuZy1nZW4tdHAKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdF8yLjkuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdF8yLjkuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2RhNGNhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0XzIuOS4xLmJiCkBAIC0wLDAgKzEsMzcgQEAKK1NVTU1BUlkgPSAiTGludXggVHJhY2UgVG9vbGtpdCBVc2Vyc3BhY2UgVHJhY2VyIDIueCIKK0RFU0NSSVBUSU9OID0gIlRoZSBMVFRuZyBVU1QgMi54IHBhY2thZ2UgY29udGFpbnMgdGhlIHVzZXJzcGFjZSB0cmFjZXIgbGlicmFyeSB0byB0cmFjZSB1c2Vyc3BhY2UgY29kZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2x0dG5nLm9yZy91c3QiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5sdHRuZy5vcmcvcHJvamVjdHMvbHR0bmctdXN0IgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyAmIE1JVCAmIEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Yzk2M2ViMzY2Yjc4MTI1MmIwYmYwZmRmMTYyNGQ5ZTkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc25wcmludGYvc25wcmludGYuYztlbmRsaW5lPTMyO21kNT1kM2Q1NDQ5NTlkOGEzNzgyYjJlMDc0NTFiZTBhOTAzYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zbnByaW50Zi92YXJpb3VzLmg7ZW5kbGluZT0zMTttZDU9ODlmMjUwOWI2YjQ2ODJjNGZjOTUyNTVlZWM0YWJlNDQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlIG1hbnBhZ2VzCisKK0RFUEVORFMgPSAibGlidXJjdSB1dGlsLWxpbnV4IgorUkRFUEVORFNfJHtQTn0tYmluID0gInB5dGhvbjMtY29yZSIKKworIyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYWZ0ZXIgcmVuYW1lCitSUFJPVklERVNfJHtQTn0gPSAibHR0bmcyLXVzdCIKK1JSRVBMQUNFU18ke1BOfSA9ICJsdHRuZzItdXN0IgorUkNPTkZMSUNUU18ke1BOfSA9ICJsdHRuZzItdXN0IgorCitQRSA9ICIyIgorCitTUkNfVVJJID0gImh0dHBzOi8vbHR0bmcub3JnL2ZpbGVzL2x0dG5nLXVzdC9sdHRuZy11c3QtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9sdHRuZy11c3QtZG9jLWV4YW1wbGVzLWRpc2FibGUucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI1YTU2MzZmYzNkOWFhMzcwZjY1YjI1YTgwMmE3OWU2ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiODkxZDI2N2NkYmJiZDExY2YzNDc1MWY2NmMyMWM0YTdmZGMwZWVjM2MxYjUzYmUyYzQwZGNhMDczYjdkYWE0IgorCitDVkVfUFJPRFVDVCA9ICJ1c3QiCisKK1BBQ0tBR0VDT05GSUdbbWFucGFnZXNdID0gIi0tZW5hYmxlLW1hbi1wYWdlcywgLS1kaXNhYmxlLW1hbi1wYWdlcywgYXNjaWlkb2MtbmF0aXZlIHhtbHRvLW5hdGl2ZSBsaWJ4c2x0LW5hdGl2ZSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgICAgICMgUGF0Y2ggcHl0aG9uIHRvb2xzIHRvIHVzZSBQeXRob24gMzsgdGhleSBzaG91bGQgYmUgc291cmNlIGNvbXBhdGlibGUsIGJ1dAorICAgICAgICAjIHN0aWxsIHJlZmVyIHRvIFB5dGhvbiAyIGluIHRoZSBzaGViYW5nCisgICAgICAgIHNlZCAtaSAtZSAnMXMsIyEuKnB5dGhvbi4qLCMhJHtiaW5kaXJ9L3B5dGhvbjMsJyAke0R9JHtiaW5kaXJ9L2x0dG5nLWdlbi10cAorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUuaW5jCmluZGV4IDk2ZWY0M2QuLjRiMDE2NTQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS5pbmMKQEAgLTI3LDYgKzI3LDggQEAKICAgICAgICAgICAgZmlsZTovLzAwMDEtQWRkLXJtYi1kZWZpbml0aW9uLWZvci1OSU9TMi1hcmNoaXRlY3R1cmUucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtRlRCRlMtcHJvYmxlbS13aXRoLUdDQy02LnBhdGNoIFwKICIKK1VQU1RSRUFNX0NIRUNLX1JFR0VYID0gIm9wcm9maWxlLSg/UDxwdmVyPlxkKyhcLlxkKykrKS8iCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvb3Byb2ZpbGUvZmlsZXMvb3Byb2ZpbGUvIgogCiBTUkNfVVJJX2FwcGVuZF9saWJjLW11c2wgPSAiIGZpbGU6Ly9tdXNsLnBhdGNoIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9wZXJmL3BlcmYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9wZXJmL3BlcmYuYmIKaW5kZXggMWJhZDZmNC4uYjc5Yjk3MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvcGVyZi9wZXJmLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3BlcmYvcGVyZi5iYgpAQCAtMjYsNyArMjYsNyBAQAogICAgIHZpcnR1YWwvJHtNTFBSRUZJWH1saWJjIFwKICAgICAke01MUFJFRklYfWVsZnV0aWxzIFwKICAgICAke01MUFJFRklYfWJpbnV0aWxzIFwKLSAgICBiaXNvbi1uYXRpdmUgZmxleC1uYXRpdmUgeHogXAorICAgIGJpc29uIGZsZXggeHogXAogICAgIHhtbHRvLW5hdGl2ZSBcCiAgICAgYXNjaWlkb2MtbmF0aXZlIFwKICIKQEAgLTM1LDEwICszNSw5IEBACiAKIFBST1ZJREVTID0gInZpcnR1YWwvcGVyZiIKIAotaW5oZXJpdCBsaW51eC1rZXJuZWwtYmFzZSBrZXJuZWwtYXJjaAoraW5oZXJpdCBsaW51eC1rZXJuZWwtYmFzZSBrZXJuZWwtYXJjaCBweXRob25uYXRpdmUKIAogIyBuZWVkZWQgZm9yIGJ1aWxkaW5nIHRoZSB0b29scy9wZXJmIFB5dGhvbiBiaW5kaW5ncwotaW5oZXJpdCAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdzY3JpcHRpbmcnLCAncHl0aG9ubmF0aXZlJywgJycsIGQpfQogaW5oZXJpdCBweXRob24tZGlyCiBleHBvcnQgUFlUSE9OX1NJVEVQQUNLQUdFU19ESVIKIApAQCAtNDgsOCArNDcsNyBAQAogZG9fcG9wdWxhdGVfbGljW2RlcGVuZHNdICs9ICJ2aXJ0dWFsL2tlcm5lbDpkb19wYXRjaCIKIAogIyBuZWVkZWQgZm9yIGJ1aWxkaW5nIHRoZSB0b29scy9wZXJmIFBlcmwgYmluZGluZwotaW5oZXJpdCAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdzY3JpcHRpbmcnLCAncGVybG5hdGl2ZScsICcnLCBkKX0KLWluaGVyaXQgY3Bhbi1iYXNlCitpbmhlcml0IHBlcmxuYXRpdmUgY3Bhbi1iYXNlCiAjIEVudiB2YXIgd2hpY2ggdGVsbHMgcGVybCBpZiBpdCBzaG91bGQgdXNlIGhvc3QgKG5vKSBvciB0YXJnZXQgKHllcykgc2V0dGluZ3MKIGV4cG9ydCBQRVJMQ09ORklHVEFSR0VUID0gIiR7QGlzX3RhcmdldChkKX0iCiBleHBvcnQgUEVSTF9JTkMgPSAiJHtTVEFHSU5HX0xJQkRJUn0ke1BFUkxfT1dOX0RJUn0vcGVybC8ke0BnZXRfcGVybF92ZXJzaW9uKGQpfS9DT1JFIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvcG93ZXJ0b3AvcG93ZXJ0b3BfMi44LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvcG93ZXJ0b3AvcG93ZXJ0b3BfMi44LmJiCmluZGV4IDFmMmRmYjguLjRkN2EzZTcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3Bvd2VydG9wL3Bvd2VydG9wXzIuOC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9wb3dlcnRvcC9wb3dlcnRvcF8yLjguYmIKQEAgLTE3LDExICsxNyw2IEBACiAKIGluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCiAKLSMgd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgd2l0aCBsaWJpbnRsIGluIHVDbGliYyBzeXN0ZW1zCi1FWFRSQV9MREZMQUdTID89ICIiCi1FWFRSQV9MREZMQUdTX2xpYmMtdWNsaWJjID0gIi1saW50bCIKLUxERkxBR1MgKz0gIiR7RVhUUkFfTERGTEFHU30iCi0KICMgd2UgZG8gbm90IHdhbnQgbGlibmN1cnNlc3cgaWYgd2UgY2FuCiBkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKICAgICAjIGNvbmZpZ3VyZS5hYyBjaGVja3MgZm9yIGRlbHdpbigpIGluICJuY3Vyc2VzdyBuY3Vyc2VzIiBzbyBsZXQncyBkcm9wIGZpcnN0IG9uZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9zeXNwcm9mXzMuMjIuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2Yvc3lzcHJvZl8zLjIyLjMuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MzEwNjMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9zeXNwcm9mXzMuMjIuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLVNVTU1BUlkgPSAiU3lzdGVtLXdpZGUgUGVyZm9ybWFuY2UgUHJvZmlsZXIgZm9yIExpbnV4IgotTElDRU5TRSA9ICJHUEx2MysiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvc3AtYXBwbGljYXRpb24uYztlbmRsaW5lPTE3O21kNT00MGU1NTU3N2VmMTIyYzg4ZmUyMDA1MmFjZGE2NDg3NSIKLQotaW5oZXJpdCBnbm9tZWJhc2UgZ2V0dGV4dCBzeXN0ZW1kIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgotCi1ERVBFTkRTID0gImdsaWItMi4wIGxpYnhtbDItbmF0aXZlIGdsaWItMi4wLW5hdGl2ZSIKLQotU1JDX1VSSSArPSAiIFwKLSAgICAgICAgICAgZmlsZTovL2RlZmluZS1OVF9HTlVfQlVJTERfSUQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUtQWRkLW9wdGlvbi10by1lbmFibGUtZGlzYWJsZS1wb2xraXQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1EaXNhYmxlLWNoZWNrLWZvci1wb2xraXQtZm9yLVVJLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtQXZvaWQtYnVpbGRpbmctZG9jcy5wYXRjaCBcCi0gICAgICAgICAgIgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiZTZkY2EzMjViMzAxNDQ0MGY0NTdhOTJkYjE4ZmZlMzQyYTM1ODg4ZGIzZjA3NTY2OTRhOTliOTY1Mjc5NjM2NyIKLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjk1MTQwNjVkYzc1MjEwNTI0MGU1NTY3YzEzNzA4YWY0IgotCi1BVVRPVE9PTFNfQVVYRElSID0gIiR7U30vYnVpbGQtYXV4IgotCi1FWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtY29tcGlsZS13YXJuaW5ncyIKLQotUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnNfYW55KCdESVNUUk9fRkVBVFVSRVMnLCAnJHtHVEszRElTVFJPRkVBVFVSRVN9JywgJ2d0aycsICcnLCBkKX0iCi1QQUNLQUdFQ09ORklHW2d0a10gPSAiLS1lbmFibGUtZ3RrLC0tZGlzYWJsZS1ndGssZ3RrKzMiCi1QQUNLQUdFQ09ORklHW3BvbGtpdF0gPSAiLS1lbmFibGUtcG9sa2l0LC0tZGlzYWJsZS1wb2xraXQscG9sa2l0IGRidXMiCi0KLVNPTElCUyA9ICIuc28iCi1GSUxFU19TT0xJQlNERVYgPSAiIgotRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vaWNvbnMvIgotCi1TWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncG9sa2l0JywgJ3N5c3Byb2YyLnNlcnZpY2UnLCAnJywgZCl9IgotCi0jIFdlIGRvIG5vdCB5ZXQgd29yayBmb3IgYWFyY2g2NC4KLUNPTVBBVElCTEVfSE9TVCA9ICJeKD8hYWFyY2g2NCkuKiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2Yvc3lzcHJvZl8zLjI0LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL3N5c3Byb2ZfMy4yNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YTI3YmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL3N5c3Byb2ZfMy4yNC4xLmJiCkBAIC0wLDAgKzEsMzQgQEAKK1NVTU1BUlkgPSAiU3lzdGVtLXdpZGUgUGVyZm9ybWFuY2UgUHJvZmlsZXIgZm9yIExpbnV4IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5zeXNwcm9mLmNvbSIKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3NwLWFwcGxpY2F0aW9uLmM7ZW5kbGluZT0xNzttZDU9NDBlNTU1NzdlZjEyMmM4OGZlMjAwNTJhY2RhNjQ4NzUiCisKK2luaGVyaXQgZ25vbWViYXNlIGdldHRleHQgc3lzdGVtZCB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4KKworREVQRU5EUyA9ICJnbGliLTIuMCBsaWJ4bWwyLW5hdGl2ZSBnbGliLTIuMC1uYXRpdmUiCisKK1NSQ19VUkkgKz0gIiBcCisgICAgICAgICAgIGZpbGU6Ly9kZWZpbmUtTlRfR05VX0JVSUxEX0lELnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY29uZmlndXJlLUFkZC1vcHRpb24tdG8tZW5hYmxlLWRpc2FibGUtcG9sa2l0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRGlzYWJsZS1jaGVjay1mb3ItcG9sa2l0LWZvci1VSS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUF2b2lkLWJ1aWxkaW5nLWRvY3MucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjJiNDRhZTFkOGNkODk5NDE3Mjk0YTljNDUwOWQ3ODcwIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiMDU0ZWViZTJhZmI2ZmUzYzA2YWM4YzQ2YmMwNDVjNDJmNjc1ZDRmZDY0ZTZmMTZjYmM2MDJkNWM3Y2UyN2JlYyIKKworQVVUT1RPT0xTX0FVWERJUiA9ICIke1N9L2J1aWxkLWF1eCIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLWNvbXBpbGUtd2FybmluZ3MiCisKK1BBQ0tBR0VDT05GSUcgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zX2FueSgnRElTVFJPX0ZFQVRVUkVTJywgJyR7R1RLM0RJU1RST0ZFQVRVUkVTfScsICdndGsnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1tndGtdID0gIi0tZW5hYmxlLWd0aywtLWRpc2FibGUtZ3RrLGd0ayszIgorUEFDS0FHRUNPTkZJR1twb2xraXRdID0gIi0tZW5hYmxlLXBvbGtpdCwtLWRpc2FibGUtcG9sa2l0LHBvbGtpdCBkYnVzIgorCitTT0xJQlMgPSAiLnNvIgorRklMRVNfU09MSUJTREVWID0gIiIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3BvbGtpdCcsICdzeXNwcm9mMi5zZXJ2aWNlJywgJycsIGQpfSIKKworIyBXZSBkbyBub3QgeWV0IHdvcmsgZm9yIGFhcmNoNjQuCitDT01QQVRJQkxFX0hPU1QgPSAiXig/IWFhcmNoNjQpLioiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwLW5hdGl2ZV9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwLW5hdGl2ZV9naXQuYmIKaW5kZXggYzNkYTc3Yy4uMTljYzFjZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC1uYXRpdmVfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAtbmF0aXZlX2dpdC5iYgpAQCAtMyw1ICszLDQgQEAKIAogaW5oZXJpdCBuYXRpdmUKIAotUk1fV09SS19FWENMVURFX0lURU1TICs9ICJyZWNpcGUtc3lzcm9vdC1uYXRpdmUiCiBhZGR0YXNrIGFkZHRvX3JlY2lwZV9zeXNyb290IGFmdGVyIGRvX3BvcHVsYXRlX3N5c3Jvb3QgYmVmb3JlIGRvX2J1aWxkCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwLzAwMDEtc3RhcHJ1bi1zdGFwYnBmLWRvbi10LXN1cHBvcnQtaW5zdGFsbGluZy1hLW5vbi1yb290LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC8wMDAxLXN0YXBydW4tc3RhcGJwZi1kb24tdC1zdXBwb3J0LWluc3RhbGxpbmctYS1ub24tcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjExNjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC8wMDAxLXN0YXBydW4tc3RhcGJwZi1kb24tdC1zdXBwb3J0LWluc3RhbGxpbmctYS1ub24tcm9vdC5wYXRjaApAQCAtMCwwICsxLDYyIEBACitGcm9tIDNlMTNhMDA2ZmUzZGZmOTQ4OTI2OTI3NDA5M2JmODY4NTMyMDM2ZTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUdWUsIDUgU2VwIDIwMTcgMTY6MDI6NTUgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gc3RhcHJ1bi9zdGFwYnBmOiBkb24ndCBzdXBwb3J0IGluc3RhbGxpbmcgYSBub24tcm9vdAorCitTaW5jZSB3ZSBhcmUgaW4gYSBrbm93biBlbnZpcm9ubWVudCBhbmQgaW5zdGFsbGluZyBhcyByb290IGFuZAorZXhwZWN0IHRvIGJlIHJ1bm5pbmcgYXMgcm9vdCwgZG9uJ3QgY3JlYXRlIHRoZSBncm91cCBvciBjaG1vZAordGhlIGJpbmFyaWVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW0VtYmVkZGVkXQorU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorLS0tCisgc3RhcGJwZi9NYWtlZmlsZS5hbSB8IDE0ICsrKysrKystLS0tLS0tCisgc3RhcHJ1bi9NYWtlZmlsZS5hbSB8IDEyICsrKysrKy0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zdGFwYnBmL01ha2VmaWxlLmFtIGIvc3RhcGJwZi9NYWtlZmlsZS5hbQoraW5kZXggNDIxYjA0NGVmLi5mN2RhZWIyYjIgMTAwNjQ0CistLS0gYS9zdGFwYnBmL01ha2VmaWxlLmFtCisrKysgYi9zdGFwYnBmL01ha2VmaWxlLmFtCitAQCAtMzksMTEgKzM5LDExIEBAIGdpdF92ZXJzaW9uLnN0YW1wIC4uL2dpdF92ZXJzaW9uLmg6CisgCisgIyBXaHkgdGhlICJpZCAtdSIgY29uZGl0aW9uPyAgVGhpcyB3YXksIGFuIHVucHJpdmlsZWdlZCB1c2VyIGNhbiBydW4KKyAjIG1ha2UgaW5zdGFsbCwgYW5kIGhhdmUgInN1ZG8gc3RhcCAuLi4uIiBvciAic3VkbyBzdGFwYnBmIC4uLi4iIHdvcmsgbGF0ZXIuCistaW5zdGFsbC1leGVjLWhvb2s6CistCWlmIFsgYGlkIC11YCAtZXEgMCBdOyB0aGVuIFwKKy0JCWdldGVudCBncm91cCBzdGFwdXNyID4vZGV2L251bGwgfHwgZ3JvdXBhZGQgLWcgMTU2IC1yIHN0YXB1c3IgMj4vZGV2L251bGwgfHwgZ3JvdXBhZGQgLXIgc3RhcHVzcjsgXAorLQkJZ2V0ZW50IGdyb3VwIHN0YXB1c3IgPi9kZXYvbnVsbCBcCistCQkmJiBjaGdycCBzdGFwdXNyICIkKERFU1RESVIpJChiaW5kaXIpL3N0YXBicGYiIFwKKy0JCSYmIGNobW9kIDA0MTEwICIkKERFU1RESVIpJChiaW5kaXIpL3N0YXBicGYiOyBcCistCWZpCisrI2luc3RhbGwtZXhlYy1ob29rOgorKyMJaWYgWyBgaWQgLXVgIC1lcSAwIF07IHRoZW4gXAorKyMJCWdldGVudCBncm91cCBzdGFwdXNyID4vZGV2L251bGwgfHwgZ3JvdXBhZGQgLWcgMTU2IC1yIHN0YXB1c3IgMj4vZGV2L251bGwgfHwgZ3JvdXBhZGQgLXIgc3RhcHVzcjsgXAorKyMJCWdldGVudCBncm91cCBzdGFwdXNyID4vZGV2L251bGwgXAorKyMJCSYmIGNoZ3JwIHN0YXB1c3IgIiQoREVTVERJUikkKGJpbmRpcikvc3RhcGJwZiIgXAorKyMJCSYmIGNobW9kIDA0MTEwICIkKERFU1RESVIpJChiaW5kaXIpL3N0YXBicGYiOyBcCisrIwlmaQorIGVuZGlmCitkaWZmIC0tZ2l0IGEvc3RhcHJ1bi9NYWtlZmlsZS5hbSBiL3N0YXBydW4vTWFrZWZpbGUuYW0KK2luZGV4IDQwNzNhYTAxYy4uMjkyNWUzNGMzIDEwMDY0NAorLS0tIGEvc3RhcHJ1bi9NYWtlZmlsZS5hbQorKysrIGIvc3RhcHJ1bi9NYWtlZmlsZS5hbQorQEAgLTcyLDkgKzcyLDkgQEAgZ2l0X3ZlcnNpb24uc3RhbXAgLi4vZ2l0X3ZlcnNpb24uaDoKKyAKKyAjIFdoeSB0aGUgImlkIC11IiBjb25kaXRpb24/ICBUaGlzIHdheSwgYW4gdW5wcml2aWxlZ2VkIHVzZXIgY2FuIHJ1bgorICMgbWFrZSBpbnN0YWxsLCBhbmQgaGF2ZSAic3VkbyBzdGFwIC4uLi4iIG9yICJzdWRvIHN0YXBydW4gLi4uLiIgd29yayBsYXRlci4KKy1pbnN0YWxsLWV4ZWMtaG9vazoKKy0JaWYgWyBgaWQgLXVgIC1lcSAwIF07IHRoZW4gXAorLQkJZ2V0ZW50IGdyb3VwIHN0YXB1c3IgPi9kZXYvbnVsbCB8fCBncm91cGFkZCAtZyAxNTYgLXIgc3RhcHVzciAyPi9kZXYvbnVsbCB8fCBncm91cGFkZCAtciBzdGFwdXNyOyBcCistCQlnZXRlbnQgZ3JvdXAgc3RhcHVzciA+L2Rldi9udWxsICYmIGNoZ3JwIHN0YXB1c3IgIiQoREVTVERJUikkKGJpbmRpcikvc3RhcHJ1biI7IFwKKy0JCWNobW9kIDA0MTEwICIkKERFU1RESVIpJChiaW5kaXIpL3N0YXBydW4iOyBcCistCWZpCisrI2luc3RhbGwtZXhlYy1ob29rOgorKyMJaWYgWyBgaWQgLXVgIC1lcSAwIF07IHRoZW4gXAorKyMJCWdldGVudCBncm91cCBzdGFwdXNyID4vZGV2L251bGwgfHwgZ3JvdXBhZGQgLWcgMTU2IC1yIHN0YXB1c3IgMj4vZGV2L251bGwgfHwgZ3JvdXBhZGQgLXIgc3RhcHVzcjsgXAorKyMJCWdldGVudCBncm91cCBzdGFwdXNyID4vZGV2L251bGwgJiYgY2hncnAgc3RhcHVzciAiJChERVNURElSKSQoYmluZGlyKS9zdGFwcnVuIjsgXAorKyMJCWNobW9kIDA0MTEwICIkKERFU1RESVIpJChiaW5kaXIpL3N0YXBydW4iOyBcCisrIwlmaQorLS0gCisyLjExLjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcF9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwX2dpdC5iYgppbmRleCBiM2ZkOTczLi40NzViMjA3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwX2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwX2dpdC5iYgpAQCAtMSw0ICsxLDUgQEAKIFNVTU1BUlkgPSAiU2NyaXB0LWRpcmVjdGVkIGR5bmFtaWMgdHJhY2luZyBhbmQgcGVyZm9ybWFuY2UgYW5hbHlzaXMgdG9vbCBmb3IgTGludXgiCitIT01FUEFHRSA9ICJodHRwczovL3NvdXJjZXdhcmUub3JnL3N5c3RlbXRhcC8iCiAKIHJlcXVpcmUgc3lzdGVtdGFwX2dpdC5pbmMKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcF9naXQuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcF9naXQuaW5jCmluZGV4IGE2YWVkZDMuLjNkYzY4OGEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXBfZ2l0LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwX2dpdC5pbmMKQEAgLTEsNiArMSw2IEBACiBMSUNFTlNFID0gIkdQTHYyIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCi1TUkNSRVYgPSAiYjhlYTM1MGRjMTNhZGI2MTkwZDkwNDRhNWI4MDExMGE0YzQ0MTI3MCIKK1NSQ1JFViA9ICI0NWQwZTdhMDlhMTVhMjEwNzhkMGViZjJkYjUxNzVlZDllODcwMTRlIgogUFYgPSAiMy4xIgogCiBTUkNfVVJJID0gImdpdDovL3NvdXJjZXdhcmUub3JnL2dpdC9zeXN0ZW10YXAuZ2l0IFwKQEAgLTEyLDcgKzEyLDggQEAKICAgICAgICAgICAgZmlsZTovLzAwMDEtRG8tbm90LWxldC1jb25maWd1cmUtd3JpdGUtYS1weXRob24tbG9jYXRpb24taW50by10aC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLUluc3RhbGwtcHl0aG9uLW1vZHVsZXMtdG8tY29ycmVjdC1saWJyYXJ5LWRpci5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWJ1aWxkcnVuLXJlbW92ZS1xdW90ZXMtYXJvdW5kLUktaW5jbHVkZS1saW5lLnBhdGNoIFwKLSAgICAgICAgICAiCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXN0YXBydW4tc3RhcGJwZi1kb24tdC1zdXBwb3J0LWluc3RhbGxpbmctYS1ub24tcm9vdC5wYXRjaCBcCisgICAgICAgICAgICIKIAogIyBzeXN0ZW10YXAgZG9lc24ndCBzdXBwb3J0IG1pcHMKIENPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0fGkuODZ8cG93ZXJwY3xhcm18YWFyY2g2NCkuKi1saW51eCcKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3RyYWNlLWNtZC9rZXJuZWxzaGFya19naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQva2VybmVsc2hhcmtfZ2l0LmJiCmluZGV4IDU2MzE4MmMuLjlhNWU4MDAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3RyYWNlLWNtZC9rZXJuZWxzaGFya19naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL2tlcm5lbHNoYXJrX2dpdC5iYgpAQCAtMTUsNyArMTUsNyBAQAogRVhUUkFfT0VNQUtFID0gIlwKICAgICAncHJlZml4PSR7cHJlZml4fScgXAogICAgICdiaW5kaXJfcmVsYXRpdmU9JHtAb2UucGF0aC5yZWxhdGl2ZShwcmVmaXgsIGJpbmRpcil9JyBcCi0gICAgJ2xpYmRpcj0ke0BvZS5wYXRoLnJlbGF0aXZlKHByZWZpeCwgbGliZGlyKX0nIFwKKyAgICAnbGliZGlyPSR7bGliZGlyfScgXAogICAgIE5PX1BZVEhPTj0xIFwKICAgICBndWkgXAogIgpAQCAtMjgsNSArMjgsNiBAQAogICAgIG9lX3J1bm1ha2UgREVTVERJUj0iJHtEfSIgaW5zdGFsbF9ndWkKICAgICBybSAke0R9JHtiaW5kaXJ9L3RyYWNlLWNtZAogICAgIHJtIC1yZiAke0R9JHtsaWJkaXJ9L3RyYWNlLWNtZAorICAgIHJtIC1yZiAke0R9JHtzeXNjb25mZGlyfS9iYXNoX2NvbXBsZXRpb24uZC90cmFjZS1jbWQuYmFzaAogICAgIHJtZGlyICR7RH0ke2xpYmRpcn0KIH0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3RyYWNlLWNtZC90cmFjZS1jbWQuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL3RyYWNlLWNtZC5pbmMKaW5kZXggM2FkMDZmYS4uMDAyZWU2NSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL3RyYWNlLWNtZC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL3RyYWNlLWNtZC5pbmMKQEAgLTEsNSArMSw1IEBACi1TUkNSRVYgPSAiOWJlNWQ3NDgwNTgzMGEyOTE2MTVmMmYzNGEyN2M5MDNmNmEzN2IxZSIKLVBWID0gIjIuNiIKK1NSQ1JFViA9ICIwMjE3MTBlMTA3M2ZlMjAzMzQxYjQyN2NkMWE0YmFjNTc3ZWM4OTljIgorUFYgPSAiMi42LjEiCiAKIGluaGVyaXQgcGtnY29uZmlnCiAKQEAgLTcsNiArNyw3IEBACiAKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3Jvc3RlZHQvdHJhY2UtY21kLmdpdDticmFuY2g9dHJhY2UtY21kLXN0YWJsZS12Mi42IFwKICAgICAgICAgICAgZmlsZTovL2Jsa3RyYWNlLWFwaS1jb21wYXRpYmlsaXR5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtSW5jbHVkZS1saW1pdHMuaC1zby10aGF0LVBBVEhfTUFYLWlzLWRlZmluZWQtYW4taXNzdS5wYXRjaCBcCiAiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQvdHJhY2UtY21kLzAwMDEtSW5jbHVkZS1saW1pdHMuaC1zby10aGF0LVBBVEhfTUFYLWlzLWRlZmluZWQtYW4taXNzdS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3RyYWNlLWNtZC90cmFjZS1jbWQvMDAwMS1JbmNsdWRlLWxpbWl0cy5oLXNvLXRoYXQtUEFUSF9NQVgtaXMtZGVmaW5lZC1hbi1pc3N1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NjMwODMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQvdHJhY2UtY21kLzAwMDEtSW5jbHVkZS1saW1pdHMuaC1zby10aGF0LVBBVEhfTUFYLWlzLWRlZmluZWQtYW4taXNzdS5wYXRjaApAQCAtMCwwICsxLDI3IEBACitGcm9tIDk0ODhmOTJjMWQwYzc5MzFjM2UxNzk1MGQxZjllZWEyYWViM2UyYmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTQgSnVuIDIwMTcgMTU6NTY6MTggKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gSW5jbHVkZSBsaW1pdHMuaCBzbyB0aGF0IFBBVEhfTUFYIGlzIGRlZmluZWQgKGFuIGlzc3VlIG9uCisgbXVzbCkuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CistLS0KKyB0cmFjZS1saXN0ZW4uYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvdHJhY2UtbGlzdGVuLmMgYi90cmFjZS1saXN0ZW4uYworaW5kZXggMTdmZjlkOC4uODM4ZDZiYyAxMDA2NDQKKy0tLSBhL3RyYWNlLWxpc3Rlbi5jCisrKysgYi90cmFjZS1saXN0ZW4uYworQEAgLTMxLDYgKzMxLDcgQEAKKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8c2lnbmFsLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPGxpbWl0cy5oPgorIAorICNpbmNsdWRlICJ0cmFjZS1sb2NhbC5oIgorICNpbmNsdWRlICJ0cmFjZS1tc2cuaCIKKy0tIAorMi4xMS4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3RyYWNlLWNtZC90cmFjZS1jbWRfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL3RyYWNlLWNtZF9naXQuYmIKaW5kZXggZGQ5YThhMC4uMjdjN2MxOSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL3RyYWNlLWNtZF9naXQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL3RyYWNlLWNtZF9naXQuYmIKQEAgLTEsMTEgKzEsMTIgQEAKIFNVTU1BUlkgPSAiVXNlciBpbnRlcmZhY2UgdG8gRnRyYWNlIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdC5rZXJuZWwub3JnLyIKIExJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKIAogcmVxdWlyZSB0cmFjZS1jbWQuaW5jCiAKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIFwKICAgICAgICAgICAgICAgICAgICAgZmlsZTovL3RyYWNlLWNtZC5jO2JlZ2lubGluZT02O2VuZGxpbmU9ODttZDU9MmMyMmM5NjVhNjQ5ZGRkNzk3M2Q3OTEzYzU2MzRhNWUgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWJiYjQ2MTIxMWEzM2IxMzRkNDJlZDVlZTgwMmIzN2ZmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT1lZGIxOTVmZTUzOGU0NTUyYzFmNmNhMGZkN2JmNGYwYSBcCiAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90cmFjZS1pbnB1dC5jO2JlZ2lubGluZT01O2VuZGxpbmU9ODttZDU9M2VjODJmNDNiYmUwY2ZiNTk1MWZmNDE0ZWY0ZDQ0ZDAgXAogIgogCkBAIC0xNyw3ICsxOCw3IEBACiAgICAgJ2ltZ19pbnN0YWxsPSR7ZGF0YWRpcn0va2VybmVsc2hhcmsvaHRtbC9pbWFnZXMnIFwKICAgICBcCiAgICAgJ2JpbmRpcl9yZWxhdGl2ZT0ke0BvZS5wYXRoLnJlbGF0aXZlKHByZWZpeCwgYmluZGlyKX0nIFwKLSAgICAnbGliZGlyPSR7QG9lLnBhdGgucmVsYXRpdmUocHJlZml4LCBsaWJkaXIpfScgXAorICAgICdsaWJkaXI9JHtsaWJkaXJ9JyBcCiAgICAgXAogICAgIE5PX1BZVEhPTj0xIFwKICIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9saWJwbmcvbGlicG5nMTJfMS4yLjU3LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L2xpYnBuZy9saWJwbmcxMl8xLjIuNTcuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNzRmNWYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L2xpYnBuZy9saWJwbmcxMl8xLjIuNTcuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi1TVU1NQVJZID0gIlBORyBpbWFnZSBmb3JtYXQgZGVjb2RpbmcgbGlicmFyeSIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cubGlicG5nLm9yZy8iCi1TRUNUSU9OID0gImxpYnMiCi1MSUNFTlNFID0gIkxpYnBuZyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTU5N2I4YTkxOTk0YTNlMjdhZTZhYTc5YmYwMjY3N2Q5IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3BuZy5oO2JlZ2lubGluZT0xOTtlbmRsaW5lPTEwOTttZDU9MTY2NDA2Mzk3NzE4OTI1YjY2MGYwMDMzZjc1NThlZjciCi1ERVBFTkRTID0gInpsaWIiCi0KLVBOID0gImxpYnBuZzEyIgotUyA9ICIke1dPUktESVJ9L2xpYnBuZy0ke1BWfSIKLQotU1JDX1VSSSA9ICIke0dFTlRPT19NSVJST1J9L2xpYnBuZy0ke1BWfS50YXIueHoiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIzMDcwNTJlNWU4YWY5N2I4MmIxN2I2NGZiMWIzNjc3YSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIwZjQ2MjBlMTFmYTI4M2ZlZGFmYjQ3NDQyN2M4ZTk2YmYxNDk1MTFhMTgwNGJkYzQ3MzUwOTYzYWU1Y2Y1NGQ4IgotCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saWJwbmcvZmlsZXMvbGlicG5nMTIvIgotVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiL2xpYnBuZzEyLyg/UDxwdmVyPihcZCtbXC5cLV9dKikrKS8iCi0KLUJJTkNPTkZJR19HTE9CID0gIiR7UE59LWNvbmZpZyIKLQotaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnIHBrZ2NvbmZpZwotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQkjIFRoZSBmb2xsb3cgbGluayBmaWxlcyBsaW5rIHRvIGNvcnJlc3BvbmRpbmcgcG5nMTIqLmggYW5kIGxpYnBuZzEyKiBmaWxlcwotCSMgVGhleSBjb25mbGljdCB3aXRoIGhpZ2hlciB2ZXJpc29uLCBzbyBkcm9wIHRoZW0KLQlybSAke0R9LyR7aW5jbHVkZWRpcn0vcG5nLmgKLQlybSAke0R9LyR7aW5jbHVkZWRpcn0vcG5nY29uZi5oCi0KLQlybSAke0R9LyR7bGliZGlyfS9saWJwbmcubGEKLQlybSAke0R9LyR7bGliZGlyfS9saWJwbmcuc28KLQlybSAke0R9LyR7bGliZGlyfS9saWJwbmcuYSB8fCB0cnVlCi0Jcm0gJHtEfS8ke2xpYmRpcn0vcGtnY29uZmlnL2xpYnBuZy5wYwotCi0Jcm0gJHtEfS8ke2JpbmRpcn0vbGlicG5nLWNvbmZpZwotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliY2xhc3MtaXNhLXBlcmxfMC4zNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmNsYXNzLWlzYS1wZXJsXzAuMzYuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5Mzg0MWQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliY2xhc3MtaXNhLXBlcmxfMC4zNi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLVNVTU1BUlkgPSAiUGVybCBtb2R1bGUgZm9yIHJlcG9ydGluZyB0aGUgc2VhcmNoIHBhdGggZm9yIGEgY2xhc3MncyBJU0EgdHJlZSIKLURFU0NSSVBUSU9OID0gIlN1cHBvc2UgeW91IGhhdmUgYSBjbGFzcyAobGlrZSBGb29kOjpGaXNoOjpGaXNoc3RpY2spIHRoYXQgaXMgZGVyaXZlZCwgXAotdmlhIGl0cyBASVNBLCBmcm9tIG9uZSBvciBtb3JlIHN1cGVyY2xhc3NlcyAoYXMgRm9vZDo6RmlzaDo6RmlzaHN0aWNrIGlzIGZyb20gRm9vZDo6RmlzaCxcCi1MaWZlOjpGdW5ndXMsIGFuZCBDaGVtaWNhbHMpLCBhbmQgc29tZSBvZiB0aG9zZSBzdXBlcmNsYXNzZXMgbWF5IHRoZW1zZWx2ZXMgZWFjaCBiZVwKLWRlcml2ZWQsIHZpYSBpdHMgQElTQSwgZnJvbSBvbmUgb3IgbW9yZSBzdXBlcmNsYXNzZXMgKGFzIGFib3ZlKS5cCi1cCi1XaGVuLCB0aGVuLCB5b3UgY2FsbCBhIG1ldGhvZCBpbiB0aGF0IGNsYXNzICgkZmlzaHN0aWNrLT5jYWxvcmllcyksIFBlcmwgZmlyc3Qgc2VhcmNoZXNcCi10aGVyZSBmb3IgdGhhdCBtZXRob2QsIGJ1dCBpZiBpdCdzIG5vdCB0aGVyZSwgaXQgZ29lcyBzZWFyY2hpbmcgaW4gaXRzIHN1cGVyY2xhc3NlcywgYW5kXAotc28gb24sIGluIGEgZGVwdGgtZmlyc3QgKG9yIG1heWJlICJoZWlnaHQtZmlyc3QiIGlzIHRoZSB3b3JkKSBzZWFyY2guIEluIHRoZSBhYm92ZSBleGFtcGxlLFwKLWl0J2QgZmlyc3QgbG9vayBpbiBGb29kOjpGaXNoLCB0aGVuIEZvb2QsIHRoZW4gTWF0dGVyLCB0aGVuIExpZmU6OkZ1bmd1cywgdGhlbiBMaWZlLCB0aGVuXAotQ2hlbWljYWxzLlwKLVwKLVRoaXMgbGlicmFyeSwgQ2xhc3M6OklTQSwgcHJvdmlkZXMgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHRoYXQgbGlzdCAtLSB0aGUgbGlzdFwKLShpbiBvcmRlcikgb2YgbmFtZXMgb2YgY2xhc3NlcyBQZXJsIHdvdWxkIHNlYXJjaCB0byBmaW5kIGEgbWV0aG9kLCB3aXRoIG5vIGR1cGxpY2F0ZXMuIgotCi1IT01FUEFHRSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL2Rpc3QvQ2xhc3MtSVNBLyIKLVNFQ1RJT04gPSAibGlicyIKLUxJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9MTA3O2VuZGxpbmU9MTExO21kNT02YTVjNjg0MmE2M2NmZTRkYWIxZjY2ZTIzNTBlNGQyNSIKLQotU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9TL1NNL1NNVUVMTEVSL0NsYXNzLUlTQS0ke1BWfS50YXIuZ3oiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIzYTJhZDIwM2M4ZGM4N2Q2YzlkZTE2MjE1ZDAwYWY0NyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI4ODE2ZjM0ZTlhMzhlODQ5YTEwZGY3NTYwMzBkY2NmOWZlMDYxYTE5NmMxMWFjM2ZhYWZkNzExM2M5MjliOTY0IgotCi1TID0gIiR7V09SS0RJUn0vQ2xhc3MtSVNBLSR7UFZ9IgotCi1pbmhlcml0IGNwYW4KLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJkdW1wdmFsdWUtcGVybF8xLjE3LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliZHVtcHZhbHVlLXBlcmxfMS4xNy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE3NDYxNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJkdW1wdmFsdWUtcGVybF8xLjE3LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotU1VNTUFSWSA9ICJQZXJsIG1vZHVsZSBmb3IgcHJvdmlkZXMgc2NyZWVuIGR1bXAgb2YgUGVybCBkYXRhIgotCi1IT01FUEFHRSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL35mbG9yYS9EdW1wdmFsdWUvIgotU0VDVElPTiA9ICJsaWJzIgotTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZjczNmJlYzVhZGExZmM1ZTM5YjJhOGU3ZTA2YmJjYmIiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvRi9GTC9GTE9SQS9EdW1wdmFsdWUtJHtQVn0udGFyLmd6IgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNmVkZTlmNjkzZDRhOWM0NTU1NTQxY2IxYTFjYzIwMDYiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWVhNzQ2MDZiNTQ1Zjc2OWE3ODdlYzJhZTIyOTU0OWEyYWQwYThlM2NkNGIxNGVmZjJjZTM4NDE4MzZiM2JkYiIKLQotUyA9ICIke1dPUktESVJ9L0R1bXB2YWx1ZS0ke1BWfSIKLQotaW5oZXJpdCBjcGFuCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliZW52LXBlcmxfMS4wNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmVudi1wZXJsXzEuMDQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkOGUxMTUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliZW52LXBlcmxfMS4wNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLVNVTU1BUlkgPSAiUGVybCBtb2R1bGUgdGhhdCBpbXBvcnRzIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcyBzY2FsYXJzIG9yIGFycmF5cyIKLURFU0NSSVBUSU9OID0gIlBlcmwgbWFpbnRhaW5zIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBhIHNwZWNpYWwgaGFzaCBuYW1lZCAlRU5WLiBcCi1Gb3Igd2hlbiB0aGlzIGFjY2VzcyBtZXRob2QgaXMgaW5jb252ZW5pZW50LCB0aGUgUGVybCBtb2R1bGUgRW52IGFsbG93cyBlbnZpcm9ubWVudCBcCi12YXJpYWJsZXMgdG8gYmUgdHJlYXRlZCBhcyBzY2FsYXIgb3IgYXJyYXkgdmFyaWFibGVzLiIKLQotSE9NRVBBR0UgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9+ZmxvcmEvRW52LyIKLVNFQ1RJT04gPSAibGlicyIKLUxJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTc2YzFjYmYxOGRiNTZiMzM0MGQ5MWNiOTQ3OTQzYmQzIgotCi1TUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL0YvRkwvRkxPUkEvRW52LSR7UFZ9LnRhci5neiIKLQotU1JDX1VSSVttZDVzdW1dID0gImZkYmE1YzA2OTBlNjY5NzJjOTZmZWUxMTJjZjVmMjVjIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImQ5NGEzZDQxMmRmMjQ2YWZkYzMxYTIxOTljYmQ4YWU5MTUxNjdhM2Y0Njg0ZjdiNzAxNGNlMTIwMDI1MWViYjAiCi0KLVMgPSAiJHtXT1JLRElSfS9FbnYtJHtQVn0iCi0KLWluaGVyaXQgY3BhbgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmZpbGUtY2hlY2t0cmVlLXBlcmxfNC40MS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmZpbGUtY2hlY2t0cmVlLXBlcmxfNC40MS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2UzN2M3Mi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJmaWxlLWNoZWNrdHJlZS1wZXJsXzQuNDEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi1TVU1NQVJZID0gIlBlcmwgbW9kdWxlIHRoYXQgcnVuIG1hbnkgZmlsZXRlc3QgY2hlY2tzIG9uIGEgdHJlZSIKLURFU0NSSVBUSU9OID0gIlRoZSB2YWxpZGF0ZSgpIHJvdXRpbmUgdGFrZXMgYSBzaW5nbGUgbXVsdGlsaW5lIHN0cmluZyBjb25zaXN0aW5nIFwKLW9mIGRpcmVjdGl2ZXMsIGVhY2ggY29udGFpbmluZyBhIGZpbGVuYW1lIHBsdXMgYSBmaWxlIHRlc3QgdG8gdHJ5IG9uIGl0LiAoVGhlIGZpbGUgXAotdGVzdCBtYXkgYWxzbyBiZSBhICJjZCIsIGNhdXNpbmcgc3Vic2VxdWVudCByZWxhdGl2ZSBmaWxlbmFtZXMgdG8gYmUgaW50ZXJwcmV0ZWQgXAotcmVsYXRpdmUgdG8gdGhhdCBkaXJlY3RvcnkuKSBBZnRlciB0aGUgZmlsZSB0ZXN0IHlvdSBtYXkgcHV0IHx8IGRpZSB0byBtYWtlIGl0IGEgXAotZmF0YWwgZXJyb3IgaWYgdGhlIGZpbGUgdGVzdCBmYWlscy4gVGhlIGRlZmF1bHQgaXMgfHwgd2Fybi4gVGhlIGZpbGUgdGVzdCBtYXkgXAotb3B0aW9uYWxseSBoYXZlIGEgIiEnIHByZXBlbmRlZCB0byB0ZXN0IGZvciB0aGUgb3Bwb3NpdGUgY29uZGl0aW9uLiBJZiB5b3UgZG8gYSBcCi1jZCBhbmQgdGhlbiBsaXN0IHNvbWUgcmVsYXRpdmUgZmlsZW5hbWVzLCB5b3UgbWF5IHdhbnQgdG8gaW5kZW50IHRoZW0gc2xpZ2h0bHkgZm9yIFwKLXJlYWRhYmlsaXR5LiBJZiB5b3Ugc3VwcGx5IHlvdXIgb3duIGRpZSgpIG9yIHdhcm4oKSBtZXNzYWdlLCB5b3UgY2FuIHVzZSAkZmlsZSB0byBcCi1pbnRlcnBvbGF0ZSB0aGUgZmlsZW5hbWUuIFwKLVwKLUZpbGV0ZXN0cyBtYXkgYmUgYnVuY2hlZDogIi1yd3giIHRlc3RzIGZvciBhbGwgb2YgLXIsIC13LCBhbmQgLXguIE9ubHkgdGhlIGZpcnN0IGZhaWxlZCBcCi10ZXN0IG9mIHRoZSBidW5jaCB3aWxsIHByb2R1Y2UgYSB3YXJuaW5nLiBcCi1cCi1UaGUgcm91dGluZSByZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2FybmluZ3MgaXNzdWVkLiIKLQotSE9NRVBBR0UgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9+ZmxvcmEvRmlsZS1DaGVja1RyZWUvIgotU0VDVElPTiA9ICJsaWJzIgotTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9YzZmY2FjYzVkZjgwZTAzNzA2MDMwMGE3ZjRiOTNiZjkiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvRi9GTC9GTE9SQS9GaWxlLUNoZWNrVHJlZS0ke1BWfS50YXIuZ3oiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI1MTljODJhYTdlNWI3Zjc1MmI0ZGExNGE2YzhhZDc0MCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJmYzk5YWI2YmI1YWY0NjY0ODMyNzE1OTc0YjVhMTllMzI4MDcxZGM5MjAyYWI3MmU1ZDVhNTk0ZWJkNDZhNzI5IgotCi1TID0gIiR7V09SS0RJUn0vRmlsZS1DaGVja1RyZWUtJHtQVn0iCi0KLWluaGVyaXQgY3BhbgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmkxOG4tY29sbGF0ZS1wZXJsXzEuMDIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJpMThuLWNvbGxhdGUtcGVybF8xLjAyLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTgzOWUwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmkxOG4tY29sbGF0ZS1wZXJsXzEuMDIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1TVU1NQVJZID0gIlBlcmwgbW9kdWxlIHRoYXQgY29tcGFyZSA4LWJpdCBzY2FsYXIgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgbG9jYWxlIgotREVTQ1JJUFRJT04gPSAiVGhpcyBtb2R1bGUgcHJvdmlkZXMgeW91IHdpdGggb2JqZWN0cyB0aGF0IHdpbGwgY29sbGF0ZSBhY2NvcmRpbmcgdG8gXAoteW91ciBuYXRpb25hbCBjaGFyYWN0ZXIgc2V0LCBwcm92aWRlZCB0aGF0IHRoZSBQT1NJWCBzZXRsb2NhbGUoKSBmdW5jdGlvbiBpcyBzdXBwb3J0ZWQgXAotb24geW91ciBzeXN0ZW0uIgotCi1IT01FUEFHRSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL35mbG9yYS9JMThOLUNvbGxhdGUvIgotU0VDVElPTiA9ICJsaWJzIgotTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZmY2ZDYyOTE0NGE2ZWMxZWE4YzMwMGY3NTc2MDE4NGYiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvRi9GTC9GTE9SQS9JMThOLUNvbGxhdGUtJHtQVn0udGFyLmd6IgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNzJkZGI2ZDFjNTljZmRmMzFhYTNiMDQ3OTliODZhZjAiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTE3NDUwNmJjOTAzZWRhODk2OTAzOTRlM2Y0NTU1OGFiN2UwMTMxMTQyMjc4OTZkODU2OWQ2MTY0NjQ4ZmUzNyIKLQotUyA9ICIke1dPUktESVJ9L0kxOE4tQ29sbGF0ZS0ke1BWfSIKLQotaW5oZXJpdCBjcGFuCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGlicG9kLXBsYWluZXItcGVybF8xLjA0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGlicG9kLXBsYWluZXItcGVybF8xLjA0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2U1OGYwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYnBvZC1wbGFpbmVyLXBlcmxfMS4wNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLVNVTU1BUlkgPSAiUGVybCBleHRlbnNpb24gZm9yIGNvbnZlcnRpbmcgUG9kIHRvIG9sZC1zdHlsZSBQb2QiCi1ERVNDUklQVElPTiA9ICJQb2Q6OlBsYWluZXIgdXNlcyBQb2Q6OlBhcnNlciB3aGljaCB0YWtlcyBQb2Qgd2l0aCB0aGUgKG5ldykgJ0M8PCAuLiA+PicgXAotY29uc3RydWN0cyBhbmQgcmV0dXJucyB0aGUgb2xkKGVyKSBzdHlsZSB3aXRoIGp1c3QgJ0M8Pic7ICc8JyBhbmQgJz4nIGFyZSByZXBsYWNlZCBieSBcCi0nRTxsdD4nIGFuZCAnRTxndD4nLiBcCi1cCi1UaGlzIGNhbiBiZSB1c2VkIHRvIHByZS1wcm9jZXNzIFBvZCBiZWZvcmUgdXNpbmcgdG9vbHMgd2hpY2ggZG8gbm90IHJlY29nbmlzZSB0aGUgbmV3IHN0eWxlIFBvZHMuIgotCi1IT01FUEFHRSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL2Rpc3QvUG9kLVBsYWluZXIvIgotU0VDVElPTiA9ICJsaWJzIgotTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0yNzttZDU9MjI3Y2Y4Mzk3MGZjNjEyNjQ4NDU4MjVkOWQyYmY2ZjgiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvUi9STS9STUJBUktFUi9Qb2QtUGxhaW5lci0ke1BWfS50YXIuZ3oiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJmNTAyZWFjZDFhNDA4OTRiOWRmZWE1NWZjMmNkNWU3ZCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIxYmJmYmY3ZDFkNDg3MWU1YTgzYmFiMjEzN2UyMmQwODkwNzgyMDY4MTUxOTBlYjFkNWMxMjYwYTM0OTk0NTZmIgotCi1TID0gIiR7V09SS0RJUn0vUG9kLVBsYWluZXItJHtQVn0iCi0KLWluaGVyaXQgY3BhbgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliLzAwMDEtdWNtLXBhcnNlci1uZWVkcy1saW1pdHMuaC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliLzAwMDEtdWNtLXBhcnNlci1uZWVkcy1saW1pdHMuaC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVkYWY0ZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYi8wMDAxLXVjbS1wYXJzZXItbmVlZHMtbGltaXRzLmgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi1Gcm9tIDAwNWFjOWQyZmEwMDA5MTJjOGZiODI1NzAyMGEwNDcxYjFjNjE3NmMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBHdXN0YXZvIFphY2FyaWFzIDxndXN0YXZvQHphY2FyaWFzLmNvbS5hcj4KLURhdGU6IFdlZCwgMjEgRGVjIDIwMTYgMTk6NDY6MzQgLTAzMDAKLVN1YmplY3Q6IFtQQVRDSF0gdWNtOiBwYXJzZXIgbmVlZHMgbGltaXRzLmgKLQotSXQncyB1c2luZyBQQVRIX01BWCB3aGljaCBpcyBkZWZpbmVkIHRoZXJlLCBvdGhlcndpc2UgdGhlIGJ1aWxkIGZhaWxzIG9uCi1tdXNsIGxpYmMuCi0KLVNpZ25lZC1vZmYtYnk6IEd1c3Rhdm8gWmFjYXJpYXMgPGd1c3Rhdm9AemFjYXJpYXMuY29tLmFyPgotU2lnbmVkLW9mZi1ieTogVGFrYXNoaSBJd2FpIDx0aXdhaUBzdXNlLmRlPgotCi1VcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkIFtleHBlY3RlZCBpbiAxLjEuNF0KLQotU2lnbmVkLW9mZi1ieTogVGFudSBLYXNraW5lbiA8dGFudWtAaWtpLmZpPgotLS0tCi0gc3JjL3VjbS9wYXJzZXIuYyB8IDEgKwotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQotCi1kaWZmIC0tZ2l0IGEvc3JjL3VjbS9wYXJzZXIuYyBiL3NyYy91Y20vcGFyc2VyLmMKLWluZGV4IGM5ODM3M2E5Li5mNTIwYWJjNSAxMDA2NDQKLS0tLSBhL3NyYy91Y20vcGFyc2VyLmMKLSsrKyBiL3NyYy91Y20vcGFyc2VyLmMKLUBAIC0zMiw2ICszMiw3IEBACi0gCi0gI2luY2x1ZGUgInVjbV9sb2NhbC5oIgotICNpbmNsdWRlIDxkaXJlbnQuaD4KLSsjaW5jbHVkZSA8bGltaXRzLmg+Ci0gCi0gLyoqIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb250YWluaW5nIHRoZSBVQ00gZGlyZWN0b3J5ICovCi0gI2RlZmluZSBBTFNBX0NPTkZJR19VQ01fVkFSICJBTFNBX0NPTkZJR19VQ00iCi0tLSAKLTIuMTEuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYl8xLjEuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliXzEuMS4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTFhMDM2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliXzEuMS4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotU1VNTUFSWSA9ICJBTFNBIHNvdW5kIGxpYnJhcnkiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmFsc2EtcHJvamVjdC5vcmciCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9hbHNhLXByb2plY3Qub3JnL21haW4vaW5kZXgucGhwL0J1Z19UcmFja2luZyIKLVNFQ1RJT04gPSAibGlicy9tdWx0aW1lZGlhIgotTElDRU5TRSA9ICJMR1BMdjIuMSAmIEdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9zb2NrZXQuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTI2O21kNT0xMWZmODlhOGE3YTRhNjkwYTVjNzhlZmZlODE1OTU0NSIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgotCi1TUkNfVVJJID0gImZ0cDovL2Z0cC5hbHNhLXByb2plY3Qub3JnL3B1Yi9saWIvJHtCUH0udGFyLmJ6MiBcCi0gICAgICAgICAgIGZpbGU6Ly9DaGVjay1pZi13b3JkZXhwLWZ1bmN0aW9uLWlzLXN1cHBvcnRlZC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9hdm9pZC1pbmNsdWRpbmctc3lzLXBvbGwuaC1kaXJlY3RseS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLXVjbS1wYXJzZXItbmVlZHMtbGltaXRzLmgucGF0Y2ggXAotIgotU1JDX1VSSVttZDVzdW1dID0gImVlZmU1OTkyNTY3YmEwMGQ2MTEwYTU0MDY1N2FhZjVjIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcxMjgyNTAyMTg0YzU5MmMxYTAwOGUyNTZjMjJlZDBiYTU3MjhjYTY1ZTA1MjczY2ViNDgwYzcwZjUxNTk2OWMiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwotCi1yZXF1aXJlIGFsc2EtZnB1LmluYwotRVhUUkFfT0VDT05GICs9ICIke0BnZXRfYWxzYV9mcHVfc2V0dGluZyhiYiwgZCl9ICIKLQotRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtcHl0aG9uIgotCi1FWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLXdpdGgtdmVyc2lvbmVkPW5vICIKLQotUEFDS0FHRVMgPSsgImFsc2Etc2VydmVyIGxpYmFzb3VuZCBhbHNhLWNvbmYgYWxzYS1kb2MiCi1GSUxFU19saWJhc291bmQgPSAiJHtsaWJkaXJ9L2xpYmFzb3VuZC5zby4qIgotRklMRVNfYWxzYS1zZXJ2ZXIgPSAiJHtiaW5kaXJ9LyoiCi1GSUxFU19hbHNhLWNvbmYgPSAiJHtkYXRhZGlyfS9hbHNhLyIKLQotUkRFUEVORFNfbGliYXNvdW5kID0gImFsc2EtY29uZiIKLQotIyBhbHNhLWxpYiBnZXRzIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gYWxzYS1saWItZGV2IGRlcGVuZGVuY2llcywgYnV0IHRoZQotIyBhbHNhLWxpYiBwYWNrYWdlIGRvZXNuJ3QgZXhpc3QuIGxpYmFzb3VuZCBpcyB0aGUgcmVhbCBsaWJyYXJ5IHBhY2thZ2UuCi1SREVQRU5EU18ke1BOfS1kZXYgPSAibGliYXNvdW5kIgotCi0jIHVwZ3JhZGUgcGF0aAotUlBST1ZJREVTXyR7UE59LWRldiA9ICJhbHNhLWRldiIKLVJSRVBMQUNFU18ke1BOfS1kZXYgPSAiYWxzYS1kZXYiCi1SQ09ORkxJQ1RTXyR7UE59LWRldiA9ICJhbHNhLWRldiIKLQotUlBST1ZJREVTX2Fsc2EtY29uZiA9ICJhbHNhLWNvbmYtYmFzZSIKLVJSRVBMQUNFU19hbHNhLWNvbmYgPSAiYWxzYS1jb25mLWJhc2UiCi1SQ09ORkxJQ1RTX2Fsc2EtY29uZiA9ICJhbHNhLWNvbmYtYmFzZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliXzEuMS40LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYl8xLjEuNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZGVhZTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYl8xLjEuNC4xLmJiCkBAIC0wLDAgKzEsNDMgQEAKK1NVTU1BUlkgPSAiQUxTQSBzb3VuZCBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5hbHNhLXByb2plY3Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYWxzYS1wcm9qZWN0Lm9yZy9tYWluL2luZGV4LnBocC9CdWdfVHJhY2tpbmciCitTRUNUSU9OID0gImxpYnMvbXVsdGltZWRpYSIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvc29ja2V0LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yNjttZDU9MTFmZjg5YThhN2E0YTY5MGE1Yzc4ZWZmZTgxNTk1NDUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuYWxzYS1wcm9qZWN0Lm9yZy9wdWIvbGliLyR7QlB9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vQ2hlY2staWYtd29yZGV4cC1mdW5jdGlvbi1pcy1zdXBwb3J0ZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXZvaWQtaW5jbHVkaW5nLXN5cy1wb2xsLmgtZGlyZWN0bHkucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjI5ZmEzZTY5MTIyZDNjZjNlOGYwZTAxYTBjYjFkMTgzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkxYmI4NzBjMTRkMWM3YzI2OTIxMzI4NWVlZWQ4NzRmYTNkMjgxMTIwNzdkYjA2MWEzYWY4MDEwZDA4ODViNzYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCityZXF1aXJlIGFsc2EtZnB1LmluYworRVhUUkFfT0VDT05GICs9ICIke0BnZXRfYWxzYV9mcHVfc2V0dGluZyhiYiwgZCl9ICIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtcHl0aG9uIgorCitQQUNLQUdFUyA9KyAiYWxzYS1zZXJ2ZXIgbGliYXNvdW5kIGFsc2EtY29uZiBhbHNhLWRvYyIKK0ZJTEVTX2xpYmFzb3VuZCA9ICIke2xpYmRpcn0vbGliYXNvdW5kLnNvLioiCitGSUxFU19hbHNhLXNlcnZlciA9ICIke2JpbmRpcn0vKiIKK0ZJTEVTX2Fsc2EtY29uZiA9ICIke2RhdGFkaXJ9L2Fsc2EvIgorCitSREVQRU5EU19saWJhc291bmQgPSAiYWxzYS1jb25mIgorCisjIGFsc2EtbGliIGdldHMgYXV0b21hdGljYWxseSBhZGRlZCB0byBhbHNhLWxpYi1kZXYgZGVwZW5kZW5jaWVzLCBidXQgdGhlCisjIGFsc2EtbGliIHBhY2thZ2UgZG9lc24ndCBleGlzdC4gbGliYXNvdW5kIGlzIHRoZSByZWFsIGxpYnJhcnkgcGFja2FnZS4KK1JERVBFTkRTXyR7UE59LWRldiA9ICJsaWJhc291bmQiCisKKyMgdXBncmFkZSBwYXRoCitSUFJPVklERVNfJHtQTn0tZGV2ID0gImFsc2EtZGV2IgorUlJFUExBQ0VTXyR7UE59LWRldiA9ICJhbHNhLWRldiIKK1JDT05GTElDVFNfJHtQTn0tZGV2ID0gImFsc2EtZGV2IgorCitSUFJPVklERVNfYWxzYS1jb25mID0gImFsc2EtY29uZi1iYXNlIgorUlJFUExBQ0VTX2Fsc2EtY29uZiA9ICJhbHNhLWNvbmYtYmFzZSIKK1JDT05GTElDVFNfYWxzYS1jb25mID0gImFsc2EtY29uZi1iYXNlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1wbHVnaW5zXzEuMS4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1wbHVnaW5zXzEuMS4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjY4NmEwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2luc18xLjEuMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi1TVU1NQVJZID0gIkFMU0EgUGx1Z2lucyIKLUhPTUVQQUdFID0gImh0dHA6Ly9hbHNhLXByb2plY3Qub3JnIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vYWxzYS1wcm9qZWN0Lm9yZy9tYWluL2luZGV4LnBocC9CdWdfVHJhY2tpbmciCi1TRUNUSU9OID0gIm11bHRpbWVkaWEiCi0KLSMgVGhlIHByaW1hcnkgbGljZW5zZSBvZiBhbHNhLXBsdWdpbnMgaXMgTEdQTHYyLjEuCi0jCi0jIG00L2F0dHJpYnV0ZXMubTQgaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIrLiBtNC9hdHRyaWJ1dGVzLm00IGlzIHBhcnQgb2YgdGhlCi0jIGJ1aWxkIHN5c3RlbSwgYW5kIGRvZXNuJ3QgYWZmZWN0IHRoZSBsaWNlbnNpbmcgb2YgdGhlIGJ1aWxkIHJlc3VsdC4KLSMKLSMgVGhlIHNhbXBsZXJhdGUgcGx1Z2luIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyKyB0byBiZSBjb25zaXN0ZW50Ci0jIHdpdGggdGhlIGxpYnNhbXBsZXJhdGUgbGljZW5zZS4gSG93ZXZlciwgaWYgdGhlIGxpY2Vuc2VlIGhhcyBhIGNvbW1lcmNpYWwKLSMgbGljZW5zZSBmb3IgbGlic2FtcGxlcmF0ZSwgdGhlIHNhbXBsZXJhdGUgcGx1Z2luIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcwotIyBvZiBMR1BMdjIuMSBsaWtlIHRoZSByZXN0IG9mIHRoZSBwbHVnaW5zLgotTElDRU5TRSA9ICJMR1BMdjIuMSAmIEdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiXAotICAgICAgICBmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQgXAotICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEw7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKLSAgICAgICAgZmlsZTovL200L2F0dHJpYnV0ZXMubTQ7ZW5kbGluZT0zMzttZDU9YjI1OTU4ZGE0NGMwMjIzMWUzNjQxZjFiY2NlZjUzZWIgXAotICAgICAgICBmaWxlOi8vcmF0ZS9yYXRlX3NhbXBsZXJhdGUuYztlbmRsaW5lPTM1O21kNT1mZDc3YmNlODVmNGEzMzhjMGU4YWIxODQzMGI2OWZhZSBcCi0iCi0KLVNSQ19VUkkgPSAiZnRwOi8vZnRwLmFsc2EtcHJvamVjdC5vcmcvcHViL3BsdWdpbnMvJHtCUH0udGFyLmJ6MiIKLVNSQ19VUklbbWQ1c3VtXSA9ICI2OWY5ZjNlMmRlM2M5N2ZjNzFkNDk2ZTkxZTI3MWZlNSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZWE0ZDFlMDgyYzM2NTI4YTg5NmEyNTgxZTVlYjYyZDRkYzI2ODMyMzhlMzUzMDUwZDBkNjI0ZTY1ZjkwMWYxIgotCi1ERVBFTkRTICs9ICJhbHNhLWxpYiIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCi0KLVBBQ0tBR0VDT05GSUcgPz89ICJcCi0gICAgICAgIHNhbXBsZXJhdGUgXAotICAgICAgICBzcGVleGRzcCBcCi0gICAgICAgICR7QGJiLnV0aWxzLmZpbHRlcignRElTVFJPX0ZFQVRVUkVTJywgJ3B1bHNlYXVkaW8nLCBkKX0gXAotIgotUEFDS0FHRUNPTkZJR1thdmNvZGVjXSA9ICItLWVuYWJsZS1hdmNvZGVjLC0tZGlzYWJsZS1hdmNvZGVjLGxpYmF2IgotUEFDS0FHRUNPTkZJR1tqYWNrXSA9ICItLWVuYWJsZS1qYWNrLC0tZGlzYWJsZS1qYWNrLGphY2siCi1QQUNLQUdFQ09ORklHW21hZW1vLXBsdWdpbl0gPSAiLS1lbmFibGUtbWFlbW8tcGx1Z2luLC0tZGlzYWJsZS1tYWVtby1wbHVnaW4iCi1QQUNLQUdFQ09ORklHW21hZW1vLXJlc291cmNlLW1hbmFnZXJdID0gIi0tZW5hYmxlLW1hZW1vLXJlc291cmNlLW1hbmFnZXIsLS1kaXNhYmxlLW1hZW1vLXJlc291cmNlLW1hbmFnZXIsZGJ1cyIKLVBBQ0tBR0VDT05GSUdbcHVsc2VhdWRpb10gPSAiLS1lbmFibGUtcHVsc2VhdWRpbywtLWRpc2FibGUtcHVsc2VhdWRpbyxwdWxzZWF1ZGlvIgotUEFDS0FHRUNPTkZJR1tzYW1wbGVyYXRlXSA9ICItLWVuYWJsZS1zYW1wbGVyYXRlLC0tZGlzYWJsZS1zYW1wbGVyYXRlLGxpYnNhbXBsZXJhdGUwIgotUEFDS0FHRUNPTkZJR1tzcGVleGRzcF0gPSAiLS13aXRoLXNwZWV4PWxpYiwtLXdpdGgtc3BlZXg9bm8sc3BlZXhkc3AiCi0KLVBBQ0tBR0VTICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwdWxzZWF1ZGlvJywgJ2Fsc2EtcGx1Z2lucy1wdWxzZWF1ZGlvLWNvbmYnLCAnJywgZCl9IgotCi1QQUNLQUdFU19EWU5BTUlDID0gIl5saWJhc291bmQtbW9kdWxlLS4qIgotCi0jIFRoZSBhbHNhLXBsdWdpbnMgcGFja2FnZSBkb2Vzbid0IGl0c2VsZiBjb250YWluIGFueXRoaW5nLCBpdCBqdXN0IGRlcGVuZHMgb24KLSMgYWxsIGJ1aWx0IHBsdWdpbnMuCi1BTExPV19FTVBUWV8ke1BOfSA9ICIxIgotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQlybSAke0R9JHtsaWJkaXJ9L2Fsc2EtbGliLyoubGEKLQotCSMgV2UgdXNlIHRoZSBleGFtcGxlIGFzIGlzLCBzbyBqdXN0IGRyb3AgdGhlIC5leGFtcGxlIHN1ZmZpeC4KLQlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwdWxzZWF1ZGlvJywgJ3llcycsICdubycsIGQpfSIgPSAieWVzIiBdOyB0aGVuCi0JCW12ICR7RH0ke2RhdGFkaXJ9L2Fsc2EvYWxzYS5jb25mLmQvOTktcHVsc2VhdWRpby1kZWZhdWx0LmNvbmYuZXhhbXBsZSAke0R9JHtkYXRhZGlyfS9hbHNhL2Fsc2EuY29uZi5kLzk5LXB1bHNlYXVkaW8tZGVmYXVsdC5jb25mCi0JZmkKLX0KLQotcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7Ci0gICAgcGx1Z2luZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfS9hbHNhLWxpYi8nKQotICAgIHBhY2thZ2VzID0gIiAiLmpvaW4oZG9fc3BsaXRfcGFja2FnZXMoZCwgcGx1Z2luZGlyLCAnXmxpYmFzb3VuZF9tb2R1bGVfKC4qKVwuc28kJywgJ2xpYmFzb3VuZC1tb2R1bGUtJXMnLCAnQWxzYSBwbHVnaW4gZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJykpCi0gICAgZC5zZXRWYXIoIlJERVBFTkRTX2Fsc2EtcGx1Z2lucyIsIHBhY2thZ2VzKQotfQotCi0jIFRoZSByYXRlIHBsdWdpbnMgY3JlYXRlIHNvbWUgc3ltbGlua3MuIEZvciBleGFtcGxlLCB0aGUgc2FtcGxlcmF0ZSBwbHVnaW4KLSMgY3JlYXRlcyB0aGVzZSBsaW5rcyB0byB0aGUgbWFpbiBwbHVnaW4gZmlsZToKLSMKLSMgICBsaWJhc291bmRfbW9kdWxlX3JhdGVfc2FtcGxlcmF0ZV9iZXN0LnNvCi0jICAgbGliYXNvdW5kX21vZHVsZV9yYXRlX3NhbXBsZXJhdGVfbGluZWFyLnNvCi0jICAgbGliYXNvdW5kX21vZHVsZV9yYXRlX3NhbXBsZXJhdGVfbWVkaXVtLnNvCi0jICAgbGliYXNvdW5kX21vZHVsZV9yYXRlX3NhbXBsZXJhdGVfb3JkZXIuc28KLSMKLSMgVGhlIG90aGVyIHJhdGUgcGx1Z2lucyBjcmVhdGUgc2ltaWxhciBsaW5rcy4gV2UgaGF2ZSB0byBhZGQgdGhlIGxpbmtzIHRvCi0jIEZJTEVTIG1hbnVhbGx5LCBiZWNhdXNlIGRvX3NwbGl0X3BhY2thZ2VzKCkgc2tpcHMgdGhlIGxpbmtzICh3aGljaCBpcyBnb29kLAotIyBiZWNhdXNlIHdlIHdvdWxkbid0IHdhbnQgZG9fc3BsaXRfcGFja2FnZXMoKSB0byBjcmVhdGUgc2VwYXJhdGUgcGFja2FnZXMgZm9yCi0jIHRoZSBzeW1saW5rcykuCi0jCi0jIFRoZSBzeW1saW5rcyBjYXVzZSBRQSBlcnJvcnMsIGJlY2F1c2UgdXN1YWxseSBpdCdzIGEgYnVnIGlmIGEgbm9uCi0jIC1kZXYvLWRiZy8tbmF0aXZlc2RrIHBhY2thZ2UgY29udGFpbnMgbGlua3MgdG8gLnNvIGZpbGVzLCBidXQgaW4gdGhpcyBjYXNlCi0jIHRoZSBlcnJvcnMgYXJlIGZhbHNlIHBvc2l0aXZlcywgc28gd2UgZGlzYWJsZSB0aGUgUUEgY2hlY2tzLgotRklMRVNfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtbGF2Y3JhdGUgKz0gIiR7bGliZGlyfS9hbHNhLWxpYi8qcmF0ZV9sYXZjcmF0ZV8qLnNvIgotRklMRVNfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtc2FtcGxlcmF0ZSArPSAiJHtsaWJkaXJ9L2Fsc2EtbGliLypyYXRlX3NhbXBsZXJhdGVfKi5zbyIKLUZJTEVTXyR7TUxQUkVGSVh9bGliYXNvdW5kLW1vZHVsZS1yYXRlLXNwZWV4cmF0ZSArPSAiJHtsaWJkaXJ9L2Fsc2EtbGliLypyYXRlX3NwZWV4cmF0ZV8qLnNvIgotSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtbGF2Y3JhdGUgPSAiZGV2LXNvIgotSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtc2FtcGxlcmF0ZSA9ICJkZXYtc28iCi1JTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmFzb3VuZC1tb2R1bGUtcmF0ZS1zcGVleHJhdGUgPSAiZGV2LXNvIgotCi0jIDUwLXB1bHNlYXVkaW8uY29uZiBkZWZpbmVzIGEgZGV2aWNlIG5hbWVkICJwdWxzZSIgdGhhdCBhcHBsaWNhdGlvbnMgY2FuIHVzZQotIyBpZiB0aGV5IGV4cGxpY2l0bHkgd2FudCB0byB1c2UgdGhlIFB1bHNlQXVkaW8gcGx1Z2luLgotIyA5OS1wdWxzZWF1ZGlvLWRlZmF1bHQuY29uZiBjb25maWd1cmVzIHRoZSAiZGVmYXVsdCIgZGV2aWNlIHRvIHVzZSB0aGUKLSMgUHVsc2VBdWRpbyBwbHVnaW4uCi1GSUxFU18ke1BOfS1wdWxzZWF1ZGlvLWNvbmYgKz0gIlwKLSAgICAgICAgJHtkYXRhZGlyfS9hbHNhL2Fsc2EuY29uZi5kLzUwLXB1bHNlYXVkaW8uY29uZiBcCi0gICAgICAgICR7ZGF0YWRpcn0vYWxzYS9hbHNhLmNvbmYuZC85OS1wdWxzZWF1ZGlvLWRlZmF1bHQuY29uZiBcCi0iCi0KLVJERVBFTkRTXyR7UE59LXB1bHNlYXVkaW8tY29uZiArPSAiXAotICAgICAgICBsaWJhc291bmQtbW9kdWxlLWNvbmYtcHVsc2UgXAotICAgICAgICBsaWJhc291bmQtbW9kdWxlLWN0bC1wdWxzZSBcCi0gICAgICAgIGxpYmFzb3VuZC1tb2R1bGUtcGNtLXB1bHNlIFwKLSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2luc18xLjEuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2luc18xLjEuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2Y3OWI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1wbHVnaW5zXzEuMS40LmJiCkBAIC0wLDAgKzEsMTAzIEBACitTVU1NQVJZID0gIkFMU0EgUGx1Z2lucyIKK0hPTUVQQUdFID0gImh0dHA6Ly9hbHNhLXByb2plY3Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYWxzYS1wcm9qZWN0Lm9yZy9tYWluL2luZGV4LnBocC9CdWdfVHJhY2tpbmciCitTRUNUSU9OID0gIm11bHRpbWVkaWEiCisKKyMgVGhlIHByaW1hcnkgbGljZW5zZSBvZiBhbHNhLXBsdWdpbnMgaXMgTEdQTHYyLjEuCisjCisjIG00L2F0dHJpYnV0ZXMubTQgaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIrLiBtNC9hdHRyaWJ1dGVzLm00IGlzIHBhcnQgb2YgdGhlCisjIGJ1aWxkIHN5c3RlbSwgYW5kIGRvZXNuJ3QgYWZmZWN0IHRoZSBsaWNlbnNpbmcgb2YgdGhlIGJ1aWxkIHJlc3VsdC4KKyMKKyMgVGhlIHNhbXBsZXJhdGUgcGx1Z2luIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyKyB0byBiZSBjb25zaXN0ZW50CisjIHdpdGggdGhlIGxpYnNhbXBsZXJhdGUgbGljZW5zZS4gSG93ZXZlciwgaWYgdGhlIGxpY2Vuc2VlIGhhcyBhIGNvbW1lcmNpYWwKKyMgbGljZW5zZSBmb3IgbGlic2FtcGxlcmF0ZSwgdGhlIHNhbXBsZXJhdGUgcGx1Z2luIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcworIyBvZiBMR1BMdjIuMSBsaWtlIHRoZSByZXN0IG9mIHRoZSBwbHVnaW5zLgorTElDRU5TRSA9ICJMR1BMdjIuMSAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiXAorICAgICAgICBmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQgXAorICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEw7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgZmlsZTovL200L2F0dHJpYnV0ZXMubTQ7ZW5kbGluZT0zMzttZDU9YjI1OTU4ZGE0NGMwMjIzMWUzNjQxZjFiY2NlZjUzZWIgXAorICAgICAgICBmaWxlOi8vcmF0ZS9yYXRlX3NhbXBsZXJhdGUuYztlbmRsaW5lPTM1O21kNT1mZDc3YmNlODVmNGEzMzhjMGU4YWIxODQzMGI2OWZhZSBcCisiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmFsc2EtcHJvamVjdC5vcmcvcHViL3BsdWdpbnMvJHtCUH0udGFyLmJ6MiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJkZTUxMTMwYTc0NDRiNzliMmRkM2MyNWUyODQyMDc1NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1MzBkMWMzYmRhZWIwNThmMmEwMzYwN2EzM2I5ZTE2ZWU1MzY5YmZkMzBhOTZiYzA5YmQyYzY5YjRkZGQxYThhIgorCitERVBFTkRTICs9ICJhbHNhLWxpYiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BBQ0tBR0VDT05GSUcgPz89ICJcCisgICAgICAgIHNhbXBsZXJhdGUgXAorICAgICAgICBzcGVleGRzcCBcCisgICAgICAgICR7QGJiLnV0aWxzLmZpbHRlcignRElTVFJPX0ZFQVRVUkVTJywgJ3B1bHNlYXVkaW8nLCBkKX0gXAorIgorUEFDS0FHRUNPTkZJR1thdmNvZGVjXSA9ICItLWVuYWJsZS1hdmNvZGVjLC0tZGlzYWJsZS1hdmNvZGVjLGxpYmF2IgorUEFDS0FHRUNPTkZJR1tqYWNrXSA9ICItLWVuYWJsZS1qYWNrLC0tZGlzYWJsZS1qYWNrLGphY2siCitQQUNLQUdFQ09ORklHW21hZW1vLXBsdWdpbl0gPSAiLS1lbmFibGUtbWFlbW8tcGx1Z2luLC0tZGlzYWJsZS1tYWVtby1wbHVnaW4iCitQQUNLQUdFQ09ORklHW21hZW1vLXJlc291cmNlLW1hbmFnZXJdID0gIi0tZW5hYmxlLW1hZW1vLXJlc291cmNlLW1hbmFnZXIsLS1kaXNhYmxlLW1hZW1vLXJlc291cmNlLW1hbmFnZXIsZGJ1cyIKK1BBQ0tBR0VDT05GSUdbcHVsc2VhdWRpb10gPSAiLS1lbmFibGUtcHVsc2VhdWRpbywtLWRpc2FibGUtcHVsc2VhdWRpbyxwdWxzZWF1ZGlvIgorUEFDS0FHRUNPTkZJR1tzYW1wbGVyYXRlXSA9ICItLWVuYWJsZS1zYW1wbGVyYXRlLC0tZGlzYWJsZS1zYW1wbGVyYXRlLGxpYnNhbXBsZXJhdGUwIgorUEFDS0FHRUNPTkZJR1tzcGVleGRzcF0gPSAiLS13aXRoLXNwZWV4PWxpYiwtLXdpdGgtc3BlZXg9bm8sc3BlZXhkc3AiCisKK1BBQ0tBR0VTICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwdWxzZWF1ZGlvJywgJ2Fsc2EtcGx1Z2lucy1wdWxzZWF1ZGlvLWNvbmYnLCAnJywgZCl9IgorCitQQUNLQUdFU19EWU5BTUlDID0gIl5saWJhc291bmQtbW9kdWxlLS4qIgorCisjIFRoZSBhbHNhLXBsdWdpbnMgcGFja2FnZSBkb2Vzbid0IGl0c2VsZiBjb250YWluIGFueXRoaW5nLCBpdCBqdXN0IGRlcGVuZHMgb24KKyMgYWxsIGJ1aWx0IHBsdWdpbnMuCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlybSAke0R9JHtsaWJkaXJ9L2Fsc2EtbGliLyoubGEKKworCSMgV2UgdXNlIHRoZSBleGFtcGxlIGFzIGlzLCBzbyBqdXN0IGRyb3AgdGhlIC5leGFtcGxlIHN1ZmZpeC4KKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwdWxzZWF1ZGlvJywgJ3llcycsICdubycsIGQpfSIgPSAieWVzIiBdOyB0aGVuCisJCW12ICR7RH0ke2RhdGFkaXJ9L2Fsc2EvYWxzYS5jb25mLmQvOTktcHVsc2VhdWRpby1kZWZhdWx0LmNvbmYuZXhhbXBsZSAke0R9JHtkYXRhZGlyfS9hbHNhL2Fsc2EuY29uZi5kLzk5LXB1bHNlYXVkaW8tZGVmYXVsdC5jb25mCisJZmkKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7CisgICAgcGx1Z2luZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfS9hbHNhLWxpYi8nKQorICAgIHBhY2thZ2VzID0gIiAiLmpvaW4oZG9fc3BsaXRfcGFja2FnZXMoZCwgcGx1Z2luZGlyLCAnXmxpYmFzb3VuZF9tb2R1bGVfKC4qKVwuc28kJywgJ2xpYmFzb3VuZC1tb2R1bGUtJXMnLCAnQWxzYSBwbHVnaW4gZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJykpCisgICAgZC5zZXRWYXIoIlJERVBFTkRTX2Fsc2EtcGx1Z2lucyIsIHBhY2thZ2VzKQorfQorCisjIFRoZSByYXRlIHBsdWdpbnMgY3JlYXRlIHNvbWUgc3ltbGlua3MuIEZvciBleGFtcGxlLCB0aGUgc2FtcGxlcmF0ZSBwbHVnaW4KKyMgY3JlYXRlcyB0aGVzZSBsaW5rcyB0byB0aGUgbWFpbiBwbHVnaW4gZmlsZToKKyMKKyMgICBsaWJhc291bmRfbW9kdWxlX3JhdGVfc2FtcGxlcmF0ZV9iZXN0LnNvCisjICAgbGliYXNvdW5kX21vZHVsZV9yYXRlX3NhbXBsZXJhdGVfbGluZWFyLnNvCisjICAgbGliYXNvdW5kX21vZHVsZV9yYXRlX3NhbXBsZXJhdGVfbWVkaXVtLnNvCisjICAgbGliYXNvdW5kX21vZHVsZV9yYXRlX3NhbXBsZXJhdGVfb3JkZXIuc28KKyMKKyMgVGhlIG90aGVyIHJhdGUgcGx1Z2lucyBjcmVhdGUgc2ltaWxhciBsaW5rcy4gV2UgaGF2ZSB0byBhZGQgdGhlIGxpbmtzIHRvCisjIEZJTEVTIG1hbnVhbGx5LCBiZWNhdXNlIGRvX3NwbGl0X3BhY2thZ2VzKCkgc2tpcHMgdGhlIGxpbmtzICh3aGljaCBpcyBnb29kLAorIyBiZWNhdXNlIHdlIHdvdWxkbid0IHdhbnQgZG9fc3BsaXRfcGFja2FnZXMoKSB0byBjcmVhdGUgc2VwYXJhdGUgcGFja2FnZXMgZm9yCisjIHRoZSBzeW1saW5rcykuCisjCisjIFRoZSBzeW1saW5rcyBjYXVzZSBRQSBlcnJvcnMsIGJlY2F1c2UgdXN1YWxseSBpdCdzIGEgYnVnIGlmIGEgbm9uCisjIC1kZXYvLWRiZy8tbmF0aXZlc2RrIHBhY2thZ2UgY29udGFpbnMgbGlua3MgdG8gLnNvIGZpbGVzLCBidXQgaW4gdGhpcyBjYXNlCisjIHRoZSBlcnJvcnMgYXJlIGZhbHNlIHBvc2l0aXZlcywgc28gd2UgZGlzYWJsZSB0aGUgUUEgY2hlY2tzLgorRklMRVNfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtbGF2Y3JhdGUgKz0gIiR7bGliZGlyfS9hbHNhLWxpYi8qcmF0ZV9sYXZjcmF0ZV8qLnNvIgorRklMRVNfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtc2FtcGxlcmF0ZSArPSAiJHtsaWJkaXJ9L2Fsc2EtbGliLypyYXRlX3NhbXBsZXJhdGVfKi5zbyIKK0ZJTEVTXyR7TUxQUkVGSVh9bGliYXNvdW5kLW1vZHVsZS1yYXRlLXNwZWV4cmF0ZSArPSAiJHtsaWJkaXJ9L2Fsc2EtbGliLypyYXRlX3NwZWV4cmF0ZV8qLnNvIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtbGF2Y3JhdGUgPSAiZGV2LXNvIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtc2FtcGxlcmF0ZSA9ICJkZXYtc28iCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmFzb3VuZC1tb2R1bGUtcmF0ZS1zcGVleHJhdGUgPSAiZGV2LXNvIgorCisjIDUwLXB1bHNlYXVkaW8uY29uZiBkZWZpbmVzIGEgZGV2aWNlIG5hbWVkICJwdWxzZSIgdGhhdCBhcHBsaWNhdGlvbnMgY2FuIHVzZQorIyBpZiB0aGV5IGV4cGxpY2l0bHkgd2FudCB0byB1c2UgdGhlIFB1bHNlQXVkaW8gcGx1Z2luLgorIyA5OS1wdWxzZWF1ZGlvLWRlZmF1bHQuY29uZiBjb25maWd1cmVzIHRoZSAiZGVmYXVsdCIgZGV2aWNlIHRvIHVzZSB0aGUKKyMgUHVsc2VBdWRpbyBwbHVnaW4uCitGSUxFU18ke1BOfS1wdWxzZWF1ZGlvLWNvbmYgKz0gIlwKKyAgICAgICAgJHtkYXRhZGlyfS9hbHNhL2Fsc2EuY29uZi5kLzUwLXB1bHNlYXVkaW8uY29uZiBcCisgICAgICAgICR7ZGF0YWRpcn0vYWxzYS9hbHNhLmNvbmYuZC85OS1wdWxzZWF1ZGlvLWRlZmF1bHQuY29uZiBcCisiCisKK1JERVBFTkRTXyR7UE59LXB1bHNlYXVkaW8tY29uZiArPSAiXAorICAgICAgICBsaWJhc291bmQtbW9kdWxlLWNvbmYtcHVsc2UgXAorICAgICAgICBsaWJhc291bmQtbW9kdWxlLWN0bC1wdWxzZSBcCisgICAgICAgIGxpYmFzb3VuZC1tb2R1bGUtcGNtLXB1bHNlIFwKKyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMtc2NyaXB0c18xLjEuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMtc2NyaXB0c18xLjEuNC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy1zY3JpcHRzXzEuMS4zLmJiCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzLXNjcmlwdHNfMS4xLjQuYmIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHNfMS4xLjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzXzEuMS4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzc0YTE3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHNfMS4xLjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotU1VNTUFSWSA9ICJBTFNBIHNvdW5kIHV0aWxpdGllcyIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuYWxzYS1wcm9qZWN0Lm9yZyIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL2Fsc2EtcHJvamVjdC5vcmcvbWFpbi9pbmRleC5waHAvQnVnX1RyYWNraW5nIgotU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgotTElDRU5TRSA9ICJHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hbHNhY3RsL3V0aWxzLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9ZmU5NTI2YjA1NWUyNDZiNTU1ODgwOWE1YWUyNWMwYjkiCi1ERVBFTkRTID0gImFsc2EtbGliIG5jdXJzZXMgbGlic2FtcGxlcmF0ZTAiCi0KLVBBQ0tBR0VDT05GSUcgPz89ICJ1ZGV2IgotCi0jIGFsc2FiYXQgY2FuIGJlIGJ1aWx0IGFsc28gd2l0aG91dCBmZnR3IHN1cHBvcnQgKHdpdGggcmVkdWNlZCBmdW5jdGlvbmFsaXR5KS4KLSMgSXQgd291bGQgYmUgYmV0dGVyIHRvIGFsd2F5cyBlbmFibGUgYWxzYWJhdCwgYnV0IHByb3ZpZGUgYW4gb3B0aW9uIGZvcgotIyBlbmFibGluZy9kaXNhYmxpbmcgZmZ0dy4gVGhlIGNvbmZpZ3VyZSBzY3JpcHQgZG9lc24ndCBzdXBwb3J0IHRoYXQsIGhvd2V2ZXIKLSMgKGF0IGxlYXN0IGluIGFueSBvYnZpb3VzIHdheSksIHNvIGZvciBub3cgd2Ugb25seSBzdXBwb3J0IGFsc2FiYXQgd2l0aCBmZnR3Ci0jIG9yIG5vIGFsc2FiYXQgYXQgYWxsLgotUEFDS0FHRUNPTkZJR1tiYXRdID0gIi0tZW5hYmxlLWJhdCwtLWRpc2FibGUtYmF0LGZmdHdmIgotCi1QQUNLQUdFQ09ORklHW3VkZXZdID0gIi0td2l0aC11ZGV2LXJ1bGVzLWRpcj1gcGtnLWNvbmZpZyAtLXZhcmlhYmxlPXVkZXZkaXIgdWRldmAvcnVsZXMuZCwsdWRldiIKLVBBQ0tBR0VDT05GSUdbbWFucGFnZXNdID0gIi0tZW5hYmxlLXhtbHRvLCAtLWRpc2FibGUteG1sdG8sIHhtbHRvLW5hdGl2ZSBkb2Nib29rLXhtbC1kdGQ0LW5hdGl2ZSBkb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uYXRpdmUiCi0KLVNSQ19VUkkgPSAiZnRwOi8vZnRwLmFsc2EtcHJvamVjdC5vcmcvcHViL3V0aWxzL2Fsc2EtdXRpbHMtJHtQVn0udGFyLmJ6MiBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWFsc2FjdGwtZG9uLXQtbGV0LXN5c3RlbWQtdW5pdC1yZXN0b3JlLXRoZS12b2x1bWUtd2gucGF0Y2ggXAotICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjJiZjk0ZDNlMzQxMGRjYzc0YmIwZGFlMTBkNDZhOTc5IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjEyNzIxN2E1NGVlYTBmOWE0OTcwMGEyZjIzOWEyZDRmNTM4NGFhMDk0ZDY4ZGYwNGE4ZWI4MDEzMmViNjE2N2MiCi0KLSMgT24gYnVpbGQgbWFjaGluZXMgd2l0aCBweXRob24tZG9jdXRpbHMgKG5vdCBweXRob24zLWRvY3V0aWxzICEhKSBpbnN0YWxsZWQKLSMgcnN0Mm1hbiAobm90IHJzdDJtYW4ucHkpIGlzIGRldGVjdGVkIGFuZCBjb21waWxlIGZhaWxzIHdpdGgKLSMgfCBtYWtlWzFdOiAqKiogTm8gcnVsZSB0byBtYWtlIHRhcmdldCAnYWxzYXVjbS4xJywgbmVlZGVkIGJ5ICdhbGwtYW0nLiAgU3RvcC4KLSMgQXZvaWQgdGhpcyBieSBkaXNhYmxpbmcgZXhwaWNpdGx5Ci1FWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXJzdDJtYW4iCi0KLSMgbGF6eSBoYWNrLiBuZWVkcyBwcm9wZXIgZml4aW5nIGluIGdldHRleHQubTQsIHNlZQotIyBodHRwOi8vYnVncy5vcGVuZW1iZWRkZWQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ4Ci0jIHBsZWFzZSBjbG9zZSBidWcgYW5kIHJlbW92ZSB0aGlzIGNvbW1lbnQgd2hlbiBwcm9wZXJseSBmaXhlZAotIwotRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS1kaXNhYmxlLW5scyIKLQotaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcgbWFucGFnZXMKLQotIyBUaGlzIGFyZSBhbGwgcGFja2FnZXMgdGhhdCB3ZSBuZWVkIHRvIG1ha2UuIEFsc28sIHRoZSBub3cgZW1wdHkgYWxzYS11dGlscwotIyBpcGsgZGVwZW5kcyBvbiB0aGVtLgotCi1BTFNBX1VUSUxTX1BLR1MgPSAiXAotICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2JhdCcsICdhbHNhLXV0aWxzLWFsc2FiYXQnLCAnJywgZCl9IFwKLSAgICAgICAgICAgICBhbHNhLXV0aWxzLWFsc2FtaXhlciBcCi0gICAgICAgICAgICAgYWxzYS11dGlscy1hbHNhdHBsZyBcCi0gICAgICAgICAgICAgYWxzYS11dGlscy1taWRpIFwKLSAgICAgICAgICAgICBhbHNhLXV0aWxzLWFwbGF5IFwKLSAgICAgICAgICAgICBhbHNhLXV0aWxzLWFtaXhlciBcCi0gICAgICAgICAgICAgYWxzYS11dGlscy1hY29ubmVjdCBcCi0gICAgICAgICAgICAgYWxzYS11dGlscy1pZWNzZXQgXAotICAgICAgICAgICAgIGFsc2EtdXRpbHMtc3BlYWtlcnRlc3QgXAotICAgICAgICAgICAgIGFsc2EtdXRpbHMtYXNlcW5ldCBcCi0gICAgICAgICAgICAgYWxzYS11dGlscy1hc2VxZHVtcCBcCi0gICAgICAgICAgICAgYWxzYS11dGlscy1hbHNhY3RsIFwKLSAgICAgICAgICAgICBhbHNhLXV0aWxzLWFsc2Fsb29wIFwKLSAgICAgICAgICAgICBhbHNhLXV0aWxzLWFsc2F1Y20gXAotICAgICAgICAgICAgIgotCi1QQUNLQUdFUyArPSAiJHtBTFNBX1VUSUxTX1BLR1N9IgotUkRFUEVORFNfJHtQTn0gKz0gIiR7QUxTQV9VVElMU19QS0dTfSIKLQotRklMRVNfJHtQTn0gPSAiIgotRklMRVNfYWxzYS11dGlscy1hbHNhYmF0ICAgICA9ICIke2JpbmRpcn0vYWxzYWJhdCIKLUZJTEVTX2Fsc2EtdXRpbHMtYWxzYXRwbGcgICAgPSAiJHtiaW5kaXJ9L2Fsc2F0cGxnIgotRklMRVNfYWxzYS11dGlscy1hcGxheSAgICAgICA9ICIke2JpbmRpcn0vYXBsYXkgJHtiaW5kaXJ9L2FyZWNvcmQiCi1GSUxFU19hbHNhLXV0aWxzLWFtaXhlciAgICAgID0gIiR7YmluZGlyfS9hbWl4ZXIiCi1GSUxFU19hbHNhLXV0aWxzLWFsc2FtaXhlciAgID0gIiR7YmluZGlyfS9hbHNhbWl4ZXIiCi1GSUxFU19hbHNhLXV0aWxzLXNwZWFrZXJ0ZXN0ID0gIiR7YmluZGlyfS9zcGVha2VyLXRlc3QgJHtkYXRhZGlyfS9zb3VuZHMvYWxzYS8gJHtkYXRhZGlyfS9hbHNhL3NwZWFrZXItdGVzdC8iCi1GSUxFU19hbHNhLXV0aWxzLW1pZGkgICAgICAgID0gIiR7YmluZGlyfS9hcGxheW1pZGkgJHtiaW5kaXJ9L2FyZWNvcmRtaWRpICR7YmluZGlyfS9hbWlkaSIKLUZJTEVTX2Fsc2EtdXRpbHMtYWNvbm5lY3QgICAgPSAiJHtiaW5kaXJ9L2Fjb25uZWN0IgotRklMRVNfYWxzYS11dGlscy1hc2VxbmV0ICAgICA9ICIke2JpbmRpcn0vYXNlcW5ldCIKLUZJTEVTX2Fsc2EtdXRpbHMtaWVjc2V0ICAgICAgPSAiJHtiaW5kaXJ9L2llY3NldCIKLUZJTEVTX2Fsc2EtdXRpbHMtYWxzYWN0bCAgICAgPSAiJHtzYmluZGlyfS9hbHNhY3RsICovdWRldi9ydWxlcy5kICovKi91ZGV2L3J1bGVzLmQgJHtzeXN0ZW1kX3VuaXRkaXJ9ICR7bG9jYWxzdGF0ZWRpcn0vbGliL2Fsc2EgJHtkYXRhZGlyfS9hbHNhL2luaXQvIgotRklMRVNfYWxzYS11dGlscy1hc2VxZHVtcCAgICA9ICIke2JpbmRpcn0vYXNlcWR1bXAiCi1GSUxFU19hbHNhLXV0aWxzLWFsc2Fsb29wICAgID0gIiR7YmluZGlyfS9hbHNhbG9vcCIKLUZJTEVTX2Fsc2EtdXRpbHMtYWxzYXVjbSAgICAgPSAiJHtiaW5kaXJ9L2Fsc2F1Y20iCi0KLVNVTU1BUllfYWxzYS11dGlscy1hbHNhYmF0ICAgICAgPSAiQ29tbWFuZC1saW5lIHNvdW5kIHRlc3RlciBmb3IgQUxTQSBzb3VuZCBjYXJkIGRyaXZlciIKLVNVTU1BUllfYWxzYS11dGlscy1hbHNhdHBsZyAgICAgPSAiQ29udmVydHMgdG9wb2xvZ3kgdGV4dCBmaWxlcyBpbnRvIGJpbmFyeSBmb3JtYXQgZm9yIGtlcm5lbCIKLVNVTU1BUllfYWxzYS11dGlscy1hcGxheSAgICAgICAgPSAiUGxheSAoYW5kIHJlY29yZCkgc291bmQgZmlsZXMgdXNpbmcgQUxTQSIKLVNVTU1BUllfYWxzYS11dGlscy1hbWl4ZXIgICAgICAgPSAiQ29tbWFuZC1saW5lIGNvbnRyb2wgZm9yIEFMU0EgbWl4ZXIgYW5kIHNldHRpbmdzIgotU1VNTUFSWV9hbHNhLXV0aWxzLWFsc2FtaXhlciAgICA9ICJuY3Vyc2VzLWJhc2VkIGNvbnRyb2wgZm9yIEFMU0EgbWl4ZXIgYW5kIHNldHRpbmdzIgotU1VNTUFSWV9hbHNhLXV0aWxzLXNwZWFrZXJ0ZXN0ICA9ICJBTFNBIHN1cnJvdW5kIHNwZWFrZXIgdGVzdCB1dGlsaXR5IgotU1VNTUFSWV9hbHNhLXV0aWxzLW1pZGkgICAgICAgICA9ICJNaXNjZWxsYW5lb3VzIE1JREkgdXRpbGl0aWVzIGZvciBBTFNBIgotU1VNTUFSWV9hbHNhLXV0aWxzLWFjb25uZWN0ICAgICA9ICJBTFNBIHNlcXVlbmNlciBjb25uZWN0aW9uIG1hbmFnZXIiCi1TVU1NQVJZX2Fsc2EtdXRpbHMtYXNlcW5ldCAgICAgID0gIk5ldHdvcmsgY2xpZW50L3NlcnZlciBmb3IgQUxTQSBzZXF1ZW5jZXIiCi1TVU1NQVJZX2Fsc2EtdXRpbHMtaWVjc2V0ICAgICAgID0gIkFMU0EgdXRpbGl0eSBmb3Igc2V0dGluZy9zaG93aW5nIElFQzk1OCAoUy9QRElGKSBzdGF0dXMgYml0cyIKLVNVTU1BUllfYWxzYS11dGlscy1hbHNhY3RsICAgICAgPSAiU2F2ZXMvcmVzdG9yZXMgQUxTQS1zZXR0aW5ncyBpbiAvZXRjL2Fzb3VuZC5zdGF0ZSIKLVNVTU1BUllfYWxzYS11dGlscy1hc2VxZHVtcCAgICAgPSAiU2hvd3MgdGhlIGV2ZW50cyByZWNlaXZlZCBhdCBhbiBBTFNBIHNlcXVlbmNlciBwb3J0IgotU1VNTUFSWV9hbHNhLXV0aWxzLWFsc2Fsb29wICAgICA9ICJBTFNBIFBDTSBsb29wYmFjayB1dGlsaXR5IgotU1VNTUFSWV9hbHNhLXV0aWxzLWFsc2F1Y20gICAgICA9ICJBTFNBIFVzZSBDYXNlIE1hbmFnZXIiCi0KLVJSRUNPTU1FTkRTX2Fsc2EtdXRpbHMtYWxzYWN0bCA9ICJhbHNhLXN0YXRlcyIKLQotQUxMT1dfRU1QVFlfYWxzYS11dGlscyA9ICIxIgotCi1kb19pbnN0YWxsKCkgewotCWF1dG90b29sc19kb19pbnN0YWxsCi0KLQkjIFdlIGRvbid0IHNoaXAgdGhpcyBoZXJlIGJlY2F1c2UgaXQgcmVxdWlyZXMgYSBkZXBlbmRlbmN5IG9uIGJhc2guCi0JIyBTZWUgYWxzYS11dGlscy1zY3JpcHRzXyR7UFZ9LmJiCi0Jcm0gJHtEfSR7c2JpbmRpcn0vYWxzYWNvbmYKLQlybSAke0R9JHtzYmluZGlyfS9hbHNhLWluZm8uc2gKLQlybSAtZiAke0R9JHtzYmluZGlyfS9hbHNhYmF0LXRlc3Quc2gKLQotCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3VkZXYnLCAnZmFsc2UnLCAndHJ1ZScsIGQpfTsgdGhlbgotCQkjIFRoaXMgaXMgd2hlcmUgYWxzYS11dGlscyB3aWxsIGluc3RhbGwgaXRzIHJ1bGVzIGlmIHdlIGRvbid0IHRlbGwgaXQgYW55dGhpbmcgZWxzZS4KLQkJcm0gLXJmICR7RH0ke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYKLQkJcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJHtEfSR7bm9uYXJjaF9iYXNlX2xpYmRpcn0KLQlmaQotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlsc18xLjEuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHNfMS4xLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmNGI4NgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHNfMS4xLjQuYmIKQEAgLTAsMCArMSwxMDkgQEAKK1NVTU1BUlkgPSAiQUxTQSBzb3VuZCB1dGlsaXRpZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmFsc2EtcHJvamVjdC5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9hbHNhLXByb2plY3Qub3JnL21haW4vaW5kZXgucGhwL0J1Z19UcmFja2luZyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYWxzYWN0bC91dGlscy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PWZlOTUyNmIwNTVlMjQ2YjU1NTg4MDlhNWFlMjVjMGI5IgorREVQRU5EUyA9ICJhbHNhLWxpYiBuY3Vyc2VzIGxpYnNhbXBsZXJhdGUwIgorCitQQUNLQUdFQ09ORklHID8/PSAidWRldiIKKworIyBhbHNhYmF0IGNhbiBiZSBidWlsdCBhbHNvIHdpdGhvdXQgZmZ0dyBzdXBwb3J0ICh3aXRoIHJlZHVjZWQgZnVuY3Rpb25hbGl0eSkuCisjIEl0IHdvdWxkIGJlIGJldHRlciB0byBhbHdheXMgZW5hYmxlIGFsc2FiYXQsIGJ1dCBwcm92aWRlIGFuIG9wdGlvbiBmb3IKKyMgZW5hYmxpbmcvZGlzYWJsaW5nIGZmdHcuIFRoZSBjb25maWd1cmUgc2NyaXB0IGRvZXNuJ3Qgc3VwcG9ydCB0aGF0LCBob3dldmVyCisjIChhdCBsZWFzdCBpbiBhbnkgb2J2aW91cyB3YXkpLCBzbyBmb3Igbm93IHdlIG9ubHkgc3VwcG9ydCBhbHNhYmF0IHdpdGggZmZ0dworIyBvciBubyBhbHNhYmF0IGF0IGFsbC4KK1BBQ0tBR0VDT05GSUdbYmF0XSA9ICItLWVuYWJsZS1iYXQsLS1kaXNhYmxlLWJhdCxmZnR3ZiIKKworUEFDS0FHRUNPTkZJR1t1ZGV2XSA9ICItLXdpdGgtdWRldi1ydWxlcy1kaXI9YHBrZy1jb25maWcgLS12YXJpYWJsZT11ZGV2ZGlyIHVkZXZgL3J1bGVzLmQsLHVkZXYiCitQQUNLQUdFQ09ORklHW21hbnBhZ2VzXSA9ICItLWVuYWJsZS14bWx0bywgLS1kaXNhYmxlLXhtbHRvLCB4bWx0by1uYXRpdmUgZG9jYm9vay14bWwtZHRkNC1uYXRpdmUgZG9jYm9vay14c2wtc3R5bGVzaGVldHMtbmF0aXZlIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5hbHNhLXByb2plY3Qub3JnL3B1Yi91dGlscy9hbHNhLXV0aWxzLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1hbHNhY3RsLWRvbi10LWxldC1zeXN0ZW1kLXVuaXQtcmVzdG9yZS10aGUtdm9sdW1lLXdoLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwMWUzOTM0Y2E1YmQyMmE4MGMyNzI4OWQxYjBhZGNkYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhNzgzMTA0NGRlOTJjNWJmMzNiZjMzNjVhM2YzNmU0OTM5N2Y0MTkxZTkzNGRmNDYwYWUxY2ExNTEzOGM5ZDlkIgorCisjIE9uIGJ1aWxkIG1hY2hpbmVzIHdpdGggcHl0aG9uLWRvY3V0aWxzIChub3QgcHl0aG9uMy1kb2N1dGlscyAhISkgaW5zdGFsbGVkCisjIHJzdDJtYW4gKG5vdCByc3QybWFuLnB5KSBpcyBkZXRlY3RlZCBhbmQgY29tcGlsZSBmYWlscyB3aXRoCisjIHwgbWFrZVsxXTogKioqIE5vIHJ1bGUgdG8gbWFrZSB0YXJnZXQgJ2Fsc2F1Y20uMScsIG5lZWRlZCBieSAnYWxsLWFtJy4gIFN0b3AuCisjIEF2b2lkIHRoaXMgYnkgZGlzYWJsaW5nIGV4cGljaXRseQorRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1yc3QybWFuIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZyBtYW5wYWdlcworCisjIFRoaXMgYXJlIGFsbCBwYWNrYWdlcyB0aGF0IHdlIG5lZWQgdG8gbWFrZS4gQWxzbywgdGhlIG5vdyBlbXB0eSBhbHNhLXV0aWxzCisjIGlwayBkZXBlbmRzIG9uIHRoZW0uCisKK0FMU0FfVVRJTFNfUEtHUyA9ICJcCisgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnYmF0JywgJ2Fsc2EtdXRpbHMtYWxzYWJhdCcsICcnLCBkKX0gXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWxzYW1peGVyIFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFsc2F0cGxnIFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLW1pZGkgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYXBsYXkgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYW1peGVyIFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFjb25uZWN0IFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWllY3NldCBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1zcGVha2VydGVzdCBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1hc2VxbmV0IFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFzZXFkdW1wIFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFsc2FjdGwgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWxzYWxvb3AgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWxzYXVjbSBcCisgICAgICAgICAgICAiCisKK1BBQ0tBR0VTICs9ICIke0FMU0FfVVRJTFNfUEtHU30iCitSREVQRU5EU18ke1BOfSArPSAiJHtBTFNBX1VUSUxTX1BLR1N9IgorCitGSUxFU18ke1BOfSA9ICIiCitGSUxFU19hbHNhLXV0aWxzLWFsc2FiYXQgICAgID0gIiR7YmluZGlyfS9hbHNhYmF0IgorRklMRVNfYWxzYS11dGlscy1hbHNhdHBsZyAgICA9ICIke2JpbmRpcn0vYWxzYXRwbGciCitGSUxFU19hbHNhLXV0aWxzLWFwbGF5ICAgICAgID0gIiR7YmluZGlyfS9hcGxheSAke2JpbmRpcn0vYXJlY29yZCIKK0ZJTEVTX2Fsc2EtdXRpbHMtYW1peGVyICAgICAgPSAiJHtiaW5kaXJ9L2FtaXhlciIKK0ZJTEVTX2Fsc2EtdXRpbHMtYWxzYW1peGVyICAgPSAiJHtiaW5kaXJ9L2Fsc2FtaXhlciIKK0ZJTEVTX2Fsc2EtdXRpbHMtc3BlYWtlcnRlc3QgPSAiJHtiaW5kaXJ9L3NwZWFrZXItdGVzdCAke2RhdGFkaXJ9L3NvdW5kcy9hbHNhLyAke2RhdGFkaXJ9L2Fsc2Evc3BlYWtlci10ZXN0LyIKK0ZJTEVTX2Fsc2EtdXRpbHMtbWlkaSAgICAgICAgPSAiJHtiaW5kaXJ9L2FwbGF5bWlkaSAke2JpbmRpcn0vYXJlY29yZG1pZGkgJHtiaW5kaXJ9L2FtaWRpIgorRklMRVNfYWxzYS11dGlscy1hY29ubmVjdCAgICA9ICIke2JpbmRpcn0vYWNvbm5lY3QiCitGSUxFU19hbHNhLXV0aWxzLWFzZXFuZXQgICAgID0gIiR7YmluZGlyfS9hc2VxbmV0IgorRklMRVNfYWxzYS11dGlscy1pZWNzZXQgICAgICA9ICIke2JpbmRpcn0vaWVjc2V0IgorRklMRVNfYWxzYS11dGlscy1hbHNhY3RsICAgICA9ICIke3NiaW5kaXJ9L2Fsc2FjdGwgKi91ZGV2L3J1bGVzLmQgKi8qL3VkZXYvcnVsZXMuZCAke3N5c3RlbWRfdW5pdGRpcn0gJHtsb2NhbHN0YXRlZGlyfS9saWIvYWxzYSAke2RhdGFkaXJ9L2Fsc2EvaW5pdC8iCitGSUxFU19hbHNhLXV0aWxzLWFzZXFkdW1wICAgID0gIiR7YmluZGlyfS9hc2VxZHVtcCIKK0ZJTEVTX2Fsc2EtdXRpbHMtYWxzYWxvb3AgICAgPSAiJHtiaW5kaXJ9L2Fsc2Fsb29wIgorRklMRVNfYWxzYS11dGlscy1hbHNhdWNtICAgICA9ICIke2JpbmRpcn0vYWxzYXVjbSIKKworU1VNTUFSWV9hbHNhLXV0aWxzLWFsc2FiYXQgICAgICA9ICJDb21tYW5kLWxpbmUgc291bmQgdGVzdGVyIGZvciBBTFNBIHNvdW5kIGNhcmQgZHJpdmVyIgorU1VNTUFSWV9hbHNhLXV0aWxzLWFsc2F0cGxnICAgICA9ICJDb252ZXJ0cyB0b3BvbG9neSB0ZXh0IGZpbGVzIGludG8gYmluYXJ5IGZvcm1hdCBmb3Iga2VybmVsIgorU1VNTUFSWV9hbHNhLXV0aWxzLWFwbGF5ICAgICAgICA9ICJQbGF5IChhbmQgcmVjb3JkKSBzb3VuZCBmaWxlcyB1c2luZyBBTFNBIgorU1VNTUFSWV9hbHNhLXV0aWxzLWFtaXhlciAgICAgICA9ICJDb21tYW5kLWxpbmUgY29udHJvbCBmb3IgQUxTQSBtaXhlciBhbmQgc2V0dGluZ3MiCitTVU1NQVJZX2Fsc2EtdXRpbHMtYWxzYW1peGVyICAgID0gIm5jdXJzZXMtYmFzZWQgY29udHJvbCBmb3IgQUxTQSBtaXhlciBhbmQgc2V0dGluZ3MiCitTVU1NQVJZX2Fsc2EtdXRpbHMtc3BlYWtlcnRlc3QgID0gIkFMU0Egc3Vycm91bmQgc3BlYWtlciB0ZXN0IHV0aWxpdHkiCitTVU1NQVJZX2Fsc2EtdXRpbHMtbWlkaSAgICAgICAgID0gIk1pc2NlbGxhbmVvdXMgTUlESSB1dGlsaXRpZXMgZm9yIEFMU0EiCitTVU1NQVJZX2Fsc2EtdXRpbHMtYWNvbm5lY3QgICAgID0gIkFMU0Egc2VxdWVuY2VyIGNvbm5lY3Rpb24gbWFuYWdlciIKK1NVTU1BUllfYWxzYS11dGlscy1hc2VxbmV0ICAgICAgPSAiTmV0d29yayBjbGllbnQvc2VydmVyIGZvciBBTFNBIHNlcXVlbmNlciIKK1NVTU1BUllfYWxzYS11dGlscy1pZWNzZXQgICAgICAgPSAiQUxTQSB1dGlsaXR5IGZvciBzZXR0aW5nL3Nob3dpbmcgSUVDOTU4IChTL1BESUYpIHN0YXR1cyBiaXRzIgorU1VNTUFSWV9hbHNhLXV0aWxzLWFsc2FjdGwgICAgICA9ICJTYXZlcy9yZXN0b3JlcyBBTFNBLXNldHRpbmdzIGluIC9ldGMvYXNvdW5kLnN0YXRlIgorU1VNTUFSWV9hbHNhLXV0aWxzLWFzZXFkdW1wICAgICA9ICJTaG93cyB0aGUgZXZlbnRzIHJlY2VpdmVkIGF0IGFuIEFMU0Egc2VxdWVuY2VyIHBvcnQiCitTVU1NQVJZX2Fsc2EtdXRpbHMtYWxzYWxvb3AgICAgID0gIkFMU0EgUENNIGxvb3BiYWNrIHV0aWxpdHkiCitTVU1NQVJZX2Fsc2EtdXRpbHMtYWxzYXVjbSAgICAgID0gIkFMU0EgVXNlIENhc2UgTWFuYWdlciIKKworUlJFQ09NTUVORFNfYWxzYS11dGlscy1hbHNhY3RsID0gImFsc2Etc3RhdGVzIgorCitBTExPV19FTVBUWV9hbHNhLXV0aWxzID0gIjEiCisKK2RvX2luc3RhbGwoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCSMgV2UgZG9uJ3Qgc2hpcCB0aGlzIGhlcmUgYmVjYXVzZSBpdCByZXF1aXJlcyBhIGRlcGVuZGVuY3kgb24gYmFzaC4KKwkjIFNlZSBhbHNhLXV0aWxzLXNjcmlwdHNfJHtQVn0uYmIKKwlybSAke0R9JHtzYmluZGlyfS9hbHNhY29uZgorCXJtICR7RH0ke3NiaW5kaXJ9L2Fsc2EtaW5mby5zaAorCXJtIC1mICR7RH0ke3NiaW5kaXJ9L2Fsc2FiYXQtdGVzdC5zaAorCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAndWRldicsICdmYWxzZScsICd0cnVlJywgZCl9OyB0aGVuCisJCSMgVGhpcyBpcyB3aGVyZSBhbHNhLXV0aWxzIHdpbGwgaW5zdGFsbCBpdHMgcnVsZXMgaWYgd2UgZG9uJ3QgdGVsbCBpdCBhbnl0aGluZyBlbHNlLgorCQlybSAtcmYgJHtEfSR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldgorCQlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAke0R9JHtub25hcmNoX2Jhc2VfbGliZGlyfQorCWZpCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZy8wMDAxLWJ1aWxkLWZpeC1mb3ItbWlwcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mZm1wZWcvZmZtcGVnLzAwMDEtYnVpbGQtZml4LWZvci1taXBzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmODIyNGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZy8wMDAxLWJ1aWxkLWZpeC1mb3ItbWlwcy5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIGYzNGM1NjcwNDViZWE1YTdkZWQ5YmNmYThlNzg1Y2ZkMjRjYzdkZGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBTaGl2cmFqIFBhdGlsIDxzaGl2cmFqLnBhdGlsQGltZ3RlYy5jb20+CitEYXRlOiBUdWUsIDQgQXByIDIwMTcgMTg6NTY6MDEgKzA1MzAKK1N1YmplY3Q6IFtQQVRDSF0gYnVpbGQgZml4IGZvciBtaXBzCisKK1NpZ25lZC1vZmYtYnk6IFNoaXZyYWogUGF0aWwgPHNoaXZyYWoucGF0aWxAaW1ndGVjLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJvbmFsZCBTLiBCdWx0amUgPHJzYnVsdGplQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisgbGliYXZjb2RlYy9taXBzL2hldmNwcmVkX2luaXRfbWlwcy5jIHwgMyArKy0KKyBsaWJhdmNvZGVjL21pcHMvaGV2Y3ByZWRfbXNhLmMgICAgICAgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJhdmNvZGVjL21pcHMvaGV2Y3ByZWRfaW5pdF9taXBzLmMgYi9saWJhdmNvZGVjL21pcHMvaGV2Y3ByZWRfaW5pdF9taXBzLmMKK2luZGV4IDMzMWNmYWMxMTUuLmU5ODc2OThkNjYgMTAwNjQ0CistLS0gYS9saWJhdmNvZGVjL21pcHMvaGV2Y3ByZWRfaW5pdF9taXBzLmMKKysrKyBiL2xpYmF2Y29kZWMvbWlwcy9oZXZjcHJlZF9pbml0X21pcHMuYworQEAgLTE4LDcgKzE4LDggQEAKKyAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgICovCisgCistI2luY2x1ZGUgImxpYmF2Y29kZWMvaGV2Yy5oIgorKyNpbmNsdWRlICJjb25maWcuaCIKKysjaW5jbHVkZSAibGliYXZ1dGlsL2F0dHJpYnV0ZXMuaCIKKyAjaW5jbHVkZSAibGliYXZjb2RlYy9taXBzL2hldmNwcmVkX21pcHMuaCIKKyAKKyAjaWYgSEFWRV9NU0EKK2RpZmYgLS1naXQgYS9saWJhdmNvZGVjL21pcHMvaGV2Y3ByZWRfbXNhLmMgYi9saWJhdmNvZGVjL21pcHMvaGV2Y3ByZWRfbXNhLmMKK2luZGV4IDZhM2IyODE1ZmQuLjk2M2M2NGM4NjEgMTAwNjQ0CistLS0gYS9saWJhdmNvZGVjL21pcHMvaGV2Y3ByZWRfbXNhLmMKKysrKyBiL2xpYmF2Y29kZWMvbWlwcy9oZXZjcHJlZF9tc2EuYworQEAgLTE4LDcgKzE4LDcgQEAKKyAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgICovCisgCistI2luY2x1ZGUgImxpYmF2Y29kZWMvaGV2Yy5oIgorKyNpbmNsdWRlICJsaWJhdmNvZGVjL2hldmNkZWMuaCIKKyAjaW5jbHVkZSAibGliYXZ1dGlsL21pcHMvZ2VuZXJpY19tYWNyb3NfbXNhLmgiCisgI2luY2x1ZGUgImhldmNwcmVkX21pcHMuaCIKKyAKKy0tIAorMi4xMy4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mZm1wZWcvZmZtcGVnL0NWRS0yMDE3LTE0MDU0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2ZmbXBlZy9mZm1wZWcvQ1ZFLTIwMTctMTQwNTQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThiYWExOAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mZm1wZWcvZmZtcGVnL0NWRS0yMDE3LTE0MDU0LnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gMTI0ZWIyMDJlNzA2Nzg1Mzk1NDRmNjI2OGVmYzk4MTMxZjE5ZmE0OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT89RTU9QUQ9OTk9RTY9QjU9QTk9MjBhbmQ9MjA9RTU9QkM9QTA9RTY9QjQ9QUE9RTQ9QkE9QUU9Mjg/PQorID0/VVRGLTg/cT89RTY9OUM9OUI9RTU9ODg9OUQ9Mjk/PSA8dG9ueS5zaCBhbmQgd2FuZ2NodS56aGxAYWxpYmFiYS1pbmMuY29tPgorRGF0ZTogRnJpLCAyNSBBdWcgMjAxNyAwMToxNToyOCArMDIwMAorU3ViamVjdDogW1BBVENIXSBhdmZvcm1hdC9ybWRlYzogRml4IERvUyBkdWUgdG8gbGFjayBvZiBlb2YgY2hlY2sKKworRml4ZXM6IGxvb3AuaXZyCisKK0ZvdW5kLWJ5OiBYaWFvaGVpIGFuZCBXYW5nY2h1IGZyb20gQWxpYmFiYSBTZWN1cml0eSBUZWFtCitTaWduZWQtb2ZmLWJ5OiBNaWNoYWVsIE5pZWRlcm1heWVyIDxtaWNoYWVsQG5pZWRlcm1heWVyLmNjPgorCitDVkU6IENWRS0yMDE3LTE0MDU0CitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYmF2Zm9ybWF0L3JtZGVjLmMgfCA1ICsrKystCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvcm1kZWMuYyBiL2xpYmF2Zm9ybWF0L3JtZGVjLmMKK2luZGV4IDE3OGVhZWEuLmQ2ZDdkOWMgMTAwNjQ0CistLS0gYS9saWJhdmZvcm1hdC9ybWRlYy5jCisrKysgYi9saWJhdmZvcm1hdC9ybWRlYy5jCitAQCAtMTIyMyw4ICsxMjIzLDExIEBAIHN0YXRpYyBpbnQgaXZyX3JlYWRfaGVhZGVyKEFWRm9ybWF0Q29udGV4dCAqcykKKyAgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0RFQlVHLCAiJXMgPSAnJXMnXG4iLCBrZXksIHZhbCk7CisgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gNCkgeworICAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfREVCVUcsICIlcyA9ICcweCIsIGtleSk7CistICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKQorKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsZW47IGorKykgeworKyAgICAgICAgICAgICAgICBpZiAoYXZpb19mZW9mKHBiKSkKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0RFQlVHLCAiJVgiLCBhdmlvX3I4KHBiKSk7CisrICAgICAgICAgICAgfQorICAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfREVCVUcsICInXG4iKTsKKyAgICAgICAgIH0gZWxzZSBpZiAobGVuID09IDQgJiYgdHlwZSA9PSAzICYmICFzdHJuY21wKGtleSwgIlN0cmVhbUNvdW50IiwgdGxlbikpIHsKKyAgICAgICAgICAgICBuYl9zdHJlYW1zID0gdmFsdWUgPSBhdmlvX3JiMzIocGIpOworLS0gCisyLjEuMAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZy9DVkUtMjAxNy0xNDA1NS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mZm1wZWcvZmZtcGVnL0NWRS0yMDE3LTE0MDU1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZDBkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZy9DVkUtMjAxNy0xNDA1NS5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIDRmMDVlMmUyZGMxYTg5ZjM4Y2Q5ZjA5NjBhNjU2MTA4M2Q3MTRmMWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaWNoYWVsIE5pZWRlcm1heWVyIDxtaWNoYWVsQG5pZWRlcm1heWVyLmNjPgorRGF0ZTogRnJpLCAyNSBBdWcgMjAxNyAwMToxNTozMCArMDIwMAorU3ViamVjdDogW1BBVENIXSBhdmZvcm1hdC9tdmRlYzogRml4IERvUyBkdWUgdG8gbGFjayBvZiBlb2YgY2hlY2sKKworRml4ZXM6IGxvb3AubXYKKworRm91bmQtYnk6IFhpYW9oZWkgYW5kIFdhbmdjaHUgZnJvbSBBbGliYWJhIFNlY3VyaXR5IFRlYW0KK1NpZ25lZC1vZmYtYnk6IE1pY2hhZWwgTmllZGVybWF5ZXIgPG1pY2hhZWxAbmllZGVybWF5ZXIuY2M+CisKK0NWRTogQ1ZFLTIwMTctMTQwNTUKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgbGliYXZmb3JtYXQvbXZkZWMuYyB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9tdmRlYy5jIGIvbGliYXZmb3JtYXQvbXZkZWMuYworaW5kZXggMGUxMmM4Yy4uZjdhYTRjYiAxMDA2NDQKKy0tLSBhL2xpYmF2Zm9ybWF0L212ZGVjLmMKKysrKyBiL2xpYmF2Zm9ybWF0L212ZGVjLmMKK0BAIC0zNDIsNiArMzQyLDggQEAgc3RhdGljIGludCBtdl9yZWFkX2hlYWRlcihBVkZvcm1hdENvbnRleHQgKmF2Y3R4KQorICAgICAgICAgICAgIHVpbnQzMl90IHBvcyAgID0gYXZpb19yYjMyKHBiKTsKKyAgICAgICAgICAgICB1aW50MzJfdCBhc2l6ZSA9IGF2aW9fcmIzMihwYik7CisgICAgICAgICAgICAgdWludDMyX3QgdnNpemUgPSBhdmlvX3JiMzIocGIpOworKyAgICAgICAgICAgIGlmIChhdmlvX2Zlb2YocGIpKQorKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgICAgICBhdmlvX3NraXAocGIsIDgpOworICAgICAgICAgICAgIGF2X2FkZF9pbmRleF9lbnRyeShhc3QsIHBvcywgdGltZXN0YW1wLCBhc2l6ZSwgMCwgQVZJTkRFWF9LRVlGUkFNRSk7CisgICAgICAgICAgICAgYXZfYWRkX2luZGV4X2VudHJ5KHZzdCwgcG9zICsgYXNpemUsIGksIHZzaXplLCAwLCBBVklOREVYX0tFWUZSQU1FKTsKKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2ZmbXBlZy9mZm1wZWcvQ1ZFLTIwMTctMTQwNTYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZy9DVkUtMjAxNy0xNDA1Ni5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODhiMzU3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2ZmbXBlZy9mZm1wZWcvQ1ZFLTIwMTctMTQwNTYucGF0Y2gKQEAgLTAsMCArMSw1MSBAQAorRnJvbSA5NmYyNGQxYmVlN2ZlN2JhYzA4ZTJiN2M3NGRiMWEwNDZjOWRjMGRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xPz1FNT1BRD05OT1FNj1CNT1BOT0yMGFuZD0yMD1FNT1CQz1BMD1FNj1CND1BQT1FND1CQT1BRT0yOD89CisgPT9VVEYtOD9xPz1FNj05Qz05Qj1FNT04OD05RD0yOT89IDx0b255LnNoIGFuZCB3YW5nY2h1LnpobEBhbGliYWJhLWluYy5jb20+CitEYXRlOiBGcmksIDI1IEF1ZyAyMDE3IDAxOjE1OjI5ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGF2Zm9ybWF0L3JsMjogRml4IERvUyBkdWUgdG8gbGFjayBvZiBlb2YgY2hlY2sKKworRml4ZXM6IGxvb3AucmwyCisKK0ZvdW5kLWJ5OiBYaWFvaGVpIGFuZCBXYW5nY2h1IGZyb20gQWxpYmFiYSBTZWN1cml0eSBUZWFtCitTaWduZWQtb2ZmLWJ5OiBNaWNoYWVsIE5pZWRlcm1heWVyIDxtaWNoYWVsQG5pZWRlcm1heWVyLmNjPgorCitDVkU6IENWRS0yMDE3LTE0MDU2CitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYmF2Zm9ybWF0L3JsMi5jIHwgMTUgKysrKysrKysrKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9ybDIuYyBiL2xpYmF2Zm9ybWF0L3JsMi5jCitpbmRleCAwYmVjOGYxLi5lYjE2ODJkIDEwMDY0NAorLS0tIGEvbGliYXZmb3JtYXQvcmwyLmMKKysrKyBiL2xpYmF2Zm9ybWF0L3JsMi5jCitAQCAtMTcwLDEyICsxNzAsMjEgQEAgc3RhdGljIGF2X2NvbGQgaW50IHJsMl9yZWFkX2hlYWRlcihBVkZvcm1hdENvbnRleHQgKnMpCisgICAgIH0KKyAKKyAgICAgLyoqIHJlYWQgb2Zmc2V0IGFuZCBzaXplIHRhYmxlcyAqLworLSAgICBmb3IoaT0wOyBpIDwgZnJhbWVfY291bnQ7aSsrKQorKyAgICBmb3IoaT0wOyBpIDwgZnJhbWVfY291bnQ7aSsrKSB7CisrICAgICAgICBpZiAoYXZpb19mZW9mKHBiKSkKKysgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgIGNodW5rX3NpemVbaV0gPSBhdmlvX3JsMzIocGIpOworLSAgICBmb3IoaT0wOyBpIDwgZnJhbWVfY291bnQ7aSsrKQorKyAgICB9CisrICAgIGZvcihpPTA7IGkgPCBmcmFtZV9jb3VudDtpKyspIHsKKysgICAgICAgIGlmIChhdmlvX2Zlb2YocGIpKQorKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICAgY2h1bmtfb2Zmc2V0W2ldID0gYXZpb19ybDMyKHBiKTsKKy0gICAgZm9yKGk9MDsgaSA8IGZyYW1lX2NvdW50O2krKykKKysgICAgfQorKyAgICBmb3IoaT0wOyBpIDwgZnJhbWVfY291bnQ7aSsrKSB7CisrICAgICAgICBpZiAoYXZpb19mZW9mKHBiKSkKKysgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgIGF1ZGlvX3NpemVbaV0gPSBhdmlvX3JsMzIocGIpICYgMHhGRkZGOworKyAgICB9CisgCisgICAgIC8qKiBidWlsZCB0aGUgc2FtcGxlIGluZGV4ICovCisgICAgIGZvcihpPTA7aTxmcmFtZV9jb3VudDtpKyspeworLS0gCisyLjEuMAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZy9DVkUtMjAxNy0xNDA1Ny5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mZm1wZWcvZmZtcGVnL0NWRS0yMDE3LTE0MDU3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMDFkMjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZy9DVkUtMjAxNy0xNDA1Ny5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIDdmOWVjNTU5M2UwNDgyNzI0OWU3YWViNDY2ZGEwNmE5OGEwZDczMjkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/PUU1PUFEPTk5PUU2PUI1PUE5PTIwYW5kPTIwPUU1PUJDPUEwPUU2PUI0PUFBPUU0PUJBPUFFPTI4Pz0KKyA9P1VURi04P3E/PUU2PTlDPTlCPUU1PTg4PTlEPTI5Pz0gPHRvbnkuc2ggYW5kIHdhbmdjaHUuemhsQGFsaWJhYmEtaW5jLmNvbT4KK0RhdGU6IEZyaSwgMjUgQXVnIDIwMTcgMTI6Mzc6MjUgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gYXZmb3JtYXQvYXNmZGVjOiBGaXggRG9TIGR1ZSB0byBsYWNrIG9mIGVvZiBjaGVjaworCitGaXhlczogbG9vcC5hc2YKKworRm91bmQtYnk6IFhpYW9oZWkgYW5kIFdhbmdjaHUgZnJvbSBBbGliYWJhIFNlY3VyaXR5IFRlYW0KK1NpZ25lZC1vZmYtYnk6IE1pY2hhZWwgTmllZGVybWF5ZXIgPG1pY2hhZWxAbmllZGVybWF5ZXIuY2M+CisKK0NWRTogQ1ZFLTIwMTctMTQwNTcKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgbGliYXZmb3JtYXQvYXNmZGVjX2YuYyB8IDYgKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2FzZmRlY19mLmMgYi9saWJhdmZvcm1hdC9hc2ZkZWNfZi5jCitpbmRleCBiZTA5YTkyLi5mM2FjYmFlIDEwMDY0NAorLS0tIGEvbGliYXZmb3JtYXQvYXNmZGVjX2YuYworKysrIGIvbGliYXZmb3JtYXQvYXNmZGVjX2YuYworQEAgLTc0OSwxMyArNzQ5LDE1IEBAIHN0YXRpYyBpbnQgYXNmX3JlYWRfbWFya2VyKEFWRm9ybWF0Q29udGV4dCAqcywgaW50NjRfdCBzaXplKQorICAgICBjb3VudCA9IGF2aW9fcmwzMihwYik7ICAgIC8vIG1hcmtlcnMgY291bnQKKyAgICAgYXZpb19ybDE2KHBiKTsgICAgICAgICAgICAvLyByZXNlcnZlZCAyIGJ5dGVzCisgICAgIG5hbWVfbGVuID0gYXZpb19ybDE2KHBiKTsgLy8gbmFtZSBsZW5ndGgKKy0gICAgZm9yIChpID0gMDsgaSA8IG5hbWVfbGVuOyBpKyspCistICAgICAgICBhdmlvX3I4KHBiKTsgLy8gc2tpcCB0aGUgbmFtZQorKyAgICBhdmlvX3NraXAocGIsIG5hbWVfbGVuKTsKKyAKKyAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgIGludDY0X3QgcHJlc190aW1lOworICAgICAgICAgaW50IG5hbWVfbGVuOworIAorKyAgICAgICAgaWYgKGF2aW9fZmVvZihwYikpCisrICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisrCisgICAgICAgICBhdmlvX3JsNjQocGIpOyAgICAgICAgICAgICAvLyBvZmZzZXQsIDggYnl0ZXMKKyAgICAgICAgIHByZXNfdGltZSA9IGF2aW9fcmw2NChwYik7IC8vIHByZXNlbnRhdGlvbiB0aW1lCisgICAgICAgICBwcmVzX3RpbWUgLT0gYXNmLT5oZHIucHJlcm9sbCAqIDEwMDAwOworLS0gCisyLjEuMAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZy9DVkUtMjAxNy0xNDA1OC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mZm1wZWcvZmZtcGVnL0NWRS0yMDE3LTE0MDU4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ODAzY2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZy9DVkUtMjAxNy0xNDA1OC5wYXRjaApAQCAtMCwwICsxLDk0IEBACitGcm9tIDdlYzQxNDg5MmRkY2FkODgzMTM4NDg0OTRiNmZjNWY0MzdjOWNhNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaWNoYWVsIE5pZWRlcm1heWVyIDxtaWNoYWVsQG5pZWRlcm1heWVyLmNjPgorRGF0ZTogU2F0LCAyNiBBdWcgMjAxNyAwMToyNjo1OCArMDIwMAorU3ViamVjdDogW1BBVENIXSBhdmZvcm1hdC9obHM6IEZpeCBEb1MgZHVlIHRvIGluZmluaXRlIGxvb3AKKworRml4ZXM6IGxvb3AubTN1CisKK1RoZSBkZWZhdWx0IG1heCBpdGVyYXRpb24gY291bnQgb2YgMTAwMCBpcyBhcmJpdHJhcnkgYW5kIGlkZWFzIGZvciBhIGJldHRlciBzb2x1dGlvbiBhcmUgd2VsY29tZQorCitGb3VuZC1ieTogWGlhb2hlaSBhbmQgV2FuZ2NodSBmcm9tIEFsaWJhYmEgU2VjdXJpdHkgVGVhbQorCitQcmV2aW91cyB2ZXJzaW9uIHJldmlld2VkLWJ5OiBTdGV2ZW4gTGl1IDxsaW5naml1amlhbmtlQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1pY2hhZWwgTmllZGVybWF5ZXIgPG1pY2hhZWxAbmllZGVybWF5ZXIuY2M+CisKK0NWRTogQ1ZFLTIwMTctMTQwNTgKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgZG9jL2RlbXV4ZXJzLnRleGkgfCAxOCArKysrKysrKysrKysrKysrKysKKyBsaWJhdmZvcm1hdC9obHMuYyB8ICA3ICsrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDI1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2RvYy9kZW11eGVycy50ZXhpIGIvZG9jL2RlbXV4ZXJzLnRleGkKK2luZGV4IDI5YTIzZDQuLjczZGMwZmUgMTAwNjQ0CistLS0gYS9kb2MvZGVtdXhlcnMudGV4aQorKysrIGIvZG9jL2RlbXV4ZXJzLnRleGkKK0BAIC0zMDAsNiArMzAwLDI0IEBAIHVzZWQgdG8gZW5kIHRoZSBvdXRwdXQgdmlkZW8gYXQgdGhlIGxlbmd0aCBvZiB0aGUgc2hvcnRlc3QgaW5wdXQgZmlsZSwKKyB3aGljaCBpbiB0aGlzIGNhc2UgaXMgQGZpbGV7aW5wdXQubXA0fSBhcyB0aGUgR0lGIGluIHRoaXMgZXhhbXBsZSBsb29wcworIGluZmluaXRlbHkuCisgCisrQHNlY3Rpb24gaGxzCisrCisrSExTIGRlbXV4ZXIKKysKKytJdCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKysKKytAdGFibGUgQG9wdGlvbgorK0BpdGVtIGxpdmVfc3RhcnRfaW5kZXgKKytzZWdtZW50IGluZGV4IHRvIHN0YXJ0IGxpdmUgc3RyZWFtcyBhdCAobmVnYXRpdmUgdmFsdWVzIGFyZSBmcm9tIHRoZSBlbmQpLgorKworK0BpdGVtIGFsbG93ZWRfZXh0ZW5zaW9ucworKycsJyBzZXBhcmF0ZWQgbGlzdCBvZiBmaWxlIGV4dGVuc2lvbnMgdGhhdCBobHMgaXMgYWxsb3dlZCB0byBhY2Nlc3MuCisrCisrQGl0ZW0gbWF4X3JlbG9hZAorK01heGltdW0gbnVtYmVyIG9mIHRpbWVzIGEgaW5zdWZmaWNpZW50IGxpc3QgaXMgYXR0ZW1wdGVkIHRvIGJlIHJlbG9hZGVkLgorK0RlZmF1bHQgdmFsdWUgaXMgMTAwMC4KKytAZW5kIHRhYmxlCisrCisgQHNlY3Rpb24gaW1hZ2UyCisgCisgSW1hZ2UgZmlsZSBkZW11eGVyLgorZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2hscy5jIGIvbGliYXZmb3JtYXQvaGxzLmMKK2luZGV4IDAxNzMxYmQuLjA5OTUzNDUgMTAwNjQ0CistLS0gYS9saWJhdmZvcm1hdC9obHMuYworKysrIGIvbGliYXZmb3JtYXQvaGxzLmMKK0BAIC0yMDUsNiArMjA1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSExTQ29udGV4dCB7CisgICAgIEFWRGljdGlvbmFyeSAqYXZpb19vcHRzOworICAgICBpbnQgc3RyaWN0X3N0ZF9jb21wbGlhbmNlOworICAgICBjaGFyICphbGxvd2VkX2V4dGVuc2lvbnM7CisrICAgIGludCBtYXhfcmVsb2FkOworIH0gSExTQ29udGV4dDsKKyAKKyBzdGF0aWMgaW50IHJlYWRfY2hvbXBfbGluZShBVklPQ29udGV4dCAqcywgY2hhciAqYnVmLCBpbnQgbWF4bGVuKQorQEAgLTEyNjMsNiArMTI2NCw3IEBAIHN0YXRpYyBpbnQgcmVhZF9kYXRhKHZvaWQgKm9wYXF1ZSwgdWludDhfdCAqYnVmLCBpbnQgYnVmX3NpemUpCisgICAgIEhMU0NvbnRleHQgKmMgPSB2LT5wYXJlbnQtPnByaXZfZGF0YTsKKyAgICAgaW50IHJldCwgaTsKKyAgICAgaW50IGp1c3Rfb3BlbmVkID0gMDsKKysgICAgaW50IHJlbG9hZF9jb3VudCA9IDA7CisgCisgcmVzdGFydDoKKyAgICAgaWYgKCF2LT5uZWVkZWQpCitAQCAtMTI5NCw2ICsxMjk2LDkgQEAgcmVzdGFydDoKKyAgICAgICAgIHJlbG9hZF9pbnRlcnZhbCA9IGRlZmF1bHRfcmVsb2FkX2ludGVydmFsKHYpOworIAorIHJlbG9hZDoKKysgICAgICAgIHJlbG9hZF9jb3VudCsrOworKyAgICAgICAgaWYgKHJlbG9hZF9jb3VudCA+IGMtPm1heF9yZWxvYWQpCisrICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRU9GOworICAgICAgICAgaWYgKCF2LT5maW5pc2hlZCAmJgorICAgICAgICAgICAgIGF2X2dldHRpbWVfcmVsYXRpdmUoKSAtIHYtPmxhc3RfbG9hZF90aW1lID49IHJlbG9hZF9pbnRlcnZhbCkgeworICAgICAgICAgICAgIGlmICgocmV0ID0gcGFyc2VfcGxheWxpc3QoYywgdi0+dXJsLCB2LCBOVUxMKSkgPCAwKSB7CitAQCAtMjE1MCw2ICsyMTU1LDggQEAgc3RhdGljIGNvbnN0IEFWT3B0aW9uIGhsc19vcHRpb25zW10gPSB7CisgICAgICAgICBPRkZTRVQoYWxsb3dlZF9leHRlbnNpb25zKSwgQVZfT1BUX1RZUEVfU1RSSU5HLAorICAgICAgICAgey5zdHIgPSAiM2dwLGFhYyxhdmksZmxhYyxta3YsbTN1OCxtNGEsbTRzLG00dixtcGcsbW92LG1wMixtcDMsbXA0LG1wZWcsbXBlZ3RzLG9nZyxvZ3Ysb2dhLHRzLHZvYix3YXYifSwKKyAgICAgICAgIElOVF9NSU4sIElOVF9NQVgsIEZMQUdTfSwKKysgICAgeyJtYXhfcmVsb2FkIiwgIk1heGltdW0gbnVtYmVyIG9mIHRpbWVzIGEgaW5zdWZmaWNpZW50IGxpc3QgaXMgYXR0ZW1wdGVkIHRvIGJlIHJlbG9hZGVkIiwKKysgICAgICAgIE9GRlNFVChtYXhfcmVsb2FkKSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2NCA9IDEwMDB9LCAwLCBJTlRfTUFYLCBGTEFHU30sCisgICAgIHtOVUxMfQorIH07CisgCistLSAKKzIuMS4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mZm1wZWcvZmZtcGVnL0NWRS0yMDE3LTE0MDU5LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2ZmbXBlZy9mZm1wZWcvQ1ZFLTIwMTctMTQwNTkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRmZGUwYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mZm1wZWcvZmZtcGVnL0NWRS0yMDE3LTE0MDU5LnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gN2U4MGI2M2VjZDI1OWQ2OWQzODM2MjNlNzViMzE4YmYyYmQ0OTFmNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT89RTU9QUQ9OTk9RTY9QjU9QTk9MjBhbmQ9MjA9RTU9QkM9QTA9RTY9QjQ9QUE9RTQ9QkE9QUU9Mjg/PQorID0/VVRGLTg/cT89RTY9OUM9OUI9RTU9ODg9OUQ9Mjk/PSA8dG9ueS5zaCBhbmQgd2FuZ2NodS56aGxAYWxpYmFiYS1pbmMuY29tPgorRGF0ZTogRnJpLCAyNSBBdWcgMjAxNyAwMToxNToyNyArMDIwMAorU3ViamVjdDogW1BBVENIXSBhdmZvcm1hdC9jaW5lZGVjOiBGaXggRG9TIGR1ZSB0byBsYWNrIG9mIGVvZiBjaGVjaworCitGaXhlczogbG9vcC5jaW5lCisKK0ZvdW5kLWJ5OiBYaWFvaGVpIGFuZCBXYW5nY2h1IGZyb20gQWxpYmFiYSBTZWN1cml0eSBUZWFtCitTaWduZWQtb2ZmLWJ5OiBNaWNoYWVsIE5pZWRlcm1heWVyIDxtaWNoYWVsQG5pZWRlcm1heWVyLmNjPgorCitDVkU6IENWRS0yMDE3LTE0MDU5CitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYmF2Zm9ybWF0L2NpbmVkZWMuYyB8IDYgKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvY2luZWRlYy5jIGIvbGliYXZmb3JtYXQvY2luZWRlYy5jCitpbmRleCA3NjNiOTNiLi5kZTM0ZmI5IDEwMDY0NAorLS0tIGEvbGliYXZmb3JtYXQvY2luZWRlYy5jCisrKysgYi9saWJhdmZvcm1hdC9jaW5lZGVjLmMKK0BAIC0yNjcsOCArMjY3LDEyIEBAIHN0YXRpYyBpbnQgY2luZV9yZWFkX2hlYWRlcihBVkZvcm1hdENvbnRleHQgKmF2Y3R4KQorIAorICAgICAvKiBwYXJzZSBpbWFnZSBvZmZzZXRzICovCisgICAgIGF2aW9fc2VlayhwYiwgb2ZmSW1hZ2VPZmZzZXRzLCBTRUVLX1NFVCk7CistICAgIGZvciAoaSA9IDA7IGkgPCBzdC0+ZHVyYXRpb247IGkrKykKKysgICAgZm9yIChpID0gMDsgaSA8IHN0LT5kdXJhdGlvbjsgaSsrKSB7CisrICAgICAgICBpZiAoYXZpb19mZW9mKHBiKSkKKysgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKysKKyAgICAgICAgIGF2X2FkZF9pbmRleF9lbnRyeShzdCwgYXZpb19ybDY0KHBiKSwgaSwgMCwgMCwgQVZJTkRFWF9LRVlGUkFNRSk7CisrICAgIH0KKyAKKyAgICAgcmV0dXJuIDA7CisgfQorLS0gCisyLjEuMAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZy9DVkUtMjAxNy0xNDE2OS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mZm1wZWcvZmZtcGVnL0NWRS0yMDE3LTE0MTY5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMjg0ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZy9DVkUtMjAxNy0xNDE2OS5wYXRjaApAQCAtMCwwICsxLDM5IEBACitGcm9tIDlkMDBmYjlkNzBlZThjMGNjNzAwMmI4OTMxOGM1YmUwMGYxYmJkYWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/PUU1PUFEPTk5PUU2PUI1PUE5PTI4PUU2PTk5PTkzPUU5PUJCPTkxPTI5Pz0KKyA8dG9ueS5zaEBhbGliYWJhLWluYy5jb20+CitEYXRlOiBUdWUsIDI5IEF1ZyAyMDE3IDIzOjU5OjIxICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGF2Zm9ybWF0L214ZmRlYzogRml4IFNpZ24gZXJyb3IgaW4gbXhmX3JlYWRfcHJpbWVyX3BhY2soKQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitGaXhlczogMjAxNzA4MjlCLm14ZgorCitDby1BdXRob3I6IOW8oOa0quS6rijmnJvliJ0pIiA8d2FuZ2NodS56aGxAYWxpYmFiYS1pbmMuY29tPgorRm91bmQtYnk6IFhpYW9oZWkgYW5kIFdhbmdjaHUgZnJvbSBBbGliYWJhIFNlY3VyaXR5IFRlYW0KK1NpZ25lZC1vZmYtYnk6IE1pY2hhZWwgTmllZGVybWF5ZXIgPG1pY2hhZWxAbmllZGVybWF5ZXIuY2M+CisKK0NWRTogQ1ZFLTIwMTctMTQxNjkKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgbGliYXZmb3JtYXQvbXhmZGVjLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9teGZkZWMuYyBiL2xpYmF2Zm9ybWF0L214ZmRlYy5jCitpbmRleCA2YWRiNzdkLi45MTczMWE3IDEwMDY0NAorLS0tIGEvbGliYXZmb3JtYXQvbXhmZGVjLmMKKysrKyBiL2xpYmF2Zm9ybWF0L214ZmRlYy5jCitAQCAtNTAwLDcgKzUwMCw3IEBAIHN0YXRpYyBpbnQgbXhmX3JlYWRfcHJpbWVyX3BhY2sodm9pZCAqYXJnLCBBVklPQ29udGV4dCAqcGIsIGludCB0YWcsIGludCBzaXplLCBVCisgICAgICAgICBhdnByaXZfcmVxdWVzdF9zYW1wbGUocGIsICJQcmltZXIgcGFjayBpdGVtIGxlbmd0aCAlZCIsIGl0ZW1fbGVuKTsKKyAgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKyAgICAgfQorLSAgICBpZiAoaXRlbV9udW0gPiA2NTUzNikgeworKyAgICBpZiAoaXRlbV9udW0gPiA2NTUzNiB8fCBpdGVtX251bSA8IDApIHsKKyAgICAgICAgIGF2X2xvZyhteGYtPmZjLCBBVl9MT0dfRVJST1IsICJpdGVtX251bSAlZCBpcyB0b28gbGFyZ2VcbiIsIGl0ZW1fbnVtKTsKKyAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICB9CistLSAKKzIuMS4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mZm1wZWcvZmZtcGVnL0NWRS0yMDE3LTE0MTcwLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2ZmbXBlZy9mZm1wZWcvQ1ZFLTIwMTctMTQxNzAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg2MDEyNQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mZm1wZWcvZmZtcGVnL0NWRS0yMDE3LTE0MTcwLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK0Zyb20gOTAwZjM5NjkyY2EwMzM3YTk4YTdjZjA0N2U0ZTI2MTEwNzE4MTBjMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT89RTU9QUQ9OTk9RTY9QjU9QTk9Mjg9RTY9OTk9OTM9RTk9QkI9OTE9Mjk/PQorIDx0b255LnNoQGFsaWJhYmEtaW5jLmNvbT4KK0RhdGU6IFR1ZSwgMjkgQXVnIDIwMTcgMjM6NTk6MjEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gYXZmb3JtYXQvbXhmZGVjOiBGaXggRG9TIGlzc3VlcyBpbgorIG14Zl9yZWFkX2luZGV4X2VudHJ5X2FycmF5KCkKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworRml4ZXM6IDIwMTcwODI5QS5teGYKKworQ28tQXV0aG9yOiDlvKDmtKrkuq4o5pyb5YidKSIgPHdhbmdjaHUuemhsQGFsaWJhYmEtaW5jLmNvbT4KK0ZvdW5kLWJ5OiBYaWFvaGVpIGFuZCBXYW5nY2h1IGZyb20gQWxpYmFiYSBTZWN1cml0eSBUZWFtCitTaWduZWQtb2ZmLWJ5OiBNaWNoYWVsIE5pZWRlcm1heWVyIDxtaWNoYWVsQG5pZWRlcm1heWVyLmNjPgorCitDVkU6IENWRS0yMDE3LTE0MTcwCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYmF2Zm9ybWF0L214ZmRlYy5jIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvbXhmZGVjLmMgYi9saWJhdmZvcm1hdC9teGZkZWMuYworaW5kZXggZjhkMGY5ZS4uNmFkYjc3ZCAxMDA2NDQKKy0tLSBhL2xpYmF2Zm9ybWF0L214ZmRlYy5jCisrKysgYi9saWJhdmZvcm1hdC9teGZkZWMuYworQEAgLTg5OSw2ICs4OTksOCBAQCBzdGF0aWMgaW50IG14Zl9yZWFkX2luZGV4X2VudHJ5X2FycmF5KEFWSU9Db250ZXh0ICpwYiwgTVhGSW5kZXhUYWJsZVNlZ21lbnQgKnNlZworICAgICBzZWdtZW50LT5uYl9pbmRleF9lbnRyaWVzID0gYXZpb19yYjMyKHBiKTsKKyAKKyAgICAgbGVuZ3RoID0gYXZpb19yYjMyKHBiKTsKKysgICAgaWYoc2VnbWVudC0+bmJfaW5kZXhfZW50cmllcyAmJiBsZW5ndGggPCAxMSkKKysgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworIAorICAgICBpZiAoIShzZWdtZW50LT50ZW1wb3JhbF9vZmZzZXRfZW50cmllcz1hdl9jYWxsb2Moc2VnbWVudC0+bmJfaW5kZXhfZW50cmllcywgc2l6ZW9mKCpzZWdtZW50LT50ZW1wb3JhbF9vZmZzZXRfZW50cmllcykpKSB8fAorICAgICAgICAgIShzZWdtZW50LT5mbGFnX2VudHJpZXMgICAgICAgICAgPSBhdl9jYWxsb2Moc2VnbWVudC0+bmJfaW5kZXhfZW50cmllcywgc2l6ZW9mKCpzZWdtZW50LT5mbGFnX2VudHJpZXMpKSkgfHwKK0BAIC05MDksNiArOTExLDggQEAgc3RhdGljIGludCBteGZfcmVhZF9pbmRleF9lbnRyeV9hcnJheShBVklPQ29udGV4dCAqcGIsIE1YRkluZGV4VGFibGVTZWdtZW50ICpzZWcKKyAgICAgfQorIAorICAgICBmb3IgKGkgPSAwOyBpIDwgc2VnbWVudC0+bmJfaW5kZXhfZW50cmllczsgaSsrKSB7CisrICAgICAgICBpZihhdmlvX2Zlb2YocGIpKQorKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICAgc2VnbWVudC0+dGVtcG9yYWxfb2Zmc2V0X2VudHJpZXNbaV0gPSBhdmlvX3I4KHBiKTsKKyAgICAgICAgIGF2aW9fcjgocGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBLZXlGcmFtZU9mZnNldCAqLworICAgICAgICAgc2VnbWVudC0+ZmxhZ19lbnRyaWVzW2ldID0gYXZpb19yOChwYik7CistLSAKKzIuMS4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mZm1wZWcvZmZtcGVnL0NWRS0yMDE3LTE0MTcxLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2ZmbXBlZy9mZm1wZWcvQ1ZFLTIwMTctMTQxNzEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJhZTIwNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mZm1wZWcvZmZtcGVnL0NWRS0yMDE3LTE0MTcxLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0Zyb20gYzI0YmNiNTUzNjUwYjkxZTllZmYxNWVmNmU1NGNhNzNkZTI0NTNiNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT89RTU9QUQ9OTk9RTY9QjU9QTk9Mjg9RTY9OTk9OTM9RTk9QkI9OTE9Mjk/PQorIDx0b255LnNoQGFsaWJhYmEtaW5jLmNvbT4KK0RhdGU6IFR1ZSwgMjkgQXVnIDIwMTcgMjM6NTk6MjEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gYXZmb3JtYXQvbnN2ZGVjOiBGaXggRG9TIGR1ZSB0byBsYWNrIG9mIGVvZiBjaGVjayBpbgorIG5zdnNfZmlsZV9vZmZzZXQgbG9vcC4KK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworRml4ZXM6IDIwMTcwODI5Lm5zdgorCitDby1BdXRob3I6IOW8oOa0quS6rijmnJvliJ0pIiA8d2FuZ2NodS56aGxAYWxpYmFiYS1pbmMuY29tPgorRm91bmQtYnk6IFhpYW9oZWkgYW5kIFdhbmdjaHUgZnJvbSBBbGliYWJhIFNlY3VyaXR5IFRlYW0KK1NpZ25lZC1vZmYtYnk6IE1pY2hhZWwgTmllZGVybWF5ZXIgPG1pY2hhZWxAbmllZGVybWF5ZXIuY2M+CisKK0NWRTogQ1ZFLTIwMTctMTQxNzEKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgbGliYXZmb3JtYXQvbnN2ZGVjLmMgfCA1ICsrKystCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvbnN2ZGVjLmMgYi9saWJhdmZvcm1hdC9uc3ZkZWMuYworaW5kZXggYzZkZGI2Ny4uZDhjZTY1NiAxMDA2NDQKKy0tLSBhL2xpYmF2Zm9ybWF0L25zdmRlYy5jCisrKysgYi9saWJhdmZvcm1hdC9uc3ZkZWMuYworQEAgLTMzNSw4ICszMzUsMTEgQEAgc3RhdGljIGludCBuc3ZfcGFyc2VfTlNWZl9oZWFkZXIoQVZGb3JtYXRDb250ZXh0ICpzKQorICAgICAgICAgaWYgKCFuc3YtPm5zdnNfZmlsZV9vZmZzZXQpCisgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAKKy0gICAgICAgIGZvcihpPTA7aTx0YWJsZV9lbnRyaWVzX3VzZWQ7aSsrKQorKyAgICAgICAgZm9yKGk9MDtpPHRhYmxlX2VudHJpZXNfdXNlZDtpKyspIHsKKysgICAgICAgICAgICBpZiAoYXZpb19mZW9mKHBiKSkKKysgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAgICAgbnN2LT5uc3ZzX2ZpbGVfb2Zmc2V0W2ldID0gYXZpb19ybDMyKHBiKSArIHNpemU7CisrICAgICAgICB9CisgCisgICAgICAgICBpZih0YWJsZV9lbnRyaWVzID4gdGFibGVfZW50cmllc191c2VkICYmCisgICAgICAgICAgICBhdmlvX3JsMzIocGIpID09IE1LVEFHKCdUJywnTycsJ0MnLCcyJykpIHsKKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2ZmbXBlZy9mZm1wZWcvQ1ZFLTIwMTctMTQyMjIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZy9DVkUtMjAxNy0xNDIyMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTAyMDM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2ZmbXBlZy9mZm1wZWcvQ1ZFLTIwMTctMTQyMjIucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSA5Y2I0ZWI3NzI4MzljNWUxZGUyODU1ZDEyNmJmNzRmZjE2ZDEzMzgyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWljaGFlbCBOaWVkZXJtYXllciA8bWljaGFlbEBuaWVkZXJtYXllci5jYz4KK0RhdGU6IFR1ZSwgNSBTZXAgMjAxNyAwMDoxNjoyOSArMDIwMAorU3ViamVjdDogW1BBVENIXSBhdmZvcm1hdC9tb3Y6IEZpeCBEb1MgaW4gcmVhZF90ZnJhKCkKKworRml4ZXM6IE1pc3NpbmcgRU9GIGNoZWNrIGluIGxvb3AKK05vIHRlc3RjYXNlCisKK0ZvdW5kLWJ5OiBYaWFvaGVpIGFuZCBXYW5nY2h1IGZyb20gQWxpYmFiYSBTZWN1cml0eSBUZWFtCitTaWduZWQtb2ZmLWJ5OiBNaWNoYWVsIE5pZWRlcm1heWVyIDxtaWNoYWVsQG5pZWRlcm1heWVyLmNjPgorCitDVkU6IENWRS0yMDE3LTE0MjIyCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYmF2Zm9ybWF0L21vdi5jIHwgNyArKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvbW92LmMgYi9saWJhdmZvcm1hdC9tb3YuYworaW5kZXggOTk0ZTljNi4uMjUxOTcwNyAxMDA2NDQKKy0tLSBhL2xpYmF2Zm9ybWF0L21vdi5jCisrKysgYi9saWJhdmZvcm1hdC9tb3YuYworQEAgLTYwOTQsNiArNjA5NCwxMyBAQCBzdGF0aWMgaW50IHJlYWRfdGZyYShNT1ZDb250ZXh0ICptb3YsIEFWSU9Db250ZXh0ICpmKQorICAgICB9CisgICAgIGZvciAoaSA9IDA7IGkgPCBpbmRleC0+aXRlbV9jb3VudDsgaSsrKSB7CisgICAgICAgICBpbnQ2NF90IHRpbWUsIG9mZnNldDsKKysKKysgICAgICAgIGlmIChhdmlvX2Zlb2YoZikpIHsKKysgICAgICAgICAgICBpbmRleC0+aXRlbV9jb3VudCA9IDA7CisrICAgICAgICAgICAgYXZfZnJlZXAoJmluZGV4LT5pdGVtcyk7CisrICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisrICAgICAgICB9CisrCisgICAgICAgICBpZiAodmVyc2lvbiA9PSAxKSB7CisgICAgICAgICAgICAgdGltZSAgID0gYXZpb19yYjY0KGYpOworICAgICAgICAgICAgIG9mZnNldCA9IGF2aW9fcmI2NChmKTsKKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2ZmbXBlZy9mZm1wZWcvQ1ZFLTIwMTctMTQyMjMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZy9DVkUtMjAxNy0xNDIyMy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWZlZjZiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2ZmbXBlZy9mZm1wZWcvQ1ZFLTIwMTctMTQyMjMucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSBhZmM5YzY4M2VkOWRiMDFlZGIzNTdiYzhjMTllZGFkNDI4MmIzYTk3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWljaGFlbCBOaWVkZXJtYXllciA8bWljaGFlbEBuaWVkZXJtYXllci5jYz4KK0RhdGU6IFR1ZSwgNSBTZXAgMjAxNyAwMDoxNjoyOSArMDIwMAorU3ViamVjdDogW1BBVENIXSBhdmZvcm1hdC9hc2ZkZWM6IEZpeCBEb1MgaW4gYXNmX2J1aWxkX3NpbXBsZV9pbmRleCgpCisKK0ZpeGVzOiBNaXNzaW5nIEVPRiBjaGVjayBpbiBsb29wCitObyB0ZXN0Y2FzZQorCitGb3VuZC1ieTogWGlhb2hlaSBhbmQgV2FuZ2NodSBmcm9tIEFsaWJhYmEgU2VjdXJpdHkgVGVhbQorU2lnbmVkLW9mZi1ieTogTWljaGFlbCBOaWVkZXJtYXllciA8bWljaGFlbEBuaWVkZXJtYXllci5jYz4KKworQ1ZFOiBDVkUtMjAxNy0xNDIyMworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWJhdmZvcm1hdC9hc2ZkZWNfZi5jIHwgNSArKysrKworIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2FzZmRlY19mLmMgYi9saWJhdmZvcm1hdC9hc2ZkZWNfZi5jCitpbmRleCBmM2FjYmFlLi5jYzY0OGI5IDEwMDY0NAorLS0tIGEvbGliYXZmb3JtYXQvYXNmZGVjX2YuYworKysrIGIvbGliYXZmb3JtYXQvYXNmZGVjX2YuYworQEAgLTE2MTAsNiArMTYxMCwxMSBAQCBzdGF0aWMgaW50IGFzZl9idWlsZF9zaW1wbGVfaW5kZXgoQVZGb3JtYXRDb250ZXh0ICpzLCBpbnQgc3RyZWFtX2luZGV4KQorICAgICAgICAgICAgIGludDY0X3QgcG9zICAgICAgID0gcy0+aW50ZXJuYWwtPmRhdGFfb2Zmc2V0ICsgcy0+cGFja2V0X3NpemUgKiAoaW50NjRfdClwa3RudW07CisgICAgICAgICAgICAgaW50NjRfdCBpbmRleF9wdHMgPSBGRk1BWChhdl9yZXNjYWxlKGl0aW1lLCBpLCAxMDAwMCkgLSBhc2YtPmhkci5wcmVyb2xsLCAwKTsKKyAKKysgICAgICAgICAgICBpZiAoYXZpb19mZW9mKHMtPnBiKSkgeworKyAgICAgICAgICAgICAgICByZXQgPSBBVkVSUk9SX0lOVkFMSUREQVRBOworKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsKKysgICAgICAgICAgICB9CisrCisgICAgICAgICAgICAgaWYgKHBvcyAhPSBsYXN0X3BvcykgeworICAgICAgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0RFQlVHLCAicGt0bnVtOiVkLCBwa3RjdDolZCAgcHRzOiAlIlBSSWQ2NCJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwa3RudW0sIHBrdGN0LCBpbmRleF9wdHMpOworLS0gCisyLjEuMAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZy9DVkUtMjAxNy0xNDIyNS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mZm1wZWcvZmZtcGVnL0NWRS0yMDE3LTE0MjI1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNjg0NWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZy9DVkUtMjAxNy0xNDIyNS5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitTdWJqZWN0OiBbUEFUQ0hdIGZmcHJvYmU6IEZpeCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2l0aCBjb2xvciBwcmltYXJpZXMKKworRm91bmQtYnk6IEFELWxhYiBvZiB2ZW51c3RlY2gKK1NpZ25lZC1vZmYtYnk6IE1pY2hhZWwgTmllZGVybWF5ZXIgPG1pY2hhZWxAbmllZGVybWF5ZXIuY2M+CisKK0NWRTogQ1ZFLTIwMTctMTQyMjUKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgZmZwcm9iZS5jIHwgMTUgKysrKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9mZnByb2JlLmMgYi9mZnByb2JlLmMKK2luZGV4IGEyMTlmYzEuLmRmMjJiMzAgMTAwNjQ0CistLS0gYS9mZnByb2JlLmMKKysrKyBiL2ZmcHJvYmUuYworQEAgLTE4OTksNiArMTg5OSwxNiBAQCBzdGF0aWMgdm9pZCBwcmludF9wa3Rfc2lkZV9kYXRhKFdyaXRlckNvbnRleHQgKncsCisgICAgIHdyaXRlcl9wcmludF9zZWN0aW9uX2Zvb3Rlcih3KTsKKyB9CisgCisrc3RhdGljIHZvaWQgcHJpbnRfcHJpbWFyaWVzKFdyaXRlckNvbnRleHQgKncsIGVudW0gQVZDb2xvclByaW1hcmllcyBjb2xvcl9wcmltYXJpZXMpCisreworKyAgICBjb25zdCBjaGFyICp2YWwgPSBhdl9jb2xvcl9wcmltYXJpZXNfbmFtZShjb2xvcl9wcmltYXJpZXMpOworKyAgICBpZiAoIXZhbCB8fCBjb2xvcl9wcmltYXJpZXMgPT0gQVZDT0xfUFJJX1VOU1BFQ0lGSUVEKSB7CisrCXByaW50X3N0cl9vcHQoImNvbG9yX3ByaW1hcmllcyIsICJ1bmtub3duIik7CisrICAgIH0gZWxzZSB7CisrCXByaW50X3N0cigiY29sb3JfcHJpbWFyaWVzIiwgdmFsKTsKKysgICAgfQorK30KKysKKyBzdGF0aWMgdm9pZCBjbGVhcl9sb2coaW50IG5lZWRfbG9jaykKKyB7CisgICAgIGludCBpOworQEAgLTI0MjAsMTAgKzI0MzAsNyBAQCBzdGF0aWMgaW50IHNob3dfc3RyZWFtKFdyaXRlckNvbnRleHQgKncsIEFWRm9ybWF0Q29udGV4dCAqZm10X2N0eCwgaW50IHN0cmVhbV9pZAorICAgICAgICAgZWxzZQorICAgICAgICAgICAgIHByaW50X3N0cl9vcHQoImNvbG9yX3RyYW5zZmVyIiwgYXZfY29sb3JfdHJhbnNmZXJfbmFtZShwYXItPmNvbG9yX3RyYykpOworIAorLSAgICAgICAgaWYgKHBhci0+Y29sb3JfcHJpbWFyaWVzICE9IEFWQ09MX1BSSV9VTlNQRUNJRklFRCkKKy0gICAgICAgICAgICBwcmludF9zdHIoImNvbG9yX3ByaW1hcmllcyIsIGF2X2NvbG9yX3ByaW1hcmllc19uYW1lKHBhci0+Y29sb3JfcHJpbWFyaWVzKSk7CistICAgICAgICBlbHNlCistICAgICAgICAgICAgcHJpbnRfc3RyX29wdCgiY29sb3JfcHJpbWFyaWVzIiwgYXZfY29sb3JfcHJpbWFyaWVzX25hbWUocGFyLT5jb2xvcl9wcmltYXJpZXMpKTsKKysgICAgICAgIHByaW50X3ByaW1hcmllcyh3LCBwYXItPmNvbG9yX3ByaW1hcmllcyk7CisgCisgICAgICAgICBpZiAocGFyLT5jaHJvbWFfbG9jYXRpb24gIT0gQVZDSFJPTUFfTE9DX1VOU1BFQ0lGSUVEKQorICAgICAgICAgICAgIHByaW50X3N0cigiY2hyb21hX2xvY2F0aW9uIiwgYXZfY2hyb21hX2xvY2F0aW9uX25hbWUocGFyLT5jaHJvbWFfbG9jYXRpb24pKTsKKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2ZmbXBlZy9mZm1wZWdfMy4yLjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZ18zLjIuNC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIxNmY4ZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZ18zLjIuNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi1TVU1NQVJZID0gIkEgY29tcGxldGUsIGNyb3NzLXBsYXRmb3JtIHNvbHV0aW9uIHRvIHJlY29yZCwgY29udmVydCBhbmQgc3RyZWFtIGF1ZGlvIGFuZCB2aWRlby4iCi1ERVNDUklQVElPTiA9ICJGRm1wZWcgaXMgdGhlIGxlYWRpbmcgbXVsdGltZWRpYSBmcmFtZXdvcmssIGFibGUgdG8gZGVjb2RlLCBlbmNvZGUsIHRyYW5zY29kZSwgXAotICAgICAgICAgICAgICAgbXV4LCBkZW11eCwgc3RyZWFtLCBmaWx0ZXIgYW5kIHBsYXkgcHJldHR5IG11Y2ggYW55dGhpbmcgdGhhdCBodW1hbnMgYW5kIG1hY2hpbmVzIFwKLSAgICAgICAgICAgICAgIGhhdmUgY3JlYXRlZC4gSXQgc3VwcG9ydHMgdGhlIG1vc3Qgb2JzY3VyZSBhbmNpZW50IGZvcm1hdHMgdXAgdG8gdGhlIGN1dHRpbmcgZWRnZS4iCi1IT01FUEFHRSA9ICJodHRwczovL3d3dy5mZm1wZWcub3JnLyIKLVNFQ1RJT04gPSAibGlicyIKLQotTElDRU5TRSA9ICJCU0QgJiBHUEx2MisgJiBMR1BMdjIuMSsgJiBNSVQiCi1MSUNFTlNFXyR7UE59ID0gIkdQTHYyKyIKLUxJQ0VOU0VfbGliYXZjb2RlYyA9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdncGwnLCAnR1BMdjIrJywgJ0xHUEx2Mi4xKycsIGQpfSIKLUxJQ0VOU0VfbGliYXZkZXZpY2UgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZ3BsJywgJ0dQTHYyKycsICdMR1BMdjIuMSsnLCBkKX0iCi1MSUNFTlNFX2xpYmF2ZmlsdGVyID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2dwbCcsICdHUEx2MisnLCAnTEdQTHYyLjErJywgZCl9IgotTElDRU5TRV9saWJhdmZvcm1hdCA9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdncGwnLCAnR1BMdjIrJywgJ0xHUEx2Mi4xKycsIGQpfSIKLUxJQ0VOU0VfbGliYXZyZXNhbXBsZSA9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdncGwnLCAnR1BMdjIrJywgJ0xHUEx2Mi4xKycsIGQpfSIKLUxJQ0VOU0VfbGliYXZ1dGlsID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2dwbCcsICdHUEx2MisnLCAnTEdQTHYyLjErJywgZCl9IgotTElDRU5TRV9saWJwb3N0cHJvYyA9ICJHUEx2MisiCi1MSUNFTlNFX2xpYnN3cmVzYW1wbGUgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZ3BsJywgJ0dQTHYyKycsICdMR1BMdjIuMSsnLCBkKX0iCi1MSUNFTlNFX2xpYnN3c2NhbGUgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZ3BsJywgJ0dQTHYyKycsICdMR1BMdjIuMSsnLCBkKX0iCi1MSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuR1BMdjI7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuR1BMdjM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEdQTHYyLjE7bWQ1PWJkN2E0NDMzMjBhZjhjODEyZTRjMThkMWI3OWRmMDA0IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEdQTHYzO21kNT1lNmE2MDBmZDVlMWQ5Y2JkZTJkOTgzNjgwMjMzYWQwMiIKLQotU1JDX1VSSSA9ICJodHRwczovL3d3dy5mZm1wZWcub3JnL3JlbGVhc2VzLyR7QlB9LnRhci54eiBcCi0gICAgICAgICAgIGZpbGU6Ly9taXBzNjRfY3B1X2RldGVjdGlvbi5wYXRjaCBcCi0gICAgICAgICAgIgotU1JDX1VSSVttZDVzdW1dID0gIjM5ZmQ3MTAyNGFjNzZiYTM1ZjA0Mzk3MDIxYWY1NjA2IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjZlMzhmZjE0ZjA4MGM5OGI1OGNmNTk2NzU3MzUwMWI4Y2I1ODZlM2ExNzNiNTkxZjM4MDdkOGYwNjYwZGFmN2EiCi0KLSMgQnVpbGQgZmFpbHMgd2hlbiB0aHVtYiBpcyBlbmFibGVkOiBodHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MTcKLUFSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgotCi0jIFNob3VsZCBiZSBBUEkgY29tcGF0aWJsZSB3aXRoIGxpYmF2ICh3aGljaCB3YXMgYSBmb3JrIG9mIGZmbXBlZykKLSMgbGlicG9zdHByb2Mgd2FzIHByZXZpb3VzbHkgcGFja2FnZWQgZnJvbSBhIHNlcGFyYXRlIHJlY2lwZQotUFJPVklERVMgPSAibGliYXYgbGlicG9zdHByb2MiCi0KLURFUEVORFMgPSAiYWxzYS1saWIgemxpYiBsaWJvZ2cgeWFzbS1uYXRpdmUiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwotCi1QQUNLQUdFQ09ORklHID8/PSAiYXZkZXZpY2UgYXZmaWx0ZXIgYXZjb2RlYyBhdmZvcm1hdCBzd3Jlc2FtcGxlIHN3c2NhbGUgcG9zdHByb2MgXAotICAgICAgICAgICAgICAgICAgIGJ6bGliIGdwbCBsem1hIHRoZW9yYSB4MjY0IFwKLSAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEgeHYnLCAnJywgZCl9IgotCi0jIGxpYnJhcmllcyB0byBidWlsZCBpbiBhZGRpdGlvbiB0byBhdnV0aWwKLVBBQ0tBR0VDT05GSUdbYXZkZXZpY2VdID0gIi0tZW5hYmxlLWF2ZGV2aWNlLC0tZGlzYWJsZS1hdmRldmljZSIKLVBBQ0tBR0VDT05GSUdbYXZmaWx0ZXJdID0gIi0tZW5hYmxlLWF2ZmlsdGVyLC0tZGlzYWJsZS1hdmZpbHRlciIKLVBBQ0tBR0VDT05GSUdbYXZjb2RlY10gPSAiLS1lbmFibGUtYXZjb2RlYywtLWRpc2FibGUtYXZjb2RlYyIKLVBBQ0tBR0VDT05GSUdbYXZmb3JtYXRdID0gIi0tZW5hYmxlLWF2Zm9ybWF0LC0tZGlzYWJsZS1hdmZvcm1hdCIKLVBBQ0tBR0VDT05GSUdbc3dyZXNhbXBsZV0gPSAiLS1lbmFibGUtc3dyZXNhbXBsZSwtLWRpc2FibGUtc3dyZXNhbXBsZSIKLVBBQ0tBR0VDT05GSUdbc3dzY2FsZV0gPSAiLS1lbmFibGUtc3dzY2FsZSwtLWRpc2FibGUtc3dzY2FsZSIKLVBBQ0tBR0VDT05GSUdbcG9zdHByb2NdID0gIi0tZW5hYmxlLXBvc3Rwcm9jLC0tZGlzYWJsZS1wb3N0cHJvYyIKLVBBQ0tBR0VDT05GSUdbYXZyZXNhbXBsZV0gPSAiLS1lbmFibGUtYXZyZXNhbXBsZSwtLWRpc2FibGUtYXZyZXNhbXBsZSIKLQotIyBmZWF0dXJlcyB0byBzdXBwb3J0Ci1QQUNLQUdFQ09ORklHW2J6bGliXSA9ICItLWVuYWJsZS1iemxpYiwtLWRpc2FibGUtYnpsaWIsYnppcDIiCi1QQUNLQUdFQ09ORklHW2dwbF0gPSAiLS1lbmFibGUtZ3BsLC0tZGlzYWJsZS1ncGwiCi1QQUNLQUdFQ09ORklHW2dzbV0gPSAiLS1lbmFibGUtbGliZ3NtLC0tZGlzYWJsZS1saWJnc20sbGliZ3NtIgotUEFDS0FHRUNPTkZJR1tqYWNrXSA9ICItLWVuYWJsZS1pbmRldj1qYWNrLC0tZGlzYWJsZS1pbmRldj1qYWNrLGphY2siCi1QQUNLQUdFQ09ORklHW2xpYnZvcmJpc10gPSAiLS1lbmFibGUtbGlidm9yYmlzLC0tZGlzYWJsZS1saWJ2b3JiaXMsbGlidm9yYmlzIgotUEFDS0FHRUNPTkZJR1tsem1hXSA9ICItLWVuYWJsZS1sem1hLC0tZGlzYWJsZS1sem1hLHh6IgotUEFDS0FHRUNPTkZJR1ttcDNsYW1lXSA9ICItLWVuYWJsZS1saWJtcDNsYW1lLC0tZGlzYWJsZS1saWJtcDNsYW1lLGxhbWUiCi1QQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0tZW5hYmxlLW9wZW5zc2wsLS1kaXNhYmxlLW9wZW5zc2wsb3BlbnNzbCIKLVBBQ0tBR0VDT05GSUdbc2Nocm9lZGluZ2VyXSA9ICItLWVuYWJsZS1saWJzY2hyb2VkaW5nZXIsLS1kaXNhYmxlLWxpYnNjaHJvZWRpbmdlcixzY2hyb2VkaW5nZXIiCi1QQUNLQUdFQ09ORklHW3NwZWV4XSA9ICItLWVuYWJsZS1saWJzcGVleCwtLWRpc2FibGUtbGlic3BlZXgsc3BlZXgiCi1QQUNLQUdFQ09ORklHW3RoZW9yYV0gPSAiLS1lbmFibGUtbGlidGhlb3JhLC0tZGlzYWJsZS1saWJ0aGVvcmEsbGlidGhlb3JhIgotUEFDS0FHRUNPTkZJR1t2YWFwaV0gPSAiLS1lbmFibGUtdmFhcGksLS1kaXNhYmxlLXZhYXBpLGxpYnZhIgotUEFDS0FHRUNPTkZJR1t2ZHBhdV0gPSAiLS1lbmFibGUtdmRwYXUsLS1kaXNhYmxlLXZkcGF1LGxpYnZkcGF1IgotUEFDS0FHRUNPTkZJR1t2cHhdID0gIi0tZW5hYmxlLWxpYnZweCwtLWRpc2FibGUtbGlidnB4LGxpYnZweCIKLVBBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTFncmFiLC0tZGlzYWJsZS14MTFncmFiLHZpcnR1YWwvbGlieDExIGxpYnhmaXhlcyBsaWJ4ZXh0IHhwcm90byB2aXJ0dWFsL2xpYnNkbCIKLVBBQ0tBR0VDT05GSUdbeDI2NF0gPSAiLS1lbmFibGUtbGlieDI2NCwtLWRpc2FibGUtbGlieDI2NCx4MjY0IgotUEFDS0FHRUNPTkZJR1t4dl0gPSAiLS1lbmFibGUtb3V0ZGV2PXh2LC0tZGlzYWJsZS1vdXRkZXY9eHYsbGlieHYiCi0KLSMgQ2hlY2sgY29kZWNzIHRoYXQgcmVxdWlyZSAtLWVuYWJsZS1ub25mcmVlCi1VU0VfTk9ORlJFRSA9ICIke0BiYi51dGlscy5jb250YWluc19hbnkoJ1BBQ0tBR0VDT05GSUcnLCBbICdvcGVuc3NsJyBdLCAneWVzJywgJycsIGQpfSIKLQotZGVmIGNwdShkKToKLSAgICBmb3IgYXJnIGluIChkLmdldFZhcignVFVORV9DQ0FSR1MnKSBvciAnJykuc3BsaXQoKToKLSAgICAgICAgaWYgYXJnLnN0YXJ0c3dpdGgoJy1tY3B1PScpOgotICAgICAgICAgICAgcmV0dXJuIGFyZ1s2Ol0KLSAgICByZXR1cm4gJ2dlbmVyaWMnCi0KLUVYVFJBX09FQ09ORiA9ICIgXAotICAgIC0tZGlzYWJsZS1zdHJpcHBpbmcgXAotICAgIC0tZW5hYmxlLXBpYyBcCi0gICAgLS1lbmFibGUtc2hhcmVkIFwKLSAgICAtLWVuYWJsZS1wdGhyZWFkcyBcCi0gICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1VTRV9OT05GUkVFJywgJ3llcycsICctLWVuYWJsZS1ub25mcmVlJywgJycsIGQpfSBcCi0gICAgXAotICAgIC0tY3Jvc3MtcHJlZml4PSR7VEFSR0VUX1BSRUZJWH0gXAotICAgIFwKLSAgICAtLWxkPSIke0NDTER9IiBcCi0gICAgLS1jYz0iJHtDQ30iIFwKLSAgICAtLWN4eD0iJHtDWFh9IiBcCi0gICAgLS1hcmNoPSR7VEFSR0VUX0FSQ0h9IFwKLSAgICAtLXRhcmdldC1vcz0ibGludXgiIFwKLSAgICAtLWVuYWJsZS1jcm9zcy1jb21waWxlIFwKLSAgICAtLWV4dHJhLWNmbGFncz0iJHtUQVJHRVRfQ0ZMQUdTfSAke0hPU1RfQ0NfQVJDSH0ke1RPT0xDSEFJTl9PUFRJT05TfSIgXAotICAgIC0tZXh0cmEtbGRmbGFncz0iJHtUQVJHRVRfTERGTEFHU30iIFwKLSAgICAtLXN5c3Jvb3Q9IiR7U1RBR0lOR19ESVJfVEFSR0VUfSIgXAotICAgIC0tZW5hYmxlLWhhcmRjb2RlZC10YWJsZXMgXAotICAgICR7RVhUUkFfRkZDT05GfSBcCi0gICAgLS1saWJkaXI9JHtsaWJkaXJ9IFwKLSAgICAtLXNobGliZGlyPSR7bGliZGlyfSBcCi0gICAgLS1kYXRhZGlyPSR7ZGF0YWRpcn0vZmZtcGVnIFwKLSAgICAke0BiYi51dGlscy5jb250YWlucygnQVZBSUxUVU5FUycsICdtaXBzMzJyMicsICcnLCAnLS1kaXNhYmxlLW1pcHNkc3AgLS1kaXNhYmxlLW1pcHNkc3ByMicsIGQpfSBcCi0gICAgLS1jcHU9JHtAY3B1KGQpfSBcCi0iCi0KLUVYVFJBX09FQ09ORl9hcHBlbmRfbGludXgtZ251eDMyID0gIiAtLWRpc2FibGUtYXNtIgotCi1kb19jb25maWd1cmUoKSB7Ci0gICAgJHtTfS9jb25maWd1cmUgJHtFWFRSQV9PRUNPTkZ9Ci19Ci0KLVBBQ0tBR0VTID0rICJsaWJhdmNvZGVjIFwKLSAgICAgICAgICAgICBsaWJhdmRldmljZSBcCi0gICAgICAgICAgICAgbGliYXZmaWx0ZXIgXAotICAgICAgICAgICAgIGxpYmF2Zm9ybWF0IFwKLSAgICAgICAgICAgICBsaWJhdnJlc2FtcGxlIFwKLSAgICAgICAgICAgICBsaWJhdnV0aWwgXAotICAgICAgICAgICAgIGxpYnBvc3Rwcm9jIFwKLSAgICAgICAgICAgICBsaWJzd3Jlc2FtcGxlIFwKLSAgICAgICAgICAgICBsaWJzd3NjYWxlIgotCi1GSUxFU19saWJhdmNvZGVjID0gIiR7bGliZGlyfS9saWJhdmNvZGVjJHtTT0xJQlN9IgotRklMRVNfbGliYXZkZXZpY2UgPSAiJHtsaWJkaXJ9L2xpYmF2ZGV2aWNlJHtTT0xJQlN9IgotRklMRVNfbGliYXZmaWx0ZXIgPSAiJHtsaWJkaXJ9L2xpYmF2ZmlsdGVyJHtTT0xJQlN9IgotRklMRVNfbGliYXZmb3JtYXQgPSAiJHtsaWJkaXJ9L2xpYmF2Zm9ybWF0JHtTT0xJQlN9IgotRklMRVNfbGliYXZyZXNhbXBsZSA9ICIke2xpYmRpcn0vbGliYXZyZXNhbXBsZSR7U09MSUJTfSIKLUZJTEVTX2xpYmF2dXRpbCA9ICIke2xpYmRpcn0vbGliYXZ1dGlsJHtTT0xJQlN9IgotRklMRVNfbGlicG9zdHByb2MgPSAiJHtsaWJkaXJ9L2xpYnBvc3Rwcm9jJHtTT0xJQlN9IgotRklMRVNfbGlic3dyZXNhbXBsZSA9ICIke2xpYmRpcn0vbGlic3dyZXNhbXBsZSR7U09MSUJTfSIKLUZJTEVTX2xpYnN3c2NhbGUgPSAiJHtsaWJkaXJ9L2xpYnN3c2NhbGUke1NPTElCU30iCi0KLSMgZmZtcGVnIGRpc2FibGVzIFBJQyBvbiBzb21lIHBsYXRmb3JtcyAoZS5nLiB4ODYtMzIpCi1JTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmF2Y29kZWMgPSAidGV4dHJlbCIKLUlOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliYXZkZXZpY2UgPSAidGV4dHJlbCIKLUlOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliYXZmaWx0ZXIgPSAidGV4dHJlbCIKLUlOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliYXZmb3JtYXQgPSAidGV4dHJlbCIKLUlOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliYXZ1dGlsID0gInRleHRyZWwiCi1JTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmF2cmVzYW1wbGUgPSAidGV4dHJlbCIKLUlOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGlic3dzY2FsZSA9ICJ0ZXh0cmVsIgotSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJzd3Jlc2FtcGxlID0gInRleHRyZWwiCi1JTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYnBvc3Rwcm9jID0gInRleHRyZWwiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZ18zLjMuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mZm1wZWcvZmZtcGVnXzMuMy4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZWJlY2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmZtcGVnL2ZmbXBlZ18zLjMuMy5iYgpAQCAtMCwwICsxLDE2NSBAQAorU1VNTUFSWSA9ICJBIGNvbXBsZXRlLCBjcm9zcy1wbGF0Zm9ybSBzb2x1dGlvbiB0byByZWNvcmQsIGNvbnZlcnQgYW5kIHN0cmVhbSBhdWRpbyBhbmQgdmlkZW8uIgorREVTQ1JJUFRJT04gPSAiRkZtcGVnIGlzIHRoZSBsZWFkaW5nIG11bHRpbWVkaWEgZnJhbWV3b3JrLCBhYmxlIHRvIGRlY29kZSwgZW5jb2RlLCB0cmFuc2NvZGUsIFwKKyAgICAgICAgICAgICAgIG11eCwgZGVtdXgsIHN0cmVhbSwgZmlsdGVyIGFuZCBwbGF5IHByZXR0eSBtdWNoIGFueXRoaW5nIHRoYXQgaHVtYW5zIGFuZCBtYWNoaW5lcyBcCisgICAgICAgICAgICAgICBoYXZlIGNyZWF0ZWQuIEl0IHN1cHBvcnRzIHRoZSBtb3N0IG9ic2N1cmUgYW5jaWVudCBmb3JtYXRzIHVwIHRvIHRoZSBjdXR0aW5nIGVkZ2UuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93d3cuZmZtcGVnLm9yZy8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiQlNEICYgR1BMdjIrICYgTEdQTHYyLjErICYgTUlUIgorTElDRU5TRV8ke1BOfSA9ICJHUEx2MisiCitMSUNFTlNFX2xpYmF2Y29kZWMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZ3BsJywgJ0dQTHYyKycsICdMR1BMdjIuMSsnLCBkKX0iCitMSUNFTlNFX2xpYmF2ZGV2aWNlID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2dwbCcsICdHUEx2MisnLCAnTEdQTHYyLjErJywgZCl9IgorTElDRU5TRV9saWJhdmZpbHRlciA9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdncGwnLCAnR1BMdjIrJywgJ0xHUEx2Mi4xKycsIGQpfSIKK0xJQ0VOU0VfbGliYXZmb3JtYXQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZ3BsJywgJ0dQTHYyKycsICdMR1BMdjIuMSsnLCBkKX0iCitMSUNFTlNFX2xpYmF2cmVzYW1wbGUgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZ3BsJywgJ0dQTHYyKycsICdMR1BMdjIuMSsnLCBkKX0iCitMSUNFTlNFX2xpYmF2dXRpbCA9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdncGwnLCAnR1BMdjIrJywgJ0xHUEx2Mi4xKycsIGQpfSIKK0xJQ0VOU0VfbGlicG9zdHByb2MgPSAiR1BMdjIrIgorTElDRU5TRV9saWJzd3Jlc2FtcGxlID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2dwbCcsICdHUEx2MisnLCAnTEdQTHYyLjErJywgZCl9IgorTElDRU5TRV9saWJzd3NjYWxlID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2dwbCcsICdHUEx2MisnLCAnTEdQTHYyLjErJywgZCl9IgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkdQTHYyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkdQTHYzO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxHUEx2Mi4xO21kNT1iZDdhNDQzMzIwYWY4YzgxMmU0YzE4ZDFiNzlkZjAwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxHUEx2MzttZDU9ZTZhNjAwZmQ1ZTFkOWNiZGUyZDk4MzY4MDIzM2FkMDIiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly93d3cuZmZtcGVnLm9yZy9yZWxlYXNlcy8ke0JQfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vbWlwczY0X2NwdV9kZXRlY3Rpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1idWlsZC1maXgtZm9yLW1pcHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTQwNTQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTQwNTUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTQwNTYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTQwNTcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTQwNTgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTQwNTkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTQxNjkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTQxNzAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTQxNzEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTQyMjIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTQyMjMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTQyMjUucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI3NDNkYzY2ZWJlNjcxODAyODNiOTJkMDI5ZjY5MGQwZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkMmE5MDAyY2RjNmI1MzNiNTk3Mjg4MjcxODZjMDQ0YWQwMmJhNjQ4NDFmMWI3Y2Q2YzIxNzc5ODc1NDUzYTFlIgorCisjIEJ1aWxkIGZhaWxzIHdoZW4gdGh1bWIgaXMgZW5hYmxlZDogaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3Nob3dfYnVnLmNnaT9pZD03NzE3CitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworIyBTaG91bGQgYmUgQVBJIGNvbXBhdGlibGUgd2l0aCBsaWJhdiAod2hpY2ggd2FzIGEgZm9yayBvZiBmZm1wZWcpCisjIGxpYnBvc3Rwcm9jIHdhcyBwcmV2aW91c2x5IHBhY2thZ2VkIGZyb20gYSBzZXBhcmF0ZSByZWNpcGUKK1BST1ZJREVTID0gImxpYmF2IGxpYnBvc3Rwcm9jIgorCitERVBFTkRTID0gImFsc2EtbGliIHpsaWIgbGlib2dnIHlhc20tbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUEFDS0FHRUNPTkZJRyA/Pz0gImF2ZGV2aWNlIGF2ZmlsdGVyIGF2Y29kZWMgYXZmb3JtYXQgc3dyZXNhbXBsZSBzd3NjYWxlIHBvc3Rwcm9jIFwKKyAgICAgICAgICAgICAgICAgICBiemxpYiBncGwgbHptYSB0aGVvcmEgeDI2NCBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneHYnLCAnJywgZCl9IgorCisjIGxpYnJhcmllcyB0byBidWlsZCBpbiBhZGRpdGlvbiB0byBhdnV0aWwKK1BBQ0tBR0VDT05GSUdbYXZkZXZpY2VdID0gIi0tZW5hYmxlLWF2ZGV2aWNlLC0tZGlzYWJsZS1hdmRldmljZSIKK1BBQ0tBR0VDT05GSUdbYXZmaWx0ZXJdID0gIi0tZW5hYmxlLWF2ZmlsdGVyLC0tZGlzYWJsZS1hdmZpbHRlciIKK1BBQ0tBR0VDT05GSUdbYXZjb2RlY10gPSAiLS1lbmFibGUtYXZjb2RlYywtLWRpc2FibGUtYXZjb2RlYyIKK1BBQ0tBR0VDT05GSUdbYXZmb3JtYXRdID0gIi0tZW5hYmxlLWF2Zm9ybWF0LC0tZGlzYWJsZS1hdmZvcm1hdCIKK1BBQ0tBR0VDT05GSUdbc3dyZXNhbXBsZV0gPSAiLS1lbmFibGUtc3dyZXNhbXBsZSwtLWRpc2FibGUtc3dyZXNhbXBsZSIKK1BBQ0tBR0VDT05GSUdbc3dzY2FsZV0gPSAiLS1lbmFibGUtc3dzY2FsZSwtLWRpc2FibGUtc3dzY2FsZSIKK1BBQ0tBR0VDT05GSUdbcG9zdHByb2NdID0gIi0tZW5hYmxlLXBvc3Rwcm9jLC0tZGlzYWJsZS1wb3N0cHJvYyIKK1BBQ0tBR0VDT05GSUdbYXZyZXNhbXBsZV0gPSAiLS1lbmFibGUtYXZyZXNhbXBsZSwtLWRpc2FibGUtYXZyZXNhbXBsZSIKKworIyBmZWF0dXJlcyB0byBzdXBwb3J0CitQQUNLQUdFQ09ORklHW2J6bGliXSA9ICItLWVuYWJsZS1iemxpYiwtLWRpc2FibGUtYnpsaWIsYnppcDIiCitQQUNLQUdFQ09ORklHW2dwbF0gPSAiLS1lbmFibGUtZ3BsLC0tZGlzYWJsZS1ncGwiCitQQUNLQUdFQ09ORklHW2dzbV0gPSAiLS1lbmFibGUtbGliZ3NtLC0tZGlzYWJsZS1saWJnc20sbGliZ3NtIgorUEFDS0FHRUNPTkZJR1tqYWNrXSA9ICItLWVuYWJsZS1pbmRldj1qYWNrLC0tZGlzYWJsZS1pbmRldj1qYWNrLGphY2siCitQQUNLQUdFQ09ORklHW2xpYnZvcmJpc10gPSAiLS1lbmFibGUtbGlidm9yYmlzLC0tZGlzYWJsZS1saWJ2b3JiaXMsbGlidm9yYmlzIgorUEFDS0FHRUNPTkZJR1tsem1hXSA9ICItLWVuYWJsZS1sem1hLC0tZGlzYWJsZS1sem1hLHh6IgorUEFDS0FHRUNPTkZJR1ttcDNsYW1lXSA9ICItLWVuYWJsZS1saWJtcDNsYW1lLC0tZGlzYWJsZS1saWJtcDNsYW1lLGxhbWUiCitQQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0tZW5hYmxlLW9wZW5zc2wsLS1kaXNhYmxlLW9wZW5zc2wsb3BlbnNzbCIKK1BBQ0tBR0VDT05GSUdbc2Nocm9lZGluZ2VyXSA9ICItLWVuYWJsZS1saWJzY2hyb2VkaW5nZXIsLS1kaXNhYmxlLWxpYnNjaHJvZWRpbmdlcixzY2hyb2VkaW5nZXIiCitQQUNLQUdFQ09ORklHW3NkbDJdID0gIi0tZW5hYmxlLXNkbDIsLS1kaXNhYmxlLXNkbDIsdmlydHVhbC9saWJzZGwyIgorUEFDS0FHRUNPTkZJR1tzcGVleF0gPSAiLS1lbmFibGUtbGlic3BlZXgsLS1kaXNhYmxlLWxpYnNwZWV4LHNwZWV4IgorUEFDS0FHRUNPTkZJR1t0aGVvcmFdID0gIi0tZW5hYmxlLWxpYnRoZW9yYSwtLWRpc2FibGUtbGlidGhlb3JhLGxpYnRoZW9yYSIKK1BBQ0tBR0VDT05GSUdbdmFhcGldID0gIi0tZW5hYmxlLXZhYXBpLC0tZGlzYWJsZS12YWFwaSxsaWJ2YSIKK1BBQ0tBR0VDT05GSUdbdmRwYXVdID0gIi0tZW5hYmxlLXZkcGF1LC0tZGlzYWJsZS12ZHBhdSxsaWJ2ZHBhdSIKK1BBQ0tBR0VDT05GSUdbdnB4XSA9ICItLWVuYWJsZS1saWJ2cHgsLS1kaXNhYmxlLWxpYnZweCxsaWJ2cHgiCitQQUNLQUdFQ09ORklHW3gyNjRdID0gIi0tZW5hYmxlLWxpYngyNjQsLS1kaXNhYmxlLWxpYngyNjQseDI2NCIKK1BBQ0tBR0VDT05GSUdbeHZdID0gIi0tZW5hYmxlLW91dGRldj14diwtLWRpc2FibGUtb3V0ZGV2PXh2LGxpYnh2IgorCisjIENoZWNrIGNvZGVjcyB0aGF0IHJlcXVpcmUgLS1lbmFibGUtbm9uZnJlZQorVVNFX05PTkZSRUUgPSAiJHtAYmIudXRpbHMuY29udGFpbnNfYW55KCdQQUNLQUdFQ09ORklHJywgWyAnb3BlbnNzbCcgXSwgJ3llcycsICcnLCBkKX0iCisKK2RlZiBjcHUoZCk6CisgICAgZm9yIGFyZyBpbiAoZC5nZXRWYXIoJ1RVTkVfQ0NBUkdTJykgb3IgJycpLnNwbGl0KCk6CisgICAgICAgIGlmIGFyZy5zdGFydHN3aXRoKCctbWNwdT0nKToKKyAgICAgICAgICAgIHJldHVybiBhcmdbNjpdCisgICAgcmV0dXJuICdnZW5lcmljJworCitFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAtLWRpc2FibGUtc3RyaXBwaW5nIFwKKyAgICAtLWVuYWJsZS1waWMgXAorICAgIC0tZW5hYmxlLXNoYXJlZCBcCisgICAgLS1lbmFibGUtcHRocmVhZHMgXAorICAgIC0tZGlzYWJsZS1saWJ4Y2IgXAorICAgIC0tZGlzYWJsZS1saWJ4Y2Itc2htIFwKKyAgICAtLWRpc2FibGUtbGlieGNiLXhmaXhlcyBcCisgICAgLS1kaXNhYmxlLWxpYnhjYi1zaGFwZSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1VTRV9OT05GUkVFJywgJ3llcycsICctLWVuYWJsZS1ub25mcmVlJywgJycsIGQpfSBcCisgICAgXAorICAgIC0tY3Jvc3MtcHJlZml4PSR7VEFSR0VUX1BSRUZJWH0gXAorICAgIFwKKyAgICAtLWxkPSIke0NDTER9IiBcCisgICAgLS1jYz0iJHtDQ30iIFwKKyAgICAtLWN4eD0iJHtDWFh9IiBcCisgICAgLS1hcmNoPSR7VEFSR0VUX0FSQ0h9IFwKKyAgICAtLXRhcmdldC1vcz0ibGludXgiIFwKKyAgICAtLWVuYWJsZS1jcm9zcy1jb21waWxlIFwKKyAgICAtLWV4dHJhLWNmbGFncz0iJHtUQVJHRVRfQ0ZMQUdTfSAke0hPU1RfQ0NfQVJDSH0ke1RPT0xDSEFJTl9PUFRJT05TfSIgXAorICAgIC0tZXh0cmEtbGRmbGFncz0iJHtUQVJHRVRfTERGTEFHU30iIFwKKyAgICAtLXN5c3Jvb3Q9IiR7U1RBR0lOR19ESVJfVEFSR0VUfSIgXAorICAgIC0tZW5hYmxlLWhhcmRjb2RlZC10YWJsZXMgXAorICAgICR7RVhUUkFfRkZDT05GfSBcCisgICAgLS1saWJkaXI9JHtsaWJkaXJ9IFwKKyAgICAtLXNobGliZGlyPSR7bGliZGlyfSBcCisgICAgLS1kYXRhZGlyPSR7ZGF0YWRpcn0vZmZtcGVnIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQVZBSUxUVU5FUycsICdtaXBzMzJyMicsICcnLCAnLS1kaXNhYmxlLW1pcHNkc3AgLS1kaXNhYmxlLW1pcHNkc3ByMicsIGQpfSBcCisgICAgLS1jcHU9JHtAY3B1KGQpfSBcCisgICAgLS1wa2ctY29uZmlnPXBrZy1jb25maWcgXAorIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpbnV4LWdudXgzMiA9ICIgLS1kaXNhYmxlLWFzbSIKKworZG9fY29uZmlndXJlKCkgeworICAgICR7U30vY29uZmlndXJlICR7RVhUUkFfT0VDT05GfQorfQorCitQQUNLQUdFUyA9KyAibGliYXZjb2RlYyBcCisgICAgICAgICAgICAgbGliYXZkZXZpY2UgXAorICAgICAgICAgICAgIGxpYmF2ZmlsdGVyIFwKKyAgICAgICAgICAgICBsaWJhdmZvcm1hdCBcCisgICAgICAgICAgICAgbGliYXZyZXNhbXBsZSBcCisgICAgICAgICAgICAgbGliYXZ1dGlsIFwKKyAgICAgICAgICAgICBsaWJwb3N0cHJvYyBcCisgICAgICAgICAgICAgbGlic3dyZXNhbXBsZSBcCisgICAgICAgICAgICAgbGlic3dzY2FsZSIKKworRklMRVNfbGliYXZjb2RlYyA9ICIke2xpYmRpcn0vbGliYXZjb2RlYyR7U09MSUJTfSIKK0ZJTEVTX2xpYmF2ZGV2aWNlID0gIiR7bGliZGlyfS9saWJhdmRldmljZSR7U09MSUJTfSIKK0ZJTEVTX2xpYmF2ZmlsdGVyID0gIiR7bGliZGlyfS9saWJhdmZpbHRlciR7U09MSUJTfSIKK0ZJTEVTX2xpYmF2Zm9ybWF0ID0gIiR7bGliZGlyfS9saWJhdmZvcm1hdCR7U09MSUJTfSIKK0ZJTEVTX2xpYmF2cmVzYW1wbGUgPSAiJHtsaWJkaXJ9L2xpYmF2cmVzYW1wbGUke1NPTElCU30iCitGSUxFU19saWJhdnV0aWwgPSAiJHtsaWJkaXJ9L2xpYmF2dXRpbCR7U09MSUJTfSIKK0ZJTEVTX2xpYnBvc3Rwcm9jID0gIiR7bGliZGlyfS9saWJwb3N0cHJvYyR7U09MSUJTfSIKK0ZJTEVTX2xpYnN3cmVzYW1wbGUgPSAiJHtsaWJkaXJ9L2xpYnN3cmVzYW1wbGUke1NPTElCU30iCitGSUxFU19saWJzd3NjYWxlID0gIiR7bGliZGlyfS9saWJzd3NjYWxlJHtTT0xJQlN9IgorCisjIGZmbXBlZyBkaXNhYmxlcyBQSUMgb24gc29tZSBwbGF0Zm9ybXMgKGUuZy4geDg2LTMyKQorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhdmNvZGVjID0gInRleHRyZWwiCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmF2ZGV2aWNlID0gInRleHRyZWwiCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmF2ZmlsdGVyID0gInRleHRyZWwiCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmF2Zm9ybWF0ID0gInRleHRyZWwiCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmF2dXRpbCA9ICJ0ZXh0cmVsIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhdnJlc2FtcGxlID0gInRleHRyZWwiCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYnN3c2NhbGUgPSAidGV4dHJlbCIKK0lOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGlic3dyZXNhbXBsZSA9ICJ0ZXh0cmVsIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJwb3N0cHJvYyA9ICJ0ZXh0cmVsIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyLzAwMDEtZ3RrLXBsYXktRGlzYWJsZS12aXN1YWxpemF0aW9ucy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci8wMDAxLWd0ay1wbGF5LURpc2FibGUtdmlzdWFsaXphdGlvbnMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhODgxMjAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyLzAwMDEtZ3RrLXBsYXktRGlzYWJsZS12aXN1YWxpemF0aW9ucy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLUZyb20gNmNmNDJjNDY4ZTkzYjBhYWExNzE5NjFlMDU5YmMzZTJmYjkxNTg4OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+Ci1EYXRlOiBGcmksIDI4IEFwciAyMDE3IDE0OjM1OjE5ICswMzAwCi1TdWJqZWN0OiBbUEFUQ0hdIGd0ay1wbGF5OiBEaXNhYmxlIHZpc3VhbGl6YXRpb25zCi0KLVRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBbWU9DVE8gIzExNDEwXSAoYXVkaW8gcGxheWJhY2sgaXMgYnJva2VuIGluCi1tZWRpYXBsYXllciBpZiB2YWFwaSBpcyB1c2VkKS4gSXQgZGlzYWJsZXMgdmlzdWFsaXphdGlvbnMgYW5kIG1ha2VzCi1zdXJlIHdlIGNsZWFyIHRoZSB3aW5kb3cgKG90aGVyd2lzZSBub3RoaW5nIGRvZXMgdGhhdCBhbmQgcmVzdWx0IGlzCi12ZXJ5IHVnbHkpLgotCi1UaGlzIHBhdGNoIHNob3VsZCBiZSByZW1vdmVkIHdoZW4gMTE0MTAgaXMgZml4ZWQuCi0KLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbYnVnIHdvcmthcm91bmRdCi1TaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgotLS0tCi0gZ3RrL2d0ay1wbGF5LmMgfCAxMyArKysrKysrKysrKystCi0gMSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2d0ay9ndGstcGxheS5jIGIvZ3RrL2d0ay1wbGF5LmMKLWluZGV4IDhhZTBmZWEuLjYzYjliYjAgMTAwNjQ0Ci0tLS0gYS9ndGsvZ3RrLXBsYXkuYwotKysrIGIvZ3RrL2d0ay1wbGF5LmMKLUBAIC0xNDAxLDYgKzE0MDEsMTUgQEAgZ2V0X2NoaWxkX3Bvc2l0aW9uIChHdGtPdmVybGF5ICogb3ZlcmxheSwgR3RrV2lkZ2V0ICogd2lkZ2V0LAotICAgcmV0dXJuIFRSVUU7Ci0gfQotIAotKy8qIEhhY2sgdG8gbWFrZSBzdXJlIHNvbWV0aGluZyBnZXRzIGRyYXduIGlmIHZpc3VhbGl6YXRpb25zIGFyZSBkaXNhYmxlZCAqLwotK3N0YXRpYyBnYm9vbGVhbgotK2RyYXdfY2IgKEd0a1dpZGdldCAqd2lkZ2V0LCBjYWlyb190ICpjciwgZ3BvaW50ZXIgZGF0YSkKLSt7Ci0rICBjYWlyb19zZXRfc291cmNlX3JnYiAoY3IsIDAsIDAsIDApOwotKyAgY2Fpcm9fcGFpbnQgKGNyKTsKLSsgIHJldHVybiBGQUxTRTsKLSt9Ci0rCi0gc3RhdGljIHZvaWQKLSBjcmVhdGVfdWkgKEd0a1BsYXkgKiBwbGF5KQotIHsKLUBAIC0xNDMxLDYgKzE0NDAsOCBAQCBjcmVhdGVfdWkgKEd0a1BsYXkgKiBwbGF5KQotICAgICBwbGF5LT52aWRlb19hcmVhID0gZ3RrX2RyYXdpbmdfYXJlYV9uZXcgKCk7Ci0gICAgIGdfc2lnbmFsX2Nvbm5lY3QgKHBsYXktPnZpZGVvX2FyZWEsICJyZWFsaXplIiwKLSAgICAgICAgIEdfQ0FMTEJBQ0sgKHZpZGVvX2FyZWFfcmVhbGl6ZV9jYiksIHBsYXkpOwotKyAgICBnX3NpZ25hbF9jb25uZWN0IChwbGF5LT52aWRlb19hcmVhLCAiZHJhdyIsCi0rICAgICAgICBHX0NBTExCQUNLIChkcmF3X2NiKSwgTlVMTCk7Ci0gICB9Ci0gICBndGtfd2lkZ2V0X3NldF9ldmVudHMgKHBsYXktPnZpZGVvX2FyZWEsIEdES19FWFBPU1VSRV9NQVNLCi0gICAgICAgfCBHREtfTEVBVkVfTk9USUZZX01BU0sKLUBAIC0xNzUzLDcgKzE3NjQsNyBAQCBndGtfcGxheV9jb25zdHJ1Y3RvciAoR1R5cGUgdHlwZSwgZ3VpbnQgbl9jb25zdHJ1Y3RfcGFyYW1zLAotIAotICAgLyogZW5hYmxlIHZpc3VhbGl6YXRpb24gKGJ5IGRlZmF1bHQgcGxheWJpbiB1c2VzIGdvb20pICovCi0gICAvKiBpZiB2aXN1YWxpemF0aW9uIGlzIGVuYWJsZWQgdGhlbiB1c2UgdGhlIGZpcnN0IGVsZW1lbnQgKi8KLS0gIGdzdF9wbGF5ZXJfc2V0X3Zpc3VhbGl6YXRpb25fZW5hYmxlZCAoc2VsZi0+cGxheWVyLCBUUlVFKTsKLSsgIGdzdF9wbGF5ZXJfc2V0X3Zpc3VhbGl6YXRpb25fZW5hYmxlZCAoc2VsZi0+cGxheWVyLCBGQUxTRSk7Ci0gCi0gICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAoc2VsZiksICJzaG93IiwgR19DQUxMQkFDSyAoc2hvd19jYiksIE5VTEwpOwotIAotLS0gCi0yLjEuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvQWRkLWVycm9yLXNpZ25hbC1lbWlzc2lvbi1mb3ItbWlzc2luZy1wbHVnaW5zLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL0FkZC1lcnJvci1zaWduYWwtZW1pc3Npb24tZm9yLW1pc3NpbmctcGx1Z2lucy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzEyZDQ2ZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvQWRkLWVycm9yLXNpZ25hbC1lbWlzc2lvbi1mb3ItbWlzc2luZy1wbHVnaW5zLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjUyICswLDAgQEAKLUZyb20gZDY0YzdlZGI2NmY0YTY0ZmY0OWM0MzA2Y2Y3N2ZkMjY5YjcwNzlhYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+Ci1EYXRlOiBNb24sIDE2IE1hciAyMDE1IDEzOjQ1OjMwICswMjAwCi1TdWJqZWN0OiBbUEFUQ0hdIEFkZCBlcnJvciBzaWduYWwgZW1pc3Npb24gZm9yIG1pc3NpbmcgcGx1Z2lucwotCi1BZGQgYSBtaXNzaW5nIHBsdWdpbnMgZXJyb3Igc2lnbmFsIHRvIGdzdC1wbGF5ZXIuIE5vdGUgdGhhdCB0aGlzIGVycm9yCi1kb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIHRoZSBwbGF5YmFjayBoYXMgY29tcGxldGVseSBmYWlsZWQsIGJ1dCBpbgotcHJhY3RpY2UgdGhlIHVzZXIgZXhwZXJpZW5jZSB3aWxsIGJlIGJhZCAodGhpbmssIGUuZy4gb2YgYSBtcDQgZmlsZQotd2hlcmUgSC4yNjQgY29kZWMgaXMgbWlzc2luZzogQUFDIHBsYXliYWNrIHN0aWxsIHdvcmtzLi4uKS4KLQotVXNlIHRoZSBzaWduYWwgaW4gZ3RrLXBsYXkgdG8gc2hvdyBhIGluZm9iYXIgaWYgcGx1Z2lucyBhcmUgbWlzc2luZy4KLQotU3VibWl0dGVkIHVwc3RyZWFtIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9zZHJvZWdlL2dzdC1wbGF5ZXIvcHVsbC8xMQotCi1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAotU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KLS0tLQotIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgIHwgIDIgKy0KLSBndGsvZ3RrLXBsYXkuYyAgICAgICAgICAgICB8IDU0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KLSBsaWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuYyB8IDIyICsrKysrKysrKysrKysrKysrKysKLSBsaWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaCB8ICAzICsrLQotIDQgZmlsZXMgY2hhbmdlZCwgNzggaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggOTBhYjc0Yy4uNmNkYjRlYiAxMDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFjCi1AQCAtNTMsNyArNTMsNyBAQCBBQ19TVUJTVChMVF9BR0UpCi0gUEtHX1BST0dfUEtHX0NPTkZJRwotIAotIFBLR19DSEVDS19NT0RVTEVTKEdMSUIsIFtnbGliLTIuMCBnb2JqZWN0LTIuMF0pCi0tUEtHX0NIRUNLX01PRFVMRVMoR1NUUkVBTUVSLCBbZ3N0cmVhbWVyLTEuMCA+PSAxLjQgZ3N0cmVhbWVyLXZpZGVvLTEuMCA+PSAxLjRdKQotK1BLR19DSEVDS19NT0RVTEVTKEdTVFJFQU1FUiwgW2dzdHJlYW1lci0xLjAgPj0gMS40IGdzdHJlYW1lci12aWRlby0xLjAgPj0gMS40IGdzdHJlYW1lci1wYnV0aWxzLTEuMF0pCi0gCi0gR0xJQl9QUkVGSVg9ImAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXByZWZpeCBnbGliLTIuMGAiCi0gQUNfU1VCU1QoR0xJQl9QUkVGSVgpCi1kaWZmIC0tZ2l0IGEvZ3RrL2d0ay1wbGF5LmMgYi9ndGsvZ3RrLXBsYXkuYwotaW5kZXggYjkyNzczYi4uZTJiNjA1YSAxMDA2NDQKLS0tLSBhL2d0ay9ndGstcGxheS5jCi0rKysgYi9ndGsvZ3RrLXBsYXkuYwotQEAgLTMwLDYgKzMwLDggQEAgdHlwZWRlZiBzdHJ1Y3QKLSAgIEd0a1dpZGdldCAqcHJldl9idXR0b24sICpuZXh0X2J1dHRvbjsKLSAgIEd0a1dpZGdldCAqc2Vla2JhcjsKLSAgIEd0a1dpZGdldCAqdmlkZW9fYXJlYTsKLSsgIEd0a1dpZGdldCAqaW5mb19sYWJlbDsKLSsgIEd0a1dpZGdldCAqaW5mb19iYXI7Ci0gICBHdGtXaWRnZXQgKnZvbHVtZV9idXR0b247Ci0gICBndWxvbmcgc2Vla2Jhcl92YWx1ZV9jaGFuZ2VkX3NpZ25hbF9pZDsKLSAgIGdib29sZWFuIHBsYXlpbmc7Ci1AQCAtMTQxLDYgKzE0MywxMyBAQCBwbGF5X3BhdXNlX2NsaWNrZWRfY2IgKEd0a0J1dHRvbiAqIGJ1dHRvbiwgR3RrUGxheSAqIHBsYXkpCi0gfQotIAotIHN0YXRpYyB2b2lkCi0rY2xlYXJfbWlzc2luZ19wbHVnaW5zIChHdGtQbGF5ICogcGxheSkKLSt7Ci0rICBndGtfbGFiZWxfc2V0X3RleHQgKEdUS19MQUJFTCAocGxheS0+aW5mb19sYWJlbCksICIiKTsKLSsgIGd0a193aWRnZXRfaGlkZSAocGxheS0+aW5mb19iYXIpOwotK30KLSsKLStzdGF0aWMgdm9pZAotIHNraXBfcHJldl9jbGlja2VkX2NiIChHdGtCdXR0b24gKiBidXR0b24sIEd0a1BsYXkgKiBwbGF5KQotIHsKLSAgIEdMaXN0ICpwcmV2OwotQEAgLTE1NSw2ICsxNjQsNyBAQCBza2lwX3ByZXZfY2xpY2tlZF9jYiAoR3RrQnV0dG9uICogYnV0dG9uLCBHdGtQbGF5ICogcGxheSkKLSAKLSAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSAocGxheS0+bmV4dF9idXR0b24sIFRSVUUpOwotICAgZ3N0X3BsYXllcl9zZXRfdXJpIChwbGF5LT5wbGF5ZXIsIHByZXYtPmRhdGEpOwotKyAgY2xlYXJfbWlzc2luZ19wbHVnaW5zIChwbGF5KTsKLSAgIGdzdF9wbGF5ZXJfcGxheSAocGxheS0+cGxheWVyKTsKLSAgIHNldF90aXRsZSAocGxheSwgcHJldi0+ZGF0YSk7Ci0gICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUgKHBsYXktPnByZXZfYnV0dG9uLCBnX2xpc3RfcHJldmlvdXMgKHByZXYpICE9IE5VTEwpOwotQEAgLTE3NSw2ICsxODUsNyBAQCBza2lwX25leHRfY2xpY2tlZF9jYiAoR3RrQnV0dG9uICogYnV0dG9uLCBHdGtQbGF5ICogcGxheSkKLSAKLSAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSAocGxheS0+cHJldl9idXR0b24sIFRSVUUpOwotICAgZ3N0X3BsYXllcl9zZXRfdXJpIChwbGF5LT5wbGF5ZXIsIG5leHQtPmRhdGEpOwotKyAgY2xlYXJfbWlzc2luZ19wbHVnaW5zIChwbGF5KTsKLSAgIGdzdF9wbGF5ZXJfcGxheSAocGxheS0+cGxheWVyKTsKLSAgIHNldF90aXRsZSAocGxheSwgbmV4dC0+ZGF0YSk7Ci0gICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUgKHBsYXktPm5leHRfYnV0dG9uLCBnX2xpc3RfbmV4dCAobmV4dCkgIT0gTlVMTCk7Ci1AQCAtMTkzLDEwICsyMDQsMTYgQEAgdm9sdW1lX2NoYW5nZWRfY2IgKEd0a1NjYWxlQnV0dG9uICogYnV0dG9uLCBnZG91YmxlIHZhbHVlLCBHdGtQbGF5ICogcGxheSkKLSAgIGdzdF9wbGF5ZXJfc2V0X3ZvbHVtZSAocGxheS0+cGxheWVyLCB2YWx1ZSk7Ci0gfQotIAotK3ZvaWQKLStpbmZvX2Jhcl9yZXNwb25zZV9jYiAoR3RrSW5mb0JhciAqIGJhciwgZ2ludCByZXNwb25zZSwgR3RrUGxheSAqIHBsYXkpCi0rewotKyAgZ3RrX3dpZGdldF9oaWRlIChHVEtfV0lER0VUIChiYXIpKTsKLSt9Ci0rCi0gc3RhdGljIHZvaWQKLSBjcmVhdGVfdWkgKEd0a1BsYXkgKiBwbGF5KQotIHsKLS0gIEd0a1dpZGdldCAqY29udHJvbHMsICptYWluX2hib3gsICptYWluX3Zib3g7Ci0rICBHdGtXaWRnZXQgKmNvbnRyb2xzLCAqbWFpbl9oYm94LCAqbWFpbl92Ym94LCAqaW5mb19iYXIsICpjb250ZW50X2FyZWE7Ci0gCi0gICBwbGF5LT53aW5kb3cgPSBndGtfd2luZG93X25ldyAoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0gICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAocGxheS0+d2luZG93KSwgImRlbGV0ZS1ldmVudCIsCi1AQCAtMjA4LDYgKzIyNSwyMCBAQCBjcmVhdGVfdWkgKEd0a1BsYXkgKiBwbGF5KQotICAgZ19zaWduYWxfY29ubmVjdCAocGxheS0+dmlkZW9fYXJlYSwgInJlYWxpemUiLAotICAgICAgIEdfQ0FMTEJBQ0sgKHZpZGVvX2FyZWFfcmVhbGl6ZV9jYiksIHBsYXkpOwotIAotKyAgcGxheS0+aW5mb19iYXIgPSBndGtfaW5mb19iYXJfbmV3ICgpOwotKyAgZ3RrX2luZm9fYmFyX3NldF9tZXNzYWdlX3R5cGUgKEdUS19JTkZPX0JBUiAocGxheS0+aW5mb19iYXIpLAotKyAgICAgIEdUS19NRVNTQUdFX1dBUk5JTkcpOwotKyAgLy9ndGtfaW5mb19iYXJfc2V0X3Nob3dfY2xvc2VfYnV0dG9uIChHVEtfSU5GT19CQVIgKHBsYXktPmluZm9fYmFyKSwKLSsgIC8vICAgIFRSVUUpOwotKyAgZ3RrX3dpZGdldF9zZXRfbm9fc2hvd19hbGwgKHBsYXktPmluZm9fYmFyLCBUUlVFKTsKLSsgIGdfc2lnbmFsX2Nvbm5lY3QgKHBsYXktPmluZm9fYmFyLCAicmVzcG9uc2UiLAotKyAgICAgIEdfQ0FMTEJBQ0sgKGluZm9fYmFyX3Jlc3BvbnNlX2NiKSwgcGxheSk7Ci0rCi0rICBjb250ZW50X2FyZWEgPSBndGtfaW5mb19iYXJfZ2V0X2NvbnRlbnRfYXJlYSAoR1RLX0lORk9fQkFSIChwbGF5LT5pbmZvX2JhcikpOwotKyAgcGxheS0+aW5mb19sYWJlbCA9IGd0a19sYWJlbF9uZXcgKCIiKTsKLSsgIGd0a19jb250YWluZXJfYWRkIChHVEtfQ09OVEFJTkVSIChjb250ZW50X2FyZWEpLCBwbGF5LT5pbmZvX2xhYmVsKTsKLSsgIGd0a193aWRnZXRfc2hvdyAocGxheS0+aW5mb19sYWJlbCk7Ci0rCi0gICAvKiBVbmlmaWVkIHBsYXkvcGF1c2UgYnV0dG9uICovCi0gICBwbGF5LT5wbGF5X3BhdXNlX2J1dHRvbiA9Ci0gICAgICAgZ3RrX2J1dHRvbl9uZXdfZnJvbV9pY29uX25hbWUgKCJtZWRpYS1wbGF5YmFjay1wYXVzZSIsCi1AQCAtMjU4LDYgKzI4OSw3IEBAIGNyZWF0ZV91aSAoR3RrUGxheSAqIHBsYXkpCi0gCi0gICBtYWluX3Zib3ggPSBndGtfYm94X25ldyAoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCAwKTsKLSAgIGd0a19ib3hfcGFja19zdGFydCAoR1RLX0JPWCAobWFpbl92Ym94KSwgbWFpbl9oYm94LCBUUlVFLCBUUlVFLCAwKTsKLSsgIGd0a19ib3hfcGFja19zdGFydCAoR1RLX0JPWCAobWFpbl92Ym94KSwgcGxheS0+aW5mb19iYXIsIEZBTFNFLCBGQUxTRSwgMCk7Ci0gICBndGtfYm94X3BhY2tfc3RhcnQgKEdUS19CT1ggKG1haW5fdmJveCksIGNvbnRyb2xzLCBGQUxTRSwgRkFMU0UsIDApOwotICAgZ3RrX2NvbnRhaW5lcl9hZGQgKEdUS19DT05UQUlORVIgKHBsYXktPndpbmRvdyksIG1haW5fdmJveCk7Ci0gCi1AQCAtMzIyLDYgKzM1NCw3IEBAIGVvc19jYiAoR3N0UGxheWVyICogdW51c2VkLCBHdGtQbGF5ICogcGxheSkKLSAgICAgICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUgKHBsYXktPm5leHRfYnV0dG9uLCBnX2xpc3RfbmV4dCAobmV4dCkgIT0gTlVMTCk7Ci0gCi0gICAgICAgZ3N0X3BsYXllcl9zZXRfdXJpIChwbGF5LT5wbGF5ZXIsIG5leHQtPmRhdGEpOwotKyAgICAgIGNsZWFyX21pc3NpbmdfcGx1Z2lucyAocGxheSk7Ci0gICAgICAgZ3N0X3BsYXllcl9wbGF5IChwbGF5LT5wbGF5ZXIpOwotICAgICAgIHNldF90aXRsZSAocGxheSwgbmV4dC0+ZGF0YSk7Ci0gICAgIH0gZWxzZSB7Ci1AQCAtMzMwLDYgKzM2MywyNCBAQCBlb3NfY2IgKEdzdFBsYXllciAqIHVudXNlZCwgR3RrUGxheSAqIHBsYXkpCi0gICB9Ci0gfQotIAotK3N0YXRpYyB2b2lkCi0rZXJyb3JfY2IgKEdzdFBsYXllciAqIHBsYXllciwgR0Vycm9yICogZXJyLCBHdGtQbGF5ICogcGxheSkKLSt7Ci0rICBjaGFyICptZXNzYWdlOwotKwotKyAgaWYgKGdfZXJyb3JfbWF0Y2hlcyAoZXJyLCBnc3RfcGxheWVyX2Vycm9yX3F1YXJrICgpLAotKyAgICAgIEdTVF9QTEFZRVJfRVJST1JfTUlTU0lOR19QTFVHSU4pKSB7Ci0rICAgIC8vIGFkZCBtZXNzYWdlIHRvIGVuZCBvZiBhbnkgZXhpc3RpbmcgbWVzc2FnZTogdGhlcmUgbWF5IGJlCi0rICAgIC8vIG11bHRpcGxlIG1pc3NpbmcgcGx1Z2lucy4KLSsgICAgbWVzc2FnZSA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzJXMuICIsCi0rICAgICAgICBndGtfbGFiZWxfZ2V0X3RleHQgKEdUS19MQUJFTCAocGxheS0+aW5mb19sYWJlbCkpLCBlcnItPm1lc3NhZ2UpOwotKyAgICBndGtfbGFiZWxfc2V0X3RleHQgKEdUS19MQUJFTCAocGxheS0+aW5mb19sYWJlbCksIG1lc3NhZ2UpOwotKyAgICBnX2ZyZWUgKG1lc3NhZ2UpOwotKwotKyAgICBndGtfd2lkZ2V0X3Nob3cgKHBsYXktPmluZm9fYmFyKTsKLSsgIH0KLSt9Ci0rCi0gaW50Ci0gbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqKiBhcmd2KQotIHsKLUBAIC00MjIsNiArNDczLDcgQEAgbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqKiBhcmd2KQotICAgZ19zaWduYWxfY29ubmVjdCAocGxheS5wbGF5ZXIsICJ2aWRlby1kaW1lbnNpb25zLWNoYW5nZWQiLAotICAgICAgIEdfQ0FMTEJBQ0sgKHZpZGVvX2RpbWVuc2lvbnNfY2hhbmdlZF9jYiksICZwbGF5KTsKLSAgIGdfc2lnbmFsX2Nvbm5lY3QgKHBsYXkucGxheWVyLCAiZW5kLW9mLXN0cmVhbSIsIEdfQ0FMTEJBQ0sgKGVvc19jYiksICZwbGF5KTsKLSsgIGdfc2lnbmFsX2Nvbm5lY3QgKHBsYXkucGxheWVyLCAiZXJyb3IiLCBHX0NBTExCQUNLIChlcnJvcl9jYiksICZwbGF5KTsKLSAKLSAgIC8qIFdlIGhhdmUgZmlsZShzKSB0aGF0IG5lZWQgcGxheWluZy4gKi8KLSAgIHNldF90aXRsZSAoJnBsYXksIGdfbGlzdF9maXJzdCAocGxheS51cmlzKS0+ZGF0YSk7Ci1kaWZmIC0tZ2l0IGEvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmMgYi9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuYwotaW5kZXggYmQ2ODJkOS4uNzhlN2JhMSAxMDA2NDQKLS0tLSBhL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jCi0rKysgYi9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuYwotQEAgLTQ3LDYgKzQ3LDcgQEAKLSAKLSAjaW5jbHVkZSA8Z3N0L2dzdC5oPgotICNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSsjaW5jbHVkZSA8Z3N0L3BidXRpbHMvbWlzc2luZy1wbHVnaW5zLmg+Ci0gCi0gR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X3BsYXllcl9kZWJ1Zyk7Ci0gI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X3BsYXllcl9kZWJ1ZwotQEAgLTIzOCw2ICsyMzksNyBAQCBnc3RfcGxheWVyX2NsYXNzX2luaXQgKEdzdFBsYXllckNsYXNzICoga2xhc3MpCi0gICAgICAgZ19zaWduYWxfbmV3ICgidmlkZW8tZGltZW5zaW9ucy1jaGFuZ2VkIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgICBHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX05PX1JFQ1VSU0UgfCBHX1NJR05BTF9OT19IT09LUywgMCwgTlVMTCwKLSAgICAgICBOVUxMLCBOVUxMLCBHX1RZUEVfTk9ORSwgMiwgR19UWVBFX0lOVCwgR19UWVBFX0lOVCk7Ci0rCi0gfQotIAotIHN0YXRpYyB2b2lkCi1AQCAtNjE5LDYgKzYyMSwyMSBAQCBlcnJvcl9jYiAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbXNnLCBncG9pbnRlciB1c2VyX2RhdGEpCi0gICBnX211dGV4X3VubG9jayAoJnNlbGYtPnByaXYtPmxvY2spOwotIH0KLSAKLStzdGF0aWMgdm9pZAotK2VsZW1lbnRfY2IgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1zZywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotK3sKLSsgIEdzdFBsYXllciAqc2VsZiA9IEdTVF9QTEFZRVIgKHVzZXJfZGF0YSk7Ci0rCi0rICBpZiAoZ3N0X2lzX21pc3NpbmdfcGx1Z2luX21lc3NhZ2UgKG1zZykpIHsKLSsgICAgZ2NoYXIgKmRlc2M7Ci0rCi0rICAgIGRlc2MgPSBnc3RfbWlzc2luZ19wbHVnaW5fbWVzc2FnZV9nZXRfZGVzY3JpcHRpb24gKG1zZyk7Ci0rICAgIGVtaXRfZXJyb3IgKHNlbGYsIGdfZXJyb3JfbmV3IChHU1RfUExBWUVSX0VSUk9SLAotKyAgICAgICAgR1NUX1BMQVlFUl9FUlJPUl9NSVNTSU5HX1BMVUdJTiwgIk1pc3NpbmcgcGx1Z2luICclcyciLCBkZXNjKSk7Ci0rICAgIGdfZnJlZSAoZGVzYyk7Ci0rICB9Ci0rfQotKwotIHN0YXRpYyBnYm9vbGVhbgotIGVvc19kaXNwYXRjaCAoZ3BvaW50ZXIgdXNlcl9kYXRhKQotIHsKLUBAIC0xMDU5LDYgKzEwNzYsOCBAQCBnc3RfcGxheWVyX21haW4gKGdwb2ludGVyIGRhdGEpCi0gICAgICAgTlVMTCwgTlVMTCk7Ci0gICBnX3NvdXJjZV9hdHRhY2ggKGJ1c19zb3VyY2UsIHNlbGYtPnByaXYtPmNvbnRleHQpOwotIAotKyAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKGJ1cyksICJtZXNzYWdlOjplbGVtZW50IiwKLSsgICAgICBHX0NBTExCQUNLIChlbGVtZW50X2NiKSwgc2VsZik7Ci0gICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAoYnVzKSwgIm1lc3NhZ2U6OmVycm9yIiwgR19DQUxMQkFDSyAoZXJyb3JfY2IpLAotICAgICAgIHNlbGYpOwotICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKGJ1cyksICJtZXNzYWdlOjplb3MiLCBHX0NBTExCQUNLIChlb3NfY2IpLCBzZWxmKTsKLUBAIC0xNTYwLDYgKzE1NzksNyBAQCBnc3RfcGxheWVyX2Vycm9yX2dldF90eXBlICh2b2lkKQotICAgc3RhdGljIGdzaXplIGlkID0gMDsKLSAgIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0gewotICAgICB7Q19FTlVNIChHU1RfUExBWUVSX0VSUk9SX0ZBSUxFRCksICJHU1RfUExBWUVSX0VSUk9SX0ZBSUxFRCIsICJmYWlsZWQifSwKLSsgICAge0NfRU5VTSAoR1NUX1BMQVlFUl9FUlJPUl9NSVNTSU5HX1BMVUdJTiksICJHU1RfUExBWUVSX0VSUk9SX01JU1NJTkdfUExVR0lOIiwgIm1pc3NpbmctcGx1Z2luIn0sCi0gICAgIHswLCBOVUxMLCBOVUxMfQotICAgfTsKLSAKLUBAIC0xNTc3LDYgKzE1OTcsOCBAQCBnc3RfcGxheWVyX2Vycm9yX2dldF9uYW1lIChHc3RQbGF5ZXJFcnJvciBlcnJvcikKLSAgIHN3aXRjaCAoZXJyb3IpIHsKLSAgICAgY2FzZSBHU1RfUExBWUVSX0VSUk9SX0ZBSUxFRDoKLSAgICAgICByZXR1cm4gImZhaWxlZCI7Ci0rICAgIGNhc2UgR1NUX1BMQVlFUl9FUlJPUl9NSVNTSU5HX1BMVUdJTjoKLSsgICAgICByZXR1cm4gIm1pc3NpbmctcGx1Z2luIjsKLSAgIH0KLSAKLSAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotZGlmZiAtLWdpdCBhL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5oIGIvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmgKLWluZGV4IGM0Mzg1MTMuLjM1ZmI1YmIgMTAwNjQ0Ci0tLS0gYS9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaAotKysrIGIvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmgKLUBAIC00NCw3ICs0NCw4IEBAIEdUeXBlICAgICAgICBnc3RfcGxheWVyX2Vycm9yX2dldF90eXBlICAgICAgICAgICAgICAgICh2b2lkKTsKLSAjZGVmaW5lICAgICAgR1NUX1RZUEVfUExBWUVSX0VSUk9SICAgICAgICAgICAgICAgICAgICAoZ3N0X3BsYXllcl9lcnJvcl9nZXRfdHlwZSAoKSkKLSAKLSB0eXBlZGVmIGVudW0gewotLSAgR1NUX1BMQVlFUl9FUlJPUl9GQUlMRUQgPSAwCi0rICBHU1RfUExBWUVSX0VSUk9SX0ZBSUxFRCA9IDAsCi0rICBHU1RfUExBWUVSX0VSUk9SX01JU1NJTkdfUExVR0lOCi0gfSBHc3RQbGF5ZXJFcnJvcjsKLSAKLSBjb25zdCBnY2hhciAqZ3N0X3BsYXllcl9lcnJvcl9nZXRfbmFtZSAgICAgICAgICAgICAgICAoR3N0UGxheWVyRXJyb3IgZXJyb3IpOwotLS0gCi0yLjEuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvRml4LXBhdXNlLXBsYXkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvRml4LXBhdXNlLXBsYXkucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4M2M0MmEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL0ZpeC1wYXVzZS1wbGF5LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLUZpeCBwYXVzZS9wbGF5Ci0KLVRoZSBjdXJyZW50IHBsYXllciBzdGF0ZSBpcyBub3cgbm90aWZpZWQgdmlhIHRoZSBzdGF0ZS1jaGFuZ2VkIHNpZ25hbCwKLWFuZCBpbiB0aGUgR1RLIFVJIGl0IHdhcyBvbmx5IHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgZGVzaXJlZCBzdGF0ZS4KLQotVGhpcyBpcyBhIGJhY2twb3J0IG9mIHVwc3RyZWFtIGNvbW1pdCA3Mzg0NzljN2EwLgotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1TaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgotCi0tLS0KLSBndGsvZ3RrLXBsYXkuYyAgICAgICAgICAgICB8ICA4ICsrKysrKy0tCi0gbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmMgfCAxMiAtLS0tLS0tLS0tLS0KLSBsaWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaCB8ICAyIC0tCi0gMyBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvZ3RrL2d0ay1wbGF5LmMgYi9ndGsvZ3RrLXBsYXkuYwotaW5kZXggNmU3YTA5OC4uZTJiNjA1YSAxMDA2NDQKLS0tLSBhL2d0ay9ndGstcGxheS5jCi0rKysgYi9ndGsvZ3RrLXBsYXkuYwotQEAgLTM0LDYgKzM0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QKLSAgIEd0a1dpZGdldCAqaW5mb19iYXI7Ci0gICBHdGtXaWRnZXQgKnZvbHVtZV9idXR0b247Ci0gICBndWxvbmcgc2Vla2Jhcl92YWx1ZV9jaGFuZ2VkX3NpZ25hbF9pZDsKLSsgIGdib29sZWFuIHBsYXlpbmc7Ci0gfSBHdGtQbGF5OwotIAotIC8qIENvbXBhdCBzdHVicyAqLwotQEAgLTExOCwxMiArMTE5LDEzIEBAIHBsYXlfcGF1c2VfY2xpY2tlZF9jYiAoR3RrQnV0dG9uICogYnV0dG9uLCBHdGtQbGF5ICogcGxheSkKLSB7Ci0gICBHdGtXaWRnZXQgKmltYWdlOwotIAotLSAgaWYgKGdzdF9wbGF5ZXJfaXNfcGxheWluZyAocGxheS0+cGxheWVyKSkgewotKyAgaWYgKHBsYXktPnBsYXlpbmcpIHsKLSAgICAgZ3N0X3BsYXllcl9wYXVzZSAocGxheS0+cGxheWVyKTsKLSAgICAgaW1hZ2UgPQotICAgICAgICAgZ3RrX2ltYWdlX25ld19mcm9tX2ljb25fbmFtZSAoIm1lZGlhLXBsYXliYWNrLXN0YXJ0IiwKLSAgICAgICAgIEdUS19JQ09OX1NJWkVfQlVUVE9OKTsKLSAgICAgZ3RrX2J1dHRvbl9zZXRfaW1hZ2UgKEdUS19CVVRUT04gKHBsYXktPnBsYXlfcGF1c2VfYnV0dG9uKSwgaW1hZ2UpOwotKyAgICBwbGF5LT5wbGF5aW5nID0gRkFMU0U7Ci0gICB9IGVsc2UgewotICAgICBnY2hhciAqdGl0bGU7Ci0gCi1AQCAtMTM2LDYgKzEzOCw3IEBAIHBsYXlfcGF1c2VfY2xpY2tlZF9jYiAoR3RrQnV0dG9uICogYnV0dG9uLCBHdGtQbGF5ICogcGxheSkKLSAgICAgdGl0bGUgPSBnc3RfcGxheWVyX2dldF91cmkgKHBsYXktPnBsYXllcik7Ci0gICAgIHNldF90aXRsZSAocGxheSwgdGl0bGUpOwotICAgICBnX2ZyZWUgKHRpdGxlKTsKLSsgICAgcGxheS0+cGxheWluZyA9IFRSVUU7Ci0gICB9Ci0gfQotIAotQEAgLTMzNSw3ICszMzgsNyBAQCB2aWRlb19kaW1lbnNpb25zX2NoYW5nZWRfY2IgKEdzdFBsYXllciAqIHVudXNlZCwgZ2ludCB3aWR0aCwgZ2ludCBoZWlnaHQsCi0gc3RhdGljIHZvaWQKLSBlb3NfY2IgKEdzdFBsYXllciAqIHVudXNlZCwgR3RrUGxheSAqIHBsYXkpCi0gewotLSAgaWYgKGdzdF9wbGF5ZXJfaXNfcGxheWluZyAocGxheS0+cGxheWVyKSkgewotKyAgaWYgKHBsYXktPnBsYXlpbmcpIHsKLSAgICAgR0xpc3QgKm5leHQgPSBOVUxMOwotICAgICBnY2hhciAqdXJpOwotIAotQEAgLTQ1Miw2ICs0NTUsNyBAQCBtYWluIChnaW50IGFyZ2MsIGdjaGFyICoqIGFyZ3YpCi0gICB9Ci0gCi0gICBwbGF5LnBsYXllciA9IGdzdF9wbGF5ZXJfbmV3ICgpOwotKyAgcGxheS5wbGF5aW5nID0gVFJVRTsKLSAKLSAgIGdfb2JqZWN0X3NldCAocGxheS5wbGF5ZXIsICJkaXNwYXRjaC10by1tYWluLWNvbnRleHQiLCBUUlVFLCBOVUxMKTsKLSAKLWRpZmYgLS1naXQgYS9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuYyBiL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jCi1pbmRleCAwNjliMjg0Li43OGU3YmExIDEwMDY0NAotLS0tIGEvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmMKLSsrKyBiL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jCi1AQCAtMTQyMiwxOCArMTQyMiw2IEBAIGdzdF9wbGF5ZXJfc2V0X3VyaSAoR3N0UGxheWVyICogc2VsZiwgY29uc3QgZ2NoYXIgKiB2YWwpCi0gICBnX29iamVjdF9zZXQgKHNlbGYsICJ1cmkiLCB2YWwsIE5VTEwpOwotIH0KLSAKLS1nYm9vbGVhbgotLWdzdF9wbGF5ZXJfaXNfcGxheWluZyAoR3N0UGxheWVyICogc2VsZikKLS17Ci0tICBnYm9vbGVhbiB2YWw7Ci0tCi0tICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BMQVlFUiAoc2VsZiksIEZBTFNFKTsKLS0KLS0gIGdfb2JqZWN0X2dldCAoc2VsZiwgImlzLXBsYXlpbmciLCAmdmFsLCBOVUxMKTsKLS0KLS0gIHJldHVybiB2YWw7Ci0tfQotLQotIEdzdENsb2NrVGltZQotIGdzdF9wbGF5ZXJfZ2V0X3Bvc2l0aW9uIChHc3RQbGF5ZXIgKiBzZWxmKQotIHsKLWRpZmYgLS1naXQgYS9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaCBiL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5oCi1pbmRleCA2OTMzZGQ3Li4zNWZiNWJiIDEwMDY0NAotLS0tIGEvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmgKLSsrKyBiL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5oCi1AQCAtOTMsOCArOTMsNiBAQCBnY2hhciAqICAgICAgZ3N0X3BsYXllcl9nZXRfdXJpICAgICAgICAgICAgICAgICAgICAgICAoR3N0UGxheWVyICAgICogcGxheWVyKTsKLSB2b2lkICAgICAgICAgZ3N0X3BsYXllcl9zZXRfdXJpICAgICAgICAgICAgICAgICAgICAgICAoR3N0UGxheWVyICAgICogcGxheWVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgKiB1cmkpOwotIAotLWdib29sZWFuICAgICBnc3RfcGxheWVyX2lzX3BsYXlpbmcgICAgICAgICAgICAgICAgICAgIChHc3RQbGF5ZXIgICAgKiBwbGF5ZXIpOwotLQotIEdzdENsb2NrVGltZSBnc3RfcGxheWVyX2dldF9wb3NpdGlvbiAgICAgICAgICAgICAgICAgIChHc3RQbGF5ZXIgICAgKiBwbGF5ZXIpOwotIEdzdENsb2NrVGltZSBnc3RfcGxheWVyX2dldF9kdXJhdGlvbiAgICAgICAgICAgICAgICAgIChHc3RQbGF5ZXIgICAgKiBwbGF5ZXIpOwotIAotLS0gCi0yLjEuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZmlsZWNob29zZXIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZmlsZWNob29zZXIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiZjFiMDMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL2ZpbGVjaG9vc2VyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKLVNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+Ci0KLUZyb20gNDNkNGIxOWFiNjExZDg0NDE1NmUyNmM0ODQwY2M1NGRkYjczYWUwMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+Ci1EYXRlOiBUaHUsIDI2IEZlYiAyMDE1IDE3OjE3OjA1ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdIGd0ay1wbGF5OiBzaG93IGEgZmlsZSBjaG9vc2VyIGlmIG5vIFVSSXMgd2VyZSBwYXNzZWQKLQotLS0tCi0gZ3RrL2d0ay1wbGF5LmMgfCAgIDI4ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0KLSAxIGZpbGUgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2d0ay9ndGstcGxheS5jIGIvZ3RrL2d0ay1wbGF5LmMKLWluZGV4IGYwMTUwNzcuLjk3NjZhNzIgMTAwNjQ0Ci0tLS0gYS9ndGsvZ3RrLXBsYXkuYwotKysrIGIvZ3RrL2d0ay1wbGF5LmMKLUBAIC0zMTksOCArMzE5LDMyIEBAIG1haW4gKGdpbnQgYXJnYywgZ2NoYXIgKiogYXJndikKLSAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgcGxheWxpc3RzIGFuZCBzdHVmZgotICAgLyogUGFyc2UgdGhlIGxpc3Qgb2YgdGhlIGZpbGUgbmFtZXMgd2UgaGF2ZSB0byBwbGF5LiAqLwotICAgaWYgKCFmaWxlX25hbWVzKSB7Ci0tICAgIGdfcHJpbnQgKCJVc2FnZTogJXMgRklMRShzKXxVUkkocylcbiIsIEFQUF9OQU1FKTsKLS0gICAgcmV0dXJuIDE7Ci0rICAgIEd0a1dpZGdldCAqY2hvb3NlcjsKLSsgICAgaW50IHJlczsKLSsKLSsgICAgY2hvb3NlciA9IGd0a19maWxlX2Nob29zZXJfZGlhbG9nX25ldyAoIlNlbGVjdCBmaWxlcyB0byBwbGF5IiwgTlVMTCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfRklMRV9DSE9PU0VSX0FDVElPTl9PUEVOLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfQ2FuY2VsIiwgR1RLX1JFU1BPTlNFX0NBTkNFTCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX09wZW4iLCBHVEtfUkVTUE9OU0VfQUNDRVBULAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotKyAgICBnX29iamVjdF9zZXQgKGNob29zZXIsCi0rICAgICAgICAgICAgICAgICAgImxvY2FsLW9ubHkiLCBGQUxTRSwKLSsgICAgICAgICAgICAgICAgICAic2VsZWN0LW11bHRpcGxlIiwgVFJVRSwKLSsgICAgICAgICAgICAgICAgICBOVUxMKTsKLSsKLSsgICAgcmVzID0gZ3RrX2RpYWxvZ19ydW4gKEdUS19ESUFMT0cgKGNob29zZXIpKTsKLSsgICAgaWYgKHJlcyA9PSBHVEtfUkVTUE9OU0VfQUNDRVBUKSB7Ci0rICAgICAgR1NMaXN0ICpsOwotKwotKyAgICAgIGwgPSBndGtfZmlsZV9jaG9vc2VyX2dldF91cmlzIChHVEtfRklMRV9DSE9PU0VSIChjaG9vc2VyKSk7Ci0rICAgICAgd2hpbGUgKGwpIHsKLSsgICAgICAgIHBsYXkudXJpcyA9IGdfbGlzdF9hcHBlbmQgKHBsYXkudXJpcywgbC0+ZGF0YSk7Ci0rICAgICAgICBsID0gZ19zbGlzdF9kZWxldGVfbGluayAobCwgbCk7Ci0rICAgICAgfQotKyAgICB9IGVsc2UgewotKyAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rICAgIGd0a193aWRnZXRfZGVzdHJveSAoY2hvb3Nlcik7Ci0gICB9IGVsc2UgewotICAgICBndWludCBpOwotIAotLS0gCi0xLjcuMTAuNAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXJfZ2l0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyX2dpdC5iYgppbmRleCBjYjEyYTQ2Li40ZmU4ZmRlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXJfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllcl9naXQuYmIKQEAgLTUsMTQgKzUsMTEgQEAKIERFUEVORFMgPSAiZ2xpYi0yLjAgZ3N0cmVhbWVyMS4wIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkIGd0ayszIGdsaWItMi4wLW5hdGl2ZSIKIAogU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3Nkcm9lZ2UvZ3N0LXBsYXllci5naXQgXAotICAgICAgICAgICBmaWxlOi8vZmlsZWNob29zZXIucGF0Y2g7YXBwbHk9MCBcCi0gICAgICAgICAgIGZpbGU6Ly9GaXgtcGF1c2UtcGxheS5wYXRjaDthcHBseT0wIFwKLSAgICAgICAgICAgZmlsZTovL0FkZC1lcnJvci1zaWduYWwtZW1pc3Npb24tZm9yLW1pc3NpbmctcGx1Z2lucy5wYXRjaDthcHBseT0wIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtZ3RrLXBsYXktRGlzYWJsZS12aXN1YWxpemF0aW9ucy5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9nc3QtcGxheWVyLmRlc2t0b3AiCiAKIFNSQ1JFViA9ICJlZTNjMjI2YzgyNzY3YTA4OTc0M2U0ZTA2MDU4NzQzZTY3ZjczY2RiIgogUFYgPSAiMC4wLjErZ2l0JHtTUkNQVn0iCitVUFNUUkVBTV9WRVJTSU9OX1VOS05PV04gPSAiMSIKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXItdmFhcGkvdmFhcGl2aWRlb2J1ZmZlcnBvb2wtY3JlYXRlLWFsbG9jYXRvci1pZi1uZWVkZWQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lci12YWFwaS92YWFwaXZpZGVvYnVmZmVycG9vbC1jcmVhdGUtYWxsb2NhdG9yLWlmLW5lZWRlZC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY2NmFkYy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lci12YWFwaS92YWFwaXZpZGVvYnVmZmVycG9vbC1jcmVhdGUtYWxsb2NhdG9yLWlmLW5lZWRlZC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLVNpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtjb21taXQgNTlhNzMxYmU2YiBpbiAnMS4xMCcgYnJhbmNoXQotCi0KLUZyb20gMDJhNjAwMmMzYTgwYjNhNTMwMWMwOTQzYjFhMTUxOGJiZGY0MzlmYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206ID0/VVRGLTg/cT9WPUMzPUFEY3Rvcj0yME1hbnVlbD0yMEo9QzM9QTFxdWV6PTIwTGVhbD89Ci0gPHZqYXF1ZXpAaWdhbGlhLmNvbT4KLURhdGU6IEZyaSwgMjEgQXByIDIwMTcgMTk6MDc6MTggKzAyMDAKLVN1YmplY3Q6IFtQQVRDSF0gdmFhcGl2aWRlb2J1ZmZlcnBvb2w6IGNyZWF0ZSBhbGxvY2F0b3IgaWYgbmVlZGVkCi0KLUJhY2twb3J0IHRvIGJyYW5jaCAxLjEwCi0KLVNvbWV0aW1lcyBhIHZpZGVvIGRlY29kZXIgY291bGQgc2V0IGRpZmZlcmVudCBidWZmZXIgcG9vbAotY29uZmlndXJhdGlvbnMsIGJlY2F1c2UgdGhlaXIgZnJhbWUgc2l6ZSBjaGFuZ2VzLiBJbiB0aGlzIGNhc2Ugd2UKLWRpZCBub3QgcmVjb25maWd1cmUgdGhlIGFsbG9jYXRvci4KLQotVGhpcyBwYXRjaCBlbmFibGVzIHRoaXMgdXNlIGNhc2UsIGNyZWF0aW5nIGEgbmV3IGFsbG9jYXRvciBpbnNpZGUKLXRoZSBWQUFQSSBidWZmZXIgcG9vbCBpZiB0aGUgY2FwcyBjaGFuZ2VkLCBpZiBpdCBpcyBub3QgZG1hYnVmLWJhc2VkLgotSWYgc28sIGl0IGlzIGp1c3QgcmVjb25maWd1cmVkLCBzaW5jZSBpdCBkb2Vzbid0IGhhdmUgYSBzdXJmYWNlIHBvb2wuCi0KLWh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03ODE1NzcKLS0tLQotIGdzdC92YWFwaS9nc3R2YWFwaXZpZGVvYnVmZmVycG9vbC5jIHwgMjEgKysrKysrKysrKysrKysrKysrKysrCi0gMSBmaWxlIGNoYW5nZWQsIDIxIGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL2dzdC92YWFwaS9nc3R2YWFwaXZpZGVvYnVmZmVycG9vbC5jIGIvZ3N0L3ZhYXBpL2dzdHZhYXBpdmlkZW9idWZmZXJwb29sLmMKLWluZGV4IGEzYjkyMjNmLi45YTUwNjE0YiAxMDA2NDQKLS0tLSBhL2dzdC92YWFwaS9nc3R2YWFwaXZpZGVvYnVmZmVycG9vbC5jCi0rKysgYi9nc3QvdmFhcGkvZ3N0dmFhcGl2aWRlb2J1ZmZlcnBvb2wuYwotQEAgLTE1OSw2ICsxNTksMjcgQEAgZ3N0X3ZhYXBpX3ZpZGVvX2J1ZmZlcl9wb29sX3NldF9jb25maWcgKEdzdEJ1ZmZlclBvb2wgKiBwb29sLAotICAgICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopICYgcHJpdi0+YWxsb2NhdG9yLCBOVUxMKTsKLSAgIHByaXYtPnZpZGVvX2luZm8gPSBuZXdfdmlwOwotIAotKyAgewotKyAgICBndWludCBzdXJmYWNlX2FsbG9jX2ZsYWdzOwotKyAgICBnYm9vbGVhbiB2aW5mb19jaGFuZ2VkID0gRkFMU0U7Ci0rCi0rICAgIGlmIChhbGxvY2F0b3IpIHsKLSsgICAgICBjb25zdCBHc3RWaWRlb0luZm8gKmFsbG9jX3ZpbmZvID0KLSsgICAgICAgICAgZ3N0X2FsbG9jYXRvcl9nZXRfdmFhcGlfdmlkZW9faW5mbyAoYWxsb2NhdG9yLCAmc3VyZmFjZV9hbGxvY19mbGFncyk7Ci0rICAgICAgdmluZm9fY2hhbmdlZCA9IGdzdF92aWRlb19pbmZvX2NoYW5nZWQgKGFsbG9jX3ZpbmZvLCAmbmV3X3ZpcCk7Ci0rICAgIH0KLSsKLSsgICAgaWYgKHZpbmZvX2NoYW5nZWQgJiYgYWxsb2NhdG9yICYmIHByaXYtPnVzZV9kbWFidWZfbWVtb3J5KSB7Ci0rICAgICAgZ3N0X2FsbG9jYXRvcl9zZXRfdmFhcGlfdmlkZW9faW5mbyAoYWxsb2NhdG9yLCAmbmV3X3ZpcCwKLSsgICAgICAgICAgc3VyZmFjZV9hbGxvY19mbGFncyk7Ci0rICAgIH0gZWxzZSBpZiAoIXByaXYtPnVzZV9kbWFidWZfbWVtb3J5ICYmICh2aW5mb19jaGFuZ2VkIHx8ICFhbGxvY2F0b3IpKSB7Ci0rICAgICAgLyogbGV0J3MgZGVzdHJveSB0aGUgb3RoZXIgYWxsb2NhdG9yIGFuZCBjcmVhdGUgYSBuZXcgb25lICovCi0rICAgICAgYWxsb2NhdG9yID0gZ3N0X3ZhYXBpX3ZpZGVvX2FsbG9jYXRvcl9uZXcgKHByaXYtPmRpc3BsYXksICZuZXdfdmlwLAotKyAgICAgICAgICBzdXJmYWNlX2FsbG9jX2ZsYWdzKTsKLSsgICAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF9hbGxvY2F0b3IgKGNvbmZpZywgYWxsb2NhdG9yLCBOVUxMKTsKLSsgICAgfQotKyAgfQotKwotICAgaWYgKCFnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2hhc19vcHRpb24gKGNvbmZpZywKLSAgICAgICAgICAgR1NUX0JVRkZFUl9QT09MX09QVElPTl9WQUFQSV9WSURFT19NRVRBKSkKLSAgICAgZ290byBlcnJvcl9ub192YWFwaV92aWRlb19tZXRhX29wdGlvbjsKLS0tIAotMi4xMS4wCi0KLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYvMDAwMS1jb25maWd1cmUtY2hlY2stZm9yLWFybXY3dmUtdmFyaWFudC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2LzAwMDEtY29uZmlndXJlLWNoZWNrLWZvci1hcm12N3ZlLXZhcmlhbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgwZDA3MwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2LzAwMDEtY29uZmlndXJlLWNoZWNrLWZvci1hcm12N3ZlLXZhcmlhbnQucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSBhYWM1OTAyZDNjOWNiMzVjNzcxZTc2MGQwZTQ4NzYyMmFhMmUxMTZhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMjAgQXByIDIwMTcgMTA6Mzg6MTggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlOiBjaGVjayBmb3IgYXJtdjd2ZSB2YXJpYW50CisKK09FIHBhc3NlcyAtbWNwdSBhbmQgLW1hcmNoIHZpYSBjbWRsaW5lIGFuZCBpZgorcGFja2FnZSB0cmllcyB0byBkZXRlY3Qgb25lIG9mIGl0IG93biB0aGVuIGl0CitzaG91bGQgYmUgY29tcGF0aWJsZSBvdGhlcndpc2UsIG5ld2VyIGdjYzcrIHdpbGwKK2Vycm9yIG91dAorCitDaGVjayBmb3IgcmVsZXZhbnQgcHJlcHJvY2Vzc29yIG1hY3JvIHRvIGRldGVybWluZQorYXJtdjd2ZSBhcmNoaXRlY3R1cmUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnc3QtbGlicy9leHQvbGliYXYvY29uZmlndXJlIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9leHQvbGliYXYvY29uZmlndXJlIGIvZ3N0LWxpYnMvZXh0L2xpYmF2L2NvbmZpZ3VyZQoraW5kZXggNGE1ZTQ3Ny4uNzI3ODE4ZSAxMDA3NTUKKy0tLSBhL2dzdC1saWJzL2V4dC9saWJhdi9jb25maWd1cmUKKysrKyBiL2dzdC1saWJzL2V4dC9saWJhdi9jb25maWd1cmUKK0BAIC00Mjk1LDYgKzQyOTUsNyBAQCBlbGlmIGVuYWJsZWQgYXJtOyB0aGVuCisgICAgICAgICBlbGlmIGNoZWNrX2FybV9hcmNoIDZaOyAgICAgICB0aGVuIGVjaG8gYXJtdjZ6CisgICAgICAgICBlbGlmIGNoZWNrX2FybV9hcmNoIDZaSzsgICAgICB0aGVuIGVjaG8gYXJtdjZ6aworICAgICAgICAgZWxpZiBjaGVja19hcm1fYXJjaCA2VDI7ICAgICAgdGhlbiBlY2hvIGFybXY2dDIKKysgICAgICAgIGVsaWYgY2hlY2tfYXJtX2FyY2ggRVhUX0lESVY7IHRoZW4gZWNobyBhcm12N3ZlCisgICAgICAgICBlbGlmIGNoZWNrX2FybV9hcmNoIDc7ICAgICAgICB0aGVuIGVjaG8gYXJtdjcKKyAgICAgICAgIGVsaWYgY2hlY2tfYXJtX2FyY2ggN0EgIDdfQTsgIHRoZW4gZWNobyBhcm12Ny1hCisgICAgICAgICBlbGlmIGNoZWNrX2FybV9hcmNoIDdTOyAgICAgICB0aGVuIGVjaG8gYXJtdjctYQorLS0gCisyLjEyLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYvMDAwMS1oZXZjcHJlZF9tc2EuYy1GaXgtYnVpbGQtYnktSW5jbHVkaW5nLWxpYmF2Y29kZWMtaGV2LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYvMDAwMS1oZXZjcHJlZF9tc2EuYy1GaXgtYnVpbGQtYnktSW5jbHVkaW5nLWxpYmF2Y29kZWMtaGV2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYmZjODQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdi8wMDAxLWhldmNwcmVkX21zYS5jLUZpeC1idWlsZC1ieS1JbmNsdWRpbmctbGliYXZjb2RlYy1oZXYucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBiNTIyNmMwOTZhMGI3MDQ5ODc0ODU4ZTk0YTU5ZDQzZTEwYmEzZmQyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMjEgU2VwIDIwMTcgMTA6MjI6NTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gaGV2Y3ByZWRfbXNhLmM6IEZpeCBidWlsZCBieSBJbmNsdWRpbmcgbGliYXZjb2RlYy9oZXZjZGVjLmgKKworc3JjL2xpYmF2Y29kZWMvbWlwcy9oZXZjcHJlZF9tc2EuYzoxOTEzOjMyOiBlcnJvcjogdW5rbm93biB0eXBlIG5hbWUgJ0hFVkNDb250ZXh0JzsgZGlkIHlvdSBtZWFuICdIRVZDUHJlZENvbnRleHQnPworIHZvaWQgZmZfaW50cmFfcHJlZF84XzE2eDE2X21zYShIRVZDQ29udGV4dCAqcywgaW50IHgwLCBpbnQgeTAsIGludCBjX2lkeCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXn5+fn5+fn5+fn4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEVWQ1ByZWRDb250ZXh0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgZ3N0LWxpYnMvZXh0L2xpYmF2L2xpYmF2Y29kZWMvbWlwcy9oZXZjcHJlZF9tc2EuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2dzdC1saWJzL2V4dC9saWJhdi9saWJhdmNvZGVjL21pcHMvaGV2Y3ByZWRfbXNhLmMgYi9nc3QtbGlicy9leHQvbGliYXYvbGliYXZjb2RlYy9taXBzL2hldmNwcmVkX21zYS5jCitpbmRleCA2YTNiMjgxLi45NjNjNjRjIDEwMDY0NAorLS0tIGEvZ3N0LWxpYnMvZXh0L2xpYmF2L2xpYmF2Y29kZWMvbWlwcy9oZXZjcHJlZF9tc2EuYworKysrIGIvZ3N0LWxpYnMvZXh0L2xpYmF2L2xpYmF2Y29kZWMvbWlwcy9oZXZjcHJlZF9tc2EuYworQEAgLTE4LDcgKzE4LDcgQEAKKyAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgICovCisgCistI2luY2x1ZGUgImxpYmF2Y29kZWMvaGV2Yy5oIgorKyNpbmNsdWRlICJsaWJhdmNvZGVjL2hldmNkZWMuaCIKKyAjaW5jbHVkZSAibGliYXZ1dGlsL21pcHMvZ2VuZXJpY19tYWNyb3NfbXNhLmgiCisgI2luY2x1ZGUgImhldmNwcmVkX21pcHMuaCIKKyAKKy0tIAorMi4xNC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2XzEuMTAuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2XzEuMTAuNC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlkODFkYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdl8xLjEwLjQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1yZXF1aXJlIGdzdHJlYW1lcjEuMC1saWJhdi5pbmMKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTY3NjJlZDQ0MmIzODIyMzg3YTUxYzkyZDkyOGVhZDBkIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2V4dC9saWJhdi9nc3Rhdi5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MTg7bWQ1PWE3NTJjMzUyNjdkODI3NmZkOWNhM2RiNjk5NGZjYTljIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkdQTHYyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvQ09QWUlORy5HUEx2MzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0NPUFlJTkcuTEdQTHYyLjE7bWQ1PWJkN2E0NDMzMjBhZjhjODEyZTRjMThkMWI3OWRmMDA0IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkxHUEx2MzttZDU9ZTZhNjAwZmQ1ZTFkOWNiZGUyZDk4MzY4MDIzM2FkMDIiCi0KLVNSQ19VUkkgPSAiIFwKLSAgICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LWxpYmF2L2dzdC1saWJhdi0ke1BWfS50YXIueHogXAotICAgIGZpbGU6Ly8wMDAxLURpc2FibGUteWFzbS1mb3ItbGliYXYtd2hlbi1kaXNhYmxlLXlhc20ucGF0Y2ggXAotICAgIGZpbGU6Ly93b3JrYXJvdW5kLXRvLWJ1aWxkLWdzdC1saWJhdi1mb3ItaTU4Ni13aXRoLWdjYy5wYXRjaCBcCi0gICAgZmlsZTovL21pcHM2NF9jcHVfZGV0ZWN0aW9uLnBhdGNoIFwKLSIKLVNSQ19VUklbbWQ1c3VtXSA9ICJlMmJkZDlmZGU2Y2EzZmY3ZWZmZmI5M2RmMTIxZjRmZCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI2Y2EwZmVjYTc1ZTNkNDgzMTVlMDdmMjBlYzM3Y2Y2MjYwZWQxZTlkZGU1OGRmMzU1ZmViZDUwMTYyNDYyNjhiIgotCi1TID0gIiR7V09SS0RJUn0vZ3N0LWxpYmF2LSR7UFZ9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXZfMS4xMi4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXZfMS4xMi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNWJiZDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdl8xLjEyLjIuYmIKQEAgLTAsMCArMSwyMSBAQAorcmVxdWlyZSBnc3RyZWFtZXIxLjAtbGliYXYuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT02NzYyZWQ0NDJiMzgyMjM4N2E1MWM5MmQ5MjhlYWQwZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9leHQvbGliYXYvZ3N0YXYuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTE4O21kNT1hNzUyYzM1MjY3ZDgyNzZmZDljYTNkYjY5OTRmY2E5YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvQ09QWUlORy5HUEx2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0NPUFlJTkcuR1BMdjM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkxHUEx2Mi4xO21kNT1iZDdhNDQzMzIwYWY4YzgxMmU0YzE4ZDFiNzlkZjAwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvQ09QWUlORy5MR1BMdjM7bWQ1PWU2YTYwMGZkNWUxZDljYmRlMmQ5ODM2ODAyMzNhZDAyIgorCitTUkNfVVJJID0gImh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtbGliYXYvZ3N0LWxpYmF2LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLURpc2FibGUteWFzbS1mb3ItbGliYXYtd2hlbi1kaXNhYmxlLXlhc20ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vd29ya2Fyb3VuZC10by1idWlsZC1nc3QtbGliYXYtZm9yLWk1ODYtd2l0aC1nY2MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWlwczY0X2NwdV9kZXRlY3Rpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUtY2hlY2stZm9yLWFybXY3dmUtdmFyaWFudC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWhldmNwcmVkX21zYS5jLUZpeC1idWlsZC1ieS1JbmNsdWRpbmctbGliYXZjb2RlYy1oZXYucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiODc4OGFlY2MwMzJhMjg3MjI3YjRiZDIzOWQxYjk5OGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWJiNzM1YjliYjIxOGI2NTJhZTQwNzFlYTZmNmJlOGVhYWU1NWU5ZDMyMzNhZWMyZjM2Yjg4MmEyNzU0MmRiMyIKKworUyA9ICIke1dPUktESVJ9L2dzdC1saWJhdi0ke1BWfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZS5iYgppbmRleCBjNTQyYjEzLi4wMTZlMTc2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1tZXRhLWJhc2UuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbWV0YS1iYXNlLmJiCkBAIC0zNyw3ICszNyw3IEBACiAgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS12aWRlb3NjYWxlIFwKICAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXZpZGVvY29udmVydCBcCiAgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC1hdXRvZGV0ZWN0IFwKLSAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLXNvdXBodHRwc3JjIgorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2Qtc291cCIKIAogUlJFQ09NTUVORFNfZ3N0cmVhbWVyMS4wLW1ldGEteDExLWJhc2UgPSAiXAogICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UteGltYWdlc2luayBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXguaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214LmluYwppbmRleCAwNTU2MmIxLi41ZDkyMzUxIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXguaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teC5pbmMKQEAgLTI5LDEwICsyOSwxNyBAQAogICAgICAgICBkLnNldFZhcigiUEFDS0FHRV9BUkNIIiwgZC5nZXRWYXIoIk1BQ0hJTkVfQVJDSCIpKQogfQogCitkZWxldGVfcGtnX200X2ZpbGUoKSB7CisgICAgIyBEZWxldGUgbTQgZmlsZXMgd2hpY2ggd2UgcHJvdmlkZSBwYXRjaGVkIHZlcnNpb25zIG9mIGJ1dCB3aWxsIGJlIGlnbm9yZWQKKyAgICAjIGlmIHRoZXNlIGV4aXN0CisJcm0gLWYgIiR7U30vY29tbW9uL200L3BrZy5tNCIKKwlybSAtZiAiJHtTfS9jb21tb24vbTQvZ3RrLWRvYy5tNCIKK30KK2RvX2NvbmZpZ3VyZVtwcmVmdW5jc10gKz0gImRlbGV0ZV9wa2dfbTRfZmlsZSIKKwogc2V0X29teF9jb3JlX25hbWUoKSB7CiAJc2VkIC1pIC1lICJzO15jb3JlLW5hbWU9Lio7Y29yZS1uYW1lPSR7R1NUUkVBTUVSXzFfMF9PTVhfQ09SRV9OQU1FfTsiICIke0R9JHtzeXNjb25mZGlyfS94ZGcvZ3N0b214LmNvbmYiCiB9Ci0KIGRvX2luc3RhbGxbcG9zdGZ1bmNzXSArPSAiIHNldF9vbXhfY29yZV9uYW1lICIKIAogRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wLyouc28iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXhfMS4xMC40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214XzEuMTAuNC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZlZWZhNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXhfMS4xMC40LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotaW5jbHVkZSBnc3RyZWFtZXIxLjAtb214LmluYwotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9vbXgvZ3N0b214Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMTttZDU9NWM4ZTFmY2EzMjcwNDQ4OGU3NmQyYmE5ZGRmYTkzNWYiCi0KLVNSQ19VUkkgPSAiaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1vbXgvZ3N0LW9teC0ke1BWfS50YXIueHoiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJjZWRiMjMwZjFjNDdkMGNmNGI1NzVkNzBkZmY2NmZmMiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI0NTA3MjkyNWNmMjYyZjBmZDUyOGZhYjc4ZjBkZTUyNzM0ZTQ2YTVhODhhYTgwMmZhZTUxYzY3YzA5YzgxYWEyIgotCi1TID0gIiR7V09SS0RJUn0vZ3N0LW9teC0ke1BWfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teF8xLjEyLjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXhfMS4xMi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZDQ1NzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXhfMS4xMi4yLmJiCkBAIC0wLDAgKzEsMTEgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLW9teC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vb214L2dzdG9teC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjE7bWQ1PTVjOGUxZmNhMzI3MDQ0ODhlNzZkMmJhOWRkZmE5MzVmIgorCitTUkNfVVJJID0gImh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3Qtb214L2dzdC1vbXgtJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGExNDA0YTIwYjcyZTRhYjZlODI2NTAwMjE4ZWMzMDgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWIyMjM5OGY0NWEwMjdlOTc3ZDJiNTMwOTYyNWVjOTFjZGNhZjBkYTg3NTFjYmM3ZjU5NmQ2MzlhNDViYTI5OCIKKworUyA9ICIke1dPUktESVJ9L2dzdC1vbXgtJHtQVn0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC5pbmMKaW5kZXggMGNjZmM4OS4uN2JlMTVkOSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLmluYwpAQCAtMjAsNyArMjAsNyBAQAogICAgICR7R1NUUkVBTUVSX09SQ30gXAogICAgICR7UEFDS0FHRUNPTkZJR19HTH0gXAogICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgJ2JsdWV6JywgJycsIGQpfSBcCi0gICAgJHtAYmIudXRpbHMuZmlsdGVyKCdESVNUUk9fRkVBVFVSRVMnLCAnZGlyZWN0ZmInLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmZpbHRlcignRElTVFJPX0ZFQVRVUkVTJywgJ2RpcmVjdGZiIHZ1bGthbicsIGQpfSBcCiAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3YXlsYW5kJywgJ3dheWxhbmQgZWdsJywgJycsIGQpfSBcCiAgICAgYnoyIGN1cmwgZGFzaCBkdGxzIGhscyBuZW9uIHJzdmcgc2JjIHNtb290aHN0cmVhbWluZyBzbmRmaWxlIHV2Y2gyNjQgd2VicCBcCiAiCkBAIC00MCw5ICs0MCw3IEBACiBQQUNLQUdFQ09ORklHW2ZsdWlkc3ludGhdICAgICAgPSAiLS1lbmFibGUtZmx1aWRzeW50aCwtLWRpc2FibGUtZmx1aWRzeW50aCxmbHVpZHN5bnRoIgogUEFDS0FHRUNPTkZJR1tnbGVzMl0gICAgICAgICAgID0gIi0tZW5hYmxlLWdsZXMyLC0tZGlzYWJsZS1nbGVzMix2aXJ0dWFsL2xpYmdsZXMyIgogUEFDS0FHRUNPTkZJR1tndGtdICAgICAgICAgICAgID0gIi0tZW5hYmxlLWd0azMsLS1kaXNhYmxlLWd0azMsZ3RrKzMiCi0jIGVuc3VyZSBPcGVuU1NMIGlzIHVzZWQgZm9yIEhMUyBBRVMgZGVzY3JpcHRpb24gaW5zdGVhZCBvZiBuZXR0bGUKLSMgKE9wZW5TU0wgaXMgYSBzaGFyZWQgZGVwZW5kZW5jeSB3aXRoIGR0bHMpCi1QQUNLQUdFQ09ORklHW2hsc10gICAgICAgICAgICAgPSAiLS1lbmFibGUtaGxzIC0td2l0aC1obHMtY3J5cHRvPW9wZW5zc2wsLS1kaXNhYmxlLWhscyxvcGVuc3NsIgorUEFDS0FHRUNPTkZJR1tobHNdICAgICAgICAgICAgID0gIi0tZW5hYmxlLWhscyAtLXdpdGgtaGxzLWNyeXB0bz1uZXR0bGUsLS1kaXNhYmxlLWhscyxuZXR0bGUiCiBQQUNLQUdFQ09ORklHW2ttc10gICAgICAgICAgICAgPSAiLS1lbmFibGUta21zLC0tZGlzYWJsZS1rbXMsbGliZHJtIgogUEFDS0FHRUNPTkZJR1tsaWJtbXNdICAgICAgICAgID0gIi0tZW5hYmxlLWxpYm1tcywtLWRpc2FibGUtbGlibW1zLGxpYm1tcyIKIFBBQ0tBR0VDT05GSUdbbGlic3NoMl0gICAgICAgICA9ICItLWVuYWJsZS1saWJzc2gyLC0tZGlzYWJsZS1saWJzc2gyLGxpYnNzaDIiCkBAIC02NiwxOSArNjQsMTUgQEAKIFBBQ0tBR0VDT05GSUdbdXZjaDI2NF0gICAgICAgICA9ICItLWVuYWJsZS11dmNoMjY0LC0tZGlzYWJsZS11dmNoMjY0LGxpYnVzYjEgbGliZ3VkZXYiCiBQQUNLQUdFQ09ORklHW3ZvYWFjZW5jXSAgICAgICAgPSAiLS1lbmFibGUtdm9hYWNlbmMsLS1kaXNhYmxlLXZvYWFjZW5jLHZvLWFhY2VuYyIKIFBBQ0tBR0VDT05GSUdbdm9hbXJ3YmVuY10gICAgICA9ICItLWVuYWJsZS12b2FtcndiZW5jLC0tZGlzYWJsZS12b2FtcndiZW5jLHZvLWFtcndiZW5jIgotUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSAgICAgICAgID0gIi0tZW5hYmxlLXdheWxhbmQsLS1kaXNhYmxlLXdheWxhbmQsd2F5bGFuZC1uYXRpdmUgd2F5bGFuZCB3YXlsYW5kLXByb3RvY29scyIKK1BBQ0tBR0VDT05GSUdbdnVsa2FuXSAgICAgICAgICA9ICItLWVuYWJsZS12dWxrYW4sLS1kaXNhYmxlLXZ1bGthbix2dWxrYW4iCitQQUNLQUdFQ09ORklHW3dheWxhbmRdICAgICAgICAgPSAiLS1lbmFibGUtd2F5bGFuZCwtLWRpc2FibGUtd2F5bGFuZCx3YXlsYW5kLW5hdGl2ZSB3YXlsYW5kIHdheWxhbmQtcHJvdG9jb2xzIGxpYmRybSIKIFBBQ0tBR0VDT05GSUdbd2VicF0gICAgICAgICAgICA9ICItLWVuYWJsZS13ZWJwLC0tZGlzYWJsZS13ZWJwLGxpYndlYnAiCiAKLSMgdGhlc2UgcGx1Z2lucyBoYXZlIG5vdCBiZWVuIHBvcnRlZCB0byAxLjAgKHlldCk6Ci0jICAgYXBleHNpbmsgbGluc3lzIG5hcyB0aW1pZGl0eSBzZGwgeHZpZCB3aW5pbmV0Ci0jICAgc25kaW8gY2R4YXBhcnNlIGRjY3AgZmFjZW92ZXJsYXkgaGR2cGFyc2UgdHRhIG12ZSBudXZkZW11eAotIyAgIHBhdGNoZGV0ZWN0IHNkaSB2aWRlb21lYXN1cmUKLQogIyB0aGVzZSBwbHVnaW5zIGhhdmUgbm8gY29ycmVzcG9uZGluZyBsaWJyYXJ5IGluIE9FLWNvcmUgb3IgbWV0YS1vcGVuZW1iZWRkZWQ6Ci0jICAgb3Blbm5pMiB3aW5rcyBkaXJlY3QzZCBkaXJlY3Rzb3VuZCB3aW5zY3JlZW5jYXAgYWNtIGFwcGxlX21lZGlhCisjICAgb3Blbm5pMiB3aW5rcyBkaXJlY3QzZCBkaXJlY3Rzb3VuZCB3aW5zY3JlZW5jYXAgYWNtIGFwcGxlX21lZGlhIGlxYQogIyAgIGFuZHJvaWRfbWVkaWEgYXZjIGJzMmIgY2hyb21hcHJpbnQgZGFhbGEgZHRzIGZka2FhYyBnbWUgZ3NtIGthdGUgbGFkc3BhIGxpYmRlMjY1Ci0jICAgbHYyIG1pbWljIG1wZWcyZW5jIG1wbGV4IG11c2VwYWNrIG52ZW5jIG9mYSBvcGVuaDI2NCBvcGVuc2xlcyBwdnIgc291bmR0b3VjaCBzcGFuZHNwCi0jICAgc3BjIHRlbGV0ZXh0ZGVjIHRpbnlhbHNhIHZkcGF1IHZ1bGthbiB3YXNhcGkgeDI2NSB6YmFyCisjICAgbHYyIG1wZWcyZW5jIG1wbGV4IG1zZGsgbXVzZXBhY2sgbnZlbmMgb2ZhIG9wZW5oMjY0IG9wZW5zbGVzIHNvdW5kdG91Y2ggc3BhbmRzcAorIyAgIHNwYyB0ZWxldGV4dGRlYyB0aW55YWxzYSB2ZHBhdSB3YXNhcGkgeDI2NSB6YmFyIHdlYnJ0Y2RzcAogCiAjIHF0NSBzdXBwb3J0IGlzIGRpc2FibGVkLCBiZWNhdXNlIGl0IGlzIG5vdCBwcmVzZW50IGluIE9FIGNvcmUsIGFuZCByZXF1aXJlcyBtb3JlIHdvcmsgdGhhbgogIyBqdXN0IGFkZGluZyBhIHBhY2thZ2Vjb25maWcgKGl0IHJlcXVpcmVzIGFjY2VzcyB0byBtb2MsIHVpYywgcmNjLCBhbmQgcW1ha2UgcGF0aHMpLgpAQCAtOTQsNyArODgsNiBAQAogICAgIC0tZW5hYmxlLXZjZCBcCiAgICAgLS1kaXNhYmxlLWFjbSBcCiAgICAgLS1kaXNhYmxlLWFuZHJvaWRfbWVkaWEgXAotICAgIC0tZGlzYWJsZS1hcGV4c2luayBcCiAgICAgLS1kaXNhYmxlLWFwcGxlX21lZGlhIFwKICAgICAtLWRpc2FibGUtYXZjIFwKICAgICAtLWRpc2FibGUtYnMyYiBcCkBAIC0xMDcsNDMgKzEwMCwzNCBAQAogICAgIC0tZGlzYWJsZS1mZGtfYWFjIFwKICAgICAtLWRpc2FibGUtZ21lIFwKICAgICAtLWRpc2FibGUtZ3NtIFwKKyAgICAtLWRpc2FibGUtaXFhIFwKICAgICAtLWRpc2FibGUta2F0ZSBcCiAgICAgLS1kaXNhYmxlLWxhZHNwYSBcCiAgICAgLS1kaXNhYmxlLWxpYmRlMjY1IFwKLSAgICAtLWRpc2FibGUtbGlidmlzdWFsIFwKLSAgICAtLWRpc2FibGUtbGluc3lzIFwKICAgICAtLWRpc2FibGUtbHYyIFwKLSAgICAtLWRpc2FibGUtbWltaWMgXAogICAgIC0tZGlzYWJsZS1tcGVnMmVuYyBcCiAgICAgLS1kaXNhYmxlLW1wbGV4IFwKKyAgICAtLWRpc2FibGUtbXNkayBcCiAgICAgLS1kaXNhYmxlLW11c2VwYWNrIFwKLSAgICAtLWRpc2FibGUtbmFzIFwKICAgICAtLWRpc2FibGUtbnZlbmMgXAogICAgIC0tZGlzYWJsZS1vZmEgXAogICAgIC0tZGlzYWJsZS1vcGVuZXhyIFwKICAgICAtLWRpc2FibGUtb3BlbmgyNjQgXAogICAgIC0tZGlzYWJsZS1vcGVubmkyIFwKICAgICAtLWRpc2FibGUtb3BlbnNsZXMgXAotICAgIC0tZGlzYWJsZS1wdnIgXAogICAgIC0tZGlzYWJsZS1xdCBcCi0gICAgLS1kaXNhYmxlLXNkbCBcCi0gICAgLS1kaXNhYmxlLXNkbHRlc3QgXAotICAgIC0tZGlzYWJsZS1zbmRpbyBcCiAgICAgLS1kaXNhYmxlLXNvdW5kdG91Y2ggXAogICAgIC0tZGlzYWJsZS1zcGFuZHNwIFwKICAgICAtLWRpc2FibGUtc3BjIFwKICAgICAtLWRpc2FibGUtdGVsZXRleHRkZWMgXAotICAgIC0tZGlzYWJsZS10aW1pZGl0eSBcCiAgICAgLS1kaXNhYmxlLXRpbnlhbHNhIFwKICAgICAtLWRpc2FibGUtdmRwYXUgXAotICAgIC0tZGlzYWJsZS12dWxrYW4gXAogICAgIC0tZGlzYWJsZS13YXNhcGkgXAorICAgIC0tZGlzYWJsZS13ZWJydGNkc3AgXAogICAgIC0tZGlzYWJsZS13aWxkbWlkaSBcCi0gICAgLS1kaXNhYmxlLXdpbmluZXQgXAogICAgIC0tZGlzYWJsZS13aW5rcyBcCiAgICAgLS1kaXNhYmxlLXdpbnNjcmVlbmNhcCBcCiAgICAgLS1kaXNhYmxlLXgyNjUgXAotICAgIC0tZGlzYWJsZS14dmlkIFwKICAgICAtLWRpc2FibGUtemJhciBcCiAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICItLWRpc2FibGUteWFkaWYiLCAiIiwgZCl9IFwKICIKQEAgLTE1NywzICsxNDEsNyBAQAogRklMRVNfJHtQTn0tZnJlZXZlcmIgKz0gIiR7ZGF0YWRpcn0vZ3N0cmVhbWVyLSR7TElCVn0vcHJlc2V0cy9Hc3RGcmVldmVyYi5wcnMiCiBGSUxFU18ke1BOfS1vcGVuY3YgKz0gIiR7ZGF0YWRpcn0vZ3N0LXBsdWdpbnMtYmFkLyR7TElCVn0vb3BlbmN2KiIKIEZJTEVTXyR7UE59LXZvYW1yd2JlbmMgKz0gIiR7ZGF0YWRpcn0vZ3N0cmVhbWVyLSR7TElCVn0vcHJlc2V0cy9Hc3RWb0FtcndiRW5jLnBycyIKKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgIGV4cG9ydCBHSVJfRVhUUkFfTElCU19QQVRIPSIke0J9L2dzdC1saWJzL2dzdC9hbGxvY2F0b3JzLy5saWJzIgorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMS1NYWtlZmlsZS5hbS1kb24tdC1oYXJkY29kZS1saWJ0b29sLW5hbWUtd2hlbi1ydW5uaW5nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMS1NYWtlZmlsZS5hbS1kb24tdC1oYXJkY29kZS1saWJ0b29sLW5hbWUtd2hlbi1ydW5uaW5nLnBhdGNoCmluZGV4IDQzZjFlZTAuLjhkOTlkYzYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDEtTWFrZWZpbGUuYW0tZG9uLXQtaGFyZGNvZGUtbGlidG9vbC1uYW1lLXdoZW4tcnVubmluZy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDAxLU1ha2VmaWxlLmFtLWRvbi10LWhhcmRjb2RlLWxpYnRvb2wtbmFtZS13aGVuLXJ1bm5pbmcucGF0Y2gKQEAgLTEsNCArMSw0IEBACi1Gcm9tIGNmZjZmYmY1NTVhMDcyNDA4YzIxZGExZTgxODIwOWM5ZDM4MTRkZDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIDc1OTJlNzkzYjM5MDYzNTVkNzZjYTlhNTlmOGZlYTI3NDllYTJhNGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KIERhdGU6IFR1ZSwgMjcgT2N0IDIwMTUgMTQ6MzY6NTggKzAyMDAKIFN1YmplY3Q6IFtQQVRDSF0gTWFrZWZpbGUuYW06IGRvbid0IGhhcmRjb2RlIGxpYnRvb2wgbmFtZSB3aGVuIHJ1bm5pbmcKQEAgLTcsMTcgKzcsMzQgQEAKIFVwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbcmV2aWV3IG9uIG9lLWNvcmUgbGlzdF0KIFNpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgogCi0tLS0KLSBnc3QtbGlicy9nc3QvZ2wvTWFrZWZpbGUuYW0gICAgICAgIHwgMiArLQotIGdzdC1saWJzL2dzdC9pbnNlcnRiaW4vTWFrZWZpbGUuYW0gfCAyICstCi0gZ3N0LWxpYnMvZ3N0L21wZWd0cy9NYWtlZmlsZS5hbSAgICB8IDIgKy0KLSAzIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyUlIG9yaWdpbmFsIHBhdGNoOiAwMDAxLU1ha2VmaWxlLmFtLWRvbi10LWhhcmRjb2RlLWxpYnRvb2wtbmFtZS13aGVuLXJ1bm5pbmcucGF0Y2gKIAotSW5kZXg6IGdzdC1wbHVnaW5zLWJhZC0xLjEwLjEvZ3N0LWxpYnMvZ3N0L2dsL01ha2VmaWxlLmFtCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ3N0LXBsdWdpbnMtYmFkLTEuMTAuMS5vcmlnL2dzdC1saWJzL2dzdC9nbC9NYWtlZmlsZS5hbQotKysrIGdzdC1wbHVnaW5zLWJhZC0xLjEwLjEvZ3N0LWxpYnMvZ3N0L2dsL01ha2VmaWxlLmFtCi1AQCAtMTcxLDcgKzE3MSw3IEBAIEdzdEdMLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUMKK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPgorLS0tCisgZ3N0LWxpYnMvZ3N0L2FsbG9jYXRvcnMvTWFrZWZpbGUuYW0gfCAyICstCisgZ3N0LWxpYnMvZ3N0L2dsL01ha2VmaWxlLmFtICAgICAgICAgfCAyICstCisgZ3N0LWxpYnMvZ3N0L2luc2VydGJpbi9NYWtlZmlsZS5hbSAgfCAyICstCisgZ3N0LWxpYnMvZ3N0L21wZWd0cy9NYWtlZmlsZS5hbSAgICAgfCAyICstCisgNCBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvYWxsb2NhdG9ycy9NYWtlZmlsZS5hbSBiL2dzdC1saWJzL2dzdC9hbGxvY2F0b3JzL01ha2VmaWxlLmFtCitpbmRleCBlNTBkMDc3Li42MjNmMDkyIDEwMDY0NAorLS0tIGEvZ3N0LWxpYnMvZ3N0L2FsbG9jYXRvcnMvTWFrZWZpbGUuYW0KKysrKyBiL2dzdC1saWJzL2dzdC9hbGxvY2F0b3JzL01ha2VmaWxlLmFtCitAQCAtMzcsNyArMzcsNyBAQCBHc3RCYWRBbGxvY2F0b3JzLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdGJhZGFsbG9jYQorIAkJLS1hZGQtaW5jbHVkZS1wYXRoPWBQS0dfQ09ORklHX1BBVEg9IiQoR1NUX1BLR19DT05GSUdfUEFUSCkiICQoUEtHX0NPTkZJRykgLS12YXJpYWJsZT1naXJkaXIgZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05AYCBcCisgCQktLWxpYnJhcnk9bGliZ3N0YmFkYWxsb2NhdG9ycy1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCisgCQktLWluY2x1ZGU9R3N0LUBHU1RfQVBJX1ZFUlNJT05AIFwKKy0JCS0tbGlidG9vbD0iJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wiIFwKKysJCS0tbGlidG9vbD0iJChMSUJUT09MKSIgXAorIAkJLS1wa2cgZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05AIFwKKyAJCS0tcGtnLWV4cG9ydCBnc3RyZWFtZXItYmFkYWxsb2NhdG9ycy1AR1NUX0FQSV9WRVJTSU9OQCBcCisgCQktLW91dHB1dCAkQCBcCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L2dsL01ha2VmaWxlLmFtIGIvZ3N0LWxpYnMvZ3N0L2dsL01ha2VmaWxlLmFtCitpbmRleCAyYWU0NzczLi5kZmE3YTdkIDEwMDY0NAorLS0tIGEvZ3N0LWxpYnMvZ3N0L2dsL01ha2VmaWxlLmFtCisrKysgYi9nc3QtbGlicy9nc3QvZ2wvTWFrZWZpbGUuYW0KK0BAIC0xNzgsNyArMTc4LDcgQEAgR3N0R0wtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0Z2wtQEdTVF9BUElfVkVSU0lPTkAKICAJCS0taW5jbHVkZT1Hc3QtQEdTVF9BUElfVkVSU0lPTkAgXAogIAkJLS1pbmNsdWRlPUdzdEJhc2UtQEdTVF9BUElfVkVSU0lPTkAgXAogIAkJLS1pbmNsdWRlPUdzdFZpZGVvLUBHU1RfQVBJX1ZFUlNJT05AIFwKQEAgLTI2LDExICs0MywxMSBAQAogIAkJLS1wa2cgZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05AIFwKICAJCS0tcGtnIGdzdHJlYW1lci1iYXNlLUBHU1RfQVBJX1ZFUlNJT05AIFwKICAJCS0tcGtnIGdzdHJlYW1lci12aWRlby1AR1NUX0FQSV9WRVJTSU9OQCBcCi1JbmRleDogZ3N0LXBsdWdpbnMtYmFkLTEuMTAuMS9nc3QtbGlicy9nc3QvaW5zZXJ0YmluL01ha2VmaWxlLmFtCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ3N0LXBsdWdpbnMtYmFkLTEuMTAuMS5vcmlnL2dzdC1saWJzL2dzdC9pbnNlcnRiaW4vTWFrZWZpbGUuYW0KLSsrKyBnc3QtcGx1Z2lucy1iYWQtMS4xMC4xL2dzdC1saWJzL2dzdC9pbnNlcnRiaW4vTWFrZWZpbGUuYW0KLUBAIC00NSw3ICs0NSw3IEBAIEdzdEluc2VydEJpbi1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU4KK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvaW5zZXJ0YmluL01ha2VmaWxlLmFtIGIvZ3N0LWxpYnMvZ3N0L2luc2VydGJpbi9NYWtlZmlsZS5hbQoraW5kZXggMWY4ZWEzMC4uNGI5OGVmNiAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC9pbnNlcnRiaW4vTWFrZWZpbGUuYW0KKysrKyBiL2dzdC1saWJzL2dzdC9pbnNlcnRiaW4vTWFrZWZpbGUuYW0KK0BAIC00NSw3ICs0NSw3IEBAIEdzdEluc2VydEJpbi1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RpbnNlcnRiaW4tQEdTCiAgCQktLWxpYnJhcnk9bGliZ3N0aW5zZXJ0YmluLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKICAJCS0taW5jbHVkZT1Hc3QtQEdTVF9BUElfVkVSU0lPTkAgXAogIAkJLS1pbmNsdWRlPUdzdEJhc2UtQEdTVF9BUElfVkVSU0lPTkAgXApAQCAtMzksMTEgKzU2LDExIEBACiAgCQktLXBrZyBnc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAgXAogIAkJLS1wa2cgZ3N0cmVhbWVyLWJhc2UtQEdTVF9BUElfVkVSU0lPTkAgXAogIAkJLS1wa2ctZXhwb3J0IGdzdHJlYW1lci1pbnNlcnRiaW4tQEdTVF9BUElfVkVSU0lPTkAgXAotSW5kZXg6IGdzdC1wbHVnaW5zLWJhZC0xLjEwLjEvZ3N0LWxpYnMvZ3N0L21wZWd0cy9NYWtlZmlsZS5hbQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdzdC1wbHVnaW5zLWJhZC0xLjEwLjEub3JpZy9nc3QtbGlicy9nc3QvbXBlZ3RzL01ha2VmaWxlLmFtCi0rKysgZ3N0LXBsdWdpbnMtYmFkLTEuMTAuMS9nc3QtbGlicy9nc3QvbXBlZ3RzL01ha2VmaWxlLmFtCi1AQCAtNzksNyArNzksNyBAQCBHc3RNcGVndHMtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L21wZWd0cy9NYWtlZmlsZS5hbSBiL2dzdC1saWJzL2dzdC9tcGVndHMvTWFrZWZpbGUuYW0KK2luZGV4IGFlZWEzMmUuLjkyOWQ5Y2MgMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvbXBlZ3RzL01ha2VmaWxlLmFtCisrKysgYi9nc3QtbGlicy9nc3QvbXBlZ3RzL01ha2VmaWxlLmFtCitAQCAtNzksNyArNzksNyBAQCBHc3RNcGVndHMtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0bXBlZ3RzLUBHU1RfQVBJXwogIAkJLS1hZGQtaW5jbHVkZS1wYXRoPWBQS0dfQ09ORklHX1BBVEg9IiQoR1NUX1BLR19DT05GSUdfUEFUSCkiICQoUEtHX0NPTkZJRykgLS12YXJpYWJsZT1naXJkaXIgZ3N0cmVhbWVyLXZpZGVvLUBHU1RfQVBJX1ZFUlNJT05AYCBcCiAgCQktLWxpYnJhcnk9bGliZ3N0bXBlZ3RzLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKICAJCS0taW5jbHVkZT1Hc3QtQEdTVF9BUElfVkVSU0lPTkAgXApAQCAtNTIsMyArNjksNiBAQAogIAkJLS1wa2cgZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05AIFwKICAJCS0tcGtnIGdzdHJlYW1lci12aWRlby1AR1NUX0FQSV9WRVJTSU9OQCBcCiAgCQktLXBrZy1leHBvcnQgZ3N0cmVhbWVyLW1wZWd0cy1AR1NUX0FQSV9WRVJTSU9OQCBcCistLSAKKzIuNC4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDEtUHJlcGVuZC1QS0dfQ09ORklHX1NZU1JPT1RfRElSLXRvLXBrZy1jb25maWctb3V0cHV0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMS1QcmVwZW5kLVBLR19DT05GSUdfU1lTUk9PVF9ESVItdG8tcGtnLWNvbmZpZy1vdXRwdXQucGF0Y2gKaW5kZXggODZhNDQ5NS4uNDhkOTNhYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMS1QcmVwZW5kLVBLR19DT05GSUdfU1lTUk9PVF9ESVItdG8tcGtnLWNvbmZpZy1vdXRwdXQucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMS1QcmVwZW5kLVBLR19DT05GSUdfU1lTUk9PVF9ESVItdG8tcGtnLWNvbmZpZy1vdXRwdXQucGF0Y2gKQEAgLTEsMzQgKzEsMzggQEAKLUZyb20gYzI3MTUwM2Q3ZTIzMzQyOGFjMDMyM2M1MWQ2NTE3MTEzZTI2YmVmNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gN2M4ZjY4YzU0MjgzODBiOTMwNTc5ZGM5ZWYyN2M4NTMyNjQ0NDhmZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBUaHUsIDEgRGVjIDIwMTYgMDA6Mjc6MTMgLTA4MDAKK0RhdGU6IE1vbiwgMTUgTWF5IDIwMTcgMTU6MDY6MTEgKzAzMDAKIFN1YmplY3Q6IFtQQVRDSF0gUHJlcGVuZCBQS0dfQ09ORklHX1NZU1JPT1RfRElSIHRvIHBrZy1jb25maWcgb3V0cHV0CiAKIEluIGNyb3NzIGVudmlyb25tZW50IHdlIGhhdmUgdG8gcHJlcGVuZCB0aGUgc3lzcm9vdCB0byB0aGUgcGF0aCBmb3VuZCBieQogcGtnY29uZmlnIHNpbmNlIHRoZSBwYXRoIHJldHVybmVkIGZyb20gcGtnY29uZmlnIGRvZXMgbm90IGhhdmUgc3lzcm9vdCBwcmVmaXhlZAogaXQgZW5kcyB1cCB1c2luZyB0aGUgZmlsZXMgZnJvbSBob3N0IHN5c3RlbS4gSWYgYnVpbGQgaG9zdCBoYXMgd2F5bGFuZCBpbnN0YWxsZWQKLXRoZSBidWlsZCB3aWxsIHN1Y2NlZWQgYnV0IGlmIHlvdSBkb250IGhhdmUgd2F5bGFuZC1wcm90b2NvbHMgaW5zdGFsbGVkIG9uIGJ1aWxkIGhvc3QgdGhlbgotaXQgd29udCBmaW5kIHRoZSBmaWxlcyBvbiBidWlsZCBob3N0Cit0aGUgYnVpbGQgd2lsbCBzdWNjZWVkIGJ1dCBpZiB5b3UgZG9udCBoYXZlIHdheWxhbmQtcHJvdG9jb2xzIGluc3RhbGxlZCBvbiBidWlsZAoraG9zdCB0aGVuIGl0IHdvbnQgZmluZCB0aGUgZmlsZXMgb24gYnVpbGQgaG9zdAogCi1UaGlzIHNob3VsZCB3b3JrIG9rIHdpdGggbm9uIHN5c3Jvb3RlZCBidWlsZHMgdG9vIHNpbmNlIGluIHRob3NlIGNhc2VzIFBLR19DT05GSUdfU1lTUk9PVF9ESVIKLXdpbGwgYmUgZW1wdHkKK1RoaXMgc2hvdWxkIHdvcmsgb2sgd2l0aCBub24gc3lzcm9vdGVkIGJ1aWxkcyB0b28gc2luY2UKK2luIHRob3NlIGNhc2VzIFBLR19DT05GSUdfU1lTUk9PVF9ESVIgd2lsbCBiZSBlbXB0eQogCiBVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIAogU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPgogLS0tCiAgY29uZmlndXJlLmFjIHwgMiArLQogIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQogCi1JbmRleDogZ3N0LXBsdWdpbnMtYmFkLTEuMTAuMS9jb25maWd1cmUuYWMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnc3QtcGx1Z2lucy1iYWQtMS4xMC4xLm9yaWcvY29uZmlndXJlLmFjCi0rKysgZ3N0LXBsdWdpbnMtYmFkLTEuMTAuMS9jb25maWd1cmUuYWMKLUBAIC0yMjMzLDcgKzIyMzMsNyBAQCBBR19HU1RfQ0hFQ0tfRkVBVFVSRShXQVlMQU5ELCBbd2F5bGFuZCBzCi0gICAgIFBLR19DSEVDS19NT0RVTEVTKFdBWUxBTkRfUFJPVE9DT0xTLCB3YXlsYW5kLXByb3RvY29scyA+PSAxLjQsIFsKLSAgICAgICBpZiB0ZXN0ICJ4JHdheWxhbmRfc2Nhbm5lciIgIT0gIngiOyB0aGVuCi0gICAgICAgICBIQVZFX1dBWUxBTkQ9InllcyIKLS0gICAgICAgIEFDX1NVQlNUKFdBWUxBTkRfUFJPVE9DT0xTX0RBVEFESVIsIGAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXBrZ2RhdGFkaXIgd2F5bGFuZC1wcm90b2NvbHNgKQotKyAgICAgICAgQUNfU1VCU1QoV0FZTEFORF9QUk9UT0NPTFNfREFUQURJUiwgJHtXQVlMQU5EX1BST1RPQ09MU19TWVNST09UX0RJUn1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1wa2dkYXRhZGlyIHdheWxhbmQtcHJvdG9jb2xzYCkKLSAgICAgICBlbHNlCi0gICAgICAgICBBQ19NU0dfUkVTVUxUKFt3YXlsYW5kLXNjYW5uZXIgaXMgcmVxdWlyZWQgdG8gYnVpbGQgdGhlIHdheWxhbmQgcGx1Z2luXSkKLSAgICAgICAgIEhBVkVfV0FZTEFORD0ibm8iCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBlMzA3YmU2Li44M2NkZWIwIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yMjcyLDcgKzIyNzIsNyBAQCBBR19HU1RfQ0hFQ0tfRkVBVFVSRShXQVlMQU5ELCBbd2F5bGFuZCBzaW5rXSwgd2F5bGFuZCAsIFsKKyAgIFBLR19DSEVDS19NT0RVTEVTKFdBWUxBTkQsIHdheWxhbmQtY2xpZW50ID49IDEuNC4wIGxpYmRybSA+PSAyLjQuNTUgd2F5bGFuZC1wcm90b2NvbHMgPj0gMS40LCBbCisgICAgIGlmIHRlc3QgIngkd2F5bGFuZF9zY2FubmVyIiAhPSAieCI7IHRoZW4KKyAgICAgICBIQVZFX1dBWUxBTkQ9InllcyIKKy0gICAgICBBQ19TVUJTVChXQVlMQU5EX1BST1RPQ09MU19EQVRBRElSLCBgJFBLR19DT05GSUcgLS12YXJpYWJsZT1wa2dkYXRhZGlyIHdheWxhbmQtcHJvdG9jb2xzYCkKKysgICAgICBBQ19TVUJTVChXQVlMQU5EX1BST1RPQ09MU19EQVRBRElSLCAke1dBWUxBTkRfUFJPVE9DT0xTX1NZU1JPT1RfRElSfWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXBrZ2RhdGFkaXIgd2F5bGFuZC1wcm90b2NvbHNgKQorICAgICBlbHNlCisgICAgICAgQUNfTVNHX1JFU1VMVChbd2F5bGFuZC1zY2FubmVyIGlzIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSB3YXlsYW5kIHBsdWdpbl0pCisgICAgICAgSEFWRV9XQVlMQU5EPSJubyIKKy0tIAorMi40LjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMS1nc3RyZWFtZXItZ2wucGMuaW4tZG9uLXQtYXBwZW5kLUdMX0NGTEFHUy10by1DRkxBR1MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDAxLWdzdHJlYW1lci1nbC5wYy5pbi1kb24tdC1hcHBlbmQtR0xfQ0ZMQUdTLXRvLUNGTEFHUy5wYXRjaAppbmRleCA5ZmM5MWQ4Li4yMjM1YTU3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDAxLWdzdHJlYW1lci1nbC5wYy5pbi1kb24tdC1hcHBlbmQtR0xfQ0ZMQUdTLXRvLUNGTEFHUy5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDAxLWdzdHJlYW1lci1nbC5wYy5pbi1kb24tdC1hcHBlbmQtR0xfQ0ZMQUdTLXRvLUNGTEFHUy5wYXRjaApAQCAtMSwyNCArMSwyOSBAQAotRnJvbSBhOTNjYTYzZDAxZTdjZDFlNDBiNWJlNTc2OTkyZjc3ZmFjMzY0YmQ1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSA1NjIyY2EzYjYxNjAzZGMzMTZhMGYxZmJlZGUzZjlhYTM1M2E1ZTQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+Ci1EYXRlOiBNb24sIDIxIE1hciAyMDE2IDE4OjIxOjE3ICswMjAwCitEYXRlOiBGcmksIDEyIE1heSAyMDE3IDE2OjQ3OjEyICswMzAwCiBTdWJqZWN0OiBbUEFUQ0hdIGdzdHJlYW1lci1nbC5wYy5pbjogZG9uJ3QgYXBwZW5kIEdMX0NGTEFHUyB0byBDRkxBR1MKIAogRGVwZW5kZW5jaWVzJyBpbmNsdWRlIGRpcmVjdG9yaWVzIHNob3VsZCBub3QgYmUgYWRkZWQgaW4gdGhpcyB3YXk7CiBpdCBjYXVzZXMgcHJvYmxlbXMgd2hlbiBjcm9zcy1jb21waWxpbmcgaW4gc3lzcm9vdCBlbnZpcm9ubWVudHMuCiAKIFVwc3RyZWFtLVN0YXR1czogUGVuZGluZworCiBTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AaW50ZWwuY29tPgogLS0tCiAgcGtnY29uZmlnL2dzdHJlYW1lci1nbC5wYy5pbiB8IDIgKy0KICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKIAotSW5kZXg6IGdzdC1wbHVnaW5zLWJhZC0xLjEwLjEvcGtnY29uZmlnL2dzdHJlYW1lci1nbC5wYy5pbgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdzdC1wbHVnaW5zLWJhZC0xLjEwLjEub3JpZy9wa2djb25maWcvZ3N0cmVhbWVyLWdsLnBjLmluCi0rKysgZ3N0LXBsdWdpbnMtYmFkLTEuMTAuMS9wa2djb25maWcvZ3N0cmVhbWVyLWdsLnBjLmluCi1AQCAtMTAsNCArMTAsNCBAQCBWZXJzaW9uOiBAVkVSU0lPTkAKK2RpZmYgLS1naXQgYS9wa2djb25maWcvZ3N0cmVhbWVyLWdsLnBjLmluIGIvcGtnY29uZmlnL2dzdHJlYW1lci1nbC5wYy5pbgoraW5kZXggOGU3YTMwMy4uZDE2N2JlMSAxMDA2NDQKKy0tLSBhL3BrZ2NvbmZpZy9nc3RyZWFtZXItZ2wucGMuaW4KKysrKyBiL3BrZ2NvbmZpZy9nc3RyZWFtZXItZ2wucGMuaW4KK0BAIC0xMyw0ICsxMyw0IEBAIFZlcnNpb246IEBWRVJTSU9OQAogIFJlcXVpcmVzOiBnc3RyZWFtZXItYmFzZS1AR1NUX0FQSV9WRVJTSU9OQCBnc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAKICAKLSBMaWJzOiAtTCR7bGliZGlyfSAtbGdzdGdsLUBHU1RfQVBJX1ZFUlNJT05AIEBHTF9MSUJTQAorIExpYnM6IC1MJHtsaWJkaXJ9IC1sZ3N0Z2wtQEdTVF9BUElfVkVSU0lPTkAKIC1DZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfSAtSSR7bGliZGlyfS9nc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAvaW5jbHVkZSBAR0xfQ0ZMQUdTQAogK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9IC1JJHtsaWJkaXJ9L2dzdHJlYW1lci1AR1NUX0FQSV9WRVJTSU9OQC9pbmNsdWRlCistLSAKKzIuNC4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDEtbXNzZGVtdXgtaW1wcm92ZWQtbGl2ZS1wbGF5YmFjay1zdXBwb3J0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMS1tc3NkZW11eC1pbXByb3ZlZC1saXZlLXBsYXliYWNrLXN1cHBvcnQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4MzJjMTguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMS1tc3NkZW11eC1pbXByb3ZlZC1saXZlLXBsYXliYWNrLXN1cHBvcnQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw5MjkgKzAsMCBAQAotRnJvbSA3MzcyMWFkNGU5ZTJkMzJlMWM4YjZhM2I0YWFhOTg0MDE1MzBlNThhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogUGhpbGlwcGUgTm9ybWFuZCA8cGhpbG5AaWdhbGlhLmNvbT4KLURhdGU6IFR1ZSwgMjkgTm92IDIwMTYgMTQ6NDM6NDEgKzAxMDAKLVN1YmplY3Q6IFtQQVRDSF0gbXNzZGVtdXg6IGltcHJvdmVkIGxpdmUgcGxheWJhY2sgc3VwcG9ydAotCi1XaGVuIGEgTVNTIHNlcnZlciBob3N0cyBhIGxpdmUgc3RyZWFtIHRoZSBmcmFnbWVudHMgbGlzdGVkIGluIHRoZQotbWFuaWZlc3QgdXN1YWxseSBkb24ndCBoYXZlIGFjY3VyYXRlIHRpbWVzdGFtcHMgYW5kIGR1cmF0aW9uLCBleGNlcHQKLWZvciB0aGUgZmlyc3QgZnJhZ21lbnQsIHdoaWNoIGFkZGl0aW9uYWxseSBzdG9yZXMgdGltaW5nIGluZm9ybWF0aW9uCi1mb3IgdGhlIGZldyB1cGNvbWluZyBmcmFnbWVudHMuIEluIHRoaXMgc2NlbmFyaW8gaXQgaXMgdXNlbGVzcyB0bwotcGVyaW9kaWNhbGx5IGZldGNoIGFuZCB1cGRhdGUgdGhlIG1hbmlmZXN0IGFuZCB0aGUgZnJhZ21lbnRzIGxpc3QgY2FuCi1iZSBpbmNyZW1lbnRhbGx5IGJ1aWx0IGJ5IHBhcnNpbmcgdGhlIGZpcnN0L2N1cnJlbnQgZnJhZ21lbnQuCi0KLWh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTUwMzYKLS0tLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotIGV4dC9zbW9vdGhzdHJlYW1pbmcvTWFrZWZpbGUuYW0gICAgICAgICAgICAgICB8ICAgMiArCi0gZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NkZW11eC5jICAgICAgICAgICAgIHwgIDYwICsrKysrKwotIGV4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzZnJhZ21lbnRwYXJzZXIuYyAgICB8IDI2NiArKysrKysrKysrKysrKysrKysrKysrKysrKwotIGV4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzZnJhZ21lbnRwYXJzZXIuaCAgICB8ICA4NCArKysrKysrKwotIGV4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzbWFuaWZlc3QuYyAgICAgICAgICB8IDE1OCArKysrKysrKysrKysrKy0KLSBleHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmggICAgICAgICAgfCAgIDcgKwotIGdzdC1saWJzL2dzdC9hZGFwdGl2ZWRlbXV4L2dzdGFkYXB0aXZlZGVtdXguYyB8ICAyNyArKy0KLSBnc3QtbGlicy9nc3QvYWRhcHRpdmVkZW11eC9nc3RhZGFwdGl2ZWRlbXV4LmggfCAgMTQgKysKLSA4IGZpbGVzIGNoYW5nZWQsIDYwNiBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKLSBjcmVhdGUgbW9kZSAxMDA2NDQgZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NmcmFnbWVudHBhcnNlci5jCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGV4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzZnJhZ21lbnRwYXJzZXIuaAotCi1kaWZmIC0tZ2l0IGEvZXh0L3Ntb290aHN0cmVhbWluZy9NYWtlZmlsZS5hbSBiL2V4dC9zbW9vdGhzdHJlYW1pbmcvTWFrZWZpbGUuYW0KLWluZGV4IDRmYWY5ZGY5Zi4uYTVlMWFkNmFlIDEwMDY0NAotLS0tIGEvZXh0L3Ntb290aHN0cmVhbWluZy9NYWtlZmlsZS5hbQotKysrIGIvZXh0L3Ntb290aHN0cmVhbWluZy9NYWtlZmlsZS5hbQotQEAgLTEzLDggKzEzLDEwIEBAIGxpYmdzdHNtb290aHN0cmVhbWluZ19sYV9MSUJBREQgPSBcCi0gbGliZ3N0c21vb3Roc3RyZWFtaW5nX2xhX0xERkxBR1MgPSAke0dTVF9QTFVHSU5fTERGTEFHU30KLSBsaWJnc3RzbW9vdGhzdHJlYW1pbmdfbGFfU09VUkNFUyA9IGdzdHNtb290aHN0cmVhbWluZy1wbHVnaW4uYyBcCi0gCWdzdG1zc2RlbXV4LmMgXAotKwlnc3Rtc3NmcmFnbWVudHBhcnNlci5jIFwKLSAJZ3N0bXNzbWFuaWZlc3QuYwotIGxpYmdzdHNtb290aHN0cmVhbWluZ19sYV9MSUJUT09MRkxBR1MgPSAtLXRhZz1kaXNhYmxlLXN0YXRpYwotIAotIG5vaW5zdF9IRUFERVJTID0gZ3N0bXNzZGVtdXguaCBcCi0rCWdzdG1zc2ZyYWdtZW50cGFyc2VyLmggXAotIAlnc3Rtc3NtYW5pZmVzdC5oCi1kaWZmIC0tZ2l0IGEvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NkZW11eC5jIGIvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NkZW11eC5jCi1pbmRleCAxMmZiNDA0OTcuLjEyMGQ5YzIyYiAxMDA2NDQKLS0tLSBhL2V4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzZGVtdXguYwotKysrIGIvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NkZW11eC5jCi1AQCAtMTM1LDExICsxMzUsMTggQEAgZ3N0X21zc19kZW11eF9zdHJlYW1fdXBkYXRlX2ZyYWdtZW50X2luZm8gKEdzdEFkYXB0aXZlRGVtdXhTdHJlYW0gKiBzdHJlYW0pOwotIHN0YXRpYyBnYm9vbGVhbiBnc3RfbXNzX2RlbXV4X3NlZWsgKEdzdEFkYXB0aXZlRGVtdXggKiBkZW11eCwgR3N0RXZlbnQgKiBzZWVrKTsKLSBzdGF0aWMgZ2ludDY0Ci0gZ3N0X21zc19kZW11eF9nZXRfbWFuaWZlc3RfdXBkYXRlX2ludGVydmFsIChHc3RBZGFwdGl2ZURlbXV4ICogZGVtdXgpOwotK3N0YXRpYyBnaW50NjQKLStnc3RfbXNzX2RlbXV4X3N0cmVhbV9nZXRfZnJhZ21lbnRfd2FpdGluZ190aW1lIChHc3RBZGFwdGl2ZURlbXV4U3RyZWFtICoKLSsgICAgc3RyZWFtKTsKLSBzdGF0aWMgR3N0Rmxvd1JldHVybgotIGdzdF9tc3NfZGVtdXhfdXBkYXRlX21hbmlmZXN0X2RhdGEgKEdzdEFkYXB0aXZlRGVtdXggKiBkZW11eCwKLSAgICAgR3N0QnVmZmVyICogYnVmZmVyKTsKLSBzdGF0aWMgZ2Jvb2xlYW4gZ3N0X21zc19kZW11eF9nZXRfbGl2ZV9zZWVrX3JhbmdlIChHc3RBZGFwdGl2ZURlbXV4ICogZGVtdXgsCi0gICAgIGdpbnQ2NCAqIHN0YXJ0LCBnaW50NjQgKiBzdG9wKTsKLStzdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfbXNzX2RlbXV4X2RhdGFfcmVjZWl2ZWQgKEdzdEFkYXB0aXZlRGVtdXggKiBkZW11eCwKLSsgICAgR3N0QWRhcHRpdmVEZW11eFN0cmVhbSAqIHN0cmVhbSwgR3N0QnVmZmVyICogYnVmZmVyKTsKLStzdGF0aWMgZ2Jvb2xlYW4KLStnc3RfbXNzX2RlbXV4X3JlcXVpcmVzX3BlcmlvZGljYWxfcGxheWxpc3RfdXBkYXRlIChHc3RBZGFwdGl2ZURlbXV4ICogZGVtdXgpOwotIAotIHN0YXRpYyB2b2lkCi0gZ3N0X21zc19kZW11eF9jbGFzc19pbml0IChHc3RNc3NEZW11eENsYXNzICoga2xhc3MpCi1AQCAtMTkyLDEwICsxOTksMTUgQEAgZ3N0X21zc19kZW11eF9jbGFzc19pbml0IChHc3RNc3NEZW11eENsYXNzICoga2xhc3MpCi0gICAgICAgZ3N0X21zc19kZW11eF9zdHJlYW1fc2VsZWN0X2JpdHJhdGU7Ci0gICBnc3RhZGFwdGl2ZWRlbXV4X2NsYXNzLT5zdHJlYW1fdXBkYXRlX2ZyYWdtZW50X2luZm8gPQotICAgICAgIGdzdF9tc3NfZGVtdXhfc3RyZWFtX3VwZGF0ZV9mcmFnbWVudF9pbmZvOwotKyAgZ3N0YWRhcHRpdmVkZW11eF9jbGFzcy0+c3RyZWFtX2dldF9mcmFnbWVudF93YWl0aW5nX3RpbWUgPQotKyAgICAgIGdzdF9tc3NfZGVtdXhfc3RyZWFtX2dldF9mcmFnbWVudF93YWl0aW5nX3RpbWU7Ci0gICBnc3RhZGFwdGl2ZWRlbXV4X2NsYXNzLT51cGRhdGVfbWFuaWZlc3RfZGF0YSA9Ci0gICAgICAgZ3N0X21zc19kZW11eF91cGRhdGVfbWFuaWZlc3RfZGF0YTsKLSAgIGdzdGFkYXB0aXZlZGVtdXhfY2xhc3MtPmdldF9saXZlX3NlZWtfcmFuZ2UgPQotICAgICAgIGdzdF9tc3NfZGVtdXhfZ2V0X2xpdmVfc2Vla19yYW5nZTsKLSsgIGdzdGFkYXB0aXZlZGVtdXhfY2xhc3MtPmRhdGFfcmVjZWl2ZWQgPSBnc3RfbXNzX2RlbXV4X2RhdGFfcmVjZWl2ZWQ7Ci0rICBnc3RhZGFwdGl2ZWRlbXV4X2NsYXNzLT5yZXF1aXJlc19wZXJpb2RpY2FsX3BsYXlsaXN0X3VwZGF0ZSA9Ci0rICAgICAgZ3N0X21zc19kZW11eF9yZXF1aXJlc19wZXJpb2RpY2FsX3BsYXlsaXN0X3VwZGF0ZTsKLSAKLSAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChtc3NkZW11eF9kZWJ1ZywgIm1zc2RlbXV4IiwgMCwgIm1zc2RlbXV4IHBsdWdpbiIpOwotIH0KLUBAIC02NTAsNiArNjYyLDEzIEBAIGdzdF9tc3NfZGVtdXhfZ2V0X21hbmlmZXN0X3VwZGF0ZV9pbnRlcnZhbCAoR3N0QWRhcHRpdmVEZW11eCAqIGRlbXV4KQotICAgcmV0dXJuIGludGVydmFsOwotIH0KLSAKLStzdGF0aWMgZ2ludDY0Ci0rZ3N0X21zc19kZW11eF9zdHJlYW1fZ2V0X2ZyYWdtZW50X3dhaXRpbmdfdGltZSAoR3N0QWRhcHRpdmVEZW11eFN0cmVhbSAqIHN0cmVhbSkKLSt7Ci0rICAvKiBXYWl0IGEgc2Vjb25kIGZvciBsaXZlIHN0cmVhbXMgc28gd2UgZG9uJ3QgdHJ5IHByZW1hdHVyZSBmcmFnbWVudHMgZG93bmxvYWRpbmcgKi8KLSsgIHJldHVybiBHU1RfU0VDT05EOwotK30KLSsKLSBzdGF0aWMgR3N0Rmxvd1JldHVybgotIGdzdF9tc3NfZGVtdXhfdXBkYXRlX21hbmlmZXN0X2RhdGEgKEdzdEFkYXB0aXZlRGVtdXggKiBkZW11eCwKLSAgICAgR3N0QnVmZmVyICogYnVmZmVyKQotQEAgLTY3MCwzICs2ODksNDQgQEAgZ3N0X21zc19kZW11eF9nZXRfbGl2ZV9zZWVrX3JhbmdlIChHc3RBZGFwdGl2ZURlbXV4ICogZGVtdXgsIGdpbnQ2NCAqIHN0YXJ0LAotIAotICAgcmV0dXJuIGdzdF9tc3NfbWFuaWZlc3RfZ2V0X2xpdmVfc2Vla19yYW5nZSAobXNzZGVtdXgtPm1hbmlmZXN0LCBzdGFydCwgc3RvcCk7Ci0gfQotKwotK3N0YXRpYyBHc3RGbG93UmV0dXJuCi0rZ3N0X21zc19kZW11eF9kYXRhX3JlY2VpdmVkIChHc3RBZGFwdGl2ZURlbXV4ICogZGVtdXgsCi0rICAgIEdzdEFkYXB0aXZlRGVtdXhTdHJlYW0gKiBzdHJlYW0sIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLSt7Ci0rICBHc3RNc3NEZW11eCAqbXNzZGVtdXggPSBHU1RfTVNTX0RFTVVYX0NBU1QgKGRlbXV4KTsKLSsgIEdzdE1zc0RlbXV4U3RyZWFtICptc3NzdHJlYW0gPSAoR3N0TXNzRGVtdXhTdHJlYW0gKikgc3RyZWFtOwotKyAgZ3NpemUgYXZhaWxhYmxlOwotKwotKyAgaWYgKCFnc3RfbXNzX21hbmlmZXN0X2lzX2xpdmUgKG1zc2RlbXV4LT5tYW5pZmVzdCkpIHsKLSsgICAgcmV0dXJuIEdTVF9BREFQVElWRV9ERU1VWF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGF0YV9yZWNlaXZlZCAoZGVtdXgsCi0rICAgICAgICBzdHJlYW0sIGJ1ZmZlcik7Ci0rICB9Ci0rCi0rICBpZiAoZ3N0X21zc19zdHJlYW1fZnJhZ21lbnRfcGFyc2luZ19uZWVkZWQgKG1zc3N0cmVhbS0+bWFuaWZlc3Rfc3RyZWFtKSkgewotKyAgICBnc3RfbXNzX21hbmlmZXN0X2xpdmVfYWRhcHRlcl9wdXNoIChtc3NzdHJlYW0tPm1hbmlmZXN0X3N0cmVhbSwgYnVmZmVyKTsKLSsgICAgYXZhaWxhYmxlID0KLSsgICAgICAgIGdzdF9tc3NfbWFuaWZlc3RfbGl2ZV9hZGFwdGVyX2F2YWlsYWJsZSAobXNzc3RyZWFtLT5tYW5pZmVzdF9zdHJlYW0pOwotKyAgICAvLyBGSVhNRTogdHJ5IHRvIHJlZHVjZSB0aGlzIG1pbmltYWwgc2l6ZS4KLSsgICAgaWYgKGF2YWlsYWJsZSA8IDQwOTYpIHsKLSsgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgR1NUX0xPR19PQkpFQ1QgKHN0cmVhbS0+cGFkLCAiZW5vdWdoIGRhdGEsIHBhcnNpbmcgZnJhZ21lbnQuIik7Ci0rICAgICAgYnVmZmVyID0KLSsgICAgICAgICAgZ3N0X21zc19tYW5pZmVzdF9saXZlX2FkYXB0ZXJfdGFrZV9idWZmZXIgKG1zc3N0cmVhbS0+bWFuaWZlc3Rfc3RyZWFtLAotKyAgICAgICAgICBhdmFpbGFibGUpOwotKyAgICAgIGdzdF9tc3Nfc3RyZWFtX3BhcnNlX2ZyYWdtZW50IChtc3NzdHJlYW0tPm1hbmlmZXN0X3N0cmVhbSwgYnVmZmVyKTsKLSsgICAgfQotKyAgfQotKwotKyAgcmV0dXJuIEdTVF9BREFQVElWRV9ERU1VWF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGF0YV9yZWNlaXZlZCAoZGVtdXgsIHN0cmVhbSwKLSsgICAgICBidWZmZXIpOwotK30KLSsKLStzdGF0aWMgZ2Jvb2xlYW4KLStnc3RfbXNzX2RlbXV4X3JlcXVpcmVzX3BlcmlvZGljYWxfcGxheWxpc3RfdXBkYXRlIChHc3RBZGFwdGl2ZURlbXV4ICogZGVtdXgpCi0rewotKyAgR3N0TXNzRGVtdXggKm1zc2RlbXV4ID0gR1NUX01TU19ERU1VWF9DQVNUIChkZW11eCk7Ci0rCi0rICByZXR1cm4gKCFnc3RfbXNzX21hbmlmZXN0X2lzX2xpdmUgKG1zc2RlbXV4LT5tYW5pZmVzdCkpOwotK30KLWRpZmYgLS1naXQgYS9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc2ZyYWdtZW50cGFyc2VyLmMgYi9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc2ZyYWdtZW50cGFyc2VyLmMKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwMDAuLmI1NTRkNGYzMQotLS0tIC9kZXYvbnVsbAotKysrIGIvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NmcmFnbWVudHBhcnNlci5jCi1AQCAtMCwwICsxLDI2NiBAQAotKy8qCi0rICogTWljcm9zb2Z0IFNtb290aC1TdHJlYW1pbmcgZnJhZ21lbnQgcGFyc2luZyBsaWJyYXJ5Ci0rICoKLSsgKiBnc3Rtc3NmcmFnbWVudHBhcnNlci5oCi0rICoKLSsgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTAotKyAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwKLSsgKiAgIEF1dGhvcjogUGhpbGlwcGUgTm9ybWFuZCA8cGhpbG5AaWdhbGlhLmNvbT4KLSsgKgotKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKyAqCi0rICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKyAqCi0rICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSsgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5IChDT1BZSU5HKTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSsgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSsgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSsgKi8KLSsKLSsjaW5jbHVkZSAiZ3N0bXNzZnJhZ21lbnRwYXJzZXIuaCIKLSsjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsKLStHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOIChtc3NkZW11eF9kZWJ1Zyk7Ci0rI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgbXNzZGVtdXhfZGVidWcKLSsKLSt2b2lkCi0rZ3N0X21zc19mcmFnbWVudF9wYXJzZXJfaW5pdCAoR3N0TXNzRnJhZ21lbnRQYXJzZXIgKiBwYXJzZXIpCi0rewotKyAgcGFyc2VyLT5zdGF0dXMgPSBHU1RfTVNTX0ZSQUdNRU5UX0hFQURFUl9QQVJTRVJfSU5JVDsKLSsgIHBhcnNlci0+dGZyZi5lbnRyaWVzX2NvdW50ID0gMDsKLSt9Ci0rCi0rdm9pZAotK2dzdF9tc3NfZnJhZ21lbnRfcGFyc2VyX2NsZWFyIChHc3RNc3NGcmFnbWVudFBhcnNlciAqIHBhcnNlcikKLSt7Ci0rICBwYXJzZXItPnRmcmYuZW50cmllc19jb3VudCA9IDA7Ci0rICBpZiAocGFyc2VyLT50ZnJmLmVudHJpZXMpIHsKLSsgICAgZ19mcmVlIChwYXJzZXItPnRmcmYuZW50cmllcyk7Ci0rICAgIHBhcnNlci0+dGZyZi5lbnRyaWVzID0gMDsKLSsgIH0KLSt9Ci0rCi0rc3RhdGljIGdib29sZWFuCi0rX3BhcnNlX3RmcmZfYm94IChHc3RNc3NGcmFnbWVudFBhcnNlciAqIHBhcnNlciwgR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcikKLSt7Ci0rICBndWludDggdmVyc2lvbjsKLSsgIGd1aW50MzIgZmxhZ3MgPSAwOwotKyAgZ3VpbnQ4IGZyYWdtZW50X2NvdW50ID0gMDsKLSsgIGd1aW50OCBpbmRleCA9IDA7Ci0rCi0rICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggKHJlYWRlciwgJnZlcnNpb24pKSB7Ci0rICAgIEdTVF9FUlJPUiAoIkVycm9yIGdldHRpbmcgYm94J3MgdmVyc2lvbiBmaWVsZCIpOwotKyAgICByZXR1cm4gRkFMU0U7Ci0rICB9Ci0rCi0rICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2JlIChyZWFkZXIsICZmbGFncykpIHsKLSsgICAgR1NUX0VSUk9SICgiRXJyb3IgZ2V0dGluZyBib3gncyBmbGFncyBmaWVsZCIpOwotKyAgICByZXR1cm4gRkFMU0U7Ci0rICB9Ci0rCi0rICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4IChyZWFkZXIsICZmcmFnbWVudF9jb3VudCk7Ci0rICBwYXJzZXItPnRmcmYuZW50cmllc19jb3VudCA9IGZyYWdtZW50X2NvdW50OwotKyAgcGFyc2VyLT50ZnJmLmVudHJpZXMgPQotKyAgICAgIGdfbWFsbG9jIChzaXplb2YgKEdzdFRmcmZCb3hFbnRyeSkgKiBwYXJzZXItPnRmcmYuZW50cmllc19jb3VudCk7Ci0rICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBmcmFnbWVudF9jb3VudDsgaW5kZXgrKykgewotKyAgICBndWludDY0IGFic29sdXRlX3RpbWUgPSAwOwotKyAgICBndWludDY0IGFic29sdXRlX2R1cmF0aW9uID0gMDsKLSsgICAgaWYgKHZlcnNpb24gJiAweDAxKSB7Ci0rICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmUgKHJlYWRlciwgJmFic29sdXRlX3RpbWUpOwotKyAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlIChyZWFkZXIsICZhYnNvbHV0ZV9kdXJhdGlvbik7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgZ3VpbnQzMiB0aW1lID0gMDsKLSsgICAgICBndWludDMyIGR1cmF0aW9uID0gMDsKLSsgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAocmVhZGVyLCAmdGltZSk7Ci0rICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKHJlYWRlciwgJmR1cmF0aW9uKTsKLSsgICAgICB0aW1lID0gfnRpbWU7Ci0rICAgICAgZHVyYXRpb24gPSB+ZHVyYXRpb247Ci0rICAgICAgYWJzb2x1dGVfdGltZSA9IH50aW1lOwotKyAgICAgIGFic29sdXRlX2R1cmF0aW9uID0gfmR1cmF0aW9uOwotKyAgICB9Ci0rICAgIHBhcnNlci0+dGZyZi5lbnRyaWVzW2luZGV4XS50aW1lID0gYWJzb2x1dGVfdGltZTsKLSsgICAgcGFyc2VyLT50ZnJmLmVudHJpZXNbaW5kZXhdLmR1cmF0aW9uID0gYWJzb2x1dGVfZHVyYXRpb247Ci0rICB9Ci0rCi0rICBHU1RfTE9HICgidGZyZiBib3ggcGFyc2VkIik7Ci0rICByZXR1cm4gVFJVRTsKLSt9Ci0rCi0rc3RhdGljIGdib29sZWFuCi0rX3BhcnNlX3RmeGRfYm94IChHc3RNc3NGcmFnbWVudFBhcnNlciAqIHBhcnNlciwgR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcikKLSt7Ci0rICBndWludDggdmVyc2lvbjsKLSsgIGd1aW50MzIgZmxhZ3MgPSAwOwotKyAgZ3VpbnQ2NCBhYnNvbHV0ZV90aW1lID0gMDsKLSsgIGd1aW50NjQgYWJzb2x1dGVfZHVyYXRpb24gPSAwOwotKwotKyAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4IChyZWFkZXIsICZ2ZXJzaW9uKSkgewotKyAgICBHU1RfRVJST1IgKCJFcnJvciBnZXR0aW5nIGJveCdzIHZlcnNpb24gZmllbGQiKTsKLSsgICAgcmV0dXJuIEZBTFNFOwotKyAgfQotKwotKyAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9iZSAocmVhZGVyLCAmZmxhZ3MpKSB7Ci0rICAgIEdTVF9FUlJPUiAoIkVycm9yIGdldHRpbmcgYm94J3MgZmxhZ3MgZmllbGQiKTsKLSsgICAgcmV0dXJuIEZBTFNFOwotKyAgfQotKwotKyAgaWYgKHZlcnNpb24gJiAweDAxKSB7Ci0rICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlIChyZWFkZXIsICZhYnNvbHV0ZV90aW1lKTsKLSsgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmUgKHJlYWRlciwgJmFic29sdXRlX2R1cmF0aW9uKTsKLSsgIH0gZWxzZSB7Ci0rICAgIGd1aW50MzIgdGltZSA9IDA7Ci0rICAgIGd1aW50MzIgZHVyYXRpb24gPSAwOwotKyAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAocmVhZGVyLCAmdGltZSk7Ci0rICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlIChyZWFkZXIsICZkdXJhdGlvbik7Ci0rICAgIHRpbWUgPSB+dGltZTsKLSsgICAgZHVyYXRpb24gPSB+ZHVyYXRpb247Ci0rICAgIGFic29sdXRlX3RpbWUgPSB+dGltZTsKLSsgICAgYWJzb2x1dGVfZHVyYXRpb24gPSB+ZHVyYXRpb247Ci0rICB9Ci0rCi0rICBwYXJzZXItPnRmeGQudGltZSA9IGFic29sdXRlX3RpbWU7Ci0rICBwYXJzZXItPnRmeGQuZHVyYXRpb24gPSBhYnNvbHV0ZV9kdXJhdGlvbjsKLSsgIEdTVF9MT0cgKCJ0ZnhkIGJveCBwYXJzZWQiKTsKLSsgIHJldHVybiBUUlVFOwotK30KLSsKLStnYm9vbGVhbgotK2dzdF9tc3NfZnJhZ21lbnRfcGFyc2VyX2FkZF9idWZmZXIgKEdzdE1zc0ZyYWdtZW50UGFyc2VyICogcGFyc2VyLAotKyAgICBHc3RCdWZmZXIgKiBidWZmZXIpCi0rewotKyAgR3N0Qnl0ZVJlYWRlciByZWFkZXI7Ci0rICBHc3RNYXBJbmZvIGluZm87Ci0rICBndWludDMyIHNpemU7Ci0rICBndWludDMyIGZvdXJjYzsKLSsgIGNvbnN0IGd1aW50OCAqdXVpZDsKLSsgIGdib29sZWFuIGVycm9yID0gRkFMU0U7Ci0rICBnYm9vbGVhbiBtZGF0X2JveF9mb3VuZCA9IEZBTFNFOwotKwotKyAgc3RhdGljIGNvbnN0IGd1aW50OCB0ZnJmX3V1aWRbXSA9IHsKLSsgICAgMHhkNCwgMHg4MCwgMHg3ZSwgMHhmMiwgMHhjYSwgMHgzOSwgMHg0NiwgMHg5NSwKLSsgICAgMHg4ZSwgMHg1NCwgMHgyNiwgMHhjYiwgMHg5ZSwgMHg0NiwgMHhhNywgMHg5ZgotKyAgfTsKLSsKLSsgIHN0YXRpYyBjb25zdCBndWludDggdGZ4ZF91dWlkW10gPSB7Ci0rICAgIDB4NmQsIDB4MWQsIDB4OWIsIDB4MDUsIDB4NDIsIDB4ZDUsIDB4NDQsIDB4ZTYsCi0rICAgIDB4ODAsIDB4ZTIsIDB4MTQsIDB4MWQsIDB4YWYsIDB4ZjcsIDB4NTcsIDB4YjIKLSsgIH07Ci0rCi0rICBzdGF0aWMgY29uc3QgZ3VpbnQ4IHBpZmZfdXVpZFtdID0gewotKyAgICAweGEyLCAweDM5LCAweDRmLCAweDUyLCAweDVhLCAweDliLCAweDRmLCAweDE0LAotKyAgICAweGEyLCAweDQ0LCAweDZjLCAweDQyLCAweDdjLCAweDY0LCAweDhkLCAweGY0Ci0rICB9OwotKwotKyAgaWYgKCFnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmaW5mbywgR1NUX01BUF9SRUFEKSkgewotKyAgICByZXR1cm4gRkFMU0U7Ci0rICB9Ci0rCi0rICBnc3RfYnl0ZV9yZWFkZXJfaW5pdCAoJnJlYWRlciwgaW5mby5kYXRhLCBpbmZvLnNpemUpOwotKyAgR1NUX1RSQUNFICgiVG90YWwgYnVmZmVyIHNpemU6ICV1IiwgZ3N0X2J5dGVfcmVhZGVyX2dldF9zaXplICgmcmVhZGVyKSk7Ci0rCi0rICBzaXplID0gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmVfdW5jaGVja2VkICgmcmVhZGVyKTsKLSsgIGZvdXJjYyA9IGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlX3VuY2hlY2tlZCAoJnJlYWRlcik7Ci0rICBpZiAoZm91cmNjID09IEdTVF9NU1NfRlJBR01FTlRfRk9VUkNDX01PT0YpIHsKLSsgICAgR1NUX1RSQUNFICgibW9vZiBib3ggZm91bmQiKTsKLSsgICAgc2l6ZSA9IGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlX3VuY2hlY2tlZCAoJnJlYWRlcik7Ci0rICAgIGZvdXJjYyA9IGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlX3VuY2hlY2tlZCAoJnJlYWRlcik7Ci0rICAgIGlmIChmb3VyY2MgPT0gR1NUX01TU19GUkFHTUVOVF9GT1VSQ0NfTUZIRCkgewotKyAgICAgIGdzdF9ieXRlX3JlYWRlcl9za2lwX3VuY2hlY2tlZCAoJnJlYWRlciwgc2l6ZSAtIDgpOwotKwotKyAgICAgIHNpemUgPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWQgKCZyZWFkZXIpOwotKyAgICAgIGZvdXJjYyA9IGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlX3VuY2hlY2tlZCAoJnJlYWRlcik7Ci0rICAgICAgaWYgKGZvdXJjYyA9PSBHU1RfTVNTX0ZSQUdNRU5UX0ZPVVJDQ19UUkFGKSB7Ci0rICAgICAgICBzaXplID0gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmVfdW5jaGVja2VkICgmcmVhZGVyKTsKLSsgICAgICAgIGZvdXJjYyA9IGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlX3VuY2hlY2tlZCAoJnJlYWRlcik7Ci0rICAgICAgICBpZiAoZm91cmNjID09IEdTVF9NU1NfRlJBR01FTlRfRk9VUkNDX1RGSEQpIHsKLSsgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3NraXBfdW5jaGVja2VkICgmcmVhZGVyLCBzaXplIC0gOCk7Ci0rCi0rICAgICAgICAgIHNpemUgPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWQgKCZyZWFkZXIpOwotKyAgICAgICAgICBmb3VyY2MgPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9sZV91bmNoZWNrZWQgKCZyZWFkZXIpOwotKyAgICAgICAgICBpZiAoZm91cmNjID09IEdTVF9NU1NfRlJBR01FTlRfRk9VUkNDX1RSVU4pIHsKLSsgICAgICAgICAgICBHU1RfVFJBQ0UgKCJ0cnVuIGJveCBmb3VuZCwgc2l6ZTogJSIgR19HVUlOVDMyX0ZPUk1BVCwgc2l6ZSk7Ci0rICAgICAgICAgICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfc2tpcCAoJnJlYWRlciwgc2l6ZSAtIDgpKSB7Ci0rICAgICAgICAgICAgICBHU1RfV0FSTklORyAoIkZhaWxlZCB0byBza2lwIHRydW4gYm94LCBlbm91Z2ggZGF0YT8iKTsKLSsgICAgICAgICAgICAgIGVycm9yID0gVFJVRTsKLSsgICAgICAgICAgICAgIGdvdG8gYmVhY2g7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgICB9Ci0rICAgICAgICB9Ci0rICAgICAgfQotKyAgICB9Ci0rICB9Ci0rCi0rICB3aGlsZSAoIW1kYXRfYm94X2ZvdW5kKSB7Ci0rICAgIEdTVF9UUkFDRSAoInJlbWFpbmluZyBkYXRhOiAldSIsIGdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nICgmcmVhZGVyKSk7Ci0rICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKCZyZWFkZXIsICZzaXplKSkgewotKyAgICAgIEdTVF9XQVJOSU5HICgiRmFpbGVkIHRvIGdldCBib3ggc2l6ZSwgZW5vdWdoIGRhdGE/Iik7Ci0rICAgICAgZXJyb3IgPSBUUlVFOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rCi0rICAgIEdTVF9UUkFDRSAoImJveCBzaXplOiAlIiBHX0dVSU5UMzJfRk9STUFULCBzaXplKTsKLSsgICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9sZSAoJnJlYWRlciwgJmZvdXJjYykpIHsKLSsgICAgICBHU1RfV0FSTklORyAoIkZhaWxlZCB0byBnZXQgZm91cmNjLCBlbm91Z2ggZGF0YT8iKTsKLSsgICAgICBlcnJvciA9IFRSVUU7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsKLSsgICAgaWYgKGZvdXJjYyA9PSBHU1RfTVNTX0ZSQUdNRU5UX0ZPVVJDQ19NREFUKSB7Ci0rICAgICAgR1NUX0xPRyAoIm1kYXQgYm94IGZvdW5kIik7Ci0rICAgICAgbWRhdF9ib3hfZm91bmQgPSBUUlVFOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rCi0rICAgIGlmIChmb3VyY2MgIT0gR1NUX01TU19GUkFHTUVOVF9GT1VSQ0NfVVVJRCkgewotKyAgICAgIEdTVF9FUlJPUiAoImludmFsaWQgVVVJRCBmb3VyY2M6ICUiIEdTVF9GT1VSQ0NfRk9STUFULAotKyAgICAgICAgICBHU1RfRk9VUkNDX0FSR1MgKGZvdXJjYykpOwotKyAgICAgIGVycm9yID0gVFJVRTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKwotKyAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9wZWVrX2RhdGEgKCZyZWFkZXIsIDE2LCAmdXVpZCkpIHsKLSsgICAgICBHU1RfRVJST1IgKCJub3QgZW5vdWdoIGRhdGEgaW4gVVVJRCBib3giKTsKLSsgICAgICBlcnJvciA9IFRSVUU7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsKLSsgICAgaWYgKG1lbWNtcCAodXVpZCwgcGlmZl91dWlkLCAxNikgPT0gMCkgewotKyAgICAgIGdzdF9ieXRlX3JlYWRlcl9za2lwX3VuY2hlY2tlZCAoJnJlYWRlciwgc2l6ZSAtIDgpOwotKyAgICAgIEdTVF9MT0cgKCJwaWZmIGJveCBkZXRlY3RlZCIpOwotKyAgICB9Ci0rCi0rICAgIGlmIChtZW1jbXAgKHV1aWQsIHRmcmZfdXVpZCwgMTYpID09IDApIHsKLSsgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGEgKCZyZWFkZXIsIDE2LCAmdXVpZCk7Ci0rICAgICAgaWYgKCFfcGFyc2VfdGZyZl9ib3ggKHBhcnNlciwgJnJlYWRlcikpIHsKLSsgICAgICAgIEdTVF9FUlJPUiAoInR4cmYgYm94IHBhcnNpbmcgZXJyb3IiKTsKLSsgICAgICAgIGVycm9yID0gVFJVRTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIH0KLSsgICAgfQotKwotKyAgICBpZiAobWVtY21wICh1dWlkLCB0ZnhkX3V1aWQsIDE2KSA9PSAwKSB7Ci0rICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhICgmcmVhZGVyLCAxNiwgJnV1aWQpOwotKyAgICAgIGlmICghX3BhcnNlX3RmeGRfYm94IChwYXJzZXIsICZyZWFkZXIpKSB7Ci0rICAgICAgICBHU1RfRVJST1IgKCJ0ZnJmIGJveCBwYXJzaW5nIGVycm9yIik7Ci0rICAgICAgICBlcnJvciA9IFRSVUU7Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgIH0KLSsgIH0KLSsKLStiZWFjaDoKLSsKLSsgIGlmICghZXJyb3IpCi0rICAgIHBhcnNlci0+c3RhdHVzID0gR1NUX01TU19GUkFHTUVOVF9IRUFERVJfUEFSU0VSX0ZJTklTSEVEOwotKwotKyAgR1NUX0xPRyAoIkZyYWdtZW50IHBhcnNpbmcgc3VjY2Vzc2Z1bDogJXMiLCBlcnJvciA/ICJubyIgOiAieWVzIik7Ci0rICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZpbmZvKTsKLSsgIHJldHVybiAhZXJyb3I7Ci0rfQotZGlmZiAtLWdpdCBhL2V4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzZnJhZ21lbnRwYXJzZXIuaCBiL2V4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzZnJhZ21lbnRwYXJzZXIuaAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAwMC4uY2Y0NzExODY1Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc2ZyYWdtZW50cGFyc2VyLmgKLUBAIC0wLDAgKzEsODQgQEAKLSsvKgotKyAqIE1pY3Jvc29mdCBTbW9vdGgtU3RyZWFtaW5nIGZyYWdtZW50IHBhcnNpbmcgbGlicmFyeQotKyAqCi0rICogZ3N0bXNzZnJhZ21lbnRwYXJzZXIuaAotKyAqCi0rICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwKLSsgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTWV0cm9sb2dpY2FsCi0rICogICBBdXRob3I6IFBoaWxpcHBlIE5vcm1hbmQgPHBoaWxuQGlnYWxpYS5jb20+Ci0rICoKLSsgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0rICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsgKgotKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSsgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsgKgotKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0rICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeSAoQ09QWUlORyk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0rICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0rICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0rICovCi0rCi0rI2lmbmRlZiBfX0dTVF9NU1NfRlJBR01FTlRfUEFSU0VSX0hfXwotKyNkZWZpbmUgX19HU1RfTVNTX0ZSQUdNRU5UX1BBUlNFUl9IX18KLSsKLSsjaW5jbHVkZSA8Z3N0L2dzdC5oPgotKwotK0dfQkVHSU5fREVDTFMKLSsKLSsjZGVmaW5lIEdTVF9NU1NfRlJBR01FTlRfRk9VUkNDX01PT0YgR1NUX01BS0VfRk9VUkNDKCdtJywnbycsJ28nLCdmJykKLSsjZGVmaW5lIEdTVF9NU1NfRlJBR01FTlRfRk9VUkNDX01GSEQgR1NUX01BS0VfRk9VUkNDKCdtJywnZicsJ2gnLCdkJykKLSsjZGVmaW5lIEdTVF9NU1NfRlJBR01FTlRfRk9VUkNDX1RSQUYgR1NUX01BS0VfRk9VUkNDKCd0JywncicsJ2EnLCdmJykKLSsjZGVmaW5lIEdTVF9NU1NfRlJBR01FTlRfRk9VUkNDX1RGSEQgR1NUX01BS0VfRk9VUkNDKCd0JywnZicsJ2gnLCdkJykKLSsjZGVmaW5lIEdTVF9NU1NfRlJBR01FTlRfRk9VUkNDX1RSVU4gR1NUX01BS0VfRk9VUkNDKCd0JywncicsJ3UnLCduJykKLSsjZGVmaW5lIEdTVF9NU1NfRlJBR01FTlRfRk9VUkNDX1VVSUQgR1NUX01BS0VfRk9VUkNDKCd1JywndScsJ2knLCdkJykKLSsjZGVmaW5lIEdTVF9NU1NfRlJBR01FTlRfRk9VUkNDX01EQVQgR1NUX01BS0VfRk9VUkNDKCdtJywnZCcsJ2EnLCd0JykKLSsKLSt0eXBlZGVmIHN0cnVjdCBfR3N0VGZ4ZEJveAotK3sKLSsgIGd1aW50OCB2ZXJzaW9uOwotKyAgZ3VpbnQzMiBmbGFnczsKLSsKLSsgIGd1aW50NjQgdGltZTsKLSsgIGd1aW50NjQgZHVyYXRpb247Ci0rfSBHc3RUZnhkQm94OwotKwotK3R5cGVkZWYgc3RydWN0IF9Hc3RUZnJmQm94RW50cnkKLSt7Ci0rICBndWludDY0IHRpbWU7Ci0rICBndWludDY0IGR1cmF0aW9uOwotK30gR3N0VGZyZkJveEVudHJ5OwotKwotK3R5cGVkZWYgc3RydWN0IF9Hc3RUZnJmQm94Ci0rewotKyAgZ3VpbnQ4IHZlcnNpb247Ci0rICBndWludDMyIGZsYWdzOwotKwotKyAgZ2ludCBlbnRyaWVzX2NvdW50OwotKyAgR3N0VGZyZkJveEVudHJ5ICplbnRyaWVzOwotK30gR3N0VGZyZkJveDsKLSsKLSt0eXBlZGVmIGVudW0gX0dzdEZyYWdtZW50SGVhZGVyUGFyc2VyU3RhdHVzCi0rewotKyAgR1NUX01TU19GUkFHTUVOVF9IRUFERVJfUEFSU0VSX0lOSVQsCi0rICBHU1RfTVNTX0ZSQUdNRU5UX0hFQURFUl9QQVJTRVJfRklOSVNIRUQKLSt9IEdzdEZyYWdtZW50SGVhZGVyUGFyc2VyU3RhdHVzOwotKwotK3R5cGVkZWYgc3RydWN0IF9Hc3RNc3NGcmFnbWVudFBhcnNlcgotK3sKLSsgIEdzdEZyYWdtZW50SGVhZGVyUGFyc2VyU3RhdHVzIHN0YXR1czsKLSsgIEdzdFRmeGRCb3ggdGZ4ZDsKLSsgIEdzdFRmcmZCb3ggdGZyZjsKLSt9IEdzdE1zc0ZyYWdtZW50UGFyc2VyOwotKwotK3ZvaWQgZ3N0X21zc19mcmFnbWVudF9wYXJzZXJfaW5pdCAoR3N0TXNzRnJhZ21lbnRQYXJzZXIgKiBwYXJzZXIpOwotK3ZvaWQgZ3N0X21zc19mcmFnbWVudF9wYXJzZXJfY2xlYXIgKEdzdE1zc0ZyYWdtZW50UGFyc2VyICogcGFyc2VyKTsKLStnYm9vbGVhbiBnc3RfbXNzX2ZyYWdtZW50X3BhcnNlcl9hZGRfYnVmZmVyIChHc3RNc3NGcmFnbWVudFBhcnNlciAqIHBhcnNlciwgR3N0QnVmZmVyICogYnVmKTsKLSsKLStHX0VORF9ERUNMUwotKwotKyNlbmRpZiAvKiBfX0dTVF9NU1NfRlJBR01FTlRfUEFSU0VSX0hfXyAqLwotZGlmZiAtLWdpdCBhL2V4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzbWFuaWZlc3QuYyBiL2V4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzbWFuaWZlc3QuYwotaW5kZXggMTQ0YmJiNDJkLi5lMTAzMWJhNTUgMTAwNjQ0Ci0tLS0gYS9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmMKLSsrKyBiL2V4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzbWFuaWZlc3QuYwotQEAgLTEsNSArMSw3IEBACi0gLyogR1N0cmVhbWVyCi0gICogQ29weXJpZ2h0IChDKSAyMDEyIFNtYXJ0IFRWIEFsbGlhbmNlCi0rICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwKLSsgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTWV0cm9sb2dpY2FsCi0gICogIEF1dGhvcjogVGhpYWdvIFNvdXNhIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPiwgQ29sbGFib3JhIEx0ZC4KLSAgKgotICAqIGdzdG1zc21hbmlmZXN0LmM6Ci1AQCAtMzEsNiArMzMsNyBAQAotICNpbmNsdWRlIDxnc3QvY29kZWNwYXJzZXJzL2dzdGgyNjRwYXJzZXIuaD4KLSAKLSAjaW5jbHVkZSAiZ3N0bXNzbWFuaWZlc3QuaCIKLSsjaW5jbHVkZSAiZ3N0bXNzZnJhZ21lbnRwYXJzZXIuaCIKLSAKLSBHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOIChtc3NkZW11eF9kZWJ1Zyk7Ci0gI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgbXNzZGVtdXhfZGVidWcKLUBAIC03NCwxMiArNzcsMTcgQEAgc3RydWN0IF9Hc3RNc3NTdHJlYW0KLSAgIGdib29sZWFuIGFjdGl2ZTsgICAgICAgICAgICAgIC8qIGlmIHRoZSBzdHJlYW0gaXMgY3VycmVudGx5IGJlaW5nIHVzZWQgKi8KLSAgIGdpbnQgc2VsZWN0ZWRRdWFsaXR5SW5kZXg7Ci0gCi0rICBnYm9vbGVhbiBoYXNfbGl2ZV9mcmFnbWVudHM7Ci0rICBHc3RBZGFwdGVyICpsaXZlX2FkYXB0ZXI7Ci0rCi0gICBHTGlzdCAqZnJhZ21lbnRzOwotICAgR0xpc3QgKnF1YWxpdGllczsKLSAKLSAgIGdjaGFyICp1cmw7Ci0gICBnY2hhciAqbGFuZzsKLSAKLSsgIEdzdE1zc0ZyYWdtZW50UGFyc2VyIGZyYWdtZW50X3BhcnNlcjsKLSsKLSAgIGd1aW50IGZyYWdtZW50X3JlcGV0aXRpb25faW5kZXg7Ci0gICBHTGlzdCAqY3VycmVudF9mcmFnbWVudDsKLSAgIEdMaXN0ICpjdXJyZW50X3F1YWxpdHk7Ci1AQCAtOTYsNiArMTA0LDcgQEAgc3RydWN0IF9Hc3RNc3NNYW5pZmVzdAotIAotICAgZ2Jvb2xlYW4gaXNfbGl2ZTsKLSAgIGdpbnQ2NCBkdnJfd2luZG93OwotKyAgZ3VpbnQ2NCBsb29rX2FoZWFkX2ZyYWdtZW50X2NvdW50OwotIAotICAgR1N0cmluZyAqcHJvdGVjdGlvbl9zeXN0ZW1faWQ7Ci0gICBnY2hhciAqcHJvdGVjdGlvbl9kYXRhOwotQEAgLTIzNSw3ICsyNDQsOCBAQCBjb21wYXJlX2JpdHJhdGUgKEdzdE1zc1N0cmVhbVF1YWxpdHkgKiBhLCBHc3RNc3NTdHJlYW1RdWFsaXR5ICogYikKLSB9Ci0gCi0gc3RhdGljIHZvaWQKLS1fZ3N0X21zc19zdHJlYW1faW5pdCAoR3N0TXNzU3RyZWFtICogc3RyZWFtLCB4bWxOb2RlUHRyIG5vZGUpCi0rX2dzdF9tc3Nfc3RyZWFtX2luaXQgKEdzdE1zc01hbmlmZXN0ICogbWFuaWZlc3QsIEdzdE1zc1N0cmVhbSAqIHN0cmVhbSwKLSsgICAgeG1sTm9kZVB0ciBub2RlKQotIHsKLSAgIHhtbE5vZGVQdHIgaXRlcjsKLSAgIEdzdE1zc0ZyYWdtZW50TGlzdEJ1aWxkZXIgYnVpbGRlcjsKLUBAIC0yNDgsOSArMjU4LDIxIEBAIF9nc3RfbXNzX3N0cmVhbV9pbml0IChHc3RNc3NTdHJlYW0gKiBzdHJlYW0sIHhtbE5vZGVQdHIgbm9kZSkKLSAgIHN0cmVhbS0+dXJsID0gKGdjaGFyICopIHhtbEdldFByb3AgKG5vZGUsICh4bWxDaGFyICopIE1TU19QUk9QX1VSTCk7Ci0gICBzdHJlYW0tPmxhbmcgPSAoZ2NoYXIgKikgeG1sR2V0UHJvcCAobm9kZSwgKHhtbENoYXIgKikgTVNTX1BST1BfTEFOR1VBR0UpOwotIAotKyAgLyogZm9yIGxpdmUgcGxheWJhY2sgZWFjaCBmcmFnbWVudCB1c3VhbGx5IGhhcyB0aW1pbmcKLSsgICAqIGluZm9ybWF0aW9uIGZvciB0aGUgZmV3IG5leHQgbG9vay1haGVhZCBmcmFnbWVudHMgc28gdGhlCi0rICAgKiBwbGF5bGlzdCBjYW4gYmUgYnVpbHQgaW5jcmVtZW50YWxseSBmcm9tIHRoZSBmaXJzdCBmcmFnbWVudAotKyAgICogb2YgdGhlIG1hbmlmZXN0LgotKyAgICovCi0rCi0rICBHU1RfREVCVUcgKCJMaXZlIHN0cmVhbTogJXMsIGxvb2stYWhlYWQgZnJhZ21lbnRzOiAlIiBHX0dVSU5UNjRfRk9STUFULAotKyAgICAgIG1hbmlmZXN0LT5pc19saXZlID8gInllcyIgOiAibm8iLCBtYW5pZmVzdC0+bG9va19haGVhZF9mcmFnbWVudF9jb3VudCk7Ci0rICBzdHJlYW0tPmhhc19saXZlX2ZyYWdtZW50cyA9IG1hbmlmZXN0LT5pc19saXZlCi0rICAgICAgJiYgbWFuaWZlc3QtPmxvb2tfYWhlYWRfZnJhZ21lbnRfY291bnQ7Ci0rCi0gICBmb3IgKGl0ZXIgPSBub2RlLT5jaGlsZHJlbjsgaXRlcjsgaXRlciA9IGl0ZXItPm5leHQpIHsKLSAgICAgaWYgKG5vZGVfaGFzX3R5cGUgKGl0ZXIsIE1TU19OT0RFX1NUUkVBTV9GUkFHTUVOVCkpIHsKLS0gICAgICBnc3RfbXNzX2ZyYWdtZW50X2xpc3RfYnVpbGRlcl9hZGQgKCZidWlsZGVyLCBpdGVyKTsKLSsgICAgICBpZiAoIXN0cmVhbS0+aGFzX2xpdmVfZnJhZ21lbnRzIHx8ICFidWlsZGVyLmZyYWdtZW50cykKLSsgICAgICAgIGdzdF9tc3NfZnJhZ21lbnRfbGlzdF9idWlsZGVyX2FkZCAoJmJ1aWxkZXIsIGl0ZXIpOwotICAgICB9IGVsc2UgaWYgKG5vZGVfaGFzX3R5cGUgKGl0ZXIsIE1TU19OT0RFX1NUUkVBTV9RVUFMSVRZKSkgewotICAgICAgIEdzdE1zc1N0cmVhbVF1YWxpdHkgKnF1YWxpdHkgPSBnc3RfbXNzX3N0cmVhbV9xdWFsaXR5X25ldyAoaXRlcik7Ci0gICAgICAgc3RyZWFtLT5xdWFsaXRpZXMgPSBnX2xpc3RfcHJlcGVuZCAoc3RyZWFtLT5xdWFsaXRpZXMsIHF1YWxpdHkpOwotQEAgLTI1OSwxNyArMjgxLDI0IEBAIF9nc3RfbXNzX3N0cmVhbV9pbml0IChHc3RNc3NTdHJlYW0gKiBzdHJlYW0sIHhtbE5vZGVQdHIgbm9kZSkKLSAgICAgfQotICAgfQotIAotLSAgc3RyZWFtLT5mcmFnbWVudHMgPSBnX2xpc3RfcmV2ZXJzZSAoYnVpbGRlci5mcmFnbWVudHMpOwotKyAgaWYgKHN0cmVhbS0+aGFzX2xpdmVfZnJhZ21lbnRzKSB7Ci0rICAgIHN0cmVhbS0+bGl2ZV9hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotKyAgfQotKwotKyAgaWYgKGJ1aWxkZXIuZnJhZ21lbnRzKSB7Ci0rICAgIHN0cmVhbS0+ZnJhZ21lbnRzID0gZ19saXN0X3JldmVyc2UgKGJ1aWxkZXIuZnJhZ21lbnRzKTsKLSsgICAgc3RyZWFtLT5jdXJyZW50X2ZyYWdtZW50ID0gc3RyZWFtLT5mcmFnbWVudHM7Ci0rICB9Ci0gCi0gICAvKiBvcmRlciB0aGVtIGZyb20gc21hbGxlciB0byBiaWdnZXIgYmFzZWQgb24gYml0cmF0ZXMgKi8KLSAgIHN0cmVhbS0+cXVhbGl0aWVzID0KLSAgICAgICBnX2xpc3Rfc29ydCAoc3RyZWFtLT5xdWFsaXRpZXMsIChHQ29tcGFyZUZ1bmMpIGNvbXBhcmVfYml0cmF0ZSk7Ci0tCi0tICBzdHJlYW0tPmN1cnJlbnRfZnJhZ21lbnQgPSBzdHJlYW0tPmZyYWdtZW50czsKLSAgIHN0cmVhbS0+Y3VycmVudF9xdWFsaXR5ID0gc3RyZWFtLT5xdWFsaXRpZXM7Ci0gCi0gICBzdHJlYW0tPnJlZ2V4X2JpdHJhdGUgPSBnX3JlZ2V4X25ldyAoIlxce1tCYl1pdHJhdGVcXH0iLCAwLCAwLCBOVUxMKTsKLSAgIHN0cmVhbS0+cmVnZXhfcG9zaXRpb24gPSBnX3JlZ2V4X25ldyAoIlxce3N0YXJ0WyBfXXRpbWVcXH0iLCAwLCAwLCBOVUxMKTsKLSsKLSsgIGdzdF9tc3NfZnJhZ21lbnRfcGFyc2VyX2luaXQgKCZzdHJlYW0tPmZyYWdtZW50X3BhcnNlcik7Ci0gfQotIAotIAotQEAgLTMxNSw2ICszNDQsNyBAQCBnc3RfbXNzX21hbmlmZXN0X25ldyAoR3N0QnVmZmVyICogZGF0YSkKLSAgIHhtbE5vZGVQdHIgbm9kZWl0ZXI7Ci0gICBnY2hhciAqbGl2ZV9zdHI7Ci0gICBHc3RNYXBJbmZvIG1hcGluZm87Ci0rICBnY2hhciAqbG9va19haGVhZF9mcmFnbWVudF9jb3VudF9zdHI7Ci0gCi0gICBpZiAoIWdzdF9idWZmZXJfbWFwIChkYXRhLCAmbWFwaW5mbywgR1NUX01BUF9SRUFEKSkgewotICAgICByZXR1cm4gTlVMTDsKLUBAIC0zMzUsNiArMzY1LDcgQEAgZ3N0X21zc19tYW5pZmVzdF9uZXcgKEdzdEJ1ZmZlciAqIGRhdGEpCi0gICAvKiB0aGUgZW50aXJlIGZpbGUgaXMgYWx3YXlzIGF2YWlsYWJsZSBmb3Igbm9uLWxpdmUgc3RyZWFtcyAqLwotICAgaWYgKCFtYW5pZmVzdC0+aXNfbGl2ZSkgewotICAgICBtYW5pZmVzdC0+ZHZyX3dpbmRvdyA9IDA7Ci0rICAgIG1hbmlmZXN0LT5sb29rX2FoZWFkX2ZyYWdtZW50X2NvdW50ID0gMDsKLSAgIH0gZWxzZSB7Ci0gICAgIC8qIGlmIDAsIG9yIG5vbi1leGlzdGVudCwgdGhlIGxlbmd0aCBpcyBpbmZpbml0ZSAqLwotICAgICBnY2hhciAqZHZyX3dpbmRvd19zdHIgPSAoZ2NoYXIgKikgeG1sR2V0UHJvcCAocm9vdCwKLUBAIC0zNDYsNiArMzc3LDE3IEBAIGdzdF9tc3NfbWFuaWZlc3RfbmV3IChHc3RCdWZmZXIgKiBkYXRhKQotICAgICAgICAgbWFuaWZlc3QtPmR2cl93aW5kb3cgPSAwOwotICAgICAgIH0KLSAgICAgfQotKwotKyAgICBsb29rX2FoZWFkX2ZyYWdtZW50X2NvdW50X3N0ciA9Ci0rICAgICAgICAoZ2NoYXIgKikgeG1sR2V0UHJvcCAocm9vdCwgKHhtbENoYXIgKikgIkxvb2tBaGVhZEZyYWdtZW50Q291bnQiKTsKLSsgICAgaWYgKGxvb2tfYWhlYWRfZnJhZ21lbnRfY291bnRfc3RyKSB7Ci0rICAgICAgbWFuaWZlc3QtPmxvb2tfYWhlYWRfZnJhZ21lbnRfY291bnQgPQotKyAgICAgICAgICBnX2FzY2lpX3N0cnRvdWxsIChsb29rX2FoZWFkX2ZyYWdtZW50X2NvdW50X3N0ciwgTlVMTCwgMTApOwotKyAgICAgIHhtbEZyZWUgKGxvb2tfYWhlYWRfZnJhZ21lbnRfY291bnRfc3RyKTsKLSsgICAgICBpZiAobWFuaWZlc3QtPmxvb2tfYWhlYWRfZnJhZ21lbnRfY291bnQgPD0gMCkgewotKyAgICAgICAgbWFuaWZlc3QtPmxvb2tfYWhlYWRfZnJhZ21lbnRfY291bnQgPSAwOwotKyAgICAgIH0KLSsgICAgfQotICAgfQotIAotICAgZm9yIChub2RlaXRlciA9IHJvb3QtPmNoaWxkcmVuOyBub2RlaXRlcjsgbm9kZWl0ZXIgPSBub2RlaXRlci0+bmV4dCkgewotQEAgLTM1NCw3ICszOTYsNyBAQCBnc3RfbXNzX21hbmlmZXN0X25ldyAoR3N0QnVmZmVyICogZGF0YSkKLSAgICAgICBHc3RNc3NTdHJlYW0gKnN0cmVhbSA9IGdfbmV3MCAoR3N0TXNzU3RyZWFtLCAxKTsKLSAKLSAgICAgICBtYW5pZmVzdC0+c3RyZWFtcyA9IGdfc2xpc3RfYXBwZW5kIChtYW5pZmVzdC0+c3RyZWFtcywgc3RyZWFtKTsKLS0gICAgICBfZ3N0X21zc19zdHJlYW1faW5pdCAoc3RyZWFtLCBub2RlaXRlcik7Ci0rICAgICAgX2dzdF9tc3Nfc3RyZWFtX2luaXQgKG1hbmlmZXN0LCBzdHJlYW0sIG5vZGVpdGVyKTsKLSAgICAgfQotIAotICAgICBpZiAobm9kZWl0ZXItPnR5cGUgPT0gWE1MX0VMRU1FTlRfTk9ERQotQEAgLTM3MSw2ICs0MTMsMTEgQEAgZ3N0X21zc19tYW5pZmVzdF9uZXcgKEdzdEJ1ZmZlciAqIGRhdGEpCi0gc3RhdGljIHZvaWQKLSBnc3RfbXNzX3N0cmVhbV9mcmVlIChHc3RNc3NTdHJlYW0gKiBzdHJlYW0pCi0gewotKyAgaWYgKHN0cmVhbS0+bGl2ZV9hZGFwdGVyKSB7Ci0rICAgIGdzdF9hZGFwdGVyX2NsZWFyIChzdHJlYW0tPmxpdmVfYWRhcHRlcik7Ci0rICAgIGdfb2JqZWN0X3VucmVmIChzdHJlYW0tPmxpdmVfYWRhcHRlcik7Ci0rICB9Ci0rCi0gICBnX2xpc3RfZnJlZV9mdWxsIChzdHJlYW0tPmZyYWdtZW50cywgZ19mcmVlKTsKLSAgIGdfbGlzdF9mcmVlX2Z1bGwgKHN0cmVhbS0+cXVhbGl0aWVzLAotICAgICAgIChHRGVzdHJveU5vdGlmeSkgZ3N0X21zc19zdHJlYW1fcXVhbGl0eV9mcmVlKTsKLUBAIC0zNzksNiArNDI2LDcgQEAgZ3N0X21zc19zdHJlYW1fZnJlZSAoR3N0TXNzU3RyZWFtICogc3RyZWFtKQotICAgZ19yZWdleF91bnJlZiAoc3RyZWFtLT5yZWdleF9wb3NpdGlvbik7Ci0gICBnX3JlZ2V4X3VucmVmIChzdHJlYW0tPnJlZ2V4X2JpdHJhdGUpOwotICAgZ19mcmVlIChzdHJlYW0pOwotKyAgZ3N0X21zc19mcmFnbWVudF9wYXJzZXJfY2xlYXIgKCZzdHJlYW0tPmZyYWdtZW50X3BhcnNlcik7Ci0gfQotIAotIHZvaWQKLUBAIC0xMDc5LDYgKzExMjcsOSBAQCBHc3RGbG93UmV0dXJuCi0gZ3N0X21zc19zdHJlYW1fYWR2YW5jZV9mcmFnbWVudCAoR3N0TXNzU3RyZWFtICogc3RyZWFtKQotIHsKLSAgIEdzdE1zc1N0cmVhbUZyYWdtZW50ICpmcmFnbWVudDsKLSsgIGNvbnN0IGdjaGFyICpzdHJlYW1fdHlwZV9uYW1lID0KLSsgICAgICBnc3RfbXNzX3N0cmVhbV90eXBlX25hbWUgKGdzdF9tc3Nfc3RyZWFtX2dldF90eXBlIChzdHJlYW0pKTsKLSsKLSAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJlYW0tPmFjdGl2ZSwgR1NUX0ZMT1dfRVJST1IpOwotIAotICAgaWYgKHN0cmVhbS0+Y3VycmVudF9mcmFnbWVudCA9PSBOVUxMKQotQEAgLTEwODYsMTQgKzExMzcsMjAgQEAgZ3N0X21zc19zdHJlYW1fYWR2YW5jZV9mcmFnbWVudCAoR3N0TXNzU3RyZWFtICogc3RyZWFtKQotIAotICAgZnJhZ21lbnQgPSBzdHJlYW0tPmN1cnJlbnRfZnJhZ21lbnQtPmRhdGE7Ci0gICBzdHJlYW0tPmZyYWdtZW50X3JlcGV0aXRpb25faW5kZXgrKzsKLS0gIGlmIChzdHJlYW0tPmZyYWdtZW50X3JlcGV0aXRpb25faW5kZXggPCBmcmFnbWVudC0+cmVwZXRpdGlvbnMpIHsKLS0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotLSAgfQotKyAgaWYgKHN0cmVhbS0+ZnJhZ21lbnRfcmVwZXRpdGlvbl9pbmRleCA8IGZyYWdtZW50LT5yZXBldGl0aW9ucykKLSsgICAgZ290byBiZWFjaDsKLSAKLSAgIHN0cmVhbS0+ZnJhZ21lbnRfcmVwZXRpdGlvbl9pbmRleCA9IDA7Ci0gICBzdHJlYW0tPmN1cnJlbnRfZnJhZ21lbnQgPSBnX2xpc3RfbmV4dCAoc3RyZWFtLT5jdXJyZW50X2ZyYWdtZW50KTsKLSsKLSsgIEdTVF9ERUJVRyAoIkFkdmFuY2VkIHRvIGZyYWdtZW50ICMlZCBvbiAlcyBzdHJlYW0iLCBmcmFnbWVudC0+bnVtYmVyLAotKyAgICAgIHN0cmVhbV90eXBlX25hbWUpOwotICAgaWYgKHN0cmVhbS0+Y3VycmVudF9mcmFnbWVudCA9PSBOVUxMKQotICAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotKwotK2JlYWNoOgotKyAgZ3N0X21zc19mcmFnbWVudF9wYXJzZXJfY2xlYXIgKCZzdHJlYW0tPmZyYWdtZW50X3BhcnNlcik7Ci0rICBnc3RfbXNzX2ZyYWdtZW50X3BhcnNlcl9pbml0ICgmc3RyZWFtLT5mcmFnbWVudF9wYXJzZXIpOwotICAgcmV0dXJuIEdTVF9GTE9XX09LOwotIH0KLSAKLUBAIC0xMTczLDYgKzEyMzAsMTEgQEAgZ3N0X21zc19zdHJlYW1fc2VlayAoR3N0TXNzU3RyZWFtICogc3RyZWFtLCBnYm9vbGVhbiBmb3J3YXJkLAotICAgR1NUX0RFQlVHICgiU3RyZWFtICVzIHNlZWtpbmcgdG8gJSIgR19HVUlOVDY0X0ZPUk1BVCwgc3RyZWFtLT51cmwsIHRpbWUpOwotICAgZm9yIChpdGVyID0gc3RyZWFtLT5mcmFnbWVudHM7IGl0ZXI7IGl0ZXIgPSBnX2xpc3RfbmV4dCAoaXRlcikpIHsKLSAgICAgZnJhZ21lbnQgPSBpdGVyLT5kYXRhOwotKyAgICBpZiAoc3RyZWFtLT5oYXNfbGl2ZV9mcmFnbWVudHMpIHsKLSsgICAgICBpZiAoZnJhZ21lbnQtPnRpbWUgKyBmcmFnbWVudC0+cmVwZXRpdGlvbnMgKiBmcmFnbWVudC0+ZHVyYXRpb24gPiB0aW1lKQotKyAgICAgICAgc3RyZWFtLT5jdXJyZW50X2ZyYWdtZW50ID0gaXRlcjsKLSsgICAgICBicmVhazsKLSsgICAgfQotICAgICBpZiAoZnJhZ21lbnQtPnRpbWUgKyBmcmFnbWVudC0+cmVwZXRpdGlvbnMgKiBmcmFnbWVudC0+ZHVyYXRpb24gPiB0aW1lKSB7Ci0gICAgICAgc3RyZWFtLT5jdXJyZW50X2ZyYWdtZW50ID0gaXRlcjsKLSAgICAgICBzdHJlYW0tPmZyYWdtZW50X3JlcGV0aXRpb25faW5kZXggPQotQEAgLTEyNTYsOSArMTMxOCwxNCBAQCBzdGF0aWMgdm9pZAotIGdzdF9tc3Nfc3RyZWFtX3JlbG9hZF9mcmFnbWVudHMgKEdzdE1zc1N0cmVhbSAqIHN0cmVhbSwgeG1sTm9kZVB0ciBzdHJlYW1JbmRleCkKLSB7Ci0gICB4bWxOb2RlUHRyIGl0ZXI7Ci0tICBndWludDY0IGN1cnJlbnRfZ3N0X3RpbWUgPSBnc3RfbXNzX3N0cmVhbV9nZXRfZnJhZ21lbnRfZ3N0X3RpbWVzdGFtcCAoc3RyZWFtKTsKLSsgIGd1aW50NjQgY3VycmVudF9nc3RfdGltZTsKLSAgIEdzdE1zc0ZyYWdtZW50TGlzdEJ1aWxkZXIgYnVpbGRlcjsKLSAKLSsgIGlmIChzdHJlYW0tPmhhc19saXZlX2ZyYWdtZW50cykKLSsgICAgcmV0dXJuOwotKwotKyAgY3VycmVudF9nc3RfdGltZSA9IGdzdF9tc3Nfc3RyZWFtX2dldF9mcmFnbWVudF9nc3RfdGltZXN0YW1wIChzdHJlYW0pOwotKwotICAgZ3N0X21zc19mcmFnbWVudF9saXN0X2J1aWxkZXJfaW5pdCAoJmJ1aWxkZXIpOwotIAotICAgR1NUX0RFQlVHICgiQ3VycmVudCBwb3NpdGlvbjogJSIgR1NUX1RJTUVfRk9STUFULAotQEAgLTE1MTQsMyArMTU4MSw3NCBAQCBnc3RfbXNzX21hbmlmZXN0X2dldF9saXZlX3NlZWtfcmFuZ2UgKEdzdE1zc01hbmlmZXN0ICogbWFuaWZlc3QsIGdpbnQ2NCAqIHN0YXJ0LAotIAotICAgcmV0dXJuIHJldDsKLSB9Ci0rCi0rdm9pZAotK2dzdF9tc3NfbWFuaWZlc3RfbGl2ZV9hZGFwdGVyX3B1c2ggKEdzdE1zc1N0cmVhbSAqIHN0cmVhbSwgR3N0QnVmZmVyICogYnVmZmVyKQotK3sKLSsgIGdzdF9hZGFwdGVyX3B1c2ggKHN0cmVhbS0+bGl2ZV9hZGFwdGVyLCBidWZmZXIpOwotK30KLSsKLStnc2l6ZQotK2dzdF9tc3NfbWFuaWZlc3RfbGl2ZV9hZGFwdGVyX2F2YWlsYWJsZSAoR3N0TXNzU3RyZWFtICogc3RyZWFtKQotK3sKLSsgIHJldHVybiBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHN0cmVhbS0+bGl2ZV9hZGFwdGVyKTsKLSt9Ci0rCi0rR3N0QnVmZmVyICoKLStnc3RfbXNzX21hbmlmZXN0X2xpdmVfYWRhcHRlcl90YWtlX2J1ZmZlciAoR3N0TXNzU3RyZWFtICogc3RyZWFtLCBnc2l6ZSBuYnl0ZXMpCi0rewotKyAgcmV0dXJuIGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChzdHJlYW0tPmxpdmVfYWRhcHRlciwgbmJ5dGVzKTsKLSt9Ci0rCi0rZ2Jvb2xlYW4KLStnc3RfbXNzX3N0cmVhbV9mcmFnbWVudF9wYXJzaW5nX25lZWRlZCAoR3N0TXNzU3RyZWFtICogc3RyZWFtKQotK3sKLSsgIHJldHVybiBzdHJlYW0tPmZyYWdtZW50X3BhcnNlci5zdGF0dXMgPT0gR1NUX01TU19GUkFHTUVOVF9IRUFERVJfUEFSU0VSX0lOSVQ7Ci0rfQotKwotK3ZvaWQKLStnc3RfbXNzX3N0cmVhbV9wYXJzZV9mcmFnbWVudCAoR3N0TXNzU3RyZWFtICogc3RyZWFtLCBHc3RCdWZmZXIgKiBidWZmZXIpCi0rewotKyAgR3N0TXNzU3RyZWFtRnJhZ21lbnQgKmN1cnJlbnRfZnJhZ21lbnQgPSBOVUxMOwotKyAgY29uc3QgZ2NoYXIgKnN0cmVhbV90eXBlX25hbWU7Ci0rICBndWludDggaW5kZXg7Ci0rCi0rICBpZiAoIXN0cmVhbS0+aGFzX2xpdmVfZnJhZ21lbnRzKQotKyAgICByZXR1cm47Ci0rCi0rICBpZiAoIWdzdF9tc3NfZnJhZ21lbnRfcGFyc2VyX2FkZF9idWZmZXIgKCZzdHJlYW0tPmZyYWdtZW50X3BhcnNlciwgYnVmZmVyKSkKLSsgICAgcmV0dXJuOwotKwotKyAgY3VycmVudF9mcmFnbWVudCA9IHN0cmVhbS0+Y3VycmVudF9mcmFnbWVudC0+ZGF0YTsKLSsgIGN1cnJlbnRfZnJhZ21lbnQtPnRpbWUgPSBzdHJlYW0tPmZyYWdtZW50X3BhcnNlci50ZnhkLnRpbWU7Ci0rICBjdXJyZW50X2ZyYWdtZW50LT5kdXJhdGlvbiA9IHN0cmVhbS0+ZnJhZ21lbnRfcGFyc2VyLnRmeGQuZHVyYXRpb247Ci0rCi0rICBzdHJlYW1fdHlwZV9uYW1lID0KLSsgICAgICBnc3RfbXNzX3N0cmVhbV90eXBlX25hbWUgKGdzdF9tc3Nfc3RyZWFtX2dldF90eXBlIChzdHJlYW0pKTsKLSsKLSsgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0cmVhbS0+ZnJhZ21lbnRfcGFyc2VyLnRmcmYuZW50cmllc19jb3VudDsgaW5kZXgrKykgewotKyAgICBHTGlzdCAqbCA9IGdfbGlzdF9sYXN0IChzdHJlYW0tPmZyYWdtZW50cyk7Ci0rICAgIEdzdE1zc1N0cmVhbUZyYWdtZW50ICpsYXN0OwotKyAgICBHc3RNc3NTdHJlYW1GcmFnbWVudCAqZnJhZ21lbnQ7Ci0rCi0rICAgIGlmIChsID09IE5VTEwpCi0rICAgICAgYnJlYWs7Ci0rCi0rICAgIGxhc3QgPSAoR3N0TXNzU3RyZWFtRnJhZ21lbnQgKikgbC0+ZGF0YTsKLSsKLSsgICAgaWYgKGxhc3QtPnRpbWUgPT0gc3RyZWFtLT5mcmFnbWVudF9wYXJzZXIudGZyZi5lbnRyaWVzW2luZGV4XS50aW1lKQotKyAgICAgIGNvbnRpbnVlOwotKwotKyAgICBmcmFnbWVudCA9IGdfbmV3IChHc3RNc3NTdHJlYW1GcmFnbWVudCwgMSk7Ci0rICAgIGZyYWdtZW50LT5udW1iZXIgPSBsYXN0LT5udW1iZXIgKyAxOwotKyAgICBmcmFnbWVudC0+cmVwZXRpdGlvbnMgPSAxOwotKyAgICBmcmFnbWVudC0+dGltZSA9IHN0cmVhbS0+ZnJhZ21lbnRfcGFyc2VyLnRmcmYuZW50cmllc1tpbmRleF0udGltZTsKLSsgICAgZnJhZ21lbnQtPmR1cmF0aW9uID0gc3RyZWFtLT5mcmFnbWVudF9wYXJzZXIudGZyZi5lbnRyaWVzW2luZGV4XS5kdXJhdGlvbjsKLSsKLSsgICAgc3RyZWFtLT5mcmFnbWVudHMgPSBnX2xpc3RfYXBwZW5kIChzdHJlYW0tPmZyYWdtZW50cywgZnJhZ21lbnQpOwotKyAgICBHU1RfTE9HICgiQWRkaW5nIGZyYWdtZW50IG51bWJlcjogJXUgdG8gJXMgc3RyZWFtLCB0aW1lOiAlIiBHX0dVSU5UNjRfRk9STUFUCi0rICAgICAgICAiLCBkdXJhdGlvbjogJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCByZXBldGl0aW9uczogJXUiLAotKyAgICAgICAgZnJhZ21lbnQtPm51bWJlciwgc3RyZWFtX3R5cGVfbmFtZSwKLSsgICAgICAgIGZyYWdtZW50LT50aW1lLCBmcmFnbWVudC0+ZHVyYXRpb24sIGZyYWdtZW50LT5yZXBldGl0aW9ucyk7Ci0rICB9Ci0rfQotZGlmZiAtLWdpdCBhL2V4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzbWFuaWZlc3QuaCBiL2V4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzbWFuaWZlc3QuaAotaW5kZXggNmI3YjFmOTcxLi4wM2IwNjZhZTUgMTAwNjQ0Ci0tLS0gYS9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmgKLSsrKyBiL2V4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzbWFuaWZlc3QuaAotQEAgLTI2LDYgKzI2LDcgQEAKLSAjaW5jbHVkZSA8Z2xpYi5oPgotICNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0gI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSsjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgotIAotIEdfQkVHSU5fREVDTFMKLSAKLUBAIC03Myw1ICs3NCwxMSBAQCBjb25zdCBnY2hhciAqIGdzdF9tc3Nfc3RyZWFtX2dldF9sYW5nIChHc3RNc3NTdHJlYW0gKiBzdHJlYW0pOwotIAotIGNvbnN0IGdjaGFyICogZ3N0X21zc19zdHJlYW1fdHlwZV9uYW1lIChHc3RNc3NTdHJlYW1UeXBlIHN0cmVhbXR5cGUpOwotIAotK3ZvaWQgZ3N0X21zc19tYW5pZmVzdF9saXZlX2FkYXB0ZXJfcHVzaChHc3RNc3NTdHJlYW0gKiBzdHJlYW0sIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci0rZ3NpemUgZ3N0X21zc19tYW5pZmVzdF9saXZlX2FkYXB0ZXJfYXZhaWxhYmxlKEdzdE1zc1N0cmVhbSAqIHN0cmVhbSk7Ci0rR3N0QnVmZmVyICogZ3N0X21zc19tYW5pZmVzdF9saXZlX2FkYXB0ZXJfdGFrZV9idWZmZXIoR3N0TXNzU3RyZWFtICogc3RyZWFtLCBnc2l6ZSBuYnl0ZXMpOwotK2dib29sZWFuIGdzdF9tc3Nfc3RyZWFtX2ZyYWdtZW50X3BhcnNpbmdfbmVlZGVkKEdzdE1zc1N0cmVhbSAqIHN0cmVhbSk7Ci0rdm9pZCBnc3RfbXNzX3N0cmVhbV9wYXJzZV9mcmFnbWVudChHc3RNc3NTdHJlYW0gKiBzdHJlYW0sIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci0rCi0gR19FTkRfREVDTFMKLSAjZW5kaWYgLyogX19HU1RfTVNTX01BTklGRVNUX0hfXyAqLwotZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC9hZGFwdGl2ZWRlbXV4L2dzdGFkYXB0aXZlZGVtdXguYyBiL2dzdC1saWJzL2dzdC9hZGFwdGl2ZWRlbXV4L2dzdGFkYXB0aXZlZGVtdXguYwotaW5kZXggNjM0ZTRmMzg4Li5kZGNhNzI2YjYgMTAwNjQ0Ci0tLS0gYS9nc3QtbGlicy9nc3QvYWRhcHRpdmVkZW11eC9nc3RhZGFwdGl2ZWRlbXV4LmMKLSsrKyBiL2dzdC1saWJzL2dzdC9hZGFwdGl2ZWRlbXV4L2dzdGFkYXB0aXZlZGVtdXguYwotQEAgLTI5MSw2ICsyOTEsOSBAQCBnc3RfYWRhcHRpdmVfZGVtdXhfd2FpdF91bnRpbCAoR3N0Q2xvY2sgKiBjbG9jaywgR0NvbmQgKiBjb25kLCBHTXV0ZXggKiBtdXRleCwKLSAgICAgR3N0Q2xvY2tUaW1lIGVuZF90aW1lKTsKLSBzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2FkYXB0aXZlX2RlbXV4X2Nsb2NrX2NhbGxiYWNrIChHc3RDbG9jayAqIGNsb2NrLAotICAgICBHc3RDbG9ja1RpbWUgdGltZSwgR3N0Q2xvY2tJRCBpZCwgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLStzdGF0aWMgZ2Jvb2xlYW4KLStnc3RfYWRhcHRpdmVfZGVtdXhfcmVxdWlyZXNfcGVyaW9kaWNhbF9wbGF5bGlzdF91cGRhdGVfZGVmYXVsdCAoR3N0QWRhcHRpdmVEZW11eAotKyAgICAqIGRlbXV4KTsKLSAKLSAvKiB3ZSBjYW4ndCB1c2UgR19ERUZJTkVfQUJTVFJBQ1RfVFlQRSBiZWNhdXNlIHdlIG5lZWQgdGhlIGtsYXNzIGluIHRoZSBfaW5pdAotICAqIG1ldGhvZCB0byBnZXQgdG8gdGhlIHBhZHRlbXBsYXRlcyAqLwotQEAgLTQxMiw2ICs0MTUsOSBAQCBnc3RfYWRhcHRpdmVfZGVtdXhfY2xhc3NfaW5pdCAoR3N0QWRhcHRpdmVEZW11eENsYXNzICoga2xhc3MpCi0gICBrbGFzcy0+ZGF0YV9yZWNlaXZlZCA9IGdzdF9hZGFwdGl2ZV9kZW11eF9zdHJlYW1fZGF0YV9yZWNlaXZlZF9kZWZhdWx0OwotICAga2xhc3MtPmZpbmlzaF9mcmFnbWVudCA9IGdzdF9hZGFwdGl2ZV9kZW11eF9zdHJlYW1fZmluaXNoX2ZyYWdtZW50X2RlZmF1bHQ7Ci0gICBrbGFzcy0+dXBkYXRlX21hbmlmZXN0ID0gZ3N0X2FkYXB0aXZlX2RlbXV4X3VwZGF0ZV9tYW5pZmVzdF9kZWZhdWx0OwotKyAga2xhc3MtPnJlcXVpcmVzX3BlcmlvZGljYWxfcGxheWxpc3RfdXBkYXRlID0KLSsgICAgICBnc3RfYWRhcHRpdmVfZGVtdXhfcmVxdWlyZXNfcGVyaW9kaWNhbF9wbGF5bGlzdF91cGRhdGVfZGVmYXVsdDsKLSsKLSB9Ci0gCi0gc3RhdGljIHZvaWQKLUBAIC02ODYsNyArNjkyLDkgQEAgZ3N0X2FkYXB0aXZlX2RlbXV4X3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgICAgICAgICAgIGRlbXV4LT5wcml2LT5zdG9wX3VwZGF0ZXNfdGFzayA9IEZBTFNFOwotICAgICAgICAgICAgIGdfbXV0ZXhfdW5sb2NrICgmZGVtdXgtPnByaXYtPnVwZGF0ZXNfdGltZWRfbG9jayk7Ci0gICAgICAgICAgICAgLyogVGFzayB0byBwZXJpb2RpY2FsbHkgdXBkYXRlIHRoZSBtYW5pZmVzdCAqLwotLSAgICAgICAgICAgIGdzdF90YXNrX3N0YXJ0IChkZW11eC0+cHJpdi0+dXBkYXRlc190YXNrKTsKLSsgICAgICAgICAgICBpZiAoZGVtdXhfY2xhc3MtPnJlcXVpcmVzX3BlcmlvZGljYWxfcGxheWxpc3RfdXBkYXRlIChkZW11eCkpIHsKLSsgICAgICAgICAgICAgIGdzdF90YXNrX3N0YXJ0IChkZW11eC0+cHJpdi0+dXBkYXRlc190YXNrKTsKLSsgICAgICAgICAgICB9Ci0gICAgICAgICAgIH0KLSAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgIC8qIG5vIHN0cmVhbXMgKi8KLUBAIC0yMTI1LDYgKzIxMzMsMTMgQEAgZ3N0X2FkYXB0aXZlX2RlbXV4X3N0cmVhbV9kYXRhX3JlY2VpdmVkX2RlZmF1bHQgKEdzdEFkYXB0aXZlRGVtdXggKiBkZW11eCwKLSAgIHJldHVybiBnc3RfYWRhcHRpdmVfZGVtdXhfc3RyZWFtX3B1c2hfYnVmZmVyIChzdHJlYW0sIGJ1ZmZlcik7Ci0gfQotIAotK3N0YXRpYyBnYm9vbGVhbgotK2dzdF9hZGFwdGl2ZV9kZW11eF9yZXF1aXJlc19wZXJpb2RpY2FsX3BsYXlsaXN0X3VwZGF0ZV9kZWZhdWx0IChHc3RBZGFwdGl2ZURlbXV4Ci0rICAgICogZGVtdXgpCi0rewotKyAgcmV0dXJuIFRSVUU7Ci0rfQotKwotIHN0YXRpYyBHc3RGbG93UmV0dXJuCi0gX3NyY19jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLSB7Ci1AQCAtMzMzOCw3ICszMzUzLDE1IEBAIGdzdF9hZGFwdGl2ZV9kZW11eF9zdHJlYW1fZG93bmxvYWRfbG9vcCAoR3N0QWRhcHRpdmVEZW11eFN0cmVhbSAqIHN0cmVhbSkKLSAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzdHJlYW0tPnBhZCwgIkVPUywgY2hlY2tpbmcgdG8gc3RvcCBkb3dubG9hZCBsb29wIik7Ci0gICAgICAgLyogd2UgcHVzaCB0aGUgRU9TIGFmdGVyIHJlbGVhc2luZyB0aGUgb2JqZWN0IGxvY2sgKi8KLSAgICAgICBpZiAoZ3N0X2FkYXB0aXZlX2RlbXV4X2lzX2xpdmUgKGRlbXV4KSkgewotLSAgICAgICAgaWYgKGdzdF9hZGFwdGl2ZV9kZW11eF9zdHJlYW1fd2FpdF9tYW5pZmVzdF91cGRhdGUgKGRlbXV4LCBzdHJlYW0pKSB7Ci0rICAgICAgICBHc3RBZGFwdGl2ZURlbXV4Q2xhc3MgKmRlbXV4X2NsYXNzID0KLSsgICAgICAgICAgICBHU1RfQURBUFRJVkVfREVNVVhfR0VUX0NMQVNTIChkZW11eCk7Ci0rCi0rICAgICAgICAvKiB0aGlzIG1pZ2h0IGJlIGEgZnJhZ21lbnQgZG93bmxvYWQgZXJyb3IsIHJlZnJlc2ggdGhlIG1hbmlmZXN0LCBqdXN0IGluIGNhc2UgKi8KLSsgICAgICAgIGlmICghZGVtdXhfY2xhc3MtPnJlcXVpcmVzX3BlcmlvZGljYWxfcGxheWxpc3RfdXBkYXRlIChkZW11eCkpIHsKLSsgICAgICAgICAgcmV0ID0gZ3N0X2FkYXB0aXZlX2RlbXV4X3VwZGF0ZV9tYW5pZmVzdCAoZGVtdXgpOwotKyAgICAgICAgICBicmVhazsKLSsgICAgICAgIH0gZWxzZSBpZiAoZ3N0X2FkYXB0aXZlX2RlbXV4X3N0cmVhbV93YWl0X21hbmlmZXN0X3VwZGF0ZSAoZGVtdXgsCi0rICAgICAgICAgICAgICAgIHN0cmVhbSkpIHsKLSAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgICB9Ci0gICAgICAgICBnc3RfdGFza19zdG9wIChzdHJlYW0tPmRvd25sb2FkX3Rhc2spOwotZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC9hZGFwdGl2ZWRlbXV4L2dzdGFkYXB0aXZlZGVtdXguaCBiL2dzdC1saWJzL2dzdC9hZGFwdGl2ZWRlbXV4L2dzdGFkYXB0aXZlZGVtdXguaAotaW5kZXggNzgwZjRkOTNmLi45YTFhMWI3ZDEgMTAwNjQ0Ci0tLS0gYS9nc3QtbGlicy9nc3QvYWRhcHRpdmVkZW11eC9nc3RhZGFwdGl2ZWRlbXV4LmgKLSsrKyBiL2dzdC1saWJzL2dzdC9hZGFwdGl2ZWRlbXV4L2dzdGFkYXB0aXZlZGVtdXguaAotQEAgLTQ1OSw2ICs0NTksMjAgQEAgc3RydWN0IF9Hc3RBZGFwdGl2ZURlbXV4Q2xhc3MKLSAgICAqIHNlbGVjdGVkIHBlcmlvZC4KLSAgICAqLwotICAgR3N0Q2xvY2tUaW1lICgqZ2V0X3BlcmlvZF9zdGFydF90aW1lKSAoR3N0QWRhcHRpdmVEZW11eCAqZGVtdXgpOwotKwotKyAgLyoqCi0rICAgKiByZXF1aXJlc19wZXJpb2RpY2FsX3BsYXlsaXN0X3VwZGF0ZToKLSsgICAqIEBkZW11eDogI0dzdEFkYXB0aXZlRGVtdXgKLSsgICAqCi0rICAgKiBTb21lIGFkYXB0aXZlIHN0cmVhbWluZyBwcm90b2NvbHMgYWxsb3cgdGhlIGNsaWVudCB0byBkb3dubG9hZAotKyAgICogdGhlIHBsYXlsaXN0IG9uY2UgYW5kIGJ1aWxkIHVwIHRoZSBmcmFnbWVudCBsaXN0IGJhc2VkIG9uIHRoZQotKyAgICogY3VycmVudCBmcmFnbWVudCBtZXRhZGF0YS4gRm9yIHRob3NlIHByb3RvY29scyB0aGUgZGVtdXhlcgotKyAgICogZG9lc24ndCBuZWVkIHRvIHBlcmlvZGljYWxseSByZWZyZXNoIHRoZSBwbGF5bGlzdC4gVGhpcyB2ZnVuYwotKyAgICogaXMgcmVsZXZhbnQgb25seSBmb3IgbGl2ZSBwbGF5YmFjayBzY2VuYXJpb3MuCi0rICAgKgotKyAgICogUmV0dXJuOiAlVFJVRSBpZiB0aGUgcGxheWxpc3QgbmVlZHMgdG8gYmUgcmVmcmVzaGVkIHBlcmlvZGljYWxseSBieSB0aGUgZGVtdXhlci4KLSsgICAqLwotKyAgZ2Jvb2xlYW4gKCpyZXF1aXJlc19wZXJpb2RpY2FsX3BsYXlsaXN0X3VwZGF0ZSkgKEdzdEFkYXB0aXZlRGVtdXggKiBkZW11eCk7Ci0gfTsKLSAKLSBHVHlwZSAgICBnc3RfYWRhcHRpdmVfZGVtdXhfZ2V0X3R5cGUgKHZvaWQpOwotLS0gCi0yLjExLjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMS1zbW9vdGhzdHJlYW1pbmctaW1wbGVtZW50LWFkYXB0aXZlZGVtdXgtcy1nZXRfbGl2ZV9zLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMS1zbW9vdGhzdHJlYW1pbmctaW1wbGVtZW50LWFkYXB0aXZlZGVtdXgtcy1nZXRfbGl2ZV9zLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmQyOWUxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDEtc21vb3Roc3RyZWFtaW5nLWltcGxlbWVudC1hZGFwdGl2ZWRlbXV4LXMtZ2V0X2xpdmVfcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi1Gcm9tIGU5MTc4ZmEwODIxMTZkNGJmNzMzYjE4NGE4YjY5NTExMTJjMTc5MDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBNYXR0aGV3IFdhdGVycyA8bWF0dGhld0BjZW50cmljdWxhci5jb20+Ci1EYXRlOiBUaHUsIDEwIE5vdiAyMDE2IDE3OjE4OjM2ICsxMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIHNtb290aHN0cmVhbWluZzogaW1wbGVtZW50IGFkYXB0aXZlZGVtdXgncwotIGdldF9saXZlX3NlZWtfcmFuZ2UoKQotCi1BbGxvd3Mgc2Vla2luZyB0aHJvdWdoIHRoZSBhdmFpbGFibGUgZnJhZ21lbnRzIHRoYXQgYXJlIHN0aWxsIGF2YWlsYWJsZQotb24gdGhlIHNlcnZlciBhcyBzcGVjaWZpZWQgYnkgdGhlIERWUldpbmRvd0xlbmd0aCBhdHRyaWJ1dGUgaW4gdGhlCi1tYW5pZmVzdC4KLQotaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3NDE3OAotLS0tCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotCi0gZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NkZW11eC5jICAgIHwgMTMgKysrKysrCi0gZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NtYW5pZmVzdC5jIHwgODQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCi0gZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NtYW5pZmVzdC5oIHwgIDEgKwotIDMgZmlsZXMgY2hhbmdlZCwgOTggaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NkZW11eC5jIGIvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NkZW11eC5jCi1pbmRleCA5ZDBhZWNlMmIuLmI2NmUxOTUxNCAxMDA2NDQKLS0tLSBhL2V4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzZGVtdXguYwotKysrIGIvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NkZW11eC5jCi1AQCAtMTM4LDYgKzEzOCw4IEBAIGdzdF9tc3NfZGVtdXhfZ2V0X21hbmlmZXN0X3VwZGF0ZV9pbnRlcnZhbCAoR3N0QWRhcHRpdmVEZW11eCAqIGRlbXV4KTsKLSBzdGF0aWMgR3N0Rmxvd1JldHVybgotIGdzdF9tc3NfZGVtdXhfdXBkYXRlX21hbmlmZXN0X2RhdGEgKEdzdEFkYXB0aXZlRGVtdXggKiBkZW11eCwKLSAgICAgR3N0QnVmZmVyICogYnVmZmVyKTsKLStzdGF0aWMgZ2Jvb2xlYW4gZ3N0X21zc19kZW11eF9nZXRfbGl2ZV9zZWVrX3JhbmdlIChHc3RBZGFwdGl2ZURlbXV4ICogZGVtdXgsCi0rICAgIGdpbnQ2NCAqIHN0YXJ0LCBnaW50NjQgKiBzdG9wKTsKLSAKLSBzdGF0aWMgdm9pZAotIGdzdF9tc3NfZGVtdXhfY2xhc3NfaW5pdCAoR3N0TXNzRGVtdXhDbGFzcyAqIGtsYXNzKQotQEAgLTE5Miw2ICsxOTQsOCBAQCBnc3RfbXNzX2RlbXV4X2NsYXNzX2luaXQgKEdzdE1zc0RlbXV4Q2xhc3MgKiBrbGFzcykKLSAgICAgICBnc3RfbXNzX2RlbXV4X3N0cmVhbV91cGRhdGVfZnJhZ21lbnRfaW5mbzsKLSAgIGdzdGFkYXB0aXZlZGVtdXhfY2xhc3MtPnVwZGF0ZV9tYW5pZmVzdF9kYXRhID0KLSAgICAgICBnc3RfbXNzX2RlbXV4X3VwZGF0ZV9tYW5pZmVzdF9kYXRhOwotKyAgZ3N0YWRhcHRpdmVkZW11eF9jbGFzcy0+Z2V0X2xpdmVfc2Vla19yYW5nZSA9Ci0rICAgICAgZ3N0X21zc19kZW11eF9nZXRfbGl2ZV9zZWVrX3JhbmdlOwotIAotICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKG1zc2RlbXV4X2RlYnVnLCAibXNzZGVtdXgiLCAwLCAibXNzZGVtdXggcGx1Z2luIik7Ci0gfQotQEAgLTY1OSwzICs2NjMsMTIgQEAgZ3N0X21zc19kZW11eF91cGRhdGVfbWFuaWZlc3RfZGF0YSAoR3N0QWRhcHRpdmVEZW11eCAqIGRlbXV4LAotICAgZ3N0X21zc19tYW5pZmVzdF9yZWxvYWRfZnJhZ21lbnRzIChtc3NkZW11eC0+bWFuaWZlc3QsIGJ1ZmZlcik7Ci0gICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gfQotKwotK3N0YXRpYyBnYm9vbGVhbgotK2dzdF9tc3NfZGVtdXhfZ2V0X2xpdmVfc2Vla19yYW5nZSAoR3N0QWRhcHRpdmVEZW11eCAqIGRlbXV4LCBnaW50NjQgKiBzdGFydCwKLSsgICAgZ2ludDY0ICogc3RvcCkKLSt7Ci0rICBHc3RNc3NEZW11eCAqbXNzZGVtdXggPSBHU1RfTVNTX0RFTVVYX0NBU1QgKGRlbXV4KTsKLSsKLSsgIHJldHVybiBnc3RfbXNzX21hbmlmZXN0X2dldF9saXZlX3NlZWtfcmFuZ2UgKG1zc2RlbXV4LT5tYW5pZmVzdCwgc3RhcnQsIHN0b3ApOwotK30KLWRpZmYgLS1naXQgYS9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmMgYi9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmMKLWluZGV4IDFiNzJlOGRlMS4uMzE3YjNjZWY5IDEwMDY0NAotLS0tIGEvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NtYW5pZmVzdC5jCi0rKysgYi9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmMKLUBAIC00Miw2ICs0Miw3IEBAIEdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4gKG1zc2RlbXV4X2RlYnVnKTsKLSAKLSAjZGVmaW5lIE1TU19QUk9QX0JJVFJBVEUgICAgICAgICAgICAgICJCaXRyYXRlIgotICNkZWZpbmUgTVNTX1BST1BfRFVSQVRJT04gICAgICAgICAgICAgImQiCi0rI2RlZmluZSBNU1NfUFJPUF9EVlJfV0lORE9XX0xFTkdUSCAgICAiRFZSV2luZG93TGVuZ3RoIgotICNkZWZpbmUgTVNTX1BST1BfTEFOR1VBR0UgICAgICAgICAgICAgIkxhbmd1YWdlIgotICNkZWZpbmUgTVNTX1BST1BfTlVNQkVSICAgICAgICAgICAgICAgIm4iCi0gI2RlZmluZSBNU1NfUFJPUF9SRVBFVElUSU9OUyAgICAgICAgICAiciIKLUBAIC05NCw2ICs5NSw3IEBAIHN0cnVjdCBfR3N0TXNzTWFuaWZlc3QKLSAgIHhtbE5vZGVQdHIgeG1scm9vdG5vZGU7Ci0gCi0gICBnYm9vbGVhbiBpc19saXZlOwotKyAgZ2ludDY0IGR2cl93aW5kb3c7Ci0gCi0gICBHU3RyaW5nICpwcm90ZWN0aW9uX3N5c3RlbV9pZDsKLSAgIGdjaGFyICpwcm90ZWN0aW9uX2RhdGE7Ci1AQCAtMzMwLDYgKzMzMiwyMiBAQCBnc3RfbXNzX21hbmlmZXN0X25ldyAoR3N0QnVmZmVyICogZGF0YSkKLSAgICAgeG1sRnJlZSAobGl2ZV9zdHIpOwotICAgfQotIAotKyAgLyogdGhlIGVudGlyZSBmaWxlIGlzIGFsd2F5cyBhdmFpbGFibGUgZm9yIG5vbi1saXZlIHN0cmVhbXMgKi8KLSsgIGlmICghbWFuaWZlc3QtPmlzX2xpdmUpIHsKLSsgICAgbWFuaWZlc3QtPmR2cl93aW5kb3cgPSAwOwotKyAgfSBlbHNlIHsKLSsgICAgLyogaWYgMCwgb3Igbm9uLWV4aXN0ZW50LCB0aGUgbGVuZ3RoIGlzIGluZmluaXRlICovCi0rICAgIGdjaGFyICpkdnJfd2luZG93X3N0ciA9IChnY2hhciAqKSB4bWxHZXRQcm9wIChyb290LAotKyAgICAgICAgKHhtbENoYXIgKikgTVNTX1BST1BfRFZSX1dJTkRPV19MRU5HVEgpOwotKyAgICBpZiAoZHZyX3dpbmRvd19zdHIpIHsKLSsgICAgICBtYW5pZmVzdC0+ZHZyX3dpbmRvdyA9IGdfYXNjaWlfc3RydG91bGwgKGR2cl93aW5kb3dfc3RyLCBOVUxMLCAxMCk7Ci0rICAgICAgeG1sRnJlZSAoZHZyX3dpbmRvd19zdHIpOwotKyAgICAgIGlmIChtYW5pZmVzdC0+ZHZyX3dpbmRvdyA8PSAwKSB7Ci0rICAgICAgICBtYW5pZmVzdC0+ZHZyX3dpbmRvdyA9IDA7Ci0rICAgICAgfQotKyAgICB9Ci0rICB9Ci0rCi0gICBmb3IgKG5vZGVpdGVyID0gcm9vdC0+Y2hpbGRyZW47IG5vZGVpdGVyOyBub2RlaXRlciA9IG5vZGVpdGVyLT5uZXh0KSB7Ci0gICAgIGlmIChub2RlaXRlci0+dHlwZSA9PSBYTUxfRUxFTUVOVF9OT0RFCi0gICAgICAgICAmJiAoc3RyY21wICgoY29uc3QgY2hhciAqKSBub2RlaXRlci0+bmFtZSwgIlN0cmVhbUluZGV4IikgPT0gMCkpIHsKLUBAIC0xNDA2LDMgKzE0MjQsNjkgQEAgZ3N0X21zc19zdHJlYW1fZ2V0X2xhbmcgKEdzdE1zc1N0cmVhbSAqIHN0cmVhbSkKLSB7Ci0gICByZXR1cm4gc3RyZWFtLT5sYW5nOwotIH0KLSsKLStzdGF0aWMgR3N0Q2xvY2tUaW1lCi0rZ3N0X21zc19tYW5pZmVzdF9nZXRfZHZyX3dpbmRvd19sZW5ndGhfY2xvY2tfdGltZSAoR3N0TXNzTWFuaWZlc3QgKiBtYW5pZmVzdCkKLSt7Ci0rICBnaW50NjQgdGltZXNjYWxlOwotKwotKyAgLyogdGhlIGVudGlyZSBmaWxlIGlzIGFsd2F5cyBhdmFpbGFibGUgZm9yIG5vbi1saXZlIHN0cmVhbXMgKi8KLSsgIGlmIChtYW5pZmVzdC0+ZHZyX3dpbmRvdyA9PSAwKQotKyAgICByZXR1cm4gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSsKLSsgIHRpbWVzY2FsZSA9IGdzdF9tc3NfbWFuaWZlc3RfZ2V0X3RpbWVzY2FsZSAobWFuaWZlc3QpOwotKyAgcmV0dXJuIChHc3RDbG9ja1RpbWUpIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCAobWFuaWZlc3QtPmR2cl93aW5kb3csCi0rICAgICAgR1NUX1NFQ09ORCwgdGltZXNjYWxlKTsKLSt9Ci0rCi0rc3RhdGljIGdib29sZWFuCi0rZ3N0X21zc19zdHJlYW1fZ2V0X2xpdmVfc2Vla19yYW5nZSAoR3N0TXNzU3RyZWFtICogc3RyZWFtLCBnaW50NjQgKiBzdGFydCwKLSsgICAgZ2ludDY0ICogc3RvcCkKLSt7Ci0rICBHTGlzdCAqbDsKLSsgIEdzdE1zc1N0cmVhbUZyYWdtZW50ICpmcmFnbWVudDsKLSsgIGd1aW50NjQgdGltZXNjYWxlID0gZ3N0X21zc19zdHJlYW1fZ2V0X3RpbWVzY2FsZSAoc3RyZWFtKTsKLSsKLSsgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJlYW0tPmFjdGl2ZSwgRkFMU0UpOwotKwotKyAgLyogWFhYOiBhc3N1bWVzIGFsbCB0aGUgZGF0YSBpbiB0aGUgc3RyZWFtIGlzIHN0aWxsIGF2YWlsYWJsZSAqLwotKyAgbCA9IGdfbGlzdF9maXJzdCAoc3RyZWFtLT5mcmFnbWVudHMpOwotKyAgZnJhZ21lbnQgPSAoR3N0TXNzU3RyZWFtRnJhZ21lbnQgKikgbC0+ZGF0YTsKLSsgICpzdGFydCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCAoZnJhZ21lbnQtPnRpbWUsIEdTVF9TRUNPTkQsIHRpbWVzY2FsZSk7Ci0rCi0rICBsID0gZ19saXN0X2xhc3QgKHN0cmVhbS0+ZnJhZ21lbnRzKTsKLSsgIGZyYWdtZW50ID0gKEdzdE1zc1N0cmVhbUZyYWdtZW50ICopIGwtPmRhdGE7Ci0rICAqc3RvcCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCAoZnJhZ21lbnQtPnRpbWUgKyBmcmFnbWVudC0+ZHVyYXRpb24gKgotKyAgICAgIGZyYWdtZW50LT5yZXBldGl0aW9ucywgR1NUX1NFQ09ORCwgdGltZXNjYWxlKTsKLSsKLSsgIHJldHVybiBUUlVFOwotK30KLSsKLStnYm9vbGVhbgotK2dzdF9tc3NfbWFuaWZlc3RfZ2V0X2xpdmVfc2Vla19yYW5nZSAoR3N0TXNzTWFuaWZlc3QgKiBtYW5pZmVzdCwgZ2ludDY0ICogc3RhcnQsCi0rICAgIGdpbnQ2NCAqIHN0b3ApCi0rewotKyAgR1NMaXN0ICppdGVyOwotKyAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0rCi0rICBmb3IgKGl0ZXIgPSBtYW5pZmVzdC0+c3RyZWFtczsgaXRlcjsgaXRlciA9IGdfc2xpc3RfbmV4dCAoaXRlcikpIHsKLSsgICAgR3N0TXNzU3RyZWFtICpzdHJlYW0gPSBpdGVyLT5kYXRhOwotKwotKyAgICBpZiAoc3RyZWFtLT5hY3RpdmUpIHsKLSsgICAgICAvKiBGSVhNRTogYm91bmQgdGhpcyBjb3JyZWN0bHkgZm9yIG11bHRpcGxlIHN0cmVhbXMgKi8KLSsgICAgICBpZiAoIShyZXQgPSBnc3RfbXNzX3N0cmVhbV9nZXRfbGl2ZV9zZWVrX3JhbmdlIChzdHJlYW0sIHN0YXJ0LCBzdG9wKSkpCi0rICAgICAgICBicmVhazsKLSsgICAgfQotKyAgfQotKwotKyAgaWYgKHJldCAmJiBnc3RfbXNzX21hbmlmZXN0X2lzX2xpdmUgKG1hbmlmZXN0KSkgewotKyAgICBHc3RDbG9ja1RpbWUgZHZyX3dpbmRvdyA9Ci0rICAgICAgICBnc3RfbXNzX21hbmlmZXN0X2dldF9kdnJfd2luZG93X2xlbmd0aF9jbG9ja190aW1lIChtYW5pZmVzdCk7Ci0rCi0rICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoZHZyX3dpbmRvdykgJiYgKnN0b3AgLSAqc3RhcnQgPiBkdnJfd2luZG93KSB7Ci0rICAgICAgKnN0YXJ0ID0gKnN0b3AgLSBkdnJfd2luZG93OwotKyAgICB9Ci0rICB9Ci0rCi0rICByZXR1cm4gcmV0OwotK30KLWRpZmYgLS1naXQgYS9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmggYi9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmgKLWluZGV4IGFmNzQxOWMyMy4uNmI3YjFmOTcxIDEwMDY0NAotLS0tIGEvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NtYW5pZmVzdC5oCi0rKysgYi9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmgKLUBAIC01NCw2ICs1NCw3IEBAIHZvaWQgZ3N0X21zc19tYW5pZmVzdF9yZWxvYWRfZnJhZ21lbnRzIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0LCBHc3RCdWZmZXIgKiBkCi0gR3N0Q2xvY2tUaW1lIGdzdF9tc3NfbWFuaWZlc3RfZ2V0X21pbl9mcmFnbWVudF9kdXJhdGlvbiAoR3N0TXNzTWFuaWZlc3QgKiBtYW5pZmVzdCk7Ci0gY29uc3QgZ2NoYXIgKiBnc3RfbXNzX21hbmlmZXN0X2dldF9wcm90ZWN0aW9uX3N5c3RlbV9pZCAoR3N0TXNzTWFuaWZlc3QgKiBtYW5pZmVzdCk7Ci0gY29uc3QgZ2NoYXIgKiBnc3RfbXNzX21hbmlmZXN0X2dldF9wcm90ZWN0aW9uX2RhdGEgKEdzdE1zc01hbmlmZXN0ICogbWFuaWZlc3QpOwotK2dib29sZWFuIGdzdF9tc3NfbWFuaWZlc3RfZ2V0X2xpdmVfc2Vla19yYW5nZSAoR3N0TXNzTWFuaWZlc3QgKiBtYW5pZmVzdCwgZ2ludDY0ICogc3RhcnQsIGdpbnQ2NCAqIHN0b3ApOwotIAotIEdzdE1zc1N0cmVhbVR5cGUgZ3N0X21zc19zdHJlYW1fZ2V0X3R5cGUgKEdzdE1zc1N0cmVhbSAqc3RyZWFtKTsKLSBHc3RDYXBzICogZ3N0X21zc19zdHJlYW1fZ2V0X2NhcHMgKEdzdE1zc1N0cmVhbSAqIHN0cmVhbSk7Ci0tLSAKLTIuMTEuMAotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDAxLXNtb290aHN0cmVhbWluZy11c2UtdGhlLWR1cmF0aW9uLWZyb20tdGhlLWxpc3Qtb2YtZnIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDAxLXNtb290aHN0cmVhbWluZy11c2UtdGhlLWR1cmF0aW9uLWZyb20tdGhlLWxpc3Qtb2YtZnIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNTEwNDAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMS1zbW9vdGhzdHJlYW1pbmctdXNlLXRoZS1kdXJhdGlvbi1mcm9tLXRoZS1saXN0LW9mLWZyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotRnJvbSAwZmJlZThmMzc0MjdiODgzMzkxOTRiMjJiYTlhYTIxMDc3MmE4NjEzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTWF0dGhldyBXYXRlcnMgPG1hdHRoZXdAY2VudHJpY3VsYXIuY29tPgotRGF0ZTogVGh1LCAxMCBOb3YgMjAxNiAxNzoyMDoyNyArMTEwMAotU3ViamVjdDogW1BBVENIXSBzbW9vdGhzdHJlYW1pbmc6IHVzZSB0aGUgZHVyYXRpb24gZnJvbSB0aGUgbGlzdCBvZiBmcmFnbWVudHMKLSBpZiBub3QgcHJlc2VudCBpbiB0aGUgbWFuaWZlc3QKLQotUHJvdmlkZXMgYSBtb3JlIGFjY3VyYXRlIGR1cmF0aW9uIGZvciBsaXZlIHN0cmVhbXMgdGhhdCBtYXkgYmUgbWludXRlcwotb3IgaG91cnMgaW4gZnJvbnQgb2YgdGhlIGVhcmxpZXN0IGZyYWdtZW50LgotCi1odHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc0MTc4Ci0tLS0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLSBleHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmMgfCAyNCArKysrKysrKysrKysrKysrKysrKysrKysKLSAxIGZpbGUgY2hhbmdlZCwgMjQgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NtYW5pZmVzdC5jIGIvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NtYW5pZmVzdC5jCi1pbmRleCAzMTdiM2NlZjkuLjE0NGJiYjQyZCAxMDA2NDQKLS0tLSBhL2V4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzbWFuaWZlc3QuYwotKysrIGIvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NtYW5pZmVzdC5jCi1AQCAtODg4LDYgKzg4OCw3IEBAIGdzdF9tc3NfbWFuaWZlc3RfZ2V0X2R1cmF0aW9uIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0KQotICAgZ2NoYXIgKmR1cmF0aW9uOwotICAgZ3VpbnQ2NCBkdXIgPSAtMTsKLSAKLSsgIC8qIHRyeSB0aGUgcHJvcGVydHkgKi8KLSAgIGR1cmF0aW9uID0KLSAgICAgICAoZ2NoYXIgKikgeG1sR2V0UHJvcCAobWFuaWZlc3QtPnhtbHJvb3Rub2RlLAotICAgICAgICh4bWxDaGFyICopIE1TU19QUk9QX1NUUkVBTV9EVVJBVElPTik7Ci1AQCAtODk1LDYgKzg5NiwyOSBAQCBnc3RfbXNzX21hbmlmZXN0X2dldF9kdXJhdGlvbiAoR3N0TXNzTWFuaWZlc3QgKiBtYW5pZmVzdCkKLSAgICAgZHVyID0gZ19hc2NpaV9zdHJ0b3VsbCAoZHVyYXRpb24sIE5VTEwsIDEwKTsKLSAgICAgeG1sRnJlZSAoZHVyYXRpb24pOwotICAgfQotKyAgLyogZWxzZSB1c2UgdGhlIGZyYWdtZW50IGxpc3QgKi8KLSsgIGlmIChkdXIgPD0gMCkgewotKyAgICBndWludDY0IG1heF9kdXIgPSAwOwotKyAgICBHU0xpc3QgKml0ZXI7Ci0rCi0rICAgIGZvciAoaXRlciA9IG1hbmlmZXN0LT5zdHJlYW1zOyBpdGVyOyBpdGVyID0gZ19zbGlzdF9uZXh0IChpdGVyKSkgewotKyAgICAgIEdzdE1zc1N0cmVhbSAqc3RyZWFtID0gaXRlci0+ZGF0YTsKLSsKLSsgICAgICBpZiAoc3RyZWFtLT5hY3RpdmUpIHsKLSsgICAgICAgIGlmIChzdHJlYW0tPmZyYWdtZW50cykgewotKyAgICAgICAgICBHTGlzdCAqbCA9IGdfbGlzdF9sYXN0IChzdHJlYW0tPmZyYWdtZW50cyk7Ci0rICAgICAgICAgIEdzdE1zc1N0cmVhbUZyYWdtZW50ICpmcmFnbWVudCA9IChHc3RNc3NTdHJlYW1GcmFnbWVudCAqKSBsLT5kYXRhOwotKyAgICAgICAgICBndWludDY0IGZyYWdfZHVyID0KLSsgICAgICAgICAgICAgIGZyYWdtZW50LT50aW1lICsgZnJhZ21lbnQtPmR1cmF0aW9uICogZnJhZ21lbnQtPnJlcGV0aXRpb25zOwotKyAgICAgICAgICBtYXhfZHVyID0gTUFYIChmcmFnX2R1ciwgbWF4X2R1cik7Ci0rICAgICAgICB9Ci0rICAgICAgfQotKyAgICB9Ci0rCi0rICAgIGlmIChtYXhfZHVyICE9IDApCi0rICAgICAgZHVyID0gbWF4X2R1cjsKLSsgIH0KLSsKLSAgIHJldHVybiBkdXI7Ci0gfQotIAotLS0gCi0yLjExLjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMS12a2Rpc3BsYXktVXNlLWlmZGVmLWZvci1wbGF0Zm9ybS1zcGVjaWZpYy1kZWZpbmVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMS12a2Rpc3BsYXktVXNlLWlmZGVmLWZvci1wbGF0Zm9ybS1zcGVjaWZpYy1kZWZpbmVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYWE2MmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDAxLXZrZGlzcGxheS1Vc2UtaWZkZWYtZm9yLXBsYXRmb3JtLXNwZWNpZmljLWRlZmluZXMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRnJvbSAxNTIzYWI0NjJjMWJmMTkwNTU5NjBjZWQyNTVmNDg3MmI2Y2Y5ZjVjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFdlZCwgNSBKdWwgMjAxNyAxMTowMDo0MiArMDMwMAorU3ViamVjdDogW1BBVENIIDEvMl0gdmtkaXNwbGF5OiBVc2UgaWZkZWYgZm9yIHBsYXRmb3JtIHNwZWNpZmljIGRlZmluZXMKKworVktfS0hSXypfU1VSRkFDRV9FWFRFTlNJT05fTkFNRSBhcmUgb25seSBhdmFpbGFibGUgd2hlbiBjb3JyZXNwb25kaW5nCitXU0kgaXMgZW5hYmxlZC4KKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg0NTM5XQorLS0tCisgZXh0L3Z1bGthbi92a2Rpc3BsYXkuYyB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2V4dC92dWxrYW4vdmtkaXNwbGF5LmMgYi9leHQvdnVsa2FuL3ZrZGlzcGxheS5jCitpbmRleCA1NTAxMzRjZDguLmFkZTVkNDU4MyAxMDA2NDQKKy0tLSBhL2V4dC92dWxrYW4vdmtkaXNwbGF5LmMKKysrKyBiL2V4dC92dWxrYW4vdmtkaXNwbGF5LmMKK0BAIC00NDgsMTEgKzQ0OCwxNSBAQCBnc3RfdnVsa2FuX2Rpc3BsYXlfdHlwZV90b19leHRlbnNpb25fc3RyaW5nIChHc3RWdWxrYW5EaXNwbGF5VHlwZSB0eXBlKQorICAgaWYgKHR5cGUgPT0gR1NUX1ZVTEtBTl9ESVNQTEFZX1RZUEVfTk9ORSkKKyAgICAgcmV0dXJuIE5VTEw7CisgCisrI2lmIEdTVF9WVUxLQU5fSEFWRV9XSU5ET1dfWENCCisgICBpZiAodHlwZSAmIEdTVF9WVUxLQU5fRElTUExBWV9UWVBFX1hDQikKKyAgICAgcmV0dXJuIFZLX0tIUl9YQ0JfU1VSRkFDRV9FWFRFTlNJT05fTkFNRTsKKysjZW5kaWYKKyAKKysjaWYgR1NUX1ZVTEtBTl9IQVZFX1dJTkRPV19XQVlMQU5ECisgICBpZiAodHlwZSAmIEdTVF9WVUxLQU5fRElTUExBWV9UWVBFX1dBWUxBTkQpCisgICAgIHJldHVybiBWS19LSFJfV0FZTEFORF9TVVJGQUNFX0VYVEVOU0lPTl9OQU1FOworKyNlbmRpZgorIAorICAgcmV0dXJuIE5VTEw7CisgfQorLS0gCisyLjEzLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMi12dWxrYW4tVXNlLXRoZS1nZW5lcmF0ZWQtdmVyc2lvbi1vZi12a2NvbmZpZy5oLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMi12dWxrYW4tVXNlLXRoZS1nZW5lcmF0ZWQtdmVyc2lvbi1vZi12a2NvbmZpZy5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZjE0NWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDAyLXZ1bGthbi1Vc2UtdGhlLWdlbmVyYXRlZC12ZXJzaW9uLW9mLXZrY29uZmlnLmgucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSBjMjNlMWRjMjJkZWI0OTU1NjFjZmZiODc3ZWRiMjc0NmI3NDBhMWZhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFdlZCwgNSBKdWwgMjAxNyAxMTowNzowNSArMDMwMAorU3ViamVjdDogW1BBVENIIDIvMl0gdnVsa2FuOiBVc2UgdGhlIGdlbmVyYXRlZCB2ZXJzaW9uIG9mIHZrY29uZmlnLmgKKworQnVpbGQgZmFpbHMgaW4gZXh0L3Z1bGthbi94Y2IgYW5kIGV4dC92dWxrYW4vd2F5bGFuZCB3aGVuOgorKiBidWlsZGluZyBmcm9tIHRhcmJhbGwKKyogYnVpbGRpbmcgb3V0LW9mLXRyZWUKKyogT25seSBvbmUgV1NJIGludGVncmF0aW9uICh4Y2Igb3Igd2F5bGFuZCkgaXMgZW5hYmxlZCBieSBjb25maWd1cmUuYWMKK1RoaXMgaXMgYmVjYXVzZSB2a2NvbmZpZy5oIGZyb20gc291cmNlIGRpcmVjdG9yeSBnZXRzIHVzZWQgaW5zdGVhZAorb2YgdGhlIGdlbmVyYXRlZCBvbmUuCisKK0FkZCB0aGUgY29ycmVjdCBidWlsZCBkaXJlY3RvcnkgdG8gIi1JIi4gVXNlIGFuZ2xlIGJyYWNrZXQKK2luY2x1ZGUgaW4gdmthcGkuaCBzbyB0aGF0IGl0IGFjdHVhbGx5IGxvb2tzIGluIHRoZSBpbmNsdWRlIHNlYXJjaAorcGF0aCBpbnN0ZWFkIG9mIGRlZmF1bHRpbmcgdG8gdGhlIHNhbWUgKHNvdXJjZSB0cmVlKSBkaXJlY3RvcnkuCisKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc4NDUzOV0KKy0tLQorIGV4dC92dWxrYW4vdmthcGkuaCAgICAgICAgICAgICB8IDIgKy0KKyBleHQvdnVsa2FuL3dheWxhbmQvTWFrZWZpbGUuYW0gfCAxICsKKyBleHQvdnVsa2FuL3hjYi9NYWtlZmlsZS5hbSAgICAgfCAxICsKKyAzIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZXh0L3Z1bGthbi92a2FwaS5oIGIvZXh0L3Z1bGthbi92a2FwaS5oCitpbmRleCBlOWMyM2FhOTIuLmEzN2MyOWQwZiAxMDA2NDQKKy0tLSBhL2V4dC92dWxrYW4vdmthcGkuaAorKysrIGIvZXh0L3Z1bGthbi92a2FwaS5oCitAQCAtMjMsNyArMjMsNyBAQAorIAorICNkZWZpbmUgVktfUFJPVE9UWVBFUworIAorLSNpbmNsdWRlICJ2a2NvbmZpZy5oIgorKyNpbmNsdWRlIDx2a2NvbmZpZy5oPgorICNpbmNsdWRlICJ2a19md2QuaCIKKyAjaW5jbHVkZSAidmttYWNyb3MuaCIKKyAKK2RpZmYgLS1naXQgYS9leHQvdnVsa2FuL3dheWxhbmQvTWFrZWZpbGUuYW0gYi9leHQvdnVsa2FuL3dheWxhbmQvTWFrZWZpbGUuYW0KK2luZGV4IGY5MmQ4NWUyYy4uMTBjZmI3MGU2IDEwMDY0NAorLS0tIGEvZXh0L3Z1bGthbi93YXlsYW5kL01ha2VmaWxlLmFtCisrKysgYi9leHQvdnVsa2FuL3dheWxhbmQvTWFrZWZpbGUuYW0KK0BAIC0xNCw2ICsxNCw3IEBAIG5vaW5zdF9IRUFERVJTID0gXAorIAorIGxpYmdzdHZ1bGthbl93YXlsYW5kX2xhX0NGTEFHUyA9IFwKKyAJLUkkKHRvcF9zcmNkaXIpL2dzdC1saWJzIFwKKysJLUkkKHRvcF9idWlsZGRpcikvZXh0L3Z1bGthbiBcCisgCS1JJCh0b3Bfc3JjZGlyKS9leHQvdnVsa2FuIFwKKyAJLUkkKHRvcF9idWlsZGRpcikvZ3N0LWxpYnMgXAorIAkkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSBcCitkaWZmIC0tZ2l0IGEvZXh0L3Z1bGthbi94Y2IvTWFrZWZpbGUuYW0gYi9leHQvdnVsa2FuL3hjYi9NYWtlZmlsZS5hbQoraW5kZXggN2RlYmNmZjllLi5iNTEwMzU1MWIgMTAwNjQ0CistLS0gYS9leHQvdnVsa2FuL3hjYi9NYWtlZmlsZS5hbQorKysrIGIvZXh0L3Z1bGthbi94Y2IvTWFrZWZpbGUuYW0KK0BAIC0xNCw2ICsxNCw3IEBAIG5vaW5zdF9IRUFERVJTID0gXAorIAorIGxpYmdzdHZ1bGthbl94Y2JfbGFfQ0ZMQUdTID0gXAorIAktSSQodG9wX3NyY2RpcikvZ3N0LWxpYnMgXAorKwktSSQodG9wX2J1aWxkZGlyKS9leHQvdnVsa2FuIFwKKyAJLUkkKHRvcF9zcmNkaXIpL2V4dC92dWxrYW4gXAorIAktSSQodG9wX2J1aWxkZGlyKS9nc3QtbGlicyBcCisgCSQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpIFwKKy0tIAorMi4xMy4yCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkL2xpbmstd2l0aC1saWJ2Y2hvc3RpZi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkL2xpbmstd2l0aC1saWJ2Y2hvc3RpZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzgyYjE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvbGluay13aXRoLWxpYnZjaG9zdGlmLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0FkZCAtbHZjaG9zdGlmIHRvIGxpbmsgd2hlbiB1c2luZyAtbEVHTCBvbiBycGkKKworVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIGxpYkVHTCBmcm9tIHVzZXJsYW5kIHVzZXMgc3lib2xzCitmcm9tIHRoaXMgbGlicmFyeS4KKworbGliL2xpYkVHTC5zby4xLjAuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyMTogMDAwMDAwMDAgICAgIDAgRlVOQyAgICBHTE9CQUwgREVGQVVMVCAgVU5EIHZjX2Rpc3BtYW54X2VsZW1lbnRfYWRkCisgIDE1NTI6IDAwMDAwMDAwICAgICAwIEZVTkMgICAgR0xPQkFMIERFRkFVTFQgIFVORCB2Y19kaXNwbWFueF9lbGVtZW50X2FkZAorCitUaGVzZSBzeW1ib2xzIGFyZSBwcm92aWRlZCBieSBsaWJ2Y2hvc3RpZiBhcyBzZWVuIGJlbG93CisKK2xpYi9saWJ2Y2hvc3RpZi5zbworICAgMjUyOiAwMDAwYjE2MSAgIDE5MiBGVU5DICAgIEdMT0JBTCBERUZBVUxUICAgIDkgdmNfZGlzcG1hbnhfZWxlbWVudF9hZGQKKyAgIDgwOTogMDAwMGIxNjEgICAxOTIgRlVOQyAgICBHTE9CQUwgREVGQVVMVCAgICA5IHZjX2Rpc3BtYW54X2VsZW1lbnRfYWRkCisKK1dpdGggdGhpcyBleHBsaWNpdCBsaW5rLCBwbHVnaW5zIGZhaWwgZHVyaW5nIHJ1bnRpbWUKKworKGdzdC1wbHVnaW4tc2Nhbm5lcjo1NzEpOiBHU3RyZWFtZXItV0FSTklORyAqKjogRmFpbGVkIHRvIGxvYWQgcGx1Z2luICcvdXNyL2xpYi9nc3RyZWFtZXItMS4wL2xpYmdzdG9teC5zbyc6IEVycm9yIHJlbG9jYXRpbmcgL3Vzci9saWIvbGliZ3N0Z2wtMS4wLnNvLjA6IHZjX2Rpc3BtYW54X2VsZW1lbnRfYWRkOiBzeW1ib2wgbm90IGZvdW5kCisoZ3N0LXBsdWdpbi1zY2FubmVyOjU3MSk6IEdTdHJlYW1lci1XQVJOSU5HICoqOiBGYWlsZWQgdG8gbG9hZCBwbHVnaW4gJy91c3IvbGliL2dzdHJlYW1lci0xLjAvbGliZ3N0b3BlbmdsLnNvJzogRXJyb3IgcmVsb2NhdGluZyAvdXNyL2xpYi9saWJnc3RnbC0xLjAuc28uMDogdmNfZGlzcG1hbnhfZWxlbWVudF9hZGQ6IHN5bWJvbCBub3QgZm91bmQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitJbmRleDogZ3N0LXBsdWdpbnMtYmFkLTEuMTAuNC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnc3QtcGx1Z2lucy1iYWQtMS4xMC40Lm9yaWcvY29uZmlndXJlLmFjCisrKysgZ3N0LXBsdWdpbnMtYmFkLTEuMTAuNC9jb25maWd1cmUuYWMKK0BAIC03ODUsNyArNzg1LDcgQEAgY2FzZSAkaG9zdCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQVZFX0VHTD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFWRV9HTEVTMj15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFWRV9FR0xfUlBJPXllcworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xfTElCUz0iLWxiY21faG9zdCAtbHZjb3MgLWx2Y2hpcV9hcm0iCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTF9MSUJTPSItbGJjbV9ob3N0IC1sdmNob3N0aWYgLWx2Y29zIC1sdmNoaXFfYXJtIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xfQ0ZMQUdTPSIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDX0RFRklORShVU0VfRUdMX1JQSSwgWzFdLCBbVXNlIFJQaSBwbGF0Zm9ybV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWRfMS4xMC40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWRfMS4xMC40LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmI0MDUzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkXzEuMTAuNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLXJlcXVpcmUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLmluYwotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03M2E1ODU1YTgxMTlkZWIwMTdmNWYxM2NmMzI3MDk1ZCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MjE2ODJlNGU4ZmVhNTI0MTNmZDI2YzYwYWNiOTA3ZTUgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0L3R0YS9jcmMzMi5oO2JlZ2lubGluZT0xMjtlbmRsaW5lPTI5O21kNT0yN2RiMjY5YzU3NWQxZTUzMTdmZmZjYTJkMzNiM2I1MCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvdHRhL2ZpbHRlcnMuaDtiZWdpbmxpbmU9MTI7ZW5kbGluZT0yOTttZDU9OGEwODI3MDY1NmYyZjhhZDdiYjM2NTViODMxMzhlNWEiCi0KLVNSQ19VUkkgPSAiIFwKLSAgICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtYmFkL2dzdC1wbHVnaW5zLWJhZC0ke1BWfS50YXIueHogXAotICAgIGZpbGU6Ly9jb25maWd1cmUtYWxsb3ctdG8tZGlzYWJsZS1saWJzc2gyLnBhdGNoIFwKLSAgICBmaWxlOi8vZml4LW1heWJlLXVuaW5pdGlhbGl6ZWQtd2FybmluZ3Mtd2hlbi1jb21waWxpbmctd2l0aC1Pcy5wYXRjaCBcCi0gICAgZmlsZTovL2F2b2lkLWluY2x1ZGluZy1zeXMtcG9sbC5oLWRpcmVjdGx5LnBhdGNoIFwKLSAgICBmaWxlOi8vZW5zdXJlLXZhbGlkLXNlbnRpbmVscy1mb3ItZ3N0X3N0cnVjdHVyZV9nZXQtZXRjLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAwMS1nc3RyZWFtZXItZ2wucGMuaW4tZG9uLXQtYXBwZW5kLUdMX0NGTEFHUy10by1DRkxBR1MucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDA5LWdsaW1hZ2VzaW5rLURvd25yYW5rLXRvLW1hcmdpbmFsLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAwMS1pbnRyb3NwZWN0aW9uLm00LXByZWZpeC1wa2djb25maWctcGF0aHMtd2l0aC1QS0dfQ09OLnBhdGNoIFwKLSAgICBmaWxlOi8vMDAwMS1QcmVwZW5kLVBLR19DT05GSUdfU1lTUk9PVF9ESVItdG8tcGtnLWNvbmZpZy1vdXRwdXQucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDAxLXNtb290aHN0cmVhbWluZy1pbXBsZW1lbnQtYWRhcHRpdmVkZW11eC1zLWdldF9saXZlX3MucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDAxLXNtb290aHN0cmVhbWluZy11c2UtdGhlLWR1cmF0aW9uLWZyb20tdGhlLWxpc3Qtb2YtZnIucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDAxLW1zc2RlbXV4LWltcHJvdmVkLWxpdmUtcGxheWJhY2stc3VwcG9ydC5wYXRjaCBcCi0iCi1TUkNfVVJJW21kNXN1bV0gPSAiMjc1NzEwM2U1N2EwOTZhMWEwNWIzYWI4NWI4MzgxYWYiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjNkZGFlNTA2YjNhMjIzYjk0ODY5YTBkM2VlYTNlOWExMmU4NDdmOTRkMmQwZTBiOTcxMDJjZTEzZWNkNjk2NiIKLQotUyA9ICIke1dPUktESVJ9L2dzdC1wbHVnaW5zLWJhZC0ke1BWfSIKLQotRVhUUkFfT0VDT05GICs9ICJXQVlMQU5EX1BST1RPQ09MU19TWVNST09UX0RJUj0ke1JFQ0lQRV9TWVNST09UfSIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWRfMS4xMi4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWRfMS4xMi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMjFkYTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZF8xLjEyLjIuYmIKQEAgLTAsMCArMSwyNiBAQAorcmVxdWlyZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTczYTU4NTVhODExOWRlYjAxN2Y1ZjEzY2YzMjcwOTVkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT0yMTY4MmU0ZThmZWE1MjQxM2ZkMjZjNjBhY2I5MDdlNSAiCisKK1NSQ19VUkkgPSAiIFwKKyAgICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtYmFkL2dzdC1wbHVnaW5zLWJhZC0ke1BWfS50YXIueHogXAorICAgIGZpbGU6Ly9jb25maWd1cmUtYWxsb3ctdG8tZGlzYWJsZS1saWJzc2gyLnBhdGNoIFwKKyAgICBmaWxlOi8vZml4LW1heWJlLXVuaW5pdGlhbGl6ZWQtd2FybmluZ3Mtd2hlbi1jb21waWxpbmctd2l0aC1Pcy5wYXRjaCBcCisgICAgZmlsZTovL2F2b2lkLWluY2x1ZGluZy1zeXMtcG9sbC5oLWRpcmVjdGx5LnBhdGNoIFwKKyAgICBmaWxlOi8vZW5zdXJlLXZhbGlkLXNlbnRpbmVscy1mb3ItZ3N0X3N0cnVjdHVyZV9nZXQtZXRjLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMS1nc3RyZWFtZXItZ2wucGMuaW4tZG9uLXQtYXBwZW5kLUdMX0NGTEFHUy10by1DRkxBR1MucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA5LWdsaW1hZ2VzaW5rLURvd25yYW5rLXRvLW1hcmdpbmFsLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMS1pbnRyb3NwZWN0aW9uLm00LXByZWZpeC1wa2djb25maWctcGF0aHMtd2l0aC1QS0dfQ09OLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMS1QcmVwZW5kLVBLR19DT05GSUdfU1lTUk9PVF9ESVItdG8tcGtnLWNvbmZpZy1vdXRwdXQucGF0Y2ggXAorICAgIGZpbGU6Ly9saW5rLXdpdGgtbGlidmNob3N0aWYucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAxLXZrZGlzcGxheS1Vc2UtaWZkZWYtZm9yLXBsYXRmb3JtLXNwZWNpZmljLWRlZmluZXMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAyLXZ1bGthbi1Vc2UtdGhlLWdlbmVyYXRlZC12ZXJzaW9uLW9mLXZrY29uZmlnLmgucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjU2ODNmMGVhOTFmOWUxZTA2MTNiMGY2ZjcyOTk4MGE3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjljMmM3ZWRkZTRmNTlkNzRlYjQxNGUwNzAxYzU1MTMxZjU2MmU1YzYwNWEzY2U5YjA5MTc1NGYxMDZjMDllMzciCisKK1MgPSAiJHtXT1JLRElSfS9nc3QtcGx1Z2lucy1iYWQtJHtQVn0iCisKK0VYVFJBX09FQ09ORiArPSAiV0FZTEFORF9QUk9UT0NPTFNfU1lTUk9PVF9ESVI9JHtSRUNJUEVfU1lTUk9PVH0iCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9lbmNvZGViaW4tTmVlZC1tb3JlLWJ1ZmZlcnMtaW4tb3V0cHV0LXF1ZXVlLWZvci1iZXR0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2VuY29kZWJpbi1OZWVkLW1vcmUtYnVmZmVycy1pbi1vdXRwdXQtcXVldWUtZm9yLWJldHQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNDFlM2MuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2VuY29kZWJpbi1OZWVkLW1vcmUtYnVmZmVycy1pbi1vdXRwdXQtcXVldWUtZm9yLWJldHQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi1Gcm9tIDU0MGUwMmM5MmM3NWUwOGI5MDMyNjg2M2RjNzg3ZmE1Y2FkZjlkYTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgotRGF0ZTogRnJpLCAxMyBNYXIgMjAxNSAxODowNDozMSArMDgwMAotU3ViamVjdDogW1BBVENIXSBlbmNvZGViaW46IE5lZWQgbW9yZSBidWZmZXJzIGluIG91dHB1dCBxdWV1ZSBmb3IgYmV0dGVyCi0gcGVyZm9ybWFuY2UKLQotTmVlZCBtb3JlIGJ1ZmZlcnMgaW4gb3V0cHV0IHF1ZXVlIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UKLQotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDQxOTFdCi0KLVNpZ25lZC1vZmYtYnk6IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+Ci0tLS0KLSBnc3QvZW5jb2RpbmcvZ3N0ZW5jb2RlYmluLmMgfCAgICAzICstLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2dzdC9lbmNvZGluZy9nc3RlbmNvZGViaW4uYyBiL2dzdC9lbmNvZGluZy9nc3RlbmNvZGViaW4uYwotaW5kZXggNjcyOGU1OC4uMzJkYWFlNCAxMDA2NDQKLS0tLSBhL2dzdC9lbmNvZGluZy9nc3RlbmNvZGViaW4uYwotKysrIGIvZ3N0L2VuY29kaW5nL2dzdGVuY29kZWJpbi5jCi1AQCAtMTIyOCw4ICsxMjI4LDcgQEAgX2NyZWF0ZV9zdHJlYW1fZ3JvdXAgKEdzdEVuY29kZUJpbiAqIGViaW4sIEdzdEVuY29kaW5nUHJvZmlsZSAqIHNwcm9mLAotICAgICogV2Ugb25seSB1c2UgYSAxYnVmZmVyIGxvbmcgcXVldWUgaGVyZSwgdGhlIGFjdHVhbCBxdWV1ZWluZyB3aWxsIGJlIGRvbmUKLSAgICAqIGluIHRoZSBpbnB1dCBxdWV1ZSAqLwotICAgbGFzdCA9IHNncm91cC0+b3V0cXVldWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJxdWV1ZSIsIE5VTEwpOwotLSAgZ19vYmplY3Rfc2V0IChzZ3JvdXAtPm91dHF1ZXVlLCAibWF4LXNpemUtYnVmZmVycyIsIChndWludDMyKSAxLAotLSAgICAgICJtYXgtc2l6ZS1ieXRlcyIsIChndWludDMyKSAwLCAibWF4LXNpemUtdGltZSIsIChndWludDY0KSAwLAotKyAgZ19vYmplY3Rfc2V0IChzZ3JvdXAtPm91dHF1ZXVlLCAibWF4LXNpemUtdGltZSIsIChndWludDY0KSAwLAotICAgICAgICJzaWxlbnQiLCBUUlVFLCBOVUxMKTsKLSAKLSAgIGdzdF9iaW5fYWRkIChHU1RfQklOIChlYmluKSwgc2dyb3VwLT5vdXRxdWV1ZSk7Ci0tLSAKLTEuNy45LjUKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlXzEuMTAuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZV8xLjEwLjQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjODE2NzAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlXzEuMTAuNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLXJlcXVpcmUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS5pbmMKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzU0Y2U5MzQ1NzI3MTc1ZmY2NmQxN2I2N2ZmNTFmNTggXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTY3NjJlZDQ0MmIzODIyMzg3YTUxYzkyZDkyOGVhZDBkIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQucGw7YmVnaW5saW5lPTI7ZW5kbGluZT0xNzttZDU9YTRlMTgzMGZjZTA3ODAyOGM4ZjA5NzQxNjEyNzI2MDciCi0KLVNSQ19VUkkgPSAiIFwKLSAgICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtYmFzZS9nc3QtcGx1Z2lucy1iYXNlLSR7UFZ9LnRhci54eiBcCi0gICAgZmlsZTovL2dldC1jYXBzLWZyb20tc3JjLXBhZC13aGVuLXF1ZXJ5LWNhcHMucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDAzLXNzYXBhcnNlLWVuaGFuY2UtU1NBLXRleHQtbGluZXMtcGFyc2luZy5wYXRjaCBcCi0gICAgZmlsZTovLzAwMDQtc3VicGFyc2Utc2V0LW5lZWRfc2VnbWVudC1hZnRlci1zaW5rLXBhZC1yZWNlaXZlZC1HUy5wYXRjaCBcCi0gICAgZmlsZTovL2VuY29kZWJpbi1OZWVkLW1vcmUtYnVmZmVycy1pbi1vdXRwdXQtcXVldWUtZm9yLWJldHQucGF0Y2ggXAotICAgIGZpbGU6Ly9tYWtlLWdpb191bml4XzJfMC1kZXBlbmRlbmN5LWNvbmZpZ3VyYWJsZS5wYXRjaCBcCi0gICAgZmlsZTovLzAwMDEtaW50cm9zcGVjdGlvbi5tNC1wcmVmaXgtcGtnY29uZmlnLXBhdGhzLXdpdGgtUEtHX0NPTi5wYXRjaCBcCi0iCi1TUkNfVVJJW21kNXN1bV0gPSAiZjZiNDZmOGZhYzAxZWI3NzNkNTU2ZTNlZmMzNjllODYiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjZkMjQ1YjZiM2Q0Y2I3MzNmODFlYmIwMjEwNzRjNTI1ZWNlODNkYjBjMTBlOTMyNzk0YjMzOWI4ZDkzNWViNyIKLQotUyA9ICIke1dPUktESVJ9L2dzdC1wbHVnaW5zLWJhc2UtJHtQVn0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2VfMS4xMi4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlXzEuMTIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGUwYjhiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlXzEuMTIuMi5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWM1NGNlOTM0NTcyNzE3NWZmNjZkMTdiNjdmZjUxZjU4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT02NzYyZWQ0NDJiMzgyMjM4N2E1MWM5MmQ5MjhlYWQwZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jb21tb24vY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LnBsO2JlZ2lubGluZT0yO2VuZGxpbmU9MTc7bWQ1PWE0ZTE4MzBmY2UwNzgwMjhjOGYwOTc0MTYxMjcyNjA3IgorCitTUkNfVVJJID0gIiBcCisgICAgaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWJhc2UvZ3N0LXBsdWdpbnMtYmFzZS0ke1BWfS50YXIueHogXAorICAgIGZpbGU6Ly9nZXQtY2Fwcy1mcm9tLXNyYy1wYWQtd2hlbi1xdWVyeS1jYXBzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMy1zc2FwYXJzZS1lbmhhbmNlLVNTQS10ZXh0LWxpbmVzLXBhcnNpbmcucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA0LXN1YnBhcnNlLXNldC1uZWVkX3NlZ21lbnQtYWZ0ZXItc2luay1wYWQtcmVjZWl2ZWQtR1MucGF0Y2ggXAorICAgIGZpbGU6Ly9tYWtlLWdpb191bml4XzJfMC1kZXBlbmRlbmN5LWNvbmZpZ3VyYWJsZS5wYXRjaCBcCisgICAgZmlsZTovLzAwMDEtaW50cm9zcGVjdGlvbi5tNC1wcmVmaXgtcGtnY29uZmlnLXBhdGhzLXdpdGgtUEtHX0NPTi5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiNzdmNTM3OWM0Y2E2Nzc2MTZiNDE1ZTNiM2ZmOTU1NzgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTA2N2RjZTNhZmUxOTdhOTUzNmZlYTAxMDdjNzcyMTNmYWI1MzZkZmY0YTIxM2IwN2ZjNjAzNzhkNTUxMDY3NSIKKworUyA9ICIke1dPUktESVJ9L2dzdC1wbHVnaW5zLWJhc2UtJHtQVn0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QvMDAwMS12NGwyLUZpeC00Sy1jb2xvcmltZXRyeS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC8wMDAxLXY0bDItRml4LTRLLWNvbG9yaW1ldHJ5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ODgxOGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QvMDAwMS12NGwyLUZpeC00Sy1jb2xvcmltZXRyeS5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitGcm9tIDU0NTY0NmNjY2JhMjQzMjM2ZTEwMzYyZmU3MzI1Zjg5YmU1N2RhMWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+CitEYXRlOiBUdWUsIDE4IEp1bCAyMDE3IDExOjI4OjM3IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIHY0bDI6IEZpeCA0SyBjb2xvcmltZXRyeQorCitTaW5jZSAxLjYsIHRoZSB0cmFuc2ZlciBmdW5jdGlvbiBmb3IgQlQyMDIwIGhhcyBiZWVuIGNoYW5nZWQgZnJvbSBCVDcwOQordG8gQlQyMDIwXzEyLiBJdCdzIHRoZSBzYW1lIGZ1bmN0aW9uLCBidXQgd2l0aCBtb3JlIHByZWNpc2lvbi4gQXMgYSBzaWRlCitlZmZlY3QsIHRoZSBWNEwyIGNvbG9ycHNhY2UgZGlkbid0IG1hdGNoIEdTdHJlYW1lciBjb2xvcnNwYWNlLiBXaGVuCitHU3RyZWFtZXIgZW5kZWQgdXAgbWFraW5nIGEgZ3Vlc3MsIGl0IHdvdWxkIG5vdCBtYXRjaCBhbnl0aGluZyBzdXBwb3J0ZWQKK2J5IFY0TDIgYW55bW9yZS4gVGhpcyB0aGlzIGJ5IHVzaW5nIEJUMjAyMF8xMiBmb3IgQlQyMDIwIGNvbG9yc3BhY2UgYW5kCitCVDIwMjAgdHJhbnNmZXIgZnVuY3Rpb24gaW4gcmVwbGFjZW1lbnQgb2YgQlQ3MDkgd2hlbmV2ZXIgYSA0SworcmVzb2x1dGlvbiBpcyBkZXRlY3RlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogTmljb2xhcyBEZWNoZXNuZSA8bmljb2xhcy5kZWNoZXNuZUBsaW5hcm8ub3JnPgorCistLS0KKyBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmMgfCA3ICsrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jIGIvc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jCitpbmRleCA2MTI0NDQ1NWYuLmFhZTJjNTVlNyAxMDA2NDQKKy0tLSBhL3N5cy92NGwyL2dzdHY0bDJvYmplY3QuYworKysrIGIvc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jCitAQCAtMTk2MCw3ICsxOTYwLDcgQEAgZ3N0X3Y0bDJfb2JqZWN0X2dldF9jb2xvcnNwYWNlIChzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCwKKyAgICAgY2FzZSBWNEwyX0NPTE9SU1BBQ0VfQlQyMDIwOgorICAgICAgIGNpbmZvLT5yYW5nZSA9IEdTVF9WSURFT19DT0xPUl9SQU5HRV8xNl8yMzU7CisgICAgICAgY2luZm8tPm1hdHJpeCA9IEdTVF9WSURFT19DT0xPUl9NQVRSSVhfQlQyMDIwOworLSAgICAgIGNpbmZvLT50cmFuc2ZlciA9IEdTVF9WSURFT19UUkFOU0ZFUl9CVDcwOTsKKysgICAgICBjaW5mby0+dHJhbnNmZXIgPSBHU1RfVklERU9fVFJBTlNGRVJfQlQyMDIwXzEyOworICAgICAgIGNpbmZvLT5wcmltYXJpZXMgPSBHU1RfVklERU9fQ09MT1JfUFJJTUFSSUVTX0JUMjAyMDsKKyAgICAgICBicmVhazsKKyAgICAgY2FzZSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUyNDBNOgorQEAgLTIwNjIsNyArMjA2MiwxMCBAQCBnc3RfdjRsMl9vYmplY3RfZ2V0X2NvbG9yc3BhY2UgKHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10LAorIAorICAgc3dpdGNoICh0cmFuc2ZlcikgeworICAgICBjYXNlIFY0TDJfWEZFUl9GVU5DXzcwOToKKy0gICAgICBjaW5mby0+dHJhbnNmZXIgPSBHU1RfVklERU9fVFJBTlNGRVJfQlQ3MDk7CisrICAgICAgaWYgKGZtdC0+Zm10LnBpeC5oZWlnaHQgPiAyMTYwKQorKyAgICAgICAgY2luZm8tPnRyYW5zZmVyID0gR1NUX1ZJREVPX1RSQU5TRkVSX0JUMjAyMF8xMjsKKysgICAgICBlbHNlCisrICAgICAgICBjaW5mby0+dHJhbnNmZXIgPSBHU1RfVklERU9fVFJBTlNGRVJfQlQ3MDk7CisgICAgICAgYnJlYWs7CisgICAgIGNhc2UgVjRMMl9YRkVSX0ZVTkNfU1JHQjoKKyAgICAgICBjaW5mby0+dHJhbnNmZXIgPSBHU1RfVklERU9fVFJBTlNGRVJfU1JHQjsKKy0tIAorMi4xNC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC8wMDAxLXY0bDJvYmplY3QtQWxzby1hZGQtdmlkZW9tZXRhLWlmLXRoZXJlLWlzLXBhZGRpbmctdG8ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QvMDAwMS12NGwyb2JqZWN0LUFsc28tYWRkLXZpZGVvbWV0YS1pZi10aGVyZS1pcy1wYWRkaW5nLXRvLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTlhMjNlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC8wMDAxLXY0bDJvYmplY3QtQWxzby1hZGQtdmlkZW9tZXRhLWlmLXRoZXJlLWlzLXBhZGRpbmctdG8ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1Gcm9tIDIyYmUwMjYxMmFkYzc1N2Y2YTQzY2VmYzZlZTY1ZWNhZWY2OGYwZDkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+Ci1EYXRlOiBUaHUsIDIzIE1hciAyMDE3IDIyOjEzOjA1ICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIHY0bDJvYmplY3Q6IEFsc28gYWRkIHZpZGVvbWV0YSBpZiB0aGVyZSBpcyBwYWRkaW5nIHRvIHRoZQotIHJpZ2h0IGFuZCBib3R0b20KLQotaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc4MDQ3OAotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsxLjEwLjVdCi0KLVNpZ25lZC1vZmYtYnk6IENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KLS0tLQotIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYyB8IDUgKysrLS0KLSAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jIGIvc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jCi1pbmRleCA5MWM4ZmYwLi5lZDQ2NTRlIDEwMDY0NAotLS0tIGEvc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jCi0rKysgYi9zeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmMKLUBAIC0zMDcwLDkgKzMwNzAsMTAgQEAgc3RvcmVfaW5mbzoKLSAgIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJHb3Qgc2l6ZWltYWdlICUiIEdfR1NJWkVfRk9STUFULAotICAgICAgIGluZm8tPnNpemUpOwotIAotLSAgLyogdG8gYXZvaWQgY29waWVzIHdlIG5lZWQgdmlkZW8gbWV0YSBpZiB0b3Agb3IgbGVmdCBwYWRkaW5nICovCi0rICAvKiB0byBhdm9pZCBjb3BpZXMgd2UgbmVlZCB2aWRlbyBtZXRhIGlmIHRoZXJlIGlzIHBhZGRpbmcgKi8KLSAgIHY0bDJvYmplY3QtPm5lZWRfdmlkZW9fbWV0YSA9Ci0tICAgICAgKChhbGlnbi0+cGFkZGluZ190b3AgKyBhbGlnbi0+cGFkZGluZ19sZWZ0KSAhPSAwKTsKLSsgICAgICAoKGFsaWduLT5wYWRkaW5nX3RvcCArIGFsaWduLT5wYWRkaW5nX2xlZnQgKyBhbGlnbi0+cGFkZGluZ19yaWdodCArCi0rICAgICAgICAgIGFsaWduLT5wYWRkaW5nX2JvdHRvbSkgIT0gMCk7Ci0gCi0gICAvKiAuLi4gb3IgaWYgc3RyaWRlIGlzIG5vbiAic3RhbmRhcmQiICovCi0gICBpZiAoIXN0YW5kYXJkX3N0cmlkZSkKLS0tIAotMi43LjQKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kXzEuMTAuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZF8xLjEwLjQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NDQ3YmYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kXzEuMTAuNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLXJlcXVpcmUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC5pbmMKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC5wbDtiZWdpbmxpbmU9MjtlbmRsaW5lPTE3O21kNT1hNGUxODMwZmNlMDc4MDI4YzhmMDk3NDE2MTI3MjYwNyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvcmVwbGF5Z2Fpbi9yZ2FuYWx5c2lzLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMzttZDU9YjYwZWJlZmQ1YjJmNWE4ZTBjYWI2YmZlZTM5MWE1ZmUiCi0KLVNSQ19VUkkgPSAiIFwKLSAgICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLSR7UFZ9LnRhci54eiBcCi0gICAgZmlsZTovLzAwMDEtZ3N0cnRwbXA0Z3BheS1zZXQtZGFmYXVsdC12YWx1ZS1mb3ItTVBFRzQtd2l0aG91dC1jby5wYXRjaCBcCi0gICAgZmlsZTovL2F2b2lkLWluY2x1ZGluZy1zeXMtcG9sbC5oLWRpcmVjdGx5LnBhdGNoIFwKLSAgICBmaWxlOi8vZW5zdXJlLXZhbGlkLXNlbnRpbmVsLWZvci1nc3Rfc3RydWN0dXJlX2dldC5wYXRjaCBcCi0gICAgZmlsZTovLzAwMDEtaW50cm9zcGVjdGlvbi5tNC1wcmVmaXgtcGtnY29uZmlnLXBhdGhzLXdpdGgtUEtHX0NPTi5wYXRjaCBcCi0gICAgZmlsZTovLzAwMDEtdjRsMm9iamVjdC1BbHNvLWFkZC12aWRlb21ldGEtaWYtdGhlcmUtaXMtcGFkZGluZy10by5wYXRjaCBcCi0iCi1TUkNfVVJJW21kNXN1bV0gPSAiY2MwY2MxM2NkYjA3ZDQyMzc2MDBiNjg4NmI4MWYzMWQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGE4NmM2MTQzNGE4YzQ0NjY1MzY1YmQwYjM1NTdhMDQwOTM3ZDFmNDRiZjY5Y2FlZTRlOWVhODE2Y2U3NGQ3ZSIKLQotUyA9ICIke1dPUktESVJ9L2dzdC1wbHVnaW5zLWdvb2QtJHtQVn0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2RfMS4xMi4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kXzEuMTIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTU5M2M5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kXzEuMTIuMi5iYgpAQCAtMCwwICsxLDIxIEBACityZXF1aXJlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQucGw7YmVnaW5saW5lPTI7ZW5kbGluZT0xNzttZDU9YTRlMTgzMGZjZTA3ODAyOGM4ZjA5NzQxNjEyNzI2MDcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0L3JlcGxheWdhaW4vcmdhbmFseXNpcy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjM7bWQ1PWI2MGViZWZkNWIyZjVhOGUwY2FiNmJmZWUzOTFhNWZlIgorCitTUkNfVVJJID0gIiBcCisgICAgaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0ke1BWfS50YXIueHogXAorICAgIGZpbGU6Ly8wMDAxLWdzdHJ0cG1wNGdwYXktc2V0LWRhZmF1bHQtdmFsdWUtZm9yLU1QRUc0LXdpdGhvdXQtY28ucGF0Y2ggXAorICAgIGZpbGU6Ly9hdm9pZC1pbmNsdWRpbmctc3lzLXBvbGwuaC1kaXJlY3RseS5wYXRjaCBcCisgICAgZmlsZTovL2Vuc3VyZS12YWxpZC1zZW50aW5lbC1mb3ItZ3N0X3N0cnVjdHVyZV9nZXQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAxLWludHJvc3BlY3Rpb24ubTQtcHJlZml4LXBrZ2NvbmZpZy1wYXRocy13aXRoLVBLR19DT04ucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAxLXY0bDItRml4LTRLLWNvbG9yaW1ldHJ5LnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICIyMDI1NDIxN2Q5ODA1NDg0NTMyZTA4ZmYxYzNhYTI5NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1NTkxZWU3MjA4YWIzMDI4OWEzMDY1OGE4MmI3NmJmODcxNjljOTI3NTcyZDliNzk0ZjNhNDFlZDQ4ZTFlZTk2IgorCitTID0gIiR7V09SS0RJUn0vZ3N0LXBsdWdpbnMtZ29vZC0ke1BWfSIKKworUlBST1ZJREVTXyR7UE59LXB1bHNlYXVkaW8gKz0gIiR7UE59LXB1bHNlIgorUlBST1ZJREVTXyR7UE59LXNvdXAgKz0gIiR7UE59LXNvdXBodHRwc3JjIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseS5pbmMKaW5kZXggNzA4YWQ3YS4uNjBhYTk2OCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHkuaW5jCkBAIC0xOCw3ICsxOCw2IEBACiBQQUNLQUdFQ09ORklHW2NkaW9dICAgICA9ICItLWVuYWJsZS1jZGlvLC0tZGlzYWJsZS1jZGlvLGxpYmNkaW8iCiBQQUNLQUdFQ09ORklHW2R2ZHJlYWRdICA9ICItLWVuYWJsZS1kdmRyZWFkLC0tZGlzYWJsZS1kdmRyZWFkLGxpYmR2ZHJlYWQiCiBQQUNLQUdFQ09ORklHW2xhbWVdICAgICA9ICItLWVuYWJsZS1sYW1lLC0tZGlzYWJsZS1sYW1lLGxhbWUiCi1QQUNLQUdFQ09ORklHW21hZF0gICAgICA9ICItLWVuYWJsZS1tYWQsLS1kaXNhYmxlLW1hZCxsaWJtYWQiCiBQQUNLQUdFQ09ORklHW21wZWcyZGVjXSA9ICItLWVuYWJsZS1tcGVnMmRlYywtLWRpc2FibGUtbXBlZzJkZWMsbXBlZzJkZWMiCiBQQUNLQUdFQ09ORklHW21wZzEyM10gICA9ICItLWVuYWJsZS1tcGcxMjMsLS1kaXNhYmxlLW1wZzEyMyxtcGcxMjMiCiBQQUNLQUdFQ09ORklHW3gyNjRdICAgICA9ICItLWVuYWJsZS14MjY0LC0tZGlzYWJsZS14MjY0LHgyNjQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfMS4xMC40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5XzEuMTAuNC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJhMmNhYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfMS4xMC40LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotcmVxdWlyZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5LmluYwotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy9jaGVjay9lbGVtZW50cy94aW5nbXV4LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMTttZDU9NGM3NzFiOGFmMTg4NzI0ODU1Y2I5OWNhZGQzOTAwNjgiCi0KLVNSQ19VUkkgPSAiIFwKLSAgICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtdWdseS9nc3QtcGx1Z2lucy11Z2x5LSR7UFZ9LnRhci54eiBcCi0gICAgZmlsZTovLzAwMDEtaW50cm9zcGVjdGlvbi5tNC1wcmVmaXgtcGtnY29uZmlnLXBhdGhzLXdpdGgtUEtHX0NPTi5wYXRjaCBcCi0iCi1TUkNfVVJJW21kNXN1bV0gPSAiYzY4ZDA1MDljOTk4MGIwYjcwYTRiODM2ZmY3M2ZmZjEiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjM4NmM3N2NhODQ1OWNiYTQzMWVkMGI2M2RhNzgwYzcwNjJjN2NjNDgwNTVkMjIyMDI0ZDhlYWYxOThmZmE1OSIKLQotUyA9ICIke1dPUktESVJ9L2dzdC1wbHVnaW5zLXVnbHktJHtQVn0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfMS4xMi4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5XzEuMTIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTU2Yzg1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5XzEuMTIuMi5iYgpAQCAtMCwwICsxLDEzIEBACityZXF1aXJlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHkuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3hpbmdtdXguYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIxO21kNT00Yzc3MWI4YWYxODg3MjQ4NTVjYjk5Y2FkZDM5MDA2OCIKKworU1JDX1VSSSA9ICIgXAorICAgIGh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy11Z2x5L2dzdC1wbHVnaW5zLXVnbHktJHtQVn0udGFyLnh6IFwKKyAgICBmaWxlOi8vMDAwMS1pbnRyb3NwZWN0aW9uLm00LXByZWZpeC1wa2djb25maWctcGF0aHMtd2l0aC1QS0dfQ09OLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJlYjYzOTAyMTkwNWEzMmNmMzAxM2NhNWJhYzFiNjk0ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxY2MzOTQyYmJmM2VhODdkYTNlMzU0MzdkNGUwMTRlOTkxYjEwM2RiMjJhNjE3NGY2MmE5OGM4OWMzZjVmNDY2IgorCitTID0gIiR7V09SS0RJUn0vZ3N0LXBsdWdpbnMtdWdseS0ke1BWfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy5pbmMKaW5kZXggM2Y2ZDRjMy4uYzQwZDM5OCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy5pbmMKQEAgLTQ5LDMgKzQ5LDYgQEAKIGRvX2NvbmZpZ3VyZVtwcmVmdW5jc10gKz0gIiBkZWxldGVfcGtnX200X2ZpbGUgcGF0Y2hfZ3RrX2RvY19tYWtlZmlsZXMiCiAKIFBBQ0tBR0VTX0RZTkFNSUMgPSAiXiR7UE59LS4qIgorCisjIHFlbXUtbWlwczY0OiBlcnJvciB3aGlsZSBsb2FkaW5nIHNoYXJlZCBsaWJyYXJpZXM6IC4uLi9yZWNpcGUtc3lzcm9vdC91c3IvbGliL2xpYmd0aHJlYWQtMi4wLnNvLjA6IEVMRiBmaWxlIGRhdGEgZW5jb2Rpbmcgbm90IGxpdHRsZS1lbmRpYW4KK0VYVFJBX09FQ09ORl9hcHBlbmRfbWlwczY0ID0gIiAtLWRpc2FibGUtaW50cm9zcGVjdGlvbiAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1weXRob24uaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcHl0aG9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjFiOTMwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcHl0aG9uLmluYwpAQCAtMCwwICsxLDM1IEBACitTVU1NQVJZID0gIlB5dGhvbiBiaW5kaW5ncyBmb3IgR1N0cmVhbWVyIDEuMCIKK0hPTUVQQUdFID0gImh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXB5dGhvbi8iCitTRUNUSU9OID0gIm11bHRpbWVkaWEiCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorCitERVBFTkRTID0gImdzdHJlYW1lcjEuMCBweXRob24zLXB5Z29iamVjdCIKK1JERVBFTkRTXyR7UE59ICs9ICJnc3RyZWFtZXIxLjAgcHl0aG9uMy1weWdvYmplY3QiCisKK1BOUkVBTCA9ICJnc3QtcHl0aG9uIgorCitTUkNfVVJJID0gImh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy8ke1BOUkVBTH0vJHtQTlJFQUx9LSR7UFZ9LnRhci54eiIKKworUyA9ICIke1dPUktESVJ9LyR7UE5SRUFMfS0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3R1dGlsczMtYmFzZSB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZ29iamVjdC1pbnRyb3NwZWN0aW9uCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgICMgZ3N0cHl0aG9ucGx1Z2luIGhhcmRjb2RlcyB0aGUgbG9jYXRpb24gb2YgdGhlIGxpYnB5dGhvbiBmcm9tIHRoZSBidWlsZAorICAgICMgd29ya3NwYWNlIGFuZCB0aGVuIGZhaWxzIGF0IHJ1bnRpbWUuIFdlIGNhbiBvdmVycmlkZSBpdCB1c2luZworICAgICMgLS13aXRoLWxpYnB5dGhvbi1kaXI9JHtsaWJkaXJ9LCBidXQgaXQgc3RpbGwgZmFpbHMgYmVjYXVzZSBpdCBsb29rcyBmb3IgYQorICAgICMgc3ltbGlua2VkIGxpYnJhcnkgZW5kaW5nIGluIC5zbyBpbnN0ZWFkIG9mIHRoZSBhY3R1YWxseSBsaWJyYXJ5IHdpdGgKKyAgICAjIExJQk5BTUUuc28uTUFKT1IuTUlOT1IuIEFsdGhvdWdoIHdlIGNvdWxkIHBhdGNoIHRoZSBjb2RlIHRvIHVzZSB0aGUgcGF0aAorICAgICMgd2Ugd2FudCwgaXQgd2lsbCBicmVhayBhZ2FpbiBpZiB0aGUgbGlicmFyeSB2ZXJzaW9uIGV2ZXIgY2hhbmdlcy4gV2UgbmVlZAorICAgICMgdG8gdGhpbmsgYWJvdXQgdGhlIGJlc3Qgd2F5IG9mIGhhbmRsaW5nIHRoaXMgYW5kIHBvc3NpYmx5IGNvbnN1bHQKKyAgICAjIHVwc3RyZWFtLgorICAgICMKKyAgICAjIE5vdGUgdGhhdCB0aGlzIHBhcnRpY3VsYXIgZmluZCBsaW5lIGlzIHRha2VuIGZyb20gdGhlIERlYmlhbiBwYWNrYWdpbmcgZm9yCisgICAgIyBnc3QtcHl0aG9uMS4wLgorICAgIGZpbmQgIiR7RH0iIFwKKyAgICAgICAgLW5hbWUgJyoucHljJyAtbyBcCisgICAgICAgIC1uYW1lICcqLnB5bycgLW8gXAorICAgICAgICAtbmFtZSAnKi5sYScgLW8gXAorICAgICAgICAtbmFtZSAnbGliZ3N0cHl0aG9ucGx1Z2luKicgXAorICAgICAgICAtZGVsZXRlCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1weXRob25fMS4xMi4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcHl0aG9uXzEuMTIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmRjMDViCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcHl0aG9uXzEuMTIuMi5iYgpAQCAtMCwwICsxLDcgQEAKK3JlcXVpcmUgZ3N0cmVhbWVyMS4wLXB5dGhvbi5pbmMKKworU1JDX1VSSSA9ICJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvJHtQTlJFQUx9LyR7UE5SRUFMfS0ke1BWfS50YXIueHoiCitTUkNfVVJJW21kNXN1bV0gPSAiZGE1YzlmYTQyMjkwYmMzMDA2NjYxYzg2OWUwNzZmZmUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjRjYzMyYWQ0NmE2NTNlMWFlMmYyN2FjMmExNjA3OGIwMDA3NWM5MTA2YjI3ODRhMWE4ZDFmMzFjNTA2OWU0NyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzM0ZGVhZTRlMzk1Y2EwN2U3MjVhYjAwNzZhNWY3NDAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1ydHNwLXNlcnZlci5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1ydHNwLXNlcnZlci5pbmMKaW5kZXggNzE5MWY5OC4uNjgxNzNjZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXIuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyLmluYwpAQCAtMzYsMyArMzYsNSBAQAogCiBkb19jb25maWd1cmVbcHJlZnVuY3NdICs9ICIgZGVsZXRlX3BrZ19tNF9maWxlIHBhdGNoX2d0a19kb2NfbWFrZWZpbGVzIgogCisjIE5lZWRzIHRvIGJlIGRpc2FibGUgZHVlIHRvIGEgZGVwZW5kZW5jeSBvbiBnc3RyZWFtZXItcGx1Z2lucyBpbnRyb3NwZWN0aW9uIGZpbGVzCitFWFRSQV9PRUNPTkZfYXBwZW5kX21pcHM2NCA9ICIgLS1kaXNhYmxlLWludHJvc3BlY3Rpb24gIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXJfMS4xMC40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXJfMS4xMC40LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWE5YTUzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyXzEuMTAuNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotcmVxdWlyZSBnc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXIuaW5jCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJlZjU4N2ZhNjM5M2UwOWJjMjZmODg0NTEwNTk2ZTMwNSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIyZjZlMTJmZDRlMzU2OGVlMTkwZGMyNGU1N2U0YzNhODc4OTcxYzNhM2ZiNjkwNGE5Njc0NDA0ZmFjMjU2ZGU2IgotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02NzYyZWQ0NDJiMzgyMjM4N2E1MWM5MmQ5MjhlYWQwZCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyXzEuMTIuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyXzEuMTIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDI2Y2NhCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXJfMS4xMi4yLmJiCkBAIC0wLDAgKzEsNiBAQAorcmVxdWlyZSBnc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXIuaW5jCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwMjI3NTdjYWIxODNmNWI5NzAwODZlOTEwMWM2MGE5OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkOGJhOTI2NGU4YWU2ZTQ0MDI5MzMyOGU3NTllNDA0NTZmMTYxYWE2NjA3N2IzMTQzZGQwNzU4MTEzNjE5MGIzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02NzYyZWQ0NDJiMzgyMjM4N2E1MWM5MmQ5MjhlYWQwZCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXZhYXBpLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXZhYXBpLmluYwppbmRleCBlZjA3MzRiLi5hYmZjYzY1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC12YWFwaS5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtdmFhcGkuaW5jCkBAIC0yMiwxMiArMjIsMjEgQEAKIAogUEFDS0FHRVMgPSsgIiR7UE59LXRlc3RzIgogCisjIE9wZW5HTCBwYWNrYWdlY29uZmlnIGZhY3RvcmVkIG91dCB0byBtYWtlIGl0IGVhc3kgZm9yIGRpc3Ryb3MKKyMgYW5kIEJTUCBsYXllcnMgdG8gcGljayBlaXRoZXIgZ2x4LCBlZ2wsIG9yIG5vIEdMLiBCeSBkZWZhdWx0LAorIyB0cnkgZGV0ZWN0aW5nIFgxMSBmaXJzdCwgYW5kIGlmIGZvdW5kICh3aXRoIE9wZW5HTCksIHVzZSBHTFgsCisjIG90aGVyd2lzZSB0cnkgdG8gY2hlY2sgaWYgRUdMIGNhbiBiZSB1c2VkLgorUEFDS0FHRUNPTkZJR19HTCA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEgb3BlbmdsJywgJ2dseCcsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAgICAgJ29wZW5nbCcsICdlZ2wnLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLCBkKSwgZCl9IgorCiBQQUNLQUdFQ09ORklHID8/PSAiZHJtIFwKLSAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCB4MTEnLCAnZ2x4JywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtQQUNLQUdFQ09ORklHX0dMfSBcCiAgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuZmlsdGVyKCdESVNUUk9fRkVBVFVSRVMnLCAnd2F5bGFuZCB4MTEnLCBkKX0iCiAKIFBBQ0tBR0VDT05GSUdbZHJtXSA9ICItLWVuYWJsZS1kcm0sLS1kaXNhYmxlLWRybSx1ZGV2IGxpYmRybSIKLVBBQ0tBR0VDT05GSUdbZ2x4XSA9ICItLWVuYWJsZS1nbHgsLS1kaXNhYmxlLWdseCx2aXJ0dWFsL21lc2EiCitQQUNLQUdFQ09ORklHW2VnbF0gPSAiLS1lbmFibGUtZWdsLC0tZGlzYWJsZS1lZ2wsdmlydHVhbC9lZ2wiCitQQUNLQUdFQ09ORklHW2dseF0gPSAiLS1lbmFibGUtZ2x4LC0tZGlzYWJsZS1nbHgsdmlydHVhbC9saWJnbCIKIFBBQ0tBR0VDT05GSUdbd2F5bGFuZF0gPSAiLS1lbmFibGUtd2F5bGFuZCwtLWRpc2FibGUtd2F5bGFuZCx3YXlsYW5kIgogUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0tZW5hYmxlLXgxMSwtLWRpc2FibGUteDExLHZpcnR1YWwvbGlieDExIGxpYnhyYW5kciBsaWJ4cmVuZGVyIgogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC12YWFwaV8xLjEwLjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC12YWFwaV8xLjEwLjQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0YzY2ZGUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtdmFhcGlfMS4xMC40LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1yZXF1aXJlIGdzdHJlYW1lcjEuMC12YWFwaS5pbmMKLVNSQ19VUklbbWQ1c3VtXSA9ICIzMThhZjE3ZjkwNjYzNzU3MGI2MWRkN2JlOWI1NTgxZCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIwM2U2OTA2MjE1OTRkOWY5NDk1ZDg2YzdkYWM4Yjg1OTBiM2ExNTA0NjI3NzBlZDA3MGRjNzZmNjZhNzBkZTc1IgotCi1TUkNfVVJJICs9ICJmaWxlOi8vdmFhcGl2aWRlb2J1ZmZlcnBvb2wtY3JlYXRlLWFsbG9jYXRvci1pZi1uZWVkZWQucGF0Y2giCi0KLURFUEVORFMgKz0gImdzdHJlYW1lcjEuMCBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXZhYXBpXzEuMTIuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXZhYXBpXzEuMTIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmQ5Zjg2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtdmFhcGlfMS4xMi4yLmJiCkBAIC0wLDAgKzEsNSBAQAorcmVxdWlyZSBnc3RyZWFtZXIxLjAtdmFhcGkuaW5jCitTUkNfVVJJW21kNXN1bV0gPSAiYmVhMDE1ZjMzNjk2YTE1YWQ5NTc1ZmI3MWFmODYyZWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjNjNzE0ZTA0NzRiM2M3YWU2ZmY4ODg0YWViZjg1MDNhMWJjM2RlZDMzNWZhMmQyYjJhYzMxNzg4NDY2MTYzYSIKKworREVQRU5EUyArPSAiZ3N0cmVhbWVyMS4wIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAuaW5jCmluZGV4IDcyZDdjZTYuLjMyOTE5MzQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC5pbmMKQEAgLTI1LDEwICsyNSwxMCBAQAogUEFDS0FHRUNPTkZJR1t2YWxncmluZF0gPSAiLS1lbmFibGUtdmFsZ3JpbmQsLS1kaXNhYmxlLXZhbGdyaW5kLHZhbGdyaW5kLCIKIFBBQ0tBR0VDT05GSUdbZ3N0LXRyYWNlci1ob29rc10gPSAiLS1lbmFibGUtZ3N0LXRyYWNlci1ob29rcywtLWRpc2FibGUtZ3N0LXRyYWNlci1ob29rcywiCiBQQUNLQUdFQ09ORklHW3Vud2luZF0gPSAiLS13aXRoLXVud2luZCwtLXdpdGhvdXQtdW53aW5kLGxpYnVud2luZCIKK1BBQ0tBR0VDT05GSUdbZHddID0gIi0td2l0aC1kdywtLXdpdGhvdXQtZHcsZWxmdXRpbHMiCiAKIEVYVFJBX09FQ09ORiA9ICIgXAogICAgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIFwKLSAgICAtLWRpc2FibGUtZG9jYm9vayBcCiAgICAgLS1kaXNhYmxlLWV4YW1wbGVzIFwKICIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMS1jb25maWd1cmUtQWRkLXN3aXRjaGVzLWZvci1lbmFibGluZy1kaXNhYmxpbmctbGliZHctLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMS1jb25maWd1cmUtQWRkLXN3aXRjaGVzLWZvci1lbmFibGluZy1kaXNhYmxpbmctbGliZHctLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMzJmZDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC8wMDAxLWNvbmZpZ3VyZS1BZGQtc3dpdGNoZXMtZm9yLWVuYWJsaW5nLWRpc2FibGluZy1saWJkdy0ucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorRnJvbSBhMGNiNDFiYTcyOTEzZWRhMDYwNDlkMjY2ZWM0M2VhOGY1MmI1YmVlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2FybG9zIFJhZmFlbCBHaWFuaSA8ZHZAcHNldWRvdGVybWluYWwub3JnPgorRGF0ZTogRnJpLCAxMSBBdWcgMjAxNyAyMToyMTozNiArMDIwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmU6IEFkZCBzd2l0Y2hlcyBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIGxpYmR3IGFuZAorIGxpYnVud2luZAorCitbT3JpZ2luYWwgcGF0Y2ggbW9kaWZpZWQgdG8gYmUgYXBwbGljYWJsZSB0byAxLjEyLjJdCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc4MTkzXQorCitTaWduZWQtb2ZmLWJ5OiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+CistLS0KKyBjb25maWd1cmUuYWMgfCAzOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzMiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiNmIyOTIzLi4zMmRkODI3IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC04MjEsMTUgKzgyMSw0MSBAQCBmaQorIEFNX0NPTkRJVElPTkFMKEhBVkVfR1RLLCB0ZXN0ICJ4JEhBVkVfR1RLIiA9ICJ4eWVzIikKKyAKKyBkbmwgbGlidW53aW5kIGlzIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgbGVha3MgdHJhY2VyCistUEtHX0NIRUNLX01PRFVMRVMoVU5XSU5ELCBsaWJ1bndpbmQsIEhBVkVfVU5XSU5EPXllcywgSEFWRV9VTldJTkQ9bm8pCistaWYgdGVzdCAieCRIQVZFX1VOV0lORCIgPSAieHllcyI7IHRoZW4KKy0gIEFDX0RFRklORShIQVZFX1VOV0lORCwgMSwgW2xpYnVud2luZCBhdmFpbGFibGVdKQorK0FDX0FSR19XSVRIKFt1bndpbmRdLFtBU19IRUxQX1NUUklORyhbLS13aXRoLXVud2luZD15ZXN8bm98YXV0b10sW3VzZSBsaWJ1bndpbmRdKV0sCisrICAgICAgICAgICAgW10sIFt3aXRoX3Vud2luZD1hdXRvXSkKKytpZiBbIHRlc3QgIngke3dpdGhfdW53aW5kfSIgIT0gInhubyIgXTsgdGhlbgorKyAgUEtHX0NIRUNLX01PRFVMRVMoVU5XSU5ELCBbbGlidW53aW5kXSwKKysgICAgICBbCisrICAgICAgICBIQVZFX1VOV0lORD15ZXMKKysgICAgICAgIEFDX0RFRklORShIQVZFX1VOV0lORCwgMSwgW2xpYnVud2luZCBhdmFpbGFibGVdKQorKyAgICAgIF0sCisrICAgICAgWworKyAgICAgICAgSEFWRV9VTldJTkQ9bm8KKysgICAgICAgIGlmIFsgdGVzdCAieCR7d2l0aF91bndpbmR9IiA9ICJ4eWVzIiBdOyB0aGVuCisrICAgICAgICAgIEFDX01TR19FUlJPUihbY291bGQgbm90IGZpbmQgbGlidW53aW5kXSkKKysgICAgICAgIGZpCisrICAgICAgXSkKKytlbHNlCisrICBIQVZFX1VOV0lORD1ubworIGZpCisgCisgZG5sIGxpYmR3IGlzIG9wdGlvbmFsbHkgdXNlZCB0byBhZGQgc291cmNlIGxpbmVzIGFuZCBudW1iZXJzIHRvIGJhY2t0cmFjZXMKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhEVywgbGliZHcsIEhBVkVfRFc9eWVzLCBIQVZFX0RXPW5vKQorLWlmIHRlc3QgIngkSEFWRV9EVyIgPSAieHllcyI7IHRoZW4KKy0gIEFDX0RFRklORShIQVZFX0RXLCAxLCBbbGliZHcgYXZhaWxhYmxlXSkKKytBQ19BUkdfV0lUSChbZHddLFtBU19IRUxQX1NUUklORyhbLS13aXRoLWR3PXllc3xub3xhdXRvXSxbdXNlIGxpYmR3XSldLAorKyAgICAgICAgICAgIFtdLCBbd2l0aF9kdz1hdXRvXSkKKytpZiBbIHRlc3QgIngke3dpdGhfZHd9IiAhPSAieG5vIiBdOyB0aGVuCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhEVywgW2xpYmR3XSwKKysgICAgICBbCisrICAgICAgICBIQVZFX0RXPXllcworKyAgICAgICAgQUNfREVGSU5FKEhBVkVfRFcsIDEsIFtsaWJkdyBhdmFpbGFibGVdKQorKyAgICAgIF0sCisrICAgICAgWworKyAgICAgICAgSEFWRV9EVz1ubworKyAgICAgICAgaWYgWyB0ZXN0ICJ4JHt3aXRoX2R3fSIgPSAieHllcyIgXTsgdGhlbgorKyAgICAgICAgICBBQ19NU0dfRVJST1IoW2NvdWxkIG5vdCBmaW5kIGxpYmR3XSkKKysgICAgICAgIGZpCisrICAgICAgXSkKKytlbHNlCisrICBIQVZFX0RXPW5vCisgZmkKKyAKKyBkbmwgQ2hlY2sgZm9yIGJhY2t0cmFjZSgpIGZyb20gbGliYworLS0gCisyLjcuNAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC9kZXRlcm1pbmlzdGljLXVud2luZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wL2RldGVybWluaXN0aWMtdW53aW5kLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzllNmNhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wL2RldGVybWluaXN0aWMtdW53aW5kLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotTWFrZSB0aGUgZGV0ZWN0aW9uIG9mIGxpYnVud2luZCBkZXRlcm1pbmlzdGljLgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLVNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+Ci0KLWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IGFjODhmYjIuLjE4MmMxOWEgMTAwNjQ0Ci0tLS0gYS9jb25maWd1cmUuYWMKLSsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTgyOSwzICs4MjgsMCBAQCBBTV9DT05ESVRJT05BTChIQVZFX0dUSywgdGVzdCAieCRIQVZFX0dUSyIgPSAieHllcyIpCi0tZG5sIGxpYnVud2luZCBpcyBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGxlYWtzIHRyYWNlcgotLVBLR19DSEVDS19NT0RVTEVTKFVOV0lORCwgbGlidW53aW5kLCBIQVZFX1VOV0lORD15ZXMsIEhBVkVfVU5XSU5EPW5vKQotLQotQEAgLTgzOSwzICs4MzYsNyBAQCBBQ19DSEVDS19GVU5DKGJhY2t0cmFjZSwgWwotLWlmIHRlc3QgIngkSEFWRV9VTldJTkQiID0gInh5ZXMiOyB0aGVuCi0tICBBQ19ERUZJTkUoSEFWRV9VTldJTkQsIDEsIFtsaWJ1bndpbmQgYXZhaWxhYmxlXSkKLS1maQotK2RubCBsaWJ1bndpbmQgaXMgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBsZWFrcyB0cmFjZXIKLStBQ19BUkdfV0lUSChbdW53aW5kXSxbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC11bndpbmRdLFt1c2UgbGlidW53aW5kXSldLAotKyAgICAgICAgICAgIFtdLCBbd2l0aF91bndpbmQ9eWVzXSkKLStBU19JRihbdGVzdCAiJHdpdGhfdW53aW5kIiA9IHllc10sCi0rICAgICAgW1BLR19DSEVDS19NT0RVTEVTKFVOV0lORCwgbGlidW53aW5kKQotKyAgICAgICBBQ19ERUZJTkUoSEFWRV9VTldJTkQsIDEsIFtsaWJ1bndpbmQgYXZhaWxhYmxlXSldCi0rKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfMS4xMC40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfMS4xMC40LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTY3OTkzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wXzEuMTAuNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLXJlcXVpcmUgZ3N0cmVhbWVyMS4wLmluYwotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02NzYyZWQ0NDJiMzgyMjM4N2E1MWM5MmQ5MjhlYWQwZCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvZ3N0Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMTttZDU9ZTA1OTEzODQ4MTIwNWVlMmM2ZmMxYzA3OWMwMTZkMGQiCi0KLVNSQ19VUkkgPSAiIFwKLSAgICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0ke1BWfS50YXIueHogXAotICAgIGZpbGU6Ly9kZXRlcm1pbmlzdGljLXVud2luZC5wYXRjaCBcCi0iCi1TUkNfVVJJW21kNXN1bV0gPSAiN2M5MWE5N2U0YTJkYzgxZWFmZDU5ZDBhMmY4YjBkNmUiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTBjMmY1YWY1MGE2Y2M2YzBhM2YzZWQ0M2JkZDhiNWUyYmZmMDBiYWNmYjc2NmQ0YmUxMzllYzA2ZDhiNTIxOCIKLQotUyA9ICIke1dPUktESVJ9L2dzdHJlYW1lci0ke1BWfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wXzEuMTIuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wXzEuMTIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDQxYTU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfMS4xMi4yLmJiCkBAIC0wLDAgKzEsMTMgQEAKK3JlcXVpcmUgZ3N0cmVhbWVyMS4wLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02NzYyZWQ0NDJiMzgyMjM4N2E1MWM5MmQ5MjhlYWQwZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvZ3N0Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMTttZDU9ZTA1OTEzODQ4MTIwNWVlMmM2ZmMxYzA3OWMwMTZkMGQiCisKK1NSQ19VUkkgPSAiIFwKKyAgICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0ke1BWfS50YXIueHogXAorICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS1BZGQtc3dpdGNoZXMtZm9yLWVuYWJsaW5nLWRpc2FibGluZy1saWJkdy0ucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjQ3NDg4NjA2MjE2MDdmZmQ5NjI0NGZiNzljODZjMjM4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlmZGUzZjM5YTJlYTk4NGY5ZTA3Y2UwOTI1MDI4NWNlOTFmNmUzNjE5ZDE4Njg4OWY3NWI1MTU0ZWNmOTk0YmEiCisKK1MgPSAiJHtXT1JLRElSfS9nc3RyZWFtZXItJHtQVn0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGFtZS9sYW1lL0NWRS0yMDE3LTEzNzEyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZS9DVkUtMjAxNy0xMzcxMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWVjNzY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZS9DVkUtMjAxNy0xMzcxMi5wYXRjaApAQCAtMCwwICsxLDMwOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbaHR0cDovL2xhbWUuY3ZzLnNvdXJjZWZvcmdlLm5ldC92aWV3dmMvbGFtZS9sYW1lL2xpYm1wM2xhbWUvaWQzdGFnLmM/cjE9MS43OSZyMj0xLjgwXQorCitCYWNrcG9ydCBwYXRjaCB0byBmaXggQ1ZFLTIwMTctMTM3MTIgZm9yIGxhbWUuCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCistLS0gYS9saWJtcDNsYW1lL2lkM3RhZy5jCTIwMTcvMDgvMjIgMTk6NDQ6MDUJMS43OQorKysrIGIvbGlibXAzbGFtZS9pZDN0YWcuYwkyMDE3LzA4LzI4IDE1OjM5OjUxCTEuODAKK0BAIC0xOTQsNyArMTk0LDExIEBACisgfQorICNlbmRpZgorIAorLQorK3N0YXRpYyBpbnQKKytpc19sYW1lX2ludGVybmFsX2ZsYWdzX251bGwobGFtZV90IGdmcCkKKyt7CisrICAgIHJldHVybiAoZ2ZwICYmIGdmcC0+aW50ZXJuYWxfZmxhZ3MpID8gMCA6IDE7CisrfQorIAorIHN0YXRpYyBpbnQKKyBpZDN2Ml9hZGRfdWNzMl9sbmcobGFtZV90IGdmcCwgdWludDMyX3QgZnJhbWVfaWQsIHVuc2lnbmVkIHNob3J0IGNvbnN0ICpkZXNjLCB1bnNpZ25lZCBzaG9ydCBjb25zdCAqdGV4dCk7CitAQCAtMjM4LDggKzI0Miw3IEBACisgc3RhdGljIHZvaWQKKyBpZDN2MkFkZEF1ZGlvRHVyYXRpb24obGFtZV90IGdmcCwgZG91YmxlIG1zKQorIHsKKy0gICAgbGFtZV9pbnRlcm5hbF9mbGFncyAqZ2ZjID0gZ2ZwICE9IDAgPyBnZnAtPmludGVybmFsX2ZsYWdzIDogMDsKKy0gICAgU2Vzc2lvbkNvbmZpZ190IGNvbnN0ICpjb25zdCBjZmcgPSAmZ2ZjLT5jZmc7CisrICAgIFNlc3Npb25Db25maWdfdCBjb25zdCAqY29uc3QgY2ZnID0gJmdmcC0+aW50ZXJuYWxfZmxhZ3MtPmNmZzsgLyogY2FsbGVyIGNoZWNrZWQgcG9pbnRlcnMgKi8KKyAgICAgY2hhciAgICBidWZmZXJbMTAyNF07CisgICAgIGRvdWJsZSBjb25zdCBtYXhfdWxvbmcgPSBNQVhfVV8zMl9OVU07CisgICAgIHVuc2lnbmVkIGxvbmcgcGxheWxlbmd0aF9tczsKK0BAIC0yODAsNyArMjgzLDEyIEBACisgdm9pZAorIGlkM3RhZ19pbml0KGxhbWVfdCBnZnApCisgeworLSAgICBsYW1lX2ludGVybmFsX2ZsYWdzICpnZmMgPSBnZnAtPmludGVybmFsX2ZsYWdzOworKyAgICBsYW1lX2ludGVybmFsX2ZsYWdzICpnZmMgPSAwOworKworKyAgICBpZiAoaXNfbGFtZV9pbnRlcm5hbF9mbGFnc19udWxsKGdmcCkpIHsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBnZmMgPSBnZnAtPmludGVybmFsX2ZsYWdzOworICAgICBmcmVlX2lkM3RhZyhnZmMpOworICAgICBtZW1zZXQoJmdmYy0+dGFnX3NwZWMsIDAsIHNpemVvZiBnZmMtPnRhZ19zcGVjKTsKKyAgICAgZ2ZjLT50YWdfc3BlYy5nZW5yZV9pZDN2MSA9IEdFTlJFX05VTV9VTktOT1dOOworQEAgLTI5Myw3ICszMDEsMTIgQEAKKyB2b2lkCisgaWQzdGFnX2FkZF92MihsYW1lX3QgZ2ZwKQorIHsKKy0gICAgbGFtZV9pbnRlcm5hbF9mbGFncyAqZ2ZjID0gZ2ZwLT5pbnRlcm5hbF9mbGFnczsKKysgICAgbGFtZV9pbnRlcm5hbF9mbGFncyAqZ2ZjID0gMDsKKysKKysgICAgaWYgKGlzX2xhbWVfaW50ZXJuYWxfZmxhZ3NfbnVsbChnZnApKSB7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysgICAgZ2ZjID0gZ2ZwLT5pbnRlcm5hbF9mbGFnczsKKyAgICAgZ2ZjLT50YWdfc3BlYy5mbGFncyAmPSB+VjFfT05MWV9GTEFHOworICAgICBnZmMtPnRhZ19zcGVjLmZsYWdzIHw9IEFERF9WMl9GTEFHOworIH0KK0BAIC0zMDEsNyArMzE0LDEyIEBACisgdm9pZAorIGlkM3RhZ192MV9vbmx5KGxhbWVfdCBnZnApCisgeworLSAgICBsYW1lX2ludGVybmFsX2ZsYWdzICpnZmMgPSBnZnAtPmludGVybmFsX2ZsYWdzOworKyAgICBsYW1lX2ludGVybmFsX2ZsYWdzICpnZmMgPSAwOworKworKyAgICBpZiAoaXNfbGFtZV9pbnRlcm5hbF9mbGFnc19udWxsKGdmcCkpIHsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBnZmMgPSBnZnAtPmludGVybmFsX2ZsYWdzOworICAgICBnZmMtPnRhZ19zcGVjLmZsYWdzICY9IH4oQUREX1YyX0ZMQUcgfCBWMl9PTkxZX0ZMQUcpOworICAgICBnZmMtPnRhZ19zcGVjLmZsYWdzIHw9IFYxX09OTFlfRkxBRzsKKyB9CitAQCAtMzA5LDcgKzMyNywxMiBAQAorIHZvaWQKKyBpZDN0YWdfdjJfb25seShsYW1lX3QgZ2ZwKQorIHsKKy0gICAgbGFtZV9pbnRlcm5hbF9mbGFncyAqZ2ZjID0gZ2ZwLT5pbnRlcm5hbF9mbGFnczsKKysgICAgbGFtZV9pbnRlcm5hbF9mbGFncyAqZ2ZjID0gMDsKKysKKysgICAgaWYgKGlzX2xhbWVfaW50ZXJuYWxfZmxhZ3NfbnVsbChnZnApKSB7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysgICAgZ2ZjID0gZ2ZwLT5pbnRlcm5hbF9mbGFnczsKKyAgICAgZ2ZjLT50YWdfc3BlYy5mbGFncyAmPSB+VjFfT05MWV9GTEFHOworICAgICBnZmMtPnRhZ19zcGVjLmZsYWdzIHw9IFYyX09OTFlfRkxBRzsKKyB9CitAQCAtMzE3LDcgKzM0MCwxMiBAQAorIHZvaWQKKyBpZDN0YWdfc3BhY2VfdjEobGFtZV90IGdmcCkKKyB7CistICAgIGxhbWVfaW50ZXJuYWxfZmxhZ3MgKmdmYyA9IGdmcC0+aW50ZXJuYWxfZmxhZ3M7CisrICAgIGxhbWVfaW50ZXJuYWxfZmxhZ3MgKmdmYyA9IDA7CisrCisrICAgIGlmIChpc19sYW1lX2ludGVybmFsX2ZsYWdzX251bGwoZ2ZwKSkgeworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIGdmYyA9IGdmcC0+aW50ZXJuYWxfZmxhZ3M7CisgICAgIGdmYy0+dGFnX3NwZWMuZmxhZ3MgJj0gflYyX09OTFlfRkxBRzsKKyAgICAgZ2ZjLT50YWdfc3BlYy5mbGFncyB8PSBTUEFDRV9WMV9GTEFHOworIH0KK0BAIC0zMzEsNyArMzU5LDEyIEBACisgdm9pZAorIGlkM3RhZ19zZXRfcGFkKGxhbWVfdCBnZnAsIHNpemVfdCBuKQorIHsKKy0gICAgbGFtZV9pbnRlcm5hbF9mbGFncyAqZ2ZjID0gZ2ZwLT5pbnRlcm5hbF9mbGFnczsKKysgICAgbGFtZV9pbnRlcm5hbF9mbGFncyAqZ2ZjID0gMDsKKysKKysgICAgaWYgKGlzX2xhbWVfaW50ZXJuYWxfZmxhZ3NfbnVsbChnZnApKSB7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysgICAgZ2ZjID0gZ2ZwLT5pbnRlcm5hbF9mbGFnczsKKyAgICAgZ2ZjLT50YWdfc3BlYy5mbGFncyAmPSB+VjFfT05MWV9GTEFHOworICAgICBnZmMtPnRhZ19zcGVjLmZsYWdzIHw9IFBBRF9WMl9GTEFHOworICAgICBnZmMtPnRhZ19zcGVjLmZsYWdzIHw9IEFERF9WMl9GTEFHOworQEAgLTU4MywyMiArNjE2LDI5IEBACisgaW50CisgaWQzdGFnX3NldF9hbGJ1bWFydChsYW1lX3QgZ2ZwLCBjb25zdCBjaGFyICppbWFnZSwgc2l6ZV90IHNpemUpCisgeworLSAgICBpbnQgICAgIG1pbWV0eXBlID0gMDsKKy0gICAgdW5zaWduZWQgY2hhciBjb25zdCAqZGF0YSA9ICh1bnNpZ25lZCBjaGFyIGNvbnN0ICopIGltYWdlOworLSAgICBsYW1lX2ludGVybmFsX2ZsYWdzICpnZmMgPSBnZnAtPmludGVybmFsX2ZsYWdzOworLQorLSAgICAvKiBkZXRlcm1pbmUgTUlNRSB0eXBlIGZyb20gdGhlIGFjdHVhbCBpbWFnZSBkYXRhICovCistICAgIGlmICgyIDwgc2l6ZSAmJiBkYXRhWzBdID09IDB4RkYgJiYgZGF0YVsxXSA9PSAweEQ4KSB7CistICAgICAgICBtaW1ldHlwZSA9IE1JTUVUWVBFX0pQRUc7CistICAgIH0KKy0gICAgZWxzZSBpZiAoNCA8IHNpemUgJiYgZGF0YVswXSA9PSAweDg5ICYmIHN0cm5jbXAoKGNvbnN0IGNoYXIgKikgJmRhdGFbMV0sICJQTkciLCAzKSA9PSAwKSB7CistICAgICAgICBtaW1ldHlwZSA9IE1JTUVUWVBFX1BORzsKKy0gICAgfQorLSAgICBlbHNlIGlmICg0IDwgc2l6ZSAmJiBzdHJuY21wKChjb25zdCBjaGFyICopIGRhdGEsICJHSUY4IiwgNCkgPT0gMCkgeworLSAgICAgICAgbWltZXR5cGUgPSBNSU1FVFlQRV9HSUY7CisrICAgIGludCAgICAgbWltZXR5cGUgPSBNSU1FVFlQRV9OT05FOworKyAgICBsYW1lX2ludGVybmFsX2ZsYWdzICpnZmMgPSAwOworKworKyAgICBpZiAoaXNfbGFtZV9pbnRlcm5hbF9mbGFnc19udWxsKGdmcCkpIHsKKysgICAgICAgIHJldHVybiAwOworICAgICB9CistICAgIGVsc2UgeworLSAgICAgICAgcmV0dXJuIC0xOworKyAgICBnZmMgPSBnZnAtPmludGVybmFsX2ZsYWdzOworKworKyAgICBpZiAoaW1hZ2UgIT0gMCkgeworKyAgICAgICAgdW5zaWduZWQgY2hhciBjb25zdCAqZGF0YSA9ICh1bnNpZ25lZCBjaGFyIGNvbnN0ICopIGltYWdlOworKyAgICAgICAgLyogZGV0ZXJtaW5lIE1JTUUgdHlwZSBmcm9tIHRoZSBhY3R1YWwgaW1hZ2UgZGF0YSAqLworKyAgICAgICAgaWYgKDIgPCBzaXplICYmIGRhdGFbMF0gPT0gMHhGRiAmJiBkYXRhWzFdID09IDB4RDgpIHsKKysgICAgICAgICAgICBtaW1ldHlwZSA9IE1JTUVUWVBFX0pQRUc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIGlmICg0IDwgc2l6ZSAmJiBkYXRhWzBdID09IDB4ODkgJiYgc3RybmNtcCgoY29uc3QgY2hhciAqKSAmZGF0YVsxXSwgIlBORyIsIDMpID09IDApIHsKKysgICAgICAgICAgICBtaW1ldHlwZSA9IE1JTUVUWVBFX1BORzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgaWYgKDQgPCBzaXplICYmIHN0cm5jbXAoKGNvbnN0IGNoYXIgKikgZGF0YSwgIkdJRjgiLCA0KSA9PSAwKSB7CisrICAgICAgICAgICAgbWltZXR5cGUgPSBNSU1FVFlQRV9HSUY7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICB9CisgICAgIH0KKyAgICAgaWYgKGdmYy0+dGFnX3NwZWMuYWxidW1hcnQgIT0gMCkgeworICAgICAgICAgZnJlZShnZmMtPnRhZ19zcGVjLmFsYnVtYXJ0KTsKK0BAIC02MDYsNyArNjQ2LDcgQEAKKyAgICAgICAgIGdmYy0+dGFnX3NwZWMuYWxidW1hcnRfc2l6ZSA9IDA7CisgICAgICAgICBnZmMtPnRhZ19zcGVjLmFsYnVtYXJ0X21pbWV0eXBlID0gTUlNRVRZUEVfTk9ORTsKKyAgICAgfQorLSAgICBpZiAoc2l6ZSA8IDEpIHsKKysgICAgaWYgKHNpemUgPCAxIHx8IG1pbWV0eXBlID09IE1JTUVUWVBFX05PTkUpIHsKKyAgICAgICAgIHJldHVybiAwOworICAgICB9CisgICAgIGdmYy0+dGFnX3NwZWMuYWxidW1hcnQgPSBsYW1lX2NhbGxvYyh1bnNpZ25lZCBjaGFyLCBzaXplKTsKK0BAIC05NTksNiArOTk5LDkgQEAKKyAgICAgaWYgKGZyYW1lX2lkID09IDApIHsKKyAgICAgICAgIHJldHVybiAtMTsKKyAgICAgfQorKyAgICBpZiAoaXNfbGFtZV9pbnRlcm5hbF9mbGFnc19udWxsKGdmcCkpIHsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisgICAgIGlmICh0ZXh0ID09IDApIHsKKyAgICAgICAgIHJldHVybiAwOworICAgICB9CitAQCAtMTAwOCw2ICsxMDUxLDkgQEAKKyAgICAgaWYgKGZyYW1lX2lkID09IDApIHsKKyAgICAgICAgIHJldHVybiAtMTsKKyAgICAgfQorKyAgICBpZiAoaXNfbGFtZV9pbnRlcm5hbF9mbGFnc19udWxsKGdmcCkpIHsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisgICAgIGlmICh0ZXh0ID09IDApIHsKKyAgICAgICAgIHJldHVybiAwOworICAgICB9CitAQCAtMTAzNyw2ICsxMDgzLDkgQEAKKyBpbnQKKyBpZDN0YWdfc2V0X2NvbW1lbnRfbGF0aW4xKGxhbWVfdCBnZnAsIGNoYXIgY29uc3QgKmxhbmcsIGNoYXIgY29uc3QgKmRlc2MsIGNoYXIgY29uc3QgKnRleHQpCisgeworKyAgICBpZiAoaXNfbGFtZV9pbnRlcm5hbF9mbGFnc19udWxsKGdmcCkpIHsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisgICAgIHJldHVybiBpZDN2Ml9hZGRfbGF0aW4xKGdmcCwgSURfQ09NTUVOVCwgbGFuZywgZGVzYywgdGV4dCk7CisgfQorIAorQEAgLTEwNDQsNiArMTA5Myw5IEBACisgaW50CisgaWQzdGFnX3NldF9jb21tZW50X3V0ZjE2KGxhbWVfdCBnZnAsIGNoYXIgY29uc3QgKmxhbmcsIHVuc2lnbmVkIHNob3J0IGNvbnN0ICpkZXNjLCB1bnNpZ25lZCBzaG9ydCBjb25zdCAqdGV4dCkKKyB7CisrICAgIGlmIChpc19sYW1lX2ludGVybmFsX2ZsYWdzX251bGwoZ2ZwKSkgeworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKyAgICAgcmV0dXJuIGlkM3YyX2FkZF91Y3MyKGdmcCwgSURfQ09NTUVOVCwgbGFuZywgZGVzYywgdGV4dCk7CisgfQorIAorQEAgLTEwNTQsNiArMTEwNiw5IEBACisgaW50CisgaWQzdGFnX3NldF9jb21tZW50X3VjczIobGFtZV90IGdmcCwgY2hhciBjb25zdCAqbGFuZywgdW5zaWduZWQgc2hvcnQgY29uc3QgKmRlc2MsIHVuc2lnbmVkIHNob3J0IGNvbnN0ICp0ZXh0KQorIHsKKysgICAgaWYgKGlzX2xhbWVfaW50ZXJuYWxfZmxhZ3NfbnVsbChnZnApKSB7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorICAgICByZXR1cm4gaWQzdGFnX3NldF9jb21tZW50X3V0ZjE2KGdmcCwgbGFuZywgZGVzYywgdGV4dCk7CisgfQorIAorQEAgLTEyNDQsOSArMTI5OSw5IEBACisgaW50CisgaWQzdGFnX3NldF9nZW5yZShsYW1lX3QgZ2ZwLCBjb25zdCBjaGFyICpnZW5yZSkKKyB7CistICAgIGxhbWVfaW50ZXJuYWxfZmxhZ3MgKmdmYyA9IGdmcC0+aW50ZXJuYWxfZmxhZ3M7CisrICAgIGxhbWVfaW50ZXJuYWxfZmxhZ3MgKmdmYyA9IGdmcCAhPSAwID8gZ2ZwLT5pbnRlcm5hbF9mbGFncyA6IDA7CisgICAgIGludCAgICAgcmV0ID0gMDsKKy0gICAgaWYgKGdlbnJlICYmICpnZW5yZSkgeworKyAgICBpZiAoZ2ZjICYmIGdlbnJlICYmICpnZW5yZSkgeworICAgICAgICAgaW50IGNvbnN0IG51bSA9IGxvb2t1cEdlbnJlKGdlbnJlKTsKKyAgICAgICAgIGlmIChudW0gPT0gLTEpIHJldHVybiBudW07CisgICAgICAgICBnZmMtPnRhZ19zcGVjLmZsYWdzIHw9IENIQU5HRURfRkxBRzsKK0BAIC0xNTM5LDYgKzE1OTQsOSBAQAorIGludAorIGlkM3RhZ19zZXRfZmllbGR2YWx1ZShsYW1lX3QgZ2ZwLCBjb25zdCBjaGFyICpmaWVsZHZhbHVlKQorIHsKKysgICAgaWYgKGlzX2xhbWVfaW50ZXJuYWxfZmxhZ3NfbnVsbChnZnApKSB7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorICAgICBpZiAoZmllbGR2YWx1ZSAmJiAqZmllbGR2YWx1ZSkgeworICAgICAgICAgaWYgKHN0cmxlbihmaWVsZHZhbHVlKSA8IDUgfHwgZmllbGR2YWx1ZVs0XSAhPSAnPScpIHsKKyAgICAgICAgICAgICByZXR1cm4gLTE7CitAQCAtMTU1MSw2ICsxNjA5LDkgQEAKKyBpbnQKKyBpZDN0YWdfc2V0X2ZpZWxkdmFsdWVfdXRmMTYobGFtZV90IGdmcCwgY29uc3QgdW5zaWduZWQgc2hvcnQgKmZpZWxkdmFsdWUpCisgeworKyAgICBpZiAoaXNfbGFtZV9pbnRlcm5hbF9mbGFnc19udWxsKGdmcCkpIHsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisgICAgIGlmIChmaWVsZHZhbHVlICYmICpmaWVsZHZhbHVlKSB7CisgICAgICAgICBzaXplX3QgZHggPSBoYXNVY3MyQnl0ZU9yZGVyTWFya2VyKGZpZWxkdmFsdWVbMF0pOworICAgICAgICAgdW5zaWduZWQgc2hvcnQgY29uc3Qgc2VwYXJhdG9yID0gZnJvbUxhdGluMUNoYXIoZmllbGR2YWx1ZSwgJz0nKTsKK0BAIC0xNTgxLDIwICsxNjQyLDIxIEBACisgaW50CisgaWQzdGFnX3NldF9maWVsZHZhbHVlX3VjczIobGFtZV90IGdmcCwgY29uc3QgdW5zaWduZWQgc2hvcnQgKmZpZWxkdmFsdWUpCisgeworKyAgICBpZiAoaXNfbGFtZV9pbnRlcm5hbF9mbGFnc19udWxsKGdmcCkpIHsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisgICAgIHJldHVybiBpZDN0YWdfc2V0X2ZpZWxkdmFsdWVfdXRmMTYoZ2ZwLCBmaWVsZHZhbHVlKTsKKyB9CisgCisgc2l6ZV90CisgbGFtZV9nZXRfaWQzdjJfdGFnKGxhbWVfdCBnZnAsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCisgeworLSAgICBsYW1lX2ludGVybmFsX2ZsYWdzICpnZmM7CistICAgIGlmIChnZnAgPT0gMCkgeworKyAgICBsYW1lX2ludGVybmFsX2ZsYWdzICpnZmMgPSAwOworKworKyAgICBpZiAoaXNfbGFtZV9pbnRlcm5hbF9mbGFnc19udWxsKGdmcCkpIHsKKyAgICAgICAgIHJldHVybiAwOworICAgICB9CisgICAgIGdmYyA9IGdmcC0+aW50ZXJuYWxfZmxhZ3M7CistICAgIGlmIChnZmMgPT0gMCkgeworLSAgICAgICAgcmV0dXJuIDA7CistICAgIH0KKyAgICAgaWYgKHRlc3RfdGFnX3NwZWNfZmxhZ3MoZ2ZjLCBWMV9PTkxZX0ZMQUcpKSB7CisgICAgICAgICByZXR1cm4gMDsKKyAgICAgfQorQEAgLTE3MzYsNyArMTc5OCwxMiBAQAorIGludAorIGlkM3RhZ193cml0ZV92MihsYW1lX3QgZ2ZwKQorIHsKKy0gICAgbGFtZV9pbnRlcm5hbF9mbGFncyAqZ2ZjID0gZ2ZwLT5pbnRlcm5hbF9mbGFnczsKKysgICAgbGFtZV9pbnRlcm5hbF9mbGFncyAqZ2ZjID0gMDsKKysKKysgICAgaWYgKGlzX2xhbWVfaW50ZXJuYWxfZmxhZ3NfbnVsbChnZnApKSB7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKyAgICBnZmMgPSBnZnAtPmludGVybmFsX2ZsYWdzOworICNpZiAwCisgICAgIGRlYnVnX3RhZ19zcGVjX2ZsYWdzKGdmYywgIndyaXRlIHYyIik7CisgI2VuZGlmCitAQCAtMTgzNywxMCArMTkwNCwxNSBAQAorIGludAorIGlkM3RhZ193cml0ZV92MShsYW1lX3QgZ2ZwKQorIHsKKy0gICAgbGFtZV9pbnRlcm5hbF9mbGFncyAqY29uc3QgZ2ZjID0gZ2ZwLT5pbnRlcm5hbF9mbGFnczsKKysgICAgbGFtZV9pbnRlcm5hbF9mbGFncyogZ2ZjID0gMDsKKyAgICAgc2l6ZV90ICBpLCBuLCBtOworICAgICB1bnNpZ25lZCBjaGFyIHRhZ1sxMjhdOworIAorKyAgICBpZiAoaXNfbGFtZV9pbnRlcm5hbF9mbGFnc19udWxsKGdmcCkpIHsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrICAgIGdmYyA9IGdmcC0+aW50ZXJuYWxfZmxhZ3M7CisrCisgICAgIG0gPSBzaXplb2YodGFnKTsKKyAgICAgbiA9IGxhbWVfZ2V0X2lkM3YxX3RhZyhnZnAsIHRhZywgbSk7CisgICAgIGlmIChuID4gbSkgewpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZV8zLjk5LjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGFtZS9sYW1lXzMuOTkuNS5iYgppbmRleCAwNDc3NjExLi5lNTMyMWJiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGFtZS9sYW1lXzMuOTkuNS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGFtZS9sYW1lXzMuOTkuNS5iYgpAQCAtMTQsNyArMTQsOSBAQAogCiBTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9sYW1lL2xhbWUtJHtQVn0udGFyLmd6IFwKICAgICAgICAgICAgZmlsZTovL25vLWd0azEucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vbGFtZS0zLjk5LjVfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLngucGF0Y2ggIgorICAgICAgICAgICBmaWxlOi8vbGFtZS0zLjk5LjVfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLngucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTM3MTIucGF0Y2ggXAorICAgICAgICAgICAiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICI4NDgzNWIzMTNkNGE4YjY4ZjUzNDk4MTZkMzNlMDdjZSIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICIyNDM0NmI0MTU4ZTRhZjNiZDlmMmUxOTRiYjIzZWI0NzNjNzVmYjczNzcwMTE1MjMzNTMxOTZiMTliOWEyM2ZmIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmlkM3RhZy9saWJpZDN0YWcvMDAwMS1GaXgtZ3BlcmYtMy4xLWluY29tcGF0aWJpbGl0eS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJpZDN0YWcvbGliaWQzdGFnLzAwMDEtRml4LWdwZXJmLTMuMS1pbmNvbXBhdGliaWxpdHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRmNDlmNgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJpZDN0YWcvbGliaWQzdGFnLzAwMDEtRml4LWdwZXJmLTMuMS1pbmNvbXBhdGliaWxpdHkucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSA5MWZjZjY2YjkxODJjNzVjZDJiOTZkODg5OTFkNWExYzYzMDdkNGI0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDIgQXVnIDIwMTcgMTY6Mjc6NTIgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IGdwZXJmIDMuMSBpbmNvbXBhdGliaWxpdHkuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CistLS0KKyBjb21wYXQuaCAgICB8IDIgKy0KKyBmcmFtZXR5cGUuaCB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbXBhdC5oIGIvY29tcGF0LmgKK2luZGV4IDhhZjcxZWMuLmIzZDgwZDkgMTAwNjQ0CistLS0gYS9jb21wYXQuaAorKysrIGIvY29tcGF0LmgKK0BAIC0zNCw3ICszNCw3IEBAIHN0cnVjdCBpZDNfY29tcGF0IHsKKyB9OworIAorIHN0cnVjdCBpZDNfY29tcGF0IGNvbnN0ICppZDNfY29tcGF0X2xvb2t1cChyZWdpc3RlciBjaGFyIGNvbnN0ICosCistCQkJCQkgICByZWdpc3RlciB1bnNpZ25lZCBpbnQpOworKwkJCQkJICAgcmVnaXN0ZXIgc2l6ZV90KTsKKyAKKyBpbnQgaWQzX2NvbXBhdF9maXh1cChzdHJ1Y3QgaWQzX3RhZyAqKTsKKyAKK2RpZmYgLS1naXQgYS9mcmFtZXR5cGUuaCBiL2ZyYW1ldHlwZS5oCitpbmRleCBkZDA2NGIyLi5iNWI3NTkzIDEwMDY0NAorLS0tIGEvZnJhbWV0eXBlLmgKKysrKyBiL2ZyYW1ldHlwZS5oCitAQCAtMzcsNiArMzcsNiBAQCBleHRlcm4gc3RydWN0IGlkM19mcmFtZXR5cGUgY29uc3QgaWQzX2ZyYW1ldHlwZV91bmtub3duOworIGV4dGVybiBzdHJ1Y3QgaWQzX2ZyYW1ldHlwZSBjb25zdCBpZDNfZnJhbWV0eXBlX29ic29sZXRlOworIAorIHN0cnVjdCBpZDNfZnJhbWV0eXBlIGNvbnN0ICppZDNfZnJhbWV0eXBlX2xvb2t1cChyZWdpc3RlciBjaGFyIGNvbnN0ICosCistCQkJCQkJIHJlZ2lzdGVyIHVuc2lnbmVkIGludCk7CisrCQkJCQkJIHJlZ2lzdGVyIHNpemVfdCk7CisgCisgIyBlbmRpZgorLS0gCisyLjEzLjIKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmlkM3RhZy9saWJpZDN0YWdfMC4xNS4xYi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJpZDN0YWcvbGliaWQzdGFnXzAuMTUuMWIuYmIKaW5kZXggMDVhOGE0Ny4uZjYxMzlkNiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmlkM3RhZy9saWJpZDN0YWdfMC4xNS4xYi5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliaWQzdGFnL2xpYmlkM3RhZ18wLjE1LjFiLmJiCkBAIC05LDEwICs5LDEzIEBACiBERVBFTkRTID0gInpsaWIgZ3BlcmYtbmF0aXZlIgogUFIgPSAicjciCiAKLVNSQ19VUkkgPSAiZnRwOi8vZnRwLm1hcnMub3JnL3B1Yi9tcGVnL2xpYmlkM3RhZy0ke1BWfS50YXIuZ3ogXAorU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vbWFkL2xpYmlkM3RhZy0ke1BWfS50YXIuZ3ogXAogICAgICAgICAgICBmaWxlOi8vYWRkcGtnY29uZmlnLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBcCi0iCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1ncGVyZi0zLjEtaW5jb21wYXRpYmlsaXR5LnBhdGNoIFwKKyAgICAgICAgICAgIgorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL21hZC9maWxlcy9saWJpZDN0YWcvIgorVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiL3Byb2plY3RzL21hZC9maWxlcy9saWJpZDN0YWcvKD9QPHB2ZXI+LiopLyQiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICJlNTgwOGFkOTk3YmEzMmM0OTg4MDM4MjIwNzg3NDhjMyIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICI2M2RhNGY2ZTc5OTcyNzhmOGEzZmVmNGM2YTM3MmQzNDJmNzA1MDUxZDFlZWI2YTQ2YTg2YjAzNjEwZTI2MTUxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnBuZy9saWJwbmdfMS42LjI4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnBuZy9saWJwbmdfMS42LjI4LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2IyOTY3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJwbmcvbGlicG5nXzEuNi4yOC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLVNVTU1BUlkgPSAiUE5HIGltYWdlIGZvcm1hdCBkZWNvZGluZyBsaWJyYXJ5IgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5saWJwbmcub3JnLyIKLVNFQ1RJT04gPSAibGlicyIKLUxJQ0VOU0UgPSAiTGlicG5nIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NjdkODgzNzQxMDg2M2Y5ODIxYmJkNjA2NTM2ZjAzMjkgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcG5nLmg7ZW5kbGluZT0xNDQ7bWQ1PWFiZmEwNDk3ZmViMzkzYjU4NDJkM2Q4MmMxMDA5NTIwIgotREVQRU5EUyA9ICJ6bGliIgotCi1TUkNfVVJJID0gIiR7R0VOVE9PX01JUlJPUn0vbGlicG5nLSR7UFZ9LnRhci54eiBcCi0gICAgICAgICAgIgotU1JDX1VSSVttZDVzdW1dID0gIjQyNTM1NGY4NmMzOTIzMThkMzFhZWRjYTcxMDE5MzcyIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImQ4ZDNlYzlkZTZiNWRiNzQwZmVmYWM3MDJjMzdmZmNmOTZhZTQ2Y2IxN2MxOGMxNTQ0NjM1YTM4NTJmNzhmN2EiCi0KLUJJTkNPTkZJRyA9ICIke2JpbmRpcn0vbGlicG5nLWNvbmZpZyAke2JpbmRpcn0vbGlicG5nMTYtY29uZmlnIgotCi1pbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnCi0KLSMgV29yayBhcm91bmQgbWlzc2luZyBzeW1ib2xzCi1FWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibmVvbiIsICItLWVuYWJsZS1hcm0tbmVvbj1vbiIsICItLWVuYWJsZS1hcm0tbmVvbj1vZmYiICxkKX0iCi0KLVBBQ0tBR0VTID0rICIke1BOfS10b29scyIKLQotRklMRVNfJHtQTn0tdG9vbHMgPSAiJHtiaW5kaXJ9L3BuZy1maXgtaXR4dCAke2JpbmRpcn0vcG5nZml4ICR7YmluZGlyfS9wbmdjcCIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnBuZy9saWJwbmdfMS42LjMxLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnBuZy9saWJwbmdfMS42LjMxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NmVhMTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlicG5nL2xpYnBuZ18xLjYuMzEuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJQTkcgaW1hZ2UgZm9ybWF0IGRlY29kaW5nIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpYnBuZy5vcmcvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMaWJwbmciCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT02ZjIxZTRlMWY3OTU4MTBiNWVhNDkxYjMzM2JjNmVhMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wbmcuaDtlbmRsaW5lPTE0NDttZDU9YWYzMDBjNDE5YTQ1YzUzYThkMmRhYTBiN2QxNjdhNjYiCitERVBFTkRTID0gInpsaWIiCisKK0xJQlYgPSAiMTYiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3Byb2plY3QvJHtCUE59LyR7QlBOfSR7TElCVn0vJHtQVn0vJHtCUH0udGFyLnh6IgorU1JDX1VSSVttZDVzdW1dID0gIjFiMzRlYWI0NDAyNjNlMzJjZmEzOWQxOTQxM2ZhZDU0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjIzMmE2MDJkZTA0OTE2YjJiNWNlNmY5MDE4MjljYWY0MTk1MTllNmExNmNjOWNkN2MxYzkxMTg3ZDNlZThiNDEiCisKK01JUlJPUlMgKz0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wcm9qZWN0LyR7QlBOfS8ke0JQTn0ke0xJQlZ9LyR7UFZ9LyAke1NPVVJDRUZPUkdFX01JUlJPUn0vcHJvamVjdC8ke0JQTn0vJHtCUE59JHtMSUJWfS9vbGRlci1yZWxlYXNlcy8ke1BWfS8iCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vbGlicG5nLWNvbmZpZyAke2JpbmRpcn0vbGlicG5nMTYtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnCisKKyMgV29yayBhcm91bmQgbWlzc2luZyBzeW1ib2xzCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibmVvbiIsICItLWVuYWJsZS1hcm0tbmVvbj1vbiIsICItLWVuYWJsZS1hcm0tbmVvbj1vZmYiICxkKX0iCisKK1BBQ0tBR0VTID0rICIke1BOfS10b29scyIKKworRklMRVNfJHtQTn0tdG9vbHMgPSAiJHtiaW5kaXJ9L3BuZy1maXgtaXR4dCAke2JpbmRpcn0vcG5nZml4ICR7YmluZGlyfS9wbmdjcCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvbGlic25kZmlsZTEvQ1ZFLTIwMTctODM2Mi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzbmRmaWxlL2xpYnNuZGZpbGUxL0NWRS0yMDE3LTgzNjIucGF0Y2gKaW5kZXggNzcxZWM5Mi4uOWVlN2U0NiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvbGlic25kZmlsZTEvQ1ZFLTIwMTctODM2Mi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic25kZmlsZS9saWJzbmRmaWxlMS9DVkUtMjAxNy04MzYyLnBhdGNoCkBAIC0xNCwyMCArMTQsMTcgQEAKIFVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2h0dHBzOi8vZ2l0aHViLmNvbS9lcmlrZC9saWJzbmRmaWxlL2NvbW1pdC9lZjFkYmIyZGYxYzBlNzQxNDg2NjQ2ZGU0MGJkNjM4YTljNGNkODA4XQogCiBTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgotCi1yZW1vdmVkIGh1bmsgIzIgYXMgaXQgd2FzIG9ubHkgY29zbWVudGljIGFuZCBjYXVzZWQgYSBtZXJnZSBjb25mbGljdC4KLXNpZ25lZi1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlcjgwOEBnbWFpbC5jb20+CiAtLS0KICBzcmMvZmxhYy5jIHwgMTEgKysrKysrKysrLS0KICAxIGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogCi1JbmRleDogbGlic25kZmlsZS0xLjAuMjcvc3JjL2ZsYWMuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGxpYnNuZGZpbGUtMS4wLjI3Lm9yaWcvc3JjL2ZsYWMuYwotKysrIGxpYnNuZGZpbGUtMS4wLjI3L3NyYy9mbGFjLmMKK2RpZmYgLS1naXQgYS9zcmMvZmxhYy5jIGIvc3JjL2ZsYWMuYworaW5kZXggNWE0ZjhjMi4uZTRmOWFhYSAxMDA2NDQKKy0tLSBhL3NyYy9mbGFjLmMKKysrKyBiL3NyYy9mbGFjLmMKIEBAIC0xNjksNiArMTY5LDE0IEBAIGZsYWNfYnVmZmVyX2NvcHkgKFNGX1BSSVZBVEUgKnBzZikKLSAJY29uc3QgRkxBQ19faW50MzIqIGNvbnN0ICpidWZmZXIgPSBwZmxhYy0+d2J1ZmZlciA7Ci0gCXVuc2lnbmVkIGkgPSAwLCBqLCBvZmZzZXQgOworIAljb25zdCBpbnQzMl90KiBjb25zdCAqYnVmZmVyID0gcGZsYWMtPndidWZmZXIgOworIAl1bnNpZ25lZCBpID0gMCwgaiwgb2Zmc2V0LCBjaGFubmVscywgbGVuIDsKICAKICsJaWYgKHBzZi0+c2YuY2hhbm5lbHMgIT0gKGludCkgZnJhbWUtPmhlYWRlci5jaGFubmVscykKICsJewlwc2ZfbG9nX3ByaW50ZiAocHNmLCAiRXJyb3I6IEZMQUMgZnJhbWUgY2hhbmdlZCBmcm9tICVkIHRvICVkIGNoYW5uZWxzXG4iCkBAIC00MCw3ICszNywxNSBAQAogIAkvKgogIAkqKglmcmFtZS0+aGVhZGVyLmJsb2Nrc2l6ZSBpcyB2YXJpYWJsZSBhbmQgd2UncmUgdXNpbmcgYSBjb25zdGFudCBibG9ja3NpemUKICAJKioJb2YgRkxBQ19fTUFYX0JMT0NLX1NJWkUuCi1AQCAtNDEwLDcgKzQxOCw3IEBAIHNmX2ZsYWNfbWV0YV9jYWxsYmFjayAoY29uc3QgRkxBQ19fU3RyZWEKK0BAIC0yMDIsNyArMjEwLDYgQEAgZmxhY19idWZmZXJfY29weSAoU0ZfUFJJVkFURSAqcHNmKQorIAkJcmV0dXJuIDAgOworIAkJfSA7CisgCistCisgCWxlbiA9IFNGX01JTiAocGZsYWMtPmxlbiwgZnJhbWUtPmhlYWRlci5ibG9ja3NpemUpIDsKKyAKKyAJaWYgKHBmbGFjLT5yZW1haW4gJSBjaGFubmVscyAhPSAwKQorQEAgLTQzNiw3ICs0NDMsNyBAQCBzZl9mbGFjX21ldGFfY2FsbGJhY2sgKGNvbnN0IEZMQUNfX1N0cmVhbURlY29kZXIgKiBVTlVTRUQgKGRlY29kZXIpLCBjb25zdCBGTEFDXwogIAl7CWNhc2UgRkxBQ19fTUVUQURBVEFfVFlQRV9TVFJFQU1JTkZPIDoKICAJCQlpZiAocHNmLT5zZi5jaGFubmVscyA+IDAgJiYgcHNmLT5zZi5jaGFubmVscyAhPSAoaW50KSBtZXRhZGF0YS0+ZGF0YS5zdHJlYW1faW5mby5jaGFubmVscykKICAJCQl7CXBzZl9sb2dfcHJpbnRmIChwc2YsICJFcnJvcjogRkxBQyBzdHJlYW0gY2hhbmdlZCBmcm9tICVkIHRvICVkIGNoYW5uZWxzXG4iCkBAIC00OSwzICs1NCw2IEBACiAgCQkJCQkJCQkJcHNmLT5zZi5jaGFubmVscywgbWV0YWRhdGEtPmRhdGEuc3RyZWFtX2luZm8uY2hhbm5lbHMpIDsKICAJCQkJcHNmLT5lcnJvciA9IFNGRV9GTEFDX0NIQU5ORUxfQ09VTlRfQ0hBTkdFRCA7CiAgCQkJCXJldHVybiA7CistLSAKKzIuNy40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzbmRmaWxlL2xpYnNuZGZpbGUxXzEuMC4yNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzbmRmaWxlL2xpYnNuZGZpbGUxXzEuMC4yNy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZkZjRlOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic25kZmlsZS9saWJzbmRmaWxlMV8xLjAuMjcuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi1TVU1NQVJZID0gIkF1ZGlvIGZvcm1hdCBDb252ZXJzaW9uIGxpYnJhcnkiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1lZ2EtbmVyZC5jb20vbGlic25kZmlsZSIKLUFVVEhPUiA9ICJFcmlrIGRlIENhc3RybyBMb3BvIgotREVQRU5EUyA9ICJmbGFjIGxpYm9nZyBsaWJ2b3JiaXMgc3FsaXRlMyIKLVNFQ1RJT04gPSAibGlicy9tdWx0aW1lZGlhIgotTElDRU5TRSA9ICJMR1BMdjIuMSIKLQotU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm1lZ2EtbmVyZC5jb20vbGlic25kZmlsZS9maWxlcy9saWJzbmRmaWxlLSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNy02ODkyLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTgzNjEtODM2NS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNy04MzYyLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTgzNjMucGF0Y2ggXAotICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gImZkMWQ5N2M2MDc3ZjAzYjVkOTg0ZDc5NTZmZmVkYjdhIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImEzOTE5NTJmMjdmNGE5MmNlYjJiNGMwNjQ5M2FjMTA3ODk2ZWQ2Yzc2YmU5YTYxM2E0NzMxZjA3NmQzMGZhYzAiCi0KLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWU3N2ZlOTMyMDI3MzZiNDdjMDcwMzU5MTBmNDc5NzRhIgotCi1DVkVfUFJPRFVDVCA9ICJsaWJzbmRmaWxlIgotCi1TID0gIiR7V09SS0RJUn0vbGlic25kZmlsZS0ke1BWfSIKLQotUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmZpbHRlcignRElTVFJPX0ZFQVRVUkVTJywgJ2Fsc2EnLCBkKX0iCi1QQUNLQUdFQ09ORklHW2Fsc2FdID0gIi0tZW5hYmxlLWFsc2EsLS1kaXNhYmxlLWFsc2EsYWxzYS1saWIiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlIHBrZ2NvbmZpZwotCi1kb19jb25maWd1cmVfcHJlcGVuZF9hcm0oKSB7Ci0JZXhwb3J0IGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlPTEKLQlleHBvcnQgYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHM9NjQKLX0KLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvbGlic25kZmlsZTFfMS4wLjI4LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvbGlic25kZmlsZTFfMS4wLjI4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MWFjODIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic25kZmlsZS9saWJzbmRmaWxlMV8xLjAuMjguYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJBdWRpbyBmb3JtYXQgQ29udmVyc2lvbiBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tZWdhLW5lcmQuY29tL2xpYnNuZGZpbGUiCitBVVRIT1IgPSAiRXJpayBkZSBDYXN0cm8gTG9wbyIKK0RFUEVORFMgPSAiZmxhYyBsaWJvZ2cgbGlidm9yYmlzIHNxbGl0ZTMiCitTRUNUSU9OID0gImxpYnMvbXVsdGltZWRpYSIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5tZWdhLW5lcmQuY29tL2xpYnNuZGZpbGUvZmlsZXMvbGlic25kZmlsZS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctNjg5Mi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNy04MzYxLTgzNjUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctODM2Mi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNy04MzYzLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2NDZiNWY5OGNlODlhYzYwY2RiMDYwZmNkMzk4MjQ3YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxZmYzMzkyOWYwNDJmYTMzM2FlZDFlODkyM2FhNjI4YzNlZTllMWViODU1MTI2ODZjNTUwOTJkMWU1YTlkZmE5IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lNzdmZTkzMjAyNzM2YjQ3YzA3MDM1OTEwZjQ3OTc0YSIKKworQ1ZFX1BST0RVQ1QgPSAibGlic25kZmlsZSIKKworUyA9ICIke1dPUktESVJ9L2xpYnNuZGZpbGUtJHtQVn0iCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5maWx0ZXIoJ0RJU1RST19GRUFUVVJFUycsICdhbHNhJywgZCl9IgorUEFDS0FHRUNPTkZJR1thbHNhXSA9ICItLWVuYWJsZS1hbHNhLC0tZGlzYWJsZS1hbHNhLGFsc2EtbGliIgorCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZSBwa2djb25maWcKKworZG9fY29uZmlndXJlX3ByZXBlbmRfYXJtKCkgeworCWV4cG9ydCBhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZT0xCisJZXhwb3J0IGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzPTY0Cit9CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE2LTEwMDkzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTYtMTAwOTMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwOWJiN2YuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTYtMTAwOTMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi1Gcm9tIDc4N2MwZWU5MDY0MzBiNzcyZjMzY2E1MGI5N2I4YjVjYTA3MGZhZWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBlcm91YXVsdCA8ZXJvdWF1bHQ+Ci1EYXRlOiBTYXQsIDMgRGVjIDIwMTYgMTY6NDA6MDEgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gKiB0b29scy90aWZmY3AuYzogZml4IHVpbnQzMiB1bmRlcmZsb3cvb3ZlcmZsb3cgdGhhdCBjYW4KLSBjYXVzZSBoZWFwLWJhc2VkIGJ1ZmZlciBvdmVyZmxvdy4gUmVwb3J0ZWQgYnkgQWdvc3Rpbm8gU2FydWJiby4gRml4ZXMKLSBodHRwOi8vYnVnemlsbGEubWFwdG9vbHMub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjEwCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLUNWRTogQ1ZFLTIwMTYtMTAwOTMKLVNpZ25lZC1vZmYtYnk6IFJhamt1bWFyIFZlZXIgPHJ2ZWVyQG12aXN0YS5jb20+Ci0KLS0tLQotIENoYW5nZUxvZyAgICAgIHwgNyArKysrKysrCi0gdG9vbHMvdGlmZmNwLmMgfCA2ICsrKy0tLQotIDIgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKLQotSW5kZXg6IHRpZmYtNC4wLjcvdG9vbHMvdGlmZmNwLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSB0aWZmLTQuMC43Lm9yaWcvdG9vbHMvdGlmZmNwLmMKLSsrKyB0aWZmLTQuMC43L3Rvb2xzL3RpZmZjcC5jCi1AQCAtMTE2Myw3ICsxMTYzLDcgQEAgYmFkOgotIAotIHN0YXRpYyB2b2lkCi0gY3BTdHJpcFRvVGlsZSh1aW50OCogb3V0LCB1aW50OCogaW4sCi0tICAgIHVpbnQzMiByb3dzLCB1aW50MzIgY29scywgaW50IG91dHNrZXcsIGludCBpbnNrZXcpCi0rICAgIHVpbnQzMiByb3dzLCB1aW50MzIgY29scywgaW50IG91dHNrZXcsIGludDY0IGluc2tldykKLSB7Ci0gCXdoaWxlIChyb3dzLS0gPiAwKSB7Ci0gCQl1aW50MzIgaiA9IGNvbHM7Ci1AQCAtMTMyMCw3ICsxMzIwLDcgQEAgREVDTEFSRXJlYWRGdW5jKHJlYWRDb250aWdUaWxlc0ludG9CdWZmZQotIAl0ZGF0YV90IHRpbGVidWY7Ci0gCXVpbnQzMiBpbWFnZXcgPSBUSUZGU2NhbmxpbmVTaXplKGluKTsKLSAJdWludDMyIHRpbGV3ICA9IFRJRkZUaWxlUm93U2l6ZShpbik7Ci0tCWludCBpc2tldyA9IGltYWdldyAtIHRpbGV3OwotKwlpbnQ2NCBpc2tldyA9IChpbnQ2NClpbWFnZXcgLSAoaW50NjQpdGlsZXc7Ci0gCXVpbnQ4KiBidWZwID0gKHVpbnQ4KikgYnVmOwotIAl1aW50MzIgdHcsIHRsOwotIAl1aW50MzIgcm93OwotQEAgLTEzNDgsNyArMTM0OCw3IEBAIERFQ0xBUkVyZWFkRnVuYyhyZWFkQ29udGlnVGlsZXNJbnRvQnVmZmUKLSAJCQkJc3RhdHVzID0gMDsKLSAJCQkJZ290byBkb25lOwotIAkJCX0KLS0JCQlpZiAoY29sYiArIHRpbGV3ID4gaW1hZ2V3KSB7Ci0rCQkJaWYgKGNvbGIgPiBpc2tldykgewotIAkJCQl1aW50MzIgd2lkdGggPSBpbWFnZXcgLSBjb2xiOwotIAkJCQl1aW50MzIgb3NrZXcgPSB0aWxldyAtIHdpZHRoOwotIAkJCQljcFN0cmlwVG9UaWxlKGJ1ZnAgKyBjb2xiLApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTYtMTAyNjYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNi0xMDI2Ni5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFjOTBjNi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNi0xMDI2Ni5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLUZyb20gMTg1NTQwN2M0ZTVhMjdhZGUwMDZiMjZjMmRlYzhhMzE3NDVjMzU2ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IGVyb3VhdWx0IDxlcm91YXVsdD4KLURhdGU6IEZyaSwgMiBEZWMgMjAxNiAyMTo1Njo1NiArMDAwMAotU3ViamVjdDogW1BBVENIXSAqIGxpYnRpZmYvdGlmX3JlYWQuYywgbGlidGlmZi90aWZmaW9wLmg6IGZpeCB1aW50MzIgb3ZlcmZsb3cKLSBpbiBUSUZGUmVhZEVuY29kZWRTdHJpcCgpIHRoYXQgY2F1c2VkIGFuIGludGVnZXIgZGl2aXNpb24gYnkgemVyby4gUmVwb3J0ZWQKLSBieSBBZ29zdGlubyBTYXJ1YmJvLiBGaXhlcyBodHRwOi8vYnVnemlsbGEubWFwdG9vbHMub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTk2Ci0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotQ1ZFOiBDVkUtMjAxNi0xMDI2NgotU2lnbmVkLW9mZi1ieTogUmFqa3VtYXIgVmVlciA8cnZlZXJAbXZpc3RhLmNvbT4KLS0tLQotIENoYW5nZUxvZyAgICAgICAgICB8IDcgKysrKysrKwotIGxpYnRpZmYvdGlmX3JlYWQuYyB8IDIgKy0KLSBsaWJ0aWZmL3RpZmZpb3AuaCAgfCA0ICsrKysKLSAzIGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotSW5kZXg6IHRpZmYtNC4wLjcvQ2hhbmdlTG9nCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gdGlmZi00LjAuNy5vcmlnL0NoYW5nZUxvZwotKysrIHRpZmYtNC4wLjcvQ2hhbmdlTG9nCi1AQCAtMSwzICsxLDEwIEBACi0rMjAxNi0xMi0wMiBFdmVuIFJvdWF1bHQgPGV2ZW4ucm91YXVsdCBhdCBzcGF0aWFseXMuY29tPgotKwotKyAgICAgICAqIGxpYnRpZmYvdGlmX3JlYWQuYywgbGlidGlmZi90aWZmaW9wLmg6IGZpeCB1aW50MzIgb3ZlcmZsb3cgaW4KLSsgICAgICAgVElGRlJlYWRFbmNvZGVkU3RyaXAoKSB0aGF0IGNhdXNlZCBhbiBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8uCi0rICAgICAgIFJlcG9ydGVkIGJ5IEFnb3N0aW5vIFNhcnViYm8uCi0rICAgICAgIEZpeGVzIGh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI1OTYKLSsKLSAyMDE3LTA3LTE1ICBFdmVuIFJvdWF1bHQgPGV2ZW4ucm91YXVsdCBhdCBzcGF0aWFseXMuY29tPgotIAotIAkqIHRvb2xzL3RpZmYycGRmLmM6IHByZXZlbnQgaGVhcCBidWZmZXIgb3ZlcmZsb3cgd3JpdGUgaW4gIlJhdyIKLUluZGV4OiB0aWZmLTQuMC43L2xpYnRpZmYvdGlmX3JlYWQuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHRpZmYtNC4wLjcub3JpZy9saWJ0aWZmL3RpZl9yZWFkLmMKLSsrKyB0aWZmLTQuMC43L2xpYnRpZmYvdGlmX3JlYWQuYwotQEAgLTM0Niw3ICszNDYsNyBAQCBUSUZGUmVhZEVuY29kZWRTdHJpcChUSUZGKiB0aWYsIHVpbnQzMiBzCi0gCXJvd3NwZXJzdHJpcD10ZC0+dGRfcm93c3BlcnN0cmlwOwotIAlpZiAocm93c3BlcnN0cmlwPnRkLT50ZF9pbWFnZWxlbmd0aCkKLSAJCXJvd3NwZXJzdHJpcD10ZC0+dGRfaW1hZ2VsZW5ndGg7Ci0tCXN0cmlwc3BlcnBsYW5lPSgodGQtPnRkX2ltYWdlbGVuZ3RoK3Jvd3NwZXJzdHJpcC0xKS9yb3dzcGVyc3RyaXApOwotKwlzdHJpcHNwZXJwbGFuZT0gVElGRmhvd21hbnlfMzJfbWF4dWludF9jb21wYXQodGQtPnRkX2ltYWdlbGVuZ3RoLCByb3dzcGVyc3RyaXApOwotIAlzdHJpcGlucGxhbmU9KHN0cmlwJXN0cmlwc3BlcnBsYW5lKTsKLSAJcGxhbmU9KHVpbnQxNikoc3RyaXAvc3RyaXBzcGVycGxhbmUpOwotIAlyb3dzPXRkLT50ZF9pbWFnZWxlbmd0aC1zdHJpcGlucGxhbmUqcm93c3BlcnN0cmlwOwotSW5kZXg6IHRpZmYtNC4wLjcvbGlidGlmZi90aWZmaW9wLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSB0aWZmLTQuMC43Lm9yaWcvbGlidGlmZi90aWZmaW9wLmgKLSsrKyB0aWZmLTQuMC43L2xpYnRpZmYvdGlmZmlvcC5oCi1AQCAtMjUwLDYgKzI1MCwxMCBAQCBzdHJ1Y3QgdGlmZiB7Ci0gI2RlZmluZSBUSUZGaG93bWFueV8zMih4LCB5KSAoKCh1aW50MzIpeCA8ICgweGZmZmZmZmZmIC0gKHVpbnQzMikoeS0xKSkpID8gXAotIAkJCSAgICgoKCh1aW50MzIpKHgpKSsoKCh1aW50MzIpKHkpKS0xKSkvKCh1aW50MzIpKHkpKSkgOiBcCi0gCQkJICAgMFUpCi0rLyogVmFyaWFudCBvZiBUSUZGaG93bWFueV8zMigpIHRoYXQgZG9lc24ndCByZXR1cm4gMCBpZiB4IGNsb3NlIHRvIE1BWFVJTlQuICovCi0rLyogQ2F1dGlvbjogVElGRmhvd21hbnlfMzJfbWF4dWludF9jb21wYXQoeCx5KSp5IG1pZ2h0IG92ZXJmbG93ICovCi0rI2RlZmluZSBUSUZGaG93bWFueV8zMl9tYXh1aW50X2NvbXBhdCh4LCB5KSBcCi0rCQkJICAgKCgodWludDMyKSh4KSAvICh1aW50MzIpKHkpKSArICgoKCh1aW50MzIpKHgpICUgKHVpbnQzMikoeSkpICE9IDApID8gMSA6IDApKQotICNkZWZpbmUgVElGRmhvd21hbnk4XzMyKHgpICgoKHgpJjB4MDcpPygodWludDMyKSh4KT4+MykrMToodWludDMyKSh4KT4+MykKLSAjZGVmaW5lIFRJRkZyb3VuZHVwXzMyKHgsIHkpIChUSUZGaG93bWFueV8zMih4LHkpKih5KSkKLSAjZGVmaW5lIFRJRkZob3dtYW55XzY0KHgsIHkpICgoKCh1aW50NjQpKHgpKSsoKCh1aW50NjQpKHkpKS0xKSkvKCh1aW50NjQpKHkpKSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE2LTEwMjY3LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTYtMTAyNjcucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0YzU3OTEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTYtMTAyNjcucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi1Gcm9tIGY4MjAzYzdhYjFkYmQ3YjVjNTkxNTg1NzZiZWM3ZGE5MDE5MWY0MmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBlcm91YXVsdCA8ZXJvdWF1bHQ+Ci1EYXRlOiBTYXQsIDMgRGVjIDIwMTYgMTE6MTU6MTggKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gKiBsaWJ0aWZmL3RpZl9vanBlZy5jOiBtYWtlIE9KUEVHRGVjb2RlKCkgZWFybHkgZXhpdCBpbiBjYXNlCi0gb2YgZmFpbHVyZSBpbiBPSlBFR1ByZURlY29kZSgpLiBUaGlzIHdpbGwgYXZvaWQgYSBkaXZpZGUgYnkgemVybywgYW5kCi0gcG90ZW50aWFsIG90aGVyIGlzc3Vlcy4gUmVwb3J0ZWQgYnkgQWdvc3Rpbm8gU2FydWJiby4gRml4ZXMKLSBodHRwOi8vYnVnemlsbGEubWFwdG9vbHMub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjExCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotQ1ZFOiBDVkUtMjAxNi0xMDI2NwotU2lnbmVkLW9mZi1ieTogUmFqa3VtYXIgVmVlciA8cnZlZXJAbXZpc3RhLmNvbT4KLS0tLQotIENoYW5nZUxvZyAgICAgICAgICAgfCA3ICsrKysrKysKLSBsaWJ0aWZmL3RpZl9vanBlZy5jIHwgOCArKysrKysrKwotIDIgZmlsZXMgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCi1pbmRleCA3MzM5YzFhLi42NmZiY2RjIDEwMDY0NAotLS0tIGEvQ2hhbmdlTG9nCi0rKysgYi9DaGFuZ2VMb2cKLUBAIC0xLDMgKzEsMTAgQEAKLSsyMDE2LTEyLTAzIEV2ZW4gUm91YXVsdCA8ZXZlbi5yb3VhdWx0IGF0IHNwYXRpYWx5cy5jb20+Ci0rIAotKwkqIGxpYnRpZmYvdGlmX29qcGVnLmM6IG1ha2UgT0pQRUdEZWNvZGUoKSBlYXJseSBleGl0IGluIGNhc2Ugb2YgZmFpbHVyZSBpbgotKwlPSlBFR1ByZURlY29kZSgpLiBUaGlzIHdpbGwgYXZvaWQgYSBkaXZpZGUgYnkgemVybywgYW5kIHBvdGVudGlhbCBvdGhlciBpc3N1ZXMuCi0rCVJlcG9ydGVkIGJ5IEFnb3N0aW5vIFNhcnViYm8uCi0rCUZpeGVzIGh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI2MTEKLSsKLSAyMDE2LTEyLTAyIEV2ZW4gUm91YXVsdCA8ZXZlbi5yb3VhdWx0IGF0IHNwYXRpYWx5cy5jb20+Ci0gCi0gCSogbGlidGlmZi90aWZfcmVhZC5jLCBsaWJ0aWZmL3RpZmZpb3AuaDogZml4IHVpbnQzMiBvdmVyZmxvdyBpbgotZGlmZiAtLWdpdCBhL2xpYnRpZmYvdGlmX29qcGVnLmMgYi9saWJ0aWZmL3RpZl9vanBlZy5jCi1pbmRleCAxY2NjM2Y5Li5mMTllOGZkIDEwMDY0NAotLS0tIGEvbGlidGlmZi90aWZfb2pwZWcuYwotKysrIGIvbGlidGlmZi90aWZfb2pwZWcuYwotQEAgLTI0NCw2ICsyNDQsNyBAQCB0eXBlZGVmIGVudW0gewotIAotIHR5cGVkZWYgc3RydWN0IHsKLSAJVElGRiogdGlmOwotKyAgICAgICAgaW50IGRlY29kZXJfb2s7Ci0gCSNpZm5kZWYgTElCSlBFR19FTkNBUF9FWFRFUk5BTAotIAlKTVBfQlVGIGV4aXRfam1wYnVmOwotIAkjZW5kaWYKLUBAIC03MjIsNiArNzIzLDcgQEAgT0pQRUdQcmVEZWNvZGUoVElGRiogdGlmLCB1aW50MTYgcykKLSAJCX0KLSAJCXNwLT53cml0ZV9jdXJzdHJpbGUrKzsKLSAJfQotKwlzcC0+ZGVjb2Rlcl9vayA9IDE7Ci0gCXJldHVybigxKTsKLSB9Ci0gCi1AQCAtNzg0LDggKzc4NiwxNCBAQCBPSlBFR1ByZURlY29kZVNraXBTY2FubGluZXMoVElGRiogdGlmKQotIHN0YXRpYyBpbnQKLSBPSlBFR0RlY29kZShUSUZGKiB0aWYsIHVpbnQ4KiBidWYsIHRtc2l6ZV90IGNjLCB1aW50MTYgcykKLSB7Ci0rICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBtb2R1bGVbXT0iT0pQRUdEZWNvZGUiOwotIAlPSlBFR1N0YXRlKiBzcD0oT0pQRUdTdGF0ZSopdGlmLT50aWZfZGF0YTsKLSAJKHZvaWQpczsKLSsgICAgICAgIGlmKCAhc3AtPmRlY29kZXJfb2sgKQotKyAgICAgICAgewotKyAgICAgICAgICAgIFRJRkZFcnJvckV4dCh0aWYtPnRpZl9jbGllbnRkYXRhLG1vZHVsZSwiQ2Fubm90IGRlY29kZTogZGVjb2RlciBub3QgY29ycmVjdGx5IGluaXRpYWxpemVkIik7Ci0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICB9Ci0gCWlmIChzcC0+bGlianBlZ19qcGVnX3F1ZXJ5X3N0eWxlPT0wKQotIAl7Ci0gCQlpZiAoT0pQRUdEZWNvZGVSYXcodGlmLGJ1ZixjYyk9PTApCi0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE2LTEwMjY4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTYtMTAyNjgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYjk4MmEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTYtMTAyNjgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1Gcm9tIDUzOTdhNDE3ZTYxMjU4YzY5MjA5OTA0ZTY1MmExZjQwOWVjM2I5ZGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBlcm91YXVsdCA8ZXJvdWF1bHQ+Ci1EYXRlOiBGcmksIDIgRGVjIDIwMTYgMjI6MTM6MzIgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gKiB0b29scy90aWZmY3AuYzogYXZvaWQgdWludDMyIHVuZGVyZmxvdyBpbiBjcERlY29kZWRTdHJpcHMKLSB0aGF0IGNhbiBjYXVzZSB2YXJpb3VzIGlzc3Vlcywgc3VjaCBhcyBidWZmZXIgb3ZlcmZsb3dzIGluIHRoZSBsaWJyYXJ5LgotIFJlcG9ydGVkIGJ5IEFnb3N0aW5vIFNhcnViYm8uIEZpeGVzCi0gaHR0cDovL2J1Z3ppbGxhLm1hcHRvb2xzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU5OAotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1DVkU6IENWRS0yMDE2LTEwMjY4Ci1TaWduZWQtb2ZmLWJ5OiBSYWprdW1hciBWZWVyIDxydmVlckBtdmlzdGEuY29tPgotCi0tLS0KLSBDaGFuZ2VMb2cgICAgICB8IDcgKysrKysrKwotIHRvb2xzL3RpZmZjcC5jIHwgMiArLQotIDIgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCi0KLUluZGV4OiB0aWZmLTQuMC43L3Rvb2xzL3RpZmZjcC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gdGlmZi00LjAuNy5vcmlnL3Rvb2xzL3RpZmZjcC5jCi0rKysgdGlmZi00LjAuNy90b29scy90aWZmY3AuYwotQEAgLTk4NSw3ICs5ODUsNyBAQCBERUNMQVJFY3BGdW5jKGNwRGVjb2RlZFN0cmlwcykKLSAJCXRzdHJpcF90IHMsIG5zID0gVElGRk51bWJlck9mU3RyaXBzKGluKTsKLSAJCXVpbnQzMiByb3cgPSAwOwotIAkJX1RJRkZtZW1zZXQoYnVmLCAwLCBzdHJpcHNpemUpOwotLQkJZm9yIChzID0gMDsgcyA8IG5zOyBzKyspIHsKLSsJCWZvciAocyA9IDA7IHMgPCBucyAmJiByb3cgPCBpbWFnZWxlbmd0aDsgcysrKSB7Ci0gCQkJdHNpemVfdCBjYyA9IChyb3cgKyByb3dzcGVyc3RyaXAgPiBpbWFnZWxlbmd0aCkgPwotIAkJCSAgICBUSUZGVlN0cmlwU2l6ZShpbiwgaW1hZ2VsZW5ndGggLSByb3cpIDogc3RyaXBzaXplOwotIAkJCWlmIChUSUZGUmVhZEVuY29kZWRTdHJpcChpbiwgcywgYnVmLCBjYykgPCAwCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNi0xMDI2OS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE2LTEwMjY5LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWY0YTE1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE2LTEwMjY5LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLUZyb20gMTBmNzJkZDIzMjg0OWQwMTQyYTA2ODhiY2M5YWE3MTAyNWYxMjBhMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IGVyb3VhdWx0IDxlcm91YXVsdD4KLURhdGU6IEZyaSwgMiBEZWMgMjAxNiAyMzowNTo1MSArMDAwMAotU3ViamVjdDogW1BBVENIIDIvNF0gKiBsaWJ0aWZmL3RpZl9waXhhcmxvZy5jLCBsaWJ0aWZmL3RpZl9sdXYuYzogZml4Ci0gaGVhcC1iYXNlZCBidWZmZXIgb3ZlcmZsb3cgb24gZ2VuZXJhdGlvbiBvZiBQaXhhckxvZyAvIExVViBjb21wcmVzc2VkIGZpbGVzLAotIHdpdGggQ29sb3JNYXAsIFRyYW5zZmVyRnVuY3Rpb24gYXR0YWNoZWQgYW5kIG5hc3R5IHBsYXlzIHdpdGggYml0c3BlcnNhbXBsZS4KLSBUaGUgZml4IGZvciBMVVYgaGFzIG5vdCBiZWVuIHRlc3RlZCwgYnV0IHN1ZmZlcnMgZnJvbSB0aGUgc2FtZSBraW5kIG9mIGlzc3VlCi0gb2YgUGl4YXJMb2cuIFJlcG9ydGVkIGJ5IEFnb3N0aW5vIFNhcnViYm8uIEZpeGVzCi0gaHR0cDovL2J1Z3ppbGxhLm1hcHRvb2xzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjYwNAotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0KLUNWRTogQ1ZFLTIwMTYtMTAyNjkKLVNpZ25lZC1vZmYtYnk6IFJhamt1bWFyIFZlZXIgPHJ2ZWVyQG12aXN0YS5jb20+Ci0tLS0KLSBDaGFuZ2VMb2cgICAgICAgICAgICAgIHwgMTAgKysrKysrKysrKwotIGxpYnRpZmYvdGlmX2x1di5jICAgICAgfCAxOCArKysrKysrKysrKysrKy0tLS0KLSBsaWJ0aWZmL3RpZl9waXhhcmxvZy5jIHwgMTcgKysrKysrKysrKysrKysrLS0KLSAzIGZpbGVzIGNoYW5nZWQsIDM5IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKLWluZGV4IDJlOTEzYjYuLjBhMmMyYTcgMTAwNjQ0Ci0tLS0gYS9DaGFuZ2VMb2cKLSsrKyBiL0NoYW5nZUxvZwotQEAgLTEsNCArMSwxNCBAQAotIDIwMTYtMTItMDMgRXZlbiBSb3VhdWx0IDxldmVuLnJvdWF1bHQgYXQgc3BhdGlhbHlzLmNvbT4KLSsKLSsJKiBsaWJ0aWZmL3RpZl9waXhhcmxvZy5jLCBsaWJ0aWZmL3RpZl9sdXYuYzogZml4IGhlYXAtYmFzZWQgYnVmZmVyCi0rCW92ZXJmbG93IG9uIGdlbmVyYXRpb24gb2YgUGl4YXJMb2cgLyBMVVYgY29tcHJlc3NlZCBmaWxlcywgd2l0aAotKwlDb2xvck1hcCwgVHJhbnNmZXJGdW5jdGlvbiBhdHRhY2hlZCBhbmQgbmFzdHkgcGxheXMgd2l0aCBiaXRzcGVyc2FtcGxlLgotKwlUaGUgZml4IGZvciBMVVYgaGFzIG5vdCBiZWVuIHRlc3RlZCwgYnV0IHN1ZmZlcnMgZnJvbSB0aGUgc2FtZSBraW5kCi0rCW9mIGlzc3VlIG9mIFBpeGFyTG9nLgotKwlSZXBvcnRlZCBieSBBZ29zdGlubyBTYXJ1YmJvLgotKwlGaXhlcyBodHRwOi8vYnVnemlsbGEubWFwdG9vbHMub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjA0Ci0rCi0rMjAxNi0xMi0wMyBFdmVuIFJvdWF1bHQgPGV2ZW4ucm91YXVsdCBhdCBzcGF0aWFseXMuY29tPgotICAKLSAJKiBsaWJ0aWZmL3RpZl9vanBlZy5jOiBtYWtlIE9KUEVHRGVjb2RlKCkgZWFybHkgZXhpdCBpbiBjYXNlIG9mIGZhaWx1cmUgaW4KLSAJT0pQRUdQcmVEZWNvZGUoKS4gVGhpcyB3aWxsIGF2b2lkIGEgZGl2aWRlIGJ5IHplcm8sIGFuZCBwb3RlbnRpYWwgb3RoZXIgaXNzdWVzLgotZGlmZiAtLWdpdCBhL2xpYnRpZmYvdGlmX2x1di5jIGIvbGlidGlmZi90aWZfbHV2LmMKLWluZGV4IGY2OGE5YjEuLmU2NzgzZGIgMTAwNjQ0Ci0tLS0gYS9saWJ0aWZmL3RpZl9sdXYuYwotKysrIGIvbGlidGlmZi90aWZfbHV2LmMKLUBAIC0xNTgsNiArMTU4LDcgQEAKLSB0eXBlZGVmIHN0cnVjdCBsb2dMdXZTdGF0ZSBMb2dMdXZTdGF0ZTsKLSAKLSBzdHJ1Y3QgbG9nTHV2U3RhdGUgewotKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgZW5jb2Rlcl9zdGF0ZTsgIC8qIDEgaWYgZW5jb2RlciBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgKi8KLSAJaW50ICAgICAgICAgICAgICAgICAgICAgdXNlcl9kYXRhZm10OyAgIC8qIHVzZXIgZGF0YSBmb3JtYXQgKi8KLSAJaW50ICAgICAgICAgICAgICAgICAgICAgZW5jb2RlX21ldGg7ICAgIC8qIGVuY29kaW5nIG1ldGhvZCAqLwotIAlpbnQgICAgICAgICAgICAgICAgICAgICBwaXhlbF9zaXplOyAgICAgLyogYnl0ZXMgcGVyIHBpeGVsICovCi1AQCAtMTU1Miw2ICsxNTUzLDcgQEAgTG9nTHV2U2V0dXBFbmNvZGUoVElGRiogdGlmKQotIAkJICAgIHRkLT50ZF9waG90b21ldHJpYywgIm11c3QgYmUgZWl0aGVyIExvZ0xVViBvciBMb2dMIik7Ci0gCQlicmVhazsKLSAJfQotKwlzcC0+ZW5jb2Rlcl9zdGF0ZSA9IDE7Ci0gCXJldHVybiAoMSk7Ci0gbm90c3VwcG9ydGVkOgotIAlUSUZGRXJyb3JFeHQodGlmLT50aWZfY2xpZW50ZGF0YSwgbW9kdWxlLAotQEAgLTE1NjMsMTkgKzE1NjUsMjcgQEAgbm90c3VwcG9ydGVkOgotIHN0YXRpYyB2b2lkCi0gTG9nTHV2Q2xvc2UoVElGRiogdGlmKQotIHsKLSsgICAgICAgIExvZ0x1dlN0YXRlKiBzcCA9IChMb2dMdXZTdGF0ZSopIHRpZi0+dGlmX2RhdGE7Ci0gCVRJRkZEaXJlY3RvcnkgKnRkID0gJnRpZi0+dGlmX2RpcjsKLSAKLSsJYXNzZXJ0KHNwICE9IDApOwotIAkvKgotIAkgKiBGb3IgY29uc2lzdGVuY3ksIHdlIGFsd2F5cyB3YW50IHRvIHdyaXRlIG91dCB0aGUgc2FtZQotIAkgKiBiaXRzcGVyc2FtcGxlIGFuZCBzYW1wbGVmb3JtYXQgZm9yIG91ciBUSUZGIGZpbGUsCi0gCSAqIHJlZ2FyZGxlc3Mgb2YgdGhlIGRhdGEgZm9ybWF0IGJlaW5nIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uLgotIAkgKiBTaW5jZSB0aGlzIHJvdXRpbmUgaXMgY2FsbGVkIGFmdGVyIHRhZ3MgaGF2ZSBiZWVuIHNldCBidXQKLSAJICogYmVmb3JlIHRoZXkgaGF2ZSBiZWVuIHJlY29yZGVkIGluIHRoZSBmaWxlLCB3ZSByZXNldCB0aGVtIGhlcmUuCi0rICAgICAgICAgKiBOb3RlOiB0aGlzIGlzIHJlYWxseSBhIG5hc3R5IGFwcHJvYWNoLiBTZWUgUGl4YXJMb2dDbG9zZQotIAkgKi8KLS0JdGQtPnRkX3NhbXBsZXNwZXJwaXhlbCA9Ci0tCSAgICAodGQtPnRkX3Bob3RvbWV0cmljID09IFBIT1RPTUVUUklDX0xPR0wpID8gMSA6IDM7Ci0tCXRkLT50ZF9iaXRzcGVyc2FtcGxlID0gMTY7Ci0tCXRkLT50ZF9zYW1wbGVmb3JtYXQgPSBTQU1QTEVGT1JNQVRfSU5UOwotKyAgICAgICAgaWYoIHNwLT5lbmNvZGVyX3N0YXRlICkKLSsgICAgICAgIHsKLSsgICAgICAgICAgICAvKiBTZWUgUGl4YXJMb2dDbG9zZS4gTWlnaHQgYXZvaWQgaXNzdWVzIHdpdGggdGFncyB3aG9zZSBzaXplIGRlcGVuZHMKLSsgICAgICAgICAgICAgKiBvbiB0aG9zZSBiZWxvdywgYnV0IG5vdCBjb21wbGV0ZWx5IHN1cmUgdGhpcyBpcyBlbm91Z2guICovCi0rICAgICAgICAgICAgdGQtPnRkX3NhbXBsZXNwZXJwaXhlbCA9Ci0rICAgICAgICAgICAgICAgICh0ZC0+dGRfcGhvdG9tZXRyaWMgPT0gUEhPVE9NRVRSSUNfTE9HTCkgPyAxIDogMzsKLSsgICAgICAgICAgICB0ZC0+dGRfYml0c3BlcnNhbXBsZSA9IDE2OwotKyAgICAgICAgICAgIHRkLT50ZF9zYW1wbGVmb3JtYXQgPSBTQU1QTEVGT1JNQVRfSU5UOwotKyAgICAgICAgfQotIH0KLSAKLSBzdGF0aWMgdm9pZAotZGlmZiAtLWdpdCBhL2xpYnRpZmYvdGlmX3BpeGFybG9nLmMgYi9saWJ0aWZmL3RpZl9waXhhcmxvZy5jCi1pbmRleCBkMTI0NmMzLi5hYTk5YmM5IDEwMDY0NAotLS0tIGEvbGlidGlmZi90aWZfcGl4YXJsb2cuYwotKysrIGIvbGlidGlmZi90aWZfcGl4YXJsb2cuYwotQEAgLTEyMzMsOCArMTIzMywxMCBAQCBQaXhhckxvZ1Bvc3RFbmNvZGUoVElGRiogdGlmKQotIHN0YXRpYyB2b2lkCi0gUGl4YXJMb2dDbG9zZShUSUZGKiB0aWYpCi0gewotKyAgICAgICAgUGl4YXJMb2dTdGF0ZSogc3AgPSAoUGl4YXJMb2dTdGF0ZSopIHRpZi0+dGlmX2RhdGE7Ci0gCVRJRkZEaXJlY3RvcnkgKnRkID0gJnRpZi0+dGlmX2RpcjsKLSAKLSsJYXNzZXJ0KHNwICE9IDApOwotIAkvKiBJbiBhIHJlYWxseSBzbmVha3kgKGFuZCByZWFsbHkgaW5jb3JyZWN0LCBhbmQgdW50cnV0aGZ1bCwgYW5kCi0gCSAqIHRyb3VibGVzb21lLCBhbmQgZXJyb3ItcHJvbmUpIG1hbmV1dmVyIHRoYXQgY29tcGxldGVseSBnb2VzIGFnYWluc3QKLSAJICogdGhlIHNwaXJpdCBvZiBUSUZGLCBhbmQgYnJlYWtzIFRJRkYsIG9uIGNsb3NlLCB3ZSBjb3ZlcnRseQotQEAgLTEyNDMsOCArMTI0NSwxOSBAQCBQaXhhckxvZ0Nsb3NlKFRJRkYqIHRpZikKLSAJICogcmVhZGVycyB0aGF0IGRvbid0IGtub3cgYWJvdXQgUGl4YXJMb2csIG9yIGhvdyB0byBzZXQKLSAJICogdGhlIFBJWEFSTE9HREFURk1UIHBzZXVkby10YWcuCi0gCSAqLwotLQl0ZC0+dGRfYml0c3BlcnNhbXBsZSA9IDg7Ci0tCXRkLT50ZF9zYW1wbGVmb3JtYXQgPSBTQU1QTEVGT1JNQVRfVUlOVDsKLSsKLSsgICAgICAgIGlmIChzcC0+c3RhdGUmUExTVEFURV9JTklUKSB7Ci0rICAgICAgICAgICAgLyogV2UgdGVzdCB0aGUgc3RhdGUgdG8gYXZvaWQgYW4gaXNzdWUgc3VjaCBhcyBpbgotKyAgICAgICAgICAgICAqIGh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI2MDQKLSsgICAgICAgICAgICAgKiBXaGF0IGFwcGVuZHMgaW4gdGhhdCBjYXNlIGlzIHRoYXQgdGhlIGJpdHNwZXJzYW1wbGUgaXMgMSBhbmQKLSsgICAgICAgICAgICAgKiBhIFRyYW5zZmVyRnVuY3Rpb24gaXMgc2V0LiBUaGUgc2l6ZSBvZiB0aGUgVHJhbnNmZXJGdW5jdGlvbgotKyAgICAgICAgICAgICAqIGRlcGVuZHMgb24gMTw8Yml0c3BlcnNhbXBsZS4gU28gaWYgd2UgaW5jcmVhc2UgaXQsIGFuIGFjY2VzcwotKyAgICAgICAgICAgICAqIG91dCBvZiB0aGUgYnVmZmVyIHdpbGwgaGFwcGVuIGF0IGRpcmVjdG9yeSBmbHVzaGluZy4KLSsgICAgICAgICAgICAgKiBBbm90aGVyIG9wdGlvbiB3b3VsZCBiZSB0byBjbGVhciB0aG9zZSB0YXJncy4gCi0rICAgICAgICAgICAgICovCi0rICAgICAgICAgICAgdGQtPnRkX2JpdHNwZXJzYW1wbGUgPSA4OwotKyAgICAgICAgICAgIHRkLT50ZF9zYW1wbGVmb3JtYXQgPSBTQU1QTEVGT1JNQVRfVUlOVDsKLSsgICAgICAgIH0KLSB9Ci0gCi0gc3RhdGljIHZvaWQKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTYtMTAyNzAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNi0xMDI3MC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNhZDZlZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNi0xMDI3MC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi1Gcm9tIDZlNzA0MmM2MWUzMDBjZjk5NzFjNjQ1Yzc5ZDA1ZGU5NzRiMjQzMDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBlcm91YXVsdCA8ZXJvdWF1bHQ+Ci1EYXRlOiBTYXQsIDMgRGVjIDIwMTYgMTE6MDI6MTUgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSCAzLzRdICogbGlidGlmZi90aWZfZGlycmVhZC5jOiBtb2RpZnkKLSBDaG9wVXBTaW5nbGVVbmNvbXByZXNzZWRTdHJpcCgpIHRvIGluc3RhbmNpYXRlIGNvbXB1dGUgbnRyaXBzIGFzCi0gVElGRmhvd21hbnlfMzIodGQtPnRkX2ltYWdlbGVuZ3RoLCByb3dzcGVyc3RyaXApLCBpbnN0ZWFkIG9mIGEgbG9naWMgYmFzZWQgb24KLSB0aGUgdG90YWwgc2l6ZSBvZiBkYXRhLiBXaGljaCBpcyBmYXVsdHkgaXMgdGhlIHRvdGFsIHNpemUgb2YgZGF0YSBpcyBub3QKLSBzdWZmaWNpZW50IHRvIGZpbGwgdGhlIHdob2xlIGltYWdlLCBhbmQgdGh1cyByZXN1bHRzIGluIHJlYWRpbmcgb3V0c2lkZSBvZgotIHRoZSBTdHJpcEJ5Q291bnRzL1N0cmlwT2Zmc2V0cyBhcnJheXMgd2hlbiB1c2luZyBUSUZGUmVhZFNjYW5saW5lKCkuIFJlcG9ydGVkCi0gYnkgQWdvc3Rpbm8gU2FydWJiby4gRml4ZXMgaHR0cDovL2J1Z3ppbGxhLm1hcHRvb2xzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjYwOC4KLQotKiBsaWJ0aWZmL3RpZl9zdHJpcC5jOiByZXZlcnQgdGhlIGNoYW5nZSBpbiBUSUZGTnVtYmVyT2ZTdHJpcHMoKSBkb25lCi1mb3IgaHR0cDovL2J1Z3ppbGxhLm1hcHRvb2xzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU4NyAvIENWRS0yMDE2LTkyNzMgc2luY2UKLXRoZSBhYm92ZSBjaGFuZ2UgaXMgYSBiZXR0ZXIgZml4IHRoYXQgbWFrZXMgaXQgdW5uZWNlc3NhcnkuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotQ1ZFOiBDVkUtMjAxNi0xMDI3MAotU2lnbmVkLW9mZi1ieTogUmFqa3VtYXIgVmVlciA8cnZlZXJAbXZpc3RhLmNvbT4KLS0tLQotIENoYW5nZUxvZyAgICAgICAgICAgICB8IDE1ICsrKysrKysrKysrKysrKwotIGxpYnRpZmYvdGlmX2RpcnJlYWQuYyB8IDIyICsrKysrKysrKystLS0tLS0tLS0tLS0KLSBsaWJ0aWZmL3RpZl9zdHJpcC5jICAgfCAgOSAtLS0tLS0tLS0KLSAzIGZpbGVzIGNoYW5nZWQsIDI1IGluc2VydGlvbnMoKyksIDIxIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCi1pbmRleCAwYTJjMmE3Li42ZTMwZTQxIDEwMDY0NAotLS0tIGEvQ2hhbmdlTG9nCi0rKysgYi9DaGFuZ2VMb2cKLUBAIC0xLDUgKzEsMjAgQEAKLSAyMDE2LTEyLTAzIEV2ZW4gUm91YXVsdCA8ZXZlbi5yb3VhdWx0IGF0IHNwYXRpYWx5cy5jb20+Ci0gCi0rCSogbGlidGlmZi90aWZfZGlycmVhZC5jOiBtb2RpZnkgQ2hvcFVwU2luZ2xlVW5jb21wcmVzc2VkU3RyaXAoKSB0bwotKwlpbnN0YW5jaWF0ZSBjb21wdXRlIG50cmlwcyBhcyBUSUZGaG93bWFueV8zMih0ZC0+dGRfaW1hZ2VsZW5ndGgsIHJvd3NwZXJzdHJpcCksCi0rCWluc3RlYWQgb2YgYSBsb2dpYyBiYXNlZCBvbiB0aGUgdG90YWwgc2l6ZSBvZiBkYXRhLiBXaGljaCBpcyBmYXVsdHkgaXMKLSsJdGhlIHRvdGFsIHNpemUgb2YgZGF0YSBpcyBub3Qgc3VmZmljaWVudCB0byBmaWxsIHRoZSB3aG9sZSBpbWFnZSwgYW5kIHRodXMKLSsJcmVzdWx0cyBpbiByZWFkaW5nIG91dHNpZGUgb2YgdGhlIFN0cmlwQnlDb3VudHMvU3RyaXBPZmZzZXRzIGFycmF5cyB3aGVuCi0rCXVzaW5nIFRJRkZSZWFkU2NhbmxpbmUoKS4KLSsJUmVwb3J0ZWQgYnkgQWdvc3Rpbm8gU2FydWJiby4KLSsJRml4ZXMgaHR0cDovL2J1Z3ppbGxhLm1hcHRvb2xzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjYwOC4KLSsKLSsJKiBsaWJ0aWZmL3RpZl9zdHJpcC5jOiByZXZlcnQgdGhlIGNoYW5nZSBpbiBUSUZGTnVtYmVyT2ZTdHJpcHMoKSBkb25lCi0rCWZvciBodHRwOi8vYnVnemlsbGEubWFwdG9vbHMub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTg3IC8gQ1ZFLTIwMTYtOTI3MyBzaW5jZQotKwl0aGUgYWJvdmUgY2hhbmdlIGlzIGEgYmV0dGVyIGZpeCB0aGF0IG1ha2VzIGl0IHVubmVjZXNzYXJ5LgotKwotKzIwMTYtMTItMDMgRXZlbiBSb3VhdWx0IDxldmVuLnJvdWF1bHQgYXQgc3BhdGlhbHlzLmNvbT4KLSsKLSAJKiBsaWJ0aWZmL3RpZl9waXhhcmxvZy5jLCBsaWJ0aWZmL3RpZl9sdXYuYzogZml4IGhlYXAtYmFzZWQgYnVmZmVyCi0gCW92ZXJmbG93IG9uIGdlbmVyYXRpb24gb2YgUGl4YXJMb2cgLyBMVVYgY29tcHJlc3NlZCBmaWxlcywgd2l0aAotIAlDb2xvck1hcCwgVHJhbnNmZXJGdW5jdGlvbiBhdHRhY2hlZCBhbmQgbmFzdHkgcGxheXMgd2l0aCBiaXRzcGVyc2FtcGxlLgotZGlmZiAtLWdpdCBhL2xpYnRpZmYvdGlmX2RpcnJlYWQuYyBiL2xpYnRpZmYvdGlmX2RpcnJlYWQuYwotaW5kZXggM2VlYzc5Yy4uNTcwZDBjMyAxMDA2NDQKLS0tLSBhL2xpYnRpZmYvdGlmX2RpcnJlYWQuYwotKysrIGIvbGlidGlmZi90aWZfZGlycmVhZC5jCi1AQCAtNTUwMiw4ICs1NTAyLDcgQEAgQ2hvcFVwU2luZ2xlVW5jb21wcmVzc2VkU3RyaXAoVElGRiogdGlmKQotIAl1aW50NjQgcm93YmxvY2tieXRlczsKLSAJdWludDY0IHN0cmlwYnl0ZXM7Ci0gCXVpbnQzMiBzdHJpcDsKLS0JdWludDY0IG5zdHJpcHM2NDsKLS0JdWludDMyIG5zdHJpcHMzMjsKLSsJdWludDMyIG5zdHJpcHM7Ci0gCXVpbnQzMiByb3dzcGVyc3RyaXA7Ci0gCXVpbnQ2NCogbmV3Y291bnRzOwotIAl1aW50NjQqIG5ld29mZnNldHM7Ci1AQCAtNTUzNCwxOCArNTUzMywxNyBAQCBDaG9wVXBTaW5nbGVVbmNvbXByZXNzZWRTdHJpcChUSUZGKiB0aWYpCi0gCSAgICByZXR1cm47Ci0gCi0gCS8qCi0tCSAqIG5ldmVyIGluY3JlYXNlIHRoZSBudW1iZXIgb2Ygc3RyaXBzIGluIGFuIGltYWdlCi0rCSAqIG5ldmVyIGluY3JlYXNlIHRoZSBudW1iZXIgb2Ygcm93cyBwZXIgc3RyaXAKLSAJICovCi0gCWlmIChyb3dzcGVyc3RyaXAgPj0gdGQtPnRkX3Jvd3NwZXJzdHJpcCkKLSAJCXJldHVybjsKLS0JbnN0cmlwczY0ID0gVElGRmhvd21hbnlfNjQoYnl0ZWNvdW50LCBzdHJpcGJ5dGVzKTsKLS0JaWYgKChuc3RyaXBzNjQ9PTApfHwobnN0cmlwczY0PjB4RkZGRkZGRkYpKSAvKiBzb21ldGhpbmcgaXMgd29ua3ksIGRvIG5vdGhpbmcuICovCi0tCSAgICByZXR1cm47Ci0tCW5zdHJpcHMzMiA9ICh1aW50MzIpbnN0cmlwczY0OwotKyAgICAgICAgbnN0cmlwcyA9IFRJRkZob3dtYW55XzMyKHRkLT50ZF9pbWFnZWxlbmd0aCwgcm93c3BlcnN0cmlwKTsKLSsgICAgICAgIGlmKCBuc3RyaXBzID09IDAgKQotKyAgICAgICAgICAgIHJldHVybjsKLSAKLS0JbmV3Y291bnRzID0gKHVpbnQ2NCopIF9USUZGQ2hlY2tNYWxsb2ModGlmLCBuc3RyaXBzMzIsIHNpemVvZiAodWludDY0KSwKLSsJbmV3Y291bnRzID0gKHVpbnQ2NCopIF9USUZGQ2hlY2tNYWxsb2ModGlmLCBuc3RyaXBzLCBzaXplb2YgKHVpbnQ2NCksCi0gCQkJCSJmb3IgY2hvcHBlZCBcIlN0cmlwQnl0ZUNvdW50c1wiIGFycmF5Iik7Ci0tCW5ld29mZnNldHMgPSAodWludDY0KikgX1RJRkZDaGVja01hbGxvYyh0aWYsIG5zdHJpcHMzMiwgc2l6ZW9mICh1aW50NjQpLAotKwluZXdvZmZzZXRzID0gKHVpbnQ2NCopIF9USUZGQ2hlY2tNYWxsb2ModGlmLCBuc3RyaXBzLCBzaXplb2YgKHVpbnQ2NCksCi0gCQkJCSJmb3IgY2hvcHBlZCBcIlN0cmlwT2Zmc2V0c1wiIGFycmF5Iik7Ci0gCWlmIChuZXdjb3VudHMgPT0gTlVMTCB8fCBuZXdvZmZzZXRzID09IE5VTEwpIHsKLSAJCS8qCi1AQCAtNTU2MiwxOCArNTU2MCwxOCBAQCBDaG9wVXBTaW5nbGVVbmNvbXByZXNzZWRTdHJpcChUSUZGKiB0aWYpCi0gCSAqIEZpbGwgdGhlIHN0cmlwIGluZm9ybWF0aW9uIGFycmF5cyB3aXRoIG5ldyBieXRlY291bnRzIGFuZCBvZmZzZXRzCi0gCSAqIHRoYXQgcmVmbGVjdCB0aGUgYnJva2VuLXVwIGZvcm1hdC4KLSAJICovCi0tCWZvciAoc3RyaXAgPSAwOyBzdHJpcCA8IG5zdHJpcHMzMjsgc3RyaXArKykgewotKwlmb3IgKHN0cmlwID0gMDsgc3RyaXAgPCBuc3RyaXBzOyBzdHJpcCsrKSB7Ci0gCQlpZiAoc3RyaXBieXRlcyA+IGJ5dGVjb3VudCkKLSAJCQlzdHJpcGJ5dGVzID0gYnl0ZWNvdW50OwotIAkJbmV3Y291bnRzW3N0cmlwXSA9IHN0cmlwYnl0ZXM7Ci0tCQluZXdvZmZzZXRzW3N0cmlwXSA9IG9mZnNldDsKLSsJCW5ld29mZnNldHNbc3RyaXBdID0gc3RyaXBieXRlcyA/IG9mZnNldCA6IDA7Ci0gCQlvZmZzZXQgKz0gc3RyaXBieXRlczsKLSAJCWJ5dGVjb3VudCAtPSBzdHJpcGJ5dGVzOwotIAl9Ci0gCS8qCi0gCSAqIFJlcGxhY2Ugb2xkIHNpbmdsZSBzdHJpcCBpbmZvIHdpdGggbXVsdGktc3RyaXAgaW5mby4KLSAJICovCi0tCXRkLT50ZF9zdHJpcHNwZXJpbWFnZSA9IHRkLT50ZF9uc3RyaXBzID0gbnN0cmlwczMyOwotKwl0ZC0+dGRfc3RyaXBzcGVyaW1hZ2UgPSB0ZC0+dGRfbnN0cmlwcyA9IG5zdHJpcHM7Ci0gCVRJRkZTZXRGaWVsZCh0aWYsIFRJRkZUQUdfUk9XU1BFUlNUUklQLCByb3dzcGVyc3RyaXApOwotIAotIAlfVElGRmZyZWUodGQtPnRkX3N0cmlwYnl0ZWNvdW50KTsKLWRpZmYgLS1naXQgYS9saWJ0aWZmL3RpZl9zdHJpcC5jIGIvbGlidGlmZi90aWZfc3RyaXAuYwotaW5kZXggNGM0NmVjZi4uMTY3NmU0NyAxMDA2NDQKLS0tLSBhL2xpYnRpZmYvdGlmX3N0cmlwLmMKLSsrKyBiL2xpYnRpZmYvdGlmX3N0cmlwLmMKLUBAIC02MywxNSArNjMsNiBAQCBUSUZGTnVtYmVyT2ZTdHJpcHMoVElGRiogdGlmKQotIAlUSUZGRGlyZWN0b3J5ICp0ZCA9ICZ0aWYtPnRpZl9kaXI7Ci0gCXVpbnQzMiBuc3RyaXBzOwotIAotLSAgICAvKiBJZiB0aGUgdmFsdWUgd2FzIGFscmVhZHkgY29tcHV0ZWQgYW5kIHN0b3JlIGluIHRkX25zdHJpcHMsIHRoZW4gcmV0dXJuIGl0LAotLSAgICAgICBzaW5jZSBDaG9wVXBTaW5nbGVVbmNvbXByZXNzZWRTdHJpcCBtaWdodCBoYXZlIGFsdGVyZWQgYW5kIHJlc2l6ZWQgdGhlCi0tICAgICAgIHNpbmNlIHRoZSB0ZF9zdHJpcGJ5dGVjb3VudCBhbmQgdGRfc3RyaXBvZmZzZXQgYXJyYXlzIHRvIHRoZSBuZXcgdmFsdWUKLS0gICAgICAgYWZ0ZXIgdGhlIGluaXRpYWwgYWZmZWN0YXRpb24gb2YgdGRfbnN0cmlwcyA9IFRJRkZOdW1iZXJPZlN0cmlwcygpIGluCi0tICAgICAgIHRpZl9kaXJyZWFkLmMgfmxpbmUgMzYxMi4KLS0gICAgICAgU2VlIGh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI1ODcgKi8KLS0gICAgaWYoIHRkLT50ZF9uc3RyaXBzICkKLS0gICAgICAgIHJldHVybiB0ZC0+dGRfbnN0cmlwczsKLS0KLSAJbnN0cmlwcyA9ICh0ZC0+dGRfcm93c3BlcnN0cmlwID09ICh1aW50MzIpIC0xID8gMSA6Ci0gCSAgICAgVElGRmhvd21hbnlfMzIodGQtPnRkX2ltYWdlbGVuZ3RoLCB0ZC0+dGRfcm93c3BlcnN0cmlwKSk7Ci0gCWlmICh0ZC0+dGRfcGxhbmFyY29uZmlnID09IFBMQU5BUkNPTkZJR19TRVBBUkFURSkKLS0tIAotMS45LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTYtMTAyNzEucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNi0xMDI3MS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZlNWJjZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNi0xMDI3MS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLUZyb20gOTY1N2JiZTNjZGNlNGFhYTkwZTA3ZDUwYzFjNzBhZTUyZGEwYmE2YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IGVyb3VhdWx0IDxlcm91YXVsdD4KLURhdGU6IFNhdCwgMyBEZWMgMjAxNiAxMTozNTo1NiArMDAwMAotU3ViamVjdDogW1BBVENIXSAqIHRvb2xzL3RpZmZjcm9wLmM6IGZpeCByZWFkQ29udGlnU3RyaXBzSW50b0J1ZmZlcigpIGluIC1pCi0gKGlnbm9yZSkgbW9kZSBzbyB0aGF0IHRoZSBvdXRwdXQgYnVmZmVyIGlzIGNvcnJlY3RseSBpbmNyZW1lbnRlZCB0byBhdm9pZAotIHdyaXRlIG91dHNpZGUgYm91bmRzLiBSZXBvcnRlZCBieSBBZ29zdGlubyBTYXJ1YmJvLiBGaXhlcwotIGh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI2MjAKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQ1ZFOiBDVkUtMjAxNi0xMDI3MQotU2lnbmVkLW9mZi1ieTogUmFqa3VtYXIgVmVlciA8cnZlZXJAbXZpc3RhLmNvbT4KLQotLS0tCi0gQ2hhbmdlTG9nICAgICAgICB8IDcgKysrKysrKwotIHRvb2xzL3RpZmZjcm9wLmMgfCAyICstCi0gMiBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotSW5kZXg6IHRpZmYtNC4wLjcvdG9vbHMvdGlmZmNyb3AuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHRpZmYtNC4wLjcub3JpZy90b29scy90aWZmY3JvcC5jCi0rKysgdGlmZi00LjAuNy90b29scy90aWZmY3JvcC5jCi1AQCAtMzY5OCw3ICszNjk4LDcgQEAgc3RhdGljIGludCByZWFkQ29udGlnU3RyaXBzSW50b0J1ZmZlciAoVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgc3RyaXAsICh1bnNpZ25lZCBsb25nKXJvd3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgICB9Ci0tICAgICAgICAgICAgICAgIGJ1ZnAgKz0gYnl0ZXNfcmVhZDsKLSsgICAgICAgICAgICAgICAgYnVmcCArPSBzdHJpcHNpemU7Ci0gICAgICAgICB9Ci0gCi0gICAgICAgICByZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE3LTEwNjg4LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTctMTA2ODgucGF0Y2gKaW5kZXggZWQ5YzBmNS4uYjBkYjk2OSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTctMTA2ODgucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTctMTA2ODgucGF0Y2gKQEAgLTE4LDEwICsxOCwxMCBAQAogIGxpYnRpZmYvdGlmX2RpcndyaXRlLmMgfCAyMCArKysrKysrKysrKysrKysrLS0tLQogIDIgZmlsZXMgY2hhbmdlZCwgMjQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKIAotSW5kZXg6IHRpZmYtNC4wLjcvQ2hhbmdlTG9nCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gdGlmZi00LjAuNy5vcmlnL0NoYW5nZUxvZwotKysrIHRpZmYtNC4wLjcvQ2hhbmdlTG9nCitkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCitpbmRleCAwMjQwZjBiLi40MmVhZWI3IDEwMDY0NAorLS0tIGEvQ2hhbmdlTG9nCisrKysgYi9DaGFuZ2VMb2cKIEBAIC0xLDMgKzEsMTEgQEAKICsyMDE3LTA2LTMwICBFdmVuIFJvdWF1bHQgPGV2ZW4ucm91YXVsdCBhdCBzcGF0aWFseXMuY29tPgogKwpAQCAtMzQsMTEgKzM0LDExIEBACiAgMjAxNy0wNi0yNiAgRXZlbiBSb3VhdWx0IDxldmVuLnJvdWF1bHQgYXQgc3BhdGlhbHlzLmNvbT4KICAKICAJKiBsaWJ0aWZmL3RpZl9qYmlnLmM6IGZpeCBtZW1vcnkgbGVhayBpbiBlcnJvciBjb2RlIHBhdGggb2YgSkJJR0RlY29kZSgpCi1JbmRleDogdGlmZi00LjAuNy9saWJ0aWZmL3RpZl9kaXJ3cml0ZS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gdGlmZi00LjAuNy5vcmlnL2xpYnRpZmYvdGlmX2RpcndyaXRlLmMKLSsrKyB0aWZmLTQuMC43L2xpYnRpZmYvdGlmX2RpcndyaXRlLmMKLUBAIC0yMDQ3LDcgKzIwNDcsMTAgQEAgVElGRldyaXRlRGlyZWN0b3J5VGFnQ2hlY2tlZExvbmc4KFRJRkYqCitkaWZmIC0tZ2l0IGEvbGlidGlmZi90aWZfZGlyd3JpdGUuYyBiL2xpYnRpZmYvdGlmX2RpcndyaXRlLmMKK2luZGV4IDI5NjdkYTUuLjhkNjY4NmIgMTAwNjQ0CistLS0gYS9saWJ0aWZmL3RpZl9kaXJ3cml0ZS5jCisrKysgYi9saWJ0aWZmL3RpZl9kaXJ3cml0ZS5jCitAQCAtMjExMSw3ICsyMTExLDEwIEBAIFRJRkZXcml0ZURpcmVjdG9yeVRhZ0NoZWNrZWRMb25nOChUSUZGKiB0aWYsIHVpbnQzMiogbmRpciwgVElGRkRpckVudHJ5KiBkaXIsIHVpCiAgewogIAl1aW50NjQgbTsKICAJYXNzZXJ0KHNpemVvZih1aW50NjQpPT04KTsKQEAgLTUwLDcgKzUwLDcgQEAKICAJbT12YWx1ZTsKICAJaWYgKHRpZi0+dGlmX2ZsYWdzJlRJRkZfU1dBQikKICAJCVRJRkZTd2FiTG9uZzgoJm0pOwotQEAgLTIwNjAsNyArMjA2MywxMCBAQCBUSUZGV3JpdGVEaXJlY3RvcnlUYWdDaGVja2VkTG9uZzhBcnJheShUCitAQCAtMjEyNCw3ICsyMTI3LDEwIEBAIFRJRkZXcml0ZURpcmVjdG9yeVRhZ0NoZWNrZWRMb25nOEFycmF5KFRJRkYqIHRpZiwgdWludDMyKiBuZGlyLCBUSUZGRGlyRW50cnkqIGRpCiAgewogIAlhc3NlcnQoY291bnQ8MHgyMDAwMDAwMCk7CiAgCWFzc2VydChzaXplb2YodWludDY0KT09OCk7CkBAIC02Miw3ICs2Miw3IEBACiAgCWlmICh0aWYtPnRpZl9mbGFncyZUSUZGX1NXQUIpCiAgCQlUSUZGU3dhYkFycmF5T2ZMb25nOCh2YWx1ZSxjb3VudCk7CiAgCXJldHVybihUSUZGV3JpdGVEaXJlY3RvcnlUYWdEYXRhKHRpZixuZGlyLGRpcix0YWcsVElGRl9MT05HOCxjb3VudCxjb3VudCo4LHZhbHVlKSk7Ci1AQCAtMjA3Miw3ICsyMDc4LDEwIEBAIFRJRkZXcml0ZURpcmVjdG9yeVRhZ0NoZWNrZWRTbG9uZzgoVElGRioKK0BAIC0yMTM2LDcgKzIxNDIsMTAgQEAgVElGRldyaXRlRGlyZWN0b3J5VGFnQ2hlY2tlZFNsb25nOChUSUZGKiB0aWYsIHVpbnQzMiogbmRpciwgVElGRkRpckVudHJ5KiBkaXIsIHUKICB7CiAgCWludDY0IG07CiAgCWFzc2VydChzaXplb2YoaW50NjQpPT04KTsKQEAgLTc0LDcgKzc0LDcgQEAKICAJbT12YWx1ZTsKICAJaWYgKHRpZi0+dGlmX2ZsYWdzJlRJRkZfU1dBQikKICAJCVRJRkZTd2FiTG9uZzgoKHVpbnQ2NCopKCZtKSk7Ci1AQCAtMjA4NSw3ICsyMDk0LDEwIEBAIFRJRkZXcml0ZURpcmVjdG9yeVRhZ0NoZWNrZWRTbG9uZzhBcnJheSgKK0BAIC0yMTQ5LDcgKzIxNTgsMTAgQEAgVElGRldyaXRlRGlyZWN0b3J5VGFnQ2hlY2tlZFNsb25nOEFycmF5KFRJRkYqIHRpZiwgdWludDMyKiBuZGlyLCBUSUZGRGlyRW50cnkqIGQKICB7CiAgCWFzc2VydChjb3VudDwweDIwMDAwMDAwKTsKICAJYXNzZXJ0KHNpemVvZihpbnQ2NCk9PTgpOwpAQCAtODYsMyArODYsNiBAQAogIAlpZiAodGlmLT50aWZfZmxhZ3MmVElGRl9TV0FCKQogIAkJVElGRlN3YWJBcnJheU9mTG9uZzgoKHVpbnQ2NCopdmFsdWUsY291bnQpOwogIAlyZXR1cm4oVElGRldyaXRlRGlyZWN0b3J5VGFnRGF0YSh0aWYsbmRpcixkaXIsdGFnLFRJRkZfU0xPTkc4LGNvdW50LGNvdW50KjgsdmFsdWUpKTsKKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTctMTM3MjYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNy0xMzcyNi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjBmZmE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTctMTM3MjYucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSA1MzE3Y2UyMTU5MzZjZTYxMTg0NjU1N2JiMTA0YjQ5ZDNiNGM4MzQ1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRXZlbiBSb3VhdWx0IDxldmVuLnJvdWF1bHRAc3BhdGlhbHlzLmNvbT4KK0RhdGU6IFdlZCwgMjMgQXVnIDIwMTcgMTM6MjE6NDEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gKiBsaWJ0aWZmL3RpZl9kaXJ3cml0ZS5jOiByZXBsYWNlIGFzc2VydGlvbiByZWxhdGVkIHRvIG5vdAorIGZpbmRpbmcgdGhlIFN1YklGRCB0YWcgYnkgcnVudGltZSBjaGVjay4gRml4ZXMKKyBodHRwOi8vYnVnemlsbGEubWFwdG9vbHMub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzI3IFJlcG9ydGVkIGJ5IHRlYW0gT1dMMzM3CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1todHRwczovL2dpdGh1Yi5jb20vdmFkei9saWJ0aWZmL2NvbW1pdC9mOTFjYTgzYTIxYTZhNTgzMDUwZTVhNTc1NWNlMTQ0MWIyYmYxZDdlXQorCitDVkU6IENWRS0yMDE3LTEzNzI2CisKK1NpZ25lZC1vZmYtYnk6IFlpIFpoYW8gPHlpLnpoYW9Ad2luZHJpdmVyLmNvbT4KKy0tLQorIENoYW5nZUxvZyAgICAgICAgICAgICAgfCA3ICsrKysrKysKKyBsaWJ0aWZmL3RpZl9kaXJ3cml0ZS5jIHwgNyArKysrKystCisgMiBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKK2luZGV4IDY5ODBkYTguLjNlMjk5ZDkgMTAwNjQ0CistLS0gYS9DaGFuZ2VMb2cKKysrKyBiL0NoYW5nZUxvZworQEAgLTEsMyArMSwxMCBAQAorKzIwMTctMDgtMjMgIEV2ZW4gUm91YXVsdCA8ZXZlbi5yb3VhdWx0IGF0IHNwYXRpYWx5cy5jb20+CisrCisrCSogbGlidGlmZi90aWZfZGlyd3JpdGUuYzogcmVwbGFjZSBhc3NlcnRpb24gcmVsYXRlZCB0byBub3QgZmluZGluZyB0aGUKKysJU3ViSUZEIHRhZyBieSBydW50aW1lIGNoZWNrLgorKwlGaXhlcyBodHRwOi8vYnVnemlsbGEubWFwdG9vbHMub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzI3CisrCVJlcG9ydGVkIGJ5IHRlYW0gT1dMMzM3CisrCisgMjAxNy0wNy0xNSAgRXZlbiBSb3VhdWx0IDxldmVuLnJvdWF1bHQgYXQgc3BhdGlhbHlzLmNvbT4KKyAKKyAJKiB0b29scy90aWZmMnBkZi5jOiBwcmV2ZW50IGhlYXAgYnVmZmVyIG92ZXJmbG93IHdyaXRlIGluICJSYXciCitkaWZmIC0tZ2l0IGEvbGlidGlmZi90aWZfZGlyd3JpdGUuYyBiL2xpYnRpZmYvdGlmX2RpcndyaXRlLmMKK2luZGV4IDhkNjY4NmIuLjE0MDkwYWUgMTAwNjQ0CistLS0gYS9saWJ0aWZmL3RpZl9kaXJ3cml0ZS5jCisrKysgYi9saWJ0aWZmL3RpZl9kaXJ3cml0ZS5jCitAQCAtODIxLDcgKzgyMSwxMiBAQCBUSUZGV3JpdGVEaXJlY3RvcnlTZWMoVElGRiogdGlmLCBpbnQgaXNpbWFnZSwgaW50IGltYWdlZG9uZSwgdWludDY0KiBwZGlyb2ZmKQorIAkJCVRJRkZEaXJFbnRyeSogbmI7CisgCQkJZm9yIChuYT0wLCBuYj1kaXI7IDsgbmErKywgbmIrKykKKyAJCQl7CistCQkJCWFzc2VydChuYTxuZGlyKTsKKysJCQkJaWYoIG5hID09IG5kaXIgKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJRkZFcnJvckV4dCh0aWYtPnRpZl9jbGllbnRkYXRhLG1vZHVsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCBmaW5kIFN1YklGRCB0YWciKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhZDsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAJCQkJaWYgKG5iLT50ZGlyX3RhZz09VElGRlRBR19TVUJJRkQpCisgCQkJCQlicmVhazsKKyAJCQl9CistLSAKKzIuNy40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE3LTEzNzI3LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTctMTM3MjcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIyOGMyZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE3LTEzNzI3LnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK0Zyb20gYTVlODI0NWNjNjc2NDZmN2I0NDhiNGNhMjkyNThlYWFjNDE4MTAyYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEV2ZW4gUm91YXVsdCA8ZXZlbi5yb3VhdWx0QHNwYXRpYWx5cy5jb20+CitEYXRlOiBXZWQsIDIzIEF1ZyAyMDE3IDEzOjMzOjQyICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdICogbGlidGlmZi90aWZfZGlyd3JpdGUuYzogcmVwbGFjZSBhc3NlcnRpb24gdG8gdGFnIHZhbHVlIG5vdAorIGZpdHRpbmcgb24gdWludDMyIHdoZW4gc2VsZWN0aW5nIHRoZSB2YWx1ZSBvZiBTdWJJRkQgdGFnIGJ5IHJ1bnRpbWUgY2hlY2sgKGluCisgVElGRldyaXRlRGlyZWN0b3J5VGFnU3ViaWZkKCkpLiBGaXhlcworIGh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI3MjggUmVwb3J0ZWQgYnkgdGVhbSBPV0wzMzcKKworU3ViSUZEIHRhZyBieSBydW50aW1lIGNoZWNrIChpbiBUSUZGV3JpdGVEaXJlY3RvcnlTZWMoKSkKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorW2h0dHBzOi8vZ2l0aHViLmNvbS92YWR6L2xpYnRpZmYvY29tbWl0L2I2YWYxMzdiZjllZjg1MmYxYTQ4YTUwYTVhZmI4OGY5ZTlkYTAxY2NdCisKK0NWRTogQ1ZFLTIwMTctMTM3MjcKKworU2lnbmVkLW9mZi1ieTogWWkgWmhhbyA8eWkuemhhb0B3aW5kcml2ZXIuY29tPgorLS0tCisgQ2hhbmdlTG9nICAgICAgICAgICAgICB8IDEwICsrKysrKysrKy0KKyBsaWJ0aWZmL3RpZl9kaXJ3cml0ZS5jIHwgIDkgKysrKysrKystCisgMiBmaWxlcyBjaGFuZ2VkLCAxNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCitpbmRleCAzZTI5OWQ5Li44ZjVlZmU5IDEwMDY0NAorLS0tIGEvQ2hhbmdlTG9nCisrKysgYi9DaGFuZ2VMb2cKK0BAIC0xLDcgKzEsMTUgQEAKKyAyMDE3LTA4LTIzICBFdmVuIFJvdWF1bHQgPGV2ZW4ucm91YXVsdCBhdCBzcGF0aWFseXMuY29tPgorIAorKwkqIGxpYnRpZmYvdGlmX2RpcndyaXRlLmM6IHJlcGxhY2UgYXNzZXJ0aW9uIHRvIHRhZyB2YWx1ZSBub3QgZml0dGluZworKwlvbiB1aW50MzIgd2hlbiBzZWxlY3RpbmcgdGhlIHZhbHVlIG9mIFN1YklGRCB0YWcgYnkgcnVudGltZSBjaGVjaworKwkoaW4gVElGRldyaXRlRGlyZWN0b3J5VGFnU3ViaWZkKCkpLgorKwlGaXhlcyBodHRwOi8vYnVnemlsbGEubWFwdG9vbHMub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzI4CisrCVJlcG9ydGVkIGJ5IHRlYW0gT1dMMzM3CisrCisrMjAxNy0wOC0yMyAgRXZlbiBSb3VhdWx0IDxldmVuLnJvdWF1bHQgYXQgc3BhdGlhbHlzLmNvbT4KKysKKyAJKiBsaWJ0aWZmL3RpZl9kaXJ3cml0ZS5jOiByZXBsYWNlIGFzc2VydGlvbiByZWxhdGVkIHRvIG5vdCBmaW5kaW5nIHRoZQorLQlTdWJJRkQgdGFnIGJ5IHJ1bnRpbWUgY2hlY2suCisrCVN1YklGRCB0YWcgYnkgcnVudGltZSBjaGVjayAoaW4gVElGRldyaXRlRGlyZWN0b3J5U2VjKCkpCisgCUZpeGVzIGh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI3MjcKKyAJUmVwb3J0ZWQgYnkgdGVhbSBPV0wzMzcKKyAKK2RpZmYgLS1naXQgYS9saWJ0aWZmL3RpZl9kaXJ3cml0ZS5jIGIvbGlidGlmZi90aWZfZGlyd3JpdGUuYworaW5kZXggMTQwOTBhZS4uZjBhNGJhYSAxMDA2NDQKKy0tLSBhL2xpYnRpZmYvdGlmX2RpcndyaXRlLmMKKysrKyBiL2xpYnRpZmYvdGlmX2RpcndyaXRlLmMKK0BAIC0xOTQ5LDcgKzE5NDksMTQgQEAgVElGRldyaXRlRGlyZWN0b3J5VGFnU3ViaWZkKFRJRkYqIHRpZiwgdWludDMyKiBuZGlyLCBUSUZGRGlyRW50cnkqIGRpcikKKyAJCWZvciAocD0wOyBwIDwgdGlmLT50aWZfZGlyLnRkX25zdWJpZmQ7IHArKykKKyAJCXsKKyAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQocGEgIT0gMCk7CistCQkJYXNzZXJ0KCpwYSA8PSAweEZGRkZGRkZGVUwpOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvdWxkIGhhcHBlbiBpZiBhbiBjbGFzc2ljVElGRiBoYXMgYSBTdWJJRkQgb2YgdHlwZSBMT05HOCAod2hpY2ggaXMgaWxsZWdhbCkgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBpZiggKnBhID4gMHhGRkZGRkZGRlVMKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElGRkVycm9yRXh0KHRpZi0+dGlmX2NsaWVudGRhdGEsbW9kdWxlLCJJbGxlZ2FsIHZhbHVlIGZvciBTdWJJRkQgdGFnIik7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9USUZGZnJlZShvKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOworKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAJCQkqcGIrKz0odWludDMyKSgqcGErKyk7CisgCQl9CisgCQluPVRJRkZXcml0ZURpcmVjdG9yeVRhZ0NoZWNrZWRJZmRBcnJheSh0aWYsbmRpcixkaXIsVElGRlRBR19TVUJJRkQsdGlmLT50aWZfZGlyLnRkX25zdWJpZmQsbyk7CistLSAKKzIuNy40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE3LTc1OTIucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNy03NTkyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjgwNDQ1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE3LTc1OTIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi1Gcm9tIDQ4NzgwYjRmY2M0MjVjZGRjNGVmOGZmZGY1MzZmOTZhMGQxYjMxM2IgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBlcm91YXVsdCA8ZXJvdWF1bHQ+Ci1EYXRlOiBXZWQsIDExIEphbiAyMDE3IDE2OjM4OjI2ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdICogbGlidGlmZi90aWZfZ2V0aW1hZ2UuYzogYWRkIGV4cGxpY2l0IHVpbnQzMiBjYXN0IGluIHB1dGFncmV5dGlsZSB0bwotYXZvaWQgVW5kZWZpbmVkQmVoYXZpb3JTYW5pdGl6ZXIgd2FybmluZy4KLVBhdGNoIGJ5IE5pY29sYXMgUGVuYS4KLUZpeGVzIGh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI2NTgKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQ1ZFOiBDVkUtMjAxNy03NTkyCi1TaWduZWQtb2ZmLWJ5OiBSYWprdW1hciBWZWVyIDxydmVlckBtdmlzdGEuY29tPgotCi1JbmRleDogdGlmZi00LjAuNy9DaGFuZ2VMb2cKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSB0aWZmLTQuMC43Lm9yaWcvQ2hhbmdlTG9nCTIwMTctMDQtMjQgMTQ6MjU6MTAuMTQzOTI2MDI1ICswNTMwCi0rKysgdGlmZi00LjAuNy9DaGFuZ2VMb2cJMjAxNy0wNC0yNCAxNToyMDoyMS4yOTE4MzkyMzAgKzA1MzAKLUBAIC0xLDMgKzEsMTAgQEAKLSsyMDE3LTAxLTExIEV2ZW4gUm91YXVsdCA8ZXZlbi5yb3VhdWx0IGF0IHNwYXRpYWx5cy5jb20+Ci0rCi0rCSogbGlidGlmZi90aWZfZ2V0aW1hZ2UuYzogYWRkIGV4cGxpY2l0IHVpbnQzMiBjYXN0IGluIHB1dGFncmV5dGlsZSB0bwotKwlhdm9pZCBVbmRlZmluZWRCZWhhdmlvclNhbml0aXplciB3YXJuaW5nLgotKwlQYXRjaCBieSBOaWNvbGFzIFBlbmEuCi0rCUZpeGVzIGh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI2NTgKLSsKLSAyMDE2LTEyLTAzIEV2ZW4gUm91YXVsdCA8ZXZlbi5yb3VhdWx0IGF0IHNwYXRpYWx5cy5jb20+Ci0gCi0gCSogbGlidGlmZi90aWZfZGlycmVhZC5jOiBtb2RpZnkgQ2hvcFVwU2luZ2xlVW5jb21wcmVzc2VkU3RyaXAoKSB0bwotSW5kZXg6IHRpZmYtNC4wLjcvbGlidGlmZi90aWZfZ2V0aW1hZ2UuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHRpZmYtNC4wLjcub3JpZy9saWJ0aWZmL3RpZl9nZXRpbWFnZS5jCTIwMTYtMTEtMTggMDg6MTc6NDUuMDAwMDAwMDAwICswNTMwCi0rKysgdGlmZi00LjAuNy9saWJ0aWZmL3RpZl9nZXRpbWFnZS5jCTIwMTctMDQtMjQgMTU6MTc6NDYuNjcxODQzMjgzICswNTMwCi1AQCAtMTMwNSw3ICsxMzA1LDcgQEAKLSAgICAgd2hpbGUgKGgtLSA+IDApIHsKLSAJZm9yICh4ID0gdzsgeC0tID4gMDspCi0gICAgICAgICB7Ci0tICAgICAgICAgICAgKmNwKysgPSBCV21hcFsqcHBdWzBdICYgKCoocHArMSkgPDwgMjQgfCB+QTEpOwotKyAgICAgICAgICAgICpjcCsrID0gQldtYXBbKnBwXVswXSAmICgodWludDMyKSoocHArMSkgPDwgMjQgfCB+QTEpOwotICAgICAgICAgICAgIHBwICs9IHNhbXBsZXNwZXJwaXhlbDsKLSAgICAgICAgIH0KLSAJY3AgKz0gdG9za2V3OwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTctNzU5My5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE3LTc1OTMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MGRmY2IuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTctNzU5My5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLUZyb20gZDYwMzMyMDU3Yjk1NzVhZGE0ZjI2NDQ4OTU4MmIxM2UzMDEzN2JlMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IGVyb3VhdWx0IDxlcm91YXVsdD4KLURhdGU6IFdlZCwgMTEgSmFuIDIwMTcgMTk6MDI6NDkgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gKiBsaWJ0aWZmL3RpZmZpb3AuaCwgdGlmX3VuaXguYywgdGlmX3dpbjMyLmMsIHRpZl92bXMuYzogYWRkCi0gX1RJRkZjYWxsb2MoKQotCi0qIGxpYnRpZmYvdGlmX3JlYWQuYzogVElGRlJlYWRCdWZmZXJTZXR1cCgpOiB1c2UgX1RJRkZjYWxsb2MoKSB0byB6ZXJvCi1pbml0aWFsaXplIHRpZl9yYXdkYXRhLgotRml4ZXMgaHR0cDovL2J1Z3ppbGxhLm1hcHRvb2xzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY1MQotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0KLUNWRTogQ1ZFLTIwMTctNzU5MwotU2lnbmVkLW9mZi1ieTogUmFqa3VtYXIgVmVlciA8cnZlZXJAbXZpc3RhLmNvbT4KLUluZGV4OiB0aWZmLTQuMC43L0NoYW5nZUxvZwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHRpZmYtNC4wLjcub3JpZy9DaGFuZ2VMb2cJMjAxNy0wNC0yNSAxOTowMzoyMC41ODQxNTU0NTIgKzA1MzAKLSsrKyB0aWZmLTQuMC43L0NoYW5nZUxvZwkyMDE3LTA0LTI2IDEyOjA5OjQxLjk4Njg2Njg5NiArMDUzMAotQEAgLTQ0LDYgKzQ0LDE0IEBACi0gCi0gMjAxNy0wMS0xMSBFdmVuIFJvdWF1bHQgPGV2ZW4ucm91YXVsdCBhdCBzcGF0aWFseXMuY29tPgotIAotKwkqIGxpYnRpZmYvdGlmZmlvcC5oLCB0aWZfdW5peC5jLCB0aWZfd2luMzIuYyA6IGFkZCBfVElGRmNhbGxvYygpCi0rCi0rCSogbGlidGlmZi90aWZfcmVhZC5jOiBUSUZGUmVhZEJ1ZmZlclNldHVwKCk6IHVzZSBfVElGRmNhbGxvYygpIHRvIHplcm8KLSsJaW5pdGlhbGl6ZSB0aWZfcmF3ZGF0YS4KLSsJRml4ZXMgaHR0cDovL2J1Z3ppbGxhLm1hcHRvb2xzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY1MQotKwotKzIwMTctMDEtMTEgRXZlbiBSb3VhdWx0IDxldmVuLnJvdWF1bHQgYXQgc3BhdGlhbHlzLmNvbT4KLSsKLSAJKiBsaWJ0aWZmL3RpZl9nZXRpbWFnZS5jOiBhZGQgZXhwbGljaXQgdWludDMyIGNhc3QgaW4gcHV0YWdyZXl0aWxlIHRvCi0gCWF2b2lkIFVuZGVmaW5lZEJlaGF2aW9yU2FuaXRpemVyIHdhcm5pbmcuCi0gCVBhdGNoIGJ5IE5pY29sYXMgUGVuYS4KLUluZGV4OiB0aWZmLTQuMC43L2xpYnRpZmYvdGlmX3JlYWQuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHRpZmYtNC4wLjcub3JpZy9saWJ0aWZmL3RpZl9yZWFkLmMJMjAxNy0wNC0yNSAxOTowMzoyMC41ODQxNTU0NTIgKzA1MzAKLSsrKyB0aWZmLTQuMC43L2xpYnRpZmYvdGlmX3JlYWQuYwkyMDE3LTA0LTI2IDEyOjExOjQyLjgxNDg2MzcyOSArMDUzMAotQEAgLTk4Niw3ICs5ODYsOSBAQAotIAkJCQkgIkludmFsaWQgYnVmZmVyIHNpemUiKTsKLSAJCSAgICByZXR1cm4gKDApOwotIAkJfQotLQkJdGlmLT50aWZfcmF3ZGF0YSA9ICh1aW50OCopIF9USUZGbWFsbG9jKHRpZi0+dGlmX3Jhd2RhdGFzaXplKTsKLSsgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB0byB6ZXJvIHRvIGF2b2lkIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBpbiBjYXNlIG9mICovCi0rICAgICAgICAgICAgICAgIC8qIHNob3J0IHJlYWRzIChodHRwOi8vYnVnemlsbGEubWFwdG9vbHMub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjUxKSAqLwotKyAgICAgICAgICAgICAgICB0aWYtPnRpZl9yYXdkYXRhID0gKHVpbnQ4KikgX1RJRkZjYWxsb2MoMSwgdGlmLT50aWZfcmF3ZGF0YXNpemUpOwotIAkJdGlmLT50aWZfZmxhZ3MgfD0gVElGRl9NWUJVRkZFUjsKLSAJfQotIAlpZiAodGlmLT50aWZfcmF3ZGF0YSA9PSBOVUxMKSB7Ci1JbmRleDogdGlmZi00LjAuNy9saWJ0aWZmL3RpZl91bml4LmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSB0aWZmLTQuMC43Lm9yaWcvbGlidGlmZi90aWZfdW5peC5jCTIwMTUtMDgtMjkgMDM6NDY6MjIuNzA3ODE3MDQxICswNTMwCi0rKysgdGlmZi00LjAuNy9saWJ0aWZmL3RpZl91bml4LmMJMjAxNy0wNC0yNiAxMjoxMzowNy40NDI4NjE1MTAgKzA1MzAKLUBAIC0zMTYsNiArMzE2LDE0IEBACi0gCXJldHVybiAobWFsbG9jKChzaXplX3QpIHMpKTsKLSB9Ci0gCi0rdm9pZCogX1RJRkZjYWxsb2ModG1zaXplX3Qgbm1lbWIsIHRtc2l6ZV90IHNpeikKLSt7Ci0rICAgIGlmKCBubWVtYiA9PSAwIHx8IHNpeiA9PSAwICkKLSsgICAgICAgIHJldHVybiAoKHZvaWQgKikgTlVMTCk7Ci0rCi0rICAgIHJldHVybiBjYWxsb2MoKHNpemVfdCkgbm1lbWIsIChzaXplX3Qpc2l6KTsKLSt9Ci0rCi0gdm9pZAotIF9USUZGZnJlZSh2b2lkKiBwKQotIHsKLUluZGV4OiB0aWZmLTQuMC43L2xpYnRpZmYvdGlmX3dpbjMyLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSB0aWZmLTQuMC43Lm9yaWcvbGlidGlmZi90aWZfd2luMzIuYwkyMDE1LTA4LTI5IDAzOjQ2OjIyLjczMDU3MDE2OSArMDUzMAotKysrIHRpZmYtNC4wLjcvbGlidGlmZi90aWZfd2luMzIuYwkyMDE3LTA0LTI2IDEyOjE0OjEyLjkxODg1OTc5NCArMDUzMAotQEAgLTM2MCw2ICszNjAsMTQgQEAKLSAJcmV0dXJuIChtYWxsb2MoKHNpemVfdCkgcykpOwotIH0KLSAKLSt2b2lkKiBfVElGRmNhbGxvYyh0bXNpemVfdCBubWVtYiwgdG1zaXplX3Qgc2l6KQotK3sKLSsgICAgaWYoIG5tZW1iID09IDAgfHwgc2l6ID09IDAgKQotKyAgICAgICAgcmV0dXJuICgodm9pZCAqKSBOVUxMKTsKLSsKLSsgICAgcmV0dXJuIGNhbGxvYygoc2l6ZV90KSBubWVtYiwgKHNpemVfdClzaXopOwotK30KLSsKLSB2b2lkCi0gX1RJRkZmcmVlKHZvaWQqIHApCi0gewotSW5kZXg6IHRpZmYtNC4wLjcvbGlidGlmZi90aWZmaW8uaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHRpZmYtNC4wLjcub3JpZy9saWJ0aWZmL3RpZmZpby5oCTIwMTYtMDEtMjQgMjE6MDk6NTEuODk0NDQyMDQyICswNTMwCi0rKysgdGlmZi00LjAuNy9saWJ0aWZmL3RpZmZpby5oCTIwMTctMDQtMjYgMTI6MTU6NTUuMDM0ODU3MTE3ICswNTMwCi1AQCAtMjkzLDYgKzI5Myw3IEBACi0gICovCi0gCi0gZXh0ZXJuIHZvaWQqIF9USUZGbWFsbG9jKHRtc2l6ZV90IHMpOwotK2V4dGVybiB2b2lkKiBfVElGRmNhbGxvYyh0bXNpemVfdCBubWVtYiwgdG1zaXplX3Qgc2l6KTsKLSBleHRlcm4gdm9pZCogX1RJRkZyZWFsbG9jKHZvaWQqIHAsIHRtc2l6ZV90IHMpOwotIGV4dGVybiB2b2lkIF9USUZGbWVtc2V0KHZvaWQqIHAsIGludCB2LCB0bXNpemVfdCBjKTsKLSBleHRlcm4gdm9pZCBfVElGRm1lbWNweSh2b2lkKiBkLCBjb25zdCB2b2lkKiBzLCB0bXNpemVfdCBjKTsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE3LTc1OTQtcDEucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNy03NTk0LXAxLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzdlNDYwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE3LTc1OTQtcDEucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi1yb20gODI4M2U0ZDFiN2U1MzM0MDY4NGQxMjkzMjg4MGNiY2JhZjIzYThjMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IGVyb3VhdWx0IDxlcm91YXVsdD4KLURhdGU6IFRodSwgMTIgSmFuIDIwMTcgMTc6NDM6MjUgKzAwMDAKLQotKiBsaWJ0aWZmL3RpZl9vanBlZy5jOiBmaXggbGVhayBpbiBPSlBFR1JlYWRIZWFkZXJJbmZvU2VjVGFibGVzQWNUYWJsZQotICB3aGVuIHJlYWQgZmFpbHMuCi0gIFBhdGNoIGJ5IE5pY29sYXMgUGVuYS4KLSAgRml4ZXMgaHR0cDovL2J1Z3ppbGxhLm1hcHRvb2xzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY1OQotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0KLUNWRTogQ1ZFLTIwMTctNzU5NCAjcGF0Y2gxCi1TaWduZWQtb2ZmLWJ5OiBSYWprdW1hciBWZWVyIDxydmVlckBtdmlzdGEuY29tPgotSW5kZXg6IHRpZmYtNC4wLjcvQ2hhbmdlTG9nCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gdGlmZi00LjAuNy5vcmlnL0NoYW5nZUxvZwkyMDE3LTA0LTI0IDE2OjEzOjE1LjAwMDAwMDAwMCArMDUzMAotKysrIHRpZmYtNC4wLjcvQ2hhbmdlTG9nCTIwMTctMDQtMjQgMTY6NTA6MjYuNDY1ODk3NjQ2ICswNTMwCi1AQCAtMSwzICsxLDEwIEBACi0rMjAxNy0wMS0xMiBFdmVuIFJvdWF1bHQgPGV2ZW4ucm91YXVsdCBhdCBzcGF0aWFseXMuY29tPgotKwotKwkqIGxpYnRpZmYvdGlmX29qcGVnLmM6IGZpeCBsZWFrIGluIE9KUEVHUmVhZEhlYWRlckluZm9TZWNUYWJsZXNBY1RhYmxlCi0rCXdoZW4gcmVhZCBmYWlscy4KLSsJUGF0Y2ggYnkgTmljb2zDoXMgUGXDsWEuCi0rCUZpeGVzIGh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI2NTkKLSsKLSAyMDE3LTAxLTExIEV2ZW4gUm91YXVsdCA8ZXZlbi5yb3VhdWx0IGF0IHNwYXRpYWx5cy5jb20+Ci0gCi0gCSogbGlidGlmZi90aWZfZ2V0aW1hZ2UuYzogYWRkIGV4cGxpY2l0IHVpbnQzMiBjYXN0IGluIHB1dGFncmV5dGlsZSB0bwotSW5kZXg6IHRpZmYtNC4wLjcvbGlidGlmZi90aWZfb2pwZWcuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHRpZmYtNC4wLjcub3JpZy9saWJ0aWZmL3RpZl9vanBlZy5jCTIwMTctMDQtMjQgMTY6MDI6MjkuODE3OTczMDUxICswNTMwCi0rKysgdGlmZi00LjAuNy9saWJ0aWZmL3RpZl9vanBlZy5jCTIwMTctMDQtMjQgMTY6NTI6MjcuMzQ5ODk0NDc3ICswNTMwCi1AQCAtMTkxOCw3ICsxOTE4LDEwIEBACi0gCQkJCXJiW3NpemVvZih1aW50MzIpKzUrbl09b1tuXTsKLSAJCQlwPSh1aW50MzIpVElGRlJlYWRGaWxlKHRpZiwmKHJiW3NpemVvZih1aW50MzIpKzIxXSkscSk7Ci0gCQkJaWYgKHAhPXEpCi0rICAgICAgICAgICAgICAgICAgICAgICAgewotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RJRkZmcmVlKHJiKTsKLSAJCQkJcmV0dXJuKDApOwotKyAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAJCQlzcC0+YWN0YWJsZVttXT1yYjsKLSAJCQlzcC0+c29zX3RkYVttXT0oc3AtPnNvc190ZGFbbV18bSk7Ci0gCQl9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNy03NTk0LXAyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTctNzU5NC1wMi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJhMTljNi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNy03NTk0LXAyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotRnJvbSAyZWEzMmY3MzcyYjY1YzI0YjI4MTZmMTFjMDRiZjU5YjUwOTBkMDViIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogZXJvdWF1bHQgPGVyb3VhdWx0PgotRGF0ZTogVGh1LCAxMiBKYW4gMjAxNyAxOToyMzoyMCArMDAwMAotU3ViamVjdDogW1BBVENIIDIvMl0gKiBsaWJ0aWZmL3RpZl9vanBlZy5jOiBmaXggbGVhayBpbgotIE9KUEVHUmVhZEhlYWRlckluZm9TZWNUYWJsZXNRVGFibGUsIE9KUEVHUmVhZEhlYWRlckluZm9TZWNUYWJsZXNEY1RhYmxlIGFuZAotIE9KUEVHUmVhZEhlYWRlckluZm9TZWNUYWJsZXNBY1RhYmxlCi0KLVVwc3RyZWFtLXN0YXR1czogQmFja3BvcnQKLQotQ1ZFOiBDVkUtMjAxNy03NTk0ICNwYXRjaDIKLVNpZ25lZC1vZmYtYnk6IFJhamt1bWFyIFZlZXIgPHJ2ZWVyQG12aXN0YS5jb20+Ci1JbmRleDogdGlmZi00LjAuNy9DaGFuZ2VMb2cKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSB0aWZmLTQuMC43Lm9yaWcvQ2hhbmdlTG9nCTIwMTctMDQtMjQgMTY6NTA6MjYuNDY1ODk3NjQ2ICswNTMwCi0rKysgdGlmZi00LjAuNy9DaGFuZ2VMb2cJMjAxNy0wNC0yNCAxNjo1NjoyMC42ODU4ODgzNjAgKzA1MzAKLUBAIC0xLDYgKzEsNyBAQAotIDIwMTctMDEtMTIgRXZlbiBSb3VhdWx0IDxldmVuLnJvdWF1bHQgYXQgc3BhdGlhbHlzLmNvbT4KLSAKLS0JKiBsaWJ0aWZmL3RpZl9vanBlZy5jOiBmaXggbGVhayBpbiBPSlBFR1JlYWRIZWFkZXJJbmZvU2VjVGFibGVzQWNUYWJsZQotKwkqIGxpYnRpZmYvdGlmX29qcGVnLmM6IGZpeCBsZWFrIGluIE9KUEVHUmVhZEhlYWRlckluZm9TZWNUYWJsZXNRVGFibGUsCi0rCU9KUEVHUmVhZEhlYWRlckluZm9TZWNUYWJsZXNEY1RhYmxlIGFuZCBPSlBFR1JlYWRIZWFkZXJJbmZvU2VjVGFibGVzQWNUYWJsZQotIAl3aGVuIHJlYWQgZmFpbHMuCi0gCVBhdGNoIGJ5IE5pY29sw6FzIFBlw7FhLgotIAlGaXhlcyBodHRwOi8vYnVnemlsbGEubWFwdG9vbHMub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjU5Ci1JbmRleDogdGlmZi00LjAuNy9saWJ0aWZmL3RpZl9vanBlZy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gdGlmZi00LjAuNy5vcmlnL2xpYnRpZmYvdGlmX29qcGVnLmMJMjAxNy0wNC0yNCAxNjo1MjoyNy4zNDk4OTQ0NzcgKzA1MzAKLSsrKyB0aWZmLTQuMC43L2xpYnRpZmYvdGlmX29qcGVnLmMJMjAxNy0wNC0yNCAxNjo1OToyMC4wMDE4ODM2NjAgKzA1MzAKLUBAIC0xNzkwLDcgKzE3OTAsMTAgQEAKLSAJCQlUSUZGU2Vla0ZpbGUodGlmLHNwLT5xdGFibGVfb2Zmc2V0W21dLFNFRUtfU0VUKTsgCi0gCQkJcD0odWludDMyKVRJRkZSZWFkRmlsZSh0aWYsJm9iW3NpemVvZih1aW50MzIpKzVdLDY0KTsKLSAJCQlpZiAocCE9NjQpCi0rICAgICAgICAgICAgICAgICAgICAgICAgewotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RJRkZmcmVlKG9iKTsKLSAJCQkJcmV0dXJuKDApOwotKyAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAJCQlzcC0+cXRhYmxlW21dPW9iOwotIAkJCXNwLT5zb2ZfdHFbbV09bTsKLSAJCX0KLUBAIC0xODU0LDcgKzE4NTcsMTAgQEAKLSAJCQkJcmJbc2l6ZW9mKHVpbnQzMikrNStuXT1vW25dOwotIAkJCXA9KHVpbnQzMilUSUZGUmVhZEZpbGUodGlmLCYocmJbc2l6ZW9mKHVpbnQzMikrMjFdKSxxKTsKLSAJCQlpZiAocCE9cSkKLSsgICAgICAgICAgICAgICAgICAgICAgICB7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVElGRmZyZWUocmIpOwotIAkJCQlyZXR1cm4oMCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgfQotIAkJCXNwLT5kY3RhYmxlW21dPXJiOwotIAkJCXNwLT5zb3NfdGRhW21dPShtPDw0KTsKLSAJCX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE3LTc1OTUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNy03NTk1LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTFhMzdmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE3LTc1OTUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi1jb21taXQgNjE4ZDQ5MDA5MGJmZDEwZTYxM2FjNTc0ZWNmZjMxYTI5MzkwNGI0NAotQXV0aG9yOiBlcm91YXVsdCA8ZXJvdWF1bHQ+Ci1EYXRlOiAgIFdlZCBKYW4gMTEgMTI6MTU6MDEgMjAxNyArMDAwMAotCi0gICAgKiBsaWJ0aWZmL3RpZl9qcGVnLmM6IGF2b2lkIGludGVnZXIgZGl2aXNpb24gYnkgemVybwotICAgICAgaW4gSlBFR1NldHVwRW5jb2RlKCkgd2hlbiBob3Jpem9udGFsIG9yIHZlcnRpY2FsIHNhbXBsaW5nIGlzIHNldCB0byAwLgotICAgICAgRml4ZXMgaHR0cDovL2J1Z3ppbGxhLm1hcHRvb2xzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY1MwotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0KLUNWRTogQ1ZFLTIwMTctNzU5NQotU2lnbmVkLW9mZi1ieTogUmFqa3VtYXIgVmVlciA8cnZlZXJAbXZpc3RhLmNvbT4KLQotSW5kZXg6IHRpZmYtNC4wLjcvQ2hhbmdlTG9nCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gdGlmZi00LjAuNy5vcmlnL0NoYW5nZUxvZwkyMDE3LTA0LTI0IDE3OjMxOjQwLjAxMzgzMjgwNyArMDUzMAotKysrIHRpZmYtNC4wLjcvQ2hhbmdlTG9nCTIwMTctMDQtMjQgMTg6MDM6MzQuNzY5NzgyNjE2ICswNTMwCi1AQCAtOCw2ICs4LDEyIEBACi0gCi0gMjAxNy0wMS0xMSBFdmVuIFJvdWF1bHQgPGV2ZW4ucm91YXVsdCBhdCBzcGF0aWFseXMuY29tPgotIAotKwkqIGxpYnRpZmYvdGlmX2pwZWcuYzogYXZvaWQgaW50ZWdlciBkaXZpc2lvbiBieSB6ZXJvIGluCi0rCUpQRUdTZXR1cEVuY29kZSgpIHdoZW4gaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBzYW1wbGluZyBpcyBzZXQgdG8gMC4KLSsJRml4ZXMgaHR0cDovL2J1Z3ppbGxhLm1hcHRvb2xzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY1MwotKwotKzIwMTctMDEtMTEgRXZlbiBSb3VhdWx0IDxldmVuLnJvdWF1bHQgYXQgc3BhdGlhbHlzLmNvbT4KLSsKLSAJKiBsaWJ0aWZmL3RpZl9nZXRpbWFnZS5jOiBhZGQgZXhwbGljaXQgdWludDMyIGNhc3QgaW4gcHV0YWdyZXl0aWxlIHRvCi0gCWF2b2lkIFVuZGVmaW5lZEJlaGF2aW9yU2FuaXRpemVyIHdhcm5pbmcuCi0gCVBhdGNoIGJ5IE5pY29sYXMgUGVuYS4KLUluZGV4OiB0aWZmLTQuMC43L2xpYnRpZmYvdGlmX2pwZWcuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHRpZmYtNC4wLjcub3JpZy9saWJ0aWZmL3RpZl9qcGVnLmMJMjAxNi0wMS0yNCAyMTowOTo1MS43ODE2NDE2MjUgKzA1MzAKLSsrKyB0aWZmLTQuMC43L2xpYnRpZmYvdGlmX2pwZWcuYwkyMDE3LTA0LTI0IDE4OjA1OjU5Ljc3Nzc3ODgxNSArMDUzMAotQEAgLTE2MjYsNiArMTYyNiwxMyBAQAotIAljYXNlIFBIT1RPTUVUUklDX1lDQkNSOgotIAkJc3AtPmhfc2FtcGxpbmcgPSB0ZC0+dGRfeWNiY3JzdWJzYW1wbGluZ1swXTsKLSAJCXNwLT52X3NhbXBsaW5nID0gdGQtPnRkX3ljYmNyc3Vic2FtcGxpbmdbMV07Ci0rICAgICAgICAgICAgICAgIGlmKCBzcC0+aF9zYW1wbGluZyA9PSAwIHx8IHNwLT52X3NhbXBsaW5nID09IDAgKQotKyAgICAgICAgICAgICAgICB7Ci0rICAgICAgICAgICAgICAgICAgICAgIFRJRkZFcnJvckV4dCh0aWYtPnRpZl9jbGllbnRkYXRhLCBtb2R1bGUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZyBob3Jpem9udGFsL3ZlcnRpY2FsIHNhbXBsaW5nIHZhbHVlIik7Ci0rICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCk7Ci0rICAgICAgICAgICAgICAgIH0KLSsKLSAJCS8qCi0gCQkgKiBBIFJlZmVyZW5jZUJsYWNrV2hpdGUgZmllbGQgKm11c3QqIGJlIHByZXNlbnQgc2luY2UgdGhlCi0gCQkgKiBkZWZhdWx0IHZhbHVlIGlzIGluYXBwcm9wcmlhdGUgZm9yIFlDYkNyLiAgRmlsbCBpbiB0aGUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE3LTc1OTYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNy03NTk2LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTQ1YzNkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE3LTc1OTYucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMDggKzAsMCBAQAotRnJvbSAzMTQ0ZTU3NzcwYzFlNGQyNjUyMGQ4YWJlZTc1MGY4YWM4Yjc1NDkwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogZXJvdWF1bHQgPGVyb3VhdWx0PgotRGF0ZTogV2VkLCAxMSBKYW4gMjAxNyAxNjowOTowMiArMDAwMAotU3ViamVjdDogW1BBVENIXSAqIGxpYnRpZmYvdGlmX2Rpci5jLCB0aWZfZGlycmVhZC5jLCB0aWZfZGlyd3JpdGUuYzogaW1wbGVtZW50Ci0gdmFyaW91cyBjbGFtcGluZ3Mgb2YgZG91YmxlIHRvIG90aGVyIGRhdGEgdHlwZXMgdG8gYXZvaWQgdW5kZWZpbmVkIGJlaGF2aW91cgotIGlmIHRoZSBvdXRwdXQgcmFuZ2UgaXNuJ3QgYmlnIGVub3VnaCB0byBob2xkIHRoZSBpbnB1dCB2YWx1ZS4gRml4ZXMKLSBodHRwOi8vYnVnemlsbGEubWFwdG9vbHMub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjQzCi0gaHR0cDovL2J1Z3ppbGxhLm1hcHRvb2xzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY0MgotIGh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI2NDYKLSBodHRwOi8vYnVnemlsbGEubWFwdG9vbHMub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjQ3Ci0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotQ1ZFOiBDVkUtMjAxNy03NTk2Ci1TaWduZWQtb2ZmLWJ5OiBSYWprdW1hciBWZWVyIDxydmVlckBtdmlzdGEuY29tPgotCi1JbmRleDogdGlmZi00LjAuNy9DaGFuZ2VMb2cKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSB0aWZmLTQuMC43Lm9yaWcvQ2hhbmdlTG9nCTIwMTctMDQtMjUgMTU6NTM6NDAuMjk0NTkyODEyICswNTMwCi0rKysgdGlmZi00LjAuNy9DaGFuZ2VMb2cJMjAxNy0wNC0yNSAxNjowMjowMy4yMzg2MDA2NDEgKzA1MzAKLUBAIC02LDYgKzYsMTYgQEAKLSAJUGF0Y2ggYnkgTmljb2zDoXMgUGXDsWEuCi0gCUZpeGVzIGh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI2NTkKLSAKLSsyMDE3LTAxLTExIEV2ZW4gUm91YXVsdCA8ZXZlbi5yb3VhdWx0IGF0IHNwYXRpYWx5cy5jb20+Ci0rCi0rCSogbGlidGlmZi90aWZfZGlyLmMsIHRpZl9kaXJyZWFkLmMsIHRpZl9kaXJ3cml0ZS5jOiBpbXBsZW1lbnQgdmFyaW91cyBjbGFtcGluZ3MKLSsJb2YgZG91YmxlIHRvIG90aGVyIGRhdGEgdHlwZXMgdG8gYXZvaWQgdW5kZWZpbmVkIGJlaGF2aW91ciBpZiB0aGUgb3V0cHV0IHJhbmdlCi0rCWlzbid0IGJpZyBlbm91Z2ggdG8gaG9sZCB0aGUgaW5wdXQgdmFsdWUuCi0rCUZpeGVzIGh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI2NDMKLSsJaHR0cDovL2J1Z3ppbGxhLm1hcHRvb2xzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY0MgotKwlodHRwOi8vYnVnemlsbGEubWFwdG9vbHMub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjQ2Ci0rCWh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI2NDcKLSsKLSAyMDE3LTAxLTExIEV2ZW4gUm91YXVsdCA8ZXZlbi5yb3VhdWx0IGF0IHNwYXRpYWx5cy5jb20+Ci0gCi0gCSogbGlidGlmZi90aWZfanBlZy5jOiBhdm9pZCBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8gaW4KLUluZGV4OiB0aWZmLTQuMC43L2xpYnRpZmYvdGlmX2Rpci5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gdGlmZi00LjAuNy5vcmlnL2xpYnRpZmYvdGlmX2Rpci5jCTIwMTYtMTAtMzAgMDQ6MzM6MTguODU2NTk4MDcyICswNTMwCi0rKysgdGlmZi00LjAuNy9saWJ0aWZmL3RpZl9kaXIuYwkyMDE3LTA0LTI1IDE2OjAyOjAzLjIzODYwMDY0MSArMDUzMAotQEAgLTMxLDYgKzMxLDcgQEAKLSAgKiAoYW5kIGFsc28gc29tZSBtaXNjZWxsYW5lb3VzIHN0dWZmKQotICAqLwotICNpbmNsdWRlICJ0aWZmaW9wLmgiCi0rI2luY2x1ZGUgPGZsb2F0Lmg+Ci0gCi0gLyoKLSAgKiBUaGVzZSBhcmUgdXNlZCBpbiB0aGUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgY29kZS4uLgotQEAgLTE1NCw2ICsxNTUsMTUgQEAKLSAJcmV0dXJuICgwKTsKLSB9Ci0gCi0rc3RhdGljIGZsb2F0IFRJRkZDbGFtcERvdWJsZVRvRmxvYXQoIGRvdWJsZSB2YWwgKQotK3sKLSsgICAgaWYoIHZhbCA+IEZMVF9NQVggKQotKyAgICAgICAgcmV0dXJuIEZMVF9NQVg7Ci0rICAgIGlmKCB2YWwgPCAtRkxUX01BWCApCi0rICAgICAgICByZXR1cm4gLUZMVF9NQVg7Ci0rICAgIHJldHVybiAoZmxvYXQpdmFsOwotK30KLSsKLSBzdGF0aWMgaW50Ci0gX1RJRkZWU2V0RmllbGQoVElGRiogdGlmLCB1aW50MzIgdGFnLCB2YV9saXN0IGFwKQotIHsKLUBAIC0zMTIsMTMgKzMyMiwxMyBAQAotICAgICAgICAgZGJsdmFsID0gdmFfYXJnKGFwLCBkb3VibGUpOwotICAgICAgICAgaWYoIGRibHZhbCA8IDAgKQotICAgICAgICAgICAgIGdvdG8gYmFkdmFsdWVkb3VibGU7Ci0tCQl0ZC0+dGRfeHJlc29sdXRpb24gPSAoZmxvYXQpIGRibHZhbDsKLSsJCXRkLT50ZF94cmVzb2x1dGlvbiA9IFRJRkZDbGFtcERvdWJsZVRvRmxvYXQoIGRibHZhbCApOwotIAkJYnJlYWs7Ci0gCWNhc2UgVElGRlRBR19ZUkVTT0xVVElPTjoKLSAgICAgICAgIGRibHZhbCA9IHZhX2FyZyhhcCwgZG91YmxlKTsKLSAgICAgICAgIGlmKCBkYmx2YWwgPCAwICkKLSAgICAgICAgICAgICBnb3RvIGJhZHZhbHVlZG91YmxlOwotLQkJdGQtPnRkX3lyZXNvbHV0aW9uID0gKGZsb2F0KSBkYmx2YWw7Ci0rCQl0ZC0+dGRfeXJlc29sdXRpb24gPSBUSUZGQ2xhbXBEb3VibGVUb0Zsb2F0KCBkYmx2YWwgKTsKLSAJCWJyZWFrOwotIAljYXNlIFRJRkZUQUdfUExBTkFSQ09ORklHOgotIAkJdiA9ICh1aW50MTYpIHZhX2FyZyhhcCwgdWludDE2X3ZhcCk7Ci1AQCAtMzI3LDEwICszMzcsMTAgQEAKLSAJCXRkLT50ZF9wbGFuYXJjb25maWcgPSAodWludDE2KSB2OwotIAkJYnJlYWs7Ci0gCWNhc2UgVElGRlRBR19YUE9TSVRJT046Ci0tCQl0ZC0+dGRfeHBvc2l0aW9uID0gKGZsb2F0KSB2YV9hcmcoYXAsIGRvdWJsZSk7Ci0rCQl0ZC0+dGRfeHBvc2l0aW9uID0gVElGRkNsYW1wRG91YmxlVG9GbG9hdCggdmFfYXJnKGFwLCBkb3VibGUpICk7Ci0gCQlicmVhazsKLSAJY2FzZSBUSUZGVEFHX1lQT1NJVElPTjoKLS0JCXRkLT50ZF95cG9zaXRpb24gPSAoZmxvYXQpIHZhX2FyZyhhcCwgZG91YmxlKTsKLSsJCXRkLT50ZF95cG9zaXRpb24gPSBUSUZGQ2xhbXBEb3VibGVUb0Zsb2F0KCB2YV9hcmcoYXAsIGRvdWJsZSkgKTsKLSAJCWJyZWFrOwotIAljYXNlIFRJRkZUQUdfUkVTT0xVVElPTlVOSVQ6Ci0gCQl2ID0gKHVpbnQxNikgdmFfYXJnKGFwLCB1aW50MTZfdmFwKTsKLUluZGV4OiB0aWZmLTQuMC43L2xpYnRpZmYvdGlmX2RpcnJlYWQuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHRpZmYtNC4wLjcub3JpZy9saWJ0aWZmL3RpZl9kaXJyZWFkLmMJMjAxNy0wNC0yNSAxNTo1Mzo0MC4xMzQ1OTI4MTAgKzA1MzAKLSsrKyB0aWZmLTQuMC43L2xpYnRpZmYvdGlmX2RpcnJlYWQuYwkyMDE3LTA0LTI1IDE2OjAyOjAzLjI0MjYwMDY0MSArMDUzMAotQEAgLTQwLDYgKzQwLDcgQEAKLSAgKi8KLSAKLSAjaW5jbHVkZSAidGlmZmlvcC5oIgotKyNpbmNsdWRlIDxmbG9hdC5oPgotIAotICNkZWZpbmUgSUdOT1JFIDAgICAgICAgICAgLyogdGFnIHBsYWNlaG9sZGVyIHVzZWQgYmVsb3cgKi8KLSAjZGVmaW5lIEZBSUxFRF9GSUkgICAgKCh1aW50MzIpIC0xKQotQEAgLTI0MDYsNyArMjQwNywxNCBAQAotIAkJCQltYT0oZG91YmxlKilvcmlnZGF0YTsKLSAJCQkJbWI9ZGF0YTsKLSAJCQkJZm9yIChuPTA7IG48Y291bnQ7IG4rKykKLS0JCQkJCSptYisrPShmbG9hdCkoKm1hKyspOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB2YWwgPSAqbWErKzsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggdmFsID4gRkxUX01BWCApCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IEZMVF9NQVg7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiggdmFsIDwgLUZMVF9NQVggKQotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSAtRkxUX01BWDsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbWIrKz0oZmxvYXQpdmFsOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotIAkJCX0KLSAJCQlicmVhazsKLSAJfQotSW5kZXg6IHRpZmYtNC4wLjcvbGlidGlmZi90aWZfZGlyd3JpdGUuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHRpZmYtNC4wLjcub3JpZy9saWJ0aWZmL3RpZl9kaXJ3cml0ZS5jCTIwMTYtMTAtMzAgMDQ6MzM6MTguODc2ODU0NTAxICswNTMwCi0rKysgdGlmZi00LjAuNy9saWJ0aWZmL3RpZl9kaXJ3cml0ZS5jCTIwMTctMDQtMjUgMTY6MDc6NDguNjcwNjA2MDE4ICswNTMwCi1AQCAtMzAsNiArMzAsNyBAQAotICAqIERpcmVjdG9yeSBXcml0ZSBTdXBwb3J0IFJvdXRpbmVzLgotICAqLwotICNpbmNsdWRlICJ0aWZmaW9wLmgiCi0rI2luY2x1ZGUgPGZsb2F0Lmg+Ci0gCi0gI2lmZGVmIEhBVkVfSUVFRUZQCi0gI2RlZmluZSBUSUZGQ3Z0TmF0aXZlVG9JRUVFRmxvYXQodGlmLCBuLCBmcCkKLUBAIC05MzksNiArOTQwLDY5IEBACi0gCXJldHVybigwKTsKLSB9Ci0gCi0rc3RhdGljIGZsb2F0IFRJRkZDbGFtcERvdWJsZVRvRmxvYXQoIGRvdWJsZSB2YWwgKQotK3sKLSsgICAgaWYoIHZhbCA+IEZMVF9NQVggKQotKyAgICAgICAgcmV0dXJuIEZMVF9NQVg7Ci0rICAgIGlmKCB2YWwgPCAtRkxUX01BWCApCi0rICAgICAgICByZXR1cm4gLUZMVF9NQVg7Ci0rICAgIHJldHVybiAoZmxvYXQpdmFsOwotK30KLSsKLStzdGF0aWMgaW50OCBUSUZGQ2xhbXBEb3VibGVUb0ludDgoIGRvdWJsZSB2YWwgKQotK3sKLSsgICAgaWYoIHZhbCA+IDEyNyApCi0rICAgICAgICByZXR1cm4gMTI3OwotKyAgICBpZiggdmFsIDwgLTEyOCB8fCB2YWwgIT0gdmFsICkKLSsgICAgICAgIHJldHVybiAtMTI4OwotKyAgICByZXR1cm4gKGludDgpdmFsOwotK30KLSsKLStzdGF0aWMgaW50MTYgVElGRkNsYW1wRG91YmxlVG9JbnQxNiggZG91YmxlIHZhbCApCi0rewotKyAgICBpZiggdmFsID4gMzI3NjcgKQotKyAgICAgICAgcmV0dXJuIDMyNzY3OwotKyAgICBpZiggdmFsIDwgLTMyNzY4IHx8IHZhbCAhPSB2YWwgKQotKyAgICAgICAgcmV0dXJuIC0zMjc2ODsKLSsgICAgcmV0dXJuIChpbnQxNil2YWw7Ci0rfQotKwotK3N0YXRpYyBpbnQzMiBUSUZGQ2xhbXBEb3VibGVUb0ludDMyKCBkb3VibGUgdmFsICkKLSt7Ci0rICAgIGlmKCB2YWwgPiAweDdGRkZGRkZGICkKLSsgICAgICAgIHJldHVybiAweDdGRkZGRkZGOwotKyAgICBpZiggdmFsIDwgLTB4N0ZGRkZGRkYtMSB8fCB2YWwgIT0gdmFsICkKLSsgICAgICAgIHJldHVybiAtMHg3RkZGRkZGRi0xOwotKyAgICByZXR1cm4gKGludDMyKXZhbDsKLSt9Ci0rCi0rc3RhdGljIHVpbnQ4IFRJRkZDbGFtcERvdWJsZVRvVUludDgoIGRvdWJsZSB2YWwgKQotK3sKLSsgICAgaWYoIHZhbCA8IDAgKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmKCB2YWwgPiAyNTUgfHwgdmFsICE9IHZhbCApCi0rICAgICAgICByZXR1cm4gMjU1OwotKyAgICByZXR1cm4gKHVpbnQ4KXZhbDsKLSt9Ci0rCi0rc3RhdGljIHVpbnQxNiBUSUZGQ2xhbXBEb3VibGVUb1VJbnQxNiggZG91YmxlIHZhbCApCi0rewotKyAgICBpZiggdmFsIDwgMCApCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYoIHZhbCA+IDY1NTM1IHx8IHZhbCAhPSB2YWwgKQotKyAgICAgICAgcmV0dXJuIDY1NTM1OwotKyAgICByZXR1cm4gKHVpbnQxNil2YWw7Ci0rfQotKwotK3N0YXRpYyB1aW50MzIgVElGRkNsYW1wRG91YmxlVG9VSW50MzIoIGRvdWJsZSB2YWwgKQotK3sKLSsgICAgaWYoIHZhbCA8IDAgKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmKCB2YWwgPiAweEZGRkZGRkZGVSB8fCB2YWwgIT0gdmFsICkKLSsgICAgICAgIHJldHVybiAweEZGRkZGRkZGVTsKLSsgICAgcmV0dXJuICh1aW50MzIpdmFsOwotK30KLSsKLSBzdGF0aWMgaW50Ci0gVElGRldyaXRlRGlyZWN0b3J5VGFnU2FtcGxlZm9ybWF0QXJyYXkoVElGRiogdGlmLCB1aW50MzIqIG5kaXIsIFRJRkZEaXJFbnRyeSogZGlyLCB1aW50MTYgdGFnLCB1aW50MzIgY291bnQsIGRvdWJsZSogdmFsdWUpCi0gewotQEAgLTk1OSw3ICsxMDIzLDcgQEAKLSAJCQlpZiAodGlmLT50aWZfZGlyLnRkX2JpdHNwZXJzYW1wbGU8PTMyKQotIAkJCXsKLSAJCQkJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpCi0tCQkJCQkoKGZsb2F0Kiljb252KVtpXSA9IChmbG9hdCl2YWx1ZVtpXTsKLSsJCQkJCSgoZmxvYXQqKWNvbnYpW2ldID0gVElGRkNsYW1wRG91YmxlVG9GbG9hdCh2YWx1ZVtpXSk7Ci0gCQkJCW9rID0gVElGRldyaXRlRGlyZWN0b3J5VGFnRmxvYXRBcnJheSh0aWYsbmRpcixkaXIsdGFnLGNvdW50LChmbG9hdCopY29udik7Ci0gCQkJfQotIAkJCWVsc2UKLUBAIC05NzEsMTkgKzEwMzUsMTkgQEAKLSAJCQlpZiAodGlmLT50aWZfZGlyLnRkX2JpdHNwZXJzYW1wbGU8PTgpCi0gCQkJewotIAkJCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLS0JCQkJCSgoaW50OCopY29udilbaV0gPSAoaW50OCl2YWx1ZVtpXTsKLSsJCQkJCSgoaW50OCopY29udilbaV0gPSBUSUZGQ2xhbXBEb3VibGVUb0ludDgodmFsdWVbaV0pOwotIAkJCQlvayA9IFRJRkZXcml0ZURpcmVjdG9yeVRhZ1NieXRlQXJyYXkodGlmLG5kaXIsZGlyLHRhZyxjb3VudCwoaW50OCopY29udik7Ci0gCQkJfQotIAkJCWVsc2UgaWYgKHRpZi0+dGlmX2Rpci50ZF9iaXRzcGVyc2FtcGxlPD0xNikKLSAJCQl7Ci0gCQkJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKQotLQkJCQkJKChpbnQxNiopY29udilbaV0gPSAoaW50MTYpdmFsdWVbaV07Ci0rCQkJCQkoKGludDE2Kiljb252KVtpXSA9IFRJRkZDbGFtcERvdWJsZVRvSW50MTYodmFsdWVbaV0pOwotIAkJCQlvayA9IFRJRkZXcml0ZURpcmVjdG9yeVRhZ1NzaG9ydEFycmF5KHRpZixuZGlyLGRpcix0YWcsY291bnQsKGludDE2Kiljb252KTsKLSAJCQl9Ci0gCQkJZWxzZQotIAkJCXsKLSAJCQkJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpCi0tCQkJCQkoKGludDMyKiljb252KVtpXSA9IChpbnQzMil2YWx1ZVtpXTsKLSsJCQkJCSgoaW50MzIqKWNvbnYpW2ldID0gVElGRkNsYW1wRG91YmxlVG9JbnQzMih2YWx1ZVtpXSk7Ci0gCQkJCW9rID0gVElGRldyaXRlRGlyZWN0b3J5VGFnU2xvbmdBcnJheSh0aWYsbmRpcixkaXIsdGFnLGNvdW50LChpbnQzMiopY29udik7Ci0gCQkJfQotIAkJCWJyZWFrOwotQEAgLTk5MSwxOSArMTA1NSwxOSBAQAotIAkJCWlmICh0aWYtPnRpZl9kaXIudGRfYml0c3BlcnNhbXBsZTw9OCkKLSAJCQl7Ci0gCQkJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKQotLQkJCQkJKCh1aW50OCopY29udilbaV0gPSAodWludDgpdmFsdWVbaV07Ci0rCQkJCQkoKHVpbnQ4Kiljb252KVtpXSA9IFRJRkZDbGFtcERvdWJsZVRvVUludDgodmFsdWVbaV0pOwotIAkJCQlvayA9IFRJRkZXcml0ZURpcmVjdG9yeVRhZ0J5dGVBcnJheSh0aWYsbmRpcixkaXIsdGFnLGNvdW50LCh1aW50OCopY29udik7Ci0gCQkJfQotIAkJCWVsc2UgaWYgKHRpZi0+dGlmX2Rpci50ZF9iaXRzcGVyc2FtcGxlPD0xNikKLSAJCQl7Ci0gCQkJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKQotLQkJCQkJKCh1aW50MTYqKWNvbnYpW2ldID0gKHVpbnQxNil2YWx1ZVtpXTsKLSsJCQkJCSgodWludDE2Kiljb252KVtpXSA9IFRJRkZDbGFtcERvdWJsZVRvVUludDE2KHZhbHVlW2ldKTsKLSAJCQkJb2sgPSBUSUZGV3JpdGVEaXJlY3RvcnlUYWdTaG9ydEFycmF5KHRpZixuZGlyLGRpcix0YWcsY291bnQsKHVpbnQxNiopY29udik7Ci0gCQkJfQotIAkJCWVsc2UKLSAJCQl7Ci0gCQkJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKQotLQkJCQkJKCh1aW50MzIqKWNvbnYpW2ldID0gKHVpbnQzMil2YWx1ZVtpXTsKLSsJCQkJCSgodWludDMyKiljb252KVtpXSA9IFRJRkZDbGFtcERvdWJsZVRvVUludDMyKHZhbHVlW2ldKTsKLSAJCQkJb2sgPSBUSUZGV3JpdGVEaXJlY3RvcnlUYWdMb25nQXJyYXkodGlmLG5kaXIsZGlyLHRhZyxjb3VudCwodWludDMyKiljb252KTsKLSAJCQl9Ci0gCQkJYnJlYWs7Ci1AQCAtMjA5NCwxNSArMjE1OCwyNSBAQAotIHN0YXRpYyBpbnQKLSBUSUZGV3JpdGVEaXJlY3RvcnlUYWdDaGVja2VkUmF0aW9uYWwoVElGRiogdGlmLCB1aW50MzIqIG5kaXIsIFRJRkZEaXJFbnRyeSogZGlyLCB1aW50MTYgdGFnLCBkb3VibGUgdmFsdWUpCi0gewotKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgbW9kdWxlW10gPSAiVElGRldyaXRlRGlyZWN0b3J5VGFnQ2hlY2tlZFJhdGlvbmFsIjsKLSAJdWludDMyIG1bMl07Ci0tCWFzc2VydCh2YWx1ZT49MC4wKTsKLSAJYXNzZXJ0KHNpemVvZih1aW50MzIpPT00KTsKLS0JaWYgKHZhbHVlPD0wLjApCi0rCWlmICh2YWx1ZTwwKQotKwl7Ci0rICAgICAgICAgICAgVElGRkVycm9yRXh0KHRpZi0+dGlmX2NsaWVudGRhdGEsbW9kdWxlLCJOZWdhdGl2ZSB2YWx1ZSBpcyBpbGxlZ2FsIik7Ci0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rCX0KLSsgICAgICAgIGVsc2UgaWYoIHZhbHVlICE9IHZhbHVlICkKLSsgICAgICAgIHsKLSsgICAgICAgICAgICBUSUZGRXJyb3JFeHQodGlmLT50aWZfY2xpZW50ZGF0YSxtb2R1bGUsIk5vdC1hLW51bWJlciB2YWx1ZSBpcyBpbGxlZ2FsIik7Ci0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICB9Ci0rICAgICAgICBlbHNlIGlmICh2YWx1ZT09MC4wKQotIAl7Ci0gCQltWzBdPTA7Ci0gCQltWzFdPTE7Ci0tCX0KLS0JZWxzZSBpZiAodmFsdWU9PShkb3VibGUpKHVpbnQzMil2YWx1ZSkKLSsgICAgICAgIH0KLSsgICAgICAgIGVsc2UgaWYgKHZhbHVlIDw9IDB4RkZGRkZGRkZVICYmIHZhbHVlPT0oZG91YmxlKSh1aW50MzIpdmFsdWUpCi0gCXsKLSAJCW1bMF09KHVpbnQzMil2YWx1ZTsKLSAJCW1bMV09MTsKLUBAIC0yMTQzLDcgKzIyMTcsNyBAQAotIAl9Ci0gCWZvciAobmE9dmFsdWUsIG5iPW0sIG5jPTA7IG5jPGNvdW50OyBuYSsrLCBuYis9MiwgbmMrKykKLSAJewotLQkJaWYgKCpuYTw9MC4wKQotKyAgICAgICAgICAgICAgICBpZiAoKm5hPD0wLjAgfHwgKm5hICE9ICpuYSkKLSAJCXsKLSAJCQluYlswXT0wOwotIAkJCW5iWzFdPTE7Ci1AQCAtMjE1Myw3ICsyMjI3LDggQEAKLSAJCQluYlswXT0odWludDMyKSgqbmEpOwotIAkJCW5iWzFdPTE7Ci0gCQl9Ci0tCQllbHNlIGlmICgqbmE8MS4wKQotKwkJZWxzZSBpZiAoKm5hID49IDAgJiYgKm5hIDw9IChmbG9hdCkweEZGRkZGRkZGVSAmJgotKyAgICAgICAgICAgICAgICAgICAgICAgICAqbmE9PShmbG9hdCkodWludDMyKSgqbmEpKQotIAkJewotIAkJCW5iWzBdPSh1aW50MzIpKChkb3VibGUpKCpuYSkqMHhGRkZGRkZGRik7Ci0gCQkJbmJbMV09MHhGRkZGRkZGRjsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE3LTc1OTgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNy03NTk4LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDA4MmJiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE3LTc1OTgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi1Gcm9tIDNjZmQ2MmQ3N2MyYTdlMTQ3YTA1YmQ2Nzg1MjRjMzQ1ZmE5YzJiYjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBlcm91YXVsdCA8ZXJvdWF1bHQ+Ci1EYXRlOiBXZWQsIDExIEphbiAyMDE3IDEzOjI4OjAxICswMDAwCi1TdWJqZWN0OiBbUEFUQ0hdICogbGlidGlmZi90aWZfZGlycmVhZC5jOiBhdm9pZCBkaXZpc2lvbiBieSBmbG9hdGluZyBwb2ludCAwCi0gaW4gVElGRlJlYWREaXJFbnRyeUNoZWNrZWRSYXRpb25hbCgpIGFuZCBUSUZGUmVhZERpckVudHJ5Q2hlY2tlZFNyYXRpb25hbCgpLAotIGFuZCByZXR1cm4gMCBpbiB0aGF0IGNhc2UgKGluc3RlYWQgb2YgaW5maW5pdHkgYXMgYmVmb3JlIHByZXN1bWFibHkpCi0gQXBwYXJlbnRseSBzb21lIHNhbml0aXplcnMgZG8gbm90IGxpa2UgdGhvc2UgZGl2aXNpb25zIGJ5IHplcm8uIEZpeGVzCi0gaHR0cDovL2J1Z3ppbGxhLm1hcHRvb2xzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY0NAotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci0KLUNWRTogQ1ZFLTIwMTctNzU5OAotU2lnbmVkLW9mZi1ieTogUmFqa3VtYXIgVmVlciA8cnZlZXJAbXZpc3RhLmNvbT4KLUluZGV4OiB0aWZmLTQuMC43L0NoYW5nZUxvZwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHRpZmYtNC4wLjcub3JpZy9DaGFuZ2VMb2cJMjAxNy0wNC0yNSAxNjoxNDo1OS44NTg2MTI3MzAgKzA1MzAKLSsrKyB0aWZmLTQuMC43L0NoYW5nZUxvZwkyMDE3LTA0LTI1IDE4OjExOjM2LjA0ODEwNzEyNyArMDUzMAotQEAgLTEsMyArMSw0IEBACi0rCi0gMjAxNy0wMS0xMiBFdmVuIFJvdWF1bHQgPGV2ZW4ucm91YXVsdCBhdCBzcGF0aWFseXMuY29tPgotIAotIAkqIGxpYnRpZmYvdGlmX29qcGVnLmM6IGZpeCBsZWFrIGluIE9KUEVHUmVhZEhlYWRlckluZm9TZWNUYWJsZXNRVGFibGUsCi1AQCAtOCw2ICs5LDE0IEBACi0gCi0gMjAxNy0wMS0xMSBFdmVuIFJvdWF1bHQgPGV2ZW4ucm91YXVsdCBhdCBzcGF0aWFseXMuY29tPgotIAotKwkqIGxpYnRpZmYvdGlmX2RpcnJlYWQuYzogYXZvaWQgZGl2aXNpb24gYnkgZmxvYXRpbmcgcG9pbnQgMCBpbgotKwlUSUZGUmVhZERpckVudHJ5Q2hlY2tlZFJhdGlvbmFsKCkgYW5kIFRJRkZSZWFkRGlyRW50cnlDaGVja2VkU3JhdGlvbmFsKCksCi0rCWFuZCByZXR1cm4gMCBpbiB0aGF0IGNhc2UgKGluc3RlYWQgb2YgaW5maW5pdHkgYXMgYmVmb3JlIHByZXN1bWFibHkpCi0rCUFwcGFyZW50bHkgc29tZSBzYW5pdGl6ZXJzIGRvIG5vdCBsaWtlIHRob3NlIGRpdmlzaW9ucyBieSB6ZXJvLgotKwlGaXhlcyBodHRwOi8vYnVnemlsbGEubWFwdG9vbHMub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjQ0Ci0rCi0rMjAxNy0wMS0xMSBFdmVuIFJvdWF1bHQgPGV2ZW4ucm91YXVsdCBhdCBzcGF0aWFseXMuY29tPgotKwotIAkqIGxpYnRpZmYvdGlmX2Rpci5jLCB0aWZfZGlycmVhZC5jLCB0aWZfZGlyd3JpdGUuYzogaW1wbGVtZW50IHZhcmlvdXMgY2xhbXBpbmdzCi0gCW9mIGRvdWJsZSB0byBvdGhlciBkYXRhIHR5cGVzIHRvIGF2b2lkIHVuZGVmaW5lZCBiZWhhdmlvdXIgaWYgdGhlIG91dHB1dCByYW5nZQotIAlpc24ndCBiaWcgZW5vdWdoIHRvIGhvbGQgdGhlIGlucHV0IHZhbHVlLgotSW5kZXg6IHRpZmYtNC4wLjcvbGlidGlmZi90aWZfZGlycmVhZC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gdGlmZi00LjAuNy5vcmlnL2xpYnRpZmYvdGlmX2RpcnJlYWQuYwkyMDE3LTA0LTI1IDE2OjE0OjU5Ljg1ODYxMjczMCArMDUzMAotKysrIHRpZmYtNC4wLjcvbGlidGlmZi90aWZfZGlycmVhZC5jCTIwMTctMDQtMjUgMTg6MTY6MjEuODM2MTExNTc2ICswNTMwCi1AQCAtMjg4MCw3ICsyODgwLDEwIEBACi0gCQltLmwgPSBkaXJlbnRyeS0+dGRpcl9vZmZzZXQudG9mZl9sb25nODsKLSAJaWYgKHRpZi0+dGlmX2ZsYWdzJlRJRkZfU1dBQikKLSAJCVRJRkZTd2FiQXJyYXlPZkxvbmcobS5pLDIpOwotLQlpZiAobS5pWzBdPT0wKQotKyAgICAgICAgLyogTm90IGNvbXBsZXRlbHkgc3VyZSB3aGF0IHdlIHNob3VsZCBkbyB3aGVuIG0uaVsxXT09MCwgYnV0IHNvbWUgKi8KLSsgICAgICAgIC8qIHNhbml0aXplcnMgZG8gbm90IGxpa2UgZGl2aXNpb24gYnkgMC4wOiAqLwotKyAgICAgICAgLyogaHR0cDovL2J1Z3ppbGxhLm1hcHRvb2xzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY0NCAqLwotKwlpZiAobS5pWzBdPT0wIHx8IG0uaVsxXT09MCkKLSAJCSp2YWx1ZT0wLjA7Ci0gCWVsc2UKLSAJCSp2YWx1ZT0oZG91YmxlKW0uaVswXS8oZG91YmxlKW0uaVsxXTsKLUBAIC0yOTA4LDcgKzI5MTEsMTAgQEAKLSAJCW0ubD1kaXJlbnRyeS0+dGRpcl9vZmZzZXQudG9mZl9sb25nODsKLSAJaWYgKHRpZi0+dGlmX2ZsYWdzJlRJRkZfU1dBQikKLSAJCVRJRkZTd2FiQXJyYXlPZkxvbmcobS5pLDIpOwotLQlpZiAoKGludDMyKW0uaVswXT09MCkKLSsgICAgICAgIC8qIE5vdCBjb21wbGV0ZWx5IHN1cmUgd2hhdCB3ZSBzaG91bGQgZG8gd2hlbiBtLmlbMV09PTAsIGJ1dCBzb21lICovCi0rICAgICAgICAvKiBzYW5pdGl6ZXJzIGRvIG5vdCBsaWtlIGRpdmlzaW9uIGJ5IDAuMDogKi8KLSsgICAgICAgIC8qIGh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI2NDQgKi8KLSsJaWYgKChpbnQzMiltLmlbMF09PTAgfHwgbS5pWzFdPT0wKQotIAkJKnZhbHVlPTAuMDsKLSAJZWxzZQotIAkJKnZhbHVlPShkb3VibGUpKChpbnQzMiltLmlbMF0pLyhkb3VibGUpbS5pWzFdOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTctNzYwMS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE3LTc2MDEucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiM2M2YzguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTctNzYwMS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLUZyb20gMGE3NmE4Yzc2NWM3YjgzMjdjNTk2NDYyODRmYTc4YzNjMjdlNTQ5MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IGVyb3VhdWx0IDxlcm91YXVsdD4KLURhdGU6IFdlZCwgMTEgSmFuIDIwMTcgMTY6MTM6NTAgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gKiBsaWJ0aWZmL3RpZl9qcGVnLmM6IHZhbGlkYXRlIEJpdHNQZXJTYW1wbGUgaW4KLSBKUEVHU2V0dXBFbmNvZGUoKSB0byBhdm9pZCB1bmRlZmluZWQgYmVoYXZpb3VyIGNhdXNlZCBieSBpbnZhbGlkIHNoaWZ0Ci0gZXhwb25lbnQuIEZpeGVzIGh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI2NDgKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotCi1DVkU6IENWRS0yMDE3LTc2MDEKLVNpZ25lZC1vZmYtYnk6IFJhamt1bWFyIFZlZXIgPHJ2ZWVyQG12aXN0YS5jb20+Ci1JbmRleDogdGlmZi00LjAuNy9DaGFuZ2VMb2cKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSB0aWZmLTQuMC43Lm9yaWcvQ2hhbmdlTG9nCTIwMTctMDQtMjUgMTg6MjE6MzIuODU2MTE2NDE3ICswNTMwCi0rKysgdGlmZi00LjAuNy9DaGFuZ2VMb2cJMjAxNy0wNC0yNSAxODozNTozMS45MDQxMjk0NzcgKzA1MzAKLUBAIC0xLDQgKzEsMyBAQAotLQotIDIwMTctMDEtMTIgRXZlbiBSb3VhdWx0IDxldmVuLnJvdWF1bHQgYXQgc3BhdGlhbHlzLmNvbT4KLSAKLSAJKiBsaWJ0aWZmL3RpZl9vanBlZy5jOiBmaXggbGVhayBpbiBPSlBFR1JlYWRIZWFkZXJJbmZvU2VjVGFibGVzUVRhYmxlLAotQEAgLTksNiArOCwxMiBAQAotIAotIDIwMTctMDEtMTEgRXZlbiBSb3VhdWx0IDxldmVuLnJvdWF1bHQgYXQgc3BhdGlhbHlzLmNvbT4KLSAKLSsJKiBsaWJ0aWZmL3RpZl9qcGVnLmM6IHZhbGlkYXRlIEJpdHNQZXJTYW1wbGUgaW4gSlBFR1NldHVwRW5jb2RlKCkgdG8gYXZvaWQKLSsJdW5kZWZpbmVkIGJlaGF2aW91ciBjYXVzZWQgYnkgaW52YWxpZCBzaGlmdCBleHBvbmVudC4KLSsJRml4ZXMgaHR0cDovL2J1Z3ppbGxhLm1hcHRvb2xzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY0OAotKwotKzIwMTctMDEtMTEgRXZlbiBSb3VhdWx0IDxldmVuLnJvdWF1bHQgYXQgc3BhdGlhbHlzLmNvbT4KLSsKLSAJKiBsaWJ0aWZmL3RpZl9kaXJyZWFkLmM6IGF2b2lkIGRpdmlzaW9uIGJ5IGZsb2F0aW5nIHBvaW50IDAgaW4KLSAJVElGRlJlYWREaXJFbnRyeUNoZWNrZWRSYXRpb25hbCgpIGFuZCBUSUZGUmVhZERpckVudHJ5Q2hlY2tlZFNyYXRpb25hbCgpLAotIAlhbmQgcmV0dXJuIDAgaW4gdGhhdCBjYXNlIChpbnN0ZWFkIG9mIGluZmluaXR5IGFzIGJlZm9yZSBwcmVzdW1hYmx5KQotSW5kZXg6IHRpZmYtNC4wLjcvbGlidGlmZi90aWZfanBlZy5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gdGlmZi00LjAuNy5vcmlnL2xpYnRpZmYvdGlmX2pwZWcuYwkyMDE3LTA0LTI1IDE4OjIxOjMyLjc0NDExNjQxNSArMDUzMAotKysrIHRpZmYtNC4wLjcvbGlidGlmZi90aWZfanBlZy5jCTIwMTctMDQtMjUgMTg6Mzg6MDIuMjAwMTMxODE3ICswNTMwCi1AQCAtMTYzMiw3ICsxNjMyLDEzIEBACi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZyBob3Jpem9udGFsL3ZlcnRpY2FsIHNhbXBsaW5nIHZhbHVlIik7Ci0gICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCk7Ci0gICAgICAgICAgICAgICAgIH0KLS0KLSsgICAgICAgICAgICAgICAgaWYoIHRkLT50ZF9iaXRzcGVyc2FtcGxlID4gMTYgKQotKyAgICAgICAgICAgICAgICB7Ci0rICAgICAgICAgICAgICAgICAgICBUSUZGRXJyb3JFeHQodGlmLT50aWZfY2xpZW50ZGF0YSwgbW9kdWxlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCaXRzUGVyU2FtcGxlICVkIG5vdCBhbGxvd2VkIGZvciBKUEVHIiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZC0+dGRfYml0c3BlcnNhbXBsZSk7Ci0rICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDApOwotKyAgICAgICAgICAgICAgICB9Ci0gCQkvKgotIAkJICogQSBSZWZlcmVuY2VCbGFja1doaXRlIGZpZWxkICptdXN0KiBiZSBwcmVzZW50IHNpbmNlIHRoZQotIAkJICogZGVmYXVsdCB2YWx1ZSBpcyBpbmFwcHJvcHJpYXRlIGZvciBZQ2JDci4gIEZpbGwgaW4gdGhlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNy03NjAyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTctNzYwMi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVkOTdlMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNy03NjAyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotRnJvbSA2NmU3YmQ1OTUyMDk5Njc0MGU0ZGY1NDk1YTgzMGI0MmZhZTQ4YmM0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogZXJvdWF1bHQgPGVyb3VhdWx0PgotRGF0ZTogV2VkLCAxMSBKYW4gMjAxNyAxNjozMzozNCArMDAwMAotU3ViamVjdDogW1BBVENIXSAqIGxpYnRpZmYvdGlmX3JlYWQuYzogYXZvaWQgcG90ZW50aWFsIHVuZGVmaW5lZCBiZWhhdmlvdXIgb24KLSBzaWduZWQgaW50ZWdlciBhZGRpdGlvbiBpbiBUSUZGUmVhZFJhd1N0cmlwMSgpIGluIGlzTWFwcGVkKCkgY2FzZS4gRml4ZXMKLSBodHRwOi8vYnVnemlsbGEubWFwdG9vbHMub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjUwCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLQotQ1ZFOiBDVkUtMjAxNy03NjAyCi1TaWduZWQtb2ZmLWJ5OiBSYWprdW1hciBWZWVyIDxydmVlckBtdmlzdGEuY29tPgotCi1JbmRleDogdGlmZi00LjAuNy9DaGFuZ2VMb2cKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSB0aWZmLTQuMC43Lm9yaWcvQ2hhbmdlTG9nCTIwMTctMDQtMjUgMTg6NDI6MDcuNjU2MTM1NjM4ICswNTMwCi0rKysgdGlmZi00LjAuNy9DaGFuZ2VMb2cJMjAxNy0wNC0yNSAxODo1NDozNi44MTIxNDcyOTkgKzA1MzAKLUBAIC04LDYgKzgsMTIgQEAKLSAKLSAyMDE3LTAxLTExIEV2ZW4gUm91YXVsdCA8ZXZlbi5yb3VhdWx0IGF0IHNwYXRpYWx5cy5jb20+Ci0gCi0rCSogbGlidGlmZi90aWZfcmVhZC5jOiBhdm9pZCBwb3RlbnRpYWwgdW5kZWZpbmVkIGJlaGF2aW91ciBvbiBzaWduZWQgaW50ZWdlcgotKwlhZGRpdGlvbiBpbiBUSUZGUmVhZFJhd1N0cmlwMSgpIGluIGlzTWFwcGVkKCkgY2FzZS4KLSsJRml4ZXMgaHR0cDovL2J1Z3ppbGxhLm1hcHRvb2xzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY1MAotKwotKzIwMTctMDEtMTEgRXZlbiBSb3VhdWx0IDxldmVuLnJvdWF1bHQgYXQgc3BhdGlhbHlzLmNvbT4KLSsKLSAJKiBsaWJ0aWZmL3RpZl9qcGVnLmM6IHZhbGlkYXRlIEJpdHNQZXJTYW1wbGUgaW4gSlBFR1NldHVwRW5jb2RlKCkgdG8gYXZvaWQKLSAJdW5kZWZpbmVkIGJlaGF2aW91ciBjYXVzZWQgYnkgaW52YWxpZCBzaGlmdCBleHBvbmVudC4KLSAJRml4ZXMgaHR0cDovL2J1Z3ppbGxhLm1hcHRvb2xzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY0OAotSW5kZXg6IHRpZmYtNC4wLjcvbGlidGlmZi90aWZfcmVhZC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gdGlmZi00LjAuNy5vcmlnL2xpYnRpZmYvdGlmX3JlYWQuYwkyMDE3LTA0LTI1IDE4OjQyOjA3LjEzMjEzNTYyOSArMDUzMAotKysrIHRpZmYtNC4wLjcvbGlidGlmZi90aWZfcmVhZC5jCTIwMTctMDQtMjUgMTg6NTg6MjUuMjcyMTUwODU1ICswNTMwCi1AQCAtNDIwLDE2ICs0MjAsMjYgQEAKLSAJCQlyZXR1cm4gKCh0bXNpemVfdCkoLTEpKTsKLSAJCX0KLSAJfSBlbHNlIHsKLS0JCXRtc2l6ZV90IG1hLG1iOwotKwkJdG1zaXplX3QgbWE7Ci0gCQl0bXNpemVfdCBuOwotLQkJbWE9KHRtc2l6ZV90KXRkLT50ZF9zdHJpcG9mZnNldFtzdHJpcF07Ci0tCQltYj1tYStzaXplOwotLQkJaWYgKCh0ZC0+dGRfc3RyaXBvZmZzZXRbc3RyaXBdID4gKHVpbnQ2NClUSUZGX1RNU0laRV9UX01BWCl8fChtYT50aWYtPnRpZl9zaXplKSkKLS0JCQluPTA7Ci0tCQllbHNlIGlmICgobWI8bWEpfHwobWI8c2l6ZSl8fChtYj50aWYtPnRpZl9zaXplKSkKLS0JCQluPXRpZi0+dGlmX3NpemUtbWE7Ci0tCQllbHNlCi0tCQkJbj1zaXplOwotKyAgICAgICAgICAgICAgICBpZiAoKHRkLT50ZF9zdHJpcG9mZnNldFtzdHJpcF0gPiAodWludDY0KVRJRkZfVE1TSVpFX1RfTUFYKXx8Ci0rICAgICAgICAgICAgICAgICAgICAgKChtYT0odG1zaXplX3QpdGQtPnRkX3N0cmlwb2Zmc2V0W3N0cmlwXSk+dGlmLT50aWZfc2l6ZSkpCi0rICAgICAgICAgICAgICAgIHsKLSsgICAgICAgICAgICAgICAgICAgIG49MDsKLSsgICAgICAgICAgICAgICAgfQotKyAgICAgICAgICAgICAgICBlbHNlIGlmKCBtYSA+IFRJRkZfVE1TSVpFX1RfTUFYIC0gc2l6ZSApCi0rICAgICAgICAgICAgICAgIHsKLSsgICAgICAgICAgICAgICAgICAgIG49MDsKLSsgICAgICAgICAgICAgICAgfQotKyAgICAgICAgICAgICAgICBlbHNlCi0rICAgICAgICAgICAgICAgIHsKLSsgICAgICAgICAgICAgICAgICAgIHRtc2l6ZV90IG1iPW1hK3NpemU7Ci0rICAgICAgICAgICAgICAgICAgICBpZiAobWI+dGlmLT50aWZfc2l6ZSkKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgbj10aWYtPnRpZl9zaXplLW1hOwotKyAgICAgICAgICAgICAgICAgICAgZWxzZQotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuPXNpemU7Ci0rICAgICAgICAgICAgICAgIH0KLSsKLSAJCWlmIChuIT1zaXplKSB7Ci0gI2lmIGRlZmluZWQoX19XSU4zMl9fKSAmJiAoZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChfX01JTkdXMzJfXykpCi0gCQkJVElGRkVycm9yRXh0KHRpZi0+dGlmX2NsaWVudGRhdGEsIG1vZHVsZSwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE3LTkxNDcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNy05MTQ3LnBhdGNoCmluZGV4IDk0ZjMzOTAuLjMzOTIyODUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE3LTkxNDcucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTctOTE0Ny5wYXRjaApAQCAtMzIsMzggKzMyLDM4IEBACiAgbGlidGlmZi90aWZfZGlycmVhZC5jIHwgICA0ICsrCiAgNCBmaWxlcyBjaGFuZ2VkLCAxMjggaW5zZXJ0aW9ucygrKQogCi1JbmRleDogdGlmZi00LjAuNy9DaGFuZ2VMb2cKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSB0aWZmLTQuMC43Lm9yaWcvQ2hhbmdlTG9nCi0rKysgdGlmZi00LjAuNy9DaGFuZ2VMb2cKK2RpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKK2luZGV4IGVlOGQ5ZDAuLjU3MzkyOTIgMTAwNjQ0CistLS0gYS9DaGFuZ2VMb2cKKysrKyBiL0NoYW5nZUxvZwogQEAgLTEsMyArMSwyMyBAQAogKzIwMTctMDYtMDEgIEV2ZW4gUm91YXVsdCA8ZXZlbi5yb3VhdWx0IGF0IHNwYXRpYWx5cy5jb20+CiArCi0rICAgICAgICogbGlidGlmZi90aWZfZGlyaW5mby5jLCB0aWZfZGlycmVhZC5jOiBhZGQgX1RJRkZDaGVja0ZpZWxkSXNWYWxpZEZvckNvZGVjKCksCi0rICAgICAgIGFuZCB1c2UgaXQgaW4gVElGRlJlYWREaXJlY3RvcnkoKSBzbyBhcyB0byBpZ25vcmUgZmllbGRzIHdob3NlIHRhZyBpcyBhCi0rICAgICAgIGNvZGVjLXNwZWNpZmllZCB0YWcgYnV0IHRoaXMgY29kZWMgaXMgbm90IGVuYWJsZWQuIFRoaXMgYXZvaWRzIFRJRkZHZXRGaWVsZCgpCi0rICAgICAgIHRvIGJlaGF2ZSBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgY29kZWMgaXMgZW5hYmxlZCBvciBub3QsIGFuZAotKyAgICAgICB0aHVzIGNhbiBhdm9pZCBzdGFjayBiYXNlZCBidWZmZXIgb3ZlcmZsb3dzIGluIGEgbnVtYmVyIG9mIFRJRkYgdXRpbGl0aWVzCi0rICAgICAgIHN1Y2ggYXMgdGlmZnNwbGl0LCB0aWZmY21wLCB0aHVtYm5haWwsIGV0Yy4KLSsgICAgICAgUGF0Y2ggZGVyaXZlZCBmcm9tIDAwNjMtSGFuZGxlLXByb3Blcmx5LUNPREVDLXNwZWNpZmljLXRhZ3MucGF0Y2gKLSsgICAgICAgKGh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI1ODApIGJ5IFJhcGhhw6tsIEhlcnR6b2cuCi0rICAgICAgIEZpeGVzOgotKyAgICAgICBodHRwOi8vYnVnemlsbGEubWFwdG9vbHMub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTgwCi0rICAgICAgIGh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI2OTMKLSsgICAgICAgaHR0cDovL2J1Z3ppbGxhLm1hcHRvb2xzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjYyNSAoQ1ZFLTIwMTYtMTAwOTUpCi0rICAgICAgIGh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI1NjQgKENWRS0yMDE1LTc1NTQpCi0rICAgICAgIGh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI1NjEgKENWRS0yMDE2LTUzMTgpCi0rICAgICAgIGh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI0OTkgKENWRS0yMDE0LTgxMjgpCi0rICAgICAgIGh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI0NDEKLSsgICAgICAgaHR0cDovL2J1Z3ppbGxhLm1hcHRvb2xzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQzMworKwkqIGxpYnRpZmYvdGlmX2RpcmluZm8uYywgdGlmX2RpcnJlYWQuYzogYWRkIF9USUZGQ2hlY2tGaWVsZElzVmFsaWRGb3JDb2RlYygpLAorKwlhbmQgdXNlIGl0IGluIFRJRkZSZWFkRGlyZWN0b3J5KCkgc28gYXMgdG8gaWdub3JlIGZpZWxkcyB3aG9zZSB0YWcgaXMgYQorKwljb2RlYy1zcGVjaWZpZWQgdGFnIGJ1dCB0aGlzIGNvZGVjIGlzIG5vdCBlbmFibGVkLiBUaGlzIGF2b2lkcyBUSUZGR2V0RmllbGQoKQorKwl0byBiZWhhdmUgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGNvZGVjIGlzIGVuYWJsZWQgb3Igbm90LCBhbmQKKysJdGh1cyBjYW4gYXZvaWQgc3RhY2sgYmFzZWQgYnVmZmVyIG92ZXJmbG93cyBpbiBhIG51bWJlciBvZiBUSUZGIHV0aWxpdGllcworKwlzdWNoIGFzIHRpZmZzcGxpdCwgdGlmZmNtcCwgdGh1bWJuYWlsLCBldGMuCisrCVBhdGNoIGRlcml2ZWQgZnJvbSAwMDYzLUhhbmRsZS1wcm9wZXJseS1DT0RFQy1zcGVjaWZpYy10YWdzLnBhdGNoCisrCShodHRwOi8vYnVnemlsbGEubWFwdG9vbHMub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTgwKSBieSBSYXBoYcOrbCBIZXJ0em9nLgorKwlGaXhlczoKKysJaHR0cDovL2J1Z3ppbGxhLm1hcHRvb2xzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU4MAorKwlodHRwOi8vYnVnemlsbGEubWFwdG9vbHMub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjkzCisrCWh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI2MjUgKENWRS0yMDE2LTEwMDk1KQorKwlodHRwOi8vYnVnemlsbGEubWFwdG9vbHMub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTY0IChDVkUtMjAxNS03NTU0KQorKwlodHRwOi8vYnVnemlsbGEubWFwdG9vbHMub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTYxIChDVkUtMjAxNi01MzE4KQorKwlodHRwOi8vYnVnemlsbGEubWFwdG9vbHMub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDk5IChDVkUtMjAxNC04MTI4KQorKwlodHRwOi8vYnVnemlsbGEubWFwdG9vbHMub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDQxCisrCWh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI0MzMKICsKLSAyMDE3LTAxLTExIEV2ZW4gUm91YXVsdCA8ZXZlbi5yb3VhdWx0IGF0IHNwYXRpYWx5cy5jb20+CisgMjAxNy0wNS0yMSAgQm9iIEZyaWVzZW5oYWhuICA8YmZyaWVzZW5Ac2ltcGxlLmRhbGxhcy50eC51cz4KICAKLSAJKiB0b29scy90aWZmY3AuYzogZXJyb3Igb3V0IGNsZWFubHkgaW4gY3BDb250aWcyU2VwYXJhdGVCeVJvdyBhbmQKLUluZGV4OiB0aWZmLTQuMC43L2xpYnRpZmYvdGlmX2Rpci5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gdGlmZi00LjAuNy5vcmlnL2xpYnRpZmYvdGlmX2Rpci5oCi0rKysgdGlmZi00LjAuNy9saWJ0aWZmL3RpZl9kaXIuaAorIAkqIGNvbmZpZ3VyZS5hYzogbGlidGlmZiA0LjAuOCByZWxlYXNlZC4KK2RpZmYgLS1naXQgYS9saWJ0aWZmL3RpZl9kaXIuaCBiL2xpYnRpZmYvdGlmX2Rpci5oCitpbmRleCBlMTJiNDRiLi41MjA2YmU0IDEwMDY0NAorLS0tIGEvbGlidGlmZi90aWZfZGlyLmgKKysrKyBiL2xpYnRpZmYvdGlmX2Rpci5oCiBAQCAtMjkxLDYgKzI5MSw3IEBAIHN0cnVjdCBfVElGRkZpZWxkIHsKICBleHRlcm4gaW50IF9USUZGTWVyZ2VGaWVsZHMoVElGRiosIGNvbnN0IFRJRkZGaWVsZFtdLCB1aW50MzIpOwogIGV4dGVybiBjb25zdCBUSUZGRmllbGQqIF9USUZGRmluZE9yUmVnaXN0ZXJGaWVsZChUSUZGICosIHVpbnQzMiwgVElGRkRhdGFUeXBlKTsKQEAgLTcyLDExICs3MiwxMSBAQAogIAogICNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQogIH0KLUluZGV4OiB0aWZmLTQuMC43L2xpYnRpZmYvdGlmX2RpcmluZm8uYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHRpZmYtNC4wLjcub3JpZy9saWJ0aWZmL3RpZl9kaXJpbmZvLmMKLSsrKyB0aWZmLTQuMC43L2xpYnRpZmYvdGlmX2RpcmluZm8uYwotQEAgLTk1Niw2ICs5NTYsMTA5IEBAIFRJRkZNZXJnZUZpZWxkSW5mbyhUSUZGKiB0aWYsIGNvbnN0IFRJRkYKK2RpZmYgLS1naXQgYS9saWJ0aWZmL3RpZl9kaXJpbmZvLmMgYi9saWJ0aWZmL3RpZl9kaXJpbmZvLmMKK2luZGV4IDBjOGVmNDIuLjk3YzBkZjAgMTAwNjQ0CistLS0gYS9saWJ0aWZmL3RpZl9kaXJpbmZvLmMKKysrKyBiL2xpYnRpZmYvdGlmX2RpcmluZm8uYworQEAgLTk1Niw2ICs5NTYsMTA5IEBAIFRJRkZNZXJnZUZpZWxkSW5mbyhUSUZGKiB0aWYsIGNvbnN0IFRJRkZGaWVsZEluZm8gaW5mb1tdLCB1aW50MzIgbikKICAJcmV0dXJuIDA7CiAgfQogIApAQCAtMTg2LDExICsxODYsMTEgQEAKICAvKiB2aW06IHNldCB0cz04IHN0cz04IHN3PTggbm9ldDogKi8KICAKICAvKgotSW5kZXg6IHRpZmYtNC4wLjcvbGlidGlmZi90aWZfZGlycmVhZC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gdGlmZi00LjAuNy5vcmlnL2xpYnRpZmYvdGlmX2RpcnJlYWQuYwotKysrIHRpZmYtNC4wLjcvbGlidGlmZi90aWZfZGlycmVhZC5jCi1AQCAtMzU2Niw2ICszNTY2LDEwIEBAIFRJRkZSZWFkRGlyZWN0b3J5KFRJRkYqIHRpZikKK2RpZmYgLS1naXQgYS9saWJ0aWZmL3RpZl9kaXJyZWFkLmMgYi9saWJ0aWZmL3RpZl9kaXJyZWFkLmMKK2luZGV4IDFkNGYwYjkuLmYxZGMzZDcgMTAwNjQ0CistLS0gYS9saWJ0aWZmL3RpZl9kaXJyZWFkLmMKKysrKyBiL2xpYnRpZmYvdGlmX2RpcnJlYWQuYworQEAgLTM1ODAsNiArMzU4MCwxMCBAQCBUSUZGUmVhZERpcmVjdG9yeShUSUZGKiB0aWYpCiAgCQkJCQkJCWdvdG8gYmFkOwogIAkJCQkJCWRwLT50ZGlyX3RhZz1JR05PUkU7CiAgCQkJCQkJYnJlYWs7CkBAIC0yMDEsMyArMjAxLDYgQEAKICAJCQkJfQogIAkJCX0KICAJCX0KKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTctOTkzNi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL0NWRS0yMDE3LTk5MzYucGF0Y2gKaW5kZXggMjA0OTQ5Yi4uZmM5OTM2MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvQ1ZFLTIwMTctOTkzNi5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9DVkUtMjAxNy05OTM2LnBhdGNoCkBAIC0xOCwxMCArMTgsMTAgQEAKICBsaWJ0aWZmL3RpZl9qYmlnLmMgfCAxICsKICAyIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKQogCi1JbmRleDogdGlmZi00LjAuNy9DaGFuZ2VMb2cKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSB0aWZmLTQuMC43Lm9yaWcvQ2hhbmdlTG9nCi0rKysgdGlmZi00LjAuNy9DaGFuZ2VMb2cKK2RpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKK2luZGV4IDU3MzkyOTIuLjAyNDBmMGIgMTAwNjQ0CistLS0gYS9DaGFuZ2VMb2cKKysrKyBiL0NoYW5nZUxvZwogQEAgLTEsMyArMSw5IEBACiArMjAxNy0wNi0yNiAgRXZlbiBSb3VhdWx0IDxldmVuLnJvdWF1bHQgYXQgc3BhdGlhbHlzLmNvbT4KICsKQEAgLTMxLDEyICszMSwxMiBAQAogKwogIDIwMTctMDYtMDEgIEV2ZW4gUm91YXVsdCA8ZXZlbi5yb3VhdWx0IGF0IHNwYXRpYWx5cy5jb20+CiAgCi0gICAgICAgICogbGlidGlmZi90aWZfZGlyaW5mby5jLCB0aWZfZGlycmVhZC5jOiBhZGQgX1RJRkZDaGVja0ZpZWxkSXNWYWxpZEZvckNvZGVjKCksCi1JbmRleDogdGlmZi00LjAuNy9saWJ0aWZmL3RpZl9qYmlnLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSB0aWZmLTQuMC43Lm9yaWcvbGlidGlmZi90aWZfamJpZy5jCi0rKysgdGlmZi00LjAuNy9saWJ0aWZmL3RpZl9qYmlnLmMKLUBAIC05NCw2ICs5NCw3IEBAIHN0YXRpYyBpbnQgSkJJR0RlY29kZShUSUZGKiB0aWYsIHVpbnQ4KgorIAkqIGxpYnRpZmYvdGlmX2RpcmluZm8uYywgdGlmX2RpcnJlYWQuYzogYWRkIF9USUZGQ2hlY2tGaWVsZElzVmFsaWRGb3JDb2RlYygpLAorZGlmZiAtLWdpdCBhL2xpYnRpZmYvdGlmX2piaWcuYyBiL2xpYnRpZmYvdGlmX2piaWcuYworaW5kZXggNWY1Zjc1ZS4uYzc1ZjMxZCAxMDA2NDQKKy0tLSBhL2xpYnRpZmYvdGlmX2piaWcuYworKysrIGIvbGlidGlmZi90aWZfamJpZy5jCitAQCAtOTQsNiArOTQsNyBAQCBzdGF0aWMgaW50IEpCSUdEZWNvZGUoVElGRiogdGlmLCB1aW50OCogYnVmZmVyLCB0bXNpemVfdCBzaXplLCB1aW50MTYgcykKICAJCQkgICAgIGpiZ19zdHJlcnJvcihkZWNvZGVTdGF0dXMpCiAgI2VuZGlmCiAgCQkJICAgICApOwpAQCAtNDQsMyArNDQsNiBAQAogIAkJcmV0dXJuIDA7CiAgCX0KICAKKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvbGlidGlmZi1DVkUtMjAxNy01MjI1LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvbGlidGlmZi1DVkUtMjAxNy01MjI1LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjYzMzUzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL2xpYnRpZmYtQ1ZFLTIwMTctNTIyNS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLUZyb20gYTI0ZGYxZTkzODMzZGZlYWE2OWJmNGQ1MTA1MThkYzQ2ODRkYjY0ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IExpIFpob3UgPGxpLnpob3VAd2luZHJpdmVyLmNvbT4KLURhdGU6IFdlZCwgMjUgSmFuIDIwMTcgMTc6MDc6MjEgKzA4MDAKLVN1YmplY3Q6IFtQQVRDSF0gbGlidGlmZjogZml4IENWRS0yMDE3LTUyMjUKLQotdG9vbHMvdGlmZmNwLmM6IGVycm9yIG91dCBjbGVhbmx5IGluIGNwQ29udGlnMlNlcGFyYXRlQnlSb3cKLWFuZCBjcFNlcGFyYXRlMkNvbnRpZ0J5Um93IGlmIEJpdHNQZXJTYW1wbGUgIT0gOCB0byBhdm9pZCBoZWFwIGJhc2VkCi1vdmVyZmxvdy4gRml4ZXMgaHR0cDovL2J1Z3ppbGxhLm1hcHRvb2xzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY1NiBhbmQKLWh0dHA6Ly9idWd6aWxsYS5tYXB0b29scy5vcmcvc2hvd19idWcuY2dpP2lkPTI2NTcKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQ1ZFOiBDVkUtMjAxNy01MjI1Ci1TaWduZWQtb2ZmLWJ5OiBMaSBaaG91IDxsaS56aG91QHdpbmRyaXZlci5jb20+Ci0tLS0KLSBDaGFuZ2VMb2cgICAgICB8ICA3ICsrKysrKysKLSB0b29scy90aWZmY3AuYyB8IDI0ICsrKysrKysrKysrKysrKysrKysrKystLQotIDIgZmlsZXMgY2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwotaW5kZXggOWI5ZDM5Ny4uN2U4Mjc5NSAxMDA2NDQKLS0tLSBhL0NoYW5nZUxvZwotKysrIGIvQ2hhbmdlTG9nCi1AQCAtMSwzICsxLDEwIEBACi0rMjAxNy0wMS0xMSBFdmVuIFJvdWF1bHQgPGV2ZW4ucm91YXVsdCBhdCBzcGF0aWFseXMuY29tPgotKwotKwkqIHRvb2xzL3RpZmZjcC5jOiBlcnJvciBvdXQgY2xlYW5seSBpbiBjcENvbnRpZzJTZXBhcmF0ZUJ5Um93IGFuZAotKwljcFNlcGFyYXRlMkNvbnRpZ0J5Um93IGlmIEJpdHNQZXJTYW1wbGUgIT0gOCB0byBhdm9pZCBoZWFwIGJhc2VkIG92ZXJmbG93LgotKwlGaXhlcyBodHRwOi8vYnVnemlsbGEubWFwdG9vbHMub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjU2IGFuZAotKwlodHRwOi8vYnVnemlsbGEubWFwdG9vbHMub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjU3Ci0rCi0gMjAxNi0xMS0xOSAgQm9iIEZyaWVzZW5oYWhuICA8YmZyaWVzZW5Ac2ltcGxlLmRhbGxhcy50eC51cz4KLSAKLSAJKiBsaWJ0aWZmIDQuMC43IHJlbGVhc2VkLgotZGlmZiAtLWdpdCBhL3Rvb2xzL3RpZmZjcC5jIGIvdG9vbHMvdGlmZmNwLmMKLWluZGV4IDMzOGEzZDEuLjJlODQ1NzcgMTAwNjQ0Ci0tLS0gYS90b29scy90aWZmY3AuYwotKysrIGIvdG9vbHMvdGlmZmNwLmMKLUBAIC01OTIsNyArNTkyLDcgQEAgc3RhdGljCWNvcHlGdW5jIHBpY2tDb3B5RnVuYyhUSUZGKiwgVElGRiosIHVpbnQxNiwgdWludDE2KTsKLSBzdGF0aWMgaW50Ci0gdGlmZmNwKFRJRkYqIGluLCBUSUZGKiBvdXQpCi0gewotLQl1aW50MTYgYml0c3BlcnNhbXBsZSwgc2FtcGxlc3BlcnBpeGVsID0gMTsKLSsJdWludDE2IGJpdHNwZXJzYW1wbGUgPSAxLCBzYW1wbGVzcGVycGl4ZWwgPSAxOwotIAl1aW50MTYgaW5wdXRfY29tcHJlc3Npb24sIGlucHV0X3Bob3RvbWV0cmljID0gUEhPVE9NRVRSSUNfTUlOSVNCTEFDSzsKLSAJY29weUZ1bmMgY2Y7Ci0gCXVpbnQzMiB3aWR0aCwgbGVuZ3RoOwotQEAgLTEwNjgsNiArMTA2OCwxNiBAQCBERUNMQVJFY3BGdW5jKGNwQ29udGlnMlNlcGFyYXRlQnlSb3cpCi0gCXJlZ2lzdGVyIHVpbnQzMiBuOwotIAl1aW50MzIgcm93OwotIAl0c2FtcGxlX3QgczsKLSsgICAgICAgIHVpbnQxNiBicHMgPSAwOwotKwotKyAgICAgICAgKHZvaWQpIFRJRkZHZXRGaWVsZChpbiwgVElGRlRBR19CSVRTUEVSU0FNUExFLCAmYnBzKTsKLSsgICAgICAgIGlmKCBicHMgIT0gOCApCi0rICAgICAgICB7Ci0rICAgICAgICAgICAgVElGRkVycm9yKFRJRkZGaWxlTmFtZShpbiksCi0rICAgICAgICAgICAgICAgICAgICAgICJFcnJvciwgY2FuIG9ubHkgaGFuZGxlIEJpdHNQZXJTYW1wbGU9OCBpbiAlcyIsCi0rICAgICAgICAgICAgICAgICAgICAgICJjcENvbnRpZzJTZXBhcmF0ZUJ5Um93Iik7Ci0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICB9Ci0gCi0gCWluYnVmID0gX1RJRkZtYWxsb2Moc2NhbmxpbmVzaXplaW4pOwotIAlvdXRidWYgPSBfVElGRm1hbGxvYyhzY2FubGluZXNpemVvdXQpOwotQEAgLTExMjEsNiArMTEzMSwxNiBAQCBERUNMQVJFY3BGdW5jKGNwU2VwYXJhdGUyQ29udGlnQnlSb3cpCi0gCXJlZ2lzdGVyIHVpbnQzMiBuOwotIAl1aW50MzIgcm93OwotIAl0c2FtcGxlX3QgczsKLSsgICAgICAgIHVpbnQxNiBicHMgPSAwOwotKwotKyAgICAgICAgKHZvaWQpIFRJRkZHZXRGaWVsZChpbiwgVElGRlRBR19CSVRTUEVSU0FNUExFLCAmYnBzKTsKLSsgICAgICAgIGlmKCBicHMgIT0gOCApCi0rICAgICAgICB7Ci0rICAgICAgICAgICAgVElGRkVycm9yKFRJRkZGaWxlTmFtZShpbiksCi0rICAgICAgICAgICAgICAgICAgICAgICJFcnJvciwgY2FuIG9ubHkgaGFuZGxlIEJpdHNQZXJTYW1wbGU9OCBpbiAlcyIsCi0rICAgICAgICAgICAgICAgICAgICAgICJjcFNlcGFyYXRlMkNvbnRpZ0J5Um93Iik7Ci0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICB9Ci0gCi0gCWluYnVmID0gX1RJRkZtYWxsb2Moc2NhbmxpbmVzaXplaW4pOwotIAlvdXRidWYgPSBfVElGRm1hbGxvYyhzY2FubGluZXNpemVvdXQpOwotQEAgLTE3NjMsNyArMTc4Myw3IEBAIHBpY2tDb3B5RnVuYyhUSUZGKiBpbiwgVElGRiogb3V0LCB1aW50MTYgYml0c3BlcnNhbXBsZSwgdWludDE2IHNhbXBsZXNwZXJwaXhlbCkKLSAJdWludDMyIHcsIGwsIHR3LCB0bDsKLSAJaW50IGJ5Y2h1bms7Ci0gCi0tCSh2b2lkKSBUSUZGR2V0RmllbGQoaW4sIFRJRkZUQUdfUExBTkFSQ09ORklHLCAmc2hvcnR2KTsKLSsJKHZvaWQpIFRJRkZHZXRGaWVsZERlZmF1bHRlZChpbiwgVElGRlRBR19QTEFOQVJDT05GSUcsICZzaG9ydHYpOwotIAlpZiAoc2hvcnR2ICE9IGNvbmZpZyAmJiBiaXRzcGVyc2FtcGxlICE9IDggJiYgc2FtcGxlc3BlcnBpeGVsID4gMSkgewotIAkJZnByaW50ZihzdGRlcnIsCi0gCQkgICAgIiVzOiBDYW5ub3QgaGFuZGxlIGRpZmZlcmVudCBwbGFuYXIgY29uZmlndXJhdGlvbiB3LyBiaXRzL3NhbXBsZSAhPSA4XG4iLAotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi90aWZmXzQuMC43LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvdGlmZl80LjAuNy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY2ZTg1Mi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi90aWZmXzQuMC43LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotU1VNTUFSWSA9ICJQcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgVGFnIEltYWdlIEZpbGUgRm9ybWF0IChUSUZGKSIKLUxJQ0VOU0UgPSAiQlNELTItQ2xhdXNlIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWVJJR0hUO21kNT0zNGRhM2RiNDZmYWI3NTAxOTkyZjk2MTVkN2UxNThjZiIKLQotQ1ZFX1BST0RVQ1QgPSAibGlidGlmZiIKLQotU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQub3NnZW8ub3JnL2xpYnRpZmYvdGlmZi0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vbGlidG9vbDIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vbGlidGlmZi1DVkUtMjAxNy01MjI1LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTkxNDcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctOTkzNi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNy0xMDY4OC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNy0xMTMzNS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi0xMDI3MS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi0xMDA5My5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi0xMDI2OC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi0xMDI2Ni5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi0xMDI2Ny5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi0xMDI2OS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNi0xMDI3MC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNy03NTkyLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTc1OTQtcDEucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctNzU5NC1wMi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNy03NTk1LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTc1OTYucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctNzU5OC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNy03NjAxLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTc2MDIucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctNzU5My5wYXRjaCBcCi0gICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gIjc3YWU5MjhkMmM2YjdmYjQ2YTIxYzNhMjkzMjUxNTdiIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlmNDNhMmNmYjk1ODllNWNlY2FhNjZlMTZiZjg3ZjgxNGM5NDVmMjJkZjdiYTYwMGQ2M2FhYzQ2MzJjNGYwMTkiCi0KLSMgZXhjbHVkZSBiZXRhcwotVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAidGlmZi0oP1A8cHZlcj5cZCsoXC5cZCspKykudGFyIgotCi1pbmhlcml0IGF1dG90b29scwotCi1DQUNIRURfQ09ORklHVVJFVkFSUyA9ICJheF9jdl9jaGVja19nbF9saWJnbD1ubyIKLQotUEFDS0FHRUNPTkZJRyA/PSAiY3h4IGpwZWcgemxpYiBsem1hIFwKLSAgICAgICAgICAgICAgICAgIHN0cmlwLWNob3BwaW5nIGV4dHJhc2FtcGxlLWFzLWFscGhhIGNoZWNrLXljYmNyLXN1YnNhbXBsaW5nIgotCi1QQUNLQUdFQ09ORklHW2N4eF0gPSAiLS1lbmFibGUtY3h4LC0tZGlzYWJsZS1jeHgsLCIKLVBBQ0tBR0VDT05GSUdbanBlZ10gPSAiLS1lbmFibGUtanBlZywtLWRpc2FibGUtanBlZyxqcGVnLCIKLVBBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS1lbmFibGUtemxpYiwtLWRpc2FibGUtemxpYix6bGliLCIKLVBBQ0tBR0VDT05GSUdbbHptYV0gPSAiLS1lbmFibGUtbHptYSwtLWRpc2FibGUtbHptYSx4eiwiCi0KLSMgQ29udmVydCBzaW5nbGUtc3RyaXAgdW5jb21wcmVzc2VkIGltYWdlcyB0byBtdWx0aXBsZSBzdHJpcHMgb2Ygc3BlY2lmaWVkCi0jIHNpemUgKGRlZmF1bHQ6IDgxOTIpIHRvIHJlZHVjZSBtZW1vcnkgdXNhZ2UKLVBBQ0tBR0VDT05GSUdbc3RyaXAtY2hvcHBpbmddID0gIi0tZW5hYmxlLXN0cmlwLWNob3BwaW5nLC0tZGlzYWJsZS1zdHJpcC1jaG9wcGluZywsIgotCi0jIFRyZWF0IGEgZm91cnRoIHNhbXBsZSB3aXRoIG5vIEVYVFJBU0FNUExFXyB2YWx1ZSBhcyBiZWluZyBBU1NPQ0FMUEhBCi1QQUNLQUdFQ09ORklHW2V4dHJhc2FtcGxlLWFzLWFscGhhXSA9ICItLWVuYWJsZS1leHRyYXNhbXBsZS1hcy1hbHBoYSwtLWRpc2FibGUtZXh0cmFzYW1wbGUtYXMtYWxwaGEsLCIKLQotIyBDb250cm9sIHBpY2tpbmcgdXAgWUNiQ3Igc3Vic2FtcGxlIGluZm8uIERpc2FibGUgdG8gc3VwcG9ydCBmaWxlcyBsYWNraW5nCi0jIHRoZSB0YWcKLVBBQ0tBR0VDT05GSUdbY2hlY2steWNiY3Itc3Vic2FtcGxpbmddID0gIi0tZW5hYmxlLWNoZWNrLXljYmNyLXN1YnNhbXBsaW5nLC0tZGlzYWJsZS1jaGVjay15Y2Jjci1zdWJzYW1wbGluZywsIgotCi0jIFN1cHBvcnQgYSBtZWNoYW5pc20gYWxsb3dpbmcgcmVhZGluZyBsYXJnZSBzdHJpcHMgKHVzdWFsbHkgb25lIHN0cmlwIGZpbGVzKQotIyBpbiBjaHVua3Mgd2hlbiB1c2luZyBUSUZGUmVhZFNjYW5saW5lLiBFeHBlcmltZW50YWwgNC4wKyBmZWF0dXJlCi1QQUNLQUdFQ09ORklHW2NodW5reS1zdHJpcC1yZWFkXSA9ICItLWVuYWJsZS1jaHVua3ktc3RyaXAtcmVhZCwtLWRpc2FibGUtY2h1bmt5LXN0cmlwLXJlYWQsLCIKLQotUEFDS0FHRVMgPSsgInRpZmZ4eCB0aWZmLXV0aWxzIgotRklMRVNfdGlmZnh4ID0gIiR7bGliZGlyfS9saWJ0aWZmeHguc28uKiIKLUZJTEVTX3RpZmYtdXRpbHMgPSAiJHtiaW5kaXJ9LyoiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvdGlmZl80LjAuOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL3RpZmZfNC4wLjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I5MWJhYQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL3RpZmZfNC4wLjguYmIKQEAgLTAsMCArMSw1NCBAQAorU1VNTUFSWSA9ICJQcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgVGFnIEltYWdlIEZpbGUgRm9ybWF0IChUSUZGKSIKK0xJQ0VOU0UgPSAiQlNELTItQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWVJJR0hUO21kNT0zNGRhM2RiNDZmYWI3NTAxOTkyZjk2MTVkN2UxNThjZiIKKworQ1ZFX1BST0RVQ1QgPSAibGlidGlmZiIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQub3NnZW8ub3JnL2xpYnRpZmYvdGlmZi0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbGlidG9vbDIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctOTE0Ny5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNy05OTM2LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTEwNjg4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTExMzM1LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTEzNzI2LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTEzNzI3LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyYTdkMWMxMzE4NDE2ZGRmMzZkNWY2ZmE0NjAwMDY5YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1OWQ3YTVhOGNjZDkyMDU5OTEzZjI0Njg3N2RiOTVhMjkxOGU2YzA0ZmI5ZDQzZmQ3NGU1YzMzOTBkYWMyOTEwIgorCisjIGV4Y2x1ZGUgYmV0YXMKK1VQU1RSRUFNX0NIRUNLX1JFR0VYID0gInRpZmYtKD9QPHB2ZXI+XGQrKFwuXGQrKSspLnRhciIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgPSAiYXhfY3ZfY2hlY2tfZ2xfbGliZ2w9bm8iCisKK1BBQ0tBR0VDT05GSUcgPz0gImN4eCBqcGVnIHpsaWIgbHptYSBcCisgICAgICAgICAgICAgICAgICBzdHJpcC1jaG9wcGluZyBleHRyYXNhbXBsZS1hcy1hbHBoYSBjaGVjay15Y2Jjci1zdWJzYW1wbGluZyIKKworUEFDS0FHRUNPTkZJR1tjeHhdID0gIi0tZW5hYmxlLWN4eCwtLWRpc2FibGUtY3h4LCwiCitQQUNLQUdFQ09ORklHW2pwZWddID0gIi0tZW5hYmxlLWpwZWcsLS1kaXNhYmxlLWpwZWcsanBlZywiCitQQUNLQUdFQ09ORklHW3psaWJdID0gIi0tZW5hYmxlLXpsaWIsLS1kaXNhYmxlLXpsaWIsemxpYiwiCitQQUNLQUdFQ09ORklHW2x6bWFdID0gIi0tZW5hYmxlLWx6bWEsLS1kaXNhYmxlLWx6bWEseHosIgorCisjIENvbnZlcnQgc2luZ2xlLXN0cmlwIHVuY29tcHJlc3NlZCBpbWFnZXMgdG8gbXVsdGlwbGUgc3RyaXBzIG9mIHNwZWNpZmllZAorIyBzaXplIChkZWZhdWx0OiA4MTkyKSB0byByZWR1Y2UgbWVtb3J5IHVzYWdlCitQQUNLQUdFQ09ORklHW3N0cmlwLWNob3BwaW5nXSA9ICItLWVuYWJsZS1zdHJpcC1jaG9wcGluZywtLWRpc2FibGUtc3RyaXAtY2hvcHBpbmcsLCIKKworIyBUcmVhdCBhIGZvdXJ0aCBzYW1wbGUgd2l0aCBubyBFWFRSQVNBTVBMRV8gdmFsdWUgYXMgYmVpbmcgQVNTT0NBTFBIQQorUEFDS0FHRUNPTkZJR1tleHRyYXNhbXBsZS1hcy1hbHBoYV0gPSAiLS1lbmFibGUtZXh0cmFzYW1wbGUtYXMtYWxwaGEsLS1kaXNhYmxlLWV4dHJhc2FtcGxlLWFzLWFscGhhLCwiCisKKyMgQ29udHJvbCBwaWNraW5nIHVwIFlDYkNyIHN1YnNhbXBsZSBpbmZvLiBEaXNhYmxlIHRvIHN1cHBvcnQgZmlsZXMgbGFja2luZworIyB0aGUgdGFnCitQQUNLQUdFQ09ORklHW2NoZWNrLXljYmNyLXN1YnNhbXBsaW5nXSA9ICItLWVuYWJsZS1jaGVjay15Y2Jjci1zdWJzYW1wbGluZywtLWRpc2FibGUtY2hlY2steWNiY3Itc3Vic2FtcGxpbmcsLCIKKworIyBTdXBwb3J0IGEgbWVjaGFuaXNtIGFsbG93aW5nIHJlYWRpbmcgbGFyZ2Ugc3RyaXBzICh1c3VhbGx5IG9uZSBzdHJpcCBmaWxlcykKKyMgaW4gY2h1bmtzIHdoZW4gdXNpbmcgVElGRlJlYWRTY2FubGluZS4gRXhwZXJpbWVudGFsIDQuMCsgZmVhdHVyZQorUEFDS0FHRUNPTkZJR1tjaHVua3ktc3RyaXAtcmVhZF0gPSAiLS1lbmFibGUtY2h1bmt5LXN0cmlwLXJlYWQsLS1kaXNhYmxlLWNodW5reS1zdHJpcC1yZWFkLCwiCisKK1BBQ0tBR0VTID0rICJ0aWZmeHggdGlmZi11dGlscyIKK0ZJTEVTX3RpZmZ4eCA9ICIke2xpYmRpcn0vbGlidGlmZnh4LnNvLioiCitGSUxFU190aWZmLXV0aWxzID0gIiR7YmluZGlyfS8qIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9tcGVnMmRlYy9maWxlcy8wMDAxLWNoZWNrLWZvci1hdmFpbGFibGUtYXJtLW9wdGltaXphdGlvbnMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbXBlZzJkZWMvZmlsZXMvMDAwMS1jaGVjay1mb3ItYXZhaWxhYmxlLWFybS1vcHRpbWl6YXRpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZjY4YjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbXBlZzJkZWMvZmlsZXMvMDAwMS1jaGVjay1mb3ItYXZhaWxhYmxlLWFybS1vcHRpbWl6YXRpb25zLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK0Zyb20gY2JjZmY1OGVkNjcwYzhlZGMwYmUxMDA0Mzg0Y2JlMGZkMDdkOGQyNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDUgSnVsIDIwMTcgMTg6NDk6MjEgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIGNoZWNrIGZvciBhdmFpbGFibGUgYXJtIG9wdGltaXphdGlvbnMKKworVGFrZW4gRnJvbQoraHR0cDovL3NvdXJjZXMuZGViaWFuLm5ldC9zcmMvbXBlZzJkZWMvMC41LjEtNy9kZWJpYW4vcGF0Y2hlcy82NV9hcm0tdGVzdC13aXRoLWNvbXBpbGVyLnBhdGNoLworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDEyICsrKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGFjZGNiMWUuLjJjMGE3MjEgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTU5LDcgKzU5LDcgQEAgZWxpZiB0ZXN0IHgiJEdDQyIgPSB4InllcyI7IHRoZW4KKyAgICAgQUNfVFJZX0NGTEFHUyhbJFRSWV9DRkxBR1MgJENGTEFHU10sW09QVF9DRkxBR1M9IiRUUllfQ0ZMQUdTIl0pCisgCisgICAgIGRubCBhcmNoLXNwZWNpZmljIGZsYWdzCistICAgIGFybV9jb25kaXRpb25hbD1mYWxzZQorKyAgICBidWlsZF9hcm1fb3B0PWZhbHNlCisgICAgIGNhc2UgIiRob3N0IiBpbgorICAgICBpPzg2LSogfCBrPy0qIHwgeDg2XzY0LSogfCBhbWQ2NC0qKQorIAlBQ19ERUZJTkUoW0FSQ0hfWDg2XSwsW3g4NiBhcmNoaXRlY3R1cmVdKQorQEAgLTEwMiw4ICsxMDIsMTIgQEAgZWxpZiB0ZXN0IHgiJEdDQyIgPSB4InllcyI7IHRoZW4KKyAgICAgYWxwaGEqKQorIAlBQ19ERUZJTkUoW0FSQ0hfQUxQSEFdLCxbYWxwaGEgYXJjaGl0ZWN0dXJlXSk7OworICAgICBhcm0qKQorLQlhcm1fY29uZGl0aW9uYWw9OgorLQlBQ19ERUZJTkUoW0FSQ0hfQVJNXSwsW0FSTSBhcmNoaXRlY3R1cmVdKTs7CisrCUFDX0xBTkcoQykKKysJQUNfQ09NUElMRV9JRkVMU0UoCisrCQlbQUNfTEFOR19TT1VSQ0UoW1sKKysJCQl2b2lkIGZvbyh2b2lkKSB7IF9fYXNtX18gdm9sYXRpbGUoInBsZCBbcjFdIik7IH1dXSldLAorKwkJYnVpbGRfYXJtX29wdD10cnVlOyBBQ19ERUZJTkUoW0FSQ0hfQVJNXSwsW0FSTSBhcmNoaXRlY3R1cmVdKSwKKysJCWJ1aWxkX2FybV9vcHQ9ZmFsc2UpOzsKKyAgICAgZXNhYworIGVsaWYgdGVzdCB4IiRDQyIgPSB4InRlbmRyYWNjIjsgdGhlbgorICAgICBkbmwgVGVuRFJBIHBvcnRhYmlsaXR5IGNoZWNraW5nIGNvbXBpbGVyCitAQCAtMTIzLDcgKzEyNyw3IEBAIGVsc2UKKyAgICAgZXNhYworIGZpCisgCistQU1fQ09ORElUSU9OQUwoQVJDSF9BUk0sICR7YXJtX2NvbmRpdGlvbmFsfSkKKytBTV9DT05ESVRJT05BTChBUkNIX0FSTSwgdGVzdCB4JGJ1aWxkX2FybV9vcHQgPSB4dHJ1ZSkKKyAKKyBkbmwgQ2hlY2tzIGZvciBsaWJ0b29sIC0gdGhpcyBtdXN0IGJlIGRvbmUgYWZ0ZXIgd2Ugc2V0IGNmbGFncworIEFDX0xJQlRPT0xfV0lOMzJfRExMCistLSAKKzIuMTMuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbXBlZzJkZWMvZmlsZXMvMDAwMi1TZXQtdmlzaWJpbGl0eS1vZi1nbG9iYWwtc3ltYm9scy11c2VkLWluLUFSTS1zcGVjaWZpLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL21wZWcyZGVjL2ZpbGVzLzAwMDItU2V0LXZpc2liaWxpdHktb2YtZ2xvYmFsLXN5bWJvbHMtdXNlZC1pbi1BUk0tc3BlY2lmaS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzAxNjkyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL21wZWcyZGVjL2ZpbGVzLzAwMDItU2V0LXZpc2liaWxpdHktb2YtZ2xvYmFsLXN5bWJvbHMtdXNlZC1pbi1BUk0tc3BlY2lmaS5wYXRjaApAQCAtMCwwICsxLDYzIEBACitGcm9tIGY5ZDlkYzkyZDc1Zjg5MTBlM2NkNWZkY2JlYTcyZTUwNWNkZjM0OTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCA1IEp1bCAyMDE3IDE5OjAzOjM2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBTZXQgdmlzaWJpbGl0eSBvZiBnbG9iYWwgc3ltYm9scyB1c2VkIGluIEFSTSBzcGVjaWZpYworIGFzc2VtYmx5IGZpbGUgdG8gaW50ZXJuYWwKKworVGFrZW4gZnJvbQoraHR0cDovL3NvdXJjZXMuZGViaWFuLm5ldC9zcmMvbXBlZzJkZWMvMC41LjEtNy9kZWJpYW4vcGF0Y2hlcy82MF9hcm0tcHJpdmF0ZS1zeW1ib2xzLnBhdGNoLworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYm1wZWcyL21vdGlvbl9jb21wX2FybV9zLlMgfCAxMiArKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlibXBlZzIvbW90aW9uX2NvbXBfYXJtX3MuUyBiL2xpYm1wZWcyL21vdGlvbl9jb21wX2FybV9zLlMKK2luZGV4IGY2YzNkN2QuLmM5MjFmN2MgMTAwNjQ0CistLS0gYS9saWJtcGVnMi9tb3Rpb25fY29tcF9hcm1fcy5TCisrKysgYi9saWJtcGVnMi9tb3Rpb25fY29tcF9hcm1fcy5TCitAQCAtMjMsNyArMjMsOCBAQAorIAorIEAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAkuYWxpZ24KKy0JLmdsb2JhbCBNQ19wdXRfb18xNl9hcm0KKysJLmdsb2JhbCAgIE1DX3B1dF9vXzE2X2FybQorKwkuaW50ZXJuYWwgTUNfcHV0X29fMTZfYXJtCisgTUNfcHV0X29fMTZfYXJtOgorIAlAQCB2b2lkIGZ1bmModWludDhfdCAqIGRlc3QsIGNvbnN0IHVpbnQ4X3QgKiByZWYsIGludCBzdHJpZGUsIGludCBoZWlnaHQpCisgCXBsZCBbcjFdCitAQCAtODMsNyArODQsOCBAQCBNQ19wdXRfb18xNl9hcm1fYWxpZ25fanQ6CisgCisgQCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCS5hbGlnbgorLQkuZ2xvYmFsIE1DX3B1dF9vXzhfYXJtCisrCS5nbG9iYWwgICBNQ19wdXRfb184X2FybQorKwkuaW50ZXJuYWwgTUNfcHV0X29fOF9hcm0KKyBNQ19wdXRfb184X2FybToKKyAJQEAgdm9pZCBmdW5jKHVpbnQ4X3QgKiBkZXN0LCBjb25zdCB1aW50OF90ICogcmVmLCBpbnQgc3RyaWRlLCBpbnQgaGVpZ2h0KQorIAlwbGQgW3IxXQorQEAgLTE1Miw3ICsxNTQsOCBAQCBNQ19wdXRfb184X2FybV9hbGlnbl9qdDoKKyAuZW5kbQorIAorIAkuYWxpZ24KKy0JLmdsb2JhbCBNQ19wdXRfeF8xNl9hcm0KKysJLmdsb2JhbCAgIE1DX3B1dF94XzE2X2FybQorKwkuaW50ZXJuYWwgTUNfcHV0X3hfMTZfYXJtCisgTUNfcHV0X3hfMTZfYXJtOgorIAlAQCB2b2lkIGZ1bmModWludDhfdCAqIGRlc3QsIGNvbnN0IHVpbnQ4X3QgKiByZWYsIGludCBzdHJpZGUsIGludCBoZWlnaHQpCisgCXBsZCBbcjFdCitAQCAtMjQ0LDcgKzI0Nyw4IEBAIE1DX3B1dF94XzE2X2FybV9hbGlnbl9qdDoKKyAKKyBAIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAJLmFsaWduCistCS5nbG9iYWwgTUNfcHV0X3hfOF9hcm0KKysJLmdsb2JhbCAgIE1DX3B1dF94XzhfYXJtCisrCS5pbnRlcm5hbCBNQ19wdXRfeF84X2FybQorIE1DX3B1dF94XzhfYXJtOgorIAlAQCB2b2lkIGZ1bmModWludDhfdCAqIGRlc3QsIGNvbnN0IHVpbnQ4X3QgKiByZWYsIGludCBzdHJpZGUsIGludCBoZWlnaHQpCisgCXBsZCBbcjFdCistLSAKKzIuMTMuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbXBlZzJkZWMvZmlsZXMvYWx0aXZlY19oX25lZWRlZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9tcGVnMmRlYy9maWxlcy9hbHRpdmVjX2hfbmVlZGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMTNhZDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbXBlZzJkZWMvZmlsZXMvYWx0aXZlY19oX25lZWRlZC5wYXRjaApAQCAtMCwwICsxLDQzIEBACitBZGQgbmV3IG1ldGhvZCB0byBqdWRnZSB3aGV0aGVyIDxhbHRpdmVjLmg+IGlzIG5lZWRlZAorCitUaGUgb3JpZ2luYWwgbG9naWMgd2lsbCB1c2UgInR5cGVkZWYgdmVjdG9yIGludCB0OyIgdG8ganVkZ2UKK3doZXRoZXIgPGFsdGl2ZWMuaD4gaXMgbmVlZGVkLiBhbHRpdmVjLmggY29udGFpbnMgdGhlIGZvbGxvd2luZworc3RhdGVtZW50OgorCisgI2lmICFkZWZpbmVkKF9fQVBQTEVfQUxUSVZFQ19fKQorICNkZWZpbmUgdmVjdG9yIF9fdmVjdG9yCisgI2RlZmluZSBwaXhlbCBfX3BpeGVsCisgI2RlZmluZSBib29sIAorICNlbmRpZgorCitJbiBnY2MtNC4zLjMsIF9fQVBQTEVfQUxUSVZFQ19fIGlzIG5vdCBkZWZpbmVkIGJ5IGNvbXBpbGVyLCBuZWl0aGVyCithcyB2ZWN0b3IsIHBpeGVsLCBhbmQgYm9vbC4gSW4gb3JkZXIgdG8gbWFrZSAidHlwZWRlZiB2ZWN0b3IgaW50IHQ7IgorcGFzcyB0aGUgY29tcGlsYXRpb24sIHdlIG5lZWQgdG8gaW5jbHVkZSBhbHRpdmVjLmguCisKK0hvd2V2ZXIgaW4gZ2NjLTQuNS4wLCBfX0FQUExFX0FMVElWRUNfXyBpcyBkZWZpbmVkIGJ5IGNvbXBpbGVyLAorc28gYXMgdmVjdG9yLCBwaXhlbCwgYW5kIGJvb2wuIFdlIGNvdWxkIG5vdCBqdWRnZSB3aGV0aGVyCithbHRpdmVjLmggaXMgbmVlZGVkIGJ5ICJ0eXBlZGVmIHZlY3RvciBpbnQgdDsiLgorSGVyZSB3ZSBpbmNsdWRlIGFub3RoZXIgc3RhdGVtZW50ICJpbnQgdG1wID0gX19DUjZfRVE7IiwgaW4KK3doaWNoIF9fQ1I2X0VRIGlzIGRlZmluZWQgaW4gYWx0aXZlYy5oLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKworZGlmZiAtcnVOIGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCistLS0gYS9jb25maWd1cmUuYWMJMjAxMC0wOS0xNCAyMDo1NTo0Mi4zOTk2ODc2NjMgKzA4MDAKKysrKyBiL2NvbmZpZ3VyZS5hYwkyMDEwLTA5LTE0IDIwOjU2OjQzLjQwMzIwNDY0OCArMDgwMAorQEAgLTc5LDExICs3OSwxMSBAQAorIAkJIENGTEFHUz0iJE9QVF9DRkxBR1MgJFRSWV9DRkxBR1MgJENGTEFHUyIKKyAJCSBBQ19NU0dfQ0hFQ0tJTkcoW2lmIDxhbHRpdmVjLmg+IGlzIG5lZWRlZF0pCisgCQkgQUNfVFJZX0NPTVBJTEUoW10sCistCQkgICAgW3R5cGVkZWYgdmVjdG9yIGludCB0OworKwkJICAgIFt0eXBlZGVmIHZlY3RvciBpbnQgdDsgaW50IHRtcCA9IF9fQ1I2X0VROworIAkJICAgICB2ZWNfbGQoMCwgKHVuc2lnbmVkIGNoYXIgKikwKTtdLAorIAkJICAgIFtoYXZlX2FsdGl2ZWM9eWVzOyBBQ19NU0dfUkVTVUxUKG5vKV0sCisgCQkgICAgW0FDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8YWx0aXZlYy5oPl0sCistCQkJW3R5cGVkZWYgdmVjdG9yIGludCB0OyB2ZWNfbGQoMCwgKHVuc2lnbmVkIGNoYXIgKikwKTtdLAorKwkJCVt0eXBlZGVmIHZlY3RvciBpbnQgdDsgaW50IHRtcCA9IF9fQ1I2X0VROyB2ZWNfbGQoMCwgKHVuc2lnbmVkIGNoYXIgKikwKTtdLAorIAkJCVtBQ19ERUZJTkUoW0hBVkVfQUxUSVZFQ19IXSwsCisgCQkJICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFsdGl2ZWMuaD4gaGVhZGVyLl0pCisgCQkJIGhhdmVfYWx0aXZlYz15ZXM7IEFDX01TR19SRVNVTFQoeWVzKV0sCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbXBlZzJkZWMvbXBlZzJkZWMtMC40LjEvYWx0aXZlY19oX25lZWRlZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9tcGVnMmRlYy9tcGVnMmRlYy0wLjQuMS9hbHRpdmVjX2hfbmVlZGVkLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGM1NjQzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9tcGVnMmRlYy9tcGVnMmRlYy0wLjQuMS9hbHRpdmVjX2hfbmVlZGVkLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotQWRkIG5ldyBtZXRob2QgdG8ganVkZ2Ugd2hldGhlciA8YWx0aXZlYy5oPiBpcyBuZWVkZWQKLQotVGhlIG9yaWdpbmFsIGxvZ2ljIHdpbGwgdXNlICJ0eXBlZGVmIHZlY3RvciBpbnQgdDsiIHRvIGp1ZGdlCi13aGV0aGVyIDxhbHRpdmVjLmg+IGlzIG5lZWRlZC4gYWx0aXZlYy5oIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcKLXN0YXRlbWVudDoKLQotICNpZiAhZGVmaW5lZChfX0FQUExFX0FMVElWRUNfXykKLSAjZGVmaW5lIHZlY3RvciBfX3ZlY3RvcgotICNkZWZpbmUgcGl4ZWwgX19waXhlbAotICNkZWZpbmUgYm9vbCAKLSAjZW5kaWYKLQotSW4gZ2NjLTQuMy4zLCBfX0FQUExFX0FMVElWRUNfXyBpcyBub3QgZGVmaW5lZCBieSBjb21waWxlciwgbmVpdGhlcgotYXMgdmVjdG9yLCBwaXhlbCwgYW5kIGJvb2wuIEluIG9yZGVyIHRvIG1ha2UgInR5cGVkZWYgdmVjdG9yIGludCB0OyIKLXBhc3MgdGhlIGNvbXBpbGF0aW9uLCB3ZSBuZWVkIHRvIGluY2x1ZGUgYWx0aXZlYy5oLgotCi1Ib3dldmVyIGluIGdjYy00LjUuMCwgX19BUFBMRV9BTFRJVkVDX18gaXMgZGVmaW5lZCBieSBjb21waWxlciwKLXNvIGFzIHZlY3RvciwgcGl4ZWwsIGFuZCBib29sLiBXZSBjb3VsZCBub3QganVkZ2Ugd2hldGhlcgotYWx0aXZlYy5oIGlzIG5lZWRlZCBieSAidHlwZWRlZiB2ZWN0b3IgaW50IHQ7Ii4KLUhlcmUgd2UgaW5jbHVkZSBhbm90aGVyIHN0YXRlbWVudCAiaW50IHRtcCA9IF9fQ1I2X0VROyIsIGluCi13aGljaCBfX0NSNl9FUSBpcyBkZWZpbmVkIGluIGFsdGl2ZWMuaC4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+Ci0KLWRpZmYgLXJ1TiBtcGVnMmRlYy0wLjQuMS1vcmlnL2NvbmZpZ3VyZS5pbiBtcGVnMmRlYy0wLjQuMS9jb25maWd1cmUuaW4KLS0tLSBtcGVnMmRlYy0wLjQuMS1vcmlnL2NvbmZpZ3VyZS5pbgkyMDEwLTA5LTE0IDIwOjU1OjQyLjM5OTY4NzY2MyArMDgwMAotKysrIG1wZWcyZGVjLTAuNC4xL2NvbmZpZ3VyZS5pbgkyMDEwLTA5LTE0IDIwOjU2OjQzLjQwMzIwNDY0OCArMDgwMAotQEAgLTc1LDExICs3NSwxMSBAQAotIAkJIENGTEFHUz0iJE9QVF9DRkxBR1MgJFRSWV9DRkxBR1MgJENGTEFHUyIKLSAJCSBBQ19NU0dfQ0hFQ0tJTkcoW2lmIDxhbHRpdmVjLmg+IGlzIG5lZWRlZF0pCi0gCQkgQUNfVFJZX0NPTVBJTEUoW10sCi0tCQkgICAgW3R5cGVkZWYgdmVjdG9yIGludCB0OwotKwkJICAgIFt0eXBlZGVmIHZlY3RvciBpbnQgdDsgaW50IHRtcCA9IF9fQ1I2X0VROwotIAkJICAgICB2ZWNfbGQoMCwgKHVuc2lnbmVkIGNoYXIgKikwKTtdLAotIAkJICAgIFtoYXZlX2FsdGl2ZWM9eWVzOyBBQ19NU0dfUkVTVUxUKG5vKV0sCi0gCQkgICAgW0FDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8YWx0aXZlYy5oPl0sCi0tCQkJW3R5cGVkZWYgdmVjdG9yIGludCB0OyB2ZWNfbGQoMCwgKHVuc2lnbmVkIGNoYXIgKikwKTtdLAotKwkJCVt0eXBlZGVmIHZlY3RvciBpbnQgdDsgaW50IHRtcCA9IF9fQ1I2X0VROyB2ZWNfbGQoMCwgKHVuc2lnbmVkIGNoYXIgKikwKTtdLAotIAkJCVtBQ19ERUZJTkUoW0hBVkVfQUxUSVZFQ19IXSwsCi0gCQkJICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFsdGl2ZWMuaD4gaGVhZGVyLl0pCi0gCQkJIGhhdmVfYWx0aXZlYz15ZXM7IEFDX01TR19SRVNVTFQoeWVzKV0sCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbXBlZzJkZWMvbXBlZzJkZWNfMC40LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbXBlZzJkZWMvbXBlZzJkZWNfMC40LjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNzY1ZGEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL21wZWcyZGVjL21wZWcyZGVjXzAuNC4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotU1VNTUFSWSA9ICJMaWJyYXJ5IGFuZCB0ZXN0IHByb2dyYW0gZm9yIGRlY29kaW5nIE1QRUctMiBhbmQgTVBFRy0xIHZpZGVvIHN0cmVhbXMiCi1IT01FUEFHRSA9ICJodHRwOi8vbGlibXBlZzIuc291cmNlZm9yZ2UubmV0LyIKLVNFQ1RJT04gPSAibGlicyIKLUxJQ0VOU0UgPSAiR1BMdjIrIgotTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9tcGVnMi5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjI7bWQ1PWVhZDYyNjAyZDQ2MzgzMjlkM2I1Yjg2YTU1ODAzMTU0IgotCi1QUiA9ICJyMiIKLQotU1JDX1VSSSA9ICJodHRwOi8vbGlibXBlZzIuc291cmNlZm9yZ2UubmV0L2ZpbGVzL21wZWcyZGVjLSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9hbHRpdmVjX2hfbmVlZGVkLnBhdGNoIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNzYzMWIwYTRiY2ZkZDBkNzhjMGJiMDA4MzA4MGIwZGMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzc0YTc2MDY4ZjhlYzM2ZDRiYjU5YTAzYmYxMTU3YmU0NDExOGNhMDIyNTIxODBlOGIzNThiMGI1ZTNlZGVlZSIKLQotVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly9saWJtcGVnMi5zb3VyY2Vmb3JnZS5uZXQvZG93bmxvYWRzLmh0bWwiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwotCi1FWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2hhcmVkIC0tZGlzYWJsZS1zZGwiCi0KLVBBQ0tBR0VDT05GSUcgPz0gIiR7QGJiLnV0aWxzLmZpbHRlcignRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsIGQpfSIKLVBBQ0tBR0VDT05GSUdbeDExXSA9ICItLXdpdGgteCwtLXdpdGhvdXQteCx2aXJ0dWFsL2xpYngxMSBsaWJ4ZXh0IGxpYnh2IgotCi1QQUNLQUdFUyA9ICJtcGVnMmRlYy1kYmcgbXBlZzJkZWMgbXBlZzJkZWMtZG9jIGxpYm1wZWcyIGxpYm1wZWcyLWRldiBsaWJtcGVnMmNvbnZlcnQgbGlibXBlZzJjb252ZXJ0LWRldiBsaWJtcGVnMi1zdGF0aWNkZXYgbGlibXBlZzJjb252ZXJ0LXN0YXRpY2RldiIKLQotRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyoiCi1GSUxFU19saWJtcGVnMiA9ICIke2xpYmRpcn0vbGlibXBlZzIuc28uKiIKLUZJTEVTX2xpYm1wZWcyY29udmVydCA9ICIke2xpYmRpcn0vbGlibXBlZzJjb252ZXJ0LnNvLioiCi1GSUxFU19saWJtcGVnMi1kZXYgPSAiJHtsaWJkaXJ9L2xpYm1wZWcyLnNvIFwKLSAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlibXBlZzIubGEgXAotICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wa2djb25maWcvbGlibXBlZzIucGMgXAotICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vbXBlZzJkZWMvbXBlZzIuaCIKLUZJTEVTX2xpYm1wZWcyLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGlibXBlZzIuYSIKLUZJTEVTX2xpYm1wZWcyY29udmVydC1kZXYgPSAiJHtsaWJkaXJ9L2xpYm1wZWcyY29udmVydC5zbyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJtcGVnMmNvbnZlcnQubGEgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGtnY29uZmlnL2xpYm1wZWcyY29udmVydC5wYyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vbXBlZzJkZWMvbXBlZzJjb252ZXJ0LmgiCi1GSUxFU19saWJtcGVnMmNvbnZlcnQtc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWJtcGVnMmNvbnZlcnQuYSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9tcGVnMmRlYy9tcGVnMmRlY18wLjUuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9tcGVnMmRlYy9tcGVnMmRlY18wLjUuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzExYzJkCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL21wZWcyZGVjL21wZWcyZGVjXzAuNS4xLmJiCkBAIC0wLDAgKzEsNDUgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBhbmQgdGVzdCBwcm9ncmFtIGZvciBkZWNvZGluZyBNUEVHLTIgYW5kIE1QRUctMSB2aWRlbyBzdHJlYW1zIgorSE9NRVBBR0UgPSAiaHR0cDovL2xpYm1wZWcyLnNvdXJjZWZvcmdlLm5ldC8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvbXBlZzIuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTIyO21kNT03NzY2ZjRmY2I1OGYwZjg0MTNjNDlhNzQ2ZjJhYjg5YiIKKworU1JDX1VSSSA9ICJodHRwOi8vbGlibXBlZzIuc291cmNlZm9yZ2UubmV0L2ZpbGVzL2xpYm1wZWcyLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hbHRpdmVjX2hfbmVlZGVkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY2hlY2stZm9yLWF2YWlsYWJsZS1hcm0tb3B0aW1pemF0aW9ucy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLVNldC12aXNpYmlsaXR5LW9mLWdsb2JhbC1zeW1ib2xzLXVzZWQtaW4tQVJNLXNwZWNpZmkucGF0Y2ggXAorICAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9saWJtcGVnMi0ke1BWfSIKKworU1JDX1VSSVttZDVzdW1dID0gIjBmOTJjNzQ1NGU1ODM3OWI0YTVhMzc4NDg1YmJkOGVmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImRlZTIyZTg5M2NiNWZjMmIyYjZlYmQ2MGI4ODQ3OGFiODU1NmNiM2I5M2Y5YTBkN2NlOGYzYjYxODUxODcxZDQiCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vbGlibXBlZzIuc291cmNlZm9yZ2UubmV0L2Rvd25sb2Fkcy5odG1sIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNoYXJlZCAtLWRpc2FibGUtc2RsIgorCitQQUNLQUdFQ09ORklHID89ICIke0BiYi51dGlscy5maWx0ZXIoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCBkKX0iCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS13aXRoLXgsLS13aXRob3V0LXgsdmlydHVhbC9saWJ4MTEgbGlieGV4dCBsaWJ4diIKKworUEFDS0FHRVMgPSAibXBlZzJkZWMtZGJnIG1wZWcyZGVjIG1wZWcyZGVjLWRvYyBsaWJtcGVnMiBsaWJtcGVnMi1kZXYgbGlibXBlZzJjb252ZXJ0IGxpYm1wZWcyY29udmVydC1kZXYgbGlibXBlZzItc3RhdGljZGV2IGxpYm1wZWcyY29udmVydC1zdGF0aWNkZXYiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8qIgorRklMRVNfbGlibXBlZzIgPSAiJHtsaWJkaXJ9L2xpYm1wZWcyLnNvLioiCitGSUxFU19saWJtcGVnMmNvbnZlcnQgPSAiJHtsaWJkaXJ9L2xpYm1wZWcyY29udmVydC5zby4qIgorRklMRVNfbGlibXBlZzItZGV2ID0gIiR7bGliZGlyfS9saWJtcGVnMi5zbyBcCisgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYm1wZWcyLmxhIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlibXBlZzJhcmNoLmxhIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGtnY29uZmlnL2xpYm1wZWcyLnBjIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L21wZWcyZGVjL21wZWcyLmgiCitGSUxFU19saWJtcGVnMi1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYm1wZWcyLmEiCitGSUxFU19saWJtcGVnMmNvbnZlcnQtZGV2ID0gIiR7bGliZGlyfS9saWJtcGVnMmNvbnZlcnQuc28gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlibXBlZzJjb252ZXJ0LmxhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYm1wZWcyY29udmVydGFyY2gubGEgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGtnY29uZmlnL2xpYm1wZWcyY29udmVydC5wYyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vbXBlZzJkZWMvbXBlZzJjb252ZXJ0LmgiCitGSUxFU19saWJtcGVnMmNvbnZlcnQtc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWJtcGVnMmNvbnZlcnQuYSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9tcGcxMjMvbXBnMTIzXzEuMjMuOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9tcGcxMjMvbXBnMTIzXzEuMjMuOC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBhNzAzOC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbXBnMTIzL21wZzEyM18xLjIzLjguYmIKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi1TVU1NQVJZID0gIkF1ZGlvIGRlY29kZXIgZm9yIE1QRUctMSBMYXllciAxLzIvMyIKLURFU0NSSVBUSU9OID0gIlRoZSBjb3JlIG9mIG1wZzEyMyBpcyBhbiBNUEVHLTEgTGF5ZXIgMS8yLzMgZGVjb2RpbmcgbGlicmFyeSwgd2hpY2ggY2FuIGJlIHVzZWQgYnkgb3RoZXIgcHJvZ3JhbXMuIFwKLW1wZzEyMyBhbHNvIGNvbWVzIHdpdGggYSBjb21tYW5kLWxpbmUgdG9vbCB3aGljaCBjYW4gcGxheWJhY2sgdXNpbmcgQUxTQSwgUHVsc2VBdWRpbywgT1NTLCBhbmQgc2V2ZXJhbCBvdGhlciBBUElzLCBcCi1hbmQgYWxzbyBjYW4gd3JpdGUgdGhlIGRlY29kZWQgYXVkaW8gdG8gV0FWLiIKLUhPTUVQQUdFID0gImh0dHA6Ly9tcGcxMjMuZGUvIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvbXBnMTIzL2J1Z3MvIgotU0VDVElPTiA9ICJtdWx0aW1lZGlhIgotCi1MSUNFTlNFID0gIkxHUEx2Mi4xIgotTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MWU4Njc1MzYzOGQzY2YyNTEyNTI4Yjk5MDc5YmM0ZjMiCi0KLVNSQ19VUkkgPSAiaHR0cHM6Ly93d3cubXBnMTIzLmRlL2Rvd25sb2FkLyR7QlB9LnRhci5iejIiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI0ZGRlMDQ1MTIzYTJhZDFlMzg1YTBhODJjMGVmOTI2OCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJkZTIzMDNjOGVjYjY1NTkzZTM5ODE1YzBhMmYyZjJkOTFmNzA4YzQzYjg1YTU1ZmRkMTkzNGM4MmU2NzdjZjhlIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKLQotIyBUaGUgb3B0aW9ucyBzaG91bGQgYmUgbXV0dWFsbHkgZXhjbHVzaXZlIGZvciBjb25maWd1cmF0aW9uIHNjcmlwdC4KLSMgSWYgYm90aCBhbHNhIGFuZCBwdWxzZWF1ZGlvIGFyZSBzcGVjaWZpZWQgKGFzIGluIHRoZSBkZWZhdWx0IGRpc3RybyBmZWF0dXJlcykKLSMgcHVsc2VhdWRpbyB0YWtlcyBwcmVjZWRlbmNlLgotUEFDS0FHRUNPTkZJR19BTFNBID0gIiR7QGJiLnV0aWxzLmZpbHRlcignRElTVFJPX0ZFQVRVUkVTJywgJ2Fsc2EnLCBkKX0iCi1QQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdWxzZWF1ZGlvJywgJ3B1bHNlYXVkaW8nLCAnJHtQQUNLQUdFQ09ORklHX0FMU0F9JywgZCl9IgotCi1QQUNLQUdFQ09ORklHW2Fsc2FdID0gIi0td2l0aC1kZWZhdWx0LWF1ZGlvPWFsc2EsLGFsc2EtbGliIgotUEFDS0FHRUNPTkZJR1tlc2RdID0gIiwsZXNvdW5kIgotUEFDS0FHRUNPTkZJR1tqYWNrXSA9ICIsLGphY2siCi1QQUNLQUdFQ09ORklHW29wZW5hbF0gPSAiLCxvcGVuYWwtc29mdCIKLVBBQ0tBR0VDT05GSUdbcG9ydGF1ZGlvXSA9ICIsLHBvcnRhdWRpby12MTkiCi1QQUNLQUdFQ09ORklHW3B1bHNlYXVkaW9dID0gIi0td2l0aC1kZWZhdWx0LWF1ZGlvPXB1bHNlLCxwdWxzZWF1ZGlvIgotUEFDS0FHRUNPTkZJR1tzZGxdID0gIiwsbGlic2RsIgotCi0jIEZvbGxvd2luZyBhcmUgcG9zc2libGUgc291bmQgb3V0cHV0IG1vZHVsZXM6Ci0jIGFsc2EgYXJ0cyBjb3JlYXVkaW8gZHVtbXkgZXNkIGphY2sgbmFzIG9wZW5hbCBvczIgb3NzIHBvcnRhdWRpbyBwdWxzZSBzZGwgc25kaW8gc3VuIHRpbnlhbHNhIHdpbjMyIHdpbjMyX3dhc2FwaQotQVVESU9NT0RTICs9ICIke0BiYi51dGlscy5maWx0ZXIoJ1BBQ0tBR0VDT05GSUcnLCAnYWxzYSBlc2QgamFjayBvcGVuYWwgcG9ydGF1ZGlvIHNkbCcsIGQpfSIKLUFVRElPTU9EUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncHVsc2VhdWRpbycsICdwdWxzZScsICcnLCBkKX0iCi0KLUVYVFJBX09FQ09ORiA9ICIgXAotICAgIC0tZW5hYmxlLXNoYXJlZCBcCi0gICAgLS13aXRoLWF1ZGlvPScke0FVRElPTU9EU30nIFwKLSAgICAtLXdpdGgtbW9kdWxlLXN1ZmZpeD0uc28gXAotICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ25lb24nLCAnLS13aXRoLWNwdT1uZW9uJywgJycsIGQpfSBcCi0gICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnYWx0aXZlYycsICctLXdpdGgtY3B1PWFsdGl2ZWMnLCAnJywgZCl9IFwKLSIKLQotIyBUaGUgeDg2IGFzc2VtYmxlciBvcHRpbWlzYXRpb25zIGNvbnRhaW5zIHRleHQgcmVsb2NhdGlvbnMgYW5kIHRoZXJlIGFyZSBubwotIyB1cHN0cmVhbSBwbGFucyB0byBmaXggdGhlbTogaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL21wZzEyMy9idWdzLzE2OC8KLUlOU0FORV9TS0lQXyR7UE59X2FwcGVuZF94ODYgPSAiIHRleHRyZWwiCi0KLSMgRmFpbHMgdG8gYnVpbGQgd2l0aCB0aHVtYi0xIChxZW11YXJtKQotI3wge3N0YW5kYXJkIGlucHV0fTogQXNzZW1ibGVyIG1lc3NhZ2VzOgotI3wge3N0YW5kYXJkIGlucHV0fTo0NzogRXJyb3I6IHNlbGVjdGVkIHByb2Nlc3NvciBkb2VzIG5vdCBzdXBwb3J0IFRodW1iIG1vZGUgYHNtdWxsIHI1LHI2LHI3LHI0JwotI3wge3N0YW5kYXJkIGlucHV0fTo0ODogRXJyb3I6IHNoaWZ0cyBpbiBDTVAvTU9WIGluc3RydWN0aW9ucyBhcmUgb25seSBzdXBwb3J0ZWQgaW4gdW5pZmllZCBzeW50YXggLS0gYG1vdiByNSxyNSxsc3IjMjQnCi0jLi4uCi0jfCBtYWtlWzNdOiAqKiogW2VxdWFsaXplci5sb10gRXJyb3IgMQotQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NCA9ICJhcm0iCi1BUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY1ID0gImFybSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9tcGcxMjMvbXBnMTIzXzEuMjUuNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9tcGcxMjMvbXBnMTIzXzEuMjUuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjg2MTk5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL21wZzEyMy9tcGcxMjNfMS4yNS42LmJiCkBAIC0wLDAgKzEsNTEgQEAKK1NVTU1BUlkgPSAiQXVkaW8gZGVjb2RlciBmb3IgTVBFRy0xIExheWVyIDEvMi8zIgorREVTQ1JJUFRJT04gPSAiVGhlIGNvcmUgb2YgbXBnMTIzIGlzIGFuIE1QRUctMSBMYXllciAxLzIvMyBkZWNvZGluZyBsaWJyYXJ5LCB3aGljaCBjYW4gYmUgdXNlZCBieSBvdGhlciBwcm9ncmFtcy4gXAorbXBnMTIzIGFsc28gY29tZXMgd2l0aCBhIGNvbW1hbmQtbGluZSB0b29sIHdoaWNoIGNhbiBwbGF5YmFjayB1c2luZyBBTFNBLCBQdWxzZUF1ZGlvLCBPU1MsIGFuZCBzZXZlcmFsIG90aGVyIEFQSXMsIFwKK2FuZCBhbHNvIGNhbiB3cml0ZSB0aGUgZGVjb2RlZCBhdWRpbyB0byBXQVYuIgorSE9NRVBBR0UgPSAiaHR0cDovL21wZzEyMy5kZS8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9tcGcxMjMvYnVncy8iCitTRUNUSU9OID0gIm11bHRpbWVkaWEiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xZTg2NzUzNjM4ZDNjZjI1MTI1MjhiOTkwNzliYzRmMyIKKworU1JDX1VSSSA9ICJodHRwczovL3d3dy5tcGcxMjMuZGUvZG93bmxvYWQvJHtCUH0udGFyLmJ6MiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI0MzMzNmJlZjc4ZjY3YzJlNjZjNGY2YzI4OGNhMWViMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwZjA0NThjOWI4Nzc5OWJjMmM5YmY5NDU1Mjc5Y2M0ZDMwNWUyNDVkYjQzYjUxYTM5ZWYyN2FmZTAyNWM1YThlIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworIyBUaGUgb3B0aW9ucyBzaG91bGQgYmUgbXV0dWFsbHkgZXhjbHVzaXZlIGZvciBjb25maWd1cmF0aW9uIHNjcmlwdC4KKyMgSWYgYm90aCBhbHNhIGFuZCBwdWxzZWF1ZGlvIGFyZSBzcGVjaWZpZWQgKGFzIGluIHRoZSBkZWZhdWx0IGRpc3RybyBmZWF0dXJlcykKKyMgcHVsc2VhdWRpbyB0YWtlcyBwcmVjZWRlbmNlLgorUEFDS0FHRUNPTkZJR19BTFNBID0gIiR7QGJiLnV0aWxzLmZpbHRlcignRElTVFJPX0ZFQVRVUkVTJywgJ2Fsc2EnLCBkKX0iCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdWxzZWF1ZGlvJywgJ3B1bHNlYXVkaW8nLCAnJHtQQUNLQUdFQ09ORklHX0FMU0F9JywgZCl9IgorCitQQUNLQUdFQ09ORklHW2Fsc2FdID0gIi0td2l0aC1kZWZhdWx0LWF1ZGlvPWFsc2EsLGFsc2EtbGliIgorUEFDS0FHRUNPTkZJR1tlc2RdID0gIiwsZXNvdW5kIgorUEFDS0FHRUNPTkZJR1tqYWNrXSA9ICIsLGphY2siCitQQUNLQUdFQ09ORklHW29wZW5hbF0gPSAiLCxvcGVuYWwtc29mdCIKK1BBQ0tBR0VDT05GSUdbcG9ydGF1ZGlvXSA9ICIsLHBvcnRhdWRpby12MTkiCitQQUNLQUdFQ09ORklHW3B1bHNlYXVkaW9dID0gIi0td2l0aC1kZWZhdWx0LWF1ZGlvPXB1bHNlLCxwdWxzZWF1ZGlvIgorUEFDS0FHRUNPTkZJR1tzZGxdID0gIiwsbGlic2RsIgorCisjIEZvbGxvd2luZyBhcmUgcG9zc2libGUgc291bmQgb3V0cHV0IG1vZHVsZXM6CisjIGFsc2EgYXJ0cyBjb3JlYXVkaW8gZHVtbXkgZXNkIGphY2sgbmFzIG9wZW5hbCBvczIgb3NzIHBvcnRhdWRpbyBwdWxzZSBzZGwgc25kaW8gc3VuIHRpbnlhbHNhIHdpbjMyIHdpbjMyX3dhc2FwaQorQVVESU9NT0RTICs9ICIke0BiYi51dGlscy5maWx0ZXIoJ1BBQ0tBR0VDT05GSUcnLCAnYWxzYSBlc2QgamFjayBvcGVuYWwgcG9ydGF1ZGlvIHNkbCcsIGQpfSIKK0FVRElPTU9EUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncHVsc2VhdWRpbycsICdwdWxzZScsICcnLCBkKX0iCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgIC0tZW5hYmxlLXNoYXJlZCBcCisgICAgLS13aXRoLWF1ZGlvPScke0FVRElPTU9EU30nIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICduZW9uJywgJy0td2l0aC1jcHU9bmVvbicsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ2FsdGl2ZWMnLCAnLS13aXRoLWNwdT1hbHRpdmVjJywgJycsIGQpfSBcCisiCisjIEZhaWxzIHRvIGJ1aWxkIHdpdGggdGh1bWItMSAocWVtdWFybSkKKyN8IHtzdGFuZGFyZCBpbnB1dH06IEFzc2VtYmxlciBtZXNzYWdlczoKKyN8IHtzdGFuZGFyZCBpbnB1dH06NDc6IEVycm9yOiBzZWxlY3RlZCBwcm9jZXNzb3IgZG9lcyBub3Qgc3VwcG9ydCBUaHVtYiBtb2RlIGBzbXVsbCByNSxyNixyNyxyNCcKKyN8IHtzdGFuZGFyZCBpbnB1dH06NDg6IEVycm9yOiBzaGlmdHMgaW4gQ01QL01PViBpbnN0cnVjdGlvbnMgYXJlIG9ubHkgc3VwcG9ydGVkIGluIHVuaWZpZWQgc3ludGF4IC0tIGBtb3YgcjUscjUsbHNyIzI0JworIy4uLgorI3wgbWFrZVszXTogKioqIFtlcXVhbGl6ZXIubG9dIEVycm9yIDEKK0FSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjQgPSAiYXJtIgorQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NSA9ICJhcm0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8tZGlzY3Vzcy1pb2NoYW5uZWwtZG9uLXQtdXNlLXZhcmlhYmxlLWxlbmd0aC1hcnJheS1pbi11bmlvbi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vcHVsc2VhdWRpby1kaXNjdXNzLWlvY2hhbm5lbC1kb24tdC11c2UtdmFyaWFibGUtbGVuZ3RoLWFycmF5LWluLXVuaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYjU2YWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8tZGlzY3Vzcy1pb2NoYW5uZWwtZG9uLXQtdXNlLXZhcmlhYmxlLWxlbmd0aC1hcnJheS1pbi11bmlvbi5wYXRjaApAQCAtMCwwICsxLDU5IEBACitGcm9tIHBhdGNod29yayBTYXQgRmViICA0IDEyOjE5OjAxIDIwMTcKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorU3ViamVjdDogW3B1bHNlYXVkaW8tZGlzY3Vzc10gaW9jaGFubmVsOiBkb24ndCB1c2UgdmFyaWFibGUgbGVuZ3RoIGFycmF5IGluCisgdW5pb24KK0Zyb206IFRhbnUgS2Fza2luZW4gPHRhbnVrQGlraS5maT4KK1gtUGF0Y2h3b3JrLUlkOiAxMzY4ODUKK01lc3NhZ2UtSWQ6IDwyMDE3MDIwNDEyMTkwMS4xNzQyOC0xLXRhbnVrQGlraS5maT4KK1RvOiBwdWxzZWF1ZGlvLWRpc2N1c3NAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCitEYXRlOiBTYXQsICA0IEZlYiAyMDE3IDE0OjE5OjAxICswMjAwCisKK0NsYW5nIGRpZG4ndCBsaWtlIHRoZSB2YXJpYWJsZSBsZW5ndGggYXJyYXk6CisKK3B1bHNlY29yZS9pb2NoYW5uZWwuYzozNTg6MTc6IGVycm9yOiBmaWVsZHMgbXVzdCBoYXZlIGEgY29uc3RhbnQgc2l6ZToKKyd2YXJpYWJsZSBsZW5ndGggYXJyYXkgaW4gc3RydWN0dXJlJyBleHRlbnNpb24gd2lsbCBuZXZlciBiZSBzdXBwb3J0ZWQKKyAgICAgICAgdWludDhfdCBkYXRhW0NNU0dfU1BBQ0Uoc2l6ZW9mKGludCkgKiBuZmQpXTsKKyAgICAgICAgICAgICAgICBeCisKK0NvbW1pdCA0NTFkMWQ2NzYyIGludHJvZHVjZWQgdGhlIHZhcmlhYmxlIGxlbmd0aCBhcnJheSBpbiBvcmRlciB0byBoYXZlCit0aGUgY29ycmVjdCB2YWx1ZSBpbiBtc2dfY29udHJvbGxlbi4gVGhpcyBwYXRjaCByZXZlcnRzIHRoYXQgY29tbWl0IGFuZAordXNlcyBhIGRpZmZlcmVudCB3YXkgdG8gYWNoaWV2ZSB0aGUgc2FtZSBnb2FsLgorCitCdWdMaW5rOiBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD05OTQ1OAorLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCisgc3JjL3B1bHNlY29yZS9pb2NoYW5uZWwuYyB8IDEwICsrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3B1bHNlY29yZS9pb2NoYW5uZWwuYyBiL3NyYy9wdWxzZWNvcmUvaW9jaGFubmVsLmMKK2luZGV4IDhhY2UyOTdmZi4uODk3MzM3NTIyIDEwMDY0NAorLS0tIGEvc3JjL3B1bHNlY29yZS9pb2NoYW5uZWwuYworKysrIGIvc3JjL3B1bHNlY29yZS9pb2NoYW5uZWwuYworQEAgLTM1NSw3ICszNTUsNyBAQCBzc2l6ZV90IHBhX2lvY2hhbm5lbF93cml0ZV93aXRoX2ZkcyhwYV9pb2NoYW5uZWwqaW8sIGNvbnN0IHZvaWQqZGF0YSwgc2l6ZV90IGwsCisgICAgIHN0cnVjdCBpb3ZlYyBpb3Y7CisgICAgIHVuaW9uIHsKKyAgICAgICAgIHN0cnVjdCBjbXNnaGRyIGhkcjsKKy0gICAgICAgIHVpbnQ4X3QgZGF0YVtDTVNHX1NQQUNFKHNpemVvZihpbnQpICogbmZkKV07CisrICAgICAgICB1aW50OF90IGRhdGFbQ01TR19TUEFDRShzaXplb2YoaW50KSAqIE1BWF9BTkNJTF9EQVRBX0ZEUyldOworICAgICB9IGNtc2c7CisgCisgICAgIHBhX2Fzc2VydChpbyk7CitAQCAtMzgyLDcgKzM4MiwxMyBAQCBzc2l6ZV90IHBhX2lvY2hhbm5lbF93cml0ZV93aXRoX2ZkcyhwYV9pb2NoYW5uZWwqaW8sIGNvbnN0IHZvaWQqZGF0YSwgc2l6ZV90IGwsCisgICAgIG1oLm1zZ19pb3YgPSAmaW92OworICAgICBtaC5tc2dfaW92bGVuID0gMTsKKyAgICAgbWgubXNnX2NvbnRyb2wgPSAmY21zZzsKKy0gICAgbWgubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY21zZyk7CisrCisrICAgIC8qIElmIHdlIGZvbGxvd2VkIHRoZSBleGFtcGxlIG9uIHRoZSBjbXNnIG1hbiBwYWdlLCB3ZSdkIHVzZQorKyAgICAgKiBzaXplb2YoY21zZy5kYXRhKSBoZXJlLCBidXQgaWYgbmZkIDwgTUFYX0FOQ0lMX0RBVEFfRkRTLCB0aGVuIHRoZSBkYXRhCisrICAgICAqIGJ1ZmZlciBpcyBsYXJnZXIgdGhhbiBuZWVkZWQsIGFuZCB0aGUga2VybmVsIGRvZXNuJ3QgbGlrZSBpdCBpZiB3ZSBzZXQKKysgICAgICogbXNnX2NvbnRyb2xsZW4gdG8gYSBsYXJnZXIgdGhhbiBuZWNlc3NhcnkgdmFsdWUuIFRoZSBjb21taXQgbWVzc2FnZSBmb3IKKysgICAgICogY29tbWl0IDQ1MWQxZDY3NjIgY29udGFpbnMgYSBsb25nZXIgZXhwbGFuYXRpb24uICovCisrICAgIG1oLm1zZ19jb250cm9sbGVuID0gQ01TR19TUEFDRShzaXplb2YoaW50KSAqIG5mZCk7CisgCisgICAgIGlmICgociA9IHNlbmRtc2coaW8tPm9mZCwgJm1oLCBNU0dfTk9TSUdOQUwpKSA+PSAwKSB7CisgICAgICAgICBpby0+d3JpdGFibGUgPSBpby0+aHVuZ3VwID0gZmFsc2U7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvXzEwLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvXzEwLjAuYmIKaW5kZXggZjNhODU3My4uOWEzNGFmYSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpb18xMC4wLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW9fMTAuMC5iYgpAQCAtMyw2ICszLDcgQEAKIFNSQ19VUkkgPSAiaHR0cDovL2ZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9wdWxzZWF1ZGlvL3JlbGVhc2VzLyR7QlB9LnRhci54eiBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBhZHNwLU1ha2UtaXQtY29tcGlsZS1vbi1tdXNsLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtY2xpZW50LWNvbmYtQWRkLWFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wdWxzZWF1ZGlvLWRpc2N1c3MtaW9jaGFubmVsLWRvbi10LXVzZS12YXJpYWJsZS1sZW5ndGgtYXJyYXktaW4tdW5pb24ucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vdm9sYXRpbGVzLjA0X3B1bHNlIFwKICIKIFNSQ19VUklbbWQ1c3VtXSA9ICI0OTUwZDI3OTliZjU1YWI5MWY2YjdmOTkwYjdmMDk3MSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zYmMvc2JjXzEuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zYmMvc2JjXzEuMy5iYgppbmRleCAyZDdmMzFiLi4yYmI4OTVkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc2JjL3NiY18xLjMuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3NiYy9zYmNfMS4zLmJiCkBAIC0yLDggKzIsMTIgQEAKIERFU0NSSVBUSU9OID0gIkJsdWV0b290aCBsb3ctY29tcGxleGl0eSwgc3ViYmFuZCBjb2RlYyAoU0JDKSBsaWJyYXJ5LiIKIEhPTUVQQUdFID0gImh0dHBzOi8vd3d3LmJsdWV6Lm9yZyIKIFNFQ1RJT04gPSAibGlicyIKLUxJQ0VOU0UgPSAiR1BMdjIiCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyIKK0xJQ0VOU0VfJHtQTn0gPSAiTEdQTHYyLjErIgorTElDRU5TRV8ke1BOfS1leGFtcGxlcyA9ICJHUEx2MisiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xMmY4ODRkMmFlMWZmODdjMDllNWI3Y2NjMmM0Y2E3ZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9ZmI1MDRiNjdjNTAzMzFmYzc4NzM0ZmVkOTBmYjBlMDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3NiY2VuYy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjQ7bWQ1PTA4ZTdhNzBiMTI3ZjQxMDBmZjJjZDdkNjI5MTQ3ZDhkIFwKICAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NiYy9zYmMuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTI2O21kNT0wZjU3ZDBkZjIyYjBkNDA3NDZiZGQyOTgwNWE0MzYxYiIKIAogREVQRU5EUyA9ICJsaWJzbmRmaWxlMSIKQEAgLTE0LDMgKzE4LDYgQEAKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICJlNjEwMjJjZjU3NmYxNDE5MDI0MWU3MDcxNzUzZmRhY2RjZTVkMWRlYTg5ZmZkNzA0MTEwZmM1MGJlNjg5MzA5IgogCiBpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUEFDS0FHRVMgPSsgIiR7UE59LWV4YW1wbGVzIgorRklMRVNfJHtQTn0tZXhhbXBsZXMgKz0gIiR7YmluZGlyfS8qIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3NwZWV4L3NwZWV4XzEuMi4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3NwZWV4L3NwZWV4XzEuMi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NjM2YmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc3BlZXgvc3BlZXhfMS4yLjAuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJTcGVlY2ggQXVkaW8gQ29kZWMiCitERVNDUklQVElPTiA9ICJTcGVleCBpcyBhbiBPcGVuIFNvdXJjZS9GcmVlIFNvZnR3YXJlIHBhdGVudC1mcmVlIGF1ZGlvIGNvbXByZXNzaW9uIGZvcm1hdCBkZXNpZ25lZCBmb3Igc3BlZWNoLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuc3BlZXgub3JnIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zMTQ2NDlkOGJhOWRkNzA0NWRmYjY2ODNmMjk4ZDBhOCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL3NwZWV4L3NwZWV4Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0zNDttZDU9ZWY4YzhlYTRmNzE5OGQ3MWNmMzUwOWM2ZWQwNWVhNTAiCitERVBFTkRTID0gImxpYm9nZyBzcGVleGRzcCIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnhpcGgub3JnL3JlbGVhc2VzL3NwZWV4L3NwZWV4LSR7UFZ9LnRhci5neiIKK1VQU1RSRUFNX0NIRUNLX1JFR0VYID0gInNwZWV4LSg/UDxwdmVyPlxkKyhcLlxkKykrKVwudGFyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOGFiN2JiMjU4OTExMGRmYWYwZWQ3ZmE3NzU3ZGM0OWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWFhZThhZjBhYzc0MmRjN2Q1NDJjOTQzOWFjNzJmMWYzODVjZTgzODM5MmRjODQ5Y2FlNDUzNmFmOTIxMDA5NCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGxpYl9wYWNrYWdlCisKK0VYVFJBX09FQ09ORiA9ICJcCisgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUQVJHRVRfRlBVJywgJ3NvZnQnLCAnLS1lbmFibGUtZml4ZWQtcG9pbnQgLS1kaXNhYmxlLWZsb2F0LWFwaSAtLWRpc2FibGUtdmJyJywgJycsIGQpfSBcCisiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc3BlZXgvc3BlZXhfMS4ycmMyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3NwZWV4L3NwZWV4XzEuMnJjMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdkMjNkYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc3BlZXgvc3BlZXhfMS4ycmMyLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotU1VNTUFSWSA9ICJTcGVlY2ggQXVkaW8gQ29kZWMiCi1ERVNDUklQVElPTiA9ICJTcGVleCBpcyBhbiBPcGVuIFNvdXJjZS9GcmVlIFNvZnR3YXJlIHBhdGVudC1mcmVlIGF1ZGlvIGNvbXByZXNzaW9uIGZvcm1hdCBkZXNpZ25lZCBmb3Igc3BlZWNoLiIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuc3BlZXgub3JnIgotU0VDVElPTiA9ICJsaWJzIgotTElDRU5TRSA9ICJCU0QiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zMTQ2NDlkOGJhOWRkNzA0NWRmYjY2ODNmMjk4ZDBhOCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL3NwZWV4L3NwZWV4Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0zNDttZDU9ZWY4YzhlYTRmNzE5OGQ3MWNmMzUwOWM2ZWQwNWVhNTAiCi1ERVBFTkRTID0gImxpYm9nZyBzcGVleGRzcCIKLQotU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnVzLnhpcGgub3JnL3JlbGVhc2VzL3NwZWV4L3NwZWV4LSR7UFZ9LnRhci5neiIKLQotU1JDX1VSSVttZDVzdW1dID0gIjZhZTdkYjNiYWIwMWUxZDRiODZiYWNmYThjYTMzZTgxIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImNhYTI3YzcyNDdmZjE1Yzg1MjFjMmFlMGVhMjE5ODdjOWU5NzEwYThmMmQzNDQ4ZThiNzlkYTk4MDZiY2U4OTEiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBsaWJfcGFja2FnZQotCi1FWFRSQV9PRUNPTkYgPSAiXAotICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnVEFSR0VUX0ZQVScsICdzb2Z0JywgJy0tZW5hYmxlLWZpeGVkLXBvaW50IC0tZGlzYWJsZS1mbG9hdC1hcGkgLS1kaXNhYmxlLXZicicsICcnLCBkKX0gXAotIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3gyNjQveDI2NF9naXQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEveDI2NC94MjY0X2dpdC5iYgppbmRleCA2OWY1MmMyLi5jNTQ3NmM3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEveDI2NC94MjY0X2dpdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEveDI2NC94MjY0X2dpdC5iYgpAQCAtMTIsNiArMTIsNyBAQAogICAgICAgICAgICBmaWxlOi8vZG9uLXQtZGVmYXVsdC10by1jb3J0ZXgtYTktd2l0aC1uZW9uLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL0ZpeC1YMzItYnVpbGQtYnktZGlzYWJsaW5nLWFzbS5wYXRjaCBcCiAgICAgICAgICAgICIKK1VQU1RSRUFNX1ZFUlNJT05fVU5LTk9XTiA9ICIxIgogCiBTUkNSRVYgPSAiMmI3NDFmODFlNTFmOTJkMDUzZDg3YTQ5ZjU5ZmYxMDI2NTUzYTBmNiIKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8tc2RrLXB0ZXN0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8tc2RrLXB0ZXN0LmJiCmluZGV4IDkzZTVhNGUuLjUzMTU3MWUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9pbWFnZXMvY29yZS1pbWFnZS1zYXRvLXNkay1wdGVzdC5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzL2NvcmUtaW1hZ2Utc2F0by1zZGstcHRlc3QuYmIKQEAgLTQsMyArNCw4IEBACiAKIElNQUdFX0ZFQVRVUkVTICs9ICJwdGVzdC1wa2dzIgogCisjIFRoaXMgaW1hZ2UgaXMgc3VmZmljaWVudGx5IGxhcmdlICh+M0dCKSB0aGF0IGl0IGNhbid0IGFjdHVhbGx5IGZpdCBpbiBhIGxpdmUKKyMgaW1hZ2UgKHdoaWNoIGhhcyBhIDRHQiBsaW1pdCksIHNvIG51bGxpZnkgdGhlIG92ZXJoZWFkIGZhY3RvciAoMS4zeCBvdXQgb2YgdGhlCisjIGJveCkgYW5kIGV4cGxpY2l0bHkgYWRkIGp1c3QgNTAwTUIuCitJTUFHRV9PVkVSSEVBRF9GQUNUT1IgPSAiMS4wIgorSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFID0gIjUyNDI4OCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9pbWFnZXMvY29yZS1pbWFnZS1zYXRvLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8uYmIKaW5kZXggOTlkYWQxMS4uYjg5Nzk1MCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8uYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8uYmIKQEAgLTgsNyArOCw1IEBACiAKIGluaGVyaXQgY29yZS1pbWFnZQogCi1JTUFHRV9JTlNUQUxMICs9ICJwYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0by1nYW1lcyIKLQogVE9PTENIQUlOX0hPU1RfVEFTS19hcHBlbmQgPSAiIG5hdGl2ZXNkay1pbnRsdG9vbCBuYXRpdmVzZGstZ2xpYi0yLjAiCiBUT09MQ0hBSU5fSE9TVF9UQVNLX3JlbW92ZV90YXNrLXBvcHVsYXRlLXNkay1leHQgPSAiIG5hdGl2ZXNkay1pbnRsdG9vbCBuYXRpdmVzZGstZ2xpYi0yLjAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9tYXRjaGJveC1kZXNrdG9wXzIuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wL21hdGNoYm94LWRlc2t0b3BfMi4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWE3YjRiLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wL21hdGNoYm94LWRlc2t0b3BfMi4xLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotU1VNTUFSWSA9ICJNYXRjaGJveCBXaW5kb3cgTWFuYWdlciBEZXNrdG9wIgotSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnLyIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgotCi1MSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZGVza3RvcC5jO2VuZGxpbmU9MjA7bWQ1PTM2YzliZjI5NWU2MDA3ZjM0MjMwOTVmNDA1YWY1YTJkIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9tYWluLmM7ZW5kbGluZT0xOTttZDU9MjA0NDI0NGY5N2ExOTVjMjViN2RjNjAyYWM3ZTlhMDAiCi0KLURFUEVORFMgPSAiZ25vbWUtY29tbW9uLW5hdGl2ZSBndGsrMyBzdGFydHVwLW5vdGlmaWNhdGlvbiBkYnVzIgotU0VDVElPTiA9ICJ4MTEvd20iCi0KLSMgU1JDUkVWIHRhZ2dlZCAyLjEKLVNSQ1JFViA9ICJjODQ3MzUxOWEwZjM3NDg4YjhiM2U4MzllMjc1YjAwMGNkZGUwYjgwIgotU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0tMiBcCi0gICAgICAgICAgIGZpbGU6Ly92Zm9sZGVycy8qIFwKLSAgICAgICAgICAgIgotCi1FWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc3RhcnR1cC1ub3RpZmljYXRpb24gLS13aXRoLWRidXMiCi0KLVMgPSAiJHtXT1JLRElSfS9naXQiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKLQotIyBUaGUgc3RhcnR1cC1ub3RpZmljYXRpb24gcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUwotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0gICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9tYXRjaGJveC92Zm9sZGVycy8KLSAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS92Zm9sZGVycy8qICR7RH0ke2RhdGFkaXJ9L21hdGNoYm94L3Zmb2xkZXJzLwotfQotCi1GSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9tYXRjaGJveC92Zm9sZGVycy8iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9tYXRjaGJveC1kZXNrdG9wXzIuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wL21hdGNoYm94LWRlc2t0b3BfMi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwY2RmYTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9tYXRjaGJveC1kZXNrdG9wXzIuMi5iYgpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gIk1hdGNoYm94IFdpbmRvdyBNYW5hZ2VyIERlc2t0b3AiCitIT01FUEFHRSA9ICJodHRwOi8vbWF0Y2hib3gtcHJvamVjdC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9kZXNrdG9wLmM7ZW5kbGluZT0yMDttZDU9MzZjOWJmMjk1ZTYwMDdmMzQyMzA5NWY0MDVhZjVhMmQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uYztlbmRsaW5lPTE5O21kNT0yMDQ0MjQ0Zjk3YTE5NWMyNWI3ZGM2MDJhYzdlOWEwMCIKKworREVQRU5EUyA9ICJndGsrMyBzdGFydHVwLW5vdGlmaWNhdGlvbiBkYnVzIgorU0VDVElPTiA9ICJ4MTEvd20iCisKKyMgU1JDUkVWIHRhZ2dlZCAyLjIKK1NSQ1JFViA9ICI2YmM2N2QwOWRhNDE0N2U1NTUyZmUzMDAxMWEwNWEyYzU5ZDJmNzc3IgorU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0tMiBcCisgICAgICAgICAgIGZpbGU6Ly92Zm9sZGVycy8qIFwKKyAgICAgICAgICAgIgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc3RhcnR1cC1ub3RpZmljYXRpb24gLS13aXRoLWRidXMiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgc3RhcnR1cC1ub3RpZmljYXRpb24gcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9tYXRjaGJveC92Zm9sZGVycy8KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS92Zm9sZGVycy8qICR7RH0ke2RhdGFkaXJ9L21hdGNoYm94L3Zmb2xkZXJzLworfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9tYXRjaGJveC92Zm9sZGVycy8iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0by5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvLmJiCmluZGV4IDZmYjFiNjcuLjk3Y2NlZDcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvLmJiCkBAIC0xOSw3ICsxOSw2IEBACiAgICAgIgogCiBORVRXT1JLX01BTkFHRVIgPz0gImNvbm5tYW4tZ25vbWUiCi1ORVRXT1JLX01BTkFHRVJfbGliYy11Y2xpYmMgPSAiIgogCiBTVU1NQVJZXyR7UE59LWJhc2UgPSAiU2F0byBkZXNrdG9wIC0gYmFzZSBwYWNrYWdlcyIKIFJERVBFTkRTXyR7UE59LWJhc2UgPSAiXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvZmlsZXMvMDAwMS1Vc2UtV25vLWVycm9yLWZvcm1hdC1vdmVyZmxvdy1pZi10aGUtY29tcGlsZXItc3VwcG9yLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvZmlsZXMvMDAwMS1Vc2UtV25vLWVycm9yLWZvcm1hdC1vdmVyZmxvdy1pZi10aGUtY29tcGlsZXItc3VwcG9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MGEzYjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9maWxlcy8wMDAxLVVzZS1Xbm8tZXJyb3ItZm9ybWF0LW92ZXJmbG93LWlmLXRoZS1jb21waWxlci1zdXBwb3IucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSAzMzc3OTllNDAzNTBiM2RiMjQ0MWNjOThmNjVlYzM2YTc0ZGZiMzU2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjEgQXByIDIwMTcgMTI6MTg6MDggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVXNlIC1Xbm8tZXJyb3I9Zm9ybWF0LW92ZXJmbG93PSBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgaXQKKword2UgbmVlZCB0aGlzIHdhcm5pbmcgdG8gYmUgc3VwcHJlc3NlZCB3aXRoIGdjYzcrCitob3dldmVyIG9sZGVyIGNvbXBpbGVycyBkb250IHN1cHBvcnQgaXQgc28gd2UgbmVlZAorYSB3YXkgdG8gZGlzYmxlIGl0IG9ubHkgaWYgY29tcGlsZXIgc3VwcG9ydHMgaXQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDNhMzhjOTUuLmJiOTAzNWUgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTQyLDcgKzQyLDcgQEAgZmkKKyBpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyI7IHRoZW4KKyAgIEFDX01TR19DSEVDS0lORyhbZm9yIHVzYWJsZSBnY2Mgd2FybmluZyBmbGFnc10pCisgICBnY2N3YXJuaW5nZmxhZ3M9CistICBmb3IgZmxhZyBpbiAtV2FsbCAtV2Vycm9yIC1zdGQ9Yzg5IC1wZWRhbnRpYzsgZG8KKysgIGZvciBmbGFnIGluIC1XYWxsIC1XZXJyb3IgLXN0ZD1jODkgLXBlZGFudGljIC1Xbm8tZXJyb3I9Zm9ybWF0LW92ZXJmbG93PTsgZG8KKyAgICAgYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCisgICAgIENGTEFHUz0iJENGTEFHUyRnY2N3YXJuaW5nZmxhZ3MgJGZsYWcgJEdUS19DRkxBR1MiCistLSAKKzIuMTIuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9wdXp6bGVzX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL3B1enpsZXNfZ2l0LmJiCmluZGV4IGEyNWMwMDcuLmRlY2QyYTggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL3B1enpsZXNfZ2l0LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL3B1enpsZXNfZ2l0LmJiCkBAIC0xNCw3ICsxNCw5IEBACiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVzZS1sYWJzLWluc3RlYWQtb2YtYWJzLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtcGFsaXNhZGUtRml4LXdhcm5pbmdzLXdpdGgtY2xhbmctb24tYXJtLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtQ2xhcmlmeS1jb25kaXRpb25zLXRvLWF2b2lkLWNvbXBpbGVyLWVycm9ycy5wYXRjaCBcCi0iCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVzZS1Xbm8tZXJyb3ItZm9ybWF0LW92ZXJmbG93LWlmLXRoZS1jb21waWxlci1zdXBwb3IucGF0Y2ggXAorICAgICAgICAgICAiCitVUFNUUkVBTV9WRVJTSU9OX1VOS05PV04gPSAiMSIKIFNSQ1JFViA9ICI4ZGZlNWNlYzMxZTc4NGU0ZWNlMjk1NWVjYzhjYzM1ZWU3ZThmYmIzIgogUEUgPSAiMSIKIFBWID0gIjAuMCtnaXQke1NSQ1BWfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvd2Via2l0Z3RrLzAwMDEtT3B0aW9uc0dUSy5jbWFrZS1kcm9wLXRoZS1oYXJkY29kZWQtaW50cm9zcGVjdGlvbi1ndC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvd2Via2l0Z3RrLzAwMDEtT3B0aW9uc0dUSy5jbWFrZS1kcm9wLXRoZS1oYXJkY29kZWQtaW50cm9zcGVjdGlvbi1ndC5wYXRjaAppbmRleCA5M2E2OWMwLi4wZjZlZWVkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0ay8wMDAxLU9wdGlvbnNHVEsuY21ha2UtZHJvcC10aGUtaGFyZGNvZGVkLWludHJvc3BlY3Rpb24tZ3QucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGsvMDAwMS1PcHRpb25zR1RLLmNtYWtlLWRyb3AtdGhlLWhhcmRjb2RlZC1pbnRyb3NwZWN0aW9uLWd0LnBhdGNoCkBAIC05LDYgKzksOCBAQAogdGhyb3VnaCB0aGUgdXNlIG9mIHFlbXUgdGFyZ2V0IGVtdWxhdGlvbi4KIAogU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZwogLS0tCiAgU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UgfCA2IC0tLS0tLQogIDEgZmlsZSBjaGFuZ2VkLCA2IGRlbGV0aW9ucygtKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGtfMi4xOC41LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGtfMi4xOC41LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjRhZWUyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvd2Via2l0Z3RrXzIuMTguNS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi1TVU1NQVJZID0gIldlYktpdCB3ZWIgcmVuZGVyaW5nIGVuZ2luZSBmb3IgdGhlIEdUSysgcGxhdGZvcm0iCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVncy53ZWJraXQub3JnLyIKLQotTElDRU5TRSA9ICJCU0QgJiBMR1BMdjIrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vU291cmNlL0phdmFTY3JpcHRDb3JlL0NPUFlJTkcuTElCO21kNT1kMGM2ZDYzOTdhNWQ4NDI4NmRkYTc1OGRhNTdiZDY5MSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9Tb3VyY2UvV2ViQ29yZS9MSUNFTlNFLUFQUExFO21kNT00NjQ2ZjkwMDgyYzQwYmNmMjk4YzI4NWY4YmFiMGIxMiBcCi0JCSAgICBmaWxlOi8vU291cmNlL1dlYkNvcmUvTElDRU5TRS1MR1BMLTI7bWQ1PTM2MzU3ZmZkZTJiNjRhZTE3N2IyNDk0NDQ1Yjc5ZDIxIFwKLQkJICAgIGZpbGU6Ly9Tb3VyY2UvV2ViQ29yZS9MSUNFTlNFLUxHUEwtMi4xO21kNT1hNzc4YTMzZWYzMzhhYmJhZjhiOGE3YzM2YjZlZWM4MCBcCi0JCSAgICIKLQotU1JDX1VSSSA9ICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci54eiBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpbmRHT2JqZWN0SW50cm9zcGVjdGlvbi5jbWFrZS1wcmVmaXgtdmFyaWFibGVzLW9idGEucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1XaGVuLWJ1aWxkaW5nLWludHJvc3BlY3Rpb24tZmlsZXMtYWRkLUNNQUtFX0NfRkxBR1MtLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtT3B0aW9uc0dUSy5jbWFrZS1kcm9wLXRoZS1oYXJkY29kZWQtaW50cm9zcGVjdGlvbi1ndC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1yYWN5LXBhcmFsbGVsLWJ1aWxkLW9mLVdlYktpdDItNC4wLmdpci5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLVR3ZWFrLWd0a2RvYy1zZXR0aW5ncy1zby10aGF0LWd0a2RvYy1nZW5lcmF0aW9uLXdvcmsucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8veDMyX3N1cHBvcnQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vY3Jvc3MtY29tcGlsZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9kZXRlY3QtYXRvbWljcy1kdXJpbmctY29uZmlndXJlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtV2ViS2l0TWFjcm9zLUFwcGVuZC10by1JLWFuZC1ub3QtdG8taXN5c3RlbS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1idWlsZC13aXRoLW11c2wucGF0Y2ggXAotICAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJhZjE4YzJjZmEwMGNhZGZkMGI0ZDhkYjIxY2FiMDExZCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIwYzZkODBjYzdlYjVkMzJmODA2MzA0MWZhMTFhMWE2ZjE3YTI5NzY1YzJmNjljNmJjODYyY2Q0N2MyZDUzOWI4IgotCi1pbmhlcml0IGNtYWtlIHBrZ2NvbmZpZyBnb2JqZWN0LWludHJvc3BlY3Rpb24gcGVybG5hdGl2ZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGd0ay1kb2MKLQotIyBkZXBlbmRzIG9uIGxpYnh0Ci1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgotCi1ERVBFTkRTID0gInpsaWIgbGlic291cC0yLjQgY3VybCBsaWJ4bWwyIGNhaXJvIGxpYnhzbHQgbGlieHQgbGliaWRuIGxpYmdjcnlwdCBcCi0gICAgICAgICAgIGd0ayszIGdzdHJlYW1lcjEuMCBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGZsZXgtbmF0aXZlIGdwZXJmLW5hdGl2ZSBzcWxpdGUzIFwKLQkgICBwYW5nbyBpY3UgYmlzb24tbmF0aXZlIGdhd2sgaW50bHRvb2wtbmF0aXZlIGxpYndlYnAgXAotCSAgIGF0ayB1ZGV2IGhhcmZidXp6IGpwZWcgbGlicG5nIHB1bHNlYXVkaW8gbGlicnN2ZyBsaWJ0aGVvcmEgbGlidm9yYmlzIGxpYnhjb21wb3NpdGUgbGlieHRzdCBcCi0JICAgcnVieS1uYXRpdmUgbGlibm90aWZ5IGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCBcCi0JICAgZ2V0dGV4dC1uYXRpdmUgZ2xpYi0yLjAgZ2xpYi0yLjAtbmF0aXZlIGxpYnRhc24xIFwKLSAgICAgICAgICAiCi0KLVBBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnd2F5bGFuZCcgLGQpfSBcCi0gICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnd2ViZ2wgb3BlbmdsJywgJycgLGQpfSBcCi0gICAgICAgICAgICAgICAgICAgZW5jaGFudCBcCi0gICAgICAgICAgICAgICAgICAgbGlic2VjcmV0IFwKLSAgICAgICAgICAgICAgICAgICIKLQotUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSA9ICItREVOQUJMRV9XQVlMQU5EX1RBUkdFVD1PTiwtREVOQUJMRV9XQVlMQU5EX1RBUkdFVD1PRkYsd2F5bGFuZCIKLVBBQ0tBR0VDT05GSUdbeDExXSA9ICItREVOQUJMRV9YMTFfVEFSR0VUPU9OLC1ERU5BQkxFX1gxMV9UQVJHRVQ9T0ZGLHZpcnR1YWwvbGlieDExIgotUEFDS0FHRUNPTkZJR1tnZW9jbHVlXSA9ICItREVOQUJMRV9HRU9MT0NBVElPTj1PTiwtREVOQUJMRV9HRU9MT0NBVElPTj1PRkYsZ2VvY2x1ZSIKLVBBQ0tBR0VDT05GSUdbZW5jaGFudF0gPSAiLURFTkFCTEVfU1BFTExDSEVDSz1PTiwtREVOQUJMRV9TUEVMTENIRUNLPU9GRixlbmNoYW50IgotUEFDS0FHRUNPTkZJR1tndGsyXSA9ICItREVOQUJMRV9QTFVHSU5fUFJPQ0VTU19HVEsyPU9OLC1ERU5BQkxFX1BMVUdJTl9QUk9DRVNTX0dUSzI9T0ZGLGd0aysiCi1QQUNLQUdFQ09ORklHW2dsZXMyXSA9ICItREVOQUJMRV9HTEVTMj1PTiwtREVOQUJMRV9HTEVTMj1PRkYsdmlydHVhbC9saWJnbGVzMiIKLVBBQ0tBR0VDT05GSUdbd2ViZ2xdID0gIi1ERU5BQkxFX1dFQkdMPU9OLC1ERU5BQkxFX1dFQkdMPU9GRix2aXJ0dWFsL2xpYmdsIgotUEFDS0FHRUNPTkZJR1tvcGVuZ2xdID0gIi1ERU5BQkxFX09QRU5HTD1PTiwtREVOQUJMRV9PUEVOR0w9T0ZGLHZpcnR1YWwvbGliZ2wiCi1QQUNLQUdFQ09ORklHW2xpYnNlY3JldF0gPSAiLURVU0VfTElCU0VDUkVUPU9OLC1EVVNFX0xJQlNFQ1JFVD1PRkYsbGlic2VjcmV0IgotUEFDS0FHRUNPTkZJR1tsaWJoeXBoZW5dID0gIi1EVVNFX0xJQkhZUEhFTj1PTiwtRFVTRV9MSUJIWVBIRU49T0ZGLGxpYmh5cGhlbiIKLQotRVhUUkFfT0VDTUFLRSA9ICIgXAotCQktRFBPUlQ9R1RLIFwKLQkJLURDTUFLRV9CVUlMRF9UWVBFPVJlbGVhc2UgXAotCQkke0BiYi51dGlscy5jb250YWlucygnR0lfREFUQV9FTkFCTEVEJywgJ1RydWUnLCAnLURFTkFCTEVfSU5UUk9TUEVDVElPTj1PTicsICctREVOQUJMRV9JTlRST1NQRUNUSU9OPU9GRicsIGQpfSBcCi0JCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdHVEtET0NfRU5BQkxFRCcsICdUcnVlJywgJy1ERU5BQkxFX0dUS0RPQz1PTicsICctREVOQUJMRV9HVEtET0M9T0ZGJywgZCl9IFwKLQkJLURFTkFCTEVfTUlOSUJST1dTRVI9T04gXAotICAgICAgICAgICAgICAgIC1EUFlUSE9OX0VYRUNVVEFCTEU9YHdoaWNoIHB5dGhvbmAgXAotCQkiCi0KLSMgR0wvR0xFUyBoZWFkZXIgY2xhc2g6IGJvdGggZGVmaW5lIHRoZSBzYW1lIHRoaW5nLCBkaWZmZXJlbnRseSwgb24gMzIgYml0IHg4NgotRVhUUkFfT0VDTUFLRV9hcHBlbmRfeDg2ID0gIiAtRFVTRV9HU1RSRUFNRVJfR0w9T0ZGICIKLUVYVFJBX09FQ01BS0VfYXBwZW5kX3g4Ni14MzIgPSAiIC1EVVNFX0dTVFJFQU1FUl9HTD1PRkYgIgotCi0jIEphdmFzY3JpcHQgSklUIGlzIG5vdCBzdXBwb3J0ZWQgb24gcG93ZXJwYwotRVhUUkFfT0VDTUFLRV9hcHBlbmRfcG93ZXJwYyA9ICIgLURFTkFCTEVfSklUPU9GRiAiCi1FWFRSQV9PRUNNQUtFX2FwcGVuZF9wb3dlcnBjNjQgPSAiIC1ERU5BQkxFX0pJVD1PRkYgIgotCi0jIEFSTSBKSVQgY29kZSBkb2VzIG5vdCBidWlsZCBvbiBBUk12NC81LzYgYW55bW9yZQotRVhUUkFfT0VDTUFLRV9hcHBlbmRfYXJtdjUgPSAiIC1ERU5BQkxFX0pJVD1PRkYgIgotRVhUUkFfT0VDTUFLRV9hcHBlbmRfYXJtdjYgPSAiIC1ERU5BQkxFX0pJVD1PRkYgIgotRVhUUkFfT0VDTUFLRV9hcHBlbmRfYXJtdjQgPSAiIC1ERU5BQkxFX0pJVD1PRkYgIgotCi0jIGJpbnV0aWxzIDIuMjUuMSBoYXMgYSBidWcgb24gYWFyY2g2NDoKLSMgaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTg0MzAKLUVYVFJBX09FQ01BS0VfYXBwZW5kX2FhcmNoNjQgPSAiIC1EVVNFX0xEX0dPTEQ9T0ZGICIKLUVYVFJBX09FQ01BS0VfYXBwZW5kX21pcHNhcmNoID0gIiAtRFVTRV9MRF9HT0xEPU9GRiAiCi1FWFRSQV9PRUNNQUtFX2FwcGVuZF9wb3dlcnBjID0gIiAtRFVTRV9MRF9HT0xEPU9GRiAiCi1FWFRSQV9PRUNNQUtFX2FwcGVuZF90b29sY2hhaW4tY2xhbmcgPSAiIC1EVVNFX0xEX0dPTEQ9T0ZGICIKLQotRVhUUkFfT0VDTUFLRV9hcHBlbmRfYWFyY2g2NCA9ICIgLURXVEZfQ1BVX0FSTTY0X0NPUlRFWEE1Mz1PTiIKLQotIyBKSVQgbm90IHN1cHBvcnRlZCBvbiBNSVBTIGVpdGhlcgotRVhUUkFfT0VDTUFLRV9hcHBlbmRfbWlwc2FyY2ggPSAiIC1ERU5BQkxFX0pJVD1PRkYgIgotCi0jIEpJVCBub3Qgc3VwcG9ydGVkIG9uIFgzMgotIyBBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIHVwc3RyZWFtIEpJVCBzdXBwb3J0IGZvciB4MzIgaW4KLSMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDQ1MCwgYnV0IHRoaXMgd2FzIGNsb3NlZCBhcwotIyB1bnJlc29sdmVkIGR1ZSB0byBsaW1pdGVkIFgzMiBhZG9wdGlvbi4KLUVYVFJBX09FQ01BS0VfYXBwZW5kX3g4Ni14MzIgPSAiIC1ERU5BQkxFX0pJVD1PRkYgIgotCi1TRUNVUklUWV9DRkxBR1NfcmVtb3ZlX2FhcmNoNjQgPSAiLWZwaWUiCi1TRUNVUklUWV9DRkxBR1NfYXBwZW5kX2FhcmNoNjQgPSAiIC1mUElFIgotCi1GSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3dlYmtpdDJndGstNC4wL2luamVjdGVkLWJ1bmRsZS9saWJ3ZWJraXQyZ3RraW5qZWN0ZWRidW5kbGUuc28iCi0KLVJSRUNPTU1FTkRTXyR7UE59ICs9ICJjYS1jZXJ0aWZpY2F0ZXMgc2hhcmVkLW1pbWUtaW5mbyIKLQotIyBodHRwOi8vZXJyb3JzLnlvY3RvcHJvamVjdC5vcmcvRXJyb3JzL0RldGFpbHMvMjAzNzAvCi1BUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY0ID0gImFybSIKLUFSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjUgPSAiYXJtIgotQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NiA9ICJhcm0iCi0KLSMgaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3Nob3dfYnVnLmNnaT9pZD05NDc0Ci0jIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk4ODAKLSMgSlNDIEpJVCBjYW4gYnVpbGQgb24gQVJNdjcgd2l0aCAtbWFybSwgYnV0IGRvZXNuJ3Qgd29yayBvbiBydW50aW1lLgotIyBVcHN0cmVhbSBvbmx5IHRlc3RzIHJlZ3VsYXJseSB0aGUgSlNDIEpJVCBvbiBBUk12NyB3aXRoIFRodW1iMiAoLW10aHVtYikuCi1BUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY3YSA9ICJ0aHVtYiIKLUFSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjdyID0gInRodW1iIgotQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12N3ZlID0gInRodW1iIgotCi0jIHFlbXU6IHVuY2F1Z2h0IHRhcmdldCBzaWduYWwgMTEgKFNlZ21lbnRhdGlvbiBmYXVsdCkgLSBjb3JlIGR1bXBlZAotIyBTZWdtZW50YXRpb24gZmF1bHQKLUdJX0RBVEFfRU5BQkxFRF9hcm12N2EgPSAiRmFsc2UiCi1HSV9EQVRBX0VOQUJMRURfYXJtdjd2ZSA9ICJGYWxzZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvd2Via2l0Z3RrXzIuMTguNi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvd2Via2l0Z3RrXzIuMTguNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjBmZjhmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGtfMi4xOC42LmJiCkBAIC0wLDAgKzEsMTIxIEBACitTVU1NQVJZID0gIldlYktpdCB3ZWIgcmVuZGVyaW5nIGVuZ2luZSBmb3IgdGhlIEdUSysgcGxhdGZvcm0iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVncy53ZWJraXQub3JnLyIKKworTElDRU5TRSA9ICJCU0QgJiBMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vU291cmNlL0phdmFTY3JpcHRDb3JlL0NPUFlJTkcuTElCO21kNT1kMGM2ZDYzOTdhNWQ4NDI4NmRkYTc1OGRhNTdiZDY5MSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9Tb3VyY2UvV2ViQ29yZS9MSUNFTlNFLUFQUExFO21kNT00NjQ2ZjkwMDgyYzQwYmNmMjk4YzI4NWY4YmFiMGIxMiBcCisJCSAgICBmaWxlOi8vU291cmNlL1dlYkNvcmUvTElDRU5TRS1MR1BMLTI7bWQ1PTM2MzU3ZmZkZTJiNjRhZTE3N2IyNDk0NDQ1Yjc5ZDIxIFwKKwkJICAgIGZpbGU6Ly9Tb3VyY2UvV2ViQ29yZS9MSUNFTlNFLUxHUEwtMi4xO21kNT1hNzc4YTMzZWYzMzhhYmJhZjhiOGE3YzM2YjZlZWM4MCBcCisJCSAgICIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpbmRHT2JqZWN0SW50cm9zcGVjdGlvbi5jbWFrZS1wcmVmaXgtdmFyaWFibGVzLW9idGEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1XaGVuLWJ1aWxkaW5nLWludHJvc3BlY3Rpb24tZmlsZXMtYWRkLUNNQUtFX0NfRkxBR1MtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtT3B0aW9uc0dUSy5jbWFrZS1kcm9wLXRoZS1oYXJkY29kZWQtaW50cm9zcGVjdGlvbi1ndC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1yYWN5LXBhcmFsbGVsLWJ1aWxkLW9mLVdlYktpdDItNC4wLmdpci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVR3ZWFrLWd0a2RvYy1zZXR0aW5ncy1zby10aGF0LWd0a2RvYy1nZW5lcmF0aW9uLXdvcmsucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8veDMyX3N1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY3Jvc3MtY29tcGlsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kZXRlY3QtYXRvbWljcy1kdXJpbmctY29uZmlndXJlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtV2ViS2l0TWFjcm9zLUFwcGVuZC10by1JLWFuZC1ub3QtdG8taXN5c3RlbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1idWlsZC13aXRoLW11c2wucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjMWE1NDg1OTUxMzVlZTc1YWQzYmYyZTE4YWM4MzExMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5MzkxMmNjMmY0MGYxMmU0NTJiZTFjYTRiYWJkYmRhYWMwZWM0ZjgyOGQ0NDEyNTdhNmIwNmMyOTYzYmJhYzNjIgorCitpbmhlcml0IGNtYWtlIHBrZ2NvbmZpZyBnb2JqZWN0LWludHJvc3BlY3Rpb24gcGVybG5hdGl2ZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGd0ay1kb2MKKworIyBkZXBlbmRzIG9uIGxpYnh0CitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitERVBFTkRTID0gInpsaWIgbGlic291cC0yLjQgY3VybCBsaWJ4bWwyIGNhaXJvIGxpYnhzbHQgbGlieHQgbGliaWRuIGxpYmdjcnlwdCBcCisgICAgICAgICAgIGd0ayszIGdzdHJlYW1lcjEuMCBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGZsZXgtbmF0aXZlIGdwZXJmLW5hdGl2ZSBzcWxpdGUzIFwKKwkgICBwYW5nbyBpY3UgYmlzb24tbmF0aXZlIGdhd2sgaW50bHRvb2wtbmF0aXZlIGxpYndlYnAgXAorCSAgIGF0ayB1ZGV2IGhhcmZidXp6IGpwZWcgbGlicG5nIHB1bHNlYXVkaW8gbGlicnN2ZyBsaWJ0aGVvcmEgbGlidm9yYmlzIGxpYnhjb21wb3NpdGUgbGlieHRzdCBcCisJICAgcnVieS1uYXRpdmUgbGlibm90aWZ5IGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCBcCisJICAgZ2V0dGV4dC1uYXRpdmUgZ2xpYi0yLjAgZ2xpYi0yLjAtbmF0aXZlIGxpYnRhc24xIFwKKyAgICAgICAgICAiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnd2F5bGFuZCcgLGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnd2ViZ2wgb3BlbmdsJywgJycgLGQpfSBcCisgICAgICAgICAgICAgICAgICAgZW5jaGFudCBcCisgICAgICAgICAgICAgICAgICAgbGlic2VjcmV0IFwKKyAgICAgICAgICAgICAgICAgICIKKworUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSA9ICItREVOQUJMRV9XQVlMQU5EX1RBUkdFVD1PTiwtREVOQUJMRV9XQVlMQU5EX1RBUkdFVD1PRkYsd2F5bGFuZCIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItREVOQUJMRV9YMTFfVEFSR0VUPU9OLC1ERU5BQkxFX1gxMV9UQVJHRVQ9T0ZGLHZpcnR1YWwvbGlieDExIgorUEFDS0FHRUNPTkZJR1tnZW9jbHVlXSA9ICItREVOQUJMRV9HRU9MT0NBVElPTj1PTiwtREVOQUJMRV9HRU9MT0NBVElPTj1PRkYsZ2VvY2x1ZSIKK1BBQ0tBR0VDT05GSUdbZW5jaGFudF0gPSAiLURFTkFCTEVfU1BFTExDSEVDSz1PTiwtREVOQUJMRV9TUEVMTENIRUNLPU9GRixlbmNoYW50IgorUEFDS0FHRUNPTkZJR1tndGsyXSA9ICItREVOQUJMRV9QTFVHSU5fUFJPQ0VTU19HVEsyPU9OLC1ERU5BQkxFX1BMVUdJTl9QUk9DRVNTX0dUSzI9T0ZGLGd0aysiCitQQUNLQUdFQ09ORklHW2dsZXMyXSA9ICItREVOQUJMRV9HTEVTMj1PTiwtREVOQUJMRV9HTEVTMj1PRkYsdmlydHVhbC9saWJnbGVzMiIKK1BBQ0tBR0VDT05GSUdbd2ViZ2xdID0gIi1ERU5BQkxFX1dFQkdMPU9OLC1ERU5BQkxFX1dFQkdMPU9GRix2aXJ0dWFsL2xpYmdsIgorUEFDS0FHRUNPTkZJR1tvcGVuZ2xdID0gIi1ERU5BQkxFX09QRU5HTD1PTiwtREVOQUJMRV9PUEVOR0w9T0ZGLHZpcnR1YWwvbGliZ2wiCitQQUNLQUdFQ09ORklHW2xpYnNlY3JldF0gPSAiLURVU0VfTElCU0VDUkVUPU9OLC1EVVNFX0xJQlNFQ1JFVD1PRkYsbGlic2VjcmV0IgorUEFDS0FHRUNPTkZJR1tsaWJoeXBoZW5dID0gIi1EVVNFX0xJQkhZUEhFTj1PTiwtRFVTRV9MSUJIWVBIRU49T0ZGLGxpYmh5cGhlbiIKKworRVhUUkFfT0VDTUFLRSA9ICIgXAorCQktRFBPUlQ9R1RLIFwKKwkJLURDTUFLRV9CVUlMRF9UWVBFPVJlbGVhc2UgXAorCQkke0BiYi51dGlscy5jb250YWlucygnR0lfREFUQV9FTkFCTEVEJywgJ1RydWUnLCAnLURFTkFCTEVfSU5UUk9TUEVDVElPTj1PTicsICctREVOQUJMRV9JTlRST1NQRUNUSU9OPU9GRicsIGQpfSBcCisJCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdHVEtET0NfRU5BQkxFRCcsICdUcnVlJywgJy1ERU5BQkxFX0dUS0RPQz1PTicsICctREVOQUJMRV9HVEtET0M9T0ZGJywgZCl9IFwKKwkJLURFTkFCTEVfTUlOSUJST1dTRVI9T04gXAorICAgICAgICAgICAgICAgIC1EUFlUSE9OX0VYRUNVVEFCTEU9YHdoaWNoIHB5dGhvbmAgXAorCQkiCisKKyMgR0wvR0xFUyBoZWFkZXIgY2xhc2g6IGJvdGggZGVmaW5lIHRoZSBzYW1lIHRoaW5nLCBkaWZmZXJlbnRseSwgb24gMzIgYml0IHg4NgorRVhUUkFfT0VDTUFLRV9hcHBlbmRfeDg2ID0gIiAtRFVTRV9HU1RSRUFNRVJfR0w9T0ZGICIKK0VYVFJBX09FQ01BS0VfYXBwZW5kX3g4Ni14MzIgPSAiIC1EVVNFX0dTVFJFQU1FUl9HTD1PRkYgIgorCisjIEphdmFzY3JpcHQgSklUIGlzIG5vdCBzdXBwb3J0ZWQgb24gcG93ZXJwYworRVhUUkFfT0VDTUFLRV9hcHBlbmRfcG93ZXJwYyA9ICIgLURFTkFCTEVfSklUPU9GRiAiCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9wb3dlcnBjNjQgPSAiIC1ERU5BQkxFX0pJVD1PRkYgIgorCisjIEFSTSBKSVQgY29kZSBkb2VzIG5vdCBidWlsZCBvbiBBUk12NC81LzYgYW55bW9yZQorRVhUUkFfT0VDTUFLRV9hcHBlbmRfYXJtdjUgPSAiIC1ERU5BQkxFX0pJVD1PRkYgIgorRVhUUkFfT0VDTUFLRV9hcHBlbmRfYXJtdjYgPSAiIC1ERU5BQkxFX0pJVD1PRkYgIgorRVhUUkFfT0VDTUFLRV9hcHBlbmRfYXJtdjQgPSAiIC1ERU5BQkxFX0pJVD1PRkYgIgorCisjIGJpbnV0aWxzIDIuMjUuMSBoYXMgYSBidWcgb24gYWFyY2g2NDoKKyMgaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTg0MzAKK0VYVFJBX09FQ01BS0VfYXBwZW5kX2FhcmNoNjQgPSAiIC1EVVNFX0xEX0dPTEQ9T0ZGICIKK0VYVFJBX09FQ01BS0VfYXBwZW5kX21pcHNhcmNoID0gIiAtRFVTRV9MRF9HT0xEPU9GRiAiCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9wb3dlcnBjID0gIiAtRFVTRV9MRF9HT0xEPU9GRiAiCitFWFRSQV9PRUNNQUtFX2FwcGVuZF90b29sY2hhaW4tY2xhbmcgPSAiIC1EVVNFX0xEX0dPTEQ9T0ZGICIKKworRVhUUkFfT0VDTUFLRV9hcHBlbmRfYWFyY2g2NCA9ICIgLURXVEZfQ1BVX0FSTTY0X0NPUlRFWEE1Mz1PTiIKKworIyBKSVQgbm90IHN1cHBvcnRlZCBvbiBNSVBTIGVpdGhlcgorRVhUUkFfT0VDTUFLRV9hcHBlbmRfbWlwc2FyY2ggPSAiIC1ERU5BQkxFX0pJVD1PRkYgIgorCisjIEpJVCBub3Qgc3VwcG9ydGVkIG9uIFgzMgorIyBBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIHVwc3RyZWFtIEpJVCBzdXBwb3J0IGZvciB4MzIgaW4KKyMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDQ1MCwgYnV0IHRoaXMgd2FzIGNsb3NlZCBhcworIyB1bnJlc29sdmVkIGR1ZSB0byBsaW1pdGVkIFgzMiBhZG9wdGlvbi4KK0VYVFJBX09FQ01BS0VfYXBwZW5kX3g4Ni14MzIgPSAiIC1ERU5BQkxFX0pJVD1PRkYgIgorCitTRUNVUklUWV9DRkxBR1NfcmVtb3ZlX2FhcmNoNjQgPSAiLWZwaWUiCitTRUNVUklUWV9DRkxBR1NfYXBwZW5kX2FhcmNoNjQgPSAiIC1mUElFIgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3dlYmtpdDJndGstNC4wL2luamVjdGVkLWJ1bmRsZS9saWJ3ZWJraXQyZ3RraW5qZWN0ZWRidW5kbGUuc28iCisKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICJjYS1jZXJ0aWZpY2F0ZXMgc2hhcmVkLW1pbWUtaW5mbyIKKworIyBodHRwOi8vZXJyb3JzLnlvY3RvcHJvamVjdC5vcmcvRXJyb3JzL0RldGFpbHMvMjAzNzAvCitBUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY0ID0gImFybSIKK0FSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjUgPSAiYXJtIgorQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NiA9ICJhcm0iCisKKyMgaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3Nob3dfYnVnLmNnaT9pZD05NDc0CisjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk4ODAKKyMgSlNDIEpJVCBjYW4gYnVpbGQgb24gQVJNdjcgd2l0aCAtbWFybSwgYnV0IGRvZXNuJ3Qgd29yayBvbiBydW50aW1lLgorIyBVcHN0cmVhbSBvbmx5IHRlc3RzIHJlZ3VsYXJseSB0aGUgSlNDIEpJVCBvbiBBUk12NyB3aXRoIFRodW1iMiAoLW10aHVtYikuCitBUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY3YSA9ICJ0aHVtYiIKK0FSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjdyID0gInRodW1iIgorQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12N3ZlID0gInRodW1iIgorCisjIHFlbXU6IHVuY2F1Z2h0IHRhcmdldCBzaWduYWwgMTEgKFNlZ21lbnRhdGlvbiBmYXVsdCkgLSBjb3JlIGR1bXBlZAorIyBTZWdtZW50YXRpb24gZmF1bHQKK0dJX0RBVEFfRU5BQkxFRF9hcm12N2EgPSAiRmFsc2UiCitHSV9EQVRBX0VOQUJMRURfYXJtdjd2ZSA9ICJGYWxzZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLXV0aWxfMS41LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci11dGlsXzEuNS40LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjg2NzZmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLXV0aWxfMS41LjQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi1TVU1NQVJZID0gIkFwYWNoZSBQb3J0YWJsZSBSdW50aW1lIChBUFIpIGNvbXBhbmlvbiBsaWJyYXJ5IgotSE9NRVBBR0UgPSAiaHR0cDovL2Fwci5hcGFjaGUub3JnLyIKLVNFQ1RJT04gPSAibGlicyIKLURFUEVORFMgPSAiYXByIGV4cGF0IGdkYm0iCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKLQotTElDRU5TRSA9ICJBcGFjaGUtMi4wIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NTE5ZTBhMThlMDNmN2MwMjMwNzA1NjhjMTRiMDc3YmIgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9hcHVfdmVyc2lvbi5oO2VuZGxpbmU9MTc7bWQ1PTgwNjY4NWE4NGU3MWYxMGM4MDE0NGM0OGViMzVkZjQyIgotCi1TUkNfVVJJID0gIiR7QVBBQ0hFX01JUlJPUn0vYXByLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vY29uZmlnZml4LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZV9maXhlcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAotIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiODY2ODI1YzA0ZGE4MjdjNmU1ZjUzZGFmZjU1NjlmNDIiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTc2YTEyYTU5YmMyODZkNjM0YTIxZDdiZTA4NDFjYzc0Mjg5ZWE5MDc3YWExYWY0NmJlMTlkMWE2ZTg0NGMxOSIKLQotRVhUUkFfT0VDT05GID0gIi0td2l0aC1hcHI9JHtTVEFHSU5HX0JJTkRJUl9DUk9TU30vYXByLTEtY29uZmlnIFwgCi0JCS0td2l0aG91dC1vZGJjIFwKLQkJLS13aXRob3V0LXBnc3FsIFwKLQkJLS13aXRoLWRibT1nZGJtIFwKLQkJLS13aXRoLWdkYm09JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fSBcCi0JCS0td2l0aG91dC1zcWxpdGUyIFwKLQkJLS13aXRoLWV4cGF0PSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0iCi0KLQotaW5oZXJpdCBhdXRvdG9vbHMgbGliX3BhY2thZ2UgYmluY29uZmlnCi0KLVBSID0gInIxIgotCi1PRV9CSU5DT05GSUdfRVhUUkFfTUFOR0xFID0gIiAtZSAnczpsb2NhdGlvbj1zb3VyY2U6bG9jYXRpb249aW5zdGFsbGVkOiciCi0KLWRvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7Ci0JaWYgWyAiJHtDTEFTU09WRVJSSURFfSIgPSAiY2xhc3MtdGFyZ2V0IiBdOyB0aGVuCi0JCWNwICR7U1RBR0lOR19EQVRBRElSfS9hcHIvYXByX3J1bGVzLm1rICR7Qn0vYnVpbGQvcnVsZXMubWsKLQlmaQotfQotZG9fY29uZmlndXJlX3ByZXBlbmRfY2xhc3MtbmF0aXZlKCkgewotCW1rZGlyICR7Qn0vYnVpbGQKLQljcCAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2Fwci9hcHJfcnVsZXMubWsgJHtCfS9idWlsZC9ydWxlcy5tawotfQotZG9fY29uZmlndXJlX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7Ci0Jc2VkIC1pICJzI0xJQlRPT0w9XCQoU0hFTEwpIFwkKGFwcl9idWlsZGRpcikjTElCVE9PTD1cJChTSEVMTCkgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9IyIgJHtCfS9idWlsZC9ydWxlcy5tawotCSMgc29tZXRpbWVzIHRoZXJlIGlzbid0IFNIRUxMCi0Jc2VkIC1pICJzI0xJQlRPT0w9XCQoYXByX2J1aWxkZGlyKSNMSUJUT09MPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfSMiICR7Qn0vYnVpbGQvcnVsZXMubWsKLX0KLQotZG9fY29uZmlndXJlX3ByZXBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgewotCWNwICR7U1RBR0lOR19EQVRBRElSfS9hcHIvYXByX3J1bGVzLm1rICR7U30vYnVpbGQvcnVsZXMubWsKLX0KLQotZG9fY29uZmlndXJlX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7Ci0Jc2VkIC1pICJzI1woYXByX2J1aWxkZGlyXCk9LiojXDE9JHtTVEFHSU5HX0RBVEFESVJ9L2J1aWxkLTEjIiAke0J9L2J1aWxkL3J1bGVzLm1rCi0Jc2VkIC1pICJzI1woYXByX2J1aWxkZXJzXCk9LiojXDE9JHtTVEFHSU5HX0RBVEFESVJ9L2J1aWxkLTEjIiAke0J9L2J1aWxkL3J1bGVzLm1rCi0Jc2VkIC1pICJzI1wodG9wX2J1aWxkZGlyXCk9LiojXDE9JHtTVEFHSU5HX0RBVEFESVJ9L2J1aWxkLTEjIiAke0J9L2J1aWxkL3J1bGVzLm1rCi0Jc2VkIC1pICJzI1woTElCVE9PTD1cJChhcHJfYnVpbGRkaXIpXCkuKiNcMS9saWJ0b29sIyIgJHtCfS9idWlsZC9ydWxlcy5tawotfQotCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7Ci0Jc2VkIC1pIC1lICdzLCR7U1RBR0lOR19ESVJfSE9TVH0sLGcnIFwKLQkgICAgICAgLWUgJ3MsQVBVX1NPVVJDRV9ESVI9LiosQVBSX1NPVVJDRV9ESVI9LGcnIFwKLQkgICAgICAgLWUgJ3MsQVBVX0JVSUxEX0RJUj0uKixBUFJfQlVJTERfRElSPSxnJyAke0R9JHtiaW5kaXJ9L2FwdS0xLWNvbmZpZwotfQotCi1QQUNLQUdFQ09ORklHID8/PSAiY3J5cHRvIgotUEFDS0FHRUNPTkZJR1tsZGFwXSA9ICItLXdpdGgtbGRhcCwtLXdpdGhvdXQtbGRhcCxvcGVubGRhcCIKLVBBQ0tBR0VDT05GSUdbY3J5cHRvXSA9ICItLXdpdGgtb3BlbnNzbD0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9IC0td2l0aC1jcnlwdG8sLS13aXRob3V0LWNyeXB0byxvcGVuc3NsIgotUEFDS0FHRUNPTkZJR1tzcWxpdGUzXSA9ICItLXdpdGgtc3FsaXRlMz0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9LC0td2l0aG91dC1zcWxpdGUzLHNxbGl0ZTMiCi0KLSNmaWxlcyAke2xpYmRpcn0vYXByLXV0aWwtMS8qLnNvIGFyZSBub3Qgc3ltbGlua3MgYnV0IGxvYWRhYmxlIG1vZHVsZXMgdGh1cyB0aGV5IGFyZSBwYWNrYWdlZCBpbiAke1BOfQotRklMRVNfJHtQTn0gICAgICs9ICIke2xpYmRpcn0vYXByLXV0aWwtMS9hcHIqJHtTT0xJQlN9ICR7bGliZGlyfS9hcHItdXRpbC0xL2Fwcioke1NPTElCU0RFVn0iCi1GSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9hcHJ1dGlsLmV4cCAke2xpYmRpcn0vYXByLXV0aWwtMS8qLmxhIgotRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vYXByLXV0aWwtMS8qLmEiCi0KLUlOU0FORV9TS0lQXyR7UE59ICs9ICJkZXYtc28iCi0KLWluaGVyaXQgcHRlc3QKLQotUkRFUEVORFNfJHtQTn0tcHRlc3RfYXBwZW5kX2xpYmMtZ2xpYmMgPSAiIGdsaWJjLWdjb252LWlzbzg4NTktMSBnbGliYy1nY29udi1pc284ODU5LTIgZ2xpYmMtZ2NvbnYtdXRmLTciCi0KLWRvX2NvbXBpbGVfcHRlc3QoKSB7Ci0JY2QgJHtCfS90ZXN0Ci0Jb2VfcnVubWFrZQotfQotCi1kb19pbnN0YWxsX3B0ZXN0KCkgewotCXQ9JHtEfSR7UFRFU1RfUEFUSH0vdGVzdAotCW1rZGlyICR0Ci0JZm9yIGkgaW4gdGVzdGFsbCBkYXRhOyBkbyBcCi0JICBjcCAtciAke0J9L3Rlc3QvJGkgJHQ7IFwKLQlkb25lCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci11dGlsXzEuNi4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbF8xLjYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDhkMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbF8xLjYuMC5iYgpAQCAtMCwwICsxLDk1IEBACitTVU1NQVJZID0gIkFwYWNoZSBQb3J0YWJsZSBSdW50aW1lIChBUFIpIGNvbXBhbmlvbiBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL2Fwci5hcGFjaGUub3JnLyIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAiYXByIGV4cGF0IGdkYm0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworTElDRU5TRSA9ICJBcGFjaGUtMi4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MTU4YWEwYjFlZmUwYzEyZjIzZDRiMDA3ZGRiOWE1ZGIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9hcHVfdmVyc2lvbi5oO2VuZGxpbmU9MTc7bWQ1PTgwNjY4NWE4NGU3MWYxMGM4MDE0NGM0OGViMzVkZjQyIgorCitTUkNfVVJJID0gIiR7QVBBQ0hFX01JUlJPUn0vYXByLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlnZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZV9maXhlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiM2IwM2RiZmY2MDcyOGE0ZjRjMzNmNWQ5MjllOGIzNWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDgzZWY0ZDU5ZTZhYzlhMzZjN2QzZmQ4N2FkN2I5ZGI3YWQ4YWUyOWMwNmI5ZGQ4ZmYyMmRkYTFjYzQxNjM4OSIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1hcHI9JHtTVEFHSU5HX0JJTkRJUl9DUk9TU30vYXByLTEtY29uZmlnIFwgCisJCS0td2l0aG91dC1vZGJjIFwKKwkJLS13aXRob3V0LXBnc3FsIFwKKwkJLS13aXRoLWRibT1nZGJtIFwKKwkJLS13aXRoLWdkYm09JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fSBcCisJCS0td2l0aG91dC1zcWxpdGUyIFwKKwkJLS13aXRoLWV4cGF0PSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0iCisKKworaW5oZXJpdCBhdXRvdG9vbHMgbGliX3BhY2thZ2UgYmluY29uZmlnCisKK1BSID0gInIxIgorCitPRV9CSU5DT05GSUdfRVhUUkFfTUFOR0xFID0gIiAtZSAnczpsb2NhdGlvbj1zb3VyY2U6bG9jYXRpb249aW5zdGFsbGVkOiciCisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJaWYgWyAiJHtDTEFTU09WRVJSSURFfSIgPSAiY2xhc3MtdGFyZ2V0IiBdOyB0aGVuCisJCWNwICR7U1RBR0lOR19EQVRBRElSfS9hcHIvYXByX3J1bGVzLm1rICR7Qn0vYnVpbGQvcnVsZXMubWsKKwlmaQorfQorZG9fY29uZmlndXJlX3ByZXBlbmRfY2xhc3MtbmF0aXZlKCkgeworCW1rZGlyICR7Qn0vYnVpbGQKKwljcCAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2Fwci9hcHJfcnVsZXMubWsgJHtCfS9idWlsZC9ydWxlcy5taworfQorZG9fY29uZmlndXJlX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJc2VkIC1pICJzI0xJQlRPT0w9XCQoU0hFTEwpIFwkKGFwcl9idWlsZGRpcikjTElCVE9PTD1cJChTSEVMTCkgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9IyIgJHtCfS9idWlsZC9ydWxlcy5taworCSMgc29tZXRpbWVzIHRoZXJlIGlzbid0IFNIRUxMCisJc2VkIC1pICJzI0xJQlRPT0w9XCQoYXByX2J1aWxkZGlyKSNMSUJUT09MPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfSMiICR7Qn0vYnVpbGQvcnVsZXMubWsKK30KKworZG9fY29uZmlndXJlX3ByZXBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworCWNwICR7U1RBR0lOR19EQVRBRElSfS9hcHIvYXByX3J1bGVzLm1rICR7U30vYnVpbGQvcnVsZXMubWsKK30KKworZG9fY29uZmlndXJlX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisJc2VkIC1pICJzI1woYXByX2J1aWxkZGlyXCk9LiojXDE9JHtTVEFHSU5HX0RBVEFESVJ9L2J1aWxkLTEjIiAke0J9L2J1aWxkL3J1bGVzLm1rCisJc2VkIC1pICJzI1woYXByX2J1aWxkZXJzXCk9LiojXDE9JHtTVEFHSU5HX0RBVEFESVJ9L2J1aWxkLTEjIiAke0J9L2J1aWxkL3J1bGVzLm1rCisJc2VkIC1pICJzI1wodG9wX2J1aWxkZGlyXCk9LiojXDE9JHtTVEFHSU5HX0RBVEFESVJ9L2J1aWxkLTEjIiAke0J9L2J1aWxkL3J1bGVzLm1rCisJc2VkIC1pICJzI1woTElCVE9PTD1cJChhcHJfYnVpbGRkaXIpXCkuKiNcMS9saWJ0b29sIyIgJHtCfS9idWlsZC9ydWxlcy5taworfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7CisJc2VkIC1pIC1lICdzLCR7U1RBR0lOR19ESVJfSE9TVH0sLGcnIFwKKwkgICAgICAgLWUgJ3MsQVBVX1NPVVJDRV9ESVI9LiosQVBSX1NPVVJDRV9ESVI9LGcnIFwKKwkgICAgICAgLWUgJ3MsQVBVX0JVSUxEX0RJUj0uKixBUFJfQlVJTERfRElSPSxnJyAke0R9JHtiaW5kaXJ9L2FwdS0xLWNvbmZpZworfQorCitQQUNLQUdFQ09ORklHID8/PSAiY3J5cHRvIgorUEFDS0FHRUNPTkZJR1tsZGFwXSA9ICItLXdpdGgtbGRhcCwtLXdpdGhvdXQtbGRhcCxvcGVubGRhcCIKK1BBQ0tBR0VDT05GSUdbY3J5cHRvXSA9ICItLXdpdGgtb3BlbnNzbD0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9IC0td2l0aC1jcnlwdG8sLS13aXRob3V0LWNyeXB0byxvcGVuc3NsIgorUEFDS0FHRUNPTkZJR1tzcWxpdGUzXSA9ICItLXdpdGgtc3FsaXRlMz0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9LC0td2l0aG91dC1zcWxpdGUzLHNxbGl0ZTMiCisKKyNmaWxlcyAke2xpYmRpcn0vYXByLXV0aWwtMS8qLnNvIGFyZSBub3Qgc3ltbGlua3MgYnV0IGxvYWRhYmxlIG1vZHVsZXMgdGh1cyB0aGV5IGFyZSBwYWNrYWdlZCBpbiAke1BOfQorRklMRVNfJHtQTn0gICAgICs9ICIke2xpYmRpcn0vYXByLXV0aWwtMS9hcHIqJHtTT0xJQlN9ICR7bGliZGlyfS9hcHItdXRpbC0xL2Fwcioke1NPTElCU0RFVn0iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9hcHJ1dGlsLmV4cCAke2xpYmRpcn0vYXByLXV0aWwtMS8qLmxhIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vYXByLXV0aWwtMS8qLmEiCisKK0lOU0FORV9TS0lQXyR7UE59ICs9ICJkZXYtc28iCisKK2luaGVyaXQgcHRlc3QKKworUkRFUEVORFNfJHtQTn0tcHRlc3RfYXBwZW5kX2xpYmMtZ2xpYmMgPSAiIGdsaWJjLWdjb252LWlzbzg4NTktMSBnbGliYy1nY29udi1pc284ODU5LTIgZ2xpYmMtZ2NvbnYtdXRmLTciCisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJY2QgJHtCfS90ZXN0CisJb2VfcnVubWFrZQorfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCXQ9JHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCW1rZGlyICR0CisJZm9yIGkgaW4gdGVzdGFsbCBkYXRhOyBkbyBcCisJICBjcCAtciAke0J9L3Rlc3QvJGkgJHQ7IFwKKwlkb25lCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci8wMDAxLWFwci1maXgtb2ZmX3Qtc2l6ZS1kb2Vzbi10LW1hdGNoLWluLWdsaWJjLXdoZW4tY3Jvc3MucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci8wMDAxLWFwci1maXgtb2ZmX3Qtc2l6ZS1kb2Vzbi10LW1hdGNoLWluLWdsaWJjLXdoZW4tY3Jvc3MucGF0Y2gKaW5kZXggMTIzNzE0Mi4uYzVlOTJhYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvMDAwMS1hcHItZml4LW9mZl90LXNpemUtZG9lc24tdC1tYXRjaC1pbi1nbGliYy13aGVuLWNyb3NzLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLzAwMDEtYXByLWZpeC1vZmZfdC1zaXplLWRvZXNuLXQtbWF0Y2gtaW4tZ2xpYmMtd2hlbi1jcm9zcy5wYXRjaApAQCAtMjcsNiArMjcsOCBAQAogQ2hhbmdlIHRoZSBhYm92ZSBjb3JyZXNwb25kaW5nbHkuCiAKIFNpZ25lZC1vZmYtYnk6IERlbmdrZSBEdSA8ZGVuZ2tlLmR1QHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZwogLS0tCiAgY29uZmlndXJlLmluIHwgOCArKysrLS0tLQogIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwcl8xLjUuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByXzEuNS4yLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTJiNTYxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByXzEuNS4yLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLVNVTU1BUlkgPSAiQXBhY2hlIFBvcnRhYmxlIFJ1bnRpbWUgKEFQUikgbGlicmFyeSIKLUhPTUVQQUdFID0gImh0dHA6Ly9hcHIuYXBhY2hlLm9yZy8iCi1TRUNUSU9OID0gImxpYnMiCi1ERVBFTkRTID0gInV0aWwtbGludXgiCi0KLUxJQ0VOU0UgPSAiQXBhY2hlLTIuMCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTRkZmQ0Y2QyMTY4MjhjOGNhZTVkZTVhMTJmMzg0NGM4IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvYXByX2xpYi5oO2VuZGxpbmU9MTc7bWQ1PWVlNDJmYTc1NzVkYzQwNTgwYTllMDFjMWI3NWZhZTk2IgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCi0KLVNSQ19VUkkgPSAiJHtBUEFDSEVfTUlSUk9SfS9hcHIvJHtCUE59LSR7UFZ9LnRhci5iejIgXAotICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlX2ZpeGVzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2NsZWFudXAucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vY29uZmlnZml4LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCi0gICAgICAgICAgIGZpbGU6Ly91cGdyYWRlLWFuZC1maXgtMS41LjEucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vRml4LXBhY2tldC1kaXNjYXJkcy1IVFRQLXJlZGlyZWN0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5pbi1maXgtTFRGTEFHUy10by1tYWtlLWl0LXdvcmstd2l0aC1jY2FjaGUucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1hcHItZml4LW9mZl90LXNpemUtZG9lc24tdC1tYXRjaC1pbi1nbGliYy13aGVuLWNyb3NzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDItZXhwbGljaXRseS1saW5rLWxpYmFwci1hZ2FpbnN0LXBodHJlYWQtdG8tbWFrZS1nb2xkLS5wYXRjaCBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI0ZTk3NjlmMzM0OWZlMTFmYzBhNWUxYjIyNGMyMzZhYSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI3ZDAzZWQyOWMyMmE3MTUyYmU0NWI4ZTUwNDMxMDYzNzM2ZGY5ZTFkYWExZGRmOTNmNmE1NDdiYTdhMjhmNjdhIgotCi1pbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgbGliX3BhY2thZ2UgYmluY29uZmlnIG11bHRpbGliX2hlYWRlciBwdGVzdAotCi1PRV9CSU5DT05GSUdfRVhUUkFfTUFOR0xFID0gIiAtZSAnczpsb2NhdGlvbj1zb3VyY2U6bG9jYXRpb249aW5zdGFsbGVkOiciCi0KLSMgQWRkZWQgdG8gZml4IHNvbWUgaXNzdWVzIHdpdGggY21ha2UuIFJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9ibXdjYXJpdC9tZXRhLXJvcy9pc3N1ZXMvNjgjaXNzdWVjb21tZW50LTE5ODk2OTI4Ci1DQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYXByX2N2X211dGV4X3JlY3Vyc2l2ZT15ZXMiCi0KLSMgQWxzbyBzdXBwcmVzcyB0cnlpbmcgdG8gdXNlIHNjdHAuCi0jCi1DQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF9oPW5vIGFjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfdWlvX2g9bm8iCi0KLSMgT3RoZXJ3aXNlIGxpYnRvb2wgZmFpbHMgdG8gY29tcGlsZSBhcHItdXRpbHMKLSMgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGNvbXBpbGU6IHVuYWJsZSB0byBpbmZlciB0YWdnZWQgY29uZmlndXJhdGlvbgotIyB4ODZfNjQtbGludXgtbGlidG9vbDogICBlcnJvcjogc3BlY2lmeSBhIHRhZyB3aXRoICctLXRhZycKLUNDQUNIRSA9ICIiCi0KLVBBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5maWx0ZXIoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgZCl9IgotUEFDS0FHRUNPTkZJR1tpcHY2XSA9ICItLWVuYWJsZS1pcHY2LC0tZGlzYWJsZS1pcHY2LCIKLQotZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7Ci0JIyBBdm9pZCBhYnNvbHV0ZSBwYXRocyBmb3IgZ3JlcCBzaW5jZSBpdCBjYXVzZXMgZmFpbHVyZXMKLQkjIHdoZW4gdXNpbmcgc3N0YXRlIGJldHdlZW4gZGlmZmVyZW50IGhvc3RzIHdpdGggZGlmZmVyZW50Ci0JIyBpbnN0YWxsIHBhdGhzIGZvciBncmVwLgotCWV4cG9ydCBHUkVQPSJncmVwIgotCi0JY2QgJHtTfQotCS4vYnVpbGRjb25mCi19Ci0KLUZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2Fwci5leHAgJHtkYXRhZGlyfS9idWlsZC0xLyoiCi1SREVQRU5EU18ke1BOfS1kZXYgKz0gImJhc2giCi0KLSNmb3Igc29tZSByZWFzb24sIGJ1aWxkL2xpYnRvb2wubTQgaGFuZGxlZCBieSBidWlsZGNvbmYgc3RpbGwgYmUgb3ZlcndyaXR0ZW4KLSN3aGVuIGF1dG9jb25mLCBzbyBoYW5kbGUgaXQgYWdhaW4uCi1kb19jb25maWd1cmVfYXBwZW5kKCkgewotCXNlZCAtaSAtZSAncy9MSUJUT09MPVwoLipcKXRvcF9idWlsZC9MSUJUT09MPVwxYXByX2J1aWxkLycgJHtTfS9idWlsZC9saWJ0b29sLm00Ci0Jc2VkIC1pIC1lICdzL0xJQlRPT0w9XCguKlwpdG9wX2J1aWxkL0xJQlRPT0w9XDFhcHJfYnVpbGQvJyAke1N9L2J1aWxkL2Fwcl9ydWxlcy5tawotfQotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQlvZV9tdWx0aWxpYl9oZWFkZXIgYXByLmgKLQlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2FwcgotfQotCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7Ci0Jc2VkIC1pIC1lICdzLCR7U1RBR0lOR19ESVJfSE9TVH0sLGcnICR7RH0ke2RhdGFkaXJ9L2J1aWxkLTEvYXByX3J1bGVzLm1rCi0Jc2VkIC1pIC1lICdzLCR7U1RBR0lOR19ESVJfSE9TVH0sLGcnIFwKLQkgICAgICAgLWUgJ3MsQVBSX1NPVVJDRV9ESVI9LiosQVBSX1NPVVJDRV9ESVI9LGcnIFwKLQkgICAgICAgLWUgJ3MsQVBSX0JVSUxEX0RJUj0uKixBUFJfQlVJTERfRElSPSxnJyAke0R9JHtiaW5kaXJ9L2Fwci0xLWNvbmZpZwotfQotCi1TU1RBVEVfU0NBTl9GSUxFUyArPSAiYXByX3J1bGVzLm1rIGxpYnRvb2wiCi0KLVNZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiYXByX3N5c3Jvb3RfcHJlcHJvY2VzcyIKLQotYXByX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7Ci0JZD0ke1NZU1JPT1RfREVTVERJUn0ke2RhdGFkaXJ9L2FwcgotCWluc3RhbGwgLWQgJGQvCi0JY3AgJHtTfS9idWlsZC9hcHJfcnVsZXMubWsgJGQvCi0Jc2VkIC1pIHMsYXByX2J1aWxkZGlyPS4qLGFwcl9idWlsZGRpcj0sZyAkZC9hcHJfcnVsZXMubWsKLQlzZWQgLWkgcyxhcHJfYnVpbGRlcnM9LiosYXByX2J1aWxkZXJzPSxnICRkL2Fwcl9ydWxlcy5tawotCXNlZCAtaSBzLExJQlRPT0w9LiosTElCVE9PTD0ke0hPU1RfU1lTfS1saWJ0b29sLGcgJGQvYXByX3J1bGVzLm1rCi0Jc2VkIC1pIHMsXCRcKGFwcl9idWlsZGVyc1wpLCR7U1RBR0lOR19EQVRBRElSfS9hcHIvLGcgJGQvYXByX3J1bGVzLm1rCi0JY3AgJHtTfS9idWlsZC9ta2Rpci5zaCAkZC8KLQljcCAke1N9L2J1aWxkL21ha2VfZXhwb3J0cy5hd2sgJGQvCi0JY3AgJHtTfS9idWlsZC9tYWtlX3Zhcl9leHBvcnQuYXdrICRkLwotCWNwICR7U30vJHtIT1NUX1NZU30tbGlidG9vbCAke1NZU1JPT1RfREVTVERJUn0ke2RhdGFkaXJ9L2J1aWxkLTEvbGlidG9vbAotfQotCi1kb19jb21waWxlX3B0ZXN0KCkgewotCWNkICR7U30vdGVzdAotCW9lX3J1bm1ha2UKLX0KLQotZG9faW5zdGFsbF9wdGVzdCgpIHsKLQl0PSR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKLQlta2RpciAtcCAkdC8ubGlicwotCWNwIC1yICR7U30vdGVzdC9kYXRhICR0LwotCWNwIC1yICR7U30vdGVzdC8ubGlicy8qLnNvICR0Ly5saWJzLwotCWNwICR7U30vdGVzdC9wcm9jX2NoaWxkICR0LwotCWNwICR7U30vdGVzdC9yZWFkY2hpbGQgJHQvCi0JY3AgJHtTfS90ZXN0L3NvY2tjaGlsZCAkdC8KLQljcCAke1N9L3Rlc3Qvc29ja3BlcmYgJHQvCi0JY3AgJHtTfS90ZXN0L3Rlc3RhbGwgJHQvCi0JY3AgJHtTfS90ZXN0L3RyeXJlYWQgJHQvCi19Ci0KLWV4cG9ydCBDT05GSUdfU0hFTEw9Ii9iaW4vYmFzaCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByXzEuNi4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHJfMS42LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJlZWQ1MwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByXzEuNi4yLmJiCkBAIC0wLDAgKzEsMTE0IEBACitTVU1NQVJZID0gIkFwYWNoZSBQb3J0YWJsZSBSdW50aW1lIChBUFIpIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vYXByLmFwYWNoZS5vcmcvIgorU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJ1dGlsLWxpbnV4IgorCitMSUNFTlNFID0gIkFwYWNoZS0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT00ZGZkNGNkMjE2ODI4YzhjYWU1ZGU1YTEyZjM4NDRjOCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL2Fwcl9saWIuaDtlbmRsaW5lPTE3O21kNT1lZTQyZmE3NTc1ZGM0MDU4MGE5ZTAxYzFiNzVmYWU5NiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJID0gIiR7QVBBQ0hFX01JUlJPUn0vYXByLyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZV9maXhlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jbGVhbnVwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vdXBncmFkZS1hbmQtZml4LTEuNS4xLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0ZpeC1wYWNrZXQtZGlzY2FyZHMtSFRUUC1yZWRpcmVjdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUuaW4tZml4LUxURkxBR1MtdG8tbWFrZS1pdC13b3JrLXdpdGgtY2NhY2hlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtYXByLWZpeC1vZmZfdC1zaXplLWRvZXNuLXQtbWF0Y2gtaW4tZ2xpYmMtd2hlbi1jcm9zcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLWV4cGxpY2l0bHktbGluay1saWJhcHItYWdhaW5zdC1waHRyZWFkLXRvLW1ha2UtZ29sZC0ucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTgxYTg1MTk2N2M3OWI1Y2U5YmZiYzkwOWU0YmY3MzUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDkxMDljZWEzNzdiYWIwMDI4YmJhMTlhOTJiNWIwZTg5NjAzZGY5ZWFiMDVjMGY3ZGJkNGRkODNkNDhkY2ViZCIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGxpYl9wYWNrYWdlIGJpbmNvbmZpZyBtdWx0aWxpYl9oZWFkZXIgcHRlc3QKKworT0VfQklOQ09ORklHX0VYVFJBX01BTkdMRSA9ICIgLWUgJ3M6bG9jYXRpb249c291cmNlOmxvY2F0aW9uPWluc3RhbGxlZDonIgorCisjIEFkZGVkIHRvIGZpeCBzb21lIGlzc3VlcyB3aXRoIGNtYWtlLiBSZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vYm13Y2FyaXQvbWV0YS1yb3MvaXNzdWVzLzY4I2lzc3VlY29tbWVudC0xOTg5NjkyOAorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFwcl9jdl9tdXRleF9yZWN1cnNpdmU9eWVzIgorCisjIEFsc28gc3VwcHJlc3MgdHJ5aW5nIHRvIHVzZSBzY3RwLgorIworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfaD1ubyBhY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX3Vpb19oPW5vIgorCisjIE90aGVyd2lzZSBsaWJ0b29sIGZhaWxzIHRvIGNvbXBpbGUgYXByLXV0aWxzCisjIHg4Nl82NC1saW51eC1saWJ0b29sOiBjb21waWxlOiB1bmFibGUgdG8gaW5mZXIgdGFnZ2VkIGNvbmZpZ3VyYXRpb24KKyMgeDg2XzY0LWxpbnV4LWxpYnRvb2w6ICAgZXJyb3I6IHNwZWNpZnkgYSB0YWcgd2l0aCAnLS10YWcnCitDQ0FDSEUgPSAiIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuZmlsdGVyKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsIGQpfSIKK1BBQ0tBR0VDT05GSUdbaXB2Nl0gPSAiLS1lbmFibGUtaXB2NiwtLWRpc2FibGUtaXB2NiwiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCSMgQXZvaWQgYWJzb2x1dGUgcGF0aHMgZm9yIGdyZXAgc2luY2UgaXQgY2F1c2VzIGZhaWx1cmVzCisJIyB3aGVuIHVzaW5nIHNzdGF0ZSBiZXR3ZWVuIGRpZmZlcmVudCBob3N0cyB3aXRoIGRpZmZlcmVudAorCSMgaW5zdGFsbCBwYXRocyBmb3IgZ3JlcC4KKwlleHBvcnQgR1JFUD0iZ3JlcCIKKworCWNkICR7U30KKwkuL2J1aWxkY29uZgorfQorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9hcHIuZXhwICR7ZGF0YWRpcn0vYnVpbGQtMS8qIgorUkRFUEVORFNfJHtQTn0tZGV2ICs9ICJiYXNoIgorCisjZm9yIHNvbWUgcmVhc29uLCBidWlsZC9saWJ0b29sLm00IGhhbmRsZWQgYnkgYnVpbGRjb25mIHN0aWxsIGJlIG92ZXJ3cml0dGVuCisjd2hlbiBhdXRvY29uZiwgc28gaGFuZGxlIGl0IGFnYWluLgorZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKKwlzZWQgLWkgLWUgJ3MvTElCVE9PTD1cKC4qXCl0b3BfYnVpbGQvTElCVE9PTD1cMWFwcl9idWlsZC8nICR7U30vYnVpbGQvbGlidG9vbC5tNAorCXNlZCAtaSAtZSAncy9MSUJUT09MPVwoLipcKXRvcF9idWlsZC9MSUJUT09MPVwxYXByX2J1aWxkLycgJHtTfS9idWlsZC9hcHJfcnVsZXMubWsKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJb2VfbXVsdGlsaWJfaGVhZGVyIGFwci5oCisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9hcHIKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgeworCXNlZCAtaSAtZSAncywke1NUQUdJTkdfRElSX0hPU1R9LCxnJyAke0R9JHtkYXRhZGlyfS9idWlsZC0xL2Fwcl9ydWxlcy5taworCXNlZCAtaSAtZSAncywke1NUQUdJTkdfRElSX0hPU1R9LCxnJyBcCisJICAgICAgIC1lICdzLEFQUl9TT1VSQ0VfRElSPS4qLEFQUl9TT1VSQ0VfRElSPSxnJyBcCisJICAgICAgIC1lICdzLEFQUl9CVUlMRF9ESVI9LiosQVBSX0JVSUxEX0RJUj0sZycgJHtEfSR7YmluZGlyfS9hcHItMS1jb25maWcKK30KKworU1NUQVRFX1NDQU5fRklMRVMgKz0gImFwcl9ydWxlcy5tayBsaWJ0b29sIgorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImFwcl9zeXNyb290X3ByZXByb2Nlc3MiCisKK2Fwcl9zeXNyb290X3ByZXByb2Nlc3MgKCkgeworCWQ9JHtTWVNST09UX0RFU1RESVJ9JHtkYXRhZGlyfS9hcHIKKwlpbnN0YWxsIC1kICRkLworCWNwICR7U30vYnVpbGQvYXByX3J1bGVzLm1rICRkLworCXNlZCAtaSBzLGFwcl9idWlsZGRpcj0uKixhcHJfYnVpbGRkaXI9LGcgJGQvYXByX3J1bGVzLm1rCisJc2VkIC1pIHMsYXByX2J1aWxkZXJzPS4qLGFwcl9idWlsZGVycz0sZyAkZC9hcHJfcnVsZXMubWsKKwlzZWQgLWkgcyxMSUJUT09MPS4qLExJQlRPT0w9JHtIT1NUX1NZU30tbGlidG9vbCxnICRkL2Fwcl9ydWxlcy5taworCXNlZCAtaSBzLFwkXChhcHJfYnVpbGRlcnNcKSwke1NUQUdJTkdfREFUQURJUn0vYXByLyxnICRkL2Fwcl9ydWxlcy5taworCWNwICR7U30vYnVpbGQvbWtkaXIuc2ggJGQvCisJY3AgJHtTfS9idWlsZC9tYWtlX2V4cG9ydHMuYXdrICRkLworCWNwICR7U30vYnVpbGQvbWFrZV92YXJfZXhwb3J0LmF3ayAkZC8KKwljcCAke1N9LyR7SE9TVF9TWVN9LWxpYnRvb2wgJHtTWVNST09UX0RFU1RESVJ9JHtkYXRhZGlyfS9idWlsZC0xL2xpYnRvb2wKK30KKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwljZCAke1N9L3Rlc3QKKwlvZV9ydW5tYWtlCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJdD0ke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJbWtkaXIgLXAgJHQvLmxpYnMKKwljcCAtciAke1N9L3Rlc3QvZGF0YSAkdC8KKwljcCAtciAke1N9L3Rlc3QvLmxpYnMvKi5zbyAkdC8ubGlicy8KKwljcCAke1N9L3Rlc3QvcHJvY19jaGlsZCAkdC8KKwljcCAke1N9L3Rlc3QvcmVhZGNoaWxkICR0LworCWNwICR7U30vdGVzdC9zb2NrY2hpbGQgJHQvCisJY3AgJHtTfS90ZXN0L3NvY2twZXJmICR0LworCWNwICR7U30vdGVzdC90ZXN0YWxsICR0LworCWNwICR7U30vdGVzdC90cnlyZWFkICR0LworfQorCitleHBvcnQgQ09ORklHX1NIRUxMPSIvYmluL2Jhc2giCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXJncC1zdGFuZGFsb25lL2FyZ3Atc3RhbmRhbG9uZV8xLjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXJncC1zdGFuZGFsb25lL2FyZ3Atc3RhbmRhbG9uZV8xLjMuYmIKaW5kZXggYmQwY2ZkZi4uMjFiYmNhYiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2FyZ3Atc3RhbmRhbG9uZS9hcmdwLXN0YW5kYWxvbmVfMS4zLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcmdwLXN0YW5kYWxvbmUvYXJncC1zdGFuZGFsb25lXzEuMy5iYgpAQCAtMTksNiArMTksOSBAQAogCiBDRkxBR1MgKz0gIi1mUElDIC1VX19PUFRJTUlaRV9fIgogCitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorUkRFUEVORFNfJHtQTn0tc3RhdGljZGV2ID0gIiIKKwogZG9faW5zdGFsbCgpIHsKIAlpbnN0YWxsIC1EIC1tIDA2NDQgJHtCfS9saWJhcmdwLmEgJHtEfSR7bGliZGlyfS9saWJhcmdwLmEKIAlpbnN0YWxsIC1EIC1tIDA2NDQgJHtTfS9hcmdwLmggJHtEfSR7aW5jbHVkZWRpcn0vYXJncC5oCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXNwZWxsL2FzcGVsbC9nY2M3LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2FzcGVsbC9hc3BlbGwvZ2NjNy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmZkMDc3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2FzcGVsbC9hc3BlbGwvZ2NjNy5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tIDgwODlmYTAyMTIyZmVkMGE2Mzk0ZWJhMTRiYmVkY2IxZDE4ZTIzODQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLZXZpbiBBdGtpbnNvbiA8a2V2aW5hQGdudS5vcmc+CitEYXRlOiBUaHUsIDI5IERlYyAyMDE2IDAwOjUwOjMxIC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIENvbXBpbGUgRml4ZXMgZm9yIEdDQyA3LgorCitDbG9zZXMgIzUxOS4KKy0tLQorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworIG1vZHVsZXMvZmlsdGVyL3RleC5jcHAgfCAyICstCisgcHJvZy9jaGVja19mdW5zLmNwcCAgICB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL21vZHVsZXMvZmlsdGVyL3RleC5jcHAgYi9tb2R1bGVzL2ZpbHRlci90ZXguY3BwCitpbmRleCBhOTc5NTM5Li4xOWFiNjNjIDEwMDY0NAorLS0tIGEvbW9kdWxlcy9maWx0ZXIvdGV4LmNwcAorKysrIGIvbW9kdWxlcy9maWx0ZXIvdGV4LmNwcAorQEAgLTE3NCw3ICsxNzQsNyBAQCBuYW1lc3BhY2UgeworIAorICAgICBpZiAoYyA9PSAneycpIHsKKyAKKy0gICAgICBpZiAodG9wLmluX3doYXQgPT0gUGFybSB8fCB0b3AuaW5fd2hhdCA9PSBPcHQgfHwgdG9wLmRvX2NoZWNrID09ICdcMCcpCisrICAgICAgaWYgKHRvcC5pbl93aGF0ID09IFBhcm0gfHwgdG9wLmluX3doYXQgPT0gT3B0IHx8ICp0b3AuZG9fY2hlY2sgPT0gJ1wwJykKKyAJcHVzaF9jb21tYW5kKFBhcm0pOworIAorICAgICAgIHRvcC5pbl93aGF0ID0gUGFybTsKK2RpZmYgLS1naXQgYS9wcm9nL2NoZWNrX2Z1bnMuY3BwIGIvcHJvZy9jaGVja19mdW5zLmNwcAoraW5kZXggZGI1NGYzZC4uODllZTA5ZCAxMDA2NDQKKy0tLSBhL3Byb2cvY2hlY2tfZnVucy5jcHAKKysrKyBiL3Byb2cvY2hlY2tfZnVucy5jcHAKK0BAIC02NDcsNyArNjQ3LDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfdHJ1bmNhdGUoRklMRSAqIG91dCwgY29uc3QgY2hhciAqIHdvcmQsIGludCB3aWR0aCkgeworICAgICB9CisgICB9CisgICBpZiAoaSA9PSB3aWR0aC0xKSB7CistICAgIGlmICh3b3JkID09ICdcMCcpCisrICAgIGlmICgqd29yZCA9PSAnXDAnKQorICAgICAgIHB1dChvdXQsJyAnKTsKKyAgICAgZWxzZSBpZiAod29yZFtsZW5dID09ICdcMCcpCisgICAgICAgcHV0KG91dCwgd29yZCwgbGVuKTsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hc3BlbGwvYXNwZWxsXzAuNjAuNi4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2FzcGVsbC9hc3BlbGxfMC42MC42LjEuYmIKaW5kZXggNWEyMzc1NC4uMTlhNzE1NSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2FzcGVsbC9hc3BlbGxfMC42MC42LjEuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2FzcGVsbC9hc3BlbGxfMC42MC42LjEuYmIKQEAgLTYsNyArNiw5IEBACiAKIFBSID0gInIxIgogCi1TUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYXNwZWxsL2FzcGVsbC0ke1BWfS50YXIuZ3oiCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYXNwZWxsL2FzcGVsbC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZ2NjNy5wYXRjaCBcCisgICAgICAgICAgIgogU1JDX1VSSVttZDVzdW1dID0gImU2NmE5YzlhZjZhNjBkYzQ2MTM0ZmRhY2Y2Y2U5N2Q3IgogU1JDX1VSSVtzaGEyNTZzdW1dID0gImY1MjU4M2E4M2E2MzYzMzcwMWM1ZjcxZGIzZGM0MGFhYjg3YjdmNzZiMjk3MjNhZWIyNzk0MWVmZjQyZGY2ZTEiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1hdGtfMi4yMi4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWF0a18yLjIyLjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ZWRiNmUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWF0a18yLjIyLjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1TVU1NQVJZID0gIkFULVNQSSAyIFRvb2xraXQgQnJpZGdlIgotTElDRU5TRSA9ICJMR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lOWYyODhiYTk4MmQ2MDUxOGYzNzViNTg5ODI4Mzg4NiIKLQotTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgotCi1TUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtNQUpfVkVSfS8ke0JQTn0tJHtQVn0udGFyLnh6IgotU1JDX1VSSVttZDVzdW1dID0gImFhNjJhZWQyMWI4ZTAzZGM0NGFiODFhZTQ5ZDg5M2NhIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImU4YmRlZGJlYjg3M2ViMjI5ZWIwOGM4OGUxMWQwNzcxM2VjMjVhZTE3NTI1MTY0OGFkMWE5ZGE2YzIxMTEzYzEiCi0KLURFUEVORFMgPSAiZGJ1cyBnbGliLTIuMCBnbGliLTIuMC1uYXRpdmUgYXRrIGF0LXNwaTItY29yZSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjayB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4KLQotIyBUaGUgYXQtc3BpMi1jb3JlIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCi0KLVBBQ0tBR0VTID0rICIke1BOfS1nbm9tZSAke1BOfS1ndGsyIgotCi1GSUxFU18ke1BOfS1nbm9tZSA9ICIke2xpYmRpcn0vZ25vbWUtc2V0dGluZ3MtZGFlbW9uLTMuMC9ndGstbW9kdWxlcyIKLUZJTEVTXyR7UE59LWd0azIgPSAiJHtsaWJkaXJ9L2d0ay0yLjAvbW9kdWxlcy9saWJhdGstYnJpZGdlLioiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItYXRrXzIuMjQuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1hdGtfMi4yNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMGU0MTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItYXRrXzIuMjQuMS5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIkFULVNQSSAyIFRvb2xraXQgQnJpZGdlIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93aWtpLmxpbnV4Zm91bmRhdGlvbi5vcmcvYWNjZXNzaWJpbGl0eS9kLWJ1cyIKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTlmMjg4YmE5ODJkNjA1MThmMzc1YjU4OTgyODM4ODYiCisKK01BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKKworU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vJHtCUE59LyR7TUFKX1ZFUn0vJHtCUE59LSR7UFZ9LnRhci54eiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI3OTM4OGZiYzRkYzdmMjczOTQ1NTZkZDM4OWFlYjU5NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MGRjOTBhYzRmNzRiOGZmZTk2YTkzNjNjMjUyMDhhNDQzYjM4MWJhY2VjZmVmZWE2ZGU1NDlmMjBlZDY5NTdkIgorCitERVBFTkRTID0gImRidXMgZ2xpYi0yLjAgZ2xpYi0yLjAtbmF0aXZlIGF0ayBhdC1zcGkyLWNvcmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuCisKKyMgVGhlIGF0LXNwaTItY29yZSByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tZ25vbWUgJHtQTn0tZ3RrMiIKKworRklMRVNfJHtQTn0tZ25vbWUgPSAiJHtsaWJkaXJ9L2dub21lLXNldHRpbmdzLWRhZW1vbi0zLjAvZ3RrLW1vZHVsZXMiCitGSUxFU18ke1BOfS1ndGsyID0gIiR7bGliZGlyfS9ndGstMi4wL21vZHVsZXMvbGliYXRrLWJyaWRnZS4qIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmVfMi4yMi4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmVfMi4yMi4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzI4NDllLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1jb3JlXzIuMjIuMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLVNVTU1BUlkgPSAiQXNzaXN0aXZlIFRlY2hub2xvZ3kgU2VydmljZSBQcm92aWRlciBJbnRlcmZhY2UgKGRidXMgY29yZSkiCi1MSUNFTlNFID0gIkxHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWU5ZjI4OGJhOTgyZDYwNTE4ZjM3NWI1ODk4MjgzODg2IgotCi1NQUpfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCi0KLVNSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9LyR7QlBOfS8ke01BSl9WRVJ9LyR7QlBOfS0ke1BWfS50YXIueHogXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWJ1aWxkLUFkZC13aXRoLXN5c3RlbWR1c2VydW5pdGRpci5wYXRjaCBcCi0gICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiM2RhNWZlNjJhNjUzZTQ5ZGFkMWM0N2Y5YTQ2ZmVlNTYiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDE1ZWEzYWYyMTMxODMwODc5OGUwOThiZThiM2ExN2IyZjBjZjJmZTE2Y2VjZGU1YWQ4NDBjZjRlMGYyYzgwYSIKLQotREVQRU5EUyA9ICJkYnVzIGdsaWItMi4wIHZpcnR1YWwvbGlieDExIGxpYnhpIGxpYnh0c3QgaW50bHRvb2wtbmF0aXZlIgotCi1pbmhlcml0IGF1dG90b29scyBndGstZG9jIGdldHRleHQgc3lzdGVtZCBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnb2JqZWN0LWludHJvc3BlY3Rpb24KLSMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKLQotRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS14ZXZpZSBcCi0gICAgICAgICAgICAgICAgLS13aXRoLXN5c3RlbWR1c2VydW5pdGRpcj0ke3N5c3RlbWRfdXNlcl91bml0ZGlyfSBcCi0gICAgICAgICAgICAgICAgLS13aXRoLWRidXMtZGFlbW9uZGlyPSR7YmluZGlyfSIKLQotRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vZGJ1cy0xL3NlcnZpY2VzLyouc2VydmljZSBcCi0gICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvYWNjZXNzaWJpbGl0eS1zZXJ2aWNlcy8qLnNlcnZpY2UgXAotICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGVmYXVsdHMvYXQtc3BpMiBcCi0gICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VzZXJfdW5pdGRpcn0vYXQtc3BpLWRidXMtYnVzLnNlcnZpY2XCoFwKLSAgICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItY29yZV8yLjI0LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItY29yZV8yLjI0LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY4N2FlMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1jb3JlXzIuMjQuMS5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkFzc2lzdGl2ZSBUZWNobm9sb2d5IFNlcnZpY2UgUHJvdmlkZXIgSW50ZXJmYWNlIChkYnVzIGNvcmUpIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93aWtpLmxpbnV4Zm91bmRhdGlvbi5vcmcvYWNjZXNzaWJpbGl0eS9kLWJ1cyIKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTlmMjg4YmE5ODJkNjA1MThmMzc1YjU4OTgyODM4ODYiCisKK01BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKKworU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vJHtCUE59LyR7TUFKX1ZFUn0vJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLW5scy5tNC1UYWtlLWl0LWZyb20tZ2V0dGV4dC0wLjE1LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtYnVpbGQtQWRkLXdpdGgtc3lzdGVtZHVzZXJ1bml0ZGlyLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2MWQwYTQ3MWU2OTMyOTI5MzRhNzNmMjg4ZWJmZjM1YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxZTkwZDA2NGI5MzdhYWNmZTc5YTk2MjMyYWM3ZTYzZDI4ZDcxNmU4NWJkOWZmNDMzM2Y4NjUzMDVhOTU5YjViIgorCitERVBFTkRTID0gImRidXMgZ2xpYi0yLjAgdmlydHVhbC9saWJ4MTEgbGlieGkgbGlieHRzdCBpbnRsdG9vbC1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGd0ay1kb2MgZ2V0dGV4dCBzeXN0ZW1kIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGdvYmplY3QtaW50cm9zcGVjdGlvbgorIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXhldmllIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtc3lzdGVtZHVzZXJ1bml0ZGlyPSR7c3lzdGVtZF91c2VyX3VuaXRkaXJ9IFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtZGJ1cy1kYWVtb25kaXI9JHtiaW5kaXJ9IgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9kYnVzLTEvc2VydmljZXMvKi5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9hY2Nlc3NpYmlsaXR5LXNlcnZpY2VzLyouc2VydmljZSBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kZWZhdWx0cy9hdC1zcGkyIFwKKyAgICAgICAgICAgICAgICAke3N5c3RlbWRfdXNlcl91bml0ZGlyfS9hdC1zcGktZGJ1cy1idXMuc2VydmljZcKgXAorICAgICAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXRrXzIuMjIuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXRrXzIuMjIuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM4MGY5NS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0a18yLjIyLjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1TVU1NQVJZID0gIkFjY2Vzc2liaWxpdHkgdG9vbGtpdCBmb3IgR05PTUUiCi1IT01FUEFHRSA9ICJodHRwOi8vbGl2ZS5nbm9tZS5vcmcvR0FQLyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgotU0VDVElPTiA9ICJ4MTEvbGlicyIKLQotTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTcgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXRrL2F0a3V0aWwuYztlbmRsaW5lPTE4O21kNT02ZmQzMWNkMmZkYzliMzBmNjE5Y2E4ZDgxOWJjMTJkMyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdGsvYXRrLmg7ZW5kbGluZT0xODttZDU9ZmNkNzcxMDE4N2UwZWFlNDg1ZTM1NmMzMGQxYjBjM2IiCi0KLURFUEVORFMgPSAiZ2xpYi0yLjAiCi0KLWluaGVyaXQgZ25vbWViYXNlIGd0ay1kb2MgZ2V0dGV4dCB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZ29iamVjdC1pbnRyb3NwZWN0aW9uCi0KLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImM3ZjJhZGNmNzVlNDA1ODcyNzE3NGNkZTk3MGU5MTI5IgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiZDM0OWY1Y2E0OTc0YzljNzZhNDk2M2U1YjI1NDcyMDUyM2IwYzc4NjcyY2JjMGUxYTM0NzVkYmQ5YjNkNDRiNiIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCi0KLUVYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZ2xpYnRlc3QgXAotICAgICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdGtfMi4yNC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdGtfMi4yNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MjMxOWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0a18yLjI0LjAuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJBY2Nlc3NpYmlsaXR5IHRvb2xraXQgZm9yIEdOT01FIgorSE9NRVBBR0UgPSAiaHR0cDovL2xpdmUuZ25vbWUub3JnL0dBUC8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKK1NFQ1RJT04gPSAieDExL2xpYnMiCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F0ay9hdGt1dGlsLmM7ZW5kbGluZT0xODttZDU9NmZkMzFjZDJmZGM5YjMwZjYxOWNhOGQ4MTliYzEyZDMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXRrL2F0ay5oO2VuZGxpbmU9MTg7bWQ1PWZjZDc3MTAxODdlMGVhZTQ4NWUzNTZjMzBkMWIwYzNiIgorCitERVBFTkRTID0gImdsaWItMi4wIgorCitpbmhlcml0IGdub21lYmFzZSBndGstZG9jIGdldHRleHQgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGdvYmplY3QtaW50cm9zcGVjdGlvbgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIzNzQ3YTgwMDg5ZGZhM2MwYmJjZjIxYWRmZmY5OTY4YiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImJiMmRhYTlhODA4YzczYTdhNzlkMjk4M2YzMzNlMGJhNzRiZTQyZmM1MWUzYmExZmFmMjU1MWE2MzY0ODdhNDkiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWdsaWJ0ZXN0IFwKKyAgICAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC90ZXN0LWZpeC1kaXJlY3RvcnktcGVybWlzc2lvbnMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wvdGVzdC1maXgtZGlyZWN0b3J5LXBlcm1pc3Npb25zLnBhdGNoCmluZGV4IGNkNDUxMGMuLmU2NDk5MGEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC90ZXN0LWZpeC1kaXJlY3RvcnktcGVybWlzc2lvbnMucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL3Rlc3QtZml4LWRpcmVjdG9yeS1wZXJtaXNzaW9ucy5wYXRjaApAQCAtMSw2ICsxLDkgQEAKK0Zyb20gMzExNTg5ZmVkZjE5NjE2ODM4MmQ4ZjBkYjMwM2FiMzI4YmNmOWQ4MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBldGVyIFNlZWJhY2ggPHBldGVyLnNlZWJhY2hAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMTEgTWF5IDIwMTYgMTU6MTY6MDYgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gYWNsLmluYywgcnVuLXB0ZXN0OiBpbXByb3ZlIHB0ZXN0IGZ1bmN0aW9uYWxpdHkgb24gbGltaXRlZAorCiBjb21taXQgYzQ1YmFlODQ4MTdhNzBmZWY2YzJiNjYxYTA3YTQ5MmEwZDIzYWU4NQotQXV0aG9yOiBQZXRlciBTZWViYWNoIDxwZXRlci5zZWViYWNoQHdpbmRyaXZlci5jb20+Ci1EYXRlOiAgIFdlZCBNYXkgMTEgMTU6MTY6MDYgMjAxNiAtMDUwMAogCiAgICAgRml4IHBlcm1pc3Npb25zIG9uIHRlbXBvcmFyeSBkaXJlY3RvcnkKIApAQCAtMTAsNiArMTMsMTMgQEAKIAogICAgIFNpZ25lZC1vZmYtYnk6IFBldGVyIFNlZWJhY2ggPHBldGVyLnNlZWJhY2hAd2luZHJpdmVyLmNvbT4KIAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L2FjbC5naXQvY29tbWl0Lz9pZD1jNjc3MmE5NTg4MDBkZTA2NDQ4MjYzNGY3N2MyMGEwZmFhZmM1YWY2IF0KKworU2lnbmVkLW9mZi1ieTogRGVuZ2tlIER1IDxkZW5na2UuZHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRlc3Qvcm9vdC9wZXJtaXNzaW9ucy50ZXN0IHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKIGRpZmYgLS1naXQgYS90ZXN0L3Jvb3QvcGVybWlzc2lvbnMudGVzdCBiL3Rlc3Qvcm9vdC9wZXJtaXNzaW9ucy50ZXN0CiBpbmRleCA0MjYxNWY1Li4wOThiNTJhIDEwMDY0NAogLS0tIGEvdGVzdC9yb290L3Blcm1pc3Npb25zLnRlc3QKQEAgLTIyLDMgKzMyLDYgQEAKICAJJCBta2RpciBkCiAgCSQgY2QgZAogIAkkIHVtYXNrIDAyNworLS0gCisyLjguMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2xfMi4yLjUyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsXzIuMi41Mi5iYgppbmRleCAzMDZjN2I1Li44ZjNkYzQ1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2xfMi4yLjUyLmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbF8yLjIuNTIuYmIKQEAgLTQzLDYgKzQzLDExIEBACiAJdGFyIC1jIC0tZXhjbHVkZT1uZnMgdGVzdC8gfCAoIGNkICR7RH0ke1BURVNUX1BBVEh9ICYmIHRhciAteGYgLSApCiAJbWtkaXIgJHtEfSR7UFRFU1RfUEFUSH0vaW5jbHVkZQogCWNwICR7U30vaW5jbHVkZS9idWlsZGRlZnMgJHtTfS9pbmNsdWRlL2J1aWxkbWFjcm9zICR7U30vaW5jbHVkZS9idWlsZHJ1bGVzICR7RH0ke1BURVNUX1BBVEh9L2luY2x1ZGUvCisJIyBSZW1vdmUgYW55IGJ1aWxkIGhvc3QgcmVmZXJlbmNlcworCXNlZCAtZSAiczotLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9OjpnIiBcCisJICAgIC1lICdzOiR7SE9TVFRPT0xTX0RJUn0vOjpnJyBcCisJICAgIC1lICdzOiR7UkVDSVBFX1NZU1JPT1RfTkFUSVZFfTo6ZycgXAorCSAgICAtaSAke0R9JHtQVEVTVF9QQVRIfS9pbmNsdWRlL2J1aWxkZGVmcwogfQogCiBSREVQRU5EU18ke1BOfS1wdGVzdCA9ICJhY2wgYmFzaCBjb3JldXRpbHMgcGVybCBwZXJsLW1vZHVsZS1maWxlaGFuZGxlIHBlcmwtbW9kdWxlLWdldG9wdC1zdGQgcGVybC1tb2R1bGUtcG9zaXggc2hhZG93IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYXR0ci5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hdHRyLmluYwppbmRleCBlOGI1ZDA1Li4yNGVmNWFkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hdHRyLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hdHRyLmluYwpAQCAtMzIsNiArMzIsMTIgQEAKIAkgIGRvIGNwICR7U30vaW5jbHVkZS8kaSAke0R9JHtQVEVTVF9QQVRIfS9pbmNsdWRlLzsgXAogCWRvbmUKIAlzZWQgLWUgJ3N8OyBAZWNob3w7IGVjaG98JyAtaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0L01ha2VmaWxlCisgICAgCisJIyBSZW1vdmUgYW55IGJ1aWxkIGhvc3QgcmVmZXJlbmNlcworCXNlZCAtZSAiczotLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9OjpnIiBcCisJICAgIC1lICdzOiR7SE9TVFRPT0xTX0RJUn0vOjpnJyBcCisJICAgIC1lICdzOiR7UkVDSVBFX1NZU1JPT1RfTkFUSVZFfTo6ZycgXAorCSAgICAtaSAke0R9JHtQVEVTVF9QQVRIfS9pbmNsdWRlL2J1aWxkZGVmcwogfQogCiBSREVQRU5EU18ke1BOfS1wdGVzdCA9ICJhdHRyIGNvcmV1dGlscyBwZXJsLW1vZHVsZS1maWxlaGFuZGxlIHBlcmwtbW9kdWxlLWdldG9wdC1zdGQgcGVybC1tb2R1bGUtcG9zaXgiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hdHRyLzAwMDEtVXNlLXN0ZGludC10eXBlcy1jb25zaXN0ZW50bHkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hdHRyLzAwMDEtVXNlLXN0ZGludC10eXBlcy1jb25zaXN0ZW50bHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNkNjUwNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2F0dHIvMDAwMS1Vc2Utc3RkaW50LXR5cGVzLWNvbnNpc3RlbnRseS5wYXRjaApAQCAtMCwwICsxLDY5IEBACitGcm9tIDM3YTI3YjZmZDA5ZWNiMzcwOTdiODVlNWRiNzRlNGY3N2I4MGZlMGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGZWxpeCBKYW5kYSA8ZmVsaXguamFuZGFAcG9zdGVvLmRlPgorRGF0ZTogVHVlLCAxMiBKYW4gMjAxNiAyMjoyMDozMyArMDEwMAorU3ViamVjdDogW1BBVENIXSBVc2Ugc3RkaW50IHR5cGVzIGNvbnNpc3RlbnRseQorCistLS0KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKKyBpbmNsdWRlL2F0dHJpYnV0ZXMuaCB8IDYgKysrKy0tCisgbWFuL21hbjMvYXR0cl9saXN0LjMgfCA4ICsrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK0luZGV4OiBhdHRyLTIuNC40Ny9pbmNsdWRlL2F0dHJpYnV0ZXMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF0dHItMi40LjQ3Lm9yaWcvaW5jbHVkZS9hdHRyaWJ1dGVzLmgKKysrKyBhdHRyLTIuNC40Ny9pbmNsdWRlL2F0dHJpYnV0ZXMuaAorQEAgLTIyLDYgKzIyLDcgQEAKKyBleHRlcm4gIkMiIHsKKyAjZW5kaWYKKyAKKysjaW5jbHVkZSA8c3RkaW50Lmg+CisgLyoKKyAgKglBbiBhbG1vc3QtSVJJWC1jb21wYXRpYmxlIGV4dGVuZGVkIGF0dHJpYnV0ZXMgQVBJCisgICoJKHRoZSBJUklYIGF0dHJpYnV0ZSAibGlzdCIgb3BlcmF0aW9uIGlzIG1pc3NpbmcsIGFkZGVkIEFUVFJfU0VDVVJFKS4KK0BAIC02OSw3ICs3MCw3IEBAIHR5cGVkZWYgc3RydWN0IGF0dHJsaXN0IHsKKyAgKiBhbF9vZmZzZXRbaV0gZW50cnkgcG9pbnRzIHRvLgorICAqLworIHR5cGVkZWYgc3RydWN0IGF0dHJsaXN0X2VudCB7CS8qIGRhdGEgZnJvbSBhdHRyX2xpc3QoKSAqLworLQl1X2ludDMyX3QJYV92YWx1ZWxlbjsJLyogbnVtYmVyIGJ5dGVzIGluIHZhbHVlIG9mIGF0dHIgKi8KKysJdWludDMyX3QJYV92YWx1ZWxlbjsJLyogbnVtYmVyIGJ5dGVzIGluIHZhbHVlIG9mIGF0dHIgKi8KKyAJY2hhcgkJYV9uYW1lWzFdOwkvKiBhdHRyIG5hbWUgKE5VTEwgdGVybWluYXRlZCkgKi8KKyB9IGF0dHJsaXN0X2VudF90OworIAorQEAgLTkwLDcgKzkxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgYXR0cmxpc3RfZW50IHsJLyogZGF0YSBmcgorICAqIG9wZXJhdGlvbiBvbiBhIGN1cnNvciBpcyB0byBiemVybygpIGl0LgorICAqLworIHR5cGVkZWYgc3RydWN0IGF0dHJsaXN0X2N1cnNvciB7CistCXVfaW50MzJfdAlvcGFxdWVbNF07CS8qIGFuIG9wYXF1ZSBjb29raWUgKi8KKysJdWludDMyX3QJb3BhcXVlWzRdOwkvKiBhbiBvcGFxdWUgY29va2llICovCisgfSBhdHRybGlzdF9jdXJzb3JfdDsKKyAKKyAvKgorSW5kZXg6IGF0dHItMi40LjQ3L21hbi9tYW4zL2F0dHJfbGlzdC4zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXR0ci0yLjQuNDcub3JpZy9tYW4vbWFuMy9hdHRyX2xpc3QuMworKysrIGF0dHItMi40LjQ3L21hbi9tYW4zL2F0dHJfbGlzdC4zCitAQCAtNzIsOSArNzIsOSBAQCBUaGUgY29udGVudHMgb2YgYW4gXGY0YXR0cmxpc3RfdFxmUCBzdHJ1CisgLm5mCisgLmZ0IDQKKyAudGEgOW4gMjJuCistX19pbnQzMl90IGFsX2NvdW50OyAvXCgqKiBudW1iZXIgb2YgZW50cmllcyBpbiBhdHRybGlzdCBcKCoqLworLV9faW50MzJfdCBhbF9tb3JlOyAvXCgqKiBUL0Y6IG1vcmUgYXR0cnMgKGRvIHN5c2NhbGwgYWdhaW4pIFwoKiovCistX19pbnQzMl90IGFsX29mZnNldFsxXTsgL1woKiogYnl0ZSBvZmZzZXRzIG9mIGF0dHJzIFt2YXItc2l6ZWRdIFwoKiovCisraW50MzJfdCBhbF9jb3VudDsgL1woKiogbnVtYmVyIG9mIGVudHJpZXMgaW4gYXR0cmxpc3QgXCgqKi8KKytpbnQzMl90IGFsX21vcmU7IC9cKCoqIFQvRjogbW9yZSBhdHRycyAoZG8gc3lzY2FsbCBhZ2FpbikgXCgqKi8KKytpbnQzMl90IGFsX29mZnNldFsxXTsgL1woKiogYnl0ZSBvZmZzZXRzIG9mIGF0dHJzIFt2YXItc2l6ZWRdIFwoKiovCisgLmZ0IDEKKyAuZmkKKyAuUkUKK0BAIC0xMTMsNyArMTEzLDcgQEAgaW5jbHVkZSB0aGUgZm9sbG93aW5nIG1lbWJlcnM6CisgLm5mCisgLmZ0IDQKKyAudGEgOW4gMjJuCistdV9pbnQzMl90IGFfdmFsdWVsZW47IC9cKCoqIG51bWJlciBieXRlcyBpbiB2YWx1ZSBvZiBhdHRyIFwoKiovCisrdWludDMyX3QgYV92YWx1ZWxlbjsgL1woKiogbnVtYmVyIGJ5dGVzIGluIHZhbHVlIG9mIGF0dHIgXCgqKi8KKyBjaGFyIGFfbmFtZVtdOyAvXCgqKiBhdHRyIG5hbWUgKE5VTEwgdGVybWluYXRlZCkgXCgqKi8KKyAuZnQgMQorIC5maQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYXR0cl8yLjQuNDcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hdHRyXzIuNC40Ny5iYgppbmRleCA1NTZjOGU0Li5mYzg4YmVmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hdHRyXzIuNC40Ny5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hdHRyXzIuNC40Ny5iYgpAQCAtNCw2ICs0LDkgQEAKICMgZnV0dXJlIHJlbGVhc2VzIG9mIGF0dHIsIHJlbW92ZSB0aGlzIHdoZW4gdXBkYXRpbmcgdGhlIHJlY2lwZS4KIFNSQ19VUkkgKz0gImZpbGU6Ly9hdHRyLU1pc3NpbmctY29uZmlndXJlLmFjLnBhdGNoIFwKICAgICAgICAgICAgIGZpbGU6Ly9kb250LXVzZS1kZWNsLW1hY3Jvcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vUmVtb3ZlLXRoZS1zZWN0aW9uLTItbWFuLXBhZ2VzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9SZW1vdmUtdGhlLWF0dHIuNS1tYW4tcGFnZS1tb3ZlZC10by1tYW4tcGFnZXMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtVXNlLXN0ZGludC10eXBlcy1jb25zaXN0ZW50bHkucGF0Y2ggXAogICAgICAgICAgICAiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICI4NGY1OGRlYzAwYjYwZjJkYzhmZDFjOTcwOTI5MWNjNyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2VhLWFjbC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9lYS1hY2wuaW5jCmluZGV4IGM1ODdiM2MuLmU2ZjRjNzIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2VhLWFjbC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZWEtYWNsLmluYwpAQCAtNDcsNiArNDcsMyBAQAogRklMRVNfbGliJHtCUE59ID0gIiR7YmFzZV9saWJkaXJ9L2xpYioke1NPTElCU30iCiAKIEJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgotIyBPbmx5IGFwcGVuZCBsZGZsYWdzIGZvciB0YXJnZXQgcmVjaXBlIGFuZCBpZiBVU0VfTkxTIGlzIGVuYWJsZWQKLUxERkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjX2NsYXNzLXRhcmdldCA9ICIke0BbJycsICcgLWxpbnRsICddWyhkLmdldFZhcignVVNFX05MUycpID09ICd5ZXMnKV19IgotRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliY19jbGFzcy10YXJnZXQgPSAiJHtAWycnLCAnIC0tZGlzYWJsZS1nZXR0ZXh0ICddWyhkLmdldFZhcignVVNFX05MUycpID09ICdubycpXX0iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9maWxlcy9SZW1vdmUtdGhlLWF0dHIuNS1tYW4tcGFnZS1tb3ZlZC10by1tYW4tcGFnZXMucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9maWxlcy9SZW1vdmUtdGhlLWF0dHIuNS1tYW4tcGFnZS1tb3ZlZC10by1tYW4tcGFnZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVhYjgzZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2ZpbGVzL1JlbW92ZS10aGUtYXR0ci41LW1hbi1wYWdlLW1vdmVkLXRvLW1hbi1wYWdlcy5wYXRjaApAQCAtMCwwICsxLDI0MCBAQAorRnJvbSA2MDQ3Yzg1MjJiOTEyMzVhZDFlODM1ZjQ0ZjVlMzY0NzJkOWQ0OWIyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5kcmVhcyBHcnVlbmJhY2hlciA8YW5kcmVhcy5ncnVlbmJhY2hlckBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDIyIEFwciAyMDE1IDExOjQ2OjU5ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBSZW1vdmUgdGhlIGF0dHIuNSBtYW4gcGFnZSAobW92ZWQgdG8gbWFuLXBhZ2VzKQorCitDb21taXQgZGNlOWI0NDQ4YzdmMmIyMmJkMjA2Y2QwNjhmYjA1Y2IyZjMyNTViOSBmcm9tCitodHRwczovL2dpdC5zYXZhbm5haC5ub25nbnUub3JnL2dpdC9hdHRyLmdpdAorCitUaGUgYXR0ci41IHBhZ2UgaXMgcGFydCBvZiB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlIHN5c3RlbSBjYWxsIGRvY3VtZW50YXRpb24sCit3aGljaCBoYXMgYmVlbiBtb3ZlZCBpbnRvIHRoZSBtYW4tcGFnZXMgcGFja2FnZS4gTW92ZSB0aGUgYXR0ci41IHBhZ2UgdGhlcmUKK2FzIHdlbGwuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworW01BOiB1cGRhdGVkIHRvIGFwcGx5IGRpcmVjdGx5IHRvIHYyLjQuNDddCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEFzc2Vsc3RpbmUgPG1hcmsuYXNzZWxzdGluZUB3aW5kcml2ZXIuY29tPgorLS0tCisgbWFuL01ha2VmaWxlICAgICAgfCAgIDIgKy0KKyBtYW4vbWFuNS9NYWtlZmlsZSB8ICAzNSAtLS0tLS0tLS0tLS0tCisgbWFuL21hbjUvYXR0ci41ICAgfCAxNTMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMTg5IGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBtYW4vbWFuNS9NYWtlZmlsZQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBtYW4vbWFuNS9hdHRyLjUKKworZGlmZiAtLWdpdCBhL21hbi9NYWtlZmlsZSBiL21hbi9NYWtlZmlsZQoraW5kZXggNzU1ZGFlZC4uOTMwMWYwOSAxMDA2NDQKKy0tLSBhL21hbi9NYWtlZmlsZQorKysrIGIvbWFuL01ha2VmaWxlCitAQCAtMTksNyArMTksNyBAQAorIFRPUERJUiA9IC4uCisgaW5jbHVkZSAkKFRPUERJUikvaW5jbHVkZS9idWlsZGRlZnMKKyAKKy1TVUJESVJTID0gbWFuMSBtYW4zIG1hbjUKKytTVUJESVJTID0gbWFuMSBtYW4zCisgCisgZGVmYXVsdCA6ICQoU1VCRElSUykKKyAKK2RpZmYgLS1naXQgYS9tYW4vbWFuNS9NYWtlZmlsZSBiL21hbi9tYW41L01ha2VmaWxlCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDZiNzBkM2QuLjAwMDAwMDAKKy0tLSBhL21hbi9tYW41L01ha2VmaWxlCisrKysgL2Rldi9udWxsCitAQCAtMSwzNSArMCwwIEBACistIworLSMgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDAyIFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCistIyBDb3B5cmlnaHQgKEMpIDIwMDkgIEFuZHJlYXMgR3J1ZW5iYWNoZXIgPGFncnVlbkBzdXNlLmRlPgorLSMKKy0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKy0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCistIworLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0jCistIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCistIworLQorLVRPUERJUiA9IC4uLy4uCistaW5jbHVkZSAkKFRPUERJUikvaW5jbHVkZS9idWlsZGRlZnMKKy0KKy1NQU5fU0VDVElPTgk9IDUKKy0KKy1NQU5fUEFHRVMJPSAkKHNoZWxsIGVjaG8gKi4kKE1BTl9TRUNUSU9OKSkKKy1NQU5fREVTVAk9ICQoUEtHX01BTl9ESVIpL21hbiQoTUFOX1NFQ1RJT04pCistTFNSQ0ZJTEVTCT0gJChNQU5fUEFHRVMpCistCistZGVmYXVsdCA6ICQoTUFOX1BBR0VTKQorLQorLWluY2x1ZGUgJChCVUlMRFJVTEVTKQorLQorLWluc3RhbGwgOiBkZWZhdWx0CistCSQoSU5TVEFMTCkgLW0gNzU1IC1kICQoTUFOX0RFU1QpCistCSQoSU5TVEFMTF9NQU4pCistaW5zdGFsbC1kZXYgaW5zdGFsbC1saWI6CitkaWZmIC0tZ2l0IGEvbWFuL21hbjUvYXR0ci41IGIvbWFuL21hbjUvYXR0ci41CitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IGEwMjc1N2QuLjAwMDAwMDAKKy0tLSBhL21hbi9tYW41L2F0dHIuNQorKysrIC9kZXYvbnVsbAorQEAgLTEsMTUzICswLDAgQEAKKy0uXCIgRXh0ZW5kZWQgYXR0cmlidXRlcyBtYW51YWwgcGFnZQorLS5cIgorLS5cIiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDIsIDIwMDcgIEFuZHJlYXMgR3J1ZW5iYWNoZXIgPGFncnVlbkBzdXNlLmRlPgorLS5cIiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDQsIDIwMDcgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorLS5cIiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLS5cIgorLS5cIiBUaGlzIGlzIGZyZWUgZG9jdW1lbnRhdGlvbjsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCistLlwiIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCistLlwiIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCistLlwiIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLS5cIgorLS5cIiBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UncyByZWZlcmVuY2VzIHRvICJvYmplY3QgY29kZSIKKy0uXCIgYW5kICJleGVjdXRhYmxlcyIgYXJlIHRvIGJlIGludGVycHJldGVkIGFzIHRoZSBvdXRwdXQgb2YgYW55CistLlwiIGRvY3VtZW50IGZvcm1hdHRpbmcgb3IgdHlwZXNldHRpbmcgc3lzdGVtLCBpbmNsdWRpbmcKKy0uXCIgaW50ZXJtZWRpYXRlIGFuZCBwcmludGVkIG91dHB1dC4KKy0uXCIKKy0uXCIgVGhpcyBtYW51YWwgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0uXCIgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0uXCIgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLS5cIiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLS5cIgorLS5cIiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKy0uXCIgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbWFudWFsLiAgSWYgbm90LCBzZWUKKy0uXCIgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorLS5cIgorLS5USCBBVFRSIDUKKy0uU0ggTkFNRQorLWF0dHIgLSBFeHRlbmRlZCBhdHRyaWJ1dGVzCistLlNIIERFU0NSSVBUSU9OCistRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbmFtZTp2YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHBlcm1hbmVudGx5IHdpdGgKKy1maWxlcyBhbmQgZGlyZWN0b3JpZXMsIHNpbWlsYXIgdG8gdGhlIGVudmlyb25tZW50IHN0cmluZ3MgYXNzb2NpYXRlZAorLXdpdGggYSBwcm9jZXNzLgorLUFuIGF0dHJpYnV0ZSBtYXkgYmUgZGVmaW5lZCBvciB1bmRlZmluZWQuCistSWYgaXQgaXMgZGVmaW5lZCwgaXRzIHZhbHVlIG1heSBiZSBlbXB0eSBvciBub24tZW1wdHkuCistLlBQCistRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgZXh0ZW5zaW9ucyB0byB0aGUgbm9ybWFsIGF0dHJpYnV0ZXMgd2hpY2ggYXJlCistYXNzb2NpYXRlZCB3aXRoIGFsbCBpbm9kZXMgaW4gdGhlIHN5c3RlbSAoaS5lLiB0aGUKKy0uQlIgc3RhdCAoMikKKy1kYXRhKS4KKy1UaGV5IGFyZSBvZnRlbiB1c2VkIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5CistdG8gYSBmaWxlc3lzdGVtIFwtIGZvciBleGFtcGxlLCBhZGRpdGlvbmFsIHNlY3VyaXR5IGZlYXR1cmVzIHN1Y2ggYXMKKy1BY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgbWF5IGJlIGltcGxlbWVudGVkIHVzaW5nIGV4dGVuZGVkIGF0dHJpYnV0ZXMuCistLlBQCistVXNlcnMgd2l0aCBzZWFyY2ggYWNjZXNzIHRvIGEgZmlsZSBvciBkaXJlY3RvcnkgbWF5IHJldHJpZXZlIGEgbGlzdCBvZgorLWF0dHJpYnV0ZSBuYW1lcyBkZWZpbmVkIGZvciB0aGF0IGZpbGUgb3IgZGlyZWN0b3J5LgorLS5QUAorLUV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIGFjY2Vzc2VkIGFzIGF0b21pYyBvYmplY3RzLgorLVJlYWRpbmcgcmV0cmlldmVzIHRoZSB3aG9sZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgYW5kIHN0b3JlcyBpdCBpbiBhIGJ1ZmZlci4KKy1Xcml0aW5nIHJlcGxhY2VzIGFueSBwcmV2aW91cyB2YWx1ZSB3aXRoIHRoZSBuZXcgdmFsdWUuCistLlBQCistU3BhY2UgY29uc3VtZWQgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZXMgaXMgY291bnRlZCB0b3dhcmRzIHRoZSBkaXNrIHF1b3RhcworLW9mIHRoZSBmaWxlIG93bmVyIGFuZCBmaWxlIGdyb3VwLgorLS5QUAorLUN1cnJlbnRseSwgc3VwcG9ydCBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlcyBpcyBpbXBsZW1lbnRlZCBvbiBMaW51eCBieSB0aGUKKy1leHQyLCBleHQzLCBleHQ0LCBYRlMsIEpGUyBhbmQgcmVpc2VyZnMgZmlsZXN5c3RlbXMuCistLlNIIEVYVEVOREVEIEFUVFJJQlVURSBOQU1FU1BBQ0VTCistQXR0cmlidXRlIG5hbWVzIGFyZSB6ZXJvLXRlcm1pbmF0ZWQgc3RyaW5ncy4KKy1UaGUgYXR0cmlidXRlIG5hbWUgaXMgYWx3YXlzIHNwZWNpZmllZCBpbiB0aGUgZnVsbHkgcXVhbGlmaWVkCistLklSIG5hbWVzcGFjZS5hdHRyaWJ1dGUKKy1mb3JtLCBlZy4KKy0uSVIgdXNlci5taW1lX3R5cGUgLAorLS5JUiB0cnVzdGVkLm1kNXN1bSAsCistLklSIHN5c3RlbS5wb3NpeF9hY2xfYWNjZXNzICwKKy1vcgorLS5JUiBzZWN1cml0eS5zZWxpbnV4IC4KKy0uUFAKKy1UaGUgbmFtZXNwYWNlIG1lY2hhbmlzbSBpcyB1c2VkIHRvIGRlZmluZSBkaWZmZXJlbnQgY2xhc3NlcyBvZiBleHRlbmRlZAorLWF0dHJpYnV0ZXMuCistVGhlc2UgZGlmZmVyZW50IGNsYXNzZXMgZXhpc3QgZm9yIHNldmVyYWwgcmVhc29ucywgZS5nLiB0aGUgcGVybWlzc2lvbnMKKy1hbmQgY2FwYWJpbGl0aWVzIHJlcXVpcmVkIGZvciBtYW5pcHVsYXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlcyBvZiBvbmUKKy1uYW1lc3BhY2UgbWF5IGRpZmZlciB0byBhbm90aGVyLgorLS5QUAorLUN1cnJlbnRseSB0aGUKKy0uSVIgc2VjdXJpdHkgLAorLS5JUiBzeXN0ZW0gLAorLS5JUiB0cnVzdGVkICwKKy1hbmQKKy0uSVIgdXNlcgorLWV4dGVuZGVkIGF0dHJpYnV0ZSBjbGFzc2VzIGFyZSBkZWZpbmVkIGFzIGRlc2NyaWJlZCBiZWxvdy4gQWRkaXRpb25hbAorLWNsYXNzZXMgbWF5IGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuCistLlNTIEV4dGVuZGVkIHNlY3VyaXR5IGF0dHJpYnV0ZXMKKy1UaGUgc2VjdXJpdHkgYXR0cmlidXRlIG5hbWVzcGFjZSBpcyB1c2VkIGJ5IGtlcm5lbCBzZWN1cml0eSBtb2R1bGVzLAorLXN1Y2ggYXMgU2VjdXJpdHkgRW5oYW5jZWQgTGludXguICAKKy1SZWFkIGFuZCB3cml0ZSBhY2Nlc3MgcGVybWlzc2lvbnMgdG8gc2VjdXJpdHkgYXR0cmlidXRlcyBkZXBlbmQgb24gdGhlCistcG9saWN5IGltcGxlbWVudGVkIGZvciBlYWNoIHNlY3VyaXR5IGF0dHJpYnV0ZSBieSB0aGUgc2VjdXJpdHkgbW9kdWxlLgorLVdoZW4gbm8gc2VjdXJpdHkgbW9kdWxlIGlzIGxvYWRlZCwgYWxsIHByb2Nlc3NlcyBoYXZlIHJlYWQgYWNjZXNzIHRvCistZXh0ZW5kZWQgc2VjdXJpdHkgYXR0cmlidXRlcywgYW5kIHdyaXRlIGFjY2VzcyBpcyBsaW1pdGVkIHRvIHByb2Nlc3NlcworLXRoYXQgaGF2ZSB0aGUgQ0FQX1NZU19BRE1JTiBjYXBhYmlsaXR5LgorLS5TUyBFeHRlbmRlZCBzeXN0ZW0gYXR0cmlidXRlcworLUV4dGVuZGVkIHN5c3RlbSBhdHRyaWJ1dGVzIGFyZSB1c2VkIGJ5IHRoZSBrZXJuZWwgdG8gc3RvcmUgc3lzdGVtCistb2JqZWN0cyBzdWNoIGFzIEFjY2VzcyBDb250cm9sIExpc3RzIGFuZCBDYXBhYmlsaXRpZXMuICBSZWFkIGFuZCB3cml0ZQorLWFjY2VzcyBwZXJtaXNzaW9ucyB0byBzeXN0ZW0gYXR0cmlidXRlcyBkZXBlbmQgb24gdGhlIHBvbGljeSBpbXBsZW1lbnRlZAorLWZvciBlYWNoIHN5c3RlbSBhdHRyaWJ1dGUgaW1wbGVtZW50ZWQgYnkgZmlsZXN5c3RlbXMgaW4gdGhlIGtlcm5lbC4KKy0uU1MgVHJ1c3RlZCBleHRlbmRlZCBhdHRyaWJ1dGVzCistVHJ1c3RlZCBleHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSB2aXNpYmxlIGFuZCBhY2Nlc3NpYmxlIG9ubHkgdG8gcHJvY2Vzc2VzIHRoYXQKKy1oYXZlIHRoZSBDQVBfU1lTX0FETUlOIGNhcGFiaWxpdHkgKHRoZSBzdXBlciB1c2VyIHVzdWFsbHkgaGFzIHRoaXMKKy1jYXBhYmlsaXR5KS4KKy1BdHRyaWJ1dGVzIGluIHRoaXMgY2xhc3MgYXJlIHVzZWQgdG8gaW1wbGVtZW50IG1lY2hhbmlzbXMgaW4gdXNlcgorLXNwYWNlIChpLmUuLCBvdXRzaWRlIHRoZSBrZXJuZWwpIHdoaWNoIGtlZXAgaW5mb3JtYXRpb24gaW4gZXh0ZW5kZWQgYXR0cmlidXRlcworLXRvIHdoaWNoIG9yZGluYXJ5IHByb2Nlc3NlcyBzaG91bGQgbm90IGhhdmUgYWNjZXNzLgorLS5TUyBFeHRlbmRlZCB1c2VyIGF0dHJpYnV0ZXMKKy1FeHRlbmRlZCB1c2VyIGF0dHJpYnV0ZXMgbWF5IGJlIGFzc2lnbmVkIHRvIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBmb3IKKy1zdG9yaW5nIGFyYml0cmFyeSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHN1Y2ggYXMgdGhlIG1pbWUgdHlwZSwKKy1jaGFyYWN0ZXIgc2V0IG9yIGVuY29kaW5nIG9mIGEgZmlsZS4gVGhlIGFjY2VzcyBwZXJtaXNzaW9ucyBmb3IgdXNlcgorLWF0dHJpYnV0ZXMgYXJlIGRlZmluZWQgYnkgdGhlIGZpbGUgcGVybWlzc2lvbiBiaXRzLgorLS5QUAorLVRoZSBmaWxlIHBlcm1pc3Npb24gYml0cyBvZiByZWd1bGFyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBhcmUKKy1pbnRlcnByZXRlZCBkaWZmZXJlbnRseSBmcm9tIHRoZSBmaWxlIHBlcm1pc3Npb24gYml0cyBvZiBzcGVjaWFsIGZpbGVzCistYW5kIHN5bWJvbGljIGxpbmtzLiBGb3IgcmVndWxhciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdGhlIGZpbGUKKy1wZXJtaXNzaW9uIGJpdHMgZGVmaW5lIGFjY2VzcyB0byB0aGUgZmlsZSdzIGNvbnRlbnRzLCB3aGlsZSBmb3IgZGV2aWNlIHNwZWNpYWwKKy1maWxlcyB0aGV5IGRlZmluZSBhY2Nlc3MgdG8gdGhlIGRldmljZSBkZXNjcmliZWQgYnkgdGhlIHNwZWNpYWwgZmlsZS4KKy1UaGUgZmlsZSBwZXJtaXNzaW9ucyBvZiBzeW1ib2xpYyBsaW5rcyBhcmUgbm90IHVzZWQgaW4gYWNjZXNzCistY2hlY2tzLiBUaGVzZSBkaWZmZXJlbmNlcyB3b3VsZCBhbGxvdyB1c2VycyB0byBjb25zdW1lIGZpbGVzeXN0ZW0gcmVzb3VyY2VzIGluCistYSB3YXkgbm90IGNvbnRyb2xsYWJsZSBieSBkaXNrIHF1b3RhcyBmb3IgZ3JvdXAgb3Igd29ybGQgd3JpdGFibGUgc3BlY2lhbCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCistLlBQCistRm9yIHRoaXMgcmVhc29uLCBleHRlbmRlZCB1c2VyIGF0dHJpYnV0ZXMgYXJlIG9ubHkgYWxsb3dlZCBmb3IgcmVndWxhciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMsIGFuZCBhY2Nlc3MgdG8gZXh0ZW5kZWQgdXNlciBhdHRyaWJ1dGVzIGlzIHJlc3RyaWN0ZWQgdG8gdGhlCistb3duZXIgYW5kIHRvIHVzZXJzIHdpdGggYXBwcm9wcmlhdGUgY2FwYWJpbGl0aWVzIGZvciBkaXJlY3RvcmllcyB3aXRoIHRoZQorLXN0aWNreSBiaXQgc2V0IChzZWUgdGhlCistLkJSIGNobW9kICgxKQorLW1hbnVhbCBwYWdlIGZvciBhbiBleHBsYW5hdGlvbiBvZiBTdGlja3kgRGlyZWN0b3JpZXMpLgorLS5TSCBGSUxFU1lTVEVNIERJRkZFUkVOQ0VTCistVGhlIGtlcm5lbCBhbmQgdGhlIGZpbGVzeXN0ZW0gbWF5IHBsYWNlIGxpbWl0cyBvbiB0aGUgbWF4aW11bSBudW1iZXIKKy1hbmQgc2l6ZSBvZiBleHRlbmRlZCBhdHRyaWJ1dGVzIHRoYXQgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBhIGZpbGUuCistU29tZSBmaWxlIHN5c3RlbXMsIHN1Y2ggYXMgZXh0Mi8zIGFuZCByZWlzZXJmcywgcmVxdWlyZSB0aGUgZmlsZXN5c3RlbQorLXRvIGJlIG1vdW50ZWQgd2l0aCB0aGUKKy0uQiB1c2VyX3hhdHRyCistbW91bnQgb3B0aW9uIGluIG9yZGVyIGZvciBleHRlbmRlZCB1c2VyIGF0dHJpYnV0ZXMgdG8gYmUgdXNlZC4KKy0uUFAKKy1JbiB0aGUgY3VycmVudCBleHQyLCBleHQzIGFuZCBleHQ0IGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb25zLCBlYWNoCistZXh0ZW5kZWQgYXR0cmlidXRlIG11c3QgZml0IG9uIGEgc2luZ2xlIGZpbGVzeXN0ZW0gYmxvY2sgKDEwMjQsIDIwNDgKKy1vciA0MDk2IGJ5dGVzLCBkZXBlbmRpbmcgb24gdGhlIGJsb2NrIHNpemUgc3BlY2lmaWVkIHdoZW4gdGhlCistZmlsZXN5c3RlbSB3YXMgY3JlYXRlZCkuCistLlBQCistSW4gdGhlIFhGUyBhbmQgcmVpc2VyZnMgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbnMsIHRoZXJlIGlzIG5vCistcHJhY3RpY2FsIGxpbWl0IG9uIHRoZSBudW1iZXIgb3Igc2l6ZSBvZiBleHRlbmRlZCBhdHRyaWJ1dGVzCistYXNzb2NpYXRlZCB3aXRoIGEgZmlsZSwgYW5kIHRoZSBhbGdvcml0aG1zIHVzZWQgdG8gc3RvcmUgZXh0ZW5kZWQKKy1hdHRyaWJ1dGUgaW5mb3JtYXRpb24gb24gZGlzayBhcmUgc2NhbGFibGUuCistLlBQCistSW4gdGhlIEpGUyBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLCBuYW1lcyBjYW4gYmUgdXAgdG8gMjU1IGJ5dGVzIGFuZAorLXZhbHVlcyB1cCB0byA2NSw1MzUgYnl0ZXMuCistLlNIIEFERElUSU9OQUwgTk9URVMKKy1TaW5jZSB0aGUgZmlsZXN5c3RlbXMgb24gd2hpY2ggZXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgc3RvcmVkIG1pZ2h0IGFsc28KKy1iZSB1c2VkIG9uIGFyY2hpdGVjdHVyZXMgd2l0aCBhIGRpZmZlcmVudCBieXRlIG9yZGVyIGFuZCBtYWNoaW5lIHdvcmQKKy1zaXplLCBjYXJlIHNob3VsZCBiZSB0YWtlbiB0byBzdG9yZSBhdHRyaWJ1dGUgdmFsdWVzIGluIGFuIGFyY2hpdGVjdHVyZQorLWluZGVwZW5kZW50IGZvcm1hdC4KKy0uU0ggQVVUSE9SUworLUFuZHJlYXMgR3J1ZW5iYWNoZXIsCistLlJJIDwgYS5ncnVlbmJhY2hlckBiZXN0Yml0cy5hdCA+CistYW5kIHRoZSBTR0kgWEZTIGRldmVsb3BtZW50IHRlYW0sCistLlJJIDwgbGludXgteGZzQG9zcy5zZ2kuY29tID4uCistLlNIIFNFRSBBTFNPCistZ2V0ZmF0dHIoMSksCistc2V0ZmF0dHIoMSkuCistLSAKKzIuNy40CisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2ZpbGVzL1JlbW92ZS10aGUtc2VjdGlvbi0yLW1hbi1wYWdlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2ZpbGVzL1JlbW92ZS10aGUtc2VjdGlvbi0yLW1hbi1wYWdlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDRjNWEwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvUmVtb3ZlLXRoZS1zZWN0aW9uLTItbWFuLXBhZ2VzLnBhdGNoCkBAIC0wLDAgKzEsNjY2IEBACitGcm9tIGI5NzI2MDBhMjZmM2E5MzBlNTNlMmZjZTI2MjUyNjZhNWQyOTgxM2UgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZWFzIEdydWVuYmFjaGVyIDxhbmRyZWFzLmdydWVuYmFjaGVyQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMTQgQXByIDIwMTUgMjM6NTM6MTEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIFJlbW92ZSB0aGUgc2VjdGlvbiAyIG1hbiBwYWdlcworCitDb21taXQgOGQxMjYzYmNhOTU3MjJkNjZhNmY4ZTgzNDUwZjQ5ZDA5NTZlYTUzNCBmcm9tIHVwc3RyZWFtCitodHRwczovL2dpdC5zYXZhbm5haC5ub25nbnUub3JnL2dpdC9hdHRyLmdpdC8KKworVGhlIHNlY3Rpb24gMiBtYW4gcGFnZXMgaGF2ZSBsb25nIHNpbmNlIGJlZW4gYWRkZWQgdG8gdGhlIG1hbi1wYWdlcyBwYWNrYWdlCit3aGljaCBkb2N1bWVudHMgYWxsIHN5c3RlbSBjYWxsczsgdGhleSB3ZXJlIGRpc2FibGVkIGluIGF0dHIgYnkgZGVmYXVsdCBzaW5jZQorSmFudWFyeSAyMDE0LiAgR2V0IHJpZCBvZiB0aGVtIGhlcmUuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworW01BOiBtb2RpZmllZCB0byBhcHBseSBkaXJlY3RseSB0byB2Mi40LjQ3XQorU2lnbmVkLW9mZi1ieTogTWFyayBBc3NlbHN0aW5lIDxtYXJrLmFzc2Vsc3RpbmVAd2luZHJpdmVyLmNvbT4KKy0tLQorIG1hbi9NYWtlZmlsZSAgICAgICAgICAgfCAgIDIgKy0KKyBtYW4vbWFuMi9NYWtlZmlsZSAgICAgIHwgIDM1IC0tLS0tLS0tLS0tCisgbWFuL21hbjIvZ2V0eGF0dHIuMiAgICB8IDE0MyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIG1hbi9tYW4yL2xpc3R4YXR0ci4yICAgfCAxNTggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIG1hbi9tYW4yL3JlbW92ZXhhdHRyLjIgfCAxMTEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIG1hbi9tYW4yL3NldHhhdHRyLjIgICAgfCAxNDMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyA2IGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCA1OTEgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IG1hbi9tYW4yL01ha2VmaWxlCisgZGVsZXRlIG1vZGUgMTAwNjQ0IG1hbi9tYW4yL2dldHhhdHRyLjIKKyBkZWxldGUgbW9kZSAxMDA2NDQgbWFuL21hbjIvbGlzdHhhdHRyLjIKKyBkZWxldGUgbW9kZSAxMDA2NDQgbWFuL21hbjIvcmVtb3ZleGF0dHIuMgorIGRlbGV0ZSBtb2RlIDEwMDY0NCBtYW4vbWFuMi9zZXR4YXR0ci4yCisKK2RpZmYgLS1naXQgYS9tYW4vTWFrZWZpbGUgYi9tYW4vTWFrZWZpbGUKK2luZGV4IDk1MzU0MjYuLjc1NWRhZWQgMTAwNjQ0CistLS0gYS9tYW4vTWFrZWZpbGUKKysrKyBiL21hbi9NYWtlZmlsZQorQEAgLTE5LDcgKzE5LDcgQEAKKyBUT1BESVIgPSAuLgorIGluY2x1ZGUgJChUT1BESVIpL2luY2x1ZGUvYnVpbGRkZWZzCisgCistU1VCRElSUyA9IG1hbjEgbWFuMiBtYW4zIG1hbjUKKytTVUJESVJTID0gbWFuMSBtYW4zIG1hbjUKKyAKKyBkZWZhdWx0IDogJChTVUJESVJTKQorIAorZGlmZiAtLWdpdCBhL21hbi9tYW4yL01ha2VmaWxlIGIvbWFuL21hbjIvTWFrZWZpbGUKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggZDc3MzA5ZC4uMDAwMDAwMAorLS0tIGEvbWFuL21hbjIvTWFrZWZpbGUKKysrKyAvZGV2L251bGwKK0BAIC0xLDM1ICswLDAgQEAKKy0jCistIyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorLSMgQ29weXJpZ2h0IChDKSAyMDA5ICBBbmRyZWFzIEdydWVuYmFjaGVyIDxhZ3J1ZW5Ac3VzZS5kZT4KKy0jCistIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCistIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLSMKKy0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistIworLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorLSMKKy0KKy1UT1BESVIgPSAuLi8uLgorLWluY2x1ZGUgJChUT1BESVIpL2luY2x1ZGUvYnVpbGRkZWZzCistCistTUFOX1NFQ1RJT04JPSAyCistCistTUFOX1BBR0VTCT0gJChzaGVsbCBlY2hvICouJChNQU5fU0VDVElPTikpCistTUFOX0RFU1QJPSAkKFBLR19NQU5fRElSKS9tYW4kKE1BTl9TRUNUSU9OKQorLUxTUkNGSUxFUwk9ICQoTUFOX1BBR0VTKQorLQorLWRlZmF1bHQgaW5zdGFsbCA6ICQoTUFOX1BBR0VTKQorLQorLWluY2x1ZGUgJChCVUlMRFJVTEVTKQorLQorLWluc3RhbGwtZGV2IDogZGVmYXVsdAorLQkkKElOU1RBTEwpIC1tIDc1NSAtZCAkKE1BTl9ERVNUKQorLQkkKElOU1RBTExfTUFOKQorLWluc3RhbGwtbGliOgorZGlmZiAtLWdpdCBhL21hbi9tYW4yL2dldHhhdHRyLjIgYi9tYW4vbWFuMi9nZXR4YXR0ci4yCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDQwNWFkODkuLjAwMDAwMDAKKy0tLSBhL21hbi9tYW4yL2dldHhhdHRyLjIKKysrKyAvZGV2L251bGwKK0BAIC0xLDE0MyArMCwwIEBACistLlwiCistLlwiIEV4dGVuZGVkIGF0dHJpYnV0ZXMgc3lzdGVtIGNhbGxzIG1hbnVhbCBwYWdlcworLS5cIgorLS5cIiAoQykgQW5kcmVhcyBHcnVlbmJhY2hlciwgRmVicnVhcnkgMjAwMQorLS5cIiAoQykgU2lsaWNvbiBHcmFwaGljcyBJbmMsIFNlcHRlbWJlciAyMDAxCistLlwiCistLlwiIFRoaXMgaXMgZnJlZSBkb2N1bWVudGF0aW9uOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKy0uXCIgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKy0uXCIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKy0uXCIgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCistLlwiCistLlwiIFRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSdzIHJlZmVyZW5jZXMgdG8gIm9iamVjdCBjb2RlIgorLS5cIiBhbmQgImV4ZWN1dGFibGVzIiBhcmUgdG8gYmUgaW50ZXJwcmV0ZWQgYXMgdGhlIG91dHB1dCBvZiBhbnkKKy0uXCIgZG9jdW1lbnQgZm9ybWF0dGluZyBvciB0eXBlc2V0dGluZyBzeXN0ZW0sIGluY2x1ZGluZworLS5cIiBpbnRlcm1lZGlhdGUgYW5kIHByaW50ZWQgb3V0cHV0LgorLS5cIgorLS5cIiBUaGlzIG1hbnVhbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLS5cIiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLS5cIiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistLlwiIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistLlwiCistLlwiIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworLS5cIiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBtYW51YWwuICBJZiBub3QsIHNlZQorLS5cIiA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCistLlwiCistLlRIIEdFVFhBVFRSIDIgIkV4dGVuZGVkIEF0dHJpYnV0ZXMiICJEZWMgMjAwMSIgIlN5c3RlbSBjYWxscyIKKy0uU0ggTkFNRQorLWdldHhhdHRyLCBsZ2V0eGF0dHIsIGZnZXR4YXR0ciBcLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKKy0uU0ggU1lOT1BTSVMKKy0uZmFtIEMKKy0ubmYKKy0uQiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistLkIgI2luY2x1ZGUgPGF0dHIveGF0dHIuaD4KKy0uc3AKKy0uQkkgInNzaXplX3QgZ2V0eGF0dHIgKGNvbnN0IGNoYXJcICoiIHBhdGggIiwgY29uc3QgY2hhclwgKiIgbmFtZSAiLAorLS5CSSAiXHRcdFx0XHQgdm9pZFwgKiIgdmFsdWUgIiwgc2l6ZV90ICIgc2l6ZSApOworLS5CSSAic3NpemVfdCBsZ2V0eGF0dHIgKGNvbnN0IGNoYXJcICoiIHBhdGggIiwgY29uc3QgY2hhclwgKiIgbmFtZSAiLAorLS5CSSAiXHRcdFx0XHQgdm9pZFwgKiIgdmFsdWUgIiwgc2l6ZV90ICIgc2l6ZSApOworLS5CSSAic3NpemVfdCBmZ2V0eGF0dHIgKGludCAiIGZpbGVkZXMgIiwgY29uc3QgY2hhclwgKiIgbmFtZSAiLAorLS5CSSAiXHRcdFx0XHQgdm9pZFwgKiIgdmFsdWUgIiwgc2l6ZV90ICIgc2l6ZSApOworLS5maQorLS5mYW0gVAorLS5TSCBERVNDUklQVElPTgorLUV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlCistLklSIG5hbWUgOlxjCistLkkgdmFsdWUKKy1wYWlycyBhc3NvY2lhdGVkIHdpdGggaW5vZGVzIChmaWxlcywgZGlyZWN0b3JpZXMsIHN5bWxpbmtzLCBldGMpLgorLVRoZXkgYXJlIGV4dGVuc2lvbnMgdG8gdGhlIG5vcm1hbCBhdHRyaWJ1dGVzIHdoaWNoIGFyZSBhc3NvY2lhdGVkCistd2l0aCBhbGwgaW5vZGVzIGluIHRoZSBzeXN0ZW0gKGkuZS4gdGhlCistLkJSIHN0YXQgKDIpCistZGF0YSkuCistQSBjb21wbGV0ZSBvdmVydmlldyBvZiBleHRlbmRlZCBhdHRyaWJ1dGVzIGNvbmNlcHRzIGNhbiBiZSBmb3VuZCBpbgorLS5CUiBhdHRyICg1KS4KKy0uUFAKKy0uQiBnZXR4YXR0cgorLXJldHJpZXZlcyB0aGUKKy0uSSB2YWx1ZQorLW9mIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUgaWRlbnRpZmllZCBieQorLS5JIG5hbWUKKy1hbmQgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbgorLS5JIHBhdGgKKy1pbiB0aGUgZmlsZXN5c3RlbS4KKy1UaGUgbGVuZ3RoIG9mIHRoZSBhdHRyaWJ1dGUKKy0uSSB2YWx1ZQorLWlzIHJldHVybmVkLgorLS5QUAorLS5CIGxnZXR4YXR0cgorLWlzIGlkZW50aWNhbCB0byAKKy0uQlIgZ2V0eGF0dHIgLAorLWV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBhIHN5bWJvbGljIGxpbmssIHdoZXJlIHRoZSBsaW5rIGl0c2VsZiBpcworLWludGVycm9nYXRlZCwgbm90IHRoZSBmaWxlIHRoYXQgaXQgcmVmZXJzIHRvLgorLS5QUAorLS5CIGZnZXR4YXR0cgorLWlzIGlkZW50aWNhbCB0bworLS5CUiBnZXR4YXR0ciAsCistb25seSB0aGUgb3BlbiBmaWxlIHBvaW50ZWQgdG8gYnkKKy0uSSBmaWxlZGVzCistKGFzIHJldHVybmVkIGJ5CistLkJSIG9wZW4gKDIpKQorLWlzIGludGVycm9nYXRlZCBpbiBwbGFjZSBvZgorLS5JUiBwYXRoIC4KKy0uUFAKKy1BbiBleHRlbmRlZCBhdHRyaWJ1dGUKKy0uSSBuYW1lCistaXMgYSBzaW1wbGUgTlVMTC10ZXJtaW5hdGVkIHN0cmluZy4KKy1UaGUgbmFtZSBpbmNsdWRlcyBhIG5hbWVzcGFjZSBwcmVmaXggXC0gdGhlcmUgbWF5IGJlIHNldmVyYWwsIGRpc2pvaW50CistbmFtZXNwYWNlcyBhc3NvY2lhdGVkIHdpdGggYW4gaW5kaXZpZHVhbCBpbm9kZS4KKy1UaGUgdmFsdWUgb2YgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGlzIGEgY2h1bmsgb2YgYXJiaXRyYXJ5IHRleHR1YWwgb3IKKy1iaW5hcnkgZGF0YSBvZiBzcGVjaWZpZWQgbGVuZ3RoLgorLS5QUAorLUFuIGVtcHR5IGJ1ZmZlciBvZgorLS5JIHNpemUKKy16ZXJvIGNhbiBiZSBwYXNzZWQgaW50byB0aGVzZSBjYWxscyB0byByZXR1cm4gdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUKKy1uYW1lZCBleHRlbmRlZCBhdHRyaWJ1dGUsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGVzdGltYXRlIHRoZSBzaXplIG9mIGEKKy1idWZmZXIgd2hpY2ggaXMgc3VmZmljaWVudGx5IGxhcmdlIHRvIGhvbGQgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aAorLXRoZSBleHRlbmRlZCBhdHRyaWJ1dGUuCistLlBQCistVGhlIGludGVyZmFjZSBpcyBkZXNpZ25lZCB0byBhbGxvdyBndWVzc2luZyBvZiBpbml0aWFsIGJ1ZmZlcgorLXNpemVzLCBhbmQgdG8gZW5sYXJnZSBidWZmZXJzIHdoZW4gdGhlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMKKy10aGF0IHRoZSBidWZmZXIgcHJvdmlkZWQgd2FzIHRvbyBzbWFsbC4KKy0uU0ggUkVUVVJOIFZBTFVFCistT24gc3VjY2VzcywgYSBwb3NpdGl2ZSBudW1iZXIgaXMgcmV0dXJuZWQgaW5kaWNhdGluZyB0aGUgc2l6ZSBvZiB0aGUKKy1leHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUuCistT24gZmFpbHVyZSwgXC0xIGlzIHJldHVybmVkIGFuZAorLS5JIGVycm5vCistaXMgc2V0IGFwcHJvcHJpYXRlbHkuCistLlBQCistSWYgdGhlIG5hbWVkIGF0dHJpYnV0ZSBkb2VzIG5vdCBleGlzdCwgb3IgdGhlIHByb2Nlc3MgaGFzIG5vIGFjY2VzcyB0bworLXRoaXMgYXR0cmlidXRlLAorLS5JIGVycm5vCistaXMgc2V0IHRvIEVOT0FUVFIuCistLlBQCistSWYgdGhlCistLkkgc2l6ZQorLW9mIHRoZQorLS5JIHZhbHVlCistYnVmZmVyIGlzIHRvbyBzbWFsbCB0byBob2xkIHRoZSByZXN1bHQsCistLkkgZXJybm8KKy1pcyBzZXQgdG8gRVJBTkdFLgorLS5QUAorLUlmIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGZpbGVzeXN0ZW0sIG9yIGFyZSBkaXNhYmxlZCwKKy0uSSBlcnJubworLWlzIHNldCB0byBFTk9UU1VQLgorLS5QUAorLVRoZSBlcnJvcnMgZG9jdW1lbnRlZCBmb3IgdGhlCistLkJSIHN0YXQgKDIpCistc3lzdGVtIGNhbGwgYXJlIGFsc28gYXBwbGljYWJsZSBoZXJlLgorLS5TSCBBVVRIT1JTCistQW5kcmVhcyBHcnVlbmJhY2hlciwKKy0uUkkgPCBhLmdydWVuYmFjaGVyQGJlc3RiaXRzLmF0ID4KKy1hbmQgdGhlIFNHSSBYRlMgZGV2ZWxvcG1lbnQgdGVhbSwKKy0uUkkgPCBsaW51eC14ZnNAb3NzLnNnaS5jb20gPi4KKy1QbGVhc2Ugc2VuZCBhbnkgYnVnIHJlcG9ydHMgb3IgY29tbWVudHMgdG8gdGhlc2UgYWRkcmVzc2VzLgorLS5TSCBTRUUgQUxTTworLS5CUiBnZXRmYXR0ciAoMSksCistLkJSIHNldGZhdHRyICgxKSwKKy0uQlIgb3BlbiAoMiksCistLkJSIHN0YXQgKDIpLAorLS5CUiBzZXR4YXR0ciAoMiksCistLkJSIGxpc3R4YXR0ciAoMiksCistLkJSIHJlbW92ZXhhdHRyICgyKSwKKy1hbmQKKy0uQlIgYXR0ciAoNSkuCitkaWZmIC0tZ2l0IGEvbWFuL21hbjIvbGlzdHhhdHRyLjIgYi9tYW4vbWFuMi9saXN0eGF0dHIuMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCA4YjQzNzFjLi4wMDAwMDAwCistLS0gYS9tYW4vbWFuMi9saXN0eGF0dHIuMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMTU4ICswLDAgQEAKKy0uXCIKKy0uXCIgRXh0ZW5kZWQgYXR0cmlidXRlcyBzeXN0ZW0gY2FsbHMgbWFudWFsIHBhZ2VzCistLlwiCistLlwiIChDKSBBbmRyZWFzIEdydWVuYmFjaGVyLCBGZWJydWFyeSAyMDAxCistLlwiIChDKSBTaWxpY29uIEdyYXBoaWNzIEluYywgU2VwdGVtYmVyIDIwMDEKKy0uXCIKKy0uXCIgVGhpcyBpcyBmcmVlIGRvY3VtZW50YXRpb247IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorLS5cIiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworLS5cIiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorLS5cIiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0uXCIKKy0uXCIgVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlJ3MgcmVmZXJlbmNlcyB0byAib2JqZWN0IGNvZGUiCistLlwiIGFuZCAiZXhlY3V0YWJsZXMiIGFyZSB0byBiZSBpbnRlcnByZXRlZCBhcyB0aGUgb3V0cHV0IG9mIGFueQorLS5cIiBkb2N1bWVudCBmb3JtYXR0aW5nIG9yIHR5cGVzZXR0aW5nIHN5c3RlbSwgaW5jbHVkaW5nCistLlwiIGludGVybWVkaWF0ZSBhbmQgcHJpbnRlZCBvdXRwdXQuCistLlwiCistLlwiIFRoaXMgbWFudWFsIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistLlwiIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistLlwiIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0uXCIgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0uXCIKKy0uXCIgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCistLlwiIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIG1hbnVhbC4gIElmIG5vdCwgc2VlCistLlwiIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKy0uXCIKKy0uVEggTElTVFhBVFRSIDIgIkV4dGVuZGVkIEF0dHJpYnV0ZXMiICJEZWMgMjAwMSIgIlN5c3RlbSBjYWxscyIKKy0uU0ggTkFNRQorLWxpc3R4YXR0ciwgbGxpc3R4YXR0ciwgZmxpc3R4YXR0ciBcLSBsaXN0IGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcworLS5TSCBTWU5PUFNJUworLS5mYW0gQworLS5uZgorLS5CICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0uQiAjaW5jbHVkZSA8YXR0ci94YXR0ci5oPgorLS5zcAorLS5CSSAic3NpemVfdCBsaXN0eGF0dHIgKGNvbnN0IGNoYXJcICoiIHBhdGggIiwKKy0uQkkgIlx0XHRcdFx0IGNoYXJcICoiIGxpc3QgIiwgc2l6ZV90ICIgc2l6ZSApOworLS5CSSAic3NpemVfdCBsbGlzdHhhdHRyIChjb25zdCBjaGFyXCAqIiBwYXRoICIsCistLkJJICJcdFx0XHRcdCBjaGFyXCAqIiBsaXN0ICIsIHNpemVfdCAiIHNpemUgKTsKKy0uQkkgInNzaXplX3QgZmxpc3R4YXR0ciAoaW50ICIgZmlsZWRlcyAiLAorLS5CSSAiXHRcdFx0XHQgY2hhclwgKiIgbGlzdCAiLCBzaXplX3QgIiBzaXplICk7CistLmZpCistLmZhbSBUCistLlNIIERFU0NSSVBUSU9OCistRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbmFtZTp2YWx1ZQorLXBhaXJzIGFzc29jaWF0ZWQgd2l0aCBpbm9kZXMgKGZpbGVzLCBkaXJlY3Rvcmllcywgc3ltbGlua3MsIGV0YykuCistVGhleSBhcmUgZXh0ZW5zaW9ucyB0byB0aGUgbm9ybWFsIGF0dHJpYnV0ZXMgd2hpY2ggYXJlIGFzc29jaWF0ZWQKKy13aXRoIGFsbCBpbm9kZXMgaW4gdGhlIHN5c3RlbSAoaS5lLiB0aGUKKy0uQlIgc3RhdCAoMikKKy1kYXRhKS4KKy1BIGNvbXBsZXRlIG92ZXJ2aWV3IG9mIGV4dGVuZGVkIGF0dHJpYnV0ZXMgY29uY2VwdHMgY2FuIGJlIGZvdW5kIGluCistLkJSIGF0dHIgKDUpLgorLS5QUAorLS5CIGxpc3R4YXR0cgorLXJldHJpZXZlcyB0aGUKKy0uSSBsaXN0Cistb2YgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4KKy0uSSBwYXRoCistaW4gdGhlIGZpbGVzeXN0ZW0uCistVGhlIGxpc3QgaXMgdGhlIHNldCBvZiAoTlVMTC10ZXJtaW5hdGVkKSBuYW1lcywgb25lIGFmdGVyIHRoZSBvdGhlci4KKy1OYW1lcyBvZiBleHRlbmRlZCBhdHRyaWJ1dGVzIHRvIHdoaWNoIHRoZSBjYWxsaW5nIHByb2Nlc3MgZG9lcyBub3QKKy1oYXZlIGFjY2VzcyBtYXkgYmUgb21pdHRlZCBmcm9tIHRoZSBsaXN0LgorLVRoZSBsZW5ndGggb2YgdGhlIGF0dHJpYnV0ZSBuYW1lCistLkkgbGlzdAorLWlzIHJldHVybmVkLgorLS5QUAorLS5CIGxsaXN0eGF0dHIKKy1pcyBpZGVudGljYWwgdG8KKy0uQlIgbGlzdHhhdHRyICwKKy1leGNlcHQgaW4gdGhlIGNhc2Ugb2YgYSBzeW1ib2xpYyBsaW5rLCB3aGVyZSB0aGUgbGlzdCBvZiBuYW1lcyBvZgorLWV4dGVuZGVkIGF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBsaW5rIGl0c2VsZiBpcyByZXRyaWV2ZWQsCistbm90IHRoZSBmaWxlIHRoYXQgaXQgcmVmZXJzIHRvLgorLS5JIGxpc3QKKy1pcyBhIGNhbGxlci1hbGxvY2F0ZWQgYnVmZmVyIG9mIHNpemUKKy0uSVIgc2l6ZSAuCistLlBQCistLkIgZmxpc3R4YXR0cgorLWlzIGlkZW50aWNhbCB0bworLS5CUiBsaXN0eGF0dHIgLAorLW9ubHkgdGhlIG9wZW4gZmlsZSBwb2ludGVkIHRvIGJ5CistLkkgZmlsZWRlcworLShhcyByZXR1cm5lZCBieQorLS5CUiBvcGVuICgyKSkKKy1pcyBpbnRlcnJvZ2F0ZWQgaW4gcGxhY2Ugb2YKKy0uSVIgcGF0aCAuCistLlBQCistQSBzaW5nbGUgZXh0ZW5kZWQgYXR0cmlidXRlCistLkkgbmFtZQorLWlzIGEgc2ltcGxlIE5VTEwtdGVybWluYXRlZCBzdHJpbmcuCistVGhlIG5hbWUgaW5jbHVkZXMgYSBuYW1lc3BhY2UgcHJlZml4IFwtIHRoZXJlIG1heSBiZSBzZXZlcmFsLCBkaXNqb2ludAorLW5hbWVzcGFjZXMgYXNzb2NpYXRlZCB3aXRoIGFuIGluZGl2aWR1YWwgaW5vZGUuCistLlBQCistQW4gZW1wdHkgYnVmZmVyIG9mCistLkkgc2l6ZQorLXplcm8gY2FuIGJlIHBhc3NlZCBpbnRvIHRoZXNlIGNhbGxzIHRvIHJldHVybiB0aGUgY3VycmVudCBzaXplIG9mIHRoZQorLWxpc3Qgb2YgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzLCB3aGljaCBjYW4gYmUgdXNlZCB0byBlc3RpbWF0ZSB0aGUKKy1zaXplIG9mIGEgYnVmZmVyIHdoaWNoIGlzIHN1ZmZpY2llbnRseSBsYXJnZSB0byBob2xkIHRoZSBsaXN0IG9mIG5hbWVzLgorLS5TSCBFWEFNUExFUworLVRoZQorLS5JIGxpc3QKKy1vZiBuYW1lcyBpcyByZXR1cm5lZCBhcyBhbiB1bm9yZGVyZWQgYXJyYXkgb2YgTlVMTC10ZXJtaW5hdGVkIGNoYXJhY3RlcgorLXN0cmluZ3MgKGF0dHJpYnV0ZSBuYW1lcyBhcmUgc2VwYXJhdGVkIGJ5IE5VTEwgY2hhcmFjdGVycyksIGxpa2UgdGhpczoKKy0uZmFtIEMKKy0uUlMKKy0ubmYKKy11c2VyLm5hbWUxXFwwc3lzdGVtLm5hbWUxXFwwdXNlci5uYW1lMlxcMAorLS5maQorLS5SRQorLS5mYW0gVAorLS5QCistRmlsZXN5c3RlbXMgbGlrZSBleHQyLCBleHQzIGFuZCBYRlMgd2hpY2ggaW1wbGVtZW50IFBPU0lYIEFDTHMgdXNpbmcKKy1leHRlbmRlZCBhdHRyaWJ1dGVzLCBtaWdodCByZXR1cm4gYQorLS5JIGxpc3QKKy1saWtlIHRoaXM6CistLmZhbSBDCistLlJTCistLm5mCistc3lzdGVtLnBvc2l4X2FjbF9hY2Nlc3NcXDBzeXN0ZW0ucG9zaXhfYWNsX2RlZmF1bHRcXDAKKy0uZmkKKy0uUkUKKy0uZmFtIFQKKy0uU0ggUkVUVVJOIFZBTFVFCistT24gc3VjY2VzcywgYSBwb3NpdGl2ZSBudW1iZXIgaXMgcmV0dXJuZWQgaW5kaWNhdGluZyB0aGUgc2l6ZSBvZiB0aGUKKy1leHRlbmRlZCBhdHRyaWJ1dGUgbmFtZSBsaXN0LgorLU9uIGZhaWx1cmUsIFwtMSBpcyByZXR1cm5lZCBhbmQKKy0uSSBlcnJubworLWlzIHNldCBhcHByb3ByaWF0ZWx5LgorLS5QUAorLUlmIHRoZQorLS5JIHNpemUKKy1vZiB0aGUKKy0uSSBsaXN0CistYnVmZmVyIGlzIHRvbyBzbWFsbCB0byBob2xkIHRoZSByZXN1bHQsCistLkkgZXJybm8KKy1pcyBzZXQgdG8gRVJBTkdFLgorLS5QUAorLUlmIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGZpbGVzeXN0ZW0sIG9yIGFyZSBkaXNhYmxlZCwKKy0uSSBlcnJubworLWlzIHNldCB0byBFTk9UU1VQLgorLS5QUAorLVRoZSBlcnJvcnMgZG9jdW1lbnRlZCBmb3IgdGhlCistLkJSIHN0YXQgKDIpCistc3lzdGVtIGNhbGwgYXJlIGFsc28gYXBwbGljYWJsZSBoZXJlLgorLS5TSCBBVVRIT1JTCistQW5kcmVhcyBHcnVlbmJhY2hlciwKKy0uUkkgPCBhLmdydWVuYmFjaGVyQGJlc3RiaXRzLmF0ID4KKy1hbmQgdGhlIFNHSSBYRlMgZGV2ZWxvcG1lbnQgdGVhbSwKKy0uUkkgPCBsaW51eC14ZnNAb3NzLnNnaS5jb20gPi4KKy1QbGVhc2Ugc2VuZCBhbnkgYnVnIHJlcG9ydHMgb3IgY29tbWVudHMgdG8gdGhlc2UgYWRkcmVzc2VzLgorLS5TSCBTRUUgQUxTTworLS5CUiBnZXRmYXR0ciAoMSksCistLkJSIHNldGZhdHRyICgxKSwKKy0uQlIgb3BlbiAoMiksCistLkJSIHN0YXQgKDIpLAorLS5CUiBnZXR4YXR0ciAoMiksCistLkJSIHNldHhhdHRyICgyKSwKKy0uQlIgcmVtb3ZleGF0dHIgKDIpLAorLWFuZAorLS5CUiBhdHRyICg1KS4KK2RpZmYgLS1naXQgYS9tYW4vbWFuMi9yZW1vdmV4YXR0ci4yIGIvbWFuL21hbjIvcmVtb3ZleGF0dHIuMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAyYzdkOTM0Li4wMDAwMDAwCistLS0gYS9tYW4vbWFuMi9yZW1vdmV4YXR0ci4yCisrKysgL2Rldi9udWxsCitAQCAtMSwxMTEgKzAsMCBAQAorLS5cIgorLS5cIiBFeHRlbmRlZCBhdHRyaWJ1dGVzIHN5c3RlbSBjYWxscyBtYW51YWwgcGFnZXMKKy0uXCIKKy0uXCIgKEMpIEFuZHJlYXMgR3J1ZW5iYWNoZXIsIEZlYnJ1YXJ5IDIwMDEKKy0uXCIgKEMpIFNpbGljb24gR3JhcGhpY3MgSW5jLCBTZXB0ZW1iZXIgMjAwMQorLS5cIgorLS5cIiBUaGlzIGlzIGZyZWUgZG9jdW1lbnRhdGlvbjsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCistLlwiIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCistLlwiIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCistLlwiIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLS5cIgorLS5cIiBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UncyByZWZlcmVuY2VzIHRvICJvYmplY3QgY29kZSIKKy0uXCIgYW5kICJleGVjdXRhYmxlcyIgYXJlIHRvIGJlIGludGVycHJldGVkIGFzIHRoZSBvdXRwdXQgb2YgYW55CistLlwiIGRvY3VtZW50IGZvcm1hdHRpbmcgb3IgdHlwZXNldHRpbmcgc3lzdGVtLCBpbmNsdWRpbmcKKy0uXCIgaW50ZXJtZWRpYXRlIGFuZCBwcmludGVkIG91dHB1dC4KKy0uXCIKKy0uXCIgVGhpcyBtYW51YWwgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0uXCIgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0uXCIgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLS5cIiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLS5cIgorLS5cIiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKy0uXCIgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbWFudWFsLiAgSWYgbm90LCBzZWUKKy0uXCIgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorLS5cIgorLS5USCBSRU1PVkVYQVRUUiAyICJFeHRlbmRlZCBBdHRyaWJ1dGVzIiAiRGVjIDIwMDEiICJTeXN0ZW0gY2FsbHMiCistLlNIIE5BTUUKKy1yZW1vdmV4YXR0ciwgbHJlbW92ZXhhdHRyLCBmcmVtb3ZleGF0dHIgXC0gcmVtb3ZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZQorLS5TSCBTWU5PUFNJUworLS5mYW0gQworLS5uZgorLS5CICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0uQiAjaW5jbHVkZSA8YXR0ci94YXR0ci5oPgorLS5zcAorLS5CSSAiaW50IHJlbW92ZXhhdHRyIChjb25zdCBjaGFyXCAqIiBwYXRoICIsIGNvbnN0IGNoYXJcICoiIG5hbWUgKTsKKy0uQkkgImludCBscmVtb3ZleGF0dHIgKGNvbnN0IGNoYXJcICoiIHBhdGggIiwgY29uc3QgY2hhclwgKiIgbmFtZSApOworLS5CSSAiaW50IGZyZW1vdmV4YXR0ciAoaW50ICIgZmlsZWRlcyAiLCBjb25zdCBjaGFyXCAqIiBuYW1lICk7CistLmZpCistLmZhbSBUCistLlNIIERFU0NSSVBUSU9OCistRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUKKy0uSVIgbmFtZSA6XGMKKy12YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggaW5vZGVzIChmaWxlcywgZGlyZWN0b3JpZXMsIHN5bWxpbmtzLCBldGMpLgorLVRoZXkgYXJlIGV4dGVuc2lvbnMgdG8gdGhlIG5vcm1hbCBhdHRyaWJ1dGVzIHdoaWNoIGFyZSBhc3NvY2lhdGVkCistd2l0aCBhbGwgaW5vZGVzIGluIHRoZSBzeXN0ZW0gKGkuZS4gdGhlCistLkJSIHN0YXQgKDIpCistZGF0YSkuCistQSBjb21wbGV0ZSBvdmVydmlldyBvZiBleHRlbmRlZCBhdHRyaWJ1dGVzIGNvbmNlcHRzIGNhbiBiZSBmb3VuZCBpbgorLS5CUiBhdHRyICg1KS4KKy0uUFAKKy0uQiByZW1vdmV4YXR0cgorLXJlbW92ZXMgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSBpZGVudGlmaWVkIGJ5CistLkkgbmFtZQorLWFuZCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuCistLkkgcGF0aAorLWluIHRoZSBmaWxlc3lzdGVtLgorLS5QUAorLS5CIGxyZW1vdmV4YXR0cgorLWlzIGlkZW50aWNhbCB0byAKKy0uQlIgcmVtb3ZleGF0dHIgLAorLWV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBhIHN5bWJvbGljIGxpbmssIHdoZXJlIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUgaXMKKy1yZW1vdmVkIGZyb20gdGhlIGxpbmsgaXRzZWxmLCBub3QgdGhlIGZpbGUgdGhhdCBpdCByZWZlcnMgdG8uCistLlBQCistLkIgZnJlbW92ZXhhdHRyCistaXMgaWRlbnRpY2FsIHRvCistLkJSIHJlbW92ZXhhdHRyICwKKy1vbmx5IHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUgaXMgcmVtb3ZlZCBmcm9tIHRoZSBvcGVuIGZpbGUgcG9pbnRlZCB0byBieQorLS5JIGZpbGVkZXMKKy0oYXMgcmV0dXJuZWQgYnkKKy0uQlIgb3BlbiAoMikpCistaW4gcGxhY2Ugb2YKKy0uSVIgcGF0aCAuCistLlBQCistQW4gZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWUgaXMgYSBzaW1wbGUgTlVMTC10ZXJtaW5hdGVkIHN0cmluZy4KKy1UaGUKKy0uSSBuYW1lCistaW5jbHVkZXMgYSBuYW1lc3BhY2UgcHJlZml4IFwtIHRoZXJlIG1heSBiZSBzZXZlcmFsLCBkaXNqb2ludAorLW5hbWVzcGFjZXMgYXNzb2NpYXRlZCB3aXRoIGFuIGluZGl2aWR1YWwgaW5vZGUuCistLlNIIFJFVFVSTiBWQUxVRQorLU9uIHN1Y2Nlc3MsIHplcm8gaXMgcmV0dXJuZWQuCistT24gZmFpbHVyZSwgXC0xIGlzIHJldHVybmVkIGFuZAorLS5JIGVycm5vCistaXMgc2V0IGFwcHJvcHJpYXRlbHkuCistLlBQCistSWYgdGhlIG5hbWVkIGF0dHJpYnV0ZSBkb2VzIG5vdCBleGlzdCwKKy0uSSBlcnJubworLWlzIHNldCB0byBFTk9BVFRSLgorLS5QUAorLUlmIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGZpbGVzeXN0ZW0sIG9yIGFyZSBkaXNhYmxlZCwKKy0uSSBlcnJubworLWlzIHNldCB0byBFTk9UU1VQLgorLS5QUAorLVRoZSBlcnJvcnMgZG9jdW1lbnRlZCBmb3IgdGhlCistLkJSIHN0YXQgKDIpCistc3lzdGVtIGNhbGwgYXJlIGFsc28gYXBwbGljYWJsZSBoZXJlLgorLS5TSCBBVVRIT1JTCistQW5kcmVhcyBHcnVlbmJhY2hlciwKKy0uUkkgPCBhLmdydWVuYmFjaGVyQGJlc3RiaXRzLmF0ID4KKy1hbmQgdGhlIFNHSSBYRlMgZGV2ZWxvcG1lbnQgdGVhbSwKKy0uUkkgPCBsaW51eC14ZnNAb3NzLnNnaS5jb20gPi4KKy1QbGVhc2Ugc2VuZCBhbnkgYnVnIHJlcG9ydHMgb3IgY29tbWVudHMgdG8gdGhlc2UgYWRkcmVzc2VzLgorLS5TSCBTRUUgQUxTTworLS5CUiBnZXRmYXR0ciAoMSksCistLkJSIHNldGZhdHRyICgxKSwKKy0uQlIgb3BlbiAoMiksCistLkJSIHN0YXQgKDIpLAorLS5CUiBzZXR4YXR0ciAoMiksCistLkJSIGdldHhhdHRyICgyKSwKKy0uQlIgbGlzdHhhdHRyICgyKSwKKy1hbmQKKy0uQlIgYXR0ciAoNSkuCitkaWZmIC0tZ2l0IGEvbWFuL21hbjIvc2V0eGF0dHIuMiBiL21hbi9tYW4yL3NldHhhdHRyLjIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggYjIwZGM5Zi4uMDAwMDAwMAorLS0tIGEvbWFuL21hbjIvc2V0eGF0dHIuMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMTQzICswLDAgQEAKKy0uXCIKKy0uXCIgRXh0ZW5kZWQgYXR0cmlidXRlcyBzeXN0ZW0gY2FsbHMgbWFudWFsIHBhZ2VzCistLlwiCistLlwiIChDKSBBbmRyZWFzIEdydWVuYmFjaGVyLCBGZWJydWFyeSAyMDAxCistLlwiIChDKSBTaWxpY29uIEdyYXBoaWNzIEluYywgU2VwdGVtYmVyIDIwMDEKKy0uXCIKKy0uXCIgVGhpcyBpcyBmcmVlIGRvY3VtZW50YXRpb247IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorLS5cIiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworLS5cIiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorLS5cIiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0uXCIKKy0uXCIgVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlJ3MgcmVmZXJlbmNlcyB0byAib2JqZWN0IGNvZGUiCistLlwiIGFuZCAiZXhlY3V0YWJsZXMiIGFyZSB0byBiZSBpbnRlcnByZXRlZCBhcyB0aGUgb3V0cHV0IG9mIGFueQorLS5cIiBkb2N1bWVudCBmb3JtYXR0aW5nIG9yIHR5cGVzZXR0aW5nIHN5c3RlbSwgaW5jbHVkaW5nCistLlwiIGludGVybWVkaWF0ZSBhbmQgcHJpbnRlZCBvdXRwdXQuCistLlwiCistLlwiIFRoaXMgbWFudWFsIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistLlwiIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistLlwiIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0uXCIgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0uXCIKKy0uXCIgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCistLlwiIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIG1hbnVhbC4gIElmIG5vdCwgc2VlCistLlwiIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKy0uXCIKKy0uVEggU0VUWEFUVFIgMiAiRXh0ZW5kZWQgQXR0cmlidXRlcyIgIkRlYyAyMDAxIiAiU3lzdGVtIGNhbGxzIgorLS5TSCBOQU1FCistc2V0eGF0dHIsIGxzZXR4YXR0ciwgZnNldHhhdHRyIFwtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKKy0uU0ggU1lOT1BTSVMKKy0uZmFtIEMKKy0ubmYKKy0uQiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistLkIgI2luY2x1ZGUgPGF0dHIveGF0dHIuaD4KKy0uc3AKKy0uQkkgImludCBzZXR4YXR0ciAoY29uc3QgY2hhclwgKiIgcGF0aCAiLCBjb25zdCBjaGFyXCAqIiBuYW1lICIsCistLkJJICJcdFx0XHQgY29uc3Qgdm9pZFwgKiIgdmFsdWUgIiwgc2l6ZV90ICIgc2l6ZSAiLCBpbnQgIiBmbGFncyApOworLS5CSSAiaW50IGxzZXR4YXR0ciAoY29uc3QgY2hhclwgKiIgcGF0aCAiLCBjb25zdCBjaGFyXCAqIiBuYW1lICIsCistLkJJICJcdFx0XHQgY29uc3Qgdm9pZFwgKiIgdmFsdWUgIiwgc2l6ZV90ICIgc2l6ZSAiLCBpbnQgIiBmbGFncyApOworLS5CSSAiaW50IGZzZXR4YXR0ciAoaW50ICIgZmlsZWRlcyAiLCBjb25zdCBjaGFyXCAqIiBuYW1lICIsCistLkJJICJcdFx0XHQgY29uc3Qgdm9pZFwgKiIgdmFsdWUgIiwgc2l6ZV90ICIgc2l6ZSAiLCBpbnQgIiBmbGFncyApOworLS5maQorLS5mYW0gVAorLS5TSCBERVNDUklQVElPTgorLUV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlCistLklSIG5hbWUgOlxjCistLkkgdmFsdWUKKy1wYWlycyBhc3NvY2lhdGVkIHdpdGggaW5vZGVzIChmaWxlcywgZGlyZWN0b3JpZXMsIHN5bWxpbmtzLCBldGMpLgorLVRoZXkgYXJlIGV4dGVuc2lvbnMgdG8gdGhlIG5vcm1hbCBhdHRyaWJ1dGVzIHdoaWNoIGFyZSBhc3NvY2lhdGVkCistd2l0aCBhbGwgaW5vZGVzIGluIHRoZSBzeXN0ZW0gKGkuZS4gdGhlCistLkJSIHN0YXQgKDIpCistZGF0YSkuCistQSBjb21wbGV0ZSBvdmVydmlldyBvZiBleHRlbmRlZCBhdHRyaWJ1dGVzIGNvbmNlcHRzIGNhbiBiZSBmb3VuZCBpbgorLS5CUiBhdHRyICg1KS4KKy0uUFAKKy0uQiBzZXR4YXR0cgorLXNldHMgdGhlCistLkkgdmFsdWUKKy1vZiB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlIGlkZW50aWZpZWQgYnkKKy0uSSBuYW1lCistYW5kIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4KKy0uSSBwYXRoCistaW4gdGhlIGZpbGVzeXN0ZW0uCistVGhlCistLkkgc2l6ZQorLW9mIHRoZQorLS5JIHZhbHVlCistbXVzdCBiZSBzcGVjaWZpZWQuCistLlBQCistLkIgbHNldHhhdHRyCistaXMgaWRlbnRpY2FsIHRvIAorLS5CUiBzZXR4YXR0ciAsCistZXhjZXB0IGluIHRoZSBjYXNlIG9mIGEgc3ltYm9saWMgbGluaywgd2hlcmUgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSBpcworLXNldCBvbiB0aGUgbGluayBpdHNlbGYsIG5vdCB0aGUgZmlsZSB0aGF0IGl0IHJlZmVycyB0by4KKy0uUFAKKy0uQiBmc2V0eGF0dHIKKy1pcyBpZGVudGljYWwgdG8KKy0uQlIgc2V0eGF0dHIgLAorLW9ubHkgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSBpcyBzZXQgb24gdGhlIG9wZW4gZmlsZSBwb2ludGVkIHRvIGJ5CistLkkgZmlsZWRlcworLShhcyByZXR1cm5lZCBieQorLS5CUiBvcGVuICgyKSkKKy1pbiBwbGFjZSBvZgorLS5JUiBwYXRoIC4KKy0uUFAKKy1BbiBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZSBpcyBhIHNpbXBsZSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nLgorLVRoZQorLS5JIG5hbWUKKy1pbmNsdWRlcyBhIG5hbWVzcGFjZSBwcmVmaXggXC0gdGhlcmUgbWF5IGJlIHNldmVyYWwsIGRpc2pvaW50CistbmFtZXNwYWNlcyBhc3NvY2lhdGVkIHdpdGggYW4gaW5kaXZpZHVhbCBpbm9kZS4KKy1UaGUKKy0uSSB2YWx1ZQorLW9mIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBpcyBhIGNodW5rIG9mIGFyYml0cmFyeSB0ZXh0dWFsIG9yCistYmluYXJ5IGRhdGEgb2Ygc3BlY2lmaWVkIGxlbmd0aC4KKy0uUFAKKy1UaGUKKy0uSSBmbGFncworLXBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byByZWZpbmUgdGhlIHNlbWFudGljcyBvZiB0aGUgb3BlcmF0aW9uLgorLVhBVFRSX0NSRUFURSBzcGVjaWZpZXMgYSBwdXJlIGNyZWF0ZSwgd2hpY2ggZmFpbHMgaWYgdGhlIG5hbWVkCistYXR0cmlidXRlIGV4aXN0cyBhbHJlYWR5LgorLVhBVFRSX1JFUExBQ0Ugc3BlY2lmaWVzIGEgcHVyZSByZXBsYWNlIG9wZXJhdGlvbiwgd2hpY2ggZmFpbHMgaWYgdGhlCistbmFtZWQgYXR0cmlidXRlIGRvZXMgbm90IGFscmVhZHkgZXhpc3QuCistQnkgZGVmYXVsdCAobm8gZmxhZ3MpLCB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlIHdpbGwgYmUgY3JlYXRlZCBpZgorLW5lZWQgYmUsIG9yIHdpbGwgc2ltcGx5IHJlcGxhY2UgdGhlIHZhbHVlIGlmIHRoZSBhdHRyaWJ1dGUgZXhpc3RzLgorLS5TSCBSRVRVUk4gVkFMVUUKKy1PbiBzdWNjZXNzLCB6ZXJvIGlzIHJldHVybmVkLgorLU9uIGZhaWx1cmUsIFwtMSBpcyByZXR1cm5lZCBhbmQKKy0uSSBlcnJubworLWlzIHNldCBhcHByb3ByaWF0ZWx5LgorLS5QUAorLUlmIFhBVFRSX0NSRUFURSBpcyBzcGVjaWZpZWQsIGFuZCB0aGUgYXR0cmlidXRlIGV4aXN0cyBhbHJlYWR5LAorLS5JIGVycm5vCistaXMgc2V0IHRvIEVFWElTVC4KKy1JZiBYQVRUUl9SRVBMQUNFIGlzIHNwZWNpZmllZCwgYW5kIHRoZSBhdHRyaWJ1dGUgZG9lcyBub3QgZXhpc3QsCistLkkgZXJybm8KKy1pcyBzZXQgdG8gRU5PQVRUUi4KKy0uUFAKKy1JZiB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgc3BhY2UgcmVtYWluaW5nIHRvIHN0b3JlIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUsCistLkkgZXJybm8KKy1pcyBzZXQgdG8gZWl0aGVyIEVOT1NQQywgb3IgRURRVU9UIGlmIHF1b3RhIGVuZm9yY2VtZW50IHdhcyB0aGUgY2F1c2UuCistLlBQCistSWYgZXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgZmlsZXN5c3RlbSwgb3IgYXJlIGRpc2FibGVkLAorLS5JIGVycm5vCistaXMgc2V0IHRvIEVOT1RTVVAuCistLlBQCistVGhlIGVycm9ycyBkb2N1bWVudGVkIGZvciB0aGUKKy0uQlIgc3RhdCAoMikKKy1zeXN0ZW0gY2FsbCBhcmUgYWxzbyBhcHBsaWNhYmxlIGhlcmUuCistLlNIIEFVVEhPUlMKKy1BbmRyZWFzIEdydWVuYmFjaGVyLAorLS5SSSA8IGEuZ3J1ZW5iYWNoZXJAYmVzdGJpdHMuYXQgPgorLWFuZCB0aGUgU0dJIFhGUyBkZXZlbG9wbWVudCB0ZWFtLAorLS5SSSA8IGxpbnV4LXhmc0Bvc3Muc2dpLmNvbSA+LgorLVBsZWFzZSBzZW5kIGFueSBidWcgcmVwb3J0cyBvciBjb21tZW50cyB0byB0aGVzZSBhZGRyZXNzZXMuCistLlNIIFNFRSBBTFNPCistLkJSIGdldGZhdHRyICgxKSwKKy0uQlIgc2V0ZmF0dHIgKDEpLAorLS5CUiBvcGVuICgyKSwKKy0uQlIgc3RhdCAoMiksCistLkJSIGdldHhhdHRyICgyKSwKKy0uQlIgbGlzdHhhdHRyICgyKSwKKy0uQlIgcmVtb3ZleGF0dHIgKDIpLAorLWFuZAorLS5CUiBhdHRyICg1KS4KKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jhc2gtY29tcGxldGlvbi9iYXNoLWNvbXBsZXRpb25fMi41LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jhc2gtY29tcGxldGlvbi9iYXNoLWNvbXBsZXRpb25fMi41LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDIyODU3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iYXNoLWNvbXBsZXRpb24vYmFzaC1jb21wbGV0aW9uXzIuNS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLVNVTU1BUlkgPSAiUHJvZ3JhbW1hYmxlIENvbXBsZXRpb24gZm9yIEJhc2ggNCIKLUhPTUVQQUdFID0gImh0dHA6Ly9iYXNoLWNvbXBsZXRpb24uYWxpb3RoLmRlYmlhbi5vcmcvIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2FsaW90aC5kZWJpYW4ub3JnL3Byb2plY3RzL2Jhc2gtY29tcGxldGlvbi8iCi0KLUxJQ0VOU0UgPSAiR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKLQotU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgotCi1TUkNfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS9zY29wL2Jhc2gtY29tcGxldGlvbi9yZWxlYXNlcy9kb3dubG9hZC8ke1BWfS8ke0JQTn0tJHtQVn0udGFyLnh6IgotCi1TUkNfVVJJW21kNXN1bV0gPSAiMTUzMDAwMTBiZDQwMzRkZTEyYzNmYzRmMTcxNjkyZTMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjBiOTU0MGM2NTUzMjgyNWVjYTAzMGYxMjQxNzMxMzgzZjg5YjJiNjVlODBmMzQ5MmM1ZGQyZjA0MzhjOTVjZiIKLVVQU1RSRUFNX0NIRUNLX1JFR0VYID0gImJhc2gtY29tcGxldGlvbi0oP1A8cHZlcj4oPyEyMDA4KS4rKVwudGFyIgotVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS9zY29wL2Jhc2gtY29tcGxldGlvbi9yZWxlYXNlcyIKLQotUEFSQUxMRUxfTUFLRSA9ICIiCi0KLWluaGVyaXQgYXV0b3Rvb2xzCi0KLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCSMgY29tcGF0ZGlyCi0JaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9iYXNoX2NvbXBsZXRpb24uZC8KLQllY2hvICcuICR7ZGF0YWRpcn0vJHtCUE59L2Jhc2hfY29tcGxldGlvbicgPiR7RH0ke3N5c2NvbmZkaXJ9L2Jhc2hfY29tcGxldGlvbgotCi0JIyBEZWxldGUgZmlsZXMgYWxyZWFkeSBwcm92aWRlZCBieSB1dGlsLWxpbnV4Ci0JbG9jYWwgaQotCWZvciBpIGluIG1vdW50IHVtb3VudDsgZG8KLQkJcm0gJHtEfSR7ZGF0YWRpcn0vJHtCUE59L2NvbXBsZXRpb25zLyRpCi0JZG9uZQotfQotCi1SREVQRU5EU18ke1BOfSA9ICJiYXNoIgotCi0jIFNvbWUgcmVjaXBlcyBhcmUgcHJvdmlkaW5nICR7UE59LWJhc2gtY29tcGxldGlvbiBwYWNrYWdlcwotUEFDS0FHRVMgPSsgIiR7UE59LWV4dHJhIgotRklMRVNfJHtQTn0tZXh0cmEgPSAiJHtkYXRhZGlyfS8ke0JQTn0vY29tcGxldGlvbnMvIFwKLSAgICAke2RhdGFkaXJ9LyR7QlBOfS9oZWxwZXJzLyIKLQotRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9L2NtYWtlIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iYXNoLWNvbXBsZXRpb24vYmFzaC1jb21wbGV0aW9uXzIuNy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iYXNoLWNvbXBsZXRpb24vYmFzaC1jb21wbGV0aW9uXzIuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTE5YjNmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jhc2gtY29tcGxldGlvbi9iYXNoLWNvbXBsZXRpb25fMi43LmJiCkBAIC0wLDAgKzEsNDIgQEAKK1NVTU1BUlkgPSAiUHJvZ3JhbW1hYmxlIENvbXBsZXRpb24gZm9yIEJhc2ggNCIKK0hPTUVQQUdFID0gImh0dHA6Ly9iYXNoLWNvbXBsZXRpb24uYWxpb3RoLmRlYmlhbi5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2FsaW90aC5kZWJpYW4ub3JnL3Byb2plY3RzL2Jhc2gtY29tcGxldGlvbi8iCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKKworU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitTUkNfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS9zY29wL2Jhc2gtY29tcGxldGlvbi9yZWxlYXNlcy9kb3dubG9hZC8ke1BWfS8ke0JQTn0tJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjgxMTc0OTJiZGM5NDA4NDM4ZTYwNDE2ODNhNDIzY2UiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDFiYTg5MmQzZjQyN2Q0YTY4NmRlMzI2NzNmMzU0MDFiYzk0N2E3ODAxZjY4NDEyNzEyMGNkYjEzNjQxNDQxZSIKK1VQU1RSRUFNX0NIRUNLX1JFR0VYID0gImJhc2gtY29tcGxldGlvbi0oP1A8cHZlcj4oPyEyMDA4KS4rKVwudGFyIgorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS9zY29wL2Jhc2gtY29tcGxldGlvbi9yZWxlYXNlcyIKKworUEFSQUxMRUxfTUFLRSA9ICIiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgY29tcGF0ZGlyCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9iYXNoX2NvbXBsZXRpb24uZC8KKwllY2hvICcuICR7ZGF0YWRpcn0vJHtCUE59L2Jhc2hfY29tcGxldGlvbicgPiR7RH0ke3N5c2NvbmZkaXJ9L2Jhc2hfY29tcGxldGlvbgorCisJIyBEZWxldGUgZmlsZXMgYWxyZWFkeSBwcm92aWRlZCBieSB1dGlsLWxpbnV4CisJbG9jYWwgaQorCWZvciBpIGluIG1vdW50IHVtb3VudCByZmtpbGw7IGRvCisJCXJtICR7RH0ke2RhdGFkaXJ9LyR7QlBOfS9jb21wbGV0aW9ucy8kaQorCWRvbmUKK30KKworUkRFUEVORFNfJHtQTn0gPSAiYmFzaCIKKworIyBTb21lIHJlY2lwZXMgYXJlIHByb3ZpZGluZyAke1BOfS1iYXNoLWNvbXBsZXRpb24gcGFja2FnZXMKK1BBQ0tBR0VTID0rICIke1BOfS1leHRyYSIKK0ZJTEVTXyR7UE59LWV4dHJhID0gIiR7ZGF0YWRpcn0vJHtCUE59L2NvbXBsZXRpb25zLyBcCisgICAgJHtkYXRhZGlyfS8ke0JQTn0vaGVscGVycy8iCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS9jbWFrZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2MvMDAwMS1jb25maWd1cmUuYWMtYWRkLWNoZWNrLWZvci1OT19HRVRDT05URVhULWRlZmluaXRpb24ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2MvMDAwMS1jb25maWd1cmUuYWMtYWRkLWNoZWNrLWZvci1OT19HRVRDT05URVhULWRlZmluaXRpb24ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlZjc3NGYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djLzAwMDEtY29uZmlndXJlLmFjLWFkZC1jaGVjay1mb3ItTk9fR0VUQ09OVEVYVC1kZWZpbml0aW9uLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotY29uZmlndXJlLmFjOiBhZGQgY2hlY2sgZm9yIE5PX0dFVENPTlRFWFQgZGVmaW5pdGlvbgotCi1TaWduZWQtb2ZmLWJ5OiBTYW11ZWwgTWFydGluIDxzLm1hcnRpbjQ5QGdtYWlsLmNvbT4KLVt5YW5uLm1vcmluLjE5OThAZnJlZS5mcjogYWRkIGEgY29tbWVudCwgY2hhbmdlIHZhcmlhYmxlIG5hbWUsIHVzZQotIEFTX0lGLCByZW1vdmUgZGVidWcgdHJhY2VzLCB1c2UgQUNfQ0hFQ0tfRlVOQ1MgKGFzIHN1Z2dlc3RlZCBieQotIFRob21hcyldCi1TaWduZWQtb2ZmLWJ5OiAiWWFubiBFLiBNT1JJTiIgPHlhbm4ubW9yaW4uMTk5OEBmcmVlLmZyPgotQ2M6IFRob21hcyBQZXRhenpvbmkgPHRob21hcy5wZXRhenpvbmlAZnJlZS1lbGVjdHJvbnMuY29tPgotCi0tLS0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotIGNvbmZpZ3VyZS5hYyB8IDYgKysrKysrCi0gMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKQotCi0tLS0gYmR3Z2MtNy4yZi5vcmlnL2NvbmZpZ3VyZS5hYwkyMDE0LTA2LTAxIDE5OjAwOjQ3LjAwMDAwMDAwMCArMDIwMAotKysrIGJkd2djLTcuMmYvY29uZmlndXJlLmFjCTIwMTQtMTItMjMgMTQ6MTM6MTEuNTg1NzE2NzEzICswMTAwCi1AQCAtMzY1LDYgKzM2NSwxMiBAQAotICAgQUNfTVNHX1JFU1VMVCgkYWNfY3ZfZm5vX3N0cmljdF9hbGlhc2luZykKLSBmaQotIAotKyMgQ2hlY2sgZm9yIGdldGNvbnRleHQgKHVDbGliYyBjYW4gYmUgY29uZmlndXJlZCB3aXRob3V0IGl0LCBmb3IgZXhhbXBsZSkKLStBQ19DSEVDS19GVU5DUyhbZ2V0Y29udGV4dF0pCi0rQVNfSUYoW3Rlc3QgIiRhY19jdl9mdW5jX2dldGNvbnRleHQiID0gIm5vIl0sCi0rICBbQ0ZMQUdTPSIkQ0ZMQUdTIC1ETk9fR0VUQ09OVEVYVCIKLSsgICBDUFBGTEFHUz0iJENQUEZMQUdTIC1ETk9fR0VUQ09OVEVYVCJdKQotKwotIGNhc2UgIiRob3N0IiBpbgotICMgV2hpbGUgSVJJWCA2IGhhcyBsaWJkbCBmb3IgdGhlIE8zMiBhbmQgTjMyIEFCSXMsIGl0J3MgbWlzc2luZyBmb3IgTjY0Ci0gIyBhbmQgdW5uZWNlc3NhcnkgZXZlcnl3aGVyZS4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnYy9tdXNsX2hlYWRlcl9maXgucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2MvbXVzbF9oZWFkZXJfZml4LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTE4NDk2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnYy9tdXNsX2hlYWRlcl9maXgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1BZGQgbWlzc2luZyBoZWFkZXIgdG8gYXZvaWQ6Ci0KLXwgMTQ3MjY1OTYxMC4wMTYzNTU6IC4uL2dpdC9wdGhyZWFkX3N0b3Bfd29ybGQuYzogSW4gZnVuY3Rpb24gJ0dDX2JyaWVmX2FzeW5jX3NpZ25hbF9zYWZlX3NsZWVwJzoKLXwgMTQ3MjY1OTYxMC4wNTQwMjUyOiAuLi9naXQvcHRocmVhZF9zdG9wX3dvcmxkLmM6Mzk3OjIyOiBlcnJvcjogc3RvcmFnZSBzaXplIG9mICd0dicgaXNuJ3Qga25vd24KLXwgMTQ3MjY1OTYxMC4wNTQwMjUyOiAgICAgICAgc3RydWN0IHRpbWV2YWwgdHY7Ci18IDE0NzI2NTk2MTAuMDU0MDI1MjogICAgICAgICAgICAgICAgICAgICAgIF5+Ci18IDE0NzI2NTk2MTAuMDU0MDk5OiAuLi9naXQvcHRocmVhZF9zdG9wX3dvcmxkLmM6Mzk3OjIyOiB3YXJuaW5nOiB1bnVzZWQgdmFyaWFibGUgJ3R2JyBbLVd1bnVzZWQtdmFyaWFibGVdCi18IDE0NzI2NTk2MTAuMDU0MDk5OiAgICAgICAgc3RydWN0IHRpbWV2YWwgdHY7Ci18IDE0NzI2NTk2MTAuMDU0MDk5OiAgICAgICAgICAgICAgICAgICAgICAgXn4KLXwgMTQ3MjY1OTYxMC4wNTQwOTk6IE1ha2VmaWxlOjE1MzA6IHJlY2lwZSBmb3IgdGFyZ2V0ICdwdGhyZWFkX3N0b3Bfd29ybGQubG8nIGZhaWxlZAotCi1pbiBtdXNsIGJ1aWxkcy4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLUluZGV4OiBnaXQvcHRocmVhZF9zdG9wX3dvcmxkLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9wdGhyZWFkX3N0b3Bfd29ybGQuYwotKysrIGdpdC9wdGhyZWFkX3N0b3Bfd29ybGQuYwotQEAgLTQ1LDYgKzQ1LDcgQEAKLSAjaW5jbHVkZSA8c2VtYXBob3JlLmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotKyNpbmNsdWRlIDxzeXMvdGltZS5oPgotICNpbmNsdWRlICJhdG9taWNfb3BzLmgiCi0gCi0gLyogSXQncyBzYWZlIHRvIGNhbGwgb3JpZ2luYWwgcHRocmVhZF9zaWdtYXNrKCkgaGVyZS4gICAqLwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djXzcuNi4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djXzcuNi4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2I2OGYwLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnY183LjYuMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLVNVTU1BUlkgPSAiQSBnYXJiYWdlIGNvbGxlY3RvciBmb3IgQyBhbmQgQysrIgotCi1ERVNDUklQVElPTiA9ICJUaGUgQm9laG0tRGVtZXJzLVdlaXNlciBjb25zZXJ2YXRpdmUgZ2FyYmFnZSBjb2xsZWN0b3IgY2FuIGJlXAotIHVzZWQgYXMgYSBnYXJiYWdlIGNvbGxlY3RpbmcgcmVwbGFjZW1lbnQgZm9yIEMgbWFsbG9jIG9yIEMrKyBuZXcuIEl0IGFsbG93c1wKLSB5b3UgdG8gYWxsb2NhdGUgbWVtb3J5IGJhc2ljYWxseSBhcyB5b3Ugbm9ybWFsbHkgd291bGQsIHdpdGhvdXQgZXhwbGljaXRseVwKLSBkZWFsbG9jYXRpbmcgbWVtb3J5IHRoYXQgaXMgbm8gbG9uZ2VyIHVzZWZ1bC4gVGhlIGNvbGxlY3RvciBhdXRvbWF0aWNhbGx5XAotIHJlY3ljbGVzIG1lbW9yeSB3aGVuIGl0IGRldGVybWluZXMgdGhhdCBpdCBjYW4gbm8gbG9uZ2VyIGJlIG90aGVyd2lzZVwKLSBhY2Nlc3NlZC5cCi0gIFRoZSBjb2xsZWN0b3IgaXMgYWxzbyB1c2VkIGJ5IGEgbnVtYmVyIG9mIHByb2dyYW1taW5nIGxhbmd1YWdlXAotIGltcGxlbWVudGF0aW9ucyB0aGF0IGVpdGhlciB1c2UgQyBhcyBpbnRlcm1lZGlhdGUgY29kZSwgd2FudCB0byBmYWNpbGl0YXRlXAotIGVhc2llciBpbnRlcm9wZXJhdGlvbiB3aXRoIEMgbGlicmFyaWVzLCBvciBqdXN0IHByZWZlciB0aGUgc2ltcGxlIGNvbGxlY3RvclwKLSBpbnRlcmZhY2UuXAotICBBbHRlcm5hdGl2ZWx5LCB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgbWF5IGJlIHVzZWQgYXMgYSBsZWFrIGRldGVjdG9yIGZvciBDXAotIG9yIEMrKyBwcm9ncmFtcywgdGhvdWdoIHRoYXQgaXMgbm90IGl0cyBwcmltYXJ5IGdvYWwuXAotICBFbXBpcmljYWxseSwgdGhpcyBjb2xsZWN0b3Igd29ya3Mgd2l0aCBtb3N0IHVubW9kaWZpZWQgQyBwcm9ncmFtcywgc2ltcGx5XAotIGJ5IHJlcGxhY2luZyBtYWxsb2Mgd2l0aCBHQ19tYWxsb2MgY2FsbHMsIHJlcGxhY2luZyByZWFsbG9jIHdpdGggR0NfcmVhbGxvY1wKLSBjYWxscywgYW5kIHJlbW92aW5nIGZyZWUgY2FsbHMuIgotCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3Lmhib2VobS5pbmZvL2djLyIKLVNFQ1RJT04gPSAiZGV2ZWwiCi1MSUNFTlNFID0gIk1JVCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRS5RVUlDSzttZDU9NGY4MWYyNGVjNjk3MjZjMzEyNDg3YzJhYzc0MGU5ZTMiCi0KLVNSQ1JFViA9ICI4YWMxZDg0YTQwZWI3YTQzMWZlYzFiODA5N2UzZjI0YjQ4ZmIyM2ZhIgotU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2l2bWFpL2Jkd2djLmdpdCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS5hYy1hZGQtY2hlY2stZm9yLU5PX0dFVENPTlRFWFQtZGVmaW5pdGlvbi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9tdXNsX2hlYWRlcl9maXgucGF0Y2ggXAotICAgICAgICAgICIKLQotRklMRVNfJHtQTn0tZG9jID0gIiR7ZGF0YWRpcn0iCi0KLVMgPSAiJHtXT1JLRElSfS9naXQiCi0KLUFSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKLQotIyBieSBkZWZhdWx0IHVzZSBleHRlcm5hbCBsaWJhdG9taWMtb3BzCi1QQUNLQUdFQ09ORklHID8/PSAibGliYXRvbWljLW9wcyIKLVBBQ0tBR0VDT05GSUdbbGliYXRvbWljLW9wc10gPSAiLS13aXRoLWxpYmF0b21pYy1vcHM9eWVzLC0td2l0aC1saWJhdG9taWMtb3BzPW5vLGxpYmF0b21pYy1vcHMiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ibWFwLXRvb2xzL2JtYXAtdG9vbHNfMy4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2JtYXAtdG9vbHMvYm1hcC10b29sc18zLjIuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMGY1ZmQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2JtYXAtdG9vbHMvYm1hcC10b29sc18zLjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1TVU1NQVJZID0gIlRvb2xzIHRvIGdlbmVyYXRlIGJsb2NrIG1hcCAoQUtBIGJtYXApIGFuZCBmbGFzaCBpbWFnZXMgdXNpbmcgYm1hcCIKLURFU0NSSVBUSU9OID0gIkJtYXAtdG9vbHMgLSB0b29scyB0byBnZW5lcmF0ZSBibG9jayBtYXAgKEFLQSBibWFwKSBhbmQgZmxhc2ggaW1hZ2VzIHVzaW5nIFwKLWJtYXAuIEJtYXB0b29sIGlzIGEgZ2VuZXJpYyB0b29sIGZvciBjcmVhdGluZyB0aGUgYmxvY2sgbWFwIChibWFwKSBmb3IgYSBmaWxlLCBcCi1hbmQgY29weWluZyBmaWxlcyB1c2luZyB0aGUgYmxvY2sgbWFwLiBUaGUgaWRlYSBpcyB0aGF0IGxhcmdlIGZpbGUgY29udGFpbmluZyBcCi11bnVzZWQgYmxvY2tzLCBsaWtlIHJhdyBzeXN0ZW0gaW1hZ2UgZmlsZXMsIGNhbiBiZSBjb3BpZWQgb3IgZmxhc2hlZCBhIGxvdCBcCi1mYXN0ZXIgd2l0aCBibWFwdG9vbCB0aGFuIHdpdGggdHJhZGl0aW9uYWwgdG9vbHMgbGlrZSAiZGQiIG9yICJjcCIuIgotSE9NRVBBR0UgPSAiaHR0cDovL2dpdC5pbmZyYWRlYWQub3JnL3VzZXJzL2RlZGVraW5kL2JtYXAtdG9vbHMuZ2l0IgotU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgotTElDRU5TRSA9ICJHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgotCi1TUkNfVVJJID0gImZ0cDovL2Z0cC5pbmZyYWRlYWQub3JnL3B1Yi8ke0JQTn0vJHtCUE59LSR7UFZ9LnRneiIKLVNSQ19VUklbbWQ1c3VtXSA9ICI5MmNkYWQxY2I0ZGZhMGNjYTcxNzZjOGUyMjc1MjYxNiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJjYzZjN2Y3ZGMwYTM3ZTJhMzJkZWIxMjczMDhlMjRlNmM0YjgwYmZiNTRmMzgwM2MzMDhlZmFiMDJiZjJkNDM0IgotCi1SREVQRU5EU18ke1BOfSA9ICJweXRob24tY29yZSBweXRob24tY29tcHJlc3Npb24iCi0KLWluaGVyaXQgc2V0dXB0b29scwotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKLQotZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgewotICAgIHNlZCAtaSAtZSAnc3xeIyEuKi91c3IvYmluL2VudiBweXRob258IyEgL3Vzci9iaW4vZW52IG5hdGl2ZXB5dGhvbnwnICR7RH0ke2JpbmRpcn0vYm1hcHRvb2wKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ibWFwLXRvb2xzL2JtYXAtdG9vbHNfMy40LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2JtYXAtdG9vbHMvYm1hcC10b29sc18zLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBiNmU5MQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ibWFwLXRvb2xzL2JtYXAtdG9vbHNfMy40LmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiVG9vbHMgdG8gZ2VuZXJhdGUgYmxvY2sgbWFwIChBS0EgYm1hcCkgYW5kIGZsYXNoIGltYWdlcyB1c2luZyBibWFwIgorREVTQ1JJUFRJT04gPSAiQm1hcC10b29scyAtIHRvb2xzIHRvIGdlbmVyYXRlIGJsb2NrIG1hcCAoQUtBIGJtYXApIGFuZCBmbGFzaCBpbWFnZXMgdXNpbmcgXAorYm1hcC4gQm1hcHRvb2wgaXMgYSBnZW5lcmljIHRvb2wgZm9yIGNyZWF0aW5nIHRoZSBibG9jayBtYXAgKGJtYXApIGZvciBhIGZpbGUsIFwKK2FuZCBjb3B5aW5nIGZpbGVzIHVzaW5nIHRoZSBibG9jayBtYXAuIFRoZSBpZGVhIGlzIHRoYXQgbGFyZ2UgZmlsZSBjb250YWluaW5nIFwKK3VudXNlZCBibG9ja3MsIGxpa2UgcmF3IHN5c3RlbSBpbWFnZSBmaWxlcywgY2FuIGJlIGNvcGllZCBvciBmbGFzaGVkIGEgbG90IFwKK2Zhc3RlciB3aXRoIGJtYXB0b29sIHRoYW4gd2l0aCB0cmFkaXRpb25hbCB0b29scyBsaWtlICJkZCIgb3IgImNwIi4iCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vMDFvcmcvYm1hcC10b29scyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2ludGVsL2JtYXAtdG9vbHMuZ2l0IgorU1JDUkVWID0gIjlkYWQ3MjQxMDRkZjI2NTQ0MjIyNjk3MmExZTMxMDgxM2Y5ZmZjYmEiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1JERVBFTkRTXyR7UE59ID0gInB5dGhvbjMtY29yZSBweXRob24zLWNvbXByZXNzaW9uIHB5dGhvbjMtbW1hcCBweXRob24zLXNldHVwdG9vbHMiCisKK2luaGVyaXQgcHl0aG9uM25hdGl2ZQoraW5oZXJpdCBzZXR1cHRvb2xzMworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9iamFtLW5hdGl2ZV8xLjYzLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYmphbS1uYXRpdmVfMS42NC4wLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYmphbS1uYXRpdmVfMS42My4wLmJiCnJlbmFtZSB0byBpbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYmphbS1uYXRpdmVfMS42NC4wLmJiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QtMS42My4wLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC0xLjYzLjAuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTQwYTg5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC0xLjYzLjAuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyBUaGUgQm9vc3Qgd2ViIHNpdGUgcHJvdmlkZXMgZnJlZSBwZWVyLXJldmlld2VkIHBvcnRhYmxlCi0jIEMrKyBzb3VyY2UgbGlicmFyaWVzLiBUaGUgZW1waGFzaXMgaXMgb24gbGlicmFyaWVzIHdoaWNoCi0jIHdvcmsgd2VsbCB3aXRoIHRoZSBDKysgU3RhbmRhcmQgTGlicmFyeS4gVGhlIGxpYnJhcmllcyBhcmUKLSMgaW50ZW5kZWQgdG8gYmUgd2lkZWx5IHVzZWZ1bCwgYW5kIGFyZSBpbiByZWd1bGFyIHVzZSBieQotIyB0aG91c2FuZHMgb2YgcHJvZ3JhbW1lcnMgYWNyb3NzIGEgYnJvYWQgc3BlY3RydW0gb2YgYXBwbGljYXRpb25zLgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ib29zdC5vcmcvIgotTElDRU5TRSA9ICJCU0wtMS4wICYgTUlUICYgUHl0aG9uLTIuMCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0VfMV8wLnR4dDttZDU9ZTQyMjRjY2FlY2IxNGQ5NDJjNzFkMzFiZWYyMGQ3OGMiCi0KLUJPT1NUX1ZFUiA9ICIke0AiXyIuam9pbihkLmdldFZhcigiUFYiKS5zcGxpdCgiLiIpKX0iCi1CT09TVF9NQUogPSAiJHtAIl8iLmpvaW4oZC5nZXRWYXIoIlBWIikuc3BsaXQoIi4iKVswOjJdKX0iCi1CT09TVF9QID0gImJvb3N0XyR7Qk9PU1RfVkVSfSIKLQotU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcHJvamVjdC9ib29zdC9ib29zdC8ke1BWfS8ke0JPT1NUX1B9LnRhci5iejIiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICIxYzgzN2VjZDk5MGJiMDIyZDA3ZTdhYWIzMmIwOTg0NyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJiZWFlMjUyOWY3NTlmNmIzYmYzZjQ5NjlhMTljMmU5ZDZmMGM1MDNlZGNiMmRlNGE2MWQxNDI4NTE5ZmNiM2IwIgotCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL3d3dy5ib29zdC5vcmcvdXNlcnMvZG93bmxvYWQvIgotVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiYm9vc3RvcmcvcmVsZWFzZS8oP1A8cHZlcj4uKikvc291cmNlLyIKLQotUFIgPSAicjEiCi0KLVMgPSAiJHtXT1JLRElSfS8ke0JPT1NUX1B9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LTEuNjQuMC5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QtMS42NC4wLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzdiMWE5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LTEuNjQuMC5pbmMKQEAgLTAsMCArMSwyMSBAQAorIyBUaGUgQm9vc3Qgd2ViIHNpdGUgcHJvdmlkZXMgZnJlZSBwZWVyLXJldmlld2VkIHBvcnRhYmxlCisjIEMrKyBzb3VyY2UgbGlicmFyaWVzLiBUaGUgZW1waGFzaXMgaXMgb24gbGlicmFyaWVzIHdoaWNoCisjIHdvcmsgd2VsbCB3aXRoIHRoZSBDKysgU3RhbmRhcmQgTGlicmFyeS4gVGhlIGxpYnJhcmllcyBhcmUKKyMgaW50ZW5kZWQgdG8gYmUgd2lkZWx5IHVzZWZ1bCwgYW5kIGFyZSBpbiByZWd1bGFyIHVzZSBieQorIyB0aG91c2FuZHMgb2YgcHJvZ3JhbW1lcnMgYWNyb3NzIGEgYnJvYWQgc3BlY3RydW0gb2YgYXBwbGljYXRpb25zLgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ib29zdC5vcmcvIgorTElDRU5TRSA9ICJCU0wtMS4wICYgTUlUICYgUHl0aG9uLTIuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0VfMV8wLnR4dDttZDU9ZTQyMjRjY2FlY2IxNGQ5NDJjNzFkMzFiZWYyMGQ3OGMiCisKK0JPT1NUX1ZFUiA9ICIke0AiXyIuam9pbihkLmdldFZhcigiUFYiKS5zcGxpdCgiLiIpKX0iCitCT09TVF9NQUogPSAiJHtAIl8iLmpvaW4oZC5nZXRWYXIoIlBWIikuc3BsaXQoIi4iKVswOjJdKX0iCitCT09TVF9QID0gImJvb3N0XyR7Qk9PU1RfVkVSfSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcHJvamVjdC9ib29zdC9ib29zdC8ke1BWfS8ke0JPT1NUX1B9LnRhci5iejIiCitTUkNfVVJJW21kNXN1bV0gPSAiOTNlZWNjZTJhYmVkOWQyNDQyYzk2NzY5MTQ3MDkzNDkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2JjYzVjYWFjZTk3YmFhOTQ4OTMxZDcxMmVhNWYzNzAzOGRiYjFjNWQ4OWI0M2FkNGRlZjRlZDdjYjY4MzMzMiIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL2Rvd25sb2FkLyIKK1VQU1RSRUFNX0NIRUNLX1JFR0VYID0gImJvb3N0b3JnL3JlbGVhc2UvKD9QPHB2ZXI+LiopL3NvdXJjZS8iCisKK1MgPSAiJHtXT1JLRElSfS8ke0JPT1NUX1B9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC5pbmMKaW5kZXggNGZmNzBlMy4uNDFmYzkwZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QuaW5jCkBAIC0zOCw3ICszOCw3IEBACiBCT09TVF9MSUJTX3JlbW92ZV9taXBzMTZlID0gIndhdmUiCiAKICMgb3B0aW9uYWwgbGlicmFyaWVzCi1QQUNLQUdFQ09ORklHID8/PSAibG9jYWxlIgorUEFDS0FHRUNPTkZJRyA/Pz0gImxvY2FsZSBweXRob24iCiBQQUNLQUdFQ09ORklHW2xvY2FsZV0gPSAiLCxpY3UiCiBQQUNLQUdFQ09ORklHW2dyYXBoX3BhcmFsbGVsXSA9ICIsLCxib29zdC1tcGkgbXBpY2giCiBQQUNLQUdFQ09ORklHW21waV0gPSAiLCxtcGljaCIKQEAgLTE2OSw3ICsxNjksNyBAQAogQkpBTV9PUFRTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAnIC1zTk9fQlpJUDI9MScKIAogIyBBZGp1c3QgdGhlIGJ1aWxkIGZvciB4MzIKLUJKQU1fT1BUU19hcHBlbmRfbGludXgtZ251eDMyID0gIiBhYmk9eDMyIGFkZHJlc3MtbW9kZWw9NjQiCitCSkFNX09QVFNfYXBwZW5kX3g4Ni14MzIgPSAiIGFiaT14MzIgYWRkcmVzcy1tb2RlbD02NCIKIAogZG9fY29uZmlndXJlKCkgewogCWNwIC1mICR7U30vYm9vc3QvY29uZmlnL3BsYXRmb3JtL2xpbnV4LmhwcCAke1N9L2Jvb3N0L2NvbmZpZy9wbGF0Zm9ybS9saW51eC1nbnVlYWJpLmhwcApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LzAwMDEtV2hlbi11c2luZy1zb2Z0LWZsb2F0LW9uLUFSTS13ZS1zaG91bGQtbm90LWV4cGVjdC10aC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC8wMDAxLVdoZW4tdXNpbmctc29mdC1mbG9hdC1vbi1BUk0td2Utc2hvdWxkLW5vdC1leHBlY3QtdGgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhZmQ1Y2UuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LzAwMDEtV2hlbi11c2luZy1zb2Z0LWZsb2F0LW9uLUFSTS13ZS1zaG91bGQtbm90LWV4cGVjdC10aC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLUZyb20gOWFiMDkxNDIwN2U2ZDBlNmI3NWNlMTIxNDdjNTRiOTY0NzhmZWI2NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgotRGF0ZTogVHVlLCAyMSBGZWIgMjAxNyAxMjo1MDozNSArMDIwMAotU3ViamVjdDogW1BBVENIXSBXaGVuIHVzaW5nIHNvZnQtZmxvYXQsIG9uIEFSTSB3ZSBzaG91bGQgbm90IGV4cGVjdCB0aGUgRkVfKgotIHN5bWJvbHMKLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+Ci0tLS0KLSBib29zdC90ZXN0L2V4ZWN1dGlvbl9tb25pdG9yLmhwcCB8IDIgKy0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2Jvb3N0L3Rlc3QvZXhlY3V0aW9uX21vbml0b3IuaHBwIGIvYm9vc3QvdGVzdC9leGVjdXRpb25fbW9uaXRvci5ocHAKLWluZGV4IGY1MzM0OGEuLjg2MjUyZDcgMTAwNjQ0Ci0tLS0gYS9ib29zdC90ZXN0L2V4ZWN1dGlvbl9tb25pdG9yLmhwcAotKysrIGIvYm9vc3QvdGVzdC9leGVjdXRpb25fbW9uaXRvci5ocHAKLUBAIC00OTgsNyArNDk4LDcgQEAgZW51bSBtYXNrcyB7Ci0gCi0gICAgIEJPT1NUX0ZQRV9BTEwgICAgICAgPSBNQ1dfRU0sCi0gCi0tI2VsaWYgZGVmaW5lZChCT09TVF9OT19GRU5WX0gpIHx8IGRlZmluZWQoQk9PU1RfQ0xBTkcpIC8qICoqKiAqLwotKyNlbGlmIGRlZmluZWQoQk9PU1RfTk9fRkVOVl9IKSB8fCBkZWZpbmVkKEJPT1NUX0NMQU5HKSB8fCBkZWZpbmVkKF9fQVJNX1BDUykgLyogKioqICovCi0gICAgIEJPT1NUX0ZQRV9BTEwgICAgICAgPSBCT09TVF9GUEVfT0ZGLAotIAotICNlbHNlIC8qICoqKiAqLwotLS0gCi0yLjExLjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LzAwMDEtY29ycmVjdC1lcnJvci13aGljaC1hcHBlYXJlZC13aGVuLWNvbXBpbGluZy1ub24tYy1jby5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC8wMDAxLWNvcnJlY3QtZXJyb3Itd2hpY2gtYXBwZWFyZWQtd2hlbi1jb21waWxpbmctbm9uLWMtY28ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk2MDA1ZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC8wMDAxLWNvcnJlY3QtZXJyb3Itd2hpY2gtYXBwZWFyZWQtd2hlbi1jb21waWxpbmctbm9uLWMtY28ucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSAwMmZhNWNlZTFiOGQwMzIxNzg3MTEzZTJkYzEwYjE2MmM2NTdmMzMzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFJhbWV5IDxyYW1leUBycnNkLmNvbT4KK0RhdGU6IFdlZCwgMSBGZWIgMjAxNyAxNjo0Mzo1OSAtMDgwMAorU3ViamVjdDogW1BBVENIXSBjb3JyZWN0IGVycm9yIHdoaWNoIGFwcGVhcmVkIHdoZW4gY29tcGlsaW5nIG5vbiBjKysgY29tcGxpYW50CisgY29kZSBmb3IgYXJyYXlzCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2V4cGVjdGVkIHRvIGJlIHJlbGVhc2VkIGluIHYxLjY1XQorCistLS0KKyBib29zdC9zZXJpYWxpemF0aW9uL2FycmF5LmhwcCB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9ib29zdC9zZXJpYWxpemF0aW9uL2FycmF5LmhwcCBiL2Jvb3N0L3NlcmlhbGl6YXRpb24vYXJyYXkuaHBwCitpbmRleCA2MTcwOGIzLi42MTJkMWE2IDEwMDY0NAorLS0tIGEvYm9vc3Qvc2VyaWFsaXphdGlvbi9hcnJheS5ocHAKKysrKyBiL2Jvb3N0L3NlcmlhbGl6YXRpb24vYXJyYXkuaHBwCitAQCAtMjMsNiArMjMsOCBAQCBuYW1lc3BhY2Ugc3RkeworIH0gLy8gbmFtZXNwYWNlIHN0ZAorICNlbmRpZgorIAorKyNpbmNsdWRlIDxib29zdC9zZXJpYWxpemF0aW9uL2FycmF5X3dyYXBwZXIuaHBwPgorKworICNpZm5kZWYgQk9PU1RfTk9fQ1hYMTFfSERSX0FSUkFZCisgCisgI2luY2x1ZGUgPGFycmF5PgorLS0gCisyLjkuMworCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QvMDAwNC1Vc2UtYXRvbWljLWJ5LWRlZmF1bHQtd2hlbi1CT09TVF9OT19DWFgxMV9IRFJfQVRPTUlDLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LzAwMDQtVXNlLWF0b21pYy1ieS1kZWZhdWx0LXdoZW4tQk9PU1RfTk9fQ1hYMTFfSERSX0FUT01JQy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI3ODI2Yi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QvMDAwNC1Vc2UtYXRvbWljLWJ5LWRlZmF1bHQtd2hlbi1CT09TVF9OT19DWFgxMV9IRFJfQVRPTUlDLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotRnJvbSBjMjM0Y2M1NTdmNjA3MjllMDcxZDZkYTU5NzQ3YzFhOTI4OTU1NWM1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogUGV0ZXIgRGltb3YgPHBkaW1vdkBwZGltb3YuY29tPgotRGF0ZTogU3VuLCAyOCBBdWcgMjAxNiAyMToyODoyMSArMDMwMAotU3ViamVjdDogW1BBVENIIDQvNF0gVXNlIDxhdG9taWM+IGJ5IGRlZmF1bHQgd2hlbiBCT09TVF9OT19DWFgxMV9IRFJfQVRPTUlDIGlzCi0gbm90IGRlZmluZWQKLQotLS0tCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtodHRwczovL2dpdGh1Yi5jb20vYm9vc3Rvcmcvc21hcnRfcHRyL2NvbW1pdC8yMGZlZGNmZjJjYTMxNDM1MDNlYzRlODc2ZDQ3NzQ1YWIwZWM3YjBjXQotU2lnbmVkLW9mZi1ieTogQW5kcsOpIERyYXN6aWsgPGdpdEBhbmRyZWQubmV0PgotIGJvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvYXRvbWljX2NvdW50LmhwcCAgICB8IDMgKysrCi0gYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9zcF9jb3VudGVkX2Jhc2UuaHBwIHwgMyArKysKLSBib29zdC9zbWFydF9wdHIvZGV0YWlsL3NwaW5sb2NrLmhwcCAgICAgICAgfCAzICsrKwotIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9ib29zdC9zbWFydF9wdHIvZGV0YWlsL2F0b21pY19jb3VudC5ocHAgYi9ib29zdC9zbWFydF9wdHIvZGV0YWlsL2F0b21pY19jb3VudC5ocHAKLWluZGV4IDhhZWZkNDQuLjZlNGY3MWEgMTAwNjQ0Ci0tLS0gYS9ib29zdC9zbWFydF9wdHIvZGV0YWlsL2F0b21pY19jb3VudC5ocHAKLSsrKyBiL2Jvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvYXRvbWljX2NvdW50LmhwcAotQEAgLTczLDYgKzczLDkgQEAKLSAjZWxpZiBkZWZpbmVkKCBCT09TVF9ESVNBQkxFX1RIUkVBRFMgKSAmJiAhZGVmaW5lZCggQk9PU1RfU1BfRU5BQkxFX1RIUkVBRFMgKSAmJiAhZGVmaW5lZCggQk9PU1RfRElTQUJMRV9XSU4zMiApCi0gIyBpbmNsdWRlIDxib29zdC9zbWFydF9wdHIvZGV0YWlsL2F0b21pY19jb3VudF9udC5ocHA+Ci0gCi0rI2VsaWYgIWRlZmluZWQoIEJPT1NUX05PX0NYWDExX0hEUl9BVE9NSUMgKQotKyMgaW5jbHVkZSA8Ym9vc3Qvc21hcnRfcHRyL2RldGFpbC9hdG9taWNfY291bnRfc3RkX2F0b21pYy5ocHA+Ci0rCi0gI2VsaWYgZGVmaW5lZCggX19HTlVDX18gKSAmJiAoIGRlZmluZWQoIF9faTM4Nl9fICkgfHwgZGVmaW5lZCggX194ODZfNjRfXyApICkgJiYgIWRlZmluZWQoIF9fUEFUSFNDQUxFX18gKQotICMgaW5jbHVkZSA8Ym9vc3Qvc21hcnRfcHRyL2RldGFpbC9hdG9taWNfY291bnRfZ2NjX3g4Ni5ocHA+Ci0gCi1kaWZmIC0tZ2l0IGEvYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9zcF9jb3VudGVkX2Jhc2UuaHBwIGIvYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9zcF9jb3VudGVkX2Jhc2UuaHBwCi1pbmRleCAwOTk1Y2E4Li44M2VkZTIzIDEwMDY0NAotLS0tIGEvYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9zcF9jb3VudGVkX2Jhc2UuaHBwCi0rKysgYi9ib29zdC9zbWFydF9wdHIvZGV0YWlsL3NwX2NvdW50ZWRfYmFzZS5ocHAKLUBAIC00NCw2ICs0NCw5IEBACi0gI2VsaWYgZGVmaW5lZCggQk9PU1RfU1BfSEFTX0NMQU5HX0MxMV9BVE9NSUNTICkKLSAjIGluY2x1ZGUgPGJvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvc3BfY291bnRlZF9iYXNlX2NsYW5nLmhwcD4KLSAKLSsjZWxpZiAhZGVmaW5lZCggQk9PU1RfTk9fQ1hYMTFfSERSX0FUT01JQyApCi0rIyBpbmNsdWRlIDxib29zdC9zbWFydF9wdHIvZGV0YWlsL3NwX2NvdW50ZWRfYmFzZV9zdGRfYXRvbWljLmhwcD4KLSsKLSAjZWxpZiBkZWZpbmVkKCBfX1NOQ19fICkKLSAjIGluY2x1ZGUgPGJvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvc3BfY291bnRlZF9iYXNlX3NuY19wczMuaHBwPgotIAotZGlmZiAtLWdpdCBhL2Jvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvc3BpbmxvY2suaHBwIGIvYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9zcGlubG9jay5ocHAKLWluZGV4IDE5ZjkzZDcuLjBiNjE4ZGYgMTAwNjQ0Ci0tLS0gYS9ib29zdC9zbWFydF9wdHIvZGV0YWlsL3NwaW5sb2NrLmhwcAotKysrIGIvYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9zcGlubG9jay5ocHAKLUBAIC00Myw2ICs0Myw5IEBACi0gI2VsaWYgZGVmaW5lZCggQk9PU1RfU1BfVVNFX1BUSFJFQURTICkKLSAjICBpbmNsdWRlIDxib29zdC9zbWFydF9wdHIvZGV0YWlsL3NwaW5sb2NrX3B0LmhwcD4KLSAKLSsjZWxpZiAhZGVmaW5lZCggQk9PU1RfTk9fQ1hYMTFfSERSX0FUT01JQyApCi0rIyAgaW5jbHVkZSA8Ym9vc3Qvc21hcnRfcHRyL2RldGFpbC9zcGlubG9ja19zdGRfYXRvbWljLmhwcD4KLSsKLSAjZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKCBfX2FybV9fICkgJiYgIWRlZmluZWQoIF9fdGh1bWJfXyApCi0gIyAgaW5jbHVkZSA8Ym9vc3Qvc21hcnRfcHRyL2RldGFpbC9zcGlubG9ja19nY2NfYXJtLmhwcD4KLSAKLS0tIAotMi45LjMKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0L3B5My5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC9weTMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiMWZmMTguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0L3B5My5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI2OSArMCwwIEBACi1CYWNrcG9ydCBmaXhlcyBmcm9tIHVwc3RyZWFtIChhcyBvZiBib29zdCBzdXBlci1tb2R1bGUgY29tbWl0IDBkNTJiOSkgdG8gaW1wcm92ZQotdGhlIGJ1aWxkaW5nIG9mIHRoZSBCb29zdCBQeXRob24gbW9kdWxlIHdpdGggUHl0aG9uIDMuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLVNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+Ci0KLWRpZmYgLS1naXQgYS9idWlsZC9KYW1maWxlIGIvYnVpbGQvSmFtZmlsZQotaW5kZXggMzEzZmRhYi4uZjE0ZGMxMSAxMDA2NDQKLS0tLSBhL2xpYnMvcHl0aG9uL2J1aWxkL0phbWZpbGUKLSsrKyBiL2xpYnMvcHl0aG9uL2J1aWxkL0phbWZpbGUKLUBAIC02LDYgKzYsNyBAQCBpbXBvcnQgb3MgOwotIGltcG9ydCBpbmRpcmVjdCA7Ci0gaW1wb3J0IG1vZHVsZXMgOwotIGltcG9ydCBmZWF0dXJlIDsKLStpbXBvcnQgcHJvcGVydHkgOwotIAotIGltcG9ydCBweXRob24gOwotIAotQEAgLTMwLDIxICszMSw4IEBAIGVsc2UKLSAgICAgICAgIDsKLSB9Ci0gCi0tcnVsZSBmaW5kLXB5My12ZXJzaW9uCi0tewotLSAgICBsb2NhbCB2ZXJzaW9ucyA9IFsgZmVhdHVyZS52YWx1ZXMgcHl0aG9uIF0gOwotLSAgICBsb2NhbCBweTN2ZXIgOwotLSAgICBmb3IgbG9jYWwgdiBpbiAkKHZlcnNpb25zKQotLSAgICB7Ci0tICAgICAgICBpZiAkKHYpID49IDMuMAotLSAgICAgICAgewotLSAgICAgICAgICAgIHB5M3ZlciA9ICQodikgOwotLSAgICAgICAgfQotLSAgICB9Ci0tICAgIHJldHVybiAkKHB5M3ZlcikgOwotLX0KLS0KLS1weTMtdmVyc2lvbiA9IFsgZmluZC1weTMtdmVyc2lvbiBdIDsKLStweTItdmVyc2lvbiA9IFsgcHktdmVyc2lvbiAyIF0gOwotK3B5My12ZXJzaW9uID0gWyBweS12ZXJzaW9uIDMgXSA7Ci0gCi0gcHJvamVjdCBib29zdC9weXRob24KLSAgIDogc291cmNlLWxvY2F0aW9uIC4uL3NyYwotQEAgLTUyLDExICs0MCwxNyBAQCBwcm9qZWN0IGJvb3N0L3B5dGhvbgotIAotIHJ1bGUgY29uZCAoIHRlc3QgPyA6IHllcyAqIDogbm8gKiApIHsgaWYgJCh0ZXN0KSB7IHJldHVybiAkKHllcykgOyB9IGVsc2UgeyByZXR1cm4gJChubykgOyB9IH0KLSBydWxlIHVubGVzcyAoIHRlc3QgPyA6IHllcyAqIDogbm8gKiApIHsgaWYgISAkKHRlc3QpIHsgcmV0dXJuICQoeWVzKSA7IH0gZWxzZSB7IHJldHVybiAkKG5vKSA7IH0gfQotK2xvY2FsIHJ1bGUgZXEgKCBhIDogYiApIHsgaWYgJChhKSA9ICQoYikgeyByZXR1cm4gMSA7IH0gfQotIAotLXJ1bGUgbGliX2Jvb3N0X3B5dGhvbiAoIGlzLXB5MyA/ICkKLS17Ci0rbGliX2Jvb3N0X3B5dGhvbigyKSA9IGJvb3N0X3B5dGhvbiA7Ci0rbGliX2Jvb3N0X3B5dGhvbigzKSA9IGJvb3N0X3B5dGhvbjMgOwotIAotLSAgICBsaWIgWyBjb25kICQoaXMtcHkzKSA6IGJvb3N0X3B5dGhvbjMgOiBib29zdF9weXRob24gXQotK2xpYl9ib29zdF9weXRob24oJChweTItdmVyc2lvbikpID0gJChsaWJfYm9vc3RfcHl0aG9uKDIpKSA7Ci0rbGliX2Jvb3N0X3B5dGhvbigkKHB5My12ZXJzaW9uKSkgPSAkKGxpYl9ib29zdF9weXRob24oMykpIDsKLSsKLStydWxlIGxpYl9ib29zdF9weXRob24gKCB2ZXJzaW9uICkKLSt7Ci0rICAgIGxpYiAkKGxpYl9ib29zdF9weXRob24oJCh2ZXJzaW9uKSkpCi0gICAgICAgICA6ICMgc291cmNlcwotICAgICAgICAgbnVtZXJpYy5jcHAKLSAgICAgICAgIGxpc3QuY3BwCi1AQCAtMTEyLDExICsxMDYsMTMgQEAgcnVsZSBsaWJfYm9vc3RfcHl0aG9uICggaXMtcHkzID8gKQotICAgICAgICAgICAgIDxkZXBlbmRlbmN5PmNvbmZpZy13YXJuaW5nCi0gCi0gICAgICAgICAgICAgPHB5dGhvbi1kZWJ1Z2dpbmc+b246PGRlZmluZT5CT09TVF9ERUJVR19QWVRIT04KLS0gICAgICAgICAgICBbIGNvbmQgJChpcy1weTMpIDogPHB5dGhvbj4kKHB5My12ZXJzaW9uKSBdCi0rICAgICAgICAgICAgPHB5dGhvbj4kKHZlcnNpb24pCi0gCi0gICAgICAgICAgICAgLTx0YWc+QCQoQk9PU1RfSkFNUk9PVF9NT0RVTEUpJSQoQk9PU1RfSkFNUk9PVF9NT0RVTEUpLnRhZwotICAgICAgICAgICAgIDx0YWc+QCQoQk9PU1RfSkFNUk9PVF9NT0RVTEUpJSQoQk9PU1RfSkFNUk9PVF9NT0RVTEUpLnB5dGhvbi10YWcKLSAKLSsgICAgICAgICAgICA8Y29uZGl0aW9uYWw+QHB5dGhvbi5yZXF1aXJlLXB5Ci0rCi0gICAgICAgICA6ICAgIyBkZWZhdWx0IGJ1aWxkCi0gICAgICAgICAgICAgPGxpbms+c2hhcmVkCi0gICAgICAgICA6ICAgIyB1c2FnZSByZXF1aXJlbWVudHMKLUBAIC0xMjUsNTEgKzEyMSw2OCBAQCBydWxlIGxpYl9ib29zdF9weXRob24gKCBpcy1weTMgPyApCi0gICAgICAgICA7Ci0gfQotIAotLXJ1bGUgbGliX2Jvb3N0X251bXB5ICggaXMtcHkzID8gKQotK2xpYl9ib29zdF9udW1weSgyKSA9IGJvb3N0X251bXB5IDsKLStsaWJfYm9vc3RfbnVtcHkoMykgPSBib29zdF9udW1weTMgOwotKwotK2xpYl9ib29zdF9udW1weSgkKHB5Mi12ZXJzaW9uKSkgPSAkKGxpYl9ib29zdF9weXRob24oMikpIDsKLStsaWJfYm9vc3RfbnVtcHkoJChweTMtdmVyc2lvbikpID0gJChsaWJfYm9vc3RfcHl0aG9uKDMpKSA7Ci0rCi0rcnVsZSBsaWJfYm9vc3RfbnVtcHkgKCB2ZXJzaW9uICkKLSB7Ci0gICAgIG51bXB5LWluY2x1ZGUgPSBbIHB5dGhvbi5udW1weS1pbmNsdWRlIF0gOwotLSAgICBsaWIgWyBjb25kICQoaXMtcHkzKSA6IGJvb3N0X251bXB5MyA6IGJvb3N0X251bXB5IF0KLSsgICAgbGliICQobGliX2Jvb3N0X251bXB5KCQodmVyc2lvbikpKQotICAgICAgICAgOiAjIHNvdXJjZXMKLSAgICAgICAgIG51bXB5L2R0eXBlLmNwcAotICAgICAgICAgbnVtcHkvbWF0cml4LmNwcAotICAgICAgICAgbnVtcHkvbmRhcnJheS5jcHAKLS0JbnVtcHkvbnVtcHkuY3BwCi0tCW51bXB5L3NjYWxhcnMuY3BwCi0tCW51bXB5L3VmdW5jLmNwcAotKyAgICAgICAgbnVtcHkvbnVtcHkuY3BwCi0rICAgICAgICBudW1weS9zY2FsYXJzLmNwcAotKyAgICAgICAgbnVtcHkvdWZ1bmMuY3BwCi0gICAgICAgICA6ICAgIyByZXF1aXJlbWVudHMKLSsgICAgICAgICAgICA8bGluaz5zdGF0aWM6PGRlZmluZT5CT09TVF9OVU1QWV9TVEFUSUNfTElCIAotKyAgICAgICAgICAgIDxkZWZpbmU+Qk9PU1RfTlVNUFlfU09VUkNFCi0gICAgICAgICAgICAgWyBjb25kIFsgcHl0aG9uLm51bXB5IF0gOiA8bGlicmFyeT4vcHl0aG9uLy9weXRob25fZm9yX2V4dGVuc2lvbnMgXQotICAgICAgICAgICAgIFsgdW5sZXNzIFsgcHl0aG9uLm51bXB5IF0gOiA8YnVpbGQ+bm8gXQotLQkgICAgPGluY2x1ZGU+JChudW1weS1pbmNsdWRlKQotLQkgICAgPGxpYnJhcnk+Ym9vc3RfcHl0aG9uCi0rICAgICAgICAgICAgPGluY2x1ZGU+JChudW1weS1pbmNsdWRlKQotKyAgICAgICAgICAgIDxsaWJyYXJ5PiQobGliX2Jvb3N0X3B5dGhvbigkKHZlcnNpb24pKSkKLSAgICAgICAgICAgICA8cHl0aG9uLWRlYnVnZ2luZz5vbjo8ZGVmaW5lPkJPT1NUX0RFQlVHX1BZVEhPTgotLSAgICAgICAgICAgIFsgY29uZCAkKGlzLXB5MykgOiA8cHl0aG9uPiQocHkzLXZlcnNpb24pIF0KLSsgICAgICAgICAgICA8cHl0aG9uPiQodmVyc2lvbikKLSAKLSAgICAgICAgICAgICAtPHRhZz5AJChCT09TVF9KQU1ST09UX01PRFVMRSklJChCT09TVF9KQU1ST09UX01PRFVMRSkudGFnCi0gICAgICAgICAgICAgPHRhZz5AJChCT09TVF9KQU1ST09UX01PRFVMRSklJChCT09TVF9KQU1ST09UX01PRFVMRSkucHl0aG9uLXRhZwotIAotKyAgICAgICAgICAgIDxjb25kaXRpb25hbD5AcHl0aG9uLnJlcXVpcmUtcHkKLSsKLSAgICAgICAgIDogICAjIGRlZmF1bHQgYnVpbGQKLSAgICAgICAgICAgICA8bGluaz5zaGFyZWQKLSAgICAgICAgIDogICAjIHVzYWdlIHJlcXVpcmVtZW50cwotKwkJCTxsaW5rPnN0YXRpYzo8ZGVmaW5lPkJPT1NUX05VTVBZX1NUQVRJQ19MSUIKLSAgICAgICAgICAgICA8cHl0aG9uLWRlYnVnZ2luZz5vbjo8ZGVmaW5lPkJPT1NUX0RFQlVHX1BZVEhPTgotICAgICAgICAgOwotIH0KLSAKLS1saWJyYXJpZXMgPSBib29zdF9weXRob24gOwotLWxpYnJhcmllczMgPSBib29zdF9weXRob24zIDsKLS1pZiBbIHB5dGhvbi5udW1weSBdCi0tewotLSAgICBsaWJyYXJpZXMgKz0gYm9vc3RfbnVtcHkgOwotLSAgICBsaWJyYXJpZXMzICs9IGJvb3N0X251bXB5MyA7Ci0tfQotLQotLWxpYl9ib29zdF9weXRob24gOwotLWxpYl9ib29zdF9udW1weSA7Ci0rbGlicmFyaWVzID0gOwotIAotLWlmICQocHkzLXZlcnNpb24pCi0rZm9yIGxvY2FsIE4gaW4gMiAzCi0gewotLSAgICBsaWJfYm9vc3RfcHl0aG9uIHllcyA7Ci0tICAgIGxpYl9ib29zdF9udW1weSB5ZXMgOwotLSAgICBsaWJyYXJpZXMgKz0gJChsaWJyYXJpZXMzKSA7Ci0rICAgIGlmICQocHkkKE4pLXZlcnNpb24pCi0rICAgIHsKLSsgICAgICAgIGxpYl9ib29zdF9weXRob24gJChweSQoTiktdmVyc2lvbikgOwotKyAgICAgICAgbGlicmFyaWVzICs9ICQobGliX2Jvb3N0X3B5dGhvbigkKHB5JChOKS12ZXJzaW9uKSkpIDsKLSsgICAgfQotKyAgICBlbHNlCi0rICAgIHsKLSsgICAgICAgIGFsaWFzICQobGliX2Jvb3N0X3B5dGhvbigkKE4pKSkgOwotKyAgICB9Ci0rICAgIGlmICQocHkkKE4pLXZlcnNpb24pICYmIFsgcHl0aG9uLm51bXB5IF0KLSsgICAgewotKyAgICAgICAgbGliX2Jvb3N0X251bXB5ICQocHkkKE4pLXZlcnNpb24pIDsKLSsgICAgICAgIGxpYnJhcmllcyArPSAkKGxpYl9ib29zdF9udW1weSgkKHB5JChOKS12ZXJzaW9uKSkpIDsKLSsgICAgfQotKyAgICBlbHNlCi0rICAgIHsKLSsgICAgICAgIGFsaWFzICQobGliX2Jvb3N0X251bXB5KCQoTikpKSA7Ci0rICAgIH0KLSB9Ci0gCi0gYm9vc3QtaW5zdGFsbCAkKGxpYnJhcmllcykgOwotZGlmZiAtLWdpdCBhL3NyYy90b29scy9weXRob24uamFtIGIvc3JjL3Rvb2xzL3B5dGhvbi5qYW0KLWluZGV4IGNjMTMzODUuLmJmMzAwYjggMTAwNjQ0Ci0tLS0gYS90b29scy9idWlsZC9zcmMvdG9vbHMvcHl0aG9uLmphbQotKysrIGIvdG9vbHMvYnVpbGQvc3JjL3Rvb2xzL3B5dGhvbi5qYW0KLUBAIC0zNCw2ICszNCw3IEBAIGltcG9ydCBwYXRoIDsKLSBpbXBvcnQgZmVhdHVyZSA7Ci0gaW1wb3J0IHNldCA7Ci0gaW1wb3J0IGJ1aWx0aW4gOwotK2ltcG9ydCBwcm9wZXJ0eS1zZXQgOwotIAotIAotICMgTWFrZSB0aGlzIG1vZHVsZSBhIHByb2plY3QuCi1AQCAtNjAsNiArNjEsMTAgQEAgbGliIHJ0IDsKLSAjIGluc3RhbGxlZCBpbiB0aGUgZGV2ZWxvcG1lbnQgc3lzdGVtJ3MgZGVmYXVsdCBwYXRocy4KLSBmZWF0dXJlLmZlYXR1cmUgcHl0aG9ucGF0aCA6IDogZnJlZSBvcHRpb25hbCBwYXRoIDsKLSAKLSsjIFRoZSBiZXN0IGNvbmZpZ3VyZWQgdmVyc2lvbiBvZiBQeXRob24gMiBhbmQgMy4KLStweTItdmVyc2lvbiA9IDsKLStweTMtdmVyc2lvbiA9IDsKLSsKLSAjIEluaXRpYWxpemVzIHRoZSBQeXRob24gdG9vbHNldC4gTm90ZSB0aGF0IGFsbCBwYXJhbWV0ZXJzIGFyZSBvcHRpb25hbC4KLSAjCi0gIyAtIHZlcnNpb24gLS0gdGhlIHZlcnNpb24gb2YgUHl0aG9uIHRvIHVzZS4gU2hvdWxkIGJlIGluIE1ham9yLk1pbm9yIGZvcm1hdCwKLUBAIC04NjEsNiArODY2LDExIEBAIGxvY2FsIHJ1bGUgY29uZmlndXJlICggdmVyc2lvbiA/IDogY21kLW9yLXByZWZpeCA/IDogaW5jbHVkZXMgKiA6IGxpYnJhcmllcyA/IDoKLSAgICAgICAgIGlmICEgJCh2ZXJzaW9uKSBpbiBbIGZlYXR1cmUudmFsdWVzIHB5dGhvbiBdCi0gICAgICAgICB7Ci0gICAgICAgICAgICAgZmVhdHVyZS5leHRlbmQgcHl0aG9uIDogJCh2ZXJzaW9uKSA7Ci0rICAgICAgICAgICAgcHkkKG1ham9yLW1pbm9yWzFdKS12ZXJzaW9uID89ICQodmVyc2lvbikgOwotKyAgICAgICAgICAgIGlmICQocHkkKG1ham9yLW1pbm9yWzFdKS12ZXJzaW9uKSA8ICQodmVyc2lvbikKLSsgICAgICAgICAgICB7Ci0rICAgICAgICAgICAgICAgIHB5JChtYWpvci1taW5vclsxXSktdmVyc2lvbiA9ICQodmVyc2lvbikgOwotKyAgICAgICAgICAgIH0KLSAgICAgICAgIH0KLSAgICAgICAgIHRhcmdldC1yZXF1aXJlbWVudHMgKz0gPHB5dGhvbj4kKHZlcnNpb246RT1kZWZhdWx0KSA7Ci0gICAgIH0KLUBAIC05MTYsNiArOTI2LDkgQEAgbG9jYWwgcnVsZSBjb25maWd1cmUgKCB2ZXJzaW9uID8gOiBjbWQtb3ItcHJlZml4ID8gOiBpbmNsdWRlcyAqIDogbGlicmFyaWVzID8gOgotICAgICAgICAgfQotICAgICB9Ci0gCi0rICAgICMgSW4gY2FzZSB3ZSBhZGRlZCBkdXBsaWNhdGUgcmVxdWlyZW1lbnRzIGZyb20gd2hhdCB0aGUgdXNlciBzcGVjaWZpZWQuCi0rICAgIHRhcmdldC1yZXF1aXJlbWVudHMgPSBbIHNlcXVlbmNlLnVuaXF1ZSAkKHRhcmdldC1yZXF1aXJlbWVudHMpIF0gOwotKwotICAgICAjIEdsb2JhbCwgYnV0IGNvbmRpdGlvbmFsLCByZXF1aXJlbWVudHMgdG8gZ2l2ZSBhY2Nlc3MgdG8gdGhlIGludGVycHJldGVyCi0gICAgICMgZm9yIGdlbmVyYWwgdXRpbGl0aWVzLCBsaWtlIG90aGVyIHRvb2xzZXRzLCB0aGF0IHJ1biBQeXRob24gc2NyaXB0cy4KLSAgICAgdG9vbHNldC5hZGQtcmVxdWlyZW1lbnRzCi1AQCAtOTM0LDE5ICs5NDcsNiBAQCBsb2NhbCBydWxlIGNvbmZpZ3VyZSAoIHZlcnNpb24gPyA6IGNtZC1vci1wcmVmaXggPyA6IGluY2x1ZGVzICogOiBsaWJyYXJpZXMgPyA6Ci0gICAgICAgICB0b29sc2V0LmFkZC1yZXF1aXJlbWVudHMgPHRhcmdldC1vcz4kKHRhcmdldC1vcyk6PHB5dGhvbj4kKHZlcnNpb246RT1kZWZhdWx0KSA7Ci0gICAgIH0KLSAKLS0gICAgIyBXZSBhbHNvIHNldCBhIGRlZmF1bHQgcmVxdWlyZW1lbnQgdGhhdCBhc3NpZ25zIHRoZSBmaXJzdCBweXRob24gY29uZmlndXJlZAotLSAgICAjIGZvciBhIHBhcnRpY3VsYXIgdGFyZ2V0IE9TIGFzIHRoZSBkZWZhdWx0LiBUaGlzIG1ha2VzIGl0IHNvIHRoYXQgd2UgY2FuCi0tICAgICMgc2VsZWN0IGEgcHl0aG9uIGludGVycHJldGVyIHdpdGggb25seSBrbm93bGVkZ2Ugb2YgdGhlIHRhcmdldCBPUy4gQW5kIGhlbmNlCi0tICAgICMgY2FuIGNvbmZpZ3VyZSBkaWZmZXJlbnQgUHl0aG9ucyBiYXNlZCBvbiB0aGUgdGFyZ2V0IE9TIG9ubHkuCi0tICAgIGxvY2FsIHRvb2xzZXQtcmVxdWlyZW1lbnRzID0gWyB0b29sc2V0LnJlcXVpcmVtZW50cyBdIDsKLS0gICAgbG9jYWwgdG9vbHNldC10YXJnZXQtb3MtcmVxdWlyZW1lbnRzCi0tICAgICAgICA9IFsgcHJvcGVydHkuZXZhbHVhdGUtY29uZGl0aW9uYWxzLWluLWNvbnRleHQKLS0gICAgICAgICAgICBbICQodG9vbHNldC1yZXF1aXJlbWVudHMpLnJhdyBdIDogPHRhcmdldC1vcz4kKHRhcmdldC1vcykgXSA7Ci0tICAgIGlmICEgPHB5dGhvbj4gaW4gJCh0b29sc2V0LXRhcmdldC1vcy1yZXF1aXJlbWVudHM6RykKLS0gICAgewotLSAgICAgICAgdG9vbHNldC5hZGQtcmVxdWlyZW1lbnRzIDx0YXJnZXQtb3M+JCh0YXJnZXQtb3MpOjxweXRob24+JCh2ZXJzaW9uOkU9ZGVmYXVsdCkgOwotLSAgICB9Ci0tCi0gICAgICMgUmVnaXN0ZXIgdGhlIHJpZ2h0IHN1ZmZpeCBmb3IgZXh0ZW5zaW9ucy4KLSAgICAgcmVnaXN0ZXItZXh0ZW5zaW9uLXN1ZmZpeCAkKGV4dGVuc2lvbi1zdWZmaXgpIDogJCh0YXJnZXQtcmVxdWlyZW1lbnRzKSA7Ci0gCi1AQCAtMTAzOCw2ICsxMDM4LDIyIEBAIGxvY2FsIHJ1bGUgY29uZmlndXJlICggdmVyc2lvbiA/IDogY21kLW9yLXByZWZpeCA/IDogaW5jbHVkZXMgKiA6IGxpYnJhcmllcyA/IDoKLSAgICAgICAgICAgICA6ICQodXNhZ2UtcmVxdWlyZW1lbnRzKQotICAgICAgICAgICAgIDsKLSAgICAgfQotKyAgICAKLSt9Ci0rCi0rIyBDb25kaXRpb25hbCBydWxlIHNwZWNpZmljYXRpb24gdGhhdCB3aWxsIHByZXZlbnQgYnVpbGRpbmcgb2YgYSB0YXJnZXQKLSsjIGlmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHB5dGhvbiBjb25maWd1cmF0aW9uIGF2YWlsYWJsZSB3aXRoIHRoZSBnaXZlbgotKyMgcmVxdWlyZWQgcHJvcGVydGllcy4KLStydWxlIHJlcXVpcmUtcHkgKCBwcm9wZXJ0aWVzICogKQotK3sKLSsgICAgbG9jYWwgcHktZXh0LXRhcmdldCA9IFsgJCgucHJvamVjdCkuZmluZCBweXRob25fZm9yX2V4dGVuc2lvbnMgXSA7Ci0rICAgIGxvY2FsIHByb3BlcnR5LXNldCA9IFsgcHJvcGVydHktc2V0LmNyZWF0ZSAkKHByb3BlcnRpZXMpIF0gOwotKyAgICBwcm9wZXJ0eS1zZXQgPSBbICQocHJvcGVydHktc2V0KS5leHBhbmQgXSA7Ci0rICAgIGxvY2FsIHB5LWV4dC1hbHRlcm5hdGl2ZSA9IFsgJChweS1leHQtdGFyZ2V0KS5zZWxlY3QtYWx0ZXJuYXRpdmVzICQocHJvcGVydHktc2V0KSBdIDsKLSsgICAgaWYgISAkKHB5LWV4dC1hbHRlcm5hdGl2ZSkKLSsgICAgewotKyAgICAgICAgcmV0dXJuIDxidWlsZD5ubyA7Ci0rICAgIH0KLSB9Ci0gCi0gCi1AQCAtMTI5OCw1ICsxMzE0LDExIEBAIHJ1bGUgbnVtcHktdGVzdCAoIG5hbWUgOiBzb3VyY2VzICogOiByZXF1aXJlbWVudHMgKiApCi0gICAgICAgICA6ICQobmFtZSkgXSA7Ci0gfQotIAotK3J1bGUgcHktdmVyc2lvbiAoIG4gKQotK3sKLSsgICAgcmV0dXJuICQocHkkKG4pLXZlcnNpb24pIDsKLSt9Ci0rCi0gSU1QT1JUICQoX19uYW1lX18pIDogYnBsLXRlc3QgOiA6IGJwbC10ZXN0IDsKLSBJTVBPUlQgJChfX25hbWVfXykgOiBudW1weS10ZXN0IDogOiBudW1weS10ZXN0IDsKLStJTVBPUlQgJChfX25hbWVfXykgOiBweS12ZXJzaW9uIDogOiBweS12ZXJzaW9uIDsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdF8xLjYzLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3RfMS42My4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTA3Njg2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdF8xLjYzLjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1yZXF1aXJlIGJvb3N0LSR7UFZ9LmluYwotcmVxdWlyZSBib29zdC5pbmMKLQotU1JDX1VSSSArPSAiXAotICAgIGZpbGU6Ly9hcm0taW50cmluc2ljcy5wYXRjaCBcCi0gICAgZmlsZTovLzAwMDEtV2hlbi11c2luZy1zb2Z0LWZsb2F0LW9uLUFSTS13ZS1zaG91bGQtbm90LWV4cGVjdC10aC5wYXRjaCBcCi0gICAgZmlsZTovL2Jvb3N0LUNWRS0yMDEyLTI2NzcucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDAxLWJvb3N0LWFzaW8tZGV0YWlsLXNvY2tldF90eXBlcy5ocHAtZml4LXBvbGwuaC1pbmNsdWQucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDA0LVVzZS1hdG9taWMtYnktZGVmYXVsdC13aGVuLUJPT1NUX05PX0NYWDExX0hEUl9BVE9NSUMucGF0Y2ggXAotICAgIGZpbGU6Ly9ib29zdC1tYXRoLWRpc2FibGUtcGNoLWZvci1nY2MucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDAxLUFwcGx5LWJvb3N0LTEuNjIuMC1uby1mb3JjZWQtZmxhZ3MucGF0Y2gucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDAzLURvbi10LXNldC11cC1hcmNoLWluc3RydWN0aW9uLXNldC1mbGFncy13ZS1kby10aGF0LW8ucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDAyLURvbi10LXNldC11cC1tMzItbTY0LXdlLWRvLXRoYXQtb3Vyc2VsdmVzLnBhdGNoIFwKLSAgICBmaWxlOi8vcHkzLnBhdGNoIFwKLSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdF8xLjY0LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3RfMS42NC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYzIwZTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3RfMS42NC4wLmJiCkBAIC0wLDAgKzEsMTMgQEAKK3JlcXVpcmUgYm9vc3QtJHtQVn0uaW5jCityZXF1aXJlIGJvb3N0LmluYworCitTUkNfVVJJICs9ICJcCisgICAgZmlsZTovL2FybS1pbnRyaW5zaWNzLnBhdGNoIFwKKyAgICBmaWxlOi8vYm9vc3QtQ1ZFLTIwMTItMjY3Ny5wYXRjaCBcCisgICAgZmlsZTovLzAwMDEtYm9vc3QtYXNpby1kZXRhaWwtc29ja2V0X3R5cGVzLmhwcC1maXgtcG9sbC5oLWluY2x1ZC5wYXRjaCBcCisgICAgZmlsZTovL2Jvb3N0LW1hdGgtZGlzYWJsZS1wY2gtZm9yLWdjYy5wYXRjaCBcCisgICAgZmlsZTovLzAwMDEtQXBwbHktYm9vc3QtMS42Mi4wLW5vLWZvcmNlZC1mbGFncy5wYXRjaC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDMtRG9uLXQtc2V0LXVwLWFyY2gtaW5zdHJ1Y3Rpb24tc2V0LWZsYWdzLXdlLWRvLXRoYXQtby5wYXRjaCBcCisgICAgZmlsZTovLzAwMDItRG9uLXQtc2V0LXVwLW0zMi1tNjQtd2UtZG8tdGhhdC1vdXJzZWx2ZXMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAxLWNvcnJlY3QtZXJyb3Itd2hpY2gtYXBwZWFyZWQtd2hlbi1jb21waWxpbmctbm9uLWMtY28ucGF0Y2ggXAorIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXNfMjAxNjExMzAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlc18yMDE2MTEzMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI4MmFjZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlc18yMDE2MTEzMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLVNVTU1BUlkgPSAiQ29tbW9uIENBIGNlcnRpZmljYXRlcyIKLURFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBpbmNsdWRlcyBQRU0gZmlsZXMgb2YgQ0EgY2VydGlmaWNhdGVzIHRvIGFsbG93IFwKLVNTTC1iYXNlZCBhcHBsaWNhdGlvbnMgdG8gY2hlY2sgZm9yIHRoZSBhdXRoZW50aWNpdHkgb2YgU1NMIGNvbm5lY3Rpb25zLiBcCi1UaGlzIGRlcml2ZWQgZnJvbSBEZWJpYW4ncyBDQSBDZXJ0aWZpY2F0ZXMuIgotSE9NRVBBR0UgPSAiaHR0cDovL3BhY2thZ2VzLmRlYmlhbi5vcmcvc2lkL2NhLWNlcnRpZmljYXRlcyIKLVNFQ1RJT04gPSAibWlzYyIKLUxJQ0VOU0UgPSAiR1BMLTIuMCsgJiBNUEwtMi4wIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZGViaWFuL2NvcHlyaWdodDttZDU9ZTczNThiOTU0MWNjZjMwMjllOTcwNWVkOGRlNTc5NjgiCi0KLSMgVGhpcyBpcyBuZWVkZWQgdG8gZW5zdXJlIHdlIGNhbiBydW4gdGhlIHBvc3RpbnN0IGF0IGltYWdlIGNyZWF0aW9uIHRpbWUKLURFUEVORFMgPSAiIgotREVQRU5EU19jbGFzcy1uYXRpdmUgPSAib3BlbnNzbC1uYXRpdmUiCi1ERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICJvcGVuc3NsLW5hdGl2ZSIKLSMgTmVlZCBjX3JlaGFzaCBmcm9tIG9wZW5zc2wgYW5kIHJ1bi1wYXJ0cyBmcm9tIGRlYmlhbnV0aWxzCi1QQUNLQUdFX1dSSVRFX0RFUFMgKz0gIm9wZW5zc2wtbmF0aXZlIGRlYmlhbnV0aWxzLW5hdGl2ZSIKLQotU1JDUkVWID0gIjYxYjcwYTEwMDdkYzI2OWQ1Njg4MWEwZDQ4MGZjODQxZGFhY2M3N2MiCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vYW5vbnNjbS5kZWJpYW4ub3JnL2NvbGxhYi1tYWludC9jYS1jZXJ0aWZpY2F0ZXMuZ2l0IFwKLSAgICAgICAgICAgZmlsZTovLzAwMDItdXBkYXRlLWNhLWNlcnRpZmljYXRlcy11c2UtU1lTUk9PVC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtZG9uLXQtdXNlLURlYmlhbmlzbXMtaW4tcnVuLXAucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vdXBkYXRlLWNhLWNlcnRpZmljYXRlcy1zdXBwb3J0LVRveWJveC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9kZWZhdWx0LXN5c3Jvb3QucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vc2JpbmRpci5wYXRjaCIKLQotUyA9ICIke1dPUktESVJ9L2dpdCIKLQotaW5oZXJpdCBhbGxhcmNoCi0KLUVYVFJBX09FTUFLRSA9ICJcCi0gICAgJ0NFUlRTRElSPSR7ZGF0YWRpcn0vY2EtY2VydGlmaWNhdGVzJyBcCi0gICAgJ1NCSU5ESVI9JHtzYmluZGlyfScgXAotIgotCi1kb19jb21waWxlX3ByZXBlbmQoKSB7Ci0gICAgb2VfcnVubWFrZSBjbGVhbgotfQotCi1kb19pbnN0YWxsICgpIHsKLSAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2NhLWNlcnRpZmljYXRlcyBcCi0gICAgICAgICAgICAgICAke0R9JHtzeXNjb25mZGlyfS9zc2wvY2VydHMgXAotICAgICAgICAgICAgICAgJHtEfSR7c3lzY29uZmRpcn0vY2EtY2VydGlmaWNhdGVzL3VwZGF0ZS5kCi0gICAgb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCi0KLSAgICBpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuOAotICAgIGluc3RhbGwgLW0gMDY0NCBzYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMuOCAke0R9JHttYW5kaXJ9L21hbjgvCi0KLSAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9Ci0gICAgewotICAgICAgICBlY2hvICIjIExpbmVzIHN0YXJ0aW5nIHdpdGggIyB3aWxsIGJlIGlnbm9yZWQiCi0gICAgICAgIGVjaG8gIiMgTGluZXMgc3RhcnRpbmcgd2l0aCAhIHdpbGwgcmVtb3ZlIGNlcnRpZmljYXRlIG9uIG5leHQgdXBkYXRlIgotICAgICAgICBlY2hvICIjIgotICAgICAgICBmaW5kICR7RH0ke2RhdGFkaXJ9L2NhLWNlcnRpZmljYXRlcyAtdHlwZSBmIC1uYW1lICcqLmNydCcgfCBcCi0gICAgICAgICAgICBzZWQgJ3MsXiR7RH0ke2RhdGFkaXJ9L2NhLWNlcnRpZmljYXRlcy8sLCcKLSAgICB9ID4ke0R9JHtzeXNjb25mZGlyfS9jYS1jZXJ0aWZpY2F0ZXMuY29uZgotfQotCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQgKCkgewotICAgIHNlZCAtaSAtZSAncywvZXRjLywke3N5c2NvbmZkaXJ9LywnIFwKLSAgICAgICAgICAgLWUgJ3MsL3Vzci9zaGFyZS8sJHtkYXRhZGlyfS8sJyBcCi0gICAgICAgICAgIC1lICdzLC91c3IvbG9jYWwsJHtwcmVmaXh9L2xvY2FsLCcgXAotICAgICAgICAke0R9JHtzYmluZGlyfS91cGRhdGUtY2EtY2VydGlmaWNhdGVzIFwKLSAgICAgICAgJHtEfSR7bWFuZGlyfS9tYW44L3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMuOAotfQotCi1wa2dfcG9zdGluc3RfJHtQTn0gKCkgewotICAgIFNZU1JPT1Q9IiREIiAkRCR7c2JpbmRpcn0vdXBkYXRlLWNhLWNlcnRpZmljYXRlcwotfQotCi1DT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vY2EtY2VydGlmaWNhdGVzLmNvbmYiCi0KLSMgUG9zdGluc3RzIGRvbid0IHNlZW0gdG8gYmUgcnVuIGZvciBuYXRpdmVzZGsgcGFja2FnZXMgd2hlbiBwb3B1bGF0aW5nIFNES3MuCi1DT05GRklMRVNfJHtQTn1fYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgJHtzeXNjb25mZGlyfS9zc2wvY2VydHMvY2EtY2VydGlmaWNhdGVzLmNydCIKLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayAoKSB7Ci0gICAgU1lTUk9PVD0iJHtEfSR7U0RLUEFUSE5BVElWRX0iICR7RH0ke3NiaW5kaXJ9L3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKLX0KLQotZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKLSAgICBTWVNST09UPSIke0R9JHtiYXNlX3ByZWZpeH0iICR7RH0ke3NiaW5kaXJ9L3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKLX0KLQotUkRFUEVORFNfJHtQTn0gKz0gIm9wZW5zc2wiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzXzIwMTcwNzE3LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXNfMjAxNzA3MTcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q1OWZhNgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzXzIwMTcwNzE3LmJiCkBAIC0wLDAgKzEsODUgQEAKK1NVTU1BUlkgPSAiQ29tbW9uIENBIGNlcnRpZmljYXRlcyIKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBpbmNsdWRlcyBQRU0gZmlsZXMgb2YgQ0EgY2VydGlmaWNhdGVzIHRvIGFsbG93IFwKK1NTTC1iYXNlZCBhcHBsaWNhdGlvbnMgdG8gY2hlY2sgZm9yIHRoZSBhdXRoZW50aWNpdHkgb2YgU1NMIGNvbm5lY3Rpb25zLiBcCitUaGlzIGRlcml2ZWQgZnJvbSBEZWJpYW4ncyBDQSBDZXJ0aWZpY2F0ZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3BhY2thZ2VzLmRlYmlhbi5vcmcvc2lkL2NhLWNlcnRpZmljYXRlcyIKK1NFQ1RJT04gPSAibWlzYyIKK0xJQ0VOU0UgPSAiR1BMLTIuMCsgJiBNUEwtMi4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZGViaWFuL2NvcHlyaWdodDttZDU9ZTczNThiOTU0MWNjZjMwMjllOTcwNWVkOGRlNTc5NjgiCisKKyMgVGhpcyBpcyBuZWVkZWQgdG8gZW5zdXJlIHdlIGNhbiBydW4gdGhlIHBvc3RpbnN0IGF0IGltYWdlIGNyZWF0aW9uIHRpbWUKK0RFUEVORFMgPSAiIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAib3BlbnNzbC1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICJvcGVuc3NsLW5hdGl2ZSIKKyMgTmVlZCBjX3JlaGFzaCBmcm9tIG9wZW5zc2wgYW5kIHJ1bi1wYXJ0cyBmcm9tIGRlYmlhbnV0aWxzCitQQUNLQUdFX1dSSVRFX0RFUFMgKz0gIm9wZW5zc2wtbmF0aXZlIGRlYmlhbnV0aWxzLW5hdGl2ZSIKKworU1JDUkVWID0gIjM0YjhlMTllNTQxYjhhZjQwNzY2MTZiMmUxNzBjN2E3MGNkYWRlZDAiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbnNjbS5kZWJpYW4ub3JnL2NvbGxhYi1tYWludC9jYS1jZXJ0aWZpY2F0ZXMuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItdXBkYXRlLWNhLWNlcnRpZmljYXRlcy11c2UtU1lTUk9PVC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtZG9uLXQtdXNlLURlYmlhbmlzbXMtaW4tcnVuLXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdXBkYXRlLWNhLWNlcnRpZmljYXRlcy1zdXBwb3J0LVRveWJveC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kZWZhdWx0LXN5c3Jvb3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2JpbmRpci5wYXRjaCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKK1NZU1JPT1RfRElSU19jbGFzcy1uYXRpdmUgKz0gIi9ldGMiCisKK2luaGVyaXQgYWxsYXJjaAorCitFWFRSQV9PRU1BS0UgPSAiXAorICAgICdDRVJUU0RJUj0ke2RhdGFkaXJ9L2NhLWNlcnRpZmljYXRlcycgXAorICAgICdTQklORElSPSR7c2JpbmRpcn0nIFwKKyIKKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgIG9lX3J1bm1ha2UgY2xlYW4KK30KKworZG9faW5zdGFsbCAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9jYS1jZXJ0aWZpY2F0ZXMgXAorICAgICAgICAgICAgICAgJHtEfSR7c3lzY29uZmRpcn0vc3NsL2NlcnRzIFwKKyAgICAgICAgICAgICAgICR7RH0ke3N5c2NvbmZkaXJ9L2NhLWNlcnRpZmljYXRlcy91cGRhdGUuZAorICAgIG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorCisgICAgaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjgKKyAgICBpbnN0YWxsIC1tIDA2NDQgc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzLjggJHtEfSR7bWFuZGlyfS9tYW44LworCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorICAgIHsKKyAgICAgICAgZWNobyAiIyBMaW5lcyBzdGFydGluZyB3aXRoICMgd2lsbCBiZSBpZ25vcmVkIgorICAgICAgICBlY2hvICIjIExpbmVzIHN0YXJ0aW5nIHdpdGggISB3aWxsIHJlbW92ZSBjZXJ0aWZpY2F0ZSBvbiBuZXh0IHVwZGF0ZSIKKyAgICAgICAgZWNobyAiIyIKKyAgICAgICAgZmluZCAke0R9JHtkYXRhZGlyfS9jYS1jZXJ0aWZpY2F0ZXMgLXR5cGUgZiAtbmFtZSAnKi5jcnQnIHwgXAorICAgICAgICAgICAgc2VkICdzLF4ke0R9JHtkYXRhZGlyfS9jYS1jZXJ0aWZpY2F0ZXMvLCwnCisgICAgfSA+JHtEfSR7c3lzY29uZmRpcn0vY2EtY2VydGlmaWNhdGVzLmNvbmYKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0ICgpIHsKKyAgICBzZWQgLWkgLWUgJ3MsL2V0Yy8sJHtzeXNjb25mZGlyfS8sJyBcCisgICAgICAgICAgIC1lICdzLC91c3Ivc2hhcmUvLCR7ZGF0YWRpcn0vLCcgXAorICAgICAgICAgICAtZSAncywvdXNyL2xvY2FsLCR7cHJlZml4fS9sb2NhbCwnIFwKKyAgICAgICAgJHtEfSR7c2JpbmRpcn0vdXBkYXRlLWNhLWNlcnRpZmljYXRlcyBcCisgICAgICAgICR7RH0ke21hbmRpcn0vbWFuOC91cGRhdGUtY2EtY2VydGlmaWNhdGVzLjgKK30KKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKyAgICBTWVNST09UPSIkRCIgJEQke3NiaW5kaXJ9L3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKK30KKworQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L2NhLWNlcnRpZmljYXRlcy5jb25mIgorCisjIFBvc3RpbnN0cyBkb24ndCBzZWVtIHRvIGJlIHJ1biBmb3IgbmF0aXZlc2RrIHBhY2thZ2VzIHdoZW4gcG9wdWxhdGluZyBTREtzLgorQ09ORkZJTEVTXyR7UE59X2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiICR7c3lzY29uZmRpcn0vc3NsL2NlcnRzL2NhLWNlcnRpZmljYXRlcy5jcnQiCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgKCkgeworICAgIFNZU1JPT1Q9IiR7RH0ke1NES1BBVEhOQVRJVkV9IiAke0R9JHtzYmluZGlyfS91cGRhdGUtY2EtY2VydGlmaWNhdGVzCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisgICAgU1lTUk9PVD0iJHtEfSR7YmFzZV9wcmVmaXh9IiAke0R9JHtzYmluZGlyfS91cGRhdGUtY2EtY2VydGlmaWNhdGVzCit9CisKK1JERVBFTkRTXyR7UE59ICs9ICJvcGVuc3NsIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsL0NWRS0yMDE3LTEwMDAwOTkucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsL0NWRS0yMDE3LTEwMDAwOTkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZmZjFiMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmwvQ1ZFLTIwMTctMTAwMDA5OS5wYXRjaApAQCAtMCwwICsxLDQxIEBACitGcm9tIGM5MzMyZmE1ZTg0ZjI0ZGEzMDBiNDJiMWE5MzFhZGU5MjlkM2UyN2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBFdmVuIFJvdWF1bHQgPGV2ZW4ucm91YXVsdEBzcGF0aWFseXMuY29tPgorRGF0ZTogVHVlLCAxIEF1ZyAyMDE3IDE3OjE3OjA2ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpbGU6IG91dHB1dCB0aGUgY29ycmVjdCBidWZmZXIgdG8gdGhlIHVzZXIKKworUmVncmVzc2lvbiBicm91Z2h0IGJ5IDdjMzEyZjg0ZWE5MzBkOCAoQXByaWwgMjAxNykKKworQ1ZFOiBDVkUtMjAxNy0xMDAwMDk5CisKK0J1ZzogaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9hZHZfMjAxNzA4MDlDLmh0bWwKKworQ3JlZGl0IHRvIE9TUy1GdXp6IGZvciB0aGUgZGlzY292ZXJ5CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK2h0dHBzOi8vZ2l0aHViLmNvbS9jdXJsL2N1cmwvY29tbWl0L2M5MzMyZmE1ZTg0ZjI0ZGEzMDBiNDJiMWE5MzFhZGU5MjlkM2UyN2QKKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWIvZmlsZS5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL2ZpbGUuYyBiL2xpYi9maWxlLmMKK2luZGV4IGJkNDI2ZWFjMi4uNjY2Y2JlNzViIDEwMDY0NAorLS0tIGEvbGliL2ZpbGUuYworKysrIGIvbGliL2ZpbGUuYworQEAgLTQ5OSwxMSArNDk5LDExIEBAIHN0YXRpYyBDVVJMY29kZSBmaWxlX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKKyAgICAgICAgICAgICAgQ3VybF9tb250aFt0bS0+dG1fbW9uXSwKKyAgICAgICAgICAgICAgdG0tPnRtX3llYXIgKyAxOTAwLAorICAgICAgICAgICAgICB0bS0+dG1faG91ciwKKyAgICAgICAgICAgICAgdG0tPnRtX21pbiwKKyAgICAgICAgICAgICAgdG0tPnRtX3NlYyk7CistICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPVEgsIGJ1ZiwgMCk7CisrICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPVEgsIGhlYWRlciwgMCk7CisgICAgIGlmKCFyZXN1bHQpCisgICAgICAgLyogc2V0IHRoZSBmaWxlIHNpemUgdG8gbWFrZSBpdCBhdmFpbGFibGUgcG9zdCB0cmFuc2ZlciAqLworICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCBleHBlY3RlZF9zaXplKTsKKyAgICAgcmV0dXJuIHJlc3VsdDsKKyAgIH0KKy0tIAorMi4xMy4zCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmwvQ1ZFLTIwMTctMTAwMDEwMC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmwvQ1ZFLTIwMTctMTAwMDEwMC5wYXRjaAppbmRleCA1MDhkZjhjLi5mNzRmMWRkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsL0NWRS0yMDE3LTEwMDAxMDAucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybC9DVkUtMjAxNy0xMDAwMTAwLnBhdGNoCkBAIC02LDcgKzYsNyBAQAogLi4uIGFuZCB0aGVyZWJ5IGF2b2lkIHRlbGxpbmcgc2VuZCgpIHRvIHNlbmQgb2ZmIG1vcmUgYnl0ZXMgdGhhbiB0aGUKIHNpemUgb2YgdGhlIGJ1ZmZlciEKIAotQ1ZFLTIwMTctMTAwMDEwMAorQ1ZFOiBDVkUtMjAxNy0xMDAwMTAwCiAKIEJ1ZzogaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9hZHZfMjAxNzA4MDlCLmh0bWwKIFJlcG9ydGVkLWJ5OiBFdmVuIFJvdWF1bHQKQEAgLTE2LDE3ICsxNiwxNSBAQAogVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAogaHR0cHM6Ly9naXRodWIuY29tL2N1cmwvY3VybC9jb21taXQvMzU4YjJiMTMxYWQ2YzA5NTY5NmYyMGRjZmE2MmI4MzA1MjYzZjg5OAogCi1DVkU6IENWRS0yMDE3LTEwMDAxMDAKLVNpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgotCitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KIC0tLQotIGxpYi90ZnRwLmMgfCA3ICsrKysrKy0KKyBsaWIvdGZ0cC5jIHwgICAgNyArKysrKystCiAgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogCi1JbmRleDogY3VybC03LjUzLjEvbGliL3RmdHAuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGN1cmwtNy41My4xLm9yaWcvbGliL3RmdHAuYwotKysrIGN1cmwtNy41My4xL2xpYi90ZnRwLmMKK2RpZmYgLS1naXQgYS9saWIvdGZ0cC5jIGIvbGliL3RmdHAuYworaW5kZXggMDJiZDg0Mi4uZjZmNGJjZSAxMDA2NDQKKy0tLSBhL2xpYi90ZnRwLmMKKysrKyBiL2xpYi90ZnRwLmMKIEBAIC01LDcgKzUsNyBAQAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CkBAIC0zNiw3ICszNCw3IEBACiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKLUBAIC00OTAsNiArNDkwLDExIEBAIHN0YXRpYyBDVVJMY29kZSB0ZnRwX3NlbmRfZmlyc3QodGZ0cF9zdGEKK0BAIC00OTEsNiArNDkxLDExIEBAIHN0YXRpYyBDVVJMY29kZSB0ZnRwX3NlbmRfZmlyc3QodGZ0cF9zdGF0ZV9kYXRhX3QgKnN0YXRlLCB0ZnRwX2V2ZW50X3QgZXZlbnQpCiAgICAgIGlmKHJlc3VsdCkKICAgICAgICByZXR1cm4gcmVzdWx0OwogIApAQCAtNDgsMyArNDYsNiBAQAogICAgICBzbnByaW50ZigoY2hhciAqKXN0YXRlLT5zcGFja2V0LmRhdGErMiwKICAgICAgICAgICAgICAgc3RhdGUtPmJsa3NpemUsCiAgICAgICAgICAgICAgICIlcyVjJXMlYyIsIGZpbGVuYW1lLCAnXDAnLCAgbW9kZSwgJ1wwJyk7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybC9DVkUtMjAxNy0xMDAwMTAxLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybC9DVkUtMjAxNy0xMDAwMTAxLnBhdGNoCmluZGV4IDllZWY1ZTIuLmMzMDBmZmYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmwvQ1ZFLTIwMTctMTAwMDEwMS5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsL0NWRS0yMDE3LTEwMDAxMDEucGF0Y2gKQEAgLTYsMTUgKzYsMTcgQEAKIAogQWRkZWQgdGVzdCAxMjg5IHRvIHZlcmlmeS4KIAotQ1ZFLTIwMTctMTAwMDEwMQorQ1ZFOiBDVkUtMjAxNy0xMDAwMTAxCiAKIEJ1ZzogaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9hZHZfMjAxNzA4MDlBLmh0bWwKIFJlcG9ydGVkLWJ5OiBCcmlhbiBDYXJwZW50ZXIKIAogVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAotQ1ZFOiBDVkUtMjAxNy0xMDAwMTAxCi1TaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KK2h0dHBzOi8vZ2l0aHViLmNvbS9jdXJsL2N1cmwvY29tbWl0LzQ1M2U3YTdhMDNhMmNlYzc0OWFiZDM4NzhhNDhlNzI4YzUxNWNjYTcKIAorUmViYXNlIHRoZSB0ZXN0cy9kYXRhL01ha2VmaWxlLmluYyBjaGFuZ2VzIGZvciBjdXJsIDcuNTQuMS4KKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CiAtLS0KICBzcmMvdG9vbF91cmxnbG9iLmMgICAgICB8ICA1ICsrKystCiAgdGVzdHMvZGF0YS9NYWtlZmlsZS5pbmMgfCAgMiArLQpAQCAtMjIsMTEgKzI0LDExIEBACiAgMyBmaWxlcyBjaGFuZ2VkLCA0MCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9kYXRhL3Rlc3QxMjg5CiAKLUluZGV4OiBjdXJsLTcuNTMuMS9zcmMvdG9vbF91cmxnbG9iLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBjdXJsLTcuNTMuMS5vcmlnL3NyYy90b29sX3VybGdsb2IuYwotKysrIGN1cmwtNy41My4xL3NyYy90b29sX3VybGdsb2IuYwotQEAgLTI2OSw3ICsyNjksMTAgQEAgc3RhdGljIENVUkxjb2RlIGdsb2JfcmFuZ2UoVVJMR2xvYiAqZ2xvYgorZGlmZiAtLWdpdCBhL3NyYy90b29sX3VybGdsb2IuYyBiL3NyYy90b29sX3VybGdsb2IuYworaW5kZXggNmIxZWNlMC4uZDU2ZGNkOSAxMDA2NDQKKy0tLSBhL3NyYy90b29sX3VybGdsb2IuYworKysrIGIvc3JjL3Rvb2xfdXJsZ2xvYi5jCitAQCAtMjczLDcgKzI3MywxMCBAQCBzdGF0aWMgQ1VSTGNvZGUgZ2xvYl9yYW5nZShVUkxHbG9iICpnbG9iLCBjaGFyICoqcGF0dGVybnAsCiAgICAgICAgICB9CiAgICAgICAgICBlcnJubyA9IDA7CiAgICAgICAgICBtYXhfbiA9IHN0cnRvdWwocGF0dGVybiwgJmVuZHAsIDEwKTsKQEAgLTM4LDIyICs0MCwyNCBAQAogICAgICAgICAgICBwYXR0ZXJuID0gZW5kcCsxOwogICAgICAgICAgICBlcnJubyA9IDA7CiAgICAgICAgICAgIHN0ZXBfbiA9IHN0cnRvdWwocGF0dGVybiwgJmVuZHAsIDEwKTsKLUluZGV4OiBjdXJsLTcuNTMuMS90ZXN0cy9kYXRhL01ha2VmaWxlLmluYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGN1cmwtNy41My4xLm9yaWcvdGVzdHMvZGF0YS9NYWtlZmlsZS5pbmMKLSsrKyBjdXJsLTcuNTMuMS90ZXN0cy9kYXRhL01ha2VmaWxlLmluYwotQEAgLTEzMSw2ICsxMzEsNyBAQCB0ZXN0MTI0NCB0ZXN0MTI0NSB0ZXN0MTI0NiB0ZXN0MTI0NyB0ZXN0Ci0gdGVzdDEyNTIgdGVzdDEyNTMgdGVzdDEyNTQgdGVzdDEyNTUgdGVzdDEyNTYgdGVzdDEyNTcgdGVzdDEyNTggdGVzdDEyNTkgXAorZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvTWFrZWZpbGUuaW5jIGIvdGVzdHMvZGF0YS9NYWtlZmlsZS5pbmMKK2luZGV4IDE1NTMyMGEuLjdhZGJlZTYgMTAwNjQ0CistLS0gYS90ZXN0cy9kYXRhL01ha2VmaWxlLmluYworKysrIGIvdGVzdHMvZGF0YS9NYWtlZmlsZS5pbmMKK0BAIC0xMzIsNyArMTMyLDcgQEAgdGVzdDEyNTIgdGVzdDEyNTMgdGVzdDEyNTQgdGVzdDEyNTUgdGVzdDEyNTYgdGVzdDEyNTcgdGVzdDEyNTggdGVzdDEyNTkgXAorIHRlc3QxMjYwIHRlc3QxMjYxIHRlc3QxMjYyIFwKICBcCi0gdGVzdDEyODAgdGVzdDEyODEgdGVzdDEyODIgdGVzdDEyODMgdGVzdDEyODQgdGVzdDEyODUgdGVzdDEyODYgXAotK3Rlc3QxMjg5IFwKKyB0ZXN0MTI4MCB0ZXN0MTI4MSB0ZXN0MTI4MiB0ZXN0MTI4MyB0ZXN0MTI4NCB0ZXN0MTI4NSB0ZXN0MTI4NiB0ZXN0MTI4NyBcCistdGVzdDEyODggXAorK3Rlc3QxMjg4IHRlc3QxMjg5IFwKICBcCiAgdGVzdDEzMDAgdGVzdDEzMDEgdGVzdDEzMDIgdGVzdDEzMDMgdGVzdDEzMDQgdGVzdDEzMDUgdGVzdDEzMDYgdGVzdDEzMDcgXAogIHRlc3QxMzA4IHRlc3QxMzA5IHRlc3QxMzEwIHRlc3QxMzExIHRlc3QxMzEyIHRlc3QxMzEzIHRlc3QxMzE0IHRlc3QxMzE1IFwKLUluZGV4OiBjdXJsLTcuNTMuMS90ZXN0cy9kYXRhL3Rlc3QxMjg5Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTI4OSBiL3Rlc3RzL2RhdGEvdGVzdDEyODkKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kNjc5Y2MwCiAtLS0gL2Rldi9udWxsCi0rKysgY3VybC03LjUzLjEvdGVzdHMvZGF0YS90ZXN0MTI4OQorKysrIGIvdGVzdHMvZGF0YS90ZXN0MTI4OQogQEAgLTAsMCArMSwzNSBAQAogKzx0ZXN0Y2FzZT4KICs8aW5mbz4KQEAgLTkwLDMgKzk0LDYgQEAKICs8L2Vycm9yY29kZT4KICs8L3ZlcmlmeT4KICs8L3Rlc3RjYXNlPgorLS0gCisyLjExLjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybC9DVkUtMjAxNy0xMDAwMjU0LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybC9DVkUtMjAxNy0xMDAwMjU0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMDc5OGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsL0NWRS0yMDE3LTEwMDAyNTQucGF0Y2gKQEAgLTAsMCArMSwxMzggQEAKK0Zyb20gMWIyZWJhNmY5NzQ1YzA2NGY3MjgzZTBhZGE4ZjQ2ZGY5ZDlkNmU0MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IExpIFpob3UgPGxpLnpob3VAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjMgT2N0IDIwMTcgMDA6MjY6NTAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gRlRQOiB6ZXJvIHRlcm1pbmF0ZSB0aGUgZW50cnkgcGF0aCBldmVuIG9uIGJhZCBpbnB1dAorCisuLi4gYSBzaW5nbGUgZG91YmxlIHF1b3RlIGNvdWxkIGxlYXZlIHRoZSBlbnRyeSBwYXRoIGJ1ZmZlciB3aXRob3V0IGEgemVybwordGVybWluYXRpbmcgYnl0ZS4gQ1ZFLTIwMTctMTAwMDI1NAorCitUZXN0IDExNTIgYWRkZWQgdG8gdmVyaWZ5LgorCitSZXBvcnRlZC1ieTogTWF4IER5bW9uZAorQnVnOiBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2Fkdl8yMDE3MTAwNC5odG1sCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK0NWRTogQ1ZFLTIwMTctMTAwMDI1NAorU2lnbmVkLW9mZi1ieTogTGkgWmhvdSA8bGkuemhvdUB3aW5kcml2ZXIuY29tPgorLS0tCisgbGliL2Z0cC5jICAgICAgICAgICAgICAgfCAgNyArKysrLS0KKyB0ZXN0cy9kYXRhL01ha2VmaWxlLmluYyB8ICAyICsrCisgdGVzdHMvZGF0YS90ZXN0MTE1MiAgICAgfCA2MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA2OCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9kYXRhL3Rlc3QxMTUyCisKK2RpZmYgLS1naXQgYS9saWIvZnRwLmMgYi9saWIvZnRwLmMKK2luZGV4IDVlZGVjMzcuLjQ5M2RiZjkgMTAwNjQ0CistLS0gYS9saWIvZnRwLmMKKysrKyBiL2xpYi9mdHAuYworQEAgLTI4MjYsNiArMjgyNiw3IEBAIHN0YXRpYyBDVVJMY29kZSBmdHBfc3RhdGVtYWNoX2FjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCisgICAgICAgICBjb25zdCBzaXplX3QgYnVmX3NpemUgPSBkYXRhLT5zZXQuYnVmZmVyX3NpemU7CisgICAgICAgICBjaGFyICpkaXI7CisgICAgICAgICBjaGFyICpzdG9yZTsKKysgICAgICAgIGJvb2wgZW50cnlfZXh0cmFjdGVkID0gRkFMU0U7CisgCisgICAgICAgICBkaXIgPSBtYWxsb2MobnJlYWQgKyAxKTsKKyAgICAgICAgIGlmKCFkaXIpCitAQCAtMjg1Nyw3ICsyODU4LDcgQEAgc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZW1hY2hfYWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAvKiBlbmQgb2YgcGF0aCAqLworLSAgICAgICAgICAgICAgICAqc3RvcmUgPSAnXDAnOyAvKiB6ZXJvIHRlcm1pbmF0ZSAqLworKyAgICAgICAgICAgICAgICBlbnRyeV9leHRyYWN0ZWQgPSBUUlVFOworICAgICAgICAgICAgICAgICBicmVhazsgLyogZ2V0IG91dCBvZiB0aGlzIGxvb3AgKi8KKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9CitAQCAtMjg2Niw3ICsyODY3LDkgQEAgc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZW1hY2hfYWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKKyAgICAgICAgICAgICBzdG9yZSsrOworICAgICAgICAgICAgIHB0cisrOworICAgICAgICAgICB9CistCisrICAgICAgICAgICpzdG9yZSA9ICdcMCc7IC8qIHplcm8gdGVybWluYXRlICovCisrICAgICAgICB9CisrICAgICAgICBpZihlbnRyeV9leHRyYWN0ZWQpIHsKKyAgICAgICAgICAgLyogSWYgdGhlIHBhdGggbmFtZSBkb2VzIG5vdCBsb29rIGxpa2UgYW4gYWJzb2x1dGUgcGF0aCAoaS5lLjogaXQKKyAgICAgICAgICAgICAgZG9lcyBub3Qgc3RhcnQgd2l0aCBhICcvJyksIHdlIHByb2JhYmx5IG5lZWQgc29tZSBzZXJ2ZXItZGVwZW5kZW50CisgICAgICAgICAgICAgIGFkanVzdG1lbnRzLiBGb3IgZXhhbXBsZSwgdGhpcyBpcyB0aGUgY2FzZSB3aGVuIGNvbm5lY3RpbmcgdG8KK2RpZmYgLS1naXQgYS90ZXN0cy9kYXRhL01ha2VmaWxlLmluYyBiL3Rlc3RzL2RhdGEvTWFrZWZpbGUuaW5jCitpbmRleCA3YWRiZWU2Li41Mjg0NjU0IDEwMDY0NAorLS0tIGEvdGVzdHMvZGF0YS9NYWtlZmlsZS5pbmMKKysrKyBiL3Rlc3RzL2RhdGEvTWFrZWZpbGUuaW5jCitAQCAtMTIxLDYgKzEyMSw4IEBAIHRlc3QxMTIwIHRlc3QxMTIxIHRlc3QxMTIyIHRlc3QxMTIzIHRlc3QxMTI0IHRlc3QxMTI1IHRlc3QxMTI2IHRlc3QxMTI3IFwKKyB0ZXN0MTEyOCB0ZXN0MTEyOSB0ZXN0MTEzMCB0ZXN0MTEzMSB0ZXN0MTEzMiB0ZXN0MTEzMyB0ZXN0MTEzNCB0ZXN0MTEzNSBcCisgdGVzdDExMzYgdGVzdDExMzcgdGVzdDExMzggdGVzdDExMzkgdGVzdDExNDAgdGVzdDExNDEgdGVzdDExNDIgdGVzdDExNDMgXAorIHRlc3QxMTQ0IHRlc3QxMTQ1IHRlc3QxMTQ2IFwKKyt0ZXN0MTE1MiBcCisrXAorIHRlc3QxMjAwIHRlc3QxMjAxIHRlc3QxMjAyIHRlc3QxMjAzIHRlc3QxMjA0IHRlc3QxMjA1IHRlc3QxMjA2IHRlc3QxMjA3IFwKKyB0ZXN0MTIwOCB0ZXN0MTIwOSB0ZXN0MTIxMCB0ZXN0MTIxMSB0ZXN0MTIxMiB0ZXN0MTIxMyB0ZXN0MTIxNCB0ZXN0MTIxNSBcCisgdGVzdDEyMTYgdGVzdDEyMTcgdGVzdDEyMTggdGVzdDEyMTkgXAorZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDExNTIgYi90ZXN0cy9kYXRhL3Rlc3QxMTUyCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYWE4YzBhNworLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdHMvZGF0YS90ZXN0MTE1MgorQEAgLTAsMCArMSw2MSBAQAorKzx0ZXN0Y2FzZT4KKys8aW5mbz4KKys8a2V5d29yZHM+CisrRlRQCisrUEFTVgorK0xJU1QKKys8L2tleXdvcmRzPgorKzwvaW5mbz4KKysjCisrIyBTZXJ2ZXItc2lkZQorKzxyZXBseT4KKys8c2VydmVyY21kPgorK1JFUExZIFBXRCAyNTcgImp1c3Qgb25lCisrPC9zZXJ2ZXJjbWQ+CisrCisrIyBXaGVuIGRvaW5nIExJU1QsIHdlIGdldCB0aGUgZGVmYXVsdCBsaXN0IG91dHB1dCBoYXJkLWNvZGVkIGluIHRoZSB0ZXN0CisrIyBGVFAgc2VydmVyCisrPGRhdGEgbW9kZT0idGV4dCI+CisrdG90YWwgMjAKKytkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuCisrZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLi4KKytkcnd4ci14ci14ICAgMiA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE1heSAgMiAgMTk5NiBjdXJsLXJlbGVhc2VzCisrLXItLXItLXItLSAgIDEgMCAgICAgICAgMSAgICAgICAgICAgICAzNSBKdWwgMTYgIDE5OTYgUkVBRE1FCisrbHJ3eHJ3eHJ3eCAgIDEgMCAgICAgICAgMSAgICAgICAgICAgICAgNyBEZWMgIDkgIDE5OTkgYmluIC0+IHVzci9iaW4KKytkci14ci14ci14ICAgMiAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyBkZXYKKytkcnd4cnd4cnd4ICAgMiA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE1heSAyOSAxNjowNCBkb3dubG9hZC5odG1sCisrZHIteHIteHIteCAgIDIgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBOb3YgMzAgIDE5OTUgZXRjCisrZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgMzAgMTQ6MzMgcHViCisrZHIteHIteHIteCAgIDUgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgIDEgIDE5OTcgdXNyCisrPC9kYXRhPgorKzwvcmVwbHk+CisrCisrIworKyMgQ2xpZW50LXNpZGUKKys8Y2xpZW50PgorKzxzZXJ2ZXI+CisrZnRwCisrPC9zZXJ2ZXI+CisrIDxuYW1lPgorK0ZUUCB3aXRoIHVuZXZlbiBxdW90ZSBpbiBQV0QgcmVzcG9uc2UKKysgPC9uYW1lPgorKyA8Y29tbWFuZD4KKytmdHA6Ly8lSE9TVElQOiVGVFBQT1JUL3Rlc3QtMTE1Mi8KKys8L2NvbW1hbmQ+CisrPC9jbGllbnQ+CisrCisrIworKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCisrPHZlcmlmeT4KKys8cHJvdG9jb2w+CisrVVNFUiBhbm9ueW1vdXMKKytQQVNTIGZ0cEBleGFtcGxlLmNvbQorK1BXRAorK0NXRCB0ZXN0LTExNTIKKytFUFNWCisrVFlQRSBBCisrTElTVAorK1FVSVQKKys8L3Byb3RvY29sPgorKzwvdmVyaWZ5PgorKzwvdGVzdGNhc2U+CistLSAKKzIuMTEuMAorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsL3JlcHJvZHVjaWJsZS1ta2hlbHAucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsL3JlcHJvZHVjaWJsZS1ta2hlbHAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY4YmJlYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmwvcmVwcm9kdWNpYmxlLW1raGVscC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDFmZTkyZmQzZGQ2NGM3MjI4ZjZmZjQxZTNmYzE2YzRmMjM5MjQ3MWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXJvIEJ5c3RyaWNreSA8anVyby5ieXN0cmlja3lAaW50ZWwuY29tPgorRGF0ZTogRnJpLCAyNyBPY3QgMjAxNyAwODoyODoyNSAtMDcwMAorU3ViamVjdDogbWtoZWxwLnBsOiBzdXBwb3J0IHJlcHJvZHVjaWJsZSBidWlsZAorCitEbyBub3QgZ2VuZXJhdGUgbGluZSB3aXRoIHRoZSBjdXJyZW50IGRhdGUsIHN1Y2ggYXM6CisKKyogR2VuZXJhdGlvbiB0aW1lOiBUdWUgT2N0LTI0IDE4OjAxOjQxIDIwMTcKKworVGhpcyB3aWxsIGltcHJvdmUgcmVwcm9kdWNpYmlsaXR5LiBUaGUgZ2VuZXJhdGVkIHN0cmluZyBpcyBvbmx5CitwYXJ0IG9mIGEgY29tbWVudCwgc28gdGhlcmUgc2hvdWxkIGJlIG5vIGFkdmVyc2UgY29uc2VxdWVuY2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbIGh0dHBzOi8vZ2l0aHViLmNvbS9jdXJsL2N1cmwvcHVsbC8yMDI2IF0KKworU2lnbmVkLW9mZi1ieTogSnVybyBCeXN0cmlja3kgPGp1cm8uYnlzdHJpY2t5QGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3NyYy9ta2hlbHAucGwgYi9zcmMvbWtoZWxwLnBsCitpbmRleCAyNzBkYWEyLi43NTdmMDI0IDEwMDc1NQorLS0tIGEvc3JjL21raGVscC5wbAorKysrIGIvc3JjL21raGVscC5wbAorQEAgLTEwMiwxMSArMTAyLDkgQEAgd2hpbGUoPFJFQUQ+KSB7CisgfQorIGNsb3NlKFJFQUQpOworIAorLSRub3cgPSBsb2NhbHRpbWU7CisgcHJpbnQgPDxIRUFECisgLyoKKyAgKiBORVZFUiBFVkVSIGVkaXQgdGhpcyBtYW51YWxseSwgZml4IHRoZSBta2hlbHAucGwgc2NyaXB0IGluc3RlYWQhCistICogR2VuZXJhdGlvbiB0aW1lOiAkbm93CisgICovCisgI2lmZGVmIFVTRV9NQU5VQUwKKyAjaW5jbHVkZSAidG9vbF9odWdlaGVscC5oIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybF83LjUzLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsXzcuNTMuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNlMWY4OS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsXzcuNTMuMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLVNVTU1BUlkgPSAiQ29tbWFuZCBsaW5lIHRvb2wgYW5kIGxpYnJhcnkgZm9yIGNsaWVudC1zaWRlIFVSTCB0cmFuc2ZlcnMiCi1IT01FUEFHRSA9ICJodHRwOi8vY3VybC5oYXh4LnNlLyIKLUJVR1RSQUNLRVIgPSAiaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpc3QuY2dpP2xpc3Q9Y3VybC10cmFja2VyIgotU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCi1MSUNFTlNFID0gIk1JVCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7YmVnaW5saW5lPTg7bWQ1PTNhMzQ5NDJmNGFlM2ZiZjFhMzAzMTYwNzE0ZTY2NGFjIgotCi1TUkNfVVJJID0gImh0dHA6Ly9jdXJsLmhheHguc2UvZG93bmxvYWQvY3VybC0ke1BWfS50YXIuYnoyIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtcmVwbGFjZS1rcmI1LWNvbmZpZy13aXRoLXBrZy1jb25maWcucGF0Y2ggXAotIgotCi0jIGN1cmwgbGlrZXMgdG8gc2V0IC1nMCBpbiBDRkxBR1MsIHNvIHdlIHN0b3AgaXQKLSMgZnJvbSBtdWNraW5nIGFyb3VuZCB3aXRoIGRlYnVnIG9wdGlvbnMKLSMKLVNSQ19VUkkgKz0gIiBmaWxlOi8vY29uZmlndXJlX2FjLnBhdGNoIFwKLSAgICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTAwMDEwMC5wYXRjaCBcCi0gICAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTEwMDAxMDEucGF0Y2ggXAotICAgICAgICAgICAgICIKLQotU1JDX1VSSVttZDVzdW1dID0gImZiMWYwM2ExNDIyMzY4NDBjMWE3N2MwMzVmYTRjNTQyIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFjNzIwN2MwNmQ3NWU5MTM2YTk0NGEyZTA1MjgzMzdjZTc2ZjE1YjllYzlhZTRiYjMwZDcwM2I1OWJmNTMwZTgiCi0KLUNWRV9QUk9EVUNUID0gImxpYmN1cmwiCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcgYmluY29uZmlnIG11bHRpbGliX2hlYWRlcgotCi1QQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuZmlsdGVyKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsIGQpfSBnbnV0bHMgcHJveHkgdGhyZWFkZWQtcmVzb2x2ZXIgemxpYiIKLVBBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID0gImlwdjYgcHJveHkgc3NsIHRocmVhZGVkLXJlc29sdmVyIHpsaWIiCi1QQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZXNkayA9ICJpcHY2IHByb3h5IHNzbCB0aHJlYWRlZC1yZXNvbHZlciB6bGliIgotCi1QQUNLQUdFQ09ORklHW2RpY3RdID0gIi0tZW5hYmxlLWRpY3QsLS1kaXNhYmxlLWRpY3QsIgotUEFDS0FHRUNPTkZJR1tnbnV0bHNdID0gIi0td2l0aC1nbnV0bHMsLS13aXRob3V0LWdudXRscyxnbnV0bHMiCi1QQUNLQUdFQ09ORklHW2dvcGhlcl0gPSAiLS1lbmFibGUtZ29waGVyLC0tZGlzYWJsZS1nb3BoZXIsIgotUEFDS0FHRUNPTkZJR1tpbWFwXSA9ICItLWVuYWJsZS1pbWFwLC0tZGlzYWJsZS1pbWFwLCIKLVBBQ0tBR0VDT05GSUdbaXB2Nl0gPSAiLS1lbmFibGUtaXB2NiwtLWRpc2FibGUtaXB2NiwiCi1QQUNLQUdFQ09ORklHW2xkYXBdID0gIi0tZW5hYmxlLWxkYXAsLS1kaXNhYmxlLWxkYXAsIgotUEFDS0FHRUNPTkZJR1tsZGFwc10gPSAiLS1lbmFibGUtbGRhcHMsLS1kaXNhYmxlLWxkYXBzLCIKLVBBQ0tBR0VDT05GSUdbbGliaWRuXSA9ICItLXdpdGgtbGliaWRuLC0td2l0aG91dC1saWJpZG4sbGliaWRuIgotUEFDS0FHRUNPTkZJR1tsaWJzc2gyXSA9ICItLXdpdGgtbGlic3NoMiwtLXdpdGhvdXQtbGlic3NoMixsaWJzc2gyIgotUEFDS0FHRUNPTkZJR1twb3AzXSA9ICItLWVuYWJsZS1wb3AzLC0tZGlzYWJsZS1wb3AzLCIKLVBBQ0tBR0VDT05GSUdbcHJveHldID0gIi0tZW5hYmxlLXByb3h5LC0tZGlzYWJsZS1wcm94eSwiCi1QQUNLQUdFQ09ORklHW3J0bXBkdW1wXSA9ICItLXdpdGgtbGlicnRtcCwtLXdpdGhvdXQtbGlicnRtcCxydG1wZHVtcCIKLVBBQ0tBR0VDT05GSUdbcnRzcF0gPSAiLS1lbmFibGUtcnRzcCwtLWRpc2FibGUtcnRzcCwiCi1QQUNLQUdFQ09ORklHW3NtYl0gPSAiLS1lbmFibGUtc21iLC0tZGlzYWJsZS1zbWIsIgotUEFDS0FHRUNPTkZJR1tzbXRwXSA9ICItLWVuYWJsZS1zbXRwLC0tZGlzYWJsZS1zbXRwLCIKLVBBQ0tBR0VDT05GSUdbc3NsXSA9ICItLXdpdGgtc3NsIC0td2l0aC1yYW5kb209L2Rldi91cmFuZG9tLC0td2l0aG91dC1zc2wsb3BlbnNzbCIKLVBBQ0tBR0VDT05GSUdbdGVsbmV0XSA9ICItLWVuYWJsZS10ZWxuZXQsLS1kaXNhYmxlLXRlbG5ldCwiCi1QQUNLQUdFQ09ORklHW3RmdHBdID0gIi0tZW5hYmxlLXRmdHAsLS1kaXNhYmxlLXRmdHAsIgotUEFDS0FHRUNPTkZJR1t0aHJlYWRlZC1yZXNvbHZlcl0gPSAiLS1lbmFibGUtdGhyZWFkZWQtcmVzb2x2ZXIsLS1kaXNhYmxlLXRocmVhZGVkLXJlc29sdmVyIgotUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLXdpdGgtemxpYj0ke1NUQUdJTkdfTElCRElSfS8uLi8sLS13aXRob3V0LXpsaWIsemxpYiIKLVBBQ0tBR0VDT05GSUdba3JiNV0gPSAiLS13aXRoLWdzc2FwaSwtLXdpdGhvdXQtZ3NzYXBpLGtyYjUiCi0KLUVYVFJBX09FQ09ORiA9ICIgXAotICAgIC0tZW5hYmxlLWNyeXB0by1hdXRoIFwKLSAgICAtLXdpdGgtY2EtYnVuZGxlPSR7c3lzY29uZmRpcn0vc3NsL2NlcnRzL2NhLWNlcnRpZmljYXRlcy5jcnQgXAotICAgIC0td2l0aG91dC1saWJtZXRhbGluayBcCi0gICAgLS13aXRob3V0LWxpYnBzbCBcCi0gICAgLS13aXRob3V0LW5naHR0cDIgXAotIgotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQlvZV9tdWx0aWxpYl9oZWFkZXIgY3VybC9jdXJsYnVpbGQuaAotfQotCi1kb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7Ci0JIyBjbGVhbnVwIGJ1aWxkcGF0aHMgZnJvbSBjdXJsLWNvbmZpZwotCXNlZCAtaSAtZSAncywke1NUQUdJTkdfRElSX0hPU1R9LCxnJyAke0R9JHtiaW5kaXJ9L2N1cmwtY29uZmlnCi19Ci0KLVBBQ0tBR0VTID0rICJsaWIke0JQTn0iCi0KLUZJTEVTX2xpYiR7QlBOfSA9ICIke2xpYmRpcn0vbGliKi5zby4qIgotUlJFQ09NTUVORFNfbGliJHtCUE59ICs9ICJjYS1jZXJ0aWZpY2F0ZXMiCi0KLUZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3pzaCIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybF83LjU0LjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsXzcuNTQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGYwNTMxCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybF83LjU0LjEuYmIKQEAgLTAsMCArMSw4NyBAQAorU1VNTUFSWSA9ICJDb21tYW5kIGxpbmUgdG9vbCBhbmQgbGlicmFyeSBmb3IgY2xpZW50LXNpZGUgVVJMIHRyYW5zZmVycyIKK0hPTUVQQUdFID0gImh0dHA6Ly9jdXJsLmhheHguc2UvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGlzdC5jZ2k/bGlzdD1jdXJsLXRyYWNrZXIiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORztiZWdpbmxpbmU9ODttZDU9M2EzNDk0MmY0YWUzZmJmMWEzMDMxNjA3MTRlNjY0YWMiCisKK1NSQ19VUkkgPSAiaHR0cDovL2N1cmwuaGF4eC5zZS9kb3dubG9hZC9jdXJsLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1yZXBsYWNlLWtyYjUtY29uZmlnLXdpdGgtcGtnLWNvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNy0xMDAwMDk5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0NWRS0yMDE3LTEwMDAxMDAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTAwMDEwMS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNy0xMDAwMjU0LnBhdGNoIFwKKyIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBcCisgICAgICAgICAgIGZpbGU6Ly9yZXByb2R1Y2libGUtbWtoZWxwLnBhdGNoIFwKKyIKKworIyBjdXJsIGxpa2VzIHRvIHNldCAtZzAgaW4gQ0ZMQUdTLCBzbyB3ZSBzdG9wIGl0CisjIGZyb20gbXVja2luZyBhcm91bmQgd2l0aCBkZWJ1ZyBvcHRpb25zCisjCitTUkNfVVJJICs9ICIgZmlsZTovL2NvbmZpZ3VyZV9hYy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjZiNmViNzIyZjUxMmU3YTI0ODU1ZmYwODRmNTRmZTU1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZkZmM0ZGYyZDAwMWVlMGM0NGVjMDcxMTg2ZTc3MDA0NjI0OTI2M2M0OTFmY2FlNDhkZjBlMWEzY2E4ZjI1YTAiCisKK0NWRV9QUk9EVUNUID0gImxpYmN1cmwiCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgYmluY29uZmlnIG11bHRpbGliX2hlYWRlcgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuZmlsdGVyKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsIGQpfSBnbnV0bHMgcHJveHkgdGhyZWFkZWQtcmVzb2x2ZXIgemxpYiIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID0gImlwdjYgcHJveHkgc3NsIHRocmVhZGVkLXJlc29sdmVyIHpsaWIiCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZXNkayA9ICJpcHY2IHByb3h5IHNzbCB0aHJlYWRlZC1yZXNvbHZlciB6bGliIgorCisjICdhcmVzJyBhbmQgJ3RocmVhZGVkLXJlc29sdmVyJyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlCitQQUNLQUdFQ09ORklHW2FyZXNdID0gIi0tZW5hYmxlLWFyZXMsLS1kaXNhYmxlLWFyZXMsYy1hcmVzIgorUEFDS0FHRUNPTkZJR1tkaWN0XSA9ICItLWVuYWJsZS1kaWN0LC0tZGlzYWJsZS1kaWN0LCIKK1BBQ0tBR0VDT05GSUdbZ251dGxzXSA9ICItLXdpdGgtZ251dGxzLC0td2l0aG91dC1nbnV0bHMsZ251dGxzIgorUEFDS0FHRUNPTkZJR1tnb3BoZXJdID0gIi0tZW5hYmxlLWdvcGhlciwtLWRpc2FibGUtZ29waGVyLCIKK1BBQ0tBR0VDT05GSUdbaW1hcF0gPSAiLS1lbmFibGUtaW1hcCwtLWRpc2FibGUtaW1hcCwiCitQQUNLQUdFQ09ORklHW2lwdjZdID0gIi0tZW5hYmxlLWlwdjYsLS1kaXNhYmxlLWlwdjYsIgorUEFDS0FHRUNPTkZJR1tsZGFwXSA9ICItLWVuYWJsZS1sZGFwLC0tZGlzYWJsZS1sZGFwLCIKK1BBQ0tBR0VDT05GSUdbbGRhcHNdID0gIi0tZW5hYmxlLWxkYXBzLC0tZGlzYWJsZS1sZGFwcywiCitQQUNLQUdFQ09ORklHW2xpYmlkbl0gPSAiLS13aXRoLWxpYmlkbiwtLXdpdGhvdXQtbGliaWRuLGxpYmlkbiIKK1BBQ0tBR0VDT05GSUdbbGlic3NoMl0gPSAiLS13aXRoLWxpYnNzaDIsLS13aXRob3V0LWxpYnNzaDIsbGlic3NoMiIKK1BBQ0tBR0VDT05GSUdbcG9wM10gPSAiLS1lbmFibGUtcG9wMywtLWRpc2FibGUtcG9wMywiCitQQUNLQUdFQ09ORklHW3Byb3h5XSA9ICItLWVuYWJsZS1wcm94eSwtLWRpc2FibGUtcHJveHksIgorUEFDS0FHRUNPTkZJR1tydG1wZHVtcF0gPSAiLS13aXRoLWxpYnJ0bXAsLS13aXRob3V0LWxpYnJ0bXAscnRtcGR1bXAiCitQQUNLQUdFQ09ORklHW3J0c3BdID0gIi0tZW5hYmxlLXJ0c3AsLS1kaXNhYmxlLXJ0c3AsIgorUEFDS0FHRUNPTkZJR1tzbWJdID0gIi0tZW5hYmxlLXNtYiwtLWRpc2FibGUtc21iLCIKK1BBQ0tBR0VDT05GSUdbc210cF0gPSAiLS1lbmFibGUtc210cCwtLWRpc2FibGUtc210cCwiCitQQUNLQUdFQ09ORklHW3NzbF0gPSAiLS13aXRoLXNzbCAtLXdpdGgtcmFuZG9tPS9kZXYvdXJhbmRvbSwtLXdpdGhvdXQtc3NsLG9wZW5zc2wiCitQQUNLQUdFQ09ORklHW3RlbG5ldF0gPSAiLS1lbmFibGUtdGVsbmV0LC0tZGlzYWJsZS10ZWxuZXQsIgorUEFDS0FHRUNPTkZJR1t0ZnRwXSA9ICItLWVuYWJsZS10ZnRwLC0tZGlzYWJsZS10ZnRwLCIKK1BBQ0tBR0VDT05GSUdbdGhyZWFkZWQtcmVzb2x2ZXJdID0gIi0tZW5hYmxlLXRocmVhZGVkLXJlc29sdmVyLC0tZGlzYWJsZS10aHJlYWRlZC1yZXNvbHZlciIKK1BBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS13aXRoLXpsaWI9JHtTVEFHSU5HX0xJQkRJUn0vLi4vLC0td2l0aG91dC16bGliLHpsaWIiCitQQUNLQUdFQ09ORklHW2tyYjVdID0gIi0td2l0aC1nc3NhcGksLS13aXRob3V0LWdzc2FwaSxrcmI1IgorUEFDS0FHRUNPTkZJR1tuZ2h0dHAyXSA9ICItLXdpdGgtbmdodHRwMiwtLXdpdGhvdXQtbmdodHRwMixuZ2h0dHAyIgorCitFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAtLWVuYWJsZS1jcnlwdG8tYXV0aCBcCisgICAgLS13aXRoLWNhLWJ1bmRsZT0ke3N5c2NvbmZkaXJ9L3NzbC9jZXJ0cy9jYS1jZXJ0aWZpY2F0ZXMuY3J0IFwKKyAgICAtLXdpdGhvdXQtbGlibWV0YWxpbmsgXAorICAgIC0td2l0aG91dC1saWJwc2wgXAorIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlvZV9tdWx0aWxpYl9oZWFkZXIgY3VybC9jdXJsYnVpbGQuaAorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7CisJIyBjbGVhbnVwIGJ1aWxkcGF0aHMgZnJvbSBjdXJsLWNvbmZpZworCXNlZCAtaSBcCisJICAgIC1lICdzLC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0sLGcnIFwKKwkgICAgLWUgJ3MsLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0sLGcnIFwKKwkgICAgLWUgJ3N8JHtERUJVR19QUkVGSVhfTUFQfXx8ZycgXAorCSAgICAke0R9JHtiaW5kaXJ9L2N1cmwtY29uZmlnCit9CisKK1BBQ0tBR0VTID0rICJsaWIke0JQTn0iCisKK0ZJTEVTX2xpYiR7QlBOfSA9ICIke2xpYmRpcn0vbGliKi5zby4qIgorUlJFQ09NTUVORFNfbGliJHtCUE59ICs9ICJjYS1jZXJ0aWZpY2F0ZXMiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3pzaCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiLzAwMDEtY29uZmlndXJlLUFkZC1leHBsaWNpdC10YWctb3B0aW9ucy10by1saWJ0b29sLWludm9jYS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi8wMDAxLWNvbmZpZ3VyZS1BZGQtZXhwbGljaXQtdGFnLW9wdGlvbnMtdG8tbGlidG9vbC1pbnZvY2EucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IyOGRiMQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi8wMDAxLWNvbmZpZ3VyZS1BZGQtZXhwbGljaXQtdGFnLW9wdGlvbnMtdG8tbGlidG9vbC1pbnZvY2EucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSAzMmU1OTQzYTNjNDYzN2QzOWU0ZDY1YjU0NGRjYjk5ZTI4MDIxMGUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMjMgSnVsIDIwMTcgMTA6NTQ6MjYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlOiBBZGQgZXhwbGljaXQgdGFnIG9wdGlvbnMgdG8gbGlidG9vbCBpbnZvY2F0aW9uCisKK1RoaXMgaGVscHMgY3Jvc3MgY29tcGlsZSB3aGVuIHRhZyBpbmZlcmVuY2UgdmlhIGhldXJpc3RpY3MKK2ZhaWwgYmVjYXVzZSBDQyB2YXJpYWJsZSBpcyBoYXZpbmcgLWZQSUUgLXBpZSBhbmQgbGlidG9vbAorc21hcnRseSByZW1vdmVzIGl0IHdoZW4gYnVpbGRpbmcgbGlicmFyaWVzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZGlzdC9jb25maWd1cmUuYWMgfCAxMiArKysrKystLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZGlzdC9jb25maWd1cmUuYWMgYi9kaXN0L2NvbmZpZ3VyZS5hYworaW5kZXggNjg5ZjNiOC4uOWMxNGJkYiAxMDA2NDQKKy0tLSBhL2Rpc3QvY29uZmlndXJlLmFjCisrKysgYi9kaXN0L2NvbmZpZ3VyZS5hYworQEAgLTM2NiwxMiArMzY2LDEyIEBAIExJQlRPT0w9Ii4vbGlidG9vbCIKKyAKKyBJTlNUQUxMRVI9IlwkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsIGNwIC1wIgorIAorLU1BS0VGSUxFX0NDPSJcJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAke01BS0VGSUxFX0NDfSIKKy1NQUtFRklMRV9TT0xJTks9IlwkKExJQlRPT0wpIC0tbW9kZT1saW5rICR7TUFLRUZJTEVfQ0NMSU5LfSAtYXZvaWQtdmVyc2lvbiIKKy1NQUtFRklMRV9DQ0xJTks9IlwkKExJQlRPT0wpIC0tbW9kZT1saW5rICR7TUFLRUZJTEVfQ0NMSU5LfSIKKy1NQUtFRklMRV9DWFg9IlwkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICR7TUFLRUZJTEVfQ1hYfSIKKy1NQUtFRklMRV9YU09MSU5LPSJcJChMSUJUT09MKSAtLW1vZGU9bGluayAke01BS0VGSUxFX0NYWExJTkt9IC1hdm9pZC12ZXJzaW9uIgorLU1BS0VGSUxFX0NYWExJTks9IlwkKExJQlRPT0wpIC0tbW9kZT1saW5rICR7TUFLRUZJTEVfQ1hYTElOS30iCisrTUFLRUZJTEVfQ0M9IlwkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICR7TUFLRUZJTEVfQ0N9IgorK01BS0VGSUxFX1NPTElOSz0iXCQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWxpbmsgJHtNQUtFRklMRV9DQ0xJTkt9IC1hdm9pZC12ZXJzaW9uIgorK01BS0VGSUxFX0NDTElOSz0iXCQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWxpbmsgJHtNQUtFRklMRV9DQ0xJTkt9IgorK01BS0VGSUxFX0NYWD0iXCQoTElCVE9PTCkgLS10YWc9Q1hYIC0tbW9kZT1jb21waWxlICR7TUFLRUZJTEVfQ1hYfSIKKytNQUtFRklMRV9YU09MSU5LPSJcJChMSUJUT09MKSAtLXRhZz1DWFggLS1tb2RlPWxpbmsgJHtNQUtFRklMRV9DWFhMSU5LfSAtYXZvaWQtdmVyc2lvbiIKKytNQUtFRklMRV9DWFhMSU5LPSJcJChMSUJUT09MKSAtLXRhZz1DWFggLS1tb2RlPWxpbmsgJHtNQUtFRklMRV9DWFhMSU5LfSIKKyAKKyAKKyBjYXNlICIkaG9zdF9vcyIgaW4KKy0tIAorMi4xMy4zCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9zZXF1ZW5jZS10eXBlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL3NlcXVlbmNlLXR5cGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZmZTNkNgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9zZXF1ZW5jZS10eXBlLnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK2NvbmZpZ3VyZSB3YW50cyB0byB1c2UgaG9zdC1zcGVjaWZpYyB0eXBlcyB0byBnZXQgYSA2NC1iaXQgaW50ZWdlciBpbiBkYi5oCitpbnN0ZWFkIG9mIHVzaW5nIGFuIGFsaWFzIHN1Y2ggYXMgaW50NjRfdC4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgaGVhZGVyIGRpZmZlcnMKK2luIG11bHRpbGliIGVudmlyb25tZW50cyBmb3Igbm8gZ29vZCByZWFzb24sIHNvIHJlcGxhY2UgdGhlIHR5cGUgd2l0aCB0aGUgYWxpYXMKK2luIHN0ZGludC5oLgorCitUaGlzIHRoZW4gYnJlYWtzIHRoZSBvdmVybHkgY29tcGxpY2F0ZWQgdHlwZSBjaGVjayBidXQgYXMgd2Uga25vdyB0aGF0IGludDY0X3QKK2V4aXN0cyBhbmQgd29ya3MsIHdlIGNhbiBqdXN0IGRlbGV0ZSB0aGF0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKKy0tLSBhL2Rpc3QvYWNsb2NhbC9zZXF1ZW5jZS5tNH4JMjAxMy0wOS0wOSAxNjozNTowMi4wMDAwMDAwMDAgKzAxMDAKKysrKyBiL2Rpc3QvYWNsb2NhbC9zZXF1ZW5jZS5tNAkyMDE3LTExLTAxIDEzOjIxOjQ1LjQ3MjI5NTk3MSArMDAwMAorQEAgLTI0ICsyNCBAQAorLQkJZGJfY3Zfc2VxX3R5cGU9ImxvbmciCisrCQlkYl9jdl9zZXFfdHlwZT0iaW50NjRfdCIKK0BAIC0zMSArMzEgQEAKKy0JCWRiX2N2X3NlcV90eXBlPSJsb25nIGxvbmciCisrCQlkYl9jdl9zZXFfdHlwZT0iaW50NjRfdCIKK0BAIC00MSwzOCArNDEgQEAKKy0JIyBUZXN0IHRvIHNlZSBpZiB3ZSBjYW4gZGVjbGFyZSB2YXJpYWJsZXMgb2YgdGhlIGFwcHJvcHJpYXRlIHNpemUKKy0JIyBhbmQgZm9ybWF0IHRoZW0uICBJZiB3ZSdyZSBjcm9zcy1jb21waWxpbmcsIGFsbCB3ZSBnZXQgaXMgYSBsaW5rCistCSMgdGVzdCwgd2hpY2ggd29uJ3QgdGVzdCBmb3IgdGhlIGFwcHJvcHJpYXRlIHByaW50ZiBmb3JtYXQgc3RyaW5ncy4KKy0JaWYgdGVzdCAiJGRiX2N2X2J1aWxkX3NlcXVlbmNlIiA9ICJ5ZXMiOyB0aGVuCistCQlBQ19UUllfUlVOKFsKKy0JCW1haW4oKSB7CistCQkJJGRiX2N2X3NlcV90eXBlIGw7CistCQkJdW5zaWduZWQgJGRiX2N2X3NlcV90eXBlIHU7CistCQkJY2hhciBidWZAPDpAMTAwQDo+QDsKKy0KKy0JCQlidWZAPDpAMEA6PkAgPSAnYSc7CistCQkJbCA9IDkyMjMzNzIwMzY4NTQ3NzU4MDdMTDsKKy0JCQkodm9pZClzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAkZGJfY3Zfc2VxX2ZtdCwgbCk7CistCQkJaWYgKHN0cmNtcChidWYsICI5MjIzMzcyMDM2ODU0Nzc1ODA3IikpCistCQkJCXJldHVybiAoMSk7CistCQkJdSA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMOworLQkJCSh2b2lkKXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICRkYl9jdl9zZXFfdWZtdCwgdSk7CistCQkJaWYgKHN0cmNtcChidWYsICIxODQ0Njc0NDA3MzcwOTU1MTYxNSIpKQorLQkJCQlyZXR1cm4gKDEpOworLQkJCXJldHVybiAoMCk7CistCQl9XSwsIFtkYl9jdl9idWlsZF9zZXF1ZW5jZT0ibm8iXSwKKy0JCUFDX1RSWV9MSU5LKCxbCistCQkJJGRiX2N2X3NlcV90eXBlIGw7CistCQkJdW5zaWduZWQgJGRiX2N2X3NlcV90eXBlIHU7CistCQkJY2hhciBidWZAPDpAMTAwQDo+QDsKKy0KKy0JCQlidWZAPDpAMEA6PkAgPSAnYSc7CistCQkJbCA9IDkyMjMzNzIwMzY4NTQ3NzU4MDdMTDsKKy0JCQkodm9pZClzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAkZGJfY3Zfc2VxX2ZtdCwgbCk7CistCQkJaWYgKHN0cmNtcChidWYsICI5MjIzMzcyMDM2ODU0Nzc1ODA3IikpCistCQkJCXJldHVybiAoMSk7CistCQkJdSA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMOworLQkJCSh2b2lkKXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICRkYl9jdl9zZXFfdWZtdCwgdSk7CistCQkJaWYgKHN0cmNtcChidWYsICIxODQ0Njc0NDA3MzcwOTU1MTYxNSIpKQorLQkJCQlyZXR1cm4gKDEpOworLQkJCXJldHVybiAoMCk7CistCQldLCwgW2RiX2N2X2J1aWxkX3NlcXVlbmNlPSJubyJdKSkKKy0JZmkKKysJZGJfY3ZfYnVpbGRfc2VxdWVuY2U9InllcyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYl81LjMuMjguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGJfNS4zLjI4LmJiCmluZGV4IDI2MDY1YmIuLmZiNGJlZmIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYl81LjMuMjguYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiXzUuMy4yOC5iYgpAQCAtMjIsMTQgKzIyLDIwIEBACiBTUkNfVVJJICs9ICJmaWxlOi8vYXJtLXRodW1iLW11dGV4X2RiNS5wYXRjaCBcCiAgICAgICAgICAgICBmaWxlOi8vZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoIFwKICAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWF0b21pYy1SZW5hbWUtbG9jYWwtX19hdG9taWNfY29tcGFyZV9leGNoYW5nZS10by1hdm8ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtY29uZmlndXJlLUFkZC1leHBsaWNpdC10YWctb3B0aW9ucy10by1saWJ0b29sLWludm9jYS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc2VxdWVuY2UtdHlwZS5wYXRjaCBcCiAgICAgICAgICAgICIKKyMgV2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIG9mZmljaWFsIGxhdGVzdCA2LnggdmVyc2lvbnM7CisjIGxldCdzIHRyYWNrIHdoYXQgZGViaWFuIGlzIHVzaW5nLgorVVBTVFJFQU1fQ0hFQ0tfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9kL2RiNS4zLyIKK1VQU1RSRUFNX0NIRUNLX1JFR0VYID0gImRiNVwuM18oP1A8cHZlcj4uKylcLm9yaWciCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICJiOTk0NTQ1NjRkNWI0NDc5NzUwNTY3MDMxZDY2ZmUyNCIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICJlMGE5OTJkNzQwNzA5ODkyZTgxZjlkOTNmMDZkYWYzMDVjZjczZmI4MWI1NDVhZmU3MjQ3ODA0MzE3MmMzNjI4IgogCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1lZDExNThlMzE0MzdmNGY4N2NkZDRhYjJiODYxMzk1NSIKIAotaW5oZXJpdCBhdXRvdG9vbHMgbXVsdGlsaWJfaGVhZGVyCitpbmhlcml0IGF1dG90b29scwogCiAjIFB1dCB2aXJ0dWFsL2RiIGluIGFueSBhcHByb3ByaWF0ZSBwcm92aWRlciBvZiBhCiAjIHJlbGF0aW9uYWwgZGF0YWJhc2UsIHVzZSBpdCBhcyBhIGRlcGVuZGVuY3kgaW4KQEAgLTcyLDIyICs3OCwzMiBAQAogTVVURVhfYXJtID0gIiR7QVJNX01VVEVYfSIKIE1VVEVYX2FybWViID0gIiR7QVJNX01VVEVYfSIKIEVYVFJBX09FQ09ORiArPSAiJHtNVVRFWH0gU1RSSVA9dHJ1ZSIKLUVYVFJBX09FTUFLRV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBMSUJUT09MPSR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9LyR7SE9TVF9TWVN9LWxpYnRvb2wiCitFWFRSQV9PRU1BS0UgKz0gIkxJQlRPT0w9Jy4vJHtIT1NUX1NZU30tbGlidG9vbCciCiAKK0VYVFJBX0FVVE9SRUNPTkYgKz0gIi0tZXhjbHVkZT1hdXRvaGVhZGVyICAtSSAke1N9L2Rpc3QvYWNsb2NhbCAtSSR7U30vZGlzdC9hY2xvY2FsX2phdmEiCiBBVVRPVE9PTFNfU0NSSVBUX1BBVEggPSAiJHtTfS9kaXN0IgogCiAjIENhbmNlbCB0aGUgc2l0ZSBzdHVmZiAtIGl0J3Mgc2V0IGZvciBkYjMgYW5kIGRlc3Ryb3lzIHRoZQogIyBjb25maWd1cmUuCiBDT05GSUdfU0lURSA9ICIiCi1kb19jb25maWd1cmUoKSB7Ci0gICAgY2QgJHtCfQotCWdudS1jb25maWdpemUgLS1mb3JjZSAke0FVVE9UT09MU19TQ1JJUFRfUEFUSH0KLQlvZV9ydW5jb25mCisKK29lX3J1bmNvbmZfcHJlcGVuZCgpIHsKKwkuICR7U30vZGlzdC9SRUxFQVNFCisJIyBFZGl0IHZlcnNpb24gaW5mb3JtYXRpb24gd2UgY291bGRuJ3QgcHJlLWNvbXB1dGUuCisJc2VkIC1pIC1lICJzL19fRURJVF9EQl9WRVJTSU9OX0ZBTUlMWV9fLyREQl9WRVJTSU9OX0ZBTUlMWS9nIiBcCisJICAgIC1lICJzL19fRURJVF9EQl9WRVJTSU9OX1JFTEVBU0VfXy8kREJfVkVSU0lPTl9SRUxFQVNFL2ciIFwKKwkgICAgLWUgInMvX19FRElUX0RCX1ZFUlNJT05fTUFKT1JfXy8kREJfVkVSU0lPTl9NQUpPUi9nIiBcCisJICAgIC1lICJzL19fRURJVF9EQl9WRVJTSU9OX01JTk9SX18vJERCX1ZFUlNJT05fTUlOT1IvZyIgXAorCSAgICAtZSAicy9fX0VESVRfREJfVkVSU0lPTl9QQVRDSF9fLyREQl9WRVJTSU9OX1BBVENIL2ciIFwKKwkgICAgLWUgInMvX19FRElUX0RCX1ZFUlNJT05fU1RSSU5HX18vJERCX1ZFUlNJT05fU1RSSU5HL2ciIFwKKwkgICAgLWUgInMvX19FRElUX0RCX1ZFUlNJT05fRlVMTF9TVFJJTkdfXy8kREJfVkVSU0lPTl9GVUxMX1NUUklORy9nIiBcCisJICAgIC1lICJzL19fRURJVF9EQl9WRVJTSU9OX1VOSVFVRV9OQU1FX18vJERCX1ZFUlNJT05fVU5JUVVFX05BTUUvZyIgXAorCSAgICAtZSAicy9fX0VESVRfREJfVkVSU0lPTl9fLyREQl9WRVJTSU9OL2ciICR7U30vZGlzdC9jb25maWd1cmUKIH0KIAogZG9fY29tcGlsZV9wcmVwZW5kKCkgewogICAgICMgU3RvcCBsaWJ0b29sIGFkZGluZyBSUEFUSHMKLSAgICBzZWQgLWkgLWUgJ3N8aGFyZGNvZGVfaW50b19saWJzPXllc3xoYXJkY29kZV9pbnRvX2xpYnM9bm98JyAke0J9L2xpYnRvb2wKKyAgICBzZWQgLWkgLWUgJ3N8aGFyZGNvZGVfaW50b19saWJzPXllc3xoYXJkY29kZV9pbnRvX2xpYnM9bm98JyAke0J9LyR7SE9TVF9TWVN9LWxpYnRvb2wKIH0KIAogZG9faW5zdGFsbF9hcHBlbmQoKSB7CkBAIC05Nyw4ICsxMTMsNiBAQAogCWxuIC1zIGRiNTEvZGIuaCAke0R9LyR7aW5jbHVkZWRpcn0vZGIuaAogCWxuIC1zIGRiNTEvZGJfY3h4LmggJHtEfS8ke2luY2x1ZGVkaXJ9L2RiX2N4eC5oCiAKLSAgICAgICAgb2VfbXVsdGlsaWJfaGVhZGVyIGRiNTEvZGIuaAotCiAJIyBUaGUgZG9jcyBlbmQgdXAgaW4gL3Vzci9kb2NzIC0gbm90IHJpZ2h0LgogCWlmIHRlc3QgLWQgIiR7RH0vJHtwcmVmaXh9L2RvY3MiCiAJdGhlbgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RlYmlhbnV0aWxzL2RlYmlhbnV0aWxzXzQuOC4xLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGViaWFudXRpbHMvZGViaWFudXRpbHNfNC44LjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODU3ZDRiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RlYmlhbnV0aWxzL2RlYmlhbnV0aWxzXzQuOC4xLjEuYmIKQEAgLTAsMCArMSw1NSBAQAorU1VNTUFSWSA9ICJNaXNjZWxsYW5lb3VzIHV0aWxpdGllcyBzcGVjaWZpYyB0byBEZWJpYW4iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyICYgU01BSUxfR1BMIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZGViaWFuL2NvcHlyaWdodDttZDU9ZjAxYTUyMDNkNTA1MTJmYzQ4MzBiNDMzMmI2OTZhOWYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4vMjAxNzA0MDJUMjExNzMyWi9wb29sL21haW4vZC8ke0JQTn0vJHtCUE59XyR7UFZ9LnRhci54eiIKKyMgdGhlIHBhY2thZ2UgaXMgdGFrZW4gZnJvbSBzbmFwc2hvdHMuZGViaWFuLm9yZzsgdGhhdCBzb3VyY2UgaXMgc3RhdGljIGFuZCBnb2VzIHN0YWxlCisjIHNvIHdlIGNoZWNrIHRoZSBsYXRlc3QgdXBzdHJlYW0gZnJvbSBhIGRpcmVjdG9yeSB0aGF0IGRvZXMgZ2V0IHVwZGF0ZWQKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vZC8ke0JQTn0vIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZWU1ZmNlY2FhYjA3MWJkMGM5M2U4YTBjZWU2NWQ2YzQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDY0NDZjZDRjMGQzMDlmZDMxYTA2ODJjNWMyZjA3Zjc2MTNmYjg2N2Y3Njk0MTRiOWNjNTFmMTU1YWQ3MzE3MiIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLWFsdGVybmF0aXZlcworCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBzZWQgLWkgLWUgJ3M6dGVtcGZpbGUuMSB3aGljaC4xOndoaWNoLjE6ZycgJHtTfS9NYWtlZmlsZS5hbQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpZiBbICIke2Jhc2VfYmluZGlyfSIgIT0gIiR7YmluZGlyfSIgXTsgdGhlbgorICAgICAgICAjIERlYmlhbiBwbGFjZXMgc29tZSB1dGlscyBpbnRvICR7YmFzZV9iaW5kaXJ9IGFzIGRvZXMgYnVzeWJveAorICAgICAgICBpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorICAgICAgICBmb3IgYXBwIGluIHJ1bi1wYXJ0cyB0ZW1wZmlsZTsgZG8KKyAgICAgICAgICAgIG12ICR7RH0ke2JpbmRpcn0vJGFwcCAke0R9JHtiYXNlX2JpbmRpcn0vJGFwcAorICAgICAgICBkb25lCisgICAgZmkKK30KKworIyBOb3RlIHRoYXQgd2UgcGFja2FnZSB0aGUgdXBkYXRlLWFsdGVybmF0aXZlcyBuYW1lLgorIworUEFDS0FHRVMgPSsgIiR7UE59LXJ1bi1wYXJ0cyIKK0ZJTEVTXyR7UE59LXJ1bi1wYXJ0cyA9ICIke2Jhc2VfYmluZGlyfS9ydW4tcGFydHMuZGViaWFudXRpbHMiCisKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1ydW4tcGFydHMiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorCitBTFRFUk5BVElWRV9QUklPUklUWT0iMzAiCitBTFRFUk5BVElWRV8ke1BOfSA9ICJhZGQtc2hlbGwgaW5zdGFsbGtlcm5lbCByZW1vdmUtc2hlbGwgc2F2ZWxvZyB0ZW1wZmlsZSB3aGljaCIKKworQUxURVJOQVRJVkVfUFJJT1JJVFlfJHtQTn0tcnVuLXBhcnRzID0gIjYwIgorQUxURVJOQVRJVkVfJHtQTn0tcnVuLXBhcnRzID0gInJ1bi1wYXJ0cyIKKworQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gIndoaWNoLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbd2hpY2guMV0gPSAiJHttYW5kaXJ9L21hbjEvd2hpY2guMSIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2FkZC1zaGVsbF09IiR7c2JpbmRpcn0vYWRkLXNoZWxsIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2luc3RhbGxrZXJuZWxdPSIke3NiaW5kaXJ9L2luc3RhbGxrZXJuZWwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcmVtb3ZlLXNoZWxsXT0iJHtzYmluZGlyfS9yZW1vdmUtc2hlbGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcnVuLXBhcnRzXT0iJHtiYXNlX2JpbmRpcn0vcnVuLXBhcnRzIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3NhdmVsb2ddPSIke2JpbmRpcn0vc2F2ZWxvZyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt0ZW1wZmlsZV09IiR7YmFzZV9iaW5kaXJ9L3RlbXBmaWxlIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3doaWNoXT0iJHtiaW5kaXJ9L3doaWNoIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kZWJpYW51dGlscy9kZWJpYW51dGlsc180LjguMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kZWJpYW51dGlscy9kZWJpYW51dGlsc180LjguMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJjNjNlZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGViaWFudXRpbHMvZGViaWFudXRpbHNfNC44LjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi1TVU1NQVJZID0gIk1pc2NlbGxhbmVvdXMgdXRpbGl0aWVzIHNwZWNpZmljIHRvIERlYmlhbiIKLVNFQ1RJT04gPSAiYmFzZSIKLUxJQ0VOU0UgPSAiR1BMdjIgJiBTTUFJTF9HUEwiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kZWJpYW4vY29weXJpZ2h0O21kNT1mMDFhNTIwM2Q1MDUxMmZjNDgzMGI0MzMyYjY5NmE5ZiIKLQotU1JDX1VSSSA9ICJodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi8yMDE2MTExOFQwMzMwMTlaL3Bvb2wvbWFpbi9kLyR7QlBOfS8ke0JQTn1fJHtQVn0udGFyLnh6IgotIyB0aGUgcGFja2FnZSBpcyB0YWtlbiBmcm9tIHNuYXBzaG90cy5kZWJpYW4ub3JnOyB0aGF0IHNvdXJjZSBpcyBzdGF0aWMgYW5kIGdvZXMgc3RhbGUKLSMgc28gd2UgY2hlY2sgdGhlIGxhdGVzdCB1cHN0cmVhbSBmcm9tIGEgZGlyZWN0b3J5IHRoYXQgZG9lcyBnZXQgdXBkYXRlZAotVVBTVFJFQU1fQ0hFQ0tfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9kLyR7QlBOfS8iCi0KLQotU1JDX1VSSVttZDVzdW1dID0gIjQ0MDgzZmM2NjE2NDc0Njg4MGRmZmQzMGQ2MmQwNTRiIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJjMzk1YzBiZGNmZTg5ZGUzMDgyOGIxZDI1Y2M1NTQ5ZGVkNTIyNWE2ZDM2MjVmYmNiMmNjMDg4MWVmNWYwMjYiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKLQotZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7Ci0gICAgc2VkIC1pIC1lICdzOnRlbXBmaWxlLjEgd2hpY2guMTp3aGljaC4xOmcnICR7U30vTWFrZWZpbGUuYW0KLX0KLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0gICAgaWYgWyAiJHtiYXNlX2JpbmRpcn0iICE9ICIke2JpbmRpcn0iIF07IHRoZW4KLSAgICAgICAgIyBEZWJpYW4gcGxhY2VzIHNvbWUgdXRpbHMgaW50byAke2Jhc2VfYmluZGlyfSBhcyBkb2VzIGJ1c3lib3gKLSAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KLSAgICAgICAgZm9yIGFwcCBpbiBydW4tcGFydHMgdGVtcGZpbGU7IGRvCi0gICAgICAgICAgICBtdiAke0R9JHtiaW5kaXJ9LyRhcHAgJHtEfSR7YmFzZV9iaW5kaXJ9LyRhcHAKLSAgICAgICAgZG9uZQotICAgIGZpCi19Ci0KLSMgTm90ZSB0aGF0IHdlIHBhY2thZ2UgdGhlIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgbmFtZS4KLSMKLVBBQ0tBR0VTID0rICIke1BOfS1ydW4tcGFydHMiCi1GSUxFU18ke1BOfS1ydW4tcGFydHMgPSAiJHtiYXNlX2JpbmRpcn0vcnVuLXBhcnRzLmRlYmlhbnV0aWxzIgotCi1SREVQRU5EU18ke1BOfSArPSAiJHtQTn0tcnVuLXBhcnRzIgotUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKLQotQUxURVJOQVRJVkVfUFJJT1JJVFk9IjMwIgotQUxURVJOQVRJVkVfJHtQTn0gPSAiYWRkLXNoZWxsIGluc3RhbGxrZXJuZWwgcmVtb3ZlLXNoZWxsIHNhdmVsb2cgdGVtcGZpbGUgd2hpY2giCi1BTFRFUk5BVElWRV8ke1BOfS1ydW4tcGFydHMgPSAicnVuLXBhcnRzIgotCi1BTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAid2hpY2guMSIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVt3aGljaC4xXSA9ICIke21hbmRpcn0vbWFuMS93aGljaC4xIgotCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbYWRkLXNoZWxsXT0iJHtzYmluZGlyfS9hZGQtc2hlbGwiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbaW5zdGFsbGtlcm5lbF09IiR7c2JpbmRpcn0vaW5zdGFsbGtlcm5lbCIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtyZW1vdmUtc2hlbGxdPSIke3NiaW5kaXJ9L3JlbW92ZS1zaGVsbCIKLUFMVEVSTkFUSVZFX0xJTktfTkFNRVtydW4tcGFydHNdPSIke2Jhc2VfYmluZGlyfS9ydW4tcGFydHMiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbc2F2ZWxvZ109IiR7YmluZGlyfS9zYXZlbG9nIgotQUxURVJOQVRJVkVfTElOS19OQU1FW3RlbXBmaWxlXT0iJHtiYXNlX2JpbmRpcn0vdGVtcGZpbGUiCi1BTFRFUk5BVElWRV9MSU5LX05BTUVbd2hpY2hdPSIke2JpbmRpcn0vd2hpY2giCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZmlsZXMvcHRlc3QucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9maWxlcy9wdGVzdC5wYXRjaAppbmRleCA2NTIzNmZiLi5iOTQ2MWJlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9maWxlcy9wdGVzdC5wYXRjaAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9maWxlcy9wdGVzdC5wYXRjaApAQCAtMSwzMCArMSw0MSBAQAotQWRkIGluc3RhbGwtcHRlc3QgcnVsZXMuCitGcm9tIDRlNGI3MGE0YTNkY2YxZmRiZWU5ZTY4YmVkM2I2MmY0MmIxOTdhM2EgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb3NlcCBQdWlnZGVtb250IDxqb3NlcC5wdWlnZGVtb250QGVuZWEuY29tPgorRGF0ZTogU3VuLCA0IE1heSAyMDE0IDE2OjAyOjA3ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZCBpbnN0YWxsLXB0ZXN0IHJ1bGVzLgogCiBTaWduZWQtb2ZmLWJ5OiBKb3NlcCBQdWlnZGVtb250IDxqb3NlcC5wdWlnZGVtb250QGVuZWEuY29tPgogU2lnbmVkLW9mZi1ieTogTWF4aW4gQi4gSm9obiA8bWF4aW4uam9obkBlbmVhLmNvbT4KIFVwc3RyZWFtLVN0YXR1czogUGVuZGluZwogCi1kaWZmIC11ciBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KLS0tLSBhL01ha2VmaWxlLmFtCTIwMTEtMDgtMTYgMTA6MTM6MTAuMDAwMDAwMDAwICswMjAwCi0rKysgYi9NYWtlZmlsZS5hbQkyMDEzLTA0LTEyIDE4OjAyOjE2LjQ3MzcxNTg3MyArMDIwMAotQEAgLTMxLDMgKzMxLDggQEAKLSAJZD1gZGF0ZSAnKyVkLyVtLyVZJ2A7IFwKLSAJc2VkICdzfC9cKkBESVNUX0RBVEVAXCovfCInIiQkZCInInwnICQoc3JjZGlyKS9zcmMvdmVyc2lvbi5jID4gXAotIAkJJChkaXN0ZGlyKS9zcmMvdmVyc2lvbi5jCistLS0KKyBNYWtlZmlsZS5hbSAgICAgICB8ICA1ICsrKysrCisgdGVzdHMvTWFrZWZpbGUuYW0gfCAxMiArKysrKysrKysrKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IDRjZGM3MzQuLjI0Yjk5ZjAgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC00NSwzICs0NSw4IEBAIENoYW5nZUxvZzoKKyAgICAgICAgICAgICAgICAgYXdrIC1mICQodG9wX3NyY2RpcikvZ2l0MmNoZy5hd2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgLXYgYXBwZW5kPSQodG9wX3NyY2RpcikvJChwcmV2X2NoYW5nZV9sb2cpID4gQ2hhbmdlTG9nOyBcCisgICAgICAgICBmaQogKwogK2luc3RhbGwtcHRlc3Q6CiArCUBmb3Igc3ViZGlyIGluICQoU1VCRElSUyk7IGRvIFwKICsJCSQoTUFLRSkgLUMgJCRzdWJkaXIgREVTVERJUj0kKERFU1RESVIpLyQkc3ViZGlyICRAOyBcCiArCWRvbmUKLWRpZmYgLXVyIGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQotLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0JMjAxMS0xMS0xMSAxOTozOTo0Mi4wMDAwMDAwMDAgKzAxMDAKLSsrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCTIwMTMtMDQtMTIgMTg6MzA6NTcuMDY2MzAxMDM3ICswMjAwCi1AQCAtMTMyLDQgKzEzMiwxNCBAQAorZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IDNkYmI1ODAuLjIyZmZjNDQgMTAwNjQ0CistLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0xMzAsNCArMTMwLDE0IEBAIGR0ZmV0Y2hfTERBREQgPSAuLi9zcmMvbGliZ2RibS5sYSAuLi9jb21wYXQvbGliZ2RibV9jb21wYXQubGEKICBkdGRlbF9MREFERCA9IC4uL3NyYy9saWJnZGJtLmxhIC4uL2NvbXBhdC9saWJnZGJtX2NvbXBhdC5sYQogIGRfY3JlYXRfY2VfTERBREQgPSAuLi9zcmMvbGliZ2RibS5sYSAuLi9jb21wYXQvbGliZ2RibV9jb21wYXQubGEKICAKKy0KICtidWlsZHRlc3RzOiAkKGNoZWNrX1BST0dSQU1TKSAkKFRFU1RTVUlURSkKLSAKKysKICtpbnN0YWxsLXB0ZXN0OiAkKGNoZWNrX1BST0dSQU1TKSAkKFRFU1RTVUlURSkKICsJQCQoSU5TVEFMTCkgLWQgJChERVNURElSKQogKwlAZm9yIGZpbGUgaW4gJF47IGRvIFwKQEAgLTM0LDMgKzQ1LDYgQEAKICsJCQkkKElOU1RBTExfUFJPR1JBTSkgJCRmaWxlICQoREVTVERJUikgOyBcCiArCQlmaSBcCiArCWRvbmUKKy0tIAorMi4xMS4wCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm1fMS4xMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm1fMS4xMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM4MDA3My4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtXzEuMTIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi1TVU1NQVJZID0gIktleS92YWx1ZSBkYXRhYmFzZSBsaWJyYXJ5IHdpdGggZXh0ZW5zaWJsZSBoYXNoaW5nIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dkYm0vIgotU0VDVElPTiA9ICJsaWJzIgotTElDRU5TRSA9ICJHUEx2MyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI0MWRhMWI5ZmU0MmU2NDJjYmIyYzI0ZDVlMGM0ZDI0IgotCi0KLVNSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9nZGJtL2dkYm0tJHtQVn0udGFyLmd6IFwKLSAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCi0gICAgICAgICAgIGZpbGU6Ly9wdGVzdC5wYXRjaCBcCi0gICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiOWNlOTZmZjRjOTllNzQyOTVlYTE5MDQwOTMxYzhmYjkiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDk3YjIxNjZlZTg2N2ZkNmNhNWMwMjJlZmVlODA3MDJkNmYzMGRkNjZhZjBlMDNlZDA5MjI4NWMzYWY5YmNlYSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIGxpYl9wYWNrYWdlIHB0ZXN0Ci0KLSMgTmVlZGVkIGZvciBkYm0gcHl0aG9uIG1vZHVsZQotRVhUUkFfT0VDT05GID0gIi1lbmFibGUtbGliZ2RibS1jb21wYXQiCi0KLSMgU3RvcCBwcmVzZW5jZSBvZiBkYm0vbmJkbSBvbiB0aGUgaG9zdCBjb250YW1pbmF0aW5nIGJ1aWxkcwotQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X2xpYl9uZGJtX21haW49bm8gYWNfY3ZfbGliX2RibV9tYWluPW5vIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCi0KLWRvX2luc3RhbGxfYXBwZW5kICgpIHsKLSAgICAjIENyZWF0ZSBhIHN5bWxpbmsgdG8gbmRibS5oIGFuZCBnZGJtLmggaW4gaW5jbHVkZS9nZGJtIHRvIGxldCBvdGhlciBwYWNrYWdlcyB0byBmaW5kCi0gICAgIyB0aGVzZSBoZWFkZXJzCi0gICAgaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfS9nZGJtCi0gICAgbG4gLXNmIC4uL25kYm0uaCAke0R9LyR7aW5jbHVkZWRpcn0vZ2RibS9uZGJtLmgKLSAgICBsbiAtc2YgLi4vZ2RibS5oICR7RH0vJHtpbmNsdWRlZGlyfS9nZGJtL2dkYm0uaAotfQotCi1SREVQRU5EU18ke1BOfS1wdGVzdCArPSAiZGlmZnV0aWxzIgotCi1kb19jb21waWxlX3B0ZXN0KCkgewotICAgIG9lX3J1bm1ha2UgLUMgdGVzdHMgYnVpbGR0ZXN0cwotfQotCi1QQUNLQUdFUyA9KyAiJHtQTn0tY29tcGF0IFwKLSAgICAgICAgICAgICIKLUZJTEVTXyR7UE59LWNvbXBhdCA9ICIke2xpYmRpcn0vbGliZ2RibV9jb21wYXQke1NPTElCU30gXAotICAgICAgICAgICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibV8xLjEzLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibV8xLjEzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYmUxNDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtXzEuMTMuYmIKQEAgLTAsMCArMSw0MyBAQAorU1VNTUFSWSA9ICJLZXkvdmFsdWUgZGF0YWJhc2UgbGlicmFyeSB3aXRoIGV4dGVuc2libGUgaGFzaGluZyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nZGJtLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yNDFkYTFiOWZlNDJlNjQyY2JiMmMyNGQ1ZTBjNGQyNCIKKworCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ2RibS9nZGJtLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vcHRlc3QucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjg5MjlkY2RhMmE4ZGUzZmQyMzY3YmRiZjY2NzY5Mzc2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlkMjUyY2JkN2Q3OTNmN2IxMmJjY2VhZGRkYTk4ZDI1N2MxNGY0ZDE4OTBkODUxYzM4NmMzNzIwNzAwMGEyNTMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyBsaWJfcGFja2FnZSBwdGVzdAorCisjIE5lZWRlZCBmb3IgZGJtIHB5dGhvbiBtb2R1bGUKK0VYVFJBX09FQ09ORiA9ICItZW5hYmxlLWxpYmdkYm0tY29tcGF0IgorCisjIFN0b3AgcHJlc2VuY2Ugb2YgZGJtL25iZG0gb24gdGhlIGhvc3QgY29udGFtaW5hdGluZyBidWlsZHMKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9saWJfbmRibV9tYWluPW5vIGFjX2N2X2xpYl9kYm1fbWFpbj1ubyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgIyBDcmVhdGUgYSBzeW1saW5rIHRvIG5kYm0uaCBhbmQgZ2RibS5oIGluIGluY2x1ZGUvZ2RibSB0byBsZXQgb3RoZXIgcGFja2FnZXMgdG8gZmluZAorICAgICMgdGhlc2UgaGVhZGVycworICAgIGluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0vZ2RibQorICAgIGxuIC1zZiAuLi9uZGJtLmggJHtEfS8ke2luY2x1ZGVkaXJ9L2dkYm0vbmRibS5oCisgICAgbG4gLXNmIC4uL2dkYm0uaCAke0R9LyR7aW5jbHVkZWRpcn0vZ2RibS9nZGJtLmgKK30KKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gImRpZmZ1dGlscyIKKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKyAgICBvZV9ydW5tYWtlIC1DIHRlc3RzIGJ1aWxkdGVzdHMKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LWNvbXBhdCBcCisgICAgICAgICAgICAiCitGSUxFU18ke1BOfS1jb21wYXQgPSAiJHtsaWJkaXJ9L2xpYmdkYm1fY29tcGF0JHtTT0xJQlN9IFwKKyAgICAgICAgICAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wXzYuMS4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXBfNi4xLjIuYmIKaW5kZXggNWU2NTA3NS4uYjAwODcxMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXBfNi4xLjIuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXBfNi4xLjIuYmIKQEAgLTI1LDggKzI1LDExIEBACiBQQUNLQUdFUyA9KyAibGliZ21weHgiCiBGSUxFU19saWJnbXB4eCA9ICIke2xpYmRpcn0vbGliZ21weHgke1NPTElCU30iCiAKLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCgpIHsKLSAgICAgICAgc2VkIC1pICJzfC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9fHxnIiAke0R9JHtpbmNsdWRlZGlyfS9nbXAuaAorZG9faW5zdGFsbF9wcmVwZW5kX2NsYXNzLXRhcmdldCgpIHsKKyAgICAgICAgc2VkIC1pIFwKKyAgICAgICAgLWUgInN8LS1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH18fGciIFwKKyAgICAgICAgLWUgInN8JHtERUJVR19QUkVGSVhfTUFQfXx8ZyIgXAorICAgICAgICAgJHtCfS9nbXAuaAogfQogCiBTU1RBVEVfU0NBTl9GSUxFUyArPSAiZ21wLmgiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGcvMDAwMS1Vc2UtcGtnLWNvbmZpZy10by1maW5kLXB0aC1pbnN0ZWFkLW9mLXB0aC1jb25maWcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGcvMDAwMS1Vc2UtcGtnLWNvbmZpZy10by1maW5kLXB0aC1pbnN0ZWFkLW9mLXB0aC1jb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM5YzAyMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy8wMDAxLVVzZS1wa2ctY29uZmlnLXRvLWZpbmQtcHRoLWluc3RlYWQtb2YtcHRoLWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDEwNSBAQAorRnJvbSA1OWEzYzc2ZDQwMTZmZmM2MTVmMWM0NTE4NGY0YzY4MjAwNjFkNjljIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+CitEYXRlOiBXZWQsIDE2IEF1ZyAyMDE3IDExOjE0OjEyICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMS80XSBVc2UgcGtnLWNvbmZpZyB0byBmaW5kIHB0aCBpbnN0ZWFkIG9mIHB0aC1jb25maWcuCisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkCitbbm90IHN1Ym1pdHRlZCBidXQgdGhleSd2ZSBiZWVuIGNsZWFyIHRoZXkgZG9uJ3Qgd2FudCBhIHBrZy1jb25maWcKK2RlcGVuZGVuY3ldCisKK1JQIDIwMTQvNS8yMgorCitTaWduZWQtb2ZmLWJ5OiBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4KKworUmViYXNlIHRvIDIuMS4yMworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgbTQvZ251cGctcHRoLm00IHwgNTMgKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA0NSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL200L2dudXBnLXB0aC5tNCBiL200L2dudXBnLXB0aC5tNAoraW5kZXggNmRjOWUwZS4uNTg5MjUzMSAxMDA2NDQKKy0tLSBhL200L2dudXBnLXB0aC5tNAorKysrIGIvbTQvZ251cGctcHRoLm00CitAQCAtMTcsMzMgKzE3LDkgQEAgZG5sIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICMgVGFrZW4gYW5kIG1vZGlmaWVkIGZyb20gdGhlIG00IG1hY3JvcyB3aGljaCBjb21lIHdpdGggUHRoLgorIEFDX0RFRlVOKFtHTlVQR19QVEhfVkVSU0lPTl9DSEVDS10sCisgICBbCistICAgIF9wdGhfdmVyc2lvbj1gJFBUSF9DT05GSUcgLS12ZXJzaW9uIHwgYXdrICdOUj09MSB7cHJpbnQgWyRdM30nYAorICAgICBfcmVxX3ZlcnNpb249ImlmZWxzZShbJDFdLCwxLjIuMCwkMSkiCisrICAgIFBLR19DSEVDS19NT0RVTEVTKFBUSCwgW3B0aCA+PSAkX3JlcV92ZXJzaW9uXSwgW2hhdmVfcHRoPXllc10sIFtoYXZlX3B0aD1ub10pCisgCistICAgIEFDX01TR19DSEVDS0lORyhmb3IgUFRIIC0gdmVyc2lvbiA+PSAkX3JlcV92ZXJzaW9uKQorLSAgICBmb3IgX3ZhciBpbiBfcHRoX3ZlcnNpb24gX3JlcV92ZXJzaW9uOyBkbworLSAgICAgICAgZXZhbCAiX3ZhbD1cIlwkJHtfdmFyfVwiIgorLSAgICAgICAgX21ham9yPWBlY2hvICRfdmFsIHwgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXChbW2FiLl1dXClcKFtbMC05XV0qXCkvXDEvJ2AKKy0gICAgICAgIF9taW5vcj1gZWNobyAkX3ZhbCB8IHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwoW1thYi5dXVwpXChbWzAtOV1dKlwpL1wyLydgCistICAgICAgICBfcnR5cGU9YGVjaG8gJF92YWwgfCBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcKFtbYWIuXV1cKVwoW1swLTldXSpcKS9cMy8nYAorLSAgICAgICAgX21pY3JvPWBlY2hvICRfdmFsIHwgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXChbW2FiLl1dXClcKFtbMC05XV0qXCkvXDQvJ2AKKy0gICAgICAgIGNhc2UgJF9ydHlwZSBpbgorLSAgICAgICAgICAgICJhIiApIF9ydHlwZT0wIDs7CistICAgICAgICAgICAgImIiICkgX3J0eXBlPTEgOzsKKy0gICAgICAgICAgICAiLiIgKSBfcnR5cGU9MiA7OworLSAgICAgICAgZXNhYworLSAgICAgICAgX2hleD1gZWNobyBkdW1teSB8IGF3ayAneyBwcmludGYoIiVkJTAyZCUxZCUwMmQiLCBtYWpvciwgbWlub3IsIHJ0eXBlLCBtaWNybyk7IH0nIFwKKy0gICAgICAgICAgICAgICJtYWpvcj0kX21ham9yIiAibWlub3I9JF9taW5vciIgInJ0eXBlPSRfcnR5cGUiICJtaWNybz0kX21pY3JvImAKKy0gICAgICAgIGV2YWwgIiR7X3Zhcn1faGV4PVwiXCRfaGV4XCIiCistICAgIGRvbmUKKy0gICAgaGF2ZV9wdGg9bm8KKy0gICAgaWYgdGVzdCAiLiRfcHRoX3ZlcnNpb25faGV4IiAhPSAuOyB0aGVuCistICAgICAgICBpZiB0ZXN0ICIuJF9yZXFfdmVyc2lvbl9oZXgiICE9IC47IHRoZW4KKy0gICAgICAgICAgICBpZiB0ZXN0ICRfcHRoX3ZlcnNpb25faGV4IC1nZSAkX3JlcV92ZXJzaW9uX2hleDsgdGhlbgorLSAgICAgICAgICAgICAgICBoYXZlX3B0aD15ZXMKKy0gICAgICAgICAgICBmaQorLSAgICAgICAgZmkKKy0gICAgZmkKKyAgICAgaWYgdGVzdCAkaGF2ZV9wdGggPSB5ZXM7IHRoZW4KKyAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBQVEggaW5zdGFsbGF0aW9uIGlzIHNhbmVdKQorQEAgLTUxLDkgKzI3LDkgQEAgQUNfREVGVU4oW0dOVVBHX1BUSF9WRVJTSU9OX0NIRUNLXSwKKyAgICAgICAgICBfZ251cGdfcHRoX3NhdmVfY2ZsYWdzPSRDRkxBR1MKKyAgICAgICAgICBfZ251cGdfcHRoX3NhdmVfbGRmbGFncz0kTERGTEFHUworICAgICAgICAgIF9nbnVwZ19wdGhfc2F2ZV9saWJzPSRMSUJTCistICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIGAkUFRIX0NPTkZJRyAtLWNmbGFnc2AiCistICAgICAgICAgTERGTEFHUz0iJExERkxBR1MgYCRQVEhfQ09ORklHIC0tbGRmbGFnc2AiCistICAgICAgICAgTElCUz0iJExJQlMgYCRQVEhfQ09ORklHIC0tbGlicyAtLWFsbGAiCisrICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRQVEhfQ0ZMQUdTIgorKyAgICAgICAgIExERkxBR1M9IiRMREZMQUdTICRQVEhfTERGTEFHUyIKKysgICAgICAgICBMSUJTPSIkTElCUyAkUFRIX0xJQlMiCisgICAgICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPHB0aC5oPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbIHB0aF9pbml0ICgpO11dKV0sCitAQCAtODAsMjYgKzU2LDEzIEBAIEFDX0RFRlVOKFtHTlVQR19QVEhfVkVSU0lPTl9DSEVDS10sCisgIyBQVEhfQ0xGQUdTIGFuZCBQVEhfTElCUyBhcmUgQVNfU1VCU1QuCisgIworIEFDX0RFRlVOKFtHTlVQR19QQVRIX1BUSF0sCistWyBBQ19BUkdfV0lUSChwdGgtcHJlZml4LAorLSAgICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLXB0aC1wcmVmaXg9UEZYXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJlZml4IHdoZXJlIEdOVSBQdGggaXMgaW5zdGFsbGVkIChvcHRpb25hbCldKSwKKy0gICAgIHB0aF9jb25maWdfcHJlZml4PSIkd2l0aHZhbCIsIHB0aF9jb25maWdfcHJlZml4PSIiKQorLSAgaWYgdGVzdCB4JHB0aF9jb25maWdfcHJlZml4ICE9IHggOyB0aGVuCistICAgICBQVEhfQ09ORklHPSIkcHRoX2NvbmZpZ19wcmVmaXgvYmluL3B0aC1jb25maWciCistICBmaQorLSAgQUNfUEFUSF9QUk9HKFBUSF9DT05GSUcsIHB0aC1jb25maWcsIG5vKQorK1sKKyAgIHRtcD1pZmVsc2UoWyQxXSwgLDEuMy43LCQxKQorLSAgaWYgdGVzdCAiJFBUSF9DT05GSUciICE9ICJubyI7IHRoZW4KKy0gICAgR05VUEdfUFRIX1ZFUlNJT05fQ0hFQ0soJHRtcCkKKy0gICAgaWYgdGVzdCAkaGF2ZV9wdGggPSB5ZXM7IHRoZW4gICAgICAKKy0gICAgICAgUFRIX0NGTEFHUz1gJFBUSF9DT05GSUcgLS1jZmxhZ3NgCistICAgICAgIFBUSF9MSUJTPWAkUFRIX0NPTkZJRyAtLWxkZmxhZ3NgCistICAgICAgIFBUSF9MSUJTPSIkUFRIX0xJQlMgYCRQVEhfQ09ORklHIC0tbGlicyAtLWFsbGAiCistICAgICAgIEFDX0RFRklORShIQVZFX1BUSCwgMSwKKysgIEdOVVBHX1BUSF9WRVJTSU9OX0NIRUNLKCR0bXApCisrICBpZiB0ZXN0ICRoYXZlX3B0aCA9IHllczsgdGhlbgorKyAgICAgIEFDX0RFRklORShIQVZFX1BUSCwgMSwKKyAgICAgICAgICAgICAgICAgW0RlZmluZWQgaWYgdGhlIEdOVSBQdGggaXMgYXZhaWxhYmxlXSkKKy0gICAgZmkKKyAgIGZpCisgICBBQ19TVUJTVChQVEhfQ0ZMQUdTKQorICAgQUNfU1VCU1QoUFRIX0xJQlMpCisgXSkKKy0KKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGcvMDAwMi11c2UtcGtnY29uZmlnLWluc3RlYWQtb2YtbnB0aC1jb25maWcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGcvMDAwMi11c2UtcGtnY29uZmlnLWluc3RlYWQtb2YtbnB0aC1jb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ4NmU1YwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy8wMDAyLXVzZS1wa2djb25maWctaW5zdGVhZC1vZi1ucHRoLWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDg1IEBACitGcm9tIDUzYzJhZWMyZTEzZjRlMmQwOWJlNzE0ODg2OWM4NjJmMDdkZmRkNGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitEYXRlOiBXZWQsIDE2IEF1ZyAyMDE3IDExOjE2OjMwICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMi80XSB1c2UgcGtnY29uZmlnIGluc3RlYWQgb2YgbnB0aCBjb25maWcKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvcGVuZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworUmViYXNlIHRvIDIuMS4yMworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgbTQvbnB0aC5tNCB8IDM0ICsrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL200L25wdGgubTQgYi9tNC9ucHRoLm00CitpbmRleCAxN2MyNjQ0Li4xNWE5MzFiIDEwMDY0NAorLS0tIGEvbTQvbnB0aC5tNAorKysrIGIvbTQvbnB0aC5tNAorQEAgLTE3LDEwICsxNywxMCBAQCBBQ19ERUZVTihbX0FNX1BBVEhfTlBUSF9DT05GSUddLAorICAgaWYgdGVzdCAieCRucHRoX2NvbmZpZ19wcmVmaXgiICE9IHggOyB0aGVuCisgICAgICAgTlBUSF9DT05GSUc9IiRucHRoX2NvbmZpZ19wcmVmaXgvYmluL25wdGgtY29uZmlnIgorICAgZmkKKy0gIEFDX1BBVEhfUFJPRyhOUFRIX0NPTkZJRywgbnB0aC1jb25maWcsIG5vKQorKyAgQUNfUEFUSF9QUk9HKFBLR0NPTkZJRywgcGtnLWNvbmZpZywgbm8pCisgCistICBpZiB0ZXN0ICIkTlBUSF9DT05GSUciICE9ICJubyIgOyB0aGVuCistICAgIG5wdGhfdmVyc2lvbj1gJE5QVEhfQ09ORklHIC0tdmVyc2lvbmAKKysgIGlmIHRlc3QgIiRQS0dDT05GSUciICE9ICJubyIgOyB0aGVuCisrICAgIG5wdGhfdmVyc2lvbj1gJFBLR0NPTkZJRyAtLW1vZHZlcnNpb24gbnB0aGAKKyAgIGZpCisgICBucHRoX3ZlcnNpb25fbWFqb3I9YGVjaG8gJG5wdGhfdmVyc2lvbiB8IFwKKyAgICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMS8nYAorQEAgLTQ1LDcgKzQ1LDcgQEAgQUNfREVGVU4oW0FNX1BBVEhfTlBUSF0sCisgCisgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIE5QVEggLSB2ZXJzaW9uID49ICRtaW5fbnB0aF92ZXJzaW9uKQorICAgb2s9bm8KKy0gIGlmIHRlc3QgIiROUFRIX0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKysgIGlmIHRlc3QgIiRQS0dDT05GSUciICE9ICJubyIgOyB0aGVuCisgICAgIHJlcV9tYWpvcj1gZWNobyAkbWluX25wdGhfdmVyc2lvbiB8IFwKKyAgICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDEvJ2AKKyAgICAgcmVxX21pbm9yPWBlY2hvICRtaW5fbnB0aF92ZXJzaW9uIHwgXAorQEAgLTY2LDI4ICs2Niw5IEBAIEFDX0RFRlVOKFtBTV9QQVRIX05QVEhdLAorICAgZmkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCisgICAgIEFDX01TR19SRVNVTFQoW3llcyAoJG5wdGhfdmVyc2lvbildKQorLSAgZWxzZQorLSAgICBBQ19NU0dfUkVTVUxUKG5vKQorLSAgZmkKKy0gIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgICAjIElmIHdlIGhhdmUgYSByZWNlbnQgTlBUSCwgd2Ugc2hvdWxkIGFsc28gY2hlY2sgdGhhdCB0aGUKKy0gICAgICMgQVBJIGlzIGNvbXBhdGlibGUuCistICAgICBpZiB0ZXN0ICIkcmVxX25wdGhfYXBpIiAtZ3QgMCA7IHRoZW4KKy0gICAgICAgIHRtcD1gJE5QVEhfQ09ORklHIC0tYXBpLXZlcnNpb24gMj4vZGV2L251bGwgfHwgZWNobyAwYAorLSAgICAgICAgaWYgdGVzdCAiJHRtcCIgLWd0IDAgOyB0aGVuCistICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW05QVEggQVBJIHZlcnNpb25dKQorLSAgICAgICAgICAgaWYgdGVzdCAiJHJlcV9ucHRoX2FwaSIgLWVxICIkdG1wIiA7IHRoZW4KKy0gICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChbb2theV0pCistICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgIG9rPW5vCistICAgICAgICAgICAgIEFDX01TR19SRVNVTFQoW2RvZXMgbm90IG1hdGNoLiB3YW50PSRyZXFfbnB0aF9hcGkgZ290PSR0bXBdKQorLSAgICAgICAgICAgZmkKKy0gICAgICAgIGZpCistICAgICBmaQorLSAgZmkKKy0gIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIE5QVEhfQ0ZMQUdTPWAkTlBUSF9DT05GSUcgLS1jZmxhZ3NgCistICAgIE5QVEhfTElCUz1gJE5QVEhfQ09ORklHIC0tbGlic2AKKysgICAgTlBUSF9DRkxBR1M9YCRQS0dDT05GSUcgLS1jZmxhZ3MgbnB0aGAKKysgICAgTlBUSF9MSUJTPWAkUEtHQ09ORklHIC0tbGlicyBucHRoYAorKyAgICBBQ19NU0dfV0FSTihbW0dPVCBIRVJFIC0gJE5QVEhfTElCUyBdXSkKKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKKyAgICAgbnB0aF9jb25maWdfaG9zdD1gJE5QVEhfQ09ORklHIC0taG9zdCAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vbmVgCisgICAgIGlmIHRlc3QgeCIkbnB0aF9jb25maWdfaG9zdCIgIT0geG5vbmUgOyB0aGVuCitAQCAtMTAzLDYgKzg0LDcgQEAgQUNfREVGVU4oW0FNX1BBVEhfTlBUSF0sCisgICAgICAgZmkKKyAgICAgZmkKKyAgIGVsc2UKKysgICAgQUNfTVNHX1JFU1VMVChubykKKyAgICAgTlBUSF9DRkxBR1M9IiIKKyAgICAgTlBUSF9MSUJTPSIiCisgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCistLSAKKzEuOC4zLjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLzAwMDMtZGlybW5nci11c2VzLWxpYmdwZy1lcnJvci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy8wMDAzLWRpcm1uZ3ItdXNlcy1saWJncGctZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U3OThlZgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy8wMDAzLWRpcm1uZ3ItdXNlcy1saWJncGctZXJyb3IucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA5YzM4NThmZmRhNjI0NmJmOWUxZTZhZWViOTIwNTMyYTU2YjE5NDA4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorRGF0ZTogV2VkLCAxNiBBdWcgMjAxNyAxMToxODowMSArMDgwMAorU3ViamVjdDogW1BBVENIIDMvNF0gZGlybW5nciB1c2VzIGxpYmdwZyBlcnJvcgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworUmViYXNlIHRvIDIuMS4yMworCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBkaXJtbmdyL01ha2VmaWxlLmFtIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9kaXJtbmdyL01ha2VmaWxlLmFtIGIvZGlybW5nci9NYWtlZmlsZS5hbQoraW5kZXggYjQwNDE2NS4uZDNmOTE2ZSAxMDA2NDQKKy0tLSBhL2Rpcm1uZ3IvTWFrZWZpbGUuYW0KKysrKyBiL2Rpcm1uZ3IvTWFrZWZpbGUuYW0KK0BAIC04Miw3ICs4Miw4IEBAIGVuZGlmCisgZGlybW5ncl9MREFERCA9ICQobGliY29tbW9ucHRoKSBcCisgICAgICAgICAkKEROU0xJQlMpICQoTElCQVNTVUFOX0xJQlMpIFwKKyAJJChMSUJHQ1JZUFRfTElCUykgJChLU0JBX0xJQlMpICQoTlBUSF9MSUJTKSBcCistCSQoTlRCVExTX0xJQlMpICQoTElCR05VVExTX0xJQlMpICQoTElCSU5UTCkgJChMSUJJQ09OVikKKysJJChOVEJUTFNfTElCUykgJChMSUJHTlVUTFNfTElCUykgJChMSUJJTlRMKSAkKExJQklDT05WKSBcCisrCSQoR1BHX0VSUk9SX0xJQlMpCisgaWYgVVNFX0xEQVAKKyBkaXJtbmdyX0xEQUREICs9ICQobGRhcGxpYnMpCisgZW5kaWYKKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGcvMDAwNC1hdXRvZ2VuLnNoLWZpeC1maW5kLXZlcnNpb24tZm9yLWJldGEtY2hlY2tpbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGcvMDAwNC1hdXRvZ2VuLnNoLWZpeC1maW5kLXZlcnNpb24tZm9yLWJldGEtY2hlY2tpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNkODU4MgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy8wMDA0LWF1dG9nZW4uc2gtZml4LWZpbmQtdmVyc2lvbi1mb3ItYmV0YS1jaGVja2luZy5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIDkxNGFlNGEzZjc1MjlmYjA2OTQ2N2JmMGRlZDU3ZGQyNGVlMmU3NjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMTYgQXVnIDIwMTcgMTE6MjM6MjIgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCA0LzRdIGF1dG9nZW4uc2g6IGZpeCBmaW5kLXZlcnNpb24gZm9yIGJldGEgY2hlY2tpbmcKKworZmluZC12ZXJzaW9uIGFsd2F5cyBhc3N1bWVzIHRoYXQgZ251cGcgaXMgYmV0YSBpZiBhdXRvZ2VuLnNoIGlzIHJ1bgorb3V0IG9mIGdpdC1yZXBvLiBUaGlzIGRvZXNuJ3Qgd29yayBmb3IgdXNlcnMgd2hvbSBqdXN0IHRha2UgcmVsZWFzZQordGFyYmFsbCBhbmQgcmUtcnVuIGF1dG9jb25mIGluIHRoZWlyIGxvY2FsIGJ1aWxkIGRpci4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorCitSZWJhc2UgdG8gMi4xLjIzCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBhdXRvZ2VuLnNoIHwgMSAtCisgMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2F1dG9nZW4uc2ggYi9hdXRvZ2VuLnNoCitpbmRleCBlNWJhNWJmLi4wNWUwZTExIDEwMDc1NQorLS0tIGEvYXV0b2dlbi5zaAorKysrIGIvYXV0b2dlbi5zaAorQEAgLTI0NSw3ICsyNDUsNiBAQCBpZiBbICIkbXlob3N0IiA9ICJmaW5kLXZlcnNpb24iIF07IHRoZW4KKyAgICAgICBydmQ9JCgoMHgkKGVjaG8gJHtyZXZ9IHwgZGQgYnM9MSBjb3VudD00IDI+L2Rldi9udWxsKSkpCisgICAgIGVsc2UKKyAgICAgICBpbmdpdD1ubworLSAgICAgIGJldGE9eWVzCisgICAgICAgdG1wPSItdW5rbm93biIKKyAgICAgICByZXY9IjAwMDAwMDAiCisgICAgICAgcnZkPSIwIgorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy9hdXRvZ2VuLnNoLWZpeC1maW5kLXZlcnNpb24tZm9yLWJldGEtY2hlY2tpbmcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGcvYXV0b2dlbi5zaC1maXgtZmluZC12ZXJzaW9uLWZvci1iZXRhLWNoZWNraW5nLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjQxYmMzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy9hdXRvZ2VuLnNoLWZpeC1maW5kLXZlcnNpb24tZm9yLWJldGEtY2hlY2tpbmcucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1Gcm9tIDcxN2Y5OTRiZTI0NjZkMzc4ZTY2MTFhNDczOWM2MDZkYjZkMGRjNDYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KLURhdGU6IFN1biwgMjUgT2N0IDIwMTUgMjI6NDQ6NDcgLTA0MDAKLVN1YmplY3Q6IFtQQVRDSF0gYXV0b2dlbi5zaDogZml4IGZpbmQtdmVyc2lvbiBmb3IgYmV0YSBjaGVja2luZwotCi1maW5kLXZlcnNpb24gYWx3YXlzIGFzc3VtZXMgdGhhdCBnbnVwZyBpcyBiZXRhIGlmIGF1dG9nZW4uc2ggaXMgcnVuCi1vdXQgb2YgZ2l0LXJlcG8uIFRoaXMgZG9lc24ndCB3b3JrIGZvciB1c2VycyB3aG9tIGp1c3QgdGFrZSByZWxlYXNlCi10YXJiYWxsIGFuZCByZS1ydW4gYXV0b2NvbmYgaW4gdGhlaXIgbG9jYWwgYnVpbGQgZGlyLgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+Ci0tLS0KLSBhdXRvZ2VuLnNoIHwgMSAtCi0gMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2F1dG9nZW4uc2ggYi9hdXRvZ2VuLnNoCi1pbmRleCA3ZWZmZDU2Li5kNjczNDMyIDEwMDc1NQotLS0tIGEvYXV0b2dlbi5zaAotKysrIGIvYXV0b2dlbi5zaAotQEAgLTIyOCw3ICsyMjgsNiBAQCBpZiBbICIkbXlob3N0IiA9ICJmaW5kLXZlcnNpb24iIF07IHRoZW4KLSAgICAgICBydmQ9JCgoMHgkKGVjaG8gJHtyZXZ9IHwgaGVhZCAtYyA0KSkpCi0gICAgIGVsc2UKLSAgICAgICBpbmdpdD1ubwotLSAgICAgIGJldGE9eWVzCi0gICAgICAgdG1wPSItdW5rbm93biIKLSAgICAgICByZXY9IjAwMDAwMDAiCi0gICAgICAgcnZkPSIwIgotLS0gCi0xLjkuMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGcvZGlybW5nci11c2VzLWxpYmdwZy1lcnJvci5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy9kaXJtbmdyLXVzZXMtbGliZ3BnLWVycm9yLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWYxOTU1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy9kaXJtbmdyLXVzZXMtbGliZ3BnLWVycm9yLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi1TaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+Ci1JbmRleDogZ251cGctMi4xLjAvZGlybW5nci9NYWtlZmlsZS5hbQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdudXBnLTIuMS4wLm9yaWcvZGlybW5nci9NYWtlZmlsZS5hbQotKysrIGdudXBnLTIuMS4wL2Rpcm1uZ3IvTWFrZWZpbGUuYW0KLUBAIC03OCw3ICs3OCw4IEBAIGVuZGlmCi0gZGlybW5ncl9MREFERCA9ICQobGliY29tbW9udGxzbnB0aCkgJChsaWJjb21tb25wdGgpIFwKLSAgICAgICAgICQoRE5TTElCUykgJChMSUJBU1NVQU5fTElCUykgXAotIAkkKExJQkdDUllQVF9MSUJTKSAkKEtTQkFfTElCUykgJChOUFRIX0xJQlMpIFwKLS0JJChOVEJUTFNfTElCUykgJChMSUJHTlVUTFNfTElCUykgJChMSUJJTlRMKSAkKExJQklDT05WKQotKwkkKE5UQlRMU19MSUJTKSAkKExJQkdOVVRMU19MSUJTKSAkKExJQklOVEwpICQoTElCSUNPTlYpIFwKLSsJJChHUEdfRVJST1JfTElCUykKLSBpZiBVU0VfTERBUAotIGRpcm1uZ3JfTERBREQgKz0gJChsZGFwbGlicykKLSBlbmRpZgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnL3BrZ2NvbmZpZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy9wa2djb25maWcucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NTg2MDMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnL3BrZ2NvbmZpZy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLVVzZSBwa2ctY29uZmlnIHRvIGZpbmQgcHRoIGluc3RlYWQgb2YgcHRoLWNvbmZpZy4KLQotVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQKLVtub3Qgc3VibWl0dGVkIGJ1dCB0aGV5J3ZlIGJlZW4gY2xlYXIgdGhleSBkb24ndCB3YW50IGEgcGtnLWNvbmZpZyBkZXBlbmRlbmN5XQotCi1SUCAyMDE0LzUvMjIKLQotSW5kZXg6IGdudXBnLTIuMS4wL200L2dudXBnLXB0aC5tNAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdudXBnLTIuMS4wLm9yaWcvbTQvZ251cGctcHRoLm00Ci0rKysgZ251cGctMi4xLjAvbTQvZ251cGctcHRoLm00Ci1AQCAtMTcsMzMgKzE3LDkgQEAgZG5sIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCi0gIyBUYWtlbiBhbmQgbW9kaWZpZWQgZnJvbSB0aGUgbTQgbWFjcm9zIHdoaWNoIGNvbWUgd2l0aCBQdGguCi0gQUNfREVGVU4oW0dOVVBHX1BUSF9WRVJTSU9OX0NIRUNLXSwKLSAgIFsKLS0gICAgX3B0aF92ZXJzaW9uPWAkUFRIX0NPTkZJRyAtLXZlcnNpb24gfCBhd2sgJ05SPT0xIHtwcmludCBbJF0zfSdgCi0gICAgIF9yZXFfdmVyc2lvbj0iaWZlbHNlKFskMV0sLDEuMi4wLCQxKSIKLSsgICAgUEtHX0NIRUNLX01PRFVMRVMoUFRILCBbcHRoID49ICRfcmVxX3ZlcnNpb25dLCBbaGF2ZV9wdGg9eWVzXSwgW2hhdmVfcHRoPW5vXSkKLSAKLS0gICAgQUNfTVNHX0NIRUNLSU5HKGZvciBQVEggLSB2ZXJzaW9uID49ICRfcmVxX3ZlcnNpb24pCi0tICAgIGZvciBfdmFyIGluIF9wdGhfdmVyc2lvbiBfcmVxX3ZlcnNpb247IGRvCi0tICAgICAgICBldmFsICJfdmFsPVwiXCQke192YXJ9XCIiCi0tICAgICAgICBfbWFqb3I9YGVjaG8gJF92YWwgfCBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcKFtbYWIuXV1cKVwoW1swLTldXSpcKS9cMS8nYAotLSAgICAgICAgX21pbm9yPWBlY2hvICRfdmFsIHwgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXChbW2FiLl1dXClcKFtbMC05XV0qXCkvXDIvJ2AKLS0gICAgICAgIF9ydHlwZT1gZWNobyAkX3ZhbCB8IHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwoW1thYi5dXVwpXChbWzAtOV1dKlwpL1wzLydgCi0tICAgICAgICBfbWljcm89YGVjaG8gJF92YWwgfCBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcKFtbYWIuXV1cKVwoW1swLTldXSpcKS9cNC8nYAotLSAgICAgICAgY2FzZSAkX3J0eXBlIGluCi0tICAgICAgICAgICAgImEiICkgX3J0eXBlPTAgOzsKLS0gICAgICAgICAgICAiYiIgKSBfcnR5cGU9MSA7OwotLSAgICAgICAgICAgICIuIiApIF9ydHlwZT0yIDs7Ci0tICAgICAgICBlc2FjCi0tICAgICAgICBfaGV4PWBlY2hvIGR1bW15IHwgYXdrICd7IHByaW50ZigiJWQlMDJkJTFkJTAyZCIsIG1ham9yLCBtaW5vciwgcnR5cGUsIG1pY3JvKTsgfScgXAotLSAgICAgICAgICAgICAgIm1ham9yPSRfbWFqb3IiICJtaW5vcj0kX21pbm9yIiAicnR5cGU9JF9ydHlwZSIgIm1pY3JvPSRfbWljcm8iYAotLSAgICAgICAgZXZhbCAiJHtfdmFyfV9oZXg9XCJcJF9oZXhcIiIKLS0gICAgZG9uZQotLSAgICBoYXZlX3B0aD1ubwotLSAgICBpZiB0ZXN0ICIuJF9wdGhfdmVyc2lvbl9oZXgiICE9IC47IHRoZW4KLS0gICAgICAgIGlmIHRlc3QgIi4kX3JlcV92ZXJzaW9uX2hleCIgIT0gLjsgdGhlbgotLSAgICAgICAgICAgIGlmIHRlc3QgJF9wdGhfdmVyc2lvbl9oZXggLWdlICRfcmVxX3ZlcnNpb25faGV4OyB0aGVuCi0tICAgICAgICAgICAgICAgIGhhdmVfcHRoPXllcwotLSAgICAgICAgICAgIGZpCi0tICAgICAgICBmaQotLSAgICBmaQotICAgICBpZiB0ZXN0ICRoYXZlX3B0aCA9IHllczsgdGhlbgotICAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKLSAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIFBUSCBpbnN0YWxsYXRpb24gaXMgc2FuZV0pCi1AQCAtNTEsOSArMjcsOSBAQCBBQ19ERUZVTihbR05VUEdfUFRIX1ZFUlNJT05fQ0hFQ0tdLAotICAgICAgICAgIF9nbnVwZ19wdGhfc2F2ZV9jZmxhZ3M9JENGTEFHUwotICAgICAgICAgIF9nbnVwZ19wdGhfc2F2ZV9sZGZsYWdzPSRMREZMQUdTCi0gICAgICAgICAgX2dudXBnX3B0aF9zYXZlX2xpYnM9JExJQlMKLS0gICAgICAgICBDRkxBR1M9IiRDRkxBR1MgYCRQVEhfQ09ORklHIC0tY2ZsYWdzYCIKLS0gICAgICAgICBMREZMQUdTPSIkTERGTEFHUyBgJFBUSF9DT05GSUcgLS1sZGZsYWdzYCIKLS0gICAgICAgICBMSUJTPSIkTElCUyBgJFBUSF9DT05GSUcgLS1saWJzIC0tYWxsYCIKLSsgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSF9DRkxBR1MiCi0rICAgICAgICAgTERGTEFHUz0iJExERkxBR1MgJFBUSF9MREZMQUdTIgotKyAgICAgICAgIExJQlM9IiRMSUJTICRQVEhfTElCUyIKLSAgICAgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFsjaW5jbHVkZSA8cHRoLmg+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1sgcHRoX2luaXQgKCk7XV0pXSwKLUBAIC04MCwyNiArNTYsMTMgQEAgQUNfREVGVU4oW0dOVVBHX1BUSF9WRVJTSU9OX0NIRUNLXSwKLSAjIFBUSF9DTEZBR1MgYW5kIFBUSF9MSUJTIGFyZSBBU19TVUJTVC4KLSAjCi0gQUNfREVGVU4oW0dOVVBHX1BBVEhfUFRIXSwKLS1bIEFDX0FSR19XSVRIKHB0aC1wcmVmaXgsCi0tICAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtcHRoLXByZWZpeD1QRlhdLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcmVmaXggd2hlcmUgR05VIFB0aCBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0pLAotLSAgICAgcHRoX2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIiwgcHRoX2NvbmZpZ19wcmVmaXg9IiIpCi0tICBpZiB0ZXN0IHgkcHRoX2NvbmZpZ19wcmVmaXggIT0geCA7IHRoZW4KLS0gICAgIFBUSF9DT05GSUc9IiRwdGhfY29uZmlnX3ByZWZpeC9iaW4vcHRoLWNvbmZpZyIKLS0gIGZpCi0tICBBQ19QQVRIX1BST0coUFRIX0NPTkZJRywgcHRoLWNvbmZpZywgbm8pCi0rWwotICAgdG1wPWlmZWxzZShbJDFdLCAsMS4zLjcsJDEpCi0tICBpZiB0ZXN0ICIkUFRIX0NPTkZJRyIgIT0gIm5vIjsgdGhlbgotLSAgICBHTlVQR19QVEhfVkVSU0lPTl9DSEVDSygkdG1wKQotLSAgICBpZiB0ZXN0ICRoYXZlX3B0aCA9IHllczsgdGhlbiAgICAgIAotLSAgICAgICBQVEhfQ0ZMQUdTPWAkUFRIX0NPTkZJRyAtLWNmbGFnc2AKLS0gICAgICAgUFRIX0xJQlM9YCRQVEhfQ09ORklHIC0tbGRmbGFnc2AKLS0gICAgICAgUFRIX0xJQlM9IiRQVEhfTElCUyBgJFBUSF9DT05GSUcgLS1saWJzIC0tYWxsYCIKLS0gICAgICAgQUNfREVGSU5FKEhBVkVfUFRILCAxLAotKyAgR05VUEdfUFRIX1ZFUlNJT05fQ0hFQ0soJHRtcCkKLSsgIGlmIHRlc3QgJGhhdmVfcHRoID0geWVzOyB0aGVuCi0rICAgICAgQUNfREVGSU5FKEhBVkVfUFRILCAxLAotICAgICAgICAgICAgICAgICBbRGVmaW5lZCBpZiB0aGUgR05VIFB0aCBpcyBhdmFpbGFibGVdKQotLSAgICBmaQotICAgZmkKLSAgIEFDX1NVQlNUKFBUSF9DRkxBR1MpCi0gICBBQ19TVUJTVChQVEhfTElCUykKLSBdKQotLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnL3VzZS1wa2djb25maWctaW5zdGVhZC1vZi1ucHRoLWNvbmZpZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy91c2UtcGtnY29uZmlnLWluc3RlYWQtb2YtbnB0aC1jb25maWcucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZGJmMWIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnL3VzZS1wa2djb25maWctaW5zdGVhZC1vZi1ucHRoLWNvbmZpZy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLVVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3BlbmVtYmVkZGVkIHNwZWNpZmljXQotCi1TaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+Ci0KLQotSW5kZXg6IGdudXBnLTIuMS4wL200L25wdGgubTQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnbnVwZy0yLjEuMC5vcmlnL200L25wdGgubTQKLSsrKyBnbnVwZy0yLjEuMC9tNC9ucHRoLm00Ci1AQCAtMTcsMTAgKzE3LDEwIEBAIEFDX0RFRlVOKFtfQU1fUEFUSF9OUFRIX0NPTkZJR10sCi0gICBpZiB0ZXN0ICJ4JG5wdGhfY29uZmlnX3ByZWZpeCIgIT0geCA7IHRoZW4KLSAgICAgICBOUFRIX0NPTkZJRz0iJG5wdGhfY29uZmlnX3ByZWZpeC9iaW4vbnB0aC1jb25maWciCi0gICBmaQotLSAgQUNfUEFUSF9QUk9HKE5QVEhfQ09ORklHLCBucHRoLWNvbmZpZywgbm8pCi0rICBBQ19QQVRIX1BST0coUEtHQ09ORklHLCBwa2ctY29uZmlnLCBubykKLSAKLS0gIGlmIHRlc3QgIiROUFRIX0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KLS0gICAgbnB0aF92ZXJzaW9uPWAkTlBUSF9DT05GSUcgLS12ZXJzaW9uYAotKyAgaWYgdGVzdCAiJFBLR0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KLSsgICAgbnB0aF92ZXJzaW9uPWAkUEtHQ09ORklHIC0tbW9kdmVyc2lvbiBucHRoYAotICAgZmkKLSAgIG5wdGhfdmVyc2lvbl9tYWpvcj1gZWNobyAkbnB0aF92ZXJzaW9uIHwgXAotICAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wxLydgCi1AQCAtNDUsNyArNDUsNyBAQCBBQ19ERUZVTihbQU1fUEFUSF9OUFRIXSwKLSAKLSAgIEFDX01TR19DSEVDS0lORyhmb3IgTlBUSCAtIHZlcnNpb24gPj0gJG1pbl9ucHRoX3ZlcnNpb24pCi0gICBvaz1ubwotLSAgaWYgdGVzdCAiJE5QVEhfQ09ORklHIiAhPSAibm8iIDsgdGhlbgotKyAgaWYgdGVzdCAiJFBLR0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KLSAgICAgcmVxX21ham9yPWBlY2hvICRtaW5fbnB0aF92ZXJzaW9uIHwgXAotICAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMS8nYAotICAgICByZXFfbWlub3I9YGVjaG8gJG1pbl9ucHRoX3ZlcnNpb24gfCBcCi1AQCAtNjYsMjggKzY2LDkgQEAgQUNfREVGVU4oW0FNX1BBVEhfTlBUSF0sCi0gICBmaQotICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KLSAgICAgQUNfTVNHX1JFU1VMVChbeWVzICgkbnB0aF92ZXJzaW9uKV0pCi0tICBlbHNlCi0tICAgIEFDX01TR19SRVNVTFQobm8pCi0tICBmaQotLSAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KLS0gICAgICMgSWYgd2UgaGF2ZSBhIHJlY2VudCBOUFRILCB3ZSBzaG91bGQgYWxzbyBjaGVjayB0aGF0IHRoZQotLSAgICAgIyBBUEkgaXMgY29tcGF0aWJsZS4KLS0gICAgIGlmIHRlc3QgIiRyZXFfbnB0aF9hcGkiIC1ndCAwIDsgdGhlbgotLSAgICAgICAgdG1wPWAkTlBUSF9DT05GSUcgLS1hcGktdmVyc2lvbiAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCi0tICAgICAgICBpZiB0ZXN0ICIkdG1wIiAtZ3QgMCA7IHRoZW4KLS0gICAgICAgICAgIEFDX01TR19DSEVDS0lORyhbTlBUSCBBUEkgdmVyc2lvbl0pCi0tICAgICAgICAgICBpZiB0ZXN0ICIkcmVxX25wdGhfYXBpIiAtZXEgIiR0bXAiIDsgdGhlbgotLSAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFtva2F5XSkKLS0gICAgICAgICAgIGVsc2UKLS0gICAgICAgICAgICAgb2s9bm8KLS0gICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChbZG9lcyBub3QgbWF0Y2guIHdhbnQ9JHJlcV9ucHRoX2FwaSBnb3Q9JHRtcF0pCi0tICAgICAgICAgICBmaQotLSAgICAgICAgZmkKLS0gICAgIGZpCi0tICBmaQotLSAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KLS0gICAgTlBUSF9DRkxBR1M9YCROUFRIX0NPTkZJRyAtLWNmbGFnc2AKLS0gICAgTlBUSF9MSUJTPWAkTlBUSF9DT05GSUcgLS1saWJzYAotKyAgICBOUFRIX0NGTEFHUz1gJFBLR0NPTkZJRyAtLWNmbGFncyBucHRoYAotKyAgICBOUFRIX0xJQlM9YCRQS0dDT05GSUcgLS1saWJzIG5wdGhgCi0rICAgIEFDX01TR19XQVJOKFtbR09UIEhFUkUgLSAkTlBUSF9MSUJTIF1dKQotICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQotICAgICBucHRoX2NvbmZpZ19ob3N0PWAkTlBUSF9DT05GSUcgLS1ob3N0IDI+L2Rldi9udWxsIHx8IGVjaG8gbm9uZWAKLSAgICAgaWYgdGVzdCB4IiRucHRoX2NvbmZpZ19ob3N0IiAhPSB4bm9uZSA7IHRoZW4KLUBAIC0xMDMsNiArODQsNyBAQCBBQ19ERUZVTihbQU1fUEFUSF9OUFRIXSwKLSAgICAgICBmaQotICAgICBmaQotICAgZWxzZQotKyAgICBBQ19NU0dfUkVTVUxUKG5vKQotICAgICBOUFRIX0NGTEFHUz0iIgotICAgICBOUFRIX0xJQlM9IiIKLSAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZ18yLjEuMTguYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGdfMi4xLjE4LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDYxMWFhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZ18yLjEuMTguYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi1TVU1NQVJZID0gIkdOVSBQcml2YWN5IEd1YXJkIC0gZW5jcnlwdGlvbiBhbmQgc2lnbmluZyB0b29scyAoMi54KSIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnLyIKLUxJQ0VOU0UgPSAiR1BMdjMgJiBMR1BMdjMiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xODlhZjhhZmNhNmQ2MDc1YmE2YzllMGFhODA3NzYyNiBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9YTJiNmJmMmNiMzhlZTUyNjE5ZTYwZjMwYTFmYzcyNTciCi0KLURFUEVORFMgPSAibnB0aCBsaWJhc3N1YW4gbGlia3NiYSB6bGliIGJ6aXAyIHJlYWRsaW5lIGxpYmdjcnlwdCIKLQotaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIHBrZ2NvbmZpZwotCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9nbnVwZy5vcmcvZG93bmxvYWQvaW5kZXguaHRtbCIKLVNSQ19VUkkgPSAiJHtHTlVQR19NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCi0gICAgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vdXNlLXBrZ2NvbmZpZy1pbnN0ZWFkLW9mLW5wdGgtY29uZmlnLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2Rpcm1uZ3ItdXNlcy1saWJncGctZXJyb3IucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vYXV0b2dlbi5zaC1maXgtZmluZC12ZXJzaW9uLWZvci1iZXRhLWNoZWNraW5nLnBhdGNoIFwKLSAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJjNjdmOTA4YjBiMzVjN2ViYzYyMTQ0ZjM2Mjc1N2UxZSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJkMDRjNmZhYjdlNTU2MmNlNGI5MTViMjIwMjBlMzRkNGMxYTI1Njg0NzY5MGNmMTQ5ODQyMjY0ZmM3Y2VmOTk0IgotCi1FWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWxkYXAgXAotCQktLWRpc2FibGUtY2NpZC1kcml2ZXIgXAotCQktLXdpdGgtemxpYj0ke1NUQUdJTkdfTElCRElSfS8uLiBcCi0JCS0td2l0aC1iemlwMj0ke1NUQUdJTkdfTElCRElSfS8uLiBcCi0gICAgICAgICAgICAgICAgLS13aXRoLXJlYWRsaW5lPSR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKLSAgICAgICAgICAgICAgICIKLVJSRUNPTU1FTkRTXyR7UE59ID0gInBpbmVudHJ5IgotCi1kb19jb25maWd1cmVfcHJlcGVuZCAoKSB7Ci0JIyBFbHNlIHRoZXNlIGNvdWxkIGJlIHVzZWQgaW4gcHJlZmVybmNlIHRvIHRob3NlIGluIGFjbG9jYWwtY29weQotCXJtIC1mICR7U30vbTQvZ3BnLWVycm9yLm00Ci0Jcm0gLWYgJHtTfS9tNC9saWJhc3N1YW4ubTQKLQlybSAtZiAke1N9L200L2tzYmEubTQKLQlybSAtZiAke1N9L200L2xpYmdjcnlwdC5tNAotfQotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLQlsbiAtc2YgZ3BnMiAke0R9JHtiaW5kaXJ9L2dwZwotCWxuIC1zZiBncGd2MiAke0R9JHtiaW5kaXJ9L2dwZ3YKLX0KLQotUkRFUEVORFNfJHtQTn0gPSAiZ251dGxzIgotCi1QQUNLQUdFQ09ORklHID8/PSAiIgotUEFDS0FHRUNPTkZJR1tzcWxpdGUzXSA9ICItLWVuYWJsZS1zcWxpdGUsIC0tZGlzYWJsZS1zcWxpdGUsIHNxbGl0ZTMiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGdfMi4yLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGdfMi4yLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE3NmRkZAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZ18yLjIuMC5iYgpAQCAtMCwwICsxLDQ2IEBACitTVU1NQVJZID0gIkdOVSBQcml2YWN5IEd1YXJkIC0gZW5jcnlwdGlvbiBhbmQgc2lnbmluZyB0b29scyAoMi54KSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnLyIKK0xJQ0VOU0UgPSAiR1BMdjMgJiBMR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xODlhZjhhZmNhNmQ2MDc1YmE2YzllMGFhODA3NzYyNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxHUEwzO21kNT1hMmI2YmYyY2IzOGVlNTI2MTllNjBmMzBhMWZjNzI1NyIKKworREVQRU5EUyA9ICJucHRoIGxpYmFzc3VhbiBsaWJrc2JhIHpsaWIgYnppcDIgcmVhZGxpbmUgbGliZ2NyeXB0IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8gcGtnY29uZmlnCisKK1VQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2dudXBnLm9yZy9kb3dubG9hZC9pbmRleC5odG1sIgorU1JDX1VSSSA9ICIke0dOVVBHX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVXNlLXBrZy1jb25maWctdG8tZmluZC1wdGgtaW5zdGVhZC1vZi1wdGgtY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItdXNlLXBrZ2NvbmZpZy1pbnN0ZWFkLW9mLW5wdGgtY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtZGlybW5nci11c2VzLWxpYmdwZy1lcnJvci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LWF1dG9nZW4uc2gtZml4LWZpbmQtdmVyc2lvbi1mb3ItYmV0YS1jaGVja2luZy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzg5ZjE2OTQ5ZmFlMmQwMDNkMzg3ZjQ5ZTlkYTRiNzQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDQ1MTRhMGJlMGY3YTFmZjI2MzE5MzMzMDAxOWViNGI1M2M4MmYwZjVlMjMwYWYzYzE0ZGYzNzEyNzFhNDVlNiIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1sZGFwIFwKKwkJLS1kaXNhYmxlLWNjaWQtZHJpdmVyIFwKKwkJLS13aXRoLXpsaWI9JHtTVEFHSU5HX0xJQkRJUn0vLi4gXAorCQktLXdpdGgtYnppcDI9JHtTVEFHSU5HX0xJQkRJUn0vLi4gXAorCQktLXdpdGgtcmVhZGxpbmU9JHtTVEFHSU5HX0xJQkRJUn0vLi4gXAorCQktLWVuYWJsZS1ncGctaXMtZ3BnMiBcCisgICAgICAgICAgICAgICAiCitSUkVDT01NRU5EU18ke1BOfSA9ICJwaW5lbnRyeSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgRWxzZSB0aGVzZSBjb3VsZCBiZSB1c2VkIGluIHByZWZlcm5jZSB0byB0aG9zZSBpbiBhY2xvY2FsLWNvcHkKKwlybSAtZiAke1N9L200L2dwZy1lcnJvci5tNAorCXJtIC1mICR7U30vbTQvbGliYXNzdWFuLm00CisJcm0gLWYgJHtTfS9tNC9rc2JhLm00CisJcm0gLWYgJHtTfS9tNC9saWJnY3J5cHQubTQKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJbG4gLXNmIGdwZzIgJHtEfSR7YmluZGlyfS9ncGcKKwlsbiAtc2YgZ3BndjIgJHtEfSR7YmluZGlyfS9ncGd2Cit9CisKK1BBQ0tBR0VDT05GSUcgPz89ICJnbnV0bHMiCitQQUNLQUdFQ09ORklHW2dudXRsc10gPSAiLS1lbmFibGUtZ251dGxzLCAtLWRpc2FibGUtZ251dGxzLCBnbnV0bHMiCitQQUNLQUdFQ09ORklHW3NxbGl0ZTNdID0gIi0tZW5hYmxlLXNxbGl0ZSwgLS1kaXNhYmxlLXNxbGl0ZSwgc3FsaXRlMyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzLmluYwppbmRleCAxZWNhZDFmLi4yOWI1ZGQ2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMuaW5jCkBAIC00Niw3ICs0Niw2IEBACiAiCiAKIExERkxBR1NfYXBwZW5kX2xpYmMtbXVzbCA9ICIgLWxhcmdwIgotTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1sdWFyZ3AgLXB0aHJlYWQiCiAKIGRvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgewogCWZvciBkaXIgaW4gLiBsaWI7IGRvCkBAIC01OSw1ICs1OCwzIEBACiBGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9nbnV0bHMtY2xpLWRlYnVnIgogRklMRVNfJHtQTn0tb3BlbnNzbCA9ICIke2xpYmRpcn0vbGliZ251dGxzLW9wZW5zc2wuc28uKiIKIEZJTEVTXyR7UE59LXh4ID0gIiR7bGliZGlyfS9saWJnbnV0bHN4eC5zby4qIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy9jb3JyZWN0X3JwbF9nZXR0aW1lb2ZkYXlfc2lnbmF0dXJlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMvY29ycmVjdF9ycGxfZ2V0dGltZW9mZGF5X3NpZ25hdHVyZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZiMDIzYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy9jb3JyZWN0X3JwbF9nZXR0aW1lb2ZkYXlfc2lnbmF0dXJlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotRnJvbSA4MWIwZjA0YzE0ZjY3M2I5OTc3OGQyZTdkOGU4NTQ2MWUwYmYyMDE4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogVmFsZW50aW4gUG9wYSA8dmFsZW50aW4ucG9wYUBpbnRlbC5jb20+Ci1EYXRlOiBGcmksIDI1IEFwciAyMDE0IDEzOjU4OjU1ICswMzAwCi1TdWJqZWN0OiBbUEFUQ0ggMS8zXSBDb3JyZWN0IHJwbF9nZXR0aW1lb2ZkYXkgc2lnbmF0dXJlCi0KLUN1cnJlbnRseSB3ZSBmYWlsIG9uIHVjbGliYyBsaWtlIGJlbG93Ci0KLXwgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC9ob21lL2tyYWovd29yay9hbmdzdHJvbS9zb3VyY2VzL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC11Y2xpYmMvc3lzcm9vdHMvcWVtdWFybS91c3IvaW5jbHVkZS9zeXMvcHJvY2ZzLmg6MzI6MCwKLXwgICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL2tyYWovd29yay9hbmdzdHJvbS9zb3VyY2VzL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC11Y2xpYmMvc3lzcm9vdHMvcWVtdWFybS91c3IvaW5jbHVkZS9zeXMvdWNvbnRleHQuaDoyNiwKLXwgICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL2tyYWovd29yay9hbmdzdHJvbS9zb3VyY2VzL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC11Y2xpYmMvc3lzcm9vdHMvcWVtdWFybS91c3IvaW5jbHVkZS9zaWduYWwuaDozOTIsCi18ICAgICAgICAgICAgICAgICAgZnJvbSAuLi8uLi9nbC9zaWduYWwuaDo1MiwKLXwgICAgICAgICAgICAgICAgICBmcm9tIC4uLy4uL2dsL3N5cy9zZWxlY3QuaDo1OCwKLXwgICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL2tyYWovd29yay9hbmdzdHJvbS9zb3VyY2VzL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC11Y2xpYmMvc3lzcm9vdHMvcWVtdWFybS91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaDoyMjAsCi18ICAgICAgICAgICAgICAgICAgZnJvbSAuLi8uLi9nbC9zeXMvdHlwZXMuaDoyOCwKLXwgICAgICAgICAgICAgICAgICBmcm9tIC4uLy4uL2xpYi9pbmNsdWRlcy9nbnV0bHMvZ251dGxzLmg6NDYsCi18ICAgICAgICAgICAgICAgICAgZnJvbSBleC1jeHguY3BwOjM6Ci18IC4uLy4uL2dsL3N5cy90aW1lLmg6Mzk2OjY2OiBlcnJvcjogY29uZmxpY3RpbmcgZGVjbGFyYXRpb24gJ3ZvaWQqIHJlc3RyaWN0JwotfCAuLi8uLi9nbC9zeXMvdGltZS5oOjM5Njo1MDogZXJyb3I6ICdyZXN0cmljdCcgaGFzIGEgcHJldmlvdXMgZGVjbGFyYXRpb24gYXMgJ3RpbWV2YWwqIHJlc3RyaWN0JwotfCBtYWtlWzRdOiAqKiogW2V4LWN4eC5vXSBFcnJvciAxCi18IG1ha2VbNF06ICoqKiBXYWl0aW5nIGZvciB1bmZpbmlzaGVkIGpvYnMuLi4uCi0KLUdDQyBkZXRlY3RzIHRoYXQgd2UgY2FsbCAncmVzdHJpY3QnIGFzIHBhcmFtIG5hbWUgaW4gZnVuY3Rpb24KLXNpZ25hdHVyZXMgYW5kIGNvbXBsYWlucyBzaW5jZSBib3RoIHBhcmFtcyBhcmUgY2FsbGVkICdyZXN0cmljdCcKLXRoZXJlZm9yZSB3ZSB1c2UgX19yZXN0cmljdCB0byBkZW5vdGUgdGhlIEM5OSBrZXl3b3JrCi0KLVRoaXMgb25seSBoYXBwZW5zIG9mIHVjbGliYyBzaW5jZSB0aGlzIGNvZGUgaXMgbm90IGV4Y2VyY2lzZWQgd2l0aAotZWdsaWJjIG90aGVyd2lzZSB3ZSB3aWxsIGhhdmUgc2FtZSBpc3N1ZSB0aGVyZSB0b28KLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLS0tLQotIGdsL3N5c190aW1lLmluLmggfCA4ICsrKystLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2dsL3N5c190aW1lLmluLmggYi9nbC9zeXNfdGltZS5pbi5oCi1pbmRleCA1YThjYWYzLi4yZGM1NzE4IDEwMDY0NAotLS0tIGEvZ2wvc3lzX3RpbWUuaW4uaAotKysrIGIvZ2wvc3lzX3RpbWUuaW4uaAotQEAgLTkzLDIwICs5MywyMCBAQCBzdHJ1Y3QgdGltZXZhbAotICMgICBkZWZpbmUgZ2V0dGltZW9mZGF5IHJwbF9nZXR0aW1lb2ZkYXkKLSAjICBlbmRpZgotIF9HTF9GVU5DREVDTF9SUEwgKGdldHRpbWVvZmRheSwgaW50LAotLSAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqcmVzdHJpY3QsIHZvaWQgKnJlc3RyaWN0KQotKyAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCwgdm9pZCAqX19yZXN0cmljdCkKLSAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOwotIF9HTF9DWFhBTElBU19SUEwgKGdldHRpbWVvZmRheSwgaW50LAotLSAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqcmVzdHJpY3QsIHZvaWQgKnJlc3RyaWN0KSk7Ci0rICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0LCB2b2lkICpfX3Jlc3RyaWN0KSk7Ci0gIyBlbHNlCi0gIyAgaWYgIUBIQVZFX0dFVFRJTUVPRkRBWUAKLSBfR0xfRlVOQ0RFQ0xfU1lTIChnZXR0aW1lb2ZkYXksIGludCwKLS0gICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKnJlc3RyaWN0LCB2b2lkICpyZXN0cmljdCkKLSsgICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QsIHZvaWQgKl9fcmVzdHJpY3QpCi0gICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKLSAjICBlbmRpZgotIC8qIE5lZWQgdG8gY2FzdCwgYmVjYXVzZSBvbiBnbGliYyBzeXN0ZW1zLCBieSBkZWZhdWx0LCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXpvbmUgKi4gICovCi0gX0dMX0NYWEFMSUFTX1NZU19DQVNUIChnZXR0aW1lb2ZkYXksIGludCwKLS0gICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqcmVzdHJpY3QsIHZvaWQgKnJlc3RyaWN0KSk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QsIHZvaWQgKl9fcmVzdHJpY3QpKTsKLSAjIGVuZGlmCi0gX0dMX0NYWEFMSUFTV0FSTiAoZ2V0dGltZW9mZGF5KTsKLSAjIGlmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCi0tLSAKLTIuMTAuMgotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy91c2UtcGtnLWNvbmZpZy10by1sb2NhdGUtemxpYi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzL3VzZS1wa2ctY29uZmlnLXRvLWxvY2F0ZS16bGliLnBhdGNoCmluZGV4IDBlMWI3YzguLmFlMTQxYTUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzL3VzZS1wa2ctY29uZmlnLXRvLWxvY2F0ZS16bGliLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzL3VzZS1wa2ctY29uZmlnLXRvLWxvY2F0ZS16bGliLnBhdGNoCkBAIC0xLDcgKzEsOSBAQAotRnJvbSBjZWU4MGFmMWZlOTNmNWI3Njc2NWFmZWViZmNjM2I5MDI3NjhmNWQ2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQW5kcmUgTWNDdXJkeSA8YXJtY2N1cmR5QGdtYWlsLmNvbT4KLURhdGU6IFR1ZSwgMjYgTWF5IDIwMTUgMjE6NDE6MjQgLTA3MDAKLVN1YmplY3Q6IFtQQVRDSF0gdXNlIHBrZy1jb25maWcgdG8gbG9jYXRlIHpsaWIKK0Zyb20gMTgwODEwNjhhOTdjMDAwMTVhYWJjNWZhMzIxNjY0OTUxNDU4ZWEwZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZhbiBYaW4gPGZhbi54aW5AanAuZnVqaXRzdS5jb20+CitEYXRlOiBGcmksIDkgSnVuIDIwMTcgMTU6MjA6MzEgKzA5MDAKK1N1YmplY3Q6IFtQQVRDSF0gRnJvbSBjZWU4MGFmMWZlOTNmNWI3Njc2NWFmZWViZmNjM2I5MDI3NjhmNWQ2IE1vbiBTZXAgMTcKKyAwMDowMDowMCAyMDAxIEZyb206IEFuZHJlIE1jQ3VyZHkgPGFybWNjdXJkeUBnbWFpbC5jb20+IERhdGU6IFR1ZSwgMjYgTWF5CisgMjAxNSAyMTo0MToyNCAtMDcwMCBTdWJqZWN0OiBbUEFUQ0hdIHVzZSBwa2ctY29uZmlnIHRvIGxvY2F0ZSB6bGliCiAKIEFDX0xJQl9IQVZFX0xJTktGTEFHUyBjYW4gc29tZXRpbWVzIGZpbmQgaG9zdCBsaWJzIGFuZCBpcyB0aGVyZWZvcmUgbm90CiByb2J1c3Qgd2hlbiBjcm9zcy1jb21waWxpbmcuIFJlbW92ZSBpdCBmb3IgemxpYiBhbmQgdXNlIFBLR19DSEVDS19NT0RVTEVTCkBAIC0xOCwxNSArMjAsMTkgQEAKIFVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KIAogU2lnbmVkLW9mZi1ieTogQW5kcmUgTWNDdXJkeSA8YXJtY2N1cmR5QGdtYWlsLmNvbT4KKworUmViYXNlIG9uIGdudXRscyAzLjUuMTMKKworU2lnbmVkLW9mZi1ieTogRmFuIFhpbiA8ZmFuLnhpbkBqcC5mdWppdHN1LmNvbT4KIC0tLQotIGNvbmZpZ3VyZS5hYyB8IDI0ICsrKysrKysrKystLS0tLS0tLS0tLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKyBjb25maWd1cmUuYWMgfCAyNSArKysrKysrKystLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IDFiNTYxZDUuLjBjNzg3ZGMgMTAwNjQ0CitpbmRleCBjNjUyNjhlLi5mNmExOGFhIDEwMDY0NAogLS0tIGEvY29uZmlndXJlLmFjCiArKysgYi9jb25maWd1cmUuYWMKLUBAIC01MDgsMjUgKzUwOCwyMSBAQCBBQ19BUkdfV0lUSCh6bGliLCBBU19IRUxQX1NUUklORyhbLS13aXRob3V0LXpsaWJdLAorQEAgLTczNSwyOCArNzM1LDIxIEBAIEFDX0FSR19XSVRIKHpsaWIsIEFTX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtemxpYl0sCiAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGluY2x1ZGUgemxpYiBjb21wcmVzc2lvbiBzdXBwb3J0XSkKICBpZiB0ZXN0IHgkYWNfemxpYiAhPSB4bm87IHRoZW4KICAgQUNfTVNHX1JFU1VMVCh5ZXMpCkBAIC00OSw2ICs1NSw3IEBACiAtICAgIGVsc2UKIC0gICAgICBHTlVUTFNfUkVRVUlSRVNfUFJJVkFURT0iJEdOVVRMU19SRVFVSVJFU19QUklWQVRFLCB6bGliIgogLSAgICBmaQorLSAgICBMSUJaX1BDPSIiCiArICBQS0dfQ0hFQ0tfTU9EVUxFUyhaTElCLCB6bGliKQogKyAgSEFWRV9MSUJaPXllcwogKyAgQUNfREVGSU5FKFtIQVZFX0xJQlpdLCBbMV0sIFt6bGliIGlzIGVuYWJsZWRdKQpAQCAtNTcsMTEgKzY0LDEyIEBACiArICBBQ19TVUJTVChMVExJQlopCiArICBpZiB0ZXN0ICJ4JEdOVVRMU19SRVFVSVJFU19QUklWQVRFIiA9IHg7IHRoZW4KICsgICAgR05VVExTX1JFUVVJUkVTX1BSSVZBVEU9IlJlcXVpcmVzLnByaXZhdGU6IHpsaWIiCi0rICBlbHNlCisgICBlbHNlCistICAgIExJQlpfUEM9JExJQloKICsgICAgR05VVExTX1JFUVVJUkVTX1BSSVZBVEU9IiRHTlVUTFNfUkVRVUlSRVNfUFJJVkFURSwgemxpYiIKICAgIGZpCiAgZmkKLSBBQ19TVUJTVChHTlVUTFNfUkVRVUlSRVNfUFJJVkFURSkKKyBBQ19TVUJTVChMSUJaX1BDKQogLS0gCiAxLjkuMQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRsc18zLjUuMTMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRsc18zLjUuMTMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkN2QwOQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzXzMuNS4xMy5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIGdudXRscy5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtY29uZmlndXJlLmFjLWZpeC1zZWQtY29tbWFuZC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdXNlLXBrZy1jb25maWctdG8tbG9jYXRlLXpsaWIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2FybV9lYWJpLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjRmZDQxYWQ4NjU3MjkzM2MyMzc5YjRjYzMyMWEwOTU5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc5ZjU0ODBhZDE5OGRhZDViYzc4ZTA3NWY0YTQwYzRhMzE1YTFiMjA3MjY2NjkxOWQyZDA1YTA4YWVjMTMwOTYiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzXzMuNS45LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHNfMy41LjkuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmODRkYmIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHNfMy41LjkuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1yZXF1aXJlIGdudXRscy5pbmMKLQotU1JDX1VSSSArPSAiZmlsZTovL2NvcnJlY3RfcnBsX2dldHRpbWVvZmRheV9zaWduYXR1cmUucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovLzAwMDEtY29uZmlndXJlLmFjLWZpeC1zZWQtY29tbWFuZC5wYXRjaCBcCi0gICAgICAgICAgICBmaWxlOi8vdXNlLXBrZy1jb25maWctdG8tbG9jYXRlLXpsaWIucGF0Y2ggXAotICAgICAgICAgICAgZmlsZTovL2FybV9lYWJpLnBhdGNoIFwKLSAgICAgICAgICAgIgotU1JDX1VSSVttZDVzdW1dID0gIjBhYjI1ZWI2YTE1MDkzNDVkZDA4NWJjMjFhMzg3OTUxIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgyYjEwZjBjNGVmMThmNGU2NGFkOGNlZjVkYmFmMTRiZTczMmY1MDk1YTQxY2YzNjZiNGVjYjQwNTAzODI5NTEiCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjFfNC4xMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjFfNC4xMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZjN2YxMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xXzQuMTAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1TVU1NQVJZID0gIkxpYnJhcnkgZm9yIEFTTi4xIGFuZCBERVIgbWFuaXB1bGF0aW9uIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYnRhc24xLyIKLQotTElDRU5TRSA9ICJHUEx2MysgJiBMR1BMdjIuMSsiCi1MSUNFTlNFXyR7UE59LWJpbiA9ICJHUEx2MysiCi1MSUNFTlNFXyR7UE59ID0gIkxHUEx2Mi4xKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9SRUFETUU7ZW5kbGluZT04O21kNT1jMzgwM2EzZThjYTVhYjVlYjFlNTkxMmZhYTQwNTM1MSIKLQotU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2xpYnRhc24xL2xpYnRhc24xLSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLXN0ZGludC5tNC1yZWludHJvZHVjZS1HTlVMSUJfT1ZFUlJJREVTX1dJTlRfVC1jaGVjay5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNy0xMDc5MC5wYXRjaCBcCi0gICAgICAgICAgICIKLQotREVQRU5EUyA9ICJiaXNvbi1uYXRpdmUiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJmNGZhZmZkZjYzOTY5ZDBlNGU2ZGY0M2I5Njc5ZThlNSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI2ODFhNGQ5YTBkMjU5ZjIxMjU3MTNmMmU1NzY2YzU4MDlmMTUxYjNhMTM5MmZkOTEzOTBmNzgwYjRiOGY1YTAyIgotCi1pbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIGJpbmNvbmZpZyBsaWJfcGFja2FnZSBndGstZG9jCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9saWJ0YXNuMV80LjEyLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9saWJ0YXNuMV80LjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNzU3MWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xXzQuMTIuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBBU04uMSBhbmQgREVSIG1hbmlwdWxhdGlvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJ0YXNuMS8iCisKK0xJQ0VOU0UgPSAiR1BMdjMrICYgTEdQTHYyLjErIgorTElDRU5TRV8ke1BOfS1iaW4gPSAiR1BMdjMrIgorTElDRU5TRV8ke1BOfSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vUkVBRE1FO2VuZGxpbmU9ODttZDU9YzM4MDNhM2U4Y2E1YWI1ZWIxZTU5MTJmYWE0MDUzNTEiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9saWJ0YXNuMS9saWJ0YXNuMS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1zdGRpbnQubTQtcmVpbnRyb2R1Y2UtR05VTElCX09WRVJSSURFU19XSU5UX1QtY2hlY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTA3OTAucGF0Y2ggXAorICAgICAgICAgICAiCisKK0RFUEVORFMgPSAiYmlzb24tbmF0aXZlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNWM3MjRiZDFmNzNhYWY0YTMxMTgzM2UxY2QyOTdiMjEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjc1M2RhMmU2MjEyNTdmMzNmNWIwNTFjYzExNGQ0MTdlNTIwNmEwODE4ZmUwYjFlY2ZkNjE1M2Y3MDkzNDc1MyIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyBiaW5jb25maWcgbGliX3BhY2thZ2UgZ3RrLWRvYworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZS8wMDAxLUNvcnJlY3RseS1pbnN0YWxsLXB5dGhvbi1tb2R1bGVzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lLzAwMDEtQ29ycmVjdGx5LWluc3RhbGwtcHl0aG9uLW1vZHVsZXMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNjU1ZmIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lLzAwMDEtQ29ycmVjdGx5LWluc3RhbGwtcHl0aG9uLW1vZHVsZXMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi1Gcm9tIDRkNzE0YzA5N2U0OTdiNjNkMmU4YjIyYTgzNGM2NzEwNDVlMjE1ZTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KLURhdGU6IFRodSwgOSBNYXIgMjAxNyAyMTozNDo1NSArMDIwMAotU3ViamVjdDogW1BBVENIXSBDb3JyZWN0bHkgaW5zdGFsbCBweXRob24gbW9kdWxlcwotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lLWNvcmUgc3BlY2lmaWNdCi1TaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KLS0tLQotIGxhbmcvcHl0aG9uL01ha2VmaWxlLmFtIHwgMSArCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCi0KLWRpZmYgLS1naXQgYS9sYW5nL3B5dGhvbi9NYWtlZmlsZS5hbSBiL2xhbmcvcHl0aG9uL01ha2VmaWxlLmFtCi1pbmRleCBlMzJmZDEyLi41ZWNmNmZiIDEwMDY0NAotLS0tIGEvbGFuZy9weXRob24vTWFrZWZpbGUuYW0KLSsrKyBiL2xhbmcvcHl0aG9uL01ha2VmaWxlLmFtCi1AQCAtMTAyLDYgKzEwMiw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbDoKLSAJZm9yIFBZVEhPTiBpbiAkKFBZVEhPTlMpOyBkbyBcCi0gCSAgJCRQWVRIT04gc2V0dXAucHkgaW5zdGFsbCBcCi0gCSAgLS1wcmVmaXggJChERVNURElSKSQocHJlZml4KSBcCi0rICAgICAgICAgIC0taW5zdGFsbC1saWI9JChERVNURElSKSR7cHl0aG9uZGlyfSBcCi0gCSAgLS1yZWNvcmQgZmlsZXMudHh0IFwKLSAJICAtLXZlcmJvc2UgOyBcCi0gCSAgY2F0IGZpbGVzLnR4dCA+PiBpbnN0YWxsX2ZpbGVzLnR4dCA7IFwKLS0tIAotMi4xMS4wCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZS8wMDAxLWdwZ21lLWNvbmZpZy1za2lwLWFsbC1saWItb3ItdXNyLWxpYi1kaXJlY3Rvcmllcy1pbi0ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvMDAwMS1ncGdtZS1jb25maWctc2tpcC1hbGwtbGliLW9yLXVzci1saWItZGlyZWN0b3JpZXMtaW4tLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGQ1NWI5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZS8wMDAxLWdwZ21lLWNvbmZpZy1za2lwLWFsbC1saWItb3ItdXNyLWxpYi1kaXJlY3Rvcmllcy1pbi0ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1Gcm9tIDhjMzE3ZjYxODZiZDNhOWExYzgwYjRkMWU4NzJiM2RiOTU5MzRiYjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KLURhdGU6IFRodSwgMTMgQXByIDIwMTcgMTY6NDA6MjcgKzAzMDAKLVN1YmplY3Q6IFtQQVRDSF0gZ3BnbWUtY29uZmlnOiBza2lwIGFsbCAvbGliKiBvciAvdXNyL2xpYiogZGlyZWN0b3JpZXMgaW4KLSBvdXRwdXQKLQotVGhlIGxvZ2ljIHdhcyBub3Qgd29ya2luZyBpbiBtdWx0aWxpYiBzZXR1cHMgd2hpY2ggdXNlIG90aGVyCi1kaXJlY3RvcnkgbmFtZXMgdGhhbiBwbGFpbiAvbGliIG9yIC91c3IvbGliLgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lLWNvcmUgc3BlY2lmaWNdCi1TaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KLS0tLQotIHNyYy9ncGdtZS1jb25maWcuaW4gfCAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9zcmMvZ3BnbWUtY29uZmlnLmluIGIvc3JjL2dwZ21lLWNvbmZpZy5pbgotaW5kZXggYTRkMTUyZS4uODM0Mjg2NSAxMDA2NDQKLS0tLSBhL3NyYy9ncGdtZS1jb25maWcuaW4KLSsrKyBiL3NyYy9ncGdtZS1jb25maWcuaW4KLUBAIC0xNTQsNyArMTU0LDcgQEAgd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KLSAgICAgICAgICAgICBmb3IgaSBpbiAkbGlicyAkdG1wX2wgJGFzc3Vhbl9saWJzICRncGdfZXJyb3JfbGlicyAkdG1wX3g7IGRvCi0gICAgICAgICAgICAgICBza2lwPW5vCi0gICAgICAgICAgICAgICBjYXNlICRpIGluCi0tICAgICAgICAgICAgICAgICAgLUwvdXNyL2xpYnwtTC9saWIpCi0rICAgICAgICAgICAgICAgICAgLUwvdXNyL2xpYip8LUwvbGliKikKLSAgICAgICAgICAgICAgICAgICAgICAgc2tpcD15ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgICAgICAtTCp8LWwqKQotLS0gCi0yLjExLjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lLzAwMDEtcGtnY29uZmlnLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lLzAwMDEtcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YTQzZWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvMDAwMS1wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwzMDMgQEAKK0Zyb20gOGFlMTQ5MDM1Yzk3ZDI3Y2QyYzYyNDcwNGQxNjUxODA2YzUzNTc3ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPgorRGF0ZTogV2VkLCAxNiBBdWcgMjAxNyAwMjowMDowOCAtMDQwMAorU3ViamVjdDogW1BBVENIIDEvNV0gcGtnY29uZmlnCisKK1VwZGF0ZSBncGdtZSB0byB1c2UgcGtnY29uZmlnIGluc3RlYWQgb2YgLWNvbmZpZyBmaWxlcyBzaW5jZSBpdHMKK3NpbXBsZXIgYW5kIGxlc3MgZXJyb3IgcHJvbmUgd2hlbiBjcm9zcyBjb21waWxpbmcuCisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkIFtVcHN0cmVhbSBub3QgaW50ZXJlc3RlZCBpbiBwa2ctY29uZmlnIHN1cHBvcnRdCitSUCAyMDE1LzQvMTcKKworU2lnbmVkLW9mZi1ieTogUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+CisKK1JlYmFzZSB0byAxLjkuMAorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgICB8ICAgMSArCisgc3JjL01ha2VmaWxlLmFtICAgICAgICAgfCAgIDQgKy0KKyBzcmMvZ3BnbWUtcHRocmVhZC5wYy5pbiB8ICAxNSArKysrKysrCisgc3JjL2dwZ21lLm00ICAgICAgICAgICAgfCAxMTQgKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgc3JjL2dwZ21lLnBjLmluICAgICAgICAgfCAgMTUgKysrKysrKworIDUgZmlsZXMgY2hhbmdlZCwgNDIgaW5zZXJ0aW9ucygrKSwgMTA3IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvZ3BnbWUtcHRocmVhZC5wYy5pbgorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvZ3BnbWUucGMuaW4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMGRhYzZjZS4uNmE5ZTUwNyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtODY2LDYgKzg2Niw3IEBAIEFDX0NPTkZJR19GSUxFUyhNYWtlZmlsZSBzcmMvTWFrZWZpbGUKKyAgICAgICAgICAgICAgICAgc3JjL3ZlcnNpb25pbmZvLnJjCisgICAgICAgICAgICAgICAgIHNyYy9ncGdtZS5oKQorIEFDX0NPTkZJR19GSUxFUyhzcmMvZ3BnbWUtY29uZmlnLCBjaG1vZCAreCBzcmMvZ3BnbWUtY29uZmlnKQorK0FDX0NPTkZJR19GSUxFUyhzcmMvZ3BnbWUucGMgc3JjL2dwZ21lLXB0aHJlYWQucGMpCisgQUNfQ09ORklHX0ZJTEVTKGxhbmcvY3BwL01ha2VmaWxlIGxhbmcvY3BwL3NyYy9NYWtlZmlsZSkKKyBBQ19DT05GSUdfRklMRVMobGFuZy9jcHAvc3JjL0dwZ21lcHBDb25maWctdzMyLmNtYWtlLmluKQorIEFDX0NPTkZJR19GSUxFUyhsYW5nL2NwcC9zcmMvR3BnbWVwcENvbmZpZy5jbWFrZS5pbikKK2RpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0KK2luZGV4IGNlNmYxZDQuLjVmMzhmZWUgMTAwNjQ0CistLS0gYS9zcmMvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9NYWtlZmlsZS5hbQorQEAgLTE5LDEyICsxOSwxNCBAQAorICMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbgorIAorIEVYVFJBX0RJU1QgPSBncGdtZS1jb25maWcuaW4gZ3BnbWUubTQgbGliZ3BnbWUudmVycyBDaGFuZ2VMb2ctMjAxMSBcCistCSAgICAgZ3BnbWUuaC5pbiB2ZXJzaW9uaW5mby5yYy5pbiBncGdtZS5kZWYKKysJICAgICBncGdtZS5oLmluIHZlcnNpb25pbmZvLnJjLmluIGdwZ21lLmRlZiBncGdtZS5wYy5pbiBncGdtZS1wdGhyZWFkLnBjLmluCisgCisgYmluX1NDUklQVFMgPSBncGdtZS1jb25maWcKKyBtNGRhdGFkaXIgPSAkKGRhdGFkaXIpL2FjbG9jYWwKKyBtNGRhdGFfREFUQSA9IGdwZ21lLm00Cisgbm9kaXN0X2luY2x1ZGVfSEVBREVSUyA9IGdwZ21lLmgKKytwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisrcGtnY29uZmlnX0RBVEEgPSBncGdtZS5wYyBncGdtZS1wdGhyZWFkLnBjCisgCisgYmluX1BST0dSQU1TID0gZ3BnbWUtdG9vbAorIAorZGlmZiAtLWdpdCBhL3NyYy9ncGdtZS1wdGhyZWFkLnBjLmluIGIvc3JjL2dwZ21lLXB0aHJlYWQucGMuaW4KK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wNzRiYmY2CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvZ3BnbWUtcHRocmVhZC5wYy5pbgorQEAgLTAsMCArMSwxNSBAQAorK3ByZWZpeD1AcHJlZml4QAorK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKytpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorKworKyMgQVBJIGluZm8KKythcGlfdmVyc2lvbj1AR1BHTUVfQ09ORklHX0FQSV9WRVJTSU9OQAorK2hvc3Q9QEdQR01FX0NPTkZJR19IT1NUQAorKworK05hbWU6IGdwZ21lCisrRGVzY3JpcHRpb246IEdudVBHIE1hZGUgRWFzeSAoR1BHTUUpIGlzIGEgQyBsYW5ndWFnZSBsaWJyYXJ5IHRoYXQgYWxsb3dzIHRvIGFkZHN1cHBvcnQgZm9yIGNyeXB0b2dyYXBoeSB0byBhIHByb2dyYW0gKGRlcHJlY2F0ZWQpCisrVmVyc2lvbjogQFZFUlNJT05ACisrTGliczogLUwke2xpYmRpcn0gLWxncGdtZSAtbHB0aHJlYWQKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorK1JlcXVpcmVzOiBsaWJhc3N1YW4gZ3BnLWVycm9yCitkaWZmIC0tZ2l0IGEvc3JjL2dwZ21lLm00IGIvc3JjL2dwZ21lLm00CitpbmRleCA2YzJiZTQ0Li5kOGE3NWNiIDEwMDY0NAorLS0tIGEvc3JjL2dwZ21lLm00CisrKysgYi9zcmMvZ3BnbWUubTQKK0BAIC03OSw3ICs3OSw3IEBAIGRubCBjb25maWcgc2NyaXB0IGRvZXMgbm90IG1hdGNoIHRoZSBob3N0IHNwZWNpZmljYXRpb24gdGhlIHNjcmlwdAorIGRubCBpcyBhZGRlZCB0byB0aGUgZ3BnX2NvbmZpZ19zY3JpcHRfd2FybiB2YXJpYWJsZS4KKyBkbmwKKyBBQ19ERUZVTihbQU1fUEFUSF9HUEdNRV0sCistWyBBQ19SRVFVSVJFKFtfQU1fUEFUSF9HUEdNRV9DT05GSUddKWRubAorK1sKKyAgIHRtcD1pZmVsc2UoWyQxXSwgLDE6MC40LjIsJDEpCisgICBpZiBlY2hvICIkdG1wIiB8IGdyZXAgJzonID4vZGV2L251bGwgMj4vZGV2L251bGwgOyB0aGVuCisgICAgICByZXFfZ3BnbWVfYXBpPWBlY2hvICIkdG1wIiAgICAgfCBzZWQgJ3MvXCguKlwpOlwoLipcKS9cMS8nYAorQEAgLTg5LDM2ICs4OSwxMiBAQCBBQ19ERUZVTihbQU1fUEFUSF9HUEdNRV0sCisgICAgICBtaW5fZ3BnbWVfdmVyc2lvbj0iJHRtcCIKKyAgIGZpCisgCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEdQR01FIC0gdmVyc2lvbiA+PSAkbWluX2dwZ21lX3ZlcnNpb24pCistICBvaz1ubworLSAgaWYgdGVzdCAiJEdQR01FX0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKy0gICAgcmVxX21ham9yPWBlY2hvICRtaW5fZ3BnbWVfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMS8nYAorLSAgICByZXFfbWlub3I9YGVjaG8gJG1pbl9ncGdtZV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wyLydgCistICAgIHJlcV9taWNybz1gZWNobyAkbWluX2dwZ21lX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDMvJ2AKKy0gICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWFqb3IiIC1ndCAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgIG9rPXllcworLSAgICBlbHNlCistICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9tYWpvciIgLWVxICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pbm9yIiAtZ3QgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pbm9yIiAtZXEgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pY3JvIiAtZ2UgIiRyZXFfbWljcm8iOyB0aGVuCistICAgICAgICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICBmaQorLSAgICAgICAgZmkKKy0gICAgZmkKKy0gIGZpCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhHUEdNRSwgW2dwZ21lID49ICRtaW5fZ3BnbWVfdmVyc2lvbl0sIFtvaz15ZXNdLCBbb2s9bm9dKQorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgd2UgaGF2ZSBhIHJlY2VudCBHUEdNRSwgd2Ugc2hvdWxkIGFsc28gY2hlY2sgdGhhdCB0aGUKKyAgICAgICMgQVBJIGlzIGNvbXBhdGlibGUuCisgICAgICBpZiB0ZXN0ICIkcmVxX2dwZ21lX2FwaSIgLWd0IDAgOyB0aGVuCistICAgICAgICB0bXA9YCRHUEdNRV9DT05GSUcgLS1hcGktdmVyc2lvbiAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCisrICAgICAgICB0bXA9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9YXBpX3ZlcnNpb24gZ3BnbWUgMj4vZGV2L251bGwgfHwgZWNobyAwYAorICAgICAgICAgaWYgdGVzdCAiJHRtcCIgLWd0IDAgOyB0aGVuCisgICAgICAgICAgICBpZiB0ZXN0ICIkcmVxX2dwZ21lX2FwaSIgLW5lICIkdG1wIiA7IHRoZW4KKyAgICAgICAgICAgICAgb2s9bm8KK0BAIC0xMjcsMTkgKzEwMywxMSBAQCBBQ19ERUZVTihbQU1fUEFUSF9HUEdNRV0sCisgICAgICBmaQorICAgZmkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIEdQR01FX0NGTEFHUz1gJEdQR01FX0NPTkZJRyAtLWNmbGFnc2AKKy0gICAgR1BHTUVfTElCUz1gJEdQR01FX0NPTkZJRyAtLWxpYnNgCistICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQorICAgICBfQU1fUEFUSF9HUEdNRV9DT05GSUdfSE9TVF9DSEVDSworICAgZWxzZQorLSAgICBHUEdNRV9DRkxBR1M9IiIKKy0gICAgR1BHTUVfTElCUz0iIgorLSAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorICAgZmkKKy0gIEFDX1NVQlNUKEdQR01FX0NGTEFHUykKKy0gIEFDX1NVQlNUKEdQR01FX0xJQlMpCisgXSkKKyAKKyBkbmwgQU1fUEFUSF9HUEdNRV9QVEhSRUFEKFtNSU5JTVVNLVZFUlNJT04sCitAQCAtMTQ4LDcgKzExNiw3IEBAIGRubCBUZXN0IGZvciBsaWJncGdtZSBhbmQgZGVmaW5lIEdQR01FX1BUSFJFQURfQ0ZMQUdTCisgZG5sICBhbmQgR1BHTUVfUFRIUkVBRF9MSUJTLgorIGRubAorIEFDX0RFRlVOKFtBTV9QQVRIX0dQR01FX1BUSFJFQURdLAorLVsgQUNfUkVRVUlSRShbX0FNX1BBVEhfR1BHTUVfQ09ORklHXSlkbmwKKytbCisgICB0bXA9aWZlbHNlKFskMV0sICwxOjAuNC4yLCQxKQorICAgaWYgZWNobyAiJHRtcCIgfCBncmVwICc6JyA+L2Rldi9udWxsIDI+L2Rldi9udWxsIDsgdGhlbgorICAgICAgcmVxX2dwZ21lX2FwaT1gZWNobyAiJHRtcCIgICAgIHwgc2VkICdzL1woLipcKTpcKC4qXCkvXDEvJ2AKK0BAIC0xNTgsMzggKzEyNiwxMiBAQCBBQ19ERUZVTihbQU1fUEFUSF9HUEdNRV9QVEhSRUFEXSwKKyAgICAgIG1pbl9ncGdtZV92ZXJzaW9uPSIkdG1wIgorICAgZmkKKyAKKy0gIEFDX01TR19DSEVDS0lORyhmb3IgR1BHTUUgcHRocmVhZCAtIHZlcnNpb24gPj0gJG1pbl9ncGdtZV92ZXJzaW9uKQorLSAgb2s9bm8KKy0gIGlmIHRlc3QgIiRHUEdNRV9DT05GSUciICE9ICJubyIgOyB0aGVuCistICAgIGlmIGAkR1BHTUVfQ09ORklHIC0tdGhyZWFkPXB0aHJlYWQgMj4gL2Rldi9udWxsYCA7IHRoZW4KKy0gICAgICByZXFfbWFqb3I9YGVjaG8gJG1pbl9ncGdtZV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wxLydgCistICAgICAgcmVxX21pbm9yPWBlY2hvICRtaW5fZ3BnbWVfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMi8nYAorLSAgICAgIHJlcV9taWNybz1gZWNobyAkbWluX2dwZ21lX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDMvJ2AKKy0gICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9tYWpvciIgLWd0ICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgb2s9eWVzCistICAgICAgZWxzZQorLSAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWFqb3IiIC1lcSAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWlub3IiIC1ndCAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgZWxzZQorLSAgICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pbm9yIiAtZXEgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9taWNybyIgLWdlICIkcmVxX21pY3JvIjsgdGhlbgorLSAgICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgZmkKKy0gICAgICAgICAgZmkKKy0gICAgICAgIGZpCistICAgICAgZmkKKy0gICAgZmkKKy0gIGZpCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhHUEdNRV9QVEhSRUFELCBbZ3BnbWUtcHRocmVhZCA+PSAkbWluX2dwZ21lX3ZlcnNpb25dLCBbb2s9eWVzXSwgW29rPW5vXSkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCisgICAgICAjIElmIHdlIGhhdmUgYSByZWNlbnQgR1BHTUUsIHdlIHNob3VsZCBhbHNvIGNoZWNrIHRoYXQgdGhlCisgICAgICAjIEFQSSBpcyBjb21wYXRpYmxlLgorICAgICAgaWYgdGVzdCAiJHJlcV9ncGdtZV9hcGkiIC1ndCAwIDsgdGhlbgorLSAgICAgICAgdG1wPWAkR1BHTUVfQ09ORklHIC0tYXBpLXZlcnNpb24gMj4vZGV2L251bGwgfHwgZWNobyAwYAorKyAgICAgICAgdG1wPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWFwaV92ZXJzaW9uIGdwZ21lLXB0aHJlYWQgMj4vZGV2L251bGwgfHwgZWNobyAwYAorICAgICAgICAgaWYgdGVzdCAiJHRtcCIgLWd0IDAgOyB0aGVuCisgICAgICAgICAgICBpZiB0ZXN0ICIkcmVxX2dwZ21lX2FwaSIgLW5lICIkdG1wIiA7IHRoZW4KKyAgICAgICAgICAgICAgb2s9bm8KK0BAIC0xOTgsMTkgKzE0MCwxMSBAQCBBQ19ERUZVTihbQU1fUEFUSF9HUEdNRV9QVEhSRUFEXSwKKyAgICAgIGZpCisgICBmaQorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgR1BHTUVfUFRIUkVBRF9DRkxBR1M9YCRHUEdNRV9DT05GSUcgLS10aHJlYWQ9cHRocmVhZCAtLWNmbGFnc2AKKy0gICAgR1BHTUVfUFRIUkVBRF9MSUJTPWAkR1BHTUVfQ09ORklHIC0tdGhyZWFkPXB0aHJlYWQgLS1saWJzYAorLSAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKKyAgICAgX0FNX1BBVEhfR1BHTUVfQ09ORklHX0hPU1RfQ0hFQ0sKKyAgIGVsc2UKKy0gICAgR1BHTUVfUFRIUkVBRF9DRkxBR1M9IiIKKy0gICAgR1BHTUVfUFRIUkVBRF9MSUJTPSIiCistICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCisgICBmaQorLSAgQUNfU1VCU1QoR1BHTUVfUFRIUkVBRF9DRkxBR1MpCistICBBQ19TVUJTVChHUEdNRV9QVEhSRUFEX0xJQlMpCisgXSkKKyAKKyAKK0BAIC0yMjksMzYgKzE2MywxMiBAQCBBQ19ERUZVTihbQU1fUEFUSF9HUEdNRV9HTElCXSwKKyAgICAgIG1pbl9ncGdtZV92ZXJzaW9uPSIkdG1wIgorICAgZmkKKyAKKy0gIEFDX01TR19DSEVDS0lORyhmb3IgR1BHTUUgLSB2ZXJzaW9uID49ICRtaW5fZ3BnbWVfdmVyc2lvbikKKy0gIG9rPW5vCistICBpZiB0ZXN0ICIkR1BHTUVfQ09ORklHIiAhPSAibm8iIDsgdGhlbgorLSAgICByZXFfbWFqb3I9YGVjaG8gJG1pbl9ncGdtZV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wxLydgCistICAgIHJlcV9taW5vcj1gZWNobyAkbWluX2dwZ21lX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDIvJ2AKKy0gICAgcmVxX21pY3JvPWBlY2hvICRtaW5fZ3BnbWVfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMy8nYAorLSAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9tYWpvciIgLWd0ICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgb2s9eWVzCistICAgIGVsc2UKKy0gICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21ham9yIiAtZXEgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWlub3IiIC1ndCAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWlub3IiIC1lcSAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWljcm8iIC1nZSAiJHJlcV9taWNybyI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgIGZpCistICAgICAgICBmaQorLSAgICBmaQorLSAgZmkKKysgIFBLR19DSEVDS19NT0RVTEVTKEdQR01FX0dMSUIsIFtncGdtZSA+PSAkbWluX2dwZ21lX3ZlcnNpb24gZ2xpYi0yLjBdLCBbb2s9eWVzXSwgW29rPW5vXSkgIAorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgd2UgaGF2ZSBhIHJlY2VudCBHUEdNRSwgd2Ugc2hvdWxkIGFsc28gY2hlY2sgdGhhdCB0aGUKKyAgICAgICMgQVBJIGlzIGNvbXBhdGlibGUuCisgICAgICBpZiB0ZXN0ICIkcmVxX2dwZ21lX2FwaSIgLWd0IDAgOyB0aGVuCistICAgICAgICB0bXA9YCRHUEdNRV9DT05GSUcgLS1hcGktdmVyc2lvbiAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCisrICAgICAgICB0bXA9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9YXBpX3ZlcnNpb24gZ3BnbWUgMj4vZGV2L251bGwgfHwgZWNobyAwYAorICAgICAgICAgaWYgdGVzdCAiJHRtcCIgLWd0IDAgOyB0aGVuCisgICAgICAgICAgICBpZiB0ZXN0ICIkcmVxX2dwZ21lX2FwaSIgLW5lICIkdG1wIiA7IHRoZW4KKyAgICAgICAgICAgICAgb2s9bm8KK0BAIC0yNjcsMTcgKzE3Nyw5IEBAIEFDX0RFRlVOKFtBTV9QQVRIX0dQR01FX0dMSUJdLAorICAgICAgZmkKKyAgIGZpCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorLSAgICBHUEdNRV9HTElCX0NGTEFHUz1gJEdQR01FX0NPTkZJRyAtLWdsaWIgLS1jZmxhZ3NgCistICAgIEdQR01FX0dMSUJfTElCUz1gJEdQR01FX0NPTkZJRyAtLWdsaWIgLS1saWJzYAorLSAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKKyAgICAgX0FNX1BBVEhfR1BHTUVfQ09ORklHX0hPU1RfQ0hFQ0sKKyAgIGVsc2UKKy0gICAgR1BHTUVfR0xJQl9DRkxBR1M9IiIKKy0gICAgR1BHTUVfR0xJQl9MSUJTPSIiCistICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCisgICBmaQorLSAgQUNfU1VCU1QoR1BHTUVfR0xJQl9DRkxBR1MpCistICBBQ19TVUJTVChHUEdNRV9HTElCX0xJQlMpCisgXSkKK2RpZmYgLS1naXQgYS9zcmMvZ3BnbWUucGMuaW4gYi9zcmMvZ3BnbWUucGMuaW4KK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iNjk1MzlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvZ3BnbWUucGMuaW4KK0BAIC0wLDAgKzEsMTUgQEAKKytwcmVmaXg9QHByZWZpeEAKKytleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACisrbGliZGlyPUBsaWJkaXJACisraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKysKKysjIEFQSSBpbmZvCisrYXBpX3ZlcnNpb249QEdQR01FX0NPTkZJR19BUElfVkVSU0lPTkAKKytob3N0PUBHUEdNRV9DT05GSUdfSE9TVEAKKysKKytOYW1lOiBncGdtZQorK0Rlc2NyaXB0aW9uOiBHbnVQRyBNYWRlIEVhc3kgKEdQR01FKSBpcyBhIEMgbGFuZ3VhZ2UgbGlicmFyeSB0aGF0IGFsbG93cyB0byBhZGRzdXBwb3J0IGZvciBjcnlwdG9ncmFwaHkgdG8gYSBwcm9ncmFtLgorK1ZlcnNpb246IEBWRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1sZ3BnbWUKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorK1JlcXVpcmVzOiBsaWJhc3N1YW4gZ3BnLWVycm9yCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lLzAwMDItZ3BnbWUtbGFuZy1weXRob24tZ3BnLWVycm9yLWNvbmZpZy1zaG91bGQtbm90LWJlLXVzZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZS8wMDAyLWdwZ21lLWxhbmctcHl0aG9uLWdwZy1lcnJvci1jb25maWctc2hvdWxkLW5vdC1iZS11c2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFmOGM5MQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZS8wMDAyLWdwZ21lLWxhbmctcHl0aG9uLWdwZy1lcnJvci1jb25maWctc2hvdWxkLW5vdC1iZS11c2UucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAorRnJvbSBmYjE2NWM5YmQ5NmFjYThjOWVlM2U0NTA5YzliNmUzNWQyMzhhZDJlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxNiBBdWcgMjAxNyAwMjowMjo0NyAtMDQwMAorU3ViamVjdDogW1BBVENIIDIvNV0gZ3BnbWUvbGFuZy9weXRob246IGdwZy1lcnJvci1jb25maWcgc2hvdWxkIG5vdCBiZSB1c2VkLgorCitncGctZXJyb3ItY29uZmlnIHdhcyBtb2RpZmllZCBieSBPRSB0byBhbHdheXMgcmV0dXJuIGFuIGVycm9yLiAgU28gd2Ugd2FudAordG8gZmluZCBhbiBhbHRlcm5hdGl2ZSB3YXkgdG8gcmV0cmlldmUgd2hhdGV2ZXIgaXQgaXMgd2UgbmVlZC4gIEl0IHR1cm5zCitvdXQgdGhhdCB0aGUgc3lzdGVtIGlzIGp1c3QgdHJ5aW5nIHRvIGZpbmQgdGhlIHBhdGggdG8gdGhlIGdwZy1lcnJvci5oLCB3aGljaAord2UgY2FuIHB1bGwgaW4gZnJvbSB0aGUgU1RBR0lOR19JTkMgZW52aXJvbm1lbnQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY2hhbmdlcyBhcmUgc3BlY2lmaWMgdG8gT0VdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworUmViYXNlIHRvIDEuOS4wCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxhbmcvcHl0aG9uL3NldHVwLnB5LmluIHwgMTUgKystLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9sYW5nL3B5dGhvbi9zZXR1cC5weS5pbiBiL2xhbmcvcHl0aG9uL3NldHVwLnB5LmluCitpbmRleCBiZjRlZmEzLi43YzM0NDg3IDEwMDc1NQorLS0tIGEvbGFuZy9weXRob24vc2V0dXAucHkuaW4KKysrKyBiL2xhbmcvcHl0aG9uL3NldHVwLnB5LmluCitAQCAtMjQsNyArMjQsNiBAQCBpbXBvcnQgZ2xvYgorIGltcG9ydCBzdWJwcm9jZXNzCisgCisgIyBPdXQtb2YtdHJlZSBidWlsZCBvZiB0aGUgZ3BnIGJpbmRpbmdzLgorLWdwZ19lcnJvcl9jb25maWcgPSBbImdwZy1lcnJvci1jb25maWciXQorIGdwZ21lX2NvbmZpZ19mbGFncyA9IFsiLS10aHJlYWQ9cHRocmVhZCJdCisgZ3BnbWVfY29uZmlnID0gWyJncGdtZS1jb25maWciXSArIGdwZ21lX2NvbmZpZ19mbGFncworIGdwZ21lX2ggPSAiIgorQEAgLTUyLDEzICs1MSw2IEBAIGVsc2U6CisgICAgIGRldm51bGwgPSBvcGVuKG9zLmRldm51bGwsICJ3IikKKyAKKyB0cnk6CistICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChncGdfZXJyb3JfY29uZmlnICsgWyctLXZlcnNpb24nXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1kZXZudWxsKQorLWV4Y2VwdDoKKy0gICAgc3lzLmV4aXQoIkNvdWxkIG5vdCBmaW5kIGdwZy1lcnJvci1jb25maWcuICAiICsKKy0gICAgICAgICAgICAgIlBsZWFzZSBpbnN0YWxsIHRoZSBsaWJncGctZXJyb3IgZGV2ZWxvcG1lbnQgcGFja2FnZS4iKQorLQorLXRyeToKKyAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKGdwZ21lX2NvbmZpZyArIFsnLS12ZXJzaW9uJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9ZGV2bnVsbCkKKyBleGNlcHQ6CitAQCAtODEsMTIgKzczLDkgQEAgaWYgbm90IChtYWpvciA+IDEgb3IgKG1ham9yID09IDEgYW5kIG1pbm9yID49IDcpKToKKyBpZiBub3QgZ3BnbWVfaDoKKyAgICAgZ3BnbWVfaCA9IG9zLnBhdGguam9pbihnZXRjb25maWcoInByZWZpeCIpWzBdLCAiaW5jbHVkZSIsICJncGdtZS5oIikKKyAKKy1ncGdfZXJyb3JfcHJlZml4ID0gZ2V0Y29uZmlnKCJwcmVmaXgiLCBjb25maWc9Z3BnX2Vycm9yX2NvbmZpZylbMF0KKy1ncGdfZXJyb3JfaCA9IG9zLnBhdGguam9pbihncGdfZXJyb3JfcHJlZml4LCAiaW5jbHVkZSIsICJncGctZXJyb3IuaCIpCisrZ3BnX2Vycm9yX2ggPSBvcy5wYXRoLmpvaW4ob3MuZ2V0ZW52KCdTVEFHSU5HX0lOQ0RJUicpLCAiZ3BnLWVycm9yLmgiKQorIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhncGdfZXJyb3JfaCk6CistICAgIGdwZ19lcnJvcl9oID0gXAorLSAgICAgICAgZ2xvYi5nbG9iKG9zLnBhdGguam9pbihncGdfZXJyb3JfcHJlZml4LCAiaW5jbHVkZSIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIqIiwgImdwZy1lcnJvci5oIikpWzBdCisrICAgIHN5cy5leGl0KCJncGdfZXJyb3JfaCBub3QgZm91bmQ6ICVzIiAlIGdwZ19lcnJvcl9oKQorIAorIHByaW50KCJCdWlsZGluZyBweXRob24gZ3BnIG1vZHVsZSB1c2luZyB7fSBhbmQge30uIi5mb3JtYXQoZ3BnbWVfaCwgZ3BnX2Vycm9yX2gpKQorIAorLS0gCisyLjguMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvMDAwMy1Db3JyZWN0bHktaW5zdGFsbC1weXRob24tbW9kdWxlcy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZS8wMDAzLUNvcnJlY3RseS1pbnN0YWxsLXB5dGhvbi1tb2R1bGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzODMzMTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvMDAwMy1Db3JyZWN0bHktaW5zdGFsbC1weXRob24tbW9kdWxlcy5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDYyMzMyZWVjNzUyZGQ3OTBmNGRkMDcxZGZiMGRiZTg2YmUzNzcyMDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTYgQXVnIDIwMTcgMDI6MDU6MzQgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSCAzLzVdIENvcnJlY3RseSBpbnN0YWxsIHB5dGhvbiBtb2R1bGVzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2UtY29yZSBzcGVjaWZpY10KK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorCitSZWJhc2UgdG8gMS45LjAKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgbGFuZy9weXRob24vTWFrZWZpbGUuYW0gfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2xhbmcvcHl0aG9uL01ha2VmaWxlLmFtIGIvbGFuZy9weXRob24vTWFrZWZpbGUuYW0KK2luZGV4IGQ5MWVhZDkuLjY3ZjdjZGMgMTAwNjQ0CistLS0gYS9sYW5nL3B5dGhvbi9NYWtlZmlsZS5hbQorKysrIGIvbGFuZy9weXRob24vTWFrZWZpbGUuYW0KK0BAIC0xMDYsNiArMTA2LDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsOgorIAkgIGNkIHB5dGhvbiQke1ZFUlNJT059LWdwZyA7IFwKKyAJICAkJFBZVEhPTiBzZXR1cC5weSBpbnN0YWxsIFwKKyAJICAtLXByZWZpeCAkKERFU1RESVIpJChwcmVmaXgpIFwKKysJICAtLWluc3RhbGwtbGliPSQoREVTVERJUikke3B5dGhvbmRpcn0gXAorIAkgIC0tcmVjb3JkIGZpbGVzLnR4dCBcCisgCSAgLS12ZXJib3NlIDsgXAorIAkgIGNhdCBmaWxlcy50eHQgPj4gLi4vaW5zdGFsbF9maWxlcy50eHQgOyBcCistLSAKKzIuOC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZS8wMDA0LXB5dGhvbi1pbXBvcnQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvMDAwNC1weXRob24taW1wb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMDcxMDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvMDAwNC1weXRob24taW1wb3J0LnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gY2NiZjAyOGVlYTg4MTVkM2IxNmQ2YzM0YjUyNzI1M2E2YjEwOGVjMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitEYXRlOiBXZWQsIDE2IEF1ZyAyMDE3IDAyOjA2OjQ1IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0ggNC81XSBweXRob24gaW1wb3J0CisKK0Rvbid0IGNoZWNrIGZvciBvdXRwdXQgb24gc3RkZXJyIHRvIGtub3cgaWYgYW4gaW1wb3J0IHdvcmtlZCwgaG9zdCBpbnB1dHJjIGFuZAorc3lzcm9vdCByZWFkbGluZSBjYW4gY2F1c2Ugd2FybmluZ3Mgb24gc3RkZXJyLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IChmcm9tIGF1dG9jb25mLWFyY2hpdmUgODgzYTJhYmQpCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitSZWJhc2UgdG8gMS45LjAKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgbTQvYXhfcHl0aG9uX2RldmVsLm00IHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbTQvYXhfcHl0aG9uX2RldmVsLm00IGIvbTQvYXhfcHl0aG9uX2RldmVsLm00CitpbmRleCBiOTkwZDViLi4zMThiMDg5IDEwMDY0NAorLS0tIGEvbTQvYXhfcHl0aG9uX2RldmVsLm00CisrKysgYi9tNC9heF9weXRob25fZGV2ZWwubTQKK0BAIC0xMzcsNyArMTM3LDcgQEAgdmFyaWFibGUgdG8gY29uZmlndXJlLiBTZWUgYGBjb25maWd1cmUgLS1oZWxwJycgZm9yIHJlZmVyZW5jZS4KKyAJIworIAlBQ19NU0dfQ0hFQ0tJTkcoW2ZvciB0aGUgZGlzdHV0aWxzIFB5dGhvbiBwYWNrYWdlXSkKKyAJYWNfZGlzdHV0aWxzX3Jlc3VsdD1gJFBZVEhPTiAtYyAiaW1wb3J0IGRpc3R1dGlscyIgMj4mMWAKKy0JaWYgdGVzdCAteiAiJGFjX2Rpc3R1dGlsc19yZXN1bHQiOyB0aGVuCisrCWlmIHRlc3QgJD8gLWVxIDA7IHRoZW4KKyAJCUFDX01TR19SRVNVTFQoW3llc10pCisgCWVsc2UKKyAJCUFDX01TR19SRVNVTFQoW25vXSkKKy0tIAorMi44LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lLzAwMDUtZ3BnbWUtY29uZmlnLXNraXAtYWxsLWxpYi1vci11c3ItbGliLWRpcmVjdG9yaWVzLWluLS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZS8wMDA1LWdwZ21lLWNvbmZpZy1za2lwLWFsbC1saWItb3ItdXNyLWxpYi1kaXJlY3Rvcmllcy1pbi0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E2Y2M3YgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZS8wMDA1LWdwZ21lLWNvbmZpZy1za2lwLWFsbC1saWItb3ItdXNyLWxpYi1kaXJlY3Rvcmllcy1pbi0ucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSAwNjRhZTQ0NDFlMmMxMTMyOTc0OGExODE1Nzk4OGY5ZTk1M2Y5NzUyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDEzIEFwciAyMDE3IDE2OjQwOjI3ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggNS81XSBncGdtZS1jb25maWc6IHNraXAgYWxsIC9saWIqIG9yIC91c3IvbGliKiBkaXJlY3RvcmllcyBpbgorIG91dHB1dAorCitUaGUgbG9naWMgd2FzIG5vdCB3b3JraW5nIGluIG11bHRpbGliIHNldHVwcyB3aGljaCB1c2Ugb3RoZXIKK2RpcmVjdG9yeSBuYW1lcyB0aGFuIHBsYWluIC9saWIgb3IgL3Vzci9saWIuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2UtY29yZSBzcGVjaWZpY10KK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorLS0tCisgc3JjL2dwZ21lLWNvbmZpZy5pbiB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9ncGdtZS1jb25maWcuaW4gYi9zcmMvZ3BnbWUtY29uZmlnLmluCitpbmRleCBhNGQxNTJlLi44MzQyODY1IDEwMDY0NAorLS0tIGEvc3JjL2dwZ21lLWNvbmZpZy5pbgorKysrIGIvc3JjL2dwZ21lLWNvbmZpZy5pbgorQEAgLTE1NCw3ICsxNTQsNyBAQCB3aGlsZSB0ZXN0ICQjIC1ndCAwOyBkbworICAgICAgICAgICAgIGZvciBpIGluICRsaWJzICR0bXBfbCAkYXNzdWFuX2xpYnMgJGdwZ19lcnJvcl9saWJzICR0bXBfeDsgZG8KKyAgICAgICAgICAgICAgIHNraXA9bm8KKyAgICAgICAgICAgICAgIGNhc2UgJGkgaW4KKy0gICAgICAgICAgICAgICAgICAtTC91c3IvbGlifC1ML2xpYikKKysgICAgICAgICAgICAgICAgICAtTC91c3IvbGliKnwtTC9saWIqKQorICAgICAgICAgICAgICAgICAgICAgICBza2lwPXllcworICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgIC1MKnwtbCopCistLSAKKzIuOC4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZS9wa2djb25maWcucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvcGtnY29uZmlnLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDFjYWJmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZS9wa2djb25maWcucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyOTUgKzAsMCBAQAotVXBkYXRlIGdwZ21lIHRvIHVzZSBwa2djb25maWcgaW5zdGVhZCBvZiAtY29uZmlnIGZpbGVzIHNpbmNlIGl0cwotc2ltcGxlciBhbmQgbGVzcyBlcnJvciBwcm9uZSB3aGVuIGNyb3NzIGNvbXBpbGluZy4KLQotVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQgW1Vwc3RyZWFtIG5vdCBpbnRlcmVzdGVkIGluIHBrZy1jb25maWcgc3VwcG9ydF0KLVJQIDIwMTUvNC8xNwotCi1SZWJhc2UgdG8gMS44LjAKLVNpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KLS0tLQotIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgIHwgICAxICsKLSBzcmMvTWFrZWZpbGUuYW0gICAgICAgICB8ICAgNCArLQotIHNyYy9ncGdtZS1wdGhyZWFkLnBjLmluIHwgIDE1ICsrKysrKysKLSBzcmMvZ3BnbWUubTQgICAgICAgICAgICB8IDExNCArKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBzcmMvZ3BnbWUucGMuaW4gICAgICAgICB8ICAxNSArKysrKysrCi0gNSBmaWxlcyBjaGFuZ2VkLCA0MiBpbnNlcnRpb25zKCspLCAxMDcgZGVsZXRpb25zKC0pCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9ncGdtZS1wdGhyZWFkLnBjLmluCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9ncGdtZS5wYy5pbgotCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCAwYTY3YjQ4Li5lNDAyZGQzIDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC04NzUsNiArODc1LDcgQEAgQUNfQ09ORklHX0ZJTEVTKE1ha2VmaWxlIHNyYy9NYWtlZmlsZQotICAgICAgICAgICAgICAgICBzcmMvdmVyc2lvbmluZm8ucmMKLSAgICAgICAgICAgICAgICAgc3JjL2dwZ21lLmgpCi0gQUNfQ09ORklHX0ZJTEVTKHNyYy9ncGdtZS1jb25maWcsIGNobW9kICt4IHNyYy9ncGdtZS1jb25maWcpCi0rQUNfQ09ORklHX0ZJTEVTKHNyYy9ncGdtZS5wYyBzcmMvZ3BnbWUtcHRocmVhZC5wYykKLSBBQ19DT05GSUdfRklMRVMobGFuZy9jcHAvTWFrZWZpbGUgbGFuZy9jcHAvc3JjL01ha2VmaWxlKQotIEFDX0NPTkZJR19GSUxFUyhsYW5nL2NwcC9zcmMvR3BnbWVwcENvbmZpZy13MzIuY21ha2UuaW4pCi0gQUNfQ09ORklHX0ZJTEVTKGxhbmcvY3BwL3NyYy9HcGdtZXBwQ29uZmlnLmNtYWtlLmluKQotZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5hbSBiL3NyYy9NYWtlZmlsZS5hbQotaW5kZXggY2U2ZjFkNC4uNWYzOGZlZSAxMDA2NDQKLS0tLSBhL3NyYy9NYWtlZmlsZS5hbQotKysrIGIvc3JjL01ha2VmaWxlLmFtCi1AQCAtMTksMTIgKzE5LDE0IEBACi0gIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCi0gCi0gRVhUUkFfRElTVCA9IGdwZ21lLWNvbmZpZy5pbiBncGdtZS5tNCBsaWJncGdtZS52ZXJzIENoYW5nZUxvZy0yMDExIFwKLS0JICAgICBncGdtZS5oLmluIHZlcnNpb25pbmZvLnJjLmluIGdwZ21lLmRlZgotKwkgICAgIGdwZ21lLmguaW4gdmVyc2lvbmluZm8ucmMuaW4gZ3BnbWUuZGVmIGdwZ21lLnBjLmluIGdwZ21lLXB0aHJlYWQucGMuaW4KLSAKLSBiaW5fU0NSSVBUUyA9IGdwZ21lLWNvbmZpZwotIG00ZGF0YWRpciA9ICQoZGF0YWRpcikvYWNsb2NhbAotIG00ZGF0YV9EQVRBID0gZ3BnbWUubTQKLSBub2Rpc3RfaW5jbHVkZV9IRUFERVJTID0gZ3BnbWUuaAotK3BrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9wa2djb25maWcKLStwa2djb25maWdfREFUQSA9IGdwZ21lLnBjIGdwZ21lLXB0aHJlYWQucGMKLSAKLSBiaW5fUFJPR1JBTVMgPSBncGdtZS10b29sCi0gCi1kaWZmIC0tZ2l0IGEvc3JjL2dwZ21lLXB0aHJlYWQucGMuaW4gYi9zcmMvZ3BnbWUtcHRocmVhZC5wYy5pbgotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjk4MGE0OGUKLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9ncGdtZS1wdGhyZWFkLnBjLmluCi1AQCAtMCwwICsxLDE1IEBACi0rcHJlZml4PUBwcmVmaXhACi0rZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAotK2xpYmRpcj1AbGliZGlyQAotK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACi0rCi0rIyBBUEkgaW5mbwotK2FwaV92ZXJzaW9uPUBHUEdNRV9DT05GSUdfQVBJX1ZFUlNJT05ACi0raG9zdD1AR1BHTUVfQ09ORklHX0hPU1RACi0rCi0rTmFtZTogZ3BnbWUKLStEZXNjcmlwdGlvbjogR251UEcgTWFkZSBFYXN5IChHUEdNRSkgaXMgYSBDIGxhbmd1YWdlIGxpYnJhcnkgdGhhdCBhbGxvd3MgdG8gYWRkc3VwcG9ydCBmb3IgY3J5cHRvZ3JhcGh5IHRvIGEgcHJvZ3JhbSAoZGVwcmVjYXRlZCkKLStWZXJzaW9uOiBAVkVSU0lPTkAKLStMaWJzOiAtTCR7bGliZGlyfSAtbGdwZ21lIC1scHRocmVhZAotK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9Ci0rUmVxdWlyZXM6IGxpYmFzc3VhbiBncGctZXJyb3IKLWRpZmYgLS1naXQgYS9zcmMvZ3BnbWUubTQgYi9zcmMvZ3BnbWUubTQKLWluZGV4IDZjMmJlNDQuLmQ4YTc1Y2IgMTAwNjQ0Ci0tLS0gYS9zcmMvZ3BnbWUubTQKLSsrKyBiL3NyYy9ncGdtZS5tNAotQEAgLTc5LDcgKzc5LDcgQEAgZG5sIGNvbmZpZyBzY3JpcHQgZG9lcyBub3QgbWF0Y2ggdGhlIGhvc3Qgc3BlY2lmaWNhdGlvbiB0aGUgc2NyaXB0Ci0gZG5sIGlzIGFkZGVkIHRvIHRoZSBncGdfY29uZmlnX3NjcmlwdF93YXJuIHZhcmlhYmxlLgotIGRubAotIEFDX0RFRlVOKFtBTV9QQVRIX0dQR01FXSwKLS1bIEFDX1JFUVVJUkUoW19BTV9QQVRIX0dQR01FX0NPTkZJR10pZG5sCi0rWwotICAgdG1wPWlmZWxzZShbJDFdLCAsMTowLjQuMiwkMSkKLSAgIGlmIGVjaG8gIiR0bXAiIHwgZ3JlcCAnOicgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCA7IHRoZW4KLSAgICAgIHJlcV9ncGdtZV9hcGk9YGVjaG8gIiR0bXAiICAgICB8IHNlZCAncy9cKC4qXCk6XCguKlwpL1wxLydgCi1AQCAtODksMzYgKzg5LDEyIEBAIEFDX0RFRlVOKFtBTV9QQVRIX0dQR01FXSwKLSAgICAgIG1pbl9ncGdtZV92ZXJzaW9uPSIkdG1wIgotICAgZmkKLSAKLS0gIEFDX01TR19DSEVDS0lORyhmb3IgR1BHTUUgLSB2ZXJzaW9uID49ICRtaW5fZ3BnbWVfdmVyc2lvbikKLS0gIG9rPW5vCi0tICBpZiB0ZXN0ICIkR1BHTUVfQ09ORklHIiAhPSAibm8iIDsgdGhlbgotLSAgICByZXFfbWFqb3I9YGVjaG8gJG1pbl9ncGdtZV92ZXJzaW9uIHwgXAotLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wxLydgCi0tICAgIHJlcV9taW5vcj1gZWNobyAkbWluX2dwZ21lX3ZlcnNpb24gfCBcCi0tICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDIvJ2AKLS0gICAgcmVxX21pY3JvPWBlY2hvICRtaW5fZ3BnbWVfdmVyc2lvbiB8IFwKLS0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMy8nYAotLSAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9tYWpvciIgLWd0ICIkcmVxX21ham9yIjsgdGhlbgotLSAgICAgICAgb2s9eWVzCi0tICAgIGVsc2UKLS0gICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21ham9yIiAtZXEgIiRyZXFfbWFqb3IiOyB0aGVuCi0tICAgICAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWlub3IiIC1ndCAiJHJlcV9taW5vciI7IHRoZW4KLS0gICAgICAgICAgICAgICBvaz15ZXMKLS0gICAgICAgICAgICBlbHNlCi0tICAgICAgICAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWlub3IiIC1lcSAiJHJlcV9taW5vciI7IHRoZW4KLS0gICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWljcm8iIC1nZSAiJHJlcV9taWNybyI7IHRoZW4KLS0gICAgICAgICAgICAgICAgICAgICBvaz15ZXMKLS0gICAgICAgICAgICAgICAgICAgZmkKLS0gICAgICAgICAgICAgICBmaQotLSAgICAgICAgICAgIGZpCi0tICAgICAgICBmaQotLSAgICBmaQotLSAgZmkKLSsgIFBLR19DSEVDS19NT0RVTEVTKEdQR01FLCBbZ3BnbWUgPj0gJG1pbl9ncGdtZV92ZXJzaW9uXSwgW29rPXllc10sIFtvaz1ub10pCi0gICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgotICAgICAgIyBJZiB3ZSBoYXZlIGEgcmVjZW50IEdQR01FLCB3ZSBzaG91bGQgYWxzbyBjaGVjayB0aGF0IHRoZQotICAgICAgIyBBUEkgaXMgY29tcGF0aWJsZS4KLSAgICAgIGlmIHRlc3QgIiRyZXFfZ3BnbWVfYXBpIiAtZ3QgMCA7IHRoZW4KLS0gICAgICAgIHRtcD1gJEdQR01FX0NPTkZJRyAtLWFwaS12ZXJzaW9uIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKLSsgICAgICAgIHRtcD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1hcGlfdmVyc2lvbiBncGdtZSAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCi0gICAgICAgICBpZiB0ZXN0ICIkdG1wIiAtZ3QgMCA7IHRoZW4KLSAgICAgICAgICAgIGlmIHRlc3QgIiRyZXFfZ3BnbWVfYXBpIiAtbmUgIiR0bXAiIDsgdGhlbgotICAgICAgICAgICAgICBvaz1ubwotQEAgLTEyNywxOSArMTAzLDExIEBAIEFDX0RFRlVOKFtBTV9QQVRIX0dQR01FXSwKLSAgICAgIGZpCi0gICBmaQotICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KLS0gICAgR1BHTUVfQ0ZMQUdTPWAkR1BHTUVfQ09ORklHIC0tY2ZsYWdzYAotLSAgICBHUEdNRV9MSUJTPWAkR1BHTUVfQ09ORklHIC0tbGlic2AKLS0gICAgQUNfTVNHX1JFU1VMVCh5ZXMpCi0gICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCi0gICAgIF9BTV9QQVRIX0dQR01FX0NPTkZJR19IT1NUX0NIRUNLCi0gICBlbHNlCi0tICAgIEdQR01FX0NGTEFHUz0iIgotLSAgICBHUEdNRV9MSUJTPSIiCi0tICAgIEFDX01TR19SRVNVTFQobm8pCi0gICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCi0gICBmaQotLSAgQUNfU1VCU1QoR1BHTUVfQ0ZMQUdTKQotLSAgQUNfU1VCU1QoR1BHTUVfTElCUykKLSBdKQotIAotIGRubCBBTV9QQVRIX0dQR01FX1BUSFJFQUQoW01JTklNVU0tVkVSU0lPTiwKLUBAIC0xNDgsNyArMTE2LDcgQEAgZG5sIFRlc3QgZm9yIGxpYmdwZ21lIGFuZCBkZWZpbmUgR1BHTUVfUFRIUkVBRF9DRkxBR1MKLSBkbmwgIGFuZCBHUEdNRV9QVEhSRUFEX0xJQlMuCi0gZG5sCi0gQUNfREVGVU4oW0FNX1BBVEhfR1BHTUVfUFRIUkVBRF0sCi0tWyBBQ19SRVFVSVJFKFtfQU1fUEFUSF9HUEdNRV9DT05GSUddKWRubAotK1sKLSAgIHRtcD1pZmVsc2UoWyQxXSwgLDE6MC40LjIsJDEpCi0gICBpZiBlY2hvICIkdG1wIiB8IGdyZXAgJzonID4vZGV2L251bGwgMj4vZGV2L251bGwgOyB0aGVuCi0gICAgICByZXFfZ3BnbWVfYXBpPWBlY2hvICIkdG1wIiAgICAgfCBzZWQgJ3MvXCguKlwpOlwoLipcKS9cMS8nYAotQEAgLTE1OCwzOCArMTI2LDEyIEBAIEFDX0RFRlVOKFtBTV9QQVRIX0dQR01FX1BUSFJFQURdLAotICAgICAgbWluX2dwZ21lX3ZlcnNpb249IiR0bXAiCi0gICBmaQotIAotLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBHUEdNRSBwdGhyZWFkIC0gdmVyc2lvbiA+PSAkbWluX2dwZ21lX3ZlcnNpb24pCi0tICBvaz1ubwotLSAgaWYgdGVzdCAiJEdQR01FX0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KLS0gICAgaWYgYCRHUEdNRV9DT05GSUcgLS10aHJlYWQ9cHRocmVhZCAyPiAvZGV2L251bGxgIDsgdGhlbgotLSAgICAgIHJlcV9tYWpvcj1gZWNobyAkbWluX2dwZ21lX3ZlcnNpb24gfCBcCi0tICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDEvJ2AKLS0gICAgICByZXFfbWlub3I9YGVjaG8gJG1pbl9ncGdtZV92ZXJzaW9uIHwgXAotLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wyLydgCi0tICAgICAgcmVxX21pY3JvPWBlY2hvICRtaW5fZ3BnbWVfdmVyc2lvbiB8IFwKLS0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMy8nYAotLSAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21ham9yIiAtZ3QgIiRyZXFfbWFqb3IiOyB0aGVuCi0tICAgICAgICBvaz15ZXMKLS0gICAgICBlbHNlCi0tICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9tYWpvciIgLWVxICIkcmVxX21ham9yIjsgdGhlbgotLSAgICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9taW5vciIgLWd0ICIkcmVxX21pbm9yIjsgdGhlbgotLSAgICAgICAgICAgIG9rPXllcwotLSAgICAgICAgICBlbHNlCi0tICAgICAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWlub3IiIC1lcSAiJHJlcV9taW5vciI7IHRoZW4KLS0gICAgICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pY3JvIiAtZ2UgIiRyZXFfbWljcm8iOyB0aGVuCi0tICAgICAgICAgICAgICAgIG9rPXllcwotLSAgICAgICAgICAgICAgZmkKLS0gICAgICAgICAgICBmaQotLSAgICAgICAgICBmaQotLSAgICAgICAgZmkKLS0gICAgICBmaQotLSAgICBmaQotLSAgZmkKLSsgIFBLR19DSEVDS19NT0RVTEVTKEdQR01FX1BUSFJFQUQsIFtncGdtZS1wdGhyZWFkID49ICRtaW5fZ3BnbWVfdmVyc2lvbl0sIFtvaz15ZXNdLCBbb2s9bm9dKQotICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KLSAgICAgICMgSWYgd2UgaGF2ZSBhIHJlY2VudCBHUEdNRSwgd2Ugc2hvdWxkIGFsc28gY2hlY2sgdGhhdCB0aGUKLSAgICAgICMgQVBJIGlzIGNvbXBhdGlibGUuCi0gICAgICBpZiB0ZXN0ICIkcmVxX2dwZ21lX2FwaSIgLWd0IDAgOyB0aGVuCi0tICAgICAgICB0bXA9YCRHUEdNRV9DT05GSUcgLS1hcGktdmVyc2lvbiAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCi0rICAgICAgICB0bXA9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9YXBpX3ZlcnNpb24gZ3BnbWUtcHRocmVhZCAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCi0gICAgICAgICBpZiB0ZXN0ICIkdG1wIiAtZ3QgMCA7IHRoZW4KLSAgICAgICAgICAgIGlmIHRlc3QgIiRyZXFfZ3BnbWVfYXBpIiAtbmUgIiR0bXAiIDsgdGhlbgotICAgICAgICAgICAgICBvaz1ubwotQEAgLTE5OCwxOSArMTQwLDExIEBAIEFDX0RFRlVOKFtBTV9QQVRIX0dQR01FX1BUSFJFQURdLAotICAgICAgZmkKLSAgIGZpCi0gICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgotLSAgICBHUEdNRV9QVEhSRUFEX0NGTEFHUz1gJEdQR01FX0NPTkZJRyAtLXRocmVhZD1wdGhyZWFkIC0tY2ZsYWdzYAotLSAgICBHUEdNRV9QVEhSRUFEX0xJQlM9YCRHUEdNRV9DT05GSUcgLS10aHJlYWQ9cHRocmVhZCAtLWxpYnNgCi0tICAgIEFDX01TR19SRVNVTFQoeWVzKQotICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQotICAgICBfQU1fUEFUSF9HUEdNRV9DT05GSUdfSE9TVF9DSEVDSwotICAgZWxzZQotLSAgICBHUEdNRV9QVEhSRUFEX0NGTEFHUz0iIgotLSAgICBHUEdNRV9QVEhSRUFEX0xJQlM9IiIKLS0gICAgQUNfTVNHX1JFU1VMVChubykKLSAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKLSAgIGZpCi0tICBBQ19TVUJTVChHUEdNRV9QVEhSRUFEX0NGTEFHUykKLS0gIEFDX1NVQlNUKEdQR01FX1BUSFJFQURfTElCUykKLSBdKQotIAotIAotQEAgLTIyOSwzNiArMTYzLDEyIEBAIEFDX0RFRlVOKFtBTV9QQVRIX0dQR01FX0dMSUJdLAotICAgICAgbWluX2dwZ21lX3ZlcnNpb249IiR0bXAiCi0gICBmaQotIAotLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBHUEdNRSAtIHZlcnNpb24gPj0gJG1pbl9ncGdtZV92ZXJzaW9uKQotLSAgb2s9bm8KLS0gIGlmIHRlc3QgIiRHUEdNRV9DT05GSUciICE9ICJubyIgOyB0aGVuCi0tICAgIHJlcV9tYWpvcj1gZWNobyAkbWluX2dwZ21lX3ZlcnNpb24gfCBcCi0tICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDEvJ2AKLS0gICAgcmVxX21pbm9yPWBlY2hvICRtaW5fZ3BnbWVfdmVyc2lvbiB8IFwKLS0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMi8nYAotLSAgICByZXFfbWljcm89YGVjaG8gJG1pbl9ncGdtZV92ZXJzaW9uIHwgXAotLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wzLydgCi0tICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21ham9yIiAtZ3QgIiRyZXFfbWFqb3IiOyB0aGVuCi0tICAgICAgICBvaz15ZXMKLS0gICAgZWxzZQotLSAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWFqb3IiIC1lcSAiJHJlcV9tYWpvciI7IHRoZW4KLS0gICAgICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9taW5vciIgLWd0ICIkcmVxX21pbm9yIjsgdGhlbgotLSAgICAgICAgICAgICAgIG9rPXllcwotLSAgICAgICAgICAgIGVsc2UKLS0gICAgICAgICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9taW5vciIgLWVxICIkcmVxX21pbm9yIjsgdGhlbgotLSAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9taWNybyIgLWdlICIkcmVxX21pY3JvIjsgdGhlbgotLSAgICAgICAgICAgICAgICAgICAgIG9rPXllcwotLSAgICAgICAgICAgICAgICAgICBmaQotLSAgICAgICAgICAgICAgIGZpCi0tICAgICAgICAgICAgZmkKLS0gICAgICAgIGZpCi0tICAgIGZpCi0tICBmaQotKyAgUEtHX0NIRUNLX01PRFVMRVMoR1BHTUVfR0xJQiwgW2dwZ21lID49ICRtaW5fZ3BnbWVfdmVyc2lvbiBnbGliLTIuMF0sIFtvaz15ZXNdLCBbb2s9bm9dKSAgCi0gICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgotICAgICAgIyBJZiB3ZSBoYXZlIGEgcmVjZW50IEdQR01FLCB3ZSBzaG91bGQgYWxzbyBjaGVjayB0aGF0IHRoZQotICAgICAgIyBBUEkgaXMgY29tcGF0aWJsZS4KLSAgICAgIGlmIHRlc3QgIiRyZXFfZ3BnbWVfYXBpIiAtZ3QgMCA7IHRoZW4KLS0gICAgICAgIHRtcD1gJEdQR01FX0NPTkZJRyAtLWFwaS12ZXJzaW9uIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKLSsgICAgICAgIHRtcD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1hcGlfdmVyc2lvbiBncGdtZSAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCi0gICAgICAgICBpZiB0ZXN0ICIkdG1wIiAtZ3QgMCA7IHRoZW4KLSAgICAgICAgICAgIGlmIHRlc3QgIiRyZXFfZ3BnbWVfYXBpIiAtbmUgIiR0bXAiIDsgdGhlbgotICAgICAgICAgICAgICBvaz1ubwotQEAgLTI2NywxNyArMTc3LDkgQEAgQUNfREVGVU4oW0FNX1BBVEhfR1BHTUVfR0xJQl0sCi0gICAgICBmaQotICAgZmkKLSAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCi0tICAgIEdQR01FX0dMSUJfQ0ZMQUdTPWAkR1BHTUVfQ09ORklHIC0tZ2xpYiAtLWNmbGFnc2AKLS0gICAgR1BHTUVfR0xJQl9MSUJTPWAkR1BHTUVfQ09ORklHIC0tZ2xpYiAtLWxpYnNgCi0tICAgIEFDX01TR19SRVNVTFQoeWVzKQotICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQotICAgICBfQU1fUEFUSF9HUEdNRV9DT05GSUdfSE9TVF9DSEVDSwotICAgZWxzZQotLSAgICBHUEdNRV9HTElCX0NGTEFHUz0iIgotLSAgICBHUEdNRV9HTElCX0xJQlM9IiIKLS0gICAgQUNfTVNHX1JFU1VMVChubykKLSAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKLSAgIGZpCi0tICBBQ19TVUJTVChHUEdNRV9HTElCX0NGTEFHUykKLS0gIEFDX1NVQlNUKEdQR01FX0dMSUJfTElCUykKLSBdKQotZGlmZiAtLWdpdCBhL3NyYy9ncGdtZS5wYy5pbiBiL3NyYy9ncGdtZS5wYy5pbgotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLmI2OTUzOWYKLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9ncGdtZS5wYy5pbgotQEAgLTAsMCArMSwxNSBAQAotK3ByZWZpeD1AcHJlZml4QAotK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKLStsaWJkaXI9QGxpYmRpckAKLStpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAotKwotKyMgQVBJIGluZm8KLSthcGlfdmVyc2lvbj1AR1BHTUVfQ09ORklHX0FQSV9WRVJTSU9OQAotK2hvc3Q9QEdQR01FX0NPTkZJR19IT1NUQAotKwotK05hbWU6IGdwZ21lCi0rRGVzY3JpcHRpb246IEdudVBHIE1hZGUgRWFzeSAoR1BHTUUpIGlzIGEgQyBsYW5ndWFnZSBsaWJyYXJ5IHRoYXQgYWxsb3dzIHRvIGFkZHN1cHBvcnQgZm9yIGNyeXB0b2dyYXBoeSB0byBhIHByb2dyYW0uCi0rVmVyc2lvbjogQFZFUlNJT05ACi0rTGliczogLUwke2xpYmRpcn0gLWxncGdtZQotK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9Ci0rUmVxdWlyZXM6IGxpYmFzc3VhbiBncGctZXJyb3IKLVwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQotLS0gCi0yLjguMQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvcHl0aG9uLWltcG9ydC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZS9weXRob24taW1wb3J0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWI3N2ExLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZS9weXRob24taW1wb3J0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotRG9uJ3QgY2hlY2sgZm9yIG91dHB1dCBvbiBzdGRlcnIgdG8ga25vdyBpZiBhbiBpbXBvcnQgd29ya2VkLCBob3N0IGlucHV0cmMgYW5kCi1zeXNyb290IHJlYWRsaW5lIGNhbiBjYXVzZSB3YXJuaW5ncyBvbiBzdGRlcnIuCi0KLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgKGZyb20gYXV0b2NvbmYtYXJjaGl2ZSA4ODNhMmFiZCkKLVNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+Ci0KLWRpZmYgLS1naXQgYS9tNC9heF9weXRob25fZGV2ZWwubTQgYi9tNC9heF9weXRob25fZGV2ZWwubTQKLWluZGV4IGI5OTBkNWIuLjMxOGIwODkgMTAwNjQ0Ci0tLS0gYS9tNC9heF9weXRob25fZGV2ZWwubTQKLSsrKyBiL200L2F4X3B5dGhvbl9kZXZlbC5tNAotQEAgLTEzNyw3ICsxMzcsNyBAQCB2YXJpYWJsZSB0byBjb25maWd1cmUuIFNlZSBgYGNvbmZpZ3VyZSAtLWhlbHAnJyBmb3IgcmVmZXJlbmNlLgotIAkjCi0gCUFDX01TR19DSEVDS0lORyhbZm9yIHRoZSBkaXN0dXRpbHMgUHl0aG9uIHBhY2thZ2VdKQotIAlhY19kaXN0dXRpbHNfcmVzdWx0PWAkUFlUSE9OIC1jICJpbXBvcnQgZGlzdHV0aWxzIiAyPiYxYAotLQlpZiB0ZXN0IC16ICIkYWNfZGlzdHV0aWxzX3Jlc3VsdCI7IHRoZW4KLSsJaWYgdGVzdCAkPyAtZXEgMDsgdGhlbgotIAkJQUNfTVNHX1JFU1VMVChbeWVzXSkKLSAJZWxzZQotIAkJQUNfTVNHX1JFU1VMVChbbm9dKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lL3B5dGhvbi1sYW5nLWNvbmZpZy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZS9weXRob24tbGFuZy1jb25maWcucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzMmU0MjYuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lL3B5dGhvbi1sYW5nLWNvbmZpZy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLWdwZ21lL2xhbmcvcHl0aG9uOiBncGctZXJyb3ItY29uZmlnIHNob3VsZCBub3QgYmUgdXNlZC4KLQotZ3BnLWVycm9yLWNvbmZpZyB3YXMgbW9kaWZpZWQgYnkgT0UgdG8gYWx3YXlzIHJldHVybiBhbiBlcnJvci4gIFNvIHdlIHdhbnQKLXRvIGZpbmQgYW4gYWx0ZXJuYXRpdmUgd2F5IHRvIHJldHJpZXZlIHdoYXRldmVyIGl0IGlzIHdlIG5lZWQuICBJdCB0dXJucwotb3V0IHRoYXQgdGhlIHN5c3RlbSBpcyBqdXN0IHRyeWluZyB0byBmaW5kIHRoZSBwYXRoIHRvIHRoZSBncGctZXJyb3IuaCwgd2hpY2gKLXdlIGNhbiBwdWxsIGluIGZyb20gdGhlIFNUQUdJTkdfSU5DIGVudmlyb25tZW50LgotCi1VcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NoYW5nZXMgYXJlIHNwZWNpZmljIHRvIE9FXQotCi1TaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+Ci0KLUluZGV4OiBncGdtZS0xLjguMC9sYW5nL3B5dGhvbi9zZXR1cC5weS5pbgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdwZ21lLTEuOC4wLm9yaWcvbGFuZy9weXRob24vc2V0dXAucHkuaW4KLSsrKyBncGdtZS0xLjguMC9sYW5nL3B5dGhvbi9zZXR1cC5weS5pbgotQEAgLTI0LDcgKzI0LDYgQEAgaW1wb3J0IGdsb2IKLSBpbXBvcnQgc3VicHJvY2VzcwotIAotICMgT3V0LW9mLXRyZWUgYnVpbGQgb2YgdGhlIGdwZyBiaW5kaW5ncy4KLS1ncGdfZXJyb3JfY29uZmlnID0gWyJncGctZXJyb3ItY29uZmlnIl0KLSBncGdtZV9jb25maWdfZmxhZ3MgPSBbIi0tdGhyZWFkPXB0aHJlYWQiXQotIGdwZ21lX2NvbmZpZyA9IFsiZ3BnbWUtY29uZmlnIl0gKyBncGdtZV9jb25maWdfZmxhZ3MKLSBncGdtZV9oID0gIiIKLUBAIC01MiwxMyArNTEsNiBAQCBlbHNlOgotICAgICBkZXZudWxsID0gb3Blbihvcy5kZXZudWxsLCAidyIpCi0gCi0gdHJ5OgotLSAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoZ3BnX2Vycm9yX2NvbmZpZyArIFsnLS12ZXJzaW9uJ10sCi0tICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9ZGV2bnVsbCkKLS1leGNlcHQ6Ci0tICAgIHN5cy5leGl0KCJDb3VsZCBub3QgZmluZCBncGctZXJyb3ItY29uZmlnLiAgIiArCi0tICAgICAgICAgICAgICJQbGVhc2UgaW5zdGFsbCB0aGUgbGliZ3BnLWVycm9yIGRldmVsb3BtZW50IHBhY2thZ2UuIikKLS0KLS10cnk6Ci0gICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChncGdtZV9jb25maWcgKyBbJy0tdmVyc2lvbiddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PWRldm51bGwpCi0gZXhjZXB0OgotQEAgLTgxLDEyICs3Myw5IEBAIGlmIG5vdCAobWFqb3IgPiAxIG9yIChtYWpvciA9PSAxIGFuZCBtaW4KLSBpZiBub3QgZ3BnbWVfaDoKLSAgICAgZ3BnbWVfaCA9IG9zLnBhdGguam9pbihnZXRjb25maWcoInByZWZpeCIpWzBdLCAiaW5jbHVkZSIsICJncGdtZS5oIikKLSAKLS1ncGdfZXJyb3JfcHJlZml4ID0gZ2V0Y29uZmlnKCJwcmVmaXgiLCBjb25maWc9Z3BnX2Vycm9yX2NvbmZpZylbMF0KLS1ncGdfZXJyb3JfaCA9IG9zLnBhdGguam9pbihncGdfZXJyb3JfcHJlZml4LCAiaW5jbHVkZSIsICJncGctZXJyb3IuaCIpCi0rZ3BnX2Vycm9yX2ggPSBvcy5wYXRoLmpvaW4ob3MuZ2V0ZW52KCdTVEFHSU5HX0lOQ0RJUicpLCAiZ3BnLWVycm9yLmgiKQotIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhncGdfZXJyb3JfaCk6Ci0tICAgIGdwZ19lcnJvcl9oID0gXAotLSAgICAgICAgZ2xvYi5nbG9iKG9zLnBhdGguam9pbihncGdfZXJyb3JfcHJlZml4LCAiaW5jbHVkZSIsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIqIiwgImdwZy1lcnJvci5oIikpWzBdCi0rICAgIHN5cy5leGl0KCJncGdfZXJyb3JfaCBub3QgZm91bmQ6ICVzIiAlIGdwZ19lcnJvcl9oKQotIAotIHByaW50KCJCdWlsZGluZyBweXRob24gZ3BnIG1vZHVsZSB1c2luZyB7fSBhbmQge30uIi5mb3JtYXQoZ3BnbWVfaCwgZ3BnX2Vycm9yX2gpKQotIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lXzEuOC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lXzEuOC4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGRmNmVkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZV8xLjguMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLVNVTU1BUlkgPSAiSGlnaC1sZXZlbCBHbnVQRyBlbmNyeXB0aW9uL3NpZ25pbmcgQVBJIgotREVTQ1JJUFRJT04gPSAiR251UEcgTWFkZSBFYXN5IChHUEdNRSkgaXMgYSBsaWJyYXJ5IGRlc2lnbmVkIHRvIG1ha2UgYWNjZXNzIHRvIEdudVBHIGVhc2llciBmb3IgYXBwbGljYXRpb25zLiBJdCBwcm92aWRlcyBhIEhpZ2gtTGV2ZWwgQ3J5cHRvIEFQSSBmb3IgZW5jcnlwdGlvbiwgZGVjcnlwdGlvbiwgc2lnbmluZywgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBhbmQga2V5IG1hbmFnZW1lbnQiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy9ncGdtZS5odG1sIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZzEwY29kZS5jb20vZ251cGcvaW5kZXgiCi0KLUxJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjErIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MRVNTRVI7bWQ1PWJiYjQ2MTIxMWEzM2IxMzRkNDJlZDVlZTgwMmIzN2ZmIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9ncGdtZS5oLmluO2VuZGxpbmU9MjM7bWQ1PTBmNzA1OTY2NWM0Yjc4OTdmNGY0ZDBjYjkzYWE5Zjk4IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9lbmdpbmUuaDtlbmRsaW5lPTIyO21kNT00YjZkOGJhMzEzZDliNTY0Y2M0ZDRjZmIxNjQwYWY5ZCIKLQotVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vZ251cGcub3JnL2Rvd25sb2FkL2luZGV4Lmh0bWwiCi1TUkNfVVJJID0gIiR7R05VUEdfTUlSUk9SfS9ncGdtZS8ke0JQfS50YXIuYnoyIFwKLSAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9weXRob24tbGFuZy1jb25maWcucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1Db3JyZWN0bHktaW5zdGFsbC1weXRob24tbW9kdWxlcy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9weXRob24taW1wb3J0LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtZ3BnbWUtY29uZmlnLXNraXAtYWxsLWxpYi1vci11c3ItbGliLWRpcmVjdG9yaWVzLWluLS5wYXRjaCBcCi0gICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNzIyYTQxNTM5MDRiOWI1ZGMxNTQ4NWEyMmQyOTI2M2IiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTk2MDk3MjU3YzJjZTIyZTc0Nzc0MWY4ZmYzZDdlMjRmNmUyNjIzMWZhMTk4YTQxYjJhMDcyZTYyZDFlNWQzMyIKLQotREVQRU5EUyA9ICJsaWJncGctZXJyb3IgbGliYXNzdWFuIgotUkRFUEVORFNfJHtQTn0tY3BwICs9ICJsaWJzdGRjKysiCi0KLVJERVBFTkRTX3B5dGhvbjItZ3BnICs9ICJweXRob24tdW5peGFkbWluIgotUkRFUEVORFNfcHl0aG9uMy1ncGcgKz0gInB5dGhvbjMtdW5peGFkbWluIgotCi1CSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2dwZ21lLWNvbmZpZyIKLQotIyBOb3RlIHNlbGVjdCBweXRob24yIG9yIHB5dGhvbjMsIGJ1dCB5b3UgY2FuJ3Qgc2VsZWN0IGJvdGggYXQgdGhlIHNhbWUgdGltZQotUEFDS0FHRUNPTkZJRyA/Pz0gInB5dGhvbjMiCi1QQUNLQUdFQ09ORklHW3B5dGhvbjJdID0gIiwscHl0aG9uIHN3aWctbmF0aXZlLCIKLVBBQ0tBR0VDT05GSUdbcHl0aG9uM10gPSAiLCxweXRob24zIHN3aWctbmF0aXZlLCIKLQotIyBEZWZhdWx0IGluIGNvbmZpZ3VyZS5hYzogImNsIGNwcCBweXRob24gcXQiCi0jIFN1cHBvcnRlZDogImNsIGNwcCBweXRob24gcHl0aG9uMiBweXRob24zIHF0IgotIyBweXRob24gc2F5cyAnc2VhcmNoIGFuZCBmaW5kIHB5dGhvbjIgb3IgcHl0aG9uMycKLQotIyBCdWlsZGluZyB0aGUgQysrIGJpbmRpbmdzIGZvciBuYXRpdmUgcmVxdWlyZXMgYSBDKysgY29tcGlsZXIgd2l0aCBDKysxMQotIyBzdXBwb3J0LiBTaW5jZSB0aGVzZSBiaW5kaW5ncyBhcmUgY3VycmVudGx5IG5vdCBuZWVkZWQsIHdlIGNhbiBkaXNhYmxlIHRoZW0uCi1ERUZBVUxUX0xBTkdVQUdFUyA9ICIiCi1ERUZBVUxUX0xBTkdVQUdFU19jbGFzcy10YXJnZXQgPSAiY3BwIgotTEFOR1VBR0VTID89ICIke0RFRkFVTFRfTEFOR1VBR0VTfSIKLUxBTkdVQUdFUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncHl0aG9uMicsICcgcHl0aG9uMicsICcnLCBkKX0iCi1MQU5HVUFHRVMgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3B5dGhvbjMnLCAnIHB5dGhvbjMnLCAnJywgZCl9IgotCi1QWVRIT05fSU5IRVJJVCA9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdweXRob24yJywgJ3B5dGhvbm5hdGl2ZScsICcnLCBkKX0iCi1QWVRIT05fSU5IRVJJVCAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncHl0aG9uMycsICdweXRob24zbmF0aXZlJywgJycsIGQpfSIKLQotRVhUUkFfT0VDT05GICs9ICctLWVuYWJsZS1sYW5ndWFnZXM9IiR7TEFOR1VBR0VTfSInCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZyAke1BZVEhPTl9JTkhFUklUfQotCi1leHBvcnQgUEtHX0NPTkZJRz0ncGtnLWNvbmZpZycKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgotCi1QQUNLQUdFUyA9KyAiJHtQTn0tY3BwIgotUEFDS0FHRVMgPS4gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3B5dGhvbjInLCAncHl0aG9uMi1ncGcgJywgJycsIGQpfSIKLVBBQ0tBR0VTID0uICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdweXRob24zJywgJ3B5dGhvbjMtZ3BnICcsICcnLCBkKX0iCi0KLUZJTEVTXyR7UE59LWNwcCA9ICIke2xpYmRpcn0vbGliZ3BnbWVwcC5zby4qIgotRklMRVNfcHl0aG9uMi1ncGcgPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vKiIKLUZJTEVTX3B5dGhvbjMtZ3BnID0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LyoiCi1GSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vY29tbW9uLWxpc3Avc291cmNlL2dwZ21lLyogXAotICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vY21ha2UvKiBcCi0iCi0KLUNGTEFHU19hcHBlbmRfbGliYy1tdXNsID0gIiAtRF9fZXJyb3JfdF9kZWZpbmVkICIKLWRvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKLQkjIEVsc2UgdGhlc2UgY291bGQgYmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIHRob3NlIGluIGFjbG9jYWwtY29weQotCXJtIC1mICR7U30vbTQvZ3BnLWVycm9yLm00Ci0Jcm0gLWYgJHtTfS9tNC9saWJhc3N1YW4ubTQKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZV8xLjkuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZV8xLjkuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjVjMzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lXzEuOS4wLmJiCkBAIC0wLDAgKzEsNzcgQEAKK1NVTU1BUlkgPSAiSGlnaC1sZXZlbCBHbnVQRyBlbmNyeXB0aW9uL3NpZ25pbmcgQVBJIgorREVTQ1JJUFRJT04gPSAiR251UEcgTWFkZSBFYXN5IChHUEdNRSkgaXMgYSBsaWJyYXJ5IGRlc2lnbmVkIHRvIG1ha2UgYWNjZXNzIHRvIEdudVBHIGVhc2llciBmb3IgYXBwbGljYXRpb25zLiBJdCBwcm92aWRlcyBhIEhpZ2gtTGV2ZWwgQ3J5cHRvIEFQSSBmb3IgZW5jcnlwdGlvbiwgZGVjcnlwdGlvbiwgc2lnbmluZywgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBhbmQga2V5IG1hbmFnZW1lbnQiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy9ncGdtZS5odG1sIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZzEwY29kZS5jb20vZ251cGcvaW5kZXgiCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MRVNTRVI7bWQ1PWJiYjQ2MTIxMWEzM2IxMzRkNDJlZDVlZTgwMmIzN2ZmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9ncGdtZS5oLmluO2VuZGxpbmU9MjM7bWQ1PTlkMTU3ZDA4YTY5MDU5MzQ0ZTZmODJhYmQyZDI1NzgxIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9lbmdpbmUuaDtlbmRsaW5lPTIyO21kNT00YjZkOGJhMzEzZDliNTY0Y2M0ZDRjZmIxNjQwYWY5ZCIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vZ251cGcub3JnL2Rvd25sb2FkL2luZGV4Lmh0bWwiCitTUkNfVVJJID0gIiR7R05VUEdfTUlSUk9SfS9ncGdtZS8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcGtnY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItZ3BnbWUtbGFuZy1weXRob24tZ3BnLWVycm9yLWNvbmZpZy1zaG91bGQtbm90LWJlLXVzZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLUNvcnJlY3RseS1pbnN0YWxsLXB5dGhvbi1tb2R1bGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtcHl0aG9uLWltcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA1LWdwZ21lLWNvbmZpZy1za2lwLWFsbC1saWItb3ItdXNyLWxpYi1kaXJlY3Rvcmllcy1pbi0ucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjFlMDBiYjhlZjA0ZDFkMDVkNWEwZjE5ZTE0Mzg1NGMzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFiMjlmZWRiOGJmYWQ3NzVlNzBlYWZhYzViMDU5MDYyMTY4M2IyZDk4NjlkYjk5NDU2OGU2NDAxZjQwMzRjZWIiCisKK0RFUEVORFMgPSAibGliZ3BnLWVycm9yIGxpYmFzc3VhbiIKK1JERVBFTkRTXyR7UE59LWNwcCArPSAibGlic3RkYysrIgorCitSREVQRU5EU19weXRob24yLWdwZyArPSAicHl0aG9uLXVuaXhhZG1pbiIKK1JERVBFTkRTX3B5dGhvbjMtZ3BnICs9ICJweXRob24zLXVuaXhhZG1pbiIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9ncGdtZS1jb25maWciCisKKyMgTm90ZSBzZWxlY3QgcHl0aG9uMiBvciBweXRob24zLCBidXQgeW91IGNhbid0IHNlbGVjdCBib3RoIGF0IHRoZSBzYW1lIHRpbWUKK1BBQ0tBR0VDT05GSUcgPz89ICJweXRob24zIgorUEFDS0FHRUNPTkZJR1tweXRob24yXSA9ICIsLHB5dGhvbiBzd2lnLW5hdGl2ZSwiCitQQUNLQUdFQ09ORklHW3B5dGhvbjNdID0gIiwscHl0aG9uMyBzd2lnLW5hdGl2ZSwiCisKKyMgRGVmYXVsdCBpbiBjb25maWd1cmUuYWM6ICJjbCBjcHAgcHl0aG9uIHF0IgorIyBTdXBwb3J0ZWQ6ICJjbCBjcHAgcHl0aG9uIHB5dGhvbjIgcHl0aG9uMyBxdCIKKyMgcHl0aG9uIHNheXMgJ3NlYXJjaCBhbmQgZmluZCBweXRob24yIG9yIHB5dGhvbjMnCisKKyMgQnVpbGRpbmcgdGhlIEMrKyBiaW5kaW5ncyBmb3IgbmF0aXZlIHJlcXVpcmVzIGEgQysrIGNvbXBpbGVyIHdpdGggQysrMTEKKyMgc3VwcG9ydC4gU2luY2UgdGhlc2UgYmluZGluZ3MgYXJlIGN1cnJlbnRseSBub3QgbmVlZGVkLCB3ZSBjYW4gZGlzYWJsZSB0aGVtLgorREVGQVVMVF9MQU5HVUFHRVMgPSAiIgorREVGQVVMVF9MQU5HVUFHRVNfY2xhc3MtdGFyZ2V0ID0gImNwcCIKK0xBTkdVQUdFUyA/PSAiJHtERUZBVUxUX0xBTkdVQUdFU30iCitMQU5HVUFHRVMgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3B5dGhvbjInLCAnIHB5dGhvbjInLCAnJywgZCl9IgorTEFOR1VBR0VTIC49ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdweXRob24zJywgJyBweXRob24zJywgJycsIGQpfSIKKworUFlUSE9OX0lOSEVSSVQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncHl0aG9uMicsICdweXRob25uYXRpdmUnLCAnJywgZCl9IgorUFlUSE9OX0lOSEVSSVQgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3B5dGhvbjMnLCAncHl0aG9uM25hdGl2ZScsICcnLCBkKX0iCisKK0VYVFJBX09FQ09ORiArPSAnLS1lbmFibGUtbGFuZ3VhZ2VzPSIke0xBTkdVQUdFU30iJworCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcgJHtQWVRIT05fSU5IRVJJVH0KKworZXhwb3J0IFBLR19DT05GSUc9J3BrZy1jb25maWcnCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworUEFDS0FHRVMgPSsgIiR7UE59LWNwcCIKK1BBQ0tBR0VTID0uICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdweXRob24yJywgJ3B5dGhvbjItZ3BnICcsICcnLCBkKX0iCitQQUNLQUdFUyA9LiAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncHl0aG9uMycsICdweXRob24zLWdwZyAnLCAnJywgZCl9IgorCitGSUxFU18ke1BOfS1jcHAgPSAiJHtsaWJkaXJ9L2xpYmdwZ21lcHAuc28uKiIKK0ZJTEVTX3B5dGhvbjItZ3BnID0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LyoiCitGSUxFU19weXRob24zLWdwZyA9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9L2NvbW1vbi1saXNwL3NvdXJjZS9ncGdtZS8qIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2NtYWtlLyogXAorIgorCitDRkxBR1NfYXBwZW5kX2xpYmMtbXVzbCA9ICIgLURfX2Vycm9yX3RfZGVmaW5lZCAiCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyBFbHNlIHRoZXNlIGNvdWxkIGJlIHVzZWQgaW4gcHJlZmVyZW5jZSB0byB0aG9zZSBpbiBhY2xvY2FsLWNvcHkKKwlybSAtZiAke1N9L200L2dwZy1lcnJvci5tNAorCXJtIC1mICR7U30vbTQvbGliYXNzdWFuLm00CisJcm0gLWYgJHtTfS9tNC9weXRob24ubTQKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1LmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1LmluYwppbmRleCBmZTQ4MTAxLi5hMWVmOWVjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdS5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3UuaW5jCkBAIC0xNSw4ICsxNSw2IEBACiBTUERYX1MgPSAiJHtXT1JLRElSfS9pY3UiCiBTVEFHSU5HX0lDVV9ESVJfTkFUSVZFID0gIiR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vJHtCUE59LyR7UFZ9IgogCi1DUFBGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1EVV9USU1FWk9ORT0wIgotCiBCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2ljdS1jb25maWciCiAKIGluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBiaW5jb25maWcKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1L0NWRS0yMDE3LTE0OTUyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3UvQ1ZFLTIwMTctMTQ5NTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc1OWVmYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1L0NWRS0yMDE3LTE0OTUyLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gZmM4M2NkODMyNzI1ZDM5NjgwMTFmMTE4NjM3YjlmNWQyMTJlODcxNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE92aWRpdSBQYW5haXQgPG92aWRpdS5wYW5haXRAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMTAgTm92IDIwMTcgMTY6NTE6MjUgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gUmVtb3ZlZCByZWR1bmRhbnQgVVZlY3RvciBlbnRyeSBjbGVhbiB1cCBmdW5jdGlvbiBjYWxsLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitDVkU6IENWRS0yMDE3LTE0OTUyCisKK1NpZ25lZC1vZmYtYnk6IE92aWRpdSBQYW5haXQgPG92aWRpdS5wYW5haXRAd2luZHJpdmVyLmNvbT4KKy0tLQorIGkxOG4vem9uZW1ldGEuY3BwIHwgMSAtCisgMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2kxOG4vem9uZW1ldGEuY3BwIGIvaTE4bi96b25lbWV0YS5jcHAKK2luZGV4IDg0YTk2NTcuLmUxNjNiMDAgMTAwNjQ0CistLS0gYS9pMThuL3pvbmVtZXRhLmNwcAorKysrIGIvaTE4bi96b25lbWV0YS5jcHAKK0BAIC02OTAsNyArNjkwLDYgQEAgWm9uZU1ldGE6OmNyZWF0ZU1ldGF6b25lTWFwcGluZ3MoY29uc3QgVW5pY29kZVN0cmluZyAmdHppZCkgeworICAgICAgICAgICAgICAgICAgICAgbXpNYXBwaW5ncyA9IG5ldyBVVmVjdG9yKGRlbGV0ZU9sc29uVG9NZXRhTWFwcGluZ0VudHJ5LCBOVUxMLCBzdGF0dXMpOworICAgICAgICAgICAgICAgICAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG16TWFwcGluZ3M7CistICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlT2xzb25Ub01ldGFNYXBwaW5nRW50cnkoZW50cnkpOworICAgICAgICAgICAgICAgICAgICAgICAgIHVwcnZfZnJlZShlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICB9CistLSAKKzIuMTAuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdS9pY3UtcGtnZGF0YS1sYXJnZS1jbWQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdS9pY3UtcGtnZGF0YS1sYXJnZS1jbWQucGF0Y2gKaW5kZXggNmU0MDY1OS4uZTc1OGE2MiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3UvaWN1LXBrZ2RhdGEtbGFyZ2UtY21kLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1L2ljdS1wa2dkYXRhLWxhcmdlLWNtZC5wYXRjaApAQCAtOCwxNCArOCwxNiBAQAogVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCiAKIFNpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KIC0tLQotIHRvb2xzL3BrZ2RhdGEvcGtnZGF0YS5jcHAgfCAgICAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisgdG9vbHMvcGtnZGF0YS9wa2dkYXRhLmNwcCB8IDYgKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL3Rvb2xzL3BrZ2RhdGEvcGtnZGF0YS5jcHAgYi90b29scy9wa2dkYXRhL3BrZ2RhdGEuY3BwCitpbmRleCA2MDE2N2RkLi41MDZkZDMyIDEwMDY0NAogLS0tIGEvdG9vbHMvcGtnZGF0YS9wa2dkYXRhLmNwcAogKysrIGIvdG9vbHMvcGtnZGF0YS9wa2dkYXRhLmNwcAotQEAgLTEwMTksNyArMTAxOSw3IEBAIG5vcm1hbF9zeW1saW5rX21vZGU6CitAQCAtMTA4NCw3ICsxMDg0LDcgQEAgbm9ybWFsX3N5bWxpbmtfbW9kZToKICAKICBzdGF0aWMgaW50MzJfdCBwa2dfaW5zdGFsbExpYnJhcnkoY29uc3QgY2hhciAqaW5zdGFsbERpciwgY29uc3QgY2hhciAqdGFyZ2V0RGlyLCBVQm9vbCBub1ZlcnNpb24pIHsKICAgICAgaW50MzJfdCByZXN1bHQgPSAwOwpAQCAtMjQsNiArMjYsMjQgQEAKICAKICAgICAgc3ByaW50ZihjbWQsICJjZCAlcyAmJiAlcyAlcyAlcyVzJXMiLAogICAgICAgICAgICAgIHRhcmdldERpciwKK0BAIC0xMTUyLDcgKzExNTIsNyBAQCBzdGF0aWMgaW50MzJfdCBwa2dfaW5zdGFsbExpYnJhcnkoY29uc3QgY2hhciAqaW5zdGFsbERpciwgY29uc3QgY2hhciAqdGFyZ2V0RGlyLAorIAorIHN0YXRpYyBpbnQzMl90IHBrZ19pbnN0YWxsQ29tbW9uTW9kZShjb25zdCBjaGFyICppbnN0YWxsRGlyLCBjb25zdCBjaGFyICpmaWxlTmFtZSkgeworICAgICBpbnQzMl90IHJlc3VsdCA9IDA7CistICAgIGNoYXIgY21kW1NNQUxMX0JVRkZFUl9NQVhfU0laRV0gPSAiIjsKKysgICAgY2hhciBjbWRbTEFSR0VfQlVGRkVSX01BWF9TSVpFXSA9ICIiOworIAorICAgICBpZiAoIVRfRmlsZVN0cmVhbV9maWxlX2V4aXN0cyhpbnN0YWxsRGlyKSkgeworICAgICAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CitAQCAtMTE4NCw3ICsxMTg0LDcgQEAgc3RhdGljIGludDMyX3QgcGtnX2luc3RhbGxDb21tb25Nb2RlKGNvbnN0IGNoYXIgKmluc3RhbGxEaXIsIGNvbnN0IGNoYXIgKmZpbGVOYW0KKyAjZW5kaWYKKyBzdGF0aWMgaW50MzJfdCBwa2dfaW5zdGFsbEZpbGVNb2RlKGNvbnN0IGNoYXIgKmluc3RhbGxEaXIsIGNvbnN0IGNoYXIgKnNyY0RpciwgY29uc3QgY2hhciAqZmlsZUxpc3ROYW1lKSB7CisgICAgIGludDMyX3QgcmVzdWx0ID0gMDsKKy0gICAgY2hhciBjbWRbU01BTExfQlVGRkVSX01BWF9TSVpFXSA9ICIiOworKyAgICBjaGFyIGNtZFtMQVJHRV9CVUZGRVJfTUFYX1NJWkVdID0gIiI7CisgCisgICAgIGlmICghVF9GaWxlU3RyZWFtX2ZpbGVfZXhpc3RzKGluc3RhbGxEaXIpKSB7CisgICAgICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKIC0tIAotMS43LjEwLjQKKzEuOS4xCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1XzU4LjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdV81OC4yLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzY4NGE2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1XzU4LjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1yZXF1aXJlIGljdS5pbmMKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vLi4vTElDRU5TRTttZDU9MWIzYjc1YzE3NzdjZDQ5YWQ1YzZhMjRjZDMzOGNmYzkiCi0KLWRlZiBpY3VfZG93bmxvYWRfdmVyc2lvbihkKToKLSAgICBwdnNwbGl0ID0gZC5nZXRWYXIoJ1BWJykuc3BsaXQoJy4nKQotICAgIHJldHVybiBwdnNwbGl0WzBdICsgIl8iICsgcHZzcGxpdFsxXQotCi1JQ1VfUFYgPSAiJHtAaWN1X2Rvd25sb2FkX3ZlcnNpb24oZCl9IgotCi0jIGh0dHA6Ly9lcnJvcnMueW9jdG9wcm9qZWN0Lm9yZy9FcnJvcnMvRGV0YWlscy8yMDQ4Ni8KLUFSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjQgPSAiYXJtIgotQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NSA9ICJhcm0iCi0KLUJBU0VfU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQuaWN1LXByb2plY3Qub3JnL2ZpbGVzL2ljdTRjLyR7UFZ9L2ljdTRjLSR7SUNVX1BWfS1zcmMudGd6IgotU1JDX1VSSSA9ICIke0JBU0VfU1JDX1VSSX0gXAotICAgICAgICAgICBmaWxlOi8vaWN1LXBrZ2RhdGEtbGFyZ2UtY21kLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2ZpeC1pbnN0YWxsLW1hbngucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1pMThuLURyb3AtaW5jbHVkZS14bG9jYWxlLmgucGF0Y2ggXAotICAgICAgICAgICAiCi0KLVNSQ19VUklfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICJcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLURpc2FibGUtTERGTEFHU0lDVURULWZvci1MaW51eC5wYXRjaCBcCi0gICAgICAgICAgIgotU1JDX1VSSVttZDVzdW1dID0gImZhYzIxMmIzMmI3ZWM3YWIwMDdhMTJkZmYxZjNhZWExIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJiMGE0NDEwMTUzYTliMjBkZTBlMjBjN2Q4YjY2MDQ5YTcyYWVmMjQ0YjUzNjgzZDBkNzUyMTM3MTY4M2RhMGMiCi0KLVVQU1RSRUFNX0NIRUNLX1JFR0VYID0gIig/UDxwdmVyPlxkKyhcLlxkKykrKS8iCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLmljdS1wcm9qZWN0Lm9yZy9maWxlcy9pY3U0Yy8iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdV81OS4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3VfNTkuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmIxYmU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3VfNTkuMS5iYgpAQCAtMCwwICsxLDMwIEBACityZXF1aXJlIGljdS5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vLi4vTElDRU5TRTttZDU9ZmU5ZTFmMmM1MDA0NjZkOGYxOGRmMmNkMDY4ZTRiNzQiCisKK2RlZiBpY3VfZG93bmxvYWRfdmVyc2lvbihkKToKKyAgICBwdnNwbGl0ID0gZC5nZXRWYXIoJ1BWJykuc3BsaXQoJy4nKQorICAgIHJldHVybiBwdnNwbGl0WzBdICsgIl8iICsgcHZzcGxpdFsxXQorCitJQ1VfUFYgPSAiJHtAaWN1X2Rvd25sb2FkX3ZlcnNpb24oZCl9IgorCisjIGh0dHA6Ly9lcnJvcnMueW9jdG9wcm9qZWN0Lm9yZy9FcnJvcnMvRGV0YWlscy8yMDQ4Ni8KK0FSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjQgPSAiYXJtIgorQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NSA9ICJhcm0iCisKK0JBU0VfU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQuaWN1LXByb2plY3Qub3JnL2ZpbGVzL2ljdTRjLyR7UFZ9L2ljdTRjLSR7SUNVX1BWfS1zcmMudGd6IgorU1JDX1VSSSA9ICIke0JBU0VfU1JDX1VSSX0gXAorICAgICAgICAgICBmaWxlOi8vaWN1LXBrZ2RhdGEtbGFyZ2UtY21kLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1pbnN0YWxsLW1hbngucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1pMThuLURyb3AtaW5jbHVkZS14bG9jYWxlLmgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTctMTQ5NTIucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICJcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLURpc2FibGUtTERGTEFHU0lDVURULWZvci1MaW51eC5wYXRjaCBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjU0OTIzZmE5ZmFiNWIyYjgzZjIzNWZiNzI1MjNkZTM3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcxMzJmZGFmOTM3OTQyOWQwMDQwMDUyMTdmMTBlMDBiN2QyMzE5ZDBmZWEyMmJkZmRkZWY4OTkxYzQ1Yjc1ZmUiCisKK1VQU1RSRUFNX0NIRUNLX1JFR0VYID0gIig/UDxwdmVyPlxkKyhcLlxkKykrKS8iCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLmljdS1wcm9qZWN0Lm9yZy9maWxlcy9pY3U0Yy8iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaXNvLWNvZGVzL2lzby1jb2Rlc18zLjc0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2lzby1jb2Rlcy9pc28tY29kZXNfMy43NC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQzNmExZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaXNvLWNvZGVzL2lzby1jb2Rlc18zLjc0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotU1VNTUFSWSA9ICJJU08gbGFuZ3VhZ2UsIHRlcnJpdG9yeSwgY3VycmVuY3ksIHNjcmlwdCBjb2RlcyBhbmQgdGhlaXIgdHJhbnNsYXRpb25zIgotTElDRU5TRSA9ICJMR1BMdjIuMSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIgotCi1TUkNfVVJJID0gImh0dHBzOi8vcGtnLWlzb2NvZGVzLmFsaW90aC5kZWJpYW4ub3JnL2Rvd25sb2Fkcy9pc28tY29kZXMtJHtQVn0udGFyLnh6IgotU1JDX1VSSVttZDVzdW1dID0gImQ1NDQ4NDc1ZDA4Nzc1NmI3ODM5MWI4YzUzYzViODNhIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjIxZjRmM2NlYThmZTA5ZjViNTM3ODQ1MjIzMDNhMGUxZTdkMDgzOTY0ZWNhZjFjNzViMTQ0MWQ0ZDllYzZhZWUiCi0KLSMgaW5oZXJpdCBnZXR0ZXh0IGNhbm5vdCBiZSB1c2VkLCBiZWNhdXNlIGl0IGFkZHMgZ2V0dGV4dC1uYXRpdmUgdG8gQkFTRURFUEVORFMgd2hpY2gKLSMgYXJlIGluaGliaXRlZCBieSBhbGxhcmNoCi1ERVBFTkRTID0gImdldHRleHQtbmF0aXZlIgotCi1pbmhlcml0IGFsbGFyY2ggYXV0b3Rvb2xzCi0KLUZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3htbC8iCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaXNvLWNvZGVzL2lzby1jb2Rlc18zLjc1LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2lzby1jb2Rlcy9pc28tY29kZXNfMy43NS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjNkNTNjCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2lzby1jb2Rlcy9pc28tY29kZXNfMy43NS5iYgpAQCAtMCwwICsxLDE1IEBACitTVU1NQVJZID0gIklTTyBsYW5ndWFnZSwgdGVycml0b3J5LCBjdXJyZW5jeSwgc2NyaXB0IGNvZGVzIGFuZCB0aGVpciB0cmFuc2xhdGlvbnMiCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9wa2ctaXNvY29kZXMuYWxpb3RoLmRlYmlhbi5vcmcvZG93bmxvYWRzL2lzby1jb2Rlcy0ke1BWfS50YXIueHoiCitTUkNfVVJJW21kNXN1bV0gPSAiOWJhMTczYjY5ZDQzNjAwMDM0MTRmMjM4Mzc1OTdhOTIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzMzNWUwMzAxY2Q3N2NkNGVlMDE5YmY1ZDM3MDlhYTc5MzA5ZDQ5ZGQ2NmU4NWJhMzUwY2FmNjdlMDBiMDBjZCIKKworIyBpbmhlcml0IGdldHRleHQgY2Fubm90IGJlIHVzZWQsIGJlY2F1c2UgaXQgYWRkcyBnZXR0ZXh0LW5hdGl2ZSB0byBCQVNFREVQRU5EUyB3aGljaAorIyBhcmUgaW5oaWJpdGVkIGJ5IGFsbGFyY2gKK0RFUEVORFMgPSAiZ2V0dGV4dC1uYXRpdmUiCisKK2luaGVyaXQgYWxsYXJjaCBhdXRvdG9vbHMKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0veG1sLyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhdG9taWMtb3BzL2xpYmF0b21pYy1vcHNfNy40LjQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYXRvbWljLW9wcy9saWJhdG9taWMtb3BzXzcuNC40LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzBjMWI4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhdG9taWMtb3BzL2xpYmF0b21pYy1vcHNfNy40LjQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi1TVU1NQVJZID0gIkEgbGlicmFyeSBmb3IgYXRvbWljIGludGVnZXIgb3BlcmF0aW9ucyIKLUhPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9pdm1haS9saWJhdG9taWNfb3BzLyIKLVNFQ1RJT04gPSAib3B0aW9uYWwiCi1QUk9WSURFUyArPSAibGliYXRvbWljcy1vcHMiCi1MSUNFTlNFID0gIkdQTHYyICYgTUlUIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZG9jL0xJQ0VOU0lORy50eHQ7bWQ1PWUwMGRkNWM4YWMwM2ExNGM1YWU1MjI1YTQ1MjVmYTJkIFwKLQkJICAgIgotCi1TUkNfVVJJID0gIlwKLQlodHRwOi8vd3d3Lml2bWFpc29mdC5jb20vX2Jpbi9hdG9taWNfb3BzL2xpYmF0b21pY19vcHMtJHtQVn0udGFyLmd6IFwKLQlmaWxlOi8vMDAwMS1BZGQtaW5pdGlhbC1uaW9zMi1hcmNoaXRlY3R1cmUtc3VwcG9ydC5wYXRjaCBcCi0JIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiNDI2ZDgwNGJhYWUxMmMzNzI5NjdhNmQxODNlMjVhZjIiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmYyMTBhNjAwZGQxYmVjYmY3OTM2ZGQyOTE0Y2Y1ZjVkMzM1NjA0NjkwNDg0OGRjZmQyN2QwYzhiMTJiNmY4ZiIKLQotUyA9ICIke1dPUktESVJ9L2xpYmF0b21pY19vcHMtJHtQVn0iCi0KLUFMTE9XX0VNUFRZXyR7UE59ID0gIjEiCi0KLUFSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0JIyB0aG9zZSBjb250YWluIG9ubHkgZG9jcywgbm90IG5lY2Vzc2FyeSBmb3Igbm93LgotCWluc3RhbGwgLW0gMDc1NSAtZCAke0R9JHtkb2NkaXJ9Ci0JbXYgJHtEfSR7ZGF0YWRpcn0vbGliYXRvbWljX29wcyAke0R9JHtkb2NkaXJ9LyR7QlBOfQotfQotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYXRvbWljLW9wcy9saWJhdG9taWMtb3BzXzcuNi4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmF0b21pYy1vcHMvbGliYXRvbWljLW9wc183LjYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDYzZDg2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmF0b21pYy1vcHMvbGliYXRvbWljLW9wc183LjYuMC5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIkEgbGlicmFyeSBmb3IgYXRvbWljIGludGVnZXIgb3BlcmF0aW9ucyIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9pdm1haS9saWJhdG9taWNfb3BzLyIKK1NFQ1RJT04gPSAib3B0aW9uYWwiCitQUk9WSURFUyArPSAibGliYXRvbWljcy1vcHMiCitMSUNFTlNFID0gIkdQTHYyICYgTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZG9jL0xJQ0VOU0lORy50eHQ7bWQ1PWUwMGRkNWM4YWMwM2ExNGM1YWU1MjI1YTQ1MjVmYTJkIFwKKwkJICAgIgorUFYgLj0gIitnaXQke1NSQ1BWfSIKKworU1JDUkVWID0gIjczYzYwYzVlZjFlZDM3MDExMTU0OWVlNWFhYjZkNDAyMGJhNzBlZDQiCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vaXZtYWkvbGliYXRvbWljX29wcyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJic2QvbGliYnNkLzAwMDItUmVtb3ZlLWZ1bm9wZW4ucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYnNkL2xpYmJzZC8wMDAyLVJlbW92ZS1mdW5vcGVuLnBhdGNoCmluZGV4IDgzY2U3YzguLjYwZGExNWUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJic2QvbGliYnNkLzAwMDItUmVtb3ZlLWZ1bm9wZW4ucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmJzZC9saWJic2QvMDAwMi1SZW1vdmUtZnVub3Blbi5wYXRjaApAQCAtMTUsMTcgKzE1LDE3IEBACiAgMyBmaWxlcyBjaGFuZ2VkLCAzIGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvbWFuL01ha2VmaWxlLmFtIGIvbWFuL01ha2VmaWxlLmFtCi1pbmRleCBlNGQ2ZTRhLi5jNzAxZDk0IDEwMDY0NAoraW5kZXggMjgxOTJjMC4uYTIyNzg3ZCAxMDA2NDQKIC0tLSBhL21hbi9NYWtlZmlsZS5hbQogKysrIGIvbWFuL01ha2VmaWxlLmFtCi1AQCAtMjksNyArMjksNiBAQCBkaXN0X21hbl9NQU5TID0gXAotIAlmbG9wZW4uMyBcCi0gCWZtdGNoZWNrLjMgXAotIAlmcGFyc2Vsbi4zIFwKK0BAIC0xNjgsNyArMTY4LDYgQEAgZGlzdF9tYW5fTUFOUyA9IFwKKyAJZm10Y2hlY2suM2JzZCBcCisgCWZwYXJzZWxuLjNic2QgXAorIAlmcHVyZ2UuM2JzZCBcCiAtCWZ1bm9wZW4uM2JzZCBcCi0gCWdldGJzaXplLjMgXAotIAlnZXRtb2RlLjMgXAotIAlnZXRwZWVyZWlkLjMgXAorIAlnZXRic2l6ZS4zYnNkIFwKKyAJZ2V0bW9kZS4zYnNkIFwKKyAJZ2V0cGVlcmVpZC4zYnNkIFwKIGRpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0KIGluZGV4IGFkODNkYmYuLjEzMjI1YTMgMTAwNjQ0CiAtLS0gYS9zcmMvTWFrZWZpbGUuYW0KQEAgLTM5LDcgKzM5LDcgQEAKICAJZ2V0cGVlcmVpZC5jIFwKICAJaGFzaC9tZDUuYyBcCiBkaWZmIC0tZ2l0IGEvdGVzdC9NYWtlZmlsZS5hbSBiL3Rlc3QvTWFrZWZpbGUuYW0KLWluZGV4IGE3NWM4ZmYuLmUzYTFkNDEgMTAwNjQ0CitpbmRleCBkODY1MzlhLi5iMzJlZDJlIDEwMDY0NAogLS0tIGEvdGVzdC9NYWtlZmlsZS5hbQogKysrIGIvdGVzdC9NYWtlZmlsZS5hbQogQEAgLTM2LDcgKzM2LDYgQEAgY2hlY2tfUFJPR1JBTVMgPSBcCkBAIC01MCw2ICs1MCwzIEBACiAgCWZwYXJzZWxuIFwKICAJZnB1cmdlIFwKICAJbWQ1IFwKLS0tIAotMi4xMC4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJic2QvbGliYnNkLzAwMDMtRml4LWJ1aWxkLWJyZWFrcy1kdWUtdG8tbWlzc2luZy1hLm91dC5oLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmJzZC9saWJic2QvMDAwMy1GaXgtYnVpbGQtYnJlYWtzLWR1ZS10by1taXNzaW5nLWEub3V0LmgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3NmQ5NDAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmJzZC9saWJic2QvMDAwMy1GaXgtYnVpbGQtYnJlYWtzLWR1ZS10by1taXNzaW5nLWEub3V0LmgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotRnJvbSBhMWI5M2MyNTMxMTgzNGYyZjQxMWU5YmZlMmU2MTY4OTliYTIxMjJkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFN1biwgNiBOb3YgMjAxNiAxMDoyMzo1NSAtMDgwMAotU3ViamVjdDogW1BBVENIIDMvM10gRml4IGJ1aWxkIGJyZWFrcyBkdWUgdG8gbWlzc2luZyBhLm91dC5oCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi0gaW5jbHVkZS9ic2Qvbmxpc3QuaCAgICAgICAgICAgICAgICAgICAgIHwgIDEgLQotIGluY2x1ZGUvYnNkL25saXN0LmggPT4gc3JjL2xvY2FsLWFvdXQuaCB8IDQ3ICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQotIHNyYy9ubGlzdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5ICsrKysrKysKLSAzIGZpbGVzIGNoYW5nZWQsIDQxIGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQotIGNvcHkgaW5jbHVkZS9ic2Qvbmxpc3QuaCA9PiBzcmMvbG9jYWwtYW91dC5oICg2MyUpCi0KLWRpZmYgLS1naXQgYS9pbmNsdWRlL2JzZC9ubGlzdC5oIGIvaW5jbHVkZS9ic2Qvbmxpc3QuaAotaW5kZXggMDM4OWFiNy4uOWM3ZTNkOCAxMDA2NDQKLS0tLSBhL2luY2x1ZGUvYnNkL25saXN0LmgKLSsrKyBiL2luY2x1ZGUvYnNkL25saXN0LmgKLUBAIC0yOCw3ICsyOCw2IEBACi0gI2RlZmluZSBMSUJCU0RfTkxJU1RfSAotIAotICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLS0jaW5jbHVkZSA8YS5vdXQuaD4KLSAKLSAvKiBfX0JFR0lOX0RFQ0xTICovCi0gI2lmZGVmIF9fY3BsdXNwbHVzCi1kaWZmIC0tZ2l0IGEvaW5jbHVkZS9ic2Qvbmxpc3QuaCBiL3NyYy9sb2NhbC1hb3V0LmgKLXNpbWlsYXJpdHkgaW5kZXggNjMlCi1jb3B5IGZyb20gaW5jbHVkZS9ic2Qvbmxpc3QuaAotY29weSB0byBzcmMvbG9jYWwtYW91dC5oCi1pbmRleCAwMzg5YWI3Li4yYWRiOTNlIDEwMDY0NAotLS0tIGEvaW5jbHVkZS9ic2Qvbmxpc3QuaAotKysrIGIvc3JjL2xvY2FsLWFvdXQuaAotQEAgLTEsNSArMSw1IEBACi0gLyoKLS0gKiBDb3B5cmlnaHQgwqkgMjAwOSBHdWlsbGVtIEpvdmVyIDxndWlsbGVtQGhhZHJvbnMub3JnPgotKyAqIENvcHlyaWdodCDCqSAyMDE2IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0gICoKLSAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLUBAIC0yNCwyMCArMjQsMzcgQEAKLSAgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAgKi8KLSAKLS0jaWZuZGVmIExJQkJTRF9OTElTVF9ICi0tI2RlZmluZSBMSUJCU0RfTkxJU1RfSAotKyNpZm5kZWYgTElCQlNEX0xPQ0FMX0FPVVRfSAotKyNkZWZpbmUgTElCQlNEX0xPQ0FMX0FPVVRfSAotIAotLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLS0jaW5jbHVkZSA8YS5vdXQuaD4KLSsjZGVmaW5lIE5fVU5ERiAgMAotKyNkZWZpbmUgTl9BQlMgICAyCi0rI2RlZmluZSBOX1RFWFQgIDQKLSsjZGVmaW5lIE5fREFUQSAgNgotKyNkZWZpbmUgTl9CU1MgICA4Ci0rI2RlZmluZSBOX0ZOICAgIDE1Ci0rI2RlZmluZSBOX0VYVCAgIDEKLSsjZGVmaW5lIE5fVFlQRSAgMDM2Ci0rI2RlZmluZSBOX1NUQUIgIDAzNDAKLSsjZGVmaW5lIE5fSU5EUiAgMHhhCi0rI2RlZmluZSBOX1NFVEEgIDB4MTQgICAgLyogQWJzb2x1dGUgc2V0IGVsZW1lbnQgc3ltYm9sLiAgKi8KLSsjZGVmaW5lIE5fU0VUVCAgMHgxNiAgICAvKiBUZXh0IHNldCBlbGVtZW50IHN5bWJvbC4gICovCi0rI2RlZmluZSBOX1NFVEQgIDB4MTggICAgLyogRGF0YSBzZXQgZWxlbWVudCBzeW1ib2wuICAqLwotKyNkZWZpbmUgTl9TRVRCICAweDFBICAgIC8qIEJzcyBzZXQgZWxlbWVudCBzeW1ib2wuICAqLwotKyNkZWZpbmUgTl9TRVRWICAweDFDICAgIC8qIFBvaW50ZXIgdG8gc2V0IHZlY3RvciBpbiBkYXRhIGFyZWEuICAqLwotIAotLS8qIF9fQkVHSU5fREVDTFMgKi8KLS0jaWZkZWYgX19jcGx1c3BsdXMKLS1leHRlcm4gIkMiIHsKLS0jZW5kaWYKLS1leHRlcm4gaW50IG5saXN0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBzdHJ1Y3Qgbmxpc3QgKmxpc3QpOwotLSNpZmRlZiBfX2NwbHVzcGx1cwotLX0KLS0jZW5kaWYKLS0vKiBfX0VORF9ERUNMUyAqLwotK3N0cnVjdCBubGlzdAotK3sKLSsgIHVuaW9uCi0rICAgIHsKLSsgICAgICBjaGFyICpuX25hbWU7Ci0rICAgICAgc3RydWN0IG5saXN0ICpuX25leHQ7Ci0rICAgICAgbG9uZyBuX3N0cng7Ci0rICAgIH0gbl91bjsKLSsgIHVuc2lnbmVkIGNoYXIgbl90eXBlOwotKyAgY2hhciBuX290aGVyOwotKyAgc2hvcnQgbl9kZXNjOwotKyAgdW5zaWduZWQgbG9uZyBuX3ZhbHVlOwotK307Ci0gCi0tI2VuZGlmCi0rI2VuZGlmIC8qIExJQkJTRF9MT0NBTF9BT1VUX0ggKi8KLWRpZmYgLS1naXQgYS9zcmMvbmxpc3QuYyBiL3NyYy9ubGlzdC5jCi1pbmRleCAwY2ZmZTU1Li42MjVkMzEwIDEwMDY0NAotLS0tIGEvc3JjL25saXN0LmMKLSsrKyBiL3NyYy9ubGlzdC5jCi1AQCAtNDAsNyArNDAsMTEgQEAgc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKW5saXN0LmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSAKLSAjaW5jbHVkZSA8ZXJybm8uaD4KLSAjaW5jbHVkZSA8ZmNudGwuaD4KLSsjaWZkZWYgX19HTElCQ19fCi0gI2luY2x1ZGUgPGEub3V0Lmg+Ci0rI2Vsc2UKLSsjZGVmaW5lIF9fTk9fQV9PVVRfU1VQUE9SVAotKyNlbmRpZgotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8dW5pc3RkLmg+Ci1AQCAtNDgsMTIgKzUyLDE3IEBAIHN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylubGlzdC5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci0gI2lmICFkZWZpbmVkKF9fTk9fQV9PVVRfU1VQUE9SVCkKLSAjZGVmaW5lIF9OTElTVF9ET19BT1VUCi0gI2VuZGlmCi0rCi0gI2RlZmluZSBfTkxJU1RfRE9fRUxGCi0gCi0gI2lmZGVmIF9OTElTVF9ET19FTEYKLSAjaW5jbHVkZSAibG9jYWwtZWxmLmgiCi0gI2VuZGlmCi0gCi0rI2lmZGVmIF9OTElTVF9ET19FTEYKLSsjaW5jbHVkZSAibG9jYWwtYW91dC5oIgotKyNlbmRpZgotKwotICNkZWZpbmUgU0laRV9UX01BWCAweGZmZmZmZmZmVQotIAotICNpZmRlZiBfTkxJU1RfRE9fQU9VVAotLS0gCi0yLjEwLjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmJzZC9saWJic2RfMC44LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYnNkL2xpYmJzZF8wLjguMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg1ZWUyMS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYnNkL2xpYmJzZF8wLjguMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEzIEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0jIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUIGZvciB0aGUgdGVybXMpCi0KLVNVTU1BUlkgPSAiTGlicmFyeSBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBmcm9tIEJTRCBzeXN0ZW1zIgotREVTQ1JJUFRJT04gPSAiVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIHVzZWZ1bCBmdW5jdGlvbnMgY29tbW9ubHkgZm91bmQgb24gQlNEIHN5c3RlbXMsIFwKLSAgICAgICAgICAgICAgIGFuZCBsYWNraW5nIG9uIG90aGVycyBsaWtlIEdOVSBzeXN0ZW1zLCB0aHVzIG1ha2luZyBpdCBlYXNpZXIgdG8gcG9ydCBcCi0gICAgICAgICAgICAgICBwcm9qZWN0cyB3aXRoIHN0cm9uZyBCU0Qgb3JpZ2lucywgd2l0aG91dCBuZWVkaW5nIHRvIGVtYmVkIHRoZSBzYW1lIFwKLSAgICAgICAgICAgICAgIGNvZGUgb3ZlciBhbmQgb3ZlciBhZ2FpbiBvbiBlYWNoIHByb2plY3QuIgotCi1IT01FUEFHRSA9ICJodHRwOi8vbGliYnNkLmZyZWVkZXNrdG9wLm9yZy93aWtpLyIKLSMgVGhlcmUgc2VlbXMgdG8gYmUgbW9yZSBsaWNlbnNlcyB1c2VkIGluIHRoZSBjb2RlLCBJIGRvbid0IHRoaW5rIHdlIHdhbnQgdG8gbGlzdCB0aGVtIGFsbCBoZXJlLCBjb21wbGV0ZSBsaXN0OgotIyBPRSBAIH4vcHJvamVjdHMvbGliYnNkICQgZ3JlcCBeTGljZW5zZTogQ09QWUlORyAgfCBzb3J0Ci0jIExpY2Vuc2U6IEJTRC0yLWNsYXVzZQotIyBMaWNlbnNlOiBCU0QtMi1jbGF1c2UKLSMgTGljZW5zZTogQlNELTItY2xhdXNlLU5ldEJTRAotIyBMaWNlbnNlOiBCU0QtMi1jbGF1c2UtYXV0aG9yCi0jIExpY2Vuc2U6IEJTRC0yLWNsYXVzZS12ZXJiYXRpbQotIyBMaWNlbnNlOiBCU0QtMy1jbGF1c2UKLSMgTGljZW5zZTogQlNELTMtY2xhdXNlCi0jIExpY2Vuc2U6IEJTRC0zLWNsYXVzZQotIyBMaWNlbnNlOiBCU0QtMy1jbGF1c2UtUGV0ZXItV2VtbQotIyBMaWNlbnNlOiBCU0QtMy1jbGF1c2UtUmVnZW50cwotIyBMaWNlbnNlOiBCU0QtNC1jbGF1c2UtQ2hyaXN0b3BoZXItRy1EZW1ldHJpb3UKLSMgTGljZW5zZTogQlNELTQtY2xhdXNlLU5pZWxzLVByb3ZvcwotIyBMaWNlbnNlOiBCU0QtNS1jbGF1c2UtUGV0ZXItV2VtbQotIyBMaWNlbnNlOiBCZWVyd2FyZQotIyBMaWNlbnNlOiBFeHBhdAotIyBMaWNlbnNlOiBJU0MKLSMgTGljZW5zZTogSVNDLU9yaWdpbmFsCi0jIExpY2Vuc2U6IHB1YmxpYy1kb21haW4KLSMgTGljZW5zZTogcHVibGljLWRvbWFpbi1Db2xpbi1QbHVtYgotTElDRU5TRSA9ICJCU0QtNC1DbGF1c2UgJiBJU0MgJiBQRCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTBiOWM4OWQ4NjE5MTViODY2NTViOTZlNWUzMmZhMmFhIgotU0VDVElPTiA9ICJsaWJzIgotCi1TUkNfVVJJID0gIiBcCi0gICAgaHR0cDovL2xpYmJzZC5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci54eiBcCi0gICAgZmlsZTovLzAwMDEtc3JjLWxpYmJzZC1vdmVybGF5LnBjLmluLVNldC1DZmxhZ3MtdG8tdXNlLUktaW5zdGVhZC5wYXRjaCBcCi0iCi1TUkNfVVJJX2FwcGVuZF9saWJjLW11c2wgID0gIiBcCi0gICAgZmlsZTovLzAwMDEtUmVwbGFjZS1fX0JFR0lOX0RFQ0xTLWFuZC1fX0VORF9ERUNMUy5wYXRjaCBcCi0gICAgZmlsZTovLzAwMDItUmVtb3ZlLWZ1bm9wZW4ucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDAzLUZpeC1idWlsZC1icmVha3MtZHVlLXRvLW1pc3NpbmctYS5vdXQuaC5wYXRjaCBcCi0iCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJlOTM1YzFiYjZjYzk4YTRhNDNjYjFkYTIyNzk1NDkzYSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI5MzRiNjM0ZjRkZmQ4NjViNjQ4MjY1MGI4ZjUyMmM3MGFlNjVjNDYzNTI5ZGU4YmU5MDdiNTNjODljM2EzNGE4IgotCi1pbmhlcml0IGF1dG90b29scyBwa2djb25maWcKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmJzZC9saWJic2RfMC44LjYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYnNkL2xpYmJzZF8wLjguNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODI1NDNmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmJzZC9saWJic2RfMC44LjYuYmIKQEAgLTAsMCArMSw1MCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTMgS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQgZm9yIHRoZSB0ZXJtcykKKworU1VNTUFSWSA9ICJMaWJyYXJ5IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGZyb20gQlNEIHN5c3RlbXMiCitERVNDUklQVElPTiA9ICJUaGlzIGxpYnJhcnkgcHJvdmlkZXMgdXNlZnVsIGZ1bmN0aW9ucyBjb21tb25seSBmb3VuZCBvbiBCU0Qgc3lzdGVtcywgXAorICAgICAgICAgICAgICAgYW5kIGxhY2tpbmcgb24gb3RoZXJzIGxpa2UgR05VIHN5c3RlbXMsIHRodXMgbWFraW5nIGl0IGVhc2llciB0byBwb3J0IFwKKyAgICAgICAgICAgICAgIHByb2plY3RzIHdpdGggc3Ryb25nIEJTRCBvcmlnaW5zLCB3aXRob3V0IG5lZWRpbmcgdG8gZW1iZWQgdGhlIHNhbWUgXAorICAgICAgICAgICAgICAgY29kZSBvdmVyIGFuZCBvdmVyIGFnYWluIG9uIGVhY2ggcHJvamVjdC4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9saWJic2QuZnJlZWRlc2t0b3Aub3JnL3dpa2kvIgorIyBUaGVyZSBzZWVtcyB0byBiZSBtb3JlIGxpY2Vuc2VzIHVzZWQgaW4gdGhlIGNvZGUsIEkgZG9uJ3QgdGhpbmsgd2Ugd2FudCB0byBsaXN0IHRoZW0gYWxsIGhlcmUsIGNvbXBsZXRlIGxpc3Q6CisjIE9FIEAgfi9wcm9qZWN0cy9saWJic2QgJCBncmVwIF5MaWNlbnNlOiBDT1BZSU5HICB8IHNvcnQKKyMgTGljZW5zZTogQlNELTItY2xhdXNlCisjIExpY2Vuc2U6IEJTRC0yLWNsYXVzZQorIyBMaWNlbnNlOiBCU0QtMi1jbGF1c2UtTmV0QlNECisjIExpY2Vuc2U6IEJTRC0yLWNsYXVzZS1hdXRob3IKKyMgTGljZW5zZTogQlNELTItY2xhdXNlLXZlcmJhdGltCisjIExpY2Vuc2U6IEJTRC0zLWNsYXVzZQorIyBMaWNlbnNlOiBCU0QtMy1jbGF1c2UKKyMgTGljZW5zZTogQlNELTMtY2xhdXNlCisjIExpY2Vuc2U6IEJTRC0zLWNsYXVzZS1QZXRlci1XZW1tCisjIExpY2Vuc2U6IEJTRC0zLWNsYXVzZS1SZWdlbnRzCisjIExpY2Vuc2U6IEJTRC00LWNsYXVzZS1DaHJpc3RvcGhlci1HLURlbWV0cmlvdQorIyBMaWNlbnNlOiBCU0QtNC1jbGF1c2UtTmllbHMtUHJvdm9zCisjIExpY2Vuc2U6IEJTRC01LWNsYXVzZS1QZXRlci1XZW1tCisjIExpY2Vuc2U6IEJlZXJ3YXJlCisjIExpY2Vuc2U6IEV4cGF0CisjIExpY2Vuc2U6IElTQworIyBMaWNlbnNlOiBJU0MtT3JpZ2luYWwKKyMgTGljZW5zZTogcHVibGljLWRvbWFpbgorIyBMaWNlbnNlOiBwdWJsaWMtZG9tYWluLUNvbGluLVBsdW1iCitMSUNFTlNFID0gIkJTRC00LUNsYXVzZSAmIElTQyAmIFBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDhmYzRlNjZiZTQ1MjY3MTVkYWIwOWM1ZmJhNWU5ZTgiCitTRUNUSU9OID0gImxpYnMiCisKK1NSQ19VUkkgPSAiIFwKKyAgICBodHRwOi8vbGliYnNkLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICBmaWxlOi8vMDAwMS1zcmMtbGliYnNkLW92ZXJsYXkucGMuaW4tU2V0LUNmbGFncy10by11c2UtSS1pbnN0ZWFkLnBhdGNoIFwKKyIKK1NSQ19VUklfYXBwZW5kX2xpYmMtbXVzbCAgPSAiIFwKKyAgICBmaWxlOi8vMDAwMS1SZXBsYWNlLV9fQkVHSU5fREVDTFMtYW5kLV9fRU5EX0RFQ0xTLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMi1SZW1vdmUtZnVub3Blbi5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0YWI3YmVjNjM5YWYxN2QwYWFjYjUwMjIyYjQ3OTExMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0NjdmYmY5ZGYxZjQ5YWYxMWY3ZjY4NjY5MTA1N2M4YzBhNzYxM2FlNWE4NzA1NzdiZWY5MTU1ZGUzOWY5Njg3IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC9maWxlcy8wMDAxLUZpeC1idWlsZC13aXRoLWdwZXJmLTMuMS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAvZmlsZXMvMDAwMS1GaXgtYnVpbGQtd2l0aC1ncGVyZi0zLjEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEwZWY5MAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAvZmlsZXMvMDAwMS1GaXgtYnVpbGQtd2l0aC1ncGVyZi0zLjEucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSBhMDVlYmE2OGM0MjIyMmYwMjQ2NWQ3YmEzNzYwMTU5MjY0MzNjNTMxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDI2IEp1bCAyMDE3IDEzOjM3OjQ5ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBidWlsZCB3aXRoIGdwZXJmIDMuMQorCitUaGUgZ2VuZXJhdGVkIGdwZXJmIGZpbGUgcmVmZXJzIHRvIHNpemVfdCB3aGljaCBuZWVkcyB0byBiZQorcHJvdmlkZWQgYnkgc3RkZGVmLmggaW5jbHVkZS4gQWxzbywgYWRqdXN0IHRoZSBtYWtlZmlsZQordG8gbWF0Y2ggdGhlIGRlY2xhcmF0aW9uIGluIHRoZSBncGVyZiBmaWxlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorCistLS0KKyBsaWJjYXAvTWFrZWZpbGUgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliY2FwL01ha2VmaWxlIGIvbGliY2FwL01ha2VmaWxlCitpbmRleCBkMTg5Nzc3Li4xYTU3MjA2IDEwMDY0NAorLS0tIGEvbGliY2FwL01ha2VmaWxlCisrKysgYi9saWJjYXAvTWFrZWZpbGUKK0BAIC0yMiw3ICsyMiw3IEBAIGFsbDogJChNSU5MSUJOQU1FKSAkKFNUQUxJQk5BTUUpIGxpYmNhcC5wYworIAorIGlmZXEgKCQoQlVJTERfR1BFUkYpLHllcykKKyBVU0VfR1BFUkZfT1VUUFVUID0gJChHUEVSRl9PVVRQVVQpCistSU5DTFVERV9HUEVSRl9PVVRQVVQgPSAtaW5jbHVkZSAkKEdQRVJGX09VVFBVVCkKKytJTkNMVURFX0dQRVJGX09VVFBVVCA9IC1pbmNsdWRlIHN0ZGRlZi5oIC1pbmNsdWRlICQoR1BFUkZfT1VUUFVUKQorIGVuZGlmCisgCisgbGliY2FwLnBjOiBsaWJjYXAucGMuaW4KK0BAIC00MSw3ICs0MSw3IEBAIGNhcF9uYW1lcy5oOiBfbWFrZW5hbWVzCisgCS4vX21ha2VuYW1lcyA+IGNhcF9uYW1lcy5oCisgCisgJChHUEVSRl9PVVRQVVQpOiBjYXBfbmFtZXMubGlzdC5oCistCXBlcmwgLWUgJ3ByaW50ICJzdHJ1Y3QgX19jYXBfdG9rZW5fcyB7IGNvbnN0IGNoYXIgKm5hbWU7IGludCBpbmRleDsgfTtcbiV7XG5jb25zdCBzdHJ1Y3QgX19jYXBfdG9rZW5fcyAqX19jYXBfbG9va3VwX25hbWUoY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQpO1xuJX1cbiUlXG4iOyB3aGlsZSAoJCRsID0gPD4pIHsgJCRsID1+IHMvW1x7XCJdLy9nOyAkJGwgPX4gcy9cfS4qLy8gOyBwcmludCAkJGw7IH0nIDwgJDwgfCBncGVyZiAtLWlnbm9yZS1jYXNlIC0tbGFuZ3VhZ2U9QU5TSS1DIC0tcmVhZG9ubHkgLS1udWxsLXN0cmluZ3MgLS1nbG9iYWwtdGFibGUgLS1oYXNoLWZ1bmN0aW9uLW5hbWU9X19jYXBfaGFzaF9uYW1lIC0tbG9va3VwLWZ1bmN0aW9uLW5hbWU9Il9fY2FwX2xvb2t1cF9uYW1lIiAtYyAtdCAtbTIwICQoSU5ERU5UKSA+ICRACisrCXBlcmwgLWUgJ3ByaW50ICJzdHJ1Y3QgX19jYXBfdG9rZW5fcyB7IGNvbnN0IGNoYXIgKm5hbWU7IGludCBpbmRleDsgfTtcbiV7XG5jb25zdCBzdHJ1Y3QgX19jYXBfdG9rZW5fcyAqX19jYXBfbG9va3VwX25hbWUoY29uc3QgY2hhciAqLCByZWdpc3RlciBzaXplX3QpO1xuJX1cbiUlXG4iOyB3aGlsZSAoJCRsID0gPD4pIHsgJCRsID1+IHMvW1x7XCJdLy9nOyAkJGwgPX4gcy9cfS4qLy8gOyBwcmludCAkJGw7IH0nIDwgJDwgfCBncGVyZiAtLWlnbm9yZS1jYXNlIC0tbGFuZ3VhZ2U9QU5TSS1DIC0tcmVhZG9ubHkgLS1udWxsLXN0cmluZ3MgLS1nbG9iYWwtdGFibGUgLS1oYXNoLWZ1bmN0aW9uLW5hbWU9X19jYXBfaGFzaF9uYW1lIC0tbG9va3VwLWZ1bmN0aW9uLW5hbWU9Il9fY2FwX2xvb2t1cF9uYW1lIiAtYyAtdCAtbTIwICQoSU5ERU5UKSA+ICRACisgCisgY2FwX25hbWVzLmxpc3QuaDogTWFrZWZpbGUgJChLRVJORUxfSEVBREVSUykvbGludXgvY2FwYWJpbGl0eS5oCisgCUBlY2hvICI9PiBtYWtpbmcgJEAgZnJvbSAkKEtFUk5FTF9IRUFERVJTKS9saW51eC9jYXBhYmlsaXR5LmgiCistLSAKKzIuMTMuMgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwL2xpYmNhcF8yLjI1LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC9saWJjYXBfMi4yNS5iYgppbmRleCAwNTg3ZTc3Li5kNjE5YTJlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwL2xpYmNhcF8yLjI1LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAvbGliY2FwXzIuMjUuYmIKQEAgLTksNyArOSw4IEBACiAKIFNSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC9saWJzL3NlY3VyaXR5L2xpbnV4LXByaXZzLyR7QlBOfTIvJHtCUE59LSR7UFZ9LnRhci54eiBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWVuc3VyZS10aGUtWEFUVFJfTkFNRV9DQVBTLWlzLWRlZmluZWQtd2hlbi1pdC1pcy11c2UucGF0Y2ggXAotIgorICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtYnVpbGQtd2l0aC1ncGVyZi0zLjEucGF0Y2ggXAorICAgICAgICAgICAiCiBTUkNfVVJJW21kNXN1bV0gPSAiNjY2NmI4MzllNWQ0NmMyYWQzM2ZjOGFhMmNlYjVmNzciCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjkzYzhhYzUxZTk4M2VlNjc4MjA1NTcxZWYyNzI0MzlkODNhZmU2MmRkOGU0MjRlYTE0YWQ5NzkwYmMzNTE2MiIKIApAQCAtMjIsOSArMjMsNiBAQAogCSMgb24gd2hhdCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCA/PQogCXNlZCAtZSAncyw6PSw/PSxnJyAtaSBNYWtlLlJ1bGVzCiAJc2VkIC1lICdzLF5CVUlMRF9DRkxBR1MgPz0gJCguKkNGTEFHUyksQlVJTERfQ0ZMQUdTIDo9ICQoQlVJTERfQ0ZMQUdTKSwnIC1pIE1ha2UuUnVsZXMKLQotCSMgZGlzYWJsZSBncGVyZiBkZXRlY3Rpb24KLQlzZWQgLWUgJy9zaGVsbCBncGVyZi9jaWZlcSAoLHllcyknIC1pIGxpYmNhcC9NYWtlZmlsZQogfQogCiBQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuZmlsdGVyKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgZCl9IgpAQCAtMzcsNiArMzUsNyBAQAogICBsaWI9JHtAb3MucGF0aC5iYXNlbmFtZSgnJHtsaWJkaXJ9Jyl9IFwKICAgUkFJU0VfU0VURkNBUD1ubyBcCiAgIERZTkFNSUM9eWVzIFwKKyAgQlVJTERfR1BFUkY9eWVzIFwKICIKIAogRVhUUkFfT0VNQUtFX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIFNZU1RFTV9IRUFERVJTPSR7U1RBR0lOR19JTkNESVJ9IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNyb2NvL2xpYmNyb2NvXzAuNi4xMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjcm9jby9saWJjcm9jb18wLjYuMTEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkZjc5MjMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNyb2NvL2xpYmNyb2NvXzAuNi4xMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLVNVTU1BUlkgPSAiQ2FzY2FkaW5nIFN0eWxlIFNoZWV0IChDU1MpIHBhcnNpbmcgYW5kIG1hbmlwdWxhdGlvbiB0b29sa2l0IgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbm9tZS5vcmcvIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCi0KLUxJQ0VOU0UgPSAiTEdQTHYyICYgTEdQTHYyLjEiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01NWNhODE3Y2NiN2Q1YjViNjYzNTU2OTBlOWFiYzYwNSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvY3ItcmdiLmM7ZW5kbGluZT0yMjttZDU9MzFkNWYwOTQ0ZDU1NmM4NTg5ZDA0ZWE2MDU1ZmNjNjYgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvY3ItdGVzdC11dGlscy5jO2VuZGxpbmU9MjE7bWQ1PTIzODJjMjc5MzRjYWUxZDM3OTJmY2IxN2E2MTQyYzRlIgotCi1TRUNUSU9OID0gIngxMS91dGlscyIKLURFUEVORFMgPSAiZ2xpYi0yLjAgbGlieG1sMiB6bGliIgotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCi1FWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLUJzeW1ib2xpYz1hdXRvIgotCi1CSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2Nyb2NvLTAuNi1jb25maWciCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnbm9tZWJhc2UgZ3RrLWRvYyBiaW5jb25maWctZGlzYWJsZWQKLQotU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZGFiYzE5MTFkZmJmYTg1ZjhlNjg1OWNhNDc4NjMxNjgiCi1TUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIxMzJiNTI4YTk0ODU4NmIwZGZhMDVkN2U5ZTA1OTkwMWJjYTVhM2JlNjc1YjYwNzFhOTBhOTBiODFhZTVhMDU2IgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNyb2NvL2xpYmNyb2NvXzAuNi4xMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjcm9jby9saWJjcm9jb18wLjYuMTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBhZjc1OQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjcm9jby9saWJjcm9jb18wLjYuMTIuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJDYXNjYWRpbmcgU3R5bGUgU2hlZXQgKENTUykgcGFyc2luZyBhbmQgbWFuaXB1bGF0aW9uIHRvb2xraXQiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmdub21lLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIgJiBMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU1Y2E4MTdjY2I3ZDViNWI2NjM1NTY5MGU5YWJjNjA1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9jci1yZ2IuYztlbmRsaW5lPTIyO21kNT0zMWQ1ZjA5NDRkNTU2Yzg1ODlkMDRlYTYwNTVmY2M2NiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy9jci10ZXN0LXV0aWxzLmM7ZW5kbGluZT0yMTttZDU9MjM4MmMyNzkzNGNhZTFkMzc5MmZjYjE3YTYxNDJjNGUiCisKK1NFQ1RJT04gPSAieDExL3V0aWxzIgorREVQRU5EUyA9ICJnbGliLTIuMCBsaWJ4bWwyIHpsaWIiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKK0VYVFJBX09FQ09ORiArPSAiLS1lbmFibGUtQnN5bWJvbGljPWF1dG8iCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vY3JvY28tMC42LWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdub21lYmFzZSBndGstZG9jIGJpbmNvbmZpZy1kaXNhYmxlZAorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJiYzA5ODRmY2UwNzhiYTJjZTI5Zjk1MDBjNmI5ZGRjZSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImRkYzRiNTU0NmM5ZmI0MjgwYTUwMTdlMjcwN2ZiZDQ4MzkwMzRlZDFhYmE1YjdkNDM3MjIxMmYzNGY4NGY4NjAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZkZXYvbGliZXZkZXZfMS41LjYuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZkZXYvbGliZXZkZXZfMS41LjYuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmODQ1NTQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZGV2L2xpYmV2ZGV2XzEuNS42LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotU1VNTUFSWSA9ICJXcmFwcGVyIGxpYnJhcnkgZm9yIGV2ZGV2IGRldmljZXMiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL2xpYmV2ZGV2LyIKLVNFQ1RJT04gPSAibGlicyIKLQotTElDRU5TRSA9ICJNSVQtWCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1YWFlMGQzOGZlZWE2ZmRhOTdjYTM4MWNiOTEzMmViIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYmV2ZGV2L2xpYmV2ZGV2Lmg7ZW5kbGluZT0yMTttZDU9N2ZmNGYwYjUxMTMyNTJjMmYxYTgyOGUwYmJhZDk4ZDEiCi0KLVNSQ19VUkkgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvbGliZXZkZXYvJHtCUH0udGFyLnh6IgotCi1TUkNfVVJJW21kNXN1bV0gPSAiZDRjZTlmMDYxZjhmOTU0YmVhN2FkYmEwY2I3NjhhNTMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWNlYzdlOWQ2NmIxZDM2OTJmMTBiM2IyMGFhOTdmYjI1ZTg3NGE3ODRjNTU1MmE3YjE2OTgwOTFmZWY1YTY4OCIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZkZXYvbGliZXZkZXZfMS41LjcuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZkZXYvbGliZXZkZXZfMS41LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc0MGRhMgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmRldi9saWJldmRldl8xLjUuNy5iYgpAQCAtMCwwICsxLDE0IEBACitTVU1NQVJZID0gIldyYXBwZXIgbGlicmFyeSBmb3IgZXZkZXYgZGV2aWNlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvbGliZXZkZXYvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIk1JVC1YIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzVhYWUwZDM4ZmVlYTZmZGE5N2NhMzgxY2I5MTMyZWIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliZXZkZXYvbGliZXZkZXYuaDtlbmRsaW5lPTIxO21kNT03ZmY0ZjBiNTExMzI1MmMyZjFhODI4ZTBiYmFkOThkMSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9saWJldmRldi8ke0JQfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ZjFjZmFlZThkNzVlYTNmYmJmZWI5OWE5ODczMDk1MiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhMWU1OWUzN2EyZjBkMzk3ZmZkN2U4M2I3M2FmMGU2MzhkYjgzYjhkZDA4OTAyZWYwZjY1MWEyMWNjMWRkNDIyIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmVudC9saWJldmVudC9NYWtlZmlsZS1taXNzaW5nLXRlc3QtZGlyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZW50L2xpYmV2ZW50L01ha2VmaWxlLW1pc3NpbmctdGVzdC1kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg4MGJkMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmVudC9saWJldmVudC9NYWtlZmlsZS1taXNzaW5nLXRlc3QtZGlyLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK0ZpeCBtaXNzaW5nIHRlc3QgZGlyZWN0b3J5IGNyZWF0aW9uLgorCitHQ0MgdXNlZCBpbiBPRS1jb3JlIGhhcyAiZGVwZW5kZW5jeSB0cmFja2luZyIgZGlzYWJsZWQgYW5kCitsaWJldmVudCBoYXMgcHJvYmxlbSB3aXRoIHRoaXMuCitEdWUgdG8gcmVtb3ZlZCBtYWtlZmlsZS5hbS9pbiBmaWxlcyBpbiB0ZXN0L3NhbXBsZS9pbmNsdWRlCitkaXJlY3Rvcmllcywgb3V0cHV0IGRpcmVjdG9yaWVzIGFyZSBub3QgY3JlYXRlZCBpbgorY29uZmlndXJhdGlvbiBzdGVwLiBDb21waWxhdGlvbiBzdGVwIHdpbGwgZmFpbHMsIHdoZW4KK3RyeWluZyB0byB3cml0ZSB0byBub24tZXhpc3RpbmcgZGlyZWN0b3J5LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW090aGVyXQorV29ya2Fyb3VuZCBzcGVjaWZpYyB0byBvdXIgYnVpbGQgc3lzdGVtLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWogVmFsZWsgPGFuZHJlai52YWxla0BzaWVtZW5zLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFBhc2NhbCBCYWNoIDxwYXNjYWwuYmFjaEBzaWVtZW5zLmNvbT4KKworZGlmZiAtLWdpdCBhL2xpYmV2ZW50LTIuMS44LXN0YWJsZS90ZXN0L2luY2x1ZGUuYW0gYi9saWJldmVudC0yLjEuOC1zdGFibGUvdGVzdC9pbmNsdWRlLmFtCitpbmRleCBlZWEyNDlmLi5kMzIzZGZmIDEwMDY0NAorLS0tIGEvdGVzdC9pbmNsdWRlLmFtCisrKysgYi90ZXN0L2luY2x1ZGUuYW0KK0BAIC0xNjEsNiArMTYxLDcgQEAgdGVzdF9iZW5jaF9odHRwY2xpZW50X0xEQUREID0gJChMSUJFVkVOVF9HQ19TRUNUSU9OUykgbGliZXZlbnRfY29yZS5sYQorIHRlc3QvcmVncmVzcy5nZW4uYyB0ZXN0L3JlZ3Jlc3MuZ2VuLmg6IHRlc3QvcnBjZ2VuLWF0dGVtcHRlZAorIAorIHRlc3QvcnBjZ2VuLWF0dGVtcHRlZDogdGVzdC9yZWdyZXNzLnJwYyBldmVudF9ycGNnZW4ucHkgdGVzdC9ycGNnZW5fd3JhcHBlci5zaAorKwlAJChNS0RJUl9QKSB0ZXN0CisgCSQoQU1fVl9HRU4pZGF0ZSAtdSA+ICRACisgCSQoQU1fVl9hdClpZiAkKHNyY2RpcikvdGVzdC9ycGNnZW5fd3JhcHBlci5zaCAkKHNyY2RpcikvdGVzdDsgdGhlbiBcCisgCSAgIHRydWU7IFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmVudC9saWJldmVudF8yLjAuMjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZlbnQvbGliZXZlbnRfMi4wLjIyLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjhhMzFjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmVudC9saWJldmVudF8yLjAuMjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1TVU1NQVJZID0gIkFuIGFzeW5jaHJvbm91cyBldmVudCBub3RpZmljYXRpb24gbGlicmFyeSIKLUhPTUVQQUdFID0gImh0dHA6Ly9saWJldmVudC5vcmcvIgotQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTUwODg0JmF0aWQ9NDYxMzIyIgotU0VDVElPTiA9ICJsaWJzIgotCi1MSUNFTlNFID0gIkJTRCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTQ1YzUzMTZmZjY4NGJjZmUyZjlmODZkOGIxMjc5NTU5IgotCi1TUkNfVVJJID0gIiBcCi0gICAgJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xldmVudC8ke0JQfS1zdGFibGUudGFyLmd6IFwKLSAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKLSIKLQotU1JDX1VSSVttZDVzdW1dID0gImM0YzU2Zjk4NmFhOTg1Njc3Y2ExZGI4OTYzMGEyZTExIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcxYzJjNDlmMGFkYWRhY2ZkYmU2MzMyYTM3MmMzOGNmOWM4Yjc4OTViYjczZGFiZWFhNTNjZGNjMWQ0ZTFmYTMiCi0KLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwOi8vbGliZXZlbnQub3JnLyIKLQotUyA9ICIke1dPUktESVJ9LyR7QlBOfS0ke1BWfS1zdGFibGUiCi0KLVBBQ0tBR0VDT05GSUcgPz89ICIiCi1QQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0tZW5hYmxlLW9wZW5zc2wsLS1kaXNhYmxlLW9wZW5zc2wsb3BlbnNzbCIKLQotaW5oZXJpdCBhdXRvdG9vbHMKLQotIyBOZWVkZWQgZm9yIERlYmlhbiBwYWNrYWdpbmcKLUxFQURfU09OQU1FID0gImxpYmV2ZW50LTIuMC5zbyIKLQotaW5oZXJpdCBwdGVzdAotCi1ERVBFTkRTID0gInpsaWIiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKLQotZG9faW5zdGFsbF9wdGVzdCgpIHsKLQlpbnN0YWxsIC1kICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKLQlmb3IgZmlsZSBpbiAke0J9L3Rlc3QvLmxpYnMvcmVncmVzcyAke0J9L3Rlc3QvLmxpYnMvdGVzdCoKLQlkbwotCQlpbnN0YWxsIC1tIDA3NTUgJGZpbGUgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAotCWRvbmUKLX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmVudC9saWJldmVudF8yLjEuOC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmVudC9saWJldmVudF8yLjEuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjcwZDYyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZW50L2xpYmV2ZW50XzIuMS44LmJiCkBAIC0wLDAgKzEsNDIgQEAKK1NVTU1BUlkgPSAiQW4gYXN5bmNocm9ub3VzIGV2ZW50IG5vdGlmaWNhdGlvbiBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL2xpYmV2ZW50Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vZ2l0aHViLmNvbS9saWJldmVudC9saWJldmVudC9pc3N1ZXMiCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiQlNEICYgTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MTdmMjA1NzRjMGIxNTRkMTIyMzZkNWZiZTk2NGY1NDkiCisKK1NSQ19VUkkgPSAiIFwKKyAgICBodHRwczovL2dpdGh1Yi5jb20vbGliZXZlbnQvbGliZXZlbnQvcmVsZWFzZXMvZG93bmxvYWQvcmVsZWFzZS0ke1BWfS1zdGFibGUvJHtCUH0tc3RhYmxlLnRhci5neiBcCisgICAgZmlsZTovL01ha2VmaWxlLW1pc3NpbmctdGVzdC1kaXIucGF0Y2ggXAorICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZjNlZWFlZDAxODU0Mjk2M2I3ZDI0MTZlZjExMzVlY2MiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTY1Y2M1YThiYjQ2Y2U0MTk5YTQ3ZTliMmM5ZTFjYWUzYjEzN2U4MzU2ZmZkYWQ2ZDk0ZDNiOTA2OWI3MWRjMiIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHA6Ly9saWJldmVudC5vcmcvIgorCitTID0gIiR7V09SS0RJUn0vJHtCUE59LSR7UFZ9LXN0YWJsZSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLS1lbmFibGUtb3BlbnNzbCwtLWRpc2FibGUtb3BlbnNzbCxvcGVuc3NsIgorCitpbmhlcml0IGF1dG90b29scworCisjIE5lZWRlZCBmb3IgRGViaWFuIHBhY2thZ2luZworTEVBRF9TT05BTUUgPSAibGliZXZlbnQtMi4xLnNvIgorCitpbmhlcml0IHB0ZXN0CisKK0RFUEVORFMgPSAiemxpYiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCWluc3RhbGwgLWQgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCWZvciBmaWxlIGluICR7Qn0vdGVzdC8ubGlicy9yZWdyZXNzICR7Qn0vdGVzdC8ubGlicy90ZXN0KgorCWRvCisJCWluc3RhbGwgLW0gMDc1NSAkZmlsZSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZmaS9saWJmZmkvMDAwMS1saWJmZmktU3VwcG9ydC1tdXNsLXgzMi1idWlsZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJmZmkvbGliZmZpLzAwMDEtbGliZmZpLVN1cHBvcnQtbXVzbC14MzItYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxNjdjOAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJmZmkvbGliZmZpLzAwMDEtbGliZmZpLVN1cHBvcnQtbXVzbC14MzItYnVpbGQucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSA2OWMzOTA2Yzg1Yzc5MTcxNmJmNjUwYWEzNmQ5MzYxZDIyYWNmM2ZiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogc3dlZWF1biA8c3dlZS5hdW4ua2hvckBpbnRlbC5jb20+CitEYXRlOiBUaHUsIDYgSnVsIDIwMTcgMTY6MzI6NDYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gbGliZmZpOiBTdXBwb3J0IG11c2wgeDMyIGJ1aWxkCisKK1N1cHBvcnQgbGliZmZpIGJ1aWxkIHdpdGggdGFyZ2V0IG11c2wteDMyLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogc3dlZWF1biA8c3dlZS5hdW4ua2hvckBpbnRlbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGE3YmY1ZWUuLjhlYmU5OWMgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE3Nyw3ICsxNzcsNyBAQCBjYXNlICIkaG9zdCIgaW4KKyAJVEFSR0VURElSPXg4NgorIAlpZiB0ZXN0ICRhY19jdl9zaXplb2Zfc2l6ZV90ID0gNDsgdGhlbgorIAkgIGNhc2UgIiRob3N0IiBpbgorLQkgICAgKi1nbnV4MzIpCisrCSAgICAqLWdudXgzMiB8ICotbXVzbHgzMikKKyAJICAgICAgVEFSR0VUPVg4Nl82NAorIAkgICAgICA7OworIAkgICAgKikKKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZmaS9saWJmZmlfMy4yLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZmZpL2xpYmZmaV8zLjIuMS5iYgppbmRleCA0M2VlZThlLi5hMGIxZmNkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZmZpL2xpYmZmaV8zLjIuMS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZmZpL2xpYmZmaV8zLjIuMS5iYgpAQCAtMSw0ICsxLDUgQEAKIFNVTU1BUlkgPSAiQSBwb3J0YWJsZSBmb3JlaWduIGZ1bmN0aW9uIGludGVyZmFjZSBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZXdhcmUub3JnL2xpYmZmaS8iCiBERVNDUklQVElPTiA9ICJUaGUgYGxpYmZmaScgbGlicmFyeSBwcm92aWRlcyBhIHBvcnRhYmxlLCBoaWdoIGxldmVsIHByb2dyYW1taW5nIGludGVyZmFjZSB0byB2YXJpb3VzIGNhbGxpbmcgXAogY29udmVudGlvbnMuICBUaGlzIGFsbG93cyBhIHByb2dyYW1tZXIgdG8gY2FsbCBhbnkgZnVuY3Rpb24gc3BlY2lmaWVkIGJ5IGEgY2FsbCBpbnRlcmZhY2UgZGVzY3JpcHRpb24gYXQgcnVuIFwKIHRpbWUuIEZGSSBzdGFuZHMgZm9yIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlLiAgQSBmb3JlaWduIGZ1bmN0aW9uIGludGVyZmFjZSBpcyB0aGUgcG9wdWxhciBuYW1lIGZvciB0aGUgXApAQCAtMTMsMTMgKzE0LDE0IEBACiAgICAgICAgICAgIGZpbGU6Ly9ub3Qtd2luMzIucGF0Y2ggXAogCSAgIGZpbGU6Ly8wMDAxLW1pcHMtVXNlLWNvbXBpbGVyLWludGVybmFsLWRlZmluZS1mb3ItbGludXgucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1taXBzLWZpeC1NSVBTLXNvZnRmbG9hdC1idWlsZC1pc3N1ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWxpYmZmaS1TdXBwb3J0LW11c2wteDMyLWJ1aWxkLnBhdGNoIFwKIAkgICAiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICI4M2I4OTU4NzYwN2UzZWI2NWM3MGQzNjFmMTNiYWI0MyIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICJkMDZlYmI4ZTFkOWEyMmQxOWUzOGQ2M2ZkYjgzOTU0MjUzZjM5YmVkYzVkNDYyMzJhMDU2NDU2ODU3MjJjYTM3IgogCiBFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1idWlsZGRpciIKLQorRVhUUkFfT0VNQUtFX2NsYXNzLXRhcmdldCA9ICJMSUJUT09MRkxBR1M9Jy0tdGFnPUNDJyIKIGluaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KIAogRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vbGliZmZpLSR7UFZ9IgpAQCAtMjksMyArMzEsNCBAQAogTUlQU19JTlNUUlVDVElPTl9TRVQgPSAibWlwcyIKIAogQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm1fMS4yLjUuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm1fMS4yLjUuYmIKaW5kZXggYWNhNTllMS4uMWRkZGRmZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtXzEuMi41LmJiCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJmbS9saWJmbV8xLjIuNS5iYgpAQCAtMzIsNiArMzIsNyBAQAogICAgIHJtIC1mICR7RH0ke2luY2x1ZGVkaXJ9L2xpYmZtLTEuMC9mbS14bWwtZmlsZS5oCiAgICAgcm0gLWYgJHtEfSR7aW5jbHVkZWRpcn0vbGliZm0tMS4wL2ZtLXZlcnNpb24uaAogICAgIHJtIC1mICR7RH0ke2luY2x1ZGVkaXJ9L2xpYmZtLTEuMC9mbS1leHRyYS5oCisgICAgcm0gLWYgJHtEfSR7aW5jbHVkZWRpcn0vbGliZm0KICAgICBybSAtZiAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9saWJmbS1leHRyYS5wYwogICAgIHJtIC1mICR7RH0ke2xpYmRpcn0vbGliZm0tZXh0cmEuc28qCiAgICAgcm0gLWYgJHtEfSR7bGliZGlyfS9saWJmbS1leHRyYS5hCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzLzAwMDEtQWRkLWFuZC11c2UtcGtnLWNvbmZpZy1mb3ItbGliZ2NyeXB0LWluc3RlYWQtb2YtY29uZi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvMDAwMS1BZGQtYW5kLXVzZS1wa2ctY29uZmlnLWZvci1saWJnY3J5cHQtaW5zdGVhZC1vZi1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MWMzZGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzLzAwMDEtQWRkLWFuZC11c2UtcGtnLWNvbmZpZy1mb3ItbGliZ2NyeXB0LWluc3RlYWQtb2YtY29uZi5wYXRjaApAQCAtMCwwICsxLDE4MyBAQAorRnJvbSA3MmI5ZTkwNDBkNThjMTVmMDMwMmJkOGFiZGEyODE3OWYwNGUxYzVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+CitEYXRlOiBXZWQsIDE2IEF1ZyAyMDE3IDEwOjQzOjE4ICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMS80XSBBZGQgYW5kIHVzZSBwa2ctY29uZmlnIGZvciBsaWJnY3J5cHQgaW5zdGVhZCBvZiAtY29uZmlnCisgc2NyaXB0cy4KKworVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQgW3Vwc3RyZWFtIGhhdmUgaW5kaWNhdGVkIHRoZXkgZG9uJ3Qgd2FudCBhCitwa2ctY29uZmlnIGRlcGVuZGVuY3ldCisKK1JQIDIwMTQvNS8yMgorCitSZWJhc2UgdG8gMS44LjAKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjICAgICAgICB8ICAxICsKKyBzcmMvbGliZ2NyeXB0Lm00ICAgIHwgNzEgKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBzcmMvbGliZ2NyeXB0LnBjLmluIHwgMzMgKysrKysrKysrKysrKysrKysrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMzggaW5zZXJ0aW9ucygrKSwgNjcgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9saWJnY3J5cHQucGMuaW4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYmJlODEwNC4uM2QyZGU3MyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjYwNyw2ICsyNjA3LDcgQEAgcmFuZG9tL01ha2VmaWxlCisgZG9jL01ha2VmaWxlCisgc3JjL01ha2VmaWxlCisgc3JjL2djcnlwdC5oCisrc3JjL2xpYmdjcnlwdC5wYworIHNyYy9saWJnY3J5cHQtY29uZmlnCisgc3JjL3ZlcnNpb25pbmZvLnJjCisgdGVzdHMvTWFrZWZpbGUKK2RpZmYgLS1naXQgYS9zcmMvbGliZ2NyeXB0Lm00IGIvc3JjL2xpYmdjcnlwdC5tNAoraW5kZXggYzY3Y2ZlYy4uNGVhNWYyYyAxMDA2NDQKKy0tLSBhL3NyYy9saWJnY3J5cHQubTQKKysrKyBiL3NyYy9saWJnY3J5cHQubTQKK0BAIC0yOSwzMCArMjksNiBAQCBkbmwgaXMgYWRkZWQgdG8gdGhlIGdwZ19jb25maWdfc2NyaXB0X3dhcm4gdmFyaWFibGUuCisgZG5sCisgQUNfREVGVU4oW0FNX1BBVEhfTElCR0NSWVBUXSwKKyBbIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKy0gIEFDX0FSR19XSVRIKGxpYmdjcnlwdC1wcmVmaXgsCistICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1saWJnY3J5cHQtcHJlZml4PVBGWF0sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZWZpeCB3aGVyZSBMSUJHQ1JZUFQgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldKSwKKy0gICAgIGxpYmdjcnlwdF9jb25maWdfcHJlZml4PSIkd2l0aHZhbCIsIGxpYmdjcnlwdF9jb25maWdfcHJlZml4PSIiKQorLSAgaWYgdGVzdCB4IiR7TElCR0NSWVBUX0NPTkZJR30iID0geCA7IHRoZW4KKy0gICAgIGlmIHRlc3QgeCIke2xpYmdjcnlwdF9jb25maWdfcHJlZml4fSIgIT0geCA7IHRoZW4KKy0gICAgICAgIExJQkdDUllQVF9DT05GSUc9IiR7bGliZ2NyeXB0X2NvbmZpZ19wcmVmaXh9L2Jpbi9saWJnY3J5cHQtY29uZmlnIgorLSAgICAgZWxzZQorLSAgICAgICBjYXNlICIke1NZU1JPT1R9IiBpbgorLSAgICAgICAgIC8qKQorLSAgICAgICAgICAgaWYgdGVzdCAteCAiJHtTWVNST09UfS9iaW4vbGliZ2NyeXB0LWNvbmZpZyIgOyB0aGVuCistICAgICAgICAgICAgIExJQkdDUllQVF9DT05GSUc9IiR7U1lTUk9PVH0vYmluL2xpYmdjcnlwdC1jb25maWciCistICAgICAgICAgICBmaQorLSAgICAgICAgICAgOzsKKy0gICAgICAgICAnJykKKy0gICAgICAgICAgIDs7CistICAgICAgICAgICopCistICAgICAgICAgICBBQ19NU0dfV0FSTihbSWdub3JpbmcgXCRTWVNST09UIGFzIGl0IGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRoLl0pCistICAgICAgICAgICA7OworLSAgICAgICBlc2FjCistICAgICBmaQorLSAgZmkKKy0KKy0gIEFDX1BBVEhfUFJPRyhMSUJHQ1JZUFRfQ09ORklHLCBsaWJnY3J5cHQtY29uZmlnLCBubykKKyAgIHRtcD1pZmVsc2UoWyQxXSwgLDE6MS4yLjAsJDEpCisgICBpZiBlY2hvICIkdG1wIiB8IGdyZXAgJzonID4vZGV2L251bGwgMj4vZGV2L251bGwgOyB0aGVuCisgICAgICByZXFfbGliZ2NyeXB0X2FwaT1gZWNobyAiJHRtcCIgICAgIHwgc2VkICdzL1woLipcKTpcKC4qXCkvXDEvJ2AKK0BAIC02Miw0OCArMzgsMTMgQEAgQUNfREVGVU4oW0FNX1BBVEhfTElCR0NSWVBUXSwKKyAgICAgIG1pbl9saWJnY3J5cHRfdmVyc2lvbj0iJHRtcCIKKyAgIGZpCisgCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIExJQkdDUllQVCAtIHZlcnNpb24gPj0gJG1pbl9saWJnY3J5cHRfdmVyc2lvbikKKy0gIG9rPW5vCistICBpZiB0ZXN0ICIkTElCR0NSWVBUX0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKy0gICAgcmVxX21ham9yPWBlY2hvICRtaW5fbGliZ2NyeXB0X3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDEvJ2AKKy0gICAgcmVxX21pbm9yPWBlY2hvICRtaW5fbGliZ2NyeXB0X3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDIvJ2AKKy0gICAgcmVxX21pY3JvPWBlY2hvICRtaW5fbGliZ2NyeXB0X3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDMvJ2AKKy0gICAgbGliZ2NyeXB0X2NvbmZpZ192ZXJzaW9uPWAkTElCR0NSWVBUX0NPTkZJRyAtLXZlcnNpb25gCistICAgIG1ham9yPWBlY2hvICRsaWJnY3J5cHRfY29uZmlnX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMS8nYAorLSAgICBtaW5vcj1gZWNobyAkbGliZ2NyeXB0X2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDIvJ2AKKy0gICAgbWljcm89YGVjaG8gJGxpYmdjcnlwdF9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wzLydgCistICAgIGlmIHRlc3QgIiRtYWpvciIgLWd0ICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgb2s9eWVzCistICAgIGVsc2UKKy0gICAgICAgIGlmIHRlc3QgIiRtYWpvciIgLWVxICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgICAgIGlmIHRlc3QgIiRtaW5vciIgLWd0ICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICBpZiB0ZXN0ICIkbWlub3IiIC1lcSAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJG1pY3JvIiAtZ2UgIiRyZXFfbWljcm8iOyB0aGVuCistICAgICAgICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICBmaQorLSAgICAgICAgZmkKKy0gICAgZmkKKy0gIGZpCistICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorLSAgICBBQ19NU0dfUkVTVUxUKFt5ZXMgKCRsaWJnY3J5cHRfY29uZmlnX3ZlcnNpb24pXSkKKy0gIGVsc2UKKy0gICAgQUNfTVNHX1JFU1VMVChubykKKy0gIGZpCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJHQ1JZUFQsIFtsaWJnY3J5cHQgPj0gJG1pbl9saWJnY3J5cHRfdmVyc2lvbl0sIFtvaz15ZXNdLCBbb2s9bm9dKQorKworICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgd2UgaGF2ZSBhIHJlY2VudCBsaWJnY3J5cHQsIHdlIHNob3VsZCBhbHNvIGNoZWNrIHRoYXQgdGhlCisgICAgICAjIEFQSSBpcyBjb21wYXRpYmxlCisgICAgICBpZiB0ZXN0ICIkcmVxX2xpYmdjcnlwdF9hcGkiIC1ndCAwIDsgdGhlbgorLSAgICAgICAgdG1wPWAkTElCR0NSWVBUX0NPTkZJRyAtLWFwaS12ZXJzaW9uIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKKysgICAgICAgIHRtcD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1hcGlfdmVyc2lvbiBsaWJnY3J5cHRgCisgICAgICAgICBpZiB0ZXN0ICIkdG1wIiAtZ3QgMCA7IHRoZW4KKyAgICAgICAgICAgIEFDX01TR19DSEVDS0lORyhbTElCR0NSWVBUIEFQSSB2ZXJzaW9uXSkKKyAgICAgICAgICAgIGlmIHRlc3QgIiRyZXFfbGliZ2NyeXB0X2FwaSIgLWVxICIkdG1wIiA7IHRoZW4KK0BAIC0xMTYsMTAgKzU3LDggQEAgQUNfREVGVU4oW0FNX1BBVEhfTElCR0NSWVBUXSwKKyAgICAgIGZpCisgICBmaQorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgTElCR0NSWVBUX0NGTEFHUz1gJExJQkdDUllQVF9DT05GSUcgLS1jZmxhZ3NgCistICAgIExJQkdDUllQVF9MSUJTPWAkTElCR0NSWVBUX0NPTkZJRyAtLWxpYnNgCisgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCistICAgIGxpYmdjcnlwdF9jb25maWdfaG9zdD1gJExJQkdDUllQVF9DT05GSUcgLS1ob3N0IDI+L2Rldi9udWxsIHx8IGVjaG8gbm9uZWAKKysgICAgbGliZ2NyeXB0X2NvbmZpZ19ob3N0PWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWhvc3QgbGliZ2NyeXB0YAorICAgICBpZiB0ZXN0IHgiJGxpYmdjcnlwdF9jb25maWdfaG9zdCIgIT0geG5vbmUgOyB0aGVuCisgICAgICAgaWYgdGVzdCB4IiRsaWJnY3J5cHRfY29uZmlnX2hvc3QiICE9IHgiJGhvc3QiIDsgdGhlbgorICAgQUNfTVNHX1dBUk4oW1sKK0BAIC0xMzQsOCArNzMsNiBAQCBBQ19ERUZVTihbQU1fUEFUSF9MSUJHQ1JZUFRdLAorICAgICAgIGZpCisgICAgIGZpCisgICBlbHNlCistICAgIExJQkdDUllQVF9DRkxBR1M9IiIKKy0gICAgTElCR0NSWVBUX0xJQlM9IiIKKyAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKKyAgIGZpCisgICBBQ19TVUJTVChMSUJHQ1JZUFRfQ0ZMQUdTKQorZGlmZiAtLWdpdCBhL3NyYy9saWJnY3J5cHQucGMuaW4gYi9zcmMvbGliZ2NyeXB0LnBjLmluCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMmZjOGY1MworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2xpYmdjcnlwdC5wYy5pbgorQEAgLTAsMCArMSwzMyBAQAorKyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgcGtnLWNvbmZpZyBtZXRhZGF0YSBmaWxlLgorKyMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorKyMgQXV0aG9yOiBTaW1vbiBKb3NlZnNzb24KKysjCisrIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0aGUgYXV0aG9yIGdpdmVzCisrIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKysjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorKyMKKysjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQgZXZlbiB0aGUKKysjIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorKworK3ByZWZpeD1AcHJlZml4QAorK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKytpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorKworKyMgQVBJIGluZm8KKythcGlfdmVyc2lvbj1ATElCR0NSWVBUX0NPTkZJR19BUElfVkVSU0lPTkAKKytob3N0PUBMSUJHQ1JZUFRfQ09ORklHX0hPU1RACisrCisrIyBNaXNjIGluZm9ybWF0aW9uLgorK3N5bW1ldHJpY19jaXBoZXJzPUBMSUJHQ1JZUFRfQ0lQSEVSU0AKKythc3ltbWV0cmljX2NpcGhlcnM9QExJQkdDUllQVF9QVUJLRVlfQ0lQSEVSU0AKKytkaWdlc3RzPUBMSUJHQ1JZUFRfRElHRVNUU0AKKysKKytOYW1lOiBsaWJnY3J5cHQKKytEZXNjcmlwdGlvbjogR05VIGNyeXB0byBsaWJyYXJ5CisrVVJMOiBodHRwOi8vd3d3LmdudXBnLm9yZworK1ZlcnNpb246IEBWRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1sZ2NyeXB0CisrTGlicy5wcml2YXRlOiAtTCR7bGliZGlyfSAtbGdwZy1lcnJvcgorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9IAorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvMDAwMS1lY2MtU3RvcmUtRWREU0Etc2Vzc2lvbi1rZXktaW4tc2VjdXJlLW1lbW9yeS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvMDAwMS1lY2MtU3RvcmUtRWREU0Etc2Vzc2lvbi1rZXktaW4tc2VjdXJlLW1lbW9yeS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE0ZGZlNi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzLzAwMDEtZWNjLVN0b3JlLUVkRFNBLXNlc3Npb24ta2V5LWluLXNlY3VyZS1tZW1vcnkucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi1DVkU6IENWRS0yMDE3LTk1MjYKLVVwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKLVNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+Ci0KLUZyb20gNGExNzY4ZDY4M2Y2NTcyYWQ4NmQ4MzM1MDhjNzBlNmIzZGMxZWZkYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEpvIFZhbiBCdWxjayA8am8udmFuYnVsY2tAY3Mua3VsZXV2ZW4uYmU+Ci1EYXRlOiBUaHUsIDE5IEphbiAyMDE3IDE3OjAwOjE1ICswMTAwCi1TdWJqZWN0OiBbUEFUQ0hdIGVjYzogU3RvcmUgRWREU0Egc2Vzc2lvbiBrZXkgaW4gc2VjdXJlIG1lbW9yeS4KLQotKiBjaXBoZXIvZWNjLWVkZHNhLmMgKF9nY3J5X2VjY19lZGRzYV9zaWduKTogdXNlIG1waV9zbmV3IHRvIGFsbG9jYXRlCi1zZXNzaW9uIGtleS4KLS0tCi0KLUFuIGF0dGFja2VyIHdobyBsZWFybnMgdGhlIEVkRFNBIHNlc3Npb24ga2V5IGZyb20gc2lkZS1jaGFubmVsCi1vYnNlcnZhdGlvbiBkdXJpbmcgdGhlIHNpZ25pbmcgcHJvY2VzcywgY2FuIGVhc2lseSByZXZvdmVyIHRoZSBsb25nLQotdGVybSBzZWNyZXQga2V5LiBTdG9yaW5nIHRoZSBzZXNzaW9uIGtleSBpbiBzZWN1cmUgbWVtb3J5IGVuc3VyZXMgdGhhdAotY29uc3RhbnQgdGltZSBwb2ludCBvcGVyYXRpb25zIGFyZSB1c2VkIGluIHRoZSBNUEkgbGlicmFyeS4KLQotU2lnbmVkLW9mZi1ieTogSm8gVmFuIEJ1bGNrIDxqby52YW5idWxja0Bjcy5rdWxldXZlbi5iZT4KLS0tLQotIGNpcGhlci9lY2MtZWRkc2EuYyB8IDIgKy0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2NpcGhlci9lY2MtZWRkc2EuYyBiL2NpcGhlci9lY2MtZWRkc2EuYwotaW5kZXggZjkxZjg0ODkuLjgxM2UwMzBkIDEwMDY0NAotLS0tIGEvY2lwaGVyL2VjYy1lZGRzYS5jCi0rKysgYi9jaXBoZXIvZWNjLWVkZHNhLmMKLUBAIC02MDMsNyArNjAzLDcgQEAgX2djcnlfZWNjX2VkZHNhX3NpZ24gKGdjcnlfbXBpX3QgaW5wdXQsIEVDQ19zZWNyZXRfa2V5ICpza2V5LAotICAgYSA9IG1waV9zbmV3ICgwKTsKLSAgIHggPSBtcGlfbmV3ICgwKTsKLSAgIHkgPSBtcGlfbmV3ICgwKTsKLS0gIHIgPSBtcGlfbmV3ICgwKTsKLSsgIHIgPSBtcGlfc25ldyAoMCk7Ci0gICBjdHggPSBfZ2NyeV9tcGlfZWNfcF9pbnRlcm5hbF9uZXcgKHNrZXktPkUubW9kZWwsIHNrZXktPkUuZGlhbGVjdCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tleS0+RS5wLCBza2V5LT5FLmEsIHNrZXktPkUuYik7Ci0gICBiID0gKGN0eC0+bmJpdHMrNykvODsKLS0tIAotMi4xMS4wCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvMDAwMi1saWJnY3J5cHQtZml4LWJ1aWxkaW5nLWVycm9yLXdpdGgtTzItaW4tc3lzcm9vdC1wYXRoLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy8wMDAyLWxpYmdjcnlwdC1maXgtYnVpbGRpbmctZXJyb3Itd2l0aC1PMi1pbi1zeXNyb290LXBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc1NTRmMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvMDAwMi1saWJnY3J5cHQtZml4LWJ1aWxkaW5nLWVycm9yLXdpdGgtTzItaW4tc3lzcm9vdC1wYXRoLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb20gOTc1NzBlZjI3MWVhMWZiN2I1Y2E5MDNlZWM4OGY2ODQwN2IwZWM3NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMTYgQXVnIDIwMTcgMTA6NDQ6NDEgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAyLzRdIGxpYmdjcnlwdDogZml4IGJ1aWxkaW5nIGVycm9yIHdpdGggJy1PMicgaW4gc3lzcm9vdCBwYXRoCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitDaGFyYWN0ZXJzIGxpa2UgJy1PMicgb3IgJy1PZmFzdCcgd2lsbCBiZSByZXBsYWNlZCBieSAnLU8xJyB3aGVuCitjb21waWxpbmcgY2lwaGVyLgorSWYgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyBsaWJnY3J5cHQgYW5kIHN5c3Jvb3QgY29udGFpbnMgc3VjaAorY2hhcmFjdGVycywgd2Ugd291bGQKK2dldCBjb21waWxlIGVycm9ycyBiZWNhdXNlIHRoZSBzeXNyb290IHBhdGggaGFzIGJlZW4gbW9kaWZpZWQuCisKK0ZpeCB0aGlzIGJ5IGFkZGluZyBibGFuayBzcGFjZXMgYmVmb3JlIGFuZCBhZnRlciB0aGUgb3JpZ2luYWwgbWF0Y2hpbmcKK3BhdHRlcm4gaW4gdGhlCitzZWQgY29tbWFuZC4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorCitSZWJhc2UgdG8gMS44LjAKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNpcGhlci9NYWtlZmlsZS5hbSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NpcGhlci9NYWtlZmlsZS5hbSBiL2NpcGhlci9NYWtlZmlsZS5hbQoraW5kZXggOTVjNDUxMC4uYmQ1MmVjNyAxMDA2NDQKKy0tLSBhL2NpcGhlci9NYWtlZmlsZS5hbQorKysrIGIvY2lwaGVyL01ha2VmaWxlLmFtCitAQCAtMTE2LDcgKzExNiw3IEBAIGdvc3Qtcy1ib3g6IGdvc3Qtcy1ib3guYworIAorIAorIGlmIEVOQUJMRV9PX0ZMQUdfTVVOR0lORworLW9fZmxhZ19tdW5naW5nID0gc2VkIC1lICdzLy1PXChbMi05c11bMi05c10qXCkvLU8xLycgLWUgJ3MvLU9mYXN0Ly1PMS9nJworK29fZmxhZ19tdW5naW5nID0gc2VkIC1lICdzLyAtT1woWzItOXNdWzItOXNdKlwpIC8gLU8xIC8nIC1lICdzLyAtT2Zhc3QgLyAtTzEgL2cnCisgZWxzZQorIG9fZmxhZ19tdW5naW5nID0gY2F0CisgZW5kaWYKKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzLzAwMDMtdGVzdHMtYmVuY2gtc2xvcGUuYy13b3JrYXJvdW5kLUlDRS1mYWlsdXJlLW9uLW1pcHMtdy5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvMDAwMy10ZXN0cy1iZW5jaC1zbG9wZS5jLXdvcmthcm91bmQtSUNFLWZhaWx1cmUtb24tbWlwcy13LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNWRmMjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzLzAwMDMtdGVzdHMtYmVuY2gtc2xvcGUuYy13b3JrYXJvdW5kLUlDRS1mYWlsdXJlLW9uLW1pcHMtdy5wYXRjaApAQCAtMCwwICsxLDc5IEBACitGcm9tIDdjYzcwMmM3YjVhMWNjYzJiMDA5MWYzZWZmYTEzOTFiNmMzMDMwZmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDE2IEF1ZyAyMDE3IDEwOjQ2OjI4ICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMy80XSB0ZXN0cy9iZW5jaC1zbG9wZS5jOiB3b3JrYXJvdW5kIElDRSBmYWlsdXJlIG9uIG1pcHMgd2l0aAorICctTyAtZycKKworSGl0IGEgSUNFIGFuZCBjb3VsZCByZWR1Y2UgaXQgdG8gdGhlIGZvbGxvd2luZyBtaW5pbWFsIGV4YW1wbGU6CisKKzEuIE9ubHkgdGhlIHNpemUgb2YgYXJyYXkgYXNzaWduZWQgd2l0aCAyIGNhdXNlZCB0aGUgaXNzdWU6CiskIGNhdCA+IG1pcGdjYy10ZXN0LmMgPDwgRU5ECisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgICAgIGNoYXIgKnBTdHJBcnJ5W0FSUkFZX1NJWkVfTUFYXSA9IHsiaGVsbG8ifTsKKyAgICAgICAgaW50IGkgPSAwOworCisgICAgICAgIHdoaWxlKHBTdHJBcnJ5W2ldICYmIGk8QVJSQVlfU0laRV9NQVgpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiVzXG4iLCBwU3RyQXJyeVtpXSk7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK0VORAorCisyLiBPbmx5IC1PMSBhbmQgLWcgb24gbWlwcyBjYXVzZWQgdGhlIGlzc3VlOgorJCBtaXBzLXBva3ktbGludXgtZ2NjIC1PMSAtZyAtbyBtaXBnY2MtdGVzdCBtaXBnY2MtdGVzdC5jCittaXBnY2MtdGVzdC5jOiBJbiBmdW5jdGlvbiAnbWFpbic6CittaXBnY2MtdGVzdC5jOjE4OjE6IGludGVybmFsIGNvbXBpbGVyIGVycm9yOiBpbiBkd2FyZjJvdXRfdmFyX2xvY2F0aW9uLAorYXQgZHdhcmYyb3V0LmM6MjA4MTAKKyB9CisgXgorUGxlYXNlIHN1Ym1pdCBhIGZ1bGwgYnVnIHJlcG9ydCwKK3dpdGggcHJlcHJvY2Vzc2VkIHNvdXJjZSBpZiBhcHByb3ByaWF0ZS4KK1NlZSA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3MuaHRtbD4gZm9yIGluc3RydWN0aW9ucworCiszLiBUaGUgcXVpY2sgd29ya3JvdW5kIGlzIHRyeWluZyB0byBlbmxhcmdlIHRoZSBzaXplIG9mIGFycmF5IHdpdGgKK2xhcmdlcgordGhhbiAyLgorCis0LiBGaWxlIGEgYnVnIHRvIEdOVSwgYnV0IGl0IGNvdWxkIG5vdCBiZSByZXByb2R1Y2VkIG9uIHRoZXJlCitlbnZpcm9ubWVudC4KK2h0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NjA2NDMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZSBzcGVjaWZpY10KKworUmViYXNlIHRvIDEuOC4wCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyB0ZXN0cy9iZW5jaC1zbG9wZS5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3Rlc3RzL2JlbmNoLXNsb3BlLmMgYi90ZXN0cy9iZW5jaC1zbG9wZS5jCitpbmRleCA3NWU2ZTQzLi40ZTcwODQyIDEwMDY0NAorLS0tIGEvdGVzdHMvYmVuY2gtc2xvcGUuYworKysrIGIvdGVzdHMvYmVuY2gtc2xvcGUuYworQEAgLTE0NjMsNyArMTQ2Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgYmVuY2hfb3BzIGhhc2hfb3BzID0geworIH07CisgCisgCistc3RhdGljIHN0cnVjdCBiZW5jaF9oYXNoX21vZGUgaGFzaF9tb2Rlc1tdID0geworK3N0YXRpYyBzdHJ1Y3QgYmVuY2hfaGFzaF9tb2RlIGhhc2hfbW9kZXNbM10gPSB7CisgICB7IiIsICZoYXNoX29wc30sCisgICB7MH0sCisgfTsKK0BAIC0xNjI5LDcgKzE2MjksNyBAQCBzdGF0aWMgc3RydWN0IGJlbmNoX29wcyBtYWNfb3BzID0geworIH07CisgCisgCistc3RhdGljIHN0cnVjdCBiZW5jaF9tYWNfbW9kZSBtYWNfbW9kZXNbXSA9IHsKKytzdGF0aWMgc3RydWN0IGJlbmNoX21hY19tb2RlIG1hY19tb2Rlc1szXSA9IHsKKyAgIHsiIiwgJm1hY19vcHN9LAorICAgezB9LAorIH07CistLSAKKzEuOC4zLjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy8wMDA0LXRlc3RzLU1ha2VmaWxlLmFtLWZpeC11bmRlZmluZWQtcmVmZXJlbmNlLXRvLXB0aHJlYWQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzLzAwMDQtdGVzdHMtTWFrZWZpbGUuYW0tZml4LXVuZGVmaW5lZC1yZWZlcmVuY2UtdG8tcHRocmVhZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjIyZGYzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy8wMDA0LXRlc3RzLU1ha2VmaWxlLmFtLWZpeC11bmRlZmluZWQtcmVmZXJlbmNlLXRvLXB0aHJlYWQucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSBlMjBkYmRiMGI4ZjBhZjg0MGVmOTBiMjk5YzRlMjI3N2M1MmRkZjg3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorRGF0ZTogU3VuLCAxMiBKdW4gMjAxNiAwNDo0NDoyOSAtMDQwMAorU3ViamVjdDogW1BBVENIIDQvNF0gdGVzdHMvTWFrZWZpbGUuYW06IGZpeCB1bmRlZmluZWQgcmVmZXJlbmNlIHRvCisgYHB0aHJlYWRfY3JlYXRlJworCitBZGQgbWlzc2luZyAnLWxwdGhyZWFkJyB0byBDRkxBR1MKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRlc3RzL01ha2VmaWxlLmFtIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggMTc0NGVhNy4uMDRjZjQyNSAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTY0LDQgKzY0LDQgQEAgRVhUUkFfRElTVCA9IFJFQURNRSByc2EtMTZrLmtleSBjYXZzX3Rlc3RzLnNoIGNhdnNfZHJpdmVyLnBsIFwKKyAKKyBMREFERCA9ICQoc3RhbmRhcmRfbGRhZGQpICQoR1BHX0VSUk9SX0xJQlMpCisgdF9sb2NrX0xEQUREID0gJChzdGFuZGFyZF9sZGFkZCkgJChHUEdfRVJST1JfTVRfTElCUykKKy10X2xvY2tfQ0ZMQUdTID0gJChHUEdfRVJST1JfTVRfQ0ZMQUdTKQorK3RfbG9ja19DRkxBR1MgPSAkKEdQR19FUlJPUl9NVF9DRkxBR1MpIC1scHRocmVhZAorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvMDAwNS1lY2MtQWRkLWlucHV0LXZhbGlkYXRpb24tZm9yLVgyNTUxOS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvMDAwNS1lY2MtQWRkLWlucHV0LXZhbGlkYXRpb24tZm9yLVgyNTUxOS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmZkZDc0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy8wMDA1LWVjYy1BZGQtaW5wdXQtdmFsaWRhdGlvbi1mb3ItWDI1NTE5LnBhdGNoCkBAIC0wLDAgKzEsMTU4IEBACitGcm9tIGVmNTcwZTNkMjc3M2MxMjEyNmU3ZDNmY2RjNGRiOWVmODBhNWUyMTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOSUlCRSBZdXRha2EgPGduaWliZUBmc2lqLm9yZz4KK0RhdGU6IEZyaSwgMjUgQXVnIDIwMTcgMTg6MTM6MjggKzA5MDAKK1N1YmplY3Q6IFtQQVRDSF0gZWNjOiBBZGQgaW5wdXQgdmFsaWRhdGlvbiBmb3IgWDI1NTE5LgorCisqIGNpcGhlci9lY2MuYyAoZWNjX2RlY3J5cHRfcmF3KTogQWRkIGlucHV0IHZhbGlkYXRpb24uCisqIG1waS9lYy5jIChlY19wX2luaXQpOiBVc2Ugc2NyYXRjaCBidWZmZXIgZm9yIGJhZCBwb2ludHMuCisoX2djcnlfbXBpX2VjX2JhZF9wb2ludCk6IE5ldy4KKworLS0KKworRm9sbG93aW5nIGlzIHRoZSBwYXBlciBkZXNjcmliaW5nIHRoZSBhdHRhY2s6CisKKyAgICBNYXkgdGhlIEZvdXJ0aCBCZSBXaXRoIFlvdTogQSBNaWNyb2FyY2hpdGVjdHVyYWwgU2lkZSBDaGFubmVsIEF0dGFjaworICAgIG9uIFJlYWwtV29ybGQgQXBwbGljYXRpb25zIG9mIEN1cnZlMjU1MTkKKyAgICBieSBEYW5pZWwgR2Vua2luLCBMdWtlIFZhbGVudGEsIGFuZCBZdXZhbCBZYXJvbQorCitJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgd2UgZG8gb3V0cHV0IGNoZWNraW5nIGFuZCBpdCByZXN1bHRzIGFuCitlcnJvciBmb3IgdGhvc2UgYmFkIHBvaW50cy4gIEhvd2V2ZXIsIHdoZW4gYXR0YWNrZWQsIHRoZSBjb21wdXRhdGlvbgord2lsbCBkb25lIHdpdGggbGVhayBvZiBwcml2YXRlIGtleSwgZXZlbiBpdCB3aWxsIHJlc3VsdHMgZXJyb3JzLiAgVG8KK21pdGlnYXRlIGxlYWssIHdlIGFkZGVkIGlucHV0IHZhbGlkYXRpb24uCisKK05vdGUgdGhhdCB3ZSBvbmx5IGxpc3QgYmFkIHBvaW50cyB3aXRoIE1TQj0wLiAgQnkgWDI1NTE5LCBNU0IgaXMKK2Fsd2F5cyBjbGVhcmVkLgorCitJbiBmdXR1cmUsIHdlIHNob3VsZCBpbXBsZW1lbnQgY29uc3RhbnQtdGltZSBmaWVsZCBjb21wdXRhdGlvbi4gIFRoZW4sCit0aGlzIGlucHV0IHZhbGlkYXRpb24gY291bGQgYmUgcmVtb3ZlZCwgaWYgcGVyZm9ybWFuY2UgaXMgaW1wb3J0YW50CithbmQgd2UgYXJlIHN1cmUgZm9yIG5vIGxlYWsuCisKK0NWRS1pZDogQ1ZFLTIwMTctMDM3OQorU2lnbmVkLW9mZi1ieTogTklJQkUgWXV0YWthIDxnbmlpYmVAZnNpai5vcmc+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK0NWRTogQ1ZFLTIwMTctMDM3OQorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgY2lwaGVyL2VjYy5jIHwgMTcgKysrKysrKysrKysrKysrLS0KKyBtcGkvZWMuYyAgICAgfCA1MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0KKyBzcmMvbXBpLmggICAgfCAgMSArCisgMyBmaWxlcyBjaGFuZ2VkLCA2NCBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY2lwaGVyL2VjYy5jIGIvY2lwaGVyL2VjYy5jCitpbmRleCBlMjViZjA5Li40ZTNlNWIxIDEwMDY0NAorLS0tIGEvY2lwaGVyL2VjYy5jCisrKysgYi9jaXBoZXIvZWNjLmMKK0BAIC0xNjI4LDkgKzE2MjgsMjIgQEAgZWNjX2RlY3J5cHRfcmF3IChnY3J5X3NleHBfdCAqcl9wbGFpbiwgZ2NyeV9zZXhwX3Qgc19kYXRhLCBnY3J5X3NleHBfdCBrZXlwYXJtcykKKyAgIGlmIChEQkdfQ0lQSEVSKQorICAgICBsb2dfcHJpbnRwbnQgKCJlY2NfZGVjcnlwdCAgICBrRyIsICZrRywgTlVMTCk7CisgCistICBpZiAoIShmbGFncyAmIFBVQktFWV9GTEFHX0RKQl9UV0VBSykKKysgIGlmICgoZmxhZ3MgJiBQVUJLRVlfRkxBR19ESkJfVFdFQUspKQorKyAgICB7CisgICAgICAgLyogRm9yIFgyNTUxOSwgYnkgaXRzIGRlZmluaXRpb24sIHZhbGlkYXRpb24gc2hvdWxkIG5vdCBiZSBkb25lLiAgKi8KKy0gICAgICAmJiAhX2djcnlfbXBpX2VjX2N1cnZlX3BvaW50ICgma0csIGVjKSkKKysgICAgICAvKiAoSW5zdGVhZCwgd2UgZG8gb3V0cHV0IGNoZWNrLikKKysgICAgICAgKgorKyAgICAgICAqIEhvd2V2ZXIsIHRvIG1pdGlnYXRlIHNlY3JldCBrZXkgbGVhayBmcm9tIG91ciBpbXBsZW1lbnRhdGlvbiwKKysgICAgICAgKiB3ZSBhbHNvIGRvIGlucHV0IHZhbGlkYXRpb24gaGVyZS4gIEZvciBjb25zdGFudC10aW1lCisrICAgICAgICogaW1wbGVtZW50YXRpb24sIHdlIGNhbiByZW1vdmUgdGhpcyBpbnB1dCB2YWxpZGF0aW9uLgorKyAgICAgICAqLworKyAgICAgIGlmIChfZ2NyeV9tcGlfZWNfYmFkX3BvaW50ICgma0csIGVjKSkKKysgICAgICAgIHsKKysgICAgICAgICAgcmMgPSBHUEdfRVJSX0lOVl9EQVRBOworKyAgICAgICAgICBnb3RvIGxlYXZlOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmICghX2djcnlfbXBpX2VjX2N1cnZlX3BvaW50ICgma0csIGVjKSkKKyAgICAgeworICAgICAgIHJjID0gR1BHX0VSUl9JTlZfREFUQTsKKyAgICAgICBnb3RvIGxlYXZlOworZGlmZiAtLWdpdCBhL21waS9lYy5jIGIvbXBpL2VjLmMKK2luZGV4IGEwZjczNTcuLjRjMTY2MDMgMTAwNjQ0CistLS0gYS9tcGkvZWMuYworKysrIGIvbXBpL2VjLmMKK0BAIC0zOTYsNiArMzk2LDI5IEBAIGVjX2dldF90d29faW52X3AgKG1waV9lY190IGVjKQorIH0KKyAKKyAKKytzdGF0aWMgY29uc3QgY2hhciAqY3VydmUyNTUxOV9iYWRfcG9pbnRzW10gPSB7CisrICAiMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwKKysgICIweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLAorKyAgIjB4MDBiODQ5NWYxNjA1NjI4NmZkYjEzMjljZWI4ZDA5ZGE2YWM0OWZmMWZhZTM1NjE2YWViODQxM2I3YzdhZWJlMCIsCisrICAiMHg1NzExOWZkMGRkNGUyMmQ4ODY4ZTFjNThjNDVjNDQwNDViZWY4MzljNTViMWQwYjEyNDhjNTBhM2JjOTU5YzVmIiwKKysgICIweDdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWMiLAorKyAgIjB4N2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlZCIsCisrICAiMHg3ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVlIiwKKysgIE5VTEwKKyt9OworKworK3N0YXRpYyBnY3J5X21waV90Cisrc2NhbnZhbCAoY29uc3QgY2hhciAqc3RyaW5nKQorK3sKKysgIGdwZ19lcnJfY29kZV90IHJjOworKyAgZ2NyeV9tcGlfdCB2YWw7CisrCisrICByYyA9IF9nY3J5X21waV9zY2FuICgmdmFsLCBHQ1JZTVBJX0ZNVF9IRVgsIHN0cmluZywgMCwgTlVMTCk7CisrICBpZiAocmMpCisrICAgIGxvZ19mYXRhbCAoInNjYW5uaW5nIEVDQyBwYXJhbWV0ZXIgZmFpbGVkOiAlc1xuIiwgZ3BnX3N0cmVycm9yIChyYykpOworKyAgcmV0dXJuIHZhbDsKKyt9CisrCisgCisgLyogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplZCBhIGNvbnRleHQgZm9yIGVsbGlwdGljIGN1cnZlIGJhc2VkIG9uIHRoZQorICAgIGZpZWxkIEdGKHApLiAgUCBpcyB0aGUgcHJpbWUgc3BlY2lmeWluZyB0aGlzIGZpZWxkLCBBIGlzIHRoZSBmaXJzdAorQEAgLTQzNCw5ICs0NTcsMTcgQEAgZWNfcF9pbml0IChtcGlfZWNfdCBjdHgsIGVudW0gZ2NyeV9tcGlfZWNfbW9kZWxzIG1vZGVsLAorIAorICAgX2djcnlfbXBpX2VjX2dldF9yZXNldCAoY3R4KTsKKyAKKy0gIC8qIEFsbG9jYXRlIHNjcmF0Y2ggdmFyaWFibGVzLiAgKi8KKy0gIGZvciAoaT0wOyBpPCBESU0oY3R4LT50LnNjcmF0Y2gpOyBpKyspCistICAgIGN0eC0+dC5zY3JhdGNoW2ldID0gbXBpX2FsbG9jX2xpa2UgKGN0eC0+cCk7CisrICBpZiAobW9kZWwgPT0gTVBJX0VDX01PTlRHT01FUlkpCisrICAgIHsKKysgICAgICBmb3IgKGk9MDsgaTwgRElNKGN0eC0+dC5zY3JhdGNoKSAmJiBjdXJ2ZTI1NTE5X2JhZF9wb2ludHNbaV07IGkrKykKKysgICAgICAgIGN0eC0+dC5zY3JhdGNoW2ldID0gc2NhbnZhbCAoY3VydmUyNTUxOV9iYWRfcG9pbnRzW2ldKTsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgLyogQWxsb2NhdGUgc2NyYXRjaCB2YXJpYWJsZXMuICAqLworKyAgICAgIGZvciAoaT0wOyBpPCBESU0oY3R4LT50LnNjcmF0Y2gpOyBpKyspCisrICAgICAgICBjdHgtPnQuc2NyYXRjaFtpXSA9IG1waV9hbGxvY19saWtlIChjdHgtPnApOworKyAgICB9CisgCisgICAvKiBQcmVwYXJlIGZvciBmYXN0IHJlZHVjdGlvbi4gICovCisgICAvKiBGSVhNRTogbmVlZCBhIHRlc3QgZm9yIE5JU1QgdmFsdWVzLiAgSG93ZXZlciBpdCBkb2VzIG5vdCBnYWluIHVzCitAQCAtMTU3MiwzICsxNjAzLDE3IEBAIF9nY3J5X21waV9lY19jdXJ2ZV9wb2ludCAoZ2NyeV9tcGlfcG9pbnRfdCBwb2ludCwgbXBpX2VjX3QgY3R4KQorIAorICAgcmV0dXJuIHJlczsKKyB9CisrCisrCisraW50CisrX2djcnlfbXBpX2VjX2JhZF9wb2ludCAoZ2NyeV9tcGlfcG9pbnRfdCBwb2ludCwgbXBpX2VjX3QgY3R4KQorK3sKKysgIGludCBpOworKyAgZ2NyeV9tcGlfdCB4X2JhZDsKKysKKysgIGZvciAoaSA9IDA7ICh4X2JhZCA9IGN0eC0+dC5zY3JhdGNoW2ldKTsgaSsrKQorKyAgICBpZiAoIW1waV9jbXAgKHBvaW50LT54LCB4X2JhZCkpCisrICAgICAgcmV0dXJuIDE7CisrCisrICByZXR1cm4gMDsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL21waS5oIGIvc3JjL21waS5oCitpbmRleCBiNTM4NWI1Li5hZWJhN2Y4IDEwMDY0NAorLS0tIGEvc3JjL21waS5oCisrKysgYi9zcmMvbXBpLmgKK0BAIC0yOTYsNiArMjk2LDcgQEAgdm9pZCBfZ2NyeV9tcGlfZWNfbXVsX3BvaW50IChtcGlfcG9pbnRfdCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3J5X21waV90IHNjYWxhciwgbXBpX3BvaW50X3QgcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcGlfZWNfdCBjdHgpOworIGludCAgX2djcnlfbXBpX2VjX2N1cnZlX3BvaW50IChnY3J5X21waV9wb2ludF90IHBvaW50LCBtcGlfZWNfdCBjdHgpOworK2ludCBfZ2NyeV9tcGlfZWNfYmFkX3BvaW50IChnY3J5X21waV9wb2ludF90IHBvaW50LCBtcGlfZWNfdCBjdHgpOworIAorIGdjcnlfbXBpX3QgX2djcnlfbXBpX2VjX2VjMm9zIChnY3J5X21waV9wb2ludF90IHBvaW50LCBtcGlfZWNfdCBlY3R4KTsKKyAKKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzLzAwMDYtRml4LWJ1aWxkaW5nLUFBcmNoMzItQ0UtaW1wbGVtZW50YXRpb25zLXdoZW4tdGFyZ2V0LS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvMDAwNi1GaXgtYnVpbGRpbmctQUFyY2gzMi1DRS1pbXBsZW1lbnRhdGlvbnMtd2hlbi10YXJnZXQtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YjlmZDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzLzAwMDYtRml4LWJ1aWxkaW5nLUFBcmNoMzItQ0UtaW1wbGVtZW50YXRpb25zLXdoZW4tdGFyZ2V0LS5wYXRjaApAQCAtMCwwICsxLDk2IEBACitGcm9tIDRhN2FhMzBhZTlmM2NlNzk4ZGQ4ODZjMmYyZDQxNjRjNDMwMjc3NDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLaXZpbGlubmEgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CitEYXRlOiBTYXQsIDI5IEp1bCAyMDE3IDE0OjM0OjIzICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBidWlsZGluZyBBQXJjaDMyIENFIGltcGxlbWVudGF0aW9ucyB3aGVuIHRhcmdldCBpcyBBUk12NgorIGFyY2gKKworKiBjaXBoZXIvY2lwaGVyLWdjbS1hcm12OC1hYXJjaDMyLWNlLlM6IFNlbGVjdCBBUk12OCBhcmNoaXRlY3VyZS4KKyogY2lwaGVyL3Jpam5kYWVsLWFybXY4LWFhcmNoMzItY2UuUzogRGl0dG8uCisqIGNpcGhlci9zaGExLWFybXY4LWFhcmNoMzItY2UuUzogRGl0dG8uCisqIGNpcGhlci9zaGEyNTYtYXJtdjgtYWFyY2gzMi1jZS5TOiBEaXR0by4KKyogY29uZmlndXJlLmFjIChnY3J5X2N2X2djY19pbmxpbmVfYXNtX2FhcmNoMzJfY3J5cHRvKTogRGl0dG8uCistLQorCitSYXNwYmlhbiBkaXN0cmlidXRpb24gZGVmYXVsdHMgdG8gQVJNdjYgYXJjaGl0ZWN0dXJlIHRodXMgJ3JiaXQnCitpbnN0cnVjdGlvbiBpcyBub3QgYXZhaWxhYmxlIHdpdGggZGVmYXVsdCBjb21waWxlciBmbGFncy4gUGF0Y2gKK2FkZHMgZXhwbGljaXQgYXJjaGl0ZWN0dXJlIHNlbGVjdGlvbiBmb3IgQVJNdjggdG8gZW5hYmxlICdyYml0JwordXNhZ2Ugd2l0aCBBUk12OC9BQXJjaDMyLUNFIGFzc2VtYmx5IGltcGxlbWVudGF0aW9ucyBvZiBTSEEsCitHSEFTSCBhbmQgQUVTLgorCitSZXBvcnRlZC1ieTogQ2hyaXMgSG9ycnkgPHplcmJleUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLaXZpbGlubmEgPGp1c3NpLmtpdmlsaW5uYUBpa2kuZmk+CisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgQmFya2VyIDxwYmFya2VyQHRvZ2FubGFicy5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKy0tLQorIGNpcGhlci9jaXBoZXItZ2NtLWFybXY4LWFhcmNoMzItY2UuUyB8IDEgKworIGNpcGhlci9yaWpuZGFlbC1hcm12OC1hYXJjaDMyLWNlLlMgICB8IDEgKworIGNpcGhlci9zaGExLWFybXY4LWFhcmNoMzItY2UuUyAgICAgICB8IDEgKworIGNpcGhlci9zaGEyNTYtYXJtdjgtYWFyY2gzMi1jZS5TICAgICB8IDEgKworIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICB8IDEgKworIDUgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jaXBoZXIvY2lwaGVyLWdjbS1hcm12OC1hYXJjaDMyLWNlLlMgYi9jaXBoZXIvY2lwaGVyLWdjbS1hcm12OC1hYXJjaDMyLWNlLlMKK2luZGV4IGI2MWE3ODcxLi4xZGU2NmExNiAxMDA2NDQKKy0tLSBhL2NpcGhlci9jaXBoZXItZ2NtLWFybXY4LWFhcmNoMzItY2UuUworKysrIGIvY2lwaGVyL2NpcGhlci1nY20tYXJtdjgtYWFyY2gzMi1jZS5TCitAQCAtMjQsNiArMjQsNyBAQAorICAgICBkZWZpbmVkKEhBVkVfR0NDX0lOTElORV9BU01fQUFSQ0gzMl9DUllQVE8pCisgCisgLnN5bnRheCB1bmlmaWVkCisrLmFyY2ggYXJtdjgtYQorIC5mcHUgY3J5cHRvLW5lb24tZnAtYXJtdjgKKyAuYXJtCisgCitkaWZmIC0tZ2l0IGEvY2lwaGVyL3Jpam5kYWVsLWFybXY4LWFhcmNoMzItY2UuUyBiL2NpcGhlci9yaWpuZGFlbC1hcm12OC1hYXJjaDMyLWNlLlMKK2luZGV4IGYzNzVmNjczLi41YzhmYTNjMCAxMDA2NDQKKy0tLSBhL2NpcGhlci9yaWpuZGFlbC1hcm12OC1hYXJjaDMyLWNlLlMKKysrKyBiL2NpcGhlci9yaWpuZGFlbC1hcm12OC1hYXJjaDMyLWNlLlMKK0BAIC0yNCw2ICsyNCw3IEBACisgICAgIGRlZmluZWQoSEFWRV9HQ0NfSU5MSU5FX0FTTV9BQVJDSDMyX0NSWVBUTykKKyAKKyAuc3ludGF4IHVuaWZpZWQKKysuYXJjaCBhcm12OC1hCisgLmZwdSBjcnlwdG8tbmVvbi1mcC1hcm12OAorIC5hcm0KKyAKK2RpZmYgLS1naXQgYS9jaXBoZXIvc2hhMS1hcm12OC1hYXJjaDMyLWNlLlMgYi9jaXBoZXIvc2hhMS1hcm12OC1hYXJjaDMyLWNlLlMKK2luZGV4IGIwYmM1ZmZlLi5iZjJiMjMzYiAxMDA2NDQKKy0tLSBhL2NpcGhlci9zaGExLWFybXY4LWFhcmNoMzItY2UuUworKysrIGIvY2lwaGVyL3NoYTEtYXJtdjgtYWFyY2gzMi1jZS5TCitAQCAtMjQsNiArMjQsNyBAQAorICAgICBkZWZpbmVkKEhBVkVfR0NDX0lOTElORV9BU01fQUFSQ0gzMl9DUllQVE8pICYmIGRlZmluZWQoVVNFX1NIQTEpCisgCisgLnN5bnRheCB1bmlmaWVkCisrLmFyY2ggYXJtdjgtYQorIC5mcHUgY3J5cHRvLW5lb24tZnAtYXJtdjgKKyAuYXJtCisgCitkaWZmIC0tZ2l0IGEvY2lwaGVyL3NoYTI1Ni1hcm12OC1hYXJjaDMyLWNlLlMgYi9jaXBoZXIvc2hhMjU2LWFybXY4LWFhcmNoMzItY2UuUworaW5kZXggMjA0MWEyMzcuLjJiMTdhYjFiIDEwMDY0NAorLS0tIGEvY2lwaGVyL3NoYTI1Ni1hcm12OC1hYXJjaDMyLWNlLlMKKysrKyBiL2NpcGhlci9zaGEyNTYtYXJtdjgtYWFyY2gzMi1jZS5TCitAQCAtMjQsNiArMjQsNyBAQAorICAgICBkZWZpbmVkKEhBVkVfR0NDX0lOTElORV9BU01fQUFSQ0gzMl9DUllQVE8pICYmIGRlZmluZWQoVVNFX1NIQTI1NikKKyAKKyAuc3ludGF4IHVuaWZpZWQKKysuYXJjaCBhcm12OC1hCisgLmZwdSBjcnlwdG8tbmVvbi1mcC1hcm12OAorIC5hcm0KKyAKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDI3ZmFhN2Y0Li42NmU3Y2Q2NyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTYxOSw2ICsxNjE5LDcgQEAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgR0NDIGlubGluZSBhc3NlbWJsZXIgc3VwcG9ydHMgQUFyY2gzMiBDcnlwdG8gRXh0ZW5zaW9uIGkKKyAgICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKAorICAgICAgICAgICBbW19fYXNtX18oCisgICAgICAgICAgICAgICAgICIuc3ludGF4IHVuaWZpZWRcblx0IgorKyAgICAgICAgICAgICAgICAiLmFyY2ggYXJtdjgtYVxuXHQiCisgICAgICAgICAgICAgICAgICIuYXJtXG5cdCIKKyAgICAgICAgICAgICAgICAgIi5mcHUgY3J5cHRvLW5lb24tZnAtYXJtdjhcblx0IgorIAorLS0gCisyLjExLjAKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9DVkUtMjAxNy03NTI2LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9DVkUtMjAxNy03NTI2LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODRmYTk2Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvQ1ZFLTIwMTctNzUyNi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1NSArMCwwIEBACi1GbHVzaCtyZWxvYWQgc2lkZS1jaGFubmVsIGF0dGFjayBvbiBSU0Egc2VjcmV0IGtleXMgZHViYmVkICJTbGlkaW5nIHJpZ2h0Ci1pbnRvIGRpc2FzdGVyIi4KLQotQ1ZFOiBDVkUtMjAxNy03NTI2Ci1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0Ci1TaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgotCi1Gcm9tIDEyZWU0MDBjMzllMGViYjVmYjgxOWMzOTI2ZDQ1OWMyNzhmYzk5ZmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBOSUlCRSBZdXRha2EgPGduaWliZUBmc2lqLm9yZz4KLURhdGU6IFR1ZSwgNCBBcHIgMjAxNyAxNzozODowNSArMDkwMAotU3ViamVjdDogW1BBVENIIDEvNV0gbXBpOiBTaW1wbGlmeSBtcGlfcG93bS4KLQotKiBtcGkvbXBpLXBvdy5jIChfZ2NyeV9tcGlfcG93bSk6IFNpbXBsaWZ5IHRoZSBsb29wLgotCi0tLQotCi1UaGlzIGZpeCBpcyBub3QgYSBzb2x1dGlvbiBmb3IgdGhlIHByb2JsZW0gcmVwb3J0ZWQgKHlldCkuICBUaGUKLXByb2JsZW0gaXMgdGhhdCB0aGUgY3VycmVudCBhbGdvcml0aG0gb2YgX2djcnlfbXBpX3Bvd20gZGVwZW5kcyBvbgotZXhwb25lbnQgYW5kIHNvbWUgaW5mb3JtYXRpb24gbGVha3MgaXMgcG9zc2libGUuCi0KLVJlcG9ydGVkLWJ5OiBBbmRyZWFzIFphbmtsIDxhbmRyZWFzLnphbmtsQGFpc2VjLmZyYXVuaG9mZXIuZGU+Ci1TaWduZWQtb2ZmLWJ5OiBOSUlCRSBZdXRha2EgPGduaWliZUBmc2lqLm9yZz4KLQotKGJhY2twb3J0IGZyb20gbWFzdGVyIGNvbW1pdDoKLTcxOTQ2OGU1MzEzM2QzYmRmMTIxNTZjNWJmZGVhMmJmMTVmOWY2ZjEpCi0KLVNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+Ci0tLS0KLSBtcGkvbXBpLXBvdy5jIHwgMTA1ICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKSwgNzUgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9tcGkvbXBpLXBvdy5jIGIvbXBpL21waS1wb3cuYwotaW5kZXggYTc4MGViZDEuLjdiM2RjMzE4IDEwMDY0NAotLS0tIGEvbXBpL21waS1wb3cuYwotKysrIGIvbXBpL21waS1wb3cuYwotQEAgLTYwOSwxMiArNjA5LDggQEAgX2djcnlfbXBpX3Bvd20gKGdjcnlfbXBpX3QgcmVzLAotICAgICAgIGlmIChlID09IDApCi0gICAgICAgICB7Ci0gICAgICAgICAgIGogKz0gYzsKLS0gICAgICAgICAgaS0tOwotLSAgICAgICAgICBpZiAoIGkgPCAwICkKLS0gICAgICAgICAgICB7Ci0tICAgICAgICAgICAgICBjID0gMDsKLS0gICAgICAgICAgICAgIGJyZWFrOwotLSAgICAgICAgICAgIH0KLSsgICAgICAgICAgaWYgKCAtLWkgPCAwICkKLSsgICAgICAgICAgICBicmVhazsKLSAKLSAgICAgICAgICAgZSA9IGVwW2ldOwotICAgICAgICAgICBjID0gQklUU19QRVJfTVBJX0xJTUI7Ci1AQCAtNjI5LDM4ICs2MjUsMzMgQEAgX2djcnlfbXBpX3Bvd20gKGdjcnlfbXBpX3QgcmVzLAotICAgICAgICAgICBjIC09IGMwOwotICAgICAgICAgICBqICs9IGMwOwotIAotKyAgICAgICAgICBlMCA9IChlID4+IChCSVRTX1BFUl9NUElfTElNQiAtIFcpKTsKLSAgICAgICAgICAgaWYgKGMgPj0gVykKLS0gICAgICAgICAgICB7Ci0tICAgICAgICAgICAgICBlMCA9IChlID4+IChCSVRTX1BFUl9NUElfTElNQiAtIFcpKTsKLS0gICAgICAgICAgICAgIGUgPSAoZSA8PCBXKTsKLS0gICAgICAgICAgICAgIGMgLT0gVzsKLS0gICAgICAgICAgICB9Ci0rICAgICAgICAgICAgYzAgPSAwOwotICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgewotLSAgICAgICAgICAgICAgaS0tOwotLSAgICAgICAgICAgICAgaWYgKCBpIDwgMCApCi0rICAgICAgICAgICAgICBpZiAoIC0taSA8IDAgKQotICAgICAgICAgICAgICAgICB7Ci0tICAgICAgICAgICAgICAgICAgZSA9IChlID4+IChCSVRTX1BFUl9NUElfTElNQiAtIGMpKTsKLS0gICAgICAgICAgICAgICAgICBicmVhazsKLSsgICAgICAgICAgICAgICAgICBlMCA9IChlID4+IChCSVRTX1BFUl9NUElfTElNQiAtIGMpKTsKLSsgICAgICAgICAgICAgICAgICBqICs9IGMgLSBXOwotKyAgICAgICAgICAgICAgICAgIGdvdG8gbGFzdF9zdGVwOwotKyAgICAgICAgICAgICAgICB9Ci0rICAgICAgICAgICAgICBlbHNlCi0rICAgICAgICAgICAgICAgIHsKLSsgICAgICAgICAgICAgICAgICBjMCA9IGM7Ci0rICAgICAgICAgICAgICAgICAgZSA9IGVwW2ldOwotKyAgICAgICAgICAgICAgICAgIGMgPSBCSVRTX1BFUl9NUElfTElNQjsKLSsgICAgICAgICAgICAgICAgICBlMCB8PSAoZSA+PiAoQklUU19QRVJfTVBJX0xJTUIgLSAoVyAtIGMwKSkpOwotICAgICAgICAgICAgICAgICB9Ci0tCi0tICAgICAgICAgICAgICBjMCA9IGM7Ci0tICAgICAgICAgICAgICBlMCA9IChlID4+IChCSVRTX1BFUl9NUElfTElNQiAtIFcpKQotLSAgICAgICAgICAgICAgICB8IChlcFtpXSA+PiAoQklUU19QRVJfTVBJX0xJTUIgLSBXICsgYzApKTsKLS0gICAgICAgICAgICAgIGUgPSAoZXBbaV0gPDwgKFcgLSBjMCkpOwotLSAgICAgICAgICAgICAgYyA9IEJJVFNfUEVSX01QSV9MSU1CIC0gVyArIGMwOwotICAgICAgICAgICAgIH0KLSAKLSsgICAgICAgICAgZSA9IGUgPDwgKFcgLSBjMCk7Ci0rICAgICAgICAgIGMgLT0gKFcgLSBjMCk7Ci0rCi0rICAgICAgICBsYXN0X3N0ZXA6Ci0gICAgICAgICAgIGNvdW50X3RyYWlsaW5nX3plcm9zIChjMCwgZTApOwotICAgICAgICAgICBlMCA9IChlMCA+PiBjMCkgPj4gMTsKLSAKLS0gICAgICAgICAgZm9yIChqICs9IFcgLSBjMDsgajsgai0tKQotLSAgICAgICAgICAgIHsKLS0gICAgICAgICAgICAgIG11bF9tb2QgKHhwLCAmeHNpemUsIHJwLCByc2l6ZSwgcnAsIHJzaXplLCBtcCwgbXNpemUsICZrYXJhY3R4KTsKLS0gICAgICAgICAgICAgIHRwID0gcnA7IHJwID0geHA7IHhwID0gdHA7Ci0tICAgICAgICAgICAgICByc2l6ZSA9IHhzaXplOwotLSAgICAgICAgICAgIH0KLS0KLSAgICAgICAgICAgLyoKLSAgICAgICAgICAgICogIGJhc2VfdSA8PSBwcmVjb21wW2UwXQotICAgICAgICAgICAgKiAgYmFzZV91X3NpemUgPD0gcHJlY29tcF9zaXplW2UwXQotQEAgLTY3NywyNSArNjY4LDIzIEBAIF9nY3J5X21waV9wb3dtIChnY3J5X21waV90IHJlcywKLSAgICAgICAgICAgICAgIHUuZCA9IHByZWNvbXBba107Ci0gCi0gICAgICAgICAgICAgICBtcGlfc2V0X2NvbmQgKCZ3LCAmdSwgayA9PSBlMCk7Ci0tICAgICAgICAgICAgICBiYXNlX3Vfc2l6ZSB8PSAocHJlY29tcF9zaXplW2tdICYgKChtcGlfc2l6ZV90KTAgLSAoayA9PSBlMCkpICk7Ci0rICAgICAgICAgICAgICBiYXNlX3Vfc2l6ZSB8PSAoIHByZWNvbXBfc2l6ZVtrXSAmICgobXBpX3NpemVfdCkwIC0gKGsgPT0gZTApKSApOwotICAgICAgICAgICAgIH0KLSAKLS0gICAgICAgICAgbXVsX21vZCAoeHAsICZ4c2l6ZSwgcnAsIHJzaXplLCBiYXNlX3UsIGJhc2VfdV9zaXplLAotLSAgICAgICAgICAgICAgICAgICBtcCwgbXNpemUsICZrYXJhY3R4KTsKLS0gICAgICAgICAgdHAgPSBycDsgcnAgPSB4cDsgeHAgPSB0cDsKLS0gICAgICAgICAgcnNpemUgPSB4c2l6ZTsKLSsgICAgICAgICAgZm9yIChqICs9IFcgLSBjMDsgaiA+PSAwOyBqLS0pCi0rICAgICAgICAgICAgewotKyAgICAgICAgICAgICAgbXVsX21vZCAoeHAsICZ4c2l6ZSwgcnAsIHJzaXplLAotKyAgICAgICAgICAgICAgICAgICAgICAgaiA9PSAwID8gYmFzZV91IDogcnAsIGogPT0gMCA/IGJhc2VfdV9zaXplIDogcnNpemUsCi0rICAgICAgICAgICAgICAgICAgICAgICBtcCwgbXNpemUsICZrYXJhY3R4KTsKLSsgICAgICAgICAgICAgIHRwID0gcnA7IHJwID0geHA7IHhwID0gdHA7Ci0rICAgICAgICAgICAgICByc2l6ZSA9IHhzaXplOwotKyAgICAgICAgICAgIH0KLSAKLSAgICAgICAgICAgaiA9IGMwOwotKyAgICAgICAgICBpZiAoIGkgPCAwICkKLSsgICAgICAgICAgICBicmVhazsKLSAgICAgICAgIH0KLSAKLS0gICAgaWYgKGMgIT0gMCkKLS0gICAgICB7Ci0tICAgICAgICBqICs9IGM7Ci0tICAgICAgICBjb3VudF90cmFpbGluZ196ZXJvcyAoYywgZSk7Ci0tICAgICAgICBlID0gKGUgPj4gYyk7Ci0tICAgICAgICBqIC09IGM7Ci0tICAgICAgfQotLQotICAgICB3aGlsZSAoai0tKQotICAgICAgIHsKLSAgICAgICAgIG11bF9tb2QgKHhwLCAmeHNpemUsIHJwLCByc2l6ZSwgcnAsIHJzaXplLCBtcCwgbXNpemUsICZrYXJhY3R4KTsKLUBAIC03MDMsNDAgKzY5Miw2IEBAIF9nY3J5X21waV9wb3dtIChnY3J5X21waV90IHJlcywKLSAgICAgICAgIHJzaXplID0geHNpemU7Ci0gICAgICAgfQotIAotLSAgICBpZiAoZSAhPSAwKQotLSAgICAgIHsKLS0gICAgICAgIC8qCi0tICAgICAgICAgKiBiYXNlX3UgPD0gcHJlY29tcFsoZT4+MSldCi0tICAgICAgICAgKiBiYXNlX3Vfc2l6ZSA8PSBwcmVjb21wX3NpemVbKGU+PjEpXQotLSAgICAgICAgICovCi0tICAgICAgICBiYXNlX3Vfc2l6ZSA9IDA7Ci0tICAgICAgICBmb3IgKGsgPSAwOyBrIDwgKDE8PCAoVyAtIDEpKTsgaysrKQotLSAgICAgICAgICB7Ci0tICAgICAgICAgICAgc3RydWN0IGdjcnlfbXBpIHcsIHU7Ci0tICAgICAgICAgICAgdy5hbGxvY2VkID0gdy5ubGltYnMgPSBwcmVjb21wX3NpemVba107Ci0tICAgICAgICAgICAgdS5hbGxvY2VkID0gdS5ubGltYnMgPSBwcmVjb21wX3NpemVba107Ci0tICAgICAgICAgICAgdy5zaWduID0gdS5zaWduID0gMDsKLS0gICAgICAgICAgICB3LmZsYWdzID0gdS5mbGFncyA9IDA7Ci0tICAgICAgICAgICAgdy5kID0gYmFzZV91OwotLSAgICAgICAgICAgIHUuZCA9IHByZWNvbXBba107Ci0tCi0tICAgICAgICAgICAgbXBpX3NldF9jb25kICgmdywgJnUsIGsgPT0gKGU+PjEpKTsKLS0gICAgICAgICAgICBiYXNlX3Vfc2l6ZSB8PSAocHJlY29tcF9zaXplW2tdICYgKChtcGlfc2l6ZV90KTAgLSAoayA9PSAoZT4+MSkpKSApOwotLSAgICAgICAgICB9Ci0tCi0tICAgICAgICBtdWxfbW9kICh4cCwgJnhzaXplLCBycCwgcnNpemUsIGJhc2VfdSwgYmFzZV91X3NpemUsCi0tICAgICAgICAgICAgICAgICBtcCwgbXNpemUsICZrYXJhY3R4KTsKLS0gICAgICAgIHRwID0gcnA7IHJwID0geHA7IHhwID0gdHA7Ci0tICAgICAgICByc2l6ZSA9IHhzaXplOwotLQotLSAgICAgICAgZm9yICg7IGM7IGMtLSkKLS0gICAgICAgICAgewotLSAgICAgICAgICAgIG11bF9tb2QgKHhwLCAmeHNpemUsIHJwLCByc2l6ZSwgcnAsIHJzaXplLCBtcCwgbXNpemUsICZrYXJhY3R4KTsKLS0gICAgICAgICAgICB0cCA9IHJwOyBycCA9IHhwOyB4cCA9IHRwOwotLSAgICAgICAgICAgIHJzaXplID0geHNpemU7Ci0tICAgICAgICAgIH0KLS0gICAgICB9Ci0tCi0gICAgIC8qIFdlIHNoaWZ0ZWQgTU9ELCB0aGUgbW9kdWxvIHJlZHVjdGlvbiBhcmd1bWVudCwgbGVmdAotICAgICAgICBNT0RfU0hJRlRfQ05UIHN0ZXBzLiAgQWRqdXN0IHRoZSByZXN1bHQgYnkgcmVkdWNpbmcgaXQgd2l0aCB0aGUKLSAgICAgICAgb3JpZ2luYWwgTU9ELgotLS0gCi0yLjExLjAKLQotCi1Gcm9tIGE0YjI3NWM0ZDUzNzg4MzdlODIwZmRjODRmNGFkYTg3NmY5YzhjY2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBOSUlCRSBZdXRha2EgPGduaWliZUBmc2lqLm9yZz4KLURhdGU6IFNhdCwgMjQgSnVuIDIwMTcgMjA6NDY6MjAgKzA5MDAKLVN1YmplY3Q6IFtQQVRDSCAyLzVdIFNhbWUgY29tcHV0YXRpb24gZm9yIHNxdWFyZSBhbmQgbXVsdGlwbHkuCi0KLSogbXBpL21waS1wb3cuYyAoX2djcnlfbXBpX3Bvd20pOiBDb21wYXJlIG1zaXplIGZvciBtYXhfdV9zaXplLiAgTW92ZQotdGhlIGFzc2lnbm1lbnQgdG8gYmFzZV91IGludG8gdGhlIGxvb3AuICBDb3B5IGNvbnRlbnQgcmVmZXJlZCBieSBSUCB0bwotQkFTRV9VIGV4Y2VwdCB0aGUgbGFzdCBvZiB0aGUgbG9vcC4KLQotLS0KLQotU2lnbmVkLW9mZi1ieTogTklJQkUgWXV0YWthIDxnbmlpYmVAZnNpai5vcmc+Ci0oYmFja3BvcnQgZnJvbSBtYXN0ZXIgY29tbWl0OgotNzgxMzA4MjhlOWExNDBhOWRlNGRhZmFkYmM4NDRkYmI2NGNiNzA5YSkKLQotU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KLS0tLQotIG1waS9tcGktcG93LmMgfCA1MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspLCAyMSBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL21waS9tcGktcG93LmMgYi9tcGkvbXBpLXBvdy5jCi1pbmRleCA3YjNkYzMxOC4uM2NiYTY5MDMgMTAwNjQ0Ci0tLS0gYS9tcGkvbXBpLXBvdy5jCi0rKysgYi9tcGkvbXBpLXBvdy5jCi1AQCAtNTczLDYgKzU3Myw4IEBAIF9nY3J5X21waV9wb3dtIChnY3J5X21waV90IHJlcywKLSAgICAgICAgIE1QTl9DT1BZIChwcmVjb21wW2ldLCBycCwgcnNpemUpOwotICAgICAgIH0KLSAKLSsgICAgaWYgKG1zaXplID4gbWF4X3Vfc2l6ZSkKLSsgICAgICBtYXhfdV9zaXplID0gbXNpemU7Ci0gICAgIGJhc2VfdSA9IG1waV9hbGxvY19saW1iX3NwYWNlIChtYXhfdV9zaXplLCBlc2VjKTsKLSAgICAgTVBOX1pFUk8gKGJhc2VfdSwgbWF4X3Vfc2l6ZSk7Ci0gCi1AQCAtNjE5LDYgKzYyMSwxMCBAQCBfZ2NyeV9tcGlfcG93bSAoZ2NyeV9tcGlfdCByZXMsCi0gICAgICAgICB7Ci0gICAgICAgICAgIGludCBjMDsKLSAgICAgICAgICAgbXBpX2xpbWJfdCBlMDsKLSsgICAgICAgICAgc3RydWN0IGdjcnlfbXBpIHcsIHU7Ci0rICAgICAgICAgIHcuc2lnbiA9IHUuc2lnbiA9IDA7Ci0rICAgICAgICAgIHcuZmxhZ3MgPSB1LmZsYWdzID0gMDsKLSsgICAgICAgICAgdy5kID0gYmFzZV91OwotIAotICAgICAgICAgICBjb3VudF9sZWFkaW5nX3plcm9zIChjMCwgZSk7Ci0gICAgICAgICAgIGUgPSAoZSA8PCBjMCk7Ci1AQCAtNjUyLDI5ICs2NTgsMzEgQEAgX2djcnlfbXBpX3Bvd20gKGdjcnlfbXBpX3QgcmVzLAotICAgICAgICAgICBjb3VudF90cmFpbGluZ196ZXJvcyAoYzAsIGUwKTsKLSAgICAgICAgICAgZTAgPSAoZTAgPj4gYzApID4+IDE7Ci0gCi0tICAgICAgICAgIC8qCi0tICAgICAgICAgICAqICBiYXNlX3UgPD0gcHJlY29tcFtlMF0KLS0gICAgICAgICAgICogIGJhc2VfdV9zaXplIDw9IHByZWNvbXBfc2l6ZVtlMF0KLS0gICAgICAgICAgICovCi0tICAgICAgICAgIGJhc2VfdV9zaXplID0gMDsKLS0gICAgICAgICAgZm9yIChrID0gMDsgayA8ICgxPDwgKFcgLSAxKSk7IGsrKykKLS0gICAgICAgICAgICB7Ci0tICAgICAgICAgICAgICBzdHJ1Y3QgZ2NyeV9tcGkgdywgdTsKLS0gICAgICAgICAgICAgIHcuYWxsb2NlZCA9IHcubmxpbWJzID0gcHJlY29tcF9zaXplW2tdOwotLSAgICAgICAgICAgICAgdS5hbGxvY2VkID0gdS5ubGltYnMgPSBwcmVjb21wX3NpemVba107Ci0tICAgICAgICAgICAgICB3LnNpZ24gPSB1LnNpZ24gPSAwOwotLSAgICAgICAgICAgICAgdy5mbGFncyA9IHUuZmxhZ3MgPSAwOwotLSAgICAgICAgICAgICAgdy5kID0gYmFzZV91OwotLSAgICAgICAgICAgICAgdS5kID0gcHJlY29tcFtrXTsKLS0KLS0gICAgICAgICAgICAgIG1waV9zZXRfY29uZCAoJncsICZ1LCBrID09IGUwKTsKLS0gICAgICAgICAgICAgIGJhc2VfdV9zaXplIHw9ICggcHJlY29tcF9zaXplW2tdICYgKChtcGlfc2l6ZV90KTAgLSAoayA9PSBlMCkpICk7Ci0tICAgICAgICAgICAgfQotLQotICAgICAgICAgICBmb3IgKGogKz0gVyAtIGMwOyBqID49IDA7IGotLSkKLSAgICAgICAgICAgICB7Ci0tICAgICAgICAgICAgICBtdWxfbW9kICh4cCwgJnhzaXplLCBycCwgcnNpemUsCi0tICAgICAgICAgICAgICAgICAgICAgICBqID09IDAgPyBiYXNlX3UgOiBycCwgaiA9PSAwID8gYmFzZV91X3NpemUgOiByc2l6ZSwKLSsKLSsgICAgICAgICAgICAgIC8qCi0rICAgICAgICAgICAgICAgKiAgYmFzZV91IDw9IHByZWNvbXBbZTBdCi0rICAgICAgICAgICAgICAgKiAgYmFzZV91X3NpemUgPD0gcHJlY29tcF9zaXplW2UwXQotKyAgICAgICAgICAgICAgICovCi0rICAgICAgICAgICAgICBiYXNlX3Vfc2l6ZSA9IDA7Ci0rICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgKDE8PCAoVyAtIDEpKTsgaysrKQotKyAgICAgICAgICAgICAgICB7Ci0rICAgICAgICAgICAgICAgICAgdy5hbGxvY2VkID0gdy5ubGltYnMgPSBwcmVjb21wX3NpemVba107Ci0rICAgICAgICAgICAgICAgICAgdS5hbGxvY2VkID0gdS5ubGltYnMgPSBwcmVjb21wX3NpemVba107Ci0rICAgICAgICAgICAgICAgICAgdS5kID0gcHJlY29tcFtrXTsKLSsKLSsgICAgICAgICAgICAgICAgICBtcGlfc2V0X2NvbmQgKCZ3LCAmdSwgayA9PSBlMCk7Ci0rICAgICAgICAgICAgICAgICAgYmFzZV91X3NpemUgfD0gKCBwcmVjb21wX3NpemVba10gJiAoMFVMIC0gKGsgPT0gZTApKSApOwotKyAgICAgICAgICAgICAgICB9Ci0rCi0rICAgICAgICAgICAgICB3LmFsbG9jZWQgPSB3Lm5saW1icyA9IHJzaXplOwotKyAgICAgICAgICAgICAgdS5hbGxvY2VkID0gdS5ubGltYnMgPSByc2l6ZTsKLSsgICAgICAgICAgICAgIHUuZCA9IHJwOwotKyAgICAgICAgICAgICAgbXBpX3NldF9jb25kICgmdywgJnUsIGogIT0gMCk7Ci0rICAgICAgICAgICAgICBiYXNlX3Vfc2l6ZSBePSAoKGJhc2VfdV9zaXplIF4gcnNpemUpICAmICgwVUwgLSAoaiAhPSAwKSkpOwotKwotKyAgICAgICAgICAgICAgbXVsX21vZCAoeHAsICZ4c2l6ZSwgcnAsIHJzaXplLCBiYXNlX3UsIGJhc2VfdV9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgbXAsIG1zaXplLCAma2FyYWN0eCk7Ci0gICAgICAgICAgICAgICB0cCA9IHJwOyBycCA9IHhwOyB4cCA9IHRwOwotICAgICAgICAgICAgICAgcnNpemUgPSB4c2l6ZTsKLS0tIAotMi4xMS4wCi0KLQotRnJvbSAxMjljMTk2MGU1NTYwM2VjM2Y2ZmQxY2Q5Y2Q1MWIyMmU5YTlhN2VmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTklJQkUgWXV0YWthIDxnbmlpYmVAZnNpai5vcmc+Ci1EYXRlOiBUaHUsIDI5IEp1biAyMDE3IDExOjQ4OjQ0ICswOTAwCi1TdWJqZWN0OiBbUEFUQ0ggMy81XSByc2E6IEFkZCBleHBvbmVudCBibGluZGluZy4KLQotKiBjaXBoZXIvcnNhLmMgKHNlY3JldCk6IEJsaW5kIHNlY3JldCBEIHdpdGggcmFuZG9taXplZCBub25jZSBSIGZvcgotbXBpX3Bvd20gY29tcHV0YXRpb24uCi0KLS0tCi0KLUNvLWF1dGhvcmVkLWJ5OiBXZXJuZXIgS29jaCA8d2tAZ251cGcub3JnPgotU2lnbmVkLW9mZi1ieTogTklJQkUgWXV0YWthIDxnbmlpYmVAZnNpai5vcmc+Ci0KLVRoZSBwYXBlciBkZXNjcmliaW5nIGF0dGFjazogaHR0cHM6Ly9lcHJpbnQuaWFjci5vcmcvMjAxNy82MjcKLQotU2xpZGluZyByaWdodCBpbnRvIGRpc2FzdGVyOiBMZWZ0LXRvLXJpZ2h0IHNsaWRpbmcgd2luZG93cyBsZWFrCi1ieSBEYW5pZWwgSi4gQmVybnN0ZWluIGFuZCBKb2FjaGltIEJyZWl0bmVyIGFuZCBEYW5pZWwgR2Vua2luIGFuZAotTGVvbiBHcm9vdCBCcnVpbmRlcmluayBhbmQgTmFkaWEgSGVuaW5nZXIgYW5kIFRhbmphIExhbmdlIGFuZAotQ2hyaXN0aW5lIHZhbiBWcmVkZW5kYWFsIGFuZCBZdXZhbCBZYXJvbQotCi0gIEl0IGlzIHdlbGwga25vd24gdGhhdCBjb25zdGFudC10aW1lIGltcGxlbWVudGF0aW9ucyBvZiBtb2R1bGFyCi0gIGV4cG9uZW50aWF0aW9uIGNhbm5vdCB1c2Ugc2xpZGluZyB3aW5kb3dzLiBIb3dldmVyLCBzb2Z0d2FyZQotICBsaWJyYXJpZXMgc3VjaCBhcyBMaWJnY3J5cHQsIHVzZWQgYnkgR251UEcsIGNvbnRpbnVlIHRvIHVzZSBzbGlkaW5nCi0gIHdpbmRvd3MuIEl0IGlzIHdpZGVseSBiZWxpZXZlZCB0aGF0LCBldmVuIGlmIHRoZSBjb21wbGV0ZSBwYXR0ZXJuIG9mCi0gIHNxdWFyaW5ncyBhbmQgbXVsdGlwbGljYXRpb25zIGlzIG9ic2VydmVkIHRocm91Z2ggYSBzaWRlLWNoYW5uZWwKLSAgYXR0YWNrLCB0aGUgbnVtYmVyIG9mIGV4cG9uZW50IGJpdHMgbGVha2VkIGlzIG5vdCBzdWZmaWNpZW50IHRvCi0gIGNhcnJ5IG91dCBhIGZ1bGwga2V5LXJlY292ZXJ5IGF0dGFjayBhZ2FpbnN0IFJTQS4gU3BlY2lmaWNhbGx5LAotICA0LWJpdCBzbGlkaW5nIHdpbmRvd3MgbGVhayBvbmx5IDQwJSBvZiB0aGUgYml0cywgYW5kIDUtYml0IHNsaWRpbmcKLSAgd2luZG93cyBsZWFrIG9ubHkgMzMlIG9mIHRoZSBiaXRzLgotCi0gIEluIHRoaXMgcGFwZXIgd2UgZGVtb25zdHJhdGUgYSBjb21wbGV0ZSBicmVhayBvZiBSU0EtMTAyNCBhcwotICBpbXBsZW1lbnRlZCBpbiBMaWJnY3J5cHQuIE91ciBhdHRhY2sgbWFrZXMgZXNzZW50aWFsIHVzZSBvZiB0aGUgZmFjdAotICB0aGF0IExpYmdjcnlwdCB1c2VzIHRoZSBsZWZ0LXRvLXJpZ2h0IG1ldGhvZCBmb3IgY29tcHV0aW5nIHRoZQotICBzbGlkaW5nLXdpbmRvdyBleHBhbnNpb24uIFdlIHNob3cgZm9yIHRoZSBmaXJzdCB0aW1lIHRoYXQgdGhlCi0gIGRpcmVjdGlvbiBvZiB0aGUgZW5jb2RpbmcgbWF0dGVyczogdGhlIHBhdHRlcm4gb2Ygc3F1YXJpbmdzIGFuZAotICBtdWx0aXBsaWNhdGlvbnMgaW4gbGVmdC10by1yaWdodCBzbGlkaW5nIHdpbmRvd3MgbGVha3Mgc2lnbmlmaWNhbnRseQotICBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGV4cG9uZW50IGJpdHMgdGhhbiBmb3IgcmlnaHQtdG8tbGVmdC4gV2Ugc2hvdwotICBob3cgdG8gaW5jb3Jwb3JhdGUgdGhpcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGludG8gdGhlCi0gIEhlbmluZ2VyLVNoYWNoYW0gYWxnb3JpdGhtIGZvciBwYXJ0aWFsIGtleSByZWNvbnN0cnVjdGlvbiwgYW5kIHVzZQotICBpdCB0byBvYnRhaW4gdmVyeSBlZmZpY2llbnQgZnVsbCBrZXkgcmVjb3ZlcnkgZm9yIFJTQS0xMDI0LiBXZSBhbHNvCi0gIHByb3ZpZGUgc3Ryb25nIGV2aWRlbmNlIHRoYXQgdGhlIHNhbWUgYXR0YWNrIHdvcmtzIGZvciBSU0EtMjA0OCB3aXRoCi0gIG9ubHkgbW9kZXJhdGVseSBtb3JlIGNvbXB1dGF0aW9uLgotCi1FeHBvbmVudCBibGluZGluZyBpcyBhIGtpbmQgb2Ygd29ya2Fyb3VuZCB0byBhZGQgbm9pc2UuICBTaWduYWwgKGxlYWspCi1pcyBzdGlsbCB0aGVyZSBmb3Igbm9uLWNvbnN0YW50LXRpbWUgaW1wbGVtZW50YXRpb24uCi0KLShiYWNrcG9ydGVkIGZyb20gbWFzdGVyIGNvbW1pdDoKLTg3MjVjOTlmZmE0MTc3OGYzODJjYTk3MjMzMTgzYmNkNjg3YmIwY2UpCi0KLVNpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+Ci0tLS0KLSBjaXBoZXIvcnNhLmMgfCAzMiArKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCAyNSBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvY2lwaGVyL3JzYS5jIGIvY2lwaGVyL3JzYS5jCi1pbmRleCBiNmM3Mzc0MS4uMjVlMjliNWMgMTAwNjQ0Ci0tLS0gYS9jaXBoZXIvcnNhLmMKLSsrKyBiL2NpcGhlci9yc2EuYwotQEAgLTEwMjEsMTUgKzEwMjEsMzMgQEAgc2VjcmV0IChnY3J5X21waV90IG91dHB1dCwgZ2NyeV9tcGlfdCBpbnB1dCwgUlNBX3NlY3JldF9rZXkgKnNrZXkgKQotICAgICAgIGdjcnlfbXBpX3QgbTEgPSBtcGlfYWxsb2Nfc2VjdXJlKCBtcGlfZ2V0X25saW1icyhza2V5LT5uKSsxICk7Ci0gICAgICAgZ2NyeV9tcGlfdCBtMiA9IG1waV9hbGxvY19zZWN1cmUoIG1waV9nZXRfbmxpbWJzKHNrZXktPm4pKzEgKTsKLSAgICAgICBnY3J5X21waV90IGggID0gbXBpX2FsbG9jX3NlY3VyZSggbXBpX2dldF9ubGltYnMoc2tleS0+bikrMSApOwotLQotLSAgICAgIC8qIG0xID0gYyBeIChkIG1vZCAocC0xKSkgbW9kIHAgKi8KLSsgICAgICBnY3J5X21waV90IERfYmxpbmQgPSBtcGlfYWxsb2Nfc2VjdXJlICggbXBpX2dldF9ubGltYnMoc2tleS0+bikgKyAxICk7Ci0rICAgICAgZ2NyeV9tcGlfdCByOwotKyAgICAgIHVuc2lnbmVkIGludCByX25iaXRzOwotKwotKyAgICAgIHJfbmJpdHMgPSBtcGlfZ2V0X25iaXRzIChza2V5LT5wKSAvIDQ7Ci0rICAgICAgaWYgKHJfbmJpdHMgPCA5NikKLSsgICAgICAgIHJfbmJpdHMgPSA5NjsKLSsgICAgICByID0gbXBpX2FsbG9jX3NlY3VyZSAoKHJfbmJpdHMgKyBCSVRTX1BFUl9NUElfTElNQi0xKS9CSVRTX1BFUl9NUElfTElNQik7Ci0rCi0rICAgICAgLyogZF9ibGluZCA9IChkIG1vZCAocC0xKSkgKyAocC0xKSAqIHIgKi8KLSsgICAgICAvKiBtMSA9IGMgXiBkX2JsaW5kIG1vZCBwICovCi0rICAgICAgX2djcnlfbXBpX3JhbmRvbWl6ZSAociwgcl9uYml0cywgR0NSWV9XRUFLX1JBTkRPTSk7Ci0rICAgICAgbXBpX3NldF9oaWdoYml0IChyLCByX25iaXRzIC0gMSk7Ci0gICAgICAgbXBpX3N1Yl91aSggaCwgc2tleS0+cCwgMSAgKTsKLS0gICAgICBtcGlfZmRpdl9yKCBoLCBza2V5LT5kLCBoICk7Ci0tICAgICAgbXBpX3Bvd20oIG0xLCBpbnB1dCwgaCwgc2tleS0+cCApOwotLSAgICAgIC8qIG0yID0gYyBeIChkIG1vZCAocS0xKSkgbW9kIHEgKi8KLSsgICAgICBtcGlfbXVsICggRF9ibGluZCwgaCwgciApOwotKyAgICAgIG1waV9mZGl2X3IgKCBoLCBza2V5LT5kLCBoICk7Ci0rICAgICAgbXBpX2FkZCAoIERfYmxpbmQsIERfYmxpbmQsIGggKTsKLSsgICAgICBtcGlfcG93bSggbTEsIGlucHV0LCBEX2JsaW5kLCBza2V5LT5wICk7Ci0rICAgICAgLyogZF9ibGluZCA9IChkIG1vZCAocS0xKSkgKyAocS0xKSAqIHIgKi8KLSsgICAgICAvKiBtMiA9IGMgXiBkX2JsaW5kIG1vZCBxICovCi0rICAgICAgX2djcnlfbXBpX3JhbmRvbWl6ZSAociwgcl9uYml0cywgR0NSWV9XRUFLX1JBTkRPTSk7Ci0rICAgICAgbXBpX3NldF9oaWdoYml0IChyLCByX25iaXRzIC0gMSk7Ci0gICAgICAgbXBpX3N1Yl91aSggaCwgc2tleS0+cSwgMSAgKTsKLS0gICAgICBtcGlfZmRpdl9yKCBoLCBza2V5LT5kLCBoICk7Ci0tICAgICAgbXBpX3Bvd20oIG0yLCBpbnB1dCwgaCwgc2tleS0+cSApOwotKyAgICAgIG1waV9tdWwgKCBEX2JsaW5kLCBoLCByICk7Ci0rICAgICAgbXBpX2ZkaXZfciAoIGgsIHNrZXktPmQsIGggKTsKLSsgICAgICBtcGlfYWRkICggRF9ibGluZCwgRF9ibGluZCwgaCApOwotKyAgICAgIG1waV9wb3dtKCBtMiwgaW5wdXQsIERfYmxpbmQsIHNrZXktPnEgKTsKLSAgICAgICAvKiBoID0gdSAqICggbTIgLSBtMSApIG1vZCBxICovCi0gICAgICAgbXBpX3N1YiggaCwgbTIsIG0xICk7Ci0gICAgICAgaWYgKCBtcGlfaGFzX3NpZ24gKCBoICkgKQotLS0gCi0yLjExLjAKLQotCi1Gcm9tIDhlMWE2Mjg5YjdkMTFhOGJmNmM5NGFmZmEwNmM5Nzk0ZTcyMTZlMjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBOSUlCRSBZdXRha2EgPGduaWliZUBmc2lqLm9yZz4KLURhdGU6IFRodSwgMjkgSnVuIDIwMTcgMTI6MzY6MjcgKzA5MDAKLVN1YmplY3Q6IFtQQVRDSCA0LzVdIHJzYTogRml4IGV4cG9uZW50IGJsaW5kaW5nLgotCi0qIGNpcGhlci9yc2EuYyAoc2VjcmV0KTogRnJlZSBEX0JMSU5ELgotCi0tLQotCi1GaXhlcy1jb21taXQ6IGE5ZjYxMmRlZjgwMWM4MTQ1ZDU1MWQ5OTU0NzVlNWQ1MWE0Yzk4OGMKLVNpZ25lZC1vZmYtYnk6IE5JSUJFIFl1dGFrYSA8Z25paWJlQGZzaWoub3JnPgotU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KLS0tLQotIGNpcGhlci9yc2EuYyB8IDEgKwotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQotCi1kaWZmIC0tZ2l0IGEvY2lwaGVyL3JzYS5jIGIvY2lwaGVyL3JzYS5jCi1pbmRleCAyNWUyOWI1Yy4uMzNmOTJlYmQgMTAwNjQ0Ci0tLS0gYS9jaXBoZXIvcnNhLmMKLSsrKyBiL2NpcGhlci9yc2EuYwotQEAgLTEwNTcsNiArMTA1Nyw3IEBAIHNlY3JldCAoZ2NyeV9tcGlfdCBvdXRwdXQsIGdjcnlfbXBpX3QgaW5wdXQsIFJTQV9zZWNyZXRfa2V5ICpza2V5ICkKLSAgICAgICBtcGlfbXVsICggaCwgaCwgc2tleS0+cCApOwotICAgICAgIG1waV9hZGQgKCBvdXRwdXQsIG0xLCBoICk7Ci0gCi0rICAgICAgbXBpX2ZyZWUgKCBEX2JsaW5kICk7Ci0gICAgICAgbXBpX2ZyZWUgKCBoICk7Ci0gICAgICAgbXBpX2ZyZWUgKCBtMSApOwotICAgICAgIG1waV9mcmVlICggbTIgKTsKLS0tIAotMi4xMS4wCi0KLQotRnJvbSA0ZTU0OTc3NTIxNzJlZGM0NDQwMjlhZjY0NWYyOGNiODhjZTkzOTA2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTklJQkUgWXV0YWthIDxnbmlpYmVAZnNpai5vcmc+Ci1EYXRlOiBUaHUsIDI5IEp1biAyMDE3IDEyOjQwOjE5ICswOTAwCi1TdWJqZWN0OiBbUEFUQ0ggNS81XSByc2E6IE1vcmUgZml4LgotCi0qIGNpcGhlci9yc2EuYyAoc2VjcmV0KTogRnJlZSBSLgotCi0tLQotCi1GaXhlcy1jb21taXQ6IGE5ZjYxMmRlZjgwMWM4MTQ1ZDU1MWQ5OTU0NzVlNWQ1MWE0Yzk4OGMKLVNpZ25lZC1vZmYtYnk6IE5JSUJFIFl1dGFrYSA8Z25paWJlQGZzaWoub3JnPgotU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KLS0tLQotIGNpcGhlci9yc2EuYyB8IDEgKwotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQotCi1kaWZmIC0tZ2l0IGEvY2lwaGVyL3JzYS5jIGIvY2lwaGVyL3JzYS5jCi1pbmRleCAzM2Y5MmViZC4uOGQ4ZDE1N2IgMTAwNjQ0Ci0tLS0gYS9jaXBoZXIvcnNhLmMKLSsrKyBiL2NpcGhlci9yc2EuYwotQEAgLTEwNTcsNiArMTA1Nyw3IEBAIHNlY3JldCAoZ2NyeV9tcGlfdCBvdXRwdXQsIGdjcnlfbXBpX3QgaW5wdXQsIFJTQV9zZWNyZXRfa2V5ICpza2V5ICkKLSAgICAgICBtcGlfbXVsICggaCwgaCwgc2tleS0+cCApOwotICAgICAgIG1waV9hZGQgKCBvdXRwdXQsIG0xLCBoICk7Ci0gCi0rICAgICAgbXBpX2ZyZWUgKCByICk7Ci0gICAgICAgbXBpX2ZyZWUgKCBEX2JsaW5kICk7Ci0gICAgICAgbXBpX2ZyZWUgKCBoICk7Ci0gICAgICAgbXBpX2ZyZWUgKCBtMSApOwotLS0gCi0yLjExLjAKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2FkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk1ODlmNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2FkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi1BZGQgYW5kIHVzZSBwa2ctY29uZmlnIGZvciBsaWJnY3J5cHQgaW5zdGVhZCBvZiAtY29uZmlnIHNjcmlwdHMuCi0KLVVwc3RyZWFtLVN0YXR1czogRGVuaWVkIFt1cHN0cmVhbSBoYXZlIGluZGljYXRlZCB0aGV5IGRvbid0IHdhbnQgYSBwa2ctY29uZmlnIGRlcGVuZGVuY3ldCi0KLVJQIDIwMTQvNS8yMgotCi1SZWJhc2UgdG8gMS43LjAKLVNpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KLS0tLQotIGNvbmZpZ3VyZS5hYyAgICAgICAgfCAgMSArCi0gc3JjL2xpYmdjcnlwdC5tNCAgICB8IDcxICsrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gc3JjL2xpYmdjcnlwdC5wYy5pbiB8IDMzICsrKysrKysrKysrKysrKysrKysrKysrKysKLSAzIGZpbGVzIGNoYW5nZWQsIDM4IGluc2VydGlvbnMoKyksIDY3IGRlbGV0aW9ucygtKQotIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvbGliZ2NyeXB0LnBjLmluCi0KLWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IGY2ODNlMjEuLjU2NmUxYzggMTAwNjQ0Ci0tLS0gYS9jb25maWd1cmUuYWMKLSsrKyBiL2NvbmZpZ3VyZS5hYwotQEAgLTIzMTQsNiArMjMxNCw3IEBAIHJhbmRvbS9NYWtlZmlsZQotIGRvYy9NYWtlZmlsZQotIHNyYy9NYWtlZmlsZQotIHNyYy9nY3J5cHQuaAotK3NyYy9saWJnY3J5cHQucGMKLSBzcmMvbGliZ2NyeXB0LWNvbmZpZwotIHNyYy92ZXJzaW9uaW5mby5yYwotIHRlc3RzL01ha2VmaWxlCi1kaWZmIC0tZ2l0IGEvc3JjL2xpYmdjcnlwdC5tNCBiL3NyYy9saWJnY3J5cHQubTQKLWluZGV4IGM2N2NmZWMuLjRlYTVmMmMgMTAwNjQ0Ci0tLS0gYS9zcmMvbGliZ2NyeXB0Lm00Ci0rKysgYi9zcmMvbGliZ2NyeXB0Lm00Ci1AQCAtMjksMzAgKzI5LDYgQEAgZG5sIGlzIGFkZGVkIHRvIHRoZSBncGdfY29uZmlnX3NjcmlwdF93YXJuIHZhcmlhYmxlLgotIGRubAotIEFDX0RFRlVOKFtBTV9QQVRIX0xJQkdDUllQVF0sCi0gWyBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCi0tICBBQ19BUkdfV0lUSChsaWJnY3J5cHQtcHJlZml4LAotLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtbGliZ2NyeXB0LXByZWZpeD1QRlhdLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcmVmaXggd2hlcmUgTElCR0NSWVBUIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSksCi0tICAgICBsaWJnY3J5cHRfY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiLCBsaWJnY3J5cHRfY29uZmlnX3ByZWZpeD0iIikKLS0gIGlmIHRlc3QgeCIke0xJQkdDUllQVF9DT05GSUd9IiA9IHggOyB0aGVuCi0tICAgICBpZiB0ZXN0IHgiJHtsaWJnY3J5cHRfY29uZmlnX3ByZWZpeH0iICE9IHggOyB0aGVuCi0tICAgICAgICBMSUJHQ1JZUFRfQ09ORklHPSIke2xpYmdjcnlwdF9jb25maWdfcHJlZml4fS9iaW4vbGliZ2NyeXB0LWNvbmZpZyIKLS0gICAgIGVsc2UKLS0gICAgICAgY2FzZSAiJHtTWVNST09UfSIgaW4KLS0gICAgICAgICAvKikKLS0gICAgICAgICAgIGlmIHRlc3QgLXggIiR7U1lTUk9PVH0vYmluL2xpYmdjcnlwdC1jb25maWciIDsgdGhlbgotLSAgICAgICAgICAgICBMSUJHQ1JZUFRfQ09ORklHPSIke1NZU1JPT1R9L2Jpbi9saWJnY3J5cHQtY29uZmlnIgotLSAgICAgICAgICAgZmkKLS0gICAgICAgICAgIDs7Ci0tICAgICAgICAgJycpCi0tICAgICAgICAgICA7OwotLSAgICAgICAgICAqKQotLSAgICAgICAgICAgQUNfTVNHX1dBUk4oW0lnbm9yaW5nIFwkU1lTUk9PVCBhcyBpdCBpcyBub3QgYW4gYWJzb2x1dGUgcGF0aC5dKQotLSAgICAgICAgICAgOzsKLS0gICAgICAgZXNhYwotLSAgICAgZmkKLS0gIGZpCi0tCi0tICBBQ19QQVRIX1BST0coTElCR0NSWVBUX0NPTkZJRywgbGliZ2NyeXB0LWNvbmZpZywgbm8pCi0gICB0bXA9aWZlbHNlKFskMV0sICwxOjEuMi4wLCQxKQotICAgaWYgZWNobyAiJHRtcCIgfCBncmVwICc6JyA+L2Rldi9udWxsIDI+L2Rldi9udWxsIDsgdGhlbgotICAgICAgcmVxX2xpYmdjcnlwdF9hcGk9YGVjaG8gIiR0bXAiICAgICB8IHNlZCAncy9cKC4qXCk6XCguKlwpL1wxLydgCi1AQCAtNjIsNDggKzM4LDEzIEBAIEFDX0RFRlVOKFtBTV9QQVRIX0xJQkdDUllQVF0sCi0gICAgICBtaW5fbGliZ2NyeXB0X3ZlcnNpb249IiR0bXAiCi0gICBmaQotIAotLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBMSUJHQ1JZUFQgLSB2ZXJzaW9uID49ICRtaW5fbGliZ2NyeXB0X3ZlcnNpb24pCi0tICBvaz1ubwotLSAgaWYgdGVzdCAiJExJQkdDUllQVF9DT05GSUciICE9ICJubyIgOyB0aGVuCi0tICAgIHJlcV9tYWpvcj1gZWNobyAkbWluX2xpYmdjcnlwdF92ZXJzaW9uIHwgXAotLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wxLydgCi0tICAgIHJlcV9taW5vcj1gZWNobyAkbWluX2xpYmdjcnlwdF92ZXJzaW9uIHwgXAotLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wyLydgCi0tICAgIHJlcV9taWNybz1gZWNobyAkbWluX2xpYmdjcnlwdF92ZXJzaW9uIHwgXAotLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wzLydgCi0tICAgIGxpYmdjcnlwdF9jb25maWdfdmVyc2lvbj1gJExJQkdDUllQVF9DT05GSUcgLS12ZXJzaW9uYAotLSAgICBtYWpvcj1gZWNobyAkbGliZ2NyeXB0X2NvbmZpZ192ZXJzaW9uIHwgXAotLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDEvJ2AKLS0gICAgbWlub3I9YGVjaG8gJGxpYmdjcnlwdF9jb25maWdfdmVyc2lvbiB8IFwKLS0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wyLydgCi0tICAgIG1pY3JvPWBlY2hvICRsaWJnY3J5cHRfY29uZmlnX3ZlcnNpb24gfCBcCi0tICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMy8nYAotLSAgICBpZiB0ZXN0ICIkbWFqb3IiIC1ndCAiJHJlcV9tYWpvciI7IHRoZW4KLS0gICAgICAgIG9rPXllcwotLSAgICBlbHNlCi0tICAgICAgICBpZiB0ZXN0ICIkbWFqb3IiIC1lcSAiJHJlcV9tYWpvciI7IHRoZW4KLS0gICAgICAgICAgICBpZiB0ZXN0ICIkbWlub3IiIC1ndCAiJHJlcV9taW5vciI7IHRoZW4KLS0gICAgICAgICAgICAgICBvaz15ZXMKLS0gICAgICAgICAgICBlbHNlCi0tICAgICAgICAgICAgICAgaWYgdGVzdCAiJG1pbm9yIiAtZXEgIiRyZXFfbWlub3IiOyB0aGVuCi0tICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRtaWNybyIgLWdlICIkcmVxX21pY3JvIjsgdGhlbgotLSAgICAgICAgICAgICAgICAgICAgIG9rPXllcwotLSAgICAgICAgICAgICAgICAgICBmaQotLSAgICAgICAgICAgICAgIGZpCi0tICAgICAgICAgICAgZmkKLS0gICAgICAgIGZpCi0tICAgIGZpCi0tICBmaQotLSAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KLS0gICAgQUNfTVNHX1JFU1VMVChbeWVzICgkbGliZ2NyeXB0X2NvbmZpZ192ZXJzaW9uKV0pCi0tICBlbHNlCi0tICAgIEFDX01TR19SRVNVTFQobm8pCi0tICBmaQotKyAgUEtHX0NIRUNLX01PRFVMRVMoTElCR0NSWVBULCBbbGliZ2NyeXB0ID49ICRtaW5fbGliZ2NyeXB0X3ZlcnNpb25dLCBbb2s9eWVzXSwgW29rPW5vXSkKLSsKLSAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCi0gICAgICAjIElmIHdlIGhhdmUgYSByZWNlbnQgbGliZ2NyeXB0LCB3ZSBzaG91bGQgYWxzbyBjaGVjayB0aGF0IHRoZQotICAgICAgIyBBUEkgaXMgY29tcGF0aWJsZQotICAgICAgaWYgdGVzdCAiJHJlcV9saWJnY3J5cHRfYXBpIiAtZ3QgMCA7IHRoZW4KLS0gICAgICAgIHRtcD1gJExJQkdDUllQVF9DT05GSUcgLS1hcGktdmVyc2lvbiAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCi0rICAgICAgICB0bXA9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9YXBpX3ZlcnNpb24gbGliZ2NyeXB0YAotICAgICAgICAgaWYgdGVzdCAiJHRtcCIgLWd0IDAgOyB0aGVuCi0gICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW0xJQkdDUllQVCBBUEkgdmVyc2lvbl0pCi0gICAgICAgICAgICBpZiB0ZXN0ICIkcmVxX2xpYmdjcnlwdF9hcGkiIC1lcSAiJHRtcCIgOyB0aGVuCi1AQCAtMTE2LDEwICs1Nyw4IEBAIEFDX0RFRlVOKFtBTV9QQVRIX0xJQkdDUllQVF0sCi0gICAgICBmaQotICAgZmkKLSAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCi0tICAgIExJQkdDUllQVF9DRkxBR1M9YCRMSUJHQ1JZUFRfQ09ORklHIC0tY2ZsYWdzYAotLSAgICBMSUJHQ1JZUFRfTElCUz1gJExJQkdDUllQVF9DT05GSUcgLS1saWJzYAotICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQotLSAgICBsaWJnY3J5cHRfY29uZmlnX2hvc3Q9YCRMSUJHQ1JZUFRfQ09ORklHIC0taG9zdCAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vbmVgCi0rICAgIGxpYmdjcnlwdF9jb25maWdfaG9zdD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1ob3N0IGxpYmdjcnlwdGAKLSAgICAgaWYgdGVzdCB4IiRsaWJnY3J5cHRfY29uZmlnX2hvc3QiICE9IHhub25lIDsgdGhlbgotICAgICAgIGlmIHRlc3QgeCIkbGliZ2NyeXB0X2NvbmZpZ19ob3N0IiAhPSB4IiRob3N0IiA7IHRoZW4KLSAgIEFDX01TR19XQVJOKFtbCi1AQCAtMTM0LDggKzczLDYgQEAgQUNfREVGVU4oW0FNX1BBVEhfTElCR0NSWVBUXSwKLSAgICAgICBmaQotICAgICBmaQotICAgZWxzZQotLSAgICBMSUJHQ1JZUFRfQ0ZMQUdTPSIiCi0tICAgIExJQkdDUllQVF9MSUJTPSIiCi0gICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCi0gICBmaQotICAgQUNfU1VCU1QoTElCR0NSWVBUX0NGTEFHUykKLWRpZmYgLS1naXQgYS9zcmMvbGliZ2NyeXB0LnBjLmluIGIvc3JjL2xpYmdjcnlwdC5wYy5pbgotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjJmYzhmNTMKLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9saWJnY3J5cHQucGMuaW4KLUBAIC0wLDAgKzEsMzMgQEAKLSsjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIHBrZy1jb25maWcgbWV0YWRhdGEgZmlsZS4KLSsjIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSsjIEF1dGhvcjogU2ltb24gSm9zZWZzc29uCi0rIwotKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdGhlIGF1dGhvciBnaXZlcwotKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0Ci0rIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLSsjCi0rIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0rIyBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0IGV2ZW4gdGhlCi0rIyBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSsKLStwcmVmaXg9QHByZWZpeEAKLStleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACi0rbGliZGlyPUBsaWJkaXJACi0raW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKLSsKLSsjIEFQSSBpbmZvCi0rYXBpX3ZlcnNpb249QExJQkdDUllQVF9DT05GSUdfQVBJX1ZFUlNJT05ACi0raG9zdD1ATElCR0NSWVBUX0NPTkZJR19IT1NUQAotKwotKyMgTWlzYyBpbmZvcm1hdGlvbi4KLStzeW1tZXRyaWNfY2lwaGVycz1ATElCR0NSWVBUX0NJUEhFUlNACi0rYXN5bW1ldHJpY19jaXBoZXJzPUBMSUJHQ1JZUFRfUFVCS0VZX0NJUEhFUlNACi0rZGlnZXN0cz1ATElCR0NSWVBUX0RJR0VTVFNACi0rCi0rTmFtZTogbGliZ2NyeXB0Ci0rRGVzY3JpcHRpb246IEdOVSBjcnlwdG8gbGlicmFyeQotK1VSTDogaHR0cDovL3d3dy5nbnVwZy5vcmcKLStWZXJzaW9uOiBAVkVSU0lPTkAKLStMaWJzOiAtTCR7bGliZGlyfSAtbGdjcnlwdAotK0xpYnMucHJpdmF0ZTogLUwke2xpYmRpcn0gLWxncGctZXJyb3IKLStDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfSAKLS0tIAotMi44LjEKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9maXgtSUNFLWZhaWx1cmUtb24tbWlwcy13aXRoLW9wdGlvbi1PLWFuZC1nLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9maXgtSUNFLWZhaWx1cmUtb24tbWlwcy13aXRoLW9wdGlvbi1PLWFuZC1nLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODJlNjJmLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvZml4LUlDRS1mYWlsdXJlLW9uLW1pcHMtd2l0aC1vcHRpb24tTy1hbmQtZy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLXRlc3RzL2JlbmNoLXNsb3BlLmM6IHdvcmthcm91bmQgSUNFIGZhaWx1cmUgb24gbWlwcyB3aXRoICctTyAtZycKLQotSGl0IGEgSUNFIGFuZCBjb3VsZCByZWR1Y2UgaXQgdG8gdGhlIGZvbGxvd2luZyBtaW5pbWFsIGV4YW1wbGU6Ci0KLTEuIE9ubHkgdGhlIHNpemUgb2YgYXJyYXkgYXNzaWduZWQgd2l0aCAyIGNhdXNlZCB0aGUgaXNzdWU6Ci0kIGNhdCA+IG1pcGdjYy10ZXN0LmMgPDwgRU5ECi0KLWludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgICAgIGNoYXIgKnBTdHJBcnJ5W0FSUkFZX1NJWkVfTUFYXSA9IHsiaGVsbG8ifTsKLSAgICAgICAgaW50IGkgPSAwOwotCi0gICAgICAgIHdoaWxlKHBTdHJBcnJ5W2ldICYmIGk8QVJSQVlfU0laRV9NQVgpCi0gICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIiVzXG4iLCBwU3RyQXJyeVtpXSk7Ci0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLUVORAotCi0yLiBPbmx5IC1PMSBhbmQgLWcgb24gbWlwcyBjYXVzZWQgdGhlIGlzc3VlOgotJCBtaXBzLXBva3ktbGludXgtZ2NjIC1PMSAtZyAtbyBtaXBnY2MtdGVzdCBtaXBnY2MtdGVzdC5jCi1taXBnY2MtdGVzdC5jOiBJbiBmdW5jdGlvbiAnbWFpbic6Ci1taXBnY2MtdGVzdC5jOjE4OjE6IGludGVybmFsIGNvbXBpbGVyIGVycm9yOiBpbiBkd2FyZjJvdXRfdmFyX2xvY2F0aW9uLCBhdCBkd2FyZjJvdXQuYzoyMDgxMAotIH0KLSBeCi1QbGVhc2Ugc3VibWl0IGEgZnVsbCBidWcgcmVwb3J0LAotd2l0aCBwcmVwcm9jZXNzZWQgc291cmNlIGlmIGFwcHJvcHJpYXRlLgotU2VlIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVncy5odG1sPiBmb3IgaW5zdHJ1Y3Rpb25zCi0KLTMuIFRoZSBxdWljayB3b3Jrcm91bmQgaXMgdHJ5aW5nIHRvIGVubGFyZ2UgdGhlIHNpemUgb2YgYXJyYXkgd2l0aCBsYXJnZXIKLXRoYW4gMi4KLQotNC4gRmlsZSBhIGJ1ZyB0byBHTlUsIGJ1dCBpdCBjb3VsZCBub3QgYmUgcmVwcm9kdWNlZCBvbiB0aGVyZSBlbnZpcm9ubWVudC4KLWh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NjA2NDMKLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZSBzcGVjaWZpY10KLQotU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotLS0tCi0gdGVzdHMvYmVuY2gtc2xvcGUuYyB8IDQgKystLQotIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS90ZXN0cy9iZW5jaC1zbG9wZS5jIGIvdGVzdHMvYmVuY2gtc2xvcGUuYwotaW5kZXggYmQwNTA2NC4uMjhjMjQzOCAxMDA2NDQKLS0tLSBhL3Rlc3RzL2JlbmNoLXNsb3BlLmMKLSsrKyBiL3Rlc3RzL2JlbmNoLXNsb3BlLmMKLUBAIC0xMTk3LDcgKzExOTcsNyBAQCBzdGF0aWMgc3RydWN0IGJlbmNoX29wcyBoYXNoX29wcyA9IHsKLSB9OwotIAotIAotLXN0YXRpYyBzdHJ1Y3QgYmVuY2hfaGFzaF9tb2RlIGhhc2hfbW9kZXNbXSA9IHsKLStzdGF0aWMgc3RydWN0IGJlbmNoX2hhc2hfbW9kZSBoYXNoX21vZGVzWzNdID0gewotICAgeyIiLCAmaGFzaF9vcHN9LAotICAgezB9LAotIH07Ci1AQCAtMTM0OSw3ICsxMzQ5LDcgQEAgc3RhdGljIHN0cnVjdCBiZW5jaF9vcHMgbWFjX29wcyA9IHsKLSB9OwotIAotIAotLXN0YXRpYyBzdHJ1Y3QgYmVuY2hfbWFjX21vZGUgbWFjX21vZGVzW10gPSB7Ci0rc3RhdGljIHN0cnVjdCBiZW5jaF9tYWNfbW9kZSBtYWNfbW9kZXNbM10gPSB7Ci0gICB7IiIsICZtYWNfb3BzfSwKLSAgIHswfSwKLSB9OwotLS0gCi0xLjguMS4yCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvZml4LXVuZGVmaW5lZC1yZWZlcmVuY2UtdG8tcHRocmVhZC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvZml4LXVuZGVmaW5lZC1yZWZlcmVuY2UtdG8tcHRocmVhZC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdkZThiYS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2ZpeC11bmRlZmluZWQtcmVmZXJlbmNlLXRvLXB0aHJlYWQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1Gcm9tIGNjMGUyYjQwM2QzMzg5Mjk2MzUxM2EzYmE5OGU0YWU1YTA1YTRkM2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+Ci1EYXRlOiBTdW4sIDEyIEp1biAyMDE2IDA0OjQ0OjI5IC0wNDAwCi1TdWJqZWN0OiBbUEFUQ0hdIHRlc3RzL01ha2VmaWxlLmFtOiBmaXggdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgcHRocmVhZF9jcmVhdGUnCi0KLUFkZCBtaXNzaW5nICctbHB0aHJlYWQnIHRvIENGTEFHUwotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgotLS0tCi0gdGVzdHMvTWFrZWZpbGUuYW0gfCAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCi1pbmRleCBkNDYyZjMwLi5iZWY2ZGQ3IDEwMDY0NAotLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KLSsrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCi1AQCAtNjIsNCArNjIsNCBAQCBFWFRSQV9ESVNUID0gUkVBRE1FIHJzYS0xNmsua2V5IGNhdnNfdGVzdHMuc2ggY2F2c19kcml2ZXIucGwgXAotIAotIExEQUREID0gJChzdGFuZGFyZF9sZGFkZCkgJChHUEdfRVJST1JfTElCUykKLSB0X2xvY2tfTERBREQgPSAkKHN0YW5kYXJkX2xkYWRkKSAkKEdQR19FUlJPUl9NVF9MSUJTKQotLXRfbG9ja19DRkxBR1MgPSAkKEdQR19FUlJPUl9NVF9DRkxBR1MpCi0rdF9sb2NrX0NGTEFHUyA9ICQoR1BHX0VSUk9SX01UX0NGTEFHUykgLWxwdGhyZWFkCi0tLSAKLTIuOC4xCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvbGliZ2NyeXB0LWZpeC1idWlsZGluZy1lcnJvci13aXRoLU8yLWluLXN5c3Jvb3QtcGF0aC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvbGliZ2NyeXB0LWZpeC1idWlsZGluZy1lcnJvci13aXRoLU8yLWluLXN5c3Jvb3QtcGF0aC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNlNTQwMy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2xpYmdjcnlwdC1maXgtYnVpbGRpbmctZXJyb3Itd2l0aC1PMi1pbi1zeXNyb290LXBhdGgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotbGliZ2NyeXB0OiBmaXggYnVpbGRpbmcgZXJyb3Igd2l0aCAnLU8yJyBpbiBzeXNyb290IHBhdGgKLQotQ2hhcmFjdGVycyBsaWtlICctTzInIG9yICctT2Zhc3QnIHdpbGwgYmUgcmVwbGFjZWQgYnkgJy1PMScgd2hlbiBjb21waWxpbmcgY2lwaGVyLgotSWYgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyBsaWJnY3J5cHQgYW5kIHN5c3Jvb3QgY29udGFpbnMgc3VjaCBjaGFyYWN0ZXJzLCB3ZSB3b3VsZAotZ2V0IGNvbXBpbGUgZXJyb3JzIGJlY2F1c2UgdGhlIHN5c3Jvb3QgcGF0aCBoYXMgYmVlbiBtb2RpZmllZC4KLQotRml4IHRoaXMgYnkgYWRkaW5nIGJsYW5rIHNwYWNlcyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvcmlnaW5hbCBtYXRjaGluZyBwYXR0ZXJuIGluIHRoZQotc2VkIGNvbW1hbmQuCi0KLVNpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KLS0tLQotIGNpcGhlci9NYWtlZmlsZS5hbSB8ICAgIDIgKy0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2NpcGhlci9NYWtlZmlsZS5hbSBiL2NpcGhlci9NYWtlZmlsZS5hbQotaW5kZXggNzZjZGM5Ni4uOWE4OTc5MiAxMDA2NDQKLS0tLSBhL2NpcGhlci9NYWtlZmlsZS5hbQotKysrIGIvY2lwaGVyL01ha2VmaWxlLmFtCi1AQCAtNjksNyArNjksNyBAQCByZmMyMjY4LmMgXAotIGNhbWVsbGlhLmMgY2FtZWxsaWEuaCBjYW1lbGxpYS1nbHVlLmMKLSAKLSBpZiBFTkFCTEVfT19GTEFHX01VTkdJTkcKLS1vX2ZsYWdfbXVuZ2luZyA9IHNlZCAtZSAncy8tT1woWzItOXNdWzItOXNdKlwpLy1PMS8nIC1lICdzLy1PZmFzdC8tTzEvZycKLStvX2ZsYWdfbXVuZ2luZyA9IHNlZCAtZSAncy8gLU9cKFsyLTlzXVsyLTlzXSpcKSAvIC1PMSAvJyAtZSAncy8gLU9mYXN0IC8gLU8xIC9nJwotIGVsc2UKLSBvX2ZsYWdfbXVuZ2luZyA9IGNhdAotIGVuZGlmCi0tLSAKLTEuNy45LjUKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9saWJnY3J5cHQuaW5jIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9saWJnY3J5cHQuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDAzNTc5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvbGliZ2NyeXB0LmluYworKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLVNVTU1BUlkgPSAiR2VuZXJhbCBwdXJwb3NlIGNyeXB0b2dyYXBoaWMgbGlicmFyeSBiYXNlZCBvbiB0aGUgY29kZSBmcm9tIEdudVBHIgotSE9NRVBBR0UgPSAiaHR0cDovL2RpcmVjdG9yeS5mc2Yub3JnL3Byb2plY3QvbGliZ2NyeXB0LyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmcxMGNvZGUuY29tL2dudXBnL2luZGV4IgotU0VDVElPTiA9ICJsaWJzIgotCi0jIGhlbHBlciBwcm9ncmFtIGdjcnlwdHJuZCBhbmQgZ2V0cmFuZG9tIGFyZSB1bmRlciBHUEwsIHJlc3QgTEdQTAotTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSsgJiBHUEx2MysiCi1MSUNFTlNFXyR7UE59ID0gIkxHUEx2Mi4xKyIKLUxJQ0VOU0VfJHtQTn0tZGV2ID0gIkdQTHYyKyAmIExHUEx2Mi4xKyIKLUxJQ0VOU0VfZHVtcHNleHAtZGV2ID0gIkdQTHYzKyIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWJiYjQ2MTIxMWEzM2IxMzRkNDJlZDVlZTgwMmIzN2ZmIgotCi1ERVBFTkRTID0gImxpYmdwZy1lcnJvciIKLQotVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vZ251cGcub3JnL2Rvd25sb2FkL2luZGV4Lmh0bWwiCi1TUkNfVVJJID0gIiR7R05VUEdfTUlSUk9SfS9saWJnY3J5cHQvbGliZ2NyeXB0LSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vbGliZ2NyeXB0LWZpeC1idWlsZGluZy1lcnJvci13aXRoLU8yLWluLXN5c3Jvb3QtcGF0aC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9maXgtSUNFLWZhaWx1cmUtb24tbWlwcy13aXRoLW9wdGlvbi1PLWFuZC1nLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2ZpeC11bmRlZmluZWQtcmVmZXJlbmNlLXRvLXB0aHJlYWQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1lY2MtU3RvcmUtRWREU0Etc2Vzc2lvbi1rZXktaW4tc2VjdXJlLW1lbW9yeS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNy03NTI2LnBhdGNoIFwKLSIKLQotQklOQ09ORklHID0gIiR7YmluZGlyfS9saWJnY3J5cHQtY29uZmlnIgotCi1pbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcKLQotRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1hc20iCi0KLVBBQ0tBR0VDT05GSUcgPz89ICJjYXBhYmlsaXRpZXMiCi1QQUNLQUdFQ09ORklHW2NhcGFiaWxpdGllc10gPSAiLS13aXRoLWNhcGFiaWxpdGllcywtLXdpdGhvdXQtY2FwYWJpbGl0aWVzLGxpYmNhcCIKLQotZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewotCSMgRWxzZSB0aGlzIGNvdWxkIGJlIHVzZWQgaW4gcHJlZmVyZW5jZSB0byB0aGUgb25lIGluIGFjbG9jYWwtY29weQotCXJtIC1mICR7U30vbTQvZ3BnLWVycm9yLm00Ci19Ci0KLSMgbGliZ2NyeXB0LnBjIGlzIGFkZGVkIGxvY2FsbHkgYW5kIHRodXMgaW5zdGFsbGVkIGhlcmUKLWRvX2luc3RhbGxfYXBwZW5kKCkgewotCWluc3RhbGwgLWQgJHtEfS8ke2xpYmRpcn0vcGtnY29uZmlnCi0JaW5zdGFsbCAtbSAwNjQ0ICR7Qn0vc3JjL2xpYmdjcnlwdC5wYyAke0R9LyR7bGliZGlyfS9wa2djb25maWcvCi19Ci0KLVBBQ0tBR0VTID0rICJkdW1wc2V4cC1kZXYiCi0KLUZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L2htYWMyNTYiCi1GSUxFU19kdW1wc2V4cC1kZXYgKz0gIiR7YmluZGlyfS9kdW1wc2V4cCIKLQotQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvbGliZ2NyeXB0XzEuNy42LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9saWJnY3J5cHRfMS43LjYuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMGExZmUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9saWJnY3J5cHRfMS43LjYuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXJlcXVpcmUgbGliZ2NyeXB0LmluYwotCi1TUkNfVVJJW21kNXN1bV0gPSAiZWFjNmQxMTk5OTY1MGU4YTE0OTM2NzRjMWJkYmM3ZjgiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmMwYWVjNzcxNGQ3NWQ4MTJiNjY1YmQ1MTBkNjYwMzFiMWIyY2U4ZmE4NTVjYzJjMDIyMzhjOTU0ZWEzNjk4MiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvbGliZ2NyeXB0XzEuOC4wLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9saWJnY3J5cHRfMS44LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI5ODJmMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvbGliZ2NyeXB0XzEuOC4wLmJiCkBAIC0wLDAgKzEsNTUgQEAKK1NVTU1BUlkgPSAiR2VuZXJhbCBwdXJwb3NlIGNyeXB0b2dyYXBoaWMgbGlicmFyeSBiYXNlZCBvbiB0aGUgY29kZSBmcm9tIEdudVBHIgorSE9NRVBBR0UgPSAiaHR0cDovL2RpcmVjdG9yeS5mc2Yub3JnL3Byb2plY3QvbGliZ2NyeXB0LyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmcxMGNvZGUuY29tL2dudXBnL2luZGV4IgorU0VDVElPTiA9ICJsaWJzIgorCisjIGhlbHBlciBwcm9ncmFtIGdjcnlwdHJuZCBhbmQgZ2V0cmFuZG9tIGFyZSB1bmRlciBHUEwsIHJlc3QgTEdQTAorTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSsgJiBHUEx2MysiCitMSUNFTlNFXyR7UE59ID0gIkxHUEx2Mi4xKyIKK0xJQ0VOU0VfJHtQTn0tZGV2ID0gIkdQTHYyKyAmIExHUEx2Mi4xKyIKK0xJQ0VOU0VfZHVtcHNleHAtZGV2ID0gIkdQTHYzKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWJiYjQ2MTIxMWEzM2IxMzRkNDJlZDVlZTgwMmIzN2ZmIgorCitERVBFTkRTID0gImxpYmdwZy1lcnJvciIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vZ251cGcub3JnL2Rvd25sb2FkL2luZGV4Lmh0bWwiCitTUkNfVVJJID0gIiR7R05VUEdfTUlSUk9SfS9saWJnY3J5cHQvbGliZ2NyeXB0LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUFkZC1hbmQtdXNlLXBrZy1jb25maWctZm9yLWxpYmdjcnlwdC1pbnN0ZWFkLW9mLWNvbmYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy10ZXN0cy1iZW5jaC1zbG9wZS5jLXdvcmthcm91bmQtSUNFLWZhaWx1cmUtb24tbWlwcy13LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItbGliZ2NyeXB0LWZpeC1idWlsZGluZy1lcnJvci13aXRoLU8yLWluLXN5c3Jvb3QtcGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LXRlc3RzLU1ha2VmaWxlLmFtLWZpeC11bmRlZmluZWQtcmVmZXJlbmNlLXRvLXB0aHJlYWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNS1lY2MtQWRkLWlucHV0LXZhbGlkYXRpb24tZm9yLVgyNTUxOS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA2LUZpeC1idWlsZGluZy1BQXJjaDMyLUNFLWltcGxlbWVudGF0aW9ucy13aGVuLXRhcmdldC0ucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjExMGNlNDM1MmY5ZWE2ZjU2MGJkYzZjNTY0NGFlOTNjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY2ZTQ3MGI3ZjJkM2E3MDNlODc0N2YwNWE4YzE5ZDllMTBlMjZlYmYyZDVmM2Q3MWZmNzVhNDBmNTA0ZTEyZWUiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vbGliZ2NyeXB0LWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtYXNtIgorRVhUUkFfT0VNQUtFX2NsYXNzLXRhcmdldCA9ICJMSUJUT09MRkxBR1M9Jy0tdGFnPUNDJyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gImNhcGFiaWxpdGllcyIKK1BBQ0tBR0VDT05GSUdbY2FwYWJpbGl0aWVzXSA9ICItLXdpdGgtY2FwYWJpbGl0aWVzLC0td2l0aG91dC1jYXBhYmlsaXRpZXMsbGliY2FwIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyBFbHNlIHRoaXMgY291bGQgYmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIHRoZSBvbmUgaW4gYWNsb2NhbC1jb3B5CisJcm0gLWYgJHtTfS9tNC9ncGctZXJyb3IubTQKK30KKworIyBsaWJnY3J5cHQucGMgaXMgYWRkZWQgbG9jYWxseSBhbmQgdGh1cyBpbnN0YWxsZWQgaGVyZQorZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7bGliZGlyfS9wa2djb25maWcKKwlpbnN0YWxsIC1tIDA2NDQgJHtCfS9zcmMvbGliZ2NyeXB0LnBjICR7RH0vJHtsaWJkaXJ9L3BrZ2NvbmZpZy8KK30KKworUEFDS0FHRVMgPSsgImR1bXBzZXhwLWRldiIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vaG1hYzI1NiIKK0ZJTEVTX2R1bXBzZXhwLWRldiArPSAiJHtiaW5kaXJ9L2R1bXBzZXhwIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ3BnLWVycm9yL2xpYmdwZy1lcnJvcl8xLjI2LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3JfMS4yNi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkwZGIxYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ3BnLWVycm9yL2xpYmdwZy1lcnJvcl8xLjI2LmJiCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotU1VNTUFSWSA9ICJTbWFsbCBsaWJyYXJ5IHRoYXQgZGVmaW5lcyBjb21tb24gZXJyb3IgdmFsdWVzIGZvciBhbGwgR251UEcgY29tcG9uZW50cyIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnL3JlbGF0ZWRfc29mdHdhcmUvbGliZ3BnLWVycm9yLyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmcxMGNvZGUuY29tL2dudXBnL2luZGV4IgotCi1MSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZ3BnLWVycm9yLmguaW47ZW5kbGluZT0yMzttZDU9NjRhZjk4NDZiYWFmODUyNzkzZmQzYTVhZjM5M2FjYmYgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2luaXQuYztlbmRsaW5lPTIwO21kNT04NzJiMjM4OWZlOWJhZTdmZmI4MGQyYjkxMjI1YWZiYyIKLQotCi1TRUNUSU9OID0gImxpYnMiCi0KLVVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL2dudXBnLm9yZy9kb3dubG9hZC9pbmRleC5odG1sIgotU1JDX1VSSSA9ICIke0dOVVBHX01JUlJPUn0vbGliZ3BnLWVycm9yL2xpYmdwZy1lcnJvci0ke1BWfS50YXIuYnoyIFwKLSAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCBcCi0JICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI5NzQ1NjcwOWRiYmNiYjY5MzU0MzE3ZmZlM2UzNDdjZCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI0YzRiY2JjOTAxMTY5MzJlM2FjZDM3YjM3ODEyZDg2NTNiMWIxODljMTkwNDk4NTg5OGU4NjBhZjgxOGFlZTY5IgotUFIgPSAicjEiCi0KLUJJTkNPTkZJRyA9ICIke2JpbmRpcn0vZ3BnLWVycm9yLWNvbmZpZyIKLQotaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZyBnZXR0ZXh0Ci1DUFBGTEFHUyArPSAiLVAiCi1kb19jb21waWxlX3ByZXBlbmQoKSB7Ci0JVEFSR0VUX0ZJTEU9bGludXgtZ251Ci0JaWYgWyAke1RBUkdFVF9PU30gPSAibWluZ3czMiIgXTsgdGhlbgotCQkjIFRoZXJlIGFyZSBubyBhcmNoIHNwZWNpZmljIHN5c2NmZyBmaWxlcyBmb3IgbWluZ3czMgotCQlUQVJHRVRfRklMRT0KLQllbGlmIFsgJHtUQVJHRVRfT1N9ICE9ICJsaW51eCIgXTsgdGhlbgotCQlUQVJHRVRfRklMRT0ke1RBUkdFVF9PU30KLQlmaQotCi0JY2FzZSAke1RBUkdFVF9BUkNIfSBpbgotCSAgYWFyY2g2NF9iZSkgVFVQTEU9YWFyY2g2NC11bmtub3duLWxpbnV4LWdudSA7OwotCSAgYXJtKQkgICAgICBUVVBMRT1hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpIDs7Ci0JICBhcm1lYikgICAgICBUVVBMRT1hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpIDs7Ci0JICBpNTg2fGk2ODYpICBUVVBMRT1pNjg2LXBjLWxpbnV4LWdudSA7OwotCSAgbWlwczY0KikgICAgVFVQTEU9bWlwczY0ZWwtdW5rbm93bi1saW51eC1nbnVhYmk2NCA7OwotCSAgbWlwcyplbCkgICAgVFVQTEU9bWlwc2VsLXVua25vd24tbGludXgtZ251IDs7Ci0JICBtaXBzKikgICAgICBUVVBMRT1taXBzLXVua25vd24tbGludXgtZ251IDs7Ci0JICB4ODZfNjQpICAgICBUVVBMRT14ODZfNjQtcGMtbGludXgtZ251IDs7Ci0JICAqKSAgICAgICAgICBUVVBMRT0ke1RBUkdFVF9BUkNIfS11bmtub3duLWxpbnV4LWdudSA7OyAKLQllc2FjCi0KLQlpZiBbIC1uICIkVEFSR0VUX0ZJTEUiIF07IHRoZW4KLQkJY3AgJHtTfS9zcmMvc3lzY2ZnL2xvY2stb2JqLXB1Yi4kVFVQTEUuaCBcCi0JCQkke1N9L3NyYy9zeXNjZmcvbG9jay1vYmotcHViLiRUQVJHRVRfRklMRS5oCi0JZmkKLX0KLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0JIyB3ZSBkb24ndCBoYXZlIGNvbW1vbiBsaXNwIGluIE9FCi0Jcm0gLXJmICIke0R9JHtkYXRhZGlyfS9jb21tb24tbGlzcC8iCi19Ci0KLUZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L2dwZy1lcnJvciIKLUZJTEVTXyR7UE59LWRvYyArPSAiJHtkYXRhZGlyfS9saWJncGctZXJyb3IvZXJyb3JyZWYudHh0IgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ3BnLWVycm9yL2xpYmdwZy1lcnJvcl8xLjI3LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3JfMS4yNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmUyZDUwCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3JfMS4yNy5iYgpAQCAtMCwwICsxLDYxIEBACitTVU1NQVJZID0gIlNtYWxsIGxpYnJhcnkgdGhhdCBkZWZpbmVzIGNvbW1vbiBlcnJvciB2YWx1ZXMgZm9yIGFsbCBHbnVQRyBjb21wb25lbnRzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnVwZy5vcmcvcmVsYXRlZF9zb2Z0d2FyZS9saWJncGctZXJyb3IvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZzEwY29kZS5jb20vZ251cGcvaW5kZXgiCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9ncGctZXJyb3IuaC5pbjtlbmRsaW5lPTIzO21kNT1iZWFlMWU0NGQ4ZDVjMjY1ZDE5NDc2MDI3NjAzM2E3YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvaW5pdC5jO2VuZGxpbmU9MjA7bWQ1PTg3MmIyMzg5ZmU5YmFlN2ZmYjgwZDJiOTEyMjVhZmJjIgorCisKK1NFQ1RJT04gPSAibGlicyIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vZ251cGcub3JnL2Rvd25sb2FkL2luZGV4Lmh0bWwiCitTUkNfVVJJID0gIiR7R05VUEdfTUlSUk9SfS9saWJncGctZXJyb3IvbGliZ3BnLWVycm9yLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIFwKKwkgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjUyMTdlZjNlNzZhNzI3NWEyYTNiNTY5YTEyZGRjOTg5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjRmOTNhYWM2ZmVjYjdkYTJiOTI4NzFiYjllZTMzMDMyYmU2YTg3YjE3NGY1NGFiZjhkZGYwOTExYTIyZDI5ZDIiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vZ3BnLWVycm9yLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZyBnZXR0ZXh0CitDUFBGTEFHUyArPSAiLVAiCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJVEFSR0VUX0ZJTEU9bGludXgtZ251CisJaWYgWyAke1RBUkdFVF9PU30gPSAibWluZ3czMiIgXTsgdGhlbgorCQkjIFRoZXJlIGFyZSBubyBhcmNoIHNwZWNpZmljIHN5c2NmZyBmaWxlcyBmb3IgbWluZ3czMgorCQlUQVJHRVRfRklMRT0KKwllbGlmIFsgJHtUQVJHRVRfT1N9ICE9ICJsaW51eCIgXTsgdGhlbgorCQlUQVJHRVRfRklMRT0ke1RBUkdFVF9PU30KKwlmaQorCisJY2FzZSAke1RBUkdFVF9BUkNIfSBpbgorCSAgYWFyY2g2NF9iZSkgVFVQTEU9YWFyY2g2NC11bmtub3duLWxpbnV4LWdudSA7OworCSAgYXJtKQkgICAgICBUVVBMRT1hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpIDs7CisJICBhcm1lYikgICAgICBUVVBMRT1hcm0tdW5rbm93bi1saW51eC1nbnVlYWJpIDs7CisJICBpNTg2fGk2ODYpICBUVVBMRT1pNjg2LXBjLWxpbnV4LWdudSA7OworCSAgbWlwczY0KikgICAgVFVQTEU9bWlwczY0ZWwtdW5rbm93bi1saW51eC1nbnVhYmk2NCA7OworCSAgbWlwcyplbCkgICAgVFVQTEU9bWlwc2VsLXVua25vd24tbGludXgtZ251IDs7CisJICBtaXBzKikgICAgICBUVVBMRT1taXBzLXVua25vd24tbGludXgtZ251IDs7CisJICB4ODZfNjQpICAgICBUVVBMRT14ODZfNjQtcGMtbGludXgtZ251IDs7CisJICAqKSAgICAgICAgICBUVVBMRT0ke1RBUkdFVF9BUkNIfS11bmtub3duLWxpbnV4LWdudSA7OyAKKwllc2FjCisKKwlpZiBbIC1uICIkVEFSR0VUX0ZJTEUiIF07IHRoZW4KKwkJY3AgJHtTfS9zcmMvc3lzY2ZnL2xvY2stb2JqLXB1Yi4kVFVQTEUuaCBcCisJCQkke1N9L3NyYy9zeXNjZmcvbG9jay1vYmotcHViLiRUQVJHRVRfRklMRS5oCisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyB3ZSBkb24ndCBoYXZlIGNvbW1vbiBsaXNwIGluIE9FCisJcm0gLXJmICIke0R9JHtkYXRhZGlyfS9jb21tb24tbGlzcC8iCit9CisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L2dwZy1lcnJvciIKK0ZJTEVTXyR7UE59LWRvYyArPSAiJHtkYXRhZGlyfS9saWJncGctZXJyb3IvZXJyb3JyZWYudHh0IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xNC9hZGQtcmVsb2NhdGFibGUtbW9kdWxlLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTQvYWRkLXJlbG9jYXRhYmxlLW1vZHVsZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFmMzc3Yi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xNC9hZGQtcmVsb2NhdGFibGUtbW9kdWxlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTAwOCArMCwwIEBACi1UaGlzIHBhdGNoIGlzIG5lZWRlZCB0byBzb2x2ZSBpc3N1ZXMgbGlrZQotfCBpY29udi5vOiBJbiBmdW5jdGlvbiBgbWFpbic6Ci18IC9ob21lL2phbWVzL3N0dWZmL2JlYWdsZS90bXAtZWdsaWJjL3dvcmsvYXJtdjdhLXZmcC1uZW9uLW9lLWxpbnV4LWdudWVhYmkvbGliaWNvbnYtMS4xNC1yMC9saWJpY29udi0xLjE0L3NyYy8uL2ljb252LmM6ODYxOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGByZWxvY2F0ZScKLXwgLi4vc3JjbGliL2xpYmljcnQuYShwcm9ncmVsb2Mubyk6IEluIGZ1bmN0aW9uIGBwcmVwYXJlX3JlbG9jYXRlJzoKLXwgL2hvbWUvamFtZXMvc3R1ZmYvYmVhZ2xlL3RtcC1lZ2xpYmMvd29yay9hcm12N2EtdmZwLW5lb24tb2UtbGludXgtZ251ZWFiaS9saWJpY29udi0xLjE0LXIwL2xpYmljb252LTEuMTQvc3JjbGliL3Byb2dyZWxvYy5jOjI5NzogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgY29tcHV0ZV9jdXJyX3ByZWZpeCcKLXwgL2hvbWUvamFtZXMvc3R1ZmYvYmVhZ2xlL3RtcC1lZ2xpYmMvd29yay9hcm12N2EtdmZwLW5lb24tb2UtbGludXgtZ251ZWFiaS9saWJpY29udi0xLjE0LXIwL2xpYmljb252LTEuMTQvc3JjbGliL3Byb2dyZWxvYy5jOjMwMjogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgc2V0X3JlbG9jYXRpb25fcHJlZml4JwotfCBjb2xsZWN0MjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cwotfCBtYWtlWzFdOiAqKiogW2luc3RhbGxdIEVycm9yIDEKLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBjb25maWcgc3BlY2lmaWNdCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLWRpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvYXJnLW5vbm51bGwuaCBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9hcmctbm9ubnVsbC5oCi0tLS0gbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9hcmctbm9ubnVsbC5oCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCi0rKysgbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvYXJnLW5vbm51bGwuaAkyMDEyLTAxLTA4IDAyOjA3OjM5LjkzMDQ4NDQzOCAtMDgwMAotQEAgLTAsMCArMSwyNiBAQAotKy8qIEEgQyBtYWNybyBmb3IgZGVjbGFyaW5nIHRoYXQgc3BlY2lmaWMgYXJndW1lbnRzIG11c3Qgbm90IGJlIE5VTEwuCi0rICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0rICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSsgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAotKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0rICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0rICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0rICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotKwotKy8qIF9HTF9BUkdfTk9OTlVMTCgobiwuLi4sbSkpIHRlbGxzIHRoZSBjb21waWxlciBhbmQgc3RhdGljIGFuYWx5emVyIHRvb2xzCi0rICAgdGhhdCB0aGUgdmFsdWVzIHBhc3NlZCBhcyBhcmd1bWVudHMgbiwgLi4uLCBtIG11c3QgYmUgbm9uLU5VTEwgcG9pbnRlcnMuCi0rICAgbiA9IDEgc3RhbmRzIGZvciB0aGUgZmlyc3QgYXJndW1lbnQsIG4gPSAyIGZvciB0aGUgc2Vjb25kIGFyZ3VtZW50IGV0Yy4gICovCi0rI2lmbmRlZiBfR0xfQVJHX05PTk5VTEwKLSsjIGlmIChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID49IDMpIHx8IF9fR05VQ19fID4gMwotKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKSBfX2F0dHJpYnV0ZV9fICgoX19ub25udWxsX18gcGFyYW1zKSkKLSsjIGVsc2UKLSsjICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykKLSsjIGVuZGlmCi0rI2VuZGlmCi1kaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L2MrK2RlZnMuaCBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9jKytkZWZzLmgKLS0tLSBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L2MrK2RlZnMuaAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAotKysrIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L2MrK2RlZnMuaAkyMDEyLTAxLTA4IDAyOjA3OjM5Ljk0MjQ4NDQzOCAtMDgwMAotQEAgLTAsMCArMSwyNzEgQEAKLSsvKiBDKysgY29tcGF0aWJsZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBtYWNyb3MuCi0rICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0rICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSsgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAotKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0rICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0rICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0rICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotKwotKyNpZm5kZWYgX0dMX0NYWERFRlNfSAotKyNkZWZpbmUgX0dMX0NYWERFRlNfSAotKwotKy8qIFRoZSB0aHJlZSBtb3N0IGZyZXF1ZW50IHVzZSBjYXNlcyBvZiB0aGVzZSBtYWNyb3MgYXJlOgotKwotKyAgICogRm9yIHByb3ZpZGluZyBhIHN1YnN0aXR1dGUgZm9yIGEgZnVuY3Rpb24gdGhhdCBpcyBtaXNzaW5nIG9uIHNvbWUKLSsgICAgIHBsYXRmb3JtcywgYnV0IGlzIGRlY2xhcmVkIGFuZCB3b3JrcyBmaW5lIG9uIHRoZSBwbGF0Zm9ybXMgb24gd2hpY2gKLSsgICAgIGl0IGV4aXN0czoKLSsKLSsgICAgICAgI2lmIEBHTlVMSUJfRk9PQAotKyAgICAgICAjIGlmICFASEFWRV9GT09ACi0rICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKLSsgICAgICAgIyBlbmRpZgotKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7Ci0rICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7Ci0rICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKLSsgICAgICAgLi4uCi0rICAgICAgICNlbmRpZgotKwotKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIGFsbCBwbGF0Zm9ybXMsCi0rICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBwbGF0Zm9ybXM6Ci0rCi0rICAgICAgICNpZiBAR05VTElCX0ZPT0AKLSsgICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACi0rICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCi0rICAgICAgICMgICB1bmRlZiBmb28KLSsgICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbwotKyAgICAgICAjICBlbmRpZgotKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7Ci0rICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKLSsgICAgICAgIyBlbHNlCi0rICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKLSsgICAgICAgIyBlbmRpZgotKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOwotKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCi0rICAgICAgIC4uLgotKyAgICAgICAjZW5kaWYKLSsKLSsgICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBzb21lIHBsYXRmb3JtcwotKyAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgb2YgdGhlbSBhbmQKLSsgICAgIGlzIGFkZGl0aW9uYWxseSBlaXRoZXIgbWlzc2luZyBvciB1bmRlY2xhcmVkIG9uIHNvbWUgb3RoZXIgcGxhdGZvcm1zOgotKwotKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACi0rICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAotKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQotKyAgICAgICAjICAgdW5kZWYgZm9vCi0rICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KLSsgICAgICAgIyAgZW5kaWYKLSsgICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOwotKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7Ci0rICAgICAgICMgZWxzZQotKyAgICAgICAjICBpZiAhQEhBVkVfRk9PQCAgIG9yICAgaWYgIUBIQVZFX0RFQ0xfRk9PQAotKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7Ci0rICAgICAgICMgIGVuZGlmCi0rICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKLSsgICAgICAgIyBlbmRpZgotKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOwotKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCi0rICAgICAgIC4uLgotKyAgICAgICAjZW5kaWYKLSsqLwotKwotKy8qIF9HTF9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKLSsgICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLwotKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCi0rIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybiAiQyIKLSsjZWxzZQotKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4KLSsjZW5kaWYKLSsKLSsvKiBfR0xfRlVOQ0RFQ0xfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKLSsgICBkZWNsYXJlcyBhIHJlcGxhY2VtZW50IGZ1bmN0aW9uLCBuYW1lZCBycGxfZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAotKyAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgotKyAgIEV4YW1wbGU6Ci0rICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7Ci0rICovCi0rI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCi0rICBfR0xfRlVOQ0RFQ0xfUlBMXzEgKHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpCi0rI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMXzEocnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCi0rICBfR0xfRVhURVJOX0MgcmV0dHlwZSBycGxfZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCi0rCi0rLyogX0dMX0ZVTkNERUNMX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7Ci0rICAgZGVjbGFyZXMgdGhlIHN5c3RlbSBmdW5jdGlvbiwgbmFtZWQgZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAotKyAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgotKyAgIEV4YW1wbGU6Ci0rICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7Ci0rICovCi0rI2RlZmluZSBfR0xfRlVOQ0RFQ0xfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCi0rICBfR0xfRVhURVJOX0MgcmV0dHlwZSBmdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKLSsKLSsvKiBfR0xfQ1hYQUxJQVNfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKLSsgICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYwotKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHJwbF9mdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFIGlzIGRlZmluZWQuCi0rICAgRXhhbXBsZToKLSsgICAgIF9HTF9DWFhBTElBU19SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOwotKyAqLwotKyNkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAotKyAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKQotKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQotKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAotKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpycGxfZnVuYzsgICAgICAgICAgXAotKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQotKyNlbHNlCi0rIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCi0rICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15Ci0rI2VuZGlmCi0rCi0rLyogX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKLSsgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKLSsgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBycGxfZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudAotKyAgIGRlY2xhcmF0aW9uLiAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IKLSsgICB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCi0rI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCi0rIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKLSsgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6cnBsX2Z1bmMpOyAgICAgICAgXAotKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15Ci0rI2Vsc2UKLSsjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAotKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQotKyNlbmRpZgotKwotKy8qIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOwotKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCi0rICAgdGhhdCByZWRpcmVjdHMgdG8gdGhlIHN5c3RlbSBwcm92aWRlZCBmdW5jdGlvbiBmdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFCi0rICAgaXMgZGVmaW5lZC4KLSsgICBFeGFtcGxlOgotKyAgICAgX0dMX0NYWEFMSUFTX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7Ci0rICovCi0rI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCi0rICAvKiBJZiB3ZSB3ZXJlIHRvIHdyaXRlCi0rICAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOwotKyAgICAgbGlrZSBhYm92ZSBpbiBfR0xfQ1hYQUxJQVNfUlBMXzEsIHRoZSBjb21waWxlciBjb3VsZCBvcHRpbWl6ZSBjYWxscwotKyAgICAgYmV0dGVyIChyZW1vdmUgYW4gaW5kaXJlY3Rpb24gdGhyb3VnaCBhICdzdGF0aWMnIHBvaW50ZXIgdmFyaWFibGUpLAotKyAgICAgYnV0IHRoZW4gdGhlIF9HTF9DWFhBTElBU1dBUk4gbWFjcm8gYmVsb3cgd291bGQgY2F1c2UgYSB3YXJuaW5nIG5vdCBvbmx5Ci0rICAgICBmb3IgdXNlcyBvZiA6OmZ1bmMgYnV0IGFsc28gZm9yIHVzZXMgb2YgR05VTElCX05BTUVTUEFDRTo6ZnVuYy4gICovCi0rIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAotKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOyAgXAotKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKLSsjZWxzZQotKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKLSsgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKLSsjZW5kaWYKLSsKLSsvKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOwotKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOwotKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGZ1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgZGVjbGFyYXRpb24uCi0rICAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IgdGhhdCB3b3VsZAotKyAgIG90aGVyd2lzZSBvY2N1ci4gICovCi0rI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCi0rIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCi0rICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICBcCi0rICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OmZ1bmMpOyBcCi0rICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15Ci0rI2Vsc2UKLSsjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKLSsgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKLSsjZW5kaWYKLSsKLSsvKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzLCByZXR0eXBlMiwgcGFyYW1ldGVyczIpOwotKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOwotKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGlzIHBpY2tlZCBhbW9uZyBhIHNldCBvZiBvdmVybG9hZGVkIGZ1bmN0aW9ucywKLSsgICBuYW1lbHkgdGhlIG9uZSB3aXRoIHJldHR5cGUyIGFuZCBwYXJhbWV0ZXJzMi4gIFR3byBjb25zZWN1dGl2ZSBjYXN0cwotKyAgIGFyZSB1c2VkIHRvIHNpbGVuY2UgdGhlICJjYW5ub3QgZmluZCBhIG1hdGNoIiBhbmQgImludmFsaWQgY29udmVyc2lvbiIKLSsgICBlcnJvcnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLwotKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQotKyAgLyogVGhlIG91dGVyIGNhc3QgbXVzdCBiZSBhIHJlaW50ZXJwcmV0X2Nhc3QuCi0rICAgICBUaGUgaW5uZXIgY2FzdDogV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNldCBvZiBvdmVybG9hZGVkCi0rICAgICBmdW5jdGlvbnMsIGl0IHdvcmtzIGFzIGEgc3RhdGljX2Nhc3Q8PiwgY2hvb3NpbmcgdGhlIGRlc2lnbmF0ZWQgdmFyaWFudC4KLSsgICAgIFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzaW5nbGUgdmFyaWFudCwgaXQgd29ya3MgYXMgYQotKyAgICAgcmVpbnRlcnByZXRfY2FzdDw+LiBUaGUgcGFyZW50aGVzaXplZCBjYXN0IHN5bnRheCB3b3JrcyBib3RoIHdheXMuICAqLwotKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKLSsgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgIChyZXR0eXBlMigqKXBhcmFtZXRlcnMyKSg6OmZ1bmMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKLSsjZWxzZQotKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKLSsgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKLSsjZW5kaWYKLSsKLSsvKiBfR0xfQ1hYQUxJQVNXQVJOIChmdW5jKTsKLSsgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiA6OmZ1bmMgaXMgdXNlZCBidXQgbm90IHdoZW4KLSsgICBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICBmdW5jIG11c3QgYmUgZGVmaW5lZCB3aXRob3V0IG92ZXJsb2FkZWQKLSsgICB2YXJpYW50cy4gICovCi0rI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCi0rIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCi0rICAgX0dMX0NYWEFMSUFTV0FSTl8xIChmdW5jLCBHTlVMSUJfTkFNRVNQQUNFKQotKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMShmdW5jLG5hbWVzcGFjZSkgXAotKyAgIF9HTF9DWFhBTElBU1dBUk5fMiAoZnVuYywgbmFtZXNwYWNlKQotKy8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAotKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLwotKyMgaWYgIV9fT1BUSU1JWkVfXwotKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKLSsgICAgX0dMX1dBUk5fT05fVVNFIChmdW5jLCBcCi0rICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAotKyAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCi0rIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORwotKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKLSsgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCi0rIyBlbHNlCi0rIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAotKyAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKLSsjIGVuZGlmCi0rI2Vsc2UKLSsjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKLSsgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKLSsjZW5kaWYKLSsKLSsvKiBfR0xfQ1hYQUxJQVNXQVJOMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7Ci0rICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gdGhlIGdpdmVuIG92ZXJsb2FkZWQgdmFyaWFudCBvZiA6OmZ1bmMKLSsgICBpcyB1c2VkIGJ1dCBub3Qgd2hlbiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICAqLwotKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQotKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCi0rICAgX0dMX0NYWEFMSUFTV0FSTjFfMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAotKyAgICAgICAgICAgICAgICAgICAgICAgIEdOVUxJQl9OQU1FU1BBQ0UpCi0rIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKLSsgICBfR0xfQ1hYQUxJQVNXQVJOMV8yIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBuYW1lc3BhY2UpCi0rLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCi0rICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCi0rIyBpZiAhX19PUFRJTUlaRV9fCi0rIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCi0rICAgIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAotKyAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQotKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKLSsjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKLSsgICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCi0rIyBlbHNlCi0rIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCi0rICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQotKyMgZW5kaWYKLSsjZWxzZQotKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCi0rICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15Ci0rI2VuZGlmCi0rCi0rI2VuZGlmIC8qIF9HTF9DWFhERUZTX0ggKi8KLWRpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51bGwuaAotLS0tIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oCTIwMTEtMDgtMDcgMDY6MjI6MDcuMDAwMDAwMDAwIC0wNzAwCi0rKysgbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCi1AQCAtMSwyNiArMCwwIEBACi0tLyogQSBDIG1hY3JvIGZvciBkZWNsYXJpbmcgdGhhdCBzcGVjaWZpYyBhcmd1bWVudHMgbXVzdCBub3QgYmUgTlVMTC4KLS0gICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLS0KLS0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCi0tICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLS0gICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotLQotLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0tICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLS0gICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0tCi0tICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLS0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0tCi0tLyogX0dMX0FSR19OT05OVUxMKChuLC4uLixtKSkgdGVsbHMgdGhlIGNvbXBpbGVyIGFuZCBzdGF0aWMgYW5hbHl6ZXIgdG9vbHMKLS0gICB0aGF0IHRoZSB2YWx1ZXMgcGFzc2VkIGFzIGFyZ3VtZW50cyBuLCAuLi4sIG0gbXVzdCBiZSBub24tTlVMTCBwb2ludGVycy4KLS0gICBuID0gMSBzdGFuZHMgZm9yIHRoZSBmaXJzdCBhcmd1bWVudCwgbiA9IDIgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgZXRjLiAgKi8KLS0jaWZuZGVmIF9HTF9BUkdfTk9OTlVMTAotLSMgaWYgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gMykgfHwgX19HTlVDX18gPiAzCi0tIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpIF9fYXR0cmlidXRlX18gKChfX25vbm51bGxfXyBwYXJhbXMpKQotLSMgZWxzZQotLSMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKQotLSMgZW5kaWYKLS0jZW5kaWYKLWRpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmggbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmgKLS0tLSBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L3NuaXBwZXQvYysrZGVmcy5oCTIwMTEtMDgtMDcgMDY6MjI6MDcuMDAwMDAwMDAwIC0wNzAwCi0rKysgbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmgJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKLUBAIC0xLDI3MSArMCwwIEBACi0tLyogQysrIGNvbXBhdGlibGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gbWFjcm9zLgotLSAgIENvcHlyaWdodCAoQykgMjAxMC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotLQotLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0tICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKLS0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotLSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0tCi0tICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0tICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLS0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotLSAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLS0KLS0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLS0KLS0jaWZuZGVmIF9HTF9DWFhERUZTX0gKLS0jZGVmaW5lIF9HTF9DWFhERUZTX0gKLS0KLS0vKiBUaGUgdGhyZWUgbW9zdCBmcmVxdWVudCB1c2UgY2FzZXMgb2YgdGhlc2UgbWFjcm9zIGFyZToKLS0KLS0gICAqIEZvciBwcm92aWRpbmcgYSBzdWJzdGl0dXRlIGZvciBhIGZ1bmN0aW9uIHRoYXQgaXMgbWlzc2luZyBvbiBzb21lCi0tICAgICBwbGF0Zm9ybXMsIGJ1dCBpcyBkZWNsYXJlZCBhbmQgd29ya3MgZmluZSBvbiB0aGUgcGxhdGZvcm1zIG9uIHdoaWNoCi0tICAgICBpdCBleGlzdHM6Ci0tCi0tICAgICAgICNpZiBAR05VTElCX0ZPT0AKLS0gICAgICAgIyBpZiAhQEhBVkVfRk9PQAotLSAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7Ci0tICAgICAgICMgZW5kaWYKLS0gICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOwotLSAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOwotLSAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCi0tICAgICAgIC4uLgotLSAgICAgICAjZW5kaWYKLS0KLS0gICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBhbGwgcGxhdGZvcm1zLAotLSAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgcGxhdGZvcm1zOgotLQotLSAgICAgICAjaWYgQEdOVUxJQl9GT09ACi0tICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAotLSAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQotLSAgICAgICAjICAgdW5kZWYgZm9vCi0tICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KLS0gICAgICAgIyAgZW5kaWYKLS0gICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOwotLSAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7Ci0tICAgICAgICMgZWxzZQotLSAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7Ci0tICAgICAgICMgZW5kaWYKLS0gICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKLS0gICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSwotLSAgICAgICAuLi4KLS0gICAgICAgI2VuZGlmCi0tCi0tICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gc29tZSBwbGF0Zm9ybXMKLS0gICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIG9mIHRoZW0gYW5kCi0tICAgICBpcyBhZGRpdGlvbmFsbHkgZWl0aGVyIG1pc3Npbmcgb3IgdW5kZWNsYXJlZCBvbiBzb21lIG90aGVyIHBsYXRmb3JtczoKLS0KLS0gICAgICAgI2lmIEBHTlVMSUJfRk9PQAotLSAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKLS0gICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKLS0gICAgICAgIyAgIHVuZGVmIGZvbwotLSAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCi0tICAgICAgICMgIGVuZGlmCi0tICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKLS0gICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOwotLSAgICAgICAjIGVsc2UKLS0gICAgICAgIyAgaWYgIUBIQVZFX0ZPT0AgICBvciAgIGlmICFASEFWRV9ERUNMX0ZPT0AKLS0gICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOwotLSAgICAgICAjICBlbmRpZgotLSAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7Ci0tICAgICAgICMgZW5kaWYKLS0gICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKLS0gICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSwotLSAgICAgICAuLi4KLS0gICAgICAgI2VuZGlmCi0tKi8KLS0KLS0vKiBfR0xfRVhURVJOX0MgZGVjbGFyYXRpb247Ci0tICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KLS0jaWYgZGVmaW5lZCBfX2NwbHVzcGx1cwotLSMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4gIkMiCi0tI2Vsc2UKLS0jIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuCi0tI2VuZGlmCi0tCi0tLyogX0dMX0ZVTkNERUNMX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7Ci0tICAgZGVjbGFyZXMgYSByZXBsYWNlbWVudCBmdW5jdGlvbiwgbmFtZWQgcnBsX2Z1bmMsIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwKLS0gICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KLS0gICBFeGFtcGxlOgotLSAgICAgX0dMX0ZVTkNERUNMX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOwotLSAqLwotLSNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAotLSAgX0dMX0ZVTkNERUNMX1JQTF8xIChycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKQotLSNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTF8xKHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAotLSAgX0dMX0VYVEVSTl9DIHJldHR5cGUgcnBsX2Z1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcwotLQotLS8qIF9HTF9GVU5DREVDTF9TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOwotLSAgIGRlY2xhcmVzIHRoZSBzeXN0ZW0gZnVuY3Rpb24sIG5hbWVkIGZ1bmMsIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwKLS0gICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KLS0gICBFeGFtcGxlOgotLSAgICAgX0dMX0ZVTkNERUNMX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOwotLSAqLwotLSNkZWZpbmUgX0dMX0ZVTkNERUNMX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAotLSAgX0dMX0VYVEVSTl9DIHJldHR5cGUgZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCi0tCi0tLyogX0dMX0NYWEFMSUFTX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7Ci0tICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKLS0gICB0aGF0IHJlZGlyZWN0cyB0byBycGxfZnVuYywgaWYgR05VTElCX05BTUVTUEFDRSBpcyBkZWZpbmVkLgotLSAgIEV4YW1wbGU6Ci0tICAgICBfR0xfQ1hYQUxJQVNfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKLS0gKi8KLS0jZGVmaW5lIF9HTF9DWFhBTElBU19SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKLS0gIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycykKLS0jaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKLS0jIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKLS0gICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLS0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLS0gICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6cnBsX2Z1bmM7ICAgICAgICAgIFwKLS0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLS0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKLS0jZWxzZQotLSMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAotLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQotLSNlbmRpZgotLQotLS8qIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7Ci0tICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7Ci0tICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gcnBsX2Z1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQKLS0gICBkZWNsYXJhdGlvbi4gIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yCi0tICAgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLwotLSNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQotLSMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCi0tICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLS0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotLSAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0tICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OnJwbF9mdW5jKTsgICAgICAgIFwKLS0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQotLSNlbHNlCi0tIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKLS0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKLS0jZW5kaWYKLS0KLS0vKiBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKLS0gICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYwotLSAgIHRoYXQgcmVkaXJlY3RzIHRvIHRoZSBzeXN0ZW0gcHJvdmlkZWQgZnVuY3Rpb24gZnVuYywgaWYgR05VTElCX05BTUVTUEFDRQotLSAgIGlzIGRlZmluZWQuCi0tICAgRXhhbXBsZToKLS0gICAgIF9HTF9DWFhBTElBU19TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOwotLSAqLwotLSNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQotLSAgLyogSWYgd2Ugd2VyZSB0byB3cml0ZQotLSAgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsKLS0gICAgIGxpa2UgYWJvdmUgaW4gX0dMX0NYWEFMSUFTX1JQTF8xLCB0aGUgY29tcGlsZXIgY291bGQgb3B0aW1pemUgY2FsbHMKLS0gICAgIGJldHRlciAocmVtb3ZlIGFuIGluZGlyZWN0aW9uIHRocm91Z2ggYSAnc3RhdGljJyBwb2ludGVyIHZhcmlhYmxlKSwKLS0gICAgIGJ1dCB0aGVuIHRoZSBfR0xfQ1hYQUxJQVNXQVJOIG1hY3JvIGJlbG93IHdvdWxkIGNhdXNlIGEgd2FybmluZyBub3Qgb25seQotLSAgICAgZm9yIHVzZXMgb2YgOjpmdW5jIGJ1dCBhbHNvIGZvciB1c2VzIG9mIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMuICAqLwotLSMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKLS0gICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICBcCi0tICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotLSAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsgIFwKLS0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0tICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15Ci0tI2Vsc2UKLS0jIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCi0tICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15Ci0tI2VuZGlmCi0tCi0tLyogX0dMX0NYWEFMSUFTX1NZU19DQVNUIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKLS0gICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKLS0gICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBmdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGRlY2xhcmF0aW9uLgotLSAgIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yIHRoYXQgd291bGQKLS0gICBvdGhlcndpc2Ugb2NjdXIuICAqLwotLSNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQotLSMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAotLSAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotLSAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgXAotLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpmdW5jKTsgXAotLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQotLSNlbHNlCi0tIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCi0tICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15Ci0tI2VuZGlmCi0tCi0tLyogX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycywgcmV0dHlwZTIsIHBhcmFtZXRlcnMyKTsKLS0gICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKLS0gICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBpcyBwaWNrZWQgYW1vbmcgYSBzZXQgb2Ygb3ZlcmxvYWRlZCBmdW5jdGlvbnMsCi0tICAgbmFtZWx5IHRoZSBvbmUgd2l0aCByZXR0eXBlMiBhbmQgcGFyYW1ldGVyczIuICBUd28gY29uc2VjdXRpdmUgY2FzdHMKLS0gICBhcmUgdXNlZCB0byBzaWxlbmNlIHRoZSAiY2Fubm90IGZpbmQgYSBtYXRjaCIgYW5kICJpbnZhbGlkIGNvbnZlcnNpb24iCi0tICAgZXJyb3JzIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KLS0jaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKLS0gIC8qIFRoZSBvdXRlciBjYXN0IG11c3QgYmUgYSByZWludGVycHJldF9jYXN0LgotLSAgICAgVGhlIGlubmVyIGNhc3Q6IFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzZXQgb2Ygb3ZlcmxvYWRlZAotLSAgICAgZnVuY3Rpb25zLCBpdCB3b3JrcyBhcyBhIHN0YXRpY19jYXN0PD4sIGNob29zaW5nIHRoZSBkZXNpZ25hdGVkIHZhcmlhbnQuCi0tICAgICBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2luZ2xlIHZhcmlhbnQsIGl0IHdvcmtzIGFzIGEKLS0gICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Pi4gVGhlIHBhcmVudGhlc2l6ZWQgY2FzdCBzeW50YXggd29ya3MgYm90aCB3YXlzLiAgKi8KLS0jIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzLHJldHR5cGUyLHBhcmFtZXRlcnMyKSBcCi0tICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLS0gICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0tICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotLSAgICAgICAgICAocmV0dHlwZTIoKilwYXJhbWV0ZXJzMikoOjpmdW5jKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLS0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0tICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15Ci0tI2Vsc2UKLS0jIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzLHJldHR5cGUyLHBhcmFtZXRlcnMyKSBcCi0tICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15Ci0tI2VuZGlmCi0tCi0tLyogX0dMX0NYWEFMSUFTV0FSTiAoZnVuYyk7Ci0tICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gOjpmdW5jIGlzIHVzZWQgYnV0IG5vdCB3aGVuCi0tICAgR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgZnVuYyBtdXN0IGJlIGRlZmluZWQgd2l0aG91dCBvdmVybG9hZGVkCi0tICAgdmFyaWFudHMuICAqLwotLSNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQotLSMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAotLSAgIF9HTF9DWFhBTElBU1dBUk5fMSAoZnVuYywgR05VTElCX05BTUVTUEFDRSkKLS0jIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzEoZnVuYyxuYW1lc3BhY2UpIFwKLS0gICBfR0xfQ1hYQUxJQVNXQVJOXzIgKGZ1bmMsIG5hbWVzcGFjZSkKLS0vKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKLS0gICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KLS0jIGlmICFfX09QVElNSVpFX18KLS0jICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCi0tICAgIF9HTF9XQVJOX09OX1VTRSAoZnVuYywgXAotLSAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKLS0gICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQotLSMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKLS0jICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCi0tICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYwotLSMgZWxzZQotLSMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKLS0gICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15Ci0tIyBlbmRpZgotLSNlbHNlCi0tIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCi0tICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15Ci0tI2VuZGlmCi0tCi0tLyogX0dMX0NYWEFMSUFTV0FSTjEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOwotLSAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIHRoZSBnaXZlbiBvdmVybG9hZGVkIHZhcmlhbnQgb2YgOjpmdW5jCi0tICAgaXMgdXNlZCBidXQgbm90IHdoZW4gR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgKi8KLS0jaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKLS0jIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAotLSAgIF9HTF9DWFhBTElBU1dBUk4xXzEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKLS0gICAgICAgICAgICAgICAgICAgICAgICBHTlVMSUJfTkFNRVNQQUNFKQotLSMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCi0tICAgX0dMX0NYWEFMSUFTV0FSTjFfMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgbmFtZXNwYWNlKQotLS8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAotLSAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLwotLSMgaWYgIV9fT1BUSU1JWkVfXwotLSMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAotLSAgICBfR0xfV0FSTl9PTl9VU0VfQ1hYIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCi0tICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKLS0jIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCi0tIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCi0tICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYwotLSMgZWxzZQotLSMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAotLSAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKLS0jIGVuZGlmCi0tI2Vsc2UKLS0jIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAotLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQotLSNlbmRpZgotLQotLSNlbmRpZiAvKiBfR0xfQ1hYREVGU19IICovCi1kaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L3NuaXBwZXQvX05vcmV0dXJuLmggbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvc25pcHBldC9fTm9yZXR1cm4uaAotLS0tIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvc25pcHBldC9fTm9yZXR1cm4uaAkyMDExLTA4LTA3IDA2OjIyOjA3LjAwMDAwMDAwMCAtMDcwMAotKysrIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L3NuaXBwZXQvX05vcmV0dXJuLmgJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKLUBAIC0xLDEwICswLDAgQEAKLS0jaWZuZGVmIF9Ob3JldHVybgotLSMgaWYgKDMgPD0gX19HTlVDX18gfHwgKF9fR05VQ19fID09IDIgJiYgOCA8PSBfX0dOVUNfTUlOT1JfXykgXAotLSAgICAgIHx8IDB4NTExMCA8PSBfX1NVTlBST19DKQotLSMgIGRlZmluZSBfTm9yZXR1cm4gX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpCi0tIyBlbGlmIDEyMDAgPD0gX01TQ19WRVIKLS0jICBkZWZpbmUgX05vcmV0dXJuIF9fZGVjbHNwZWMgKG5vcmV0dXJuKQotLSMgZWxzZQotLSMgIGRlZmluZSBfTm9yZXR1cm4KLS0jIGVuZGlmCi0tI2VuZGlmCi1kaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L3NuaXBwZXQvd2Fybi1vbi11c2UuaCBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9zbmlwcGV0L3dhcm4tb24tdXNlLmgKLS0tLSBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L3NuaXBwZXQvd2Fybi1vbi11c2UuaAkyMDExLTA4LTA3IDA2OjIyOjA3LjAwMDAwMDAwMCAtMDcwMAotKysrIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L3NuaXBwZXQvd2Fybi1vbi11c2UuaAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAotQEAgLTEsMTA5ICswLDAgQEAKLS0vKiBBIEMgbWFjcm8gZm9yIGVtaXR0aW5nIHdhcm5pbmdzIGlmIGEgZnVuY3Rpb24gaXMgdXNlZC4KLS0gICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLS0KLS0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCi0tICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLS0gICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotLQotLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0tICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLS0gICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0tCi0tICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLS0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0tCi0tLyogX0dMX1dBUk5fT05fVVNFIChmdW5jdGlvbiwgImxpdGVyYWwgc3RyaW5nIikgaXNzdWVzIGEgZGVjbGFyYXRpb24KLS0gICBmb3IgRlVOQ1RJT04gd2hpY2ggd2lsbCB0aGVuIHRyaWdnZXIgYSBjb21waWxlciB3YXJuaW5nIGNvbnRhaW5pbmcKLS0gICB0aGUgdGV4dCBvZiAibGl0ZXJhbCBzdHJpbmciIGFueXdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkLCBpZgotLSAgIHN1cHBvcnRlZCBieSB0aGUgY29tcGlsZXIuICBJZiB0aGUgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzCi0tICAgZmVhdHVyZSwgdGhlIG1hY3JvIGV4cGFuZHMgdG8gYW4gdW51c2VkIGV4dGVybiBkZWNsYXJhdGlvbi4KLS0KLS0gICBUaGlzIG1hY3JvIGlzIHVzZWZ1bCBmb3IgbWFya2luZyBhIGZ1bmN0aW9uIGFzIGEgcG90ZW50aWFsCi0tICAgcG9ydGFiaWxpdHkgdHJhcCwgd2l0aCB0aGUgaW50ZW50IHRoYXQgImxpdGVyYWwgc3RyaW5nIiBpbmNsdWRlCi0tICAgaW5zdHJ1Y3Rpb25zIG9uIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSB1c2VkCi0tICAgaW5zdGVhZC4gIEhvd2V2ZXIsIG9uZSBvZiB0aGUgcmVhc29ucyB0aGF0IGEgZnVuY3Rpb24gaXMgYQotLSAgIHBvcnRhYmlsaXR5IHRyYXAgaXMgaWYgaXQgaGFzIHRoZSB3cm9uZyBzaWduYXR1cmUuICBEZWNsYXJpbmcKLS0gICBGVU5DVElPTiB3aXRoIGEgZGlmZmVyZW50IHNpZ25hdHVyZSBpbiBDIGlzIGEgY29tcGlsYXRpb24gZXJyb3IsIHNvCi0tICAgdGhpcyBtYWNybyBtdXN0IHVzZSB0aGUgc2FtZSB0eXBlIGFzIGFueSBleGlzdGluZyBkZWNsYXJhdGlvbiBzbwotLSAgIHRoYXQgcHJvZ3JhbXMgdGhhdCBhdm9pZCB0aGUgcHJvYmxlbWF0aWMgRlVOQ1RJT04gZG8gbm90IGZhaWwgdG8KLS0gICBjb21waWxlIG1lcmVseSBiZWNhdXNlIHRoZXkgaW5jbHVkZWQgYSBoZWFkZXIgdGhhdCBwb2lzb25lZCB0aGUKLS0gICBmdW5jdGlvbi4gIEJ1dCB0aGlzIGltcGxpZXMgdGhhdCBfR0xfV0FSTl9PTl9VU0UgaXMgb25seSBzYWZlIHRvCi0tICAgdXNlIGlmIEZVTkNUSU9OIGlzIGtub3duIHRvIGFscmVhZHkgaGF2ZSBhIGRlY2xhcmF0aW9uLiAgVXNlIG9mCi0tICAgdGhpcyBtYWNybyBpbXBsaWVzIHRoYXQgdGhlcmUgbXVzdCBub3QgYmUgYW55IG90aGVyIG1hY3JvIGhpZGluZwotLSAgIHRoZSBkZWNsYXJhdGlvbiBvZiBGVU5DVElPTjsgYnV0IHVuZGVmaW5pbmcgRlVOQ1RJT04gZmlyc3QgaXMgcGFydAotLSAgIG9mIHRoZSBwb2lzb25pbmcgcHJvY2VzcyBhbnl3YXkgKGFsdGhvdWdoIGZvciBzeW1ib2xzIHRoYXQgYXJlCi0tICAgcHJvdmlkZWQgb25seSB2aWEgYSBtYWNybywgdGhlIHJlc3VsdCBpcyBhIGNvbXBpbGF0aW9uIGVycm9yIHJhdGhlcgotLSAgIHRoYW4gYSB3YXJuaW5nIGNvbnRhaW5pbmcgImxpdGVyYWwgc3RyaW5nIikuICBBbHNvIG5vdGUgdGhhdCBpbgotLSAgIEMrKywgaXQgaXMgb25seSBzYWZlIHRvIHVzZSBpZiBGVU5DVElPTiBoYXMgbm8gb3ZlcmxvYWRzLgotLQotLSAgIEZvciBhbiBleGFtcGxlLCBpdCBpcyBwb3NzaWJsZSB0byBwb2lzb24gJ2dldGxpbmUnIGJ5OgotLSAgIC0gYWRkaW5nIGEgY2FsbCB0byBnbF9XQVJOX09OX1VTRV9QUkVQQVJFKFtbI2luY2x1ZGUgPHN0ZGlvLmg+XV0sCi0tICAgICBbZ2V0bGluZV0pIGluIGNvbmZpZ3VyZS5hYywgd2hpY2ggcG90ZW50aWFsbHkgZGVmaW5lcwotLSAgICAgSEFWRV9SQVdfREVDTF9HRVRMSU5FCi0tICAgLSBhZGRpbmcgdGhpcyBjb2RlIHRvIGEgaGVhZGVyIHRoYXQgd3JhcHMgdGhlIHN5c3RlbSA8c3RkaW8uaD46Ci0tICAgICAjdW5kZWYgZ2V0bGluZQotLSAgICAgI2lmIEhBVkVfUkFXX0RFQ0xfR0VUTElORQotLSAgICAgX0dMX1dBUk5fT05fVVNFIChnZXRsaW5lLCAiZ2V0bGluZSBpcyByZXF1aXJlZCBieSBQT1NJWCAyMDA4LCBidXQiCi0tICAgICAgICJub3QgdW5pdmVyc2FsbHkgcHJlc2VudDsgdXNlIHRoZSBnbnVsaWIgbW9kdWxlIGdldGxpbmUiKTsKLS0gICAgICNlbmRpZgotLQotLSAgIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBkaXJlY3RseSBwb2lzb24gZ2xvYmFsIHZhcmlhYmxlcy4gIEJ1dCBpdCBpcwotLSAgIHBvc3NpYmxlIHRvIHdyaXRlIGEgd3JhcHBlciBhY2Nlc3NvciBmdW5jdGlvbiwgYW5kIHBvaXNvbiB0aGF0Ci0tICAgKGxlc3MgY29tbW9uIHVzYWdlLCBsaWtlICZlbnZpcm9uLCB3aWxsIGNhdXNlIGEgY29tcGlsYXRpb24gZXJyb3IKLS0gICByYXRoZXIgdGhhbiBpc3N1ZSB0aGUgbmljZSB3YXJuaW5nLCBidXQgdGhlIGVuZCByZXN1bHQgb2YgaW5mb3JtaW5nCi0tICAgdGhlIGRldmVsb3BlciBhYm91dCB0aGVpciBwb3J0YWJpbGl0eSBwcm9ibGVtIGlzIHN0aWxsIGFjaGlldmVkKToKLS0gICAjaWYgSEFWRV9SQVdfREVDTF9FTlZJUk9OCi0tICAgc3RhdGljIGlubGluZSBjaGFyICoqKnJwbF9lbnZpcm9uICh2b2lkKSB7IHJldHVybiAmZW52aXJvbjsgfQotLSAgIF9HTF9XQVJOX09OX1VTRSAocnBsX2Vudmlyb24sICJlbnZpcm9uIGlzIG5vdCBhbHdheXMgcHJvcGVybHkgZGVjbGFyZWQiKTsKLS0gICAjIHVuZGVmIGVudmlyb24KLS0gICAjIGRlZmluZSBlbnZpcm9uICgqcnBsX2Vudmlyb24gKCkpCi0tICAgI2VuZGlmCi0tICAgKi8KLS0jaWZuZGVmIF9HTF9XQVJOX09OX1VTRQotLQotLSMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCi0tLyogQSBjb21waWxlciBhdHRyaWJ1dGUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyA0LjMuMCBhbmQgbGF0ZXIuICAqLwotLSMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKLS1leHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobWVzc2FnZSkpKQotLSMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKLS0vKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLwotLSMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKLS1leHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uCi0tIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KLS0jICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCi0tX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQotLSMgZW5kaWYKLS0jZW5kaWYKLS0KLS0vKiBfR0xfV0FSTl9PTl9VU0VfQ1hYIChmdW5jdGlvbiwgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgInN0cmluZyIpCi0tICAgaXMgbGlrZSBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAic3RyaW5nIiksIGV4Y2VwdCB0aGF0IHRoZSBmdW5jdGlvbiBpcwotLSAgIGRlY2xhcmVkIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywKLS0gICBhbmQgYXR0cmlidXRlcy4KLS0gICBUaGlzIHZhcmlhbnQgaXMgdXNlZnVsIGZvciBvdmVybG9hZGVkIGZ1bmN0aW9ucyBpbiBDKysuIF9HTF9XQVJOX09OX1VTRSBkb2VzCi0tICAgbm90IHdvcmsgaW4gdGhpcyBjYXNlLiAgKi8KLS0jaWZuZGVmIF9HTF9XQVJOX09OX1VTRV9DWFgKLS0jIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQotLSMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKLS1leHRlcm4gcmV0dHlwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzIFwKLS0gICAgIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobXNnKSkpCi0tIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORwotLS8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCi0tIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAotLWV4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKLS0jIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLwotLSMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKLS1fR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCi0tIyBlbmRpZgotLSNlbmRpZgotLQotLS8qIF9HTF9XQVJOX0VYVEVSTl9DIGRlY2xhcmF0aW9uOwotLSAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCi0tI2lmbmRlZiBfR0xfV0FSTl9FWFRFUk5fQwotLSMgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cwotLSMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4gIkMiCi0tIyBlbHNlCi0tIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybgotLSMgZW5kaWYKLS0jZW5kaWYKLWRpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvd2Fybi1vbi11c2UuaCBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC93YXJuLW9uLXVzZS5oCi0tLS0gbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC93YXJuLW9uLXVzZS5oCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCi0rKysgbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvd2Fybi1vbi11c2UuaAkyMDEyLTAxLTA4IDAyOjA3OjM5Ljk1MDQ4NDQzOSAtMDgwMAotQEAgLTAsMCArMSwxMDkgQEAKLSsvKiBBIEMgbWFjcm8gZm9yIGVtaXR0aW5nIHdhcm5pbmdzIGlmIGEgZnVuY3Rpb24gaXMgdXNlZC4KLSsgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsKLSsgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCi0rICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLSsgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSsgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSsgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0rCi0rLyogX0dMX1dBUk5fT05fVVNFIChmdW5jdGlvbiwgImxpdGVyYWwgc3RyaW5nIikgaXNzdWVzIGEgZGVjbGFyYXRpb24KLSsgICBmb3IgRlVOQ1RJT04gd2hpY2ggd2lsbCB0aGVuIHRyaWdnZXIgYSBjb21waWxlciB3YXJuaW5nIGNvbnRhaW5pbmcKLSsgICB0aGUgdGV4dCBvZiAibGl0ZXJhbCBzdHJpbmciIGFueXdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkLCBpZgotKyAgIHN1cHBvcnRlZCBieSB0aGUgY29tcGlsZXIuICBJZiB0aGUgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzCi0rICAgZmVhdHVyZSwgdGhlIG1hY3JvIGV4cGFuZHMgdG8gYW4gdW51c2VkIGV4dGVybiBkZWNsYXJhdGlvbi4KLSsKLSsgICBUaGlzIG1hY3JvIGlzIHVzZWZ1bCBmb3IgbWFya2luZyBhIGZ1bmN0aW9uIGFzIGEgcG90ZW50aWFsCi0rICAgcG9ydGFiaWxpdHkgdHJhcCwgd2l0aCB0aGUgaW50ZW50IHRoYXQgImxpdGVyYWwgc3RyaW5nIiBpbmNsdWRlCi0rICAgaW5zdHJ1Y3Rpb25zIG9uIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSB1c2VkCi0rICAgaW5zdGVhZC4gIEhvd2V2ZXIsIG9uZSBvZiB0aGUgcmVhc29ucyB0aGF0IGEgZnVuY3Rpb24gaXMgYQotKyAgIHBvcnRhYmlsaXR5IHRyYXAgaXMgaWYgaXQgaGFzIHRoZSB3cm9uZyBzaWduYXR1cmUuICBEZWNsYXJpbmcKLSsgICBGVU5DVElPTiB3aXRoIGEgZGlmZmVyZW50IHNpZ25hdHVyZSBpbiBDIGlzIGEgY29tcGlsYXRpb24gZXJyb3IsIHNvCi0rICAgdGhpcyBtYWNybyBtdXN0IHVzZSB0aGUgc2FtZSB0eXBlIGFzIGFueSBleGlzdGluZyBkZWNsYXJhdGlvbiBzbwotKyAgIHRoYXQgcHJvZ3JhbXMgdGhhdCBhdm9pZCB0aGUgcHJvYmxlbWF0aWMgRlVOQ1RJT04gZG8gbm90IGZhaWwgdG8KLSsgICBjb21waWxlIG1lcmVseSBiZWNhdXNlIHRoZXkgaW5jbHVkZWQgYSBoZWFkZXIgdGhhdCBwb2lzb25lZCB0aGUKLSsgICBmdW5jdGlvbi4gIEJ1dCB0aGlzIGltcGxpZXMgdGhhdCBfR0xfV0FSTl9PTl9VU0UgaXMgb25seSBzYWZlIHRvCi0rICAgdXNlIGlmIEZVTkNUSU9OIGlzIGtub3duIHRvIGFscmVhZHkgaGF2ZSBhIGRlY2xhcmF0aW9uLiAgVXNlIG9mCi0rICAgdGhpcyBtYWNybyBpbXBsaWVzIHRoYXQgdGhlcmUgbXVzdCBub3QgYmUgYW55IG90aGVyIG1hY3JvIGhpZGluZwotKyAgIHRoZSBkZWNsYXJhdGlvbiBvZiBGVU5DVElPTjsgYnV0IHVuZGVmaW5pbmcgRlVOQ1RJT04gZmlyc3QgaXMgcGFydAotKyAgIG9mIHRoZSBwb2lzb25pbmcgcHJvY2VzcyBhbnl3YXkgKGFsdGhvdWdoIGZvciBzeW1ib2xzIHRoYXQgYXJlCi0rICAgcHJvdmlkZWQgb25seSB2aWEgYSBtYWNybywgdGhlIHJlc3VsdCBpcyBhIGNvbXBpbGF0aW9uIGVycm9yIHJhdGhlcgotKyAgIHRoYW4gYSB3YXJuaW5nIGNvbnRhaW5pbmcgImxpdGVyYWwgc3RyaW5nIikuICBBbHNvIG5vdGUgdGhhdCBpbgotKyAgIEMrKywgaXQgaXMgb25seSBzYWZlIHRvIHVzZSBpZiBGVU5DVElPTiBoYXMgbm8gb3ZlcmxvYWRzLgotKwotKyAgIEZvciBhbiBleGFtcGxlLCBpdCBpcyBwb3NzaWJsZSB0byBwb2lzb24gJ2dldGxpbmUnIGJ5OgotKyAgIC0gYWRkaW5nIGEgY2FsbCB0byBnbF9XQVJOX09OX1VTRV9QUkVQQVJFKFtbI2luY2x1ZGUgPHN0ZGlvLmg+XV0sCi0rICAgICBbZ2V0bGluZV0pIGluIGNvbmZpZ3VyZS5hYywgd2hpY2ggcG90ZW50aWFsbHkgZGVmaW5lcwotKyAgICAgSEFWRV9SQVdfREVDTF9HRVRMSU5FCi0rICAgLSBhZGRpbmcgdGhpcyBjb2RlIHRvIGEgaGVhZGVyIHRoYXQgd3JhcHMgdGhlIHN5c3RlbSA8c3RkaW8uaD46Ci0rICAgICAjdW5kZWYgZ2V0bGluZQotKyAgICAgI2lmIEhBVkVfUkFXX0RFQ0xfR0VUTElORQotKyAgICAgX0dMX1dBUk5fT05fVVNFIChnZXRsaW5lLCAiZ2V0bGluZSBpcyByZXF1aXJlZCBieSBQT1NJWCAyMDA4LCBidXQiCi0rICAgICAgICJub3QgdW5pdmVyc2FsbHkgcHJlc2VudDsgdXNlIHRoZSBnbnVsaWIgbW9kdWxlIGdldGxpbmUiKTsKLSsgICAgICNlbmRpZgotKwotKyAgIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBkaXJlY3RseSBwb2lzb24gZ2xvYmFsIHZhcmlhYmxlcy4gIEJ1dCBpdCBpcwotKyAgIHBvc3NpYmxlIHRvIHdyaXRlIGEgd3JhcHBlciBhY2Nlc3NvciBmdW5jdGlvbiwgYW5kIHBvaXNvbiB0aGF0Ci0rICAgKGxlc3MgY29tbW9uIHVzYWdlLCBsaWtlICZlbnZpcm9uLCB3aWxsIGNhdXNlIGEgY29tcGlsYXRpb24gZXJyb3IKLSsgICByYXRoZXIgdGhhbiBpc3N1ZSB0aGUgbmljZSB3YXJuaW5nLCBidXQgdGhlIGVuZCByZXN1bHQgb2YgaW5mb3JtaW5nCi0rICAgdGhlIGRldmVsb3BlciBhYm91dCB0aGVpciBwb3J0YWJpbGl0eSBwcm9ibGVtIGlzIHN0aWxsIGFjaGlldmVkKToKLSsgICAjaWYgSEFWRV9SQVdfREVDTF9FTlZJUk9OCi0rICAgc3RhdGljIGlubGluZSBjaGFyICoqKnJwbF9lbnZpcm9uICh2b2lkKSB7IHJldHVybiAmZW52aXJvbjsgfQotKyAgIF9HTF9XQVJOX09OX1VTRSAocnBsX2Vudmlyb24sICJlbnZpcm9uIGlzIG5vdCBhbHdheXMgcHJvcGVybHkgZGVjbGFyZWQiKTsKLSsgICAjIHVuZGVmIGVudmlyb24KLSsgICAjIGRlZmluZSBlbnZpcm9uICgqcnBsX2Vudmlyb24gKCkpCi0rICAgI2VuZGlmCi0rICAgKi8KLSsjaWZuZGVmIF9HTF9XQVJOX09OX1VTRQotKwotKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCi0rLyogQSBjb21waWxlciBhdHRyaWJ1dGUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyA0LjMuMCBhbmQgbGF0ZXIuICAqLwotKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKLStleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobWVzc2FnZSkpKQotKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKLSsvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLwotKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKLStleHRlcm4gX190eXBlb2ZfXyAoZnVuY3Rpb24pIGZ1bmN0aW9uCi0rIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KLSsjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCi0rX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQotKyMgZW5kaWYKLSsjZW5kaWYKLSsKLSsvKiBfR0xfV0FSTl9PTl9VU0VfQ1hYIChmdW5jdGlvbiwgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgInN0cmluZyIpCi0rICAgaXMgbGlrZSBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAic3RyaW5nIiksIGV4Y2VwdCB0aGF0IHRoZSBmdW5jdGlvbiBpcwotKyAgIGRlY2xhcmVkIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywKLSsgICBhbmQgYXR0cmlidXRlcy4KLSsgICBUaGlzIHZhcmlhbnQgaXMgdXNlZnVsIGZvciBvdmVybG9hZGVkIGZ1bmN0aW9ucyBpbiBDKysuIF9HTF9XQVJOX09OX1VTRSBkb2VzCi0rICAgbm90IHdvcmsgaW4gdGhpcyBjYXNlLiAgKi8KLSsjaWZuZGVmIF9HTF9XQVJOX09OX1VTRV9DWFgKLSsjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQotKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKLStleHRlcm4gcmV0dHlwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzIFwKLSsgICAgIF9fYXR0cmlidXRlX18gKChfX3dhcm5pbmdfXyAobXNnKSkpCi0rIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORwotKy8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCi0rIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAotK2V4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKLSsjIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLwotKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKLStfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCi0rIyBlbmRpZgotKyNlbmRpZgotKwotKy8qIF9HTF9XQVJOX0VYVEVSTl9DIGRlY2xhcmF0aW9uOwotKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCi0rI2lmbmRlZiBfR0xfV0FSTl9FWFRFUk5fQwotKyMgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cwotKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4gIkMiCi0rIyBlbHNlCi0rIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybgotKyMgZW5kaWYKLSsjZW5kaWYKLWRpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvYWxsb2NhdG9yLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvYWxsb2NhdG9yLmgKLS0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2FsbG9jYXRvci5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCi0rKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvYWxsb2NhdG9yLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4wNTA0ODQ0NDQgLTA4MDAKLUBAIC00NSwxMSArNDUsMTAgQEAgc3RydWN0IGFsbG9jYXRvcgotICAgLyogQ2FsbCBGUkVFIHRvIGZyZWUgbWVtb3J5LCBsaWtlICdmcmVlJy4gICovCi0gICB2b2lkICgqZnJlZSkgKHZvaWQgKik7Ci0gCi0tICAvKiBJZiBub25udWxsLCBjYWxsIERJRSAoU0laRSkgaWYgTUFMTE9DIChTSVpFKSBvciBSRUFMTE9DICguLi4sCi0tICAgICBTSVpFKSBmYWlscy4gIERJRSBzaG91bGQgbm90IHJldHVybi4gIFNJWkUgc2hvdWxkIGVxdWFsIFNJWkVfTUFYCi0tICAgICBpZiBzaXplX3Qgb3ZlcmZsb3cgd2FzIGRldGVjdGVkIHdoaWxlIGNhbGN1bGF0aW5nIHNpemVzIHRvIGJlCi0tICAgICBwYXNzZWQgdG8gTUFMTE9DIG9yIFJFQUxMT0MuICAqLwotLSAgdm9pZCAoKmRpZSkgKHNpemVfdCk7Ci0rICAvKiBJZiBub25udWxsLCBjYWxsIERJRSBpZiBNQUxMT0Mgb3IgUkVBTExPQyBmYWlscy4gIERJRSBzaG91bGQgbm90Ci0rICAgICByZXR1cm4uICBESUUgY2FuIGJlIHVzZWQgYnkgY29kZSB0aGF0IGRldGVjdHMgbWVtb3J5IG92ZXJmbG93Ci0rICAgICB3aGlsZSBjYWxjdWxhdGluZyBzaXplcyB0byBiZSBwYXNzZWQgdG8gTUFMTE9DIG9yIFJFQUxMT0MuICAqLwotKyAgdm9pZCAoKmRpZSkgKHZvaWQpOwotIH07Ci0gCi0gLyogQW4gYWxsb2NhdG9yIHVzaW5nIHRoZSBzdGRsaWIgZnVuY3Rpb25zIGFuZCBhIG51bGwgRElFIGZ1bmN0aW9uLiAgKi8KLWRpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvY2Fub25pY2FsaXplLWxncGwuYyBsaWJpY29udi0xLjE0L3NyY2xpYi9jYW5vbmljYWxpemUtbGdwbC5jCi0tLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9jYW5vbmljYWxpemUtbGdwbC5jCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCi0rKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvY2Fub25pY2FsaXplLWxncGwuYwkyMDEyLTAxLTA4IDAyOjA3OjQwLjA5NDQ4NDQ0NiAtMDgwMAotQEAgLTEyNSw3ICsxMjUsNyBAQCBfX3JlYWxwYXRoIChjb25zdCBjaGFyICpuYW1lLCBjaGFyICpyZXNvCi0gI2Vsc2UKLSAgIHBhdGhfbWF4ID0gcGF0aGNvbmYgKG5hbWUsIF9QQ19QQVRIX01BWCk7Ci0gICBpZiAocGF0aF9tYXggPD0gMCkKLS0gICAgcGF0aF9tYXggPSA4MTkyOwotKyAgICBwYXRoX21heCA9IDEwMjQ7Ci0gI2VuZGlmCi0gCi0gICBpZiAocmVzb2x2ZWQgPT0gTlVMTCkKLWRpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvY2FyZWFkbGlua2F0LmMgbGliaWNvbnYtMS4xNC9zcmNsaWIvY2FyZWFkbGlua2F0LmMKLS0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2NhcmVhZGxpbmthdC5jCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCi0rKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvY2FyZWFkbGlua2F0LmMJMjAxMi0wMS0wOCAwMjowNzo0MC4xMDI0ODQ0NDUgLTA4MDAKLUBAIC0xMzMsNyArMTMzLDYgQEAgY2FyZWFkbGlua2F0IChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGVuYQotICAgICAgICAgICBpZiAoYnVmID09IHN0YWNrX2J1ZikKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBjaGFyICpiID0gKGNoYXIgKikgYWxsb2MtPmFsbG9jYXRlIChsaW5rX3NpemUpOwotLSAgICAgICAgICAgICAgYnVmX3NpemUgPSBsaW5rX3NpemU7Ci0gICAgICAgICAgICAgICBpZiAoISBiKQotICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgIG1lbWNweSAoYiwgYnVmLCBsaW5rX3NpemUpOwotQEAgLTE1NywxMSArMTU2LDYgQEAgY2FyZWFkbGlua2F0IChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGVuYQotICAgICAgICAgYnVmX3NpemUgKj0gMjsKLSAgICAgICBlbHNlIGlmIChidWZfc2l6ZSA8IGJ1Zl9zaXplX21heCkKLSAgICAgICAgIGJ1Zl9zaXplID0gYnVmX3NpemVfbWF4OwotLSAgICAgIGVsc2UgaWYgKGJ1Zl9zaXplX21heCA8IFNJWkVfTUFYKQotLSAgICAgICAgewotLSAgICAgICAgICBlcnJubyA9IEVOQU1FVE9PTE9ORzsKLS0gICAgICAgICAgcmV0dXJuIE5VTEw7Ci0tICAgICAgICB9Ci0gICAgICAgZWxzZQotICAgICAgICAgYnJlYWs7Ci0gICAgICAgYnVmID0gKGNoYXIgKikgYWxsb2MtPmFsbG9jYXRlIChidWZfc2l6ZSk7Ci1AQCAtMTY5LDcgKzE2Myw3IEBAIGNhcmVhZGxpbmthdCAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlbmEKLSAgIHdoaWxlIChidWYpOwotIAotICAgaWYgKGFsbG9jLT5kaWUpCi0tICAgIGFsbG9jLT5kaWUgKGJ1Zl9zaXplKTsKLSsgICAgYWxsb2MtPmRpZSAoKTsKLSAgIGVycm5vID0gRU5PTUVNOwotICAgcmV0dXJuIE5VTEw7Ci0gfQotZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9lcnJuby5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL2Vycm5vLmluLmgKLS0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2Vycm5vLmluLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKLSsrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9lcnJuby5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuMTIyNDg0NDQ2IC0wODAwCi1AQCAtMTYsNyArMTYsNyBAQAotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotIAotLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX0VSUk5PX0gKLSsjaWZuZGVmIF9HTF9FUlJOT19ICi0gCi0gI2lmIF9fR05VQ19fID49IDMKLSBAUFJBR01BX1NZU1RFTV9IRUFERVJACi1AQCAtMjYsOCArMjYsOCBAQAotIC8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KLSAjQElOQ0xVREVfTkVYVEAgQE5FWFRfRVJSTk9fSEAKLSAKLS0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9FUlJOT19ICi0tI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfRVJSTk9fSAotKyNpZm5kZWYgX0dMX0VSUk5PX0gKLSsjZGVmaW5lIF9HTF9FUlJOT19ICi0gCi0gCi0gLyogT24gbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zLCBtYW55IG1hY3JvcyBhcmUgbm90IGRlZmluZWQuICAqLwotQEAgLTE0NywxNiArMTQ3LDYgQEAKLSAjICBkZWZpbmUgR05VTElCX2RlZmluZWRfRU5PVFNVUCAxCi0gIyBlbmRpZgotIAotLSMgaWZuZGVmIEVORVRSRVNFVAotLSMgIGRlZmluZSBFTkVUUkVTRVQgMjAxMQotLSMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FTkVUUkVTRVQgMQotLSMgZW5kaWYKLS0KLS0jIGlmbmRlZiBFQ09OTkFCT1JURUQKLS0jICBkZWZpbmUgRUNPTk5BQk9SVEVEIDIwMTIKLS0jICBkZWZpbmUgR05VTElCX2RlZmluZWRfRUNPTk5BQk9SVEVEIDEKLS0jIGVuZGlmCi0tCi0gIyBpZm5kZWYgRVNUQUxFCi0gIyAgZGVmaW5lIEVTVEFMRSAgICAyMDA5Ci0gIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VTVEFMRSAxCi1AQCAtMTczLDUgKzE2Myw1IEBACi0gIyBlbmRpZgotIAotIAotLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfRVJSTk9fSCAqLwotLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfRVJSTk9fSCAqLwotKyNlbmRpZiAvKiBfR0xfRVJSTk9fSCAqLwotKyNlbmRpZiAvKiBfR0xfRVJSTk9fSCAqLwotZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9lcnJvci5jIGxpYmljb252LTEuMTQvc3JjbGliL2Vycm9yLmMKLS0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2Vycm9yLmMJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKLSsrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9lcnJvci5jCTIwMTItMDEtMDggMDI6MDc6NDAuMTM0NDg0NDQ4IC0wODAwCi1AQCAtOTcsMTUgKzk3LDExIEBAIGV4dGVybiB2b2lkIF9fZXJyb3JfYXRfbGluZSAoaW50IHN0YXR1cywKLSAvKiBUaGUgZ251bGliIG92ZXJyaWRlIG9mIGZjbnRsIGlzIG5vdCBuZWVkZWQgaW4gdGhpcyBmaWxlLiAgKi8KLSAjIHVuZGVmIGZjbnRsCi0gCi0tIyBpZiAhSEFWRV9ERUNMX1NUUkVSUk9SX1IKLSsjIGlmICFIQVZFX0RFQ0xfU1RSRVJST1JfUiAmJiBTVFJFUlJPUl9SX0NIQVJfUAotICMgIGlmbmRlZiBIQVZFX0RFQ0xfU1RSRVJST1JfUgotICJ0aGlzIGNvbmZpZ3VyZS10aW1lIGRlY2xhcmF0aW9uIHRlc3Qgd2FzIG5vdCBydW4iCi0gIyAgZW5kaWYKLS0jICBpZiBTVFJFUlJPUl9SX0NIQVJfUAotIGNoYXIgKnN0cmVycm9yX3IgKCk7Ci0tIyAgZWxzZQotLWludCBzdHJlcnJvcl9yICgpOwotLSMgIGVuZGlmCi0gIyBlbmRpZgotIAotIC8qIFRoZSBjYWxsaW5nIHByb2dyYW0gc2hvdWxkIGRlZmluZSBwcm9ncmFtX25hbWUgYW5kIHNldCBpdCB0byB0aGUKLWRpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvZmNudGwuaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi9mY250bC5pbi5oCi0tLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9mY250bC5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCi0rKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvZmNudGwuaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjE1NDQ4NDQ0OSAtMDgwMAotQEAgLTQwLDcgKzQwLDcgQEAKLSAjZWxzZQotIC8qIE5vcm1hbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLwotIAotLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX0ZDTlRMX0gKLSsjaWZuZGVmIF9HTF9GQ05UTF9ICi0gCi0gI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotIC8qIE9uIHNvbWUgc3lzdGVtcyBvdGhlciB0aGFuIGdsaWJjLCA8c3lzL3N0YXQuaD4gaXMgYSBwcmVyZXF1aXNpdGUgb2YKLUBAIC01NSw4ICs1NSw4IEBACi0gLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLwotICNASU5DTFVERV9ORVhUQCBATkVYVF9GQ05UTF9IQAotIAotLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX0ZDTlRMX0gKLS0jZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9GQ05UTF9ICi0rI2lmbmRlZiBfR0xfRkNOVExfSAotKyNkZWZpbmUgX0dMX0ZDTlRMX0gKLSAKLSAjaWZuZGVmIF9fR0xJQkNfXyAvKiBBdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uIG9uIGdsaWJjIHN5c3RlbXMuICAqLwotICMgaW5jbHVkZSA8dW5pc3RkLmg+Ci1AQCAtMzIwLDYgKzMyMCw2IEBAIF9HTF9XQVJOX09OX1VTRSAob3BlbmF0LCAib3BlbmF0IGlzIG5vdAotICNlbmRpZgotIAotIAotLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfRkNOVExfSCAqLwotLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfRkNOVExfSCAqLwotKyNlbmRpZiAvKiBfR0xfRkNOVExfSCAqLwotKyNlbmRpZiAvKiBfR0xfRkNOVExfSCAqLwotICNlbmRpZgotZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9pbnRwcm9wcy5oIGxpYmljb252LTEuMTQvc3JjbGliL2ludHByb3BzLmgKLS0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2ludHByb3BzLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKLSsrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9pbnRwcm9wcy5oCTIwMTItMDEtMDggMDI6MDc6NDAuMTc0NDg0NDUwIC0wODAwCi1AQCAtMjIsMTMgKzIyLDE0IEBACi0gCi0gI2luY2x1ZGUgPGxpbWl0cy5oPgotIAotLS8qIFJldHVybiBhbiBpbnRlZ2VyIHZhbHVlLCBjb252ZXJ0ZWQgdG8gdGhlIHNhbWUgdHlwZSBhcyB0aGUgaW50ZWdlcgotLSAgIGV4cHJlc3Npb24gRSBhZnRlciBpbnRlZ2VyIHR5cGUgcHJvbW90aW9uLiAgViBpcyB0aGUgdW5jb252ZXJ0ZWQgdmFsdWUuICAqLwotLSNkZWZpbmUgX0dMX0lOVF9DT05WRVJUKGUsIHYpICgwICogKGUpICsgKHYpKQotKy8qIFJldHVybiBhIGludGVnZXIgdmFsdWUsIGNvbnZlcnRlZCB0byB0aGUgc2FtZSB0eXBlIGFzIHRoZSBpbnRlZ2VyCi0rICAgZXhwcmVzc2lvbiBFIGFmdGVyIGludGVnZXIgdHlwZSBwcm9tb3Rpb24uICBWIGlzIHRoZSB1bmNvbnZlcnRlZCB2YWx1ZS4KLSsgICBFIHNob3VsZCBub3QgaGF2ZSBzaWRlIGVmZmVjdHMuICAqLwotKyNkZWZpbmUgX0dMX0lOVF9DT05WRVJUKGUsIHYpICgoZSkgLSAoZSkgKyAodikpCi0gCi0gLyogQWN0IGxpa2UgX0dMX0lOVF9DT05WRVJUIChFLCAtVikgYnV0IHdvcmsgYXJvdW5kIGEgYnVnIGluIElSSVggNi41IGNjOyBzZWUKLSAgICA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1nbnVsaWIvMjAxMS0wNS9tc2cwMDQwNi5odG1sPi4gICovCi0tI2RlZmluZSBfR0xfSU5UX05FR0FURV9DT05WRVJUKGUsIHYpICgwICogKGUpIC0gKHYpKQotKyNkZWZpbmUgX0dMX0lOVF9ORUdBVEVfQ09OVkVSVChlLCB2KSAoKGUpIC0gKGUpIC0gKHYpKQotIAotIC8qIFRoZSBleHRyYSBjYXN0cyBpbiB0aGUgZm9sbG93aW5nIG1hY3JvcyB3b3JrIGFyb3VuZCBjb21waWxlciBidWdzLAotICAgIGUuZy4sIGluIENyYXkgQyA1LjAuMy4wLiAgKi8KLUBAIC01Miw3ICs1Myw3IEBACi0gI2RlZmluZSBUWVBFX1NJR05FRCh0KSAoISAoKHQpIDAgPCAodCkgLTEpKQotIAotIC8qIFJldHVybiAxIGlmIHRoZSBpbnRlZ2VyIGV4cHJlc3Npb24gRSwgYWZ0ZXIgaW50ZWdlciBwcm9tb3Rpb24sIGhhcwotLSAgIGEgc2lnbmVkIHR5cGUuICAqLwotKyAgIGEgc2lnbmVkIHR5cGUuICBFIHNob3VsZCBub3QgaGF2ZSBzaWRlIGVmZmVjdHMuICAqLwotICNkZWZpbmUgX0dMX0lOVF9TSUdORUQoZSkgKF9HTF9JTlRfTkVHQVRFX0NPTlZFUlQgKGUsIDEpIDwgMCkKLSAKLSAKLUBAIC0zMTAsMTAgKzMxMSwxMyBAQAotIC8qIFJldHVybiAxIGlmIHRoZSBleHByZXNzaW9uIEEgPG9wPiBCIHdvdWxkIG92ZXJmbG93LAotICAgIHdoZXJlIE9QX1JFU1VMVF9PVkVSRkxPVyAoQSwgQiwgTUlOLCBNQVgpIGRvZXMgdGhlIGFjdHVhbCB0ZXN0LAotICAgIGFzc3VtaW5nIE1JTiBhbmQgTUFYIGFyZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBmb3IgdGhlIHJlc3VsdCB0eXBlLgotLSAgIEFyZ3VtZW50cyBzaG91bGQgYmUgZnJlZSBvZiBzaWRlIGVmZmVjdHMuICAqLwotKwotKyAgIFRoaXMgbWFjcm8gYXNzdW1lcyB0aGF0IEEgfCBCIGlzIGEgdmFsaWQgaW50ZWdlciBpZiBib3RoIEEgYW5kIEIgYXJlLAotKyAgIHdoaWNoIGlzIHRydWUgb2YgYWxsIGtub3duIHByYWN0aWNhbCBob3N0cy4gIElmIHRoaXMgaXMgYSBwcm9ibGVtCi0rICAgZm9yIHlvdSwgcGxlYXNlIGxldCB1cyBrbm93IGhvdyB0byBmaXggaXQgZm9yIHlvdXIgaG9zdC4gICovCi0gI2RlZmluZSBfR0xfQklOQVJZX09QX09WRVJGTE9XKGEsIGIsIG9wX3Jlc3VsdF9vdmVyZmxvdykgICAgICAgIFwKLSAgIG9wX3Jlc3VsdF9vdmVyZmxvdyAoYSwgYiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotLSAgICAgICAgICAgICAgICAgICAgICBfR0xfSU5UX01JTklNVU0gKDAgKiAoYikgKyAoYSkpLCAgICAgICAgICBcCi0tICAgICAgICAgICAgICAgICAgICAgIF9HTF9JTlRfTUFYSU1VTSAoMCAqIChiKSArIChhKSkpCi0rICAgICAgICAgICAgICAgICAgICAgIF9HTF9JTlRfTUlOSU1VTSAoKGEpIHwgKGIpKSwgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgICAgICAgICAgX0dMX0lOVF9NQVhJTVVNICgoYSkgfCAoYikpKQotIAotICNlbmRpZiAvKiBfR0xfSU5UUFJPUFNfSCAqLwotZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9NYWtlZmlsZS5nbnVsaWIgbGliaWNvbnYtMS4xNC9zcmNsaWIvTWFrZWZpbGUuZ251bGliCi0tLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9NYWtlZmlsZS5nbnVsaWIJMjAxMi0wMS0wOCAwMjowNToxOC43NTQ0Nzc2MDYgLTA4MDAKLSsrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9NYWtlZmlsZS5nbnVsaWIJMjAxMi0wMS0wOCAwMjowNzo0My4xMzg0ODQ1OTIgLTA4MDAKLUBAIC05LDcgKzksNyBAQAotICMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KLSAjCi0gIyBHZW5lcmF0ZWQgYnkgZ251bGliLXRvb2wuCi0tIyBSZXByb2R1Y2UgYnk6IGdudWxpYi10b29sIC0taW1wb3J0IC0tZGlyPS4gLS1sb2NhbC1kaXI9Z251bGliLWxvY2FsIC0tbGliPWxpYmljcnQgLS1zb3VyY2UtYmFzZT1zcmNsaWIgLS1tNC1iYXNlPXNyY200IC0tZG9jLWJhc2U9ZG9jIC0tdGVzdHMtYmFzZT10ZXN0cyAtLWF1eC1kaXI9YnVpbGQtYXV4IC0tbWFrZWZpbGUtbmFtZT1NYWtlZmlsZS5nbnVsaWIgLS1uby1jb25kaXRpb25hbC1kZXBlbmRlbmNpZXMgLS1uby1saWJ0b29sIC0tbWFjcm8tcHJlZml4PWdsIC0tbm8tdmMtZmlsZXMgYmluYXJ5LWlvIGVycm9yIGdldHRleHQgZ2V0dGV4dC1oIGxpYmljb252LW1pc2MgbWJzdGF0ZSBtZW1tb3ZlIHByb2duYW1lIHJlbG9jYXRhYmxlLXByb2cgc2FmZS1yZWFkIHNpZ3BpcGUgc3RkaW8gc3RkbGliIHN0cmVycm9yIHVuaXN0ZCB1bml3aWR0aC93aWR0aCB1bmxvY2tlZC1pbyB4YWxsb2MKLSsjIFJlcHJvZHVjZSBieTogZ251bGliLXRvb2wgLS1pbXBvcnQgLS1kaXI9LiAtLWxvY2FsLWRpcj1nbnVsaWItbG9jYWwgLS1saWI9bGliaWNydCAtLXNvdXJjZS1iYXNlPXNyY2xpYiAtLW00LWJhc2U9c3JjbTQgLS1kb2MtYmFzZT1kb2MgLS10ZXN0cy1iYXNlPXRlc3RzIC0tYXV4LWRpcj1idWlsZC1hdXggLS1tYWtlZmlsZS1uYW1lPU1ha2VmaWxlLmdudWxpYiAtLW5vLWxpYnRvb2wgLS1tYWNyby1wcmVmaXg9Z2wgLS1uby12Yy1maWxlcyBiaW5hcnktaW8gZXJyb3IgZ2V0dGV4dCBnZXR0ZXh0LWggbGliaWNvbnYtbWlzYyBtYnN0YXRlIG1lbW1vdmUgcHJvZ25hbWUgcmVsb2NhdGFibGUgcmVsb2NhdGFibGUtcHJvZyBzYWZlLXJlYWQgc2lncGlwZSBzdGRpbyBzdGRsaWIgc3RyZXJyb3IgdW5pc3RkIHVuaXdpZHRoL3dpZHRoIHVubG9ja2VkLWlvIHhhbGxvYwotIAotIAotIE1PU1RMWUNMRUFORklMRVMgKz0gY29yZSAqLnN0YWNrZHVtcAotQEAgLTYwLDEyICs2MCw2MCBAQCBFWFRSQV9ESVNUICs9IGFyZWFkbGluay5oCi0gCi0gIyMgZW5kICAgZ251bGliIG1vZHVsZSBhcmVhZGxpbmsKLSAKLSsjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGFyZy1ub25udWxsCi0rCi0rIyBUaGUgQlVJTFRfU09VUkNFUyBjcmVhdGVkIGJ5IHRoaXMgTWFrZWZpbGUgc25pcHBldCBhcmUgbm90IHVzZWQgdmlhICNpbmNsdWRlCi0rIyBzdGF0ZW1lbnRzIGJ1dCB0aHJvdWdoIGRpcmVjdCBmaWxlIHJlZmVyZW5jZS4gVGhlcmVmb3JlIHRoaXMgc25pcHBldCBtdXN0IGJlCi0rIyBwcmVzZW50IGluIGFsbCBNYWtlZmlsZS5hbSB0aGF0IG5lZWQgaXQuIFRoaXMgaXMgZW5zdXJlZCBieSB0aGUgYXBwbGljYWJpbGl0eQotKyMgJ2FsbCcgZGVmaW5lZCBhYm92ZS4KLSsKLStCVUlMVF9TT1VSQ0VTICs9IGFyZy1ub25udWxsLmgKLSsjIFRoZSBhcmctbm9ubnVsbC5oIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIGdlbmVyYXRlZCAuaCBmaWxlcyBpcyB0aGUgc2FtZSBhcwotKyMgYnVpbGQtYXV4L2FyZy1ub25udWxsLmgsIGV4Y2VwdCB0aGF0IGl0IGhhcyB0aGUgY29weXJpZ2h0IGhlYWRlciBjdXQgb2ZmLgotK2FyZy1ub25udWxsLmg6ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2FyZy1ub25udWxsLmgKLSsJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKLSsJc2VkIC1uIC1lICcvR0xfQVJHX05PTk5VTEwvLCQkcCcgXAotKwkgIDwgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvYXJnLW5vbm51bGwuaCBcCi0rCSAgPiAkQC10ICYmIFwKLSsJbXYgJEAtdCAkQAotK01PU1RMWUNMRUFORklMRVMgKz0gYXJnLW5vbm51bGwuaCBhcmctbm9ubnVsbC5oLXQKLSsKLStBUkdfTk9OTlVMTF9IPWFyZy1ub25udWxsLmgKLSsKLStFWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2FyZy1ub25udWxsLmgKLSsKLSsjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGFyZy1ub25udWxsCi0rCi0gIyMgYmVnaW4gZ251bGliIG1vZHVsZSBiaW5hcnktaW8KLSAKLSBsaWJpY3J0X2FfU09VUkNFUyArPSBiaW5hcnktaW8uaAotIAotICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgYmluYXJ5LWlvCi0gCi0rIyMgYmVnaW4gZ251bGliIG1vZHVsZSBjKytkZWZzCi0rCi0rIyBUaGUgQlVJTFRfU09VUkNFUyBjcmVhdGVkIGJ5IHRoaXMgTWFrZWZpbGUgc25pcHBldCBhcmUgbm90IHVzZWQgdmlhICNpbmNsdWRlCi0rIyBzdGF0ZW1lbnRzIGJ1dCB0aHJvdWdoIGRpcmVjdCBmaWxlIHJlZmVyZW5jZS4gVGhlcmVmb3JlIHRoaXMgc25pcHBldCBtdXN0IGJlCi0rIyBwcmVzZW50IGluIGFsbCBNYWtlZmlsZS5hbSB0aGF0IG5lZWQgaXQuIFRoaXMgaXMgZW5zdXJlZCBieSB0aGUgYXBwbGljYWJpbGl0eQotKyMgJ2FsbCcgZGVmaW5lZCBhYm92ZS4KLSsKLStCVUlMVF9TT1VSQ0VTICs9IGMrK2RlZnMuaAotKyMgVGhlIGMrK2RlZnMuaCB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byBnZW5lcmF0ZWQgLmggZmlsZXMgaXMgdGhlIHNhbWUgYXMKLSsjIGJ1aWxkLWF1eC9jKytkZWZzLmgsIGV4Y2VwdCB0aGF0IGl0IGhhcyB0aGUgY29weXJpZ2h0IGhlYWRlciBjdXQgb2ZmLgotK2MrK2RlZnMuaDogJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvYysrZGVmcy5oCi0rCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCi0rCXNlZCAtbiAtZSAnL19HTF9DWFhERUZTLywkJHAnIFwKLSsJICA8ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2MrK2RlZnMuaCBcCi0rCSAgPiAkQC10ICYmIFwKLSsJbXYgJEAtdCAkQAotK01PU1RMWUNMRUFORklMRVMgKz0gYysrZGVmcy5oIGMrK2RlZnMuaC10Ci0rCi0rQ1hYREVGU19IPWMrK2RlZnMuaAotKwotK0VYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvYysrZGVmcy5oCi0rCi0rIyMgZW5kICAgZ251bGliIG1vZHVsZSBjKytkZWZzCi0rCi0gIyMgYmVnaW4gZ251bGliIG1vZHVsZSBjYW5vbmljYWxpemUtbGdwbAotIAotIAotQEAgLTEwMCw4ICsxNDgsNyBAQCBpZiBHTF9HRU5FUkFURV9FUlJOT19ICi0gZXJybm8uaDogZXJybm8uaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAotIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKLS0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKLS0JICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCi0rCSAgc2VkIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAotIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKLSAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCi0gCSAgICAgIC1lICdzfEAnJ05FWFRfRVJSTk9fSCcnQHwkKE5FWFRfRVJSTk9fSCl8ZycgXAotQEAgLTE0MiwxNSArMTg5LDE0IEBAIEJVSUxUX1NPVVJDRVMgKz0gZmNudGwuaAotIGZjbnRsLmg6IGZjbnRsLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQotIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAotIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCi0tCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCi0tCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAotKwkgIHNlZCAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKLSAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCi0gCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAotIAkgICAgICAtZSAnc3xAJydORVhUX0ZDTlRMX0gnJ0B8JChORVhUX0ZDTlRMX0gpfGcnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZDTlRMJydALyQoR05VTElCX0ZDTlRMKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9OT05CTE9DS0lORycnQC8kKEdOVUxJQl9OT05CTE9DS0lORykvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfT1BFTicnQC8kKEdOVUxJQl9PUEVOKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9PUEVOQVQnJ0AvJChHTlVMSUJfT1BFTkFUKS9nJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GQ05UTCcnQHwkKEdOVUxJQl9GQ05UTCl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTk9OQkxPQ0tJTkcnJ0B8JChHTlVMSUJfTk9OQkxPQ0tJTkcpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX09QRU4nJ0B8JChHTlVMSUJfT1BFTil8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfT1BFTkFUJydAfCQoR05VTElCX09QRU5BVCl8ZycgXAotIAkgICAgICAtZSAnc3xAJydIQVZFX0ZDTlRMJydAfCQoSEFWRV9GQ05UTCl8ZycgXAotIAkgICAgICAtZSAnc3xAJydIQVZFX09QRU5BVCcnQHwkKEhBVkVfT1BFTkFUKXxnJyBcCi0gCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRkNOVEwnJ0B8JChSRVBMQUNFX0ZDTlRMKXxnJyBcCi1AQCAtMjk3LDcgKzM0Myw3IEBAIEVYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvY28KLSAjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHJlbG9jYXRhYmxlLXByb2ctd3JhcHBlcgotIAotIAotLUVYVFJBX0RJU1QgKz0gYWxsb2NhdG9yLmMgYWxsb2NhdG9yLmggYXJlYWRsaW5rLmMgYXJlYWRsaW5rLmggYy1jdHlwZS5jIGMtY3R5cGUuaCBjYW5vbmljYWxpemUtbGdwbC5jIGNhcmVhZGxpbmthdC5jIGNhcmVhZGxpbmthdC5oIG1hbGxvY2EuYyBtYWxsb2NhLmggcHJvZ25hbWUuYyBwcm9nbmFtZS5oIHByb2dyZWxvYy5jIHJlYWRsaW5rLmMgcmVsb2NhdGFibGUuYyByZWxvY2F0YWJsZS5oIHJlbG9jd3JhcHBlci5jIHNldGVudi5jCi0rRVhUUkFfRElTVCArPSBhbGxvY2F0b3IuYyBhbGxvY2F0b3IuaCBhcmVhZGxpbmsuYyBhcmVhZGxpbmsuaCBjLWN0eXBlLmMgYy1jdHlwZS5oIGNhbm9uaWNhbGl6ZS1sZ3BsLmMgY2FyZWFkbGlua2F0LmMgY2FyZWFkbGlua2F0LmggbWFsbG9jYS5jIG1hbGxvY2EuaCBwcm9nbmFtZS5jIHByb2duYW1lLmggcHJvZ3JlbG9jLmMgcmVhZGxpbmsuYyByZWxvY2F0YWJsZS5jIHJlbG9jYXRhYmxlLmggcmVsb2N3cmFwcGVyLmMgc2V0ZW52LmMgc3RyZXJyb3IuYwotIAotIEVYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvaW5zdGFsbC1yZWxvYwotIAotQEAgLTMwNSw5ICszNTEsMTAgQEAgRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9pbgotIAotICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc2FmZS1yZWFkCi0gCi0tbGliaWNydF9hX1NPVVJDRVMgKz0gc2FmZS1yZWFkLmMKLSAKLS1FWFRSQV9ESVNUICs9IHNhZmUtcmVhZC5oCi0rRVhUUkFfRElTVCArPSBzYWZlLXJlYWQuYyBzYWZlLXJlYWQuaAotKwotK0VYVFJBX2xpYmljcnRfYV9TT1VSQ0VTICs9IHNhZmUtcmVhZC5jCi0gCi0gIyMgZW5kICAgZ251bGliIG1vZHVsZSBzYWZlLXJlYWQKLSAKLUBAIC0zMjAsMjQgKzM2NywyMCBAQCBCVUlMVF9TT1VSQ0VTICs9IHNpZ25hbC5oCi0gc2lnbmFsLmg6IHNpZ25hbC5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKLSAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKLSAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJyAmJiBcCi0tCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCi0tCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAotKwkgIHNlZCAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKLSAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCi0gCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAotIAkgICAgICAtZSAnc3xAJydORVhUX1NJR05BTF9IJydAfCQoTkVYVF9TSUdOQUxfSCl8ZycgXAotLQkgICAgICAtZSAnc3xAJydHTlVMSUJfUFRIUkVBRF9TSUdNQVNLJydAfCQoR05VTElCX1BUSFJFQURfU0lHTUFTSyl8ZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfU0lHTkFMX0hfU0lHUElQRScnQC8kKEdOVUxJQl9TSUdOQUxfSF9TSUdQSVBFKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TSUdQUk9DTUFTSycnQC8kKEdOVUxJQl9TSUdQUk9DTUFTSykvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfU0lHQUNUSU9OJydALyQoR05VTElCX1NJR0FDVElPTikvZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU0lHTkFMX0hfU0lHUElQRScnQHwkKEdOVUxJQl9TSUdOQUxfSF9TSUdQSVBFKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TSUdQUk9DTUFTSycnQHwkKEdOVUxJQl9TSUdQUk9DTUFTSyl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU0lHQUNUSU9OJydAfCQoR05VTElCX1NJR0FDVElPTil8ZycgXAotIAkgICAgICAtZSAnc3xAJydIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HJydAfCQoSEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lORyl8ZycgXAotLQkgICAgICAtZSAnc3xAJydIQVZFX1BUSFJFQURfU0lHTUFTSycnQHwkKEhBVkVfUFRIUkVBRF9TSUdNQVNLKXxnJyBcCi0gCSAgICAgIC1lICdzfEAnJ0hBVkVfU0lHU0VUX1QnJ0B8JChIQVZFX1NJR1NFVF9UKXxnJyBcCi0gCSAgICAgIC1lICdzfEAnJ0hBVkVfU0lHSU5GT19UJydAfCQoSEFWRV9TSUdJTkZPX1QpfGcnIFwKLSAJICAgICAgLWUgJ3N8QCcnSEFWRV9TSUdBQ1RJT04nJ0B8JChIQVZFX1NJR0FDVElPTil8ZycgXAotIAkgICAgICAtZSAnc3xAJydIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9OJydAfCQoSEFWRV9TVFJVQ1RfU0lHQUNUSU9OX1NBX1NJR0FDVElPTil8ZycgXAotIAkgICAgICAtZSAnc3xAJydIQVZFX1RZUEVfVk9MQVRJTEVfU0lHX0FUT01JQ19UJydAfCQoSEFWRV9UWVBFX1ZPTEFUSUxFX1NJR19BVE9NSUNfVCl8ZycgXAotIAkgICAgICAtZSAnc3xAJydIQVZFX1NJR0hBTkRMRVJfVCcnQHwkKEhBVkVfU0lHSEFORExFUl9UKXxnJyBcCi0tCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfUFRIUkVBRF9TSUdNQVNLJydAfCQoUkVQTEFDRV9QVEhSRUFEX1NJR01BU0spfGcnIFwKLSAJICAgICAgLWUgJy9kZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBML3IgJChDWFhERUZTX0gpJyBcCi0gCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwvciAkKEFSR19OT05OVUxMX0gpJyBcCi0gCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UvciAkKFdBUk5fT05fVVNFX0gpJyBcCi1AQCAtMzY4LDg3ICs0MTEsNiBAQCBFWFRSQV9saWJpY3J0X2FfU09VUkNFUyArPSBzaWdwcm9jbWFzay5jCi0gCi0gIyMgZW5kICAgZ251bGliIG1vZHVsZSBzaWdwcm9jbWFzawotIAotLSMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc25pcHBldC9fTm9yZXR1cm4KLS0KLS0jIEJlY2F1c2UgdGhpcyBNYWtlZmlsZSBzbmlwcGV0IGRlZmluZXMgYSB2YXJpYWJsZSB1c2VkIGJ5IG90aGVyCi0tIyBnbnVsaWIgTWFrZWZpbGUgc25pcHBldHMsIGl0IG11c3QgYmUgcHJlc2VudCBpbiBhbGwgTWFrZWZpbGUuYW0gdGhhdAotLSMgbmVlZCBpdC4gVGhpcyBpcyBlbnN1cmVkIGJ5IHRoZSBhcHBsaWNhYmlsaXR5ICdhbGwnIGRlZmluZWQgYWJvdmUuCi0tCi0tX05PUkVUVVJOX0g9JCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9fTm9yZXR1cm4uaAotLQotLUVYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9fTm9yZXR1cm4uaAotLQotLSMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc25pcHBldC9fTm9yZXR1cm4KLS0KLS0jIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHNuaXBwZXQvYXJnLW5vbm51bGwKLS0KLS0jIFRoZSBCVUlMVF9TT1VSQ0VTIGNyZWF0ZWQgYnkgdGhpcyBNYWtlZmlsZSBzbmlwcGV0IGFyZSBub3QgdXNlZCB2aWEgI2luY2x1ZGUKLS0jIHN0YXRlbWVudHMgYnV0IHRocm91Z2ggZGlyZWN0IGZpbGUgcmVmZXJlbmNlLiBUaGVyZWZvcmUgdGhpcyBzbmlwcGV0IG11c3QgYmUKLS0jIHByZXNlbnQgaW4gYWxsIE1ha2VmaWxlLmFtIHRoYXQgbmVlZCBpdC4gVGhpcyBpcyBlbnN1cmVkIGJ5IHRoZSBhcHBsaWNhYmlsaXR5Ci0tIyAnYWxsJyBkZWZpbmVkIGFib3ZlLgotLQotLUJVSUxUX1NPVVJDRVMgKz0gYXJnLW5vbm51bGwuaAotLSMgVGhlIGFyZy1ub25udWxsLmggdGhhdCBnZXRzIGluc2VydGVkIGludG8gZ2VuZXJhdGVkIC5oIGZpbGVzIGlzIHRoZSBzYW1lIGFzCi0tIyBidWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oLCBleGNlcHQgdGhhdCBpdCBoYXMgdGhlIGNvcHlyaWdodCBoZWFkZXIgY3V0Ci0tIyBvZmYuCi0tYXJnLW5vbm51bGwuaDogJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oCi0tCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCi0tCXNlZCAtbiAtZSAnL0dMX0FSR19OT05OVUxMLywkJHAnIFwKLS0JICA8ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51bGwuaCBcCi0tCSAgPiAkQC10ICYmIFwKLS0JbXYgJEAtdCAkQAotLU1PU1RMWUNMRUFORklMRVMgKz0gYXJnLW5vbm51bGwuaCBhcmctbm9ubnVsbC5oLXQKLS0KLS1BUkdfTk9OTlVMTF9IPWFyZy1ub25udWxsLmgKLS0KLS1FWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51bGwuaAotLQotLSMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc25pcHBldC9hcmctbm9ubnVsbAotLQotLSMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc25pcHBldC9jKytkZWZzCi0tCi0tIyBUaGUgQlVJTFRfU09VUkNFUyBjcmVhdGVkIGJ5IHRoaXMgTWFrZWZpbGUgc25pcHBldCBhcmUgbm90IHVzZWQgdmlhICNpbmNsdWRlCi0tIyBzdGF0ZW1lbnRzIGJ1dCB0aHJvdWdoIGRpcmVjdCBmaWxlIHJlZmVyZW5jZS4gVGhlcmVmb3JlIHRoaXMgc25pcHBldCBtdXN0IGJlCi0tIyBwcmVzZW50IGluIGFsbCBNYWtlZmlsZS5hbSB0aGF0IG5lZWQgaXQuIFRoaXMgaXMgZW5zdXJlZCBieSB0aGUgYXBwbGljYWJpbGl0eQotLSMgJ2FsbCcgZGVmaW5lZCBhYm92ZS4KLS0KLS1CVUlMVF9TT1VSQ0VTICs9IGMrK2RlZnMuaAotLSMgVGhlIGMrK2RlZnMuaCB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byBnZW5lcmF0ZWQgLmggZmlsZXMgaXMgdGhlIHNhbWUgYXMKLS0jIGJ1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaCwgZXhjZXB0IHRoYXQgaXQgaGFzIHRoZSBjb3B5cmlnaHQgaGVhZGVyIGN1dCBvZmYuCi0tYysrZGVmcy5oOiAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaAotLQkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAotLQlzZWQgLW4gLWUgJy9fR0xfQ1hYREVGUy8sJCRwJyBcCi0tCSAgPCAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaCBcCi0tCSAgPiAkQC10ICYmIFwKLS0JbXYgJEAtdCAkQAotLU1PU1RMWUNMRUFORklMRVMgKz0gYysrZGVmcy5oIGMrK2RlZnMuaC10Ci0tCi0tQ1hYREVGU19IPWMrK2RlZnMuaAotLQotLUVYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmgKLS0KLS0jIyBlbmQgICBnbnVsaWIgbW9kdWxlIHNuaXBwZXQvYysrZGVmcwotLQotLSMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc25pcHBldC93YXJuLW9uLXVzZQotLQotLUJVSUxUX1NPVVJDRVMgKz0gd2Fybi1vbi11c2UuaAotLSMgVGhlIHdhcm4tb24tdXNlLmggdGhhdCBnZXRzIGluc2VydGVkIGludG8gZ2VuZXJhdGVkIC5oIGZpbGVzIGlzIHRoZSBzYW1lIGFzCi0tIyBidWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oLCBleGNlcHQgdGhhdCBpdCBoYXMgdGhlIGNvcHlyaWdodCBoZWFkZXIgY3V0Ci0tIyBvZmYuCi0td2Fybi1vbi11c2UuaDogJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oCi0tCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCi0tCXNlZCAtbiAtZSAnL14uaWZuZGVmLywkJHAnIFwKLS0JICA8ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvd2Fybi1vbi11c2UuaCBcCi0tCSAgPiAkQC10ICYmIFwKLS0JbXYgJEAtdCAkQAotLU1PU1RMWUNMRUFORklMRVMgKz0gd2Fybi1vbi11c2UuaCB3YXJuLW9uLXVzZS5oLXQKLS0KLS1XQVJOX09OX1VTRV9IPXdhcm4tb24tdXNlLmgKLS0KLS1FWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvd2Fybi1vbi11c2UuaAotLQotLSMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc25pcHBldC93YXJuLW9uLXVzZQotLQotICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc3RhdAotIAotIAotQEAgLTQ5MSw4ICs0NTMsNyBAQCBpZiBHTF9HRU5FUkFURV9TVERERUZfSAotIHN0ZGRlZi5oOiBzdGRkZWYuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAotIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKLS0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKLS0JICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCi0rCSAgc2VkIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAotIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKLSAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCi0gCSAgICAgIC1lICdzfEAnJ05FWFRfU1REREVGX0gnJ0B8JChORVhUX1NURERFRl9IKXxnJyBcCi1AQCAtNTIxLDggKzQ4Miw3IEBAIGlmIEdMX0dFTkVSQVRFX1NURElOVF9ICi0gc3RkaW50Lmg6IHN0ZGludC5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0gCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCi0gCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKLS0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKLS0JICAgICAgLWUgJ3MvQCcnSEFWRV9TVERJTlRfSCcnQC8kKEhBVkVfU1RESU5UX0gpL2cnIFwKLSsJICBzZWQgLWUgJ3MvQCcnSEFWRV9TVERJTlRfSCcnQC8kKEhBVkVfU1RESU5UX0gpL2cnIFwKLSAJICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCi0gCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAotIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKLUBAIC01NzAsNjMgKzUzMCw2MiBAQCBCVUlMVF9TT1VSQ0VTICs9IHN0ZGlvLmgKLSBzdGRpby5oOiBzdGRpby5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKLSAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKLSAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJyAmJiBcCi0tCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCi0tCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAotKwkgIHNlZCAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKLSAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCi0gCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAotIAkgICAgICAtZSAnc3xAJydORVhUX1NURElPX0gnJ0B8JChORVhUX1NURElPX0gpfGcnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX0RQUklOVEYnJ0AvJChHTlVMSUJfRFBSSU5URikvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfRkNMT1NFJydALyQoR05VTElCX0ZDTE9TRSkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfRkZMVVNIJydALyQoR05VTElCX0ZGTFVTSCkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfRkdFVEMnJ0AvJChHTlVMSUJfRkdFVEMpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZHRVRTJydALyQoR05VTElCX0ZHRVRTKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GT1BFTicnQC8kKEdOVUxJQl9GT1BFTikvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlBSSU5URicnQC8kKEdOVUxJQl9GUFJJTlRGKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GUFJJTlRGX1BPU0lYJydALyQoR05VTElCX0ZQUklOVEZfUE9TSVgpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZQVVJHRScnQC8kKEdOVUxJQl9GUFVSR0UpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZQVVRDJydALyQoR05VTElCX0ZQVVRDKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GUFVUUycnQC8kKEdOVUxJQl9GUFVUUykvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlJFQUQnJ0AvJChHTlVMSUJfRlJFQUQpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZSRU9QRU4nJ0AvJChHTlVMSUJfRlJFT1BFTikvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlNDQU5GJydALyQoR05VTElCX0ZTQ0FORikvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlNFRUsnJ0AvJChHTlVMSUJfRlNFRUspL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZTRUVLTycnQC8kKEdOVUxJQl9GU0VFS08pL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZURUxMJydALyQoR05VTElCX0ZURUxMKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GVEVMTE8nJ0AvJChHTlVMSUJfRlRFTExPKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GV1JJVEUnJ0AvJChHTlVMSUJfRldSSVRFKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRDJydALyQoR05VTElCX0dFVEMpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVENIQVInJ0AvJChHTlVMSUJfR0VUQ0hBUikvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUREVMSU0nJ0AvJChHTlVMSUJfR0VUREVMSU0pL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVExJTkUnJ0AvJChHTlVMSUJfR0VUTElORSkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUUycnQC8kKEdOVUxJQl9HRVRTKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9PQlNUQUNLX1BSSU5URicnQC8kKEdOVUxJQl9PQlNUQUNLX1BSSU5URikvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVgnJ0AvJChHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVgpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BFUlJPUicnQC8kKEdOVUxJQl9QRVJST1IpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BPUEVOJydALyQoR05VTElCX1BPUEVOKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QUklOVEYnJ0AvJChHTlVMSUJfUFJJTlRGKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QUklOVEZfUE9TSVgnJ0AvJChHTlVMSUJfUFJJTlRGX1BPU0lYKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QVVRDJydALyQoR05VTElCX1BVVEMpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BVVENIQVInJ0AvJChHTlVMSUJfUFVUQ0hBUikvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfUFVUUycnQC8kKEdOVUxJQl9QVVRTKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRU1PVkUnJ0AvJChHTlVMSUJfUkVNT1ZFKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRU5BTUUnJ0AvJChHTlVMSUJfUkVOQU1FKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRU5BTUVBVCcnQC8kKEdOVUxJQl9SRU5BTUVBVCkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfU0NBTkYnJ0AvJChHTlVMSUJfU0NBTkYpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NOUFJJTlRGJydALyQoR05VTElCX1NOUFJJTlRGKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TUFJJTlRGX1BPU0lYJydALyQoR05VTElCX1NQUklOVEZfUE9TSVgpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkcnJ0AvJChHTlVMSUJfU1RESU9fSF9OT05CTE9DS0lORykvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RESU9fSF9TSUdQSVBFJydALyQoR05VTElCX1NURElPX0hfU0lHUElQRSkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfVE1QRklMRScnQC8kKEdOVUxJQl9UTVBGSUxFKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WQVNQUklOVEYnJ0AvJChHTlVMSUJfVkFTUFJJTlRGKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WRFBSSU5URicnQC8kKEdOVUxJQl9WRFBSSU5URikvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfVkZQUklOVEYnJ0AvJChHTlVMSUJfVkZQUklOVEYpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZGUFJJTlRGX1BPU0lYJydALyQoR05VTElCX1ZGUFJJTlRGX1BPU0lYKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WRlNDQU5GJydALyQoR05VTElCX1ZGU0NBTkYpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZTQ0FORicnQC8kKEdOVUxJQl9WU0NBTkYpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZQUklOVEYnJ0AvJChHTlVMSUJfVlBSSU5URikvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfVlBSSU5URl9QT1NJWCcnQC8kKEdOVUxJQl9WUFJJTlRGX1BPU0lYKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WU05QUklOVEYnJ0AvJChHTlVMSUJfVlNOUFJJTlRGKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WU1BSSU5URl9QT1NJWCcnQC8kKEdOVUxJQl9WU1BSSU5URl9QT1NJWCkvZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRFBSSU5URicnQHwkKEdOVUxJQl9EUFJJTlRGKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GQ0xPU0UnJ0B8JChHTlVMSUJfRkNMT1NFKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GRkxVU0gnJ0B8JChHTlVMSUJfRkZMVVNIKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GR0VUQycnQHwkKEdOVUxJQl9GR0VUQyl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRkdFVFMnJ0B8JChHTlVMSUJfRkdFVFMpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZPUEVOJydAfCQoR05VTElCX0ZPUEVOKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GUFJJTlRGJydAfCQoR05VTElCX0ZQUklOVEYpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZQUklOVEZfUE9TSVgnJ0B8JChHTlVMSUJfRlBSSU5URl9QT1NJWCl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlBVUkdFJydAfCQoR05VTElCX0ZQVVJHRSl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlBVVEMnJ0B8JChHTlVMSUJfRlBVVEMpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZQVVRTJydAfCQoR05VTElCX0ZQVVRTKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GUkVBRCcnQHwkKEdOVUxJQl9GUkVBRCl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlJFT1BFTicnQHwkKEdOVUxJQl9GUkVPUEVOKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GU0NBTkYnJ0B8JChHTlVMSUJfRlNDQU5GKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GU0VFSycnQHwkKEdOVUxJQl9GU0VFSyl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlNFRUtPJydAfCQoR05VTElCX0ZTRUVLTyl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlRFTEwnJ0B8JChHTlVMSUJfRlRFTEwpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZURUxMTycnQHwkKEdOVUxJQl9GVEVMTE8pfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZXUklURScnQHwkKEdOVUxJQl9GV1JJVEUpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVEMnJ0B8JChHTlVMSUJfR0VUQyl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUQ0hBUicnQHwkKEdOVUxJQl9HRVRDSEFSKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRERUxJTScnQHwkKEdOVUxJQl9HRVRERUxJTSl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUTElORScnQHwkKEdOVUxJQl9HRVRMSU5FKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRTJydAfCQoR05VTElCX0dFVFMpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX09CU1RBQ0tfUFJJTlRGJydAfCQoR05VTElCX09CU1RBQ0tfUFJJTlRGKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWCcnQHwkKEdOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWCl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUEVSUk9SJydAfCQoR05VTElCX1BFUlJPUil8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUE9QRU4nJ0B8JChHTlVMSUJfUE9QRU4pfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1BSSU5URicnQHwkKEdOVUxJQl9QUklOVEYpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1BSSU5URl9QT1NJWCcnQHwkKEdOVUxJQl9QUklOVEZfUE9TSVgpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1BVVEMnJ0B8JChHTlVMSUJfUFVUQyl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUFVUQ0hBUicnQHwkKEdOVUxJQl9QVVRDSEFSKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QVVRTJydAfCQoR05VTElCX1BVVFMpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1JFTU9WRScnQHwkKEdOVUxJQl9SRU1PVkUpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1JFTkFNRScnQHwkKEdOVUxJQl9SRU5BTUUpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1JFTkFNRUFUJydAfCQoR05VTElCX1JFTkFNRUFUKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TQ0FORicnQHwkKEdOVUxJQl9TQ0FORil8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU05QUklOVEYnJ0B8JChHTlVMSUJfU05QUklOVEYpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1NQUklOVEZfUE9TSVgnJ0B8JChHTlVMSUJfU1BSSU5URl9QT1NJWCl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RESU9fSF9OT05CTE9DS0lORycnQHwkKEdOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVERJT19IX1NJR1BJUEUnJ0B8JChHTlVMSUJfU1RESU9fSF9TSUdQSVBFKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9UTVBGSUxFJydAfCQoR05VTElCX1RNUEZJTEUpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1ZBU1BSSU5URicnQHwkKEdOVUxJQl9WQVNQUklOVEYpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1ZEUFJJTlRGJydAfCQoR05VTElCX1ZEUFJJTlRGKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9WRlBSSU5URicnQHwkKEdOVUxJQl9WRlBSSU5URil8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVkZQUklOVEZfUE9TSVgnJ0B8JChHTlVMSUJfVkZQUklOVEZfUE9TSVgpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1ZGU0NBTkYnJ0B8JChHTlVMSUJfVkZTQ0FORil8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVlNDQU5GJydAfCQoR05VTElCX1ZTQ0FORil8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVlBSSU5URicnQHwkKEdOVUxJQl9WUFJJTlRGKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9WUFJJTlRGX1BPU0lYJydAfCQoR05VTElCX1ZQUklOVEZfUE9TSVgpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1ZTTlBSSU5URicnQHwkKEdOVUxJQl9WU05QUklOVEYpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1ZTUFJJTlRGX1BPU0lYJydAfCQoR05VTElCX1ZTUFJJTlRGX1BPU0lYKXxnJyBcCi0gCSAgICAgIDwgJChzcmNkaXIpL3N0ZGlvLmluLmggfCBcCi0gCSAgc2VkIC1lICdzfEAnJ0hBVkVfREVDTF9GUFVSR0UnJ0B8JChIQVZFX0RFQ0xfRlBVUkdFKXxnJyBcCi0gCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9GU0VFS08nJ0B8JChIQVZFX0RFQ0xfRlNFRUtPKXxnJyBcCi1AQCAtNjkxLDQzICs2NTAsNDEgQEAgQlVJTFRfU09VUkNFUyArPSBzdGRsaWIuaAotIAotICMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8c3RkbGliLmg+IHdoZW4gdGhlIHN5c3RlbQotICMgZG9lc24ndCBoYXZlIG9uZSB0aGF0IHdvcmtzIHdpdGggdGhlIGdpdmVuIGNvbXBpbGVyLgotLXN0ZGxpYi5oOiBzdGRsaWIuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgXAotLSAgJChfTk9SRVRVUk5fSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCi0rc3RkbGliLmg6IHN0ZGxpYi5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKLSAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKLSAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJyAmJiBcCi0tCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCi0tCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAotKwkgIHNlZCAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKLSAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCi0gCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAotIAkgICAgICAtZSAnc3xAJydORVhUX1NURExJQl9IJydAfCQoTkVYVF9TVERMSUJfSCl8ZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfX0VYSVQnJ0AvJChHTlVMSUJfX0VYSVQpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX0FUT0xMJydALyQoR05VTElCX0FUT0xMKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9DQUxMT0NfUE9TSVgnJ0AvJChHTlVMSUJfQ0FMTE9DX1BPU0lYKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9DQU5PTklDQUxJWkVfRklMRV9OQU1FJydALyQoR05VTElCX0NBTk9OSUNBTElaRV9GSUxFX05BTUUpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVExPQURBVkcnJ0AvJChHTlVMSUJfR0VUTE9BREFWRykvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUU1VCT1BUJydALyQoR05VTElCX0dFVFNVQk9QVCkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfR1JBTlRQVCcnQC8kKEdOVUxJQl9HUkFOVFBUKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQUxMT0NfUE9TSVgnJ0AvJChHTlVMSUJfTUFMTE9DX1BPU0lYKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlRPV0MnJ0AvJChHTlVMSUJfTUJUT1dDKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS0RURU1QJydALyQoR05VTElCX01LRFRFTVApL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LT1NURU1QJydALyQoR05VTElCX01LT1NURU1QKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS09TVEVNUFMnJ0AvJChHTlVMSUJfTUtPU1RFTVBTKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS1NURU1QJydALyQoR05VTElCX01LU1RFTVApL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LU1RFTVBTJydALyQoR05VTElCX01LU1RFTVBTKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QVFNOQU1FJydALyQoR05VTElCX1BUU05BTUUpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BVVEVOVicnQC8kKEdOVUxJQl9QVVRFTlYpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JBTkRPTV9SJydALyQoR05VTElCX1JBTkRPTV9SKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRUFMTE9DX1BPU0lYJydALyQoR05VTElCX1JFQUxMT0NfUE9TSVgpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JFQUxQQVRIJydALyQoR05VTElCX1JFQUxQQVRIKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SUE1BVENIJydALyQoR05VTElCX1JQTUFUQ0gpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NFVEVOVicnQC8kKEdOVUxJQl9TRVRFTlYpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlRPRCcnQC8kKEdOVUxJQl9TVFJUT0QpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlRPTEwnJ0AvJChHTlVMSUJfU1RSVE9MTCkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSVE9VTEwnJ0AvJChHTlVMSUJfU1RSVE9VTEwpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NZU1RFTV9QT1NJWCcnQC8kKEdOVUxJQl9TWVNURU1fUE9TSVgpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1VOTE9DS1BUJydALyQoR05VTElCX1VOTE9DS1BUKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9VTlNFVEVOVicnQC8kKEdOVUxJQl9VTlNFVEVOVikvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfV0NUT01CJydALyQoR05VTElCX1dDVE9NQikvZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfX0VYSVQnJ0B8JChHTlVMSUJfX0VYSVQpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX0FUT0xMJydAfCQoR05VTElCX0FUT0xMKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9DQUxMT0NfUE9TSVgnJ0B8JChHTlVMSUJfQ0FMTE9DX1BPU0lYKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9DQU5PTklDQUxJWkVfRklMRV9OQU1FJydAfCQoR05VTElCX0NBTk9OSUNBTElaRV9GSUxFX05BTUUpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVExPQURBVkcnJ0B8JChHTlVMSUJfR0VUTE9BREFWRyl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUU1VCT1BUJydAfCQoR05VTElCX0dFVFNVQk9QVCl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR1JBTlRQVCcnQHwkKEdOVUxJQl9HUkFOVFBUKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQUxMT0NfUE9TSVgnJ0B8JChHTlVMSUJfTUFMTE9DX1BPU0lYKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlRPV0MnJ0B8JChHTlVMSUJfTUJUT1dDKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NS0RURU1QJydAfCQoR05VTElCX01LRFRFTVApfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX01LT1NURU1QJydAfCQoR05VTElCX01LT1NURU1QKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NS09TVEVNUFMnJ0B8JChHTlVMSUJfTUtPU1RFTVBTKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NS1NURU1QJydAfCQoR05VTElCX01LU1RFTVApfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX01LU1RFTVBTJydAfCQoR05VTElCX01LU1RFTVBTKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QVFNOQU1FJydAfCQoR05VTElCX1BUU05BTUUpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1BVVEVOVicnQHwkKEdOVUxJQl9QVVRFTlYpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1JBTkRPTV9SJydAfCQoR05VTElCX1JBTkRPTV9SKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SRUFMTE9DX1BPU0lYJydAfCQoR05VTElCX1JFQUxMT0NfUE9TSVgpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1JFQUxQQVRIJydAfCQoR05VTElCX1JFQUxQQVRIKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SUE1BVENIJydAfCQoR05VTElCX1JQTUFUQ0gpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1NFVEVOVicnQHwkKEdOVUxJQl9TRVRFTlYpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUlRPRCcnQHwkKEdOVUxJQl9TVFJUT0QpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUlRPTEwnJ0B8JChHTlVMSUJfU1RSVE9MTCl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSVE9VTEwnJ0B8JChHTlVMSUJfU1RSVE9VTEwpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1NZU1RFTV9QT1NJWCcnQHwkKEdOVUxJQl9TWVNURU1fUE9TSVgpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1VOTE9DS1BUJydAfCQoR05VTElCX1VOTE9DS1BUKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9VTlNFVEVOVicnQHwkKEdOVUxJQl9VTlNFVEVOVil8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfV0NUT01CJydAfCQoR05VTElCX1dDVE9NQil8ZycgXAotIAkgICAgICA8ICQoc3JjZGlyKS9zdGRsaWIuaW4uaCB8IFwKLSAJICBzZWQgLWUgJ3N8QCcnSEFWRV9fRVhJVCcnQHwkKEhBVkVfX0VYSVQpfGcnIFwKLSAJICAgICAgLWUgJ3N8QCcnSEFWRV9BVE9MTCcnQHwkKEhBVkVfQVRPTEwpfGcnIFwKLUBAIC03NjYsNyArNzIzLDYgQEAgc3RkbGliLmg6IHN0ZGxpYi5pbi5oICQodG9wX2J1aWxkZGlyKS9jbwotIAkgICAgICAtZSAnc3xAJydSRVBMQUNFX1VOU0VURU5WJydAfCQoUkVQTEFDRV9VTlNFVEVOVil8ZycgXAotIAkgICAgICAtZSAnc3xAJydSRVBMQUNFX1dDVE9NQicnQHwkKFJFUExBQ0VfV0NUT01CKXxnJyBcCi0gCSAgICAgIC1lICcvZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTC9yICQoQ1hYREVGU19IKScgXAotLQkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX05vcmV0dXJuL3IgJChfTk9SRVRVUk5fSCknIFwKLSAJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTC9yICQoQVJHX05PTk5VTExfSCknIFwKLSAJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRS9yICQoV0FSTl9PTl9VU0VfSCknOyBcCi0gCX0gPiAkQC10ICYmIFwKLUBAIC03OTMsMTUgKzc0OSw2IEBAIEVYVFJBX2xpYmljcnRfYV9TT1VSQ0VTICs9IHN0cmVycm9yLmMKLSAKLSAjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHN0cmVycm9yCi0gCi0tIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzdHJlcnJvci1vdmVycmlkZQotLQotLQotLUVYVFJBX0RJU1QgKz0gc3RyZXJyb3Itb3ZlcnJpZGUuYyBzdHJlcnJvci1vdmVycmlkZS5oCi0tCi0tRVhUUkFfbGliaWNydF9hX1NPVVJDRVMgKz0gc3RyZXJyb3Itb3ZlcnJpZGUuYwotLQotLSMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc3RyZXJyb3Itb3ZlcnJpZGUKLS0KLSAjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN0cmluZwotIAotIEJVSUxUX1NPVVJDRVMgKz0gc3RyaW5nLmgKLUBAIC04MTEsNTIgKzc1OCw0NyBAQCBCVUlMVF9TT1VSQ0VTICs9IHN0cmluZy5oCi0gc3RyaW5nLmg6IHN0cmluZy5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKLSAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKLSAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJyAmJiBcCi0tCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCi0tCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAotKwkgIHNlZCAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKLSAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCi0gCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAotIAkgICAgICAtZSAnc3xAJydORVhUX1NUUklOR19IJydAfCQoTkVYVF9TVFJJTkdfSCl8ZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfRkZTTCcnQC8kKEdOVUxJQl9GRlNMKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GRlNMTCcnQC8kKEdOVUxJQl9GRlNMTCkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTTEVOJydALyQoR05VTElCX01CU0xFTikvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTTkxFTicnQC8kKEdOVUxJQl9NQlNOTEVOKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNDSFInJ0AvJChHTlVMSUJfTUJTQ0hSKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNSQ0hSJydALyQoR05VTElCX01CU1JDSFIpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU1NUUicnQC8kKEdOVUxJQl9NQlNTVFIpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU0NBU0VDTVAnJ0AvJChHTlVMSUJfTUJTQ0FTRUNNUCkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTTkNBU0VDTVAnJ0AvJChHTlVMSUJfTUJTTkNBU0VDTVApL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU1BDQVNFQ01QJydALyQoR05VTElCX01CU1BDQVNFQ01QKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNDQVNFU1RSJydALyQoR05VTElCX01CU0NBU0VTVFIpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU0NTUE4nJ0AvJChHTlVMSUJfTUJTQ1NQTikvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTUEJSSycnQC8kKEdOVUxJQl9NQlNQQlJLKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNTUE4nJ0AvJChHTlVMSUJfTUJTU1BOKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNTRVAnJ0AvJChHTlVMSUJfTUJTU0VQKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNUT0tfUicnQC8kKEdOVUxJQl9NQlNUT0tfUikvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUVNQ0hSJydALyQoR05VTElCX01FTUNIUikvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUVNTUVNJydALyQoR05VTElCX01FTU1FTSkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUVNUENQWScnQC8kKEdOVUxJQl9NRU1QQ1BZKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NRU1SQ0hSJydALyQoR05VTElCX01FTVJDSFIpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JBV01FTUNIUicnQC8kKEdOVUxJQl9SQVdNRU1DSFIpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUENQWScnQC8kKEdOVUxJQl9TVFBDUFkpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUE5DUFknJ0AvJChHTlVMSUJfU1RQTkNQWSkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSQ0hSTlVMJydALyQoR05VTElCX1NUUkNIUk5VTCkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSRFVQJydALyQoR05VTElCX1NUUkRVUCkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSTkNBVCcnQC8kKEdOVUxJQl9TVFJOQ0FUKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJORFVQJydALyQoR05VTElCX1NUUk5EVVApL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUk5MRU4nJ0AvJChHTlVMSUJfU1RSTkxFTikvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSUEJSSycnQC8kKEdOVUxJQl9TVFJQQlJLKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJTRVAnJ0AvJChHTlVMSUJfU1RSU0VQKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJTVFInJ0AvJChHTlVMSUJfU1RSU1RSKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJDQVNFU1RSJydALyQoR05VTElCX1NUUkNBU0VTVFIpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlRPS19SJydALyQoR05VTElCX1NUUlRPS19SKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJFUlJPUicnQC8kKEdOVUxJQl9TVFJFUlJPUikvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSRVJST1JfUicnQC8kKEdOVUxJQl9TVFJFUlJPUl9SKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJTSUdOQUwnJ0AvJChHTlVMSUJfU1RSU0lHTkFMKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJWRVJTQ01QJydALyQoR05VTElCX1NUUlZFUlNDTVApL2cnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU0xFTicnQHwkKEdOVUxJQl9NQlNMRU4pfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU05MRU4nJ0B8JChHTlVMSUJfTUJTTkxFTil8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTQ0hSJydAfCQoR05VTElCX01CU0NIUil8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTUkNIUicnQHwkKEdOVUxJQl9NQlNSQ0hSKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNTVFInJ0B8JChHTlVMSUJfTUJTU1RSKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNDQVNFQ01QJydAfCQoR05VTElCX01CU0NBU0VDTVApfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU05DQVNFQ01QJydAfCQoR05VTElCX01CU05DQVNFQ01QKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNQQ0FTRUNNUCcnQHwkKEdOVUxJQl9NQlNQQ0FTRUNNUCl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTQ0FTRVNUUicnQHwkKEdOVUxJQl9NQlNDQVNFU1RSKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNDU1BOJydAfCQoR05VTElCX01CU0NTUE4pfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU1BCUksnJ0B8JChHTlVMSUJfTUJTUEJSSyl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTU1BOJydAfCQoR05VTElCX01CU1NQTil8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTU0VQJydAfCQoR05VTElCX01CU1NFUCl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTVE9LX1InJ0B8JChHTlVMSUJfTUJTVE9LX1IpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX01FTUNIUicnQHwkKEdOVUxJQl9NRU1DSFIpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX01FTU1FTScnQHwkKEdOVUxJQl9NRU1NRU0pfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX01FTVBDUFknJ0B8JChHTlVMSUJfTUVNUENQWSl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUVNUkNIUicnQHwkKEdOVUxJQl9NRU1SQ0hSKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SQVdNRU1DSFInJ0B8JChHTlVMSUJfUkFXTUVNQ0hSKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFBDUFknJ0B8JChHTlVMSUJfU1RQQ1BZKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFBOQ1BZJydAfCQoR05VTElCX1NUUE5DUFkpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUkNIUk5VTCcnQHwkKEdOVUxJQl9TVFJDSFJOVUwpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUkRVUCcnQHwkKEdOVUxJQl9TVFJEVVApfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUk5DQVQnJ0B8JChHTlVMSUJfU1RSTkNBVCl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSTkRVUCcnQHwkKEdOVUxJQl9TVFJORFVQKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJOTEVOJydAfCQoR05VTElCX1NUUk5MRU4pfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUlBCUksnJ0B8JChHTlVMSUJfU1RSUEJSSyl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSU0VQJydAfCQoR05VTElCX1NUUlNFUCl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSU1RSJydAfCQoR05VTElCX1NUUlNUUil8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSQ0FTRVNUUicnQHwkKEdOVUxJQl9TVFJDQVNFU1RSKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJUT0tfUicnQHwkKEdOVUxJQl9TVFJUT0tfUil8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSRVJST1InJ0B8JChHTlVMSUJfU1RSRVJST1IpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUkVSUk9SX1InJ0B8JChHTlVMSUJfU1RSRVJST1JfUil8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSU0lHTkFMJydAfCQoR05VTElCX1NUUlNJR05BTCl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSVkVSU0NNUCcnQHwkKEdOVUxJQl9TVFJWRVJTQ01QKXxnJyBcCi0gCSAgICAgIDwgJChzcmNkaXIpL3N0cmluZy5pbi5oIHwgXAotLQkgIHNlZCAtZSAnc3xAJydIQVZFX0ZGU0wnJ0B8JChIQVZFX0ZGU0wpfGcnIFwKLS0JICAgICAgLWUgJ3N8QCcnSEFWRV9GRlNMTCcnQHwkKEhBVkVfRkZTTEwpfGcnIFwKLS0JICAgICAgLWUgJ3N8QCcnSEFWRV9NQlNMRU4nJ0B8JChIQVZFX01CU0xFTil8ZycgXAotKwkgIHNlZCAtZSAnc3xAJydIQVZFX01CU0xFTicnQHwkKEhBVkVfTUJTTEVOKXxnJyBcCi0gCSAgICAgIC1lICdzfEAnJ0hBVkVfTUVNQ0hSJydAfCQoSEFWRV9NRU1DSFIpfGcnIFwKLSAJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX01FTU1FTScnQHwkKEhBVkVfREVDTF9NRU1NRU0pfGcnIFwKLSAJICAgICAgLWUgJ3N8QCcnSEFWRV9NRU1QQ1BZJydAfCQoSEFWRV9NRU1QQ1BZKXxnJyBcCi1AQCAtOTEyLDIzICs4NTQsMjIgQEAgc3lzL3N0YXQuaDogc3lzX3N0YXQuaW4uaCAkKHRvcF9idWlsZGRpcgotIAkkKEFNX1ZfYXQpJChNS0RJUl9QKSBzeXMKLSAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKLSAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAotLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAotLQkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKLSsJICBzZWQgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCi0gCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAotIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKLSAJICAgICAgLWUgJ3N8QCcnTkVYVF9TWVNfU1RBVF9IJydAfCQoTkVYVF9TWVNfU1RBVF9IKXxnJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GQ0hNT0RBVCcnQC8kKEdOVUxJQl9GQ0hNT0RBVCkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlNUQVRBVCcnQC8kKEdOVUxJQl9GU1RBVEFUKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GVVRJTUVOUycnQC8kKEdOVUxJQl9GVVRJTUVOUykvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfTENITU9EJydALyQoR05VTElCX0xDSE1PRCkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfTFNUQVQnJ0AvJChHTlVMSUJfTFNUQVQpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LRElSQVQnJ0AvJChHTlVMSUJfTUtESVJBVCkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtGSUZPJydALyQoR05VTElCX01LRklGTykvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtGSUZPQVQnJ0AvJChHTlVMSUJfTUtGSUZPQVQpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LTk9EJydALyQoR05VTElCX01LTk9EKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS05PREFUJydALyQoR05VTElCX01LTk9EQVQpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUQVQnJ0AvJChHTlVMSUJfU1RBVCkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfVVRJTUVOU0FUJydALyQoR05VTElCX1VUSU1FTlNBVCkvZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRkNITU9EQVQnJ0B8JChHTlVMSUJfRkNITU9EQVQpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZTVEFUQVQnJ0B8JChHTlVMSUJfRlNUQVRBVCl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlVUSU1FTlMnJ0B8JChHTlVMSUJfRlVUSU1FTlMpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX0xDSE1PRCcnQHwkKEdOVUxJQl9MQ0hNT0QpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX0xTVEFUJydAfCQoR05VTElCX0xTVEFUKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NS0RJUkFUJydAfCQoR05VTElCX01LRElSQVQpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX01LRklGTycnQHwkKEdOVUxJQl9NS0ZJRk8pfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX01LRklGT0FUJydAfCQoR05VTElCX01LRklGT0FUKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NS05PRCcnQHwkKEdOVUxJQl9NS05PRCl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtOT0RBVCcnQHwkKEdOVUxJQl9NS05PREFUKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVEFUJydAfCQoR05VTElCX1NUQVQpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1VUSU1FTlNBVCcnQHwkKEdOVUxJQl9VVElNRU5TQVQpfGcnIFwKLSAJICAgICAgLWUgJ3N8QCcnSEFWRV9GQ0hNT0RBVCcnQHwkKEhBVkVfRkNITU9EQVQpfGcnIFwKLSAJICAgICAgLWUgJ3N8QCcnSEFWRV9GU1RBVEFUJydAfCQoSEFWRV9GU1RBVEFUKXxnJyBcCi0gCSAgICAgIC1lICdzfEAnJ0hBVkVfRlVUSU1FTlMnJ0B8JChIQVZFX0ZVVElNRU5TKXxnJyBcCi1AQCAtOTcxLDE2ICs5MTIsMTUgQEAgQlVJTFRfU09VUkNFUyArPSB0aW1lLmgKLSB0aW1lLmg6IHRpbWUuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCi0gCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCi0gCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLycgJiYgXAotLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAotLQkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKLSsJICBzZWQgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCi0gCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAotIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKLSAJICAgICAgLWUgJ3N8QCcnTkVYVF9USU1FX0gnJ0B8JChORVhUX1RJTUVfSCl8ZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtUSU1FJydALyQoR05VTElCX01LVElNRSkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfTkFOT1NMRUVQJydALyQoR05VTElCX05BTk9TTEVFUCkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSUFRJTUUnJ0AvJChHTlVMSUJfU1RSUFRJTUUpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1RJTUVHTScnQC8kKEdOVUxJQl9USU1FR00pL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1RJTUVfUicnQC8kKEdOVUxJQl9USU1FX1IpL2cnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX01LVElNRScnQHwkKEdOVUxJQl9NS1RJTUUpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX05BTk9TTEVFUCcnQHwkKEdOVUxJQl9OQU5PU0xFRVApfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUlBUSU1FJydAfCQoR05VTElCX1NUUlBUSU1FKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9USU1FR00nJ0B8JChHTlVMSUJfVElNRUdNKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9USU1FX1InJ0B8JChHTlVMSUJfVElNRV9SKXxnJyBcCi0gCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9MT0NBTFRJTUVfUicnQHwkKEhBVkVfREVDTF9MT0NBTFRJTUVfUil8ZycgXAotIAkgICAgICAtZSAnc3xAJydIQVZFX05BTk9TTEVFUCcnQHwkKEhBVkVfTkFOT1NMRUVQKXxnJyBcCi0gCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSUFRJTUUnJ0B8JChIQVZFX1NUUlBUSU1FKXxnJyBcCi1AQCAtMTAxMyw1NiArOTUzLDU1IEBAIEJVSUxUX1NPVVJDRVMgKz0gdW5pc3RkLmgKLSB1bmlzdGQuaDogdW5pc3RkLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQotIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAotIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCi0tCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCi0tCSAgICAgIC1lICdzfEAnJ0hBVkVfVU5JU1REX0gnJ0B8JChIQVZFX1VOSVNURF9IKXxnJyBcCi0rCSAgc2VkIC1lICdzfEAnJ0hBVkVfVU5JU1REX0gnJ0B8JChIQVZFX1VOSVNURF9IKXxnJyBcCi0gCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAotIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKLSAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCi0gCSAgICAgIC1lICdzfEAnJ05FWFRfVU5JU1REX0gnJ0B8JChORVhUX1VOSVNURF9IKXxnJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9DSE9XTicnQC8kKEdOVUxJQl9DSE9XTikvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfQ0xPU0UnJ0AvJChHTlVMSUJfQ0xPU0UpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX0RVUDInJ0AvJChHTlVMSUJfRFVQMikvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfRFVQMycnQC8kKEdOVUxJQl9EVVAzKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9FTlZJUk9OJydALyQoR05VTElCX0VOVklST04pL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX0VVSURBQ0NFU1MnJ0AvJChHTlVMSUJfRVVJREFDQ0VTUykvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfRkFDQ0VTU0FUJydALyQoR05VTElCX0ZBQ0NFU1NBVCkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfRkNIRElSJydALyQoR05VTElCX0ZDSERJUikvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfRkNIT1dOQVQnJ0AvJChHTlVMSUJfRkNIT1dOQVQpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZTWU5DJydALyQoR05VTElCX0ZTWU5DKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GVFJVTkNBVEUnJ0AvJChHTlVMSUJfRlRSVU5DQVRFKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRDV0QnJ0AvJChHTlVMSUJfR0VUQ1dEKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRET01BSU5OQU1FJydALyQoR05VTElCX0dFVERPTUFJTk5BTUUpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVERUQUJMRVNJWkUnJ0AvJChHTlVMSUJfR0VURFRBQkxFU0laRSkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUR1JPVVBTJydALyQoR05VTElCX0dFVEdST1VQUykvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUSE9TVE5BTUUnJ0AvJChHTlVMSUJfR0VUSE9TVE5BTUUpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVExPR0lOJydALyQoR05VTElCX0dFVExPR0lOKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRMT0dJTl9SJydALyQoR05VTElCX0dFVExPR0lOX1IpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVFBBR0VTSVpFJydALyQoR05VTElCX0dFVFBBR0VTSVpFKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRVU0VSU0hFTEwnJ0AvJChHTlVMSUJfR0VUVVNFUlNIRUxMKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HUk9VUF9NRU1CRVInJ0AvJChHTlVMSUJfR1JPVVBfTUVNQkVSKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MQ0hPV04nJ0AvJChHTlVMSUJfTENIT1dOKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MSU5LJydALyQoR05VTElCX0xJTkspL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX0xJTktBVCcnQC8kKEdOVUxJQl9MSU5LQVQpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX0xTRUVLJydALyQoR05VTElCX0xTRUVLKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QSVBFJydALyQoR05VTElCX1BJUEUpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BJUEUyJydALyQoR05VTElCX1BJUEUyKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QUkVBRCcnQC8kKEdOVUxJQl9QUkVBRCkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfUFdSSVRFJydALyQoR05VTElCX1BXUklURSkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfUkVBRCcnQC8kKEdOVUxJQl9SRUFEKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRUFETElOSycnQC8kKEdOVUxJQl9SRUFETElOSykvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfUkVBRExJTktBVCcnQC8kKEdOVUxJQl9SRUFETElOS0FUKS9nJyBcCi0tCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9STURJUicnQC8kKEdOVUxJQl9STURJUikvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfU0xFRVAnJ0AvJChHTlVMSUJfU0xFRVApL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NZTUxJTksnJ0AvJChHTlVMSUJfU1lNTElOSykvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1lNTElOS0FUJydALyQoR05VTElCX1NZTUxJTktBVCkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfVFRZTkFNRV9SJydALyQoR05VTElCX1RUWU5BTUVfUikvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfVU5JU1REX0hfR0VUT1BUJydALyQoR05VTElCX1VOSVNURF9IX0dFVE9QVCkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfVU5JU1REX0hfTk9OQkxPQ0tJTkcnJ0AvJChHTlVMSUJfVU5JU1REX0hfTk9OQkxPQ0tJTkcpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1VOSVNURF9IX1NJR1BJUEUnJ0AvJChHTlVMSUJfVU5JU1REX0hfU0lHUElQRSkvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfVU5MSU5LJydALyQoR05VTElCX1VOTElOSykvZycgXAotLQkgICAgICAtZSAncy9AJydHTlVMSUJfVU5MSU5LQVQnJ0AvJChHTlVMSUJfVU5MSU5LQVQpL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1VTTEVFUCcnQC8kKEdOVUxJQl9VU0xFRVApL2cnIFwKLS0JICAgICAgLWUgJ3MvQCcnR05VTElCX1dSSVRFJydALyQoR05VTElCX1dSSVRFKS9nJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9DSE9XTicnQHwkKEdOVUxJQl9DSE9XTil8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfQ0xPU0UnJ0B8JChHTlVMSUJfQ0xPU0UpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX0RVUDInJ0B8JChHTlVMSUJfRFVQMil8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRFVQMycnQHwkKEdOVUxJQl9EVVAzKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9FTlZJUk9OJydAfCQoR05VTElCX0VOVklST04pfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX0VVSURBQ0NFU1MnJ0B8JChHTlVMSUJfRVVJREFDQ0VTUyl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRkFDQ0VTU0FUJydAfCQoR05VTElCX0ZBQ0NFU1NBVCl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRkNIRElSJydAfCQoR05VTElCX0ZDSERJUil8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRkNIT1dOQVQnJ0B8JChHTlVMSUJfRkNIT1dOQVQpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZTWU5DJydAfCQoR05VTElCX0ZTWU5DKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GVFJVTkNBVEUnJ0B8JChHTlVMSUJfRlRSVU5DQVRFKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRDV0QnJ0B8JChHTlVMSUJfR0VUQ1dEKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRET01BSU5OQU1FJydAfCQoR05VTElCX0dFVERPTUFJTk5BTUUpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVERUQUJMRVNJWkUnJ0B8JChHTlVMSUJfR0VURFRBQkxFU0laRSl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUR1JPVVBTJydAfCQoR05VTElCX0dFVEdST1VQUyl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUSE9TVE5BTUUnJ0B8JChHTlVMSUJfR0VUSE9TVE5BTUUpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVExPR0lOJydAfCQoR05VTElCX0dFVExPR0lOKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRMT0dJTl9SJydAfCQoR05VTElCX0dFVExPR0lOX1IpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVFBBR0VTSVpFJydAfCQoR05VTElCX0dFVFBBR0VTSVpFKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRVU0VSU0hFTEwnJ0B8JChHTlVMSUJfR0VUVVNFUlNIRUxMKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HUk9VUF9NRU1CRVInJ0B8JChHTlVMSUJfR1JPVVBfTUVNQkVSKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9MQ0hPV04nJ0B8JChHTlVMSUJfTENIT1dOKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9MSU5LJydAfCQoR05VTElCX0xJTkspfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX0xJTktBVCcnQHwkKEdOVUxJQl9MSU5LQVQpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX0xTRUVLJydAfCQoR05VTElCX0xTRUVLKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QSVBFJydAfCQoR05VTElCX1BJUEUpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1BJUEUyJydAfCQoR05VTElCX1BJUEUyKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QUkVBRCcnQHwkKEdOVUxJQl9QUkVBRCl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUFdSSVRFJydAfCQoR05VTElCX1BXUklURSl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkVBRCcnQHwkKEdOVUxJQl9SRUFEKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SRUFETElOSycnQHwkKEdOVUxJQl9SRUFETElOSyl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkVBRExJTktBVCcnQHwkKEdOVUxJQl9SRUFETElOS0FUKXxnJyBcCi0rCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9STURJUicnQHwkKEdOVUxJQl9STURJUil8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU0xFRVAnJ0B8JChHTlVMSUJfU0xFRVApfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1NZTUxJTksnJ0B8JChHTlVMSUJfU1lNTElOSyl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1lNTElOS0FUJydAfCQoR05VTElCX1NZTUxJTktBVCl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVFRZTkFNRV9SJydAfCQoR05VTElCX1RUWU5BTUVfUil8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVU5JU1REX0hfR0VUT1BUJydAfCQoR05VTElCX1VOSVNURF9IX0dFVE9QVCl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVU5JU1REX0hfTk9OQkxPQ0tJTkcnJ0B8JChHTlVMSUJfVU5JU1REX0hfTk9OQkxPQ0tJTkcpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1VOSVNURF9IX1NJR1BJUEUnJ0B8JChHTlVMSUJfVU5JU1REX0hfU0lHUElQRSl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVU5MSU5LJydAfCQoR05VTElCX1VOTElOSyl8ZycgXAotKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVU5MSU5LQVQnJ0B8JChHTlVMSUJfVU5MSU5LQVQpfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1VTTEVFUCcnQHwkKEdOVUxJQl9VU0xFRVApfGcnIFwKLSsJICAgICAgLWUgJ3N8QCcnR05VTElCX1dSSVRFJydAfCQoR05VTElCX1dSSVRFKXxnJyBcCi0gCSAgICAgIDwgJChzcmNkaXIpL3VuaXN0ZC5pbi5oIHwgXAotIAkgIHNlZCAtZSAnc3xAJydIQVZFX0NIT1dOJydAfCQoSEFWRV9DSE9XTil8ZycgXAotIAkgICAgICAtZSAnc3xAJydIQVZFX0RVUDInJ0B8JChIQVZFX0RVUDIpfGcnIFwKLUBAIC0xMTk4LDYgKzExMzcsMjUgQEAgRVhUUkFfRElTVCArPSB2ZXJpZnkuaAotIAotICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgdmVyaWZ5Ci0gCi0rIyMgYmVnaW4gZ251bGliIG1vZHVsZSB3YXJuLW9uLXVzZQotKwotK0JVSUxUX1NPVVJDRVMgKz0gd2Fybi1vbi11c2UuaAotKyMgVGhlIHdhcm4tb24tdXNlLmggdGhhdCBnZXRzIGluc2VydGVkIGludG8gZ2VuZXJhdGVkIC5oIGZpbGVzIGlzIHRoZSBzYW1lIGFzCi0rIyBidWlsZC1hdXgvd2Fybi1vbi11c2UuaCwgZXhjZXB0IHRoYXQgaXQgaGFzIHRoZSBjb3B5cmlnaHQgaGVhZGVyIGN1dCBvZmYuCi0rd2Fybi1vbi11c2UuaDogJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvd2Fybi1vbi11c2UuaAotKwkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAotKwlzZWQgLW4gLWUgJy9eLmlmbmRlZi8sJCRwJyBcCi0rCSAgPCAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC93YXJuLW9uLXVzZS5oIFwKLSsJICA+ICRALXQgJiYgXAotKwltdiAkQC10ICRACi0rTU9TVExZQ0xFQU5GSUxFUyArPSB3YXJuLW9uLXVzZS5oIHdhcm4tb24tdXNlLmgtdAotKwotK1dBUk5fT05fVVNFX0g9d2Fybi1vbi11c2UuaAotKwotK0VYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvd2Fybi1vbi11c2UuaAotKwotKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgd2Fybi1vbi11c2UKLSsKLSAjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHhhbGxvYwotIAotIGxpYmljcnRfYV9TT1VSQ0VTICs9IHhhbGxvYy5oIHhtYWxsb2MuYyB4c3RyZHVwLmMKLWRpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvcGF0aG1heC5oIGxpYmljb252LTEuMTQvc3JjbGliL3BhdGhtYXguaAotLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvcGF0aG1heC5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCi0rKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvcGF0aG1heC5oCTIwMTItMDEtMDggMDI6MDc6NDAuMjE4NDg0NDUxIC0wODAwCi1AQCAtMTksMjcgKzE5LDYgQEAKLSAjaWZuZGVmIF9QQVRITUFYX0gKLSAjIGRlZmluZSBfUEFUSE1BWF9ICi0gCi0tLyogUE9TSVg6MjAwOCBkZWZpbmVzIFBBVEhfTUFYIHRvIGJlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiBhIGZpbGVuYW1lLAotLSAgIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgTlVMIGJ5dGUuCi0tICAgPGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Jhc2VkZWZzL2xpbWl0cy5oLmh0bWw+Ci0tICAgUEFUSF9NQVggaXMgbm90IGRlZmluZWQgb24gc3lzdGVtcyB3aGljaCBoYXZlIG5vIGxpbWl0IG9uIGZpbGVuYW1lIGxlbmd0aCwKLS0gICBzdWNoIGFzIEdOVS9IdXJkLgotLQotLSAgIFRoaXMgZmlsZSBkb2VzICpub3QqIGRlZmluZSBQQVRIX01BWCBhbHdheXMuICBQcm9ncmFtcyB0aGF0IHVzZSB0aGlzIGZpbGUKLS0gICBjYW4gaGFuZGxlIHRoZSBHTlUvSHVyZCBjYXNlIGluIHNldmVyYWwgd2F5czoKLS0gICAgIC0gRWl0aGVyIHdpdGggYSBwYWNrYWdlLXdpZGUgaGFuZGxpbmcsIG9yIHdpdGggYSBwZXItZmlsZSBoYW5kbGluZywKLS0gICAgIC0gRWl0aGVyIHRocm91Z2ggYQotLSAgICAgICAgICNpZmRlZiBQQVRIX01BWAotLSAgICAgICBvciB0aHJvdWdoIGEgZmFsbGJhY2sgbGlrZQotLSAgICAgICAgICNpZm5kZWYgUEFUSF9NQVgKLS0gICAgICAgICAjIGRlZmluZSBQQVRIX01BWCA4MTkyCi0tICAgICAgICAgI2VuZGlmCi0tICAgICAgIG9yIHRocm91Z2ggYSBmYWxsYmFjayBsaWtlCi0tICAgICAgICAgI2lmbmRlZiBQQVRIX01BWAotLSAgICAgICAgICMgZGVmaW5lIFBBVEhfTUFYIHBhdGhjb25mICgiLyIsIF9QQ19QQVRIX01BWCkKLS0gICAgICAgICAjZW5kaWYKLS0gKi8KLS0KLSAjIGluY2x1ZGUgPHVuaXN0ZC5oPgotIAotICMgaW5jbHVkZSA8bGltaXRzLmg+Ci1AQCAtNDgsNiArMjcsMTEgQEAKLSAjICBkZWZpbmUgX1BPU0lYX1BBVEhfTUFYIDI1NgotICMgZW5kaWYKLSAKLSsjIGlmICFkZWZpbmVkIFBBVEhfTUFYICYmIGRlZmluZWQgX1BDX1BBVEhfTUFYICYmIGRlZmluZWQgSEFWRV9QQVRIQ09ORgotKyMgIGRlZmluZSBQQVRIX01BWCAocGF0aGNvbmYgKCIvIiwgX1BDX1BBVEhfTUFYKSA8IDEgPyAxMDI0IFwKLSsgICAgICAgICAgICAgICAgICAgIDogcGF0aGNvbmYgKCIvIiwgX1BDX1BBVEhfTUFYKSkKLSsjIGVuZGlmCi0rCi0gLyogRG9uJ3QgaW5jbHVkZSBzeXMvcGFyYW0uaCBpZiBpdCBhbHJlYWR5IGhhcyBiZWVuLiAgKi8KLSAjIGlmIGRlZmluZWQgSEFWRV9TWVNfUEFSQU1fSCAmJiAhZGVmaW5lZCBQQVRIX01BWCAmJiAhZGVmaW5lZCBNQVhQQVRITEVOCi0gIyAgaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci1AQCAtNTcsMTMgKzQxLDggQEAKLSAjICBkZWZpbmUgUEFUSF9NQVggTUFYUEFUSExFTgotICMgZW5kaWYKLSAKLS0jIGlmZGVmIF9faHB1eAotLS8qIE9uIEhQLVVYLCBQQVRIX01BWCBkZXNpZ25hdGVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiBhIGZpbGVuYW1lLAotLSAgICpub3QqIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgTlVMIGJ5dGUsIGFuZCBpcyBzZXQgdG8gMTAyMy4KLS0gICBBZGRpdGlvbmFsbHksIHdoZW4gX1hPUEVOX1NPVVJDRSBpcyBkZWZpbmVkIHRvIDUwMCBvciBtb3JlLCBQQVRIX01BWCBpcwotLSAgIG5vdCBkZWZpbmVkIGF0IGFsbCBhbnkgbW9yZS4gICovCi0tIyAgdW5kZWYgUEFUSF9NQVgKLS0jICBkZWZpbmUgUEFUSF9NQVggMTAyNAotKyMgaWZuZGVmIFBBVEhfTUFYCi0rIyAgZGVmaW5lIFBBVEhfTUFYIF9QT1NJWF9QQVRIX01BWAotICMgZW5kaWYKLSAKLSAjZW5kaWYgLyogX1BBVEhNQVhfSCAqLwotZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9yZWxvY3dyYXBwZXIuYyBsaWJpY29udi0xLjE0L3NyY2xpYi9yZWxvY3dyYXBwZXIuYwotLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvcmVsb2N3cmFwcGVyLmMJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKLSsrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9yZWxvY3dyYXBwZXIuYwkyMDEyLTAxLTA4IDAyOjA3OjQwLjI4MjQ4NDQ1NSAtMDgwMAotQEAgLTI5LDYgKzI5LDcgQEAKLSAgICAgLT4gcmVsb2NhdGFibGUKLSAgICAgLT4gc2V0ZW52Ci0gICAgICAgIC0+IG1hbGxvY2EKLSsgICAgLT4gc3RyZXJyb3IKLSAgICAgLT4gYy1jdHlwZQotIAotICAgIE1hY3JvcyB0aGF0IG5lZWQgdG8gYmUgc2V0IHdoaWxlIGNvbXBpbGluZyB0aGlzIGZpbGU6Ci1kaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3NhZmUtcmVhZC5oIGxpYmljb252LTEuMTQvc3JjbGliL3NhZmUtcmVhZC5oCi0tLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zYWZlLXJlYWQuaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAotKysrIGxpYmljb252LTEuMTQvc3JjbGliL3NhZmUtcmVhZC5oCTIwMTItMDEtMDggMDI6MDc6NDAuMjk4NDg0NDU1IC0wODAwCi1AQCAtMTQsMTkgKzE0LDYgQEAKLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLSAKLS0vKiBTb21lIHN5c3RlbSBjYWxscyBtYXkgYmUgaW50ZXJydXB0ZWQgYW5kIGZhaWwgd2l0aCBlcnJubyA9IEVJTlRSIGluIHRoZQotLSAgIGZvbGxvd2luZyBzaXR1YXRpb25zOgotLSAgICAgLSBUaGUgcHJvY2VzcyBpcyBzdG9wcGVkIGFuZCByZXN0YXJ0ZWQgKHNpZ25hbCBTSUdTVE9QIGFuZCBTSUdDT05ULCB1c2VyCi0tICAgICAgIHR5cGVzIEN0cmwtWikgb24gc29tZSBwbGF0Zm9ybXM6IE1hY09TIFguCi0tICAgICAtIFRoZSBwcm9jZXNzIHJlY2VpdmVzIGEgc2lnbmFsIGZvciB3aGljaCBhIHNpZ25hbCBoYW5kbGVyIHdhcyBpbnN0YWxsZWQKLS0gICAgICAgd2l0aCBzaWdhY3Rpb24oKSB3aXRoIGFuIHNhX2ZsYWdzIGZpZWxkIHRoYXQgZG9lcyBub3QgY29udGFpbgotLSAgICAgICBTQV9SRVNUQVJULgotLSAgICAgLSBUaGUgcHJvY2VzcyByZWNlaXZlcyBhIHNpZ25hbCBmb3Igd2hpY2ggYSBzaWduYWwgaGFuZGxlciB3YXMgaW5zdGFsbGVkCi0tICAgICAgIHdpdGggc2lnbmFsKCkgYW5kIGZvciB3aGljaCBubyBjYWxsIHRvIHNpZ2ludGVycnVwdChzaWcsMCkgd2FzIGRvbmUsCi0tICAgICAgIG9uIHNvbWUgcGxhdGZvcm1zOiBBSVgsIEhQLVVYLCBJUklYLCBPU0YvMSwgU29sYXJpcy4KLS0KLS0gICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIHdyYXBwZXIgYXJvdW5kIHJlYWQoKSB0aGF0IGhhbmRsZXMgRUlOVFIuICAqLwotLQotICNpbmNsdWRlIDxzdGRkZWYuaD4KLSAKLSAjaWZkZWYgX19jcGx1c3BsdXMKLWRpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc2lnbmFsLmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvc2lnbmFsLmluLmgKLS0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3NpZ25hbC5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCi0rKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc2lnbmFsLmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4zMTQ0ODQ0NTYgLTA4MDAKLUBAIC0yMCw0OSArMjAsMjEgQEAKLSAjZW5kaWYKLSBAUFJBR01BX0NPTFVNTlNACi0gCi0tI2lmIGRlZmluZWQgX19uZWVkX3NpZ19hdG9taWNfdCB8fCBkZWZpbmVkIF9fbmVlZF9zaWdzZXRfdCB8fCBkZWZpbmVkIF9HTF9BTFJFQURZX0lOQ0xVRElOR19TSUdOQUxfSCB8fCAoZGVmaW5lZCBfU0lHTkFMX0ggJiYgIWRlZmluZWQgX19TSVpFT0ZfUFRIUkVBRF9NVVRFWF9UKQotLS8qIFNwZWNpYWwgaW52b2NhdGlvbiBjb252ZW50aW9uOgotLSAgIC0gSW5zaWRlIGdsaWJjIGhlYWRlciBmaWxlcy4KLS0gICAtIE9uIGdsaWJjIHN5c3RlbXMgd2UgaGF2ZSBhIHNlcXVlbmNlIG9mIG5lc3RlZCBpbmNsdWRlcwotLSAgICAgPHNpZ25hbC5oPiAtPiA8dWNvbnRleHQuaD4gLT4gPHNpZ25hbC5oPi4KLS0gICAgIEluIHRoaXMgc2l0dWF0aW9uLCB0aGUgZnVuY3Rpb25zIGFyZSBub3QgeWV0IGRlY2xhcmVkLCB0aGVyZWZvcmUgd2UgY2Fubm90Ci0tICAgICBwcm92aWRlIHRoZSBDKysgYWxpYXNlcy4KLS0gICAtIE9uIGdsaWJjIHN5c3RlbXMgd2l0aCBHQ0MgNC4zIHdlIGhhdmUgYSBzZXF1ZW5jZSBvZiBuZXN0ZWQgaW5jbHVkZXMKLS0gICAgIDxjc2lnbmFsPiAtPiA8L3Vzci9pbmNsdWRlL3NpZ25hbC5oPiAtPiA8c3lzL3Vjb250ZXh0Lmg+IC0+IDxzaWduYWwuaD4uCi0tICAgICBJbiB0aGlzIHNpdHVhdGlvbiwgc29tZSBvZiB0aGUgZnVuY3Rpb25zIGFyZSBub3QgeWV0IGRlY2xhcmVkLCB0aGVyZWZvcmUKLS0gICAgIHdlIGNhbm5vdCBwcm92aWRlIHRoZSBDKysgYWxpYXNlcy4gICovCi0rI2lmIGRlZmluZWQgX19uZWVkX3NpZ19hdG9taWNfdCB8fCBkZWZpbmVkIF9fbmVlZF9zaWdzZXRfdAotKy8qIFNwZWNpYWwgaW52b2NhdGlvbiBjb252ZW50aW9uIGluc2lkZSBnbGliYyBoZWFkZXIgZmlsZXMuICAqLwotIAotICMgQElOQ0xVREVfTkVYVEAgQE5FWFRfU0lHTkFMX0hACi0gCi0gI2Vsc2UKLSAvKiBOb3JtYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KLSAKLS0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TSUdOQUxfSAotLQotLSNkZWZpbmUgX0dMX0FMUkVBRFlfSU5DTFVESU5HX1NJR05BTF9ICi0tCi0tLyogRGVmaW5lIHBpZF90LCB1aWRfdC4KLS0gICBBbHNvLCBtaW5ndyBkZWZpbmVzIHNpZ3NldF90IG5vdCBpbiA8c2lnbmFsLmg+LCBidXQgaW4gPHN5cy90eXBlcy5oPi4KLS0gICBPbiBTb2xhcmlzIDEwLCA8c2lnbmFsLmg+IGluY2x1ZGVzIDxzeXMvdHlwZXMuaD4sIHdoaWNoIGV2ZW50dWFsbHkgaW5jbHVkZXMKLS0gICB1czsgc28gaW5jbHVkZSA8c3lzL3R5cGVzLmg+IG5vdywgYmVmb3JlIHRoZSBzZWNvbmQgaW5jbHVzaW9uIGd1YXJkLiAgKi8KLS0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0rI2lmbmRlZiBfR0xfU0lHTkFMX0gKLSAKLSAvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCi0gI0BJTkNMVURFX05FWFRAIEBORVhUX1NJR05BTF9IQAotIAotLSN1bmRlZiBfR0xfQUxSRUFEWV9JTkNMVURJTkdfU0lHTkFMX0gKLS0KLS0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TSUdOQUxfSAotLSNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1NJR05BTF9ICi0tCi0tLyogTWFjT1MgWCAxMC4zLCBGcmVlQlNEIDYuNCwgT3BlbkJTRCAzLjgsIE9TRi8xIDQuMCwgU29sYXJpcyAyLjYgZGVjbGFyZQotLSAgIHB0aHJlYWRfc2lnbWFzayBpbiA8cHRocmVhZC5oPiwgbm90IGluIDxzaWduYWwuaD4uCi0tICAgQnV0IGF2b2lkIG5hbWVzcGFjZSBwb2xsdXRpb24gb24gZ2xpYmMgc3lzdGVtcy4qLwotLSNpZiAoQEdOVUxJQl9QVEhSRUFEX1NJR01BU0tAIHx8IGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0spIFwKLS0gICAgJiYgKChkZWZpbmVkIF9fQVBQTEVfXyAmJiBkZWZpbmVkIF9fTUFDSF9fKSB8fCBkZWZpbmVkIF9fRnJlZUJTRF9fIHx8IGRlZmluZWQgX19PcGVuQlNEX18gfHwgZGVmaW5lZCBfX29zZl9fIHx8IGRlZmluZWQgX19zdW4pIFwKLS0gICAgJiYgISBkZWZpbmVkIF9fR0xJQkNfXwotLSMgaW5jbHVkZSA8cHRocmVhZC5oPgotLSNlbmRpZgotKyNpZm5kZWYgX0dMX1NJR05BTF9ICi0rI2RlZmluZSBfR0xfU0lHTkFMX0gKLSAKLSAvKiBUaGUgZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTCBldGMuIGFyZSBjb3BpZWQgaGVyZS4gICovCi0gCi1AQCAtNzAsNiArNDIsMTAgQEAKLSAKLSAvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UgaXMgY29waWVkIGhlcmUuICAqLwotIAotKy8qIERlZmluZSBwaWRfdCwgdWlkX3QuCi0rICAgQWxzbywgbWluZ3cgZGVmaW5lcyBzaWdzZXRfdCBub3QgaW4gPHNpZ25hbC5oPiwgYnV0IGluIDxzeXMvdHlwZXMuaD4uICAqLwotKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSsKLSAvKiBPbiBBSVgsIHNpZ19hdG9taWNfdCBhbHJlYWR5IGluY2x1ZGVzIHZvbGF0aWxlLiAgQzk5IHJlcXVpcmVzIHRoYXQKLSAgICAndm9sYXRpbGUgc2lnX2F0b21pY190JyBpZ25vcmUgdGhlIGV4dHJhIG1vZGlmaWVyLCBidXQgQzg5IGRpZCBub3QuCi0gICAgSGVuY2UsIHJlZGVmaW5lIHRoaXMgdG8gYSBub24tdm9sYXRpbGUgdHlwZSBhcyBuZWVkZWQuICAqLwotQEAgLTEyNCwzNCArMTAwLDYgQEAgdHlwZWRlZiB2b2lkICgqc2lnaGFuZGxlcl90KSAoaW50KTsKLSAjZW5kaWYKLSAKLSAKLS0jaWYgQEdOVUxJQl9QVEhSRUFEX1NJR01BU0tACi0tIyBpZiBAUkVQTEFDRV9QVEhSRUFEX1NJR01BU0tACi0tIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKLS0jICAgdW5kZWYgcHRocmVhZF9zaWdtYXNrCi0tIyAgIGRlZmluZSBwdGhyZWFkX3NpZ21hc2sgcnBsX3B0aHJlYWRfc2lnbWFzawotLSMgIGVuZGlmCi0tX0dMX0ZVTkNERUNMX1JQTCAocHRocmVhZF9zaWdtYXNrLCBpbnQsCi0tICAgICAgICAgICAgICAgICAgKGludCBob3csIGNvbnN0IHNpZ3NldF90ICpuZXdfbWFzaywgc2lnc2V0X3QgKm9sZF9tYXNrKSk7Ci0tX0dMX0NYWEFMSUFTX1JQTCAocHRocmVhZF9zaWdtYXNrLCBpbnQsCi0tICAgICAgICAgICAgICAgICAgKGludCBob3csIGNvbnN0IHNpZ3NldF90ICpuZXdfbWFzaywgc2lnc2V0X3QgKm9sZF9tYXNrKSk7Ci0tIyBlbHNlCi0tIyAgaWYgIUBIQVZFX1BUSFJFQURfU0lHTUFTS0AKLS1fR0xfRlVOQ0RFQ0xfU1lTIChwdGhyZWFkX3NpZ21hc2ssIGludCwKLS0gICAgICAgICAgICAgICAgICAoaW50IGhvdywgY29uc3Qgc2lnc2V0X3QgKm5ld19tYXNrLCBzaWdzZXRfdCAqb2xkX21hc2spKTsKLS0jICBlbmRpZgotLV9HTF9DWFhBTElBU19TWVMgKHB0aHJlYWRfc2lnbWFzaywgaW50LAotLSAgICAgICAgICAgICAgICAgIChpbnQgaG93LCBjb25zdCBzaWdzZXRfdCAqbmV3X21hc2ssIHNpZ3NldF90ICpvbGRfbWFzaykpOwotLSMgZW5kaWYKLS1fR0xfQ1hYQUxJQVNXQVJOIChwdGhyZWFkX3NpZ21hc2spOwotLSNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKLS0jIHVuZGVmIHB0aHJlYWRfc2lnbWFzawotLSMgaWYgSEFWRV9SQVdfREVDTF9QVEhSRUFEX1NJR01BU0sKLS1fR0xfV0FSTl9PTl9VU0UgKHB0aHJlYWRfc2lnbWFzaywgInB0aHJlYWRfc2lnbWFzayBpcyBub3QgcG9ydGFibGUgLSAiCi0tICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgcHRocmVhZF9zaWdtYXNrIGZvciBwb3J0YWJpbGl0eSIpOwotLSMgZW5kaWYKLS0jZW5kaWYKLS0KLS0KLSAjaWYgQEdOVUxJQl9TSUdQUk9DTUFTS0AKLSAjIGlmICFASEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lOR0AKLSAKLUBAIC00MjMsNiArMzcxLDYgQEAgX0dMX1dBUk5fT05fVVNFIChzaWdhY3Rpb24sICJzaWdhY3Rpb24gaQotICNlbmRpZgotIAotIAotLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU0lHTkFMX0ggKi8KLS0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NJR05BTF9IICovCi0rI2VuZGlmIC8qIF9HTF9TSUdOQUxfSCAqLwotKyNlbmRpZiAvKiBfR0xfU0lHTkFMX0ggKi8KLSAjZW5kaWYKLWRpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RhdC5jIGxpYmljb252LTEuMTQvc3JjbGliL3N0YXQuYwotLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RhdC5jCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCi0rKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RhdC5jCTIwMTItMDEtMDggMDI6MDc6NDAuMzMwNDg0NDU3IC0wODAwCi1AQCAtMzgsNyArMzgsNiBAQCBvcmlnX3N0YXQgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBzdHJ1Y3QKLSAjaW5jbHVkZSA8c3RkYm9vbC5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSAiZG9zbmFtZS5oIgotLSNpbmNsdWRlICJ2ZXJpZnkuaCIKLSAKLSAvKiBTdG9yZSBpbmZvcm1hdGlvbiBhYm91dCBOQU1FIGludG8gU1QuICBXb3JrIGFyb3VuZCBidWdzIHdpdGgKLSAgICB0cmFpbGluZyBzbGFzaGVzLiAgTWluZ3cgaGFzIG90aGVyIGJ1Z3MgKHN1Y2ggYXMgc3RfaW5vIGFsd2F5cwotQEAgLTY0LDEyICs2Myw2IEBAIHJwbF9zdGF0IChjaGFyIGNvbnN0ICpuYW1lLCBzdHJ1Y3Qgc3RhdAotICAgICB9Ci0gI2VuZGlmIC8qIFJFUExBQ0VfRlVOQ19TVEFUX0ZJTEUgKi8KLSAjaWYgUkVQTEFDRV9GVU5DX1NUQVRfRElSCi0tICAvKiBUaGUgb25seSBrbm93biBzeXN0ZW1zIHdoZXJlIFJFUExBQ0VfRlVOQ19TVEFUX0RJUiBpcyBuZWVkZWQgYWxzbwotLSAgICAgaGF2ZSBhIGNvbnN0YW50IFBBVEhfTUFYLiAgKi8KLS0jIGlmbmRlZiBQQVRIX01BWAotLSMgIGVycm9yICJQbGVhc2UgcG9ydCB0aGlzIHJlcGxhY2VtZW50IHRvIHlvdXIgcGxhdGZvcm0iCi0tIyBlbmRpZgotLQotICAgaWYgKHJlc3VsdCA9PSAtMSAmJiBlcnJubyA9PSBFTk9FTlQpCi0gICAgIHsKLSAgICAgICAvKiBEdWUgdG8gbWluZ3cncyBvZGRpdGllcywgdGhlcmUgYXJlIHNvbWUgZGlyZWN0b3JpZXMgKGxpa2UKLUBAIC04NCw3ICs3Nyw2IEBAIHJwbF9zdGF0IChjaGFyIGNvbnN0ICpuYW1lLCBzdHJ1Y3Qgc3RhdAotICAgICAgIGNoYXIgZml4ZWRfbmFtZVtQQVRIX01BWCArIDFdID0gezB9OwotICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKG5hbWUpOwotICAgICAgIGJvb2wgY2hlY2tfZGlyID0gZmFsc2U7Ci0tICAgICAgdmVyaWZ5IChQQVRIX01BWCA8PSA0MDk2KTsKLSAgICAgICBpZiAoUEFUSF9NQVggPD0gbGVuKQotICAgICAgICAgZXJybm8gPSBFTkFNRVRPT0xPTkc7Ci0gICAgICAgZWxzZSBpZiAobGVuKQotZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdGRkZWYuaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi9zdGRkZWYuaW4uaAotLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RkZGVmLmluLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKLSsrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdGRkZWYuaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjM0NjQ4NDQ1OCAtMDgwMAotQEAgLTM4LDkgKzM4LDkgQEAKLSAgICByZW1lbWJlciBpZiBzcGVjaWFsIGludm9jYXRpb24gaGFzIGV2ZXIgYmVlbiB1c2VkIHRvIG9idGFpbiB3aW50X3QsCi0gICAgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvIGNsZWFuIHVwIE5VTEwgeWV0IGFnYWluLiAgKi8KLSAKLS0jIGlmICEoZGVmaW5lZCBfQEdVQVJEX1BSRUZJWEBfU1REREVGX0ggJiYgZGVmaW5lZCBfR0xfU1REREVGX1dJTlRfVCkKLSsjIGlmICEoZGVmaW5lZCBfR0xfU1REREVGX0ggJiYgZGVmaW5lZCBfR0xfU1REREVGX1dJTlRfVCkKLSAjICBpZmRlZiBfX25lZWRfd2ludF90Ci0tIyAgIHVuZGVmIF9AR1VBUkRfUFJFRklYQF9TVERERUZfSAotKyMgICB1bmRlZiBfR0xfU1REREVGX0gKLSAjICAgZGVmaW5lIF9HTF9TVERERUZfV0lOVF9UCi0gIyAgZW5kaWYKLSAjICBASU5DTFVERV9ORVhUQCBATkVYVF9TVERERUZfSEAKLUBAIC00OSwxNCArNDksMTQgQEAKLSAjZWxzZQotIC8qIE5vcm1hbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLwotIAotLSMgaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TVERERUZfSAotKyMgaWZuZGVmIF9HTF9TVERERUZfSAotIAotIC8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KLSAKLSAjICBASU5DTFVERV9ORVhUQCBATkVYVF9TVERERUZfSEAKLSAKLS0jICBpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NURERFRl9ICi0tIyAgIGRlZmluZSBfQEdVQVJEX1BSRUZJWEBfU1REREVGX0gKLSsjICBpZm5kZWYgX0dMX1NURERFRl9ICi0rIyAgIGRlZmluZSBfR0xfU1REREVGX0gKLSAKLSAvKiBPbiBOZXRCU0QgNS4wLCB0aGUgZGVmaW5pdGlvbiBvZiBOVUxMIGxhY2tzIHByb3BlciBwYXJlbnRoZXNlcy4gICovCi0gI2lmIEBSRVBMQUNFX05VTExACi1AQCAtODIsNiArODIsNiBAQAotICMgZGVmaW5lIHdjaGFyX3QgaW50Ci0gI2VuZGlmCi0gCi0tIyAgZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NURERFRl9IICovCi0tIyBlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1REREVGX0ggKi8KLSsjICBlbmRpZiAvKiBfR0xfU1REREVGX0ggKi8KLSsjIGVuZGlmIC8qIF9HTF9TVERERUZfSCAqLwotICNlbmRpZiAvKiBfX25lZWRfWFhYICovCi1kaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0ZGludC5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL3N0ZGludC5pbi5oCi0tLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdGRpbnQuaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAotKysrIGxpYmljb252LTEuMTQvc3JjbGliL3N0ZGludC5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuMzU4NDg0NDU4IC0wODAwCi1AQCAtMjEsNyArMjEsNyBAQAotICAqIDxodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4YmQvc3RkaW50LmguaHRtbD4KLSAgKi8KLSAKLS0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TVERJTlRfSAotKyNpZm5kZWYgX0dMX1NURElOVF9ICi0gCi0gI2lmIF9fR05VQ19fID49IDMKLSBAUFJBR01BX1NZU1RFTV9IRUFERVJACi1AQCAtNTIsMTMgKzUyLDEzIEBACi0gICAvKiBPdGhlciBzeXN0ZW1zIG1heSBoYXZlIGFuIGluY29tcGxldGUgb3IgYnVnZ3kgPHN0ZGludC5oPi4KLSAgICAgIEluY2x1ZGUgaXQgYmVmb3JlIDxpbnR0eXBlcy5oPiwgc2luY2UgYW55ICIjaW5jbHVkZSA8c3RkaW50Lmg+IgotICAgICAgaW4gPGludHR5cGVzLmg+IHdvdWxkIHJlaW5jbHVkZSB1cywgc2tpcHBpbmcgb3VyIGNvbnRlbnRzIGJlY2F1c2UKLS0gICAgIF9AR1VBUkRfUFJFRklYQF9TVERJTlRfSCBpcyBkZWZpbmVkLgotKyAgICAgX0dMX1NURElOVF9IIGlzIGRlZmluZWQuCi0gICAgICBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCi0gIyBASU5DTFVERV9ORVhUQCBATkVYVF9TVERJTlRfSEAKLSAjZW5kaWYKLSAKLS0jaWYgISBkZWZpbmVkIF9AR1VBUkRfUFJFRklYQF9TVERJTlRfSCAmJiAhIGRlZmluZWQgX0dMX0pVU1RfSU5DTFVERV9TWVNURU1fU1RESU5UX0gKLS0jZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9TVERJTlRfSAotKyNpZiAhIGRlZmluZWQgX0dMX1NURElOVF9IICYmICEgZGVmaW5lZCBfR0xfSlVTVF9JTkNMVURFX1NZU1RFTV9TVERJTlRfSAotKyNkZWZpbmUgX0dMX1NURElOVF9ICi0gCi0gLyogPHN5cy90eXBlcy5oPiBkZWZpbmVzIHNvbWUgb2YgdGhlIHN0ZGludC5oIHR5cGVzIGFzIHdlbGwsIG9uIGdsaWJjLAotICAgIElSSVggNi41LCBhbmQgT3BlbkJTRCAzLjggKHZpYSA8bWFjaGluZS90eXBlcy5oPikuCi1AQCAtMjcwLDM2ICsyNzAsMjYgQEAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBnbF91aW50cHRyX3Q7Ci0gLyogTm90ZTogVGhlc2UgdHlwZXMgYXJlIGNvbXBpbGVyIGRlcGVuZGVudC4gSXQgbWF5IGJlIHVud2lzZSB0byB1c2UgdGhlbSBpbgotICAgIHB1YmxpYyBoZWFkZXIgZmlsZXMuICovCi0gCi0tLyogSWYgdGhlIHN5c3RlbSBkZWZpbmVzIElOVE1BWF9NQVgsIGFzc3VtZSB0aGF0IGludG1heF90IHdvcmtzLCBhbmQKLS0gICBzaW1pbGFybHkgZm9yIFVJTlRNQVhfTUFYIGFuZCB1aW50bWF4X3QuICBUaGlzIGF2b2lkcyBwcm9ibGVtcyB3aXRoCi0tICAgYXNzdW1pbmcgb25lIHR5cGUgd2hlcmUgYW5vdGhlciBpcyB1c2VkIGJ5IHRoZSBzeXN0ZW0uICAqLwotLQotLSNpZm5kZWYgSU5UTUFYX01BWAotLSMgdW5kZWYgSU5UTUFYX0MKLS0jIHVuZGVmIGludG1heF90Ci0tIyBpZiBASEFWRV9MT05HX0xPTkdfSU5UQCAmJiBMT05HX01BWCA+PiAzMCA9PSAxCi0rI3VuZGVmIGludG1heF90Ci0rI2lmIEBIQVZFX0xPTkdfTE9OR19JTlRAICYmIExPTkdfTUFYID4+IDMwID09IDEKLSB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgZ2xfaW50bWF4X3Q7Ci0tIyAgZGVmaW5lIGludG1heF90IGdsX2ludG1heF90Ci0tIyBlbGlmIGRlZmluZWQgR0xfSU5UNjRfVAotLSMgIGRlZmluZSBpbnRtYXhfdCBpbnQ2NF90Ci0tIyBlbHNlCi0rIyBkZWZpbmUgaW50bWF4X3QgZ2xfaW50bWF4X3QKLSsjZWxpZiBkZWZpbmVkIEdMX0lOVDY0X1QKLSsjIGRlZmluZSBpbnRtYXhfdCBpbnQ2NF90Ci0rI2Vsc2UKLSB0eXBlZGVmIGxvbmcgaW50IGdsX2ludG1heF90OwotLSMgIGRlZmluZSBpbnRtYXhfdCBnbF9pbnRtYXhfdAotLSMgZW5kaWYKLSsjIGRlZmluZSBpbnRtYXhfdCBnbF9pbnRtYXhfdAotICNlbmRpZgotIAotLSNpZm5kZWYgVUlOVE1BWF9NQVgKLS0jIHVuZGVmIFVJTlRNQVhfQwotLSMgdW5kZWYgdWludG1heF90Ci0tIyBpZiBASEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UQCAmJiBVTE9OR19NQVggPj4gMzEgPT0gMQotKyN1bmRlZiB1aW50bWF4X3QKLSsjaWYgQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAgJiYgVUxPTkdfTUFYID4+IDMxID09IDEKLSB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgZ2xfdWludG1heF90OwotLSMgIGRlZmluZSB1aW50bWF4X3QgZ2xfdWludG1heF90Ci0tIyBlbGlmIGRlZmluZWQgR0xfVUlOVDY0X1QKLS0jICBkZWZpbmUgdWludG1heF90IHVpbnQ2NF90Ci0tIyBlbHNlCi0rIyBkZWZpbmUgdWludG1heF90IGdsX3VpbnRtYXhfdAotKyNlbGlmIGRlZmluZWQgR0xfVUlOVDY0X1QKLSsjIGRlZmluZSB1aW50bWF4X3QgdWludDY0X3QKLSsjZWxzZQotIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgZ2xfdWludG1heF90OwotLSMgIGRlZmluZSB1aW50bWF4X3QgZ2xfdWludG1heF90Ci0tIyBlbmRpZgotKyMgZGVmaW5lIHVpbnRtYXhfdCBnbF91aW50bWF4X3QKLSAjZW5kaWYKLSAKLSAvKiBWZXJpZnkgdGhhdCBpbnRtYXhfdCBhbmQgdWludG1heF90IGhhdmUgdGhlIHNhbWUgc2l6ZS4gIFRvbyBtdWNoIGNvZGUKLUBAIC00NDEsMjMgKzQzMSwyMSBAQCB0eXBlZGVmIGludCBfdmVyaWZ5X2ludG1heF9zaXplW3NpemVvZiAoCi0gCi0gLyogNy4xOC4yLjUuIExpbWl0cyBvZiBncmVhdGVzdC13aWR0aCBpbnRlZ2VyIHR5cGVzICovCi0gCi0tI2lmbmRlZiBJTlRNQVhfTUFYCi0tIyB1bmRlZiBJTlRNQVhfTUlOCi0tIyBpZmRlZiBJTlQ2NF9NQVgKLS0jICBkZWZpbmUgSU5UTUFYX01JTiAgSU5UNjRfTUlOCi0tIyAgZGVmaW5lIElOVE1BWF9NQVggIElOVDY0X01BWAotLSMgZWxzZQotLSMgIGRlZmluZSBJTlRNQVhfTUlOICBJTlQzMl9NSU4KLS0jICBkZWZpbmUgSU5UTUFYX01BWCAgSU5UMzJfTUFYCi0tIyBlbmRpZgotKyN1bmRlZiBJTlRNQVhfTUlOCi0rI3VuZGVmIElOVE1BWF9NQVgKLSsjaWZkZWYgSU5UNjRfTUFYCi0rIyBkZWZpbmUgSU5UTUFYX01JTiAgSU5UNjRfTUlOCi0rIyBkZWZpbmUgSU5UTUFYX01BWCAgSU5UNjRfTUFYCi0rI2Vsc2UKLSsjIGRlZmluZSBJTlRNQVhfTUlOICBJTlQzMl9NSU4KLSsjIGRlZmluZSBJTlRNQVhfTUFYICBJTlQzMl9NQVgKLSAjZW5kaWYKLSAKLS0jaWZuZGVmIFVJTlRNQVhfTUFYCi0tIyBpZmRlZiBVSU5UNjRfTUFYCi0tIyAgZGVmaW5lIFVJTlRNQVhfTUFYICBVSU5UNjRfTUFYCi0tIyBlbHNlCi0tIyAgZGVmaW5lIFVJTlRNQVhfTUFYICBVSU5UMzJfTUFYCi0tIyBlbmRpZgotKyN1bmRlZiBVSU5UTUFYX01BWAotKyNpZmRlZiBVSU5UNjRfTUFYCi0rIyBkZWZpbmUgVUlOVE1BWF9NQVggIFVJTlQ2NF9NQVgKLSsjZWxzZQotKyMgZGVmaW5lIFVJTlRNQVhfTUFYICBVSU5UMzJfTUFYCi0gI2VuZGlmCi0gCi0gLyogNy4xOC4zLiBMaW1pdHMgb2Ygb3RoZXIgaW50ZWdlciB0eXBlcyAqLwotQEAgLTU4MCwyNyArNTY4LDI1IEBAIHR5cGVkZWYgaW50IF92ZXJpZnlfaW50bWF4X3NpemVbc2l6ZW9mICgKLSAKLSAvKiA3LjE4LjQuMi4gTWFjcm9zIGZvciBncmVhdGVzdC13aWR0aCBpbnRlZ2VyIGNvbnN0YW50cyAqLwotIAotLSNpZm5kZWYgSU5UTUFYX0MKLS0jIGlmIEBIQVZFX0xPTkdfTE9OR19JTlRAICYmIExPTkdfTUFYID4+IDMwID09IDEKLS0jICBkZWZpbmUgSU5UTUFYX0MoeCkgICB4IyNMTAotLSMgZWxpZiBkZWZpbmVkIEdMX0lOVDY0X1QKLS0jICBkZWZpbmUgSU5UTUFYX0MoeCkgICBJTlQ2NF9DKHgpCi0tIyBlbHNlCi0tIyAgZGVmaW5lIElOVE1BWF9DKHgpICAgeCMjTAotLSMgZW5kaWYKLSsjdW5kZWYgSU5UTUFYX0MKLSsjaWYgQEhBVkVfTE9OR19MT05HX0lOVEAgJiYgTE9OR19NQVggPj4gMzAgPT0gMQotKyMgZGVmaW5lIElOVE1BWF9DKHgpICAgeCMjTEwKLSsjZWxpZiBkZWZpbmVkIEdMX0lOVDY0X1QKLSsjIGRlZmluZSBJTlRNQVhfQyh4KSAgIElOVDY0X0MoeCkKLSsjZWxzZQotKyMgZGVmaW5lIElOVE1BWF9DKHgpICAgeCMjTAotICNlbmRpZgotIAotLSNpZm5kZWYgVUlOVE1BWF9DCi0tIyBpZiBASEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UQCAmJiBVTE9OR19NQVggPj4gMzEgPT0gMQotLSMgIGRlZmluZSBVSU5UTUFYX0MoeCkgIHgjI1VMTAotLSMgZWxpZiBkZWZpbmVkIEdMX1VJTlQ2NF9UCi0tIyAgZGVmaW5lIFVJTlRNQVhfQyh4KSAgVUlOVDY0X0MoeCkKLS0jIGVsc2UKLS0jICBkZWZpbmUgVUlOVE1BWF9DKHgpICB4IyNVTAotLSMgZW5kaWYKLSsjdW5kZWYgVUlOVE1BWF9DCi0rI2lmIEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRAICYmIFVMT05HX01BWCA+PiAzMSA9PSAxCi0rIyBkZWZpbmUgVUlOVE1BWF9DKHgpICB4IyNVTEwKLSsjZWxpZiBkZWZpbmVkIEdMX1VJTlQ2NF9UCi0rIyBkZWZpbmUgVUlOVE1BWF9DKHgpICBVSU5UNjRfQyh4KQotKyNlbHNlCi0rIyBkZWZpbmUgVUlOVE1BWF9DKHgpICB4IyNVTAotICNlbmRpZgotIAotICNlbmRpZiAvKiAhZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9fU1REQ19DT05TVEFOVF9NQUNST1MgKi8KLSAKLS0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NURElOVF9IICovCi0tI2VuZGlmIC8qICFkZWZpbmVkIF9AR1VBUkRfUFJFRklYQF9TVERJTlRfSCAmJiAhZGVmaW5lZCBfR0xfSlVTVF9JTkNMVURFX1NZU1RFTV9TVERJTlRfSCAqLwotKyNlbmRpZiAvKiBfR0xfU1RESU5UX0ggKi8KLSsjZW5kaWYgLyogIWRlZmluZWQgX0dMX1NURElOVF9IICYmICFkZWZpbmVkIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX1NURElOVF9IICovCi1kaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0ZGlvLmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RkaW8uaW4uaAotLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RkaW8uaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAotKysrIGxpYmljb252LTEuMTQvc3JjbGliL3N0ZGlvLmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4zNzg0ODQ0NTkgLTA4MDAKLUBAIC0zNSw3ICszNSw3IEBACi0gI2Vsc2UKLSAvKiBOb3JtYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KLSAKLS0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TVERJT19ICi0rI2lmbmRlZiBfR0xfU1RESU9fSAotIAotICNkZWZpbmUgX0dMX0FMUkVBRFlfSU5DTFVESU5HX1NURElPX0gKLSAKLUBAIC00NCw4ICs0NCw4IEBACi0gCi0gI3VuZGVmIF9HTF9BTFJFQURZX0lOQ0xVRElOR19TVERJT19ICi0gCi0tI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1RESU9fSAotLSNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1NURElPX0gKLSsjaWZuZGVmIF9HTF9TVERJT19ICi0rI2RlZmluZSBfR0xfU1RESU9fSAotIAotIC8qIEdldCB2YV9saXN0LiAgTmVlZGVkIG9uIG1hbnkgc3lzdGVtcywgaW5jbHVkaW5nIGdsaWJjIDIuOC4gICovCi0gI2luY2x1ZGUgPHN0ZGFyZy5oPgotQEAgLTQ2MSw2ICs0NjEsMjUgQEAgX0dMX0ZVTkNERUNMX1NZUyAoZnNlZWtvLCBpbnQsIChGSUxFICpmcAotIF9HTF9DWFhBTElBU19TWVMgKGZzZWVrbywgaW50LCAoRklMRSAqZnAsIG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkpOwotICMgZW5kaWYKLSBfR0xfQ1hYQUxJQVNXQVJOIChmc2Vla28pOwotKyMgaWYgKEBSRVBMQUNFX0ZTRUVLT0AgfHwgIUBIQVZFX0ZTRUVLT0ApICYmICFAR05VTElCX0ZTRUVLQAotKyAgIC8qIFByb3ZpZGUgYW4gZnNlZWsgZnVuY3Rpb24gdGhhdCBpcyBjb25zaXN0ZW50IHdpdGggZnNlZWtvLiAgKi8KLSsgICAvKiBJbiBvcmRlciB0byBhdm9pZCB0aGF0IGZzZWVrIGdldHMgZGVmaW5lZCBhcyBhIG1hY3JvIGhlcmUsIHRoZQotKyAgICAgIGRldmVsb3BlciBjYW4gcmVxdWVzdCB0aGUgJ2ZzZWVrJyBtb2R1bGUuICAqLwotKyMgIGlmICFHTlVMSUJfZGVmaW5lZF9mc2Vla19mdW5jdGlvbgotKyMgICB1bmRlZiBmc2VlawotKyMgICBkZWZpbmUgZnNlZWsgcnBsX2ZzZWVrCi0rc3RhdGljIGlubGluZSBpbnQgX0dMX0FSR19OT05OVUxMICgoMSkpCi0rcnBsX2ZzZWVrIChGSUxFICpmcCwgbG9uZyBvZmZzZXQsIGludCB3aGVuY2UpCi0rewotKyMgICBpZiBAUkVQTEFDRV9GU0VFS09ACi0rICByZXR1cm4gcnBsX2ZzZWVrbyAoZnAsIG9mZnNldCwgd2hlbmNlKTsKLSsjICAgZWxzZQotKyAgcmV0dXJuIGZzZWVrbyAoZnAsIG9mZnNldCwgd2hlbmNlKTsKLSsjICAgZW5kaWYKLSt9Ci0rIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9mc2Vla19mdW5jdGlvbiAxCi0rIyAgZW5kaWYKLSsjIGVuZGlmCi0gI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSwotICMgZGVmaW5lIF9HTF9GU0VFS19XQVJOIC8qIENhdGVnb3J5IDEsIGFib3ZlLiAgKi8KLSAjIHVuZGVmIGZzZWVrCi1AQCAtNTIwLDYgKzUzOSwyNSBAQCBfR0xfRlVOQ0RFQ0xfU1lTIChmdGVsbG8sIG9mZl90LCAoRklMRSAqCi0gX0dMX0NYWEFMSUFTX1NZUyAoZnRlbGxvLCBvZmZfdCwgKEZJTEUgKmZwKSk7Ci0gIyBlbmRpZgotIF9HTF9DWFhBTElBU1dBUk4gKGZ0ZWxsbyk7Ci0rIyBpZiAoQFJFUExBQ0VfRlRFTExPQCB8fCAhQEhBVkVfRlRFTExPQCkgJiYgIUBHTlVMSUJfRlRFTExACi0rICAgLyogUHJvdmlkZSBhbiBmdGVsbCBmdW5jdGlvbiB0aGF0IGlzIGNvbnNpc3RlbnQgd2l0aCBmdGVsbG8uICAqLwotKyAgIC8qIEluIG9yZGVyIHRvIGF2b2lkIHRoYXQgZnRlbGwgZ2V0cyBkZWZpbmVkIGFzIGEgbWFjcm8gaGVyZSwgdGhlCi0rICAgICAgZGV2ZWxvcGVyIGNhbiByZXF1ZXN0IHRoZSAnZnRlbGwnIG1vZHVsZS4gICovCi0rIyAgaWYgIUdOVUxJQl9kZWZpbmVkX2Z0ZWxsX2Z1bmN0aW9uCi0rIyAgIHVuZGVmIGZ0ZWxsCi0rIyAgIGRlZmluZSBmdGVsbCBycGxfZnRlbGwKLStzdGF0aWMgaW5saW5lIGxvbmcgX0dMX0FSR19OT05OVUxMICgoMSkpCi0rcnBsX2Z0ZWxsIChGSUxFICpmKQotK3sKLSsjICAgaWYgQFJFUExBQ0VfRlRFTExPQAotKyAgcmV0dXJuIHJwbF9mdGVsbG8gKGYpOwotKyMgICBlbHNlCi0rICByZXR1cm4gZnRlbGxvIChmKTsKLSsjICAgZW5kaWYKLSt9Ci0rIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9mdGVsbF9mdW5jdGlvbiAxCi0rIyAgZW5kaWYKLSsjIGVuZGlmCi0gI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSwotICMgZGVmaW5lIF9HTF9GVEVMTF9XQVJOIC8qIENhdGVnb3J5IDEsIGFib3ZlLiAgKi8KLSAjIHVuZGVmIGZ0ZWxsCi1AQCAtMTMwNyw2ICsxMzQ1LDYgQEAgX0dMX1dBUk5fT05fVVNFICh2c3ByaW50ZiwgInZzcHJpbnRmIGlzCi0gI2VuZGlmCi0gCi0gCi0tI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TVERJT19IICovCi0tI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TVERJT19IICovCi0rI2VuZGlmIC8qIF9HTF9TVERJT19IICovCi0rI2VuZGlmIC8qIF9HTF9TVERJT19IICovCi0gI2VuZGlmCi1kaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0ZGxpYi5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL3N0ZGxpYi5pbi5oCi0tLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdGRsaWIuaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAotKysrIGxpYmljb252LTEuMTQvc3JjbGliL3N0ZGxpYi5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuMzkwNDg0NDU5IC0wODAwCi1AQCAtMjgsMTMgKzI4LDEzIEBACi0gI2Vsc2UKLSAvKiBOb3JtYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KLSAKLS0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TVERMSUJfSAotKyNpZm5kZWYgX0dMX1NURExJQl9ICi0gCi0gLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLwotICNASU5DTFVERV9ORVhUQCBATkVYVF9TVERMSUJfSEAKLSAKLS0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TVERMSUJfSAotLSNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1NURExJQl9ICi0rI2lmbmRlZiBfR0xfU1RETElCX0gKLSsjZGVmaW5lIF9HTF9TVERMSUJfSAotIAotIC8qIE5ldEJTRCA1LjAgbWlzLWRlZmluZXMgTlVMTC4gICovCi0gI2luY2x1ZGUgPHN0ZGRlZi5oPgotQEAgLTg5LDcgKzg5LDExIEBAIHN0cnVjdCByYW5kb21fZGF0YQotICMgaW5jbHVkZSA8dW5pc3RkLmg+Ci0gI2VuZGlmCi0gCi0tLyogVGhlIGRlZmluaXRpb24gb2YgX05vcmV0dXJuIGlzIGNvcGllZCBoZXJlLiAgKi8KLSsjaWYgMyA8PSBfX0dOVUNfXyB8fCBfX0dOVUNfXyA9PSAyICYmIDggPD0gX19HTlVDX01JTk9SX18KLSsjIGRlZmluZSBfR0xfQVRUUklCVVRFX05PUkVUVVJOIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKQotKyNlbHNlCi0rIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9OT1JFVFVSTgotKyNlbmRpZgotIAotIC8qIFRoZSBkZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBMIGV0Yy4gYXJlIGNvcGllZCBoZXJlLiAgKi8KLSAKLUBAIC0xMTYsNyArMTIwLDcgQEAgc3RydWN0IHJhbmRvbV9kYXRhCi0gLyogVGVybWluYXRlIHRoZSBjdXJyZW50IHByb2Nlc3Mgd2l0aCB0aGUgZ2l2ZW4gcmV0dXJuIGNvZGUsIHdpdGhvdXQgcnVubmluZwotICAgIHRoZSAnYXRleGl0JyBoYW5kbGVycy4gICovCi0gIyBpZiAhQEhBVkVfX0VYSVRACi0tX0dMX0ZVTkNERUNMX1NZUyAoX0V4aXQsIF9Ob3JldHVybiB2b2lkLCAoaW50IHN0YXR1cykpOwotK19HTF9GVU5DREVDTF9TWVMgKF9FeGl0LCB2b2lkLCAoaW50IHN0YXR1cykgX0dMX0FUVFJJQlVURV9OT1JFVFVSTik7Ci0gIyBlbmRpZgotIF9HTF9DWFhBTElBU19TWVMgKF9FeGl0LCB2b2lkLCAoaW50IHN0YXR1cykpOwotIF9HTF9DWFhBTElBU1dBUk4gKF9FeGl0KTsKLUBAIC03NTcsNiArNzYxLDYgQEAgX0dMX0NYWEFMSUFTV0FSTiAod2N0b21iKTsKLSAjZW5kaWYKLSAKLSAKLS0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NURExJQl9IICovCi0tI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TVERMSUJfSCAqLwotKyNlbmRpZiAvKiBfR0xfU1RETElCX0ggKi8KLSsjZW5kaWYgLyogX0dMX1NURExJQl9IICovCi0gI2VuZGlmCi1kaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0cmVycm9yLmMgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RyZXJyb3IuYwotLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RyZXJyb3IuYwkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAotKysrIGxpYmljb252LTEuMTQvc3JjbGliL3N0cmVycm9yLmMJMjAxMi0wMS0wOCAwMjowNzo0MC40MDY0ODQ0NjEgLTA4MDAKLUBAIC0xNyw1NCArMTcsMzQwIEBACi0gCi0gI2luY2x1ZGUgPGNvbmZpZy5oPgotIAotLS8qIFNwZWNpZmljYXRpb24uICAqLwotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAKLS0jaW5jbHVkZSA8ZXJybm8uaD4KLS0jaW5jbHVkZSA8c3RkaW8uaD4KLS0jaW5jbHVkZSA8c3RkbGliLmg+Ci0tI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpZiBSRVBMQUNFX1NUUkVSUk9SCi0rCi0rIyBpbmNsdWRlIDxlcnJuby5oPgotKyMgaW5jbHVkZSA8c3RkaW8uaD4KLSsKLSsjIGlmIEdOVUxJQl9kZWZpbmVkX0VTT0NLIC8qIG5hdGl2ZSBXaW5kb3dzIHBsYXRmb3JtcyAqLwotKyMgIGlmIEhBVkVfV0lOU09DSzJfSAotKyMgICBpbmNsdWRlIDx3aW5zb2NrMi5oPgotKyMgIGVuZGlmCi0rIyBlbmRpZgotIAotLSNpbmNsdWRlICJpbnRwcm9wcy5oIgotLSNpbmNsdWRlICJzdHJlcnJvci1vdmVycmlkZS5oIgotLSNpbmNsdWRlICJ2ZXJpZnkuaCIKLSsjIGluY2x1ZGUgImludHByb3BzLmgiCi0gCi0gLyogVXNlIHRoZSBzeXN0ZW0gZnVuY3Rpb25zLCBub3QgdGhlIGdudWxpYiBvdmVycmlkZXMgaW4gdGhpcyBmaWxlLiAgKi8KLS0jdW5kZWYgc3ByaW50ZgotKyMgdW5kZWYgc3ByaW50ZgotKwotKyMgdW5kZWYgc3RyZXJyb3IKLSsjIGlmICEgSEFWRV9ERUNMX1NUUkVSUk9SCi0rIyAgZGVmaW5lIHN0cmVycm9yKG4pIE5VTEwKLSsjIGVuZGlmCi0gCi0gY2hhciAqCi0tc3RyZXJyb3IgKGludCBuKQotLSN1bmRlZiBzdHJlcnJvcgotK3JwbF9zdHJlcnJvciAoaW50IG4pCi0gewotLSAgc3RhdGljIGNoYXIgYnVmW1NUQUNLQlVGX0xFTl07Ci0tICBzaXplX3QgbGVuOwotKyAgY2hhciBjb25zdCAqbXNnID0gTlVMTDsKLSsgIC8qIFRoZXNlIGVycm9yIG1lc3NhZ2VzIGFyZSB0YWtlbiBmcm9tIGdsaWJjL3N5c2RlcHMvZ251L2Vycmxpc3QuYy4gICovCi0rICBzd2l0Y2ggKG4pCi0rICAgIHsKLSsjIGlmIEdOVUxJQl9kZWZpbmVkX0VUWFRCU1kKLSsgICAgY2FzZSBFVFhUQlNZOgotKyAgICAgIG1zZyA9ICJUZXh0IGZpbGUgYnVzeSI7Ci0rICAgICAgYnJlYWs7Ci0rIyBlbmRpZgotKwotKyMgaWYgR05VTElCX2RlZmluZWRfRVNPQ0sgLyogbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zICovCi0rICAgIC8qIEVXT1VMREJMT0NLIGlzIHRoZSBzYW1lIGFzIEVBR0FJTi4gICovCi0rICAgIGNhc2UgRUlOUFJPR1JFU1M6Ci0rICAgICAgbXNnID0gIk9wZXJhdGlvbiBub3cgaW4gcHJvZ3Jlc3MiOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEVBTFJFQURZOgotKyAgICAgIG1zZyA9ICJPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcyI7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgRU5PVFNPQ0s6Ci0rICAgICAgbXNnID0gIlNvY2tldCBvcGVyYXRpb24gb24gbm9uLXNvY2tldCI7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgRURFU1RBRERSUkVROgotKyAgICAgIG1zZyA9ICJEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkIjsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBFTVNHU0laRToKLSsgICAgICBtc2cgPSAiTWVzc2FnZSB0b28gbG9uZyI7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgRVBST1RPVFlQRToKLSsgICAgICBtc2cgPSAiUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0IjsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBFTk9QUk9UT09QVDoKLSsgICAgICBtc2cgPSAiUHJvdG9jb2wgbm90IGF2YWlsYWJsZSI7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgRVBST1RPTk9TVVBQT1JUOgotKyAgICAgIG1zZyA9ICJQcm90b2NvbCBub3Qgc3VwcG9ydGVkIjsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBFU09DS1ROT1NVUFBPUlQ6Ci0rICAgICAgbXNnID0gIlNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQiOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEVPUE5PVFNVUFA6Ci0rICAgICAgbXNnID0gIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIjsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBFUEZOT1NVUFBPUlQ6Ci0rICAgICAgbXNnID0gIlByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkIjsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBFQUZOT1NVUFBPUlQ6Ci0rICAgICAgbXNnID0gIkFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEVBRERSSU5VU0U6Ci0rICAgICAgbXNnID0gIkFkZHJlc3MgYWxyZWFkeSBpbiB1c2UiOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEVBRERSTk9UQVZBSUw6Ci0rICAgICAgbXNnID0gIkNhbm5vdCBhc3NpZ24gcmVxdWVzdGVkIGFkZHJlc3MiOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEVORVRET1dOOgotKyAgICAgIG1zZyA9ICJOZXR3b3JrIGlzIGRvd24iOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEVORVRVTlJFQUNIOgotKyAgICAgIG1zZyA9ICJOZXR3b3JrIGlzIHVucmVhY2hhYmxlIjsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBFTkVUUkVTRVQ6Ci0rICAgICAgbXNnID0gIk5ldHdvcmsgZHJvcHBlZCBjb25uZWN0aW9uIG9uIHJlc2V0IjsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBFQ09OTkFCT1JURUQ6Ci0rICAgICAgbXNnID0gIlNvZnR3YXJlIGNhdXNlZCBjb25uZWN0aW9uIGFib3J0IjsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBFQ09OTlJFU0VUOgotKyAgICAgIG1zZyA9ICJDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIiOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEVOT0JVRlM6Ci0rICAgICAgbXNnID0gIk5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUiOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEVJU0NPTk46Ci0rICAgICAgbXNnID0gIlRyYW5zcG9ydCBlbmRwb2ludCBpcyBhbHJlYWR5IGNvbm5lY3RlZCI7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgRU5PVENPTk46Ci0rICAgICAgbXNnID0gIlRyYW5zcG9ydCBlbmRwb2ludCBpcyBub3QgY29ubmVjdGVkIjsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBFU0hVVERPV046Ci0rICAgICAgbXNnID0gIkNhbm5vdCBzZW5kIGFmdGVyIHRyYW5zcG9ydCBlbmRwb2ludCBzaHV0ZG93biI7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgRVRPT01BTllSRUZTOgotKyAgICAgIG1zZyA9ICJUb28gbWFueSByZWZlcmVuY2VzOiBjYW5ub3Qgc3BsaWNlIjsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBFVElNRURPVVQ6Ci0rICAgICAgbXNnID0gIkNvbm5lY3Rpb24gdGltZWQgb3V0IjsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBFQ09OTlJFRlVTRUQ6Ci0rICAgICAgbXNnID0gIkNvbm5lY3Rpb24gcmVmdXNlZCI7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgRUxPT1A6Ci0rICAgICAgbXNnID0gIlRvbyBtYW55IGxldmVscyBvZiBzeW1ib2xpYyBsaW5rcyI7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgRUhPU1RET1dOOgotKyAgICAgIG1zZyA9ICJIb3N0IGlzIGRvd24iOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEVIT1NUVU5SRUFDSDoKLSsgICAgICBtc2cgPSAiTm8gcm91dGUgdG8gaG9zdCI7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgRVBST0NMSU06Ci0rICAgICAgbXNnID0gIlRvbyBtYW55IHByb2Nlc3NlcyI7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgRVVTRVJTOgotKyAgICAgIG1zZyA9ICJUb28gbWFueSB1c2VycyI7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgRURRVU9UOgotKyAgICAgIG1zZyA9ICJEaXNrIHF1b3RhIGV4Y2VlZGVkIjsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBFU1RBTEU6Ci0rICAgICAgbXNnID0gIlN0YWxlIE5GUyBmaWxlIGhhbmRsZSI7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgRVJFTU9URToKLSsgICAgICBtc2cgPSAiT2JqZWN0IGlzIHJlbW90ZSI7Ci0rICAgICAgYnJlYWs7Ci0rIyAgaWYgSEFWRV9XSU5TT0NLMl9ICi0rICAgIC8qIFdTQV9JTlZBTElEX0hBTkRMRSBtYXBzIHRvIEVCQURGICovCi0rICAgIC8qIFdTQV9OT1RfRU5PVUdIX01FTU9SWSBtYXBzIHRvIEVOT01FTSAqLwotKyAgICAvKiBXU0FfSU5WQUxJRF9QQVJBTUVURVIgbWFwcyB0byBFSU5WQUwgKi8KLSsgICAgY2FzZSBXU0FfT1BFUkFUSU9OX0FCT1JURUQ6Ci0rICAgICAgbXNnID0gIk92ZXJsYXBwZWQgb3BlcmF0aW9uIGFib3J0ZWQiOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIFdTQV9JT19JTkNPTVBMRVRFOgotKyAgICAgIG1zZyA9ICJPdmVybGFwcGVkIEkvTyBldmVudCBvYmplY3Qgbm90IGluIHNpZ25hbGVkIHN0YXRlIjsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBXU0FfSU9fUEVORElORzoKLSsgICAgICBtc2cgPSAiT3ZlcmxhcHBlZCBvcGVyYXRpb25zIHdpbGwgY29tcGxldGUgbGF0ZXIiOwotKyAgICAgIGJyZWFrOwotKyAgICAvKiBXU0FFSU5UUiBtYXBzIHRvIEVJTlRSICovCi0rICAgIC8qIFdTQUVCQURGIG1hcHMgdG8gRUJBREYgKi8KLSsgICAgLyogV1NBRUFDQ0VTIG1hcHMgdG8gRUFDQ0VTICovCi0rICAgIC8qIFdTQUVGQVVMVCBtYXBzIHRvIEVGQVVMVCAqLwotKyAgICAvKiBXU0FFSU5WQUwgbWFwcyB0byBFSU5WQUwgKi8KLSsgICAgLyogV1NBRU1GSUxFIG1hcHMgdG8gRU1GSUxFICovCi0rICAgIC8qIFdTQUVXT1VMREJMT0NLIG1hcHMgdG8gRVdPVUxEQkxPQ0sgKi8KLSsgICAgLyogV1NBRUlOUFJPR1JFU1MgaXMgRUlOUFJPR1JFU1MgKi8KLSsgICAgLyogV1NBRUFMUkVBRFkgaXMgRUFMUkVBRFkgKi8KLSsgICAgLyogV1NBRU5PVFNPQ0sgaXMgRU5PVFNPQ0sgKi8KLSsgICAgLyogV1NBRURFU1RBRERSUkVRIGlzIEVERVNUQUREUlJFUSAqLwotKyAgICAvKiBXU0FFTVNHU0laRSBpcyBFTVNHU0laRSAqLwotKyAgICAvKiBXU0FFUFJPVE9UWVBFIGlzIEVQUk9UT1RZUEUgKi8KLSsgICAgLyogV1NBRU5PUFJPVE9PUFQgaXMgRU5PUFJPVE9PUFQgKi8KLSsgICAgLyogV1NBRVBST1RPTk9TVVBQT1JUIGlzIEVQUk9UT05PU1VQUE9SVCAqLwotKyAgICAvKiBXU0FFU09DS1ROT1NVUFBPUlQgaXMgRVNPQ0tUTk9TVVBQT1JUICovCi0rICAgIC8qIFdTQUVPUE5PVFNVUFAgaXMgRU9QTk9UU1VQUCAqLwotKyAgICAvKiBXU0FFUEZOT1NVUFBPUlQgaXMgRVBGTk9TVVBQT1JUICovCi0rICAgIC8qIFdTQUVBRk5PU1VQUE9SVCBpcyBFQUZOT1NVUFBPUlQgKi8KLSsgICAgLyogV1NBRUFERFJJTlVTRSBpcyBFQUREUklOVVNFICovCi0rICAgIC8qIFdTQUVBRERSTk9UQVZBSUwgaXMgRUFERFJOT1RBVkFJTCAqLwotKyAgICAvKiBXU0FFTkVURE9XTiBpcyBFTkVURE9XTiAqLwotKyAgICAvKiBXU0FFTkVUVU5SRUFDSCBpcyBFTkVUVU5SRUFDSCAqLwotKyAgICAvKiBXU0FFTkVUUkVTRVQgaXMgRU5FVFJFU0VUICovCi0rICAgIC8qIFdTQUVDT05OQUJPUlRFRCBpcyBFQ09OTkFCT1JURUQgKi8KLSsgICAgLyogV1NBRUNPTk5SRVNFVCBpcyBFQ09OTlJFU0VUICovCi0rICAgIC8qIFdTQUVOT0JVRlMgaXMgRU5PQlVGUyAqLwotKyAgICAvKiBXU0FFSVNDT05OIGlzIEVJU0NPTk4gKi8KLSsgICAgLyogV1NBRU5PVENPTk4gaXMgRU5PVENPTk4gKi8KLSsgICAgLyogV1NBRVNIVVRET1dOIGlzIEVTSFVURE9XTiAqLwotKyAgICAvKiBXU0FFVE9PTUFOWVJFRlMgaXMgRVRPT01BTllSRUZTICovCi0rICAgIC8qIFdTQUVUSU1FRE9VVCBpcyBFVElNRURPVVQgKi8KLSsgICAgLyogV1NBRUNPTk5SRUZVU0VEIGlzIEVDT05OUkVGVVNFRCAqLwotKyAgICAvKiBXU0FFTE9PUCBpcyBFTE9PUCAqLwotKyAgICAvKiBXU0FFTkFNRVRPT0xPTkcgbWFwcyB0byBFTkFNRVRPT0xPTkcgKi8KLSsgICAgLyogV1NBRUhPU1RET1dOIGlzIEVIT1NURE9XTiAqLwotKyAgICAvKiBXU0FFSE9TVFVOUkVBQ0ggaXMgRUhPU1RVTlJFQUNIICovCi0rICAgIC8qIFdTQUVOT1RFTVBUWSBtYXBzIHRvIEVOT1RFTVBUWSAqLwotKyAgICAvKiBXU0FFUFJPQ0xJTSBpcyBFUFJPQ0xJTSAqLwotKyAgICAvKiBXU0FFVVNFUlMgaXMgRVVTRVJTICovCi0rICAgIC8qIFdTQUVEUVVPVCBpcyBFRFFVT1QgKi8KLSsgICAgLyogV1NBRVNUQUxFIGlzIEVTVEFMRSAqLwotKyAgICAvKiBXU0FFUkVNT1RFIGlzIEVSRU1PVEUgKi8KLSsgICAgY2FzZSBXU0FTWVNOT1RSRUFEWToKLSsgICAgICBtc2cgPSAiTmV0d29yayBzdWJzeXN0ZW0gaXMgdW5hdmFpbGFibGUiOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIFdTQVZFUk5PVFNVUFBPUlRFRDoKLSsgICAgICBtc2cgPSAiV2luc29jay5kbGwgdmVyc2lvbiBvdXQgb2YgcmFuZ2UiOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIFdTQU5PVElOSVRJQUxJU0VEOgotKyAgICAgIG1zZyA9ICJTdWNjZXNzZnVsIFdTQVN0YXJ0dXAgbm90IHlldCBwZXJmb3JtZWQiOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIFdTQUVESVNDT046Ci0rICAgICAgbXNnID0gIkdyYWNlZnVsIHNodXRkb3duIGluIHByb2dyZXNzIjsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBXU0FFTk9NT1JFOiBjYXNlIFdTQV9FX05PX01PUkU6Ci0rICAgICAgbXNnID0gIk5vIG1vcmUgcmVzdWx0cyI7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgV1NBRUNBTkNFTExFRDogY2FzZSBXU0FfRV9DQU5DRUxMRUQ6Ci0rICAgICAgbXNnID0gIkNhbGwgd2FzIGNhbmNlbGVkIjsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBXU0FFSU5WQUxJRFBST0NUQUJMRToKLSsgICAgICBtc2cgPSAiUHJvY2VkdXJlIGNhbGwgdGFibGUgaXMgaW52YWxpZCI7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgV1NBRUlOVkFMSURQUk9WSURFUjoKLSsgICAgICBtc2cgPSAiU2VydmljZSBwcm92aWRlciBpcyBpbnZhbGlkIjsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBXU0FFUFJPVklERVJGQUlMRURJTklUOgotKyAgICAgIG1zZyA9ICJTZXJ2aWNlIHByb3ZpZGVyIGZhaWxlZCB0byBpbml0aWFsaXplIjsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBXU0FTWVNDQUxMRkFJTFVSRToKLSsgICAgICBtc2cgPSAiU3lzdGVtIGNhbGwgZmFpbHVyZSI7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgV1NBU0VSVklDRV9OT1RfRk9VTkQ6Ci0rICAgICAgbXNnID0gIlNlcnZpY2Ugbm90IGZvdW5kIjsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBXU0FUWVBFX05PVF9GT1VORDoKLSsgICAgICBtc2cgPSAiQ2xhc3MgdHlwZSBub3QgZm91bmQiOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIFdTQUVSRUZVU0VEOgotKyAgICAgIG1zZyA9ICJEYXRhYmFzZSBxdWVyeSB3YXMgcmVmdXNlZCI7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgV1NBSE9TVF9OT1RfRk9VTkQ6Ci0rICAgICAgbXNnID0gIkhvc3Qgbm90IGZvdW5kIjsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBXU0FUUllfQUdBSU46Ci0rICAgICAgbXNnID0gIk5vbmF1dGhvcml0YXRpdmUgaG9zdCBub3QgZm91bmQiOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIFdTQU5PX1JFQ09WRVJZOgotKyAgICAgIG1zZyA9ICJOb25yZWNvdmVyYWJsZSBlcnJvciI7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgV1NBTk9fREFUQToKLSsgICAgICBtc2cgPSAiVmFsaWQgbmFtZSwgbm8gZGF0YSByZWNvcmQgb2YgcmVxdWVzdGVkIHR5cGUiOwotKyAgICAgIGJyZWFrOwotKyAgICAvKiBXU0FfUU9TXyogb21pdHRlZCAqLwotKyMgIGVuZGlmCi0rIyBlbmRpZgotKwotKyMgaWYgR05VTElCX2RlZmluZWRfRU5PTVNHCi0rICAgIGNhc2UgRU5PTVNHOgotKyAgICAgIG1zZyA9ICJObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZSI7Ci0rICAgICAgYnJlYWs7Ci0rIyBlbmRpZgotKwotKyMgaWYgR05VTElCX2RlZmluZWRfRUlEUk0KLSsgICAgY2FzZSBFSURSTToKLSsgICAgICBtc2cgPSAiSWRlbnRpZmllciByZW1vdmVkIjsKLSsgICAgICBicmVhazsKLSsjIGVuZGlmCi0rCi0rIyBpZiBHTlVMSUJfZGVmaW5lZF9FTk9MSU5LCi0rICAgIGNhc2UgRU5PTElOSzoKLSsgICAgICBtc2cgPSAiTGluayBoYXMgYmVlbiBzZXZlcmVkIjsKLSsgICAgICBicmVhazsKLSsjIGVuZGlmCi0rCi0rIyBpZiBHTlVMSUJfZGVmaW5lZF9FUFJPVE8KLSsgICAgY2FzZSBFUFJPVE86Ci0rICAgICAgbXNnID0gIlByb3RvY29sIGVycm9yIjsKLSsgICAgICBicmVhazsKLSsjIGVuZGlmCi0rCi0rIyBpZiBHTlVMSUJfZGVmaW5lZF9FTVVMVElIT1AKLSsgICAgY2FzZSBFTVVMVElIT1A6Ci0rICAgICAgbXNnID0gIk11bHRpaG9wIGF0dGVtcHRlZCI7Ci0rICAgICAgYnJlYWs7Ci0rIyBlbmRpZgotKwotKyMgaWYgR05VTElCX2RlZmluZWRfRUJBRE1TRwotKyAgICBjYXNlIEVCQURNU0c6Ci0rICAgICAgbXNnID0gIkJhZCBtZXNzYWdlIjsKLSsgICAgICBicmVhazsKLSsjIGVuZGlmCi0rCi0rIyBpZiBHTlVMSUJfZGVmaW5lZF9FT1ZFUkZMT1cKLSsgICAgY2FzZSBFT1ZFUkZMT1c6Ci0rICAgICAgbXNnID0gIlZhbHVlIHRvbyBsYXJnZSBmb3IgZGVmaW5lZCBkYXRhIHR5cGUiOwotKyAgICAgIGJyZWFrOwotKyMgZW5kaWYKLSsKLSsjIGlmIEdOVUxJQl9kZWZpbmVkX0VOT1RTVVAKLSsgICAgY2FzZSBFTk9UU1VQOgotKyAgICAgIG1zZyA9ICJOb3Qgc3VwcG9ydGVkIjsKLSsgICAgICBicmVhazsKLSsjIGVuZGlmCi0rCi0rIyBpZiBHTlVMSUJfZGVmaW5lZF9FU1RBTEUKLSsgICAgY2FzZSBFU1RBTEU6Ci0rICAgICAgbXNnID0gIlN0YWxlIE5GUyBmaWxlIGhhbmRsZSI7Ci0rICAgICAgYnJlYWs7Ci0rIyBlbmRpZgotKwotKyMgaWYgR05VTElCX2RlZmluZWRfRURRVU9UCi0rICAgIGNhc2UgRURRVU9UOgotKyAgICAgIG1zZyA9ICJEaXNrIHF1b3RhIGV4Y2VlZGVkIjsKLSsgICAgICBicmVhazsKLSsjIGVuZGlmCi0rCi0rIyBpZiBHTlVMSUJfZGVmaW5lZF9FQ0FOQ0VMRUQKLSsgICAgY2FzZSBFQ0FOQ0VMRUQ6Ci0rICAgICAgbXNnID0gIk9wZXJhdGlvbiBjYW5jZWxlZCI7Ci0rICAgICAgYnJlYWs7Ci0rIyBlbmRpZgotKyAgICB9Ci0gCi0tICAvKiBDYXN0IGF3YXkgY29uc3QsIGR1ZSB0byB0aGUgaGlzdG9yaWNhbCBzaWduYXR1cmUgb2Ygc3RyZXJyb3I7Ci0tICAgICBjYWxsZXJzIHNob3VsZCBub3QgYmUgbW9kaWZ5aW5nIHRoZSBzdHJpbmcuICAqLwotLSAgY29uc3QgY2hhciAqbXNnID0gc3RyZXJyb3Jfb3ZlcnJpZGUgKG4pOwotICAgaWYgKG1zZykKLSAgICAgcmV0dXJuIChjaGFyICopIG1zZzsKLSAKLS0gIG1zZyA9IHN0cmVycm9yIChuKTsKLSsgIHsKLSsgICAgY2hhciAqcmVzdWx0ID0gc3RyZXJyb3IgKG4pOwotIAotLSAgLyogT3VyIHN0cmVycm9yX3IgaW1wbGVtZW50YXRpb24gbWlnaHQgdXNlIHRoZSBzeXN0ZW0ncyBzdHJlcnJvcgotLSAgICAgYnVmZmVyLCBzbyBhbGwgb3RoZXIgY2xpZW50cyBvZiBzdHJlcnJvciBoYXZlIHRvIHNlZSB0aGUgZXJyb3IKLS0gICAgIGNvcGllZCBpbnRvIGEgYnVmZmVyIHRoYXQgd2UgbWFuYWdlLiAgVGhpcyBpcyBub3QgdGhyZWFkLXNhZmUsCi0tICAgICBldmVuIGlmIHRoZSBzeXN0ZW0gc3RyZXJyb3IgaXMsIGJ1dCBwb3J0YWJsZSBwcm9ncmFtcyBzaG91bGRuJ3QKLS0gICAgIGJlIHVzaW5nIHN0cmVycm9yIGlmIHRoZXkgY2FyZSBhYm91dCB0aHJlYWQtc2FmZXR5LiAgKi8KLS0gIGlmICghbXNnIHx8ICEqbXNnKQotLSAgICB7Ci0tICAgICAgc3RhdGljIGNoYXIgY29uc3QgZm10W10gPSAiVW5rbm93biBlcnJvciAlZCI7Ci0tICAgICAgdmVyaWZ5IChzaXplb2YgYnVmID49IHNpemVvZiAoZm10KSArIElOVF9TVFJMRU5fQk9VTkQgKG4pKTsKLS0gICAgICBzcHJpbnRmIChidWYsIGZtdCwgbik7Ci0tICAgICAgZXJybm8gPSBFSU5WQUw7Ci0tICAgICAgcmV0dXJuIGJ1ZjsKLS0gICAgfQotKyAgICBpZiAocmVzdWx0ID09IE5VTEwgfHwgcmVzdWx0WzBdID09ICdcMCcpCi0rICAgICAgewotKyAgICAgICAgc3RhdGljIGNoYXIgY29uc3QgZm10W10gPSAiVW5rbm93biBlcnJvciAoJWQpIjsKLSsgICAgICAgIHN0YXRpYyBjaGFyIG1zZ19idWZbc2l6ZW9mIGZtdCArIElOVF9TVFJMRU5fQk9VTkQgKG4pXTsKLSsgICAgICAgIHNwcmludGYgKG1zZ19idWYsIGZtdCwgbik7Ci0rICAgICAgICByZXR1cm4gbXNnX2J1ZjsKLSsgICAgICB9Ci0gCi0tICAvKiBGaXggU1RBQ0tCVUZfTEVOIGlmIHRoaXMgZXZlciBhYm9ydHMuICAqLwotLSAgbGVuID0gc3RybGVuIChtc2cpOwotLSAgaWYgKHNpemVvZiBidWYgPD0gbGVuKQotLSAgICBhYm9ydCAoKTsKLS0KLS0gIHJldHVybiBtZW1jcHkgKGJ1ZiwgbXNnLCBsZW4gKyAxKTsKLSsgICAgcmV0dXJuIHJlc3VsdDsKLSsgIH0KLSB9Ci0rCi0rI2VuZGlmCi1kaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0cmVycm9yLW92ZXJyaWRlLmMgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuYwotLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuYwkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAotKysrIGxpYmljb252LTEuMTQvc3JjbGliL3N0cmVycm9yLW92ZXJyaWRlLmMJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKLUBAIC0xLDI3OSArMCwwIEBACi0tLyogc3RyZXJyb3Itb3ZlcnJpZGUuYyAtLS0gUE9TSVggY29tcGF0aWJsZSBzeXN0ZW0gZXJyb3Igcm91dGluZQotLQotLSAgIENvcHlyaWdodCAoQykgMjAxMC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotLQotLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0tICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLS0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotLSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0tCi0tICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0tICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLS0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0tICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLS0KLS0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLS0KLS0vKiBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPiwgMjAxMC4gICovCi0tCi0tI2luY2x1ZGUgPGNvbmZpZy5oPgotLQotLSNpbmNsdWRlICJzdHJlcnJvci1vdmVycmlkZS5oIgotLQotLSNpbmNsdWRlIDxlcnJuby5oPgotLQotLSNpZiBHTlVMSUJfZGVmaW5lZF9FU09DSyAvKiBuYXRpdmUgV2luZG93cyBwbGF0Zm9ybXMgKi8KLS0jIGlmIEhBVkVfV0lOU09DSzJfSAotLSMgIGluY2x1ZGUgPHdpbnNvY2syLmg+Ci0tIyBlbmRpZgotLSNlbmRpZgotLQotLS8qIElmIEVSUk5VTSBtYXBzIHRvIGFuIGVycm5vIHZhbHVlIGRlZmluZWQgYnkgZ251bGliLCByZXR1cm4gYSBzdHJpbmcKLS0gICBkZXNjcmliaW5nIHRoZSBlcnJvci4gIE90aGVyd2lzZSByZXR1cm4gTlVMTC4gICovCi0tY29uc3QgY2hhciAqCi0tc3RyZXJyb3Jfb3ZlcnJpZGUgKGludCBlcnJudW0pCi0tewotLSAgLyogVGhlc2UgZXJyb3IgbWVzc2FnZXMgYXJlIHRha2VuIGZyb20gZ2xpYmMvc3lzZGVwcy9nbnUvZXJybGlzdC5jLiAgKi8KLS0gIHN3aXRjaCAoZXJybnVtKQotLSAgICB7Ci0tI2lmIFJFUExBQ0VfU1RSRVJST1JfMAotLSAgICBjYXNlIDA6Ci0tICAgICAgcmV0dXJuICJTdWNjZXNzIjsKLS0jZW5kaWYKLS0KLS0jaWYgR05VTElCX2RlZmluZWRfRVRYVEJTWQotLSAgICBjYXNlIEVUWFRCU1k6Ci0tICAgICAgcmV0dXJuICJUZXh0IGZpbGUgYnVzeSI7Ci0tI2VuZGlmCi0tCi0tI2lmIEdOVUxJQl9kZWZpbmVkX0VTT0NLIC8qIG5hdGl2ZSBXaW5kb3dzIHBsYXRmb3JtcyAqLwotLSAgICAgIC8qIEVXT1VMREJMT0NLIGlzIHRoZSBzYW1lIGFzIEVBR0FJTi4gICovCi0tICAgIGNhc2UgRUlOUFJPR1JFU1M6Ci0tICAgICAgcmV0dXJuICJPcGVyYXRpb24gbm93IGluIHByb2dyZXNzIjsKLS0gICAgY2FzZSBFQUxSRUFEWToKLS0gICAgICByZXR1cm4gIk9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzIjsKLS0gICAgY2FzZSBFTk9UU09DSzoKLS0gICAgICByZXR1cm4gIlNvY2tldCBvcGVyYXRpb24gb24gbm9uLXNvY2tldCI7Ci0tICAgIGNhc2UgRURFU1RBRERSUkVROgotLSAgICAgIHJldHVybiAiRGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZCI7Ci0tICAgIGNhc2UgRU1TR1NJWkU6Ci0tICAgICAgcmV0dXJuICJNZXNzYWdlIHRvbyBsb25nIjsKLS0gICAgY2FzZSBFUFJPVE9UWVBFOgotLSAgICAgIHJldHVybiAiUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0IjsKLS0gICAgY2FzZSBFTk9QUk9UT09QVDoKLS0gICAgICByZXR1cm4gIlByb3RvY29sIG5vdCBhdmFpbGFibGUiOwotLSAgICBjYXNlIEVQUk9UT05PU1VQUE9SVDoKLS0gICAgICByZXR1cm4gIlByb3RvY29sIG5vdCBzdXBwb3J0ZWQiOwotLSAgICBjYXNlIEVTT0NLVE5PU1VQUE9SVDoKLS0gICAgICByZXR1cm4gIlNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQiOwotLSAgICBjYXNlIEVPUE5PVFNVUFA6Ci0tICAgICAgcmV0dXJuICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCI7Ci0tICAgIGNhc2UgRVBGTk9TVVBQT1JUOgotLSAgICAgIHJldHVybiAiUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQiOwotLSAgICBjYXNlIEVBRk5PU1VQUE9SVDoKLS0gICAgICByZXR1cm4gIkFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiOwotLSAgICBjYXNlIEVBRERSSU5VU0U6Ci0tICAgICAgcmV0dXJuICJBZGRyZXNzIGFscmVhZHkgaW4gdXNlIjsKLS0gICAgY2FzZSBFQUREUk5PVEFWQUlMOgotLSAgICAgIHJldHVybiAiQ2Fubm90IGFzc2lnbiByZXF1ZXN0ZWQgYWRkcmVzcyI7Ci0tICAgIGNhc2UgRU5FVERPV046Ci0tICAgICAgcmV0dXJuICJOZXR3b3JrIGlzIGRvd24iOwotLSAgICBjYXNlIEVORVRVTlJFQUNIOgotLSAgICAgIHJldHVybiAiTmV0d29yayBpcyB1bnJlYWNoYWJsZSI7Ci0tICAgIGNhc2UgRU5FVFJFU0VUOgotLSAgICAgIHJldHVybiAiTmV0d29yayBkcm9wcGVkIGNvbm5lY3Rpb24gb24gcmVzZXQiOwotLSAgICBjYXNlIEVDT05OQUJPUlRFRDoKLS0gICAgICByZXR1cm4gIlNvZnR3YXJlIGNhdXNlZCBjb25uZWN0aW9uIGFib3J0IjsKLS0gICAgY2FzZSBFQ09OTlJFU0VUOgotLSAgICAgIHJldHVybiAiQ29ubmVjdGlvbiByZXNldCBieSBwZWVyIjsKLS0gICAgY2FzZSBFTk9CVUZTOgotLSAgICAgIHJldHVybiAiTm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZSI7Ci0tICAgIGNhc2UgRUlTQ09OTjoKLS0gICAgICByZXR1cm4gIlRyYW5zcG9ydCBlbmRwb2ludCBpcyBhbHJlYWR5IGNvbm5lY3RlZCI7Ci0tICAgIGNhc2UgRU5PVENPTk46Ci0tICAgICAgcmV0dXJuICJUcmFuc3BvcnQgZW5kcG9pbnQgaXMgbm90IGNvbm5lY3RlZCI7Ci0tICAgIGNhc2UgRVNIVVRET1dOOgotLSAgICAgIHJldHVybiAiQ2Fubm90IHNlbmQgYWZ0ZXIgdHJhbnNwb3J0IGVuZHBvaW50IHNodXRkb3duIjsKLS0gICAgY2FzZSBFVE9PTUFOWVJFRlM6Ci0tICAgICAgcmV0dXJuICJUb28gbWFueSByZWZlcmVuY2VzOiBjYW5ub3Qgc3BsaWNlIjsKLS0gICAgY2FzZSBFVElNRURPVVQ6Ci0tICAgICAgcmV0dXJuICJDb25uZWN0aW9uIHRpbWVkIG91dCI7Ci0tICAgIGNhc2UgRUNPTk5SRUZVU0VEOgotLSAgICAgIHJldHVybiAiQ29ubmVjdGlvbiByZWZ1c2VkIjsKLS0gICAgY2FzZSBFTE9PUDoKLS0gICAgICByZXR1cm4gIlRvbyBtYW55IGxldmVscyBvZiBzeW1ib2xpYyBsaW5rcyI7Ci0tICAgIGNhc2UgRUhPU1RET1dOOgotLSAgICAgIHJldHVybiAiSG9zdCBpcyBkb3duIjsKLS0gICAgY2FzZSBFSE9TVFVOUkVBQ0g6Ci0tICAgICAgcmV0dXJuICJObyByb3V0ZSB0byBob3N0IjsKLS0gICAgY2FzZSBFUFJPQ0xJTToKLS0gICAgICByZXR1cm4gIlRvbyBtYW55IHByb2Nlc3NlcyI7Ci0tICAgIGNhc2UgRVVTRVJTOgotLSAgICAgIHJldHVybiAiVG9vIG1hbnkgdXNlcnMiOwotLSAgICBjYXNlIEVEUVVPVDoKLS0gICAgICByZXR1cm4gIkRpc2sgcXVvdGEgZXhjZWVkZWQiOwotLSAgICBjYXNlIEVTVEFMRToKLS0gICAgICByZXR1cm4gIlN0YWxlIE5GUyBmaWxlIGhhbmRsZSI7Ci0tICAgIGNhc2UgRVJFTU9URToKLS0gICAgICByZXR1cm4gIk9iamVjdCBpcyByZW1vdGUiOwotLSMgaWYgSEFWRV9XSU5TT0NLMl9ICi0tICAgICAgLyogV1NBX0lOVkFMSURfSEFORExFIG1hcHMgdG8gRUJBREYgKi8KLS0gICAgICAvKiBXU0FfTk9UX0VOT1VHSF9NRU1PUlkgbWFwcyB0byBFTk9NRU0gKi8KLS0gICAgICAvKiBXU0FfSU5WQUxJRF9QQVJBTUVURVIgbWFwcyB0byBFSU5WQUwgKi8KLS0gICAgY2FzZSBXU0FfT1BFUkFUSU9OX0FCT1JURUQ6Ci0tICAgICAgcmV0dXJuICJPdmVybGFwcGVkIG9wZXJhdGlvbiBhYm9ydGVkIjsKLS0gICAgY2FzZSBXU0FfSU9fSU5DT01QTEVURToKLS0gICAgICByZXR1cm4gIk92ZXJsYXBwZWQgSS9PIGV2ZW50IG9iamVjdCBub3QgaW4gc2lnbmFsZWQgc3RhdGUiOwotLSAgICBjYXNlIFdTQV9JT19QRU5ESU5HOgotLSAgICAgIHJldHVybiAiT3ZlcmxhcHBlZCBvcGVyYXRpb25zIHdpbGwgY29tcGxldGUgbGF0ZXIiOwotLSAgICAgIC8qIFdTQUVJTlRSIG1hcHMgdG8gRUlOVFIgKi8KLS0gICAgICAvKiBXU0FFQkFERiBtYXBzIHRvIEVCQURGICovCi0tICAgICAgLyogV1NBRUFDQ0VTIG1hcHMgdG8gRUFDQ0VTICovCi0tICAgICAgLyogV1NBRUZBVUxUIG1hcHMgdG8gRUZBVUxUICovCi0tICAgICAgLyogV1NBRUlOVkFMIG1hcHMgdG8gRUlOVkFMICovCi0tICAgICAgLyogV1NBRU1GSUxFIG1hcHMgdG8gRU1GSUxFICovCi0tICAgICAgLyogV1NBRVdPVUxEQkxPQ0sgbWFwcyB0byBFV09VTERCTE9DSyAqLwotLSAgICAgIC8qIFdTQUVJTlBST0dSRVNTIGlzIEVJTlBST0dSRVNTICovCi0tICAgICAgLyogV1NBRUFMUkVBRFkgaXMgRUFMUkVBRFkgKi8KLS0gICAgICAvKiBXU0FFTk9UU09DSyBpcyBFTk9UU09DSyAqLwotLSAgICAgIC8qIFdTQUVERVNUQUREUlJFUSBpcyBFREVTVEFERFJSRVEgKi8KLS0gICAgICAvKiBXU0FFTVNHU0laRSBpcyBFTVNHU0laRSAqLwotLSAgICAgIC8qIFdTQUVQUk9UT1RZUEUgaXMgRVBST1RPVFlQRSAqLwotLSAgICAgIC8qIFdTQUVOT1BST1RPT1BUIGlzIEVOT1BST1RPT1BUICovCi0tICAgICAgLyogV1NBRVBST1RPTk9TVVBQT1JUIGlzIEVQUk9UT05PU1VQUE9SVCAqLwotLSAgICAgIC8qIFdTQUVTT0NLVE5PU1VQUE9SVCBpcyBFU09DS1ROT1NVUFBPUlQgKi8KLS0gICAgICAvKiBXU0FFT1BOT1RTVVBQIGlzIEVPUE5PVFNVUFAgKi8KLS0gICAgICAvKiBXU0FFUEZOT1NVUFBPUlQgaXMgRVBGTk9TVVBQT1JUICovCi0tICAgICAgLyogV1NBRUFGTk9TVVBQT1JUIGlzIEVBRk5PU1VQUE9SVCAqLwotLSAgICAgIC8qIFdTQUVBRERSSU5VU0UgaXMgRUFERFJJTlVTRSAqLwotLSAgICAgIC8qIFdTQUVBRERSTk9UQVZBSUwgaXMgRUFERFJOT1RBVkFJTCAqLwotLSAgICAgIC8qIFdTQUVORVRET1dOIGlzIEVORVRET1dOICovCi0tICAgICAgLyogV1NBRU5FVFVOUkVBQ0ggaXMgRU5FVFVOUkVBQ0ggKi8KLS0gICAgICAvKiBXU0FFTkVUUkVTRVQgaXMgRU5FVFJFU0VUICovCi0tICAgICAgLyogV1NBRUNPTk5BQk9SVEVEIGlzIEVDT05OQUJPUlRFRCAqLwotLSAgICAgIC8qIFdTQUVDT05OUkVTRVQgaXMgRUNPTk5SRVNFVCAqLwotLSAgICAgIC8qIFdTQUVOT0JVRlMgaXMgRU5PQlVGUyAqLwotLSAgICAgIC8qIFdTQUVJU0NPTk4gaXMgRUlTQ09OTiAqLwotLSAgICAgIC8qIFdTQUVOT1RDT05OIGlzIEVOT1RDT05OICovCi0tICAgICAgLyogV1NBRVNIVVRET1dOIGlzIEVTSFVURE9XTiAqLwotLSAgICAgIC8qIFdTQUVUT09NQU5ZUkVGUyBpcyBFVE9PTUFOWVJFRlMgKi8KLS0gICAgICAvKiBXU0FFVElNRURPVVQgaXMgRVRJTUVET1VUICovCi0tICAgICAgLyogV1NBRUNPTk5SRUZVU0VEIGlzIEVDT05OUkVGVVNFRCAqLwotLSAgICAgIC8qIFdTQUVMT09QIGlzIEVMT09QICovCi0tICAgICAgLyogV1NBRU5BTUVUT09MT05HIG1hcHMgdG8gRU5BTUVUT09MT05HICovCi0tICAgICAgLyogV1NBRUhPU1RET1dOIGlzIEVIT1NURE9XTiAqLwotLSAgICAgIC8qIFdTQUVIT1NUVU5SRUFDSCBpcyBFSE9TVFVOUkVBQ0ggKi8KLS0gICAgICAvKiBXU0FFTk9URU1QVFkgbWFwcyB0byBFTk9URU1QVFkgKi8KLS0gICAgICAvKiBXU0FFUFJPQ0xJTSBpcyBFUFJPQ0xJTSAqLwotLSAgICAgIC8qIFdTQUVVU0VSUyBpcyBFVVNFUlMgKi8KLS0gICAgICAvKiBXU0FFRFFVT1QgaXMgRURRVU9UICovCi0tICAgICAgLyogV1NBRVNUQUxFIGlzIEVTVEFMRSAqLwotLSAgICAgIC8qIFdTQUVSRU1PVEUgaXMgRVJFTU9URSAqLwotLSAgICBjYXNlIFdTQVNZU05PVFJFQURZOgotLSAgICAgIHJldHVybiAiTmV0d29yayBzdWJzeXN0ZW0gaXMgdW5hdmFpbGFibGUiOwotLSAgICBjYXNlIFdTQVZFUk5PVFNVUFBPUlRFRDoKLS0gICAgICByZXR1cm4gIldpbnNvY2suZGxsIHZlcnNpb24gb3V0IG9mIHJhbmdlIjsKLS0gICAgY2FzZSBXU0FOT1RJTklUSUFMSVNFRDoKLS0gICAgICByZXR1cm4gIlN1Y2Nlc3NmdWwgV1NBU3RhcnR1cCBub3QgeWV0IHBlcmZvcm1lZCI7Ci0tICAgIGNhc2UgV1NBRURJU0NPTjoKLS0gICAgICByZXR1cm4gIkdyYWNlZnVsIHNodXRkb3duIGluIHByb2dyZXNzIjsKLS0gICAgY2FzZSBXU0FFTk9NT1JFOiBjYXNlIFdTQV9FX05PX01PUkU6Ci0tICAgICAgcmV0dXJuICJObyBtb3JlIHJlc3VsdHMiOwotLSAgICBjYXNlIFdTQUVDQU5DRUxMRUQ6IGNhc2UgV1NBX0VfQ0FOQ0VMTEVEOgotLSAgICAgIHJldHVybiAiQ2FsbCB3YXMgY2FuY2VsZWQiOwotLSAgICBjYXNlIFdTQUVJTlZBTElEUFJPQ1RBQkxFOgotLSAgICAgIHJldHVybiAiUHJvY2VkdXJlIGNhbGwgdGFibGUgaXMgaW52YWxpZCI7Ci0tICAgIGNhc2UgV1NBRUlOVkFMSURQUk9WSURFUjoKLS0gICAgICByZXR1cm4gIlNlcnZpY2UgcHJvdmlkZXIgaXMgaW52YWxpZCI7Ci0tICAgIGNhc2UgV1NBRVBST1ZJREVSRkFJTEVESU5JVDoKLS0gICAgICByZXR1cm4gIlNlcnZpY2UgcHJvdmlkZXIgZmFpbGVkIHRvIGluaXRpYWxpemUiOwotLSAgICBjYXNlIFdTQVNZU0NBTExGQUlMVVJFOgotLSAgICAgIHJldHVybiAiU3lzdGVtIGNhbGwgZmFpbHVyZSI7Ci0tICAgIGNhc2UgV1NBU0VSVklDRV9OT1RfRk9VTkQ6Ci0tICAgICAgcmV0dXJuICJTZXJ2aWNlIG5vdCBmb3VuZCI7Ci0tICAgIGNhc2UgV1NBVFlQRV9OT1RfRk9VTkQ6Ci0tICAgICAgcmV0dXJuICJDbGFzcyB0eXBlIG5vdCBmb3VuZCI7Ci0tICAgIGNhc2UgV1NBRVJFRlVTRUQ6Ci0tICAgICAgcmV0dXJuICJEYXRhYmFzZSBxdWVyeSB3YXMgcmVmdXNlZCI7Ci0tICAgIGNhc2UgV1NBSE9TVF9OT1RfRk9VTkQ6Ci0tICAgICAgcmV0dXJuICJIb3N0IG5vdCBmb3VuZCI7Ci0tICAgIGNhc2UgV1NBVFJZX0FHQUlOOgotLSAgICAgIHJldHVybiAiTm9uYXV0aG9yaXRhdGl2ZSBob3N0IG5vdCBmb3VuZCI7Ci0tICAgIGNhc2UgV1NBTk9fUkVDT1ZFUlk6Ci0tICAgICAgcmV0dXJuICJOb25yZWNvdmVyYWJsZSBlcnJvciI7Ci0tICAgIGNhc2UgV1NBTk9fREFUQToKLS0gICAgICByZXR1cm4gIlZhbGlkIG5hbWUsIG5vIGRhdGEgcmVjb3JkIG9mIHJlcXVlc3RlZCB0eXBlIjsKLS0gICAgICAvKiBXU0FfUU9TXyogb21pdHRlZCAqLwotLSMgZW5kaWYKLS0jZW5kaWYKLS0KLS0jaWYgR05VTElCX2RlZmluZWRfRU5PTVNHCi0tICAgIGNhc2UgRU5PTVNHOgotLSAgICAgIHJldHVybiAiTm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUiOwotLSNlbmRpZgotLQotLSNpZiBHTlVMSUJfZGVmaW5lZF9FSURSTQotLSAgICBjYXNlIEVJRFJNOgotLSAgICAgIHJldHVybiAiSWRlbnRpZmllciByZW1vdmVkIjsKLS0jZW5kaWYKLS0KLS0jaWYgR05VTElCX2RlZmluZWRfRU5PTElOSwotLSAgICBjYXNlIEVOT0xJTks6Ci0tICAgICAgcmV0dXJuICJMaW5rIGhhcyBiZWVuIHNldmVyZWQiOwotLSNlbmRpZgotLQotLSNpZiBHTlVMSUJfZGVmaW5lZF9FUFJPVE8KLS0gICAgY2FzZSBFUFJPVE86Ci0tICAgICAgcmV0dXJuICJQcm90b2NvbCBlcnJvciI7Ci0tI2VuZGlmCi0tCi0tI2lmIEdOVUxJQl9kZWZpbmVkX0VNVUxUSUhPUAotLSAgICBjYXNlIEVNVUxUSUhPUDoKLS0gICAgICByZXR1cm4gIk11bHRpaG9wIGF0dGVtcHRlZCI7Ci0tI2VuZGlmCi0tCi0tI2lmIEdOVUxJQl9kZWZpbmVkX0VCQURNU0cKLS0gICAgY2FzZSBFQkFETVNHOgotLSAgICAgIHJldHVybiAiQmFkIG1lc3NhZ2UiOwotLSNlbmRpZgotLQotLSNpZiBHTlVMSUJfZGVmaW5lZF9FT1ZFUkZMT1cKLS0gICAgY2FzZSBFT1ZFUkZMT1c6Ci0tICAgICAgcmV0dXJuICJWYWx1ZSB0b28gbGFyZ2UgZm9yIGRlZmluZWQgZGF0YSB0eXBlIjsKLS0jZW5kaWYKLS0KLS0jaWYgR05VTElCX2RlZmluZWRfRU5PVFNVUAotLSAgICBjYXNlIEVOT1RTVVA6Ci0tICAgICAgcmV0dXJuICJOb3Qgc3VwcG9ydGVkIjsKLS0jZW5kaWYKLS0KLS0jaWYgR05VTElCX2RlZmluZWRfRU5FVFJFU0VUCi0tICAgIGNhc2UgRU5FVFJFU0VUOgotLSAgICAgIHJldHVybiAiTmV0d29yayBkcm9wcGVkIGNvbm5lY3Rpb24gb24gcmVzZXQiOwotLSNlbmRpZgotLQotLSNpZiBHTlVMSUJfZGVmaW5lZF9FQ09OTkFCT1JURUQKLS0gICAgY2FzZSBFQ09OTkFCT1JURUQ6Ci0tICAgICAgcmV0dXJuICJTb2Z0d2FyZSBjYXVzZWQgY29ubmVjdGlvbiBhYm9ydCI7Ci0tI2VuZGlmCi0tCi0tI2lmIEdOVUxJQl9kZWZpbmVkX0VTVEFMRQotLSAgICBjYXNlIEVTVEFMRToKLS0gICAgICByZXR1cm4gIlN0YWxlIE5GUyBmaWxlIGhhbmRsZSI7Ci0tI2VuZGlmCi0tCi0tI2lmIEdOVUxJQl9kZWZpbmVkX0VEUVVPVAotLSAgICBjYXNlIEVEUVVPVDoKLS0gICAgICByZXR1cm4gIkRpc2sgcXVvdGEgZXhjZWVkZWQiOwotLSNlbmRpZgotLQotLSNpZiBHTlVMSUJfZGVmaW5lZF9FQ0FOQ0VMRUQKLS0gICAgY2FzZSBFQ0FOQ0VMRUQ6Ci0tICAgICAgcmV0dXJuICJPcGVyYXRpb24gY2FuY2VsZWQiOwotLSNlbmRpZgotLQotLSAgICBkZWZhdWx0OgotLSAgICAgIHJldHVybiBOVUxMOwotLSAgICB9Ci0tfQotZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdHJlcnJvci1vdmVycmlkZS5oIGxpYmljb252LTEuMTQvc3JjbGliL3N0cmVycm9yLW92ZXJyaWRlLmgKLS0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0cmVycm9yLW92ZXJyaWRlLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKLSsrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdHJlcnJvci1vdmVycmlkZS5oCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCi1AQCAtMSw1MiArMCwwIEBACi0tLyogc3RyZXJyb3Itb3ZlcnJpZGUuaCAtLS0gUE9TSVggY29tcGF0aWJsZSBzeXN0ZW0gZXJyb3Igcm91dGluZQotLQotLSAgIENvcHlyaWdodCAoQykgMjAxMC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotLQotLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0tICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLS0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotLSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0tCi0tICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0tICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLS0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0tICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLS0KLS0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLS0KLS0jaWZuZGVmIF9HTF9TVFJFUlJPUl9PVkVSUklERV9ICi0tIyBkZWZpbmUgX0dMX1NUUkVSUk9SX09WRVJSSURFX0gKLS0KLS0jIGluY2x1ZGUgPGVycm5vLmg+Ci0tIyBpbmNsdWRlIDxzdGRkZWYuaD4KLS0KLS0vKiBSZWFzb25hYmxlIGJ1ZmZlciBzaXplIHRoYXQgc2hvdWxkIG5ldmVyIHRyaWdnZXIgRVJBTkdFOyBpZiB0aGlzCi0tICAgcHJvdmVzIHRvbyBzbWFsbCwgd2UgaW50ZW50aW9uYWxseSBhYm9ydCgpLCB0byByZW1pbmQgdXMgdG8gZml4Ci0tICAgdGhpcyB2YWx1ZS4gICovCi0tIyBkZWZpbmUgU1RBQ0tCVUZfTEVOIDI1NgotLQotLS8qIElmIEVSUk5VTSBtYXBzIHRvIGFuIGVycm5vIHZhbHVlIGRlZmluZWQgYnkgZ251bGliLCByZXR1cm4gYSBzdHJpbmcKLS0gICBkZXNjcmliaW5nIHRoZSBlcnJvci4gIE90aGVyd2lzZSByZXR1cm4gTlVMTC4gICovCi0tIyBpZiBSRVBMQUNFX1NUUkVSUk9SXzAgXAotLSAgICAgfHwgR05VTElCX2RlZmluZWRfRVRYVEJTWSBcCi0tICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FU09DSyBcCi0tICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FTk9NU0cgXAotLSAgICAgfHwgR05VTElCX2RlZmluZWRfRUlEUk0gXAotLSAgICAgfHwgR05VTElCX2RlZmluZWRfRU5PTElOSyBcCi0tICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FUFJPVE8gXAotLSAgICAgfHwgR05VTElCX2RlZmluZWRfRU1VTFRJSE9QIFwKLS0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VCQURNU0cgXAotLSAgICAgfHwgR05VTElCX2RlZmluZWRfRU9WRVJGTE9XIFwKLS0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VOT1RTVVAgXAotLSAgICAgfHwgR05VTElCX2RlZmluZWRfRU5FVFJFU0VUIFwKLS0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VDT05OQUJPUlRFRCBcCi0tICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FU1RBTEUgXAotLSAgICAgfHwgR05VTElCX2RlZmluZWRfRURRVU9UIFwKLS0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VDQU5DRUxFRAotLWV4dGVybiBjb25zdCBjaGFyICpzdHJlcnJvcl9vdmVycmlkZSAoaW50IGVycm51bSk7Ci0tIyBlbHNlCi0tIyAgZGVmaW5lIHN0cmVycm9yX292ZXJyaWRlKGlnbm9yZWQpIE5VTEwKLS0jIGVuZGlmCi0tCi0tI2VuZGlmIC8qIF9HTF9TVFJFUlJPUl9PVkVSUklERV9IICovCi1kaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0cmluZy5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL3N0cmluZy5pbi5oCi0tLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdHJpbmcuaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAotKysrIGxpYmljb252LTEuMTQvc3JjbGliL3N0cmluZy5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuNDE4NDg0NDYxIC0wODAwCi1AQCAtMTYsNyArMTYsNyBAQAotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwotIAotLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NUUklOR19ICi0rI2lmbmRlZiBfR0xfU1RSSU5HX0gKLSAKLSAjaWYgX19HTlVDX18gPj0gMwotIEBQUkFHTUFfU1lTVEVNX0hFQURFUkAKLUBAIC0yNiw4ICsyNiw4IEBACi0gLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLwotICNASU5DTFVERV9ORVhUQCBATkVYVF9TVFJJTkdfSEAKLSAKLS0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TVFJJTkdfSAotLSNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1NUUklOR19ICi0rI2lmbmRlZiBfR0xfU1RSSU5HX0gKLSsjZGVmaW5lIF9HTF9TVFJJTkdfSAotIAotIC8qIE5ldEJTRCA1LjAgbWlzLWRlZmluZXMgTlVMTC4gICovCi0gI2luY2x1ZGUgPHN0ZGRlZi5oPgotQEAgLTU5LDM2ICs1OSw2IEBACi0gLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KLSAKLSAKLS0vKiBGaW5kIHRoZSBpbmRleCBvZiB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgc2V0IGJpdC4gICovCi0tI2lmIEBHTlVMSUJfRkZTTEAKLS0jIGlmICFASEFWRV9GRlNMQAotLV9HTF9GVU5DREVDTF9TWVMgKGZmc2wsIGludCwgKGxvbmcgaW50IGkpKTsKLS0jIGVuZGlmCi0tX0dMX0NYWEFMSUFTX1NZUyAoZmZzbCwgaW50LCAobG9uZyBpbnQgaSkpOwotLV9HTF9DWFhBTElBU1dBUk4gKGZmc2wpOwotLSNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKLS0jIHVuZGVmIGZmc2wKLS0jIGlmIEhBVkVfUkFXX0RFQ0xfRkZTTAotLV9HTF9XQVJOX09OX1VTRSAoZmZzbCwgImZmc2wgaXMgbm90IHBvcnRhYmxlIC0gdXNlIHRoZSBmZnNsIG1vZHVsZSIpOwotLSMgZW5kaWYKLS0jZW5kaWYKLS0KLS0KLS0vKiBGaW5kIHRoZSBpbmRleCBvZiB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgc2V0IGJpdC4gICovCi0tI2lmIEBHTlVMSUJfRkZTTExACi0tIyBpZiAhQEhBVkVfRkZTTExACi0tX0dMX0ZVTkNERUNMX1NZUyAoZmZzbGwsIGludCwgKGxvbmcgbG9uZyBpbnQgaSkpOwotLSMgZW5kaWYKLS1fR0xfQ1hYQUxJQVNfU1lTIChmZnNsbCwgaW50LCAobG9uZyBsb25nIGludCBpKSk7Ci0tX0dMX0NYWEFMSUFTV0FSTiAoZmZzbGwpOwotLSNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKLS0jIHVuZGVmIGZmc2xsCi0tIyBpZiBIQVZFX1JBV19ERUNMX0ZGU0xMCi0tX0dMX1dBUk5fT05fVVNFIChmZnNsbCwgImZmc2xsIGlzIG5vdCBwb3J0YWJsZSAtIHVzZSB0aGUgZmZzbGwgbW9kdWxlIik7Ci0tIyBlbmRpZgotLSNlbmRpZgotLQotLQotIC8qIFJldHVybiB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgQyB3aXRoaW4gTiBieXRlcyBvZiBTLCBvciBOVUxMLiAgKi8KLSAjaWYgQEdOVUxJQl9NRU1DSFJACi0gIyBpZiBAUkVQTEFDRV9NRU1DSFJACi1AQCAtMTAwNyw1ICs5NzcsNSBAQCBfR0xfV0FSTl9PTl9VU0UgKHN0cnZlcnNjbXAsICJzdHJ2ZXJzY21wCi0gI2VuZGlmCi0gCi0gCi0tI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TVFJJTkdfSCAqLwotLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1RSSU5HX0ggKi8KLSsjZW5kaWYgLyogX0dMX1NUUklOR19IICovCi0rI2VuZGlmIC8qIF9HTF9TVFJJTkdfSCAqLwotZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zeXNfc3RhdC5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL3N5c19zdGF0LmluLmgKLS0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N5c19zdGF0LmluLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKLSsrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zeXNfc3RhdC5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuNDMwNDg0NDYxIC0wODAwCi1AQCAtMzQsNyArMzQsNyBAQAotICNlbHNlCi0gLyogTm9ybWFsIGludm9jYXRpb24gY29udmVudGlvbi4gICovCi0gCi0tI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1lTX1NUQVRfSAotKyNpZm5kZWYgX0dMX1NZU19TVEFUX0gKLSAKLSAvKiBHZXQgbmxpbmtfdC4gICovCi0gI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotQEAgLTQ1LDggKzQ1LDggQEAKLSAvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCi0gI0BJTkNMVURFX05FWFRAIEBORVhUX1NZU19TVEFUX0hACi0gCi0tI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1lTX1NUQVRfSAotLSNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1NZU19TVEFUX0gKLSsjaWZuZGVmIF9HTF9TWVNfU1RBVF9ICi0rI2RlZmluZSBfR0xfU1lTX1NUQVRfSAotIAotIC8qIFRoZSBkZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBMIGV0Yy4gYXJlIGNvcGllZCBoZXJlLiAgKi8KLSAKLUBAIC02NTMsNiArNjUzLDYgQEAgX0dMX1dBUk5fT05fVVNFICh1dGltZW5zYXQsICJ1dGltZW5zYXQgaQotICNlbmRpZgotIAotIAotLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1lTX1NUQVRfSCAqLwotLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1lTX1NUQVRfSCAqLwotKyNlbmRpZiAvKiBfR0xfU1lTX1NUQVRfSCAqLwotKyNlbmRpZiAvKiBfR0xfU1lTX1NUQVRfSCAqLwotICNlbmRpZgotZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi90aW1lLmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvdGltZS5pbi5oCi0tLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi90aW1lLmluLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKLSsrKyBsaWJpY29udi0xLjE0L3NyY2xpYi90aW1lLmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC40Mzg0ODQ0NjIgLTA4MDAKLUBAIC0yOCwxMyArMjgsMTMgQEAKLSAgICB3aXRob3V0IGFkZGluZyBvdXIgb3duIGRlY2xhcmF0aW9ucy4gICovCi0gI2lmIChkZWZpbmVkIF9fbmVlZF90aW1lX3QgfHwgZGVmaW5lZCBfX25lZWRfY2xvY2tfdCBcCi0gICAgICB8fCBkZWZpbmVkIF9fbmVlZF90aW1lc3BlYyBcCi0tICAgICB8fCBkZWZpbmVkIF9AR1VBUkRfUFJFRklYQF9USU1FX0gpCi0rICAgICB8fCBkZWZpbmVkIF9HTF9USU1FX0gpCi0gCi0gIyBASU5DTFVERV9ORVhUQCBATkVYVF9USU1FX0hACi0gCi0gI2Vsc2UKLSAKLS0jIGRlZmluZSBfQEdVQVJEX1BSRUZJWEBfVElNRV9ICi0rIyBkZWZpbmUgX0dMX1RJTUVfSAotIAotICMgQElOQ0xVREVfTkVYVEAgQE5FWFRfVElNRV9IQAotIAotZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi91bmlzdGQuaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi91bmlzdGQuaW4uaAotLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvdW5pc3RkLmluLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKLSsrKyBsaWJpY29udi0xLjE0L3NyY2xpYi91bmlzdGQuaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjQ1MDQ4NDQ2MiAtMDgwMAotQEAgLTM2LDcgKzM2LDcgQEAKLSAjIGRlZmluZSBfR0xfV0lOU09DSzJfSF9XSVRORVNTCi0gCi0gLyogTm9ybWFsIGludm9jYXRpb24uICAqLwotLSNlbGlmICFkZWZpbmVkIF9AR1VBUkRfUFJFRklYQF9VTklTVERfSAotKyNlbGlmICFkZWZpbmVkIF9HTF9VTklTVERfSAotIAotIC8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KLSAjaWYgQEhBVkVfVU5JU1REX0hACi1AQCAtNTEsOCArNTEsOCBAQAotICMgdW5kZWYgX0dMX0lOQ0xVRElOR19XSU5TT0NLMl9ICi0gI2VuZGlmCi0gCi0tI2lmICFkZWZpbmVkIF9AR1VBUkRfUFJFRklYQF9VTklTVERfSCAmJiAhZGVmaW5lZCBfR0xfSU5DTFVESU5HX1dJTlNPQ0syX0gKLS0jZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9VTklTVERfSAotKyNpZiAhZGVmaW5lZCBfR0xfVU5JU1REX0ggJiYgIWRlZmluZWQgX0dMX0lOQ0xVRElOR19XSU5TT0NLMl9ICi0rI2RlZmluZSBfR0xfVU5JU1REX0gKLSAKLSAvKiBOZXRCU0QgNS4wIG1pcy1kZWZpbmVzIE5VTEwuICBBbHNvIGdldCBzaXplX3QuICAqLwotICNpbmNsdWRlIDxzdGRkZWYuaD4KLUBAIC0xMTcsNzcgKzExNyw3OCBAQAotIC8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRSBpcyBjb3BpZWQgaGVyZS4gICovCi0gCi0gCi0tLyogSGlkZSBzb21lIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBmcm9tIDx3aW5zb2NrMi5oPi4gICovCi0tCi0tI2lmIEBHTlVMSUJfR0VUSE9TVE5BTUVAICYmIEBVTklTVERfSF9IQVZFX1dJTlNPQ0syX0hACi0tIyBpZiAhZGVmaW5lZCBfQEdVQVJEX1BSRUZJWEBfU1lTX1NPQ0tFVF9ICi0tIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKLS0jICAgdW5kZWYgc29ja2V0Ci0tIyAgIGRlZmluZSBzb2NrZXQgICAgICAgICAgICAgIHNvY2tldF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAotLSMgICB1bmRlZiBjb25uZWN0Ci0tIyAgIGRlZmluZSBjb25uZWN0ICAgICAgICAgICAgIGNvbm5lY3RfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKLS0jICAgdW5kZWYgYWNjZXB0Ci0tIyAgIGRlZmluZSBhY2NlcHQgICAgICAgICAgICAgIGFjY2VwdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAotLSMgICB1bmRlZiBiaW5kCi0tIyAgIGRlZmluZSBiaW5kICAgICAgICAgICAgICAgIGJpbmRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKLS0jICAgdW5kZWYgZ2V0cGVlcm5hbWUKLS0jICAgZGVmaW5lIGdldHBlZXJuYW1lICAgICAgICAgZ2V0cGVlcm5hbWVfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKLS0jICAgdW5kZWYgZ2V0c29ja25hbWUKLS0jICAgZGVmaW5lIGdldHNvY2tuYW1lICAgICAgICAgZ2V0c29ja25hbWVfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKLS0jICAgdW5kZWYgZ2V0c29ja29wdAotLSMgICBkZWZpbmUgZ2V0c29ja29wdCAgICAgICAgICBnZXRzb2Nrb3B0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCi0tIyAgIHVuZGVmIGxpc3RlbgotLSMgICBkZWZpbmUgbGlzdGVuICAgICAgICAgICAgICBsaXN0ZW5fdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKLS0jICAgdW5kZWYgcmVjdgotLSMgICBkZWZpbmUgcmVjdiAgICAgICAgICAgICAgICByZWN2X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCi0tIyAgIHVuZGVmIHNlbmQKLS0jICAgZGVmaW5lIHNlbmQgICAgICAgICAgICAgICAgc2VuZF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAotLSMgICB1bmRlZiByZWN2ZnJvbQotLSMgICBkZWZpbmUgcmVjdmZyb20gICAgICAgICAgICByZWN2ZnJvbV91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAotLSMgICB1bmRlZiBzZW5kdG8KLS0jICAgZGVmaW5lIHNlbmR0byAgICAgICAgICAgICAgc2VuZHRvX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCi0tIyAgIHVuZGVmIHNldHNvY2tvcHQKLS0jICAgZGVmaW5lIHNldHNvY2tvcHQgICAgICAgICAgc2V0c29ja29wdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAotLSMgICB1bmRlZiBzaHV0ZG93bgotLSMgICBkZWZpbmUgc2h1dGRvd24gICAgICAgICAgICBzaHV0ZG93bl91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAotLSMgIGVsc2UKLS0gICAgX0dMX1dBUk5fT05fVVNFIChzb2NrZXQsCi0tICAgICAgICAgICAgICAgICAgICAgInNvY2tldCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKLS0gICAgX0dMX1dBUk5fT05fVVNFIChjb25uZWN0LAotLSAgICAgICAgICAgICAgICAgICAgICJjb25uZWN0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOwotLSAgICBfR0xfV0FSTl9PTl9VU0UgKGFjY2VwdCwKLS0gICAgICAgICAgICAgICAgICAgICAiYWNjZXB0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOwotLSAgICBfR0xfV0FSTl9PTl9VU0UgKGJpbmQsCi0tICAgICAgICAgICAgICAgICAgICAgImJpbmQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7Ci0tICAgIF9HTF9XQVJOX09OX1VTRSAoZ2V0cGVlcm5hbWUsCi0tICAgICAgICAgICAgICAgICAgICAgImdldHBlZXJuYW1lKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOwotLSAgICBfR0xfV0FSTl9PTl9VU0UgKGdldHNvY2tuYW1lLAotLSAgICAgICAgICAgICAgICAgICAgICJnZXRzb2NrbmFtZSgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKLS0gICAgX0dMX1dBUk5fT05fVVNFIChnZXRzb2Nrb3B0LAotLSAgICAgICAgICAgICAgICAgICAgICJnZXRzb2Nrb3B0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOwotLSAgICBfR0xfV0FSTl9PTl9VU0UgKGxpc3RlbiwKLS0gICAgICAgICAgICAgICAgICAgICAibGlzdGVuKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOwotLSAgICBfR0xfV0FSTl9PTl9VU0UgKHJlY3YsCi0tICAgICAgICAgICAgICAgICAgICAgInJlY3YoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7Ci0tICAgIF9HTF9XQVJOX09OX1VTRSAoc2VuZCwKLS0gICAgICAgICAgICAgICAgICAgICAic2VuZCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKLS0gICAgX0dMX1dBUk5fT05fVVNFIChyZWN2ZnJvbSwKLS0gICAgICAgICAgICAgICAgICAgICAicmVjdmZyb20oKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7Ci0tICAgIF9HTF9XQVJOX09OX1VTRSAoc2VuZHRvLAotLSAgICAgICAgICAgICAgICAgICAgICJzZW5kdG8oKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7Ci0tICAgIF9HTF9XQVJOX09OX1VTRSAoc2V0c29ja29wdCwKLS0gICAgICAgICAgICAgICAgICAgICAic2V0c29ja29wdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKLS0gICAgX0dMX1dBUk5fT05fVVNFIChzaHV0ZG93biwKLS0gICAgICAgICAgICAgICAgICAgICAic2h1dGRvd24oKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7Ci0rI2lmIEBHTlVMSUJfR0VUSE9TVE5BTUVACi0rLyogR2V0IGFsbCBwb3NzaWJsZSBkZWNsYXJhdGlvbnMgb2YgZ2V0aG9zdG5hbWUoKS4gICovCi0rIyBpZiBAVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IQAotKyMgIGlmICFkZWZpbmVkIF9HTF9TWVNfU09DS0VUX0gKLSsjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKLSsjICAgIHVuZGVmIHNvY2tldAotKyMgICAgZGVmaW5lIHNvY2tldCAgICAgICAgICAgICAgc29ja2V0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCi0rIyAgICB1bmRlZiBjb25uZWN0Ci0rIyAgICBkZWZpbmUgY29ubmVjdCAgICAgICAgICAgICBjb25uZWN0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCi0rIyAgICB1bmRlZiBhY2NlcHQKLSsjICAgIGRlZmluZSBhY2NlcHQgICAgICAgICAgICAgIGFjY2VwdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAotKyMgICAgdW5kZWYgYmluZAotKyMgICAgZGVmaW5lIGJpbmQgICAgICAgICAgICAgICAgYmluZF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAotKyMgICAgdW5kZWYgZ2V0cGVlcm5hbWUKLSsjICAgIGRlZmluZSBnZXRwZWVybmFtZSAgICAgICAgIGdldHBlZXJuYW1lX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCi0rIyAgICB1bmRlZiBnZXRzb2NrbmFtZQotKyMgICAgZGVmaW5lIGdldHNvY2tuYW1lICAgICAgICAgZ2V0c29ja25hbWVfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKLSsjICAgIHVuZGVmIGdldHNvY2tvcHQKLSsjICAgIGRlZmluZSBnZXRzb2Nrb3B0ICAgICAgICAgIGdldHNvY2tvcHRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKLSsjICAgIHVuZGVmIGxpc3RlbgotKyMgICAgZGVmaW5lIGxpc3RlbiAgICAgICAgICAgICAgbGlzdGVuX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCi0rIyAgICB1bmRlZiByZWN2Ci0rIyAgICBkZWZpbmUgcmVjdiAgICAgICAgICAgICAgICByZWN2X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCi0rIyAgICB1bmRlZiBzZW5kCi0rIyAgICBkZWZpbmUgc2VuZCAgICAgICAgICAgICAgICBzZW5kX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCi0rIyAgICB1bmRlZiByZWN2ZnJvbQotKyMgICAgZGVmaW5lIHJlY3Zmcm9tICAgICAgICAgICAgcmVjdmZyb21fdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKLSsjICAgIHVuZGVmIHNlbmR0bwotKyMgICAgZGVmaW5lIHNlbmR0byAgICAgICAgICAgICAgc2VuZHRvX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCi0rIyAgICB1bmRlZiBzZXRzb2Nrb3B0Ci0rIyAgICBkZWZpbmUgc2V0c29ja29wdCAgICAgICAgICBzZXRzb2Nrb3B0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCi0rIyAgICB1bmRlZiBzaHV0ZG93bgotKyMgICAgZGVmaW5lIHNodXRkb3duICAgICAgICAgICAgc2h1dGRvd25fdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKLSsjICAgZWxzZQotKyAgICAgX0dMX1dBUk5fT05fVVNFIChzb2NrZXQsCi0rICAgICAgICAgICAgICAgICAgICAgICJzb2NrZXQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7Ci0rICAgICBfR0xfV0FSTl9PTl9VU0UgKGNvbm5lY3QsCi0rICAgICAgICAgICAgICAgICAgICAgICJjb25uZWN0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOwotKyAgICAgX0dMX1dBUk5fT05fVVNFIChhY2NlcHQsCi0rICAgICAgICAgICAgICAgICAgICAgICJhY2NlcHQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7Ci0rICAgICBfR0xfV0FSTl9PTl9VU0UgKGJpbmQsCi0rICAgICAgICAgICAgICAgICAgICAgICJiaW5kKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOwotKyAgICAgX0dMX1dBUk5fT05fVVNFIChnZXRwZWVybmFtZSwKLSsgICAgICAgICAgICAgICAgICAgICAgImdldHBlZXJuYW1lKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOwotKyAgICAgX0dMX1dBUk5fT05fVVNFIChnZXRzb2NrbmFtZSwKLSsgICAgICAgICAgICAgICAgICAgICAgImdldHNvY2tuYW1lKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOwotKyAgICAgX0dMX1dBUk5fT05fVVNFIChnZXRzb2Nrb3B0LAotKyAgICAgICAgICAgICAgICAgICAgICAiZ2V0c29ja29wdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKLSsgICAgIF9HTF9XQVJOX09OX1VTRSAobGlzdGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAibGlzdGVuKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOwotKyAgICAgX0dMX1dBUk5fT05fVVNFIChyZWN2LAotKyAgICAgICAgICAgICAgICAgICAgICAicmVjdigpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKLSsgICAgIF9HTF9XQVJOX09OX1VTRSAoc2VuZCwKLSsgICAgICAgICAgICAgICAgICAgICAgInNlbmQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7Ci0rICAgICBfR0xfV0FSTl9PTl9VU0UgKHJlY3Zmcm9tLAotKyAgICAgICAgICAgICAgICAgICAgICAicmVjdmZyb20oKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7Ci0rICAgICBfR0xfV0FSTl9PTl9VU0UgKHNlbmR0bywKLSsgICAgICAgICAgICAgICAgICAgICAgInNlbmR0bygpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKLSsgICAgIF9HTF9XQVJOX09OX1VTRSAoc2V0c29ja29wdCwKLSsgICAgICAgICAgICAgICAgICAgICAgInNldHNvY2tvcHQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7Ci0rICAgICBfR0xfV0FSTl9PTl9VU0UgKHNodXRkb3duLAotKyAgICAgICAgICAgICAgICAgICAgICAic2h1dGRvd24oKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7Ci0rIyAgIGVuZGlmCi0gIyAgZW5kaWYKLS0jIGVuZGlmCi0tIyBpZiAhZGVmaW5lZCBfQEdVQVJEX1BSRUZJWEBfU1lTX1NFTEVDVF9ICi0tIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKLS0jICAgdW5kZWYgc2VsZWN0Ci0tIyAgIGRlZmluZSBzZWxlY3QgICAgICAgICAgICAgIHNlbGVjdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zZWxlY3RfaAotLSMgIGVsc2UKLS0gICAgX0dMX1dBUk5fT05fVVNFIChzZWxlY3QsCi0tICAgICAgICAgICAgICAgICAgICAgInNlbGVjdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zZWxlY3QuaD4iKTsKLSsjICBpZiAhZGVmaW5lZCBfR0xfU1lTX1NFTEVDVF9ICi0rIyAgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCi0rIyAgICB1bmRlZiBzZWxlY3QKLSsjICAgIGRlZmluZSBzZWxlY3QgICAgICAgICAgICAgIHNlbGVjdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zZWxlY3RfaAotKyMgICBlbHNlCi0rICAgICBfR0xfV0FSTl9PTl9VU0UgKHNlbGVjdCwKLSsgICAgICAgICAgICAgICAgICAgICAgInNlbGVjdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zZWxlY3QuaD4iKTsKLSsjICAgZW5kaWYKLSAjICBlbmRpZgotICMgZW5kaWYKLSAjZW5kaWYKLUBAIC0xMDYxLDcgKzEwNjIsNiBAQCBfR0xfV0FSTl9PTl9VU0UgKHBpcGUyLCAicGlwZTIgaXMgdW5wb3J0Ci0gICAgc3BlY2lmaWNhdGlvbiA8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeHNoL3ByZWFkLmh0bWw+LiAgKi8KLSAjIGlmIEBSRVBMQUNFX1BSRUFEQAotICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCi0tIyAgIHVuZGVmIHByZWFkCi0gIyAgIGRlZmluZSBwcmVhZCBycGxfcHJlYWQKLSAjICBlbmRpZgotIF9HTF9GVU5DREVDTF9SUEwgKHByZWFkLCBzc2l6ZV90LAotQEAgLTEwOTYsNyArMTA5Niw2IEBAIF9HTF9XQVJOX09OX1VTRSAocHJlYWQsICJwcmVhZCBpcyB1bnBvcnQKLSAgICA8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeHNoL3B3cml0ZS5odG1sPi4gICovCi0gIyBpZiBAUkVQTEFDRV9QV1JJVEVACi0gIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKLS0jICAgdW5kZWYgcHdyaXRlCi0gIyAgIGRlZmluZSBwd3JpdGUgcnBsX3B3cml0ZQotICMgIGVuZGlmCi0gX0dMX0ZVTkNERUNMX1JQTCAocHdyaXRlLCBzc2l6ZV90LAotQEAgLTE0MTcsNSArMTQxNiw1IEBAIF9HTF9DWFhBTElBU1dBUk4gKHdyaXRlKTsKLSAjZW5kaWYKLSAKLSAKLS0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1VOSVNURF9IICovCi0tI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9VTklTVERfSCAqLwotKyNlbmRpZiAvKiBfR0xfVU5JU1REX0ggKi8KLSsjZW5kaWYgLyogX0dMX1VOSVNURF9IICovCi1kaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3ZlcmlmeS5oIGxpYmljb252LTEuMTQvc3JjbGliL3ZlcmlmeS5oCi0tLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi92ZXJpZnkuaAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAotKysrIGxpYmljb252LTEuMTQvc3JjbGliL3ZlcmlmeS5oCTIwMTItMDEtMDggMDI6MDc6NDAuNDk0NDg0NDY0IC0wODAwCi1AQCAtMTY0LDEzICsxNjQsMTAgQEAKLSAgICAgKCEhc2l6ZW9mIChfR0xfVkVSSUZZX1RZUEUgKFIsIERJQUdOT1NUSUMpKSkKLSAKLSAjIGlmZGVmIF9fY3BsdXNwbHVzCi0tIyAgaWYgIUdOVUxJQl9kZWZpbmVkX3N0cnVjdF9fZ2xfdmVyaWZ5X3R5cGUKLSB0ZW1wbGF0ZSA8aW50IHc+Ci0gICBzdHJ1Y3QgX2dsX3ZlcmlmeV90eXBlIHsKLSAgICAgdW5zaWduZWQgaW50IF9nbF92ZXJpZnlfZXJyb3JfaWZfbmVnYXRpdmU6IHc7Ci0gICB9OwotLSMgICBkZWZpbmUgR05VTElCX2RlZmluZWRfc3RydWN0X19nbF92ZXJpZnlfdHlwZSAxCi0tIyAgZW5kaWYKLSAjICBkZWZpbmUgX0dMX1ZFUklGWV9UWVBFKFIsIERJQUdOT1NUSUMpIFwKLSAgICAgX2dsX3ZlcmlmeV90eXBlPChSKSA/IDEgOiAtMT4KLSAjIGVsaWYgZGVmaW5lZCBfR0xfSEFWRV9fU1RBVElDX0FTU0VSVAotQEAgLTIwOSw3ICsyMDYsNyBAQCB0ZW1wbGF0ZSA8aW50IHc+Ci0gIyAgZW5kaWYKLSAjIGVuZGlmCi0gCi0tLyogQGFzc2VydC5oIG9taXQgc3RhcnRAICAqLwotKyMgaWZkZWYgX0dMX1ZFUklGWV9ICi0gCi0gLyogRWFjaCBvZiB0aGVzZSBtYWNyb3MgdmVyaWZpZXMgdGhhdCBpdHMgYXJndW1lbnQgUiBpcyBub256ZXJvLiAgVG8KLSAgICBiZSBwb3J0YWJsZSwgUiBzaG91bGQgYmUgYW4gaW50ZWdlciBjb25zdGFudCBleHByZXNzaW9uLiAgVW5saWtlCi1AQCAtMjIxLDIzICsyMTgsMTUgQEAgdGVtcGxhdGUgPGludCB3PgotICAgIGNvbnRleHRzLCBlLmcuLCB0aGUgdG9wIGxldmVsLiAgKi8KLSAKLSAvKiBWZXJpZnkgcmVxdWlyZW1lbnQgUiBhdCBjb21waWxlLXRpbWUsIGFzIGFuIGludGVnZXIgY29uc3RhbnQgZXhwcmVzc2lvbi4KLS0gICBSZXR1cm4gMS4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byB2ZXJpZnlfZXhwciAoUiwgMSkuCi0tCi0tICAgdmVyaWZ5X3RydWUgaXMgb2Jzb2xlc2NlbnQ7IHBsZWFzZSB1c2UgdmVyaWZ5X2V4cHIgaW5zdGVhZC4gICovCi0tCi0tIyBkZWZpbmUgdmVyaWZ5X3RydWUoUikgX0dMX1ZFUklGWV9UUlVFIChSLCAidmVyaWZ5X3RydWUgKCIgI1IgIikiKQotKyAgIFJldHVybiAxLiAgKi8KLSAKLS0vKiBWZXJpZnkgcmVxdWlyZW1lbnQgUiBhdCBjb21waWxlLXRpbWUuICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZQotLSAgIGV4cHJlc3Npb24gRS4gICovCi0tCi0tIyBkZWZpbmUgdmVyaWZ5X2V4cHIoUiwgRSkgXAotLSAgICAoX0dMX1ZFUklGWV9UUlVFIChSLCAidmVyaWZ5X2V4cHIgKCIgI1IgIiwgIiAjRSAiKSIpID8gKEUpIDogKEUpKQotKyMgIGRlZmluZSB2ZXJpZnlfdHJ1ZShSKSBfR0xfVkVSSUZZX1RSVUUgKFIsICJ2ZXJpZnlfdHJ1ZSAoIiAjUiAiKSIpCi0gCi0gLyogVmVyaWZ5IHJlcXVpcmVtZW50IFIgYXQgY29tcGlsZS10aW1lLCBhcyBhIGRlY2xhcmF0aW9uIHdpdGhvdXQgYQotICAgIHRyYWlsaW5nICc7Jy4gICovCi0gCi0tIyBkZWZpbmUgdmVyaWZ5KFIpIF9HTF9WRVJJRlkgKFIsICJ2ZXJpZnkgKCIgI1IgIikiKQotKyMgIGRlZmluZSB2ZXJpZnkoUikgX0dMX1ZFUklGWSAoUiwgInZlcmlmeSAoIiAjUiAiKSIpCi0gCi0tLyogQGFzc2VydC5oIG9taXQgZW5kQCAgKi8KLSsjIGVuZGlmCi0gCi0gI2VuZGlmCi1kaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvY2Fub25pY2FsaXplLm00IGxpYmljb252LTEuMTQvc3JjbTQvY2Fub25pY2FsaXplLm00Ci0tLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2Nhbm9uaWNhbGl6ZS5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAotKysrIGxpYmljb252LTEuMTQvc3JjbTQvY2Fub25pY2FsaXplLm00CTIwMTItMDEtMDggMDI6MDc6NDAuNTY2NDg0NDY5IC0wODAwCi1AQCAtMSw0ICsxLDQgQEAKLS0jIGNhbm9uaWNhbGl6ZS5tNCBzZXJpYWwgMjMKLSsjIGNhbm9uaWNhbGl6ZS5tNCBzZXJpYWwgMjEKLSAKLSBkbmwgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDcsIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSAKLUBAIC0xMCw2ICsxMCw4IEBAIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG8KLSAjIG5vdCBwcm92aWRlIG9yIGZpeCByZWFscGF0aC4KLSBBQ19ERUZVTihbZ2xfRlVOQ19DQU5PTklDQUxJWkVfRklMRU5BTUVfTU9ERV0sCi0gWwotKyAgQUNfTElCT0JKKFtjYW5vbmljYWxpemVdKQotKwotICAgQUNfUkVRVUlSRShbZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKLSAgIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW2Nhbm9uaWNhbGl6ZV9maWxlX25hbWVdKQotICAgQUNfUkVRVUlSRShbZ2xfRE9VQkxFX1NMQVNIX1JPT1RdKQotQEAgLTI4LDE0ICszMCwxNiBAQCBBQ19ERUZVTihbZ2xfQ0FOT05JQ0FMSVpFX0xHUExdLAotICAgQUNfUkVRVUlSRShbZ2xfQ0FOT05JQ0FMSVpFX0xHUExfU0VQQVJBVEVdKQotICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19jYW5vbmljYWxpemVfZmlsZV9uYW1lID0gbm87IHRoZW4KLSAgICAgSEFWRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FPTAKLSsgICAgQUNfTElCT0JKKFtjYW5vbmljYWxpemUtbGdwbF0pCi0gICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfcmVhbHBhdGggPSBubzsgdGhlbgotICAgICAgIEhBVkVfUkVBTFBBVEg9MAotICAgICBlbGlmIHRlc3QgIiRnbF9jdl9mdW5jX3JlYWxwYXRoX3dvcmtzIiAhPSB5ZXM7IHRoZW4KLSAgICAgICBSRVBMQUNFX1JFQUxQQVRIPTEKLSAgICAgZmkKLSAgIGVsaWYgdGVzdCAiJGdsX2N2X2Z1bmNfcmVhbHBhdGhfd29ya3MiICE9IHllczsgdGhlbgotLSAgICBSRVBMQUNFX0NBTk9OSUNBTElaRV9GSUxFX05BTUU9MQotKyAgICBBQ19MSUJPQkooW2Nhbm9uaWNhbGl6ZS1sZ3BsXSkKLSAgICAgUkVQTEFDRV9SRUFMUEFUSD0xCi0rICAgIFJFUExBQ0VfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRT0xCi0gICBmaQotIF0pCi0gCi1kaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZXJybm9faC5tNCBsaWJpY29udi0xLjE0L3NyY200L2Vycm5vX2gubTQKLS0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZXJybm9faC5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAotKysrIGxpYmljb252LTEuMTQvc3JjbTQvZXJybm9faC5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjU5MDQ4NDQ2OSAtMDgwMAotQEAgLTEsNCArMSw0IEBACi0tIyBlcnJub19oLm00IHNlcmlhbCAxMAotKyMgZXJybm9faC5tNCBzZXJpYWwgOQotIGRubCBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDgtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLUBAIC0zNCwxMiArMzQsNiBAQCBib29ib28KLSAjaWYgIWRlZmluZWQgRU5PVFNVUAotIGJvb2JvbwotICNlbmRpZgotLSNpZiAhZGVmaW5lZCBFTkVUUkVTRVQKLS1ib29ib28KLS0jZW5kaWYKLS0jaWYgIWRlZmluZWQgRUNPTk5BQk9SVEVECi0tYm9vYm9vCi0tI2VuZGlmCi0gI2lmICFkZWZpbmVkIEVTVEFMRQotIGJvb2JvbwotICNlbmRpZgotZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2Vycm9yLm00IGxpYmljb252LTEuMTQvc3JjbTQvZXJyb3IubTQKLS0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZXJyb3IubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKLSsrKyBsaWJpY29udi0xLjE0L3NyY200L2Vycm9yLm00CTIwMTItMDEtMDggMDI6MDc6NDAuNTk4NDg0NDcwIC0wODAwCi1AQCAtMSw0ICsxLDQgQEAKLS0jc2VyaWFsIDE0Ci0rI3NlcmlhbCAxMwotIAotICMgQ29weXJpZ2h0IChDKSAxOTk2LTE5OTgsIDIwMDEtMjAwNCwgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotICMKLUBAIC04LDggKzgsMTYgQEAKLSAKLSBBQ19ERUZVTihbZ2xfRVJST1JdLAotIFsKLS0gIGRubCBXZSBkb24ndCB1c2UgQUNfRlVOQ19FUlJPUl9BVF9MSU5FIGFueSBtb3JlLCBiZWNhdXNlIGl0IGlzIG5vIGxvbmdlcgotLSAgZG5sIG1haW50YWluZWQgaW4gQXV0b2NvbmYgYW5kIGJlY2F1c2UgaXQgaW52b2tlcyBBQ19MSUJPQkouCi0rICBBQ19GVU5DX0VSUk9SX0FUX0xJTkUKLSsgIGRubCBOb3RlOiBBQ19GVU5DX0VSUk9SX0FUX0xJTkUgZG9lcyBBQ19MSUJTT1VSQ0VTKFtlcnJvci5oLCBlcnJvci5jXSkuCi0rICBnbF9QUkVSRVFfRVJST1IKLStdKQotKwotKyMgUmVkZWZpbmUgQUNfRlVOQ19FUlJPUl9BVF9MSU5FLCBiZWNhdXNlIGl0IGlzIG5vIGxvbmdlciBtYWludGFpbmVkIGluCi0rIyBBdXRvY29uZi4KLStBQ19ERUZVTihbQUNfRlVOQ19FUlJPUl9BVF9MSU5FXSwKLStbCi0rICBBQ19MSUJTT1VSQ0VTKFtlcnJvci5oLCBlcnJvci5jXSlkbmwKLSAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgZXJyb3JfYXRfbGluZV0sIFthY19jdl9saWJfZXJyb3JfYXRfbGluZV0sCi0gICAgIFtBQ19MSU5LX0lGRUxTRSgKLSAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKLUBAIC0xNyw2ICsyNSw5IEBAIEFDX0RFRlVOKFtnbF9FUlJPUl0sCi0gICAgICAgICAgIFtbZXJyb3JfYXRfbGluZSAoMCwgMCwgIiIsIDAsICJhbiBlcnJvciBvY2N1cnJlZCIpO11dKV0sCi0gICAgICAgIFthY19jdl9saWJfZXJyb3JfYXRfbGluZT15ZXNdLAotICAgICAgICBbYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmU9bm9dKV0pCi0rICBpZiB0ZXN0ICRhY19jdl9saWJfZXJyb3JfYXRfbGluZSA9IG5vOyB0aGVuCi0rICAgIEFDX0xJQk9CSihbZXJyb3JdKQotKyAgZmkKLSBdKQotIAotICMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvZXJyb3IuYy4KLWRpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9leHRlbnNpb25zLm00IGxpYmljb252LTEuMTQvc3JjbTQvZXh0ZW5zaW9ucy5tNAotLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9leHRlbnNpb25zLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCi0rKysgbGliaWNvbnYtMS4xNC9zcmNtNC9leHRlbnNpb25zLm00CTIwMTItMDEtMDggMDI6MDc6NDAuNjA2NDg0NDcxIC0wODAwCi1AQCAtMSw0ICsxLDQgQEAKLS0jIHNlcmlhbCAxMCAgLSotIEF1dG9jb25mIC0qLQotKyMgc2VyaWFsIDkgIC0qLSBBdXRvY29uZiAtKi0KLSAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0uCi0gCi0gIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLUBAIC02NywxMCArNjcsNiBAQCBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKWRubAotICNpZm5kZWYgX0FMTF9TT1VSQ0UKLSAjIHVuZGVmIF9BTExfU09VUkNFCi0gI2VuZGlmCi0tLyogRW5hYmxlIGdlbmVyYWwgZXh0ZW5zaW9ucyBvbiBNYWNPUyBYLiAgKi8KLS0jaWZuZGVmIF9EQVJXSU5fQ19TT1VSQ0UKLS0jIHVuZGVmIF9EQVJXSU5fQ19TT1VSQ0UKLS0jZW5kaWYKLSAvKiBFbmFibGUgR05VIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IGhhdmUgdGhlbS4gICovCi0gI2lmbmRlZiBfR05VX1NPVVJDRQotICMgdW5kZWYgX0dOVV9TT1VSQ0UKLUBAIC05OSw3ICs5NSw2IEBAIEFDX0JFRk9SRShbJDBdLCBbQUNfUlVOX0lGRUxTRV0pZG5sCi0gICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgotICAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKLSAgIEFDX0RFRklORShbX0FMTF9TT1VSQ0VdKQotLSAgQUNfREVGSU5FKFtfREFSV0lOX0NfU09VUkNFXSkKLSAgIEFDX0RFRklORShbX0dOVV9TT1VSQ0VdKQotICAgQUNfREVGSU5FKFtfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1NdKQotICAgQUNfREVGSU5FKFtfVEFOREVNX1NPVVJDRV0pCi1kaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZ251bGliLWNhY2hlLm00IGxpYmljb252LTEuMTQvc3JjbTQvZ251bGliLWNhY2hlLm00Ci0tLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2dudWxpYi1jYWNoZS5tNAkyMDExLTA4LTA3IDA2OjQyOjExLjAwMDAwMDAwMCAtMDcwMAotKysrIGxpYmljb252LTEuMTQvc3JjbTQvZ251bGliLWNhY2hlLm00CTIwMTItMDEtMDggMDI6MDc6NDMuMTU0NDg0NTkzIC0wODAwCi1AQCAtMTUsNyArMTUsNyBAQAotIAotIAotICMgU3BlY2lmaWNhdGlvbiBpbiB0aGUgZm9ybSBvZiBhIGNvbW1hbmQtbGluZSBpbnZvY2F0aW9uOgotLSMgICBnbnVsaWItdG9vbCAtLWltcG9ydCAtLWRpcj0uIC0tbG9jYWwtZGlyPWdudWxpYi1sb2NhbCAtLWxpYj1saWJpY3J0IC0tc291cmNlLWJhc2U9c3JjbGliIC0tbTQtYmFzZT1zcmNtNCAtLWRvYy1iYXNlPWRvYyAtLXRlc3RzLWJhc2U9dGVzdHMgLS1hdXgtZGlyPWJ1aWxkLWF1eCAtLW1ha2VmaWxlLW5hbWU9TWFrZWZpbGUuZ251bGliIC0tbm8tY29uZGl0aW9uYWwtZGVwZW5kZW5jaWVzIC0tbm8tbGlidG9vbCAtLW1hY3JvLXByZWZpeD1nbCAtLW5vLXZjLWZpbGVzIGJpbmFyeS1pbyBlcnJvciBnZXR0ZXh0IGdldHRleHQtaCBsaWJpY29udi1taXNjIG1ic3RhdGUgbWVtbW92ZSBwcm9nbmFtZSByZWxvY2F0YWJsZS1wcm9nIHNhZmUtcmVhZCBzaWdwaXBlIHN0ZGlvIHN0ZGxpYiBzdHJlcnJvciB1bmlzdGQgdW5pd2lkdGgvd2lkdGggdW5sb2NrZWQtaW8geGFsbG9jCi0rIyAgIGdudWxpYi10b29sIC0taW1wb3J0IC0tZGlyPS4gLS1sb2NhbC1kaXI9Z251bGliLWxvY2FsIC0tbGliPWxpYmljcnQgLS1zb3VyY2UtYmFzZT1zcmNsaWIgLS1tNC1iYXNlPXNyY200IC0tZG9jLWJhc2U9ZG9jIC0tdGVzdHMtYmFzZT10ZXN0cyAtLWF1eC1kaXI9YnVpbGQtYXV4IC0tbWFrZWZpbGUtbmFtZT1NYWtlZmlsZS5nbnVsaWIgLS1uby1saWJ0b29sIC0tbWFjcm8tcHJlZml4PWdsIC0tbm8tdmMtZmlsZXMgYmluYXJ5LWlvIGVycm9yIGdldHRleHQgZ2V0dGV4dC1oIGxpYmljb252LW1pc2MgbWJzdGF0ZSBtZW1tb3ZlIHByb2duYW1lIHJlbG9jYXRhYmxlIHJlbG9jYXRhYmxlLXByb2cgc2FmZS1yZWFkIHNpZ3BpcGUgc3RkaW8gc3RkbGliIHN0cmVycm9yIHVuaXN0ZCB1bml3aWR0aC93aWR0aCB1bmxvY2tlZC1pbyB4YWxsb2MKLSAKLSAjIFNwZWNpZmljYXRpb24gaW4gdGhlIGZvcm0gb2YgYSBmZXcgZ251bGliLXRvb2wubTQgbWFjcm8gaW52b2NhdGlvbnM6Ci0gZ2xfTE9DQUxfRElSKFtnbnVsaWItbG9jYWxdKQotQEAgLTI4LDYgKzI4LDcgQEAgZ2xfTU9EVUxFUyhbCi0gICBtYnN0YXRlCi0gICBtZW1tb3ZlCi0gICBwcm9nbmFtZQotKyAgcmVsb2NhdGFibGUKLSAgIHJlbG9jYXRhYmxlLXByb2cKLSAgIHNhZmUtcmVhZAotICAgc2lncGlwZQotQEAgLTQ5LDUgKzUwLDQgQEAgZ2xfTElCKFtsaWJpY3J0XSkKLSBnbF9NQUtFRklMRV9OQU1FKFtNYWtlZmlsZS5nbnVsaWJdKQotIGdsX01BQ1JPX1BSRUZJWChbZ2xdKQotIGdsX1BPX0RPTUFJTihbXSkKLS1nbF9XSVRORVNTX0NfRE9NQUlOKFtdKQotIGdsX1ZDX0ZJTEVTKFtmYWxzZV0pCi1kaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZ251bGliLWNvbW1vbi5tNCBsaWJpY29udi0xLjE0L3NyY200L2dudWxpYi1jb21tb24ubTQKLS0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZ251bGliLWNvbW1vbi5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAotKysrIGxpYmljb252LTEuMTQvc3JjbTQvZ251bGliLWNvbW1vbi5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjYzNDQ4NDQ3MSAtMDgwMAotQEAgLTEsNCArMSw0IEBACi0tIyBnbnVsaWItY29tbW9uLm00IHNlcmlhbCAyOQotKyMgZ251bGliLWNvbW1vbi5tNCBzZXJpYWwgMjQKLSBkbmwgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0gZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0gZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1AQCAtMTIsMTkgKzEyLDYgQEAgQUNfREVGVU4oW2dsX0NPTU1PTl0sIFsKLSAgIEFDX1JFUVVJUkUoW2dsX0NPTU1PTl9CT0RZXSkKLSBdKQotIEFDX0RFRlVOKFtnbF9DT01NT05fQk9EWV0sIFsKLS0gIEFIX1ZFUkJBVElNKFtfTm9yZXR1cm5dLAotLVsvKiBUaGUgX05vcmV0dXJuIGtleXdvcmQgb2YgZHJhZnQgQzFYLiAgKi8KLS0jaWZuZGVmIF9Ob3JldHVybgotLSMgaWYgKDMgPD0gX19HTlVDX18gfHwgKF9fR05VQ19fID09IDIgJiYgOCA8PSBfX0dOVUNfTUlOT1JfXykgXAotLSAgICAgIHx8IDB4NTExMCA8PSBfX1NVTlBST19DKQotLSMgIGRlZmluZSBfTm9yZXR1cm4gX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpCi0tIyBlbGlmIDEyMDAgPD0gX01TQ19WRVIKLS0jICBkZWZpbmUgX05vcmV0dXJuIF9fZGVjbHNwZWMgKG5vcmV0dXJuKQotLSMgZWxzZQotLSMgIGRlZmluZSBfTm9yZXR1cm4KLS0jIGVuZGlmCi0tI2VuZGlmCi0tXSkKLSAgIEFIX1ZFUkJBVElNKFtpc29jOTlfaW5saW5lXSwKLSBbLyogV29yayBhcm91bmQgYSBidWcgaW4gQXBwbGUgR0NDIDQuMC4xIGJ1aWxkIDU0NjU6IEluIEM5OSBtb2RlLCBpdCBzdXBwb3J0cwotICAgIHRoZSBJU08gQyA5OSBzZW1hbnRpY3Mgb2YgJ2V4dGVybiBpbmxpbmUnICh1bmxpa2UgdGhlIEdOVSBDIHNlbWFudGljcyBvZgotQEAgLTQ3LDIwICszNCw2IEBAIEFDX0RFRlVOKFtnbF9DT01NT05fQk9EWV0sIFsKLSAvKiBUaGUgbmFtZSBfVU5VU0VEX1BBUkFNRVRFUl8gaXMgYW4gZWFybGllciBzcGVsbGluZywgYWx0aG91Z2ggdGhlIG5hbWUKLSAgICBpcyBhIG1pc25vbWVyIG91dHNpZGUgb2YgcGFyYW1ldGVyIGxpc3RzLiAgKi8KLSAjZGVmaW5lIF9VTlVTRURfUEFSQU1FVEVSXyBfR0xfVU5VU0VECi0tCi0tLyogVGhlIF9fcHVyZV9fIGF0dHJpYnV0ZSB3YXMgYWRkZWQgaW4gZ2NjIDIuOTYuICAqLwotLSNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTYpCi0tIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9QVVJFIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpCi0tI2Vsc2UKLS0jIGRlZmluZSBfR0xfQVRUUklCVVRFX1BVUkUgLyogZW1wdHkgKi8KLS0jZW5kaWYKLS0KLS0vKiBUaGUgX19jb25zdF9fIGF0dHJpYnV0ZSB3YXMgYWRkZWQgaW4gZ2NjIDIuOTUuICAqLwotLSNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTUpCi0tIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9DT05TVCBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSkKLS0jZWxzZQotLSMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfQ09OU1QgLyogZW1wdHkgKi8KLS0jZW5kaWYKLSBdKQotICAgZG5sIFByZXBhcmF0aW9uIGZvciBydW5uaW5nIHRlc3QgcHJvZ3JhbXM6Ci0gICBkbmwgVGVsbCBnbGliYyB0byB3cml0ZSBkaWFnbm9zdGljcyBmcm9tIC1EX0ZPUlRJRllfU09VUkNFPTIgdG8gc3RkZXJyLCBub3QKLUBAIC03NCw0OSArNDcsMTYgQEAgQUNfREVGVU4oW2dsX0NPTU1PTl9CT0RZXSwgWwotICMgZXhwYW5kcyB0byBhIEMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gMSBvciAwLCBkZXBlbmRpbmcKLSAjIHdoZXRoZXIgYSBnbnVsaWIgbW9kdWxlIHRoYXQgaGFzIGJlZW4gcmVxdWVzdGVkIHNoYWxsIGJlIGNvbnNpZGVyZWQgcHJlc2VudAotICMgb3Igbm90LgotLW00X2RlZmluZShbZ2xfTU9EVUxFX0lORElDQVRPUl9DT05ESVRJT05dLCBbMV0pCi0rQUNfREVGVU4oW2dsX01PRFVMRV9JTkRJQ0FUT1JfQ09ORElUSU9OXSwgWzFdKQotIAotICMgZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEUoW21vZHVsZW5hbWVdKQotICMgc2V0cyB0aGUgc2hlbGwgdmFyaWFibGUgdGhhdCBpbmRpY2F0ZXMgdGhlIHByZXNlbmNlIG9mIHRoZSBnaXZlbiBtb2R1bGUgdG8KLSAjIGEgQyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbiB0aGF0IHdpbGwgZXZhbHVhdGUgdG8gMS4KLSBBQ19ERUZVTihbZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEVdLAotIFsKLS0gIGdsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFX0FVWCgKLS0gICAgW0dOVUxJQl9bXW00X3RyYW5zbGl0KFtbJDFdXSwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgIFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCi0tICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0sCi0tICAgIFtnbF9NT0RVTEVfSU5ESUNBVE9SX0NPTkRJVElPTl0pCi0tXSkKLS0KLS0jIGdsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFX0FVWChbdmFyaWFibGVdKQotLSMgbW9kaWZpZXMgdGhlIHNoZWxsIHZhcmlhYmxlIHRvIGluY2x1ZGUgdGhlIGdsX01PRFVMRV9JTkRJQ0FUT1JfQ09ORElUSU9OLgotLSMgVGhlIHNoZWxsIHZhcmlhYmxlJ3MgdmFsdWUgaXMgYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzCi0tIyB0byAwIG9yIDEuCi0tQUNfREVGVU4oW2dsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFX0FVWF0sCi0tWwotLSAgbTRfaWYobTRfZGVmbihbZ2xfTU9EVUxFX0lORElDQVRPUl9DT05ESVRJT05dKSwgWzFdLAotLSAgICBbCi0tICAgICBkbmwgU2ltcGxpZnkgdGhlIGV4cHJlc3Npb24gVkFMVUUgfHwgMSB0byAxLgotLSAgICAgJDE9MQotLSAgICBdLAotLSAgICBbZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEVfQVVYX09SKFskMV0sCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dsX01PRFVMRV9JTkRJQ0FUT1JfQ09ORElUSU9OXSldKQotLV0pCi0tCi0tIyBnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRV9BVVhfT1IoW3ZhcmlhYmxlXSwgW2NvbmRpdGlvbl0pCi0tIyBtb2RpZmllcyB0aGUgc2hlbGwgdmFyaWFibGUgdG8gaW5jbHVkZSB0aGUgZ2l2ZW4gY29uZGl0aW9uLiAgVGhlIHNoZWxsCi0tIyB2YXJpYWJsZSdzIHZhbHVlIGlzIGEgQyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byAwIG9yIDEuCi0tQUNfREVGVU4oW2dsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFX0FVWF9PUl0sCi0tWwotLSAgZG5sIFNpbXBsaWZ5IHRoZSBleHByZXNzaW9uIDEgfHwgQ09ORElUSU9OIHRvIDEuCi0tICBpZiB0ZXN0ICIkW10kMSIgIT0gMTsgdGhlbgotLSAgICBkbmwgU2ltcGxpZnkgdGhlIGV4cHJlc3Npb24gMCB8fCBDT05ESVRJT04gdG8gQ09ORElUSU9OLgotLSAgICBpZiB0ZXN0ICIkW10kMSIgPSAwOyB0aGVuCi0tICAgICAgJDE9JDIKLS0gICAgZWxzZQotLSAgICAgICQxPSIoJFtdJDEgfHwgJDIpIgotLSAgICBmaQotLSAgZmkKLSsgIEdOVUxJQl9bXW00X3RyYW5zbGl0KFtbJDFdXSwKLSsgICAgW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKLSsgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSk9Z2xfTU9EVUxFX0lORElDQVRPUl9DT05ESVRJT04KLSBdKQotIAotICMgZ2xfTU9EVUxFX0lORElDQVRPUihbbW9kdWxlbmFtZV0pCi1AQCAtMjExLDM1ICsxNTEsNiBAQCBtNF9pZm5kZWYoW0FTX1ZBUl9JRl0sCi0gW200X2RlZmluZShbQVNfVkFSX0lGXSwKLSBbQVNfSUYoW3Rlc3QgeCJBU19WQVJfR0VUKFskMV0pIiA9IHgiIiQyXSwgWyQzXSwgWyQ0XSldKV0pCi0gCi0tIyBnbF9QUk9HX0FSX1JBTkxJQgotLSMgRGV0ZXJtaW5lcyB0aGUgdmFsdWVzIGZvciBBUiwgQVJGTEFHUywgUkFOTElCIHRoYXQgZml0IHdpdGggdGhlIGNvbXBpbGVyLgotLUFDX0RFRlVOKFtnbF9QUk9HX0FSX1JBTkxJQl0sCi0tWwotLSAgZG5sIE1pbml4IDMgY29tZXMgd2l0aCB0d28gdG9vbGNoYWluczogVGhlIEFtc3RlcmRhbSBDb21waWxlciBLaXQgY29tcGlsZXIKLS0gIGRubCBhcyAiY2MiLCBhbmQgR0NDIGFzICJnY2MiLiBUaGV5IGhhdmUgZGlmZmVyZW50IG9iamVjdCBmaWxlIGZvcm1hdHMgYW5kCi0tICBkbmwgbGlicmFyeSBmb3JtYXRzLiBJbiBwYXJ0aWN1bGFyLCB0aGUgR05VIGJpbnV0aWxzIHByb2dyYW1zIGFyLCByYW5saWIKLS0gIGRubCBwcm9kdWNlIGxpYnJhcmllcyB0aGF0IHdvcmsgb25seSB3aXRoIGdjYywgbm90IHdpdGggY2MuCi0tICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKLS0gIEFDX0VHUkVQX0NQUChbQW1zdGVyZGFtXSwKLS0gICAgWwotLSNpZmRlZiBfX0FDS19fCi0tQW1zdGVyZGFtCi0tI2VuZGlmCi0tICAgIF0sCi0tICAgIFtBUj0nY2MgLWMuYScKLS0gICAgIEFSRkxBR1M9Jy1vJwotLSAgICAgUkFOTElCPSc6JwotLSAgICBdLAotLSAgICBbZG5sIFVzZSB0aGUgQXV0b21ha2UtZG9jdW1lbnRlZCBkZWZhdWx0IHZhbHVlcyBmb3IgQVIgYW5kIEFSRkxBR1MuCi0tICAgICBBUj0nYXInCi0tICAgICBBUkZMQUdTPSdjcnUnCi0tICAgICBkbmwgVXNlIHRoZSByYW5saWIgcHJvZ3JhbSBpZiBpdCBpcyBhdmFpbGFibGUuCi0tICAgICBBQ19QUk9HX1JBTkxJQgotLSAgICBdKQotLSAgQUNfU1VCU1QoW0FSXSkKLS0gIEFDX1NVQlNUKFtBUkZMQUdTXSkKLS1dKQotLQotICMgQUNfUFJPR19NS0RJUl9QCi0gIyBpcyBhIGJhY2twb3J0IG9mIGF1dG9jb25mLTIuNjAncyBBQ19QUk9HX01LRElSX1AsIHdpdGggYSBmaXgKLSAjIGZvciBpbnRlcm9wZXJhYmlsaXR5IHdpdGggYXV0b21ha2UtMS45LjYgZnJvbSBhdXRvY29uZi0yLjYyLgotZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2dudWxpYi1jb21wLm00IGxpYmljb252LTEuMTQvc3JjbTQvZ251bGliLWNvbXAubTQKLS0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZ251bGliLWNvbXAubTQJMjAxMS0wOC0wNyAwNjo0MjoxMi4wMDAwMDAwMDAgLTA3MDAKLSsrKyBsaWJpY29udi0xLjE0L3NyY200L2dudWxpYi1jb21wLm00CTIwMTItMDEtMDggMDI6MDc6NDMuOTIyNDg0NjMwIC0wODAwCi1AQCAtMjUsMTIgKzI1LDE0IEBAIEFDX0RFRlVOKFtnbF9FQVJMWV0sCi0gICBtNF9wYXR0ZXJuX2FsbG93KFteZ2xfRVMkXSlkbmwgYSB2YWxpZCBsb2NhbGUgbmFtZQotICAgbTRfcGF0dGVybl9hbGxvdyhbXmdsX0xJQk9CSlMkXSlkbmwgYSB2YXJpYWJsZQotICAgbTRfcGF0dGVybl9hbGxvdyhbXmdsX0xUTElCT0JKUyRdKWRubCBhIHZhcmlhYmxlCi0tICBBQ19SRVFVSVJFKFtnbF9QUk9HX0FSX1JBTkxJQl0pCi0rICBBQ19SRVFVSVJFKFtBQ19QUk9HX1JBTkxJQl0pCi0gICBBQ19SRVFVSVJFKFtBTV9QUk9HX0NDX0NfT10pCi0gICAjIENvZGUgZnJvbSBtb2R1bGUgYWxsb2NhLW9wdDoKLSAgICMgQ29kZSBmcm9tIG1vZHVsZSBhbGxvY2F0b3I6Ci0gICAjIENvZGUgZnJvbSBtb2R1bGUgYXJlYWRsaW5rOgotKyAgIyBDb2RlIGZyb20gbW9kdWxlIGFyZy1ub25udWxsOgotICAgIyBDb2RlIGZyb20gbW9kdWxlIGJpbmFyeS1pbzoKLSsgICMgQ29kZSBmcm9tIG1vZHVsZSBjKytkZWZzOgotICAgIyBDb2RlIGZyb20gbW9kdWxlIGNhbm9uaWNhbGl6ZS1sZ3BsOgotICAgIyBDb2RlIGZyb20gbW9kdWxlIGNhcmVhZGxpbmthdDoKLSAgICMgQ29kZSBmcm9tIG1vZHVsZSBkb3NuYW1lOgotQEAgLTQ2LDcgKzQ4LDYgQEAgQUNfREVGVU4oW2dsX0VBUkxZXSwKLSAgICMgQ29kZSBmcm9tIG1vZHVsZSBoYXZlbGliOgotICAgIyBDb2RlIGZyb20gbW9kdWxlIGluY2x1ZGVfbmV4dDoKLSAgICMgQ29kZSBmcm9tIG1vZHVsZSBpbnRwcm9wczoKLS0gICMgQ29kZSBmcm9tIG1vZHVsZSBsYXJnZWZpbGU6Ci0gICAjIENvZGUgZnJvbSBtb2R1bGUgbGliaWNvbnYtbWlzYzoKLSAgICMgQ29kZSBmcm9tIG1vZHVsZSBsc3RhdDoKLSAgICMgQ29kZSBmcm9tIG1vZHVsZSBtYWxsb2NhOgotQEAgLTY0LDEwICs2NSw2IEBAIEFDX0RFRlVOKFtnbF9FQVJMWV0sCi0gICAjIENvZGUgZnJvbSBtb2R1bGUgc2lnbmFsOgotICAgIyBDb2RlIGZyb20gbW9kdWxlIHNpZ3BpcGU6Ci0gICAjIENvZGUgZnJvbSBtb2R1bGUgc2lncHJvY21hc2s6Ci0tICAjIENvZGUgZnJvbSBtb2R1bGUgc25pcHBldC9fTm9yZXR1cm46Ci0tICAjIENvZGUgZnJvbSBtb2R1bGUgc25pcHBldC9hcmctbm9ubnVsbDoKLS0gICMgQ29kZSBmcm9tIG1vZHVsZSBzbmlwcGV0L2MrK2RlZnM6Ci0tICAjIENvZGUgZnJvbSBtb2R1bGUgc25pcHBldC93YXJuLW9uLXVzZToKLSAgICMgQ29kZSBmcm9tIG1vZHVsZSBzc2l6ZV90OgotICAgIyBDb2RlIGZyb20gbW9kdWxlIHN0YXQ6Ci0gICAjIENvZGUgZnJvbSBtb2R1bGUgc3RkYm9vbDoKLUBAIC03Nyw3ICs3NCw2IEBAIEFDX0RFRlVOKFtnbF9FQVJMWV0sCi0gICAjIENvZGUgZnJvbSBtb2R1bGUgc3RkbGliOgotICAgIyBDb2RlIGZyb20gbW9kdWxlIHN0cmVxOgotICAgIyBDb2RlIGZyb20gbW9kdWxlIHN0cmVycm9yOgotLSAgIyBDb2RlIGZyb20gbW9kdWxlIHN0cmVycm9yLW92ZXJyaWRlOgotICAgIyBDb2RlIGZyb20gbW9kdWxlIHN0cmluZzoKLSAgICMgQ29kZSBmcm9tIG1vZHVsZSBzeXNfc3RhdDoKLSAgICMgQ29kZSBmcm9tIG1vZHVsZSB0aW1lOgotQEAgLTg3LDYgKzgzLDcgQEAgQUNfREVGVU4oW2dsX0VBUkxZXSwKLSAgICMgQ29kZSBmcm9tIG1vZHVsZSB1bml3aWR0aC93aWR0aDoKLSAgICMgQ29kZSBmcm9tIG1vZHVsZSB1bmxvY2tlZC1pbzoKLSAgICMgQ29kZSBmcm9tIG1vZHVsZSB2ZXJpZnk6Ci0rICAjIENvZGUgZnJvbSBtb2R1bGUgd2Fybi1vbi11c2U6Ci0gICAjIENvZGUgZnJvbSBtb2R1bGUgeGFsbG9jOgotICAgIyBDb2RlIGZyb20gbW9kdWxlIHhyZWFkbGluazoKLSBdKQotQEAgLTEwOSw5ICsxMDYsNiBAQCBBQ19ERUZVTihbZ2xfSU5JVF0sCi0gICBnbF9zb3VyY2VfYmFzZT0nc3JjbGliJwotIGdsX0ZVTkNfQUxMT0NBCi0gZ2xfQ0FOT05JQ0FMSVpFX0xHUEwKLS1pZiB0ZXN0ICRIQVZFX0NBTk9OSUNBTElaRV9GSUxFX05BTUUgPSAwIHx8IHRlc3QgJFJFUExBQ0VfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRSA9IDE7IHRoZW4KLS0gIEFDX0xJQk9CSihbY2Fub25pY2FsaXplLWxncGxdKQotLWZpCi0gZ2xfTU9EVUxFX0lORElDQVRPUihbY2Fub25pY2FsaXplLWxncGxdKQotIGdsX1NURExJQl9NT0RVTEVfSU5ESUNBVE9SKFtjYW5vbmljYWxpemVfZmlsZV9uYW1lXSkKLSBnbF9TVERMSUJfTU9EVUxFX0lORElDQVRPUihbcmVhbHBhdGhdKQotQEAgLTEyMSwxMCArMTE1LDYgQEAgZ2xfRU5WSVJPTgotIGdsX1VOSVNURF9NT0RVTEVfSU5ESUNBVE9SKFtlbnZpcm9uXSkKLSBnbF9IRUFERVJfRVJSTk9fSAotIGdsX0VSUk9SCi0taWYgdGVzdCAkYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmUgPSBubzsgdGhlbgotLSAgQUNfTElCT0JKKFtlcnJvcl0pCi0tICBnbF9QUkVSRVFfRVJST1IKLS1maQotIG00X2lmZGVmKFtBTV9YR0VUVEVYVF9PUFRJT05dLAotICAgW0FNX11bWEdFVFRFWFRfT1BUSU9OKFstLWZsYWc9ZXJyb3I6MzpjLWZvcm1hdF0pCi0gICAgQU1fXVtYR0VUVEVYVF9PUFRJT04oWy0tZmxhZz1lcnJvcl9hdF9saW5lOjU6Yy1mb3JtYXRdKV0pCi1AQCAtMTM0LDQzICsxMjQsMjYgQEAgQU1fR05VX0dFVFRFWFRfVkVSU0lPTihbMC4xOC4xXSkKLSBBQ19TVUJTVChbTElCSU5UTF0pCi0gQUNfU1VCU1QoW0xUTElCSU5UTF0pCi0gZ2xfRlVOQ19MU1RBVAotLWlmIHRlc3QgJFJFUExBQ0VfTFNUQVQgPSAxOyB0aGVuCi0tICBBQ19MSUJPQkooW2xzdGF0XSkKLS0gIGdsX1BSRVJFUV9MU1RBVAotLWZpCi0gZ2xfU1lTX1NUQVRfTU9EVUxFX0lORElDQVRPUihbbHN0YXRdKQotIGdsX01BTExPQ0EKLSBBQ19UWVBFX01CU1RBVEVfVAotIGdsX0ZVTkNfTUVNTU9WRQotLWlmIHRlc3QgJGFjX2N2X2Z1bmNfbWVtbW92ZSA9IG5vOyB0aGVuCi0tICBBQ19MSUJPQkooW21lbW1vdmVdKQotLSAgZ2xfUFJFUkVRX01FTU1PVkUKLS1maQotIGdsX01VTFRJQVJDSAotIGdsX1BBVEhNQVgKLSBBQ19DSEVDS19ERUNMUyhbcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWVdLCBbXSwgW10sIFsjaW5jbHVkZSA8ZXJybm8uaD5dKQotIEFDX0NIRUNLX0RFQ0xTKFtwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZV0sIFtdLCBbXSwgWyNpbmNsdWRlIDxlcnJuby5oPl0pCi0gZ2xfRlVOQ19SRUFECi0taWYgdGVzdCAkUkVQTEFDRV9SRUFEID0gMTsgdGhlbgotLSAgQUNfTElCT0JKKFtyZWFkXSkKLS1maQotIGdsX1VOSVNURF9NT0RVTEVfSU5ESUNBVE9SKFtyZWFkXSkKLSBnbF9GVU5DX1JFQURMSU5LCi0taWYgdGVzdCAkSEFWRV9SRUFETElOSyA9IDAgfHwgdGVzdCAkUkVQTEFDRV9SRUFETElOSyA9IDE7IHRoZW4KLS0gIEFDX0xJQk9CSihbcmVhZGxpbmtdKQotLSAgZ2xfUFJFUkVRX1JFQURMSU5LCi0tZmkKLSBnbF9VTklTVERfTU9EVUxFX0lORElDQVRPUihbcmVhZGxpbmtdKQotIGdsX1JFTE9DQVRBQkxFKFskZ2xfc291cmNlX2Jhc2VdKQotLWlmIHRlc3QgJFJFTE9DQVRBQkxFID0geWVzOyB0aGVuCi0tICBBQ19MSUJPQkooW3Byb2dyZWxvY10pCi0tZmkKLSBnbF9GVU5DX1JFQURMSU5LX1NFUEFSQVRFCi0gZ2xfQ0FOT05JQ0FMSVpFX0xHUExfU0VQQVJBVEUKLSBnbF9NQUxMT0NBCi0tZ2xfUkVMT0NBVEFCTEVfTElCUkFSWQotK2dsX1JFTE9DQVRBQkxFX0xJQlJBUllfU0VQQVJBVEUKLSBnbF9GVU5DX1NFVEVOVl9TRVBBUkFURQotLWdsX1BSRVJFUV9TQUZFX1JFQUQKLStnbF9GVU5DX1NUUkVSUk9SX1NFUEFSQVRFCi0rZ2xfU0FGRV9SRUFECi0gZ2xfU0lHTkFMX0gKLSBnbF9TSUdOQUxfU0lHUElQRQotIGRubCBEZWZpbmUgdGhlIEMgbWFjcm8gR05VTElCX1NJR1BJUEUgdG8gMS4KLUBAIC0xODYsMTcgKzE1OSw5IEBAIGRubCBEZWZpbmUgdGhlIHN1YnN0aXR1dGVkIHZhcmlhYmxlIEdOVUwKLSBBQ19SRVFVSVJFKFtnbF9VTklTVERfSF9ERUZBVUxUU10pCi0gR05VTElCX1VOSVNURF9IX1NJR1BJUEU9MQotIGdsX1NJR05BTEJMT0NLSU5HCi0taWYgdGVzdCAkSEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lORyA9IDA7IHRoZW4KLS0gIEFDX0xJQk9CSihbc2lncHJvY21hc2tdKQotLSAgZ2xfUFJFUkVRX1NJR1BST0NNQVNLCi0tZmkKLSBnbF9TSUdOQUxfTU9EVUxFX0lORElDQVRPUihbc2lncHJvY21hc2tdKQotIGd0X1RZUEVfU1NJWkVfVAotIGdsX0ZVTkNfU1RBVAotLWlmIHRlc3QgJFJFUExBQ0VfU1RBVCA9IDE7IHRoZW4KLS0gIEFDX0xJQk9CSihbc3RhdF0pCi0tICBnbF9QUkVSRVFfU1RBVAotLWZpCi0gZ2xfU1lTX1NUQVRfTU9EVUxFX0lORElDQVRPUihbc3RhdF0pCi0gQU1fU1REQk9PTF9ICi0gZ2xfU1REREVGX0gKLUBAIC0yMDQsMTcgKzE2OSw3IEBAIGdsX1NURElOVF9ICi0gZ2xfU1RESU9fSAotIGdsX1NURExJQl9ICi0gZ2xfRlVOQ19TVFJFUlJPUgotLWlmIHRlc3QgJFJFUExBQ0VfU1RSRVJST1IgPSAxOyB0aGVuCi0tICBBQ19MSUJPQkooW3N0cmVycm9yXSkKLS1maQotLWdsX01PRFVMRV9JTkRJQ0FUT1IoW3N0cmVycm9yXSkKLSBnbF9TVFJJTkdfTU9EVUxFX0lORElDQVRPUihbc3RyZXJyb3JdKQotLUFDX1JFUVVJUkUoW2dsX0hFQURFUl9FUlJOT19IXSkKLS1BQ19SRVFVSVJFKFtnbF9GVU5DX1NUUkVSUk9SXzBdKQotLWlmIHRlc3QgLW4gIiRFUlJOT19IIiB8fCB0ZXN0ICRSRVBMQUNFX1NUUkVSUk9SXzAgPSAxOyB0aGVuCi0tICBBQ19MSUJPQkooW3N0cmVycm9yLW92ZXJyaWRlXSkKLS0gIGdsX1BSRVJFUV9TWVNfSF9XSU5TT0NLMgotLWZpCi0gZ2xfSEVBREVSX1NUUklOR19ICi0gZ2xfSEVBREVSX1NZU19TVEFUX0gKLSBBQ19QUk9HX01LRElSX1AKLUBAIC0zNjQsMTQgKzMxOSwxMyBAQCBBQ19ERUZVTihbZ2x0ZXN0c19MSUJTT1VSQ0VTXSwgWwotICMgVGhpcyBtYWNybyByZWNvcmRzIHRoZSBsaXN0IG9mIGZpbGVzIHdoaWNoIGhhdmUgYmVlbiBpbnN0YWxsZWQgYnkKLSAjIGdudWxpYi10b29sIGFuZCBtYXkgYmUgcmVtb3ZlZCBieSBmdXR1cmUgZ251bGliLXRvb2wgaW52b2NhdGlvbnMuCi0gQUNfREVGVU4oW2dsX0ZJTEVfTElTVF0sIFsKLSsgIGJ1aWxkLWF1eC9hcmctbm9ubnVsbC5oCi0rICBidWlsZC1hdXgvYysrZGVmcy5oCi0gICBidWlsZC1hdXgvY29uZmlnLmxpYnBhdGgKLSAgIGJ1aWxkLWF1eC9jb25maWcucnBhdGgKLSAgIGJ1aWxkLWF1eC9pbnN0YWxsLXJlbG9jCi0gICBidWlsZC1hdXgvcmVsb2MtbGRmbGFncwotLSAgYnVpbGQtYXV4L3NuaXBwZXQvX05vcmV0dXJuLmgKLS0gIGJ1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmgKLS0gIGJ1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaAotLSAgYnVpbGQtYXV4L3NuaXBwZXQvd2Fybi1vbi11c2UuaAotKyAgYnVpbGQtYXV4L3dhcm4tb24tdXNlLmgKLSAgIGRvYy9yZWxvY2F0YWJsZS50ZXhpCi0gICBsaWIvYWxsb2NhLmluLmgKLSAgIGxpYi9hbGxvY2F0b3IuYwotQEAgLTQxOSw4ICszNzMsNiBAQCBBQ19ERUZVTihbZ2xfRklMRV9MSVNUXSwgWwotICAgbGliL3N0ZGlvLmluLmgKLSAgIGxpYi9zdGRsaWIuaW4uaAotICAgbGliL3N0cmVxLmgKLS0gIGxpYi9zdHJlcnJvci1vdmVycmlkZS5jCi0tICBsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuaAotICAgbGliL3N0cmVycm9yLmMKLSAgIGxpYi9zdHJpbmcuaW4uaAotICAgbGliL3N5c19zdGF0LmluLmgKLUBAIC00NjMsNyArNDE1LDYgQEAgQUNfREVGVU4oW2dsX0ZJTEVfTElTVF0sIFsKLSAgIG00L2ludG1heC5tNAotICAgbTQvaW50dHlwZXMtcHJpLm00Ci0gICBtNC9pbnR0eXBlc19oLm00Ci0tICBtNC9sYXJnZWZpbGUubTQKLSAgIG00L2xjbWVzc2FnZS5tNAotICAgbTQvbGliLWxkLm00Ci0gICBtNC9saWItbGluay5tNAotQEAgLTUwMiw3ICs0NTMsNiBAQCBBQ19ERUZVTihbZ2xfRklMRV9MSVNUXSwgWwotICAgbTQvc3RkbGliX2gubTQKLSAgIG00L3N0cmVycm9yLm00Ci0gICBtNC9zdHJpbmdfaC5tNAotLSAgbTQvc3lzX3NvY2tldF9oLm00Ci0gICBtNC9zeXNfc3RhdF9oLm00Ci0gICBtNC90aHJlYWRsaWIubTQKLSAgIG00L3RpbWVfaC5tNAotZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2luY2x1ZGVfbmV4dC5tNCBsaWJpY29udi0xLjE0L3NyY200L2luY2x1ZGVfbmV4dC5tNAotLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9pbmNsdWRlX25leHQubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKLSsrKyBsaWJpY29udi0xLjE0L3NyY200L2luY2x1ZGVfbmV4dC5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjY1MDQ4NDQ3MiAtMDgwMAotQEAgLTEsNCArMSw0IEBACi0tIyBpbmNsdWRlX25leHQubTQgc2VyaWFsIDIwCi0rIyBpbmNsdWRlX25leHQubTQgc2VyaWFsIDE4Ci0gZG5sIENvcHlyaWdodCAoQykgMjAwNi0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotQEAgLTE3NSwxMyArMTc1LDExIEBAIEFDX0RFRlVOKFtnbF9ORVhUX0hFQURFUlNfSU5URVJOQUxdLAotICAgICBbQUNfQ0hFQ0tfSEVBREVSU19PTkNFKFskMV0pCi0gICAgIF0pCi0gCi0tZG5sIEZJWE1FOiBnbF9uZXh0X2hlYWRlciBhbmQgZ2xfaGVhZGVyX2V4aXN0cyBtdXN0IGJlIHVzZWQgdW5xdW90ZWQKLS1kbmwgdW50aWwgd2UgY2FuIGFzc3VtZSBhdXRvY29uZiAyLjY0IG9yIG5ld2VyLgotICAgbTRfZm9yZWFjaF93KFtnbF9IRUFERVJfTkFNRV0sIFskMV0sCi0gICAgIFtBU19WQVJfUFVTSERFRihbZ2xfbmV4dF9oZWFkZXJdLAotICAgICAgICAgICAgICAgICAgICAgW2dsX2N2X25leHRfXW00X2RlZm4oW2dsX0hFQURFUl9OQU1FXSkpCi0gICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllczsgdGhlbgotLSAgICAgICBBU19WQVJfU0VUKGdsX25leHRfaGVhZGVyLCBbJzwnZ2xfSEVBREVSX05BTUUnPiddKQotKyAgICAgICBBU19WQVJfU0VUKFtnbF9uZXh0X2hlYWRlcl0sIFsnPCdnbF9IRUFERVJfTkFNRSc+J10pCi0gICAgICBlbHNlCi0gICAgICAgIEFDX0NBQ0hFX0NIRUNLKAotICAgICAgICAgIFthYnNvbHV0ZSBuYW1lIG9mIDxdbTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKVs+XSwKLUBAIC0yMTAsNyArMjA4LDcgQEAgZG5sIHVudGlsIHdlIGNhbiBhc3N1bWUgYXV0b2NvbmYgMi42NCBvcgotICAgICAgICAgICAgICAgIGRubCBldmFsIGlzIG5lY2Vzc2FyeSB0byBleHBhbmQgZ2xfYWJzbmFtZV9jcHAuCi0gICAgICAgICAgICAgICAgZG5sIFVsdHJpeCBhbmQgUHlyYW1pZCBzaCByZWZ1c2UgdG8gcmVkaXJlY3Qgb3V0cHV0IG9mIGV2YWwsCi0gICAgICAgICAgICAgICAgZG5sIHNvIHVzZSBzdWJzaGVsbC4KLS0gICAgICAgICAgICAgICBBU19WQVJfU0VUKGdsX25leHRfaGVhZGVyLAotKyAgICAgICAgICAgICAgIEFTX1ZBUl9TRVQoW2dsX25leHRfaGVhZGVyXSwKLSAgICAgICAgICAgICAgICAgIFsnIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mQVNfTUVTU0FHRV9MT0dfRkQgfAotICAgICAgICAgICAgICAgICAgIHNlZCAtbiAnXCMvXW00X2RlZm4oW2dsX0hFQURFUl9OQU1FXSlbI3sKLSAgICAgICAgICAgICAgICAgICAgIHMjLioiXCguKi9dbTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKVtcKSIuKiNcMSMKLUBAIC0yMjAsMjAgKzIxOCwyMCBAQCBkbmwgdW50aWwgd2UgY2FuIGFzc3VtZSBhdXRvY29uZiAyLjY0IG9yCi0gICAgICAgICAgICAgICAgICAgfSdgJyInXSkKLSAgICAgICAgICAgbTRfaWYoWyQyXSwgW2NoZWNrXSwKLSAgICAgICAgICAgICBbZWxzZQotLSAgICAgICAgICAgICAgIEFTX1ZBUl9TRVQoZ2xfbmV4dF9oZWFkZXIsIFsnPCdnbF9IRUFERVJfTkFNRSc+J10pCi0rICAgICAgICAgICAgICAgQVNfVkFSX1NFVChbZ2xfbmV4dF9oZWFkZXJdLCBbJzwnZ2xfSEVBREVSX05BTUUnPiddKQotICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgIF0pCi0gICAgICAgICAgXSkKLSAgICAgIGZpCi0gICAgICBBQ19TVUJTVCgKLSAgICAgICAgQVNfVFJfQ1BQKFtORVhUX11tNF9kZWZuKFtnbF9IRUFERVJfTkFNRV0pKSwKLS0gICAgICAgW0FTX1ZBUl9HRVQoZ2xfbmV4dF9oZWFkZXIpXSkKLSsgICAgICAgW0FTX1ZBUl9HRVQoW2dsX25leHRfaGVhZGVyXSldKQotICAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXMgfHwgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSBidWdneTsgdGhlbgotICAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGVfbmV4dCcKLSAgICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9JzwnZ2xfSEVBREVSX05BTUUnPicKLSAgICAgIGVsc2UKLSAgICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRlJwotLSAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT1BU19WQVJfR0VUKGdsX25leHRfaGVhZGVyKQotKyAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT1BU19WQVJfR0VUKFtnbF9uZXh0X2hlYWRlcl0pCi0gICAgICBmaQotICAgICAgQUNfU1VCU1QoCi0gICAgICAgIEFTX1RSX0NQUChbTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfXW00X2RlZm4oW2dsX0hFQURFUl9OQU1FXSkpLAotZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2xhcmdlZmlsZS5tNCBsaWJpY29udi0xLjE0L3NyY200L2xhcmdlZmlsZS5tNAotLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9sYXJnZWZpbGUubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKLSsrKyBsaWJpY29udi0xLjE0L3NyY200L2xhcmdlZmlsZS5tNAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAotQEAgLTEsMTA0ICswLDAgQEAKLS0jIEVuYWJsZSBsYXJnZSBmaWxlcyBvbiBzeXN0ZW1zIHdoZXJlIHRoaXMgaXMgbm90IHRoZSBkZWZhdWx0LgotLQotLSMgQ29weXJpZ2h0IDE5OTItMTk5NiwgMTk5OC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLS0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0tIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0tCi0tIyBUaGUgZm9sbG93aW5nIGltcGxlbWVudGF0aW9uIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gYXV0b2NvbmYgPD0gMi42ODsKLS0jIEFDX1NZU19MQVJHRUZJTEUgZG9lcyBub3QgY29uZmlndXJlIGZvciBsYXJnZSBpbm9kZXMgb24gTWFjIE9TIFggMTAuNS4KLS1tNF92ZXJzaW9uX3ByZXJlcShbMi42OV0sIFtdICxbCi0tCi0tIyBfQUNfU1lTX0xBUkdFRklMRV9URVNUX0lOQ0xVREVTCi0tIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tbTRfZGVmaW5lKFtfQUNfU1lTX0xBUkdFRklMRV9URVNUX0lOQ0xVREVTXSwKLS1bQCU6QGluY2x1ZGUgPHN5cy90eXBlcy5oPgotLSAvKiBDaGVjayB0aGF0IG9mZl90IGNhbiByZXByZXNlbnQgMioqNjMgLSAxIGNvcnJlY3RseS4KLS0gICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAotLSAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCi0tICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1ODA3LiAgKi8KLS1AJTpAZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAoKG9mZl90KSAxIDw8IDYyKSkKLS0gIGludCBvZmZfdF9pc19sYXJnZVtbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKLS0JCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKLS0JCSAgICAgID8gMSA6IC0xXV07W11kbmwKLS1dKQotLQotLQotLSMgX0FDX1NZU19MQVJHRUZJTEVfTUFDUk9fVkFMVUUoQy1NQUNSTywgVkFMVUUsCi0tIwkJCQlDQUNIRS1WQVIsCi0tIwkJCQlERVNDUklQVElPTiwKLS0jCQkJCVBST0xPR1VFLCBbRlVOQ1RJT04tQk9EWV0pCi0tIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLW00X2RlZmluZShbX0FDX1NZU19MQVJHRUZJTEVfTUFDUk9fVkFMVUVdLAotLVtBQ19DQUNIRV9DSEVDSyhbZm9yICQxIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXNdLCBbJDNdLAotLVt3aGlsZSA6OyBkbwotLSAgbTRfaWZ2YWwoWyQ2XSwgW0FDX0xJTktfSUZFTFNFXSwgW0FDX0NPTVBJTEVfSUZFTFNFXSkoCi0tICAgIFtBQ19MQU5HX1BST0dSQU0oWyQ1XSwgWyQ2XSldLAotLSAgICBbJDM9bm87IGJyZWFrXSkKLS0gIG00X2lmdmFsKFskNl0sIFtBQ19MSU5LX0lGRUxTRV0sIFtBQ19DT01QSUxFX0lGRUxTRV0pKAotLSAgICBbQUNfTEFOR19QUk9HUkFNKFtAJTpAZGVmaW5lICQxICQyCi0tJDVdLCBbJDZdKV0sCi0tICAgIFskMz0kMjsgYnJlYWtdKQotLSAgJDM9dW5rbm93bgotLSAgYnJlYWsKLS1kb25lXSkKLS1jYXNlICQkMyBpbiAjKAotLSAgbm8gfCB1bmtub3duKSA7OwotLSAgKikgQUNfREVGSU5FX1VOUVVPVEVEKFskMV0sIFskJDNdLCBbJDRdKTs7Ci0tZXNhYwotLXJtIC1yZiBjb25mdGVzdCpbXWRubAotLV0pIyBfQUNfU1lTX0xBUkdFRklMRV9NQUNST19WQUxVRQotLQotLQotLSMgQUNfU1lTX0xBUkdFRklMRQotLSMgLS0tLS0tLS0tLS0tLS0tLQotLSMgQnkgZGVmYXVsdCwgbWFueSBob3N0cyB3b24ndCBsZXQgcHJvZ3JhbXMgYWNjZXNzIGxhcmdlIGZpbGVzOwotLSMgb25lIG11c3QgdXNlIHNwZWNpYWwgY29tcGlsZXIgb3B0aW9ucyB0byBnZXQgbGFyZ2UtZmlsZSBhY2Nlc3MgdG8gd29yay4KLS0jIEZvciBtb3JlIGRldGFpbHMgYWJvdXQgdGhpcyBicmFpbiBkYW1hZ2UgcGxlYXNlIHNlZToKLS0jIGh0dHA6Ly93d3cudW5peC1zeXN0ZW1zLm9yZy92ZXJzaW9uMi93aGF0c25ldy9sZnMyMG1hci5odG1sCi0tQUNfREVGVU4oW0FDX1NZU19MQVJHRUZJTEVdLAotLVtBQ19BUkdfRU5BQkxFKGxhcmdlZmlsZSwKLS0JICAgICAgIFsgIC0tZGlzYWJsZS1sYXJnZWZpbGUgICAgIG9taXQgc3VwcG9ydCBmb3IgbGFyZ2UgZmlsZXNdKQotLWlmIHRlc3QgIiRlbmFibGVfbGFyZ2VmaWxlIiAhPSBubzsgdGhlbgotLQotLSAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzcGVjaWFsIEMgY29tcGlsZXIgb3B0aW9ucyBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzXSwKLS0gICAgYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQywKLS0gICAgW2FjX2N2X3N5c19sYXJnZWZpbGVfQ0M9bm8KLS0gICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgotLSAgICAgICBhY19zYXZlX0NDPSRDQwotLSAgICAgICB3aGlsZSA6OyBkbwotLQkgIyBJUklYIDYuMiBhbmQgbGF0ZXIgZG8gbm90IHN1cHBvcnQgbGFyZ2UgZmlsZXMgYnkgZGVmYXVsdCwKLS0JICMgc28gdXNlIHRoZSBDIGNvbXBpbGVyJ3MgLW4zMiBvcHRpb24gaWYgdGhhdCBoZWxwcy4KLS0JIEFDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfUFJPR1JBTShbX0FDX1NZU19MQVJHRUZJTEVfVEVTVF9JTkNMVURFU10pXSkKLS0JIEFDX0NPTVBJTEVfSUZFTFNFKFtdLCBbYnJlYWtdKQotLQkgQ0M9IiRDQyAtbjMyIgotLQkgQUNfQ09NUElMRV9JRkVMU0UoW10sIFthY19jdl9zeXNfbGFyZ2VmaWxlX0NDPScgLW4zMic7IGJyZWFrXSkKLS0JIGJyZWFrCi0tICAgICAgIGRvbmUKLS0gICAgICAgQ0M9JGFjX3NhdmVfQ0MKLS0gICAgICAgcm0gLWYgY29uZnRlc3QuJGFjX2V4dAotLSAgICBmaV0pCi0tICBpZiB0ZXN0ICIkYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQyIgIT0gbm87IHRoZW4KLS0gICAgQ0M9JENDJGFjX2N2X3N5c19sYXJnZWZpbGVfQ0MKLS0gIGZpCi0tCi0tICBfQUNfU1lTX0xBUkdFRklMRV9NQUNST19WQUxVRShfRklMRV9PRkZTRVRfQklUUywgNjQsCi0tICAgIGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzLAotLSAgICBbTnVtYmVyIG9mIGJpdHMgaW4gYSBmaWxlIG9mZnNldCwgb24gaG9zdHMgd2hlcmUgdGhpcyBpcyBzZXR0YWJsZS5dLAotLSAgICBbX0FDX1NZU19MQVJHRUZJTEVfVEVTVF9JTkNMVURFU10pCi0tICBpZiB0ZXN0ICRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cyA9IHVua25vd247IHRoZW4KLS0gICAgX0FDX1NZU19MQVJHRUZJTEVfTUFDUk9fVkFMVUUoX0xBUkdFX0ZJTEVTLCAxLAotLSAgICAgIGFjX2N2X3N5c19sYXJnZV9maWxlcywKLS0gICAgICBbRGVmaW5lIGZvciBsYXJnZSBmaWxlcywgb24gQUlYLXN0eWxlIGhvc3RzLl0sCi0tICAgICAgW19BQ19TWVNfTEFSR0VGSUxFX1RFU1RfSU5DTFVERVNdKQotLSAgZmkKLS0KLS0gIEFIX1ZFUkJBVElNKFtfREFSV0lOX1VTRV82NF9CSVRfSU5PREVdLAotLVsvKiBFbmFibGUgbGFyZ2UgaW5vZGUgbnVtYmVycyBvbiBNYWMgT1MgWC4gICovCi0tI2lmbmRlZiBfREFSV0lOX1VTRV82NF9CSVRfSU5PREUKLS0jIGRlZmluZSBfREFSV0lOX1VTRV82NF9CSVRfSU5PREUgMQotLSNlbmRpZl0pCi0tZmkKLS1dKSMgQUNfU1lTX0xBUkdFRklMRQotLQotLV0pIyBtNF92ZXJzaW9uX3ByZXJlcSAyLjY5Ci1kaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvbHN0YXQubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9sc3RhdC5tNAotLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9sc3RhdC5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAotKysrIGxpYmljb252LTEuMTQvc3JjbTQvbHN0YXQubTQJMjAxMi0wMS0wOCAwMjowNzo0MC43MjI0ODQ0NzYgLTA4MDAKLUBAIC0xLDQgKzEsNCBAQAotLSMgc2VyaWFsIDIzCi0rIyBzZXJpYWwgMjEKLSAKLSAjIENvcHlyaWdodCAoQykgMTk5Ny0yMDAxLCAyMDAzLTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0gIwotQEAgLTE1LDI4ICsxNSwyNCBAQCBBQ19ERUZVTihbZ2xfRlVOQ19MU1RBVF0sCi0gICBkbmwgIiNkZWZpbmUgbHN0YXQgc3RhdCIsIGFuZCBsc3RhdC5jIGlzIGEgbm8tb3AuCi0gICBBQ19DSEVDS19GVU5DU19PTkNFKFtsc3RhdF0pCi0gICBpZiB0ZXN0ICRhY19jdl9mdW5jX2xzdGF0ID0geWVzOyB0aGVuCi0tICAgIEFDX1JFUVVJUkUoW2dsX0ZVTkNfTFNUQVRfRk9MTE9XU19TTEFTSEVEX1NZTUxJTktdKQotLSAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbmsgPSBubzsgdGhlbgotKyAgICBBQ19SRVFVSVJFKFtBQ19GVU5DX0xTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LXSkKLSsgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rID0gbm87IHRoZW4KLSsgICAgICBkbmwgTm90ZTogQUNfRlVOQ19MU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElOSyBkb2VzIEFDX0xJQk9CSihbbHN0YXRdKS4KLSAgICAgICBSRVBMQUNFX0xTVEFUPTEKLSAgICAgZmkKLSsgICAgIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9sc3RhdC5jLgotKyAgICBBQ19SRVFVSVJFKFtBQ19DX0lOTElORV0pCi0gICBlbHNlCi0gICAgIEhBVkVfTFNUQVQ9MAotICAgZmkKLSBdKQotIAotLSMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvbHN0YXQuYy4KLS1BQ19ERUZVTihbZ2xfUFJFUkVRX0xTVEFUXSwKLSsjIFJlZGVmaW5lIEFDX0ZVTkNfTFNUQVRfRk9MTE9XU19TTEFTSEVEX1NZTUxJTkssIGJlY2F1c2UgaXQgaXMgbm8gbG9uZ2VyCi0rIyBtYWludGFpbmVkIGluIEF1dG9jb25mLgotK0FDX0RFRlVOKFtBQ19GVU5DX0xTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LXSwKLSBbCi0tICBBQ19SRVFVSVJFKFtBQ19DX0lOTElORV0pCi0tICA6Ci0tXSkKLS0KLS1BQ19ERUZVTihbZ2xfRlVOQ19MU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElOS10sCi0tWwotLSAgZG5sIFdlIGRvbid0IHVzZSBBQ19GVU5DX0xTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LIGFueSBtb3JlLCBiZWNhdXNlIGl0Ci0tICBkbmwgaXMgbm8gbG9uZ2VyIG1haW50YWluZWQgaW4gQXV0b2NvbmYgYW5kIGJlY2F1c2UgaXQgaW52b2tlcyBBQ19MSUJPQkouCi0gICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBsc3RhdCBjb3JyZWN0bHkgaGFuZGxlcyB0cmFpbGluZyBzbGFzaF0sCi0tICAgIFtnbF9jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbmtdLAotKyAgICBbYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rXSwKLSAgICAgW3JtIC1mIGNvbmZ0ZXN0LnN5bSBjb25mdGVzdC5maWxlCi0gICAgICBlY2hvID5jb25mdGVzdC5maWxlCi0gICAgICBpZiB0ZXN0ICIkYXNfbG5fcyIgPSAibG4gLXMiICYmIGxuIC1zIGNvbmZ0ZXN0LmZpbGUgY29uZnRlc3Quc3ltOyB0aGVuCi1AQCAtNDksMjIgKzQ1LDI1IEBAIEFDX0RFRlVOKFtnbF9GVU5DX0xTVEFUX0ZPTExPV1NfU0xBU0hFRF8KLSAgICAgICAgICAgICAgICAgIGhhdmUgdG8gY29tcGlsZSBhbmQgdXNlIHRoZSBsc3RhdCB3cmFwcGVyLiAgKi8KLSAgICAgICAgICAgICAgIHJldHVybiBsc3RhdCAoImNvbmZ0ZXN0LnN5bS8iLCAmc2J1ZikgPT0gMDsKLSAgICAgICAgICAgICBdXSldLAotLSAgICAgICAgIFtnbF9jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9eWVzXSwKLS0gICAgICAgICBbZ2xfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPW5vXSwKLSsgICAgICAgICBbYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPXllc10sCi0rICAgICAgICAgW2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz1ub10sCi0gICAgICAgICAgWyMgV2hlbiBjcm9zcy1jb21waWxpbmcsIGJlIHBlc3NpbWlzdGljIHNvIHdlIHdpbGwgZW5kIHVwIHVzaW5nIHRoZQotICAgICAgICAgICAjIHJlcGxhY2VtZW50IHZlcnNpb24gb2YgbHN0YXQgdGhhdCBjaGVja3MgZm9yIHRyYWlsaW5nIHNsYXNoZXMgYW5kCi0gICAgICAgICAgICMgY2FsbHMgbHN0YXQgYSBzZWNvbmQgdGltZSB3aGVuIG5lY2Vzc2FyeS4KLS0gICAgICAgICAgZ2xfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPW5vCi0rICAgICAgICAgIGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz1ubwotICAgICAgICAgIF0pCi0gICAgICBlbHNlCi0gICAgICAgICMgSWYgdGhlICdsbiAtcycgY29tbWFuZCBmYWlsZWQsIHRoZW4gd2UgcHJvYmFibHkgZG9uJ3QgZXZlbgotICAgICAgICAjIGhhdmUgYW4gbHN0YXQgZnVuY3Rpb24uCi0tICAgICAgIGdsX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz1ubwotKyAgICAgICBhY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9bm8KLSAgICAgIGZpCi0gICAgICBybSAtZiBjb25mdGVzdC5zeW0gY29uZnRlc3QuZmlsZQotICAgICBdKQotLSAgdGVzdCAkZ2xfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rID0geWVzICYmCi0rICB0ZXN0ICRhY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbmsgPSB5ZXMgJiYKLSAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtMU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElOS10sIFsxXSwKLSAgICAgICBbRGVmaW5lIHRvIDEgaWYgYGxzdGF0JyBkZXJlZmVyZW5jZXMgYSBzeW1saW5rIHNwZWNpZmllZAotICAgICAgICB3aXRoIGEgdHJhaWxpbmcgc2xhc2guXSkKLSsgIGlmIHRlc3QgIngkYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rIiA9IHhubzsgdGhlbgotKyAgICBBQ19MSUJPQkooW2xzdGF0XSkKLSsgIGZpCi0gXSkKLWRpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9tZW1tb3ZlLm00IGxpYmljb252LTEuMTQvc3JjbTQvbWVtbW92ZS5tNAotLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9tZW1tb3ZlLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCi0rKysgbGliaWNvbnYtMS4xNC9zcmNtNC9tZW1tb3ZlLm00CTIwMTItMDEtMDggMDI6MDc6NDAuNzM4NDg0NDc3IC0wODAwCi1AQCAtMSw0ICsxLDQgQEAKLS0jIG1lbW1vdmUubTQgc2VyaWFsIDQKLSsjIG1lbW1vdmUubTQgc2VyaWFsIDMKLSBkbmwgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0gZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0gZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1AQCAtNiw3ICs2LDEwIEBAIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG8KLSAKLSBBQ19ERUZVTihbZ2xfRlVOQ19NRU1NT1ZFXSwKLSBbCi0tICBBQ19DSEVDS19GVU5DUyhbbWVtbW92ZV0pCi0rICBBQ19SRVBMQUNFX0ZVTkNTKFttZW1tb3ZlXSkKLSsgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWVtbW92ZSA9IG5vOyB0aGVuCi0rICAgIGdsX1BSRVJFUV9NRU1NT1ZFCi0rICBmaQotIF0pCi0gCi0gIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9tZW1tb3ZlLmMuCi1kaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcGF0aG1heC5tNCBsaWJpY29udi0xLjE0L3NyY200L3BhdGhtYXgubTQKLS0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcGF0aG1heC5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAotKysrIGxpYmljb252LTEuMTQvc3JjbTQvcGF0aG1heC5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjc1ODQ4NDQ3OCAtMDgwMAotQEAgLTEsNCArMSw0IEBACi0tIyBwYXRobWF4Lm00IHNlcmlhbCA5Ci0rIyBwYXRobWF4Lm00IHNlcmlhbCA4Ci0gZG5sIENvcHlyaWdodCAoQykgMjAwMi0yMDAzLCAyMDA1LTIwMDYsIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gZG5sIEluYy4KLSBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLUBAIC04LDUgKzgsNiBAQCBkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvCi0gQUNfREVGVU4oW2dsX1BBVEhNQVhdLAotIFsKLSAgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9wYXRobWF4LmguCi0rICBBQ19DSEVDS19GVU5DU19PTkNFKFtwYXRoY29uZl0pCi0gICBBQ19DSEVDS19IRUFERVJTX09OQ0UoW3N5cy9wYXJhbS5oXSkKLSBdKQotZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3BvLm00IGxpYmljb252LTEuMTQvc3JjbTQvcG8ubTQKLS0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcG8ubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKLSsrKyBsaWJpY29udi0xLjE0L3NyY200L3BvLm00CTIwMTItMDEtMDggMDI6MDc6NDAuNzY2NDg0NDc3IC0wODAwCi1AQCAtMSw0ICsxLDQgQEAKLS0jIHBvLm00IHNlcmlhbCAxN2EKLSsjIHBvLm00IHNlcmlhbCAxNyAoZ2V0dGV4dC0wLjE4KQotIGRubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLUBAIC0xMTgsOCArMTE4LDcgQEAgY2hhbmdlcXVvdGUoWyxdKWRubAotICAgICAgICAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL1BPVEZJTEVTLmluIjsgdGhlbgotICAgICAgICAgICBybSAtZiAiJGFjX2Rpci9QT1RGSUxFUyIKLSAgICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19kaXIvUE9URklMRVMiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvUE9URklMRVMiCi0tICAgICAgICAgIGd0X3RhYj1gcHJpbnRmICdcdCdgCi0tICAgICAgICAgIGNhdCAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL1BPVEZJTEVTLmluIiB8IHNlZCAtZSAiL14jL2QiIC1lICIvXlsgJHtndF90YWJ9XSpcJC9kIiAtZSAicywuKiwgICAgICR0b3Bfc3JjZGlyLyYgXFxcXCwiIHwgc2VkIC1lICJcJHMvXCguKlwpIFxcXFwvXDEvIiA+ICIkYWNfZGlyL1BPVEZJTEVTIgotKyAgICAgICAgICBjYXQgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiIgfCBzZWQgLWUgIi9eIy9kIiAtZSAiL15bIAldKlwkL2QiIC1lICJzLC4qLCAgICAgJHRvcF9zcmNkaXIvJiBcXFxcLCIgfCBzZWQgLWUgIlwkcy9cKC4qXCkgXFxcXC9cMS8iID4gIiRhY19kaXIvUE9URklMRVMiCi0gICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSJQT1RGSUxFUy5pbiIKLSAgICAgICAgICAgIyBBTExfTElOR1VBUywgUE9GSUxFUywgVVBEQVRFUE9GSUxFUywgRFVNTVlQT0ZJTEVTLCBHTU9GSUxFUyBkZXBlbmQKLSAgICAgICAgICAgIyBvbiAkYWNfZGlyIGJ1dCBkb24ndCBkZXBlbmQgb24gdXNlci1zcGVjaWZpZWQgY29uZmlndXJhdGlvbgotQEAgLTI1NSw3ICsyNTQsNiBAQCBFT1QKLSAgIGZpCi0gCi0gICAjIEEgc2VkIHNjcmlwdCB0aGF0IGV4dHJhY3RzIHRoZSB2YWx1ZSBvZiBWQVJJQUJMRSBmcm9tIGEgTWFrZWZpbGUuCi0tICB0YWI9YHByaW50ZiAnXHQnYAotICAgc2VkX3hfdmFyaWFibGU9JwotICMgVGVzdCBpZiB0aGUgaG9sZCBzcGFjZSBpcyBlbXB0eS4KLSB4Ci1AQCAtMjYzLDkgKzI2MSw5IEBAIHMvUC9QLwotIHgKLSB0YQotICMgWWVzIGl0IHdhcyBlbXB0eS4gTG9vayBpZiB3ZSBoYXZlIHRoZSBleHBlY3RlZCB2YXJpYWJsZSBkZWZpbml0aW9uLgotLS9eWyciJHt0YWJ9IicgXSpWQVJJQUJMRVsnIiR7dGFifSInIF0qPS97Ci0rL15bCSBdKlZBUklBQkxFWwkgXSo9L3sKLSAgICMgU2VlbiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgdmFyaWFibGUgZGVmaW5pdGlvbi4KLS0gIHMvXlsnIiR7dGFifSInIF0qVkFSSUFCTEVbJyIke3RhYn0iJyBdKj0vLwotKyAgcy9eWwkgXSpWQVJJQUJMRVsJIF0qPS8vCi0gICBiYQotIH0KLSBiZAotQEAgLTQwNywxNSArNDA1LDE0IEBAIGNoYW5nZXF1b3RlKFssXSlkbmwKLSAgIGZpCi0gCi0gICBzZWQgLWUgInN8QFBPVEZJTEVTX0RFUFNAfCRQT1RGSUxFU19ERVBTfGciIC1lICJzfEBQT0ZJTEVTQHwkUE9GSUxFU3xnIiAtZSAic3xAVVBEQVRFUE9GSUxFU0B8JFVQREFURVBPRklMRVN8ZyIgLWUgInN8QERVTU1ZUE9GSUxFU0B8JERVTU1ZUE9GSUxFU3xnIiAtZSAic3xAR01PRklMRVNAfCRHTU9GSUxFU3xnIiAtZSAic3xAUFJPUEVSVElFU0ZJTEVTQHwkUFJPUEVSVElFU0ZJTEVTfGciIC1lICJzfEBDTEFTU0ZJTEVTQHwkQ0xBU1NGSUxFU3xnIiAtZSAic3xAUU1GSUxFU0B8JFFNRklMRVN8ZyIgLWUgInN8QE1TR0ZJTEVTQHwkTVNHRklMRVN8ZyIgLWUgInN8QFJFU09VUkNFU0RMTEZJTEVTQHwkUkVTT1VSQ0VTRExMRklMRVN8ZyIgLWUgInN8QENBVEFMT0dTQHwkQ0FUQUxPR1N8ZyIgLWUgInN8QEpBVkFDQVRBTE9HU0B8JEpBVkFDQVRBTE9HU3xnIiAtZSAic3xAUVRDQVRBTE9HU0B8JFFUQ0FUQUxPR1N8ZyIgLWUgInN8QFRDTENBVEFMT0dTQHwkVENMQ0FUQUxPR1N8ZyIgLWUgInN8QENTSEFSUENBVEFMT0dTQHwkQ1NIQVJQQ0FUQUxPR1N8ZyIgLWUgJ3MsXiNkaXN0ZGlyOixkaXN0ZGlyOiwnIDwgIiRhY19maWxlIiA+ICIkYWNfZmlsZS50bXAiCi0tICB0YWI9YHByaW50ZiAnXHQnYAotICAgaWYgZ3JlcCAtbCAnQFRDTENBVEFMT0dTQCcgIiRhY19maWxlIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAjIEFkZCBkZXBlbmRlbmNpZXMgdGhhdCBjYW5ub3QgYmUgZm9ybXVsYXRlZCBhcyBhIHNpbXBsZSBzdWZmaXggcnVsZS4KLSAgICAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbwotICAgICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL1wuLiokLy8nIC1lICd5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LydgCi0gICAgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCi0gJGZyb2JiZWRsYW5nLm1zZzogJGxhbmcucG8KLS0ke3RhYn1AZWNobyAiXCQoTVNHRk1UKSAtYyAtLXRjbCAtZCBcJChzcmNkaXIpIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyI7IFwKLS0ke3RhYn1cJChNU0dGTVQpIC1jIC0tdGNsIC1kICJcJChzcmNkaXIpIiAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gfHwgeyBybSAtZiAiXCQoc3JjZGlyKS8kZnJvYmJlZGxhbmcubXNnIjsgZXhpdCAxOyB9Ci0rCUBlY2hvICJcJChNU0dGTVQpIC1jIC0tdGNsIC1kIFwkKHNyY2RpcikgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIjsgXAotKwlcJChNU0dGTVQpIC1jIC0tdGNsIC1kICJcJChzcmNkaXIpIiAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gfHwgeyBybSAtZiAiXCQoc3JjZGlyKS8kZnJvYmJlZGxhbmcubXNnIjsgZXhpdCAxOyB9Ci0gRU9GCi0gICAgIGRvbmUKLSAgIGZpCi1AQCAtNDI1LDggKzQyMiw4IEBAIEVPRgotICAgICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL18vLS9nJyAtZSAncy9ec3ItQ1Mvc3ItU1AvJyAtZSAncy9AbGF0aW4kLy1MYXRuLycgLWUgJ3MvQGN5cmlsbGljJC8tQ3lybC8nIC1lICdzL15zci1TUCQvc3ItU1AtTGF0bi8nIC1lICdzL151ei1VWiQvdXotVVotTGF0bi8nYAotICAgICAgIGNhdCA+PiAiJGFjX2ZpbGUudG1wIiA8PEVPRgotICRmcm9iYmVkbGFuZy9cJChET01BSU4pLnJlc291cmNlcy5kbGw6ICRsYW5nLnBvCi0tJHt0YWJ9QGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS1jc2hhcnAgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgXCQoRE9NQUlOKSI7IFwKLS0ke3RhYn1cJChNU0dGTVQpIC1jIC0tY3NoYXJwIC1kICJcJChzcmNkaXIpIiAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgIlwkKERPTUFJTikiIHx8IHsgcm0gLWYgIlwkKHNyY2RpcikvJGZyb2JiZWRsYW5nLm1zZyI7IGV4aXQgMTsgfQotKwlAZWNobyAiXCQoTVNHRk1UKSAtYyAtLWNzaGFycCAtZCBcJChzcmNkaXIpIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyAtciBcJChET01BSU4pIjsgXAotKwlcJChNU0dGTVQpIC1jIC0tY3NoYXJwIC1kICJcJChzcmNkaXIpIiAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgIlwkKERPTUFJTikiIHx8IHsgcm0gLWYgIlwkKHNyY2RpcikvJGZyb2JiZWRsYW5nLm1zZyI7IGV4aXQgMTsgfQotIEVPRgotICAgICBkb25lCi0gICBmaQotZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3JlYWRsaW5rLm00IGxpYmljb252LTEuMTQvc3JjbTQvcmVhZGxpbmsubTQKLS0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcmVhZGxpbmsubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKLSsrKyBsaWJpY29udi0xLjE0L3NyY200L3JlYWRsaW5rLm00CTIwMTItMDEtMDggMDI6MDc6NDAuNzkwNDg0NDc5IC0wODAwCi1AQCAtMSw0ICsxLDQgQEAKLS0jIHJlYWRsaW5rLm00IHNlcmlhbCAxMQotKyMgcmVhZGxpbmsubTQgc2VyaWFsIDEwCi0gZG5sIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotQEAgLTEwLDYgKzEwLDggQEAgQUNfREVGVU4oW2dsX0ZVTkNfUkVBRExJTktdLAotICAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbcmVhZGxpbmtdKQotICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19yZWFkbGluayA9IG5vOyB0aGVuCi0gICAgIEhBVkVfUkVBRExJTks9MAotKyAgICBBQ19MSUJPQkooW3JlYWRsaW5rXSkKLSsgICAgZ2xfUFJFUkVRX1JFQURMSU5LCi0gICBlbHNlCi0gICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHJlYWRsaW5rIHNpZ25hdHVyZSBpcyBjb3JyZWN0XSwKLSAgICAgICBbZ2xfY3ZfZGVjbF9yZWFkbGlua193b3Jrc10sCi1AQCAtMzgsOCArNDAsMTAgQEAgQUNfREVGVU4oW2dsX0ZVTkNfUkVBRExJTktdLAotICAgICAgIEFDX0RFRklORShbUkVBRExJTktfVFJBSUxJTkdfU0xBU0hfQlVHXSwgWzFdLCBbRGVmaW5lIHRvIDEgaWYgcmVhZGxpbmsKLSAgICAgICAgIGZhaWxzIHRvIHJlY29nbml6ZSBhIHRyYWlsaW5nIHNsYXNoLl0pCi0gICAgICAgUkVQTEFDRV9SRUFETElOSz0xCi0rICAgICAgQUNfTElCT0JKKFtyZWFkbGlua10pCi0gICAgIGVsaWYgdGVzdCAiJGdsX2N2X2RlY2xfcmVhZGxpbmtfd29ya3MiICE9IHllczsgdGhlbgotICAgICAgIFJFUExBQ0VfUkVBRExJTks9MQotKyAgICAgIEFDX0xJQk9CSihbcmVhZGxpbmtdKQotICAgICBmaQotICAgZmkKLSBdKQotZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3JlYWQubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9yZWFkLm00Ci0tLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3JlYWQubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKLSsrKyBsaWJpY29udi0xLjE0L3NyY200L3JlYWQubTQJMjAxMi0wMS0wOCAwMjowNzo0MC43ODI0ODQ0NzggLTA4MDAKLUBAIC0xLDQgKzEsNCBAQAotLSMgcmVhZC5tNCBzZXJpYWwgMgotKyMgcmVhZC5tNCBzZXJpYWwgMQotIGRubCBDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0gZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0gZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1AQCAtMTQsNiArMTQsNyBAQCBBQ19ERUZVTihbZ2xfRlVOQ19SRUFEXSwKLSAgICAgZ2xfTk9OQkxPQ0tJTkdfSU8KLSAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9ub25ibG9ja2luZyAhPSB5ZXM7IHRoZW4KLSAgICAgICBSRVBMQUNFX1JFQUQ9MQotKyAgICAgIEFDX0xJQk9CSihbcmVhZF0pCi0gICAgIGZpCi0gICBdKQotIF0pCi1kaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcmVsb2NhdGFibGUtbGliLm00IGxpYmljb252LTEuMTQvc3JjbTQvcmVsb2NhdGFibGUtbGliLm00Ci0tLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3JlbG9jYXRhYmxlLWxpYi5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAotKysrIGxpYmljb252LTEuMTQvc3JjbTQvcmVsb2NhdGFibGUtbGliLm00CTIwMTItMDEtMDggMDI6MDc6NDAuNzk4NDg0NDgwIC0wODAwCi1AQCAtMSw0ICsxLDQgQEAKLS0jIHJlbG9jYXRhYmxlLWxpYi5tNCBzZXJpYWwgNgotKyMgcmVsb2NhdGFibGUtbGliLm00IHNlcmlhbCA1Ci0gZG5sIENvcHlyaWdodCAoQykgMjAwMywgMjAwNS0yMDA3LCAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0gZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0gZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1AQCAtMTAsNiArMTAsOSBAQCBkbmwgU3VwcG9ydCBmb3IgcmVsb2NhdGFibGUgbGlicmFyaWVzLgotIEFDX0RFRlVOKFtnbF9SRUxPQ0FUQUJMRV9MSUJSQVJZXSwKLSBbCi0gICBBQ19SRVFVSVJFKFtnbF9SRUxPQ0FUQUJMRV9MSUJSQVJZX0JPRFldKQotKyAgaWYgdGVzdCAkUkVMT0NBVEFCTEUgPSB5ZXM7IHRoZW4KLSsgICAgQUNfTElCT0JKKFtyZWxvY2F0YWJsZV0pCi0rICBmaQotIF0pCi0gQUNfREVGVU4oW2dsX1JFTE9DQVRBQkxFX0xJQlJBUllfQk9EWV0sCi0gWwotQEAgLTI5LDYgKzMyLDEzIEBAIEFDX0RFRlVOKFtnbF9SRUxPQ0FUQUJMRV9MSUJSQVJZX0JPRFldLAotICAgZmkKLSBdKQotIAotK2RubCBMaWtlIGdsX1JFTE9DQVRBQkxFX0xJQlJBUlksIGV4Y2VwdCBwcmVwYXJlIGZvciBzZXBhcmF0ZSBjb21waWxhdGlvbgotK2RubCAobm8gQUNfTElCT0JKKS4KLStBQ19ERUZVTihbZ2xfUkVMT0NBVEFCTEVfTElCUkFSWV9TRVBBUkFURV0sCi0rWwotKyAgQUNfUkVRVUlSRShbZ2xfUkVMT0NBVEFCTEVfTElCUkFSWV9CT0RZXSkKLStdKQotKwotIGRubCBTdXBwb3J0IGZvciByZWxvY2F0YWJsZSBwYWNrYWdlcyBmb3Igd2hpY2ggaXQgaXMgYSBub3AuCi0gQUNfREVGVU4oW2dsX1JFTE9DQVRBQkxFX05PUF0sCi0gWwotZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3JlbG9jYXRhYmxlLm00IGxpYmljb252LTEuMTQvc3JjbTQvcmVsb2NhdGFibGUubTQKLS0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcmVsb2NhdGFibGUubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKLSsrKyBsaWJpY29udi0xLjE0L3NyY200L3JlbG9jYXRhYmxlLm00CTIwMTItMDEtMDggMDI6MDc6NDAuODAyNDg0NDc5IC0wODAwCi1AQCAtMSw0ICsxLDQgQEAKLS0jIHJlbG9jYXRhYmxlLm00IHNlcmlhbCAxNwotKyMgcmVsb2NhdGFibGUubTQgc2VyaWFsIDE2Ci0gZG5sIENvcHlyaWdodCAoQykgMjAwMywgMjAwNS0yMDA3LCAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0gZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0gZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1AQCAtMTQsNiArMTQsOSBAQCBBQ19ERUZVTihbZ2xfUkVMT0NBVEFCTEVdLAotIFsKLSAgIEFDX1JFUVVJUkUoW2dsX1JFTE9DQVRBQkxFX0JPRFldKQotICAgZ2xfUkVMT0NBVEFCTEVfTElCUkFSWQotKyAgaWYgdGVzdCAkUkVMT0NBVEFCTEUgPSB5ZXM7IHRoZW4KLSsgICAgQUNfTElCT0JKKFtwcm9ncmVsb2NdKQotKyAgZmkKLSAgIDogJHtSRUxPQ0FUQUJMRV9DT05GSUdfSF9ESVI9JyQodG9wX2J1aWxkZGlyKSd9Ci0gICBSRUxPQ0FUQUJMRV9TUkNfRElSPSJcJCh0b3Bfc3JjZGlyKS8kZ2xfc291cmNlX2Jhc2UiCi0gICBSRUxPQ0FUQUJMRV9CVUlMRF9ESVI9IlwkKHRvcF9idWlsZGRpcikvJGdsX3NvdXJjZV9iYXNlIgotZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3NhZmUtcmVhZC5tNCBsaWJpY29udi0xLjE0L3NyY200L3NhZmUtcmVhZC5tNAotLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zYWZlLXJlYWQubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKLSsrKyBsaWJpY29udi0xLjE0L3NyY200L3NhZmUtcmVhZC5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjgxMDQ4NDQ4MCAtMDgwMAotQEAgLTEsMTAgKzEsMTcgQEAKLS0jIHNhZmUtcmVhZC5tNCBzZXJpYWwgNgotKyMgc2FmZS1yZWFkLm00IHNlcmlhbCA1Ci0gZG5sIENvcHlyaWdodCAoQykgMjAwMi0yMDAzLCAyMDA1LTIwMDYsIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gZG5sIEluYy4KLSBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSBkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotIAotK0FDX0RFRlVOKFtnbF9TQUZFX1JFQURdLAotK1sKLSsgIEFDX0xJQk9CSihbc2FmZS1yZWFkXSkKLSsKLSsgIGdsX1BSRVJFUV9TQUZFX1JFQUQKLStdKQotKwotICMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc2FmZS1yZWFkLmMuCi0gQUNfREVGVU4oW2dsX1BSRVJFUV9TQUZFX1JFQURdLAotIFsKLWRpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zZXRlbnYubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9zZXRlbnYubTQKLS0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc2V0ZW52Lm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCi0rKysgbGliaWNvbnYtMS4xNC9zcmNtNC9zZXRlbnYubTQJMjAxMi0wMS0wOCAwMjowNzo0MC44MTg0ODQ0ODEgLTA4MDAKLUBAIC0xLDQgKzEsNCBAQAotLSMgc2V0ZW52Lm00IHNlcmlhbCAyNAotKyMgc2V0ZW52Lm00IHNlcmlhbCAyMgotIGRubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCwgMjAwNi0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotQEAgLTM4LDYgKzM4LDkgQEAgQUNfREVGVU4oW2dsX0ZVTkNfU0VURU5WXSwKLSAgICAgICBSRVBMQUNFX1NFVEVOVj0xCi0gICAgIGZpCi0gICBmaQotKyAgaWYgdGVzdCAkSEFWRV9TRVRFTlYkUkVQTEFDRV9TRVRFTlYgIT0gMTA7IHRoZW4KLSsgICAgQUNfTElCT0JKKFtzZXRlbnZdKQotKyAgZmkKLSBdKQotIAotICMgTGlrZSBnbF9GVU5DX1NFVEVOViwgZXhjZXB0IHByZXBhcmUgZm9yIHNlcGFyYXRlIGNvbXBpbGF0aW9uCi1AQCAtNjIsOSArNjUsOSBAQCBBQ19ERUZVTihbZ2xfRlVOQ19VTlNFVEVOVl0sCi0gICBmaQotICAgQUNfQ0hFQ0tfRlVOQ1MoW3Vuc2V0ZW52XSkKLSAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfdW5zZXRlbnYgPSBubzsgdGhlbgotLSAgICBIQVZFX1VOU0VURU5WPTAKLSsgICAgQUNfTElCT0JKKFt1bnNldGVudl0pCi0rICAgIGdsX1BSRVJFUV9VTlNFVEVOVgotICAgZWxzZQotLSAgICBIQVZFX1VOU0VURU5WPTEKLSAgICAgZG5sIFNvbWUgQlNEcyByZXR1cm4gdm9pZCwgZmFpbGluZyB0byBkbyBlcnJvciBjaGVja2luZy4KLSAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB1bnNldGVudigpIHJldHVybiB0eXBlXSwgW2d0X2N2X2Z1bmNfdW5zZXRlbnZfcmV0XSwKLSAgICAgICBbQUNfQ09NUElMRV9JRkVMU0UoCi1AQCAtOTAsNiArOTMsNyBAQCBpbnQgdW5zZXRlbnYoKTsKLSAgICAgICBBQ19ERUZJTkUoW1ZPSURfVU5TRVRFTlZdLCBbMV0sIFtEZWZpbmUgdG8gMSBpZiB1bnNldGVudiByZXR1cm5zIHZvaWQKLSAgICAgICAgaW5zdGVhZCBvZiBpbnQuXSkKLSAgICAgICBSRVBMQUNFX1VOU0VURU5WPTEKLSsgICAgICBBQ19MSUJPQkooW3Vuc2V0ZW52XSkKLSAgICAgZmkKLSAKLSAgICAgZG5sIFNvbGFyaXMgMTAgdW5zZXRlbnYgZG9lcyBub3QgcmVtb3ZlIGFsbCBjb3BpZXMgb2YgYSBuYW1lLgotQEAgLTEyMiw2ICsxMjYsNyBAQCBpbnQgdW5zZXRlbnYoKTsKLSAgICAgICBbZ2xfY3ZfZnVuY191bnNldGVudl93b3Jrcz0iZ3Vlc3Npbmcgbm8iXSldKQotICAgICBpZiB0ZXN0ICIkZ2xfY3ZfZnVuY191bnNldGVudl93b3JrcyIgIT0geWVzOyB0aGVuCi0gICAgICAgUkVQTEFDRV9VTlNFVEVOVj0xCi0rICAgICAgQUNfTElCT0JKKFt1bnNldGVudl0pCi0gICAgIGZpCi0gICBmaQotIF0pCi1kaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc2lnbmFsYmxvY2tpbmcubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9zaWduYWxibG9ja2luZy5tNAotLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zaWduYWxibG9ja2luZy5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAotKysrIGxpYmljb252LTEuMTQvc3JjbTQvc2lnbmFsYmxvY2tpbmcubTQJMjAxMi0wMS0wOCAwMjowNzo0MC44MzQ0ODQ0ODIgLTA4MDAKLUBAIC0xLDQgKzEsNCBAQAotLSMgc2lnbmFsYmxvY2tpbmcubTQgc2VyaWFsIDEyCi0rIyBzaWduYWxibG9ja2luZy5tNCBzZXJpYWwgMTAKLSBkbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIDIwMDYtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLUBAIC0xMiwxNCArMTIsMzEgQEAgZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsbwotIEFDX0RFRlVOKFtnbF9TSUdOQUxCTE9DS0lOR10sCi0gWwotICAgQUNfUkVRVUlSRShbZ2xfU0lHTkFMX0hfREVGQVVMVFNdKQotLSAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfVFlQRV9TSUdTRVRfVF0pCi0tICBpZiB0ZXN0ICRnbF9jdl90eXBlX3NpZ3NldF90ID0geWVzOyB0aGVuCi0rICBzaWduYWxzX25vdF9wb3NpeD0KLSsgIEFDX0VHUkVQX0hFQURFUihbc2lnc2V0X3RdLCBbc2lnbmFsLmhdLCAsIFtzaWduYWxzX25vdF9wb3NpeD0xXSkKLSsgIGlmIHRlc3QgLXogIiRzaWduYWxzX25vdF9wb3NpeCI7IHRoZW4KLSAgICAgQUNfQ0hFQ0tfRlVOQyhbc2lncHJvY21hc2tdLCBbZ2xfY3ZfZnVuY19zaWdwcm9jbWFzaz0xXSkKLSAgIGZpCi0gICBpZiB0ZXN0IC16ICIkZ2xfY3ZfZnVuY19zaWdwcm9jbWFzayI7IHRoZW4KLSAgICAgSEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lORz0wCi0rICAgIEFDX0xJQk9CSihbc2lncHJvY21hc2tdKQotKyAgICBnbF9QUkVSRVFfU0lHUFJPQ01BU0sKLSAgIGZpCi0gXSkKLSAKLS0jIFByZXJlcXVpc2l0ZXMgb2YgbGliL3NpZ3Byb2NtYXNrLmMuCi0tQUNfREVGVU4oW2dsX1BSRVJFUV9TSUdQUk9DTUFTS10sIFs6XSkKLSsjIFByZXJlcXVpc2l0ZXMgb2YgdGhlIHBhcnQgb2YgbGliL3NpZ25hbC5pbi5oIGFuZCBvZiBsaWIvc2lncHJvY21hc2suYy4KLStBQ19ERUZVTihbZ2xfUFJFUkVRX1NJR1BST0NNQVNLXSwKLStbCi0rICBBQ19SRVFVSVJFKFtnbF9TSUdOQUxfSF9ERUZBVUxUU10pCi0rICBBQ19DSEVDS19UWVBFUyhbc2lnc2V0X3RdLAotKyAgICBbZ2xfY3ZfdHlwZV9zaWdzZXRfdD15ZXNdLCBbZ2xfY3ZfdHlwZV9zaWdzZXRfdD1ub10sCi0rICAgIFsjaW5jbHVkZSA8c2lnbmFsLmg+Ci0rLyogTWluZ3cgZGVmaW5lcyBzaWdzZXRfdCBub3QgaW4gPHNpZ25hbC5oPiwgYnV0IGluIDxzeXMvdHlwZXMuaD4uICAqLwotKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD5dKQotKyAgaWYgdGVzdCAkZ2xfY3ZfdHlwZV9zaWdzZXRfdCAhPSB5ZXM7IHRoZW4KLSsgICAgSEFWRV9TSUdTRVRfVD0wCi0rICBmaQotKyAgZG5sIEhBVkVfU0lHU0VUX1QgaXMgMSBpZiB0aGUgc3lzdGVtIGxhY2tzIHRoZSBzaWdwcm9jbWFzayBmdW5jdGlvbiBidXQgaGFzCi0rICBkbmwgdGhlIHNpZ3NldF90IHR5cGUuCi0rICBBQ19TVUJTVChbSEFWRV9TSUdTRVRfVF0pCi0rXSkKLWRpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zaWduYWxfaC5tNCBsaWJpY29udi0xLjE0L3NyY200L3NpZ25hbF9oLm00Ci0tLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3NpZ25hbF9oLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCi0rKysgbGliaWNvbnYtMS4xNC9zcmNtNC9zaWduYWxfaC5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjgyNjQ4NDQ4MCAtMDgwMAotQEAgLTEsNCArMSw0IEBACi0tIyBzaWduYWxfaC5tNCBzZXJpYWwgMTYKLSsjIHNpZ25hbF9oLm00IHNlcmlhbCAxMgotIGRubCBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLUBAIC03LDcgKzcsNiBAQCBkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvCi0gQUNfREVGVU4oW2dsX1NJR05BTF9IXSwKLSBbCi0gICBBQ19SRVFVSVJFKFtnbF9TSUdOQUxfSF9ERUZBVUxUU10pCi0tICBBQ19SRVFVSVJFKFtnbF9DSEVDS19UWVBFX1NJR1NFVF9UXSkKLSAgIGdsX05FWFRfSEVBREVSUyhbc2lnbmFsLmhdKQotIAotICMgQUlYIGRlY2xhcmVzIHNpZ19hdG9taWNfdCB0byBhbHJlYWR5IGluY2x1ZGUgdm9sYXRpbGUsIGFuZCBDODkgY29tcGlsZXJzCi1AQCAtMjgsMjUgKzI3LDEwIEBAIEFDX0RFRlVOKFtnbF9TSUdOQUxfSF0sCi0gICBkbmwgQ2hlY2sgZm9yIGRlY2xhcmF0aW9ucyBvZiBhbnl0aGluZyB3ZSB3YW50IHRvIHBvaXNvbiBpZiB0aGUKLSAgIGRubCBjb3JyZXNwb25kaW5nIGdudWxpYiBtb2R1bGUgaXMgbm90IGluIHVzZS4KLSAgIGdsX1dBUk5fT05fVVNFX1BSRVBBUkUoW1sjaW5jbHVkZSA8c2lnbmFsLmg+Ci0tICAgIF1dLCBbcHRocmVhZF9zaWdtYXNrIHNpZ2FjdGlvbgotLSAgICBzaWdhZGRzZXQgc2lnZGVsc2V0IHNpZ2VtcHR5c2V0IHNpZ2ZpbGxzZXQgc2lnaXNtZW1iZXIKLSsgICAgXV0sIFtzaWdhY3Rpb24gc2lnYWRkc2V0IHNpZ2RlbHNldCBzaWdlbXB0eXNldCBzaWdmaWxsc2V0IHNpZ2lzbWVtYmVyCi0gICAgIHNpZ3BlbmRpbmcgc2lncHJvY21hc2tdKQotIF0pCi0gCi0tQUNfREVGVU4oW2dsX0NIRUNLX1RZUEVfU0lHU0VUX1RdLAotLVsKLS0gIEFDX0NIRUNLX1RZUEVTKFtzaWdzZXRfdF0sCi0tICAgIFtnbF9jdl90eXBlX3NpZ3NldF90PXllc10sIFtnbF9jdl90eXBlX3NpZ3NldF90PW5vXSwKLS0gICAgW1sKLS0gICAgICAjaW5jbHVkZSA8c2lnbmFsLmg+Ci0tICAgICAgLyogTWluZ3cgZGVmaW5lcyBzaWdzZXRfdCBub3QgaW4gPHNpZ25hbC5oPiwgYnV0IGluIDxzeXMvdHlwZXMuaD4uICAqLwotLSAgICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLS0gICAgXV0pCi0tICBpZiB0ZXN0ICRnbF9jdl90eXBlX3NpZ3NldF90ICE9IHllczsgdGhlbgotLSAgICBIQVZFX1NJR1NFVF9UPTAKLS0gIGZpCi0tXSkKLS0KLSBBQ19ERUZVTihbZ2xfU0lHTkFMX01PRFVMRV9JTkRJQ0FUT1JdLAotIFsKLSAgIGRubCBVc2UgQUNfUkVRVUlSRSBoZXJlLCBzbyB0aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGFyZSBleHBhbmRlZCBvbmNlIG9ubHkuCi1AQCAtNTgsMTMgKzQyLDExIEBAIEFDX0RFRlVOKFtnbF9TSUdOQUxfTU9EVUxFX0lORElDQVRPUl0sCi0gCi0gQUNfREVGVU4oW2dsX1NJR05BTF9IX0RFRkFVTFRTXSwKLSBbCi0tICBHTlVMSUJfUFRIUkVBRF9TSUdNQVNLPTA7ICAgIEFDX1NVQlNUKFtHTlVMSUJfUFRIUkVBRF9TSUdNQVNLXSkKLSAgIEdOVUxJQl9TSUdOQUxfSF9TSUdQSVBFPTA7ICAgQUNfU1VCU1QoW0dOVUxJQl9TSUdOQUxfSF9TSUdQSVBFXSkKLSAgIEdOVUxJQl9TSUdQUk9DTUFTSz0wOyAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TSUdQUk9DTUFTS10pCi0gICBHTlVMSUJfU0lHQUNUSU9OPTA7ICAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfU0lHQUNUSU9OXSkKLSAgIGRubCBBc3N1bWUgcHJvcGVyIEdOVSBiZWhhdmlvciB1bmxlc3MgYW5vdGhlciBtb2R1bGUgc2F5cyBvdGhlcndpc2UuCi0gICBIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HPTE7IEFDX1NVQlNUKFtIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HXSkKLS0gIEhBVkVfUFRIUkVBRF9TSUdNQVNLPTE7ICAgICAgQUNfU1VCU1QoW0hBVkVfUFRIUkVBRF9TSUdNQVNLXSkKLSAgIEhBVkVfU0lHU0VUX1Q9MTsgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfU0lHU0VUX1RdKQotICAgSEFWRV9TSUdJTkZPX1Q9MTsgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9TSUdJTkZPX1RdKQotICAgSEFWRV9TSUdBQ1RJT049MTsgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9TSUdBQ1RJT05dKQotQEAgLTczLDUgKzU1LDQgQEAgQUNfREVGVU4oW2dsX1NJR05BTF9IX0RFRkFVTFRTXSwKLSAgIEhBVkVfVFlQRV9WT0xBVElMRV9TSUdfQVRPTUlDX1Q9MTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfVFlQRV9WT0xBVElMRV9TSUdfQVRPTUlDX1RdKQotICAgSEFWRV9TSUdIQU5ETEVSX1Q9MTsgICAgICAgICBBQ19TVUJTVChbSEFWRV9TSUdIQU5ETEVSX1RdKQotLSAgUkVQTEFDRV9QVEhSRUFEX1NJR01BU0s9MDsgICBBQ19TVUJTVChbUkVQTEFDRV9QVEhSRUFEX1NJR01BU0tdKQotIF0pCi1kaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc3RhdC5tNCBsaWJpY29udi0xLjE0L3NyY200L3N0YXQubTQKLS0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc3RhdC5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAotKysrIGxpYmljb252LTEuMTQvc3JjbTQvc3RhdC5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjg1NDQ4NDQ4MyAtMDgwMAotQEAgLTEsNCArMSw0IEBACi0tIyBzZXJpYWwgOAotKyMgc2VyaWFsIDcKLSAKLSAjIENvcHlyaWdodCAoQykgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotICMKLUBAIC01OCwxMSArNTgsOSBAQCBBQ19ERUZVTihbZ2xfRlVOQ19TVEFUXSwKLSAgICAgICBBQ19ERUZJTkUoW1JFUExBQ0VfRlVOQ19TVEFUX0ZJTEVdLCBbMV0sIFtEZWZpbmUgdG8gMSBpZiBzdGF0IG5lZWRzCi0gICAgICAgICBoZWxwIHdoZW4gcGFzc2VkIGEgZmlsZSBuYW1lIHdpdGggYSB0cmFpbGluZyBzbGFzaF0pOzsKLSAgIGVzYWMKLS1dKQotLQotLSMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc3RhdC5jLgotLUFDX0RFRlVOKFtnbF9QUkVSRVFfU1RBVF0sCi0tWwotLSAgQUNfUkVRVUlSRShbQUNfQ19JTkxJTkVdKQotLSAgOgotKyAgaWYgdGVzdCAkUkVQTEFDRV9TVEFUID0gMTsgdGhlbgotKyAgICBBQ19MSUJPQkooW3N0YXRdKQotKyAgICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc3RhdC5jLgotKyAgICBBQ19SRVFVSVJFKFtBQ19DX0lOTElORV0pCi0rICBmaQotIF0pCi1kaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc3RyZXJyb3IubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9zdHJlcnJvci5tNAotLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zdHJlcnJvci5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAotKysrIGxpYmljb252LTEuMTQvc3JjbTQvc3RyZXJyb3IubTQJMjAxMi0wMS0wOCAwMjowNzo0MC44OTA0ODQ0ODQgLTA4MDAKLUBAIC0xLDQgKzEsNCBAQAotLSMgc3RyZXJyb3IubTQgc2VyaWFsIDE2Ci0rIyBzdHJlcnJvci5tNCBzZXJpYWwgOQotIGRubCBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDctMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLUBAIC02LDczICs2LDYzIEBAIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG8KLSAKLSBBQ19ERUZVTihbZ2xfRlVOQ19TVFJFUlJPUl0sCi0gWwotKyAgQUNfUkVRVUlSRShbZ2xfRlVOQ19TVFJFUlJPUl9TRVBBUkFURV0pCi0rICBpZiB0ZXN0ICRSRVBMQUNFX1NUUkVSUk9SID0gMTsgdGhlbgotKyAgICBBQ19MSUJPQkooW3N0cmVycm9yXSkKLSsgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtSRVBMQUNFX1NUUkVSUk9SXSwgWyRSRVBMQUNFX1NUUkVSUk9SXSwKLSsgICAgICBbRGVmaW5lIHRoaXMgdG8gMSBpZiBzdHJlcnJvciBpcyBicm9rZW4uXSkKLSsgIGZpCi0rXSkKLSsKLSsjIExpa2UgZ2xfRlVOQ19TVFJFUlJPUiwgZXhjZXB0IHByZXBhcmUgZm9yIHNlcGFyYXRlIGNvbXBpbGF0aW9uIChubyBBQ19MSUJPQkopLgotK0FDX0RFRlVOKFtnbF9GVU5DX1NUUkVSUk9SX1NFUEFSQVRFXSwKLStbCi0gICBBQ19SRVFVSVJFKFtnbF9IRUFERVJfU1RSSU5HX0hfREVGQVVMVFNdKQotICAgQUNfUkVRVUlSRShbZ2xfSEVBREVSX0VSUk5PX0hdKQotLSAgQUNfUkVRVUlSRShbZ2xfRlVOQ19TVFJFUlJPUl8wXSkKLS0gIG00X2lmZGVmKFtnbF9GVU5DX1NUUkVSUk9SX1JfV09SS1NdLCBbCi0tICAgIEFDX1JFUVVJUkUoW2dsX0ZVTkNfU1RSRVJST1JfUl9XT1JLU10pCi0tICBdKQotLSAgaWYgdGVzdCAiJEVSUk5PX0g6JFJFUExBQ0VfU1RSRVJST1JfMCIgPSA6MDsgdGhlbgotKyAgaWYgdGVzdCAteiAiJEVSUk5PX0giOyB0aGVuCi0gICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igd29ya2luZyBzdHJlcnJvciBmdW5jdGlvbl0sCi0gICAgICBbZ2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yXSwKLSAgICAgIFtBQ19SVU5fSUZFTFNFKAotICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKLSAgICAgICAgICAgIFtbI2luY2x1ZGUgPHN0cmluZy5oPgotICAgICAgICAgICAgXV0sCi0tICAgICAgICAgICBbW2lmICghKnN0cmVycm9yICgtMikpIHJldHVybiAxO11dKV0sCi0rICAgICAgICAgICBbW3JldHVybiAhKnN0cmVycm9yICgtMik7XV0pXSwKLSAgICAgICAgIFtnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3I9eWVzXSwKLSAgICAgICAgIFtnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3I9bm9dLAotLSAgICAgICAgW2RubCBCZSBwZXNzaW1pc3RpYyBvbiBjcm9zcy1jb21waWxlcyBmb3Igbm93LgotLSAgICAgICAgIGdsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvcj0iZ3Vlc3Npbmcgbm8iXSkKLSsgICAgICAgIFtkbmwgQXNzdW1lIGNyb3NzYnVpbGQgd29ya3MgaWYgaXQgY29tcGlsZXMuCi0rICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoCi0rICAgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAotKyAgICAgICAgICAgICAgW1sjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rICAgICAgICAgICAgICBdXSwKLSsgICAgICAgICAgICAgIFtbcmV0dXJuICEqc3RyZXJyb3IgKC0yKTtdXSldLAotKyAgICAgICAgICAgW2dsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvcj15ZXNdLAotKyAgICAgICAgICAgW2dsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvcj1ub10pCi0rICAgICAgXSkKLSAgICAgXSkKLS0gICAgaWYgdGVzdCAiJGdsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvciIgIT0geWVzOyB0aGVuCi0rICAgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvciA9IG5vOyB0aGVuCi0gICAgICAgZG5sIFRoZSBzeXN0ZW0ncyBzdHJlcnJvcigpIGZhaWxzIHRvIHJldHVybiBhIHN0cmluZyBmb3Igb3V0LW9mLXJhbmdlCi0gICAgICAgZG5sIGludGVnZXJzLiBSZXBsYWNlIGl0LgotICAgICAgIFJFUExBQ0VfU1RSRVJST1I9MQotICAgICBmaQotLSAgICBtNF9pZmRlZihbZ2xfRlVOQ19TVFJFUlJPUl9SX1dPUktTXSwgWwotLSAgICAgIGRubCBJZiB0aGUgc3lzdGVtJ3Mgc3RyZXJyb3JfciBvciBfX3hwZ19zdHJlcnJvcl9yIGNsb2JiZXJzIHN0cmVycm9yJ3MKLS0gICAgICBkbmwgYnVmZmVyLCB3ZSBtdXN0IHJlcGxhY2Ugc3RyZXJyb3IuCi0tICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfc3RyZXJyb3Jfcl93b3JrcyIgaW4KLS0gICAgICAgICpubykgUkVQTEFDRV9TVFJFUlJPUj0xIDs7Ci0tICAgICAgZXNhYwotLSAgICBdKQotICAgZWxzZQotICAgICBkbmwgVGhlIHN5c3RlbSdzIHN0cmVycm9yKCkgY2Fubm90IGtub3cgYWJvdXQgdGhlIG5ldyBlcnJubyB2YWx1ZXMgd2UgYWRkCi0tICAgIGRubCB0byA8ZXJybm8uaD4sIG9yIGFueSBmaXggZm9yIHN0cmVycm9yKDApLiBSZXBsYWNlIGl0LgotKyAgICBkbmwgdG8gPGVycm5vLmg+LiBSZXBsYWNlIGl0LgotICAgICBSRVBMQUNFX1NUUkVSUk9SPTEKLSAgIGZpCi0rICBpZiB0ZXN0ICRSRVBMQUNFX1NUUkVSUk9SID0gMTsgdGhlbgotKyAgICBnbF9QUkVSRVFfU1RSRVJST1IKLSsgIGZpCi0gXSkKLSAKLS1kbmwgRGV0ZWN0IGlmIHN0cmVycm9yKDApIHBhc3NlcyAodGhhdCBpcywgZG9lcyBub3Qgc2V0IGVycm5vLCBhbmQgZG9lcyBub3QKLS1kbmwgcmV0dXJuIGEgc3RyaW5nIHRoYXQgbWF0Y2hlcyBzdHJlcnJvcigtMSkpLgotLUFDX0RFRlVOKFtnbF9GVU5DX1NUUkVSUk9SXzBdLAotLVsKLS0gIFJFUExBQ0VfU1RSRVJST1JfMD0wCi0tICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBzdHJlcnJvcigwKSBzdWNjZWVkc10sCi0tICAgW2dsX2N2X2Z1bmNfc3RyZXJyb3JfMF93b3Jrc10sCi0tICAgW0FDX1JVTl9JRkVMU0UoCi0tICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKLS0gICAgICAgICBbWyNpbmNsdWRlIDxzdHJpbmcuaD4KLS0gICAgICAgICAgICNpbmNsdWRlIDxlcnJuby5oPgotLSAgICAgICAgIF1dLAotLSAgICAgICAgIFtbaW50IHJlc3VsdCA9IDA7Ci0tICAgICAgICAgICBjaGFyICpzdHI7Ci0tICAgICAgICAgICBlcnJubyA9IDA7Ci0tICAgICAgICAgICBzdHIgPSBzdHJlcnJvciAoMCk7Ci0tICAgICAgICAgICBpZiAoISpzdHIpIHJlc3VsdCB8PSAxOwotLSAgICAgICAgICAgaWYgKGVycm5vKSByZXN1bHQgfD0gMjsKLS0gICAgICAgICAgIGlmIChzdHJzdHIgKHN0ciwgIm5rbm93biIpIHx8IHN0cnN0ciAoc3RyLCAibmRlZmluZWQiKSkKLS0gICAgICAgICAgICAgcmVzdWx0IHw9IDQ7Ci0tICAgICAgICAgICByZXR1cm4gcmVzdWx0O11dKV0sCi0tICAgICAgW2dsX2N2X2Z1bmNfc3RyZXJyb3JfMF93b3Jrcz15ZXNdLAotLSAgICAgIFtnbF9jdl9mdW5jX3N0cmVycm9yXzBfd29ya3M9bm9dLAotLSAgICAgIFtkbmwgQmUgcGVzc2ltaXN0aWMgb24gY3Jvc3MtY29tcGlsZXMgZm9yIG5vdy4KLS0gICAgICAgZ2xfY3ZfZnVuY19zdHJlcnJvcl8wX3dvcmtzPSJndWVzc2luZyBubyJdKQotLSAgXSkKLS0gIGlmIHRlc3QgIiRnbF9jdl9mdW5jX3N0cmVycm9yXzBfd29ya3MiICE9IHllczsgdGhlbgotLSAgICBSRVBMQUNFX1NUUkVSUk9SXzA9MQotLSAgICBBQ19ERUZJTkUoW1JFUExBQ0VfU1RSRVJST1JfMF0sIFsxXSwgW0RlZmluZSB0byAxIGlmIHN0cmVycm9yKDApCi0tICAgICAgZG9lcyBub3QgcmV0dXJuIGEgbWVzc2FnZSBpbXBseWluZyBzdWNjZXNzLl0pCi0rIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9zdHJlcnJvci5jLgotK0FDX0RFRlVOKFtnbF9QUkVSRVFfU1RSRVJST1JdLCBbCi0rICBBQ19DSEVDS19ERUNMUyhbc3RyZXJyb3JdKQotKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKFtzeXMvc29ja2V0LmhdKQotKyAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaCAhPSB5ZXM7IHRoZW4KLSsgICAgZG5sIFdlIGNhbm5vdCB1c2UgQUNfQ0hFQ0tfSEVBREVSU19PTkNFIGhlcmUsIGJlY2F1c2UgdGhhdCB3b3VsZCBtYWtlCi0rICAgIGRubCB0aGUgY2hlY2sgZm9yIHRob3NlIGhlYWRlcnMgdW5jb25kaXRpb25hbDsgeWV0IGN5Z3dpbiByZXBvcnRzCi0rICAgIGRubCB0aGF0IHRoZSBoZWFkZXJzIGFyZSBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQgKHNpbmNlIG9uCi0rICAgIGRubCBjeWd3aW4sIGFsbCBzb2NrZXQgaW5mb3JtYXRpb24gc2hvdWxkIGNvbWUgZnJvbSBzeXMvc29ja2V0LmgpLgotKyAgICBBQ19DSEVDS19IRUFERVJTKFt3aW5zb2NrMi5oXSkKLSAgIGZpCi0gXSkKLWRpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zdHJpbmdfaC5tNCBsaWJpY29udi0xLjE0L3NyY200L3N0cmluZ19oLm00Ci0tLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3N0cmluZ19oLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCi0rKysgbGliaWNvbnYtMS4xNC9zcmNtNC9zdHJpbmdfaC5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjg5NDQ4NDQ4NSAtMDgwMAotQEAgLTUsNyArNSw3IEBACi0gIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotIAotLSMgc2VyaWFsIDIxCi0rIyBzZXJpYWwgMjAKLSAKLSAjIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQuCi0gCi1AQCAtMjcsOSArMjcsOSBAQCBBQ19ERUZVTihbZ2xfSEVBREVSX1NUUklOR19IX0JPRFldLAotICAgZG5sIGd1YXJhbnRlZWQgYnkgQzg5LgotICAgZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRShbWyNpbmNsdWRlIDxzdHJpbmcuaD4KLSAgICAgXV0sCi0tICAgIFtmZnNsIGZmc2xsIG1lbW1lbSBtZW1wY3B5IG1lbXJjaHIgcmF3bWVtY2hyIHN0cGNweSBzdHBuY3B5IHN0cmNocm51bAotLSAgICAgc3RyZHVwIHN0cm5jYXQgc3RybmR1cCBzdHJubGVuIHN0cnBicmsgc3Ryc2VwIHN0cmNhc2VzdHIgc3RydG9rX3IKLS0gICAgIHN0cmVycm9yX3Igc3Ryc2lnbmFsIHN0cnZlcnNjbXBdKQotKyAgICBbbWVtbWVtIG1lbXBjcHkgbWVtcmNociByYXdtZW1jaHIgc3RwY3B5IHN0cG5jcHkgc3RyY2hybnVsIHN0cmR1cAotKyAgICAgc3RybmNhdCBzdHJuZHVwIHN0cm5sZW4gc3RycGJyayBzdHJzZXAgc3RyY2FzZXN0ciBzdHJ0b2tfciBzdHJlcnJvcl9yCi0rICAgICBzdHJzaWduYWwgc3RydmVyc2NtcF0pCi0gXSkKLSAKLSBBQ19ERUZVTihbZ2xfU1RSSU5HX01PRFVMRV9JTkRJQ0FUT1JdLAotQEAgLTQzLDggKzQzLDYgQEAgQUNfREVGVU4oW2dsX1NUUklOR19NT0RVTEVfSU5ESUNBVE9SXSwKLSAKLSBBQ19ERUZVTihbZ2xfSEVBREVSX1NUUklOR19IX0RFRkFVTFRTXSwKLSBbCi0tICBHTlVMSUJfRkZTTD0wOyAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9GRlNMXSkKLS0gIEdOVUxJQl9GRlNMTD0wOyAgICAgICBBQ19TVUJTVChbR05VTElCX0ZGU0xMXSkKLSAgIEdOVUxJQl9NRU1DSFI9MDsgICAgICBBQ19TVUJTVChbR05VTElCX01FTUNIUl0pCi0gICBHTlVMSUJfTUVNTUVNPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9NRU1NRU1dKQotICAgR05VTElCX01FTVBDUFk9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfTUVNUENQWV0pCi1AQCAtODIsOCArODAsNiBAQCBBQ19ERUZVTihbZ2xfSEVBREVSX1NUUklOR19IX0RFRkFVTFRTXSwKLSAgIEdOVUxJQl9TVFJWRVJTQ01QPTA7ICBBQ19TVUJTVChbR05VTElCX1NUUlZFUlNDTVBdKQotICAgSEFWRV9NQlNMRU49MDsgICAgICAgIEFDX1NVQlNUKFtIQVZFX01CU0xFTl0pCi0gICBkbmwgQXNzdW1lIHByb3BlciBHTlUgYmVoYXZpb3IgdW5sZXNzIGFub3RoZXIgbW9kdWxlIHNheXMgb3RoZXJ3aXNlLgotLSAgSEFWRV9GRlNMPTE7ICAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfRkZTTF0pCi0tICBIQVZFX0ZGU0xMPTE7ICAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9GRlNMTF0pCi0gICBIQVZFX01FTUNIUj0xOyAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9NRU1DSFJdKQotICAgSEFWRV9ERUNMX01FTU1FTT0xOyAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9NRU1NRU1dKQotICAgSEFWRV9NRU1QQ1BZPTE7ICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfTUVNUENQWV0pCi1kaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc3lzX3NvY2tldF9oLm00IGxpYmljb252LTEuMTQvc3JjbTQvc3lzX3NvY2tldF9oLm00Ci0tLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3N5c19zb2NrZXRfaC5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAotKysrIGxpYmljb252LTEuMTQvc3JjbTQvc3lzX3NvY2tldF9oLm00CTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCi1AQCAtMSwxNzcgKzAsMCBAQAotLSMgc3lzX3NvY2tldF9oLm00IHNlcmlhbCAyMgotLWRubCBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLS1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLS1kbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLS1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotLQotLWRubCBGcm9tIFNpbW9uIEpvc2Vmc3Nvbi4KLS0KLS1BQ19ERUZVTihbZ2xfSEVBREVSX1NZU19TT0NLRVRdLAotLVsKLS0gIEFDX1JFUVVJUkUoW2dsX1NZU19TT0NLRVRfSF9ERUZBVUxUU10pCi0tICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCi0tICBBQ19SRVFVSVJFKFtBQ19DX0lOTElORV0pCi0tCi0tICBkbmwgT24gT1NGLzEsIHRoZSBmdW5jdGlvbnMgcmVjdigpLCBzZW5kKCksIHJlY3Zmcm9tKCksIHNlbmR0bygpIGhhdmUKLS0gIGRubCBvbGQtc3R5bGUgZGVjbGFyYXRpb25zICh3aXRoIHJldHVybiB0eXBlICdpbnQnIGluc3RlYWQgb2YgJ3NzaXplX3QnKQotLSAgZG5sIHVubGVzcyBfUE9TSVhfUElJX1NPQ0tFVCBpcyBkZWZpbmVkLgotLSAgY2FzZSAiJGhvc3Rfb3MiIGluCi0tICAgIG9zZiopCi0tICAgICAgQUNfREVGSU5FKFtfUE9TSVhfUElJX1NPQ0tFVF0sIFsxXSwKLS0gICAgICAgIFtEZWZpbmUgdG8gMSBpbiBvcmRlciB0byBnZXQgdGhlIFBPU0lYIGNvbXBhdGlibGUgZGVjbGFyYXRpb25zCi0tICAgICAgICAgb2Ygc29ja2V0IGZ1bmN0aW9ucy5dKQotLSAgICAgIDs7Ci0tICBlc2FjCi0tCi0tICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciA8c3lzL3NvY2tldC5oPiBpcyBzZWxmLWNvbnRhaW5lZF0sCi0tICAgIFtnbF9jdl9oZWFkZXJfc3lzX3NvY2tldF9oX3NlbGZjb250YWluZWRdLAotLSAgICBbCi0tICAgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+XV0sIFtbXV0pXSwKLS0gICAgICAgIFtnbF9jdl9oZWFkZXJfc3lzX3NvY2tldF9oX3NlbGZjb250YWluZWQ9eWVzXSwKLS0gICAgICAgIFtnbF9jdl9oZWFkZXJfc3lzX3NvY2tldF9oX3NlbGZjb250YWluZWQ9bm9dKQotLSAgICBdKQotLSAgaWYgdGVzdCAkZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zZWxmY29udGFpbmVkID0geWVzOyB0aGVuCi0tICAgIGRubCBJZiB0aGUgc2h1dGRvd24gZnVuY3Rpb24gZXhpc3RzLCA8c3lzL3NvY2tldC5oPiBzaG91bGQgZGVmaW5lCi0tICAgIGRubCBTSFVUX1JELCBTSFVUX1dSLCBTSFVUX1JEV1IuCi0tICAgIEFDX0NIRUNLX0ZVTkNTKFtzaHV0ZG93bl0pCi0tICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc2h1dGRvd24gPSB5ZXM7IHRoZW4KLS0gICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciA8c3lzL3NvY2tldC5oPiBkZWZpbmVzIHRoZSBTSFVUXyogbWFjcm9zXSwKLS0gICAgICAgIFtnbF9jdl9oZWFkZXJfc3lzX3NvY2tldF9oX3NodXRdLAotLSAgICAgICAgWwotLSAgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKLS0gICAgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD5dXSwKLS0gICAgICAgICAgICAgICBbW2ludCBhW10gPSB7IFNIVVRfUkQsIFNIVVRfV1IsIFNIVVRfUkRXUiB9O11dKV0sCi0tICAgICAgICAgICAgW2dsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2h1dD15ZXNdLAotLSAgICAgICAgICAgIFtnbF9jdl9oZWFkZXJfc3lzX3NvY2tldF9oX3NodXQ9bm9dKQotLSAgICAgICAgXSkKLS0gICAgICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfc3lzX3NvY2tldF9oX3NodXQgPSBubzsgdGhlbgotLSAgICAgICAgU1lTX1NPQ0tFVF9IPSdzeXMvc29ja2V0LmgnCi0tICAgICAgZmkKLS0gICAgZmkKLS0gIGZpCi0tICAjIFdlIG5lZWQgdG8gY2hlY2sgZm9yIHdzMnRjcGlwLmggbm93LgotLSAgZ2xfUFJFUkVRX1NZU19IX1NPQ0tFVAotLSAgQUNfQ0hFQ0tfVFlQRVMoW3N0cnVjdCBzb2NrYWRkcl9zdG9yYWdlLCBzYV9mYW1pbHlfdF0sLCxbCi0tICAvKiBzeXMvdHlwZXMuaCBpcyBub3QgbmVlZGVkIGFjY29yZGluZyB0byBQT1NJWCwgYnV0IHRoZQotLSAgICAgc3lzL3NvY2tldC5oIGluIGkzODYtdW5rbm93bi1mcmVlYnNkNC4xMCBhbmQKLS0gICAgIHBvd2VycGMtYXBwbGUtZGFyd2luNS41IHJlcXVpcmVkIGl0LiAqLwotLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLS0jaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKLS0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotLSNlbmRpZgotLSNpZmRlZiBIQVZFX1dTMlRDUElQX0gKLS0jaW5jbHVkZSA8d3MydGNwaXAuaD4KLS0jZW5kaWYKLS1dKQotLSAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZSA9IG5vOyB0aGVuCi0tICAgIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0U9MAotLSAgZmkKLS0gIGlmIHRlc3QgJGFjX2N2X3R5cGVfc2FfZmFtaWx5X3QgPSBubzsgdGhlbgotLSAgICBIQVZFX1NBX0ZBTUlMWV9UPTAKLS0gIGZpCi0tICBpZiB0ZXN0ICRhY19jdl90eXBlX3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlICE9IG5vOyB0aGVuCi0tICAgIEFDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBzb2NrYWRkcl9zdG9yYWdlLnNzX2ZhbWlseV0sCi0tICAgICAgW10sCi0tICAgICAgW0hBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfU1NfRkFNSUxZPTBdLAotLSAgICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0tICAgICAgICNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAotLSAgICAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotLSAgICAgICAjZW5kaWYKLS0gICAgICAgI2lmZGVmIEhBVkVfV1MyVENQSVBfSAotLSAgICAgICAjaW5jbHVkZSA8d3MydGNwaXAuaD4KLS0gICAgICAgI2VuZGlmCi0tICAgICAgXSkKLS0gIGZpCi0tICBpZiB0ZXN0ICRIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFID0gMCB8fCB0ZXN0ICRIQVZFX1NBX0ZBTUlMWV9UID0gMCBcCi0tICAgICB8fCB0ZXN0ICRIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFX1NTX0ZBTUlMWSA9IDA7IHRoZW4KLS0gICAgU1lTX1NPQ0tFVF9IPSdzeXMvc29ja2V0LmgnCi0tICBmaQotLSAgZ2xfUFJFUkVRX1NZU19IX1dJTlNPQ0syCi0tCi0tICBkbmwgQ2hlY2sgZm9yIGRlY2xhcmF0aW9ucyBvZiBhbnl0aGluZyB3ZSB3YW50IHRvIHBvaXNvbiBpZiB0aGUKLS0gIGRubCBjb3JyZXNwb25kaW5nIGdudWxpYiBtb2R1bGUgaXMgbm90IGluIHVzZS4KLS0gIGdsX1dBUk5fT05fVVNFX1BSRVBBUkUoW1sKLS0vKiBTb21lIHN5c3RlbXMgcmVxdWlyZSBwcmVyZXF1aXNpdGUgaGVhZGVycy4gICovCi0tI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0tICAgIF1dLCBbc29ja2V0IGNvbm5lY3QgYWNjZXB0IGJpbmQgZ2V0cGVlcm5hbWUgZ2V0c29ja25hbWUgZ2V0c29ja29wdAotLSAgICBsaXN0ZW4gcmVjdiBzZW5kIHJlY3Zmcm9tIHNlbmR0byBzZXRzb2Nrb3B0IHNodXRkb3duIGFjY2VwdDRdKQotLV0pCi0tCi0tQUNfREVGVU4oW2dsX1BSRVJFUV9TWVNfSF9TT0NLRVRdLAotLVsKLS0gIGRubCBDaGVjayBwcmVyZXF1aXNpdGVzIG9mIHRoZSA8c3lzL3NvY2tldC5oPiByZXBsYWNlbWVudC4KLS0gIEFDX1JFUVVJUkUoW2dsX0NIRUNLX1NPQ0tFVF9IRUFERVJTXSkKLS0gIGdsX0NIRUNLX05FWFRfSEVBREVSUyhbc3lzL3NvY2tldC5oXSkKLS0gIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfc29ja2V0X2ggPSB5ZXM7IHRoZW4KLS0gICAgSEFWRV9TWVNfU09DS0VUX0g9MQotLSAgICBIQVZFX1dTMlRDUElQX0g9MAotLSAgZWxzZQotLSAgICBIQVZFX1NZU19TT0NLRVRfSD0wCi0tICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl93czJ0Y3BpcF9oID0geWVzOyB0aGVuCi0tICAgICAgSEFWRV9XUzJUQ1BJUF9IPTEKLS0gICAgZWxzZQotLSAgICAgIEhBVkVfV1MyVENQSVBfSD0wCi0tICAgIGZpCi0tICBmaQotLSAgQUNfU1VCU1QoW0hBVkVfU1lTX1NPQ0tFVF9IXSkKLS0gIEFDX1NVQlNUKFtIQVZFX1dTMlRDUElQX0hdKQotLV0pCi0tCi0tIyBDb21tb24gcHJlcmVxdWlzaXRlcyBvZiB0aGUgPHN5cy9zb2NrZXQuaD4gcmVwbGFjZW1lbnQgYW5kIG9mIHRoZQotLSMgPHN5cy9zZWxlY3QuaD4gcmVwbGFjZW1lbnQuCi0tIyBTZXRzIGFuZCBzdWJzdGl0dXRlcyBIQVZFX1dJTlNPQ0syX0guCi0tQUNfREVGVU4oW2dsX1BSRVJFUV9TWVNfSF9XSU5TT0NLMl0sCi0tWwotLSAgbTRfaWZkZWYoW2dsX1VOSVNURF9IX0RFRkFVTFRTXSwgW0FDX1JFUVVJUkUoW2dsX1VOSVNURF9IX0RFRkFVTFRTXSldKQotLSAgbTRfaWZkZWYoW2dsX1NZU19JT0NUTF9IX0RFRkFVTFRTXSwgW0FDX1JFUVVJUkUoW2dsX1NZU19JT0NUTF9IX0RFRkFVTFRTXSldKQotLSAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKFtzeXMvc29ja2V0LmhdKQotLSAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaCAhPSB5ZXM7IHRoZW4KLS0gICAgZG5sIFdlIGNhbm5vdCB1c2UgQUNfQ0hFQ0tfSEVBREVSU19PTkNFIGhlcmUsIGJlY2F1c2UgdGhhdCB3b3VsZCBtYWtlCi0tICAgIGRubCB0aGUgY2hlY2sgZm9yIHRob3NlIGhlYWRlcnMgdW5jb25kaXRpb25hbDsgeWV0IGN5Z3dpbiByZXBvcnRzCi0tICAgIGRubCB0aGF0IHRoZSBoZWFkZXJzIGFyZSBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQgKHNpbmNlIG9uCi0tICAgIGRubCBjeWd3aW4sIGFsbCBzb2NrZXQgaW5mb3JtYXRpb24gc2hvdWxkIGNvbWUgZnJvbSBzeXMvc29ja2V0LmgpLgotLSAgICBBQ19DSEVDS19IRUFERVJTKFt3aW5zb2NrMi5oXSkKLS0gIGZpCi0tICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2giID0geWVzOyB0aGVuCi0tICAgIEhBVkVfV0lOU09DSzJfSD0xCi0tICAgIFVOSVNURF9IX0hBVkVfV0lOU09DSzJfSD0xCi0tICAgIFNZU19JT0NUTF9IX0hBVkVfV0lOU09DSzJfSD0xCi0tICBlbHNlCi0tICAgIEhBVkVfV0lOU09DSzJfSD0wCi0tICBmaQotLSAgQUNfU1VCU1QoW0hBVkVfV0lOU09DSzJfSF0pCi0tXSkKLS0KLS1BQ19ERUZVTihbZ2xfU1lTX1NPQ0tFVF9NT0RVTEVfSU5ESUNBVE9SXSwKLS1bCi0tICBkbmwgVXNlIEFDX1JFUVVJUkUgaGVyZSwgc28gdGhhdCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhcmUgZXhwYW5kZWQgb25jZSBvbmx5LgotLSAgQUNfUkVRVUlSRShbZ2xfU1lTX1NPQ0tFVF9IX0RFRkFVTFRTXSkKLS0gIGdsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFKFskMV0pCi0tICBkbmwgRGVmaW5lIGl0IGFsc28gYXMgYSBDIG1hY3JvLCBmb3IgdGhlIGJlbmVmaXQgb2YgdGhlIHVuaXQgdGVzdHMuCi0tICBnbF9NT0RVTEVfSU5ESUNBVE9SX0ZPUl9URVNUUyhbJDFdKQotLV0pCi0tCi0tQUNfREVGVU4oW2dsX1NZU19TT0NLRVRfSF9ERUZBVUxUU10sCi0tWwotLSAgR05VTElCX1NPQ0tFVD0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfU09DS0VUXSkKLS0gIEdOVUxJQl9DT05ORUNUPTA7ICAgICBBQ19TVUJTVChbR05VTElCX0NPTk5FQ1RdKQotLSAgR05VTElCX0FDQ0VQVD0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfQUNDRVBUXSkKLS0gIEdOVUxJQl9CSU5EPTA7ICAgICAgICBBQ19TVUJTVChbR05VTElCX0JJTkRdKQotLSAgR05VTElCX0dFVFBFRVJOQU1FPTA7IEFDX1NVQlNUKFtHTlVMSUJfR0VUUEVFUk5BTUVdKQotLSAgR05VTElCX0dFVFNPQ0tOQU1FPTA7IEFDX1NVQlNUKFtHTlVMSUJfR0VUU09DS05BTUVdKQotLSAgR05VTElCX0dFVFNPQ0tPUFQ9MDsgIEFDX1NVQlNUKFtHTlVMSUJfR0VUU09DS09QVF0pCi0tICBHTlVMSUJfTElTVEVOPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9MSVNURU5dKQotLSAgR05VTElCX1JFQ1Y9MDsgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfUkVDVl0pCi0tICBHTlVMSUJfU0VORD0wOyAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TRU5EXSkKLS0gIEdOVUxJQl9SRUNWRlJPTT0wOyAgICBBQ19TVUJTVChbR05VTElCX1JFQ1ZGUk9NXSkKLS0gIEdOVUxJQl9TRU5EVE89MDsgICAgICBBQ19TVUJTVChbR05VTElCX1NFTkRUT10pCi0tICBHTlVMSUJfU0VUU09DS09QVD0wOyAgQUNfU1VCU1QoW0dOVUxJQl9TRVRTT0NLT1BUXSkKLS0gIEdOVUxJQl9TSFVURE9XTj0wOyAgICBBQ19TVUJTVChbR05VTElCX1NIVVRET1dOXSkKLS0gIEdOVUxJQl9BQ0NFUFQ0PTA7ICAgICBBQ19TVUJTVChbR05VTElCX0FDQ0VQVDRdKQotLSAgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRT0xOyBBQ19TVUJTVChbSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRV0pCi0tICBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFX1NTX0ZBTUlMWT0xOwotLSAgICAgICAgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFX1NTX0ZBTUlMWV0pCi0tICBIQVZFX1NBX0ZBTUlMWV9UPTE7ICAgQUNfU1VCU1QoW0hBVkVfU0FfRkFNSUxZX1RdKQotLSAgSEFWRV9BQ0NFUFQ0PTE7ICAgICAgIEFDX1NVQlNUKFtIQVZFX0FDQ0VQVDRdKQotLV0pCi1kaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvd2Fybi1vbi11c2UubTQgbGliaWNvbnYtMS4xNC9zcmNtNC93YXJuLW9uLXVzZS5tNAotLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC93YXJuLW9uLXVzZS5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAotKysrIGxpYmljb252LTEuMTQvc3JjbTQvd2Fybi1vbi11c2UubTQJMjAxMi0wMS0wOCAwMjowNzo0MC45MzQ0ODQ0ODcgLTA4MDAKLUBAIC0xLDQgKzEsNCBAQAotLSMgd2Fybi1vbi11c2UubTQgc2VyaWFsIDQKLSsjIHdhcm4tb24tdXNlLm00IHNlcmlhbCAyCi0gZG5sIENvcHlyaWdodCAoQykgMjAxMC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotQEAgLTI3LDggKzI3LDYgQEAgQUNfREVGVU4oW2dsX1dBUk5fT05fVVNFX1BSRVBBUkVdLAotICAgICBbQUhfVEVNUExBVEUoW0hBVkVfUkFXX0RFQ0xfXUFTX1RSX0NQUChtNF9kZWZuKFtnbF9kZWNsXSkpLAotICAgICAgIFtEZWZpbmUgdG8gMSBpZiBdbTRfZGVmbihbZ2xfZGVjbF0pWyBpcyBkZWNsYXJlZCBldmVuIGFmdGVyCi0gICAgICAgIHVuZGVmaW5pbmcgbWFjcm9zLl0pXSlkbmwKLS1kbmwgRklYTUU6IGdsX1N5bWJvbCBtdXN0IGJlIHVzZWQgdW5xdW90ZWQgdW50aWwgd2UgY2FuIGFzc3VtZQotLWRubCBhdXRvY29uZiAyLjY0IG9yIG5ld2VyLgotICAgZm9yIGdsX2Z1bmMgaW4gbTRfZmxhdHRlbihbJDJdKTsgZG8KLSAgICAgQVNfVkFSX1BVU0hERUYoW2dsX1N5bWJvbF0sIFtnbF9jdl9oYXZlX3Jhd19kZWNsXyRnbF9mdW5jXSlkbmwKLSAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvXSwKLUBAIC0zNyw4ICszNSw4IEBAIGRubCBhdXRvY29uZiAyLjY0IG9yIG5ld2VyLgotIFtAJTpAdW5kZWYgJGdsX2Z1bmMKLSAgICh2b2lkKSAkZ2xfZnVuYztdKV0sCi0gICAgICAgICBbQVNfVkFSX1NFVChnbF9TeW1ib2wsIFt5ZXNdKV0sIFtBU19WQVJfU0VUKGdsX1N5bWJvbCwgW25vXSldKV0pCi0tICAgIEFTX1ZBUl9JRihnbF9TeW1ib2wsIFt5ZXNdLAotLSAgICAgIFtBQ19ERUZJTkVfVU5RVU9URUQoQVNfVFJfQ1BQKFtIQVZFX1JBV19ERUNMXyRnbF9mdW5jXSksIFsxXSkKLSsgICAgIEFTX1ZBUl9JRihnbF9TeW1ib2wsIFt5ZXNdLAotKyAgICAgICBbQUNfREVGSU5FX1VOUVVPVEVEKEFTX1RSX0NQUChbSEFWRV9SQVdfREVDTF8kZ2xfZnVuY10pLCBbMV0pCi0gICAgICAgIGRubCBzaG9ydGN1dCAtIGlmIHRoZSByYXcgZGVjbGFyYXRpb24gZXhpc3RzLCB0aGVuIHNldCBhIGNhY2hlCi0gICAgICAgIGRubCB2YXJpYWJsZSB0byBhbGxvdyBza2lwcGluZyBhbnkgbGF0ZXIgQUNfQ0hFQ0tfREVDTCBlZmZvcnRzCi0gICAgICAgIGV2YWwgYWNfY3ZfaGF2ZV9kZWNsXyRnbF9mdW5jPXllc10pCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xNC9hdXRvY29uZi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udi0xLjE0L2F1dG9jb25mLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDM0Y2U3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udi0xLjE0L2F1dG9jb25mLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotSXQgYWRkcyB0aGUgdmFyaWFibGVzIHRoYXQgYXJlIG5lZWRlZAotZm9yIGF1dG9jb25mIDIuNjUgdG8gcmVjb25maWd1cmUgbGliaWNvbnYgYW5kIGRlbGV0ZSB0aGUgbTQgbWFjcm9zCi1kaXJlY3RvcnkuIEl0cyBpbXBvcnRlZCBmcm9tIE9FLgotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLQotSW5kZXg6IGxpYmljb252LTEuMTMuMS9jb25maWd1cmUuYWMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBsaWJpY29udi0xLjEzLjEub3JpZy9jb25maWd1cmUuYWMKLSsrKyBsaWJpY29udi0xLjEzLjEvY29uZmlndXJlLmFjCi1AQCAtMjMsNyArMjMsNyBAQCBBQ19DT05GSUdfQVVYX0RJUihbYnVpbGQtYXV4XSkKLSBBTV9JTklUX0FVVE9NQUtFKFtsaWJpY29udl0sIFsxLjEzLjFdKQotIEFDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaCBsaWIvY29uZmlnLmhdKQotIEFDX1BST0dfTUFLRV9TRVQKLS0KLStBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCi0gZG5sICAgICAgICAgICBjaGVja3MgZm9yIGJhc2ljIHByb2dyYW1zCi0gCi0gQUNfUFJPR19DQwotSW5kZXg6IGxpYmljb252LTEuMTMuMS9saWJjaGFyc2V0L2NvbmZpZ3VyZS5hYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGxpYmljb252LTEuMTMuMS5vcmlnL2xpYmNoYXJzZXQvY29uZmlndXJlLmFjCi0rKysgbGliaWNvbnYtMS4xMy4xL2xpYmNoYXJzZXQvY29uZmlndXJlLmFjCi1AQCAtMTYsMTcgKzE2LDE3IEBAIGRubCBhbG9uZyB3aXRoIHRoZSBHTlUgQ0hBUlNFVCBMaWJyYXJ5OwotIGRubCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsCi0gZG5sIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAKLS1BQ19QUkVSRVEoWzIuMTNdKQotK0FDX1BSRVJFUSgyLjYxKQotK0FDX0lOSVQoW2xpYmNoYXJzZXRdLFsxLjRdICkKLStBQ19DT05GSUdfU1JDRElSKFtsaWIvbG9jYWxjaGFyc2V0LmNdKQotIAotLVBBQ0tBR0U9bGliY2hhcnNldAotLVZFUlNJT049MS40Ci0tCi0tQUNfSU5JVChbbGliL2xvY2FsY2hhcnNldC5jXSkKLSBBQ19DT05GSUdfQVVYX0RJUihbYnVpbGQtYXV4XSkKLSBBQ19DT05GSUdfSEVBREVSKFtjb25maWcuaF0pCi0gQUNfUFJPR19NQUtFX1NFVAotLUFDX1NVQlNUKFtQQUNLQUdFXSkKLS1BQ19TVUJTVChbVkVSU0lPTl0pCi0rZG5sIEFDX1NVQlNUKFBBQ0tBR0UpCi0rZG5sIEFDX1NVQlNUKFZFUlNJT04pCi0rCi0rQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQotIAotIGRubCAgICAgICAgICAgY2hlY2tzIGZvciBiYXNpYyBwcm9ncmFtcwotIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252XzEuMTQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnZfMS4xNC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZkNTExNC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnZfMS4xNC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLVNVTU1BUlkgPSAiQ2hhcmFjdGVyIGVuY29kaW5nIHN1cHBvcnQgbGlicmFyeSIKLURFU0NSSVBUSU9OID0gIkdOVSBsaWJpY29udiAtIGxpYmljb252IGlzIGZvciB5b3UgaWYgeW91ciBhcHBsaWNhdGlvbiBuZWVkcyB0byBzdXBwb3J0IFwKLW11bHRpcGxlIGNoYXJhY3RlciBlbmNvZGluZ3MsIGJ1dCB0aGF0IHN1cHBvcnQgbGFja3MgZnJvbSB5b3VyIHN5c3RlbS4iCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliaWNvbnYiCi1TRUNUSU9OID0gImxpYnMiCi1OT1RFUyA9ICJOZWVkcyB0byBiZSBzdHJpcHBlZCBkb3duIHRvOiBhc2NpaSBpc284ODU5LTEgZXVjanAgaXNvLTIwMjJqcCBnYiB1dGY4IgotUFJPVklERVMgPSAidmlydHVhbC9saWJpY29udiIKLVBSID0gInIxIgotTElDRU5TRSA9ICJMR1BMdjMiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9OWY2MDRkOGE0ZjhlNzRmNGY1MTQwODQ1YTIxYjY2NzQgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliY2hhcnNldC9DT1BZSU5HLkxJQjttZDU9OWY2MDRkOGE0ZjhlNzRmNGY1MTQwODQ1YTIxYjY2NzQiCi0KLVNSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9hdXRvY29uZi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9hZGQtcmVsb2NhdGFibGUtbW9kdWxlLnBhdGNoIFwKLSAgICAgICAgICAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICJlMzQ1MDliMTYyM2NlYzQ0OWRmZWI3M2Q3Y2U5YzZjNiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI3MmIyNGRlZDE3ZDY4NzE5M2MzMzY2ZDBlYmU3Y2RlMWU2YjE4ZjBkZjhjNTU0MzhhYzk1YmUzOWU4YTMwNjEzIgotCi1TID0gIiR7V09SS0RJUn0vbGliaWNvbnYtJHtQVn0iCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0Ci0KLXB5dGhvbiBfX2Fub255bW91cygpIHsKLSAgICBpZiBkLmdldFZhcigiVEFSR0VUX09TIikgIT0gImxpbnV4IjoKLSAgICAgICAgcmV0dXJuCi0gICAgaWYgZC5nZXRWYXIoIlRDTElCQyIpID09ICJnbGliYyI6Ci0gICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJsaWJpY29udiBpcyBwcm92aWRlZCBmb3IgdXNlIHdpdGggdUNsaWJjIG9ubHkgLSBnbGliYyBhbHJlYWR5IHByb3ZpZGVzIGljb252IikKLX0KLQotRVhUUkFfT0VDT05GICs9ICItLWVuYWJsZS1zaGFyZWQgLS1lbmFibGUtc3RhdGljIC0tZW5hYmxlLXJlbG9jYXRhYmxlIgotCi1MRUFEX1NPTkFNRSA9ICJsaWJpY29udi5zbyIKLQotZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewotCXJtIC1mICR7U30vbTQvbGlidG9vbC5tNCAke1N9L200L2x0b3B0aW9ucy5tNCAke1N9L200L2x0c3VnYXIubTQgJHtTfS9tNC9sdHZlcnNpb24ubTQgJHtTfS9tNC9sdH5vYnNvbGV0ZS5tNCAke1N9L2xpYmNoYXJzZXQvbTQvbGlidG9vbC5tNCAke1N9L2xpYmNoYXJzZXQvbTQvbHRvcHRpb25zLm00ICR7U30vbGliY2hhcnNldC9tNC9sdHN1Z2FyLm00ICR7U30vbGliY2hhcnNldC9tNC9sdHZlcnNpb24ubTQgJHtTfS9saWJjaGFyc2V0L200L2x0fm9ic29sZXRlLm00Ci19Ci0KLWRvX2NvbmZpZ3VyZV9hcHBlbmQgKCkgewotICAgICAgICAjIGZvcmNpYmx5IHJlbW92ZSBSUEFUSCBmcm9tIGxpYnRvb2wKLSAgICAgICAgc2VkIC1pICdzfF5oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPS4qfGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiJ8ZycgKmxpYnRvb2wKLSAgICAgICAgc2VkIC1pICdzfF5ydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSHxydW5wYXRoX3Zhcj1fTk9fUlBBVEhffGcnICpsaWJ0b29sCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kICgpIHsKLQlybSAtcmYgJHtEfSR7bGliZGlyfS9wcmVsb2FkYWJsZV9saWJpY29udi5zbwotCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2NoYXJzZXQuYWxpYXMKLX0KLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlMi9saWJwY3JlMi1DVkUtMjAxNy03MTg2LnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZTIvbGlicGNyZTItQ1ZFLTIwMTctNzE4Ni5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmEzYmZlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZTIvbGlicGNyZTItQ1ZFLTIwMTctNzE4Ni5wYXRjaApAQCAtMCwwICsxLDk2IEBACitsaWJwY3JlMi0xMC4yMzogRml4IENWRS0yMDE3LTcxODYKKworQSBmdXp6IG9uIGxpYnBjcmUxIHRocm91Z2ggdGhlIHBjcmV0ZXN0IHV0aWxpdHkgcmV2ZWFsZWQgYW4gaW52YWxpZCByZWFkIGluIHRoZQorbGlicmFyeS4gRm9yIHdobyBpcyBpbnRlcmVzdGVkIGluIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIGJ1Zywgd2lsbAorZm9sbG93IGEgZmVlZGJhY2sgZnJvbSB1cHN0cmVhbToKKworVGhpcyB3YXMgYSBnZW51aW5lIGJ1ZyBpbiB0aGUgMzItYml0IGxpYnJhcnkuIFRoYW5rcyBmb3IgZmluZGluZyBpdC4gVGhlIGNyYXNoCit3YXMgY2F1c2VkIGJ5IHRyeWluZyB0byBmaW5kIGEgVW5pY29kZSBwcm9wZXJ0eSBmb3IgYSBjb2RlIHZhbHVlIGdyZWF0ZXIgdGhhbgorMHgxMGZmZmYsIHRoZSBVbmljb2RlIG1heGltdW0sIHdoZW4gcnVubmluZyBpbiBub24tVVRGIG1vZGUgKHdoZXJlIGNoYXJhY3RlcgordmFsdWVzIGNhbiBiZSB1cCB0byAweGZmZmZmZmZmKS4KKworVGhlIGNvbXBsZXRlIEFTYW4gb3V0cHV0OgorCisjIHBjcmV0ZXN0IC0zMiAtZCAkRklMRQorPT0xNDc4OD09RVJST1I6IEFkZHJlc3NTYW5pdGl6ZXI6IFNFR1Ygb24gdW5rbm93biBhZGRyZXNzIDB4N2YxYmJmZmVkNGRmIChwYyAweDdmMWJiZWUzZmU2YiBicCAweDdmZmY4YjUwZDhjMCBzcCAweDdmZmY4YjUwZDNhMCBUMCkKKz09MTQ3ODg9PVRoZSBzaWduYWwgaXMgY2F1c2VkIGJ5IGEgUkVBRCBtZW1vcnkgYWNjZXNzLgorICAgICMwIDB4N2YxYmJlZTNmZTZhIGluIG1hdGNoIC90bXAvcG9ydGFnZS9kZXYtbGlicy9saWJwY3JlLTguNDAvd29yay9wY3JlLTguNDAvcGNyZV9leGVjLmM6NTQ3MzoxOAorICAgICMxIDB4N2YxYmJlZTA5MjI2IGluIHBjcmUzMl9leGVjIC90bXAvcG9ydGFnZS9kZXYtbGlicy9saWJwY3JlLTguNDAvd29yay9wY3JlLTguNDAvcGNyZV9leGVjLmM6NjkzNjo4CisgICAgIzIgMHg1MjdkNmMgaW4gbWFpbiAvdG1wL3BvcnRhZ2UvZGV2LWxpYnMvbGlicGNyZS04LjQwL3dvcmsvcGNyZS04LjQwL3BjcmV0ZXN0LmM6NTIxODo5CisgICAgIzMgMHg3ZjFiYmRkZDY3OGYgaW4gX19saWJjX3N0YXJ0X21haW4gL3RtcC9wb3J0YWdlL3N5cy1saWJzL2dsaWJjLTIuMjMtcjMvd29yay9nbGliYy0yLjIzL2NzdS8uLi9jc3UvbGliYy1zdGFydC5jOjI4OQorICAgICM0IDB4NDFiNDM4IGluIF9pbml0ICgvdXNyL2Jpbi9wY3JldGVzdCsweDQxYjQzOCkKKworQWRkcmVzc1Nhbml0aXplciBjYW4gbm90IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvLgorU1VNTUFSWTogQWRkcmVzc1Nhbml0aXplcjogU0VHViAvdG1wL3BvcnRhZ2UvZGV2LWxpYnMvbGlicGNyZS04LjQwL3dvcmsvcGNyZS04LjQwL3BjcmVfZXhlYy5jOjU0NzM6MTggaW4gbWF0Y2gKKz09MTQ3ODg9PUFCT1JUSU5HCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2h0dHBzOi8vdmNzLnBjcmUub3JnL3BjcmUyL2NvZGUvdHJ1bmsvc3JjL3BjcmUyX3VjZC5jP3ZpZXc9cGF0Y2gmcjE9MzE2JnIyPTY3MCZzb3J0Ynk9ZGF0ZSBcCisgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL3Zjcy5wY3JlLm9yZy9wY3JlMi9jb2RlL3RydW5rL3NyYy9wY3JlMl9pbnRlcm5hbC5oP3ZpZXc9cGF0Y2gmcjE9NjAwJnIyPTY3MCZzb3J0Ynk9ZGF0ZV0KK0NWRTogQ1ZFLTIwMTctNzE4NgorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworLS0tIHRydW5rL3NyYy9wY3JlMl91Y2QuYyAgMjAxNS8wNy8xNyAxNTo0NDo1MSAzMTYKKysrKyB0cnVuay9zcmMvcGNyZTJfdWNkLmMgIDIwMTcvMDIvMjQgMTg6MjU6MzIgNjcwCitAQCAtNDEsNiArNDEsMjAgQEAKKyAKKyBjb25zdCBjaGFyICpQUklWKHVuaWNvZGVfdmVyc2lvbikgPSAiOC4wLjAiOworIAorKy8qIElmIHRoZSAzMi1iaXQgbGlicmFyeSBpcyBydW4gaW4gbm9uLTMyLWJpdCBtb2RlLCBjaGFyYWN0ZXIgdmFsdWVzCisrZ3JlYXRlciB0aGFuIDB4MTBmZmZmIG1heSBiZSBlbmNvdW50ZXJlZC4gRm9yIHRoZXNlIHdlIHNldCB1cCBhCisrc3BlY2lhbCByZWNvcmQuICovCisrCisrI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAzMgorK2NvbnN0IHVjZF9yZWNvcmQgUFJJVihkdW1teV91Y2RfcmVjb3JkKVtdID0ge3sKKysgIHVjcF9Db21tb24sICAgIC8qIHNjcmlwdCAqLworKyAgdWNwX0NuLCAgICAgICAgLyogdHlwZSB1bmFzc2lnbmVkICovCisrICB1Y3BfZ2JPdGhlciwgICAvKiBncmFwaGVtZSBicmVhayBwcm9wZXJ0eSAqLworKyAgMCwgICAgICAgICAgICAgLyogY2FzZSBzZXQgKi8KKysgIDAsICAgICAgICAgICAgIC8qIG90aGVyIGNhc2UgKi8KKysgIH19OworKyNlbmRpZgorKworIC8qIFdoZW4gcmVjb21waWxpbmcgdGFibGVzIHdpdGggYSBuZXcgVW5pY29kZSB2ZXJzaW9uLCBwbGVhc2UgY2hlY2sgdGhlCisgdHlwZXMgaW4gdGhpcyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBmcm9tIHBjcmUyX2ludGVybmFsLmggKHRoZSBhY3R1YWwKKyBmaWVsZCBuYW1lcyB3aWxsIGJlIGRpZmZlcmVudCk6CistLS0gdHJ1bmsvc3JjL3BjcmUyX2ludGVybmFsLmggMjAxNi8xMS8xOSAxMjo0NjoyNCA2MDAKKysrKyB0cnVuay9zcmMvcGNyZTJfaW50ZXJuYWwuaCAyMDE3LzAyLzI0IDE4OjI1OjMyIDY3MAorQEAgLTE3NzQsMTAgKzE3NzQsMTcgQEAKKyAvKiBVQ0QgYWNjZXNzIG1hY3JvcyAqLworIAorICNkZWZpbmUgVUNEX0JMT0NLX1NJWkUgMTI4CistI2RlZmluZSBHRVRfVUNEKGNoKSAoUFJJVih1Y2RfcmVjb3JkcykgKyBcCisrI2RlZmluZSBSRUFMX0dFVF9VQ0QoY2gpIChQUklWKHVjZF9yZWNvcmRzKSArIFwKKyAgICAgICAgIFBSSVYodWNkX3N0YWdlMilbUFJJVih1Y2Rfc3RhZ2UxKVsoaW50KShjaCkgLyBVQ0RfQkxPQ0tfU0laRV0gKiBcCisgICAgICAgICBVQ0RfQkxPQ0tfU0laRSArIChpbnQpKGNoKSAlIFVDRF9CTE9DS19TSVpFXSkKKyAKKysjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDMyCisrI2RlZmluZSBHRVRfVUNEKGNoKSAoKGNoID4gTUFYX1VURl9DT0RFX1BPSU5UKT8gXAorKyAgUFJJVihkdW1teV91Y2RfcmVjb3JkKSA6IFJFQUxfR0VUX1VDRChjaCkpCisrI2Vsc2UKKysjZGVmaW5lIEdFVF9VQ0QoY2gpIFJFQUxfR0VUX1VDRChjaCkKKysjZW5kaWYKKysKKyAjZGVmaW5lIFVDRF9DSEFSVFlQRShjaCkgICAgR0VUX1VDRChjaCktPmNoYXJ0eXBlCisgI2RlZmluZSBVQ0RfU0NSSVBUKGNoKSAgICAgIEdFVF9VQ0QoY2gpLT5zY3JpcHQKKyAjZGVmaW5lIFVDRF9DQVRFR09SWShjaCkgICAgUFJJVih1Y3BfZ2VudHlwZSlbVUNEX0NIQVJUWVBFKGNoKV0KK0BAIC0xODM0LDYgKzE4NDEsOSBAQAorICNkZWZpbmUgX3BjcmUyX2RlZmF1bHRfY29tcGlsZV9jb250ZXh0IFBDUkUyX1NVRkZJWChfcGNyZTJfZGVmYXVsdF9jb21waWxlX2NvbnRleHRfKQorICNkZWZpbmUgX3BjcmUyX2RlZmF1bHRfbWF0Y2hfY29udGV4dCAgIFBDUkUyX1NVRkZJWChfcGNyZTJfZGVmYXVsdF9tYXRjaF9jb250ZXh0XykKKyAjZGVmaW5lIF9wY3JlMl9kZWZhdWx0X3RhYmxlcyAgICAgICAgICBQQ1JFMl9TVUZGSVgoX3BjcmUyX2RlZmF1bHRfdGFibGVzXykKKysjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDMyCisrI2RlZmluZSBfcGNyZTJfZHVtbXlfdWNkX3JlY29yZCAgICAgICAgUENSRTJfU1VGRklYKF9wY3JlMl9kdW1teV91Y2RfcmVjb3JkXykKKysjZW5kaWYKKyAjZGVmaW5lIF9wY3JlMl9oc3BhY2VfbGlzdCAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgoX3BjcmUyX2hzcGFjZV9saXN0XykKKyAjZGVmaW5lIF9wY3JlMl92c3BhY2VfbGlzdCAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgoX3BjcmUyX3ZzcGFjZV9saXN0XykKKyAjZGVmaW5lIF9wY3JlMl91Y2RfY2FzZWxlc3Nfc2V0cyAgICAgICBQQ1JFMl9TVUZGSVgoX3BjcmUyX3VjZF9jYXNlbGVzc19zZXRzXykKK0BAIC0xODU4LDYgKzE4NjgsOSBAQAorIGV4dGVybiBjb25zdCB1aW50MzJfdCAgICAgICAgICAgICAgICAgIFBSSVYodnNwYWNlX2xpc3QpW107CisgZXh0ZXJuIGNvbnN0IHVpbnQzMl90ICAgICAgICAgICAgICAgICAgUFJJVih1Y2RfY2FzZWxlc3Nfc2V0cylbXTsKKyBleHRlcm4gY29uc3QgdWNkX3JlY29yZCAgICAgICAgICAgICAgICBQUklWKHVjZF9yZWNvcmRzKVtdOworKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gMzIKKytleHRlcm4gY29uc3QgdWNkX3JlY29yZCAgICAgICAgICAgICAgICBQUklWKGR1bW15X3VjZF9yZWNvcmQpW107CisrI2VuZGlmCisgZXh0ZXJuIGNvbnN0IHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgUFJJVih1Y2Rfc3RhZ2UxKVtdOworIGV4dGVybiBjb25zdCB1aW50MTZfdCAgICAgICAgICAgICAgICAgIFBSSVYodWNkX3N0YWdlMilbXTsKKyBleHRlcm4gY29uc3QgdWludDMyX3QgICAgICAgICAgICAgICAgICBQUklWKHVjcF9nYnRhYmxlKVtdOwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZTIvbGlicGNyZTItQ1ZFLTIwMTctODc4Ni5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUyL2xpYnBjcmUyLUNWRS0yMDE3LTg3ODYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFmYWZjMQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUyL2xpYnBjcmUyLUNWRS0yMDE3LTg3ODYucGF0Y2gKQEAgLTAsMCArMSw5MyBAQAorbGlicGNyZTItMTAuMjM6IEZpeCBDVkUtMjAxNy04Nzg2CisKK1RoZSBwY3JlMnRlc3QuYyBpbiBQQ1JFMiAxMC4yMyBhbGxvd3MgcmVtb3RlIGF0dGFja2VycyB0byBjYXVzZSBhIGRlbmlhbCBvZgorc2VydmljZSAoaGVhcC1iYXNlZCBidWZmZXIgb3ZlcmZsb3cpIG9yIHBvc3NpYmx5IGhhdmUgdW5zcGVjaWZpZWQgb3RoZXIgaW1wYWN0Cit2aWEgYSBjcmFmdGVkIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbaHR0cHM6Ly92Y3MucGNyZS5vcmcvcGNyZTIvY29kZS90cnVuay9zcmMvcGNyZTJ0ZXN0LmM/cjE9NjkyJnIyPTY5NyZ2aWV3PXBhdGNoXQorQ1ZFOiBDVkUtMjAxNy04Nzg2CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCistLS0gdHJ1bmsvc3JjL3BjcmUydGVzdC5jICAyMDE3LzAzLzIxIDE2OjE4OjU0IDY5MgorKysrIHRydW5rL3NyYy9wY3JlMnRlc3QuYyAgMjAxNy8wMy8yMSAxODozNjoxMyA2OTcKK0BAIC0xMDE3LDkgKzEwMTcsOSBAQAorICAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFOF9NT0RFKSBcCisgICAgIHIgPSBwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZV84KGEsRyhiLDgpLEcoRyhiLDgpLF9zaXplKSk7IFwKKyAgIGVsc2UgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkgXAorLSAgICByID0gcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2VfMTYoYSxHKGIsMTYpLEcoRyhiLDE2KSxfc2l6ZSkpOyBcCisrICAgIHIgPSBwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZV8xNihhLEcoYiwxNiksRyhHKGIsMTYpLF9zaXplLzIpKTsgXAorICAgZWxzZSBcCistICAgIHIgPSBwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZV8zMihhLEcoYiwzMiksRyhHKGIsMzIpLF9zaXplKSkKKysgICAgciA9IHBjcmUyX2dldF9lcnJvcl9tZXNzYWdlXzMyKGEsRyhiLDMyKSxHKEcoYiwzMiksX3NpemUvNCkpCisgCisgI2RlZmluZSBQQ1JFMl9HRVRfT1ZFQ1RPUl9DT1VOVChhLGIpIFwKKyAgIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkgXAorQEAgLTEzOTksNiArMTM5OSw5IEBACisgCisgLyogLS0tLS0gQ29tbW9uIG1hY3JvcyBmb3IgdHdvLW1vZGUgY2FzZXMgLS0tLS0gKi8KKyAKKysjZGVmaW5lIEJZVEVPTkUgKEJJVE9ORS84KQorKyNkZWZpbmUgQllURVRXTyAoQklUVFdPLzgpCisrCisgI2RlZmluZSBDQVNURkxEKHQsYSxiKSBcCisgICAoKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSk/ICh0KShHKGEsQklUT05FKS0+YikgOiBcCisgICAgICh0KShHKGEsQklUVFdPKS0+YikpCitAQCAtMTQ4MSw5ICsxNDg0LDkgQEAKKyAKKyAjZGVmaW5lIFBDUkUyX0dFVF9FUlJPUl9NRVNTQUdFKHIsYSxiKSBcCisgICBpZiAodGVzdF9tb2RlID09IEcoRyhQQ1JFLEJJVE9ORSksX01PREUpKSBcCistICAgIHIgPSBHKHBjcmUyX2dldF9lcnJvcl9tZXNzYWdlXyxCSVRPTkUpKGEsRyhiLEJJVE9ORSksRyhHKGIsQklUT05FKSxfc2l6ZSkpOyBcCisrICAgIHIgPSBHKHBjcmUyX2dldF9lcnJvcl9tZXNzYWdlXyxCSVRPTkUpKGEsRyhiLEJJVE9ORSksRyhHKGIsQklUT05FKSxfc2l6ZS9CWVRFT05FKSk7IFwKKyAgIGVsc2UgXAorLSAgICByID0gRyhwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZV8sQklUVFdPKShhLEcoYixCSVRUV08pLEcoRyhiLEJJVFRXTyksX3NpemUpKQorKyAgICByID0gRyhwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZV8sQklUVFdPKShhLEcoYixCSVRUV08pLEcoRyhiLEJJVFRXTyksX3NpemUvQllURVRXTykpCisgCisgI2RlZmluZSBQQ1JFMl9HRVRfT1ZFQ1RPUl9DT1VOVChhLGIpIFwKKyAgIGlmICh0ZXN0X21vZGUgPT0gRyhHKFBDUkUsQklUT05FKSxfTU9ERSkpIFwKK0BAIC0xOTA0LDcgKzE5MDcsNyBAQAorICNkZWZpbmUgUENSRTJfREZBX01BVENIKGEsYixjLGQsZSxmLGcsaCxpLGopIFwKKyAgIGEgPSBwY3JlMl9kZmFfbWF0Y2hfMTYoRyhiLDE2KSwoUENSRTJfU1BUUjE2KWMsZCxlLGYsRyhnLDE2KSxoLGksaikKKyAjZGVmaW5lIFBDUkUyX0dFVF9FUlJPUl9NRVNTQUdFKHIsYSxiKSBcCistICByID0gcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2VfMTYoYSxHKGIsMTYpLEcoRyhiLDE2KSxfc2l6ZSkpCisrICByID0gcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2VfMTYoYSxHKGIsMTYpLEcoRyhiLDE2KSxfc2l6ZS8yKSkKKyAjZGVmaW5lIFBDUkUyX0dFVF9PVkVDVE9SX0NPVU5UKGEsYikgYSA9IHBjcmUyX2dldF9vdmVjdG9yX2NvdW50XzE2KEcoYiwxNikpCisgI2RlZmluZSBQQ1JFMl9HRVRfU1RBUlRDSEFSKGEsYikgYSA9IHBjcmUyX2dldF9zdGFydGNoYXJfMTYoRyhiLDE2KSkKKyAjZGVmaW5lIFBDUkUyX0pJVF9DT01QSUxFKHIsYSxiKSByID0gcGNyZTJfaml0X2NvbXBpbGVfMTYoRyhhLDE2KSxiKQorQEAgLTIwMDAsNyArMjAwMyw3IEBACisgI2RlZmluZSBQQ1JFMl9ERkFfTUFUQ0goYSxiLGMsZCxlLGYsZyxoLGksaikgXAorICAgYSA9IHBjcmUyX2RmYV9tYXRjaF8zMihHKGIsMzIpLChQQ1JFMl9TUFRSMzIpYyxkLGUsZixHKGcsMzIpLGgsaSxqKQorICNkZWZpbmUgUENSRTJfR0VUX0VSUk9SX01FU1NBR0UocixhLGIpIFwKKy0gIHIgPSBwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZV8zMihhLEcoYiwzMiksRyhHKGIsMzIpLF9zaXplKSkKKysgIHIgPSBwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZV8zMihhLEcoYiwzMiksRyhHKGIsMzIpLF9zaXplLzQpKQorICNkZWZpbmUgUENSRTJfR0VUX09WRUNUT1JfQ09VTlQoYSxiKSBhID0gcGNyZTJfZ2V0X292ZWN0b3JfY291bnRfMzIoRyhiLDMyKSkKKyAjZGVmaW5lIFBDUkUyX0dFVF9TVEFSVENIQVIoYSxiKSBhID0gcGNyZTJfZ2V0X3N0YXJ0Y2hhcl8zMihHKGIsMzIpKQorICNkZWZpbmUgUENSRTJfSklUX0NPTVBJTEUocixhLGIpIHIgPSBwY3JlMl9qaXRfY29tcGlsZV8zMihHKGEsMzIpLGIpCitAQCAtMjg4OSw3ICsyODkyLDcgQEAKKyAgIHsKKyAgIGlmIChwYnVmZmVyMzIgIT0gTlVMTCkgZnJlZShwYnVmZmVyMzIpOworICAgcGJ1ZmZlcjMyX3NpemUgPSA0KmxlbiArIDQ7CistICBpZiAocGJ1ZmZlcjMyX3NpemUgPCAyNTYpIHBidWZmZXIzMl9zaXplID0gMjU2OworKyAgaWYgKHBidWZmZXIzMl9zaXplIDwgNTEyKSBwYnVmZmVyMzJfc2l6ZSA9IDUxMjsKKyAgIHBidWZmZXIzMiA9ICh1aW50MzJfdCAqKW1hbGxvYyhwYnVmZmVyMzJfc2l6ZSk7CisgICBpZiAocGJ1ZmZlcjMyID09IE5VTEwpCisgICAgIHsKK0BAIC03NjAwLDcgKzc2MDMsOCBAQAorICAgaW50IGVycmNvZGU7CisgICBjaGFyICplbmRwdHI7CisgCistLyogRW5zdXJlIHRoZSByZWxldmFudCBub24tOC1iaXQgYnVmZmVyIGlzIGF2YWlsYWJsZS4gKi8KKysvKiBFbnN1cmUgdGhlIHJlbGV2YW50IG5vbi04LWJpdCBidWZmZXIgaXMgYXZhaWxhYmxlLiBFbnN1cmUgdGhhdCBpdCBpcyBhdCAKKytsZWFzdCAxMjggY29kZSB1bml0cywgYmVjYXVzZSBpdCBpcyB1c2VkIGZvciByZXRyaWV2aW5nIGVycm9yIG1lc3NhZ2VzLiAqLworIAorICNpZmRlZiBTVVBQT1JUX1BDUkUyXzE2CisgICBpZiAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFKQorQEAgLTc2MjAsNyArNzYyNCw3IEBACisgI2lmZGVmIFNVUFBPUlRfUENSRTJfMzIKKyAgIGlmICh0ZXN0X21vZGUgPT0gUENSRTMyX01PREUpCisgICAgIHsKKy0gICAgcGJ1ZmZlcjMyX3NpemUgPSAyNTY7CisrICAgIHBidWZmZXIzMl9zaXplID0gNTEyOworICAgICBwYnVmZmVyMzIgPSAodWludDMyX3QgKiltYWxsb2MocGJ1ZmZlcjMyX3NpemUpOworICAgICBpZiAocGJ1ZmZlcjMyID09IE5VTEwpCisgICAgICAgewpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZTJfMTAuMjIuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlMl8xMC4yMi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNmODFjMC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlMl8xMC4yMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLURFU0NSSVBUSU9OID0gIlRoZXJlIGFyZSB0d28gbWFqb3IgdmVyc2lvbnMgb2YgdGhlIFBDUkUgbGlicmFyeS4gVGhlIFwKLW5ld2VzdCB2ZXJzaW9uIGlzIFBDUkUyLCB3aGljaCBpcyBhIHJlLXdvcmtpbmcgb2YgdGhlIG9yaWdpbmFsIFBDUkUgXAotbGlicmFyeSB0byBwcm92aWRlIGFuIGVudGlyZWx5IG5ldyBBUEkuIFRoZSBvcmlnaW5hbCwgdmVyeSB3aWRlbHkgXAotZGVwbG95ZWQgUENSRSBsaWJyYXJ5J3MgQVBJIGFuZCBmZWF0dXJlIGFyZSBzdGFibGUsIGZ1dHVyZSByZWxlYXNlcyBcCi0gd2lsbCBiZSBmb3IgYnVnZml4ZXMgb25seS4gQWxsIG5ldyBmdXR1cmUgZmVhdHVyZXMgd2lsbCBiZSB0byBQQ1JFMiwgXAotbm90IHRoZSBvcmlnaW5hbCBQQ1JFIDgueCBzZXJpZXMuIgotU1VNTUFSWSA9ICJQZXJsIENvbXBhdGlibGUgUmVndWxhciBFeHByZXNzaW9ucyB2ZXJzaW9uIDIiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3LnBjcmUub3JnIgotU0VDVElPTiA9ICJkZXZlbCIKLUxJQ0VOU0UgPSAiQlNEIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5DRTttZDU9YWI5NjMzZWZkMzhkNmY3OTkzOThkZjJjMjQ4YjVhZWMiCi0KLVNSQ19VUkkgPSAiaHR0cHM6Ly9mdHAucGNyZS5vcmcvcHViL3BjcmUvcGNyZTItJHtQVn0udGFyLmJ6MiBcCi0gICAgICAgICAgIGZpbGU6Ly9wY3JlLWNyb3NzLnBhdGNoIFwKLSIKLQotU1JDX1VSSVttZDVzdW1dID0gImMwYzAyNTE3OTM4ZWUyYjBkMzUwZDUzZWRmNDUwNjY0IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImIyYjQ0NjE5ZjRhYzZjNTBhZDc0YzI4NjVmZDU2ODA3NTcxMzkyNDk2ZmFlMWM5YWQ3YTcwOTkzZDAxOGY0MTYiCi0KLUNWRV9QUk9EVUNUID0gInBjcmUyIgotCi1TID0gIiR7V09SS0RJUn0vcGNyZTItJHtQVn0iCi0KLVBST1ZJREVTICs9ICJwY3JlMiIKLURFUEVORFMgKz0gImJ6aXAyIHpsaWIiCi0KLUJJTkNPTkZJRyA9ICIke2JpbmRpcn0vcGNyZTItY29uZmlnIgotCi1pbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQKLQotRVhUUkFfT0VDT05GID0gIlwKLSAgICAtLWVuYWJsZS1uZXdsaW5lLWlzLWxmIFwKLSAgICAtLWVuYWJsZS1yZWJ1aWxkLWNoYXJ0YWJsZXMgXAotICAgIC0td2l0aC1saW5rLXNpemU9MiBcCi0gICAgLS13aXRoLW1hdGNoLWxpbWl0PTEwMDAwMDAwIFwKLSIKLQotIyBTZXQgTElOS19TSVpFIGluIEJVSUxEX0NGTEFHUyBnaXZlbiB0aGF0IHRoZSBhdXRvdG9vbHMgYmJjbGFzcyB1c2UgaXQgdG8KLSMgc2V0IENGTEFHU19GT1JfQlVJTEQsIHJlcXVpcmVkIGZvciB0aGUgbGlicGNyZSBidWlsZC4KLUJVSUxEX0NGTEFHUyA9KyAiLURMSU5LX1NJWkU9MiAtSSR7Qn0vc3JjIgotQ0ZMQUdTICs9ICItRF9SRUVOVFJBTlQiCi1DWFhGTEFHU19hcHBlbmRfcG93ZXJwYyA9ICIgLWxzdGRjKysiCi0KLWV4cG9ydCBDQ0xEX0ZPUl9CVUlMRCA9IiR7QlVJTERfQ0NMRH0iCi0KLVBBQ0tBR0VTID0rICJwY3JlMmdyZXAgcGNyZTJncmVwLWRvYyBwY3JlMnRlc3QgcGNyZTJ0ZXN0LWRvYyIKLQotU1VNTUFSWV9wY3JlMmdyZXAgPSAiZ3JlcCB1dGlsaXR5IHRoYXQgdXNlcyBwZXJsIDUgY29tcGF0aWJsZSByZWdleGVzIgotU1VNTUFSWV9wY3JlMmdyZXAtZG9jID0gImdyZXAgdXRpbGl0eSB0aGF0IHVzZXMgcGVybCA1IGNvbXBhdGlibGUgcmVnZXhlcyAtIGRvY3MiCi1TVU1NQVJZX3BjcmUydGVzdCA9ICJwcm9ncmFtIGZvciB0ZXN0aW5nIFBlcmwtY29tYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCi1TVU1NQVJZX3BjcmUydGVzdC1kb2MgPSAicHJvZ3JhbSBmb3IgdGVzdGluZyBQZXJsLWNvbWF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIC0gZG9jcyIKLQotRklMRVNfcGNyZTJncmVwID0gIiR7YmluZGlyfS9wY3JlMmdyZXAiCi1GSUxFU19wY3JlMmdyZXAtZG9jID0gIiR7bWFuZGlyfS9tYW4xL3BjcmUyZ3JlcC4xIgotRklMRVNfcGNyZTJ0ZXN0ID0gIiR7YmluZGlyfS9wY3JlMnRlc3QiCi1GSUxFU19wY3JlMnRlc3QtZG9jID0gIiR7bWFuZGlyfS9tYW4xL3BjcmUydGVzdC4xIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlMl8xMC4yMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUyXzEwLjIzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMmIwMjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlMl8xMC4yMy5iYgpAQCAtMCwwICsxLDYwIEBACitERVNDUklQVElPTiA9ICJUaGVyZSBhcmUgdHdvIG1ham9yIHZlcnNpb25zIG9mIHRoZSBQQ1JFIGxpYnJhcnkuIFRoZSBcCituZXdlc3QgdmVyc2lvbiBpcyBQQ1JFMiwgd2hpY2ggaXMgYSByZS13b3JraW5nIG9mIHRoZSBvcmlnaW5hbCBQQ1JFIFwKK2xpYnJhcnkgdG8gcHJvdmlkZSBhbiBlbnRpcmVseSBuZXcgQVBJLiBUaGUgb3JpZ2luYWwsIHZlcnkgd2lkZWx5IFwKK2RlcGxveWVkIFBDUkUgbGlicmFyeSdzIEFQSSBhbmQgZmVhdHVyZSBhcmUgc3RhYmxlLCBmdXR1cmUgcmVsZWFzZXMgXAorIHdpbGwgYmUgZm9yIGJ1Z2ZpeGVzIG9ubHkuIEFsbCBuZXcgZnV0dXJlIGZlYXR1cmVzIHdpbGwgYmUgdG8gUENSRTIsIFwKK25vdCB0aGUgb3JpZ2luYWwgUENSRSA4Lnggc2VyaWVzLiIKK1NVTU1BUlkgPSAiUGVybCBDb21wYXRpYmxlIFJlZ3VsYXIgRXhwcmVzc2lvbnMgdmVyc2lvbiAyIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5wY3JlLm9yZyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOQ0U7bWQ1PTNkZTM0ZGY0OWUxZmUzYzNiNTlhMDhkZmYyMTQ0ODhiIgorCitTUkNfVVJJID0gImh0dHBzOi8vZnRwLnBjcmUub3JnL3B1Yi9wY3JlL3BjcmUyLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcGNyZS1jcm9zcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWJwY3JlMi1DVkUtMjAxNy04Nzg2LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnBjcmUyLUNWRS0yMDE3LTcxODYucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjJjZDAwY2E3ZTI0MDQ5MDQwMDk5YjBhNDZiYjM2NDkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGZjNzliOTE4NzcxZjAyZDMzOTY4YmQzNGE3NDlhZDc0ODdmYTEwMTRhZWI3ODdmYWQyOWRkMzkyYjc4YzU2ZSIKKworQ1ZFX1BST0RVQ1QgPSAicGNyZTIiCisKK1MgPSAiJHtXT1JLRElSfS9wY3JlMi0ke1BWfSIKKworUFJPVklERVMgKz0gInBjcmUyIgorREVQRU5EUyArPSAiYnppcDIgemxpYiIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9wY3JlMi1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZAorCitFWFRSQV9PRUNPTkYgPSAiXAorICAgIC0tZW5hYmxlLW5ld2xpbmUtaXMtbGYgXAorICAgIC0tZW5hYmxlLXJlYnVpbGQtY2hhcnRhYmxlcyBcCisgICAgLS13aXRoLWxpbmstc2l6ZT0yIFwKKyAgICAtLXdpdGgtbWF0Y2gtbGltaXQ9MTAwMDAwMDAgXAorIgorCisjIFNldCBMSU5LX1NJWkUgaW4gQlVJTERfQ0ZMQUdTIGdpdmVuIHRoYXQgdGhlIGF1dG90b29scyBiYmNsYXNzIHVzZSBpdCB0bworIyBzZXQgQ0ZMQUdTX0ZPUl9CVUlMRCwgcmVxdWlyZWQgZm9yIHRoZSBsaWJwY3JlIGJ1aWxkLgorQlVJTERfQ0ZMQUdTID0rICItRExJTktfU0laRT0yIC1JJHtCfS9zcmMiCitDRkxBR1MgKz0gIi1EX1JFRU5UUkFOVCIKK0NYWEZMQUdTX2FwcGVuZF9wb3dlcnBjID0gIiAtbHN0ZGMrKyIKKworZXhwb3J0IENDTERfRk9SX0JVSUxEID0iJHtCVUlMRF9DQ0xEfSIKKworUEFDS0FHRVMgPSsgInBjcmUyZ3JlcCBwY3JlMmdyZXAtZG9jIHBjcmUydGVzdCBwY3JlMnRlc3QtZG9jIgorCitTVU1NQVJZX3BjcmUyZ3JlcCA9ICJncmVwIHV0aWxpdHkgdGhhdCB1c2VzIHBlcmwgNSBjb21wYXRpYmxlIHJlZ2V4ZXMiCitTVU1NQVJZX3BjcmUyZ3JlcC1kb2MgPSAiZ3JlcCB1dGlsaXR5IHRoYXQgdXNlcyBwZXJsIDUgY29tcGF0aWJsZSByZWdleGVzIC0gZG9jcyIKK1NVTU1BUllfcGNyZTJ0ZXN0ID0gInByb2dyYW0gZm9yIHRlc3RpbmcgUGVybC1jb21hdGlibGUgcmVndWxhciBleHByZXNzaW9ucyIKK1NVTU1BUllfcGNyZTJ0ZXN0LWRvYyA9ICJwcm9ncmFtIGZvciB0ZXN0aW5nIFBlcmwtY29tYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgLSBkb2NzIgorCitGSUxFU19wY3JlMmdyZXAgPSAiJHtiaW5kaXJ9L3BjcmUyZ3JlcCIKK0ZJTEVTX3BjcmUyZ3JlcC1kb2MgPSAiJHttYW5kaXJ9L21hbjEvcGNyZTJncmVwLjEiCitGSUxFU19wY3JlMnRlc3QgPSAiJHtiaW5kaXJ9L3BjcmUydGVzdCIKK0ZJTEVTX3BjcmUydGVzdC1kb2MgPSAiJHttYW5kaXJ9L21hbjEvcGNyZTJ0ZXN0LjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmVfOC40MC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmVfOC40MC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI2YWIyNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlXzguNDAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi1ERVNDUklQVElPTiA9ICJUaGUgUENSRSBsaWJyYXJ5IGlzIGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGltcGxlbWVudCByZWd1bGFyIFwKLWV4cHJlc3Npb24gcGF0dGVybiBtYXRjaGluZyB1c2luZyB0aGUgc2FtZSBzeW50YXggYW5kIHNlbWFudGljcyBhcyBQZXJsIDUuIFBDUkUgXAotaGFzIGl0cyBvd24gbmF0aXZlIEFQSSwgYXMgd2VsbCBhcyBhIHNldCBvZiB3cmFwcGVyIGZ1bmN0aW9ucyB0aGF0IGNvcnJlc3BvbmQgXAotdG8gdGhlIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbiBBUEkuIgotU1VNTUFSWSA9ICJQZXJsIENvbXBhdGlibGUgUmVndWxhciBFeHByZXNzaW9ucyIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cucGNyZS5vcmciCi1TRUNUSU9OID0gImRldmVsIgotTElDRU5TRSA9ICJCU0QiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTkNFO21kNT02MGRhMzJkODRkMDY3ZjUzZTIyMDcxYzRlY2I0Mzg0ZCIKLVNSQ19VUkkgPSAiZnRwOi8vZnRwLmNzeC5jYW0uYWMudWsvcHViL3NvZnR3YXJlL3Byb2dyYW1taW5nL3BjcmUvcGNyZS0ke1BWfS50YXIuYnoyIFwKLSAgICAgICAgICAgZmlsZTovL3BjcmUtY3Jvc3MucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZml4LXBjcmUtbmFtZS1jb2xsaXNpb24ucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKLSAgICAgICAgICAgZmlsZTovL01ha2VmaWxlIFwKLSIKLQotU1JDX1VSSVttZDVzdW1dID0gIjQxYTg0MmJmN2RjZWNkNjYzNDIxOTMzNmUyMTY3ZDFkIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAwZTI3YTI5ZWFkNDI2N2UzZGU4MTExZmNhYTU5YjEzMmQwNTMzY2RmZGJkZGRmNGIwNjA0Mjc5YWNiY2Y0ZjQiCi0KLUNWRV9QUk9EVUNUID0gInBjcmUiCi0KLVMgPSAiJHtXT1JLRElSfS9wY3JlLSR7UFZ9IgotCi1QUk9WSURFUyArPSAicGNyZSIKLURFUEVORFMgKz0gImJ6aXAyIHpsaWIiCi0KLVBBQ0tBR0VDT05GSUcgPz89ICJwY3JlOCB1bmljb2RlLXByb3BlcnRpZXMiCi0KLVBBQ0tBR0VDT05GSUdbcGNyZThdID0gIi0tZW5hYmxlLXBjcmU4LC0tZGlzYWJsZS1wY3JlOCIKLVBBQ0tBR0VDT05GSUdbcGNyZTE2XSA9ICItLWVuYWJsZS1wY3JlMTYsLS1kaXNhYmxlLXBjcmUxNiIKLVBBQ0tBR0VDT05GSUdbcGNyZTMyXSA9ICItLWVuYWJsZS1wY3JlMzIsLS1kaXNhYmxlLXBjcmUzMiIKLVBBQ0tBR0VDT05GSUdbcGNyZXRlc3QtcmVhZGxpbmVdID0gIi0tZW5hYmxlLXBjcmV0ZXN0LWxpYnJlYWRsaW5lLC0tZGlzYWJsZS1wY3JldGVzdC1saWJyZWFkbGluZSxyZWFkbGluZSwiCi1QQUNLQUdFQ09ORklHW3VuaWNvZGUtcHJvcGVydGllc10gPSAiLS1lbmFibGUtdW5pY29kZS1wcm9wZXJ0aWVzLC0tZGlzYWJsZS11bmljb2RlLXByb3BlcnRpZXMiCi0KLUJJTkNPTkZJRyA9ICIke2JpbmRpcn0vcGNyZS1jb25maWciCi0KLWluaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBwdGVzdAotCi1FWFRSQV9PRUNPTkYgPSAiXAotICAgIC0tZW5hYmxlLW5ld2xpbmUtaXMtbGYgXAotICAgIC0tZW5hYmxlLXJlYnVpbGQtY2hhcnRhYmxlcyBcCi0gICAgLS1lbmFibGUtdXRmIFwKLSAgICAtLXdpdGgtbGluay1zaXplPTIgXAotICAgIC0td2l0aC1tYXRjaC1saW1pdD0xMDAwMDAwMCBcCi0iCi0KLSMgU2V0IExJTktfU0laRSBpbiBCVUlMRF9DRkxBR1MgZ2l2ZW4gdGhhdCB0aGUgYXV0b3Rvb2xzIGJiY2xhc3MgdXNlIGl0IHRvCi0jIHNldCBDRkxBR1NfRk9SX0JVSUxELCByZXF1aXJlZCBmb3IgdGhlIGxpYnBjcmUgYnVpbGQuCi1CVUlMRF9DRkxBR1MgPSsgIi1ETElOS19TSVpFPTIgLUkke0J9IgotQ0ZMQUdTICs9ICItRF9SRUVOVFJBTlQiCi1DWFhGTEFHU19hcHBlbmRfcG93ZXJwYyA9ICIgLWxzdGRjKysiCi0KLWV4cG9ydCBDQ0xEX0ZPUl9CVUlMRCA9IiR7QlVJTERfQ0NMRH0iCi0KLVBBQ0tBR0VTID0rICJsaWJwY3JlY3BwIGxpYnBjcmVwb3NpeCBwY3JlZ3JlcCBwY3JlZ3JlcC1kb2MgcGNyZXRlc3QgcGNyZXRlc3QtZG9jIgotCi1TVU1NQVJZX2xpYnBjcmVjcHAgPSAiJHtTVU1NQVJZfSAtIEMrKyB3cmFwcGVyIGZ1bmN0aW9ucyIKLVNVTU1BUllfbGlicGNyZXBvc2l4ID0gIiR7U1VNTUFSWX0gLSBDIHdyYXBwZXIgZnVuY3Rpb25zIGJhc2VkIG9uIHRoZSBQT1NJWCByZWdleCBBUEkiCi1TVU1NQVJZX3BjcmVncmVwID0gImdyZXAgdXRpbGl0eSB0aGF0IHVzZXMgcGVybCA1IGNvbXBhdGlibGUgcmVnZXhlcyIKLVNVTU1BUllfcGNyZWdyZXAtZG9jID0gImdyZXAgdXRpbGl0eSB0aGF0IHVzZXMgcGVybCA1IGNvbXBhdGlibGUgcmVnZXhlcyAtIGRvY3MiCi1TVU1NQVJZX3BjcmV0ZXN0ID0gInByb2dyYW0gZm9yIHRlc3RpbmcgUGVybC1jb21hdGlibGUgcmVndWxhciBleHByZXNzaW9ucyIKLVNVTU1BUllfcGNyZXRlc3QtZG9jID0gInByb2dyYW0gZm9yIHRlc3RpbmcgUGVybC1jb21hdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAtIGRvY3MiCi0KLUZJTEVTX2xpYnBjcmVjcHAgPSAiJHtsaWJkaXJ9L2xpYnBjcmVjcHAuc28uKiIKLUZJTEVTX2xpYnBjcmVwb3NpeCA9ICIke2xpYmRpcn0vbGlicGNyZXBvc2l4LnNvLioiCi1GSUxFU19wY3JlZ3JlcCA9ICIke2JpbmRpcn0vcGNyZWdyZXAiCi1GSUxFU19wY3JlZ3JlcC1kb2MgPSAiJHttYW5kaXJ9L21hbjEvcGNyZWdyZXAuMSIKLUZJTEVTX3BjcmV0ZXN0ID0gIiR7YmluZGlyfS9wY3JldGVzdCIKLUZJTEVTX3BjcmV0ZXN0LWRvYyA9ICIke21hbmRpcn0vbWFuMS9wY3JldGVzdC4xIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCi0KLWRvX2luc3RhbGxfcHRlc3QoKSB7Ci0JdD0ke0R9JHtQVEVTVF9QQVRIfQotCWNwICR7V09SS0RJUn0vTWFrZWZpbGUgJHQKLQljcCAtciAke1N9L3Rlc3RkYXRhICR0Ci0JZm9yIGkgaW4gcGNyZV9zdHJpbmdwaWVjZV91bml0dGVzdCBwY3JlZ3JlcCBwY3JldGVzdDsgXAotCSAgZG8gY3AgJHtCfS8ubGlicy8kaSAkdDsgXAotCWRvbmUKLQlmb3IgaSBpbiBSdW5UZXN0IFJ1bkdyZXBUZXN0IHRlc3QtZHJpdmVyOyBcCi0JICBkbyBjcCAke1N9LyRpICR0OyBcCi0JZG9uZQotfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZV84LjQxLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZV84LjQxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYWVkMTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlXzguNDEuYmIKQEAgLTAsMCArMSw4MyBAQAorREVTQ1JJUFRJT04gPSAiVGhlIFBDUkUgbGlicmFyeSBpcyBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgcmVndWxhciBcCitleHByZXNzaW9uIHBhdHRlcm4gbWF0Y2hpbmcgdXNpbmcgdGhlIHNhbWUgc3ludGF4IGFuZCBzZW1hbnRpY3MgYXMgUGVybCA1LiBQQ1JFIFwKK2hhcyBpdHMgb3duIG5hdGl2ZSBBUEksIGFzIHdlbGwgYXMgYSBzZXQgb2Ygd3JhcHBlciBmdW5jdGlvbnMgdGhhdCBjb3JyZXNwb25kIFwKK3RvIHRoZSBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24gQVBJLiIKK1NVTU1BUlkgPSAiUGVybCBDb21wYXRpYmxlIFJlZ3VsYXIgRXhwcmVzc2lvbnMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnBjcmUub3JnIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5DRTttZDU9NjBkYTMyZDg0ZDA2N2Y1M2UyMjA3MWM0ZWNiNDM4NGQiCitTUkNfVVJJID0gImh0dHBzOi8vZnRwLnBjcmUub3JnL3B1Yi9wY3JlL3BjcmUtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9wY3JlLWNyb3NzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1wY3JlLW5hbWUtY29sbGlzaW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZSBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjMTYwZDIyNzIzYjE2NzA0NDczNDFiMDhjNTg5ODFjMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlNjJjN2VhYzVhZTdjMGU3Mjg2ZGI2MWZmODI5MTJlMWMwYjdhMGMxMzcwNjYxNmU5NGE3ZGQ3MjkzMjFiNTMwIgorCitDVkVfUFJPRFVDVCA9ICJwY3JlIgorCitTID0gIiR7V09SS0RJUn0vcGNyZS0ke1BWfSIKKworUFJPVklERVMgKz0gInBjcmUiCitERVBFTkRTICs9ICJiemlwMiB6bGliIgorCitQQUNLQUdFQ09ORklHID8/PSAicGNyZTggdW5pY29kZS1wcm9wZXJ0aWVzIgorCitQQUNLQUdFQ09ORklHW3BjcmU4XSA9ICItLWVuYWJsZS1wY3JlOCwtLWRpc2FibGUtcGNyZTgiCitQQUNLQUdFQ09ORklHW3BjcmUxNl0gPSAiLS1lbmFibGUtcGNyZTE2LC0tZGlzYWJsZS1wY3JlMTYiCitQQUNLQUdFQ09ORklHW3BjcmUzMl0gPSAiLS1lbmFibGUtcGNyZTMyLC0tZGlzYWJsZS1wY3JlMzIiCitQQUNLQUdFQ09ORklHW3BjcmV0ZXN0LXJlYWRsaW5lXSA9ICItLWVuYWJsZS1wY3JldGVzdC1saWJyZWFkbGluZSwtLWRpc2FibGUtcGNyZXRlc3QtbGlicmVhZGxpbmUscmVhZGxpbmUsIgorUEFDS0FHRUNPTkZJR1t1bmljb2RlLXByb3BlcnRpZXNdID0gIi0tZW5hYmxlLXVuaWNvZGUtcHJvcGVydGllcywtLWRpc2FibGUtdW5pY29kZS1wcm9wZXJ0aWVzIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L3BjcmUtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQgcHRlc3QKKworRVhUUkFfT0VDT05GID0gIlwKKyAgICAtLWVuYWJsZS1uZXdsaW5lLWlzLWxmIFwKKyAgICAtLWVuYWJsZS1yZWJ1aWxkLWNoYXJ0YWJsZXMgXAorICAgIC0tZW5hYmxlLXV0ZiBcCisgICAgLS13aXRoLWxpbmstc2l6ZT0yIFwKKyAgICAtLXdpdGgtbWF0Y2gtbGltaXQ9MTAwMDAwMDAgXAorIgorCisjIFNldCBMSU5LX1NJWkUgaW4gQlVJTERfQ0ZMQUdTIGdpdmVuIHRoYXQgdGhlIGF1dG90b29scyBiYmNsYXNzIHVzZSBpdCB0bworIyBzZXQgQ0ZMQUdTX0ZPUl9CVUlMRCwgcmVxdWlyZWQgZm9yIHRoZSBsaWJwY3JlIGJ1aWxkLgorQlVJTERfQ0ZMQUdTID0rICItRExJTktfU0laRT0yIC1JJHtCfSIKK0NGTEFHUyArPSAiLURfUkVFTlRSQU5UIgorQ1hYRkxBR1NfYXBwZW5kX3Bvd2VycGMgPSAiIC1sc3RkYysrIgorCitleHBvcnQgQ0NMRF9GT1JfQlVJTEQgPSIke0JVSUxEX0NDTER9IgorCitQQUNLQUdFUyA9KyAibGlicGNyZWNwcCBsaWJwY3JlcG9zaXggcGNyZWdyZXAgcGNyZWdyZXAtZG9jIHBjcmV0ZXN0IHBjcmV0ZXN0LWRvYyIKKworU1VNTUFSWV9saWJwY3JlY3BwID0gIiR7U1VNTUFSWX0gLSBDKysgd3JhcHBlciBmdW5jdGlvbnMiCitTVU1NQVJZX2xpYnBjcmVwb3NpeCA9ICIke1NVTU1BUll9IC0gQyB3cmFwcGVyIGZ1bmN0aW9ucyBiYXNlZCBvbiB0aGUgUE9TSVggcmVnZXggQVBJIgorU1VNTUFSWV9wY3JlZ3JlcCA9ICJncmVwIHV0aWxpdHkgdGhhdCB1c2VzIHBlcmwgNSBjb21wYXRpYmxlIHJlZ2V4ZXMiCitTVU1NQVJZX3BjcmVncmVwLWRvYyA9ICJncmVwIHV0aWxpdHkgdGhhdCB1c2VzIHBlcmwgNSBjb21wYXRpYmxlIHJlZ2V4ZXMgLSBkb2NzIgorU1VNTUFSWV9wY3JldGVzdCA9ICJwcm9ncmFtIGZvciB0ZXN0aW5nIFBlcmwtY29tYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCitTVU1NQVJZX3BjcmV0ZXN0LWRvYyA9ICJwcm9ncmFtIGZvciB0ZXN0aW5nIFBlcmwtY29tYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgLSBkb2NzIgorCitGSUxFU19saWJwY3JlY3BwID0gIiR7bGliZGlyfS9saWJwY3JlY3BwLnNvLioiCitGSUxFU19saWJwY3JlcG9zaXggPSAiJHtsaWJkaXJ9L2xpYnBjcmVwb3NpeC5zby4qIgorRklMRVNfcGNyZWdyZXAgPSAiJHtiaW5kaXJ9L3BjcmVncmVwIgorRklMRVNfcGNyZWdyZXAtZG9jID0gIiR7bWFuZGlyfS9tYW4xL3BjcmVncmVwLjEiCitGSUxFU19wY3JldGVzdCA9ICIke2JpbmRpcn0vcGNyZXRlc3QiCitGSUxFU19wY3JldGVzdC1kb2MgPSAiJHttYW5kaXJ9L21hbjEvcGNyZXRlc3QuMSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCXQ9JHtEfSR7UFRFU1RfUEFUSH0KKwljcCAke1dPUktESVJ9L01ha2VmaWxlICR0CisJY3AgLXIgJHtTfS90ZXN0ZGF0YSAkdAorCWZvciBpIGluIHBjcmVfc3RyaW5ncGllY2VfdW5pdHRlc3QgcGNyZWdyZXAgcGNyZXRlc3Q7IFwKKwkgIGRvIGNwICR7Qn0vLmxpYnMvJGkgJHQ7IFwKKwlkb25lCisJZm9yIGkgaW4gUnVuVGVzdCBSdW5HcmVwVGVzdCB0ZXN0LWRyaXZlcjsgXAorCSAgZG8gY3AgJHtTfS8kaSAkdDsgXAorCWRvbmUKK30KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwcm94eS9saWJwcm94eV8wLjQuMTQuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicHJveHkvbGlicHJveHlfMC40LjE0LmJiCmluZGV4IDYyYTZhMTMuLjRjMzlmNTIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwcm94eS9saWJwcm94eV8wLjQuMTQuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnByb3h5L2xpYnByb3h5XzAuNC4xNC5iYgpAQCAtMzEsNiArMzEsNyBAQAogICAgIC1ETElCX0lOU1RBTExfRElSPSR7bGliZGlyfSBcCiAgICAgLURMSUJFWEVDX0lOU1RBTExfRElSPSR7bGliZXhlY2Rpcn0gXAogIgorU0VDVVJJVFlfUElFX0NGTEFHU19yZW1vdmUgPSAiLWZQSUUgLXBpZSIKIAogRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8ke0JQTn0vJHtQVn0vbW9kdWxlcyIKIEZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS9jbWFrZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJzb3VwL2xpYnNvdXAtMi40XzIuNTYuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJzb3VwL2xpYnNvdXAtMi40XzIuNTYuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFmMjk0ZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlic291cC9saWJzb3VwLTIuNF8yLjU2LjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1TVU1NQVJZID0gIkFuIEhUVFAgbGlicmFyeSBpbXBsZW1lbnRhdGlvbiBpbiBDIgotSE9NRVBBR0UgPSAiaHR0cHM6Ly93aWtpLmdub21lLm9yZy9Qcm9qZWN0cy9saWJzb3VwIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCi1TRUNUSU9OID0gIngxMS9nbm9tZS9saWJzIgotTElDRU5TRSA9ICJMR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiIKLQotREVQRU5EUyA9ICJnbGliLTIuMCBnbGliLTIuMC1uYXRpdmUgbGlieG1sMiBzcWxpdGUzIGludGx0b29sLW5hdGl2ZSIKLQotU0hSVF9WRVIgPSAiJHtAZC5nZXRWYXIoJ1BWJykuc3BsaXQoJy4nKVswXX0uJHtAZC5nZXRWYXIoJ1BWJykuc3BsaXQoJy4nKVsxXX0iCi0KLVNSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9L2xpYnNvdXAvJHtTSFJUX1ZFUn0vbGlic291cC0ke1BWfS50YXIueHoiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI0NjUwODNmNzRiN2JiMDM1OTU5ZGRiMDU5OTMxMzk4NiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJkODIxNmI3MWRlODI0N2JjNmYyNzRlYzA1NGMwODU0N2IyZTA0MzY5YzFmOGFkZDcxM2U5MzUwYzhlZjgxZmU1IgotCi1TID0gIiR7V09SS0RJUn0vbGlic291cC0ke1BWfSIKLQotaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGdvYmplY3QtaW50cm9zcGVjdGlvbiBndGstZG9jCi0KLSMgbGlic291cC1nbm9tZSBpcyBlbnRpcmVseSBkZXByZWNhdGVkIGFuZCBqdXN0IHN0dWJzIGluIDIuNDIgb253YXJkcy4gRGlzYWJsZSBieSBkZWZhdWx0LgotUEFDS0FHRUNPTkZJRyA/Pz0gIiIKLVBBQ0tBR0VDT05GSUdbZ25vbWVdID0gIi0td2l0aC1nbm9tZSwtLXdpdGhvdXQtZ25vbWUiCi1QQUNLQUdFQ09ORklHW2dzc2FwaV0gPSAiLS13aXRoLWdzc2FwaSwtLXdpdGhvdXQtZ3NzYXBpLGtyYjUiCi0KLUVYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtdmFsYSIKLQotIyBXaGVuIGJ1aWx0IHdpdGhvdXQgZ25vbWUgc3VwcG9ydCwgbGlic291cC0yLjQgd2lsbCBjb250YWluIG9ubHkgb25lIHNoYXJlZCBsaWIKLSMgYW5kIHdpbGwgdGhlcmVmb3JlIGJlY29tZSBzdWJqZWN0IHRvIHJlbmFtaW5nIGJ5IGRlYmlhbi5iYmNsYXNzLiBQcmV2ZW50Ci0jIHJlbmFtaW5nIGluIG9yZGVyIHRvIGtlZXAgdGhlIHBhY2thZ2UgbmFtZSBjb25zaXN0ZW50IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlcgotIyBnbm9tZSBzdXBwb3J0IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuCi1ERUJJQU5fTk9BVVRPTkFNRV8ke1BOfSA9ICIxIgotCi0jIGdsaWItbmV0d29ya2luZyBpcyBuZWVkZWQgZm9yIFNTTCwgcHJveGllcywgZXRjLgotUlJFQ09NTUVORFNfJHtQTn0gPSAiZ2xpYi1uZXR3b3JraW5nIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnNvdXAvbGlic291cC0yLjRfMi41OC4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnNvdXAvbGlic291cC0yLjRfMi41OC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5Zjk1ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlic291cC9saWJzb3VwLTIuNF8yLjU4LjIuYmIKQEAgLTAsMCArMSwzNSBAQAorU1VNTUFSWSA9ICJBbiBIVFRQIGxpYnJhcnkgaW1wbGVtZW50YXRpb24gaW4gQyIKK0hPTUVQQUdFID0gImh0dHBzOi8vd2lraS5nbm9tZS5vcmcvUHJvamVjdHMvbGlic291cCIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorU0VDVElPTiA9ICJ4MTEvZ25vbWUvbGlicyIKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzIiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgZ2xpYi0yLjAtbmF0aXZlIGxpYnhtbDIgc3FsaXRlMyBpbnRsdG9vbC1uYXRpdmUiCisKK1NIUlRfVkVSID0gIiR7QGQuZ2V0VmFyKCdQVicpLnNwbGl0KCcuJylbMF19LiR7QGQuZ2V0VmFyKCdQVicpLnNwbGl0KCcuJylbMV19IgorCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS9saWJzb3VwLyR7U0hSVF9WRVJ9L2xpYnNvdXAtJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZWIzM2FkYjQ1OWMyMjgzZWZjNWM3ZDA5Y2NkYmJjZmMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDQyMzAwY2ExYjFiZjhhM2JiZjJmNzg4MjAzMjg3ZmY4NjI1NDJkNGZjMDQ4ZjE5YTkyYTA2OGEyN2QxN2I3MiIKKworUyA9ICIke1dPUktESVJ9L2xpYnNvdXAtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnb2JqZWN0LWludHJvc3BlY3Rpb24gZ3RrLWRvYworCisjIGxpYnNvdXAtZ25vbWUgaXMgZW50aXJlbHkgZGVwcmVjYXRlZCBhbmQganVzdCBzdHVicyBpbiAyLjQyIG9ud2FyZHMuIERpc2FibGUgYnkgZGVmYXVsdC4KK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2dub21lXSA9ICItLXdpdGgtZ25vbWUsLS13aXRob3V0LWdub21lIgorUEFDS0FHRUNPTkZJR1tnc3NhcGldID0gIi0td2l0aC1nc3NhcGksLS13aXRob3V0LWdzc2FwaSxrcmI1IgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXZhbGEiCisKKyMgV2hlbiBidWlsdCB3aXRob3V0IGdub21lIHN1cHBvcnQsIGxpYnNvdXAtMi40IHdpbGwgY29udGFpbiBvbmx5IG9uZSBzaGFyZWQgbGliCisjIGFuZCB3aWxsIHRoZXJlZm9yZSBiZWNvbWUgc3ViamVjdCB0byByZW5hbWluZyBieSBkZWJpYW4uYmJjbGFzcy4gUHJldmVudAorIyByZW5hbWluZyBpbiBvcmRlciB0byBrZWVwIHRoZSBwYWNrYWdlIG5hbWUgY29uc2lzdGVudCByZWdhcmRsZXNzIG9mIHdoZXRoZXIKKyMgZ25vbWUgc3VwcG9ydCBpcyBlbmFibGVkIG9yIGRpc2FibGVkLgorREVCSUFOX05PQVVUT05BTUVfJHtQTn0gPSAiMSIKKworIyBnbGliLW5ldHdvcmtpbmcgaXMgbmVlZGVkIGZvciBTU0wsIHByb3hpZXMsIGV0Yy4KK1JSRUNPTU1FTkRTXyR7UE59ID0gImdsaWItbmV0d29ya2luZyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLmluYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLmluYwppbmRleCBjOGZmODM2Li5lZDMyZDE5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC5pbmMKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQuaW5jCkBAIC0yLDIzICsyLDE4IEBACiBERVNDUklQVElPTiA9ICJhIHBvcnRhYmxlIGFuZCBlZmZpY2llbnQgQyBwcm9ncmFtbWluZyBpbnRlcmZhY2UgKEFQSSkgdG8gZGV0ZXJtaW5lIHRoZSBjYWxsLWNoYWluIG9mIGEgcHJvZ3JhbSIKIEhPTUVQQUdFID0gImh0dHA6Ly93d3cubm9uZ251Lm9yZy9saWJ1bndpbmQiCiBMSUNFTlNFID0gIk1JVCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTNmY2VkMTFkNmRmNzE5YjQ3NTA1ODM3YTUxYzE2YWU1IgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORztiZWdpbmxpbmU9MzttZDU9M2ZjZWQxMWQ2ZGY3MTliNDc1MDU4MzdhNTFjMTZhZTUiCiBERVBFTkRTICs9ICJsaWJhdG9taWMtb3BzIgogCiBpbmhlcml0IGF1dG90b29scwogCiBQQUNLQUdFQ09ORklHID8/PSAiIgogUEFDS0FHRUNPTkZJR1tsem1hXSA9ICItLWVuYWJsZS1taW5pZGVidWdpbmZvLC0tZGlzYWJsZS1taW5pZGVidWdpbmZvLHh6IgotUEFDS0FHRUNPTkZJR1tsYXRleGRvY3NdID0gIi0tZW5hYmxlLWRvY3VtZW50YWl0b24sIC0tZGlzYWJsZS1kb2N1bWVudGF0aW9uLCBsYXRleDJtYW4tbmF0aXZlIgorUEFDS0FHRUNPTkZJR1tsYXRleGRvY3NdID0gIi0tZW5hYmxlLWRvY3VtZW50YXRpb24sIC0tZGlzYWJsZS1kb2N1bWVudGF0aW9uLCBsYXRleDJtYW4tbmF0aXZlIgogCiBFWFRSQV9PRUNPTkZfYXJtID0gIi0tZW5hYmxlLWRlYnVnLWZyYW1lIgogRVhUUkFfT0VDT05GX2FhcmNoNjQgPSAiLS1lbmFibGUtZGVidWctZnJhbWUiCiAKLUNGTEFHUyArPSAiJHtBVE9NSUNPUFN9IgotQVRPTUlDT1BTX2FybXY1ID0gIi1EQU9fVVNFX1BUSFJFQURfREVGUz0xIgotQVRPTUlDT1BTX2FybXY0ID0gIi1EQU9fVVNFX1BUSFJFQURfREVGUz0xIgotQVRPTUlDT1BTID89ICIiCi0KIFNFQ1VSSVRZX0xERkxBR1NfYXBwZW5kX2xpYmMtbXVzbCA9ICIgLWxzc3Bfbm9uc2hhcmVkIC1sc3NwIgogCiBCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kL2ZpeC1taXBzLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQvZml4LW1pcHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAyMjIzNwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kL2ZpeC1taXBzLnBhdGNoCkBAIC0wLDAgKzEsMTM0IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitGcm9tIDVmMzU0Y2I3YjljODRkYWUwMDZmMGViZDhhZDdhNzhkN2UyYWFkMGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEYXZlIFdhdHNvbiA8ZGF2ZWp3YXRzb25AZmIuY29tPgorRGF0ZTogV2VkLCAyNSBKYW4gMjAxNyAxNjoxODowMiAtMDgwMAorU3ViamVjdDogW1BBVENIXSBtaXBzL3RpbGVneDogQWRkIG1pc3NpbmcgdW53aW5kX2kuaCBoZWFkZXIgZmlsZQorCityZXBvcnRlZC1ieTogSm9obiBLbmlnaHQgPEpvaG4uS25pZ2h0QGJlbGtpbi5jb20+CistLS0KKyBzcmMvTWFrZWZpbGUuYW0gfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlLmFtIGIvc3JjL01ha2VmaWxlLmFtCitpbmRleCA1ZDg3NDc1NS4uN2RlNGM0MjUgMTAwNjQ0CistLS0gYS9zcmMvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9NYWtlZmlsZS5hbQorQEAgLTI4MCw3ICsyODAsNyBAQCBsaWJ1bndpbmRfaHBwYV9sYV9TT1VSQ0VTX2hwcGEgPSAkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2hwcGFfY29tbW9uKQlcCisgCWhwcGEvR3Jlc3VtZS5jIGhwcGEvR3N0ZXAuYworIAorICMgVGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCBnbyBpbmZvIGxpYnVud2luZCBhbmQgbGlidW53aW5kLW1pcHM6Cistbm9pbnN0X0hFQURFUlMgKz0gbWlwcy9pbml0LmggbWlwcy9vZmZzZXRzLmgKKytub2luc3RfSEVBREVSUyArPSBtaXBzL2luaXQuaCBtaXBzL29mZnNldHMuaCBtaXBzL3Vud2luZF9pLmgKKyBsaWJ1bndpbmRfbGFfU09VUkNFU19taXBzX2NvbW1vbiA9ICQobGlidW53aW5kX2xhX1NPVVJDRVNfY29tbW9uKQkgICAgXAorIAltaXBzL2lzX2ZwcmVnLmMgbWlwcy9yZWduYW1lLmMKKyAKK0BAIC0yOTksNyArMjk5LDcgQEAgbGlidW53aW5kX21pcHNfbGFfU09VUkNFU19taXBzID0gJChsaWJ1bndpbmRfbGFfU09VUkNFU19taXBzX2NvbW1vbikJICAgIFwKKyAJbWlwcy9HaXNfc2lnbmFsX2ZyYW1lLmMgbWlwcy9HcmVncy5jIG1pcHMvR3Jlc3VtZS5jIG1pcHMvR3N0ZXAuYworIAorICMgVGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCBnbyBpbmZvIGxpYnVud2luZCBhbmQgbGlidW53aW5kLXRpbGVneDoKKy1ub2luc3RfSEVBREVSUyArPSB0aWxlZ3gvaW5pdC5oIHRpbGVneC9vZmZzZXRzLmgKKytub2luc3RfSEVBREVSUyArPSB0aWxlZ3gvaW5pdC5oIHRpbGVneC9vZmZzZXRzLmggdGlsZWd4L3Vud2luZF9pLmgKKyBsaWJ1bndpbmRfbGFfU09VUkNFU190aWxlZ3hfY29tbW9uID0gJChsaWJ1bndpbmRfbGFfU09VUkNFU19jb21tb24pCSAgICBcCisgCXRpbGVneC9pc19mcHJlZy5jIHRpbGVneC9yZWduYW1lLmMKKyAKK2RpZmYgLS1naXQgYS9zcmMvbWlwcy91bndpbmRfaS5oIGIvc3JjL21pcHMvdW53aW5kX2kuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjMzODJkY2YKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9taXBzL3Vud2luZF9pLmgKK0BAIC0wLDAgKzEsNDMgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2lmbmRlZiB1bndpbmRfaV9oCisrI2RlZmluZSB1bndpbmRfaV9oCisrCisrI2luY2x1ZGUgPHN0ZGludC5oPgorKworKyNpbmNsdWRlIDxsaWJ1bndpbmQtbWlwcy5oPgorKworKyNpbmNsdWRlICJsaWJ1bndpbmRfaS5oIgorKworKyNkZWZpbmUgbWlwc19sb2NrICAgICAgICAgICAgICAgICAgICAgICBVTldfT0JKKGxvY2spCisrI2RlZmluZSBtaXBzX2xvY2FsX3Jlc3VtZSAgICAgICAgICAgICAgIFVOV19PQkoobG9jYWxfcmVzdW1lKQorKyNkZWZpbmUgbWlwc19sb2NhbF9hZGRyX3NwYWNlX2luaXQgICAgICBVTldfT0JKKGxvY2FsX2FkZHJfc3BhY2VfaW5pdCkKKysKKytleHRlcm4gaW50IG1pcHNfbG9jYWxfcmVzdW1lICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfY3Vyc29yX3QgKmN1cnNvciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZyk7CisrCisrZXh0ZXJuIHZvaWQgbWlwc19sb2NhbF9hZGRyX3NwYWNlX2luaXQgKHZvaWQpOworKworKyNlbmRpZiAvKiB1bndpbmRfaV9oICovCitkaWZmIC0tZ2l0IGEvc3JjL3RpbGVneC91bndpbmRfaS5oIGIvc3JjL3RpbGVneC91bndpbmRfaS5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYWFjN2JlMworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL3RpbGVneC91bndpbmRfaS5oCitAQCAtMCwwICsxLDQ0IEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpZm5kZWYgdW53aW5kX2lfaAorKyNkZWZpbmUgdW53aW5kX2lfaAorKworKyNpbmNsdWRlIDxtZW1vcnkuaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrCisrI2luY2x1ZGUgPGxpYnVud2luZC10aWxlZ3guaD4KKysKKysjaW5jbHVkZSAibGlidW53aW5kX2kuaCIKKysKKysjZGVmaW5lIHRpbGVneF9sb2NhbF9yZXN1bWUgICAgICAgICAgICBVTldfT0JKKGxvY2FsX3Jlc3VtZSkKKysjZGVmaW5lIHRpbGVneF9sb2NhbF9hZGRyX3NwYWNlX2luaXQgICBVTldfT0JKKGxvY2FsX2FkZHJfc3BhY2VfaW5pdCkKKysKKytleHRlcm4gaW50IHRpbGVneF9sb2NhbF9yZXN1bWUgKHVud19hZGRyX3NwYWNlX3QgYXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bndfY3Vyc29yX3QgKmN1cnNvciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZyk7CisrCisrZXh0ZXJuIHZvaWQgdGlsZWd4X2xvY2FsX2FkZHJfc3BhY2VfaW5pdCAodm9pZCk7CisrCisrI2VuZGlmIC8qIHVud2luZF9pX2ggKi8KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kXzEuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kXzEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjMxMmYyCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmRfMS4yLmJiCkBAIC0wLDAgKzEsMjQgQEAKK3JlcXVpcmUgbGlidW53aW5kLmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiZWVmY2I1ZDdmNzhmZGM4ZjFlZDE3MmEyNmVhNDIwMmYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWRlMzhmZmJkYzg4YmQ2OTRkMTAwODE4NjU4NzFjZDJiZmJiMDJhZDhlZjllMTYwNmFlZTE4ZDY1NTMyYjk5MiIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQuc2F2YW5uYWgubm9uZ251Lm9yZy9yZWxlYXNlcy9saWJ1bndpbmQvbGlidW53aW5kLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9BZGQtQU9fUkVRVUlSRV9DQVMtdG8tZml4LWJ1aWxkLW9uLUFSTS12Ni5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWJhY2t0cmFjZS1Vc2Utb25seS13aXRoLWdsaWJjLWFuZC11Y2xpYmMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS14ODYtU3R1Yi1vdXQteDg2X2xvY2FsX3Jlc3VtZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1idWlsZC1vbi1taXBzLW11c2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1hZGQta25vYnMtdG8tZGlzYWJsZS1lbmFibGUtdGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1wcGMzMi1Db25zaWRlci11Y29udGV4dC1taXNtYXRjaGVzLWJldHdlZW4tZ2xpYmMtYW5kLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnVud2luZC0xLjEteDMyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1taXBzLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJX2FwcGVuZF9saWJjLW11c2wgPSAiIGZpbGU6Ly9tdXNsLWhlYWRlci1jb25mbGljdC5wYXRjaCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy1tdXNsID0gIiAtLWRpc2FibGUtZG9jdW1lbnRhdGlvbiAtLWRpc2FibGUtdGVzdHMgIgorCisjIGh0dHA6Ly9lcnJvcnMueW9jdG9wcm9qZWN0Lm9yZy9FcnJvcnMvRGV0YWlscy8yMDQ4Ny8KK0FSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjQgPSAiYXJtIgorQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NSA9ICJhcm0iCisKK0xERkxBR1MgKz0gIi1XbCwteixyZWxybywteixub3cgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsZC1pcy1nb2xkJywgJyAtZnVzZS1sZD1iZmQgJywgJycsIGQpfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kX2dpdC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kX2dpdC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjYzN2M1Yy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZF9naXQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1yZXF1aXJlIGxpYnVud2luZC5pbmMKLQotUFYgPSAiMS4xK2dpdCR7U1JDUFZ9IgotCi1TUkNSRVYgPSAiYmM4Njk4ZmQ3ZWQxM2E2MjlhOGVjM2NiMmE4OWJkNzRmOWQ4YjVjMCIKLQotU1JDX1VSSSA9ICJnaXQ6Ly9naXQuc3YuZ251Lm9yZy9saWJ1bndpbmQuZ2l0IFwKLSAgICAgICAgICAgZmlsZTovL0FkZC1BT19SRVFVSVJFX0NBUy10by1maXgtYnVpbGQtb24tQVJNLXY2LnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtYmFja3RyYWNlLVVzZS1vbmx5LXdpdGgtZ2xpYmMtYW5kLXVjbGliYy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLXg4Ni1TdHViLW91dC14ODZfbG9jYWxfcmVzdW1lLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWJ1aWxkLW9uLW1pcHMtbXVzbC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWFkZC1rbm9icy10by1kaXNhYmxlLWVuYWJsZS10ZXN0cy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLXBwYzMyLUNvbnNpZGVyLXVjb250ZXh0LW1pc21hdGNoZXMtYmV0d2Vlbi1nbGliYy1hbmQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vbGlidW53aW5kLTEuMS14MzIucGF0Y2ggXAotICAgICAgICAgICAiCi0KLVNSQ19VUklfYXBwZW5kX2xpYmMtbXVzbCA9ICIgZmlsZTovL211c2wtaGVhZGVyLWNvbmZsaWN0LnBhdGNoIgotRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLW11c2wgPSAiIC0tZGlzYWJsZS1kb2N1bWVudGF0aW9uIC0tZGlzYWJsZS10ZXN0cyAiCi0KLSMgaHR0cDovL2Vycm9ycy55b2N0b3Byb2plY3Qub3JnL0Vycm9ycy9EZXRhaWxzLzIwNDg3LwotQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NCA9ICJhcm0iCi1BUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY1ID0gImFybSIKLQotIyBzZWUgaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTk5ODcKLVNFQ1VSSVRZX0NGTEFHU19yZW1vdmVfYWFyY2g2NCA9ICItZnBpZSIKLVNFQ1VSSVRZX0NGTEFHU19hcHBlbmRfYWFyY2g2NCA9ICIgLWZQSUUiCi0KLVMgPSAiJHtXT1JLRElSfS9naXQiCi0KLUxERkxBR1MgKz0gIi1XbCwteixyZWxybywteixub3cgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsZC1pcy1nb2xkJywgJyAtZnVzZS1sZD1iZmQgJywgJycsIGQpfSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3UvMDAwMS1TdXBwb3J0LWZvci1OSU9TMi1hcmNoaXRlY3R1cmUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1LzAwMDEtU3VwcG9ydC1mb3ItTklPUzItYXJjaGl0ZWN0dXJlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Mjk2MjM4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3UvMDAwMS1TdXBwb3J0LWZvci1OSU9TMi1hcmNoaXRlY3R1cmUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotRnJvbSBmMzdjNWI1NjM3NmQ5YmI1MDZkYTY4YmIxMWQwZDc0NjNlNmU1NjNiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTWFyZWsgVmFzdXQgPG1hcmV4QGRlbnguZGU+Ci1EYXRlOiBUdWUsIDkgRmViIDIwMTYgMDE6NTI6MjYgKzAxMDAKLVN1YmplY3Q6IFtQQVRDSF0gU3VwcG9ydCBmb3IgTklPUzIgYXJjaGl0ZWN0dXJlCi0KLUFkZCBzdXBwb3J0IGZvciB0aGUgQWx0ZXJhIE5JT1MyIENQVSBhcmNoaXJlY3R1cmUuIFRoZSBhdG9taWMgb3BlcmF0aW9ucwotYXJlIGhhbmRsZWQgYnkgdGhlIEdDQy4gVGhlIG1lbW9yeSBiYXJyaWVycyBvbiB0aGlzIHN5c3RlbXMgYXJlIGVudGlyZWx5Ci10cml2aWFsIHRvbywgc2luY2UgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IFNNUCBhdCBhbGwuCi0KLVNpZ25lZC1vZmYtYnk6IE1hcmVrIFZhc3V0IDxtYXJleEBkZW54LmRlPgotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbIGh0dHA6Ly9naXQubHR0bmcub3JnLz9wPXVzZXJzcGFjZS1yY3UuZ2l0O2E9Y29tbWl0O2g9ODU5MDUwYjMwODhhYTNmMGNiNTlkN2Y1MWNlMjRiOWEwZjE4ZmFhNSBdCi0KLS0tLQotIExJQ0VOU0UgICAgICAgICAgICAgIHwgIDEgKwotIFJFQURNRS5tZCAgICAgICAgICAgIHwgIDEgKwotIGNvbmZpZ3VyZS5hYyAgICAgICAgIHwgIDEgKwotIHVyY3UvYXJjaC9uaW9zMi5oICAgIHwgNDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotIHVyY3UvdWF0b21pYy9uaW9zMi5oIHwgMzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKLSA1IGZpbGVzIGNoYW5nZWQsIDc1IGluc2VydGlvbnMoKykKLSBjcmVhdGUgbW9kZSAxMDA2NDQgdXJjdS9hcmNoL25pb3MyLmgKLSBjcmVhdGUgbW9kZSAxMDA2NDQgdXJjdS91YXRvbWljL25pb3MyLmgKLQotZGlmZiAtLWdpdCBhL0xJQ0VOU0UgYi9MSUNFTlNFCi1pbmRleCAzMTQ3MDk0Li5hMDZmZGNjIDEwMDY0NAotLS0tIGEvTElDRU5TRQotKysrIGIvTElDRU5TRQotQEAgLTQ1LDYgKzQ1LDcgQEAgY29tcGlsZXIuaAotIGFyY2gvczM5MC5oCi0gdWF0b21pYy9hbHBoYS5oCi0gdWF0b21pYy9taXBzLmgKLSt1YXRvbWljL25pb3MyLmgKLSB1YXRvbWljL3MzOTAuaAotIHN5c3RlbS5oCi0gCi1kaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCi1pbmRleCBmNmIyOTBmLi42ZmU5YzFlIDEwMDY0NAotLS0tIGEvUkVBRE1FLm1kCi0rKysgYi9SRUFETUUubWQKLUBAIC00Myw2ICs0Myw3IEBAIEN1cnJlbnRseSwgdGhlIGZvbGxvd2luZyBhcmNoaXRlY3R1cmVzIGFyZSBzdXBwb3J0ZWQ6Ci0gICAtIFMzOTAsIFMzOTB4Ci0gICAtIEFSTSAzMi82NAotICAgLSBNSVBTCi0rICAtIE5JT1MyCi0gICAtIEFscGhhCi0gICAtIGlhNjQKLSAgIC0gU3BhcmN2OSAzMi82NAotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXggZWViZWQ1Ni4uODAxNGUxZCAxMDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFjCi1AQCAtMTM2LDYgKzEzNiw3IEBAIEFTX0NBU0UoWyRob3N0X2NwdV0sCi0gCVthcm0qXSwgW0FSQ0hUWVBFPSJhcm0iXSwKLSAJW2FhcmNoNjQqXSwgW0FSQ0hUWVBFPSJhYXJjaDY0Il0sCi0gCVttaXBzKl0sIFtBUkNIVFlQRT0ibWlwcyJdLAotKwlbbmlvczIqXSwgW0FSQ0hUWVBFPSJuaW9zMiJdLAotIAlbdGlsZSpdLCBbQVJDSFRZUEU9InRpbGUiXSwKLSAJW2hwcGEqXSwgW0FSQ0hUWVBFPSJocHBhIl0sCi0gCVtBUkNIVFlQRT0idW5rbm93biJdCi1kaWZmIC0tZ2l0IGEvdXJjdS9hcmNoL25pb3MyLmggYi91cmN1L2FyY2gvbmlvczIuaAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLmI0ZjNlNTAKLS0tLSAvZGV2L251bGwKLSsrKyBiL3VyY3UvYXJjaC9uaW9zMi5oCi1AQCAtMCwwICsxLDQwIEBACi0rI2lmbmRlZiBfVVJDVV9BUkNIX05JT1MyX0gKLSsjZGVmaW5lIF9VUkNVX0FSQ0hfTklPUzJfSAotKwotKy8qCi0rICogYXJjaF9uaW9zMi5oOiB0cml2aWFsIGRlZmluaXRpb25zIGZvciB0aGUgTklPUzIgYXJjaGl0ZWN0dXJlLgotKyAqCi0rICogQ29weXJpZ2h0IChjKSAyMDE2IE1hcmVrIFZhc3V0IDxtYXJleEBkZW54LmRlPgotKyAqCi0rICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsgKgotKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKyAqCi0rICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCi0rICovCi0rCi0rI2luY2x1ZGUgPHVyY3UvY29tcGlsZXIuaD4KLSsjaW5jbHVkZSA8dXJjdS9jb25maWcuaD4KLSsjaW5jbHVkZSA8dXJjdS9zeXNjYWxsLWNvbXBhdC5oPgotKwotKyNpZmRlZiBfX2NwbHVzcGx1cwotK2V4dGVybiAiQyIgewotKyNlbmRpZgotKwotKyNkZWZpbmUgY21tX21iKCkJY21tX2JhcnJpZXIoKQotKwotKyNpZmRlZiBfX2NwbHVzcGx1cwotK30KLSsjZW5kaWYKLSsKLSsjaW5jbHVkZSA8dXJjdS9hcmNoL2dlbmVyaWMuaD4KLSsKLSsjZW5kaWYgLyogX1VSQ1VfQVJDSF9OSU9TMl9IICovCi1kaWZmIC0tZ2l0IGEvdXJjdS91YXRvbWljL25pb3MyLmggYi91cmN1L3VhdG9taWMvbmlvczIuaAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjViM2MzMDMKLS0tLSAvZGV2L251bGwKLSsrKyBiL3VyY3UvdWF0b21pYy9uaW9zMi5oCi1AQCAtMCwwICsxLDMyIEBACi0rI2lmbmRlZiBfVVJDVV9VQVRPTUlDX0FSQ0hfTklPUzJfSAotKyNkZWZpbmUgX1VSQ1VfVUFUT01JQ19BUkNIX05JT1MyX0gKLSsKLSsvKgotKyAqIEF0b21pYyBleGNoYW5nZSBvcGVyYXRpb25zIGZvciB0aGUgTklPUzIgYXJjaGl0ZWN0dXJlLiBMZXQgR0NDIGRvIGl0LgotKyAqCi0rICogQ29weXJpZ2h0IChjKSAyMDE2IE1hcmVrIFZhc3V0IDxtYXJleEBkZW54LmRlPgotKyAqCi0rICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bwotKyAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCi0rICogcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCi0rICogc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSsgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotKyAqCi0rICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSsgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSsgKgotKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0rICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0rICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0rICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0rICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwotKyAqIElOIFRIRSBTT0ZUV0FSRS4KLSsgKi8KLSsKLSsjaW5jbHVkZSA8dXJjdS9jb21waWxlci5oPgotKyNpbmNsdWRlIDx1cmN1L3N5c3RlbS5oPgotKyNpbmNsdWRlIDx1cmN1L3VhdG9taWMvZ2VuZXJpYy5oPgotKwotKyNlbmRpZiAvKiBfVVJDVV9VQVRPTUlDX0FSQ0hfTklPUzJfSCAqLwotLS0gCi0yLjEwLjIKLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdV8wLjEwLjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1XzAuMTAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWNiMjBiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdV8wLjEwLjAuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJVc2Vyc3BhY2UgUkNVIChyZWFkLWNvcHktdXBkYXRlKSBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL2x0dG5nLm9yZy91cmN1IgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vbHR0bmcub3JnL3Byb2plY3QvaXNzdWVzIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWU1NDhkMjg3MzcyODlkNzVhOGYxZTAxYmEyZmQ3ODI1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy91cmN1Lmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0zMjttZDU9NGRlMGQ2OGQzYTk5NzY0MzcxNTAzNmQyMjA5YWUxZDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS91cmN1L3VhdG9taWMveDg2Lmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0yMTttZDU9NThlNTBiYmQ4YTJmMDczYmI1NTAwZTY1NTRhZjBkMGIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2x0dG5nLm9yZy9maWxlcy91cmN1L3VzZXJzcGFjZS1yY3UtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjY5ZGFiODViNjkyOWMzNzgzMzhiOTUwNGFkYzZhZWE3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdjYjU4YTdiYTUxNTExOTgwODdmMDI1ZGM4ZDE5ZDg5MThlOWM2ZDU2NzcyZjAzOTY5NmMxMTFkOWFhZDMxOTAiCisKK1MgPSAiJHtXT1JLRElSfS91c2Vyc3BhY2UtcmN1LSR7UFZ9IgoraW5oZXJpdCBhdXRvdG9vbHMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3VfMC45LjMuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1XzAuOS4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDg2ZTBhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3VfMC45LjMuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1TVU1NQVJZID0gIlVzZXJzcGFjZSBSQ1UgKHJlYWQtY29weS11cGRhdGUpIGxpYnJhcnkiCi1IT01FUEFHRSA9ICJodHRwOi8vbHR0bmcub3JnL3VyY3UiCi1CVUdUUkFDS0VSID0gImh0dHA6Ly9sdHRuZy5vcmcvcHJvamVjdC9pc3N1ZXMiCi0KLUxJQ0VOU0UgPSAiTEdQTHYyLjErICYgTUlULXN0eWxlIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZTU0OGQyODczNzI4OWQ3NWE4ZjFlMDFiYTJmZDc4MjUgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdXJjdS5oO2JlZ2lubGluZT00O2VuZGxpbmU9MzI7bWQ1PTRkZTBkNjhkM2E5OTc2NDM3MTUwMzZkMjIwOWFlMWQ5IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3VyY3UvdWF0b21pYy94ODYuaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTIxO21kNT01OGU1MGJiZDhhMmYwNzNiYjU1MDBlNjU1NGFmMGQwYiIKLQotU1JDX1VSSSA9ICJodHRwOi8vbHR0bmcub3JnL2ZpbGVzL3VyY3UvdXNlcnNwYWNlLXJjdS0ke1BWfS50YXIuYnoyIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtU3VwcG9ydC1mb3ItTklPUzItYXJjaGl0ZWN0dXJlLnBhdGNoIFwKLSAgICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiOTIwOTcwZTM1YTFhMjA2NmM4MzUzZWFiZmVhYjg3MzAiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWJjZTMyZTZhNmM5NjdmZWY2ZDM3YWRhYWRmMzNkZjE5ODc4ZDY5NjczZjllZjlkM2YyNDcwZTBjNmVkNDAwNiIKLQotUyA9ICIke1dPUktESVJ9L3VzZXJzcGFjZS1yY3UtJHtQVn0iCi1DRkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtRF9HTlVfU09VUkNFIgotaW5oZXJpdCBhdXRvdG9vbHMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHRfMS4xLjI5LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdF8xLjEuMjkuYmIKaW5kZXggZDI3YzcwNi4uNWIxMWJjMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdF8xLjEuMjkuYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdF8xLjEuMjkuYmIKQEAgLTgsNyArOCw3IEBACiBTRUNUSU9OID0gImxpYnMiCiBERVBFTkRTID0gImxpYnhtbDIiCiAKLVNSQ19VUkkgPSAiZnRwOi8veG1sc29mdC5vcmcvbGlieHNsdC9saWJ4c2x0LSR7UFZ9LnRhci5neiBcCitTUkNfVVJJID0gImh0dHA6Ly94bWxzb2Z0Lm9yZy9zb3VyY2VzL2xpYnhzbHQtJHtQVn0udGFyLmd6IFwKICAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZ19maXgucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1Vc2UtcGtnLWNvbmZpZy10by1maW5kLWdjcnlwdC1hbmQtbGlieG1sMi5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLUxpbmstbGlicmFyaWVzLXdpdGgtbGlibS5wYXRjaCBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHo0L2ZpbGVzLzAwMDEtdGVzdHMtTWFrZWZpbGUtZG9uLXQtdXNlLUxJQkRJUi1hcy12YXJpYWJsZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sejQvZmlsZXMvMDAwMS10ZXN0cy1NYWtlZmlsZS1kb24tdC11c2UtTElCRElSLWFzLXZhcmlhYmxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNDk0ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHo0L2ZpbGVzLzAwMDEtdGVzdHMtTWFrZWZpbGUtZG9uLXQtdXNlLUxJQkRJUi1hcy12YXJpYWJsZS5wYXRjaApAQCAtMCwwICsxLDgyIEBACitGcm9tIGQ0NzY4ZDllMjliODA1MDk2YTg2YWExM2MwZDMwZWU4MjE1YWY0ZGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAxNyAxMjowNzowOSArMDMwMAorU3ViamVjdDogW1BBVENIXSB0ZXN0cy9NYWtlZmlsZTogZG9uJ3QgdXNlIExJQkRJUiBhcyB2YXJpYWJsZQorCitMSUJESVIgbWF5IGJlIG92ZXJyaWRlbiB3aXRoIGEgZW52aXJvbm1lbnQgdmFyaWFibGU6IEluIHRoaXMgY2FzZSBtYWtlCitjbGVhbiBicmVha3MuIFVzZSBhbm90aGVyIHZhcmlhYmxlIG5hbWUuCisKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CistLS0KKyB0ZXN0cy9NYWtlZmlsZSB8IDI2ICsrKysrKysrKysrKystLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUgYi90ZXN0cy9NYWtlZmlsZQoraW5kZXggOTdmYTc4Mi4uNTFkZDAzOCAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlCisrKysgYi90ZXN0cy9NYWtlZmlsZQorQEAgLTMyLDcgKzMyLDcgQEAgREVTVERJUiA/PQorIFBSRUZJWCAgPz0gL3Vzci9sb2NhbAorIEJJTkRJUiAgOj0gJChQUkVGSVgpL2JpbgorIE1BTkRJUiAgOj0gJChQUkVGSVgpL3NoYXJlL21hbi9tYW4xCistTElCRElSICA6PSAuLi9saWIKKytMWjRESVIgIDo9IC4uL2xpYgorIFBSR0RJUiAgOj0gLi4vcHJvZ3JhbXMKKyBWT0lEICAgIDo9IC9kZXYvbnVsbAorIFRFU1RESVIgOj0gdmVyc2lvbnNUZXN0CitAQCAtNDMsNyArNDMsNyBAQCBDRkxBR1MgICs9IC1nIC1XYWxsIC1XZXh0cmEgLVd1bmRlZiAtV2Nhc3QtcXVhbCAtV2Nhc3QtYWxpZ24gLVdzaGFkb3cgLVdzd2l0Y2gtZQorICAgICAgICAgICAgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQgLVdzdHJpY3QtcHJvdG90eXBlcyBcCisgICAgICAgICAgICAtV3BvaW50ZXItYXJpdGggLVdzdHJpY3QtYWxpYXNpbmc9MQorIENGTEFHUyAgKz0gJChNT1JFRkxBR1MpCistQ1BQRkxBR1M6PSAtSSQoTElCRElSKSAtSSQoUFJHRElSKSAtRFhYSF9OQU1FU1BBQ0U9TFo0XworK0NQUEZMQUdTOj0gLUkkKExaNERJUikgLUkkKFBSR0RJUikgLURYWEhfTkFNRVNQQUNFPUxaNF8KKyBGTEFHUyAgICA9ICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkKExERkxBR1MpCisgCisgCitAQCAtNzksMzEgKzc5LDMxIEBAIGx6NGMzMjogICAjIGNyZWF0ZSBhIDMyLWJpdHMgdmVyc2lvbiBmb3IgMzIvNjQgaW50ZXJvcCB0ZXN0cworIAkkKE1BS0UpIC1DICQoUFJHRElSKSBjbGVhbiAkQCBDRkxBR1M9Ii1tMzIgJChDRkxBR1MpIgorIAljcCAkKExaNCkgJChMWjQpYzMyCisgCistZnVsbGJlbmNoICA6ICQoTElCRElSKS9sejQubyAkKExJQkRJUikvbHo0aGMubyAkKExJQkRJUikvbHo0ZnJhbWUubyAkKExJQkRJUikveHhoYXNoLm8gZnVsbGJlbmNoLmMKKytmdWxsYmVuY2ggIDogJChMWjRESVIpL2x6NC5vICQoTFo0RElSKS9sejRoYy5vICQoTFo0RElSKS9sejRmcmFtZS5vICQoTFo0RElSKS94eGhhc2gubyBmdWxsYmVuY2guYworIAkkKENDKSAkKEZMQUdTKSAkXiAtbyAkQCQoRVhUKQorIAorLWZ1bGxiZW5jaC1saWI6IGZ1bGxiZW5jaC5jICQoTElCRElSKS94eGhhc2guYworLQkkKE1BS0UpIC1DICQoTElCRElSKSBsaWJsejQuYQorLQkkKENDKSAkKEZMQUdTKSAkXiAtbyAkQCQoRVhUKSAkKExJQkRJUikvbGlibHo0LmEKKytmdWxsYmVuY2gtbGliOiBmdWxsYmVuY2guYyAkKExaNERJUikveHhoYXNoLmMKKysJJChNQUtFKSAtQyAkKExaNERJUikgbGlibHo0LmEKKysJJChDQykgJChGTEFHUykgJF4gLW8gJEAkKEVYVCkgJChMWjRESVIpL2xpYmx6NC5hCisgCistZnVsbGJlbmNoLWRsbDogZnVsbGJlbmNoLmMgJChMSUJESVIpL3h4aGFzaC5jCistCSQoTUFLRSkgLUMgJChMSUJESVIpIGxpYmx6NAorLQkkKENDKSAkKEZMQUdTKSAkXiAtbyAkQCQoRVhUKSAtRExaNF9ETExfSU1QT1JUPTEgJChMSUJESVIpL2RsbC9saWJsejQuZGxsCisrZnVsbGJlbmNoLWRsbDogZnVsbGJlbmNoLmMgJChMWjRESVIpL3h4aGFzaC5jCisrCSQoTUFLRSkgLUMgJChMWjRESVIpIGxpYmx6NAorKwkkKENDKSAkKEZMQUdTKSAkXiAtbyAkQCQoRVhUKSAtRExaNF9ETExfSU1QT1JUPTEgJChMWjRESVIpL2RsbC9saWJsejQuZGxsCisgCistZnV6emVyICA6ICQoTElCRElSKS9sejQubyAkKExJQkRJUikvbHo0aGMubyAkKExJQkRJUikveHhoYXNoLm8gZnV6emVyLmMKKytmdXp6ZXIgIDogJChMWjRESVIpL2x6NC5vICQoTFo0RElSKS9sejRoYy5vICQoTFo0RElSKS94eGhhc2gubyBmdXp6ZXIuYworIAkkKENDKSAkKEZMQUdTKSAkXiAtbyAkQCQoRVhUKQorIAorLWZyYW1ldGVzdDogJChMSUJESVIpL2x6NGZyYW1lLm8gJChMSUJESVIpL2x6NC5vICQoTElCRElSKS9sejRoYy5vICQoTElCRElSKS94eGhhc2gubyBmcmFtZXRlc3QuYworK2ZyYW1ldGVzdDogJChMWjRESVIpL2x6NGZyYW1lLm8gJChMWjRESVIpL2x6NC5vICQoTFo0RElSKS9sejRoYy5vICQoTFo0RElSKS94eGhhc2gubyBmcmFtZXRlc3QuYworIAkkKENDKSAkKEZMQUdTKSAkXiAtbyAkQCQoRVhUKQorIAorLWZhc3R0ZXN0OiAkKExJQkRJUikvbHo0Lm8gZmFzdHRlc3QuYworK2Zhc3R0ZXN0OiAkKExaNERJUikvbHo0Lm8gZmFzdHRlc3QuYworIAkkKENDKSAkKEZMQUdTKSAkXiAtbyAkQCQoRVhUKQorIAorIGRhdGFnZW4gOiAkKFBSR0RJUikvZGF0YWdlbi5jIGRhdGFnZW5jbGkuYworIAkkKENDKSAkKEZMQUdTKSAtSSQoUFJHRElSKSAkXiAtbyAkQCQoRVhUKQorIAorIGNsZWFuOgorLQlAJChNQUtFKSAtQyAkKExJQkRJUikgJEAgPiAkKFZPSUQpCisrCUAkKE1BS0UpIC1DICQoTFo0RElSKSAkQCA+ICQoVk9JRCkKKyAJQCQoTUFLRSkgLUMgJChQUkdESVIpICRAID4gJChWT0lEKQorIAlAJChSTSkgY29yZSAqLm8gKi50ZXN0IHRtcCogXAorICAgICAgICAgZnVsbGJlbmNoLWRsbCQoRVhUKSBmdWxsYmVuY2gtbGliJChFWFQpIFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6NC9maWxlcy9ydW4tcHRlc3QgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHo0L2ZpbGVzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2JmYzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6NC9maWxlcy9ydW4tcHRlc3QKQEAgLTAsMCArMSw0MyBAQAorIyEvYmluL3NoCitjZCB0ZXN0c3VpdGUKKworZWNobyAtbiAiLS0tLSB0ZXN0LWx6NCAtLS0tIgorbWFrZSAtQyB0ZXN0cyB0ZXN0LWx6NCAgPiAvZGV2L251bGwgMj4mMQorCitpZiBbICQ/IC1lcSAwIF07IHRoZW4KKyAgZWNobyAiUEFTUyIKK2Vsc2UKKyAgZWNobyAiRkFJTCIKK2ZpCisKK2VjaG8gLW4gIi0tLS0gdGVzdC1mYXN0dGVzdCAtLS0tIgorbWFrZSAtQyB0ZXN0cyB0ZXN0LWZhc3R0ZXN0ICA+IC9kZXYvbnVsbCAyPiYxCitpZiBbICQ/IC1lcSAwIF07IHRoZW4KKyAgZWNobyAiUEFTUyIKK2Vsc2UKKyAgZWNobyAiRkFJTCIKK2ZpCisKK2VjaG8gLW4gIi0tLS0gdGVzdC1mcmFtZXRlc3QgLS0tLSIKK21ha2UgLUMgdGVzdHMgdGVzdC1mcmFtZXRlc3QgPiAvZGV2L251bGwgMj4mMQoraWYgWyAkPyAtZXEgMCBdOyB0aGVuCisgIGVjaG8gIlBBU1MiCitlbHNlCisgIGVjaG8gIkZBSUwiCitmaQorCitlY2hvIC1uICItLS0tIHRlc3QtZnVsbGJlbmNoIC0tLS0iCittYWtlIC1DIHRlc3RzIHRlc3QtZnVsbGJlbmNoID4gIC9kZXYvbnVsbCAyPiYxCitpZiBbICQ/IC1lcSAwIF07IHRoZW4KKyAgZWNobyAiUEFTUyIKK2Vsc2UKKyAgZWNobyAiRkFJTCIKK2ZpCisKK2VjaG8gLW4gIi0tLS0gdGVzdC1mdXp6ZXIgLS0tLSIKK21ha2UgLUMgdGVzdHMgdGVzdC1mdXp6ZXIgPiAgL2Rldi9udWxsIDI+JjEKK2lmIFsgJD8gLWVxIDAgXTsgdGhlbgorICBlY2hvICJQQVNTIgorZWxzZQorICBlY2hvICJGQUlMIgorZmkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sejQvbHo0LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6NC9sejQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYzVhN2EuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6NC9sejQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1TVU1NQVJZID0gIkV4dHJlbWVseSBGYXN0IENvbXByZXNzaW9uIGFsZ29yaXRobSIKLURFU0NSSVBUSU9OID0gIkxaNCBpcyBhIHZlcnkgZmFzdCBsb3NzbGVzcyBjb21wcmVzc2lvbiBhbGdvcml0aG0sIHByb3ZpZGluZyBjb21wcmVzc2lvbiBzcGVlZCBhdCA0MDAgTUIvcyBwZXIgY29yZSwgc2NhbGFibGUgd2l0aCBtdWx0aS1jb3JlcyBDUFUuIEl0IGFsc28gZmVhdHVyZXMgYW4gZXh0cmVtZWx5IGZhc3QgZGVjb2Rlciwgd2l0aCBzcGVlZCBpbiBtdWx0aXBsZSBHQi9zIHBlciBjb3JlLCB0eXBpY2FsbHkgcmVhY2hpbmcgUkFNIHNwZWVkIGxpbWl0cyBvbiBtdWx0aS1jb3JlIHN5c3RlbXMuIgotCi1MSUNFTlNFID0gIkJTRCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2xpYi9MSUNFTlNFO21kNT0wYjBkMDYzZjM3YTQ0NzdiNTRhZjI0NTk0NzdkY2FmZCIKLQotU1JDUkVWID0gImQ4NmRjOTE2NzcxYzEyNmFmYjc5NzYzN2RkYTlmNjQyMWMwY2I5OTgiCi0KLVBWID0gIjEzMStnaXQke1NSQ1BWfSIKLQotU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL0N5YW40OTczL2x6NC5naXQiCi0KLVMgPSAiJHtXT1JLRElSfS9naXQiCi0KLUVYVFJBX09FTUFLRSA9ICJQUkVGSVg9JHtwcmVmaXh9IENDPScke0NDfScgREVTVERJUj0ke0R9IExJQkRJUj0ke2xpYmRpcn0gSU5DTFVERURJUj0ke2luY2x1ZGVkaXJ9IgotCi1kb19pbnN0YWxsKCkgewotCW9lX3J1bm1ha2UgaW5zdGFsbAotfQotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHo0L2x6NF8xLjcuNC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sejQvbHo0XzEuNy40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YTFhYjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHo0L2x6NF8xLjcuNC5iYgpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIkV4dHJlbWVseSBGYXN0IENvbXByZXNzaW9uIGFsZ29yaXRobSIKK0RFU0NSSVBUSU9OID0gIkxaNCBpcyBhIHZlcnkgZmFzdCBsb3NzbGVzcyBjb21wcmVzc2lvbiBhbGdvcml0aG0sIHByb3ZpZGluZyBjb21wcmVzc2lvbiBzcGVlZCBhdCA0MDAgTUIvcyBwZXIgY29yZSwgc2NhbGFibGUgd2l0aCBtdWx0aS1jb3JlcyBDUFUuIEl0IGFsc28gZmVhdHVyZXMgYW4gZXh0cmVtZWx5IGZhc3QgZGVjb2Rlciwgd2l0aCBzcGVlZCBpbiBtdWx0aXBsZSBHQi9zIHBlciBjb3JlLCB0eXBpY2FsbHkgcmVhY2hpbmcgUkFNIHNwZWVkIGxpbWl0cyBvbiBtdWx0aS1jb3JlIHN5c3RlbXMuIgorCitMSUNFTlNFID0gIkJTRCB8IEJTRC0yLUNsYXVzZSB8IEdQTC0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9saWIvTElDRU5TRTttZDU9ZWJjMmVhNDgxNGE2NGRlNzcwOGYxNTcxOTA0YjMyY2NcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wcm9ncmFtcy9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9MSUNFTlNFO21kNT03ZjI4NTdkNThiZWZmNmQwNDEzN2JmOWIwOWU1ZmZiNiIKKworUEUgPSAiMSIKKworU1JDUkVWID0gIjdiYjY0ZmYyYjY5YTlmODM2N2RlOWFiNDgzY2RhZGY0MmI0YzFiNjUiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9sejQvbHo0LmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXRlc3RzLU1ha2VmaWxlLWRvbi10LXVzZS1MSUJESVItYXMtdmFyaWFibGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyIKK1VQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gInYoP1A8cHZlcj4uKikiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0VYVFJBX09FTUFLRSA9ICJQUkVGSVg9JHtwcmVmaXh9IENDPScke0NDfScgREVTVERJUj0ke0R9IExJQkRJUj0ke2xpYmRpcn0gSU5DTFVERURJUj0ke2luY2x1ZGVkaXJ9IgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6by8wMDAxLUFkZC1wa2djb25maWdkaXItdG8tc29sdmUtdGhlLXVuZGVmaW5lLWVycm9yLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vMDAwMS1BZGQtcGtnY29uZmlnZGlyLXRvLXNvbHZlLXRoZS11bmRlZmluZS1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjM1YTE1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vMDAwMS1BZGQtcGtnY29uZmlnZGlyLXRvLXNvbHZlLXRoZS11bmRlZmluZS1lcnJvci5wYXRjaApAQCAtMCwwICsxLDI3IEBACitGcm9tIGU3MzBiZmQ3YzJkM2E0YjVmMzYwNTg3ODU5OWNiOWIyMGQzMWIxZmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGYW4gWGluIDxmYW4ueGluQGpwLmZ1aml0c3UuY29tPgorRGF0ZTogRnJpLCAyIEp1biAyMDE3IDExOjUyOjI1ICswOTAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZCBwa2djb25maWdkaXIgdG8gc29sdmUgdGhlIHVuZGVmaW5lIGVycm9yLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRmFuIFhpbiA8ZmFuLnhpbkBqcC5mdWppdHN1LmNvbT4KKy0tLQorIE1ha2VmaWxlLmFtIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCBlNGQzODNiLi5jNzUwMjNkIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMTQsNiArMTQsNyBAQCBBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIC1JJCh0b3Bfc3JjZGlyKQorIExEQUREID0gc3JjL2xpYmx6bzIubGEKKyBsaWJfTFRMSUJSQVJJRVMgPQorIG5vaW5zdF9QUk9HUkFNUyA9CisrcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworIHBrZ2NvbmZpZ19EQVRBID0gbHpvMi5wYworIAorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6b18yLjA5LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem9fMi4wOS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk3ODYxNy4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6b18yLjA5LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotU1VNTUFSWSA9ICJMb3NzbGVzcyBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkiCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vIgotU0VDVElPTiA9ICJsaWJzIgotTElDRU5TRSA9ICJHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbHpvX2luaXQuYztiZWdpbmxpbmU9NTtlbmRsaW5lPTI1O21kNT0zNTUwMjM4MzVhOWI5ZWViNzBhYjg5NTM5NWU5NTFmZiIKLQotU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vZG93bmxvYWQvbHpvLSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLVVzZS1tZW1jcHktaW5zdGVhZC1vZi1yZWludmVudGluZy1pdC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9hY2luY2x1ZGUubTQgXAotICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKLSAgICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiYzdmZmM5YTEwM2FmZTJkMWJiYTBiMDE1ZTdhYTg4N2YiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjI5NGE3Y2VkMzEzMDYzYzA1N2M1MDQyNTdmNDM3YzgzMzVjNDFiZmVlZDIzNTMxZWU0ZTZhMmI4N2JjYjM0YyIKLQotaW5oZXJpdCBhdXRvdG9vbHMgcHRlc3QKLQotRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNoYXJlZCIKLQotZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewotCWNwICR7V09SS0RJUn0vYWNpbmNsdWRlLm00ICR7U30vCi19Ci0KLWRvX2luc3RhbGxfcHRlc3QoKSB7Ci0JdD0ke0R9JHtQVEVTVF9QQVRIfQotCWNwICR7U30vdXRpbC9jaGVjay5zaCAkdAotCWNwICR7Qn0vbWluaWx6by90ZXN0bWluaSAkdAotCWZvciBpIGluIHRlc3RzL2FsaWduIHRlc3RzL2Noa3N1bSBsem90ZXN0L2x6b3Rlc3QgZXhhbXBsZXMvc2ltcGxlCi0JCWRvIGNwICR7Qn0vYGRpcm5hbWUgJGlgLy5saWJzL2BiYXNlbmFtZSAkaWAgJHQ7IFwKLQlkb25lCi19Ci0KLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem9fMi4xMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvXzIuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkwZDIzMAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvXzIuMTAuYmIKQEAgLTAsMCArMSwzNiBAQAorU1VNTUFSWSA9ICJMb3NzbGVzcyBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbHpvX2luaXQuYztiZWdpbmxpbmU9NTtlbmRsaW5lPTI1O21kNT05YWU2OTdjYTAxODI5YjBhMzgzYzVkMmQxNjNlMDEwOCIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vZG93bmxvYWQvbHpvLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVzZS1tZW1jcHktaW5zdGVhZC1vZi1yZWludmVudGluZy1pdC5wYXRjaCBcCisJICAgZmlsZTovLzAwMDEtQWRkLXBrZ2NvbmZpZ2Rpci10by1zb2x2ZS10aGUtdW5kZWZpbmUtZXJyb3IucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWNpbmNsdWRlLm00IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjM5ZDNmM2Y5YzU1Yzg3YjFlNWQ2ODg4ZTE0MjBmNGI1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImMwZjg5Mjk0MzIwODI2NmY5YjY1NDNiM2FlMzA4ZmFiNjI4NGM1YzkwZTYyNzkzMTQ0NmZiNDliNDIyMWEwNzIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0CisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zaGFyZWQiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwljcCAke1dPUktESVJ9L2FjaW5jbHVkZS5tNCAke1N9LworfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCXQ9JHtEfSR7UFRFU1RfUEFUSH0KKwljcCAke1N9L3V0aWwvY2hlY2suc2ggJHQKKwljcCAke0J9L21pbmlsem8vdGVzdG1pbmkgJHQKKwlmb3IgaSBpbiB0ZXN0cy9hbGlnbiB0ZXN0cy9jaGtzdW0gbHpvdGVzdC9sem90ZXN0IGV4YW1wbGVzL3NpbXBsZQorCQlkbyBjcCAke0J9L2BkaXJuYW1lICRpYC8ubGlicy9gYmFzZW5hbWUgJGlgICR0OyBcCisJZG9uZQorfQorCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvbmV0dGxlLTMuMy9kbG9wZW4tdGVzdC5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvbmV0dGxlLTMuMy9kbG9wZW4tdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGYwYjdlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9uZXR0bGUtMy4zL2Rsb3Blbi10ZXN0LnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1JlcGxhY2UgcmVsYXRpdmUgcGF0aCBvZiBsaWJuZXR0bGUuc28gd2l0aCBhYnNvbHV0ZSBwYXRoIHNvIHRoZSB0ZXN0Citwcm9ncmFtIGNhbiBmaW5kIGl0LgorUmVsYXRpdmUgcGF0aHMgYXJlIG5vdCBzdWl0YWJsZSwgYXMgdGhlIGZvbGRlciBzdHJ1Y3VyZSBmb3IgcHRlc3QKK2lzIGRpZmZlcmVudCBmcm9tIHRoZSBvbmUgZXhwZWN0ZWQgYnkgdGhlIG5ldHRsZSB0ZXN0c3VpdGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEp1cm8gQnlzdHJpY2t5IDxqdXJvLmJ5c3RyaWNreUBpbnRlbC5jb20+CisKKy0tLSBhL3Rlc3RzdWl0ZS9kbG9wZW4tdGVzdC5jCTIwMTYtMTAtMDEgMDA6Mjg6MzguMDAwMDAwMDAwIC0wNzAwCisrKysgYi90ZXN0c3VpdGUvZGxvcGVuLXRlc3QuYwkyMDE3LTEwLTEzIDExOjA4OjU3LjIyNzU3Mjg2MCAtMDcwMAorQEAgLTksNyArOSw3IEBACisgbWFpbiAoaW50IGFyZ2MgVU5VU0VELCBjaGFyICoqYXJndiBVTlVTRUQpCisgeworICNpZiBIQVZFX0xJQkRMCistICB2b2lkICpoYW5kbGUgPSBkbG9wZW4gKCIuLi9saWJuZXR0bGUuc28iLCBSVExEX05PVyk7CisrICB2b2lkICpoYW5kbGUgPSBkbG9wZW4gKCIvdXNyL2xpYi9saWJuZXR0bGUuc28iLCBSVExEX05PVyk7CisgICBpbnQgKCpnZXRfdmVyc2lvbikodm9pZCk7CisgICBpZiAoIWhhbmRsZSkKKyAgICAgewpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9uZXR0bGVfMy4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9uZXR0bGVfMy4zLmJiCmluZGV4IGI3NmJhYmYuLjM5NTE2NzggMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvbmV0dGxlXzMuMy5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL25ldHRsZV8zLjMuYmIKQEAgLTExLDUgKzExLDkgQEAKICAgICAgICAgICAgIGZpbGU6Ly9jaGVjay1oZWFkZXItZmlsZXMtb2Ytb3BlbnNzbC1vbmx5LWlmLWVuYWJsZV8ucGF0Y2ggXAogICAgICAgICAgICAgIgogCitTUkNfVVJJX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiXAorICAgICAgICAgICAgZmlsZTovL2Rsb3Blbi10ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgICIKKwogU1JDX1VSSVttZDVzdW1dID0gIjEwZjk2OWY3OGE0NjM3MDRhZTczNTI5OTc4MTQ4ZGJlIgogU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ2OTQyNjI3ZDVkMGNhMTE3MjBmZWMxOGQ4MWZjMzhmN2VmODM3ZWE0MTk3YzFmNjMwZTcxY2UwZDQ3MGIxMWUiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnB0aC9ucHRoXzEuMy5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ucHRoL25wdGhfMS4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGZjMDY0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ucHRoL25wdGhfMS4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotU1VNTUFSWSA9ICJOZXcgR05VIFBvcnRhYmxlIFRocmVhZHMgbGlicmFyeSIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnL3NvZnR3YXJlL3B0aC8iCi1TRUNUSU9OID0gImxpYnMiCi1MSUNFTlNFID0gIkxHUEx2MysgJiBHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gIlwKLSAgICBmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmVcCi0gICAgZmlsZTovL0NPUFlJTkcuTEVTU0VSO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNlwKLSAgICAiCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9nbnVwZy5vcmcvZG93bmxvYWQvaW5kZXguaHRtbCIKLVNSQ19VUkkgPSAiJHtHTlVQR19NSVJST1J9L25wdGgvbnB0aC0ke1BWfS50YXIuYnoyIFwKLSAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCBcCi0gICAgICAgICAgIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiZWZlMTUyNGM1MzY3MGI1NzU1ZGMyNzg5M2QyZDY4YTAiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmNhODE5NDA0MzZhZWQwNzM0ZWI4ZDBmZjhiMTc5ZTA0Y2M4YzA4N2Y1NjI1MjA0NDE5ZjVmNDVkNzM2YTgyYSIKLQotQklOQ09ORklHID0gIiR7YmluZGlyfS9ucHRoLWNvbmZpZyIKLQotaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkCi0KLUZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWJucHRoLnNvLioiCi1GSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9ucHRoLWNvbmZpZyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ucHRoL25wdGhfMS41LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25wdGgvbnB0aF8xLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRkZTcwYwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ucHRoL25wdGhfMS41LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiTmV3IEdOVSBQb3J0YWJsZSBUaHJlYWRzIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy9zb2Z0d2FyZS9wdGgvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJcCisgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT0yY2FjZWQwYjI1ZGZlZmQ0YzYwMWQ5MmJkMTUxMTZkZVwKKyAgICAiCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9nbnVwZy5vcmcvZG93bmxvYWQvaW5kZXguaHRtbCIKK1NSQ19VUkkgPSAiJHtHTlVQR19NSVJST1J9L25wdGgvbnB0aC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOWJhMmRjNDMwMmQyZjMyYzY2NzM3YzQzZWQxOTFiMWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjk0YTY5MGMxZjUzN2I5MmVkODI5ZDg2N2JlZTUzN2U0NmJlOTNmYmQ2MGIxNmMwNDYzMGZiYmZjZDlkYjNjMiIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9ucHRoLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkCisKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWJucHRoLnNvLioiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9ucHRoLWNvbmZpZyIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvMDAwMS1tZC1GaXgtYnVpbGQtd2l0aC1tdXNsLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci8wMDAxLW1kLUZpeC1idWlsZC13aXRoLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNjZDY3MAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvMDAwMS1tZC1GaXgtYnVpbGQtd2l0aC1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gMTQ3ZjNjMmFjYmQ5NmQ0NDAyNWNlYzExODAwZGVkMDI4MjMyNzc2NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDE4IFNlcCAyMDE3IDE3OjIyOjQzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIG1kOiBGaXggYnVpbGQgd2l0aCBtdXNsCisKK1RoZSBNSVBTIHNwZWNpZmljIGhlYWRlciA8c2dpZGVmcy5oPiBpcyBub3QgcHJvdmlkZWQgYnkgbXVzbAorbGludXgga2VybmVsIGhlYWRlcnMgcHJvdmlkZSA8YXNtL3NnaWRlZnMuaD4gd2hpY2ggaGFzIHNhbWUgZGVmaW5pdGlvbnMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBwci9pbmNsdWRlL21kL19saW51eC5jZmcgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9wci9pbmNsdWRlL21kL19saW51eC5jZmcgYi9wci9pbmNsdWRlL21kL19saW51eC5jZmcKK2luZGV4IDY0MGIxOWMuLjMxMjk2YTggMTAwNjQ0CistLS0gYS9wci9pbmNsdWRlL21kL19saW51eC5jZmcKKysrKyBiL3ByL2luY2x1ZGUvbWQvX2xpbnV4LmNmZworQEAgLTQ5OSw3ICs0OTksNyBAQAorICNlbGlmIGRlZmluZWQoX19taXBzX18pCisgCisgLyogRm9yIF9BQkk2NCAqLworLSNpbmNsdWRlIDxzZ2lkZWZzLmg+CisrI2luY2x1ZGUgPGFzbS9zZ2lkZWZzLmg+CisgCisgI2lmZGVmIF9fTUlQU0VCX18KKyAjZGVmaW5lIElTX0JJR19FTkRJQU4gMQorLS0gCisyLjE0LjEKKwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwcl80LjEzLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByXzQuMTMuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNlYmVjZi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByXzQuMTMuMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi1TVU1NQVJZID0gIk5ldHNjYXBlIFBvcnRhYmxlIFJ1bnRpbWUgTGlicmFyeSIKLUhPTUVQQUdFID0gICJodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL25zcHIvIgotTElDRU5TRSA9ICJHUEwtMi4wIHwgTVBMLTIuMCB8IExHUEwtMi4xIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vY29uZmlndXJlLmluO2JlZ2lubGluZT0zO2VuZGxpbmU9NjttZDU9OTBjMmZkZWUzOGU0NWQ2MzAyYWJjZmU0NzVjOGI1YzUgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUuaW47YmVnaW5saW5lPTQ7ZW5kbGluZT0zODttZDU9YmVkYTFkYmI5OGE1MTVmNTU3ZDNlNThlZjA2YmNhOTkiCi1TRUNUSU9OID0gImxpYnMvbmV0d29yayIKLQotU1JDX1VSSSA9ICJodHRwOi8vZnRwLm1vemlsbGEub3JnL3B1Yi9uc3ByL3JlbGVhc2VzL3Yke1BWfS9zcmMvbnNwci0ke1BWfS50YXIuZ3ogXAotICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXJwYXRoLWZyb20tdGVzdHMucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vZml4LWJ1aWxkLW9uLXg4Nl82NC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtc3JjZGlyLWZyb20tY29uZmlndXJlLWluLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDItQWRkLW5pb3MyLXN1cHBvcnQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1pbmNsdWRlLXN0ZGludC5oLWZvci1TU0laRV9NQVgtYW5kLVNJWkVfTUFYLWRlZmluaXRpLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL25zcHIucGMuaW4gXAotIgotCi1DQUNIRURfQ09ORklHVVJFVkFSU19hcHBlbmRfbGliYy1tdXNsID0gIiBDRkxBR1M9JyR7Q0ZMQUdTfSAtRF9QUl9QT0xMX0FWQUlMQUJMRSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtRF9QUl9IQVZFX09GRjY0X1QgLURfUFJfSU5FVDYgLURfUFJfSEFWRV9JTkVUX05UT1AgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLURfUFJfSEFWRV9HRVRIT1NUQllOQU1FMiAtRF9QUl9IQVZFX0dFVEFERFJJTkZPIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1EX1BSX0lORVQ2X1BST0JFIC1ETk9fRExPUEVOX05VTEwnIgotCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL2Z0cC5tb3ppbGxhLm9yZy9wdWIvbnNwci9yZWxlYXNlcy8iCi1VUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJ2KD9QPHB2ZXI+XGQrKFwuXGQrKSspLyIKLQotU1JDX1VSSVttZDVzdW1dID0gIjljNDQyOThhNmZjNDc4YjNjMGE0ZTk4ZjRmOTk4MWVkIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVlNGMxNzUxMzM5YTc2ZTdjNzcyYzBjMDQ3NDc0ODhkN2Y4Yzk4OTgwYjQzNGRjODQ2OTc3ZTQzMTE3ODMzYWIiCi0KLUNWRV9QUk9EVUNUID0gIm5ldHNjYXBlX3BvcnRhYmxlX3J1bnRpbWUiCi0KLVMgPSAiJHtXT1JLRElSfS9uc3ByLSR7UFZ9L25zcHIiCi0KLVJERVBFTkRTXyR7UE59LWRldiArPSAicGVybCIKLVRBUkdFVF9DQ19BUkNIICs9ICIke0xERkxBR1N9IgotCi1URVNUUyA9ICIgXAotICAgIGFjY2VwdCBcCi0gICAgYWNjZXB0cmVhZCBcCi0gICAgYWNjZXB0cmVhZGVtdSBcCi0gICAgYWZmaW5pdHkgXAotICAgIGFsYXJtIFwKLSAgICBhbm9uZm0gXAotICAgIGF0b21pYyBcCi0gICAgYXR0YWNoIFwKLSAgICBiaWdmaWxlIFwKLSAgICBjbGVhbnVwIFwKLSAgICBjbHRzcnYgIFwKLSAgICBjb25jdXIgXAotICAgIGN2YXIgXAotICAgIGN2YXIyIFwKLSAgICBkbGx0ZXN0IFwKLSAgICBkdG9hIFwKLSAgICBlcnJjb2RlcyBcCi0gICAgZXhpdCBcCi0gICAgZmRjYWNoIFwKLSAgICBmaWxlaW8gXAotICAgIGZvcmVpZ24gXAotICAgIGZvcm1hdHRtIFwKLSAgICBmc3luYyBcCi0gICAgZ2V0aG9zdCBcCi0gICAgZ2V0cHJvdG8gXAotICAgIGkybCBcCi0gICAgaW5pdGNsayBcCi0gICAgaW5ydmFsIFwKLSAgICBpbnN0cnVtdCBcCi0gICAgaW50cmlvIFwKLSAgICBpbnRydXB0IFwKLSAgICBpb190aW1lb3V0IFwKLSAgICBpb2NvbnRociBcCi0gICAgam9pbiBcCi0gICAgam9pbmtrIFwKLSAgICBqb2lua3UgXAotICAgIGpvaW51ayBcCi0gICAgam9pbnV1IFwKLSAgICBsYXllciBcCi0gICAgbGF6eWluaXQgXAotICAgIGxpYmZpbGVuYW1lIFwKLSAgICBsbHRlc3QgXAotICAgIGxvY2sgXAotICAgIGxvY2tmaWxlIFwKLSAgICBsb2dmaWxlIFwKLSAgICBsb2dnZXIgXAotICAgIG1hbnlfY3YgXAotICAgIG11bHRpd2FpdCBcCi0gICAgbmFtZXNobTEgXAotICAgIG5ibGF5ZXIgXAotICAgIG5vbmJsb2NrIFwKLSAgICBudGlvdG8gXAotICAgIG50b2ggXAotICAgIG9wXzJsb25nIFwKLSAgICBvcF9leGNsIFwKLSAgICBvcF9maWxuZiBcCi0gICAgb3BfZmlsb2sgXAotICAgIG9wX25vZmlsIFwKLSAgICBwYXJlbnQgXAotICAgIHBhcnNldG0gXAotICAgIHBlZWsgXAotICAgIHBlcmYgXAotICAgIHBpcGVwaW5nIFwKLSAgICBwaXBlcGluZzIgXAotICAgIHBpcGVzZWxmIFwKLSAgICBwb2xsX25tIFwKLSAgICBwb2xsX3RvIFwKLSAgICBwb2xsYWJsZSBcCi0gICAgcHJmdGVzdCBcCi0gICAgcHJpbWJsb2sgXAotICAgIHByb3ZpZGVyIFwKLSAgICBwcnBvbGxtbCBcCi0gICAgcmFuZmlsZSBcCi0gICAgcmFuZHNlZWQgXAotICAgIHJlaW5pdCBcCi0gICAgcndsb2NrdGVzdCBcCi0gICAgc2VsX3NwZCBcCi0gICAgc2VsY3RfZXIgXAotICAgIHNlbGN0X25tIFwKLSAgICBzZWxjdF90byBcCi0gICAgc2VsaW50ciBcCi0gICAgc2VtYSBcCi0gICAgc2VtYWVyciBcCi0gICAgc2VtYXBpbmcgXAotICAgIHNlbmR6bGYgXAotICAgIHNlcnZlcl90ZXN0IFwKLSAgICBzZXJ2cl9rayBcCi0gICAgc2VydnJfdWsgXAotICAgIHNlcnZyX2t1IFwKLSAgICBzZXJ2cl91dSBcCi0gICAgc2hvcnRfdGhyZWFkIFwKLSAgICBzaWdwaXBlIFwKLSAgICBzb2NrZXQgXAotICAgIHNvY2tvcHQgXAotICAgIHNvY2twaW5nIFwKLSAgICBzcHJpbnRmIFwKLSAgICBzdGFjayBcCi0gICAgc3RkaW8gXAotICAgIHN0cjJhZGRyIFwKLSAgICBzdHJvZCBcCi0gICAgc3dpdGNoIFwKLSAgICBzeXN0ZW0gXAotICAgIHRlc3RiaXQgXAotICAgIHRlc3RmaWxlIFwKLSAgICB0aHJlYWRzIFwKLSAgICB0aW1lbWFjIFwKLSAgICB0aW1ldGVzdCBcCi0gICAgdHBkIFwKLSAgICB1ZHBzcnYgXAotICAgIHZlcmNoZWNrIFwKLSAgICB2ZXJzaW9uIFwKLSAgICB3cml0ZXYgXAotICAgIHhub3RpZnkgXAotICAgIHplcm9sZW4iCi0KLWluaGVyaXQgYXV0b3Rvb2xzCi0KLVBBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5maWx0ZXIoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgZCl9IgotUEFDS0FHRUNPTkZJR1tpcHY2XSA9ICItLWVuYWJsZS1pcHY2LC0tZGlzYWJsZS1pcHY2LCIKLQotZG9fY29tcGlsZV9wcmVwZW5kKCkgewotCW9lX3J1bm1ha2UgQ1JPU1NfQ09NUElMRT0xIENGTEFHUz0iLURYUF9VTklYIiBMREZMQUdTPSIiIENDPWdjYyAtQyBjb25maWcgZXhwb3J0Ci19Ci0KLWRvX2NvbXBpbGVfYXBwZW5kKCkgewotCW9lX3J1bm1ha2UgLUMgcHIvdGVzdHMKLX0KLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0gICAgaW5zdGFsbCAtRCAke1dPUktESVJ9L25zcHIucGMuaW4gJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNwci5wYwotICAgIHNlZCAtaSAgXAotICAgIC1lICdzOk5TUFJWRVJTSU9OOiR7UFZ9OmcnIFwKLSAgICAtZSAnczpPRVBSRUZJWDoke3ByZWZpeH06ZycgXAotICAgIC1lICdzOk9FTElCRElSOiR7bGliZGlyfTpnJyBcCi0gICAgLWUgJ3M6T0VJTkNESVI6JHtpbmNsdWRlZGlyfTpnJyBcCi0gICAgLWUgJ3M6T0VFWEVDUFJFRklYOiR7ZXhlY19wcmVmaXh9OmcnIFwKLSAgICAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9uc3ByLnBjCi0KLSAgICBta2RpciAtcCAke0R9JHtsaWJkaXJ9L25zcHIvdGVzdHMKLSAgICBpbnN0YWxsIC1tIDA3NTUgJHtTfS9wci90ZXN0cy9ydW50ZXN0cy5wbCAke0R9JHtsaWJkaXJ9L25zcHIvdGVzdHMKLSAgICBpbnN0YWxsIC1tIDA3NTUgJHtTfS9wci90ZXN0cy9ydW50ZXN0cy5zaCAke0R9JHtsaWJkaXJ9L25zcHIvdGVzdHMKLSAgICBjZCAke0J9L3ByL3Rlc3RzCi0gICAgaW5zdGFsbCAtbSAwNzU1ICR7VEVTVFN9ICR7RH0ke2xpYmRpcn0vbnNwci90ZXN0cwotCi0gICAgIyBkZWxldGUgY29tcGlsZS1ldC5wbCBhbmQgcGVyci5wcm9wZXJ0aWVzIGZyb20gJHtiaW5kaXJ9IGJlY2F1c2UgdGhlc2UgYXJlCi0gICAgIyBvbmx5IHVzZWQgdG8gZ2VuZXJhdGUgcHJlcnIuYyBhbmQgcHJlcnIuaCBmaWxlcyBmcm9tIHByZXJyLmV0IGF0IGNvbXBpbGUKLSAgICAjIHRpbWUKLSAgICBybSAke0R9JHtiaW5kaXJ9L2NvbXBpbGUtZXQucGwgJHtEfSR7YmluZGlyfS9wcmVyci5wcm9wZXJ0aWVzCi19Ci0KLUZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWIqLnNvIgotRklMRVNfJHtQTn0tZGV2ID0gIiR7YmluZGlyfS8qICR7bGliZGlyfS9uc3ByL3Rlc3RzLyogJHtsaWJkaXJ9L3BrZ2NvbmZpZyBcCi0gICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS8qICR7ZGF0YWRpcn0vYWNsb2NhbC8qICIKLQotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwcl80LjE2LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwcl80LjE2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ZWY5OTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByXzQuMTYuYmIKQEAgLTAsMCArMSwxOTEgQEAKK1NVTU1BUlkgPSAiTmV0c2NhcGUgUG9ydGFibGUgUnVudGltZSBMaWJyYXJ5IgorSE9NRVBBR0UgPSAgImh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvbnNwci8iCitMSUNFTlNFID0gIkdQTC0yLjAgfCBNUEwtMi4wIHwgTEdQTC0yLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9jb25maWd1cmUuaW47YmVnaW5saW5lPTM7ZW5kbGluZT02O21kNT05MGMyZmRlZTM4ZTQ1ZDYzMDJhYmNmZTQ3NWM4YjVjNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS5pbjtiZWdpbmxpbmU9NDtlbmRsaW5lPTM4O21kNT1iZWRhMWRiYjk4YTUxNWY1NTdkM2U1OGVmMDZiY2E5OSIKK1NFQ1RJT04gPSAibGlicy9uZXR3b3JrIgorCitTUkNfVVJJID0gImh0dHA6Ly9mdHAubW96aWxsYS5vcmcvcHViL25zcHIvcmVsZWFzZXMvdiR7UFZ9L3NyYy9uc3ByLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtcnBhdGgtZnJvbS10ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtYnVpbGQtb24teDg2XzY0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZS1zcmNkaXItZnJvbS1jb25maWd1cmUtaW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1BZGQtbmlvczItc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWluY2x1ZGUtc3RkaW50LmgtZm9yLVNTSVpFX01BWC1hbmQtU0laRV9NQVgtZGVmaW5pdGkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1tZC1GaXgtYnVpbGQtd2l0aC1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25zcHIucGMuaW4gXAorIgorCitDQUNIRURfQ09ORklHVVJFVkFSU19hcHBlbmRfbGliYy1tdXNsID0gIiBDRkxBR1M9JyR7Q0ZMQUdTfSAtRF9QUl9QT0xMX0FWQUlMQUJMRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtRF9QUl9IQVZFX09GRjY0X1QgLURfUFJfSU5FVDYgLURfUFJfSEFWRV9JTkVUX05UT1AgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLURfUFJfSEFWRV9HRVRIT1NUQllOQU1FMiAtRF9QUl9IQVZFX0dFVEFERFJJTkZPIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1EX1BSX0lORVQ2X1BST0JFIC1ETk9fRExPUEVOX05VTEwnIgorCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL2Z0cC5tb3ppbGxhLm9yZy9wdWIvbnNwci9yZWxlYXNlcy8iCitVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJ2KD9QPHB2ZXI+XGQrKFwuXGQrKSspLyIKKworU1JDX1VSSVttZDVzdW1dID0gIjQyZmQ4OTYzYTRiMzk0ZjYyZDQzYmE2MDRmMDNmYWI3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjliMzEwMmQ5NzY2NTUwNGFlZWU3MzM2M2MxMWEyMWMwNjJhZDY3YTI1MjIyNDIzNjhiN2YwMTlmOTZhNTNjZDEiCisKK0NWRV9QUk9EVUNUID0gIm5ldHNjYXBlX3BvcnRhYmxlX3J1bnRpbWUiCisKK1MgPSAiJHtXT1JLRElSfS9uc3ByLSR7UFZ9L25zcHIiCisKK1JERVBFTkRTXyR7UE59LWRldiArPSAicGVybCIKK1RBUkdFVF9DQ19BUkNIICs9ICIke0xERkxBR1N9IgorCitURVNUUyA9ICIgXAorICAgIGFjY2VwdCBcCisgICAgYWNjZXB0cmVhZCBcCisgICAgYWNjZXB0cmVhZGVtdSBcCisgICAgYWZmaW5pdHkgXAorICAgIGFsYXJtIFwKKyAgICBhbm9uZm0gXAorICAgIGF0b21pYyBcCisgICAgYXR0YWNoIFwKKyAgICBiaWdmaWxlIFwKKyAgICBjbGVhbnVwIFwKKyAgICBjbHRzcnYgIFwKKyAgICBjb25jdXIgXAorICAgIGN2YXIgXAorICAgIGN2YXIyIFwKKyAgICBkbGx0ZXN0IFwKKyAgICBkdG9hIFwKKyAgICBlcnJjb2RlcyBcCisgICAgZXhpdCBcCisgICAgZmRjYWNoIFwKKyAgICBmaWxlaW8gXAorICAgIGZvcmVpZ24gXAorICAgIGZvcm1hdHRtIFwKKyAgICBmc3luYyBcCisgICAgZ2V0aG9zdCBcCisgICAgZ2V0cHJvdG8gXAorICAgIGkybCBcCisgICAgaW5pdGNsayBcCisgICAgaW5ydmFsIFwKKyAgICBpbnN0cnVtdCBcCisgICAgaW50cmlvIFwKKyAgICBpbnRydXB0IFwKKyAgICBpb190aW1lb3V0IFwKKyAgICBpb2NvbnRociBcCisgICAgam9pbiBcCisgICAgam9pbmtrIFwKKyAgICBqb2lua3UgXAorICAgIGpvaW51ayBcCisgICAgam9pbnV1IFwKKyAgICBsYXllciBcCisgICAgbGF6eWluaXQgXAorICAgIGxpYmZpbGVuYW1lIFwKKyAgICBsbHRlc3QgXAorICAgIGxvY2sgXAorICAgIGxvY2tmaWxlIFwKKyAgICBsb2dmaWxlIFwKKyAgICBsb2dnZXIgXAorICAgIG1hbnlfY3YgXAorICAgIG11bHRpd2FpdCBcCisgICAgbmFtZXNobTEgXAorICAgIG5ibGF5ZXIgXAorICAgIG5vbmJsb2NrIFwKKyAgICBudGlvdG8gXAorICAgIG50b2ggXAorICAgIG9wXzJsb25nIFwKKyAgICBvcF9leGNsIFwKKyAgICBvcF9maWxuZiBcCisgICAgb3BfZmlsb2sgXAorICAgIG9wX25vZmlsIFwKKyAgICBwYXJlbnQgXAorICAgIHBhcnNldG0gXAorICAgIHBlZWsgXAorICAgIHBlcmYgXAorICAgIHBpcGVwaW5nIFwKKyAgICBwaXBlcGluZzIgXAorICAgIHBpcGVzZWxmIFwKKyAgICBwb2xsX25tIFwKKyAgICBwb2xsX3RvIFwKKyAgICBwb2xsYWJsZSBcCisgICAgcHJmdGVzdCBcCisgICAgcHJpbWJsb2sgXAorICAgIHByb3ZpZGVyIFwKKyAgICBwcnBvbGxtbCBcCisgICAgcmFuZmlsZSBcCisgICAgcmFuZHNlZWQgXAorICAgIHJlaW5pdCBcCisgICAgcndsb2NrdGVzdCBcCisgICAgc2VsX3NwZCBcCisgICAgc2VsY3RfZXIgXAorICAgIHNlbGN0X25tIFwKKyAgICBzZWxjdF90byBcCisgICAgc2VsaW50ciBcCisgICAgc2VtYSBcCisgICAgc2VtYWVyciBcCisgICAgc2VtYXBpbmcgXAorICAgIHNlbmR6bGYgXAorICAgIHNlcnZlcl90ZXN0IFwKKyAgICBzZXJ2cl9rayBcCisgICAgc2VydnJfdWsgXAorICAgIHNlcnZyX2t1IFwKKyAgICBzZXJ2cl91dSBcCisgICAgc2hvcnRfdGhyZWFkIFwKKyAgICBzaWdwaXBlIFwKKyAgICBzb2NrZXQgXAorICAgIHNvY2tvcHQgXAorICAgIHNvY2twaW5nIFwKKyAgICBzcHJpbnRmIFwKKyAgICBzdGFjayBcCisgICAgc3RkaW8gXAorICAgIHN0cjJhZGRyIFwKKyAgICBzdHJvZCBcCisgICAgc3dpdGNoIFwKKyAgICBzeXN0ZW0gXAorICAgIHRlc3RiaXQgXAorICAgIHRlc3RmaWxlIFwKKyAgICB0aHJlYWRzIFwKKyAgICB0aW1lbWFjIFwKKyAgICB0aW1ldGVzdCBcCisgICAgdHBkIFwKKyAgICB1ZHBzcnYgXAorICAgIHZlcmNoZWNrIFwKKyAgICB2ZXJzaW9uIFwKKyAgICB3cml0ZXYgXAorICAgIHhub3RpZnkgXAorICAgIHplcm9sZW4iCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5maWx0ZXIoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgZCl9IgorUEFDS0FHRUNPTkZJR1tpcHY2XSA9ICItLWVuYWJsZS1pcHY2LC0tZGlzYWJsZS1pcHY2LCIKKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworCW9lX3J1bm1ha2UgQ1JPU1NfQ09NUElMRT0xIENGTEFHUz0iLURYUF9VTklYICR7QlVJTERfQ0ZMQUdTfSIgTERGTEFHUz0iIiBDQz0iJHtCVUlMRF9DQ30iIC1DIGNvbmZpZyBleHBvcnQKK30KKworZG9fY29tcGlsZV9hcHBlbmQoKSB7CisJb2VfcnVubWFrZSAtQyBwci90ZXN0cworfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1EICR7V09SS0RJUn0vbnNwci5wYy5pbiAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9uc3ByLnBjCisgICAgc2VkIC1pICBcCisgICAgLWUgJ3M6TlNQUlZFUlNJT046JHtQVn06ZycgXAorICAgIC1lICdzOk9FUFJFRklYOiR7cHJlZml4fTpnJyBcCisgICAgLWUgJ3M6T0VMSUJESVI6JHtsaWJkaXJ9OmcnIFwKKyAgICAtZSAnczpPRUlOQ0RJUjoke2luY2x1ZGVkaXJ9OmcnIFwKKyAgICAtZSAnczpPRUVYRUNQUkVGSVg6JHtleGVjX3ByZWZpeH06ZycgXAorICAgICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcHIucGMKKworICAgIG1rZGlyIC1wICR7RH0ke2xpYmRpcn0vbnNwci90ZXN0cworICAgIGluc3RhbGwgLW0gMDc1NSAke1N9L3ByL3Rlc3RzL3J1bnRlc3RzLnBsICR7RH0ke2xpYmRpcn0vbnNwci90ZXN0cworICAgIGluc3RhbGwgLW0gMDc1NSAke1N9L3ByL3Rlc3RzL3J1bnRlc3RzLnNoICR7RH0ke2xpYmRpcn0vbnNwci90ZXN0cworICAgIGNkICR7Qn0vcHIvdGVzdHMKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtURVNUU30gJHtEfSR7bGliZGlyfS9uc3ByL3Rlc3RzCisKKyAgICAjIGRlbGV0ZSBjb21waWxlLWV0LnBsIGFuZCBwZXJyLnByb3BlcnRpZXMgZnJvbSAke2JpbmRpcn0gYmVjYXVzZSB0aGVzZSBhcmUKKyAgICAjIG9ubHkgdXNlZCB0byBnZW5lcmF0ZSBwcmVyci5jIGFuZCBwcmVyci5oIGZpbGVzIGZyb20gcHJlcnIuZXQgYXQgY29tcGlsZQorICAgICMgdGltZQorICAgIHJtICR7RH0ke2JpbmRpcn0vY29tcGlsZS1ldC5wbCAke0R9JHtiaW5kaXJ9L3ByZXJyLnByb3BlcnRpZXMKK30KKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYiouc28iCitGSUxFU18ke1BOfS1kZXYgPSAiJHtiaW5kaXJ9LyogJHtsaWJkaXJ9L25zcHIvdGVzdHMvKiAke2xpYmRpcn0vcGtnY29uZmlnIFwKKyAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9LyogJHtkYXRhZGlyfS9hY2xvY2FsLyogIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9GaXgtY29tcGlsYXRpb24tZm9yLVgzMi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL0ZpeC1jb21waWxhdGlvbi1mb3ItWDMyLnBhdGNoCmluZGV4IGY3ZjJjMjEuLjgwYjg2OTAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL0ZpeC1jb21waWxhdGlvbi1mb3ItWDMyLnBhdGNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL0ZpeC1jb21waWxhdGlvbi1mb3ItWDMyLnBhdGNoCkBAIC02LDYgKzYsOCBAQAogWDMyIHVzZXMgMzItYml0IHBvaW50ZXJzLCBub3QgNjQtYml0LgogCiBTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIC0tLQogIG5zcy9saWIvZnJlZWJsL3BvbHkxMzA1LWRvbm5hLXg2NC1zc2UyLWluY3JlbWVudGFsLXNvdXJjZS5jIHwgNCArKysrCiAgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3NfMy4yOC4xLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3NfMy4yOC4xLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWQ4NmZjLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzXzMuMjguMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI0NiArMCwwIEBACi1TVU1NQVJZID0gIk1vemlsbGEncyBTU0wgYW5kIFRMUyBpbXBsZW1lbnRhdGlvbiIKLURFU0NSSVBUSU9OID0gIk5ldHdvcmsgU2VjdXJpdHkgU2VydmljZXMgKE5TUykgaXMgYSBzZXQgb2YgbGlicmFyaWVzIFwKLWRlc2lnbmVkIHRvIHN1cHBvcnQgY3Jvc3MtcGxhdGZvcm0gZGV2ZWxvcG1lbnQgb2YgXAotc2VjdXJpdHktZW5hYmxlZCBjbGllbnQgYW5kIHNlcnZlciBhcHBsaWNhdGlvbnMuIFwKLUFwcGxpY2F0aW9ucyBidWlsdCB3aXRoIE5TUyBjYW4gc3VwcG9ydCBTU0wgdjIgYW5kIHYzLCBcCi1UTFMsIFBLQ1MgNSwgUEtDUyA3LCBQS0NTIDExLCBQS0NTIDEyLCBTL01JTUUsIFguNTA5IFwKLXYzIGNlcnRpZmljYXRlcywgYW5kIG90aGVyIHNlY3VyaXR5IHN0YW5kYXJkcy4iCi1IT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3NlY3VyaXR5L3BraS9uc3MvIgotU0VDVElPTiA9ICJsaWJzIgotCi1MSUNFTlNFID0gIk1QTC0yLjAgfCAoTVBMLTIuMCAmIEdQTC0yLjArKSB8IChNUEwtMi4wICYgTEdQTC0yLjErKSIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbnNzL0NPUFlJTkc7bWQ1PTNiMWU4OGUxYjljMGI1YTRiMjg4MWQ0NmNjZTA2YTE4IFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL25zcy9saWIvZnJlZWJsL21waS9kb2MvTElDRU5TRTttZDU9NDkxZjE1OGQwOWQ5NDg0NjZhZmNlODVkNmYxZmUxOGYgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbnNzL2xpYi9mcmVlYmwvbXBpL2RvYy9MSUNFTlNFLU1QTDttZDU9NWQ0MjVjOGYzMTU3ZGJmMjEyZGIyZWM1M2Q5ZTUxMzIiCi0KLVNSQ19VUkkgPSAiXAotICAgIGh0dHA6Ly9mdHAubW96aWxsYS5vcmcvcHViL21vemlsbGEub3JnL3NlY3VyaXR5L25zcy9yZWxlYXNlcy9OU1NfM18yOF8xX1JUTS9zcmMvJHtCUH0udGFyLmd6IFwKLSAgICBmaWxlOi8vMDAwMS1uc3MtZml4LXN1cHBvcnQtY3Jvc3MtY29tcGlsaW5nLnBhdGNoIFwKLSAgICBmaWxlOi8vbnNzLW5vLXJwYXRoLWZvci1jcm9zcy1jb21waWxpbmcucGF0Y2ggXAotICAgIGZpbGU6Ly9uc3MtZml4LWluY29ycmVjdC1zaGViYW5nLW9mLXBlcmwucGF0Y2ggXAotICAgIGZpbGU6Ly9uc3MtZml4LW5zaW5zdGFsbC1idWlsZC5wYXRjaCBcCi0gICAgZmlsZTovL2Rpc2FibGUtV3ZhcmFyZ3Mtd2l0aC1jbGFuZy5wYXRjaCBcCi0gICAgZmlsZTovL3BxZy5jLVVMTF9hZGRlbmQucGF0Y2ggXAotICAgIGZpbGU6Ly9GaXgtY29tcGlsYXRpb24tZm9yLVgzMi5wYXRjaCBcCi0gICAgZmlsZTovL25zcy5wYy5pbiBcCi0gICAgZmlsZTovL3NpZ25saWJzLnNoIFwKLSIKLVNSQ19VUklbbWQ1c3VtXSA9ICJlOThkNDg0MzVjZWU1NzkyZjk3ZWY3ZmMzNWE2MDJjMyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI1OGNjMGMwNWMwZWQ5NTIzZTZkODIwYmVhNzRmNTEzNTM4ZjQ4Yzg3YWFjOTMxODc2ZTNkMzc3NWRlMWE4MmFkIgotCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Nb3ppbGxhL1Byb2plY3RzL05TUy9OU1NfUmVsZWFzZXMiCi1VUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJOU1NfKD9QPHB2ZXI+LispX3JlbGVhc2Vfbm90ZXMiCi0KLWluaGVyaXQgc2l0ZWluZm8KLQotREVQRU5EUyA9ICJzcWxpdGUzIG5zcHIgemxpYiBuc3MtbmF0aXZlIgotREVQRU5EU19jbGFzcy1uYXRpdmUgPSAic3FsaXRlMy1uYXRpdmUgbnNwci1uYXRpdmUgemxpYi1uYXRpdmUiCi1SREVQRU5EU18ke1BOfS1zbWltZSA9ICJwZXJsIgotCi1URCA9ICIke1N9L3RlbnRhdGl2ZS1kaXN0IgotVERTID0gIiR7U30vdGVudGF0aXZlLWRpc3Qtc3RhZ2luZyIKLQotVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kX2xpYmMtbXVzbCAoKSB7Ci0gICAgc2VkIC1pIC1lICcvLURIQVZFX1NZU19DREVGU19IL2QnICR7U30vbnNzL2xpYi9kYm0vY29uZmlnL2NvbmZpZy5tawotfQotCi1kb19jb21waWxlX3ByZXBlbmRfY2xhc3MtbmF0aXZlKCkgewotICAgIGV4cG9ydCBOU1BSX0lOQ0xVREVfRElSPSR7U1RBR0lOR19JTkNESVJfTkFUSVZFfQotICAgIGV4cG9ydCBOU1BSX0xJQl9ESVI9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9Ci0gICAgZXhwb3J0IE5TU19FTkFCTEVfV0VSUk9SPTAKLX0KLQotZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKLSAgICBleHBvcnQgTERGTEFHUz0iIgotfQotCi1kb19jb21waWxlX3ByZXBlbmRfY2xhc3MtbmF0aXZlKCkgewotICAgICMgTmVlZCB0byBzZXQgUlBBVEggc28gdGhhdCBjaHJwYXRoIHdpbGwgZG8gaXRzIGpvYiBjb3JyZWN0bHkKLSAgICBSUEFUSD0iLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSAtV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0JBU0VfTElCRElSX05BVElWRX0gLVdsLC1ycGF0aCwke1NUQUdJTkdfTElCRElSX05BVElWRX0gLVdsLC1ycGF0aCwke1NUQUdJTkdfQkFTRV9MSUJESVJfTkFUSVZFfSIKLX0KLQotZG9fY29tcGlsZSgpIHsKLSAgICBleHBvcnQgQ1JPU1NfQ09NUElMRT0xCi0gICAgZXhwb3J0IE5BVElWRV9DQz0iZ2NjIgotICAgIGV4cG9ydCBOQVRJVkVfRkxBR1M9IiR7SE9TVF9DRkxBR1N9IgotICAgIGV4cG9ydCBCVUlMRF9PUFQ9MQotCi0gICAgZXhwb3J0IEZSRUVCTF9OT19ERVBFTkQ9MQotICAgIGV4cG9ydCBGUkVFQkxfTE9XSEFTSD0xCi0KLSAgICBleHBvcnQgTElCRElSPSR7bGliZGlyfQotICAgIGV4cG9ydCBNT1pJTExBX0NMSUVOVD0xCi0gICAgZXhwb3J0IE5TX1VTRV9HQ0M9MQotICAgIGV4cG9ydCBOU1NfVVNFX1NZU1RFTV9TUUxJVEU9MQotICAgIGV4cG9ydCBOU1NfRU5BQkxFX0VDQz0xCi0KLSAgICBleHBvcnQgT1NfUkVMRUFTRT0zLjQKLSAgICBleHBvcnQgT1NfVEFSR0VUPUxpbnV4Ci0gICAgZXhwb3J0IE9TX0FSQ0g9TGludXgKLQotICAgIGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjIiBdOyB0aGVuCi0gICAgICAgIE9TX1RFU1Q9cHBjCi0gICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYzY0IiBdOyB0aGVuCi0gICAgICAgIE9TX1RFU1Q9cHBjNjQKLSAgICBlbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzIiAtbyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHNlbCIgLW8gIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzNjQiIC1vICIke1RBUkdFVF9BUkNIfSIgPSAibWlwczY0ZWwiIF07IHRoZW4KLSAgICAgICAgT1NfVEVTVD1taXBzCi0gICAgZWxzZQotICAgICAgICBPU19URVNUPSIke1RBUkdFVF9BUkNIfSIKLSAgICBmaQotCi0gICAgaWYgWyAiJHtTSVRFSU5GT19CSVRTfSIgPSAiNjQiIF07IHRoZW4KLSAgICAgICAgZXhwb3J0IFVTRV82ND0xCi0gICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAieDg2XzY0IiAtYSAiJHtTSVRFSU5GT19CSVRTfSIgPSAiMzIiIF07IHRoZW4KLSAgICAgICAgZXhwb3J0IFVTRV9YMzI9MQotICAgIGZpCi0KLSAgICBleHBvcnQgTlNTX0RJU0FCTEVfR1RFU1RTPTEKLQotICAgICMgV2UgY2FuIG1vZGlmeSBDQyBpbiB0aGUgZW52aXJvbm1lbnQsIGJ1dCBpZiB3ZSBzZXQgaXQgdmlhIGFuCi0gICAgIyBhcmd1bWVudCB0byBtYWtlLCBuc2luc3RhbGwsIGEgaG9zdCBwcm9ncmFtLCB3aWxsIGFsc28gYnVpbGQgd2l0aCBpdCEKLSAgICAjCi0gICAgZXhwb3J0IENDPSIke0NDfSAtZyIKLSAgICBtYWtlIC1DIC4vbnNzIENDQz0iJHtDWFh9IC1nIiBcCi0gICAgICAgIE9TX1RFU1Q9JHtPU19URVNUfSBcCi0gICAgICAgIFJQQVRIPSIke1JQQVRIfSIKLX0KLWRvX2NvbXBpbGVbdmFyZGVwc2V4Y2x1ZGVdICs9ICJTSVRFSU5GT19CSVRTIgotCi0KLWRvX2luc3RhbGxfcHJlcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7Ci0gICAgZXhwb3J0IExERkxBR1M9IiIKLX0KLQotZG9faW5zdGFsbCgpIHsKLSAgICBleHBvcnQgQ1JPU1NfQ09NUElMRT0xCi0gICAgZXhwb3J0IE5BVElWRV9DQz0iZ2NjIgotICAgIGV4cG9ydCBCVUlMRF9PUFQ9MQotCi0gICAgZXhwb3J0IEZSRUVCTF9OT19ERVBFTkQ9MQotCi0gICAgZXhwb3J0IExJQkRJUj0ke2xpYmRpcn0KLSAgICBleHBvcnQgTU9aSUxMQV9DTElFTlQ9MQotICAgIGV4cG9ydCBOU19VU0VfR0NDPTEKLSAgICBleHBvcnQgTlNTX1VTRV9TWVNURU1fU1FMSVRFPTEKLSAgICBleHBvcnQgTlNTX0VOQUJMRV9FQ0M9MQotCi0gICAgZXhwb3J0IE9TX1JFTEVBU0U9My40Ci0gICAgZXhwb3J0IE9TX1RBUkdFVD1MaW51eAotICAgIGV4cG9ydCBPU19BUkNIPUxpbnV4Ci0KLSAgICBpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYyIgXTsgdGhlbgotICAgICAgICBPU19URVNUPXBwYwotICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gInBvd2VycGM2NCIgXTsgdGhlbgotICAgICAgICBPU19URVNUPXBwYzY0Ci0gICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAibWlwcyIgLW8gIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzZWwiIC1vICIke1RBUkdFVF9BUkNIfSIgPSAibWlwczY0IiAtbyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHM2NGVsIiBdOyB0aGVuCi0gICAgICAgIE9TX1RFU1Q9bWlwcwotICAgIGVsc2UKLSAgICAgICAgT1NfVEVTVD0iJHtUQVJHRVRfQVJDSH0iCi0gICAgZmkKLSAgICBpZiBbICIke1NJVEVJTkZPX0JJVFN9IiA9ICI2NCIgXTsgdGhlbgotICAgICAgICBleHBvcnQgVVNFXzY0PTEKLSAgICBlbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJ4ODZfNjQiIC1hICIke1NJVEVJTkZPX0JJVFN9IiA9ICIzMiIgXTsgdGhlbgotICAgICAgICBleHBvcnQgVVNFX1gzMj0xCi0gICAgZmkKLQotICAgIGV4cG9ydCBOU1NfRElTQUJMRV9HVEVTVFM9MQotCi0gICAgbWFrZSAtQyAuL25zcyBcCi0gICAgICAgIENDQz0iJHtDWFh9IiBcCi0gICAgICAgIE9TX1RFU1Q9JHtPU19URVNUfSBcCi0gICAgICAgIFNPVVJDRV9MSUJfRElSPSIke1REfS8ke2xpYmRpcn0iIFwKLSAgICAgICAgU09VUkNFX0JJTl9ESVI9IiR7VER9LyR7YmluZGlyfSIgXAotICAgICAgICBpbnN0YWxsCi0KLSAgICBpbnN0YWxsIC1kICR7RH0vJHtsaWJkaXJ9LwotICAgIGZvciBmaWxlIGluICR7U30vZGlzdC8qLk9CSi9saWIvKi5zbzsgZG8KLSAgICAgICAgZWNobyAiSW5zdGFsbGluZyBgYmFzZW5hbWUgJGZpbGVgLi4uIgotICAgICAgICBjcCAkZmlsZSAgJHtEfS8ke2xpYmRpcn0vCi0gICAgZG9uZQotCi0gICAgZm9yIHNoYXJlZF9saWIgaW4gJHtURH0vJHtsaWJkaXJ9Lyouc28uKjsgZG8KLSAgICAgICAgaWYgWyAtZiAkc2hhcmVkX2xpYiBdOyB0aGVuCi0gICAgICAgICAgICBjcCAkc2hhcmVkX2xpYiAke0R9LyR7bGliZGlyfQotICAgICAgICAgICAgbG4gLXNmICQoYmFzZW5hbWUgJHNoYXJlZF9saWIpICR7RH0vJHtsaWJkaXJ9LyQoYmFzZW5hbWUgJHNoYXJlZF9saWIgLjFvZSkKLSAgICAgICAgZmkKLSAgICBkb25lCi0gICAgZm9yIHNoYXJlZF9saWIgaW4gJHtURH0vJHtsaWJkaXJ9Lyouc287IGRvCi0gICAgICAgIGlmIFsgLWYgJHNoYXJlZF9saWIgLWEgISAtZSAke0R9LyR7bGliZGlyfS8kc2hhcmVkX2xpYiBdOyB0aGVuCi0gICAgICAgICAgICBjcCAkc2hhcmVkX2xpYiAke0R9LyR7bGliZGlyfQotICAgICAgICBmaQotICAgIGRvbmUKLQotICAgIGluc3RhbGwgLWQgJHtEfS8ke2luY2x1ZGVkaXJ9L25zczMKLSAgICBpbnN0YWxsIC1tIDY0NCAtdCAke0R9LyR7aW5jbHVkZWRpcn0vbnNzMyBkaXN0L3B1YmxpYy9uc3MvKgotCi0gICAgaW5zdGFsbCAtZCAke0R9LyR7YmluZGlyfQotICAgIGZvciBiaW5hcnkgaW4gJHtURH0vJHtiaW5kaXJ9Lyo7IGRvCi0gICAgICAgIGluc3RhbGwgLW0gNzU1IC10ICR7RH0vJHtiaW5kaXJ9ICRiaW5hcnkKLSAgICBkb25lCi19Ci1kb19pbnN0YWxsW3ZhcmRlcHNleGNsdWRlXSArPSAiU0lURUlORk9fQklUUyIKLQotZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0gICAgIyBDcmVhdGUgZW1wdHkgLmNoayBmaWxlcyBmb3IgdGhlIE5TUyBsaWJyYXJpZXMgYXQgYnVpbGQgdGltZS4gVGhleSBjb3VsZAotICAgICMgYmUgcmVnZW5lcmF0ZWQgYXQgdGFyZ2V0J3MgYm9vdCB0aW1lLgotICAgIGZvciBmaWxlIGluIGxpYnNvZnRva24zLmNoayBsaWJmcmVlYmwzLmNoayBsaWJuc3NkYm0zLmNoazsgZG8KLSAgICAgICAgdG91Y2ggJHtEfS8ke2xpYmRpcn0vJGZpbGUKLSAgICAgICAgY2htb2QgNzU1ICR7RH0vJHtsaWJkaXJ9LyRmaWxlCi0gICAgZG9uZQotICAgIGluc3RhbGwgLUQgLW0gNzU1ICR7V09SS0RJUn0vc2lnbmxpYnMuc2ggJHtEfS8ke2JpbmRpcn0vc2lnbmxpYnMuc2gKLQotICAgIGluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9wa2djb25maWcvCi0gICAgc2VkICdzLyVOU1NfVkVSU0lPTiUvJHtQVn0vJyAke1dPUktESVJ9L25zcy5wYy5pbiB8IHNlZCAncy8lTlNQUl9WRVJTSU9OJS80LjkuMi8nID4gJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNzLnBjCi0gICAgc2VkIC1pIHM6T0VQUkVGSVg6JHtwcmVmaXh9OmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNzLnBjCi0gICAgc2VkIC1pIHM6T0VFWEVDUFJFRklYOiR7ZXhlY19wcmVmaXh9OmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNzLnBjCi0gICAgc2VkIC1pIHM6T0VMSUJESVI6JHtsaWJkaXJ9OmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNzLnBjCi0gICAgc2VkIC1pIHM6T0VJTkNESVI6JHtpbmNsdWRlZGlyfS9uc3MzOmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNzLnBjCi19Ci0KLWRvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCgpIHsKLSAgICAjIENyZWF0ZSBhIGJsYW5rIGNlcnRpZmljYXRlCi0gICAgbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vcGtpL25zc2RiLwotICAgIHRvdWNoIC4vZW1wdHlfcGFzc3dvcmQKLSAgICBjZXJ0dXRpbCAtTiAtZCAke0R9JHtzeXNjb25mZGlyfS9wa2kvbnNzZGIvIC1mIC4vZW1wdHlfcGFzc3dvcmQKLSAgICBjaG1vZCA2NDQgJHtEfSR7c3lzY29uZmRpcn0vcGtpL25zc2RiLyouZGIKLSAgICBybSAuL2VtcHR5X3Bhc3N3b3JkCi19Ci0KLVBBQ0tBR0VfV1JJVEVfREVQUyArPSAibnNzLW5hdGl2ZSIKLXBrZ19wb3N0aW5zdF8ke1BOfSAoKSB7Ci0gICAgaWYgWyAtbiAiJEQiIF07IHRoZW4KLSAgICAgICAgZm9yIEkgaW4gJEQke2xpYmRpcn0vbGliKi5jaGs7IGRvCi0gICAgICAgICAgICBETj1gZGlybmFtZSAkSWAKLSAgICAgICAgICAgIEJOPWBiYXNlbmFtZSAkSSAuY2hrYAotICAgICAgICAgICAgRk49JEROLyRCTi5zbwotICAgICAgICAgICAgc2hsaWJzaWduIC1pICRGTgotICAgICAgICAgICAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuCi0gICAgICAgICAgICAgICAgZXhpdCAxCi0gICAgICAgICAgICBmaQotICAgICAgICBkb25lCi0gICAgZWxzZQotICAgICAgICBzaWdubGlicy5zaAotICAgIGZpCi19Ci0KLVBBQ0tBR0VTID0rICIke1BOfS1zbWltZSIKLUZJTEVTXyR7UE59LXNtaW1lID0gIlwKLSAgICAke2JpbmRpcn0vc21pbWUgXAotIgotRklMRVNfJHtQTn0gPSAiXAotICAgICR7c3lzY29uZmRpcn0gXAotICAgICR7YmluZGlyfSBcCi0gICAgJHtsaWJkaXJ9L2xpYiouY2hrIFwKLSAgICAke2xpYmRpcn0vbGliKi5zbyBcCi0gICAgIgotRklMRVNfJHtQTn0tZGV2ID0gIlwKLSAgICAke2xpYmRpcn0vbnNzIFwKLSAgICAke2xpYmRpcn0vcGtnY29uZmlnLyogXAotICAgICR7aW5jbHVkZWRpcn0vKiBcCi0gICAgIgotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzXzMuMzEuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzXzMuMzEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmI5YmRiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3NfMy4zMS4xLmJiCkBAIC0wLDAgKzEsMjUzIEBACitTVU1NQVJZID0gIk1vemlsbGEncyBTU0wgYW5kIFRMUyBpbXBsZW1lbnRhdGlvbiIKK0RFU0NSSVBUSU9OID0gIk5ldHdvcmsgU2VjdXJpdHkgU2VydmljZXMgKE5TUykgaXMgYSBzZXQgb2YgbGlicmFyaWVzIFwKK2Rlc2lnbmVkIHRvIHN1cHBvcnQgY3Jvc3MtcGxhdGZvcm0gZGV2ZWxvcG1lbnQgb2YgXAorc2VjdXJpdHktZW5hYmxlZCBjbGllbnQgYW5kIHNlcnZlciBhcHBsaWNhdGlvbnMuIFwKK0FwcGxpY2F0aW9ucyBidWlsdCB3aXRoIE5TUyBjYW4gc3VwcG9ydCBTU0wgdjIgYW5kIHYzLCBcCitUTFMsIFBLQ1MgNSwgUEtDUyA3LCBQS0NTIDExLCBQS0NTIDEyLCBTL01JTUUsIFguNTA5IFwKK3YzIGNlcnRpZmljYXRlcywgYW5kIG90aGVyIHNlY3VyaXR5IHN0YW5kYXJkcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3NlY3VyaXR5L3BraS9uc3MvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIk1QTC0yLjAgfCAoTVBMLTIuMCAmIEdQTC0yLjArKSB8IChNUEwtMi4wICYgTEdQTC0yLjErKSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbnNzL0NPUFlJTkc7bWQ1PTNiMWU4OGUxYjljMGI1YTRiMjg4MWQ0NmNjZTA2YTE4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL25zcy9saWIvZnJlZWJsL21waS9kb2MvTElDRU5TRTttZDU9NDkxZjE1OGQwOWQ5NDg0NjZhZmNlODVkNmYxZmUxOGYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbnNzL2xpYi9mcmVlYmwvbXBpL2RvYy9MSUNFTlNFLU1QTDttZDU9NWQ0MjVjOGYzMTU3ZGJmMjEyZGIyZWM1M2Q5ZTUxMzIiCisKK1ZFUlNJT05fRElSID0gIiR7QGQuZ2V0VmFyKCdCUCcpLnVwcGVyKCkucmVwbGFjZSgnLScsICdfJykucmVwbGFjZSgnLicsICdfJykgKyAnX1JUTSd9IgorCitTUkNfVVJJID0gImh0dHA6Ly9mdHAubW96aWxsYS5vcmcvcHViL21vemlsbGEub3JnL3NlY3VyaXR5L25zcy9yZWxlYXNlcy8ke1ZFUlNJT05fRElSfS9zcmMvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL25zcy5wYy5pbiBcCisgICAgICAgICAgIGZpbGU6Ly9zaWdubGlicy5zaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLW5zcy1maXgtc3VwcG9ydC1jcm9zcy1jb21waWxpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbnNzLW5vLXJwYXRoLWZvci1jcm9zcy1jb21waWxpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbnNzLWZpeC1pbmNvcnJlY3Qtc2hlYmFuZy1vZi1wZXJsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25zcy1maXgtbnNpbnN0YWxsLWJ1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtV3ZhcmFyZ3Mtd2l0aC1jbGFuZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wcWcuYy1VTExfYWRkZW5kLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0ZpeC1jb21waWxhdGlvbi1mb3ItWDMyLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZWJiNDRmMTM5NDI1MGQyY2Y2ZWMzYzJlM2Q3MWZhMjAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTMzNDM5MjE0ZGMwM2VlNjBlODZkMTQxOWMxOWUxNTY4OTk4YjA3NzZkZGU5ODdmNDFmYTcwY2VkNmNkMDhkYyIKKworVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9OU1MvTlNTX1JlbGVhc2VzIgorVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiTlNTXyg/UDxwdmVyPi4rKV9yZWxlYXNlX25vdGVzIgorCitpbmhlcml0IHNpdGVpbmZvCisKK0RFUEVORFMgPSAic3FsaXRlMyBuc3ByIHpsaWIgbnNzLW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gInNxbGl0ZTMtbmF0aXZlIG5zcHItbmF0aXZlIHpsaWItbmF0aXZlIgorUkRFUEVORFNfJHtQTn0tc21pbWUgPSAicGVybCIKKworVEQgPSAiJHtTfS90ZW50YXRpdmUtZGlzdCIKK1REUyA9ICIke1N9L3RlbnRhdGl2ZS1kaXN0LXN0YWdpbmciCisKK1RBUkdFVF9DQ19BUkNIICs9ICIke0xERkxBR1N9IgorCitkb19jb25maWd1cmVfcHJlcGVuZF9saWJjLW11c2wgKCkgeworICAgIHNlZCAtaSAtZSAnLy1ESEFWRV9TWVNfQ0RFRlNfSC9kJyAke1N9L25zcy9saWIvZGJtL2NvbmZpZy9jb25maWcubWsKK30KKworZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKyAgICBleHBvcnQgTlNQUl9JTkNMVURFX0RJUj0ke1NUQUdJTkdfSU5DRElSX05BVElWRX0KKyAgICBleHBvcnQgTlNQUl9MSUJfRElSPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfQorICAgIGV4cG9ydCBOU1NfRU5BQkxFX1dFUlJPUj0wCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisgICAgZXhwb3J0IExERkxBR1M9IiIKK30KKworZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKyAgICAjIE5lZWQgdG8gc2V0IFJQQVRIIHNvIHRoYXQgY2hycGF0aCB3aWxsIGRvIGl0cyBqb2IgY29ycmVjdGx5CisgICAgUlBBVEg9Ii1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfTElCRElSX05BVElWRX0gLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19CQVNFX0xJQkRJUl9OQVRJVkV9IC1XbCwtcnBhdGgsJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IC1XbCwtcnBhdGgsJHtTVEFHSU5HX0JBU0VfTElCRElSX05BVElWRX0iCit9CisKK2RvX2NvbXBpbGUoKSB7CisgICAgZXhwb3J0IENST1NTX0NPTVBJTEU9MQorICAgIGV4cG9ydCBOQVRJVkVfQ0M9IiR7QlVJTERfQ0N9IgorICAgIGV4cG9ydCBOQVRJVkVfRkxBR1M9IiR7QlVJTERfQ0ZMQUdTfSIKKyAgICBleHBvcnQgQlVJTERfT1BUPTEKKworICAgIGV4cG9ydCBGUkVFQkxfTk9fREVQRU5EPTEKKyAgICBleHBvcnQgRlJFRUJMX0xPV0hBU0g9MQorCisgICAgZXhwb3J0IExJQkRJUj0ke2xpYmRpcn0KKyAgICBleHBvcnQgTU9aSUxMQV9DTElFTlQ9MQorICAgIGV4cG9ydCBOU19VU0VfR0NDPTEKKyAgICBleHBvcnQgTlNTX1VTRV9TWVNURU1fU1FMSVRFPTEKKyAgICBleHBvcnQgTlNTX0VOQUJMRV9FQ0M9MQorCisgICAgZXhwb3J0IE9TX1JFTEVBU0U9My40CisgICAgZXhwb3J0IE9TX1RBUkdFVD1MaW51eAorICAgIGV4cG9ydCBPU19BUkNIPUxpbnV4CisKKyAgICBpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYyIgXTsgdGhlbgorICAgICAgICBPU19URVNUPXBwYworICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gInBvd2VycGM2NCIgXTsgdGhlbgorICAgICAgICBPU19URVNUPXBwYzY0CisgICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAibWlwcyIgLW8gIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzZWwiIC1vICIke1RBUkdFVF9BUkNIfSIgPSAibWlwczY0IiAtbyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHM2NGVsIiBdOyB0aGVuCisgICAgICAgIE9TX1RFU1Q9bWlwcworICAgIGVsc2UKKyAgICAgICAgT1NfVEVTVD0iJHtUQVJHRVRfQVJDSH0iCisgICAgZmkKKworICAgIGlmIFsgIiR7U0lURUlORk9fQklUU30iID0gIjY0IiBdOyB0aGVuCisgICAgICAgIGV4cG9ydCBVU0VfNjQ9MQorICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIng4Nl82NCIgLWEgIiR7U0lURUlORk9fQklUU30iID0gIjMyIiBdOyB0aGVuCisgICAgICAgIGV4cG9ydCBVU0VfWDMyPTEKKyAgICBmaQorCisgICAgZXhwb3J0IE5TU19ESVNBQkxFX0dURVNUUz0xCisKKyAgICAjIFdlIGNhbiBtb2RpZnkgQ0MgaW4gdGhlIGVudmlyb25tZW50LCBidXQgaWYgd2Ugc2V0IGl0IHZpYSBhbgorICAgICMgYXJndW1lbnQgdG8gbWFrZSwgbnNpbnN0YWxsLCBhIGhvc3QgcHJvZ3JhbSwgd2lsbCBhbHNvIGJ1aWxkIHdpdGggaXQhCisgICAgIworICAgICMgbnNzIHByZXR0eSBtdWNoIGRvZXMgaXRzIG93biB0aGluZyB3aXRoIENGTEFHUywgc28gd2UgcHV0IHRoZW0gaW50byBDQy4KKyAgICAjIE9wdGltaXphdGlvbiB3aWxsIGdldCBjbG9iYmVyZWQsIGJ1dCBtb3N0IG9mIHRoZSBzdHVmZiB3aWxsIHN1cnZpdmUuCisgICAgIyBUaGUgbW90aXZhdGlvbiBmb3IgdGhpcyBpcyB0byBwb2ludCB0byB0aGUgY29ycmVjdCBwbGFjZSBmb3IgZGVidWcKKyAgICAjIHNvdXJjZSBmaWxlcyBhbmQgQ0ZMQUdTIGRvZXMgdGhhdC4gIE5vdGhpbmcgdXNlcyBDQ0MuCisgICAgIworICAgIGV4cG9ydCBDQz0iJHtDQ30gJHtDRkxBR1N9IgorICAgIG1ha2UgLUMgLi9uc3MgQ0NDPSIke0NYWH0gLWciIFwKKyAgICAgICAgT1NfVEVTVD0ke09TX1RFU1R9IFwKKyAgICAgICAgUlBBVEg9IiR7UlBBVEh9IgorfQorZG9fY29tcGlsZVt2YXJkZXBzZXhjbHVkZV0gKz0gIlNJVEVJTkZPX0JJVFMiCisKKworZG9faW5zdGFsbF9wcmVwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKyAgICBleHBvcnQgTERGTEFHUz0iIgorfQorCitkb19pbnN0YWxsKCkgeworICAgIGV4cG9ydCBDUk9TU19DT01QSUxFPTEKKyAgICBleHBvcnQgTkFUSVZFX0NDPSIke0JVSUxEX0NDfSIKKyAgICBleHBvcnQgQlVJTERfT1BUPTEKKworICAgIGV4cG9ydCBGUkVFQkxfTk9fREVQRU5EPTEKKworICAgIGV4cG9ydCBMSUJESVI9JHtsaWJkaXJ9CisgICAgZXhwb3J0IE1PWklMTEFfQ0xJRU5UPTEKKyAgICBleHBvcnQgTlNfVVNFX0dDQz0xCisgICAgZXhwb3J0IE5TU19VU0VfU1lTVEVNX1NRTElURT0xCisgICAgZXhwb3J0IE5TU19FTkFCTEVfRUNDPTEKKworICAgIGV4cG9ydCBPU19SRUxFQVNFPTMuNAorICAgIGV4cG9ydCBPU19UQVJHRVQ9TGludXgKKyAgICBleHBvcnQgT1NfQVJDSD1MaW51eAorCisgICAgaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gInBvd2VycGMiIF07IHRoZW4KKyAgICAgICAgT1NfVEVTVD1wcGMKKyAgICBlbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjNjQiIF07IHRoZW4KKyAgICAgICAgT1NfVEVTVD1wcGM2NAorICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHMiIC1vICIke1RBUkdFVF9BUkNIfSIgPSAibWlwc2VsIiAtbyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHM2NCIgLW8gIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzNjRlbCIgXTsgdGhlbgorICAgICAgICBPU19URVNUPW1pcHMKKyAgICBlbHNlCisgICAgICAgIE9TX1RFU1Q9IiR7VEFSR0VUX0FSQ0h9IgorICAgIGZpCisgICAgaWYgWyAiJHtTSVRFSU5GT19CSVRTfSIgPSAiNjQiIF07IHRoZW4KKyAgICAgICAgZXhwb3J0IFVTRV82ND0xCisgICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAieDg2XzY0IiAtYSAiJHtTSVRFSU5GT19CSVRTfSIgPSAiMzIiIF07IHRoZW4KKyAgICAgICAgZXhwb3J0IFVTRV9YMzI9MQorICAgIGZpCisKKyAgICBleHBvcnQgTlNTX0RJU0FCTEVfR1RFU1RTPTEKKworICAgIG1ha2UgLUMgLi9uc3MgXAorICAgICAgICBDQ0M9IiR7Q1hYfSIgXAorICAgICAgICBPU19URVNUPSR7T1NfVEVTVH0gXAorICAgICAgICBTT1VSQ0VfTElCX0RJUj0iJHtURH0vJHtsaWJkaXJ9IiBcCisgICAgICAgIFNPVVJDRV9CSU5fRElSPSIke1REfS8ke2JpbmRpcn0iIFwKKyAgICAgICAgaW5zdGFsbAorCisgICAgaW5zdGFsbCAtZCAke0R9LyR7bGliZGlyfS8KKyAgICBmb3IgZmlsZSBpbiAke1N9L2Rpc3QvKi5PQkovbGliLyouc287IGRvCisgICAgICAgIGVjaG8gIkluc3RhbGxpbmcgYGJhc2VuYW1lICRmaWxlYC4uLiIKKyAgICAgICAgY3AgJGZpbGUgICR7RH0vJHtsaWJkaXJ9LworICAgIGRvbmUKKworICAgIGZvciBzaGFyZWRfbGliIGluICR7VER9LyR7bGliZGlyfS8qLnNvLio7IGRvCisgICAgICAgIGlmIFsgLWYgJHNoYXJlZF9saWIgXTsgdGhlbgorICAgICAgICAgICAgY3AgJHNoYXJlZF9saWIgJHtEfS8ke2xpYmRpcn0KKyAgICAgICAgICAgIGxuIC1zZiAkKGJhc2VuYW1lICRzaGFyZWRfbGliKSAke0R9LyR7bGliZGlyfS8kKGJhc2VuYW1lICRzaGFyZWRfbGliIC4xb2UpCisgICAgICAgIGZpCisgICAgZG9uZQorICAgIGZvciBzaGFyZWRfbGliIGluICR7VER9LyR7bGliZGlyfS8qLnNvOyBkbworICAgICAgICBpZiBbIC1mICRzaGFyZWRfbGliIC1hICEgLWUgJHtEfS8ke2xpYmRpcn0vJHNoYXJlZF9saWIgXTsgdGhlbgorICAgICAgICAgICAgY3AgJHNoYXJlZF9saWIgJHtEfS8ke2xpYmRpcn0KKyAgICAgICAgZmkKKyAgICBkb25lCisKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtpbmNsdWRlZGlyfS9uc3MzCisgICAgaW5zdGFsbCAtbSA2NDQgLXQgJHtEfS8ke2luY2x1ZGVkaXJ9L25zczMgZGlzdC9wdWJsaWMvbnNzLyoKKworICAgIGluc3RhbGwgLWQgJHtEfS8ke2JpbmRpcn0KKyAgICBmb3IgYmluYXJ5IGluICR7VER9LyR7YmluZGlyfS8qOyBkbworICAgICAgICBpbnN0YWxsIC1tIDc1NSAtdCAke0R9LyR7YmluZGlyfSAkYmluYXJ5CisgICAgZG9uZQorfQorZG9faW5zdGFsbFt2YXJkZXBzZXhjbHVkZV0gKz0gIlNJVEVJTkZPX0JJVFMiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgICMgQ3JlYXRlIGVtcHR5IC5jaGsgZmlsZXMgZm9yIHRoZSBOU1MgbGlicmFyaWVzIGF0IGJ1aWxkIHRpbWUuIFRoZXkgY291bGQKKyAgICAjIGJlIHJlZ2VuZXJhdGVkIGF0IHRhcmdldCdzIGJvb3QgdGltZS4KKyAgICBmb3IgZmlsZSBpbiBsaWJzb2Z0b2tuMy5jaGsgbGliZnJlZWJsMy5jaGsgbGlibnNzZGJtMy5jaGs7IGRvCisgICAgICAgIHRvdWNoICR7RH0vJHtsaWJkaXJ9LyRmaWxlCisgICAgICAgIGNobW9kIDc1NSAke0R9LyR7bGliZGlyfS8kZmlsZQorICAgIGRvbmUKKyAgICBpbnN0YWxsIC1EIC1tIDc1NSAke1dPUktESVJ9L3NpZ25saWJzLnNoICR7RH0vJHtiaW5kaXJ9L3NpZ25saWJzLnNoCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnLworICAgIHNlZCAncy8lTlNTX1ZFUlNJT04lLyR7UFZ9LycgJHtXT1JLRElSfS9uc3MucGMuaW4gfCBzZWQgJ3MvJU5TUFJfVkVSU0lPTiUvNC45LjIvJyA+ICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworICAgIHNlZCAtaSBzOk9FUFJFRklYOiR7cHJlZml4fTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworICAgIHNlZCAtaSBzOk9FRVhFQ1BSRUZJWDoke2V4ZWNfcHJlZml4fTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworICAgIHNlZCAtaSBzOk9FTElCRElSOiR7bGliZGlyfTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworICAgIHNlZCAtaSBzOk9FSU5DRElSOiR7aW5jbHVkZWRpcn0vbnNzMzpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7CisgICAgIyBDcmVhdGUgYSBibGFuayBjZXJ0aWZpY2F0ZQorICAgIG1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L3BraS9uc3NkYi8KKyAgICB0b3VjaCAuL2VtcHR5X3Bhc3N3b3JkCisgICAgY2VydHV0aWwgLU4gLWQgJHtEfSR7c3lzY29uZmRpcn0vcGtpL25zc2RiLyAtZiAuL2VtcHR5X3Bhc3N3b3JkCisgICAgY2htb2QgNjQ0ICR7RH0ke3N5c2NvbmZkaXJ9L3BraS9uc3NkYi8qLmRiCisgICAgcm0gLi9lbXB0eV9wYXNzd29yZAorfQorCitQQUNLQUdFX1dSSVRFX0RFUFMgKz0gIm5zcy1uYXRpdmUiCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworICAgIGlmIFsgLW4gIiREIiBdOyB0aGVuCisgICAgICAgIGZvciBJIGluICREJHtsaWJkaXJ9L2xpYiouY2hrOyBkbworICAgICAgICAgICAgRE49YGRpcm5hbWUgJElgCisgICAgICAgICAgICBCTj1gYmFzZW5hbWUgJEkgLmNoa2AKKyAgICAgICAgICAgIEZOPSRETi8kQk4uc28KKyAgICAgICAgICAgIHNobGlic2lnbiAtaSAkRk4KKyAgICAgICAgICAgIGlmIFsgJD8gLW5lIDAgXTsgdGhlbgorICAgICAgICAgICAgICAgIGV4aXQgMQorICAgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgIGVsc2UKKyAgICAgICAgc2lnbmxpYnMuc2gKKyAgICBmaQorfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tc21pbWUiCitGSUxFU18ke1BOfS1zbWltZSA9ICJcCisgICAgJHtiaW5kaXJ9L3NtaW1lIFwKKyIKK0ZJTEVTXyR7UE59ID0gIlwKKyAgICAke3N5c2NvbmZkaXJ9IFwKKyAgICAke2JpbmRpcn0gXAorICAgICR7bGliZGlyfS9saWIqLmNoayBcCisgICAgJHtsaWJkaXJ9L2xpYiouc28gXAorICAgICIKK0ZJTEVTXyR7UE59LWRldiA9ICJcCisgICAgJHtsaWJkaXJ9L25zcyBcCisgICAgJHtsaWJkaXJ9L3BrZ2NvbmZpZy8qIFwKKyAgICAke2luY2x1ZGVkaXJ9LyogXAorICAgICIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcGluZW50cnkvcGluZW50cnktMS4wLjAvZ3BnLWVycm9yX3BrY29uZi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9waW5lbnRyeS9waW5lbnRyeS0xLjAuMC9ncGctZXJyb3JfcGtjb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMWVkYjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcGluZW50cnkvcGluZW50cnktMS4wLjAvZ3BnLWVycm9yX3BrY29uZi5wYXRjaApAQCAtMCwwICsxLDEwMCBAQAorQ29udmVydCB0byBwa2ctY29uZmlnIHN1cHBvcnQgdG8gbWF0Y2ggY2hhbmdlcyBkb25lIHRvIAordGhlIGdwZy1lcnJvciByZWNpcGUgZm9yIGdwZy1lcnJvci5wYyAgZ2VuZXJhdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+CisKK0luZGV4OiBwaW5lbnRyeS0xLjAuMC9tNC9ncGctZXJyb3IubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwaW5lbnRyeS0xLjAuMC5vcmlnL200L2dwZy1lcnJvci5tNAorKysrIHBpbmVudHJ5LTEuMC4wL200L2dwZy1lcnJvci5tNAorQEAgLTI1LDc0ICsyNSwxMiBAQCBkbmwgY29uZmlnIHNjcmlwdCBkb2VzIG5vdCBtYXRjaCB0aGUgaG9zCisgZG5sIGlzIGFkZGVkIHRvIHRoZSBncGdfY29uZmlnX3NjcmlwdF93YXJuIHZhcmlhYmxlLgorIGRubAorIEFDX0RFRlVOKFtBTV9QQVRIX0dQR19FUlJPUl0sCistWyBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCistICBncGdfZXJyb3JfY29uZmlnX3ByZWZpeD0iIgorLSAgZG5sIC0td2l0aC1saWJncGctZXJyb3ItcHJlZml4PVBGWCBpcyB0aGUgcHJlZmVycmVkIG5hbWUgZm9yIHRoaXMgb3B0aW9uLAorLSAgZG5sIHNpbmNlIHRoYXQgaXMgY29uc2lzdGVudCB3aXRoIGhvdyBvdXIgdGhyZWUgc2libGluZ3MgdXNlIHRoZSBkaXJlY3RvcnkvCistICBkbmwgcGFja2FnZSBuYW1lIGluIC0td2l0aC0kZGlyX25hbWUtcHJlZml4PVBGWC4KKy0gIEFDX0FSR19XSVRIKGxpYmdwZy1lcnJvci1wcmVmaXgsCistICAgICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWxpYmdwZy1lcnJvci1wcmVmaXg9UEZYXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcmVmaXggd2hlcmUgR1BHIEVycm9yIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSksCistICAgICAgICAgICAgICBbZ3BnX2Vycm9yX2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIl0pCistCistICBkbmwgQWNjZXB0IC0td2l0aC1ncGctZXJyb3ItcHJlZml4IGFuZCBtYWtlIGl0IHdvcmsgdGhlIHNhbWUgYXMKKy0gIGRubCAtLXdpdGgtbGliZ3BnLWVycm9yLXByZWZpeCBhYm92ZSwgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LAorLSAgZG5sIGJ1dCBkbyBub3QgZG9jdW1lbnQgdGhpcyBvbGQsIGluY29uc2lzdGVudGx5LW5hbWVkIG9wdGlvbi4KKy0gIEFDX0FSR19XSVRIKGdwZy1lcnJvci1wcmVmaXgsLAorLSAgICAgICAgICAgICAgW2dwZ19lcnJvcl9jb25maWdfcHJlZml4PSIkd2l0aHZhbCJdKQorLQorLSAgaWYgdGVzdCB4IiR7R1BHX0VSUk9SX0NPTkZJR30iID0geCA7IHRoZW4KKy0gICAgIGlmIHRlc3QgeCIke2dwZ19lcnJvcl9jb25maWdfcHJlZml4fSIgIT0geCA7IHRoZW4KKy0gICAgICAgIEdQR19FUlJPUl9DT05GSUc9IiR7Z3BnX2Vycm9yX2NvbmZpZ19wcmVmaXh9L2Jpbi9ncGctZXJyb3ItY29uZmlnIgorLSAgICAgZWxzZQorLSAgICAgICBjYXNlICIke1NZU1JPT1R9IiBpbgorLSAgICAgICAgIC8qKQorLSAgICAgICAgICAgaWYgdGVzdCAteCAiJHtTWVNST09UfS9iaW4vZ3BnLWVycm9yLWNvbmZpZyIgOyB0aGVuCistICAgICAgICAgICAgIEdQR19FUlJPUl9DT05GSUc9IiR7U1lTUk9PVH0vYmluL2dwZy1lcnJvci1jb25maWciCistICAgICAgICAgICBmaQorLSAgICAgICAgICAgOzsKKy0gICAgICAgICAnJykKKy0gICAgICAgICAgIDs7CistICAgICAgICAgICopCistICAgICAgICAgICBBQ19NU0dfV0FSTihbSWdub3JpbmcgXCRTWVNST09UIGFzIGl0IGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRoLl0pCistICAgICAgICAgICA7OworLSAgICAgICBlc2FjCistICAgICBmaQorLSAgZmkKKy0KKy0gIEFDX1BBVEhfUFJPRyhHUEdfRVJST1JfQ09ORklHLCBncGctZXJyb3ItY29uZmlnLCBubykKKytbCisgICBtaW5fZ3BnX2Vycm9yX3ZlcnNpb249aWZlbHNlKFskMV0sICwwLjAsJDEpCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEdQRyBFcnJvciAtIHZlcnNpb24gPj0gJG1pbl9ncGdfZXJyb3JfdmVyc2lvbikKKy0gIG9rPW5vCistICBpZiB0ZXN0ICIkR1BHX0VSUk9SX0NPTkZJRyIgIT0gIm5vIiBcCistICAgICAmJiB0ZXN0IC1mICIkR1BHX0VSUk9SX0NPTkZJRyIgOyB0aGVuCistICAgIHJlcV9tYWpvcj1gZWNobyAkbWluX2dwZ19lcnJvcl92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMS8nYAorLSAgICByZXFfbWlub3I9YGVjaG8gJG1pbl9ncGdfZXJyb3JfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDIvJ2AKKy0gICAgZ3BnX2Vycm9yX2NvbmZpZ192ZXJzaW9uPWAkR1BHX0VSUk9SX0NPTkZJRyAkZ3BnX2Vycm9yX2NvbmZpZ19hcmdzIC0tdmVyc2lvbmAKKy0gICAgbWFqb3I9YGVjaG8gJGdwZ19lcnJvcl9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMS8nYAorLSAgICBtaW5vcj1gZWNobyAkZ3BnX2Vycm9yX2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wyLydgCistICAgIGlmIHRlc3QgIiRtYWpvciIgLWd0ICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgb2s9eWVzCistICAgIGVsc2UKKy0gICAgICAgIGlmIHRlc3QgIiRtYWpvciIgLWVxICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgICAgIGlmIHRlc3QgIiRtaW5vciIgLWdlICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgIGZpCistICAgICAgICBmaQorLSAgICBmaQorLSAgZmkKKysgIFBLR19DSEVDS19NT0RVTEVTKEdQR19FUlJPUiwgW2dwZy1lcnJvciA+PSAkbWluX2dwZ19lcnJvcl92ZXJzaW9uIGdwZy1lcnJvcl0sIFtvaz15ZXNdLCBbb2s9bm9dKQorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgR1BHX0VSUk9SX0NGTEFHUz1gJEdQR19FUlJPUl9DT05GSUcgJGdwZ19lcnJvcl9jb25maWdfYXJncyAtLWNmbGFnc2AKKy0gICAgR1BHX0VSUk9SX0xJQlM9YCRHUEdfRVJST1JfQ09ORklHICRncGdfZXJyb3JfY29uZmlnX2FyZ3MgLS1saWJzYAorLSAgICBHUEdfRVJST1JfTVRfQ0ZMQUdTPWAkR1BHX0VSUk9SX0NPTkZJRyAkZ3BnX2Vycm9yX2NvbmZpZ19hcmdzIC0tbXQgLS1jZmxhZ3MgMj4vZGV2L251bGxgCistICAgIEdQR19FUlJPUl9NVF9MSUJTPWAkR1BHX0VSUk9SX0NPTkZJRyAkZ3BnX2Vycm9yX2NvbmZpZ19hcmdzIC0tbXQgLS1saWJzIDI+L2Rldi9udWxsYAorLSAgICBBQ19NU0dfUkVTVUxUKFt5ZXMgKCRncGdfZXJyb3JfY29uZmlnX3ZlcnNpb24pXSkKKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKKy0gICAgZ3BnX2Vycm9yX2NvbmZpZ19ob3N0PWAkR1BHX0VSUk9SX0NPTkZJRyAkZ3BnX2Vycm9yX2NvbmZpZ19hcmdzIC0taG9zdCAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vbmVgCisrICAgIGdwZ19lcnJvcl9jb25maWdfaG9zdD1gJFBLR19DT05GSUcgLS1ob3N0IGdwZy1lcnJvciAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vbmVgCisgICAgIGlmIHRlc3QgeCIkZ3BnX2Vycm9yX2NvbmZpZ19ob3N0IiAhPSB4bm9uZSA7IHRoZW4KKyAgICAgICBpZiB0ZXN0IHgiJGdwZ19lcnJvcl9jb25maWdfaG9zdCIgIT0geCIkaG9zdCIgOyB0aGVuCisgICBBQ19NU0dfV0FSTihbWworQEAgLTEwNywxMCArNDUsNiBAQCBBQ19ERUZVTihbQU1fUEFUSF9HUEdfRVJST1JdLAorICAgICAgIGZpCisgICAgIGZpCisgICBlbHNlCistICAgIEdQR19FUlJPUl9DRkxBR1M9IiIKKy0gICAgR1BHX0VSUk9SX0xJQlM9IiIKKy0gICAgR1BHX0VSUk9SX01UX0NGTEFHUz0iIgorLSAgICBHUEdfRVJST1JfTVRfTElCUz0iIgorICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorICAgZmkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9waW5lbnRyeS9waW5lbnRyeS0xLjAuMC9saWJhc3N1YW5fcGtnY29uZi5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9waW5lbnRyeS9waW5lbnRyeS0xLjAuMC9saWJhc3N1YW5fcGtnY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWQ1NjRmCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BpbmVudHJ5L3BpbmVudHJ5LTEuMC4wL2xpYmFzc3Vhbl9wa2djb25mLnBhdGNoCkBAIC0wLDAgKzEsMTUzIEBACitDb252ZXJ0IHRvIHBrZy1jb25maWcgc3VwcG9ydCB0byBtYXRjaCBjaGFuZ2VzIGRvbmUgdG8KK3RoZSBsaWJhc3N1YW4gcmVjaXBlIGZvciBsaWJhc3N1YW4ucGMgZ2VuZXJhdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+CisKK0luZGV4OiBwaW5lbnRyeS0xLjAuMC9tNC9saWJhc3N1YW4ubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwaW5lbnRyeS0xLjAuMC5vcmlnL200L2xpYmFzc3Vhbi5tNAorKysrIHBpbmVudHJ5LTEuMC4wL200L2xpYmFzc3Vhbi5tNAorQEAgLTEzLDM0ICsxMyw4IEBAIGRubAorIGRubCBDb21tb24gY29kZSB1c2VkIGZvciBsaWJhc3N1YW4gZGV0ZWN0aW9uIFtpbnRlcm5hbF0KKyBkbmwgUmV0dXJucyBvayBzZXQgdG8geWVzIG9yIG5vLgorIGRubAorLUFDX0RFRlVOKFtfQU1fUEFUSF9MSUJBU1NVQU5fQ09NTU9OXSwKKy1bIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKy0gIEFDX0FSR19XSVRIKGxpYmFzc3Vhbi1wcmVmaXgsCistICAgICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWxpYmFzc3Vhbi1wcmVmaXg9UEZYXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcmVmaXggd2hlcmUgTElCQVNTVUFOIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSksCistICAgICBsaWJhc3N1YW5fY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiLCBsaWJhc3N1YW5fY29uZmlnX3ByZWZpeD0iIikKKy0gIGlmIHRlc3QgeCRsaWJhc3N1YW5fY29uZmlnX3ByZWZpeCAhPSB4IDsgdGhlbgorLSAgICBsaWJhc3N1YW5fY29uZmlnX2FyZ3M9IiRsaWJhc3N1YW5fY29uZmlnX2FyZ3MgLS1wcmVmaXg9JGxpYmFzc3Vhbl9jb25maWdfcHJlZml4IgorLSAgICBpZiB0ZXN0IHgke0xJQkFTU1VBTl9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgorLSAgICAgIExJQkFTU1VBTl9DT05GSUc9JGxpYmFzc3Vhbl9jb25maWdfcHJlZml4L2Jpbi9saWJhc3N1YW4tY29uZmlnCistICAgIGZpCistICBlbHNlCistICAgIGNhc2UgIiR7U1lTUk9PVH0iIGluCistICAgICAgIC8qKQorLSAgICAgICAgIGlmIHRlc3QgLXggIiR7U1lTUk9PVH0vYmluL2xpYmFzc3Vhbi1jb25maWciIDsgdGhlbgorLSAgICAgICAgICAgTElCQVNTVUFOX0NPTkZJRz0iJHtTWVNST09UfS9iaW4vbGliYXNzdWFuLWNvbmZpZyIKKy0gICAgICAgICBmaQorLSAgICAgICAgIDs7CistICAgICAgICcnKQorLSAgICAgICAgIDs7CistICAgICAgICAqKQorLSAgICAgICAgIEFDX01TR19XQVJOKFtJZ25vcmluZyBcJFNZU1JPT1QgYXMgaXQgaXMgbm90IGFuIGFic29sdXRlIHBhdGguXSkKKy0gICAgICAgICA7OworLSAgICAgZXNhYworLSAgZmkKKy0KKy0gIEFDX1BBVEhfVE9PTChMSUJBU1NVQU5fQ09ORklHLCBsaWJhc3N1YW4tY29uZmlnLCBubykKKy0KKytBQ19ERUZVTihbQU1fUEFUSF9MSUJBU1NVQU5fQ09NTU9OXSwKKytbCisgICB0bXA9aWZlbHNlKFskMV0sICwxOjAuOS4yLCQxKQorICAgaWYgZWNobyAiJHRtcCIgfCBncmVwICc6JyA+L2Rldi9udWxsIDI+L2Rldi9udWxsIDsgdGhlbgorICAgICByZXFfbGliYXNzdWFuX2FwaT1gZWNobyAiJHRtcCIgICAgIHwgc2VkICdzL1woLipcKTpcKC4qXCkvXDEvJ2AKK0BAIC01MCw1MSArMjQsMTEgQEAgQUNfREVGVU4oW19BTV9QQVRIX0xJQkFTU1VBTl9DT01NT05dLAorICAgICBtaW5fbGliYXNzdWFuX3ZlcnNpb249IiR0bXAiCisgICBmaQorIAorLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBMSUJBU1NVQU4gLSB2ZXJzaW9uID49ICRtaW5fbGliYXNzdWFuX3ZlcnNpb24pCistICBvaz1ubworLSAgaWYgdGVzdCAiJExJQkFTU1VBTl9DT05GSUciICE9ICJubyIgXAorLSAgICAgJiYgdGVzdCAtZiAiJExJQkFTU1VBTl9DT05GSUciIDsgdGhlbgorLSAgICByZXFfbWFqb3I9YGVjaG8gJG1pbl9saWJhc3N1YW5fdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMS8nYAorLSAgICByZXFfbWlub3I9YGVjaG8gJG1pbl9saWJhc3N1YW5fdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMi8nYAorLSAgICByZXFfbWljcm89YGVjaG8gJG1pbl9saWJhc3N1YW5fdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMy8nYAorLQorLSAgICBsaWJhc3N1YW5fY29uZmlnX3ZlcnNpb249YCRMSUJBU1NVQU5fQ09ORklHIC0tdmVyc2lvbmAKKy0gICAgbWFqb3I9YGVjaG8gJGxpYmFzc3Vhbl9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wxLydgCistICAgIG1pbm9yPWBlY2hvICRsaWJhc3N1YW5fY29uZmlnX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMi8nYAorLSAgICBtaWNybz1gZWNobyAkbGliYXNzdWFuX2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDMvJ2AKKy0KKy0gICAgaWYgdGVzdCAiJG1ham9yIiAtZ3QgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICBvaz15ZXMKKy0gICAgZWxzZQorLSAgICAgICAgaWYgdGVzdCAiJG1ham9yIiAtZXEgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICAgICAgaWYgdGVzdCAiJG1pbm9yIiAtZ3QgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgIGlmIHRlc3QgIiRtaW5vciIgLWVxICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkbWljcm8iIC1nZSAiJHJlcV9taWNybyI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgIGZpCistICAgICAgICBmaQorLSAgICBmaQorLSAgZmkKKy0KKy0gIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIEFDX01TR19SRVNVTFQoW3llcyAoJGxpYmFzc3Vhbl9jb25maWdfdmVyc2lvbildKQorLSAgZWxzZQorLSAgICBBQ19NU0dfUkVTVUxUKG5vKQorLSAgZmkKKysgIFBLR19DSEVDS19NT0RVTEVTKExJQkFTU1VBTl9DT01NT04sIFtsaWJhc3N1YW4gPj0gJG1pbl9saWJhc3N1YW5fdmVyc2lvbiBsaWJhc3N1YW5dLCBbb2s9eWVzXSwgW29rPW5vXSkKKyAKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCisgICAgIGlmIHRlc3QgIiRyZXFfbGliYXNzdWFuX2FwaSIgLWd0IDAgOyB0aGVuCistICAgICAgdG1wPWAkTElCQVNTVUFOX0NPTkZJRyAtLWFwaS12ZXJzaW9uIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKKysgICAgICB0bXA9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9YXBpX3ZlcnNpb24gbGliYXNzdWFuIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKKyAgICAgICBpZiB0ZXN0ICIkdG1wIiAtZ3QgMCA7IHRoZW4KKyAgICAgICAgIEFDX01TR19DSEVDS0lORyhbTElCQVNTVUFOIEFQSSB2ZXJzaW9uXSkKKyAgICAgICAgIGlmIHRlc3QgIiRyZXFfbGliYXNzdWFuX2FwaSIgLWVxICIkdG1wIiA7IHRoZW4KK0BAIC0xMDksNyArNDMsNyBAQCBBQ19ERUZVTihbX0FNX1BBVEhfTElCQVNTVUFOX0NPTU1PTl0sCisgCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorICAgICBpZiB0ZXN0IHgiJGhvc3QiICE9IHggOyB0aGVuCistICAgICAgbGliYXNzdWFuX2NvbmZpZ19ob3N0PWAkTElCQVNTVUFOX0NPTkZJRyAtLWhvc3QgMj4vZGV2L251bGwgfHwgZWNobyBub25lYAorKyAgICAgIGxpYmFzc3Vhbl9jb25maWdfaG9zdD1gJFBLR19DT05GSUcgLS1ob3N0IGxpYmFzc3VhbiAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCisgICAgICAgaWYgdGVzdCB4IiRsaWJhc3N1YW5fY29uZmlnX2hvc3QiICE9IHhub25lIDsgdGhlbgorICAgICAgICAgaWYgdGVzdCB4IiRsaWJhc3N1YW5fY29uZmlnX2hvc3QiICE9IHgiJGhvc3QiIDsgdGhlbgorICAgQUNfTVNHX1dBUk4oW1sKK0BAIC0xMzIsNyArNjYsNyBAQCBkbmwgVGVzdCB3aGV0aGVyIGxpYmFzc3VhbiBoYXMgYXQgbGVhc3QKKyBkbmwgdXNlZCB0byB0ZXN0IGZvciBmZWF0dXJlcyBvbmx5IGF2YWlsYWJsZSBpbiBuZXdlciB2ZXJzaW9ucy4KKyBkbmwKKyBBQ19ERUZVTihbQU1fQ0hFQ0tfTElCQVNTVUFOXSwKKy1bIF9BTV9QQVRIX0xJQkFTU1VBTl9DT01NT04oJDEpCisrWyBBTV9QQVRIX0xJQkFTU1VBTl9DT01NT04oJDEpCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQorICAgZWxzZQorQEAgLTE0OCwxNiArODIsMTAgQEAgZG5sICAgICAgICAgICAgICAgICAgIFtBQ1RJT04tSUYtRk9VTkQgWworIGRubCBUZXN0IGZvciBsaWJhc3N1YW4gYW5kIGRlZmluZSBMSUJBU1NVQU5fQ0ZMQUdTIGFuZCBMSUJBU1NVQU5fTElCUworIGRubAorIEFDX0RFRlVOKFtBTV9QQVRIX0xJQkFTU1VBTl0sCistWyBfQU1fUEFUSF9MSUJBU1NVQU5fQ09NTU9OKCQxKQorK1sgQU1fUEFUSF9MSUJBU1NVQU5fQ09NTU9OKCQxKQorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgTElCQVNTVUFOX0NGTEFHUz1gJExJQkFTU1VBTl9DT05GSUcgJGxpYmFzc3Vhbl9jb25maWdfYXJncyAtLWNmbGFnc2AKKy0gICAgTElCQVNTVUFOX0xJQlM9YCRMSUJBU1NVQU5fQ09ORklHICRsaWJhc3N1YW5fY29uZmlnX2FyZ3MgLS1saWJzYAorICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQorICAgZWxzZQorLSAgICBMSUJBU1NVQU5fQ0ZMQUdTPSIiCistICAgIExJQkFTU1VBTl9MSUJTPSIiCisgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCisgICBmaQorLSAgQUNfU1VCU1QoTElCQVNTVUFOX0NGTEFHUykKKy0gIEFDX1NVQlNUKExJQkFTU1VBTl9MSUJTKQorIF0pCitJbmRleDogcGluZW50cnktMS4wLjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGluZW50cnktMS4wLjAub3JpZy9jb25maWd1cmUuYWMKKysrKyBwaW5lbnRyeS0xLjAuMC9jb25maWd1cmUuYWMKK0BAIC0yNjYsOCArMjY2LDggQEAgaWYgdGVzdCAiJGhhdmVfbGliYXNzdWFuIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgW3ZlcnNpb24gb2YgdGhlIGxpYmFzc3VhbiBsaWJyYXJ5XSkKKyBmaQorIAorLUNPTU1PTl9DRkxBR1M9IiRMSUJBU1NVQU5fQ0ZMQUdTICRDT01NT05fQ0ZMQUdTIgorLUNPTU1PTl9MSUJTPSIkTElCQVNTVUFOX0xJQlMgJENPTU1PTl9MSUJTIgorK0NPTU1PTl9DRkxBR1M9IiRMSUJBU1NVQU5fQ09NTU9OX0NGTEFHUyAkQ09NTU9OX0NGTEFHUyIKKytDT01NT05fTElCUz0iJExJQkFTU1VBTl9DT01NT05fTElCUyAkQ09NTU9OX0xJQlMiCisgCisgCisgZG5sIENoZWNrcyBmb3IgbGlic2VjbWVtLgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BpbmVudHJ5L3BpbmVudHJ5XzAuOS4yLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BpbmVudHJ5L3BpbmVudHJ5XzAuOS4yLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzE1YTk5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9waW5lbnRyeS9waW5lbnRyeV8wLjkuMi5iYgorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLVNVTU1BUlkgPSAiQ29sbGVjdGlvbiBvZiBzaW1wbGUgUElOIG9yIHBhc3NwaHJhc2UgZW50cnkgZGlhbG9ncyIKLURFU0NSSVBUSU9OID0gIlwKLQlQaW5lbnRyeSBpcyBhIGNvbGxlY3Rpb24gb2Ygc2ltcGxlIFBJTiBvciBwYXNzcGhyYXNlIGVudHJ5IGRpYWxvZ3Mgd2hpY2ggXAotCXV0aWxpemUgdGhlIEFzc3VhbiBwcm90b2NvbCBhcyBkZXNjcmliZWQgYnkgdGhlIGFlZ3lwdGVuIHByb2plY3Q7IHNlZSBcCi0JaHR0cDovL3d3dy5nbnVwZy5vcmcvYWVneXB0ZW4vIGZvciBkZXRhaWxzLiIKLQotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnVwZy5vcmcvcmVsYXRlZF9zb2Z0d2FyZS9waW5lbnRyeS9pbmRleC5lbi5odG1sIgotTElDRU5TRSA9ICJHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWNiYmQ3OTRlMmEwYTI4OWI5ZGZjYzlmNTEzZDE5OTZlIgotCi1pbmhlcml0IGF1dG90b29scwotCi1ERVBFTkRTID0gImdldHRleHQtbmF0aXZlIgotCi1VUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9nbnVwZy5vcmcvZG93bmxvYWQvaW5kZXguaHRtbCIKLVNSQ19VUkkgPSAiJHtHTlVQR19NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiIKLQotU1JDX1VSSVttZDVzdW1dID0gImY1MWQ0NTRmOTIxMTExYjUxNTZhMjI5MWNiZjcwMjc4IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImZkOGJjMTU5MmNlYjIyYmI0OTJiMDdjYjI5YjFiMTQwYmI4ODJjODU5ZTY1MDNiOTc0MjU0YzBhNGI0MTM0ZDEiCi0KLUVYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtcnBhdGggXAotCQkgICAgICAgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIFwKLSAgICAgICAgICAgICAgICIKLQotUEFDS0FHRUNPTkZJRyA/Pz0gIm5jdXJzZXMgbGliY2FwIgotCi1QQUNLQUdFQ09ORklHW25jdXJzZXNdID0gIi0tZW5hYmxlLW5jdXJzZXMgIC0td2l0aC1uY3Vyc2VzLWluY2x1ZGUtZGlyPSR7U1RBR0lOR19JTkNESVJ9LCAtLWRpc2FibGUtbmN1cnNlcywgbmN1cnNlcyIKLVBBQ0tBR0VDT05GSUdbbGliY2FwXSA9ICItLXdpdGgtbGliY2FwLCAtLXdpdGhvdXQtbGliY2FwLCBsaWJjYXAiCi1QQUNLQUdFQ09ORklHW3F0NF0gPSAiLS1lbmFibGUtcGluZW50cnktcXQ0LCAtLWRpc2FibGUtcGluZW50cnktcXQ0LCBxdDQteDExIgotUEFDS0FHRUNPTkZJR1txdDRfY2xpcGJvYXJkXSA9ICItLWVuYWJsZS1waW5lbnRyeS1xdDQtY2xpcGJvYXJkIC0tZW5hYmxlLXBpbmVudHJ5LXF0NCwgLS1kaXNhYmxlLXBpbmVudHJ5LXF0NC1jbGlwYm9hcmQsIHF0NC14MTEiCi1QQUNLQUdFQ09ORklHW2d0azJdID0gIi0tZW5hYmxlLXBpbmVudHJ5LWd0azIsIC0tZGlzYWJsZS1waW5lbnRyeS1ndGsyLCBndGsrIGdsaWItMi4wIgotCi0jVG8gdXNlIGxpYnNlY3JldCwgYWRkIG1ldGEtZ25vbWUKLVBBQ0tBR0VDT05GSUdbc2VjcmV0XSA9ICItLWVuYWJsZS1saWJzZWNyZXQsIC0tZGlzYWJsZS1saWJzZWNyZXQsIGxpYnNlY3JldCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9waW5lbnRyeS9waW5lbnRyeV8xLjAuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9waW5lbnRyeS9waW5lbnRyeV8xLjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTlhY2QzCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BpbmVudHJ5L3BpbmVudHJ5XzEuMC4wLmJiCkBAIC0wLDAgKzEsMzYgQEAKK1NVTU1BUlkgPSAiQ29sbGVjdGlvbiBvZiBzaW1wbGUgUElOIG9yIHBhc3NwaHJhc2UgZW50cnkgZGlhbG9ncyIKK0RFU0NSSVBUSU9OID0gIlwKKwlQaW5lbnRyeSBpcyBhIGNvbGxlY3Rpb24gb2Ygc2ltcGxlIFBJTiBvciBwYXNzcGhyYXNlIGVudHJ5IGRpYWxvZ3Mgd2hpY2ggXAorCXV0aWxpemUgdGhlIEFzc3VhbiBwcm90b2NvbCBhcyBkZXNjcmliZWQgYnkgdGhlIGFlZ3lwdGVuIHByb2plY3Q7IHNlZSBcCisJaHR0cDovL3d3dy5nbnVwZy5vcmcvYWVneXB0ZW4vIGZvciBkZXRhaWxzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnVwZy5vcmcvcmVsYXRlZF9zb2Z0d2FyZS9waW5lbnRyeS9pbmRleC5lbi5odG1sIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWNiYmQ3OTRlMmEwYTI4OWI5ZGZjYzlmNTEzZDE5OTZlIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworREVQRU5EUyA9ICJnZXR0ZXh0LW5hdGl2ZSBsaWJhc3N1YW4gbGliZ3BnLWVycm9yIgorCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9nbnVwZy5vcmcvZG93bmxvYWQvaW5kZXguaHRtbCIKK1NSQ19VUkkgPSAiJHtHTlVQR19NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9saWJhc3N1YW5fcGtnY29uZi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncGctZXJyb3JfcGtjb25mLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjRhM2ZhZDhiMzFmOWI0YzU1MjZjODgzNzQ5NTAxNWRjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjE2NzJjMmVkYzFmZWIwMzYwNzViMTg3YzA3NzM3ODdiMmFmZDA1NDRmNTUwMjVjNjQ1YTcxYjRjMmY3OTI3NWEiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtcnBhdGggLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1waW5lbnRyeS1xdDUgIFwKKyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIm5jdXJzZXMgbGliY2FwIgorCitQQUNLQUdFQ09ORklHW25jdXJzZXNdID0gIi0tZW5hYmxlLW5jdXJzZXMgIC0td2l0aC1uY3Vyc2VzLWluY2x1ZGUtZGlyPSR7U1RBR0lOR19JTkNESVJ9LCAtLWRpc2FibGUtbmN1cnNlcywgbmN1cnNlcyIKK1BBQ0tBR0VDT05GSUdbbGliY2FwXSA9ICItLXdpdGgtbGliY2FwLCAtLXdpdGhvdXQtbGliY2FwLCBsaWJjYXAiCitQQUNLQUdFQ09ORklHW3F0XSA9ICItLWVuYWJsZS1waW5lbnRyeS1xdCwgLS1kaXNhYmxlLXBpbmVudHJ5LXF0LCBxdDQteDExIgorUEFDS0FHRUNPTkZJR1tndGsyXSA9ICItLWVuYWJsZS1waW5lbnRyeS1ndGsyLCAtLWRpc2FibGUtcGluZW50cnktZ3RrMiwgZ3RrKyBnbGliLTIuMCIKKworI1RvIHVzZSBsaWJzZWNyZXQsIGFkZCBtZXRhLWdub21lCitQQUNLQUdFQ09ORklHW3NlY3JldF0gPSAiLS1lbmFibGUtbGlic2VjcmV0LCAtLWRpc2FibGUtbGlic2VjcmV0LCBsaWJzZWNyZXQiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRlc3QtcnVubmVyL3B0ZXN0LXJ1bm5lcl8yLjAuMi5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGVzdC1ydW5uZXIvcHRlc3QtcnVubmVyXzIuMC4yLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2U5YTdlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGVzdC1ydW5uZXIvcHRlc3QtcnVubmVyXzIuMC4yLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotU1VNTUFSWSA9ICJBIEMgcHJvZ3JhbSB0byBydW4gYWxsIGluc3RhbGxlZCBwdGVzdHMiCi1ERVNDUklQVElPTiA9ICJUaGUgcHRlc3QtcnVubmVyMiBwYWNrYWdlIGluc3RhbGxzIGEgcHRlc3QtcnVubmVyIFwKLXByb2dyYW0gd2hpY2ggbG9vcHMgdGhyb3VnaCBhbGwgaW5zdGFsbGVkIHB0ZXN0IHRlc3Qgc3VpdGVzIGFuZCBcCi1ydW5zIHRoZW0gaW4gc2VxdWVuY2UuIgotSE9NRVBBR0UgPSAiaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvcHRlc3QtcnVubmVyMi9hYm91dC8iCi0KLUxJQ0VOU0UgPSAiR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKLQotU1JDUkVWID0gIjZkMjg3MjExNmNkOWQ2ZTE2MTdhNzY4ZjlkNzJiYmYwOTE0ODliMmQiCi1QViA9ICIyLjAuMitnaXQke1NSQ1BWfSIKLQotU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wdGVzdC1ydW5uZXIyIgotUyA9ICIke1dPUktESVJ9L2dpdCIKLQotRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L3B0ZXN0LXJ1bm5lciIKLQotRVhUUkFfT0VNQUtFID0gIi1lIE1BS0VGTEFHUz0iCi0KLWRvX2NvbXBpbGUgKCkgewotCW9lX3J1bm1ha2UKLX0KLQotZG9faW5zdGFsbCAoKSB7Ci0JaW5zdGFsbCAtRCAtbSAwNzU1ICR7U30vcHRlc3QtcnVubmVyICR7RH0ke2JpbmRpcn0vcHRlc3QtcnVubmVyCi19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRlc3QtcnVubmVyL3B0ZXN0LXJ1bm5lcl8yLjEuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRlc3QtcnVubmVyL3B0ZXN0LXJ1bm5lcl8yLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFjMWRhYgotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGVzdC1ydW5uZXIvcHRlc3QtcnVubmVyXzIuMS5iYgpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIkEgQyBwcm9ncmFtIHRvIHJ1biBhbGwgaW5zdGFsbGVkIHB0ZXN0cyIKK0RFU0NSSVBUSU9OID0gIlRoZSBwdGVzdC1ydW5uZXIyIHBhY2thZ2UgaW5zdGFsbHMgYSBwdGVzdC1ydW5uZXIgXAorcHJvZ3JhbSB3aGljaCBsb29wcyB0aHJvdWdoIGFsbCBpbnN0YWxsZWQgcHRlc3QgdGVzdCBzdWl0ZXMgYW5kIFwKK3J1bnMgdGhlbSBpbiBzZXF1ZW5jZS4iCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wdGVzdC1ydW5uZXIyL2Fib3V0LyIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCitTUkNSRVYgPSAiOGE5MzgzMmRhZDYyMTUzNWU5MGFhOGUxZmI3NGFlNWJhNzQzZmMzZSIKK1BWID0gIjIuMStnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wdGVzdC1ydW5uZXIyIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L3B0ZXN0LXJ1bm5lciIKKworRVhUUkFfT0VNQUtFID0gIi1lIE1BS0VGTEFHUz0iCisKK2RvX2NvbXBpbGUgKCkgeworCW9lX3J1bm1ha2UKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtRCAtbSAwNzU1ICR7U30vcHRlc3QtcnVubmVyICR7RH0ke2JpbmRpcn0vcHRlc3QtcnVubmVyCit9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcmUyYy9yZTJjL21rZGlyLnBhdGNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3JlMmMvcmUyYy9ta2Rpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTlmMDFiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3JlMmMvcmUyYy9ta2Rpci5wYXRjaApAQCAtMCwwICsxLDM2IEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCAoaHR0cHM6Ly9naXRodWIuY29tL3NrdmFkcmlrL3JlMmMvcHVsbC8xOTEpCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitGcm9tIGJjY2MxMGM2MDUyM2Y4OGM4ZjgxNDEzMTUxY2RjZDYxMmViMTYxOTggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorRGF0ZTogTW9uLCAzMSBKdWwgMjAxNyAxNTo0Mzo0MSArMDEwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZS5hbTogY3JlYXRlIHRhcmdldCBkaXJlY3RvcnkgYmVmb3JlIHdyaXRpbmcgaW50byBpdAorCitJbiBzb21lIHNpdHVhdGlvbnMgc3JjL3BhcnNlLyBtYXkgbm90IGV4aXN0IGJlZm9yZSBhIGZpbGUgaXMgY29waWVkIGludG8gdGhlCitkaXJlY3RvcnkuIEVuc3VyZSB0aGF0IHRoaXMgZG9lc24ndCBoYXBwZW4gYnkgY3JlYXRpbmcgdGhlIGRpcmVjdG9yeSBmaXJzdC4KKy0tLQorIHJlMmMvTWFrZWZpbGUuYW0gfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3JlMmMvTWFrZWZpbGUuYW0gYi9yZTJjL01ha2VmaWxlLmFtCitpbmRleCAzYjNiMmM1ZS4uMDcwN2ZjNWEgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0xODcsNiArMTg3LDcgQEAgQ0xFQU5GSUxFUyA9IFwKKyAJJChET0MpCisgCisgJChBVVRPR0VOX1BBUlNFUik6ICQoQ1VTVE9NX1BBUlNFUikKKysJJChBTV9WX2F0KSQoTUtESVJfUCkgJChkaXIgJEApCisgCSQoQU1fVl9HRU4pIGlmIHRlc3QgJChCSVNPTikgPSAibm8iOyBcCisgCXRoZW4gXAorIAkJY3AgJCh0b3Bfc3JjZGlyKS8kKEJPT1RTVFJBUF9QQVJTRVIpICRAICYmIFwKK0BAIC0yMTEsNiArMjEyLDcgQEAgJChCT09UU1RSQVBfUEFSU0VSKTogJChDVVNUT01fUEFSU0VSKQorIAkJJCh0b3Bfc3JjZGlyKS8kKENVU1RPTV9QQVJTRVIpOworIAorIC5yZS5jYzoKKysJJChBTV9WX2F0KSQoTUtESVJfUCkgJChkaXIgJEApCisgCSQoQU1fVl9HRU4pIGlmIHRlc3QgLXggJChSRTJDKTsgXAorIAl0aGVuIFwKKyAJCSQodG9wX2J1aWxkZGlyKS8kKFJFMkMpICQoUkUyQ0ZMQUdTKSAtbyAkQCAkPCAmJiBcCistLSAKKzIuMTEuMApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3JlMmMvcmUyY18wLjE2LmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3JlMmMvcmUyY18wLjE2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZGQ3YjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcmUyYy9yZTJjXzAuMTYuYmIKQEAgLTAsMCArMSwxNSBAQAorU1VNTUFSWSA9ICJUb29sIGZvciB3cml0aW5nIHZlcnkgZmFzdCBhbmQgdmVyeSBmbGV4aWJsZSBzY2FubmVycyIKK0hPTUVQQUdFID0gImh0dHA6Ly9yZTJjLnNvdXJjZWZvcmdlLm5ldC8iCitBVVRIT1IgPSAiTWFyY3VzIELDtnJnZXIgPGhlbGx5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9MTQ2O21kNT04ODEwNTZjOWFkZDE3ZjgwMTljY2Q4YzM4MmJhOTYzYSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbWtkaXIucGF0Y2giCitTUkNfVVJJW21kNXN1bV0gPSAiM2JmNTA4ZmFiZDUyZWQ3MzM0NjQ3ZDBjY2I5NTZlOGQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDhjMTI1NjQyOTc2NDFjY2ViNWZmMDVhZWFkNTdmMjgxMThkYjYyNzdmMzFlMjI2MjQzN2ZlYmE4OTA2OWU4NCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcm5nLXRvb2xzL3JuZy10b29scy9kZWZhdWx0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3JuZy10b29scy9ybmctdG9vbHMvZGVmYXVsdAppbmRleCA3YWVkZTliLi5hYjdjZDkzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcm5nLXRvb2xzL3JuZy10b29scy9kZWZhdWx0CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ybmctdG9vbHMvcm5nLXRvb2xzL2RlZmF1bHQKQEAgLTEsMyArMSwyIEBACiAjIFNwZWNpZnkgcm5nIGRldmljZQotI1JOR19ERVZJQ0U9L2Rldi9od3JuZwotUk5HX0RFVklDRT0vZGV2L3VyYW5kb20KK1JOR19ERVZJQ0U9L2Rldi9od3JuZwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3JuZy10b29scy9ybmctdG9vbHMvcm5nLXRvb2xzLTUtZml4LXRleHRyZWxzLW9uLVBJQy14ODYucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcm5nLXRvb2xzL3JuZy10b29scy9ybmctdG9vbHMtNS1maXgtdGV4dHJlbHMtb24tUElDLXg4Ni5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2E1ODY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3JuZy10b29scy9ybmctdG9vbHMvcm5nLXRvb2xzLTUtZml4LXRleHRyZWxzLW9uLVBJQy14ODYucGF0Y2gKQEAgLTAsMCArMSwxMDMgQEAKK0Zyb206IEZyYW5jaXNjbyBCbGFzIEl6cXVpZXJkbyBSaWVyYSAoa2xvbmRpa2UpIDxrbG9uZGlrZUBnZW50b28ub3JnPgorU3ViamVjdDogW1BBVENIXSBGaXggYXNzZW1ieSB0ZXh0cmVscyBvbiByZHJhbmRfYXNtLlMgb24gUElDIHg4NgorCitUaGlzIHBhdGNoIHVwZGF0ZXMgdGhlIGZpeGVzIGluIHRoZSBhc3NlbWJseSBpbiByZHJhbmRfYXNtLlMgaW4KK3N5cy1hcHBzL3JuZy10b29scy01IHNvIGl0IHdvbid0IGdlbmVyYXRlIHRleHRyZWxzIG9uIFBJQyBzeXN0ZW1zLgorVGhlIG1haW4gZml4ZXMgYXJlIGluIHRoZSB1c2Ugb2YgbGVhbCBpbiBTRVRQVFIgZm9yIHN1Y2ggc3lzdGVtcywgdGhlIHJlc3QgaXMKK3RoZSB1c3VhbCBQSUMgc3VwcG9ydCBzdHVmZi4KKworVGhpcyBzaG91bGQgZml4IEdlbnRvbyBidWcgIzQ2OTk2MiBhbmQgaGVscCBmaXggIzUxODIxMAorCitUaGlzIHBhdGNoIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2MiBvciBhIGhpZ2hlciB2ZXJzaW9uIGxpY2Vuc2UgYXMgaXMgdGhlCitvcmlnaW5hbCBmaWxlIGFzIGxvbmcgYXMgdGhlIGF1dGhvciBhbmQgdGhlIHRlc3RlciBhcmUgY3JlZGl0ZWQuCisKK0dlbnRvby1idWctdXJsOiBodHRwczovL2J1Z3MuZ2VudG9vLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY5OTYyCitHZW50b28tYnVnLXVybDogaHR0cHM6Ly9idWdzLmdlbnRvby5vcmcvc2hvd19idWcuY2dpP2lkPTUxODIxMAorU2lnbmVkLW9mZi1ieTogRnJhbmNpc2NvIEJsYXMgSXpxdWllcmRvIFJpZXJhIChrbG9uZGlrZSkgPGtsb25kaWtlQGdlbnRvby5vcmc+CitSZXBvcnRlZC1ieTogY2lsbHkgPGNpbGx5QGNpbGx5Lm1pbmUubnU+CitSZXBvcnRlZC1ieTogTWFudWVsIFLDvGdlciA8bXJ1ZWdAZ2VudG9vLm9yZz4KK1Rlc3RlZC1ieTogQW50aG9ueSBCYXNpbGUgPGJsdWVuZXNzQGdlbnRvby5vcmc+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogcm5nLXRvb2xzLTUvcmRyYW5kX2FzbS5TCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcm5nLXRvb2xzLTUub3JpZy9yZHJhbmRfYXNtLlMKKysrKyBybmctdG9vbHMtNS9yZHJhbmRfYXNtLlMKK0BAIC0yLDYgKzIsNyBAQAorICAqIENvcHlyaWdodCAoYykgMjAxMS0yMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbgorICAqIEF1dGhvcnM6IEZlbmdodWEgWXUgPGZlbmdodWEueXVAaW50ZWwuY29tPiwKKyAgKiAgICAgICAgICBILiBQZXRlciBBbnZpbiA8aHBhQGxpbnV4LmludGVsLmNvbT4KKysgKiBQSUMgY29kZSBieTogRnJhbmNpc2NvIEJsYXMgSXpxdWllcmRvIFJpZXJhIChrbG9uZGlrZSkgPGtsb25kaWtlQGdlbnRvby5vcmc+CisgICoKKyAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCitAQCAtMTc0LDcgKzE3NSwxOSBAQCBFTlRSWSh4ODZfcmRzZWVkX29yX3JkcmFuZF9ieXRlcykKKyAJam1wCTRiCisgRU5EUFJPQyh4ODZfcmRzZWVkX29yX3JkcmFuZF9ieXRlcykKKyAKKysjaWYgZGVmaW5lZChfX1BJQ19fKQorKyNkZWZpbmUgSU5JVF9QSUMoKSBcCisrCXB1c2hsCSVlYnggOyBcCisrCWNhbGwgICAgX194ODYuZ2V0X3BjX3RodW5rLmJ4IDsgXAorKwlhZGRsICAgICRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKKysjZGVmaW5lIEVORF9QSUMoKSBcCisrCXBvcGwJJWVieAorKyNkZWZpbmUgU0VUUFRSKHZhcixwdHIpIGxlYWwgKHZhcilAR09UT0ZGKCVlYngpLHB0cgorKyNlbHNlCisrI2RlZmluZSBJTklUX1BJQygpCisrI2RlZmluZSBFTkRfUElDKCkKKyAjZGVmaW5lIFNFVFBUUih2YXIscHRyKQltb3ZsICQodmFyKSxwdHIKKysjZW5kaWYKKyAjZGVmaW5lIFBUUjAJJWVheAorICNkZWZpbmUgUFRSMQklZWR4CisgI2RlZmluZSBQVFIyCSVlY3gKK0BAIC0xOTAsNiArMjAzLDcgQEAgRU5UUlkoeDg2X2Flc19tYW5nbGUpCisgCW1vdmwJOCglZWJwKSwgJWVheAorIAltb3ZsCTEyKCVlYnApLCAlZWR4CisgCXB1c2gJJWVzaQorKwlJTklUX1BJQygpCisgI2VuZGlmCisgCW1vdmwJJDUxMiwgQ1RSMwkvKiBOdW1iZXIgb2Ygcm91bmRzICovCisgCQorQEAgLTI4MCw2ICsyOTQsNyBAQCBvZmZzZXQgPSBvZmZzZXQgKyAxNgorIAltb3ZkcWEJJXhtbTcsICg3KjE2KShQVFIxKQorIAorICNpZmRlZiBfX2kzODZfXworKwlFTkRfUElDKCkKKyAJcG9wCSVlc2kKKyAJcG9wCSVlYnAKKyAjZW5kaWYKK0BAIC0yOTQsNiArMzA5LDcgQEAgRU5UUlkoeDg2X2Flc19leHBhbmRfa2V5KQorIAlwdXNoCSVlYnAKKyAJbW92CSVlc3AsICVlYnAKKyAJbW92bAk4KCVlYnApLCAlZWF4CisrCUlOSVRfUElDKCkKKyAjZW5kaWYKKyAKKyAJU0VUUFRSKGFlc19yb3VuZF9rZXlzLCBQVFIxKQorQEAgLTMyMyw2ICszMzksNyBAQCBFTlRSWSh4ODZfYWVzX2V4cGFuZF9rZXkpCisgCWNhbGwJMWYKKyAKKyAjaWZkZWYgX19pMzg2X18KKysJRU5EX1BJQygpCisgCXBvcAklZWJwCisgI2VuZGlmCisgCXJldAorQEAgLTM0Myw2ICszNjAsMTYgQEAgRU5UUlkoeDg2X2Flc19leHBhbmRfa2V5KQorIAorIEVORFBST0MoeDg2X2Flc19leHBhbmRfa2V5KQorIAorKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSAmJiBkZWZpbmVkKF9fUElDX18pCisrCS5zZWN0aW9uCS50ZXh0Ll9feDg2LmdldF9wY190aHVuay5ieCwiYXhHIixAcHJvZ2JpdHMsX194ODYuZ2V0X3BjX3RodW5rLmJ4LGNvbWRhdAorKwkuZ2xvYmwJX194ODYuZ2V0X3BjX3RodW5rLmJ4CisrCS5oaWRkZW4JX194ODYuZ2V0X3BjX3RodW5rLmJ4CisrCS50eXBlCV9feDg2LmdldF9wY190aHVuay5ieCwgQGZ1bmN0aW9uCisrX194ODYuZ2V0X3BjX3RodW5rLmJ4OgorKwltb3ZsCSglZXNwKSwgJWVieAorKwlyZXQKKysjZW5kaWYKKysKKyAJLmJzcworIAkuYmFsaWduIDY0CisgYWVzX3JvdW5kX2tleXM6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcm5nLXRvb2xzL3JuZy10b29scy9ybmdkLnNlcnZpY2UgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcm5nLXRvb2xzL3JuZy10b29scy9ybmdkLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk0YWQ1MAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ybmctdG9vbHMvcm5nLXRvb2xzL3JuZ2Quc2VydmljZQpAQCAtMCwwICsxLDkgQEAKK1tVbml0XQorRGVzY3JpcHRpb249SGFyZHdhcmUgUk5HIEVudHJvcHkgR2F0aGVyZXIgRGFlbW9uCisKK1tTZXJ2aWNlXQorRXhlY1N0YXJ0PUBTQklORElSQC9ybmdkIC1mIC1yIC9kZXYvdXJhbmRvbQorU3VjY2Vzc0V4aXRTdGF0dXM9NjYKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3JuZy10b29scy9ybmctdG9vbHMvdWNsaWJjLWxpYnVhcmdwLWNvbmZpZ3VyZS5wYXRjaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ybmctdG9vbHMvcm5nLXRvb2xzL3VjbGliYy1saWJ1YXJncC1jb25maWd1cmUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OTEzMTUuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3JuZy10b29scy9ybmctdG9vbHMvdWNsaWJjLWxpYnVhcmdwLWNvbmZpZ3VyZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLUluIGNhc2Ugb2YgdWNsaWJjLCB1c2UgbGlidWFyZ3AKLQotSWYgd2UgdXNlIHVjbGliYyBmb3Igc3lzdGVtIGxpYnJhcmllcywgc2VsZWN0IGxpYnVhcmdwCi0KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGludGVsLmNvbT4KLS0tLQotZGlmZiAtTmF1ciBybmctdG9vbHMtNS1vcmlnL2NvbmZpZ3VyZS5hYyBybmctdG9vbHMtNS9jb25maWd1cmUuYWMKLS0tLSBybmctdG9vbHMtNS1vcmlnL2NvbmZpZ3VyZS5hYwkyMDE2LTAyLTI0IDE4OjExOjI0LjAyMzY5MDIzNSArMDIwMAotKysrIHJuZy10b29scy01L2NvbmZpZ3VyZS5hYwkyMDE2LTAyLTI0IDE4OjE0OjQ5Ljc2MzExODEzOCArMDIwMAotQEAgLTM5LDYgKzM5LDEzIEBACi0gCVt3aXRoX2xpYmFyZ3A9Y2hlY2tdCi0gKQotIAotK0FDX0FSR19FTkFCTEUoW3VjbGliY10sCi0rICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS11Y2xpYmNdLCBbVXNlIHVjbGliYyBmb3Igc3lzdGVtIGxpYnJhcmllc10pLAotKyAgICAgICAgdXNlX3VjbGliYz15ZXMsIHVzZV91Y2xpYmM9bm8pCi0rQU1fQ09ORElUSU9OQUwoVVNFX1VDTElCQywgdGVzdCAieCR1c2VfdWNsaWJjIiA9ICJ4eWVzIikKLStBU19JRihbdGVzdCAieCR1c2VfdWNsaWJjIiA9ICJ4eWVzIl0sIFtBQ19ERUZJTkUoVVNFX1VDTElCQyldKQotK0FIX1RFTVBMQVRFKFtVU0VfVUNMSUJDXSwgW0RlZmluZWQgaWYgdWNsaWJjIGxpYnJhcmllcyBhcmUgdXNlZC5dKQotKwotIGRubCBNYWtlIHN1cmUgYW55b25lIGNoYW5naW5nIGNvbmZpZ3VyZS5hYy9NYWtlZmlsZS5hbSBoYXMgYSBjbHVlCi0gQU1fTUFJTlRBSU5FUl9NT0RFCi0gCi1AQCAtMTAxLDcgKzEwOCw3IEBACi0gCQkJW25lZWRfbGliYXJncD1ub10sCi0gCQkJW25lZWRfbGliYXJncD15ZXMKLSAJCQkgaWYgdGVzdCAieCR3aXRoX2xpYmFyZ3AiID0gInhubyI7IHRoZW4KLS0JCQkJQUNfTVNHX0ZBSUxVUkUoW2xpYmFyZ3AgZGlzYWJsZWQgYW5kIGxpYmMgZG9lcyBub3QgaGF2ZSBhcmdwXSkKLSsJCQkJQUNfTVNHX1dBUk4oW2xpYmFyZ3AgZGlzYWJsZWQgYW5kIGxpYmMgZG9lcyBub3QgaGF2ZSBhcmdwXSkKLSAJCQkgZmldCi0gCQkpCi0gCV0sCi1AQCAtMTEwLDcgKzExNyw3IEBACi0gCi0gZG5sIENoZWNrIGZvciBsaWJhcmdwCi0gQVNfSUYoCi0tCVt0ZXN0ICJ4JG5lZWRfbGliYXJncCIgPSAieHllcyJdLAotKwlbdGVzdCAieCRuZWVkX2xpYmFyZ3AiID0gInh5ZXMiIC1hICJ4JHVzZV91Y2xpYmMiID0gInhubyJdLAotIAlbCi0gCQlBQ19DSEVDS19MSUIoCi0gCQkJW2FyZ3BdLAotQEAgLTEyMCw2ICsxMjcsMTkgQEAKLSAJCSkKLSAJXQotICkKLSsKLStkbmwgQ2hlY2sgZm9yIGxpYnVhcmdwCi0rQVNfSUYoCi0rCVt0ZXN0ICJ4JHVzZV91Y2xpYmMiID0gInh5ZXMiXSwKLSsJWwotKwkJQUNfQ0hFQ0tfTElCKAotKwkJCVt1YXJncF0sCi0rCQkJW2FyZ3BfcGFyc2VdLAotKwkJCVtMSUJTPSIkTElCUyAtbHVhcmdwIl0sCi0rCQkJW0FDX01TR19GQUlMVVJFKFtsaWJ1YXJncCBub3QgZm91bmRdKV0KLSsJCSkKLSsJXQotKykKLSAKLSBkbmwgLS0tLS0tLS0tLS0tLS0tLS0KLSBkbmwgQ29uZmlndXJlIG9wdGlvbnMKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ybmctdG9vbHMvcm5nLXRvb2xzL3VuZGVycXVvdGUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcm5nLXRvb2xzL3JuZy10b29scy91bmRlcnF1b3RlLnBhdGNoCmluZGV4IDE0MjI1NzEuLmFmZDA4ZDUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ybmctdG9vbHMvcm5nLXRvb2xzL3VuZGVycXVvdGUucGF0Y2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3JuZy10b29scy9ybmctdG9vbHMvdW5kZXJxdW90ZS5wYXRjaApAQCAtNyw2ICs3LDggQEAKIFJQCiAyMDE2LzIvMTYKIAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKIEluZGV4OiBybmctdG9vbHMtNS9jb25maWd1cmUuYWMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0tLSBybmctdG9vbHMtNS5vcmlnL2NvbmZpZ3VyZS5hYwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3JuZy10b29scy9ybmctdG9vbHNfNS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ybmctdG9vbHMvcm5nLXRvb2xzXzUuYmIKaW5kZXggOTMyOWU4YS4uNGE2NmJlZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3JuZy10b29scy9ybmctdG9vbHNfNS5iYgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcm5nLXRvb2xzL3JuZy10b29sc181LmJiCkBAIC02LDkgKzYsMTEgQEAKICAgICAgICAgICAgZmlsZTovLzAwMDEtSWYtdGhlLWxpYmMtaXMtbGFja2luZy1hcmdwLXVzZS1saWJhcmdwLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDItQWRkLWFyZ3VtZW50LXRvLWNvbnRyb2wtdGhlLWxpYmFyZ3AtZGVwZW5kZW5jeS5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly91bmRlcnF1b3RlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL3VjbGliYy1saWJ1YXJncC1jb25maWd1cmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcm5nLXRvb2xzLTUtZml4LXRleHRyZWxzLW9uLVBJQy14ODYucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vaW5pdCBcCi0gICAgICAgICAgIGZpbGU6Ly9kZWZhdWx0IgorICAgICAgICAgICBmaWxlOi8vZGVmYXVsdCBcCisgICAgICAgICAgIGZpbGU6Ly9ybmdkLnNlcnZpY2UgXAorIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiNjcyNmNkYzZmYWUxZjUxMjI0NjNmMjRhZTk4MGRkNjgiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjBhMTAyYjY2MDNiYmNjZTJkYTM0MTQ3MGNhZDQyZWVhYTk1NjRhMTZiNDQ5MGU3ODY3MDI2Y2ExMWEzMDc4ZSIKQEAgLTIwLDEzICsyMiwxMSBAQAogICAgICAgICBkLnNldFZhcigiSU5ISUJJVF9VUERBVEVSQ0RfQkJDTEFTUyIsICIxIikKIH0KIAotaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLXJjLmQKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1yYy5kIHN5c3RlbWQKIAogUEFDS0FHRUNPTkZJRyA9ICJsaWJnY3J5cHQiCiBQQUNLQUdFQ09ORklHX2xpYmMtbXVzbCA9ICJsaWJhcmdwIgotUEFDS0FHRUNPTkZJR19saWJjLXVjbGliYyA9ICJsaWJ1YXJncCIKIFBBQ0tBR0VDT05GSUdbbGliYXJncF0gPSAiLS13aXRoLWxpYmFyZ3AsLS13aXRob3V0LWxpYmFyZ3AsYXJncC1zdGFuZGFsb25lLCIKLVBBQ0tBR0VDT05GSUdbbGlidWFyZ3BdID0gIi0tZW5hYmxlLXVjbGliYywsLCIKIFBBQ0tBR0VDT05GSUdbbGliZ2NyeXB0XSA9ICItLXdpdGgtbGliZ2NyeXB0LC0td2l0aG91dC1saWJnY3J5cHQsbGliZ2NyeXB0LCIKIAogZG9faW5zdGFsbF9hcHBlbmQoKSB7CkBAIC00MCw3ICs0MCwxNSBAQAogICAgICAgICBpbnN0YWxsIC1kICIke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0IgogICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kZWZhdWx0ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvcm5nLXRvb2xzCiAgICAgZmkKKworICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKyAgICAgICAgaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9ybmdkLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKyAgICAgICAgc2VkIC1pIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3JuZ2Quc2VydmljZQorICAgIGZpCiB9CiAKIElOSVRTQ1JJUFRfTkFNRSA9ICJybmctdG9vbHMiCiBJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAzMCAyIDMgNCA1IC4gc3RvcCAzMCAwIDYgMSAuIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAicm5nZC5zZXJ2aWNlIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NoYXJlZC1taW1lLWluZm8vc2hhcmVkLW1pbWUtaW5mby5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvLmluYwppbmRleCA2ZWVkYjZkLi4xZjUxMjI1IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvLmluYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvLmluYwpAQCAtNiw3ICs2LDYgQEAKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgogCiBERVBFTkRTID0gImxpYnhtbDIgaW50bHRvb2wtbmF0aXZlIGdsaWItMi4wIHNoYXJlZC1taW1lLWluZm8tbmF0aXZlIgotREVQRU5EU19jbGFzcy1uYXRpdmUgPSAibGlieG1sMi1uYXRpdmUgaW50bHRvb2wtbmF0aXZlIGdsaWItMi4wLW5hdGl2ZSIKIAogU1JDX1VSSSA9ICJodHRwOi8vZnJlZWRlc2t0b3Aub3JnL35oYWRlc3Mvc2hhcmVkLW1pbWUtaW5mby0ke1BWfS50YXIueHoiCiAKQEAgLTMzLDQgKzMyLDQgQEAKIAlhdXRvdG9vbHNfZG9faW5zdGFsbAogfQogCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvZmlsZXMvc3FsaXRlMy1maXgtQ1ZFLTIwMTctMTM2ODUucGF0Y2ggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc3FsaXRlL2ZpbGVzL3NxbGl0ZTMtZml4LUNWRS0yMDE3LTEzNjg1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhYzQyOGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc3FsaXRlL2ZpbGVzL3NxbGl0ZTMtZml4LUNWRS0yMDE3LTEzNjg1LnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0ZpeCBDVkUtMjAxNy0xMzY4NQorCitUaGUgZHVtcF9jYWxsYmFjayBmdW5jdGlvbiBpbiBTUUxpdGUgMy4yMC4wIGFsbG93cyByZW1vdGUgYXR0YWNrZXJzIHRvCitjYXVzZSBhIGRlbmlhbCBvZiBzZXJ2aWNlIChFWENfQkFEX0FDQ0VTUyBhbmQgYXBwbGljYXRpb24gY3Jhc2gpIHZpYSBhCitjcmFmdGVkIGZpbGUuCisKK1JlZmVyZW5jZXM6CitodHRwczovL3NxbGl0ZS5vcmcvc3JjL2luZm8vMDJmMGY0YzU0ZjI4MTliMworaHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL3NxbGl0ZS11c2VycyU0MG1haWxpbmdsaXN0cy5zcWxpdGUub3JnL21zZzEwNTMxNC5odG1sCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2h0dHBzOi8vc3FsaXRlLm9yZy9zcmMvaW5mby9jZjBkMzcxNWNhYWM5MTQ5XQorCitDVkU6IENWRS0yMDE3LTEzNjg1CisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorCitJbmRleDogc3JjL3NoZWxsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNyYy9zaGVsbC5jCisrKysgc3JjL3NoZWxsLmMKK0BAIC0yNjU3LDEwICsyNjU3LDExIEBACisgICBpbnQgKmFpVHlwZSAgICAgIC8qIENvbHVtbiB0eXBlcyAqLworICl7CisgICBpbnQgaTsKKyAgIFNoZWxsU3RhdGUgKnAgPSAoU2hlbGxTdGF0ZSopcEFyZzsKKyAKKysgIGlmKCBhekFyZz09MCApIHJldHVybiAwOworICAgc3dpdGNoKCBwLT5jTW9kZSApeworICAgICBjYXNlIE1PREVfTGluZTogeworICAgICAgIGludCB3ID0gNTsKKyAgICAgICBpZiggYXpBcmc9PTAgKSBicmVhazsKKyAgICAgICBmb3IoaT0wOyBpPG5Bcmc7IGkrKyl7CitAQCAtMzAwNywxMCArMzAwOCwxMSBAQAorICovCisgc3RhdGljIGludCBjYXB0dXJlT3V0cHV0Q2FsbGJhY2sodm9pZCAqcEFyZywgaW50IG5BcmcsIGNoYXIgKiphekFyZywgY2hhciAqKmF6KXsKKyAgIFNoZWxsVGV4dCAqcCA9IChTaGVsbFRleHQqKXBBcmc7CisgICBpbnQgaTsKKyAgIFVOVVNFRF9QQVJBTUVURVIoYXopOworKyAgaWYoIGF6QXJnPT0wICkgcmV0dXJuIDA7CisgICBpZiggcC0+biApIGFwcGVuZFRleHQocCwgInwiLCAwKTsKKyAgIGZvcihpPTA7IGk8bkFyZzsgaSsrKXsKKyAgICAgaWYoIGkgKSBhcHBlbmRUZXh0KHAsICIsIiwgMCk7CisgICAgIGlmKCBhekFyZ1tpXSApIGFwcGVuZFRleHQocCwgYXpBcmdbaV0sIDApOworICAgfQorQEAgLTM4ODgsMTEgKzM4OTAsMTEgQEAKKyAgIGNvbnN0IGNoYXIgKnpUeXBlOworICAgY29uc3QgY2hhciAqelNxbDsKKyAgIFNoZWxsU3RhdGUgKnAgPSAoU2hlbGxTdGF0ZSAqKXBBcmc7CisgCisgICBVTlVTRURfUEFSQU1FVEVSKGF6Tm90VXNlZCk7CistICBpZiggbkFyZyE9MyApIHJldHVybiAxOworKyAgaWYoIG5BcmchPTMgfHwgYXpBcmc9PTAgKSByZXR1cm4gMDsKKyAgIHpUYWJsZSA9IGF6QXJnWzBdOworICAgelR5cGUgPSBhekFyZ1sxXTsKKyAgIHpTcWwgPSBhekFyZ1syXTsKKyAKKyAgIGlmKCBzdHJjbXAoelRhYmxlLCAic3FsaXRlX3NlcXVlbmNlIik9PTAgKXsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlM18zLjE3LjAuYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc3FsaXRlL3NxbGl0ZTNfMy4xNy4wLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTNjYjMyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlM18zLjE3LjAuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1yZXF1aXJlIHNxbGl0ZTMuaW5jCi0KLUxJQ0VOU0UgPSAiUEQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zcWxpdGUzLmg7ZW5kbGluZT0xMTttZDU9NjVmMGE1N2NhNjkyODcxMGI0MThjMDk0YjM1NzBiYjAiCi0KLVNSQ19VUkkgPSAiXAotICBodHRwOi8vd3d3LnNxbGl0ZS5vcmcvMjAxNy9zcWxpdGUtYXV0b2NvbmYtJHtTUUxJVEVfUFZ9LnRhci5neiBcCi0gICIKLVNSQ19VUklbbWQ1c3VtXSA9ICI0NTBhOTVhN2JkZTY5N2M5ZmU0ZGU5YWUyZmZmZGNjYSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJhNGU0ODVhZDNhMTZlMDU0NzY1YmFmNjM3MTgyNmI1MDAwYmVlZDA3ZTYyNjUxMDg5NjA2OWMwYmYwMTM4NzRjIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9zcWxpdGUzXzMuMjAuMC5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlM18zLjIwLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUwODI1OAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlM18zLjIwLjAuYmIKQEAgLTAsMCArMSwxMSBAQAorcmVxdWlyZSBzcWxpdGUzLmluYworCitMSUNFTlNFID0gIlBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc3FsaXRlMy5oO2VuZGxpbmU9MTE7bWQ1PTc4NmQzZGM1ODFlZmYwM2Y0ZmQ5ZTRhNzdlZDAwYzY2IgorCitTUkNfVVJJID0gIlwKKyAgaHR0cDovL3d3dy5zcWxpdGUub3JnLzIwMTcvc3FsaXRlLWF1dG9jb25mLSR7U1FMSVRFX1BWfS50YXIuZ3ogXAorICBmaWxlOi8vc3FsaXRlMy1maXgtQ1ZFLTIwMTctMTM2ODUucGF0Y2ggXAorICAiCitTUkNfVVJJW21kNXN1bV0gPSAiZTI2MmEyOGI3M2NjMzMwZTdlODM1MjBjOGNlMTRlNGQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzgxNGM2ZjYyOWZmOTM5NjhiMmIzN2E3MDQ5N2NmZTk4YjM2NmJmNTg3YTIyNjFhNTZhNWY3NTBhZjZhZTZhMCIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlXzAuNDYuMS5iYiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlXzAuNDYuMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFmZTYyNS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdnRlL3Z0ZV8wLjQ2LjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi1TVU1NQVJZID0gIlZpcnR1YWwgdGVybWluYWwgZW11bGF0b3IgR1RLKyB3aWRnZXQgbGlicmFyeSIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvYnVnbGlzdC5jZ2k/cHJvZHVjdD12dGUiCi1MSUNFTlNFID0gIkxHUEx2Mi4xKyIKLURFUEVORFMgPSAiZ2xpYi0yLjAgZ3RrKzMgbGlicGNyZTIgaW50bHRvb2wtbmF0aXZlIGxpYnhtbDItbmF0aXZlIgotCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKLQotaW5oZXJpdCBnbm9tZWJhc2UgZ3RrLWRvYyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGdvYmplY3QtaW50cm9zcGVjdGlvbgotCi0jIHZhcGlnZW4ubTQgaXMgcmVxdWlyZWQgd2hlbiB2YWxhIGlzIG5vdCBwcmVzZW50IChidXQgdGhlIG9uZSBmcm9tIHZhbGEgc2hvdWxkIGJlIHVzZWQgbm9ybWFsbHkpCi1TUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1Eb24tdC1lbmFibGUtc3RhY2stcHJvdGVjdGlvbi1ieS1kZWZhdWx0LnBhdGNoIFwKLSAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3ZhbGEnLCAnJywgJ2ZpbGU6Ly8wMDAxLUFkZC1tNC12YXBpZ2VuLm00LnBhdGNoJywgZCkgfSBcCi0gICAgICAgICAgICAiCi1TUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJlOGY0MzkzYjlmMWVjMmUyZjNjZGIzZmQ0ZjVhMTZkZSIKLVNSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjg4MDBjZjhiYzI1OTcwNGExMmFkMTg1M2ZiMGViNDNiZmUzODU3YWYxNTI0MmU2ZmI5ZjJjM2ZkOTViM2Y1YzYiCi0KLUFOWV9PRl9ESVNUUk9fRkVBVFVSRVMgPSAiJHtHVEszRElTVFJPRkVBVFVSRVN9IgotCi0jIEluc3RlYWQgb2YgImluaGVyaXQgdmFsYSIgd2UgZG8gdGhlIHJlbGV2YW50IHNldHRpbmdzIGhlcmUgc28gd2UgY2FuCi0jIHNldCBERVBFTkRTIGJhc2VkIG9uIFBBQ0tBR0VDT05GSUcuCi0KLSMgT3VyIHBhdGNoZWQgdmVyc2lvbiBvZiBWYWxhIGxvb2tzIGluIFNUQUdJTkdfREFUQURJUiBmb3IgLnZhcGkgZmlsZXMKLWV4cG9ydCBTVEFHSU5HX0RBVEFESVIKLSMgVXBzdHJlYW0gVmFsYSA+PSAwLjExIGxvb2tzIGluIFhER19EQVRBX0RJUlMgZm9yIC52YXBpIGZpbGVzCi1leHBvcnQgWERHX0RBVEFfRElSUyA9ICIke1NUQUdJTkdfREFUQURJUn0iCi0KLSMgUGFja2FnZSBhZGRpdGlvbmFsIGZpbGVzCi1GSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vdmFsYS92YXBpLyoiCi0KLVBBQ0tBR0VDT05GSUcgPz89ICJnbnV0bHMiCi1QQUNLQUdFQ09ORklHW3ZhbGFdID0gIi0tZW5hYmxlLXZhbGEsLS1kaXNhYmxlLXZhbGEsdmFsYS1uYXRpdmUgdmFsYSIKLVBBQ0tBR0VDT05GSUdbZ251dGxzXSA9ICItLXdpdGgtZ251dGxzLC0td2l0aG91dC1nbnV0bHMsZ251dGxzIgotCi1DRkxBR1MgKz0gIi1EX0dOVV9TT1VSQ0UiCi0KLUVYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtdGVzdC1hcHBsaWNhdGlvbiIKLQotIyBsaWJ0b29sIGFkZHMgIi1ub3N0ZGxpYiIgd2hlbiBnKysgaXMgdXNlZC4gVGhpcyBicmVha3MgUElFIGJ1aWxkcy4KLSMgVXNlIGxpYnRvb2wtY3Jvc3MgKHdoaWNoIGhhcyBhIGhhY2sgdG8gcHJldmVudCB0aGF0KSBpbnN0ZWFkLgotRVhUUkFfT0VNQUtFX2NsYXNzLXRhcmdldCA9ICJMSUJUT09MPSR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9LyR7SE9TVF9TWVN9LWxpYnRvb2wiCi0KLVBBQ0tBR0VTID0rICJsaWJ2dGUiCi1GSUxFU19saWJ2dGUgPSAiJHtsaWJkaXJ9Lyouc28uKiAke2xpYmRpcn0vZ2lyZXBvc2l0b3J5LTEuMC8qIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGVfMC40OC4zLmJiIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGVfMC40OC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MjA4NDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdnRlL3Z0ZV8wLjQ4LjMuYmIKQEAgLTAsMCArMSw0OCBAQAorU1VNTUFSWSA9ICJWaXJ0dWFsIHRlcm1pbmFsIGVtdWxhdG9yIEdUSysgd2lkZ2V0IGxpYnJhcnkiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL2J1Z2xpc3QuY2dpP3Byb2R1Y3Q9dnRlIgorTElDRU5TRSA9ICJMR1BMdjIuMSsiCitERVBFTkRTID0gImdsaWItMi4wIGd0ayszIGxpYnBjcmUyIGludGx0b29sLW5hdGl2ZSBsaWJ4bWwyLW5hdGl2ZSBncGVyZi1uYXRpdmUiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIgorCitpbmhlcml0IGdub21lYmFzZSBndGstZG9jIGRpc3Ryb19mZWF0dXJlc19jaGVjayB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZ29iamVjdC1pbnRyb3NwZWN0aW9uCisKKyMgdmFwaWdlbi5tNCBpcyByZXF1aXJlZCB3aGVuIHZhbGEgaXMgbm90IHByZXNlbnQgKGJ1dCB0aGUgb25lIGZyb20gdmFsYSBzaG91bGQgYmUgdXNlZCBub3JtYWxseSkKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLURvbi10LWVuYWJsZS1zdGFjay1wcm90ZWN0aW9uLWJ5LWRlZmF1bHQucGF0Y2ggXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAndmFsYScsICcnLCAnZmlsZTovLzAwMDEtQWRkLW00LXZhcGlnZW4ubTQucGF0Y2gnLCBkKSB9IFwKKyAgICAgICAgICAgICIKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImIzMDA2NzVhYzVmMjY5YWE2ZWI0OGZlODlhMGQ3MjZkIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiYTNhOWZiMTgyNzQwYjM5MmE0NWNkM2Y0NmZhNjFhOTg1ZjY4YmI2YjE4MTdiNTJkYWVjMjIwMzRjNDYxNThjMyIKKworQU5ZX09GX0RJU1RST19GRUFUVVJFUyA9ICIke0dUSzNESVNUUk9GRUFUVVJFU30iCisKKyMgSW5zdGVhZCBvZiAiaW5oZXJpdCB2YWxhIiB3ZSBkbyB0aGUgcmVsZXZhbnQgc2V0dGluZ3MgaGVyZSBzbyB3ZSBjYW4KKyMgc2V0IERFUEVORFMgYmFzZWQgb24gUEFDS0FHRUNPTkZJRy4KKworIyBPdXIgcGF0Y2hlZCB2ZXJzaW9uIG9mIFZhbGEgbG9va3MgaW4gU1RBR0lOR19EQVRBRElSIGZvciAudmFwaSBmaWxlcworZXhwb3J0IFNUQUdJTkdfREFUQURJUgorIyBVcHN0cmVhbSBWYWxhID49IDAuMTEgbG9va3MgaW4gWERHX0RBVEFfRElSUyBmb3IgLnZhcGkgZmlsZXMKK2V4cG9ydCBYREdfREFUQV9ESVJTID0gIiR7U1RBR0lOR19EQVRBRElSfSIKKworIyBIZWxwIGctaXItc2Nhbm5lciBmaW5kIHRoZSAuc28gZm9yIGxpbmtpbmcKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKyAgICAgICAgZXhwb3J0IEdJUl9FWFRSQV9MSUJTX1BBVEg9IiR7Qn0vc3JjLy5saWJzIgorfQorCisjIFBhY2thZ2UgYWRkaXRpb25hbCBmaWxlcworRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9L3ZhbGEvdmFwaS8qIgorCitQQUNLQUdFQ09ORklHID8/PSAiZ251dGxzIgorUEFDS0FHRUNPTkZJR1t2YWxhXSA9ICItLWVuYWJsZS12YWxhLC0tZGlzYWJsZS12YWxhLHZhbGEtbmF0aXZlIHZhbGEiCitQQUNLQUdFQ09ORklHW2dudXRsc10gPSAiLS13aXRoLWdudXRscywtLXdpdGhvdXQtZ251dGxzLGdudXRscyIKKworQ0ZMQUdTICs9ICItRF9HTlVfU09VUkNFIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXRlc3QtYXBwbGljYXRpb24iCisKKyMgbGlidG9vbCBhZGRzICItbm9zdGRsaWIiIHdoZW4gZysrIGlzIHVzZWQuIFRoaXMgYnJlYWtzIFBJRSBidWlsZHMuCisjIFVzZSBsaWJ0b29sLWNyb3NzICh3aGljaCBoYXMgYSBoYWNrIHRvIHByZXZlbnQgdGhhdCkgaW5zdGVhZC4KK0VYVFJBX09FTUFLRV9jbGFzcy10YXJnZXQgPSAiTElCVE9PTD0ke1NUQUdJTkdfQklORElSX0NST1NTfS8ke0hPU1RfU1lTfS1saWJ0b29sIgorCitQQUNLQUdFUyA9KyAibGlidnRlIgorRklMRVNfbGlidnRlID0gIiR7bGliZGlyfS8qLnNvLiogJHtsaWJkaXJ9L2dpcmVwb3NpdG9yeS0xLjAvKiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvYXJtLWxpbnV4LXVjbGliYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvYXJtLWxpbnV4LXVjbGliYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFlN2M2ZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS1saW51eC11Y2xpYmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vCi1hY19jdl9zaXplb2ZfX19pbnQ2ND0ke2FjX2N2X3NpemVvZl9fX2ludDY0PTB9Ci1hY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9Ci1hY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQotYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz00fQotYWNfY3Zfc2l6ZW9mX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfaW50PTR9Ci1hY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQotYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9Ci1hY19jdl9zaXplb2Zfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0yfQotYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9NH0KLWFjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTR9Ci1hY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9OH0KLQotYWNfY3ZfdWNoYXI9JHthY19jdl91Y2hhcj1ub30KLWFjX2N2X3VpbnQ9JHthY19jdl91aW50PXllc30KLWFjX2N2X3Vsb25nPSR7YWNfY3ZfdWxvbmc9eWVzfQotYWNfY3ZfdXNob3J0PSR7YWNfY3ZfdXNob3J0PXllc30KLQotYWNfY3ZfdGltZV9yX3R5cGU9JHthY19jdl90aW1lX3JfdHlwZT1QT1NJWH0KLQotIyBzYW1iYQotc2FtYmFfY3ZfQlJPS0VOX05JU1BMVVNfSU5DTFVERV9GSUxFUz0ke3NhbWJhX2N2X0JST0tFTl9OSVNQTFVTX0lOQ0xVREVfRklMRVM9eWVzfQotc2FtYmFfY3ZfQlJPS0VOX1JFREhBVF83X1NZU1RFTV9IRUFERVJTPSR7c2FtYmFfY3ZfQlJPS0VOX1JFREhBVF83X1NZU1RFTV9IRUFERVJTPW5vfQotc2FtYmFfY3ZfRlRSVU5DQVRFX05FRURTX1JPT1Q9JHtzYW1iYV9jdl9GVFJVTkNBVEVfTkVFRFNfUk9PVD1ub30KLXNhbWJhX2N2X0hBVkVfQlJPS0VOX0ZDTlRMNjRfTE9DS1M9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9GQ05UTDY0X0xPQ0tTPW5vfQotc2FtYmFfY3ZfSEFWRV9CUk9LRU5fR0VUR1JPVVBTPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fR0VUR1JPVVBTPW5vfQotc2FtYmFfY3ZfSEFWRV9CUk9LRU5fTElOVVhfU0VOREZJTEU9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9MSU5VWF9TRU5ERklMRT15ZXN9Ci1zYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj1ub30KLXNhbWJhX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj0ke3NhbWJhX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj15ZXN9Ci1zYW1iYV9jdl9IQVZFX0RFVjY0X1Q9JHtzYW1iYV9jdl9IQVZFX0RFVjY0X1Q9bm99Ci1zYW1iYV9jdl9IQVZFX0RFVklDRV9NQUpPUl9GTj0ke3NhbWJhX2N2X0hBVkVfREVWSUNFX01BSk9SX0ZOPXllc30KLXNhbWJhX2N2X0hBVkVfREVWSUNFX01JTk9SX0ZOPSR7c2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUlOT1JfRk49eWVzfQotc2FtYmFfY3ZfSEFWRV9EUUJfRlNPRlRMSU1JVD0ke3NhbWJhX2N2X0hBVkVfRFFCX0ZTT0ZUTElNSVQ9bm99Ci1zYW1iYV9jdl9IQVZFX0VYUExJQ0lUX0xBUkdFRklMRV9TVVBQT1JUPSR7c2FtYmFfY3ZfSEFWRV9FWFBMSUNJVF9MQVJHRUZJTEVfU1VQUE9SVD15ZXN9Ci1zYW1iYV9jdl9IQVZFX0ZDTlRMX0xPQ0s9JHtzYW1iYV9jdl9IQVZFX0ZDTlRMX0xPQ0s9eWVzfQotc2FtYmFfY3ZfSEFWRV9GVFJVTkNBVEVfRVhURU5EPSR7c2FtYmFfY3ZfSEFWRV9GVFJVTkNBVEVfRVhURU5EPXllc30KLXNhbWJhX2N2X0hBVkVfRlVOQ1RJT05fTUFDUk89JHtzYW1iYV9jdl9IQVZFX0ZVTkNUSU9OX01BQ1JPPXllc30KLXNhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQotc2FtYmFfY3ZfSEFWRV9JTk82NF9UPSR7c2FtYmFfY3ZfSEFWRV9JTk82NF9UPW5vfQotc2FtYmFfY3ZfSEFWRV9JTlQxNl9GUk9NX1JQQ19SUENfSD0ke3NhbWJhX2N2X0hBVkVfSU5UMTZfRlJPTV9SUENfUlBDX0g9bm99Ci1zYW1iYV9jdl9IQVZFX0lOVDMyX0ZST01fUlBDX1JQQ19IPSR7c2FtYmFfY3ZfSEFWRV9JTlQzMl9GUk9NX1JQQ19SUENfSD1ub30KLXNhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPXllc30KLXNhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPXllc30KLXNhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9eWVzfQotc2FtYmFfY3ZfSEFWRV9NTUFQPSR7c2FtYmFfY3ZfSEFWRV9NTUFQPXllc30KLXNhbWJhX2N2X0hBVkVfTkFUSVZFX0lDT05WPSR7c2FtYmFfY3ZfSEFWRV9OQVRJVkVfSUNPTlY9eWVzfQotc2FtYmFfY3ZfSEFWRV9PRkY2NF9UPSR7c2FtYmFfY3ZfSEFWRV9PRkY2NF9UPW5vfQotc2FtYmFfY3ZfSEFWRV9RVU9UQUNUTF80QT0ke3NhbWJhX2N2X0hBVkVfUVVPVEFDVExfNEE9eWVzfQotc2FtYmFfY3ZfSEFWRV9ST09UPSR7c2FtYmFfY3ZfSEFWRV9ST09UPW5vfQotc2FtYmFfY3ZfSEFWRV9SUENfQVVUSF9FUlJPUl9DT05GTElDVD0ke3NhbWJhX2N2X0hBVkVfUlBDX0FVVEhfRVJST1JfQ09ORkxJQ1Q9bm99Ci1zYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPSR7c2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD15ZXN9Ci1zYW1iYV9jdl9IQVZFX1NFTkRGSUxFPSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRT1ub30KLXNhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND1ub30KLXNhbWJhX2N2X0hBVkVfU09DS19TSU5fTEVOPSR7c2FtYmFfY3ZfSEFWRV9TT0NLX1NJTl9MRU49bm99Ci1zYW1iYV9jdl9IQVZFX1NUQVRfU1RfQkxLU0laRT0ke3NhbWJhX2N2X0hBVkVfU1RBVF9TVF9CTEtTSVpFPXllc30KLXNhbWJhX2N2X0hBVkVfU1RBVF9TVF9CTE9DS1M9JHtzYW1iYV9jdl9IQVZFX1NUQVRfU1RfQkxPQ0tTPXllc30KLXNhbWJhX2N2X0hBVkVfU1RSVUNUX0RJUkVOVDY0PSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRElSRU5UNjQ9bm99Ci1zYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND15ZXN9Ci1zYW1iYV9jdl9IQVZFX1NUUlVDVF9JRl9EUUJMSz0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0lGX0RRQkxLPW5vfQotc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfTUVNX0RRQkxLPSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfTUVNX0RRQkxLPW5vfQotc2FtYmFfY3ZfSEFWRV9UUlVOQ0FURURfU0FMVD0ke3NhbWJhX2N2X0hBVkVfVFJVTkNBVEVEX1NBTFQ9bm99Ci1zYW1iYV9jdl9IQVZFX1VJTlQxNl9GUk9NX1JQQ19SUENfSD0ke3NhbWJhX2N2X0hBVkVfVUlOVDE2X0ZST01fUlBDX1JQQ19IPW5vfQotc2FtYmFfY3ZfSEFWRV9VSU5UMzJfRlJPTV9SUENfUlBDX0g9JHtzYW1iYV9jdl9IQVZFX1VJTlQzMl9GUk9NX1JQQ19SUENfSD1ub30KLXNhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj0ke3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj15ZXN9Ci1zYW1iYV9jdl9IQVZFX1VUSU1CVUY9JHtzYW1iYV9jdl9IQVZFX1VUSU1CVUY9eWVzfQotc2FtYmFfY3ZfSEFWRV9VVF9VVF9BRERSPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9BRERSPXllc30KLXNhbWJhX2N2X0hBVkVfVVRfVVRfRVhJVD0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfRVhJVD15ZXN9Ci1zYW1iYV9jdl9IQVZFX1VUX1VUX0hPU1Q9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX0hPU1Q9eWVzfQotc2FtYmFfY3ZfSEFWRV9VVF9VVF9JRD0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfSUQ9eWVzfQotc2FtYmFfY3ZfSEFWRV9VVF9VVF9OQU1FPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9OQU1FPXllc30KLXNhbWJhX2N2X0hBVkVfVVRfVVRfUElEPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9QSUQ9eWVzfQotc2FtYmFfY3ZfSEFWRV9VVF9VVF9USU1FPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9USU1FPXllc30KLXNhbWJhX2N2X0hBVkVfVVRfVVRfVFY9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX1RWPXllc30KLXNhbWJhX2N2X0hBVkVfVVRfVVRfVFlQRT0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfVFlQRT15ZXN9Ci1zYW1iYV9jdl9IQVZFX1VUX1VUX1VTRVI9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX1VTRVI9eWVzfQotc2FtYmFfY3ZfSEFWRV9VWF9VVF9TWVNMRU49JHtzYW1iYV9jdl9IQVZFX1VYX1VUX1NZU0xFTj1ub30KLXNhbWJhX2N2X0hBVkVfVkFfQ09QWT0ke3NhbWJhX2N2X0hBVkVfVkFfQ09QWT15ZXN9Ci1zYW1iYV9jdl9IQVZFX1dPUktJTkdfQUZfTE9DQUw9JHtzYW1iYV9jdl9IQVZFX1dPUktJTkdfQUZfTE9DQUw9bm99Ci1zYW1iYV9jdl9IQVZFX1dlcnJvcj0ke3NhbWJhX2N2X0hBVkVfV2Vycm9yPXllc30KLXNhbWJhX2N2X1BVVFVUTElORV9SRVRVUk5TX1VUTVA9JHtzYW1iYV9jdl9QVVRVVExJTkVfUkVUVVJOU19VVE1QPXllc30KLXNhbWJhX2N2X1FVT1RBX1dPUktTPSR7c2FtYmFfY3ZfUVVPVEFfV09SS1M9eWVzfQotc2FtYmFfY3ZfUkVQTEFDRV9HRVRQQVNTPSR7c2FtYmFfY3ZfUkVQTEFDRV9HRVRQQVNTPXllc30KLXNhbWJhX2N2X1JFUExBQ0VfSU5FVF9OVE9BPSR7c2FtYmFfY3ZfUkVQTEFDRV9JTkVUX05UT0E9bm99Ci1zYW1iYV9jdl9SVU5fUVVPVEFfVEVTVFM9JHtzYW1iYV9jdl9SVU5fUVVPVEFfVEVTVFM9YXV0b30KLXNhbWJhX2N2X1NFRUtESVJfUkVUVVJOU19WT0lEPSR7c2FtYmFfY3ZfU0VFS0RJUl9SRVRVUk5TX1ZPSUQ9eWVzfQotc2FtYmFfY3ZfU0laRU9GX0lOT19UPSR7c2FtYmFfY3ZfU0laRU9GX0lOT19UPXllc30KLXNhbWJhX2N2X1NJWkVPRl9PRkZfVD0ke3NhbWJhX2N2X1NJWkVPRl9PRkZfVD15ZXN9Ci1zYW1iYV9jdl9TWVNDT05GX1NDX05HUk9VUFNfTUFYPSR7c2FtYmFfY3ZfU1lTQ09ORl9TQ19OR1JPVVBTX01BWD15ZXN9Ci1zYW1iYV9jdl9TWVNRVU9UQV9GT1VORD0ke3NhbWJhX2N2X1NZU1FVT1RBX0ZPVU5EPXllc30KLXNhbWJhX2N2X1NZU1FVT1RBX1dPUktTPSR7c2FtYmFfY3ZfU1lTUVVPVEFfV09SS1M9eWVzfQotc2FtYmFfY3ZfVFJZX1FVT1RBUz0ke3NhbWJhX2N2X1RSWV9RVU9UQVM9bm99Ci1zYW1iYV9jdl9UUllfU1lTX1FVT1RBUz0ke3NhbWJhX2N2X1RSWV9TWVNfUVVPVEFTPW5vfQotc2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9eWVzfQotc2FtYmFfY3ZfV0lUSF9RVU9UQVM9JHtzYW1iYV9jdl9XSVRIX1FVT1RBUz1hdXRvfQotc2FtYmFfY3ZfV0lUSF9TWVNfUVVPVEFTPSR7c2FtYmFfY3ZfV0lUSF9TWVNfUVVPVEFTPWF1dG99Ci1zYW1iYV9jdl9jb21waWxlcl9zdXBwb3J0c19sbD0ke3NhbWJhX2N2X2NvbXBpbGVyX3N1cHBvcnRzX2xsPXllc30KLXNhbWJhX2N2X2hhdmVfbG9uZ2xvbmc9JHtzYW1iYV9jdl9oYXZlX2xvbmdsb25nPXllc30KLXNhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9eWVzfQotc2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD15ZXN9Ci1zYW1iYV9jdl9pbW1lZGlhdGVfc3RydWN0dXJlcz0ke3NhbWJhX2N2X2ltbWVkaWF0ZV9zdHJ1Y3R1cmVzPXllc30KLXNhbWJhX2N2X29wdGltaXplX291dF9mdW5jYXRpb25fY2FsbHM9JHtzYW1iYV9jdl9vcHRpbWl6ZV9vdXRfZnVuY2F0aW9uX2NhbGxzPXllc30KLXNhbWJhX2N2X3NpZ19hdG9taWNfdD0ke3NhbWJhX2N2X3NpZ19hdG9taWNfdD15ZXN9Ci1zYW1iYV9jdl9zb2NrbGVuX3Q9JHtzYW1iYV9jdl9zb2NrbGVuX3Q9eWVzfQotc2FtYmFfY3ZfdW5peHNvY2tldD0ke3NhbWJhX2N2X3VuaXhzb2NrZXQ9eWVzfQotc2FtYmFfY3Zfdm9sYXRpbGU9JHtzYW1iYV9jdl92b2xhdGlsZT15ZXN9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybWViLWxpbnV4LXVjbGliYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvYXJtZWItbGludXgtdWNsaWJjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzFlODU3Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvYXJtZWItbGludXgtdWNsaWJjCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vCi1hY19jdl9zaXplb2ZfX19pbnQ2ND0ke2FjX2N2X3NpemVvZl9fX2ludDY0PTB9Ci1hY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9Ci1hY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQotYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz00fQotYWNfY3Zfc2l6ZW9mX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfaW50PTR9Ci1hY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQotYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9Ci1hY19jdl9zaXplb2Zfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0yfQotYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9NH0KLWFjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTR9Ci1hY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9OH0KLWFjX2N2X3NpemVvZl9jaGFyX3A9JHthY19jdl9zaXplb2ZfY2hhcl9wPTR9Ci1hY19jdl9zaXplb2ZfdW5zaWduZWQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWQ9NH0KLWFjX2N2X3NpemVvZl9wdHJkaWZmX3Q9JHtnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9NH0KLQotYWNfY3ZfdWNoYXI9JHthY19jdl91Y2hhcj1ub30KLWFjX2N2X3VpbnQ9JHthY19jdl91aW50PXllc30KLWFjX2N2X3Vsb25nPSR7YWNfY3ZfdWxvbmc9eWVzfQotYWNfY3ZfdXNob3J0PSR7YWNfY3ZfdXNob3J0PXllc30KLQotYWNfY3ZfdGltZV9yX3R5cGU9JHthY19jdl90aW1lX3JfdHlwZT1QT1NJWH0KLQotIyBzYW1iYQotc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9Ci1zYW1iYV9jdl9VU0VfU0VURVVJRD0ke3NhbWJhX2N2X1VTRV9TRVRFVUlEPXllc30KLXNhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPXllc30KLXNhbWJhX2N2X1VTRV9TRVRSRVVJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVVJRD15ZXN9Ci1zYW1iYV9jdl9VU0VfU0VUVUlEWD0ke3NhbWJhX2N2X1VTRV9TRVRVSURYPXllc30KLXNhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9eWVzfQotc2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD15ZXN9Ci1zYW1iYV9jdl9IQVZFX1NFTkRGSUxFPSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRT15ZXN9Ci1zYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9eWVzfQotc2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD0ke3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9eWVzfQotc2FtYmFfY3ZfSEFWRV9NTUFQPSR7c2FtYmFfY3ZfSEFWRV9NTUFQPXllc30KLXNhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPXllc30KLXNhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPXllc30KLXNhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9eWVzfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9jb21tb24tdWNsaWJjIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9jb21tb24tdWNsaWJjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmZjMTAzLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLXVjbGliYworKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLSMgZ2VuZXJhbAotYWNfY3ZfaGF2ZV9kZWNsX3N5c19zaWdsaXN0PSR7YWNfY3ZfaGF2ZV9kZWNsX3N5c19zaWdsaXN0PW5vfQotYWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzPSR7YWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzPXllc30KLWFjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9JHthY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsPXllc30KLWFjX2N2X2Z1bmNfbWFsbG9jX3dvcmtzPSR7YWNfY3ZfZnVuY19tYWxsb2Nfd29ya3M9eWVzfQotYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPSR7YWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPXllc30KLWFjX2N2X2Z1bmNfZ2V0cGdycF92b2lkPXllcwotYWNfY3ZfZnVuY19zZXRwZ3JwX3ZvaWQ9eWVzCi1hY19jdl9mdW5jX3NldGdyZW50X3ZvaWQ9eWVzCi1hY19jdl9mdW5jX2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX2dldGdyZ2lkX3I9eWVzfQotYWNfY3ZfZnVuY19nZXRwd3VpZF9yPSR7YWNfY3ZfZnVuY19nZXRwd3VpZF9yPXllc30KLWFjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj15ZXN9Ci1hY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9eWVzfQotYWNfY3ZfZnVuY19nZXRhZGRyaW5mbz0ke2FjX2N2X2Z1bmNfZ2V0YWRkcmluZm89eWVzfQotCi0jIGdsaWIKLWdsaWJfY3Zfc3RybGNweT0ke2dsaWJfY3Zfc3RybGNweT1ub30KLWFjX2N2X2Z1bmNfcHJpbnRmX3VuaXg5OD0ke2FjX2N2X2Z1bmNfcHJpbnRmX3VuaXg5OD15ZXN9Ci1hY19jdl9mdW5jX3NucHJpbnRmX2M5OT0ke2FjX2N2X2Z1bmNfc25wcmludGZfYzk5PXllc30KLWFjX2N2X2Z1bmNfdnNucHJpbnRmX2M5OT0ke2FjX2N2X2Z1bmNfdnNucHJpbnRmX2M5OT15ZXN9Ci1nbGliX2N2X2NvbXBsaWFudF9wb3NpeF9tZW1hbGlnbj0ke2dsaWJfY3ZfY29tcGxpYW50X3Bvc2l4X21lbWFsaWduPTF9Ci1nbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9Ci1nbGliX2N2X2hhdmVfcXNvcnRfcj0ke2dsaWJfY3ZfaGF2ZV9xc29ydF9yPW5vfQotCi0jZGJ1cy1nbGliCi1hY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9JHthY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9eWVzfQotCi0jIGJhc2gKLWJhc2hfY3ZfdW5kZXJfc3lzX3NpZ2xpc3Q9JHtiYXNoX2N2X3VuZGVyX3N5c19zaWdsaXN0PW5vfQotYmFzaF9jdl9zeXNfc2lnbGlzdD0ke2Jhc2hfY3Zfc3lzX3NpZ2xpc3Q9bm99Ci0KLSMgY29yZXV0aWxzCi1mdV9jdl9zeXNfc3RhdF9zdGF0ZnMyX2JzaXplPSR7ZnVfY3Zfc3lzX3N0YXRfc3RhdGZzMl9ic2l6ZT15ZXN9Ci1nbF9jdl9mdW5jX2dldHRpbWVvZmRheV9jbG9iYmVyPSR7Z2xfY3ZfZnVuY19nZXR0aW1lb2ZkYXlfY2xvYmJlcj1ub30KLWdsX2N2X2Z1bmNfdHpzZXRfY2xvYmJlcj0ke2dsX2N2X2Z1bmNfdHpzZXRfY2xvYmJlcj1ub30KLWdsX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X3Bvc2l4X3NpZ25hdHVyZT0ke2dsX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X3Bvc2l4X3NpZ25hdHVyZT15ZXN9Ci1hY19jdl9mdW5jX3Bvc2l4X3NwYXduPSR7YWNfY3ZfZnVuY19wb3NpeF9zcGF3bj15ZXN9Ci1hY19jdl9mdW5jX3Bvc2l4X3NwYXduX3dvcmtzPSR7YWNfY3ZfZnVuY19wb3NpeF9zcGF3bl93b3Jrcz15ZXN9Ci0KLSMgdmFfY29weSBhbmQgX3ZhX2NvcHkKLWFjX2N2X3ZhX2NvcHk9JHthY19jdl92YV9jb3B5PXllc30KLWFjX2N2X19fdmFfY29weT0ke2FjX2N2X19fdmFfY29weT15ZXN9Ci1hY19jdl9mdW5jX3ZhX2NvcHk9JHthY19jdl9mdW5jX3ZhX2NvcHk9eWVzfQotYWNfY3ZfZnVuY19fX3ZhX2NvcHk9JHthY19jdl9mdW5jX19fdmFfY29weT15ZXN9Ci0KLSMgcG9zaXhfZ2V0cHd1aWRfciBwb3NpeF9nZXRncmdpZF9yIHBvc2l4X2dldHB3bmFtX3IKLWFjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj15ZXN9Ci1hY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9eWVzfQotYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KLQotIyBYb3JnCi14b3JnX2N2X21hbGxvYzBfcmV0dXJuc19udWxsPSR7eG9yZ19jdl9tYWxsb2MwX3JldHVybnNfbnVsbD15ZXN9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL2l4ODYtY29tbW9uIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9peDg2LWNvbW1vbgppbmRleCBmNGNmMGI4Li40ZmJmNThjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL2l4ODYtY29tbW9uCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvaXg4Ni1jb21tb24KQEAgLTE5LDcgKzE5LDYgQEAKIGFjX2N2X3NpemVvZl9mbG9hdD0ke2FjX2N2X3NpemVvZl9mbG9hdD00fQogYWNfY3Zfc2l6ZW9mX3VpZF90PSR7YWNfY3Zfc2l6ZW9mX3VpZF90PTR9CiBhY19jdl9zaXplb2ZfZ2lkX3Q9JHthY19jdl9zaXplb2ZfZ2lkX3Q9NH0KLWFjX2N2X3NpemVvZl9pbm9fdD0ke2FjX2N2X3NpemVvZl9pbm9fdD00fQogYWNfY3Zfc2l6ZW9mX2Rldl90PSR7YWNfY3Zfc2l6ZW9mX2Rldl90PTh9CiBhY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9JHthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9eWVzfQogYWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzLWxpbnV4LXVjbGliYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwcy1saW51eC11Y2xpYmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMzM2M2UuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzLWxpbnV4LXVjbGliYworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSMgZ2VuZXJhbAotYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQotCi0jIGJhc2gKLWFjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPW5vfQotYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9cHJlc2VudH0KLQotIyBvcGVuc3NoCi1hY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99Ci1hY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQotYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQotYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPW5vfQotYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9eWVzfQotCi0jIGZnZXQKLWNvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9eWVzfQotCi0jIGdsaWIKLWdsaWJfY3ZfX192YV9jb3B5PSR7Z2xpYl9jdl9fX3ZhX2NvcHk9eWVzfQotZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQotZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KLWdsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQotZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQotZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99Ci1nbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KLWdsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KLWdsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9Ci1nbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KLWdsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99Ci0KLSMgZ2xpYi0yLjAKLWdsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQotdXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9Ci1nbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9Ci0KLSMgbGlicGNhcAotYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KLQotIyBzdGFydHVwLW5vdGlmaWNhdGlvbgotbGZfY3Zfc2FuZV9yZWFsbG9jPSR7bGZfY3Zfc2FuZV9yZWFsbG9jPXllc30KLQotIyBsaWJpZGwKLWxpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9Ci0KLSMgbmNmdHAKLXdpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz1sb25nfQotd2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9bG9uZ30KLXdpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9JHt3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPXllc30KLQotIyBkYgotZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9Ci1kYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KLWRiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KLWRiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KLQotIyBycmR0b29sCi1yZF9jdl9pZWVlX3dvcmtzPSR7cmRfY3ZfaWVlZV93b3Jrcz15ZXN9Ci0jIGFjX2N2X3BhdGhfUEVSTD0ke2FjX2N2X3BhdGhfUEVSTD1ub30KLQotIyBnZXR0ZXh0Ci1hbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KLQotIyBzYW1iYQotc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9Ci0KLSMgdmltCi1hY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQotCi0jIGludGVyY29tCi1hY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9JHthY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9eWVzfQotCi0jIGxtYmVuY2gKLWFjX2N2X3VpbnQ9JHthY19jdl91bml0PXllc30KLQotIyBELUJVUwotYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KLQotIyBldm9sdXRpb24tZGF0YS1zZXJ2ZXIKLWFjX2N2X2xpYmljb252X3V0Zjg9JHthY19jdl9saWJpY29udl91dGY4PXllc30KLQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzNjQtbGludXgtdWNsaWJjIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzNjQtbGludXgtdWNsaWJjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmJhNTUyLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwczY0LWxpbnV4LXVjbGliYworKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLSMgZ2VuZXJhbAotYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQotCi0jIGJhc2gKLWFjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPW5vfQotYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9cHJlc2VudH0KLQotIyBvcGVuc3NoCi1hY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99Ci1hY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQotYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQotYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPW5vfQotYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9eWVzfQotCi0jIGZnZXQKLWNvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9eWVzfQotCi0jIGdsaWIKLWdsaWJfY3ZfX192YV9jb3B5PSR7Z2xpYl9jdl9fX3ZhX2NvcHk9eWVzfQotZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQotZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KLWdsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQotZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQotZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99Ci1nbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KLWdsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KLWdsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9Ci1nbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KLWdsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99Ci0KLSMgZ2xpYi0yLjAKLWdsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQotdXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9Ci1nbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9Ci1hY19jdl9hbGlnbm9mX2d1aW50MzI9NAotYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKLWFjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz04Ci0KLSMgbGlicGNhcAotYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KLQotIyBzdGFydHVwLW5vdGlmaWNhdGlvbgotbGZfY3Zfc2FuZV9yZWFsbG9jPSR7bGZfY3Zfc2FuZV9yZWFsbG9jPXllc30KLQotIyBsaWJpZGwKLWxpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9Ci0KLSMgbmNmdHAKLXdpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz1sb25nfQotd2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9bG9uZ30KLXdpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9JHt3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPXllc30KLQotIyBkYgotZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9Ci1kYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KLWRiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KLWRiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KLQotIyBycmR0b29sCi1yZF9jdl9pZWVlX3dvcmtzPSR7cmRfY3ZfaWVlZV93b3Jrcz15ZXN9Ci0jIGFjX2N2X3BhdGhfUEVSTD0ke2FjX2N2X3BhdGhfUEVSTD1ub30KLQotIyBnZXR0ZXh0Ci1hbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KLQotIyBzYW1iYQotc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9Ci0KLSMgdmltCi1hY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQotCi0jIGludGVyY29tCi1hY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9JHthY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9eWVzfQotCi0jIGxtYmVuY2gKLWFjX2N2X3VpbnQ9JHthY19jdl91bml0PXllc30KLQotIyBELUJVUwotYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KLQotIyBlZHMtZGJ1cwotYWNfY3ZfbGliaWNvbnZfdXRmOD0ke2FjX2N2X2xpYmljb252X3V0Zjg9eWVzfQotCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHM2NGVsLWxpbnV4LXVjbGliYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwczY0ZWwtbGludXgtdWNsaWJjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTA0OTlkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwczY0ZWwtbGludXgtdWNsaWJjCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLSMgZ2VuZXJhbAotYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQotCi0jIGJhc2gKLWFjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPW5vfQotYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9cHJlc2VudH0KLQotIyBvcGVuc3NoCi1hY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99Ci1hY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQotYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQotYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPW5vfQotYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9eWVzfQotCi0jIGZnZXQKLWNvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9eWVzfQotCi0jIGdsaWIKLWdsaWJfY3ZfX192YV9jb3B5PSR7Z2xpYl9jdl9fX3ZhX2NvcHk9eWVzfQotZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQotZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KLWdsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQotZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQotZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99Ci1nbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KLWdsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KLWdsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9Ci1nbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KLWdsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99Ci0KLSMgZ2xpYi0yLjAKLWdsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQotdXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9Ci1nbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9Ci1hY19jdl9hbGlnbm9mX2d1aW50MzI9NAotYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKLWFjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz04Ci0KLSMgbGlicGNhcAotYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KLQotIyBzdGFydHVwLW5vdGlmaWNhdGlvbgotbGZfY3Zfc2FuZV9yZWFsbG9jPSR7bGZfY3Zfc2FuZV9yZWFsbG9jPXllc30KLQotIyBsaWJpZGwKLWxpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9Ci0KLSMgbmNmdHAKLXdpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz1sb25nfQotd2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9bG9uZ30KLXdpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9JHt3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPXllc30KLQotIyBnZXR0ZXh0Ci1hbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KLQotIyBzYW1iYQotIyBmcm9tIHNhbWJhIDMuMC4xNGEgb24gNS8yOS8yMDA1Ci1hY19jdl9mdW5jX21lbWNtcF93b3JraW5nPSR7YWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz15ZXN9Ci1hY19jdl9oYXZlX2FzcHJpbnRmX2RlY2w9JHthY19jdl9oYXZlX2FzcHJpbnRmX2RlY2w9eWVzfQotYWNfY3ZfaGF2ZV9zZXRyZXNnaWRfZGVjbD0ke2FjX2N2X2hhdmVfc2V0cmVzZ2lkX2RlY2w9eWVzfQotYWNfY3ZfaGF2ZV9zZXRyZXN1aWRfZGVjbD0ke2FjX2N2X2hhdmVfc2V0cmVzdWlkX2RlY2w9eWVzfQotYWNfY3ZfaGF2ZV92YXNwcmludGZfZGVjbD0ke2FjX2N2X2hhdmVfdmFzcHJpbnRmX2RlY2w9eWVzfQotZnVfY3Zfc3lzX3N0YXRfc3RhdHZmczY0PSR7ZnVfY3Zfc3lzX3N0YXRfc3RhdHZmczY0PXllc30KLXNhbWJhX2N2X0ZUUlVOQ0FURV9ORUVEU19ST09UPSR7c2FtYmFfY3ZfRlRSVU5DQVRFX05FRURTX1JPT1Q9bm99Ci1zYW1iYV9jdl9IQVZFX0JST0tFTl9GQ05UTDY0X0xPQ0tTPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fRkNOVEw2NF9MT0NLUz1ub30KLXNhbWJhX2N2X0hBVkVfQlJPS0VOX0dFVEdST1VQUz0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0dFVEdST1VQUz1ub30KLXNhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSPW5vfQotc2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7c2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KLXNhbWJhX2N2X0hBVkVfREVWNjRfVD0ke3NhbWJhX2N2X0hBVkVfREVWNjRfVD1ub30KLXNhbWJhX2N2X0hBVkVfREVWSUNFX01BSk9SX0ZOPSR7c2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUFKT1JfRk49eWVzfQotc2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUlOT1JfRk49JHtzYW1iYV9jdl9IQVZFX0RFVklDRV9NSU5PUl9GTj15ZXN9Ci1zYW1iYV9jdl9IQVZFX0VYUExJQ0lUX0xBUkdFRklMRV9TVVBQT1JUPSR7c2FtYmFfY3ZfSEFWRV9FWFBMSUNJVF9MQVJHRUZJTEVfU1VQUE9SVD15ZXN9Ci1zYW1iYV9jdl9IQVZFX0ZDTlRMX0xPQ0s9JHtzYW1iYV9jdl9IQVZFX0ZDTlRMX0xPQ0s9eWVzfQotc2FtYmFfY3ZfSEFWRV9GVFJVTkNBVEVfRVhURU5EPSR7c2FtYmFfY3ZfSEFWRV9GVFJVTkNBVEVfRVhURU5EPXllc30KLXNhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQotc2FtYmFfY3ZfSEFWRV9JTk82NF9UPSR7c2FtYmFfY3ZfSEFWRV9JTk82NF9UPW5vfQotc2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9eWVzfQotc2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9eWVzfQotc2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz15ZXN9Ci1zYW1iYV9jdl9IQVZFX01BS0VERVY9JHtzYW1iYV9jdl9IQVZFX01BS0VERVY9eWVzfQotc2FtYmFfY3ZfSEFWRV9NTUFQPSR7c2FtYmFfY3ZfSEFWRV9NTUFQPXllc30KLXNhbWJhX2N2X0hBVkVfT0ZGNjRfVD0ke3NhbWJhX2N2X0hBVkVfT0ZGNjRfVD1ub30KLXNhbWJhX2N2X0hBVkVfUVVPVEFDVExfNEE9JHtzYW1iYV9jdl9IQVZFX1FVT1RBQ1RMXzRBPXllc30KLXNhbWJhX2N2X0hBVkVfUk9PVD0ke3NhbWJhX2N2X0hBVkVfUk9PVD1ub30KLXNhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KLXNhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND15ZXN9Ci1zYW1iYV9jdl9IQVZFX1NUUlVDVF9ESVJFTlQ2ND0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0RJUkVOVDY0PXllc30KLXNhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PXllc30KLXNhbWJhX2N2X0hBVkVfVFJVTkNBVEVEX1NBTFQ9JHtzYW1iYV9jdl9IQVZFX1RSVU5DQVRFRF9TQUxUPW5vfQotc2FtYmFfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPSR7c2FtYmFfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPW5vfQotc2FtYmFfY3ZfSEFWRV9XT1JLSU5HX0FGX0xPQ0FMPSR7c2FtYmFfY3ZfSEFWRV9XT1JLSU5HX0FGX0xPQ0FMPW5vfQotc2FtYmFfY3ZfSEFWRV9XZXJyb3I9JHtzYW1iYV9jdl9IQVZFX1dlcnJvcj15ZXN9Ci1zYW1iYV9jdl9SRUFMUEFUSF9UQUtFU19OVUxMPSR7c2FtYmFfY3ZfUkVBTFBBVEhfVEFLRVNfTlVMTD1ub30KLXNhbWJhX2N2X1JFUExBQ0VfSU5FVF9OVE9BPSR7c2FtYmFfY3ZfUkVQTEFDRV9JTkVUX05UT0E9bm99Ci1zYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9eWVzfQotc2FtYmFfY3ZfU0laRU9GX09GRl9UPSR7c2FtYmFfY3ZfU0laRU9GX09GRl9UPXllc30KLXNhbWJhX2N2X1NZU0NPTkZfU0NfTkdST1VQU19NQVg9JHtzYW1iYV9jdl9TWVNDT05GX1NDX05HUk9VUFNfTUFYPXllc30KLXNhbWJhX2N2X1NZU0NPTkZfU0NfTlBST0NfT05MTj0ke3NhbWJhX2N2X1NZU0NPTkZfU0NfTlBST0NfT05MTj1ub30KLXNhbWJhX2N2X1NZU1FVT1RBX0ZPVU5EPSR7c2FtYmFfY3ZfU1lTUVVPVEFfRk9VTkQ9eWVzfQotc2FtYmFfY3ZfU1lTUVVPVEFfV09SS1M9JHtzYW1iYV9jdl9TWVNRVU9UQV9XT1JLUz15ZXN9Ci1zYW1iYV9jdl9VU0VfU0VUUkVTVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD15ZXN9Ci1zYW1iYV9jdl9oYXZlX2xvbmdsb25nPSR7c2FtYmFfY3ZfaGF2ZV9sb25nbG9uZz15ZXN9Ci1zYW1iYV9jdl9oYXZlX3NldHJlc2dpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPXllc30KLXNhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9eWVzfQotc2FtYmFfY3Zfc3lzcXVvdGFzX2ZpbGU9JHtzYW1iYV9jdl9zeXNxdW90YXNfZmlsZT1saWIvc3lzcXVvdGFzXzRBLmN9Ci0jIFRoaXMgY2FjaGVkIHZhbHVlIG5lZWRzIGEgbG9jYWwgcGF0Y2ggdG8gcGljayBpdCB1cCwgdXBzdHJlYW0gMy4wLjE0YQotIyBkb2Vzbid0IGNhY2hlIGl0Lgotc2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9JHtzYW1iYV9jdl9MSU5VWF9MRlNfU1VQUE9SVD15ZXN9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHNlbC1saW51eC11Y2xpYmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHNlbC1saW51eC11Y2xpYmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5MjFjZGEuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzZWwtbGludXgtdWNsaWJjCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLSMgZ2VuZXJhbAotYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQotCi0jIGJhc2gKLWFjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPW5vfQotYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9cHJlc2VudH0KLQotIyBvcGVuc3NoCi1hY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99Ci1hY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQotYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQotYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPW5vfQotYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9eWVzfQotCi0jIGZnZXQKLWNvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9eWVzfQotCi0jIGdsaWIKLWdsaWJfY3ZfX192YV9jb3B5PSR7Z2xpYl9jdl9fX3ZhX2NvcHk9eWVzfQotZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQotZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KLWdsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQotZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQotZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99Ci1nbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KLWdsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KLWdsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9Ci1nbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KLWdsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99Ci0KLSMgbGlicGNhcAotYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KLQotIyBzdGFydHVwLW5vdGlmaWNhdGlvbgotbGZfY3Zfc2FuZV9yZWFsbG9jPSR7bGZfY3Zfc2FuZV9yZWFsbG9jPXllc30KLQotIyBsaWJpZGwKLWxpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9Ci0KLSMgbmNmdHAKLXdpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz1sb25nfQotd2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9bG9uZ30KLXdpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9JHt3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPXllc30KLQotIyBnZXR0ZXh0Ci1hbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KLQotIyBzYW1iYQotIyBmcm9tIHNhbWJhIDMuMC4xNGEgb24gNS8yOS8yMDA1Ci1hY19jdl9mdW5jX21lbWNtcF93b3JraW5nPSR7YWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz15ZXN9Ci1hY19jdl9oYXZlX2FzcHJpbnRmX2RlY2w9JHthY19jdl9oYXZlX2FzcHJpbnRmX2RlY2w9eWVzfQotYWNfY3ZfaGF2ZV9zZXRyZXNnaWRfZGVjbD0ke2FjX2N2X2hhdmVfc2V0cmVzZ2lkX2RlY2w9eWVzfQotYWNfY3ZfaGF2ZV9zZXRyZXN1aWRfZGVjbD0ke2FjX2N2X2hhdmVfc2V0cmVzdWlkX2RlY2w9eWVzfQotYWNfY3ZfaGF2ZV92YXNwcmludGZfZGVjbD0ke2FjX2N2X2hhdmVfdmFzcHJpbnRmX2RlY2w9eWVzfQotZnVfY3Zfc3lzX3N0YXRfc3RhdHZmczY0PSR7ZnVfY3Zfc3lzX3N0YXRfc3RhdHZmczY0PXllc30KLXNhbWJhX2N2X0ZUUlVOQ0FURV9ORUVEU19ST09UPSR7c2FtYmFfY3ZfRlRSVU5DQVRFX05FRURTX1JPT1Q9bm99Ci1zYW1iYV9jdl9IQVZFX0JST0tFTl9GQ05UTDY0X0xPQ0tTPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fRkNOVEw2NF9MT0NLUz1ub30KLXNhbWJhX2N2X0hBVkVfQlJPS0VOX0dFVEdST1VQUz0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0dFVEdST1VQUz1ub30KLXNhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSPW5vfQotc2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7c2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KLXNhbWJhX2N2X0hBVkVfREVWNjRfVD0ke3NhbWJhX2N2X0hBVkVfREVWNjRfVD1ub30KLXNhbWJhX2N2X0hBVkVfREVWSUNFX01BSk9SX0ZOPSR7c2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUFKT1JfRk49eWVzfQotc2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUlOT1JfRk49JHtzYW1iYV9jdl9IQVZFX0RFVklDRV9NSU5PUl9GTj15ZXN9Ci1zYW1iYV9jdl9IQVZFX0VYUExJQ0lUX0xBUkdFRklMRV9TVVBQT1JUPSR7c2FtYmFfY3ZfSEFWRV9FWFBMSUNJVF9MQVJHRUZJTEVfU1VQUE9SVD15ZXN9Ci1zYW1iYV9jdl9IQVZFX0ZDTlRMX0xPQ0s9JHtzYW1iYV9jdl9IQVZFX0ZDTlRMX0xPQ0s9eWVzfQotc2FtYmFfY3ZfSEFWRV9GVFJVTkNBVEVfRVhURU5EPSR7c2FtYmFfY3ZfSEFWRV9GVFJVTkNBVEVfRVhURU5EPXllc30KLXNhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQotc2FtYmFfY3ZfSEFWRV9JTk82NF9UPSR7c2FtYmFfY3ZfSEFWRV9JTk82NF9UPW5vfQotc2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9eWVzfQotc2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9eWVzfQotc2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz15ZXN9Ci1zYW1iYV9jdl9IQVZFX01BS0VERVY9JHtzYW1iYV9jdl9IQVZFX01BS0VERVY9eWVzfQotc2FtYmFfY3ZfSEFWRV9NTUFQPSR7c2FtYmFfY3ZfSEFWRV9NTUFQPXllc30KLXNhbWJhX2N2X0hBVkVfT0ZGNjRfVD0ke3NhbWJhX2N2X0hBVkVfT0ZGNjRfVD1ub30KLXNhbWJhX2N2X0hBVkVfUVVPVEFDVExfNEE9JHtzYW1iYV9jdl9IQVZFX1FVT1RBQ1RMXzRBPXllc30KLXNhbWJhX2N2X0hBVkVfUk9PVD0ke3NhbWJhX2N2X0hBVkVfUk9PVD1ub30KLXNhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KLXNhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND15ZXN9Ci1zYW1iYV9jdl9IQVZFX1NUUlVDVF9ESVJFTlQ2ND0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0RJUkVOVDY0PXllc30KLXNhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PXllc30KLXNhbWJhX2N2X0hBVkVfVFJVTkNBVEVEX1NBTFQ9JHtzYW1iYV9jdl9IQVZFX1RSVU5DQVRFRF9TQUxUPW5vfQotc2FtYmFfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPSR7c2FtYmFfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPW5vfQotc2FtYmFfY3ZfSEFWRV9XT1JLSU5HX0FGX0xPQ0FMPSR7c2FtYmFfY3ZfSEFWRV9XT1JLSU5HX0FGX0xPQ0FMPW5vfQotc2FtYmFfY3ZfSEFWRV9XZXJyb3I9JHtzYW1iYV9jdl9IQVZFX1dlcnJvcj15ZXN9Ci1zYW1iYV9jdl9SRUFMUEFUSF9UQUtFU19OVUxMPSR7c2FtYmFfY3ZfUkVBTFBBVEhfVEFLRVNfTlVMTD1ub30KLXNhbWJhX2N2X1JFUExBQ0VfSU5FVF9OVE9BPSR7c2FtYmFfY3ZfUkVQTEFDRV9JTkVUX05UT0E9bm99Ci1zYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9eWVzfQotc2FtYmFfY3ZfU0laRU9GX09GRl9UPSR7c2FtYmFfY3ZfU0laRU9GX09GRl9UPXllc30KLXNhbWJhX2N2X1NZU0NPTkZfU0NfTkdST1VQU19NQVg9JHtzYW1iYV9jdl9TWVNDT05GX1NDX05HUk9VUFNfTUFYPXllc30KLXNhbWJhX2N2X1NZU0NPTkZfU0NfTlBST0NfT05MTj0ke3NhbWJhX2N2X1NZU0NPTkZfU0NfTlBST0NfT05MTj1ub30KLXNhbWJhX2N2X1NZU1FVT1RBX0ZPVU5EPSR7c2FtYmFfY3ZfU1lTUVVPVEFfRk9VTkQ9eWVzfQotc2FtYmFfY3ZfU1lTUVVPVEFfV09SS1M9JHtzYW1iYV9jdl9TWVNRVU9UQV9XT1JLUz15ZXN9Ci1zYW1iYV9jdl9VU0VfU0VUUkVTVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD15ZXN9Ci1zYW1iYV9jdl9oYXZlX2xvbmdsb25nPSR7c2FtYmFfY3ZfaGF2ZV9sb25nbG9uZz15ZXN9Ci1zYW1iYV9jdl9oYXZlX3NldHJlc2dpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPXllc30KLXNhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9eWVzfQotc2FtYmFfY3Zfc3lzcXVvdGFzX2ZpbGU9JHtzYW1iYV9jdl9zeXNxdW90YXNfZmlsZT1saWIvc3lzcXVvdGFzXzRBLmN9Ci0jIFRoaXMgY2FjaGVkIHZhbHVlIG5lZWRzIGEgbG9jYWwgcGF0Y2ggdG8gcGljayBpdCB1cCwgdXBzdHJlYW0gMy4wLjE0YQotIyBkb2Vzbid0IGNhY2hlIGl0Lgotc2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9JHtzYW1iYV9jdl9MSU5VWF9MRlNfU1VQUE9SVD15ZXN9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL25pb3MyLWxpbnV4IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS9uaW9zMi1saW51eAppbmRleCAyZjRlNTcwLi41YmFlNzQ4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL25pb3MyLWxpbnV4CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUvbmlvczItbGludXgKQEAgLTMzLDcgKzMzLDYgQEAKIGRiX2N2X3BhdGhfc3RyaXA9JHtkYl9jdl9wYXRoX3N0cmlwPS91c3IvYmluL3N0cmlwfQogZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CiBkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KLWRiX2N2X211dGV4PSR7ZGJfY3ZfbXV0ZXg9QVJNL2djYy1hc3NlbWJseX0KIGRiX2N2X3Bvc2l4bXV0ZXhlcz0ke2RiX2N2X3Bvc2l4bXV0ZXhlcz1ub30KIGRiX2N2X3VpbXV0ZXhlcz0ke2RiX2N2X3VpbXV0ZXhlcz1ub30KIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS94MzItbGludXggYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL3gzMi1saW51eAppbmRleCAzMDhkNmUyLi40YjcwNDIyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL3gzMi1saW51eAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL3gzMi1saW51eApAQCAtMSw2ICsxLDUgQEAKICMgZ2VuZXJhbAogYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTE2fQotYWNfY3Zfc2l6ZW9mX2lub190PSR7YWNfY3Zfc2l6ZW9mX2lub190PTh9CiBhY19jdl9zaXplb2ZfZGV2X3Q9JHthY19jdl9zaXplb2ZfZGV2X3Q9OH0KIGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzPSR7YWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHM9NjR9CiBhY19jdl9hbGlnbm9mX2RvdWJsZT04CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL3g4Nl82NC1saW51eCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUveDg2XzY0LWxpbnV4CmluZGV4IGViZGNmNjkuLjc3OGUyYzUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUveDg2XzY0LWxpbnV4CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9tZXRhL3NpdGUveDg2XzY0LWxpbnV4CkBAIC0yNCw3ICsyNCw2IEBACiBhY19jdl9zaXplb2Zfc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NpemVfdD04fQogYWNfY3Zfc2l6ZW9mX3VpZF90PSR7YWNfY3Zfc2l6ZW9mX3VpZF90PTR9CiBhY19jdl9zaXplb2ZfZ2lkX3Q9JHthY19jdl9zaXplb2ZfZ2lkX3Q9NH0KLWFjX2N2X3NpemVvZl9pbm9fdD0ke2FjX2N2X3NpemVvZl9pbm9fdD04fQogYWNfY3Zfc2l6ZW9mX2Rldl90PSR7YWNfY3Zfc2l6ZW9mX2Rldl90PTh9CiBhY19jdl9zaXplb2Zfdm9pZF9wPSR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcD04fQogYWNfY3Zfc3RyZXJyb3Jfcl9TVVN2Mz0ke2FjX2N2X3N0cmVycm9yX3JfU1VTdjM9bm99CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL3g4Nl82NC1saW51eC11Y2xpYmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvbWV0YS9zaXRlL3g4Nl82NC1saW51eC11Y2xpYmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkMjY5ZjcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L21ldGEvc2l0ZS94ODZfNjQtbGludXgtdWNsaWJjCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotIyBnZW5lcmFsCi1hY19jdl92YV92YWxfY29weT0ke2FjX2N2X3ZhX3ZhbF9jb3B5PW5vfQotYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPSR7YWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPXllc30KLWFjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KLWFjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9Ci1hY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99Ci1hY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQotYWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9JHthY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD1ub30KLWFjX2xpYm5ldF9oYXZlX3BhY2tldF9zb2NrZXQ9JHthY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PXllc30KLWFjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9Ci1hY19jdl9uZWVkX3RyaW89JHthY19jdl9uZWVkX3RyaW89bm99Ci1hY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9Ci1hY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQotYWNfY3Zfc2l6ZW9mX19faW50NjQ9JHthY19jdl9zaXplb2ZfX19pbnQ2ND0wfQotYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz04fQotYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTE2fQotYWNfY3Zfc2l6ZW9mX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfaW50PTh9Ci1hY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQotYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9Ci1hY19jdl9zaXplb2Zfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0yfQotYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9OH0KLWFjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTh9Ci1hY19jdl9zdHJlcnJvcl9yX1NVU3YzPSR7YWNfY3Zfc3RyZXJyb3Jfcl9TVVN2Mz1ub30KLWRiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9Ci1kYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KLWRiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KLWRiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KLWdsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQotZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQotZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KLWdsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KLWdsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPXllc30KLWdsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQotZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTQwfQotZ2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9JHtnbGliX2N2X3NpemVvZl9pbnRtYXhfdD04fQotZ2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTh9Ci1nbGliX2N2X3NpemVvZl9zaXplX3Q9JHtnbGliX2N2X3NpemVvZl9zaXplX3Q9OH0KLWdsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTh9Ci1nbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KLWdsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PXllc30KLWdsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PXllc30KLWdsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD15ZXN9Ci1nbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQotZ2xpYl9jdl92YV92YWxfY29weT0ke2dsaWJfY3ZfdmFfdmFsX2NvcHk9bm99Ci1uYW5vX2N2X2Z1bmNfcmVnZXhlY19zZWd2X2VtcHR5c3RyPSR7bmFub19jdl9mdW5jX3JlZ2V4ZWNfc2Vndl9lbXB0eXN0cj1ub30KLXNhbWJhX2N2X0hBVkVfVkFfQ09QWT0ke3NhbWJhX2N2X0hBVkVfVkFfQ09QWT15ZXN9Ci1zY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9bm99Ci1zY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9eWVzfQotc2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9eWVzfQotc2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9bm99Ci1zY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPW5vfQotc2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD0ke3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9bm99Ci1zY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPW5vfQotc2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9eWVzfQotc2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPSR7c2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPXllc30KLXV0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE1fQotCi0jIGdldHRleHQKLWFtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQotCi0jIGdsaWItMi4wCi1nbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9Ci1hY19jdl9hbGlnbm9mX2d1aW50MzI9NAotYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKLWFjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz04Ci0KLSMgbGliaWRsCi1saWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQotCi0jIE9SQml0MgotYWNfY3ZfYWxpZ25vZl9DT1JCQV9ib29sZWFuPTEKLWFjX2N2X2FsaWdub2ZfQ09SQkFfY2hhcj0xCi1hY19jdl9hbGlnbm9mX0NPUkJBX2RvdWJsZT00Ci1hY19jdl9hbGlnbm9mX0NPUkJBX2Zsb2F0PTQKLWFjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZz00Ci1hY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTgKLWFjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19sb25nPTgKLWFjX2N2X2FsaWdub2ZfQ09SQkFfb2N0ZXQ9MQotYWNfY3ZfYWxpZ25vZl9DT1JCQV9wb2ludGVyPTgKLWFjX2N2X2FsaWdub2ZfQ09SQkFfc2hvcnQ9MgotYWNfY3ZfYWxpZ25vZl9DT1JCQV9zdHJ1Y3Q9MQotYWNfY3ZfYWxpZ25vZl9DT1JCQV93Y2hhcj0yCi0KLSMgc3RhcnR1cC1ub3RpZmljYXRpb24KLWxmX2N2X3NhbmVfcmVhbGxvYz0ke2xmX2N2X3NhbmVfcmVhbGxvYz15ZXN9Ci0KLSMgbGZ0cAotbGZ0cF9jdl92YV92YWxfY29weT0ke2xmdHBfY3ZfdmFfdmFsX2NvcHk9bm99Ci0KLSMgc2xybgotc2xybl9jdl92YV92YWxfY29weT0ke3Nscm5fY3ZfdmFfdmFsX2NvcHk9bm99CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvb2UtaW5pdC1idWlsZC1lbnYgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvb2UtaW5pdC1idWlsZC1lbnYKaW5kZXggNWZlNjhkMS4uZTgxMzIzMCAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L29lLWluaXQtYnVpbGQtZW52CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9vZS1pbml0LWJ1aWxkLWVudgpAQCAtNTcsMTEgKzU3LDMgQEAKIAogWyAteiAiJEJVSUxERElSIiBdIHx8IGNkICIkQlVJTERESVIiCiAKLSMgU2h1dGRvd24gYW55IGJpdGJha2Ugc2VydmVyIGlmIHRoZSBCQlNFUlZFUiB2YXJpYWJsZSBpcyBub3Qgc2V0Ci1pZiBbIC16ICIkQkJTRVJWRVIiIF0gJiYgWyAtZiBiaXRiYWtlLmxvY2sgXTsgdGhlbgotICAgIGdyZXAgIjoiIGJpdGJha2UubG9jayA+IC9kZXYvbnVsbCAmJiBCQlNFUlZFUj0kKGNhdCBiaXRiYWtlLmxvY2spIGJpdGJha2UgLS1zdGF0dXMtb25seQotICAgIGlmIFsgJD8gPSAwIF07IHRoZW4KLSAgICAgICAgZWNobyAiU2h1dHRpbmcgZG93biBiaXRiYWtlIG1lbW9yeSByZXNpZGVudCBzZXJ2ZXIgd2l0aCBiaXRiYWtlIC1tIgotICAgICAgICBCQlNFUlZFUj0kKGNhdCBiaXRiYWtlLmxvY2spIGJpdGJha2UgLW0KLSAgICBmaQotZmkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvb2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5ZTE0MjVlLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXMKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0jIS9iaW4vc2gKLQotIyBPRSBCdWlsZCBFbnZpcm9ubWVudCBTZXR1cCBTY3JpcHQKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTEgTGludXggRm91bmRhdGlvbgotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0KLSMKLSMgTm9ybWFsbHkgdGhpcyBpcyBjYWxsZWQgYXMgJy4gLi9vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXMgPHBvcnRudW1iZXI+IDxidWlsZGRpcj4nCi0jCi0jIFRoaXMgd29ya3MgaW4gbW9zdCBzaGVsbHMgKG5vdCBkYXNoKSwgYnV0IG5vdCBhbGwgb2YgdGhlbSBwYXNzIHRoZSBhcmd1bWVudHMKLSMgd2hlbiBiZWluZyBzb3VyY2VkLiAgVG8gd29ya2Fyb3VuZCB0aGUgc2hlbGwgbGltaXRhdGlvbiB1c2UgInNldCA8cG9ydG51bWJlcj4KLSMgPGJ1aWxkZGlyPiIgcHJpb3IgdG8gc291cmNpbmcgdGhpcyBzY3JpcHQuCi0jCi1pZiBbIC16ICIkMSIgXTsgdGhlbgotICAgIGVjaG8gIk5vIHBvcnQgc3BlY2lmaWVkLCB1c2luZyBkeW5hbWljYWxseSBzZWxlY3RlZCBwb3J0IgotICAgIHBvcnQ9LTEKLWVsc2UKLSAgICBwb3J0PSQxCi0gICAgc2hpZnQKLWZpCi0KLWlmIFsgLW4gIiRCQVNIX1NPVVJDRSIgXTsgdGhlbgotICAgIFRISVNfU0NSSVBUPSRCQVNIX1NPVVJDRQotZWxpZiBbIC1uICIkWlNIX05BTUUiIF07IHRoZW4KLSAgICBUSElTX1NDUklQVD0kMAotZWxzZQotICAgIFRISVNfU0NSSVBUPSIkKHB3ZCkvb2UtaW5pdC1idWlsZC1lbnYiCi1maQotaWYgWyAtbiAiJEJCU0VSVkVSIiBdOyB0aGVuCi0gICAgdW5zZXQgQkJTRVJWRVIKLWZpCi0KLWlmIFsgLXogIiRaU0hfTkFNRSIgXSAmJiBbICIkMCIgPSAiJFRISVNfU0NSSVBUIiBdOyB0aGVuCi0gICAgZWNobyAiRXJyb3I6IFRoaXMgc2NyaXB0IG5lZWRzIHRvIGJlIHNvdXJjZWQuIFBsZWFzZSBydW4gYXMgJy4gJFRISVNfU0NSSVBUJyIKLSAgICBleGl0IDEKLWZpCi0KLWlmIFsgLXogIiRPRVJPT1QiIF07IHRoZW4KLSAgICBPRVJPT1Q9JChkaXJuYW1lICIkVEhJU19TQ1JJUFQiKQotICAgIE9FUk9PVD0kKHJlYWRsaW5rIC1mICIkT0VST09UIikKLWZpCi11bnNldCBUSElTX1NDUklQVAotCi1leHBvcnQgT0VST09UCi0uICRPRVJPT1Qvc2NyaXB0cy9vZS1idWlsZGVudi1pbnRlcm5hbCAmJgotICAgIFRFTVBMQVRFQ09ORj0iJFRFTVBMQVRFQ09ORiIgJE9FUk9PVC9zY3JpcHRzL29lLXNldHVwLWJ1aWxkZGlyIHx8IHsKLSAgICB1bnNldCBPRVJPT1QKLSAgICByZXR1cm4gMQotfQotdW5zZXQgT0VST09UCi0KLVsgLXogIiRCVUlMRERJUiIgXSB8fCBjZCAiJEJVSUxERElSIgotCi1yZXM9MQotaWYgWyAtZSBiaXRiYWtlLmxvY2sgXSAmJiBncmVwIDogYml0YmFrZS5sb2NrID4gL2Rldi9udWxsOyB0aGVuCi0gICAgQkJTRVJWRVI9JChjYXQgYml0YmFrZS5sb2NrKSBiaXRiYWtlIC0tc3RhdHVzLW9ubHkKLSAgICByZXM9JD8KLWZpCi0KLWlmIFsgJHJlcyAhPSAwIF07IHRoZW4KLSAgICBiaXRiYWtlIC0tc2VydmVyLW9ubHkgLXQgeG1scnBjIC1CIGxvY2FsaG9zdDokcG9ydAotZmkKLQotaWYgWyAkcG9ydCA9IC0xIF07IHRoZW4KLSAgICBleHBvcnQgQkJTRVJWRVI9bG9jYWxob3N0Oi0xCi0gICAgZWNobyAiQml0YmFrZSBzZXJ2ZXIgc3RhcnRlZCBvbiBkZW1hbmQgYXMgbmVlZGVkLCB1c2UgYml0YmFrZSAtbSB0byBzaHV0IGl0IGRvd24iCi1lbHNlCi0gICAgZXhwb3J0IEJCU0VSVkVSPSQoY2F0IGJpdGJha2UubG9jaykKLQotICAgIGlmIFsgJHJlcyA9IDAgXTsgdGhlbgotICAgICAgICBlY2hvICJVc2luZyBleGlzdGluZyBiaXRiYWtlIHNlcnZlciBhdDogJEJCU0VSVkVSLCB1c2UgYml0YmFrZSAtbSB0byBzaHV0IGl0IGRvd24iCi0gICAgZWxzZQotICAgICAgICBlY2hvICJCaXRiYWtlIHNlcnZlciBzdGFydGVkIGF0OiAkQkJTRVJWRVIsIHVzZSBiaXRiYWtlIC1tIHRvIHNodXQgaXQgZG93biIKLSAgICBmaQotZmkKLXVuc2V0IHBvcnQgcmVzCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9idWlsZGhpc3RvcnktZGlmZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2J1aWxkaGlzdG9yeS1kaWZmCmluZGV4IGRkOTc0NWUuLmU3OWNiN2EgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2J1aWxkaGlzdG9yeS1kaWZmCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2J1aWxkaGlzdG9yeS1kaWZmCkBAIC03LDcgKzcsNyBAQAogCiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKLWltcG9ydCBvcHRwYXJzZQoraW1wb3J0IGFyZ3BhcnNlCiBmcm9tIGRpc3R1dGlscy52ZXJzaW9uIGltcG9ydCBMb29zZVZlcnNpb24KIAogIyBFbnN1cmUgUHl0aG9uR2l0IGlzIGluc3RhbGxlZCAoYnVpbGRoaXN0b3J5X2FuYWx5c2lzIG5lZWRzIGl0KQpAQCAtMTcsNDcgKzE3LDcwIEBACiAgICAgcHJpbnQoIlBsZWFzZSBpbnN0YWxsIEdpdFB5dGhvbiAocHl0aG9uMy1naXQpIDAuMy40IG9yIGxhdGVyIGluIG9yZGVyIHRvIHVzZSB0aGlzIHNjcmlwdCIpCiAgICAgc3lzLmV4aXQoMSkKIAorZGVmIGdldF9hcmdzX3BhcnNlcigpOgorICAgIGRlc2NyaXB0aW9uID0gIlJlcG9ydHMgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZXMgaW4gdGhlIGJ1aWxkaGlzdG9yeSByZXBvc2l0b3J5LiIKKworICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPWRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlPSIiIgorICAgICUocHJvZylzIFtvcHRpb25zXSBbZnJvbS1yZXZpc2lvbiBbdG8tcmV2aXNpb25dXQorICAgIChpZiBub3Qgc3BlY2lmaWVkLCBmcm9tLXJldmlzaW9uIGRlZmF1bHRzIHRvIGJ1aWxkLW1pbnVzLTEsIGFuZCB0by1yZXZpc2lvbiBkZWZhdWx0cyB0byBIRUFEKSIiIikKKworICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1wJywgJy0tYnVpbGRoaXN0b3J5LWRpcicsCisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J2J1aWxkaGlzdG9yeV9kaXInLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nYnVpbGRoaXN0b3J5LycsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJTcGVjaWZ5IHBhdGggdG8gYnVpbGRoaXN0b3J5IGRpcmVjdG9yeSAoZGVmYXVsdHMgdG8gYnVpbGRoaXN0b3J5LyB1bmRlciBjd2QpIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdicsICctLXJlcG9ydC12ZXJzaW9uJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdyZXBvcnRfdmVyJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJSZXBvcnQgY2hhbmdlcyBpbiBQS0dFL1BLR1YvUEtHUiBldmVuIHdoZW4gdGhlIHZhbHVlcyBhcmUgc3RpbGwgdGhlIGRlZmF1bHQgKFBFL1BWL1BSKSIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWEnLCAnLS1yZXBvcnQtYWxsJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdyZXBvcnRfYWxsJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9J0ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlJlcG9ydCBhbGwgY2hhbmdlcywgbm90IGp1c3QgdGhlIGRlZmF1bHQgc2lnbmlmaWNhbnQgb25lcyIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXMnLCAnLS0tc2lnbmF0dXJlcycsCisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nc2lncycsCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUmVwb3J0IGxpc3Qgb2Ygc2lnbmF0dXJlcyBkaWZmZXJpbmcgaW5zdGVhZCBvZiBvdXRwdXQiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1TJywgJy0tc2lnbmF0dXJlcy13aXRoLWRpZmYnLAorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3NpZ3NkaWZmJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJSZXBvcnQgb24gYWN0dWFsIHNpZ25hdHVyZSBkaWZmZXJlbmNlcyBpbnN0ZWFkIG9mIG91dHB1dCAocmVxdWlyZXMgc2lnbmF0dXJlIGRhdGEgdG8gaGF2ZSBiZWVuIGdlbmVyYXRlZCwgZWl0aGVyIGJ5IHJ1bm5pbmcgdGhlIGFjdHVhbCB0YXNrcyBvciB1c2luZyBiaXRiYWtlIC1TKSIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWUnLCAnLS1leGNsdWRlLXBhdGgnLAorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdhcHBlbmQnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRXhjbHVkZSBwYXRoIGZyb20gdGhlIG91dHB1dCIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgncmV2aXNpb25zJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgPSBbJ2J1aWxkLW1pbnVzLTEnLCAnSEVBRCddLAorICAgICAgICAgICAgICAgICAgICAgICAgbmFyZ3M9JyonLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD1hcmdwYXJzZS5TVVBQUkVTUykKKyAgICByZXR1cm4gcGFyc2VyCisKIGRlZiBtYWluKCk6Ci0gICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAotICAgICAgICBkZXNjcmlwdGlvbiA9ICJSZXBvcnRzIHNpZ25pZmljYW50IGRpZmZlcmVuY2VzIGluIHRoZSBidWlsZGhpc3RvcnkgcmVwb3NpdG9yeS4iLAotICAgICAgICB1c2FnZSA9ICIiIgotICAgICVwcm9nIFtvcHRpb25zXSBbZnJvbS1yZXZpc2lvbiBbdG8tcmV2aXNpb25dXQotKGlmIG5vdCBzcGVjaWZpZWQsIGZyb20tcmV2aXNpb24gZGVmYXVsdHMgdG8gYnVpbGQtbWludXMtMSwgYW5kIHRvLXJldmlzaW9uIGRlZmF1bHRzIHRvIEhFQUQpIiIiKQogCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oIi1wIiwgIi0tYnVpbGRoaXN0b3J5LWRpciIsCi0gICAgICAgICAgICBoZWxwID0gIlNwZWNpZnkgcGF0aCB0byBidWlsZGhpc3RvcnkgZGlyZWN0b3J5IChkZWZhdWx0cyB0byBidWlsZGhpc3RvcnkvIHVuZGVyIGN3ZCkiLAotICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9ImJ1aWxkaGlzdG9yeV9kaXIiLCBkZWZhdWx0PSdidWlsZGhpc3RvcnkvJykKLSAgICBwYXJzZXIuYWRkX29wdGlvbigiLXYiLCAiLS1yZXBvcnQtdmVyc2lvbiIsCi0gICAgICAgICAgICBoZWxwID0gIlJlcG9ydCBjaGFuZ2VzIGluIFBLR0UvUEtHVi9QS0dSIGV2ZW4gd2hlbiB0aGUgdmFsdWVzIGFyZSBzdGlsbCB0aGUgZGVmYXVsdCAoUEUvUFYvUFIpIiwKLSAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InJlcG9ydF92ZXIiLCBkZWZhdWx0PUZhbHNlKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYSIsICItLXJlcG9ydC1hbGwiLAotICAgICAgICAgICAgaGVscCA9ICJSZXBvcnQgYWxsIGNoYW5nZXMsIG5vdCBqdXN0IHRoZSBkZWZhdWx0IHNpZ25pZmljYW50IG9uZXMiLAotICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0icmVwb3J0X2FsbCIsIGRlZmF1bHQ9RmFsc2UpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oIi1zIiwgIi0tc2lnbmF0dXJlcyIsCi0gICAgICAgICAgICBoZWxwID0gIlJlcG9ydCBsaXN0IG9mIHNpZ25hdHVyZXMgZGlmZmVyaW5nIGluc3RlYWQgb2Ygb3V0cHV0IiwKLSAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InNpZ3MiLCBkZWZhdWx0PUZhbHNlKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCItUyIsICItLXNpZ25hdHVyZXMtd2l0aC1kaWZmIiwKLSAgICAgICAgICAgIGhlbHAgPSAiUmVwb3J0IG9uIGFjdHVhbCBzaWduYXR1cmUgZGlmZmVyZW5jZXMgaW5zdGVhZCBvZiBvdXRwdXQgKHJlcXVpcmVzIHNpZ25hdHVyZSBkYXRhIHRvIGhhdmUgYmVlbiBnZW5lcmF0ZWQsIGVpdGhlciBieSBydW5uaW5nIHRoZSBhY3R1YWwgdGFza3Mgb3IgdXNpbmcgYml0YmFrZSAtUykiLAotICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0ic2lnc2RpZmYiLCBkZWZhdWx0PUZhbHNlKQotCi0gICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHN5cy5hcmd2KQotCi0gICAgaWYgbGVuKGFyZ3MpID4gMzoKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnSW52YWxpZCBhcmd1bWVudChzKSBzcGVjaWZpZWQ6ICVzXG5cbicgJSAnICcuam9pbihhcmdzWzM6XSkpCi0gICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKLSAgICAgICAgc3lzLmV4aXQoMSkKKyAgICBwYXJzZXIgPSBnZXRfYXJnc19wYXJzZXIoKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCiAKICAgICBpZiBMb29zZVZlcnNpb24oZ2l0Ll9fdmVyc2lvbl9fKSA8ICcwLjMuMSc6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlZlcnNpb24gb2YgR2l0UHl0aG9uIGlzIHRvbyBvbGQsIHBsZWFzZSBpbnN0YWxsIEdpdFB5dGhvbiAocHl0aG9uLWdpdCkgMC4zLjEgb3IgbGF0ZXIgaW4gb3JkZXIgdG8gdXNlIHRoaXMgc2NyaXB0XG4iKQogICAgICAgICBzeXMuZXhpdCgxKQogCi0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9wdGlvbnMuYnVpbGRoaXN0b3J5X2Rpcik6Ci0gICAgICAgIGlmIG9wdGlvbnMuYnVpbGRoaXN0b3J5X2RpciA9PSAnYnVpbGRoaXN0b3J5Lyc6CisgICAgaWYgbGVuKGFyZ3MucmV2aXNpb25zKSA+IDI6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0ludmFsaWQgYXJndW1lbnQocykgc3BlY2lmaWVkOiAlc1xuXG4nICUgJyAnLmpvaW4oYXJncy5yZXZpc2lvbnNbMjpdKSkKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorCisgICAgICAgIHN5cy5leGl0KDEpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGFyZ3MuYnVpbGRoaXN0b3J5X2Rpcik6CisgICAgICAgIGlmIGFyZ3MuYnVpbGRoaXN0b3J5X2RpciA9PSAnYnVpbGRoaXN0b3J5Lyc6CiAgICAgICAgICAgICBjd2QgPSBvcy5nZXRjd2QoKQogICAgICAgICAgICAgaWYgb3MucGF0aC5iYXNlbmFtZShjd2QpID09ICdidWlsZGhpc3RvcnknOgotICAgICAgICAgICAgICAgIG9wdGlvbnMuYnVpbGRoaXN0b3J5X2RpciA9IGN3ZAotICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcHRpb25zLmJ1aWxkaGlzdG9yeV9kaXIpOgotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdCdWlsZGhpc3RvcnkgZGlyZWN0b3J5ICIlcyIgZG9lcyBub3QgZXhpc3RcblxuJyAlIG9wdGlvbnMuYnVpbGRoaXN0b3J5X2RpcikKKyAgICAgICAgICAgICAgICBhcmdzLmJ1aWxkaGlzdG9yeV9kaXIgPSBjd2QKKworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcmdzLmJ1aWxkaGlzdG9yeV9kaXIpOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdCdWlsZGhpc3RvcnkgZGlyZWN0b3J5ICIlcyIgZG9lcyBub3QgZXhpc3RcblxuJyAlIGFyZ3MuYnVpbGRoaXN0b3J5X2RpcikKICAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQogICAgICAgICBzeXMuZXhpdCgxKQogCkBAIC03MSwzMCArOTQsMjkgQEAKICAgICBzY3JpcHRwYXRoLmFkZF9vZV9saWJfcGF0aCgpCiAgICAgIyBTZXQgcGF0aCB0byBiaXRiYWtlIGxpYiBkaXIgc28gdGhlIGJ1aWxkaGlzdG9yeV9hbmFseXNpcyBtb2R1bGUgY2FuIGxvYWQgYmIudXRpbHMKICAgICBiaXRiYWtlcGF0aCA9IHNjcmlwdHBhdGguYWRkX2JpdGJha2VfbGliX3BhdGgoKQorCiAgICAgaWYgbm90IGJpdGJha2VwYXRoOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJVbmFibGUgdG8gZmluZCBiaXRiYWtlIGJ5IHNlYXJjaGluZyBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoaXMgc2NyaXB0IG9yIFBBVEhcbiIpCiAgICAgICAgIHN5cy5leGl0KDEpCiAKLSAgICBpbXBvcnQgb2UuYnVpbGRoaXN0b3J5X2FuYWx5c2lzCi0KLSAgICBmcm9tcmV2ID0gJ2J1aWxkLW1pbnVzLTEnCi0gICAgdG9yZXYgPSAnSEVBRCcKLSAgICBpZiBsZW4oYXJncykgPiAxOgotICAgICAgICBpZiBsZW4oYXJncykgPT0gMiBhbmQgJy4uJyBpbiBhcmdzWzFdOgotICAgICAgICAgICAgcmV2cyA9IGFyZ3NbMV0uc3BsaXQoJy4uJykKLSAgICAgICAgICAgIGZyb21yZXYgPSByZXZzWzBdCi0gICAgICAgICAgICBpZiByZXZzWzFdOgotICAgICAgICAgICAgICAgIHRvcmV2ID0gcmV2c1sxXQorICAgIGlmIGxlbihhcmdzLnJldmlzaW9ucykgPT0gMToKKyAgICAgICAgaWYgJy4uJyAgaW4gYXJncy5yZXZpc2lvbnNbMF06CisgICAgICAgICAgICBmcm9tcmV2LCB0b3JldiA9IGFyZ3MucmV2aXNpb25zWzBdLnNwbGl0KCcuLicpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmcm9tcmV2ID0gYXJnc1sxXQotICAgIGlmIGxlbihhcmdzKSA+IDI6Ci0gICAgICAgIHRvcmV2ID0gYXJnc1syXQorICAgICAgICAgICAgZnJvbXJldiwgdG9yZXYgPSBhcmdzLnJldmlzaW9uc1swXSwgJ0hFQUQnCisgICAgZWxpZiBsZW4oYXJncy5yZXZpc2lvbnMpID09IDI6CisgICAgICAgIGZyb21yZXYsIHRvcmV2ID0gYXJncy5yZXZpc2lvbnMKKworICAgIGZyb20gb2UuYnVpbGRoaXN0b3J5X2FuYWx5c2lzIGltcG9ydCBwcm9jZXNzX2NoYW5nZXMKIAogICAgIGltcG9ydCBnaXRkYgorCiAgICAgdHJ5OgotICAgICAgICBjaGFuZ2VzID0gb2UuYnVpbGRoaXN0b3J5X2FuYWx5c2lzLnByb2Nlc3NfY2hhbmdlcyhvcHRpb25zLmJ1aWxkaGlzdG9yeV9kaXIsIGZyb21yZXYsIHRvcmV2LCBvcHRpb25zLnJlcG9ydF9hbGwsIG9wdGlvbnMucmVwb3J0X3Zlciwgb3B0aW9ucy5zaWdzLCBvcHRpb25zLnNpZ3NkaWZmKQorICAgICAgICBjaGFuZ2VzID0gcHJvY2Vzc19jaGFuZ2VzKGFyZ3MuYnVpbGRoaXN0b3J5X2RpciwgZnJvbXJldiwgdG9yZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5yZXBvcnRfYWxsLCBhcmdzLnJlcG9ydF92ZXIsIGFyZ3Muc2lncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnNpZ3NkaWZmLCBhcmdzLmV4Y2x1ZGVfcGF0aCkKICAgICBleGNlcHQgZ2l0ZGIuZXhjLkJhZE9iamVjdCBhcyBlOgotICAgICAgICBpZiBsZW4oYXJncykgPT0gMToKKyAgICAgICAgaWYgbm90IGFyZ3MucmV2aXNpb25zOgogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiVW5hYmxlIHRvIGZpbmQgcHJldmlvdXMgYnVpbGQgcmV2aXNpb24gaW4gYnVpbGRoaXN0b3J5IHJlcG9zaXRvcnlcblxuIikKICAgICAgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKICAgICAgICAgZWxzZToKQEAgLTEwMiwxMCArMTI0LDExIEBACiAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICBmb3IgY2hnIGluIGNoYW5nZXM6Ci0gICAgICAgIHByaW50KCclcycgJSBjaGcpCisgICAgICAgIG91dCA9IHN0cihjaGcpCisgICAgICAgIGlmIG91dDoKKyAgICAgICAgICAgIHByaW50KG91dCkKIAogICAgIHN5cy5leGl0KDApCiAKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBtYWluKCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2J1aWxkc3RhdHMtZGlmZiBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2J1aWxkc3RhdHMtZGlmZgppbmRleCBhZGViYTQ0Li5hMTI4ZGQzIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9idWlsZHN0YXRzLWRpZmYKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvYnVpbGRzdGF0cy1kaWZmCkBAIC0xNSwxNSArMTUsMTggQEAKICMKIGltcG9ydCBhcmdwYXJzZQogaW1wb3J0IGdsb2IKLWltcG9ydCBqc29uCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG1hdGgKIGltcG9ydCBvcwotaW1wb3J0IHJlCiBpbXBvcnQgc3lzCi1mcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCiBmcm9tIG9wZXJhdG9yIGltcG9ydCBhdHRyZ2V0dGVyCiAKKyMgSW1wb3J0IG9lIGxpYnMKK3NjcmlwdHNfcGF0aCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSkKK3N5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmpvaW4oc2NyaXB0c19wYXRoLCAnbGliJykpCitmcm9tIGJ1aWxkc3RhdHMgaW1wb3J0IEJ1aWxkU3RhdHMsIGRpZmZfYnVpbGRzdGF0cywgdGFza2RpZmZfZmllbGRzLCBCU1ZlckRpZmYKKworCiAjIFNldHVwIGxvZ2dpbmcKIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2luZy5JTkZPLCBmb3JtYXQ9IiUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIikKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKQEAgLTM0LDE4MCArMzcsMTYgQEAKICAgICBwYXNzCiAKIAotdGFza2RpZmZfZmllbGRzID0gKCdwa2cnLCAncGtnX29wJywgJ3Rhc2snLCAndGFza19vcCcsICd2YWx1ZTEnLCAndmFsdWUyJywKLSAgICAgICAgICAgICAgICAgICAnYWJzZGlmZicsICdyZWxkaWZmJykKLVRhc2tEaWZmID0gbmFtZWR0dXBsZSgnVGFza0RpZmYnLCAnICcuam9pbih0YXNrZGlmZl9maWVsZHMpKQotCi0KLWNsYXNzIEJTVGFzayhkaWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgc2VsZlsnc3RhcnRfdGltZSddID0gTm9uZQotICAgICAgICBzZWxmWydlbGFwc2VkX3RpbWUnXSA9IE5vbmUKLSAgICAgICAgc2VsZlsnc3RhdHVzJ10gPSBOb25lCi0gICAgICAgIHNlbGZbJ2lvc3RhdCddID0ge30KLSAgICAgICAgc2VsZlsncnVzYWdlJ10gPSB7fQotICAgICAgICBzZWxmWydjaGlsZF9ydXNhZ2UnXSA9IHt9Ci0gICAgICAgIHN1cGVyKEJTVGFzaywgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIGNwdXRpbWUoc2VsZik6Ci0gICAgICAgICIiIlN1bSBvZiB1c2VyIGFuZCBzeXN0ZW0gdGltZSB0YWtlbiBieSB0aGUgdGFzayIiIgotICAgICAgICByZXR1cm4gc2VsZlsncnVzYWdlJ11bJ3J1X3N0aW1lJ10gKyBzZWxmWydydXNhZ2UnXVsncnVfdXRpbWUnXSArIFwKLSAgICAgICAgICAgICAgIHNlbGZbJ2NoaWxkX3J1c2FnZSddWydydV9zdGltZSddICsgc2VsZlsnY2hpbGRfcnVzYWdlJ11bJ3J1X3V0aW1lJ10KLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiB3YWxsdGltZShzZWxmKToKLSAgICAgICAgIiIiRWxhcHNlZCB3YWxsIGNsb2NrIHRpbWUiIiIKLSAgICAgICAgcmV0dXJuIHNlbGZbJ2VsYXBzZWRfdGltZSddCi0KLSAgICBAcHJvcGVydHkKLSAgICBkZWYgcmVhZF9ieXRlcyhzZWxmKToKLSAgICAgICAgIiIiQnl0ZXMgcmVhZCBmcm9tIHRoZSBibG9jayBsYXllciIiIgotICAgICAgICByZXR1cm4gc2VsZlsnaW9zdGF0J11bJ3JlYWRfYnl0ZXMnXQotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIHdyaXRlX2J5dGVzKHNlbGYpOgotICAgICAgICAiIiJCeXRlcyB3cml0dGVuIHRvIHRoZSBibG9jayBsYXllciIiIgotICAgICAgICByZXR1cm4gc2VsZlsnaW9zdGF0J11bJ3dyaXRlX2J5dGVzJ10KLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiByZWFkX29wcyhzZWxmKToKLSAgICAgICAgIiIiTnVtYmVyIG9mIHJlYWQgb3BlcmF0aW9ucyBvbiB0aGUgYmxvY2sgbGF5ZXIiIiIKLSAgICAgICAgcmV0dXJuIHNlbGZbJ3J1c2FnZSddWydydV9pbmJsb2NrJ10gKyBzZWxmWydjaGlsZF9ydXNhZ2UnXVsncnVfaW5ibG9jayddCi0KLSAgICBAcHJvcGVydHkKLSAgICBkZWYgd3JpdGVfb3BzKHNlbGYpOgotICAgICAgICAiIiJOdW1iZXIgb2Ygd3JpdGUgb3BlcmF0aW9ucyBvbiB0aGUgYmxvY2sgbGF5ZXIiIiIKLSAgICAgICAgcmV0dXJuIHNlbGZbJ3J1c2FnZSddWydydV9vdWJsb2NrJ10gKyBzZWxmWydjaGlsZF9ydXNhZ2UnXVsncnVfb3VibG9jayddCi0KLQotZGVmIHJlYWRfYnVpbGRzdGF0c19maWxlKGJ1aWxkc3RhdF9maWxlKToKLSAgICAiIiJDb252ZXJ0IGJ1aWxkc3RhdCB0ZXh0IGZpbGUgaW50byBkaWN0L2pzb24iIiIKLSAgICBic190YXNrID0gQlNUYXNrKCkKLSAgICBsb2cuZGVidWcoIlJlYWRpbmcgdGFzayBidWlsZHN0YXRzIGZyb20gJXMiLCBidWlsZHN0YXRfZmlsZSkKLSAgICB3aXRoIG9wZW4oYnVpbGRzdGF0X2ZpbGUpIGFzIGZvYmo6Ci0gICAgICAgIGZvciBsaW5lIGluIGZvYmoucmVhZGxpbmVzKCk6Ci0gICAgICAgICAgICBrZXksIHZhbCA9IGxpbmUuc3BsaXQoJzonLCAxKQotICAgICAgICAgICAgdmFsID0gdmFsLnN0cmlwKCkKLSAgICAgICAgICAgIGlmIGtleSA9PSAnU3RhcnRlZCc6Ci0gICAgICAgICAgICAgICAgc3RhcnRfdGltZSA9IGZsb2F0KHZhbCkKLSAgICAgICAgICAgICAgICBic190YXNrWydzdGFydF90aW1lJ10gPSBzdGFydF90aW1lCi0gICAgICAgICAgICBlbGlmIGtleSA9PSAnRW5kZWQnOgotICAgICAgICAgICAgICAgIGVuZF90aW1lID0gZmxvYXQodmFsKQotICAgICAgICAgICAgZWxpZiBrZXkuc3RhcnRzd2l0aCgnSU8gJyk6Ci0gICAgICAgICAgICAgICAgc3BsaXQgPSBrZXkuc3BsaXQoKQotICAgICAgICAgICAgICAgIGJzX3Rhc2tbJ2lvc3RhdCddW3NwbGl0WzFdXSA9IGludCh2YWwpCi0gICAgICAgICAgICBlbGlmIGtleS5maW5kKCdydXNhZ2UnKSA+PSAwOgotICAgICAgICAgICAgICAgIHNwbGl0ID0ga2V5LnNwbGl0KCkKLSAgICAgICAgICAgICAgICBydV9rZXkgPSBzcGxpdFstMV0KLSAgICAgICAgICAgICAgICBpZiBydV9rZXkgaW4gKCdydV9zdGltZScsICdydV91dGltZScpOgotICAgICAgICAgICAgICAgICAgICB2YWwgPSBmbG9hdCh2YWwpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgdmFsID0gaW50KHZhbCkKLSAgICAgICAgICAgICAgICBydV90eXBlID0gJ3J1c2FnZScgaWYgc3BsaXRbMF0gPT0gJ3J1c2FnZScgZWxzZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjaGlsZF9ydXNhZ2UnCi0gICAgICAgICAgICAgICAgYnNfdGFza1tydV90eXBlXVtydV9rZXldID0gdmFsCi0gICAgICAgICAgICBlbGlmIGtleSA9PSAnU3RhdHVzJzoKLSAgICAgICAgICAgICAgICBic190YXNrWydzdGF0dXMnXSA9IHZhbAotICAgIGJzX3Rhc2tbJ2VsYXBzZWRfdGltZSddID0gZW5kX3RpbWUgLSBzdGFydF90aW1lCi0gICAgcmV0dXJuIGJzX3Rhc2sKLQotCi1kZWYgcmVhZF9idWlsZHN0YXRzX2Rpcihic19kaXIpOgotICAgICIiIlJlYWQgYnVpbGRzdGF0cyBkaXJlY3RvcnkiIiIKLSAgICBkZWYgc3BsaXRfbmV2cihuZXZyKToKLSAgICAgICAgIiIiU3BsaXQgbmFtZSBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiBmcm9tIHJlY2lwZSAibmV2ciIgc3RyaW5nIiIiCi0gICAgICAgIG5fZV92LCByZXZpc2lvbiA9IG5ldnIucnNwbGl0KCctJywgMSkKLSAgICAgICAgbWF0Y2ggPSByZS5tYXRjaChyJ14oP1A8bmFtZT5cUyspLSgoP1A8ZXBvY2g+WzAtOV17MSw1fSlfKT8oP1A8dmVyc2lvbj5bMC05XVxTKikkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICBuX2VfdikKLSAgICAgICAgaWYgbm90IG1hdGNoOgotICAgICAgICAgICAgIyBJZiB3ZSdyZSBub3QgYWJsZSB0byBwYXJzZSBhIHZlcnNpb24gc3RhcnRpbmcgd2l0aCBhIG51bWJlciwganVzdAotICAgICAgICAgICAgIyB0YWtlIHRoZSBwYXJ0IGFmdGVyIGxhc3QgZGFzaAotICAgICAgICAgICAgbWF0Y2ggPSByZS5tYXRjaChyJ14oP1A8bmFtZT5cUyspLSgoP1A8ZXBvY2g+WzAtOV17MSw1fSlfKT8oP1A8dmVyc2lvbj5bXi1dKykkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9lX3YpCi0gICAgICAgIG5hbWUgPSBtYXRjaC5ncm91cCgnbmFtZScpCi0gICAgICAgIHZlcnNpb24gPSBtYXRjaC5ncm91cCgndmVyc2lvbicpCi0gICAgICAgIGVwb2NoID0gbWF0Y2guZ3JvdXAoJ2Vwb2NoJykKLSAgICAgICAgcmV0dXJuIG5hbWUsIGVwb2NoLCB2ZXJzaW9uLCByZXZpc2lvbgotCi0gICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihic19kaXIsICdidWlsZF9zdGF0cycpKToKLSAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3IoInt9IGRvZXMgbm90IGxvb2sgbGlrZSBhIGJ1aWxkc3RhdHMgZGlyZWN0b3J5Ii5mb3JtYXQoYnNfZGlyKSkKLQotICAgIGxvZy5kZWJ1ZygiUmVhZGluZyBidWlsZHN0YXRzIGRpcmVjdG9yeSAlcyIsIGJzX2RpcikKLQotICAgIGJ1aWxkc3RhdHMgPSB7fQotICAgIHN1YmRpcnMgPSBvcy5saXN0ZGlyKGJzX2RpcikKLSAgICBmb3IgZGlybmFtZSBpbiBzdWJkaXJzOgotICAgICAgICByZWNpcGVfZGlyID0gb3MucGF0aC5qb2luKGJzX2RpciwgZGlybmFtZSkKLSAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIocmVjaXBlX2Rpcik6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBuYW1lLCBlcG9jaCwgdmVyc2lvbiwgcmV2aXNpb24gPSBzcGxpdF9uZXZyKGRpcm5hbWUpCi0gICAgICAgIHJlY2lwZV9icyA9IHsnbmV2cic6IGRpcm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAnbmFtZSc6IG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAnZXBvY2gnOiBlcG9jaCwKLSAgICAgICAgICAgICAgICAgICAgICd2ZXJzaW9uJzogdmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICdyZXZpc2lvbic6IHJldmlzaW9uLAotICAgICAgICAgICAgICAgICAgICAgJ3Rhc2tzJzoge319Ci0gICAgICAgIGZvciB0YXNrIGluIG9zLmxpc3RkaXIocmVjaXBlX2Rpcik6Ci0gICAgICAgICAgICByZWNpcGVfYnNbJ3Rhc2tzJ11bdGFza10gPSBbcmVhZF9idWlsZHN0YXRzX2ZpbGUoCi0gICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihyZWNpcGVfZGlyLCB0YXNrKSldCi0gICAgICAgIGlmIG5hbWUgaW4gYnVpbGRzdGF0czoKLSAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKCJDYW5ub3QgaGFuZGxlIG11bHRpcGxlIHZlcnNpb25zIG9mIHRoZSBzYW1lICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlICh7fSkiLmZvcm1hdChuYW1lKSkKLSAgICAgICAgYnVpbGRzdGF0c1tuYW1lXSA9IHJlY2lwZV9icwotCi0gICAgcmV0dXJuIGJ1aWxkc3RhdHMKLQotCi1kZWYgYnNfYXBwZW5kKGRzdCwgc3JjKToKLSAgICAiIiJBcHBlbmQgZGF0YSBmcm9tIGFub3RoZXIgYnVpbGRzdGF0cyIiIgotICAgIGlmIHNldChkc3Qua2V5cygpKSAhPSBzZXQoc3JjLmtleXMoKSk6Ci0gICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKCJSZWZ1c2luZyB0byBqb2luIGJ1aWxkc3RhdHMsIHNldCBvZiBwYWNrYWdlcyBpcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJkaWZmZXJlbnQiKQotICAgIGZvciBwa2csIGRhdGEgaW4gZHN0Lml0ZW1zKCk6Ci0gICAgICAgIGlmIGRhdGFbJ25ldnInXSAhPSBzcmNbcGtnXVsnbmV2ciddOgotICAgICAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3IoIlJlZnVzaW5nIHRvIGpvaW4gYnVpbGRzdGF0cywgcGFja2FnZSB2ZXJzaW9uICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaWZmZXJzOiB7fSB2cy4ge30iLmZvcm1hdChkYXRhWyduZXZyJ10sIHNyY1twa2ddWyduZXZyJ10pKQotICAgICAgICBpZiBzZXQoZGF0YVsndGFza3MnXS5rZXlzKCkpICE9IHNldChzcmNbcGtnXVsndGFza3MnXS5rZXlzKCkpOgotICAgICAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3IoIlJlZnVzaW5nIHRvIGpvaW4gYnVpbGRzdGF0cywgc2V0IG9mIHRhc2tzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiB7fSBkaWZmZXIiLmZvcm1hdChwa2cpKQotICAgICAgICBmb3IgdGFza25hbWUsIHRhc2tkYXRhIGluIGRhdGFbJ3Rhc2tzJ10uaXRlbXMoKToKLSAgICAgICAgICAgIHRhc2tkYXRhLmV4dGVuZChzcmNbcGtnXVsndGFza3MnXVt0YXNrbmFtZV0pCi0KLQotZGVmIHJlYWRfYnVpbGRzdGF0c19qc29uKHBhdGgpOgotICAgICIiIlJlYWQgYnVpbGRzdGF0cyBmcm9tIEpTT04gZmlsZSIiIgotICAgIGJ1aWxkc3RhdHMgPSB7fQotICAgIHdpdGggb3BlbihwYXRoKSBhcyBmb2JqOgotICAgICAgICBic19qc29uID0ganNvbi5sb2FkKGZvYmopCi0gICAgZm9yIHJlY2lwZV9icyBpbiBic19qc29uOgotICAgICAgICBpZiByZWNpcGVfYnNbJ25hbWUnXSBpbiBidWlsZHN0YXRzOgotICAgICAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3IoIkNhbm5vdCBoYW5kbGUgbXVsdGlwbGUgdmVyc2lvbnMgb2YgdGhlIHNhbWUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhY2thZ2UgKHt9KSIuZm9ybWF0KHJlY2lwZV9ic1snbmFtZSddKSkKLQotICAgICAgICBpZiByZWNpcGVfYnNbJ2Vwb2NoJ10gaXMgTm9uZToKLSAgICAgICAgICAgIHJlY2lwZV9ic1snbmV2ciddID0gInt9LXt9LXt9Ii5mb3JtYXQocmVjaXBlX2JzWyduYW1lJ10sIHJlY2lwZV9ic1sndmVyc2lvbiddLCByZWNpcGVfYnNbJ3JldmlzaW9uJ10pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZWNpcGVfYnNbJ25ldnInXSA9ICJ7fS17fV97fS17fSIuZm9ybWF0KHJlY2lwZV9ic1snbmFtZSddLCByZWNpcGVfYnNbJ2Vwb2NoJ10sIHJlY2lwZV9ic1sndmVyc2lvbiddLCByZWNpcGVfYnNbJ3JldmlzaW9uJ10pCi0KLSAgICAgICAgZm9yIHRhc2ssIGRhdGEgaW4gcmVjaXBlX2JzWyd0YXNrcyddLmNvcHkoKS5pdGVtcygpOgotICAgICAgICAgICAgcmVjaXBlX2JzWyd0YXNrcyddW3Rhc2tdID0gW0JTVGFzayhkYXRhKV0KLQotICAgICAgICBidWlsZHN0YXRzW3JlY2lwZV9ic1snbmFtZSddXSA9IHJlY2lwZV9icwotCi0gICAgcmV0dXJuIGJ1aWxkc3RhdHMKLQotCiBkZWYgcmVhZF9idWlsZHN0YXRzKHBhdGgsIG11bHRpKToKICAgICAiIiJSZWFkIGJ1aWxkc3RhdHMiIiIKICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6CiAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKCJObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5OiB7fSIuZm9ybWF0KHBhdGgpKQogCiAgICAgaWYgb3MucGF0aC5pc2ZpbGUocGF0aCk6Ci0gICAgICAgIHJldHVybiByZWFkX2J1aWxkc3RhdHNfanNvbihwYXRoKQorICAgICAgICByZXR1cm4gQnVpbGRTdGF0cy5mcm9tX2ZpbGVfanNvbihwYXRoKQogCiAgICAgaWYgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHBhdGgsICdidWlsZF9zdGF0cycpKToKLSAgICAgICAgcmV0dXJuIHJlYWRfYnVpbGRzdGF0c19kaXIocGF0aCkKKyAgICAgICAgcmV0dXJuIEJ1aWxkU3RhdHMuZnJvbV9kaXIocGF0aCkKIAogICAgICMgSGFuZGxlIGEgbm9uLWJ1aWxkc3RhdCBkaXJlY3RvcnkKICAgICBzdWJwYXRocyA9IHNvcnRlZChnbG9iLmdsb2IocGF0aCArICcvKicpKQpAQCAtMjIyLDg4ICs2MSw2MyBAQAogICAgIGJzID0gTm9uZQogICAgIGZvciBzdWJwYXRoIGluIHN1YnBhdGhzOgogICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShzdWJwYXRoKToKLSAgICAgICAgICAgIHRtcGJzID0gcmVhZF9idWlsZHN0YXRzX2pzb24oc3VicGF0aCkKKyAgICAgICAgICAgIF9icyA9IEJ1aWxkU3RhdHMuZnJvbV9maWxlX2pzb24oc3VicGF0aCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRtcGJzID0gcmVhZF9idWlsZHN0YXRzX2RpcihzdWJwYXRoKQotICAgICAgICBpZiBub3QgYnM6Ci0gICAgICAgICAgICBicyA9IHRtcGJzCisgICAgICAgICAgICBfYnMgPSBCdWlsZFN0YXRzLmZyb21fZGlyKHN1YnBhdGgpCisgICAgICAgIGlmIGJzIGlzIE5vbmU6CisgICAgICAgICAgICBicyA9IF9icwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbG9nLmRlYnVnKCJKb2luaW5nIGJ1aWxkc3RhdHMiKQotICAgICAgICAgICAgYnNfYXBwZW5kKGJzLCB0bXBicykKLQorICAgICAgICAgICAgYnMuYWdncmVnYXRlKF9icykKICAgICBpZiBub3QgYnM6CiAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKCJObyBidWlsZHN0YXRzIGZvdW5kIHVuZGVyIHt9Ii5mb3JtYXQocGF0aCkpCisKICAgICByZXR1cm4gYnMKIAogCiBkZWYgcHJpbnRfdmVyX2RpZmYoYnMxLCBiczIpOgogICAgICIiIlByaW50IHBhY2thZ2UgdmVyc2lvbiBkaWZmZXJlbmNlcyIiIgotICAgIHBrZ3MxID0gc2V0KGJzMS5rZXlzKCkpCi0gICAgcGtnczIgPSBzZXQoYnMyLmtleXMoKSkKLSAgICBuZXdfcGtncyA9IHBrZ3MyIC0gcGtnczEKLSAgICBkZWxldGVkX3BrZ3MgPSBwa2dzMSAtIHBrZ3MyCiAKLSAgICBlY2hhbmdlZCA9IFtdCi0gICAgdmNoYW5nZWQgPSBbXQotICAgIHJjaGFuZ2VkID0gW10KLSAgICB1bmNoYW5nZWQgPSBbXQotICAgIGNvbW1vbl9wa2dzID0gcGtnczIuaW50ZXJzZWN0aW9uKHBrZ3MxKQotICAgIGlmIGNvbW1vbl9wa2dzOgotICAgICAgICBmb3IgcGtnIGluIGNvbW1vbl9wa2dzOgotICAgICAgICAgICAgaWYgYnMxW3BrZ11bJ2Vwb2NoJ10gIT0gYnMyW3BrZ11bJ2Vwb2NoJ106Ci0gICAgICAgICAgICAgICAgZWNoYW5nZWQuYXBwZW5kKHBrZykKLSAgICAgICAgICAgIGVsaWYgYnMxW3BrZ11bJ3ZlcnNpb24nXSAhPSBiczJbcGtnXVsndmVyc2lvbiddOgotICAgICAgICAgICAgICAgIHZjaGFuZ2VkLmFwcGVuZChwa2cpCi0gICAgICAgICAgICBlbGlmIGJzMVtwa2ddWydyZXZpc2lvbiddICE9IGJzMltwa2ddWydyZXZpc2lvbiddOgotICAgICAgICAgICAgICAgIHJjaGFuZ2VkLmFwcGVuZChwa2cpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHVuY2hhbmdlZC5hcHBlbmQocGtnKQorICAgIGRpZmYgPSBCU1ZlckRpZmYoYnMxLCBiczIpCiAKLSAgICBtYXhsZW4gPSBtYXgoW2xlbihwa2cpIGZvciBwa2cgaW4gcGtnczEudW5pb24ocGtnczIpXSkKKyAgICBtYXhsZW4gPSBtYXgoW2xlbihyKSBmb3IgciBpbiBzZXQoYnMxLmtleXMoKSkudW5pb24oc2V0KGJzMi5rZXlzKCkpKV0pCiAgICAgZm10X3N0ciA9ICIgIHs6e21heGxlbn19ICh7fSkiCi0jICAgIGlmIHVuY2hhbmdlZDoKLSMgICAgICAgIHByaW50KCJcblVOQ0hBTkdFRCBQQUNLQUdFUzoiKQotIyAgICAgICAgcHJpbnQoIi0tLS0tLS0tLS0tLS0tLS0tLS0iKQotIyAgICAgICAgbWF4bGVuID0gbWF4KFtsZW4ocGtnKSBmb3IgcGtnIGluIHVuY2hhbmdlZF0pCi0jICAgICAgICBmb3IgcGtnIGluIHNvcnRlZCh1bmNoYW5nZWQpOgotIyAgICAgICAgICAgIHByaW50KGZtdF9zdHIuZm9ybWF0KHBrZywgYnMyW3BrZ11bJ25ldnInXSwgbWF4bGVuPW1heGxlbikpCiAKLSAgICBpZiBuZXdfcGtnczoKLSAgICAgICAgcHJpbnQoIlxuTkVXIFBBQ0tBR0VTOiIpCi0gICAgICAgIHByaW50KCItLS0tLS0tLS0tLS0tIikKLSAgICAgICAgZm9yIHBrZyBpbiBzb3J0ZWQobmV3X3BrZ3MpOgotICAgICAgICAgICAgcHJpbnQoZm10X3N0ci5mb3JtYXQocGtnLCBiczJbcGtnXVsnbmV2ciddLCBtYXhsZW49bWF4bGVuKSkKKyAgICBpZiBkaWZmLm5ldzoKKyAgICAgICAgcHJpbnQoIlxuTkVXIFJFQ0lQRVM6IikKKyAgICAgICAgcHJpbnQoIi0tLS0tLS0tLS0tLSIpCisgICAgICAgIGZvciBuYW1lLCB2YWwgaW4gc29ydGVkKGRpZmYubmV3Lml0ZW1zKCkpOgorICAgICAgICAgICAgcHJpbnQoZm10X3N0ci5mb3JtYXQobmFtZSwgdmFsLm5ldnIsIG1heGxlbj1tYXhsZW4pKQogCi0gICAgaWYgZGVsZXRlZF9wa2dzOgotICAgICAgICBwcmludCgiXG5ERUxFVEVEIFBBQ0tBR0VTOiIpCi0gICAgICAgIHByaW50KCItLS0tLS0tLS0tLS0tLS0tLSIpCi0gICAgICAgIGZvciBwa2cgaW4gc29ydGVkKGRlbGV0ZWRfcGtncyk6Ci0gICAgICAgICAgICBwcmludChmbXRfc3RyLmZvcm1hdChwa2csIGJzMVtwa2ddWyduZXZyJ10sIG1heGxlbj1tYXhsZW4pKQorICAgIGlmIGRpZmYuZHJvcHBlZDoKKyAgICAgICAgcHJpbnQoIlxuRFJPUFBFRCBSRUNJUEVTOiIpCisgICAgICAgIHByaW50KCItLS0tLS0tLS0tLS0tLS0tIikKKyAgICAgICAgZm9yIG5hbWUsIHZhbCBpbiBzb3J0ZWQoZGlmZi5kcm9wcGVkLml0ZW1zKCkpOgorICAgICAgICAgICAgcHJpbnQoZm10X3N0ci5mb3JtYXQobmFtZSwgdmFsLm5ldnIsIG1heGxlbj1tYXhsZW4pKQogCiAgICAgZm10X3N0ciA9ICIgIHswOnttYXhsZW59fSB7MTo8MjB9ICAgICh7Mn0pIgotICAgIGlmIHJjaGFuZ2VkOgorICAgIGlmIGRpZmYucmNoYW5nZWQ6CiAgICAgICAgIHByaW50KCJcblJFVklTSU9OIENIQU5HRUQ6IikKICAgICAgICAgcHJpbnQoIi0tLS0tLS0tLS0tLS0tLS0tIikKLSAgICAgICAgZm9yIHBrZyBpbiBzb3J0ZWQocmNoYW5nZWQpOgotICAgICAgICAgICAgZmllbGQxID0gInt9IC0+IHt9Ii5mb3JtYXQocGtnLCBiczFbcGtnXVsncmV2aXNpb24nXSwgYnMyW3BrZ11bJ3JldmlzaW9uJ10pCi0gICAgICAgICAgICBmaWVsZDIgPSAie30gLT4ge30iLmZvcm1hdChiczFbcGtnXVsnbmV2ciddLCBiczJbcGtnXVsnbmV2ciddKQotICAgICAgICAgICAgcHJpbnQoZm10X3N0ci5mb3JtYXQocGtnLCBmaWVsZDEsIGZpZWxkMiwgbWF4bGVuPW1heGxlbikpCisgICAgICAgIGZvciBuYW1lLCB2YWwgaW4gc29ydGVkKGRpZmYucmNoYW5nZWQuaXRlbXMoKSk6CisgICAgICAgICAgICBmaWVsZDEgPSAie30gLT4ge30iLmZvcm1hdCh2YWwubGVmdC5yZXZpc2lvbiwgdmFsLnJpZ2h0LnJldmlzaW9uKQorICAgICAgICAgICAgZmllbGQyID0gInt9IC0+IHt9Ii5mb3JtYXQodmFsLmxlZnQubmV2ciwgdmFsLnJpZ2h0Lm5ldnIpCisgICAgICAgICAgICBwcmludChmbXRfc3RyLmZvcm1hdChuYW1lLCBmaWVsZDEsIGZpZWxkMiwgbWF4bGVuPW1heGxlbikpCiAKLSAgICBpZiB2Y2hhbmdlZDoKKyAgICBpZiBkaWZmLnZjaGFuZ2VkOgogICAgICAgICBwcmludCgiXG5WRVJTSU9OIENIQU5HRUQ6IikKICAgICAgICAgcHJpbnQoIi0tLS0tLS0tLS0tLS0tLS0iKQotICAgICAgICBmb3IgcGtnIGluIHNvcnRlZCh2Y2hhbmdlZCk6Ci0gICAgICAgICAgICBmaWVsZDEgPSAie30gLT4ge30iLmZvcm1hdChiczFbcGtnXVsndmVyc2lvbiddLCBiczJbcGtnXVsndmVyc2lvbiddKQotICAgICAgICAgICAgZmllbGQyID0gInt9IC0+IHt9Ii5mb3JtYXQoYnMxW3BrZ11bJ25ldnInXSwgYnMyW3BrZ11bJ25ldnInXSkKLSAgICAgICAgICAgIHByaW50KGZtdF9zdHIuZm9ybWF0KHBrZywgZmllbGQxLCBmaWVsZDIsIG1heGxlbj1tYXhsZW4pKQorICAgICAgICBmb3IgbmFtZSwgdmFsIGluIHNvcnRlZChkaWZmLnZjaGFuZ2VkLml0ZW1zKCkpOgorICAgICAgICAgICAgZmllbGQxID0gInt9IC0+IHt9Ii5mb3JtYXQodmFsLmxlZnQudmVyc2lvbiwgdmFsLnJpZ2h0LnZlcnNpb24pCisgICAgICAgICAgICBmaWVsZDIgPSAie30gLT4ge30iLmZvcm1hdCh2YWwubGVmdC5uZXZyLCB2YWwucmlnaHQubmV2cikKKyAgICAgICAgICAgIHByaW50KGZtdF9zdHIuZm9ybWF0KG5hbWUsIGZpZWxkMSwgZmllbGQyLCBtYXhsZW49bWF4bGVuKSkKIAotICAgIGlmIGVjaGFuZ2VkOgorICAgIGlmIGRpZmYuZWNoYW5nZWQ6CiAgICAgICAgIHByaW50KCJcbkVQT0NIIENIQU5HRUQ6IikKICAgICAgICAgcHJpbnQoIi0tLS0tLS0tLS0tLS0tIikKLSAgICAgICAgZm9yIHBrZyBpbiBzb3J0ZWQoZWNoYW5nZWQpOgotICAgICAgICAgICAgZmllbGQxID0gInt9IC0+IHt9Ii5mb3JtYXQoYnMxW3BrZ11bJ2Vwb2NoJ10sIGJzMltwa2ddWydlcG9jaCddKQotICAgICAgICAgICAgZmllbGQyID0gInt9IC0+IHt9Ii5mb3JtYXQoYnMxW3BrZ11bJ25ldnInXSwgYnMyW3BrZ11bJ25ldnInXSkKLSAgICAgICAgICAgIHByaW50KGZtdF9zdHIuZm9ybWF0KHBrZywgZmllbGQxLCBmaWVsZDIsIG1heGxlbj1tYXhsZW4pKQorICAgICAgICBmb3IgbmFtZSwgdmFsIGluIHNvcnRlZChkaWZmLmVjaGFuZ2VkLml0ZW1zKCkpOgorICAgICAgICAgICAgZmllbGQxID0gInt9IC0+IHt9Ii5mb3JtYXQodmFsLmxlZnQuZXBvY2gsIHZhbC5yaWdodC5lcG9jaCkKKyAgICAgICAgICAgIGZpZWxkMiA9ICJ7fSAtPiB7fSIuZm9ybWF0KHZhbC5sZWZ0Lm5ldnIsIHZhbC5yaWdodC5uZXZyKQorICAgICAgICAgICAgcHJpbnQoZm10X3N0ci5mb3JtYXQobmFtZSwgZmllbGQxLCBmaWVsZDIsIG1heGxlbj1tYXhsZW4pKQogCiAKIGRlZiBwcmludF90YXNrX2RpZmYoYnMxLCBiczIsIHZhbF90eXBlLCBtaW5fdmFsPTAsIG1pbl9hYnNkaWZmPTAsIHNvcnRfYnk9KCdhYnNkaWZmJywpKToKQEAgLTM0MywxMiArMTU3LDEwIEBACiAgICAgICAgICIiIkdldCBjdW11bGF0aXZlIHN1bSBvZiBhbGwgdGFza3MiIiIKICAgICAgICAgdG90YWwgPSAwLjAKICAgICAgICAgZm9yIHJlY2lwZV9kYXRhIGluIGJ1aWxkc3RhdHMudmFsdWVzKCk6Ci0gICAgICAgICAgICBmb3IgYnNfdGFzayBpbiByZWNpcGVfZGF0YVsndGFza3MnXS52YWx1ZXMoKToKLSAgICAgICAgICAgICAgICB0b3RhbCArPSBzdW0oW2dldGF0dHIoYiwgdmFsX3R5cGUpIGZvciBiIGluIGJzX3Rhc2tdKSAvIGxlbihic190YXNrKQorICAgICAgICAgICAgZm9yIGJzX3Rhc2sgaW4gcmVjaXBlX2RhdGEudGFza3MudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgdG90YWwgKz0gZ2V0YXR0cihic190YXNrLCB2YWxfdHlwZSkKICAgICAgICAgcmV0dXJuIHRvdGFsCiAKLSAgICB0YXNrc19kaWZmID0gW10KLQogICAgIGlmIG1pbl92YWw6CiAgICAgICAgIHByaW50KCJJZ25vcmluZyB0YXNrcyBsZXNzIHRoYW4ge30gKHt9KSIuZm9ybWF0KAogICAgICAgICAgICAgICAgIHZhbF90b19zdHIobWluX3ZhbCwgVHJ1ZSksIHZhbF90b19zdHIobWluX3ZhbCkpKQpAQCAtMzU3LDQ5ICsxNjksNyBAQAogICAgICAgICAgICAgICAgIHZhbF90b19zdHIobWluX2Fic2RpZmYsIFRydWUpLCB2YWxfdG9fc3RyKG1pbl9hYnNkaWZmKSkpCiAKICAgICAjIFByZXBhcmUgdGhlIGRhdGEKLSAgICBwa2dzID0gc2V0KGJzMS5rZXlzKCkpLnVuaW9uKHNldChiczIua2V5cygpKSkKLSAgICBmb3IgcGtnIGluIHBrZ3M6Ci0gICAgICAgIHRhc2tzMSA9IGJzMVtwa2ddWyd0YXNrcyddIGlmIHBrZyBpbiBiczEgZWxzZSB7fQotICAgICAgICB0YXNrczIgPSBiczJbcGtnXVsndGFza3MnXSBpZiBwa2cgaW4gYnMyIGVsc2Uge30KLSAgICAgICAgaWYgbm90IHRhc2tzMToKLSAgICAgICAgICAgIHBrZ19vcCA9ICcrICcKLSAgICAgICAgZWxpZiBub3QgdGFza3MyOgotICAgICAgICAgICAgcGtnX29wID0gJy0gJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcGtnX29wID0gJyAgJwotCi0gICAgICAgIGZvciB0YXNrIGluIHNldCh0YXNrczEua2V5cygpKS51bmlvbihzZXQodGFza3MyLmtleXMoKSkpOgotICAgICAgICAgICAgdGFza19vcCA9ICcgICcKLSAgICAgICAgICAgIGlmIHRhc2sgaW4gdGFza3MxOgotICAgICAgICAgICAgICAgICMgQXZlcmFnZSBvdmVyIGFsbCB2YWx1ZXMKLSAgICAgICAgICAgICAgICB2YWwxID0gW2dldGF0dHIoYiwgdmFsX3R5cGUpIGZvciBiIGluIGJzMVtwa2ddWyd0YXNrcyddW3Rhc2tdXQotICAgICAgICAgICAgICAgIHZhbDEgPSBzdW0odmFsMSkgLyBsZW4odmFsMSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgdGFza19vcCA9ICcrICcKLSAgICAgICAgICAgICAgICB2YWwxID0gMAotICAgICAgICAgICAgaWYgdGFzayBpbiB0YXNrczI6Ci0gICAgICAgICAgICAgICAgIyBBdmVyYWdlIG92ZXIgYWxsIHZhbHVlcwotICAgICAgICAgICAgICAgIHZhbDIgPSBbZ2V0YXR0cihiLCB2YWxfdHlwZSkgZm9yIGIgaW4gYnMyW3BrZ11bJ3Rhc2tzJ11bdGFza11dCi0gICAgICAgICAgICAgICAgdmFsMiA9IHN1bSh2YWwyKSAvIGxlbih2YWwyKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB2YWwyID0gMAotICAgICAgICAgICAgICAgIHRhc2tfb3AgPSAnLSAnCi0KLSAgICAgICAgICAgIGlmIHZhbDEgPT0gMDoKLSAgICAgICAgICAgICAgICByZWxkaWZmID0gZmxvYXQoJ2luZicpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJlbGRpZmYgPSAxMDAgKiAodmFsMiAtIHZhbDEpIC8gdmFsMQotCi0gICAgICAgICAgICBpZiBtYXgodmFsMSwgdmFsMikgPCBtaW5fdmFsOgotICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiRmlsdGVyaW5nIG91dCAlczolcyAoJXMpIiwgcGtnLCB0YXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxfdG9fc3RyKG1heCh2YWwxLCB2YWwyKSkpCi0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIGFicyh2YWwyIC0gdmFsMSkgPCBtaW5fYWJzZGlmZjoKLSAgICAgICAgICAgICAgICBsb2cuZGVidWcoIkZpbHRlcmluZyBvdXQgJXM6JXMgKGRpZmZlcmVuY2Ugb2YgJXMpIiwgcGtnLCB0YXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxfdG9fc3RyKHZhbDItdmFsMSkpCi0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHRhc2tzX2RpZmYuYXBwZW5kKFRhc2tEaWZmKHBrZywgcGtnX29wLCB0YXNrLCB0YXNrX29wLCB2YWwxLCB2YWwyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsMi12YWwxLCByZWxkaWZmKSkKKyAgICB0YXNrc19kaWZmID0gZGlmZl9idWlsZHN0YXRzKGJzMSwgYnMyLCB2YWxfdHlwZSwgbWluX3ZhbCwgbWluX2Fic2RpZmYpCiAKICAgICAjIFNvcnQgb3VyIGxpc3QKICAgICBmb3IgZmllbGQgaW4gcmV2ZXJzZWQoc29ydF9ieSk6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2J1aWxkLXBlcmYtdGVzdC13cmFwcGVyLnNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9idWlsZC1wZXJmLXRlc3Qtd3JhcHBlci5zaAppbmRleCAzZGEzMjUzLi4xOWJlZTFkIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2J1aWxkLXBlcmYtdGVzdC13cmFwcGVyLnNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYnVpbGQtcGVyZi10ZXN0LXdyYXBwZXIuc2gKQEAgLTM1LDYgKzM1LDcgQEAKICAgLUMgR0lUX1JFUE8gICAgICAgY29tbWl0IHJlc3VsdHMgaW50byBHaXQKICAgLUUgRU1BSUxfQUREUiAgICAgc2VuZCBlbWFpbCByZXBvcnQKICAgLVAgR0lUX1JFTU9URSAgICAgcHVzaCByZXN1bHRzIHRvIGEgcmVtb3RlIEdpdCByZXBvc2l0b3J5CisgIC1SIERFU1QgICAgICAgICAgIHJzeW5jIHJlcG9ydHMgdG8gYSByZW1vdGUgZGVzdGluYXRpb24KICAgLXcgV09SS19ESVIgICAgICAgd29yayBkaXIgZm9yIHRoaXMgc2NyaXB0CiAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0OiBHSVRfVE9QX0RJUi9idWlsZC1wZXJmLXRlc3QpCiAgIC14ICAgICAgICAgICAgICAgIGNyZWF0ZSB4bWwgcmVwb3J0IChpbnN0ZWFkIG9mIGpzb24pCkBAIC01MCw3ICs1MSw3IEBACiBjb21taXRpc2g9IiIKIG9lX2J1aWxkX3BlcmZfdGVzdF9leHRyYV9vcHRzPSgpCiBvZV9naXRfYXJjaGl2ZV9leHRyYV9vcHRzPSgpCi13aGlsZSBnZXRvcHRzICJoYTpjOkM6RTpQOnc6eCIgb3B0OyBkbword2hpbGUgZ2V0b3B0cyAiaGE6YzpDOkU6UDpSOnc6eCIgb3B0OyBkbwogICAgIGNhc2UgJG9wdCBpbgogICAgICAgICBoKSAgdXNhZ2UKICAgICAgICAgICAgIGV4aXQgMApAQCAtNjUsNiArNjYsOCBAQAogICAgICAgICAgICAgOzsKICAgICAgICAgUCkgIG9lX2dpdF9hcmNoaXZlX2V4dHJhX29wdHMrPSgiLS1wdXNoIiAiJE9QVEFSRyIpCiAgICAgICAgICAgICA7OworICAgICAgICBSKSAgcnN5bmNfZHN0PSIkT1BUQVJHIgorICAgICAgICAgICAgOzsKICAgICAgICAgdykgIGJhc2VfZGlyPWByZWFscGF0aCAtcyAiJE9QVEFSRyJgCiAgICAgICAgICAgICA7OwogICAgICAgICB4KSAgb2VfYnVpbGRfcGVyZl90ZXN0X2V4dHJhX29wdHMrPSgiLS14bWwiKQpAQCAtMTMyLDYgKzEzNSwxMSBAQAogICAgIGdpdCByZXNldCAtLWhhcmQgJGNvbW1pdCA+IC9kZXYvbnVsbAogZmkKIAorIyBEZXRlcm1pbmUgbmFtZSBvZiB0aGUgY3VycmVudCBicmFuY2gKK2JyYW5jaD1gZ2l0IHN5bWJvbGljLXJlZiBIRUFEIDI+IC9kZXYvbnVsbGAKKyMgU3RyaXAgcmVmcy9oZWFkcy8KK2JyYW5jaD0ke2JyYW5jaDoxMX0KKwogIyBTZXR1cCBidWlsZCBlbnZpcm9ubWVudAogaWYgWyAteiAiJGJhc2VfZGlyIiBdOyB0aGVuCiAgICAgYmFzZV9kaXI9IiRnaXRfdG9wZGlyL2J1aWxkLXBlcmYtdGVzdCIKQEAgLTE4NywxMyArMTk1LDI1IEBACiAgICAgICAgICIke29lX2dpdF9hcmNoaXZlX2V4dHJhX29wdHNbQF19IiBcCiAgICAgICAgICIkcmVzdWx0c19kaXIiCiAKKyAgICAjIEdlbmVyYXRlIHRlc3QgcmVwb3J0cworICAgIHNhbml0aXplZF9icmFuY2g9YGVjaG8gJGJyYW5jaCB8IHRyIC8gX2AKKyAgICByZXBvcnRfdHh0PWBob3N0bmFtZWBfJHtzYW5pdGl6ZWRfYnJhbmNofV8ke21hY2hpbmV9LnR4dAorICAgIHJlcG9ydF9odG1sPWBob3N0bmFtZWBfJHtzYW5pdGl6ZWRfYnJhbmNofV8ke21hY2hpbmV9Lmh0bWwKKyAgICBlY2hvIC1lICJcbkdlbmVyYXRpbmcgdGVzdCByZXBvcnQiCisgICAgb2UtYnVpbGQtcGVyZi1yZXBvcnQgLXIgIiRyZXN1bHRzX3JlcG8iID4gJHJlcG9ydF90eHQKKyAgICBvZS1idWlsZC1wZXJmLXJlcG9ydCAtciAiJHJlc3VsdHNfcmVwbyIgLS1odG1sID4gJHJlcG9ydF9odG1sCisKICAgICAjIFNlbmQgZW1haWwgcmVwb3J0CiAgICAgaWYgWyAtbiAiJGVtYWlsX3RvIiBdOyB0aGVuCi0gICAgICAgIGVjaG8gLWUgIlxuRW1haWxpbmcgdGVzdCByZXBvcnQiCisgICAgICAgIGVjaG8gIkVtYWlsaW5nIHRlc3QgcmVwb3J0IgogICAgICAgICBvc19uYW1lPWBnZXRfb3NfcmVsZWFzZV92YXIgUFJFVFRZX05BTUVgCi0gICAgICAgIG9lLWJ1aWxkLXBlcmYtcmVwb3J0IC1yICIkcmVzdWx0c19yZXBvIiA+IHJlcG9ydC50eHQKLSAgICAgICAgb2UtYnVpbGQtcGVyZi1yZXBvcnQgLXIgIiRyZXN1bHRzX3JlcG8iIC0taHRtbCA+IHJlcG9ydC5odG1sCi0gICAgICAgICIkc2NyaXB0X2RpciIvb2UtYnVpbGQtcGVyZi1yZXBvcnQtZW1haWwucHkgLS10byAiJGVtYWlsX3RvIiAtLXN1YmplY3QgIkJ1aWxkIFBlcmYgVGVzdCBSZXBvcnQgZm9yICRvc19uYW1lIiAtLXRleHQgcmVwb3J0LnR4dCAtLWh0bWwgcmVwb3J0Lmh0bWwgIiR7T0VfQlVJTERfUEVSRl9SRVBPUlRfRU1BSUxfRVhUUkFfQVJHU1tAXX0iCisgICAgICAgICIkc2NyaXB0X2RpciIvb2UtYnVpbGQtcGVyZi1yZXBvcnQtZW1haWwucHkgLS10byAiJGVtYWlsX3RvIiAtLXN1YmplY3QgIkJ1aWxkIFBlcmYgVGVzdCBSZXBvcnQgZm9yICRvc19uYW1lIiAtLXRleHQgJHJlcG9ydF90eHQgLS1odG1sICRyZXBvcnRfaHRtbCAiJHtPRV9CVUlMRF9QRVJGX1JFUE9SVF9FTUFJTF9FWFRSQV9BUkdTW0BdfSIKKyAgICBmaQorCisgICAgIyBVcGxvYWQgcmVwb3J0IGZpbGVzLCB1bmxlc3Mgd2UncmUgb24gZGV0YWNoZWQgaGVhZAorICAgIGlmIFsgLW4gIiRyc3luY19kc3QiIC1hIC1uICIkYnJhbmNoIiBdOyB0aGVuCisgICAgICAgIGVjaG8gIlVwbG9hZGluZyB0ZXN0IHJlcG9ydCIKKyAgICAgICAgcnN5bmMgJHJlcG9ydF90eHQgJHJlcG9ydF9odG1sICRyc3luY19kc3QKICAgICBmaQogZmkKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9vZS1idWlsZC1wZXJmLXJlcG9ydC1lbWFpbC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvb2UtYnVpbGQtcGVyZi1yZXBvcnQtZW1haWwucHkKaW5kZXggMjYxY2E1MS4uOTEzODQ3YiAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9vZS1idWlsZC1wZXJmLXJlcG9ydC1lbWFpbC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL29lLWJ1aWxkLXBlcmYtcmVwb3J0LWVtYWlsLnB5CkBAIC0yNSw2ICsyNSw3IEBACiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCitmcm9tIGVtYWlsLm1pbWUuaW1hZ2UgaW1wb3J0IE1JTUVJbWFnZQogZnJvbSBlbWFpbC5taW1lLm11bHRpcGFydCBpbXBvcnQgTUlNRU11bHRpcGFydAogZnJvbSBlbWFpbC5taW1lLnRleHQgaW1wb3J0IE1JTUVUZXh0CiAKQEAgLTcxLDYgKzcyLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJPbmx5IHByaW50IGVycm9ycyIpCiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS10bycsIGFjdGlvbj0nYXBwZW5kJywKICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlJlY2lwaWVudHMgb2YgdGhlIGVtYWlsIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNjJywgYWN0aW9uPSdhcHBlbmQnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iQ2FyYm9uIGNvcHkgcmVjaXBpZW50cyBvZiB0aGUgZW1haWwiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tYmNjJywgYWN0aW9uPSdhcHBlbmQnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iQmxpbmQgY2FyYm9uIGNvcHkgcmVjaXBpZW50cyBvZiB0aGUgZW1haWwiKQogICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc3ViamVjdCcsIGRlZmF1bHQ9IllvY3RvIGJ1aWxkIHBlcmYgdGVzdCByZXBvcnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRW1haWwgc3ViamVjdCIpCiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1vdXRkaXInLCAnLW8nLApAQCAtMTA3LDE1ICsxMTIsNiBAQAogICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsnb3B0aXBuZycsIG91dGZpbGVdLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCiAKIAotZGVmIGVuY29kZV9wbmcocG5nZmlsZSk6Ci0gICAgIiIiRW5jb2RlIHBuZyBpbnRvIGEgPGltZz4gaHRtbCBlbGVtZW50IiIiCi0gICAgd2l0aCBvcGVuKHBuZ2ZpbGUsICdyYicpIGFzIGY6Ci0gICAgICAgIGRhdGEgPSBmLnJlYWQoKQotCi0gICAgYjY0X2RhdGEgPSBiYXNlNjQuYjY0ZW5jb2RlKGRhdGEpCi0gICAgcmV0dXJuICc8aW1nIHNyYz0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcgKyBiNjRfZGF0YS5kZWNvZGUoJ3V0Zi04JykgKyAnIj5cbicKLQotCiBkZWYgbWFuZ2xlX2h0bWxfcmVwb3J0KGluZmlsZSwgb3V0ZmlsZSwgcG5ncyk6CiAgICAgIiIiTWFuZ2xlIGh0bWwgZmlsZSBpbnRvIGEgZW1haWwgY29tcGF0aWJsZSBmb3JtYXQiIiIKICAgICBwYXN0ZSA9IFRydWUKQEAgLTE0MCw5ICsxMzYsNyBAQAogICAgICAgICAgICAgICAgICAgICAjIFJlcGxhY2UgY2hhcnRzIHdpdGggPGltZz4gZWxlbWVudHMKICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSByZS5tYXRjaCgnPGRpdiBpZD0iKD9QPGlkPlx3KykiJywgc3RyaXBwZWQpCiAgICAgICAgICAgICAgICAgICAgIGlmIG1hdGNoIGFuZCBtYXRjaC5ncm91cCgnaWQnKSBpbiBwbmdzOgotICAgICAgICAgICAgICAgICAgICAgICAgI2Zfb3V0LndyaXRlKCc8aW1nIHNyYz0ie30iPlxuJy5mb3JtYXQobWF0Y2guZ3JvdXAoJ2lkJykgKyAnLnBuZycpKQotICAgICAgICAgICAgICAgICAgICAgICAgcG5nX2ZpbGUgPSBvcy5wYXRoLmpvaW4ocG5nX2RpciwgbWF0Y2guZ3JvdXAoJ2lkJykgKyAnLnBuZycpCi0gICAgICAgICAgICAgICAgICAgICAgICBmX291dC53cml0ZShlbmNvZGVfcG5nKHBuZ19maWxlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZfb3V0LndyaXRlKCc8aW1nIHNyYz0iY2lkOnt9IlxuJy5mb3JtYXQobWF0Y2guZ3JvdXAoJ2lkJykpKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgZl9vdXQud3JpdGUobGluZSkKIApAQCAtMTY2LDcgKzE2MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKIAogICAgICAgICBwbmdzID0gW10KLSAgICAgICAgYXR0YWNobWVudHMgPSBbXQorICAgICAgICBpbWFnZXMgPSBbXQogICAgICAgICBmb3IgZm5hbWUgaW4gb3MubGlzdGRpcih0bXBkaXIpOgogICAgICAgICAgICAgYmFzZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmbmFtZSkKICAgICAgICAgICAgIGlmIGV4dCA9PSAnLnBuZyc6CkBAIC0xNzQsNyArMTY4LDcgQEAKICAgICAgICAgICAgICAgICBkZWNvZGVfcG5nKG9zLnBhdGguam9pbih0bXBkaXIsIGZuYW1lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihvdXRkaXIsIGZuYW1lKSkKICAgICAgICAgICAgICAgICBwbmdzLmFwcGVuZChiYXNlKQotICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzLmFwcGVuZChmbmFtZSkKKyAgICAgICAgICAgICAgICBpbWFnZXMuYXBwZW5kKGZuYW1lKQogICAgICAgICAgICAgZWxpZiBleHQgaW4gKCcuaHRtbCcsICcuaHRtJyk6CiAgICAgICAgICAgICAgICAgcmVwb3J0X2ZpbGUgPSBmbmFtZQogICAgICAgICAgICAgZWxzZToKQEAgLTE4NCwxMSArMTc4LDEzIEBACiAgICAgICAgIGxvZy5kZWJ1ZygiTWFuZ2xpbmcgaHRtbCByZXBvcnQgZmlsZSAlcyIsIHJlcG9ydF9maWxlKQogICAgICAgICBtYW5nbGVfaHRtbF9yZXBvcnQob3MucGF0aC5qb2luKHRtcGRpciwgcmVwb3J0X2ZpbGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKG91dGRpciwgcmVwb3J0X2ZpbGUpLCBwbmdzKQotICAgICAgICByZXR1cm4gcmVwb3J0X2ZpbGUsIGF0dGFjaG1lbnRzCisgICAgICAgIHJldHVybiAob3MucGF0aC5qb2luKG91dGRpciwgcmVwb3J0X2ZpbGUpLAorICAgICAgICAgICAgICAgIFtvcy5wYXRoLmpvaW4ob3V0ZGlyLCBpKSBmb3IgaSBpbiBpbWFnZXNdKQogICAgIGZpbmFsbHk6CiAgICAgICAgIHNodXRpbC5ybXRyZWUodG1wZGlyKQogCi1kZWYgc2VuZF9lbWFpbCh0ZXh0X2ZuLCBodG1sX2ZuLCBzdWJqZWN0LCByZWNpcGllbnRzKToKK2RlZiBzZW5kX2VtYWlsKHRleHRfZm4sIGh0bWxfZm4sIGltYWdlX2Zucywgc3ViamVjdCwgcmVjaXBpZW50cywgY29weT1bXSwKKyAgICAgICAgICAgICAgIGJsaW5kX2NvcHk9W10pOgogICAgICIiIlNlbmQgZW1haWwiIiIKICAgICAjIEdlbmVyYXRlIGVtYWlsIG1lc3NhZ2UKICAgICB0ZXh0X21zZyA9IGh0bWxfbXNnID0gTm9uZQpAQCAtMTk3LDggKzE5MywxNiBAQAogICAgICAgICAgICAgdGV4dF9tc2cgPSBNSU1FVGV4dCgiWW9jdG8gYnVpbGQgcGVyZm9ybWFuY2UgdGVzdCByZXBvcnQuXG4iICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5yZWFkKCksICdwbGFpbicpCiAgICAgaWYgaHRtbF9mbjoKKyAgICAgICAgaHRtbF9tc2cgPSBtc2cgPSBNSU1FTXVsdGlwYXJ0KCdyZWxhdGVkJykKICAgICAgICAgd2l0aCBvcGVuKGh0bWxfZm4pIGFzIGY6Ci0gICAgICAgICAgICBodG1sX21zZyA9IE1JTUVUZXh0KGYucmVhZCgpLCAnaHRtbCcpCisgICAgICAgICAgICBodG1sX21zZy5hdHRhY2goTUlNRVRleHQoZi5yZWFkKCksICdodG1sJykpCisgICAgICAgIGZvciBpbWdfZm4gaW4gaW1hZ2VfZm5zOgorICAgICAgICAgICAgIyBFeHBlY3QgdGhhdCBjb250ZW50IGlkIGlzIHNhbWUgYXMgdGhlIGZpbGVuYW1lCisgICAgICAgICAgICBjaWQgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoaW1nX2ZuKSlbMF0KKyAgICAgICAgICAgIHdpdGggb3BlbihpbWdfZm4sICdyYicpIGFzIGY6CisgICAgICAgICAgICAgICAgaW1hZ2VfbXNnID0gTUlNRUltYWdlKGYucmVhZCgpKQorICAgICAgICAgICAgaW1hZ2VfbXNnWydDb250ZW50LUlEJ10gPSAnPHt9PicuZm9ybWF0KGNpZCkKKyAgICAgICAgICAgIGh0bWxfbXNnLmF0dGFjaChpbWFnZV9tc2cpCiAKICAgICBpZiB0ZXh0X21zZyBhbmQgaHRtbF9tc2c6CiAgICAgICAgIG1zZyA9IE1JTUVNdWx0aXBhcnQoJ2FsdGVybmF0aXZlJykKQEAgLTIxNyw2ICsyMjEsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7fUB7fScuZm9ybWF0KHB3X2RhdGEucHdfbmFtZSwgc29ja2V0LmdldGZxZG4oKSkpCiAgICAgbXNnWydGcm9tJ10gPSAie30gPHt9PiIuZm9ybWF0KGZ1bGxfbmFtZSwgZW1haWwpCiAgICAgbXNnWydUbyddID0gJywgJy5qb2luKHJlY2lwaWVudHMpCisgICAgaWYgY29weToKKyAgICAgICAgbXNnWydDYyddID0gJywgJy5qb2luKGNvcHkpCisgICAgaWYgYmxpbmRfY29weToKKyAgICAgICAgbXNnWydCY2MnXSA9ICcsICcuam9pbihibGluZF9jb3B5KQogICAgIG1zZ1snU3ViamVjdCddID0gc3ViamVjdAogCiAgICAgIyBTZW5kIGVtYWlsCkBAIC0yNDMsMTQgKzI1MSwxOSBAQAogCiAgICAgdHJ5OgogICAgICAgICBsb2cuZGVidWcoIlN0b3JpbmcgZW1haWwgcGFydHMgaW4gJXMiLCBvdXRkaXIpCi0gICAgICAgIGh0bWxfcmVwb3J0ID0gTm9uZQorICAgICAgICBodG1sX3JlcG9ydCA9IGltYWdlcyA9IE5vbmUKICAgICAgICAgaWYgYXJncy5odG1sOgotICAgICAgICAgICAgc2NyYXBlX2h0bWxfcmVwb3J0KGFyZ3MuaHRtbCwgb3V0ZGlyLCBhcmdzLnBoYW50b21qc19hcmdzKQotICAgICAgICAgICAgaHRtbF9yZXBvcnQgPSBvcy5wYXRoLmpvaW4ob3V0ZGlyLCBvcy5wYXRoLmJhc2VuYW1lKGFyZ3MuaHRtbCkpCisgICAgICAgICAgICBodG1sX3JlcG9ydCwgaW1hZ2VzID0gc2NyYXBlX2h0bWxfcmVwb3J0KGFyZ3MuaHRtbCwgb3V0ZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnBoYW50b21qc19hcmdzKQogCiAgICAgICAgIGlmIGFyZ3MudG86CiAgICAgICAgICAgICBsb2cuaW5mbygiU2VuZGluZyBlbWFpbCB0byAlcyIsICcsICcuam9pbihhcmdzLnRvKSkKLSAgICAgICAgICAgIHNlbmRfZW1haWwoYXJncy50ZXh0LCBodG1sX3JlcG9ydCwgYXJncy5zdWJqZWN0LCBhcmdzLnRvKQorICAgICAgICAgICAgaWYgYXJncy5jYzoKKyAgICAgICAgICAgICAgICBsb2cuaW5mbygiQ29weWluZyB0byAlcyIsICcsICcuam9pbihhcmdzLmNjKSkKKyAgICAgICAgICAgIGlmIGFyZ3MuYmNjOgorICAgICAgICAgICAgICAgIGxvZy5pbmZvKCJCbGluZCBjb3B5aW5nIHRvICVzIiwgJywgJy5qb2luKGFyZ3MuYmNjKSkKKyAgICAgICAgICAgIHNlbmRfZW1haWwoYXJncy50ZXh0LCBodG1sX3JlcG9ydCwgaW1hZ2VzLCBhcmdzLnN1YmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MudG8sIGFyZ3MuY2MsIGFyZ3MuYmNjKQogICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlcnI6CiAgICAgICAgIGxvZy5lcnJvcigiJXMsIHdpdGggb3V0cHV0OlxuJXMiLCBzdHIoZXJyKSwgZXJyLm91dHB1dC5kZWNvZGUoKSkKICAgICAgICAgcmV0dXJuIDEKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvcGF0Y2hyZXZpZXcucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3BhdGNocmV2aWV3LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRlM2U3M2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3BhdGNocmV2aWV3LnB5CkBAIC0wLDAgKzEsMjExIEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMworCisjIFRPRE8KKyMgLSBvcHRpb24gdG8ganVzdCBsaXN0IGFsbCBicm9rZW4gZmlsZXMKKyMgLSB0ZXN0IHN1aXRlCisjIC0gdmFsaWRhdGUgc2lnbmVkLW9mZi1ieQorCisKK2NsYXNzIFJlc3VsdDoKKyAgICAjIFdoZXRoZXIgdGhlIHBhdGNoIGhhcyBhbiBVcHN0cmVhbS1TdGF0dXMgb3Igbm90CisgICAgbWlzc2luZ191cHN0cmVhbV9zdGF0dXMgPSBGYWxzZQorICAgICMgSWYgdGhlIFVwc3RyZWFtLVN0YXR1cyB0YWcgaXMgbWFsZm9ybWVkIGluIHNvbWUgd2F5IChzdHJpbmcgZm9yIGJhZCBiaXQpCisgICAgbWFsZm9ybWVkX3Vwc3RyZWFtX3N0YXR1cyA9IE5vbmUKKyAgICAjIElmIHRoZSBVcHN0cmVhbS1TdGF0dXMgdmFsdWUgaXMgdW5rbm93biAoYm9vbGVhbikKKyAgICB1bmtub3duX3Vwc3RyZWFtX3N0YXR1cyA9IEZhbHNlCisgICAgIyBUaGUgdXBzdHJlYW0gc3RhdHVzIHZhbHVlIChQZW5kaW5nLCBldGMpCisgICAgdXBzdHJlYW1fc3RhdHVzID0gTm9uZQorICAgICMgV2hldGhlciB0aGUgcGF0Y2ggaGFzIGEgU2lnbmVkLW9mZi1ieSBvciBub3QKKyAgICBtaXNzaW5nX3NvYiA9IEZhbHNlCisgICAgIyBXaGV0aGVyIHRoZSBTaWduZWQtb2ZmLWJ5IHRhZyBpcyBtYWxmb3JtZWQgaW4gc29tZSB3YXkKKyAgICBtYWxmb3JtZWRfc29iID0gRmFsc2UKKyAgICAjIFRoZSBTaWduZWQtb2ZmLWJ5IHRhZyB2YWx1ZQorICAgIHNvYiA9IE5vbmUKKyAgICAjIFdoZXRoZXIgYSBwYXRjaCBsb29rcyBsaWtlIGEgQ1ZFIGJ1dCBkb2Vzbid0IGhhdmUgYSBDVkUgdGFnCisgICAgbWlzc2luZ19jdmUgPSBGYWxzZQorCitkZWYgYmxhbWVfcGF0Y2gocGF0Y2gpOgorICAgICIiIgorICAgIEZyb20gYSBwYXRjaCBmaWxlbmFtZSwgcmV0dXJuIGEgbGlzdCBvZiAiY29tbWl0IHN1bW1hcnkgKGF1dGhvciBuYW1lIDxhdXRob3IKKyAgICBlbWFpbD4pIiBzdHJpbmdzIHJlcHJlc2VudGluZyB0aGUgaGlzdG9yeS4KKyAgICAiIiIKKyAgICBpbXBvcnQgc3VicHJvY2VzcworICAgIHJldHVybiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgoImdpdCIsICJsb2ciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tZm9sbG93IiwgIi0tZmluZC1yZW5hbWVzIiwgIi0tZGlmZi1maWx0ZXI9QSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1mb3JtYXQ9JXMgKCVhTiA8JWFFPikiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tIiwgcGF0Y2gpKS5kZWNvZGUoInV0Zi04Iikuc3BsaXRsaW5lcygpCisKK2RlZiBwYXRjaHJldmlldyhwYXRjaGVzKToKKyAgICBpbXBvcnQgcmUKKworICAgICMgR2VuZXJhbCBwYXR0ZXJuOiBzdGFydCBvZiBsaW5lLCBvcHRpb25hbCB3aGl0ZXNwYWNlLCB0YWcgd2l0aCBvcHRpb25hbAorICAgICMgaHlwaGVuIG9yIHNwYWNlcywgbWF5YmUgYSBjb2xvbiwgc29tZSB3aGl0ZXNwYWNlLCB0aGVuIHRoZSB2YWx1ZSwgYWxsIGNhc2UKKyAgICAjIGluc2Vuc2l0aXZlLgorICAgIHNvYl9yZSA9IHJlLmNvbXBpbGUociJeW1x0IF0qKFNpZ25lZFstXyBdb2ZmWy1fIF1ieTo/KVtcdCBdKiguKykiLCByZS5JR05PUkVDQVNFIHwgcmUuTVVMVElMSU5FKQorICAgIHN0YXR1c19yZSA9IHJlLmNvbXBpbGUociJeW1x0IF0qKFVwc3RyZWFtWy1fIF1TdGF0dXM6PylbXHQgXSooXHcqKSIsIHJlLklHTk9SRUNBU0UgfCByZS5NVUxUSUxJTkUpCisgICAgc3RhdHVzX3ZhbHVlcyA9ICgiYWNjZXB0ZWQiLCAicGVuZGluZyIsICJpbmFwcHJvcHJpYXRlIiwgImJhY2twb3J0IiwgInN1Ym1pdHRlZCIsICJkZW5pZWQiKQorICAgIGN2ZV90YWdfcmUgPSByZS5jb21waWxlKHIiXltcdCBdKihDVkU6KVtcdCBdKiguKikiLCByZS5JR05PUkVDQVNFIHwgcmUuTVVMVElMSU5FKQorICAgIGN2ZV9yZSA9IHJlLmNvbXBpbGUociJjdmUtWzAtOV17NH0tWzAtOV17NCw2fSIsIHJlLklHTk9SRUNBU0UpCisKKyAgICByZXN1bHRzID0ge30KKworICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzOgorICAgICAgICByZXN1bHQgPSBSZXN1bHQoKQorICAgICAgICByZXN1bHRzW3BhdGNoXSA9IHJlc3VsdAorCisgICAgICAgIGNvbnRlbnQgPSBvcGVuKHBhdGNoLCBlbmNvZGluZz0nYXNjaWknLCBlcnJvcnM9J2lnbm9yZScpLnJlYWQoKQorCisgICAgICAgICMgRmluZCB0aGUgU2lnbmVkLW9mZi1ieSB0YWcKKyAgICAgICAgbWF0Y2ggPSBzb2JfcmUuc2VhcmNoKGNvbnRlbnQpCisgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgdmFsdWUgPSBtYXRjaC5ncm91cCgxKQorICAgICAgICAgICAgaWYgdmFsdWUgIT0gIlNpZ25lZC1vZmYtYnk6IjoKKyAgICAgICAgICAgICAgICByZXN1bHQubWFsZm9ybWVkX3NvYiA9IHZhbHVlCisgICAgICAgICAgICByZXN1bHQuc29iID0gbWF0Y2guZ3JvdXAoMikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdC5taXNzaW5nX3NvYiA9IFRydWUKKworCisgICAgICAgICMgRmluZCB0aGUgVXBzdHJlYW0tU3RhdHVzIHRhZworICAgICAgICBtYXRjaCA9IHN0YXR1c19yZS5zZWFyY2goY29udGVudCkKKyAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICB2YWx1ZSA9IG1hdGNoLmdyb3VwKDEpCisgICAgICAgICAgICBpZiB2YWx1ZSAhPSAiVXBzdHJlYW0tU3RhdHVzOiI6CisgICAgICAgICAgICAgICAgcmVzdWx0Lm1hbGZvcm1lZF91cHN0cmVhbV9zdGF0dXMgPSB2YWx1ZQorCisgICAgICAgICAgICB2YWx1ZSA9IG1hdGNoLmdyb3VwKDIpLmxvd2VyKCkKKyAgICAgICAgICAgICMgVE9ETzogY2hlY2sgY2FzZQorICAgICAgICAgICAgaWYgdmFsdWUgbm90IGluIHN0YXR1c192YWx1ZXM6CisgICAgICAgICAgICAgICAgcmVzdWx0LnVua25vd25fdXBzdHJlYW1fc3RhdHVzID0gVHJ1ZQorICAgICAgICAgICAgcmVzdWx0LnVwc3RyZWFtX3N0YXR1cyA9IHZhbHVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXN1bHQubWlzc2luZ191cHN0cmVhbV9zdGF0dXMgPSBUcnVlCisKKyAgICAgICAgIyBDaGVjayB0aGF0IHBhdGNoZXMgd2hpY2ggbG9va3MgbGlrZSBDVkVzIGhhdmUgQ1ZFIHRhZ3MKKyAgICAgICAgaWYgY3ZlX3JlLnNlYXJjaChwYXRjaCkgb3IgY3ZlX3JlLnNlYXJjaChjb250ZW50KToKKyAgICAgICAgICAgIGlmIG5vdCBjdmVfdGFnX3JlLnNlYXJjaChjb250ZW50KToKKyAgICAgICAgICAgICAgICByZXN1bHQubWlzc2luZ19jdmUgPSBUcnVlCisgICAgICAgICMgVE9ETzogZXh0cmFjdCBDVkUgbGlzdAorCisgICAgcmV0dXJuIHJlc3VsdHMKKworCitkZWYgYW5hbHlzZShyZXN1bHRzLCB3YW50X2JsYW1lPUZhbHNlLCB2ZXJib3NlPVRydWUpOgorICAgICIiIgorICAgIHdhbnRfYmxhbWU6IGRpc3BsYXkgYmxhbWUgZGF0YSBmb3IgZWFjaCBtYWxmb3JtZWQgcGF0Y2gKKyAgICB2ZXJib3NlOiBkaXNwbGF5IHBlci1maWxlIHJlc3VsdHMgaW5zdGVhZCBvZiBqdXN0IHN1bW1hcnkKKyAgICAiIiIKKworICAgICMgd2FudF9ibGFtZSByZXF1aXJlcyB2ZXJib3NlLCBzbyBkaXNhYmxlIGJsYW1lIGlmIHdlJ3JlIG5vdCB2ZXJib3NlCisgICAgaWYgd2FudF9ibGFtZSBhbmQgbm90IHZlcmJvc2U6CisgICAgICAgIHdhbnRfYmxhbWUgPSBGYWxzZQorCisgICAgdG90YWxfcGF0Y2hlcyA9IDAKKyAgICBtaXNzaW5nX3NvYiA9IDAKKyAgICBtYWxmb3JtZWRfc29iID0gMAorICAgIG1pc3Npbmdfc3RhdHVzID0gMAorICAgIG1hbGZvcm1lZF9zdGF0dXMgPSAwCisgICAgbWlzc2luZ19jdmUgPSAwCisgICAgcGVuZGluZ19wYXRjaGVzID0gMAorCisgICAgZm9yIHBhdGNoIGluIHNvcnRlZChyZXN1bHRzKToKKyAgICAgICAgciA9IHJlc3VsdHNbcGF0Y2hdCisgICAgICAgIHRvdGFsX3BhdGNoZXMgKz0gMQorICAgICAgICBuZWVkX2JsYW1lID0gRmFsc2UKKworICAgICAgICAjIEJ1aWxkIHN0YXRpc3RpY3MKKyAgICAgICAgaWYgci5taXNzaW5nX3NvYjoKKyAgICAgICAgICAgIG1pc3Npbmdfc29iICs9IDEKKyAgICAgICAgaWYgci5tYWxmb3JtZWRfc29iOgorICAgICAgICAgICAgbWFsZm9ybWVkX3NvYiArPSAxCisgICAgICAgIGlmIHIubWlzc2luZ191cHN0cmVhbV9zdGF0dXM6CisgICAgICAgICAgICBtaXNzaW5nX3N0YXR1cyArPSAxCisgICAgICAgIGlmIHIubWFsZm9ybWVkX3Vwc3RyZWFtX3N0YXR1cyBvciByLnVua25vd25fdXBzdHJlYW1fc3RhdHVzOgorICAgICAgICAgICAgbWFsZm9ybWVkX3N0YXR1cyArPSAxCisgICAgICAgIGlmIHIubWlzc2luZ19jdmU6CisgICAgICAgICAgICBtaXNzaW5nX2N2ZSArPSAxCisgICAgICAgIGlmIHIudXBzdHJlYW1fc3RhdHVzID09ICJwZW5kaW5nIjoKKyAgICAgICAgICAgIHBlbmRpbmdfcGF0Y2hlcyArPSAxCisKKyAgICAgICAgIyBPdXRwdXQgd2FybmluZ3MKKyAgICAgICAgaWYgci5taXNzaW5nX3NvYjoKKyAgICAgICAgICAgIG5lZWRfYmxhbWUgPSBUcnVlCisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50KCJNaXNzaW5nIFNpZ25lZC1vZmYtYnkgdGFnICglcykiICUgcGF0Y2gpCisgICAgICAgICMgVE9ETzogZGlzYWJsZSB0aGlzIGZvciBub3cgYXMgdG9vIG11Y2ggZmFpbHMKKyAgICAgICAgaWYgRmFsc2UgYW5kIHIubWFsZm9ybWVkX3NvYjoKKyAgICAgICAgICAgIG5lZWRfYmxhbWUgPSBUcnVlCisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50KCJNYWxmb3JtZWQgU2lnbmVkLW9mZi1ieSAnJXMnICglcykiICUgKHIubWFsZm9ybWVkX3NvYiwgcGF0Y2gpKQorICAgICAgICBpZiByLm1pc3NpbmdfY3ZlOgorICAgICAgICAgICAgbmVlZF9ibGFtZSA9IFRydWUKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoIk1pc3NpbmcgQ1ZFIHRhZyAoJXMpIiAlIHBhdGNoKQorICAgICAgICBpZiByLm1pc3NpbmdfdXBzdHJlYW1fc3RhdHVzOgorICAgICAgICAgICAgbmVlZF9ibGFtZSA9IFRydWUKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoIk1pc3NpbmcgVXBzdHJlYW0tU3RhdHVzIHRhZyAoJXMpIiAlIHBhdGNoKQorICAgICAgICBpZiByLm1hbGZvcm1lZF91cHN0cmVhbV9zdGF0dXM6CisgICAgICAgICAgICBuZWVkX2JsYW1lID0gVHJ1ZQorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCgiTWFsZm9ybWVkIFVwc3RyZWFtLVN0YXR1cyAnJXMnICglcykiICUgKHIubWFsZm9ybWVkX3Vwc3RyZWFtX3N0YXR1cywgcGF0Y2gpKQorICAgICAgICBpZiByLnVua25vd25fdXBzdHJlYW1fc3RhdHVzOgorICAgICAgICAgICAgbmVlZF9ibGFtZSA9IFRydWUKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoIlVua25vd24gVXBzdHJlYW0tU3RhdHVzIHZhbHVlICclcycgKCVzKSIgJSAoci51cHN0cmVhbV9zdGF0dXMsIHBhdGNoKSkKKworICAgICAgICBpZiB3YW50X2JsYW1lIGFuZCBuZWVkX2JsYW1lOgorICAgICAgICAgICAgcHJpbnQoIlxuIi5qb2luKGJsYW1lX3BhdGNoKHBhdGNoKSkgKyAiXG4iKQorCisgICAgZGVmIHBlcmNlbnQobnVtKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuICIlZCAoJWQlJSkiICUgKG51bSwgcm91bmQobnVtICogMTAwLjAgLyB0b3RhbF9wYXRjaGVzKSkKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgcmV0dXJuICJOL0EiCisKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCgpCisKKyAgICBwcmludCgiIiJUb3RhbCBwYXRjaGVzIGZvdW5kOiAlZAorUGF0Y2hlcyBtaXNzaW5nIFNpZ25lZC1vZmYtYnk6ICVzCitQYXRjaGVzIHdpdGggbWFsZm9ybWVkIFNpZ25lZC1vZmYtYnk6ICVzCitQYXRjaGVzIG1pc3NpbmcgQ1ZFOiAlcworUGF0Y2hlcyBtaXNzaW5nIFVwc3RyZWFtLVN0YXR1czogJXMKK1BhdGNoZXMgd2l0aCBtYWxmb3JtZWQgVXBzdHJlYW0tU3RhdHVzOiAlcworUGF0Y2hlcyBpbiBQZW5kaW5nIHN0YXRlOiAlcyIiIiAlICh0b3RhbF9wYXRjaGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50KG1pc3Npbmdfc29iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudChtYWxmb3JtZWRfc29iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudChtaXNzaW5nX2N2ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnQobWlzc2luZ19zdGF0dXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50KG1hbGZvcm1lZF9zdGF0dXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50KHBlbmRpbmdfcGF0Y2hlcykpKQorCisKKworZGVmIGhpc3RvZ3JhbShyZXN1bHRzKToKKyAgICBmcm9tIHRvb2x6IGltcG9ydCByZWNpcGVzLCBkaWN0dG9vbHoKKyAgICBpbXBvcnQgbWF0aAorICAgIGNvdW50cyA9IHJlY2lwZXMuY291bnRieShsYW1iZGEgcjogci51cHN0cmVhbV9zdGF0dXMsIHJlc3VsdHMudmFsdWVzKCkpCisgICAgYmFycyA9IGRpY3R0b29sei52YWxtYXAobGFtYmRhIHY6ICIjIiAqIGludChtYXRoLmNlaWwoZmxvYXQodikgLyBsZW4ocmVzdWx0cykgKiAxMDApKSwgY291bnRzKQorICAgIGZvciBrIGluIGJhcnM6CisgICAgICAgIHByaW50KCIlLTIwcyAlcyAoJWQpIiAlIChrLmNhcGl0YWxpemUoKSBpZiBrIGVsc2UgIk5vIHN0YXR1cyIsIGJhcnNba10sIGNvdW50c1trXSkpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBpbXBvcnQgYXJncGFyc2UsIHN1YnByb2Nlc3MsIG9zCisKKyAgICBhcmdzID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249IlBhdGNoIFJldmlldyBUb29sIikKKyAgICBhcmdzLmFkZF9hcmd1bWVudCgiLWIiLCAiLS1ibGFtZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9InNob3cgYmxhbWUgZm9yIG1hbGZvcm1lZCBwYXRjaGVzIikKKyAgICBhcmdzLmFkZF9hcmd1bWVudCgiLXYiLCAiLS12ZXJib3NlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0ic2hvdyBwZXItcGF0Y2ggcmVzdWx0cyIpCisgICAgYXJncy5hZGRfYXJndW1lbnQoIi1nIiwgIi0taGlzdG9ncmFtIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0ic2hvdyBwYXRjaCBoaXN0b2dyYW0iKQorICAgIGFyZ3MuYWRkX2FyZ3VtZW50KCJkaXJlY3RvcnkiLCBuYXJncz0iPyIsIGhlbHA9ImRpcmVjdG9yeSB0byBzY2FuIikKKyAgICBhcmdzID0gYXJncy5wYXJzZV9hcmdzKCkKKworICAgIGlmIGFyZ3MuZGlyZWN0b3J5OgorICAgICAgICBvcy5jaGRpcihhcmdzLmRpcmVjdG9yeSkKKyAgICBwYXRjaGVzID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoKCJnaXQiLCAibHMtZmlsZXMiLCAiKi5wYXRjaCIsICIqLmRpZmYiKSkuZGVjb2RlKCJ1dGYtOCIpLnNwbGl0KCkKKyAgICByZXN1bHRzID0gcGF0Y2hyZXZpZXcocGF0Y2hlcykKKyAgICBhbmFseXNlKHJlc3VsdHMsIHdhbnRfYmxhbWU9YXJncy5ibGFtZSwgdmVyYm9zZT1hcmdzLnZlcmJvc2UpCisgICAgaWYgYXJncy5oaXN0b2dyYW06CisgICAgICAgIHByaW50KCkKKyAgICAgICAgaGlzdG9ncmFtKHJlc3VsdHMpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3BhdGNodGVzdC5zaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvcGF0Y2h0ZXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdmZTU2NjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3BhdGNodGVzdC5zaApAQCAtMCwwICsxLDExOCBAQAorIyEvYmluL2Jhc2gKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIHBhdGNodGVzdDogUnVuIHBhdGNodGVzdCBvbiBjb21taXRzIHN0YXJ0aW5nIGF0IG1hc3RlcgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTcsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorIworc2V0IC1vIGVycmV4aXQKKworIyBEZWZhdWx0IHZhbHVlcworcG9reWRpcj0nJworCit1c2FnZSgpIHsKK0NNRD0kKGJhc2VuYW1lICQwKQorY2F0IDw8RU9NCitVc2FnZTogJENNRCBbLWhdIFstcCBwb2t5ZGlyXQorICAtcCBwb2t5ZGlyICBEZWZhdWx0cyB0byBjdXJyZW50IGRpcmVjdG9yeQorRU9NCis+JjIKKyAgICBleGl0IDEKK30KKworZnVuY3Rpb24gY2xvbmUoKSB7CisgICAgbG9jYWwgUkVQT1JFTU9URT0kMQorICAgIGxvY2FsIFJFUE9ESVI9JDIKKyAgICBpZiBbICEgLWQgJFJFUE9ESVIgXTsgdGhlbgorCWdpdCBjbG9uZSAkUkVQT1JFTU9URSAkUkVQT0RJUiAtLXF1aWV0CisgICAgZWxzZQorCSggY2QgJFJFUE9ESVI7IGdpdCBwdWxsIC0tcXVpZXQgKQorICAgIGZpCit9CisKK3doaWxlIGdldG9wdHMgIjpwOmgiIG9wdDsgZG8KKyAgICBjYXNlICRvcHQgaW4KKwlwKQorCSAgICBwb2t5ZGlyPSRPUFRBUkcKKwkgICAgOzsKKwloKQorCSAgICB1c2FnZQorCSAgICA7OworCVw/KQorCSAgICBlY2hvICJJbnZhbGlkIG9wdGlvbjogLSRPUFRBUkciID4mMgorCSAgICB1c2FnZQorCSAgICA7OworCTopCisJICAgIGVjaG8gIk9wdGlvbiAtJE9QVEFSRyByZXF1aXJlcyBhbiBhcmd1bWVudC4iID4mMgorCSAgICB1c2FnZQorCSAgICA7OworICAgIGVzYWMKK2RvbmUKK3NoaWZ0ICQoKE9QVElORC0xKSkKKworQ0RJUj0iJFBXRCIKKworIyBkZWZhdWx0IHBva3lkaXIgdG8gY3VycmVudCBkaXJlY3RvcnkgaWYgdXNlciBkaWQgbm90IHNwZWNpZnkgb25lCitpZiBbIC16ICIkcG9reWRpciIgXTsgdGhlbgorICAgIHBva3lkaXI9IiRDRElSIgorZmkKKworUFRFTlY9IiRQV0QvcGF0Y2h0ZXN0IgorUFQ9IiRQVEVOVi9wYXRjaHRlc3QiCitQVE9FPSIkUFRFTlYvcGF0Y2h0ZXN0LW9lIgorCitpZiAhIHdoaWNoIHZpcnR1YWxlbnYgPiAvZGV2L251bGw7IHRoZW4KKyAgICBlY2hvICJJbnN0YWxsIHZpcnR1YWxlbnYgYmVmb3JlIHByb2NlZWRpbmciCisgICAgZXhpdCAxOworZmkKKworIyBhY3RpdmF0ZSB0aGUgdmlydHVhbCBlbnYKK3ZpcnR1YWxlbnYgJFBURU5WIC0tcXVpZXQKK3NvdXJjZSAkUFRFTlYvYmluL2FjdGl2YXRlCisKK2NkICRQVEVOVgorCisjIGNsb25lIG9yIHB1bGwKK2Nsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3BhdGNodGVzdCAkUFQKK2Nsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3BhdGNodGVzdC1vZSAkUFRPRQorCisjIGluc3RhbGwgcmVxdWlyZW1lbnRzCitwaXAgaW5zdGFsbCAtciAkUFQvcmVxdWlyZW1lbnRzLnR4dCAtLXF1aWV0CitwaXAgaW5zdGFsbCAtciAkUFRPRS9yZXF1aXJlbWVudHMudHh0IC0tcXVpZXQKKworUEFUSD0iJFBUOiRQVC9zY3JpcHRzOiRQQVRIIgorCisjIGxvb3AgdGhyb3VnaCBwYXJlbnQgdG8gSEVBRCBhbmQgZXhlY3V0ZSBwYXRjaHRlc3Qgb24gZWFjaCBjb21taXQKK2ZvciBjb21taXQgaW4gJChnaXQgcmV2LWxpc3QgbWFzdGVyLi5IRUFEIC0tcmV2ZXJzZSkKK2RvCisgICAgc2hvcnRsb2c9IiQoZ2l0IGxvZyAiJGNvbW1pdF4xLi4kY29tbWl0IiAtLXByZXR0eT0nJWg6ICVhTjogJWNkOiAlcycpIgorICAgIGxvZz0iJChnaXQgZm9ybWF0LXBhdGNoICIkY29tbWl0XjEuLiRjb21taXQiIC0tc3Rkb3V0IHwgcGF0Y2h0ZXN0IC0gLXIgJHBva3lkaXIgLXMgJFBUT0UvdGVzdHMgLS1iYXNlLWNvbW1pdCAkY29tbWl0XjEgLS1qc29uIDI+L2Rldi9udWxsIHwgY3JlYXRlLXN1bW1hcnkgLS1mYWlsIC0tb25seS1yZXN1bHRzKSIKKyAgICBpZiBbIC16ICIkbG9nIiBdOyB0aGVuCisJc2hvcnRsb2c9IiRzaG9ydGxvZzogT0siCisgICAgZWxzZQorCXNob3J0bG9nPSIkc2hvcnRsb2c6IEZBSUwiCisgICAgZmkKKyAgICBlY2hvICIkc2hvcnRsb2ciCisgICAgZWNobyAiJGxvZyIgfCBzZWQgLW4gLWUgJy9Jc3N1ZS9wJyAtZSAnL1N1Z2dlc3RlZCBmaXgvcCcKKyAgICBlY2hvICIiCitkb25lCisKK2RlYWN0aXZhdGUKKworY2QgJENESVIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTIuNy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTIuNy5weQppbmRleCA4YzM2NTVkLi41ODZiMzI5IDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3B5dGhvbi9nZW5lcmF0ZS1tYW5pZmVzdC0yLjcucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9weXRob24vZ2VuZXJhdGUtbWFuaWZlc3QtMi43LnB5CkBAIC0yOCw2ICsyOCw3IEBACiAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBvdXRmaWxlLCBpc05hdGl2ZSApOgogICAgICAgICAiIiJpbml0aWFsaXplIiIiCiAgICAgICAgIHNlbGYucGFja2FnZXMgPSB7fQorICAgICAgICBzZWxmLmV4Y2x1ZGVkX3BrZ3MgPSBbXQogICAgICAgICBzZWxmLnRhcmdldFByZWZpeCA9ICIke2xpYmRpcn0vcHl0aG9uJXMvIiAlIFZFUlNJT05bOjNdCiAgICAgICAgIHNlbGYuaXNOYXRpdmUgPSBpc05hdGl2ZQogICAgICAgICBzZWxmLm91dHB1dCA9IG91dGZpbGUKQEAgLTUyLDcgKzUzLDcgQEAKICAgICAgICAgc2VsZi5vdXQoICIiIiAiIiIgKQogICAgICAgICBzZWxmLm91dCggIiIgKQogCi0gICAgZGVmIGFkZFBhY2thZ2UoIHNlbGYsIG5hbWUsIGRlc2NyaXB0aW9uLCBkZXBlbmRlbmNpZXMsIGZpbGVuYW1lcyApOgorICAgIGRlZiBhZGRQYWNrYWdlKCBzZWxmLCBuYW1lLCBkZXNjcmlwdGlvbiwgZGVwZW5kZW5jaWVzLCBmaWxlbmFtZXMsIG1vZF9leGNsdWRlID0gRmFsc2UgKToKICAgICAgICAgIiIiYWRkIGEgcGFja2FnZSB0byB0aGUgTWFrZWZpbGUiIiIKICAgICAgICAgaWYgdHlwZSggZmlsZW5hbWVzICkgPT0gdHlwZSggIiIgKToKICAgICAgICAgICAgIGZpbGVuYW1lcyA9IGZpbGVuYW1lcy5zcGxpdCgpCkBAIC02Miw2ICs2Myw4IEBACiAgICAgICAgICAgICAgICAgZnVsbEZpbGVuYW1lcy5hcHBlbmQoICIlcyVzIiAlICggc2VsZi50YXJnZXRQcmVmaXgsIGZpbGVuYW1lICkgKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmdWxsRmlsZW5hbWVzLmFwcGVuZCggZmlsZW5hbWUgKQorICAgICAgICBpZiBtb2RfZXhjbHVkZToKKyAgICAgICAgICAgIHNlbGYuZXhjbHVkZWRfcGtncy5hcHBlbmQoIG5hbWUgKQogICAgICAgICBzZWxmLnBhY2thZ2VzW25hbWVdID0gZGVzY3JpcHRpb24sIGRlcGVuZGVuY2llcywgZnVsbEZpbGVuYW1lcwogCiAgICAgZGVmIGRvQm9keSggc2VsZiApOgpAQCAtNzQsMTMgKzc3LDExIEBACiAgICAgICAgICMKIAogICAgICAgICBpZiBzZWxmLmlzTmF0aXZlOgotICAgICAgICAgICAgcnByb3ZpZGVMaW5lID0gJ1JQUk9WSURFUys9IicKLSAgICAgICAgICAgIGZvciBuYW1lIGluIHNvcnRlZChzZWxmLnBhY2thZ2VzKToKLSAgICAgICAgICAgICAgICBycHJvdmlkZUxpbmUgKz0gIiVzLW5hdGl2ZSAiICUgbmFtZS5yZXBsYWNlKCAnJHtQTn0nLCAncHl0aG9uJyApCi0gICAgICAgICAgICBycHJvdmlkZUxpbmUgKz0gJyInCisgICAgICAgICAgICBwa2dsaXN0ID0gW10KKyAgICAgICAgICAgIGZvciBuYW1lIGluIFsnJHtQTn0tbW9kdWxlcyddICsgc29ydGVkKHNlbGYucGFja2FnZXMpOgorICAgICAgICAgICAgICAgIHBrZ2xpc3QuYXBwZW5kKCclcy1uYXRpdmUnICUgbmFtZS5yZXBsYWNlKCcke1BOfScsICdweXRob24nKSkKIAotICAgICAgICAgICAgc2VsZi5vdXQoIHJwcm92aWRlTGluZSApCi0gICAgICAgICAgICBzZWxmLm91dCggIiIgKQorICAgICAgICAgICAgc2VsZi5vdXQoJ1JQUk9WSURFUyArPSAiJXMiJyAlICIgIi5qb2luKHBrZ2xpc3QpKQogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgIwpAQCAtMTQ5LDcgKzE1MCw3IEBACiAgICAgICAgIGxpbmUgPSAnUkRFUEVORFNfJHtQTn0tbW9kdWxlcz0iJwogCiAgICAgICAgIGZvciBuYW1lLCBkYXRhIGluIHNvcnRlZChzZWxmLnBhY2thZ2VzLml0ZW1zKCkpOgotICAgICAgICAgICAgaWYgbmFtZSBub3QgaW4gWycke1BOfS1kZXYnLCAnJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2RldiddOgorICAgICAgICAgICAgaWYgbmFtZSBub3QgaW4gWycke1BOfS1kZXYnLCAnJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2RldiddIGFuZCBuYW1lIG5vdCBpbiBzZWxmLmV4Y2x1ZGVkX3BrZ3M6CiAgICAgICAgICAgICAgICAgbGluZSArPSAiJXMgIiAlIG5hbWUKIAogICAgICAgICBzZWxmLm91dCggIiVzIFwiIiAlIGxpbmUgKQpAQCAtMzg0LDcgKzM4NSw3IEBACiAgICAgInB0eS4qIHR0eS4qIiApCiAKICAgICBtLmFkZFBhY2thZ2UoICIke1BOfS10ZXN0cyIsICJQeXRob24gdGVzdHMiLCAiJHtQTn0tY29yZSAke1BOfS1tb2R1bGVzIiwKLSAgICAidGVzdCIgKSAjIHBhY2thZ2UKKyAgICAidGVzdCIsIFRydWUgKSAjIHBhY2thZ2UKIAogICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXRocmVhZGluZyIsICJQeXRob24gdGhyZWFkaW5nICYgc3luY2hyb25pemF0aW9uIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1sYW5nIiwKICAgICAiX3RocmVhZGluZ19sb2NhbC4qIGR1bW15X3RocmVhZC4qIGR1bW15X3RocmVhZGluZy4qIG11dGV4LiogdGhyZWFkaW5nLiogUXVldWUuKiIgKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9weXRob24vZ2VuZXJhdGUtbWFuaWZlc3QtMy41LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9weXRob24vZ2VuZXJhdGUtbWFuaWZlc3QtMy41LnB5CmluZGV4IDA3NTg2MGMuLjYzNTJmOGYgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTMuNS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3B5dGhvbi9nZW5lcmF0ZS1tYW5pZmVzdC0zLjUucHkKQEAgLTMxLDYgKzMxLDcgQEAKICAgICBkZWYgX19pbml0X18oIHNlbGYsIG91dGZpbGUsIGlzTmF0aXZlICk6CiAgICAgICAgICIiImluaXRpYWxpemUiIiIKICAgICAgICAgc2VsZi5wYWNrYWdlcyA9IHt9CisgICAgICAgIHNlbGYuZXhjbHVkZWRfcGtncyA9IFtdCiAgICAgICAgIHNlbGYudGFyZ2V0UHJlZml4ID0gIiR7bGliZGlyfS9weXRob24lcy8iICUgVkVSU0lPTls6M10KICAgICAgICAgc2VsZi5pc05hdGl2ZSA9IGlzTmF0aXZlCiAgICAgICAgIHNlbGYub3V0cHV0ID0gb3V0ZmlsZQpAQCAtNTUsNyArNTYsNyBAQAogICAgICAgICBzZWxmLm91dCggIiIiICIiIiApCiAgICAgICAgIHNlbGYub3V0KCAiIiApCiAKLSAgICBkZWYgYWRkUGFja2FnZSggc2VsZiwgbmFtZSwgZGVzY3JpcHRpb24sIGRlcGVuZGVuY2llcywgZmlsZW5hbWVzICk6CisgICAgZGVmIGFkZFBhY2thZ2UoIHNlbGYsIG5hbWUsIGRlc2NyaXB0aW9uLCBkZXBlbmRlbmNpZXMsIGZpbGVuYW1lcywgbW9kX2V4Y2x1ZGUgPSBGYWxzZSApOgogICAgICAgICAiIiJhZGQgYSBwYWNrYWdlIHRvIHRoZSBNYWtlZmlsZSIiIgogICAgICAgICBpZiB0eXBlKCBmaWxlbmFtZXMgKSA9PSB0eXBlKCAiIiApOgogICAgICAgICAgICAgZmlsZW5hbWVzID0gZmlsZW5hbWVzLnNwbGl0KCkKQEAgLTY3LDYgKzY4LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnB5Y2FjaGVQYXRoKCBmaWxlbmFtZSApICkgKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmdWxsRmlsZW5hbWVzLmFwcGVuZCggZmlsZW5hbWUgKQorICAgICAgICBpZiBtb2RfZXhjbHVkZToKKyAgICAgICAgICAgIHNlbGYuZXhjbHVkZWRfcGtncy5hcHBlbmQoIG5hbWUgKQogICAgICAgICBzZWxmLnBhY2thZ2VzW25hbWVdID0gZGVzY3JpcHRpb24sIGRlcGVuZGVuY2llcywgZnVsbEZpbGVuYW1lcwogCiAgICAgZGVmIHB5Y2FjaGVQYXRoKCBzZWxmLCBmaWxlbmFtZSApOgpAQCAtODcsMTMgKzkwLDExIEBACiAgICAgICAgICMKIAogICAgICAgICBpZiBzZWxmLmlzTmF0aXZlOgotICAgICAgICAgICAgcnByb3ZpZGVMaW5lID0gJ1JQUk9WSURFUys9IicKLSAgICAgICAgICAgIGZvciBuYW1lIGluIHNvcnRlZChzZWxmLnBhY2thZ2VzKToKLSAgICAgICAgICAgICAgICBycHJvdmlkZUxpbmUgKz0gIiVzLW5hdGl2ZSAiICUgbmFtZS5yZXBsYWNlKCAnJHtQTn0nLCAncHl0aG9uMycgKQotICAgICAgICAgICAgcnByb3ZpZGVMaW5lICs9ICciJworICAgICAgICAgICAgcGtnbGlzdCA9IFtdCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBbJyR7UE59LW1vZHVsZXMnXSArIHNvcnRlZChzZWxmLnBhY2thZ2VzKToKKyAgICAgICAgICAgICAgICBwa2dsaXN0LmFwcGVuZCgnJXMtbmF0aXZlJyAlIG5hbWUucmVwbGFjZSgnJHtQTn0nLCAncHl0aG9uMycpKQogCi0gICAgICAgICAgICBzZWxmLm91dCggcnByb3ZpZGVMaW5lICkKLSAgICAgICAgICAgIHNlbGYub3V0KCAiIiApCisgICAgICAgICAgICBzZWxmLm91dCgnUlBST1ZJREVTICs9ICIlcyInICUgIiAiLmpvaW4ocGtnbGlzdCkpCiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAjCkBAIC0xNjIsNyArMTYzLDcgQEAKICAgICAgICAgbGluZSA9ICdSREVQRU5EU18ke1BOfS1tb2R1bGVzPSInCiAKICAgICAgICAgZm9yIG5hbWUsIGRhdGEgaW4gc29ydGVkKHNlbGYucGFja2FnZXMuaXRlbXMoKSk6Ci0gICAgICAgICAgICBpZiBuYW1lIG5vdCBpbiBbJyR7UE59LWRldicsICcke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2J106CisgICAgICAgICAgICBpZiBuYW1lIG5vdCBpbiBbJyR7UE59LWRldicsICcke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2J10gYW5kIG5hbWUgbm90IGluIHNlbGYuZXhjbHVkZWRfcGtnczoKICAgICAgICAgICAgICAgICBsaW5lICs9ICIlcyAiICUgbmFtZQogCiAgICAgICAgIHNlbGYub3V0KCAiJXMgXCIiICUgbGluZSApCkBAIC0yMjQsNyArMjI1LDcgQEAKICAgICAiJHtiYXNlX2xpYmRpcn0vKi5vICIgKwogICAgICIke2RhdGFkaXJ9L2FjbG9jYWwgIiArCiAgICAgIiR7ZGF0YWRpcn0vcGtnY29uZmlnICIgKwotICAgICJjb25maWcvTWFrZWZpbGUgIikKKyAgICAiY29uZmlnKi9NYWtlZmlsZSAiKQogCiAgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tMnRvMyIsICJQeXRob24gYXV0b21hdGVkIFB5dGhvbiAyIHRvIDMgY29kZSB0cmFuc2xhdG9yIiwgIiR7UE59LWNvcmUiLAogICAgICJsaWIydG8zIiApICMgcGFja2FnZQpAQCAtMjU0LDcgKzI1NSw3IEBACiAgICAgInB5X2NvbXBpbGUuKiBjb21waWxlYWxsLioiICkKIAogICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNvbXByZXNzaW9uIiwgIlB5dGhvbiBoaWdoLWxldmVsIGNvbXByZXNzaW9uIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1jb2RlY3MgJHtQTn0taW1wb3J0bGliICR7UE59LXRocmVhZGluZyAke1BOfS1zaGVsbCIsCi0gICAgImd6aXAuKiB6aXBmaWxlLiogdGFyZmlsZS4qIGxpYi1keW5sb2FkL2J6Mi4qLnNvIGxpYi1keW5sb2FkL3psaWIuKi5zbyIgKQorICAgICJnemlwLiogemlwZmlsZS4qIHRhcmZpbGUuKiBsaWItZHlubG9hZC9iejIuKi5zbyBsaWItZHlubG9hZC96bGliLiouc28gYnoyLnB5IGx6bWEucHkgX2NvbXByZXNzaW9uLnB5IiApCiAKICAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jcnlwdCIsICJQeXRob24gYmFzaWMgY3J5cHRvZ3JhcGhpYyBhbmQgaGFzaGluZyBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAogICAgICJoYXNobGliLiogbWQ1Liogc2hhLiogbGliLWR5bmxvYWQvY3J5cHQuKi5zbyBsaWItZHlubG9hZC9faGFzaGxpYi4qLnNvIGxpYi1keW5sb2FkL19zaGEyNTYuKi5zbyBsaWItZHlubG9hZC9fc2hhNTEyLiouc28iICkKQEAgLTQwMiw4ICs0MDMsOCBAQAogICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXRlcm1pbmFsIiwgIlB5dGhvbiB0ZXJtaW5hbCBjb250cm9sbGluZyBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW8iLAogICAgICJwdHkuKiB0dHkuKiIgKQogCi0gICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tdGVzdHMiLCAiUHl0aG9uIHRlc3RzIiwgIiR7UE59LWNvcmUiLAotICAgICJ0ZXN0IiApICMgcGFja2FnZQorICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXRlc3RzIiwgIlB5dGhvbiB0ZXN0cyIsICIke1BOfS1jb3JlICR7UE59LWNvbXByZXNzaW9uIiwKKyAgICAidGVzdCIsIFRydWUgKSAjIHBhY2thZ2UKIAogICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXRocmVhZGluZyIsICJQeXRob24gdGhyZWFkaW5nICYgc3luY2hyb25pemF0aW9uIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1sYW5nIiwKICAgICAiX3RocmVhZGluZ19sb2NhbC4qIGR1bW15X3RocmVhZC4qIGR1bW15X3RocmVhZGluZy4qIG11dGV4LiogdGhyZWFkaW5nLiogcXVldWUuKiIgKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY3JlYXRlLXB1bGwtcmVxdWVzdCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2NyZWF0ZS1wdWxsLXJlcXVlc3QKaW5kZXggZTgyODU4Yi4uMjgwODgwYiAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvY3JlYXRlLXB1bGwtcmVxdWVzdAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9jcmVhdGUtcHVsbC1yZXF1ZXN0CkBAIC0zNCw3ICszNCw3IEBACiB1c2FnZSgpIHsKIENNRD0kKGJhc2VuYW1lICQwKQogY2F0IDw8RU9NCi1Vc2FnZTogJENNRCBbLWhdIFstbyBvdXRwdXRfZGlyXSBbLW0gbXNnX2JvZHlfZmlsZV0gWy1zIHN1YmplY3RdIFstciByZWxhdGl2ZV90b10gWy1pIGNvbW1pdF9pZF0gWy1kIHJlbGF0aXZlX2Rpcl0gLXUgcmVtb3RlIFstYiBicmFuY2hdCitVc2FnZTogJENNRCBbLWhdIFstbyBvdXRwdXRfZGlyXSBbLW0gbXNnX2JvZHlfZmlsZV0gWy1zIHN1YmplY3RdIFstciByZWxhdGl2ZV90b10gWy1pIGNvbW1pdF9pZF0gWy1kIHJlbGF0aXZlX2Rpcl0gLXUgcmVtb3RlIFstYiBicmFuY2hdIFstLSA8Zm9ybWF0LXBhdGNoIG9wdGlvbnM+XQogICAtYiBicmFuY2ggICAgICAgICAgIEJyYW5jaCBuYW1lIGluIHRoZSBzcGVjaWZpZWQgcmVtb3RlIChkZWZhdWx0OiBjdXJyZW50IGJyYW5jaCkKICAgLWwgbG9jYWwgYnJhbmNoICAgICBMb2NhbCBicmFuY2ggbmFtZSAoZGVmYXVsdDogSEVBRCkKICAgLWMgICAgICAgICAgICAgICAgICBDcmVhdGUgYW4gUkZDIChSZXF1ZXN0IGZvciBDb21tZW50KSBwYXRjaCBzZXJpZXMKQEAgLTU3LDYgKzU3LDcgQEAKICAgICRDTUQgLXUgY29udHJpYiAtciBtYXN0ZXIgLWkgbWlzYyAtYiBuaXRpbi9taXNjIC1vIHB1bGwtbWlzYwogICAgJENNRCAtdSBjb250cmliIC1wICJSRkMgUEFUQ0giIC1iIG5pdGluL2V4cGVyaW1lbnRhbAogICAgJENNRCAtdSBjb250cmliIC1pIG1pc2MgLWIgbml0aW4vbWlzYyAtZCAuL2JpdGJha2UKKyAgICRDTUQgLXUgY29udHJpYiAtciBvcmlnaW4vbWFzdGVyIC1vIC90bXAvb3V0LnYzIC0tIC12MyAtLWluLXJlcGx5LXRvPTIwMTcwNTExMTIwMTM0LlhYNzc5OUBzaXRlLmNvbQogRU9NCiB9CiAKQEAgLTEwOCw5ICsxMDksMTYgQEAKIAlhKQogCQlDUFJfQ09OVFJJQl9BVVRPX1BVU0g9IjEiCiAJCTs7CisJLS0pCisJCXNoaWZ0CisJCWJyZWFrCisJCTs7CiAJZXNhYwogZG9uZQogCitzaGlmdCAiJCgoT1BUSU5EIC0gMSkpIgorZXh0cmFvcHRzPSIkQCIKKwogaWYgWyAteiAiJFJFTU9URSIgXTsgdGhlbgogCWVjaG8gIkVSUk9SOiBNaXNzaW5nIHBhcmFtZXRlciAtdSBvciBDUFJfQ09OVFJJQl9SRU1PVEUgaW4gZW52LCBubyBnaXQgcmVtb3RlISIKIAl1c2FnZQpAQCAtMjAxLDcgKzIwOSw3IEBACiAJT0RJUj0kKHJlYWxwYXRoICRPRElSKQogCXBkaXI9JChwd2QpCiAJY2QgJFJFTERJUgotCWV4dHJhb3B0cz0iLS1yZWxhdGl2ZSIKKwlleHRyYW9wdHM9IiRleHRyYW9wdHMgLS1yZWxhdGl2ZSIKIGZpCiAKICMgR2VuZXJhdGUgdGhlIHBhdGNoZXMgYW5kIGNvdmVyIGxldHRlcgpAQCAtMjE4LDcgKzIyNiw3IEBACiBbIC1uICIkUkVMRElSIiBdICYmIGNkICRwZGlyCiAKICMgQ3VzdG9taXplIHRoZSBjb3ZlciBsZXR0ZXIKLUNMPSIkT0RJUi8wMDAwLWNvdmVyLWxldHRlci5wYXRjaCIKK0NMPSIkKGVjaG8gJE9ESVIvKjAwMDAtY292ZXItbGV0dGVyLnBhdGNoKSIKIFBNPSIkT0RJUi9wdWxsLW1zZyIKIEdJVF9WRVJTSU9OPSQoYGdpdCAtLXZlcnNpb25gIHwgdHIgLWQgJ1s6YWxwaGE6XVs6c3BhY2U6XS4nIHwgc2VkICdzL1woLi4uXCkuKi9cMS8nKQogTkVXRVJfR0lUX1ZFUlNJT049MjEwCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9kZXZ0b29sIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvZGV2dG9vbAppbmRleCBjOWFkOWRkLi41MjkyZjE4IDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9kZXZ0b29sCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2RldnRvb2wKQEAgLTEzMCwyNSArMTMwLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVjaXBlZmlsZSc6IHJlY2lwZWZpbGV9CiAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnRm91bmQgcmVjaXBlICVzJyAlIHdvcmtzcGFjZVtwbl0pCiAKLWRlZiBjcmVhdGVfdW5sb2NrZWRzaWdzKCk6Ci0gICAgIiIiIFRoaXMgZnVuY3Rpb24gd2lsbCBtYWtlIHVubG9ja2VkLXNpZ3MuaW5jIG1hdGNoIHRoZSByZWNpcGVzIGluIHRoZQotICAgIHdvcmtzcGFjZS4gVGhpcyBydW5zIG9uIGV2ZXJ5IHJ1biBvZiBkZXZ0b29sLCBidXQgaXQgbGV0cyB1cyBlbnN1cmUKLSAgICB0aGUgdW5sb2NrZWQgaXRlbXMgYXJlIGluIHN5bmMgd2l0aCB0aGUgd29ya3NwYWNlLiAiIiIKLQotICAgIGNvbmZkaXIgPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICdjb25mJykKLSAgICB1bmxvY2tlZHNpZ3MgPSBvcy5wYXRoLmpvaW4oY29uZmRpciwgJ3VubG9ja2VkLXNpZ3MuaW5jJykKLSAgICBiYi51dGlscy5ta2RpcmhpZXIoY29uZmRpcikKLSAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGNvbmZkaXIsICd1bmxvY2tlZC1zaWdzLmluYycpLCAndycpIGFzIGY6Ci0gICAgICAgIGYud3JpdGUoIiMgRE8gTk9UIE1PRElGWSEgWU9VUiBDSEFOR0VTIFdJTEwgQkUgTE9TVC5cbiIgKwotICAgICAgICAgICAgICAgICIjIFRoaXMgbGF5ZXIgd2FzIGNyZWF0ZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBkZXZ0b29sIiArCi0gICAgICAgICAgICAgICAgIiB1dGlsaXR5IGluIG9yZGVyIHRvXG4iICsKLSAgICAgICAgICAgICAgICAiIyBjb250YWluIHJlY2lwZXMgdGhhdCBhcmUgdW5sb2NrZWQuXG4iKQotCi0gICAgICAgIGYud3JpdGUoJ1NJR0dFTl9VTkxPQ0tFRF9SRUNJUEVTICs9ICJcXFxuJykKLSAgICAgICAgZm9yIHBuIGluIHdvcmtzcGFjZToKLSAgICAgICAgICAgIGYud3JpdGUoJyAgICAnICsgcG4pCi0gICAgICAgIGYud3JpdGUoJyInKQotCiBkZWYgY3JlYXRlX3dvcmtzcGFjZShhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgogICAgIGlmIGFyZ3MubGF5ZXJwYXRoOgogICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmFic3BhdGgoYXJncy5sYXllcnBhdGgpCkBAIC0zMzIsNyArMzEzLDYgQEAKIAogICAgIGlmIG5vdCBnZXRhdHRyKGFyZ3MsICdub193b3Jrc3BhY2UnLCBGYWxzZSk6CiAgICAgICAgIHJlYWRfd29ya3NwYWNlKCkKLSAgICAgICAgY3JlYXRlX3VubG9ja2Vkc2lncygpCiAKICAgICB0cnk6CiAgICAgICAgIHJldCA9IGFyZ3MuZnVuYyhhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYXJncGFyc2Vfb2UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYXJncGFyc2Vfb2UucHkKaW5kZXggYmY2ZWIxNy4uOWJkZmMxYyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2FyZ3BhcnNlX29lLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9hcmdwYXJzZV9vZS5weQpAQCAtMTY3LDMgKzE2NywxMCBAQAogICAgICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBzdXBlcihPZUhlbHBGb3JtYXR0ZXIsIHNlbGYpLl9mb3JtYXRfYWN0aW9uKGFjdGlvbikKKworZGVmIGludF9wb3NpdGl2ZSh2YWx1ZSk6CisgICAgaXZhbHVlID0gaW50KHZhbHVlKQorICAgIGlmIGl2YWx1ZSA8PSAwOgorICAgICAgICByYWlzZSBhcmdwYXJzZS5Bcmd1bWVudFR5cGVFcnJvcigKKyAgICAgICAgICAgICAgICAiJXMgaXMgbm90IGEgcG9zaXRpdmUgaW50IHZhbHVlIiAlIHZhbHVlKQorICAgIHJldHVybiBpdmFsdWUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3AvaGVscC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3AvaGVscC5weQppbmRleCA0ZjBkNzcyLi44NWQ0NDZiIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL2hlbHAucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9oZWxwLnB5CkBAIC04MTgsNiArODE4LDEwIEBACiAKIHlvY3RvX2xheWVyX2NyZWF0ZV91c2FnZSA9ICIiIgogCisgV0FSTklORzogdGhpcyBwbHVnaW4gd2lsbCBiZSByZW1vdmVkIHN0YXJ0aW5nIDIuNSBkZXZlbG9wbWVudCBpbiBmYXZvdXIKKyBvZiB1c2luZyAnYml0YmFrZS1sYXllcnMgY3JlYXRlLWxheWVyJyBzY3JpcHQvcGx1Z2luLCBvZmZlcmluZyBhIHNpbmdsZQorIHNjcmlwdCB0byBtYW5hZ2UgbGF5ZXJzLgorCiAgQ3JlYXRlIGEgbmV3IGdlbmVyaWMgWW9jdG8gbGF5ZXIKIAogIHVzYWdlOiB5b2N0by1sYXllciBjcmVhdGUgPGxheWVyLW5hbWU+IFtsYXllcl9wcmlvcml0eV0KQEAgLTg0NSw2ICs4NDksMTAgQEAKIAogeW9jdG9fbGF5ZXJfY3JlYXRlX2hlbHAgPSAiIiIKIAorV0FSTklORzogdGhpcyBwbHVnaW4gd2lsbCBiZSByZW1vdmVkIHN0YXJ0aW5nIDIuNSBkZXZlbG9wbWVudCBpbiBmYXZvdXIKK29mIHVzaW5nICdiaXRiYWtlLWxheWVycyBjcmVhdGUtbGF5ZXInIHNjcmlwdC9wbHVnaW4sIG9mZmVyaW5nIGEgc2luZ2xlCitzY3JpcHQgdG8gbWFuYWdlIGxheWVycy4KKwogTkFNRQogICAgIHlvY3RvLWxheWVyIGNyZWF0ZSAtIENyZWF0ZSBhIG5ldyBnZW5lcmljIFlvY3RvIGxheWVyCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYwppbmRleCA4Mjg0MDBkLi5mYjM4NjZmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCkBAIC00LDUgKzQsMyBAQAogCiBpbmNsdWRlIGZlYXR1cmVzL3VzYi1uZXQvdXNiLW5ldC5zY2MKIAota2NvbmYgaGFyZHdhcmUge3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZwotaW5jbHVkZSB7ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKaW5kZXggMjBmMjA1OS4uOTE3ZjBlMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCkBAIC0xLDUgKzEsNSBAQAoge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICg0LjEwKSBrZXJuZWw/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ1c2VfZGVmYXVsdF9rZXJuZWwiIHByaW86IjEwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIHVzZSB0aGUgZGVmYXVsdCAoNC4xMikga2VybmVsPyAoeS9uKSIgZGVmYXVsdDoieSJ9fQogCiB7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCB1c2VfZGVmYXVsdF9rZXJuZWwgPT0gIm4iOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToia2VybmVsX2Nob2ljZSIgZ2VuOiJic3Aua2VybmVsLmtlcm5lbHMiIHByaW86IjEwIiBtc2c6IlBsZWFzZSBjaG9vc2UgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhpcyBCU1A6IiBkZWZhdWx0OiJsaW51eC15b2N0b180LjEwIn19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzQuMTIifX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCmluZGV4IGMzMzYwMDcuLjIyZWQyNzMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZApAQCAtMTksNyArMTksMTAgQEAKIHt7IGlmIHNtcCA9PSAieSI6IH19CiBLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgogCi1TUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCiAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMS5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMS5iYmFwcGVuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE1YTE3OC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEuYmJhcHBlbmQKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0jIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzQuMSI6IH19IHRoaXMKLUZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKLQotUFIgOj0gIiR7UFJ9LjEiCi0KLUNPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgotCi17eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KLUtCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCi0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Ci17eyBpZiBzbXAgPT0gInkiOiB9fQotS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKLQotU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCi0gICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCi0gICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAotICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCi0gICAgICAgICAgICIKLQotIyByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAotIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KLVNSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgotU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCi0jTElOVVhfVkVSU0lPTiA9ICI0LjEiCi0jUmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBvbmNlIEFVVE9SRVYgaXMgbG9ja2VkIHRvIGEgY2VydGFpbiBTUkNSRVYKLUtFUk5FTF9WRVJTSU9OX1NBTklUWV9TS0lQID0gIjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEwLmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xMC5iYmFwcGVuZAppbmRleCA1Y2M4MmU4Li5iYWU5NDNlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEwLmJiYXBwZW5kCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMTAuYmJhcHBlbmQKQEAgLTIwLDcgKzIwLDkgQEAKIHt7IGlmIHNtcCA9PSAieSI6IH19CiBLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgogCi1TUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0uc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0uY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKICAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xMi5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMTIuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYzZTEwNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMTIuYmJhcHBlbmQKQEAgLTAsMCArMSwzNyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV80LjEyIjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKKyNMSU5VWF9WRVJTSU9OID0gIjQuMTAiCisjUmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBvbmNlIEFVVE9SRVYgaXMgbG9ja2VkIHRvIGEgY2VydGFpbiBTUkNSRVYKK0tFUk5FTF9WRVJTSU9OX1NBTklUWV9TS0lQID0gIjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjQuYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjQuYmJhcHBlbmQKaW5kZXggMDcwYmQ4Ny4uNjJkMTgxNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC40LmJiYXBwZW5kCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuNC5iYmFwcGVuZApAQCAtMjAsNyArMjAsOSBAQAoge3sgaWYgc21wID09ICJ5IjogfX0KIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCiAKLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjguYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjguYmJhcHBlbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzOTEzMjIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC44LmJiYXBwZW5kCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV80LjgiOiB9fSB0aGlzCi1GSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCi0KLVBSIDo9ICIke1BSfS4xIgotCi1DT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKLQote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Ci1LQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgotCi17eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQote3sgaWYgc21wID09ICJ5IjogfX0KLUtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAotICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAotICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKLSAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAotICAgICAgICAgICAiCi0KLSMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKLSMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCi1TUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKLVNSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgotI0xJTlVYX1ZFUlNJT04gPSAiNC44IgotI1JlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgb25jZSBBVVRPUkVWIGlzIGxvY2tlZCB0byBhIGNlcnRhaW4gU1JDUkVWCi1LRVJORUxfVkVSU0lPTl9TQU5JVFlfU0tJUCA9ICIxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMS5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEuYmJhcHBlbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlN2Q3Y2IuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMS5iYmFwcGVuZAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzQuMSI6IH19IHRoaXMKLUZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKLQotUFIgOj0gIiR7UFJ9LjEiCi0KLUNPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgotCi17eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Ci1LQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgotCi17eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQote3sgaWYgc21wID09ICJ5IjogfX0KLUtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKLSAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKLSAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAotICAgICAgICAgICAiCi0KLSMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKLSMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCi1TUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCi1TUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCi0jTElOVVhfVkVSU0lPTiA9ICI0LjEiCi0jUmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBvbmNlIEFVVE9SRVYgaXMgbG9ja2VkIHRvIGEgY2VydGFpbiBTUkNSRVYKLUtFUk5FTF9WRVJTSU9OX1NBTklUWV9TS0lQID0gIjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xMC5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEwLmJiYXBwZW5kCmluZGV4IGVhZjQzNjcuLmRmYmVjYjUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEwLmJiYXBwZW5kCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEwLmJiYXBwZW5kCkBAIC0yMCw5ICsyMCwxMiBAQAoge3sgaWYgc21wID09ICJ5IjogfX0KIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCiAKLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0uc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0uY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKICAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKICAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKICAgICAgICAgICAgIgogCiAjIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xMi5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEyLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NzRjOWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xMi5iYmFwcGVuZApAQCAtMCwwICsxLDM3IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b180LjEyIjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCitTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCisjTElOVVhfVkVSU0lPTiA9ICI0LjEwIgorI1JlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgb25jZSBBVVRPUkVWIGlzIGxvY2tlZCB0byBhIGNlcnRhaW4gU1JDUkVWCitLRVJORUxfVkVSU0lPTl9TQU5JVFlfU0tJUCA9ICIxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuNC5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjQuYmJhcHBlbmQKaW5kZXggNTZlOGFkMy4uYTgwOWM3NiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuNC5iYmFwcGVuZAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC40LmJiYXBwZW5kCkBAIC0yMCw5ICsyMCwxMiBAQAoge3sgaWYgc21wID09ICJ5IjogfX0KIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCiAKLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0uc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0uY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKICAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKICAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKICAgICAgICAgICAgIgogCiAjIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC44LmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOC5iYmFwcGVuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk3NTJhOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC44LmJiYXBwZW5kCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fNC44IjogfX0gdGhpcwotRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgotCi1QUiA6PSAiJHtQUn0uMSIKLQotQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCi0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KLUtCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCi0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Ci17eyBpZiBzbXAgPT0gInkiOiB9fQotS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKLQotU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAotICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAotICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCi0gICAgICAgICAgICIKLQotIyByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAotIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KLVNSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKLVNSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKLSNMSU5VWF9WRVJTSU9OID0gIjQuOCIKLSNSZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lIG9uY2UgQVVUT1JFViBpcyBsb2NrZWQgdG8gYSBjZXJ0YWluIFNSQ1JFVgotS0VSTkVMX1ZFUlNJT05fU0FOSVRZX1NLSVAgPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20uYmIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tLmJiCmluZGV4IGZkYTk1NWIuLjNiYTQyMjYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20uYmIKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS5iYgpAQCAtNDIsNiArNDIsNyBAQAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS5jZmcgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAogICAgICAgICAgICAiCiAKIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSIgYW5kIGN1c3RvbV9rZXJuZWxfbmVlZF9rYnJhbmNoID09ICJ5IiBhbmQgY3VzdG9tX2tlcm5lbF9rYnJhbmNoIGFuZCBjdXN0b21fa2VybmVsX2ticmFuY2ggIT0gIm1hc3RlciI6IH19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgyNzU5ZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vbWFjaGluZS5zY2MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL21hY2hpbmUuc2NjCmluZGV4IDBiNmI0MTMuLjY0ZDNlZDEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vbWFjaGluZS5zY2MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9tYWNoaW5lLnNjYwpAQCAtMTQsNSArMTQsMyBAQAogIyBUaGVzZSBhcmUgdXNlZCBieSB5b2N0by1rZXJuZWwgdG8gYWRkIGNvbmZpZyBmcmFnbWVudHMgYW5kIGZlYXR1cmVzLgogIyBEb24ndCByZW1vdmUgaWYgeW91IHBsYW4gb24gdXNpbmcgeW9jdG8ta2VybmVsIHdpdGggdGhpcyBCU1AuCiAKLWtjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcKLWluY2x1ZGUge3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCmluZGV4IDNkMzJmMTEuLjNlNGM1NGYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYwpAQCAtMTcsNSArMTcsMyBAQAogaW5jbHVkZSBjZmcvYm9vdC1saXZlLnNjYwogaW5jbHVkZSBmZWF0dXJlcy9wb3dlci9pbnRlbC5zY2MKIAota2NvbmYgaGFyZHdhcmUge3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZwotaW5jbHVkZSB7ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbAppbmRleCAyMGYyMDU5Li45MTdmMGUyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApAQCAtMSw1ICsxLDUgQEAKIHt7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19Ci17eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ1c2VfZGVmYXVsdF9rZXJuZWwiIHByaW86IjEwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIHVzZSB0aGUgZGVmYXVsdCAoNC4xMCkga2VybmVsPyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToidXNlX2RlZmF1bHRfa2VybmVsIiBwcmlvOiIxMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSB0byB1c2UgdGhlIGRlZmF1bHQgKDQuMTIpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KIAoge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQgdXNlX2RlZmF1bHRfa2VybmVsID09ICJuIjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Imtlcm5lbF9jaG9pY2UiIGdlbjoiYnNwLmtlcm5lbC5rZXJuZWxzIiBwcmlvOiIxMCIgbXNnOiJQbGVhc2UgY2hvb3NlIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoaXMgQlNQOiIgZGVmYXVsdDoibGludXgteW9jdG9fNC4xMCJ9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToia2VybmVsX2Nob2ljZSIgZ2VuOiJic3Aua2VybmVsLmtlcm5lbHMiIHByaW86IjEwIiBtc2c6IlBsZWFzZSBjaG9vc2UgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhpcyBCU1A6IiBkZWZhdWx0OiJsaW51eC15b2N0b180LjEyIn19CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCmluZGV4IGMzMzYwMDcuLjIyZWQyNzMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCkBAIC0xOSw3ICsxOSwxMCBAQAoge3sgaWYgc21wID09ICJ5IjogfX0KIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCiAKLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0uc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0uY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKICAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKICAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMS5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEuYmJhcHBlbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxNWExNzguLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMS5iYmFwcGVuZAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfNC4xIjogfX0gdGhpcwotRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgotCi1QUiA6PSAiJHtQUn0uMSIKLQotQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCi0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQotS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKLQote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KLXt7IGlmIHNtcCA9PSAieSI6IH19Ci1LRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgotCi1TUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKLSAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKLSAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCi0gICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKLSAgICAgICAgICAgIgotCi0jIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCi0jIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbwotU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCi1TUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKLSNMSU5VWF9WRVJTSU9OID0gIjQuMSIKLSNSZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lIG9uY2UgQVVUT1JFViBpcyBsb2NrZWQgdG8gYSBjZXJ0YWluIFNSQ1JFVgotS0VSTkVMX1ZFUlNJT05fU0FOSVRZX1NLSVAgPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEwLmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMTAuYmJhcHBlbmQKaW5kZXggNWNjODJlOC4uYmFlOTQzZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMTAuYmJhcHBlbmQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMTAuYmJhcHBlbmQKQEAgLTIwLDcgKzIwLDkgQEAKIHt7IGlmIHNtcCA9PSAieSI6IH19CiBLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgogCi1TUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0uc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0uY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKICAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMTIuYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xMi5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjNlMTA0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMTIuYmJhcHBlbmQKQEAgLTAsMCArMSwzNyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV80LjEyIjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKKyNMSU5VWF9WRVJTSU9OID0gIjQuMTAiCisjUmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBvbmNlIEFVVE9SRVYgaXMgbG9ja2VkIHRvIGEgY2VydGFpbiBTUkNSRVYKK0tFUk5FTF9WRVJTSU9OX1NBTklUWV9TS0lQID0gIjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC40LmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuNC5iYmFwcGVuZAppbmRleCAwNzBiZDg3Li42MmQxODE3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC40LmJiYXBwZW5kCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjQuYmJhcHBlbmQKQEAgLTIwLDcgKzIwLDkgQEAKIHt7IGlmIHNtcCA9PSAieSI6IH19CiBLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgogCi1TUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0uc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0uY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKICAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuOC5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjguYmJhcHBlbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzOTEzMjIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuOC5iYmFwcGVuZAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfNC44IjogfX0gdGhpcwotRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgotCi1QUiA6PSAiJHtQUn0uMSIKLQotQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCi0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQotS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKLQote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KLXt7IGlmIHNtcCA9PSAieSI6IH19Ci1LRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgotCi1TUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKLSAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKLSAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCi0gICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKLSAgICAgICAgICAgIgotCi0jIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCi0jIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbwotU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCi1TUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKLSNMSU5VWF9WRVJTSU9OID0gIjQuOCIKLSNSZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lIG9uY2UgQVVUT1JFViBpcyBsb2NrZWQgdG8gYSBjZXJ0YWluIFNSQ1JFVgotS0VSTkVMX1ZFUlNJT05fU0FOSVRZX1NLSVAgPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xLmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEuYmJhcHBlbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlZDE0NGIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEuYmJhcHBlbmQKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0jIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b180LjEiOiB9fSB0aGlzCi1GSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCi0KLVBSIDo9ICIke1BSfS4xIgotCi1DT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKLQote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQotS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKLQote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KLXt7IGlmIHNtcCA9PSAieSI6IH19Ci1LRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgotCi1TUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCi0gICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCi0gICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKLSAgICAgICAgICAgIgotCi0jIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCi0jIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbwotU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgotU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgotI0xJTlVYX1ZFUlNJT04gPSAiNC4xIgotI1JlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgb25jZSBBVVRPUkVWIGlzIGxvY2tlZCB0byBhIGNlcnRhaW4gU1JDUkVWCi1LRVJORUxfVkVSU0lPTl9TQU5JVFlfU0tJUCA9ICIxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEwLmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEwLmJiYXBwZW5kCmluZGV4IDAyMDU5MjAuLmY4NjE2ZWQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xMC5iYmFwcGVuZAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMTAuYmJhcHBlbmQKQEAgLTIwLDkgKzIwLDEyIEBACiB7eyBpZiBzbXAgPT0gInkiOiB9fQogS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKIAotU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAogICAgICAgICAgICAiCiAKICMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xMi5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xMi5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGQ1N2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEyLmJiYXBwZW5kCkBAIC0wLDAgKzEsMzcgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzQuMTIiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICIKKworIyByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KK1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKKyNMSU5VWF9WRVJTSU9OID0gIjQuMTAiCisjUmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBvbmNlIEFVVE9SRVYgaXMgbG9ja2VkIHRvIGEgY2VydGFpbiBTUkNSRVYKK0tFUk5FTF9WRVJTSU9OX1NBTklUWV9TS0lQID0gIjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuNC5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC40LmJiYXBwZW5kCmluZGV4IGFiNjQ0YmQuLjBhOWQ0NzUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC40LmJiYXBwZW5kCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC40LmJiYXBwZW5kCkBAIC0yMCw5ICsyMCwxMiBAQAoge3sgaWYgc21wID09ICJ5IjogfX0KIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCiAKLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0uc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0uY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKICAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKICAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKICAgICAgICAgICAgIgogCiAjIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOC5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC44LmJiYXBwZW5kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTM1YWVhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC44LmJiYXBwZW5kCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fNC44IjogfX0gdGhpcwotRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgotCi1QUiA6PSAiJHtQUn0uMSIKLQotQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCi0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KLUtCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCi0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Ci17eyBpZiBzbXAgPT0gInkiOiB9fQotS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKLQotU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAotICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAotICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCi0gICAgICAgICAgICIKLQotIyByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAotIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KLVNSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKLVNSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKLSNMSU5VWF9WRVJTSU9OID0gIjQuOCIKLSNSZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lIG9uY2UgQVVUT1JFViBpcyBsb2NrZWQgdG8gYSBjZXJ0YWluIFNSQ1JFVgotS0VSTkVMX1ZFUlNJT05fU0FOSVRZX1NLSVAgPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCmluZGV4IGYzOWRjM2UuLjc5MmZkYzkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYwpAQCAtNCw1ICs0LDMgQEAKIGluY2x1ZGUgY2ZnL3VzYi1tYXNzLXN0b3JhZ2Uuc2NjCiBpbmNsdWRlIGNmZy9mcy92ZmF0LnNjYwogCi1rY29uZiBoYXJkd2FyZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnCi1pbmNsdWRlIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCmluZGV4IDIwZjIwNTkuLjkxN2YwZTIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCkBAIC0xLDUgKzEsNSBAQAoge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICg0LjEwKSBrZXJuZWw/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ1c2VfZGVmYXVsdF9rZXJuZWwiIHByaW86IjEwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIHVzZSB0aGUgZGVmYXVsdCAoNC4xMikga2VybmVsPyAoeS9uKSIgZGVmYXVsdDoieSJ9fQogCiB7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCB1c2VfZGVmYXVsdF9rZXJuZWwgPT0gIm4iOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToia2VybmVsX2Nob2ljZSIgZ2VuOiJic3Aua2VybmVsLmtlcm5lbHMiIHByaW86IjEwIiBtc2c6IlBsZWFzZSBjaG9vc2UgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhpcyBCU1A6IiBkZWZhdWx0OiJsaW51eC15b2N0b180LjEwIn19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzQuMTIifX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKaW5kZXggYzMzNjAwNy4uMjJlZDI3MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKQEAgLTE5LDcgKzE5LDEwIEBACiB7eyBpZiBzbXAgPT0gInkiOiB9fQogS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKIAotU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAogICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xLmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMS5iYmFwcGVuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE1YTE3OC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xLmJiYXBwZW5kCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV80LjEiOiB9fSB0aGlzCi1GSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCi0KLVBSIDo9ICIke1BSfS4xIgotCi1DT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKLQote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Ci1LQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgotCi17eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQote3sgaWYgc21wID09ICJ5IjogfX0KLUtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAotICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAotICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKLSAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAotICAgICAgICAgICAiCi0KLSMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKLSMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCi1TUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKLVNSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgotI0xJTlVYX1ZFUlNJT04gPSAiNC4xIgotI1JlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgb25jZSBBVVRPUkVWIGlzIGxvY2tlZCB0byBhIGNlcnRhaW4gU1JDUkVWCi1LRVJORUxfVkVSU0lPTl9TQU5JVFlfU0tJUCA9ICIxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMTAuYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xMC5iYmFwcGVuZAppbmRleCA1Y2M4MmU4Li5iYWU5NDNlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xMC5iYmFwcGVuZAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xMC5iYmFwcGVuZApAQCAtMjAsNyArMjAsOSBAQAoge3sgaWYgc21wID09ICJ5IjogfX0KIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCiAKLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xMi5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEyLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmM2UxMDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xMi5iYmFwcGVuZApAQCAtMCwwICsxLDM3IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzQuMTIiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0uc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0uY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCitTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorI0xJTlVYX1ZFUlNJT04gPSAiNC4xMCIKKyNSZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lIG9uY2UgQVVUT1JFViBpcyBsb2NrZWQgdG8gYSBjZXJ0YWluIFNSQ1JFVgorS0VSTkVMX1ZFUlNJT05fU0FOSVRZX1NLSVAgPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjQuYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC40LmJiYXBwZW5kCmluZGV4IDA3MGJkODcuLjYyZDE4MTcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjQuYmJhcHBlbmQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuNC5iYmFwcGVuZApAQCAtMjAsNyArMjAsOSBAQAoge3sgaWYgc21wID09ICJ5IjogfX0KIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCiAKLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC44LmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuOC5iYmFwcGVuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM5MTMyMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC44LmJiYXBwZW5kCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV80LjgiOiB9fSB0aGlzCi1GSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCi0KLVBSIDo9ICIke1BSfS4xIgotCi1DT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKLQote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Ci1LQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgotCi17eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQote3sgaWYgc21wID09ICJ5IjogfX0KLUtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAotICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAotICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKLSAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAotICAgICAgICAgICAiCi0KLSMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKLSMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCi1TUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKLVNSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgotI0xJTlVYX1ZFUlNJT04gPSAiNC44IgotI1JlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgb25jZSBBVVRPUkVWIGlzIGxvY2tlZCB0byBhIGNlcnRhaW4gU1JDUkVWCi1LRVJORUxfVkVSU0lPTl9TQU5JVFlfU0tJUCA9ICIxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEuYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMS5iYmFwcGVuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU3ZDdjYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMS5iYmFwcGVuZAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzQuMSI6IH19IHRoaXMKLUZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKLQotUFIgOj0gIiR7UFJ9LjEiCi0KLUNPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgotCi17eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Ci1LQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgotCi17eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQote3sgaWYgc21wID09ICJ5IjogfX0KLUtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKLSAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKLSAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAotICAgICAgICAgICAiCi0KLSMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKLSMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCi1TUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCi1TUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCi0jTElOVVhfVkVSU0lPTiA9ICI0LjEiCi0jUmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBvbmNlIEFVVE9SRVYgaXMgbG9ja2VkIHRvIGEgY2VydGFpbiBTUkNSRVYKLUtFUk5FTF9WRVJTSU9OX1NBTklUWV9TS0lQID0gIjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMTAuYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMTAuYmJhcHBlbmQKaW5kZXggZWFmNDM2Ny4uZGZiZWNiNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEwLmJiYXBwZW5kCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xMC5iYmFwcGVuZApAQCAtMjAsOSArMjAsMTIgQEAKIHt7IGlmIHNtcCA9PSAieSI6IH19CiBLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgogCi1TUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCiAgICAgICAgICAgICIKIAogIyByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEyLmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEyLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NzRjOWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMTIuYmJhcHBlbmQKQEAgLTAsMCArMSwzNyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fNC4xMiI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0uc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0uY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorI0xJTlVYX1ZFUlNJT04gPSAiNC4xMCIKKyNSZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lIG9uY2UgQVVUT1JFViBpcyBsb2NrZWQgdG8gYSBjZXJ0YWluIFNSQ1JFVgorS0VSTkVMX1ZFUlNJT05fU0FOSVRZX1NLSVAgPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC40LmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjQuYmJhcHBlbmQKaW5kZXggNTZlOGFkMy4uYTgwOWM3NiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjQuYmJhcHBlbmQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjQuYmJhcHBlbmQKQEAgLTIwLDkgKzIwLDEyIEBACiB7eyBpZiBzbXAgPT0gInkiOiB9fQogS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKIAotU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAogICAgICAgICAgICAiCiAKICMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC44LmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5NzUyYTkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0jIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b180LjgiOiB9fSB0aGlzCi1GSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCi0KLVBSIDo9ICIke1BSfS4xIgotCi1DT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKLQote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQotS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKLQote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KLXt7IGlmIHNtcCA9PSAieSI6IH19Ci1LRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgotCi1TUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCi0gICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCi0gICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKLSAgICAgICAgICAgIgotCi0jIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCi0jIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbwotU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgotU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgotI0xJTlVYX1ZFUlNJT04gPSAiNC44IgotI1JlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgb25jZSBBVVRPUkVWIGlzIGxvY2tlZCB0byBhIGNlcnRhaW4gU1JDUkVWCi1LRVJORUxfVkVSU0lPTl9TQU5JVFlfU0tJUCA9ICIxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCmluZGV4IGYzOWRjM2UuLjc5MmZkYzkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKQEAgLTQsNSArNCwzIEBACiBpbmNsdWRlIGNmZy91c2ItbWFzcy1zdG9yYWdlLnNjYwogaW5jbHVkZSBjZmcvZnMvdmZhdC5zY2MKIAota2NvbmYgaGFyZHdhcmUge3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZwotaW5jbHVkZSB7ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKaW5kZXggMjBmMjA1OS4uOTE3ZjBlMiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCkBAIC0xLDUgKzEsNSBAQAoge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICg0LjEwKSBrZXJuZWw/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ1c2VfZGVmYXVsdF9rZXJuZWwiIHByaW86IjEwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIHVzZSB0aGUgZGVmYXVsdCAoNC4xMikga2VybmVsPyAoeS9uKSIgZGVmYXVsdDoieSJ9fQogCiB7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCB1c2VfZGVmYXVsdF9rZXJuZWwgPT0gIm4iOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToia2VybmVsX2Nob2ljZSIgZ2VuOiJic3Aua2VybmVsLmtlcm5lbHMiIHByaW86IjEwIiBtc2c6IlBsZWFzZSBjaG9vc2UgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhpcyBCU1A6IiBkZWZhdWx0OiJsaW51eC15b2N0b180LjEwIn19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzQuMTIifX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCmluZGV4IGMzMzYwMDcuLjIyZWQyNzMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZApAQCAtMTksNyArMTksMTAgQEAKIHt7IGlmIHNtcCA9PSAieSI6IH19CiBLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgogCi1TUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCiAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMS5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMS5iYmFwcGVuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE1YTE3OC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEuYmJhcHBlbmQKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0jIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzQuMSI6IH19IHRoaXMKLUZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKLQotUFIgOj0gIiR7UFJ9LjEiCi0KLUNPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgotCi17eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KLUtCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCi0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Ci17eyBpZiBzbXAgPT0gInkiOiB9fQotS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKLQotU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCi0gICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCi0gICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAotICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCi0gICAgICAgICAgICIKLQotIyByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAotIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KLVNSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgotU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCi0jTElOVVhfVkVSU0lPTiA9ICI0LjEiCi0jUmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBvbmNlIEFVVE9SRVYgaXMgbG9ja2VkIHRvIGEgY2VydGFpbiBTUkNSRVYKLUtFUk5FTF9WRVJTSU9OX1NBTklUWV9TS0lQID0gIjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEwLmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xMC5iYmFwcGVuZAppbmRleCA1Y2M4MmU4Li5iYWU5NDNlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEwLmJiYXBwZW5kCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMTAuYmJhcHBlbmQKQEAgLTIwLDcgKzIwLDkgQEAKIHt7IGlmIHNtcCA9PSAieSI6IH19CiBLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgogCi1TUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0uc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0uY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKICAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xMi5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMTIuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYzZTEwNAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMTIuYmJhcHBlbmQKQEAgLTAsMCArMSwzNyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV80LjEyIjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKKyNMSU5VWF9WRVJTSU9OID0gIjQuMTAiCisjUmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBvbmNlIEFVVE9SRVYgaXMgbG9ja2VkIHRvIGEgY2VydGFpbiBTUkNSRVYKK0tFUk5FTF9WRVJTSU9OX1NBTklUWV9TS0lQID0gIjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjQuYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjQuYmJhcHBlbmQKaW5kZXggMDcwYmQ4Ny4uNjJkMTgxNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC40LmJiYXBwZW5kCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuNC5iYmFwcGVuZApAQCAtMjAsNyArMjAsOSBAQAoge3sgaWYgc21wID09ICJ5IjogfX0KIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCiAKLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjguYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjguYmJhcHBlbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzOTEzMjIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC44LmJiYXBwZW5kCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV80LjgiOiB9fSB0aGlzCi1GSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCi0KLVBSIDo9ICIke1BSfS4xIgotCi1DT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKLQote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Ci1LQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgotCi17eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQote3sgaWYgc21wID09ICJ5IjogfX0KLUtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAotICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAotICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKLSAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAotICAgICAgICAgICAiCi0KLSMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKLSMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCi1TUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKLVNSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgotI0xJTlVYX1ZFUlNJT04gPSAiNC44IgotI1JlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgb25jZSBBVVRPUkVWIGlzIGxvY2tlZCB0byBhIGNlcnRhaW4gU1JDUkVWCi1LRVJORUxfVkVSU0lPTl9TQU5JVFlfU0tJUCA9ICIxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMS5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEuYmJhcHBlbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwMmU1ZjQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMS5iYmFwcGVuZAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzQuMSI6IH19IHRoaXMKLUZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKLQotUFIgOj0gIiR7UFJ9LjEiCi0KLUNPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgotCi17eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2VkZ2Vyb3V0ZXIiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvZWRnZXJvdXRlciIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Ci1LQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgotCi17eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQote3sgaWYgc21wID09ICJ5IjogfX0KLUtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKLSAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKLSAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAotICAgICAgICAgICAiCi0KLSMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKLSMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCi1TUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCi1TUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCi0jTElOVVhfVkVSU0lPTiA9ICI0LjEiCi0jUmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBvbmNlIEFVVE9SRVYgaXMgbG9ja2VkIHRvIGEgY2VydGFpbiBTUkNSRVYKLUtFUk5FTF9WRVJTSU9OX1NBTklUWV9TS0lQID0gIjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xMC5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEwLmJiYXBwZW5kCmluZGV4IDUxMmI1OTcuLjMzNmE5NTYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEwLmJiYXBwZW5kCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEwLmJiYXBwZW5kCkBAIC0yMCw5ICsyMCwxMiBAQAoge3sgaWYgc21wID09ICJ5IjogfX0KIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCiAKLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0uc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0uY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKICAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKICAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKICAgICAgICAgICAgIgogCiAjIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xMi5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEyLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMzNjMzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xMi5iYmFwcGVuZApAQCAtMCwwICsxLDM3IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b180LjEyIjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvZWRnZXJvdXRlciIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9lZGdlcm91dGVyIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCitTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCisjTElOVVhfVkVSU0lPTiA9ICI0LjEwIgorI1JlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgb25jZSBBVVRPUkVWIGlzIGxvY2tlZCB0byBhIGNlcnRhaW4gU1JDUkVWCitLRVJORUxfVkVSU0lPTl9TQU5JVFlfU0tJUCA9ICIxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuNC5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjQuYmJhcHBlbmQKaW5kZXggZGJiMGZkNS4uN2QxODU2NiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuNC5iYmFwcGVuZAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC40LmJiYXBwZW5kCkBAIC0yMCw5ICsyMCwxMiBAQAoge3sgaWYgc21wID09ICJ5IjogfX0KIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCiAKLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0uc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0uY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKICAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKICAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKICAgICAgICAgICAgIgogCiAjIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC44LmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuOC5iYmFwcGVuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJlYjQwZC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC44LmJiYXBwZW5kCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fNC44IjogfX0gdGhpcwotRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgotCi1QUiA6PSAiJHtQUn0uMSIKLQotQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCi0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvZWRnZXJvdXRlciIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9lZGdlcm91dGVyIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KLUtCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCi0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Ci17eyBpZiBzbXAgPT0gInkiOiB9fQotS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKLQotU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAotICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAotICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCi0gICAgICAgICAgICIKLQotIyByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAotIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KLVNSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKLVNSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKLSNMSU5VWF9WRVJTSU9OID0gIjQuOCIKLSNSZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lIG9uY2UgQVVUT1JFViBpcyBsb2NrZWQgdG8gYSBjZXJ0YWluIFNSQ1JFVgotS0VSTkVMX1ZFUlNJT05fU0FOSVRZX1NLSVAgPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCmluZGV4IDdhYWM4YjAuLjg5YmI5N2UgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYwpAQCAtNiw1ICs2LDMgQEAKIAogaW5jbHVkZSBjZmcvZG1hZW5naW5lLnNjYwogCi1rY29uZiBoYXJkd2FyZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnCi1pbmNsdWRlIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCmluZGV4IDIwZjIwNTkuLjkxN2YwZTIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCkBAIC0xLDUgKzEsNSBAQAoge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICg0LjEwKSBrZXJuZWw/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ1c2VfZGVmYXVsdF9rZXJuZWwiIHByaW86IjEwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIHVzZSB0aGUgZGVmYXVsdCAoNC4xMikga2VybmVsPyAoeS9uKSIgZGVmYXVsdDoieSJ9fQogCiB7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCB1c2VfZGVmYXVsdF9rZXJuZWwgPT0gIm4iOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToia2VybmVsX2Nob2ljZSIgZ2VuOiJic3Aua2VybmVsLmtlcm5lbHMiIHByaW86IjEwIiBtc2c6IlBsZWFzZSBjaG9vc2UgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhpcyBCU1A6IiBkZWZhdWx0OiJsaW51eC15b2N0b180LjEwIn19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzQuMTIifX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKaW5kZXggYzMzNjAwNy4uMjJlZDI3MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKQEAgLTE5LDcgKzE5LDEwIEBACiB7eyBpZiBzbXAgPT0gInkiOiB9fQogS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKIAotU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAogICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xLmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMS5iYmFwcGVuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE1YTE3OC4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xLmJiYXBwZW5kCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV80LjEiOiB9fSB0aGlzCi1GSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCi0KLVBSIDo9ICIke1BSfS4xIgotCi1DT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKLQote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Ci1LQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgotCi17eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQote3sgaWYgc21wID09ICJ5IjogfX0KLUtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAotICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAotICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKLSAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAotICAgICAgICAgICAiCi0KLSMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKLSMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCi1TUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKLVNSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgotI0xJTlVYX1ZFUlNJT04gPSAiNC4xIgotI1JlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgb25jZSBBVVRPUkVWIGlzIGxvY2tlZCB0byBhIGNlcnRhaW4gU1JDUkVWCi1LRVJORUxfVkVSU0lPTl9TQU5JVFlfU0tJUCA9ICIxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMTAuYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xMC5iYmFwcGVuZAppbmRleCA1Y2M4MmU4Li5iYWU5NDNlIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xMC5iYmFwcGVuZAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xMC5iYmFwcGVuZApAQCAtMjAsNyArMjAsOSBAQAoge3sgaWYgc21wID09ICJ5IjogfX0KIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCiAKLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xMi5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEyLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmM2UxMDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xMi5iYmFwcGVuZApAQCAtMCwwICsxLDM3IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzQuMTIiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0uc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0uY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCitTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorI0xJTlVYX1ZFUlNJT04gPSAiNC4xMCIKKyNSZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lIG9uY2UgQVVUT1JFViBpcyBsb2NrZWQgdG8gYSBjZXJ0YWluIFNSQ1JFVgorS0VSTkVMX1ZFUlNJT05fU0FOSVRZX1NLSVAgPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjQuYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC40LmJiYXBwZW5kCmluZGV4IDA3MGJkODcuLjYyZDE4MTcgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjQuYmJhcHBlbmQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuNC5iYmFwcGVuZApAQCAtMjAsNyArMjAsOSBAQAoge3sgaWYgc21wID09ICJ5IjogfX0KIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCiAKLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC44LmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuOC5iYmFwcGVuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM5MTMyMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC44LmJiYXBwZW5kCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV80LjgiOiB9fSB0aGlzCi1GSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCi0KLVBSIDo9ICIke1BSfS4xIgotCi1DT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKLQote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Ci1LQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgotCi17eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQote3sgaWYgc21wID09ICJ5IjogfX0KLUtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAotICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAotICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKLSAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAotICAgICAgICAgICAiCi0KLSMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKLSMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCi1TUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKLVNSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgotI0xJTlVYX1ZFUlNJT04gPSAiNC44IgotI1JlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgb25jZSBBVVRPUkVWIGlzIGxvY2tlZCB0byBhIGNlcnRhaW4gU1JDUkVWCi1LRVJORUxfVkVSU0lPTl9TQU5JVFlfU0tJUCA9ICIxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEuYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMS5iYmFwcGVuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU3ZDdjYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMS5iYmFwcGVuZAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzQuMSI6IH19IHRoaXMKLUZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKLQotUFIgOj0gIiR7UFJ9LjEiCi0KLUNPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgotCi17eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Ci1LQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgotCi17eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQote3sgaWYgc21wID09ICJ5IjogfX0KLUtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKLSAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKLSAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAotICAgICAgICAgICAiCi0KLSMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKLSMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCi1TUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCi1TUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCi0jTElOVVhfVkVSU0lPTiA9ICI0LjEiCi0jUmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBvbmNlIEFVVE9SRVYgaXMgbG9ja2VkIHRvIGEgY2VydGFpbiBTUkNSRVYKLUtFUk5FTF9WRVJTSU9OX1NBTklUWV9TS0lQID0gIjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMTAuYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMTAuYmJhcHBlbmQKaW5kZXggZWFmNDM2Ny4uZGZiZWNiNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEwLmJiYXBwZW5kCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xMC5iYmFwcGVuZApAQCAtMjAsOSArMjAsMTIgQEAKIHt7IGlmIHNtcCA9PSAieSI6IH19CiBLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgogCi1TUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCiAgICAgICAgICAgICIKIAogIyByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEyLmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEyLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NzRjOWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMTIuYmJhcHBlbmQKQEAgLTAsMCArMSwzNyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fNC4xMiI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0uc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0uY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorI0xJTlVYX1ZFUlNJT04gPSAiNC4xMCIKKyNSZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lIG9uY2UgQVVUT1JFViBpcyBsb2NrZWQgdG8gYSBjZXJ0YWluIFNSQ1JFVgorS0VSTkVMX1ZFUlNJT05fU0FOSVRZX1NLSVAgPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC40LmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjQuYmJhcHBlbmQKaW5kZXggNTZlOGFkMy4uYTgwOWM3NiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjQuYmJhcHBlbmQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjQuYmJhcHBlbmQKQEAgLTIwLDkgKzIwLDEyIEBACiB7eyBpZiBzbXAgPT0gInkiOiB9fQogS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKIAotU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAogICAgICAgICAgICAiCiAKICMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC44LmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5NzUyYTkuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0jIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b180LjgiOiB9fSB0aGlzCi1GSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCi0KLVBSIDo9ICIke1BSfS4xIgotCi1DT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKLQote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQotS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKLQote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KLXt7IGlmIHNtcCA9PSAieSI6IH19Ci1LRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgotCi1TUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCi0gICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCi0gICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKLSAgICAgICAgICAgIgotCi0jIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCi0jIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbwotU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgotU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgotI0xJTlVYX1ZFUlNJT04gPSAiNC44IgotI1JlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgb25jZSBBVVRPUkVWIGlzIGxvY2tlZCB0byBhIGNlcnRhaW4gU1JDUkVWCi1LRVJORUxfVkVSU0lPTl9TQU5JVFlfU0tJUCA9ICIxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKaW5kZXggODMwMWUwNS4uZDI1ZDBhMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCkBAIC0xLDUgKzEsMyBAQAogIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LnNjYwoga2NvbmYgaGFyZHdhcmUge3s9bWFjaGluZX19LmNmZwogCi1rY29uZiBoYXJkd2FyZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnCi1pbmNsdWRlIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCmluZGV4IDIwZjIwNTkuLjkxN2YwZTIgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCkBAIC0xLDUgKzEsNSBAQAoge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICg0LjEwKSBrZXJuZWw/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ1c2VfZGVmYXVsdF9rZXJuZWwiIHByaW86IjEwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIHVzZSB0aGUgZGVmYXVsdCAoNC4xMikga2VybmVsPyAoeS9uKSIgZGVmYXVsdDoieSJ9fQogCiB7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCB1c2VfZGVmYXVsdF9rZXJuZWwgPT0gIm4iOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToia2VybmVsX2Nob2ljZSIgZ2VuOiJic3Aua2VybmVsLmtlcm5lbHMiIHByaW86IjEwIiBtc2c6IlBsZWFzZSBjaG9vc2UgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhpcyBCU1A6IiBkZWZhdWx0OiJsaW51eC15b2N0b180LjEwIn19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzQuMTIifX0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKaW5kZXggN2UzY2U1Yi4uZDdiOWNlZiAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKQEAgLTQ1LDExICs0NSwxNSBAQAoge3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CiBLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgogCit7eyBpZiBxZW11YXJjaCAhPSAiYXJtIjogfX0KIHt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiV291bGQgeW91IGxpa2UgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19CiB7eyBpZiBzbXAgPT0gInkiOiB9fQogS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKIAotU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAogICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xLmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMS5iYmFwcGVuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEzOTJjZS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xLmJiYXBwZW5kCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV80LjEiOiB9fSB0aGlzCi1GSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCi0KLVBSIDo9ICIke1BSfS4xIgotCi1DT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImFybSIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiYXJtIjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImFybSIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoicG93ZXJwYyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJpMzg2IjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJpMzg2IjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9jb21tb24tcGMiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJ4ODZfNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJ4ODZfNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwcyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KLUtCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCi0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Ci17eyBpZiBzbXAgPT0gInkiOiB9fQotS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKLQotU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCi0gICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCi0gICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAotICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCi0gICAgICAgICAgICIKLQotIyByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAotIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KLVNSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgotU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCi0jTElOVVhfVkVSU0lPTiA9ICI0LjEiCi0jUmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBvbmNlIEFVVE9SRVYgaXMgbG9ja2VkIHRvIGEgY2VydGFpbiBTUkNSRVYKLUtFUk5FTF9WRVJTSU9OX1NBTklUWV9TS0lQID0gIjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xMC5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEwLmJiYXBwZW5kCmluZGV4IDI5YWQxN2IuLjhjMGZkMTUgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEwLmJiYXBwZW5kCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEwLmJiYXBwZW5kCkBAIC00NSwxMSArNDUsMTQgQEAKIHt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQogS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKIAore3sgaWYgcWVtdWFyY2ggIT0gImFybSI6IH19CiB7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQoge3sgaWYgc21wID09ICJ5IjogfX0KIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCiAKLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xMi5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEyLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZWIyMTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xMi5iYmFwcGVuZApAQCAtMCwwICsxLDY3IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzQuMTIiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImFybSIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiYXJtIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImFybSIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoicG93ZXJwYyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJpMzg2IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJpMzg2IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9jb21tb24tcGMiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJ4ODZfNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJ4ODZfNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwcyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlmIHFlbXVhcmNoICE9ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKKyNMSU5VWF9WRVJTSU9OID0gIjQuMTAiCisjUmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBvbmNlIEFVVE9SRVYgaXMgbG9ja2VkIHRvIGEgY2VydGFpbiBTUkNSRVYKK0tFUk5FTF9WRVJTSU9OX1NBTklUWV9TS0lQID0gIjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC40LmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuNC5iYmFwcGVuZAppbmRleCBhNzNiMWFhLi4yMmFiYzIzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC40LmJiYXBwZW5kCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjQuYmJhcHBlbmQKQEAgLTQ1LDExICs0NSwxNCBAQAoge3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CiBLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgogCit7eyBpZiBxZW11YXJjaCAhPSAiYXJtIjogfX0KIHt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19CiB7eyBpZiBzbXAgPT0gInkiOiB9fQogS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKIAotU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKICAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKICAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjguYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC44LmJiYXBwZW5kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDQwNjcxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjguYmJhcHBlbmQKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0jIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzQuOCI6IH19IHRoaXMKLUZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKLQotUFIgOj0gIiR7UFJ9LjEiCi0KLUNPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19Igote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gImFybSI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiYXJtIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiYXJtIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJwb3dlcnBjIjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJwb3dlcnBjIjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6InBvd2VycGMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gImkzODYiOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gImkzODYiOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2NvbW1vbi1wYyIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Ing4Nl82NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Ing4Nl82NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAibWlwcyI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwcyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAibWlwcyI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHM2NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHM2NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQotS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKLQote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KLXt7IGlmIHNtcCA9PSAieSI6IH19Ci1LRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgotCi1TUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKLSAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKLSAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCi0gICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKLSAgICAgICAgICAgIgotCi0jIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCi0jIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbwotU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCi1TUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKLSNMSU5VWF9WRVJTSU9OID0gIjQuOCIKLSNSZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lIG9uY2UgQVVUT1JFViBpcyBsb2NrZWQgdG8gYSBjZXJ0YWluIFNSQ1JFVgotS0VSTkVMX1ZFUlNJT05fU0FOSVRZX1NLSVAgPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xLmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEuYmJhcHBlbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ZmQ5ZWMuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEuYmJhcHBlbmQKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0jIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b180LjEiOiB9fSB0aGlzCi1GSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCi0KLVBSIDo9ICIke1BSfS4xIgotCi1DT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB5b3VyIG5ldyBCU1AgYnJhbmNoIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYW4gZXhpc3RpbmcgbWFjaGluZSBicmFuY2ggdG8gdXNlIGZvciB0aGlzIEJTUDoiIGRlZmF1bHQ6InN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6InBvd2VycGMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9xZW11cHBjIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gImkzODYiOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiaTM4NiI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJtaXBzIjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL210aS1tYWx0YTMyIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL210aS1tYWx0YTY0IiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQotS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKLQote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KLXt7IGlmIHNtcCA9PSAieSI6IH19Ci1LRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgotCi1TUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCi0gICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCi0gICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKLSAgICAgICAgICAgIgotCi0jIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCi0jIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbwotU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgotU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgotI0xJTlVYX1ZFUlNJT04gPSAiNC4xIgotI1JlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgb25jZSBBVVRPUkVWIGlzIGxvY2tlZCB0byBhIGNlcnRhaW4gU1JDUkVWCi1LRVJORUxfVkVSU0lPTl9TQU5JVFlfU0tJUCA9ICIxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEwLmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEwLmJiYXBwZW5kCmluZGV4IDU4NzNkYTQuLjg1MWQ5NmMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xMC5iYmFwcGVuZAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMTAuYmJhcHBlbmQKQEAgLTQ1LDEzICs0NSwxNyBAQAoge3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CiBLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgogCit7eyBpZiBxZW11YXJjaCAhPSAiYXJtIjogfX0KIHt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiV291bGQgeW91IGxpa2UgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19CiB7eyBpZiBzbXAgPT0gInkiOiB9fQogS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKIAotU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAogICAgICAgICAgICAiCiAKICMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xMi5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xMi5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2NlMzdlCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEyLmJiYXBwZW5kCkBAIC0wLDAgKzEsNjcgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzQuMTIiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB5b3VyIG5ldyBCU1AgYnJhbmNoIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYW4gZXhpc3RpbmcgbWFjaGluZSBicmFuY2ggdG8gdXNlIGZvciB0aGlzIEJTUDoiIGRlZmF1bHQ6InN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6InBvd2VycGMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9xZW11cHBjIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gImkzODYiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiaTM4NiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJtaXBzIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL210aS1tYWx0YTMyIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL210aS1tYWx0YTY0IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaWYgcWVtdWFyY2ggIT0gImFybSI6IH19Cit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IldvdWxkIHlvdSBsaWtlIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0uc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0uY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorI0xJTlVYX1ZFUlNJT04gPSAiNC4xMCIKKyNSZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lIG9uY2UgQVVUT1JFViBpcyBsb2NrZWQgdG8gYSBjZXJ0YWluIFNSQ1JFVgorS0VSTkVMX1ZFUlNJT05fU0FOSVRZX1NLSVAgPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC40LmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjQuYmJhcHBlbmQKaW5kZXggY2RlZTc3My4uNzFiZTkxMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjQuYmJhcHBlbmQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjQuYmJhcHBlbmQKQEAgLTQ1LDEzICs0NSwxNyBAQAoge3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CiBLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgogCit7eyBpZiBxZW11YXJjaCAhPSAiYXJtIjogfX0KIHt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiV291bGQgeW91IGxpa2UgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19CiB7eyBpZiBzbXAgPT0gInkiOiB9fQogS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKIAotU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAogICAgICAgICAgICAiCiAKICMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC44LmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0YzI4ODAuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0jIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b180LjgiOiB9fSB0aGlzCi1GSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCi0KLVBSIDo9ICIke1BSfS4xIgotCi1DT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB5b3VyIG5ldyBCU1AgYnJhbmNoIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYW4gZXhpc3RpbmcgbWFjaGluZSBicmFuY2ggdG8gdXNlIGZvciB0aGlzIEJTUDoiIGRlZmF1bHQ6InN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6InBvd2VycGMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9xZW11cHBjIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gImkzODYiOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiaTM4NiI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJtaXBzIjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL210aS1tYWx0YTMyIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL210aS1tYWx0YTY0IiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQotS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKLQote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KLXt7IGlmIHNtcCA9PSAieSI6IH19Ci1LRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgotCi1TUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCi0gICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCi0gICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKLSAgICAgICAgICAgIgotCi0jIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCi0jIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbwotU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgotU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgotI0xJTlVYX1ZFUlNJT04gPSAiNC44IgotI1JlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgb25jZSBBVVRPUkVWIGlzIGxvY2tlZCB0byBhIGNlcnRhaW4gU1JDUkVWCi1LRVJORUxfVkVSU0lPTl9TQU5JVFlfU0tJUCA9ICIxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCmluZGV4IDliN2MyOTEuLjlkMjBkMTkgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKQEAgLTEwLDUgKzEwLDMgQEAKIGluY2x1ZGUgY2ZnL3VzYi1tYXNzLXN0b3JhZ2Uuc2NjCiBpbmNsdWRlIGZlYXR1cmVzL3Bvd2VyL2ludGVsLnNjYwogCi1rY29uZiBoYXJkd2FyZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnCi1pbmNsdWRlIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbAppbmRleCAyMGYyMDU5Li45MTdmMGUyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKQEAgLTEsNSArMSw1IEBACiB7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iOiB9fQote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToidXNlX2RlZmF1bHRfa2VybmVsIiBwcmlvOiIxMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSB0byB1c2UgdGhlIGRlZmF1bHQgKDQuMTApIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICg0LjEyKSBrZXJuZWw/ICh5L24pIiBkZWZhdWx0OiJ5In19CiAKIHt7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIHVzZV9kZWZhdWx0X2tlcm5lbCA9PSAibiI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzQuMTAifX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Imtlcm5lbF9jaG9pY2UiIGdlbjoiYnNwLmtlcm5lbC5rZXJuZWxzIiBwcmlvOiIxMCIgbXNnOiJQbGVhc2UgY2hvb3NlIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoaXMgQlNQOiIgZGVmYXVsdDoibGludXgteW9jdG9fNC4xMiJ9fQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKaW5kZXggYzMzNjAwNy4uMjJlZDI3MyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCkBAIC0xOSw3ICsxOSwxMCBAQAoge3sgaWYgc21wID09ICJ5IjogfX0KIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCiAKLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0uc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0uY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKICAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKICAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xLmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xLmJiYXBwZW5kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTVhMTc4Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMS5iYmFwcGVuZAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfNC4xIjogfX0gdGhpcwotRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgotCi1QUiA6PSAiJHtQUn0uMSIKLQotQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCi0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQotS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKLQote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KLXt7IGlmIHNtcCA9PSAieSI6IH19Ci1LRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgotCi1TUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKLSAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKLSAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCi0gICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKLSAgICAgICAgICAgIgotCi0jIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCi0jIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbwotU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCi1TUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKLSNMSU5VWF9WRVJTSU9OID0gIjQuMSIKLSNSZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lIG9uY2UgQVVUT1JFViBpcyBsb2NrZWQgdG8gYSBjZXJ0YWluIFNSQ1JFVgotS0VSTkVMX1ZFUlNJT05fU0FOSVRZX1NLSVAgPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMTAuYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEwLmJiYXBwZW5kCmluZGV4IDVjYzgyZTguLmJhZTk0M2UgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMTAuYmJhcHBlbmQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xMC5iYmFwcGVuZApAQCAtMjAsNyArMjAsOSBAQAoge3sgaWYgc21wID09ICJ5IjogfX0KIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCiAKLVNSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEyLmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xMi5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjNlMTA0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xMi5iYmFwcGVuZApAQCAtMCwwICsxLDM3IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzQuMTIiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0uc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0uY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCitTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgorI0xJTlVYX1ZFUlNJT04gPSAiNC4xMCIKKyNSZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lIG9uY2UgQVVUT1JFViBpcyBsb2NrZWQgdG8gYSBjZXJ0YWluIFNSQ1JFVgorS0VSTkVMX1ZFUlNJT05fU0FOSVRZX1NLSVAgPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuNC5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuNC5iYmFwcGVuZAppbmRleCAwNzBiZDg3Li42MmQxODE3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjQuYmJhcHBlbmQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC40LmJiYXBwZW5kCkBAIC0yMCw3ICsyMCw5IEBACiB7eyBpZiBzbXAgPT0gInkiOiB9fQogS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKIAotU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKICAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKICAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCiAgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuOC5iYmFwcGVuZCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuOC5iYmFwcGVuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM5MTMyMi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjguYmJhcHBlbmQKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0jIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzQuOCI6IH19IHRoaXMKLUZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKLQotUFIgOj0gIiR7UFJ9LjEiCi0KLUNPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgotCi17eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQote3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KLUtCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCi0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Ci17eyBpZiBzbXAgPT0gInkiOiB9fQotS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKLQotU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCi0gICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCi0gICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAotICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCi0gICAgICAgICAgICIKLQotIyByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAotIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KLVNSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgotU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIiR7QVVUT1JFVn0iCi0jTElOVVhfVkVSU0lPTiA9ICI0LjgiCi0jUmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBvbmNlIEFVVE9SRVYgaXMgbG9ja2VkIHRvIGEgY2VydGFpbiBTUkNSRVYKLUtFUk5FTF9WRVJTSU9OX1NBTklUWV9TS0lQID0gIjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xLmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMS5iYmFwcGVuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU3ZDdjYi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xLmJiYXBwZW5kCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fNC4xIjogfX0gdGhpcwotRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgotCi1QUiA6PSAiJHtQUn0uMSIKLQotQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCi0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KLQote3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Ci17eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KLUtCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCi0KLXt7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Ci17eyBpZiBzbXAgPT0gInkiOiB9fQotS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKLQotU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAotICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAotICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCi0gICAgICAgICAgICIKLQotIyByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAotIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KLVNSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKLVNSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKLSNMSU5VWF9WRVJTSU9OID0gIjQuMSIKLSNSZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lIG9uY2UgQVVUT1JFViBpcyBsb2NrZWQgdG8gYSBjZXJ0YWluIFNSQ1JFVgotS0VSTkVMX1ZFUlNJT05fU0FOSVRZX1NLSVAgPSAiMSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEwLmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMTAuYmJhcHBlbmQKaW5kZXggZWFmNDM2Ny4uZGZiZWNiNSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMTAuYmJhcHBlbmQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMTAuYmJhcHBlbmQKQEAgLTIwLDkgKzIwLDEyIEBACiB7eyBpZiBzbXAgPT0gInkiOiB9fQogS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKIAotU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAogICAgICAgICAgICAiCiAKICMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEyLmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMTIuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3NGM5ZQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEyLmJiYXBwZW5kCkBAIC0wLDAgKzEsMzcgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzQuMTIiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICIKKworIyByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KK1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiJHtBVVRPUkVWfSIKKyNMSU5VWF9WRVJTSU9OID0gIjQuMTAiCisjUmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBvbmNlIEFVVE9SRVYgaXMgbG9ja2VkIHRvIGEgY2VydGFpbiBTUkNSRVYKK0tFUk5FTF9WRVJTSU9OX1NBTklUWV9TS0lQID0gIjEiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC40LmJiYXBwZW5kIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuNC5iYmFwcGVuZAppbmRleCA1NmU4YWQzLi5hODA5Yzc2IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC40LmJiYXBwZW5kCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjQuYmJhcHBlbmQKQEAgLTIwLDkgKzIwLDEyIEBACiB7eyBpZiBzbXAgPT0gInkiOiB9fQogS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKIAotU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAogICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAogICAgICAgICAgICAiCiAKICMgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC44LmJiYXBwZW5kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTc1MmE5Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjguYmJhcHBlbmQKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0jIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b180LjgiOiB9fSB0aGlzCi1GSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCi0KLVBSIDo9ICIke1BSfS4xIgotCi1DT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKLQote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQotCi17eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KLXt7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19Ci0KLXt7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQotS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKLQote3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KLXt7IGlmIHNtcCA9PSAieSI6IH19Ci1LRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgotCi1TUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCi0gICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCi0gICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKLSAgICAgICAgICAgIgotCi0jIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCi0jIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbwotU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgotU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICIke0FVVE9SRVZ9IgotI0xJTlVYX1ZFUlNJT04gPSAiNC44IgotI1JlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgb25jZSBBVVRPUkVWIGlzIGxvY2tlZCB0byBhIGNlcnRhaW4gU1JDUkVWCi1LRVJORUxfVkVSU0lPTl9TQU5JVFlfU0tJUCA9ICIxIgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2J1aWxkX3BlcmYvaHRtbC9yZXBvcnQuaHRtbCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9idWlsZF9wZXJmL2h0bWwvcmVwb3J0Lmh0bWwKaW5kZXggMTY1Y2JiOC4uMjkxYWQ5ZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2J1aWxkX3BlcmYvaHRtbC9yZXBvcnQuaHRtbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnVpbGRfcGVyZi9odG1sL3JlcG9ydC5odG1sCkBAIC01Myw5ICs1MywxMSBAQAogICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogfQogLmRldGFpbHMgdGggewotICBmb250LXdlaWdodDogbm9ybWFsOwogICBwYWRkaW5nLXJpZ2h0OiA4cHg7CiB9CisuZGV0YWlscy5wbGFpbiB0aCB7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CiAucHJlZm9ybWF0dGVkIHsKICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwpAQCAtMTE4LDI5ICsxMjAsMzIgQEAKICAgICAgIHslIGVsc2UgJX0KICAgICAgICAgeyUgc2V0IHJvd19zdHlsZSA9ICdzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZiInICV9CiAgICAgICB7JSBlbmRpZiAlfQotICAgICAgPHRyIHt7IHJvd19zdHlsZSB9fT48dGQ+e3sgdGVzdC5uYW1lIH19OiB7eyB0ZXN0LmRlc2NyaXB0aW9uIH19PC90ZD4KICAgICAgIHslIGlmIHRlc3Quc3RhdHVzID09ICdTVUNDRVNTJyAlfQogICAgICAgICB7JSBmb3IgbWVhc3VyZW1lbnQgaW4gdGVzdC5tZWFzdXJlbWVudHMgJX0KLSAgICAgICAgICB7IyBhZGQgZW1wdHkgY2VsbCBpbiBwbGFjZSBvZiB0aGUgdGVzdCBuYW1lI30KLSAgICAgICAgICB7JSBpZiBsb29wLmluZGV4ID4gMSAlfTx0ZD48L3RkPnslIGVuZGlmICV9Ci0gICAgICAgICAgeyUgaWYgbWVhc3VyZW1lbnQuYWJzZGlmZiA+IDAgJX0KLSAgICAgICAgICAgIHslIHNldCByZXN1bHRfc3R5bGUgPSAiY29sb3I6IHJlZCIgJX0KLSAgICAgICAgICB7JSBlbGlmIG1lYXN1cmVtZW50LmFic2RpZmYgPT0gbWVhc3VyZW1lbnQuYWJzZGlmZiAlfQotICAgICAgICAgICAgeyUgc2V0IHJlc3VsdF9zdHlsZSA9ICJjb2xvcjogZ3JlZW4iICV9Ci0gICAgICAgICAgeyUgZWxzZSAlfQotICAgICAgICAgICAgeyUgc2V0IHJlc3VsdF9zdHlsZSA9ICJjb2xvcjogb3JhbmdlIiAlfQotICAgICAgICAgIHslZW5kaWYgJX0KLSAgICAgICAgICA8dGQ+e3sgbWVhc3VyZW1lbnQuZGVzY3JpcHRpb24gfX08L3RkPgotICAgICAgICAgIDx0ZCBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiPnt7IG1lYXN1cmVtZW50LnZhbHVlLm1lYW4gfX08L3RkPgotICAgICAgICAgIDx0ZCBzdHlsZT0ie3sgcmVzdWx0X3N0eWxlIH19Ij57eyBtZWFzdXJlbWVudC5hYnNkaWZmX3N0ciB9fTwvdGQ+Ci0gICAgICAgICAgPHRkIHN0eWxlPSJ7eyByZXN1bHRfc3R5bGUgfX0iPnt7IG1lYXN1cmVtZW50LnJlbGRpZmYgfX08L3RkPgotICAgICAgICAgIDwvdHI+PHRyIHt7IHJvd19zdHlsZSB9fT4KKyAgICAgICAgICA8dHIge3sgcm93X3N0eWxlIH19PgorICAgICAgICAgICAgeyUgaWYgbG9vcC5pbmRleCA9PSAxICV9CisgICAgICAgICAgICAgIDx0ZD57eyB0ZXN0Lm5hbWUgfX06IHt7IHRlc3QuZGVzY3JpcHRpb24gfX08L3RkPgorICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICB7IyBhZGQgZW1wdHkgY2VsbCBpbiBwbGFjZSBvZiB0aGUgdGVzdCBuYW1lI30KKyAgICAgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgeyUgaWYgbWVhc3VyZW1lbnQuYWJzZGlmZiA+IDAgJX0KKyAgICAgICAgICAgICAgeyUgc2V0IHJlc3VsdF9zdHlsZSA9ICJjb2xvcjogcmVkIiAlfQorICAgICAgICAgICAgeyUgZWxpZiBtZWFzdXJlbWVudC5hYnNkaWZmID09IG1lYXN1cmVtZW50LmFic2RpZmYgJX0KKyAgICAgICAgICAgICAgeyUgc2V0IHJlc3VsdF9zdHlsZSA9ICJjb2xvcjogZ3JlZW4iICV9CisgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgIHslIHNldCByZXN1bHRfc3R5bGUgPSAiY29sb3I6IG9yYW5nZSIgJX0KKyAgICAgICAgICAgIHslZW5kaWYgJX0KKyAgICAgICAgICAgIDx0ZD57eyBtZWFzdXJlbWVudC5kZXNjcmlwdGlvbiB9fTwvdGQ+CisgICAgICAgICAgICA8dGQgc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkIj57eyBtZWFzdXJlbWVudC52YWx1ZS5tZWFuIH19PC90ZD4KKyAgICAgICAgICAgIDx0ZCBzdHlsZT0ie3sgcmVzdWx0X3N0eWxlIH19Ij57eyBtZWFzdXJlbWVudC5hYnNkaWZmX3N0ciB9fTwvdGQ+CisgICAgICAgICAgICA8dGQgc3R5bGU9Int7IHJlc3VsdF9zdHlsZSB9fSI+e3sgbWVhc3VyZW1lbnQucmVsZGlmZiB9fTwvdGQ+CisgICAgICAgICAgPC90cj4KICAgICAgICAgeyUgZW5kZm9yICV9CiAgICAgICB7JSBlbHNlICV9CiAgICAgICAgIDx0ZCBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7IGNvbG9yOiByZWQ7Ij57e3Rlc3Quc3RhdHVzIH19PC90ZD4KICAgICAgICAgPHRkPjwvdGQ+IDx0ZD48L3RkPiA8dGQ+PC90ZD4gPHRkPjwvdGQ+CiAgICAgICB7JSBlbmRpZiAlfQotICAgICAgPC90cj4KICAgICB7JSBlbmRmb3IgJX0KICAgPC90YWJsZT4KIApAQCAtMTY1LDYgKzE3MCw3IEBACiAgICAgICAgICAgICB7eyBtZWFzdXJlbWVudC5hYnNkaWZmX3N0ciB9fSAoe3ttZWFzdXJlbWVudC5yZWxkaWZmfX0pCiAgICAgICAgICAgICA8L3NwYW4+PC9zcGFuPgogICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIHsjIFRhYmxlIGZvciB0cmVuZGNoYXJ0IGFuZCB0aGUgc3RhdGlzdGljcyAjfQogICAgICAgICAgIDx0YWJsZSBzdHlsZT0id2lkdGg6IDEwMCUiPgogICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICA8dGQgc3R5bGU9IndpZHRoOiA3NSUiPgpAQCAtMTczLDcgKzE3OSw3IEBACiAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICB7IyBNZWFzdXJlbWVudCBzdGF0aXN0aWNzICN9Ci0gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJkZXRhaWxzIj4KKyAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9ImRldGFpbHMgcGxhaW4iPgogICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICA8dGg+VGVzdCBydW5zPC90aD48dGQ+e3sgbWVhc3VyZW1lbnQudmFsdWUuc2FtcGxlX2NudCB9fTwvdGQ+CiAgICAgICAgICAgICAgICAgICA8L3RyPjx0cj4KQEAgLTE4NiwxMSArMTkyLDg1IEBACiAgICAgICAgICAgICAgICAgICAgIDx0aD5TdGRldjwvdGg+PHRkPnt7IG1lYXN1cmVtZW50LnZhbHVlLnN0ZGV2IH19PC90ZD4KICAgICAgICAgICAgICAgICAgIDwvdHI+PHRyPgogICAgICAgICAgICAgICAgICAgICA8dGg+PGRpdiBpZD0ie3sgdGVzdC5uYW1lIH19X3t7IG1lYXN1cmVtZW50Lm5hbWUgfX1fY2hhcnRfcG5nIj48L2Rpdj48L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGQ+PC90ZD4KICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgPC90YWJsZT4KKworICAgICAgICAgIHsjIFRhc2sgYW5kIHJlY2lwZSBzdW1tYXJ5IGZyb20gYnVpbGRzdGF0cyAjfQorICAgICAgICAgIHslIGlmICdidWlsZHN0YXRzJyBpbiBtZWFzdXJlbWVudCAlfQorICAgICAgICAgICAgVGFzayByZXNvdXJjZSB1c2FnZQorICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJkZXRhaWxzIiBzdHlsZT0id2lkdGg6MTAwJSI+CisgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICA8dGg+TnVtYmVyIG9mIHRhc2tzPC90aD4KKyAgICAgICAgICAgICAgICA8dGg+VG9wIGNvbnN1bWVycyBvZiBjcHV0aW1lPC90aD4KKyAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcCI+e3sgbWVhc3VyZW1lbnQuYnVpbGRzdGF0cy50YXNrcy5jb3VudCB9fSAoe3sgbWVhc3VyZW1lbnQuYnVpbGRzdGF0cy50YXNrcy5jaGFuZ2UgfX0pPC90ZD4KKyAgICAgICAgICAgICAgICB7IyBUYWJsZSBvZiBtb3N0IHJlc291cmNlLWh1bmdyeSB0YXNrcyAjfQorICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iZGV0YWlscyBwbGFpbiI+CisgICAgICAgICAgICAgICAgICAgIHslIGZvciBkaWZmIGluIG1lYXN1cmVtZW50LmJ1aWxkc3RhdHMudG9wX2NvbnN1bWVyfHJldmVyc2UgJX0KKyAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgIDx0aD57eyBkaWZmLnBrZyB9fS57eyBkaWZmLnRhc2sgfX08L3RoPgorICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyAnJTAuMGYnICUgZGlmZi52YWx1ZTIgfX0gczwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgPHRoPkJpZ2dlc3QgaW5jcmVhc2UgaW4gY3B1dGltZTwvdGg+CisgICAgICAgICAgICAgICAgPHRoPkJpZ2dlc3QgZGVjcmVhc2UgaW4gY3B1dGltZTwvdGg+CisgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICB7IyBUYWJsZSBiaWdnZXN0IGluY3JlYXNlIGluIHJlc291cmNlIHVzYWdlICN9CisgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJkZXRhaWxzIHBsYWluIj4KKyAgICAgICAgICAgICAgICAgICAgeyUgZm9yIGRpZmYgaW4gbWVhc3VyZW1lbnQuYnVpbGRzdGF0cy50b3BfaW5jcmVhc2V8cmV2ZXJzZSAlfQorICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgPHRoPnt7IGRpZmYucGtnIH19Lnt7IGRpZmYudGFzayB9fTwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7ICclKzAuMGYnICUgZGlmZi5hYnNkaWZmIH19IHM8L3RkPgorICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICB7IyBUYWJsZSBiaWdnZXN0IGRlY3JlYXNlIGluIHJlc291cmNlIHVzYWdlICN9CisgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJkZXRhaWxzIHBsYWluIj4KKyAgICAgICAgICAgICAgICAgICAgeyUgZm9yIGRpZmYgaW4gbWVhc3VyZW1lbnQuYnVpbGRzdGF0cy50b3BfZGVjcmVhc2UgJX0KKyAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgIDx0aD57eyBkaWZmLnBrZyB9fS57eyBkaWZmLnRhc2sgfX08L3RoPgorICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyAnJSswLjBmJyAlIGRpZmYuYWJzZGlmZiB9fSBzPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICA8L3RhYmxlPgorCisgICAgICAgICAgICB7IyBSZWNpcGUgdmVyc2lvbiBkaWZmZXJlbmNlcyAjfQorICAgICAgICAgICAgeyUgaWYgbWVhc3VyZW1lbnQuYnVpbGRzdGF0cy52ZXJfZGlmZiAlfQorICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOiAxNnB4Ij5SZWNpcGUgdmVyc2lvbiBjaGFuZ2VzPC9kaXY+CisgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iZGV0YWlscyI+CisgICAgICAgICAgICAgICAgeyUgZm9yIGhlYWQsIHJlY2lwZXMgaW4gbWVhc3VyZW1lbnQuYnVpbGRzdGF0cy52ZXJfZGlmZi5pdGVtcygpICV9CisgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgIDx0aCBjb2xzcGFuPSIyIj57eyBoZWFkIH19PC90aD4KKyAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICB7JSBmb3IgbmFtZSwgaW5mbyBpbiByZWNpcGVzfHNvcnQgJX0KKyAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBuYW1lIH19PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgaW5mbyB9fTwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogMTZweCI+Tm8gcmVjaXBlIHZlcnNpb24gY2hhbmdlcyBkZXRlY3RlZDwvZGl2PgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICB7JSBlbmRpZiAlfQogICAgICAgICA8L2Rpdj4KICAgICAgIHslIGVuZGZvciAlfQogICAgIHsjIFVuc3VjY2Vzc2Z1bCB0ZXN0ICN9CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnVpbGRfcGVyZi9yZXBvcnQucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnVpbGRfcGVyZi9yZXBvcnQucHkKaW5kZXggZWIwMGNjYy4uZDk5YTM2NyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2J1aWxkX3BlcmYvcmVwb3J0LnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9idWlsZF9wZXJmL3JlcG9ydC5weQpAQCAtMTEsMTIgKzExLDE1IEBACiAjIG1vcmUgZGV0YWlscy4KICMKICIiIkhhbmRsaW5nIG9mIGJ1aWxkIHBlcmYgdGVzdCByZXBvcnRzIiIiCi1mcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdCwgTWFwcGluZworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QsIE1hcHBpbmcsIG5hbWVkdHVwbGUKIGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lLCB0aW1lem9uZQogZnJvbSBudW1iZXJzIGltcG9ydCBOdW1iZXIKIGZyb20gc3RhdGlzdGljcyBpbXBvcnQgbWVhbiwgc3RkZXYsIHZhcmlhbmNlCiAKIAorQWdncmVnYXRlVGVzdERhdGEgPSBuYW1lZHR1cGxlKCdBZ2dyZWdhdGVUZXN0RGF0YScsIFsnbWV0YWRhdGEnLCAncmVzdWx0cyddKQorCisKIGRlZiBpc29mbXRfdG9fdGltZXN0YW1wKHN0cmluZyk6CiAgICAgIiIiQ29udmVydCB0aW1lc3RhbXAgc3RyaW5nIGluIElTTyA4NjAxIGZvcm1hdCBpbnRvIHVuaXggdGltZXN0YW1wIiIiCiAgICAgaWYgJy4nIGluIHN0cmluZzoKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9idWlsZHN0YXRzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2J1aWxkc3RhdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlhYWRmMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9idWlsZHN0YXRzLnB5CkBAIC0wLDAgKzEsMzQ5IEBACisjCisjIENvcHlyaWdodCAoYykgMjAxNywgSW50ZWwgQ29ycG9yYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisjIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyMgbW9yZSBkZXRhaWxzLgorIworIiIiRnVuY3Rpb25hbGl0eSBmb3IgYW5hbHl6aW5nIGJ1aWxkc3RhdHMiIiIKK2ltcG9ydCBqc29uCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUsT3JkZXJlZERpY3QKK2Zyb20gc3RhdGlzdGljcyBpbXBvcnQgbWVhbgorCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKworCit0YXNrZGlmZl9maWVsZHMgPSAoJ3BrZycsICdwa2dfb3AnLCAndGFzaycsICd0YXNrX29wJywgJ3ZhbHVlMScsICd2YWx1ZTInLAorICAgICAgICAgICAgICAgICAgICdhYnNkaWZmJywgJ3JlbGRpZmYnKQorVGFza0RpZmYgPSBuYW1lZHR1cGxlKCdUYXNrRGlmZicsICcgJy5qb2luKHRhc2tkaWZmX2ZpZWxkcykpCisKKworY2xhc3MgQlNFcnJvcihFeGNlcHRpb24pOgorICAgICIiIkVycm9yIGhhbmRsaW5nIG9mIGJ1aWxkc3RhdHMiIiIKKyAgICBwYXNzCisKKworY2xhc3MgQlNUYXNrKGRpY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmWydzdGFydF90aW1lJ10gPSBOb25lCisgICAgICAgIHNlbGZbJ2VsYXBzZWRfdGltZSddID0gTm9uZQorICAgICAgICBzZWxmWydzdGF0dXMnXSA9IE5vbmUKKyAgICAgICAgc2VsZlsnaW9zdGF0J10gPSB7fQorICAgICAgICBzZWxmWydydXNhZ2UnXSA9IHt9CisgICAgICAgIHNlbGZbJ2NoaWxkX3J1c2FnZSddID0ge30KKyAgICAgICAgc3VwZXIoQlNUYXNrLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY3B1dGltZShzZWxmKToKKyAgICAgICAgIiIiU3VtIG9mIHVzZXIgYW5kIHN5c3RlbSB0aW1lIHRha2VuIGJ5IHRoZSB0YXNrIiIiCisgICAgICAgIHJ1c2FnZSA9IHNlbGZbJ3J1c2FnZSddWydydV9zdGltZSddICsgc2VsZlsncnVzYWdlJ11bJ3J1X3V0aW1lJ10KKyAgICAgICAgaWYgc2VsZlsnY2hpbGRfcnVzYWdlJ106CisgICAgICAgICAgICAjIENoaWxkIHJ1c2FnZSBtYXkgaGF2ZSBiZWVuIG9wdGltaXplZCBvdXQKKyAgICAgICAgICAgIHJldHVybiBydXNhZ2UgKyBzZWxmWydjaGlsZF9ydXNhZ2UnXVsncnVfc3RpbWUnXSArIHNlbGZbJ2NoaWxkX3J1c2FnZSddWydydV91dGltZSddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gcnVzYWdlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgd2FsbHRpbWUoc2VsZik6CisgICAgICAgICIiIkVsYXBzZWQgd2FsbCBjbG9jayB0aW1lIiIiCisgICAgICAgIHJldHVybiBzZWxmWydlbGFwc2VkX3RpbWUnXQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHJlYWRfYnl0ZXMoc2VsZik6CisgICAgICAgICIiIkJ5dGVzIHJlYWQgZnJvbSB0aGUgYmxvY2sgbGF5ZXIiIiIKKyAgICAgICAgcmV0dXJuIHNlbGZbJ2lvc3RhdCddWydyZWFkX2J5dGVzJ10KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB3cml0ZV9ieXRlcyhzZWxmKToKKyAgICAgICAgIiIiQnl0ZXMgd3JpdHRlbiB0byB0aGUgYmxvY2sgbGF5ZXIiIiIKKyAgICAgICAgcmV0dXJuIHNlbGZbJ2lvc3RhdCddWyd3cml0ZV9ieXRlcyddCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcmVhZF9vcHMoc2VsZik6CisgICAgICAgICIiIk51bWJlciBvZiByZWFkIG9wZXJhdGlvbnMgb24gdGhlIGJsb2NrIGxheWVyIiIiCisgICAgICAgIGlmIHNlbGZbJ2NoaWxkX3J1c2FnZSddOgorICAgICAgICAgICAgIyBDaGlsZCBydXNhZ2UgbWF5IGhhdmUgYmVlbiBvcHRpbWl6ZWQgb3V0CisgICAgICAgICAgICByZXR1cm4gc2VsZlsncnVzYWdlJ11bJ3J1X2luYmxvY2snXSArIHNlbGZbJ2NoaWxkX3J1c2FnZSddWydydV9pbmJsb2NrJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmWydydXNhZ2UnXVsncnVfaW5ibG9jayddCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgd3JpdGVfb3BzKHNlbGYpOgorICAgICAgICAiIiJOdW1iZXIgb2Ygd3JpdGUgb3BlcmF0aW9ucyBvbiB0aGUgYmxvY2sgbGF5ZXIiIiIKKyAgICAgICAgaWYgc2VsZlsnY2hpbGRfcnVzYWdlJ106CisgICAgICAgICAgICAjIENoaWxkIHJ1c2FnZSBtYXkgaGF2ZSBiZWVuIG9wdGltaXplZCBvdXQKKyAgICAgICAgICAgIHJldHVybiBzZWxmWydydXNhZ2UnXVsncnVfb3VibG9jayddICsgc2VsZlsnY2hpbGRfcnVzYWdlJ11bJ3J1X291YmxvY2snXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGZbJ3J1c2FnZSddWydydV9vdWJsb2NrJ10KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tX2ZpbGUoY2xzLCBidWlsZHN0YXRfZmlsZSk6CisgICAgICAgICIiIlJlYWQgYnVpbGRzdGF0IHRleHQgZmlsZSIiIgorICAgICAgICBic190YXNrID0gY2xzKCkKKyAgICAgICAgbG9nLmRlYnVnKCJSZWFkaW5nIHRhc2sgYnVpbGRzdGF0cyBmcm9tICVzIiwgYnVpbGRzdGF0X2ZpbGUpCisgICAgICAgIGVuZF90aW1lID0gTm9uZQorICAgICAgICB3aXRoIG9wZW4oYnVpbGRzdGF0X2ZpbGUpIGFzIGZvYmo6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmb2JqLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgIGtleSwgdmFsID0gbGluZS5zcGxpdCgnOicsIDEpCisgICAgICAgICAgICAgICAgdmFsID0gdmFsLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBrZXkgPT0gJ1N0YXJ0ZWQnOgorICAgICAgICAgICAgICAgICAgICBzdGFydF90aW1lID0gZmxvYXQodmFsKQorICAgICAgICAgICAgICAgICAgICBic190YXNrWydzdGFydF90aW1lJ10gPSBzdGFydF90aW1lCisgICAgICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ0VuZGVkJzoKKyAgICAgICAgICAgICAgICAgICAgZW5kX3RpbWUgPSBmbG9hdCh2YWwpCisgICAgICAgICAgICAgICAgZWxpZiBrZXkuc3RhcnRzd2l0aCgnSU8gJyk6CisgICAgICAgICAgICAgICAgICAgIHNwbGl0ID0ga2V5LnNwbGl0KCkKKyAgICAgICAgICAgICAgICAgICAgYnNfdGFza1snaW9zdGF0J11bc3BsaXRbMV1dID0gaW50KHZhbCkKKyAgICAgICAgICAgICAgICBlbGlmIGtleS5maW5kKCdydXNhZ2UnKSA+PSAwOgorICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IGtleS5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgIHJ1X2tleSA9IHNwbGl0Wy0xXQorICAgICAgICAgICAgICAgICAgICBpZiBydV9rZXkgaW4gKCdydV9zdGltZScsICdydV91dGltZScpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gZmxvYXQodmFsKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gaW50KHZhbCkKKyAgICAgICAgICAgICAgICAgICAgcnVfdHlwZSA9ICdydXNhZ2UnIGlmIHNwbGl0WzBdID09ICdydXNhZ2UnIGVsc2UgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NoaWxkX3J1c2FnZScKKyAgICAgICAgICAgICAgICAgICAgYnNfdGFza1tydV90eXBlXVtydV9rZXldID0gdmFsCisgICAgICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ1N0YXR1cyc6CisgICAgICAgICAgICAgICAgICAgIGJzX3Rhc2tbJ3N0YXR1cyddID0gdmFsCisgICAgICAgIGlmIGVuZF90aW1lIGlzIG5vdCBOb25lIGFuZCBzdGFydF90aW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYnNfdGFza1snZWxhcHNlZF90aW1lJ10gPSBlbmRfdGltZSAtIHN0YXJ0X3RpbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEJTRXJyb3IoInt9IGxvb2tzIGxpa2UgYSBpbnZhbGlkIGJ1aWxkc3RhdHMgZmlsZSIuZm9ybWF0KGJ1aWxkc3RhdF9maWxlKSkKKyAgICAgICAgcmV0dXJuIGJzX3Rhc2sKKworCitjbGFzcyBCU1Rhc2tBZ2dyZWdhdGUob2JqZWN0KToKKyAgICAiIiJDbGFzcyByZXByZXNlbnRpbmcgbXVsdGlwbGUgcnVucyBvZiB0aGUgc2FtZSB0YXNrIiIiCisgICAgcHJvcGVydGllcyA9ICgnY3B1dGltZScsICd3YWxsdGltZScsICdyZWFkX2J5dGVzJywgJ3dyaXRlX2J5dGVzJywKKyAgICAgICAgICAgICAgICAgICdyZWFkX29wcycsICd3cml0ZV9vcHMnKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhc2tzPU5vbmUpOgorICAgICAgICBzZWxmLl90YXNrcyA9IHRhc2tzIG9yIFtdCisgICAgICAgIHNlbGYuX3Byb3BlcnRpZXMgPSB7fQorCisgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBuYW1lIGluIHNlbGYucHJvcGVydGllczoKKyAgICAgICAgICAgIGlmIG5hbWUgbm90IGluIHNlbGYuX3Byb3BlcnRpZXM6CisgICAgICAgICAgICAgICAgIyBDYWxjdWxhdGUgcHJvcGVydGllcyBvbiBkZW1hbmQgb25seS4gV2Ugb25seSBwcm92aWRlIG1lYW4KKyAgICAgICAgICAgICAgICAjIHZhbHVlLCBzbyBmYXIKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm9wZXJ0aWVzW25hbWVdID0gbWVhbihbZ2V0YXR0cih0LCBuYW1lKSBmb3IgdCBpbiBzZWxmLl90YXNrc10pCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcHJvcGVydGllc1tuYW1lXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIidCU1Rhc2tBZ2dyZWdhdGUnIGhhcyBubyBhdHRyaWJ1dGUgJ3t9JyIuZm9ybWF0KG5hbWUpKQorCisgICAgZGVmIGFwcGVuZChzZWxmLCB0YXNrKToKKyAgICAgICAgIiIiQXBwZW5kIG5ldyB0YXNrIiIiCisgICAgICAgICMgUmVzZXQgcHJlLWNhbGN1bGF0ZWQgcHJvcGVydGllcworICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh0YXNrLCBCU1Rhc2spLCAiVHlwZSBpcyAne30nIGluc3RlYWQgb2YgJ0JTVGFzayciLmZvcm1hdCh0eXBlKHRhc2spKQorICAgICAgICBzZWxmLl9wcm9wZXJ0aWVzID0ge30KKyAgICAgICAgc2VsZi5fdGFza3MuYXBwZW5kKHRhc2spCisKKworY2xhc3MgQlNSZWNpcGUob2JqZWN0KToKKyAgICAiIiJDbGFzcyByZXByZXNlbnRpbmcgYnVpbGRzdGF0cyBvZiBvbmUgcmVjaXBlIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGVwb2NoLCB2ZXJzaW9uLCByZXZpc2lvbik6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5lcG9jaCA9IGVwb2NoCisgICAgICAgIHNlbGYudmVyc2lvbiA9IHZlcnNpb24KKyAgICAgICAgc2VsZi5yZXZpc2lvbiA9IHJldmlzaW9uCisgICAgICAgIGlmIGVwb2NoIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmV2ciA9ICJ7fS17fSIuZm9ybWF0KHZlcnNpb24sIHJldmlzaW9uKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5ldnIgPSAie31fe30te30iLmZvcm1hdChlcG9jaCwgdmVyc2lvbiwgcmV2aXNpb24pCisgICAgICAgIHNlbGYudGFza3MgPSB7fQorCisgICAgZGVmIGFnZ3JlZ2F0ZShzZWxmLCBic3JlY2lwZSk6CisgICAgICAgICIiIkFnZ3JlZ2F0ZSBkYXRhIG9mIGFub3RoZXIgcmVjaXBlIGJ1aWxkc3RhdHMiIiIKKyAgICAgICAgaWYgc2VsZi5uZXZyICE9IGJzcmVjaXBlLm5ldnI6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJSZWZ1c2luZyB0byBhZ2dyZWdhdGUgYnVpbGRzdGF0cywgcmVjaXBlIHZlcnNpb24gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlmZmVyczoge30gdnMuIHt9Ii5mb3JtYXQoc2VsZi5uZXZyLCBic3JlY2lwZS5uZXZyKSkKKyAgICAgICAgaWYgc2V0KHNlbGYudGFza3Mua2V5cygpKSAhPSBzZXQoYnNyZWNpcGUudGFza3Mua2V5cygpKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlJlZnVzaW5nIHRvIGFnZ3JlZ2F0ZSBidWlsZHN0YXRzLCBzZXQgb2YgdGFza3MgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4ge30gZGlmZmVyIi5mb3JtYXQoc2VsZi5uYW1lKSkKKworICAgICAgICBmb3IgdGFza25hbWUsIHRhc2tkYXRhIGluIGJzcmVjaXBlLnRhc2tzLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZWxmLnRhc2tzW3Rhc2tuYW1lXSwgQlNUYXNrQWdncmVnYXRlKToKKyAgICAgICAgICAgICAgICBzZWxmLnRhc2tzW3Rhc2tuYW1lXSA9IEJTVGFza0FnZ3JlZ2F0ZShbc2VsZi50YXNrc1t0YXNrbmFtZV1dKQorICAgICAgICAgICAgc2VsZi50YXNrc1t0YXNrbmFtZV0uYXBwZW5kKHRhc2tkYXRhKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG5ldnIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm5hbWUgKyAnLScgKyBzZWxmLmV2cgorCisKK2NsYXNzIEJ1aWxkU3RhdHMoZGljdCk6CisgICAgIiIiQ2xhc3MgcmVwcmVzZW50aW5nIGJ1aWxkc3RhdHMgb2Ygb25lIGJ1aWxkIiIiCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbnVtX3Rhc2tzKHNlbGYpOgorICAgICAgICAiIiJHZXQgbnVtYmVyIG9mIHRhc2tzIiIiCisgICAgICAgIG51bSA9IDAKKyAgICAgICAgZm9yIHJlY2lwZSBpbiBzZWxmLnZhbHVlcygpOgorICAgICAgICAgICAgbnVtICs9IGxlbihyZWNpcGUudGFza3MpCisgICAgICAgIHJldHVybiBudW0KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tX2pzb24oY2xzLCBic19qc29uKToKKyAgICAgICAgIiIiQ3JlYXRlIG5ldyBCdWlsZFN0YXRzIG9iamVjdCBmcm9tIEpTT04gb2JqZWN0IiIiCisgICAgICAgIGJ1aWxkc3RhdHMgPSBjbHMoKQorICAgICAgICBmb3IgcmVjaXBlIGluIGJzX2pzb246CisgICAgICAgICAgICBpZiByZWNpcGVbJ25hbWUnXSBpbiBidWlsZHN0YXRzOgorICAgICAgICAgICAgICAgIHJhaXNlIEJTRXJyb3IoIkNhbm5vdCBoYW5kbGUgbXVsdGlwbGUgdmVyc2lvbnMgb2YgdGhlIHNhbWUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhY2thZ2UgKHt9KSIuZm9ybWF0KHJlY2lwZVsnbmFtZSddKSkKKyAgICAgICAgICAgIGJzcmVjaXBlID0gQlNSZWNpcGUocmVjaXBlWyduYW1lJ10sIHJlY2lwZVsnZXBvY2gnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlWyd2ZXJzaW9uJ10sIHJlY2lwZVsncmV2aXNpb24nXSkKKyAgICAgICAgICAgIGZvciB0YXNrLCBkYXRhIGluIHJlY2lwZVsndGFza3MnXS5pdGVtcygpOgorICAgICAgICAgICAgICAgIGJzcmVjaXBlLnRhc2tzW3Rhc2tdID0gQlNUYXNrKGRhdGEpCisKKyAgICAgICAgICAgIGJ1aWxkc3RhdHNbcmVjaXBlWyduYW1lJ11dID0gYnNyZWNpcGUKKworICAgICAgICByZXR1cm4gYnVpbGRzdGF0cworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBmcm9tX2ZpbGVfanNvbihwYXRoKToKKyAgICAgICAgIiIiTG9hZCBidWlsZHN0YXRzIGZyb20gYSBKU09OIGZpbGUiIiIKKyAgICAgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGZvYmo6CisgICAgICAgICAgICBic19qc29uID0ganNvbi5sb2FkKGZvYmopCisgICAgICAgIHJldHVybiBCdWlsZFN0YXRzLmZyb21fanNvbihic19qc29uKQorCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHNwbGl0X25ldnIobmV2cik6CisgICAgICAgICIiIlNwbGl0IG5hbWUgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gZnJvbSByZWNpcGUgIm5ldnIiIHN0cmluZyIiIgorICAgICAgICBuX2VfdiwgcmV2aXNpb24gPSBuZXZyLnJzcGxpdCgnLScsIDEpCisgICAgICAgIG1hdGNoID0gcmUubWF0Y2gocideKD9QPG5hbWU+XFMrKS0oKD9QPGVwb2NoPlswLTldezEsNX0pXyk/KD9QPHZlcnNpb24+WzAtOV1cUyopJCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgbl9lX3YpCisgICAgICAgIGlmIG5vdCBtYXRjaDoKKyAgICAgICAgICAgICMgSWYgd2UncmUgbm90IGFibGUgdG8gcGFyc2UgYSB2ZXJzaW9uIHN0YXJ0aW5nIHdpdGggYSBudW1iZXIsIGp1c3QKKyAgICAgICAgICAgICMgdGFrZSB0aGUgcGFydCBhZnRlciBsYXN0IGRhc2gKKyAgICAgICAgICAgIG1hdGNoID0gcmUubWF0Y2gocideKD9QPG5hbWU+XFMrKS0oKD9QPGVwb2NoPlswLTldezEsNX0pXyk/KD9QPHZlcnNpb24+W14tXSspJCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fZV92KQorICAgICAgICBuYW1lID0gbWF0Y2guZ3JvdXAoJ25hbWUnKQorICAgICAgICB2ZXJzaW9uID0gbWF0Y2guZ3JvdXAoJ3ZlcnNpb24nKQorICAgICAgICBlcG9jaCA9IG1hdGNoLmdyb3VwKCdlcG9jaCcpCisgICAgICAgIHJldHVybiBuYW1lLCBlcG9jaCwgdmVyc2lvbiwgcmV2aXNpb24KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tX2RpcihjbHMsIHBhdGgpOgorICAgICAgICAiIiJMb2FkIGJ1aWxkc3RhdHMgZnJvbSBhIGJ1aWxkc3RhdHMgZGlyZWN0b3J5IiIiCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4ocGF0aCwgJ2J1aWxkX3N0YXRzJykpOgorICAgICAgICAgICAgcmFpc2UgQlNFcnJvcigie30gZG9lcyBub3QgbG9vayBsaWtlIGEgYnVpbGRzdGF0cyBkaXJlY3RvcnkiLmZvcm1hdChwYXRoKSkKKworICAgICAgICBsb2cuZGVidWcoIlJlYWRpbmcgYnVpbGRzdGF0cyBkaXJlY3RvcnkgJXMiLCBwYXRoKQorCisgICAgICAgIGJ1aWxkc3RhdHMgPSBjbHMoKQorICAgICAgICBzdWJkaXJzID0gb3MubGlzdGRpcihwYXRoKQorICAgICAgICBmb3IgZGlybmFtZSBpbiBzdWJkaXJzOgorICAgICAgICAgICAgcmVjaXBlX2RpciA9IG9zLnBhdGguam9pbihwYXRoLCBkaXJuYW1lKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIocmVjaXBlX2Rpcik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIG5hbWUsIGVwb2NoLCB2ZXJzaW9uLCByZXZpc2lvbiA9IGNscy5zcGxpdF9uZXZyKGRpcm5hbWUpCisgICAgICAgICAgICBic3JlY2lwZSA9IEJTUmVjaXBlKG5hbWUsIGVwb2NoLCB2ZXJzaW9uLCByZXZpc2lvbikKKyAgICAgICAgICAgIGZvciB0YXNrIGluIG9zLmxpc3RkaXIocmVjaXBlX2Rpcik6CisgICAgICAgICAgICAgICAgYnNyZWNpcGUudGFza3NbdGFza10gPSBCU1Rhc2suZnJvbV9maWxlKAorICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ocmVjaXBlX2RpciwgdGFzaykpCisgICAgICAgICAgICBpZiBuYW1lIGluIGJ1aWxkc3RhdHM6CisgICAgICAgICAgICAgICAgcmFpc2UgQlNFcnJvcigiQ2Fubm90IGhhbmRsZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGUgc2FtZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFja2FnZSAoe30pIi5mb3JtYXQobmFtZSkpCisgICAgICAgICAgICBidWlsZHN0YXRzW25hbWVdID0gYnNyZWNpcGUKKworICAgICAgICByZXR1cm4gYnVpbGRzdGF0cworCisgICAgZGVmIGFnZ3JlZ2F0ZShzZWxmLCBidWlsZHN0YXRzKToKKyAgICAgICAgIiIiQWdncmVnYXRlIG90aGVyIGJ1aWxkc3RhdHMgaW50byB0aGlzIiIiCisgICAgICAgIGlmIHNldChzZWxmLmtleXMoKSkgIT0gc2V0KGJ1aWxkc3RhdHMua2V5cygpKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlJlZnVzaW5nIHRvIGFnZ3JlZ2F0ZSBidWlsZHN0YXRzLCBzZXQgb2YgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVjaXBlcyBpcyBkaWZmZXJlbnQiKQorICAgICAgICBmb3IgcGtnLCBkYXRhIGluIGJ1aWxkc3RhdHMuaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGZbcGtnXS5hZ2dyZWdhdGUoZGF0YSkKKworCitkZWYgZGlmZl9idWlsZHN0YXRzKGJzMSwgYnMyLCBzdGF0X2F0dHIsIG1pbl92YWw9Tm9uZSwgbWluX2Fic2RpZmY9Tm9uZSk6CisgICAgIiIiQ29tcGFyZSB0aGUgdGFza3Mgb2YgdHdvIGJ1aWxkc3RhdHMiIiIKKyAgICB0YXNrc19kaWZmID0gW10KKyAgICBwa2dzID0gc2V0KGJzMS5rZXlzKCkpLnVuaW9uKHNldChiczIua2V5cygpKSkKKyAgICBmb3IgcGtnIGluIHBrZ3M6CisgICAgICAgIHRhc2tzMSA9IGJzMVtwa2ddLnRhc2tzIGlmIHBrZyBpbiBiczEgZWxzZSB7fQorICAgICAgICB0YXNrczIgPSBiczJbcGtnXS50YXNrcyBpZiBwa2cgaW4gYnMyIGVsc2Uge30KKyAgICAgICAgaWYgbm90IHRhc2tzMToKKyAgICAgICAgICAgIHBrZ19vcCA9ICcrJworICAgICAgICBlbGlmIG5vdCB0YXNrczI6CisgICAgICAgICAgICBwa2dfb3AgPSAnLScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBrZ19vcCA9ICcgJworCisgICAgICAgIGZvciB0YXNrIGluIHNldCh0YXNrczEua2V5cygpKS51bmlvbihzZXQodGFza3MyLmtleXMoKSkpOgorICAgICAgICAgICAgdGFza19vcCA9ICcgJworICAgICAgICAgICAgaWYgdGFzayBpbiB0YXNrczE6CisgICAgICAgICAgICAgICAgdmFsMSA9IGdldGF0dHIoYnMxW3BrZ10udGFza3NbdGFza10sIHN0YXRfYXR0cikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGFza19vcCA9ICcrJworICAgICAgICAgICAgICAgIHZhbDEgPSAwCisgICAgICAgICAgICBpZiB0YXNrIGluIHRhc2tzMjoKKyAgICAgICAgICAgICAgICB2YWwyID0gZ2V0YXR0cihiczJbcGtnXS50YXNrc1t0YXNrXSwgc3RhdF9hdHRyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2YWwyID0gMAorICAgICAgICAgICAgICAgIHRhc2tfb3AgPSAnLScKKworICAgICAgICAgICAgaWYgdmFsMSA9PSAwOgorICAgICAgICAgICAgICAgIHJlbGRpZmYgPSBmbG9hdCgnaW5mJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVsZGlmZiA9IDEwMCAqICh2YWwyIC0gdmFsMSkgLyB2YWwxCisKKyAgICAgICAgICAgIGlmIG1pbl92YWwgYW5kIG1heCh2YWwxLCB2YWwyKSA8IG1pbl92YWw6CisgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCJGaWx0ZXJpbmcgb3V0ICVzOiVzICglcykiLCBwa2csIHRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1heCh2YWwxLCB2YWwyKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbWluX2Fic2RpZmYgYW5kIGFicyh2YWwyIC0gdmFsMSkgPCBtaW5fYWJzZGlmZjoKKyAgICAgICAgICAgICAgICBsb2cuZGVidWcoIkZpbHRlcmluZyBvdXQgJXM6JXMgKGRpZmZlcmVuY2Ugb2YgJXMpIiwgcGtnLCB0YXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwyLXZhbDEpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHRhc2tzX2RpZmYuYXBwZW5kKFRhc2tEaWZmKHBrZywgcGtnX29wLCB0YXNrLCB0YXNrX29wLCB2YWwxLCB2YWwyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsMi12YWwxLCByZWxkaWZmKSkKKyAgICByZXR1cm4gdGFza3NfZGlmZgorCisKK2NsYXNzIEJTVmVyRGlmZihvYmplY3QpOgorICAgICIiIkNsYXNzIHJlcHJlc2VudGluZyByZWNpcGUgdmVyc2lvbiBkaWZmZXJlbmNlcyBiZXR3ZWVuIHR3byBidWlsZHN0YXRzIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJzMSwgYnMyKToKKyAgICAgICAgUmVjaXBlVmVyRGlmZiA9IG5hbWVkdHVwbGUoJ1JlY2lwZVZlckRpZmYnLCAnbGVmdCByaWdodCcpCisKKyAgICAgICAgcmVjaXBlczEgPSBzZXQoYnMxLmtleXMoKSkKKyAgICAgICAgcmVjaXBlczIgPSBzZXQoYnMyLmtleXMoKSkKKworICAgICAgICBzZWxmLm5ldyA9IGRpY3QoWyhyLCBiczJbcl0pIGZvciByIGluIHNvcnRlZChyZWNpcGVzMiAtIHJlY2lwZXMxKV0pCisgICAgICAgIHNlbGYuZHJvcHBlZCA9IGRpY3QoWyhyLCBiczFbcl0pIGZvciByIGluIHNvcnRlZChyZWNpcGVzMSAtIHJlY2lwZXMyKV0pCisgICAgICAgIHNlbGYuZWNoYW5nZWQgPSB7fQorICAgICAgICBzZWxmLnZjaGFuZ2VkID0ge30KKyAgICAgICAgc2VsZi5yY2hhbmdlZCA9IHt9CisgICAgICAgIHNlbGYudW5jaGFuZ2VkID0ge30KKyAgICAgICAgc2VsZi5lbXB0eV9kaWZmID0gRmFsc2UKKworICAgICAgICBjb21tb24gPSByZWNpcGVzMi5pbnRlcnNlY3Rpb24ocmVjaXBlczEpCisgICAgICAgIGlmIGNvbW1vbjoKKyAgICAgICAgICAgIGZvciByZWNpcGUgaW4gY29tbW9uOgorICAgICAgICAgICAgICAgIHJkaWZmID0gUmVjaXBlVmVyRGlmZihiczFbcmVjaXBlXSwgYnMyW3JlY2lwZV0pCisgICAgICAgICAgICAgICAgaWYgYnMxW3JlY2lwZV0uZXBvY2ggIT0gYnMyW3JlY2lwZV0uZXBvY2g6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZWNoYW5nZWRbcmVjaXBlXSA9IHJkaWZmCisgICAgICAgICAgICAgICAgZWxpZiBiczFbcmVjaXBlXS52ZXJzaW9uICE9IGJzMltyZWNpcGVdLnZlcnNpb246CisgICAgICAgICAgICAgICAgICAgIHNlbGYudmNoYW5nZWRbcmVjaXBlXSA9IHJkaWZmCisgICAgICAgICAgICAgICAgZWxpZiBiczFbcmVjaXBlXS5yZXZpc2lvbiAhPSBiczJbcmVjaXBlXS5yZXZpc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yY2hhbmdlZFtyZWNpcGVdID0gcmRpZmYKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnVuY2hhbmdlZFtyZWNpcGVdID0gcmRpZmYKKworICAgICAgICBpZiBsZW4ocmVjaXBlczEpID09IGxlbihyZWNpcGVzMikgPT0gbGVuKHNlbGYudW5jaGFuZ2VkKToKKyAgICAgICAgICAgIHNlbGYuZW1wdHlfZGlmZiA9IFRydWUKKworICAgIGRlZiBfX2Jvb2xfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLmVtcHR5X2RpZmYKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9jaGVja2xheWVyL19faW5pdF9fLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2NoZWNrbGF5ZXIvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM5NTI2MQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9jaGVja2xheWVyL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMzkyIEBACisjIFlvY3RvIFByb2plY3QgbGF5ZXIgY2hlY2sgdG9vbAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3VicHJvY2VzcworZnJvbSBlbnVtIGltcG9ydCBFbnVtCisKK2ltcG9ydCBiYi50aW5mb2lsCisKK2NsYXNzIExheWVyVHlwZShFbnVtKToKKyAgICBCU1AgPSAwCisgICAgRElTVFJPID0gMQorICAgIFNPRlRXQVJFID0gMgorICAgIEVSUk9SX05PX0xBWUVSX0NPTkYgPSA5OAorICAgIEVSUk9SX0JTUF9ESVNUUk8gPSA5OQorCitkZWYgX2dldF9jb25maWd1cmF0aW9ucyhwYXRoKToKKyAgICBjb25maWdzID0gW10KKworICAgIGZvciBmIGluIG9zLmxpc3RkaXIocGF0aCk6CisgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihwYXRoLCBmKQorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmaWxlX3BhdGgpIGFuZCBmLmVuZHN3aXRoKCcuY29uZicpOgorICAgICAgICAgICAgY29uZmlncy5hcHBlbmQoZls6LTVdKSAjIHN0cmlwIC5jb25mCisgICAgcmV0dXJuIGNvbmZpZ3MKKworZGVmIF9nZXRfbGF5ZXJfY29sbGVjdGlvbnMobGF5ZXJfcGF0aCwgbGNvbmY9Tm9uZSwgZGF0YT1Ob25lKToKKyAgICBpbXBvcnQgYmIucGFyc2UKKyAgICBpbXBvcnQgYmIuZGF0YQorCisgICAgaWYgbGNvbmYgaXMgTm9uZToKKyAgICAgICAgbGNvbmYgPSBvcy5wYXRoLmpvaW4obGF5ZXJfcGF0aCwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpCisKKyAgICBpZiBkYXRhIGlzIE5vbmU6CisgICAgICAgIGxkYXRhID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgYmIucGFyc2UuaW5pdF9wYXJzZXIobGRhdGEpCisgICAgZWxzZToKKyAgICAgICAgbGRhdGEgPSBkYXRhLmNyZWF0ZUNvcHkoKQorCisgICAgbGRhdGEuc2V0VmFyKCdMQVlFUkRJUicsIGxheWVyX3BhdGgpCisgICAgdHJ5OgorICAgICAgICBsZGF0YSA9IGJiLnBhcnNlLmhhbmRsZShsY29uZiwgbGRhdGEsIGluY2x1ZGU9VHJ1ZSkKKyAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgIHJhaXNlIExheWVyRXJyb3IoZXhjKQorICAgIGxkYXRhLmV4cGFuZFZhcnJlZignTEFZRVJESVInKQorCisgICAgY29sbGVjdGlvbnMgPSAobGRhdGEuZ2V0VmFyKCdCQkZJTEVfQ09MTEVDVElPTlMnKSBvciAnJykuc3BsaXQoKQorICAgIGlmIG5vdCBjb2xsZWN0aW9uczoKKyAgICAgICAgbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUobGF5ZXJfcGF0aCkKKyAgICAgICAgY29sbGVjdGlvbnMgPSBbbmFtZV0KKworICAgIGNvbGxlY3Rpb25zID0ge2M6IHt9IGZvciBjIGluIGNvbGxlY3Rpb25zfQorICAgIGZvciBuYW1lIGluIGNvbGxlY3Rpb25zOgorICAgICAgICBwcmlvcml0eSA9IGxkYXRhLmdldFZhcignQkJGSUxFX1BSSU9SSVRZXyVzJyAlIG5hbWUpCisgICAgICAgIHBhdHRlcm4gPSBsZGF0YS5nZXRWYXIoJ0JCRklMRV9QQVRURVJOXyVzJyAlIG5hbWUpCisgICAgICAgIGRlcGVuZHMgPSBsZGF0YS5nZXRWYXIoJ0xBWUVSREVQRU5EU18lcycgJSBuYW1lKQorICAgICAgICBjb2xsZWN0aW9uc1tuYW1lXVsncHJpb3JpdHknXSA9IHByaW9yaXR5CisgICAgICAgIGNvbGxlY3Rpb25zW25hbWVdWydwYXR0ZXJuJ10gPSBwYXR0ZXJuCisgICAgICAgIGNvbGxlY3Rpb25zW25hbWVdWydkZXBlbmRzJ10gPSBkZXBlbmRzCisKKyAgICByZXR1cm4gY29sbGVjdGlvbnMKKworZGVmIF9kZXRlY3RfbGF5ZXIobGF5ZXJfcGF0aCk6CisgICAgIiIiCisgICAgICAgIFNjYW5zIGxheWVyIGRpcmVjdG9yeSB0byBkZXRlY3Qgd2hhdCB0eXBlIG9mIGxheWVyCisgICAgICAgIGlzIEJTUCwgRGlzdHJvIG9yIFNvZnR3YXJlLgorCisgICAgICAgIFJldHVybnMgYSBkaWN0aW9uYXJ5IHdpdGggbGF5ZXIgbmFtZSwgdHlwZSBhbmQgcGF0aC4KKyAgICAiIiIKKworICAgIGxheWVyID0ge30KKyAgICBsYXllcl9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShsYXllcl9wYXRoKQorCisgICAgbGF5ZXJbJ25hbWUnXSA9IGxheWVyX25hbWUKKyAgICBsYXllclsncGF0aCddID0gbGF5ZXJfcGF0aAorICAgIGxheWVyWydjb25mJ10gPSB7fQorCisgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihsYXllcl9wYXRoLCAnY29uZicsICdsYXllci5jb25mJykpOgorICAgICAgICBsYXllclsndHlwZSddID0gTGF5ZXJUeXBlLkVSUk9SX05PX0xBWUVSX0NPTkYKKyAgICAgICAgcmV0dXJuIGxheWVyCisKKyAgICBtYWNoaW5lX2NvbmYgPSBvcy5wYXRoLmpvaW4obGF5ZXJfcGF0aCwgJ2NvbmYnLCAnbWFjaGluZScpCisgICAgZGlzdHJvX2NvbmYgPSBvcy5wYXRoLmpvaW4obGF5ZXJfcGF0aCwgJ2NvbmYnLCAnZGlzdHJvJykKKworICAgIGlzX2JzcCA9IEZhbHNlCisgICAgaXNfZGlzdHJvID0gRmFsc2UKKworICAgIGlmIG9zLnBhdGguaXNkaXIobWFjaGluZV9jb25mKToKKyAgICAgICAgbWFjaGluZXMgPSBfZ2V0X2NvbmZpZ3VyYXRpb25zKG1hY2hpbmVfY29uZikKKyAgICAgICAgaWYgbWFjaGluZXM6CisgICAgICAgICAgICBpc19ic3AgPSBUcnVlCisKKyAgICBpZiBvcy5wYXRoLmlzZGlyKGRpc3Ryb19jb25mKToKKyAgICAgICAgZGlzdHJvcyA9IF9nZXRfY29uZmlndXJhdGlvbnMoZGlzdHJvX2NvbmYpCisgICAgICAgIGlmIGRpc3Ryb3M6CisgICAgICAgICAgICBpc19kaXN0cm8gPSBUcnVlCisKKyAgICBpZiBpc19ic3AgYW5kIGlzX2Rpc3RybzoKKyAgICAgICAgbGF5ZXJbJ3R5cGUnXSA9IExheWVyVHlwZS5FUlJPUl9CU1BfRElTVFJPCisgICAgZWxpZiBpc19ic3A6CisgICAgICAgIGxheWVyWyd0eXBlJ10gPSBMYXllclR5cGUuQlNQCisgICAgICAgIGxheWVyWydjb25mJ11bJ21hY2hpbmVzJ10gPSBtYWNoaW5lcworICAgIGVsaWYgaXNfZGlzdHJvOgorICAgICAgICBsYXllclsndHlwZSddID0gTGF5ZXJUeXBlLkRJU1RSTworICAgICAgICBsYXllclsnY29uZiddWydkaXN0cm9zJ10gPSBkaXN0cm9zCisgICAgZWxzZToKKyAgICAgICAgbGF5ZXJbJ3R5cGUnXSA9IExheWVyVHlwZS5TT0ZUV0FSRQorCisgICAgbGF5ZXJbJ2NvbGxlY3Rpb25zJ10gPSBfZ2V0X2xheWVyX2NvbGxlY3Rpb25zKGxheWVyWydwYXRoJ10pCisKKyAgICByZXR1cm4gbGF5ZXIKKworZGVmIGRldGVjdF9sYXllcnMobGF5ZXJfZGlyZWN0b3JpZXMsIG5vX2F1dG8pOgorICAgIGxheWVycyA9IFtdCisKKyAgICBmb3IgZGlyZWN0b3J5IGluIGxheWVyX2RpcmVjdG9yaWVzOgorICAgICAgICBkaXJlY3RvcnkgPSBvcy5wYXRoLnJlYWxwYXRoKGRpcmVjdG9yeSkKKyAgICAgICAgaWYgZGlyZWN0b3J5Wy0xXSA9PSAnLyc6CisgICAgICAgICAgICBkaXJlY3RvcnkgPSBkaXJlY3RvcnlbMDotMV0KKworICAgICAgICBpZiBub19hdXRvOgorICAgICAgICAgICAgY29uZl9kaXIgPSBvcy5wYXRoLmpvaW4oZGlyZWN0b3J5LCAnY29uZicpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGNvbmZfZGlyKToKKyAgICAgICAgICAgICAgICBsYXllciA9IF9kZXRlY3RfbGF5ZXIoZGlyZWN0b3J5KQorICAgICAgICAgICAgICAgIGlmIGxheWVyOgorICAgICAgICAgICAgICAgICAgICBsYXllcnMuYXBwZW5kKGxheWVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoZGlyZWN0b3J5KToKKyAgICAgICAgICAgICAgICBkaXJfbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUocm9vdCkKKyAgICAgICAgICAgICAgICBjb25mX2RpciA9IG9zLnBhdGguam9pbihyb290LCAnY29uZicpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihjb25mX2Rpcik6CisgICAgICAgICAgICAgICAgICAgIGxheWVyID0gX2RldGVjdF9sYXllcihyb290KQorICAgICAgICAgICAgICAgICAgICBpZiBsYXllcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxheWVycy5hcHBlbmQobGF5ZXIpCisKKyAgICByZXR1cm4gbGF5ZXJzCisKK2RlZiBfZmluZF9sYXllcl9kZXBlbmRzKGRlcGVuZCwgbGF5ZXJzKToKKyAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJzOgorICAgICAgICBmb3IgY29sbGVjdGlvbiBpbiBsYXllclsnY29sbGVjdGlvbnMnXToKKyAgICAgICAgICAgIGlmIGRlcGVuZCA9PSBjb2xsZWN0aW9uOgorICAgICAgICAgICAgICAgIHJldHVybiBsYXllcgorICAgIHJldHVybiBOb25lCisKK2RlZiBhZGRfbGF5ZXJfZGVwZW5kZW5jaWVzKGJibGF5ZXJzY29uZiwgbGF5ZXIsIGxheWVycywgbG9nZ2VyKToKKyAgICBkZWYgcmVjdXJzZV9kZXBlbmRlbmNpZXMoZGVwZW5kcywgbGF5ZXIsIGxheWVycywgbG9nZ2VyLCByZXQgPSBbXSk6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygnUHJvY2Vzc2luZyBkZXBlbmRlbmNpZXMgJXMgZm9yIGxheWVyICVzLicgJSBcCisgICAgICAgICAgICAgICAgICAgIChkZXBlbmRzLCBsYXllclsnbmFtZSddKSkKKworICAgICAgICBmb3IgZGVwZW5kIGluIGRlcGVuZHMuc3BsaXQoKToKKyAgICAgICAgICAgICMgY29yZSAob2UtY29yZSkgaXMgc3VwcG9zZSB0byBiZSBwcm92aWRlZAorICAgICAgICAgICAgaWYgZGVwZW5kID09ICdjb3JlJzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBsYXllcl9kZXBlbmQgPSBfZmluZF9sYXllcl9kZXBlbmRzKGRlcGVuZCwgbGF5ZXJzKQorICAgICAgICAgICAgaWYgbm90IGxheWVyX2RlcGVuZDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0xheWVyICVzIGRlcGVuZHMgb24gJXMgYW5kIGlzblwndCBmb3VuZC4nICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgKGxheWVyWyduYW1lJ10sIGRlcGVuZCkpCisgICAgICAgICAgICAgICAgcmV0ID0gTm9uZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgV2Uga2VlcCBwcm9jZXNzaW5nLCBldmVuIGlmIHJldCBpcyBOb25lLCB0aGlzIGFsbG93cyB1cyB0byByZXBvcnQKKyAgICAgICAgICAgICMgbXVsdGlwbGUgZXJyb3JzIGF0IG9uY2UKKyAgICAgICAgICAgIGlmIHJldCBpcyBub3QgTm9uZSBhbmQgbGF5ZXJfZGVwZW5kIG5vdCBpbiByZXQ6CisgICAgICAgICAgICAgICAgcmV0LmFwcGVuZChsYXllcl9kZXBlbmQpCisKKyAgICAgICAgICAgICMgUmVjdXJzaXZlbHkgcHJvY2Vzcy4uLgorICAgICAgICAgICAgaWYgJ2NvbGxlY3Rpb25zJyBub3QgaW4gbGF5ZXJfZGVwZW5kOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZvciBjb2xsZWN0aW9uIGluIGxheWVyX2RlcGVuZFsnY29sbGVjdGlvbnMnXToKKyAgICAgICAgICAgICAgICBjb2xsZWN0X2RlcHMgPSBsYXllcl9kZXBlbmRbJ2NvbGxlY3Rpb25zJ11bY29sbGVjdGlvbl1bJ2RlcGVuZHMnXQorICAgICAgICAgICAgICAgIGlmIG5vdCBjb2xsZWN0X2RlcHM6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcmV0ID0gcmVjdXJzZV9kZXBlbmRlbmNpZXMoY29sbGVjdF9kZXBzLCBsYXllcl9kZXBlbmQsIGxheWVycywgbG9nZ2VyLCByZXQpCisKKyAgICAgICAgcmV0dXJuIHJldAorCisgICAgbGF5ZXJfZGVwZW5kcyA9IFtdCisgICAgZm9yIGNvbGxlY3Rpb24gaW4gbGF5ZXJbJ2NvbGxlY3Rpb25zJ106CisgICAgICAgIGRlcGVuZHMgPSBsYXllclsnY29sbGVjdGlvbnMnXVtjb2xsZWN0aW9uXVsnZGVwZW5kcyddCisgICAgICAgIGlmIG5vdCBkZXBlbmRzOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBsYXllcl9kZXBlbmRzID0gcmVjdXJzZV9kZXBlbmRlbmNpZXMoZGVwZW5kcywgbGF5ZXIsIGxheWVycywgbG9nZ2VyLCBsYXllcl9kZXBlbmRzKQorCisgICAgIyBOb3RlOiBbXSAoZW1wdHkpIGlzIGFsbG93ZWQsIE5vbmUgaXMgbm90IQorICAgIGlmIGxheWVyX2RlcGVuZHMgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZWxzZToKKyAgICAgICAgIyBEb24ndCBhZGQgYSBsYXllciB0aGF0IGlzIGFscmVhZHkgcHJlc2VudC4KKyAgICAgICAgYWRkZWQgPSBzZXQoKQorICAgICAgICBvdXRwdXQgPSBjaGVja19jb21tYW5kKCdHZXR0aW5nIGV4aXN0aW5nIGxheWVycyBmYWlsZWQuJywgJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgIGZvciBsYXllciwgcGF0aCwgcHJpIGluIHJlLmZpbmRhbGwocideKFxTKykgKyhbXlxuXSo/KSArKFxkKykkJywgb3V0cHV0LCByZS5NVUxUSUxJTkUpOgorICAgICAgICAgICAgYWRkZWQuYWRkKHBhdGgpCisKKyAgICAgICAgZm9yIGxheWVyX2RlcGVuZCBpbiBsYXllcl9kZXBlbmRzOgorICAgICAgICAgICAgbmFtZSA9IGxheWVyX2RlcGVuZFsnbmFtZSddCisgICAgICAgICAgICBwYXRoID0gbGF5ZXJfZGVwZW5kWydwYXRoJ10KKyAgICAgICAgICAgIGlmIHBhdGggaW4gYWRkZWQ6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYWRkZWQuYWRkKHBhdGgpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygnQWRkaW5nIGxheWVyIGRlcGVuZGVuY3kgJXMnICUgbmFtZSkKKyAgICAgICAgICAgIHdpdGggb3BlbihiYmxheWVyc2NvbmYsICdhKycpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiXG5CQkxBWUVSUyArPSBcIiVzXCJcbiIgJSBwYXRoKQorICAgIHJldHVybiBUcnVlCisKK2RlZiBhZGRfbGF5ZXIoYmJsYXllcnNjb25mLCBsYXllciwgbGF5ZXJzLCBsb2dnZXIpOgorICAgIGxvZ2dlci5pbmZvKCdBZGRpbmcgbGF5ZXIgJXMnICUgbGF5ZXJbJ25hbWUnXSkKKyAgICB3aXRoIG9wZW4oYmJsYXllcnNjb25mLCAnYSsnKSBhcyBmOgorICAgICAgICBmLndyaXRlKCJcbkJCTEFZRVJTICs9IFwiJXNcIlxuIiAlIGxheWVyWydwYXRoJ10pCisKKyAgICByZXR1cm4gVHJ1ZQorCitkZWYgY2hlY2tfY29tbWFuZChlcnJvcl9tc2csIGNtZCk6CisgICAgJycnCisgICAgUnVuIGEgY29tbWFuZCB1bmRlciBhIHNoZWxsLCBjYXB0dXJlIHN0ZG91dCBhbmQgc3RkZXJyIGluIGEgc2luZ2xlIHN0cmVhbSwKKyAgICB0aHJvdyBhbiBlcnJvciB3aGVuIGNvbW1hbmQgcmV0dXJucyBub24temVybyBleGl0IGNvZGUuIFJldHVybnMgdGhlIG91dHB1dC4KKyAgICAnJycKKworICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgIG91dHB1dCwgXyA9IHAuY29tbXVuaWNhdGUoKQorICAgIGlmIHAucmV0dXJuY29kZToKKyAgICAgICAgbXNnID0gIiVzXG5Db21tYW5kOiAlc1xuT3V0cHV0OlxuJXMiICUgKGVycm9yX21zZywgY21kLCBvdXRwdXQuZGVjb2RlKCd1dGYtOCcpKQorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IobXNnKQorICAgIHJldHVybiBvdXRwdXQKKworZGVmIGdldF9zaWduYXR1cmVzKGJ1aWxkZGlyLCBmYWlsc2FmZT1GYWxzZSwgbWFjaGluZT1Ob25lKToKKyAgICBpbXBvcnQgcmUKKworICAgICMgc29tZSByZWNpcGVzIG5lZWRzIHRvIGJlIGV4Y2x1ZGVkIGxpa2UgbWV0YS13b3JsZC1wa2dkYXRhCisgICAgIyBiZWNhdXNlIGEgbGF5ZXIgY2FuIGFkZCByZWNpcGVzIHRvIGEgd29ybGQgYnVpbGQgc28gc2lnbmF0dXJlCisgICAgIyB3aWxsIGJlIGNoYW5nZQorICAgIGV4Y2x1ZGVfcmVjaXBlcyA9ICgnbWV0YS13b3JsZC1wa2dkYXRhJywpCisKKyAgICBzaWdzID0ge30KKyAgICB0dW5lMnRhc2tzID0ge30KKworICAgIGNtZCA9ICcnCisgICAgaWYgbWFjaGluZToKKyAgICAgICAgY21kICs9ICdNQUNISU5FPSVzICcgJSBtYWNoaW5lCisgICAgY21kICs9ICdiaXRiYWtlICcKKyAgICBpZiBmYWlsc2FmZToKKyAgICAgICAgY21kICs9ICctayAnCisgICAgY21kICs9ICctUyBub25lIHdvcmxkJworICAgIHNpZ3NfZmlsZSA9IG9zLnBhdGguam9pbihidWlsZGRpciwgJ2xvY2tlZC1zaWdzLmluYycpCisgICAgaWYgb3MucGF0aC5leGlzdHMoc2lnc19maWxlKToKKyAgICAgICAgb3MudW5saW5rKHNpZ3NfZmlsZSkKKyAgICB0cnk6CisgICAgICAgIGNoZWNrX2NvbW1hbmQoJ0dlbmVyYXRpbmcgc2lnbmF0dXJlcyBmYWlsZWQuIFRoaXMgbWlnaHQgYmUgZHVlIHRvIHNvbWUgcGFyc2UgZXJyb3IgYW5kL29yIGdlbmVyYWwgbGF5ZXIgaW5jb21wYXRpYmlsaXRpZXMuJywKKyAgICAgICAgICAgICAgICAgICAgICBjbWQpCisgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBleDoKKyAgICAgICAgaWYgZmFpbHNhZmUgYW5kIG9zLnBhdGguZXhpc3RzKHNpZ3NfZmlsZSk6CisgICAgICAgICAgICAjIElnbm9yZSB0aGUgZXJyb3IgaGVyZS4gTW9zdCBsaWtlbHkgc29tZSByZWNpcGVzIGFjdGl2ZQorICAgICAgICAgICAgIyBpbiBhIHdvcmxkIGJ1aWxkIGxhY2sgc29tZSBkZXBlbmRlbmNpZXMuIFRoZXJlIGlzIGEKKyAgICAgICAgICAgICMgc2VwYXJhdGUgdGVzdF9tYWNoaW5lX3dvcmxkX2J1aWxkIHdoaWNoIGV4cG9zZXMgdGhlCisgICAgICAgICAgICAjIGZhaWx1cmUuCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZQorCisgICAgc2lnX3JlZ2V4ID0gcmUuY29tcGlsZSgiXig/UDx0YXNrPi4qOi4qKTooP1A8aGFzaD4uKikgLiQiKQorICAgIHR1bmVfcmVnZXggPSByZS5jb21waWxlKCIoXnxccylTSUdHRU5fTE9DS0VEU0lHU190LSg/UDx0dW5lPlxTKilccyo9XHMqIikKKyAgICBjdXJyZW50X3R1bmUgPSBOb25lCisgICAgd2l0aCBvcGVuKHNpZ3NfZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICAgICAgdCA9IHR1bmVfcmVnZXguc2VhcmNoKGxpbmUpCisgICAgICAgICAgICBpZiB0OgorICAgICAgICAgICAgICAgIGN1cnJlbnRfdHVuZSA9IHQuZ3JvdXAoJ3R1bmUnKQorICAgICAgICAgICAgcyA9IHNpZ19yZWdleC5tYXRjaChsaW5lKQorICAgICAgICAgICAgaWYgczoKKyAgICAgICAgICAgICAgICBleGNsdWRlID0gRmFsc2UKKyAgICAgICAgICAgICAgICBmb3IgZXIgaW4gZXhjbHVkZV9yZWNpcGVzOgorICAgICAgICAgICAgICAgICAgICAocmVjaXBlLCB0YXNrKSA9IHMuZ3JvdXAoJ3Rhc2snKS5zcGxpdCgnOicpCisgICAgICAgICAgICAgICAgICAgIGlmIGVyID09IHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGUgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIGV4Y2x1ZGU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBzaWdzW3MuZ3JvdXAoJ3Rhc2snKV0gPSBzLmdyb3VwKCdoYXNoJykKKyAgICAgICAgICAgICAgICB0dW5lMnRhc2tzLnNldGRlZmF1bHQoY3VycmVudF90dW5lLCBbXSkuYXBwZW5kKHMuZ3JvdXAoJ3Rhc2snKSkKKworICAgIGlmIG5vdCBzaWdzOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0NhblwndCBsb2FkIHNpZ25hdHVyZXMgZnJvbSAlcycgJSBzaWdzX2ZpbGUpCisKKyAgICByZXR1cm4gKHNpZ3MsIHR1bmUydGFza3MpCisKK2RlZiBnZXRfZGVwZ3JhcGgodGFyZ2V0cz1bJ3dvcmxkJ10sIGZhaWxzYWZlPUZhbHNlKToKKyAgICAnJycKKyAgICBSZXR1cm5zIHRoZSBkZXBlbmRlbmN5IGdyYXBoIGZvciB0aGUgZ2l2ZW4gdGFyZ2V0KHMpLgorICAgIFRoZSBkZXBlbmRlbmN5IGdyYXBoIGlzIHRha2VuIGRpcmVjdGx5IGZyb20gRGVwVHJlZUV2ZW50LgorICAgICcnJworICAgIGRlcGdyYXBoID0gTm9uZQorICAgIHdpdGggYmIudGluZm9pbC5UaW5mb2lsKCkgYXMgdGluZm9pbDoKKyAgICAgICAgdGluZm9pbC5wcmVwYXJlKGNvbmZpZ19vbmx5PUZhbHNlKQorICAgICAgICB0aW5mb2lsLnNldF9ldmVudF9tYXNrKFsnYmIuZXZlbnQuTm9Qcm92aWRlcicsICdiYi5ldmVudC5EZXBUcmVlR2VuZXJhdGVkJywgJ2JiLmNvbW1hbmQuQ29tbWFuZENvbXBsZXRlZCddKQorICAgICAgICBpZiBub3QgdGluZm9pbC5ydW5fY29tbWFuZCgnZ2VuZXJhdGVEZXBUcmVlRXZlbnQnLCB0YXJnZXRzLCAnZG9fYnVpbGQnKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignc3RhcnRpbmcgZ2VuZXJhdGVEZXBUcmVlRXZlbnQgZmFpbGVkJykKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGV2ZW50ID0gdGluZm9pbC53YWl0X2V2ZW50KHRpbWVvdXQ9MTAwMCkKKyAgICAgICAgICAgIGlmIGV2ZW50OgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZEZhaWxlZCk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignR2VuZXJhdGluZyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGZhaWxlZDogJXMnICUgZXZlbnQuZXJyb3IpCisgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb21tYW5kLkNvbW1hbmRDb21wbGV0ZWQpOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTm9Qcm92aWRlcik6CisgICAgICAgICAgICAgICAgICAgIGlmIGZhaWxzYWZlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgZXZlbnQgaXMgaW5mb3JtYXRpb25hbCwgd2Ugd2lsbCBnZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAjIHJlbWFpbmluZyBkZXBlbmRlbmNpZXMgZXZlbnR1YWxseSBhbmQgdGh1cyBjYW4gaWdub3JlIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICMgaGVyZSBsaWtlIHdlIGRvIGluIGdldF9zaWduYXR1cmVzKCksIGlmIGRlc2lyZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBpZiBldmVudC5fcmVhc29uczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTm90aGluZyBwcm92aWRlcyAlczogJXMnICUgKGV2ZW50Ll9pdGVtLCBldmVudC5fcmVhc29ucykpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ05vdGhpbmcgcHJvdmlkZXMgJXMuJyAlIChldmVudC5faXRlbSkpCisgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5EZXBUcmVlR2VuZXJhdGVkKToKKyAgICAgICAgICAgICAgICAgICAgZGVwZ3JhcGggPSBldmVudC5fZGVwZ3JhcGgKKworICAgIGlmIGRlcGdyYXBoIGlzIE5vbmU6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQ291bGQgbm90IHJldHJpZXZlIHRoZSBkZXBncmFwaC4nKQorICAgIHJldHVybiBkZXBncmFwaAorCitkZWYgY29tcGFyZV9zaWduYXR1cmVzKG9sZF9zaWdzLCBjdXJyX3NpZ3MpOgorICAgICcnJworICAgIENvbXBhcmVzIHRoZSByZXN1bHQgb2YgdHdvIGdldF9zaWduYXR1cmVzKCkgY2FsbHMuIFJldHVybnMgTm9uZSBpZiBubworICAgIHByb2JsZW1zIGZvdW5kLCBvdGhlcndpc2UgYSBzdHJpbmcgdGhhdCBjYW4gYmUgdXNlZCBhcyBhZGRpdGlvbmFsCisgICAgZXhwbGFuYXRpb24gaW4gc2VsZi5mYWlsKCkuCisgICAgJycnCisgICAgIyB0YXNrIC0+IChvbGQgc2lnbmF0dXJlLCBuZXcgc2lnbmF0dXJlKQorICAgIHNpZ19kaWZmID0ge30KKyAgICBmb3IgdGFzayBpbiBvbGRfc2lnczoKKyAgICAgICAgaWYgdGFzayBpbiBjdXJyX3NpZ3MgYW5kIFwKKyAgICAgICAgICAgb2xkX3NpZ3NbdGFza10gIT0gY3Vycl9zaWdzW3Rhc2tdOgorICAgICAgICAgICAgc2lnX2RpZmZbdGFza10gPSAob2xkX3NpZ3NbdGFza10sIGN1cnJfc2lnc1t0YXNrXSkKKworICAgIGlmIG5vdCBzaWdfZGlmZjoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICMgQmV3YXJlLCBkZXBncmFwaCB1c2VzIHRhc2s9PHBuPi48dGFza25hbWU+IHdoZXJlYXMgZ2V0X3NpZ25hdHVyZXMoKQorICAgICMgdXNlcyA8cG4+Ojx0YXNrbmFtZT4uIE5lZWQgdG8gY29udmVydCBzb21ldGltZXMuIFRoZSBvdXRwdXQgZm9sbG93cworICAgICMgdGhlIGNvbnZlbnRpb24gZnJvbSBnZXRfc2lnbmF0dXJlcygpIGJlY2F1c2UgdGhhdCBzZWVtcyBjbG9zZXIgdG8KKyAgICAjIG5vcm1hbCBiaXRiYWtlIG91dHB1dC4KKyAgICBkZWYgc2lnMmdyYXBoKHRhc2spOgorICAgICAgICBwbiwgdGFza25hbWUgPSB0YXNrLnJzcGxpdCgnOicsIDEpCisgICAgICAgIHJldHVybiBwbiArICcuJyArIHRhc2tuYW1lCisgICAgZGVmIGdyYXBoMnNpZyh0YXNrKToKKyAgICAgICAgcG4sIHRhc2tuYW1lID0gdGFzay5yc3BsaXQoJy4nLCAxKQorICAgICAgICByZXR1cm4gcG4gKyAnOicgKyB0YXNrbmFtZQorICAgIGRlcGdyYXBoID0gZ2V0X2RlcGdyYXBoKGZhaWxzYWZlPVRydWUpCisgICAgZGVwZW5kcyA9IGRlcGdyYXBoWyd0ZGVwZW5kcyddCisKKyAgICAjIElmIGEgdGFzayBBIGhhcyBhIGNoYW5nZWQgc2lnbmF0dXJlLCBidXQgbm9uZSBvZiBpdHMKKyAgICAjIGRlcGVuZGVuY2llcywgdGhlbiB3ZSBuZWVkIHRvIHJlcG9ydCBpdCBiZWNhdXNlIGl0IGlzCisgICAgIyB0aGUgb25lIHdoaWNoIGludHJvZHVjZXMgYSBjaGFuZ2UuIEFueSB0YXNrIGRlcGVuZGluZyBvbgorICAgICMgQSAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgd2lsbCBhbHNvIGhhdmUgYSBjaGFuZ2VkCisgICAgIyBzaWduYXR1cmUsIGJ1dCB3ZSBkb24ndCBuZWVkIHRvIHJlcG9ydCBpdC4gSXQgbWlnaHQgaGF2ZQorICAgICMgaXRzIG93biBjaGFuZ2VzLCB3aGljaCB3aWxsIGJlY29tZSBhcHBhcmVudCBvbmNlIHRoZQorICAgICMgaXNzdWVzIHRoYXQgd2UgZG8gcmVwb3J0IGFyZSBmaXhlZCBhbmQgdGhlIHRlc3QgZ2V0cyBydW4KKyAgICAjIGFnYWluLgorICAgIHNpZ19kaWZmX2ZpbHRlcmVkID0gW10KKyAgICBmb3IgdGFzaywgKG9sZF9zaWcsIG5ld19zaWcpIGluIHNpZ19kaWZmLml0ZW1zKCk6CisgICAgICAgIGRlcHNfdGFpbnRlZCA9IEZhbHNlCisgICAgICAgIGZvciBkZXAgaW4gZGVwZW5kcy5nZXQoc2lnMmdyYXBoKHRhc2spLCAoKSk6CisgICAgICAgICAgICBpZiBncmFwaDJzaWcoZGVwKSBpbiBzaWdfZGlmZjoKKyAgICAgICAgICAgICAgICBkZXBzX3RhaW50ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbm90IGRlcHNfdGFpbnRlZDoKKyAgICAgICAgICAgIHNpZ19kaWZmX2ZpbHRlcmVkLmFwcGVuZCgodGFzaywgb2xkX3NpZywgbmV3X3NpZykpCisKKyAgICBtc2cgPSBbXQorICAgIG1zZy5hcHBlbmQoJyVkIHNpZ25hdHVyZXMgY2hhbmdlZCwgaW5pdGlhbCBkaWZmZXJlbmNlcyAoZmlyc3QgaGFzaCBiZWZvcmUsIHNlY29uZCBhZnRlcik6JyAlCisgICAgICAgICAgICAgICBsZW4oc2lnX2RpZmYpKQorICAgIGZvciBkaWZmIGluIHNvcnRlZChzaWdfZGlmZl9maWx0ZXJlZCk6CisgICAgICAgIHJlY2lwZSwgdGFza25hbWUgPSBkaWZmWzBdLnJzcGxpdCgnOicsIDEpCisgICAgICAgIGNtZCA9ICdiaXRiYWtlLWRpZmZzaWdzIC0tdGFzayAlcyAlcyAtLXNpZ25hdHVyZSAlcyAlcycgJSBcCisgICAgICAgICAgICAgIChyZWNpcGUsIHRhc2tuYW1lLCBkaWZmWzFdLCBkaWZmWzJdKQorICAgICAgICBtc2cuYXBwZW5kKCcgICAlczogJXMgLT4gJXMnICUgZGlmZikKKyAgICAgICAgbXNnLmFwcGVuZCgnICAgICAgJXMnICUgY21kKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRwdXQgPSBjaGVja19jb21tYW5kKCdEZXRlcm1pbmluZyBzaWduYXR1cmUgZGlmZmVyZW5jZSBmYWlsZWQuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kKS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBlcnJvcjoKKyAgICAgICAgICAgIG91dHB1dCA9IHN0cihlcnJvcikKKyAgICAgICAgaWYgb3V0cHV0OgorICAgICAgICAgICAgbXNnLmV4dGVuZChbJyAgICAgICcgKyBsaW5lIGZvciBsaW5lIGluIG91dHB1dC5zcGxpdGxpbmVzKCldKQorICAgICAgICAgICAgbXNnLmFwcGVuZCgnJykKKyAgICByZXR1cm4gJ1xuJy5qb2luKG1zZykKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9jaGVja2xheWVyL2Nhc2UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvY2hlY2tsYXllci9jYXNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZDAwNDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvY2hlY2tsYXllci9jYXNlLnB5CkBAIC0wLDAgKzEsNyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKK2Zyb20gb2VxYS5jb3JlLmNhc2UgaW1wb3J0IE9FVGVzdENhc2UKKworY2xhc3MgT0VDaGVja0xheWVyVGVzdENhc2UoT0VUZXN0Q2FzZSk6CisgICAgcGFzcwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2NvbXBhdGxheWVyL2Nhc2VzL19faW5pdF9fLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2NoZWNrbGF5ZXIvY2FzZXMvX19pbml0X18ucHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9jb21wYXRsYXllci9jYXNlcy9fX2luaXRfXy5weQpyZW5hbWUgdG8gaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2NoZWNrbGF5ZXIvY2FzZXMvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9jaGVja2xheWVyL2Nhc2VzL2JzcC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9jaGVja2xheWVyL2Nhc2VzL2JzcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmI2MTFiCi0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2NoZWNrbGF5ZXIvY2FzZXMvYnNwLnB5CkBAIC0wLDAgKzEsMjA0IEBACisjIENvcHlyaWdodCAoQykgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gY2hlY2tsYXllciBpbXBvcnQgTGF5ZXJUeXBlLCBnZXRfc2lnbmF0dXJlcywgY2hlY2tfY29tbWFuZCwgZ2V0X2RlcGdyYXBoCitmcm9tIGNoZWNrbGF5ZXIuY2FzZSBpbXBvcnQgT0VDaGVja0xheWVyVGVzdENhc2UKKworY2xhc3MgQlNQQ2hlY2tMYXllcihPRUNoZWNrTGF5ZXJUZXN0Q2FzZSk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIGlmIHNlbGYudGMubGF5ZXJbJ3R5cGUnXSAhPSBMYXllclR5cGUuQlNQOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIkJTUENoZWNrTGF5ZXI6IExheWVyICVzIGlzbid0IEJTUCBvbmUuIiAlXAorICAgICAgICAgICAgICAgIHNlbGYudGMubGF5ZXJbJ25hbWUnXSkKKworICAgIGRlZiB0ZXN0X2JzcF9kZWZpbmVzX21hY2hpbmVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi50Yy5sYXllclsnY29uZiddWydtYWNoaW5lcyddLCAKKyAgICAgICAgICAgICAgICAiTGF5ZXIgaXMgQlNQIGJ1dCBkb2Vzbid0IGRlZmluZXMgbWFjaGluZXMuIikKKworICAgIGRlZiB0ZXN0X2JzcF9ub19zZXRfbWFjaGluZShzZWxmKToKKyAgICAgICAgZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBnZXRfYmJfdmFyCisKKyAgICAgICAgbWFjaGluZSA9IGdldF9iYl92YXIoJ01BQ0hJTkUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGRbJ2JidmFycyddWydNQUNISU5FJ10sIG1hY2hpbmUsCisgICAgICAgICAgICAgICAgbXNnPSJMYXllciAlcyBtb2RpZmllZCBtYWNoaW5lICVzIC0+ICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgKHNlbGYudGMubGF5ZXJbJ25hbWUnXSwgc2VsZi50ZFsnYmJ2YXJzJ11bJ01BQ0hJTkUnXSwgbWFjaGluZSkpCisKKworICAgIGRlZiB0ZXN0X21hY2hpbmVfd29ybGQoc2VsZik6CisgICAgICAgICcnJworICAgICAgICAiYml0YmFrZSB3b3JsZCIgaXMgZXhwZWN0ZWQgdG8gd29yayByZWdhcmRsZXNzIHdoaWNoIG1hY2hpbmUgaXMgc2VsZWN0ZWQuCisgICAgICAgIEJTUCBsYXllcnMgc29tZXRpbWVzIGJyZWFrIHRoYXQgYnkgZW5hYmxpbmcgYSByZWNpcGUgZm9yIGEgY2VydGFpbiBtYWNoaW5lCisgICAgICAgIHdpdGhvdXQgY2hlY2tpbmcgd2hldGhlciB0aGF0IHJlY2lwZSBhY3R1YWxseSBjYW4gYmUgYnVpbHQgaW4gdGhlIGN1cnJlbnQKKyAgICAgICAgZGlzdHJvIGNvbmZpZ3VyYXRpb24gKGZvciBleGFtcGxlLCBPcGVuR0wgbWlnaHQgbm90IGVuYWJsZWQpLgorCisgICAgICAgIFRoaXMgdGVzdCBpdGVyYXRlcyBvdmVyIGFsbCBtYWNoaW5lcy4gSXQgd291bGQgYmUgbmljZXIgdG8gaW5zdGFudGlhdGUKKyAgICAgICAgaXQgb25jZSBwZXIgbWFjaGluZS4gSXQgbWVyZWx5IGNoZWNrcyBmb3IgZXJyb3JzIGR1cmluZyBwYXJzZQorICAgICAgICB0aW1lLiBJdCBkb2VzIG5vdCBhY3R1YWxseSBhdHRlbXB0IHRvIGJ1aWxkIGFueXRoaW5nLgorICAgICAgICAnJycKKworICAgICAgICBpZiBub3Qgc2VsZi50ZFsnbWFjaGluZXMnXToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ05vIG1hY2hpbmVzIHNldCB3aXRoIC0tbWFjaGluZXMuJykKKyAgICAgICAgbXNnID0gW10KKyAgICAgICAgZm9yIG1hY2hpbmUgaW4gc2VsZi50ZFsnbWFjaGluZXMnXToKKyAgICAgICAgICAgICMgSW4gY29udHJhc3QgdG8gdGVzdF9tYWNoaW5lX3NpZ25hdHVyZXMoKSBiZWxvdywgZXJyb3JzIGFyZSBmYXRhbCBoZXJlLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGdldF9zaWduYXR1cmVzKHNlbGYudGRbJ2J1aWxkZGlyJ10sIGZhaWxzYWZlPUZhbHNlLCBtYWNoaW5lPW1hY2hpbmUpCisgICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGV4OgorICAgICAgICAgICAgICAgIG1zZy5hcHBlbmQoc3RyKGV4KSkKKyAgICAgICAgaWYgbXNnOgorICAgICAgICAgICAgbXNnLmluc2VydCgwLCAnVGhlIGZvbGxvd2luZyBtYWNoaW5lcyBicm9rZSBhIHdvcmxkIGJ1aWxkOicpCisgICAgICAgICAgICBzZWxmLmZhaWwoJ1xuJy5qb2luKG1zZykpCisKKyAgICBkZWYgdGVzdF9tYWNoaW5lX3NpZ25hdHVyZXMoc2VsZik6CisgICAgICAgICcnJworICAgICAgICBTZWxlY3RpbmcgYSBtYWNoaW5lIG1heSBvbmx5IGFmZmVjdCB0aGUgc2lnbmF0dXJlIG9mIHRhc2tzIHRoYXQgYXJlIHNwZWNpZmljCisgICAgICAgIHRvIHRoYXQgbWFjaGluZS4gSW4gb3RoZXIgd29yZHMsIHdoZW4gTUFDSElORT1BIGFuZCBNQUNISU5FPUIgc2hhcmUgYSByZWNpcGUKKyAgICAgICAgZm9vIGFuZCB0aGUgb3V0cHV0IG9mIGZvbywgdGhlbiBib3RoIG1hY2hpbmUgY29uZmlndXJhdGlvbnMgbXVzdCBidWlsZCBmb28KKyAgICAgICAgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkuIE90aGVyd2lzZSBpdCBpcyBub3QgcG9zc2libGUgdG8gdXNlIGJvdGggbWFjaGluZXMKKyAgICAgICAgaW4gdGhlIHNhbWUgZGlzdHJpYnV0aW9uLgorCisgICAgICAgIFRoaXMgY3JpdGVyaWEgY2FuIG9ubHkgYmUgdGVzdGVkIGJ5IHRlc3RpbmcgZGlmZmVyZW50IG1hY2hpbmVzIGluIGNvbWJpbmF0aW9uLAorICAgICAgICBpLmUuIG9uZSBtYWluIGxheWVyLCBwb3RlbnRpYWxseSBzZXZlcmFsIGFkZGl0aW9uYWwgQlNQIGxheWVycyBhbmQgYW4gZXhwbGljaXQKKyAgICAgICAgY2hvaWNlIG9mIG1hY2hpbmVzOgorICAgICAgICB5b2N0by1jaGVjay1sYXllciAtLWFkZGl0aW9uYWwtbGF5ZXJzIC4uLi9tZXRhLWludGVsIC0tbWFjaGluZXMgaW50ZWwtY29yZWk3LTY0IGlteDZzbGV2ayAtLSAuLi4vbWV0YS1mcmVlc2NhbGUKKyAgICAgICAgJycnCisKKyAgICAgICAgaWYgbm90IHNlbGYudGRbJ21hY2hpbmVzJ106CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdObyBtYWNoaW5lcyBzZXQgd2l0aCAtLW1hY2hpbmVzLicpCisKKyAgICAgICAgIyBDb2xsZWN0IHNpZ25hdHVyZXMgZm9yIGFsbCBtYWNoaW5lcyB0aGF0IHdlIGFyZSB0ZXN0aW5nCisgICAgICAgICMgYW5kIG1lcmdlIHRoYXQgaW50byBhIGhhc2g6CisgICAgICAgICMgdHVuZSAtPiB0YXNrIC0+IHNpZ25hdHVyZSAtPiBsaXN0IG9mIG1hY2hpbmVzIHdpdGggdGhhdCBjb21iaW5hdGlvbgorICAgICAgICAjCisgICAgICAgICMgSXQgaXMgYW4gZXJyb3IgaWYgYW55IHR1bmUvdGFzayBwYWlyIGhhcyBtb3JlIHRoYW4gb25lIHNpZ25hdHVyZSwKKyAgICAgICAgIyBiZWNhdXNlIHRoYXQgaW1wbGllcyB0aGF0IHRoZSBtYWNoaW5lcyB0aGF0IGNhdXNlZCB0aG9zZSBkaWZmZXJlbnQKKyAgICAgICAgIyBzaWduYXR1cmVzIGRvIG5vdCBhZ3JlZSBvbiBob3cgdG8gZXhlY3V0ZSB0aGUgdGFzay4KKyAgICAgICAgdHVuZXMgPSB7fQorICAgICAgICAjIFByZXNlcnZlIG9yZGVyaW5nIG9mIG1hY2hpbmVzIGFzIGNob3NlbiBieSB0aGUgdXNlci4KKyAgICAgICAgZm9yIG1hY2hpbmUgaW4gc2VsZi50ZFsnbWFjaGluZXMnXToKKyAgICAgICAgICAgIGN1cnJfc2lncywgdHVuZTJ0YXNrcyA9IGdldF9zaWduYXR1cmVzKHNlbGYudGRbJ2J1aWxkZGlyJ10sIGZhaWxzYWZlPVRydWUsIG1hY2hpbmU9bWFjaGluZSkKKyAgICAgICAgICAgICMgSW52ZXJ0IHRoZSB0dW5lIC0+IFt0YXNrc10gbWFwcGluZy4KKyAgICAgICAgICAgIHRhc2tzMnR1bmUgPSB7fQorICAgICAgICAgICAgZm9yIHR1bmUsIHRhc2tzIGluIHR1bmUydGFza3MuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgICAgICAgICAgdGFza3MydHVuZVt0YXNrXSA9IHR1bmUKKyAgICAgICAgICAgIGZvciB0YXNrLCBzaWdoYXNoIGluIGN1cnJfc2lncy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHR1bmVzLnNldGRlZmF1bHQodGFza3MydHVuZVt0YXNrXSwge30pLnNldGRlZmF1bHQodGFzaywge30pLnNldGRlZmF1bHQoc2lnaGFzaCwgW10pLmFwcGVuZChtYWNoaW5lKQorCisgICAgICAgIG1zZyA9IFtdCisgICAgICAgIHBydW5lZCA9IDAKKyAgICAgICAgbGFzdF9saW5lX2tleSA9IE5vbmUKKyAgICAgICAgIyBkb19mZXRjaCwgZG9fdW5wYWNrLCAuLi4sIGRvX2J1aWxkCisgICAgICAgIHRhc2tuYW1lX2xpc3QgPSBbXQorICAgICAgICBpZiB0dW5lczoKKyAgICAgICAgICAgICMgVGhlIG91dHB1dCBiZWxvdyBpcyBtb3N0IHVzZWZ1bCB3aGVuIHdlIHN0YXJ0IHdpdGggdGFza3MgdGhhdCBhcmUgYXQKKyAgICAgICAgICAgICMgdGhlIGJvdHRvbSBvZiB0aGUgZGVwZW5kZW5jeSBjaGFpbiwgaS5lLiB0aG9zZSB0aGF0IHJ1biBmaXJzdC4gSWYKKyAgICAgICAgICAgICMgdGhvc2UgdGFza3MgZGlmZmVyLCB0aGUgcmVzdCBhbHNvIGRvZXMuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFRvIGdldCBhbiBvcmRlcmluZyBvZiB0YXNrcywgd2UgZG8gYSB0b3BvbG9naWNhbCBzb3J0IG9mIHRoZSBlbnRpcmUKKyAgICAgICAgICAgICMgZGVwZ3JhcGggZm9yIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24sIHRoZW4gb24tdGhlLWZseSBmbGF0dGVuIHRoYXQgbGlzdCBieSBzdHJpcHBpbmcKKyAgICAgICAgICAgICMgb3V0IHRoZSByZWNpcGUgbmFtZXMgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXMuIFRoZSBiYXNlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICMgaXMgbm90IG5lY2Vzc2FyaWx5IHJlcHJlc2VudGF0aXZlLCBidXQgc2hvdWxkIGJlIGNsb3NlIGVub3VnaC4gVGFza3MKKyAgICAgICAgICAgICMgdGhhdCB3ZXJlIG5vdCBlbmNvdW50ZXJlZCBnZXQgYSBkZWZhdWx0IHByaW9yaXR5LgorICAgICAgICAgICAgZGVwZ3JhcGggPSBnZXRfZGVwZ3JhcGgoKQorICAgICAgICAgICAgZGVwZW5kcyA9IGRlcGdyYXBoWyd0ZGVwZW5kcyddCisgICAgICAgICAgICBXSElURSA9IDEKKyAgICAgICAgICAgIEdSQVkgPSAyCisgICAgICAgICAgICBCTEFDSyA9IDMKKyAgICAgICAgICAgIGNvbG9yID0ge30KKyAgICAgICAgICAgIGZvdW5kID0gc2V0KCkKKyAgICAgICAgICAgIGRlZiB2aXNpdCh0YXNrKToKKyAgICAgICAgICAgICAgICBjb2xvclt0YXNrXSA9IEdSQVkKKyAgICAgICAgICAgICAgICBmb3IgZGVwIGluIGRlcGVuZHMuZ2V0KHRhc2ssICgpKToKKyAgICAgICAgICAgICAgICAgICAgaWYgY29sb3Iuc2V0ZGVmYXVsdChkZXAsIFdISVRFKSA9PSBXSElURToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0KGRlcCkKKyAgICAgICAgICAgICAgICBjb2xvclt0YXNrXSA9IEJMQUNLCisgICAgICAgICAgICAgICAgcG4sIHRhc2tuYW1lID0gdGFzay5yc3BsaXQoJy4nLCAxKQorICAgICAgICAgICAgICAgIGlmIHRhc2tuYW1lIG5vdCBpbiBmb3VuZDoKKyAgICAgICAgICAgICAgICAgICAgdGFza25hbWVfbGlzdC5hcHBlbmQodGFza25hbWUpCisgICAgICAgICAgICAgICAgICAgIGZvdW5kLmFkZCh0YXNrbmFtZSkKKyAgICAgICAgICAgIGZvciB0YXNrIGluIGRlcGVuZHMua2V5cygpOgorICAgICAgICAgICAgICAgIGlmIGNvbG9yLnNldGRlZmF1bHQodGFzaywgV0hJVEUpID09IFdISVRFOgorICAgICAgICAgICAgICAgICAgICB2aXNpdCh0YXNrKQorCisgICAgICAgIHRhc2tuYW1lX29yZGVyID0gZGljdChbKHRhc2ssIGluZGV4KSBmb3IgaW5kZXgsIHRhc2sgaW4gZW51bWVyYXRlKHRhc2tuYW1lX2xpc3QpIF0pCisgICAgICAgIGRlZiB0YXNrX2tleSh0YXNrKToKKyAgICAgICAgICAgIHBuLCB0YXNrbmFtZSA9IHRhc2sucnNwbGl0KCc6JywgMSkKKyAgICAgICAgICAgIHJldHVybiAocG4sIHRhc2tuYW1lX29yZGVyLmdldCh0YXNrbmFtZSwgbGVuKHRhc2tuYW1lX2xpc3QpKSwgdGFza25hbWUpCisKKyAgICAgICAgZm9yIHR1bmUgaW4gc29ydGVkKHR1bmVzLmtleXMoKSk6CisgICAgICAgICAgICB0YXNrcyA9IHR1bmVzW3R1bmVdCisgICAgICAgICAgICAjIEFzIGZvciB0ZXN0X3NpZ25hdHVyZXMgaXQgd291bGQgYmUgbmljZXIgdG8gc29ydCB0YXNrcworICAgICAgICAgICAgIyBieSBkZXBlbmRlbmNpZXMgaGVyZSwgYnV0IHRoYXQgaXMgaGFyZGVyIGJlY2F1c2Ugd2UgaGF2ZQorICAgICAgICAgICAgIyB0byByZXBvcnQgb24gdGFza3MgZnJvbSBkaWZmZXJlbnQgbWFjaGluZXMsIHdoaWNoIG1pZ2h0CisgICAgICAgICAgICAjIGhhdmUgZGlmZmVyZW50IGRlcGVuZGVuY2llcy4gV2UgcmVzb3J0IHRvIHBydW5pbmcgdGhlCisgICAgICAgICAgICAjIG91dHB1dCBieSByZXBvcnRpbmcgb25seSBvbmUgdGFzayBwZXIgcmVjaXBlIGlmIHRoZSBzZXQKKyAgICAgICAgICAgICMgb2YgbWFjaGluZXMgbWF0Y2hlcy4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgImJpdGJha2UtZGlmZnNpZ3MgLXQgLXMiIGlzIGludGVsbGlnZW50IGVub3VnaCB0byBwcmludAorICAgICAgICAgICAgIyBkaWZmcyByZWN1cnNpdmVseSwgc28gb2Z0ZW4gaXQgZG9lcyBub3QgbWF0dGVyIHRoYXQgbXVjaAorICAgICAgICAgICAgIyBpZiB3ZSBkb24ndCBwaWNrIHRoZSB1bmRlcmx5aW5nIGRpZmZlcmVuY2UKKyAgICAgICAgICAgICMgaGVyZS4gSG93ZXZlciwgc29tZXRpbWVzIHJlY3Vyc2lvbiBmYWlscworICAgICAgICAgICAgIyAoaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3Nob3dfYnVnLmNnaT9pZD02NDI4KS4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgVG8gbWl0aWdhdGUgdGhhdCBhIGJpdCwgd2UgdXNlIGEgaGFyZC1jb2RlZCBvcmRlcmluZyBvZgorICAgICAgICAgICAgIyB0YXNrcyB0aGF0IHJlcHJlc2VudHMgaG93IHRoZXkgbm9ybWFsbHkgcnVuIGFuZCBwcmVmZXIKKyAgICAgICAgICAgICMgdG8gcHJpbnQgdGhlIG9uZXMgdGhhdCBydW4gZmlyc3QuCisgICAgICAgICAgICBmb3IgdGFzayBpbiBzb3J0ZWQodGFza3Mua2V5cygpLCBrZXk9dGFza19rZXkpOgorICAgICAgICAgICAgICAgIHNpZ25hdHVyZXMgPSB0YXNrc1t0YXNrXQorICAgICAgICAgICAgICAgICMgZG9fYnVpbGQgY2FuIGJlIGlnbm9yZWQ6IGl0IGlzIGtub3cgdG8gaGF2ZQorICAgICAgICAgICAgICAgICMgZGlmZmVyZW50IHNpZ25hdHVyZXMgaW4gc29tZSBjYXNlcywgZm9yIGV4YW1wbGUgaW4KKyAgICAgICAgICAgICAgICAjIHRoZSBhbGxhcmNoIGNhLWNlcnRpZmljYXRlcyBkdWUgdG8gUkRFUEVORFM9b3BlbnNzbC4KKyAgICAgICAgICAgICAgICAjIFRoYXQgcGFydGljdWxhciBkZXBlbmRlbmN5IGlzIHdoaXRlbGlzdGVkIHZpYQorICAgICAgICAgICAgICAgICMgU0lHR0VOX0VYQ0xVREVfU0FGRV9SRUNJUEVfREVQUywgYnV0IHN0aWxsIHNob3dzIHVwCisgICAgICAgICAgICAgICAgIyBpbiB0aGUgc3N0YXRlIHNpZ25hdHVyZSBoYXNoIGJlY2F1c2UgZmlsdGVyaW5nIGl0CisgICAgICAgICAgICAgICAgIyBvdXQgd291bGQgYmUgaGFyZCBhbmQgcnVubmluZyBkb19idWlsZCBtdWx0aXBsZQorICAgICAgICAgICAgICAgICMgdGltZXMgZG9lc24ndCByZWFsbHkgbWF0dGVyLgorICAgICAgICAgICAgICAgIGlmIGxlbihzaWduYXR1cmVzLmtleXMoKSkgPiAxIGFuZCBcCisgICAgICAgICAgICAgICAgICAgbm90IHRhc2suZW5kc3dpdGgoJzpkb19idWlsZCcpOgorICAgICAgICAgICAgICAgICAgICAjIEVycm9yIQorICAgICAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgICMgU29ydCBzaWduYXR1cmVzIGJ5IG1hY2hpbmVzLCBiZWNhdXNlIHRoZSBoZXggdmFsdWVzIGRvbid0IG1lYW4gYW55dGhpbmcuCisgICAgICAgICAgICAgICAgICAgICMgPT4gYWxsLWFyY2ggYWR3YWl0YS1pY29uLXRoZW1lOmRvX2J1aWxkOiAxMjM0Li4uIChiZWFnbGVib25lLCBxZW11eDg2KSAhPSBhYmNkZi4uLiAocWVtdXg4Ni02NCkKKyAgICAgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICAgICAjIFNraXAgdGhlIGxpbmUgaWYgaXQgaXMgY292ZXJlZCBhbHJlYWR5IGJ5IHRoZSBwcmVkZWNlc3NvciAoc2FtZSBwbiwgc2FtZSBzZXRzIG9mIG1hY2hpbmVzKS4KKyAgICAgICAgICAgICAgICAgICAgcG4sIHRhc2tuYW1lID0gdGFzay5yc3BsaXQoJzonLCAxKQorICAgICAgICAgICAgICAgICAgICBuZXh0X2xpbmVfa2V5ID0gKHBuLCBzb3J0ZWQoc2lnbmF0dXJlcy52YWx1ZXMoKSkpCisgICAgICAgICAgICAgICAgICAgIGlmIG5leHRfbGluZV9rZXkgIT0gbGFzdF9saW5lX2tleToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSAnICAgJXMgJXM6ICcgJSAodHVuZSwgdGFzaykKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgKz0gJyAhPSAnLmpvaW4oWyclcyAoJXMpJyAlIChzaWduYXR1cmUsICcsICcuam9pbihbbSBmb3IgbSBpbiBzaWduYXR1cmVzW3NpZ25hdHVyZV1dKSkgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUgaW4gc29ydGVkKHNpZ25hdHVyZXMua2V5cygpLCBrZXk9bGFtYmRhIHM6IHNpZ25hdHVyZXNbc10pXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfbGluZV9rZXkgPSBuZXh0X2xpbmVfa2V5CisgICAgICAgICAgICAgICAgICAgICAgICBtc2cuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAjIFJhbmRvbWx5IHBpY2sgdHdvIG1pc21hdGNoZWQgc2lnbmF0dXJlcyBhbmQgcmVtZW1iZXIgaG93IHRvIGludm9rZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBiaXRiYWtlLWRpZmZzaWdzIGZvciB0aGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBpdGVyKHNpZ25hdHVyZXMuaXRlbXMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBuZXh0KGl0ZXJhdG9yKQorICAgICAgICAgICAgICAgICAgICAgICAgYiA9IG5leHQoaXRlcmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICBkaWZmc2lnX21hY2hpbmVzID0gJyglcykgIT0gKCVzKScgJSAoJywgJy5qb2luKGFbMV0pLCAnLCAnLmpvaW4oYlsxXSkpCisgICAgICAgICAgICAgICAgICAgICAgICBkaWZmc2lnX3BhcmFtcyA9ICctdCAlcyAlcyAtcyAlcyAlcycgJSAocG4sIHRhc2tuYW1lLCBhWzBdLCBiWzBdKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkICs9IDEKKworICAgICAgICBpZiBtc2c6CisgICAgICAgICAgICBtc2cuaW5zZXJ0KDAsICdUaGUgbWFjaGluZXMgaGF2ZSBjb25mbGljdGluZyBzaWduYXR1cmVzIGZvciBzb21lIHNoYXJlZCB0YXNrczonKQorICAgICAgICAgICAgaWYgcHJ1bmVkID4gMDoKKyAgICAgICAgICAgICAgICBtc2cuYXBwZW5kKCcnKQorICAgICAgICAgICAgICAgIG1zZy5hcHBlbmQoJyVkIHRhc2tzIHdoZXJlIG5vdCBsaXN0ZWQgYmVjYXVzZSBzb21lIG90aGVyIHRhc2sgb2YgdGhlIHJlY2lwZSBhbHJlYWR5IGRpZmZlcmVkLicgJSBwcnVuZWQpCisgICAgICAgICAgICAgICAgbXNnLmFwcGVuZCgnSXQgaXMgbGlrZWx5IHRoYXQgZGlmZmVyZW5jZXMgZnJvbSBkaWZmZXJlbnQgcmVjaXBlcyBhbHNvIGhhdmUgdGhlIHNhbWUgcm9vdCBjYXVzZS4nKQorICAgICAgICAgICAgbXNnLmFwcGVuZCgnJykKKyAgICAgICAgICAgICMgRXhwbGFpbiBob3cgdG8gaW52ZXN0aWdhdGUuLi4KKyAgICAgICAgICAgIG1zZy5hcHBlbmQoJ1RvIGludmVzdGlnYXRlLCBydW4gYml0YmFrZS1kaWZmc2lncyAtdCByZWNpcGVuYW1lIHRhc2tuYW1lIC1zIGZyb21zaWcgdG9zaWcuJykKKyAgICAgICAgICAgIGNtZCA9ICdiaXRiYWtlLWRpZmZzaWdzICVzJyAlIGRpZmZzaWdfcGFyYW1zCisgICAgICAgICAgICBtc2cuYXBwZW5kKCdFeGFtcGxlOiAlcyBpbiB0aGUgbGFzdCBsaW5lJyAlIGRpZmZzaWdfbWFjaGluZXMpCisgICAgICAgICAgICBtc2cuYXBwZW5kKCdDb21tYW5kOiAlcycgJSBjbWQpCisgICAgICAgICAgICAjIC4uLiBhbmQgYWN0dWFsbHkgZG8gaXQgYXV0b21hdGljYWxseSBmb3IgdGhhdCBleGFtcGxlLCBidXQgd2l0aG91dCBhYm9ydGluZworICAgICAgICAgICAgIyB3aGVuIHRoYXQgZmFpbHMuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gY2hlY2tfY29tbWFuZCgnQ29tcGFyaW5nIHNpZ25hdHVyZXMgZmFpbGVkLicsIGNtZCkuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGV4OgorICAgICAgICAgICAgICAgIG91dHB1dCA9IHN0cihleCkKKyAgICAgICAgICAgIG1zZy5leHRlbmQoWycgICAnICsgbGluZSBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXRsaW5lcygpXSkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnXG4nLmpvaW4obXNnKSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9jaGVja2xheWVyL2Nhc2VzL2NvbW1vbi5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9jaGVja2xheWVyL2Nhc2VzL2NvbW1vbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTNjMTA4Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2NoZWNrbGF5ZXIvY2FzZXMvY29tbW9uLnB5CkBAIC0wLDAgKzEsNTMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IEludGVsIENvcnBvcmF0aW9uCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCitpbXBvcnQgZ2xvYgoraW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gY2hlY2tsYXllciBpbXBvcnQgZ2V0X3NpZ25hdHVyZXMsIExheWVyVHlwZSwgY2hlY2tfY29tbWFuZCwgZ2V0X2RlcGdyYXBoLCBjb21wYXJlX3NpZ25hdHVyZXMKK2Zyb20gY2hlY2tsYXllci5jYXNlIGltcG9ydCBPRUNoZWNrTGF5ZXJUZXN0Q2FzZQorCitjbGFzcyBDb21tb25DaGVja0xheWVyKE9FQ2hlY2tMYXllclRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9yZWFkbWUoc2VsZik6CisgICAgICAgICMgVGhlIHRvcC1sZXZlbCBSRUFETUUgZmlsZSBtYXkgaGF2ZSBhIHN1ZmZpeCAobGlrZSBSRUFETUUucnN0IG9yIFJFQURNRS50eHQpLgorICAgICAgICByZWFkbWVfZmlsZXMgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHNlbGYudGMubGF5ZXJbJ3BhdGgnXSwgJ1JFQURNRSonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihyZWFkbWVfZmlsZXMpID4gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iTGF5ZXIgZG9lc24ndCBjb250YWlucyBSRUFETUUgZmlsZS4iKQorCisgICAgICAgICMgVGhlcmUgbWlnaHQgYmUgbW9yZSB0aGFuIG9uZSBmaWxlIG1hdGNoaW5nIHRoZSBmaWxlIHBhdHRlcm4gYWJvdmUKKyAgICAgICAgIyAoZm9yIGV4YW1wbGUsIFJFQURNRS5yc3QgYW5kIFJFQURNRS1DT1BZSU5HLnJzdCkuIFRoZSBvbmUgd2l0aCB0aGUgc2hvcnRlc3QKKyAgICAgICAgIyBuYW1lIGlzIGNvbnNpZGVyZWQgdGhlICJtYWluIiBvbmUuCisgICAgICAgIHJlYWRtZV9maWxlID0gc29ydGVkKHJlYWRtZV9maWxlcylbMF0KKyAgICAgICAgZGF0YSA9ICcnCisgICAgICAgIHdpdGggb3BlbihyZWFkbWVfZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhLAorICAgICAgICAgICAgICAgIG1zZz0iTGF5ZXIgY29udGFpbnMgYSBSRUFETUUgZmlsZSBidXQgaXQgaXMgZW1wdHkuIikKKworICAgIGRlZiB0ZXN0X3BhcnNlKHNlbGYpOgorICAgICAgICBjaGVja19jb21tYW5kKCdMYXllciAlcyBmYWlsZWQgdG8gcGFyc2UuJyAlIHNlbGYudGMubGF5ZXJbJ25hbWUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAnYml0YmFrZSAtcCcpCisKKyAgICBkZWYgdGVzdF9zaG93X2Vudmlyb25tZW50KHNlbGYpOgorICAgICAgICBjaGVja19jb21tYW5kKCdMYXllciAlcyBmYWlsZWQgdG8gc2hvdyBlbnZpcm9ubWVudC4nICUgc2VsZi50Yy5sYXllclsnbmFtZSddLAorICAgICAgICAgICAgICAgICAgICAgICdiaXRiYWtlIC1lJykKKworICAgIGRlZiB0ZXN0X3dvcmxkKHNlbGYpOgorICAgICAgICAnJycKKyAgICAgICAgImJpdGJha2Ugd29ybGQiIGlzIGV4cGVjdGVkIHRvIHdvcmsuIHRlc3Rfc2lnbmF0dXJlcyBkb2VzIG5vdCBjb3ZlciB0aGF0CisgICAgICAgIGJlY2F1c2UgaXQgaXMgbW9yZSBsZW5pZW50IGFuZCBpZ25vcmVzIHJlY2lwZXMgaW4gYSB3b3JsZCBidWlsZCB0aGF0CisgICAgICAgIGFyZSBub3QgYWN0dWFsbHkgYnVpbGRhYmxlLCBzbyBoZXJlIHdlIGZhaWwgd2hlbiAiYml0YmFrZSAtUyBub25lIHdvcmxkIgorICAgICAgICBmYWlscy4KKyAgICAgICAgJycnCisgICAgICAgIGdldF9zaWduYXR1cmVzKHNlbGYudGRbJ2J1aWxkZGlyJ10sIGZhaWxzYWZlPUZhbHNlKQorCisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi50Yy5sYXllclsndHlwZSddID09IExheWVyVHlwZS5TT0ZUV0FSRSBhbmQgXAorICAgICAgICAgICBub3Qgc2VsZi50Yy50ZXN0X3NvZnR3YXJlX2xheWVyX3NpZ25hdHVyZXM6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiTm90IHRlc3RpbmcgZm9yIHNpZ25hdHVyZSBjaGFuZ2VzIGluIGEgc29mdHdhcmUgbGF5ZXIgJXMuIiBcCisgICAgICAgICAgICAgICAgICAgICAlIHNlbGYudGMubGF5ZXJbJ25hbWUnXSkKKworICAgICAgICBjdXJyX3NpZ3MsIF8gPSBnZXRfc2lnbmF0dXJlcyhzZWxmLnRkWydidWlsZGRpciddLCBmYWlsc2FmZT1UcnVlKQorICAgICAgICBtc2cgPSBjb21wYXJlX3NpZ25hdHVyZXMoc2VsZi50ZFsnc2lncyddLCBjdXJyX3NpZ3MpCisgICAgICAgIGlmIG1zZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnQWRkaW5nIGxheWVyICVzIGNoYW5nZWQgc2lnbmF0dXJlcy5cbiVzJyAlIChzZWxmLnRjLmxheWVyWyduYW1lJ10sIG1zZykpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvY2hlY2tsYXllci9jYXNlcy9kaXN0cm8ucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvY2hlY2tsYXllci9jYXNlcy9kaXN0cm8ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYxYjMwMwotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9jaGVja2xheWVyL2Nhc2VzL2Rpc3Ryby5weQpAQCAtMCwwICsxLDI2IEBACisjIENvcHlyaWdodCAoQykgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gY2hlY2tsYXllciBpbXBvcnQgTGF5ZXJUeXBlCitmcm9tIGNoZWNrbGF5ZXIuY2FzZSBpbXBvcnQgT0VDaGVja0xheWVyVGVzdENhc2UKKworY2xhc3MgRGlzdHJvQ2hlY2tMYXllcihPRUNoZWNrTGF5ZXJUZXN0Q2FzZSk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIGlmIHNlbGYudGMubGF5ZXJbJ3R5cGUnXSAhPSBMYXllclR5cGUuRElTVFJPOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIkRpc3Ryb0NoZWNrTGF5ZXI6IExheWVyICVzIGlzbid0IERpc3RybyBvbmUuIiAlXAorICAgICAgICAgICAgICAgIHNlbGYudGMubGF5ZXJbJ25hbWUnXSkKKworICAgIGRlZiB0ZXN0X2Rpc3Ryb19kZWZpbmVzX2Rpc3Ryb3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnRjLmxheWVyWydjb25mJ11bJ2Rpc3Ryb3MnXSwgCisgICAgICAgICAgICAgICAgIkxheWVyIGlzIEJTUCBidXQgZG9lc24ndCBkZWZpbmVzIG1hY2hpbmVzLiIpCisKKyAgICBkZWYgdGVzdF9kaXN0cm9fbm9fc2V0X2Rpc3Ryb3Moc2VsZik6CisgICAgICAgIGZyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgZ2V0X2JiX3ZhcgorCisgICAgICAgIGRpc3RybyA9IGdldF9iYl92YXIoJ0RJU1RSTycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZFsnYmJ2YXJzJ11bJ0RJU1RSTyddLCBkaXN0cm8sCisgICAgICAgICAgICAgICAgbXNnPSJMYXllciAlcyBtb2RpZmllZCBkaXN0cm8gJXMgLT4gJXMiICUgXAorICAgICAgICAgICAgICAgICAgICAoc2VsZi50Yy5sYXllclsnbmFtZSddLCBzZWxmLnRkWydiYnZhcnMnXVsnRElTVFJPJ10sIGRpc3RybykpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvY2hlY2tsYXllci9jb250ZXh0LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2NoZWNrbGF5ZXIvY29udGV4dC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmVjMmM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2NoZWNrbGF5ZXIvY29udGV4dC5weQpAQCAtMCwwICsxLDE1IEBACisjIENvcHlyaWdodCAoQykgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgZ2xvYgoraW1wb3J0IHJlCisKK2Zyb20gb2VxYS5jb3JlLmNvbnRleHQgaW1wb3J0IE9FVGVzdENvbnRleHQKKworY2xhc3MgQ2hlY2tMYXllclRlc3RDb250ZXh0KE9FVGVzdENvbnRleHQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZD1Ob25lLCBsb2dnZXI9Tm9uZSwgbGF5ZXI9Tm9uZSwgdGVzdF9zb2Z0d2FyZV9sYXllcl9zaWduYXR1cmVzPVRydWUpOgorICAgICAgICBzdXBlcihDaGVja0xheWVyVGVzdENvbnRleHQsIHNlbGYpLl9faW5pdF9fKHRkLCBsb2dnZXIpCisgICAgICAgIHNlbGYubGF5ZXIgPSBsYXllcgorICAgICAgICBzZWxmLnRlc3Rfc29mdHdhcmVfbGF5ZXJfc2lnbmF0dXJlcyA9IHRlc3Rfc29mdHdhcmVfbGF5ZXJfc2lnbmF0dXJlcwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2NvbXBhdGxheWVyL19faW5pdF9fLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2NvbXBhdGxheWVyL19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTk3ZTg1Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9jb21wYXRsYXllci9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDM5MiArMCwwIEBACi0jIFlvY3RvIFByb2plY3QgY29tcGF0aWJpbGl0eSBsYXllciB0b29sCi0jCi0jIENvcHlyaWdodCAoQykgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgotIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKLQotaW1wb3J0IG9zCi1pbXBvcnQgcmUKLWltcG9ydCBzdWJwcm9jZXNzCi1mcm9tIGVudW0gaW1wb3J0IEVudW0KLQotaW1wb3J0IGJiLnRpbmZvaWwKLQotY2xhc3MgTGF5ZXJUeXBlKEVudW0pOgotICAgIEJTUCA9IDAKLSAgICBESVNUUk8gPSAxCi0gICAgU09GVFdBUkUgPSAyCi0gICAgRVJST1JfTk9fTEFZRVJfQ09ORiA9IDk4Ci0gICAgRVJST1JfQlNQX0RJU1RSTyA9IDk5Ci0KLWRlZiBfZ2V0X2NvbmZpZ3VyYXRpb25zKHBhdGgpOgotICAgIGNvbmZpZ3MgPSBbXQotCi0gICAgZm9yIGYgaW4gb3MubGlzdGRpcihwYXRoKToKLSAgICAgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHBhdGgsIGYpCi0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGVfcGF0aCkgYW5kIGYuZW5kc3dpdGgoJy5jb25mJyk6Ci0gICAgICAgICAgICBjb25maWdzLmFwcGVuZChmWzotNV0pICMgc3RyaXAgLmNvbmYKLSAgICByZXR1cm4gY29uZmlncwotCi1kZWYgX2dldF9sYXllcl9jb2xsZWN0aW9ucyhsYXllcl9wYXRoLCBsY29uZj1Ob25lLCBkYXRhPU5vbmUpOgotICAgIGltcG9ydCBiYi5wYXJzZQotICAgIGltcG9ydCBiYi5kYXRhCi0KLSAgICBpZiBsY29uZiBpcyBOb25lOgotICAgICAgICBsY29uZiA9IG9zLnBhdGguam9pbihsYXllcl9wYXRoLCAnY29uZicsICdsYXllci5jb25mJykKLQotICAgIGlmIGRhdGEgaXMgTm9uZToKLSAgICAgICAgbGRhdGEgPSBiYi5kYXRhLmluaXQoKQotICAgICAgICBiYi5wYXJzZS5pbml0X3BhcnNlcihsZGF0YSkKLSAgICBlbHNlOgotICAgICAgICBsZGF0YSA9IGRhdGEuY3JlYXRlQ29weSgpCi0KLSAgICBsZGF0YS5zZXRWYXIoJ0xBWUVSRElSJywgbGF5ZXJfcGF0aCkKLSAgICB0cnk6Ci0gICAgICAgIGxkYXRhID0gYmIucGFyc2UuaGFuZGxlKGxjb25mLCBsZGF0YSwgaW5jbHVkZT1UcnVlKQotICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGV4YzoKLSAgICAgICAgcmFpc2UgTGF5ZXJFcnJvcihleGMpCi0gICAgbGRhdGEuZXhwYW5kVmFycmVmKCdMQVlFUkRJUicpCi0KLSAgICBjb2xsZWN0aW9ucyA9IChsZGF0YS5nZXRWYXIoJ0JCRklMRV9DT0xMRUNUSU9OUycsIFRydWUpIG9yICcnKS5zcGxpdCgpCi0gICAgaWYgbm90IGNvbGxlY3Rpb25zOgotICAgICAgICBuYW1lID0gb3MucGF0aC5iYXNlbmFtZShsYXllcl9wYXRoKQotICAgICAgICBjb2xsZWN0aW9ucyA9IFtuYW1lXQotCi0gICAgY29sbGVjdGlvbnMgPSB7Yzoge30gZm9yIGMgaW4gY29sbGVjdGlvbnN9Ci0gICAgZm9yIG5hbWUgaW4gY29sbGVjdGlvbnM6Ci0gICAgICAgIHByaW9yaXR5ID0gbGRhdGEuZ2V0VmFyKCdCQkZJTEVfUFJJT1JJVFlfJXMnICUgbmFtZSwgVHJ1ZSkKLSAgICAgICAgcGF0dGVybiA9IGxkYXRhLmdldFZhcignQkJGSUxFX1BBVFRFUk5fJXMnICUgbmFtZSwgVHJ1ZSkKLSAgICAgICAgZGVwZW5kcyA9IGxkYXRhLmdldFZhcignTEFZRVJERVBFTkRTXyVzJyAlIG5hbWUsIFRydWUpCi0gICAgICAgIGNvbGxlY3Rpb25zW25hbWVdWydwcmlvcml0eSddID0gcHJpb3JpdHkKLSAgICAgICAgY29sbGVjdGlvbnNbbmFtZV1bJ3BhdHRlcm4nXSA9IHBhdHRlcm4KLSAgICAgICAgY29sbGVjdGlvbnNbbmFtZV1bJ2RlcGVuZHMnXSA9IGRlcGVuZHMKLQotICAgIHJldHVybiBjb2xsZWN0aW9ucwotCi1kZWYgX2RldGVjdF9sYXllcihsYXllcl9wYXRoKToKLSAgICAiIiIKLSAgICAgICAgU2NhbnMgbGF5ZXIgZGlyZWN0b3J5IHRvIGRldGVjdCB3aGF0IHR5cGUgb2YgbGF5ZXIKLSAgICAgICAgaXMgQlNQLCBEaXN0cm8gb3IgU29mdHdhcmUuCi0KLSAgICAgICAgUmV0dXJucyBhIGRpY3Rpb25hcnkgd2l0aCBsYXllciBuYW1lLCB0eXBlIGFuZCBwYXRoLgotICAgICIiIgotCi0gICAgbGF5ZXIgPSB7fQotICAgIGxheWVyX25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGxheWVyX3BhdGgpCi0KLSAgICBsYXllclsnbmFtZSddID0gbGF5ZXJfbmFtZQotICAgIGxheWVyWydwYXRoJ10gPSBsYXllcl9wYXRoCi0gICAgbGF5ZXJbJ2NvbmYnXSA9IHt9Ci0KLSAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGxheWVyX3BhdGgsICdjb25mJywgJ2xheWVyLmNvbmYnKSk6Ci0gICAgICAgIGxheWVyWyd0eXBlJ10gPSBMYXllclR5cGUuRVJST1JfTk9fTEFZRVJfQ09ORgotICAgICAgICByZXR1cm4gbGF5ZXIKLQotICAgIG1hY2hpbmVfY29uZiA9IG9zLnBhdGguam9pbihsYXllcl9wYXRoLCAnY29uZicsICdtYWNoaW5lJykKLSAgICBkaXN0cm9fY29uZiA9IG9zLnBhdGguam9pbihsYXllcl9wYXRoLCAnY29uZicsICdkaXN0cm8nKQotCi0gICAgaXNfYnNwID0gRmFsc2UKLSAgICBpc19kaXN0cm8gPSBGYWxzZQotCi0gICAgaWYgb3MucGF0aC5pc2RpcihtYWNoaW5lX2NvbmYpOgotICAgICAgICBtYWNoaW5lcyA9IF9nZXRfY29uZmlndXJhdGlvbnMobWFjaGluZV9jb25mKQotICAgICAgICBpZiBtYWNoaW5lczoKLSAgICAgICAgICAgIGlzX2JzcCA9IFRydWUKLQotICAgIGlmIG9zLnBhdGguaXNkaXIoZGlzdHJvX2NvbmYpOgotICAgICAgICBkaXN0cm9zID0gX2dldF9jb25maWd1cmF0aW9ucyhkaXN0cm9fY29uZikKLSAgICAgICAgaWYgZGlzdHJvczoKLSAgICAgICAgICAgIGlzX2Rpc3RybyA9IFRydWUKLQotICAgIGlmIGlzX2JzcCBhbmQgaXNfZGlzdHJvOgotICAgICAgICBsYXllclsndHlwZSddID0gTGF5ZXJUeXBlLkVSUk9SX0JTUF9ESVNUUk8KLSAgICBlbGlmIGlzX2JzcDoKLSAgICAgICAgbGF5ZXJbJ3R5cGUnXSA9IExheWVyVHlwZS5CU1AKLSAgICAgICAgbGF5ZXJbJ2NvbmYnXVsnbWFjaGluZXMnXSA9IG1hY2hpbmVzCi0gICAgZWxpZiBpc19kaXN0cm86Ci0gICAgICAgIGxheWVyWyd0eXBlJ10gPSBMYXllclR5cGUuRElTVFJPCi0gICAgICAgIGxheWVyWydjb25mJ11bJ2Rpc3Ryb3MnXSA9IGRpc3Ryb3MKLSAgICBlbHNlOgotICAgICAgICBsYXllclsndHlwZSddID0gTGF5ZXJUeXBlLlNPRlRXQVJFCi0KLSAgICBsYXllclsnY29sbGVjdGlvbnMnXSA9IF9nZXRfbGF5ZXJfY29sbGVjdGlvbnMobGF5ZXJbJ3BhdGgnXSkKLQotICAgIHJldHVybiBsYXllcgotCi1kZWYgZGV0ZWN0X2xheWVycyhsYXllcl9kaXJlY3Rvcmllcywgbm9fYXV0byk6Ci0gICAgbGF5ZXJzID0gW10KLQotICAgIGZvciBkaXJlY3RvcnkgaW4gbGF5ZXJfZGlyZWN0b3JpZXM6Ci0gICAgICAgIGRpcmVjdG9yeSA9IG9zLnBhdGgucmVhbHBhdGgoZGlyZWN0b3J5KQotICAgICAgICBpZiBkaXJlY3RvcnlbLTFdID09ICcvJzoKLSAgICAgICAgICAgIGRpcmVjdG9yeSA9IGRpcmVjdG9yeVswOi0xXQotCi0gICAgICAgIGlmIG5vX2F1dG86Ci0gICAgICAgICAgICBjb25mX2RpciA9IG9zLnBhdGguam9pbihkaXJlY3RvcnksICdjb25mJykKLSAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoY29uZl9kaXIpOgotICAgICAgICAgICAgICAgIGxheWVyID0gX2RldGVjdF9sYXllcihkaXJlY3RvcnkpCi0gICAgICAgICAgICAgICAgaWYgbGF5ZXI6Ci0gICAgICAgICAgICAgICAgICAgIGxheWVycy5hcHBlbmQobGF5ZXIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkaXJlY3RvcnkpOgotICAgICAgICAgICAgICAgIGRpcl9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShyb290KQotICAgICAgICAgICAgICAgIGNvbmZfZGlyID0gb3MucGF0aC5qb2luKHJvb3QsICdjb25mJykKLSAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGNvbmZfZGlyKToKLSAgICAgICAgICAgICAgICAgICAgbGF5ZXIgPSBfZGV0ZWN0X2xheWVyKHJvb3QpCi0gICAgICAgICAgICAgICAgICAgIGlmIGxheWVyOgotICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzLmFwcGVuZChsYXllcikKLQotICAgIHJldHVybiBsYXllcnMKLQotZGVmIF9maW5kX2xheWVyX2RlcGVuZHMoZGVwZW5kLCBsYXllcnMpOgotICAgIGZvciBsYXllciBpbiBsYXllcnM6Ci0gICAgICAgIGZvciBjb2xsZWN0aW9uIGluIGxheWVyWydjb2xsZWN0aW9ucyddOgotICAgICAgICAgICAgaWYgZGVwZW5kID09IGNvbGxlY3Rpb246Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxheWVyCi0gICAgcmV0dXJuIE5vbmUKLQotZGVmIGFkZF9sYXllcl9kZXBlbmRlbmNpZXMoYmJsYXllcnNjb25mLCBsYXllciwgbGF5ZXJzLCBsb2dnZXIpOgotICAgIGRlZiByZWN1cnNlX2RlcGVuZGVuY2llcyhkZXBlbmRzLCBsYXllciwgbGF5ZXJzLCBsb2dnZXIsIHJldCA9IFtdKToKLSAgICAgICAgbG9nZ2VyLmRlYnVnKCdQcm9jZXNzaW5nIGRlcGVuZGVuY2llcyAlcyBmb3IgbGF5ZXIgJXMuJyAlIFwKLSAgICAgICAgICAgICAgICAgICAgKGRlcGVuZHMsIGxheWVyWyduYW1lJ10pKQotCi0gICAgICAgIGZvciBkZXBlbmQgaW4gZGVwZW5kcy5zcGxpdCgpOgotICAgICAgICAgICAgIyBjb3JlIChvZS1jb3JlKSBpcyBzdXBwb3NlIHRvIGJlIHByb3ZpZGVkCi0gICAgICAgICAgICBpZiBkZXBlbmQgPT0gJ2NvcmUnOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgIGxheWVyX2RlcGVuZCA9IF9maW5kX2xheWVyX2RlcGVuZHMoZGVwZW5kLCBsYXllcnMpCi0gICAgICAgICAgICBpZiBub3QgbGF5ZXJfZGVwZW5kOgotICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignTGF5ZXIgJXMgZGVwZW5kcyBvbiAlcyBhbmQgaXNuXCd0IGZvdW5kLicgJSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAobGF5ZXJbJ25hbWUnXSwgZGVwZW5kKSkKLSAgICAgICAgICAgICAgICByZXQgPSBOb25lCi0gICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAgIyBXZSBrZWVwIHByb2Nlc3NpbmcsIGV2ZW4gaWYgcmV0IGlzIE5vbmUsIHRoaXMgYWxsb3dzIHVzIHRvIHJlcG9ydAotICAgICAgICAgICAgIyBtdWx0aXBsZSBlcnJvcnMgYXQgb25jZQotICAgICAgICAgICAgaWYgcmV0IGlzIG5vdCBOb25lIGFuZCBsYXllcl9kZXBlbmQgbm90IGluIHJldDoKLSAgICAgICAgICAgICAgICByZXQuYXBwZW5kKGxheWVyX2RlcGVuZCkKLQotICAgICAgICAgICAgIyBSZWN1cnNpdmVseSBwcm9jZXNzLi4uCi0gICAgICAgICAgICBpZiAnY29sbGVjdGlvbnMnIG5vdCBpbiBsYXllcl9kZXBlbmQ6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAgZm9yIGNvbGxlY3Rpb24gaW4gbGF5ZXJfZGVwZW5kWydjb2xsZWN0aW9ucyddOgotICAgICAgICAgICAgICAgIGNvbGxlY3RfZGVwcyA9IGxheWVyX2RlcGVuZFsnY29sbGVjdGlvbnMnXVtjb2xsZWN0aW9uXVsnZGVwZW5kcyddCi0gICAgICAgICAgICAgICAgaWYgbm90IGNvbGxlY3RfZGVwczoKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICByZXQgPSByZWN1cnNlX2RlcGVuZGVuY2llcyhjb2xsZWN0X2RlcHMsIGxheWVyX2RlcGVuZCwgbGF5ZXJzLCBsb2dnZXIsIHJldCkKLQotICAgICAgICByZXR1cm4gcmV0Ci0KLSAgICBsYXllcl9kZXBlbmRzID0gW10KLSAgICBmb3IgY29sbGVjdGlvbiBpbiBsYXllclsnY29sbGVjdGlvbnMnXToKLSAgICAgICAgZGVwZW5kcyA9IGxheWVyWydjb2xsZWN0aW9ucyddW2NvbGxlY3Rpb25dWydkZXBlbmRzJ10KLSAgICAgICAgaWYgbm90IGRlcGVuZHM6Ci0gICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgIGxheWVyX2RlcGVuZHMgPSByZWN1cnNlX2RlcGVuZGVuY2llcyhkZXBlbmRzLCBsYXllciwgbGF5ZXJzLCBsb2dnZXIsIGxheWVyX2RlcGVuZHMpCi0KLSAgICAjIE5vdGU6IFtdIChlbXB0eSkgaXMgYWxsb3dlZCwgTm9uZSBpcyBub3QhCi0gICAgaWYgbGF5ZXJfZGVwZW5kcyBpcyBOb25lOgotICAgICAgICByZXR1cm4gRmFsc2UKLSAgICBlbHNlOgotICAgICAgICAjIERvbid0IGFkZCBhIGxheWVyIHRoYXQgaXMgYWxyZWFkeSBwcmVzZW50LgotICAgICAgICBhZGRlZCA9IHNldCgpCi0gICAgICAgIG91dHB1dCA9IGNoZWNrX2NvbW1hbmQoJ0dldHRpbmcgZXhpc3RpbmcgbGF5ZXJzIGZhaWxlZC4nLCAnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKS5kZWNvZGUoJ3V0Zi04JykKLSAgICAgICAgZm9yIGxheWVyLCBwYXRoLCBwcmkgaW4gcmUuZmluZGFsbChyJ14oXFMrKSArKFteXG5dKj8pICsoXGQrKSQnLCBvdXRwdXQsIHJlLk1VTFRJTElORSk6Ci0gICAgICAgICAgICBhZGRlZC5hZGQocGF0aCkKLQotICAgICAgICBmb3IgbGF5ZXJfZGVwZW5kIGluIGxheWVyX2RlcGVuZHM6Ci0gICAgICAgICAgICBuYW1lID0gbGF5ZXJfZGVwZW5kWyduYW1lJ10KLSAgICAgICAgICAgIHBhdGggPSBsYXllcl9kZXBlbmRbJ3BhdGgnXQotICAgICAgICAgICAgaWYgcGF0aCBpbiBhZGRlZDoKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBhZGRlZC5hZGQocGF0aCkKLSAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdBZGRpbmcgbGF5ZXIgZGVwZW5kZW5jeSAlcycgJSBuYW1lKQotICAgICAgICAgICAgd2l0aCBvcGVuKGJibGF5ZXJzY29uZiwgJ2ErJykgYXMgZjoKLSAgICAgICAgICAgICAgICBmLndyaXRlKCJcbkJCTEFZRVJTICs9IFwiJXNcIlxuIiAlIHBhdGgpCi0gICAgcmV0dXJuIFRydWUKLQotZGVmIGFkZF9sYXllcihiYmxheWVyc2NvbmYsIGxheWVyLCBsYXllcnMsIGxvZ2dlcik6Ci0gICAgbG9nZ2VyLmluZm8oJ0FkZGluZyBsYXllciAlcycgJSBsYXllclsnbmFtZSddKQotICAgIHdpdGggb3BlbihiYmxheWVyc2NvbmYsICdhKycpIGFzIGY6Ci0gICAgICAgIGYud3JpdGUoIlxuQkJMQVlFUlMgKz0gXCIlc1wiXG4iICUgbGF5ZXJbJ3BhdGgnXSkKLQotICAgIHJldHVybiBUcnVlCi0KLWRlZiBjaGVja19jb21tYW5kKGVycm9yX21zZywgY21kKToKLSAgICAnJycKLSAgICBSdW4gYSBjb21tYW5kIHVuZGVyIGEgc2hlbGwsIGNhcHR1cmUgc3Rkb3V0IGFuZCBzdGRlcnIgaW4gYSBzaW5nbGUgc3RyZWFtLAotICAgIHRocm93IGFuIGVycm9yIHdoZW4gY29tbWFuZCByZXR1cm5zIG5vbi16ZXJvIGV4aXQgY29kZS4gUmV0dXJucyB0aGUgb3V0cHV0LgotICAgICcnJwotCi0gICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCi0gICAgb3V0cHV0LCBfID0gcC5jb21tdW5pY2F0ZSgpCi0gICAgaWYgcC5yZXR1cm5jb2RlOgotICAgICAgICBtc2cgPSAiJXNcbkNvbW1hbmQ6ICVzXG5PdXRwdXQ6XG4lcyIgJSAoZXJyb3JfbXNnLCBjbWQsIG91dHB1dC5kZWNvZGUoJ3V0Zi04JykpCi0gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihtc2cpCi0gICAgcmV0dXJuIG91dHB1dAotCi1kZWYgZ2V0X3NpZ25hdHVyZXMoYnVpbGRkaXIsIGZhaWxzYWZlPUZhbHNlLCBtYWNoaW5lPU5vbmUpOgotICAgIGltcG9ydCByZQotCi0gICAgIyBzb21lIHJlY2lwZXMgbmVlZHMgdG8gYmUgZXhjbHVkZWQgbGlrZSBtZXRhLXdvcmxkLXBrZ2RhdGEKLSAgICAjIGJlY2F1c2UgYSBsYXllciBjYW4gYWRkIHJlY2lwZXMgdG8gYSB3b3JsZCBidWlsZCBzbyBzaWduYXR1cmUKLSAgICAjIHdpbGwgYmUgY2hhbmdlCi0gICAgZXhjbHVkZV9yZWNpcGVzID0gKCdtZXRhLXdvcmxkLXBrZ2RhdGEnLCkKLQotICAgIHNpZ3MgPSB7fQotICAgIHR1bmUydGFza3MgPSB7fQotCi0gICAgY21kID0gJycKLSAgICBpZiBtYWNoaW5lOgotICAgICAgICBjbWQgKz0gJ01BQ0hJTkU9JXMgJyAlIG1hY2hpbmUKLSAgICBjbWQgKz0gJ2JpdGJha2UgJwotICAgIGlmIGZhaWxzYWZlOgotICAgICAgICBjbWQgKz0gJy1rICcKLSAgICBjbWQgKz0gJy1TIG5vbmUgd29ybGQnCi0gICAgc2lnc19maWxlID0gb3MucGF0aC5qb2luKGJ1aWxkZGlyLCAnbG9ja2VkLXNpZ3MuaW5jJykKLSAgICBpZiBvcy5wYXRoLmV4aXN0cyhzaWdzX2ZpbGUpOgotICAgICAgICBvcy51bmxpbmsoc2lnc19maWxlKQotICAgIHRyeToKLSAgICAgICAgY2hlY2tfY29tbWFuZCgnR2VuZXJhdGluZyBzaWduYXR1cmVzIGZhaWxlZC4gVGhpcyBtaWdodCBiZSBkdWUgdG8gc29tZSBwYXJzZSBlcnJvciBhbmQvb3IgZ2VuZXJhbCBsYXllciBpbmNvbXBhdGliaWxpdGllcy4nLAotICAgICAgICAgICAgICAgICAgICAgIGNtZCkKLSAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGV4OgotICAgICAgICBpZiBmYWlsc2FmZSBhbmQgb3MucGF0aC5leGlzdHMoc2lnc19maWxlKToKLSAgICAgICAgICAgICMgSWdub3JlIHRoZSBlcnJvciBoZXJlLiBNb3N0IGxpa2VseSBzb21lIHJlY2lwZXMgYWN0aXZlCi0gICAgICAgICAgICAjIGluIGEgd29ybGQgYnVpbGQgbGFjayBzb21lIGRlcGVuZGVuY2llcy4gVGhlcmUgaXMgYQotICAgICAgICAgICAgIyBzZXBhcmF0ZSB0ZXN0X21hY2hpbmVfd29ybGRfYnVpbGQgd2hpY2ggZXhwb3NlcyB0aGUKLSAgICAgICAgICAgICMgZmFpbHVyZS4KLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlCi0KLSAgICBzaWdfcmVnZXggPSByZS5jb21waWxlKCJeKD9QPHRhc2s+Lio6LiopOig/UDxoYXNoPi4qKSAuJCIpCi0gICAgdHVuZV9yZWdleCA9IHJlLmNvbXBpbGUoIihefFxzKVNJR0dFTl9MT0NLRURTSUdTX3QtKD9QPHR1bmU+XFMqKVxzKj1ccyoiKQotICAgIGN1cnJlbnRfdHVuZSA9IE5vbmUKLSAgICB3aXRoIG9wZW4oc2lnc19maWxlLCAncicpIGFzIGY6Ci0gICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6Ci0gICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCi0gICAgICAgICAgICB0ID0gdHVuZV9yZWdleC5zZWFyY2gobGluZSkKLSAgICAgICAgICAgIGlmIHQ6Ci0gICAgICAgICAgICAgICAgY3VycmVudF90dW5lID0gdC5ncm91cCgndHVuZScpCi0gICAgICAgICAgICBzID0gc2lnX3JlZ2V4Lm1hdGNoKGxpbmUpCi0gICAgICAgICAgICBpZiBzOgotICAgICAgICAgICAgICAgIGV4Y2x1ZGUgPSBGYWxzZQotICAgICAgICAgICAgICAgIGZvciBlciBpbiBleGNsdWRlX3JlY2lwZXM6Ci0gICAgICAgICAgICAgICAgICAgIChyZWNpcGUsIHRhc2spID0gcy5ncm91cCgndGFzaycpLnNwbGl0KCc6JykKLSAgICAgICAgICAgICAgICAgICAgaWYgZXIgPT0gcmVjaXBlOgotICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZSA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgaWYgZXhjbHVkZToKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAgICAgIHNpZ3Nbcy5ncm91cCgndGFzaycpXSA9IHMuZ3JvdXAoJ2hhc2gnKQotICAgICAgICAgICAgICAgIHR1bmUydGFza3Muc2V0ZGVmYXVsdChjdXJyZW50X3R1bmUsIFtdKS5hcHBlbmQocy5ncm91cCgndGFzaycpKQotCi0gICAgaWYgbm90IHNpZ3M6Ci0gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQ2FuXCd0IGxvYWQgc2lnbmF0dXJlcyBmcm9tICVzJyAlIHNpZ3NfZmlsZSkKLQotICAgIHJldHVybiAoc2lncywgdHVuZTJ0YXNrcykKLQotZGVmIGdldF9kZXBncmFwaCh0YXJnZXRzPVsnd29ybGQnXSwgZmFpbHNhZmU9RmFsc2UpOgotICAgICcnJwotICAgIFJldHVybnMgdGhlIGRlcGVuZGVuY3kgZ3JhcGggZm9yIHRoZSBnaXZlbiB0YXJnZXQocykuCi0gICAgVGhlIGRlcGVuZGVuY3kgZ3JhcGggaXMgdGFrZW4gZGlyZWN0bHkgZnJvbSBEZXBUcmVlRXZlbnQuCi0gICAgJycnCi0gICAgZGVwZ3JhcGggPSBOb25lCi0gICAgd2l0aCBiYi50aW5mb2lsLlRpbmZvaWwoKSBhcyB0aW5mb2lsOgotICAgICAgICB0aW5mb2lsLnByZXBhcmUoY29uZmlnX29ubHk9RmFsc2UpCi0gICAgICAgIHRpbmZvaWwuc2V0X2V2ZW50X21hc2soWydiYi5ldmVudC5Ob1Byb3ZpZGVyJywgJ2JiLmV2ZW50LkRlcFRyZWVHZW5lcmF0ZWQnLCAnYmIuY29tbWFuZC5Db21tYW5kQ29tcGxldGVkJ10pCi0gICAgICAgIGlmIG5vdCB0aW5mb2lsLnJ1bl9jb21tYW5kKCdnZW5lcmF0ZURlcFRyZWVFdmVudCcsIHRhcmdldHMsICdkb19idWlsZCcpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdzdGFydGluZyBnZW5lcmF0ZURlcFRyZWVFdmVudCBmYWlsZWQnKQotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgZXZlbnQgPSB0aW5mb2lsLndhaXRfZXZlbnQodGltZW91dD0xMDAwKQotICAgICAgICAgICAgaWYgZXZlbnQ6Ci0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuY29tbWFuZC5Db21tYW5kRmFpbGVkKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdHZW5lcmF0aW5nIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gZmFpbGVkOiAlcycgJSBldmVudC5lcnJvcikKLSAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZENvbXBsZXRlZCk6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5Ob1Byb3ZpZGVyKToKLSAgICAgICAgICAgICAgICAgICAgaWYgZmFpbHNhZmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBldmVudCBpcyBpbmZvcm1hdGlvbmFsLCB3ZSB3aWxsIGdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICMgcmVtYWluaW5nIGRlcGVuZGVuY2llcyBldmVudHVhbGx5IGFuZCB0aHVzIGNhbiBpZ25vcmUgdGhpcwotICAgICAgICAgICAgICAgICAgICAgICAgIyBoZXJlIGxpa2Ugd2UgZG8gaW4gZ2V0X3NpZ25hdHVyZXMoKSwgaWYgZGVzaXJlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIGlmIGV2ZW50Ll9yZWFzb25zOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdOb3RoaW5nIHByb3ZpZGVzICVzOiAlcycgJSAoZXZlbnQuX2l0ZW0sIGV2ZW50Ll9yZWFzb25zKSkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTm90aGluZyBwcm92aWRlcyAlcy4nICUgKGV2ZW50Ll9pdGVtKSkKLSAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkRlcFRyZWVHZW5lcmF0ZWQpOgotICAgICAgICAgICAgICAgICAgICBkZXBncmFwaCA9IGV2ZW50Ll9kZXBncmFwaAotCi0gICAgaWYgZGVwZ3JhcGggaXMgTm9uZToKLSAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdDb3VsZCBub3QgcmV0cmlldmUgdGhlIGRlcGdyYXBoLicpCi0gICAgcmV0dXJuIGRlcGdyYXBoCi0KLWRlZiBjb21wYXJlX3NpZ25hdHVyZXMob2xkX3NpZ3MsIGN1cnJfc2lncyk6Ci0gICAgJycnCi0gICAgQ29tcGFyZXMgdGhlIHJlc3VsdCBvZiB0d28gZ2V0X3NpZ25hdHVyZXMoKSBjYWxscy4gUmV0dXJucyBOb25lIGlmIG5vCi0gICAgcHJvYmxlbXMgZm91bmQsIG90aGVyd2lzZSBhIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIGFzIGFkZGl0aW9uYWwKLSAgICBleHBsYW5hdGlvbiBpbiBzZWxmLmZhaWwoKS4KLSAgICAnJycKLSAgICAjIHRhc2sgLT4gKG9sZCBzaWduYXR1cmUsIG5ldyBzaWduYXR1cmUpCi0gICAgc2lnX2RpZmYgPSB7fQotICAgIGZvciB0YXNrIGluIG9sZF9zaWdzOgotICAgICAgICBpZiB0YXNrIGluIGN1cnJfc2lncyBhbmQgXAotICAgICAgICAgICBvbGRfc2lnc1t0YXNrXSAhPSBjdXJyX3NpZ3NbdGFza106Ci0gICAgICAgICAgICBzaWdfZGlmZlt0YXNrXSA9IChvbGRfc2lnc1t0YXNrXSwgY3Vycl9zaWdzW3Rhc2tdKQotCi0gICAgaWYgbm90IHNpZ19kaWZmOgotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgIyBCZXdhcmUsIGRlcGdyYXBoIHVzZXMgdGFzaz08cG4+Ljx0YXNrbmFtZT4gd2hlcmVhcyBnZXRfc2lnbmF0dXJlcygpCi0gICAgIyB1c2VzIDxwbj46PHRhc2tuYW1lPi4gTmVlZCB0byBjb252ZXJ0IHNvbWV0aW1lcy4gVGhlIG91dHB1dCBmb2xsb3dzCi0gICAgIyB0aGUgY29udmVudGlvbiBmcm9tIGdldF9zaWduYXR1cmVzKCkgYmVjYXVzZSB0aGF0IHNlZW1zIGNsb3NlciB0bwotICAgICMgbm9ybWFsIGJpdGJha2Ugb3V0cHV0LgotICAgIGRlZiBzaWcyZ3JhcGgodGFzayk6Ci0gICAgICAgIHBuLCB0YXNrbmFtZSA9IHRhc2sucnNwbGl0KCc6JywgMSkKLSAgICAgICAgcmV0dXJuIHBuICsgJy4nICsgdGFza25hbWUKLSAgICBkZWYgZ3JhcGgyc2lnKHRhc2spOgotICAgICAgICBwbiwgdGFza25hbWUgPSB0YXNrLnJzcGxpdCgnLicsIDEpCi0gICAgICAgIHJldHVybiBwbiArICc6JyArIHRhc2tuYW1lCi0gICAgZGVwZ3JhcGggPSBnZXRfZGVwZ3JhcGgoZmFpbHNhZmU9VHJ1ZSkKLSAgICBkZXBlbmRzID0gZGVwZ3JhcGhbJ3RkZXBlbmRzJ10KLQotICAgICMgSWYgYSB0YXNrIEEgaGFzIGEgY2hhbmdlZCBzaWduYXR1cmUsIGJ1dCBub25lIG9mIGl0cwotICAgICMgZGVwZW5kZW5jaWVzLCB0aGVuIHdlIG5lZWQgdG8gcmVwb3J0IGl0IGJlY2F1c2UgaXQgaXMKLSAgICAjIHRoZSBvbmUgd2hpY2ggaW50cm9kdWNlcyBhIGNoYW5nZS4gQW55IHRhc2sgZGVwZW5kaW5nIG9uCi0gICAgIyBBIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSB3aWxsIGFsc28gaGF2ZSBhIGNoYW5nZWQKLSAgICAjIHNpZ25hdHVyZSwgYnV0IHdlIGRvbid0IG5lZWQgdG8gcmVwb3J0IGl0LiBJdCBtaWdodCBoYXZlCi0gICAgIyBpdHMgb3duIGNoYW5nZXMsIHdoaWNoIHdpbGwgYmVjb21lIGFwcGFyZW50IG9uY2UgdGhlCi0gICAgIyBpc3N1ZXMgdGhhdCB3ZSBkbyByZXBvcnQgYXJlIGZpeGVkIGFuZCB0aGUgdGVzdCBnZXRzIHJ1bgotICAgICMgYWdhaW4uCi0gICAgc2lnX2RpZmZfZmlsdGVyZWQgPSBbXQotICAgIGZvciB0YXNrLCAob2xkX3NpZywgbmV3X3NpZykgaW4gc2lnX2RpZmYuaXRlbXMoKToKLSAgICAgICAgZGVwc190YWludGVkID0gRmFsc2UKLSAgICAgICAgZm9yIGRlcCBpbiBkZXBlbmRzLmdldChzaWcyZ3JhcGgodGFzayksICgpKToKLSAgICAgICAgICAgIGlmIGdyYXBoMnNpZyhkZXApIGluIHNpZ19kaWZmOgotICAgICAgICAgICAgICAgIGRlcHNfdGFpbnRlZCA9IFRydWUKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBpZiBub3QgZGVwc190YWludGVkOgotICAgICAgICAgICAgc2lnX2RpZmZfZmlsdGVyZWQuYXBwZW5kKCh0YXNrLCBvbGRfc2lnLCBuZXdfc2lnKSkKLQotICAgIG1zZyA9IFtdCi0gICAgbXNnLmFwcGVuZCgnJWQgc2lnbmF0dXJlcyBjaGFuZ2VkLCBpbml0aWFsIGRpZmZlcmVuY2VzIChmaXJzdCBoYXNoIGJlZm9yZSwgc2Vjb25kIGFmdGVyKTonICUKLSAgICAgICAgICAgICAgIGxlbihzaWdfZGlmZikpCi0gICAgZm9yIGRpZmYgaW4gc29ydGVkKHNpZ19kaWZmX2ZpbHRlcmVkKToKLSAgICAgICAgcmVjaXBlLCB0YXNrbmFtZSA9IGRpZmZbMF0ucnNwbGl0KCc6JywgMSkKLSAgICAgICAgY21kID0gJ2JpdGJha2UtZGlmZnNpZ3MgLS10YXNrICVzICVzIC0tc2lnbmF0dXJlICVzICVzJyAlIFwKLSAgICAgICAgICAgICAgKHJlY2lwZSwgdGFza25hbWUsIGRpZmZbMV0sIGRpZmZbMl0pCi0gICAgICAgIG1zZy5hcHBlbmQoJyAgICVzOiAlcyAtPiAlcycgJSBkaWZmKQotICAgICAgICBtc2cuYXBwZW5kKCcgICAgICAlcycgJSBjbWQpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG91dHB1dCA9IGNoZWNrX2NvbW1hbmQoJ0RldGVybWluaW5nIHNpZ25hdHVyZSBkaWZmZXJlbmNlIGZhaWxlZC4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQpLmRlY29kZSgndXRmLTgnKQotICAgICAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGVycm9yOgotICAgICAgICAgICAgb3V0cHV0ID0gc3RyKGVycm9yKQotICAgICAgICBpZiBvdXRwdXQ6Ci0gICAgICAgICAgICBtc2cuZXh0ZW5kKFsnICAgICAgJyArIGxpbmUgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKV0pCi0gICAgICAgICAgICBtc2cuYXBwZW5kKCcnKQotICAgIHJldHVybiAnXG4nLmpvaW4obXNnKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2NvbXBhdGxheWVyL2Nhc2UucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvY29tcGF0bGF5ZXIvY2FzZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRjZTc4YS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvY29tcGF0bGF5ZXIvY2FzZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KLSMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCi0KLWZyb20gb2VxYS5jb3JlLmNhc2UgaW1wb3J0IE9FVGVzdENhc2UKLQotY2xhc3MgT0VDb21wYXRMYXllclRlc3RDYXNlKE9FVGVzdENhc2UpOgotICAgIHBhc3MKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9jb21wYXRsYXllci9jYXNlcy9ic3AucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvY29tcGF0bGF5ZXIvY2FzZXMvYnNwLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2VmYWU0Li4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9jb21wYXRsYXllci9jYXNlcy9ic3AucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMDQgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KLSMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCi0KLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIGNvbXBhdGxheWVyIGltcG9ydCBMYXllclR5cGUsIGdldF9zaWduYXR1cmVzLCBjaGVja19jb21tYW5kLCBnZXRfZGVwZ3JhcGgKLWZyb20gY29tcGF0bGF5ZXIuY2FzZSBpbXBvcnQgT0VDb21wYXRMYXllclRlc3RDYXNlCi0KLWNsYXNzIEJTUENvbXBhdExheWVyKE9FQ29tcGF0TGF5ZXJUZXN0Q2FzZSk6Ci0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6Ci0gICAgICAgIGlmIHNlbGYudGMubGF5ZXJbJ3R5cGUnXSAhPSBMYXllclR5cGUuQlNQOgotICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIkJTUENvbXBhdExheWVyOiBMYXllciAlcyBpc24ndCBCU1Agb25lLiIgJVwKLSAgICAgICAgICAgICAgICBzZWxmLnRjLmxheWVyWyduYW1lJ10pCi0KLSAgICBkZWYgdGVzdF9ic3BfZGVmaW5lc19tYWNoaW5lcyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudGMubGF5ZXJbJ2NvbmYnXVsnbWFjaGluZXMnXSwgCi0gICAgICAgICAgICAgICAgIkxheWVyIGlzIEJTUCBidXQgZG9lc24ndCBkZWZpbmVzIG1hY2hpbmVzLiIpCi0KLSAgICBkZWYgdGVzdF9ic3Bfbm9fc2V0X21hY2hpbmUoc2VsZik6Ci0gICAgICAgIGZyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgZ2V0X2JiX3ZhcgotCi0gICAgICAgIG1hY2hpbmUgPSBnZXRfYmJfdmFyKCdNQUNISU5FJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRkWydiYnZhcnMnXVsnTUFDSElORSddLCBtYWNoaW5lLAotICAgICAgICAgICAgICAgIG1zZz0iTGF5ZXIgJXMgbW9kaWZpZWQgbWFjaGluZSAlcyAtPiAlcyIgJSBcCi0gICAgICAgICAgICAgICAgICAgIChzZWxmLnRjLmxheWVyWyduYW1lJ10sIHNlbGYudGRbJ2JidmFycyddWydNQUNISU5FJ10sIG1hY2hpbmUpKQotCi0KLSAgICBkZWYgdGVzdF9tYWNoaW5lX3dvcmxkKHNlbGYpOgotICAgICAgICAnJycKLSAgICAgICAgImJpdGJha2Ugd29ybGQiIGlzIGV4cGVjdGVkIHRvIHdvcmsgcmVnYXJkbGVzcyB3aGljaCBtYWNoaW5lIGlzIHNlbGVjdGVkLgotICAgICAgICBCU1AgbGF5ZXJzIHNvbWV0aW1lcyBicmVhayB0aGF0IGJ5IGVuYWJsaW5nIGEgcmVjaXBlIGZvciBhIGNlcnRhaW4gbWFjaGluZQotICAgICAgICB3aXRob3V0IGNoZWNraW5nIHdoZXRoZXIgdGhhdCByZWNpcGUgYWN0dWFsbHkgY2FuIGJlIGJ1aWx0IGluIHRoZSBjdXJyZW50Ci0gICAgICAgIGRpc3RybyBjb25maWd1cmF0aW9uIChmb3IgZXhhbXBsZSwgT3BlbkdMIG1pZ2h0IG5vdCBlbmFibGVkKS4KLQotICAgICAgICBUaGlzIHRlc3QgaXRlcmF0ZXMgb3ZlciBhbGwgbWFjaGluZXMuIEl0IHdvdWxkIGJlIG5pY2VyIHRvIGluc3RhbnRpYXRlCi0gICAgICAgIGl0IG9uY2UgcGVyIG1hY2hpbmUuIEl0IG1lcmVseSBjaGVja3MgZm9yIGVycm9ycyBkdXJpbmcgcGFyc2UKLSAgICAgICAgdGltZS4gSXQgZG9lcyBub3QgYWN0dWFsbHkgYXR0ZW1wdCB0byBidWlsZCBhbnl0aGluZy4KLSAgICAgICAgJycnCi0KLSAgICAgICAgaWYgbm90IHNlbGYudGRbJ21hY2hpbmVzJ106Ci0gICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdObyBtYWNoaW5lcyBzZXQgd2l0aCAtLW1hY2hpbmVzLicpCi0gICAgICAgIG1zZyA9IFtdCi0gICAgICAgIGZvciBtYWNoaW5lIGluIHNlbGYudGRbJ21hY2hpbmVzJ106Ci0gICAgICAgICAgICAjIEluIGNvbnRyYXN0IHRvIHRlc3RfbWFjaGluZV9zaWduYXR1cmVzKCkgYmVsb3csIGVycm9ycyBhcmUgZmF0YWwgaGVyZS4KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBnZXRfc2lnbmF0dXJlcyhzZWxmLnRkWydidWlsZGRpciddLCBmYWlsc2FmZT1GYWxzZSwgbWFjaGluZT1tYWNoaW5lKQotICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBleDoKLSAgICAgICAgICAgICAgICBtc2cuYXBwZW5kKHN0cihleCkpCi0gICAgICAgIGlmIG1zZzoKLSAgICAgICAgICAgIG1zZy5pbnNlcnQoMCwgJ1RoZSBmb2xsb3dpbmcgbWFjaGluZXMgYnJva2UgYSB3b3JsZCBidWlsZDonKQotICAgICAgICAgICAgc2VsZi5mYWlsKCdcbicuam9pbihtc2cpKQotCi0gICAgZGVmIHRlc3RfbWFjaGluZV9zaWduYXR1cmVzKHNlbGYpOgotICAgICAgICAnJycKLSAgICAgICAgU2VsZWN0aW5nIGEgbWFjaGluZSBtYXkgb25seSBhZmZlY3QgdGhlIHNpZ25hdHVyZSBvZiB0YXNrcyB0aGF0IGFyZSBzcGVjaWZpYwotICAgICAgICB0byB0aGF0IG1hY2hpbmUuIEluIG90aGVyIHdvcmRzLCB3aGVuIE1BQ0hJTkU9QSBhbmQgTUFDSElORT1CIHNoYXJlIGEgcmVjaXBlCi0gICAgICAgIGZvbyBhbmQgdGhlIG91dHB1dCBvZiBmb28sIHRoZW4gYm90aCBtYWNoaW5lIGNvbmZpZ3VyYXRpb25zIG11c3QgYnVpbGQgZm9vCi0gICAgICAgIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5LiBPdGhlcndpc2UgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHVzZSBib3RoIG1hY2hpbmVzCi0gICAgICAgIGluIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbi4KLQotICAgICAgICBUaGlzIGNyaXRlcmlhIGNhbiBvbmx5IGJlIHRlc3RlZCBieSB0ZXN0aW5nIGRpZmZlcmVudCBtYWNoaW5lcyBpbiBjb21iaW5hdGlvbiwKLSAgICAgICAgaS5lLiBvbmUgbWFpbiBsYXllciwgcG90ZW50aWFsbHkgc2V2ZXJhbCBhZGRpdGlvbmFsIEJTUCBsYXllcnMgYW5kIGFuIGV4cGxpY2l0Ci0gICAgICAgIGNob2ljZSBvZiBtYWNoaW5lczoKLSAgICAgICAgeW9jdG8tY29tcGF0LWxheWVyIC0tYWRkaXRpb25hbC1sYXllcnMgLi4uL21ldGEtaW50ZWwgLS1tYWNoaW5lcyBpbnRlbC1jb3JlaTctNjQgaW14NnNsZXZrIC0tIC4uLi9tZXRhLWZyZWVzY2FsZQotICAgICAgICAnJycKLQotICAgICAgICBpZiBub3Qgc2VsZi50ZFsnbWFjaGluZXMnXToKLSAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ05vIG1hY2hpbmVzIHNldCB3aXRoIC0tbWFjaGluZXMuJykKLQotICAgICAgICAjIENvbGxlY3Qgc2lnbmF0dXJlcyBmb3IgYWxsIG1hY2hpbmVzIHRoYXQgd2UgYXJlIHRlc3RpbmcKLSAgICAgICAgIyBhbmQgbWVyZ2UgdGhhdCBpbnRvIGEgaGFzaDoKLSAgICAgICAgIyB0dW5lIC0+IHRhc2sgLT4gc2lnbmF0dXJlIC0+IGxpc3Qgb2YgbWFjaGluZXMgd2l0aCB0aGF0IGNvbWJpbmF0aW9uCi0gICAgICAgICMKLSAgICAgICAgIyBJdCBpcyBhbiBlcnJvciBpZiBhbnkgdHVuZS90YXNrIHBhaXIgaGFzIG1vcmUgdGhhbiBvbmUgc2lnbmF0dXJlLAotICAgICAgICAjIGJlY2F1c2UgdGhhdCBpbXBsaWVzIHRoYXQgdGhlIG1hY2hpbmVzIHRoYXQgY2F1c2VkIHRob3NlIGRpZmZlcmVudAotICAgICAgICAjIHNpZ25hdHVyZXMgZG8gbm90IGFncmVlIG9uIGhvdyB0byBleGVjdXRlIHRoZSB0YXNrLgotICAgICAgICB0dW5lcyA9IHt9Ci0gICAgICAgICMgUHJlc2VydmUgb3JkZXJpbmcgb2YgbWFjaGluZXMgYXMgY2hvc2VuIGJ5IHRoZSB1c2VyLgotICAgICAgICBmb3IgbWFjaGluZSBpbiBzZWxmLnRkWydtYWNoaW5lcyddOgotICAgICAgICAgICAgY3Vycl9zaWdzLCB0dW5lMnRhc2tzID0gZ2V0X3NpZ25hdHVyZXMoc2VsZi50ZFsnYnVpbGRkaXInXSwgZmFpbHNhZmU9VHJ1ZSwgbWFjaGluZT1tYWNoaW5lKQotICAgICAgICAgICAgIyBJbnZlcnQgdGhlIHR1bmUgLT4gW3Rhc2tzXSBtYXBwaW5nLgotICAgICAgICAgICAgdGFza3MydHVuZSA9IHt9Ci0gICAgICAgICAgICBmb3IgdHVuZSwgdGFza3MgaW4gdHVuZTJ0YXNrcy5pdGVtcygpOgotICAgICAgICAgICAgICAgIGZvciB0YXNrIGluIHRhc2tzOgotICAgICAgICAgICAgICAgICAgICB0YXNrczJ0dW5lW3Rhc2tdID0gdHVuZQotICAgICAgICAgICAgZm9yIHRhc2ssIHNpZ2hhc2ggaW4gY3Vycl9zaWdzLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgdHVuZXMuc2V0ZGVmYXVsdCh0YXNrczJ0dW5lW3Rhc2tdLCB7fSkuc2V0ZGVmYXVsdCh0YXNrLCB7fSkuc2V0ZGVmYXVsdChzaWdoYXNoLCBbXSkuYXBwZW5kKG1hY2hpbmUpCi0KLSAgICAgICAgbXNnID0gW10KLSAgICAgICAgcHJ1bmVkID0gMAotICAgICAgICBsYXN0X2xpbmVfa2V5ID0gTm9uZQotICAgICAgICAjIGRvX2ZldGNoLCBkb191bnBhY2ssIC4uLiwgZG9fYnVpbGQKLSAgICAgICAgdGFza25hbWVfbGlzdCA9IFtdCi0gICAgICAgIGlmIHR1bmVzOgotICAgICAgICAgICAgIyBUaGUgb3V0cHV0IGJlbG93IGlzIG1vc3QgdXNlZnVsIHdoZW4gd2Ugc3RhcnQgd2l0aCB0YXNrcyB0aGF0IGFyZSBhdAotICAgICAgICAgICAgIyB0aGUgYm90dG9tIG9mIHRoZSBkZXBlbmRlbmN5IGNoYWluLCBpLmUuIHRob3NlIHRoYXQgcnVuIGZpcnN0LiBJZgotICAgICAgICAgICAgIyB0aG9zZSB0YXNrcyBkaWZmZXIsIHRoZSByZXN0IGFsc28gZG9lcy4KLSAgICAgICAgICAgICMKLSAgICAgICAgICAgICMgVG8gZ2V0IGFuIG9yZGVyaW5nIG9mIHRhc2tzLCB3ZSBkbyBhIHRvcG9sb2dpY2FsIHNvcnQgb2YgdGhlIGVudGlyZQotICAgICAgICAgICAgIyBkZXBncmFwaCBmb3IgdGhlIGJhc2UgY29uZmlndXJhdGlvbiwgdGhlbiBvbi10aGUtZmx5IGZsYXR0ZW4gdGhhdCBsaXN0IGJ5IHN0cmlwcGluZwotICAgICAgICAgICAgIyBvdXQgdGhlIHJlY2lwZSBuYW1lcyBhbmQgcmVtb3ZpbmcgZHVwbGljYXRlcy4gVGhlIGJhc2UgY29uZmlndXJhdGlvbgotICAgICAgICAgICAgIyBpcyBub3QgbmVjZXNzYXJpbHkgcmVwcmVzZW50YXRpdmUsIGJ1dCBzaG91bGQgYmUgY2xvc2UgZW5vdWdoLiBUYXNrcwotICAgICAgICAgICAgIyB0aGF0IHdlcmUgbm90IGVuY291bnRlcmVkIGdldCBhIGRlZmF1bHQgcHJpb3JpdHkuCi0gICAgICAgICAgICBkZXBncmFwaCA9IGdldF9kZXBncmFwaCgpCi0gICAgICAgICAgICBkZXBlbmRzID0gZGVwZ3JhcGhbJ3RkZXBlbmRzJ10KLSAgICAgICAgICAgIFdISVRFID0gMQotICAgICAgICAgICAgR1JBWSA9IDIKLSAgICAgICAgICAgIEJMQUNLID0gMwotICAgICAgICAgICAgY29sb3IgPSB7fQotICAgICAgICAgICAgZm91bmQgPSBzZXQoKQotICAgICAgICAgICAgZGVmIHZpc2l0KHRhc2spOgotICAgICAgICAgICAgICAgIGNvbG9yW3Rhc2tdID0gR1JBWQotICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwZW5kcy5nZXQodGFzaywgKCkpOgotICAgICAgICAgICAgICAgICAgICBpZiBjb2xvci5zZXRkZWZhdWx0KGRlcCwgV0hJVEUpID09IFdISVRFOgotICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXQoZGVwKQotICAgICAgICAgICAgICAgIGNvbG9yW3Rhc2tdID0gQkxBQ0sKLSAgICAgICAgICAgICAgICBwbiwgdGFza25hbWUgPSB0YXNrLnJzcGxpdCgnLicsIDEpCi0gICAgICAgICAgICAgICAgaWYgdGFza25hbWUgbm90IGluIGZvdW5kOgotICAgICAgICAgICAgICAgICAgICB0YXNrbmFtZV9saXN0LmFwcGVuZCh0YXNrbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgZm91bmQuYWRkKHRhc2tuYW1lKQotICAgICAgICAgICAgZm9yIHRhc2sgaW4gZGVwZW5kcy5rZXlzKCk6Ci0gICAgICAgICAgICAgICAgaWYgY29sb3Iuc2V0ZGVmYXVsdCh0YXNrLCBXSElURSkgPT0gV0hJVEU6Ci0gICAgICAgICAgICAgICAgICAgIHZpc2l0KHRhc2spCi0KLSAgICAgICAgdGFza25hbWVfb3JkZXIgPSBkaWN0KFsodGFzaywgaW5kZXgpIGZvciBpbmRleCwgdGFzayBpbiBlbnVtZXJhdGUodGFza25hbWVfbGlzdCkgXSkKLSAgICAgICAgZGVmIHRhc2tfa2V5KHRhc2spOgotICAgICAgICAgICAgcG4sIHRhc2tuYW1lID0gdGFzay5yc3BsaXQoJzonLCAxKQotICAgICAgICAgICAgcmV0dXJuIChwbiwgdGFza25hbWVfb3JkZXIuZ2V0KHRhc2tuYW1lLCBsZW4odGFza25hbWVfbGlzdCkpLCB0YXNrbmFtZSkKLQotICAgICAgICBmb3IgdHVuZSBpbiBzb3J0ZWQodHVuZXMua2V5cygpKToKLSAgICAgICAgICAgIHRhc2tzID0gdHVuZXNbdHVuZV0KLSAgICAgICAgICAgICMgQXMgZm9yIHRlc3Rfc2lnbmF0dXJlcyBpdCB3b3VsZCBiZSBuaWNlciB0byBzb3J0IHRhc2tzCi0gICAgICAgICAgICAjIGJ5IGRlcGVuZGVuY2llcyBoZXJlLCBidXQgdGhhdCBpcyBoYXJkZXIgYmVjYXVzZSB3ZSBoYXZlCi0gICAgICAgICAgICAjIHRvIHJlcG9ydCBvbiB0YXNrcyBmcm9tIGRpZmZlcmVudCBtYWNoaW5lcywgd2hpY2ggbWlnaHQKLSAgICAgICAgICAgICMgaGF2ZSBkaWZmZXJlbnQgZGVwZW5kZW5jaWVzLiBXZSByZXNvcnQgdG8gcHJ1bmluZyB0aGUKLSAgICAgICAgICAgICMgb3V0cHV0IGJ5IHJlcG9ydGluZyBvbmx5IG9uZSB0YXNrIHBlciByZWNpcGUgaWYgdGhlIHNldAotICAgICAgICAgICAgIyBvZiBtYWNoaW5lcyBtYXRjaGVzLgotICAgICAgICAgICAgIwotICAgICAgICAgICAgIyAiYml0YmFrZS1kaWZmc2lncyAtdCAtcyIgaXMgaW50ZWxsaWdlbnQgZW5vdWdoIHRvIHByaW50Ci0gICAgICAgICAgICAjIGRpZmZzIHJlY3Vyc2l2ZWx5LCBzbyBvZnRlbiBpdCBkb2VzIG5vdCBtYXR0ZXIgdGhhdCBtdWNoCi0gICAgICAgICAgICAjIGlmIHdlIGRvbid0IHBpY2sgdGhlIHVuZGVybHlpbmcgZGlmZmVyZW5jZQotICAgICAgICAgICAgIyBoZXJlLiBIb3dldmVyLCBzb21ldGltZXMgcmVjdXJzaW9uIGZhaWxzCi0gICAgICAgICAgICAjIChodHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MjgpLgotICAgICAgICAgICAgIwotICAgICAgICAgICAgIyBUbyBtaXRpZ2F0ZSB0aGF0IGEgYml0LCB3ZSB1c2UgYSBoYXJkLWNvZGVkIG9yZGVyaW5nIG9mCi0gICAgICAgICAgICAjIHRhc2tzIHRoYXQgcmVwcmVzZW50cyBob3cgdGhleSBub3JtYWxseSBydW4gYW5kIHByZWZlcgotICAgICAgICAgICAgIyB0byBwcmludCB0aGUgb25lcyB0aGF0IHJ1biBmaXJzdC4KLSAgICAgICAgICAgIGZvciB0YXNrIGluIHNvcnRlZCh0YXNrcy5rZXlzKCksIGtleT10YXNrX2tleSk6Ci0gICAgICAgICAgICAgICAgc2lnbmF0dXJlcyA9IHRhc2tzW3Rhc2tdCi0gICAgICAgICAgICAgICAgIyBkb19idWlsZCBjYW4gYmUgaWdub3JlZDogaXQgaXMga25vdyB0byBoYXZlCi0gICAgICAgICAgICAgICAgIyBkaWZmZXJlbnQgc2lnbmF0dXJlcyBpbiBzb21lIGNhc2VzLCBmb3IgZXhhbXBsZSBpbgotICAgICAgICAgICAgICAgICMgdGhlIGFsbGFyY2ggY2EtY2VydGlmaWNhdGVzIGR1ZSB0byBSREVQRU5EUz1vcGVuc3NsLgotICAgICAgICAgICAgICAgICMgVGhhdCBwYXJ0aWN1bGFyIGRlcGVuZGVuY3kgaXMgd2hpdGVsaXN0ZWQgdmlhCi0gICAgICAgICAgICAgICAgIyBTSUdHRU5fRVhDTFVERV9TQUZFX1JFQ0lQRV9ERVBTLCBidXQgc3RpbGwgc2hvd3MgdXAKLSAgICAgICAgICAgICAgICAjIGluIHRoZSBzc3RhdGUgc2lnbmF0dXJlIGhhc2ggYmVjYXVzZSBmaWx0ZXJpbmcgaXQKLSAgICAgICAgICAgICAgICAjIG91dCB3b3VsZCBiZSBoYXJkIGFuZCBydW5uaW5nIGRvX2J1aWxkIG11bHRpcGxlCi0gICAgICAgICAgICAgICAgIyB0aW1lcyBkb2Vzbid0IHJlYWxseSBtYXR0ZXIuCi0gICAgICAgICAgICAgICAgaWYgbGVuKHNpZ25hdHVyZXMua2V5cygpKSA+IDEgYW5kIFwKLSAgICAgICAgICAgICAgICAgICBub3QgdGFzay5lbmRzd2l0aCgnOmRvX2J1aWxkJyk6Ci0gICAgICAgICAgICAgICAgICAgICMgRXJyb3IhCi0gICAgICAgICAgICAgICAgICAgICMKLSAgICAgICAgICAgICAgICAgICAgIyBTb3J0IHNpZ25hdHVyZXMgYnkgbWFjaGluZXMsIGJlY2F1c2UgdGhlIGhleCB2YWx1ZXMgZG9uJ3QgbWVhbiBhbnl0aGluZy4KLSAgICAgICAgICAgICAgICAgICAgIyA9PiBhbGwtYXJjaCBhZHdhaXRhLWljb24tdGhlbWU6ZG9fYnVpbGQ6IDEyMzQuLi4gKGJlYWdsZWJvbmUsIHFlbXV4ODYpICE9IGFiY2RmLi4uIChxZW11eDg2LTY0KQotICAgICAgICAgICAgICAgICAgICAjCi0gICAgICAgICAgICAgICAgICAgICMgU2tpcCB0aGUgbGluZSBpZiBpdCBpcyBjb3ZlcmVkIGFscmVhZHkgYnkgdGhlIHByZWRlY2Vzc29yIChzYW1lIHBuLCBzYW1lIHNldHMgb2YgbWFjaGluZXMpLgotICAgICAgICAgICAgICAgICAgICBwbiwgdGFza25hbWUgPSB0YXNrLnJzcGxpdCgnOicsIDEpCi0gICAgICAgICAgICAgICAgICAgIG5leHRfbGluZV9rZXkgPSAocG4sIHNvcnRlZChzaWduYXR1cmVzLnZhbHVlcygpKSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbmV4dF9saW5lX2tleSAhPSBsYXN0X2xpbmVfa2V5OgotICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9ICcgICAlcyAlczogJyAlICh0dW5lLCB0YXNrKQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZSArPSAnICE9ICcuam9pbihbJyVzICglcyknICUgKHNpZ25hdHVyZSwgJywgJy5qb2luKFttIGZvciBtIGluIHNpZ25hdHVyZXNbc2lnbmF0dXJlXV0pKSBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSBpbiBzb3J0ZWQoc2lnbmF0dXJlcy5rZXlzKCksIGtleT1sYW1iZGEgczogc2lnbmF0dXJlc1tzXSldKQotICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9saW5lX2tleSA9IG5leHRfbGluZV9rZXkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5hcHBlbmQobGluZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICMgUmFuZG9tbHkgcGljayB0d28gbWlzbWF0Y2hlZCBzaWduYXR1cmVzIGFuZCByZW1lbWJlciBob3cgdG8gaW52b2tlCi0gICAgICAgICAgICAgICAgICAgICAgICAjIGJpdGJha2UtZGlmZnNpZ3MgZm9yIHRoZW0uCi0gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvciA9IGl0ZXIoc2lnbmF0dXJlcy5pdGVtcygpKQotICAgICAgICAgICAgICAgICAgICAgICAgYSA9IG5leHQoaXRlcmF0b3IpCi0gICAgICAgICAgICAgICAgICAgICAgICBiID0gbmV4dChpdGVyYXRvcikKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZzaWdfbWFjaGluZXMgPSAnKCVzKSAhPSAoJXMpJyAlICgnLCAnLmpvaW4oYVsxXSksICcsICcuam9pbihiWzFdKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZzaWdfcGFyYW1zID0gJy10ICVzICVzIC1zICVzICVzJyAlIChwbiwgdGFza25hbWUsIGFbMF0sIGJbMF0pCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWQgKz0gMQotCi0gICAgICAgIGlmIG1zZzoKLSAgICAgICAgICAgIG1zZy5pbnNlcnQoMCwgJ1RoZSBtYWNoaW5lcyBoYXZlIGNvbmZsaWN0aW5nIHNpZ25hdHVyZXMgZm9yIHNvbWUgc2hhcmVkIHRhc2tzOicpCi0gICAgICAgICAgICBpZiBwcnVuZWQgPiAwOgotICAgICAgICAgICAgICAgIG1zZy5hcHBlbmQoJycpCi0gICAgICAgICAgICAgICAgbXNnLmFwcGVuZCgnJWQgdGFza3Mgd2hlcmUgbm90IGxpc3RlZCBiZWNhdXNlIHNvbWUgb3RoZXIgdGFzayBvZiB0aGUgcmVjaXBlIGFscmVhZHkgZGlmZmVyZWQuJyAlIHBydW5lZCkKLSAgICAgICAgICAgICAgICBtc2cuYXBwZW5kKCdJdCBpcyBsaWtlbHkgdGhhdCBkaWZmZXJlbmNlcyBmcm9tIGRpZmZlcmVudCByZWNpcGVzIGFsc28gaGF2ZSB0aGUgc2FtZSByb290IGNhdXNlLicpCi0gICAgICAgICAgICBtc2cuYXBwZW5kKCcnKQotICAgICAgICAgICAgIyBFeHBsYWluIGhvdyB0byBpbnZlc3RpZ2F0ZS4uLgotICAgICAgICAgICAgbXNnLmFwcGVuZCgnVG8gaW52ZXN0aWdhdGUsIHJ1biBiaXRiYWtlLWRpZmZzaWdzIC10IHJlY2lwZW5hbWUgdGFza25hbWUgLXMgZnJvbXNpZyB0b3NpZy4nKQotICAgICAgICAgICAgY21kID0gJ2JpdGJha2UtZGlmZnNpZ3MgJXMnICUgZGlmZnNpZ19wYXJhbXMKLSAgICAgICAgICAgIG1zZy5hcHBlbmQoJ0V4YW1wbGU6ICVzIGluIHRoZSBsYXN0IGxpbmUnICUgZGlmZnNpZ19tYWNoaW5lcykKLSAgICAgICAgICAgIG1zZy5hcHBlbmQoJ0NvbW1hbmQ6ICVzJyAlIGNtZCkKLSAgICAgICAgICAgICMgLi4uIGFuZCBhY3R1YWxseSBkbyBpdCBhdXRvbWF0aWNhbGx5IGZvciB0aGF0IGV4YW1wbGUsIGJ1dCB3aXRob3V0IGFib3J0aW5nCi0gICAgICAgICAgICAjIHdoZW4gdGhhdCBmYWlscy4KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBvdXRwdXQgPSBjaGVja19jb21tYW5kKCdDb21wYXJpbmcgc2lnbmF0dXJlcyBmYWlsZWQuJywgY21kKS5kZWNvZGUoJ3V0Zi04JykKLSAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZXg6Ci0gICAgICAgICAgICAgICAgb3V0cHV0ID0gc3RyKGV4KQotICAgICAgICAgICAgbXNnLmV4dGVuZChbJyAgICcgKyBsaW5lIGZvciBsaW5lIGluIG91dHB1dC5zcGxpdGxpbmVzKCldKQotICAgICAgICAgICAgc2VsZi5mYWlsKCdcbicuam9pbihtc2cpKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2NvbXBhdGxheWVyL2Nhc2VzL2NvbW1vbi5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9jb21wYXRsYXllci9jYXNlcy9jb21tb24ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1ZThiYTQuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2NvbXBhdGxheWVyL2Nhc2VzL2NvbW1vbi5weQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE3IEludGVsIENvcnBvcmF0aW9uCi0jIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQotCi1pbXBvcnQgZ2xvYgotaW1wb3J0IG9zCi1pbXBvcnQgdW5pdHRlc3QKLWZyb20gY29tcGF0bGF5ZXIgaW1wb3J0IGdldF9zaWduYXR1cmVzLCBMYXllclR5cGUsIGNoZWNrX2NvbW1hbmQsIGdldF9kZXBncmFwaCwgY29tcGFyZV9zaWduYXR1cmVzCi1mcm9tIGNvbXBhdGxheWVyLmNhc2UgaW1wb3J0IE9FQ29tcGF0TGF5ZXJUZXN0Q2FzZQotCi1jbGFzcyBDb21tb25Db21wYXRMYXllcihPRUNvbXBhdExheWVyVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X3JlYWRtZShzZWxmKToKLSAgICAgICAgIyBUaGUgdG9wLWxldmVsIFJFQURNRSBmaWxlIG1heSBoYXZlIGEgc3VmZml4IChsaWtlIFJFQURNRS5yc3Qgb3IgUkVBRE1FLnR4dCkuCi0gICAgICAgIHJlYWRtZV9maWxlcyA9IGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oc2VsZi50Yy5sYXllclsncGF0aCddLCAnUkVBRE1FKicpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHJlYWRtZV9maWxlcykgPiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJMYXllciBkb2Vzbid0IGNvbnRhaW5zIFJFQURNRSBmaWxlLiIpCi0KLSAgICAgICAgIyBUaGVyZSBtaWdodCBiZSBtb3JlIHRoYW4gb25lIGZpbGUgbWF0Y2hpbmcgdGhlIGZpbGUgcGF0dGVybiBhYm92ZQotICAgICAgICAjIChmb3IgZXhhbXBsZSwgUkVBRE1FLnJzdCBhbmQgUkVBRE1FLUNPUFlJTkcucnN0KS4gVGhlIG9uZSB3aXRoIHRoZSBzaG9ydGVzdAotICAgICAgICAjIG5hbWUgaXMgY29uc2lkZXJlZCB0aGUgIm1haW4iIG9uZS4KLSAgICAgICAgcmVhZG1lX2ZpbGUgPSBzb3J0ZWQocmVhZG1lX2ZpbGVzKVswXQotICAgICAgICBkYXRhID0gJycKLSAgICAgICAgd2l0aCBvcGVuKHJlYWRtZV9maWxlLCAncicpIGFzIGY6Ci0gICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRhdGEsCi0gICAgICAgICAgICAgICAgbXNnPSJMYXllciBjb250YWlucyBhIFJFQURNRSBmaWxlIGJ1dCBpdCBpcyBlbXB0eS4iKQotCi0gICAgZGVmIHRlc3RfcGFyc2Uoc2VsZik6Ci0gICAgICAgIGNoZWNrX2NvbW1hbmQoJ0xheWVyICVzIGZhaWxlZCB0byBwYXJzZS4nICUgc2VsZi50Yy5sYXllclsnbmFtZSddLAotICAgICAgICAgICAgICAgICAgICAgICdiaXRiYWtlIC1wJykKLQotICAgIGRlZiB0ZXN0X3Nob3dfZW52aXJvbm1lbnQoc2VsZik6Ci0gICAgICAgIGNoZWNrX2NvbW1hbmQoJ0xheWVyICVzIGZhaWxlZCB0byBzaG93IGVudmlyb25tZW50LicgJSBzZWxmLnRjLmxheWVyWyduYW1lJ10sCi0gICAgICAgICAgICAgICAgICAgICAgJ2JpdGJha2UgLWUnKQotCi0gICAgZGVmIHRlc3Rfd29ybGQoc2VsZik6Ci0gICAgICAgICcnJwotICAgICAgICAiYml0YmFrZSB3b3JsZCIgaXMgZXhwZWN0ZWQgdG8gd29yay4gdGVzdF9zaWduYXR1cmVzIGRvZXMgbm90IGNvdmVyIHRoYXQKLSAgICAgICAgYmVjYXVzZSBpdCBpcyBtb3JlIGxlbmllbnQgYW5kIGlnbm9yZXMgcmVjaXBlcyBpbiBhIHdvcmxkIGJ1aWxkIHRoYXQKLSAgICAgICAgYXJlIG5vdCBhY3R1YWxseSBidWlsZGFibGUsIHNvIGhlcmUgd2UgZmFpbCB3aGVuICJiaXRiYWtlIC1TIG5vbmUgd29ybGQiCi0gICAgICAgIGZhaWxzLgotICAgICAgICAnJycKLSAgICAgICAgZ2V0X3NpZ25hdHVyZXMoc2VsZi50ZFsnYnVpbGRkaXInXSwgZmFpbHNhZmU9RmFsc2UpCi0KLSAgICBkZWYgdGVzdF9zaWduYXR1cmVzKHNlbGYpOgotICAgICAgICBpZiBzZWxmLnRjLmxheWVyWyd0eXBlJ10gPT0gTGF5ZXJUeXBlLlNPRlRXQVJFIGFuZCBcCi0gICAgICAgICAgIG5vdCBzZWxmLnRjLnRlc3Rfc29mdHdhcmVfbGF5ZXJfc2lnbmF0dXJlczoKLSAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJOb3QgdGVzdGluZyBmb3Igc2lnbmF0dXJlIGNoYW5nZXMgaW4gYSBzb2Z0d2FyZSBsYXllciAlcy4iIFwKLSAgICAgICAgICAgICAgICAgICAgICUgc2VsZi50Yy5sYXllclsnbmFtZSddKQotCi0gICAgICAgIGN1cnJfc2lncywgXyA9IGdldF9zaWduYXR1cmVzKHNlbGYudGRbJ2J1aWxkZGlyJ10sIGZhaWxzYWZlPVRydWUpCi0gICAgICAgIG1zZyA9IGNvbXBhcmVfc2lnbmF0dXJlcyhzZWxmLnRkWydzaWdzJ10sIGN1cnJfc2lncykKLSAgICAgICAgaWYgbXNnIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5mYWlsKCdBZGRpbmcgbGF5ZXIgJXMgY2hhbmdlZCBzaWduYXR1cmVzLlxuJXMnICUgKHNlbGYudGMubGF5ZXJbJ25hbWUnXSwgbXNnKSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9jb21wYXRsYXllci9jYXNlcy9kaXN0cm8ucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvY29tcGF0bGF5ZXIvY2FzZXMvZGlzdHJvLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjNhY2MxLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9jb21wYXRsYXllci9jYXNlcy9kaXN0cm8ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgotIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKLQotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gY29tcGF0bGF5ZXIgaW1wb3J0IExheWVyVHlwZQotZnJvbSBjb21wYXRsYXllci5jYXNlIGltcG9ydCBPRUNvbXBhdExheWVyVGVzdENhc2UKLQotY2xhc3MgRGlzdHJvQ29tcGF0TGF5ZXIoT0VDb21wYXRMYXllclRlc3RDYXNlKToKLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKLSAgICAgICAgaWYgc2VsZi50Yy5sYXllclsndHlwZSddICE9IExheWVyVHlwZS5ESVNUUk86Ci0gICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiRGlzdHJvQ29tcGF0TGF5ZXI6IExheWVyICVzIGlzbid0IERpc3RybyBvbmUuIiAlXAotICAgICAgICAgICAgICAgIHNlbGYudGMubGF5ZXJbJ25hbWUnXSkKLQotICAgIGRlZiB0ZXN0X2Rpc3Ryb19kZWZpbmVzX2Rpc3Ryb3Moc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnRjLmxheWVyWydjb25mJ11bJ2Rpc3Ryb3MnXSwgCi0gICAgICAgICAgICAgICAgIkxheWVyIGlzIEJTUCBidXQgZG9lc24ndCBkZWZpbmVzIG1hY2hpbmVzLiIpCi0KLSAgICBkZWYgdGVzdF9kaXN0cm9fbm9fc2V0X2Rpc3Ryb3Moc2VsZik6Ci0gICAgICAgIGZyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgZ2V0X2JiX3ZhcgotCi0gICAgICAgIGRpc3RybyA9IGdldF9iYl92YXIoJ0RJU1RSTycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZFsnYmJ2YXJzJ11bJ0RJU1RSTyddLCBkaXN0cm8sCi0gICAgICAgICAgICAgICAgbXNnPSJMYXllciAlcyBtb2RpZmllZCBkaXN0cm8gJXMgLT4gJXMiICUgXAotICAgICAgICAgICAgICAgICAgICAoc2VsZi50Yy5sYXllclsnbmFtZSddLCBzZWxmLnRkWydiYnZhcnMnXVsnRElTVFJPJ10sIGRpc3RybykpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvY29tcGF0bGF5ZXIvY29udGV4dC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9jb21wYXRsYXllci9jb250ZXh0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODExZDRhLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9jb21wYXRsYXllci9jb250ZXh0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KLSMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IGdsb2IKLWltcG9ydCByZQotCi1mcm9tIG9lcWEuY29yZS5jb250ZXh0IGltcG9ydCBPRVRlc3RDb250ZXh0Ci0KLWNsYXNzIENvbXBhdExheWVyVGVzdENvbnRleHQoT0VUZXN0Q29udGV4dCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRkPU5vbmUsIGxvZ2dlcj1Ob25lLCBsYXllcj1Ob25lLCB0ZXN0X3NvZnR3YXJlX2xheWVyX3NpZ25hdHVyZXM9VHJ1ZSk6Ci0gICAgICAgIHN1cGVyKENvbXBhdExheWVyVGVzdENvbnRleHQsIHNlbGYpLl9faW5pdF9fKHRkLCBsb2dnZXIpCi0gICAgICAgIHNlbGYubGF5ZXIgPSBsYXllcgotICAgICAgICBzZWxmLnRlc3Rfc29mdHdhcmVfbGF5ZXJfc2lnbmF0dXJlcyA9IHRlc3Rfc29mdHdhcmVfbGF5ZXJfc2lnbmF0dXJlcwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvX19pbml0X18ucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9fX2luaXRfXy5weQppbmRleCBkNjQ2YjBjLi45NGUzZDdkIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9fX2luaXRfXy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9fX2luaXRfXy5weQpAQCAtMTE1LDggKzExNSw4IEBACiAgICAgICAgIGltcG9ydCBiYi50aW5mb2lsCiAgICAgICAgIHRpbmZvaWwgPSBiYi50aW5mb2lsLlRpbmZvaWwodHJhY2tpbmc9dHJhY2tpbmcpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHRpbmZvaWwucHJlcGFyZShjb25maWdfb25seSkKICAgICAgICAgICAgIHRpbmZvaWwubG9nZ2VyLnNldExldmVsKGxvZ2dlci5nZXRFZmZlY3RpdmVMZXZlbCgpKQorICAgICAgICAgICAgdGluZm9pbC5wcmVwYXJlKGNvbmZpZ19vbmx5KQogICAgICAgICBleGNlcHQgYmIudGluZm9pbC5UaW5mb2lsVUlFeGNlcHRpb246CiAgICAgICAgICAgICB0aW5mb2lsLnNodXRkb3duKCkKICAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignRmFpbGVkIHRvIHN0YXJ0IGJpdGJha2UgZW52aXJvbm1lbnQnKQpAQCAtMTkxLDcgKzE5MSw3IEBACiAgICAgICAgIGxvZ2dlci5pbmZvKCdVc2luZyBzb3VyY2UgdHJlZSBhcyBidWlsZCBkaXJlY3Rvcnkgc2luY2UgLS1zYW1lLWRpciBzcGVjaWZpZWQnKQogICAgIGVsaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnYXV0b3Rvb2xzLWJyb2tlbnNlcCcsIGQpOgogICAgICAgICBsb2dnZXIuaW5mbygnVXNpbmcgc291cmNlIHRyZWUgYXMgYnVpbGQgZGlyZWN0b3J5IHNpbmNlIHJlY2lwZSBpbmhlcml0cyBhdXRvdG9vbHMtYnJva2Vuc2VwJykKLSAgICBlbGlmIGQuZ2V0VmFyKCdCJykgPT0gb3MucGF0aC5hYnNwYXRoKGQuZ2V0VmFyKCdTJykpOgorICAgIGVsaWYgb3MucGF0aC5hYnNwYXRoKGQuZ2V0VmFyKCdCJykpID09IG9zLnBhdGguYWJzcGF0aChkLmdldFZhcignUycpKToKICAgICAgICAgbG9nZ2VyLmluZm8oJ1VzaW5nIHNvdXJjZSB0cmVlIGFzIGJ1aWxkIGRpcmVjdG9yeSBzaW5jZSB0aGF0IHdvdWxkIGJlIHRoZSBkZWZhdWx0IGZvciB0aGlzIHJlY2lwZScpCiAgICAgZWxzZToKICAgICAgICAgYl9pc19zID0gRmFsc2UKQEAgLTI2MSwzNCArMjYxLDc5IEBACiAgICAgICAgICAgICAgICAgdGFyZ2V0cy5hcHBlbmQoJyVzLSVzJyAlIChwbiwgdmFyaWFudCkpCiAgICAgcmV0dXJuIHRhcmdldHMKIAotZGVmIGVuc3VyZV9ucG0oY29uZmlnLCBiYXNlcGF0aCwgZml4ZWRfc2V0dXA9RmFsc2UsIGNoZWNrX2V4aXN0cz1UcnVlKToKLSAgICAiIiIKLSAgICBFbnN1cmUgdGhhdCBucG0gaXMgYXZhaWxhYmxlIGFuZCBlaXRoZXIgYnVpbGQgaXQgb3Igc2hvdyBhCi0gICAgcmVhc29uYWJsZSBlcnJvciBtZXNzYWdlCi0gICAgIiIiCi0gICAgaWYgY2hlY2tfZXhpc3RzOgotICAgICAgICB0aW5mb2lsID0gc2V0dXBfdGluZm9pbChjb25maWdfb25seT1GYWxzZSwgYmFzZXBhdGg9YmFzZXBhdGgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJkID0gdGluZm9pbC5wYXJzZV9yZWNpcGUoJ25vZGVqcy1uYXRpdmUnKQotICAgICAgICAgICAgbmF0aXZlcGF0aCA9IHJkLmdldFZhcignU1RBR0lOR19CSU5ESVJfTkFUSVZFJykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHRpbmZvaWwuc2h1dGRvd24oKQotICAgICAgICBucG1wYXRoID0gb3MucGF0aC5qb2luKG5hdGl2ZXBhdGgsICducG0nKQotICAgICAgICBidWlsZF9ucG0gPSBub3Qgb3MucGF0aC5leGlzdHMobnBtcGF0aCkKLSAgICBlbHNlOgotICAgICAgICBidWlsZF9ucG0gPSBUcnVlCitkZWYgcmVwbGFjZV9mcm9tX2ZpbGUocGF0aCwgb2xkLCBuZXcpOgorICAgICIiIlJlcGxhY2Ugc3RyaW5ncyBvbiBhIGZpbGUiIiIKIAotICAgIGlmIGJ1aWxkX25wbToKLSAgICAgICAgbG9nZ2VyLmluZm8oJ0J1aWxkaW5nIG5vZGVqcy1uYXRpdmUnKQorICAgIGRlZiByZWFkX2ZpbGUocGF0aCk6CisgICAgICAgIGRhdGEgPSBOb25lCisgICAgICAgIHdpdGggb3BlbihwYXRoKSBhcyBmOgorICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgIHJldHVybiBkYXRhCisKKyAgICBkZWYgd3JpdGVfZmlsZShwYXRoLCBkYXRhKToKKyAgICAgICAgaWYgZGF0YSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHdkYXRhID0gZGF0YS5yc3RyaXAoKSArICJcbiIKKyAgICAgICAgd2l0aCBvcGVuKHBhdGgsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUod2RhdGEpCisKKyAgICAjIEluIGNhc2Ugb2xkIGlzIE5vbmUsIHJldHVybiBpbW1lZGlhdGVseQorICAgIGlmIG9sZCBpcyBOb25lOgorICAgICAgICByZXR1cm4KKyAgICB0cnk6CisgICAgICAgIHJkYXRhID0gcmVhZF9maWxlKHBhdGgpCisgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgIyBpZiBmaWxlIGRvZXMgbm90IGV4aXQsIGp1c3QgcXVpdCwgb3RoZXJ3aXNlIHJhaXNlIGFuIGV4Y2VwdGlvbgorICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UKKworICAgIG9sZF9jb250ZW50cyA9IHJkYXRhLnNwbGl0bGluZXMoKQorICAgIG5ld19jb250ZW50cyA9IFtdCisgICAgZm9yIG9sZF9jb250ZW50IGluIG9sZF9jb250ZW50czoKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXhlY19idWlsZF9lbnZfY29tbWFuZChjb25maWcuaW5pdF9wYXRoLCBiYXNlcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JpdGJha2UgLXEgbm9kZWpzLW5hdGl2ZSAtYyBhZGR0b19yZWNpcGVfc3lzcm9vdCcsIHdhdGNoPVRydWUpCi0gICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGU6Ci0gICAgICAgICAgICBpZiAiTm90aGluZyBQUk9WSURFUyAnbm9kZWpzLW5hdGl2ZSciIGluIGUuc3Rkb3V0OgotICAgICAgICAgICAgICAgIGlmIGZpeGVkX3NldHVwOgotICAgICAgICAgICAgICAgICAgICBtc2cgPSAnbm9kZWpzLW5hdGl2ZSBpcyByZXF1aXJlZCBmb3IgbnBtIGJ1dCBpcyBub3QgYXZhaWxhYmxlIHdpdGhpbiB0aGlzIFNESycKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBtc2cgPSAnbm9kZWpzLW5hdGl2ZSBpcyByZXF1aXJlZCBmb3IgbnBtIGJ1dCBpcyBub3QgYXZhaWxhYmxlIC0geW91IHdpbGwgbGlrZWx5IG5lZWQgdG8gYWRkIGEgbGF5ZXIgdGhhdCBwcm92aWRlcyBub2RlanMnCi0gICAgICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKG1zZykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIG5ld19jb250ZW50cy5hcHBlbmQob2xkX2NvbnRlbnQucmVwbGFjZShvbGQsIG5ldykpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgIHdyaXRlX2ZpbGUocGF0aCwgIlxuIi5qb2luKG5ld19jb250ZW50cykpCisKKworZGVmIHVwZGF0ZV91bmxvY2tlZHNpZ3MoYmFzZXBhdGgsIHdvcmtzcGFjZSwgZml4ZWRfc2V0dXAsIGV4dHJhPU5vbmUpOgorICAgICIiIiBUaGlzIGZ1bmN0aW9uIHdpbGwgbWFrZSB1bmxvY2tlZC1zaWdzLmluYyBtYXRjaCB0aGUgcmVjaXBlcyBpbiB0aGUKKyAgICB3b3Jrc3BhY2UgcGx1cyBhbnkgZXh0cmFzIHdlIHdhbnQgdW5sb2NrZWQuICIiIgorCisgICAgaWYgbm90IGZpeGVkX3NldHVwOgorICAgICAgICAjIE9ubHkgbmVlZCB0byB3cml0ZSB0aGlzIG91dCB3aXRoaW4gdGhlIGVTREsKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBub3QgZXh0cmE6CisgICAgICAgIGV4dHJhID0gW10KKworICAgIGNvbmZkaXIgPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICdjb25mJykKKyAgICB1bmxvY2tlZHNpZ3MgPSBvcy5wYXRoLmpvaW4oY29uZmRpciwgJ3VubG9ja2VkLXNpZ3MuaW5jJykKKworICAgICMgR2V0IGN1cnJlbnQgdW5sb2NrZWQgbGlzdCBpZiBhbnkKKyAgICB2YWx1ZXMgPSB7fQorICAgIGRlZiBnZXRfdW5sb2NrZWRzaWdzX3ZhcmZ1bmModmFybmFtZSwgb3JpZ3ZhbHVlLCBvcCwgbmV3bGluZXMpOgorICAgICAgICB2YWx1ZXNbdmFybmFtZV0gPSBvcmlndmFsdWUKKyAgICAgICAgcmV0dXJuIG9yaWd2YWx1ZSwgTm9uZSwgMCwgVHJ1ZQorICAgIGlmIG9zLnBhdGguZXhpc3RzKHVubG9ja2Vkc2lncyk6CisgICAgICAgIHdpdGggb3Blbih1bmxvY2tlZHNpZ3MsICdyJykgYXMgZjoKKyAgICAgICAgICAgIGJiLnV0aWxzLmVkaXRfbWV0YWRhdGEoZiwgWydTSUdHRU5fVU5MT0NLRURfUkVDSVBFUyddLCBnZXRfdW5sb2NrZWRzaWdzX3ZhcmZ1bmMpCisgICAgdW5sb2NrZWQgPSBzb3J0ZWQodmFsdWVzLmdldCgnU0lHR0VOX1VOTE9DS0VEX1JFQ0lQRVMnLCBbXSkpCisKKyAgICAjIElmIHRoZSBuZXcgbGlzdCBpcyBkaWZmZXJlbnQgdG8gdGhlIGN1cnJlbnQgbGlzdCwgd3JpdGUgaXQgb3V0CisgICAgbmV3dW5sb2NrZWQgPSBzb3J0ZWQobGlzdCh3b3Jrc3BhY2Uua2V5cygpKSArIGV4dHJhKQorICAgIGlmIHVubG9ja2VkICE9IG5ld3VubG9ja2VkOgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoY29uZmRpcikKKyAgICAgICAgd2l0aCBvcGVuKHVubG9ja2Vkc2lncywgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgiIyBETyBOT1QgTU9ESUZZISBZT1VSIENIQU5HRVMgV0lMTCBCRSBMT1NULlxuIiArCisgICAgICAgICAgICAgICAgICAgICIjIFRoaXMgbGF5ZXIgd2FzIGNyZWF0ZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBkZXZ0b29sIiArCisgICAgICAgICAgICAgICAgICAgICIgdXRpbGl0eSBpbiBvcmRlciB0b1xuIiArCisgICAgICAgICAgICAgICAgICAgICIjIGNvbnRhaW4gcmVjaXBlcyB0aGF0IGFyZSB1bmxvY2tlZC5cbiIpCisKKyAgICAgICAgICAgIGYud3JpdGUoJ1NJR0dFTl9VTkxPQ0tFRF9SRUNJUEVTICs9ICJcXFxuJykKKyAgICAgICAgICAgIGZvciBwbiBpbiBuZXd1bmxvY2tlZDoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCcgICAgJyArIHBuKQorICAgICAgICAgICAgZi53cml0ZSgnIicpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9kZXBsb3kucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9kZXBsb3kucHkKaW5kZXggYjM3MzBhZS4uOWNjNDkyNyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvZGVwbG95LnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL2RlcGxveS5weQpAQCAtMTYsMTIgKzE2LDE2IEBACiAjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCiAiIiJEZXZ0b29sIHBsdWdpbiBjb250YWluaW5nIHRoZSBkZXBsb3kgc3ViY29tbWFuZHMiIiIKIAotaW1wb3J0IG9zCi1pbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IG9zCiBpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRlbXBmaWxlCisKK2ltcG9ydCBiYi51dGlscwogaW1wb3J0IGFyZ3BhcnNlX29lCitpbXBvcnQgb2UudHlwZXMKKwogZnJvbSBkZXZ0b29sIGltcG9ydCBleGVjX2Zha2Vyb290LCBzZXR1cF90aW5mb2lsLCBjaGVja193b3Jrc3BhY2VfcmVjaXBlLCBEZXZ0b29sRXJyb3IKIAogbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2RldnRvb2wnKQpAQCAtNjQsNyArNjgsNyBAQAogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgICAgICBybWRpciAkZmlsZSA+IC9kZXYvbnVsbCAyPiYxIHx8IHRydWUnKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIGZpJykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIGVsc2UnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIHJtICRmaWxlJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICBybSAtZiAkZmlsZScpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBmaScpCiAgICAgbGluZXMuYXBwZW5kKCcgICAgZG9uZScpCiAgICAgaWYgbm90IGRyeXJ1bjoKQEAgLTExOSw3ICsxMjMsMTEgQEAKICAgICAgICAgIyBQdXQgYW55IHByZXNlcnZlZCBmaWxlcyBiYWNrCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnaWYgWyAtZCAkcHJlc2VydmVkaXIgXSA7IHRoZW4nKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBjZCAkcHJlc2VydmVkaXInKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBmaW5kIC4gLXR5cGUgZiAtZXhlYyBtdiB7fSAve30gXDsnKQorICAgICAgICAjIGZpbmQgZnJvbSBidXN5Ym94IG1pZ2h0IG5vdCBoYXZlIC1leGVjLCBzbyB3ZSBkb24ndCB1c2UgdGhhdAorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBmaW5kIC4gLXR5cGUgZiB8IHdoaWxlIHJlYWQgZmlsZScpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGRvJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIG12ICRmaWxlIC8kZmlsZScpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGRvbmUnKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBjZCAvJykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcm0gLXJmICRwcmVzZXJ2ZWRpcicpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnZmknKQpAQCAtMTM2LDExICsxNDQsMTIgQEAKICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQogCiAKKwogZGVmIGRlcGxveShhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgogICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAnZGVwbG95JyBzdWJjb21tYW5kIiIiCi0gICAgaW1wb3J0IHJlCiAgICAgaW1wb3J0IG1hdGgKICAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKKyAgICBpbXBvcnQgb2UucGFja2FnZQogCiAgICAgY2hlY2tfd29ya3NwYWNlX3JlY2lwZSh3b3Jrc3BhY2UsIGFyZ3MucmVjaXBlbmFtZSwgY2hlY2tzcmM9RmFsc2UpCiAKQEAgLTE2Niw2ICsxNzUsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVjaXBlPyBJZiBzbywgdGhlIGluc3RhbGwgc3RlcCBoYXMgbm90IGluc3RhbGxlZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FueSBmaWxlcy4nICUgYXJncy5yZWNpcGVuYW1lKQogCisgICAgICAgIGlmIGFyZ3Muc3RyaXAgYW5kIG5vdCBhcmdzLmRyeV9ydW46CisgICAgICAgICAgICAjIEZha2Vyb290IGNvcHkgdG8gbmV3IGRlc3RpbmF0aW9uCisgICAgICAgICAgICBzcmNkaXIgPSByZWNpcGVfb3V0ZGlyCisgICAgICAgICAgICByZWNpcGVfb3V0ZGlyID0gb3MucGF0aC5qb2luKHJkLmdldFZhcignV09SS0RJUicpLCAnZGVwbG95LXRhcmdldC1zdHJpcHBlZCcpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHJlY2lwZV9vdXRkaXIpOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShyZWNpcGVfb3V0ZGlyLCBUcnVlKQorICAgICAgICAgICAgZXhlY19mYWtlcm9vdChyZCwgImNwIC1hZiAlcyAlcyIgJSAob3MucGF0aC5qb2luKHNyY2RpciwgJy4nKSwgcmVjaXBlX291dGRpciksIHNoZWxsPVRydWUpCisgICAgICAgICAgICBvcy5lbnZpcm9uWydQQVRIJ10gPSAnOicuam9pbihbb3MuZW52aXJvblsnUEFUSCddLCByZC5nZXRWYXIoJ1BBVEgnKSBvciAnJ10pCisgICAgICAgICAgICBvZS5wYWNrYWdlLnN0cmlwX2V4ZWNzKGFyZ3MucmVjaXBlbmFtZSwgcmVjaXBlX291dGRpciwgcmQuZ2V0VmFyKCdTVFJJUCcpLCByZC5nZXRWYXIoJ2xpYmRpcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgcmQuZ2V0VmFyKCdiYXNlX2xpYmRpcicpKQorCiAgICAgICAgIGZpbGVsaXN0ID0gW10KICAgICAgICAgZnRvdGFsc2l6ZSA9IDAKICAgICAgICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsocmVjaXBlX291dGRpcik6CkBAIC0xODUsNyArMjA1LDYgQEAKICAgICAgICAgICAgICAgICBwcmludCgnICAlcycgJSBpdGVtKQogICAgICAgICAgICAgcmV0dXJuIDAKIAotCiAgICAgICAgIGV4dHJhb3B0aW9ucyA9ICcnCiAgICAgICAgIGlmIGFyZ3Mubm9faG9zdF9jaGVjazoKICAgICAgICAgICAgIGV4dHJhb3B0aW9ucyArPSAnLW8gVXNlcktub3duSG9zdHNGaWxlPS9kZXYvbnVsbCAtbyBTdHJpY3RIb3N0S2V5Q2hlY2tpbmc9bm8nCkBAIC0yOTcsNiArMzE2LDcgQEAKIAogZGVmIHJlZ2lzdGVyX2NvbW1hbmRzKHN1YnBhcnNlcnMsIGNvbnRleHQpOgogICAgICIiIlJlZ2lzdGVyIGRldnRvb2wgc3ViY29tbWFuZHMgZnJvbSB0aGUgZGVwbG95IHBsdWdpbiIiIgorCiAgICAgcGFyc2VyX2RlcGxveSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignZGVwbG95LXRhcmdldCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdEZXBsb3kgcmVjaXBlIG91dHB1dCBmaWxlcyB0byBsaXZlIHRhcmdldCBtYWNoaW5lJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdEZXBsb3lzIGEgcmVjaXBlXCdzIGJ1aWxkIG91dHB1dCAoaS5lLiB0aGUgb3V0cHV0IG9mIHRoZSBkb19pbnN0YWxsIHRhc2spIHRvIGEgbGl2ZSB0YXJnZXQgbWFjaGluZSBvdmVyIHNzaC4gQnkgZGVmYXVsdCwgYW55IGV4aXN0aW5nIGZpbGVzIHdpbGwgYmUgcHJlc2VydmVkIGluc3RlYWQgb2YgYmVpbmcgb3ZlcndyaXR0ZW4gYW5kIHdpbGwgYmUgcmVzdG9yZWQgaWYgeW91IHJ1biBkZXZ0b29sIHVuZGVwbG95LXRhcmdldC4gTm90ZTogdGhpcyBvbmx5IGRlcGxveXMgdGhlIHJlY2lwZSBpdHNlbGYgYW5kIG5vdCBhbnkgcnVudGltZSBkZXBlbmRlbmNpZXMsIHNvIGl0IGlzIGFzc3VtZWQgdGhhdCB0aG9zZSBoYXZlIGJlZW4gaW5zdGFsbGVkIG9uIHRoZSB0YXJnZXQgYmVmb3JlaGFuZC4nLApAQCAtMzA5LDYgKzMyOSwxNSBAQAogICAgIHBhcnNlcl9kZXBsb3kuYWRkX2FyZ3VtZW50KCctcCcsICctLW5vLXByZXNlcnZlJywgaGVscD0nRG8gbm90IHByZXNlcnZlIGV4aXN0aW5nIGZpbGVzJywgYWN0aW9uPSdzdG9yZV90cnVlJykKICAgICBwYXJzZXJfZGVwbG95LmFkZF9hcmd1bWVudCgnLS1uby1jaGVjay1zcGFjZScsIGhlbHA9J0RvIG5vdCBjaGVjayBmb3IgYXZhaWxhYmxlIHNwYWNlIGJlZm9yZSBkZXBsb3lpbmcnLCBhY3Rpb249J3N0b3JlX3RydWUnKQogICAgIHBhcnNlcl9kZXBsb3kuYWRkX2FyZ3VtZW50KCctUCcsICctLXBvcnQnLCBkZWZhdWx0PScyMicsIGhlbHA9J1BvcnQgdG8gdXNlIGZvciBjb25uZWN0aW9uIHRvIHRoZSB0YXJnZXQnKQorCisgICAgc3RyaXBfb3B0cyA9IHBhcnNlcl9kZXBsb3kuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cChyZXF1aXJlZD1GYWxzZSkKKyAgICBzdHJpcF9vcHRzLmFkZF9hcmd1bWVudCgnLVMnLCAnLS1zdHJpcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU3RyaXAgZXhlY3V0YWJsZXMgcHJpb3IgdG8gZGVwbG95aW5nIChkZWZhdWx0OiAlKGRlZmF1bHQpcykuICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIG9wdGlvbiBjYW4gYmUgY29udHJvbGxlZCBieSBzZXR0aW5nIHRoZSBzdHJpcCBvcHRpb24gaW4gdGhlIFtEZXBsb3ldIHNlY3Rpb24gdG8gVHJ1ZSBvciBGYWxzZS4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9b2UudHlwZXMuYm9vbGVhbihjb250ZXh0LmNvbmZpZy5nZXQoJ0RlcGxveScsICdzdHJpcCcsIGRlZmF1bHQ9JzAnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBzdHJpcF9vcHRzLmFkZF9hcmd1bWVudCgnLS1uby1zdHJpcCcsIGhlbHA9J0RvIG5vdCBzdHJpcCBleGVjdXRhYmxlcyBwcmlvciB0byBkZXBsb3knLCBkZXN0PSdzdHJpcCcsIGFjdGlvbj0nc3RvcmVfZmFsc2UnKQorCiAgICAgcGFyc2VyX2RlcGxveS5zZXRfZGVmYXVsdHMoZnVuYz1kZXBsb3kpCiAKICAgICBwYXJzZXJfdW5kZXBsb3kgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ3VuZGVwbG95LXRhcmdldCcsCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9leHBvcnQucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9leHBvcnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlZTI1OAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL2V4cG9ydC5weQpAQCAtMCwwICsxLDExOSBAQAorIyBEZXZlbG9wbWVudCB0b29sIC0gZXhwb3J0IGNvbW1hbmQgcGx1Z2luCisjCisjIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIiIiRGV2dG9vbCBleHBvcnQgcGx1Z2luIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgdGFyZmlsZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IGpzb24KKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2RldnRvb2wnKQorCisjIG91dHB1dCBmaWxlcworZGVmYXVsdF9hcmNuYW1lX3ByZWZpeCA9ICJ3b3Jrc3BhY2UtZXhwb3J0IgorbWV0YWRhdGEgPSAnLmV4cG9ydF9tZXRhZGF0YScKKworZGVmIGV4cG9ydChhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgorICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAnZXhwb3J0JyBzdWJjb21tYW5kIiIiCisKKyAgICBkZWYgYWRkX21ldGFkYXRhKHRhcik6CisgICAgICAgICIiIkFyY2hpdmUgdGhlIHdvcmtzcGFjZSBvYmplY3QiIiIKKyAgICAgICAgIyBmaW5hbGx5IHN0b3JlIHRoZSB3b3Jrc3BhY2UgbWV0YWRhdGEKKyAgICAgICAgd2l0aCBvcGVuKG1ldGFkYXRhLCAndycpIGFzIGZkOgorICAgICAgICAgICAgZmQud3JpdGUoanNvbi5kdW1wcygoY29uZmlnLndvcmtzcGFjZV9wYXRoLCB3b3Jrc3BhY2UpKSkKKyAgICAgICAgdGFyLmFkZChtZXRhZGF0YSkKKyAgICAgICAgb3MudW5saW5rKG1ldGFkYXRhKQorCisgICAgZGVmIGFkZF9yZWNpcGUodGFyLCByZWNpcGUsIGRhdGEpOgorICAgICAgICAiIiJBcmNoaXZlIHJlY2lwZSB3aXRoIHByb3BlciBhcmNuYW1lIiIiCisgICAgICAgICMgQ3JlYXRlIGEgbWFwIG9mIG5hbWUvYXJjbmFtZXMKKyAgICAgICAgYXJjbmFtZXMgPSBbXQorICAgICAgICBmb3Iga2V5LCBuYW1lIGluIGRhdGEuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG5hbWU6CisgICAgICAgICAgICAgICAgaWYga2V5ID09ICdzcmN0cmVlJzoKKyAgICAgICAgICAgICAgICAgICAgIyBhbGwgc291cmNlcywgbm8gbWF0dGVyIHdoZXJlIGFyZSBsb2NhdGVkLCBnb2VzIGludG8gdGhlIHNvdXJjZXMgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIGFyY25hbWUgPSAnc291cmNlcy8lcycgJSByZWNpcGUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBhcmNuYW1lID0gbmFtZS5yZXBsYWNlKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJycpCisgICAgICAgICAgICAgICAgYXJjbmFtZXMuYXBwZW5kKChuYW1lLCBhcmNuYW1lKSkKKworICAgICAgICBmb3IgbmFtZSwgYXJjbmFtZSBpbiBhcmNuYW1lczoKKyAgICAgICAgICAgIHRhci5hZGQobmFtZSwgYXJjbmFtZT1hcmNuYW1lKQorCisKKyAgICAjIE1ha2Ugc3VyZSB3b3Jrc3BhY2UgaXMgbm9uLWVtcHR5IGFuZCBwb3NzaWJsZSBsaXN0ZWQgaW5jbHVkZS9leGNsdWRlZCByZWNpcGVzIGFyZSBpbiB3b3Jrc3BhY2UKKyAgICBpZiBub3Qgd29ya3NwYWNlOgorICAgICAgICBsb2dnZXIuaW5mbygnV29ya3NwYWNlIGNvbnRhaW5zIG5vIHJlY2lwZXMsIG5vdGhpbmcgdG8gZXhwb3J0JykKKyAgICAgICAgcmV0dXJuIDAKKyAgICBlbHNlOgorICAgICAgICBmb3IgcGFyYW0sIHJlY2lwZXMgaW4geydpbmNsdWRlJzphcmdzLmluY2x1ZGUsJ2V4Y2x1ZGUnOmFyZ3MuZXhjbHVkZX0uaXRlbXMoKToKKyAgICAgICAgICAgIGZvciByZWNpcGUgaW4gcmVjaXBlczoKKyAgICAgICAgICAgICAgICBpZiByZWNpcGUgbm90IGluIHdvcmtzcGFjZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdSZWNpcGUgKCVzKSBvbiAlcyBhcmd1bWVudCBub3QgaW4gdGhlIGN1cnJlbnQgd29ya3NwYWNlJyAlIChyZWNpcGUsIHBhcmFtKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKKworICAgIG5hbWUgPSBhcmdzLmZpbGUKKworICAgIGRlZmF1bHRfbmFtZSA9ICIlcy0lcy50YXIuZ3oiICUgKGRlZmF1bHRfYXJjbmFtZV9wcmVmaXgsIGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCclWSVtJWQlSCVNJVMnKSkKKyAgICBpZiBub3QgbmFtZToKKyAgICAgICAgbmFtZSA9IGRlZmF1bHRfbmFtZQorICAgIGVsc2U6CisgICAgICAgICMgaWYgbmFtZSBpcyBhIGRpcmVjdG9yeSwgYXBwZW5kIHRoZSBkZWZhdWx0IG5hbWUKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihuYW1lKToKKyAgICAgICAgICAgIG5hbWUgPSBvcy5wYXRoLmpvaW4obmFtZSwgZGVmYXVsdF9uYW1lKQorCisgICAgaWYgb3MucGF0aC5leGlzdHMobmFtZSkgYW5kIG5vdCBhcmdzLm92ZXJ3cml0ZToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCdUYXIgYXJjaGl2ZSAlcyBleGlzdHMuIFVzZSAtLW92ZXJ3cml0ZS8tbyB0byBvdmVyd3JpdGUgaXQnKQorICAgICAgICByZXR1cm4gMQorCisgICAgIyBpZiBhbGwgd29ya3NwYWNlIGlzIGV4Y2x1ZGVkLCBxdWl0CisgICAgaWYgbm90IGxlbihzZXQod29ya3NwYWNlLmtleXMoKSkuZGlmZmVyZW5jZShzZXQoYXJncy5leGNsdWRlKSkpOgorICAgICAgICBsb2dnZXIud2FybignQWxsIHJlY2lwZXMgaW4gd29ya3NwYWNlIGV4Y2x1ZGVkLCBub3RoaW5nIHRvIGV4cG9ydCcpCisgICAgICAgIHJldHVybiAwCisKKyAgICBleHBvcnRlZCA9IFtdCisgICAgd2l0aCB0YXJmaWxlLm9wZW4obmFtZSwgJ3c6Z3onKSBhcyB0YXI6CisgICAgICAgIGlmIGFyZ3MuaW5jbHVkZToKKyAgICAgICAgICAgIGZvciByZWNpcGUgaW4gYXJncy5pbmNsdWRlOgorICAgICAgICAgICAgICAgIGFkZF9yZWNpcGUodGFyLCByZWNpcGUsIHdvcmtzcGFjZVtyZWNpcGVdKQorICAgICAgICAgICAgICAgIGV4cG9ydGVkLmFwcGVuZChyZWNpcGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgcmVjaXBlLCBkYXRhIGluIHdvcmtzcGFjZS5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIHJlY2lwZSBub3QgaW4gYXJncy5leGNsdWRlOgorICAgICAgICAgICAgICAgICAgICBhZGRfcmVjaXBlKHRhciwgcmVjaXBlLCBkYXRhKQorICAgICAgICAgICAgICAgICAgICBleHBvcnRlZC5hcHBlbmQocmVjaXBlKQorCisgICAgICAgIGFkZF9tZXRhZGF0YSh0YXIpCisKKyAgICBsb2dnZXIuaW5mbygnVGFyIGFyY2hpdmUgY3JlYXRlZCBhdCAlcyB3aXRoIHRoZSBmb2xsb3dpbmcgcmVjaXBlczogJXMnICUgKG5hbWUsICcsICcuam9pbihleHBvcnRlZCkpKQorICAgIHJldHVybiAwCisKK2RlZiByZWdpc3Rlcl9jb21tYW5kcyhzdWJwYXJzZXJzLCBjb250ZXh0KToKKyAgICAiIiJSZWdpc3RlciBkZXZ0b29sIGV4cG9ydCBzdWJjb21tYW5kcyIiIgorICAgIHBhcnNlciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignZXhwb3J0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRXhwb3J0IHdvcmtzcGFjZSBpbnRvIGEgdGFyIGFyY2hpdmUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nRXhwb3J0IG9uZSBvciBtb3JlIHJlY2lwZXMgZnJvbSBjdXJyZW50IHdvcmtzcGFjZSBpbnRvIGEgdGFyIGFyY2hpdmUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cD0nYWR2YW5jZWQnKQorCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1maWxlJywgJy1mJywgaGVscD0nT3V0cHV0IGFyY2hpdmUgZmlsZSBuYW1lJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW92ZXJ3cml0ZScsICctbycsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9J092ZXJ3cml0ZSBwcmV2aW91cyBleHBvcnQgdGFyIGFyY2hpdmUnKQorICAgIGdyb3VwID0gcGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1pbmNsdWRlJywgJy1pJywgbmFyZ3M9JysnLCBkZWZhdWx0PVtdLCBoZWxwPSdJbmNsdWRlIHJlY2lwZXMgaW50byB0aGUgdGFyIGFyY2hpdmUnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1leGNsdWRlJywgJy1lJywgbmFyZ3M9JysnLCBkZWZhdWx0PVtdLCBoZWxwPSdFeGNsdWRlIHJlY2lwZXMgaW50byB0aGUgdGFyIGFyY2hpdmUnKQorICAgIHBhcnNlci5zZXRfZGVmYXVsdHMoZnVuYz1leHBvcnQpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9pbXBvcnQucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9pbXBvcnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEzYTE4MAotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL2ltcG9ydC5weQpAQCAtMCwwICsxLDE0NCBAQAorIyBEZXZlbG9wbWVudCB0b29sIC0gaW1wb3J0IGNvbW1hbmQgcGx1Z2luCisjCisjIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIiIiRGV2dG9vbCBpbXBvcnQgcGx1Z2luIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHRhcmZpbGUKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBqc29uCitpbXBvcnQgZm5tYXRjaAorCitmcm9tIGRldnRvb2wgaW1wb3J0IHN0YW5kYXJkLCBzZXR1cF90aW5mb2lsLCByZXBsYWNlX2Zyb21fZmlsZSwgRGV2dG9vbEVycm9yCitmcm9tIGRldnRvb2wgaW1wb3J0IGV4cG9ydAorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignZGV2dG9vbCcpCisKK2RlZiBkZXZpbXBvcnQoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKKyAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ2ltcG9ydCcgc3ViY29tbWFuZCIiIgorCisgICAgZGVmIGdldF9wbihuYW1lKToKKyAgICAgICAgIiIiIFJldHVybnMgdGhlIGZpbGVuYW1lIG9mIGEgd29ya3NwYWNlIHJlY2lwZS9hcHBlbmQiIiIKKyAgICAgICAgbWV0YWRhdGEgPSBuYW1lLnNwbGl0KCcvJylbLTFdCisgICAgICAgIGZuLCBfID0gb3MucGF0aC5zcGxpdGV4dChtZXRhZGF0YSkKKyAgICAgICAgcmV0dXJuIGZuCisKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXJncy5maWxlKToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdUYXIgYXJjaGl2ZSAlcyBkb2VzIG5vdCBleGlzdC4gRXhwb3J0IHlvdXIgd29ya3NwYWNlIHVzaW5nICJkZXZ0b29sIGV4cG9ydCInICUgYXJncy5maWxlKQorCisgICAgd2l0aCB0YXJmaWxlLm9wZW4oYXJncy5maWxlKSBhcyB0YXI6CisgICAgICAgICMgR2V0IGV4cG9ydGVkIG1ldGFkYXRhCisgICAgICAgIGV4cG9ydF93b3Jrc3BhY2VfcGF0aCA9IGV4cG9ydF93b3Jrc3BhY2UgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1ldGFkYXRhID0gdGFyLmdldG1lbWJlcihleHBvcnQubWV0YWRhdGEpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvciBhcyBrZToKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignVGhlIGV4cG9ydCBtZXRhZGF0YSBmaWxlIGNyZWF0ZWQgYnkgImRldnRvb2wgZXhwb3J0IiB3YXMgbm90IGZvdW5kLiAiZGV2dG9vbCBpbXBvcnQiIGNhbiBvbmx5IGJlIHVzZWQgdG8gaW1wb3J0IHRhciBhcmNoaXZlcyBjcmVhdGVkIGJ5ICJkZXZ0b29sIGV4cG9ydCIuJykKKworICAgICAgICB0YXIuZXh0cmFjdChtZXRhZGF0YSkKKyAgICAgICAgd2l0aCBvcGVuKG1ldGFkYXRhLm5hbWUpIGFzIGZkbToKKyAgICAgICAgICAgIGV4cG9ydF93b3Jrc3BhY2VfcGF0aCwgZXhwb3J0X3dvcmtzcGFjZSA9IGpzb24ubG9hZChmZG0pCisgICAgICAgIG9zLnVubGluayhtZXRhZGF0YS5uYW1lKQorCisgICAgICAgIG1lbWJlcnMgPSB0YXIuZ2V0bWVtYmVycygpCisKKyAgICAgICAgIyBHZXQgYXBwZW5kcyBhbmQgcmVjaXBlcyBmcm9tIHRoZSBleHBvcnRlZCBhcmNoaXZlLCB0aGVzZQorICAgICAgICAjIHdpbGwgYmUgbmVlZGVkIHRvIGZpbmQgb3V0IHRob3NlIGFwcGVuZHMgd2l0aG91dCBjb3JyZXNwb25kaW5nCisgICAgICAgICMgcmVjaXBlIHBhaXIKKyAgICAgICAgYXBwZW5kX2ZucywgcmVjaXBlX2ZucyA9IHNldCgpLCBzZXQoKQorICAgICAgICBmb3IgbWVtYmVyIGluIG1lbWJlcnM6CisgICAgICAgICAgICBpZiBtZW1iZXIubmFtZS5zdGFydHN3aXRoKCdhcHBlbmRzJyk6CisgICAgICAgICAgICAgICAgYXBwZW5kX2Zucy5hZGQoZ2V0X3BuKG1lbWJlci5uYW1lKSkKKyAgICAgICAgICAgIGVsaWYgbWVtYmVyLm5hbWUuc3RhcnRzd2l0aCgncmVjaXBlcycpOgorICAgICAgICAgICAgICAgIHJlY2lwZV9mbnMuYWRkKGdldF9wbihtZW1iZXIubmFtZSkpCisKKyAgICAgICAgIyBTZXR1cCB0aW5mb2lsLCBnZXQgcmVxdWlyZWQgZGF0YSBhbmQgc2h1dGRvd24KKyAgICAgICAgdGluZm9pbCA9IHNldHVwX3RpbmZvaWwoY29uZmlnX29ubHk9RmFsc2UsIGJhc2VwYXRoPWJhc2VwYXRoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXJyZW50X2ZucyA9IFtvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZVswXSkgZm9yIHJlY2lwZSBpbiB0aW5mb2lsLmNvb2tlci5yZWNpcGVjYWNoZXNbJyddLnBrZ19mbi5pdGVtcygpXQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGluZm9pbC5zaHV0ZG93bigpCisKKyAgICAgICAgIyBGaW5kIHRob3NlIGFwcGVuZHMgdGhhdCBkbyBub3QgaGF2ZSByZWNpcGVzIGluIGN1cnJlbnQgbWV0YWRhdGEKKyAgICAgICAgbm9uX2ltcG9ydGFibGVzID0gW10KKyAgICAgICAgZm9yIGZuIGluIGFwcGVuZF9mbnMgLSByZWNpcGVfZm5zOgorICAgICAgICAgICAgIyBDaGVjayBvbiBjdXJyZW50IG1ldGFkYXRhIChjb3ZlcmluZyB0aG9zZSBsYXllcnMgaW5kaWNhdGVkIGluIGJibGF5ZXJzLmNvbmYpCisgICAgICAgICAgICBmb3IgY3VycmVudF9mbiBpbiBjdXJyZW50X2ZuczoKKyAgICAgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2goY3VycmVudF9mbiwgJyonICsgZm4ucmVwbGFjZSgnJScsICcnKSArICcqJyk6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5vbl9pbXBvcnRhYmxlcy5hcHBlbmQoZm4pCisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ05vIHJlY2lwZSB0byBhcHBlbmQgJXMuYmJhcHBwZW5kLCBza2lwcGluZycgJSBmbikKKworICAgICAgICAjIEV4dHJhY3QKKyAgICAgICAgaW1wb3J0ZWQgPSBbXQorICAgICAgICBmb3IgbWVtYmVyIGluIG1lbWJlcnM6CisgICAgICAgICAgICBpZiBtZW1iZXIubmFtZSA9PSBleHBvcnQubWV0YWRhdGE6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZm9yIG5vbmltcCBpbiBub25faW1wb3J0YWJsZXM6CisgICAgICAgICAgICAgICAgcG4gPSBub25pbXAuc3BsaXQoJ18nKVswXQorICAgICAgICAgICAgICAgICMgZG8gbm90IGV4dHJhY3QgZGF0YSBmcm9tIG5vbi1pbXBvcnRhYmxlIHJlY2lwZXMgb3IgbWV0YWRhdGEKKyAgICAgICAgICAgICAgICBpZiBtZW1iZXIubmFtZS5zdGFydHN3aXRoKCdhcHBlbmRzLyVzJyAlIG5vbmltcCkgb3IgXAorICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVyLm5hbWUuc3RhcnRzd2l0aCgncmVjaXBlcy8lcycgJSBub25pbXApIG9yIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbWJlci5uYW1lLnN0YXJ0c3dpdGgoJ3NvdXJjZXMvJXMnICUgcG4pOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgbWVtYmVyLm5hbWUpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCk6CisgICAgICAgICAgICAgICAgICAgICMgYnkgZGVmYXVsdCwgbm8gZmlsZSBvdmVyd3JpdGUgaXMgZG9uZSB1bmxlc3MgLW8gaXMgZ2l2ZW4gYnkgdGhlIHVzZXIKKyAgICAgICAgICAgICAgICAgICAgaWYgYXJncy5vdmVyd3JpdGU6CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyLmV4dHJhY3QobWVtYmVyLCBwYXRoPWNvbmZpZy53b3Jrc3BhY2VfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBQZXJtaXNzaW9uRXJyb3IgYXMgcGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4ocGUpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybignRmlsZSBhbHJlYWR5IHByZXNlbnQuIFVzZSAtLW92ZXJ3cml0ZS8tbyB0byBvdmVyd3JpdGUgaXQ6ICVzJyAlIG1lbWJlci5uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0YXIuZXh0cmFjdChtZW1iZXIsIHBhdGg9Y29uZmlnLndvcmtzcGFjZV9wYXRoKQorCisgICAgICAgICAgICAgICAgIyBVcGRhdGUgRVhURVJOQUxTUkMgYW5kIHRoZSBkZXZ0b29sIG1kNSBmaWxlCisgICAgICAgICAgICAgICAgaWYgbWVtYmVyLm5hbWUuc3RhcnRzd2l0aCgnYXBwZW5kcycpOgorICAgICAgICAgICAgICAgICAgICBpZiBleHBvcnRfd29ya3NwYWNlX3BhdGg6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGFwcGVuZHMgY3JlYXRlZCBieSAnZGV2dG9vbCBtb2RpZnknIGp1c3QgbmVlZCB0byB1cGRhdGUgdGhlIHdvcmtzcGFjZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZV9mcm9tX2ZpbGUocGF0aCwgZXhwb3J0X3dvcmtzcGFjZV9wYXRoLCBjb25maWcud29ya3NwYWNlX3BhdGgpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYXBwZW5kcyBjcmVhdGVkIGJ5ICdkZXZ0b29sIGFkZCcgbmVlZCByZXBsYWNlbWVudCBvZiBleHBvcnRlZCBzb3VyY2UgdHJlZQorICAgICAgICAgICAgICAgICAgICAgICAgcG4gPSBnZXRfcG4obWVtYmVyLm5hbWUpLnNwbGl0KCdfJylbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkX3NyY3RyZWUgPSBleHBvcnRfd29ya3NwYWNlW3BuXVsnc3JjdHJlZSddCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBleHBvcnRlZF9zcmN0cmVlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VfZnJvbV9maWxlKHBhdGgsIGV4cG9ydGVkX3NyY3RyZWUsIG9zLnBhdGguam9pbihjb25maWcud29ya3NwYWNlX3BhdGgsICdzb3VyY2VzJywgcG4pKQorCisgICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkLl9hZGRfbWQ1KGNvbmZpZywgcG4sIHBhdGgpCisgICAgICAgICAgICAgICAgICAgIGltcG9ydGVkLmFwcGVuZChwbikKKworICAgIGlmIGltcG9ydGVkOgorICAgICAgICBsb2dnZXIuaW5mbygnSW1wb3J0ZWQgcmVjaXBlcyBpbnRvIHdvcmtzcGFjZSAlczogJXMnICUgKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJywgJy5qb2luKGltcG9ydGVkKSkpCisgICAgZWxzZToKKyAgICAgICAgbG9nZ2VyLndhcm4oJ05vIHJlY2lwZXMgaW1wb3J0ZWQgaW50byB0aGUgd29ya3NwYWNlJykKKworICAgIHJldHVybiAwCisKK2RlZiByZWdpc3Rlcl9jb21tYW5kcyhzdWJwYXJzZXJzLCBjb250ZXh0KToKKyAgICAiIiJSZWdpc3RlciBkZXZ0b29sIGltcG9ydCBzdWJjb21tYW5kcyIiIgorICAgIHBhcnNlciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignaW1wb3J0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nSW1wb3J0IGV4cG9ydGVkIHRhciBhcmNoaXZlIGludG8gd29ya3NwYWNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J0ltcG9ydCB0YXIgYXJjaGl2ZSBwcmV2aW91c2x5IGNyZWF0ZWQgYnkgImRldnRvb2wgZXhwb3J0IiBpbnRvIHdvcmtzcGFjZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwPSdhZHZhbmNlZCcpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnZmlsZScsIG1ldGF2YXI9J0ZJTEUnLCBoZWxwPSdOYW1lIG9mIHRoZSB0YXIgYXJjaGl2ZSB0byBpbXBvcnQnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tb3ZlcndyaXRlJywgJy1vJywgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0nT3ZlcndyaXRlIGZpbGVzIHdoZW4gZXh0cmFjdGluZycpCisgICAgcGFyc2VyLnNldF9kZWZhdWx0cyhmdW5jPWRldmltcG9ydCkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3Nkay5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3Nkay5weQppbmRleCBlOGJmMGFkLi5mNDY1NzdjIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9zZGsucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvc2RrLnB5CkBAIC0xNTUsNyArMTU1LDcgQEAKICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGJhc2VwYXRoLCAnbGF5ZXJzLy5naXQnKSk6CiAgICAgICAgICAgICBvdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgiZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiIsIHNoZWxsPVRydWUsIGN3ZD1sYXllcnNfZGlyKQogICAgICAgICAgICAgaWYgbm90IG91dDoKLSAgICAgICAgICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoImdpdCBmZXRjaCAtLWFsbDsgZ2l0IHJlc2V0IC0taGFyZCIsIHNoZWxsPVRydWUsIGN3ZD1sYXllcnNfZGlyKQorICAgICAgICAgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgiZ2l0IGZldGNoIC0tYWxsOyBnaXQgcmVzZXQgLS1oYXJkIEB7dX0iLCBzaGVsbD1UcnVlLCBjd2Q9bGF5ZXJzX2RpcikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJGYWlsZWQgdG8gdXBkYXRlIG1ldGFkYXRhIGFzIHRoZXJlIGhhdmUgYmVlbiBjaGFuZ2VzIG1hZGUgdG8gaXQuIEFib3J0aW5nLiIpOwogICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ2hhbmdlZCBmaWxlczpcbiVzIiAlIG91dCk7CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9zdGFuZGFyZC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3N0YW5kYXJkLnB5CmluZGV4IDVmZjFlMjMuLmJlZWEwZDQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3N0YW5kYXJkLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3N0YW5kYXJkLnB5CkBAIC0xLDYgKzEsNiBAQAogIyBEZXZlbG9wbWVudCB0b29sIC0gc3RhbmRhcmQgY29tbWFuZHMgcGx1Z2luCiAjCi0jIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEludGVsIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEludGVsIENvcnBvcmF0aW9uCiAjCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0zMCw3ICszMCw3IEBACiBpbXBvcnQgZ2xvYgogaW1wb3J0IGZpbGVjbXAKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0Ci1mcm9tIGRldnRvb2wgaW1wb3J0IGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQsIHNldHVwX3RpbmZvaWwsIGNoZWNrX3dvcmtzcGFjZV9yZWNpcGUsIHVzZV9leHRlcm5hbF9idWlsZCwgc2V0dXBfZ2l0X3JlcG8sIHJlY2lwZV90b19hcHBlbmQsIGdldF9iYmNsYXNzZXh0ZW5kX3RhcmdldHMsIGVuc3VyZV9ucG0sIERldnRvb2xFcnJvcgorZnJvbSBkZXZ0b29sIGltcG9ydCBleGVjX2J1aWxkX2Vudl9jb21tYW5kLCBzZXR1cF90aW5mb2lsLCBjaGVja193b3Jrc3BhY2VfcmVjaXBlLCB1c2VfZXh0ZXJuYWxfYnVpbGQsIHNldHVwX2dpdF9yZXBvLCByZWNpcGVfdG9fYXBwZW5kLCBnZXRfYmJjbGFzc2V4dGVuZF90YXJnZXRzLCB1cGRhdGVfdW5sb2NrZWRzaWdzLCBEZXZ0b29sRXJyb3IKIGZyb20gZGV2dG9vbCBpbXBvcnQgcGFyc2VfcmVjaXBlCiAKIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdkZXZ0b29sJykKQEAgLTY2LDYgKzY2LDEyIEBACiAgICAgICAgIGVsaWYgb3MucGF0aC5pc2RpcihhcmdzLnJlY2lwZW5hbWUpOgogICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0FtYmlndW91cyBhcmd1bWVudCAiJXMiIC0gYXNzdW1pbmcgeW91IG1lYW4gaXQgdG8gYmUgdGhlIHJlY2lwZSBuYW1lJyAlIGFyZ3MucmVjaXBlbmFtZSkKIAorICAgIGlmIG5vdCBhcmdzLmZldGNodXJpOgorICAgICAgICBpZiBhcmdzLnNyY3JldjoKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignVGhlIC1TLy0tc3JjcmV2IG9wdGlvbiBpcyBvbmx5IHZhbGlkIHdoZW4gZmV0Y2hpbmcgZnJvbSBhbiBTQ00gcmVwb3NpdG9yeScpCisgICAgICAgIGlmIGFyZ3Muc3JjYnJhbmNoOgorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdUaGUgLUIvLS1zcmNicmFuY2ggb3B0aW9uIGlzIG9ubHkgdmFsaWQgd2hlbiBmZXRjaGluZyBmcm9tIGFuIFNDTSByZXBvc2l0b3J5JykKKwogICAgIGlmIGFyZ3Muc3JjdHJlZSBhbmQgb3MucGF0aC5pc2ZpbGUoYXJncy5zcmN0cmVlKToKICAgICAgICAgYXJncy5mZXRjaHVyaSA9ICdmaWxlOi8vJyArIG9zLnBhdGguYWJzcGF0aChhcmdzLnNyY3RyZWUpCiAgICAgICAgIGFyZ3Muc3JjdHJlZSA9ICcnCkBAIC0xMjgsOSArMTM0LDYgQEAKICAgICAgICAgY29sb3IgPSBhcmdzLmNvbG9yCiAgICAgZXh0cmFjbWRvcHRzID0gJycKICAgICBpZiBhcmdzLmZldGNodXJpOgotICAgICAgICBpZiBhcmdzLmZldGNodXJpLnN0YXJ0c3dpdGgoJ25wbTovLycpOgotICAgICAgICAgICAgZW5zdXJlX25wbShjb25maWcsIGJhc2VwYXRoLCBhcmdzLmZpeGVkX3NldHVwKQotCiAgICAgICAgIHNvdXJjZSA9IGFyZ3MuZmV0Y2h1cmkKICAgICAgICAgaWYgc3JjdHJlZToKICAgICAgICAgICAgIGV4dHJhY21kb3B0cyArPSAnIC14ICVzJyAlIHNyY3RyZWUKQEAgLTE1MiwzMSArMTU1LDI0IEBACiAgICAgICAgIGV4dHJhY21kb3B0cyArPSAnIC1hJwogICAgIGlmIGFyZ3MuZmV0Y2hfZGV2OgogICAgICAgICBleHRyYWNtZG9wdHMgKz0gJyAtLWZldGNoLWRldicKKyAgICBpZiBhcmdzLm1pcnJvcnM6CisgICAgICAgIGV4dHJhY21kb3B0cyArPSAnIC0tbWlycm9ycycKKyAgICBpZiBhcmdzLnNyY3JldjoKKyAgICAgICAgZXh0cmFjbWRvcHRzICs9ICcgLS1zcmNyZXYgJXMnICUgYXJncy5zcmNyZXYKKyAgICBpZiBhcmdzLnNyY2JyYW5jaDoKKyAgICAgICAgZXh0cmFjbWRvcHRzICs9ICcgLS1zcmNicmFuY2ggJXMnICUgYXJncy5zcmNicmFuY2gKKyAgICBpZiBhcmdzLnByb3ZpZGVzOgorICAgICAgICBleHRyYWNtZG9wdHMgKz0gJyAtLXByb3ZpZGVzICVzJyAlIGFyZ3MucHJvdmlkZXMKIAogICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbCcpCiAgICAgdHJ5OgotICAgICAgICBidWlsdG5wbSA9IEZhbHNlCi0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc3Rkb3V0LCBfID0gZXhlY19idWlsZF9lbnZfY29tbWFuZChjb25maWcuaW5pdF9wYXRoLCBiYXNlcGF0aCwgJ3JlY2lwZXRvb2wgLS1jb2xvcj0lcyBjcmVhdGUgLS1kZXZ0b29sIC1vICVzIFwnJXNcJyAlcycgJSAoY29sb3IsIHRlbXBkaXIsIHNvdXJjZSwgZXh0cmFjbWRvcHRzKSwgd2F0Y2g9VHJ1ZSkKLSAgICAgICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgaWYgZS5leGl0Y29kZSA9PSAxNDoKLSAgICAgICAgICAgICAgICAgICAgaWYgYnVpbHRucG06Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ1JlLXJ1bm5pbmcgcmVjaXBldG9vbCBzdGlsbCBmYWlsZWQgdG8gZmluZCBucG0nKQotICAgICAgICAgICAgICAgICAgICAjIEZJWE1FIHRoaXMgaXMgYSBob3JyaWJsZSBoYWNrIHRoYXQgaXMgdW5mb3J0dW5hdGVseQotICAgICAgICAgICAgICAgICAgICAjIG5lY2Vzc2FyeSBkdWUgdG8gdGhlIGZhY3QgdGhhdCB3ZSBjYW4ndCBydW4gYml0YmFrZSBmcm9tCi0gICAgICAgICAgICAgICAgICAgICMgaW5zaWRlIHJlY2lwZXRvb2wgc2luY2UgcmVjaXBldG9vbCBrZWVwcyB0aW5mb2lsIGFjdGl2ZQotICAgICAgICAgICAgICAgICAgICAjIHdpdGggcmVmZXJlbmNlcyB0byBpdCB0aHJvdWdob3V0IHRoZSBjb2RlLCBzbyB3ZSBoYXZlCi0gICAgICAgICAgICAgICAgICAgICMgdG8gZXhpdCBvdXQgYW5kIGNvbWUgYmFjayBoZXJlIHRvIGRvIGl0LgotICAgICAgICAgICAgICAgICAgICBlbnN1cmVfbnBtKGNvbmZpZywgYmFzZXBhdGgsIGFyZ3MuZml4ZWRfc2V0dXAsIGNoZWNrX2V4aXN0cz1GYWxzZSkKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1JlLXJ1bm5pbmcgcmVjaXBlIGNyZWF0aW9uIHByb2Nlc3MgYWZ0ZXIgYnVpbGRpbmcgbm9kZWpzJykKLSAgICAgICAgICAgICAgICAgICAgYnVpbHRucG0gPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgZWxpZiBlLmV4aXRjb2RlID09IDE1OgotICAgICAgICAgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ0NvdWxkIG5vdCBhdXRvLWRldGVybWluZSByZWNpcGUgbmFtZSwgcGxlYXNlIHNwZWNpZnkgaXQgb24gdGhlIGNvbW1hbmQgbGluZScpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdDb21tYW5kIFwnJXNcJyBmYWlsZWQnICUgZS5jb21tYW5kKQotICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3Rkb3V0LCBfID0gZXhlY19idWlsZF9lbnZfY29tbWFuZChjb25maWcuaW5pdF9wYXRoLCBiYXNlcGF0aCwgJ3JlY2lwZXRvb2wgLS1jb2xvcj0lcyBjcmVhdGUgLS1kZXZ0b29sIC1vICVzIFwnJXNcJyAlcycgJSAoY29sb3IsIHRlbXBkaXIsIHNvdXJjZSwgZXh0cmFjbWRvcHRzKSwgd2F0Y2g9VHJ1ZSkKKyAgICAgICAgZXhjZXB0IGJiLnByb2Nlc3MuRXhlY3V0aW9uRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXhpdGNvZGUgPT0gMTU6CisgICAgICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdDb3VsZCBub3QgYXV0by1kZXRlcm1pbmUgcmVjaXBlIG5hbWUsIHBsZWFzZSBzcGVjaWZ5IGl0IG9uIHRoZSBjb21tYW5kIGxpbmUnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ0NvbW1hbmQgXCclc1wnIGZhaWxlZCcgJSBlLmNvbW1hbmQpCiAKICAgICAgICAgcmVjaXBlcyA9IGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4odGVtcGRpciwgJyouYmInKSkKICAgICAgICAgaWYgcmVjaXBlczoKQEAgLTI4Miw2ICsyNzgsMjQgQEAKICAgICAgICAgICAgICAgICBmLndyaXRlKCcgICAgZG9uZVxuJykKICAgICAgICAgICAgICAgICBmLndyaXRlKCd9XG4nKQogCisgICAgICAgICMgQ2hlY2sgaWYgdGhlIG5ldyBsYXllciBwcm92aWRlcyByZWNpcGVzIHdob3NlIHByaW9yaXRpZXMgaGF2ZSBiZWVuCisgICAgICAgICMgb3ZlcnJpZGVuIGJ5IFBSRUZFUlJFRF9QUk9WSURFUi4KKyAgICAgICAgcmVjaXBlX25hbWUgPSByZC5nZXRWYXIoJ1BOJykKKyAgICAgICAgcHJvdmlkZXMgPSByZC5nZXRWYXIoJ1BST1ZJREVTJykKKyAgICAgICAgIyBTZWFyY2ggZXZlcnkgaXRlbSBkZWZpbmVkIGluIFBST1ZJREVTCisgICAgICAgIGZvciByZWNpcGVfcHJvdmlkZWQgaW4gcHJvdmlkZXMuc3BsaXQoKToKKyAgICAgICAgICAgIHByZWZlcnJlZF9wcm92aWRlciA9ICdQUkVGRVJSRURfUFJPVklERVJfJyArIHJlY2lwZV9wcm92aWRlZAorICAgICAgICAgICAgY3VycmVudF9wcHJvdmlkZXIgPSByZC5nZXRWYXIocHJlZmVycmVkX3Byb3ZpZGVyKQorICAgICAgICAgICAgaWYgY3VycmVudF9wcHJvdmlkZXIgYW5kIGN1cnJlbnRfcHByb3ZpZGVyICE9IHJlY2lwZV9uYW1lOgorICAgICAgICAgICAgICAgIGlmIGFyZ3MuZml4ZWRfc2V0dXA6CisgICAgICAgICAgICAgICAgICAgICNpZiB3ZSBhcmUgaW5zaWRlIHRoZSBlU0RLIGFkZCB0aGUgbmV3IFBSRUZFUlJFRF9QUk9WSURFUiBpbiB0aGUgd29ya3NwYWNlIGxheWVyLmNvbmYKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXJjb25mX2ZpbGUgPSBvcy5wYXRoLmpvaW4oY29uZmlnLndvcmtzcGFjZV9wYXRoLCAiY29uZiIsICJsYXllci5jb25mIikKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyY29uZl9maWxlLCAnYScpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCclcyA9ICIlcyJcbicgJSAocHJlZmVycmVkX3Byb3ZpZGVyLCByZWNpcGVfbmFtZSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ1NldCBcJyVzXCcgaW4gb3JkZXIgdG8gdXNlIHRoZSByZWNpcGUnICUgcHJlZmVycmVkX3Byb3ZpZGVyKQorICAgICAgICAgICAgICAgIGJyZWFrCisKICAgICAgICAgX2FkZF9tZDUoY29uZmlnLCByZWNpcGVuYW1lLCBhcHBlbmRmaWxlKQogCiAgICAgICAgIGxvZ2dlci5pbmZvKCdSZWNpcGUgJXMgaGFzIGJlZW4gYXV0b21hdGljYWxseSBjcmVhdGVkOyBmdXJ0aGVyIGVkaXRpbmcgbWF5IGJlIHJlcXVpcmVkIHRvIG1ha2UgaXQgZnVsbHkgZnVuY3Rpb25hbCcgJSByZWNpcGVmaWxlKQpAQCAtMzgzLDcgKzM5Nyw3IEBACiAgICAgIiIiRW50cnkgcG9pbnQgZm9yIHRoZSBkZXZ0b29sICdleHRyYWN0JyBzdWJjb21tYW5kIiIiCiAgICAgaW1wb3J0IGJiCiAKLSAgICB0aW5mb2lsID0gX3ByZXBfZXh0cmFjdF9vcGVyYXRpb24oY29uZmlnLCBiYXNlcGF0aCwgYXJncy5yZWNpcGVuYW1lKQorICAgIHRpbmZvaWwgPSBzZXR1cF90aW5mb2lsKGJhc2VwYXRoPWJhc2VwYXRoKQogICAgIGlmIG5vdCB0aW5mb2lsOgogICAgICAgICAjIEVycm9yIGFscmVhZHkgc2hvd24KICAgICAgICAgcmV0dXJuIDEKQEAgLTM5Myw3ICs0MDcsNyBAQAogICAgICAgICAgICAgcmV0dXJuIDEKIAogICAgICAgICBzcmN0cmVlID0gb3MucGF0aC5hYnNwYXRoKGFyZ3Muc3JjdHJlZSkKLSAgICAgICAgaW5pdGlhbF9yZXYgPSBfZXh0cmFjdF9zb3VyY2Uoc3JjdHJlZSwgYXJncy5rZWVwX3RlbXAsIGFyZ3MuYnJhbmNoLCBGYWxzZSwgcmQsIHRpbmZvaWwpCisgICAgICAgIGluaXRpYWxfcmV2ID0gX2V4dHJhY3Rfc291cmNlKHNyY3RyZWUsIGFyZ3Mua2VlcF90ZW1wLCBhcmdzLmJyYW5jaCwgRmFsc2UsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSwgYXJncy5maXhlZF9zZXR1cCwgcmQsIHRpbmZvaWwpCiAgICAgICAgIGxvZ2dlci5pbmZvKCdTb3VyY2UgdHJlZSBleHRyYWN0ZWQgdG8gJXMnICUgc3JjdHJlZSkKIAogICAgICAgICBpZiBpbml0aWFsX3JldjoKQEAgLTQwNyw3ICs0MjEsNyBAQAogICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAnc3luYycgc3ViY29tbWFuZCIiIgogICAgIGltcG9ydCBiYgogCi0gICAgdGluZm9pbCA9IF9wcmVwX2V4dHJhY3Rfb3BlcmF0aW9uKGNvbmZpZywgYmFzZXBhdGgsIGFyZ3MucmVjaXBlbmFtZSkKKyAgICB0aW5mb2lsID0gc2V0dXBfdGluZm9pbChiYXNlcGF0aD1iYXNlcGF0aCkKICAgICBpZiBub3QgdGluZm9pbDoKICAgICAgICAgIyBFcnJvciBhbHJlYWR5IHNob3duCiAgICAgICAgIHJldHVybiAxCkBAIC00MTcsNyArNDMxLDcgQEAKICAgICAgICAgICAgIHJldHVybiAxCiAKICAgICAgICAgc3JjdHJlZSA9IG9zLnBhdGguYWJzcGF0aChhcmdzLnNyY3RyZWUpCi0gICAgICAgIGluaXRpYWxfcmV2ID0gX2V4dHJhY3Rfc291cmNlKHNyY3RyZWUsIGFyZ3Mua2VlcF90ZW1wLCBhcmdzLmJyYW5jaCwgVHJ1ZSwgcmQsIHRpbmZvaWwpCisgICAgICAgIGluaXRpYWxfcmV2ID0gX2V4dHJhY3Rfc291cmNlKHNyY3RyZWUsIGFyZ3Mua2VlcF90ZW1wLCBhcmdzLmJyYW5jaCwgVHJ1ZSwgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlLCBhcmdzLmZpeGVkX3NldHVwLCByZCwgdGluZm9pbCkKICAgICAgICAgbG9nZ2VyLmluZm8oJ1NvdXJjZSB0cmVlICVzIHN5bmNocm9uaXplZCcgJSBzcmN0cmVlKQogCiAgICAgICAgIGlmIGluaXRpYWxfcmV2OgpAQCAtNDI4LDMxICs0NDIsMTAgQEAKICAgICAgICAgdGluZm9pbC5zaHV0ZG93bigpCiAKIAotZGVmIF9wcmVwX2V4dHJhY3Rfb3BlcmF0aW9uKGNvbmZpZywgYmFzZXBhdGgsIHJlY2lwZW5hbWUsIHRpbmZvaWw9Tm9uZSk6Ci0gICAgIiIiSEFDSzogVWdseSB3b3JrYXJvdW5kIGZvciBtYWtpbmcgc3VyZSB0aGF0IHJlcXVpcmVtZW50cyBhcmUgbWV0IHdoZW4KLSAgICAgICB0cnlpbmcgdG8gZXh0cmFjdCBhIHBhY2thZ2UuIFJldHVybnMgdGhlIHRpbmZvaWwgaW5zdGFuY2UgdG8gYmUgdXNlZC4iIiIKLSAgICBpZiBub3QgdGluZm9pbDoKLSAgICAgICAgdGluZm9pbCA9IHNldHVwX3RpbmZvaWwoYmFzZXBhdGg9YmFzZXBhdGgpCi0KLSAgICByZCA9IHBhcnNlX3JlY2lwZShjb25maWcsIHRpbmZvaWwsIHJlY2lwZW5hbWUsIFRydWUpCi0gICAgaWYgbm90IHJkOgotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygna2VybmVsLXlvY3RvJywgcmQpOgotICAgICAgICB0aW5mb2lsLnNodXRkb3duKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3Rkb3V0LCBfID0gZXhlY19idWlsZF9lbnZfY29tbWFuZChjb25maWcuaW5pdF9wYXRoLCBiYXNlcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JpdGJha2Uga2Vybi10b29scy1uYXRpdmUnKQotICAgICAgICAgICAgdGluZm9pbCA9IHNldHVwX3RpbmZvaWwoYmFzZXBhdGg9YmFzZXBhdGgpCi0gICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGVycjoKLSAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiRmFpbGVkIHRvIGJ1aWxkIGtlcm4tdG9vbHMtbmF0aXZlOlxuJXMiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIuc3Rkb3V0KQotICAgIHJldHVybiB0aW5mb2lsCi0KLQotZGVmIF9leHRyYWN0X3NvdXJjZShzcmN0cmVlLCBrZWVwX3RlbXAsIGRldmJyYW5jaCwgc3luYywgZCwgdGluZm9pbCk6CitkZWYgX2V4dHJhY3Rfc291cmNlKHNyY3RyZWUsIGtlZXBfdGVtcCwgZGV2YnJhbmNoLCBzeW5jLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UsIGZpeGVkX3NldHVwLCBkLCB0aW5mb2lsKToKICAgICAiIiJFeHRyYWN0IHNvdXJjZXMgb2YgYSByZWNpcGUiIiIKICAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKKyAgICBpbXBvcnQgb2UucGF0Y2gKIAogICAgIHBuID0gZC5nZXRWYXIoJ1BOJykKIApAQCAtNDgwLDYgKzQ3MywxMiBAQAogICAgICAgICBvcy5ybWRpcihzcmN0cmVlKQogCiAgICAgaW5pdGlhbF9yZXYgPSBOb25lCisKKyAgICBhcHBlbmRleGlzdGVkID0gRmFsc2UKKyAgICByZWNpcGVmaWxlID0gZC5nZXRWYXIoJ0ZJTEUnKQorICAgIGFwcGVuZGZpbGUgPSByZWNpcGVfdG9fYXBwZW5kKHJlY2lwZWZpbGUsIGNvbmZpZykKKyAgICBpc19rZXJuZWxfeW9jdG8gPSBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwteW9jdG8nLCBkKQorCiAgICAgIyBXZSBuZWVkIHRvIHJlZGlyZWN0IFdPUktESVIsIFNUQU1QU19ESVIgZXRjLiB1bmRlciBhIHRlbXBvcmFyeQogICAgICMgZGlyZWN0b3J5IHNvIHRoYXQ6CiAgICAgIyAoYSkgd2UgcGljayB1cCBhbGwgZmlsZXMgdGhhdCBnZXQgdW5wYWNrZWQgdG8gdGhlIFdPUktESVIsIGFuZApAQCAtNDk4LDEzNyArNDk3LDU2IEBACiAgICAgdHJ5OgogICAgICAgICB0aW5mb2lsLmxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLldBUk5JTkcpCiAKLSAgICAgICAgY3JkID0gZC5jcmVhdGVDb3B5KCkKLSAgICAgICAgIyBNYWtlIGEgc3ViZGlyIHNvIHdlIGd1YXJkIGFnYWluc3QgV09SS0RJUj09UwotICAgICAgICB3b3JrZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICd3b3JrZGlyJykKLSAgICAgICAgY3JkLnNldFZhcignV09SS0RJUicsIHdvcmtkaXIpCi0gICAgICAgIGlmIG5vdCBjcmQuZ2V0VmFyKCdTJykuc3RhcnRzd2l0aCh3b3JrZGlyKToKLSAgICAgICAgICAgICMgVXN1YWxseSBhIHNoYXJlZCB3b3JrZGlyIHJlY2lwZSAoa2VybmVsLCBnY2MpCi0gICAgICAgICAgICAjIFRyeSB0byBzZXQgYSByZWFzb25hYmxlIGRlZmF1bHQKLSAgICAgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2tlcm5lbCcsIGQpOgotICAgICAgICAgICAgICAgIGNyZC5zZXRWYXIoJ1MnLCAnJHtXT1JLRElSfS9zb3VyY2UnKQorICAgICAgICAjIEZJWE1FIHRoaXMgcmVzdWx0cyBpbiBhIGNhY2hlIHJlbG9hZCB1bmRlciBjb250cm9sIG9mIHRpbmZvaWwsIHdoaWNoIGlzIGZpbmUKKyAgICAgICAgIyBleGNlcHQgd2UgZG9uJ3QgZ2V0IHRoZSBrbm90dHkgcHJvZ3Jlc3MgYmFyCisKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoYXBwZW5kZmlsZSk6CisgICAgICAgICAgICBhcHBlbmRiYWNrdXAgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgb3MucGF0aC5iYXNlbmFtZShhcHBlbmRmaWxlKSArICcuYmFrJykKKyAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShhcHBlbmRmaWxlLCBhcHBlbmRiYWNrdXApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcHBlbmRiYWNrdXAgPSBOb25lCisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGFwcGVuZGZpbGUpKQorICAgICAgICBsb2dnZXIuZGVidWcoJ3dyaXRpbmcgYXBwZW5kIGZpbGUgJXMnICUgYXBwZW5kZmlsZSkKKyAgICAgICAgd2l0aCBvcGVuKGFwcGVuZGZpbGUsICdhJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJyMjIy0tLSBfZXh0cmFjdF9zb3VyY2VcbicpCisgICAgICAgICAgICBmLndyaXRlKCdERVZUT09MX1RFTVBESVIgPSAiJXMiXG4nICUgdGVtcGRpcikKKyAgICAgICAgICAgIGYud3JpdGUoJ0RFVlRPT0xfREVWQlJBTkNIID0gIiVzIlxuJyAlIGRldmJyYW5jaCkKKyAgICAgICAgICAgIGlmIG5vdCBpc19rZXJuZWxfeW9jdG86CisgICAgICAgICAgICAgICAgZi53cml0ZSgnUEFUQ0hUT09MID0gImdpdCJcbicpCisgICAgICAgICAgICAgICAgZi53cml0ZSgnUEFUQ0hfQ09NTUlUX0ZVTkNUSU9OUyA9ICIxIlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ2luaGVyaXQgZGV2dG9vbC1zb3VyY2VcbicpCisgICAgICAgICAgICBmLndyaXRlKCcjIyMtLS0gX2V4dHJhY3Rfc291cmNlXG4nKQorCisgICAgICAgIHVwZGF0ZV91bmxvY2tlZHNpZ3MoYmFzZXBhdGgsIHdvcmtzcGFjZSwgZml4ZWRfc2V0dXAsIFtwbl0pCisKKyAgICAgICAgc3N0YXRlX21hbmlmZXN0cyA9IGQuZ2V0VmFyKCdTU1RBVEVfTUFOSUZFU1RTJykKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNzdGF0ZV9tYW5pZmVzdHMpCisgICAgICAgIHByZXNlcnZlc3RhbXBmaWxlID0gb3MucGF0aC5qb2luKHNzdGF0ZV9tYW5pZmVzdHMsICdwcmVzZXJ2ZS1zdGFtcHMnKQorICAgICAgICB3aXRoIG9wZW4ocHJlc2VydmVzdGFtcGZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoZC5nZXRWYXIoJ1NUQU1QJykpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2tlcm5lbC15b2N0bycsIGQpOgorICAgICAgICAgICAgICAgICMgV2UgbmVlZCB0byBnZW5lcmF0ZSB0aGUga2VybmVsIGNvbmZpZworICAgICAgICAgICAgICAgIHRhc2sgPSAnZG9fY29uZmlndXJlJwogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjcmQuc2V0VmFyKCdTJywgJyR7V09SS0RJUn0vJXMnICUgb3MucGF0aC5iYXNlbmFtZShkLmdldFZhcignUycpKSkKLSAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygna2VybmVsJywgZCk6Ci0gICAgICAgICAgICAjIFdlIGRvbid0IHdhbnQgdG8gbW92ZSB0aGUgc291cmNlIHRvIFNUQUdJTkdfS0VSTkVMX0RJUiBoZXJlCi0gICAgICAgICAgICBjcmQuc2V0VmFyKCdTVEFHSU5HX0tFUk5FTF9ESVInLCAnJHtTfScpCisgICAgICAgICAgICAgICAgdGFzayA9ICdkb19wYXRjaCcKIAotICAgICAgICBpc19rZXJuZWxfeW9jdG8gPSBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwteW9jdG8nLCBkKQotICAgICAgICBpZiBub3QgaXNfa2VybmVsX3lvY3RvOgotICAgICAgICAgICAgY3JkLnNldFZhcignUEFUQ0hUT09MJywgJ2dpdCcpCi0gICAgICAgICAgICBjcmQuc2V0VmFyKCdQQVRDSF9DT01NSVRfRlVOQ1RJT05TJywgJzEnKQorICAgICAgICAgICAgIyBSdW4gdGhlIGZldGNoICsgdW5wYWNrIHRhc2tzCisgICAgICAgICAgICByZXMgPSB0aW5mb2lsLmJ1aWxkX3RhcmdldHMocG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfZXZlbnRzPVRydWUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwcmVzZXJ2ZXN0YW1wZmlsZSk6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHByZXNlcnZlc3RhbXBmaWxlKQogCi0gICAgICAgICMgQXBwbHkgb3VyIGNoYW5nZXMgdG8gdGhlIGRhdGFzdG9yZSB0byB0aGUgc2VydmVyJ3MgZGF0YXN0b3JlCi0gICAgICAgIGZvciBrZXkgaW4gY3JkLmxvY2Fsa2V5cygpOgotICAgICAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YS5zZXRWYXIoJyVzX3BuLSVzJyAlIChrZXksIHBuKSwgY3JkLmdldFZhcihrZXksIEZhbHNlKSkKKyAgICAgICAgaWYgbm90IHJlczoKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignRXh0cmFjdGluZyBzb3VyY2UgZm9yICVzIGZhaWxlZCcgJSBwbikKIAotICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhLnNldFZhcignU1RBTVBTX0RJUicsIG9zLnBhdGguam9pbih0ZW1wZGlyLCAnc3RhbXBzJykpCi0gICAgICAgIHRpbmZvaWwuY29uZmlnX2RhdGEuc2V0VmFyKCdUJywgb3MucGF0aC5qb2luKHRlbXBkaXIsICd0ZW1wJykpCi0gICAgICAgIHRpbmZvaWwuY29uZmlnX2RhdGEuc2V0VmFyKCdCVUlMRENGR19GVU5DUycsICcnKQotICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhLnNldFZhcignQlVJTERDRkdfSEVBREVSJywgJycpCi0gICAgICAgIHRpbmZvaWwuY29uZmlnX2RhdGEuc2V0VmFyKCdCQl9IQVNIX0lHTk9SRV9NSVNNQVRDSCcsICcxJykKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnaW5pdGlhbF9yZXYnKSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgaW5pdGlhbF9yZXYgPSBmLnJlYWQoKQogCi0gICAgICAgIHRpbmZvaWwuc2V0X2V2ZW50X21hc2soWydiYi5ldmVudC5CdWlsZFN0YXJ0ZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9nZ2luZy5Mb2dSZWNvcmQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmIuY29tbWFuZC5Db21tYW5kQ29tcGxldGVkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JiLmNvbW1hbmQuQ29tbWFuZEZhaWxlZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYi5idWlsZC5UYXNrU3RhcnRlZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYi5idWlsZC5UYXNrU3VjY2VlZGVkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JiLmJ1aWxkLlRhc2tGYWlsZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmIuYnVpbGQuVGFza0ZhaWxlZFNpbGVudCddKQotCi0gICAgICAgIGRlZiBydW50YXNrKHRhcmdldCwgdGFzayk6Ci0gICAgICAgICAgICBpZiB0aW5mb2lsLmJ1aWxkX2ZpbGUodGFyZ2V0LCB0YXNrKToKLSAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICBldmVudCA9IHRpbmZvaWwud2FpdF9ldmVudCgwLjI1KQotICAgICAgICAgICAgICAgICAgICBpZiBldmVudDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZENvbXBsZXRlZCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuY29tbWFuZC5Db21tYW5kRmFpbGVkKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ1Rhc2sgZG9fJXMgZmFpbGVkOiAlcycgJSAodGFzaywgZXZlbnQuZXJyb3IpKQotICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrRmFpbGVkKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ1Rhc2sgZG9fJXMgZmFpbGVkJyAlIHRhc2spCi0gICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tTdGFydGVkKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnRXhlY3V0aW5nICVzLi4uJyAlIGV2ZW50Ll90YXNrKQotICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBsb2dnaW5nLkxvZ1JlY29yZCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXZlbnQubGV2ZWxubyA8PSBsb2dnaW5nLklORk86Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmhhbmRsZShldmVudCkKLQotICAgICAgICAjIHdlIG5lZWQgdmlydHVhbDpuYXRpdmU6L3BhdGgvdG8vcmVjaXBlIGlmIGl0J3MgYSBCQkNMQVNTRVhURU5ECi0gICAgICAgIGZuID0gdGluZm9pbC5nZXRfcmVjaXBlX2ZpbGUocG4pCi0gICAgICAgIHJ1bnRhc2soZm4sICd1bnBhY2snKQotCi0gICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2tlcm5lbC15b2N0bycsIGQpOgotICAgICAgICAgICAgIyBFeHRyYSBzdGVwIGZvciBrZXJuZWwgdG8gcG9wdWxhdGUgdGhlIHNvdXJjZSBkaXJlY3RvcnkKLSAgICAgICAgICAgIHJ1bnRhc2soZm4sICdrZXJuZWxfY2hlY2tvdXQnKQotCi0gICAgICAgIHNyY3N1YmRpciA9IGNyZC5nZXRWYXIoJ1MnKQotCi0gICAgICAgICMgTW92ZSBsb2NhbCBzb3VyY2UgZmlsZXMgaW50byBzZXBhcmF0ZSBzdWJkaXIKLSAgICAgICAgcmVjaXBlX3BhdGNoZXMgPSBbb3MucGF0aC5iYXNlbmFtZShwYXRjaCkgZm9yIHBhdGNoIGluCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9lLnJlY2lwZXV0aWxzLmdldF9yZWNpcGVfcGF0Y2hlcyhjcmQpXQotICAgICAgICBsb2NhbF9maWxlcyA9IG9lLnJlY2lwZXV0aWxzLmdldF9yZWNpcGVfbG9jYWxfZmlsZXMoY3JkKQotCi0gICAgICAgICMgSWdub3JlIGxvY2FsIGZpbGVzIHdpdGggc3ViZGlyPXtCUH0KLSAgICAgICAgc3JjYWJzcGF0aCA9IG9zLnBhdGguYWJzcGF0aChzcmNzdWJkaXIpCi0gICAgICAgIGxvY2FsX2ZpbGVzID0gW2ZuYW1lIGZvciBmbmFtZSBpbiBsb2NhbF9maWxlcyBpZgotICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya2RpciwgZm5hbWUpKSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgKHNyY2Fic3BhdGggPT0gd29ya2RpciBvciBub3QKLSAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHdvcmtkaXIsIGZuYW1lKS5zdGFydHN3aXRoKHNyY2Fic3BhdGggKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Muc2VwKSldCi0gICAgICAgIGlmIGxvY2FsX2ZpbGVzOgotICAgICAgICAgICAgZm9yIGZuYW1lIGluIGxvY2FsX2ZpbGVzOgotICAgICAgICAgICAgICAgIF9tb3ZlX2ZpbGUob3MucGF0aC5qb2luKHdvcmtkaXIsIGZuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbih0ZW1wZGlyLCAnb2UtbG9jYWwtZmlsZXMnLCBmbmFtZSkpCi0gICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHRlbXBkaXIsICdvZS1sb2NhbC1maWxlcycsICcuZ2l0aWdub3JlJyksCi0gICAgICAgICAgICAgICAgICAgICAgJ3cnKSBhcyBmOgotICAgICAgICAgICAgICAgIGYud3JpdGUoJyMgSWdub3JlIGxvY2FsIGZpbGVzLCBieSBkZWZhdWx0LiBSZW1vdmUgdGhpcyBmaWxlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICdpZiB5b3Ugd2FudCB0byBjb21taXQgdGhlIGRpcmVjdG9yeSB0byBHaXRcbipcbicpCi0KLSAgICAgICAgaWYgc3Jjc3ViZGlyID09IHdvcmtkaXI6Ci0gICAgICAgICAgICAjIEZpbmQgbm9uLXBhdGNoIG5vbi1sb2NhbCBzb3VyY2VzIHRoYXQgd2VyZSAidW5wYWNrZWQiIHRvIHNyY3RyZWUKLSAgICAgICAgICAgICMgZGlyZWN0b3J5Ci0gICAgICAgICAgICBzcmNfZmlsZXMgPSBbZm5hbWUgZm9yIGZuYW1lIGluIF9sc190cmVlKHdvcmtkaXIpIGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShmbmFtZSkgbm90IGluIHJlY2lwZV9wYXRjaGVzXQotICAgICAgICAgICAgIyBGb3JjZSBzZXBhcmF0ZSBTIHNvIHRoYXQgcGF0Y2ggZmlsZXMgY2FuIGJlIGxlZnQgb3V0IGZyb20gc3JjdHJlZQotICAgICAgICAgICAgc3Jjc3ViZGlyID0gdGVtcGZpbGUubWtkdGVtcChkaXI9d29ya2RpcikKLSAgICAgICAgICAgIHRpbmZvaWwuY29uZmlnX2RhdGEuc2V0VmFyKCdTX3Rhc2stcGF0Y2gnLCBzcmNzdWJkaXIpCi0gICAgICAgICAgICAjIE1vdmUgc291cmNlIGZpbGVzIHRvIFMKLSAgICAgICAgICAgIGZvciBwYXRoIGluIHNyY19maWxlczoKLSAgICAgICAgICAgICAgICBfbW92ZV9maWxlKG9zLnBhdGguam9pbih3b3JrZGlyLCBwYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzcmNzdWJkaXIsIHBhdGgpKQotICAgICAgICBlbGlmIG9zLnBhdGguZGlybmFtZShzcmNzdWJkaXIpICE9IHdvcmtkaXI6Ci0gICAgICAgICAgICAjIEhhbmRsZSBpZiBTIGlzIHNldCB0byBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgc291cmNlCi0gICAgICAgICAgICBzcmNzdWJkaXIgPSBvcy5wYXRoLmpvaW4od29ya2Rpciwgb3MucGF0aC5yZWxwYXRoKHNyY3N1YmRpciwgd29ya2Rpcikuc3BsaXQob3Muc2VwKVswXSkKLQotICAgICAgICBzY3JpcHR1dGlscy5naXRfY29udmVydF9zdGFuZGFsb25lX2Nsb25lKHNyY3N1YmRpcikKLQotICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHNyY3N1YmRpciBleGlzdHMKLSAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNyY3N1YmRpcikKLSAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNyY3N1YmRpcikgb3Igbm90IG9zLmxpc3RkaXIoc3Jjc3ViZGlyKToKLSAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJubyBzb3VyY2UgdW5wYWNrZWQgdG8gUywgZWl0aGVyIHRoZSAlcyByZWNpcGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgImRvZXNuJ3QgdXNlIGFueSBzb3VyY2Ugb3IgdGhlIGNvcnJlY3Qgc291cmNlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXJlY3RvcnkgY291bGQgbm90IGJlIGRldGVybWluZWQiICUgcG4pCi0KLSAgICAgICAgc2V0dXBfZ2l0X3JlcG8oc3Jjc3ViZGlyLCBjcmQuZ2V0VmFyKCdQVicpLCBkZXZicmFuY2gsIGQ9ZCkKLQotICAgICAgICAoc3Rkb3V0LCBfKSA9IGJiLnByb2Nlc3MucnVuKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCBjd2Q9c3Jjc3ViZGlyKQotICAgICAgICBpbml0aWFsX3JldiA9IHN0ZG91dC5yc3RyaXAoKQotCi0gICAgICAgIGxvZ2dlci5pbmZvKCdQYXRjaGluZy4uLicpCi0gICAgICAgIHJ1bnRhc2soZm4sICdwYXRjaCcpCi0KLSAgICAgICAgYmIucHJvY2Vzcy5ydW4oJ2dpdCB0YWcgLWYgZGV2dG9vbC1wYXRjaGVkJywgY3dkPXNyY3N1YmRpcikKLQotICAgICAgICBrY29uZmlnID0gTm9uZQotICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwteW9jdG8nLCBkKToKLSAgICAgICAgICAgICMgU3RvcmUgZ2VuZXJhdGUgYW5kIHN0b3JlIGtlcm5lbCBjb25maWcKLSAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdHZW5lcmF0aW5nIGtlcm5lbCBjb25maWcnKQotICAgICAgICAgICAgcnVudGFzayhmbiwgJ2NvbmZpZ3VyZScpCi0gICAgICAgICAgICBrY29uZmlnID0gb3MucGF0aC5qb2luKGNyZC5nZXRWYXIoJ0InKSwgJy5jb25maWcnKQotCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4odGVtcGRpciwgJ3NyY3N1YmRpcicpLCAncicpIGFzIGY6CisgICAgICAgICAgICBzcmNzdWJkaXIgPSBmLnJlYWQoKQogCiAgICAgICAgIHRlbXBkaXJfbG9jYWxkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ29lLWxvY2FsLWZpbGVzJykKICAgICAgICAgc3JjdHJlZV9sb2NhbGRpciA9IG9zLnBhdGguam9pbihzcmN0cmVlLCAnb2UtbG9jYWwtZmlsZXMnKQpAQCAtNjgyLDExICs2MDAsMTUgQEAKICAgICAgICAgICAgICAgICBvZS5wYXRjaC5HaXRBcHBseVRyZWUuZ2l0Q29tbWFuZFVzZXJPcHRpb25zKHVzZXJvcHRpb25zLCBkPWQpCiAgICAgICAgICAgICAgICAgYmIucHJvY2Vzcy5ydW4oJ2dpdCAlcyBjb21taXQgLWEgLW0gIkNvbW1pdHRpbmcgbG9jYWwgZmlsZSBzeW1saW5rc1xuXG4lcyInICUgKCcgJy5qb2luKHVzZXJvcHRpb25zKSwgb2UucGF0Y2guR2l0QXBwbHlUcmVlLmlnbm9yZV9jb21taXRfcHJlZml4KSwgY3dkPXNyY3RyZWUpCiAKLSAgICAgICAgaWYga2NvbmZpZzoKKyAgICAgICAgaWYgaXNfa2VybmVsX3lvY3RvOgogICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0NvcHlpbmcga2VybmVsIGNvbmZpZyB0byBzcmN0cmVlJykKLSAgICAgICAgICAgIHNodXRpbC5jb3B5MihrY29uZmlnLCBzcmN0cmVlKQorICAgICAgICAgICAgc2h1dGlsLmNvcHkyKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnLmNvbmZpZycpLCBzcmN0cmVlKQogCiAgICAgZmluYWxseToKKyAgICAgICAgaWYgYXBwZW5kYmFja3VwOgorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKGFwcGVuZGJhY2t1cCwgYXBwZW5kZmlsZSkKKyAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhhcHBlbmRmaWxlKToKKyAgICAgICAgICAgIG9zLnJlbW92ZShhcHBlbmRmaWxlKQogICAgICAgICBpZiBrZWVwX3RlbXA6CiAgICAgICAgICAgICBsb2dnZXIuaW5mbygnUHJlc2VydmluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzJyAlIHRlbXBkaXIpCiAgICAgICAgIGVsc2U6CkBAIC02OTksOCArNjIxLDExIEBACiAKICAgICBkZWYgYWRkZmlsZShmbik6CiAgICAgICAgIG1kNSA9IGJiLnV0aWxzLm1kNV9maWxlKGZuKQotICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJy5kZXZ0b29sX21kNScpLCAnYScpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKCclc3wlc3wlc1xuJyAlIChyZWNpcGVuYW1lLCBvcy5wYXRoLnJlbHBhdGgoZm4sIGNvbmZpZy53b3Jrc3BhY2VfcGF0aCksIG1kNSkpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oY29uZmlnLndvcmtzcGFjZV9wYXRoLCAnLmRldnRvb2xfbWQ1JyksICdhKycpIGFzIGY6CisgICAgICAgICAgICBtZDVfc3RyID0gJyVzfCVzfCVzXG4nICUgKHJlY2lwZW5hbWUsIG9zLnBhdGgucmVscGF0aChmbiwgY29uZmlnLndvcmtzcGFjZV9wYXRoKSwgbWQ1KQorICAgICAgICAgICAgZi5zZWVrKDAsIG9zLlNFRUtfU0VUKQorICAgICAgICAgICAgaWYgbm90IG1kNV9zdHIgaW4gZi5yZWFkKCk6CisgICAgICAgICAgICAgICAgZi53cml0ZShtZDVfc3RyKQogCiAgICAgaWYgb3MucGF0aC5pc2RpcihmaWxlbmFtZSk6CiAgICAgICAgIGZvciByb290LCBfLCBmaWxlcyBpbiBvcy53YWxrKGZpbGVuYW1lKToKQEAgLTc3MiwxMyArNjk3LDYgQEAKICAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiLS1uby1leHRyYWN0IHNwZWNpZmllZCBhbmQgc291cmNlIHBhdGggJXMgZG9lcyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBleGlzdCBvciBpcyBub3QgYSBkaXJlY3RvcnkiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmN0cmVlKQotICAgICAgICBpZiBub3QgYXJncy5ub19leHRyYWN0OgotICAgICAgICAgICAgdGluZm9pbCA9IF9wcmVwX2V4dHJhY3Rfb3BlcmF0aW9uKGNvbmZpZywgYmFzZXBhdGgsIHBuLCB0aW5mb2lsKQotICAgICAgICAgICAgaWYgbm90IHRpbmZvaWw6Ci0gICAgICAgICAgICAgICAgIyBFcnJvciBhbHJlYWR5IHNob3duCi0gICAgICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgICAgICMgV2UgbmVlZCB0byByZS1wYXJzZSBiZWNhdXNlIHRpbmZvaWwgbWF5IGhhdmUgYmVlbiByZS1pbml0aWFsaXNlZAotICAgICAgICAgICAgcmQgPSBwYXJzZV9yZWNpcGUoY29uZmlnLCB0aW5mb2lsLCBhcmdzLnJlY2lwZW5hbWUsIFRydWUpCiAKICAgICAgICAgcmVjaXBlZmlsZSA9IHJkLmdldFZhcignRklMRScpCiAgICAgICAgIGFwcGVuZGZpbGUgPSByZWNpcGVfdG9fYXBwZW5kKHJlY2lwZWZpbGUsIGNvbmZpZywgYXJncy53aWxkY2FyZCkKQEAgLTc5Myw3ICs3MTEsNyBAQAogICAgICAgICBpbml0aWFsX3JldiA9IE5vbmUKICAgICAgICAgY29tbWl0cyA9IFtdCiAgICAgICAgIGlmIG5vdCBhcmdzLm5vX2V4dHJhY3Q6Ci0gICAgICAgICAgICBpbml0aWFsX3JldiA9IF9leHRyYWN0X3NvdXJjZShzcmN0cmVlLCBhcmdzLmtlZXBfdGVtcCwgYXJncy5icmFuY2gsIEZhbHNlLCByZCwgdGluZm9pbCkKKyAgICAgICAgICAgIGluaXRpYWxfcmV2ID0gX2V4dHJhY3Rfc291cmNlKHNyY3RyZWUsIGFyZ3Mua2VlcF90ZW1wLCBhcmdzLmJyYW5jaCwgRmFsc2UsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSwgYXJncy5maXhlZF9zZXR1cCwgcmQsIHRpbmZvaWwpCiAgICAgICAgICAgICBpZiBub3QgaW5pdGlhbF9yZXY6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDEKICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdTb3VyY2UgdHJlZSBleHRyYWN0ZWQgdG8gJXMnICUgc3JjdHJlZSkKQEAgLTg0Miw3ICs3NjAsMTAgQEAKIAogICAgICAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygna2VybmVsJywgcmQpOgogICAgICAgICAgICAgICAgIGYud3JpdGUoJ1NSQ1RSRUVDT1ZFUkVEVEFTS1MgPSAiZG9fdmFsaWRhdGVfYnJhbmNoZXMgZG9fa2VybmVsX2NoZWNrb3V0ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICdkb19mZXRjaCBkb191bnBhY2sgZG9fcGF0Y2ggZG9fa2VybmVsX2NvbmZpZ21lIGRvX2tlcm5lbF9jb25maWdjaGVjayJcbicpCisgICAgICAgICAgICAgICAgICAgICAgICAnZG9fZmV0Y2ggZG9fdW5wYWNrIGRvX2tlcm5lbF9jb25maWdtZSBkb19rZXJuZWxfY29uZmlnY2hlY2siXG4nKQorICAgICAgICAgICAgICAgIGYud3JpdGUoJ1xuZG9fcGF0Y2goKSB7XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAnICAgIDpcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nKQogICAgICAgICAgICAgICAgIGYud3JpdGUoJ1xuZG9fY29uZmlndXJlX2FwcGVuZCgpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgY3AgJHtCfS8uY29uZmlnICR7U30vLmNvbmZpZy5iYXNlbGluZVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBsbiAtc2ZUICR7Qn0vLmNvbmZpZyAke1N9Ly5jb25maWcubmV3XG4nCkBAIC04NTIsNiArNzczLDggQEAKICAgICAgICAgICAgICAgICBmb3IgY29tbWl0IGluIGNvbW1pdHM6CiAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJyMgY29tbWl0OiAlc1xuJyAlIGNvbW1pdCkKIAorICAgICAgICB1cGRhdGVfdW5sb2NrZWRzaWdzKGJhc2VwYXRoLCB3b3Jrc3BhY2UsIGFyZ3MuZml4ZWRfc2V0dXAsIFtwbl0pCisKICAgICAgICAgX2FkZF9tZDUoY29uZmlnLCBwbiwgYXBwZW5kZmlsZSkKIAogICAgICAgICBsb2dnZXIuaW5mbygnUmVjaXBlICVzIG5vdyBzZXQgdXAgdG8gYnVpbGQgZnJvbSAlcycgJSAocG4sIHNyY3RyZWUpKQpAQCAtMTM3NSwxMiArMTI5OCwxMyBAQAogICAgICAgICBpZiBub3Qgbm9fcmVtb3ZlOgogICAgICAgICAgICAgIyBGaW5kIGxpc3Qgb2YgZXhpc3RpbmcgcGF0Y2hlcyBpbiByZWNpcGUgZmlsZQogICAgICAgICAgICAgcGF0Y2hlc19kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKGRpcj10ZW1wZGlyKQotICAgICAgICAgICAgb2xkX3NyY3JldiA9IChyZC5nZXRWYXIoJ1NSQ1JFVicsIEZhbHNlKSBvciAnJykKKyAgICAgICAgICAgIG9sZF9zcmNyZXYgPSByZC5nZXRWYXIoJ1NSQ1JFVicpIG9yICcnCiAgICAgICAgICAgICB1cGRfcCwgbmV3X3AsIGRlbF9wID0gX2V4cG9ydF9wYXRjaGVzKHNyY3RyZWUsIHJkLCBvbGRfc3JjcmV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaGVzX2RpcikKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnUGF0Y2hlczogdXBkYXRlICVzLCBuZXcgJXMsIGRlbGV0ZSAlcycgJSAoZGljdCh1cGRfcCksIGRpY3QobmV3X3ApLCBkaWN0KGRlbF9wKSkpCiAKICAgICAgICAgICAgICMgUmVtb3ZlIGRlbGV0ZWQgbG9jYWwgZmlsZXMgYW5kICJvdmVybGFwcGluZyIgcGF0Y2hlcwotICAgICAgICAgICAgcmVtb3ZlX2ZpbGVzID0gbGlzdChkZWxfZi52YWx1ZXMoKSkgKyBsaXN0KHVwZF9wLnZhbHVlcygpKQorICAgICAgICAgICAgcmVtb3ZlX2ZpbGVzID0gbGlzdChkZWxfZi52YWx1ZXMoKSkgKyBsaXN0KHVwZF9wLnZhbHVlcygpKSArIGxpc3QoZGVsX3AudmFsdWVzKCkpCiAgICAgICAgICAgICBpZiByZW1vdmVfZmlsZXM6CiAgICAgICAgICAgICAgICAgcmVtb3ZlZGVudHJpZXMgPSBfcmVtb3ZlX2ZpbGVfZW50cmllcyhzcmN1cmksIHJlbW92ZV9maWxlcylbMF0KICAgICAgICAgICAgICAgICB1cGRhdGVfc3JjdXJpID0gVHJ1ZQpAQCAtMTYxMiw3ICsxNTM2LDcgQEAKIGRlZiBzdGF0dXMoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKICAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ3N0YXR1cycgc3ViY29tbWFuZCIiIgogICAgIGlmIHdvcmtzcGFjZToKLSAgICAgICAgZm9yIHJlY2lwZSwgdmFsdWUgaW4gd29ya3NwYWNlLml0ZW1zKCk6CisgICAgICAgIGZvciByZWNpcGUsIHZhbHVlIGluIHNvcnRlZCh3b3Jrc3BhY2UuaXRlbXMoKSk6CiAgICAgICAgICAgICByZWNpcGVmaWxlID0gdmFsdWVbJ3JlY2lwZWZpbGUnXQogICAgICAgICAgICAgaWYgcmVjaXBlZmlsZToKICAgICAgICAgICAgICAgICByZWNpcGVzdHIgPSAnICglcyknICUgcmVjaXBlZmlsZQpAQCAtMTYyNyw2ICsxNTUxLDI2IEBACiBkZWYgX3Jlc2V0KHJlY2lwZXMsIG5vX2NsZWFuLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgogICAgICIiIlJlc2V0IG9uZSBvciBtb3JlIHJlY2lwZXMiIiIKIAorICAgIGRlZiBjbGVhbl9wcmVmZXJyZWRfcHJvdmlkZXIocG4sIGxheWVyY29uZl9wYXRoKToKKyAgICAgICAgIiIiUmVtb3ZlIFBSRUZFUlJFRF9QUk9WSURFUiBmcm9tIGxheWVyLmNvbmYnIiIiCisgICAgICAgIGltcG9ydCByZQorICAgICAgICBsYXllcmNvbmZfZmlsZSA9IG9zLnBhdGguam9pbihsYXllcmNvbmZfcGF0aCwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpCisgICAgICAgIG5ld19sYXllcmNvbmZfZmlsZSA9IG9zLnBhdGguam9pbihsYXllcmNvbmZfcGF0aCwgJ2NvbmYnLCAnLmxheWVyLmNvbmYnKQorICAgICAgICBwcHJvdmlkZXJfZm91bmQgPSBGYWxzZQorICAgICAgICB3aXRoIG9wZW4obGF5ZXJjb25mX2ZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgd2l0aCBvcGVuKG5ld19sYXllcmNvbmZfZmlsZSwgJ2EnKSBhcyBuZjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgcHByb3ZpZGVyX2V4cCA9IHInXlBSRUZFUlJFRF9QUk9WSURFUl8uKj8gPSAiJyArIHBuICsgciciJCcKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJlLm1hdGNoKHBwcm92aWRlcl9leHAsIGxpbmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgbmYud3JpdGUobGluZSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBwcm92aWRlcl9mb3VuZCA9IFRydWUKKyAgICAgICAgaWYgcHByb3ZpZGVyX2ZvdW5kOgorICAgICAgICAgICAgc2h1dGlsLm1vdmUobmV3X2xheWVyY29uZl9maWxlLCBsYXllcmNvbmZfZmlsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLnJlbW92ZShuZXdfbGF5ZXJjb25mX2ZpbGUpCisKICAgICBpZiByZWNpcGVzIGFuZCBub3Qgbm9fY2xlYW46CiAgICAgICAgIGlmIGxlbihyZWNpcGVzKSA9PSAxOgogICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0NsZWFuaW5nIHN5c3Jvb3QgZm9yIHJlY2lwZSAlcy4uLicgJSByZWNpcGVzWzBdKQpAQCAtMTY3OSw2ICsxNjIzLDcgQEAKICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgdW5saWtlbHksIGJ1dCBpZiBpdCdzIGVtcHR5IHdlIGNhbiBqdXN0IHJlbW92ZSBpdAogICAgICAgICAgICAgICAgIG9zLnJtZGlyKHNyY3RyZWUpCiAKKyAgICAgICAgY2xlYW5fcHJlZmVycmVkX3Byb3ZpZGVyKHBuLCBjb25maWcud29ya3NwYWNlX3BhdGgpCiAKIGRlZiByZXNldChhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgogICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAncmVzZXQnIHN1YmNvbW1hbmQiIiIKQEAgLTE4MzQsMTAgKzE3NzksMTUgQEAKICAgICBwYXJzZXJfYWRkLmFkZF9hcmd1bWVudCgnLS1mZXRjaC1kZXYnLCBoZWxwPSdGb3IgbnBtLCBhbHNvIGZldGNoIGRldkRlcGVuZGVuY2llcycsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCiAgICAgcGFyc2VyX2FkZC5hZGRfYXJndW1lbnQoJy0tdmVyc2lvbicsICctVicsIGhlbHA9J1ZlcnNpb24gdG8gdXNlIHdpdGhpbiByZWNpcGUgKFBWKScpCiAgICAgcGFyc2VyX2FkZC5hZGRfYXJndW1lbnQoJy0tbm8tZ2l0JywgJy1nJywgaGVscD0nSWYgZmV0Y2hpbmcgc291cmNlLCBkbyBub3Qgc2V0IHVwIHNvdXJjZSB0cmVlIGFzIGEgZ2l0IHJlcG9zaXRvcnknLCBhY3Rpb249InN0b3JlX3RydWUiKQotICAgIHBhcnNlcl9hZGQuYWRkX2FyZ3VtZW50KCctLWF1dG9yZXYnLCAnLWEnLCBoZWxwPSdXaGVuIGZldGNoaW5nIGZyb20gYSBnaXQgcmVwb3NpdG9yeSwgc2V0IFNSQ1JFViBpbiB0aGUgcmVjaXBlIHRvIGEgZmxvYXRpbmcgcmV2aXNpb24gaW5zdGVhZCBvZiBmaXhlZCcsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgZ3JvdXAgPSBwYXJzZXJfYWRkLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1zcmNyZXYnLCAnLVMnLCBoZWxwPSdTb3VyY2UgcmV2aXNpb24gdG8gZmV0Y2ggaWYgZmV0Y2hpbmcgZnJvbSBhbiBTQ00gc3VjaCBhcyBnaXQgKGRlZmF1bHQgbGF0ZXN0KScpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWF1dG9yZXYnLCAnLWEnLCBoZWxwPSdXaGVuIGZldGNoaW5nIGZyb20gYSBnaXQgcmVwb3NpdG9yeSwgc2V0IFNSQ1JFViBpbiB0aGUgcmVjaXBlIHRvIGEgZmxvYXRpbmcgcmV2aXNpb24gaW5zdGVhZCBvZiBmaXhlZCcsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgcGFyc2VyX2FkZC5hZGRfYXJndW1lbnQoJy0tc3JjYnJhbmNoJywgJy1CJywgaGVscD0nQnJhbmNoIGluIHNvdXJjZSByZXBvc2l0b3J5IGlmIGZldGNoaW5nIGZyb20gYW4gU0NNIHN1Y2ggYXMgZ2l0IChkZWZhdWx0IG1hc3RlciknKQogICAgIHBhcnNlcl9hZGQuYWRkX2FyZ3VtZW50KCctLWJpbmFyeScsICctYicsIGhlbHA9J1RyZWF0IHRoZSBzb3VyY2UgdHJlZSBhcyBzb21ldGhpbmcgdGhhdCBzaG91bGQgYmUgaW5zdGFsbGVkIHZlcmJhdGltIChubyBjb21waWxhdGlvbiwgc2FtZSBkaXJlY3Rvcnkgc3RydWN0dXJlKS4gVXNlZnVsIHdpdGggYmluYXJ5IHBhY2thZ2VzIGUuZy4gUlBNcy4nLCBhY3Rpb249J3N0b3JlX3RydWUnKQogICAgIHBhcnNlcl9hZGQuYWRkX2FyZ3VtZW50KCctLWFsc28tbmF0aXZlJywgaGVscD0nQWxzbyBhZGQgbmF0aXZlIHZhcmlhbnQgKGkuZS4gc3VwcG9ydCBidWlsZGluZyByZWNpcGUgZm9yIHRoZSBidWlsZCBob3N0IGFzIHdlbGwgYXMgdGhlIHRhcmdldCBtYWNoaW5lKScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCiAgICAgcGFyc2VyX2FkZC5hZGRfYXJndW1lbnQoJy0tc3JjLXN1YmRpcicsIGhlbHA9J1NwZWNpZnkgc3ViZGlyZWN0b3J5IHdpdGhpbiBzb3VyY2UgdHJlZSB0byB1c2UnLCBtZXRhdmFyPSdTVUJESVInKQorICAgIHBhcnNlcl9hZGQuYWRkX2FyZ3VtZW50KCctLW1pcnJvcnMnLCBoZWxwPSdFbmFibGUgUFJFTUlSUk9SUyBhbmQgTUlSUk9SUyBmb3Igc291cmNlIHRyZWUgZmV0Y2hpbmcgKGRpc2FibGUgYnkgZGVmYXVsdCkuJywgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICBwYXJzZXJfYWRkLmFkZF9hcmd1bWVudCgnLS1wcm92aWRlcycsICctcCcsIGhlbHA9J1NwZWNpZnkgYW4gYWxpYXMgZm9yIHRoZSBpdGVtIHByb3ZpZGVkIGJ5IHRoZSByZWNpcGUuIEUuZy4gdmlydHVhbC9saWJnbCcpCiAgICAgcGFyc2VyX2FkZC5zZXRfZGVmYXVsdHMoZnVuYz1hZGQsIGZpeGVkX3NldHVwPWNvbnRleHQuZml4ZWRfc2V0dXApCiAKICAgICBwYXJzZXJfbW9kaWZ5ID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdtb2RpZnknLCBoZWxwPSdNb2RpZnkgdGhlIHNvdXJjZSBmb3IgYW4gZXhpc3RpbmcgcmVjaXBlJywKQEAgLTE4NTQsNyArMTgwNCw3IEBACiAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLW5vLXNhbWUtZGlyJywgaGVscD0nRm9yY2UgYnVpbGQgaW4gYSBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnknLCBhY3Rpb249InN0b3JlX3RydWUiKQogICAgIHBhcnNlcl9tb2RpZnkuYWRkX2FyZ3VtZW50KCctLWJyYW5jaCcsICctYicsIGRlZmF1bHQ9ImRldnRvb2wiLCBoZWxwPSdOYW1lIGZvciBkZXZlbG9wbWVudCBicmFuY2ggdG8gY2hlY2tvdXQgKHdoZW4gbm90IHVzaW5nIC1uLy0tbm8tZXh0cmFjdCkgKGRlZmF1bHQgIiUoZGVmYXVsdClzIiknKQogICAgIHBhcnNlcl9tb2RpZnkuYWRkX2FyZ3VtZW50KCctLWtlZXAtdGVtcCcsIGhlbHA9J0tlZXAgdGVtcG9yYXJ5IGRpcmVjdG9yeSAoZm9yIGRlYnVnZ2luZyknLCBhY3Rpb249InN0b3JlX3RydWUiKQotICAgIHBhcnNlcl9tb2RpZnkuc2V0X2RlZmF1bHRzKGZ1bmM9bW9kaWZ5KQorICAgIHBhcnNlcl9tb2RpZnkuc2V0X2RlZmF1bHRzKGZ1bmM9bW9kaWZ5LCBmaXhlZF9zZXR1cD1jb250ZXh0LmZpeGVkX3NldHVwKQogCiAgICAgcGFyc2VyX2V4dHJhY3QgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2V4dHJhY3QnLCBoZWxwPSdFeHRyYWN0IHRoZSBzb3VyY2UgZm9yIGFuIGV4aXN0aW5nIHJlY2lwZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nRXh0cmFjdHMgdGhlIHNvdXJjZSBmb3IgYW4gZXhpc3RpbmcgcmVjaXBlJywKQEAgLTE4NjMsNyArMTgxMyw3IEBACiAgICAgcGFyc2VyX2V4dHJhY3QuYWRkX2FyZ3VtZW50KCdzcmN0cmVlJywgaGVscD0nUGF0aCB0byB3aGVyZSB0byBleHRyYWN0IHRoZSBzb3VyY2UgdHJlZScpCiAgICAgcGFyc2VyX2V4dHJhY3QuYWRkX2FyZ3VtZW50KCctLWJyYW5jaCcsICctYicsIGRlZmF1bHQ9ImRldnRvb2wiLCBoZWxwPSdOYW1lIGZvciBkZXZlbG9wbWVudCBicmFuY2ggdG8gY2hlY2tvdXQgKGRlZmF1bHQgIiUoZGVmYXVsdClzIiknKQogICAgIHBhcnNlcl9leHRyYWN0LmFkZF9hcmd1bWVudCgnLS1rZWVwLXRlbXAnLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSdLZWVwIHRlbXBvcmFyeSBkaXJlY3RvcnkgKGZvciBkZWJ1Z2dpbmcpJykKLSAgICBwYXJzZXJfZXh0cmFjdC5zZXRfZGVmYXVsdHMoZnVuYz1leHRyYWN0LCBub193b3Jrc3BhY2U9VHJ1ZSkKKyAgICBwYXJzZXJfZXh0cmFjdC5zZXRfZGVmYXVsdHMoZnVuYz1leHRyYWN0LCBmaXhlZF9zZXR1cD1jb250ZXh0LmZpeGVkX3NldHVwKQogCiAgICAgcGFyc2VyX3N5bmMgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ3N5bmMnLCBoZWxwPSdTeW5jaHJvbml6ZSB0aGUgc291cmNlIHRyZWUgZm9yIGFuIGV4aXN0aW5nIHJlY2lwZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nU3luY2hyb25pemUgdGhlIHByZXZpb3VzbHkgZXh0cmFjdGVkIHNvdXJjZSB0cmVlIGZvciBhbiBleGlzdGluZyByZWNpcGUnLApAQCAtMTg3Myw3ICsxODIzLDcgQEAKICAgICBwYXJzZXJfc3luYy5hZGRfYXJndW1lbnQoJ3NyY3RyZWUnLCBoZWxwPSdQYXRoIHRvIHRoZSBzb3VyY2UgdHJlZScpCiAgICAgcGFyc2VyX3N5bmMuYWRkX2FyZ3VtZW50KCctLWJyYW5jaCcsICctYicsIGRlZmF1bHQ9ImRldnRvb2wiLCBoZWxwPSdOYW1lIGZvciBkZXZlbG9wbWVudCBicmFuY2ggdG8gY2hlY2tvdXQnKQogICAgIHBhcnNlcl9zeW5jLmFkZF9hcmd1bWVudCgnLS1rZWVwLXRlbXAnLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSdLZWVwIHRlbXBvcmFyeSBkaXJlY3RvcnkgKGZvciBkZWJ1Z2dpbmcpJykKLSAgICBwYXJzZXJfc3luYy5zZXRfZGVmYXVsdHMoZnVuYz1zeW5jKQorICAgIHBhcnNlcl9zeW5jLnNldF9kZWZhdWx0cyhmdW5jPXN5bmMsIGZpeGVkX3NldHVwPWNvbnRleHQuZml4ZWRfc2V0dXApCiAKICAgICBwYXJzZXJfcmVuYW1lID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdyZW5hbWUnLCBoZWxwPSdSZW5hbWUgYSByZWNpcGUgZmlsZSBpbiB0aGUgd29ya3NwYWNlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdSZW5hbWVzIHRoZSByZWNpcGUgZmlsZSBmb3IgYSByZWNpcGUgaW4gdGhlIHdvcmtzcGFjZSwgY2hhbmdpbmcgdGhlIG5hbWUgb3IgdmVyc2lvbiBwYXJ0IG9yIGJvdGgsIGVuc3VyaW5nIHRoYXQgYWxsIHJlZmVyZW5jZXMgd2l0aGluIHRoZSB3b3Jrc3BhY2UgYXJlIHVwZGF0ZWQgYXQgdGhlIHNhbWUgdGltZS4gT25seSB3b3JrcyB3aGVuIHRoZSByZWNpcGUgZmlsZSBpdHNlbGYgaXMgaW4gdGhlIHdvcmtzcGFjZSwgZS5nLiBhZnRlciBkZXZ0b29sIGFkZC4gUGFydGljdWxhcmx5IHVzZWZ1bCB3aGVuIGRldnRvb2wgYWRkIGRpZCBub3QgYXV0b21hdGljYWxseSBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgbmFtZS4nLApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvdXBncmFkZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3VwZ3JhZGUucHkKaW5kZXggMDVmYjllNS4uZjFiM2ZmMCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvdXBncmFkZS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC91cGdyYWRlLnB5CkBAIC0xLDYgKzEsNiBAQAogIyBEZXZlbG9wbWVudCB0b29sIC0gdXBncmFkZSBjb21tYW5kIHBsdWdpbgogIwotIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgogIwogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMzMsNyArMzMsNyBAQAogCiBpbXBvcnQgb2UucmVjaXBldXRpbHMKIGZyb20gZGV2dG9vbCBpbXBvcnQgc3RhbmRhcmQKLWZyb20gZGV2dG9vbCBpbXBvcnQgZXhlY19idWlsZF9lbnZfY29tbWFuZCwgc2V0dXBfdGluZm9pbCwgRGV2dG9vbEVycm9yLCBwYXJzZV9yZWNpcGUsIHVzZV9leHRlcm5hbF9idWlsZAorZnJvbSBkZXZ0b29sIGltcG9ydCBleGVjX2J1aWxkX2Vudl9jb21tYW5kLCBzZXR1cF90aW5mb2lsLCBEZXZ0b29sRXJyb3IsIHBhcnNlX3JlY2lwZSwgdXNlX2V4dGVybmFsX2J1aWxkLCB1cGRhdGVfdW5sb2NrZWRzaWdzCiAKIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdkZXZ0b29sJykKIApAQCAtMTgwLDcgKzE4MCw3IEBACiAgICAgICAgICAgICBzcmN1cmkgPSByZXZfcmUuc3ViKCcnLCBzcmN1cmkpCiAgICAgcmV0dXJuIHNyY3VyaSwgc3JjcmV2CiAKLWRlZiBfZXh0cmFjdF9uZXdfc291cmNlKG5ld3B2LCBzcmN0cmVlLCBub19wYXRjaCwgc3JjcmV2LCBicmFuY2gsIGtlZXBfdGVtcCwgdGluZm9pbCwgcmQpOgorZGVmIF9leHRyYWN0X25ld19zb3VyY2UobmV3cHYsIHNyY3RyZWUsIG5vX3BhdGNoLCBzcmNyZXYsIHNyY2JyYW5jaCwgYnJhbmNoLCBrZWVwX3RlbXAsIHRpbmZvaWwsIHJkKToKICAgICAiIiJFeHRyYWN0IHNvdXJjZXMgb2YgYSByZWNpcGUgd2l0aCBhIG5ldyB2ZXJzaW9uIiIiCiAKICAgICBkZWYgX19ydW4oY21kKToKQEAgLTIwMiwxNSArMjAyLDM4IEBACiAgICAgICAgIF9fcnVuKCdnaXQgdGFnIC1mIGRldnRvb2wtYmFzZS1uZXcnKQogICAgICAgICBtZDUgPSBOb25lCiAgICAgICAgIHNoYTI1NiA9IE5vbmUKKyAgICAgICAgaWYgbm90IHNyY2JyYW5jaDoKKyAgICAgICAgICAgIGNoZWNrX2JyYW5jaCwgY2hlY2tfYnJhbmNoX2VyciA9IF9fcnVuKCdnaXQgYnJhbmNoIC1yIC0tY29udGFpbnMgJXMnICUgc3JjcmV2KQorICAgICAgICAgICAgZ2V0X2JyYW5jaCA9IFt4LnN0cmlwKCkgZm9yIHggaW4gY2hlY2tfYnJhbmNoLnNwbGl0bGluZXMoKV0KKyAgICAgICAgICAgICMgUmVtb3ZlIEhFQUQgcmVmZXJlbmNlIHBvaW50IGFuZCBkcm9wIHJlbW90ZSBwcmVmaXgKKyAgICAgICAgICAgIGdldF9icmFuY2ggPSBbeC5zcGxpdCgnLycsIDEpWzFdIGZvciB4IGluIGdldF9icmFuY2ggaWYgbm90IHguc3RhcnRzd2l0aCgnb3JpZ2luL0hFQUQnKV0KKyAgICAgICAgICAgIGlmICdtYXN0ZXInIGluIGdldF9icmFuY2g6CisgICAgICAgICAgICAgICAgIyBJZiBpdCBpcyBtYXN0ZXIsIHdlIGRvIG5vdCBuZWVkIHRvIGFwcGVuZCAnYnJhbmNoPW1hc3RlcicgYXMgdGhpcyBpcyBkZWZhdWx0LgorICAgICAgICAgICAgICAgICMgRXZlbiB3aXRoIHRoZSBjYXNlIHdoZXJlIGdldF9icmFuY2ggaGFzIG11bHRpcGxlIG9iamVjdHMsIGlmICdtYXN0ZXInIGlzIG9uZQorICAgICAgICAgICAgICAgICMgb2YgdGhlbSwgd2Ugc2hvdWxkIGRlZmF1bHQgdGFrZSBmcm9tICdtYXN0ZXInCisgICAgICAgICAgICAgICAgc3JjYnJhbmNoID0gJycKKyAgICAgICAgICAgIGVsaWYgbGVuKGdldF9icmFuY2gpID09IDE6CisgICAgICAgICAgICAgICAgIyBJZiAnbWFzdGVyJyBpc24ndCBpbiBnZXRfYnJhbmNoIGFuZCBnZXRfYnJhbmNoIGNvbnRhaW5zIG9ubHkgT05FIG9iamVjdCwgdGhlbiBzdG9yZSByZXN1bHQgaW50byAnc3JjYnJhbmNoJworICAgICAgICAgICAgICAgIHNyY2JyYW5jaCA9IGdldF9icmFuY2hbMF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBJZiBnZXRfYnJhbmNoIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgb2JqZWN0cywgdGhlbiBkaXNwbGF5IGVycm9yIGFuZCBleGl0LgorICAgICAgICAgICAgICAgIG1icmNoID0gJ1xuICAnICsgJ1xuICAnLmpvaW4oZ2V0X2JyYW5jaCkKKyAgICAgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ1JldmlzaW9uICVzIHdhcyBmb3VuZCBvbiBtdWx0aXBsZSBicmFuY2hlczogJXNcblBsZWFzZSBwcm92aWRlIHRoZSBjb3JyZWN0IGJyYW5jaCBpbiB0aGUgZGV2dG9vbCBjb21tYW5kIHdpdGggIi0tc3JjYnJhbmNoIiBvciAiLUIiIG9wdGlvbi4nICUgKHNyY3JldiwgbWJyY2gpKQogICAgIGVsc2U6CiAgICAgICAgIF9fcnVuKCdnaXQgY2hlY2tvdXQgZGV2dG9vbC1iYXNlIC1iIGRldnRvb2wtJXMnICUgbmV3cHYpCiAKICAgICAgICAgdG1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2wnKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtZDUsIHNoYTI1NiA9IHNjcmlwdHV0aWxzLmZldGNoX3VyaSh0aW5mb2lsLmNvbmZpZ19kYXRhLCB1cmksIHRtcGRpciwgcmV2KQotICAgICAgICBleGNlcHQgYmIuZmV0Y2gyLkZldGNoRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGNoZWNrc3VtcywgZnRtcGRpciA9IHNjcmlwdHV0aWxzLmZldGNoX3VybCh0aW5mb2lsLCB1cmksIHJldiwgdG1wZGlyLCBsb2dnZXIsIHByZXNlcnZlX3RtcD1rZWVwX3RlbXApCisgICAgICAgIGV4Y2VwdCBzY3JpcHR1dGlscy5GZXRjaFVybEZhaWx1cmUgYXMgZToKICAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcihlKQogCisgICAgICAgIGlmIGZ0bXBkaXIgYW5kIGtlZXBfdGVtcDoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdGZXRjaCB0ZW1wIGRpcmVjdG9yeSBpcyAlcycgJSBmdG1wZGlyKQorCisgICAgICAgIG1kNSA9IGNoZWNrc3Vtc1snbWQ1c3VtJ10KKyAgICAgICAgc2hhMjU2ID0gY2hlY2tzdW1zWydzaGEyNTZzdW0nXQorCiAgICAgICAgIHRtcHNyY3RyZWUgPSBfZ2V0X3NyY3RyZWUodG1wZGlyKQogICAgICAgICBzcmN0cmVlID0gb3MucGF0aC5hYnNwYXRoKHNyY3RyZWUpCiAKQEAgLTI2OSw3ICsyOTIsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0bXBzcmN0cmVlKQogCi0gICAgcmV0dXJuIChyZXYsIG1kNSwgc2hhMjU2KQorICAgIHJldHVybiAocmV2LCBtZDUsIHNoYTI1Niwgc3JjYnJhbmNoKQogCiBkZWYgX2NyZWF0ZV9uZXdfcmVjaXBlKG5ld3B2LCBtZDUsIHNoYTI1Niwgc3JjcmV2LCBzcmNicmFuY2gsIHdvcmtzcGFjZSwgdGluZm9pbCwgcmQpOgogICAgICIiIkNyZWF0ZXMgdGhlIG5ldyByZWNpcGUgdW5kZXIgd29ya3NwYWNlIiIiCkBAIC0yNzcsNyArMzAwLDEwIEBACiAgICAgYnBuID0gcmQuZ2V0VmFyKCdCUE4nKQogICAgIHBhdGggPSBvcy5wYXRoLmpvaW4od29ya3NwYWNlLCAncmVjaXBlcycsIGJwbikKICAgICBiYi51dGlscy5ta2RpcmhpZXIocGF0aCkKLSAgICBjb3BpZWQsIF8gPSBvZS5yZWNpcGV1dGlscy5jb3B5X3JlY2lwZV9maWxlcyhyZCwgcGF0aCkKKyAgICBjb3BpZWQsIF8gPSBvZS5yZWNpcGV1dGlscy5jb3B5X3JlY2lwZV9maWxlcyhyZCwgcGF0aCwgYWxsX3ZhcmlhbnRzPVRydWUpCisgICAgaWYgbm90IGNvcGllZDoKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdJbnRlcm5hbCBlcnJvciAtIG5vIGZpbGVzIHdlcmUgY29waWVkIGZvciByZWNpcGUgJXMnICUgYnBuKQorICAgIGxvZ2dlci5kZWJ1ZygnQ29waWVkICVzIHRvICVzJyAlIChjb3BpZWQsIHBhdGgpKQogCiAgICAgb2xkcHYgPSByZC5nZXRWYXIoJ1BWJykKICAgICBpZiBub3QgbmV3cHY6CkBAIC0zMjksNiArMzU1LDI5IEBACiAKICAgICByZXR1cm4gZnVsbHBhdGgsIGNvcGllZAogCisKK2RlZiBfY2hlY2tfZ2l0X2NvbmZpZygpOgorICAgIGRlZiBnZXRjb25maWcobmFtZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCBjb25maWcgLS1nbG9iYWwgJXMnICUgbmFtZSlbMF0uc3RyaXAoKQorICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5leGl0Y29kZSA9PSAxOgorICAgICAgICAgICAgICAgIHZhbHVlID0gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIHVzZXJuYW1lID0gZ2V0Y29uZmlnKCd1c2VyLm5hbWUnKQorICAgIHVzZXJlbWFpbCA9IGdldGNvbmZpZygndXNlci5lbWFpbCcpCisgICAgY29uZmlnZXJyID0gW10KKyAgICBpZiBub3QgdXNlcm5hbWU6CisgICAgICAgIGNvbmZpZ2Vyci5hcHBlbmQoJ1BsZWFzZSBzZXQgeW91ciBuYW1lIHVzaW5nOlxuICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZScpCisgICAgaWYgbm90IHVzZXJlbWFpbDoKKyAgICAgICAgY29uZmlnZXJyLmFwcGVuZCgnUGxlYXNlIHNldCB5b3VyIGVtYWlsIHVzaW5nOlxuICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwnKQorICAgIGlmIGNvbmZpZ2VycjoKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdZb3VyIGdpdCBjb25maWd1cmF0aW9uIGlzIGluY29tcGxldGUgd2hpY2ggd2lsbCBwcmV2ZW50IHJlYmFzZXMgZnJvbSB3b3JraW5nOlxuJyArICdcbicuam9pbihjb25maWdlcnIpKQorCisKIGRlZiB1cGdyYWRlKGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CiAgICAgIiIiRW50cnkgcG9pbnQgZm9yIHRoZSBkZXZ0b29sICd1cGdyYWRlJyBzdWJjb21tYW5kIiIiCiAKQEAgLTMzOSw2ICszODgsOCBAQAogICAgIGlmIGFyZ3Muc3JjYnJhbmNoIGFuZCBub3QgYXJncy5zcmNyZXY6CiAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiSWYgeW91IHNwZWNpZnkgLS1zcmNicmFuY2gvLUIgdGhlbiB5b3UgbXVzdCB1c2UgLS1zcmNyZXYvLVMgdG8gc3BlY2lmeSB0aGUgcmV2aXNpb24iICUgYXJncy5yZWNpcGVuYW1lKQogCisgICAgX2NoZWNrX2dpdF9jb25maWcoKQorCiAgICAgdGluZm9pbCA9IHNldHVwX3RpbmZvaWwoYmFzZXBhdGg9YmFzZXBhdGgsIHRyYWNraW5nPVRydWUpCiAgICAgdHJ5OgogICAgICAgICByZCA9IHBhcnNlX3JlY2lwZShjb25maWcsIHRpbmZvaWwsIGFyZ3MucmVjaXBlbmFtZSwgVHJ1ZSkKQEAgLTM2NywxMSArNDE4LDExIEBACiAKICAgICAgICAgcmYgPSBOb25lCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldjEgPSBzdGFuZGFyZC5fZXh0cmFjdF9zb3VyY2Uoc3JjdHJlZSwgRmFsc2UsICdkZXZ0b29sLW9yaWcnLCBGYWxzZSwgcmQsIHRpbmZvaWwpCi0gICAgICAgICAgICByZXYyLCBtZDUsIHNoYTI1NiA9IF9leHRyYWN0X25ld19zb3VyY2UoYXJncy52ZXJzaW9uLCBzcmN0cmVlLCBhcmdzLm5vX3BhdGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Muc3JjcmV2LCBhcmdzLmJyYW5jaCwgYXJncy5rZWVwX3RlbXAsCisgICAgICAgICAgICByZXYxID0gc3RhbmRhcmQuX2V4dHJhY3Rfc291cmNlKHNyY3RyZWUsIEZhbHNlLCAnZGV2dG9vbC1vcmlnJywgRmFsc2UsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSwgYXJncy5maXhlZF9zZXR1cCwgcmQsIHRpbmZvaWwpCisgICAgICAgICAgICByZXYyLCBtZDUsIHNoYTI1Niwgc3JjYnJhbmNoID0gX2V4dHJhY3RfbmV3X3NvdXJjZShhcmdzLnZlcnNpb24sIHNyY3RyZWUsIGFyZ3Mubm9fcGF0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5zcmNyZXYsIGFyZ3Muc3JjYnJhbmNoLCBhcmdzLmJyYW5jaCwgYXJncy5rZWVwX3RlbXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGluZm9pbCwgcmQpCi0gICAgICAgICAgICByZiwgY29waWVkID0gX2NyZWF0ZV9uZXdfcmVjaXBlKGFyZ3MudmVyc2lvbiwgbWQ1LCBzaGEyNTYsIGFyZ3Muc3JjcmV2LCBhcmdzLnNyY2JyYW5jaCwgY29uZmlnLndvcmtzcGFjZV9wYXRoLCB0aW5mb2lsLCByZCkKKyAgICAgICAgICAgIHJmLCBjb3BpZWQgPSBfY3JlYXRlX25ld19yZWNpcGUoYXJncy52ZXJzaW9uLCBtZDUsIHNoYTI1NiwgYXJncy5zcmNyZXYsIHNyY2JyYW5jaCwgY29uZmlnLndvcmtzcGFjZV9wYXRoLCB0aW5mb2lsLCByZCkKICAgICAgICAgZXhjZXB0IGJiLnByb2Nlc3MuQ21kRXJyb3IgYXMgZToKICAgICAgICAgICAgIF91cGdyYWRlX2Vycm9yKGUsIHJmLCBzcmN0cmVlKQogICAgICAgICBleGNlcHQgRGV2dG9vbEVycm9yIGFzIGU6CkBAIC0zODEsNiArNDMyLDkgQEAKICAgICAgICAgYWYgPSBfd3JpdGVfYXBwZW5kKHJmLCBzcmN0cmVlLCBhcmdzLnNhbWVfZGlyLCBhcmdzLm5vX3NhbWVfZGlyLCByZXYyLAogICAgICAgICAgICAgICAgICAgICAgICAgY29waWVkLCBjb25maWcud29ya3NwYWNlX3BhdGgsIHJkKQogICAgICAgICBzdGFuZGFyZC5fYWRkX21kNShjb25maWcsIHBuLCBhZikKKworICAgICAgICB1cGRhdGVfdW5sb2NrZWRzaWdzKGJhc2VwYXRoLCB3b3Jrc3BhY2UsIFtwbl0sIGFyZ3MuZml4ZWRfc2V0dXApCisKICAgICAgICAgbG9nZ2VyLmluZm8oJ1VwZ3JhZGVkIHNvdXJjZSBleHRyYWN0ZWQgdG8gJXMnICUgc3JjdHJlZSkKICAgICAgICAgbG9nZ2VyLmluZm8oJ05ldyByZWNpcGUgaXMgJXMnICUgcmYpCiAgICAgZmluYWxseToKQEAgLTQwNiw0ICs0NjAsNCBAQAogICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1zYW1lLWRpcicsICctcycsIGhlbHA9J0J1aWxkIGluIHNhbWUgZGlyZWN0b3J5IGFzIHNvdXJjZScsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCiAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLW5vLXNhbWUtZGlyJywgaGVscD0nRm9yY2UgYnVpbGQgaW4gYSBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnknLCBhY3Rpb249InN0b3JlX3RydWUiKQogICAgIHBhcnNlcl91cGdyYWRlLmFkZF9hcmd1bWVudCgnLS1rZWVwLXRlbXAnLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSdLZWVwIHRlbXBvcmFyeSBkaXJlY3RvcnkgKGZvciBkZWJ1Z2dpbmcpJykKLSAgICBwYXJzZXJfdXBncmFkZS5zZXRfZGVmYXVsdHMoZnVuYz11cGdyYWRlKQorICAgIHBhcnNlcl91cGdyYWRlLnNldF9kZWZhdWx0cyhmdW5jPXVwZ3JhZGUsIGZpeGVkX3NldHVwPWNvbnRleHQuZml4ZWRfc2V0dXApCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC91dGlsY21kcy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3V0aWxjbWRzLnB5CmluZGV4IDA0MzdlNjQuLmI3NDUxMTYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3V0aWxjbWRzLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3V0aWxjbWRzLnB5CkBAIC0zMCwxNSArMzAsMTMgQEAKIAogbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2RldnRvb2wnKQogCi0KLWRlZiBlZGl0X3JlY2lwZShhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgotICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAnZWRpdC1yZWNpcGUnIHN1YmNvbW1hbmQiIiIKK2RlZiBfZmluZF9yZWNpcGVfcGF0aChhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgogICAgIGlmIGFyZ3MuYW55X3JlY2lwZToKICAgICAgICAgdGluZm9pbCA9IHNldHVwX3RpbmZvaWwoY29uZmlnX29ubHk9RmFsc2UsIGJhc2VwYXRoPWJhc2VwYXRoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZCA9IHBhcnNlX3JlY2lwZShjb25maWcsIHRpbmZvaWwsIGFyZ3MucmVjaXBlbmFtZSwgVHJ1ZSkKICAgICAgICAgICAgIGlmIG5vdCByZDoKLSAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiRmFpbGVkIHRvIGZpbmQgc3BlY2lmaWVkIHJlY2lwZSIpCiAgICAgICAgICAgICByZWNpcGVmaWxlID0gcmQuZ2V0VmFyKCdGSUxFJykKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHRpbmZvaWwuc2h1dGRvd24oKQpAQCAtNDgsOCArNDYsMTkgQEAKICAgICAgICAgaWYgbm90IHJlY2lwZWZpbGU6CiAgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlJlY2lwZSBmaWxlIGZvciAlcyBpcyBub3QgdW5kZXIgdGhlIHdvcmtzcGFjZSIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucmVjaXBlbmFtZSkKKyAgICByZXR1cm4gcmVjaXBlZmlsZQogCi0gICAgcmV0dXJuIHNjcmlwdHV0aWxzLnJ1bl9lZGl0b3IocmVjaXBlZmlsZSkKKworZGVmIGZpbmRfcmVjaXBlKGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CisgICAgIiIiRW50cnkgcG9pbnQgZm9yIHRoZSBkZXZ0b29sICdmaW5kLXJlY2lwZScgc3ViY29tbWFuZCIiIgorICAgIHJlY2lwZWZpbGUgPSBfZmluZF9yZWNpcGVfcGF0aChhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpCisgICAgcHJpbnQocmVjaXBlZmlsZSkKKyAgICByZXR1cm4gMAorCisKK2RlZiBlZGl0X3JlY2lwZShhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgorICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAnZWRpdC1yZWNpcGUnIHN1YmNvbW1hbmQiIiIKKyAgICByZXR1cm4gc2NyaXB0dXRpbHMucnVuX2VkaXRvcihfZmluZF9yZWNpcGVfcGF0aChhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpLCBsb2dnZXIpCiAKIAogZGVmIGNvbmZpZ3VyZV9oZWxwKGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CkBAIC0yMjAsNiArMjI5LDE0IEBACiAgICAgcGFyc2VyX2VkaXRfcmVjaXBlLmFkZF9hcmd1bWVudCgnLS1hbnktcmVjaXBlJywgJy1hJywgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0nRWRpdCBhbnkgcmVjaXBlLCBub3QganVzdCB3aGVyZSB0aGUgcmVjaXBlIGZpbGUgaXRzZWxmIGlzIGluIHRoZSB3b3Jrc3BhY2UnKQogICAgIHBhcnNlcl9lZGl0X3JlY2lwZS5zZXRfZGVmYXVsdHMoZnVuYz1lZGl0X3JlY2lwZSkKIAorICAgICMgRmluZC1yZWNpcGUKKyAgICBwYXJzZXJfZmluZF9yZWNpcGUgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2ZpbmQtcmVjaXBlJywgaGVscD0nRmluZCBhIHJlY2lwZSBmaWxlIGluIHlvdXIgd29ya3NwYWNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J0J5IGRlZmF1bHQsIHRoaXMgd2lsbCBmaW5kIGEgcmVjaXBlIGZpbGUgaW4geW91ciB3b3Jrc3BhY2U7IHlvdSBjYW4gb3ZlcnJpZGUgdGhpcyB3aXRoIHRoZSAtYS8tLWFueS1yZWNpcGUgb3B0aW9uLicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwPSd3b3JraW5nJykKKyAgICBwYXJzZXJfZmluZF9yZWNpcGUuYWRkX2FyZ3VtZW50KCdyZWNpcGVuYW1lJywgaGVscD0nUmVjaXBlIHRvIGZpbmQnKQorICAgIHBhcnNlcl9maW5kX3JlY2lwZS5hZGRfYXJndW1lbnQoJy0tYW55LXJlY2lwZScsICctYScsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9J0ZpbmQgYW55IHJlY2lwZSwgbm90IGp1c3Qgd2hlcmUgdGhlIHJlY2lwZSBmaWxlIGl0c2VsZiBpcyBpbiB0aGUgd29ya3NwYWNlJykKKyAgICBwYXJzZXJfZmluZF9yZWNpcGUuc2V0X2RlZmF1bHRzKGZ1bmM9ZmluZF9yZWNpcGUpCisKICAgICAjIE5PVEU6IE5lZWRlZCB0byBvdmVycmlkZSB0aGUgdXNhZ2Ugc3RyaW5nIGhlcmUgc2luY2UgdGhlIGRlZmF1bHQKICAgICAjIGdldHMgdGhlIG9yZGVyIHdyb25nIC0gcmVjaXBlbmFtZSBtdXN0IGNvbWUgYmVmb3JlIC0tYXJnCiAgICAgcGFyc2VyX2NvbmZpZ3VyZV9oZWxwID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdjb25maWd1cmUtaGVscCcsIGhlbHA9J0dldCBoZWxwIG9uIGNvbmZpZ3VyZSBzY3JpcHQgb3B0aW9ucycsCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGUucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGUucHkKaW5kZXggNGRlNTJmYy4uNWJmOTM5ZSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZS5weQpAQCAtMSw2ICsxLDYgQEAKICMgUmVjaXBlIGNyZWF0aW9uIHRvb2wgLSBjcmVhdGUgY29tbWFuZCBwbHVnaW4KICMKLSMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgSW50ZWwgQ29ycG9yYXRpb24KKyMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgSW50ZWwgQ29ycG9yYXRpb24KICMKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTE1NiwxMCArMTU2LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBSZWNpcGVIYW5kbGVyLnJlY2lwZWJpbm1hcFtwcm9nXSA9IHBuCiAKICAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNoZWNrZmlsZXMocGF0aCwgc3BlY2xpc3QsIHJlY3Vyc2l2ZT1GYWxzZSk6CisgICAgZGVmIGNoZWNrZmlsZXMocGF0aCwgc3BlY2xpc3QsIHJlY3Vyc2l2ZT1GYWxzZSwgZXhjbHVkZWRpcnM9Tm9uZSk6CiAgICAgICAgIHJlc3VsdHMgPSBbXQogICAgICAgICBpZiByZWN1cnNpdmU6Ci0gICAgICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhwYXRoKToKKyAgICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBhdGgsIHRvcGRvd249VHJ1ZSk6CisgICAgICAgICAgICAgICAgaWYgZXhjbHVkZWRpcnM6CisgICAgICAgICAgICAgICAgICAgIGRpcnNbOl0gPSBbZCBmb3IgZCBpbiBkaXJzIGlmIGQgbm90IGluIGV4Y2x1ZGVkaXJzXQogICAgICAgICAgICAgICAgIGZvciBmbiBpbiBmaWxlczoKICAgICAgICAgICAgICAgICAgICAgZm9yIHNwZWMgaW4gc3BlY2xpc3Q6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2goZm4sIHNwZWMpOgpAQCAtMzM5LDkgKzM0MSwxNCBAQAogICAgICAgICAgICAgICAgIHBuID0gcmVzLmdyb3VwKDEpLnN0cmlwKCkucmVwbGFjZSgnXycsICctJykKICAgICAgICAgICAgICAgICBwdiA9IHJlcy5ncm91cCgyKS5zdHJpcCgpLnJlcGxhY2UoJ18nLCAnLicpCiAKLSAgICAgICAgaWYgbm90IHBuIGFuZCBub3QgcHYgYW5kIHBhcnNlcmVzLnNjaGVtZSBub3QgaW4gWydnaXQnLCAnZ2l0c20nLCAnc3ZuJywgJ2hnJ106Ci0gICAgICAgICAgICBzcmNmaWxlID0gb3MucGF0aC5iYXNlbmFtZShwYXJzZXJlcy5wYXRoLnJzdHJpcCgnLycpKQotICAgICAgICAgICAgcG4sIHB2ID0gZGV0ZXJtaW5lX2Zyb21fZmlsZW5hbWUoc3JjZmlsZSkKKyAgICAgICAgaWYgbm90IHBuIGFuZCBub3QgcHY6CisgICAgICAgICAgICBpZiBwYXJzZXJlcy5zY2hlbWUgbm90IGluIFsnZ2l0JywgJ2dpdHNtJywgJ3N2bicsICdoZyddOgorICAgICAgICAgICAgICAgIHNyY2ZpbGUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhcnNlcmVzLnBhdGgucnN0cmlwKCcvJykpCisgICAgICAgICAgICAgICAgcG4sIHB2ID0gZGV0ZXJtaW5lX2Zyb21fZmlsZW5hbWUoc3JjZmlsZSkKKyAgICAgICAgICAgIGVsaWYgcGFyc2VyZXMuc2NoZW1lIGluIFsnZ2l0JywgJ2dpdHNtJ106CisgICAgICAgICAgICAgICAgcG4gPSBvcy5wYXRoLmJhc2VuYW1lKHBhcnNlcmVzLnBhdGgucnN0cmlwKCcvJykpLmxvd2VyKCkucmVwbGFjZSgnXycsICctJykKKyAgICAgICAgICAgICAgICBpZiBwbi5lbmRzd2l0aCgnLmdpdCcpOgorICAgICAgICAgICAgICAgICAgICBwbiA9IHBuWzotNF0KIAogICAgIGxvZ2dlci5kZWJ1ZygnRGV0ZXJtaW5lZCBmcm9tIHNvdXJjZSBVUkw6IG5hbWUgPSAiJXMiLCB2ZXJzaW9uID0gIiVzIicgJSAocG4sIHB2KSkKICAgICByZXR1cm4gKHBuLCBwdikKQEAgLTQxMiwxMSArNDE5LDE1IEBACiAgICAgICAgIHBrZ2FyY2ggPSAiJHtNQUNISU5FX0FSQ0h9IgogCiAgICAgZXh0cmF2YWx1ZXMgPSB7fQotICAgIGNoZWNrc3VtcyA9IChOb25lLCBOb25lKQorICAgIGNoZWNrc3VtcyA9IHt9CiAgICAgdGVtcHNyYyA9ICcnCiAgICAgc291cmNlID0gYXJncy5zb3VyY2UKICAgICBzcmNzdWJkaXIgPSAnJwogICAgIHNyY3JldiA9ICcke0FVVE9SRVZ9JworICAgIHNyY2JyYW5jaCA9ICcnCisgICAgc2NoZW1lID0gJycKKyAgICBzdG9yZVRhZ05hbWUgPSAnJworICAgIHB2X3NyY3B2ID0gRmFsc2UKIAogICAgIGlmIG9zLnBhdGguaXNmaWxlKHNvdXJjZSk6CiAgICAgICAgIHNvdXJjZSA9ICdmaWxlOi8vJXMnICUgb3MucGF0aC5hYnNwYXRoKHNvdXJjZSkKQEAgLTQzMiwyNCArNDQzLDY1IEBACiAgICAgICAgIHJldl9yZSA9IHJlLmNvbXBpbGUoJztyZXY9KFteO10rKScpCiAgICAgICAgIHJlcyA9IHJldl9yZS5zZWFyY2goc3JjdXJpKQogICAgICAgICBpZiByZXM6CisgICAgICAgICAgICBpZiBhcmdzLnNyY3JldjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ3Jldj0gcGFyYW1ldGVyIGFuZCAtUy8tLXNyY3JldiBvcHRpb24gY2Fubm90IGJvdGggYmUgc3BlY2lmaWVkIC0gdXNlIG9uZSBvciB0aGUgb3RoZXInKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICBpZiBhcmdzLmF1dG9yZXY6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdyZXY9IHBhcmFtZXRlciBhbmQgLWEvLS1hdXRvcmV2IG9wdGlvbiBjYW5ub3QgYm90aCBiZSBzcGVjaWZpZWQgLSB1c2Ugb25lIG9yIHRoZSBvdGhlcicpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICAgICAgICAgIHNyY3JldiA9IHJlcy5ncm91cCgxKQogICAgICAgICAgICAgc3JjdXJpID0gcmV2X3JlLnN1YignJywgc3JjdXJpKQotICAgICAgICB0ZW1wc3JjID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J3JlY2lwZXRvb2wtJykKLSAgICAgICAgc3JjdHJlZSA9IHRlbXBzcmMKLSAgICAgICAgZCA9IGJiLmRhdGEuY3JlYXRlQ29weSh0aW5mb2lsLmNvbmZpZ19kYXRhKQotICAgICAgICBpZiBmZXRjaHVyaS5zdGFydHN3aXRoKCducG06Ly8nKToKLSAgICAgICAgICAgICMgQ2hlY2sgaWYgbnBtIGlzIGF2YWlsYWJsZQotICAgICAgICAgICAgbnBtX2JpbmRpciA9IGNoZWNrX25wbSh0aW5mb2lsLCBhcmdzLmRldnRvb2wpCi0gICAgICAgICAgICBkLnByZXBlbmRWYXIoJ1BBVEgnLCAnJXM6JyAlIG5wbV9iaW5kaXIpCi0gICAgICAgIGxvZ2dlci5pbmZvKCdGZXRjaGluZyAlcy4uLicgJSBzcmN1cmkpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNoZWNrc3VtcyA9IHNjcmlwdHV0aWxzLmZldGNoX3VyaShkLCBmZXRjaHVyaSwgc3JjdHJlZSwgc3JjcmV2KQotICAgICAgICBleGNlcHQgYmIuZmV0Y2gyLkJCRmV0Y2hFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzdHIoZSkucnN0cmlwKCkpCisgICAgICAgIGVsaWYgYXJncy5zcmNyZXY6CisgICAgICAgICAgICBzcmNyZXYgPSBhcmdzLnNyY3JldgorCisgICAgICAgICMgQ2hlY2sgd2hldGhlciB1c2VycyBwcm92aWRlcyBhbnkgYnJhbmNoIGluZm8gaW4gZmV0Y2h1cmkuCisgICAgICAgICMgSWYgdHJ1ZSwgd2Ugd2lsbCBza2lwIGFsbCBicmFuY2ggY2hlY2tpbmcgcHJvY2VzcyB0byBob25vciBhbGwgdXNlcidzIGlucHV0LgorICAgICAgICBzY2hlbWUsIG5ldHdvcmssIHBhdGgsIHVzZXIsIHBhc3N3ZCwgcGFyYW1zID0gYmIuZmV0Y2gyLmRlY29kZXVybChmZXRjaHVyaSkKKyAgICAgICAgc3JjYnJhbmNoID0gcGFyYW1zLmdldCgnYnJhbmNoJykKKyAgICAgICAgaWYgYXJncy5zcmNicmFuY2g6CisgICAgICAgICAgICBpZiBzcmNicmFuY2g6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdicmFuY2g9IHBhcmFtZXRlciBhbmQgLUIvLS1zcmNicmFuY2ggb3B0aW9uIGNhbm5vdCBib3RoIGJlIHNwZWNpZmllZCAtIHVzZSBvbmUgb3IgdGhlIG90aGVyJykKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICAgICAgc3JjYnJhbmNoID0gYXJncy5zcmNicmFuY2gKKyAgICAgICAgbm9icmFuY2ggPSBwYXJhbXMuZ2V0KCdub2JyYW5jaCcpCisgICAgICAgIGlmIG5vYnJhbmNoIGFuZCBzcmNicmFuY2g6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ25vYnJhbmNoPSBjYW5ub3QgYmUgdXNlZCBpZiB5b3Ugc3BlY2lmeSBhIGJyYW5jaCcpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICB0YWcgPSBwYXJhbXMuZ2V0KCd0YWcnKQorICAgICAgICBpZiBub3Qgc3JjYnJhbmNoIGFuZCBub3Qgbm9icmFuY2ggYW5kIHNyY3JldiAhPSAnJHtBVVRPUkVWfSc6CisgICAgICAgICAgICAjIEFwcGVuZCBub2JyYW5jaD0xIGluIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAgICAgICAgICAgICMgMS4gVXNlciBkaWQgbm90IHNldCAnYnJhbmNoPScgaW4gc3JjdXJpLCBhbmQKKyAgICAgICAgICAgICMgMi4gVXNlciBkaWQgbm90IHNldCAnbm9icmFuY2g9MScgaW4gc3JjdXJpLCBhbmQKKyAgICAgICAgICAgICMgMy4gU291cmNlIHJldmlzaW9uIGlzIG5vdCAnJHtBVVRPUkVWfScKKyAgICAgICAgICAgIHBhcmFtc1snbm9icmFuY2gnXSA9ICcxJworICAgICAgICBpZiB0YWc6CisgICAgICAgICAgICAjIEtlZXAgYSBjb3B5IG9mIHRhZyBhbmQgYXBwZW5kIG5vYnJhbmNoPTEgdGhlbiByZW1vdmUgdGFnIGZyb20gVVJMLgorICAgICAgICAgICAgIyBCaXRiYWtlIGZldGNoZXIgdW5hYmxlIHRvIGZldGNoIHdoZW4ge0FVVE9SRVZ9IGFuZCB0YWcgaXMgc2V0IGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgICAgICBzdG9yZVRhZ05hbWUgPSBwYXJhbXNbJ3RhZyddCisgICAgICAgICAgICBwYXJhbXNbJ25vYnJhbmNoJ10gPSAnMScKKyAgICAgICAgICAgIGRlbCBwYXJhbXNbJ3RhZyddCisgICAgICAgIGlmIHNjaGVtZSA9PSAnbnBtJzoKKyAgICAgICAgICAgIHBhcmFtc1snbm92ZXJpZnknXSA9ICcxJworICAgICAgICBmZXRjaHVyaSA9IGJiLmZldGNoMi5lbmNvZGV1cmwoKHNjaGVtZSwgbmV0d29yaywgcGF0aCwgdXNlciwgcGFzc3dkLCBwYXJhbXMpKQorCisgICAgICAgIHRtcHBhcmVudCA9IHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQVNFX1dPUktESVInKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodG1wcGFyZW50KQorICAgICAgICB0ZW1wc3JjID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J3JlY2lwZXRvb2wtJywgZGlyPXRtcHBhcmVudCkKKyAgICAgICAgc3JjdHJlZSA9IG9zLnBhdGguam9pbih0ZW1wc3JjLCAnc291cmNlJykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBjaGVja3N1bXMsIGZ0bXBkaXIgPSBzY3JpcHR1dGlscy5mZXRjaF91cmwodGluZm9pbCwgZmV0Y2h1cmksIHNyY3Jldiwgc3JjdHJlZSwgbG9nZ2VyLCBwcmVzZXJ2ZV90bXA9YXJncy5rZWVwX3RlbXApCisgICAgICAgIGV4Y2VwdCBzY3JpcHR1dGlscy5GZXRjaFVybEZhaWx1cmUgYXMgZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzdHIoZSkpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIGlmIGZ0bXBkaXIgYW5kIGFyZ3Mua2VlcF90ZW1wOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0ZldGNoIHRlbXAgZGlyZWN0b3J5IGlzICVzJyAlIGZ0bXBkaXIpCisKICAgICAgICAgZGlybGlzdCA9IG9zLmxpc3RkaXIoc3JjdHJlZSkKLSAgICAgICAgaWYgJ2dpdC5pbmRpcmVjdGlvbnN5bWxpbmsnIGluIGRpcmxpc3Q6Ci0gICAgICAgICAgICBkaXJsaXN0LnJlbW92ZSgnZ2l0LmluZGlyZWN0aW9uc3ltbGluaycpCisgICAgICAgIGZpbHRlcm91dCA9IFsnZ2l0LmluZGlyZWN0aW9uc3ltbGluayddCisgICAgICAgIGRpcmxpc3QgPSBbeCBmb3IgeCBpbiBkaXJsaXN0IGlmIHggbm90IGluIGZpbHRlcm91dF0KKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdEaXJlY3RvcnkgbGlzdGluZyAoZXhjbHVkaW5nIGZpbHRlcmVkIG91dCk6XG4gICVzJyAlICdcbiAgJy5qb2luKGRpcmxpc3QpKQogICAgICAgICBpZiBsZW4oZGlybGlzdCkgPT0gMToKICAgICAgICAgICAgIHNpbmdsZWl0ZW0gPSBvcy5wYXRoLmpvaW4oc3JjdHJlZSwgZGlybGlzdFswXSkKICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc2luZ2xlaXRlbSk6CkBAIC00NTcsMzAgKzUwOSw3NCBAQAogICAgICAgICAgICAgICAgIHNyY3N1YmRpciA9IGRpcmxpc3RbMF0KICAgICAgICAgICAgICAgICBzcmN0cmVlID0gb3MucGF0aC5qb2luKHNyY3RyZWUsIHNyY3N1YmRpcikKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgd2l0aCBvcGVuKHNpbmdsZWl0ZW0sICdyJywgZXJyb3JzPSdzdXJyb2dhdGVlc2NhcGUnKSBhcyBmOgotICAgICAgICAgICAgICAgICAgICBpZiAnPGh0bWwnIGluIGYucmVhZCgxMDApLmxvd2VyKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0ZldGNoaW5nICIlcyIgcmV0dXJuZWQgYSBzaW5nbGUgSFRNTCBwYWdlIC0gY2hlY2sgdGhlIFVSTCBpcyBjb3JyZWN0IGFuZCBmdW5jdGlvbmFsJyAlIGZldGNodXJpKQotICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgICAgICAgICBjaGVja19zaW5nbGVfZmlsZShkaXJsaXN0WzBdLCBmZXRjaHVyaSkKKyAgICAgICAgZWxpZiBsZW4oZGlybGlzdCkgPT0gMDoKKyAgICAgICAgICAgIGlmICcvJyBpbiBmZXRjaHVyaToKKyAgICAgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbih0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignRExfRElSJyksIGZldGNodXJpLnNwbGl0KCcvJylbLTFdKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZuKToKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tfc2luZ2xlX2ZpbGUoZm4sIGZldGNodXJpKQorICAgICAgICAgICAgIyBJZiB3ZSd2ZSBnb3QgdG8gaGVyZSB0aGVuIHRoZXJlJ3Mgbm8gc291cmNlIHNvIHdlIG1pZ2h0IGFzIHdlbGwgZ2l2ZSB1cAorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVUkwgJXMgcmVzdWx0ZWQgaW4gYW4gZW1wdHkgc291cmNlIHRyZWUnICUgZmV0Y2h1cmkpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgICMgV2UgbmVlZCB0aGlzIGNoZWNraW5nIG1lY2hhbmlzbSB0byBpbXByb3ZlIHRoZSByZWNpcGUgY3JlYXRlZCBieSByZWNpcGV0b29sIGFuZCBkZXZ0b29sCisgICAgICAgICMgaXMgYWJsZSB0byBwYXJzZSBhbmQgYnVpbGQgYnkgYml0YmFrZS4KKyAgICAgICAgIyBJZiB0aGVyZSBpcyBubyBpbnB1dCBmb3IgYnJhbmNoIG5hbWUsIHRoZW4gY2hlY2sgZm9yIGJyYW5jaCBuYW1lIHdpdGggU1JDUkVWIHByb3ZpZGVkLgorICAgICAgICBpZiBub3Qgc3JjYnJhbmNoIGFuZCBub3Qgbm9icmFuY2ggYW5kIHNyY3JldiBhbmQgKHNyY3JldiAhPSAnJHtBVVRPUkVWfScpIGFuZCBzY2hlbWUgaW4gWydnaXQnLCAnZ2l0c20nXToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjbWQgPSAnZ2l0IGJyYW5jaCAtciAtLWNvbnRhaW5zJworICAgICAgICAgICAgICAgIGNoZWNrX2JyYW5jaCwgY2hlY2tfYnJhbmNoX2VyciA9IGJiLnByb2Nlc3MucnVuKCclcyAlcycgJSAoY21kLCBzcmNyZXYpLCBjd2Q9c3JjdHJlZSkKKyAgICAgICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGVycikpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgICAgIGdldF9icmFuY2ggPSBbeC5zdHJpcCgpIGZvciB4IGluIGNoZWNrX2JyYW5jaC5zcGxpdGxpbmVzKCldCisgICAgICAgICAgICAjIFJlbW92ZSBIRUFEIHJlZmVyZW5jZSBwb2ludCBhbmQgZHJvcCByZW1vdGUgcHJlZml4CisgICAgICAgICAgICBnZXRfYnJhbmNoID0gW3guc3BsaXQoJy8nLCAxKVsxXSBmb3IgeCBpbiBnZXRfYnJhbmNoIGlmIG5vdCB4LnN0YXJ0c3dpdGgoJ29yaWdpbi9IRUFEJyldCisgICAgICAgICAgICBpZiAnbWFzdGVyJyBpbiBnZXRfYnJhbmNoOgorICAgICAgICAgICAgICAgICMgSWYgaXQgaXMgbWFzdGVyLCB3ZSBkbyBub3QgbmVlZCB0byBhcHBlbmQgJ2JyYW5jaD1tYXN0ZXInIGFzIHRoaXMgaXMgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAjIEV2ZW4gd2l0aCB0aGUgY2FzZSB3aGVyZSBnZXRfYnJhbmNoIGhhcyBtdWx0aXBsZSBvYmplY3RzLCBpZiAnbWFzdGVyJyBpcyBvbmUKKyAgICAgICAgICAgICAgICAjIG9mIHRoZW0sIHdlIHNob3VsZCBkZWZhdWx0IHRha2UgZnJvbSAnbWFzdGVyJworICAgICAgICAgICAgICAgIHNyY2JyYW5jaCA9ICcnCisgICAgICAgICAgICBlbGlmIGxlbihnZXRfYnJhbmNoKSA9PSAxOgorICAgICAgICAgICAgICAgICMgSWYgJ21hc3RlcicgaXNuJ3QgaW4gZ2V0X2JyYW5jaCBhbmQgZ2V0X2JyYW5jaCBjb250YWlucyBvbmx5IE9ORSBvYmplY3QsIHRoZW4gc3RvcmUgcmVzdWx0IGludG8gJ3NyY2JyYW5jaCcKKyAgICAgICAgICAgICAgICBzcmNicmFuY2ggPSBnZXRfYnJhbmNoWzBdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgSWYgZ2V0X2JyYW5jaCBjb250YWlucyBtb3JlIHRoYW4gb25lIG9iamVjdHMsIHRoZW4gZGlzcGxheSBlcnJvciBhbmQgZXhpdC4KKyAgICAgICAgICAgICAgICBtYnJjaCA9ICdcbiAgJyArICdcbiAgJy5qb2luKGdldF9icmFuY2gpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdSZXZpc2lvbiAlcyB3YXMgZm91bmQgb24gbXVsdGlwbGUgYnJhbmNoZXM6ICVzXG5QbGVhc2UgcHJvdmlkZSB0aGUgY29ycmVjdCBicmFuY2ggd2l0aCAtQi8tLXNyY2JyYW5jaCcgJSAoc3JjcmV2LCBtYnJjaCkpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICAjIFNpbmNlIHdlIG1pZ2h0IGhhdmUgYSB2YWx1ZSBpbiBzcmNicmFuY2gsIHdlIG5lZWQgdG8KKyAgICAgICAgIyByZWNvbnRydWN0IHRoZSBzcmN1cmkgdG8gaW5jbHVkZSAnYnJhbmNoJyBpbiBwYXJhbXMuCisgICAgICAgIHNjaGVtZSwgbmV0d29yaywgcGF0aCwgdXNlciwgcGFzc3dkLCBwYXJhbXMgPSBiYi5mZXRjaDIuZGVjb2RldXJsKHNyY3VyaSkKKyAgICAgICAgaWYgc3JjYnJhbmNoOgorICAgICAgICAgICAgcGFyYW1zWydicmFuY2gnXSA9IHNyY2JyYW5jaAorCisgICAgICAgIGlmIHN0b3JlVGFnTmFtZSBhbmQgc2NoZW1lIGluIFsnZ2l0JywgJ2dpdHNtJ106CisgICAgICAgICAgICAjIENoZWNrIHNyY3JldiB1c2luZyB0YWcgYW5kIGNoZWNrIHZhbGlkaXR5IG9mIHRoZSB0YWcKKyAgICAgICAgICAgIGNtZCA9ICgnZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAlcycgJSAoc3RvcmVUYWdOYW1lKSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjaGVja190YWcsIGNoZWNrX3RhZ19lcnIgPSBiYi5wcm9jZXNzLnJ1bignJXMnICUgY21kLCBjd2Q9c3JjdHJlZSkKKyAgICAgICAgICAgICAgICBzcmNyZXYgPSBjaGVja190YWcuc3BsaXQoKVswXQorICAgICAgICAgICAgZXhjZXB0IGJiLnByb2Nlc3MuRXhlY3V0aW9uRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzdHIoZXJyKSkKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlBvc3NpYmx5IHdyb25nIHRhZyBuYW1lIGlzIHByb3ZpZGVkIikKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICAgICAgIyBEcm9wIHRhZyBmcm9tIHNyY3VyaSBhcyBpdCB3aWxsIGhhdmUgY29uZmxpY3RzIHdpdGggU1JDUkVWIGR1cmluZyByZWNpcGUgcGFyc2UuCisgICAgICAgICAgICBkZWwgcGFyYW1zWyd0YWcnXQorICAgICAgICBzcmN1cmkgPSBiYi5mZXRjaDIuZW5jb2RldXJsKChzY2hlbWUsIG5ldHdvcmssIHBhdGgsIHVzZXIsIHBhc3N3ZCwgcGFyYW1zKSkKKwogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc3JjdHJlZSwgJy5naXRtb2R1bGVzJykpIGFuZCBzcmN1cmkuc3RhcnRzd2l0aCgnZ2l0Oi8vJyk6CiAgICAgICAgICAgICBzcmN1cmkgPSAnZ2l0c206Ly8nICsgc3JjdXJpWzY6XQogICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0ZldGNoaW5nIHN1Ym1vZHVsZXMuLi4nKQogICAgICAgICAgICAgYmIucHJvY2Vzcy5ydW4oJ2dpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZScsIGN3ZD1zcmN0cmVlKQogCiAgICAgICAgIGlmIGlzX3BhY2thZ2UoZmV0Y2h1cmkpOgotICAgICAgICAgICAgdG1wZmRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdyZWNpcGV0b29sLScpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcGtnZmlsZSA9IE5vbmUKKyAgICAgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weSh0aW5mb2lsLmNvbmZpZ19kYXRhKQorICAgICAgICAgICAgcGtnZmlsZSA9IGJiLmZldGNoMi5sb2NhbHBhdGgoZmV0Y2h1cmksIGxvY2FsZGF0YSkKKyAgICAgICAgICAgIGlmIHBrZ2ZpbGU6CisgICAgICAgICAgICAgICAgdG1wZmRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdyZWNpcGV0b29sLScpCiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBmaWxldXJpID0gZmV0Y2h1cmkgKyAnO3VucGFjaz0wJwotICAgICAgICAgICAgICAgICAgICBzY3JpcHR1dGlscy5mZXRjaF91cmkodGluZm9pbC5jb25maWdfZGF0YSwgZmlsZXVyaSwgdG1wZmRpciwgc3JjcmV2KQotICAgICAgICAgICAgICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2Fsayh0bXBmZGlyKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ2ZpbGUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGV4Y2VwdCBiYi5mZXRjaDIuQkJGZXRjaEV4Y2VwdGlvbiBhcyBlOgotICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybignU2Vjb25kIGZldGNoIHRvIGdldCBtZXRhZGF0YSBmYWlsZWQ6ICVzJyAlIHN0cihlKS5yc3RyaXAoKSkKLQotICAgICAgICAgICAgICAgIGlmIHBrZ2ZpbGU6CiAgICAgICAgICAgICAgICAgICAgIGlmIHBrZ2ZpbGUuZW5kc3dpdGgoKCcuZGViJywgJy5pcGsnKSk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQsIF8gPSBiYi5wcm9jZXNzLnJ1bignYXIgeCAlcycgJSBwa2dmaWxlLCBjd2Q9dG1wZmRpcikKICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dCwgXyA9IGJiLnByb2Nlc3MucnVuKCd0YXIgeGYgY29udHJvbC50YXIuZ3onLCBjd2Q9dG1wZmRpcikKQEAgLTQ5MCw4ICs1ODYsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LCBfID0gYmIucHJvY2Vzcy5ydW4oJ3JwbSAtcXAgLS14bWwgJXMgPiBwa2dpbmZvLnhtbCcgJSBwa2dmaWxlLCBjd2Q9dG1wZmRpcikKICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGNvbnZlcnRfcnBtX3htbChvcy5wYXRoLmpvaW4odG1wZmRpciwgJ3BrZ2luZm8ueG1sJykpCiAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYXZhbHVlcy51cGRhdGUodmFsdWVzKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRtcGZkaXIpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0bXBmZGlyKQogICAgIGVsc2U6CiAgICAgICAgICMgQXNzdW1lIHdlJ3JlIHBvaW50aW5nIHRvIGFuIGV4aXN0aW5nIHNvdXJjZSB0cmVlCiAgICAgICAgIGlmIGFyZ3MuZXh0cmFjdF90bzoKQEAgLTUxOSw5ICs2MTUsOSBAQAogCiAgICAgaWYgYXJncy5zcmNfc3ViZGlyOgogICAgICAgICBzcmNzdWJkaXIgPSBvcy5wYXRoLmpvaW4oc3Jjc3ViZGlyLCBhcmdzLnNyY19zdWJkaXIpCi0gICAgICAgIHNyY3RyZWVfdXNlID0gb3MucGF0aC5qb2luKHNyY3RyZWUsIGFyZ3Muc3JjX3N1YmRpcikKKyAgICAgICAgc3JjdHJlZV91c2UgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHNyY3RyZWUsIGFyZ3Muc3JjX3N1YmRpcikpCiAgICAgZWxzZToKLSAgICAgICAgc3JjdHJlZV91c2UgPSBzcmN0cmVlCisgICAgICAgIHNyY3RyZWVfdXNlID0gb3MucGF0aC5hYnNwYXRoKHNyY3RyZWUpCiAKICAgICBpZiBhcmdzLm91dGZpbGUgYW5kIG9zLnBhdGguaXNkaXIoYXJncy5vdXRmaWxlKToKICAgICAgICAgb3V0ZmlsZSA9IE5vbmUKQEAgLTU0Myw5ICs2MzksMTAgQEAKICAgICAjIFdlIG5lZWQgYSBibGFuayBsaW5lIGhlcmUgc28gdGhhdCBwYXRjaF9yZWNpcGVfbGluZXMgY2FuIHJld2luZCBiZWZvcmUgdGhlIExJQ0VOU0UgY29tbWVudHMKICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcnKQogCi0gICAgaGFuZGxlZCA9IFtdCi0gICAgbGljdmFsdWVzID0gaGFuZGxlX2xpY2Vuc2VfdmFycyhzcmN0cmVlX3VzZSwgbGluZXNfYmVmb3JlLCBoYW5kbGVkLCBleHRyYXZhbHVlcywgdGluZm9pbC5jb25maWdfZGF0YSkKKyAgICAjIFdlJ2xsIGNvbWUgYmFjayBhbmQgcmVwbGFjZSB0aGlzIGxhdGVyIGluIGhhbmRsZV9saWNlbnNlX3ZhcnMoKQorICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMjTElDRU5TRV9QTEFDRUhPTERFUiMjJykKIAorICAgIGhhbmRsZWQgPSBbXQogICAgIGNsYXNzZXMgPSBbXQogCiAgICAgIyBGSVhNRSBUaGlzIGlzIGtpbmQgb2YgYSBoYWNrLCB3ZSBwcm9iYWJseSBvdWdodCB0byBiZSB1c2luZyBiaXRiYWtlIHRvIGRvIHRoaXMKQEAgLTU4MSwzMCArNjc4LDMxIEBACiAgICAgZWxzZToKICAgICAgICAgcmVhbHB2ID0gTm9uZQogCi0gICAgaWYgc3JjdXJpIGFuZCBub3QgcmVhbHB2IG9yIG5vdCBwbjoKLSAgICAgICAgbmFtZV9wbiwgbmFtZV9wdiA9IGRldGVybWluZV9mcm9tX3VybChzcmN1cmkpCi0gICAgICAgIGlmIG5hbWVfcG4gYW5kIG5vdCBwbjoKLSAgICAgICAgICAgIHBuID0gbmFtZV9wbgotICAgICAgICBpZiBuYW1lX3B2IGFuZCBub3QgcmVhbHB2OgotICAgICAgICAgICAgcmVhbHB2ID0gbmFtZV9wdgotCiAgICAgaWYgbm90IHNyY3VyaToKICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBObyBpbmZvcm1hdGlvbiBmb3IgU1JDX1VSSSB5ZXQgKG9ubHkgYW4gZXh0ZXJuYWwgc291cmNlIHRyZWUgd2FzIHNwZWNpZmllZCknKQogICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ1NSQ19VUkkgPSAiJXMiJyAlIHNyY3VyaSkKLSAgICAobWQ1dmFsdWUsIHNoYTI1NnZhbHVlKSA9IGNoZWNrc3VtcwotICAgIGlmIG1kNXZhbHVlOgotICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCdTUkNfVVJJW21kNXN1bV0gPSAiJXMiJyAlIG1kNXZhbHVlKQotICAgIGlmIHNoYTI1NnZhbHVlOgotICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCdTUkNfVVJJW3NoYTI1NnN1bV0gPSAiJXMiJyAlIHNoYTI1NnZhbHVlKQorICAgIGZvciBrZXksIHZhbHVlIGluIHNvcnRlZChjaGVja3N1bXMuaXRlbXMoKSk6CisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ1NSQ19VUklbJXNdID0gIiVzIicgJSAoa2V5LCB2YWx1ZSkpCiAgICAgaWYgc3JjdXJpIGFuZCBzdXBwb3J0c19zcmNyZXYoc3JjdXJpKToKICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnJykKICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBNb2RpZnkgdGhlc2UgYXMgZGVzaXJlZCcpCi0gICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ1BWID0gIiVzK2dpdCR7U1JDUFZ9IicgJSAocmVhbHB2IG9yICcxLjAnKSkKKyAgICAgICAgIyBOb3RlOiB3ZSBoYXZlIGNvZGUgdG8gcmVwbGFjZSByZWFscHYgZnVydGhlciBkb3duIGlmIGl0IGdldHMgc2V0IHRvIHNvbWUgb3RoZXIgdmFsdWUKKyAgICAgICAgc2NoZW1lLCBfLCBfLCBfLCBfLCBfID0gYmIuZmV0Y2gyLmRlY29kZXVybChzcmN1cmkpCisgICAgICAgIGlmIHNjaGVtZSBpbiBbJ2dpdCcsICdnaXRzbSddOgorICAgICAgICAgICAgc3JjcHZwcmVmaXggPSAnZ2l0JworICAgICAgICBlbGlmIHNjaGVtZSA9PSAnc3ZuJzoKKyAgICAgICAgICAgIHNyY3B2cHJlZml4ID0gJ3N2bnInCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzcmNwdnByZWZpeCA9IHNjaGVtZQorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCdQViA9ICIlcyslcyR7U1JDUFZ9IicgJSAocmVhbHB2IG9yICcxLjAnLCBzcmNwdnByZWZpeCkpCisgICAgICAgIHB2X3NyY3B2ID0gVHJ1ZQogICAgICAgICBpZiBub3QgYXJncy5hdXRvcmV2IGFuZCBzcmNyZXYgPT0gJyR7QVVUT1JFVn0nOgogICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNyY3RyZWUsICcuZ2l0JykpOgogICAgICAgICAgICAgICAgIChzdGRvdXQsIF8pID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCByZXYtcGFyc2UgSEVBRCcsIGN3ZD1zcmN0cmVlKQogICAgICAgICAgICAgc3JjcmV2ID0gc3Rkb3V0LnJzdHJpcCgpCiAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ1NSQ1JFViA9ICIlcyInICUgc3JjcmV2KQorICAgIGlmIGFyZ3MucHJvdmlkZXM6CisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ1BST1ZJREVTID0gIiVzIicgJSBhcmdzLnByb3ZpZGVzKQogICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJycpCiAKICAgICBpZiBzcmNzdWJkaXIgYW5kIG5vdCBhcmdzLmJpbmFyeToKQEAgLTY3Nyw2ICs3NzUsMTUgQEAKICAgICAgICAgICAgIGlmICdfJyBpbiBwbjoKICAgICAgICAgICAgICAgICBwbiA9IHBuLnJlcGxhY2UoJ18nLCAnLScpCiAKKyAgICBpZiBzcmN1cmkgYW5kIG5vdCByZWFscHYgb3Igbm90IHBuOgorICAgICAgICBuYW1lX3BuLCBuYW1lX3B2ID0gZGV0ZXJtaW5lX2Zyb21fdXJsKHNyY3VyaSkKKyAgICAgICAgaWYgbmFtZV9wbiBhbmQgbm90IHBuOgorICAgICAgICAgICAgcG4gPSBuYW1lX3BuCisgICAgICAgIGlmIG5hbWVfcHYgYW5kIG5vdCByZWFscHY6CisgICAgICAgICAgICByZWFscHYgPSBuYW1lX3B2CisKKyAgICBsaWN2YWx1ZXMgPSBoYW5kbGVfbGljZW5zZV92YXJzKHNyY3RyZWVfdXNlLCBsaW5lc19iZWZvcmUsIGhhbmRsZWQsIGV4dHJhdmFsdWVzLCB0aW5mb2lsLmNvbmZpZ19kYXRhKQorCiAgICAgaWYgbm90IG91dGZpbGU6CiAgICAgICAgIGlmIG5vdCBwbjoKICAgICAgICAgICAgIGxvZ19lcnJvcl9jb25kKCdVbmFibGUgdG8gZGV0ZXJtaW5lIHNob3J0IHByb2dyYW0gbmFtZSBmcm9tIHNvdXJjZSB0cmVlIC0gcGxlYXNlIHNwZWNpZnkgbmFtZSB3aXRoIC1OLy0tbmFtZSBvciBvdXRwdXQgZmlsZSBuYW1lIHdpdGggLW8vLS1vdXRmaWxlJywgYXJncy5kZXZ0b29sKQpAQCAtNzI2LDEwICs4MzMsMTEgQEAKICAgICAgICAgICAgICAgICBza2lwYmxhbmsgPSBUcnVlCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJ1NSQ19VUkkgPSAnKToKLSAgICAgICAgICAgIGlmIHJlYWxwdjoKKyAgICAgICAgICAgIGlmIHJlYWxwdiBhbmQgbm90IHB2X3NyY3B2OgogICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UocmVhbHB2LCAnJHtQVn0nKQogICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnUFYgPSAnKToKICAgICAgICAgICAgIGlmIHJlYWxwdjoKKyAgICAgICAgICAgICAgICAjIFJlcGxhY2UgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIFBWIHZhbHVlCiAgICAgICAgICAgICAgICAgbGluZSA9IHJlLnN1YignIlteK10qXCsnLCAnIiVzKycgJSByZWFscHYsIGxpbmUpCiAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQobGluZSkKIApAQCAtNzY4LDkgKzg3Niw2IEBACiAgICAgb3V0bGluZXMuZXh0ZW5kKGxpbmVzX2FmdGVyKQogCiAgICAgaWYgZXh0cmF2YWx1ZXM6Ci0gICAgICAgIGlmICdMSUNFTlNFJyBpbiBleHRyYXZhbHVlcyBhbmQgbm90IGxpY3ZhbHVlczoKLSAgICAgICAgICAgICMgRG9uJ3QgYmxvdyBhd2F5ICdDTE9TRUQnIHZhbHVlIHRoYXQgY29tbWVudHMgc2F5IHdlIHNldAotICAgICAgICAgICAgZGVsIGV4dHJhdmFsdWVzWydMSUNFTlNFJ10KICAgICAgICAgXywgb3V0bGluZXMgPSBvZS5yZWNpcGV1dGlscy5wYXRjaF9yZWNpcGVfbGluZXMob3V0bGluZXMsIGV4dHJhdmFsdWVzLCB0cmFpbGluZ19uZXdsaW5lPUZhbHNlKQogCiAgICAgaWYgYXJncy5leHRyYWN0X3RvOgpAQCAtODA3LDU0ICs5MTIsMTAxIEBACiAKICAgICByZXR1cm4gMAogCitkZWYgY2hlY2tfc2luZ2xlX2ZpbGUoZm4sIGZldGNodXJpKToKKyAgICAiIiJEZXRlcm1pbmUgaWYgYSBzaW5nbGUgZG93bmxvYWRlZCBmaWxlIGlzIHNvbWV0aGluZyB3ZSBjYW4ndCBoYW5kbGUiIiIKKyAgICB3aXRoIG9wZW4oZm4sICdyJywgZXJyb3JzPSdzdXJyb2dhdGVlc2NhcGUnKSBhcyBmOgorICAgICAgICBpZiAnPGh0bWwnIGluIGYucmVhZCgxMDApLmxvd2VyKCk6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0ZldGNoaW5nICIlcyIgcmV0dXJuZWQgYSBzaW5nbGUgSFRNTCBwYWdlIC0gY2hlY2sgdGhlIFVSTCBpcyBjb3JyZWN0IGFuZCBmdW5jdGlvbmFsJyAlIGZldGNodXJpKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworZGVmIHNwbGl0X3ZhbHVlKHZhbHVlKToKKyAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgorICAgICAgICByZXR1cm4gdmFsdWUuc3BsaXQoKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiB2YWx1ZQorCiBkZWYgaGFuZGxlX2xpY2Vuc2VfdmFycyhzcmN0cmVlLCBsaW5lc19iZWZvcmUsIGhhbmRsZWQsIGV4dHJhdmFsdWVzLCBkKToKKyAgICBsaWNoYW5kbGVkID0gW3ggZm9yIHggaW4gaGFuZGxlZCBpZiB4WzBdID09ICdsaWNlbnNlJ10KKyAgICBpZiBsaWNoYW5kbGVkOgorICAgICAgICAjIFNvbWVvbmUgZWxzZSBoYXMgYWxyZWFkeSBoYW5kbGVkIHRoZSBsaWNlbnNlIHZhcnMsIGp1c3QgcmV0dXJuIHRoZWlyIHZhbHVlCisgICAgICAgIHJldHVybiBsaWNoYW5kbGVkWzBdWzFdCisKICAgICBsaWN2YWx1ZXMgPSBndWVzc19saWNlbnNlKHNyY3RyZWUsIGQpCisgICAgbGljZW5zZXMgPSBbXQogICAgIGxpY19maWxlc19jaGtzdW0gPSBbXQogICAgIGxpY191bmtub3duID0gW10KKyAgICBsaW5lcyA9IFtdCiAgICAgaWYgbGljdmFsdWVzOgotICAgICAgICBsaWNlbnNlcyA9IFtdCiAgICAgICAgIGZvciBsaWN2YWx1ZSBpbiBsaWN2YWx1ZXM6CiAgICAgICAgICAgICBpZiBub3QgbGljdmFsdWVbMF0gaW4gbGljZW5zZXM6CiAgICAgICAgICAgICAgICAgbGljZW5zZXMuYXBwZW5kKGxpY3ZhbHVlWzBdKQogICAgICAgICAgICAgbGljX2ZpbGVzX2Noa3N1bS5hcHBlbmQoJ2ZpbGU6Ly8lczttZDU9JXMnICUgKGxpY3ZhbHVlWzFdLCBsaWN2YWx1ZVsyXSkpCiAgICAgICAgICAgICBpZiBsaWN2YWx1ZVswXSA9PSAnVW5rbm93bic6CiAgICAgICAgICAgICAgICAgbGljX3Vua25vd24uYXBwZW5kKGxpY3ZhbHVlWzFdKQotICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIFdBUk5JTkc6IHRoZSBmb2xsb3dpbmcgTElDRU5TRSBhbmQgTElDX0ZJTEVTX0NIS1NVTSB2YWx1ZXMgYXJlIGJlc3QgZ3Vlc3NlcyAtIGl0IGlzJykKLSAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSB2YWx1ZXMgYXJlIGNvbXBsZXRlIGFuZCBjb3JyZWN0LicpCi0gICAgICAgIGlmIGxlbihsaWN2YWx1ZXMpID4gMToKLSAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMnKQotICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBOT1RFOiBtdWx0aXBsZSBsaWNlbnNlcyBoYXZlIGJlZW4gZGV0ZWN0ZWQ7IHRoZXkgaGF2ZSBiZWVuIHNlcGFyYXRlZCB3aXRoICYnKQotICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBpbiB0aGUgTElDRU5TRSB2YWx1ZSBmb3Igbm93IHNpbmNlIGl0IGlzIGEgcmVhc29uYWJsZSBhc3N1bXB0aW9uIHRoYXQgYWxsJykKLSAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgb2YgdGhlIGxpY2Vuc2VzIGFwcGx5LiBJZiBpbnN0ZWFkIHRoZXJlIGlzIGEgY2hvaWNlIGJldHdlZW4gdGhlIG11bHRpcGxlJykKLSAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgbGljZW5zZXMgdGhlbiB5b3Ugc2hvdWxkIGNoYW5nZSB0aGUgdmFsdWUgdG8gc2VwYXJhdGUgdGhlIGxpY2Vuc2VzIHdpdGggfCcpCi0gICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIGluc3RlYWQgb2YgJi4gSWYgdGhlcmUgaXMgYW55IGRvdWJ0LCBjaGVjayB0aGUgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24nKQotICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyB0byBkZXRlcm1pbmUgd2hpY2ggc2l0dWF0aW9uIGlzIGFwcGxpY2FibGUuJykKICAgICAgICAgaWYgbGljX3Vua25vd246Ci0gICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjJykKLSAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgVGhlIGZvbGxvd2luZyBsaWNlbnNlIGZpbGVzIHdlcmUgbm90IGFibGUgdG8gYmUgaWRlbnRpZmllZCBhbmQgYXJlJykKLSAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgcmVwcmVzZW50ZWQgYXMgIlVua25vd24iIGJlbG93LCB5b3Ugd2lsbCBuZWVkIHRvIGNoZWNrIHRoZW0geW91cnNlbGY6JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnIycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyMgVGhlIGZvbGxvd2luZyBsaWNlbnNlIGZpbGVzIHdlcmUgbm90IGFibGUgdG8gYmUgaWRlbnRpZmllZCBhbmQgYXJlJykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnIyByZXByZXNlbnRlZCBhcyAiVW5rbm93biIgYmVsb3csIHlvdSB3aWxsIG5lZWQgdG8gY2hlY2sgdGhlbSB5b3Vyc2VsZjonKQogICAgICAgICAgICAgZm9yIGxpY2ZpbGUgaW4gbGljX3Vua25vd246Ci0gICAgICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyAgICVzJyAlIGxpY2ZpbGUpCi0gICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjJykKLSAgICBlbHNlOgotICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIFVuYWJsZSB0byBmaW5kIGFueSBmaWxlcyB0aGF0IGxvb2tlZCBsaWtlIGxpY2Vuc2Ugc3RhdGVtZW50cy4gQ2hlY2sgdGhlIGFjY29tcGFueWluZycpCi0gICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlIGhlYWRlcnMgYW5kIHNldCBMSUNFTlNFIGFuZCBMSUNfRklMRVNfQ0hLU1VNIGFjY29yZGluZ2x5LicpCi0gICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMnKQotICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIE5PVEU6IExJQ0VOU0UgaXMgYmVpbmcgc2V0IHRvICJDTE9TRUQiIHRvIGFsbG93IHlvdSB0byBhdCBsZWFzdCBzdGFydCBidWlsZGluZyAtIGlmJykKLSAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyB0aGlzIGlzIG5vdCBhY2N1cmF0ZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGxpY2Vuc2luZyBvZiB0aGUgc29mdHdhcmUgYmVpbmcgYnVpbHQgKGl0JykKLSAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyB3aWxsIG5vdCBiZSBpbiBtb3N0IGNhc2VzKSB5b3UgbXVzdCBzcGVjaWZ5IHRoZSBjb3JyZWN0IHZhbHVlIGJlZm9yZSB1c2luZyB0aGlzJykKLSAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyByZWNpcGUgZm9yIGFueXRoaW5nIG90aGVyIHRoYW4gaW5pdGlhbCB0ZXN0aW5nL2RldmVsb3BtZW50IScpCi0gICAgICAgIGxpY2Vuc2VzID0gWydDTE9TRUQnXQotICAgIHBrZ19saWNlbnNlID0gZXh0cmF2YWx1ZXMucG9wKCdMSUNFTlNFJywgTm9uZSkKLSAgICBpZiBwa2dfbGljZW5zZToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyMgICAlcycgJSBsaWNmaWxlKQorCisgICAgZXh0cmFfbGljZW5zZSA9IHNwbGl0X3ZhbHVlKGV4dHJhdmFsdWVzLnBvcCgnTElDRU5TRScsIFtdKSkKKyAgICBpZiAnJicgaW4gZXh0cmFfbGljZW5zZToKKyAgICAgICAgZXh0cmFfbGljZW5zZS5yZW1vdmUoJyYnKQorICAgIGlmIGV4dHJhX2xpY2Vuc2U6CiAgICAgICAgIGlmIGxpY2Vuc2VzID09IFsnVW5rbm93biddOgotICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBOT1RFOiBUaGUgZm9sbG93aW5nIExJQ0VOU0UgdmFsdWUgd2FzIGRldGVybWluZWQgZnJvbSB0aGUgb3JpZ2luYWwgcGFja2FnZSBtZXRhZGF0YScpCi0gICAgICAgICAgICBsaWNlbnNlcyA9IFtwa2dfbGljZW5zZV0KKyAgICAgICAgICAgIGxpY2Vuc2VzID0gZXh0cmFfbGljZW5zZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBOT1RFOiBPcmlnaW5hbCBwYWNrYWdlIG1ldGFkYXRhIGluZGljYXRlcyBsaWNlbnNlIGlzOiAlcycgJSBwa2dfbGljZW5zZSkKLSAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCdMSUNFTlNFID0gIiVzIicgJSAnICYgJy5qb2luKGxpY2Vuc2VzKSkKLSAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCdMSUNfRklMRVNfQ0hLU1VNID0gIiVzIicgJSAnIFxcXG4gICAgICAgICAgICAgICAgICAgICcuam9pbihsaWNfZmlsZXNfY2hrc3VtKSkKLSAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcnKQorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gZXh0cmFfbGljZW5zZToKKyAgICAgICAgICAgICAgICBpZiBpdGVtIG5vdCBpbiBsaWNlbnNlczoKKyAgICAgICAgICAgICAgICAgICAgbGljZW5zZXMuYXBwZW5kKGl0ZW0pCisgICAgZXh0cmFfbGljX2ZpbGVzX2Noa3N1bSA9IHNwbGl0X3ZhbHVlKGV4dHJhdmFsdWVzLnBvcCgnTElDX0ZJTEVTX0NIS1NVTScsIFtdKSkKKyAgICBmb3IgaXRlbSBpbiBleHRyYV9saWNfZmlsZXNfY2hrc3VtOgorICAgICAgICBpZiBpdGVtIG5vdCBpbiBsaWNfZmlsZXNfY2hrc3VtOgorICAgICAgICAgICAgbGljX2ZpbGVzX2Noa3N1bS5hcHBlbmQoaXRlbSkKKworICAgIGlmIGxpY19maWxlc19jaGtzdW06CisgICAgICAgICMgV2UgYXJlIGdvaW5nIHRvIHNldCB0aGUgdmFycywgc28gcHJlcGVuZCB0aGUgc3RhbmRhcmQgZGlzY2xhaW1lcgorICAgICAgICBsaW5lcy5pbnNlcnQoMCwgJyMgV0FSTklORzogdGhlIGZvbGxvd2luZyBMSUNFTlNFIGFuZCBMSUNfRklMRVNfQ0hLU1VNIHZhbHVlcyBhcmUgYmVzdCBndWVzc2VzIC0gaXQgaXMnKQorICAgICAgICBsaW5lcy5pbnNlcnQoMSwgJyMgeW91ciByZXNwb25zaWJpbGl0eSB0byB2ZXJpZnkgdGhhdCB0aGUgdmFsdWVzIGFyZSBjb21wbGV0ZSBhbmQgY29ycmVjdC4nKQorICAgIGVsc2U6CisgICAgICAgICMgV2l0aG91dCBMSUNfRklMRVNfQ0hLU1VNIHdlIHNldCBMSUNFTlNFID0gIkNMT1NFRCIgdG8gYWxsb3cgdGhlCisgICAgICAgICMgdXNlciB0byBnZXQgc3RhcnRlZCBlYXNpbHkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcjIFVuYWJsZSB0byBmaW5kIGFueSBmaWxlcyB0aGF0IGxvb2tlZCBsaWtlIGxpY2Vuc2Ugc3RhdGVtZW50cy4gQ2hlY2sgdGhlIGFjY29tcGFueWluZycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnIyBkb2N1bWVudGF0aW9uIGFuZCBzb3VyY2UgaGVhZGVycyBhbmQgc2V0IExJQ0VOU0UgYW5kIExJQ19GSUxFU19DSEtTVU0gYWNjb3JkaW5nbHkuJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcjJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcjIE5PVEU6IExJQ0VOU0UgaXMgYmVpbmcgc2V0IHRvICJDTE9TRUQiIHRvIGFsbG93IHlvdSB0byBhdCBsZWFzdCBzdGFydCBidWlsZGluZyAtIGlmJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcjIHRoaXMgaXMgbm90IGFjY3VyYXRlIHdpdGggcmVzcGVjdCB0byB0aGUgbGljZW5zaW5nIG9mIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdCAoaXQnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyMgd2lsbCBub3QgYmUgaW4gbW9zdCBjYXNlcykgeW91IG11c3Qgc3BlY2lmeSB0aGUgY29ycmVjdCB2YWx1ZSBiZWZvcmUgdXNpbmcgdGhpcycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnIyByZWNpcGUgZm9yIGFueXRoaW5nIG90aGVyIHRoYW4gaW5pdGlhbCB0ZXN0aW5nL2RldmVsb3BtZW50IScpCisgICAgICAgIGxpY2Vuc2VzID0gWydDTE9TRUQnXQorCisgICAgaWYgZXh0cmFfbGljZW5zZSBhbmQgc29ydGVkKGxpY2Vuc2VzKSAhPSBzb3J0ZWQoZXh0cmFfbGljZW5zZSk6CisgICAgICAgIGxpbmVzLmFwcGVuZCgnIyBOT1RFOiBPcmlnaW5hbCBwYWNrYWdlIC8gc291cmNlIG1ldGFkYXRhIGluZGljYXRlcyBsaWNlbnNlIGlzOiAlcycgJSAnICYgJy5qb2luKGV4dHJhX2xpY2Vuc2UpKQorCisgICAgaWYgbGVuKGxpY2Vuc2VzKSA+IDE6CisgICAgICAgIGxpbmVzLmFwcGVuZCgnIycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnIyBOT1RFOiBtdWx0aXBsZSBsaWNlbnNlcyBoYXZlIGJlZW4gZGV0ZWN0ZWQ7IHRoZXkgaGF2ZSBiZWVuIHNlcGFyYXRlZCB3aXRoICYnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyMgaW4gdGhlIExJQ0VOU0UgdmFsdWUgZm9yIG5vdyBzaW5jZSBpdCBpcyBhIHJlYXNvbmFibGUgYXNzdW1wdGlvbiB0aGF0IGFsbCcpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnIyBvZiB0aGUgbGljZW5zZXMgYXBwbHkuIElmIGluc3RlYWQgdGhlcmUgaXMgYSBjaG9pY2UgYmV0d2VlbiB0aGUgbXVsdGlwbGUnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyMgbGljZW5zZXMgdGhlbiB5b3Ugc2hvdWxkIGNoYW5nZSB0aGUgdmFsdWUgdG8gc2VwYXJhdGUgdGhlIGxpY2Vuc2VzIHdpdGggfCcpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnIyBpbnN0ZWFkIG9mICYuIElmIHRoZXJlIGlzIGFueSBkb3VidCwgY2hlY2sgdGhlIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcjIHRvIGRldGVybWluZSB3aGljaCBzaXR1YXRpb24gaXMgYXBwbGljYWJsZS4nKQorCisgICAgbGluZXMuYXBwZW5kKCdMSUNFTlNFID0gIiVzIicgJSAnICYgJy5qb2luKGxpY2Vuc2VzKSkKKyAgICBsaW5lcy5hcHBlbmQoJ0xJQ19GSUxFU19DSEtTVU0gPSAiJXMiJyAlICcgXFxcbiAgICAgICAgICAgICAgICAgICAgJy5qb2luKGxpY19maWxlc19jaGtzdW0pKQorICAgIGxpbmVzLmFwcGVuZCgnJykKKworICAgICMgUmVwbGFjZSB0aGUgcGxhY2Vob2xkZXIgc28gd2UgZ2V0IHRoZSB2YWx1ZXMgaW4gdGhlIHJpZ2h0IHBsYWNlIGluIHRoZSByZWNpcGUgZmlsZQorICAgIHRyeToKKyAgICAgICAgcG9zID0gbGluZXNfYmVmb3JlLmluZGV4KCcjI0xJQ0VOU0VfUExBQ0VIT0xERVIjIycpCisgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgIHBvcyA9IC0xCisgICAgaWYgcG9zID09IC0xOgorICAgICAgICBsaW5lc19iZWZvcmUuZXh0ZW5kKGxpbmVzKQorICAgIGVsc2U6CisgICAgICAgIGxpbmVzX2JlZm9yZVtwb3M6cG9zKzFdID0gbGluZXMKKwogICAgIGhhbmRsZWQuYXBwZW5kKCgnbGljZW5zZScsIGxpY3ZhbHVlcykpCiAgICAgcmV0dXJuIGxpY3ZhbHVlcwogCkBAIC05NTEsNiArMTEwMywxMCBAQAogICAgIGNydW5jaGVkX21kNXN1bXNbJzFkYWViZDk0OTFkMWU4NDI2OTAwYjRmYTVhNDIyODE0J10gPSAnTEdQTHYyLjEnCiAgICAgIyBodHRwczovL2dpdGh1Yi5jb20vRkZtcGVnL0ZGbXBlZy9ibG9iL21hc3Rlci9DT1BZSU5HLkxHUEx2MwogICAgIGNydW5jaGVkX21kNXN1bXNbJzJlYmZiM2JiNDliOWE0OGEwNzVjYzE0MjVlN2Y0MTI5J10gPSAnTEdQTHYzJworICAgICMgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2VjbGlwc2UvbW9zcXVpdHRvL3YxLjQuMTQvZXBsLXYxMAorICAgIGNydW5jaGVkX21kNXN1bXNbJ2VmZTJjYjlhMzU4MjY5OTJiOWRmNjgyMjRlM2MyNjI4J10gPSAnRVBMLTEuMCcKKyAgICAjIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lY2xpcHNlL21vc3F1aXR0by92MS40LjE0L2VkbC12MTAKKyAgICBjcnVuY2hlZF9tZDVzdW1zWycwYTljNzhjMGEzOThkMWJiY2U0YTE2Njc1N2Q2MDM4NyddID0gJ0VETC0xLjAnCiAgICAgbGljdGV4dCA9IFtdCiAgICAgd2l0aCBvcGVuKGxpY2ZpbGUsICdyJywgZXJyb3JzPSdzdXJyb2dhdGVlc2NhcGUnKSBhcyBmOgogICAgICAgICBmb3IgbGluZSBpbiBmOgpAQCAtOTgzLDcgKzExMzksNyBAQAogICAgIG1kNXN1bXMgPSBnZXRfbGljZW5zZV9tZDVzdW1zKGQpCiAKICAgICBsaWNlbnNlcyA9IFtdCi0gICAgbGljc3BlY3MgPSBbJypMSUNFTltDU11FKicsICdDT1BZSU5HKicsICcqW0xsXWljZW5zZSonLCAnTEVHQUwqJywgJ1tMbF1lZ2FsKicsICcqR1BMKicsICdSRUFETUUubGljKicsICdDT1BZUklHSFQqJywgJ1tDY11vcHlyaWdodConXQorICAgIGxpY3NwZWNzID0gWycqTElDRU5bQ1NdRSonLCAnQ09QWUlORyonLCAnKltMbF1pY2Vuc2UqJywgJ0xFR0FMKicsICdbTGxdZWdhbConLCAnKkdQTConLCAnUkVBRE1FLmxpYyonLCAnQ09QWVJJR0hUKicsICdbQ2Ndb3B5cmlnaHQqJywgJ2VbZHBdbC12MTAnXQogICAgIGxpY2ZpbGVzID0gW10KICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzcmN0cmVlKToKICAgICAgICAgZm9yIGZuIGluIGZpbGVzOgpAQCAtMTE0MiwyOCArMTI5OCwxMyBAQAogICAgIHJldHVybiB2YWx1ZXMKIAogCi1kZWYgY2hlY2tfbnBtKHRpbmZvaWwsIGRlYnVnb25seT1GYWxzZSk6Ci0gICAgdHJ5OgotICAgICAgICByZCA9IHRpbmZvaWwucGFyc2VfcmVjaXBlKCdub2RlanMtbmF0aXZlJykKLSAgICBleGNlcHQgYmIucHJvdmlkZXJzLk5vUHJvdmlkZXI6Ci0gICAgICAgICMgV2Ugc3RpbGwgY29uZGl0aW9uYWxseSBzaG93IHRoZSBtZXNzYWdlIGFuZCBleGl0IHdpdGggdGhlIHNwZWNpYWwKLSAgICAgICAgIyByZXR1cm4gY29kZSwgb3RoZXJ3aXNlIHdlIGNhbid0IHNob3cgdGhlIHByb3BlciBtZXNzYWdlIGZvciBlU0RLCi0gICAgICAgICMgdXNlcnMKLSAgICAgICAgbG9nX2Vycm9yX2NvbmQoJ25vZGVqcy1uYXRpdmUgaXMgcmVxdWlyZWQgZm9yIG5wbSBidXQgaXMgbm90IGF2YWlsYWJsZSAtIHlvdSB3aWxsIGxpa2VseSBuZWVkIHRvIGFkZCBhIGxheWVyIHRoYXQgcHJvdmlkZXMgbm9kZWpzJywgZGVidWdvbmx5KQotICAgICAgICBzeXMuZXhpdCgxNCkKLSAgICBiaW5kaXIgPSByZC5nZXRWYXIoJ1NUQUdJTkdfQklORElSX05BVElWRScpCi0gICAgbnBtcGF0aCA9IG9zLnBhdGguam9pbihiaW5kaXIsICducG0nKQotICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhucG1wYXRoKToKLSAgICAgICAgbG9nX2Vycm9yX2NvbmQoJ25wbSByZXF1aXJlZCB0byBwcm9jZXNzIHNwZWNpZmllZCBzb3VyY2UsIGJ1dCBucG0gaXMgbm90IGF2YWlsYWJsZSAtIHlvdSBuZWVkIHRvIHJ1biBiaXRiYWtlIC1jIGFkZHRvX3JlY2lwZV9zeXNyb290IG5vZGVqcy1uYXRpdmUgZmlyc3QnLCBkZWJ1Z29ubHkpCi0gICAgICAgIHN5cy5leGl0KDE0KQotICAgIHJldHVybiBiaW5kaXIKLQogZGVmIHJlZ2lzdGVyX2NvbW1hbmRzKHN1YnBhcnNlcnMpOgogICAgIHBhcnNlcl9jcmVhdGUgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2NyZWF0ZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdDcmVhdGUgYSBuZXcgcmVjaXBlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdDcmVhdGVzIGEgbmV3IHJlY2lwZSBmcm9tIGEgc291cmNlIHRyZWUnKQogICAgIHBhcnNlcl9jcmVhdGUuYWRkX2FyZ3VtZW50KCdzb3VyY2UnLCBoZWxwPSdQYXRoIG9yIFVSTCB0byBzb3VyY2UnKQogICAgIHBhcnNlcl9jcmVhdGUuYWRkX2FyZ3VtZW50KCctbycsICctLW91dGZpbGUnLCBoZWxwPSdTcGVjaWZ5IGZpbGVuYW1lIGZvciByZWNpcGUgdG8gY3JlYXRlJykKKyAgICBwYXJzZXJfY3JlYXRlLmFkZF9hcmd1bWVudCgnLXAnLCAnLS1wcm92aWRlcycsIGhlbHA9J1NwZWNpZnkgYW4gYWxpYXMgZm9yIHRoZSBpdGVtIHByb3ZpZGVkIGJ5IHRoZSByZWNpcGUnKQogICAgIHBhcnNlcl9jcmVhdGUuYWRkX2FyZ3VtZW50KCctbScsICctLW1hY2hpbmUnLCBoZWxwPSdNYWtlIHJlY2lwZSBtYWNoaW5lLXNwZWNpZmljIGFzIG9wcG9zZWQgdG8gYXJjaGl0ZWN0dXJlLXNwZWNpZmljJywgYWN0aW9uPSdzdG9yZV90cnVlJykKICAgICBwYXJzZXJfY3JlYXRlLmFkZF9hcmd1bWVudCgnLXgnLCAnLS1leHRyYWN0LXRvJywgbWV0YXZhcj0nRVhUUkFDVFBBVEgnLCBoZWxwPSdBc3N1bWluZyBzb3VyY2UgaXMgYSBVUkwsIGZldGNoIGl0IGFuZCBleHRyYWN0IGl0IHRvIHRoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIGFzICUobWV0YXZhcilzJykKICAgICBwYXJzZXJfY3JlYXRlLmFkZF9hcmd1bWVudCgnLU4nLCAnLS1uYW1lJywgaGVscD0nTmFtZSB0byB1c2Ugd2l0aGluIHJlY2lwZSAoUE4pJykKQEAgLTExNzEsMTIgKzEzMTIsMTMgQEAKICAgICBwYXJzZXJfY3JlYXRlLmFkZF9hcmd1bWVudCgnLWInLCAnLS1iaW5hcnknLCBoZWxwPSdUcmVhdCB0aGUgc291cmNlIHRyZWUgYXMgc29tZXRoaW5nIHRoYXQgc2hvdWxkIGJlIGluc3RhbGxlZCB2ZXJiYXRpbSAobm8gY29tcGlsYXRpb24sIHNhbWUgZGlyZWN0b3J5IHN0cnVjdHVyZSknLCBhY3Rpb249J3N0b3JlX3RydWUnKQogICAgIHBhcnNlcl9jcmVhdGUuYWRkX2FyZ3VtZW50KCctLWFsc28tbmF0aXZlJywgaGVscD0nQWxzbyBhZGQgbmF0aXZlIHZhcmlhbnQgKGkuZS4gc3VwcG9ydCBidWlsZGluZyByZWNpcGUgZm9yIHRoZSBidWlsZCBob3N0IGFzIHdlbGwgYXMgdGhlIHRhcmdldCBtYWNoaW5lKScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCiAgICAgcGFyc2VyX2NyZWF0ZS5hZGRfYXJndW1lbnQoJy0tc3JjLXN1YmRpcicsIGhlbHA9J1NwZWNpZnkgc3ViZGlyZWN0b3J5IHdpdGhpbiBzb3VyY2UgdHJlZSB0byB1c2UnLCBtZXRhdmFyPSdTVUJESVInKQotICAgIHBhcnNlcl9jcmVhdGUuYWRkX2FyZ3VtZW50KCctYScsICctLWF1dG9yZXYnLCBoZWxwPSdXaGVuIGZldGNoaW5nIGZyb20gYSBnaXQgcmVwb3NpdG9yeSwgc2V0IFNSQ1JFViBpbiB0aGUgcmVjaXBlIHRvIGEgZmxvYXRpbmcgcmV2aXNpb24gaW5zdGVhZCBvZiBmaXhlZCcsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgZ3JvdXAgPSBwYXJzZXJfY3JlYXRlLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWEnLCAnLS1hdXRvcmV2JywgaGVscD0nV2hlbiBmZXRjaGluZyBmcm9tIGEgZ2l0IHJlcG9zaXRvcnksIHNldCBTUkNSRVYgaW4gdGhlIHJlY2lwZSB0byBhIGZsb2F0aW5nIHJldmlzaW9uIGluc3RlYWQgb2YgZml4ZWQnLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLVMnLCAnLS1zcmNyZXYnLCBoZWxwPSdTb3VyY2UgcmV2aXNpb24gdG8gZmV0Y2ggaWYgZmV0Y2hpbmcgZnJvbSBhbiBTQ00gc3VjaCBhcyBnaXQgKGRlZmF1bHQgbGF0ZXN0KScpCisgICAgcGFyc2VyX2NyZWF0ZS5hZGRfYXJndW1lbnQoJy1CJywgJy0tc3JjYnJhbmNoJywgaGVscD0nQnJhbmNoIGluIHNvdXJjZSByZXBvc2l0b3J5IGlmIGZldGNoaW5nIGZyb20gYW4gU0NNIHN1Y2ggYXMgZ2l0IChkZWZhdWx0IG1hc3RlciknKQogICAgIHBhcnNlcl9jcmVhdGUuYWRkX2FyZ3VtZW50KCctLWtlZXAtdGVtcCcsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9J0tlZXAgdGVtcG9yYXJ5IGRpcmVjdG9yeSAoZm9yIGRlYnVnZ2luZyknKQogICAgIHBhcnNlcl9jcmVhdGUuYWRkX2FyZ3VtZW50KCctLWZldGNoLWRldicsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9J0ZvciBucG0sIGFsc28gZmV0Y2ggZGV2RGVwZW5kZW5jaWVzJykKICAgICBwYXJzZXJfY3JlYXRlLmFkZF9hcmd1bWVudCgnLS1kZXZ0b29sJywgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD1hcmdwYXJzZS5TVVBQUkVTUykKLSAgICAjIEZJWE1FIEkgcmVhbGx5IGhhdGUgaGF2aW5nIHRvIHNldCBwYXJzZXJlY2lwZXMgZm9yIHRoaXMsIGJ1dCBnaXZlbiB3ZSBtYXkgbmVlZAotICAgICMgdG8gY2FsbCBpbnRvIG5wbSAoYW5kIHdlIGRvbid0IGtub3cgaW4gYWR2YW5jZSBpZiB3ZSB3aWxsIG9yIG5vdCkgYW5kIGluIG9yZGVyCi0gICAgIyB0byBkbyBzbyB3ZSBuZWVkIHRvIGtub3cgbnBtJ3MgcmVjaXBlIHN5c3Jvb3QgcGF0aCwgdGhlcmUncyBub3QgbXVjaCBhbHRlcm5hdGl2ZQotICAgIHBhcnNlcl9jcmVhdGUuc2V0X2RlZmF1bHRzKGZ1bmM9Y3JlYXRlX3JlY2lwZSwgcGFyc2VyZWNpcGVzPVRydWUpCisgICAgcGFyc2VyX2NyZWF0ZS5hZGRfYXJndW1lbnQoJy0tbWlycm9ycycsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9J0VuYWJsZSBQUkVNSVJST1JTIGFuZCBNSVJST1JTIGZvciBzb3VyY2UgdHJlZSBmZXRjaGluZyAoZGlzYWJsZWQgYnkgZGVmYXVsdCkuJykKKyAgICBwYXJzZXJfY3JlYXRlLnNldF9kZWZhdWx0cyhmdW5jPWNyZWF0ZV9yZWNpcGUpCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9idWlsZHN5cy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9idWlsZHN5cy5weQppbmRleCBlOTE0ZTUzLi40NzQzYzc0IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfYnVpbGRzeXMucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlX2J1aWxkc3lzLnB5CkBAIC04NjMsNiArODYzLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGZvdW5kdmFsdWVzKSA9PSBsZW4odmFsdWVtYXApOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgIyBEcm9wIHZhbHVlcyBjb250YWluaW5nIHVuZXhwYW5kZWQgUlBNIG1hY3JvcworICAgICAgICBmb3IgayBpbiBsaXN0KGZvdW5kdmFsdWVzLmtleXMoKSk6CisgICAgICAgICAgICBpZiAnJScgaW4gZm91bmR2YWx1ZXNba106CisgICAgICAgICAgICAgICAgZGVsIGZvdW5kdmFsdWVzW2tdCiAgICAgICAgIGlmICdQVicgaW4gZm91bmR2YWx1ZXM6CiAgICAgICAgICAgICBpZiBub3QgdmFsaWRhdGVfcHYoZm91bmR2YWx1ZXNbJ1BWJ10pOgogICAgICAgICAgICAgICAgIGRlbCBmb3VuZHZhbHVlc1snUFYnXQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlX2J1aWxkc3lzX3B5dGhvbi5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9idWlsZHN5c19weXRob24ucHkKaW5kZXggZWM1NDQ5Yi4uNWJkMmFhMyAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlX2J1aWxkc3lzX3B5dGhvbi5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfYnVpbGRzeXNfcHl0aG9uLnB5CkBAIC0zNTYsNiArMzU2LDggQEAKICAgICAgICAgIyBOYWl2ZSBtYXBwaW5nIG9mIHNldHVwKCkgYXJndW1lbnRzIHRvIFBLRy1JTkZPIGZpZWxkIG5hbWVzCiAgICAgICAgIGZvciBkIGluIFtpbmZvLCBub25fbGl0ZXJhbHNdOgogICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gbGlzdChkLml0ZW1zKCkpOgorICAgICAgICAgICAgICAgIGlmIGtleSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIG5ld19rZXkgPSBfbWFwKGtleSkKICAgICAgICAgICAgICAgICBpZiBuZXdfa2V5ICE9IGtleToKICAgICAgICAgICAgICAgICAgICAgZGVsIGRba2V5XQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlX2ttb2QucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfa21vZC5weQppbmRleCA3Y2YxODhkLi40NTY5YjUzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfa21vZC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfa21vZC5weQpAQCAtNDAsNyArNDAsNyBAQAogCiAgICAgICAgIG1ha2VmaWxlcyA9IFtdCiAKLSAgICAgICAgZmlsZXMgPSBSZWNpcGVIYW5kbGVyLmNoZWNrZmlsZXMoc3JjdHJlZSwgWycqLmMnLCAnKi5oJ10sIHJlY3Vyc2l2ZT1UcnVlKQorICAgICAgICBmaWxlcyA9IFJlY2lwZUhhbmRsZXIuY2hlY2tmaWxlcyhzcmN0cmVlLCBbJyouYycsICcqLmgnXSwgcmVjdXJzaXZlPVRydWUsIGV4Y2x1ZGVkaXJzPVsnY29udHJpYicsICd0ZXN0JywgJ2V4YW1wbGVzJ10pCiAgICAgICAgIGlmIGZpbGVzOgogICAgICAgICAgICAgZm9yIGNmaWxlIGluIGZpbGVzOgogICAgICAgICAgICAgICAgICMgTG9vayBpbiBzYW1lIGRpciBvciBwYXJlbnQgZm9yIE1ha2VmaWxlCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfbnBtLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlX25wbS5weQppbmRleCBjYjhmMzM4Li5hZTUzOTcyIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfbnBtLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9ucG0ucHkKQEAgLTIxLDcgKzIxLDcgQEAKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHNodXRpbAogaW1wb3J0IGpzb24KLWZyb20gcmVjaXBldG9vbC5jcmVhdGUgaW1wb3J0IFJlY2lwZUhhbmRsZXIsIHNwbGl0X3BrZ19saWNlbnNlcywgaGFuZGxlX2xpY2Vuc2VfdmFycywgY2hlY2tfbnBtCitmcm9tIHJlY2lwZXRvb2wuY3JlYXRlIGltcG9ydCBSZWNpcGVIYW5kbGVyLCBzcGxpdF9wa2dfbGljZW5zZXMsIGhhbmRsZV9saWNlbnNlX3ZhcnMKIAogbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3JlY2lwZXRvb2wnKQogCkBAIC0zNiw2ICszNiwyNyBAQAogY2xhc3MgTnBtUmVjaXBlSGFuZGxlcihSZWNpcGVIYW5kbGVyKToKICAgICBsb2NrZG93bnBhdGggPSBOb25lCiAKKyAgICBkZWYgX2Vuc3VyZV9ucG0oc2VsZiwgZml4ZWRfc2V0dXA9RmFsc2UpOgorICAgICAgICBpZiBub3QgdGluZm9pbC5yZWNpcGVzX3BhcnNlZDoKKyAgICAgICAgICAgIHRpbmZvaWwucGFyc2VfcmVjaXBlcygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJkID0gdGluZm9pbC5wYXJzZV9yZWNpcGUoJ25vZGVqcy1uYXRpdmUnKQorICAgICAgICBleGNlcHQgYmIucHJvdmlkZXJzLk5vUHJvdmlkZXI6CisgICAgICAgICAgICBpZiBmaXhlZF9zZXR1cDoKKyAgICAgICAgICAgICAgICBtc2cgPSAnbm9kZWpzLW5hdGl2ZSBpcyByZXF1aXJlZCBmb3IgbnBtIGJ1dCBpcyBub3QgYXZhaWxhYmxlIHdpdGhpbiB0aGlzIFNESycKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbXNnID0gJ25vZGVqcy1uYXRpdmUgaXMgcmVxdWlyZWQgZm9yIG5wbSBidXQgaXMgbm90IGF2YWlsYWJsZSAtIHlvdSB3aWxsIGxpa2VseSBuZWVkIHRvIGFkZCBhIGxheWVyIHRoYXQgcHJvdmlkZXMgbm9kZWpzJworICAgICAgICAgICAgbG9nZ2VyLmVycm9yKG1zZykKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGJpbmRpciA9IHJkLmdldFZhcignU1RBR0lOR19CSU5ESVJfTkFUSVZFJykKKyAgICAgICAgbnBtcGF0aCA9IG9zLnBhdGguam9pbihiaW5kaXIsICducG0nKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobnBtcGF0aCk6CisgICAgICAgICAgICB0aW5mb2lsLmJ1aWxkX3RhcmdldHMoJ25vZGVqcy1uYXRpdmUnLCAnYWRkdG9fcmVjaXBlX3N5c3Jvb3QnKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG5wbXBhdGgpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignbnBtIHJlcXVpcmVkIHRvIHByb2Nlc3Mgc3BlY2lmaWVkIHNvdXJjZSwgYnV0IG5vZGVqcy1uYXRpdmUgZGlkIG5vdCBzZWVtIHRvIHBvcHVsYXRlIGl0JykKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gYmluZGlyCisKICAgICBkZWYgX2hhbmRsZV9saWNlbnNlKHNlbGYsIGRhdGEpOgogICAgICAgICAnJycKICAgICAgICAgSGFuZGxlIHRoZSBsaWNlbnNlIHZhbHVlIGZyb20gYW4gbnBtIHBhY2thZ2UuanNvbiBmaWxlCkBAIC0xMDksNyArMTMwLDYgQEAKICAgICAgICAgICAgIGlmIHZhcm5hbWUgPT0gJ1NSQ19VUkknOgogICAgICAgICAgICAgICAgIGlmIG5vdCBvcmlndmFsdWUuc3RhcnRzd2l0aCgnbnBtOi8vJyk6CiAgICAgICAgICAgICAgICAgICAgIHNyY191cmkgPSBvcmlndmFsdWUuc3BsaXQoKQotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gRmFsc2UKICAgICAgICAgICAgICAgICAgICAgZGVwbGlzdCA9IHt9CiAgICAgICAgICAgICAgICAgICAgIGZvciBkZXAsIGRlcHZlciBpbiBvcHRkZXBzLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBkZXBkYXRhID0gc2VsZi5nZXRfbnBtX2RhdGEoZGVwLCBkZXB2ZXIsIGQpCkBAIC0xMjMsMTQgKzE0MywxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZGVwZGF0YSA9IHNlbGYuZ2V0X25wbV9kYXRhKGRlcCwgZGVwdmVyLCBkKQogICAgICAgICAgICAgICAgICAgICAgICAgZGVwbGlzdFtkZXBdID0gZGVwZGF0YQogCisgICAgICAgICAgICAgICAgICAgIGV4dHJhX3VybHMgPSBbXQogICAgICAgICAgICAgICAgICAgICBmb3IgZGVwLCBkZXBkYXRhIGluIGRlcGxpc3QuaXRlbXMoKToKICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gPSBkZXBkYXRhLmdldCgndmVyc2lvbicsIE5vbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2ZXJzaW9uOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9ICducG06Ly9yZWdpc3RyeS5ucG1qcy5vcmc7bmFtZT0lczt2ZXJzaW9uPSVzO3N1YmRpcj1ub2RlX21vZHVsZXMvJXMnICUgKGRlcCwgdmVyc2lvbiwgZGVwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdHV0aWxzLmZldGNoX3VyaShkLCB1cmwsIHNyY3RyZWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3VyaS5hcHBlbmQodXJsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgIGlmIGNoYW5nZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfdXJscy5hcHBlbmQodXJsKQorICAgICAgICAgICAgICAgICAgICBpZiBleHRyYV91cmxzOgorICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0dXRpbHMuZmV0Y2hfdXJsKHRpbmZvaWwsICcgJy5qb2luKGV4dHJhX3VybHMpLCBOb25lLCBzcmN0cmVlLCBsb2dnZXIpCisgICAgICAgICAgICAgICAgICAgICAgICBzcmNfdXJpLmV4dGVuZChleHRyYV91cmxzKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNyY191cmksIE5vbmUsIC0xLCBUcnVlCiAgICAgICAgICAgICByZXR1cm4gb3JpZ3ZhbHVlLCBOb25lLCAwLCBUcnVlCiAgICAgICAgIHVwZGF0ZWQsIG5ld2xpbmVzID0gYmIudXRpbHMuZWRpdF9tZXRhZGF0YShsaW5lc19iZWZvcmUsIFsnU1JDX1VSSSddLCB2YXJmdW5jKQpAQCAtMTQzLDQwICsxNjQsOSBAQAogICAgICAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQobGluZSkKICAgICAgICAgcmV0dXJuIHVwZGF0ZWQKIAotICAgIGRlZiBfcmVwbGFjZV9saWNlbnNlX3ZhcnMoc2VsZiwgc3JjdHJlZSwgbGluZXNfYmVmb3JlLCBoYW5kbGVkLCBleHRyYXZhbHVlcywgZCk6Ci0gICAgICAgIGZvciBpdGVtIGluIGhhbmRsZWQ6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGl0ZW0sIHR1cGxlKToKLSAgICAgICAgICAgICAgICBpZiBpdGVtWzBdID09ICdsaWNlbnNlJzoKLSAgICAgICAgICAgICAgICAgICAgZGVsIGl0ZW0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLQotICAgICAgICBjYWxsZWR2YXJzID0gW10KLSAgICAgICAgZGVmIHZhcmZ1bmModmFybmFtZSwgb3JpZ3ZhbHVlLCBvcCwgbmV3bGluZXMpOgotICAgICAgICAgICAgaWYgdmFybmFtZSBpbiBbJ0xJQ0VOU0UnLCAnTElDX0ZJTEVTX0NIS1NVTSddOgotICAgICAgICAgICAgICAgIGZvciBpLCBlIGluIGVudW1lcmF0ZShyZXZlcnNlZChuZXdsaW5lcykpOgotICAgICAgICAgICAgICAgICAgICBpZiBub3QgZS5zdGFydHN3aXRoKCcjJyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdG9wID0gaQotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgc3RvcCA+IDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZXMucG9wKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wIC09IDEKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgY2FsbGVkdmFycy5hcHBlbmQodmFybmFtZSkKLSAgICAgICAgICAgICAgICBpZiBsZW4oY2FsbGVkdmFycykgPiAxOgotICAgICAgICAgICAgICAgICAgICAjIFRoZSBzZWNvbmQgdGltZSBhcm91bmQsIHB1dCB0aGUgbmV3IGxpY2Vuc2UgdGV4dCBpbgotICAgICAgICAgICAgICAgICAgICBpbnNlcnRwb3MgPSBsZW4obmV3bGluZXMpCi0gICAgICAgICAgICAgICAgICAgIGhhbmRsZV9saWNlbnNlX3ZhcnMoc3JjdHJlZSwgbmV3bGluZXMsIGhhbmRsZWQsIGV4dHJhdmFsdWVzLCBkKQotICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCBOb25lLCAwLCBUcnVlCi0gICAgICAgICAgICByZXR1cm4gb3JpZ3ZhbHVlLCBOb25lLCAwLCBUcnVlCi0gICAgICAgIHVwZGF0ZWQsIG5ld2xpbmVzID0gYmIudXRpbHMuZWRpdF9tZXRhZGF0YShsaW5lc19iZWZvcmUsIFsnTElDRU5TRScsICdMSUNfRklMRVNfQ0hLU1VNJ10sIHZhcmZ1bmMpCi0gICAgICAgIGlmIHVwZGF0ZWQ6Ci0gICAgICAgICAgICBkZWwgbGluZXNfYmVmb3JlWzpdCi0gICAgICAgICAgICBsaW5lc19iZWZvcmUuZXh0ZW5kKG5ld2xpbmVzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdEaWQgbm90IGZpbmQgbGljZW5zZSB2YXJpYWJsZXMnKQotCiAgICAgZGVmIHByb2Nlc3Moc2VsZiwgc3JjdHJlZSwgY2xhc3NlcywgbGluZXNfYmVmb3JlLCBsaW5lc19hZnRlciwgaGFuZGxlZCwgZXh0cmF2YWx1ZXMpOgogICAgICAgICBpbXBvcnQgYmIudXRpbHMKLSAgICAgICAgaW1wb3J0IG9lCisgICAgICAgIGltcG9ydCBvZS5wYWNrYWdlCiAgICAgICAgIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CiAKICAgICAgICAgaWYgJ2J1aWxkc3lzdGVtJyBpbiBoYW5kbGVkOgpAQCAtMTg5LDcgKzE3OSw5IEBACiAgICAgICAgIGZpbGVzID0gUmVjaXBlSGFuZGxlci5jaGVja2ZpbGVzKHNyY3RyZWUsIFsncGFja2FnZS5qc29uJ10pCiAgICAgICAgIGlmIGZpbGVzOgogICAgICAgICAgICAgZCA9IGJiLmRhdGEuY3JlYXRlQ29weSh0aW5mb2lsLmNvbmZpZ19kYXRhKQotICAgICAgICAgICAgbnBtX2JpbmRpciA9IGNoZWNrX25wbSh0aW5mb2lsLCBzZWxmLl9kZXZ0b29sKQorICAgICAgICAgICAgbnBtX2JpbmRpciA9IHNlbGYuX2Vuc3VyZV9ucG0oKQorICAgICAgICAgICAgaWYgbm90IG5wbV9iaW5kaXI6CisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMTQpCiAgICAgICAgICAgICBkLnByZXBlbmRWYXIoJ1BBVEgnLCAnJXM6JyAlIG5wbV9iaW5kaXIpCiAKICAgICAgICAgICAgIGRhdGEgPSByZWFkX3BhY2thZ2VfanNvbihmaWxlc1swXSkKQEAgLTIwNSwxMCArMTk3LDcgQEAKIAogICAgICAgICAgICAgICAgIGZldGNoZGV2ID0gZXh0cmF2YWx1ZXNbJ2ZldGNoZGV2J10gb3IgTm9uZQogICAgICAgICAgICAgICAgIGRlcHMsIG9wdGRlcHMsIGRldmRlcHMgPSBzZWxmLmdldF9ucG1fcGFja2FnZV9kZXBlbmRlbmNpZXMoZGF0YSwgZmV0Y2hkZXYpCi0gICAgICAgICAgICAgICAgdXBkYXRlZCA9IHNlbGYuX2hhbmRsZV9kZXBlbmRlbmNpZXMoZCwgZGVwcywgb3B0ZGVwcywgZGV2ZGVwcywgbGluZXNfYmVmb3JlLCBzcmN0cmVlKQotICAgICAgICAgICAgICAgIGlmIHVwZGF0ZWQ6Ci0gICAgICAgICAgICAgICAgICAgICMgV2UgbmVlZCB0byByZWRvIHRoZSBsaWNlbnNlIHN0dWZmCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlcGxhY2VfbGljZW5zZV92YXJzKHNyY3RyZWUsIGxpbmVzX2JlZm9yZSwgaGFuZGxlZCwgZXh0cmF2YWx1ZXMsIGQpCisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX2RlcGVuZGVuY2llcyhkLCBkZXBzLCBvcHRkZXBzLCBkZXZkZXBzLCBsaW5lc19iZWZvcmUsIHNyY3RyZWUpCiAKICAgICAgICAgICAgICAgICAjIFNocmlua3dyYXAKICAgICAgICAgICAgICAgICBsb2NhbGZpbGVzZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J3JlY2lwZXRvb2wtbnBtJykKQEAgLTIxOSwxMSArMjA4LDE0IEBACiAKICAgICAgICAgICAgICAgICAjIFNwbGl0IGVhY2ggbnBtIG1vZHVsZSBvdXQgdG8gaXMgb3duIHBhY2thZ2UKICAgICAgICAgICAgICAgICBucG1wYWNrYWdlcyA9IG9lLnBhY2thZ2UubnBtX3NwbGl0X3BhY2thZ2VfZGlycyhzcmN0cmVlKQorICAgICAgICAgICAgICAgIGxpY3ZhbHVlcyA9IE5vbmUKICAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiBoYW5kbGVkOgogICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGl0ZW0sIHR1cGxlKToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGl0ZW1bMF0gPT0gJ2xpY2Vuc2UnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpY3ZhbHVlcyA9IGl0ZW1bMV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIG5vdCBsaWN2YWx1ZXM6CisgICAgICAgICAgICAgICAgICAgIGxpY3ZhbHVlcyA9IGhhbmRsZV9saWNlbnNlX3ZhcnMoc3JjdHJlZSwgbGluZXNfYmVmb3JlLCBoYW5kbGVkLCBleHRyYXZhbHVlcywgZCkKICAgICAgICAgICAgICAgICBpZiBsaWN2YWx1ZXM6CiAgICAgICAgICAgICAgICAgICAgICMgQXVnbWVudCB0aGUgbGljZW5zZSBsaXN0IHdpdGggaW5mb3JtYXRpb24gd2UgaGF2ZSBpbiB0aGUgcGFja2FnZXMKICAgICAgICAgICAgICAgICAgICAgbGljZW5zZXMgPSB7fQpAQCAtMjQ0LDEzICsyMzYsNyBAQAogICAgICAgICAgICAgICAgICAgICBhbGxfbGljZW5zZXMgPSBsaXN0KHNldChbaXRlbS5yZXBsYWNlKCdfJywgJyAnKSBmb3IgcGtnbGljZW5zZSBpbiBwa2dsaWNlbnNlcy52YWx1ZXMoKSBmb3IgaXRlbSBpbiBwa2dsaWNlbnNlXSkpCiAgICAgICAgICAgICAgICAgICAgIGlmICcmJyBpbiBhbGxfbGljZW5zZXM6CiAgICAgICAgICAgICAgICAgICAgICAgICBhbGxfbGljZW5zZXMucmVtb3ZlKCcmJykKLSAgICAgICAgICAgICAgICAgICAgIyBHbyBiYWNrIGFuZCB1cGRhdGUgdGhlIExJQ0VOU0UgdmFsdWUgc2luY2Ugd2UgaGF2ZSBhIGJpdCBtb3JlCi0gICAgICAgICAgICAgICAgICAgICMgaW5mb3JtYXRpb24gdGhhbiB3aGVuIHRoYXQgd2FzIHdyaXR0ZW4gb3V0IChhbmQgd2Uga25vdyBhbGwgYXBwbHkKLSAgICAgICAgICAgICAgICAgICAgIyB2cy4gdGhlcmUgYmVpbmcgYSBjaG9pY2UsIHNvIHdlIGNhbiBqb2luIHRoZW0gd2l0aCAmKQotICAgICAgICAgICAgICAgICAgICBmb3IgaSwgbGluZSBpbiBlbnVtZXJhdGUobGluZXNfYmVmb3JlKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnTElDRU5TRSA9ICcpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzX2JlZm9yZVtpXSA9ICdMSUNFTlNFID0gIiVzIicgJSAnICYgJy5qb2luKGFsbF9saWNlbnNlcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBleHRyYXZhbHVlc1snTElDRU5TRSddID0gJyAmICcuam9pbihhbGxfbGljZW5zZXMpCiAKICAgICAgICAgICAgICAgICAjIE5lZWQgdG8gbW92ZSBTIHNldHRpbmcgYWZ0ZXIgaW5oZXJpdCBucG0KICAgICAgICAgICAgICAgICBmb3IgaSwgbGluZSBpbiBlbnVtZXJhdGUobGluZXNfYmVmb3JlKToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL25ld2FwcGVuZC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL25ld2FwcGVuZC5weQppbmRleCAwYjYzNzU5Li5kZWNjZTgzIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9uZXdhcHBlbmQucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvbmV3YXBwZW5kLnB5CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgICAgICByZXR1cm4gMQogCiAgICAgaWYgYXJncy5lZGl0OgotICAgICAgICByZXR1cm4gc2NyaXB0dXRpbHMucnVuX2VkaXRvcihbYXBwZW5kX3BhdGgsIHJlY2lwZV9wYXRoXSkKKyAgICAgICAgcmV0dXJuIHNjcmlwdHV0aWxzLnJ1bl9lZGl0b3IoW2FwcGVuZF9wYXRoLCByZWNpcGVfcGF0aF0sIGxvZ2dlcikKICAgICBlbHNlOgogICAgICAgICBwcmludChhcHBlbmRfcGF0aCkKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3NjcmlwdHV0aWxzLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3NjcmlwdHV0aWxzLnB5CmluZGV4IDkyYjYwMWMuLjg1YjFjOTQgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9zY3JpcHR1dGlscy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvc2NyaXB0dXRpbHMucHkKQEAgLTIzLDYgKzIzLDggQEAKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCBzaHV0aWwKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBzdHJpbmcKIAogZGVmIGxvZ2dlcl9jcmVhdGUobmFtZSwgc3RyZWFtPU5vbmUpOgogICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKG5hbWUpCkBAIC03OCw1MiArODAsMTM5IEBACiAgICAgICAgICAgICBiYi5wcm9jZXNzLnJ1bignZ2l0IHJlcGFjayAtYScsIGN3ZD1yZXBvZGlyKQogICAgICAgICAgICAgb3MucmVtb3ZlKGFsdGVybmF0ZXNmaWxlKQogCi1kZWYgZmV0Y2hfdXJpKGQsIHVyaSwgZGVzdGRpciwgc3JjcmV2PU5vbmUpOgotICAgICIiIkZldGNoIGEgVVJJIHRvIGEgbG9jYWwgZGlyZWN0b3J5IiIiCitkZWYgX2dldF90ZW1wX3JlY2lwZV9kaXIoZCk6CisgICAgIyBUaGlzIGlzIGEgbGl0dGxlIGJpdCBoYWNreSBidXQgd2UgbmVlZCB0byBmaW5kIGEgcGxhY2Ugd2hlcmUgd2UgY2FuIHB1dAorICAgICMgdGhlIHJlY2lwZSBzbyB0aGF0IGJpdGJha2UgY2FuIGZpbmQgaXQuIFdlJ3JlIGdvaW5nIHRvIGRlbGV0ZSBpdCBhdCB0aGUKKyAgICAjIGVuZCBzbyBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgd2hlcmUgd2UgcHV0IGl0LgorICAgIGJiZmlsZXMgPSBkLmdldFZhcignQkJGSUxFUycpLnNwbGl0KCkKKyAgICBmZXRjaHJlY2lwZWRpciA9IE5vbmUKKyAgICBmb3IgcHRoIGluIGJiZmlsZXM6CisgICAgICAgIGlmIHB0aC5lbmRzd2l0aCgnLmJiJyk6CisgICAgICAgICAgICBwdGhkaXIgPSBvcy5wYXRoLmRpcm5hbWUocHRoKQorICAgICAgICAgICAgaWYgb3MuYWNjZXNzKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUocHRoZGlyKSksIG9zLldfT0spOgorICAgICAgICAgICAgICAgIGZldGNocmVjaXBlZGlyID0gcHRoZGlyLnJlcGxhY2UoJyonLCAncmVjaXBldG9vbCcpCisgICAgICAgICAgICAgICAgaWYgcHRoZGlyLmVuZHN3aXRoKCd3b3Jrc3BhY2UvcmVjaXBlcy8qJyk6CisgICAgICAgICAgICAgICAgICAgICMgUHJlZmVyIHRoZSB3b3Jrc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICByZXR1cm4gZmV0Y2hyZWNpcGVkaXIKKworY2xhc3MgRmV0Y2hVcmxGYWlsdXJlKEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybCk6CisgICAgICAgIHNlbGYudXJsID0gdXJsCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiRmFpbGVkIHRvIGZldGNoIFVSTCAlcyIgJSBzZWxmLnVybAorCitkZWYgZmV0Y2hfdXJsKHRpbmZvaWwsIHNyY3VyaSwgc3JjcmV2LCBkZXN0ZGlyLCBsb2dnZXIsIHByZXNlcnZlX3RtcD1GYWxzZSwgbWlycm9ycz1GYWxzZSk6CisgICAgIiIiCisgICAgRmV0Y2ggdGhlIHNwZWNpZmllZCBVUkwgdXNpbmcgbm9ybWFsIGRvX2ZldGNoIGFuZCBkb191bnBhY2sgdGFza3MsIGkuZS4KKyAgICBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgbmVlZCB0byBiZSBzYXRpc2ZpZWQgaW4gb3JkZXIgdG8gc3VwcG9ydCB0aGUgZmV0Y2gKKyAgICBvcGVyYXRpb24gd2lsbCBiZSB0YWtlbiBjYXJlIG9mCisgICAgIiIiCisKICAgICBpbXBvcnQgYmIKLSAgICB0bXBwYXJlbnQgPSBkLmdldFZhcignQkFTRV9XT1JLRElSJykKKworICAgIGNoZWNrc3VtcyA9IHt9CisgICAgZmV0Y2hyZWNpcGVwbiA9IE5vbmUKKworICAgICMgV2UgbmVlZCB0byBwdXQgb3VyIHRlbXAgZGlyZWN0b3J5IHVuZGVyICR7QkFTRV9XT1JLRElSfSBvdGhlcndpc2UKKyAgICAjIHdlIG1heSBoYXZlIHByb2JsZW1zIHdpdGggdGhlIHJlY2lwZS1zcGVjaWZpYyBzeXNyb290IHBvcHVsYXRpb24KKyAgICB0bXBwYXJlbnQgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignQkFTRV9XT1JLRElSJykKICAgICBiYi51dGlscy5ta2RpcmhpZXIodG1wcGFyZW50KQotICAgIHRtcHdvcmtkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKGRpcj10bXBwYXJlbnQpCisgICAgdG1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J3JlY2lwZXRvb2wtJywgZGlyPXRtcHBhcmVudCkKICAgICB0cnk6Ci0gICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihkZXN0ZGlyKQotICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgdG1wd29ya2RpciA9IG9zLnBhdGguam9pbih0bXBkaXIsICd3b3JrJykKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdmZXRjaF91cmw6IHRlbXAgZGlyIGlzICVzJyAlIHRtcGRpcikKIAotICAgICAgICAjIFNldCBzb21lIHZhbHVlcyB0byBhbGxvdyBleHRlbmRfcmVjaXBlX3N5c3Jvb3QgdG8gd29yayBoZXJlIHdlJ3JlIHdlIGFyZSBub3QgcnVubmluZyBmcm9tIGEgdGFzawotICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdXT1JLRElSJywgdG1wd29ya2RpcikKLSAgICAgICAgbG9jYWxkYXRhLnNldFZhcignQkJfUlVOVEFTSycsICdkb19mZXRjaCcpCi0gICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BOJywgJ2R1bW15JykKLSAgICAgICAgbG9jYWxkYXRhLnNldFZhcignQkJfTElNSVRFRERFUFMnLCAnMScpCi0gICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiZXh0ZW5kX3JlY2lwZV9zeXNyb290IiwgbG9jYWxkYXRhKQotCi0gICAgICAgICMgU2V0IHNvbWUgdmFsdWVzIGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgZmV0Y2hlciBjb2RlCi0gICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0JCX1NUUklDVF9DSEVDS1NVTScsICcnKQotICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdTUkNSRVYnLCBzcmNyZXYpCi0gICAgICAgIHJldCA9IChOb25lLCBOb25lKQotICAgICAgICBvbGRkaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBmZXRjaHJlY2lwZWRpciA9IF9nZXRfdGVtcF9yZWNpcGVfZGlyKHRpbmZvaWwuY29uZmlnX2RhdGEpCisgICAgICAgIGlmIG5vdCBmZXRjaHJlY2lwZWRpcjoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignU2VhcmNoZWQgQkJGSUxFUyBidXQgdW5hYmxlIHRvIGZpbmQgYSB3cml0ZWFibGUgcGxhY2UgdG8gcHV0IHRlbXBvcmFyeSByZWNpcGUnKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgZmV0Y2hyZWNpcGUgPSBOb25lCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihmZXRjaHJlY2lwZWRpcikKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChbdXJpXSwgbG9jYWxkYXRhKQotICAgICAgICAgICAgZm9yIHUgaW4gZmV0Y2hlci51ZDoKLSAgICAgICAgICAgICAgICB1ZCA9IGZldGNoZXIudWRbdV0KLSAgICAgICAgICAgICAgICB1ZC5pZ25vcmVfY2hlY2tzdW1zID0gVHJ1ZQotICAgICAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCi0gICAgICAgICAgICBmb3IgdSBpbiBmZXRjaGVyLnVkOgotICAgICAgICAgICAgICAgIHVkID0gZmV0Y2hlci51ZFt1XQotICAgICAgICAgICAgICAgIGlmIHVkLmxvY2FscGF0aC5yc3RyaXAob3Muc2VwKSA9PSBsb2NhbGRhdGEuZ2V0VmFyKCdETF9ESVInKS5yc3RyaXAob3Muc2VwKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdMb2NhbCBwYXRoIGlzIGRvd25sb2FkIGRpcmVjdG9yeSAtIHBsZWFzZSBjaGVjayB0aGF0IHRoZSBVUkkgIiVzIiBpcyBjb3JyZWN0JyAlIHVyaSkKLSAgICAgICAgICAgIGZldGNoZXIudW5wYWNrKGRlc3RkaXIpCi0gICAgICAgICAgICBmb3IgdSBpbiBmZXRjaGVyLnVkOgotICAgICAgICAgICAgICAgIHVkID0gZmV0Y2hlci51ZFt1XQotICAgICAgICAgICAgICAgIGlmIHVkLm1ldGhvZC5yZWNvbW1lbmRzX2NoZWNrc3VtKHVkKToKLSAgICAgICAgICAgICAgICAgICAgbWQ1dmFsdWUgPSBiYi51dGlscy5tZDVfZmlsZSh1ZC5sb2NhbHBhdGgpCi0gICAgICAgICAgICAgICAgICAgIHNoYTI1NnZhbHVlID0gYmIudXRpbHMuc2hhMjU2X2ZpbGUodWQubG9jYWxwYXRoKQotICAgICAgICAgICAgICAgICAgICByZXQgPSAobWQ1dmFsdWUsIHNoYTI1NnZhbHVlKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MuY2hkaXIob2xkZGlyKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIHNodXRpbC5ybXRyZWUodG1wd29ya2RpcikKLSAgICByZXR1cm4gcmV0CisgICAgICAgICAgICAjIEdlbmVyYXRlIGEgZHVtbXkgcmVjaXBlIHNvIHdlIGNhbiBmb2xsb3cgbW9yZSBvciBsZXNzIG5vcm1hbCBwYXRocworICAgICAgICAgICAgIyBmb3IgZG9fZmV0Y2ggYW5kIGRvX3VucGFjaworICAgICAgICAgICAgIyBJJ2QgdXNlIHRlbXBmaWxlIGZ1bmN0aW9ucyBoZXJlIGJ1dCB1bmRlcnNjb3JlcyBjYW4gYmUgcHJvZHVjZWQgYnkgdGhhdCBhbmQgdGhvc2UKKyAgICAgICAgICAgICMgYXJlbid0IGFsbG93ZWQgaW4gcmVjaXBlIGZpbGUgbmFtZXMgZXhjZXB0IHRvIHNlcGFyYXRlIHRoZSB2ZXJzaW9uCisgICAgICAgICAgICBybmRzdHJpbmcgPSAnJy5qb2luKHJhbmRvbS5jaG9pY2Uoc3RyaW5nLmFzY2lpX2xvd2VyY2FzZSArIHN0cmluZy5kaWdpdHMpIGZvciBfIGluIHJhbmdlKDgpKQorICAgICAgICAgICAgZmV0Y2hyZWNpcGUgPSBvcy5wYXRoLmpvaW4oZmV0Y2hyZWNpcGVkaXIsICd0bXAtcmVjaXBldG9vbC0lcy5iYicgJSBybmRzdHJpbmcpCisgICAgICAgICAgICBmZXRjaHJlY2lwZXBuID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGZldGNocmVjaXBlKSlbMF0KKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnR2VuZXJhdGluZyBpbml0aWFsIHJlY2lwZSAlcyBmb3IgZmV0Y2hpbmcnICUgZmV0Y2hyZWNpcGUpCisgICAgICAgICAgICB3aXRoIG9wZW4oZmV0Y2hyZWNpcGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICAjIFdlIGRvbid0IHdhbnQgdG8gaGF2ZSB0byBzcGVjaWZ5IExJQ19GSUxFU19DSEtTVU0KKyAgICAgICAgICAgICAgICBmLndyaXRlKCdMSUNFTlNFID0gIkNMT1NFRCJcbicpCisgICAgICAgICAgICAgICAgIyBXZSBkb24ndCBuZWVkIHRoZSBjcm9zcy1jb21waWxlcgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiXG4nKQorICAgICAgICAgICAgICAgICMgV2UgZG9uJ3QgaGF2ZSB0aGUgY2hlY2tzdW1zIHlldCBzbyB3ZSBjYW4ndCByZXF1aXJlIHRoZW0KKyAgICAgICAgICAgICAgICBmLndyaXRlKCdCQl9TVFJJQ1RfQ0hFQ0tTVU0gPSAiaWdub3JlIlxuJykKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdTUkNfVVJJID0gIiVzIlxuJyAlIHNyY3VyaSkKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdTUkNSRVYgPSAiJXMiXG4nICUgc3JjcmV2KQorICAgICAgICAgICAgICAgIGYud3JpdGUoJ1dPUktESVIgPSAiJXMiXG4nICUgdG1wd29ya2RpcikKKyAgICAgICAgICAgICAgICAjIFNldCBTIG91dCBvZiB0aGUgd2F5IHNvIGl0IGRvZXNuJ3QgZ2V0IGNyZWF0ZWQgdW5kZXIgdGhlIHdvcmtkaXIKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdTID0gIiVzIlxuJyAlIG9zLnBhdGguam9pbih0bXBkaXIsICdlbXB0eXNyYycpKQorICAgICAgICAgICAgICAgIGlmIG5vdCBtaXJyb3JzOgorICAgICAgICAgICAgICAgICAgICAjIFdlIGRvIG5vdCBuZWVkIFBSRU1JUlJPUlMgc2luY2Ugd2UgYXJlIGFsbW9zdCBjZXJ0YWlubHkKKyAgICAgICAgICAgICAgICAgICAgIyBmZXRjaGluZyBuZXcgc291cmNlIHJhdGhlciB0aGFuIHNvbWV0aGluZyB0aGF0IGhhcyBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgICMgYmVlbiBmZXRjaGVkLiBIZW5jZSwgd2UgZGlzYWJsZSB0aGVtIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgICAgICMgSG93ZXZlciwgd2UgcHJvdmlkZSBhbiBvcHRpb24gZm9yIHVzZXJzIHRvIGVuYWJsZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnUFJFTUlSUk9SUyA9ICIiXG4nKQorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCdNSVJST1JTID0gIiJcbicpCiAKLWRlZiBydW5fZWRpdG9yKGZuKToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdGZXRjaGluZyAlcy4uLicgJSBzcmN1cmkpCisKKyAgICAgICAgICAgICMgRklYTUUgdGhpcyBpcyB0b28gbm9pc3kgYXQgdGhlIG1vbWVudAorCisgICAgICAgICAgICAjIFBhcnNlIHJlY2lwZXMgc28gb3VyIG5ldyByZWNpcGUgZ2V0cyBwaWNrZWQgdXAKKyAgICAgICAgICAgIHRpbmZvaWwucGFyc2VfcmVjaXBlcygpCisKKyAgICAgICAgICAgIGRlZiBldmVudGhhbmRsZXIoZXZlbnQpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmZldGNoMi5NaXNzaW5nQ2hlY2tzdW1FdmVudCk6CisgICAgICAgICAgICAgICAgICAgIGNoZWNrc3Vtcy51cGRhdGUoZXZlbnQuY2hlY2tzdW1zKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICAgICAjIFJ1biB0aGUgZmV0Y2ggKyB1bnBhY2sgdGFza3MKKyAgICAgICAgICAgIHJlcyA9IHRpbmZvaWwuYnVpbGRfdGFyZ2V0cyhmZXRjaHJlY2lwZXBuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkb191bnBhY2snLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9ldmVudHM9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9ldmVudHM9WydiYi5mZXRjaDIuTWlzc2luZ0NoZWNrc3VtRXZlbnQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF9jYWxsYmFjaz1ldmVudGhhbmRsZXIpCisgICAgICAgICAgICBpZiBub3QgcmVzOgorICAgICAgICAgICAgICAgIHJhaXNlIEZldGNoVXJsRmFpbHVyZShzcmN1cmkpCisKKyAgICAgICAgICAgICMgUmVtb3ZlIHVubmVlZGVkIGRpcmVjdG9yaWVzCisgICAgICAgICAgICByZCA9IHRpbmZvaWwucGFyc2VfcmVjaXBlKGZldGNocmVjaXBlcG4pCisgICAgICAgICAgICBpZiByZDoKKyAgICAgICAgICAgICAgICBwYXRodmFycyA9IFsnVCcsICdSRUNJUEVfU1lTUk9PVCcsICdSRUNJUEVfU1lTUk9PVF9OQVRJVkUnXQorICAgICAgICAgICAgICAgIGZvciBwYXRodmFyIGluIHBhdGh2YXJzOgorICAgICAgICAgICAgICAgICAgICBwYXRoID0gcmQuZ2V0VmFyKHBhdGh2YXIpCisgICAgICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUocGF0aCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIGZldGNocmVjaXBlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGZldGNocmVjaXBlKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnJtZGlyKGZldGNocmVjaXBlZGlyKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpbXBvcnQgZXJybm8KKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT1RFTVBUWToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZGVzdGRpcikKKyAgICAgICAgZm9yIGZuIGluIG9zLmxpc3RkaXIodG1wd29ya2Rpcik6CisgICAgICAgICAgICBzaHV0aWwubW92ZShvcy5wYXRoLmpvaW4odG1wd29ya2RpciwgZm4pLCBkZXN0ZGlyKQorCisgICAgZmluYWxseToKKyAgICAgICAgaWYgbm90IHByZXNlcnZlX3RtcDoKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUodG1wZGlyKQorICAgICAgICAgICAgdG1wZGlyID0gTm9uZQorCisgICAgcmV0dXJuIGNoZWNrc3VtcywgdG1wZGlyCisKKworZGVmIHJ1bl9lZGl0b3IoZm4sIGxvZ2dlcj1Ob25lKToKICAgICBpZiBpc2luc3RhbmNlKGZuLCBzdHIpOgogICAgICAgICBwYXJhbXMgPSAnIiVzIicgJSBmbgogICAgIGVsc2U6CkBAIC0xMzQsOCArMjIzLDggQEAKICAgICBlZGl0b3IgPSBvcy5nZXRlbnYoJ1ZJU1VBTCcsIG9zLmdldGVudignRURJVE9SJywgJ3ZpJykpCiAgICAgdHJ5OgogICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5jaGVja19jYWxsKCclcyAlcycgJSAoZWRpdG9yLCBwYXJhbXMpLCBzaGVsbD1UcnVlKQotICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKLSAgICAgICAgbG9nZ2VyLmVycm9yKCJFeGVjdXRpb24gb2YgZWRpdG9yICclcycgZmFpbGVkOiAlcyIsIGVkaXRvciwgZXhjKQorICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBleGM6CisgICAgICAgIGxvZ2dlci5lcnJvcigiRXhlY3V0aW9uIG9mICclcycgZmFpbGVkOiAlcyIgJSAoZWRpdG9yLCBleGMpKQogICAgICAgICByZXR1cm4gMQogCiBkZWYgaXNfc3JjX3VybChwYXJhbSk6CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvY29tbW9uLndrcy5pbmMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvY29tbW9uLndrcy5pbmMKaW5kZXggNWNmMmZkMS4uODk4ODBiNCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL2NvbW1vbi53a3MuaW5jCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9jb21tb24ud2tzLmluYwpAQCAtMSwzICsxLDMgQEAKICMgVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGludG8gMyBjYW5uZWQgd2tzIGZpbGVzIGZyb20gdGhpcyBkaXJlY3RvcnkKIHBhcnQgL2Jvb3QgLS1zb3VyY2UgYm9vdGltZy1wY2Jpb3MgLS1vbmRpc2sgc2RhIC0tbGFiZWwgYm9vdCAtLWFjdGl2ZSAtLWFsaWduIDEwMjQKLXBhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDQgLS1sYWJlbCBwbGF0Zm9ybSAtLWFsaWduIDEwMjQKK3BhcnQgLyAtLXNvdXJjZSByb290ZnMgLS11c2UtdXVpZCAtLWZzdHlwZT1leHQ0IC0tbGFiZWwgcGxhdGZvcm0gLS1hbGlnbiAxMDI0CmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay1ib290bG9hZGVyLWNvbmZpZy5jZmcgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay1ib290bG9hZGVyLWNvbmZpZy5jZmcKaW5kZXggZDVhMDdkMi4uYzU4ZTc0YSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL2RpcmVjdGRpc2stYm9vdGxvYWRlci1jb25maWcuY2ZnCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrLWJvb3Rsb2FkZXItY29uZmlnLmNmZwpAQCAtMTIsMTYgKzEyLDE2IEBACiAKIExBQkVMIEdyYXBoaWNzIGNvbnNvbGUgYm9vdAogS0VSTkVMIC92bWxpbnV6Ci1BUFBFTkQgbGFiZWw9Ym9vdCByb290PS9kZXYvc2RhMiByb290d2FpdAorQVBQRU5EIGxhYmVsPWJvb3Qgcm9vdHdhaXQKIAogTEFCRUwgU2VyaWFsIGNvbnNvbGUgYm9vdAogS0VSTkVMIC92bWxpbnV6Ci1BUFBFTkQgbGFiZWw9Ym9vdCByb290PS9kZXYvc2RhMiByb290d2FpdCBjb25zb2xlPXR0eVMwLDExNTIwMAorQVBQRU5EIGxhYmVsPWJvb3Qgcm9vdHdhaXQgY29uc29sZT10dHlTMCwxMTUyMDAKIAogTEFCRUwgR3JhcGhpY3MgY29uc29sZSBpbnN0YWxsCiBLRVJORUwgL3ZtbGludXoKLUFQUEVORCBsYWJlbD1pbnN0YWxsIHJvb3Q9L2Rldi9zZGEyIHJvb3R3YWl0CitBUFBFTkQgbGFiZWw9aW5zdGFsbCByb290d2FpdAogCiBMQUJFTCBTZXJpYWwgY29uc29sZSBpbnN0YWxsCiBLRVJORUwgL3ZtbGludXoKLUFQUEVORCBsYWJlbD1pbnN0YWxsIHJvb3Q9L2Rldi9zZGEyIHJvb3R3YWl0IGNvbnNvbGU9dHR5UzAsMTE1MjAwCitBUFBFTkQgbGFiZWw9aW5zdGFsbCByb290d2FpdCBjb25zb2xlPXR0eVMwLDExNTIwMApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL3FlbXV4ODYtZGlyZWN0ZGlzay53a3MgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvcWVtdXg4Ni1kaXJlY3RkaXNrLndrcwppbmRleCBkYjMwYmJjLi4xZjg0NjZhIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvcWVtdXg4Ni1kaXJlY3RkaXNrLndrcworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvcWVtdXg4Ni1kaXJlY3RkaXNrLndrcwpAQCAtNCw1ICs0LDUgQEAKIAogaW5jbHVkZSBjb21tb24ud2tzLmluYwogCi1ib290bG9hZGVyICAtLXRpbWVvdXQ9MCAgLS1hcHBlbmQ9InZnYT0wIHV2ZXNhZmIubW9kZV9vcHRpb249NjQweDQ4MC0zMiByb290PS9kZXYvc2RhMiBydyBtZW09MjU2TSBpcD0xOTIuMTY4LjcuMjo6MTkyLjE2OC43LjE6MjU1LjI1NS4yNTUuMCBvcHJvZmlsZS50aW1lcj0xIHJvb3Rmc3R5cGU9ZXh0NCAiCitib290bG9hZGVyICAtLXRpbWVvdXQ9MCAgLS1hcHBlbmQ9InZnYT0wIHV2ZXNhZmIubW9kZV9vcHRpb249NjQweDQ4MC0zMiBydyBtZW09MjU2TSBpcD0xOTIuMTY4LjcuMjo6MTkyLjE2OC43LjE6MjU1LjI1NS4yNTUuMCBvcHJvZmlsZS50aW1lcj0xIHJvb3Rmc3R5cGU9ZXh0NCAiCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9zeXN0ZW1kLWJvb3RkaXNrLndrcyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9zeXN0ZW1kLWJvb3RkaXNrLndrcwppbmRleCA0YmQ5ZDZhLi45NWQ3Yjk3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3Mvc3lzdGVtZC1ib290ZGlzay53a3MKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL3N5c3RlbWQtYm9vdGRpc2sud2tzCkBAIC0yLDEwICsyLDEwIEBACiAjIGxvbmctZGVzY3JpcHRpb246IENyZWF0ZXMgYSBwYXJ0aXRpb25lZCBFRkkgZGlzayBpbWFnZSB0aGF0IHRoZSB1c2VyCiAjIGNhbiBkaXJlY3RseSBkZCB0byBib290IG1lZGlhLiBUaGUgc2VsZWN0ZWQgYm9vdGxvYWRlciBpcyBzeXN0ZW1kLWJvb3QuCiAKLXBhcnQgL2Jvb3QgLS1zb3VyY2UgYm9vdGltZy1lZmkgLS1zb3VyY2VwYXJhbXM9ImxvYWRlcj1zeXN0ZW1kLWJvb3QiIC0tb25kaXNrIHNkYSAtLWxhYmVsIG1zZG9zIC0tYWN0aXZlIC0tYWxpZ24gMTAyNAorcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLWVmaSAtLXNvdXJjZXBhcmFtcz0ibG9hZGVyPXN5c3RlbWQtYm9vdCIgLS1vbmRpc2sgc2RhIC0tbGFiZWwgbXNkb3MgLS1hY3RpdmUgLS1hbGlnbiAxMDI0IC0tdXNlLXV1aWQKIAogcGFydCAvIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0NCAtLWxhYmVsIHBsYXRmb3JtIC0tYWxpZ24gMTAyNCAtLXVzZS11dWlkCiAKLXBhcnQgc3dhcCAtLW9uZGlzayBzZGEgLS1zaXplIDQ0IC0tbGFiZWwgc3dhcDEgLS1mc3R5cGU9c3dhcAorcGFydCBzd2FwIC0tb25kaXNrIHNkYSAtLXNpemUgNDQgLS1sYWJlbCBzd2FwMSAtLWZzdHlwZT1zd2FwIC0tdXNlLXV1aWQKIAogYm9vdGxvYWRlciAtLXB0YWJsZSBncHQgLS10aW1lb3V0PTUgLS1hcHBlbmQ9InJvb3R3YWl0IHJvb3Rmc3R5cGU9ZXh0NCBjb25zb2xlPXR0eVMwLDExNTIwMCBjb25zb2xlPXR0eTAiCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2VuZ2luZS5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvZW5naW5lLnB5CmluZGV4IGY1OTgyMWYuLmVkY2ZhYjMgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvZW5naW5lLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvZW5naW5lLnB5CkBAIC0zMCwxMCArMzAsMTcgQEAKIAogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQganNvbgoraW1wb3J0IHN1YnByb2Nlc3MKKworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZSwgT3JkZXJlZERpY3QKK2Zyb20gZGlzdHV0aWxzLnNwYXduIGltcG9ydCBmaW5kX2V4ZWN1dGFibGUKIAogZnJvbSB3aWMgaW1wb3J0IFdpY0Vycm9yCitmcm9tIHdpYy5maWxlbWFwIGltcG9ydCBzcGFyc2VfY29weQogZnJvbSB3aWMucGx1Z2luYmFzZSBpbXBvcnQgUGx1Z2luTWdyCi1mcm9tIHdpYy51dGlscy5taXNjIGltcG9ydCBnZXRfYml0YmFrZV92YXIKK2Zyb20gd2ljLm1pc2MgaW1wb3J0IGdldF9iaXRiYWtlX3ZhciwgZXhlY19jbWQKIAogbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3dpYycpCiAKQEAgLTIwMSwxNyArMjA4LDE4IEBACiAgICAgIiIiCiAgICAgUHJpbnQgdGhlIGxpc3Qgb2YgaW1hZ2VzIG9yIHNvdXJjZSBwbHVnaW5zLgogICAgICIiIgotICAgIGlmIGxlbihhcmdzKSA8IDE6CisgICAgaWYgYXJncy5saXN0X3R5cGUgaXMgTm9uZToKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICBpZiBhcmdzID09IFsiaW1hZ2VzIl06CisgICAgaWYgYXJncy5saXN0X3R5cGUgPT0gImltYWdlcyI6CisKICAgICAgICAgbGlzdF9jYW5uZWRfaW1hZ2VzKHNjcmlwdHNfcGF0aCkKICAgICAgICAgcmV0dXJuIFRydWUKLSAgICBlbGlmIGFyZ3MgPT0gWyJzb3VyY2UtcGx1Z2lucyJdOgorICAgIGVsaWYgYXJncy5saXN0X3R5cGUgPT0gInNvdXJjZS1wbHVnaW5zIjoKICAgICAgICAgbGlzdF9zb3VyY2VfcGx1Z2lucygpCiAgICAgICAgIHJldHVybiBUcnVlCi0gICAgZWxpZiBsZW4oYXJncykgPT0gMiBhbmQgYXJnc1sxXSA9PSAiaGVscCI6Ci0gICAgICAgIHdrc19maWxlID0gYXJnc1swXQorICAgIGVsaWYgbGVuKGFyZ3MuaGVscF9mb3IpID09IDEgYW5kIGFyZ3MuaGVscF9mb3JbMF0gPT0gJ2hlbHAnOgorICAgICAgICB3a3NfZmlsZSA9IGFyZ3MubGlzdF90eXBlCiAgICAgICAgIGZ1bGxwYXRoID0gZmluZF9jYW5uZWRfaW1hZ2Uoc2NyaXB0c19wYXRoLCB3a3NfZmlsZSkKICAgICAgICAgaWYgbm90IGZ1bGxwYXRoOgogICAgICAgICAgICAgcmFpc2UgV2ljRXJyb3IoIk5vIGltYWdlIG5hbWVkICVzIGZvdW5kLCBleGl0aW5nLiAiCkBAIC0yMjQsNiArMjMyLDMwNiBAQAogCiAgICAgcmV0dXJuIEZhbHNlCiAKKworY2xhc3MgRGlzazoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW1hZ2VwYXRoLCBuYXRpdmVfc3lzcm9vdCwgZnN0eXBlcz0oJ2ZhdCcsICdleHQnKSk6CisgICAgICAgIHNlbGYuaW1hZ2VwYXRoID0gaW1hZ2VwYXRoCisgICAgICAgIHNlbGYubmF0aXZlX3N5c3Jvb3QgPSBuYXRpdmVfc3lzcm9vdAorICAgICAgICBzZWxmLmZzdHlwZXMgPSBmc3R5cGVzCisgICAgICAgIHNlbGYuX3BhcnRpdGlvbnMgPSBOb25lCisgICAgICAgIHNlbGYuX3BhcnRpbWFnZXMgPSB7fQorICAgICAgICBzZWxmLl9sc2VjdG9yX3NpemUgPSBOb25lCisgICAgICAgIHNlbGYuX3BzZWN0b3Jfc2l6ZSA9IE5vbmUKKyAgICAgICAgc2VsZi5fcHRhYmxlX2Zvcm1hdCA9IE5vbmUKKworICAgICAgICAjIGZpbmQgcGFydGVkCisgICAgICAgIHNlbGYucGF0aHMgPSAiL2JpbjovdXNyL2JpbjovdXNyL3NiaW46L3NiaW4vIgorICAgICAgICBpZiBuYXRpdmVfc3lzcm9vdDoKKyAgICAgICAgICAgIGZvciBwYXRoIGluIHNlbGYucGF0aHMuc3BsaXQoJzonKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhdGhzID0gIiVzJXM6JXMiICUgKG5hdGl2ZV9zeXNyb290LCBwYXRoLCBzZWxmLnBhdGhzKQorCisgICAgICAgIHNlbGYucGFydGVkID0gZmluZF9leGVjdXRhYmxlKCJwYXJ0ZWQiLCBzZWxmLnBhdGhzKQorICAgICAgICBpZiBub3Qgc2VsZi5wYXJ0ZWQ6CisgICAgICAgICAgICByYWlzZSBXaWNFcnJvcigiQ2FuJ3QgZmluZCBleGVjdXRhYmxlIHBhcnRlZCIpCisKKyAgICAgICAgc2VsZi5wYXJ0aXRpb25zID0gc2VsZi5nZXRfcGFydGl0aW9ucygpCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgZm9yIHBhdGggaW4gc2VsZi5fcGFydGltYWdlcy52YWx1ZXMoKToKKyAgICAgICAgICAgIG9zLnVubGluayhwYXRoKQorCisgICAgZGVmIGdldF9wYXJ0aXRpb25zKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wYXJ0aXRpb25zIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9wYXJ0aXRpb25zID0gT3JkZXJlZERpY3QoKQorICAgICAgICAgICAgb3V0ID0gZXhlY19jbWQoIiVzIC1zbSAlcyB1bml0IEIgcHJpbnQiICUgKHNlbGYucGFydGVkLCBzZWxmLmltYWdlcGF0aCkpCisgICAgICAgICAgICBwYXJ0dHlwZSA9IG5hbWVkdHVwbGUoIlBhcnQiLCAicG51bSBzdGFydCBlbmQgc2l6ZSBmc3R5cGUiKQorICAgICAgICAgICAgc3BsaXR0ZWQgPSBvdXQuc3BsaXRsaW5lcygpCisgICAgICAgICAgICBsc2VjdG9yX3NpemUsIHBzZWN0b3Jfc2l6ZSwgc2VsZi5fcHRhYmxlX2Zvcm1hdCA9IHNwbGl0dGVkWzFdLnNwbGl0KCI6IilbMzo2XQorICAgICAgICAgICAgc2VsZi5fbHNlY3Rvcl9zaXplID0gaW50KGxzZWN0b3Jfc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuX3BzZWN0b3Jfc2l6ZSA9IGludChwc2VjdG9yX3NpemUpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBzcGxpdHRlZFsyOl06CisgICAgICAgICAgICAgICAgcG51bSwgc3RhcnQsIGVuZCwgc2l6ZSwgZnN0eXBlID0gbGluZS5zcGxpdCgnOicpWzo1XQorICAgICAgICAgICAgICAgIHBhcnRpdGlvbiA9IHBhcnR0eXBlKGludChwbnVtKSwgaW50KHN0YXJ0WzotMV0pLCBpbnQoZW5kWzotMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludChzaXplWzotMV0pLCBmc3R5cGUpCisgICAgICAgICAgICAgICAgc2VsZi5fcGFydGl0aW9uc1twbnVtXSA9IHBhcnRpdGlvbgorCisgICAgICAgIHJldHVybiBzZWxmLl9wYXJ0aXRpb25zCisKKyAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICIiIkdldCBwYXRoIHRvIHRoZSBleGVjdXRhYmxlIGluIGEgbGF6eSB3YXkuIiIiCisgICAgICAgIGlmIG5hbWUgaW4gKCJtZGlyIiwgIm1jb3B5IiwgIm1kZWwiLCAibWRlbHRyZWUiLCAic2ZkaXNrIiwgImUyZnNjayIsCisgICAgICAgICAgICAgICAgICAgICJyZXNpemUyZnMiLCAibWtzd2FwIiwgIm1rZG9zZnMiLCAiZGVidWdmcyIpOgorICAgICAgICAgICAgYW5hbWUgPSAiXyVzIiAlIG5hbWUKKyAgICAgICAgICAgIGlmIGFuYW1lIG5vdCBpbiBzZWxmLl9fZGljdF9fOgorICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgYW5hbWUsIGZpbmRfZXhlY3V0YWJsZShuYW1lLCBzZWxmLnBhdGhzKSkKKyAgICAgICAgICAgICAgICBpZiBhbmFtZSBub3QgaW4gc2VsZi5fX2RpY3RfXzoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgV2ljRXJyb3IoIkNhbid0IGZpbmQgZXhlY3V0YWJsZSB7fSIuZm9ybWF0KG5hbWUpKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19kaWN0X19bYW5hbWVdCisgICAgICAgIHJldHVybiBzZWxmLl9fZGljdF9fW25hbWVdCisKKyAgICBkZWYgX2dldF9wYXJ0X2ltYWdlKHNlbGYsIHBudW0pOgorICAgICAgICBpZiBwbnVtIG5vdCBpbiBzZWxmLnBhcnRpdGlvbnM6CisgICAgICAgICAgICByYWlzZSBXaWNFcnJvcigiUGFydGl0aW9uICVzIGlzIG5vdCBpbiB0aGUgaW1hZ2UiKQorICAgICAgICBwYXJ0ID0gc2VsZi5wYXJ0aXRpb25zW3BudW1dCisgICAgICAgICMgY2hlY2sgaWYgZnN0eXBlIGlzIHN1cHBvcnRlZAorICAgICAgICBmb3IgZnN0eXBlIGluIHNlbGYuZnN0eXBlczoKKyAgICAgICAgICAgIGlmIHBhcnQuZnN0eXBlLnN0YXJ0c3dpdGgoZnN0eXBlKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgV2ljRXJyb3IoIk5vdCBzdXBwb3J0ZWQgZnN0eXBlOiB7fSIuZm9ybWF0KHBhcnQuZnN0eXBlKSkKKyAgICAgICAgaWYgcG51bSBub3QgaW4gc2VsZi5fcGFydGltYWdlczoKKyAgICAgICAgICAgIHRtcGYgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUocHJlZml4PSJ3aWMtcGFydCIpCisgICAgICAgICAgICBkc3RfZm5hbWUgPSB0bXBmLm5hbWUKKyAgICAgICAgICAgIHRtcGYuY2xvc2UoKQorICAgICAgICAgICAgc3BhcnNlX2NvcHkoc2VsZi5pbWFnZXBhdGgsIGRzdF9mbmFtZSwgc2tpcD1wYXJ0LnN0YXJ0LCBsZW5ndGg9cGFydC5zaXplKQorICAgICAgICAgICAgc2VsZi5fcGFydGltYWdlc1twbnVtXSA9IGRzdF9mbmFtZQorCisgICAgICAgIHJldHVybiBzZWxmLl9wYXJ0aW1hZ2VzW3BudW1dCisKKyAgICBkZWYgX3B1dF9wYXJ0X2ltYWdlKHNlbGYsIHBudW0pOgorICAgICAgICAiIiJQdXQgcGFydGl0aW9uIGltYWdlIGludG8gcGFydGl0aW9uZWQgaW1hZ2UuIiIiCisgICAgICAgIHNwYXJzZV9jb3B5KHNlbGYuX3BhcnRpbWFnZXNbcG51bV0sIHNlbGYuaW1hZ2VwYXRoLAorICAgICAgICAgICAgICAgICAgICBzZWVrPXNlbGYucGFydGl0aW9uc1twbnVtXS5zdGFydCkKKworICAgIGRlZiBkaXIoc2VsZiwgcG51bSwgcGF0aCk6CisgICAgICAgIGlmIHNlbGYucGFydGl0aW9uc1twbnVtXS5mc3R5cGUuc3RhcnRzd2l0aCgnZXh0Jyk6CisgICAgICAgICAgICByZXR1cm4gZXhlY19jbWQoInt9IHt9IC1SICdscyAtbCB7fSciLmZvcm1hdChzZWxmLmRlYnVnZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9nZXRfcGFydF9pbWFnZShwbnVtKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgpLCBhc19zaGVsbD1UcnVlKQorICAgICAgICBlbHNlOiAjIGZhdAorICAgICAgICAgICAgcmV0dXJuIGV4ZWNfY21kKCJ7fSAtaSB7fSA6Ont9Ii5mb3JtYXQoc2VsZi5tZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZ2V0X3BhcnRfaW1hZ2UocG51bSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoKSkKKworICAgIGRlZiBjb3B5KHNlbGYsIHNyYywgcG51bSwgcGF0aCk6CisgICAgICAgICIiIkNvcHkgcGFydGl0aW9uIGltYWdlIGludG8gd2ljIGltYWdlLiIiIgorICAgICAgICBpZiBzZWxmLnBhcnRpdGlvbnNbcG51bV0uZnN0eXBlLnN0YXJ0c3dpdGgoJ2V4dCcpOgorICAgICAgICAgICAgY21kID0gImVjaG8gLWUgJ2NkIHt9XG53cml0ZSB7fSB7fScgfCB7fSAtdyB7fSIuXAorICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdChwYXRoLCBzcmMsIG9zLnBhdGguYmFzZW5hbWUoc3JjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZWJ1Z2ZzLCBzZWxmLl9nZXRfcGFydF9pbWFnZShwbnVtKSkKKyAgICAgICAgZWxzZTogIyBmYXQKKyAgICAgICAgICAgIGNtZCA9ICJ7fSAtaSB7fSAtc25vcCB7fSA6Ont9Ii5mb3JtYXQoc2VsZi5tY29weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZ2V0X3BhcnRfaW1hZ2UocG51bSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYywgcGF0aCkKKyAgICAgICAgZXhlY19jbWQoY21kLCBhc19zaGVsbD1UcnVlKQorICAgICAgICBzZWxmLl9wdXRfcGFydF9pbWFnZShwbnVtKQorCisgICAgZGVmIHJlbW92ZShzZWxmLCBwbnVtLCBwYXRoKToKKyAgICAgICAgIiIiUmVtb3ZlIGZpbGVzL2RpcnMgZnJvbSB0aGUgcGFydGl0aW9uLiIiIgorICAgICAgICBwYXJ0aW1nID0gc2VsZi5fZ2V0X3BhcnRfaW1hZ2UocG51bSkKKyAgICAgICAgaWYgc2VsZi5wYXJ0aXRpb25zW3BudW1dLmZzdHlwZS5zdGFydHN3aXRoKCdleHQnKToKKyAgICAgICAgICAgIGV4ZWNfY21kKCJ7fSB7fSAtd1IgJ3JtIHt9JyIuZm9ybWF0KHNlbGYuZGVidWdmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2dldF9wYXJ0X2ltYWdlKHBudW0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCksIGFzX3NoZWxsPVRydWUpCisgICAgICAgIGVsc2U6ICMgZmF0CisgICAgICAgICAgICBjbWQgPSAie30gLWkge30gOjp7fSIuZm9ybWF0KHNlbGYubWRlbCwgcGFydGltZywgcGF0aCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBleGVjX2NtZChjbWQpCisgICAgICAgICAgICBleGNlcHQgV2ljRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIGlmICJub3QgZm91bmQiIGluIHN0cihlcnIpIG9yICJub24gZW1wdHkiIGluIHN0cihlcnIpOgorICAgICAgICAgICAgICAgICAgICAjIG1kZWwgb3V0cHV0cyAnRmlsZSAuLi4gbm90IGZvdW5kJyBvciAnZGlyZWN0b3J5IC4uIG5vbiBlbXB0eSIKKyAgICAgICAgICAgICAgICAgICAgIyB0cnkgdG8gdXNlIG1kZWx0cmVlIGFzIHBhdGggY291bGQgYmUgYSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgY21kID0gInt9IC1pIHt9IDo6e30iLmZvcm1hdChzZWxmLm1kZWx0cmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpbWcsIHBhdGgpCisgICAgICAgICAgICAgICAgICAgIGV4ZWNfY21kKGNtZCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnIKKyAgICAgICAgc2VsZi5fcHV0X3BhcnRfaW1hZ2UocG51bSkKKworICAgIGRlZiB3cml0ZShzZWxmLCB0YXJnZXQsIGV4cGFuZCk6CisgICAgICAgICIiIldyaXRlIGRpc2sgaW1hZ2UgdG8gdGhlIG1lZGlhIG9yIGZpbGUuIiIiCisgICAgICAgIGRlZiB3cml0ZV9zZmRpc2tfc2NyaXB0KG91dGYsIHBhcnRzKToKKyAgICAgICAgICAgIGZvciBrZXksIHZhbCBpbiBwYXJ0c1sncGFydGl0aW9udGFibGUnXS5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIGtleSBpbiAoInBhcnRpdGlvbnMiLCAiZGV2aWNlIiwgImZpcnN0bGJhIiwgImxhc3RsYmEiKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBrZXkgPT0gImlkIjoKKyAgICAgICAgICAgICAgICAgICAga2V5ID0gImxhYmVsLWlkIgorICAgICAgICAgICAgICAgIG91dGYud3JpdGUoInt9OiB7fVxuIi5mb3JtYXQoa2V5LCB2YWwpKQorICAgICAgICAgICAgb3V0Zi53cml0ZSgiXG4iKQorICAgICAgICAgICAgZm9yIHBhcnQgaW4gcGFydHNbJ3BhcnRpdGlvbnRhYmxlJ11bJ3BhcnRpdGlvbnMnXToKKyAgICAgICAgICAgICAgICBsaW5lID0gJycKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiAoJ2F0dHJzJywgJ25hbWUnLCAnc2l6ZScsICd0eXBlJywgJ3V1aWQnKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAnc2l6ZScgYW5kIHBhcnRbJ3R5cGUnXSA9PSAnZic6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGRvbid0IHdyaXRlIHNpemUgZm9yIGV4dGVuZGVkIHBhcnRpdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgdmFsID0gcGFydC5nZXQobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgdmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSArPSAne309e30sICcuZm9ybWF0KG5hbWUsIHZhbCkKKyAgICAgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZVs6LTJdICMgc3RyaXAgJywgJworICAgICAgICAgICAgICAgIGlmIHBhcnQuZ2V0KCdib290YWJsZScpOgorICAgICAgICAgICAgICAgICAgICBsaW5lICs9ICcgLGJvb3RhYmxlJworICAgICAgICAgICAgICAgIG91dGYud3JpdGUoInt9XG4iLmZvcm1hdChsaW5lKSkKKyAgICAgICAgICAgIG91dGYuZmx1c2goKQorCisgICAgICAgIGRlZiByZWFkX3B0YWJsZShwYXRoKToKKyAgICAgICAgICAgIG91dCA9IGV4ZWNfY21kKCJ7fSAtZEoge30iLmZvcm1hdChzZWxmLnNmZGlzaywgcGF0aCkpCisgICAgICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhvdXQpCisKKyAgICAgICAgZGVmIHdyaXRlX3B0YWJsZShwYXJ0cywgdGFyZ2V0KToKKyAgICAgICAgICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKHByZWZpeD0id2ljLXNmZGlzay0iLCBtb2RlPSd3JykgYXMgb3V0ZjoKKyAgICAgICAgICAgICAgICB3cml0ZV9zZmRpc2tfc2NyaXB0KG91dGYsIHBhcnRzKQorICAgICAgICAgICAgICAgIGNtZCA9ICJ7fSAtLW5vLXJlcmVhZCB7fSA8IHt9IDI+L2Rldi9udWxsIi5mb3JtYXQoc2VsZi5zZmRpc2ssIHRhcmdldCwgb3V0Zi5uYW1lKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFdpY0Vycm9yKCJDYW4ndCBydW4gJ3t9JyBjb21tYW5kOiB7fSIuZm9ybWF0KGNtZCwgZXJyKSkKKworICAgICAgICBpZiBleHBhbmQgaXMgTm9uZToKKyAgICAgICAgICAgIHNwYXJzZV9jb3B5KHNlbGYuaW1hZ2VwYXRoLCB0YXJnZXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGNvcHkgZmlyc3Qgc2VjdG9ycyB0aGF0IG1heSBjb250YWluIGJvb3Rsb2FkZXIKKyAgICAgICAgICAgIHNwYXJzZV9jb3B5KHNlbGYuaW1hZ2VwYXRoLCB0YXJnZXQsIGxlbmd0aD0yMDQ4ICogc2VsZi5fbHNlY3Rvcl9zaXplKQorCisgICAgICAgICAgICAjIGNvcHkgc291cmNlIHBhcnRpdGlvbiB0YWJsZSB0byB0aGUgdGFyZ2V0CisgICAgICAgICAgICBwYXJ0cyA9IHJlYWRfcHRhYmxlKHNlbGYuaW1hZ2VwYXRoKQorICAgICAgICAgICAgd3JpdGVfcHRhYmxlKHBhcnRzLCB0YXJnZXQpCisKKyAgICAgICAgICAgICMgZ2V0IHNpemUgb2YgdW5wYXJ0aXRpb25lZCBzcGFjZQorICAgICAgICAgICAgZnJlZSA9IE5vbmUKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGV4ZWNfY21kKCJ7fSAtRiB7fSIuZm9ybWF0KHNlbGYuc2ZkaXNrLCB0YXJnZXQpKS5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJVbnBhcnRpdGlvbmVkIHNwYWNlICIpIGFuZCBsaW5lLmVuZHN3aXRoKCJzZWN0b3JzIik6CisgICAgICAgICAgICAgICAgICAgIGZyZWUgPSBpbnQobGluZS5zcGxpdCgpWy0yXSkKKyAgICAgICAgICAgIGlmIGZyZWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBXaWNFcnJvcigiQ2FuJ3QgZ2V0IHNpemUgb2YgdW5wYXJ0aXRpb25lZCBzcGFjZSIpCisKKyAgICAgICAgICAgICMgY2FsY3VsYXRlIGV4cGFuZGVkIHBhcnRpdGlvbnMgc2l6ZXMKKyAgICAgICAgICAgIHNpemVzID0ge30KKyAgICAgICAgICAgIGZvciBudW0sIHBhcnQgaW4gZW51bWVyYXRlKHBhcnRzWydwYXJ0aXRpb250YWJsZSddWydwYXJ0aXRpb25zJ10sIDEpOgorICAgICAgICAgICAgICAgIGlmIG51bSBpbiBleHBhbmQ6CisgICAgICAgICAgICAgICAgICAgIGlmIGV4cGFuZFtudW1dICE9IDA6ICMgZG9uJ3QgcmVzaXplIHBhcnRpdGlvbiBpZiBzaXplIGlzIHNldCB0byAwCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0b3JzID0gZXhwYW5kW251bV0gLy8gc2VsZi5fbHNlY3Rvcl9zaXplCisgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIC09IHNlY3RvcnMgLSBwYXJ0WydzaXplJ10KKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRbJ3NpemUnXSA9IHNlY3RvcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVzW251bV0gPSBzZWN0b3JzCisgICAgICAgICAgICAgICAgZWxpZiBwYXJ0Wyd0eXBlJ10gIT0gJ2YnOgorICAgICAgICAgICAgICAgICAgICBzaXplc1tudW1dID0gLTEKKworICAgICAgICAgICAgZm9yIG51bSwgcGFydCBpbiBlbnVtZXJhdGUocGFydHNbJ3BhcnRpdGlvbnRhYmxlJ11bJ3BhcnRpdGlvbnMnXSwgMSk6CisgICAgICAgICAgICAgICAgaWYgc2l6ZXMuZ2V0KG51bSkgPT0gLTE6CisgICAgICAgICAgICAgICAgICAgIHBhcnRbJ3NpemUnXSArPSBmcmVlIC8vIGxlbihzaXplcykKKworICAgICAgICAgICAgIyB3cml0ZSByZXNpemVkIHBhcnRpdGlvbiB0YWJsZSB0byB0aGUgdGFyZ2V0CisgICAgICAgICAgICB3cml0ZV9wdGFibGUocGFydHMsIHRhcmdldCkKKworICAgICAgICAgICAgIyByZWFkIHJlc2l6ZWQgcGFydGl0aW9uIHRhYmxlCisgICAgICAgICAgICBwYXJ0cyA9IHJlYWRfcHRhYmxlKHRhcmdldCkKKworICAgICAgICAgICAgIyBjb3B5IHBhcnRpdGlvbnMgY29udGVudAorICAgICAgICAgICAgZm9yIG51bSwgcGFydCBpbiBlbnVtZXJhdGUocGFydHNbJ3BhcnRpdGlvbnRhYmxlJ11bJ3BhcnRpdGlvbnMnXSwgMSk6CisgICAgICAgICAgICAgICAgcG51bSA9IHN0cihudW0pCisgICAgICAgICAgICAgICAgZnN0eXBlID0gc2VsZi5wYXJ0aXRpb25zW3BudW1dLmZzdHlwZQorCisgICAgICAgICAgICAgICAgIyBjb3B5IHVuY2hhbmdlZCBwYXJ0aXRpb24KKyAgICAgICAgICAgICAgICBpZiBwYXJ0WydzaXplJ10gPT0gc2VsZi5wYXJ0aXRpb25zW3BudW1dLnNpemUgLy8gc2VsZi5fbHNlY3Rvcl9zaXplOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiY29weWluZyB1bmNoYW5nZWQgcGFydGl0aW9uIHt9Ii5mb3JtYXQocG51bSkpCisgICAgICAgICAgICAgICAgICAgIHNwYXJzZV9jb3B5KHNlbGYuX2dldF9wYXJ0X2ltYWdlKHBudW0pLCB0YXJnZXQsIHNlZWs9cGFydFsnc3RhcnQnXSAqIHNlbGYuX2xzZWN0b3Jfc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICMgcmVzaXplIG9yIHJlLWNyZWF0ZSBwYXJ0aXRpb25zCisgICAgICAgICAgICAgICAgaWYgZnN0eXBlLnN0YXJ0c3dpdGgoJ2V4dCcpIG9yIGZzdHlwZS5zdGFydHN3aXRoKCdmYXQnKSBvciBcCisgICAgICAgICAgICAgICAgICAgZnN0eXBlLnN0YXJ0c3dpdGgoJ2xpbnV4LXN3YXAnKToKKworICAgICAgICAgICAgICAgICAgICBwYXJ0Zm5hbWUgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKHByZWZpeD0id2ljLXBhcnR7fS0iLmZvcm1hdChwbnVtKSkgYXMgcGFydGY6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0Zm5hbWUgPSBwYXJ0Zi5uYW1lCisKKyAgICAgICAgICAgICAgICAgICAgaWYgZnN0eXBlLnN0YXJ0c3dpdGgoJ2V4dCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oInJlc2l6aW5nIGV4dCBwYXJ0aXRpb24ge30iLmZvcm1hdChwbnVtKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpbWcgPSBzZWxmLl9nZXRfcGFydF9pbWFnZShwbnVtKQorICAgICAgICAgICAgICAgICAgICAgICAgc3BhcnNlX2NvcHkocGFydGltZywgcGFydGZuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhlY19jbWQoInt9IC1wZiB7fSIuZm9ybWF0KHNlbGYuZTJmc2NrLCBwYXJ0Zm5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhlY19jbWQoInt9IHt9IHt9cyIuZm9ybWF0KFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVzaXplMmZzLCBwYXJ0Zm5hbWUsIHBhcnRbJ3NpemUnXSkpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgZnN0eXBlLnN0YXJ0c3dpdGgoJ2ZhdCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oImNvcHlpbmcgY29udGVudCBvZiB0aGUgZmF0IHBhcnRpdGlvbiB7fSIuZm9ybWF0KHBudW0pKQorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkocHJlZml4PSd3aWMtZmF0ZGlyLScpIGFzIHRtcGRpcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvcHkgY29udGVudCB0byB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9ICJ7fSAtc25vbXBpIHt9IDo6IHt9Ii5mb3JtYXQoc2VsZi5tY29weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2dldF9wYXJ0X2ltYWdlKHBudW0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wZGlyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNfY21kKGNtZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNyZWF0ZSBuZXcgbXNkb3MgcGFydGl0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXJ0LmdldCgibmFtZSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxfc3RyID0gIi1uIHt9Ii5mb3JtYXQobGFiZWwpIGlmIGxhYmVsIGVsc2UgJycKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9ICJ7fSB7fSAtQyB7fSB7fSIuZm9ybWF0KHNlbGYubWtkb3NmcywgbGFiZWxfc3RyLCBwYXJ0Zm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydFsnc2l6ZSddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNfY21kKGNtZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvcHkgY29udGVudCBmcm9tIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRvIHRoZSBuZXcgcGFydGl0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kID0gInt9IC1zbm9tcGkge30ge30vKiA6OiIuZm9ybWF0KHNlbGYubWNvcHksIHBhcnRmbmFtZSwgdG1wZGlyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNfY21kKGNtZCwgYXNfc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBmc3R5cGUuc3RhcnRzd2l0aCgnbGludXgtc3dhcCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oImNyZWF0aW5nIHN3YXAgcGFydGl0aW9uIHt9Ii5mb3JtYXQocG51bSkpCisgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhcnQuZ2V0KCJuYW1lIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsX3N0ciA9ICItTCB7fSIuZm9ybWF0KGxhYmVsKSBpZiBsYWJlbCBlbHNlICcnCisgICAgICAgICAgICAgICAgICAgICAgICB1dWlkID0gcGFydC5nZXQoInV1aWQiKQorICAgICAgICAgICAgICAgICAgICAgICAgdXVpZF9zdHIgPSAiLVUge30iLmZvcm1hdCh1dWlkKSBpZiB1dWlkIGVsc2UgJycKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihwYXJ0Zm5hbWUsICd3JykgYXMgc3BhcnNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmZ0cnVuY2F0ZShzcGFyc2UuZmlsZW5vKCksIHBhcnRbJ3NpemUnXSAqIHNlbGYuX2xzZWN0b3Jfc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNfY21kKCJ7fSB7fSB7fSB7fSIuZm9ybWF0KHNlbGYubWtzd2FwLCBsYWJlbF9zdHIsIHV1aWRfc3RyLCBwYXJ0Zm5hbWUpKQorICAgICAgICAgICAgICAgICAgICBzcGFyc2VfY29weShwYXJ0Zm5hbWUsIHRhcmdldCwgc2Vlaz1wYXJ0WydzdGFydCddICogc2VsZi5fbHNlY3Rvcl9zaXplKQorICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsocGFydGZuYW1lKQorICAgICAgICAgICAgICAgIGVsaWYgcGFydFsndHlwZSddICE9ICdmJzoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oInNraXBwaW5nIHBhcnRpdGlvbiB7fTogdW5zdXBwb3J0ZWQgZnN0eXBlIHt9Ii5mb3JtYXQocG51bSwgZnN0eXBlKSkKKworZGVmIHdpY19scyhhcmdzLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgIiIiTGlzdCBjb250ZW50cyBvZiBwYXJ0aXRpb25lZCBpbWFnZSBvciB2ZmF0IHBhcnRpdGlvbi4iIiIKKyAgICBkaXNrID0gRGlzayhhcmdzLnBhdGguaW1hZ2UsIG5hdGl2ZV9zeXNyb290KQorICAgIGlmIG5vdCBhcmdzLnBhdGgucGFydDoKKyAgICAgICAgaWYgZGlzay5wYXJ0aXRpb25zOgorICAgICAgICAgICAgcHJpbnQoJ051bSAgICAgU3RhcnQgICAgICAgIEVuZCAgICAgICAgICBTaXplICAgICAgRnN0eXBlJykKKyAgICAgICAgICAgIGZvciBwYXJ0IGluIGRpc2sucGFydGl0aW9ucy52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICBwcmludCgiezoyZH0gIHs6MTJkfSB7OjEyZH0gezoxMmR9ICB7fSIuZm9ybWF0KFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydC5wbnVtLCBwYXJ0LnN0YXJ0LCBwYXJ0LmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydC5zaXplLCBwYXJ0LmZzdHlwZSkpCisgICAgZWxzZToKKyAgICAgICAgcGF0aCA9IGFyZ3MucGF0aC5wYXRoIG9yICcvJworICAgICAgICBwcmludChkaXNrLmRpcihhcmdzLnBhdGgucGFydCwgcGF0aCkpCisKK2RlZiB3aWNfY3AoYXJncywgbmF0aXZlX3N5c3Jvb3QpOgorICAgICIiIgorICAgIENvcHkgbG9jYWwgZmlsZSBvciBkaXJlY3RvcnkgdG8gdGhlIHZmYXQgcGFydGl0aW9uIG9mCisgICAgcGFydGl0aW9uZWQgaW1hZ2UuCisgICAgIiIiCisgICAgZGlzayA9IERpc2soYXJncy5kZXN0LmltYWdlLCBuYXRpdmVfc3lzcm9vdCkKKyAgICBkaXNrLmNvcHkoYXJncy5zcmMsIGFyZ3MuZGVzdC5wYXJ0LCBhcmdzLmRlc3QucGF0aCkKKworZGVmIHdpY19ybShhcmdzLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgIiIiCisgICAgUmVtb3ZlIGZpbGVzIG9yIGRpcmVjdG9yaWVzIGZyb20gdGhlIHZmYXQgcGFydGl0aW9uIG9mCisgICAgcGFydGl0aW9uZWQgaW1hZ2UuCisgICAgIiIiCisgICAgZGlzayA9IERpc2soYXJncy5wYXRoLmltYWdlLCBuYXRpdmVfc3lzcm9vdCkKKyAgICBkaXNrLnJlbW92ZShhcmdzLnBhdGgucGFydCwgYXJncy5wYXRoLnBhdGgpCisKK2RlZiB3aWNfd3JpdGUoYXJncywgbmF0aXZlX3N5c3Jvb3QpOgorICAgICIiIgorICAgIFdyaXRlIGltYWdlIHRvIGEgdGFyZ2V0IGRldmljZS4KKyAgICAiIiIKKyAgICBkaXNrID0gRGlzayhhcmdzLmltYWdlLCBuYXRpdmVfc3lzcm9vdCwgKCdmYXQnLCAnZXh0JywgJ3N3YXAnKSkKKyAgICBkaXNrLndyaXRlKGFyZ3MudGFyZ2V0LCBhcmdzLmV4cGFuZCkKKwogZGVmIGZpbmRfY2FubmVkKHNjcmlwdHNfcGF0aCwgZmlsZV9uYW1lKToKICAgICAiIiIKICAgICBGaW5kIGEgZmlsZSBlaXRoZXIgYnkgaXRzIHBhdGggb3IgYnkgbmFtZSBpbiB0aGUgY2FubmVkIGZpbGVzIGRpci4KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvZmlsZW1hcC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvZmlsZW1hcC5weQppbmRleCAxZjFhYWNjLi43N2UzMmI5IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2ZpbGVtYXAucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9maWxlbWFwLnB5CkBAIC0zNCwxMyArMzQsOSBAQAogICAgIFJldHVybnMgYmxvY2sgc2l6ZSBmb3IgZmlsZSBvYmplY3QgJ2ZpbGVfb2JqJy4gRXJyb3JzIGFyZSBpbmRpY2F0ZWQgYnkgdGhlCiAgICAgJ0lPRXJyb3InIGV4Y2VwdGlvbi4KICAgICAiIiIKLQotICAgIGZyb20gZmNudGwgaW1wb3J0IGlvY3RsCi0gICAgaW1wb3J0IHN0cnVjdAotCiAgICAgIyBHZXQgdGhlIGJsb2NrIHNpemUgb2YgdGhlIGhvc3QgZmlsZS1zeXN0ZW0gZm9yIHRoZSBpbWFnZSBmaWxlIGJ5IGNhbGxpbmcKICAgICAjIHRoZSBGSUdFVEJTWiBpb2N0bCAobnVtYmVyIDIpLgotICAgIGJpbmFyeV9kYXRhID0gaW9jdGwoZmlsZV9vYmosIDIsIHN0cnVjdC5wYWNrKCdJJywgMCkpCisgICAgYmluYXJ5X2RhdGEgPSBmY250bC5pb2N0bChmaWxlX29iaiwgMiwgc3RydWN0LnBhY2soJ0knLCAwKSkKICAgICByZXR1cm4gc3RydWN0LnVucGFjaygnSScsIGJpbmFyeV9kYXRhKVswXQogCiBjbGFzcyBFcnJvck5vdFN1cHAoRXhjZXB0aW9uKToKQEAgLTIyOCw3ICsyMjQsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0bXBfb2JqID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgidysiLCBkaXI9ZGlyZWN0b3J5KQogICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICByYWlzZSBFcnJvck5vdFN1cHAoImNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgaW4gXCIlc1wiOiAlcyIKKyAgICAgICAgICAgIHJhaXNlIEVycm9yTm90U3VwcCgiY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBpbiBcIiVzXCI6ICVzIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChkaXJlY3RvcnksIGVycikpCiAKICAgICAgICAgdHJ5OgpAQCAtNTMwLDggKzUyNiwxOCBAQAogICAgIGV4Y2VwdCBFcnJvck5vdFN1cHA6CiAgICAgICAgIHJldHVybiBGaWxlbWFwU2VlayhpbWFnZSwgbG9nKQogCi1kZWYgc3BhcnNlX2NvcHkoc3JjX2ZuYW1lLCBkc3RfZm5hbWUsIG9mZnNldD0wLCBza2lwPTAsIGFwaT1Ob25lKToKLSAgICAiIiJFZmZpY2llbnRseSBjb3B5IHNwYXJzZSBmaWxlIHRvIG9yIGludG8gYW5vdGhlciBmaWxlLiIiIgorZGVmIHNwYXJzZV9jb3B5KHNyY19mbmFtZSwgZHN0X2ZuYW1lLCBza2lwPTAsIHNlZWs9MCwKKyAgICAgICAgICAgICAgICBsZW5ndGg9MCwgYXBpPU5vbmUpOgorICAgICIiIgorICAgIEVmZmljaWVudGx5IGNvcHkgc3BhcnNlIGZpbGUgdG8gb3IgaW50byBhbm90aGVyIGZpbGUuCisKKyAgICBzcmNfZm5hbWU6IHBhdGggdG8gc291cmNlIGZpbGUKKyAgICBkc3RfZm5hbWU6IHBhdGggdG8gZGVzdGluYXRpb24gZmlsZQorICAgIHNraXA6IHNraXAgTiBieXRlcyBhdCB0aGVzdGFydCBvZiBzcmMKKyAgICBzZWVrOiBzZWVrIE4gYnl0ZXMgZnJvbSB0aGUgc3RhcnQgb2YgZHN0CisgICAgbGVuZ3RoOiByZWFkIE4gYnl0ZXMgZnJvbSBzcmMgYW5kIHdyaXRlIHRoZW0gdG8gZHN0CisgICAgYXBpOiBGaWxlbWFwRmllbWFwIG9yIEZpbGVtYXBTZWVrIG9iamVjdAorICAgICIiIgogICAgIGlmIG5vdCBhcGk6CiAgICAgICAgIGFwaSA9IGZpbGVtYXAKICAgICBmbWFwID0gYXBpKHNyY19mbmFtZSkKQEAgLTUzOSwxNyArNTQ1LDMyIEBACiAgICAgICAgIGRzdF9maWxlID0gb3Blbihkc3RfZm5hbWUsICdyK2InKQogICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAgICBkc3RfZmlsZSA9IG9wZW4oZHN0X2ZuYW1lLCAnd2InKQotICAgICAgICBkc3RfZmlsZS50cnVuY2F0ZShvcy5wYXRoLmdldHNpemUoc3JjX2ZuYW1lKSkKKyAgICAgICAgaWYgbGVuZ3RoOgorICAgICAgICAgICAgZHN0X3NpemUgPSBsZW5ndGggKyBzZWVrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkc3Rfc2l6ZSA9IG9zLnBhdGguZ2V0c2l6ZShzcmNfZm5hbWUpICsgc2VlayAtIHNraXAKKyAgICAgICAgZHN0X2ZpbGUudHJ1bmNhdGUoZHN0X3NpemUpCiAKKyAgICB3cml0dGVuID0gMAogICAgIGZvciBmaXJzdCwgbGFzdCBpbiBmbWFwLmdldF9tYXBwZWRfcmFuZ2VzKDAsIGZtYXAuYmxvY2tzX2NudCk6CiAgICAgICAgIHN0YXJ0ID0gZmlyc3QgKiBmbWFwLmJsb2NrX3NpemUKICAgICAgICAgZW5kID0gKGxhc3QgKyAxKSAqIGZtYXAuYmxvY2tfc2l6ZQogCisgICAgICAgIGlmIHNraXAgPj0gZW5kOgorICAgICAgICAgICAgY29udGludWUKKwogICAgICAgICBpZiBzdGFydCA8IHNraXAgPCBlbmQ6Ci0gICAgICAgICAgICBmbWFwLl9mX2ltYWdlLnNlZWsoc2tpcCwgb3MuU0VFS19TRVQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmbWFwLl9mX2ltYWdlLnNlZWsoc3RhcnQsIG9zLlNFRUtfU0VUKQotICAgICAgICBkc3RfZmlsZS5zZWVrKG9mZnNldCArIHN0YXJ0LCBvcy5TRUVLX1NFVCkKKyAgICAgICAgICAgIHN0YXJ0ID0gc2tpcAorCisgICAgICAgIGZtYXAuX2ZfaW1hZ2Uuc2VlayhzdGFydCwgb3MuU0VFS19TRVQpCisKKyAgICAgICAgd3JpdHRlbiArPSBzdGFydCAtIHNraXAgLSB3cml0dGVuCisgICAgICAgIGlmIGxlbmd0aCBhbmQgd3JpdHRlbiA+PSBsZW5ndGg6CisgICAgICAgICAgICBkc3RfZmlsZS5zZWVrKHNlZWsgKyBsZW5ndGgsIG9zLlNFRUtfU0VUKQorICAgICAgICAgICAgZHN0X2ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZHN0X2ZpbGUuc2VlayhzZWVrICsgc3RhcnQgLSBza2lwLCBvcy5TRUVLX1NFVCkKIAogICAgICAgICBjaHVua19zaXplID0gMTAyNCAqIDEwMjQKICAgICAgICAgdG9fcmVhZCA9IGVuZCAtIHN0YXJ0CkBAIC01NTgsNyArNTc5LDE0IEBACiAgICAgICAgIHdoaWxlIHJlYWQgPCB0b19yZWFkOgogICAgICAgICAgICAgaWYgcmVhZCArIGNodW5rX3NpemUgPiB0b19yZWFkOgogICAgICAgICAgICAgICAgIGNodW5rX3NpemUgPSB0b19yZWFkIC0gcmVhZAotICAgICAgICAgICAgY2h1bmsgPSBmbWFwLl9mX2ltYWdlLnJlYWQoY2h1bmtfc2l6ZSkKKyAgICAgICAgICAgIHNpemUgPSBjaHVua19zaXplCisgICAgICAgICAgICBpZiBsZW5ndGggYW5kIHdyaXR0ZW4gKyBzaXplID4gbGVuZ3RoOgorICAgICAgICAgICAgICAgIHNpemUgPSBsZW5ndGggLSB3cml0dGVuCisgICAgICAgICAgICBjaHVuayA9IGZtYXAuX2ZfaW1hZ2UucmVhZChzaXplKQogICAgICAgICAgICAgZHN0X2ZpbGUud3JpdGUoY2h1bmspCi0gICAgICAgICAgICByZWFkICs9IGNodW5rX3NpemUKKyAgICAgICAgICAgIHJlYWQgKz0gc2l6ZQorICAgICAgICAgICAgd3JpdHRlbiArPSBzaXplCisgICAgICAgICAgICBpZiB3cml0dGVuID09IGxlbmd0aDoKKyAgICAgICAgICAgICAgICBkc3RfZmlsZS5jbG9zZSgpCisgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgZHN0X2ZpbGUuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9oZWxwLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9oZWxwLnB5CmluZGV4IGQ2ZTAyN2QuLjJhYzQ1ZTAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvaGVscC5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2hlbHAucHkKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAiIiIKICAgICBTdWJjb21tYW5kIGhlbHAgZGlzcGF0Y2hlci4KICAgICAiIiIKLSAgICBpZiBsZW4oYXJncykgPT0gMSBvciBub3QgZGlzcGxheV9oZWxwKGFyZ3NbMV0sIHN1YmNvbW1hbmRzKToKKyAgICBpZiBhcmdzLmhlbHBfdG9waWMgPT0gTm9uZSBvciBub3QgZGlzcGxheV9oZWxwKGFyZ3MuaGVscF90b3BpYywgc3ViY29tbWFuZHMpOgogICAgICAgICBwcmludCh1c2FnZV9zdHIpCiAKIApAQCAtODIsMTkgKzgyLDIwIEBACiAgICAgRGlzcGF0Y2ggdG8gc3ViY29tbWFuZCBoYW5kbGVyIGJvcnJvd2VkIGZyb20gY29tYm8tbGF5ZXIuCiAgICAgU2hvdWxkIHVzZSBhcmdwYXJzZSwgYnV0IGhhcyB0byB3b3JrIGluIDIuNi4KICAgICAiIiIKLSAgICBpZiBub3QgYXJnczoKKyAgICBpZiBub3QgYXJncy5jb21tYW5kOgogICAgICAgICBsb2dnZXIuZXJyb3IoIk5vIHN1YmNvbW1hbmQgc3BlY2lmaWVkLCBleGl0aW5nIikKICAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQogICAgICAgICByZXR1cm4gMQotICAgIGVsaWYgYXJnc1swXSA9PSAiaGVscCI6CisgICAgZWxpZiBhcmdzLmNvbW1hbmQgPT0gImhlbHAiOgogICAgICAgICB3aWNfaGVscChhcmdzLCBtYWluX2NvbW1hbmRfdXNhZ2UsIHN1YmNvbW1hbmRzKQotICAgIGVsaWYgYXJnc1swXSBub3QgaW4gc3ViY29tbWFuZHM6Ci0gICAgICAgIGxvZ2dlci5lcnJvcigiVW5zdXBwb3J0ZWQgc3ViY29tbWFuZCAlcywgZXhpdGluZ1xuIiwgYXJnc1swXSkKKyAgICBlbGlmIGFyZ3MuY29tbWFuZCBub3QgaW4gc3ViY29tbWFuZHM6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVW5zdXBwb3J0ZWQgc3ViY29tbWFuZCAlcywgZXhpdGluZ1xuIiwgYXJncy5jb21tYW5kKQogICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCiAgICAgICAgIHJldHVybiAxCiAgICAgZWxzZToKLSAgICAgICAgdXNhZ2UgPSBzdWJjb21tYW5kcy5nZXQoYXJnc1swXSwgc3ViY29tbWFuZF9lcnJvcilbMV0KLSAgICAgICAgc3ViY29tbWFuZHMuZ2V0KGFyZ3NbMF0sIHN1YmNvbW1hbmRfZXJyb3IpWzBdKGFyZ3NbMTpdLCB1c2FnZSkKKyAgICAgICAgc3ViY21kID0gc3ViY29tbWFuZHMuZ2V0KGFyZ3MuY29tbWFuZCwgc3ViY29tbWFuZF9lcnJvcikKKyAgICAgICAgdXNhZ2UgPSBzdWJjbWRbMV0KKyAgICAgICAgc3ViY21kWzBdKGFyZ3MsIHVzYWdlKQogCiAKICMjCkBAIC0xMzAsMTAgKzEzMSwxMCBAQAogIENyZWF0ZSBhIG5ldyBPcGVuRW1iZWRkZWQgaW1hZ2UKIAogIHVzYWdlOiB3aWMgY3JlYXRlIDx3a3MgZmlsZSBvciBpbWFnZSBuYW1lPiBbLW8gPERJUk5BTUU+IHwgLS1vdXRkaXIgPERJUk5BTUU+XQotICAgICAgICAgICAgWy1pIDxKU09OIFBST1BFUlRZIEZJTEU+IHwgLS1pbmZpbGUgPEpTT04gUFJPUEVSVFlfRklMRT5dCiAgICAgICAgICAgICBbLWUgfCAtLWltYWdlLW5hbWVdIFstcywgLS1za2lwLWJ1aWxkLWNoZWNrXSBbLUQsIC0tZGVidWddCiAgICAgICAgICAgICBbLXIsIC0tcm9vdGZzLWRpcl0gWy1iLCAtLWJvb3RpbWctZGlyXQogICAgICAgICAgICAgWy1rLCAtLWtlcm5lbC1kaXJdIFstbiwgLS1uYXRpdmUtc3lzcm9vdF0gWy1mLCAtLWJ1aWxkLXJvb3Rmc10KKyAgICAgICAgICAgIFstYywgLS1jb21wcmVzcy13aXRoXSBbLW0sIC0tYm1hcF0KIAogIFRoaXMgY29tbWFuZCBjcmVhdGVzIGFuIE9wZW5FbWJlZGRlZCBpbWFnZSBiYXNlZCBvbiB0aGUgJ09FIGtpY2tzdGFydAogIGNvbW1hbmRzJyBmb3VuZCBpbiB0aGUgPHdrcyBmaWxlPi4KQEAgLTE1NCw3ICsxNTUsNyBAQAogICAgICAgICBbLWUgfCAtLWltYWdlLW5hbWVdIFstcywgLS1za2lwLWJ1aWxkLWNoZWNrXSBbLUQsIC0tZGVidWddCiAgICAgICAgIFstciwgLS1yb290ZnMtZGlyXSBbLWIsIC0tYm9vdGltZy1kaXJdCiAgICAgICAgIFstaywgLS1rZXJuZWwtZGlyXSBbLW4sIC0tbmF0aXZlLXN5c3Jvb3RdIFstZiwgLS1idWlsZC1yb290ZnNdCi0gICAgICAgIFstYywgLS1jb21wcmVzcy13aXRoXSBbLW0sIC0tYm1hcF0KKyAgICAgICAgWy1jLCAtLWNvbXByZXNzLXdpdGhdIFstbSwgLS1ibWFwXSBbLS1uby1mc3RhYi11cGRhdGVdCiAKIERFU0NSSVBUSU9OCiAgICAgVGhpcyBjb21tYW5kIGNyZWF0ZXMgYW4gT3BlbkVtYmVkZGVkIGltYWdlIGJhc2VkIG9uIHRoZSAnT0UKQEAgLTIyNiw2ICsyMjcsMTEgQEAKIAogICAgIFRoZSAtbSBvcHRpb24gaXMgdXNlZCB0byBwcm9kdWNlIC5ibWFwIGZpbGUgZm9yIHRoZSBpbWFnZS4gVGhpcyBmaWxlCiAgICAgY2FuIGJlIHVzZWQgdG8gZmxhc2ggaW1hZ2UgdXNpbmcgYm1hcHRvb2wgdXRpbGl0eS4KKworICAgIFRoZSAtLW5vLWZzdGFiLXVwZGF0ZSBvcHRpb24gaXMgdXNlZCB0byBkb2Vzbid0IGNoYW5nZSBmc3RhYiBmaWxlLiBXaGVuCisgICAgdXNpbmcgdGhpcyBvcHRpb24gdGhlIGZpbmFsIGZzdGFiIGZpbGUgd2lsbCBiZSBzYW1lIHRoYXQgaW4gcm9vdGZzIGFuZAorICAgIHdpYyBkb2Vzbid0IHVwZGF0ZSBmaWxlLCBlLmcgYWRkaW5nIGEgbmV3IG1vdW50IHBvaW50LiBVc2VyIGNhbiBjb250cm9sCisgICAgdGhlIGZzdGFiIGZpbGUgY29udGVudCBpbiBiYXNlLWZpbGVzIHJlY2lwZS4KICIiIgogCiB3aWNfbGlzdF91c2FnZSA9ICIiIgpAQCAtMjgzLDYgKzI4OSwyMzAgQEAKICAgICBkZXRhaWxzLgogIiIiCiAKK3dpY19sc191c2FnZSA9ICIiIgorCisgTGlzdCBjb250ZW50IG9mIGEgcGFydGl0aW9uZWQgaW1hZ2UKKworIHVzYWdlOiB3aWMgbHMgPGltYWdlPls6PHBhcnRpdGlvbj5bPHBhdGg+XV0gWy0tbmF0aXZlLXN5c3Jvb3QgPHBhdGg+XQorCisgVGhpcyBjb21tYW5kICBvdXRwdXRzIGVpdGhlciBsaXN0IG9mIGltYWdlIHBhcnRpdGlvbnMgb3IgZGlyZWN0b3J5IGNvbnRlbnRzCisgb2YgdmZhdCBhbmQgZXh0KiBwYXJ0aXRpb25zLgorCisgU2VlICd3aWMgaGVscCBscycgZm9yIG1vcmUgZGV0YWlsZWQgaW5zdHJ1Y3Rpb25zLgorCisiIiIKKword2ljX2xzX2hlbHAgPSAiIiIKKworTkFNRQorICAgIHdpYyBscyAtIExpc3QgY29udGVudHMgb2YgcGFydGl0aW9uZWQgaW1hZ2Ugb3IgcGFydGl0aW9uCisKK1NZTk9QU0lTCisgICAgd2ljIGxzIDxpbWFnZT4KKyAgICB3aWMgbHMgPGltYWdlPjo8dmZhdCBvciBleHQqIHBhcnRpdGlvbj4KKyAgICB3aWMgbHMgPGltYWdlPjo8dmZhdCBvciBleHQqIHBhcnRpdGlvbj48cGF0aD4KKyAgICB3aWMgbHMgPGltYWdlPjo8dmZhdCBvciBleHQqIHBhcnRpdGlvbj48cGF0aD4gLS1uYXRpdmUtc3lzcm9vdCA8cGF0aD4KKworREVTQ1JJUFRJT04KKyAgICBUaGlzIGNvbW1hbmQgbGlzdHMgZWl0aGVyIHBhcnRpdGlvbnMgb2YgdGhlIGltYWdlIG9yIGRpcmVjdG9yeSBjb250ZW50cworICAgIG9mIHZmYXQgb3IgZXh0KiBwYXJ0aXRpb25zLgorCisgICAgVGhlIGZpcnN0IGZvcm0gaXQgbGlzdHMgcGFydGl0aW9ucyBvZiB0aGUgaW1hZ2UuCisgICAgRm9yIGV4YW1wbGU6CisgICAgICAgICQgd2ljIGxzIHRtcC9kZXBsb3kvaW1hZ2VzL3FlbXV4ODYtNjQvY29yZS1pbWFnZS1taW5pbWFsLXFlbXV4ODYtNjQud2ljCisgICAgICAgIE51bSAgICAgU3RhcnQgICAgICAgIEVuZCAgICAgICAgICBTaXplICAgICAgRnN0eXBlCisgICAgICAgIDEgICAgICAgIDEwNDg1NzYgICAgIDI0NDM4NzgzICAgICAyMzM5MDIwOCAgZmF0MTYKKyAgICAgICAgMiAgICAgICAyNTE2NTgyNCAgICAgNTAzMTUyNjMgICAgIDI1MTQ5NDQwICBleHQ0CisKKyAgICBTZWNvbmQgYW5kIHRoaXJkIGZvcm0gbGlzdCBkaXJlY3RvcnkgY29udGVudCBvZiB0aGUgcGFydGl0aW9uOgorICAgICAgICAkIHdpYyBscyB0bXAvZGVwbG95L2ltYWdlcy9xZW11eDg2LTY0L2NvcmUtaW1hZ2UtbWluaW1hbC1xZW11eDg2LTY0LndpYzoxCisgICAgICAgIFZvbHVtZSBpbiBkcml2ZSA6IGlzIGJvb3QKKyAgICAgICAgIFZvbHVtZSBTZXJpYWwgTnVtYmVyIGlzIDJERjItNUYwMgorICAgICAgICBEaXJlY3RvcnkgZm9yIDo6LworCisgICAgICAgIGVmaSAgICAgICAgICA8RElSPiAgICAgMjAxNy0wNS0xMSAgMTA6NTQKKyAgICAgICAgc3RhcnR1cCAgbnNoICAgICAgICAyNiAyMDE3LTA1LTExICAxMDo1NAorICAgICAgICB2bWxpbnV6ICAgICAgICA2OTIyMjg4IDIwMTctMDUtMTEgIDEwOjU0CisgICAgICAgICAgICAgICAgMyBmaWxlcyAgICAgICAgICAgNiA5MjIgMzE0IGJ5dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNSA4MTggNzUyIGJ5dGVzIGZyZWUKKworCisgICAgICAgICQgd2ljIGxzIHRtcC9kZXBsb3kvaW1hZ2VzL3FlbXV4ODYtNjQvY29yZS1pbWFnZS1taW5pbWFsLXFlbXV4ODYtNjQud2ljOjEvRUZJL2Jvb3QvCisgICAgICAgIFZvbHVtZSBpbiBkcml2ZSA6IGlzIGJvb3QKKyAgICAgICAgIFZvbHVtZSBTZXJpYWwgTnVtYmVyIGlzIDJERjItNUYwMgorICAgICAgICBEaXJlY3RvcnkgZm9yIDo6L0VGSS9ib290CisKKyAgICAgICAgLiAgICAgICAgICAgIDxESVI+ICAgICAyMDE3LTA1LTExICAxMDo1NAorICAgICAgICAuLiAgICAgICAgICAgPERJUj4gICAgIDIwMTctMDUtMTEgIDEwOjU0CisgICAgICAgIGdydWIgICAgIGNmZyAgICAgICA2NzkgMjAxNy0wNS0xMSAgMTA6NTQKKyAgICAgICAgYm9vdHg2NCAgZWZpICAgIDU3MTM5MiAyMDE3LTA1LTExICAxMDo1NAorICAgICAgICAgICAgICAgIDQgZmlsZXMgICAgICAgICAgICAgNTcyIDA3MSBieXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUgODE4IDc1MiBieXRlcyBmcmVlCisKKyAgICBUaGUgLW4gb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgcGF0aCB0byB0aGUgbmF0aXZlIHN5c3Jvb3QKKyAgICBjb250YWluaW5nIHRoZSB0b29scyhwYXJ0ZWQgYW5kIG10b29scykgdG8gdXNlLgorCisiIiIKKword2ljX2NwX3VzYWdlID0gIiIiCisKKyBDb3B5IGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byB0aGUgdmZhdCBvciBleHQqIHBhcnRpdGlvbgorCisgdXNhZ2U6IHdpYyBjcCA8c3JjPiA8aW1hZ2U+OjxwYXJ0aXRpb24+WzxwYXRoPl0gWy0tbmF0aXZlLXN5c3Jvb3QgPHBhdGg+XQorCisgVGhpcyBjb21tYW5kICBjb3BpZXMgbG9jYWwgZmlsZXMgb3IgZGlyZWN0b3JpZXMgdG8gdGhlIHZmYXQgb3IgZXh0KiBwYXJ0aXRpb25zCitvZiBwYXJ0aXRpb25lZCAgaW1hZ2UuCisKKyBTZWUgJ3dpYyBoZWxwIGNwJyBmb3IgbW9yZSBkZXRhaWxlZCBpbnN0cnVjdGlvbnMuCisKKyIiIgorCit3aWNfY3BfaGVscCA9ICIiIgorCitOQU1FCisgICAgd2ljIGNwIC0gY29weSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gdGhlIHZmYXQgb3IgZXh0KiBwYXJ0aXRpb25zCisKK1NZTk9QU0lTCisgICAgd2ljIGNwIDxzcmM+IDxpbWFnZT46PHBhcnRpdGlvbj4KKyAgICB3aWMgY3AgPHNyYz4gPGltYWdlPjo8cGFydGl0aW9uPjxwYXRoPgorICAgIHdpYyBjcCA8c3JjPiA8aW1hZ2U+OjxwYXJ0aXRpb24+PHBhdGg+IC0tbmF0aXZlLXN5c3Jvb3QgPHBhdGg+CisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIGNvcGllcyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gdGhlIHZmYXQgb3IgZXh0KiBwYXJ0aXRpb24gb2YKKyAgICB0aGUgcGFydGl0aW9uZWQgaW1hZ2UuCisKKyAgICBUaGUgZmlyc3QgZm9ybSBvZiBpdCBjb3BpZXMgZmlsZSBvciBkaXJlY3RvcnkgdG8gdGhlIHJvb3QgZGlyZWN0b3J5IG9mCisgICAgdGhlIHBhcnRpdGlvbjoKKyAgICAgICAgJCB3aWMgY3AgdGVzdC53a3MgdG1wL2RlcGxveS9pbWFnZXMvcWVtdXg4Ni02NC9jb3JlLWltYWdlLW1pbmltYWwtcWVtdXg4Ni02NC53aWM6MQorICAgICAgICAkIHdpYyBscyB0bXAvZGVwbG95L2ltYWdlcy9xZW11eDg2LTY0L2NvcmUtaW1hZ2UtbWluaW1hbC1xZW11eDg2LTY0LndpYzoxCisgICAgICAgIFZvbHVtZSBpbiBkcml2ZSA6IGlzIGJvb3QKKyAgICAgICAgIFZvbHVtZSBTZXJpYWwgTnVtYmVyIGlzIERCNEMtRkQ0QworICAgICAgICBEaXJlY3RvcnkgZm9yIDo6LworCisgICAgICAgIGVmaSAgICAgICAgICA8RElSPiAgICAgMjAxNy0wNS0yNCAgMTg6MTUKKyAgICAgICAgbG9hZGVyICAgICAgIDxESVI+ICAgICAyMDE3LTA1LTI0ICAxODoxNQorICAgICAgICBzdGFydHVwICBuc2ggICAgICAgIDI2IDIwMTctMDUtMjQgIDE4OjE1CisgICAgICAgIHZtbGludXogICAgICAgIDY5MjYzODQgMjAxNy0wNS0yNCAgMTg6MTUKKyAgICAgICAgdGVzdCAgICAgd2tzICAgICAgIDYyOCAyMDE3LTA1LTI0ICAyMToyMgorICAgICAgICAgICAgICAgIDUgZmlsZXMgICAgICAgICAgIDYgOTI3IDAzOCBieXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUgNjc3IDQ0MCBieXRlcyBmcmVlCisKKyAgICBUaGUgc2Vjb25kIGZvcm0gb2YgdGhlIGNvbW1hbmQgY29waWVzIGZpbGUgb3IgZGlyZWN0b3J5IHRvIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5CisgICAgb24gdGhlIHBhcnRpdGlvbjoKKyAgICAgICAkIHdpYyBjcCB0ZXN0IHRtcC9kZXBsb3kvaW1hZ2VzL3FlbXV4ODYtNjQvY29yZS1pbWFnZS1taW5pbWFsLXFlbXV4ODYtNjQud2ljOjEvZWZpLworICAgICAgICQgd2ljIGxzIHRtcC9kZXBsb3kvaW1hZ2VzL3FlbXV4ODYtNjQvY29yZS1pbWFnZS1taW5pbWFsLXFlbXV4ODYtNjQud2ljOjEvZWZpLworICAgICAgIFZvbHVtZSBpbiBkcml2ZSA6IGlzIGJvb3QKKyAgICAgICAgVm9sdW1lIFNlcmlhbCBOdW1iZXIgaXMgREI0Qy1GRDRDCisgICAgICAgRGlyZWN0b3J5IGZvciA6Oi9lZmkKKworICAgICAgIC4gICAgICAgICAgICA8RElSPiAgICAgMjAxNy0wNS0yNCAgMTg6MTUKKyAgICAgICAuLiAgICAgICAgICAgPERJUj4gICAgIDIwMTctMDUtMjQgIDE4OjE1CisgICAgICAgYm9vdCAgICAgICAgIDxESVI+ICAgICAyMDE3LTA1LTI0ICAxODoxNQorICAgICAgIHRlc3QgICAgICAgICA8RElSPiAgICAgMjAxNy0wNS0yNCAgMjE6MjcKKyAgICAgICAgICAgICAgIDQgZmlsZXMgICAgICAgICAgICAgICAgICAgMCBieXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNSA2NzUgMzkyIGJ5dGVzIGZyZWUKKworICAgIFRoZSAtbiBvcHRpb24gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBwYXRoIHRvIHRoZSBuYXRpdmUgc3lzcm9vdAorICAgIGNvbnRhaW5pbmcgdGhlIHRvb2xzKHBhcnRlZCBhbmQgbXRvb2xzKSB0byB1c2UuCisiIiIKKword2ljX3JtX3VzYWdlID0gIiIiCisKKyBSZW1vdmUgZmlsZXMgb3IgZGlyZWN0b3JpZXMgZnJvbSB0aGUgdmZhdCBvciBleHQqIHBhcnRpdGlvbnMKKworIHVzYWdlOiB3aWMgcm0gPGltYWdlPjo8cGFydGl0aW9uPjxwYXRoPiBbLS1uYXRpdmUtc3lzcm9vdCA8cGF0aD5dCisKKyBUaGlzIGNvbW1hbmQgIHJlbW92ZXMgZmlsZXMgb3IgZGlyZWN0b3JpZXMgZnJvbSB0aGUgdmZhdCBvciBleHQqIHBhcnRpdGlvbnMgb2YKKyB0aGUgcGFydGl0aW9uZWQgaW1hZ2UuCisKKyBTZWUgJ3dpYyBoZWxwIHJtJyBmb3IgbW9yZSBkZXRhaWxlZCBpbnN0cnVjdGlvbnMuCisKKyIiIgorCit3aWNfcm1faGVscCA9ICIiIgorCitOQU1FCisgICAgd2ljIHJtIC0gcmVtb3ZlIGZpbGVzIG9yIGRpcmVjdG9yaWVzIGZyb20gdGhlIHZmYXQgb3IgZXh0KiBwYXJ0aXRpb25zCisKK1NZTk9QU0lTCisgICAgd2ljIHJtIDxzcmM+IDxpbWFnZT46PHBhcnRpdGlvbj48cGF0aD4KKyAgICB3aWMgcm0gPHNyYz4gPGltYWdlPjo8cGFydGl0aW9uPjxwYXRoPiAtLW5hdGl2ZS1zeXNyb290IDxwYXRoPgorCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCByZW1vdmVzIGZpbGVzIG9yIGRpcmVjdG9yaWVzIGZyb20gdGhlIHZmYXQgb3IgZXh0KiBwYXJ0aXRpb24gb2YgdGhlCisgICAgcGFydGl0aW9uZWQgaW1hZ2U6CisKKyAgICAgICAgJCB3aWMgbHMgLi90bXAvZGVwbG95L2ltYWdlcy9xZW11eDg2LTY0L2NvcmUtaW1hZ2UtbWluaW1hbC1xZW11eDg2LTY0LndpYzoxCisgICAgICAgIFZvbHVtZSBpbiBkcml2ZSA6IGlzIGJvb3QKKyAgICAgICAgIFZvbHVtZSBTZXJpYWwgTnVtYmVyIGlzIDExRDAtREUyMQorICAgICAgICBEaXJlY3RvcnkgZm9yIDo6LworCisgICAgICAgIGxpYmNvbTMyIGMzMiAgICAxODY1MDAgMjAxNy0wNi0wMiAgMTU6MTUKKyAgICAgICAgbGlidXRpbCAgYzMyICAgICAyNDE0OCAyMDE3LTA2LTAyICAxNToxNQorICAgICAgICBzeXNsaW51eCBjZmcgICAgICAgMjA5IDIwMTctMDYtMDIgIDE1OjE1CisgICAgICAgIHZlc2FtZW51IGMzMiAgICAgMjcxMDQgMjAxNy0wNi0wMiAgMTU6MTUKKyAgICAgICAgdm1saW51eiAgICAgICAgNjkyNjM4NCAyMDE3LTA2LTAyICAxNToxNQorICAgICAgICAgICAgICAgIDUgZmlsZXMgICAgICAgICAgIDcgMTY0IDM0NSBieXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYgNTgyIDY1NiBieXRlcyBmcmVlCisKKyAgICAgICAgJCB3aWMgcm0gLi90bXAvZGVwbG95L2ltYWdlcy9xZW11eDg2LTY0L2NvcmUtaW1hZ2UtbWluaW1hbC1xZW11eDg2LTY0LndpYzoxL2xpYnV0aWwuYzMyCisKKyAgICAgICAgJCB3aWMgbHMgLi90bXAvZGVwbG95L2ltYWdlcy9xZW11eDg2LTY0L2NvcmUtaW1hZ2UtbWluaW1hbC1xZW11eDg2LTY0LndpYzoxCisgICAgICAgIFZvbHVtZSBpbiBkcml2ZSA6IGlzIGJvb3QKKyAgICAgICAgIFZvbHVtZSBTZXJpYWwgTnVtYmVyIGlzIDExRDAtREUyMQorICAgICAgICBEaXJlY3RvcnkgZm9yIDo6LworCisgICAgICAgIGxpYmNvbTMyIGMzMiAgICAxODY1MDAgMjAxNy0wNi0wMiAgMTU6MTUKKyAgICAgICAgc3lzbGludXggY2ZnICAgICAgIDIwOSAyMDE3LTA2LTAyICAxNToxNQorICAgICAgICB2ZXNhbWVudSBjMzIgICAgIDI3MTA0IDIwMTctMDYtMDIgIDE1OjE1CisgICAgICAgIHZtbGludXogICAgICAgIDY5MjYzODQgMjAxNy0wNi0wMiAgMTU6MTUKKyAgICAgICAgICAgICAgICA0IGZpbGVzICAgICAgICAgICA3IDE0MCAxOTcgYnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2IDYwNyAyMzIgYnl0ZXMgZnJlZQorCisgICAgVGhlIC1uIG9wdGlvbiBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIHBhdGggdG8gdGhlIG5hdGl2ZSBzeXNyb290CisgICAgY29udGFpbmluZyB0aGUgdG9vbHMocGFydGVkIGFuZCBtdG9vbHMpIHRvIHVzZS4KKyIiIgorCit3aWNfd3JpdGVfdXNhZ2UgPSAiIiIKKworIFdyaXRlIGltYWdlIHRvIGEgZGV2aWNlCisKKyB1c2FnZTogd2ljIHdyaXRlIDxpbWFnZT4gPHRhcmdldCBkZXZpY2U+IFstLWV4cGFuZCBbcnVsZXNdXSBbLS1uYXRpdmUtc3lzcm9vdCA8cGF0aD5dCisKKyBUaGlzIGNvbW1hbmQgd3JpdGVzIHBhcnRpdGlvbmVkIGltYWdlIHRvIGEgdGFyZ2V0IGRldmljZSAoVVNCIHN0aWNrLCBTRCBjYXJkIGV0YykuCisKKyBTZWUgJ3dpYyBoZWxwIHdyaXRlJyBmb3IgbW9yZSBkZXRhaWxlZCBpbnN0cnVjdGlvbnMuCisKKyIiIgorCit3aWNfd3JpdGVfaGVscCA9ICIiIgorCitOQU1FCisgICAgd2ljIHdyaXRlIC0gd3JpdGUgYW4gaW1hZ2UgdG8gYSBkZXZpY2UKKworU1lOT1BTSVMKKyAgICB3aWMgd3JpdGUgPGltYWdlPiA8dGFyZ2V0PgorICAgIHdpYyB3cml0ZSA8aW1hZ2U+IDx0YXJnZXQ+IC0tZXhwYW5kIGF1dG8KKyAgICB3aWMgd3JpdGUgPGltYWdlPiA8dGFyZ2V0PiAtLWV4cGFuZCAxOjEwME0tMjozMDBNCisgICAgd2ljIHdyaXRlIDxpbWFnZT4gPHRhcmdldD4gLS1uYXRpdmUtc3lzcm9vdCA8cGF0aD4KKworREVTQ1JJUFRJT04KKyAgICBUaGlzIGNvbW1hbmQgd3JpdGVzIGFuIGltYWdlIHRvIGEgdGFyZ2V0IGRldmljZSAoVVNCIHN0aWNrLCBTRCBjYXJkIGV0YykKKworICAgICAgICAkIHdpYyB3cml0ZSAuL3RtcC9kZXBsb3kvaW1hZ2VzL3FlbXV4ODYtNjQvY29yZS1pbWFnZS1taW5pbWFsLXFlbXV4ODYtNjQud2ljIC9kZXYvc2RiCisKKyAgICBUaGUgLS1leHBhbmQgb3B0aW9uIGlzIHVzZWQgdG8gcmVzaXplIGltYWdlIHBhcnRpdGlvbnMuCisgICAgLS1leHBhbmQgYXV0byBleHBhbmRzIHBhcnRpdGlvbnMgdG8gb2NjdXB5IGFsbCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBvbiB0aGUgdGFyZ2V0IGRldmljZS4KKyAgICBJdCdzIGFsc28gcG9zc2libGUgdG8gc3BlY2lmeSBleHBhbnNpb24gcnVsZXMgaW4gYSBmb3JtYXQKKyAgICA8cGFydGl0aW9uPjo8c2l6ZT5bLTxwYXJ0aXRpb24+OjxzaXplPi4uLl0gZm9yIG9uZSBvciBtb3JlIHBhcnRpdGlvbnMuCisgICAgU3BlY2lmeWluZyBzaXplIDAgd2lsbCBrZWVwIHBhcnRpdGlvbiB1bm1vZGlmaWVkLgorICAgIE5vdGU6IFJlc2l6aW5nIGJvb3QgcGFydGl0aW9uIGNhbiByZXN1bHQgaW4gbm9uLWJvb3RhYmxlIGltYWdlIGZvciBub24tRUZJIGltYWdlcy4gSXQgaXMKKyAgICByZWNvbW1lbmRlZCB0byB1c2Ugc2l6ZSAwIGZvciBib290IHBhcnRpdGlvbiB0byBrZWVwIGltYWdlIGJvb3RhYmxlLgorCisgICAgVGhlIC0tbmF0aXZlLXN5c3Jvb3Qgb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgcGF0aCB0byB0aGUgbmF0aXZlIHN5c3Jvb3QKKyAgICBjb250YWluaW5nIHRoZSB0b29scyhwYXJ0ZWQsIHJlc2l6ZTJmcykgdG8gdXNlLgorIiIiCisKIHdpY19wbHVnaW5zX2hlbHAgPSAiIiIKIAogTkFNRQpAQCAtNzQwLDYgKzk3MCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCAtLWZpeGVkLXNpemUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24uCiAKKyAgICAgICAgIC0tcGFydC1uYW1lOiBUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB3aWMuIEl0IHNwZWNpZmllcyBuYW1lIGZvciBHUFQgcGFydGl0aW9ucy4KKwogICAgICAgICAgLS1wYXJ0LXR5cGU6IFRoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHdpYy4gSXQgc3BlY2lmaWVzIHBhcnRpdGlvbgogICAgICAgICAgICAgICAgICAgICAgIHR5cGUgR1VJRCBmb3IgR1BUIHBhcnRpdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwYXJ0aXRpb24gdHlwZSBHVUlEUyBjYW4gYmUgZm91bmQgaGVyZToKQEAgLTc1OCw2ICs5OTAsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGhhcndhcmUgdGhhdCByZXF1aXJlcyBub24tZGVmYXVsdCBwYXJ0aXRpb24gc3lzdGVtIGlkcy4gVGhlIHBhcmFtZXRlcgogICAgICAgICAgICAgICAgICAgICAgIGluIG9uZSBieXRlIGxvbmcgaGV4IG51bWJlciBlaXRoZXIgd2l0aCAweCBwcmVmaXggb3Igd2l0aG91dCBpdC4KIAorICAgICAgICAgLS1ta2ZzLWV4dHJhb3B0czogVGhpcyBvcHRpb24gc3BlY2lmaWVzIGV4dHJhIG9wdGlvbnMgdG8gcGFzcyB0byBta2ZzIHV0aWxpdHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOT1RFLCB0aGF0IHdpYyB1c2VzIGRlZmF1bHQgb3B0aW9ucyBmb3Igc29tZSBmaWxlc3lzdGVtcywgZm9yIGV4YW1wbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICctUyA1MTInIGZvciBta2ZzLmZhdCBvciAnLUYgLWkgODE5MicgZm9yIG1rZnMuZXh0LiBUaG9zZSBvcHRpb25zIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCB0YWtlIGVmZmVjdCB3aGVuIC0tbWtmcy1leHRyYW9wdHMgaXMgdXNlZC4gVGhpcyBzaG91bGQgYmUgdGFrZW4gaW50bworICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudCB3aGVuIHVzaW5nIC0tbWtmcy1leHRyYW9wdHMuCisKICAgICAqIGJvb3Rsb2FkZXIKIAogICAgICAgVGhpcyBjb21tYW5kIGFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IHZhcmlvdXMgYm9vdGxvYWRlcgpAQCAtNzk1LDMgKzEwMzMsMTEgQEAKICAgICAgIC53a3MgZmlsZXMuCiAKICIiIgorCit3aWNfaGVscF9oZWxwID0gIiIiCitOQU1FCisgICAgd2ljIGhlbHAgLSBkaXNwbGF5IGEgaGVscCB0b3BpYworCitERVNDUklQVElPTgorICAgIFNwZWNpZnkgYSBoZWxwIHRvcGljIHRvIGRpc3BsYXkgaXQuIFRvcGljcyBhcmUgc2hvd24gYWJvdmUuCisiIiIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMva3NwYXJzZXIucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2tzcGFyc2VyLnB5CmluZGV4IGQwMjZjYWEuLjc4NTBlODEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMva3NwYXJzZXIucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9rc3BhcnNlci5weQpAQCAtMTE0LDcgKzExNCw3IEBACiAgICAgcmV0dXJuIGFyZwogCiBjbGFzcyBLaWNrU3RhcnQoKToKLSAgICAiIiIiS2lja3N0YXJ0IHBhcnNlciBpbXBsZW1lbnRhdGlvbi4iIiIKKyAgICAiIiJLaWNrc3RhcnQgcGFyc2VyIGltcGxlbWVudGF0aW9uLiIiIgogCiAgICAgREVGQVVMVF9FWFRSQV9TUEFDRSA9IDEwKjEwMjQKICAgICBERUZBVUxUX09WRVJIRUFEX0ZBQ1RPUiA9IDEuMwpAQCAtMTM5LDEwICsxMzksMTIgQEAKICAgICAgICAgcGFydC5hZGRfYXJndW1lbnQoJy0tZnN0eXBlJywgZGVmYXVsdD0ndmZhdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM9KCdleHQyJywgJ2V4dDMnLCAnZXh0NCcsICdidHJmcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcXVhc2hmcycsICd2ZmF0JywgJ21zZG9zJywgJ3N3YXAnKSkKKyAgICAgICAgcGFydC5hZGRfYXJndW1lbnQoJy0tbWtmcy1leHRyYW9wdHMnLCBkZWZhdWx0PScnKQogICAgICAgICBwYXJ0LmFkZF9hcmd1bWVudCgnLS1sYWJlbCcpCiAgICAgICAgIHBhcnQuYWRkX2FyZ3VtZW50KCctLW5vLXRhYmxlJywgYWN0aW9uPSdzdG9yZV90cnVlJykKICAgICAgICAgcGFydC5hZGRfYXJndW1lbnQoJy0tb25kaXNrJywgJy0tb25kcml2ZScsIGRlc3Q9J2Rpc2snLCBkZWZhdWx0PSdzZGEnKQogICAgICAgICBwYXJ0LmFkZF9hcmd1bWVudCgiLS1vdmVyaGVhZC1mYWN0b3IiLCB0eXBlPW92ZXJoZWFkdHlwZSkKKyAgICAgICAgcGFydC5hZGRfYXJndW1lbnQoJy0tcGFydC1uYW1lJykKICAgICAgICAgcGFydC5hZGRfYXJndW1lbnQoJy0tcGFydC10eXBlJykKICAgICAgICAgcGFydC5hZGRfYXJndW1lbnQoJy0tcm9vdGZzLWRpcicpCiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvbWlzYy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvbWlzYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTg4OGI0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9taXNjLnB5CkBAIC0wLDAgKzEsMjYzIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBwbGFjZSB0byBjb2xsZWN0IHZhcmlvdXMgd2ljLXJlbGF0ZWQgdXRpbHMKKyMgZm9yIHRoZSBPcGVuRW1iZWRkZWQgSW1hZ2UgVG9vbHMuCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gbGludXguaW50ZWwuY29tPgorIworIiIiTWlzY2VsbGFuZW91cyBmdW5jdGlvbnMuIiIiCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN1YnByb2Nlc3MKKworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKK2Zyb20gZGlzdHV0aWxzIGltcG9ydCBzcGF3bgorCitmcm9tIHdpYyBpbXBvcnQgV2ljRXJyb3IKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3dpYycpCisKKyMgZXhlY3V0YWJsZSAtPiByZWNpcGUgcGFpcnMgZm9yIGV4ZWNfbmF0aXZlX2NtZAorTkFUSVZFX1JFQ0lQRVMgPSB7ImJtYXB0b29sIjogImJtYXAtdG9vbHMiLAorICAgICAgICAgICAgICAgICAgImdydWItbWtpbWFnZSI6ICJncnViLWVmaSIsCisgICAgICAgICAgICAgICAgICAiaXNvaHlicmlkIjogInN5c2xpbnV4IiwKKyAgICAgICAgICAgICAgICAgICJtY29weSI6ICJtdG9vbHMiLAorICAgICAgICAgICAgICAgICAgIm1kZWwiIDogIm10b29scyIsCisgICAgICAgICAgICAgICAgICAibWRlbHRyZWUiIDogIm10b29scyIsCisgICAgICAgICAgICAgICAgICAibWRpciIgOiAibXRvb2xzIiwKKyAgICAgICAgICAgICAgICAgICJta2Rvc2ZzIjogImRvc2ZzdG9vbHMiLAorICAgICAgICAgICAgICAgICAgIm1raXNvZnMiOiAiY2RydG9vbHMiLAorICAgICAgICAgICAgICAgICAgIm1rZnMuYnRyZnMiOiAiYnRyZnMtdG9vbHMiLAorICAgICAgICAgICAgICAgICAgIm1rZnMuZXh0MiI6ICJlMmZzcHJvZ3MiLAorICAgICAgICAgICAgICAgICAgIm1rZnMuZXh0MyI6ICJlMmZzcHJvZ3MiLAorICAgICAgICAgICAgICAgICAgIm1rZnMuZXh0NCI6ICJlMmZzcHJvZ3MiLAorICAgICAgICAgICAgICAgICAgIm1rZnMudmZhdCI6ICJkb3Nmc3Rvb2xzIiwKKyAgICAgICAgICAgICAgICAgICJta3NxdWFzaGZzIjogInNxdWFzaGZzLXRvb2xzIiwKKyAgICAgICAgICAgICAgICAgICJta3N3YXAiOiAidXRpbC1saW51eCIsCisgICAgICAgICAgICAgICAgICAibW1kIjogIm10b29scyIsCisgICAgICAgICAgICAgICAgICAicGFydGVkIjogInBhcnRlZCIsCisgICAgICAgICAgICAgICAgICAic2ZkaXNrIjogInV0aWwtbGludXgiLAorICAgICAgICAgICAgICAgICAgInNnZGlzayI6ICJncHRmZGlzayIsCisgICAgICAgICAgICAgICAgICAic3lzbGludXgiOiAic3lzbGludXgiCisgICAgICAgICAgICAgICAgIH0KKworZGVmIHJ1bnRvb2woY21kbG5fb3JfYXJncyk6CisgICAgIiIiIHdyYXBwZXIgZm9yIG1vc3Qgb2YgdGhlIHN1YnByb2Nlc3MgY2FsbHMKKyAgICBpbnB1dDoKKyAgICAgICAgY21kbG5fb3JfYXJnczogY2FuIGJlIGJvdGggYXJncyBhbmQgY21kbG4gc3RyIChzaGVsbD1UcnVlKQorICAgIHJldHVybjoKKyAgICAgICAgcmMsIG91dHB1dAorICAgICIiIgorICAgIGlmIGlzaW5zdGFuY2UoY21kbG5fb3JfYXJncywgbGlzdCk6CisgICAgICAgIGNtZCA9IGNtZGxuX29yX2FyZ3NbMF0KKyAgICAgICAgc2hlbGwgPSBGYWxzZQorICAgIGVsc2U6CisgICAgICAgIGltcG9ydCBzaGxleAorICAgICAgICBjbWQgPSBzaGxleC5zcGxpdChjbWRsbl9vcl9hcmdzKVswXQorICAgICAgICBzaGVsbCA9IFRydWUKKworICAgIHNvdXQgPSBzdWJwcm9jZXNzLlBJUEUKKyAgICBzZXJyID0gc3VicHJvY2Vzcy5TVERPVVQKKworICAgIHRyeToKKyAgICAgICAgcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oY21kbG5fb3JfYXJncywgc3Rkb3V0PXNvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zZXJyLCBzaGVsbD1zaGVsbCkKKyAgICAgICAgc291dCwgc2VyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUoKQorICAgICAgICAjIGNvbWJpbmUgc3Rkb3V0IGFuZCBzdGRlcnIsIGZpbHRlciBOb25lIG91dCBhbmQgZGVjb2RlCisgICAgICAgIG91dCA9ICcnLmpvaW4oW291dC5kZWNvZGUoJ3V0Zi04JykgZm9yIG91dCBpbiBbc291dCwgc2Vycl0gaWYgb3V0XSkKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgIGlmIGVyci5lcnJubyA9PSAyOgorICAgICAgICAgICAgIyBbRXJybm8gMl0gTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorICAgICAgICAgICAgcmFpc2UgV2ljRXJyb3IoJ0Nhbm5vdCBydW4gY29tbWFuZDogJXMsIGxvc3QgZGVwZW5kZW5jeT8nICUgY21kKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgIyByZWxheQorCisgICAgcmV0dXJuIHByb2Nlc3MucmV0dXJuY29kZSwgb3V0CisKK2RlZiBfZXhlY19jbWQoY21kX2FuZF9hcmdzLCBhc19zaGVsbD1GYWxzZSk6CisgICAgIiIiCisgICAgRXhlY3V0ZSBjb21tYW5kLCBjYXRjaGluZyBzdGRlcnIsIHN0ZG91dAorCisgICAgTmVlZCB0byBleGVjdXRlIGFzX3NoZWxsIGlmIHRoZSBjb21tYW5kIHVzZXMgd2lsZGNhcmRzCisgICAgIiIiCisgICAgbG9nZ2VyLmRlYnVnKCJfZXhlY19jbWQ6ICVzIiwgY21kX2FuZF9hcmdzKQorICAgIGFyZ3MgPSBjbWRfYW5kX2FyZ3Muc3BsaXQoKQorICAgIGxvZ2dlci5kZWJ1ZyhhcmdzKQorCisgICAgaWYgYXNfc2hlbGw6CisgICAgICAgIHJldCwgb3V0ID0gcnVudG9vbChjbWRfYW5kX2FyZ3MpCisgICAgZWxzZToKKyAgICAgICAgcmV0LCBvdXQgPSBydW50b29sKGFyZ3MpCisgICAgb3V0ID0gb3V0LnN0cmlwKCkKKyAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgcmFpc2UgV2ljRXJyb3IoIl9leGVjX2NtZDogJXMgcmV0dXJuZWQgJyVzJyBpbnN0ZWFkIG9mIDBcbm91dHB1dDogJXMiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAoY21kX2FuZF9hcmdzLCByZXQsIG91dCkpCisKKyAgICBsb2dnZXIuZGVidWcoIl9leGVjX2NtZDogb3V0cHV0IGZvciAlcyAocmMgPSAlZCk6ICVzIiwKKyAgICAgICAgICAgICAgICAgY21kX2FuZF9hcmdzLCByZXQsIG91dCkKKworICAgIHJldHVybiByZXQsIG91dAorCisKK2RlZiBleGVjX2NtZChjbWRfYW5kX2FyZ3MsIGFzX3NoZWxsPUZhbHNlKToKKyAgICAiIiIKKyAgICBFeGVjdXRlIGNvbW1hbmQsIHJldHVybiBvdXRwdXQKKyAgICAiIiIKKyAgICByZXR1cm4gX2V4ZWNfY21kKGNtZF9hbmRfYXJncywgYXNfc2hlbGwpWzFdCisKKworZGVmIGV4ZWNfbmF0aXZlX2NtZChjbWRfYW5kX2FyZ3MsIG5hdGl2ZV9zeXNyb290LCBwc2V1ZG89IiIpOgorICAgICIiIgorICAgIEV4ZWN1dGUgbmF0aXZlIGNvbW1hbmQsIGNhdGNoaW5nIHN0ZGVyciwgc3Rkb3V0CisKKyAgICBOZWVkIHRvIGV4ZWN1dGUgYXNfc2hlbGwgaWYgdGhlIGNvbW1hbmQgdXNlcyB3aWxkY2FyZHMKKworICAgIEFsd2F5cyBuZWVkIHRvIGV4ZWN1dGUgbmF0aXZlIGNvbW1hbmRzIGFzX3NoZWxsCisgICAgIiIiCisgICAgIyBUaGUgcmVhc29uIC0xIGlzIHVzZWQgaXMgYmVjYXVzZSB0aGVyZSBtYXkgYmUgImV4cG9ydCIgY29tbWFuZHMuCisgICAgYXJncyA9IGNtZF9hbmRfYXJncy5zcGxpdCgnOycpWy0xXS5zcGxpdCgpCisgICAgbG9nZ2VyLmRlYnVnKGFyZ3MpCisKKyAgICBpZiBwc2V1ZG86CisgICAgICAgIGNtZF9hbmRfYXJncyA9IHBzZXVkbyArIGNtZF9hbmRfYXJncworCisgICAgbmF0aXZlX3BhdGhzID0gIiVzL3NiaW46JXMvdXNyL3NiaW46JXMvdXNyL2JpbiIgJSBcCisgICAgICAgICAgICAgICAgICAgKG5hdGl2ZV9zeXNyb290LCBuYXRpdmVfc3lzcm9vdCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICBuYXRpdmVfY21kX2FuZF9hcmdzID0gImV4cG9ydCBQQVRIPSVzOiRQQVRIOyVzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAobmF0aXZlX3BhdGhzLCBjbWRfYW5kX2FyZ3MpCisgICAgbG9nZ2VyLmRlYnVnKCJleGVjX25hdGl2ZV9jbWQ6ICVzIiwgbmF0aXZlX2NtZF9hbmRfYXJncykKKworICAgICMgSWYgdGhlIGNvbW1hbmQgaXNuJ3QgaW4gdGhlIG5hdGl2ZSBzeXNyb290IHNheSB3ZSBmYWlsZWQuCisgICAgaWYgc3Bhd24uZmluZF9leGVjdXRhYmxlKGFyZ3NbMF0sIG5hdGl2ZV9wYXRocyk6CisgICAgICAgIHJldCwgb3V0ID0gX2V4ZWNfY21kKG5hdGl2ZV9jbWRfYW5kX2FyZ3MsIFRydWUpCisgICAgZWxzZToKKyAgICAgICAgcmV0ID0gMTI3CisgICAgICAgIG91dCA9ICJjYW4ndCBmaW5kIG5hdGl2ZSBleGVjdXRhYmxlICVzIGluICVzIiAlIChhcmdzWzBdLCBuYXRpdmVfcGF0aHMpCisKKyAgICBwcm9nID0gYXJnc1swXQorICAgICMgc2hlbGwgY29tbWFuZC1ub3QtZm91bmQKKyAgICBpZiByZXQgPT0gMTI3IFwKKyAgICAgICBvciAocHNldWRvIGFuZCByZXQgPT0gMSBhbmQgb3V0ID09ICJDYW4ndCBmaW5kICclcycgaW4gJFBBVEguIiAlIHByb2cpOgorICAgICAgICBtc2cgPSAiQSBuYXRpdmUgcHJvZ3JhbSAlcyByZXF1aXJlZCB0byBidWlsZCB0aGUgaW1hZ2UgIlwKKyAgICAgICAgICAgICAgIndhcyBub3QgZm91bmQgKHNlZSBkZXRhaWxzIGFib3ZlKS5cblxuIiAlIHByb2cKKyAgICAgICAgcmVjaXBlID0gTkFUSVZFX1JFQ0lQRVMuZ2V0KHByb2cpCisgICAgICAgIGlmIHJlY2lwZToKKyAgICAgICAgICAgIG1zZyArPSAiUGxlYXNlIG1ha2Ugc3VyZSB3aWMtdG9vbHMgaGF2ZSAlcy1uYXRpdmUgaW4gaXRzIERFUEVORFMsICJcCisgICAgICAgICAgICAgICAgICAgImJ1aWxkIGl0IHdpdGggJ2JpdGJha2Ugd2ljLXRvb2xzJyBhbmQgdHJ5IGFnYWluLlxuIiAlIHJlY2lwZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnICs9ICJXaWMgZmFpbGVkIHRvIGZpbmQgYSByZWNpcGUgdG8gYnVpbGQgbmF0aXZlICVzLiBQbGVhc2UgIlwKKyAgICAgICAgICAgICAgICAgICAiZmlsZSBhIGJ1ZyBhZ2FpbnN0IHdpYy5cbiIgJSBwcm9nCisgICAgICAgIHJhaXNlIFdpY0Vycm9yKG1zZykKKworICAgIHJldHVybiByZXQsIG91dAorCitCT09URERfRVhUUkFfU1BBQ0UgPSAxNjM4NAorCitjbGFzcyBCaXRiYWtlVmFycyhkZWZhdWx0ZGljdCk6CisgICAgIiIiCisgICAgQ29udGFpbmVyIGZvciBCaXRiYWtlIHZhcmlhYmxlcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGRlZmF1bHRkaWN0Ll9faW5pdF9fKHNlbGYsIGRpY3QpCisKKyAgICAgICAgIyBkZWZhdWx0X2ltYWdlIGFuZCB2YXJzX2RpciBhdHRyaWJ1dGVzIHNob3VsZCBiZSBzZXQgZnJvbSBvdXRzaWRlCisgICAgICAgIHNlbGYuZGVmYXVsdF9pbWFnZSA9IE5vbmUKKyAgICAgICAgc2VsZi52YXJzX2RpciA9IE5vbmUKKworICAgIGRlZiBfcGFyc2VfbGluZShzZWxmLCBsaW5lLCBpbWFnZSwgbWF0Y2hlcj1yZS5jb21waWxlKHIiXihbYS16QS1aMC05XC1fKy4vfl0rKT0oLiopIikpOgorICAgICAgICAiIiIKKyAgICAgICAgUGFyc2Ugb25lIGxpbmUgZnJvbSBiaXRiYWtlIC1lIG91dHB1dCBvciBmcm9tIC5lbnYgZmlsZS4KKyAgICAgICAgUHV0IHJlc3VsdCBrZXktdmFsdWUgcGFpciBpbnRvIHRoZSBzdG9yYWdlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgIj0iIG5vdCBpbiBsaW5lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIG1hdGNoID0gbWF0Y2hlci5tYXRjaChsaW5lKQorICAgICAgICBpZiBub3QgbWF0Y2g6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAga2V5LCB2YWwgPSBtYXRjaC5ncm91cHMoKQorICAgICAgICBzZWxmW2ltYWdlXVtrZXldID0gdmFsLnN0cmlwKCciJykKKworICAgIGRlZiBnZXRfdmFyKHNlbGYsIHZhciwgaW1hZ2U9Tm9uZSwgY2FjaGU9VHJ1ZSk6CisgICAgICAgICIiIgorICAgICAgICBHZXQgYml0YmFrZSB2YXJpYWJsZSBmcm9tICdiaXRiYWtlIC1lJyBvdXRwdXQgb3IgZnJvbSAuZW52IGZpbGUuCisgICAgICAgIFRoaXMgaXMgYSBsYXp5IG1ldGhvZCwgaS5lLiBpdCBydW5zIGJpdGJha2Ugb3IgcGFyc2VzIGZpbGUgb25seSB3aGVuCisgICAgICAgIG9ubHkgd2hlbiB2YXJpYWJsZSBpcyByZXF1ZXN0ZWQuIEl0IGFsc28gY2FjaGVzIHJlc3VsdHMuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgaW1hZ2U6CisgICAgICAgICAgICBpbWFnZSA9IHNlbGYuZGVmYXVsdF9pbWFnZQorCisgICAgICAgIGlmIGltYWdlIG5vdCBpbiBzZWxmOgorICAgICAgICAgICAgaWYgaW1hZ2UgYW5kIHNlbGYudmFyc19kaXI6CisgICAgICAgICAgICAgICAgZm5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi52YXJzX2RpciwgaW1hZ2UgKyAnLmVudicpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZm5hbWUpOgorICAgICAgICAgICAgICAgICAgICAjIHBhcnNlIC5lbnYgZmlsZQorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZm5hbWUpIGFzIHZhcnNmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gdmFyc2ZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VfbGluZShsaW5lLCBpbWFnZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiQ291bGRuJ3QgZ2V0IGJpdGJha2UgdmFyaWFibGUgZnJvbSAlcy4iICUgZm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHByaW50KCJGaWxlICVzIGRvZXNuJ3QgZXhpc3QuIiAlIGZuYW1lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBHZXQgYml0YmFrZSAtZSBvdXRwdXQKKyAgICAgICAgICAgICAgICBjbWQgPSAiYml0YmFrZSAtZSIKKyAgICAgICAgICAgICAgICBpZiBpbWFnZToKKyAgICAgICAgICAgICAgICAgICAgY21kICs9ICIgJXMiICUgaW1hZ2UKKworICAgICAgICAgICAgICAgIGxvZ19sZXZlbCA9IGxvZ2dlci5nZXRFZmZlY3RpdmVMZXZlbCgpCisgICAgICAgICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICAgICAgICAgICAgICByZXQsIGxpbmVzID0gX2V4ZWNfY21kKGNtZCkKKyAgICAgICAgICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nX2xldmVsKQorCisgICAgICAgICAgICAgICAgaWYgcmV0OgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNvdWxkbid0IGdldCAnJXMnIG91dHB1dC4iLCBjbWQpCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQml0YmFrZSBmYWlsZWQgd2l0aCBlcnJvcjpcbiVzXG4iLCBsaW5lcykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICAgICAjIFBhcnNlIGJpdGJha2UgLWUgb3V0cHV0CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXMuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlX2xpbmUobGluZSwgaW1hZ2UpCisKKyAgICAgICAgICAgICMgTWFrZSBmaXJzdCBpbWFnZSBhIGRlZmF1bHQgc2V0IG9mIHZhcmlhYmxlcworICAgICAgICAgICAgaWYgY2FjaGU6CisgICAgICAgICAgICAgICAgaW1hZ2VzID0gW2tleSBmb3Iga2V5IGluIHNlbGYgaWYga2V5XQorICAgICAgICAgICAgICAgIGlmIGxlbihpbWFnZXMpID09IDE6CisgICAgICAgICAgICAgICAgICAgIHNlbGZbTm9uZV0gPSBzZWxmW2ltYWdlXQorCisgICAgICAgIHJlc3VsdCA9IHNlbGZbaW1hZ2VdLmdldCh2YXIpCisgICAgICAgIGlmIG5vdCBjYWNoZToKKyAgICAgICAgICAgIHNlbGYucG9wKGltYWdlLCBOb25lKQorCisgICAgICAgIHJldHVybiByZXN1bHQKKworIyBDcmVhdGUgQkJfVkFSUyBzaW5nbGV0b24KK0JCX1ZBUlMgPSBCaXRiYWtlVmFycygpCisKK2RlZiBnZXRfYml0YmFrZV92YXIodmFyLCBpbWFnZT1Ob25lLCBjYWNoZT1UcnVlKToKKyAgICAiIiIKKyAgICBQcm92aWRlIG9sZCBnZXRfYml0YmFrZV92YXIgQVBJIGJ5IHdyYXBwaW5nCisgICAgZ2V0X3ZhciBtZXRob2Qgb2YgQkJfVkFSUyBzaW5nbGV0b24uCisgICAgIiIiCisgICAgcmV0dXJuIEJCX1ZBUlMuZ2V0X3Zhcih2YXIsIGltYWdlLCBjYWNoZSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGFydGl0aW9uLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wYXJ0aXRpb24ucHkKaW5kZXggOTM5ZTY2Ny4uODRmZTg1ZCAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wYXJ0aXRpb24ucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wYXJ0aXRpb24ucHkKQEAgLTI2LDEwICsyNiw5IEBACiAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKLWltcG9ydCB0ZW1wZmlsZQogCiBmcm9tIHdpYyBpbXBvcnQgV2ljRXJyb3IKLWZyb20gd2ljLnV0aWxzLm1pc2MgaW1wb3J0IGV4ZWNfY21kLCBleGVjX25hdGl2ZV9jbWQsIGdldF9iaXRiYWtlX3ZhcgorZnJvbSB3aWMubWlzYyBpbXBvcnQgZXhlY19jbWQsIGV4ZWNfbmF0aXZlX2NtZCwgZ2V0X2JpdGJha2VfdmFyCiBmcm9tIHdpYy5wbHVnaW5iYXNlIGltcG9ydCBQbHVnaW5NZ3IKIAogbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3dpYycpCkBAIC00NywxMCArNDYsMTIgQEAKICAgICAgICAgc2VsZi5mc29wdHMgPSBhcmdzLmZzb3B0cwogICAgICAgICBzZWxmLmZzdHlwZSA9IGFyZ3MuZnN0eXBlCiAgICAgICAgIHNlbGYubGFiZWwgPSBhcmdzLmxhYmVsCisgICAgICAgIHNlbGYubWtmc19leHRyYW9wdHMgPSBhcmdzLm1rZnNfZXh0cmFvcHRzCiAgICAgICAgIHNlbGYubW91bnRwb2ludCA9IGFyZ3MubW91bnRwb2ludAogICAgICAgICBzZWxmLm5vX3RhYmxlID0gYXJncy5ub190YWJsZQogICAgICAgICBzZWxmLm51bSA9IE5vbmUKICAgICAgICAgc2VsZi5vdmVyaGVhZF9mYWN0b3IgPSBhcmdzLm92ZXJoZWFkX2ZhY3RvcgorICAgICAgICBzZWxmLnBhcnRfbmFtZSA9IGFyZ3MucGFydF9uYW1lCiAgICAgICAgIHNlbGYucGFydF90eXBlID0gYXJncy5wYXJ0X3R5cGUKICAgICAgICAgc2VsZi5yb290ZnNfZGlyID0gYXJncy5yb290ZnNfZGlyCiAgICAgICAgIHNlbGYuc2l6ZSA9IGFyZ3Muc2l6ZQpAQCAtMjA1LDcgKzIwNiw3IEBACiAgICAgICAgICIiIgogICAgICAgICBwX3ByZWZpeCA9IG9zLmVudmlyb24uZ2V0KCJQU0VVRE9fUFJFRklYIiwgIiVzL3VzciIgJSBuYXRpdmVfc3lzcm9vdCkKICAgICAgICAgcF9sb2NhbHN0YXRlZGlyID0gb3MuZW52aXJvbi5nZXQoIlBTRVVET19MT0NBTFNUQVRFRElSIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzLy4uL3BzZXVkbyIgJSByb290ZnNfZGlyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMvLi4vcHNldWRvIiAlICBnZXRfYml0YmFrZV92YXIoIklNQUdFX1JPT1RGUyIpKQogICAgICAgICBwX3Bhc3N3ZCA9IG9zLmVudmlyb24uZ2V0KCJQU0VVRE9fUEFTU1dEIiwgcm9vdGZzX2RpcikKICAgICAgICAgcF9ub3N5bWxpbmtleHAgPSBvcy5lbnZpcm9uLmdldCgiUFNFVURPX05PU1lNTElOS0VYUCIsICIxIikKICAgICAgICAgcHNldWRvID0gImV4cG9ydCBQU0VVRE9fUFJFRklYPSVzOyIgJSBwX3ByZWZpeApAQCAtMjU3LDE0ICsyNTgsMTQgQEAKICAgICAgICAgd2l0aCBvcGVuKHJvb3RmcywgJ3cnKSBhcyBzcGFyc2U6CiAgICAgICAgICAgICBvcy5mdHJ1bmNhdGUoc3BhcnNlLmZpbGVubygpLCByb290ZnNfc2l6ZSAqIDEwMjQpCiAKLSAgICAgICAgZXh0cmFfaW1hZ2VjbWQgPSAiLWkgODE5MiIKKyAgICAgICAgZXh0cmFvcHRzID0gc2VsZi5ta2ZzX2V4dHJhb3B0cyBvciAiLUYgLWkgODE5MiIKIAogICAgICAgICBsYWJlbF9zdHIgPSAiIgogICAgICAgICBpZiBzZWxmLmxhYmVsOgogICAgICAgICAgICAgbGFiZWxfc3RyID0gIi1MICVzIiAlIHNlbGYubGFiZWwKIAotICAgICAgICBta2ZzX2NtZCA9ICJta2ZzLiVzIC1GICVzICVzICVzIC1kICVzIiAlIFwKLSAgICAgICAgICAgIChzZWxmLmZzdHlwZSwgZXh0cmFfaW1hZ2VjbWQsIHJvb3RmcywgbGFiZWxfc3RyLCByb290ZnNfZGlyKQorICAgICAgICBta2ZzX2NtZCA9ICJta2ZzLiVzICVzICVzICVzIC1kICVzIiAlIFwKKyAgICAgICAgICAgIChzZWxmLmZzdHlwZSwgZXh0cmFvcHRzLCByb290ZnMsIGxhYmVsX3N0ciwgcm9vdGZzX2RpcikKICAgICAgICAgZXhlY19uYXRpdmVfY21kKG1rZnNfY21kLCBuYXRpdmVfc3lzcm9vdCwgcHNldWRvPXBzZXVkbykKIAogICAgICAgICBta2ZzX2NtZCA9ICJmc2NrLiVzIC1wdmZEICVzIiAlIChzZWxmLmZzdHlwZSwgcm9vdGZzKQpAQCAtMjkwLDggKzI5MSw5IEBACiAgICAgICAgIGlmIHNlbGYubGFiZWw6CiAgICAgICAgICAgICBsYWJlbF9zdHIgPSAiLUwgJXMiICUgc2VsZi5sYWJlbAogCi0gICAgICAgIG1rZnNfY21kID0gIm1rZnMuJXMgLWIgJWQgLXIgJXMgJXMgJXMiICUgXAotICAgICAgICAgICAgKHNlbGYuZnN0eXBlLCByb290ZnNfc2l6ZSAqIDEwMjQsIHJvb3Rmc19kaXIsIGxhYmVsX3N0ciwgcm9vdGZzKQorICAgICAgICBta2ZzX2NtZCA9ICJta2ZzLiVzIC1iICVkIC1yICVzICVzICVzICVzIiAlIFwKKyAgICAgICAgICAgIChzZWxmLmZzdHlwZSwgcm9vdGZzX3NpemUgKiAxMDI0LCByb290ZnNfZGlyLCBsYWJlbF9zdHIsCisgICAgICAgICAgICAgc2VsZi5ta2ZzX2V4dHJhb3B0cywgcm9vdGZzKQogICAgICAgICBleGVjX25hdGl2ZV9jbWQobWtmc19jbWQsIG5hdGl2ZV9zeXNyb290LCBwc2V1ZG89cHNldWRvKQogCiAgICAgZGVmIHByZXBhcmVfcm9vdGZzX21zZG9zKHNlbGYsIHJvb3Rmcywgb2VfYnVpbGRkaXIsIHJvb3Rmc19kaXIsCkBAIC0zMTMsOCArMzE1LDEwIEBACiAgICAgICAgIGlmIHNlbGYuZnN0eXBlID09ICdtc2Rvcyc6CiAgICAgICAgICAgICBzaXplX3N0ciA9ICItRiAxNiIgIyBGQVQgMTYKIAotICAgICAgICBkb3Nmc19jbWQgPSAibWtkb3NmcyAlcyAtUyA1MTIgJXMgLUMgJXMgJWQiICUgKGxhYmVsX3N0ciwgc2l6ZV9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdGZzLCByb290ZnNfc2l6ZSkKKyAgICAgICAgZXh0cmFvcHRzID0gc2VsZi5ta2ZzX2V4dHJhb3B0cyBvciAnLVMgNTEyJworCisgICAgICAgIGRvc2ZzX2NtZCA9ICJta2Rvc2ZzICVzICVzICVzIC1DICVzICVkIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3N0ciwgc2l6ZV9zdHIsIGV4dHJhb3B0cywgcm9vdGZzLCByb290ZnNfc2l6ZSkKICAgICAgICAgZXhlY19uYXRpdmVfY21kKGRvc2ZzX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCiAKICAgICAgICAgbWNvcHlfY21kID0gIm1jb3B5IC1pICVzIC1zICVzLyogOjovIiAlIChyb290ZnMsIHJvb3Rmc19kaXIpCkBAIC0zMzAsOCArMzM0LDkgQEAKICAgICAgICAgIiIiCiAgICAgICAgIFByZXBhcmUgY29udGVudCBmb3IgYSBzcXVhc2hmcyByb290ZnMgcGFydGl0aW9uLgogICAgICAgICAiIiIKLSAgICAgICAgc3F1YXNoZnNfY21kID0gIm1rc3F1YXNoZnMgJXMgJXMgLW5vYXBwZW5kIiAlIFwKLSAgICAgICAgICAgICAgICAgICAgICAgKHJvb3Rmc19kaXIsIHJvb3RmcykKKyAgICAgICAgZXh0cmFvcHRzID0gc2VsZi5ta2ZzX2V4dHJhb3B0cyBvciAnLW5vYXBwZW5kJworICAgICAgICBzcXVhc2hmc19jbWQgPSAibWtzcXVhc2hmcyAlcyAlcyAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgIChyb290ZnNfZGlyLCByb290ZnMsIGV4dHJhb3B0cykKICAgICAgICAgZXhlY19uYXRpdmVfY21kKHNxdWFzaGZzX2NtZCwgbmF0aXZlX3N5c3Jvb3QsIHBzZXVkbz1wc2V1ZG8pCiAKICAgICBkZWYgcHJlcGFyZV9lbXB0eV9wYXJ0aXRpb25fZXh0KHNlbGYsIHJvb3Rmcywgb2VfYnVpbGRkaXIsCkBAIC0zNDMsMTQgKzM0OCwxNCBAQAogICAgICAgICB3aXRoIG9wZW4ocm9vdGZzLCAndycpIGFzIHNwYXJzZToKICAgICAgICAgICAgIG9zLmZ0cnVuY2F0ZShzcGFyc2UuZmlsZW5vKCksIHNpemUgKiAxMDI0KQogCi0gICAgICAgIGV4dHJhX2ltYWdlY21kID0gIi1pIDgxOTIiCisgICAgICAgIGV4dHJhb3B0cyA9IHNlbGYubWtmc19leHRyYW9wdHMgb3IgIi1pIDgxOTIiCiAKICAgICAgICAgbGFiZWxfc3RyID0gIiIKICAgICAgICAgaWYgc2VsZi5sYWJlbDoKICAgICAgICAgICAgIGxhYmVsX3N0ciA9ICItTCAlcyIgJSBzZWxmLmxhYmVsCiAKICAgICAgICAgbWtmc19jbWQgPSAibWtmcy4lcyAtRiAlcyAlcyAlcyIgJSBcCi0gICAgICAgICAgICAoc2VsZi5mc3R5cGUsIGV4dHJhX2ltYWdlY21kLCBsYWJlbF9zdHIsIHJvb3RmcykKKyAgICAgICAgICAgIChzZWxmLmZzdHlwZSwgZXh0cmFvcHRzLCBsYWJlbF9zdHIsIHJvb3RmcykKICAgICAgICAgZXhlY19uYXRpdmVfY21kKG1rZnNfY21kLCBuYXRpdmVfc3lzcm9vdCkKIAogICAgIGRlZiBwcmVwYXJlX2VtcHR5X3BhcnRpdGlvbl9idHJmcyhzZWxmLCByb290ZnMsIG9lX2J1aWxkZGlyLApAQCAtMzY2LDggKzM3MSw5IEBACiAgICAgICAgIGlmIHNlbGYubGFiZWw6CiAgICAgICAgICAgICBsYWJlbF9zdHIgPSAiLUwgJXMiICUgc2VsZi5sYWJlbAogCi0gICAgICAgIG1rZnNfY21kID0gIm1rZnMuJXMgLWIgJWQgJXMgJXMiICUgXAotICAgICAgICAgICAgKHNlbGYuZnN0eXBlLCBzZWxmLnNpemUgKiAxMDI0LCBsYWJlbF9zdHIsIHJvb3RmcykKKyAgICAgICAgbWtmc19jbWQgPSAibWtmcy4lcyAtYiAlZCAlcyAlcyAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAgKHNlbGYuZnN0eXBlLCBzZWxmLnNpemUgKiAxMDI0LCBsYWJlbF9zdHIsCisgICAgICAgICAgICAgICAgICAgIHNlbGYubWtmc19leHRyYW9wdHMsIHJvb3RmcykKICAgICAgICAgZXhlY19uYXRpdmVfY21kKG1rZnNfY21kLCBuYXRpdmVfc3lzcm9vdCkKIAogICAgIGRlZiBwcmVwYXJlX2VtcHR5X3BhcnRpdGlvbl9tc2RvcyhzZWxmLCByb290ZnMsIG9lX2J1aWxkZGlyLApAQCAtMzg1LDggKzM5MSwxMSBAQAogICAgICAgICBpZiBzZWxmLmZzdHlwZSA9PSAnbXNkb3MnOgogICAgICAgICAgICAgc2l6ZV9zdHIgPSAiLUYgMTYiICMgRkFUIDE2CiAKLSAgICAgICAgZG9zZnNfY21kID0gIm1rZG9zZnMgJXMgLVMgNTEyICVzIC1DICVzICVkIiAlIChsYWJlbF9zdHIsIHNpemVfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RmcywgYmxvY2tzKQorICAgICAgICBleHRyYW9wdHMgPSBzZWxmLm1rZnNfZXh0cmFvcHRzIG9yICctUyA1MTInCisKKyAgICAgICAgZG9zZnNfY21kID0gIm1rZG9zZnMgJXMgJXMgJXMgLUMgJXMgJWQiICUgXAorICAgICAgICAgICAgICAgICAgICAobGFiZWxfc3RyLCBleHRyYW9wdHMsIHNpemVfc3RyLCByb290ZnMsIGJsb2NrcykKKwogICAgICAgICBleGVjX25hdGl2ZV9jbWQoZG9zZnNfY21kLCBuYXRpdmVfc3lzcm9vdCkKIAogICAgICAgICBjaG1vZF9jbWQgPSAiY2htb2QgNjQ0ICVzIiAlIHJvb3RmcwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5iYXNlLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5iYXNlLnB5CmluZGV4IGZiM2QxNzkuLmMwMDk4MjAgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2luYmFzZS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbmJhc2UucHkKQEAgLTI0LDcgKzI0LDcgQEAKIGZyb20gaW1wb3J0bGliLm1hY2hpbmVyeSBpbXBvcnQgU291cmNlRmlsZUxvYWRlcgogCiBmcm9tIHdpYyBpbXBvcnQgV2ljRXJyb3IKLWZyb20gd2ljLnV0aWxzLm1pc2MgaW1wb3J0IGdldF9iaXRiYWtlX3ZhcgorZnJvbSB3aWMubWlzYyBpbXBvcnQgZ2V0X2JpdGJha2VfdmFyCiAKIFBMVUdJTl9UWVBFUyA9IFsiaW1hZ2VyIiwgInNvdXJjZSJdCiAKQEAgLTEzNyw0ICsxMzcsMyBAQAogICAgICAgICAncHJlcGFyZXMnIHRoZSBwYXJ0aXRpb24gdG8gYmUgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGltYWdlLgogICAgICAgICAiIiIKICAgICAgICAgbG9nZ2VyLmRlYnVnKCJTb3VyY2VQbHVnaW46IGRvX3ByZXBhcmVfcGFydGl0aW9uOiBwYXJ0OiAlcyIsIHBhcnQpCi0KZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9pbWFnZXIvZGlyZWN0LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL2ltYWdlci9kaXJlY3QucHkKaW5kZXggZjJlNjEyNy4uZGExYzA2MSAxMDA2NDQKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL2ltYWdlci9kaXJlY3QucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL2ltYWdlci9kaXJlY3QucHkKQEAgLTI2LDE3ICsyNiwyMCBAQAogCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCitpbXBvcnQgcmFuZG9tCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB1dWlkCiAKIGZyb20gdGltZSBpbXBvcnQgc3RyZnRpbWUKIAorZnJvbSBvZS5wYXRoIGltcG9ydCBjb3B5aGFyZGxpbmt0cmVlCisKIGZyb20gd2ljIGltcG9ydCBXaWNFcnJvcgogZnJvbSB3aWMuZmlsZW1hcCBpbXBvcnQgc3BhcnNlX2NvcHkKIGZyb20gd2ljLmtzcGFyc2VyIGltcG9ydCBLaWNrU3RhcnQsIEtpY2tTdGFydEVycm9yCiBmcm9tIHdpYy5wbHVnaW5iYXNlIGltcG9ydCBQbHVnaW5NZ3IsIEltYWdlclBsdWdpbgotZnJvbSB3aWMudXRpbHMubWlzYyBpbXBvcnQgZ2V0X2JpdGJha2VfdmFyLCBleGVjX2NtZCwgZXhlY19uYXRpdmVfY21kCitmcm9tIHdpYy5taXNjIGltcG9ydCBnZXRfYml0YmFrZV92YXIsIGV4ZWNfY21kLCBleGVjX25hdGl2ZV9jbWQKIAogbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3dpYycpCiAKQEAgLTY4LDYgKzcxLDcgQEAKICAgICAgICAgc2VsZi5vdXRkaXIgPSBvcHRpb25zLm91dGRpcgogICAgICAgICBzZWxmLmNvbXByZXNzb3IgPSBvcHRpb25zLmNvbXByZXNzb3IKICAgICAgICAgc2VsZi5ibWFwID0gb3B0aW9ucy5ibWFwCisgICAgICAgIHNlbGYubm9fZnN0YWJfdXBkYXRlID0gb3B0aW9ucy5ub19mc3RhYl91cGRhdGUKIAogICAgICAgICBzZWxmLm5hbWUgPSAiJXMtJXMiICUgKG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZSh3a3NfZmlsZSkpWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmZ0aW1lKCIlWSVtJWQlSCVNIikpCkBAIC0xMTUsMjQgKzExOSwzMyBAQAogICAgICAgICAgICAgZnN0YWJfbGluZXMgPSBmc3RhYi5yZWFkbGluZXMoKQogCiAgICAgICAgIGlmIHNlbGYuX3VwZGF0ZV9mc3RhYihmc3RhYl9saW5lcywgc2VsZi5wYXJ0cyk6Ci0gICAgICAgICAgICBzaHV0aWwuY29weWZpbGUoZnN0YWJfcGF0aCwgZnN0YWJfcGF0aCArICIub3JpZyIpCisgICAgICAgICAgICAjIGNvcHkgcm9vdGZzIGRpciB0byB3b3JrZGlyIHRvIHVwZGF0ZSBmc3RhYgorICAgICAgICAgICAgIyBhcyByb290ZnMgY2FuIGJlIHVzZWQgYnkgb3RoZXIgdGFza3MgYW5kIGNhbid0IGJlIG1vZGlmaWVkCisgICAgICAgICAgICBuZXdfcm9vdGZzID0gb3MucGF0aC5yZWFscGF0aChvcy5wYXRoLmpvaW4oc2VsZi53b3JrZGlyLCAicm9vdGZzX2NvcHkiKSkKKyAgICAgICAgICAgIGNvcHloYXJkbGlua3RyZWUoaW1hZ2Vfcm9vdGZzLCBuZXdfcm9vdGZzKQorICAgICAgICAgICAgZnN0YWJfcGF0aCA9IG9zLnBhdGguam9pbihuZXdfcm9vdGZzLCAnZXRjL2ZzdGFiJykKKworICAgICAgICAgICAgb3MudW5saW5rKGZzdGFiX3BhdGgpCiAKICAgICAgICAgICAgIHdpdGggb3Blbihmc3RhYl9wYXRoLCAidyIpIGFzIGZzdGFiOgogICAgICAgICAgICAgICAgIGZzdGFiLndyaXRlbGluZXMoZnN0YWJfbGluZXMpCiAKLSAgICAgICAgICAgIHJldHVybiBmc3RhYl9wYXRoCisgICAgICAgICAgICByZXR1cm4gbmV3X3Jvb3RmcwogCiAgICAgZGVmIF91cGRhdGVfZnN0YWIoc2VsZiwgZnN0YWJfbGluZXMsIHBhcnRzKToKICAgICAgICAgIiIiQXNzdW1lIHBhcnRpdGlvbiBvcmRlciBzYW1lIGFzIGluIHdrcyIiIgogICAgICAgICB1cGRhdGVkID0gRmFsc2UKICAgICAgICAgZm9yIHBhcnQgaW4gcGFydHM6CiAgICAgICAgICAgICBpZiBub3QgcGFydC5yZWFsbnVtIG9yIG5vdCBwYXJ0Lm1vdW50cG9pbnQgXAotICAgICAgICAgICAgICAgb3IgcGFydC5tb3VudHBvaW50IGluICgiLyIsICIvYm9vdCIpOgorICAgICAgICAgICAgICAgb3IgcGFydC5tb3VudHBvaW50ID09ICIvIjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogCi0gICAgICAgICAgICAjIG1tYyBkZXZpY2UgcGFydGl0aW9ucyBhcmUgbmFtZWQgbW1jYmxrMHAxLCBtbWNibGswcDIuLgotICAgICAgICAgICAgcHJlZml4ID0gJ3AnIGlmICBwYXJ0LmRpc2suc3RhcnRzd2l0aCgnbW1jYmxrJykgZWxzZSAnJwotICAgICAgICAgICAgZGV2aWNlX25hbWUgPSAiL2Rldi8lcyVzJWQiICUgKHBhcnQuZGlzaywgcHJlZml4LCBwYXJ0LnJlYWxudW0pCisgICAgICAgICAgICBpZiBwYXJ0LnVzZV91dWlkOgorICAgICAgICAgICAgICAgIGRldmljZV9uYW1lID0gIlBBUlRVVUlEPSVzIiAlIHBhcnQudXVpZAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIG1tYyBkZXZpY2UgcGFydGl0aW9ucyBhcmUgbmFtZWQgbW1jYmxrMHAxLCBtbWNibGswcDIuLgorICAgICAgICAgICAgICAgIHByZWZpeCA9ICdwJyBpZiAgcGFydC5kaXNrLnN0YXJ0c3dpdGgoJ21tY2JsaycpIGVsc2UgJycKKyAgICAgICAgICAgICAgICBkZXZpY2VfbmFtZSA9ICIvZGV2LyVzJXMlZCIgJSAocGFydC5kaXNrLCBwcmVmaXgsIHBhcnQucmVhbG51bSkKIAogICAgICAgICAgICAgb3B0cyA9IHBhcnQuZnNvcHRzIGlmIHBhcnQuZnNvcHRzIGVsc2UgImRlZmF1bHRzIgogICAgICAgICAgICAgbGluZSA9ICJcdCIuam9pbihbZGV2aWNlX25hbWUsIHBhcnQubW91bnRwb2ludCwgcGFydC5mc3R5cGUsCkBAIC0xNTYsNyArMTY5LDEzIEBACiAgICAgICAgIGZpbGVzeXN0ZW1zIGZyb20gdGhlIGFydGlmYWN0cyBkaXJlY3RseSBhbmQgY29tYmluZSB0aGVtIGludG8KICAgICAgICAgYSBwYXJ0aXRpb25lZCBpbWFnZS4KICAgICAgICAgIiIiCi0gICAgICAgIGZzdGFiX3BhdGggPSBzZWxmLl93cml0ZV9mc3RhYihzZWxmLnJvb3Rmc19kaXIuZ2V0KCJST09URlNfRElSIikpCisgICAgICAgIGlmIHNlbGYubm9fZnN0YWJfdXBkYXRlOgorICAgICAgICAgICAgbmV3X3Jvb3RmcyA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5ld19yb290ZnMgPSBzZWxmLl93cml0ZV9mc3RhYihzZWxmLnJvb3Rmc19kaXIuZ2V0KCJST09URlNfRElSIikpCisgICAgICAgIGlmIG5ld19yb290ZnM6CisgICAgICAgICAgICAjIHJvb3RmcyB3YXMgY29waWVkIHRvIHVwZGF0ZSBmc3RhYgorICAgICAgICAgICAgc2VsZi5yb290ZnNfZGlyWydST09URlNfRElSJ10gPSBuZXdfcm9vdGZzCiAKICAgICAgICAgZm9yIHBhcnQgaW4gc2VsZi5wYXJ0czoKICAgICAgICAgICAgICMgZ2V0IHJvb3RmcyBzaXplIGZyb20gYml0YmFrZSB2YXJpYWJsZSBpZiBpdCdzIG5vdCBzZXQgaW4gLmtzIGZpbGUKQEAgLTE3MywxMCArMTkyLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQuc2l6ZSA9IGludChyb3VuZChmbG9hdChyc2l6ZV9iYikpKQogCiAgICAgICAgIHNlbGYuX2ltYWdlLnByZXBhcmUoc2VsZikKLQotICAgICAgICBpZiBmc3RhYl9wYXRoOgotICAgICAgICAgICAgc2h1dGlsLm1vdmUoZnN0YWJfcGF0aCArICIub3JpZyIsIGZzdGFiX3BhdGgpCi0KICAgICAgICAgc2VsZi5faW1hZ2UubGF5b3V0X3BhcnRpdGlvbnMoKQogICAgICAgICBzZWxmLl9pbWFnZS5jcmVhdGUoKQogCkBAIC0yMDUsOCArMjIwLDEwIEBACiAgICAgICAgICMgR2VuZXJhdGUgLmJtYXAKICAgICAgICAgaWYgc2VsZi5ibWFwOgogICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJHZW5lcmF0aW5nIGJtYXAgZmlsZSBmb3IgJXMiLCBkaXNrX25hbWUpCi0gICAgICAgICAgICBleGVjX25hdGl2ZV9jbWQoImJtYXB0b29sIGNyZWF0ZSAlcyAtbyAlcy5ibWFwIiAlIChmdWxsX3BhdGgsIGZ1bGxfcGF0aCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uYXRpdmVfc3lzcm9vdCkKKyAgICAgICAgICAgIHB5dGhvbiA9IG9zLnBhdGguam9pbihzZWxmLm5hdGl2ZV9zeXNyb290LCAndXNyL2Jpbi9weXRob24zLW5hdGl2ZS9weXRob24zJykKKyAgICAgICAgICAgIGJtYXB0b29sID0gb3MucGF0aC5qb2luKHNlbGYubmF0aXZlX3N5c3Jvb3QsICd1c3IvYmluL2JtYXB0b29sJykKKyAgICAgICAgICAgIGV4ZWNfbmF0aXZlX2NtZCgiJXMgJXMgY3JlYXRlICVzIC1vICVzLmJtYXAiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChweXRob24sIGJtYXB0b29sLCBmdWxsX3BhdGgsIGZ1bGxfcGF0aCksIHNlbGYubmF0aXZlX3N5c3Jvb3QpCiAgICAgICAgICMgQ29tcHJlc3MgdGhlIGltYWdlCiAgICAgICAgIGlmIHNlbGYuY29tcHJlc3NvcjoKICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiQ29tcHJlc3NpbmcgZGlzayAlcyB3aXRoICVzIiwgZGlza19uYW1lLCBzZWxmLmNvbXByZXNzb3IpCkBAIC0yOTYsNyArMzEzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbGwgcGFydGl0aW9ucyAoaW4gYnl0ZXMpCiAgICAgICAgIHNlbGYucHRhYmxlX2Zvcm1hdCA9IHB0YWJsZV9mb3JtYXQgICMgUGFydGl0aW9uIHRhYmxlIGZvcm1hdAogICAgICAgICAjIERpc2sgc3lzdGVtIGlkZW50aWZpZXIKLSAgICAgICAgc2VsZi5pZGVudGlmaWVyID0gaW50LmZyb21fYnl0ZXMob3MudXJhbmRvbSg0KSwgJ2xpdHRsZScpCisgICAgICAgIHNlbGYuaWRlbnRpZmllciA9IHJhbmRvbS5TeXN0ZW1SYW5kb20oKS5yYW5kaW50KDEsIDB4ZmZmZmZmZmYpCiAKICAgICAgICAgc2VsZi5wYXJ0aXRpb25zID0gcGFydGl0aW9ucwogICAgICAgICBzZWxmLnBhcnRpbWFnZXMgPSBbXQpAQCAtMzEyLDcgKzMyOSw3IEBACiAgICAgICAgICAgICAgICAgcGFydC5yZWFsbnVtID0gMAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZWFsbnVtICs9IDEKLSAgICAgICAgICAgICAgICBpZiBzZWxmLnB0YWJsZV9mb3JtYXQgPT0gJ21zZG9zJyBhbmQgcmVhbG51bSA+IDM6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5wdGFibGVfZm9ybWF0ID09ICdtc2RvcycgYW5kIHJlYWxudW0gPiAzIGFuZCBsZW4ocGFydGl0aW9ucykgPiA0OgogICAgICAgICAgICAgICAgICAgICBwYXJ0LnJlYWxudW0gPSByZWFsbnVtICsgMQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIHBhcnQucmVhbG51bSA9IHJlYWxudW0KQEAgLTM1Miw2ICszNjksMTAgQEAKICAgICAgICAgZm9yIG51bSBpbiByYW5nZShsZW4oc2VsZi5wYXJ0aXRpb25zKSk6CiAgICAgICAgICAgICBwYXJ0ID0gc2VsZi5wYXJ0aXRpb25zW251bV0KIAorICAgICAgICAgICAgaWYgc2VsZi5wdGFibGVfZm9ybWF0ID09ICdtc2RvcycgYW5kIHBhcnQucGFydF9uYW1lOgorICAgICAgICAgICAgICAgIHJhaXNlIFdpY0Vycm9yKCJzZXR0aW5nIGN1c3RvbSBwYXJ0aXRpb24gbmFtZSBpcyBub3QgIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcGxlbWVudGVkIGZvciBtc2RvcyBwYXJ0aXRpb25zIikKKwogICAgICAgICAgICAgaWYgc2VsZi5wdGFibGVfZm9ybWF0ID09ICdtc2RvcycgYW5kIHBhcnQucGFydF90eXBlOgogICAgICAgICAgICAgICAgICMgVGhlIC0tcGFydC10eXBlIGNhbiBhbHNvIGJlIGltcGxlbWVudGVkIGZvciBNQlIgcGFydGl0aW9ucywKICAgICAgICAgICAgICAgICAjIGluIHdoaWNoIGNhc2UgaXQgd291bGQgbWFwIHRvIHRoZSAxLWJ5dGUgInBhcnRpdGlvbiB0eXBlIgpAQCAtNTA1LDYgKzUyNiwxMyBAQAogICAgICAgICAgICAgc2VsZi5fY3JlYXRlX3BhcnRpdGlvbihzZWxmLnBhdGgsIHBhcnQudHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGVkX2ZzX3R5cGUsIHBhcnQuc3RhcnQsIHBhcnQuc2l6ZV9zZWMpCiAKKyAgICAgICAgICAgIGlmIHBhcnQucGFydF9uYW1lOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygicGFydGl0aW9uICVkOiBzZXQgbmFtZSB0byAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQubnVtLCBwYXJ0LnBhcnRfbmFtZSkKKyAgICAgICAgICAgICAgICBleGVjX25hdGl2ZV9jbWQoInNnZGlzayAtLWNoYW5nZS1uYW1lPSVkOiVzICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcnQubnVtLCBwYXJ0LnBhcnRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGF0aCksIHNlbGYubmF0aXZlX3N5c3Jvb3QpCisKICAgICAgICAgICAgIGlmIHBhcnQucGFydF90eXBlOgogICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygicGFydGl0aW9uICVkOiBzZXQgdHlwZSBVSUQgdG8gJXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0Lm51bSwgcGFydC5wYXJ0X3R5cGUpCkBAIC01NTAsNyArNTc4LDcgQEAKICAgICAgICAgICAgIHNvdXJjZSA9IHBhcnQuc291cmNlX2ZpbGUKICAgICAgICAgICAgIGlmIHNvdXJjZToKICAgICAgICAgICAgICAgICAjIGluc3RhbGwgc291cmNlX2ZpbGUgY29udGVudHMgaW50byBhIHBhcnRpdGlvbgotICAgICAgICAgICAgICAgIHNwYXJzZV9jb3B5KHNvdXJjZSwgc2VsZi5wYXRoLCBwYXJ0LnN0YXJ0ICogc2VsZi5zZWN0b3Jfc2l6ZSkKKyAgICAgICAgICAgICAgICBzcGFyc2VfY29weShzb3VyY2UsIHNlbGYucGF0aCwgc2Vlaz1wYXJ0LnN0YXJ0ICogc2VsZi5zZWN0b3Jfc2l6ZSkKIAogICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiSW5zdGFsbGVkICVzIGluIHBhcnRpdGlvbiAlZCwgc2VjdG9ycyAlZC0lZCwgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l6ZSAlZCBzZWN0b3JzIiwgc291cmNlLCBwYXJ0Lm51bSwgcGFydC5zdGFydCwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvYm9vdGltZy1lZmkucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2Jvb3RpbWctZWZpLnB5CmluZGV4IDk4NzljYjkuLjRjNGYzNmEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvYm9vdGltZy1lZmkucHkKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9ib290aW1nLWVmaS5weQpAQCAtMzEsOCArMzEsOCBAQAogZnJvbSB3aWMgaW1wb3J0IFdpY0Vycm9yCiBmcm9tIHdpYy5lbmdpbmUgaW1wb3J0IGdldF9jdXN0b21fY29uZmlnCiBmcm9tIHdpYy5wbHVnaW5iYXNlIGltcG9ydCBTb3VyY2VQbHVnaW4KLWZyb20gd2ljLnV0aWxzLm1pc2MgaW1wb3J0IChleGVjX2NtZCwgZXhlY19uYXRpdmVfY21kLCBnZXRfYml0YmFrZV92YXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PVEREX0VYVFJBX1NQQUNFKQorZnJvbSB3aWMubWlzYyBpbXBvcnQgKGV4ZWNfY21kLCBleGVjX25hdGl2ZV9jbWQsCisgICAgICAgICAgICAgICAgICAgICAgZ2V0X2JpdGJha2VfdmFyLCBCT09URERfRVhUUkFfU1BBQ0UpCiAKIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCd3aWMnKQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2Jvb3RpbWctcGFydGl0aW9uLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9ib290aW1nLXBhcnRpdGlvbi5weQppbmRleCAxM2ZkZGJkLi42N2U1NDk4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2Jvb3RpbWctcGFydGl0aW9uLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvYm9vdGltZy1wYXJ0aXRpb24ucHkKQEAgLTMxLDcgKzMxLDcgQEAKIAogZnJvbSB3aWMgaW1wb3J0IFdpY0Vycm9yCiBmcm9tIHdpYy5wbHVnaW5iYXNlIGltcG9ydCBTb3VyY2VQbHVnaW4KLWZyb20gd2ljLnV0aWxzLm1pc2MgaW1wb3J0IGV4ZWNfY21kLCBnZXRfYml0YmFrZV92YXIKK2Zyb20gd2ljLm1pc2MgaW1wb3J0IGV4ZWNfY21kLCBnZXRfYml0YmFrZV92YXIKIAogbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3dpYycpCiAKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgLSBzZXRzIHVwIGEgdmZhdCBwYXJ0aXRpb24KICAgICAgICAgLSBjb3BpZXMgYWxsIGZpbGVzIGxpc3RlZCBpbiBJTUFHRV9CT09UX0ZJTEVTIHZhcmlhYmxlCiAgICAgICAgICIiIgotICAgICAgICBoZGRkaXIgPSAiJXMvYm9vdCIgJSBjcl93b3JrZGlyCisgICAgICAgIGhkZGRpciA9ICIlcy9ib290LiVkIiAlIChjcl93b3JrZGlyLCBwYXJ0LmxpbmVubykKICAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtZCAlcyIgJSBoZGRkaXIKICAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCiAKQEAgLTY1LDEwICs2NSwxOSBAQAogCiAgICAgICAgIGxvZ2dlci5kZWJ1ZygnS2VybmVsIGRpcjogJXMnLCBib290aW1nX2RpcikKIAotICAgICAgICBib290X2ZpbGVzID0gZ2V0X2JpdGJha2VfdmFyKCJJTUFHRV9CT09UX0ZJTEVTIikKKyAgICAgICAgYm9vdF9maWxlcyA9IE5vbmUKKyAgICAgICAgZm9yIChmbXQsIGlkKSBpbiAoKCJfdXVpZC0lcyIsIHBhcnQudXVpZCksICgiX2xhYmVsLSVzIiwgcGFydC5sYWJlbCksIChOb25lLCBOb25lKSk6CisgICAgICAgICAgICBpZiBmbXQ6CisgICAgICAgICAgICAgICAgdmFyID0gZm10ICUgaWQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdmFyID0gIiIKIAotICAgICAgICBpZiBub3QgYm9vdF9maWxlczoKLSAgICAgICAgICAgIHJhaXNlIFdpY0Vycm9yKCdObyBib290IGZpbGVzIGRlZmluZWQsIElNQUdFX0JPT1RfRklMRVMgdW5zZXQnKQorICAgICAgICAgICAgYm9vdF9maWxlcyA9IGdldF9iaXRiYWtlX3ZhcigiSU1BR0VfQk9PVF9GSUxFUyIgKyB2YXIpCisgICAgICAgICAgICBpZiBib290X2ZpbGVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgYm9vdF9maWxlcyBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgV2ljRXJyb3IoJ05vIGJvb3QgZmlsZXMgZGVmaW5lZCwgSU1BR0VfQk9PVF9GSUxFUyB1bnNldCBmb3IgZW50cnkgIyVkJyAlIHBhcnQubGluZW5vKQogCiAgICAgICAgIGxvZ2dlci5kZWJ1ZygnQm9vdCBmaWxlczogJXMnLCBib290X2ZpbGVzKQogCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2Jvb3RpbWctcGNiaW9zLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9ib290aW1nLXBjYmlvcy5weQppbmRleCA1ODkwYzEyLi41NmRhNDY4IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2Jvb3RpbWctcGNiaW9zLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvYm9vdGltZy1wY2Jpb3MucHkKQEAgLTI5LDEwICsyOSw5IEBACiAKIGZyb20gd2ljIGltcG9ydCBXaWNFcnJvcgogZnJvbSB3aWMuZW5naW5lIGltcG9ydCBnZXRfY3VzdG9tX2NvbmZpZwotZnJvbSB3aWMudXRpbHMgaW1wb3J0IHJ1bm5lcgogZnJvbSB3aWMucGx1Z2luYmFzZSBpbXBvcnQgU291cmNlUGx1Z2luCi1mcm9tIHdpYy51dGlscy5taXNjIGltcG9ydCAoZXhlY19jbWQsIGV4ZWNfbmF0aXZlX2NtZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfYml0YmFrZV92YXIsIEJPT1RERF9FWFRSQV9TUEFDRSkKK2Zyb20gd2ljLm1pc2MgaW1wb3J0IChleGVjX2NtZCwgZXhlY19uYXRpdmVfY21kLAorICAgICAgICAgICAgICAgICAgICAgIGdldF9iaXRiYWtlX3ZhciwgQk9PVEREX0VYVFJBX1NQQUNFKQogCiBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignd2ljJykKIApAQCAtNDYsMTAgKzQ1LDkgQEAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgX2dldF9ib290aW1nX2RpcihjbHMsIGJvb3RpbWdfZGlyLCBkaXJuYW1lKToKICAgICAgICAgIiIiCi0gICAgICAgIENoZWNrIGlmIGRpcm5hbWUgZXhpc3RzIGluIGRlZmF1bHQgYm9vdGltZ19kaXIgb3IKLSAgICAgICAgaW4gd2ljLXRvb2xzIFNUQUdJTkdfRElSLgorICAgICAgICBDaGVjayBpZiBkaXJuYW1lIGV4aXN0cyBpbiBkZWZhdWx0IGJvb3RpbWdfZGlyIG9yIGluIFNUQUdJTkdfRElSLgogICAgICAgICAiIiIKLSAgICAgICAgZm9yIHJlc3VsdCBpbiAoYm9vdGltZ19kaXIsIGdldF9iaXRiYWtlX3ZhcigiU1RBR0lOR19EQVRBRElSIiwgIndpYy10b29scyIpKToKKyAgICAgICAgZm9yIHJlc3VsdCBpbiAoYm9vdGltZ19kaXIsIGdldF9iaXRiYWtlX3ZhcigiU1RBR0lOR19EQVRBRElSIikpOgogICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoIiVzLyVzIiAlIChyZXN1bHQsIGRpcm5hbWUpKToKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CiAKQEAgLTE4Niw3ICsxODQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgZXh0cmFfYmxvY2tzLCBwYXJ0Lm1vdW50cG9pbnQsIGJsb2NrcykKIAogICAgICAgICAjIGRvc2ZzIGltYWdlLCBjcmVhdGVkIGJ5IG1rZG9zZnMKLSAgICAgICAgYm9vdGltZyA9ICIlcy9ib290LmltZyIgJSBjcl93b3JrZGlyCisgICAgICAgIGJvb3RpbWcgPSAiJXMvYm9vdCVzLmltZyIgJSAoY3Jfd29ya2RpciwgcGFydC5saW5lbm8pCiAKICAgICAgICAgZG9zZnNfY21kID0gIm1rZG9zZnMgLW4gYm9vdCAtUyA1MTIgLUMgJXMgJWQiICUgKGJvb3RpbWcsIGJsb2NrcykKICAgICAgICAgZXhlY19uYXRpdmVfY21kKGRvc2ZzX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2lzb2ltYWdlLWlzb2h5YnJpZC5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvaXNvaW1hZ2UtaXNvaHlicmlkLnB5CmluZGV4IDFjZWJhNjIuLmQ2YmQzYmYgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvaXNvaW1hZ2UtaXNvaHlicmlkLnB5CisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvaXNvaW1hZ2UtaXNvaHlicmlkLnB5CkBAIC0yOSw3ICsyOSw3IEBACiBmcm9tIHdpYyBpbXBvcnQgV2ljRXJyb3IKIGZyb20gd2ljLmVuZ2luZSBpbXBvcnQgZ2V0X2N1c3RvbV9jb25maWcKIGZyb20gd2ljLnBsdWdpbmJhc2UgaW1wb3J0IFNvdXJjZVBsdWdpbgotZnJvbSB3aWMudXRpbHMubWlzYyBpbXBvcnQgZXhlY19jbWQsIGV4ZWNfbmF0aXZlX2NtZCwgZ2V0X2JpdGJha2VfdmFyCitmcm9tIHdpYy5taXNjIGltcG9ydCBleGVjX2NtZCwgZXhlY19uYXRpdmVfY21kLCBnZXRfYml0YmFrZV92YXIKIAogbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3dpYycpCiAKQEAgLTk1LDcgKzk1LDcgQEAKICAgICAgICAgICAgIGNmZy53cml0ZShzeXNsaW51eF9jb25mKQogCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRvX2NvbmZpZ3VyZV9ncnViZWZpKGNscywgcGFydCwgY3JlYXRvciwgY3Jfd29ya2Rpcik6CisgICAgZGVmIGRvX2NvbmZpZ3VyZV9ncnViZWZpKGNscywgcGFydCwgY3JlYXRvciwgdGFyZ2V0X2Rpcik6CiAgICAgICAgICIiIgogICAgICAgICBDcmVhdGUgbG9hZGVyLXNwZWNpZmljIChncnViLWVmaSkgY29uZmlnCiAgICAgICAgICIiIgpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgICAgICAgICAgcmFpc2UgV2ljRXJyb3IoImNvbmZpZ2ZpbGUgaXMgc3BlY2lmaWVkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnV0IGZhaWxlZCB0byBnZXQgaXQgZnJvbSAlcyIsIGNvbmZpZ2ZpbGUpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzcGxhc2ggPSBvcy5wYXRoLmpvaW4oY3Jfd29ya2RpciwgIkVGSS9ib290L3NwbGFzaC5qcGciKQorICAgICAgICAgICAgc3BsYXNoID0gb3MucGF0aC5qb2luKHRhcmdldF9kaXIsICJzcGxhc2guanBnIikKICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNwbGFzaCk6CiAgICAgICAgICAgICAgICAgc3BsYXNobGluZSA9ICJtZW51IGJhY2tncm91bmQgc3BsYXNoLmpwZyIKICAgICAgICAgICAgIGVsc2U6CkBAIC0xMzcsOSArMTM3LDEwIEBACiAgICAgICAgICAgICBpZiBzcGxhc2hsaW5lOgogICAgICAgICAgICAgICAgIGdydWJlZmlfY29uZiArPSAiJXNcbiIgJSBzcGxhc2hsaW5lCiAKLSAgICAgICAgbG9nZ2VyLmRlYnVnKCJXcml0aW5nIGdydWJlZmkgY29uZmlnICVzL0VGSS9CT09UL2dydWIuY2ZnIiwgY3Jfd29ya2RpcikKKyAgICAgICAgY2ZnX3BhdGggPSBvcy5wYXRoLmpvaW4odGFyZ2V0X2RpciwgImdydWIuY2ZnIikKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJXcml0aW5nIGdydWJlZmkgY29uZmlnICVzIiwgY2ZnX3BhdGgpCiAKLSAgICAgICAgd2l0aCBvcGVuKCIlcy9FRkkvQk9PVC9ncnViLmNmZyIgJSBjcl93b3JrZGlyLCAidyIpIGFzIGNmZzoKKyAgICAgICAgd2l0aCBvcGVuKGNmZ19wYXRoLCAidyIpIGFzIGNmZzoKICAgICAgICAgICAgIGNmZy53cml0ZShncnViZWZpX2NvbmYpCiAKICAgICBAc3RhdGljbWV0aG9kCkBAIC0xNjIsMTMgKzE2MywxNCBAQAogICAgICAgICAgICAgaWYgbm90IGltYWdlX3R5cGU6CiAgICAgICAgICAgICAgICAgcmFpc2UgV2ljRXJyb3IoIkNvdWxkbid0IGZpbmQgSU5JVFJBTUZTX0ZTVFlQRVMsIGV4aXRpbmcuIikKIAotICAgICAgICAgICAgdGFyZ2V0X2FyY2ggPSBnZXRfYml0YmFrZV92YXIoIlRSQU5TTEFURURfVEFSR0VUX0FSQ0giKQotICAgICAgICAgICAgaWYgbm90IHRhcmdldF9hcmNoOgotICAgICAgICAgICAgICAgIHJhaXNlIFdpY0Vycm9yKCJDb3VsZG4ndCBmaW5kIFRSQU5TTEFURURfVEFSR0VUX0FSQ0gsIGV4aXRpbmcuIikKKyAgICAgICAgICAgIG1hY2hpbmUgPSBvcy5wYXRoLmJhc2VuYW1lKGluaXRyZF9kaXIpCiAKLSAgICAgICAgICAgIGluaXRyZCA9IGdsb2IuZ2xvYignJXMvJXMqJXMuJXMnICUgKGluaXRyZF9kaXIsIGltYWdlX25hbWUsIHRhcmdldF9hcmNoLCBpbWFnZV90eXBlKSlbMF0KKyAgICAgICAgICAgIHBhdHRlcm4gPSAnJXMvJXMqJXMuJXMnICUgKGluaXRyZF9kaXIsIGltYWdlX25hbWUsIG1hY2hpbmUsIGltYWdlX3R5cGUpCisgICAgICAgICAgICBmaWxlcyA9IGdsb2IuZ2xvYihwYXR0ZXJuKQorICAgICAgICAgICAgaWYgZmlsZXM6CisgICAgICAgICAgICAgICAgaW5pdHJkID0gZmlsZXNbMF0KIAotICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoaW5pdHJkKToKKyAgICAgICAgaWYgbm90IGluaXRyZCBvciBub3Qgb3MucGF0aC5leGlzdHMoaW5pdHJkKToKICAgICAgICAgICAgICMgQ3JlYXRlIGluaXRyZCBmcm9tIHJvb3RmcyBkaXJlY3RvcnkKICAgICAgICAgICAgIGluaXRyZCA9ICIlcy9pbml0cmQuY3Bpby5neiIgJSBjcl93b3JrZGlyCiAgICAgICAgICAgICBpbml0cmRfZGlyID0gIiVzL0lOSVRSRCIgJSBjcl93b3JrZGlyCkBAIC0yMDYsOCArMjA4LDggQEAKICAgICAgICAgIiIiCiAgICAgICAgIGlzb2RpciA9ICIlcy9JU08vIiAlIGNyX3dvcmtkaXIKIAotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjcl93b3JrZGlyKToKLSAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoY3Jfd29ya2RpcikKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoaXNvZGlyKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoaXNvZGlyKQogCiAgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLWQgJXMgIiAlIGlzb2RpcgogICAgICAgICBleGVjX2NtZChpbnN0YWxsX2NtZCkKQEAgLTMxMiwyMCArMzE0LDEzIEBACiAKICAgICAgICAgI0NyZWF0ZSBib290bG9hZGVyIGZvciBlZmkgYm9vdAogICAgICAgICB0cnk6CisgICAgICAgICAgICB0YXJnZXRfZGlyID0gIiVzL0VGSS9CT09UIiAlIGlzb2RpcgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHModGFyZ2V0X2Rpcik6CisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0YXJnZXRfZGlyKQorCisgICAgICAgICAgICBvcy5tYWtlZGlycyh0YXJnZXRfZGlyKQorCiAgICAgICAgICAgICBpZiBzb3VyY2VfcGFyYW1zWydsb2FkZXInXSA9PSAnZ3J1Yi1lZmknOgotICAgICAgICAgICAgICAgICMgQnVpbGRzIGdydWIuY2ZnIGlmIElTT0RJUiBkaWRuJ3QgZXhpc3Qgb3IKLSAgICAgICAgICAgICAgICAjIGRpZG4ndCBjb250YWlucyBncnViLmNmZwotICAgICAgICAgICAgICAgIGJvb3RpbWdfZGlyID0gaW1nX2lzb19kaXIKLSAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoIiVzL0VGSS9CT09UIiAlIGJvb3RpbWdfZGlyKToKLSAgICAgICAgICAgICAgICAgICAgYm9vdGltZ19kaXIgPSAiJXMvYm9vdGltZyIgJSBjcl93b3JrZGlyCi0gICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGJvb3RpbWdfZGlyKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoYm9vdGltZ19kaXIpCi0gICAgICAgICAgICAgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLWQgJXMvRUZJL0JPT1QiICUgYm9vdGltZ19kaXIKLSAgICAgICAgICAgICAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCi0KLSAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoIiVzL0VGSS9CT09UL2Jvb3QuY2ZnIiAlIGJvb3RpbWdfZGlyKToKLSAgICAgICAgICAgICAgICAgICAgY2xzLmRvX2NvbmZpZ3VyZV9ncnViZWZpKHBhcnQsIGNyZWF0b3IsIGJvb3RpbWdfZGlyKQotCiAgICAgICAgICAgICAgICAgIyBCdWlsZHMgYm9vdHg2NC5lZmkvYm9vdGlhMzIuZWZpIGlmIElTT0RJUiBkaWRuJ3QgZXhpc3Qgb3IKICAgICAgICAgICAgICAgICAjIGRpZG4ndCBjb250YWlucyBpdAogICAgICAgICAgICAgICAgIHRhcmdldF9hcmNoID0gZ2V0X2JpdGJha2VfdmFyKCJUQVJHRVRfU1lTIikKQEAgLTMzMywzNyArMzI4LDIzIEBACiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFdpY0Vycm9yKCJDb2x1ZG4ndCBmaW5kIHRhcmdldCBhcmNoaXRlY3R1cmUiKQogCiAgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2goIng4Nl82NCIsIHRhcmdldF9hcmNoKToKLSAgICAgICAgICAgICAgICAgICAgZ3J1Yl90YXJnZXQgPSAneDg2XzY0LWVmaScKLSAgICAgICAgICAgICAgICAgICAgZ3J1Yl9pbWFnZSA9ICJib290eDY0LmVmaSIKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl9pbWFnZSA9ICJncnViLWVmaS1ib290eDY0LmVmaSIKICAgICAgICAgICAgICAgICBlbGlmIHJlLm1hdGNoKCdpLjg2JywgdGFyZ2V0X2FyY2gpOgotICAgICAgICAgICAgICAgICAgICBncnViX3RhcmdldCA9ICdpMzg2LWVmaScKLSAgICAgICAgICAgICAgICAgICAgZ3J1Yl9pbWFnZSA9ICJib290aWEzMi5lZmkiCisgICAgICAgICAgICAgICAgICAgIGdydWJfaW1hZ2UgPSAiZ3J1Yi1lZmktYm9vdGlhMzIuZWZpIgogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFdpY0Vycm9yKCJncnViLWVmaSBpcyBpbmNvbXBhdGlibGUgd2l0aCB0YXJnZXQgJXMiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2FyY2gpCiAKLSAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoIiVzL0VGSS9CT09ULyVzIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGJvb3RpbWdfZGlyLCBncnViX2ltYWdlKSk6Ci0gICAgICAgICAgICAgICAgICAgIGdydWJfcGF0aCA9IGdldF9iaXRiYWtlX3ZhcigiU1RBR0lOR19MSUJESVIiLCAid2ljLXRvb2xzIikKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGdydWJfcGF0aDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFdpY0Vycm9yKCJDb3VsZG4ndCBmaW5kIFNUQUdJTkdfTElCRElSLCBleGl0aW5nLiIpCisgICAgICAgICAgICAgICAgZ3J1Yl90YXJnZXQgPSBvcy5wYXRoLmpvaW4odGFyZ2V0X2RpciwgZ3J1Yl9pbWFnZSkKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoZ3J1Yl90YXJnZXQpOgorICAgICAgICAgICAgICAgICAgICBncnViX3NyYyA9IG9zLnBhdGguam9pbihkZXBsb3lfZGlyLCBncnViX2ltYWdlKQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZ3J1Yl9zcmMpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgV2ljRXJyb3IoIkdydWIgbG9hZGVyICVzIGlzIG5vdCBmb3VuZCBpbiAlcy4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsZWFzZSBidWlsZCBncnViLWVmaSBmaXJzdCIgJSAoZ3J1Yl9pbWFnZSwgZGVwbG95X2RpcikpCisgICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5KGdydWJfc3JjLCBncnViX3RhcmdldCkKIAotICAgICAgICAgICAgICAgICAgICBncnViX2NvcmUgPSAiJXMvZ3J1Yi8lcyIgJSAoZ3J1Yl9wYXRoLCBncnViX3RhcmdldCkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGdydWJfY29yZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBXaWNFcnJvcigiUGxlYXNlIGJ1aWxkIGdydWItZWZpIGZpcnN0IikKLQotICAgICAgICAgICAgICAgICAgICBncnViX2NtZCA9ICJncnViLW1raW1hZ2UgLXAgJy9FRkkvQk9PVCcgIgotICAgICAgICAgICAgICAgICAgICBncnViX2NtZCArPSAiLWQgJXMgIiAgJSBncnViX2NvcmUKLSAgICAgICAgICAgICAgICAgICAgZ3J1Yl9jbWQgKz0gIi1PICVzIC1vICVzL0VGSS9CT09ULyVzICIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChncnViX3RhcmdldCwgYm9vdGltZ19kaXIsIGdydWJfaW1hZ2UpCi0gICAgICAgICAgICAgICAgICAgIGdydWJfY21kICs9ICJwYXJ0X2dwdCBwYXJ0X21zZG9zIG50ZnMgbnRmc2NvbXAgZmF0IGV4dDIgIgotICAgICAgICAgICAgICAgICAgICBncnViX2NtZCArPSAibm9ybWFsIGNoYWluIGJvb3QgY29uZmlnZmlsZSBsaW51eCBtdWx0aWJvb3QgIgotICAgICAgICAgICAgICAgICAgICBncnViX2NtZCArPSAic2VhcmNoIGVmaV9nb3AgZWZpX3VnYSBmb250IGdmeHRlcm0gZ2Z4bWVudSAiCi0gICAgICAgICAgICAgICAgICAgIGdydWJfY21kICs9ICJ0ZXJtaW5hbCBtaW5pY21kIHRlc3QgaW9ydyBsb2FkZW52IGVjaG8gaGVscCAiCi0gICAgICAgICAgICAgICAgICAgIGdydWJfY21kICs9ICJyZWJvb3Qgc2VyaWFsIHRlcm1pbmZvIGlzbzk2NjAgbG9vcGJhY2sgdGFyICIKLSAgICAgICAgICAgICAgICAgICAgZ3J1Yl9jbWQgKz0gIm1lbWRpc2sgbHMgc2VhcmNoX2ZzX3V1aWQgdWRmIGJ0cmZzIHhmcyBsdm0gIgotICAgICAgICAgICAgICAgICAgICBncnViX2NtZCArPSAicmVpc2VyZnMgYXRhICIKLSAgICAgICAgICAgICAgICAgICAgZXhlY19uYXRpdmVfY21kKGdydWJfY21kLCBuYXRpdmVfc3lzcm9vdCkKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHRhcmdldF9kaXIsICJib290LmNmZyIpKToKKyAgICAgICAgICAgICAgICAgICAgY2xzLmRvX2NvbmZpZ3VyZV9ncnViZWZpKHBhcnQsIGNyZWF0b3IsIHRhcmdldF9kaXIpCiAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UgV2ljRXJyb3IoInVucmVjb2duaXplZCBib290aW1nLWVmaSBsb2FkZXI6ICVzIiAlCkBAIC0zNzEsMTUgKzM1Miw2IEBACiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIFdpY0Vycm9yKCJib290aW1nLWVmaSByZXF1aXJlcyBhIGxvYWRlciwgbm9uZSBzcGVjaWZpZWQiKQogCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCIlcy9FRkkvQk9PVCIgJSBpc29kaXIpOgotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSgiJXMvRUZJL0JPT1QiICUgaXNvZGlyKQotCi0gICAgICAgIHNodXRpbC5jb3B5dHJlZShib290aW1nX2RpcisiL0VGSS9CT09UIiwgaXNvZGlyKyIvRUZJL0JPT1QiKQotCi0gICAgICAgICMgSWYgZXhpc3RzLCByZW1vdmUgY3Jfd29ya2Rpci9ib290aW1nIHRlbXBvcmFyeSBmb2xkZXIKLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoIiVzL2Jvb3RpbWciICUgY3Jfd29ya2Rpcik6Ci0gICAgICAgICAgICBzaHV0aWwucm10cmVlKCIlcy9ib290aW1nIiAlIGNyX3dvcmtkaXIpCi0KICAgICAgICAgIyBDcmVhdGUgZWZpLmltZyB0aGF0IGNvbnRhaW5zIGJvb3Rsb2FkZXIgZmlsZXMgZm9yIEVGSSBib290aW5nCiAgICAgICAgICMgaWYgSVNPRElSIGRpZG4ndCBleGlzdCBvciBkaWRuJ3QgY29udGFpbnMgaXQKICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoIiVzL2VmaS5pbWciICUgaW1nX2lzb19kaXIpOgpAQCAtNDEzLDcgKzM4NSw3IEBACiAgICAgICAgICAgICBleGVjX2NtZChjaG1vZF9jbWQpCiAKICAgICAgICAgIyBQcmVwYXJlIGZpbGVzIGZvciBsZWdhY3kgYm9vdAotICAgICAgICBzeXNsaW51eF9kaXIgPSBnZXRfYml0YmFrZV92YXIoIlNUQUdJTkdfREFUQURJUiIsICJ3aWMtdG9vbHMiKQorICAgICAgICBzeXNsaW51eF9kaXIgPSBnZXRfYml0YmFrZV92YXIoIlNUQUdJTkdfREFUQURJUiIpCiAgICAgICAgIGlmIG5vdCBzeXNsaW51eF9kaXI6CiAgICAgICAgICAgICByYWlzZSBXaWNFcnJvcigiQ291bGRuJ3QgZmluZCBTVEFHSU5HX0RBVEFESVIsIGV4aXRpbmcuIikKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9yYXdjb3B5LnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9yYXdjb3B5LnB5CmluZGV4IGUxYzRmNWUuLmU4NjM5OGEgMTAwNjQ0Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvcmF3Y29weS5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL3Jhd2NvcHkucHkKQEAgLTIwLDcgKzIwLDcgQEAKIAogZnJvbSB3aWMgaW1wb3J0IFdpY0Vycm9yCiBmcm9tIHdpYy5wbHVnaW5iYXNlIGltcG9ydCBTb3VyY2VQbHVnaW4KLWZyb20gd2ljLnV0aWxzLm1pc2MgaW1wb3J0IGV4ZWNfY21kLCBnZXRfYml0YmFrZV92YXIKK2Zyb20gd2ljLm1pc2MgaW1wb3J0IGV4ZWNfY21kLCBnZXRfYml0YmFrZV92YXIKIGZyb20gd2ljLmZpbGVtYXAgaW1wb3J0IHNwYXJzZV9jb3B5CiAKIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCd3aWMnKQpAQCAtMzIsNiArMzIsMjUgQEAKIAogICAgIG5hbWUgPSAncmF3Y29weScKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZG9faW1hZ2VfbGFiZWwoZnN0eXBlLCBkc3QsIGxhYmVsKToKKyAgICAgICAgaWYgZnN0eXBlLnN0YXJ0c3dpdGgoJ2V4dCcpOgorICAgICAgICAgICAgY21kID0gJ3R1bmUyZnMgLUwgJXMgJXMnICUgKGxhYmVsLCBkc3QpCisgICAgICAgIGVsaWYgZnN0eXBlIGluICgnbXNkb3MnLCAndmZhdCcpOgorICAgICAgICAgICAgY21kID0gJ2Rvc2ZzbGFiZWwgJXMgJXMnICUgKGRzdCwgbGFiZWwpCisgICAgICAgIGVsaWYgZnN0eXBlID09ICdidHJmcyc6CisgICAgICAgICAgICBjbWQgPSAnYnRyZnMgZmlsZXN5c3RlbSBsYWJlbCAlcyAlcycgJSAoZHN0LCBsYWJlbCkKKyAgICAgICAgZWxpZiBmc3R5cGUgPT0gJ3N3YXAnOgorICAgICAgICAgICAgY21kID0gJ21rc3dhcCAtTCAlcyAlcycgJSAobGFiZWwsIGRzdCkKKyAgICAgICAgZWxpZiBmc3R5cGUgPT0gJ3NxdWFzaGZzJzoKKyAgICAgICAgICAgIHJhaXNlIFdpY0Vycm9yKCJJdCdzIG5vdCBwb3NzaWJsZSB0byB1cGRhdGUgYSBzcXVhc2hmcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZXN5c3RlbSBsYWJlbCAnJXMnIiAlIChsYWJlbCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBXaWNFcnJvcigiQ2Fubm90IHVwZGF0ZSBmaWxlc3lzdGVtIGxhYmVsOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5rbm93biBmc3R5cGU6ICclcyciICUgKGZzdHlwZSkpCisKKyAgICAgICAgZXhlY19jbWQoY21kKQorCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGRvX3ByZXBhcmVfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgY3IsIGNyX3dvcmtkaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLCBib290aW1nX2Rpciwga2VybmVsX2RpciwKQEAgLTY2LDQgKzg1LDcgQEAKICAgICAgICAgaWYgZmlsZXNpemUgPiBwYXJ0LnNpemU6CiAgICAgICAgICAgICBwYXJ0LnNpemUgPSBmaWxlc2l6ZQogCisgICAgICAgIGlmIHBhcnQubGFiZWw6CisgICAgICAgICAgICBSYXdDb3B5UGx1Z2luLmRvX2ltYWdlX2xhYmVsKHBhcnQuZnN0eXBlLCBkc3QsIHBhcnQubGFiZWwpCisKICAgICAgICAgcGFydC5zb3VyY2VfZmlsZSA9IGRzdApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9yb290ZnMucHkgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL3Jvb3Rmcy5weQppbmRleCBmMmUyY2E4Li5hZWM3MjBmIDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL3Jvb3Rmcy5weQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL3Jvb3Rmcy5weQpAQCAtMjgsMTIgKzI4LDEzIEBACiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3lzCiAKIGZyb20gb2UucGF0aCBpbXBvcnQgY29weWhhcmRsaW5rdHJlZQogCiBmcm9tIHdpYyBpbXBvcnQgV2ljRXJyb3IKIGZyb20gd2ljLnBsdWdpbmJhc2UgaW1wb3J0IFNvdXJjZVBsdWdpbgotZnJvbSB3aWMudXRpbHMubWlzYyBpbXBvcnQgZ2V0X2JpdGJha2VfdmFyLCBleGVjX2NtZAorZnJvbSB3aWMubWlzYyBpbXBvcnQgZ2V0X2JpdGJha2VfdmFyCiAKIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCd3aWMnKQogCkBAIC00Nyw3ICs0OCw3IEBACiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBfX2dldF9yb290ZnNfZGlyKHJvb3Rmc19kaXIpOgogICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHJvb3Rmc19kaXIpOgotICAgICAgICAgICAgcmV0dXJuIHJvb3Rmc19kaXIKKyAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLnJlYWxwYXRoKHJvb3Rmc19kaXIpCiAKICAgICAgICAgaW1hZ2Vfcm9vdGZzX2RpciA9IGdldF9iaXRiYWtlX3ZhcigiSU1BR0VfUk9PVEZTIiwgcm9vdGZzX2RpcikKICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoaW1hZ2Vfcm9vdGZzX2Rpcik6CkBAIC01NSw3ICs1Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZWQgJXMgaGFzIGJlZW4gZm91bmQgYXQgJXMsIGV4aXRpbmcuIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocm9vdGZzX2RpciwgaW1hZ2Vfcm9vdGZzX2RpcikpCiAKLSAgICAgICAgcmV0dXJuIGltYWdlX3Jvb3Rmc19kaXIKKyAgICAgICAgcmV0dXJuIG9zLnBhdGgucmVhbHBhdGgoaW1hZ2Vfcm9vdGZzX2RpcikKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBkb19wcmVwYXJlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyLCBjcl93b3JrZGlyLApAQCAtODAsMjUgKzgxLDI1IEBACiAgICAgICAgICAgICAgICAgcmFpc2UgV2ljRXJyb3IoIkNvdWxkbid0IGZpbmQgLS1yb290ZnMtZGlyPSVzIGNvbm5lY3Rpb24gb3IgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpdCBpcyBub3QgYSB2YWxpZCBwYXRoLCBleGl0aW5nIiAlIHBhcnQucm9vdGZzX2RpcikKIAotICAgICAgICByZWFsX3Jvb3Rmc19kaXIgPSBjbHMuX19nZXRfcm9vdGZzX2Rpcihyb290ZnNfZGlyKQorICAgICAgICBwYXJ0LnJvb3Rmc19kaXIgPSBjbHMuX19nZXRfcm9vdGZzX2Rpcihyb290ZnNfZGlyKQogCisgICAgICAgIG5ld19yb290ZnMgPSBOb25lCiAgICAgICAgICMgSGFuZGxlIGV4Y2x1ZGVkIHBhdGhzLgogICAgICAgICBpZiBwYXJ0LmV4Y2x1ZGVfcGF0aCBpcyBub3QgTm9uZToKICAgICAgICAgICAgICMgV2UgbmVlZCBhIG5ldyByb290ZnMgZGlyZWN0b3J5IHdlIGNhbiBkZWxldGUgZmlsZXMgZnJvbS4gQ29weSB0bwogICAgICAgICAgICAgIyB3b3JrZGlyLgotICAgICAgICAgICAgbmV3X3Jvb3RmcyA9IG9zLnBhdGgucmVhbHBhdGgob3MucGF0aC5qb2luKGNyX3dvcmtkaXIsICJyb290ZnMiKSkKKyAgICAgICAgICAgIG5ld19yb290ZnMgPSBvcy5wYXRoLnJlYWxwYXRoKG9zLnBhdGguam9pbihjcl93b3JrZGlyLCAicm9vdGZzJWQiICUgcGFydC5saW5lbm8pKQogCiAgICAgICAgICAgICBpZiBvcy5wYXRoLmxleGlzdHMobmV3X3Jvb3Rmcyk6CiAgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShvcy5wYXRoLmpvaW4obmV3X3Jvb3RmcykpCiAKLSAgICAgICAgICAgIGNvcHloYXJkbGlua3RyZWUocmVhbF9yb290ZnNfZGlyLCBuZXdfcm9vdGZzKQotCi0gICAgICAgICAgICByZWFsX3Jvb3Rmc19kaXIgPSBuZXdfcm9vdGZzCisgICAgICAgICAgICBjb3B5aGFyZGxpbmt0cmVlKHBhcnQucm9vdGZzX2RpciwgbmV3X3Jvb3RmcykKIAogICAgICAgICAgICAgZm9yIG9yaWdfcGF0aCBpbiBwYXJ0LmV4Y2x1ZGVfcGF0aDoKICAgICAgICAgICAgICAgICBwYXRoID0gb3JpZ19wYXRoCiAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2FicyhwYXRoKToKLSAgICAgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoIk11c3QgYmUgcmVsYXRpdmU6IC0tZXhjbHVkZS1wYXRoPSVzIiAlIG9yaWdfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJNdXN0IGJlIHJlbGF0aXZlOiAtLWV4Y2x1ZGUtcGF0aD0lcyIgJSBvcmlnX3BhdGgpCisgICAgICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICAgICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLnJlYWxwYXRoKG9zLnBhdGguam9pbihuZXdfcm9vdGZzLCBwYXRoKSkKIApAQCAtMTA2LDcgKzEwNyw4IEBACiAgICAgICAgICAgICAgICAgIyBiZWNhdXNlIGRvaW5nIHNvIGNvdWxkIGJlIHF1aXRlIGRpc2FzdHJvdXMgKHdlIHdpbGwgZGVsZXRlIHRoZQogICAgICAgICAgICAgICAgICMgZGlyZWN0b3J5KS4KICAgICAgICAgICAgICAgICBpZiBub3QgZnVsbF9wYXRoLnN0YXJ0c3dpdGgobmV3X3Jvb3Rmcyk6Ci0gICAgICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCInJXMnIHBvaW50cyB0byBhIHBhdGggb3V0c2lkZSB0aGUgcm9vdGZzIiAlIG9yaWdfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCInJXMnIHBvaW50cyB0byBhIHBhdGggb3V0c2lkZSB0aGUgcm9vdGZzIiAlIG9yaWdfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgICAgICAgICAgICAgIGlmIHBhdGguZW5kc3dpdGgob3Muc2VwKToKICAgICAgICAgICAgICAgICAgICAgIyBEZWxldGUgY29udGVudCBvbmx5LgpAQCAtMTIwLDYgKzEyMiw1IEBACiAgICAgICAgICAgICAgICAgICAgICMgRGVsZXRlIHdob2xlIGRpcmVjdG9yeS4KICAgICAgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShmdWxsX3BhdGgpCiAKLSAgICAgICAgcGFydC5yb290ZnNfZGlyID0gcmVhbF9yb290ZnNfZGlyCiAgICAgICAgIHBhcnQucHJlcGFyZV9yb290ZnMoY3Jfd29ya2Rpciwgb2VfYnVpbGRkaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbF9yb290ZnNfZGlyLCBuYXRpdmVfc3lzcm9vdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcm9vdGZzIG9yIHBhcnQucm9vdGZzX2RpciwgbmF0aXZlX3N5c3Jvb3QpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL19faW5pdF9fLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9fX2luaXRfXy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL19faW5pdF9fLnB5CisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvbWlzYy5weSBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvbWlzYy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdlMGFkNi4uMDAwMDAwMAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL21pc2MucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMzAgKzAsMCBAQAotIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKLSMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDEzLCBJbnRlbCBDb3Jwb3JhdGlvbi4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0jIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0jIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0jCi0jIERFU0NSSVBUSU9OCi0jIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgcGxhY2UgdG8gY29sbGVjdCB2YXJpb3VzIHdpYy1yZWxhdGVkIHV0aWxzCi0jIGZvciB0aGUgT3BlbkVtYmVkZGVkIEltYWdlIFRvb2xzLgotIwotIyBBVVRIT1JTCi0jIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGxpbnV4LmludGVsLmNvbT4KLSMKLSIiIk1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zLiIiIgotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9zCi1pbXBvcnQgcmUKLQotZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKLWZyb20gZGlzdHV0aWxzIGltcG9ydCBzcGF3bgotCi1mcm9tIHdpYyBpbXBvcnQgV2ljRXJyb3IKLWZyb20gd2ljLnV0aWxzIGltcG9ydCBydW5uZXIKLQotbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3dpYycpCi0KLSMgZXhlY3V0YWJsZSAtPiByZWNpcGUgcGFpcnMgZm9yIGV4ZWNfbmF0aXZlX2NtZAotTkFUSVZFX1JFQ0lQRVMgPSB7ImJtYXB0b29sIjogImJtYXAtdG9vbHMiLAotICAgICAgICAgICAgICAgICAgImdydWItbWtpbWFnZSI6ICJncnViLWVmaSIsCi0gICAgICAgICAgICAgICAgICAiaXNvaHlicmlkIjogInN5c2xpbnV4IiwKLSAgICAgICAgICAgICAgICAgICJtY29weSI6ICJtdG9vbHMiLAotICAgICAgICAgICAgICAgICAgIm1rZG9zZnMiOiAiZG9zZnN0b29scyIsCi0gICAgICAgICAgICAgICAgICAibWtpc29mcyI6ICJjZHJ0b29scyIsCi0gICAgICAgICAgICAgICAgICAibWtmcy5idHJmcyI6ICJidHJmcy10b29scyIsCi0gICAgICAgICAgICAgICAgICAibWtmcy5leHQyIjogImUyZnNwcm9ncyIsCi0gICAgICAgICAgICAgICAgICAibWtmcy5leHQzIjogImUyZnNwcm9ncyIsCi0gICAgICAgICAgICAgICAgICAibWtmcy5leHQ0IjogImUyZnNwcm9ncyIsCi0gICAgICAgICAgICAgICAgICAibWtmcy52ZmF0IjogImRvc2ZzdG9vbHMiLAotICAgICAgICAgICAgICAgICAgIm1rc3F1YXNoZnMiOiAic3F1YXNoZnMtdG9vbHMiLAotICAgICAgICAgICAgICAgICAgIm1rc3dhcCI6ICJ1dGlsLWxpbnV4IiwKLSAgICAgICAgICAgICAgICAgICJtbWQiOiAic3lzbGludXgiLAotICAgICAgICAgICAgICAgICAgInBhcnRlZCI6ICJwYXJ0ZWQiLAotICAgICAgICAgICAgICAgICAgInNmZGlzayI6ICJ1dGlsLWxpbnV4IiwKLSAgICAgICAgICAgICAgICAgICJzZ2Rpc2siOiAiZ3B0ZmRpc2siLAotICAgICAgICAgICAgICAgICAgInN5c2xpbnV4IjogInN5c2xpbnV4IgotICAgICAgICAgICAgICAgICB9Ci0KLWRlZiBfZXhlY19jbWQoY21kX2FuZF9hcmdzLCBhc19zaGVsbD1GYWxzZSk6Ci0gICAgIiIiCi0gICAgRXhlY3V0ZSBjb21tYW5kLCBjYXRjaGluZyBzdGRlcnIsIHN0ZG91dAotCi0gICAgTmVlZCB0byBleGVjdXRlIGFzX3NoZWxsIGlmIHRoZSBjb21tYW5kIHVzZXMgd2lsZGNhcmRzCi0gICAgIiIiCi0gICAgbG9nZ2VyLmRlYnVnKCJfZXhlY19jbWQ6ICVzIiwgY21kX2FuZF9hcmdzKQotICAgIGFyZ3MgPSBjbWRfYW5kX2FyZ3Muc3BsaXQoKQotICAgIGxvZ2dlci5kZWJ1ZyhhcmdzKQotCi0gICAgaWYgYXNfc2hlbGw6Ci0gICAgICAgIHJldCwgb3V0ID0gcnVubmVyLnJ1bnRvb2woY21kX2FuZF9hcmdzKQotICAgIGVsc2U6Ci0gICAgICAgIHJldCwgb3V0ID0gcnVubmVyLnJ1bnRvb2woYXJncykKLSAgICBvdXQgPSBvdXQuc3RyaXAoKQotICAgIGlmIHJldCAhPSAwOgotICAgICAgICByYWlzZSBXaWNFcnJvcigiX2V4ZWNfY21kOiAlcyByZXR1cm5lZCAnJXMnIGluc3RlYWQgb2YgMFxub3V0cHV0OiAlcyIgJSBcCi0gICAgICAgICAgICAgICAgICAgICAgIChjbWRfYW5kX2FyZ3MsIHJldCwgb3V0KSkKLQotICAgIGxvZ2dlci5kZWJ1ZygiX2V4ZWNfY21kOiBvdXRwdXQgZm9yICVzIChyYyA9ICVkKTogJXMiLAotICAgICAgICAgICAgICAgICBjbWRfYW5kX2FyZ3MsIHJldCwgb3V0KQotCi0gICAgcmV0dXJuIHJldCwgb3V0Ci0KLQotZGVmIGV4ZWNfY21kKGNtZF9hbmRfYXJncywgYXNfc2hlbGw9RmFsc2UpOgotICAgICIiIgotICAgIEV4ZWN1dGUgY29tbWFuZCwgcmV0dXJuIG91dHB1dAotICAgICIiIgotICAgIHJldHVybiBfZXhlY19jbWQoY21kX2FuZF9hcmdzLCBhc19zaGVsbClbMV0KLQotCi1kZWYgZXhlY19uYXRpdmVfY21kKGNtZF9hbmRfYXJncywgbmF0aXZlX3N5c3Jvb3QsIHBzZXVkbz0iIik6Ci0gICAgIiIiCi0gICAgRXhlY3V0ZSBuYXRpdmUgY29tbWFuZCwgY2F0Y2hpbmcgc3RkZXJyLCBzdGRvdXQKLQotICAgIE5lZWQgdG8gZXhlY3V0ZSBhc19zaGVsbCBpZiB0aGUgY29tbWFuZCB1c2VzIHdpbGRjYXJkcwotCi0gICAgQWx3YXlzIG5lZWQgdG8gZXhlY3V0ZSBuYXRpdmUgY29tbWFuZHMgYXNfc2hlbGwKLSAgICAiIiIKLSAgICAjIFRoZSByZWFzb24gLTEgaXMgdXNlZCBpcyBiZWNhdXNlIHRoZXJlIG1heSBiZSAiZXhwb3J0IiBjb21tYW5kcy4KLSAgICBhcmdzID0gY21kX2FuZF9hcmdzLnNwbGl0KCc7JylbLTFdLnNwbGl0KCkKLSAgICBsb2dnZXIuZGVidWcoYXJncykKLQotICAgIGlmIHBzZXVkbzoKLSAgICAgICAgY21kX2FuZF9hcmdzID0gcHNldWRvICsgY21kX2FuZF9hcmdzCi0KLSAgICB3dG9vbHNfc3lzcm9vdCA9IGdldF9iaXRiYWtlX3ZhcigiUkVDSVBFX1NZU1JPT1RfTkFUSVZFIiwgIndpYy10b29scyIpCi0KLSAgICBuYXRpdmVfcGF0aHMgPSBcCi0gICAgICAgICAgICAiJXMvc2Jpbjolcy91c3Ivc2Jpbjolcy91c3IvYmluOiVzL3NiaW46JXMvdXNyL3NiaW46JXMvdXNyL2JpbiIgJSBcCi0gICAgICAgICAgICAod3Rvb2xzX3N5c3Jvb3QsIHd0b29sc19zeXNyb290LCB3dG9vbHNfc3lzcm9vdCwKLSAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCwgbmF0aXZlX3N5c3Jvb3QsIG5hdGl2ZV9zeXNyb290KQotICAgIG5hdGl2ZV9jbWRfYW5kX2FyZ3MgPSAiZXhwb3J0IFBBVEg9JXM6JFBBVEg7JXMiICUgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hdGl2ZV9wYXRocywgY21kX2FuZF9hcmdzKQotICAgIGxvZ2dlci5kZWJ1ZygiZXhlY19uYXRpdmVfY21kOiAlcyIsIG5hdGl2ZV9jbWRfYW5kX2FyZ3MpCi0KLSAgICAjIElmIHRoZSBjb21tYW5kIGlzbid0IGluIHRoZSBuYXRpdmUgc3lzcm9vdCBzYXkgd2UgZmFpbGVkLgotICAgIGlmIHNwYXduLmZpbmRfZXhlY3V0YWJsZShhcmdzWzBdLCBuYXRpdmVfcGF0aHMpOgotICAgICAgICByZXQsIG91dCA9IF9leGVjX2NtZChuYXRpdmVfY21kX2FuZF9hcmdzLCBUcnVlKQotICAgIGVsc2U6Ci0gICAgICAgIHJldCA9IDEyNwotICAgICAgICBvdXQgPSAiY2FuJ3QgZmluZCBuYXRpdmUgZXhlY3V0YWJsZSAlcyBpbiAlcyIgJSAoYXJnc1swXSwgbmF0aXZlX3BhdGhzKQotCi0gICAgcHJvZyA9IGFyZ3NbMF0KLSAgICAjIHNoZWxsIGNvbW1hbmQtbm90LWZvdW5kCi0gICAgaWYgcmV0ID09IDEyNyBcCi0gICAgICAgb3IgKHBzZXVkbyBhbmQgcmV0ID09IDEgYW5kIG91dCA9PSAiQ2FuJ3QgZmluZCAnJXMnIGluICRQQVRILiIgJSBwcm9nKToKLSAgICAgICAgbXNnID0gIkEgbmF0aXZlIHByb2dyYW0gJXMgcmVxdWlyZWQgdG8gYnVpbGQgdGhlIGltYWdlICJcCi0gICAgICAgICAgICAgICJ3YXMgbm90IGZvdW5kIChzZWUgZGV0YWlscyBhYm92ZSkuXG5cbiIgJSBwcm9nCi0gICAgICAgIHJlY2lwZSA9IE5BVElWRV9SRUNJUEVTLmdldChwcm9nKQotICAgICAgICBpZiByZWNpcGU6Ci0gICAgICAgICAgICBtc2cgKz0gIlBsZWFzZSBtYWtlIHN1cmUgd2ljLXRvb2xzIGhhdmUgJXMtbmF0aXZlIGluIGl0cyBERVBFTkRTLCBiYWtlIGl0IHdpdGggJ2JpdGJha2Ugd2ljLXRvb2xzJyAiXAotICAgICAgICAgICAgICAgICAgICJhbmQgdHJ5IGFnYWluLlxuIiAlIHJlY2lwZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbXNnICs9ICJXaWMgZmFpbGVkIHRvIGZpbmQgYSByZWNpcGUgdG8gYnVpbGQgbmF0aXZlICVzLiBQbGVhc2UgIlwKLSAgICAgICAgICAgICAgICAgICAiZmlsZSBhIGJ1ZyBhZ2FpbnN0IHdpYy5cbiIgJSBwcm9nCi0gICAgICAgIHJhaXNlIFdpY0Vycm9yKG1zZykKLQotICAgIHJldHVybiByZXQsIG91dAotCi1CT09URERfRVhUUkFfU1BBQ0UgPSAxNjM4NAotCi1jbGFzcyBCaXRiYWtlVmFycyhkZWZhdWx0ZGljdCk6Ci0gICAgIiIiCi0gICAgQ29udGFpbmVyIGZvciBCaXRiYWtlIHZhcmlhYmxlcy4KLSAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIGRlZmF1bHRkaWN0Ll9faW5pdF9fKHNlbGYsIGRpY3QpCi0KLSAgICAgICAgIyBkZWZhdWx0X2ltYWdlIGFuZCB2YXJzX2RpciBhdHRyaWJ1dGVzIHNob3VsZCBiZSBzZXQgZnJvbSBvdXRzaWRlCi0gICAgICAgIHNlbGYuZGVmYXVsdF9pbWFnZSA9IE5vbmUKLSAgICAgICAgc2VsZi52YXJzX2RpciA9IE5vbmUKLQotICAgIGRlZiBfcGFyc2VfbGluZShzZWxmLCBsaW5lLCBpbWFnZSwgbWF0Y2hlcj1yZS5jb21waWxlKHIiXihbYS16QS1aMC05XC1fKy4vfl0rKT0oLiopIikpOgotICAgICAgICAiIiIKLSAgICAgICAgUGFyc2Ugb25lIGxpbmUgZnJvbSBiaXRiYWtlIC1lIG91dHB1dCBvciBmcm9tIC5lbnYgZmlsZS4KLSAgICAgICAgUHV0IHJlc3VsdCBrZXktdmFsdWUgcGFpciBpbnRvIHRoZSBzdG9yYWdlLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgIj0iIG5vdCBpbiBsaW5lOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIG1hdGNoID0gbWF0Y2hlci5tYXRjaChsaW5lKQotICAgICAgICBpZiBub3QgbWF0Y2g6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAga2V5LCB2YWwgPSBtYXRjaC5ncm91cHMoKQotICAgICAgICBzZWxmW2ltYWdlXVtrZXldID0gdmFsLnN0cmlwKCciJykKLQotICAgIGRlZiBnZXRfdmFyKHNlbGYsIHZhciwgaW1hZ2U9Tm9uZSwgY2FjaGU9VHJ1ZSk6Ci0gICAgICAgICIiIgotICAgICAgICBHZXQgYml0YmFrZSB2YXJpYWJsZSBmcm9tICdiaXRiYWtlIC1lJyBvdXRwdXQgb3IgZnJvbSAuZW52IGZpbGUuCi0gICAgICAgIFRoaXMgaXMgYSBsYXp5IG1ldGhvZCwgaS5lLiBpdCBydW5zIGJpdGJha2Ugb3IgcGFyc2VzIGZpbGUgb25seSB3aGVuCi0gICAgICAgIG9ubHkgd2hlbiB2YXJpYWJsZSBpcyByZXF1ZXN0ZWQuIEl0IGFsc28gY2FjaGVzIHJlc3VsdHMuCi0gICAgICAgICIiIgotICAgICAgICBpZiBub3QgaW1hZ2U6Ci0gICAgICAgICAgICBpbWFnZSA9IHNlbGYuZGVmYXVsdF9pbWFnZQotCi0gICAgICAgIGlmIGltYWdlIG5vdCBpbiBzZWxmOgotICAgICAgICAgICAgaWYgaW1hZ2UgYW5kIHNlbGYudmFyc19kaXI6Ci0gICAgICAgICAgICAgICAgZm5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi52YXJzX2RpciwgaW1hZ2UgKyAnLmVudicpCi0gICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZm5hbWUpOgotICAgICAgICAgICAgICAgICAgICAjIHBhcnNlIC5lbnYgZmlsZQotICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZm5hbWUpIGFzIHZhcnNmaWxlOgotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gdmFyc2ZpbGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VfbGluZShsaW5lLCBpbWFnZSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBwcmludCgiQ291bGRuJ3QgZ2V0IGJpdGJha2UgdmFyaWFibGUgZnJvbSAlcy4iICUgZm5hbWUpCi0gICAgICAgICAgICAgICAgICAgIHByaW50KCJGaWxlICVzIGRvZXNuJ3QgZXhpc3QuIiAlIGZuYW1lKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgIyBHZXQgYml0YmFrZSAtZSBvdXRwdXQKLSAgICAgICAgICAgICAgICBjbWQgPSAiYml0YmFrZSAtZSIKLSAgICAgICAgICAgICAgICBpZiBpbWFnZToKLSAgICAgICAgICAgICAgICAgICAgY21kICs9ICIgJXMiICUgaW1hZ2UKLQotICAgICAgICAgICAgICAgIGxvZ19sZXZlbCA9IGxvZ2dlci5nZXRFZmZlY3RpdmVMZXZlbCgpCi0gICAgICAgICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKLSAgICAgICAgICAgICAgICByZXQsIGxpbmVzID0gX2V4ZWNfY21kKGNtZCkKLSAgICAgICAgICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nX2xldmVsKQotCi0gICAgICAgICAgICAgICAgaWYgcmV0OgotICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNvdWxkbid0IGdldCAnJXMnIG91dHB1dC4iLCBjbWQpCi0gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQml0YmFrZSBmYWlsZWQgd2l0aCBlcnJvcjpcbiVzXG4iLCBsaW5lcykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgICAgICAgICAjIFBhcnNlIGJpdGJha2UgLWUgb3V0cHV0Ci0gICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXMuc3BsaXQoJ1xuJyk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlX2xpbmUobGluZSwgaW1hZ2UpCi0KLSAgICAgICAgICAgICMgTWFrZSBmaXJzdCBpbWFnZSBhIGRlZmF1bHQgc2V0IG9mIHZhcmlhYmxlcwotICAgICAgICAgICAgaWYgY2FjaGU6Ci0gICAgICAgICAgICAgICAgaW1hZ2VzID0gW2tleSBmb3Iga2V5IGluIHNlbGYgaWYga2V5XQotICAgICAgICAgICAgICAgIGlmIGxlbihpbWFnZXMpID09IDE6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGZbTm9uZV0gPSBzZWxmW2ltYWdlXQotCi0gICAgICAgIHJlc3VsdCA9IHNlbGZbaW1hZ2VdLmdldCh2YXIpCi0gICAgICAgIGlmIG5vdCBjYWNoZToKLSAgICAgICAgICAgIHNlbGYucG9wKGltYWdlLCBOb25lKQotCi0gICAgICAgIHJldHVybiByZXN1bHQKLQotIyBDcmVhdGUgQkJfVkFSUyBzaW5nbGV0b24KLUJCX1ZBUlMgPSBCaXRiYWtlVmFycygpCi0KLWRlZiBnZXRfYml0YmFrZV92YXIodmFyLCBpbWFnZT1Ob25lLCBjYWNoZT1UcnVlKToKLSAgICAiIiIKLSAgICBQcm92aWRlIG9sZCBnZXRfYml0YmFrZV92YXIgQVBJIGJ5IHdyYXBwaW5nCi0gICAgZ2V0X3ZhciBtZXRob2Qgb2YgQkJfVkFSUyBzaW5nbGV0b24uCi0gICAgIiIiCi0gICAgcmV0dXJuIEJCX1ZBUlMuZ2V0X3Zhcih2YXIsIGltYWdlLCBjYWNoZSkKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvcnVubmVyLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9ydW5uZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYTAwZmIuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9ydW5uZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24gLXR0Ci0jCi0jIENvcHlyaWdodCAoYykgMjAxMSBJbnRlbCwgSW5jLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotIyBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQotIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKLSMgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLWltcG9ydCBzdWJwcm9jZXNzCi0KLWZyb20gd2ljIGltcG9ydCBXaWNFcnJvcgotCi1kZWYgcnVudG9vbChjbWRsbl9vcl9hcmdzKToKLSAgICAiIiIgd3JhcHBlciBmb3IgbW9zdCBvZiB0aGUgc3VicHJvY2VzcyBjYWxscwotICAgIGlucHV0OgotICAgICAgICBjbWRsbl9vcl9hcmdzOiBjYW4gYmUgYm90aCBhcmdzIGFuZCBjbWRsbiBzdHIgKHNoZWxsPVRydWUpCi0gICAgcmV0dXJuOgotICAgICAgICByYywgb3V0cHV0Ci0gICAgIiIiCi0gICAgaWYgaXNpbnN0YW5jZShjbWRsbl9vcl9hcmdzLCBsaXN0KToKLSAgICAgICAgY21kID0gY21kbG5fb3JfYXJnc1swXQotICAgICAgICBzaGVsbCA9IEZhbHNlCi0gICAgZWxzZToKLSAgICAgICAgaW1wb3J0IHNobGV4Ci0gICAgICAgIGNtZCA9IHNobGV4LnNwbGl0KGNtZGxuX29yX2FyZ3MpWzBdCi0gICAgICAgIHNoZWxsID0gVHJ1ZQotCi0gICAgc291dCA9IHN1YnByb2Nlc3MuUElQRQotICAgIHNlcnIgPSBzdWJwcm9jZXNzLlNURE9VVAotCi0gICAgdHJ5OgotICAgICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihjbWRsbl9vcl9hcmdzLCBzdGRvdXQ9c291dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXNlcnIsIHNoZWxsPXNoZWxsKQotICAgICAgICBzb3V0LCBzZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCi0gICAgICAgICMgY29tYmluZSBzdGRvdXQgYW5kIHN0ZGVyciwgZmlsdGVyIE5vbmUgb3V0IGFuZCBkZWNvZGUKLSAgICAgICAgb3V0ID0gJycuam9pbihbb3V0LmRlY29kZSgndXRmLTgnKSBmb3Igb3V0IGluIFtzb3V0LCBzZXJyXSBpZiBvdXRdKQotICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKLSAgICAgICAgaWYgZXJyLmVycm5vID09IDI6Ci0gICAgICAgICAgICAjIFtFcnJubyAyXSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Ci0gICAgICAgICAgICByYWlzZSBXaWNFcnJvcignQ2Fubm90IHJ1biBjb21tYW5kOiAlcywgbG9zdCBkZXBlbmRlbmN5PycgJSBjbWQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSAjIHJlbGF5Ci0KLSAgICByZXR1cm4gcHJvY2Vzcy5yZXR1cm5jb2RlLCBvdXQKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLWJ1aWxkLXBlcmYtcmVwb3J0IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtYnVpbGQtcGVyZi1yZXBvcnQKaW5kZXggNmYwYjg0Zi4uYWM4OGYwZiAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtYnVpbGQtcGVyZi1yZXBvcnQKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtYnVpbGQtcGVyZi1yZXBvcnQKQEAgLTI5LDEyICsyOSwxNCBAQAogaW1wb3J0IHNjcmlwdHBhdGgKIGZyb20gYnVpbGRfcGVyZiBpbXBvcnQgcHJpbnRfdGFibGUKIGZyb20gYnVpbGRfcGVyZi5yZXBvcnQgaW1wb3J0IChtZXRhZGF0YV94bWxfdG9fanNvbiwgcmVzdWx0c194bWxfdG9fanNvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGVfZGF0YSwgYWdncmVnYXRlX21ldGFkYXRhLCBtZWFzdXJlbWVudF9zdGF0cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGVfZGF0YSwgYWdncmVnYXRlX21ldGFkYXRhLCBtZWFzdXJlbWVudF9zdGF0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZ2dyZWdhdGVUZXN0RGF0YSkKIGZyb20gYnVpbGRfcGVyZiBpbXBvcnQgaHRtbAorZnJvbSBidWlsZHN0YXRzIGltcG9ydCBCdWlsZFN0YXRzLCBkaWZmX2J1aWxkc3RhdHMsIEJTVmVyRGlmZgogCiBzY3JpcHRwYXRoLmFkZF9vZV9saWJfcGF0aCgpCiAKLWZyb20gb2VxYS51dGlscy5naXQgaW1wb3J0IEdpdFJlcG8KK2Zyb20gb2VxYS51dGlscy5naXQgaW1wb3J0IEdpdFJlcG8sIEdpdEVycm9yCiAKIAogIyBTZXR1cCBsb2dnaW5nCkBAIC04MiwyOSArODQsNTIgQEAKICAgICAjIFJldHVybiBmaWVsZCBuYW1lcyBhbmQgYSBzb3J0ZWQgbGlzdCBvZiByZXZzCiAgICAgcmV0dXJuIHVuZGVmX2ZpZWxkcywgc29ydGVkKHJldnMpCiAKLWRlZiBsaXN0X3Rlc3RfcmV2cyhyZXBvLCB0YWdfbmFtZSwgKiprd2FyZ3MpOgorZGVmIGxpc3RfdGVzdF9yZXZzKHJlcG8sIHRhZ19uYW1lLCB2ZXJib3NpdHksICoqa3dhcmdzKToKICAgICAiIiJHZXQgbGlzdCBvZiBhbGwgdGVzdGVkIHJldmlzaW9ucyIiIgotICAgIGZpZWxkcywgcmV2cyA9IGdldF90ZXN0X3J1bnMocmVwbywgdGFnX25hbWUsICoqa3dhcmdzKQorICAgIHZhbGlkX2t3YXJncyA9IGRpY3QoWyhrLCB2KSBmb3IgaywgdiBpbiBrd2FyZ3MuaXRlbXMoKSBpZiB2IGlzIG5vdCBOb25lXSkKKworICAgIGZpZWxkcywgcmV2cyA9IGdldF90ZXN0X3J1bnMocmVwbywgdGFnX25hbWUsICoqdmFsaWRfa3dhcmdzKQogICAgIGlnbm9yZV9maWVsZHMgPSBbJ3RhZ19udW1iZXInXQorICAgIGlmIHZlcmJvc2l0eSA8IDI6CisgICAgICAgIGV4dHJhX2ZpZWxkcyA9IFsnQ09NTUlUUycsICdURVNUIFJVTlMnXQorICAgICAgICBpZ25vcmVfZmllbGRzLmV4dGVuZChbJ2NvbW1pdF9udW1iZXInLCAnY29tbWl0J10pCisgICAgZWxzZToKKyAgICAgICAgZXh0cmFfZmllbGRzID0gWydURVNUIFJVTlMnXQorCiAgICAgcHJpbnRfZmllbGRzID0gW2kgZm9yIGksIGYgaW4gZW51bWVyYXRlKGZpZWxkcykgaWYgZiBub3QgaW4gaWdub3JlX2ZpZWxkc10KIAogICAgICMgU29ydCByZXZzCi0gICAgcm93cyA9IFtbZmllbGRzW2ldLnVwcGVyKCkgZm9yIGkgaW4gcHJpbnRfZmllbGRzXSArIFsnVEVTVCBSVU5TJ11dCi0gICAgcHJldiA9IFsnJ10gKiBsZW4ocmV2cykKKyAgICByb3dzID0gW1tmaWVsZHNbaV0udXBwZXIoKSBmb3IgaSBpbiBwcmludF9maWVsZHNdICsgZXh0cmFfZmllbGRzXQorCisgICAgcHJldiA9IFsnJ10gKiBsZW4ocHJpbnRfZmllbGRzKQorICAgIHByZXZfY29tbWl0ID0gTm9uZQorICAgIGNvbW1pdF9jbnQgPSAwCisgICAgY29tbWl0X2ZpZWxkID0gZmllbGRzLmluZGV4KCdjb21taXQnKQogICAgIGZvciByZXYgaW4gcmV2czoKICAgICAgICAgIyBPbmx5IHVzZSBmaWVsZHMgdGhhdCB3ZSB3YW50IHRvIHByaW50Ci0gICAgICAgIHJldiA9IFtyZXZbaV0gZm9yIGkgaW4gcHJpbnRfZmllbGRzXQorICAgICAgICBjb2xzID0gW3JldltpXSBmb3IgaSBpbiBwcmludF9maWVsZHNdCiAKLSAgICAgICAgaWYgcmV2ICE9IHByZXY6Ci0gICAgICAgICAgICBuZXdfcm93ID0gWycnXSAqIGxlbihwcmludF9maWVsZHMpICsgWzFdCisKKyAgICAgICAgaWYgY29scyAhPSBwcmV2OgorICAgICAgICAgICAgY29tbWl0X2NudCA9IDEKKyAgICAgICAgICAgIHRlc3RfcnVuX2NudCA9IDEKKyAgICAgICAgICAgIG5ld19yb3cgPSBbJyddICogKGxlbihwcmludF9maWVsZHMpICsgbGVuKGV4dHJhX2ZpZWxkcykpCisKICAgICAgICAgICAgIGZvciBpIGluIHByaW50X2ZpZWxkczoKLSAgICAgICAgICAgICAgICBpZiByZXZbaV0gIT0gcHJldltpXToKKyAgICAgICAgICAgICAgICBpZiBjb2xzW2ldICE9IHByZXZbaV06CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBuZXdfcm93W2k6LTFdID0gcmV2W2k6XQorICAgICAgICAgICAgbmV3X3Jvd1tpOi1sZW4oZXh0cmFfZmllbGRzKV0gPSBjb2xzW2k6XQogICAgICAgICAgICAgcm93cy5hcHBlbmQobmV3X3JvdykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJvd3NbLTFdWy0xXSArPSAxCi0gICAgICAgIHByZXYgPSByZXYKKyAgICAgICAgICAgIGlmIHJldltjb21taXRfZmllbGRdICE9IHByZXZfY29tbWl0OgorICAgICAgICAgICAgICAgIGNvbW1pdF9jbnQgKz0gMQorICAgICAgICAgICAgdGVzdF9ydW5fY250ICs9IDEKKworICAgICAgICBpZiB2ZXJib3NpdHkgPCAyOgorICAgICAgICAgICAgbmV3X3Jvd1stMl0gPSBjb21taXRfY250CisgICAgICAgIG5ld19yb3dbLTFdID0gdGVzdF9ydW5fY250CisgICAgICAgIHByZXYgPSBjb2xzCisgICAgICAgIHByZXZfY29tbWl0ID0gcmV2W2NvbW1pdF9maWVsZF0KIAogICAgIHByaW50X3RhYmxlKHJvd3MpCiAKQEAgLTMwOSwyMCArMzM0LDUwIEBACiAgICAgcHJpbnQoKQogCiAKLWRlZiBwcmludF9odG1sX3JlcG9ydChkYXRhLCBpZF9jb21wKToKK2NsYXNzIEJTU3VtbWFyeShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBiczEsIGJzMik6CisgICAgICAgIHNlbGYudGFza3MgPSB7J2NvdW50JzogYnMyLm51bV90YXNrcywKKyAgICAgICAgICAgICAgICAgICAgICAnY2hhbmdlJzogJ3s6K2R9Jy5mb3JtYXQoYnMyLm51bV90YXNrcyAtIGJzMS5udW1fdGFza3MpfQorICAgICAgICBzZWxmLnRvcF9jb25zdW1lciA9IE5vbmUKKyAgICAgICAgc2VsZi50b3BfZGVjcmVhc2UgPSBOb25lCisgICAgICAgIHNlbGYudG9wX2luY3JlYXNlID0gTm9uZQorICAgICAgICBzZWxmLnZlcl9kaWZmID0gT3JkZXJlZERpY3QoKQorCisgICAgICAgIHRhc2tzX2RpZmYgPSBkaWZmX2J1aWxkc3RhdHMoYnMxLCBiczIsICdjcHV0aW1lJykKKworICAgICAgICAjIEdldCB0b3AgY29uc3VtZXJzIG9mIHJlc291cmNlcworICAgICAgICB0YXNrc19kaWZmID0gc29ydGVkKHRhc2tzX2RpZmYsIGtleT1hdHRyZ2V0dGVyKCd2YWx1ZTInKSkKKyAgICAgICAgc2VsZi50b3BfY29uc3VtZXIgPSB0YXNrc19kaWZmWy01Ol0KKworICAgICAgICAjIEdldCBiaWdnZXN0IGluY3JlYXNlIGFuZCBkZWNyZWFzZSBpbiByZXNvdXJjZSB1c2FnZQorICAgICAgICB0YXNrc19kaWZmID0gc29ydGVkKHRhc2tzX2RpZmYsIGtleT1hdHRyZ2V0dGVyKCdhYnNkaWZmJykpCisgICAgICAgIHNlbGYudG9wX2RlY3JlYXNlID0gdGFza3NfZGlmZlswOjVdCisgICAgICAgIHNlbGYudG9wX2luY3JlYXNlID0gdGFza3NfZGlmZlstNTpdCisKKyAgICAgICAgIyBDb21wYXJlIHJlY2lwZSB2ZXJzaW9ucyBhbmQgcHJlcGFyZSBkYXRhIGZvciBkaXNwbGF5CisgICAgICAgIHZlcl9kaWZmID0gQlNWZXJEaWZmKGJzMSwgYnMyKQorICAgICAgICBpZiB2ZXJfZGlmZjoKKyAgICAgICAgICAgIGlmIHZlcl9kaWZmLm5ldzoKKyAgICAgICAgICAgICAgICBzZWxmLnZlcl9kaWZmWydOZXcgcmVjaXBlcyddID0gWyhuLCByLmV2cikgZm9yIG4sIHIgaW4gdmVyX2RpZmYubmV3Lml0ZW1zKCldCisgICAgICAgICAgICBpZiB2ZXJfZGlmZi5kcm9wcGVkOgorICAgICAgICAgICAgICAgIHNlbGYudmVyX2RpZmZbJ0Ryb3BwZWQgcmVjaXBlcyddID0gWyhuLCByLmV2cikgZm9yIG4sIHIgaW4gdmVyX2RpZmYuZHJvcHBlZC5pdGVtcygpXQorICAgICAgICAgICAgaWYgdmVyX2RpZmYuZWNoYW5nZWQ6CisgICAgICAgICAgICAgICAgc2VsZi52ZXJfZGlmZlsnRXBvY2ggY2hhbmdlZCddID0gWyhuLCAie30gJnJhcnI7IHt9Ii5mb3JtYXQoci5sZWZ0LmV2ciwgci5yaWdodC5ldnIpKSBmb3IgbiwgciBpbiB2ZXJfZGlmZi5lY2hhbmdlZC5pdGVtcygpXQorICAgICAgICAgICAgaWYgdmVyX2RpZmYudmNoYW5nZWQ6CisgICAgICAgICAgICAgICAgc2VsZi52ZXJfZGlmZlsnVmVyc2lvbiBjaGFuZ2VkJ10gPSBbKG4sICJ7fSAmcmFycjsge30iLmZvcm1hdChyLmxlZnQudmVyc2lvbiwgci5yaWdodC52ZXJzaW9uKSkgZm9yIG4sIHIgaW4gdmVyX2RpZmYudmNoYW5nZWQuaXRlbXMoKV0KKyAgICAgICAgICAgIGlmIHZlcl9kaWZmLnJjaGFuZ2VkOgorICAgICAgICAgICAgICAgIHNlbGYudmVyX2RpZmZbJ1JldmlzaW9uIGNoYW5nZWQnXSA9IFsobiwgInt9ICZyYXJyOyB7fSIuZm9ybWF0KHIubGVmdC5ldnIsIHIucmlnaHQuZXZyKSkgZm9yIG4sIHIgaW4gdmVyX2RpZmYucmNoYW5nZWQuaXRlbXMoKV0KKworCitkZWYgcHJpbnRfaHRtbF9yZXBvcnQoZGF0YSwgaWRfY29tcCwgYnVpbGRzdGF0cyk6CiAgICAgIiIiUHJpbnQgcmVwb3J0IGluIGh0bWwgZm9ybWF0IiIiCiAgICAgIyBIYW5kbGUgbWV0YWRhdGEKLSAgICBtZXRhZGF0YSA9IHsnYnJhbmNoJzogeyd0aXRsZSc6ICdCcmFuY2gnLCAndmFsdWUnOiAnbWFzdGVyJ30sCi0gICAgICAgICAgICAgICAgJ2hvc3RuYW1lJzogeyd0aXRsZSc6ICdIb3N0bmFtZScsICd2YWx1ZSc6ICdmb29iYXInfSwKLSAgICAgICAgICAgICAgICAnY29tbWl0Jzogeyd0aXRsZSc6ICdDb21taXQnLCAndmFsdWUnOiAnMTIzNCd9Ci0gICAgICAgICAgICAgICB9Ci0gICAgbWV0YWRhdGEgPSBtZXRhZGF0YV9kaWZmKGRhdGFbaWRfY29tcF1bMF0sIGRhdGFbLTFdWzBdKQotCisgICAgbWV0YWRhdGEgPSBtZXRhZGF0YV9kaWZmKGRhdGFbaWRfY29tcF0ubWV0YWRhdGEsIGRhdGFbLTFdLm1ldGFkYXRhKQogCiAgICAgIyBHZW5lcmF0ZSBsaXN0IG9mIHRlc3RzCiAgICAgdGVzdHMgPSBbXQotICAgIGZvciB0ZXN0IGluIGRhdGFbLTFdWzFdWyd0ZXN0cyddLmtleXMoKToKLSAgICAgICAgdGVzdF9yID0gZGF0YVstMV1bMV1bJ3Rlc3RzJ11bdGVzdF0KKyAgICBmb3IgdGVzdCBpbiBkYXRhWy0xXS5yZXN1bHRzWyd0ZXN0cyddLmtleXMoKToKKyAgICAgICAgdGVzdF9yID0gZGF0YVstMV0ucmVzdWx0c1sndGVzdHMnXVt0ZXN0XQogICAgICAgICBuZXdfdGVzdCA9IHsnbmFtZSc6IHRlc3RfclsnbmFtZSddLAogICAgICAgICAgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiB0ZXN0X3JbJ2Rlc2NyaXB0aW9uJ10sCiAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnOiB0ZXN0X3JbJ3N0YXR1cyddLApAQCAtMzY4LDYgKzQyMywxNiBAQAogICAgICAgICAgICAgbmV3X21lYXNbJ3ZhbHVlJ10gPSBzYW1wbGVzWy0xXQogICAgICAgICAgICAgbmV3X21lYXNbJ3ZhbHVlX3R5cGUnXSA9IHNhbXBsZXNbLTFdWyd2YWxfY2xzJ10KIAorICAgICAgICAgICAgIyBDb21wYXJlIGJ1aWxkc3RhdHMKKyAgICAgICAgICAgIGJzX2tleSA9IHRlc3QgKyAnLicgKyBtZWFzCisgICAgICAgICAgICByZXYgPSBtZXRhZGF0YVsnY29tbWl0X251bSddWyd2YWx1ZSddCisgICAgICAgICAgICBjb21wX3JldiA9IG1ldGFkYXRhWydjb21taXRfbnVtJ11bJ3ZhbHVlX29sZCddCisgICAgICAgICAgICBpZiAocmV2IGluIGJ1aWxkc3RhdHMgYW5kIGJzX2tleSBpbiBidWlsZHN0YXRzW3Jldl0gYW5kCisgICAgICAgICAgICAgICAgICAgIGNvbXBfcmV2IGluIGJ1aWxkc3RhdHMgYW5kIGJzX2tleSBpbiBidWlsZHN0YXRzW2NvbXBfcmV2XSk6CisgICAgICAgICAgICAgICAgbmV3X21lYXNbJ2J1aWxkc3RhdHMnXSA9IEJTU3VtbWFyeShidWlsZHN0YXRzW2NvbXBfcmV2XVtic19rZXldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRzdGF0c1tyZXZdW2JzX2tleV0pCisKKwogICAgICAgICAgICAgbmV3X3Rlc3RbJ21lYXN1cmVtZW50cyddLmFwcGVuZChuZXdfbWVhcykKICAgICAgICAgdGVzdHMuYXBwZW5kKG5ld190ZXN0KQogCkBAIC0zNzYsNyArNDQxLDYxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21heCc6IGdldF9kYXRhX2l0ZW0oZGF0YVstMV1bMF0sICdsYXllcnMubWV0YS5jb21taXRfY291bnQnKX0KICAgICAgICAgICAgICAgICAgfQogCi0gICAgcHJpbnQoaHRtbC50ZW1wbGF0ZS5yZW5kZXIobWV0YWRhdGE9bWV0YWRhdGEsIHRlc3RfZGF0YT10ZXN0cywgY2hhcnRfb3B0cz1jaGFydF9vcHRzKSkKKyAgICBwcmludChodG1sLnRlbXBsYXRlLnJlbmRlcih0aXRsZT0iQnVpbGQgUGVyZiBUZXN0IFJlcG9ydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE9bWV0YWRhdGEsIHRlc3RfZGF0YT10ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFydF9vcHRzPWNoYXJ0X29wdHMpKQorCisKK2RlZiBnZXRfYnVpbGRzdGF0cyhyZXBvLCBub3Rlc19yZWYsIHJldnMsIG91dGRpcj1Ob25lKToKKyAgICAiIiJHZXQgdGhlIGJ1aWxkc3RhdHMgZnJvbSBnaXQgbm90ZXMiIiIKKyAgICBmdWxsX3JlZiA9ICdyZWZzL25vdGVzLycgKyBub3Rlc19yZWYKKyAgICBpZiBub3QgcmVwby5yZXZfcGFyc2UoZnVsbF9yZWYpOgorICAgICAgICBsb2cuZXJyb3IoIk5vIGJ1aWxkc3RhdHMgZm91bmQsIHBsZWFzZSB0cnkgcnVubmluZyAiCisgICAgICAgICAgICAgICAgICAiJ2dpdCBmZXRjaCBvcmlnaW4gJXM6JXMnIHRvIGZldGNoIHRoZW0gZnJvbSB0aGUgcmVtb3RlIiwKKyAgICAgICAgICAgICAgICAgIGZ1bGxfcmVmLCBmdWxsX3JlZikKKyAgICAgICAgcmV0dXJuCisKKyAgICBtaXNzaW5nID0gRmFsc2UKKyAgICBidWlsZHN0YXRzID0ge30KKyAgICBsb2cuaW5mbygiUGFyc2luZyBidWlsZHN0YXRzIGZyb20gJ3JlZnMvbm90ZXMvJXMnIiwgbm90ZXNfcmVmKQorICAgIGZvciByZXYgaW4gcmV2czoKKyAgICAgICAgYnVpbGRzdGF0c1tyZXYuY29tbWl0X251bWJlcl0gPSB7fQorICAgICAgICBsb2cuZGVidWcoJ0R1bXBpbmcgYnVpbGRzdGF0cyBmb3IgJXMgKCVzKScsIHJldi5jb21taXRfbnVtYmVyLAorICAgICAgICAgICAgICAgICAgcmV2LmNvbW1pdCkKKyAgICAgICAgZm9yIHRhZyBpbiByZXYudGFnczoKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygnICAgICVzJywgdGFnKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGJzX2FsbCA9IGpzb24ubG9hZHMocmVwby5ydW5fY21kKFsnbm90ZXMnLCAnLS1yZWYnLCBub3Rlc19yZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaG93JywgdGFnICsgJ14wJ10pKQorICAgICAgICAgICAgZXhjZXB0IEdpdEVycm9yOgorICAgICAgICAgICAgICAgIGxvZy53YXJuaW5nKCJCdWlsZHN0YXRzIG5vdCBmb3VuZCBmb3IgJXMiLCB0YWcpCisgICAgICAgICAgICAgICAgYnNfYWxsID0ge30KKyAgICAgICAgICAgICAgICBtaXNzaW5nID0gVHJ1ZQorCisgICAgICAgICAgICBmb3IgbWVhc3VyZW1lbnQsIGJzIGluIGJzX2FsbC5pdGVtcygpOgorICAgICAgICAgICAgICAgICMgV3JpdGUgb3V0IG9udG8gZGlzaworICAgICAgICAgICAgICAgIGlmIG91dGRpcjoKKyAgICAgICAgICAgICAgICAgICAgdGFnX2Jhc2UsIHJ1bl9pZCA9IHRhZy5yc3BsaXQoJy8nLCAxKQorICAgICAgICAgICAgICAgICAgICB0YWdfYmFzZSA9IHRhZ19iYXNlLnJlcGxhY2UoJy8nLCAnXycpCisgICAgICAgICAgICAgICAgICAgIGJzX2RpciA9IG9zLnBhdGguam9pbihvdXRkaXIsIG1lYXN1cmVtZW50LCB0YWdfYmFzZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGJzX2Rpcik6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhic19kaXIpCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oYnNfZGlyLCBydW5faWQgKyAnLmpzb24nKSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAgICAganNvbi5kdW1wKGJzLCBmLCBpbmRlbnQ9MikKKworICAgICAgICAgICAgICAgICMgUmVhZCBidWlsZHN0YXRzIGludG8gYSBkaWN0CisgICAgICAgICAgICAgICAgX2JzID0gQnVpbGRTdGF0cy5mcm9tX2pzb24oYnMpCisgICAgICAgICAgICAgICAgaWYgbWVhc3VyZW1lbnQgbm90IGluIGJ1aWxkc3RhdHNbcmV2LmNvbW1pdF9udW1iZXJdOgorICAgICAgICAgICAgICAgICAgICBidWlsZHN0YXRzW3Jldi5jb21taXRfbnVtYmVyXVttZWFzdXJlbWVudF0gPSBfYnMKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBidWlsZHN0YXRzW3Jldi5jb21taXRfbnVtYmVyXVttZWFzdXJlbWVudF0uYWdncmVnYXRlKF9icykKKworICAgIGlmIG1pc3Npbmc6CisgICAgICAgIGxvZy5pbmZvKCJCdWlsZHN0YXRzIHdlcmUgbWlzc2luZyBmb3Igc29tZSB0ZXN0IHJ1bnMsIHBsZWFzZSAiCisgICAgICAgICAgICAgICAgICJydW4gJ2dpdCBmZXRjaCBvcmlnaW4gJXM6JXMnIGFuZCB0cnkgYWdhaW4iLAorICAgICAgICAgICAgICAgICBmdWxsX3JlZiwgZnVsbF9yZWYpCisKKyAgICByZXR1cm4gYnVpbGRzdGF0cwogCiAKIGRlZiBhdXRvX2FyZ3MocmVwbywgYXJncyk6CkBAIC00MTEsNyArNTMwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlZlcmJvc2UgbG9nZ2luZyIpCiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1yZXBvJywgJy1yJywgcmVxdWlyZWQ9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlJlc3VsdHMgcmVwb3NpdG9yeSAobG9jYWwgZ2l0IGNsb25lKSIpCi0gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1saXN0JywgJy1sJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWxpc3QnLCAnLWwnLCBhY3Rpb249J2NvdW50JywKICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Ikxpc3QgYXZhaWxhYmxlIHRlc3QgcnVucyIpCiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1odG1sJywgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkdlbmVyYXRlIHJlcG9ydCBpbiBodG1sIGZvcm1hdCIpCkBAIC00MzQsNiArNTUzLDggQEAKICAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tY29tbWl0LW51bWJlcjInLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJSZXZpc2lvbiBudW1iZXIgdG8gY29tcGFyZSB3aXRoLCByZWR1bmRhbnQgaWYgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWNvbW1pdDIgaXMgc3BlY2lmaWVkIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWR1bXAtYnVpbGRzdGF0cycsIG5hcmdzPSc/JywgY29uc3Q9Jy4nLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRHVtcCBidWlsZHN0YXRzIG9mIHRoZSB0ZXN0cyIpCiAKICAgICByZXR1cm4gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndikKIApAQCAtNDQ3LDcgKzU2OCw3IEBACiAgICAgcmVwbyA9IEdpdFJlcG8oYXJncy5yZXBvKQogCiAgICAgaWYgYXJncy5saXN0OgotICAgICAgICBsaXN0X3Rlc3RfcmV2cyhyZXBvLCBhcmdzLnRhZ19uYW1lKQorICAgICAgICBsaXN0X3Rlc3RfcmV2cyhyZXBvLCBhcmdzLnRhZ19uYW1lLCBhcmdzLmxpc3QsIGhvc3RuYW1lPWFyZ3MuaG9zdG5hbWUpCiAgICAgICAgIHJldHVybiAwCiAKICAgICAjIERldGVybWluZSBob3N0bmFtZSB3aGljaCB0byB1c2UKQEAgLTUwMSw3ICs2MjIsNyBAQAogICAgIHhtbCA9IGlzX3htbF9mb3JtYXQocmVwbywgcmV2c1tpbmRleF9yXS50YWdzWy0xXSkKIAogICAgIGlmIGFyZ3MuaHRtbDoKLSAgICAgICAgaW5kZXhfMCA9IG1heCgwLCBpbmRleF9yIC0gYXJncy5oaXN0b3J5X2xlbmd0aCkKKyAgICAgICAgaW5kZXhfMCA9IG1heCgwLCBtaW4oaW5kZXhfbCwgaW5kZXhfciAtIGFyZ3MuaGlzdG9yeV9sZW5ndGgpKQogICAgICAgICByZXZfcmFuZ2UgPSByYW5nZShpbmRleF8wLCBpbmRleF9yICsgMSkKICAgICBlbHNlOgogICAgICAgICAjIFdlIGRvIG5vdCBuZWVkIHJhbmdlIG9mIGNvbW1pdHMgZm9yIHRleHQgcmVwb3J0IChubyBncmFwaHMpCkBAIC01MTUsMTggKzYzNiwyNyBAQAogCiAgICAgZGF0YSA9IFtdCiAgICAgZm9yIHJhd19tLCByYXdfZCBpbiByYXdfZGF0YToKLSAgICAgICAgZGF0YS5hcHBlbmQoKGFnZ3JlZ2F0ZV9tZXRhZGF0YShyYXdfbSksIGFnZ3JlZ2F0ZV9kYXRhKHJhd19kKSkpCisgICAgICAgIGRhdGEuYXBwZW5kKEFnZ3JlZ2F0ZVRlc3REYXRhKGFnZ3JlZ2F0ZV9tZXRhZGF0YShyYXdfbSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZV9kYXRhKHJhd19kKSkpCiAKICAgICAjIFJlLW1hcCBsaXN0IGluZGV4ZXMgdG8gdGhlIG5ldyB0YWJsZSBzdGFydGluZyBmcm9tIGluZGV4IDAKICAgICBpbmRleF9yID0gaW5kZXhfciAtIGluZGV4XzAKICAgICBpbmRleF9sID0gaW5kZXhfbCAtIGluZGV4XzAKIAorICAgICMgUmVhZCBidWlsZHN0YXRzIG9ubHkgd2hlbiBuZWVkZWQKKyAgICBidWlsZHN0YXRzID0gTm9uZQorICAgIGlmIGFyZ3MuZHVtcF9idWlsZHN0YXRzIG9yIGFyZ3MuaHRtbDoKKyAgICAgICAgb3V0ZGlyID0gJ29lLWJ1aWxkLXBlcmYtYnVpbGRzdGF0cycgaWYgYXJncy5kdW1wX2J1aWxkc3RhdHMgZWxzZSBOb25lCisgICAgICAgIG5vdGVzX3JlZiA9ICdidWlsZHN0YXRzL3t9L3t9L3t9Jy5mb3JtYXQoYXJncy5ob3N0bmFtZSwgYXJncy5icmFuY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5tYWNoaW5lKQorICAgICAgICBidWlsZHN0YXRzID0gZ2V0X2J1aWxkc3RhdHMocmVwbywgbm90ZXNfcmVmLCBbcmV2X2wsIHJldl9yXSwgb3V0ZGlyKQorCiAgICAgIyBQcmludCByZXBvcnQKICAgICBpZiBub3QgYXJncy5odG1sOgotICAgICAgICBwcmludF9kaWZmX3JlcG9ydChkYXRhW2luZGV4X2xdWzBdLCBkYXRhW2luZGV4X2xdWzFdLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2luZGV4X3JdWzBdLCBkYXRhW2luZGV4X3JdWzFdKQorICAgICAgICBwcmludF9kaWZmX3JlcG9ydChkYXRhW2luZGV4X2xdLm1ldGFkYXRhLCBkYXRhW2luZGV4X2xdLnJlc3VsdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaW5kZXhfcl0ubWV0YWRhdGEsIGRhdGFbaW5kZXhfcl0ucmVzdWx0cykKICAgICBlbHNlOgotICAgICAgICBwcmludF9odG1sX3JlcG9ydChkYXRhLCBpbmRleF9sKQorICAgICAgICBwcmludF9odG1sX3JlcG9ydChkYXRhLCBpbmRleF9sLCBidWlsZHN0YXRzKQogCiAgICAgcmV0dXJuIDAKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtYnVpbGRlbnYtaW50ZXJuYWwgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1idWlsZGVudi1pbnRlcm5hbAppbmRleCBjODkwNTUyLi43N2Y5OGEzIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1idWlsZGVudi1pbnRlcm5hbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1idWlsZGVudi1pbnRlcm5hbApAQCAtMjQsOCArMjQsNyBAQAogICAgIGVjaG8gJ1VzYWdlOiAuICRPRVJPT1Qvc2NyaXB0cy9vZS1idWlsZGVudi1pbnRlcm5hbCAmJicKICAgICBlY2hvICcnCiAgICAgZWNobyAnT3BlbkVtYmVkZGVkIG9lLWJ1aWxkZW52LWludGVybmFsIC0gYW4gaW50ZXJuYWwgc2NyaXB0IHRoYXQgaXMnCi0gICAgZWNobyAndXNlZCBpbiBvZS1pbml0LWJ1aWxkLWVudiBhbmQgb2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzIHRvJwotICAgIGVjaG8gJ2luaXRpYWxpemUgb2UgYnVpbGQgZW52aXJvbm1lbnQnCisgICAgZWNobyAndXNlZCBpbiBvZS1pbml0LWJ1aWxkLWVudiB0byBpbml0aWFsaXplIG9lIGJ1aWxkIGVudmlyb25tZW50JwogICAgIGVjaG8gJycKICAgICBleGl0IDIKIGZpCkBAIC0xMDYsNiArMTA1LDkgQEAKIAogQklUQkFLRURJUj0kKHJlYWRsaW5rIC1mICIkQklUQkFLRURJUiIpCiBCVUlMRERJUj0kKHJlYWRsaW5rIC1mICIkQlVJTERESVIiKQorQkJQQVRIPSRCVUlMRERJUgorCitleHBvcnQgQkJQQVRICiAKIGlmIFsgISAtZCAiJEJJVEJBS0VESVIiIF07IHRoZW4KICAgICBlY2hvID4mMiAiRXJyb3I6IFRoZSBiaXRiYWtlIGRpcmVjdG9yeSAoJEJJVEJBS0VESVIpIGRvZXMgbm90IGV4aXN0ISAgUGxlYXNlIGVuc3VyZSBhIGNvcHkgb2YgYml0YmFrZSBleGlzdHMgYXQgdGhpcyBsb2NhdGlvbiBvciBzcGVjaWZ5IGFuIGFsdGVybmF0aXZlIHBhdGggb24gdGhlIGNvbW1hbmQgbGluZSIKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLWZpbmQtbmF0aXZlLXN5c3Jvb3QgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1maW5kLW5hdGl2ZS1zeXNyb290CmluZGV4IDIzNWE2N2MuLjM1MGVhMjEgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLWZpbmQtbmF0aXZlLXN5c3Jvb3QKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtZmluZC1uYXRpdmUtc3lzcm9vdApAQCAtNTAsNyArNTAsNyBAQAogc2V0X29lX25hdGl2ZV9zeXNyb290KCl7CiAgICAgZWNobyAiUnVubmluZyBiaXRiYWtlIC1lICQxIgogICAgIEJJVEJBS0VfRT0iYGJpdGJha2UgLWUgJDFgIgotICAgIE9FQ09SRV9OQVRJVkVfU1lTUk9PVD1gZWNobyAiJEJJVEJBS0VfRSIgfCBncmVwIF5TVEFHSU5HX0RJUl9OQVRJVkUgfCBjdXQgLWQgJyInIC1mMmAKKyAgICBPRUNPUkVfTkFUSVZFX1NZU1JPT1Q9YGVjaG8gIiRCSVRCQUtFX0UiIHwgZ3JlcCBeU1RBR0lOR19ESVJfTkFUSVZFPSB8IGN1dCAtZCAnIicgLWYyYAogCiAgICAgaWYgWyAieCRPRUNPUkVfTkFUSVZFX1NZU1JPT1QiID0gIngiIF07IHRoZW4KICAgICAgICAgIyBUaGlzIGluZGljYXRlcyB0aGF0IHRoZXJlIHdhcyBhbiBlcnJvciBydW5uaW5nIGJpdGJha2UgLWUgdGhhdApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtcGtnZGF0YS11dGlsIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtcGtnZGF0YS11dGlsCmluZGV4IDY3N2VmZmUuLmM2ZmJhNTYgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLXBrZ2RhdGEtdXRpbAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1wa2dkYXRhLXV0aWwKQEAgLTQwLDkgKzQwLDggQEAKICAgICBpbXBvcnQgYmIudGluZm9pbAogICAgIGltcG9ydCBsb2dnaW5nCiAgICAgdGluZm9pbCA9IGJiLnRpbmZvaWwuVGluZm9pbCgpCi0gICAgdGluZm9pbC5wcmVwYXJlKFRydWUpCi0KICAgICB0aW5mb2lsLmxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLldBUk5JTkcpCisgICAgdGluZm9pbC5wcmVwYXJlKFRydWUpCiAgICAgcmV0dXJuIHRpbmZvaWwKIAogCkBAIC0xOTgsNiArMTk3LDEwIEBACiAgICAgICAgICAgICAgICAgIyBQS0dTSVpFIGlzIG5vdyBpbiBieXRlcywgYnV0IHdlIHdlIHdhbnQgaXQgaW4gS0IKICAgICAgICAgICAgICAgICBwa2dzaXplID0gKGludCh2YWx1ZSkgKyAxMDI0IC8vIDIpIC8vIDEwMjQKICAgICAgICAgICAgICAgICB2YWx1ZSA9ICIlZCIgJSBwa2dzaXplCisgICAgICAgICAgICBpZiBhcmdzLnVuZXNjYXBlOgorICAgICAgICAgICAgICAgIGltcG9ydCBjb2RlY3MKKyAgICAgICAgICAgICAgICAjIGVzY2FwZV9kZWNvZGUoKSB1bmVzY2FwZXMgYmFja3NsYXNoIGVuY29kaW5ncyBpbiBieXRlIHN0cmVhbXMKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvZGVjcy5lc2NhcGVfZGVjb2RlKGJ5dGVzKHZhbHVlLCAidXRmLTgiKSlbMF0uZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgICAgICBpZiBhcmdzLnByZWZpeF9uYW1lOgogICAgICAgICAgICAgICAgIHByaW50KCclcyAlcycgJSAocGtnX25hbWUsIHZhbHVlKSkKICAgICAgICAgICAgIGVsc2U6CkBAIC01NTMsNiArNTU2LDcgQEAKICAgICBwYXJzZXJfcmVhZF92YWx1ZS5hZGRfYXJndW1lbnQoJ3BrZycsIG5hcmdzPScqJywgaGVscD0nUnVudGltZSBwYWNrYWdlIG5hbWUgdG8gbG9vayB1cCcpCiAgICAgcGFyc2VyX3JlYWRfdmFsdWUuYWRkX2FyZ3VtZW50KCctZicsICctLWZpbGUnLCBoZWxwPSdSZWFkIHBhY2thZ2UgbmFtZXMgZnJvbSB0aGUgc3BlY2lmaWVkIGZpbGUgKG9uZSBwZXIgbGluZSwgZmlyc3QgZmllbGQgb25seSknKQogICAgIHBhcnNlcl9yZWFkX3ZhbHVlLmFkZF9hcmd1bWVudCgnLW4nLCAnLS1wcmVmaXgtbmFtZScsIGhlbHA9J1ByZWZpeCBvdXRwdXQgd2l0aCBwYWNrYWdlIG5hbWUnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl9yZWFkX3ZhbHVlLmFkZF9hcmd1bWVudCgnLXUnLCAnLS11bmVzY2FwZScsIGhlbHA9J0V4cGFuZCBlc2NhcGVzIHN1Y2ggYXMgXFxuJywgYWN0aW9uPSdzdG9yZV90cnVlJykKICAgICBwYXJzZXJfcmVhZF92YWx1ZS5zZXRfZGVmYXVsdHMoZnVuYz1yZWFkX3ZhbHVlKQogCiAgICAgcGFyc2VyX2dsb2IgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2dsb2InLApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtcHVibGlzaC1zZGsgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1wdWJsaXNoLXNkawppbmRleCA5Zjc5NjNjLi5lZTMzYWNmIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1wdWJsaXNoLXNkaworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1wdWJsaXNoLXNkawpAQCAtMTE0LDkgKzExNCw5IEBACiAKICAgICAjIFNldHRpbmcgdXAgdGhlIGdpdCByZXBvCiAgICAgaWYgbm90IGlzX3JlbW90ZToKLSAgICAgICAgY21kID0gJ3NldCAtZTsgbWtkaXIgLXAgJXMvbGF5ZXJzOyBjZCAlcy9sYXllcnM7IGlmIFsgISAtZSAuZ2l0IF07IHRoZW4gZ2l0IGluaXQgLjsgbXYgLmdpdC9ob29rcy9wb3N0LXVwZGF0ZS5zYW1wbGUgLmdpdC9ob29rcy9wb3N0LXVwZGF0ZTsgZWNobyAiKi5weWNcbioucHlvXG5weXNodGFibGVzLnB5IiA+IC5naXRpZ25vcmU7IGZpOyBnaXQgYWRkIC1BIC47IGdpdCBjb25maWcgdXNlci5lbWFpbCAib2VAb2Uub2UiICYmIGdpdCBjb25maWcgdXNlci5uYW1lICJPRSIgJiYgZ2l0IGNvbW1pdCAtcSAtbSAiaW5pdCByZXBvIiB8fCB0cnVlOyBnaXQgdXBkYXRlLXNlcnZlci1pbmZvJyAlIChkZXN0aW5hdGlvbiwgZGVzdGluYXRpb24pCisgICAgICAgIGNtZCA9ICdzZXQgLWU7IG1rZGlyIC1wICVzL2xheWVyczsgY2QgJXMvbGF5ZXJzOyBpZiBbICEgLWUgLmdpdCBdOyB0aGVuIGdpdCBpbml0IC47IGNwIC5naXQvaG9va3MvcG9zdC11cGRhdGUuc2FtcGxlIC5naXQvaG9va3MvcG9zdC1jb21taXQ7IGVjaG8gIioucHljXG4qLnB5b1xucHlzaHRhYmxlcy5weSIgPiAuZ2l0aWdub3JlOyBmaTsgZ2l0IGFkZCAtQSAuOyBnaXQgY29uZmlnIHVzZXIuZW1haWwgIm9lQG9lLm9lIiAmJiBnaXQgY29uZmlnIHVzZXIubmFtZSAiT0UiICYmIGdpdCBjb21taXQgLXEgLW0gImluaXQgcmVwbyIgfHwgdHJ1ZScgJSAoZGVzdGluYXRpb24sIGRlc3RpbmF0aW9uKQogICAgIGVsc2U6Ci0gICAgICAgIGNtZCA9ICJzc2ggJXMgJ3NldCAtZTsgbWtkaXIgLXAgJXMvbGF5ZXJzOyBjZCAlcy9sYXllcnM7IGlmIFsgISAtZSAuZ2l0IF07IHRoZW4gZ2l0IGluaXQgLjsgbXYgLmdpdC9ob29rcy9wb3N0LXVwZGF0ZS5zYW1wbGUgLmdpdC9ob29rcy9wb3N0LXVwZGF0ZTsgZWNobyAnKi5weWNcbioucHlvXG5weXNodGFibGVzLnB5JyA+IC5naXRpZ25vcmU7IGZpOyBnaXQgYWRkIC1BIC47IGdpdCBjb25maWcgdXNlci5lbWFpbCAnb2VAb2Uub2UnICYmIGdpdCBjb25maWcgdXNlci5uYW1lICdPRScgJiYgZ2l0IGNvbW1pdCAtcSAtbSBcImluaXQgcmVwb1wiIHx8IHRydWU7IGdpdCB1cGRhdGUtc2VydmVyLWluZm8nIiAlIChob3N0LCBkZXN0ZGlyLCBkZXN0ZGlyKQorICAgICAgICBjbWQgPSAic3NoICVzICdzZXQgLWU7IG1rZGlyIC1wICVzL2xheWVyczsgY2QgJXMvbGF5ZXJzOyBpZiBbICEgLWUgLmdpdCBdOyB0aGVuIGdpdCBpbml0IC47IGNwIC5naXQvaG9va3MvcG9zdC11cGRhdGUuc2FtcGxlIC5naXQvaG9va3MvcG9zdC1jb21taXQ7IGVjaG8gJyoucHljXG4qLnB5b1xucHlzaHRhYmxlcy5weScgPiAuZ2l0aWdub3JlOyBmaTsgZ2l0IGFkZCAtQSAuOyBnaXQgY29uZmlnIHVzZXIuZW1haWwgJ29lQG9lLm9lJyAmJiBnaXQgY29uZmlnIHVzZXIubmFtZSAnT0UnICYmIGdpdCBjb21taXQgLXEgLW0gXCJpbml0IHJlcG9cIiB8fCB0cnVlJyIgJSAoaG9zdCwgZGVzdGRpciwgZGVzdGRpcikKICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoY21kLCBzaGVsbD1UcnVlKQogICAgIGlmIHJldCA9PSAwOgogICAgICAgICBsb2dnZXIuaW5mbygnU0RLIHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHknKQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2Utc2VsZnRlc3QgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1zZWxmdGVzdAppbmRleCA1MjM2NmIxLi4xYmY4NjBhIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1zZWxmdGVzdAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1zZWxmdGVzdApAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAotIyBDb3B5cmlnaHQgKGMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMgQ29weXJpZ2h0IChjKSAyMDEzLTIwMTcgSW50ZWwgQ29ycG9yYXRpb24KICMKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTI1LDc5MCArMjUsNTEgQEAKICMgRS5nOiAib2Utc2VsZnRlc3QgLXIgYmJsYXllcnMuQml0YmFrZUxheWVycyIgd2lsbCBydW4ganVzdCB0aGUgQml0YmFrZUxheWVycyBjbGFzcyBmcm9tIG1ldGEvbGliL29lcWEvc2VsZnRlc3QvYmJsYXllcnMucHkKIAogCisKIGltcG9ydCBvcwogaW1wb3J0IHN5cwotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgbG9nZ2luZwogaW1wb3J0IGFyZ3BhcnNlCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHRpbWUgYXMgdAotaW1wb3J0IHJlCi1pbXBvcnQgZm5tYXRjaAotaW1wb3J0IGNvbGxlY3Rpb25zCi1pbXBvcnQgaW1wCitpbXBvcnQgbG9nZ2luZwogCi1zeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKSArICcvbGliJykKLWltcG9ydCBzY3JpcHRwYXRoCi1zY3JpcHRwYXRoLmFkZF9iaXRiYWtlX2xpYl9wYXRoKCkKLXNjcmlwdHBhdGguYWRkX29lX2xpYl9wYXRoKCkKK3NjcmlwdHNfcGF0aCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSkKK2xpYl9wYXRoID0gc2NyaXB0c19wYXRoICsgJy9saWInCitzeXMucGF0aCA9IHN5cy5wYXRoICsgW2xpYl9wYXRoXQogaW1wb3J0IGFyZ3BhcnNlX29lCitpbXBvcnQgc2NyaXB0dXRpbHMKK2ltcG9ydCBzY3JpcHRwYXRoCitzY3JpcHRwYXRoLmFkZF9vZV9saWJfcGF0aCgpCitzY3JpcHRwYXRoLmFkZF9iaXRiYWtlX2xpYl9wYXRoKCkKIAotaW1wb3J0IG9lcWEuc2VsZnRlc3QKLWltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKLWZyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBnZXRfYmJfdmFyLCBnZXRfdGVzdF9sYXllcgotZnJvbSBvZXFhLnV0aWxzLm1ldGFkYXRhIGltcG9ydCBtZXRhZGF0YV9mcm9tX2JiLCB3cml0ZV9tZXRhZGF0YV9maWxlCi1mcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdCwgZ2V0X2F2YWlsYWJsZV9tYWNoaW5lcworZnJvbSBvZXFhLnV0aWxzIGltcG9ydCBsb2FkX3Rlc3RfY29tcG9uZW50cworZnJvbSBvZXFhLmNvcmUuZXhjZXB0aW9uIGltcG9ydCBPRVFBUHJlUnVuCiAKLXRyeToKLSAgICBpbXBvcnQgeG1scnVubmVyCi0gICAgZnJvbSB4bWxydW5uZXIucmVzdWx0IGltcG9ydCBfWE1MVGVzdFJlc3VsdCBhcyBUZXN0UmVzdWx0Ci0gICAgZnJvbSB4bWxydW5uZXIgaW1wb3J0IFhNTFRlc3RSdW5uZXIgYXMgX1Rlc3RSdW5uZXIKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAjIHVzZSB0aGUgYmFzZSBydW5uZXIgaW5zdGVhZAotICAgIGZyb20gdW5pdHRlc3QgaW1wb3J0IFRleHRUZXN0UmVzdWx0IGFzIFRlc3RSZXN1bHQKLSAgICBmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXh0VGVzdFJ1bm5lciBhcyBfVGVzdFJ1bm5lcgotCi1sb2dfcHJlZml4ID0gIm9lLXNlbGZ0ZXN0LSIgKyB0LnN0cmZ0aW1lKCIlWSVtJWQtJUglTSVTIikKLQotZGVmIGxvZ2dlcl9jcmVhdGUoKToKLSAgICBsb2dfZmlsZSA9IGxvZ19wcmVmaXggKyAiLmxvZyIKLSAgICBpZiBvcy5wYXRoLmxleGlzdHMoIm9lLXNlbGZ0ZXN0LmxvZyIpOgotICAgICAgICBvcy5yZW1vdmUoIm9lLXNlbGZ0ZXN0LmxvZyIpCi0gICAgb3Muc3ltbGluayhsb2dfZmlsZSwgIm9lLXNlbGZ0ZXN0LmxvZyIpCi0KLSAgICBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcigic2VsZnRlc3QiKQotICAgIGxvZy5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQotCi0gICAgZmggPSBsb2dnaW5nLkZpbGVIYW5kbGVyKGZpbGVuYW1lPWxvZ19maWxlLCBtb2RlPSd3JykKLSAgICBmaC5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQotCi0gICAgY2ggPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc3lzLnN0ZG91dCkKLSAgICBjaC5zZXRMZXZlbChsb2dnaW5nLklORk8pCi0KLSAgICBmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcignJShhc2N0aW1lKXMgLSAlKG5hbWUpcyAtICUobGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2UpcycpCi0gICAgZmguc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKLSAgICBjaC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQotCi0gICAgbG9nLmFkZEhhbmRsZXIoZmgpCi0gICAgbG9nLmFkZEhhbmRsZXIoY2gpCi0KLSAgICByZXR1cm4gbG9nCi0KLWxvZyA9IGxvZ2dlcl9jcmVhdGUoKQotCi1kZWYgZ2V0X2FyZ3NfcGFyc2VyKCk6Ci0gICAgZGVzY3JpcHRpb24gPSAiU2NyaXB0IHRoYXQgcnVucyB1bml0IHRlc3RzIGFnYWluc3QgYml0YmFrZSBhbmQgb3RoZXIgWW9jdG8gcmVsYXRlZCB0b29scy4gVGhlIGdvYWwgaXMgdG8gdmFsaWRhdGUgdG9vbHMgZnVuY3Rpb25hbGl0eSBhbmQgbWV0YWRhdGEgaW50ZWdyaXR5LiBSZWZlciB0byBodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL09lLXNlbGZ0ZXN0IGZvciBtb3JlIGluZm9ybWF0aW9uLiIKLSAgICBwYXJzZXIgPSBhcmdwYXJzZV9vZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj1kZXNjcmlwdGlvbikKLSAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKHJlcXVpcmVkPVRydWUpCi0gICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctcicsICctLXJ1bi10ZXN0cycsIHJlcXVpcmVkPUZhbHNlLCBhY3Rpb249J3N0b3JlJywgbmFyZ3M9JyonLCBkZXN0PSJydW5fdGVzdHMiLCBkZWZhdWx0PU5vbmUsIGhlbHA9J1NlbGVjdCB3aGF0IHRlc3RzIHRvIHJ1biAobW9kdWxlcywgY2xhc3NlcyBvciB0ZXN0IG1ldGhvZHMpLiBGb3JtYXQgc2hvdWxkIGJlOiA8bW9kdWxlPi48Y2xhc3M+Ljx0ZXN0X21ldGhvZD4nKQotICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWEnLCAnLS1ydW4tYWxsLXRlc3RzJywgcmVxdWlyZWQ9RmFsc2UsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InJ1bl9hbGxfdGVzdHMiLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSdSdW4gYWxsICh1bmhpZGRlbikgdGVzdHMnKQotICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLW0nLCAnLS1saXN0LW1vZHVsZXMnLCByZXF1aXJlZD1GYWxzZSwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0ibGlzdF9tb2R1bGVzIiwgZGVmYXVsdD1GYWxzZSwgaGVscD0nTGlzdCBhbGwgYXZhaWxhYmxlIHRlc3QgbW9kdWxlcy4nKQotICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1saXN0LWNsYXNzZXMnLCByZXF1aXJlZD1GYWxzZSwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0ibGlzdF9hbGxjbGFzc2VzIiwgZGVmYXVsdD1GYWxzZSwgaGVscD0nTGlzdCBhbGwgYXZhaWxhYmxlIHRlc3QgY2xhc3Nlcy4nKQotICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tY292ZXJhZ2UnLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJSdW4gY29kZSBjb3ZlcmFnZSB3aGVuIHRlc3RpbmciKQotICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tY292ZXJhZ2Utc291cmNlJywgZGVzdD0iY292ZXJhZ2Vfc291cmNlIiwgbmFyZ3M9IisiLCBoZWxwPSJTcGVjaWZpeSB0aGUgZGlyZWN0b3JpZXMgdG8gdGFrZSBjb3ZlcmFnZSBmcm9tIikKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNvdmVyYWdlLWluY2x1ZGUnLCBkZXN0PSJjb3ZlcmFnZV9pbmNsdWRlIiwgbmFyZ3M9IisiLCBoZWxwPSJTcGVjaWZ5IGV4dHJhIHBhdHRlcm5zIHRvIGluY2x1ZGUgaW50byB0aGUgY292ZXJhZ2UgbWVhc3VyZW1lbnQiKQotICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tY292ZXJhZ2Utb21pdCcsIGRlc3Q9ImNvdmVyYWdlX29taXQiLCBuYXJncz0iKyIsIGhlbHA9IlNwZWNpZnkgd2l0aCBleHRyYSBwYXR0ZXJucyB0byBleGNsdWRlIGZyb20gdGhlIGNvdmVyYWdlIG1lYXN1cmVtZW50IikKLSAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tcnVuLXRlc3RzLWJ5JywgcmVxdWlyZWQ9RmFsc2UsIGRlc3Q9J3J1bl90ZXN0c19ieScsIGRlZmF1bHQ9RmFsc2UsIG5hcmdzPScqJywKLSAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVuLXRlc3RzLWJ5IDxuYW1lfGNsYXNzfG1vZHVsZXxpZHx0YWc+IDxsaXN0IG9mIHRlc3RzfGNsYXNzZXN8bW9kdWxlc3xpZHN8dGFncz4nKQotICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1saXN0LXRlc3RzLWJ5JywgcmVxdWlyZWQ9RmFsc2UsIGRlc3Q9J2xpc3RfdGVzdHNfYnknLCBkZWZhdWx0PUZhbHNlLCBuYXJncz0nKicsCi0gICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2xpc3QtdGVzdHMtYnkgPG5hbWV8Y2xhc3N8bW9kdWxlfGlkfHRhZz4gPGxpc3Qgb2YgdGVzdHN8Y2xhc3Nlc3xtb2R1bGVzfGlkc3x0YWdzPicpCi0gICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctbCcsICctLWxpc3QtdGVzdHMnLCByZXF1aXJlZD1GYWxzZSwgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9Imxpc3RfdGVzdHMiLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdMaXN0IGFsbCBhdmFpbGFibGUgdGVzdHMuJykKLSAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tbGlzdC10YWdzJywgcmVxdWlyZWQ9RmFsc2UsIGRlc3Q9J2xpc3RfdGFncycsIGRlZmF1bHQ9RmFsc2UsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0xpc3QgYWxsIHRhZ3MgdGhhdCBoYXZlIGJlZW4gc2V0IHRvIHRlc3QgY2FzZXMuJykKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW1hY2hpbmUnLCByZXF1aXJlZD1GYWxzZSwgZGVzdD0nbWFjaGluZScsIGNob2ljZXM9WydyYW5kb20nLCAnYWxsJ10sIGRlZmF1bHQ9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1J1biB0ZXN0cyBvbiBkaWZmZXJlbnQgbWFjaGluZXMgKHJhbmRvbS9hbGwpLicpCi0gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1yZXBvc2l0b3J5JywgcmVxdWlyZWQ9RmFsc2UsIGRlc3Q9J3JlcG9zaXRvcnknLCBkZWZhdWx0PScnLCBhY3Rpb249J3N0b3JlJywKLSAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1N1Ym1pdCB0ZXN0IHJlc3VsdHMgdG8gYSByZXBvc2l0b3J5JykKLSAgICByZXR1cm4gcGFyc2VyCi0KLWJ1aWxkZGlyID0gTm9uZQotCi0KLWRlZiBwcmVmbGlnaHRfY2hlY2soKToKLQotICAgIGdsb2JhbCBidWlsZGRpcgotCi0gICAgbG9nLmluZm8oIkNoZWNraW5nIHRoYXQgZXZlcnl0aGluZyBpcyBpbiBvcmRlciBiZWZvcmUgcnVubmluZyB0aGUgdGVzdHMiKQotCi0gICAgaWYgbm90IG9zLmVudmlyb24uZ2V0KCJCVUlMRERJUiIpOgotICAgICAgICBsb2cuZXJyb3IoIkJVSUxERElSIGlzbid0IHNldC4gRGlkIHlvdSBmb3JnZXQgdG8gc291cmNlIHlvdXIgYnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0PyIpCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgYnVpbGRkaXIgPSBvcy5lbnZpcm9uLmdldCgiQlVJTERESVIiKQotICAgIGlmIG9zLmdldGN3ZCgpICE9IGJ1aWxkZGlyOgotICAgICAgICBsb2cuaW5mbygiQ2hhbmdpbmcgY3dkIHRvICVzIiAlIGJ1aWxkZGlyKQotICAgICAgICBvcy5jaGRpcihidWlsZGRpcikKLQotICAgIGlmIG5vdCAibWV0YS1zZWxmdGVzdCIgaW4gZ2V0X2JiX3ZhcigiQkJMQVlFUlMiKToKLSAgICAgICAgbG9nLndhcm4oIm1ldGEtc2VsZnRlc3QgbGF5ZXIgbm90IGZvdW5kIGluIEJCTEFZRVJTLCBhZGRpbmcgaXQiKQotICAgICAgICBtZXRhX3NlbGZ0ZXN0ZGlyID0gb3MucGF0aC5qb2luKAotICAgICAgICAgICAgICAgIGdldF9iYl92YXIoIkJCTEFZRVJTX0ZFVENIX0RJUiIpLAotICAgICAgICAgICAgICAgICdtZXRhLXNlbGZ0ZXN0JykKLSAgICAgICAgaWYgb3MucGF0aC5pc2RpcihtZXRhX3NlbGZ0ZXN0ZGlyKToKLSAgICAgICAgICAgIHJ1bkNtZCgiYml0YmFrZS1sYXllcnMgYWRkLWxheWVyICVzIiAlbWV0YV9zZWxmdGVzdGRpcikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxvZy5lcnJvcigiY291bGQgbm90IGxvY2F0ZSBtZXRhLXNlbGZ0ZXN0IGluOlxuJXMiCi0gICAgICAgICAgICAgICAgICAgICVtZXRhX3NlbGZ0ZXN0ZGlyKQotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBpZiAiYnVpbGRoaXN0b3J5LmJiY2xhc3MiIGluIGdldF9iYl92YXIoIkJCSU5DTFVERUQiKToKLSAgICAgICAgbG9nLmVycm9yKCJZb3UgaGF2ZSBidWlsZGhpc3RvcnkgZW5hYmxlZCBhbHJlYWR5IGFuZCB0aGlzIGlzbid0IHJlY29tbWVuZGVkIGZvciBzZWxmdGVzdCwgcGxlYXNlIGRpc2FibGUgaXQgZmlyc3QuIikKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBpZiBnZXRfYmJfdmFyKCJQUlNFUlZfSE9TVCIpOgotICAgICAgICBsb2cuZXJyb3IoIlBsZWFzZSB1bnNldCBQUlNFUlZfSE9TVCBpbiBvcmRlciB0byBydW4gb2Utc2VsZnRlc3QiKQotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGlmIGdldF9iYl92YXIoIlNBTklUWV9URVNURURfRElTVFJPUyIpOgotICAgICAgICBsb2cuZXJyb3IoIlBsZWFzZSB1bnNldCBTQU5JVFlfVEVTVEVEX0RJU1RST1MgaW4gb3JkZXIgdG8gcnVuIG9lLXNlbGZ0ZXN0IikKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBsb2cuaW5mbygiUnVubmluZyBiaXRiYWtlIC1wIikKLSAgICBydW5DbWQoImJpdGJha2UgLXAiKQotCi0gICAgcmV0dXJuIFRydWUKLQotZGVmIGFkZF9pbmNsdWRlKCk6Ci0gICAgZ2xvYmFsIGJ1aWxkZGlyCi0gICAgaWYgIiNpbmNsdWRlIGFkZGVkIGJ5IG9lLXNlbGZ0ZXN0LnB5IiBcCi0gICAgICAgIG5vdCBpbiBmdG9vbHMucmVhZF9maWxlKG9zLnBhdGguam9pbihidWlsZGRpciwgImNvbmYvbG9jYWwuY29uZiIpKToKLSAgICAgICAgICAgIGxvZy5pbmZvKCJBZGRpbmc6IFwiaW5jbHVkZSBzZWxmdGVzdC5pbmNcIiBpbiBsb2NhbC5jb25mIikKLSAgICAgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICJjb25mL2xvY2FsLmNvbmYiKSwgXAotICAgICAgICAgICAgICAgICAgICAiXG4jaW5jbHVkZSBhZGRlZCBieSBvZS1zZWxmdGVzdC5weVxuaW5jbHVkZSBtYWNoaW5lLmluY1xuaW5jbHVkZSBzZWxmdGVzdC5pbmMiKQotCi0gICAgaWYgIiNpbmNsdWRlIGFkZGVkIGJ5IG9lLXNlbGZ0ZXN0LnB5IiBcCi0gICAgICAgIG5vdCBpbiBmdG9vbHMucmVhZF9maWxlKG9zLnBhdGguam9pbihidWlsZGRpciwgImNvbmYvYmJsYXllcnMuY29uZiIpKToKLSAgICAgICAgICAgIGxvZy5pbmZvKCJBZGRpbmc6IFwiaW5jbHVkZSBiYmxheWVycy5pbmNcIiBpbiBiYmxheWVycy5jb25mIikKLSAgICAgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICJjb25mL2JibGF5ZXJzLmNvbmYiKSwgXAotICAgICAgICAgICAgICAgICAgICAiXG4jaW5jbHVkZSBhZGRlZCBieSBvZS1zZWxmdGVzdC5weVxuaW5jbHVkZSBiYmxheWVycy5pbmMiKQotCi1kZWYgcmVtb3ZlX2luY2x1ZGUoKToKLSAgICBnbG9iYWwgYnVpbGRkaXIKLSAgICBpZiBidWlsZGRpciBpcyBOb25lOgotICAgICAgICByZXR1cm4KLSAgICBpZiAiI2luY2x1ZGUgYWRkZWQgYnkgb2Utc2VsZnRlc3QucHkiIFwKLSAgICAgICAgaW4gZnRvb2xzLnJlYWRfZmlsZShvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICJjb25mL2xvY2FsLmNvbmYiKSk6Ci0gICAgICAgICAgICBsb2cuaW5mbygiUmVtb3ZpbmcgdGhlIGluY2x1ZGUgZnJvbSBsb2NhbC5jb25mIikKLSAgICAgICAgICAgIGZ0b29scy5yZW1vdmVfZnJvbV9maWxlKG9zLnBhdGguam9pbihidWlsZGRpciwgImNvbmYvbG9jYWwuY29uZiIpLCBcCi0gICAgICAgICAgICAgICAgICAgICJcbiNpbmNsdWRlIGFkZGVkIGJ5IG9lLXNlbGZ0ZXN0LnB5XG5pbmNsdWRlIG1hY2hpbmUuaW5jXG5pbmNsdWRlIHNlbGZ0ZXN0LmluYyIpCi0KLSAgICBpZiAiI2luY2x1ZGUgYWRkZWQgYnkgb2Utc2VsZnRlc3QucHkiIFwKLSAgICAgICAgaW4gZnRvb2xzLnJlYWRfZmlsZShvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICJjb25mL2JibGF5ZXJzLmNvbmYiKSk6Ci0gICAgICAgICAgICBsb2cuaW5mbygiUmVtb3ZpbmcgdGhlIGluY2x1ZGUgZnJvbSBiYmxheWVycy5jb25mIikKLSAgICAgICAgICAgIGZ0b29scy5yZW1vdmVfZnJvbV9maWxlKG9zLnBhdGguam9pbihidWlsZGRpciwgImNvbmYvYmJsYXllcnMuY29uZiIpLCBcCi0gICAgICAgICAgICAgICAgICAgICJcbiNpbmNsdWRlIGFkZGVkIGJ5IG9lLXNlbGZ0ZXN0LnB5XG5pbmNsdWRlIGJibGF5ZXJzLmluYyIpCi0KLWRlZiByZW1vdmVfaW5jX2ZpbGVzKCk6Ci0gICAgZ2xvYmFsIGJ1aWxkZGlyCi0gICAgaWYgYnVpbGRkaXIgaXMgTm9uZToKLSAgICAgICAgcmV0dXJuCi0gICAgdHJ5OgotICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKGJ1aWxkZGlyLCAiY29uZi9zZWxmdGVzdC5pbmMiKSkKLSAgICAgICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsoZ2V0X3Rlc3RfbGF5ZXIoKSk6Ci0gICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKLSAgICAgICAgICAgICAgICBpZiBmID09ICd0ZXN0X3JlY2lwZS5pbmMnOgotICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKHJvb3QsIGYpKQotICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgIHBhc3MKLQotICAgIGZvciBpbmNsX2ZpbGUgaW4gWydjb25mL2JibGF5ZXJzLmluYycsICdjb25mL21hY2hpbmUuaW5jJ106Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLmpvaW4oYnVpbGRkaXIsIGluY2xfZmlsZSkpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHBhc3MKLQotCi1kZWYgZ2V0X3Rlc3RzX21vZHVsZXMoaW5jbHVkZV9oaWRkZW49RmFsc2UpOgotICAgIG1vZHVsZXNfbGlzdCA9IGxpc3QoKQotICAgIGZvciBtb2R1bGVzX3BhdGggaW4gb2VxYS5zZWxmdGVzdC5fX3BhdGhfXzoKLSAgICAgICAgZm9yIChwLCBkLCBmKSBpbiBvcy53YWxrKG1vZHVsZXNfcGF0aCk6Ci0gICAgICAgICAgICBmaWxlcyA9IHNvcnRlZChbZiBmb3IgZiBpbiBvcy5saXN0ZGlyKHApIGlmIGYuZW5kc3dpdGgoJy5weScpIGFuZCBub3QgKGYuc3RhcnRzd2l0aCgnXycpIGFuZCBub3QgaW5jbHVkZV9oaWRkZW4pIGFuZCBub3QgZi5zdGFydHN3aXRoKCdfXycpIGFuZCBmICE9ICdiYXNlLnB5J10pCi0gICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKLSAgICAgICAgICAgICAgICBzdWJtb2R1bGVzID0gcC5zcGxpdCgic2VsZnRlc3QiKVstMV0KLSAgICAgICAgICAgICAgICBtb2R1bGUgPSAiIgotICAgICAgICAgICAgICAgIGlmIHN1Ym1vZHVsZXM6Ci0gICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9ICdvZXFhLnNlbGZ0ZXN0JyArIHN1Ym1vZHVsZXMucmVwbGFjZSgiLyIsIi4iKSArICIuIiArIGYuc3BsaXQoJy5weScpWzBdCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gJ29lcWEuc2VsZnRlc3QuJyArIGYuc3BsaXQoJy5weScpWzBdCi0gICAgICAgICAgICAgICAgaWYgbW9kdWxlIG5vdCBpbiBtb2R1bGVzX2xpc3Q6Ci0gICAgICAgICAgICAgICAgICAgIG1vZHVsZXNfbGlzdC5hcHBlbmQobW9kdWxlKQotICAgIHJldHVybiBtb2R1bGVzX2xpc3QKLQotCi1kZWYgZ2V0X3Rlc3RzKGV4Y2x1c2l2ZV9tb2R1bGVzPVtdLCBpbmNsdWRlX2hpZGRlbj1GYWxzZSk6Ci0gICAgdGVzdF9tb2R1bGVzID0gbGlzdCgpCi0gICAgZm9yIHggaW4gZXhjbHVzaXZlX21vZHVsZXM6Ci0gICAgICAgIHRlc3RfbW9kdWxlcy5hcHBlbmQoJ29lcWEuc2VsZnRlc3QuJyArIHgpCi0gICAgaWYgbm90IHRlc3RfbW9kdWxlczoKLSAgICAgICAgaW5jX2hpZGRlbiA9IGluY2x1ZGVfaGlkZGVuCi0gICAgICAgIHRlc3RfbW9kdWxlcyA9IGdldF90ZXN0c19tb2R1bGVzKGluY19oaWRkZW4pCi0KLSAgICByZXR1cm4gdGVzdF9tb2R1bGVzCi0KLQotY2xhc3MgVGM6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRjbmFtZSwgdGNjbGFzcywgdGNtb2R1bGUsIHRjaWQ9Tm9uZSwgdGN0YWc9Tm9uZSk6Ci0gICAgICAgIHNlbGYudGNuYW1lID0gdGNuYW1lCi0gICAgICAgIHNlbGYudGNjbGFzcyA9IHRjY2xhc3MKLSAgICAgICAgc2VsZi50Y21vZHVsZSA9IHRjbW9kdWxlCi0gICAgICAgIHNlbGYudGNpZCA9IHRjaWQKLSAgICAgICAgIyBBIHRlc3QgY2FzZSBjYW4gaGF2ZSBtdWx0aXBsZSB0YWdzIChhcyB0dXBsZXMpIG90aGVyd2lzZSBzdHIgd2lsbCBzdWZmaWNlCi0gICAgICAgIHNlbGYudGN0YWcgPSB0Y3RhZwotICAgICAgICBzZWxmLmZ1bGxwYXRoID0gJy4nLmpvaW4oWydvZXFhJywgJ3NlbGZ0ZXN0JywgdGNtb2R1bGUsIHRjY2xhc3MsIHRjbmFtZV0pCi0KLQotZGVmIGdldF90ZXN0c19mcm9tX21vZHVsZSh0bW9kKToKLSAgICB0bGlzdCA9IFtdCi0gICAgcHJlZml4ID0gJ29lcWEuc2VsZnRlc3QuJwotCi0gICAgdHJ5OgotICAgICAgICBpbXBvcnQgaW1wb3J0bGliCi0gICAgICAgIG1vZGxpYiA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKHRtb2QpCi0gICAgICAgIGZvciBtb2QgaW4gbGlzdCh2YXJzKG1vZGxpYikudmFsdWVzKCkpOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtb2QsIHR5cGUob2VTZWxmVGVzdCkpIGFuZCBpc3N1YmNsYXNzKG1vZCwgb2VTZWxmVGVzdCkgYW5kIG1vZCBpcyBub3Qgb2VTZWxmVGVzdDoKLSAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiBkaXIobW9kKToKLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdC5zdGFydHN3aXRoKCd0ZXN0XycpIGFuZCBoYXNhdHRyKHZhcnMobW9kKVt0ZXN0XSwgJ19fY2FsbF9fJyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIEdldCB0ZXN0IGNhc2UgaWQgYW5kIGZlYXR1cmUgdGFnCi0gICAgICAgICAgICAgICAgICAgICAgICAjIE5PVEU6IGlmIHRlc3RjYXNlIGRlY29yYXRvciBvciBmZWF0dXJlIHRhZyBub3Qgc2V0IHdpbGwgdGhyb3cgZXJyb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWQgPSB2YXJzKG1vZClbdGVzdF0udGVzdF9jYXNlCi0gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ0RFQlVHOiB0YyBpZCBtaXNzaW5nIGZvciAnICsgc3RyKHRlc3QpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpZCA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dGFnID0gdmFycyhtb2QpW3Rlc3RdLnRhZ19fZmVhdHVyZQotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcHJpbnQoJ0RFQlVHOiBmZWF0dXJlIHRhZyBtaXNzaW5nIGZvciAnICsgc3RyKHRlc3QpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0YWcgPSBOb25lCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICMgTk9URTogZm9yIHNvbWUgcmVhc29uIGxzdHJpcCgpIGRvZXNuJ3Qgd29yayBmb3IgbW9kLl9fbW9kdWxlX18KLSAgICAgICAgICAgICAgICAgICAgICAgIHRsaXN0LmFwcGVuZChUYyh0ZXN0LCBtb2QuX19uYW1lX18sIG1vZC5fX21vZHVsZV9fLnJlcGxhY2UocHJlZml4LCAnJyksIHRpZCwgdHRhZykpCi0gICAgZXhjZXB0OgotICAgICAgICBwYXNzCi0KLSAgICByZXR1cm4gdGxpc3QKLQotCi1kZWYgZ2V0X2FsbF90ZXN0cygpOgotICAgICMgR2V0IGFsbCB0aGUgdGVzdCBtb2R1bGVzIChleGNlcHQgdGhlIGhpZGRlbiBvbmVzKQotICAgIHRlc3RsaXN0ID0gW10KLSAgICB0ZXN0c19tb2R1bGVzID0gZ2V0X3Rlc3RzX21vZHVsZXMoKQotICAgICMgR2V0IGFsbCB0aGUgdGVzdHMgZnJvbSBtb2R1bGVzCi0gICAgZm9yIHRtb2QgaW4gc29ydGVkKHRlc3RzX21vZHVsZXMpOgotICAgICAgICB0ZXN0bGlzdCArPSBnZXRfdGVzdHNfZnJvbV9tb2R1bGUodG1vZCkKLSAgICByZXR1cm4gdGVzdGxpc3QKLQotCi1kZWYgZ2V0X3Rlc3RzdWl0ZV9ieShjcml0ZXJpYSwga2V5d29yZCk6Ci0gICAgIyBHZXQgYSB0ZXN0c3VpdGUgYmFzZWQgb24gJ2tleXdvcmQnCi0gICAgIyBjcml0ZXJpYTogbmFtZSwgY2xhc3MsIG1vZHVsZSwgaWQsIHRhZwotICAgICMga2V5d29yZDogYSBsaXN0IG9mIHRlc3RzLCBjbGFzc2VzLCBtb2R1bGVzLCBpZHMsIHRhZ3MKLQotICAgIHRzID0gW10KLSAgICBhbGxfdGVzdHMgPSBnZXRfYWxsX3Rlc3RzKCkKLQotICAgIGRlZiBnZXRfbWF0Y2hlcyh2YWx1ZXMpOgotICAgICAgICAjIEdldCBhbiBpdGVtIGFuZCByZXR1cm4gdGhlIG9uZXMgdGhhdCBtYXRjaCB3aXRoIGtleXdvcmQocykKLSAgICAgICAgIyB2YWx1ZXM6IHRoZSBsaXN0IG9mIGl0ZW1zIChuYW1lcywgbW9kdWxlcywgY2xhc3Nlcy4uLikKLSAgICAgICAgcmVzdWx0ID0gW10KLSAgICAgICAgcmVtYWluaW5nID0gdmFsdWVzWzpdCi0gICAgICAgIGZvciBrZXkgaW4ga2V5d29yZDoKLSAgICAgICAgICAgIGZvdW5kID0gRmFsc2UKLSAgICAgICAgICAgIGlmIGtleSBpbiByZW1haW5pbmc6Ci0gICAgICAgICAgICAgICAgIyBSZWd1bGFyIG1hdGNoaW5nIG9mIGV4YWN0IGl0ZW0KLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGtleSkKLSAgICAgICAgICAgICAgICByZW1haW5pbmcucmVtb3ZlKGtleSkKLSAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgIyBXaWxkY2FyZCBtYXRjaGluZwotICAgICAgICAgICAgICAgIHBhdHRlcm4gPSByZS5jb21waWxlKGZubWF0Y2gudHJhbnNsYXRlKHIiJXMiICUga2V5KSkKLSAgICAgICAgICAgICAgICBhZGRlZCA9IFt4IGZvciB4IGluIHJlbWFpbmluZyBpZiBwYXR0ZXJuLm1hdGNoKHgpXQotICAgICAgICAgICAgICAgIGlmIGFkZGVkOgotICAgICAgICAgICAgICAgICAgICByZXN1bHQuZXh0ZW5kKGFkZGVkKQotICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcgPSBbeCBmb3IgeCBpbiByZW1haW5pbmcgaWYgeCBub3QgaW4gYWRkZWRdCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQotICAgICAgICAgICAgaWYgbm90IGZvdW5kOgotICAgICAgICAgICAgICAgIGxvZy5lcnJvcigiRmFpbGVkIHRvIGZpbmQgdGVzdDogJXMiICUga2V5KQotCi0gICAgICAgIHJldHVybiByZXN1bHQKLQotICAgIGlmIGNyaXRlcmlhID09ICduYW1lJzoKLSAgICAgICAgbmFtZXMgPSBnZXRfbWF0Y2hlcyhbIHRjLnRjbmFtZSBmb3IgdGMgaW4gYWxsX3Rlc3RzIF0pCi0gICAgICAgIHRzID0gWyB0YyBmb3IgdGMgaW4gYWxsX3Rlc3RzIGlmIHRjLnRjbmFtZSBpbiBuYW1lcyBdCi0KLSAgICBlbGlmIGNyaXRlcmlhID09ICdjbGFzcyc6Ci0gICAgICAgIGNsYXNzZXMgPSBnZXRfbWF0Y2hlcyhbIHRjLnRjY2xhc3MgZm9yIHRjIGluIGFsbF90ZXN0cyBdKQotICAgICAgICB0cyA9IFsgdGMgZm9yIHRjIGluIGFsbF90ZXN0cyBpZiB0Yy50Y2NsYXNzIGluIGNsYXNzZXMgXQotCi0gICAgZWxpZiBjcml0ZXJpYSA9PSAnbW9kdWxlJzoKLSAgICAgICAgbW9kdWxlcyA9IGdldF9tYXRjaGVzKFsgdGMudGNtb2R1bGUgZm9yIHRjIGluIGFsbF90ZXN0cyBdKQotICAgICAgICB0cyA9IFsgdGMgZm9yIHRjIGluIGFsbF90ZXN0cyBpZiB0Yy50Y21vZHVsZSBpbiBtb2R1bGVzIF0KLQotICAgIGVsaWYgY3JpdGVyaWEgPT0gJ2lkJzoKLSAgICAgICAgaWRzID0gZ2V0X21hdGNoZXMoWyBzdHIodGMudGNpZCkgZm9yIHRjIGluIGFsbF90ZXN0cyBdKQotICAgICAgICB0cyA9IFsgdGMgZm9yIHRjIGluIGFsbF90ZXN0cyBpZiBzdHIodGMudGNpZCkgaW4gaWRzIF0KLQotICAgIGVsaWYgY3JpdGVyaWEgPT0gJ3RhZyc6Ci0gICAgICAgIHZhbHVlcyA9IHNldCgpCi0gICAgICAgIGZvciB0YyBpbiBhbGxfdGVzdHM6Ci0gICAgICAgICAgICAjIHRjIGNhbiBoYXZlIG11bHRpcGxlIHRhZ3MgKGFzIHR1cGxlKSBvdGhlcndpc2Ugc3RyIHdpbGwgc3VmZmljZQotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0Yy50Y3RhZywgdHVwbGUpOgotICAgICAgICAgICAgICAgIHZhbHVlcyB8PSB7IHN0cih0YWcpIGZvciB0YWcgaW4gdGMudGN0YWcgfQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB2YWx1ZXMuYWRkKHN0cih0Yy50Y3RhZykpCi0KLSAgICAgICAgdGFncyA9IGdldF9tYXRjaGVzKGxpc3QodmFsdWVzKSkKLQotICAgICAgICBmb3IgdGMgaW4gYWxsX3Rlc3RzOgotICAgICAgICAgICAgZm9yIHRhZyBpbiB0YWdzOgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGMudGN0YWcsIHR1cGxlKSBhbmQgdGFnIGluIHRjLnRjdGFnOgotICAgICAgICAgICAgICAgICAgICB0cy5hcHBlbmQodGMpCi0gICAgICAgICAgICAgICAgZWxpZiB0YWcgPT0gdGMudGN0YWc6Ci0gICAgICAgICAgICAgICAgICAgIHRzLmFwcGVuZCh0YykKLQotICAgICAgICAjIFJlbW92ZSBkdXBsaWNhdGVzIGZyb20gdGhlIGxpc3QKLSAgICAgICAgdHMgPSBsaXN0KHNldCh0cykpCi0KLSAgICByZXR1cm4gdHMKLQotCi1kZWYgbGlzdF90ZXN0c3VpdGVfYnkoY3JpdGVyaWEsIGtleXdvcmQpOgotICAgICMgR2V0IGEgdGVzdHN1aXRlIGJhc2VkIG9uICdrZXl3b3JkJwotICAgICMgY3JpdGVyaWE6IG5hbWUsIGNsYXNzLCBtb2R1bGUsIGlkLCB0YWcKLSAgICAjIGtleXdvcmQ6IGEgbGlzdCBvZiB0ZXN0cywgY2xhc3NlcywgbW9kdWxlcywgaWRzLCB0YWdzCi0gICAgZGVmIHRjX2tleSh0KToKLSAgICAgICAgaWYgdFswXSBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuICAoMCwpICsgdFsxOl0KLSAgICAgICAgcmV0dXJuIHQKLSAgICAjIHRjaWQgbWF5IGJlIE5vbmUgaWYgbm8gSUQgd2FzIGFzc2lnbmVkLCBpbiB3aGljaCBjYXNlIHNvcnRlZCgpIHdpbGwgdGhyb3cKLSAgICAjIGEgVHlwZUVycm9yIGFzIFB5dGhvbiAzIGRvZXMgbm90IGFsbG93IGNvbXBhcmlzb24gKDwsPD0sPj0sPikgb2YKLSAgICAjIGhldGVyb2dlbmVvdXMgdHlwZXMsIGhhbmRsZSB0aGlzIGJ5IHVzaW5nIGEgY3VzdG9tIGtleSBnZW5lcmF0b3IKLSAgICB0cyA9IHNvcnRlZChbICh0Yy50Y2lkLCB0Yy50Y3RhZywgdGMudGNuYW1lLCB0Yy50Y2NsYXNzLCB0Yy50Y21vZHVsZSkgXAotICAgICAgICAgICAgICAgICAgZm9yIHRjIGluIGdldF90ZXN0c3VpdGVfYnkoY3JpdGVyaWEsIGtleXdvcmQpIF0sIGtleT10Y19rZXkpCi0gICAgcHJpbnQoJ18nICogMTUwKQotICAgIGZvciB0IGluIHRzOgotICAgICAgICBpZiBpc2luc3RhbmNlKHRbMV0sICh0dXBsZSwgbGlzdCkpOgotICAgICAgICAgICAgcHJpbnQoJyUtNHNcdCUtMjBzXHQlLTYwc1x0JS0yNXNcdCUtMjBzJyAlICh0WzBdLCAnLCAnLmpvaW4odFsxXSksIHRbMl0sIHRbM10sIHRbNF0pKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQoJyUtNHNcdCUtMjBzXHQlLTYwc1x0JS0yNXNcdCUtMjBzJyAlIHQpCi0gICAgcHJpbnQoJ18nICogMTUwKQotICAgIHByaW50KCdGaWx0ZXJpbmcgYnk6XHQgJXMnICUgY3JpdGVyaWEpCi0gICAgcHJpbnQoJ0xvb2tpbmcgZm9yOlx0ICVzJyAlICcsICcuam9pbihzdHIoeCkgZm9yIHggaW4ga2V5d29yZCkpCi0gICAgcHJpbnQoJ1RvdGFsIGZvdW5kOlx0ICVzJyAlIGxlbih0cykpCi0KLQotZGVmIGxpc3RfdGVzdHMoKToKLSAgICAjIExpc3QgYWxsIGF2YWlsYWJsZSBvZS1zZWxmdGVzdCB0ZXN0cwotCi0gICAgdHMgPSBnZXRfYWxsX3Rlc3RzKCkKLQotICAgIHByaW50KCclLTRzXHQlLTEwc1x0JS01MHMnICUgKCdpZCcsICd0YWcnLCAndGVzdCcpKQotICAgIHByaW50KCdfJyAqIDgwKQotICAgIGZvciB0IGluIHRzOgotICAgICAgICBpZiBpc2luc3RhbmNlKHQudGN0YWcsICh0dXBsZSwgbGlzdCkpOgotICAgICAgICAgICAgcHJpbnQoJyUtNHNcdCUtMTBzXHQlLTUwcycgJSAodC50Y2lkLCAnLCAnLmpvaW4odC50Y3RhZyksICcuJy5qb2luKFt0LnRjbW9kdWxlLCB0LnRjY2xhc3MsIHQudGNuYW1lXSkpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQoJyUtNHNcdCUtMTBzXHQlLTUwcycgJSAodC50Y2lkLCB0LnRjdGFnLCAnLicuam9pbihbdC50Y21vZHVsZSwgdC50Y2NsYXNzLCB0LnRjbmFtZV0pKSkKLSAgICBwcmludCgnXycgKiA4MCkKLSAgICBwcmludCgnVG90YWwgZm91bmQ6XHQgJXMnICUgbGVuKHRzKSkKLQotZGVmIGxpc3RfdGFncygpOgotICAgICMgR2V0IGFsbCB0YWdzIHNldCB0byB0ZXN0IGNhc2VzCi0gICAgIyBUaGlzIGlzIHVzZWZ1bCB3aGVuIHNldHRpbmcgdGFncyB0byB0ZXN0IGNhc2VzCi0gICAgIyBUaGUgbGlzdCBvZiB0YWdzIHNob3VsZCBiZSBrZXB0IGFzIG1pbmltYWwgYXMgcG9zc2libGUKLSAgICB0YWdzID0gc2V0KCkKLSAgICBhbGxfdGVzdHMgPSBnZXRfYWxsX3Rlc3RzKCkKLQotICAgIGZvciB0YyBpbiBhbGxfdGVzdHM6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UodGMudGN0YWcsICh0dXBsZSwgbGlzdCkpOgotICAgICAgICAgICAgdGFncy51cGRhdGUoc2V0KHRjLnRjdGFnKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRhZ3MuYWRkKHRjLnRjdGFnKQotCi0gICAgcHJpbnQoJ1RhZ3M6XHQlcycgJSAnLCAnLmpvaW4oc3RyKHgpIGZvciB4IGluIHRhZ3MpKQotCi1kZWYgY292ZXJhZ2Vfc2V0dXAoY292ZXJhZ2Vfc291cmNlLCBjb3ZlcmFnZV9pbmNsdWRlLCBjb3ZlcmFnZV9vbWl0KToKLSAgICAiIiIgU2V0IHVwIHRoZSBjb3ZlcmFnZSBtZWFzdXJlbWVudCBmb3IgdGhlIHRlc3RjYXNlcyB0byBiZSBydW4gIiIiCi0gICAgaW1wb3J0IGRhdGV0aW1lCi0gICAgaW1wb3J0IHN1YnByb2Nlc3MKLSAgICBnbG9iYWwgYnVpbGRkaXIKLSAgICBwb2t5ZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSkpCi0gICAgY3VyY29tbWl0PSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImdpdCIsICItLWdpdC1kaXIiLCBvcy5wYXRoLmpvaW4ocG9reWRpciwgIi5naXQiKSwgInJldi1wYXJzZSIsICJIRUFEIl0pLmRlY29kZSgndXRmLTgnKQotICAgIGNvdmVyYWdlcmMgPSAiJXMvLmNvdmVyYWdlcmMiICUgYnVpbGRkaXIKLSAgICBkYXRhX2ZpbGUgPSAiJXMvLmNvdmVyYWdlLiIgJSBidWlsZGRpcgotICAgIGRhdGFfZmlsZSArPSBkYXRldGltZS5kYXRldGltZS5ub3coKS5zdHJmdGltZSgnJVklbSVkVCVIJU0lUycpCi0gICAgaWYgb3MucGF0aC5pc2ZpbGUoZGF0YV9maWxlKToKLSAgICAgICAgb3MucmVtb3ZlKGRhdGFfZmlsZSkKLSAgICB3aXRoIG9wZW4oY292ZXJhZ2VyYywgJ3cnKSBhcyBjcHM6Ci0gICAgICAgIGNwcy53cml0ZSgiIyBHZW5lcmF0ZWQgd2l0aCBjb21tYW5kICclcydcbiIgJSAiICIuam9pbihzeXMuYXJndikpCi0gICAgICAgIGNwcy53cml0ZSgiIyBIRUFEIGNvbW1pdCAlc1xuIiAlIGN1cmNvbW1pdC5zdHJpcCgpKQotICAgICAgICBjcHMud3JpdGUoIltydW5dXG4iKQotICAgICAgICBjcHMud3JpdGUoImRhdGFfZmlsZSA9ICVzXG4iICUgZGF0YV9maWxlKQotICAgICAgICBjcHMud3JpdGUoImJyYW5jaCA9IFRydWVcbiIpCi0gICAgICAgICMgTWVhc3VyZSBqdXN0IEJCTEFZRVJTLCBzY3JpcHRzIGFuZCBiaXRiYWtlIGZvbGRlcnMKLSAgICAgICAgY3BzLndyaXRlKCJzb3VyY2UgPSBcbiIpCi0gICAgICAgIGlmIGNvdmVyYWdlX3NvdXJjZToKLSAgICAgICAgICAgIGZvciBkaXJlY3RvcnkgaW4gY292ZXJhZ2Vfc291cmNlOgotICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGRpcmVjdG9yeSk6Ci0gICAgICAgICAgICAgICAgICAgIGxvZy53YXJuKCJEaXJlY3RvcnkgJXMgaXMgbm90IHZhbGlkLiIsIGRpcmVjdG9yeSkKLSAgICAgICAgICAgICAgICBjcHMud3JpdGUoIiAgICAlc1xuIiAlIGRpcmVjdG9yeSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZvciBsYXllciBpbiBnZXRfYmJfdmFyKCdCQkxBWUVSUycpLnNwbGl0KCk6Ci0gICAgICAgICAgICAgICAgY3BzLndyaXRlKCIgICAgJXNcbiIgJSBsYXllcikKLSAgICAgICAgICAgIGNwcy53cml0ZSgiICAgICVzXG4iICUgb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKSkKLSAgICAgICAgICAgIGNwcy53cml0ZSgiICAgICVzXG4iICUgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpKSwnYml0YmFrZScpKQotCi0gICAgICAgIGlmIGNvdmVyYWdlX2luY2x1ZGU6Ci0gICAgICAgICAgICBjcHMud3JpdGUoImluY2x1ZGUgPSBcbiIpCi0gICAgICAgICAgICBmb3IgcGF0dGVybiBpbiBjb3ZlcmFnZV9pbmNsdWRlOgotICAgICAgICAgICAgICAgIGNwcy53cml0ZSgiICAgICVzXG4iICUgcGF0dGVybikKLSAgICAgICAgaWYgY292ZXJhZ2Vfb21pdDoKLSAgICAgICAgICAgIGNwcy53cml0ZSgib21pdCA9IFxuIikKLSAgICAgICAgICAgIGZvciBwYXR0ZXJuIGluIGNvdmVyYWdlX29taXQ6Ci0gICAgICAgICAgICAgICAgY3BzLndyaXRlKCIgICAgJXNcbiIgJSBwYXR0ZXJuKQotCi0gICAgICAgIHJldHVybiBjb3ZlcmFnZXJjCi0KLWRlZiBjb3ZlcmFnZV9yZXBvcnQoKToKLSAgICAiIiIgTG9hZHMgdGhlIGNvdmVyYWdlIGRhdGEgZ2F0aGVyZWQgYW5kIHJlcG9ydHMgaXQgYmFjayAiIiIKLSAgICB0cnk6Ci0gICAgICAgICMgQ292ZXJhZ2U0IHVzZXMgY292ZXJhZ2UuQ292ZXJhZ2UKLSAgICAgICAgZnJvbSBjb3ZlcmFnZSBpbXBvcnQgQ292ZXJhZ2UKLSAgICBleGNlcHQ6Ci0gICAgICAgICMgQ292ZXJhZ2UgdW5kZXIgdmVyc2lvbiA0IHVzZXMgY292ZXJhZ2UuY292ZXJhZ2UKLSAgICAgICAgZnJvbSBjb3ZlcmFnZSBpbXBvcnQgY292ZXJhZ2UgYXMgQ292ZXJhZ2UKLQotICAgIGltcG9ydCBpbyBhcyBTdHJpbmdJTwotICAgIGZyb20gY292ZXJhZ2UubWlzYyBpbXBvcnQgQ292ZXJhZ2VFeGNlcHRpb24KLQotICAgIGNvdl9vdXRwdXQgPSBTdHJpbmdJTy5TdHJpbmdJTygpCi0gICAgIyBDcmVhdGluZyB0aGUgY292ZXJhZ2UgZGF0YSB3aXRoIHRoZSBzZXR0aW5nIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQotICAgIGNvdiA9IENvdmVyYWdlKGNvbmZpZ19maWxlID0gb3MuZW52aXJvbi5nZXQoJ0NPVkVSQUdFX1BST0NFU1NfU1RBUlQnKSkKLSAgICB0cnk6Ci0gICAgICAgICMgTG9hZCBkYXRhIGZyb20gdGhlIGRhdGEgZmlsZSBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgY292LmxvYWQoKQotICAgICAgICAjIFN0b3JlIHJlcG9ydCBkYXRhIGluIGEgU3RyaW5nSU8gdmFyaWFibGUKLSAgICAgICAgY292LnJlcG9ydChmaWxlID0gY292X291dHB1dCwgc2hvd19taXNzaW5nPUZhbHNlKQotICAgICAgICBsb2cuaW5mbygiXG4lcyIgJSBjb3Zfb3V0cHV0LmdldHZhbHVlKCkpCi0gICAgZXhjZXB0IENvdmVyYWdlRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICMgU2hvdyBwcm9ibGVtcyB3aXRoIHRoZSByZXBvcnRpbmcuIFNpbmNlIENvdmVyYWdlNCBub3QgZmluZGluZyAgYW55IGRhdGEgdG8gcmVwb3J0IHJhaXNlcyBhbiBleGNlcHRpb24KLSAgICAgICAgbG9nLndhcm4oIiVzIiAlIHN0cihlKSkKLSAgICBmaW5hbGx5OgotICAgICAgICBjb3Zfb3V0cHV0LmNsb3NlKCkKLQorbG9nZ2VyID0gc2NyaXB0dXRpbHMubG9nZ2VyX2NyZWF0ZSgnb2Utc2VsZnRlc3QnLCBzdHJlYW09c3lzLnN0ZG91dCkKIAogZGVmIG1haW4oKToKLSAgICBwYXJzZXIgPSBnZXRfYXJnc19wYXJzZXIoKQotICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgZGVzY3JpcHRpb24gPSAiU2NyaXB0IHRoYXQgcnVucyB1bml0IHRlc3RzIGFnYWluc3QgYml0YmFrZSBhbmQgb3RoZXIgWW9jdG8gcmVsYXRlZCB0b29scy4gVGhlIGdvYWwgaXMgdG8gdmFsaWRhdGUgdG9vbHMgZnVuY3Rpb25hbGl0eSBhbmQgbWV0YWRhdGEgaW50ZWdyaXR5LiBSZWZlciB0byBodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL09lLXNlbGZ0ZXN0IGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgICBwYXJzZXIgPSBhcmdwYXJzZV9vZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj1kZXNjcmlwdGlvbikKIAotICAgICMgQWRkIDxsYXllcj4vbGliIHRvIHN5cy5wYXRoLCBzbyBsYXllcnMgY2FuIGFkZCBzZWxmdGVzdHMKLSAgICBsb2cuaW5mbygiUnVubmluZyBiaXRiYWtlIC1lIHRvIGdldCBCQlBBVEgiKQotICAgIGJicGF0aCA9IGdldF9iYl92YXIoJ0JCUEFUSCcpLnNwbGl0KCc6JykKLSAgICBsYXllcl9saWJkaXJzID0gW3AgZm9yIHAgaW4gKG9zLnBhdGguam9pbihsLCAnbGliJykgZm9yIGwgaW4gYmJwYXRoKSBpZiBvcy5wYXRoLmV4aXN0cyhwKV0KLSAgICBzeXMucGF0aC5leHRlbmQobGF5ZXJfbGliZGlycykKLSAgICBpbXAucmVsb2FkKG9lcWEuc2VsZnRlc3QpCisgICAgY29tcF9uYW1lLCBjb21wID0gbG9hZF90ZXN0X2NvbXBvbmVudHMobG9nZ2VyLCAnb2Utc2VsZnRlc3QnKS5wb3BpdGVtKCkKKyAgICBjb21wLnJlZ2lzdGVyX2NvbW1hbmRzKGxvZ2dlciwgcGFyc2VyKQogCi0gICAgIyBhY3QgbGlrZSBiaXRiYWtlIGFuZCBlbmZvcmNlIGVuX1VTLlVURi04IGxvY2FsZQotICAgIG9zLmVudmlyb25bIkxDX0FMTCJdID0gImVuX1VTLlVURi04IgorICAgIHRyeToKKyAgICAgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKyAgICAgICAgcmVzdWx0cyA9IGFyZ3MuZnVuYyhsb2dnZXIsIGFyZ3MpCisgICAgICAgIHJldCA9IDAgaWYgcmVzdWx0cy53YXNTdWNjZXNzZnVsKCkgZWxzZSAxCisgICAgZXhjZXB0IFN5c3RlbUV4aXQgYXMgZXJyOgorICAgICAgICBpZiBlcnIuY29kZSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgZXJyCisgICAgICAgIHJldCA9IGVyci5jb2RlCisgICAgZXhjZXB0IE9FUUFQcmVSdW4gYXMgcHI6CisgICAgICAgIHJldCA9IDEKIAotICAgIGlmIGFyZ3MucnVuX3Rlc3RzX2J5IGFuZCBsZW4oYXJncy5ydW5fdGVzdHNfYnkpID49IDI6Ci0gICAgICAgIHZhbGlkX29wdGlvbnMgPSBbJ25hbWUnLCAnY2xhc3MnLCAnbW9kdWxlJywgJ2lkJywgJ3RhZyddCi0gICAgICAgIGlmIGFyZ3MucnVuX3Rlc3RzX2J5WzBdIG5vdCBpbiB2YWxpZF9vcHRpb25zOgotICAgICAgICAgICAgcHJpbnQoJy0tcnVuLXRlc3RzLWJ5ICVzIG5vdCBhIHZhbGlkIG9wdGlvbi4gQ2hvb3NlIG9uZSBvZiA8bmFtZXxjbGFzc3xtb2R1bGV8aWR8dGFnPi4nICUgYXJncy5ydW5fdGVzdHNfYnlbMF0pCi0gICAgICAgICAgICByZXR1cm4gMQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgY3JpdGVyaWEgPSBhcmdzLnJ1bl90ZXN0c19ieVswXQotICAgICAgICAgICAga2V5d29yZCA9IGFyZ3MucnVuX3Rlc3RzX2J5WzE6XQotICAgICAgICAgICAgdHMgPSBzb3J0ZWQoWyB0Yy5mdWxscGF0aCBmb3IgdGMgaW4gZ2V0X3Rlc3RzdWl0ZV9ieShjcml0ZXJpYSwga2V5d29yZCkgXSkKLSAgICAgICAgaWYgbm90IHRzOgotICAgICAgICAgICAgcmV0dXJuIDEKKyAgICByZXR1cm4gcmV0CiAKLSAgICBpZiBhcmdzLmxpc3RfdGVzdHNfYnkgYW5kIGxlbihhcmdzLmxpc3RfdGVzdHNfYnkpID49IDI6Ci0gICAgICAgIHZhbGlkX29wdGlvbnMgPSBbJ25hbWUnLCAnY2xhc3MnLCAnbW9kdWxlJywgJ2lkJywgJ3RhZyddCi0gICAgICAgIGlmIGFyZ3MubGlzdF90ZXN0c19ieVswXSBub3QgaW4gdmFsaWRfb3B0aW9uczoKLSAgICAgICAgICAgIHByaW50KCctLWxpc3QtdGVzdHMtYnkgJXMgbm90IGEgdmFsaWQgb3B0aW9uLiBDaG9vc2Ugb25lIG9mIDxuYW1lfGNsYXNzfG1vZHVsZXxpZHx0YWc+LicgJSBhcmdzLmxpc3RfdGVzdHNfYnlbMF0pCi0gICAgICAgICAgICByZXR1cm4gMQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgY3JpdGVyaWEgPSBhcmdzLmxpc3RfdGVzdHNfYnlbMF0KLSAgICAgICAgICAgIGtleXdvcmQgPSBhcmdzLmxpc3RfdGVzdHNfYnlbMTpdCi0gICAgICAgICAgICBsaXN0X3Rlc3RzdWl0ZV9ieShjcml0ZXJpYSwga2V5d29yZCkKLQotICAgIGlmIGFyZ3MubGlzdF90ZXN0czoKLSAgICAgICAgbGlzdF90ZXN0cygpCi0KLSAgICBpZiBhcmdzLmxpc3RfdGFnczoKLSAgICAgICAgbGlzdF90YWdzKCkKLQotICAgIGlmIGFyZ3MubGlzdF9hbGxjbGFzc2VzOgotICAgICAgICBhcmdzLmxpc3RfbW9kdWxlcyA9IFRydWUKLQotICAgIGlmIGFyZ3MubGlzdF9tb2R1bGVzOgotICAgICAgICBsb2cuaW5mbygnTGlzdGluZyBhbGwgYXZhaWxhYmxlIHRlc3QgbW9kdWxlczonKQotICAgICAgICB0ZXN0c2xpc3QgPSBnZXRfdGVzdHMoaW5jbHVkZV9oaWRkZW49VHJ1ZSkKLSAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHNsaXN0OgotICAgICAgICAgICAgbW9kdWxlID0gdGVzdC5zcGxpdCgnb2VxYS5zZWxmdGVzdC4nKVstMV0KLSAgICAgICAgICAgIGluZm8gPSAnJwotICAgICAgICAgICAgaWYgbW9kdWxlLnN0YXJ0c3dpdGgoJ18nKToKLSAgICAgICAgICAgICAgICBpbmZvID0gJyAoaGlkZGVuKScKLSAgICAgICAgICAgIHByaW50KG1vZHVsZSArIGluZm8pCi0gICAgICAgICAgICBpZiBhcmdzLmxpc3RfYWxsY2xhc3NlczoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydCBpbXBvcnRsaWIKLSAgICAgICAgICAgICAgICAgICAgbW9kbGliID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUodGVzdCkKLSAgICAgICAgICAgICAgICAgICAgZm9yIHYgaW4gdmFycyhtb2RsaWIpOgotICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHZhcnMobW9kbGliKVt2XQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0LCB0eXBlKG9lU2VsZlRlc3QpKSBhbmQgaXNzdWJjbGFzcyh0LCBvZVNlbGZUZXN0KSBhbmQgdCE9b2VTZWxmVGVzdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiIC0tIiwgdikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbWV0aG9kIGluIGRpcih0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbWV0aG9kLnN0YXJ0c3dpdGgoInRlc3RfIikgYW5kIGlzaW5zdGFuY2UodmFycyh0KVttZXRob2RdLCBjb2xsZWN0aW9ucy5DYWxsYWJsZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiIC0tICAtLSIsIG1ldGhvZCkKLQotICAgICAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIEltcG9ydEVycm9yKSBhcyBlOgotICAgICAgICAgICAgICAgICAgICBwcmludChlKQotICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICBpZiBhcmdzLnJ1bl90ZXN0cyBvciBhcmdzLnJ1bl9hbGxfdGVzdHMgb3IgYXJncy5ydW5fdGVzdHNfYnk6Ci0gICAgICAgIGlmIG5vdCBwcmVmbGlnaHRfY2hlY2soKToKLSAgICAgICAgICAgIHJldHVybiAxCi0KLSAgICAgICAgaWYgYXJncy5ydW5fdGVzdHNfYnk6Ci0gICAgICAgICAgICB0ZXN0c2xpc3QgPSB0cwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdGVzdHNsaXN0ID0gZ2V0X3Rlc3RzKGV4Y2x1c2l2ZV9tb2R1bGVzPShhcmdzLnJ1bl90ZXN0cyBvciBbXSksIGluY2x1ZGVfaGlkZGVuPUZhbHNlKQotCi0gICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyA9IE5vbmUKLSAgICAgICAgcnVubmVyID0gVGVzdFJ1bm5lcih2ZXJib3NpdHk9MiwKLSAgICAgICAgICAgICAgICByZXN1bHRjbGFzcz1idWlsZFJlc3VsdENsYXNzKGFyZ3MpKQotICAgICAgICAjIHdlIG5lZWQgdG8gZG8gdGhpcyBoZXJlLCBvdGhlcndpc2UganVzdCBsb2FkaW5nIHRoZSB0ZXN0cwotICAgICAgICAjIHdpbGwgdGFrZSAyIG1pbnV0ZXMgKGJpdGJha2UgLWUgY2FsbHMpCi0gICAgICAgIG9lU2VsZlRlc3QudGVzdGxheWVyX3BhdGggPSBnZXRfdGVzdF9sYXllcigpCi0gICAgICAgIGZvciB0ZXN0IGluIHRlc3RzbGlzdDoKLSAgICAgICAgICAgIGxvZy5pbmZvKCJMb2FkaW5nIHRlc3RzIGZyb206ICVzIiAlIHRlc3QpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc3VpdGUuYWRkVGVzdHMobG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKHRlc3QpKQotICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgbG9nLmVycm9yKCJGYWlsZWQgdG8gaW1wb3J0ICVzIiAlIHRlc3QpCi0gICAgICAgICAgICAgICAgbG9nLmVycm9yKGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgYWRkX2luY2x1ZGUoKQotCi0gICAgICAgIGlmIGFyZ3MubWFjaGluZToKLSAgICAgICAgICAgICMgQ3VzdG9tIG1hY2hpbmUgc2V0cyBvbmx5IHdlYWsgZGVmYXVsdCB2YWx1ZXMgKD8/PSkgZm9yIE1BQ0hJTkUgaW4gbWFjaGluZS5pbmMKLSAgICAgICAgICAgICMgVGhpcyBsZXQgdGVzdCBjYXNlcyB0aGF0IHJlcXVpcmUgYSBzcGVjaWZpYyBNQUNISU5FIHRvIGJlIGFibGUgdG8gb3ZlcnJpZGUgaXQsIHVzaW5nICg/PSBvciA9KQotICAgICAgICAgICAgbG9nLmluZm8oJ0N1c3RvbSBtYWNoaW5lIG1vZGUgZW5hYmxlZC4gTUFDSElORSBzZXQgdG8gJXMnICUgYXJncy5tYWNoaW5lKQotICAgICAgICAgICAgaWYgYXJncy5tYWNoaW5lID09ICdyYW5kb20nOgotICAgICAgICAgICAgICAgIG9zLmVudmlyb25bJ0NVU1RPTU1BQ0hJTkUnXSA9ICdyYW5kb20nCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcnVubmVyLnJ1bihzdWl0ZSkKLSAgICAgICAgICAgIGVsc2U6ICAjIGFsbAotICAgICAgICAgICAgICAgIG1hY2hpbmVzID0gZ2V0X2F2YWlsYWJsZV9tYWNoaW5lcygpCi0gICAgICAgICAgICAgICAgZm9yIG0gaW4gbWFjaGluZXM6Ci0gICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKCdSdW4gdGVzdHMgd2l0aCBjdXN0b20gTUFDSElORSBzZXQgdG86ICVzJyAlIG0pCi0gICAgICAgICAgICAgICAgICAgIG9zLmVudmlyb25bJ0NVU1RPTU1BQ0hJTkUnXSA9IG0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcnVubmVyLnJ1bihzdWl0ZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJlc3VsdCA9IHJ1bm5lci5ydW4oc3VpdGUpCi0KLSAgICAgICAgbG9nLmluZm8oIkZpbmlzaGVkIikKLQotICAgICAgICBpZiBhcmdzLnJlcG9zaXRvcnk6Ci0gICAgICAgICAgICBpbXBvcnQgZ2l0Ci0gICAgICAgICAgICAjIENvbW1pdCB0ZXN0cyByZXN1bHRzIHRvIHJlcG9zaXRvcnkKLSAgICAgICAgICAgIG1ldGFkYXRhID0gbWV0YWRhdGFfZnJvbV9iYigpCi0gICAgICAgICAgICBnaXRfZGlyID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCAnc2VsZnRlc3QnKQotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoZ2l0X2Rpcik6Ci0gICAgICAgICAgICAgICAgb3MubWtkaXIoZ2l0X2RpcikKLQotICAgICAgICAgICAgbG9nLmRlYnVnKCdDaGVja2luZyBmb3IgZ2l0IHJlcG9zaXRvcnkgaW4gJXMnICUgZ2l0X2RpcikKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXBvID0gZ2l0LlJlcG8oZ2l0X2RpcikKLSAgICAgICAgICAgIGV4Y2VwdCBnaXQuZXhjLkludmFsaWRHaXRSZXBvc2l0b3J5RXJyb3I6Ci0gICAgICAgICAgICAgICAgbG9nLmRlYnVnKCJDb3VsZG4ndCBmaW5kIGdpdCByZXBvc2l0b3J5ICVzOyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgImNsb25pbmcgZnJvbSAlcyIgJSAoZ2l0X2RpciwgYXJncy5yZXBvc2l0b3J5KSkKLSAgICAgICAgICAgICAgICByZXBvID0gZ2l0LlJlcG8uY2xvbmVfZnJvbShhcmdzLnJlcG9zaXRvcnksIGdpdF9kaXIpCi0KLSAgICAgICAgICAgIHJfYnJhbmNoZXMgPSByZXBvLmdpdC5icmFuY2gocj1UcnVlKQotICAgICAgICAgICAgcl9icmFuY2hlcyA9IHNldChyX2JyYW5jaGVzLnJlcGxhY2UoJ29yaWdpbi8nLCAnJykuc3BsaXQoKSkKLSAgICAgICAgICAgIGxfYnJhbmNoZXMgPSB7c3RyKGJyYW5jaCkgZm9yIGJyYW5jaCBpbiByZXBvLmJyYW5jaGVzfQotICAgICAgICAgICAgYnJhbmNoID0gJyVzLyVzLyVzJyAlIChtZXRhZGF0YVsnaG9zdG5hbWUnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGFbJ2xheWVycyddWydtZXRhJ10uZ2V0KCdicmFuY2gnLCAnKG5vZ2l0KScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YVsnY29uZmlnJ11bJ01BQ0hJTkUnXSkKLQotICAgICAgICAgICAgaWYgYnJhbmNoIGluIGxfYnJhbmNoZXM6Ci0gICAgICAgICAgICAgICAgbG9nLmRlYnVnKCdGb3VuZCBicmFuY2ggaW4gbG9jYWwgcmVwb3NpdG9yeSwgY2hlY2tpbmcgb3V0JykKLSAgICAgICAgICAgICAgICByZXBvLmdpdC5jaGVja291dChicmFuY2gpCi0gICAgICAgICAgICBlbGlmIGJyYW5jaCBpbiByX2JyYW5jaGVzOgotICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygnRm91bmQgYnJhbmNoIGluIHJlbW90ZSByZXBvc2l0b3J5LCBjaGVja2luZycKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJyBvdXQgYW5kIHB1bGxpbmcnKQotICAgICAgICAgICAgICAgIHJlcG8uZ2l0LmNoZWNrb3V0KGJyYW5jaCkKLSAgICAgICAgICAgICAgICByZXBvLmdpdC5wdWxsKCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbG9nLmRlYnVnKCdOZXcgYnJhbmNoICVzJyAlIGJyYW5jaCkKLSAgICAgICAgICAgICAgICByZXBvLmdpdC5jaGVja291dCgnbWFzdGVyJykKLSAgICAgICAgICAgICAgICByZXBvLmdpdC5jaGVja291dChiPWJyYW5jaCkKLQotICAgICAgICAgICAgY2xlYW5SZXN1bHRzRGlyKHJlcG8pCi0gICAgICAgICAgICB4bWxfZGlyID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCBsb2dfcHJlZml4KQotICAgICAgICAgICAgY29weVJlc3VsdEZpbGVzKHhtbF9kaXIsIGdpdF9kaXIsIHJlcG8pCi0gICAgICAgICAgICBtZXRhZGF0YV9maWxlID0gb3MucGF0aC5qb2luKGdpdF9kaXIsICdtZXRhZGF0YS54bWwnKQotICAgICAgICAgICAgd3JpdGVfbWV0YWRhdGFfZmlsZShtZXRhZGF0YV9maWxlLCBtZXRhZGF0YSkKLSAgICAgICAgICAgIHJlcG8uaW5kZXguYWRkKFttZXRhZGF0YV9maWxlXSkKLSAgICAgICAgICAgIHJlcG8uaW5kZXgud3JpdGUoKQotCi0gICAgICAgICAgICAjIEdldCBpbmZvcm1hdGlvbiBmb3IgY29tbWl0IG1lc3NhZ2UKLSAgICAgICAgICAgIGxheWVyX2luZm8gPSAnJwotICAgICAgICAgICAgZm9yIGxheWVyLCB2YWx1ZXMgaW4gbWV0YWRhdGFbJ2xheWVycyddLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgbGF5ZXJfaW5mbyA9ICclcyUtMTdzID0gJXM6JXNcbicgJSAobGF5ZXJfaW5mbywgbGF5ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuZ2V0KCdicmFuY2gnLCAnKG5vZ2l0KScpLCB2YWx1ZXMuZ2V0KCdjb21taXQnLCAnMCcqNDApKQotICAgICAgICAgICAgbXNnID0gJ1NlbGZ0ZXN0IGZvciBidWlsZCAlcyBvZiAlcyBmb3IgbWFjaGluZSAlcyBvbiAlc1xuXG4lcycgJSAoCi0gICAgICAgICAgICAgICAgICAgbG9nX3ByZWZpeFsxMjpdLCBtZXRhZGF0YVsnZGlzdHJvJ11bJ3ByZXR0eV9uYW1lJ10sCi0gICAgICAgICAgICAgICAgICAgbWV0YWRhdGFbJ2NvbmZpZyddWydNQUNISU5FJ10sIG1ldGFkYXRhWydob3N0bmFtZSddLCBsYXllcl9pbmZvKQotCi0gICAgICAgICAgICBsb2cuZGVidWcoJ0NvbW1pdGluZyByZXN1bHRzIHRvIGxvY2FsIHJlcG9zaXRvcnknKQotICAgICAgICAgICAgcmVwby5pbmRleC5jb21taXQobXNnKQotICAgICAgICAgICAgaWYgbm90IHJlcG8uaXNfZGlydHkoKToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGJyYW5jaCBpbiByX2JyYW5jaGVzOgotICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCdQdXNoaW5nIGNoYW5nZXMgdG8gcmVtb3RlIHJlcG9zaXRvcnknKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVwby5naXQucHVzaCgpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWcoJ1B1c2hpbmcgY2hhbmdlcyB0byByZW1vdGUgcmVwb3NpdG9yeSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NyZWF0aW5nIG5ldyBicmFuY2gnKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVwby5naXQucHVzaCgnLXUnLCAnb3JpZ2luJywgYnJhbmNoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBHaXRDb21tYW5kRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGxvZy5lcnJvcignRmFsaWVkIHRvIHB1c2ggdG8gcmVtb3RlIHJlcG9zaXRvcnknKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBsb2cuZXJyb3IoJ0xvY2FsIHJlcG9zaXRvcnkgaXMgZGlydHksIG5vdCBwdXNoaW5nIGNvbW1pdHMnKQotCi0gICAgICAgIGlmIHJlc3VsdC53YXNTdWNjZXNzZnVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIDEKLQotZGVmIGJ1aWxkUmVzdWx0Q2xhc3MoYXJncyk6Ci0gICAgIiIiQnVpbGQgYSBSZXN1bHQgQ2xhc3MgdG8gdXNlIGluIHRoZSB0ZXN0Y2FzZSBleGVjdXRpb24iIiIKLSAgICBpbXBvcnQgc2l0ZQotCi0gICAgY2xhc3MgU3RhbXBlZFJlc3VsdChUZXN0UmVzdWx0KToKLSAgICAgICAgIiIiCi0gICAgICAgIEN1c3RvbSBUZXN0UmVzdWx0IHRoYXQgcHJpbnRzIHRoZSB0aW1lIHdoZW4gYSB0ZXN0IHN0YXJ0cy4gIEFzIG9lLXNlbGZ0ZXN0Ci0gICAgICAgIGNhbiB0YWtlIGEgbG9uZyB0aW1lIChpZSBhIGZldyBob3VycykgdG8gcnVuLCB0aW1lc3RhbXBzIGhlbHAgdXMgdW5kZXJzdGFuZAotICAgICAgICB3aGF0IHRlc3RzIGFyZSB0YWtpbmcgYSBsb25nIHRpbWUgdG8gZXhlY3V0ZS4KLSAgICAgICAgSWYgY292ZXJhZ2UgaXMgcmVxdWlyZWQsIHRoaXMgY2xhc3MgZXhlY3V0ZXMgdGhlIGNvdmVyYWdlIHNldHVwIGFuZCByZXBvcnRpbmcuCi0gICAgICAgICIiIgotICAgICAgICBkZWYgc3RhcnRUZXN0KHNlbGYsIHRlc3QpOgotICAgICAgICAgICAgaW1wb3J0IHRpbWUKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKHRpbWUuc3RyZnRpbWUoIiVZLSVtLSVkICVIOiVNOiVTIiwgdGltZS5sb2NhbHRpbWUoKSkgKyAiIC0gIikKLSAgICAgICAgICAgIHN1cGVyKFN0YW1wZWRSZXN1bHQsIHNlbGYpLnN0YXJ0VGVzdCh0ZXN0KQotCi0gICAgICAgIGRlZiBzdGFydFRlc3RSdW4oc2VsZik6Ci0gICAgICAgICAgICAiIiIgU2V0dXAgY292ZXJhZ2UgYmVmb3JlIHJ1bm5pbmcgYW55IHRlc3RjYXNlICIiIgotCi0gICAgICAgICAgICAjIHZhcmlhYmxlIGhvbGRpbmcgdGhlIGNvdmVyYWdlIGNvbmZpZ3VyYXRpb24gZmlsZSBhbGxvd2luZyBzdWJwcm9jZXNzIHRvIGJlIG1lYXN1cmVkCi0gICAgICAgICAgICBzZWxmLmNvdmVyYWdlcHRoID0gTm9uZQotCi0gICAgICAgICAgICAjIGluZGljYXRlcyB0aGUgc3lzdGVtIGlmIGNvdmVyYWdlIGlzIGN1cnJlbnRseSBpbnN0YWxsZWQKLSAgICAgICAgICAgIHNlbGYuY292ZXJhZ2VfaW5zdGFsbGVkID0gVHJ1ZQotCi0gICAgICAgICAgICBpZiBhcmdzLmNvdmVyYWdlIG9yIGFyZ3MuY292ZXJhZ2Vfc291cmNlIG9yIGFyZ3MuY292ZXJhZ2VfaW5jbHVkZSBvciBhcmdzLmNvdmVyYWdlX29taXQ6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIHVzZXIgY2FuIGRvIGNvdmVyYWdlCi0gICAgICAgICAgICAgICAgICAgIGltcG9ydCBjb3ZlcmFnZQotICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgbG9nLndhcm4oInB5dGhvbiBjb3ZlcmFnZSBpcyBub3QgaW5zdGFsbGVkLiBNb3JlIGluZm8gb24gaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9jb3ZlcmFnZSIpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuY292ZXJhZ2VfaW5zdGFsbGVkID0gRmFsc2UKLQotICAgICAgICAgICAgICAgIGlmIHNlbGYuY292ZXJhZ2VfaW5zdGFsbGVkOgotICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbygiQ292ZXJhZ2UgaXMgZW5hYmxlZCIpCi0KLSAgICAgICAgICAgICAgICAgICAgbWFqb3JfdmVyc2lvbiA9IGludChjb3ZlcmFnZS52ZXJzaW9uLl9fdmVyc2lvbl9fWzBdKQotICAgICAgICAgICAgICAgICAgICBpZiBtYWpvcl92ZXJzaW9uIDwgNDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5lcnJvcigicHl0aG9uIGNvdmVyYWdlICVzIGluc3RhbGxlZC4gUmVxdWlyZSB2ZXJzaW9uIDQgb3IgZ3JlYXRlci4iICUgY292ZXJhZ2UudmVyc2lvbi5fX3ZlcnNpb25fXykKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RvcCgpCi0gICAgICAgICAgICAgICAgICAgICMgSW4gY2FzZSB0aGUgdXNlciBoYXMgbm90IHNldCB0aGUgdmFyaWFibGUgQ09WRVJBR0VfUFJPQ0VTU19TVEFSVCwKLSAgICAgICAgICAgICAgICAgICAgIyBjcmVhdGUgYSBkZWZhdWx0IG9uZSBhbmQgZXhwb3J0IGl0LiBUaGUgQ09WRVJBR0VfUFJPQ0VTU19TVEFSVAotICAgICAgICAgICAgICAgICAgICAjIHZhbHVlIGluZGljYXRlcyB3aGVyZSB0aGUgY292ZXJhZ2UgY29uZmlndXJhdGlvbiBmaWxlIHJlc2lkZXMKLSAgICAgICAgICAgICAgICAgICAgIyBNb3JlIGluZm8gb24gaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9jb3ZlcmFnZQotICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MuZW52aXJvbi5nZXQoJ0NPVkVSQUdFX1BST0NFU1NfU1RBUlQnKToKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLmVudmlyb25bJ0NPVkVSQUdFX1BST0NFU1NfU1RBUlQnXSA9IGNvdmVyYWdlX3NldHVwKGFyZ3MuY292ZXJhZ2Vfc291cmNlLCBhcmdzLmNvdmVyYWdlX2luY2x1ZGUsIGFyZ3MuY292ZXJhZ2Vfb21pdCkKLQotICAgICAgICAgICAgICAgICAgICAjIFVzZSBkZWZhdWx0IHNpdGUuVVNFUl9TSVRFIGFuZCB3cml0ZSBjb3JyZXNwb25kaW5nIGNvbmZpZyBmaWxlCi0gICAgICAgICAgICAgICAgICAgIHNpdGUuRU5BQkxFX1VTRVJfU0lURSA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNpdGUuVVNFUl9TSVRFKToKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKHNpdGUuVVNFUl9TSVRFKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmNvdmVyYWdlcHRoID0gb3MucGF0aC5qb2luKHNpdGUuVVNFUl9TSVRFLCAiY292ZXJhZ2UucHRoIikKLSAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuY292ZXJhZ2VwdGgsICd3JykgYXMgY3BzOgotICAgICAgICAgICAgICAgICAgICAgICAgY3BzLndyaXRlKCdpbXBvcnQgc3lzLHNpdGU7IHN5cy5wYXRoLmV4dGVuZChzaXRlLmdldHNpdGVwYWNrYWdlcygpKTsgaW1wb3J0IGNvdmVyYWdlOyBjb3ZlcmFnZS5wcm9jZXNzX3N0YXJ0dXAoKTsnKQotCi0gICAgICAgIGRlZiBzdG9wVGVzdFJ1bihzZWxmKToKLSAgICAgICAgICAgICIiIiBSZXBvcnQgY292ZXJhZ2UgZGF0YSBhZnRlciB0aGUgdGVzdGNhc2VzIGFyZSBydW4gIiIiCi0KLSAgICAgICAgICAgIGlmIGFyZ3MuY292ZXJhZ2Ugb3IgYXJncy5jb3ZlcmFnZV9zb3VyY2Ugb3IgYXJncy5jb3ZlcmFnZV9pbmNsdWRlIG9yIGFyZ3MuY292ZXJhZ2Vfb21pdDoKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmNvdmVyYWdlX2luc3RhbGxlZDoKLSAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG9zLmVudmlyb25bJ0NPVkVSQUdFX1BST0NFU1NfU1RBUlQnXSkgYXMgY2NmOgotICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oIkNvdmVyYWdlIGNvbmZpZ3VyYXRpb24gZmlsZSAoJXMpIiAlIG9zLmVudmlyb24uZ2V0KCdDT1ZFUkFHRV9QUk9DRVNTX1NUQVJUJykpCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbygiPT09PT09PT09PT09PT09PT09PT09PT09PT09IikKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKCJcbiVzIiAlICIiLmpvaW4oY2NmLnJlYWRsaW5lcygpKSkKLQotICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbygiQ292ZXJhZ2UgUmVwb3J0IikKLSAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oIj09PT09PT09PT09PT09PSIpCi0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvdmVyYWdlX3JlcG9ydCgpCi0gICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIHJlbW92ZSB0aGUgcHRoIGZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi5jb3ZlcmFnZXB0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy53YXJuKCJFeHBlY3RlZCB0ZW1wb3JhbCBmaWxlIGZyb20gY292ZXJhZ2UgaXMgbWlzc2luZywgaWdub3JpbmcgcmVtb3ZhbC4iKQotCi0gICAgcmV0dXJuIFN0YW1wZWRSZXN1bHQKLQotZGVmIGNsZWFuUmVzdWx0c0RpcihyZXBvKToKLSAgICAiIiIgUmVtb3ZlIHJlc3VsdCBmaWxlcyBmcm9tIGRpcmVjdG9yeSAiIiIKLQotICAgIHhtbF9maWxlcyA9IFtdCi0gICAgZGlyZWN0b3J5ID0gcmVwby53b3JraW5nX3RyZWVfZGlyCi0gICAgZm9yIGYgaW4gb3MubGlzdGRpcihkaXJlY3RvcnkpOgotICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGRpcmVjdG9yeSwgZikKLSAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUocGF0aCkgYW5kIHBhdGguZW5kc3dpdGgoJy54bWwnKToKLSAgICAgICAgICAgIHhtbF9maWxlcy5hcHBlbmQoZikKLSAgICByZXBvLmluZGV4LnJlbW92ZSh4bWxfZmlsZXMsIHdvcmtpbmdfdHJlZT1UcnVlKQotCi1kZWYgY29weVJlc3VsdEZpbGVzKHNyYywgZHN0LCByZXBvKToKLSAgICAiIiIgQ29weSByZXN1bHQgZmlsZXMgZnJvbSBzcmMgdG8gZHN0IHJlbW92aW5nIHRoZSB0aW1lIHN0YW1wLiAiIiIKLQotICAgIGltcG9ydCBzaHV0aWwKLQotICAgIHJlX3RpbWUgPSByZS5jb21waWxlKCItWzAtOV0rIikKLSAgICBmaWxlX2xpc3QgPSBbXQotCi0gICAgZm9yIHJvb3QsIHN1YmRpcnMsIGZpbGVzIGluIG9zLndhbGsoc3JjKToKLSAgICAgICAgdG1wX2RpciA9IHJvb3QucmVwbGFjZShzcmMsICcnKS5sc3RyaXAoJy8nKQotICAgICAgICBmb3IgcyBpbiBzdWJkaXJzOgotICAgICAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKGRzdCwgdG1wX2RpciwgcykpCi0gICAgICAgIGZvciBmIGluIGZpbGVzOgotICAgICAgICAgICAgZmlsZV9uYW1lID0gb3MucGF0aC5qb2luKGRzdCwgdG1wX2RpciwgcmVfdGltZS5zdWIoIiIsIGYpKQotICAgICAgICAgICAgc2h1dGlsLmNvcHkyKG9zLnBhdGguam9pbihyb290LCBmKSwgZmlsZV9uYW1lKQotICAgICAgICAgICAgZmlsZV9saXN0LmFwcGVuZChmaWxlX25hbWUpCi0gICAgcmVwby5pbmRleC5hZGQoZmlsZV9saXN0KQotCi1jbGFzcyBUZXN0UnVubmVyKF9UZXN0UnVubmVyKToKLSAgICAiIiJUZXN0IHJ1bm5lciBjbGFzcyBhd2FyZSBvZiBleHBvcnRpbmcgdGVzdHMuIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGV4cG9ydGRpciA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgbG9nX3ByZWZpeCkKLSAgICAgICAgICAgIGt3YXJnc3ggPSBkaWN0KCoqa3dhcmdzKQotICAgICAgICAgICAgIyBhcmd1bWVudCBzcGVjaWZpYyB0byBYTUxUZXN0UnVubmVyLCBpZiBhZGRpbmcgYSBuZXcgcnVubmVyIHRoZW4KLSAgICAgICAgICAgICMgYWxzbyBhZGQgbG9naWMgdG8gdXNlIG90aGVyIHJ1bm5lcidzIGFyZ3MuCi0gICAgICAgICAgICBrd2FyZ3N4WydvdXRwdXQnXSA9IGV4cG9ydGRpcgotICAgICAgICAgICAga3dhcmdzeFsnZGVzY3JpcHRpb25zJ10gPSBGYWxzZQotICAgICAgICAgICAgIyBkb25lIGZvciB0aGUgY2FzZSB3aGVyZSB0ZWxsaW5nIHRoZSBydW5uZXIgd2hlcmUgdG8gZXhwb3J0Ci0gICAgICAgICAgICBzdXBlcihUZXN0UnVubmVyLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3N4KQotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgbG9nLmluZm8oInRlc3QgcnVubmVyIGluaXQnZWQgbGlrZSB1bml0dGVzdCIpCi0gICAgICAgICAgICBzdXBlcihUZXN0UnVubmVyLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHRyeToKICAgICAgICAgcmV0ID0gbWFpbigpCiAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgcmV0ID0gMQogICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCiAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIHJlbW92ZV9pbmNsdWRlKCkKLSAgICAgICAgcmVtb3ZlX2luY19maWxlcygpCiAgICAgc3lzLmV4aXQocmV0KQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2Utc2V0dXAtYnVpbGRkaXIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1zZXR1cC1idWlsZGRpcgppbmRleCBlZjQ5NTUxLi41NWQ3M2NhIDEwMDc1NQotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1zZXR1cC1idWlsZGRpcgorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1zZXR1cC1idWlsZGRpcgpAQCAtMTMzLDEzICsxMzMsNiBAQAogIyAgICB1bnNldCBTSE9XWVBET0MKIGZpCiAKLWNhdCA8PEVPTQotCi0jIyMgU2hlbGwgZW52aXJvbm1lbnQgc2V0IHVwIGZvciBidWlsZHMuICMjIwotCi1Zb3UgY2FuIG5vdyBydW4gJ2JpdGJha2UgPHRhcmdldD4nCi0KLUVPTQogaWYgWyAteiAiJE9FQ09SRU5PVEVTQ09ORiIgXTsgdGhlbgogICAgIE9FQ09SRU5PVEVTQ09ORj0iJE9FUk9PVC9tZXRhL2NvbmYvY29uZi1ub3Rlcy50eHQiCiBmaQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtdGVzdCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL29lLXRlc3QKaW5kZXggYTFkMjgyZC4uMzRkOTAxMiAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvb2UtdGVzdAorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9vZS10ZXN0CkBAIC04LDcgKzgsNiBAQAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgYXJncGFyc2UKLWltcG9ydCBpbXBvcnRsaWIKIGltcG9ydCBsb2dnaW5nCiAKIHNjcmlwdHNfcGF0aCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSkKQEAgLTI1LDM1ICsyNCwxMCBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHBhc3MKIAotZnJvbSBvZXFhLmNvcmUuY29udGV4dCBpbXBvcnQgT0VUZXN0Q29udGV4dEV4ZWN1dG9yCitmcm9tIG9lcWEudXRpbHMgaW1wb3J0IGxvYWRfdGVzdF9jb21wb25lbnRzCitmcm9tIG9lcWEuY29yZS5leGNlcHRpb24gaW1wb3J0IE9FUUFQcmVSdW4KIAotbG9nZ2VyID0gc2NyaXB0dXRpbHMubG9nZ2VyX2NyZWF0ZSgnb2UtdGVzdCcpCi0KLWRlZiBfbG9hZF90ZXN0X2NvbXBvbmVudHMobG9nZ2VyKToKLSAgICBjb21wb25lbnRzID0ge30KLQotICAgIGZvciBwYXRoIGluIHN5cy5wYXRoOgotICAgICAgICBiYXNlX2RpciA9IG9zLnBhdGguam9pbihwYXRoLCAnb2VxYScpCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGJhc2VfZGlyKSBhbmQgb3MucGF0aC5pc2RpcihiYXNlX2Rpcik6Ci0gICAgICAgICAgICBmb3IgZmlsZSBpbiBvcy5saXN0ZGlyKGJhc2VfZGlyKToKLSAgICAgICAgICAgICAgICBjb21wX25hbWUgPSBmaWxlCi0gICAgICAgICAgICAgICAgY29tcF9jb250ZXh0ID0gb3MucGF0aC5qb2luKGJhc2VfZGlyLCBmaWxlLCAnY29udGV4dC5weScpCi0gICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29tcF9jb250ZXh0KToKLSAgICAgICAgICAgICAgICAgICAgY29tcF9wbHVnaW4gPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnb2VxYS4lcy4lcycgJSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbXBfbmFtZSwgJ2NvbnRleHQnKSkKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzc3ViY2xhc3MoY29tcF9wbHVnaW4uX2V4ZWN1dG9yX2NsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPRVRlc3RDb250ZXh0RXhlY3V0b3IpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiQ29tcG9uZW50ICVzIGluICVzLCBfZXhlY3V0b3JfY2xhc3MgIlwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzbid0IGRlcml2ZWQgZnJvbSBPRVRlc3RDb250ZXh0RXhlY3V0b3IuIlwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoY29tcF9uYW1lLCBjb21wX2NvbnRleHQpKQotCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzW2NvbXBfbmFtZV0gPSBjb21wX3BsdWdpbi5fZXhlY3V0b3JfY2xhc3MoKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiQ29tcG9uZW50ICVzIGluICVzIGRvbid0IGhhdmUgIlwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9leGVjdXRvcl9jbGFzcyBkZWZpbmVkLiIgJSAoY29tcF9uYW1lLCBjb21wX2NvbnRleHQpKQotCi0gICAgcmV0dXJuIGNvbXBvbmVudHMKK2xvZ2dlciA9IHNjcmlwdHV0aWxzLmxvZ2dlcl9jcmVhdGUoJ29lLXRlc3QnLCBzdHJlYW09c3lzLnN0ZG91dCkKIAogZGVmIG1haW4oKToKICAgICBwYXJzZXIgPSBhcmdwYXJzZV9vZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iT3BlbkVtYmVkZGVkIHRlc3QgdG9vbCIsCkBAIC03Myw3ICs0Nyw3IEBACiAgICAgZWxpZiBnbG9iYWxfYXJncy5xdWlldDoKICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuRVJST1IpCiAKLSAgICBjb21wb25lbnRzID0gX2xvYWRfdGVzdF9jb21wb25lbnRzKGxvZ2dlcikKKyAgICBjb21wb25lbnRzID0gbG9hZF90ZXN0X2NvbXBvbmVudHMobG9nZ2VyLCAnb2UtdGVzdCcpCiAKICAgICBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKGRlc3Q9InN1YnBhcnNlcl9uYW1lIiwgdGl0bGU9J3N1YmNvbW1hbmRzJywgbWV0YXZhcj0nPHN1YmNvbW1hbmQ+JykKICAgICBzdWJwYXJzZXJzLmFkZF9zdWJwYXJzZXJfZ3JvdXAoJ2NvbXBvbmVudHMnLCAnVGVzdCBjb21wb25lbnRzJykKQEAgLTkyLDYgKzY2LDggQEAKICAgICAgICAgcmV0ID0gZXJyLmNvZGUKICAgICBleGNlcHQgYXJncGFyc2Vfb2UuQXJndW1lbnRVc2FnZUVycm9yIGFzIGFlOgogICAgICAgICBwYXJzZXIuZXJyb3Jfc3ViY29tbWFuZChhZS5tZXNzYWdlLCBhZS5zdWJjb21tYW5kKQorICAgIGV4Y2VwdCBPRVFBUHJlUnVuIGFzIHByOgorICAgICAgICByZXQgPSAxCiAKICAgICByZXR1cm4gcmV0CiAKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3JlY2lwZXRvb2wgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9yZWNpcGV0b29sCmluZGV4IDM3NjVlYzcuLjNhM2M5YjcgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3JlY2lwZXRvb2wKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcmVjaXBldG9vbApAQCAtMzYsOCArMzYsOCBAQAogICAgIGltcG9ydCBiYi50aW5mb2lsCiAgICAgaW1wb3J0IGxvZ2dpbmcKICAgICB0aW5mb2lsID0gYmIudGluZm9pbC5UaW5mb2lsKHRyYWNraW5nPVRydWUpCi0gICAgdGluZm9pbC5wcmVwYXJlKG5vdCBwYXJzZXJlY2lwZXMpCiAgICAgdGluZm9pbC5sb2dnZXIuc2V0TGV2ZWwobG9nZ2VyLmdldEVmZmVjdGl2ZUxldmVsKCkpCisgICAgdGluZm9pbC5wcmVwYXJlKG5vdCBwYXJzZXJlY2lwZXMpCiAgICAgcmV0dXJuIHRpbmZvaWwKIAogZGVmIG1haW4oKToKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11CmluZGV4IDliNmQzMzAuLjBlZDFlZWMgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdQpAQCAtMjgsMTQgKzI4LDE4IEBACiBpbXBvcnQgZ2xvYgogaW1wb3J0IGNvbmZpZ3BhcnNlcgogCi1jbGFzcyBPRVBhdGhFcnJvcihFeGNlcHRpb24pOgorY2xhc3MgUnVuUWVtdUVycm9yKEV4Y2VwdGlvbik6CisgICAgIiIiQ3VzdG9tIGV4Y2VwdGlvbiB0byByYWlzZSBvbiBrbm93biBlcnJvcnMuIiIiCisgICAgcGFzcworCitjbGFzcyBPRVBhdGhFcnJvcihSdW5RZW11RXJyb3IpOgogICAgICIiIkN1c3RvbSBFeGNlcHRpb24gdG8gZ2l2ZSBiZXR0ZXIgZ3VpZGFuY2Ugb24gbWlzc2luZyBiaW5hcmllcyIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlKToKLSAgICAgICAgc2VsZi5tZXNzYWdlID0gIkluIG9yZGVyIGZvciB0aGlzIHNjcmlwdCB0byBkeW5hbWljYWxseSBpbmZlciBwYXRoc1xuIFwKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygiSW4gb3JkZXIgZm9yIHRoaXMgc2NyaXB0IHRvIGR5bmFtaWNhbGx5IGluZmVyIHBhdGhzXG4gXAoga2VybmVscyBvciBmaWxlc3lzdGVtIGltYWdlcywgeW91IGVpdGhlciBuZWVkIGJpdGJha2UgaW4geW91ciBQQVRIXG4gXAogb3IgdG8gc291cmNlIG9lLWluaXQtYnVpbGQtZW52IGJlZm9yZSBydW5uaW5nIHRoaXMgc2NyaXB0LlxuXG4gXAogRHluYW1pYyBwYXRoIGluZmVyZW5jZSBjYW4gYmUgYXZvaWRlZCBieSBwYXNzaW5nIGEgKi5xZW11Ym9vdC5jb25mIHRvXG4gXAotcnVucWVtdSwgaS5lLiBgcnVucWVtdSAvcGF0aC90by9teS1pbWFnZS1uYW1lLnFlbXVib290LmNvbmZgXG5cbiAlcyIgJSBtZXNzYWdlCitydW5xZW11LCBpLmUuIGBydW5xZW11IC9wYXRoL3RvL215LWltYWdlLW5hbWUucWVtdWJvb3QuY29uZmBcblxuICVzIiAlIG1lc3NhZ2UpCiAKIAogZGVmIGNyZWF0ZV9sb2dnZXIoKToKQEAgLTQ0LDcgKzQ4LDcgQEAKIAogICAgICMgY3JlYXRlIGNvbnNvbGUgaGFuZGxlciBhbmQgc2V0IGxldmVsIHRvIGRlYnVnCiAgICAgY2ggPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQotICAgIGNoLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICBjaC5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQogCiAgICAgIyBjcmVhdGUgZm9ybWF0dGVyCiAgICAgZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoJyUobmFtZSlzIC0gJShsZXZlbG5hbWUpcyAtICUobWVzc2FnZSlzJykKQEAgLTgxLDYgKzg1LDggQEAKICAgcWVtdXBhcmFtcz08eHl6PiAtIHNwZWNpZnkgY3VzdG9tIHBhcmFtZXRlcnMgdG8gUUVNVQogICBib290cGFyYW1zPTx4eXo+IC0gc3BlY2lmeSBjdXN0b20ga2VybmVsIHBhcmFtZXRlcnMgZHVyaW5nIGJvb3QKICAgaGVscCwgLWgsIC0taGVscDogcHJpbnQgdGhpcyB0ZXh0CisgIC1kLCAtLWRlYnVnOiBFbmFibGUgZGVidWcgb3V0cHV0CisgIC1xLCAtLXF1aXRlOiBIaWRlIG1vc3Qgb3V0cHV0IGV4Y2VwdCBlcnJvciBtZXNzYWdlcwogCiBFeGFtcGxlczoKICAgcnVucWVtdQpAQCAtOTAsMjUgKzk2LDI1IEBACiAgIHJ1bnFlbXUgcWVtdXg4Ni02NCBjb3JlLWltYWdlLXNhdG8gZXh0NAogICBydW5xZW11IHFlbXV4ODYtNjQgd2ljLWltYWdlLW1pbmltYWwgd2ljCiAgIHJ1bnFlbXUgcGF0aC90by9iekltYWdlLXFlbXV4ODYuYmluIHBhdGgvdG8vbmZzcm9vdGRpci8gc2VyaWFsCi0gIHJ1bnFlbXUgcWVtdXg4NiBpc28vaGRkaW1nL3ZtZGsvcWNvdzIvdmRpL3JhbWZzL2NwaW8uZ3ouLi4KKyAgcnVucWVtdSBxZW11eDg2IGlzby9oZGRpbWcvd2ljLnZtZGsvd2ljLnFjb3cyL3dpYy52ZGkvcmFtZnMvY3Bpby5nei4uLgogICBydW5xZW11IHFlbXV4ODYgcWVtdXBhcmFtcz0iLW0gMjU2IgogICBydW5xZW11IHFlbXV4ODYgYm9vdHBhcmFtcz0icHNwbGFzaD1mYWxzZSIKLSAgcnVucWVtdSBwYXRoL3RvLzxpbWFnZT4tPG1hY2hpbmU+LnZtZGsKICAgcnVucWVtdSBwYXRoL3RvLzxpbWFnZT4tPG1hY2hpbmU+LndpYworICBydW5xZW11IHBhdGgvdG8vPGltYWdlPi08bWFjaGluZT4ud2ljLnZtZGsKICIiIikKIAogZGVmIGNoZWNrX3R1bigpOgogICAgICIiIkNoZWNrIC9kZXYvbmV0L3R1biIiIgogICAgIGRldl90dW4gPSAnL2Rldi9uZXQvdHVuJwogICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkZXZfdHVuKToKLSAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUVU4gY29udHJvbCBkZXZpY2UgJXMgaXMgdW5hdmFpbGFibGU7IHlvdSBtYXkgbmVlZCB0byBlbmFibGUgVFVOIChlLmcuIHN1ZG8gbW9kcHJvYmUgdHVuKSIgJSBkZXZfdHVuKQorICAgICAgICByYWlzZSBSdW5RZW11RXJyb3IoIlRVTiBjb250cm9sIGRldmljZSAlcyBpcyB1bmF2YWlsYWJsZTsgeW91IG1heSBuZWVkIHRvIGVuYWJsZSBUVU4gKGUuZy4gc3VkbyBtb2Rwcm9iZSB0dW4pIiAlIGRldl90dW4pCiAKICAgICBpZiBub3Qgb3MuYWNjZXNzKGRldl90dW4sIG9zLldfT0spOgotICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRVTiBjb250cm9sIGRldmljZSAlcyBpcyBub3Qgd3JpdGFibGUsIHBsZWFzZSBmaXggKGUuZy4gc3VkbyBjaG1vZCA2NjYgJXMpIiAlIChkZXZfdHVuLCBkZXZfdHVuKSkKKyAgICAgICAgcmFpc2UgUnVuUWVtdUVycm9yKCJUVU4gY29udHJvbCBkZXZpY2UgJXMgaXMgbm90IHdyaXRhYmxlLCBwbGVhc2UgZml4IChlLmcuIHN1ZG8gY2htb2QgNjY2ICVzKSIgJSAoZGV2X3R1biwgZGV2X3R1bikpCiAKIGRlZiBjaGVja19saWJnbChxZW11X2Jpbik6CiAgICAgY21kID0gJ2xkZCAlcycgJSBxZW11X2JpbgotICAgIGxvZ2dlci5pbmZvKCdSdW5uaW5nICVzLi4uJyAlIGNtZCkKKyAgICBsb2dnZXIuZGVidWcoJ1J1bm5pbmcgJXMuLi4nICUgY21kKQogICAgIG5lZWRfZ2wgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKICAgICBpZiByZS5zZWFyY2goJ2xpYkdMVScsIG5lZWRfZ2wpOgogICAgICAgICAjIFdlIGNhbid0IHJ1biB3aXRob3V0IGEgbGliR0wuc28KQEAgLTEzNyw3ICsxNDMsNyBAQAogICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJZb3UgbmVlZCBsaWJHTC5zbyBhbmQgbGliR0xVLnNvIHRvIGV4aXN0IGluIHlvdXIgbGlicmFyeSBwYXRoIHRvIHJ1biB0aGUgUUVNVSBlbXVsYXRvci4iKQogICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVYnVudHUgcGFja2FnZSBuYW1lcyBhcmU6IGxpYmdsMS1tZXNhLWRldiBhbmQgbGliZ2x1MS1tZXNhLWRldi4iKQogICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJGZWRvcmEgcGFja2FnZSBuYW1lcyBhcmU6IG1lc2EtbGliR0wtZGV2ZWwgbWVzYS1saWJHTFUtZGV2ZWwuIikKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignJXMgcmVxdWlyZXMgbGliR0xVLCBidXQgbm90IGZvdW5kJyAlIHFlbXVfYmluKQorICAgICAgICAgICAgcmFpc2UgUnVuUWVtdUVycm9yKCclcyByZXF1aXJlcyBsaWJHTFUsIGJ1dCBub3QgZm91bmQnICUgcWVtdV9iaW4pCiAKIGRlZiBnZXRfZmlyc3RfZmlsZShjbWRzKToKICAgICAiIiJSZXR1cm4gZmlyc3QgZmlsZSBmb3VuZCBpbiB3aWxkY2FyZCBjbWRzIiIiCkBAIC0yMTIsOCArMjE4LDEwIEBACiAgICAgICAgIHNlbGYubG9ja19kZXNjcmlwdG9yID0gJycKICAgICAgICAgc2VsZi5iaXRiYWtlX2UgPSAnJwogICAgICAgICBzZWxmLnNuYXBzaG90ID0gRmFsc2UKLSAgICAgICAgc2VsZi5mc3R5cGVzID0gKCdleHQyJywgJ2V4dDMnLCAnZXh0NCcsICdqZmZzMicsICduZnMnLCAnYnRyZnMnLCAnY3Bpby5neicsICdjcGlvJywgJ3JhbWZzJykKLSAgICAgICAgc2VsZi52bXR5cGVzID0gKCdoZGRpbWcnLCAnaGRkZGlyZWN0JywgJ3dpYycsICd2bWRrJywgJ3Fjb3cyJywgJ3ZkaScsICdpc28nKQorICAgICAgICBzZWxmLmZzdHlwZXMgPSAoJ2V4dDInLCAnZXh0MycsICdleHQ0JywgJ2pmZnMyJywgJ25mcycsICdidHJmcycsCisgICAgICAgICAgICAgICAgICAgICAgICAnY3Bpby5neicsICdjcGlvJywgJ3JhbWZzJywgJ3Rhci5iejInLCAndGFyLmd6JykKKyAgICAgICAgc2VsZi52bXR5cGVzID0gKCdoZGRpbWcnLCAnaGRkZGlyZWN0JywgJ3dpYycsICd3aWMudm1kaycsCisgICAgICAgICAgICAgICAgICAgICAgICAnd2ljLnFjb3cyJywgJ3dpYy52ZGknLCAnaXNvJykKICAgICAgICAgc2VsZi5uZXR3b3JrX2RldmljZSA9ICItZGV2aWNlIGUxMDAwLG5ldGRldj1uZXQwLG1hYz1ATUFDQCIKICAgICAgICAgIyBVc2UgZGlmZmVyZW50IG1hYyBzZWN0aW9uIGZvciB0YXAgYW5kIHNsaXJwIHRvIGF2b2lkCiAgICAgICAgICMgY29uZmxpY3RzLCBlLmcuLCB3aGVuIG9uZSBpcyBydW5uaW5nIHdpdGggdGFwLCB0aGUgb3RoZXIgaXMKQEAgLTIyNCwxMyArMjMyLDE3IEBACiAgICAgICAgIHNlbGYubWFjX3RhcCA9ICI1Mjo1NDowMDoxMjozNDoiCiAgICAgICAgIHNlbGYubWFjX3NsaXJwID0gIjUyOjU0OjAwOjEyOjM1OiIKIAotICAgIGRlZiBhY3F1aXJlX2xvY2soc2VsZik6Ci0gICAgICAgIGxvZ2dlci5pbmZvKCJBY3F1aXJpbmcgbG9ja2ZpbGUgJXMuLi4iICUgc2VsZi5sb2NrKQorICAgIGRlZiBhY3F1aXJlX2xvY2soc2VsZiwgZXJyb3I9VHJ1ZSk6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygiQWNxdWlyaW5nIGxvY2tmaWxlICVzLi4uIiAlIHNlbGYubG9jaykKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5sb2NrX2Rlc2NyaXB0b3IgPSBvcGVuKHNlbGYubG9jaywgJ3cnKQogICAgICAgICAgICAgZmNudGwuZmxvY2soc2VsZi5sb2NrX2Rlc2NyaXB0b3IsIGZjbnRsLkxPQ0tfRVh8ZmNudGwuTE9DS19OQikKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgotICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkFjcXVpcmluZyBsb2NrZmlsZSAlcyBmYWlsZWQ6ICVzIiAlIChzZWxmLmxvY2ssIGUpKQorICAgICAgICAgICAgbXNnID0gIkFjcXVpcmluZyBsb2NrZmlsZSAlcyBmYWlsZWQ6ICVzIiAlIChzZWxmLmxvY2ssIGUpCisgICAgICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IobXNnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhtc2cpCiAgICAgICAgICAgICBpZiBzZWxmLmxvY2tfZGVzY3JpcHRvcjoKICAgICAgICAgICAgICAgICBzZWxmLmxvY2tfZGVzY3JpcHRvci5jbG9zZSgpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKQEAgLTI1NSwxMCArMjY3LDEwIEBACiAgICAgZGVmIGlzX2RlcGxveV9kaXJfaW1hZ2Uoc2VsZiwgcCk6CiAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIocCk6CiAgICAgICAgICAgICBpZiBub3QgcmUuc2VhcmNoKCcucWVtdWJvb3QuY29uZiQnLCAnXG4nLmpvaW4ob3MubGlzdGRpcihwKSksIHJlLk0pOgotICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDYW4ndCBmaW5kIHJlcXVpcmVkICoucWVtdWJvb3QuY29uZiBpbiAlcyIgJSBwKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiQ2FuJ3QgZmluZCByZXF1aXJlZCAqLnFlbXVib290LmNvbmYgaW4gJXMiICUgcCkKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIGlmIG5vdCBhbnkobWFwKGxhbWJkYSBuYW1lOiAnLWltYWdlLScgaW4gbmFtZSwgb3MubGlzdGRpcihwKSkpOgotICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDYW4ndCBmaW5kICotaW1hZ2UtKiBpbiAlcyIgJSBwKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiQ2FuJ3QgZmluZCAqLWltYWdlLSogaW4gJXMiICUgcCkKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIGVsc2U6CkBAIC0yNzEsMTUgKzI4MywxNyBAQAogICAgICAgICBpZiBub3Qgc2VsZi5mc3R5cGUgb3Igc2VsZi5mc3R5cGUgPT0gZnN0OgogICAgICAgICAgICAgaWYgZnN0ID09ICdyYW1mcyc6CiAgICAgICAgICAgICAgICAgZnN0ID0gJ2NwaW8uZ3onCisgICAgICAgICAgICBpZiBmc3QgaW4gKCd0YXIuYnoyJywgJ3Rhci5neicpOgorICAgICAgICAgICAgICAgIGZzdCA9ICduZnMnCiAgICAgICAgICAgICBzZWxmLmZzdHlwZSA9IGZzdAogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDb25mbGljdGluZzogRlNUWVBFICVzIGFuZCAlcyIgJSAoc2VsZi5mc3R5cGUsIGZzdCkpCisgICAgICAgICAgICByYWlzZSBSdW5RZW11RXJyb3IoIkNvbmZsaWN0aW5nOiBGU1RZUEUgJXMgYW5kICVzIiAlIChzZWxmLmZzdHlwZSwgZnN0KSkKIAogICAgIGRlZiBzZXRfbWFjaGluZV9kZXBsb3lfZGlyKHNlbGYsIG1hY2hpbmUsIGRlcGxveV9kaXJfaW1hZ2UpOgogICAgICAgICAiIiJTZXQgTUFDSElORSBhbmQgREVQTE9ZX0RJUl9JTUFHRSIiIgotICAgICAgICBsb2dnZXIuaW5mbygnTUFDSElORTogJXMnICUgbWFjaGluZSkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdNQUNISU5FOiAlcycgJSBtYWNoaW5lKQogICAgICAgICBzZWxmLnNldCgiTUFDSElORSIsIG1hY2hpbmUpCi0gICAgICAgIGxvZ2dlci5pbmZvKCdERVBMT1lfRElSX0lNQUdFOiAlcycgJSBkZXBsb3lfZGlyX2ltYWdlKQorICAgICAgICBsb2dnZXIuZGVidWcoJ0RFUExPWV9ESVJfSU1BR0U6ICVzJyAlIGRlcGxveV9kaXJfaW1hZ2UpCiAgICAgICAgIHNlbGYuc2V0KCJERVBMT1lfRElSX0lNQUdFIiwgZGVwbG95X2Rpcl9pbWFnZSkKIAogICAgIGRlZiBjaGVja19hcmdfbmZzKHNlbGYsIHApOgpAQCAtMzI5LDMwICszNDMsMzAgQEAKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiJXMgZG9lc24ndCBleGlzdCIgJSBxYikKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDYW4ndCBmaW5kIEZTVFlQRSBmcm9tOiAlcyIgJSBwKQorICAgICAgICAgICAgICAgIHJhaXNlIFJ1blFlbXVFcnJvcigiQ2FuJ3QgZmluZCBGU1RZUEUgZnJvbTogJXMiICUgcCkKIAogICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIocCkgb3IgcmUuc2VhcmNoKCc6JywgcCkgYW5kIHJlLnNlYXJjaCgnLycsIHApOgogICAgICAgICAgICAgaWYgc2VsZi5pc19kZXBsb3lfZGlyX2ltYWdlKHApOgotICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdERVBMT1lfRElSX0lNQUdFOiAlcycgJSBwKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnREVQTE9ZX0RJUl9JTUFHRTogJXMnICUgcCkKICAgICAgICAgICAgICAgICBzZWxmLnNldCgiREVQTE9ZX0RJUl9JTUFHRSIsIHApCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJBc3N1bWluZyAlcyBpcyBhbiBuZnMgcm9vdGZzIiAlIHApCisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJBc3N1bWluZyAlcyBpcyBhbiBuZnMgcm9vdGZzIiAlIHApCiAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19hcmdfbmZzKHApCiAgICAgICAgIGVsaWYgb3MucGF0aC5iYXNlbmFtZShwKS5zdGFydHN3aXRoKCdvdm1mJyk6CiAgICAgICAgICAgICBzZWxmLm92bWZfYmlvcy5hcHBlbmQocCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93biBwYXRoIGFyZyAlcyIgJSBwKQorICAgICAgICAgICAgcmFpc2UgUnVuUWVtdUVycm9yKCJVbmtub3duIHBhdGggYXJnICVzIiAlIHApCiAKICAgICBkZWYgY2hlY2tfYXJnX21hY2hpbmUoc2VsZiwgYXJnKToKICAgICAgICAgIiIiQ2hlY2sgd2hldGhlciBpdCBpcyBhIG1hY2hpbmUiIiIKICAgICAgICAgaWYgc2VsZi5nZXQoJ01BQ0hJTkUnKSA9PSBhcmc6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgZWxpZiBzZWxmLmdldCgnTUFDSElORScpIGFuZCBzZWxmLmdldCgnTUFDSElORScpICE9IGFyZzoKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTWF5YmUgY29uZmxpY3RlZCBNQUNISU5FOiAlcyB2cyAlcyIgJSAoc2VsZi5nZXQoJ01BQ0hJTkUnKSwgYXJnKSkKKyAgICAgICAgICAgIHJhaXNlIFJ1blFlbXVFcnJvcigiTWF5YmUgY29uZmxpY3RlZCBNQUNISU5FOiAlcyB2cyAlcyIgJSAoc2VsZi5nZXQoJ01BQ0hJTkUnKSwgYXJnKSkKICAgICAgICAgZWxpZiByZS5zZWFyY2goJy8nLCBhcmcpOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIGFyZzogJXMiICUgYXJnKQorICAgICAgICAgICAgcmFpc2UgUnVuUWVtdUVycm9yKCJVbmtub3duIGFyZzogJXMiICUgYXJnKQogCi0gICAgICAgIGxvZ2dlci5pbmZvKCdBc3N1bWluZyBNQUNISU5FID0gJXMnICUgYXJnKQorICAgICAgICBsb2dnZXIuZGVidWcoJ0Fzc3VtaW5nIE1BQ0hJTkUgPSAlcycgJSBhcmcpCiAKICAgICAgICAgIyBpZiB3ZSdyZSBydW5uaW5nIHVuZGVyIHRlc3RpbWFnZSwgb3Igc2ltaWxhcmx5IGFzIGEgY2hpbGQKICAgICAgICAgIyBvZiBhbiBleGlzdGluZyBiaXRiYWtlIGludm9jYXRpb24sIHdlIGNhbid0IGludm9rZSBiaXRiYWtlCkBAIC0zODEsNyArMzk1LDcgQEAKICAgICAgICAgaWYgczoKICAgICAgICAgICAgIGRlcGxveV9kaXJfaW1hZ2UgPSBzLmdyb3VwKDEpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oImJpdGJha2UgLWUgJXMiICUgc2VsZi5iaXRiYWtlX2UpCisgICAgICAgICAgICByYWlzZSBSdW5RZW11RXJyb3IoImJpdGJha2UgLWUgJXMiICUgc2VsZi5iaXRiYWtlX2UpCiAgICAgICAgIGlmIHNlbGYuaXNfZGVwbG95X2Rpcl9pbWFnZShkZXBsb3lfZGlyX2ltYWdlKToKICAgICAgICAgICAgIHNlbGYuc2V0X21hY2hpbmVfZGVwbG95X2RpcihhcmcsIGRlcGxveV9kaXJfaW1hZ2UpCiAgICAgICAgIGVsc2U6CkBAIC0zODksNiArNDAzLDE2IEBACiAgICAgICAgICAgICBzZWxmLnNldCgiTUFDSElORSIsIGFyZykKIAogICAgIGRlZiBjaGVja19hcmdzKHNlbGYpOgorICAgICAgICBmb3IgZGVidWcgaW4gKCItZCIsICItLWRlYnVnIik6CisgICAgICAgICAgICBpZiBkZWJ1ZyBpbiBzeXMuYXJndjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKyAgICAgICAgICAgICAgICBzeXMuYXJndi5yZW1vdmUoZGVidWcpCisKKyAgICAgICAgZm9yIHF1aWV0IGluICgiLXEiLCAiLS1xdWlldCIpOgorICAgICAgICAgICAgaWYgcXVpZXQgaW4gc3lzLmFyZ3Y6CisgICAgICAgICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuRVJST1IpCisgICAgICAgICAgICAgICAgc3lzLmFyZ3YucmVtb3ZlKHF1aWV0KQorCiAgICAgICAgIHVua25vd25fYXJnID0gIiIKICAgICAgICAgZm9yIGFyZyBpbiBzeXMuYXJndlsxOl06CiAgICAgICAgICAgICBpZiBhcmcgaW4gc2VsZi5mc3R5cGVzICsgc2VsZi52bXR5cGVzOgpAQCAtNDM1LDcgKzQ1OSw5IEBACiAgICAgICAgICAgICAgICAgaWYgKG5vdCB1bmtub3duX2FyZykgb3IgdW5rbm93bl9hcmcgPT0gYXJnOgogICAgICAgICAgICAgICAgICAgICB1bmtub3duX2FyZyA9IGFyZwogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ2FuJ3QgaGFuZGxlIHR3byB1bmtub3duIGFyZ3M6ICVzICVzIiAlICh1bmtub3duX2FyZywgYXJnKSkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVuUWVtdUVycm9yKCJDYW4ndCBoYW5kbGUgdHdvIHVua25vd24gYXJnczogJXMgJXNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUcnkgJ3J1bnFlbXUgaGVscCcgb24gaG93IHRvIHVzZSBpdCIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVua25vd25fYXJnLCBhcmcpKQogICAgICAgICAjIENoZWNrIHRvIG1ha2Ugc3VyZSBpdCBpcyBhIHZhbGlkIG1hY2hpbmUKICAgICAgICAgaWYgdW5rbm93bl9hcmc6CiAgICAgICAgICAgICBpZiBzZWxmLmdldCgnTUFDSElORScpID09IHVua25vd25fYXJnOgpAQCAtNDQ4LDcgKzQ3NCw3IEBACiAKICAgICAgICAgICAgIHNlbGYuY2hlY2tfYXJnX21hY2hpbmUodW5rbm93bl9hcmcpCiAKLSAgICAgICAgaWYgbm90IHNlbGYuZ2V0KCdERVBMT1lfRElSX0lNQUdFJyk6CisgICAgICAgIGlmIG5vdCAoc2VsZi5nZXQoJ0RFUExPWV9ESVJfSU1BR0UnKSBvciBzZWxmLnFiY29uZmxvYWQpOgogICAgICAgICAgICAgc2VsZi5sb2FkX2JpdGJha2VfZW52KCkKICAgICAgICAgICAgIHMgPSByZS5zZWFyY2goJ15ERVBMT1lfRElSX0lNQUdFPSIoLiopIicsIHNlbGYuYml0YmFrZV9lLCByZS5NKQogICAgICAgICAgICAgaWYgczoKQEAgLTQ2MSw3ICs0ODcsNyBAQAogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgaWYgbm90IHNlbGYuZ2V0KCdRQl9DUFVfS1ZNJyk6Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlFCX0NQVV9LVk0gaXMgTlVMTCwgdGhpcyBib2FyZCBkb2Vzbid0IHN1cHBvcnQga3ZtIikKKyAgICAgICAgICAgIHJhaXNlIFJ1blFlbXVFcnJvcigiUUJfQ1BVX0tWTSBpcyBOVUxMLCB0aGlzIGJvYXJkIGRvZXNuJ3Qgc3VwcG9ydCBrdm0iKQogCiAgICAgICAgIHNlbGYucWVtdV9vcHRfc2NyaXB0ICs9ICcgJXMgJXMnICUgKHNlbGYuZ2V0KCdRQl9NQUNISU5FJyksIHNlbGYuZ2V0KCdRQl9DUFVfS1ZNJykpCiAgICAgICAgIHlvY3RvX2t2bV93aWtpID0gImh0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvSG93X3RvX2VuYWJsZV9LVk1fZm9yX1Bva3lfcWVtdSIKQEAgLTQ3MywxMiArNDk5LDEyIEBACiAgICAgICAgIGlmIG5vdCBrdm1fY2FwOgogICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJZb3UgYXJlIHRyeWluZyB0byBlbmFibGUgS1ZNIG9uIGEgY3B1IHdpdGhvdXQgVlQgc3VwcG9ydC4iKQogICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJSZW1vdmUga3ZtIGZyb20gdGhlIGNvbW1hbmQtbGluZSwgb3IgcmVmZXI6IikKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbih5b2N0b19rdm1fd2lraSkKKyAgICAgICAgICAgIHJhaXNlIFJ1blFlbXVFcnJvcih5b2N0b19rdm1fd2lraSkKIAogICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGV2X2t2bSk6CiAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIk1pc3NpbmcgS1ZNIGRldmljZS4gSGF2ZSB5b3UgaW5zZXJ0ZWQga3ZtIG1vZHVsZXM/IikKICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiRm9yIGZ1cnRoZXIgaGVscCBzZWU6IikKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbih5b2N0b19rdm1fd2lraSkKKyAgICAgICAgICAgIHJhaXNlIFJ1blFlbXVFcnJvcih5b2N0b19rdm1fd2lraSkKIAogICAgICAgICBpZiBvcy5hY2Nlc3MoZGV2X2t2bSwgb3MuV19PS3xvcy5SX09LKToKICAgICAgICAgICAgIHNlbGYucWVtdV9vcHRfc2NyaXB0ICs9ICcgLWVuYWJsZS1rdm0nCkBAIC00OTAsMTggKzUxNiwxOCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJZb3UgaGF2ZSBubyByZWFkIG9yIHdyaXRlIHBlcm1pc3Npb24gb24gL2Rldi9rdm0uIikKICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiUGxlYXNlIGNoYW5nZSB0aGUgb3duZXJzaGlwIG9mIHRoaXMgZmlsZSBhcyBkZXNjcmliZWQgYXQ6IikKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbih5b2N0b19rdm1fd2lraSkKKyAgICAgICAgICAgIHJhaXNlIFJ1blFlbXVFcnJvcih5b2N0b19rdm1fd2lraSkKIAogICAgICAgICBpZiBzZWxmLnZob3N0X2VuYWJsZWQ6CiAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGV2X3Zob3N0KToKICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIk1pc3NpbmcgdmlydGlvIG5ldCBkZXZpY2UuIEhhdmUgeW91IGluc2VydGVkIHZob3N0LW5ldCBtb2R1bGU/IikKICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkZvciBmdXJ0aGVyIGhlbHAgc2VlOiIpCi0gICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKHlvY3RvX3BhcmF2aXJ0X2t2bV93aWtpKQorICAgICAgICAgICAgICAgIHJhaXNlIFJ1blFlbXVFcnJvcih5b2N0b19wYXJhdmlydF9rdm1fd2lraSkKIAogICAgICAgICBpZiBub3Qgb3MuYWNjZXNzKGRldl9rdm0sIG9zLldfT0t8b3MuUl9PSyk6CiAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJZb3UgaGF2ZSBubyByZWFkIG9yIHdyaXRlIHBlcm1pc3Npb24gb24gL2Rldi92aG9zdC1uZXQuIikKICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlBsZWFzZSBjaGFuZ2UgdGhlIG93bmVyc2hpcCBvZiB0aGlzIGZpbGUgYXMgZGVzY3JpYmVkIGF0OiIpCi0gICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKHlvY3RvX2t2bV93aWtpKQorICAgICAgICAgICAgICAgIHJhaXNlIFJ1blFlbXVFcnJvcih5b2N0b19rdm1fd2lraSkKIAogICAgIGRlZiBjaGVja19mc3R5cGUoc2VsZik6CiAgICAgICAgICIiIkNoZWNrIGFuZCBzZXR1cCBGU1RZUEUiIiIKQEAgLTUxMCw3ICs1MzYsNyBAQAogICAgICAgICAgICAgaWYgZnN0eXBlOgogICAgICAgICAgICAgICAgIHNlbGYuZnN0eXBlID0gZnN0eXBlCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRlNUWVBFIGlzIE5VTEwhIikKKyAgICAgICAgICAgICAgICByYWlzZSBSdW5RZW11RXJyb3IoIkZTVFlQRSBpcyBOVUxMISIpCiAKICAgICBkZWYgY2hlY2tfcm9vdGZzKHNlbGYpOgogICAgICAgICAiIiJDaGVjayBhbmQgc2V0IHJvb3RmcyIiIgpAQCAtNTIyLDcgKzU0OCw3IEBACiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5yb290ZnM6CiAgICAgICAgICAgICAgICAgc2VsZi5yb290ZnMgPSBzZWxmLmdldCgnUk9PVEZTJykKICAgICAgICAgICAgIGVsaWYgc2VsZi5nZXQoJ1JPT1RGUycpICE9IHNlbGYucm9vdGZzOgotICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTWF5YmUgY29uZmxpY3RlZCBST09URlM6ICVzIHZzICVzIiAlIChzZWxmLmdldCgnUk9PVEZTJyksIHNlbGYucm9vdGZzKSkKKyAgICAgICAgICAgICAgICByYWlzZSBSdW5RZW11RXJyb3IoIk1heWJlIGNvbmZsaWN0ZWQgUk9PVEZTOiAlcyB2cyAlcyIgJSAoc2VsZi5nZXQoJ1JPT1RGUycpLCBzZWxmLnJvb3RmcykpCiAKICAgICAgICAgaWYgc2VsZi5mc3R5cGUgPT0gJ25mcyc6CiAgICAgICAgICAgICByZXR1cm4KQEAgLTUzOCwxMCArNTY0LDEwIEBACiAgICAgICAgICAgICBjbWRzID0gKGNtZF9uYW1lLCBjbWRfbGluaykKICAgICAgICAgICAgIHNlbGYucm9vdGZzID0gZ2V0X2ZpcnN0X2ZpbGUoY21kcykKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJvb3RmczoKLSAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byBmaW5kIHJvb3RmczogJXMgb3IgJXMiICUgY21kcykKKyAgICAgICAgICAgICAgICByYWlzZSBSdW5RZW11RXJyb3IoIkZhaWxlZCB0byBmaW5kIHJvb3RmczogJXMgb3IgJXMiICUgY21kcykKIAogICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5yb290ZnMpOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDYW4ndCBmaW5kIHJvb3RmczogJXMiICUgc2VsZi5yb290ZnMpCisgICAgICAgICAgICByYWlzZSBSdW5RZW11RXJyb3IoIkNhbid0IGZpbmQgcm9vdGZzOiAlcyIgJSBzZWxmLnJvb3RmcykKIAogICAgIGRlZiBjaGVja19vdm1mKHNlbGYpOgogICAgICAgICAiIiJDaGVjayBhbmQgc2V0IGZ1bGwgcGF0aCBmb3IgT1ZNRiBmaXJtd2FyZSBhbmQgdmFyaWFibGUgZmlsZShzKS4iIiIKQEAgLTU1NSw3ICs1ODEsNyBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLm92bWZfYmlvc1tpbmRleF0gPSBwYXRoCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ2FuJ3QgZmluZCBPVk1GIGZpcm13YXJlOiAlcyIgJSBvdm1mKQorICAgICAgICAgICAgICAgIHJhaXNlIFJ1blFlbXVFcnJvcigiQ2FuJ3QgZmluZCBPVk1GIGZpcm13YXJlOiAlcyIgJSBvdm1mKQogCiAgICAgZGVmIGNoZWNrX2tlcm5lbChzZWxmKToKICAgICAgICAgIiIiQ2hlY2sgYW5kIHNldCBrZXJuZWwsIGR0YiIiIgpAQCAtNTc4LDEwICs2MDQsMTAgQEAKICAgICAgICAgICAgIGNtZHMgPSAoa2VybmVsX21hdGNoX25hbWUsIGtlcm5lbF9tYXRjaF9saW5rLCBrZXJuZWxfc3RhcnRzd2l0aCkKICAgICAgICAgICAgIHNlbGYua2VybmVsID0gZ2V0X2ZpcnN0X2ZpbGUoY21kcykKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmtlcm5lbDoKLSAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0tFUk5FTCBub3QgZm91bmQ6ICVzLCAlcyBvciAlcycgJSBjbWRzKQorICAgICAgICAgICAgICAgIHJhaXNlIFJ1blFlbXVFcnJvcignS0VSTkVMIG5vdCBmb3VuZDogJXMsICVzIG9yICVzJyAlIGNtZHMpCiAKICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYua2VybmVsKToKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiS0VSTkVMICVzIG5vdCBmb3VuZCIgJSBzZWxmLmtlcm5lbCkKKyAgICAgICAgICAgIHJhaXNlIFJ1blFlbXVFcnJvcigiS0VSTkVMICVzIG5vdCBmb3VuZCIgJSBzZWxmLmtlcm5lbCkKIAogICAgICAgICBkdGIgPSBzZWxmLmdldCgnUUJfRFRCJykKICAgICAgICAgaWYgZHRiOgpAQCAtNTkxLDcgKzYxNyw3IEBACiAgICAgICAgICAgICBjbWRzID0gKGNtZF9tYXRjaCwgY21kX3N0YXJ0c3dpdGgsIGNtZF93aWxkKQogICAgICAgICAgICAgc2VsZi5kdGIgPSBnZXRfZmlyc3RfZmlsZShjbWRzKQogICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuZHRiKToKLSAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0RUQiBub3QgZm91bmQ6ICVzLCAlcyBvciAlcycgJSBjbWRzKQorICAgICAgICAgICAgICAgIHJhaXNlIFJ1blFlbXVFcnJvcignRFRCIG5vdCBmb3VuZDogJXMsICVzIG9yICVzJyAlIGNtZHMpCiAKICAgICBkZWYgY2hlY2tfYmlvc2RpcihzZWxmKToKICAgICAgICAgIiIiQ2hlY2sgY3VzdG9tYmlvc2RpciIiIgpAQCAtNjA3LDExICs2MzMsMTEgQEAKICAgICAgICAgICAgICAgICBicmVhawogCiAgICAgICAgIGlmIGJpb3NkaXI6Ci0gICAgICAgICAgICBsb2dnZXIuaW5mbygiQXNzdW1pbmcgYmlvc2RpciBpczogJXMiICUgYmlvc2RpcikKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiQXNzdW1pbmcgYmlvc2RpciBpczogJXMiICUgYmlvc2RpcikKICAgICAgICAgICAgIHNlbGYucWVtdV9vcHRfc2NyaXB0ICs9ICcgLUwgJXMnICUgYmlvc2RpcgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJDdXN0b20gQklPUyBkaXJlY3Rvcnkgbm90IGZvdW5kLiBUcmllZDogJXMsICVzLCBhbmQgJXMiICUgKHNlbGYuY3VzdG9tYmlvc2RpciwgYmlvc2Rpcl9uYXRpdmUsIGJpb3NkaXJfaG9zdCkpCi0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkludmFsaWQgY3VzdG9tYmlvc2RpcjogJXMiICUgc2VsZi5jdXN0b21iaW9zZGlyKQorICAgICAgICAgICAgcmFpc2UgUnVuUWVtdUVycm9yKCJJbnZhbGlkIGN1c3RvbWJpb3NkaXI6ICVzIiAlIHNlbGYuY3VzdG9tYmlvc2RpcikKIAogICAgIGRlZiBjaGVja19tZW0oc2VsZik6CiAgICAgICAgIHMgPSByZS5zZWFyY2goJy1tICsoWzAtOV0rKScsIHNlbGYucWVtdV9vcHRfc2NyaXB0KQpAQCAtNjM5LDcgKzY2NSw3IEBACiAgICAgICAgICMgQ2hlY2sgYXVkaW8KICAgICAgICAgaWYgc2VsZi5hdWRpb19lbmFibGVkOgogICAgICAgICAgICAgaWYgbm90IHNlbGYuZ2V0KCdRQl9BVURJT19EUlYnKToKLSAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlFCX0FVRElPX0RSViBpcyBOVUxMLCB0aGlzIGJvYXJkIGRvZXNuJ3Qgc3VwcG9ydCBhdWRpbyIpCisgICAgICAgICAgICAgICAgcmFpc2UgUnVuUWVtdUVycm9yKCJRQl9BVURJT19EUlYgaXMgTlVMTCwgdGhpcyBib2FyZCBkb2Vzbid0IHN1cHBvcnQgYXVkaW8iKQogICAgICAgICAgICAgaWYgbm90IHNlbGYuZ2V0KCdRQl9BVURJT19PUFQnKToKICAgICAgICAgICAgICAgICBsb2dnZXIud2FybignUUJfQVVESU9fT1BUIGlzIE5VTEwsIHlvdSBtYXkgbmVlZCBkZWZpbmUgaXQgdG8gbWFrZSBhdWRpbyB3b3JrJykKICAgICAgICAgICAgIGVsc2U6CkBAIC02NjIsNyArNjg4LDcgQEAKICAgICAgICAgICAgIGlmIHNlbGYuZ2V0KCdERVBMT1lfRElSX0lNQUdFJyk6CiAgICAgICAgICAgICAgICAgZGVwbG95X2Rpcl9pbWFnZSA9IHNlbGYuZ2V0KCdERVBMT1lfRElSX0lNQUdFJykKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkNhbid0IGZpbmQgcWVtdWJvb3QgY29uZiBmaWxlLCBERVBMT1lfRElSX0lNQUdFIGlzIE5VTEwhIikKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiQ2FuJ3QgZmluZCBxZW11Ym9vdCBjb25mIGZpbGUsIERFUExPWV9ESVJfSU1BR0UgaXMgTlVMTCEiKQogICAgICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgICAgICBpZiBzZWxmLnJvb3RmcyBhbmQgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYucm9vdGZzKToKQEAgLTY3NCw4ICs3MDAsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucm9vdGZzLCBtYWNoaW5lKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBjbWQgPSAnbHMgLXQgJXMvKi5xZW11Ym9vdC5jb25mJyAlICBkZXBsb3lfZGlyX2ltYWdlCi0gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1J1bm5pbmcgJXMuLi4nICUgY21kKQotICAgICAgICAgICAgICAgIHFicyA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpLmRlY29kZSgndXRmLTgnKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnUnVubmluZyAlcy4uLicgJSBjbWQpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBxYnMgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHNoZWxsPVRydWUpLmRlY29kZSgndXRmLTgnKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1blFlbXVFcnJvcihlcnIpCiAgICAgICAgICAgICAgICAgaWYgcWJzOgogICAgICAgICAgICAgICAgICAgICBmb3IgcWIgaW4gcWJzLnNwbGl0KCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAjIERvbid0IHVzZSBpbml0cmFtZnMgd2hlbiBvdGhlciBjaG9pY2VzIHVubGVzcyBmc3R5cGUgaXMgcmFtZnMKQEAgLTY5NCwxNCArNzIzLDE4IEBACiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5xZW11Ym9vdCk6Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byBmaW5kICVzICh3cm9uZyBpbWFnZSBuYW1lIG9yIEJTUCBkb2VzIG5vdCBzdXBwb3J0IHJ1bm5pbmcgdW5kZXIgcWVtdT8pLiIgJSBzZWxmLnFlbXVib290KQorICAgICAgICAgICAgcmFpc2UgUnVuUWVtdUVycm9yKCJGYWlsZWQgdG8gZmluZCAlcyAod3JvbmcgaW1hZ2UgbmFtZSBvciBCU1AgZG9lcyBub3Qgc3VwcG9ydCBydW5uaW5nIHVuZGVyIHFlbXU/KS4iICUgc2VsZi5xZW11Ym9vdCkKIAotICAgICAgICBsb2dnZXIuaW5mbygnQ09ORkZJTEU6ICVzJyAlIHNlbGYucWVtdWJvb3QpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygnQ09ORkZJTEU6ICVzJyAlIHNlbGYucWVtdWJvb3QpCiAKICAgICAgICAgY2YgPSBjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyKCkKICAgICAgICAgY2YucmVhZChzZWxmLnFlbXVib290KQogICAgICAgICBmb3IgaywgdiBpbiBjZi5pdGVtcygnY29uZmlnX2JzcCcpOgogICAgICAgICAgICAga191cHBlciA9IGsudXBwZXIoKQorICAgICAgICAgICAgaWYgdi5zdGFydHN3aXRoKCIuLi8iKToKKyAgICAgICAgICAgICAgICB2ID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShzZWxmLnFlbXVib290KSArICIvIiArIHYpCisgICAgICAgICAgICBlbGlmIHYgPT0gIi4iOgorICAgICAgICAgICAgICAgIHYgPSBvcy5wYXRoLmRpcm5hbWUoc2VsZi5xZW11Ym9vdCkKICAgICAgICAgICAgIHNlbGYuc2V0KGtfdXBwZXIsIHYpCiAKICAgICBkZWYgdmFsaWRhdGVfcGF0aHMoc2VsZik6CkBAIC03ODksMTYgKzgyMiwxMiBAQAogICAgICAgICAgICAgYWxsX2luc3RhbmNlcy5zb3J0KGtleT1pbnQpCiAgICAgICAgICAgICBzZWxmLm5mc19pbnN0YW5jZSA9IGludChhbGxfaW5zdGFuY2VzLnBvcCgpKSArIDEKIAotICAgICAgICBtb3VudGRfcnBjcG9ydCA9IDIxMTExICsgc2VsZi5uZnNfaW5zdGFuY2UKLSAgICAgICAgbmZzZF9ycGNwb3J0ID0gMTExMTEgKyBzZWxmLm5mc19pbnN0YW5jZQogICAgICAgICBuZnNkX3BvcnQgPSAzMDQ5ICsgMiAqIHNlbGYubmZzX2luc3RhbmNlCiAgICAgICAgIG1vdW50ZF9wb3J0ID0gMzA0OCArIDIgKiBzZWxmLm5mc19pbnN0YW5jZQogCiAgICAgICAgICMgRXhwb3J0IHZhcnMgZm9yIHJ1bnFlbXUtZXhwb3J0LXJvb3RmcwogICAgICAgICBleHBvcnRfZGljdCA9IHsKICAgICAgICAgICAgICdORlNfSU5TVEFOQ0UnOiBzZWxmLm5mc19pbnN0YW5jZSwKLSAgICAgICAgICAgICdNT1VOVERfUlBDUE9SVCc6IG1vdW50ZF9ycGNwb3J0LAotICAgICAgICAgICAgJ05GU0RfUlBDUE9SVCc6IG5mc2RfcnBjcG9ydCwKICAgICAgICAgICAgICdORlNEX1BPUlQnOiBuZnNkX3BvcnQsCiAgICAgICAgICAgICAnTU9VTlREX1BPUlQnOiBtb3VudGRfcG9ydCwKICAgICAgICAgfQpAQCAtODA2LDcgKzgzNSw3IEBACiAgICAgICAgICAgICAjIFVzZSAnJXMnIHNpbmNlIHRoZXkgYXJlIGludGVnZXJzCiAgICAgICAgICAgICBvcy5wdXRlbnYoaywgJyVzJyAlIHYpCiAKLSAgICAgICAgc2VsZi51bmZzX29wdHM9Im5mc3ZlcnM9Myxwb3J0PSVzLG1vdW50cHJvZz0lcyxuZnNwcm9nPSVzLHVkcCxtb3VudHBvcnQ9JXMiICUgKG5mc2RfcG9ydCwgbW91bnRkX3JwY3BvcnQsIG5mc2RfcnBjcG9ydCwgbW91bnRkX3BvcnQpCisgICAgICAgIHNlbGYudW5mc19vcHRzPSJuZnN2ZXJzPTMscG9ydD0lcyx1ZHAsbW91bnRwb3J0PSVzIiAlIChuZnNkX3BvcnQsIG1vdW50ZF9wb3J0KQogCiAgICAgICAgICMgRXh0cmFjdCAudGFyLmJ6MiBvciAudGFyLmJ6IGlmIG5vIG5mcyBkaXIKICAgICAgICAgaWYgbm90IChzZWxmLnJvb3RmcyBhbmQgb3MucGF0aC5pc2RpcihzZWxmLnJvb3RmcykpOgpAQCAtODI0LDEyICs4NTMsMTIgQEAKICAgICAgICAgICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKHNyYzIpOgogICAgICAgICAgICAgICAgICAgICBzcmMgPSBzcmMyCiAgICAgICAgICAgICAgICAgaWYgbm90IHNyYzoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJObyBORlNfRElSIGlzIHNldCwgYW5kIGNhbid0IGZpbmQgJXMgb3IgJXMgdG8gZXh0cmFjdCIgJSAoc3JjMSwgc3JjMikpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1blFlbXVFcnJvcigiTm8gTkZTX0RJUiBpcyBzZXQsIGFuZCBjYW4ndCBmaW5kICVzIG9yICVzIHRvIGV4dHJhY3QiICUgKHNyYzEsIHNyYzIpKQogICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdORlNfRElSIG5vdCBmb3VuZCwgZXh0cmFjdGluZyAlcyB0byAlcycgJSAoc3JjLCBkZXN0KSkKICAgICAgICAgICAgICAgICBjbWQgPSAncnVucWVtdS1leHRyYWN0LXNkayAlcyAlcycgJSAoc3JjLCBkZXN0KQogICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdSdW5uaW5nICVzLi4uJyAlIGNtZCkKICAgICAgICAgICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoY21kLCBzaGVsbD1UcnVlKSAhPSAwOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0ZhaWxlZCB0byBydW4gJXMnICUgY21kKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBSdW5RZW11RXJyb3IoJ0ZhaWxlZCB0byBydW4gJXMnICUgY21kKQogICAgICAgICAgICAgICAgIHNlbGYuY2xlYW5fbmZzX2RpciA9IFRydWUKICAgICAgICAgICAgICAgICBzZWxmLnJvb3RmcyA9IGRlc3QKIApAQCAtODM3LDcgKzg2Niw3IEBACiAgICAgICAgIGNtZCA9ICdydW5xZW11LWV4cG9ydC1yb290ZnMgc3RhcnQgJXMnICUgc2VsZi5yb290ZnMKICAgICAgICAgbG9nZ2VyLmluZm8oJ1J1bm5pbmcgJXMuLi4nICUgY21kKQogICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoY21kLCBzaGVsbD1UcnVlKSAhPSAwOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdGYWlsZWQgdG8gcnVuICVzJyAlIGNtZCkKKyAgICAgICAgICAgIHJhaXNlIFJ1blFlbXVFcnJvcignRmFpbGVkIHRvIHJ1biAlcycgJSBjbWQpCiAKICAgICAgICAgc2VsZi5uZnNfcnVubmluZyA9IFRydWUKIApAQCAtODQ5LDcgKzg3OCw3IEBACiAgICAgICAgIHNlbGYua2VybmVsX2NtZGxpbmVfc2NyaXB0ICs9ICcgaXA9ZGhjcCcKICAgICAgICAgIyBQb3J0IG1hcHBpbmcKICAgICAgICAgaG9zdGZ3ZCA9ICIsaG9zdGZ3ZD10Y3A6OjIyMjItOjIyLGhvc3Rmd2Q9dGNwOjoyMzIzLToyMyIKLSAgICAgICAgcWJfc2xpcnBfb3B0X2RlZmF1bHQgPSAiLW5ldGRldiB1c2VyLGlkPW5ldDAlcyIgJSBob3N0ZndkCisgICAgICAgIHFiX3NsaXJwX29wdF9kZWZhdWx0ID0gIi1uZXRkZXYgdXNlcixpZD1uZXQwJXMsdGZ0cD0lcyIgJSAoaG9zdGZ3ZCwgc2VsZi5nZXQoJ0RFUExPWV9ESVJfSU1BR0UnKSkKICAgICAgICAgcWJfc2xpcnBfb3B0ID0gc2VsZi5nZXQoJ1FCX1NMSVJQX09QVCcpIG9yIHFiX3NsaXJwX29wdF9kZWZhdWx0CiAgICAgICAgICMgRmlndXJlIG91dCB0aGUgcG9ydAogICAgICAgICBwb3J0cyA9IHJlLmZpbmRhbGwoJ2hvc3Rmd2Q9W14tXSo6KFswLTldKyktW14sLV0qJywgcWJfc2xpcnBfb3B0KQpAQCAtODg4LDYgKzkxNyw5IEBACiAgICAgICAgIGxvY2tkaXIgPSAiL3RtcC9xZW11LXRhcC1sb2NrcyIKIAogICAgICAgICBpZiBub3QgKHNlbGYucWVtdWlmdXAgYW5kIHNlbGYucWVtdWlmZG93biBhbmQgaXApOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJydW5xZW11LWlmdXA6ICVzIiAlIHNlbGYucWVtdWlmdXApCisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoInJ1bnFlbXUtaWZkb3duOiAlcyIgJSBzZWxmLnFlbXVpZmRvd24pCisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoImlwOiAlcyIgJSBpcCkKICAgICAgICAgICAgIHJhaXNlIE9FUGF0aEVycm9yKCJydW5xZW11LWlmdXAsIHJ1bnFlbXUtaWZkb3duIG9yIGlwIG5vdCBmb3VuZCIpCiAKICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGxvY2tkaXIpOgpAQCAtODk1LDE0ICs5MjcsMTUgQEAKICAgICAgICAgICAgICMgcnVubmluZyBhdCB0aGUgc2FtZSB0aW1lLgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLm1rZGlyKGxvY2tkaXIpCisgICAgICAgICAgICAgICAgb3MuY2htb2QobG9ja2RpciwgMG83NzcpCiAgICAgICAgICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBjbWQgPSAnJXMgbGluaycgJSBpcAotICAgICAgICBsb2dnZXIuaW5mbygnUnVubmluZyAlcy4uLicgJSBjbWQpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygnUnVubmluZyAlcy4uLicgJSBjbWQpCiAgICAgICAgIGlwX2xpbmsgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKICAgICAgICAgIyBNYXRjaGVzIGxpbmUgbGlrZTogNjogdGFwMDogPGZvbz4KLSAgICAgICAgcG9zc2libGVzID0gcmUuZmluZGFsbCgnXlsxLTldKzogKyh0YXBbMC05XSspOiA8LionLCBpcF9saW5rLCByZS5NKQorICAgICAgICBwb3NzaWJsZXMgPSByZS5maW5kYWxsKCdeWzAtOV0rOiArKHRhcFswLTldKyk6IDwuKicsIGlwX2xpbmssIHJlLk0pCiAgICAgICAgIHRhcCA9ICIiCiAgICAgICAgIGZvciBwIGluIHBvc3NpYmxlczoKICAgICAgICAgICAgIGxvY2tmaWxlID0gb3MucGF0aC5qb2luKGxvY2tkaXIsIHApCkBAIC05MTAsNyArOTQzLDcgQEAKICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnRm91bmQgJXMuc2tpcCwgc2tpcHBpbmcgJXMnICUgKGxvY2tmaWxlLCBwKSkKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgc2VsZi5sb2NrID0gbG9ja2ZpbGUgKyAnLmxvY2snCi0gICAgICAgICAgICBpZiBzZWxmLmFjcXVpcmVfbG9jaygpOgorICAgICAgICAgICAgaWYgc2VsZi5hY3F1aXJlX2xvY2soZXJyb3I9RmFsc2UpOgogICAgICAgICAgICAgICAgIHRhcCA9IHAKICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiVXNpbmcgcHJlY29uZmlndXJlZCB0YXAgZGV2aWNlICVzIiAlIHRhcCkKICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiSWYgdGhpcyBpcyBub3QgaW50ZW5kZWQsIHRvdWNoICVzLnNraXAgdG8gbWFrZSBydW5xZW11IHNraXAgJXMuIiAlKGxvY2tmaWxlLCB0YXApKQpAQCAtOTIwLDcgKzk1Myw3IEBACiAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhub3N1ZG9fZmxhZyk6CiAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJFcnJvcjogVGhlcmUgYXJlIG5vIGF2YWlsYWJsZSB0YXAgZGV2aWNlcyB0byB1c2UgZm9yIG5ldHdvcmtpbmcsIikKICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoImFuZCBJIHNlZSAlcyBleGlzdHMsIHNvIEkgYW0gbm90IGdvaW5nIHRvIHRyeSBjcmVhdGluZyIgJSBub3N1ZG9fZmxhZykKLSAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oImEgbmV3IG9uZSB3aXRoIHN1ZG8uIikKKyAgICAgICAgICAgICAgICByYWlzZSBSdW5RZW11RXJyb3IoImEgbmV3IG9uZSB3aXRoIHN1ZG8uIikKIAogICAgICAgICAgICAgZ2lkID0gb3MuZ2V0Z2lkKCkKICAgICAgICAgICAgIHVpZCA9IG9zLmdldHVpZCgpCkBAIC05MzEsNyArOTY0LDcgQEAKICAgICAgICAgICAgIHNlbGYubG9jayA9IGxvY2tmaWxlICsgJy5sb2NrJwogICAgICAgICAgICAgc2VsZi5hY3F1aXJlX2xvY2soKQogICAgICAgICAgICAgc2VsZi5jbGVhbnRhcCA9IFRydWUKLSAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdDcmVhdGVkIHRhcDogJXMnICUgdGFwKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdDcmVhdGVkIHRhcDogJXMnICUgdGFwKQogCiAgICAgICAgIGlmIG5vdCB0YXA6CiAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkZhaWxlZCB0byBzZXR1cCB0YXAgZGV2aWNlLiBSdW4gcnVucWVtdS1nZW4tdGFwZGV2cyB0byBtYW51YWxseSBjcmVhdGUuIikKQEAgLTk2MCw4ICs5OTMsOCBAQAogICAgIGRlZiBzZXR1cF9uZXR3b3JrKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmdldCgnUUJfTkVUJykgPT0gJ25vbmUnOgogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGNtZCA9ICJzdHR5IC1nIgotICAgICAgICBzZWxmLnNhdmVkX3N0dHkgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgaWYgc3lzLnN0ZGluLmlzYXR0eSgpOgorICAgICAgICAgICAgc2VsZi5zYXZlZF9zdHR5ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoInN0dHkgLWciLCBzaGVsbD1UcnVlKS5kZWNvZGUoJ3V0Zi04JykKICAgICAgICAgc2VsZi5uZXR3b3JrX2RldmljZSA9IHNlbGYuZ2V0KCdRQl9ORVRXT1JLX0RFVklDRScpIG9yIHNlbGYubmV0d29ya19kZXZpY2UKICAgICAgICAgaWYgc2VsZi5zbGlycF9lbmFibGVkOgogICAgICAgICAgICAgc2VsZi5zZXR1cF9zbGlycCgpCkBAIC05NzEsNiArMTAwNCw4IEBACiAgICAgZGVmIHNldHVwX3Jvb3RmcyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5nZXQoJ1FCX1JPT1RGUycpID09ICdub25lJzoKICAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiAnd2ljLicgaW4gc2VsZi5mc3R5cGU6CisgICAgICAgICAgICBzZWxmLmZzdHlwZSA9IHNlbGYuZnN0eXBlWzQ6XQogICAgICAgICByb290ZnNfZm9ybWF0ID0gc2VsZi5mc3R5cGUgaWYgc2VsZi5mc3R5cGUgaW4gKCd2bWRrJywgJ3Fjb3cyJywgJ3ZkaScpIGVsc2UgJ3JhdycKIAogICAgICAgICBxYl9yb290ZnNfb3B0ID0gc2VsZi5nZXQoJ1FCX1JPT1RGU19PUFQnKQpAQCAtOTg2LDcgKzEwMjEsNyBAQAogICAgICAgICAgICAgdm1fZHJpdmUgPSAnJwogICAgICAgICAgICAgaWYgc2VsZi5mc3R5cGUgaW4gc2VsZi52bXR5cGVzOgogICAgICAgICAgICAgICAgIGlmIHNlbGYuZnN0eXBlID09ICdpc28nOgotICAgICAgICAgICAgICAgICAgICB2bV9kcml2ZSA9ICctY2Ryb20gJXMnICUgc2VsZi5yb290ZnMKKyAgICAgICAgICAgICAgICAgICAgdm1fZHJpdmUgPSAnLWRyaXZlIGZpbGU9JXMsaWY9dmlydGlvLG1lZGlhPWNkcm9tJyAlIHNlbGYucm9vdGZzCiAgICAgICAgICAgICAgICAgZWxpZiBzZWxmLmdldCgnUUJfRFJJVkVfVFlQRScpOgogICAgICAgICAgICAgICAgICAgICBkcml2ZV90eXBlID0gc2VsZi5nZXQoJ1FCX0RSSVZFX1RZUEUnKQogICAgICAgICAgICAgICAgICAgICBpZiBkcml2ZV90eXBlLnN0YXJ0c3dpdGgoIi9kZXYvc2QiKToKQEAgLTk5NSw3ICsxMDMwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYucm9vdGZzLCByb290ZnNfZm9ybWF0KQogICAgICAgICAgICAgICAgICAgICBlbGlmIGRyaXZlX3R5cGUuc3RhcnRzd2l0aCgiL2Rldi9oZCIpOgogICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1VzaW5nIGlkZSBkcml2ZScpCi0gICAgICAgICAgICAgICAgICAgICAgICB2bV9kcml2ZSA9ICIlcyxmb3JtYXQ9JXMiICUgKHNlbGYucm9vdGZzLCByb290ZnNfZm9ybWF0KQorICAgICAgICAgICAgICAgICAgICAgICAgdm1fZHJpdmUgPSAiLWRyaXZlIGZpbGU9JXMsZm9ybWF0PSVzIiAlIChzZWxmLnJvb3Rmcywgcm9vdGZzX2Zvcm1hdCkKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICMgdmlydGlvIG1pZ2h0IGhhdmUgYmVlbiBzZWxlY3RlZCBleHBsaWNpdGx5IChqdXN0IHVzZSBpdCksIG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAjIGlzIHVzZWQgYXMgZmFsbGJhY2sgKHRoZW4gd2FybiBhYm91dCB0aGF0KS4KQEAgLTEwMTEsNyArMTA0Niw3IEBACiAKICAgICAgICAgaWYgc2VsZi5mc3R5cGUgPT0gJ25mcyc6CiAgICAgICAgICAgICBzZWxmLnJvb3Rmc19vcHRpb25zID0gJycKLSAgICAgICAgICAgIGtfcm9vdCA9ICcvZGV2L25mcyBuZnNyb290PSVzOiVzLCVzJyAlIChzZWxmLm5mc19zZXJ2ZXIsIHNlbGYucm9vdGZzLCBzZWxmLnVuZnNfb3B0cykKKyAgICAgICAgICAgIGtfcm9vdCA9ICcvZGV2L25mcyBuZnNyb290PSVzOiVzLCVzJyAlIChzZWxmLm5mc19zZXJ2ZXIsIG9zLnBhdGguYWJzcGF0aChzZWxmLnJvb3RmcyksIHNlbGYudW5mc19vcHRzKQogICAgICAgICAgICAgc2VsZi5rZXJuZWxfY21kbGluZSA9ICdyb290PSVzIHJ3IGhpZ2hyZXM9b2ZmJyAlIGtfcm9vdAogCiAgICAgICAgIGlmIHNlbGYuZnN0eXBlID09ICdub25lJzoKQEAgLTEwNjIsNyArMTA5Nyw3IEBACiAgICAgICAgIGlmIG5vdCBxZW11X3N5c3RlbToKICAgICAgICAgICAgIHFlbXVfc3lzdGVtID0gc2VsZi5ndWVzc19xYl9zeXN0ZW0oKQogICAgICAgICBpZiBub3QgcWVtdV9zeXN0ZW06Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byBib290LCBRQl9TWVNURU1fTkFNRSBpcyBOVUxMISIpCisgICAgICAgICAgICByYWlzZSBSdW5RZW11RXJyb3IoIkZhaWxlZCB0byBib290LCBRQl9TWVNURU1fTkFNRSBpcyBOVUxMISIpCiAKICAgICAgICAgcWVtdV9iaW4gPSAnJXMvJXMnICUgKHNlbGYuYmluZGlyX25hdGl2ZSwgcWVtdV9zeXN0ZW0pCiAKQEAgLTExMDEsOSArMTEzNiw5IEBACiAgICAgICAgICAgICBzZWxmLnFlbXVfb3B0ICs9ICIgLXNuYXBzaG90IgogCiAgICAgICAgIGlmIHNlbGYuc2VyaWFsc3RkaW86Ci0gICAgICAgICAgICBsb2dnZXIuaW5mbygiSW50ZXJydXB0IGNoYXJhY3RlciBpcyAnXl0nIikKLSAgICAgICAgICAgIGNtZCA9ICJzdHR5IGludHIgXl0iCi0gICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoY21kLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgaWYgc3lzLnN0ZGluLmlzYXR0eSgpOgorICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbCgic3R0eSBpbnRyIF5dIiwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiSW50ZXJydXB0IGNoYXJhY3RlciBpcyAnXl0nIikKIAogICAgICAgICAgICAgZmlyc3Rfc2VyaWFsID0gIiIKICAgICAgICAgICAgIGlmIG5vdCByZS5zZWFyY2goIi1ub2dyYXBoaWMiLCBzZWxmLnFlbXVfb3B0KToKQEAgLTExNDIsMTUgKzExNzcsMTYgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGtlcm5lbF9vcHRzID0gIiIKICAgICAgICAgY21kID0gIiVzICVzIiAlIChzZWxmLnFlbXVfb3B0LCBrZXJuZWxfb3B0cykKLSAgICAgICAgbG9nZ2VyLmluZm8oJ1J1bm5pbmcgJXMnICUgY21kKQotICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoY21kLCBzaGVsbD1UcnVlKSAhPSAwOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdGYWlsZWQgdG8gcnVuICVzJyAlIGNtZCkKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1J1bm5pbmcgJXNcbicgJSBjbWQpCisgICAgICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc2hlbGw9VHJ1ZSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgaWYgcHJvY2Vzcy53YWl0KCk6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkZhaWxlZCB0byBydW4gcWVtdTogJXMiLCBwcm9jZXNzLnN0ZGVyci5yZWFkKCkuZGVjb2RlKCkpCiAKICAgICBkZWYgY2xlYW51cChzZWxmKToKICAgICAgICAgaWYgc2VsZi5jbGVhbnRhcDoKICAgICAgICAgICAgIGNtZCA9ICdzdWRvICVzICVzICVzJyAlIChzZWxmLnFlbXVpZmRvd24sIHNlbGYudGFwLCBzZWxmLmJpbmRpcl9uYXRpdmUpCi0gICAgICAgICAgICBsb2dnZXIuaW5mbygnUnVubmluZyAlcycgJSBjbWQpCi0gICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoY21kLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdSdW5uaW5nICVzJyAlIGNtZCkKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChjbWQsIHNoZWxsPVRydWUpCiAgICAgICAgIGlmIHNlbGYubG9ja19kZXNjcmlwdG9yOgogICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlJlbGVhc2luZyBsb2NrZmlsZSBmb3IgdGFwIGRldmljZSAnJXMnIiAlIHNlbGYudGFwKQogICAgICAgICAgICAgc2VsZi5yZWxlYXNlX2xvY2soKQpAQCAtMTE1OCwxMiArMTE5NCwxMiBAQAogICAgICAgICBpZiBzZWxmLm5mc19ydW5uaW5nOgogICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlNodXR0aW5nIGRvd24gdGhlIHVzZXJzcGFjZSBORlMgc2VydmVyLi4uIikKICAgICAgICAgICAgIGNtZCA9ICJydW5xZW11LWV4cG9ydC1yb290ZnMgc3RvcCAlcyIgJSBzZWxmLnJvb3RmcwotICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1J1bm5pbmcgJXMnICUgY21kKQotICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKGNtZCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnUnVubmluZyAlcycgJSBjbWQpCisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoY21kLCBzaGVsbD1UcnVlKQogCiAgICAgICAgIGlmIHNlbGYuc2F2ZWRfc3R0eToKICAgICAgICAgICAgIGNtZCA9ICJzdHR5ICVzIiAlIHNlbGYuc2F2ZWRfc3R0eQotICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKGNtZCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChjbWQsIHNoZWxsPVRydWUpCiAKICAgICAgICAgaWYgc2VsZi5jbGVhbl9uZnNfZGlyOgogICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1JlbW92aW5nICVzJyAlIHNlbGYucm9vdGZzKQpAQCAtMTE5Myw2ICsxMjI5LDEwIEBACiAgICAgICAgICAgICBzZWxmLmJpdGJha2VfZSA9ICcnCiAgICAgICAgICAgICBsb2dnZXIud2FybigiQ291bGRuJ3QgcnVuICdiaXRiYWtlIC1lJyB0byBnYXRoZXIgZW52aXJvbm1lbnQgaW5mb3JtYXRpb246XG4lcyIgJSBlcnIub3V0cHV0LmRlY29kZSgndXRmLTgnKSkKIAorICAgIGRlZiB2YWxpZGF0ZV9jb21ib3Moc2VsZik6CisgICAgICAgIGlmIChzZWxmLmZzdHlwZSBpbiBzZWxmLnZtdHlwZXMpIGFuZCBzZWxmLmtlcm5lbDoKKyAgICAgICAgICAgIHJhaXNlIFJ1blFlbXVFcnJvcigiJXMgZG9lc24ndCBuZWVkIGtlcm5lbCAlcyEiICUgKHNlbGYuZnN0eXBlLCBzZWxmLmtlcm5lbCkpCisKICAgICBAcHJvcGVydHkKICAgICBkZWYgYmluZGlyX25hdGl2ZShzZWxmKToKICAgICAgICAgcmVzdWx0ID0gc2VsZi5nZXQoJ1NUQUdJTkdfQklORElSX05BVElWRScpCkBAIC0xMjEwLDQyICsxMjUwLDM3IEBACiAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhyZXN1bHQpOgogICAgICAgICAgICAgICAgIHNlbGYuc2V0KCdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnLCByZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJOYXRpdmUgc3lzcm9vdCBkaXJlY3RvcnkgJXMgZG9lc24ndCBleGlzdCIgJSByZXN1bHQpCisgICAgICAgICAgICByYWlzZSBSdW5RZW11RXJyb3IoIk5hdGl2ZSBzeXNyb290IGRpcmVjdG9yeSAlcyBkb2Vzbid0IGV4aXN0IiAlIHJlc3VsdCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ2FuJ3QgZmluZCBTVEFHSU5HX0JJTkRJUl9OQVRJVkUgaW4gJyVzJyBvdXRwdXQiICUgY21kKQorICAgICAgICAgICAgcmFpc2UgUnVuUWVtdUVycm9yKCJDYW4ndCBmaW5kIFNUQUdJTkdfQklORElSX05BVElWRSBpbiAnJXMnIG91dHB1dCIgJSBjbWQpCiAKIAogZGVmIG1haW4oKToKICAgICBpZiAiaGVscCIgaW4gc3lzLmFyZ3Ygb3IgJy1oJyBpbiBzeXMuYXJndiBvciAnLS1oZWxwJyBpbiBzeXMuYXJndjoKICAgICAgICAgcHJpbnRfdXNhZ2UoKQogICAgICAgICByZXR1cm4gMAotICAgIGNvbmZpZyA9IEJhc2VDb25maWcoKQogICAgIHRyeToKKyAgICAgICAgY29uZmlnID0gQmFzZUNvbmZpZygpCiAgICAgICAgIGNvbmZpZy5jaGVja19hcmdzKCkKLSAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVzYzoKLSAgICAgICAgbG9nZ2VyLmVycm9yKGVzYykKLSAgICAgICAgbG9nZ2VyLmVycm9yKCJUcnkgJ3J1bnFlbXUgaGVscCcgb24gaG93IHRvIHVzZSBpdCIpCi0gICAgICAgIHJldHVybiAxCi0gICAgY29uZmlnLnJlYWRfcWVtdWJvb3QoKQotICAgIGNvbmZpZy5jaGVja19hbmRfc2V0KCkKLSAgICBjb25maWcucHJpbnRfY29uZmlnKCkKLSAgICB0cnk6CisgICAgICAgIGNvbmZpZy5yZWFkX3FlbXVib290KCkKKyAgICAgICAgY29uZmlnLmNoZWNrX2FuZF9zZXQoKQorICAgICAgICAjIENoZWNrIHdoZXRoZXIgdGhlIGNvbWJvcyBpcyB2YWxpZCBvciBub3QKKyAgICAgICAgY29uZmlnLnZhbGlkYXRlX2NvbWJvcygpCisgICAgICAgIGNvbmZpZy5wcmludF9jb25maWcoKQogICAgICAgICBjb25maWcuc2V0dXBfbmV0d29yaygpCiAgICAgICAgIGNvbmZpZy5zZXR1cF9yb290ZnMoKQogICAgICAgICBjb25maWcuc2V0dXBfZmluYWwoKQogICAgICAgICBjb25maWcuc3RhcnRfcWVtdSgpCi0gICAgZmluYWxseToKLSAgICAgICAgY29uZmlnLmNsZWFudXAoKQotICAgIHJldHVybiAwCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdHJ5OgotICAgICAgICByZXQgPSBtYWluKCkKLSAgICBleGNlcHQgT0VQYXRoRXJyb3IgYXMgZXJyOgotICAgICAgICByZXQgPSAxCi0gICAgICAgIGxvZ2dlci5lcnJvcihlcnIubWVzc2FnZSkKLSAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVzYzoKLSAgICAgICAgcmV0ID0gMQorICAgIGV4Y2VwdCBSdW5RZW11RXJyb3IgYXMgZXJyOgorICAgICAgICBsb2dnZXIuZXJyb3IoZXJyKQorICAgICAgICByZXR1cm4gMQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgogICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCiAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQotICAgIHN5cy5leGl0KHJldCkKKyAgICAgICAgcmV0dXJuIDEKKyAgICBmaW5hbGx5OgorICAgICAgICBwcmludCgiQ2xlYW51cCIpCisgICAgICAgIGNvbmZpZy5jbGVhbnVwKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBzeXMuZXhpdChtYWluKCkpCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWV4cG9ydC1yb290ZnMgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWV4cG9ydC1yb290ZnMKaW5kZXggYzc5OTJkOC4uNzBjZGNkYiAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1leHBvcnQtcm9vdGZzCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtZXhwb3J0LXJvb3RmcwpAQCAtNzcsMTAgKzc3LDYgQEAKIAlleGl0IDEJCiBmaQogCi0jIHJwYy5tb3VudGQgUlBDIHBvcnQKLU1PVU5URF9SUENQT1JUPSR7TU9VTlREX1JQQ1BPUlQ6PSRbIDIxMTExICsgJE5GU19JTlNUQU5DRSBdfQotIyBycGMubmZzZCBSUEMgcG9ydAotTkZTRF9SUENQT1JUPSR7TkZTRF9SUENQT1JUOj0kWyAxMTExMSArICRORlNfSU5TVEFOQ0UgXX0KICMgTkZTIHNlcnZlciBwb3J0IG51bWJlcgogTkZTRF9QT1JUPSR7TkZTRF9QT1JUOj0kWyAzMDQ5ICsgMiAqICRORlNfSU5TVEFOQ0UgXX0KICMgbW91bnRkIHBvcnQgbnVtYmVyCkBAIC04OCw3ICs4NCw3IEBACiAKICMjIEZvciBkZWJ1Z2dpbmcgeW91IHdvdWxkIGFkZGl0aW9uYWxseSBhZGQKICMjIC0tZGVidWcgYWxsCi1VTkZTRF9PUFRTPSItcCAtTiAtaSAkTkZTUElEIC1lICRFWFBPUlRTIC14ICRORlNEX1JQQ1BPUlQgLW4gJE5GU0RfUE9SVCAteSAkTU9VTlREX1JQQ1BPUlQgLW0gJE1PVU5URF9QT1JUIgorVU5GU0RfT1BUUz0iLXAgLU4gLWkgJE5GU1BJRCAtZSAkRVhQT1JUUyAtbiAkTkZTRF9QT1JUIC1tICRNT1VOVERfUE9SVCIKIAogIyBTZWUgaG93IHdlIHdlcmUgY2FsbGVkLgogY2FzZSAiJDEiIGluCkBAIC0xMzAsNyArMTI2LDcgQEAKIAlmaQogCWVjaG8gIiAiCiAJZWNobyAiT24geW91ciB0YXJnZXQgcGxlYXNlIHJlbWVtYmVyIHRvIGFkZCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgZm9yIE5GUyIKLQllY2hvICJuZnNyb290PUlQX0FERFJFU1M6JE5GU19FWFBPUlRfRElSLG5mc3ZlcnM9Myxwb3J0PSRORlNEX1BPUlQsbW91bnRwcm9nPSRNT1VOVERfUlBDUE9SVCxuZnNwcm9nPSRORlNEX1JQQ1BPUlQsdWRwLG1vdW50cG9ydD0kTU9VTlREX1BPUlQiCisJZWNobyAibmZzcm9vdD1JUF9BRERSRVNTOiRORlNfRVhQT1JUX0RJUixuZnN2ZXJzPTMscG9ydD0kTkZTRF9QT1JULHVkcCxtb3VudHBvcnQ9JE1PVU5URF9QT1JUIgogCTs7CiAgIHN0b3ApCiAJaWYgWyAtZiAiJE5GU1BJRCIgXTsgdGhlbgpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS5SRUFETUUgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LlJFQURNRQppbmRleCA1OTA4ZDgzLi5kYTlhYmQ3IDEwMDY0NAotLS0gYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LlJFQURNRQorKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LlJFQURNRQpAQCAtMzUsNyArMzUsNyBAQAogICAgcnVuIGFzIG5vbiByb290LiBUaGUgcnVucWVtdS1nZW4tdGFwZGV2cyBzY3JpcHQgY2FuIGFsc28gYmUgdXNlZCBieQogICAgcm9vdCB0byBwcmVwb3B1bGF0ZSB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBkZXZpY2VzLgogIC0gWW91IGNhbiBhY2Nlc3MgdGhlIGhvc3QgY29tcHV0ZXIgYXQgMTkyLjE2OC43LjEgd2l0aGluIHRoZSBpbWFnZS4KLSAtIFlvdXIgcWVtdSBzeXN0ZW0gd2lsbCBiZSBhY2Nlc3NpYmxlIGFzIDE5Mi4xNi43LjIuCisgLSBZb3VyIHFlbXUgc3lzdGVtIHdpbGwgYmUgYWNjZXNzaWJsZSBhcyAxOTIuMTY4LjcuMi4KICAtIFRoZSBzY3JpcHQgZXh0cmFjdHMgdGhlIHJvb3QgZmlsZXN5c3RlbSBzcGVjaWZpZWQgdW5kZXIgcHNldWRvIGFuZCBzZXRzIHVwIGEgdXNlcnNwYWNlCiAgICBORlMgc2VydmVyIHRvIHNoYXJlIHRoZSBpbWFnZSBvdmVyIGJ5IGRlZmF1bHQgbWVhbmluZyB0aGUgZmlsZXN5c3RlbSBjYW4gYmUgYWNjZXNzZWQgYnkKICAgIGJvdGggdGhlIGhvc3QgYW5kIGd1ZXN0IHN5c3RlbXMuCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy9zc3RhdGUtZGlmZi1tYWNoaW5lcy5zaCBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3NzdGF0ZS1kaWZmLW1hY2hpbmVzLnNoCmluZGV4IDA1NmFhMGEuLjI3YzZhMzMgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3NzdGF0ZS1kaWZmLW1hY2hpbmVzLnNoCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3NzdGF0ZS1kaWZmLW1hY2hpbmVzLnNoCkBAIC0xMTgsNyArMTE4LDcgQEAKICAgICBjcCAtcmEgJHt0bXBkaXJ9L3N0YW1wcy8qICR7T1VUUFVUfS8ke019CiAgICAgZmluZCAke09VVFBVVH0vJHtNfSAtbmFtZSBcKnNpZ2RhdGFcKiB8IHNlZCAicyMke09VVFBVVH0vJHtNfS8jI2ciIHwgc29ydCA+ICR7T1VUUFVUfS8ke019L2xpc3QKICAgICBNX1VOREVSU0NPUkU9YGVjaG8gJHtNfSB8IHNlZCAncy8tL18vZydgCi0gICAgc2VkICJzLyR7TV9VTkRFUlNDT1JFfS9NQUNISU5FL2c7IHMvJHtNfS9NQUNISU5FL2ciICR7T1VUUFVUfS8ke019L2xpc3QgfCBzb3J0ID4gJHtPVVRQVVR9LyR7TX0vbGlzdC5NCisgICAgc2VkICJzL14ke01fVU5ERVJTQ09SRX0tL01BQ0hJTkUvZyIgJHtPVVRQVVR9LyR7TX0vbGlzdCB8IHNvcnQgPiAke09VVFBVVH0vJHtNfS9saXN0Lk0KICAgICBmaW5kICR7dG1wZGlyfS9zdGFtcHMvIC1uYW1lIFwqc2lnZGF0YVwqIHwgeGFyZ3Mgcm0gLWYKICAgZWxzZQogICAgIHByaW50ZiAiRVJST1I6IG5vIHNpZ2RhdGEgZmlsZXMgd2VyZSBnZW5lcmF0ZWQgZm9yIE1BQ0hJTkUgJE0gaW4gJHt0bXBkaXJ9L3N0YW1wc1xuIjsKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3NzdGF0ZS1zeXNyb290LWNydWZ0LnNoIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvc3N0YXRlLXN5c3Jvb3QtY3J1ZnQuc2gKaW5kZXggYjYxNjZhYS4uZDk5MTdmNSAxMDA3NTUKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvc3N0YXRlLXN5c3Jvb3QtY3J1ZnQuc2gKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvc3N0YXRlLXN5c3Jvb3QtY3J1ZnQuc2gKQEAgLTEwNSw3ICsxMDUsOSBAQAogCiAjIGdlbmVyYXRlZCBieSBwaHAKIFdISVRFTElTVD0iJHtXSElURUxJU1R9IFwKKyAgLiovdXNyL2xpYi9waHA1L3BocC8uY2hhbm5lbHMgXAogICAuKi91c3IvbGliL3BocDUvcGhwLy5jaGFubmVscy8uKiBcCisgIC4qL3Vzci9saWIvcGhwNS9waHAvLnJlZ2lzdHJ5IFwKICAgLiovdXNyL2xpYi9waHA1L3BocC8ucmVnaXN0cnkvLiogXAogICAuKi91c3IvbGliL3BocDUvcGhwLy5kZXBkYiBcCiAgIC4qL3Vzci9saWIvcGhwNS9waHAvLmRlcGRibG9jayBcCmRpZmYgLS1naXQgYS9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy90ZXN0LXJlZXhlYyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3Rlc3QtcmVleGVjCmluZGV4IDllYWE5NmUuLjMwZTc5MmMgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3Rlc3QtcmVleGVjCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3Rlc3QtcmVleGVjCkBAIC0zOCw5ICszOCw5IEBACiBmdW5jdGlvbiBjbGVhcnNzdGF0ZSB7CiAJdGFyZ2V0PSQxCiAKLQlzc3RhdGVfZGlyPWBiaXRiYWtlICR0YXJnZXQgLWUgfCBncmVwICJeU1NUQVRFX0RJUiIgfCBjdXQgLWQgIlwiIiAtZiAyYAotCXNzdGF0ZV9wa2dzcGVjPWBiaXRiYWtlICR0YXJnZXQgLWUgfCBncmVwICJeU1NUQVRFX1BLR1NQRUMiIHwgY3V0IC1kICJcIiIgLWYgMmAKLQlzc3Rhc2tzPWBiaXRiYWtlICR0YXJnZXQgLWUgfCBncmVwICJeU1NUQVRFVEFTS1MiIHwgY3V0IC1kICJcIiIgLWYgMmAKKwlzc3RhdGVfZGlyPWBiaXRiYWtlICR0YXJnZXQgLWUgfCBncmVwICJeU1NUQVRFX0RJUj0iIHwgY3V0IC1kICJcIiIgLWYgMmAKKwlzc3RhdGVfcGtnc3BlYz1gYml0YmFrZSAkdGFyZ2V0IC1lIHwgZ3JlcCAiXlNTVEFURV9QS0dTUEVDPSIgfCBjdXQgLWQgIlwiIiAtZiAyYAorCXNzdGFza3M9YGJpdGJha2UgJHRhcmdldCAtZSB8IGdyZXAgIl5TU1RBVEVUQVNLUz0iIHwgY3V0IC1kICJcIiIgLWYgMmAKIAogCWZvciBzc3Rhc2sgaW4gJHNzdGFza3MKIAlkbwpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvd2ljIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMvd2ljCmluZGV4IGE1ZjJkYmYuLjA5NzA4NGEgMTAwNzU1Ci0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3dpYworKysgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy93aWMKQEAgLTMzLDggKzMzLDEwIEBACiAjIFB5dGhvbiBTdGFuZGFyZCBMaWJyYXJ5IG1vZHVsZXMKIGltcG9ydCBvcwogaW1wb3J0IHN5cwotaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgYXJncGFyc2UKIGltcG9ydCBsb2dnaW5nCisKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKIGZyb20gZGlzdHV0aWxzIGltcG9ydCBzcGF3bgogCiAjIEV4dGVybmFsIG1vZHVsZXMKQEAgLTU0LDcgKzU2LDcgQEAKICAgICBiaXRiYWtlX21haW4gPSBOb25lCiAKIGZyb20gd2ljIGltcG9ydCBXaWNFcnJvcgotZnJvbSB3aWMudXRpbHMubWlzYyBpbXBvcnQgZ2V0X2JpdGJha2VfdmFyLCBCQl9WQVJTCitmcm9tIHdpYy5taXNjIGltcG9ydCBnZXRfYml0YmFrZV92YXIsIEJCX1ZBUlMKIGZyb20gd2ljIGltcG9ydCBlbmdpbmUKIGZyb20gd2ljIGltcG9ydCBoZWxwIGFzIGhscAogCkBAIC04NSw2NiArODcsMzAgQEAKICAgICAgICAgcm9vdGZzX2RpciArPSAnPScuam9pbihba2V5LCB2YWxdKQogICAgIHJldHVybiByb290ZnNfZGlyLnN0cmlwKCkKIAotZGVmIGNhbGxiYWNrX3Jvb3Rmc19kaXIob3B0aW9uLCBvcHQsIHZhbHVlLCBwYXJzZXIpOgotICAgICIiIgotICAgIEJ1aWxkIGEgZGljdCB1c2luZyAtLXJvb3Rmc19kaXIgY29ubmVjdGlvbj1kaXIKLSAgICAiIiIKLSAgICBpZiBub3QgdHlwZShwYXJzZXIudmFsdWVzLnJvb3Rmc19kaXIpIGlzIGRpY3Q6Ci0gICAgICAgIHBhcnNlci52YWx1ZXMucm9vdGZzX2RpciA9IGRpY3QoKQogCi0gICAgaWYgJz0nIGluIHZhbHVlOgotICAgICAgICAoa2V5LCByb290ZnNfZGlyKSA9IHZhbHVlLnNwbGl0KCc9JykKLSAgICBlbHNlOgotICAgICAgICBrZXkgPSAnUk9PVEZTX0RJUicKLSAgICAgICAgcm9vdGZzX2RpciA9IHZhbHVlCitjbGFzcyBSb290ZnNBcmdBY3Rpb24oYXJncGFyc2UuQWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCoqa3dhcmdzKQogCi0gICAgcGFyc2VyLnZhbHVlcy5yb290ZnNfZGlyW2tleV0gPSByb290ZnNfZGlyCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZSwgb3B0aW9uX3N0cmluZz1Ob25lKToKKyAgICAgICAgaWYgbm90ICJyb290ZnNfZGlyIiBpbiB2YXJzKG5hbWVzcGFjZSkgb3IgXAorICAgICAgICAgICBub3QgdHlwZShuYW1lc3BhY2UuX19kaWN0X19bJ3Jvb3Rmc19kaXInXSkgaXMgZGljdDoKKyAgICAgICAgICAgIG5hbWVzcGFjZS5fX2RpY3RfX1sncm9vdGZzX2RpciddID0ge30KIAotZGVmIHdpY19jcmVhdGVfc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICAgICBpZiAnPScgaW4gdmFsdWU6CisgICAgICAgICAgICAoa2V5LCByb290ZnNfZGlyKSA9IHZhbHVlLnNwbGl0KCc9JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGtleSA9ICdST09URlNfRElSJworICAgICAgICAgICAgcm9vdGZzX2RpciA9IHZhbHVlCisKKyAgICAgICAgbmFtZXNwYWNlLl9fZGljdF9fWydyb290ZnNfZGlyJ11ba2V5XSA9IHJvb3Rmc19kaXIKKworCitkZWYgd2ljX2NyZWF0ZV9zdWJjb21tYW5kKG9wdGlvbnMsIHVzYWdlX3N0cik6CiAgICAgIiIiCiAgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBpbWFnZSBjcmVhdGlvbi4gIFRoZSByZWFsIHdvcmsgaXMgZG9uZQogICAgIGJ5IGltYWdlLmVuZ2luZS53aWNfY3JlYXRlKCkKICAgICAiIiIKLSAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2U9dXNhZ2Vfc3RyKQotCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oIi1vIiwgIi0tb3V0ZGlyIiwgZGVzdD0ib3V0ZGlyIiwgZGVmYXVsdD0nLicsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0ibmFtZSBvZiBkaXJlY3RvcnkgdG8gY3JlYXRlIGltYWdlIGluIikKLSAgICBwYXJzZXIuYWRkX29wdGlvbigiLWUiLCAiLS1pbWFnZS1uYW1lIiwgZGVzdD0iaW1hZ2VfbmFtZSIsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0ibmFtZSBvZiB0aGUgaW1hZ2UgdG8gdXNlIHRoZSBhcnRpZmFjdHMgZnJvbSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiZS5nLiBjb3JlLWltYWdlLXNhdG8iKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCItciIsICItLXJvb3Rmcy1kaXIiLCBkZXN0PSJyb290ZnNfZGlyIiwgdHlwZT0ic3RyaW5nIiwKLSAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249ImNhbGxiYWNrIiwgY2FsbGJhY2s9Y2FsbGJhY2tfcm9vdGZzX2RpciwKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJwYXRoIHRvIHRoZSAvcm9vdGZzIGRpciB0byB1c2UgYXMgdGhlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIud2tzIHJvb3RmcyBzb3VyY2UiKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYiIsICItLWJvb3RpbWctZGlyIiwgZGVzdD0iYm9vdGltZ19kaXIiLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InBhdGggdG8gdGhlIGRpciBjb250YWluaW5nIHRoZSBib290IGFydGlmYWN0cyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiKGUuZy4gL0VGSSBvciAvc3lzbGludXggZGlycykgdG8gdXNlIGFzIHRoZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiLndrcyBib290aW1nIHNvdXJjZSIpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oIi1rIiwgIi0ta2VybmVsLWRpciIsIGRlc3Q9Imtlcm5lbF9kaXIiLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InBhdGggdG8gdGhlIGRpciBjb250YWluaW5nIHRoZSBrZXJuZWwgdG8gdXNlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiB0aGUgLndrcyBib290aW1nIikKLSAgICBwYXJzZXIuYWRkX29wdGlvbigiLW4iLCAiLS1uYXRpdmUtc3lzcm9vdCIsIGRlc3Q9Im5hdGl2ZV9zeXNyb290IiwKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJwYXRoIHRvIHRoZSBuYXRpdmUgc3lzcm9vdCBjb250YWluaW5nIHRoZSB0b29scyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAidG8gdXNlIHRvIGJ1aWxkIHRoZSBpbWFnZSIpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oIi1zIiwgIi0tc2tpcC1idWlsZC1jaGVjayIsIGRlc3Q9ImJ1aWxkX2NoZWNrIiwKLSAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVmYXVsdD1UcnVlLCBoZWxwPSJza2lwIHRoZSBidWlsZCBjaGVjayIpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oIi1mIiwgIi0tYnVpbGQtcm9vdGZzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iYnVpbGQgcm9vdGZzIikKLSAgICBwYXJzZXIuYWRkX29wdGlvbigiLWMiLCAiLS1jb21wcmVzcy13aXRoIiwgY2hvaWNlcz0oImd6aXAiLCAiYnppcDIiLCAieHoiKSwKLSAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdjb21wcmVzc29yJywKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJjb21wcmVzcyBpbWFnZSB3aXRoIHNwZWNpZmllZCBjb21wcmVzc29yIikKLSAgICBwYXJzZXIuYWRkX29wdGlvbigiLW0iLCAiLS1ibWFwIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iZ2VuZXJhdGUgLmJtYXAiKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCItdiIsICItLXZhcnMiLCBkZXN0PSd2YXJzX2RpcicsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0iZGlyZWN0b3J5IHdpdGggPGltYWdlPi5lbnYgZmlsZXMgdGhhdCBzdG9yZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiYml0YmFrZSB2YXJpYWJsZXMiKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCItRCIsICItLWRlYnVnIiwgZGVzdD0iZGVidWciLCBhY3Rpb249InN0b3JlX3RydWUiLAotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGhlbHA9Im91dHB1dCBkZWJ1ZyBpbmZvcm1hdGlvbiIpCi0KLSAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQotCi0gICAgaWYgbGVuKGFyZ3MpICE9IDE6Ci0gICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKLSAgICAgICAgcmFpc2UgV2ljRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmciKQotCiAgICAgaWYgb3B0aW9ucy5idWlsZF9yb290ZnMgYW5kIG5vdCBiaXRiYWtlX21haW46CiAgICAgICAgIHJhaXNlIFdpY0Vycm9yKCJDYW4ndCBidWlsZCByb290ZnMgYXMgYml0YmFrZSBpcyBub3QgaW4gdGhlICRQQVRIIikKIApAQCAtMTg4LDMyICsxNTQsMzQgQEAKICAgICAgICAgcm9vdGZzX2RpciA9IGdldF9iaXRiYWtlX3ZhcigiSU1BR0VfUk9PVEZTIiwgb3B0aW9ucy5pbWFnZV9uYW1lKQogICAgICAgICBrZXJuZWxfZGlyID0gZ2V0X2JpdGJha2VfdmFyKCJERVBMT1lfRElSX0lNQUdFIiwgb3B0aW9ucy5pbWFnZV9uYW1lKQogICAgICAgICBib290aW1nX2RpciA9IGdldF9iaXRiYWtlX3ZhcigiU1RBR0lOR19EQVRBRElSIiwgb3B0aW9ucy5pbWFnZV9uYW1lKQotICAgICAgICBuYXRpdmVfc3lzcm9vdCA9IGdldF9iaXRiYWtlX3ZhcigiUkVDSVBFX1NZU1JPT1RfTkFUSVZFIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5pbWFnZV9uYW1lKSAjLCBjYWNoZT1GYWxzZSkKKworICAgICAgICBuYXRpdmVfc3lzcm9vdCA9IG9wdGlvbnMubmF0aXZlX3N5c3Jvb3QKKyAgICAgICAgaWYgb3B0aW9ucy52YXJzX2RpciBhbmQgbm90IG5hdGl2ZV9zeXNyb290OgorICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QgPSBnZXRfYml0YmFrZV92YXIoIlJFQ0lQRV9TWVNST09UX05BVElWRSIsIG9wdGlvbnMuaW1hZ2VfbmFtZSkKICAgICBlbHNlOgogICAgICAgICBpZiBvcHRpb25zLmJ1aWxkX3Jvb3RmczoKICAgICAgICAgICAgIHJhaXNlIFdpY0Vycm9yKCJJbWFnZSBuYW1lIGlzIG5vdCBzcGVjaWZpZWQsIGV4aXRpbmcuICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoVXNlIC1lLy0taW1hZ2UtbmFtZSB0byBzcGVjaWZ5IGl0KSIpCiAgICAgICAgIG5hdGl2ZV9zeXNyb290ID0gb3B0aW9ucy5uYXRpdmVfc3lzcm9vdAogCi0gICAgaWYgbm90IG5hdGl2ZV9zeXNyb290IG9yIG5vdCBvcy5wYXRoLmlzZGlyKG5hdGl2ZV9zeXNyb290KToKKyAgICBpZiBub3Qgb3B0aW9ucy52YXJzX2RpciBhbmQgKG5vdCBuYXRpdmVfc3lzcm9vdCBvciBub3Qgb3MucGF0aC5pc2RpcihuYXRpdmVfc3lzcm9vdCkpOgogICAgICAgICBsb2dnZXIuaW5mbygiQnVpbGRpbmcgd2ljLXRvb2xzLi4uXG4iKQogICAgICAgICBpZiBiaXRiYWtlX21haW4oQml0QmFrZUNvbmZpZ1BhcmFtZXRlcnMoImJpdGJha2Ugd2ljLXRvb2xzIi5zcGxpdCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlcmRhdGEuQ29va2VyQ29uZmlndXJhdGlvbigpKToKICAgICAgICAgICAgIHJhaXNlIFdpY0Vycm9yKCJiaXRiYWtlIHdpYy10b29scyBmYWlsZWQiKQogICAgICAgICBuYXRpdmVfc3lzcm9vdCA9IGdldF9iaXRiYWtlX3ZhcigiUkVDSVBFX1NZU1JPT1RfTkFUSVZFIiwgIndpYy10b29scyIpCi0gICAgICAgIGlmIG5vdCBuYXRpdmVfc3lzcm9vdDoKLSAgICAgICAgICAgIHJhaXNlIFdpY0Vycm9yKCJVbmFibGUgdG8gZmluZCB0aGUgbG9jYXRpb24gb2YgdGhlIG5hdGl2ZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAidG9vbHMgc3lzcm9vdCB0byB1c2UiKQogCi0gICAgd2tzX2ZpbGUgPSBhcmdzWzBdCisgICAgaWYgbm90IG5hdGl2ZV9zeXNyb290OgorICAgICAgICByYWlzZSBXaWNFcnJvcigiVW5hYmxlIHRvIGZpbmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBuYXRpdmUgdG9vbHMgc3lzcm9vdCIpCisKKyAgICB3a3NfZmlsZSA9IG9wdGlvbnMud2tzX2ZpbGUKIAogICAgIGlmIG5vdCB3a3NfZmlsZS5lbmRzd2l0aCgiLndrcyIpOgogICAgICAgICB3a3NfZmlsZSA9IGVuZ2luZS5maW5kX2Nhbm5lZF9pbWFnZShzY3JpcHRzX3BhdGgsIHdrc19maWxlKQogICAgICAgICBpZiBub3Qgd2tzX2ZpbGU6CiAgICAgICAgICAgICByYWlzZSBXaWNFcnJvcigiTm8gaW1hZ2UgbmFtZWQgJXMgZm91bmQsIGV4aXRpbmcuICAoVXNlICd3aWMgbGlzdCBpbWFnZXMnICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0byBsaXN0IGF2YWlsYWJsZSBpbWFnZXMsIG9yIHNwZWNpZnkgYSBmdWxseS1xdWFsaWZpZWQgT0UgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgImtpY2tzdGFydCAoLndrcykgZmlsZW5hbWUpIiAlIGFyZ3NbMF0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAia2lja3N0YXJ0ICgud2tzKSBmaWxlbmFtZSkiICUgb3B0aW9ucy53a3NfZmlsZSkKIAogICAgIGlmIG5vdCBvcHRpb25zLmltYWdlX25hbWU6CiAgICAgICAgIHJvb3Rmc19kaXIgPSAnJwpAQCAtMjY0LDU5ICsyMzIsMjkwIEBACiAgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBsaXN0aW5nIGF2YWlsYWJsZSBpbWFnZXMuCiAgICAgVGhlIHJlYWwgd29yayBpcyBkb25lIGJ5IGltYWdlLmVuZ2luZS53aWNfbGlzdCgpCiAgICAgIiIiCi0gICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlPXVzYWdlX3N0cikKLSAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncylbMV0KLQogICAgIGlmIG5vdCBlbmdpbmUud2ljX2xpc3QoYXJncywgc2NyaXB0c19wYXRoKToKLSAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQogICAgICAgICByYWlzZSBXaWNFcnJvcigiQmFkIGxpc3QgYXJndW1lbnRzLCBleGl0aW5nIikKIAogCi1kZWYgd2ljX2hlbHBfdG9waWNfc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorZGVmIHdpY19sc19zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CiAgICAgIiIiCi0gICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBoZWxwLW9ubHkgJ3N1YmNvbW1hbmRzJy4gIFRoaXMgaXMKLSAgICBlc3NlbnRpYWxseSBhIGR1bW15IGNvbW1hbmQgdGhhdCBkb2VzbiBub3RoaW5nIGJ1dCBhbGxvdyB1c2VycyB0bwotICAgIHVzZSB0aGUgZXhpc3Rpbmcgc3ViY29tbWFuZCBpbmZyYXN0cnVjdHVyZSB0byBkaXNwbGF5IGhlbHAgb24gYQotICAgIHBhcnRpY3VsYXIgdG9waWMgbm90IGF0dGFjaGVkIHRvIGFueSBwYXJ0aWN1bGFyIHN1YmNvbW1hbmQuCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBsaXN0IGNvbnRlbnQgb2YgaW1hZ2VzLgorICAgIFRoZSByZWFsIHdvcmsgaXMgZG9uZSBieSBlbmdpbmUud2ljX2xzKCkKKyAgICAiIiIKKyAgICBlbmdpbmUud2ljX2xzKGFyZ3MsIGFyZ3MubmF0aXZlX3N5c3Jvb3QpCisKK2RlZiB3aWNfY3Bfc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgY29weWluZyBmaWxlcy9kaXJzIHRvIGltYWdlcy4KKyAgICBUaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkgZW5naW5lLndpY19jcCgpCisgICAgIiIiCisgICAgZW5naW5lLndpY19jcChhcmdzLCBhcmdzLm5hdGl2ZV9zeXNyb290KQorCitkZWYgd2ljX3JtX3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIHJlbW92aW5nIGZpbGVzL2RpcnMgZnJvbSBpbWFnZXMuCisgICAgVGhlIHJlYWwgd29yayBpcyBkb25lIGJ5IGVuZ2luZS53aWNfcm0oKQorICAgICIiIgorICAgIGVuZ2luZS53aWNfcm0oYXJncywgYXJncy5uYXRpdmVfc3lzcm9vdCkKKworZGVmIHdpY193cml0ZV9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciB3cml0aW5nIGltYWdlcy4KKyAgICBUaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkgZW5naW5lLndpY193cml0ZSgpCisgICAgIiIiCisgICAgZW5naW5lLndpY193cml0ZShhcmdzLCBhcmdzLm5hdGl2ZV9zeXNyb290KQorCitkZWYgd2ljX2hlbHBfc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgaGVscCBzdWJjb21tYW5kIHRvIGtlZXAgdGhlIGN1cnJlbnQKKyAgICBzdHJ1Y3R1cmUgb2YgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb25zLgogICAgICIiIgogICAgIHBhc3MKIAogCitkZWYgd2ljX2hlbHBfdG9waWNfc3ViY29tbWFuZCh1c2FnZV9zdHIsIGhlbHBfc3RyKToKKyAgICAiIiIKKyAgICBEaXNwbGF5IGZ1bmN0aW9uIGZvciBoZWxwICdzdWItc3ViY29tbWFuZHMnLgorICAgICIiIgorICAgIHByaW50KGhlbHBfc3RyKQorICAgIHJldHVybgorCisKIHdpY19oZWxwX3RvcGljX3VzYWdlID0gIiIiCiAiIiIKIAotc3ViY29tbWFuZHMgPSB7Ci0gICAgImNyZWF0ZSI6ICAgIFt3aWNfY3JlYXRlX3N1YmNvbW1hbmQsCi0gICAgICAgICAgICAgICAgICBobHAud2ljX2NyZWF0ZV91c2FnZSwKLSAgICAgICAgICAgICAgICAgIGhscC53aWNfY3JlYXRlX2hlbHBdLAotICAgICJsaXN0IjogICAgICBbd2ljX2xpc3Rfc3ViY29tbWFuZCwKLSAgICAgICAgICAgICAgICAgIGhscC53aWNfbGlzdF91c2FnZSwKLSAgICAgICAgICAgICAgICAgIGhscC53aWNfbGlzdF9oZWxwXSwKK2hlbHB0b3BpY3MgPSB7CiAgICAgInBsdWdpbnMiOiAgIFt3aWNfaGVscF90b3BpY19zdWJjb21tYW5kLAogICAgICAgICAgICAgICAgICAgd2ljX2hlbHBfdG9waWNfdXNhZ2UsCi0gICAgICAgICAgICAgICAgICBobHAuZ2V0X3dpY19wbHVnaW5zX2hlbHBdLAorICAgICAgICAgICAgICAgICAgaGxwLndpY19wbHVnaW5zX2hlbHBdLAogICAgICJvdmVydmlldyI6ICBbd2ljX2hlbHBfdG9waWNfc3ViY29tbWFuZCwKICAgICAgICAgICAgICAgICAgIHdpY19oZWxwX3RvcGljX3VzYWdlLAogICAgICAgICAgICAgICAgICAgaGxwLndpY19vdmVydmlld19oZWxwXSwKICAgICAia2lja3N0YXJ0IjogW3dpY19oZWxwX3RvcGljX3N1YmNvbW1hbmQsCiAgICAgICAgICAgICAgICAgICB3aWNfaGVscF90b3BpY191c2FnZSwKICAgICAgICAgICAgICAgICAgIGhscC53aWNfa2lja3N0YXJ0X2hlbHBdLAorICAgICJjcmVhdGUiOiAgICBbd2ljX2hlbHBfdG9waWNfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgIHdpY19oZWxwX3RvcGljX3VzYWdlLAorICAgICAgICAgICAgICAgICAgaGxwLndpY19jcmVhdGVfaGVscF0sCisgICAgImxzIjogICAgICAgIFt3aWNfaGVscF90b3BpY19zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICAgd2ljX2hlbHBfdG9waWNfdXNhZ2UsCisgICAgICAgICAgICAgICAgICBobHAud2ljX2xzX2hlbHBdLAorICAgICJjcCI6ICAgICAgICBbd2ljX2hlbHBfdG9waWNfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgIHdpY19oZWxwX3RvcGljX3VzYWdlLAorICAgICAgICAgICAgICAgICAgaGxwLndpY19jcF9oZWxwXSwKKyAgICAicm0iOiAgICAgICAgW3dpY19oZWxwX3RvcGljX3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgICB3aWNfaGVscF90b3BpY191c2FnZSwKKyAgICAgICAgICAgICAgICAgIGhscC53aWNfcm1faGVscF0sCisgICAgIndyaXRlIjogICAgIFt3aWNfaGVscF90b3BpY19zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICAgd2ljX2hlbHBfdG9waWNfdXNhZ2UsCisgICAgICAgICAgICAgICAgICBobHAud2ljX3dyaXRlX2hlbHBdLAorICAgICJsaXN0IjogICAgICBbd2ljX2hlbHBfdG9waWNfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgIHdpY19oZWxwX3RvcGljX3VzYWdlLAorICAgICAgICAgICAgICAgICAgaGxwLndpY19saXN0X2hlbHBdCiB9CiAKIAorZGVmIHdpY19pbml0X3BhcnNlcl9jcmVhdGUoc3VicGFyc2VyKToKKyAgICBzdWJwYXJzZXIuYWRkX2FyZ3VtZW50KCJ3a3NfZmlsZSIpCisKKyAgICBzdWJwYXJzZXIuYWRkX2FyZ3VtZW50KCItbyIsICItLW91dGRpciIsIGRlc3Q9Im91dGRpciIsIGRlZmF1bHQ9Jy4nLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Im5hbWUgb2YgZGlyZWN0b3J5IHRvIGNyZWF0ZSBpbWFnZSBpbiIpCisgICAgc3VicGFyc2VyLmFkZF9hcmd1bWVudCgiLWUiLCAiLS1pbWFnZS1uYW1lIiwgZGVzdD0iaW1hZ2VfbmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0ibmFtZSBvZiB0aGUgaW1hZ2UgdG8gdXNlIHRoZSBhcnRpZmFjdHMgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZS5nLiBjb3JlLWltYWdlLXNhdG8iKQorICAgIHN1YnBhcnNlci5hZGRfYXJndW1lbnQoIi1yIiwgIi0tcm9vdGZzLWRpciIsIGFjdGlvbj1Sb290ZnNBcmdBY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0icGF0aCB0byB0aGUgL3Jvb3RmcyBkaXIgdG8gdXNlIGFzIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiLndrcyByb290ZnMgc291cmNlIikKKyAgICBzdWJwYXJzZXIuYWRkX2FyZ3VtZW50KCItYiIsICItLWJvb3RpbWctZGlyIiwgZGVzdD0iYm9vdGltZ19kaXIiLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InBhdGggdG8gdGhlIGRpciBjb250YWluaW5nIHRoZSBib290IGFydGlmYWN0cyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGUuZy4gL0VGSSBvciAvc3lzbGludXggZGlycykgdG8gdXNlIGFzIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiLndrcyBib290aW1nIHNvdXJjZSIpCisgICAgc3VicGFyc2VyLmFkZF9hcmd1bWVudCgiLWsiLCAiLS1rZXJuZWwtZGlyIiwgZGVzdD0ia2VybmVsX2RpciIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0icGF0aCB0byB0aGUgZGlyIGNvbnRhaW5pbmcgdGhlIGtlcm5lbCB0byB1c2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIHRoZSAud2tzIGJvb3RpbWciKQorICAgIHN1YnBhcnNlci5hZGRfYXJndW1lbnQoIi1uIiwgIi0tbmF0aXZlLXN5c3Jvb3QiLCBkZXN0PSJuYXRpdmVfc3lzcm9vdCIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0icGF0aCB0byB0aGUgbmF0aXZlIHN5c3Jvb3QgY29udGFpbmluZyB0aGUgdG9vbHMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvIHVzZSB0byBidWlsZCB0aGUgaW1hZ2UiKQorICAgIHN1YnBhcnNlci5hZGRfYXJndW1lbnQoIi1zIiwgIi0tc2tpcC1idWlsZC1jaGVjayIsIGRlc3Q9ImJ1aWxkX2NoZWNrIiwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVmYXVsdD1UcnVlLCBoZWxwPSJza2lwIHRoZSBidWlsZCBjaGVjayIpCisgICAgc3VicGFyc2VyLmFkZF9hcmd1bWVudCgiLWYiLCAiLS1idWlsZC1yb290ZnMiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJidWlsZCByb290ZnMiKQorICAgIHN1YnBhcnNlci5hZGRfYXJndW1lbnQoIi1jIiwgIi0tY29tcHJlc3Mtd2l0aCIsIGNob2ljZXM9KCJnemlwIiwgImJ6aXAyIiwgInh6IiksCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nY29tcHJlc3NvcicsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0iY29tcHJlc3MgaW1hZ2Ugd2l0aCBzcGVjaWZpZWQgY29tcHJlc3NvciIpCisgICAgc3VicGFyc2VyLmFkZF9hcmd1bWVudCgiLW0iLCAiLS1ibWFwIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iZ2VuZXJhdGUgLmJtYXAiKQorICAgIHN1YnBhcnNlci5hZGRfYXJndW1lbnQoIi0tbm8tZnN0YWItdXBkYXRlIiAsYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJEbyBub3QgY2hhbmdlIGZzdGFiIGZpbGUuIikKKyAgICBzdWJwYXJzZXIuYWRkX2FyZ3VtZW50KCItdiIsICItLXZhcnMiLCBkZXN0PSd2YXJzX2RpcicsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0iZGlyZWN0b3J5IHdpdGggPGltYWdlPi5lbnYgZmlsZXMgdGhhdCBzdG9yZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiYml0YmFrZSB2YXJpYWJsZXMiKQorICAgIHN1YnBhcnNlci5hZGRfYXJndW1lbnQoIi1EIiwgIi0tZGVidWciLCBkZXN0PSJkZWJ1ZyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgaGVscD0ib3V0cHV0IGRlYnVnIGluZm9ybWF0aW9uIikKKyAgICByZXR1cm4KKworCitkZWYgd2ljX2luaXRfcGFyc2VyX2xpc3Qoc3VicGFyc2VyKToKKyAgICBzdWJwYXJzZXIuYWRkX2FyZ3VtZW50KCJsaXN0X3R5cGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iY2FuIGJlICdpbWFnZXMnIG9yICdzb3VyY2UtcGx1Z2lucycgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG8gb2J0YWluIGEgbGlzdC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSWYgdmFsdWUgaXMgYSB2YWxpZCAud2tzIGltYWdlIGZpbGUiKQorICAgIHN1YnBhcnNlci5hZGRfYXJndW1lbnQoImhlbHBfZm9yIiwgZGVmYXVsdD1bXSwgbmFyZ3M9JyonLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iSWYgJ2xpc3RfdHlwZScgaXMgYSB2YWxpZCAud2tzIGltYWdlIGZpbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhpcyB2YWx1ZSBjYW4gYmUgJ2hlbHAnIHRvIHNob3cgdGhlIGhlbHAgaW5mb3JtYXRpb24gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVmaW5lZCBpbnNpZGUgdGhlIC53a3MgZmlsZSIpCisgICAgcmV0dXJuCisKK2RlZiBpbWd0eXBlKGFyZyk6CisgICAgIiIiCisgICAgQ3VzdG9tIHR5cGUgZm9yIEFyZ3VtZW50UGFyc2VyCisgICAgQ29udmVydHMgcGF0aCBzcGVjIHRvIG5hbWVkIHR1cGxlOiAoaW1hZ2UsIHBhcnRpdGlvbiwgcGF0aCkKKyAgICAiIiIKKyAgICBpbWFnZSA9IGFyZworICAgIHBhcnQgPSBwYXRoID0gTm9uZQorICAgIGlmICc6JyBpbiBpbWFnZToKKyAgICAgICAgaW1hZ2UsIHBhcnQgPSBpbWFnZS5zcGxpdCgnOicpCisgICAgICAgIGlmICcvJyBpbiBwYXJ0OgorICAgICAgICAgICAgcGFydCwgcGF0aCA9IHBhcnQuc3BsaXQoJy8nLCAxKQorICAgICAgICBpZiBub3QgcGF0aDoKKyAgICAgICAgICAgIHBhdGggPSAnLycKKworICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShpbWFnZSk6CisgICAgICAgIGVyciA9ICIlcyBpcyBub3QgYSByZWd1bGFyIGZpbGUgb3Igc3ltbGluayIgJSBpbWFnZQorICAgICAgICByYWlzZSBhcmdwYXJzZS5Bcmd1bWVudFR5cGVFcnJvcihlcnIpCisKKyAgICByZXR1cm4gbmFtZWR0dXBsZSgnSW1nVHlwZScsICdpbWFnZSBwYXJ0IHBhdGgnKShpbWFnZSwgcGFydCwgcGF0aCkKKworZGVmIHdpY19pbml0X3BhcnNlcl9scyhzdWJwYXJzZXIpOgorICAgIHN1YnBhcnNlci5hZGRfYXJndW1lbnQoInBhdGgiLCB0eXBlPWltZ3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJpbWFnZSBzcGVjOiA8aW1hZ2U+Wzo8dmZhdCBwYXJ0aXRpb24+WzxwYXRoPl1dIikKKyAgICBzdWJwYXJzZXIuYWRkX2FyZ3VtZW50KCItbiIsICItLW5hdGl2ZS1zeXNyb290IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InBhdGggdG8gdGhlIG5hdGl2ZSBzeXNyb290IGNvbnRhaW5pbmcgdGhlIHRvb2xzIikKKworZGVmIGltZ3BhdGh0eXBlKGFyZyk6CisgICAgaW1nID0gaW1ndHlwZShhcmcpCisgICAgaWYgaW1nLnBhcnQgaXMgTm9uZToKKyAgICAgICAgcmFpc2UgYXJncGFyc2UuQXJndW1lbnRUeXBlRXJyb3IoInBhcnRpdGlvbiBudW1iZXIgaXMgbm90IHNwZWNpZmllZCIpCisgICAgcmV0dXJuIGltZworCitkZWYgd2ljX2luaXRfcGFyc2VyX2NwKHN1YnBhcnNlcik6CisgICAgc3VicGFyc2VyLmFkZF9hcmd1bWVudCgic3JjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InNvdXJjZSBzcGVjIikKKyAgICBzdWJwYXJzZXIuYWRkX2FyZ3VtZW50KCJkZXN0IiwgdHlwZT1pbWdwYXRodHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9ImltYWdlIHNwZWM6IDxpbWFnZT46PHZmYXQgcGFydGl0aW9uPls8cGF0aD5dIikKKyAgICBzdWJwYXJzZXIuYWRkX2FyZ3VtZW50KCItbiIsICItLW5hdGl2ZS1zeXNyb290IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InBhdGggdG8gdGhlIG5hdGl2ZSBzeXNyb290IGNvbnRhaW5pbmcgdGhlIHRvb2xzIikKKworZGVmIHdpY19pbml0X3BhcnNlcl9ybShzdWJwYXJzZXIpOgorICAgIHN1YnBhcnNlci5hZGRfYXJndW1lbnQoInBhdGgiLCB0eXBlPWltZ3BhdGh0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0icGF0aDogPGltYWdlPjo8dmZhdCBwYXJ0aXRpb24+PHBhdGg+IikKKyAgICBzdWJwYXJzZXIuYWRkX2FyZ3VtZW50KCItbiIsICItLW5hdGl2ZS1zeXNyb290IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InBhdGggdG8gdGhlIG5hdGl2ZSBzeXNyb290IGNvbnRhaW5pbmcgdGhlIHRvb2xzIikKKworZGVmIGV4cGFuZHR5cGUocnVsZXMpOgorICAgICIiIgorICAgIEN1c3RvbSB0eXBlIGZvciBBcmd1bWVudFBhcnNlcgorICAgIENvbnZlcnRzIGV4cGFuZCBydWxlcyB0byB0aGUgZGljdGlvbmFyeSB7PHBhcnRpdGlvbj46IHNpemV9CisgICAgIiIiCisgICAgaWYgcnVsZXMgPT0gJ2F1dG8nOgorICAgICAgICByZXR1cm4ge30KKyAgICByZXN1bHQgPSB7fQorICAgIGZvciBydWxlIGluIHJ1bGVzLnNwbGl0KCctJyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhcnQsIHNpemUgPSBydWxlLnNwbGl0KCc6JykKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBhcmdwYXJzZS5Bcmd1bWVudFR5cGVFcnJvcigiSW5jb3JyZWN0IHJ1bGUgZm9ybWF0OiAlcyIgJSBydWxlKQorCisgICAgICAgIGlmIG5vdCBwYXJ0LmlzZGlnaXQoKToKKyAgICAgICAgICAgIHJhaXNlIGFyZ3BhcnNlLkFyZ3VtZW50VHlwZUVycm9yKCJSdWxlICclcyc6IHBhcnRpdGlvbiBudW1iZXIgbXVzdCBiZSBpbnRlZ2VyIiAlIHJ1bGUpCisKKyAgICAgICAgIyB2YWxpZGF0ZSBzaXplCisgICAgICAgIG11bHRpcGxpZXIgPSAxCisgICAgICAgIGZvciBzdWZmaXgsIG11bHQgaW4gWygnSycsIDEwMjQpLCAoJ00nLCAxMDI0ICogMTAyNCksICgnRycsIDEwMjQgKiAxMDI0ICogMTAyNCldOgorICAgICAgICAgICAgaWYgc2l6ZS51cHBlcigpLmVuZHN3aXRoKHN1ZmZpeCk6CisgICAgICAgICAgICAgICAgbXVsdGlwbGllciA9IG11bHQKKyAgICAgICAgICAgICAgICBzaXplID0gc2l6ZVs6LTFdCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbm90IHNpemUuaXNkaWdpdCgpOgorICAgICAgICAgICAgcmFpc2UgYXJncGFyc2UuQXJndW1lbnRUeXBlRXJyb3IoIlJ1bGUgJyVzJzogc2l6ZSBtdXN0IGJlIGludGVnZXIiICUgcnVsZSkKKworICAgICAgICByZXN1bHRbaW50KHBhcnQpXSA9IGludChzaXplKSAqIG11bHRpcGxpZXIKKworICAgIHJldHVybiByZXN1bHQKKworZGVmIHdpY19pbml0X3BhcnNlcl93cml0ZShzdWJwYXJzZXIpOgorICAgIHN1YnBhcnNlci5hZGRfYXJndW1lbnQoImltYWdlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InBhdGggdG8gdGhlIHdpYyBpbWFnZSIpCisgICAgc3VicGFyc2VyLmFkZF9hcmd1bWVudCgidGFyZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InRhcmdldCBmaWxlIG9yIGRldmljZSIpCisgICAgc3VicGFyc2VyLmFkZF9hcmd1bWVudCgiLWUiLCAiLS1leHBhbmQiLCB0eXBlPWV4cGFuZHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJleHBhbmQgcnVsZXM6IGF1dG8gb3IgPHBhcnRpdGlvbj46PHNpemU+Wyw8cGFydGl0aW9uPjo8c2l6ZT5dIikKKyAgICBzdWJwYXJzZXIuYWRkX2FyZ3VtZW50KCItbiIsICItLW5hdGl2ZS1zeXNyb290IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InBhdGggdG8gdGhlIG5hdGl2ZSBzeXNyb290IGNvbnRhaW5pbmcgdGhlIHRvb2xzIikKKworZGVmIHdpY19pbml0X3BhcnNlcl9oZWxwKHN1YnBhcnNlcik6CisgICAgaGVscHBhcnNlcnMgPSBzdWJwYXJzZXIuYWRkX3N1YnBhcnNlcnMoZGVzdD0naGVscF90b3BpYycsIGhlbHA9aGxwLndpY191c2FnZSkKKyAgICBmb3IgaGVscHRvcGljIGluIGhlbHB0b3BpY3M6CisgICAgICAgIGhlbHBwYXJzZXJzLmFkZF9wYXJzZXIoaGVscHRvcGljLCBoZWxwPWhlbHB0b3BpY3NbaGVscHRvcGljXVsyXSkKKyAgICByZXR1cm4KKworCitzdWJjb21tYW5kcyA9IHsKKyAgICAiY3JlYXRlIjogICAgW3dpY19jcmVhdGVfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgIGhscC53aWNfY3JlYXRlX3VzYWdlLAorICAgICAgICAgICAgICAgICAgaGxwLndpY19jcmVhdGVfaGVscCwKKyAgICAgICAgICAgICAgICAgIHdpY19pbml0X3BhcnNlcl9jcmVhdGVdLAorICAgICJsaXN0IjogICAgICBbd2ljX2xpc3Rfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgIGhscC53aWNfbGlzdF91c2FnZSwKKyAgICAgICAgICAgICAgICAgIGhscC53aWNfbGlzdF9oZWxwLAorICAgICAgICAgICAgICAgICAgd2ljX2luaXRfcGFyc2VyX2xpc3RdLAorICAgICJscyI6ICAgICAgICBbd2ljX2xzX3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgICBobHAud2ljX2xzX3VzYWdlLAorICAgICAgICAgICAgICAgICAgaGxwLndpY19sc19oZWxwLAorICAgICAgICAgICAgICAgICAgd2ljX2luaXRfcGFyc2VyX2xzXSwKKyAgICAiY3AiOiAgICAgICAgW3dpY19jcF9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICAgaGxwLndpY19jcF91c2FnZSwKKyAgICAgICAgICAgICAgICAgIGhscC53aWNfY3BfaGVscCwKKyAgICAgICAgICAgICAgICAgIHdpY19pbml0X3BhcnNlcl9jcF0sCisgICAgInJtIjogICAgICAgIFt3aWNfcm1fc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgIGhscC53aWNfcm1fdXNhZ2UsCisgICAgICAgICAgICAgICAgICBobHAud2ljX3JtX2hlbHAsCisgICAgICAgICAgICAgICAgICB3aWNfaW5pdF9wYXJzZXJfcm1dLAorICAgICJ3cml0ZSI6ICAgICBbd2ljX3dyaXRlX3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgICBobHAud2ljX3dyaXRlX3VzYWdlLAorICAgICAgICAgICAgICAgICAgaGxwLndpY193cml0ZV9oZWxwLAorICAgICAgICAgICAgICAgICAgd2ljX2luaXRfcGFyc2VyX3dyaXRlXSwKKyAgICAiaGVscCI6ICAgICAgW3dpY19oZWxwX3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgICB3aWNfaGVscF90b3BpY191c2FnZSwKKyAgICAgICAgICAgICAgICAgIGhscC53aWNfaGVscF9oZWxwLAorICAgICAgICAgICAgICAgICAgd2ljX2luaXRfcGFyc2VyX2hlbHBdCit9CisKKworZGVmIGluaXRfcGFyc2VyKHBhcnNlcik6CisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS12ZXJzaW9uIiwgYWN0aW9uPSJ2ZXJzaW9uIiwKKyAgICAgICAgdmVyc2lvbj0iJShwcm9nKXMge3ZlcnNpb259Ii5mb3JtYXQodmVyc2lvbj1fX3ZlcnNpb25fXykpCisgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycyhkZXN0PSdjb21tYW5kJywgaGVscD1obHAud2ljX3VzYWdlKQorICAgIGZvciBzdWJjbWQgaW4gc3ViY29tbWFuZHM6CisgICAgICAgIHN1YnBhcnNlciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcihzdWJjbWQsIGhlbHA9c3ViY29tbWFuZHNbc3ViY21kXVsyXSkKKyAgICAgICAgc3ViY29tbWFuZHNbc3ViY21kXVszXShzdWJwYXJzZXIpCisKKwogZGVmIG1haW4oYXJndik6Ci0gICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHZlcnNpb249IndpYyB2ZXJzaW9uICVzIiAlIF9fdmVyc2lvbl9fLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2FnZT1obHAud2ljX3VzYWdlKQorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKAorICAgICAgICBkZXNjcmlwdGlvbj0id2ljIHZlcnNpb24gJXMiICUgX192ZXJzaW9uX18pCiAKLSAgICBwYXJzZXIuZGlzYWJsZV9pbnRlcnNwZXJzZWRfYXJncygpCisgICAgaW5pdF9wYXJzZXIocGFyc2VyKQogCi0gICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3YpWzFdCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3YpCiAKLSAgICBpZiBsZW4oYXJncyk6Ci0gICAgICAgIGlmIGFyZ3NbMF0gPT0gImhlbHAiOgotICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDE6CisgICAgaWYgImNvbW1hbmQiIGluIHZhcnMoYXJncyk6CisgICAgICAgIGlmIGFyZ3MuY29tbWFuZCA9PSAiaGVscCI6CisgICAgICAgICAgICBpZiBhcmdzLmhlbHBfdG9waWMgaXMgTm9uZToKICAgICAgICAgICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCi0gICAgICAgICAgICAgICAgcmFpc2UgV2ljRXJyb3IoImhlbHAgY29tbWFuZCByZXF1aXJlcyBwYXJhbWV0ZXIiKQorICAgICAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgICAgICAgICBwcmludCgiUGxlYXNlIHNwZWNpZnkgYSBoZWxwIHRvcGljIikKKyAgICAgICAgICAgIGVsaWYgYXJncy5oZWxwX3RvcGljIGluIGhlbHB0b3BpY3M6CisgICAgICAgICAgICAgICAgaGxwdCA9IGhlbHB0b3BpY3NbYXJncy5oZWxwX3RvcGljXQorICAgICAgICAgICAgICAgIGhscHRbMF0oaGxwdFsxXSwgaGxwdFsyXSkKKyAgICAgICAgICAgIHJldHVybiAwCiAKICAgICByZXR1cm4gaGxwLmludm9rZV9zdWJjb21tYW5kKGFyZ3MsIHBhcnNlciwgaGxwLndpY19oZWxwX3VzYWdlLCBzdWJjb21tYW5kcykKIApkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMveW9jdG8tY2hlY2stbGF5ZXIgYi9pbXBvcnQtbGF5ZXJzL3lvY3RvLXBva3kvc2NyaXB0cy95b2N0by1jaGVjay1sYXllcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YTRmZDc1Ci0tLSAvZGV2L251bGwKKysrIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMveW9jdG8tY2hlY2stbGF5ZXIKQEAgLTAsMCArMSwyMDggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworIyBZb2N0byBQcm9qZWN0IGxheWVyIGNoZWNraW5nIHRvb2wKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE3IEludGVsIENvcnBvcmF0aW9uCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgY29sbGVjdGlvbnMKKworc2NyaXB0c19wYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKQorbGliX3BhdGggPSBzY3JpcHRzX3BhdGggKyAnL2xpYicKK3N5cy5wYXRoID0gc3lzLnBhdGggKyBbbGliX3BhdGhdCitpbXBvcnQgc2NyaXB0dXRpbHMKK2ltcG9ydCBzY3JpcHRwYXRoCitzY3JpcHRwYXRoLmFkZF9vZV9saWJfcGF0aCgpCitzY3JpcHRwYXRoLmFkZF9iaXRiYWtlX2xpYl9wYXRoKCkKKworZnJvbSBjaGVja2xheWVyIGltcG9ydCBMYXllclR5cGUsIGRldGVjdF9sYXllcnMsIGFkZF9sYXllciwgYWRkX2xheWVyX2RlcGVuZGVuY2llcywgZ2V0X3NpZ25hdHVyZXMKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgZ2V0X2JiX3ZhcnMKKworUFJPR05BTUUgPSAneW9jdG8tY2hlY2stbGF5ZXInCitDQVNFU19QQVRIUyA9IFtvcy5wYXRoLmpvaW4ob3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpLAorICAgICAgICAgICAgICAgICdsaWInLCAnY2hlY2tsYXllcicsICdjYXNlcycpXQorbG9nZ2VyID0gc2NyaXB0dXRpbHMubG9nZ2VyX2NyZWF0ZShQUk9HTkFNRSwgc3RyZWFtPXN5cy5zdGRvdXQpCisKK2RlZiB0ZXN0X2xheWVyKHRkLCBsYXllciwgdGVzdF9zb2Z0d2FyZV9sYXllcl9zaWduYXR1cmVzKToKKyAgICBmcm9tIGNoZWNrbGF5ZXIuY29udGV4dCBpbXBvcnQgQ2hlY2tMYXllclRlc3RDb250ZXh0CisgICAgbG9nZ2VyLmluZm8oIlN0YXJ0aW5nIHRvIGFuYWx5emU6ICVzIiAlIGxheWVyWyduYW1lJ10pCisgICAgbG9nZ2VyLmluZm8oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKQorCisgICAgdGMgPSBDaGVja0xheWVyVGVzdENvbnRleHQodGQ9dGQsIGxvZ2dlcj1sb2dnZXIsIGxheWVyPWxheWVyLCB0ZXN0X3NvZnR3YXJlX2xheWVyX3NpZ25hdHVyZXM9dGVzdF9zb2Z0d2FyZV9sYXllcl9zaWduYXR1cmVzKQorICAgIHRjLmxvYWRUZXN0cyhDQVNFU19QQVRIUykKKyAgICByZXR1cm4gdGMucnVuVGVzdHMoKQorCitkZWYgbWFpbigpOgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKAorICAgICAgICAgICAgZGVzY3JpcHRpb249IllvY3RvIFByb2plY3QgbGF5ZXIgY2hlY2tpbmcgdG9vbCIsCisgICAgICAgICAgICBhZGRfaGVscD1GYWxzZSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdsYXllcnMnLCBtZXRhdmFyPSdMQVlFUl9ESVInLCBuYXJncz0nKycsCisgICAgICAgICAgICBoZWxwPSdMYXllciB0byBjaGVjaycpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLW8nLCAnLS1vdXRwdXQtbG9nJywKKyAgICAgICAgICAgIGhlbHA9J0ZpbGUgdG8gb3V0cHV0IGxvZyAob3B0aW9uYWwpJywgYWN0aW9uPSdzdG9yZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1kZXBlbmRlbmN5JywgbmFyZ3M9IisiLAorICAgICAgICAgICAgaGVscD0nTGF5ZXJzIHRvIHByb2Nlc3MgZm9yIGRlcGVuZGVuY2llcycsIGFjdGlvbj0nc3RvcmUnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbWFjaGluZXMnLCBuYXJncz0iKyIsCisgICAgICAgICAgICBoZWxwPSdMaXN0IG9mIE1BQ0hJTkVzIHRvIGJlIHVzZWQgZHVyaW5nIHRlc3RpbmcnLCBhY3Rpb249J3N0b3JlJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWFkZGl0aW9uYWwtbGF5ZXJzJywgbmFyZ3M9IisiLAorICAgICAgICAgICAgaGVscD0nTGlzdCBvZiBhZGRpdGlvbmFsIGxheWVycyB0byBhZGQgZHVyaW5nIHRlc3RpbmcnLCBhY3Rpb249J3N0b3JlJykKKyAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0td2l0aC1zb2Z0d2FyZS1sYXllci1zaWduYXR1cmUtY2hlY2snLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSd0ZXN0X3NvZnR3YXJlX2xheWVyX3NpZ25hdHVyZXMnLAorICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2NoZWNrIHRoYXQgc29mdHdhcmUgbGF5ZXJzIGRvIG5vdCBjaGFuZ2Ugc2lnbmF0dXJlcyAob24gYnkgZGVmYXVsdCknKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS13aXRob3V0LXNvZnR3YXJlLWxheWVyLXNpZ25hdHVyZS1jaGVjaycsIGFjdGlvbj0nc3RvcmVfZmFsc2UnLCBkZXN0PSd0ZXN0X3NvZnR3YXJlX2xheWVyX3NpZ25hdHVyZXMnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkaXNhYmxlIHNpZ25hdHVyZSBjaGVja2luZyBmb3Igc29mdHdhcmUgbGF5ZXJzJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctbicsICctLW5vLWF1dG8nLCBoZWxwPSdEaXNhYmxlIGF1dG8gbGF5ZXIgZGlzY292ZXJ5JywKKyAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWQnLCAnLS1kZWJ1ZycsIGhlbHA9J0VuYWJsZSBkZWJ1ZyBvdXRwdXQnLAorICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcScsICctLXF1aWV0JywgaGVscD0nUHJpbnQgb25seSBlcnJvcnMnLAorICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJykKKworICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1oJywgJy0taGVscCcsIGFjdGlvbj0naGVscCcsCisgICAgICAgICAgICBkZWZhdWx0PWFyZ3BhcnNlLlNVUFBSRVNTLAorICAgICAgICAgICAgaGVscD0nc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdCcpCisKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgaWYgYXJncy5vdXRwdXRfbG9nOgorICAgICAgICBmaCA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIoYXJncy5vdXRwdXRfbG9nKQorICAgICAgICBmaC5zZXRGb3JtYXR0ZXIobG9nZ2luZy5Gb3JtYXR0ZXIoIiUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIikpCisgICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKGZoKQorICAgIGlmIGFyZ3MuZGVidWc6CisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorICAgIGVsaWYgYXJncy5xdWlldDoKKyAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuRVJST1IpCisKKyAgICBpZiBub3QgJ0JVSUxERElSJyBpbiBvcy5lbnZpcm9uOgorICAgICAgICBsb2dnZXIuZXJyb3IoIllvdSBtdXN0IHNvdXJjZSB0aGUgZW52aXJvbm1lbnQgYmVmb3JlIHJ1biB0aGlzIHNjcmlwdC4iKQorICAgICAgICBsb2dnZXIuZXJyb3IoIiQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52IikKKyAgICAgICAgcmV0dXJuIDEKKyAgICBidWlsZGRpciA9IG9zLmVudmlyb25bJ0JVSUxERElSJ10KKyAgICBiYmxheWVyc2NvbmYgPSBvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICdjb25mJywgJ2JibGF5ZXJzLmNvbmYnKQorCisgICAgbGF5ZXJzID0gZGV0ZWN0X2xheWVycyhhcmdzLmxheWVycywgYXJncy5ub19hdXRvKQorICAgIGlmIG5vdCBsYXllcnM6CisgICAgICAgIGxvZ2dlci5lcnJvcigiRmFpbCB0byBkZXRlY3QgbGF5ZXJzIikKKyAgICAgICAgcmV0dXJuIDEKKyAgICBpZiBhcmdzLmFkZGl0aW9uYWxfbGF5ZXJzOgorICAgICAgICBhZGRpdGlvbmFsX2xheWVycyA9IGRldGVjdF9sYXllcnMoYXJncy5hZGRpdGlvbmFsX2xheWVycywgYXJncy5ub19hdXRvKQorICAgIGVsc2U6CisgICAgICAgIGFkZGl0aW9uYWxfbGF5ZXJzID0gW10KKyAgICBpZiBhcmdzLmRlcGVuZGVuY3k6CisgICAgICAgIGRlcF9sYXllcnMgPSBkZXRlY3RfbGF5ZXJzKGFyZ3MuZGVwZW5kZW5jeSwgYXJncy5ub19hdXRvKQorICAgICAgICBkZXBfbGF5ZXJzID0gZGVwX2xheWVycyArIGxheWVycworICAgIGVsc2U6CisgICAgICAgIGRlcF9sYXllcnMgPSBsYXllcnMKKworICAgIGxvZ2dlci5pbmZvKCJEZXRlY3RlZCBsYXllcnM6IikKKyAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJzOgorICAgICAgICBpZiBsYXllclsndHlwZSddID09IExheWVyVHlwZS5FUlJPUl9CU1BfRElTVFJPOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCIlczogQ2FuJ3QgYmUgRElTVFJPIGFuZCBCU1AgdHlwZSBhdCB0aGUgc2FtZSB0aW1lLiJcCisgICAgICAgICAgICAgICAgICAgICAiIFRoZSBjb25mL2Rpc3RybyBhbmQgY29uZi9tYWNoaW5lIGZvbGRlcnMgd2FzIGZvdW5kLiJcCisgICAgICAgICAgICAgICAgICAgICAlIGxheWVyWyduYW1lJ10pCisgICAgICAgICAgICBsYXllcnMucmVtb3ZlKGxheWVyKQorICAgICAgICBlbGlmIGxheWVyWyd0eXBlJ10gPT0gTGF5ZXJUeXBlLkVSUk9SX05PX0xBWUVSX0NPTkY6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIiVzOiBEb24ndCBoYXZlIGNvbmYvbGF5ZXIuY29uZiBmaWxlLiJcCisgICAgICAgICAgICAgICAgICAgICAlIGxheWVyWyduYW1lJ10pCisgICAgICAgICAgICBsYXllcnMucmVtb3ZlKGxheWVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIiVzOiAlcywgJXMiICUgKGxheWVyWyduYW1lJ10sIGxheWVyWyd0eXBlJ10sCisgICAgICAgICAgICAgICAgbGF5ZXJbJ3BhdGgnXSkpCisgICAgaWYgbm90IGxheWVyczoKKyAgICAgICAgcmV0dXJuIDEKKworICAgIHNodXRpbC5jb3B5ZmlsZShiYmxheWVyc2NvbmYsIGJibGF5ZXJzY29uZiArICcuYmFja3VwJykKKyAgICBkZWYgY2xlYW51cF9iYmxheWVycyhzaWdudW0sIGZyYW1lKToKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKGJibGF5ZXJzY29uZiArICcuYmFja3VwJywgYmJsYXllcnNjb25mKQorICAgICAgICBvcy51bmxpbmsoYmJsYXllcnNjb25mICsgJy5iYWNrdXAnKQorICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIGNsZWFudXBfYmJsYXllcnMpCisgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBjbGVhbnVwX2JibGF5ZXJzKQorCisgICAgdGQgPSB7fQorICAgIHJlc3VsdHMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgcmVzdWx0c19zdGF0dXMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisKKyAgICBsYXllcnNfdGVzdGVkID0gMAorICAgIGZvciBsYXllciBpbiBsYXllcnM6CisgICAgICAgIGlmIGxheWVyWyd0eXBlJ10gPT0gTGF5ZXJUeXBlLkVSUk9SX05PX0xBWUVSX0NPTkYgb3IgXAorICAgICAgICAgICAgICAgIGxheWVyWyd0eXBlJ10gPT0gTGF5ZXJUeXBlLkVSUk9SX0JTUF9ESVNUUk86CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGxvZ2dlci5pbmZvKCcnKQorICAgICAgICBsb2dnZXIuaW5mbygiU2V0dGluZyB1cCBmb3IgJXMoJXMpLCAlcyIgJSAobGF5ZXJbJ25hbWUnXSwgbGF5ZXJbJ3R5cGUnXSwKKyAgICAgICAgICAgIGxheWVyWydwYXRoJ10pKQorCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShiYmxheWVyc2NvbmYgKyAnLmJhY2t1cCcsIGJibGF5ZXJzY29uZikKKworICAgICAgICBtaXNzaW5nX2RlcGVuZGVuY2llcyA9IG5vdCBhZGRfbGF5ZXJfZGVwZW5kZW5jaWVzKGJibGF5ZXJzY29uZiwgbGF5ZXIsIGRlcF9sYXllcnMsIGxvZ2dlcikKKyAgICAgICAgaWYgbm90IG1pc3NpbmdfZGVwZW5kZW5jaWVzOgorICAgICAgICAgICAgZm9yIGFkZGl0aW9uYWxfbGF5ZXIgaW4gYWRkaXRpb25hbF9sYXllcnM6CisgICAgICAgICAgICAgICAgaWYgbm90IGFkZF9sYXllcl9kZXBlbmRlbmNpZXMoYmJsYXllcnNjb25mLCBhZGRpdGlvbmFsX2xheWVyLCBkZXBfbGF5ZXJzLCBsb2dnZXIpOgorICAgICAgICAgICAgICAgICAgICBtaXNzaW5nX2RlcGVuZGVuY2llcyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbm90IGFkZF9sYXllcl9kZXBlbmRlbmNpZXMoYmJsYXllcnNjb25mLCBsYXllciwgZGVwX2xheWVycywgbG9nZ2VyKSBvciBcCisgICAgICAgICAgIGFueShtYXAobGFtYmRhIGFkZGl0aW9uYWxfbGF5ZXI6IG5vdCBhZGRfbGF5ZXJfZGVwZW5kZW5jaWVzKGJibGF5ZXJzY29uZiwgYWRkaXRpb25hbF9sYXllciwgZGVwX2xheWVycywgbG9nZ2VyKSwKKyAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2xheWVycykpOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1NraXBwaW5nICVzIGR1ZSB0byBtaXNzaW5nIGRlcGVuZGVuY2llcy4nICUgbGF5ZXJbJ25hbWUnXSkKKyAgICAgICAgICAgIHJlc3VsdHNbbGF5ZXJbJ25hbWUnXV0gPSBOb25lCisgICAgICAgICAgICByZXN1bHRzX3N0YXR1c1tsYXllclsnbmFtZSddXSA9ICdTS0lQUEVEIChNaXNzaW5nIGRlcGVuZGVuY2llcyknCisgICAgICAgICAgICBsYXllcnNfdGVzdGVkID0gbGF5ZXJzX3Rlc3RlZCArIDEKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgYW55KG1hcChsYW1iZGEgYWRkaXRpb25hbF9sYXllcjogbm90IGFkZF9sYXllcihiYmxheWVyc2NvbmYsIGFkZGl0aW9uYWxfbGF5ZXIsIGRlcF9sYXllcnMsIGxvZ2dlciksCisgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9sYXllcnMpKToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdTa2lwcGluZyAlcyBkdWUgdG8gbWlzc2luZyBhZGRpdGlvbmFsIGxheWVycy4nICUgbGF5ZXJbJ25hbWUnXSkKKyAgICAgICAgICAgIHJlc3VsdHNbbGF5ZXJbJ25hbWUnXV0gPSBOb25lCisgICAgICAgICAgICByZXN1bHRzX3N0YXR1c1tsYXllclsnbmFtZSddXSA9ICdTS0lQUEVEIChNaXNzaW5nIGFkZGl0aW9uYWwgbGF5ZXJzKScKKyAgICAgICAgICAgIGxheWVyc190ZXN0ZWQgPSBsYXllcnNfdGVzdGVkICsgMQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBsb2dnZXIuaW5mbygnR2V0dGluZyBpbml0aWFsIGJpdGJha2UgdmFyaWFibGVzIC4uLicpCisgICAgICAgIHRkWydiYnZhcnMnXSA9IGdldF9iYl92YXJzKCkKKyAgICAgICAgbG9nZ2VyLmluZm8oJ0dldHRpbmcgaW5pdGlhbCBzaWduYXR1cmVzIC4uLicpCisgICAgICAgIHRkWydidWlsZGRpciddID0gYnVpbGRkaXIKKyAgICAgICAgdGRbJ3NpZ3MnXSwgdGRbJ3R1bmV0YXNrcyddID0gZ2V0X3NpZ25hdHVyZXModGRbJ2J1aWxkZGlyJ10pCisgICAgICAgIHRkWydtYWNoaW5lcyddID0gYXJncy5tYWNoaW5lcworCisgICAgICAgIGlmIG5vdCBhZGRfbGF5ZXIoYmJsYXllcnNjb25mLCBsYXllciwgZGVwX2xheWVycywgbG9nZ2VyKToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdTa2lwcGluZyAlcyA/Pz8uJyAlIGxheWVyWyduYW1lJ10pCisgICAgICAgICAgICByZXN1bHRzW2xheWVyWyduYW1lJ11dID0gTm9uZQorICAgICAgICAgICAgcmVzdWx0c19zdGF0dXNbbGF5ZXJbJ25hbWUnXV0gPSAnU0tJUFBFRCAoVW5rbm93biknCisgICAgICAgICAgICBsYXllcnNfdGVzdGVkID0gbGF5ZXJzX3Rlc3RlZCArIDEKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgcmVzdWx0ID0gdGVzdF9sYXllcih0ZCwgbGF5ZXIsIGFyZ3MudGVzdF9zb2Z0d2FyZV9sYXllcl9zaWduYXR1cmVzKQorICAgICAgICByZXN1bHRzW2xheWVyWyduYW1lJ11dID0gcmVzdWx0CisgICAgICAgIHJlc3VsdHNfc3RhdHVzW2xheWVyWyduYW1lJ11dID0gJ1BBU1MnIGlmIHJlc3VsdHNbbGF5ZXJbJ25hbWUnXV0ud2FzU3VjY2Vzc2Z1bCgpIGVsc2UgJ0ZBSUwnCisgICAgICAgIGxheWVyc190ZXN0ZWQgPSBsYXllcnNfdGVzdGVkICsgMQorCisgICAgcmV0ID0gMAorICAgIGlmIGxheWVyc190ZXN0ZWQ6CisgICAgICAgIGxvZ2dlci5pbmZvKCcnKQorICAgICAgICBsb2dnZXIuaW5mbygnU3VtbWFyeSBvZiByZXN1bHRzOicpCisgICAgICAgIGxvZ2dlci5pbmZvKCcnKQorICAgICAgICBmb3IgbGF5ZXJfbmFtZSBpbiByZXN1bHRzX3N0YXR1czoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCclcyAuLi4gJXMnICUgKGxheWVyX25hbWUsIHJlc3VsdHNfc3RhdHVzW2xheWVyX25hbWVdKSkKKyAgICAgICAgICAgIGlmIG5vdCByZXN1bHRzW2xheWVyX25hbWVdIG9yIG5vdCByZXN1bHRzW2xheWVyX25hbWVdLndhc1N1Y2Nlc3NmdWwoKToKKyAgICAgICAgICAgICAgICByZXQgPSAyICMgcmV0ID0gMSB1c2VkIGZvciBpbml0aWFsaXphdGlvbiBlcnJvcnMKKworICAgIGNsZWFudXBfYmJsYXllcnMoTm9uZSwgTm9uZSkKKworICAgIHJldHVybiByZXQKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0cnk6CisgICAgICAgIHJldCA9ICBtYWluKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByZXQgPSAxCisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCisgICAgc3lzLmV4aXQocmV0KQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMveW9jdG8tY2hlY2stbGF5ZXItd3JhcHBlciBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3lvY3RvLWNoZWNrLWxheWVyLXdyYXBwZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmJmNmVlMQotLS0gL2Rldi9udWxsCisrKyBiL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3lvY3RvLWNoZWNrLWxheWVyLXdyYXBwZXIKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgYmFzaAorCisjIFlvY3RvIFByb2plY3QgbGF5ZXIgY2hlY2sgdG9vbCB3cmFwcGVyCisjCisjIENyZWF0ZXMgYSB0ZW1wb3JhcnkgYnVpbGQgZGlyZWN0b3J5IHRvIHJ1biB0aGUgeW9jdG8tY2hlY2stbGF5ZXIKKyMgc2NyaXB0IHRvIGF2b2lkIGEgY29udGFtaW5hdGVkIGVudmlyb25tZW50LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKK2lmIFsgLXogIiRCVUlMRERJUiIgXTsgdGhlbgorCWVjaG8gIlBsZWFzZSBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnYgYmVmb3JlIHJ1biB0aGlzIHNjcmlwdC4iCisJZXhpdCAyCitmaQorCisjIHNpbmNlIHdlIGFyZSB1c2luZyBhIHRlbXAgZGlyZWN0b3J5LCB1c2UgdGhlIHJlYWxwYXRoIGZvciBvdXRwdXQKKyMgbG9nIG9wdGlvbgorb3V0cHV0X2xvZz0nJword2hpbGUgZ2V0b3B0cyBvOiBuYW1lCitkbworCWNhc2UgJG5hbWUgaW4KKwlvKSBvdXRwdXRfbG9nPSQocmVhbHBhdGggIiRPUFRBUkciKQorCWVzYWMKK2RvbmUKK3NoaWZ0ICQoKCRPUFRJTkQgLSAxKSkKKworIyBnZW5lcmF0ZSBhIHRlbXAgZGlyZWN0b3J5IHRvIHJ1biBjaGVjayBsYXllciBzY3JpcHQKK2Jhc2VfZGlyPSQocmVhbHBhdGggJEJVSUxERElSLy4uLykKK2NkICRiYXNlX2RpcgorCitidWlsZF9kaXI9JChta3RlbXAgLXAgJGJhc2VfZGlyIC1kIC10IGJ1aWxkLVhYWFgpCisKK3NvdXJjZSBvZS1pbml0LWJ1aWxkLWVudiAkYnVpbGRfZGlyCitpZiBbWyAkb3V0cHV0X2xvZyAhPSAnJyBdXTsgdGhlbgorCXlvY3RvLWNoZWNrLWxheWVyIC1vICIkb3V0cHV0X2xvZyIgIiQqIgorZWxzZQorCXlvY3RvLWNoZWNrLWxheWVyICIkQCIKK2ZpCityZXRjb2RlPSQ/CisKK3JtIC1yZiAkYnVpbGRfZGlyCisKK2V4aXQgJHJldGNvZGUKZGlmZiAtLWdpdCBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3lvY3RvLWNvbXBhdC1sYXllci13cmFwcGVyIGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMveW9jdG8tY29tcGF0LWxheWVyLXdyYXBwZXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGRiNGI2ODcuLjAwMDAwMDAKLS0tIGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMveW9jdG8tY29tcGF0LWxheWVyLXdyYXBwZXIKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0jIS91c3IvYmluL2VudiBiYXNoCi0KLSMgWW9jdG8gUHJvamVjdCBjb21wYXRpYmlsaXR5IGxheWVyIHRvb2wgd3JhcHBlcgotIwotIyBDcmVhdGVzIGEgdGVtcHJhcnkgYnVpbGQgZGlyZWN0b3J5IHRvIHJ1biBZb2N0byBQcm9qZWN0IENvbXBhdGlibGUKLSMgc2NyaXB0IHRvIGF2b2lkIGEgY29udGFtaW5hdGVkIGVudmlyb25tZW50LgotIwotIyBDb3B5cmlnaHQgKEMpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KLSMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCi0KLWlmIFsgLXogIiRCVUlMRERJUiIgXTsgdGhlbgotCWVjaG8gIlBsZWFzZSBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnYgYmVmb3JlIHJ1biB0aGlzIHNjcmlwdC4iCi0JZXhpdCAyCi1maQotCi1iYXNlX2Rpcj0kKHJlYWxwYXRoICRCVUlMRERJUi8uLi8pCi1jZCAkYmFzZV9kaXIKLQotYnVpbGRfZGlyPSQobWt0ZW1wIC1wICRiYXNlX2RpciAtZCAtdCBidWlsZC1YWFhYKQotCi1zb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnYgJGJ1aWxkX2RpcgoteW9jdG8tY29tcGF0LWxheWVyLnB5ICIkQCIKLXJldGNvZGU9JD8KLQotcm0gLXJmICRidWlsZF9kaXIKLQotZXhpdCAkcmV0Y29kZQpkaWZmIC0tZ2l0IGEvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMveW9jdG8tY29tcGF0LWxheWVyLnB5IGIvaW1wb3J0LWxheWVycy95b2N0by1wb2t5L3NjcmlwdHMveW9jdG8tY29tcGF0LWxheWVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBiYTY0YjRkLi4wMDAwMDAwCi0tLSBhL2ltcG9ydC1sYXllcnMveW9jdG8tcG9reS9zY3JpcHRzL3lvY3RvLWNvbXBhdC1sYXllci5weQorKysgL2Rldi9udWxsCkBAIC0xLDIwNSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24zCi0KLSMgWW9jdG8gUHJvamVjdCBjb21wYXRpYmlsaXR5IGxheWVyIHRvb2wKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDE3IEludGVsIENvcnBvcmF0aW9uCi0jIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQotCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCBhcmdwYXJzZQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCB0aW1lCi1pbXBvcnQgc2lnbmFsCi1pbXBvcnQgc2h1dGlsCi1pbXBvcnQgY29sbGVjdGlvbnMKLQotc2NyaXB0c19wYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKQotbGliX3BhdGggPSBzY3JpcHRzX3BhdGggKyAnL2xpYicKLXN5cy5wYXRoID0gc3lzLnBhdGggKyBbbGliX3BhdGhdCi1pbXBvcnQgc2NyaXB0dXRpbHMKLWltcG9ydCBzY3JpcHRwYXRoCi1zY3JpcHRwYXRoLmFkZF9vZV9saWJfcGF0aCgpCi1zY3JpcHRwYXRoLmFkZF9iaXRiYWtlX2xpYl9wYXRoKCkKLQotZnJvbSBjb21wYXRsYXllciBpbXBvcnQgTGF5ZXJUeXBlLCBkZXRlY3RfbGF5ZXJzLCBhZGRfbGF5ZXIsIGFkZF9sYXllcl9kZXBlbmRlbmNpZXMsIGdldF9zaWduYXR1cmVzCi1mcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IGdldF9iYl92YXJzCi0KLVBST0dOQU1FID0gJ3lvY3RvLWNvbXBhdC1sYXllcicKLUNBU0VTX1BBVEhTID0gW29zLnBhdGguam9pbihvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSksCi0gICAgICAgICAgICAgICAgJ2xpYicsICdjb21wYXRsYXllcicsICdjYXNlcycpXQotbG9nZ2VyID0gc2NyaXB0dXRpbHMubG9nZ2VyX2NyZWF0ZShQUk9HTkFNRSwgc3RyZWFtPXN5cy5zdGRvdXQpCi0KLWRlZiB0ZXN0X2xheWVyX2NvbXBhdGliaWxpdHkodGQsIGxheWVyLCB0ZXN0X3NvZnR3YXJlX2xheWVyX3NpZ25hdHVyZXMpOgotICAgIGZyb20gY29tcGF0bGF5ZXIuY29udGV4dCBpbXBvcnQgQ29tcGF0TGF5ZXJUZXN0Q29udGV4dAotICAgIGxvZ2dlci5pbmZvKCJTdGFydGluZyB0byBhbmFseXplOiAlcyIgJSBsYXllclsnbmFtZSddKQotICAgIGxvZ2dlci5pbmZvKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIikKLQotICAgIHRjID0gQ29tcGF0TGF5ZXJUZXN0Q29udGV4dCh0ZD10ZCwgbG9nZ2VyPWxvZ2dlciwgbGF5ZXI9bGF5ZXIsIHRlc3Rfc29mdHdhcmVfbGF5ZXJfc2lnbmF0dXJlcz10ZXN0X3NvZnR3YXJlX2xheWVyX3NpZ25hdHVyZXMpCi0gICAgdGMubG9hZFRlc3RzKENBU0VTX1BBVEhTKQotICAgIHJldHVybiB0Yy5ydW5UZXN0cygpCi0KLWRlZiBtYWluKCk6Ci0gICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCi0gICAgICAgICAgICBkZXNjcmlwdGlvbj0iWW9jdG8gUHJvamVjdCBjb21wYXRpYmlsaXR5IGxheWVyIHRvb2wiLAotICAgICAgICAgICAgYWRkX2hlbHA9RmFsc2UpCi0gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnbGF5ZXJzJywgbWV0YXZhcj0nTEFZRVJfRElSJywgbmFyZ3M9JysnLAotICAgICAgICAgICAgaGVscD0nTGF5ZXIgdG8gdGVzdCBjb21wYXRpYmlsaXR5IHdpdGggWW9jdG8gUHJvamVjdCcpCi0gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLW8nLCAnLS1vdXRwdXQtbG9nJywKLSAgICAgICAgICAgIGhlbHA9J0ZpbGUgdG8gb3V0cHV0IGxvZyAob3B0aW9uYWwpJywgYWN0aW9uPSdzdG9yZScpCi0gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1kZXBlbmRlbmN5JywgbmFyZ3M9IisiLAotICAgICAgICAgICAgaGVscD0nTGF5ZXJzIHRvIHByb2Nlc3MgZm9yIGRlcGVuZGVuY2llcycsIGFjdGlvbj0nc3RvcmUnKQotICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbWFjaGluZXMnLCBuYXJncz0iKyIsCi0gICAgICAgICAgICBoZWxwPSdMaXN0IG9mIE1BQ0hJTkVzIHRvIGJlIHVzZWQgZHVyaW5nIHRlc3RpbmcnLCBhY3Rpb249J3N0b3JlJykKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWFkZGl0aW9uYWwtbGF5ZXJzJywgbmFyZ3M9IisiLAotICAgICAgICAgICAgaGVscD0nTGlzdCBvZiBhZGRpdGlvbmFsIGxheWVycyB0byBhZGQgZHVyaW5nIHRlc3RpbmcnLCBhY3Rpb249J3N0b3JlJykKLSAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKLSAgICBncm91cC5hZGRfYXJndW1lbnQoJy0td2l0aC1zb2Z0d2FyZS1sYXllci1zaWduYXR1cmUtY2hlY2snLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSd0ZXN0X3NvZnR3YXJlX2xheWVyX3NpZ25hdHVyZXMnLAotICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2NoZWNrIHRoYXQgc29mdHdhcmUgbGF5ZXJzIGRvIG5vdCBjaGFuZ2Ugc2lnbmF0dXJlcyAob24gYnkgZGVmYXVsdCknKQotICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS13aXRob3V0LXNvZnR3YXJlLWxheWVyLXNpZ25hdHVyZS1jaGVjaycsIGFjdGlvbj0nc3RvcmVfZmFsc2UnLCBkZXN0PSd0ZXN0X3NvZnR3YXJlX2xheWVyX3NpZ25hdHVyZXMnLAotICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkaXNhYmxlIHNpZ25hdHVyZSBjaGVja2luZyBmb3Igc29mdHdhcmUgbGF5ZXJzJykKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctbicsICctLW5vLWF1dG8nLCBoZWxwPSdEaXNhYmxlIGF1dG8gbGF5ZXIgZGlzY292ZXJ5JywKLSAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCi0gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWQnLCAnLS1kZWJ1ZycsIGhlbHA9J0VuYWJsZSBkZWJ1ZyBvdXRwdXQnLAotICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJykKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcScsICctLXF1aWV0JywgaGVscD0nUHJpbnQgb25seSBlcnJvcnMnLAotICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJykKLQotICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1oJywgJy0taGVscCcsIGFjdGlvbj0naGVscCcsCi0gICAgICAgICAgICBkZWZhdWx0PWFyZ3BhcnNlLlNVUFBSRVNTLAotICAgICAgICAgICAgaGVscD0nc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdCcpCi0KLSAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQotCi0gICAgaWYgYXJncy5vdXRwdXRfbG9nOgotICAgICAgICBmaCA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIoYXJncy5vdXRwdXRfbG9nKQotICAgICAgICBmaC5zZXRGb3JtYXR0ZXIobG9nZ2luZy5Gb3JtYXR0ZXIoIiUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIikpCi0gICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKGZoKQotICAgIGlmIGFyZ3MuZGVidWc6Ci0gICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQotICAgIGVsaWYgYXJncy5xdWlldDoKLSAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuRVJST1IpCi0KLSAgICBpZiBub3QgJ0JVSUxERElSJyBpbiBvcy5lbnZpcm9uOgotICAgICAgICBsb2dnZXIuZXJyb3IoIllvdSBtdXN0IHNvdXJjZSB0aGUgZW52aXJvbm1lbnQgYmVmb3JlIHJ1biB0aGlzIHNjcmlwdC4iKQotICAgICAgICBsb2dnZXIuZXJyb3IoIiQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52IikKLSAgICAgICAgcmV0dXJuIDEKLSAgICBidWlsZGRpciA9IG9zLmVudmlyb25bJ0JVSUxERElSJ10KLSAgICBiYmxheWVyc2NvbmYgPSBvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICdjb25mJywgJ2JibGF5ZXJzLmNvbmYnKQotCi0gICAgbGF5ZXJzID0gZGV0ZWN0X2xheWVycyhhcmdzLmxheWVycywgYXJncy5ub19hdXRvKQotICAgIGlmIG5vdCBsYXllcnM6Ci0gICAgICAgIGxvZ2dlci5lcnJvcigiRmFpbCB0byBkZXRlY3QgbGF5ZXJzIikKLSAgICAgICAgcmV0dXJuIDEKLSAgICBpZiBhcmdzLmFkZGl0aW9uYWxfbGF5ZXJzOgotICAgICAgICBhZGRpdGlvbmFsX2xheWVycyA9IGRldGVjdF9sYXllcnMoYXJncy5hZGRpdGlvbmFsX2xheWVycywgYXJncy5ub19hdXRvKQotICAgIGVsc2U6Ci0gICAgICAgIGFkZGl0aW9uYWxfbGF5ZXJzID0gW10KLSAgICBpZiBhcmdzLmRlcGVuZGVuY3k6Ci0gICAgICAgIGRlcF9sYXllcnMgPSBkZXRlY3RfbGF5ZXJzKGFyZ3MuZGVwZW5kZW5jeSwgYXJncy5ub19hdXRvKQotICAgICAgICBkZXBfbGF5ZXJzID0gZGVwX2xheWVycyArIGxheWVycwotICAgIGVsc2U6Ci0gICAgICAgIGRlcF9sYXllcnMgPSBsYXllcnMKLQotICAgIGxvZ2dlci5pbmZvKCJEZXRlY3RlZCBsYXllcnM6IikKLSAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJzOgotICAgICAgICBpZiBsYXllclsndHlwZSddID09IExheWVyVHlwZS5FUlJPUl9CU1BfRElTVFJPOgotICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCIlczogQ2FuJ3QgYmUgRElTVFJPIGFuZCBCU1AgdHlwZSBhdCB0aGUgc2FtZSB0aW1lLiJcCi0gICAgICAgICAgICAgICAgICAgICAiIFRoZSBjb25mL2Rpc3RybyBhbmQgY29uZi9tYWNoaW5lIGZvbGRlcnMgd2FzIGZvdW5kLiJcCi0gICAgICAgICAgICAgICAgICAgICAlIGxheWVyWyduYW1lJ10pCi0gICAgICAgICAgICBsYXllcnMucmVtb3ZlKGxheWVyKQotICAgICAgICBlbGlmIGxheWVyWyd0eXBlJ10gPT0gTGF5ZXJUeXBlLkVSUk9SX05PX0xBWUVSX0NPTkY6Ci0gICAgICAgICAgICBsb2dnZXIuZXJyb3IoIiVzOiBEb24ndCBoYXZlIGNvbmYvbGF5ZXIuY29uZiBmaWxlLiJcCi0gICAgICAgICAgICAgICAgICAgICAlIGxheWVyWyduYW1lJ10pCi0gICAgICAgICAgICBsYXllcnMucmVtb3ZlKGxheWVyKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbG9nZ2VyLmluZm8oIiVzOiAlcywgJXMiICUgKGxheWVyWyduYW1lJ10sIGxheWVyWyd0eXBlJ10sCi0gICAgICAgICAgICAgICAgbGF5ZXJbJ3BhdGgnXSkpCi0gICAgaWYgbm90IGxheWVyczoKLSAgICAgICAgcmV0dXJuIDEKLQotICAgIHNodXRpbC5jb3B5ZmlsZShiYmxheWVyc2NvbmYsIGJibGF5ZXJzY29uZiArICcuYmFja3VwJykKLSAgICBkZWYgY2xlYW51cF9iYmxheWVycyhzaWdudW0sIGZyYW1lKToKLSAgICAgICAgc2h1dGlsLmNvcHlmaWxlKGJibGF5ZXJzY29uZiArICcuYmFja3VwJywgYmJsYXllcnNjb25mKQotICAgICAgICBvcy51bmxpbmsoYmJsYXllcnNjb25mICsgJy5iYWNrdXAnKQotICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIGNsZWFudXBfYmJsYXllcnMpCi0gICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBjbGVhbnVwX2JibGF5ZXJzKQotCi0gICAgdGQgPSB7fQotICAgIHJlc3VsdHMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCi0gICAgcmVzdWx0c19zdGF0dXMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCi0KLSAgICBsYXllcnNfdGVzdGVkID0gMAotICAgIGZvciBsYXllciBpbiBsYXllcnM6Ci0gICAgICAgIGlmIGxheWVyWyd0eXBlJ10gPT0gTGF5ZXJUeXBlLkVSUk9SX05PX0xBWUVSX0NPTkYgb3IgXAotICAgICAgICAgICAgICAgIGxheWVyWyd0eXBlJ10gPT0gTGF5ZXJUeXBlLkVSUk9SX0JTUF9ESVNUUk86Ci0gICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgIGxvZ2dlci5pbmZvKCcnKQotICAgICAgICBsb2dnZXIuaW5mbygiU2V0dGluZyB1cCBmb3IgJXMoJXMpLCAlcyIgJSAobGF5ZXJbJ25hbWUnXSwgbGF5ZXJbJ3R5cGUnXSwKLSAgICAgICAgICAgIGxheWVyWydwYXRoJ10pKQotCi0gICAgICAgIHNodXRpbC5jb3B5ZmlsZShiYmxheWVyc2NvbmYgKyAnLmJhY2t1cCcsIGJibGF5ZXJzY29uZikKLQotICAgICAgICBtaXNzaW5nX2RlcGVuZGVuY2llcyA9IG5vdCBhZGRfbGF5ZXJfZGVwZW5kZW5jaWVzKGJibGF5ZXJzY29uZiwgbGF5ZXIsIGRlcF9sYXllcnMsIGxvZ2dlcikKLSAgICAgICAgaWYgbm90IG1pc3NpbmdfZGVwZW5kZW5jaWVzOgotICAgICAgICAgICAgZm9yIGFkZGl0aW9uYWxfbGF5ZXIgaW4gYWRkaXRpb25hbF9sYXllcnM6Ci0gICAgICAgICAgICAgICAgaWYgbm90IGFkZF9sYXllcl9kZXBlbmRlbmNpZXMoYmJsYXllcnNjb25mLCBhZGRpdGlvbmFsX2xheWVyLCBkZXBfbGF5ZXJzLCBsb2dnZXIpOgotICAgICAgICAgICAgICAgICAgICBtaXNzaW5nX2RlcGVuZGVuY2llcyA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgaWYgbm90IGFkZF9sYXllcl9kZXBlbmRlbmNpZXMoYmJsYXllcnNjb25mLCBsYXllciwgZGVwX2xheWVycywgbG9nZ2VyKSBvciBcCi0gICAgICAgICAgIGFueShtYXAobGFtYmRhIGFkZGl0aW9uYWxfbGF5ZXI6IG5vdCBhZGRfbGF5ZXJfZGVwZW5kZW5jaWVzKGJibGF5ZXJzY29uZiwgYWRkaXRpb25hbF9sYXllciwgZGVwX2xheWVycywgbG9nZ2VyKSwKLSAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2xheWVycykpOgotICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1NraXBwaW5nICVzIGR1ZSB0byBtaXNzaW5nIGRlcGVuZGVuY2llcy4nICUgbGF5ZXJbJ25hbWUnXSkKLSAgICAgICAgICAgIHJlc3VsdHNbbGF5ZXJbJ25hbWUnXV0gPSBOb25lCi0gICAgICAgICAgICByZXN1bHRzX3N0YXR1c1tsYXllclsnbmFtZSddXSA9ICdTS0lQUEVEIChNaXNzaW5nIGRlcGVuZGVuY2llcyknCi0gICAgICAgICAgICBsYXllcnNfdGVzdGVkID0gbGF5ZXJzX3Rlc3RlZCArIDEKLSAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgaWYgYW55KG1hcChsYW1iZGEgYWRkaXRpb25hbF9sYXllcjogbm90IGFkZF9sYXllcihiYmxheWVyc2NvbmYsIGFkZGl0aW9uYWxfbGF5ZXIsIGRlcF9sYXllcnMsIGxvZ2dlciksCi0gICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9sYXllcnMpKToKLSAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdTa2lwcGluZyAlcyBkdWUgdG8gbWlzc2luZyBhZGRpdGlvbmFsIGxheWVycy4nICUgbGF5ZXJbJ25hbWUnXSkKLSAgICAgICAgICAgIHJlc3VsdHNbbGF5ZXJbJ25hbWUnXV0gPSBOb25lCi0gICAgICAgICAgICByZXN1bHRzX3N0YXR1c1tsYXllclsnbmFtZSddXSA9ICdTS0lQUEVEIChNaXNzaW5nIGFkZGl0aW9uYWwgbGF5ZXJzKScKLSAgICAgICAgICAgIGxheWVyc190ZXN0ZWQgPSBsYXllcnNfdGVzdGVkICsgMQotICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICBsb2dnZXIuaW5mbygnR2V0dGluZyBpbml0aWFsIGJpdGJha2UgdmFyaWFibGVzIC4uLicpCi0gICAgICAgIHRkWydiYnZhcnMnXSA9IGdldF9iYl92YXJzKCkKLSAgICAgICAgbG9nZ2VyLmluZm8oJ0dldHRpbmcgaW5pdGlhbCBzaWduYXR1cmVzIC4uLicpCi0gICAgICAgIHRkWydidWlsZGRpciddID0gYnVpbGRkaXIKLSAgICAgICAgdGRbJ3NpZ3MnXSwgdGRbJ3R1bmV0YXNrcyddID0gZ2V0X3NpZ25hdHVyZXModGRbJ2J1aWxkZGlyJ10pCi0gICAgICAgIHRkWydtYWNoaW5lcyddID0gYXJncy5tYWNoaW5lcwotCi0gICAgICAgIGlmIG5vdCBhZGRfbGF5ZXIoYmJsYXllcnNjb25mLCBsYXllciwgZGVwX2xheWVycywgbG9nZ2VyKToKLSAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdTa2lwcGluZyAlcyA/Pz8uJyAlIGxheWVyWyduYW1lJ10pCi0gICAgICAgICAgICByZXN1bHRzW2xheWVyWyduYW1lJ11dID0gTm9uZQotICAgICAgICAgICAgcmVzdWx0c19zdGF0dXNbbGF5ZXJbJ25hbWUnXV0gPSAnU0tJUFBFRCAoVW5rbm93biknCi0gICAgICAgICAgICBsYXllcnNfdGVzdGVkID0gbGF5ZXJzX3Rlc3RlZCArIDEKLSAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgcmVzdWx0ID0gdGVzdF9sYXllcl9jb21wYXRpYmlsaXR5KHRkLCBsYXllciwgYXJncy50ZXN0X3NvZnR3YXJlX2xheWVyX3NpZ25hdHVyZXMpCi0gICAgICAgIHJlc3VsdHNbbGF5ZXJbJ25hbWUnXV0gPSByZXN1bHQKLSAgICAgICAgcmVzdWx0c19zdGF0dXNbbGF5ZXJbJ25hbWUnXV0gPSAnUEFTUycgaWYgcmVzdWx0c1tsYXllclsnbmFtZSddXS53YXNTdWNjZXNzZnVsKCkgZWxzZSAnRkFJTCcKLSAgICAgICAgbGF5ZXJzX3Rlc3RlZCA9IGxheWVyc190ZXN0ZWQgKyAxCi0KLSAgICBpZiBsYXllcnNfdGVzdGVkOgotICAgICAgICBsb2dnZXIuaW5mbygnJykKLSAgICAgICAgbG9nZ2VyLmluZm8oJ1N1bW1hcnkgb2YgcmVzdWx0czonKQotICAgICAgICBsb2dnZXIuaW5mbygnJykKLSAgICAgICAgZm9yIGxheWVyX25hbWUgaW4gcmVzdWx0c19zdGF0dXM6Ci0gICAgICAgICAgICBsb2dnZXIuaW5mbygnJXMgLi4uICVzJyAlIChsYXllcl9uYW1lLCByZXN1bHRzX3N0YXR1c1tsYXllcl9uYW1lXSkpCi0KLSAgICBjbGVhbnVwX2JibGF5ZXJzKE5vbmUsIE5vbmUpCi0KLSAgICByZXR1cm4gMAotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRyeToKLSAgICAgICAgcmV0ID0gIG1haW4oKQotICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgIHJldCA9IDEKLSAgICAgICAgaW1wb3J0IHRyYWNlYmFjawotICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKLSAgICBzeXMuZXhpdChyZXQpCg==